Index: /MediaWiki/branches/1.11/AdminSettings.sample
===================================================================
--- /MediaWiki/branches/1.11/AdminSettings.sample	(revision 1280)
+++ /MediaWiki/branches/1.11/AdminSettings.sample	(revision 1280)
@@ -0,0 +1,31 @@
+<?php
+/**
+ * This file should be copied to AdminSettings.php, and modified
+ * to reflect local settings. It is required for the maintenance
+ * scripts which run on the command line, as an extra security
+ * measure to allow using a separate user account with higher
+ * privileges to do maintenance work.
+ *
+ * Developers: Do not check AdminSettings.php into Subversion
+ *
+ * @package MediaWiki
+ */
+
+/*
+ * This data is used by all database maintenance scripts
+ * (see directory maintenance/). The SQL user MUST BE
+ * MANUALLY CREATED or set to an existing user with
+ * necessary permissions.
+ *
+ * This is not to be confused with sysop accounts for the
+ * wiki.
+ */
+$wgDBadminuser      = 'wikiadmin';
+$wgDBadminpassword  = 'adminpass';
+
+/*
+ * Whether to enable the profileinfo.php script.
+ */
+$wgEnableProfileInfo = false;
+
+?>
Index: /MediaWiki/branches/1.11/COPYING
===================================================================
--- /MediaWiki/branches/1.11/COPYING	(revision 1280)
+++ /MediaWiki/branches/1.11/COPYING	(revision 1280)
@@ -0,0 +1,345 @@
+		    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 Library 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.
+
+		     END OF TERMS AND CONDITIONS
+
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
Index: /MediaWiki/branches/1.11/FAQ
===================================================================
--- /MediaWiki/branches/1.11/FAQ	(revision 1280)
+++ /MediaWiki/branches/1.11/FAQ	(revision 1280)
@@ -0,0 +1,5 @@
+The original MediaWiki FAQ can be found at
+http://meta.wikimedia.org/wiki/MediaWiki_FAQ.
+
+A newer version is available at
+http://www.mediawiki.org/wiki/Help:FAQ.
Index: /MediaWiki/branches/1.11/HISTORY
===================================================================
--- /MediaWiki/branches/1.11/HISTORY	(revision 1280)
+++ /MediaWiki/branches/1.11/HISTORY	(revision 1280)
@@ -0,0 +1,4036 @@
+﻿Change notes from older releases. For current info see RELEASE-NOTES.
+
+= MediaWiki release notes =
+
+Security reminder: MediaWiki does not require PHP's register_globals
+setting since version 1.2.0. If you have it on, turn it *off* if you can.
+
+
+== Changes since 1.8 ==
+
+* (bug 8200) Make category lists sorted by name when using Postgres.
+* (bug 7841) Support 'IGNORE' inserts for Postgres, fixes watchlist
+  adding problem.
+* (bug 6835) Removing the includes/Parser.php::getTemplateArgs() function,
+  because it seems to be unused.
+* (bug 7139) Increasing the visual width of the edit summary field on larger
+  screen sizes, for the default monobook skin.
+* Fix PHP notice and estimates for dumpBackup.php and friends
+* Improved register_globals paranoia checks
+* (bug 7545) Fix PHP version check on install
+* Disable PHP exception backtrace printing unless $wgShowExceptionDetails
+  is set. Backtraces may contain sensitive information in function call
+  parameters.
+* (bug 6164) Avoid smashing Cite state if message transformation triggers
+  during bad image list check, by skipping message transformation.
+  This isn't a good permanent fix.
+* (bug 6918) Stopped borders and backgrounds from showing through floated
+  tables in Monobook
+* (bug 6868) Un-hardcode section edit link style
+* (bug 3205) Stop right floats from stacking horizontally in non-Monobook skins
+* Added global $wgStyleVersion to centralize bumping CSS and JS file versions
+  for cache-friendly style and script updating
+* (bug 7562) Fix non-ASCII namespaces on Windows/XAMPP servers
+* Friendlier check for PHP 5 in command-line scripts; it's common for parallel
+  PHP 4 and 5 installations to interfere on the command-line.
+* Fix regression in autoconfirm permission check
+* (bug 3015) Add CSS ids to subcategory and page sections on category pages
+* (bug 7587) Fix erroneous id for specialpage tab, enabling informative popup
+* (bug 7599) Fix thumbnail purging, PHP notices on HTCP image page purge
+* (bug 7581) Update language name for cbk-zam
+* (bug 7444) Update namespace translations for Telugu (te), kept old values as
+  alias for compatibility
+* (bug 4525) Move section links down visually to same level as headings
+  (editsection links are now inside the heading elements)
+* Workaround for http://bugs.php.net/bug.php?id=31892 , PATH_INFO and hence
+  URLs of the style /index.php/Main_Page were broken on some CGI installations.
+* (bug 7623) Validate custom HTML id's correctly in Monobook interface
+* (bug 2241) Fix collision of 'w' and 'd' accesskeys
+* (bug 5795) CSS class added to body based on page name for page-specific
+  styling
+* (bug 6276) Stopped search field from getting too large in Cologne Blue
+* (bug 7644) User creations that are aborted by hooks shouldn't be counted
+  against account creations per day limit
+* (bug 7636) Show Firefox 2 users correct accesskey prefix
+* (bug 6427) Block blocked IPs from using the mail password function
+  to allow blocking of flooders
+* Include common.css from classic-style skins in main HTML with the bump URL
+* (bug 7607) Add Karakalpak (kaa) to Names.php and stub message file for linktrail
+* (bug 7582) Add 'tog-nolangconversion' to MessagesEn.php.
+  This key is need for languages with variants (zh, sr, kk)
+* (bug 7606) MediaWiki messages for "rss" and "atom" missing
+* (bug 7609) Add some more '*-summary' messages to MessagesEn.php with empty
+  strings to allow better localisation via Special:Allmessages. Mark this new
+  messages as optional for localisation.
+* Fix user_newpass upgrade for prefixed tables (reported by Fyren)
+* (bug 7663) Include language variant switcher links on Nostalgia skin
+* (bug 6531) Fix PHP fatal error on installation page with bad username input.
+* (bug 6977) Remove 404 link for autogenerated database documentation.
+* (bug 7369) Allow "Show Changes" without requiring edit token.
+* (bug 7687) Fix movetalk box checks itself when confirming a delete and move.
+* (bug 7684) Obey watchcreated preference for Special:Upload watch checkbox
+* (bug 7686) Include id attribute on delete form confirmation button
+* Allow compound interwiki prefixes in $wgImportSources
+* (bug 7304) Added redirect table to store redirect targets.
+* Added querycachetwo table (similar to querycache but has two titles)
+* PageArchive can now return a Revision object for more convenient processing
+  of deleted revision data
+* Added 'UndeleteShowRevision' hook in Special:Undelete
+* Error message on attempt to view invalid or missing deleted revisions
+* Remove unsightly "_" from namespace in Special:Allpages, Special:Prefixindex
+* (bug 3224) Allow minor edits by bots to skip new message notification on
+  user talk pages. This can be disabled by adjusting the 'nominornewtalk'
+  permission. Patch by Werdna.
+* (bug 7741) MATH: fixed broken syntax of underbrace etc. Fixed arrays
+* Fix purging for updated SVG files
+* (bug 7745) Add id attribute to search button in Monobook
+* (bug 7749) MATH: added some more LaTeX symbols, e.g. parallel, diamond, ast, ...
+* (bug 7304) Added code in Article.php to keep redirect table up to date.
+* Made special page names case-insensitive and localisable. Care has been taken
+  to maintain backwards compatibility.
+* Used special page subpages in a few more places, instead of query parameters.
+* (bug 7758) Added wrapper span to "templates used" explanation to allow CSS
+  styling (class="mw-templatesUsedExplanation").
+* Added {{#special:}} parser function, to give the local default title for
+  special pages
+* (bug 7766) Remove redundant / from AJAX requests, can break some servers
+* Add tab links from extensions to classic-based skins (SkinTemplateTab hook)
+  Provides better cross-skin compatibility for extensions using the modern
+  skin hooks, such as Oversight
+* Moved variant language links on Cologne Blue and Nostalgia to before the
+  login/logout link
+* Fix for parser tests with MySQL 5 in strict mode
+* Added block option "enable autoblocks"
+* Amend Special:Ipblocklist to note when a block has autoblock DISABLED.
+* (bug 7780) Fix regression in editing redirects
+* Add whitespace above "templates included on this page" using CSS, not
+  hardcoded line break.
+* Remove entries from redirect table on article deletion
+* (bug 7788) Force section headers in new section links for users who have
+  'prompt for blank edit summaries' on.
+* (bug 1133) Special:Emailuser: add an option to send yourself a copy of your mail.
+* (bug 461) Allow "Categories:" link at bottom of pages to be customized via
+  pagecategorieslink message.
+* Sort the list of skins in "My Preferences" -> Skins by alphabetical order.
+* (bug 7785) Postgres compatibility for timestamps in RC feeds
+* (bug 7550) Normalize user parameter normally on Special:Log
+* (bug 7294) Fix PATH search for diff3 on install
+* Various fixes related to the blocking change re: autoblocks. On inserting
+  an IP block, the ipb_enable_autoblock field is now automagically blanked,
+  because it doesn't make any sense for an IP. Additionally, IP blocks
+  without the ipb_enable_autoblock option no longer show up as "autoblock
+  disabled" on Special:Ipblocklist.
+* (bug 7774) MATH: aded more amstex functions
+* (bug 1182) MATH: fixed inconsistent rendering of upper case Greek letters in TeX
+* Fix regression in streaming page dump generation
+* (bug 7801) Add support for parser function hooks in parser tests
+* checkUsernames.php now uses wfDebugLog instead of hardcoded path to log
+* (bug 7810) Update talk namespaces for Occitan
+* Allow case-sensitive URLs to be used for uploading from URLs.
+* (bug 1109) Correct fix for compressed 304 responses when additional output
+  buffers have been installed within the compression handler
+* (bug 7819) Move automatic redirect edit summary after pre-save transform
+  to work properly with subst: fun
+* (bug 7826) Fix typos in two English messages.
+* (bug 5365) Stop users being prompted to enter an edit summary for null edits,
+  if they have selected that option in preferences.
+* (bug 5936) Show an 'm' to the left of the edit summary on diff pages for minor edits.
+* (bug 7820) Improve error reporting for uploads via URL.
+* (bug 5149) When autoblocks are enabled, retroactively apply an autoblock to the most
+  recently used IP of a user when they are blocked.
+* Add an index on (rc_user_text,rc_timestamp) on the recentchanges table. This will
+  make CheckUser.php and the new retroactive autoblock functionality faster.
+* Fix regression in Special:Undelete for revisions deleted under MediaWiki 1.4
+  with compression or legacy encoding
+* (bug 6737) Fixes for MySQL 5 schema in strict mode
+* Approximate height for client-side scaling fallback instead of passing -1
+  into the HTML output.
+* Make the DNSBL to check for proxy blocking configurable via $wgSorbsUrl
+* Add experimental recording/reporting mode to parser tests runner, to
+  compare changes against the previous run.
+  Additional tables 'testrun' and 'testitem' are in maintenance/testRunner.sql,
+  source this and pass --record option to parserTests.php
+* Make the set of default parser test input files extensible via
+  $wgParserTestFiles. This can now be appended to by extensions or local
+  configuration files so that extension or custom tests can be automatically
+  run along with the main batch.
+* Run PHP install version checks on update.php so command-line updaters see
+  new version requirements
+* Do a check for the PHP 5.0.x 64-bit bug, since this is much more disruptive
+  as of MW 1.8 than it used to be. Install or upgrade now aborts with a
+  warning and a request to upgrade.
+* (bug 6440) Updated indexes to improve backlinking queries (links, templates, images)
+* Switched 'anon-only' block mode to default for IP blocks
+* (bug 3687, 7892) Add distinct heading for media files in category display,
+  with count.
+* (bug 1578) Add different icons for external links to audio, video, or PDF in
+  Monobook.
+* Made autoblocks block account creation if the user block has that option enabled.
+* Add auto-summaries to blankings and large removals without summaries.
+* (bug 7811) Allow preview of edit summaries.
+* (bug 6839) Wikibits.js minor changes to make JS-lint happier.
+* (bug 7932) Make sure that edit toolbar clears floats so it appears correctly.
+* (bug 6873) When viewing old revisions, add link to diff to current version.
+* (bug 3315) Provide rollback link directly on history page.
+* Replace 'old-revision-navigation' message with 'revision-info' and
+  'revision-nav' messages, wrapped in divs with appropriate id's.
+* (bug 4178) MediaWiki:Common.js will now be included for all users if
+  $wgUseSiteJs is enabled, in addition to (if applicable) MediaWiki:Monobook.js
+  and user JS subpages.
+* (bug 7918) "Templates used on this page" changes during preview to reflect
+  any added or removed templates, and works as expected for section edits.
+* (bug 7919) "Templates used on this page" is now shown for read-only pages.
+* (bug 7688) When viewing diff, section anchors in autosummary jump to section
+  on current page instead of loading the latest version.
+* (bug 7970) Use current connection explicitly on Database::getServerVersion
+* (bug 2001) Tables with class="sortable" can now be dynamically sorted via
+  JavaScript.
+* Added autosummary for new pages with 500 or less characters, and refactor
+   the autosummary code so it's all done in one function. doEdit is getting too
+   big!
+* (bug 7554) The correct MIME type for SVG images is now displayed on the
+  image page (image/svg+xml, not image/svg).
+* (bug 7883) Added autoblock whitelisting feature, using which specific ranges
+   can be protected from autoblocking. These ranges are specified, in list format,
+   in the autoblock_whitelist system message.
+* Added placeholders for text injection by hooks to EditPage.php
+* (bug 8009) Automatic edit summary for redirects is not filled for edits in existing pages
+* Installer support for experimental MySQL 4.1/5.0 binary-safe schema
+* Use INSERT IGNORE for db-based BagOStuff add/insert, for more memcache-like
+  behavior when keys already exist on add (instead of dying with an error...)
+* Add a hook 'UploadForm:initial' before the upload form is generated, and two
+  member variable for text injection into the form, which can be filled by the hooks.
+* (bug 6295) Add a "revision patching" functionality, where an edit can be undone
+  (with a functionality similar to diff rev1 rev2 | patch -R rev3 -o rev3).
+  This is triggered by including &undo=revid in an edit URL. A link to a URL
+  that will undo a given edit is shown on NEW revision headers on diff pages.
+  The link leads to a "Show Changes" page showing what will be done to undo the
+  edit.
+* Fix display of link in "already rolled back" message for image/category pages
+* (bug 6016) Left-aligned images should stack vertically, like right-aligned
+  images, not horizontally.
+* Patch from LeonWP: added UploadForm:BeforeProcessing hook in SpecialUpload.php
+* Add AuthPluginSetup hook to override $wgAuth after configuration
+* Fix regression in authentication hook auto-creation on login
+* (bug 8110) Allow spaces in ISBNs
+* (bug 8024) Introduce "send me copies of emails I send to others" preference
+* Added 'EditPage::attemptSave' hook before an article is saved.
+* (bug 8083) Applied patch for sk localisation
+* Add a backslash character to the edit token, to prevent edits via certain
+  broken proxies that mangle such characters in form submissions
+* (bug 7461) Allow overwriting pages using importTextFile.php
+* (bug 7946) importTextFile.php doesn't perform pre-save transform
+* (bug 8117) {{REVISIONTIMESTAMP}} showed weird default if $wgLocalTZoffset set;
+  now uses current time for previews and if timestamp can't be loaded from DB
+* {{REVISIONTIMESTAMP}} now uses site local timezone instead of user timezone
+  to ensure consistent behavior
+* {{REVISIONTIMESTAMP}} and friends should now work on non-MySQL backends
+* (bug 7671) Observe canonical media namespace prefix in Linker::formatComment
+* Added js variable wgCurRevisionId to the output
+* (bug 8141) Cleanup of Parser::doTableStuff, patch by AzaTht
+* (bug 8042) Make miser mode caching limits settable via $wgQueryCacheLimit
+  instead of hardcoding to 1000
+* Enable QueryPage classes to override list formatting
+* (bug 5485) Show number of intervening revisions in diff view
+* (bug 8100) Fix XHTML validity in Taiwanese localization
+* Added redirect to section feature. Use it wisely.
+* Added a configuration variable allowing the "break out of framesets" feature
+  to be switched on and off ($wgBreakFrames). Off by default.
+* Allow Xml::check() $attribs parameter to override 'value' attribute
+* DB schema change: added two columns (rc_old_len and rc_new_len) to the recentchanges table to store
+  the text lengths before and after the edit
+* (bug 1085) Made Special:Recentchanges show the character difference between the changed revisions
+* Removed a redundant <strong> tag from diff pages that was causing display issues for some users
+* (bug 8203) The keyboard shortcut for "log out" was removed, because users were pressing it
+  when they intended to press the shortcut for "preview".
+* (bug 8148) Handle non-removable output buffers gracefully when cleaning
+  buffers for HTTP 304 responses, StreamFile, and Special:Export.
+  Duplicated code merged into wfResetOutputBuffers() and wfClearOutputBuffers()
+* Special:AllPages : 'next page' link now point to the first title of the next
+  chunk instead of pointing to the last title of current chunk.
+* (bug 4673) Special:AllPages : add a 'previous' link (new message 'prevpage')
+* (bug 8121) wfRandom() was not between 0 and 1
+* Add static method Parser::createAssocArgs($args), so parser functions can
+  use the same code to parse arguments as the templates do.
+* Change behavior of logins using the temporary e-mailed password (as stored
+  in user_newpassword hash field). Instead of just logging in silently and
+  leaving the previous user_password field in place indefinitely, the user
+  is now prompted to set a new password.
+
+  The password-changing form is at Special:Resetpass; currently it's only
+  usable for changing from the temporary password during login, but it
+  could perhaps be generalized, replacing the subform in preferences.
+
+  Once the new password is set successfully, the temporary password is wiped
+  so it cannot be used to login a second time, and the login process
+  is completed.
+* Suppress 'mail new password' button on login form if $wgAuth forbids
+  changing user passwords; it wouldn't work very well...
+* Consolidate password length checks and $wgAuth manipulation into
+  User::setPassword() to avoid duplicate code in different places
+  that set passwords.
+* User::setPassword() now throws PasswordError exceptions if the password
+  is illegal or cannot be set via $wgAuth. These can be caught and a human-
+  readable error message displayed by UI code.
+* Added Title::isSubpage()
+* (bug 8241) Don't consider user pages of User:Foo.css to be CSS subpages
+* Set an explicit class on framed thumbnail inner divs and images, changed some
+  CSS to use these instead of using descendent selectors.
+* Accept null parameter to User::setPassword() as indicating the password
+  field should be cleared to an unusable state. Login will only be possible
+  after the password is reset, for instance by e-mail.
+* (bug 6394) Invalidate the password set for "by e-mail" account creations
+  to avoid accidental empty password creations.
+* Made the show change size function work on page moves, page creations, and
+  log entries. Also fixed it in the javascript recentchanges.
+* (bug 8239) correctly get 50 new contributions when clicking '(50 next)'
+* (bug 2259) Fix old regression where e-mail addresses were no longer
+  confirmed on login with mailed password.
+* Add a notification about the confirmation mail sent during account
+  creation, so people don't immediately go off to request a second one.
+* Add a warning on Special:Confirmemail if a code was already sent and has
+  not yet expired.
+* Add user_editcount field to provide data for heuristics on account use.
+  Incremented on edit, with lazy initialization from past revision data.
+  Can batch-initialize with maintenance/initEditCount.php (not yet friendly
+  to replication environments, this will do all accounts in one query).
+* Allow raw SQL subsections in Database::update() SET portion as well as
+  for WHERE portion. Handy for increments and such.
+* User::getOption now accept a default value to override default user values
+  this makes it consistent with WebRequest::get* methods. Corrected code in
+  various places accordingly.
+* (bug 8264) Fix JavaScript global vars for XHTML mode
+* Make $wgSiteNotice value wikitext again, for consistency with editable
+  MediaWiki:Sitenotice and MediaWiki:Anonnotice.
+* (bug 8044) When redirecting from the canonical name of the special page
+  to the localised one, parameters/subpages are omitted
+* (bug 8164) Special:Booksources should use GET for form submission
+* Rewrite Special:Booksources to clean up interface and remove redundant code
+* (bug 7925) Change Special:Allmessages message name filter javascript to be
+  a bit more responsive and easier on the CPU
+* (bug 4488) Support watching pages on deletion; introduces new user preference
+* Minor restructuring of Special:Preferences; "watch pages I edit" and "watch
+  pages I create" options now accessible under "Watchlist" options
+* (bug 8153) <nowiki> doesn't work in site notice
+* (bug 6690) wfMsgNoTrans() transforms messages
+* (bug 8274) Wrap edit tools in a <div> with a specified class
+* Detect PHP 5.0.x 64-bit bug and abort in WebStart.php; too many things break
+  mysteriously otherwise (detection code copied from install-utils.inc)
+* (bug 8295) Change handling of <center> tags in doBlockLevels() to match that
+  of <div>
+* (bug 8110) Make magic ISBN linking stricter: only match ten-digit sequences
+  (plus optional ISBN-13 prefix) with no immediately following alphanumeric
+  character, disallow multiple consecutive internal redirects
+* (bug 2785) Accept optional colon prefix in links when formatting comments
+* Don't show "you can view and copy the source of this page" message for
+  pages which don't exist
+* (bug 8310) Blank line added to top of 'post' when page is blank
+* (bug 8109) Template parameters ignored in "recentchangestext"
+* Gracefully skip redirect-to-fragment on WebKit versions less than 420;
+  it messes up on current versions of Safari but is ok in the latest
+  nightlies. Checking the version number will allow it to automatically
+  work when new releases of Safari appear.
+* Fix regression in thumb styles; size and padding didn't match with
+  new arrangement.
+* (bug 8333) Fix quick user data update on login password change on
+  replication database setups. User data is now pulled from master
+  instead of slave in User::loadFromDatabase, ensuring that it is
+  fresh and accurate when read and then saved back into cache.
+  This was breaking with the Special:Rename operation which
+  automatically logs the user in with the new password after changing
+  it; pulling from slave meant the record was often not the updated
+  one.
+* (bug 8335) Set image width to the first valid parameter found.
+* (bug 8350) Fix watchlist viewing bug when using Postgres.
+* (bug 6603) When warning about invalid file extensions, output the bit
+  of the extension we actually checked
+* (bug 7669) Drop defaults on BLOB/TEXT columns for better compatibility
+  with MySQL's strict mode, often enabled by the Windows installer.
+  The defaults are ignored anyway when strict mode is off...
+* (bug 7685) Use explicit values for ar_text and ar_flags when deleting,
+  for better compatibility with MySQL's strict mode
+* Update default interwiki values to reflect changed location of ursine:
+* (bug 5411) Remove autopatrol preference
+* Users who have the "autopatrol" permission will have their edits marked as
+  patrolled automatically
+* Users who do not have the "autopatrol" permission will no longer be able
+  to mark their own edits as patrolled
+* Introduce 'PingLimiter' hook; see docs/hooks.txt for more information
+* (bug 532) Tweaked alt text for some interface messages
+* (bug 8231) Gave useful alt text to the main <img> on image pages
+* (bug 371) Remove alt text for "Enlarge" icon on thumbnails
+* Initialize user_editcount to 0 instead of NULL for newly created accounts
+* (bug 3696) Strip LRM and RLM characters from titles to work around the
+  problem some people have where titles cut-and-pasted from lists include
+  the bidi override characters appended to the lists.
+  A more thorough blacklist for forbidden and translatable characters would
+  be wise, though, as might a cleaner method for the lists in the first place.
+* Fix regression in email password resets on read-restricted sites
+* Set tabindex on fields in deletion form so you don't have to tab through
+  the links in the sitenotice
+* (bug 8271) Show full time and date on viewer for individual deleted
+  revisions
+* (bug 8214) Output file size limit and actual file size in appropriate units
+  on Special:Upload
+* (bug 8016) Purge objectcache table during upgrade processes - use the --nopurge
+  option to prevent this when running maintenance/update.php
+* (bug 7612) Remove superfluous link to Special:Categories from result items
+  on Special:Mostcategories
+* {{PLURAL:}} now handles formatted numbers correctly
+* (bug 8331) Added the change size value to watchlists; therefore made
+  watchlists use RecentChange::newFromRow() instead of newFromCurRow()
+* (bug 8351) Fix undo for simple reverts
+* (bug 6856) User::clearNotification() does not respect read-only mode
+* (bug 6853) Use a checkbox on the installer form to indicate that a superuser
+  account should be used; this is clearer than the old check which relied on
+  the password never being an obscure value
+* Remove old unused watchlist cache, which was a leftover from the old schema
+  where watchlists were more expensive to generate
+* Minor cosmetic changes to Special:Userrights
+* Added wgCanonicalSpecialPageName to JavaScript variables
+* Fix image deleting when using Postgres.
+* Output both source and destination titles in maintenance/moveBatch.php
+* Added basic parser tests for language variants
+* Enable selflinks and categories to be written in some of the language variants
+* Prevent conversion of JavaScript code in language variants
+* Output software version number in maintenance/parserTests.php
+* (bug 7169) Use Ajax to watch/unwatch articles if enabled
+* Make variant table caching a little more robust, using main language code
+  in cache key. Probably this is still a bit wonky, though. Was breaking
+  parser tests when Chinese tables were getting loaded into Serbian code.
+* (bug 8380) Be nicer about blank lines in deleteBatch.php
+* (bug 8401) Fix regression in SORBS lookup for some DNS setups
+* Use raw file descriptor in posix_isatty() check to avoid warning on
+  Linux systems with at least some versions of PHP
+* (bug 5908) Allow overriding the default category sort key for all items on
+  a page using {{DEFAULTSORT}}
+* (bug 6449) Throw a more definitive error message when installation fails
+  due to an invalid database name
+* (bug 5827) Use full text for option link labels on Special:Watchlist
+* (bug 8018) Allow hiding minor edits from the watchlist
+* (bug 8427) MonoBook RTL IE 7.0 tweaks failed when sidebar's navigation
+  section is renamed; no longer relies on first section name
+* Stabilize client-side table sorting even if the underlying Javascript sort()
+  implementation is unstable
+* Add hook for extensions to add user information to the panel in preferences,
+  next to the user name and ID.
+* (bug 8392) Display protection status of transcluded pages in the edit page
+  template list. Patch by Fyren, with i18n naming tweak.
+* Fix for interwiki transclusion where target wiki uses query string for title
+* Resolve namespaces on interwiki Title objects using canonical namespace names
+  if possible (should not happen, though, outside interwiki transclusion... and
+  maybe not even then, but it does)
+* (bug 8447) Fix SQL typo breaking non-default $wgHitcounterUpdateFreq
+* Do not allow previews of deleted images to be cached
+* Add global variable $wgDefaultLanguageVariant used to set the default language
+  variant of a wiki to something different than the main language code
+* Add 'variant' option to parserTests - runs test with the given variant as
+  preferred, utilize it for more parser tests of language variants code
+* (bug 6503) Fix bug that stopped certain irrelevant links from being hidden
+  for printing
+* Avoid PHP warning in Creative Commons metadata when a creative commons
+  license is not actually set up
+* (bug 8463) Don't print external link icons for Monobook
+* (bug 8461) Support watching pages on move
+* (bug 8041) Work around bug with debug_backtrace when Zend Optimizer is
+  loaded by skipping the function. Use wfDebugBacktrace() wrapper function.
+* Reduce config file clutter by setting various script and upload paths
+  based on $IP or $wgScriptPath in Setup.php. They can still be explicitly
+  overridden in LocalSettings.php if desired...
+* Attempt to detect redirect loops for the canonical title redirect, and
+  give some hints to the poor confused administrator.
+* Introduce new flag 'R' - raw output for language variant escape tags
+* Advise users when updates for a query page have been disabled using
+  $wgDisableQueryPageUpdate
+* (bug 8413) Improve comments for $wgNamespaceRobotPolicies
+* (bug 8330) Show "bytes" suffix on recent changes diff counter
+  optionally... if set in rc-changes-size message (default empty for now)
+* (bug 8489) Support basic links in <gallery> caption attribute
+* (bug 8485) Correct Lingala number formatting
+* The MediaWiki namespace is no longer pre-filled with default messages on
+  install. All default messages will be removed from the MediaWiki namespace
+  on upgrade.
+* Recentchanges RSS/Atom feeds now use a separate message for the description
+  to avoid cluttering it with useless wiki formatting
+* (bug 8417) Handle EXIF unknown dates
+* (bug 8372) Return nothing on empty <math> tags.
+* New maintenance script to show the cached statistics : showStats.php.
+* Count deleted edits when regenerating total edits in maintenance/initStats.php
+* (bug 3706) Allow users to be exempted from IP blocks. The ipblock-exempt permission
+  key has been added to enable this behaviour, by default assigned to sysops.
+* (bug 7948) importDump.php now warn that Recentchanges need to be rebuild.
+* (bug 7667) allow XHTML namespaces customization
+* (bug 8531) Correct local name of Lingála (patch by Raymond)
+* Fix regression with default lock file and cache directories; threw visible
+  warning with open_basedir
+
+
+== 1.8 Compatibility changes ==
+
+=== Zend Optimizer ===
+
+A bug in some versions of PHP 5 and Zend Optimizer which was triggered under
+MediaWiki 1.8.x has been worked around by disabling some internal debugging
+features when Zend Optimizer is loaded. This should solve some common
+"blank page" problems.
+
+=== PHP 5.0 64-bit ===
+
+MediaWiki now checks for a condition where PHP 5.0.x corrupts array data
+on 64-bit systems and warns you to upgrade PHP to solve the problem. This
+bug causes Special: pages to fail on affected systems under MediaWiki 1.8
+and higher, and subtler data corruption on earlier versions.
+
+The only known workaround is to upgrade PHP to 5.1 or later, which you
+probably should do anyway for security reasons!
+
+=== MySQL 5 ===
+
+MediaWiki should now install and run correctly on MySQL 5.0 and higher when
+MySQL's "strict mode" is enabled. (This is now the default for many Windows
+installations, though it seems to remain off by default on Unix.)
+
+This fixes errors about "cannot default default value for BLOB/TEXT fields".
+
+=== ImageMagick ===
+
+Note that ImageMagick older than 6.x may no longer work for image resizing
+due to use of the -thumbnail option.
+
+
+== 1.8 Behavior changes ==
+
+=== Localized special pages ===
+
+The names of Special: pages can now be localized, so links and URLs to them
+are more legible in languages that aren't English.
+
+Not all languages have included localized names yet.
+
+=== E-mail password ===
+
+Users are now required to set a new password for themselves when they first
+log in with a newly generated e-mailed password.
+
+Requesting passwords frequently is prevented to reduce abusive mailbombing.
+
+=== Undo revision ===
+
+An "undo" link now appears in diff view for easier reverting of older edits.
+When GNU diff3 is available for edit conflict merging, this can make it much
+easier to "undo" the changes of an older edit when there are surrounding
+changes elsewhere in the page.
+
+The changes must be manually reviewed and approved, as with conventional
+full-revision reverts.
+
+=== Blocking ===
+
+User blocks can be set to disable the automatic blocking of IP addresses the
+account logs in with.
+
+
+== 1.8 Database changes ==
+
+* new 'redirect' table stores data on page redirects
+* new 'querycachetwo' table used for some cached special pages
+* 'ipblocks' table adds 'ipb_enable_autoblock'
+* 'recentchanges' table adds 'rc_old_len', 'rc_new_len' for size tracking
+* 'user' table has added 'user_newpass_time' and 'user_editcount' fields
+* some indexes have been updated on 'recentchanges'
+
+== 1.8 Configuration changes ==
+
+Several configuration options have changed since 1.8:
+
+=== $wgEnableAPI ===
+
+The experimental machine API interface is now enabled by default, read-only.
+You can disable it by setting $wgEnableAPI = false; in LocalSettings.php.
+
+=== $wgPathInfo ===
+
+The use of PATH_INFO (the text after the script name in 'index.php/Blah')
+is controlled by the $wgUsePathInfo setting. This is now explicitly disabled
+for CGI, apache2filter, and ISAPI configurations of PHP, for more consistency
+with the autodetection from the installer.
+
+In some rarer configurations you may have to switch $wgUsePathInfo from false
+to true or, perhaps, from true to false to make things work properly if bad
+PATH_INFO data comes through the server.
+
+The wiki now tries to detect this condition and should show you an error
+message describing what to change instead of sending the browser into an
+infinite redirect loop.
+
+=== $wgScript and other path settings ===
+
+The following configuration variables are now automatically set in Setup.php
+if they are not overridden in LocalSettings.php:
+
+from $wgScriptPath:
+ + $wgScript
+ |  \- $wgArticlePath
+ + $wgRedirectScript
+ + $wgStylePath
+ + $wgUploadPath
+    \- $wgLogo
+     + $wgMathPath
+
+from $IP:
+ - $wgStyleDirectory
+ + $wgUploadDirectory
+   \- $wgMathDirectory
+    + $wgTmpDirectory
+
+Newly generated configuration files will by default include only $wgScriptPath
+(hardcoded from the installer) and $IP (detected at runtime).
+
+Old configuration files which specify all these values explicitly should
+continue to work just fine, but if you use the defaults you can remove them
+to reduce clutter.
+
+=== $wgGroupPermissions ===
+
+The sysop group now holds the "autopatrol" and "ipblock-exempt" rights by
+default.
+
+"autopatrol" replaces the preference for marking ones own edits patrolled
+by default; users holding this permission will automatically have their
+edits patrolled, while others cannot mark their own edits as patrolled
+even if they have patrolling rights.
+
+"ipblock-exempt" excludes the user from IP blocks; accounts which are blocked
+explicitly by name will still be blocked, however. This is given to sysops
+to minimize annoyance from accidental "collateral damage"; remember that a
+sysop will be able to lift the block if they desire.
+
+The bot group now holds the "nominornewtalk" right. A user with this right
+will not trigger new message notifications when making minor edits to user
+talk pages. This is meant to minimize annoyance from maintenance bot
+processes.
+
+=== $wgUseWatchlistCache ===
+
+Watchlist caching has been removed. The feature was not maintained, and has
+been unnecessary since switching to the 'recentchanges' database table
+reduced server pressure for Wikipedia's watchlists.
+
+=== $wgBreakFrames ===
+
+MediaWiki in the past attempted to detect when it was embedded in a frameset
+and "break out" of it, assuming it to be hostile.
+
+This behavior is now disabled by default, but can be reenabled by setting
+$wgBreakFrames to true in LocalSettings.php.
+
+
+== 1.8 New settings ==
+
+=== $wgVariantArticlePath ===
+
+For languages with script variant support (Chinese, Serbian, and others),
+it's possible to use alternate URL paths to select the variant for article
+display, setting $wgVariantArticlePath.
+
+Documentation for this setting would be useful.
+
+=== $wgMaxMsgCacheEntrySize ===
+
+The message cache can now skip items larger than a given size; this allows
+it to better handle the primary caching case when large CSS and JS blobs are
+present.
+
+=== $wgStyleVersion ===
+
+When making significant changes to skin stylesheets and JavaScript files,
+you can append a string to this variable to tweak the generated URLs,
+forcing newly rendered pages to bring in a fresh version despite server-
+or browser-side caching.
+
+Normally this will be set in the course of MediaWiki development, but
+if doing development on a custom skin you may wish to poke it as well.
+
+=== $wgRCShowChangedSize ===
+
+Special:Recentchanges and Special:Watchlist now show the number of bytes
+added or removed to an article to give an idea of the size of the edit.
+This information was previously available only in the IRC update feeds.
+
+To disable this site-wide, set $wgRCShowChangedSize to false.
+(Individual users can suppress the data in custom CSS.)
+
+Adjust $wgRCChangedSizeThreshold to trigger highlighting of particularly
+large changes.
+
+The formatting of the size figure can be adjusted through the
+[[MediaWiki:Rc-change-size]] message.
+
+=== $wgQueryCacheLimit ===
+
+The number of rows stored for "expensive" special pages in miser mode
+can now be adjusted up or down from the default 1000.
+
+=== $wgDisableQueryPageUpdate ===
+
+Individual "expensive" special pages can be skipped in processing by
+updateSpecialPages if added to this list.
+
+=== $wgSorbsUrl ===
+
+The base hostname for the DNS-based proxy blacklist can now be overridden
+when $wgEnableSorbs is set, to use a different blacklist instead of SORBS.
+The blacklist would need to respond the same was as SORBS; any positive
+response will be taken as a proxy.
+
+=== $wgAjaxWatch ===
+
+Experimental AJAX mode for the watch/unwatch tabs to execute inline.
+Does not include the UI messages describing how to reach the watchlist,
+so you may not want it on a general-audience site just yet.
+
+=== $wgParserTestFiles ===
+
+MediaWiki's parser test suite can now be expanded with additional test
+files. Custom extensions can add their test files to this array, and
+they will be run along with the main tests by maintenance/parserTests.php
+
+
+== Changes since 1.7 ==
+
+* Introduced AjaxResponse object, superceding AjaxCachePolicy
+* Changes to sajax_do_call: optionally accept an element to fill instead of a
+  callback function; take the target function or element as a third parameter;
+  pass the full XMLHttpRequest object to the handler function, instead of just
+  the resultText value; use HTTP response codes to report errors.
+* (bug 6562) Removed unmaintained ParserXml.php for now
+* History paging overlap bug fixed
+* (bug 6586) Regression in "unblocked" subtitle
+* Don't put empty-page message into view-source when page text is blank
+* (bug 6587) Remove redundant "allnonarticles" message
+* Block improvements: Allow blocks on anonymous users only. Optionally allow 
+  or disallow account creation from blocked IP addresses. Prevent duplicate
+  blocks. Fixed the problem of expiry and unblocking erroneously affecting
+  multiple blocks. Fixed confusing lack of error message when a blocked user
+  attempts to create an account. Fixed inefficiency of Special:Ipblocklist in 
+  the presence of large numbers of blocks; added indexes and implemented an 
+  indexed pager.
+* (bug 6448) Allow filtering of Special:Newpages according to username
+* (bug 6618) Improve permissions/error detection in Special:Lockdb
+* Quick hack for extension testing: parser test doesn't create new message
+  cache object.
+* (bug 6299) Maintain parser's revision ID across recursive calls to fix
+  {{REVISIONID}} when Cite extension is used
+* (bug 6622) Removed deprecated function Image::newFromTitle
+* (bug 6627) Fix regression in Special:Ipblocklist with table prefix
+* Removed forced dereferencements (new() returns a reference in PHP5)
+* Note about $wgUploadSizeWarning using byte
+* (bug 6592) Add most viewed pages summary to Special:Statistics
+* Pre-strip characters ignored in IDNs from URLs so they can't be used
+  to break the blacklists for regular URLs
+* Fix regression in blocking of user accounts
+* (bug 6635) Fix regression searching for range blocks on Ipblocklist
+* Fix regression searching Ipblocklist with ugly URLs
+* (bug 6639) Use a consistent default for upload directories
+* Preserve entered reason when reporting unconfirmed lock on Special:Lockdb
+* (bug 6642) Don't offer to unlock the database when it isn't locked
+* cleanupTitles.php changed from --dry-run option to --fix, so default
+  behavior is now a non-invasive check as with namespaceDupes.php
+* (bug 6660) Fix behaviour of EditPage::blockedPage() when the article does
+  not exist; now doesn't show the source box if the user hasn't provided it
+  (blocked mid-edit) and the page doesn't exist
+* Improve default value of "blockedtext"
+* (bug 6680) Added localisation for Dutch bookstore list (nl)
+* Renamed maintainace script redundanttrans.php to unusedMessages.php - clearer usage
+* Fix regression which allowed some blocked users to create additional accounts
+* (bug 6657) Fix Hungarian linktrail
+* (bug 6751) Fix preview of blanked section with edit on first preview option
+* (bug 5456) Separate MediaWiki:Search into messages for both noun and verb,
+  introduced 'MediaWiki:Searchbutton'
+* Made lines from initialiseMessages() appear as list items during installation
+* Moved the bulk of the localisation data from the Language*.php files to the
+  Messages*.php files. Deleted most of the Languages*.php files.
+* Introduced "stub global" framework to provide deferred initialisation of core
+  modules. 
+* Removed placeholder values for $wgTitle and $wgArticle, these variables will
+  now be null during the initialisation process, until they are set by index.php
+  or another entry point.
+* Added DBA cache type, for BDB-style caches. 
+* Removed custom date format functions, replacing them with a format string in
+  the style of PHP's date(). Used string identifiers instead of integer
+  identifiers, in both the language files and user preferences. Migration should
+  be transparent in most cases.
+* Simplified the initialisation API for LoadBalancer objects.
+* Removed the broken altencoding feature.
+* Moved default user options and toggles from Language to User. Language objects
+  are still able to define default preference overrides and extra user toggles, 
+  via a slightly different interface.
+* Don't include the date option in the parser cache rendering hash unless
+  $wgUseDynamicDates is enabled.
+* Merged LanguageUtf8 with Language. Removed LanguageUtf8.php. 
+* Removed inclusion of language files from the bottom of Language.php. This is
+  now consistently done from Language::factory(). 
+* Add the name of the executing maintenance script to the debug log. Start the
+  profiler during maintenance scripts.
+* Added "serialized" directory, for storing precompiled data in serialized form.
+* Fix regression in auto-set NS_PROJECT_TALK namespace
+* Fix regression in ordering of namespaces
+* (bug 6806, 6030) Added several global JS variables for article path, user name,
+  page title, etc. 
+* hooks registered with addOnloadHook are now called at the one of the html body
+  by all skins.
+* Split ajax aided search from core ajax framework. Use wgUseAjax to enable the
+  framework and wgAjaxSearch to enable the suggest feature for the search box.
+* Added experimental installer for extensions. 
+  See maintenance/installExtension.php
+* Added Tajic (tg) language file.
+* (bug 6903) Added Cantonese localisation (zh-yue)
+* Fix regression in Korean and Japanese date formatting (day of week)
+* (bug 6919) Add English alias magic words for Tatar (tt) language file.
+* (bug 6753) Fixed broken Kazakh linktrail (kk)
+* (bug 6700) Added Kazakh language variants to Names.php
+* (bug 6827) some i18n specific maintenance scripts fails after merge of localisation-work branch
+* Throwed an exception for the deprecated functions OutputPage::sysopRequired and
+  OutputPage::developerRequired - use OutputPage::permissionRequired instead.
+* Removed the deprecated functions User::isSysop, User::isBureaucrat and User::isDeveloper -
+  use User::isAllowed instead.
+* (bug 769) OutputPage::permissionRequired() should suggest groups with the needed permission
+* (bug 6971) Fix regression in Special:Export history view
+* Revamped Special:Imagelist
+* (bug 7000) updated MessagesPl.php
+* (bug 6946) Fix unexpected behavior change with GET hits to Special:Export
+* (bug 1866) Improve navigation on Special:Listusers; user now a starting
+  point as with Special:Allpages, rather than a pure limit.
+* Clean up tab order on Special:Blockip
+* (bug 5969) Clean up tab order on Special:Userlogin forms
+* (bug 3512) namespaceDupes now handles spaces and initial caps properly
+* (bug 7037) Fix regression in login tab order
+* (bug 7031) Report missing email on 'email password' instead of false success
+* (bug 7010) Don't send email notifications for watched talk pages when user
+  has selected to receive only updates for their own talk page
+* Added {{CURRENTHOUR}}
+* Added [[:Image:Foo.png]] style links to the pagelinks table
+* Avoid duplicate revision imports with Special:Import
+* (bug 7054) Validate email address before sending email confirmation message
+* (bug 7061) Format title on "from (page)" links on Special:Allpages
+* (bug 7044) Introduce "padleft" and "padright" colon functions
+* Pass page title as parameters to "linkshere" and "nolinkshere" and update
+  default message text
+* Allows to upload from publicy accessible URL. Set $wgAllowCopyUploads = true ; in LocalSettings.php
+  Limited to $wgMaxUploadSize (default:100MB); URL upload is limited to sysops by default, and displayed as a second line if appropriate
+* (bug 832) Return to user page after emailing a user
+* (bug 366) Add local-system-timezone equivalents for date/time variables
+* (bug 7109) Fix Atom feed version number in header links
+* (bug 7075) List registered parser function hooks on Special:Version
+* (bug 7059) Introduce "anchorencode" colon function
+* Include SVN revision number in {{CURRENTVERSION}} output, where applicable
+* Fix bug in wfRunHooks which caused corruption of objects in the hook list
+* (bug 4979) Use simplified email addresses when running on Windows
+* (bug 4434) Show block log fragment on Special:Blockip
+* [[MediaWiki:Disambiguationspage]] may optionally contain wiki links to any number 
+  of disambiguation templates.
+* [[Special:Disambiguations]] now shows pages in NS:0 that link to any pages that embed
+  any of the templates listed at [[MediaWiki:Disambiguationspage]].
+* Fix formatting of titles on Special:Undelete
+* (bug 7026) Fix action=raw&templates=expand
+* (bug 6976) Add namespace and direction classes to classic skins
+* (bug 7144) Don't "return to main" from OutputPage::loginToUse() if the the user can't
+  read the main page in the first place
+* (bug 7188) Fix minor borkage in HTMLForm
+* (bug 6675) Replaced message 'watchthis' with new message 'watchthisupload in Special:Upload
+* Add a quickie script dumpSisterSites.php for generating a page list in the
+  format for WSR-1 SisterSites support
+* (bug 7223) Monobook.js is used for site content, should not be localized
+* Set default disabled values for DjVu render options
+* Added Xml::option() for generating <option>s easily
+* Localized page numbers in drop-down for DjVu page selection
+* Fixed linktrail for vi
+* (bug 6893) "Call to a member function exists() on a non-object" on trackback.php with bad input
+* (bug 6886) PHP undefined offset on bad input to Special:Revisiondelete
+* (bug 6887) PHP error for call to getId() on bad input to Special:Revisiondelete
+* (bug 6888) PHP error for call to getTimestamp() on bad input to Special:Revisiondelete
+* (bug 7252) Use dvipng support in texvc math rastrization. dvipng is required if texvc is rebuilt.
+* (bug 7279) Use wfBaseName in place of basename() in more places
+* Clear newtalk marker on diff links with explicit current revision number
+* (bug 7064) Replace hard-coded empty message checks with wfEmptyMsg calls
+* (bug 6777) Remove some PHP 4 compat cruft
+* Add --user, --comment, and --license options to importImages.php
+* (bug 6216) The immobile namespace message does not mention the source page
+* (bug 7299) Normalize username filter on Special:Newpages
+* (bug 7306) RTL text in an LTR wiki breaks appearance of Special:Recentchanges
+* (bug 7312) Don't emit SET NAMES utf8 if connection failed
+* (bug 7305) Proper compare for bot check on RC notify, should fix overrides
+  that force edits by non-bot users to bot mode
+* Set Vary: Cookie on action=raw generated CSS and JS, to ensure that user
+  preferences don't get stuck in proxy caches for other people
+* (bug 7324) Fix error message for failure of Database::sourceFile()
+* (bug 7309) Plurals: use singular form for zero in French and Brazilian Portuguese
+* Add page_no_title_convert field to support language variant conversion
+  for page titles which shouldn't be converted on display/linking
+* Lazy extraction of text chunks in Revision objects, may reduce hits to
+  external storage when actual text content is not used
+* Added experimental $wgRevisionCacheExpiry to cache extracted revision text
+  in $wgMemc, to further reduce hits to external storage.
+  Set to 0 (disabled) by default.
+* Minor changes to the installer. 
+* Remove ":" for 'youremail' and 'yourrealname' in includes/templates/Userlogin.php
+  so that ":" could be used in i18n for Special:Preferences (like 'username' and 'uid').
+* Fix layout for Special:Preferences->Date and Time (position for 'timezonetext').
+* Updates to language variant code for Serbian et al
+* (bug 6756) Enabling RTL direction for kk-cn
+* (bug 6701) Kazakh language variants in MessagesEn.php
+* (bug 7335) SVN revision check in Special:Version fails on SVN 1.4 working copy
+* (bug 6518) Replaced 'lastmodified' with 'lastmodifiedat' and 'lastmodifiedby' with 'lastmodifiedatby'
+  with seperated parameters for date and time to allow better localisation. Updated all message files
+  to display the old format for compatibility.
+* (bug 7357) Make supposedly static methods of Skin actually static
+* Added info text to Special:Deadendpages and Special:Lonelypages
+* Fix regression in cachability of generated CSS and JS for MonoBook skin,
+  while avoiding clobbering of different users' cached data
+* (bug 6849) Block @ from usernames; interferes with multi-database tools and
+  was meant to be banned years ago... For now existing accounts will not be
+  prevented fromm login.
+* (bug 6092) Introduce magic words {{REVISIONDAY}}, {{REVISIONDAY2}, {{REVISIONMONTH}},
+  {{REVISIONYEAR}} and {{REVISIONTIMESTAMP}} 
+* (bug 7425) Preceeding whitespace in [[...]] breaks subpages
+* Try to reconnect after transitory database errors in dumpTextPass.php
+* (bug 6023) Fixed mismatch of 0/NULL for wl_notificationtimestamp; now notification
+  mails are working after 'Mark all pages visited' button on Special:Watchlist is clicked
+* Made {{INT:}} a core parser function instead of a special case. The syntax 
+  and behaviour is largely unchanged. 
+* (bug 7448) Fixing the native name for Ewe (ee)
+* (bug 6864) Replace message 'editing' with new message 'editinguser' in Special:Userrights
+  to allow better localisation
+* Add '*-summary' for special pages to MessagesEn.php to allow customizing/translation
+  directly through Special:Allmessages
+* (bug 6130, bug 5818) Replaced message 'go'  with the new message 'searcharticle' in skins
+  to allow better localisation
+* Add + to $wgLegalTitleChars by default. Some sites may have occasional
+  problems with hard-to-reach pages, but it should be less trouble than
+  "I can't import dumps from Wikipedia" complaints
+* (bug 7460) Revert broken patch for bug 7226 which slows down
+  Special:Allmessages by a factor of 16
+* Committed a bunch of live hacks from Wikimedia servers
+* (bug 6889) PHP notices in thumb.php with missing params
+* Cleaner error behavior on thumb.php with invalid page selection
+* (bug 6617) Validate timestamps on Special:Undelete
+* Do fewer unnecessary full writes of user rows; only update user_touched
+  for watch/unwatch, group membership change, and login operations
+* Restructured the languages directory, to avoid problems when people 
+  untar MW 1.8 over the top of a 1.7 installation.  
+* (bug 6890) SQL query error on bad input to Pager lists 
+  due to negative LIMIT clause, caused by integer wraparound.
+* Fixed various bugs related to table prefixes, especially the interaction
+  between table prefixes and memcached, which was formerly completely broken.
+* (bug 7004) PHP iconv() notice on bad password input to Special:Userlogin.
+* (bug 6826) Extend pre-save transform context link ("pipe trick")
+  syntax to pages with commas in title
+* Use ImageMagick -thumbnail option instead of -resize to avoid including
+  excessive metadata in thumbs (requires ImageMagick 6.0.0 or newer).
+* (bug 7499) Corrections to Swedish talk namespace names
+* (bug 7508) Added option to compress HTML pages by dumpHTML.php
+* (bug 7519) Add plural in SpecialWatchlist
+* (bug 7459) Magic word variables are always case sensitive
+* Replaced {{SERVER}}{{localurl:xxx}} with {{fullurl:xxx}} in localisation files
+* Fix regression in Special:Watchlist text header
+* (bug 7510) Update article counts etc on undelete
+* (bug 7520) Update article counts on XML import
+* (bug 7526) Make $wgDefaultUserOptions work again
+* (bug 7472) Localize Help namespace for Basque
+* (bug 7529) Including a non-existent category in an article places that article in the category
+* (bug 4528) Lack of important LaTeX functions stackrel, rightleftharpoon
+* (bug 6721) missing symbols ulcorner, urcorner, llcorner, lrcorner, twoheadrightarrow, twoheadleftarrow
+* (bug 7367) Hyphens sometimes erroneously appended to equations when not converted to PNG
+* Add "title" to the opensearch link to allow automatic adding of the search engine in Firefox 2
+* (bug 7537) Add php5 to $wgFileBlacklist
+* (bug 6929) Restore AutoAuthenticate hook
+
+
+== Changes since 1.6 ==
+
+* (bug 5458) Fix double-URL encoding in block log link in contribs and contribs
+  link in block log
+* (bug 5462) Bogus missing patch warning in updater
+* (bug 5461) Use of deprecated "showhideminor" in Special:Recentchangeslinked
+* PHP warning when allow_call_time_pass_reference is off
+* Update to Finnish localization
+* (bug 5467) Link to page histories in watchlist edit mode
+* Further additions to Hebrew localisation
+* (bug 5476) Invalid xhtml in German localization
+* (bug 5479) Id translation for preferences tabs caption
+* (bug 5493) Id translation for special pages
+* Added skinname and style path parameters to CBT version of MonoBook
+* Include subversion revision number in Special:Version if available
+* (bug 5344) Fix regression that broke slashes in extension tag parameters
+* Improve Special:Log performance on big log sets
+* (bug 5507) Changed mediawiki:logouttext from plain to wikitext
+* (bug 4760) Prevent creation of entries in protection log when protection
+  levels haven't changed
+* (bug 861) Show page protection/unprotection events in histories
+* (bug 5499) Don't clear the tag strip state when asked not to clear state.
+  Fixes regression with use of <ref> in a template breaking <nowiki> etc.
+* Minor improvements to English language files
+* Display the anon talk page info message on anon talk pages again
+  (moved outside the parser cache)
+* Optional {{DISPLAYTITLE|title with markup}} magic word
+  Deactivated by default, set "$wgAllowDisplayTitle = true" in LocalSettings.php
+  to activate
+* Cleaned SpecialContributions a bit
+* Added a table to track interlanguage links
+* (bug 5544) Fix redirect arrow in Special:Listredirects for right-to-left
+  languages
+* Replace "doubleredirectsarrow" with a content language check that picks the
+  appropriate arrow
+* (bug 5537) Add stub language file for Samogitian (bat-smg); inherits
+  Lithuanian (lt)
+* Don't force edit summaries when a user is editing their own user/talk page
+* (bug 5510) Warning produced when using {{SUBPAGENAME}} in some namespaces
+* (bug 385) Installer support for PostgreSQL, fixes for PG compatibility
+* PersistentObject removed; it doesn't do anything and was broken besides.
+  All extensions using it have been corrected.
+* Propagate ISBN number for Booksources in LanguageNo.php
+* (bug 5548) Improvements to Indonesian localisation [patch: Ivan Lanin]
+* Add TALKSPACE, SUBJECTSPACE, TALKPAGENAME, SUBJECTPAGENAME (and encoded forms
+  for all) magic words
+* (bug 5403) Fix Special:Newpages RSS/Atom feeds
+* Reject malformed addresses in X-Forwarded-For entries
+* (bug 3359) Add hooks on completion of file upload
+* (bug 5559) Improve detection of ImageMagick [patch: Greg Turnquist]
+* (bug 5475) New pages feeds ignore "limit" argument
+* (bug 5184) CSS misapplied to elements in Special:Allmessages due to
+  conflicting anchor identifiers
+* (bug 5519) Allow sidebar cache to be disabled; disable it by default.
+* Maintenance script to import the contents of a text file into a wiki page
+* Add $wgReservedUsernames configuration directive to block account creation/use
+* (bug 5576) Remove debugging hack in session check
+* (bug 5426) Lowercase treatment of titles in rights log leads to broken links
+  on Special:Log
+* Minor improvements to French localisation files
+* (bug 5181) Update "nogomatch" for Slovak
+* (bug 5594) Id translation up to # Login and logout pages section
+* (bug 5536) Use content language for editing help link
+* Improvements to German localisation files
+* (bug 5570) Problems using <special page>/parameter link form for long titles
+* (bug 3884) Add $user parameter to AddNewUser hook, call it for by-email 
+  registrations as well as self-registrations.
+* (bug 4327) Report age of cached data sets in query pages
+* (bug 4662) Fix Safari check in wikibits.js
+* (bug 4663) Edit toolbar enabled in compatible versions of Safari
+* (bug 5572) Edit toolbar enabled in compatible versions of Konqueror (3.5+)
+* (bug 5235) Edit toolbar tooltips no longer show JavaScript junk in Opera
+* Edit toolbar now works in pure XHTML mode (application/xhtml+xml)
+* Add watchlist clear function to allow quick purging of all items
+* (bug 5625) Additional namespace translations for Welsh
+* Add meta tag and JavaScript variables to cached special pages which provides
+  the timestamp of the last update, in YYYYMMDDHHMMSS format.
+* (bug 5628) More translations for MessagesHr.php
+* (bug 5595) Localisation for Bosnian language (bs)
+* (bug 2910) Default view preferences for watchlists
+* Add "hide bot edits from the watchlist" user preference
+* (bug 5250) Introduce Special:Unusedtemplates
+* Add user preference setting for an extended watchlist, showing all recent 
+  edits up to a certain edit, and not just the latest edit..
+* Made MessageRo.php more general
+* (bug 5640) Indonesian localisation improvements
+* (bug 5592) Actions are logged with the default language for the
+   wiki, not the language of the user performing the operation.
+* (bug 5644) Error in LanguageBs.php file
+* (bug 5646) Compare for identical types in wfElement()
+* (bug 5472) Language::userAdjust()->minDiff not initialized on else condition
+* (bug 5386) LanguageMk.php: updated namespaces translations
+* (bug 5422) Stub for Romani (rmy) language which extends ro
+* Fix linktrail for LanguageSr
+* (bug 5664) Fix Bosnian linktrail
+* (bug 3825) Namespace filtering on Special:Newpages
+* (bug 1922) When Special:Wantedpages is cached, mark links to pages
+  which have since been created
+* (bug 5659) Change grammar hacks for Bosnian Wikimedia namespaces.
+  This sort of special casing should be removed and fixed properly.
+* Remove useless whitespace from Special:Brokenredirects header
+* Treat "allmessagesnotsupporteddb" as wikitext when echoing; change default
+  text
+* (bug 5497) Regression in HTML normalization in 1.6 (unclosed <li>,<dd>,<dt>)
+* (bug 5709) Allow customisation of separator for categories
+* (bug 5684) Introduce Special:Randomredirect
+* (bug 5611) Add a name attribute to the text box containing source text in
+  read-only pages
+* Indicate when a protected page is an interface message ("protectedinterface")
+* (bug 4259) Indicate when a protected page being edited is an interface message
+  ("editinginterface")
+* (bug 4834) Fix XHTML output when using $wgMaxTocLevel
+* Pass login link to "whitelistedittext" containing 'returnto' parameter
+* (bug 5728): mVersion missing from User::__sleep() leading to constant cache
+  miss
+* Updated maintenance/transstat.php so it can show duplicate messages
+* Improvements to update scripts; print out the version, check for superuser
+  credentials before attempting a connection, and produce a friendlier error if
+  the connection fails
+* (bug 5005) Fix XHTML <gallery> output.
+* (bug 5315) "Expires: -1" HTTP header made strictly valid (using 1970 date).
+* (bug 4825) note in DefaultSettings.php about 'profiling' table creation
+* Remove unneeded extra whitespace at top of Special:Categories
+* (bug 5679) time units are now using local numerals
+* (bug 5751) Updates to Portuguese localisation files
+* (bug 5741) Introduce {{NUMBEROFUSERS}} magic word
+* (bug 93) <nowiki> tags and tildes in templates
+* The returnto parameter is now actually used by SpecialUserlogin.php
+* Parser can now know that it is parsing an interface message
+* (bug 4737) MediaWiki:Viewcount supports {{PLURAL}} now
+* Fix bug in wfMsgExt under PHP 5.1.2
+* (bug 5761) Project talk namespace broken in Xal, Os, Udm and Cv
+* Rewrite reassignEdits script to be more efficient; support optional updates to
+  recent changes table; add reporting and silent modes
+* Cleaned up formatNum usage in langfiles
+* (bug 5716) Warn when a user tries to upload a file which was previously
+  deleted
+* (bug 5565) Add a class attribute to the table on Special:Allpages
+* "lang=xx" option for parser test cases to set content language
+* (bug 5764) Friulian translation updated
+* (bug 5757) Fix premature cutoff in LanguageConverter with extra end markers
+* (bug 5516) Show appropriate "return to" link on blocked page
+* (bug 5377) Do not auto-login when creating an account as another user
+* (bug 5284) Special redirect pages should remember parameters
+* Suppress 7za output on dumpBackup
+* (bug 5338) Reject extra initial colons in title
+* (bug 5487) Escape self-closed HTML pair tags
+* Add "raw suffix" magic word for some magic words, e.g. {{NUMBEROFUSERS|R}}
+  will produce a count minus formatting
+* Fix Parser::cleanSig() to use Parser::startExternalParse() and choose an
+  appropriate output format given the scope of the clean
+* (bug 5593) Change "bureaucrat log" to "rights log"
+* Show a boilerplate "(none)" in place of a blank within the log action text for
+  user rights
+* (bug 137) Commented out translations for copyrightwarning which mention GNU FDL
+* (bug 5723) Don't count pages linked to from the MediaWiki namespace as "wanted"
+* (bug 5696) Add a third parameter, $3, to "rcnote", passing the current time
+  formatted according to the current user's settings
+* (bug 5780) Thousands and decimal separators for Norwegian
+* Updated initStats maintenance script
+* (bug 5767) Fix date formats in Vietnamese locale
+* (bug 361) URL in URL, they were almost fixed. Now they are.
+* (bug 4876) Add __NEWSECTIONLINK__ magic word to force the "new section" link/tab to
+  show up on specific pages on demand
+* Bidi-aid on list pages
+* (bug 5782) Allow entries in the bad image list to use canonical namespace names
+* (bug 5789) Treat "loginreqpagetext" as wikitext
+* Sanitizer: now handles nested <li> in <ul> or <ol>
+* (bug 5796) We require MySQL >=4.0.14
+* Add 'EmailConfirmed' hook
+* New findhooks.php script to find undocumented hooks.
+* Silently ignore errors on profiling table update.
+* (bug 5801) Correct handling of underscores in Special:Listusers
+* Clean up Special:Listusers; add an "(all)" label to the group selection box
+* (bug 5812) Use appropriate link colour in Special:Mostlinked
+* (bug 5802) {{CURRENTMONTHNAME}} variable broken in Vietnamese locale
+* (bug 5817) Appropriate handling for Special:Recentchangeslinked where the target
+  page doesn't exist
+* Special:Randompage now additionally accepts English namespace name as parameter
+* (bug 2981) Really fixed linktrail for Tamil (ta)
+* Disallow substituting Special pages when included into a page
+* (bug 5587) Clean up the languages from references to the Groups special page
+* Added new group-X and group-X-member messages
+* Rewritten removeUnusedAccounts to be more efficient, print names of inactive
+  accounts
+* Redirect Special:Userlist to Special:Listusers
+* Introduce $wgAllowTitlesInSVG, which allows the <title> attribute in uploaded files
+  bearing the image/svg MIME type. Disabled by default due to the vast majority of
+  web servers being hideously misconfigured. See DefaultSettings.php for more details.
+* Changed default LocalSettings.php to append the previous include path when setting it
+* (bug 5837) Use "members" for the value descriptor in Special:Categories,
+  Special:Wantedcategories and Special:Mostlinkedcategories.
+* (bug 3309) Allow comments when undeleting pages
+* Clean up Special:Undelete a bit
+* (bug 5805) messages nbytes, ncategories can now use {{plural:}}
+* Clean up Special:Imagelist a bit
+* (bug 5838) Namespace names for Nds-NL
+* (bug 5749) Added Tyvan language files
+* (bug 5791) Fix SQL syntax in Special:BrokenRedirects, was causing incorrect data to show
+* (bug 5839) Prevent access to Special:Confirmemail for logged-out users
+* (bug 5853) Update for Portuguese messages (pt)
+* (bug 5851) Use Cyrillic for Kirghiz language name
+* (bug 5841) Allow the 'EditFilter' hook to return a non-fatal error message
+* (bug 5846) Link to individual group description pages in Special:Listusers
+* (bug 5857) Update for German localisation (de)
+* (bug 5858) Update for Russian language (ru)
+* (bug 5860) Update for Indonesian language (id)
+* (bug 1120) Update for Czech language (Cs)
+* Added many missing formatNum calls
+* Added grammar function to Belarusian (be)
+* (bug 5819) Add 'PersonalUrls' hook
+* (bug 5862) Update of Belarusian language (be)
+* (bug 5886) Update for Portuguese messages (pt)
+* (bug 5586) <gallery> treated text as links
+* (bug 5878) Update for Indonesian language (id)
+* (bug 5697) Update for Malay language (ms)
+* (bug 5890) Update for German language (de)
+* (bug 5889) Name for Sindhi language should appear as سنڌي
+* --force-normal parameter on dump scripts to force check for ICU extension
+* (bug 5895) Update for Dutch language (nl)
+* (bug 5891) Linktrail for Polish language (pl)
+* User::isBureaucrat , User::isDeveloper , User::isSysop deprecated in
+  v1.6 now die with a backtrace. They will be removed in v1.8
+* dumpTextPass now skips goes to database for entries that were blank in the
+  previous dump, as this may indicate a broken dump.
+* dumpTextPass progress includes percentage of items prefetched
+* dumpTextPass can now use 7zip files for prefetch
+* (bug 5915) Update to Indonesian localisation (id)
+* (bug 5913) Update for German localisation (de)
+* (bug 5905) Plural support for Bosnian localisation (bs)
+* Groups which won't hit the rate limiter now configurable with
+  $wgRateLimitsExcludedGroups
+* (bug 5806) {{plural:}} support instead of "twin" MediaWiki messages
+* (bug 5931) Update for Polish language (pl)
+* Ignore the user and user talk namespaces on Special:Wantedpages
+* Introduce NUMBEROFPAGES magic word
+* (bug 5833) Introduce CURRENTVERSION magic word
+* (bug 5370) Allow throttling of password reminder requests with the rate limiter
+* (bug 5683) Respect parser output marked as uncacheable when saving
+* (bug 5918) Links autonumbering now work for all defined protocols
+* (bug 5935) Improvement to German localisation (de)
+* (bug 5937) Register links from gallery captions with the parent parser output
+  object so that link tables receive those updates too
+* (bug 5845) Introduce BASEPAGENAME and BASEPAGENAMEE magic words
+* (bug 5941) Use content language when getting the administrator page title for
+  Special:Statistics
+* (bug 5949) Update to Indonesian localisation (id)
+* (bug 5862) Update of Belarusian translation (be)
+* (bug 5950) Improvements to French localisation
+* (bug 5805) {{plural:}} support for counters in some special pages
+* (bug 5952) Improvement to German localisation (de)
+* Rename conflicting metadata help message to "metadata_help" (was "metadata")
+  and treat it as wiki text
+* Improve preferences input filtering
+* Maintenance script to import multiple files into the wiki
+* (bug 5957) Update for Hebrew language (he)
+* (bug 5962) Update for Italian language (it)
+* (bug 5961) Update for Portuguese localisation (pt)
+* (bug 5849) Remove some hard-coded references to "Wikipedia" in messages
+* (bug 5967) Improvement to German localisation (de)
+* (bug 5962) Update for Italian language (it)
+* Suppress images in galleries which appear on the bad image list (when rendering
+  for a wiki page; galleries in special pages and categories are unaffected)
+* Maintenance script to remove orphaned revisions from the database
+* (bug 5991) Update for Russian language (ru)
+* (bug 6001) PAGENAMEE and FULLPAGENAMEE don't work in FULLURL and LOCALURL magic
+  words
+* (bug 5958) Switch Uzbek language name to use latin script
+* (bug 839) Add URLENCODE magic word
+* (bug 6004) Update for Polish language (pl)
+* (bug 5971) Improvement to German localisation (de)
+* (bug 4873) Don't overwrite the subtitle navigation when viewing a redirect page
+  that isn't current
+* (bug 2203) Namespace updates for Thai
+* Fix breakage in parser test suite which caused incorrect reporting of the failure of
+  {{NUMBEROFFILES}}. Now initialises the site_stats table with some dumb data. Updated
+  the expected output for {{NUMBEROFARTICLES}} to reflect this.
+* (bug 6009) Use {{ns:project}} in messages where appropriate
+* (bug 6012) Update to Indonesian localisation (id)
+* (bug 6017) Update list of bookstores in German localisation files
+* (bug 5187) Allow programmatically bypassing username validation, for scripts
+* (bug 6025) SpecialImport: wrong message when no file selected
+* (bug 6015) EditPage: add spacing in the boxes "edit is minor" and "watch this"
+* (bug 6018) Userrights: new message when no user specified ('nouserspecified')
+* (bug 2015) Add "\sim" to ~ conversion for HTML rendering
+* (bug 6029) Improvement to German localisation (de)
+* (bug 5015) Update be: magic words
+* (bug 3974) Add parameter for site URL to "passwordremindertext"
+* (bug 6039) Update for Portuguese localisation (pt)
+* (bug 764) Add CREATE TEMPORARY TABLES to default database permissions
+* Big update to Swedish localisation (sv)
+* Use appropriate HTML functions to create the tool links on image pages, so they don't
+  look garbled when tidy isn't on
+* (bug 5511) Fix URL-encoding of usernames in links on Special:Ipblocklist
+* (bug 6046) Update to Indonesian localisation (id) #15
+* (bug 5523) $wgNoFollowNsExceptions to allow disabling rel="nofollow" in
+  specially-selected namespaces.
+* (bug 6055) Fix for HTML/JS injection bug in variable handler (found by Nick Jenkins)
+* Reordered wiki table handling and __TOC__ extraction in the parser to better
+  handle some overlapping tag cases.
+* Only the first __TOC__ is now turned into a TOC
+* (bug 4610) Indicate patrolled status on watchlists and allow users to mark
+  changes as patrolled using the diff links there
+* Add 'DiffViewHeader' hook called before diff page output
+* (bug 6051) Improvement to German localisation (de)
+* (bug 6054) Update to Indonesian localisation (id) #16
+* Add {{CURRENTTIMESTAMP}} magic word
+* (bug 6061) Improper escaping in some html forms
+* (bug 6065) Remove underscore when using NAMESPACE and TALKSPACE magics.
+* (bug 6074) Correct squid purging of offsite upload URLs
+* To simplify the lives of extension developers, the logging type arrays
+  can now be appended to directly by an extension setup function. It is
+  no longer necessary to write four separate functions just to add a
+  custom log type.
+* (bug 6057) Count "licenses" as a message (and show it in Special:Allmessages)
+* Added $wgGrammarForms global
+* Fixed hardcoded 'done.' when removing watchlist entries.
+* (bug 5962) Update for Italian language (it)
+* (bug 6086) Remove vestigial attempt to call Article::validate()
+* wfHostname() function for consistent server hostname use in debug messages
+* Send thumbnailing error messages to 'thumbnail' log group
+* wfShellexec() now accepts an optional parameter to receive the exit code
+* Failed, but not zero-length, thumbnail renderings are now removed.
+  Should help clean up when rsvg fails in weird ways.
+* (bug 6081) Change description for Turkmen language
+* Increase robustness of parser placeholders; fixes some glitches when
+  adjacent to identifier-ish constructs such as URLs.
+* Shut up the parser test whining about files in a temp directory.
+* (bug 6098) Add Aragonese language support (an)
+* (bug 6101) Update for Russian language (ru)
+* Add $wgIgnoreImageErrors to suppress error messages for thumbnail rendering
+  problems. If errors are transitory, this should reduce annoying messages
+  making it into cached display.
+* (bug 6103) Wrap self-links in a CSS class ("selflink")
+* (bug 6102) For consistency with other markup, normalize all HTML-encoded
+  character entities in URLs, not just ampersands. This allows use of eg
+  &#61; when making URLs for template parameters.
+* Markup anality: escape </ as <\/ in toolbar javascript for pure correctness
+  under HTML-compatible browsers.
+* (bug 5077) Added hook 'BeforePageDisplay' to SkinTemplate::outputPage
+* Replace fatally changed 'uploadnewversion' with 'uploadnewversion-linktext'
+* (bug 472) Syndication feeds for the last few edits of page history
+* Format edit comments in Recent Changes feed
+* Switch incorrectly ordered column headers on Recent Changes feed diffs
+* (bug 6117) Use message for history feed description, add German localization
+* (bug 1017) fixed thumbnails of animated gifs.
+* Add APC as object caching option
+* Update to Albanian localization (sq)
+* (bug 6099) Introduce {{DIRECTIONMARK}} magic word (with {{DIRMARK}} as an alias)
+* Use optimized php5-only microtime()
+* Add possibility to store local message cache as PHP executable script
+* Fix profiling table definition
+* (bug 6040) Run pre-save transform before calculating the diff. when doing a
+  "show changes" operation in the editor
+* (bug 4033) Respect $wgStyleDirectory when checking available skins
+* Remove hideous backslashes from MessagesBr.php
+* Fix APC object cache issues, add functionality to installer
+* (bug 6133) Update strip state as we work. This mostly fixes extensions
+  used in Cite.php <ref> tags when Tidy is on.
+* (bug 6139) Workaround for transclusion oddities in Vietnamese upload text
+* (bug 6136) Update to Catalan language (ca)
+* Update to Japanese localization (ja)
+* Add /usr/local/bin to the diff3 search paths in the installer
+* (bug 6106) Update to Indonesian localisation (id) #17
+* (bug 6125) Add links to edit old versions to diff views
+* (bug 5127) Auto edit summary when creating/editing redirect page
+* (bug 3926) Introduce {{#language:}} magic word
+* Fix section links from edit comments for [[:Image:Bla.jpg]] in section titles
+* (bug 6126) Allow fallback to customized primary language when user language
+  message contains '-'; fixes licenses selector on Commons configuration after
+  recent addition of the message to Messages.php
+* (bug 5527) Batch up job queue insertions for, hopefully, better survivability
+  of lock contention etc. Duplicates are now removed at pop time instead of
+  at insert time.
+* When showing the "blah has been undeleted" page, make sure it's a blue link
+* parserTests.php accepts a --file parameter to run an alternate test sutie
+* parser tests can now test extensions using !!hooks sections
+* Fix oddity with open tag parameters getting stuck on </li>
+* (bug 5384) Fix <!-- comments --> in <ref> extension
+* Nesting of different tag extensions and comments should now work more
+  consistently and more safely. A cleaner, one-pass tag strip lets the
+  'outer' tag either take source (<nowiki>-style) or pass it down to
+  further parsing (<ref>-style). There should no longer be surprise
+  expansion of foreign extensions inside HTML output, or differences
+  in behavior based on the order tags are loaded.
+* (bug 885) Pre-save transform no longer silently appends close tags
+* Pre-save transform no longer changes the case of close tags
+* (bug 6164) Fix regression with <gallery> resetting <ref> state
+* Hackaround for IE 7 wrapping bug in MonoBook footer
+* New message sp-newimages-showfrom replaces rclistfrom on special:newimages
+* Improve handling of ;: definition list construct with overlapping or
+  nested HTML tags
+* (bug 6171) Fix sanitizing of HTML-elements with an optional closing
+  tag. The sanitizer still needs to learn how to make well-formed XML
+  in this case.
+* Fix fatal error when specifying illegal name for manual thumbnail
+* (bug 6184) Use shinier Linker::userLink() to make user links in
+  Special:Undelete
+* (bug 6170) Update for Kashubian translation (csb)
+* (bug 6191) Update to Indonesian translation (id) #18
+* (bug 6114) Update to Walloon localization (wa)
+* Added $wgNamespaceRobotPolicies to allow customisation of robot policies on a 
+  per-namespace basis.
+* Add <ol> to the list of block elements for doBlockLevels; avoids <p>s being
+  interspersed into your ordered lists.
+* (bug 5021) Transcluding the same special page twice now works
+* Add 'SiteNoticeBefore' and 'SiteNoticeAfter' hooks
+* (bug 6182) Date passed in "sp-newimages-showfrom" not adjusted to user time
+  preferences
+* (bug 2587) Fix for section editing with comment prefix
+* (bug 2607) Fix for section editing with mix of wiki and HTML headings
+* (bug 3342) Fix for section editing with headings wrapped in <noinclude>
+* (bug 3476) Fix for section editing with faux headings in extensions
+* (bug 5272) Fix for section editing with HTML-heading subsections
+* Fix for bogus wiki headings improperly detected with following text
+* Fix for HTML headings improperly not detected with preceding/following text
+* Section extraction and replacement functions merged into one implementation
+  on the Parser object, so they can't get out of sync with each other.
+* Edit security precautions in raw HTML mode, etc
+* (bug 6197) Update to Indonesian translation (id) #19
+* (bug 6175) Improvement to German translation (de)
+* Redirect Special:Logs to Special:Log
+* (bug 6206) Linktrail for Swedish localization (se)
+* (bug 3202) Attributes now allowed on <pre> tags
+* Sanitizer::validateTagAttributes now available to discard illegal/unsafe
+  attribute values from an array.
+* (bug 3837) Leave <center> as is instead of doing an unsafe text replacement
+  to <div class="center">. <center> is perfectly valid in the target doctype
+  (XHTML 1.0 Transitional), while the replacement didn't catch all cases and
+  could even result in invalid output from valid input. 
+* (bug 4280) Use 'noindex,nofollow' instead of 'noindex,follow' for default
+  meta robots tag on diff view and special pages. Should reduce impact of
+  robots on scrolling special pages, diffs etc on sites where robots.txt
+  doesn't forbid access.
+* Regression fix: suppress warning about session failure when clicking to
+  edit with 'preview on first edit' enabled.
+* (bug 6230) Regression fix: <nowiki> in [URL link text]
+* Added AutoLoader.php, which loads classes without need of require_once()
+* (bug 5981) Add plural function Slovenian (sl)
+* (bug 5945) Introduce {{CONTENTLANGUAGE}} magic word
+* {{PLURAL}} can now take up to five forms
+* (bug 6243) Fix email for usernames containing dots when using PEAR::Mail
+* Remove a number of needless {{ns:project}}-type transforms from messages files. These
+  usages already have separate label text. Such transforms are wasteful on each page view.
+* Update to Yiddish localization (yi)
+* (bug 6254) Update to Indonesian translation (id) #20
+* (bug 6255) Fix transclusions starting with "#" or "*" in HTML attributes
+* Whitespace now normalized more or less properly in HTML attributes
+* Fix regression(?) in behavior of initial-whitespace-pre in <center>
+* (bug 6260) Update to Interlingua localization (ia)
+* Update to Vlax Romany localization (rmy)
+* Update to Latin translation (la)
+* Update to Dutch translation (nl)
+* Avoid some notices in page history with bad input
+* Use double quoted consistently on attributes in linker output; preparing
+  for new normalization code when tidy not in use
+* Replace "nogomatch" with "noexactmatch" and place the magic colon in the messages
+  themselves. Some minor tweaks to the actual message content.
+* Introduce $wgContentNamespaces which allows for articles to exist in namespaces other
+  than the main namespace, and still be counted as valid content in the site statistics.
+* (bug 5932) Introduce {{PAGESINNAMESPACE}} magic word
+* Disable $wgAllowExternalImages by default.
+* (bug 2700) Nice things like link completion and signatures now work in <gallery> tags.
+* Cancel output buffering in StreamFile; when used inside gzip buffering this
+  could cause funny timeout behavior as the Content-Length was wrong.
+* Return correct content-type header with 304 responses for StreamFile;
+  it confuses Safari if you let it return "text/html".
+* (bug 6280) Correct GRAMMAR for Slovenian localisation (sl)
+* (bug 6162) Change date format for Dutch Low Saxon (nds-nl)
+* (bug 6296) Update to Indonesian localisation (id) #21
+* Introduce EditFormPreloadText hook, see docs/hooks.txt for more information
+* (bug 4054) Add "boteditletter" to recent changes flags
+* Update to Catalan localization (ca)
+* (bug 2099) Deleted image files can now be archived and undeleted.
+  Set $wgSaveDeletedFiles on and an appropriate directory path in
+  $wgFileStore['deleted']['directory']
+* (bug 6324) Fix regression in enhanced RC alignment
+* Introduce {{NUMBEROFADMINS}} magic word
+* Update to Slovak translation (sk)
+* Update to Alemannic localization (gsw)
+* (bug 6300) Bug fixes for sr: variants
+* namespaceDupes.php can now accept an arbitrary prefix, for checking rogue
+  interwikis and such. Not yet fully automated.
+* (bug 6344) Add Special:Uncategorizedimages page
+* (bug 6357) Update to Russian translation (ru)
+* Workaround possible bug in Firefox nightlies by properly removing the
+  Content-Encoding header instead of sending explicit 'identity' value
+  in StreamFile
+* (bug 6304) Show timestamp for current revision in diff pages
+* Vertically align current version with old version header in diff display
+* (bug 6174) Remove redundant "emailforlost" message 
+* (bug 6189) Show an error to an unprivilleged user trying to create account
+* (bug 6365) Show user information in the "old revision" navigation links
+* Introduce 'FetchChangesList' hook; see docs/hooks.txt for more information
+* (bug 6345) Update to Indonesian localisation (id) #22
+* (bug 6279) Add genitive month names to Slovenian localisation
+* (bug 6351) Update to German translation (de)
+* Respect language directionality when displaying arrow in Special:Brokenredirects
+* Remove unused "validation" table definitions from the schema files
+* (bug 6398) Work around apparent PCRE bug breaking section editing when
+  massively-indented preformatted text immediately followed a header
+* (bug 6392) Fix misbehaving <br /> in preferences form
+* Add translated magic words to Hebrew localization
+* (bug 6396) Change name for Chuvash language
+* Introduce optional (off by default) language selector bar for user login
+  and registration. Customisable via the "loginlanguagelinks" message, the
+  links will preserve "returnto" values. If the user creates an account while
+  using such a link, then the language in use will be saved as their language
+  preference.
+* Make sure '~~~' '~~~~' '~~~~~' are removed in Nickname preference.
+* Rename "ipusuccess" to "unblocked", change the format (now wiki text)
+* (bug 2316) Add "caption" attribute to <gallery> tag
+* Allow setting the skin object that ImageGallery will use; needed during parse
+  operations (the skin must come from the ParserOptions, not $wgUser)
+* Fix notice in MacBinary detection debug data for files of certain lengths
+* (bug 6131) Add type detection for DjVu files, allowing them to be uploaded
+  with validity checking and size detection. No inline thumbnailing yet,
+  but could be added in the future.
+* (bug 6423) Don't update newtalk flag if page content didn't change (null edits
+  were causing the newtalk flag to trigger inappropriately)
+* Parser functions are now set using magic words.
+* (bug 6428) Incorrect form action URL on Special:Newimages with hidebots = 0 set
+* (bug 4990) Show page source to blocked users on edits, or their modified version
+  if blocked during an edit
+* (bug 5903) When requesting the raw source of a non-existent message page,
+  return blank content (as opposed to the message key)
+* Improve default blank content of MediaWiki:Common.css and MediaWiki:Monobook.css
+* (bug 6434) Allow customisation of submit button text on Special:Export
+* (bug 6314) Add user tool links on page histories
+* Fix display of file-type icons in galleries when $wgIgnoreImageErrors is off
+* (bug 6438) Update to Indonesian translation (id) #23
+* Adding the language code parameter to the hook "LanguageGetMagic", to allow
+  localizble extensions magic words.
+* Update to Romanian translation (ro)
+* Update to Esperanto translation (eo)
+* Check for preg_match() existence when installing and die out whining about PCRE
+  if it's not there, instead of throwing a fatal error
+* (bug 672) Add MathAfterTexvc hook
+* Update to Piedmontese localization (pms)
+* dumpBackup can optionally compress via dbzip2
+* (bug 2483) Run link updates on change via XML import
+* (bug 2481) List imported pages during Special:Import
+* (bug 2482) Log and RC entries for Special:Import events
+* Allow fetching all revisions from transwiki Special:Import
+* Allow fetching all revisions from Special:Export GET request
+* Disable output buffering on Special:Export; should help with streaming
+  large numbers of history items.
+* Allow setting a maximum number of revisions for history Special:Export;
+  pages with more than $wgExportMaxHistory revisions are excluded from
+  export when history is requested.
+* Fix transwiki import of pages with space in name
+* Save null edit when importing pages through Special:Import
+* Update to Korean translation (ko)
+* Show a more specific message when an anonymous user tries to access Special:Watchlist
+* (bug 3278) Paging links in Special:Prefixindex
+* Added Latvian localization (lv)
+* (bug 6472) Fix regression in Special:Export with multiple pages
+* Update to Macedonian translation (mk)
+* Allow page moves over historyless self-redirects. Such are usually created
+  as part of namespace rearrangements, and it's easier to clean them up if
+  we can move over them.
+* Show some error results in moveBatch.php
+* (bug 6479) Allow specification of the skin to use during HTML dumps
+* (bug 6461) Link to page histories in Special:Newpages
+* (bug 6484) Don't do message transformations when preloading messages for editing
+* (bug 6201) Treat spaces as underscores in parameters to {{ns:}}
+* (bug 6006) Allow hiding the password change fields using an authentication plugin
+* (bug 6489) Use appropriate link colour on Special:Shortpages
+* Added formatnum magic word
+* Added Javanese localization (jv)
+* (bug 6491) Apply bad image list in category galleries
+* (bug 6488) Show relevant log fragment in Special:Movepage
+* Fix potential PHP notice in Special:Blockme when $wgBlockOpenProxies is true
+* Use mysql_real_escape_string instead of addslashes for string escaping in
+  the MySQL Database class. This may fix some rare breakage with binary fields.
+  Note that MediaWiki does not support the multibyte character sets where a
+  "dumb" byte replacement can be actively dangerous; UTF-8 is always safe
+  in this regard due to the bit patterns which make head and tail bytes
+  distinct.
+* (bug 6497) Use $wgMetaNamespaceTalk for Esperanto if set
+* (bug 6498) Use localized forms for image size in Special:Undelete
+* (bug 6485) Update to Indonesian translation (id) #24
+* Extension messages translation is now possible.
+* Add target namespace override selector for transwiki imports.
+  $wgImportTargetNamespace specifies the default, to be used for
+  Wiktionary's 'Transwiki:' namespace etc.
+* (bug 6506) Update to German localisation (de)
+* (bug 502) Avoid silly tabs on bad title by using virtual special page
+* (bug 6511) Add diff links to old revision navigation bar
+* (bug 6511) Replace 'oldrevisionnavigation' message with 'old-revision-navigation'
+* Fix regression in Polish genitive month forms
+* (bug 4037) Make input handling in Special:Allpages and Special:Prefixindex
+  more consistent: Accept just a namespace prefix and a colon, reject input
+  with interwiki prefixes, otherwise do what Title::makeTitleSafe() does.
+* (bug 6516) Update to Russian translation
+* New 'allpagesbadtitle' message for Special:Allpages, based on 'badtitletext'.
+* Rename "searchquery" to "searchsubtitle" and support wiki text in it
+* Introduce updateArticleCount maintenance script which uses a better check that
+  reflects what Article::isCountable() tests for
+* Introduce 'BadImage' hook; see docs/hooks.txt for more information
+* Add "searchsubtitleinvalid" message for searches that are not valid titles.
+* (bug 5962) Update to Italian localisation
+* (bug 6530) Update to Indonesian localisation (id) #25
+* (bug 6523) Fix SVG issue in rebuildImages.php
+* (bug 6512) Link to page-specific logs on page histories
+* (bug 6504) Allow configuring session name with $wgSessionName
+* (bug 6185) Add standard user tool links to log page views
+* Update to Venetian translation (vec)
+* Update to Slovenian translation (sl)
+* Add standard user tool links to deleted revision list
+* Separate out EditPage's getContent bits from regular Article getContent.
+  Cleans up read-only-mode warning on empty pages and neats up some code.
+* (bug 6565) Strict JavaScript writing
+* (bug 6570) Update to Indonesian localisation (id) #26
+* Added Telugu translation (te)
+* Update to Catalan translation (ca)
+* (bug 6560) Avoid PHP notice when trimming ISBN whitespace
+* Added namespace translation to Kannada (ka)
+* (bug 6566) Improve input validation on timestamp conversion
+* Implicit group "emailconfirmed" for all users whose email addresses are confirmed
+* (bug 6577) Avoid multiline parser breakage on <pre> with newline in attribute
+* (bug 6771) Make old revisions of MediaWiki pages available with action=raw
+
+== Changes since 1.5 ==
+
+* (bug 2885) More PHP 5.1 fixes: skin, search, log, undelete
+
+Code quality:
+* Use strval() to make sure we don't accidentally get null on bad revision
+  text loads or other fields mucking up XML export output
+* Clean up duplicate code for selection of changeslist style
+* Correct blob caching to reduce redundant blob loads on backups
+* (bug 3182) Clear link cache during import to prevent memory leak
+* Fixed possible infinite loop in formatComment
+* Wrap message page insertions in a transaction to speed up installation
+* Avoid notice warning on edit with no User-Agent header
+* (bug 3649) Remove obsolete, broken moveCustomMessages script
+* Avoid numerous redundant latest-revision lookups in history
+* Require PHP 4.3.2 or higher strictly now.
+* Tweak infinite-template-handling loop for PHP 5.1.1 string handling change
+* Remove unused OutputPage::addCookie()
+* Fix for short_open_tag off again; please don't break this, guys
+* (bug 4507) Adjust FULLPAGENAMEE escaping to standard form
+* (bug 5302) Merge the two #p-search .pBody statements in monobook css.
+
+Database:
+* Finally dropped MySQL 3.23.x support
+* Oracle support
+* (bug 3056) MySQL 3 compatibility fix: USE INDEX instead of FORCE INDEX
+* Update all stats fields on recount.sql
+* (bug 3227) Fix SQL injection introduced in experimental code
+* Fix table prefix usage in Block::enumBlocks
+* (bug 3448) Set page_len on undelete
+* (bug 3506) Avoid MySQL error when Listusers returns no results
+* Skip update of disused 'rc_cur_time' field (todo: discard the field)
+* (bug 3735) Fix to run under MySQL 5's strict mode
+* (bug 3786) Experimental support for MySQL 4.1/5.0 utf8 charset mode
+  NOTE: Enabling this may break existing wikis, and still doesn't
+  work for all Unicode characters due to MySQL limitations.
+* MySQL 5.0 strict mode fix for moving unwatched pages
+* Ability to set the table name for external storage servers
+* Update ipblocks table in MySQL 5 table defs
+* Removed FulltextStoplist.php, no longer used (was for MySQL 3.x workaround)
+* Added templatelinks table, to track template inclusions. User-visible effects
+  will be:
+  * (inclusion) tag for inclusions in Special:Whatlinkshere
+  * More accurate list of used templates on the edit page
+  * More reliable cache invalidation when templates outside the template
+    namespace are changed
+* Respect database prefix in dumpHTML.inc
+* Removed read-only check from Database::query()
+* Added externallinks table, to track links to arbitrary URLs
+* Added job table, for deferred processing of jobs. The immediate application is 
+  to complete the link table refresh operation when templates are changed.
+* Don't change the password of the MySQL root user.
+
+Documentation:
+* (bug 3306) Document $wgLocalTZoffset
+
+Hooks:
+(list not complete)
+* Move ArticleSave hook execution into Article insert/update functions,
+  so they get called on non-EditPage actions that use these functions
+  to create or update pages.
+* Added EditFilter hook, and output callback on EditPage::showEditForm()
+  for a place to add in captcha-type extensions in the edit flow
+* (bug 3684) Fix typo in fatal error backtraces in Hooks.php
+* Fix for hook callbacks on objects containing no fields
+* Add a hook for additional user creation throttle / limiter extensions
+* Use $wgOut->parse() in wfGetSiteNotice() instead of creating a new parser
+  instance. This allows use of extension hooks if required.
+* Added AutoAuthenticate hook for external User object suppliers
+* Added 'PageRenderingHash' hook for changing the parser cache hash key
+  from an extension that changes rendering based on nonstandard options.
+* Add 'GetInternalURL' hook to match the GetFullURL and GetLocalURL ones
+* (bug 4456) Add hook for marking article patrolled
+* Add UserRights hook, fires after a user's group memberships are changed
+
+Images:
+* Support SVG rendering with rsvg
+* Cap arbitrary SVG renders to given image size or $wgSVGMaxSize pixels wide
+* (bug 3127) Render large SVGs at image page size correctly
+* Fix scaling of non-integer SVG unit sizes
+* (bug 2800) Don't scale up small images on |thumb| without explicit size
+* Use the real file link instead of the default-size rasterized version for
+  large SVG images on image description page
+* Include the file name/type/size line for non-resized images
+* (bug 3489) PHP 5.1 compat problem with captioned images
+* (bug 3643) Fix image page display of large images with resizing disabled
+* Added a limit to the size of image files which can be thumbnailed
+* (bug 3806) Gracefully fall back to client-side scaling on |thumb| image
+  that passes $wgMaxImageArea
+* (bug 153) Adjust thumbnail size calculations to match consistently;
+  patch by David Benbennick
+* (bug 4162) Add $wgThumbnailEpoch timestamp to force old thumbs to
+  be rerendered on demand, sitewide
+* (bug 1850) Additional fixes so existing local and remote images
+  get a blue link even if there's no local description page
+* Avoid FATAL ERROR when creating thumbnail of non-existing image
+* (bug 4207) Wrong image size when using 100x200px syntax to scale image up
+  patch by David Benbennick
+* Don't delete thumbnails when refreshing exif metadata. This caused thumbs
+  to vanish mysteriously from time to time for files that didn't have metadata.
+* (bug 4426) Add link to user_talk page on image pages
+* Support a custom convert command for thumbnailing. See DefaultSettings.php
+  and the comments for $wgCustomConvertCommand, for more information.
+* UserCan hook now allows advisory return values, rather than mandatory ones.
+
+Installer:
+* (bug 3782) Throw fatal installation warning if mbstring.func_overload on.
+  Why do people invent these crazy options that change language semantics?
+* Fixed installer bugs 921 and 3914 (issues with using root and so forth)
+* (bug 4258) Use ugly urls for ISAPI by default
+  patch by Rob Church
+* Improve installer 
+	* Use a superuser account (such as root), if specifed, to create tables
+	* Don't overwrite conservative permissions on the mySQL user with ALL
+	  permissions, if said user exists
+	* Changes to some of the wording of explanations for fields
+* (bug 1734) granting db permissions failed with db usernames containg '-'
+* Add basic check for session support in PHP and die if not present
+
+Maintenance:
+* Fix problem reported on mailing list where re-initialising stats didn't work (can't insert
+  duplicate rows with the same id field)
+* Added --conf option to command line scripts, allowing the user to specify a 
+  different LocalSettings.php.
+* Maintenance script to delete unused text records
+* Maintenance script to delete non-current revisions
+* Maintenance script to wipe a page and all revisions from the database
+* Maintenance script to reassign edits from one user to another
+* Maintenance script to find and remove links to a given domain (cleanupSpam.php)
+* Fix --report interval option for dumpTextPass
+
+i18n / Languages:
+* Partial support for Basque language (from wikipedia and meta)
+* (bug 3141) Partial support for Breton language (thanks Fulup).
+* Support for venitian language
+* (bug 1334) LanguageGa.php update
+* Finnish date format was hardcoded, now implemented properly
+* (bug 3190) Added some date format choices for language sr
+* (bug 2753) Some namespaces were not translated in LanguageTa.php (Tamil)
+* (bug 3204) Fix typo breaking special pages in fy localization
+* (bug 3177) Estonian date formats not implemented in LanguageEt.php
+* (bug 1020) Changing user interface language does not work immediately
+* (bug 3271) Updated LanguageNn.php for HEAD
+* Experimental feature to allow translation of block expiry times
+  Implementation only for Finnish currently
+* (bug 3304) Language file for Croatian (LanguageHr.php)
+* (bug 2143) Update Vietnamese interface
+* (bug 3063) Remove some hardcodings from Hebrew localisation
+* (bug 3408) Bulgarian formatNum corrected
+* (bug 1512) Disable x-code interp on Esperanto URLs for now, it does more
+  harm than good under current system by breaking incoming URLs with "ux".
+  (Editing is not affected, just URLs.)
+* (bug 1423) LanguageJa.php update
+* Fix language name for dv
+* (bug 3503) Update LanguageSq.php from sq.wikipedia.org messages
+* (bug 3629) Fix date & time format for Frisian
+* (bug 3334) Namespace changes for Polish
+* (bug 3580) Change default Dutch language file to more neutral
+* (bug 3656) LanguageHr.php - added convertPlural
+* (bug 3414) LanguageBe.php - added convertPlural
+* (bug 3163) Full translation of LanguageBr
+* (bug 3617) Update for portuguese language (pt)
+* Namespaces hacks on LanguagePl
+* (bug 3682) LanguageSr.php - added convertPlural
+* (bug 3694) LanguageTr.php update
+* (bug 3711) Removed invisible unicode characters from LanguageHu
+* (bug 2981) Linktrail for Tamil (ta)
+* (bug 3722) Update of Arabic language (ar) Namespace changes
+* Removed hardcoded Norwegian (no) project namespaces
+* (bug 2324) image for redirects should be without text and oriented according to content language
+* (bug 3666) Don't spew PHP warnings in prefs on unrecognized site language
+* (bug 3817) Use localized date formats in preferences; 'no preference' option
+  localizable as 'datedefault' message. Tweaked lots of languages files...
+* (bug 2721) Regression: Use European number separators for vi: wikis
+* (bug 3961) minor languageDe changes
+* (bug 1984) LanguageKo.php (Korean) update
+* (bug 3804) update of LanguageWa.php file
+* (bug 3886) Update for Portuguese language (pt)
+* (bug 4020) Update namespaces for ms
+* (bug 3922) bidi embedding overrides on category links
+* (bug 4061) Update of Slovene namespace names (LanguageSl.php)
+* (bug 4064) LanguageDe comma changes
+* (bug 3922) Further tweaks to bidi overrides in category list for old
+  versions of Safari and Konqueror
+* Fix custom namespaces on wikis set for Portuguese
+* (bug 4153) Fix block length localizations in Greek
+* (bug 3844) ab: av: ba: ce: & kv: now inherit from LanguageRu.php
+             ii: & za: now inherit from LanguageZn_cn.php
+* (bug 4165) Correct validation for user language selection (data taint)
+* (bug 4192) Remove silly 'The Free Encyclopedia' default sitesubtitle
+* Use content-lang for sitenotice
+* (bug 4233) Update LanguageJa.php
+* (bug 4279) Small correction to LanguageDa.php
+* (bug 4108, 4336) Remove trailing whitespace from various messages, which
+  mucks up message updating to create dupe entries
+* (bug 4389) Fix math options on zh-hk and zh-tw (but not localized)
+* (bug 4392) Update of LanguageSr.php
+* (bug 4382) Frisian numeric format
+* (bug 4424) Update for Spanish language (es) 100% messages translated
+* (bug 4425) Typos in Polish translation
+* (bug 4436) Update for Turkish language (tr)
+* (bug 4413) Update of Farsi language file (LanguageFa.php)
+* Update for LanguageSr (Serbian): magic words
+* (bug 137) MediaWiki:Copyrightwarning hardcoding
+* (bug 4457) Update for Portuguese language (pt)
+* convertPlural breakage fixed a little
+* (bug 4144) Support for Sudanese language (Basa Sunda)
+* Big cleanup:
+ - Removed obsolote, badly or untranslated messages
+ - Removed references to wikipedia/wikimedia etc in messages
+ - Other cleanup, like removing html and javascript and extension calls
+ - Removed hardcoded namespaces: Tt, Ms, Ia, Ga, Fo, Bn, Csb, He, Nv, Oc, Tlh
+ - Removed some useless backwards compatibility hacks
+ - Fixed formatnum on many languages
+* wgAmericanDates check produced incorrect results in languages that don't have
+  a such distinction
+* (bug 4548) Update for Portuguese language (pt): time format
+* (bug 4530) Use consistent name for Kurdish
+* Tweak default "upload disabled" text
+* (bug 4504) Use site language for namespace name resolution
+* (bug 4510) Correct Barnes & Noble bookstore URLs
+* (bug 3991) Allow the operation of wikicode on Protect move only text
+* (bug 4267) Switch dv sd ug ks arc languages to RTL
+* Default main page content improved per bug 4690
+* (bug 4615) Update for Portuguese language (pt)
+* Separated MessagesSl.php as the other languages.
+* (bug 4960) Add additional namespaces variants to Yiddish for compatibility
+* (bug 4805) Removed more wikipedia-references from MessagesUk.php
+* (bug 5015) Update magic words translation in LanguageBe.php
+* (bug 4859) Update for Portuguese messages (pt)
+* (bug 4788) One string for MessagesPl
+* Restriction types now use restriction-* messages instead of ui messages
+* (bug 4685) Slovenian LanguageSl.php hardcodes project namespace
+* (bug 5097) Fix Hungarian language (hu): thousands separator
+* (bug 5098) Update for Portuguese messages (pt)
+* (bug 5113) Spelling error in French language file
+* (bug 5105) Magic words for LanguageAr.php
+* (bug 3993) Variants for Serbian language
+* Typo in English messages file
+* (bug 4114) Spacing in watchlist rows (in editing mode)
+* Update default "exporttext" to reflect that Special:Import exists
+* (bug 4960) Add additional namespaces variants to Yi projects: Yiddish Wikinews fix
+* (bug 5357) Add the icon near the user name also in RTL interfaces
+* (bug 5156) Update for Hebrew language (he)
+* (bug 4497,4704,5010) Added some new language codes.
+* (bug 5362) Piedmontese added
+* (bug 5349) Update for Portuguese messages (pt)
+* (bug 3573) Finished full Greek translation: namespaces
+* (bug 5288) Initial localisation for Az
+* (bug 4361) Fix "allmessagesnotsupportedui" so it doesn't refer to nonexisting
+  page
+* Tweak wording of "allmessagesnotsupporteddb"
+
+Parser:
+* (bug 2522) {{CURRENTDAY2}} now shows the current day number with two digits
+* (bug 3210) Fix Media: links with remote image URL path
+* (bug 3405) Don't use raw letters as aliases of MSGNW: and SUBST:
+* (bug 3412) Clean up date format handling so ~~~~-sigs work with default
+  format as designed. Documentation comments updated.
+* Fix Parser::unstrip on PHP 5.1.0RC4
+* (bug 3797) Don't expand variables and sigs in comments
+* Allow parser cache on redirect targets
+* Run wikitext-escaping on plaintext sigs (no wiki markup, just name)
+* Check for unbalanced HTML tags on raw sigs (markup allowed, but show
+  a warning in prefs and use default sig if not balanced)
+* Respect <noinclude> and <includeonly> during {{subst:}} expansion as well as
+  ordinary templates.
+* Support <includeonly> in templates loaded through preload= parameter
+* (bug 3979) Save correct {{REVISIONID}} into parser cache on edit
+* Substitute {{REVISIONID}} correctly in diff display
+* (bug 1850) Allow red-links on image pages linked with [[:image:foo]]
+* Fix XML validity checks in parser tests on PHP 5.1
+* (bug 4377) "[" is not valid in URLs
+* (bug 4453) fix for __TOC__ dollar-number breakage
+* Convert unnecessary URL escape codes in external links to their equivalent
+  character before doing anything with them. This prevents certain kinds of
+  spam filter evasion.
+* (bug 4783) : Fix for "{{ns:0}} does not render"
+* Improved support for interwiki transclusion
+* (bug 1850) Image link to nonexistent file fixed.
+* (bug 5167) Add {{SUBPAGENAME}} and {{SUBPAGENAMEE}} variables
+* (bug 4949) Missing : in "addedwatchtext" for English and Spanish
+* Allow user-defined functions, which work in a similar way to {{GRAMMAR:}} 
+  etc. Registered via an interface similar to tag hooks.
+
+Upload:
+* (bug 2527) Always set destination filename when new file is selected
+* (bug 3076) Support MacBinary-encoded uploads from IE/Mac
+* (bug 2554) Tell users they are uploading too large file
+* Support for a license selection box on Special:Upload, configurable from MediaWiki:Licenses
+* Add 'reupload' and 'reupload-shared' permission keys to restrict new uploads
+  overwriting existing files; default is the old behavior (allowed).
+
+Security:
+* (bug 3244) Fix remote image loading hack, JavaScript injection on MSIE
+* (bug 3280) Respect 'move' group permission on page moves
+* (bug 2613) Clear saved passwords from the form
+* IP privacy fix for blocklist search on autoblocks
+* Security fix for <math>
+* Security fix for tables
+* Security fix for Special:Upload license selection list
+* Add UploadVerification hook for custom file upload validation/security checks
+* Blacklist additional MSIE CSS safety tricks
+* Fix meta robots tag on Special:Version again to avoid listing vulnerable
+  versions for convenient harvesting by automated worms
+* Sanitizer CSS comment processing order fix
+* Forbid usernames that can be interpreted as titles with namespaces, as that
+  leads to hard-to-manage names.
+* (bug 4071) Generate passwords long enough for $wgMinimalPasswordLength
+* Add createpage and createtalk permission keys, allowing a quick
+  switch to disable page creation for anonymous users.
+* (bug 675) Add page protection level for unregistered/new accounts
+* User::isNewbie now uses the registration date and $wgAutoconfirmAge
+* Add 'deletedhistory' permission key for ability to view deleted history
+  list via Special:Undelete. Default is off, replicating the 1.5 behavior,
+  but it can be turned back on for random users to replicate the previous
+  1.6 dev behavior.
+* Set cookies to secure mode based on use of HTTPS or $wgCookieSecure
+* (bug 4371) Disallow tilde character in signatures
+* Removed broken wgAllowAnonymousMinor and added new group right minoredit
+* Added detection for WMF files (application/x-msmetafile), added this 
+  MIME type to the default blacklist. Prevented inline display of images
+  which are not of known image types. This is in response to
+  http://en.wikipedia.org/wiki/Windows_Metafile_vulnerability
+* Blocked users can no longer roll back, change the protection of, or delete/undelete pages
+* Protect against spoofing of X-Forwarded-For header
+* XSS issue : now sanitize search query input (fixed in 1.5rc3)
+* Remove deprecated $wgOnlySysopsCanPatrol references; use User::isAllowed( 'patrol' )
+  per bug 5282. Patch by Alan Harder.
+* Prevent registration/login with the username "MediaWiki default"
+
+Special Pages:
+* Rearranged Special:Movepage form to reduce confusion between destination
+  title and reason input boxes
+* (bug 1956) Hide bot uploads from Special:Newimages
+* (bug 3220) Fix escaping of block URLs in Recentchanges
+* (bug 3284) Ipblocklist paging, substring search
+* Allow filtering of robot edits in Special:Watchlist by stting 
+  $wgFilterRobotsWL = true.
+* Fix interlanguage links on special pages when extra namespaces configured
+* (bug 3475) anon contrib links on Special:Newpages
+* Special:Import/importDump fixes: report XML parse errors, accept <minor/>
+* (bug 2369) Add separate message for input box on Special:Prefixindex
+* (bug 3798) DoubleRedirects no longer has hard coded arrows
+* (bug 3803) Fix links on Special:Wantedcategories with miser mode off
+* Fix Special:BrokenRedirects on MySQL 5.0
+* (bug 3807) Fix 'all' in namespaces drop-down on contribs, rc
+* Fail gracefully on invalid namespace in Special:Newpages
+* (bug 3762) Define missing Special:Import UI messages
+* (bug 3761) Avoid deprecation warnings in Special:Import
+* (bug 2894) Enhanced Recent Changes link fixes
+* (bug 4059) fix 'hide minor edits' on Recentchangeslinked
+* (bug 146) List number of category members in Special:Categories
+  (patch by Joel Nothman)
+* (bug 4090) Fix diff links in Special:Recentchangeslinked
+* (bug 4093) '&bot=1' in Special:Contributions now propagate to other links
+* Fix display of old recentchanges records for page moves
+* (bug 360) Let Whatlinkshere track [[:image:foo]] links
+* (bug 3073) Keep search parameter on paging in Special:Newimages
+* Removed Special:Validate, it's been superseded by the Review extension
+* (bug 4359) red [[user:#id]] links generated in [[special:Log]]
+* (bug 1996) Special page to list redirects
+* (bug 4334) Add "watch" links to Special:Unwatchedpages
+* Generate target user page links in Special:Ipblocklist where appropriate
+  (i.e. not an autoblock)
+* Generate link to talk page of the blocker in Special:Ipblocklist, move
+  contribs. link of the target next to their name
+* (bug 2714) Backlink from special:whatlinkshere was hard set as 'existing'
+* Move parentheses out of <a> link in Special:Contributions
+* (bug 3192): properly check 'limit' parameter on Special:Contributions
+* (bug 3187) watchlist text refer to unexistent "Stop watching" action
+* Add block, block log and general log links to Special:Contributions
+* Add contributions link to block log items
+* Added optional "hide own edits" feature to Special:Recentchanges
+* (bug 5018) Anchors for each message in Special:Allmessages
+* Introduce $wgWantedPagesThreshold per bug 5011; Special:Wantedpages will not
+  list pages with less than this number of links. Defaults to 1.
+* (bug 4319) Don't show a "create account" link on the login form when
+  account creation is disabled.
+* JavaScript filter for Special:Allmessages
+* (bug 3047) Don't mention talk pages on Special:Movepage when there isn't one
+* Show links to user page, talk page and contributions page on Special:Newpages
+* Special:Export can now export a list of all contributors to an article (off by default)
+* (bug 5372) Add number of files to Special:Statistics
+* (bug 2871) Links to talk pages in watchlist editing view
+* (bug 5385) Allow hiding anonymous edits on Special:Recentchanges
+* (bug 2544) Illogical error reporting order in Special:Userlogin
+* (bug 5409) Hide "show/hide patrolled edits" in Special:Recentchanges if patrolling
+  is disabled
+* (bug 5447) Convert first letter of username to uppercase before searching in Special:Listusers
+* (bug 759) Wrap redirects on the watchlist editing page in a span, class "watchlistredir"
+* (bug 1862) Namespace filtering in watchlists
+
+Misc.:
+* PHP 4.1 compatibility fix: don't use new_link parameter to mysql_connect
+  if running prior to 4.2.0 as it causes the call to fail
+* (bug 3117) Fix display of upload size and type with tidy on
+* (bug 2323) Remove "last" tabindex from history page
+* (bug 3116) Division by zero on [[Image:Foo.png|123x123px|]]
+* Fix display of read-only lockfile message
+* Include software-visible client IP address in Special:Version comment
+  as a proxy debugging aid
+* (bug 3170) Page Title failed to obey MediaWiki:Pagetitle.
+  wikititlesuffix was removed
+* Add ability to break off certain debug topics into additional log files;
+  use $wgDebugLogGroups to configure and wfDebugLog() to log.
+* Edit conflict on recreation of deleted page
+* (bug 3216) Don't show empty warning page when no warnings.
+* (bug 3218) Use proper quoting on history Compare Revisions button
+* Fix upgrade from 1.4 due to version number check breakage [for rc future]
+* Fix upgrade from 1.4 with no old revisions
+* Remove "info" editing toolbar that was shown in browsers which do not
+fully support the editing toolbar, but was found to be too confusing.
+* Don't override edit conflict suppression on section edits; section merging
+  should provide the expected transparency here and fits usage patterns better.
+* (bug 3292) Fix move-over-redirect test when current entries are not plaintext
+* (bug 2078) Don't hide watch tab on preview
+* Fix regressions in ChangesList traditional layout
+* Fix edit on double-click for move-protected pages in Classic skin
+* (bug 3485) Fix bogus warning about filename capitalization when off
+* (bug 2570) Add 'watch this page' checkbox on uploads, watch uploads
+  by default when 'watchdefault' option is on
+* Add options to dumpBackup.php for making split/partial dumps by page id
+* Added filter options, compression piping, and multiple output streams for
+  dumpBackup.php
+* (bug 3595) Warn and abort if importDump.php called in read-only mode.
+* (bug 3598) Update message cache on message page deletion, patch by Tietew
+* Added separate noarticletext and newarticletext messages for logged in and anon users.
+* (bug 3332) Installation now uses Monobook, validates, plus usability improvements.
+* (bug 3660) Update diff3 detection to work with Windows/Cygwin
+* (bug 2330) Don't do funny thinks with "links" in MediaWiki:Undeletedtext
+* Two-pass data dump for friendliness to the DB (--stub, then dumpTextPass.php)
+* Data dump 'prefetch' mode to read normalized text from a prior dump
+  (requires PHP 5, XMLReader extension)
+* (bug 2773) Print style sheet no longer overrides RTL text direction
+* (bug 2938) Update MediaWiki:Exporttext to be more general
+* Various fixes
+* Fix wfMsg*() replacements; args containing literal $[2-9] were wiped
+* Added @import for [[MediaWiki:Common.css]] to all skins
+* Edit box now remembers scrollbar position on preview
+* (bug 3816) Throw edit conflict instead of fatal error when a page is
+  moved or deleted during section edit
+* (bug 3771) Handle internal functions in backtrace in wfAbruptExit()
+* (bug 3291) 'last' diff link for last history line when not at end
+* (bug 3667) Add missing global in page move code
+* (bug 2885) Remove unnecessary reference parameter which broke classic skin
+  talk notification on PHP 5.0.5
+* (bug 3852) "Redirected from" link no longer obscured on double-redirects
+* changed directory hierarchy in images/math/. System upgrades from old to
+  new hierarchy on the fly.
+* (bug 3487) Fix category edit preview with preview-on-bottom
+* (bug 918) Search index incorrectly joined words at == headings ==
+* (bug 3877) Render math images into temp directory, then move to hashed
+  subdir so you can render new math images and have them work
+* (bug 2392) Fix Atom items content type, upgrade to Atom 1.0
+* Allow $wgFeedCacheTimeout of 0 to disable feed caching
+* Fix WebRequest::getRequestURL() to strip off the host bits squid prepends
+* Require POST for action=purge, to stop bots from purging the cache
+* Added local message cache feature ($wgLocalMessageCache), to reduce bandwidth
+  requirements to the memcached server.
+* (bug 3562) for go search, try Caps-Variants-Broken-At-Non-Whitespace
+* (bug 2569) Use PATH_SEPARATOR instead of trying to guess based on
+  DIRECTORY_SEPARATOR (was wrong on NetWare)
+* (bug 2740) Accept image deletions on 'enter' submit from MSIE
+* (bug 3939) Don't try to load text for interwiki redirect target
+* (bug 3948) Avoid notice warning in debug statement in bad search
+* Recognize Special:Search consistently so read whitelist works
+* (bug 3999) Change atom 1.0 feed id; had been unnecessarily complex due to
+  unclear language in the spec. Now using the URL, same as the permalink,
+  which someone else will probably whine about because it's not 'perma'
+  enough or something.
+* (bug 4014) Fix include mode for Allpages on small page sets
+* (bug 3996) Fix text for new entries in RC RSS/Atom feed
+* (bug 3065) Update both watched namespaces when renaming pages
+* Changed mail form to have a bigger message entry box (like for editing
+  a page
+* Fix ulimit parameters for wfShellExec when memory_limit is specified in 'm'
+* (bug 2111) Collapsable exif metadata table, clean up display
+* Reduce fractions in display of exif exposure time
+* (bug 4048) Optional footer link to site privacy policy
+* Don't die() when update.php reaches the end of the warning count
+* (bug 1915) Fix edit links when 'direction' used with 'oldid';
+  using revision ID reported via OutputPage; Skin::editUrlOptions()
+* Remove obsolete 'redirect=no' on some edit links
+* Include oldid for the second revision on edit link on diff view
+* (bug 4035) Fix prev/next revision links on edit page
+* (bug 4100, 3049) Add 'edittools' message to hold edit tools, put it
+  on Special:Upload as well as edit, rearrange edit page pieces a bit.
+  Copyright warning now above the buttons to ensure it's visible,
+  template list at the bottom so it can grow.
+* Optional summary parameter to action=rollback, for user javascript
+* (bug 4167) Fix regression caused by patch for bug 153
+* (bug 4169) Use $wgLegalTitleChars in pipe trick conversions
+* (bug 4170) Decode HTML character escapes in sort key
+* (bug 4201) Fix user-talk mode for Enotif, and general code cleanup
+* (bug 4214) Skip redundant action text inserts into the HTML <title>
+* (bug 4212) Skip redundant meta-robots tag for default settings
+* Fix regression: old version missing from edit links in Nostalgia skin
+* (bug 1600) Trigger edit conflict on duplicate section=new submissions
+* (bug 4001) Use local variables properly in wikibits.js akeytt()
+* Fix regression: old version missing from edit links on CSS/JS pages
+* (bug 3211) Include Date, To mail headers when using PEAR::Mail
+* (bug 3407) Fix encoding of subject and from/to headers on notification
+  mails; userMailer() now takes a MailAddress wrapper object instead of
+  a raw string to abstract things a level.
+* Fixed --server override on dumpTextPass.php
+* Added plugin interface for dumpBackup, so additional filters and output
+  sink types can be registered at runtime from an extension
+* (bug 349) Fix for some numeric differences not being highlighted
+  patch by Andrius Ramanauskas
+* (bug 4298) Include rc_id on enhanced RC singleton diff links for patrolling
+* Did some refactoring on ChangesList.php merging dupe code
+* (bug 1586) Fix interwiki generator for wikimedia obscure domains
+* (bug 3493) Mark edits patrolled when they are reverted
+  patch by Leon Planken
+* Removed experimental Amethyst skin from default set
+* Upgrade old skin preferences properly at Special:Preferences
+  (used to spontaneously switch to Classic skin for old numeric pref records)
+* (bug 3424) Update page_touched for category members on category page creation
+* Log views show message when no matches
+* Fix raw sitenotice display on database error
+* Fix autoconfirm check for old accounts
+* (bug 4368) Don't show useless empty preview on new section creation
+* Don't show useless empty preview on new page creation
+* (bug 4411) Fix messages diff link for classic skin
+* (bug 4385) Separate parser cache entries for non-editing users, so section
+  edit links don't vanish / appear unwanted on protected pages
+* (bug 2726, 3397) Fix [[Special:]] and [[:Image]] links in action=render
+* (bug 4419) Remove obsolete magnify.png.old
+* Removed $wgUseCategoryMagic option, categories are now enabled unconditionally
+* (bug 3318) UI workarounds for disabled items in license selector
+  MSIE/Win: items now grayed out, JS will revert to 'non selected' if clicked
+  Safari: JS will revert to 'non selected' if clicked (but not gray)
+  MSIE/Mac: indented items now visible (JS hack)
+* (bug 714) "plainlinks" class issues in IE, Opera
+* (bug 4317) Inconsistent "broken redirects" messages
+* Default interface text for "selflinks" tweaked
+* (bug 3194) default implementation of translateBlockExpiry
+  which uses ipboptions
+* (bug 4446) $wgExportAllowHistory option to explicitly disable history in
+  Special:Export form, 'exportnohistory' message to translate live hack.
+* Maintenance script to delete unused user accounts
+* (bug 912) Search box easier to reach in text browsers (lynx, links)
+* $wgParserCacheExpireTime added
+* Skip loading of RecentChange.php except where needed
+* Enforce $wgSVGMaxSize when rendering, even for SVGs with a very large source 
+  size. This is necessary to limit server memory usage.
+* Cleanup and error checking on Special:Listredirects
+* Clear up some instances of old OutputPage::sysopRequired() function usage
+* Improve "upload disabled" notice
+* Move parts of index.php to include/Wiki.php in an attempt to both cleanup index.php 
+  and create a MediaWiki-class mediaWiki base object
+* (bug 4104) Added OutputPageBeforeHTML hook for tweaking primary wiki output
+  HTML on final output (cached or not)
+* Avoid PHP notice on command-line scripts if empty argument is passed ('')
+* (bug 4571) Partial fix hack for {{fulllurl:}} in action=render
+* (bug 3502) Bowtie symbol for TeX
+* (bug 4000) Support for \textstyle et al. in <math>
+* (bug 1663) support color in TeX formulas
+* (bug 2026) missing glue around \not= (TeX)
+* (bug 4576) Missing '>' broke license selector's first option in IE, Opera
+* Override $wgLocaltimezone in parser tests for us outside Iceland and UK
+* Fix extra whitespace at end of Wiki.php, DESTROYS XML OUTPUT
+* Remove redundant 'echo' statements from MonoBook.php
+* (bug 1103) Fix up redirect handling for images, categories
+  Redirects are now followed from the top-level, outside of the Article
+  content loading and viewing, for clarity and consistency.
+* (bug 4104) 'OutputPageBeforeHTML' hook to postprocess article HTML on
+  page view (comes after parser cache, if used). Patch by ThomasV.
+* Linker::formatComment corrupted the passed title object on PHP 5
+  if the comment included a section link. Use clone() to make a safe copy.
+* Add wfClone() wrapper since we're still using PHP 4 on some servers.
+* Remove obsolete killthread.php
+* Added wfDie() wrapper, and some manual die(-1), to force the return code
+  to the shell to return nonzero when we crap out with an error.
+* Allow input of the stub from a compressed file instead of stdin
+  for dumpTextPass.php; easier to get errors back on the shell
+* Added an attractive space on the namespace selector on contribs
+* Move PHP 5-friendly XHTML doctype hack to Sanitizer, use for sig checks.
+  Fixes use of named entities in sigs on PHP 5
+* (bug 4482) Include move comment on the null edit as well as the redirect
+* (bug 3990) Use existing session name if session.auto_start is on
+  Fixes checks for open sessions, such as the cookie warning on login.
+  Patch by Zbigniew Braniecki.
+* Add cache-safe alternate sitenotice for anonymous users. (MediaWiki:Anonnotice)
+  This is displayed instead of the regular sitenotice, if it exists. If not, the
+  regular sitenotice shows. If that doesn't exist, the value of $wgSiteNotice is used,
+  and if that's null, then nothing is shown.
+* Spit the generated LocalSettings code out during the installer as an aid
+  to debugging issues. (Keep this?)
+* Use __FILE__ to form path in new LocalSettings.php, so it stays accurate
+  when the directory is relocated for typical usage.
+* Auto-update $wgCacheEpoch when LocalSettings.php changes on new installs.
+  For typical usage this will be a light burden and should reduce confusion
+  when the configuration is edited.
+* Fix $wgCacheEpoch's effect on client-side caching.
+* (bug 1122) gray out 'older revision' when viewing first article revision.
+* Clearer message in DefaultSettings.php: edit LocalSettings.php instead
+* MonoBook skin top link id changed from "contentTop" to "top" (shared with
+  name attribute)
+* (bug 3350) Missing label for move talk page checkbox.
+* (bug 2108) Sort entries when using category browser
+* (bug 2393) Fix MIME type for Atom feeds ( application/rss+atom )
+* Add ".deps.php" include-file preloaders for some dynamically-loaded
+  language and skin classes. Should help with the broken base-class
+  problem under PHP 5 with APC as opcode cache. See details:
+  http://mail.wikipedia.org/pipermail/wikitech-l/2006-January/033660.html
+* Small changes to tabs in Monobook skin c/o Chris Ware
+* (bug 4679) Work around buggy basename() function in PHP5, which breaks
+  uploads of files starting with multibyte characters on Linux.
+  wfBaseName() doesn't suffer this bug, and understands backslash on
+  both Unix and Windows.
+* (bug 3603) headscripts variable not hooked up to MonoBook skin
+* Allow local cdb-based interwiki cache
+* Use the "block", not the "protect" permission, when determining whether to
+  show a "block user" link in the toolbox
+* Fix backup dump text prefetch for XMLReader constant changes in PHP 5.1
+* Suppress useless percentage indicator on output from 7za during dumps
+* (bug 4633) Add (previous 200) (next 200) also above catlinks
+* (bug 4686) Fix regression where ?diff=0&oldid=0 caused fatal error on
+  pages with only one revision. Fixes message diff link on first edit.
+* Fix dependence on hardcoded UNIQ_PREFIX in LanguageConverter.php
+* Do not check lag on external storage servers
+* Do not tidy interface messages (unless full tidy is set)
+* Do not trust equality propagation and give more hints to MySQL
+  optimizer for revision fetches (avoids index scans)
+* Use revision rate for ETA in dump generation; it tends to be more stable
+  than the per-page count for full-history dumps.
+* Include timestamp in wfDebugLog breakouts
+* (bug 4469) Namespace-specific notice to be displayed below site-notice
+  Edit messages like "MediaWiki:Namespacenotice-" plus namespace name
+  which is blank for main namespace, or like e.g. "User_talk"
+* Adjust user login/creation form hooks to work with a captcha plugin
+* (bug 1284) Inline styles for diffs in Recent Changes RSS/Atom feeds
+* (bug 4824) IE7 beta 2 broke compatibility with PNG logo workarounds,
+  and seems to work ok with other bits. No longer including the IE
+  workarounds JavaScript for IE 7 and above.
+* Fix extra namespace for Bulgarian
+* (bug 4303) Add $wgFavicon to change the shorticon icon link from
+  the default /favicon.ico or disable it (if set to false)
+* (bug 3347) strip linebreaks in math error source
+* (bug 4841) Warning for non-logged-in edits
+* (bug 4867) Leave invalid EXIF date fields unformatted instead of
+  showing a bogus current timestamp
+* Reset $wgActionPaths during parser test; corrects some false failures
+  in the automated test report.
+* (bug 4875) Define a div containing the shared image description
+* (bug 4860) Expose Title->userCan() as Hooks
+* (bug 4828) Fix genitive month-name variable for cs, pl, uk
+* (bug 4842) Fix 'show number of watching users' with enhanced RC
+* (bug 4889) Fix image talk namespace for Tamil
+* (bug 4147) Added cleanupWatchlist.php to clear out bogus watchlist entries
+* (partial bug 3456) Disable auto redirect to Main Page after account creation
+* (bug 4824) Separate out IE7 CSS compat hacks, fix for RTL pages
+* Added support for wikidiff2 and similar external diff engines.
+* Allow cookies to be shared between multiple wikis with a shared user database
+* Blocking some Unicode whitespace characters in usernames. Should check
+  if some or all should be blocked from all page titles.
+* Unknown log types no longer throw notices everywhere in RecentChanges
+* (bug 4502, 5017) Don't render potentially hostile deleted page contents
+  on Special:Undelete by default; show source, with an optional preview.
+  The revisions list no longer shows the latest text by default, so it can
+  still be operated if the text is hostile.
+* (bug 5013) Check for existence on "return to" links
+* Removed trailing whitespace on a bunch more messages.
+* Fix missing bad title check in Special:Booksources
+* Remove empty booksources string in fy
+* Avoid corrupting <gallery> inside <!-- comment -->
+* Remove legacy PHPTal code, hasn't been maintained in ages.
+* Tweak Userlogin include order for APC issue
+* Don't try to link to current page on protection tab
+* More exact checking in Title::equals() to fox moves of numerically similar
+  page titles. (Odd hex title bug on 64-bit.)
+* Fix explicit s-maxage=0 on raw pages; should help with proxy issues in
+  generated stylesheets... hopefully...
+* (bug 4685) More fixes for Slovenian project namespace
+* Fixed and enhanced a little the Live Preview, which had been broken for some time
+* Added article size limit, $wgMaxArticleSize
+* (bug 4974) Don't follow redirected talk page on "new messages" link
+* (bug 4970) Make category paging limits configurable
+* (bug 4535) Warn user when editing CSS or JS subpage of a skin that doesn't exist
+* Make Live Preview an user preference, still controllable by the global variable
+* Rename the stub LanguageAls / LanguageGem_alsation to LanguageGsw to follow
+  updated language code assignments
+* (bug 5081) Remove bogus fix for invalid characters in links which simply
+  broke use of legitimate multiple whitespace characters in bracketed link.
+* (bug 4838) Add relative oldids (prev, next, cur) for raw pages
+  Patch by Lupin
+* (bug 5086) Force image resize dimensions on ImageMagick, as for instance
+  "-resize 100x35!"; some thumbs were off due to differences in rounding and
+  would be generated smaller than expected.
+* (bug 5062) Width sometimes one pixel short when using maximum heights
+* Purge thumbnails and metadata cache for action=purge on an image page
+* (bug 4273) Bounce back with a message when attempting to submit a new comment 
+  with an empty main textbox (user probably hit Enter in subject field)
+* (bug 5141) Gracefully handle the new account link when createaccount off
+* (bug 5150 and related) Fix missing ID attribute in HTML namespace selector
+* (bug 5152) Proper HTML escaping on subpage breadcrumbs
+* (bug 4855) Section edit links now have the section name in the title attribute.
+* (bug 2115) Support shift-selecting multiple checkboxes with JavaScript.
+* (bug 5161) Don't try to load template list for nonexistent pages
+* (bug 5228) Workaround for broken LanguageConverter title overrides; avoid
+  unnecessary hidden UI work when watch/unwatch is performed on edit
+* Fixed bogus master fallback in external storage
+* (bug 5246) Add speak:none to "hiddenStructure" class in main.css
+* Further work on rev_deleted; changed to a bitfield with several data-hiding
+  options. Not yet ready for production use; Special:Revisiondelete is
+  incomplete, and the flags are not preserved across page deletion/undeletion.
+  To try it; add the 'deleterevision' permission to a privileged group.
+* (bug 5270) Fix broken linktrail for br, cv, fr, hr, nn, oc, ta, wa
+* Add a clickable contribs link in user tool links (rc, watchlist, diff view)
+  to see how people like it. (There was one in the old hacked-up diff view.)
+* (bug 5236) Load wikibits.js before site-customized javascript
+* (bug 4119) Workaround for <nowiki> following link in Walloon; remove capitals
+  from linktrail, as they're not used anywhere else.
+* (bug 4781) Output links with the percent-encoding they're supplied with;
+  save the normalization for internal link storage. The normalization is a bit
+  buggy and can make incorrect foldings in the query string and such, so isn't
+  reliable beyond the hostname where it's used for the spam bulk checker.
+* Don't URL-decode in the title attribute for URL links; it can produce false
+  results that don't code back to their original values.
+* (bug 4611) Add user preference (default on) to add new pages to creators's watchlist
+* (bug 5286) Fix regression in display of missing/bad revision IDs
+* (bug 4729) Add user preference that marks a user's edits as patrolled if user is able to
+* (bug 4630) Add user preference to prompt users when entering blank edit summaries
+* Added optional suggest feature for the search box. Set wgUseAjax to true to
+  enable it.
+* (bug 5277) Use audio/midi rather that audio/mid
+* (bug 5410) Use namespace name when a custom namespace's nstab-NS message is nonexistent
+* (bug 5432) Fix inconsistencies in cookie names when using table prefixes
+* Additional protections against HTML breakage in table parsing
+* (bug 5355) Include skin name and style JS settings in page source;
+  fixes regression where Opera 6/7 and KHTML CSS fixes weren't applied
+  when wikibits.js was moved up before user JS inclusion.
+* Added $wgColorErrors: if set, database error messages will be highlighted
+  when running command-line scripts in a Unix terminal.
+* (bug 5195) rebuildrecentchanges.php works again; Database::insertSelect now
+  has a parameter for select options.
+* Fix updateSearchIndex.php for new schema
+* Fix bogus "filename too short" error when uploading files with a period in the base
+  name, e.g. "Mr. Zee.png"
+* (bug 2139) Show page title in subtitle when viewing "read only" page
+* (bug 5452) Update language name for Cree
+
+
+
+----
+
+== MediaWiki 1.5.8 ==
+
+March 26, 2006
+
+MediaWiki 1.5.8 is a security and bugfix maintenance release.
+
+A bug in decoding of certain encoded links could allow injection of raw
+HTML into page output; this could potentially lead to XSS attacks.
+
+Some minor UI fixes were also made, see the change log at the bottom of
+this file.
+
+
+== MediaWiki 1.5.7 ==
+
+March 2, 2006
+
+MediaWiki 1.5.7 is a bugfix maintenance release.
+
+Most importantly, a security issue in the installer has been fixed. The bug 
+affects new installations of 1.5.6 only. If the user specified the MySQL root 
+password, to allow the installer to create an unprivileged account, the 
+installer would not only create the new account but also change the root 
+password to be equal to the password of the new account. 
+
+Anyone affected by this bug will need to change the root password back 
+manually. For information about how to change passwords in MySQL please see:
+http://dev.mysql.com/doc/refman/5.1/en/passwords.html
+
+This version includes fixes for compatibility with Internet Explorer 7
+beta 2, and various other bugs; see the full changelog at the end of
+the release notes.
+
+
+== MediaWiki 1.5.6 ==
+
+January 19, 2006
+
+MediaWiki 1.5.6 is a security and bugfix maintenance release.
+
+A bug in edit comment formatting could send PHP into an infinite loop
+if certain malformed links were included. In most installations, this
+would cause the script to fail after PHP's 30-second failsafe timeout.
+
+Some improvements have been made to the installer which should make
+installation possible on a system with a broken MySQL "root" account.
+
+For several other minor fixes, see the complete changelog at the end
+of this file.
+
+
+== MediaWiki 1.5.5 ==
+
+January 5, 2006
+
+MediaWiki 1.5.5 is a security and bugfix maintenance release.
+
+Detection for uploads of Windows Metafile (.wmf) images has been added
+to help protect against a client-side vulnerability in unpatched Microsoft
+Windows operating systems.
+
+Sites which have enabled uploads and added non-standard file types
+(such as .ogg, .doc, or .pdf) should upgrade to this release to ensure
+that malicious .wmf files can't be uploaded with a fake extension;
+such files could put visitors to the site at risk.
+
+For more details on this, see:
+http://en.wikipedia.org/wiki/Windows_Metafile_vulnerability
+
+Additionally, a maintenance script removeUnusedAccounts.php has been added;
+this replaces an older Perl script which had not been updated for the new
+schema in 1.5.
+
+
+== MediaWiki 1.5.4 ==
+
+December 21, 2005
+
+MediaWiki 1.5.4 is a security and bugfix maintenance release.
+
+A hardcoded internal placeholder string has been replaced with a random
+one. This closes a hole where security checks in inline style attributes
+could be bypassed, injecting JavaScript code that could execute in
+Microsoft Internet Explorer.
+
+Other browsers would not be vulnerable.
+
+Several minor fixes are included in this release, most notably a fix
+to clear the "you have new messages" flag properly for usernames
+containing spaces when e-mail notification is enabled.
+
+See the changelog at the end of the release notes for a full list of
+fixes.
+
+
+== MediaWiki 1.5.3 ==
+
+December 4, 2005
+
+MediaWiki 1.5.3 is a security and bugfix maintenance release.
+
+Validation of the user language option was broken by a code change in
+May 2005, opening the possibility of remote code execution as this
+parameter is used in forming a class name dynamically created with
+eval().
+
+The validation has been corrected in this version. All prior 1.5 release
+and prelease versions are affected; 1.4 and earlier and not affected.
+
+Additionally several bugs have been fixed; see the changelog later in
+this file for a complete list.
+
+
+== MediaWiki 1.5.2 ==
+
+November 2, 2005
+
+MediaWiki 1.5.2 is a bugfix maintenance release.
+
+A change in PHP 4.4.1 and PHP 5.1.0RC broke handling of extension and
+<pre> sections, causing garbage data to be inserted in output and saved
+edits. This version works around the change.
+
+Several other glitches with MySQL 5.0 and PHP 5.0.5 were also fixed;
+see the change log below for a complete list.
+
+
+== MediaWiki 1.5.1 ==
+
+October 26, 2005
+
+MediaWiki 1.5.1 is a bugfix and security maintenance release, and is a
+recommended upgrade for all installations.
+
+This release includes further corrections to the inline CSS style sanitation
+which works around a JavaScript "feature" on Microsoft Internet Explorer.
+Users of Microsoft Internet Explorer for Windows may be vulnerable to
+XSS injections on prior versions; users of standards-compliant browsers
+are not vulnerable.
+
+Major fixes include:
+* Image pages work again with resizing disabled
+* Works in MySQL 5.0 strict mode
+
+There is experimental support in this release for explicitly declaring
+the UTF-8 charset in the database; this has been tested with MySQL 5.0.15
+but should work on 4.1 as well.
+
+IMPORTANT: Changing this setting on an existing wiki may produce interesting
+data corruption, depending on server configuration. Page contents should,
+usually, be unaffected, but page titles and other items may be. Limitations
+in MySQL's Unicode support mean that characters outside the BMP cannot be used
+in page titles or various other fields when using this mode.
+
+Table definitions are in maintenance/mysql5/tables.sql, and the runtime
+option to send 'SET NAMES utf8' is set by $wgDBmysql5 = true.
+
+(MySQL 3.23.x and 4.0.x do not support character set declarations; on these
+versions MediaWiki simply works with UTF-8 data and MySQL is blissfully
+unaware of it.)
+
+
+
+== MediaWiki 1.5.0 final ==
+
+October 5, 2005
+
+MediaWiki 1.5.0 is the new stable release branch of MediaWiki, and is
+recommended for all new installations.
+
+Any wikis running a 1.5 beta or release candidate are strongly recommended
+to upgrade to the final release, which includes a number of bug fixes and
+a security fix for CSS bugs in Microsoft Internet Explorer.
+
+IMPORTANT: Running a 1.3 or 1.4 wiki and don't want to jump to 1.5 yet?
+Be sure to upgrade to 1.3.17 or 1.4.11, also released today. Versions
+prior to 1.3.16 and 1.4.10 have a serious data corruption bug which is
+triggered by a spambot known to operate in the wild.
+
+
+=== What's new in 1.5? ===
+
+Schema:
+  The core table schema has changed significantly. This should make better
+  use of the database's cache and disk I/O, and make significantly speed up
+  rename and delete operations on pages with very long edit histories.
+  
+  Unfortunately this does mean upgrading a wiki of size from 1.4 will require
+  some downtime for the schema restructuring, but future storage backend
+  changes should be able to integrate into the new system more easily.
+
+Permalinks:
+  The current revision of a page now has a permanent 'oldid' number assigned
+  immediately, and the id numbers are now preserved across deletion/undeletion.
+  A permanent reference to the current revision of a page is now just a matter
+  of going to the 'history' tab and copying the first link in the list.
+
+Page move log:
+  Renames of pages are now recorded in Special:Log and the page history.
+  A handy revert link is available from the log for sysops.
+
+Editing diff:
+  Ever lost track of what you'd done so far during an edit? A 'Show diff'
+  button on the edit page now makes it easy to remember.
+
+Uploads:
+  It's now possible to specify the final filename of an upload distinct
+  from the original filename on your disk.
+  
+  An image link for a missing file will now take you straight to the upload page.
+  
+  More metadata is pre-extracted from uploaded images, which will ease pressure
+  on disk or NFS volumes used to store images. EXIF metadata is displayed on
+  the image description page if PHP is configured with the necessary module.
+  
+  If .svg files are added to the upload whitelist, you can choose to render
+  them to rasterized .png images for inline display using one of several
+  external helper programs. See DefaultSettings.php for SVG options.
+
+User accounts:
+  There are some changes to the user permissions system, with assignable
+  groups. Note that this does *not* allow you to make pages which are only
+  accessible to certain groups.
+  
+  For details see: http://meta.wikimedia.org/wiki/Help:User_rights
+
+E-mail:
+  User-to-user e-mail can now be restricted to require a mail-back confirmation
+  first to reduce potential for abuse with false addresses.
+  
+  Updates to user talk pages and watchlist entries can optionally send e-mail
+  notifications.
+
+External hooks:
+  A somewhat experimental interface for hooking in an external editor
+  application is included.
+
+And...
+  A bunch of stuff we forgot to mention.
+
+
+=== What's gone? ===
+
+Latin-1:
+  Wikis must now be encoded in Unicode UTF-8; this has been the default for
+  some time, but some languages could optionally be installed in Latin-1 mode.
+  This is no longer supported.
+  
+  You can check if your current wiki is in Latin-1 mode by using your browser's
+  "view source"; look for a line like this:
+  
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+  
+  If it says charset=utf-8, you're ready. If it says charset=iso8859-1,
+  you may need to convert your data. (English-language wikis avoiding
+  any accented characters may be able to get away without conversion.)
+
+MySQL 3.x:
+  Some optimization hacks for MySQL 3.x have been removed as part of the schema
+  clean-up (specifically, the inverse_timestamp fields).
+  
+  MediaWiki 1.5 may still run on 3.x, but wikis of non-trivial size should
+  very seriously consider upgrading to a more modern release. MySQL 3.x support
+  will probably be entirely dropped in the next major release.
+
+Special:Maintenance
+  These tools were, ironically enough, not really maintained. This special
+  page has been removed; insofar as some of its pieces were useful and haven't
+  already been supplanted by other special pages they should be rewritten in
+  an efficient and safe manner in the future.
+
+
+=== Caveats ===
+
+Upgrade:
+  Wikis in Latin-1 encoding are no longer supported; only Unicode UTF-8.
+  A new option $wgLegacyEncoding is provided to allow on-the-fly recoding of
+  old page text entries, but other metadata fields (titles, comments etc) need
+  to be pre-converted. The standard upgrade process does not yet fully automate
+  this, but you can try the alternate partial-upgrader in upgrade1_5.php.
+  
+  The upgrade from 1.4 to 1.5 schema has not been tested for all cases, so
+  it's possible you may experience problems in some combinations.
+
+Backups:
+  The text entries of deleted pages are no longer removed from the main
+  text table on deletion. If you provide public backup dumps of your databases,
+  you will probably want to use the new XML-format dump generator, available
+  as maintenance/dumpBackup.php.
+  
+  For more information on how we run our own public data dumps at Wikimedia,
+  see http://meta.wikimedia.org/wiki/Data_dumps
+
+PostgreSQL:
+  The table definitions for PostgreSQL install are out of date. PostgreSQL
+  support may return in later releases, pending appropriate patches.
+
+MySQL 4.1+:
+  Some users may encounter installation problems with MySQL 4.1 or higher
+  due to strange charset encoding / collation configurations. Try setting
+  to 'latin1' or 'utf8' if you encounter problems.
+
+
+
+== MediaWiki 1.5 release candidate 4 ==
+
+August 29, 2005
+
+MediaWiki 1.5rc4 is a preview release of the new 1.5 release series.
+It fixes compatibility with PHP 5.1, and corrects two cross-site scripting
+security bugs:
+
+* <math> tags were handled incorrectly when TeX rendering support is off,
+  as in the default configuration.
+* Extension or <nowiki> sections in Wiki table syntax could bypass HTML
+  style attribute restrictions for cross-site scripting attacks against
+  Microsoft Internet Explorer
+
+Wikis where the optional math support has been *enabled* are not vulnerable
+to the first, but are vulnerable to the second.
+
+
+
+== MediaWiki 1.5 release candidate 3 ==
+
+August 24, 2005
+
+MediaWiki 1.5rc3 is a preview release of the new 1.5 release series.
+It fixes several major problems in 1.5rc2:
+
+* Fixed a cross-site scripting injection in the search form
+  (broken since 1.5beta1)
+
+* Fixed upgrades from 1.4 database schema
+  (broken since 1.5rc2)
+
+1.3 and 1.4 releases are not vulnerable to the XSS bug, but anyone
+running an earlier 1.5 beta or release candidate should upgrade
+immediately.
+
+
+== MediaWiki 1.5 release candidate 2 ==
+
+August 23, 2005
+
+MediaWiki 1.5rc2 is a preview release of the new 1.5 release series.
+Numerous bug fixes since last beta, plus a security fix; see change
+log below for full details.
+
+A flaw in the interaction between extensions and HTML attribute
+sanitization was discovered which could allow unauthorized use
+of offsite resources in style sheets, and possible exploitation
+of a JavaScript injection feature on Microsoft Internet Explorer.
+
+This version expands the returned text and properly checks it
+before output.
+
+A 1.5rc1 release was mistakenly made from the incorrect source code
+branch; 1.5rc2 is identical to the actual 1.5rc1 in revision control
+except for version number.
+
+
+== MediaWiki 1.5 beta 4 ==
+
+July 30, 2005
+
+MediaWiki 1.5 beta 4 is a preview release of the new 1.5 release series.
+A number of bugs have been fixed since beta 3; see the full changelist below.
+
+
+== MediaWiki 1.5 beta 3 ==
+
+July 7, 2005
+
+MediaWiki 1.5 beta 3 is a preview release of the new 1.5 release
+series, with a security update over beta 2.
+
+Incorrect escaping of a parameter in the page move template could
+be used to inject JavaScript code by getting a victim to visit a
+maliciously constructed URL. Users of vulnerable releases are
+recommended to upgrade to this release.
+
+Vulnerable versions:
+* 1.5 preview series: n <= 1.5beta2 vulnerable, fixed in 1.5beta3
+* 1.4 stable series: 1.4beta6 <= n <= 1.4.5 vulnerable, fixed in 1.4.6
+* 1.3 legacy series: not vulnerable
+
+This release also includes several bug fixes and localization updates.
+See the changelog at the end of this file for a detailed list.
+
+
+
+== MediaWiki 1.5 beta 2 ==
+
+July 5, 2005
+
+MediaWiki 1.5 beta 2 is a preview release of the new 1.5 release series.
+While most exciting new bugs should have been ironed out at this point,
+third-party wiki operators should probably not run this beta release
+on a public site without closely following additional development.
+
+Anyone who _has_ been running beta 1 is very very strongly advised to
+upgrade to beta 2, as it fixes many bugs from the previous beta including
+a couple of HTML and SQL injections.
+
+This release should be followed by one or two release candidates and
+a 1.5.0 final within the next few weeks.
+
+Beta upgraders, note there are some minor database changes. For upgrades
+from 1.4, see the file UPGRADE for details on significant database and
+configuration file changes.
+
+Beta 2 includes a preliminary command-line XML wiki dump importer tool,
+maintenance/importDump.php, paired with maintenance/dumpBackup.php.
+These use the same format as Special:Export and Special:Import, able
+to package a wiki's entire page set independent of the backend database
+and compression format.
+
+
+== MediaWiki 1.5 beta 1 ==
+
+June 26, 2005
+
+MediaWiki 1.5 beta 1 is a preview release, pretty much feature complete,
+of the new 1.5 release series. There are several known and likely a number
+of unknown bugs; it is not recommended to use this release in a production
+environment but would be recommended for testing in mind of an upcoming
+deployment.
+
+A number of significant changes have been made since the alpha releases,
+including database changes and a reworking of the user permissions settings.
+See the file UPGRADE for details of upgrading and changing your prior
+configuration settings for the new system.
+
+
+
+== MediaWiki 1.5 alpha 2 ==
+
+June 3, 2005
+
+MediaWiki 1.5 alpha 2 includes a lot of bug fixes, feature merges,
+and a security update.
+
+Incorrect handling of page template inclusions made it possible to
+inject JavaScript code into HTML attributes, which could lead to
+cross-site scripting attacks on a publicly editable wiki.
+
+Vulnerable releases and fix:
+* 1.5 prerelease: fixed in 1.5alpha2
+* 1.4 stable series: fixed in 1.4.5
+* 1.3 legacy series: fixed in 1.3.13
+* 1.2 series no longer supported; upgrade to 1.4.5 strongly recommended
+
+
+== MediaWiki 1.5 alpha 1 ==
+
+May 3, 2005
+
+This is a testing preview release, being put out mainly to aid testers in
+finding installation bugs and other major problems. It is strongly recommended
+NOT to run a live production web site on this alpha release.
+
+**  WARNING: USE OF THIS ALPHA RELEASE MAY INFEST YOUR HOUSE WITH  **
+**  TERMITES, ROT YOUR TEETH,  GROW HAIR ON YOUR PALMS, AND PASTE  **
+**  INNUENDO  INTO  YOUR  C.V.  RIGHT  BEFORE  A  JOB  INTERVIEW!  **
+**  DON'T SAY WE DIDN'T WARN YOU, MAN. WE TOTALLY DID RIGHT HERE.  **
+
+
+=== Smaller changes since 1.4 ===
+
+Various bugfixes, small features, and a few experimental things:
+
+* 'live preview' reduces preview reload burden on supported browsers
+* support for external editors for files and wiki pages:
+  http://meta.wikimedia.org/wiki/Help:External_editors
+* Schema reworking: http://meta.wikimedia.org/wiki/Proposed_Database_Schema_Changes/October_2004
+* (bug 15) Allow editors to view diff of their change before actually submitting an edit
+* (bug 190) Hide your own edits on the watchlist
+* (bug 510): Special:Randompage now works for other namespaces than NS_MAIN.
+* (bug 1015) support for the full wikisyntax in <gallery> captions.
+* (bug 1105) A "Destination filename" (save as) added to Special:Upload Upload.
+* (bug 1352) Images on description pages now get thumbnailed regardless of whether the thumbnail is larger than the original.
+* (bug 1662) A new magicword, {{CURRENTMONTHABBREV}} returns the abbreviation of the current month
+* (bug 1668) 'Date format' supported for other languages than English, see:
+  http://mail.wikipedia.org/pipermail/wikitech-l/2005-March/028364.html
+* (bug 1739) A new magicword, {{REVISIONID}} give you the article or diff database
+  revision id, useful for proper citation.
+* (bug 1998) Updated the Russian translation.
+* (bug 2064) Configurable JavaScript mimetype with $wgJsMimeType
+* (bug 2084) Fixed a regular expression in includes/Title.php that was accepting invalid syntax like #REDIRECT [[foo] in redirects
+* It's now possible to invert the namespace selection at Special:Allpages and Special:Contributions
+* No longer using sorbs.net to check for open proxies by default.
+* What was $wgDisableUploads is now $wgEnableUploads, and should be set to true if one wishes to enable uploads.
+* Supplying a reason for a block is no longer mandatory
+* Language conversion support for category pages
+* $wgStyleSheetDirectory is no longer an alias for $wgStyleDirectory;
+* Special:Movepage can now take paramaters like Special:Movepage/Page_to_move
+  (used to just be able to take paramaters via a GET request like index.php?title=Special:Movepage&target=Page_to_move)
+* (bug 2151) The delete summary now includes editor name, if only one has edited the article.
+* (bug 2105) Fixed from argument to the PHP mail() function. A missing space could prevent sending mail with some versions of sendmail.
+* (bug 2228) Updated the Slovak translation
+* ...and more!
+
+
+=== Changes since 1.5alpha1 ===
+
+* (bug 73) Category sort key is set to file name when adding category to
+  file description from upload page (previously it would be set to
+  "Special:Upload", causing problems with category paging)
+* (bug 419) The contents of the navigation toolbar are now editable through
+  the MediaWiki namespace on the  MediaWiki:navbar page.
+* (bug 498) The Views heading in MonoBook.php is now localizable
+* (bug 898) The wiki can now do advanced sanity check on uploaded files
+  including virus checks using external programs.
+* (bug 1692) Fix margin on unwatch tab
+* (bug 1906) Generalize project namespace for Latin localization, update namespaces
+* (bug 1975) The name for Limburgish (li) changed from "Lèmburgs" to "Limburgs
+* (bug 2019) Wrapped the output of Special:Version in <div dir='ltr'> in order
+  to preserve the correct flow of text on RTL wikis.
+* (bug 2067) Fixed crash on empty quoted HTML attribute
+* (bug 2075) Corrected namespace definitions in Tamil localization
+* (bug 2079) Removed links to Special:Maintenance from movepagetext message
+* (bug 2094) Multiple use of a template produced wrong results in some cases
+* (bug 2095) Triple-closing-bracket thing partly fixed
+* (bug 2110) "noarticletext" should not display on Image page for "sharedupload" media
+* (bug 2150) Fix tab indexes on edit form
+* (bug 2152) Add missing bgcolor to attribute whitelist for <td> and <th>
+* (bug 2176) Section edit 'show changes' button works correctly now
+* (bug 2178) Use temp dir from environment in parser tests
+* (bug 2217) Negative ISO years were incorrectly converted to BC notation
+* (bug 2234) allow special chars in database passwords during install
+* Deprecated the {{msg:template}} syntax for referring to templates, {{msg: is
+  now the wikisyntax representation of wfMsgForContent()
+* Fix for reading incorrectly re-gzipped HistoryBlob entries
+* HistoryBlobStub: the last-used HistoryBlob is kept open to speed up
+  multiple-revision pulls
+* Add $wgLegacySchemaConversion update-time option to reduce amount of
+  copying during the schema upgrade: creates HistoryBlobCurStub reference
+  records in text instead of copying all the cur_text fields. Requires
+  that the cur table be left in place until/unless such fields are migrated
+  into the main text store.
+* Special:Export now includes page, revision, and user id numbers by
+  default (previously this was disabled for no particular reason)
+* dumpBackup.php can dump the full database to Export XML, with current
+  revisions only or complete histories.
+* The group table was renamed to groups because "group" is a reserved word in
+  SQL which caused some inconveniances.
+* New fileicons for c, cpp, deb, dvi, exe, h, html, iso, java, mid, mov, o,
+  ogg, pdf, ps, rm, rpm, tar, tex, ttf and txt files based on the KDE
+  crystalsvg theme.
+* Fixed a bug in Special:Newimages that made it impossible to search for '0'
+* Added language variant support for Icelandic, now supports "Íslenzka"
+* The #p-nav id in MonoBook is now #p-navigation
+* Putting $4 in msg:userstatstext will now give the percentage of
+  admnistrators out of normal users.
+* links and brokenlinks tables merged to pagelinks; this will reduce pain
+  dealing with moves and deletes of widely-linked pages.
+* Add validate table and val_ip column through the updater.
+* Simple rate limiter for edits and page moves; set $wgRateLimits
+  (somewhat experimental; currently needs memcached)
+* (bug 2262) Hide math preferences when TeX is not enabled
+* (bug 2267) Don't generate thumbnail at the same size as the source image.
+* Fix rebuildtextindex.inc for new schema
+* Remove linkscc table code, no longer used.
+* (bug 2271) Use faster text-only link replacement in image alt text
+  instead of rerunning expensive link lookup and HTML generation.
+* Only build the HTML attribute whitelist tree once.
+* Replace wfMungeToUtf8 and do_html_entity_decode with a single function
+  that does both numeric and named chars: Sanitizer::decodeCharReferences
+* Removed some obsolete UTF-8 converter functions
+* Fix function comment in debug dump of SQL statements
+* (bug 2275) Update search index more or less right on page move
+* (bug 2053) Move comment whitespace trimming from edit page to save;
+  leaves the whitespace from the section comment there on preview.
+* (bug 2274) Respect stub threshold in category page list
+* (bug 2173) Fatal error when removing an article with an empty title from the watchlist
+* Removed -f parameter from mail() usage, likely to cause failures and bounces.
+* (bug 2130) Fixed interwiki links with fragments
+* (bug 684) Accept an attribute parameter array on parser hook tags
+* (bug 814) Integrate AuthPlugin changes to support Ryan Lane's external
+  LDAP authentication plugin
+* (bug 2034) Armor HTML attributes against template inclusion and links munging
+
+=== Changes since 1.5alpha2 ===
+
+* (bug 2319) Fix parse hook tag matching
+* (bug 2329) Fix title formatting in several special pages
+* (bug 2223) Add unique index on user_name field to prevent duplicate accounts
+* (bug 1976) fix shared user database with a table prefix set
+* (bug 2334) Accept null for attribs in wfElement without PHP warning
+* (bug 2309) Allow templates and template parameters in HTML attribute zone,
+  with proper validation checks. (regression from fix for 2304)
+* Disallow close tags and enforce empty tags for <hr> and <br>
+* Changed user_groups format quite a bit.
+* (bug 2368) Avoid fatally breaking PHP 4.1.2 in a debug line
+* (bug 2367) Insert correct redirect link record on page move
+* (bug 2372) Fix rendering of empty-title inline interwiki links
+* (bug 2384) Fix typo in regex for IP address checking
+* (bug 650) Prominently link MySQL 4.1 help page in installer if a possible
+  version conflict is detected
+* (bug 2394) Undo incompatible breakage to {{msg:}} compatiblity includes
+* (bug 1322) Use a shorter cl_sortkey field to avoid breaking on MySQL 4.1
+  when the default charset is set to utf8
+* (bug 2400) don't send confirmation mail on account creation if 
+  $wgEmailAuthentication is false.
+* (bug 2172) Fix problem with nowiki beeing replaced by marker strings
+  when a template with a gallery was used.
+* Guard Special:Userrights against form submission forgery
+* (bug 2408) page_is_new was inverted (whoops!)
+* Added wfMsgHtml() function for escaping messages and leaving params intact
+* Fix ordering of Special:Listusers; fix groups list so it shows all groups
+  when searching for a specific group and can't be split across pages
+* (bug 1702) Display a handy upload link instead of a useless blank link
+  for [[media:]] links to nonexistent files.
+* (bug 873) Fix usage of createaccount permission; replaces $wgWhitelistAccount
+* (bug 1805) Initialise $wgContLang before $wgUser
+* (bug 2277) Added Friulian language file
+* (bug 2457) The "Special page" href now links to the current special page
+  rather than to "".
+* (bug 1120) Updated the Czech translation
+* A new magic word, {{SCRIPTPATH}}, returns $wgScriptPath
+* A new magic word, {{SERVERNAME}}, returns $wgServerName
+* A new magic word, {{NUMBEROFFILES}}, returns the number of rows in the image table
+* Special:Imagelist displays titles with " " instead of "_"
+* Less gratuitous munging of content sample in delete summary
+* badaccess/badaccesstext to supercede sysop*, developer* messages
+* Changed $wgGroupPermissions to more cut-n-paste-friendly format
+* 'developer' group deprecated by default
+* Special:Upload now uses 'upload' permission instead of hardcoding login check
+* Add 'importupload' permission to disable direct uploads to Special:Import
+* (bug 2459) Correct escaping in Special:Log prev/next links
+* (bug 2462 etc) Taking out the experimental dash conversion; it broke too many
+  things for the current parser to handle cleanly
+* (bug 2467) Added a Turkish language file
+* Fixed a bug in Special:Contributions that caused the namespace selection to
+  be forgotten between submits
+* Special:Watchlist/edit now has namespace subheadings
+* (bug 1714) the "Save page" button now has right margin to seperate it from
+  "Show preview" and "Show changes"
+* Special:Statistics now supports action=raw, useful for bots designed to
+  harwest e.g. article counts from multiple wikis.
+* The copyright confirmation box at Special:Upload is now turned off by default
+  and can be turned back on by setting $wgCopyrightAffirmation to a true value.
+* Restored prior text for password reminder button and e-mail, replacing
+  the factually inaccurate text that was there.
+* (bug 2178) Fix temp dir check again
+* (bug 2488) Format 'deletedtext' message as wikitext
+* (bug 750) Keep line endings consistent in LocalSettings.php
+* (bug 1577) Add 'printable version' tab in MonoBook for people who don't
+  realize you can just hit print to get a nicely formatted printable page.
+* Trim whitespace from option values to weather line-ending corruption problems
+* Fixed a typo in the Romanian language file (NS_MESIA => NS_MEDIA)
+* (bug 2504) Updated the Finnish translation
+* (bug 2506, 2512) Updated the Nynorsk translation
+* (bug 996) Replace $wgWhitelistEdit with 'edit' permission; fixup UPGRADE
+  documentation about edit and read whitelists.
+* (bug 2515) Fix incremental link table update
+* Removed some wikipedia-specifica from LanguageXx.php's
+* (bug 2496) Allow MediaWiki:edithelppage to point to external page
+* Added a versionRequired() function to OutputPage, useful for extension
+  writers that want to control what version of MediaWiki their extension
+  can be used with.
+* Serialized user objects now checked for versioning
+* Fix for interwiki link regression
+* Printable link shorter in monobook
+* Experimental Latin-1-and-replication-friendly upgrader script
+* (bug 2520) Don't show enotif options when disabled
+
+== Changes since 1.5beta1 ==
+
+* (bug 2531) Changed the interwiki name for sh (Serbocroatian) to
+  Srpskohrvatski/Српскохрватски (was Српскохрватски (Srbskohrvatski))
+* Nonzero return code for command-line scripts on wfDebugDieBacktrace()
+* Conversion fix for empty old table in upgrade1_5.php
+* Try reading revisions from master if no result on slave
+* (bug 2538) Suppress notice on user serialized checks
+* Fix paging on Special:Contributions
+* (bug 2541) Fix unprotect tab
+* (bug 1242) category list now show on edit page
+* Skip sidebar entries where link text is '-'
+* Convert non-UTF-8 URL parameters even if referer is local
+* (bug 2460) <img> width & height properly filled when resizing image
+* (bug 2273) deletion log comment used user interface langage
+* Try reading revision _text_ from master if no result on slave
+* Use content-language message cache for raw view of message pages
+* (bug 2530) Not displaying talk pages on Special:Watchlist/edit
+* Fixed a bug that would occour if $wgCapitalLinks was set to false, a user
+  agent could create a username that began with a lower case letter that was
+  not in the ASCII character set ( now user $wgContLang->ucfirst() instead of
+  PHP ucfirst() )
+* Moved the user name / password validity checking from
+  LoginForm::addNewAccountInternal() to two new functions,
+  User::isValidUserName() and User::isValidPassword(), extensions can now do
+  these checks without rewriting code.
+* Fix $wgSiteNotice when MediaWiki:Sitenotice is set to default '-'
+* Fixed a bug where the watchlist count without talk pages would be off by a
+  factor of two.
+* upgrade1_5.php uses insert ignore, allows to skip image info initialization
+* Fix namespaces in category list.
+* Add rebuildImages.php to update image metadata fields
+* Special:Ancientpages is expensive in new schema for now
+* (bug 2568) Fixed a logic error in the Special:Statistics code which caused
+  the displayed percentage of admins to be totally off.
+* (bug 2560) Don't show blank width/height attributes for missing size
+* Don't show bogus messages about watchlist notifications when disabled
+* Don't show old debug messages in watchlist
+* (bug 2576) Fix recording of transclusion links
+* (bug 2577) Allow sysops to enter non-standard block times
+* Fixed a bug where Special:Contributions wouldn't remember the 'invert'
+  status between next/previous buttons.
+* Move MonoBook printable link from tab to sidebar
+* (bug 2567) Fix HTML escaping on category titles in list
+* (bug 2562) Show rollback link for current revisions on diff pages
+* (bug 2583) Add --missinig option on rebuildImages.php to add db entries
+  for uploaded files that don't have them
+* (bug 2572) Fix edit conflict handling
+* (bug 2595) Show "Earlier" and "Latest" links on history go to the first/last
+  page in the article history pager.
+* Don't show empty-page text in 'Show changes' on new page
+* (bug 2591) Check for end, fix limits on Whatlinkshere
+* (bug 2584) Fix output of subcategory list
+* (bug 2597) Don't crash when undeleting an image description page
+* (bug 2564) Don't show "editingold" warning for recent revision
+* Various code cleanup and HTML escaping fixlets
+* Copy IRC-over-UDP update option from REL1_4
+* (bug 2548) Keep summary on 'show changes' of section edit
+* Move center on toc to title part to avoid breaking .toc style usage
+* HTML sanitizer: correct multiple attributes by keeping last, not first
+* (bug 2614) Fix section edit links on diff-to-current with oldid set
+  Also fix navigation links on current-with-oldid view.
+* (bug 2620) Return to prior behavior for some more things (such as
+  subpage parent links) on current-diff view.
+* (bug 2618) Fix regression from another fix; show initial preview for
+  categories only if the page does not exist.
+* (bug 2625) Keep group & user settings when paging in Listusers
+* (bug 2627) Fix regression: diff radio button initial selection
+* Copy fix for old search URLs with Lucene search plugin from REL1_4
+* (bug 619) Don't use incompatible diff3 executable on non-Linux systems.
+* (bug 2631) Fix Hebrew namespaces.
+* (bug 2630) Indicate no-longer-valid cached entries in BrokenRedirects list
+* (bug 2644, 2645) "cur" diff links in page history, watchlist and
+  recentchanges should specify current ID explicitly.
+* (bug 2609) Fix text justification preferenced with MonoBook skin.
+* (bug 2594) Display article tab as red for non-existent articles.
+* (bug 2656) Fix regression: prevent blocked users from reverting images
+* (bug 2629) Automatically capitalize usernames again instead of
+  rejecting lowercase with a useless error message
+* (bug 2661) Fix link generation in contribs
+* Add support for &preload=Page_name (load text of an existing page into
+edit area) and &editintro=Page_name (load text of an existing page instead
+of MediaWiki:Newpagetext) to &action=edit, if page is new.
+* (bugs 2633, 2672, 2685, 2695) Fix Estonian, Portuguese, Italian, Finnish and
+  Spanish numeric formatting
+* Fixed Swedish numeric formatting
+* (bug 2658) Fix signature time, localtime to match timezone offset again
+* Files from shared repositories (e.g. commons) now display with their
+  image description pages when viewed on local wikis.
+* Restore compatibility namespace aliases for French Wikipedia
+* Fix diff order on Enhanced RC 'changes' link
+* (bug 2650) Fix national date type display on wikis that don't support
+  dynamic date conversion.
+* FiveUpgrade: large table hacks, install iw_trans update before links
+* (bug 2648) Rename namespaces in Afrikaanse
+* Special:Booksources checks if custom list page exists before using it
+* (bug 1170) Fixed linktrail for da: and ru:
+* (bug 2683) Really fix apostrophe escaping for toolbox tips
+* (bug 923) Fix title and subtitle for rclinked special page
+* (bug 2642) watchdetails message in several languages used  <a></a> instead of [ ]
+* (bug 2181) basic CSB language localisation by Tomasz G. Sienicki (thanks for the patch)
+* Fix correct use of escaping in edit toolbar bits
+* Removed language conversion support from Icelandic
+* (bug 2616) Fix proportional image scaling, giving correct height
+* (bug 2640) Include width and height attributes on unscaled images
+* Workaround for mysterious problem with bogus epoch If-Last-Modified reqs
+* (bug 1109) Suppress compressed output on 304 responses
+* (bug 2674) Include some site configuration info in export data:
+  namespaces definitions, case-sensitivity, site name, version.
+* Use xml:space="preserve" hint on export <text> elements
+* Make language variant selection work again for zh
+
+== Changes since 1.5beta2 ==
+
+* Escaped & correctly in Special:Contributions
+* (bug 2534) Hide edit sections with CSS to make right click to edit section work 
+* (bug 2708) Avoid undefined notice on cookieless login attempt
+* (bug 2188) Correct template namespace for Greek localization
+* Fixed number formatting for Dutch
+* (bug 1355) add class noprint to commonPrint.css
+* (bug 2350) Massive update for Limburgish (li) language using Wikipédia
+* Massive update for Arab (ar) language using Wikipédia
+* (bug 1560) Massive update for Kurdish (ku) language using Wikipédia
+* (bug 2709) Some messages were not read from database
+* (bug 2416) Don't allow search engine robots to index or follow nonexisting articles
+* Fix escaping in page move template.
+* (bug 153) Discrepancy between thumbnail size and <img> height attribute
+
+== Changes since 1.5beta3 ==
+
+* Fix talk page move handling
+* (bug 2721) New language file for Vietnamese with the Vietnamese number notation
+* (bug 2749) &nbsp; would appear as a literal in image galleries for Cs, Fr, Fur, Pl and Sv
+* (bug 787) external links being rendered when they only have one slash
+* Fixed a missing typecast in Language::dateFormat() that would cause some
+  interesting errors with signitures.
+* (bug 2764) Number format for Nds
+* (bug 1553) Stop forcing lowercase in Monobook skin for German language.
+* (bug 1064) Implements Special:Unusedcategories
+* (bug 2311) New language file for Macedonian
+* Fix nohistory message on empty page history
+* Fix fatal error in history when validation on
+* Cleaned up email notification message formatting
+* Finally fixed Special:Disambiguations that was broke since SCHEMA_WORK
+* (bug 2761) fix capitalization of "i" in Turkish
+* (bug 2789) memcached image metadata now cleared after deletion
+* Add serialized version number to image metadata cache records
+* (bug 2780) Fix thumbnail generation with GD for new image schema
+* (bug 2791) Slovene numeric format
+* (bug 655) Provide empty search form when searching for nothing
+* Nynorsk numeric format fix
+* (bug 2825) Fix regression in newtalk notifications for anons w/ enotif off
+* (bug 2833) Fix bug in previous fix
+* With $wgCapitalLinks off, accept off-by-first-letter-case in 'go' match
+* Optional parameters for [[Special:Listusers]]
+* (bug 2832) [[Special:Listadmins]] redirects to [[Special:Listusers/sysop]]
+* (bug 785) Parser did not get out of <pre> with list elements
+* Some shared upload fixes
+* (bug 2768) section=new on nonexistent talk page does not add heading
+* support preload= parameter for section=new
+* show comment subject in preview when using section=new
+* use comment form when creating a new talk page
+* (bug 460) Properly handle <center> tags as a block.
+* Undo inconsistent editing behavior change
+* (bug 2835) Back out fix for bug 2802, caused regressions in category sort
+* PHP 4.1.2 compatibility fix: define floatval() equivalent if missing
+* (bug 2901) Number format for Catalan
+* Special:Allpages performance hacks: index memcached caching, removed
+  inverse checkbox, use friendlier relative offsets in index build
+* Bring back "Chick" skin for mobile devices. It needs testing.
+* Fix spelling of $wgForwardSearchUrl in DefaultSettings.php
+* Specify USE INDEX on Allpages chunk queries, sometimes gets lost
+  due to bogus optimization
+* (bug 275) Section duplication fix
+* Remove unused use of undefined variable in UserMailer
+* Fix notice on search index update due to non-array
+* (bug 2885) Fix fatal errors and notices in PHP 5.1.0beta3
+* (bug 2931) Fix additional notices on reference use in PHP 4.4.0
+* (bug 2774) Add three new $wgHooks to LogPage which enable extensions to add
+  their own logtypes, see extensions/Renameuser/SpecialRenameuser.php for an
+  example of this.
+* (bug 740) Messages from extensions now appear in Special:Allmessages
+* (bug 2857) fixed parsing of lists in <pre> sections
+* (bug 796) Trackback support
+* Fix 1.5 regression: weird, backwards diff links on new pages in enhanced RC
+  are now suppressed as before.
+* New skin: Simple
+* "uselang" and "useskin" URL parameters can now be used in the URL when
+  viewing a page, to change the language and skin of a page respectively.
+* Skins can now be previewed in preferences
+* (bug 2943) AuthPlugin::getCanonicalName() name canonicalization hook,
+  patch from robla
+* Wrap revision insert & page update in a transaction, rollback on late
+  edit conflict.
+* (bug 2953) 'other' didn't work in Special:Blockip when localized
+* (bug 2958) Rollback and delete auto-summary should be in the project's
+  content language
+* Removed useless protectreason message
+* Spelling fix: $wgUrlProtcols -> $wgUrlProtocols
+* Switch Moldovan local name to cyrillic
+* Fix typo in undefined array index access prevention
+* (bug 2947) Update namespaces for sr localization
+* (bug 2952) Added Asturian language file with translated namespaces
+* (bug 2676) Apply a protective transformation on editing input/output
+  for browsers that hit the Unicode blacklist. Patch by plugwash.
+* (bug 2999) Fix encoding conversion of pl_title in upgrade1_5.php
+* compressOld.php disabled, as it's known to be broken.
+
+
+=== Changes since 1.5beta4 ===
+
+* Fix Special:Allmessages under PHP 5
+* (bug 2911) Special:Watchlist allowed only one type of limit at a time
+* (bug 693) Special:Allmessages is excessively wide and redundant
+* (bug 3001) Updated and applied live hack for recentchanges-based watchlist
+* (bug 145) Finish 'exclude redirect' implementation in search form
+* Rearranged Special:Movepage form to reduce confusion between destination
+  title and reason input boxes
+* (bug 2527) Always set destination filename when new file is selected
+* (bug 3056) MySQL 3 compatibility fix: USE INDEX instead of FORCE INDEX
+* PHP 4.1 compatibility fix: don't use new_link parameter to mysql_connect
+  if running prior to 4.2.0 as it causes the call to fail
+* (bug 3117) Fix display of upload size and type with tidy on
+* (bug 1487) invalid html on empty list in banlist
+* (bug 3017) Hotkey conflict for delete and show changes
+* made pixel unit translateable and blocklistline now eats infiniteblock
+  and expiringblock
+* (bug 3092) Wrong numerical separator for big numbers in Serbian.
+* (bug 2855) Credit for a uniq author showed its realname even with
+  $wgAllowRealName=false.
+* New special page: SpecialMostlinked
+* (bug 2393) Fix MIME type for Atom feeds ( application/rss+atom )
+* Fix display of read-only lockfile message
+* Added a new hook, 'AddNewAccount', which is run after account creation
+* Update all stats fields on recount.sql
+* Include software-visible client IP address in Special:Version comment
+  as a proxy debugging aid
+* (bug 3162) Fix 'undefined property page_is_new' error on watchlist
+* (bug 1734) granting db permissions failed with db usernames containg '-'
+* (bug 3170) wikititlesuffix was removed, use pagetitle instead
+* (bug 3187) watchlist text refer to unexistent "Stop watching" action
+* (bug 3190) Added some date format choices for language sr
+* (bug 1334) LanguageGa.php update
+* (bug 1020) Changing user interface language does not work immediately
+* (bug 2753) Some namespaces were not translated in LanguageTa.php (Tamil)
+* (bug 3204) Fix typo breaking special pages in fy localization
+* (bug 3210) Fix Media: links with remote image URL path
+* (bug 3220) Fix escaping of block URLs in Recentchanges
+* (bug 3238): Updated LanguageNn.php for 1_5 branch
+* (bug 3192): properly check 'limit' parameter on Special:Contributions
+* (bug 3244) Fix remote image loading hack, JavaScript injection on MSIE
+* Fix URL sanitization in HTML attributes, which broke in this branch
+* (bug 3475) anon contrib links on Special:Newpages
+
+
+=== Changes since 1.5rc2 ===
+
+* Fix upgrade from 1.4 due to version number check breakage
+* Fix upgrade from 1.4 with no old revisions
+* (bug 2108) Sort entries when using category browser
+* XSS issue : now sanitize search query input
+
+
+=== Changes since 1.5rc3 ===
+
+* (bug 3280) Respect 'move' group permission on page moves
+* (bug 2885) More PHP 5.1 fixes: skin, search, log, undelete
+* Security fix for <math>
+* Security fix for tables
+
+
+=== Changes since 1.5rc4 ===
+
+* (bug 3292) Fix move-over-redirect test when current entries are not plaintext
+* (bug 2078) Don't hide watch tab on preview
+* (bug 3306) Document $wgLocalTZoffset
+* Support SVG rendering with rsvg
+* Cap arbitrary SVG renders to given image size or $wgSVGMaxSize pixels wide
+* (bug 3127) Render large SVGs at image page size correctly
+* (bug 3448) Set page_len on undelete
+* (bug 2800) Don't scale up small iamges on |thumb| without explicit size
+* Use the real file link instead of the default-size rasterized version for
+  large SVG images on image description page
+* Include the file name/type/size line for non-resized images
+* (bug 3412) Clean up date format handling so ~~~~-sigs work with default
+  format as designed. Documentation comments updated.
+* (bug 1423) LanguageJa.php update
+* (bug 3405) Don't use raw letters as aliases of MSGNW: and SUBST:
+* (bug 3485) Fix bogus warning about filename capitalization when off
+* (bug 2792) Update rebuildrecentchanges.inc for new schema
+* Special:Import/importDump fixes: report XML parse errors, accept <minor/>
+* (bug 3489) PHP 5.1 compat problem with captioned images
+* (bug 3350) Missing label for move talk page checkbox.
+* (bug 2570) Add 'watch this page' checkbox on uploads, watch uploads
+  by default when 'watchdefault' option is on
+* (bug 3182) Clear link cache during import to prevent memory leak
+* (bug 3573) Full Greek Translation
+* (bug 3595) Warn and abort if importDump.php called in read-only mode.
+* (bug 3598) Update message cache on message page deletion, patch by Tietew
+* Blacklist additional MSIE CSS safety tricks
+
+
+=== Changes since 1.5.0 ===
+
+* (bug 3629) Fix date & time format for Frisian
+* (bug 3641) Fix handling of unrecognized file uploads with known extensions
+* (bug 3643) Fix image page display of large images with resizing disabled
+* Fix meta robots tag on Special:Version again to avoid listing vulnerable
+  versions for convenient harvesting by automated worms
+* (bug 3684) Fix typo in fatal error backtraces in Hooks.php
+* Backport fix for reference usage notice in Special:Search on PHP 4.4.0
+* Backport database connect error display fix from HEAD
+* (bug 2773) Print style sheet no longer overrides RTL text direction
+* MonoBook skin top link id changed from "contentTop" to "top" (shared with
+  name attribute)
+* Wrap message page insertions in a transaction to speed up installation
+* Fix Special:MovePage invalid HTML attribute for reason textarea
+* Avoid notice warning on edit with no User-Agent header
+* (bug 3734) Swapped out obsolete recount.sql with initStats.php
+* (bug 3735) Fix to run under MySQL 5's strict mode
+* (bug 3786) Experimental support for MySQL 4.1/5.0 utf8 charset mode
+  NOTE: Enabling this may break existing wikis, and still doesn't
+  work for all Unicode characters due to MySQL limitations.
+* Sanitizer CSS comment processing order fix
+
+
+=== Changes since 1.5.1 ===
+
+* Fix Special:BrokenRedirects on MySQL 5.0
+* (bug 3809) Backport fix for detecting diff3 failure
+* MySQL 5.0 strict mode fix for moving unwatched pages
+* (bug 3782) Throw fatal installation warning if mbstring.func_overload on.
+  Why do people invent these crazy options that change language semantics?
+* (bug 3762) Define missing Special:Import UI messages
+* (bug 3771) Handle internal functions in backtrace in wfAbruptExit()
+* (bug 3649) Remove obsolete, broken moveCustomMessages script
+* (bug 3667) Add missing global in page move code
+* (bug 3761) Avoid deprecation warnings in Special:Import
+* (bug 2885) Remove unnecessary reference parameter which broke classic skin
+  talk notification on PHP 5.0.5
+* (bug 3845) Update attribute.php for 1.5 schema
+* Fix Parser::unstrip on PHP 4.4.1 and PHP 5.1.0RC4
+
+
+=== Changes since 1.5.2 ===
+
+* (bug 3612) Remove old broken version of maintenance/compressOld.php
+  The working version is in maintenance/storage/compressOld.php
+* (bug 2740) Accept image deletions on 'enter' submit from MSIE
+* (bug 3933) specify XML namespace for Atom 0.3 feeds
+* (bug 3939) Don't try to load text for interwiki redirect target
+* (bug 3948) Avoid notice warning in debug statement in bad search
+* Recognize Special:Search consistently so read whitelist works
+* (bug 4013) typo in fr
+* (bug 3996) Fix text for new entries in RC RSS/Atom feed
+* (bug 2894) Enhanced Recent Changes link fixes
+* (bug 3065) Update both watched namespaces when renaming pages
+* Move parentheses out of <a> link in Special:Contributions
+* (bug 4071) Generate passwords long enough for $wgMinimalPasswordLength
+* (bug 4035) Fix prev/next revision links on edit page
+* (bug 4165) Correct validation for user language selection (data taint)
+* Clearer message in DefaultSettings.php: edit LocalSettings.php instead
+
+
+=== Changes since 1.5.3 ===
+
+* (bug 3805) Clear 'new messages' flag properly in enotif mode
+  for usernames containing spaces
+* (bug 2714) Backlink from special:whatlinkshere was hard set as 'existing'
+* (bug 4249) Typo in entities2literals.pl
+* (bug 4233) Update for japanese language
+* (bug 4279) Small correction to LanguageDa.php
+* (bug 4267) Switch dv sd ug ks arc languages to RTL
+* (bug 3991) Allow the operation of wikicode on Protect move only text
+* Added AutoAuthenticate hook for external User object suppliers
+* Parser internal placeholder string now fully randomized for safety
+
+=== Changes since 1.5.4 ===
+
+* Maintenance script to delete unused user accounts
+* Added detection for WMF files (application/x-msmetafile), added this 
+  MIME type to the default blacklist. Prevented inline display of images
+  which are not of known image types. This is in response to
+  http://en.wikipedia.org/wiki/Windows_Metafile_vulnerability
+
+=== Changes since 1.5.5 ===
+
+* (bug 4258) When installing under IIS, $wgArticlePath = "$wgScript?title=$1" 
+  should be set
+* (bug 4510) Correct Barnes & Noble bookstore URLs
+* (bug 4504) Use site language for namespace name resolution
+* Installer fixes from HEAD backported; now uses a more sensible method of 
+  establishing which mySQL user to use, which clears up bug 921 et al. Minor 
+  changes to installer.
+* Fix problem reported on mailing list where re-initialising stats didn't work 
+  (can't insert duplicate rows with the same id field)
+* (bug 1122) gray out 'older revision' when viewing first article revision.
+* Respect database prefix in dumpHTML.inc
+* Minor improvements to removeUnusedAccounts.php maintenance script
+* Fix for single-digit week numbers from {{CURRENTWEEK}}, broken by PHP 4.4.1
+* Removed read-only check from Database::query()
+* Added --conf option to command line scripts, allowing the user to specify a 
+  different LocalSettings.php.
+
+=== Changes since 1.5.6 ===
+
+* Default main page content improved per bug 4690
+* Fix dependence on hardcoded UNIQ_PREFIX in LanguageConverter.php 
+* Fixed Special:Unlockdb
+* Maintenance script to delete unused text records
+* Maintenance script to delete non-current revisions
+* Maintenance script to wipe a page and all revisions from the database
+* (bug 4768) Wrong Russian translation (typo)
+* Performance bugfix: propagate equality manually for Revision fetches
+* (bug 4773) PHP fatal error when invalid title passed to Special:Export
+* Added missing table defs. for transcache to installer schemas
+* (bug 4824) IE7 beta 2 broke compatibility with PNG logo workarounds,
+  and seems to work ok with other bits. No longer including the IE
+  workarounds JavaScript for IE 7 and above.
+* (bug 2532) Image directory structure migration bug
+* (bug 4881) Correction to the fix for 1487; Ipblocklist showed 'no blocks'
+  message at the end of the list even if there were blocks.
+* (bug 4805) Removed more wikipedia-references from LanguageUk.php
+* Introduce $wgWantedPagesThreshold per bug 5011; Special:Wantedpages will not
+  list pages with less than this number of links. Defaults to 1.
+* Allow customisation of paging limits for items in categories using the
+  $wgCategoryPagingLimit global, per bug 4970.
+* Improve "nogomatch" text to make it more obvious that a page can be created.
+* (bug 5113) Spelling error in French language file
+* Don't change the password of the MySQL root user.
+
+=== Changes since 1.5.7 ===
+
+* (bug 5180) User login page shows inappropriate email blurb
+* Add the "AbortNewAccount" hook on account creation; see hooks.txt for more info.
+* Update default "exporttext" to reflect that Special:Import exists
+* Add links to useful material to the default main page content
+* Fix fragment HTML injection
+
+=== Changes since 1.5.8 ===
+
+* Fixed obvious mistakes in Finnish (fi) translation
+* Fixed obvious mistakes in Kurdish (ku) translation
+* Merge two #p-search .pBody statements i monobook/main.css
+* (bug 5156) Update for Hebrew language (he) translation
+* Add the "UserRights" hook on user group changes; see hooks.txt for more info.
+* Translated "listingcontinuesabbrev" for German
+
+=== Caveats ===
+
+Some output, particularly involving user-supplied inline HTML, may not
+produce 100% valid or well-formed XHTML output. Testers are welcome to
+set $wgMimeType = "application/xhtml+xml"; to test for remaining problem
+cases, but this is not recommended on live sites. (This must be set for
+MathML to display properly in Mozilla.)
+
+----
+
+== MediaWiki 1.4.3 ==
+
+(released 2005-04-28)
+
+MediaWiki 1.4.3 is a bugfix release for the 1.4 stable release series.
+
+Chiefly, this fixes a compatibility problem with PHP 5 and a minor link
+table corruption bug on initial page save.
+
+
+== MediaWiki 1.4.2 ==
+
+(released 2005-04-20)
+
+MediaWiki 1.4.2 is a security and bug fix release for the 1.4 stable release
+series.
+
+A cross-site scripting injection vulnerability was discovered, which
+affects only MSIE clients and is only open if MediaWiki has been
+manually configured to run output through HTML Tidy ($wgUseTidy).
+
+Several other bugs are fixed in this release, see the changelog below.
+
+All new installations are highly recommended to use 1.4.2 instead of
+1.3.x; 1.3.x users should consider upgrading for bug fixes and new
+features. Ealier 1.4.x release and beta users should upgrade to this
+release for relevant bug fixes; see the changelog later in this file.
+
+
+If you have trouble, remember to read this whole file and the online FAQ page
+before asking for help:
+
+http://meta.wikimedia.org/wiki/MediaWiki_FAQ
+
+
+=== READ THIS FIRST: Upgrading ===
+
+If upgrading from an older release, see the notes in the file UPGRADE.
+There are a couple of minor database changes from the beta releases,
+and somewhat larger changes from 1.3.x.
+
+Upgrading from a previous 1.4.x stable release installation should
+generally only require copying the new files over the old ones.
+
+
+==== READ THIS FIRST, TOO: MySQL 4.1 AND 5.0 ====
+
+MySQL 5.0 is a beta release, not yet ready for production use. If you
+are using it, the notes below about 4.1 apply to you too.
+
+If you have the choice of MySQL 4.0 or MySQL 4.1 and don't need 4.1 for
+some other application, you should consider sticking with 4.0 for the
+moment. 4.1 may require you to do extra fiddling to get things to work
+due to changes that aren't fully backwards-compatible.
+
+MySQL 4.1 has changed the authentication protocol in an incompatible
+way; many PHP installations still use the older client libraries and
+CANNOT CONNECT TO THE SERVER WITH A PASSWORD without some changes.
+
+See: http://dev.mysql.com/doc/mysql/en/Old_client.html
+
+If MySQL is set with utf-8 as the default character set, installation
+may fail with "key too long" errors. Set the default charset to 'latin1'
+for installation and it should work.
+
+The mysqldump backup generator now applies an automatic conversion to
+UTF-8, which may irretrivably corrupt your data. Pass the -charset option
+with the original default charset (eg 'latin1') to skip the conversion.
+
+
+==== READ THIS FIRST IF RUNNING ON A WINDOWS SERVER ====
+
+MediaWiki is tested and deployed primarily under the Apache web server
+on Linux Unix systems. There are known to be problems running on
+Microsoft's IIS which are not fully resolved. If you have a choice,
+try running under Apache on Windows, or on a Unix/Linux box instead.
+
+If you're having trouble with blank pages on IIS and can't switch,
+try the workaround suggested in this bug report:
+http://bugzilla.wikimedia.org/show_bug.cgi?id=1763
+
+
+=== New features ===
+
+* 'Recentchanges Patrol' to mark new edits that haven't yet been viewed.
+* New, searchable deletion/upload/protection logs
+* Image gallery generation (Special:Newimages and <gallery> tag)
+* SVG rasterization support (requires external support tools)
+* Users can select from the available localizations to override the
+  default user interface language.
+* Traditional/Simplified Chinese conversion support
+* rel="nofollow" support to combat linkspam
+
+The current implementation adds this attribute to _all_ external URL
+links in wiki text (but not internal [[wiki links]] or interwiki links).
+To disable the attribute for _all_ external links, add this line to your
+LocalSettings.php:
+
+  $wgNoFollowLinks = false
+
+For background information on nofollow see:
+
+  http://www.google.com/googleblog/2005/01/preventing-comment-spam.html
+
+
+=== Installation and compatibility ===
+
+* The default MonoBook theme now works with PHP 5.0
+* Installation on systems with PHP's safe mode or other oddities
+  should work more reliably, as MonoBook no longer needs to
+  create a compiled template file for the wiki to run.
+* A table prefix may be specified, to avoid conflicts with other
+  web applications forced to share a database.
+* More thorough UTF-8 input validation; fixes non-ASCII uploaded
+  filenames from Safari.
+* Command-line database upgrade script.
+
+
+=== Customizability ===
+
+* Default user options can now be overridden in LocalSettings.
+* Skins system more modular: templates and CSS are now in /skins/
+  New skins can be dropped into this directory and used immediately.
+* More extension hooks have been added.
+* Authentication plugin hook.
+* More internal code documentation, generated with phpdoc:
+  http://www.mediawiki.org/docs/html/
+
+
+=== Optimization ===
+
+* For many operations, MediaWiki 1.4 should run faster and use
+  less memory than MediaWiki 1.3. Page rendering is up to twice
+  as fast. (Use a PHP accelerator such as Turck MMCache for best
+  results with any PHP application, though!)
+* The parser cache no longer requires memcached, and is enabled
+  by default. This avoids a lot of re-rendering of pages that
+  have been shown recently, greatly speeding longer page views.
+* Support for compiled PHP modules to speed up page diff and
+  Unicode validation/normalization. (Requires ability to compile
+  and load PHP extensions).
+
+
+=== What isn't ready yet ===
+
+* A new user/groups permissions scheme has been held back to 1.5.
+* An experimental SOAP interface will be made available as an extension
+* PostgreSQL support is largely working, minus search and the installer.
+  You can perform a manual installation.
+* E-mail notification of watched page changes and verification of
+  user-submitted e-mail addresses is not yet included.
+* Log pages are not automatically imported into the new log table
+  at upgrade time. A script to import old text log entries is
+  incomplete, but may be available in later point releases.
+* Some localizations are still incomplete.
+
+
+
+== Changelog ==
+
+=== Important security updates ===
+
+A security audit found and fixed a number of problems. Users of MediaWiki
+1.3.10 and earlier should upgrade to 1.3.11; users of 1.4 beta releases
+prior to 1.4rc1 should upgrade immediately.
+
+==== Cross-site scripting vulnerability ====
+
+XSS injection points can be used to hijack session and authentication
+cookies as well as more serious attacks.
+
+* Media: links output raw text into an attribute value, potentially
+  abusable for JavaScript injection. This has been corrected.
+* Additional checks added to file upload to protect against MSIE and
+  Safari MIME-type autodetection bugs.
+
+As of 1.3.10/1.4beta6, per-user customized CSS and JavaScript is disabled
+by default as a general precaution. Sites which want this ability may set
+$wgAllowUserCss and $wgAllowUserJs in LocalSettings.php.
+
+
+==== Cross-site request forgery ====
+
+An attacker could use JavaScript-submitted forms to perform various
+restricted actions by tricking an authenticated user into visiting
+a malicious web page. A fix for page editing in 1.3.10/1.4beta6 has
+been expanded in this release to other forms and functions.
+
+Authors of bot tools may need to update their code to include the
+additional fields.
+
+
+==== Directory traversal ====
+
+An unchecked parameter in image deletion could allow an authenticated
+administrator to delete arbitary files in directories writable by the
+web server, and confirm existence of files not deletable.
+
+
+==== Older issues ====
+
+Note that 1.4 beta releases prior to beta 5 include an input validation
+error which could lead to execution of arbitrary PHP code on the server.
+Users of older betas should upgrade immediately to the current version.
+
+
+Beta 6 also introduces the use of rel="nofollow" attributes on external
+links in wiki pages to reduce the effectiveness of wiki spam. This will
+cause participating search engines to ignore external URL links from wiki
+pages for purposes of page relevancy ranking.
+
+
+=== Misc bugs fixed in beta 1 ===
+
+* (bug 95) Templates no longer limited to 5 inclusions per page
+* New user preference for limiting the image size for images on image description
+  pages
+* (bug 530) Allow user to preview article on first edit
+* (bug 479) [[RFC 1234]] will now make an internal link
+* (bug 511) PhpTal skins shown bogus 'What links here' etc on special pages
+* (bug 770) Adding filter and username exact search match for Special:Listusers
+* (bug 733) Installer die if it can not write LocalSettings.php
+* (bug 705) Various special pages no more show the rss/atom feed links
+* (bug 114) use category backlinks in Special:Recentchangeslinked
+
+=== Beta 2 fixes ===
+
+* (bug 987) Reverted bogus fix for bug 502
+* (bug 992) Fix enhanced recent changes in PHP5
+* (bug 1009) Fix Special:Makesysop when using table prefixes
+* (bug 1010) fix broken Commons image link on Classic & Cologne Blue
+* (bug 985) Fix auto-summary for section edits
+* (bug 995) Close <a> tag
+* (bug 1004) renamed norsk language links (twice)
+* Login works again when using an old-style default skin
+* Fix for load balancing mode, notify if using old settings format
+* (bug 1014) Missing image size option on old accounts handled gracefully
+* (bug 1027) Fix page moves with table prefix
+* (bug 1018) Some pages fail with stub threshold enabled
+* (bug 1024) Fix link to high-res image version on Image: pages
+* (bug 1016) Fix handling of lines omitting Image: in a <gallery> tag
+* security fix for image galleries
+* (bug 1039) Avoid error message in certain message cache failure modes
+* Fix string escaping with PostgreSQL
+* (bug 1015) [partial] -- use comment formatter on image gallery text
+* Allow customization of all UI languages
+* use $wgForceUIMsgAsContentMsg to make regular UI messages act as content
+* new user option for zh users to disable language conversion
+* Defer message cache initialization, shaving a few ms off file cache hits
+* Fixed Special:Allmessages when using table prefixes
+* (bug 996) Fix $wgWhitelistRead to work again
+* (bug 1028) fix page move over redirect to not fail on the unique index
+
+=== Beta 3 fixes ===
+
+* Hide RC patrol markers when patrol is disabled or not allowed to patrol.
+* Fix language selection for upgraded accounts
+* (bug 1076) navigation links in QueryPage should be translated by wgContLang.
+* (bug 922) bogus DOS line endings in LanguageEl.php
+* Fix index usage in contribs
+* Caching and load limiting options for Recentchanges RSS/Atom feed
+* (bug 1074) Add stock icons for non-image files in gallery/Newimages
+* Add width and height attributes on thumbs in gallery/Newimages
+* Enhance upload extension blacklist to protect against vulnerable
+  Apache configurations
+
+=== Beta 4 fixes ===
+
+* (bug 1090) Fix sitesupport links in CB/classic skins
+* Gracefully ignore non-legal titles in a <gallery>
+* Fix message page caching behavior when $wgCapitalLinks is turned off
+  after installation and the wiki is subsequently upgraded
+* Database error messages include the database server name/address
+* Paging support for large categories
+* Fix image page scaling when thumbnail generation is disabled
+* Select the content language in prefs when bogus interface language is set
+* Fix interwiki links in edit comments
+* Fix crash on banned user visit
+* Avoid PHP warning messages when thumbnail not generated
+* (bug 1157) List unblocks correctly in Special:Log
+* Fix fatal errors in LanguageLi.php
+* Undo overly bright, difficult to read colors in Cologne Blue
+* (bug 1162) fix five-tilde date inserter
+* Add raw signatures option for those who simply must have cute sigs
+* (bug 1164) Let wikitext be used in Loginprompt and Loginend messages
+* Add the dreaded <span> to the HTML whitelist
+* (bug 1170) Fix Russian linktrail
+* (bug 1168) Missing text on the bureaucrat log
+* (bug 1180) Fix Makesysop on shared-user-table sites
+* (bug 1178) Fix previous diff link when using 'oldid=0'
+* (bug 1173) Stop blocked accounts from reverting/deleting images
+* Keep generated stylesheets cache-separated for each user
+* (bug 1175) Fix "preview on first edit" mode
+* Fix revert bug caused by bug 1175 fix
+* Fix CSS classes on minor, new, unpatrolled markers in enhanced RC
+* Set MySQL 4 boolean search back to 'and' mode by default
+* (bug 1193) Fix move-only page protection mode
+* Fix zhtable Makefile to include the traditional manual table
+* Add memcache timeout for the zh conversion tables
+* Allow user customization of the zh conversion tables through 
+  Mediawiki:zhconversiontable
+* Add zh-min-man (back) to language names list
+* Ported $wgCopyrightIcon setting from REL1_3A
+* (bug 1218) Show the original image on image pages if the thumbnail would be
+  bigger than the original image
+* (bug 1213) i18n of Special:Log labels
+* (bug 1013) Fix jbo, minnan in language names list
+* Added magic word MAG_NOTITLECONVERT to indicate that the title of the page
+  do not need to be converted. Useful in zh:
+* (bug 1224) Use proper date messages for date reformatter
+* (bug 1241) Don't show 'cont.' for first entry of the category list
+* (bug 1240) Special:Preferences was broken in Slovenian locale when
+  $wgUseDynamicDates is enabled
+* Added magic word MAG_NOCONTENTCONVERT to supress the conversion of the
+  content of an article. Useful in zh:
+* write-lock for updating the zh conversion tables in memcache
+* recursively parse subpages of MediaWiki:Zhconversiontable
+* (bug 1144) Fix export for fy language
+* make removal of an entry from zhconversiontable work
+* (bug 752) Don't insert newline in link title for url with %0a
+* Fix missing search box contents in MonoBook skin
+* Add option to forward search directly to an external URL (eg google)
+* Correctly highlight the fallback language variant when the selected 
+  variant is disabled. Used in zh: only for now.
+
+=== Beta 5 fixes ===
+
+* (bug 1124) Fix ImageGallery XHTML compliance
+* (bug 1186) news: in the middle of a word
+* (bug 1283) Use underlining and borders to highlight additions/deletions
+  in diff-view
+* Use user's local timezone in Special:Log display
+* Show filename for images in gallery by default (restore beta 3 behaviour)
+* (bug 1201) Double-escaping in brokenlinks, imagelinks, categorylinks, searchindex
+* When using squid reverse proxy, cache the redirect to the Main_Page
+* (bug 1302) Fix Norwegian language file
+* (bug 1205) Fix broken article saving in PHP 5.1
+* (bug 1206) Implement CURRENTWEEK and CURRENTDOW magic keyword (will give
+  number of the week and number of the day).
+* (bug 1204) Blocks do not expire automatically
+* (bug 1184) expiry time of indefinite blocks shown as the current time
+* (bug 1317) Fix external links in image captions
+* (bug 1084) Fix logo not rendering centrally in IE
+* (bug 288) Fix tabs wrapping in IE6
+* (bug 119) Fix full-width tabs with RTL text in IE
+* (bug 1323) Fix logo rendering off-screen in IE with RTL language
+* Show "block" link in Special:Recentchanges for logged in users, too, if
+  wgUserSysopBans is true.
+* (bug 1326) Use content language for '1movedto2' in edit history
+* zh: Fix warning when HTTP_ACCEPT_LANGUAGE is not set
+* zh: Fix double conversion for zh-sg and zh-hk
+* (bug 1132) Fix concatenation of link lists in refreshLinks
+* (bug 1101) Fix memory leak in refreshLinks
+* (bug 1339) Fix order of @imports in Cologne Blue CSS
+* Don't try to create links without namespaces ([[Category:]] link bug)
+* Memcached data compression fixes
+* Several valid XHTML fixes
+* (bug 624) Fix IE freezing rendering whilst waiting for CSS with MonoBook
+* (bug 211) Fix tabbed preferences with XHTML MIME type 
+* Fix for script execution vulnerability.
+
+=== Beta 6 fixes ===
+
+* (bug 1335) implement 'tooltip-watch' in Language.php
+* Fix linktrail for nn: language
+* (bug 1214) Fix prev/next links in Special:Log
+* (bug 1354) Fix linktrail for fo: language
+* (bug 512) Reload generated CSS on preference change
+* (bug 63) Fix displaying as if logged in after logout
+* Set default MediaWiki:Sitenotice to '-', avoiding extra database hits
+* Skip message cache initialization on raw page view (quick hack)
+* Fix notice errors in wfDebugDieBacktrace() in XML callbacks
+* Suppress notice error on bogus timestamp input (returns epoch as before)
+* Remove unnecessary initialization and double-caching of parser variables
+* Call-tree output mode for profiling
+* (bug 730) configurable $wgRCMaxAge; don't try to update purged RC entries
+* Add $wgNoFollowLinks option to add rel="nofollow" on external links
+  (on by default)
+* (bug 1130) Show actual title when moving page instead of encoded one.
+* (bug 925) Fix headings containing <math>
+* (bug 1131) Fix headings containing interwiki links
+* (bug 1380) Update Nynorsk language file
+* (bug 1232) Fix sorting of cached Special:Wantedpages in miser mode
+* (bug 1217) Image within an image caption broke rendering
+* (bug 1384) Make patrol signs have the same width for page moves as for edits
+* (bug 1364) fix "clean up whitespace" in Title:SecureAndSplit
+* (bug 1389) i18n for proxyblocker message
+* Add fur/Furlan/Friulian to language names list
+* Add TitleMoveComplete hook on page renames
+* Allow simple comments for each translation rules in MW:Zhconversiontable
+* (bug 1402) Make link color of tab subject page link on talk page indicate whether article exists
+* (bug 1368) Fix SQL error on stopword/short word search w/ MySQL 3.x
+* Translated Hebrew namespace names
+* (bug 1429) Stop double-escaping of block comments; fix formatting
+* (bug 829) Fix URL-escaping on block success 
+* (bug 1228) Fix double-escaping on &amp; sequences in [enclosed] URLs
+* (bug 1435) Fixed many CSS errors
+* (bug 1457) Fix XHTML validation on category column list
+* (bug 1458) Don't save if edit form submission is incomplete
+* Logged-in edits and preview of user CSS/JS are now locked to a session token.
+* Per-user CSS and JavaScript subpage customizations now disabled by default.
+  They can be re-enabled via $wgAllowUserJs and $wgAllowUserCss.
+* Removed .ogg from the default uploads whitelist as an extra precaution.
+  If your web server is configured to serve Ogg files with the correct
+  Content-Type header, you can re-add it in LocalSettings.php:
+    $wgFileExtensions[] = 'ogg';
+
+=== RC1 fixes ===
+
+* Fix notice error on nonexistent template in wikitext system message
+* (bug 1469) add missing <ul> tags on Special:Log
+* (bug 1470) remove extra <ul> tags from Danish log messages
+* Fix notice on purge w/ squid mode off
+* (bug 1477) hide details of SQL error messages by default
+  Set $wgShowSQLErrors = true for debugging.
+* (bug 1430) Don't check for template data when editing page that doesn't exist
+* Recentchanges table purging fixed when using table prefix
+* (bug 1431) Avoid redundant objectcache garbage collection
+* (bug 1474) Switch to better-cached index for statistics page count
+* Run Unicode normalization on all input fields
+* Fix translation for allpagesformtext2 in LanguageZh_cn and LanguageZh_tw
+* Block image revert without valid login
+* (bug 1446) stub Bambara (bm) language file using French messages
+* (bug 1432) Update Estonian localization
+* (bug 1471) unclosed <p> tag in Danish messages
+* convertLinks script fixes
+* Corrections to template loop detection
+* XHTML encoding fix for usernames containing & in Special:Emailuser
+* (for zh) Search for variant links even when conversion is turned off, 
+  to help prevent duplicate articles.
+* Disallow ISO 8859-1 C1 characters and "no-break space" in user names
+  on Latin-1 wikis.
+* Correct the name of the main page it LanguageIt
+* Allow Special:Makesysop to work for usernames containing SQL special
+  characters.
+* Fix annoying blue line in Safari on scaled-down images on description page
+* Increase upload sanity checks
+* Fix XSS bug in Media: links
+* Add cross-site form submission protection to various actions
+* Fix fatal error on some dubious page titles
+* Stub threshold displays correctly again
+
+
+=== 1.4.0 final fixes ===
+
+* (bug 65) Fix broken interwiki link encoding on Latin-1 wikis; force to UTF-8
+* (bug 563) Fix UTF-8 interwiki URL redirects via Latin-1 wikis
+* (bug 1536) Fix page info
+* Support os (Ossetic) as language code, using Russian localization base
+* (bug 1610) Support non (Old Norse) as language code, using Icelandic localization base
+* (bug 1618) Properly list custom namespaces in Special:Allpages
+* (bug 1622) Remove trailing' >' when using category browser
+* (bug 1570) Fix php 4.2.x error on conflict merging
+* (bug 1585) Fix page title on post-login redirection page
+* Run UTF-8 validation on old text in Recentchanges RSS diffs
+* (bug 1642) fix a mime type typo in img_auth.php
+* Automated interwiki redirects only for local interwikis
+* Respect read-only mode on block removals
+* Trim old illegal characters from syndication feeds
+* Reduce message cache outage recovery delay from 1 day to 5 minutes
+* (bug 1403) Update Finnish localization
+* (bug 1478) Punjabi localization
+* (bug 1667) Update script 5 second countdown.
+* (bug 1057) Fix logging table encoding (error on MySQL 4.1)
+* (bug 1680) Fix linktrail for fo
+* (bug 1653) Removing hardcoded messages in Special:Allmessages
+* (bug 1594) Render a hyphen in a formula as &minus; in HTML
+* (bug 1495) Fall back to default language MediaWiki: for custom messages
+* (bug 1617) Show different error messages for "user does not
+    exist" and "wrong password" when using AuthPlugin
+* (bug 1532), (bug 1544) Changed language names for
+    'bn', 'bo', 'dv', 'dz', 'ht', 'ii', 'li', 'lo', 'ng', 'or', 'pa', 'si',
+    'ti', 've' 
+* Fix editing on non-Esperanto wiki with user language pref set to Esperanto
+* Make conversion table for zh-sg default to zh-cn, and zh-hk default to zh-tw
+* Fix PHP notice in MonoBook when counters disabled
+* (bug 1696) Update namespaces, dates in uk localization
+* (bug 551) Installer warns about magic_quotes_runtime and magic_quotes_sybase
+  instead of trying to install with corrupt table files
+* Installer no longer tries to move non-default MediaWiki: pages into Template:
+* User-to-user email disabled by default ($wgEnableUserEmail)
+
+
+=== 1.4.1 fixes ===
+
+* (bug 1720) fix genitive month names for uk
+* (bug 1704) fixed untranslateable string in Special:Log
+* (bug 1638) Added Belrusian language file
+* (bug 1736) typo in SpecialValidate.php
+* (bug 73) Upload doesn't run edit updates on description page (links,
+  search index and categories)
+* (bug 646) <math> fails to recognize \ll and \gg
+* (bug 926) \div element from TeX not supported in <math> element
+* (bug 1147) add \checkmark to whitelist in texutil.ml
+* (bug 937) \limits function from LaTeX not supported in <math> element
+* Support for manually converting article title to different Chinese
+  variants (for zh)
+* (bug 1488, bug 1744) Fix encoding for preferences, dates in Latin-1 mode
+* (bug 1042) Fix UTF-8 case conversion for PHP <4.3 with mbstring extension
+* Fix code typo that broke article credits display
+* Installation fixes for running under IIS
+* (bug 1556) login page tab order. "remember" checkbox now come after password.
+* SQL debug log fixlets
+* (bug 1815) Fix namespace in old revision display with mismatched title
+* (bug 1788) Fix link duplication when edit/upload comment includes newlines
+* Change default on $wgSysopUserBans and $wgSysopRangeBans to true
+* Fix link conversion for URL request
+* (bug 1851) Updated download URL for the SCIM packages used by zhtable
+* (bug 1853) Try stripping quotes from term for 'go' title match
+* Fix missing function in Latin1 mode
+* (bug 1860) Anchors of interwiki links did not get normalized
+* (bug 1847) accept lowercase x in ISBN, do not accept invalid A-W,Y,Z
+* Fix link conversion for URL request, hopefully without breaking the wiki
+* (bug 1849) New option allows to consider categorized images as used on
+  Special:Unusedimages
+* Localized category namespace for ka (Georgian)
+* (bug 1107) Work around includes problem in installer when parent dir is not
+  readable by the web server
+* (bug 1927) Incorrect escaping on wikitext message in Blockip
+
+
+=== 1.4.2 fixes ===
+
+* Fix math options in Finnish localization
+* Use in-process Tidy extension if available when $wgUseTidy is on
+* (bug 1933) Fix PATH_INFO usage under IIS with PHP ISAPI module
+* (bug 1188) <nowiki> in {{subst:}} includes fixed
+* (bug 1936) <!-- comments --> in {{subst:}} includes fixed
+* Fix a potential MSIE JavaScript injection vector in Tidy mode
+
+
+=== 1.4.3 fixes ===
+
+* (bug 1636) Refs like &#0355; were misinterpreted as octal in some places
+* (bug 1163) Special:Undelete showed oldest revision instead of newest
+* (bug 1938) Fix escaping of illegal character references in link text
+* (bug 1997) Fix for error on display of renamed items in Recentchanges on PHP5
+* (bug 1949) Profiling typo in rare error case
+* (bug 1963) Fix deletion log link when $wgCapitalLinks is off
+* (bug 1970) Don't show move tab for immobile pages
+* (bug 1770) Page creation recorded links from the 'newarticletext' message
+* Optional change to the site_stats table. When applied, this removes the need 
+  for expensive queries in Special:Statistics.
+
+
+=== 1.4.4 fixes ===
+
+* (bug 725) Let dir="ltr" attribute work again in MonoBook on RTL languages
+* (bug 2024) Skip JavaScript error for custom skins where .js message not set
+* (bug 2025) Updated Indonesian localization
+* (bug 2039) Updated Lithuanian localization
+
+
+=== Caveats ===
+
+Some output, particularly involving user-supplied inline HTML, may not
+produce 100% valid or well-formed XHTML output. Testers are welcome to
+set $wgMimeType = "application/xhtml+xml"; to test for remaining problem
+cases, but this is not recommended on live sites. (This must be set for
+MathML to display properly in Mozilla.)
+
+
+For notes on 1.3.x and older releases, see HISTORY.
+
+
+=== Online documentation ===
+
+Documentation for both end-users and site administrators is currently being
+built up on Meta-Wikipedia, and is covered under the GNU Free Documentation
+License:
+
+  http://meta.wikipedia.org/wiki/Help:Contents
+
+
+=== Mailing list ===
+
+A MediaWiki-l mailing list has been set up distinct from the Wikipedia
+wikitech-l list:
+
+  http://mail.wikipedia.org/mailman/listinfo/mediawiki-l
+
+A low-traffic announcements-only list is also available:
+  http://mail.wikipedia.org/mailman/listinfo/mediawiki-announce
+
+It's highly recommended that you sign up for one of these lists if you're
+going to run a public MediaWiki, so you can be notified of security fixes.
+
+
+=== IRC help ===
+
+There's usually someone online in #mediawiki on irc.freenode.net
Index: /MediaWiki/branches/1.11/INSTALL
===================================================================
--- /MediaWiki/branches/1.11/INSTALL	(revision 1280)
+++ /MediaWiki/branches/1.11/INSTALL	(revision 1280)
@@ -0,0 +1,106 @@
+---
+Installing MediaWiki
+---
+
+Starting with MediaWiki 1.2.0, it's possible to install
+and configure the wiki "in-place", as long as you have
+the necessary prerequisites available.
+
+Required software:
+* Web server with PHP 5.x or higher.
+* A MySQL server, 4.0.14 or higher OR a Postgres server, 8.1 or higher
+
+MediaWiki is developed and tested mainly on Unix/Linux
+platforms, but should work on Windows as well.
+
+If your PHP is configured as a CGI plug-in rather than
+an Apache module you may experience problems, as this
+configuration is not well tested. safe_mode is also not
+tested and unlikely to work. 
+
+If you want math support see the instructions in math/README
+
+Don't forget to check the RELEASE-NOTES file...
+
+
+Additional documentation is available online, which may include more
+detailed notes on particular operating systems and workarounds for
+difficult hosting environments:
+
+http://meta.wikimedia.org/wiki/Help:Installation
+
+
+********************** WARNING **************************
+
+REMEMBER: ALWAYS BACK UP YOUR DATABASE BEFORE ATTEMPTING
+TO INSTALL OR UPGRADE!!!
+
+********************** WARNING **************************
+
+----
+In-place web install
+----
+
+Decompress the MediaWiki installation archive either on
+your server, or on your local machine and upload the
+directory tree. Rename it from "mediawiki-1.x.x" to
+something nice, like "wiki", since it'll be in your URL.
+
+  +-----------------------------------------------------------+
+  |  Hint: If you plan to use a fancy URL-rewriting scheme    |
+  |  to prettify your URLs, you should put the files in a     |
+  |  *different* directory from the virtual path where page   |
+  |  names will appear.                                       |
+  |                                                           |
+  |    See: http://meta.wikimedia.org/wiki/Rewrite_rules      |
+  +-----------------------------------------------------------+
+
+To run the install script, you'll need to temporarily make
+the 'config' subdirectory writable by the web server. The
+simplest way to do this on a Unix/Linux system is to make
+it world-writable:
+
+  chmod a+w config
+
+Hop into your browser and surf into the wiki directory.
+It'll direct you into the config script. Fill out the form...
+remember you're probably not on an encrypted connection.
+Gaaah! :)
+
+If all goes well, you should soon be told that it's set up
+your wiki database and written a configuration file. There
+should now be a 'LocalSettings.php' in the config directory;
+move it back up to the main wiki directory, and the wiki
+should now be working.
+
+  +------------------------------------------------------------+
+  |  Security hint: if you have limited access on your server  |
+  |  and cannot change ownership of files, you might want to   |
+  |  *copy* instead of *move* LocalSettings.php.               |
+  |                                                            |
+  |  This will make the file owned by your user account        |
+  |  instead of by the web server, which is safer in case      |
+  |  another user's account is compromised.                    |
+  +------------------------------------------------------------+
+
+Once the wiki is set up, you should remove the config
+directory, or at least make it not world-writable (though
+it will refuse to config again if the wiki is set up).
+
+
+----
+
+Don't forget that this is free software under development!
+Chances are good there's a crucial step that hasn't made it
+into the documentation. You should probably sign up for the
+MediaWiki developers' mailing list; you can ask for help (please
+provide enough information to work with, and preferably be aware
+of what you're doing!) and keep track of major changes to the
+software, including performance improvements and security patches.
+
+http://lists.wikimedia.org/mailman/listinfo/mediawiki-announce (low traffic)
+
+http://lists.wikimedia.org/mailman/listinfo/mediawiki-l (site admin support)
+
+http://lists.wikimedia.org/mailman/listinfo/wikitech-l (development)
+
Index: /MediaWiki/branches/1.11/Makefile
===================================================================
--- /MediaWiki/branches/1.11/Makefile	(revision 1280)
+++ /MediaWiki/branches/1.11/Makefile	(revision 1280)
@@ -0,0 +1,9 @@
+#
+# This Makefile is used to test some MediaWiki functions. If you
+# want to install MediaWiki, point your browser to ./config/
+#
+test: Test.php
+	prove -r t
+
+verbose:
+	prove -v -r t | egrep -v '^ok'
Index: /MediaWiki/branches/1.11/README
===================================================================
--- /MediaWiki/branches/1.11/README	(revision 1280)
+++ /MediaWiki/branches/1.11/README	(revision 1280)
@@ -0,0 +1,103 @@
+2006-04-05
+
+For system requirements, installation and upgrade details, see the files RELEASE-NOTES, 
+INSTALL, and UPGRADE.
+
+== MediaWiki ==
+
+MediaWiki is the software used for Wikipedia [http://www.wikipedia.org/] and the
+other Wikimedia Foundation websites. Compared to other wikis, it has an
+excellent range of features and support for high-traffic websites using
+multiple servers (Wikimedia sites peak in the 5000+ requests per second range
+as of November 2005).
+
+While quite usable on smaller sites, you may find you have to "roll your own"
+local documentation, and some aspects of configuration may seem overcomplicated
+because MediaWiki is primarily targeted as an in-house tool.
+
+The MediaWiki software was written by:
+* Lee Daniel Crocker
+* Magnus Manske
+* Jan Hidders
+* Brion Vibber
+* Axel Boldt
+* Geoffrey T. Dairiki
+* Tomasz Wegrzanowski
+* Erik Moeller
+* Tim Starling
+* Gabriel Wicke
+* Ashar Voultoiz
+* Evan Prodromou
+* Ævar Arnfjörð Bjarmason
+* Niklas Laxström
+* Domas Mituzas
+* Rob Church
+* Jens Frank
+* Several others
+
+The contributors hold the copyright to this work, and it is licensed
+under the terms of the GNU General Public License, version 2 or later[1]
+(see http://www.fsf.org/licenses/gpl.html). Derivative works and later
+versions of the code must be free software licensed under the same
+terms. This includes "extensions" that use MediaWiki functions or
+variables; see http://www.gnu.org/licenses/gpl-faq.html#GPLAndPlugins
+for details.
+
+The Wikimedia Foundation currently has no legal rights to the software.
+
+[1] Sections of code written exclusively by Lee Crocker or Erik Moeller are
+also released into the public domain, which does not impair the obligations of
+users under the GPL for use of the whole code or other sections thereof.
+
+[2] MediaWiki makes use of the Sajax Toolkit by modernmethod,
+	http://www.modernmethod.com/sajax/
+    which has the following license:
+
+       'This work is licensed under the Creative Commons Attribution
+        License. To view a copy of this license, visit
+        http://creativecommons.org/licenses/by/2.0/ or send a letter
+        to Creative Commons, 559 Nathan Abbott Way,
+        Stanford, California 94305, USA.'
+
+Many thanks to the Wikimedia regulars for testing and suggestions.
+
+The official website for mediawiki is located at:
+
+  http://www.mediawiki.org/
+
+The code is currently maintained in a Subversion repository
+at svn.wikimedia.org. See http://www.mediawiki.org/wiki/Subversion
+for details.
+
+Please report bugs and make feature requests in our Bugzilla system:
+
+  http://bugzilla.wikimedia.org/
+
+Documentation and discussion on new features may be found at:
+
+  http://www.mediawiki.org/wiki/Help:FAQ
+  http://www.mediawiki.org/wiki/Documentation
+  http://www.mediawiki.org/wiki/Development
+
+Extensions are listed at:
+
+  http://meta.wikimedia.org/wiki/Category:MediaWiki_extensions
+
+If you are setting up your own wiki based on this software, it is highly
+recommended that you subscribe to mediawiki-announce:
+
+  http://mail.wikimedia.org/mailman/listinfo/mediawiki-announce
+
+The mailing list is very low volume, and is intended primarily for
+announcements of new versions, bug fixes, and security issues.
+
+A higher volume support mailing list can be found at:
+
+  http://mail.wikimedia.org/mailman/listinfo/mediawiki-l
+
+Developer discussion takes place at:
+
+  http://mail.wikimedia.org/mailman/listinfo/wikitech-l
+
+There is also a development and support channel #mediawiki on
+irc.freenode.net, and an unoffical support forum at www.mwusers.com.
Index: /MediaWiki/branches/1.11/RELEASE-NOTES
===================================================================
--- /MediaWiki/branches/1.11/RELEASE-NOTES	(revision 1280)
+++ /MediaWiki/branches/1.11/RELEASE-NOTES	(revision 1280)
@@ -0,0 +1,585 @@
+= MediaWiki release notes =
+
+Security reminder: MediaWiki does not require PHP's register_globals
+setting since version 1.2.0. If you have it on, turn it *off* if you can.
+
+== MediaWiki 1.10.1 ==
+
+July 13, 2007
+
+This is a bugfix update to the Spring 2007 quarterly release snapshot.
+A number of fixes to improve compatibility with PostgreSQL, some versions
+of MySQL, and some PHP configurations are included.
+
+Changes since 1.10.0:
+
+* (bug 9417) Uploading new versions of images when using Postgres no longer 
+  throws warnings.
+* (bug 9908) Using tsearch2 with Postgres 8.1 no longer gives an error.
+* (bug 9973) Changed size was shown in advanced recentchanges collapsible items
+  with $wgRCShowChangedSized = false.
+* Fixed installation on MyISAM or old InnoDB with charset=utf8, was giving 
+  overlong key errors.
+* Fixed zero-padding issues with MySQL 5 binary schema
+* (bug 9820) session.save_path check no longer halts installation, but
+  warns of possible bad values
+* (bug 9978) Fixed session.save_path validation when using extended
+  configuration format, e.g. "5;/tmp"
+
+
+== MediaWiki 1.10.0 ==
+
+May 9, 2007
+
+This is the quarterly release snapshot for Spring 2007. See below for a full
+list of changes since the 1.9.x series.
+
+Changes since 1.10.0rc2:
+
+* (bug 9808) Fix regression that ignored user 'rclimit' option for Special:Contributions
+
+
+== MediaWiki 1.10.0rc2 ==
+
+May 4, 2007
+
+THIS IS A RELEASE CANDIDATE MADE AVAILABLE FOR TESTING!
+A FINAL 1.10.0 RELEASE WILL APPEAR WITHIN A FEW DAYS.
+
+Changes since 1.10.0rc1:
+* Various l10n fixes and updates
+* Fix for upgrade of page_restrictions table
+* (bug 9780) Fix normalization of titles with initial colon followed by whitespace
+* Fix for regression in upload: wrong size info saved into image table
+* Avoid cyclic stub problems when authorization hooks do funny things with
+  the user and the database at load time
+
+== MediaWiki 1.10.0rc1 ==
+
+April 30, 2007
+
+THIS IS A RELEASE CANDIDATE MADE AVAILABLE FOR TESTING!
+A FINAL 1.10.0 RELEASE WILL APPEAR WITHIN A FEW DAYS.
+
+MediaWiki is now using a "continuous integration" development model with
+quarterly snapshot releases. The latest development code is always kept
+"ready to run", and in fact runs our own sites on Wikipedia.
+
+Release branches will continue to receive security updates for about a year
+from first release, but nonessential bugfixes and feature developments 
+will be made on the development trunk and appear in the next quarterly release.
+
+Those wishing to use the latest code instead of a branch release can obtain
+it from source control: http://www.mediawiki.org/wiki/Download_from_SVN
+
+== Configuration changes ==
+
+* A new switch $wgCommandLineDarkBg used by maintenance scripts (parserTests.php).
+  It lets you specify if your terminal use a dark background, the colorized
+  output will be made lighter making things easier to read.
+* The minimum permissions needed to edit a page in each namespace can now be 
+  customized via the $wgNamespaceProtection array. By default, editing pages in
+  the MediaWiki namespace requires "editinterface" permission, as before.
+* Allow restriction of autoconfirmed permission by edit count. New global setting
+  $wgAutoConfirmCount (defaulting to zero, naturally).
+* Added rate limiter for Special:Emailuser
+* Private logs can now be created using $wgLogRestrictions
+* (Bug 8590) limited HTML is now always enabled ($wgUserHtml = true).
+* Deprecated $wgUseImageResize, thumbnailing will be enabled unconditionally.
+
+== New features since 1.9 ==
+
+* (bug 6937) Introduce "statistics-footer" message, appended to 
+  Special:Statistics
+* (bug 6638) List block flags in block log entries
+* (bugs 5051, 5376) Tooltips and accesskeys no longer require JavaScript
+* Added SkinTemplateOutputPageBeforeExec hook before SkinTemplate::outputPage()
+  starts page output
+  (http://lists.wikimedia.org/pipermail/wikitech-l/2007-January/028554.html)
+* Introduce "cascading protection" -- implicit protection on pages transcluded
+  into a page protected with this option enabled
+* (bug 8567) Added hook RawPageViewBeforeOutput just before the text is blown
+  out in action=raw, so extensions might influence the output.
+* (bug 3446) Add user preference to hide page content below diffs, can be
+  overridden by adding diffonly=1 or diffonly=0 to the URL of the diff page
+* Add 'purge' privilege to replace the hardcoded check for login state in
+  determining whether action=purge can be done via GET. Switching the
+  permission on for anons can be helpful for benchmarking.
+* (bug 7842) Link back to deleted revision list from deleted revision preview
+* (bug 8619) Add user-aware "unblock" link to Special:Blockip
+* (bug 8522) Provide a "delete" link on Special:Brokenredirects for users with
+  the appropriate permission
+* (bug 8628) Add user-aware block list link to Special:Blockip
+* (bug 8621) Log revisions marked as patrolled
+* Introduce "BookInformation" hook; see docs/hooks.txt for more details
+* Add title prefix search for Special:Undelete
+* Remove full-archive list from Special:Undelete
+* (bug 8136) Introduce 'ArticleUndelete' hook; see docs/hooks.txt for more info
+* (bug 8712) Expose user groups as a JavaScript global
+* Introduce 'CustomEditor' hook; see docs/hooks.txt for more information
+* New special page, Special:Protectedpages, which shows all protected pages
+  and their protection status (full protection status is not pulled out due
+  to performance considerations, so it just shows "full protected" or
+  "semi protected".
+* (bug 4133) Allow page protections to be made with an expiry date, in the same
+  format as block expiry dates. Existing protections are assumed to be infinite,
+  as are protections made with the new field left blank. 
+* (bug 8535) Allow certain vertical alignment attributes to be used as image
+  keywords
+* (bug 6987) Allow perrow, widths, and heights attributes for <gallery>
+* (bug 3678) Allow disabling MediaWiki:Aboutsite in the same way as
+  MediaWiki:Disclaimers; Also means that if any of the footer links are
+  disabled in the wiki's default language (by setting to "-"), they'll also
+  be disabled in other languages too (e.g. if the user specifies uselang=fr).
+* Sort log types in Special:Log
+* Added a classname ("mw-toolbar-editbutton") and unique IDs to the edit
+  toolbar buttons
+* Hide irrelevant block options in Special:Blockip based on whether an
+  IP address/range or username is listed. (Dynamic using JS.)
+* (bug 9032) Make quickbarSettings localizable through Special:Allmessages
+* (bug 7782) Standardisation of file info at image description pages.
+* (bug 1035) View contributions / recentchanges for an IP range.
+* (bug 8747) When unwatching pages from Special:Watchlist/edit, put the
+  confirmation messages in a proper list with a CSS class and id.
+* (bug 9118) Show relevant log fragments on deletion confirmatio page
+* (bug 9009) Add username entry field to Special:Contributions
+* (bug 1723) Article size in history
+* (bug 9223) Disallow magic tilde sequences in page titles and usernames
+* (bug 6997) Link from Special:log/block to unblock form
+* (bug 9117) Link from Special:log/delete to undelete form
+* Link from Special:log/protect to change protection form
+* (bug 1196) Add IPv6 support added to blocks, more consistancy for IPv6 contribs
+* (bug 3984) Searching in logs by title%
+* Show thumbnail of existing image if image exists already under this filename
+* (bug 5546) Watchlist reflects logged actions like move, protection, undelete
+* Support protocols other than HTTP in LinkFilter, use $wgUrlProtocols
+* (bug 3069) Warning on upload of scaled down images
+* Warning on upload of images with uppercase extension if image with lowercase
+  extension exists
+* (bug 4624) Namespace selection for Special:Whatlinkshere
+* Introduce PageHistoryBeforeList and PageHistoryLineEnding hooks; see docs/hooks.txt
+  for more information
+* (bug 9397) Introduce "sp-contributions-footer" and "sp-contributions-footer-anon"
+  messages, shown at the end of Special:Contributions as appropriate for the target
+* (bug 8421) Expose current action in JavaScript globals (as 'wgAction')
+* (bug 9069) Use galleries in query pages dedicated to images
+* (bug 9177) Installer now warns of various conditions affecting session.save_path
+  which can lead to broken session storage
+* (bug 9046) Special page to list pages without language links
+* (bug 9508) Special page to list articles with the fewest revisions
+* Introduce 'FileUpload' hook; see docs/hooks.txt for more information
+* Introduce 'SearchUpdate' hook; see docs/hooks.txt for more information
+* Introduce 'mywatchlist' message; used on personal menu to link to watchlist page
+* Introduce magic word {{NUMBEROFEDITS}}
+* Introduced media handlers for file-type specific operations.
+* Improved error reporting for image thumbnailing
+* Added sharpening option for ImageMagick thumbnailing
+* (bug 9656) Autosummaries will be generated for deletion of pages longer than
+  500 characters
+* Predefined block reasons added to Special:Blockip
+* (bug 9196) Installer now check that zend.ze1_compatibility_mode is off
+* (bug 9697) Introduce 'InternalParseBeforeLinks' hook; see docs/hooks.txt for more information
+* 'contribsub' message changed to 'contribsub2' with two parameters to permit
+  better localization.  Change is reverse-compatible and can be ignored for
+  most wikis.
+* Adding a 'reason' field to Special:Userrights
+
+== Bugfixes since 1.9 ==
+
+* (bug 7292) Fix site statistics when moving pages in/out of content namespaces
+* (bug 8531) Correct local name of Lingála
+* Made the PLURAL: parser function return singular on -1 per default
+* Fixed up the AjaxSearch
+* Fix SpecialVersion->formatCredits input. Version and Url parameters should be
+  null to be treated properly with isset.
+* Page restrictions moved into a new, dedicated table
+* Correct tooltip accesskey hint for Opera on the Macintosh
+  (uses Shift-Esc-, not Ctrl-).
+* (bug 8002) Math should render left-to-right even in right-to-left wikis
+* Pass e-mail and real name fields to AuthPlugin::addUser, as additional
+  optional fields, which may be considered useful at registration time.
+* PostgreSQL upgrade scripts fixed and updated
+* (bug 8613) Fix error when viewing "Recent Changes" and using Postgres.
+* Initialise site_stats table at upgrade time if data was missing
+* (bug 7250) Updated Unicode normalization tables to Unicode 5.0
+* Unmaintained Oracle support files have been removed.
+* Use browser default for printing size, don't force to 11pt
+* (bug 8632) Fix regression in page protection null edit update
+* (bug 8407) Disallow indexing of "printable" versions
+* (bug 8643) Correctly escape the page-specific CSS class for non-Monobook skins
+* (bug 8629) Document $wgFilterCallback
+* (bug 1000) Clarify warning about memory_limit in installer
+* Suppress PHP warning about set_time_limit in installer when safe mode is on
+* (bug 3000) Fall back to SCRIPT_NAME plus QUERY_STRING when REQUEST_URI is
+  not available, as on IIS with PHP-CGI
+* Missing interwiki row for English Wikipedia restored (as "wikipedia:")
+* use configured cache servers for mctest.php
+* bucket details in mcc.php
+* fix input validation and remove debugging code in compressOld
+* full ID range for moveToExternal
+* fix resolveStubs.php for compatibility with older serialized data
+* maximum line length for bar graphs in getLagTimes.php
+* recognize specieswiki in rebuildInterwiki.inc
+* profile unicode cleanup in Xml
+* log slow parses in Article.php
+* profile wfMsgReal
+* log mkdir failures
+* profile AutoLoader
+* rebuild empty DjVu metadata containing ''
+* security fix for DjVu metadata retrieval
+* Undelete page list can use plural marker
+* (bug 8638) Fix update from 1.4 and earlier
+* (bug 8641) Fix order of updates to ipblocks table
+* (bug 8678) Fix detection of self-links for numeric titles in Parser
+* (bug 6171) Magically close tags in tables when not using Tidy.
+* Sanitizer now correctly escapes lonely '>' occurring before the first wikitag.
+* Ignore self closing on closing tags ( '</div />' now gives '</div>') 
+* (bug 8673) Minor fix for web service API content-type header
+* Fix API revision list on PHP 5.2.1; bad reference assignment
+* (bug 8688) Handle underscores/spaces in Special:Blockip and Special:Ipblocklist
+  in a consistent manner
+* (bug 8701) Check database lock status when blocking/unblocking users
+* ParserOptions and ParserOutput classes are now in their own files
+* (bug 8708) Namespace translations for Zealandic language
+* Renamed constructor methods to PHP 5 __construct reserved name
+* (bug 8715) Warn users when editing an interface message whether or not the
+  message page exists
+* ar: fix the 'create a new page' on search page when no exact match found
+* (bug 8703) Corrected talk and image namespace name for Limburgish (li)
+* (bug 8671) Expose "wpDestFile" as a parameter to "uploadtext"
+* (bug 8403) Respect bad image list exceptions in galleries on wiki pages
+* Allow sending per-user contribution requests to "contributions" query group
+* (bug 3717) Update user count for AuthPlugin account autocreation
+* (bug 8719) Firefox release notes lie! Fix tooltips for Firefox 2 on x11;
+  accesskeys default settings appear to be same as Windows.
+* Added an option to make Linker::userToolLinks() show the contribs link
+  red when the user has no edits. Linker::userToolLinksRedContribs() is an
+  alias to that which should be used to make it more self documentating.
+* (bug 8749) Bring MySQL 5 table defs back into sync
+* (bug 8751) Set session cookies to HTTPS-only to match other cookies
+* (bug 8652) Catch exceptions generated by malformed XML in multipage media
+* (bug 8782) Help text in Makefile
+* (bug 8777) Suppress 'previous' link on Special:Allpages when at first page
+* (bug 8774) Fix path for GNU FDL rights icon on new installs
+* Fix multipage selector drop-down for DjVu images to work when title
+  is passed as a query string parameter; we have to pass the title as
+  a form parameter or it gets dropped from the form submission URL
+* (bug 8819) Fix full path disclosure in with skins dependencies
+* Fixed bug affecting HTML formatting in sortable table column titles
+* Merged table sorting code into wikibits.js
+* (bug 8711) Stop floats in previews from spilling into edit area
+* (bug 8858) Safer handling when $wgImageLimits is changed. Added a note
+  in DefaultSettings to make it clear.
+* (bug 4268) Fixed data-loss bug in compressOld batch text compression
+  affecting pages which had null edits (move, protect, etc) as second
+  edit in a batch group. Isolated and patched by Travis Derouin.
+* Fix for paths in 1.4->1.5 special-case updater script
+* (bug 8789) AJAX search: IE users can now use the return key
+* (bug 6844) Use <ins> and <del> tags to emphase the differences
+* (bug 6684) Fix improper javascript array iteration
+* (bug 4347) use MailAddress object for reply-to
+* Add AlphabeticPager abstract class
+* Use faster AlphabeticPager for Special:Categories
+* (bug 8875) Show printable link in MonoBook sidebar for locally nonexistent
+  pages; perhaps useful for categories and shared images
+* Clean up session checks to better handle the case where the session was
+  opened during the current request. May help with some caching corner
+  cases.
+* (bug 8897) Fix whitespace removal for interlanguage links with link prefix
+* Add 'ParserTestTables' hook to expand the list of temporary tables copied
+  by the parser test harness; use for extensions which require the presence
+  of other tables while they work.
+* Message names changed for AlphabeticPager introduced with r19758
+  for better localisations.
+* (bug 8944) The deprecated is_a() function is used in StubObjects.php
+* (bug 8992) Fix a remaining raw use of REQUEST_URI in history
+* (bug 8999) User.php gives "undefined user editcount" PHP notice.
+* (bug 8984) Fix a database error in Special:Recentchangeslinked
+  when using the Postgres database.
+* Moved the main ob_start() from the default LocalSettings.php to WebStart.php.
+  The ob_start() section should preferably be removed from older
+  LocalSettings.php files.
+* Give Content-Length header for HTTP/1.0 clients.
+* Partial support for Flash cross-domain-policy filtering.
+* Lazy-initialize site_stats row on load when empty. Somewhat kinder to
+  dump-based installations, avoiding PHP warnings when NUMBEROFARTICLES
+  and such are used.
+* Add 'charset' to Content-Type headers on various HTTP error responses
+  to forestall additional UTF-7-autodetect XSS issues. PHP sends only
+  'text/html' by default when the script didn't specify more details,
+  which some inconsiderate browsers consider a license to autodetect
+  the deadly, hard-to-escape UTF-7.
+    This fixes an issue with the Ajax interface error message on MSIE when
+  $wgUseAjax is enabled (not default configuration); this UTF-7 variant
+  on a previously fixed attack vector was discovered by Moshe BA from BugSec:
+  http://www.bugsec.com/articles.php?Security=24
+* Trackback responses now specify XML content type
+* (bug 9044) Send a comment with action=raw pages in CSS/JS output mode
+  to work around IE/Mac bug where empty pages time out verrrrryyyyy slowly,
+  particularly with new keepalive-friendly HTTP on Wikipedia
+* (bug 8919) Suppress paging links and related messages where there are no
+  rows to list for query pages
+* (bug 9057) Standardize MediaWiki: namespace for oc
+* (bug 8132) Suppress "Pages in this category" heading in categories when
+  there are none
+* (bug 8958) Handle search operators better when using tsearch2 (Postgres)
+* (bug 8799) Use redirect table for Special:BrokenRedirects and
+  Special:DoubleRedirects
+* (bug 8918) Enable PLURAL option for MediaWiki:showingresults and
+  MediaWiki:showingresultsnum
+* (bug 9122) Fix minor display issue in RTL with section edit link margin
+* (bug 5805) Enable PLURAL option for some messages of watchlist and statistic
+* (bug 3953) Work around poor display of parenthesis in the in other
+  languages section of MonoBook skin
+* (bug 8539) Enable PLURAL option for another message of recentchanges.
+* (bug 8728) MediaWiki:Badfiletype splitted into 3 messages
+* (bug 9131) Allow SpecialContributions to work with Postgres
+* (bug 9155) Allow footer info to wrap in Monobook
+* (bug 8847) Strip spurious #fragments from request URI to fix redirect
+  loops on some server configurations
+* (bug 9097) column "pr_pagetype" does not exist
+* (bug 9217) Balance wfProfile calls in Skin::outputPage
+* (bug 9222) PostgreSQL updater should not be version-specific
+* Fix fallback implementation of mb_strlen so it works and isn't insanely
+  slow for large strings, since it's used for page edit lengths
+* (bug 8815) Setting password in initUser() breaks LdapAuthentication plugin
+* (bug 9256) Add a quick note to index.php header comments
+* Make Special:Listusers caseinsensitive for first letter
+* Default tidy.conf has been moved from extensions module into includes.
+* Ignore lonely '''''
+* (bug 9244) When calling edit page for nonexistent section, generate error
+  inside of just discarding edits, since edit links sometimes go to the wrong
+  place.
+* (bug 9019) No warning during upload if image description page exists, but no
+  image
+* (bug 8582) Allow thumbnailing when imagesize has a space.
+* (bug 8716) Change math_inputhash and math_outputhash to byte for Postgres
+* (bug 9343) Correct internal name for Wolof language
+* (bug 9363) Fix Postgres error on Recentchangeslinked
+* (bug 5142) Fixed call of hook ArticleViewHeader
+* (bug 4777) Separate prev/next messages for Special:Whatlinkshere
+* Merge approx 15 missing Wikipedia language codes into wikipedia-interwiki.sql
+  based on Jeff Merkey's mediawiki-1.9.3.WG-20070316.tar.gz.bz2 archive.
+* (bug 9411) Fix for shared image descriptions using query-string titles
+* (bug 4756) Add user tool links for self created accounts at special:log
+  instead of sometimes broken block links from newuserlog extension
+* (bug 5817) Special:Recentchangeslinked now shows red link for nonexistent
+  target page instead of silently redirecting
+* (bug 8914) Don't transform colons in {{anchorencode:}}
+* (bug 9241) Handle edit section links and include size links for cached
+  templates the same as the first transclusion.
+* (bug 9466) "Rollback failed" page doesn't format edit comment
+* (bug 9472) Invalid XHTML on cached special pages
+* (bug 9472) Invalid XHTML on Special:Newpages
+* (bug 4764) "My contributions" not bold when viewing own contributions
+* (bug 9194) Add {{PLURAL:...}} to navigation bar of Special:Whatlinkshere
+* (bug 9033) Use a more specific error message when users are not able/allowed
+  to edit page protection levels due to a block, database lock or permissions
+* Fixed $wgFeedLimit
+* (bug 9270) Corrected help namespace name for Dutch Lower Saxon (nds-nl)
+* (bug 929, 4215) Expose "rcdays" user preference in Special:Preferences
+* (bug 9554) Extension-provided group name messages not used
+* (bug 9565) Translate template namespace name for Hindi (hi)
+* (bug 8599) Correct localized names of zh-variants
+* (bug 3366) Require skins based on SkinTemplate to override the skinname
+  property.
+* (bug 9220) Removed obsoletes functions in install-utils.inc.
+* Removed obsoletes Title::getRelatedCache and Title:touchArray
+* (bug 7285) Check MySQL username length during install
+* (bug 6910) Correct date/time formats in Vietnamese (vi)
+* (bug 9608) Correctly use ORDER BY in dumpLinks.php
+* (bug 9609) Correctly use ORDER BY in SpecialWhatlinkshere.php
+* Special:Random and Special:Randomredirect now try harder to send the user to
+  a random page, and will give an error message if none really can be found
+  instead of sending the user to the main page like they used to
+* Fix object variable used for displaying "not-patrolled" CSS class on list
+* Fixed interaction of page parameter to ImagePage with the HTML file cache
+* Fixed MIME type for SVG files, will be silently changed from image/svg 
+  to image/svg+xml after loading from the database.
+* Workaround for djvutoxml bug #1704049 (poor performance). Use djvudump 
+  instead.
+* Fixed odd behaviour in ImagePage on DjVu thumbnailing errors
+* (bug 5439) "Go" title search will now jump to shared/foreign Image: and
+  MediaWiki: pages that have not been locally edited.
+* (bug 9630) Limits links in Whatlinkshere forgot about namespace filter
+* Fixed upgrade for the non-standard MySQL schemas
+* Disable MySQL's strict mode at session start for MySQL 4.1+, to avoid the 
+  various problems that occur when it is on.
+* (bug 9585) Fix regression in tidy usage in Special:Undelete previews
+* (bug 3826) Normalize some invalid cookie name characters when setting
+  up $wgCookiePrefix. Completes application of patch by Anders Kaseorg.
+* (bug 9649) Fix RTL form alignment for Special:Movepage
+* (bug 9582) Members of bot group now mark edits patrolled by default
+* (bug 9669) Fix limit ordering for rebuildrecentchanges; broken since
+  converted from 1.4 to 1.5 schema
+* (bug 9682) Revert PHP 5.1 dependency on warning suppression for SVN info
+* (bug 5959) Anchors dropped from stub links
+* (bug 3348) Some additional weak password checks: password which is same
+  as username will now be rejected.
+* (bug 8602) Converted Special:Contributions to use an IndexPager. The 
+  interpretation of the offset parameter has changed, and the go parameter 
+  has been removed.
+* (bug 7629) Fix $wgBrowserBlackList to avoid false positive on MSIE
+  when certain plugins are present which alter the user agent
+
+
+== Maintenance ==
+
+* New script maintenance/language/checkExtensioni18n.php used to check i18n
+  progress in the extension repository.
+* Running maintenance/parserTests.php with '--record' option, will now
+  automatically attempt to create the required tables
+* --purge option to do additional parser-cache purging for purgeList.php
+* Fix hardcoded background color in parserTests.php
+* parserTests.php : removed the 'light' option for --color argument, replacing
+  it with a new global switch : $wgCommandLineDarkBg
+* (bug 8780) Clarify message for command-line scripts if LocalSettings.php
+  exists but is not readable
+* dumpBackup / importDump now work with PostgreSQL
+* (bug 8975) Use "Maintenance script" as the default username for importImages.php
+  and importTextFile.php scripts
+* (bug 8933) Fix maintenance/reassignEdits.php script
+* (bug 9440) Added "mediawikiwiki" interwiki prefix to MediaWiki.org
+* (bug 2979) Import now gracefully skips invalid titles with a warning
+* Restore '--norc' option for maintenance/importTextFile.php
+* Help information for maintenance/importTextFile.php now easier to read on
+  consoles
+* Doxygen documentation now show the revision number of each file, generate
+  graphs using dot and include a search engine.
+
+
+== Languages updated ==
+
+* Arabic (ar)
+* Aramaic (arc)
+* Aymara (ay)
+* Belarusian normative (be)
+* Belarusian alternative (be-x-old)
+* Bulgarian (bg)
+* Bihara (bh)
+* Breton (br)
+* Catalan (ca)
+* Czech (cs)
+* Danish (da)
+* German (de)
+* Greek (el)
+* Esperanto (eo)
+* Spanish (es)
+* Estonian (et)
+* Basque (eu)
+* Finnish (fi)
+* Võro (fiu-vro)
+* French (fr)
+* Hebrew (he)
+* Hindi (hi)
+* Upper Sorbian (hsb)
+* Hungarian (hu)
+* Armenian (hy)
+* Indonesian (id)
+* Italian (it)
+* Japanese (ja)
+* Javanese (jv)
+* Georgian (ka)
+* Kabyle (kab)
+* Kazakh (kk)
+* Korean (ko)
+* Kashmiri (ks)
+* Ripuarian (ksh)
+* Latin (la)
+* Luganda (lg)
+* Limburgish (li)
+* Lithuanian (lt)
+* Latvian (lv)
+* Marathi (mr)
+* Low Saxon (nds)
+* Dutch Lower Saxon (nds-nl)
+* Nepali (ne)
+* Nepal Bhasa (new)
+* Dutch (nl)
+* Occitan (oc)
+* Pali (pi)
+* Polish (pl)
+* Romanian (ro)
+* Russian (ru)
+* Sanskrit (sa)
+* Sicilian (scn)
+* Slovak (sk)
+* Sundanese (su)
+* Swedish (sv)
+* Tahitian (ty)
+* Ukrainian (uk)
+* Urdu (ur)
+* Uzbek (uz)
+* Vietnamese (vi)
+* Zealandic (zea)
+* Old Chinese / Late Middle Chinese (zh-classical)
+* Chinese (PRC) (zh-cn)
+* Chinese (Taiwan) (zh-tw)
+* Cantonese (zh-yue)
+
+== Compatibility ==
+
+MediaWiki 1.10 requires PHP 5 (5.1 recommended). PHP 4 is no longer supported.
+
+PHP 5.0.x fails on 64-bit systems due to serious bugs with array processing:
+http://bugs.php.net/bug.php?id=34879
+Upgrade affected systems to PHP 5.1 or higher.
+
+MySQL 3.23.x is no longer supported; some older hosts may need to upgrade.
+At this time we still recommend 4.0, but 4.1/5.0 will work fine in most cases.
+
+
+== Upgrading ==
+
+1.10 has several database changes since 1.9, and will not work without schema
+updates.
+
+If upgrading from before 1.7, you may want to run refreshLinks.php to ensure
+new database fields are filled with data.
+
+If you are upgrading from MediaWiki 1.4.x or earlier, some major database
+changes are made, and there is a slightly higher chance that things could
+break. Don't forget to always back up your database before upgrading!
+
+See the file UPGRADE for more detailed upgrade instructions.
+
+=== Caveats ===
+
+Some output, particularly involving user-supplied inline HTML, may not
+produce 100% valid or well-formed XHTML output. Testers are welcome to
+set $wgMimeType = "application/xhtml+xml"; to test for remaining problem
+cases, but this is not recommended on live sites. (This must be set for
+MathML to display properly in Mozilla.)
+
+
+For notes on 1.9.x and older releases, see HISTORY.
+
+
+=== Online documentation ===
+
+Documentation for both end-users and site administrators is currently being
+built up on MediaWiki.org, and is covered under the GNU Free Documentation
+License (except for pages that explicitly state that their contents are in
+the public domain) :
+
+  http://www.mediawiki.org/wiki/Documentation
+
+
+=== Mailing list ===
+
+A MediaWiki-l mailing list has been set up distinct from the Wikipedia
+wikitech-l list:
+
+  http://lists.wikimedia.org/mailman/listinfo/mediawiki-l
+
+A low-traffic announcements-only list is also available:
+
+  http://lists.wikimedia.org/mailman/listinfo/mediawiki-announce
+
+It's highly recommended that you sign up for one of these lists if you're
+going to run a public MediaWiki, so you can be notified of security fixes.
+
+
+=== IRC help ===
+
+There's usually someone online in #mediawiki on irc.freenode.net
Index: /MediaWiki/branches/1.11/StartProfiler.php
===================================================================
--- /MediaWiki/branches/1.11/StartProfiler.php	(revision 1280)
+++ /MediaWiki/branches/1.11/StartProfiler.php	(revision 1280)
@@ -0,0 +1,22 @@
+<?php
+
+require_once( dirname(__FILE__).'/includes/ProfilerStub.php' );
+
+/**
+ * To use a profiler, delete the line above and add something like this:
+ *
+ *   require_once(  dirname(__FILE__).'/includes/Profiler.php' );
+ *   $wgProfiler = new Profiler;
+ *
+ * Or for a sampling profiler:
+ *   if ( !mt_rand( 0, 100 ) ) {
+ *       require_once(  dirname(__FILE__).'/includes/Profiler.php' );
+ *       $wgProfiler = new Profiler;
+ *   } else {
+ *       require_once(  dirname(__FILE__).'/includes/ProfilerStub.php' );
+ *   }
+ * 
+ * Configuration of the profiler output can be done in LocalSettings.php
+ */
+
+?>
Index: /MediaWiki/branches/1.11/Test.php
===================================================================
--- /MediaWiki/branches/1.11/Test.php	(revision 1280)
+++ /MediaWiki/branches/1.11/Test.php	(revision 1280)
@@ -0,0 +1,307 @@
+<?php
+
+/*
+
+=head1 NAME
+
+Test.php - L<Test::More> for PHP
+
+=head1 SYNOPSIS
+
+  require 'Test.php';
+
+  plan( $num ); # plan $num tests
+  # or
+  plan( 'no_plan' ); # We don't know how many
+  # or
+  plan( 'skip_all' ); # Skip all tests
+  # or
+  plan( 'skip_all', $reason ); # Skip all tests with a reason
+
+  diag( 'message in test output' ) # Trailing \n not required
+
+  # $test_name is always optional and should be a short description of
+  # the test, e.g. "some_function() returns an integer"
+
+  # Various ways to say "ok"
+  ok( $got == $expected, $test_name );
+  
+  # Compare with == and !=
+  is( $got, $expected, $test_name );
+  isnt( $got, $expected, $test_name );
+
+  # Run a preg match on some data
+  like( $got, $regex, $test_name );
+  unlike( $got, $regex, $test_name );
+
+  # Compare something with a given comparison operator
+  cmp_ok( $got, '==', $expected, $test_name );
+  # Compare something with a comparison function (should return bool)
+  cmp_ok( $got, $func, $expected, $test_name );
+
+  # Recursively check datastructures for equalness
+  is_deeply( $got, $expected, $test_name );
+
+  # Always pass or fail a test under an optional name
+  pass( $test_name );
+  fail( $test_name );
+
+=head1 DESCRIPTION
+
+F<Test.php> is an implementation of Perl's L<Test::More> and Pugs's B<Test> for
+PHP. Like those two modules it produces TAP output (see L<TAP>) which
+can then be gathered, formatted and summarized by a program that
+understands TAP such as L<prove(1)>.
+
+=cut
+
+*/
+
+register_shutdown_function('test_ends');
+
+$Test = array(
+	  'run'       => 0,
+	  'failed'    => 0,
+	  'badpass'   => 0,
+	  'planned'   => null
+);
+
+function plan( $plan, $why = '' )
+{
+	global $Test;
+
+	$Test['planned'] = true;
+
+	switch ( $plan )
+	{
+	case 'no_plan':
+		$Test['planned'] = false;
+		break;
+	case 'skip_all';
+		printf( "1..0%s\n", $why ? " # Skip $why" : '' );
+		exit;
+	default:
+		printf( "1..%d\n", $plan );
+		break;
+	}
+}
+
+function pass( $desc = '' )
+{
+	return proclaim(true, $desc);
+}
+
+function fail( $desc = '' )
+{
+	return proclaim( false, $desc );
+}
+
+function ok( $cond, $desc = '' ) {
+	return proclaim( $cond, $desc );
+}
+
+function is( $got, $expected, $desc = '' ) {
+	$pass = $got == $expected;
+	return proclaim( $pass, $desc, /* todo */ false, $got, $expected );
+}
+
+function isnt( $got, $expected, $desc = '' ) {
+	$pass = $got != $expected;
+	return proclaim( $pass, $desc, /* todo */ false, $got, $expected, /* negated */ true );
+}
+
+function like( $got, $expected, $desc = '' ) {
+	$pass = preg_match( $expected, $got );
+	return proclaim( $pass, $desc,  /* todo */ false, $got, $expected );
+}
+
+function unlike( $got, $expected, $desc = '' ) {
+	$pass = ! preg_match( $expected, $got );
+	return proclaim( $pass, $desc,  /* todo */ false, $got, $expected, /* negated */ true );
+}
+
+function cmp_ok($got, $op, $expected, $desc = '')
+{
+	$pass = null;
+
+	/* See http://www.php.net/manual/en/language.operators.comparison.php */
+	switch ($op)
+	{
+	case '==':
+		$pass = $got == $expected;
+		break;
+	case '===':
+		$pass = $got === $expected;
+		break;
+	case '!=':
+	case '<>':
+		$pass = $got != $expected;
+		break;
+	case '!==':
+		$pass = $got !== $expected;
+		break;
+	case '<':
+		$pass = $got < $expected;
+		break;
+	case '>':
+		$pass = $got > $expected;
+		break;
+	case '<=':
+		$pass = $got <= $expected;
+		break;
+	case '>=':
+		$pass = $got >= $expected;
+		break;
+	default:
+		if ( function_exists( $op ) ) {
+			$pass = $op( $got, $expected );
+		} else {
+			die("No such operator or function $op\n");
+		}
+	}
+
+	return proclaim( $pass, $desc, /* todo */ false, $got, "$op $expected" );
+}
+
+function diag($message)
+{
+    if (is_array($message))
+	{
+	    $message = implode("\n", $message);
+	}
+
+    $messages = explode("\n", $message);
+
+    foreach ($messages as $msg)
+	{
+        echo "# $msg\n";
+    }
+}
+
+function include_ok( $file, $desc = '' )
+{
+    $pass = include $file;
+    return proclaim( $pass, $desc == '' ? "include $file" : $desc );
+}
+
+function require_ok( $file, $desc = '' )
+{
+    $pass = require $file;
+    return proclaim( $pass, $desc == '' ? "require $file" : $desc );
+} 
+
+function is_deeply( $got, $expected, $desc = '' )
+{
+    // hack
+    $s_got = serialize( $got );
+	$s_exp = serialize( $expected );
+
+	$pass = $s_got == $s_exp;
+
+	proclaim( $pass, $desc, /* todo */ false, $got, $expected );
+}
+
+function isa_ok( $obj, $expected, $desc = '' ) {
+	$name = get_class( $obj );
+	$pass = $name == $expected;
+	proclaim( $pass, $desc, /* todo */ false, $name, $expected );
+} 
+
+function proclaim(
+	$cond, // bool
+	$desc = '',
+	$todo = false,
+	$got = null,
+	$expected = null,
+	$negate = false ) {
+
+	global $Test;
+
+	$Test['run'] += 1;
+
+	# TODO: force_todo
+
+	# Everything after the first # is special, so escape user-supplied messages
+	$desc = str_replace( '#', '\\#', $desc );
+	$desc = str_replace( "\n", '\\n', $desc );
+
+	$ok = $cond ? "ok" : "not ok";
+	$directive = $todo === false ? '' : '# TODO aoeu';
+
+	printf( "%s %d %s%s\n", $ok, $Test['run'], $desc, $directive );
+
+	if ( ! $cond ) {
+		report_failure( $desc, $got, $expected, $negate, $todo );
+	}
+
+	return $cond;
+}
+
+function report_failure( $desc, $got, $expected, $negate, $todo ) {
+	# Every public function in this file proclaim which then calls
+    #  this function, so our culprit is the third item in the stack
+	$caller = debug_backtrace();
+	$call = $caller['2'];
+
+	diag(
+		sprintf( " Failed%stest '%s'\n in %s at line %d\n       got: %s\n  expected: %s",
+			$todo ? ' TODO ' : ' ',
+			$desc,
+			$call['file'],
+			$call['line'],
+			$got,
+			$expected
+		)
+	);
+}
+
+function test_ends ()
+{
+	global $Test;
+
+	if ( $Test['planned'] === false ) {
+		printf( "1..%d\n", $Test['run'] );
+	}
+}
+
+/*
+
+=head1 TODO
+
+=over
+
+=item * Fully document this file
+
+=item *
+
+Add TODO support, maybe via C<ok(0, "foo # TODO fix this")>
+C<ok(1, "foo", array( 'todo' => 'fix this'))>.
+
+=back
+
+=head1 SEE ALSO
+
+=over
+
+=item L<TAP> - The TAP protocol
+
+=item L<Test::More> 
+
+=item Pugs's Test.pm
+
+=back
+
+=head1 AUTHOR
+
+Ævar Arnfjörð Bjarmason <avarab@gmail.com>
+
+=head1 LICENSING
+
+This program is free software; you can redistribute it and/or modify it
+under the same terms as Perl itself.
+
+=cut
+
+*/
+
+?>
Index: /MediaWiki/branches/1.11/UPGRADE
===================================================================
--- /MediaWiki/branches/1.11/UPGRADE	(revision 1280)
+++ /MediaWiki/branches/1.11/UPGRADE	(revision 1280)
@@ -0,0 +1,335 @@
+This file provides an overview of the MediaWiki upgrade process. For help with
+specific problems, check
+
+* the documentation at http://www.mediawiki.org
+* the mediawiki-l mailing list archive at
+  http://lists.wikimedia.org/pipermail/mediawiki-l/
+* the bug tracker at http://bugzilla.wikimedia.org
+
+for information and workarounds to common issues.
+
+== Overview ==
+
+Comprehensive documentation on upgrading to the latest version of the software
+is available at http://www.mediawiki.org/wiki/Manual:Upgrading_MediaWiki.
+
+=== Consult the release notes ===
+
+Before doing anything, stop and consult the release notes supplied with the new
+version of the software. This detail bug fixes, new features and functionality,
+and any particular points that may need to be noted during the upgrade
+procedure.
+
+=== Backup first ===
+
+It is imperative that, prior to attempting an upgrade of the database schema,
+you take a complete backup of your wiki database and files and verify it. While
+the upgrade scripts are somewhat robust, there is no guarantee that things will
+not fail, leaving the database in an inconsistent state.
+
+Refer to the MySQL or Postgres documentation for information on backing up a 
+database. For information on making copies of files, consult the documentation 
+for your operating system.
+
+=== Perform the file upgrade ===
+
+Having downloaded the desired new version of the software, either as a package
+from SourceForge, or via an export from Subversion, decompress the files as
+needed, and replace the existing MediaWiki files with the new.
+
+You should preserve:
+
+* The LocalSettings.php file
+* The AdminSettings.php file, where it exists
+* The extensions directory
+* The images directory
+
+If using an alternative uploads directory, preserve this; and if using custom
+skins, preserve these too. The core code is now updated.
+
+=== Perform the database upgrade ===
+
+You will need an AdminSettings.php file set up in the correct format; see
+AdminSettings.sample in the wiki root for more information and examples.
+
+From the command line, browse to the maintenance directory and run the 
+update.php script to check and update the schema. This will insert missing
+tables, update existing tables, and move data around as needed. In most cases,
+this is successful and nothing further needs to be done.
+
+=== Check configuration settings ===
+
+The names of configuration variables, and their default values and purposes,
+can change between release branches, e.g. $wgDisableUploads in 1.4 is replaced
+with $wgEnableUploads in later versions. When upgrading, consult the release
+notes to check for configuration changes which would alter the expected
+behaviour of MediaWiki.
+
+=== Test ===
+
+It makes sense to test your wiki immediately following any kind of maintenance
+procedure, and especially after upgrading; check that page views and edits work
+normally and that special pages continue to function, etc. and correct errors
+and quirks which reveal themselves.
+
+== Upgrading from 1.8 wikis ==
+
+MediaWiki 1.9 and later no longer keep default localized message text
+in the database; 'MediaWiki:'-namespace pages that do not exist in the
+database are simply transparently filled-in on demand.
+
+The upgrade process will delete any 'MediaWiki:' pages which are left
+in the default state (last edited by 'MediaWiki default'). This may
+take a few moments, similar to the old initial setup.
+
+Note that the large number of deletions may cause older edits to expire
+from the list on Special:Recentchanges, although the deletions themselves
+will be hidden by default. (Click "show bot edits" to list them.)
+
+
+See RELEASE-NOTES for more details about new and changed options.
+
+
+== Upgrading from 1.7 wikis ==
+
+$wgDefaultUserOptions now contains all the defaults, not only overrides.
+If you're setting this as a complete array(), you may need to change it
+to set only specific items as recommended in DefaultSettings.php.
+
+== Upgrading from 1.6 wikis ==
+
+$wgLocalTZoffset was in hours, it is now using minutes.
+Link autonumbering got fixed (#5918) for protocols other than http.
+ - 'irc://irc.server.tld/' render as a link with a chat icon
+ - '[irc://irc.server.tld]' render as an autonumbered link: [1]
+
+== Upgrading from pre-1.5 wikis ==
+
+Major changes have been made to the schema from 1.4.x. The updater
+has not been fully tested for all conditions, and might well break.
+
+On a large site, the schema update might take a long time. It might
+explode, or leave your database half-done or otherwise badly hurting.
+
+Among other changes, note that Latin-1 encoding (ISO-8859-1) is
+no longer supported. Latin-1 wikis will need to be upgraded to
+UTF-8; an experimental command-line upgrade helper script,
+'upgrade1_5.php', can do this -- run it prior to 'update.php' or
+the web upgrader.
+
+If you absolutely cannot make the UTF-8 upgrade work, you can try
+doing it by hand: dump your old database, convert the dump file
+using iconv as described here: 
+http://portal.suse.com/sdb/en/2004/05/jbartsh_utf-8.html
+and then reimport it. You can also convert filenames using convmv,
+but note that the old directory hashes will no longer be valid,
+so you will also have to move them to new destinations.
+
+Message changes:
+* A number of additional UI messages have been changed from HTML to
+  wikitext, and will need to be manually fixed if customized.
+
+=== Configuration changes from 1.4.x: ===
+
+$wgDisableUploads has been replaced with $wgEnableUploads.
+
+$wgWhitelistAccount has been replaced by the 'createaccount' permission
+key in $wgGroupPermissions. To emulate the old effect of setting:
+  $wgWhitelistAccount['user'] = 0;
+set:
+  $wgGroupPermissions['*']['createaccount'] = false;
+
+$wgWhitelistEdit has been replaced by the 'edit' permission key.
+To emulate the old effect of setting:
+  $wgWhitelistEdit = true;
+set:
+  $wgGroupPermissions['*']['edit'] = false;
+
+If $wgWhitelistRead is set, you must also disable the 'read' permission
+for it to take affect on anonymous users:
+  $wgWhitelistRead = array( "Main Page", "Special:Userlogin" );
+  $wgGroupPermissions['*']['read'] = false;
+
+Note that you can disable/enable several other permissions by modifying
+this configuration array in your LocalSettings.php; see DefaultSettings.php
+for the complete default permission set.
+
+If using Memcached, you must enabled it differently now:
+  $wgUseMemCached = true;
+should be replaced with:
+  $wgMainCacheType = CACHE_MEMCACHED;
+
+
+=== Web installer ===
+
+You can use the web-based installer wizard if you first remove the
+LocalSettings.php (and AdminSettings.php, if any) files; be sure to
+give the installer the same information as you did on the original
+install (language/encoding, database name, password, etc). This will
+also generate a fresh LocalSettings.php, which you may need to customize.
+
+You may change some settings during the install, but be very careful!
+Changing the encoding in particular will generally leave you with a
+lot of corrupt pages, particularly if your wiki is not in English.
+
+=== Command-line upgrade ===
+
+Additionally, as of 1.4.0 you can run an in-place upgrade script from
+the command line, keeping your existing LocalSettings.php. This requires
+that you create an AdminSettings.php giving an appropriate database user
+and password with privileges to modify the database structure.
+
+Once the new files are in place, go into the maintenance subdirectory and
+run the script:
+
+  php update.php
+
+See caveats below on upgrading from 1.3.x or earlier.
+
+
+== Backups! ==
+
+To upgrade an existing MediaWiki installation, first BACK UP YOUR WIKI!
+If something goes wrong, you want to be able to start again.
+
+Your image files, configuration, etc can simply be copied or archived as
+you would any other files. (Make sure that the contents of your
+LocalSettings.php are not accidentally made public, as this contains
+a database password.)
+
+To back up the database, use the tools provided by your service provider
+(if applicable) or the standard mysqldump or pg_dump programs.
+
+For general help on mysqldump:
+http://dev.mysql.com/doc/mysql/en/mysqldump.html
+
+WARNING: If using MySQL 4.1.x, mysqldump's charset conversion may in
+some cases damage data in your wiki. If necessary, set the charset
+option to 'latin1' to avoid the conversion.
+
+For general help on pg_dump:
+http://www.postgresql.org/docs/current/static/app-pgdump.html
+
+
+== Caveats ==
+
+=== Postgres ===
+
+Postgres support is new, and much of the upgrade instructions may 
+not apply. The schema was changed significantly from 1.7 to 1.8, 
+so you will need to at least use the update.php or web installer, 
+as described above.
+
+
+=== Upgrading from 1.4.2 or earlier ===
+
+1.4.3 has added new fields to the sitestats table. These fields are
+optional and help to speed Special:Statistics on large sites. If you
+choose not to run the database upgrades, everything will continue to
+work in 1.4.3.
+
+You can apply the update by running maintenance/update.php, or
+manually run the SQL commands from this file:
+  maintenance/archives/patch-ss_total_articles.sql
+
+
+=== Upgrading from 1.4rc1 or earlier betas ===
+
+The logging table has been altered from 1.4beta4 to 1.4beta5
+and again in 1.4.0 final. Copy in the new files and use the web
+installer to upgrade, or the command-line maintenance/update.php.
+
+If you cannot use the automated installers/updaters, you may
+update the table by manually running the SQL commands in these
+files:
+   maintenance/archives/patch-log_params.sql
+   maintenance/archives/patch-logging-title.sql
+
+
+=== Upgrading from 1.3.x ===
+
+This should generally go smoothly.
+
+If you keep your LocalSettings.php, you may need to change the style paths
+to match the newly rearranged skin modules. Change these lines:
+  $wgStylePath        = "$wgScriptPath/stylesheets";
+  $wgStyleDirectory   = "$IP/stylesheets";
+  $wgLogo             = "$wgStylePath/images/wiki.png";
+
+to this:
+  $wgStylePath        = "$wgScriptPath/skins";
+  $wgStyleDirectory   = "$IP/skins";
+  $wgLogo             = "$wgStylePath/common/images/wiki.png";
+
+As well as new messages, the processing of some messages has changed.
+If you have customized them, please compare the new format using
+Special:Allmessages or the relevant LanguageXX.php files:
+  copyrightwarning
+  dberrortext
+  editingcomment  (was named commentedit)
+  editingsection  (was named sectionedit)
+  numauthors
+  numedits
+  numtalkauthors
+  numtalkedits
+  numwatchers
+  protectedarticle
+  searchresulttext
+  showhideminor
+  unprotectedarticle
+
+Note that the 1.3 beta releases included a potential vulnerability if PHP
+is configured with register_globals on and the includes directory is
+served to the web. For general safety, turn register_globals *off* if you
+don't _really_ need it for another package.
+
+If your hosting provider turns it on and you can't turn it off yourself,
+send them a kind note explaining that it can expose their servers and their
+customers to attacks.
+
+
+=== Upgrading from 1.2.x ===
+
+If you've been using the MediaWiki: namespace for custom page templates,
+note that things are a little different. The Template: namespace has been
+added which is more powerful -- templates can include parameters for
+instance.
+
+If you were using custom MediaWiki: entries for text inclusions, they
+will *not* automatically be moved to Template: entries at upgrade time.
+Be sure to go through and check that everything is working properly;
+you can move them manually or you can try using moveCustomMessages.php
+in maintenance/archives to do it automatically, but this might break things.
+
+Also, be sure to pick the correct character encoding -- some languages were
+only available in Latin-1 on 1.2.x and are now available for Unicode as well.
+If you want to upgrade an existing wiki from Latin-1 to Unicode you'll have
+to dump the database to SQL, run it through iconv or another conversion tool,
+and restore it. Sorry.
+
+
+=== Upgrading from 1.1.x or earlier ===
+
+This is less thoroughly tested, but should work.
+
+You need to specify the *admin* database username and password to the
+installer in order for it to successfully upgrade the database structure.
+You may wish to manually change the GRANTs later.
+
+If you have a very old database (earlier than organized MediaWiki releases
+in late August 2003) you may need to manually run some of the update SQL
+scripts in maintenance/archives before the installer is able to pick up
+with remaining updates.
+
+
+=== Upgrading from UseModWiki or old "phase 2" Wikipedia code ===
+
+There is a semi-maintained UseModWiki to MediaWiki conversion script at
+maintenance/importUseModWiki.php; it may require tweaking and customization
+to work for you.
+
+Install a new MediaWiki first, then use the conversion script which will
+output SQL statements; direct these to a file and then run that into your
+database.
+
+You will have to rebuild the links tables etc after importing.
Index: /MediaWiki/branches/1.11/api.php
===================================================================
--- /MediaWiki/branches/1.11/api.php	(revision 1280)
+++ /MediaWiki/branches/1.11/api.php	(revision 1280)
@@ -0,0 +1,42 @@
+<?php
+
+
+/**
+* API for MediaWiki 1.8+
+*
+* Copyright (C) 2006 Yuri Astrakhan <FirstnameLastname@gmail.com>
+*
+* This program is free software; you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation; either version 2 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License along
+* with this program; if not, write to the Free Software Foundation, Inc.,
+* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+* http://www.gnu.org/copyleft/gpl.html
+*/
+
+// Initialise common code
+require (dirname(__FILE__) . '/includes/WebStart.php');
+
+wfProfileIn('api.php');
+
+// Verify that the API has not been disabled
+if (!$wgEnableAPI) {
+	echo 'MediaWiki API is not enabled for this site. Add the following line to your LocalSettings.php';
+	echo '<pre><b>$wgEnableAPI=true;</b></pre>';
+	die(-1);
+}
+
+$processor = new ApiMain($wgRequest, $wgEnableWriteAPI);
+$processor->execute();
+
+wfProfileOut('api.php');
+wfLogProfilingData();
+?>
Index: /MediaWiki/branches/1.11/bin/svnstat
===================================================================
--- /MediaWiki/branches/1.11/bin/svnstat	(revision 1280)
+++ /MediaWiki/branches/1.11/bin/svnstat	(revision 1280)
@@ -0,0 +1,2 @@
+#!/bin/sh
+svn stat -v $1 | sed -n 's/^[ A-Z?\*|!]\{1,15\}/r/;s/ \{1,15\}/\/r/;s/ .*//p'
Index: /MediaWiki/branches/1.11/bin/ulimit-tvf.sh
===================================================================
--- /MediaWiki/branches/1.11/bin/ulimit-tvf.sh	(revision 1280)
+++ /MediaWiki/branches/1.11/bin/ulimit-tvf.sh	(revision 1280)
@@ -0,0 +1,6 @@
+#!/bin/bash
+
+ulimit -t $1 -v $2 -f $3
+shift 3
+"$@"
+
Index: /MediaWiki/branches/1.11/bin/ulimit.sh
===================================================================
--- /MediaWiki/branches/1.11/bin/ulimit.sh	(revision 1280)
+++ /MediaWiki/branches/1.11/bin/ulimit.sh	(revision 1280)
@@ -0,0 +1,7 @@
+#!/bin/bash
+
+ulimit -t $1
+ulimit -v $2
+shift 2
+"$@"
+
Index: /MediaWiki/branches/1.11/bin/ulimit4.sh
===================================================================
--- /MediaWiki/branches/1.11/bin/ulimit4.sh	(revision 1280)
+++ /MediaWiki/branches/1.11/bin/ulimit4.sh	(revision 1280)
@@ -0,0 +1,4 @@
+#!/bin/bash
+
+ulimit -t $1 -v $2 -f $3
+eval "$4"
Index: /MediaWiki/branches/1.11/config/index.php
===================================================================
--- /MediaWiki/branches/1.11/config/index.php	(revision 1280)
+++ /MediaWiki/branches/1.11/config/index.php	(revision 1280)
@@ -0,0 +1,1780 @@
+<?php
+
+# MediaWiki web-based config/installation
+# Copyright (C) 2004 Brion Vibber <brion@pobox.com>, 2006 Rob Church <robchur@gmail.com>
+# http://www.mediawiki.org/
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+# http://www.gnu.org/copyleft/gpl.html
+
+error_reporting( E_ALL );
+header( "Content-type: text/html; charset=utf-8" );
+@ini_set( "display_errors", true );
+
+# In case of errors, let output be clean.
+$wgRequestTime = microtime( true );
+
+# Attempt to set up the include path, to fix problems with relative includes
+$IP = dirname( dirname( __FILE__ ) );
+define( 'MW_INSTALL_PATH', $IP );
+$sep = PATH_SEPARATOR;
+if( !ini_set( "include_path", ".$sep$IP$sep$IP/includes$sep$IP/languages" ) ) {
+	set_include_path( ".$sep$IP$sep$IP/includes$sep$IP/languages" );
+}
+
+# Define an entry point and include some files
+define( "MEDIAWIKI", true );
+define( "MEDIAWIKI_INSTALL", true );
+
+// Run version checks before including other files
+// so people don't see a scary parse error.
+require_once( "install-utils.inc" );
+install_version_checks();
+
+require_once( "includes/Defines.php" );
+require_once( "includes/DefaultSettings.php" );
+require_once( "includes/MagicWord.php" );
+require_once( "includes/Namespace.php" );
+require_once( "includes/ProfilerStub.php" );
+
+## Databases we support:
+
+$ourdb = array();
+$ourdb['mysql']['fullname']      = 'MySQL';
+$ourdb['mysql']['havedriver']    = 0;
+$ourdb['mysql']['compile']       = 'mysql';
+$ourdb['mysql']['bgcolor']       = '#ffe5a7';
+$ourdb['mysql']['rootuser']      = 'root';
+
+$ourdb['postgres']['fullname']   = 'PostgreSQL';
+$ourdb['postgres']['havedriver'] = 0;
+$ourdb['postgres']['compile']    = 'pgsql';
+$ourdb['postgres']['bgcolor']    = '#aaccff';
+$ourdb['postgres']['rootuser']   = 'postgres';
+
+?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+	<meta http-equiv="Content-type" content="text/html; charset=utf-8">
+	<title>MediaWiki <?php echo( $wgVersion ); ?> Installation</title>
+	<style type="text/css">
+
+		@import "../skins/monobook/main.css";
+
+		.env-check {
+			font-size: 90%;
+			margin: 1em 0 1em 2.5em;
+		}
+
+		.config-section {
+			margin-top: 2em;
+		}
+
+		.config-section label.column {
+			clear: left;
+			font-weight: bold;
+			width: 13em;
+			float: left;
+			text-align: right;
+			padding-right: 1em;
+			padding-top: .2em;
+		}
+
+		.config-input {
+			clear: left;
+			zoom: 100%; /* IE hack */
+		}
+
+		.config-section .config-desc {
+			clear: left;
+			margin: 0 0 2em 18em;
+			padding-top: 1em;
+			font-size: 85%;
+		}
+
+		.iput-text, .iput-password {
+			width: 14em;
+			margin-right: 1em;
+		}
+
+		.error {
+			color: red;
+			background-color: #fff;
+			font-weight: bold;
+			left: 1em;
+			font-size: 100%;
+		}
+
+		.error-top {
+			color: red;
+			background-color: #FFF0F0;
+			border: 2px solid red;
+			font-size: 130%;
+			font-weight: bold;
+			padding: 1em 1.5em;
+			margin: 2em 0 1em;
+		}
+
+		ul.plain {
+			list-style-type: none;
+			list-style-image: none;
+			float: left;
+			margin: 0;
+			padding: 0;
+		}
+
+		.btn-install {
+			font-weight: bold;
+			font-size: 110%;
+			padding: .2em .3em;
+		}
+
+		.license {
+			font-size: 85%;
+			padding-top: 3em;
+		}
+
+	</style>
+	<script type="text/javascript">
+	<!--
+	function hideall() {
+		<?php foreach (array_keys($ourdb) as $db) {
+		echo "\n		document.getElementById('$db').style.display='none';";
+		}
+		?>
+
+	}
+	function toggleDBarea(id,defaultroot) {
+		hideall();
+		var dbarea = document.getElementById(id).style;
+		dbarea.display = (dbarea.display == 'none') ? 'block' : 'none';
+		var db = document.getElementById('RootUser');
+		if (defaultroot) {
+<?php foreach (array_keys($ourdb) as $db) {
+			echo "			if (id == '$db') { db.value = '".$ourdb[$db]['rootuser']."';}\n";
+}?>
+		}
+	}
+	// -->
+	</script>
+</head>
+
+<body>
+<div id="globalWrapper">
+<div id="column-content">
+<div id="content">
+<div id="bodyContent">
+
+<h1>MediaWiki <?php print $wgVersion ?> Installation</h1>
+
+<?php
+
+/* Check for existing configurations and bug out! */
+
+if( file_exists( "../LocalSettings.php" ) ) {
+	dieout( "<p><strong>Setup has completed, <a href='../index.php'>your wiki</a> is configured.</strong></p>
+
+	<p>Please delete the /config directory for extra security.</p></div></div></div></div>" );
+}
+
+if( file_exists( "./LocalSettings.php" ) ) {
+	writeSuccessMessage();
+
+	dieout( '' );
+}
+
+if( !is_writable( "." ) ) {
+	dieout( "<h2>Can't write config file, aborting</h2>
+
+	<p>In order to configure the wiki you have to make the <tt>config</tt> subdirectory
+	writable by the web server. Once configuration is done you'll move the created
+	<tt>LocalSettings.php</tt> to the parent directory, and for added safety you can
+	then remove the <tt>config</tt> subdirectory entirely.</p>
+
+	<p>To make the directory writable on a Unix/Linux system:</p>
+
+	<pre>
+	cd <i>/path/to/wiki</i>
+	chmod a+w config
+	</pre>
+	
+	<p>Afterwards retry to start the <a href=\"\">setup</a>.</p>" );
+}
+
+
+require_once( "install-utils.inc" );
+require_once( "maintenance/updaters.inc" );
+
+class ConfigData {
+	function getEncoded( $data ) {
+		# removing latin1 support, no need...
+		return $data;
+	}
+	function getSitename() { return $this->getEncoded( $this->Sitename ); }
+	function getSysopName() { return $this->getEncoded( $this->SysopName ); }
+	function getSysopPass() { return $this->getEncoded( $this->SysopPass ); }
+
+	function setSchema( $schema ) {
+		$this->DBschema = $schema;
+		switch ( $this->DBschema ) {
+			case 'mysql5':
+				$this->DBTableOptions = 'ENGINE=InnoDB, DEFAULT CHARSET=utf8';
+				$this->DBmysql5 = 'true';
+				break;
+			case 'mysql5-binary':
+				$this->DBTableOptions = 'ENGINE=InnoDB, DEFAULT CHARSET=binary';
+				$this->DBmysql5 = 'true';
+				break;
+			default:
+				$this->DBTableOptions = 'TYPE=InnoDB';
+				$this->DBmysql5 = 'false';
+		}
+		# Set the global for use during install
+		global $wgDBTableOptions;
+		$wgDBTableOptions = $this->DBTableOptions;
+	}
+}
+
+?>
+
+<ul>
+	<li>
+		<b>Don't forget security updates!</b> Keep an eye on the
+		<a href="http://mail.wikimedia.org/mailman/listinfo/mediawiki-announce">low-traffic
+		release announcements mailing list</a>.
+	</li>
+</ul>
+
+
+<h2>Checking environment...</h2>
+<p><em>Please include all of the lines below when reporting installation problems.</em></p>
+<ul class="env-check">
+<?php
+$endl = "
+";
+define( 'MW_NO_OUTPUT_BUFFER', 1 );
+$conf = new ConfigData;
+
+install_version_checks();
+
+print "<li>PHP " . phpversion() . " installed</li>\n";
+
+## Temporarily turn off all errors as we try to discover installed databases
+$olderrnum = error_reporting(0);
+
+$phpdatabases = array();
+foreach (array_keys($ourdb) as $db) {
+	$compname = $ourdb[$db]['compile'];
+	if (extension_loaded($compname) or dl($compname . '.' . PHP_SHLIB_SUFFIX)) {
+		array_push($phpdatabases, $db);
+		$ourdb[$db]['havedriver'] = 1;
+	}
+}
+
+error_reporting($olderrornum);
+
+if (!$phpdatabases) {
+	print "Could not find a suitable database driver!<ul>";
+	foreach (array_keys($ourdb) AS $db) {
+		$comp = $ourdb[$db]['compile'];
+		$full = $ourdb[$db]['fullname'];
+		print "<li>For <b>$full</b>, compile PHP using <b>--with-$comp</b>, "
+			."or install the $comp.so module</li>\n";
+	}
+	dieout( "</ul></ul>" );
+}
+
+print "<li>Found database drivers for:";
+foreach (array_keys($ourdb) AS $db) {
+	if ($ourdb[$db]['havedriver']) {
+		$DefaultDBtype = $db;
+		print "  ".$ourdb[$db]['fullname'];
+	}
+}
+print "</li>\n";
+if (count($phpdatabases) != 1)
+	$DefaultDBtype = '';
+
+if( ini_get( "register_globals" ) ) {
+	?>
+	<li>
+		<div style="font-size:110%">
+		<strong class="error">Warning:</strong>
+		<strong>PHP's <tt><a href="http://php.net/register_globals">register_globals</a></tt> option is enabled. Disable it if you can.</strong>
+		</div>
+		MediaWiki will work, but your server is more exposed to PHP-based security vulnerabilities.
+	</li>
+	<?php
+}
+
+$fatal = false;
+
+if( ini_get( "magic_quotes_runtime" ) ) {
+	$fatal = true;
+	?><li class='error'><strong>Fatal: <a href='http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime'>magic_quotes_runtime</a> is active!</strong>
+	This option corrupts data input unpredictably; you cannot install or use
+	MediaWiki unless this option is disabled.
+	<?php
+}
+
+if( ini_get( "magic_quotes_sybase" ) ) {
+	$fatal = true;
+	?><li class='error'><strong>Fatal: <a href='http://www.php.net/manual/en/ref.sybase.php#ini.magic-quotes-sybase'>magic_quotes_sybase</a> is active!</strong>
+	This option corrupts data input unpredictably; you cannot install or use
+	MediaWiki unless this option is disabled.
+	<?php
+}
+
+if( ini_get( "mbstring.func_overload" ) ) {
+	$fatal = true;
+	?><li class='error'><strong>Fatal: <a href='http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload'>mbstring.func_overload</a> is active!</strong>
+	This option causes errors and may corrupt data unpredictably;
+	you cannot install or use MediaWiki unless this option is disabled.
+	<?php
+}
+
+if( ini_get( "zend.ze1_compatibility_mode" ) ) {
+	$fatal = true;
+	?><li class="error"><strong>Fatal: <a href="http://www.php.net/manual/en/ini.core.php">zend.ze1_compatibility_mode</a> is active!</strong>
+	This option causes horrible bugs with MediaWiki; you cannot install or use
+	MediaWiki unless this option is disabled.
+	<?php
+}
+
+
+if( $fatal ) {
+	dieout( "</ul><p>Cannot install MediaWiki.</p>" );
+}
+
+if( ini_get( "safe_mode" ) ) {
+	$conf->safeMode = true;
+	?>
+	<li><b class='error'>Warning:</b> <strong>PHP's
+	<a href='http://www.php.net/features.safe-mode'>safe mode</a> is active.</strong>
+	You may have problems caused by this, particularly if using image uploads.
+	</li>
+	<?php
+} else {
+	$conf->safeMode = false;
+}
+
+$sapi = php_sapi_name();
+print "<li>PHP server API is $sapi; ";
+if( $wgUsePathInfo ) {
+	print "ok, using pretty URLs (<tt>index.php/Page_Title</tt>)";
+} else {
+	print "using ugly URLs (<tt>index.php?title=Page_Title</tt>)";
+}
+print "</li>\n";
+
+$conf->xml = function_exists( "utf8_encode" );
+if( $conf->xml ) {
+	print "<li>Have XML / Latin1-UTF-8 conversion support.</li>\n";
+} else {
+	dieout( "PHP's XML module is missing; the wiki requires functions in
+		this module and won't work in this configuration.
+		If you're running Mandrake, install the php-xml package." );
+}
+
+# Check for session support
+if( !function_exists( 'session_name' ) )
+	dieout( "PHP's session module is missing. MediaWiki requires session support in order to function." );
+
+# session.save_path doesn't *have* to be set, but if it is, and it's
+# not valid/writable/etc. then it can cause problems
+$sessionSavePath = mw_get_session_save_path();
+$ssp = htmlspecialchars( $sessionSavePath );
+# Warn the user if it's not set, but let them proceed
+if( !$sessionSavePath ) {
+	print "<li><strong>Warning:</strong> A value for <tt>session.save_path</tt>
+	has not been set in PHP.ini. If the default value causes problems with
+	saving session data, set it to a valid path which is read/write/execute
+	for the user your web server is running under.</li>";
+} elseif ( is_dir( $sessionSavePath ) && is_writable( $sessionSavePath ) ) {
+	# All good? Let the user know
+	print "<li>Session save path (<tt>{$ssp}</tt>) appears to be valid.</li>";
+} else {
+	# Something not right? Warn the user, but let them proceed
+	print "<li><strong>Warning:</strong> Your <tt>session.save_path</tt> value (<tt>{$ssp}</tt>)
+		appears to be invalid or is not writable. PHP needs to be able to save data to
+		this location for correct session operation.</li>";
+}
+
+# Check for PCRE support
+if( !function_exists( 'preg_match' ) )
+	dieout( "The PCRE support module appears to be missing. MediaWiki requires the
+	Perl-compatible regular expression functions." );
+
+$memlimit = ini_get( "memory_limit" );
+$conf->raiseMemory = false;
+if( empty( $memlimit ) || $memlimit == -1 ) {
+	print "<li>PHP is configured with no <tt>memory_limit</tt>.</li>\n";
+} else {
+	print "<li>PHP's <tt>memory_limit</tt> is " . htmlspecialchars( $memlimit ) . ". ";
+	$n = intval( $memlimit );
+	if( preg_match( '/^([0-9]+)[Mm]$/', trim( $memlimit ), $m ) ) {
+		$n = intval( $m[1] * (1024*1024) );
+	}
+	if( $n < 20*1024*1024 ) {
+		print "Attempting to raise limit to 20M... ";
+		if( false === ini_set( "memory_limit", "20M" ) ) {
+			print "failed.<br /><b>" . htmlspecialchars( $memlimit ) . " seems too low, installation may fail!</b>";
+		} else {
+			$conf->raiseMemory = true;
+			print "ok.";
+		}
+	}
+	print "</li>\n";
+}
+
+$conf->turck = function_exists( 'mmcache_get' );
+if ( $conf->turck ) {
+	print "<li><a href=\"http://turck-mmcache.sourceforge.net/\">Turck MMCache</a> installed</li>\n";
+}
+
+$conf->apc = function_exists('apc_fetch');
+if ($conf->apc ) {
+	print "<li><a href=\"http://www.php.net/apc\">APC</a> installed</li>";
+}
+
+$conf->eaccel = function_exists( 'eaccelerator_get' );
+if ( $conf->eaccel ) {
+	$conf->turck = 'eaccelerator';
+	print "<li><a href=\"http://eaccelerator.sourceforge.net/\">eAccelerator</a> installed</li>\n";
+}
+
+if( !$conf->turck && !$conf->eaccel && !$conf->apc ) {
+	echo( '<li>Couldn\'t find <a href="http://turck-mmcache.sourceforge.net">Turck MMCache</a>,
+		<a href="http://eaccelerator.sourceforge.net">eAccelerator</a>, or
+		<a href="http://www.php.net/apc">APC</a>. Object caching functions cannot be used.</li>' );
+}
+
+$conf->diff3 = false;
+$diff3locations = array_merge(
+	array(
+		"/usr/bin",
+		"/usr/local/bin",
+		"/opt/csw/bin",
+		"/usr/gnu/bin",
+		"/usr/sfw/bin" ),
+	explode( $sep, getenv( "PATH" ) ) );
+$diff3names = array( "gdiff3", "diff3", "diff3.exe" );
+
+$diff3versioninfo = array( '$1 --version 2>&1', 'diff3 (GNU diffutils)' );
+foreach ($diff3locations as $loc) {
+	$exe = locate_executable($loc, $diff3names, $diff3versioninfo);
+	if ($exe !== false) {
+		$conf->diff3 = $exe;
+		break;
+	}
+}
+
+if ($conf->diff3)
+	print "<li>Found GNU diff3: <tt>$conf->diff3</tt>.</li>";
+else
+	print "<li>GNU diff3 not found.</li>";
+
+$conf->ImageMagick = false;
+$imcheck = array( "/usr/bin", "/opt/csw/bin", "/usr/local/bin", "/sw/bin", "/opt/local/bin" );
+foreach( $imcheck as $dir ) {
+	$im = "$dir/convert";
+	if( file_exists( $im ) ) {
+		print "<li>Found ImageMagick: <tt>$im</tt>; image thumbnailing will be enabled if you enable uploads.</li>\n";
+		$conf->ImageMagick = $im;
+		break;
+	}
+}
+
+$conf->HaveGD = function_exists( "imagejpeg" );
+if( $conf->HaveGD ) {
+	print "<li>Found GD graphics library built-in";
+	if( !$conf->ImageMagick ) {
+		print ", image thumbnailing will be enabled if you enable uploads";
+	}
+	print ".</li>\n";
+} else {
+	if( !$conf->ImageMagick ) {
+		print "<li>Couldn't find GD library or ImageMagick; image thumbnailing disabled.</li>\n";
+	}
+}
+
+$conf->IP = dirname( dirname( __FILE__ ) );
+print "<li>Installation directory: <tt>" . htmlspecialchars( $conf->IP ) . "</tt></li>\n";
+
+
+// PHP_SELF isn't available sometimes, such as when PHP is CGI but
+// cgi.fix_pathinfo is disabled. In that case, fall back to SCRIPT_NAME
+// to get the path to the current script... hopefully it's reliable. SIGH
+$path = ($_SERVER["PHP_SELF"] === '')
+	? $_SERVER["SCRIPT_NAME"]
+	: $_SERVER["PHP_SELF"];
+$conf->ScriptPath = preg_replace( '{^(.*)/config.*$}', '$1', $path );
+print "<li>Script URI path: <tt>" . htmlspecialchars( $conf->ScriptPath ) . "</tt></li>\n";
+
+print "<li style='font-weight:bold;color:green;font-size:110%'>Environment checked. You can install MediaWiki.</li>\n";
+	$conf->posted = ($_SERVER["REQUEST_METHOD"] == "POST");
+
+	$conf->Sitename = ucfirst( importPost( "Sitename", "" ) );
+	$defaultEmail = empty( $_SERVER["SERVER_ADMIN"] )
+		? 'root@localhost'
+		: $_SERVER["SERVER_ADMIN"];
+	$conf->EmergencyContact = importPost( "EmergencyContact", $defaultEmail );
+	$conf->DBtype = importPost( "DBtype", $DefaultDBtype );
+?>
+
+<?php
+	$conf->DBserver = importPost( "DBserver", "localhost" );
+	$conf->DBname = importPost( "DBname", "wikidb" );
+	$conf->DBuser = importPost( "DBuser", "wikiuser" );
+	$conf->DBpassword = importPost( "DBpassword" );
+	$conf->DBpassword2 = importPost( "DBpassword2" );
+	$conf->SysopName = importPost( "SysopName", "WikiSysop" );
+	$conf->SysopPass = importPost( "SysopPass" );
+	$conf->SysopPass2 = importPost( "SysopPass2" );
+	$conf->RootUser = importPost( "RootUser", "root" );
+	$conf->RootPW = importPost( "RootPW", "" );
+	$useRoot = importCheck( 'useroot', false );
+
+	## MySQL specific:
+	$conf->DBprefix     = importPost( "DBprefix" );
+	$conf->setSchema( importPost( "DBschema", "mysql4" ) );
+	$conf->LanguageCode = importPost( "LanguageCode", "en" );
+
+	## Postgres specific:
+	$conf->DBport      = importPost( "DBport",      "5432" );
+	$conf->DBmwschema  = importPost( "DBmwschema",  "mediawiki" );
+	$conf->DBts2schema = importPost( "DBts2schema", "public" );
+
+/* Check for validity */
+$errs = array();
+
+if( $conf->Sitename == "" || $conf->Sitename == "MediaWiki" || $conf->Sitename == "Mediawiki" ) {
+	$errs["Sitename"] = "Must not be blank or \"MediaWiki\"";
+}
+if( $conf->DBuser == "" ) {
+	$errs["DBuser"] = "Must not be blank";
+}
+if( ($conf->DBtype == 'mysql') && (strlen($conf->DBuser) > 16) ) {
+	$errs["DBuser"] = "Username too long";
+}
+if( $conf->DBpassword == "" && $conf->DBtype != "postgres" ) {
+	$errs["DBpassword"] = "Must not be blank";
+}
+if( $conf->DBpassword != $conf->DBpassword2 ) {
+	$errs["DBpassword2"] = "Passwords don't match!";
+}
+if( !preg_match( '/^[A-Za-z_0-9]*$/', $conf->DBprefix ) ) {
+	$errs["DBprefix"] = "Invalid table prefix";
+}
+
+if( $conf->SysopPass == "" ) {
+	$errs["SysopPass"] = "Must not be blank";
+}
+if( $conf->SysopPass != $conf->SysopPass2 ) {
+	$errs["SysopPass2"] = "Passwords don't match!";
+}
+
+$conf->License = importRequest( "License", "none" );
+if( $conf->License == "gfdl" ) {
+	$conf->RightsUrl = "http://www.gnu.org/copyleft/fdl.html";
+	$conf->RightsText = "GNU Free Documentation License 1.2";
+	$conf->RightsCode = "gfdl";
+	$conf->RightsIcon = '${wgScriptPath}/skins/common/images/gnu-fdl.png';
+} elseif( $conf->License == "none" ) {
+	$conf->RightsUrl = $conf->RightsText = $conf->RightsCode = $conf->RightsIcon = "";
+} else {
+	$conf->RightsUrl = importRequest( "RightsUrl", "" );
+	$conf->RightsText = importRequest( "RightsText", "" );
+	$conf->RightsCode = importRequest( "RightsCode", "" );
+	$conf->RightsIcon = importRequest( "RightsIcon", "" );
+}
+
+$conf->Shm = importRequest( "Shm", "none" );
+$conf->MCServers = importRequest( "MCServers" );
+
+/* Test memcached servers */
+
+if ( $conf->Shm == 'memcached' && $conf->MCServers ) {
+	$conf->MCServerArray = array_map( 'trim', explode( ',', $conf->MCServers ) );
+	foreach ( $conf->MCServerArray as $server ) {
+		$error = testMemcachedServer( $server );
+		if ( $error ) {
+			$errs["MCServers"] = $error;
+			break;
+		}
+	}
+} else if ( $conf->Shm == 'memcached' ) {
+	$errs["MCServers"] = "Please specify at least one server if you wish to use memcached";
+}
+
+/* default values for installation */
+$conf->Email     = importRequest("Email", "email_enabled");
+$conf->Emailuser = importRequest("Emailuser", "emailuser_enabled");
+$conf->Enotif    = importRequest("Enotif", "enotif_allpages");
+$conf->Eauthent  = importRequest("Eauthent", "eauthent_enabled");
+
+if( $conf->posted && ( 0 == count( $errs ) ) ) {
+	do { /* So we can 'continue' to end prematurely */
+		$conf->Root = ($conf->RootPW != "");
+
+		/* Load up the settings and get installin' */
+		$local = writeLocalSettings( $conf );
+		echo "<li style=\"list-style: none\">\n";
+		echo "<p><b>Generating configuration file...</b></p>\n";
+		echo "</li>\n";		
+
+		$wgCommandLineMode = false;
+		chdir( ".." );
+		$ok = eval( $local );
+		if( $ok === false ) {
+			dieout( "Errors in generated configuration; " .
+				"most likely due to a bug in the installer... " .
+				"Config file was: " .
+				"<pre>" .
+				htmlspecialchars( $local ) .
+				"</pre>" .
+				"</ul>" );
+		}
+		$conf->DBtypename = '';
+		foreach (array_keys($ourdb) as $db) {
+			if ($conf->DBtype === $db)
+				$conf->DBtypename = $ourdb[$db]['fullname'];
+		}
+		if ( ! strlen($conf->DBtype)) {
+			$errs["DBpicktype"] = "Please choose a database type";
+			continue;
+		}
+
+		if (! $conf->DBtypename) {
+			$errs["DBtype"] = "Unknown database type '$conf->DBtype'";
+			continue;
+		}
+		print "<li>Database type: {$conf->DBtypename}</li>\n";
+		$dbclass = 'Database'.ucfirst($conf->DBtype);
+		$wgDBtype = $conf->DBtype;
+		$wgDBadminuser = "root";
+		$wgDBadminpassword = $conf->RootPW;
+
+		## Mysql specific:
+		$wgDBprefix = $conf->DBprefix;
+
+		## Postgres specific:
+		$wgDBport      = $conf->DBport;
+		$wgDBmwschema  = $conf->DBmwschema;
+		$wgDBts2schema = $conf->DBts2schema;
+
+		$wgCommandLineMode = true;
+		$wgUseDatabaseMessages = false; /* FIXME: For database failure */
+		require_once( "includes/Setup.php" );
+		chdir( "config" );
+
+		$wgTitle = Title::newFromText( "Installation script" );
+		error_reporting( E_ALL );
+		print "<li>Loading class: $dbclass";
+		$dbc = new $dbclass;
+
+		if( $conf->DBtype == 'mysql' ) {
+			$mysqlOldClient = version_compare( mysql_get_client_info(), "4.1.0", "lt" );
+			if( $mysqlOldClient ) {
+				print "<li><b>PHP is linked with old MySQL client libraries. If you are
+					using a MySQL 4.1 server and have problems connecting to the database,
+					see <a href='http://dev.mysql.com/doc/mysql/en/old-client.html'
+			 		>http://dev.mysql.com/doc/mysql/en/old-client.html</a> for help.</b></li>\n";
+			}
+			$ok = true; # Let's be optimistic
+
+			# Decide if we're going to use the superuser or the regular database user
+			$conf->Root = $useRoot;
+			if( $conf->Root ) {
+				$db_user = $conf->RootUser;
+				$db_pass = $conf->RootPW;
+			} else {
+				$db_user = $wgDBuser;
+				$db_pass = $wgDBpassword;
+			}
+
+			# Attempt to connect
+			echo( "<li>Attempting to connect to database server as $db_user..." );
+			$wgDatabase = Database::newFromParams( $wgDBserver, $db_user, $db_pass, '', 1 );
+
+			# Check the connection and respond to errors
+			if( $wgDatabase->isOpen() ) {
+				# Seems OK
+				$ok = true;
+				$wgDBadminuser = $db_user;
+				$wgDBadminpassword = $db_pass;
+				echo( "success.</li>\n" );
+				$wgDatabase->ignoreErrors( true );
+				$myver = $wgDatabase->getServerVersion();
+			} else {
+				# There were errors, report them and back out
+				$ok = false;
+				$errno = mysql_errno();
+				$errtx = htmlspecialchars( mysql_error() );
+				switch( $errno ) {
+					case 1045:
+					case 2000:
+						echo( "failed due to authentication errors. Check passwords.</li>" );
+						if( $conf->Root ) {
+							# The superuser details are wrong
+							$errs["RootUser"] = "Check username";
+							$errs["RootPW"] = "and password";
+						} else {
+							# The regular user details are wrong
+							$errs["DBuser"] = "Check username";
+							$errs["DBpassword"] = "and password";
+						}
+						break;
+					case 2002:
+					case 2003:
+					default:
+						# General connection problem
+						echo( "failed with error [$errno] $errtx.</li>\n" );
+						$errs["DBserver"] = "Connection failed";
+						break;
+				} # switch
+			} #conn. att.
+
+			if( !$ok ) { continue; }
+
+		} else /* not mysql */ {
+			error_reporting( E_ALL );
+			$wgSuperUser = '';
+			## Possible connect as a superuser
+			if( $useRoot ) {
+				$wgDBsuperuser = $conf->RootUser;
+				echo( "<li>Attempting to connect to database \"postgres\" as superuser \"$wgDBsuperuser\"..." );
+				$wgDatabase = $dbc->newFromParams($wgDBserver, $wgDBsuperuser, $conf->RootPW, "postgres", 1);
+				if (!$wgDatabase->isOpen()) {
+					print " error: " . $wgDatabase->lastError() . "</li>\n";
+					$errs["DBserver"] = "Could not connect to database as superuser";
+					$errs["RootUser"] = "Check username";
+					$errs["RootPW"] = "and password";
+					continue;
+				}
+			}
+			echo( "<li>Attempting to connect to database \"$wgDBname\" as \"$wgDBuser\"..." );
+			$wgDatabase = $dbc->newFromParams($wgDBserver, $wgDBuser, $wgDBpassword, $wgDBname, 1);
+			if (!$wgDatabase->isOpen()) {
+				print " error: " . $wgDatabase->lastError() . "</li>\n";
+			} else {
+				$myver = $wgDatabase->getServerVersion();
+			}
+		}
+
+		if ( !$wgDatabase->isOpen() ) {
+			$errs["DBserver"] = "Couldn't connect to database";
+			continue;
+		}
+
+		print "<li>Connected to $myver";
+		if ($conf->DBtype == 'mysql') {
+			if( version_compare( $myver, "4.0.14" ) < 0 ) {
+				dieout( " -- mysql 4.0.14 or later required. Aborting." );
+			}
+			$mysqlNewAuth = version_compare( $myver, "4.1.0", "ge" );
+			if( $mysqlNewAuth && $mysqlOldClient ) {
+				print "; <b class='error'>You are using MySQL 4.1 server, but PHP is linked
+					to old client libraries; if you have trouble with authentication, see
+					<a href='http://dev.mysql.com/doc/mysql/en/old-client.html'
+					>http://dev.mysql.com/doc/mysql/en/old-client.html</a> for help.</b>";
+			}
+			if( $wgDBmysql5 ) {
+				if( $mysqlNewAuth ) {
+					print "; enabling MySQL 4.1/5.0 charset mode";
+				} else {
+					print "; <b class='error'>MySQL 4.1/5.0 charset mode enabled,
+						but older version detected; will likely fail.</b>";
+				}
+			}
+			print "</li>\n";
+
+			@$sel = $wgDatabase->selectDB( $wgDBname );
+			if( $sel ) {
+				print "<li>Database <tt>" . htmlspecialchars( $wgDBname ) . "</tt> exists</li>\n";
+			} else {
+				$err = mysql_errno();
+				$databaseSafe = htmlspecialchars( $wgDBname );
+				if( $err == 1102 /* Invalid database name */ ) {
+					print "<ul><li><strong>{$databaseSafe}</strong> is not a valid database name.</li></ul>";
+					continue;
+				} elseif( $err != 1049 /* Database doesn't exist */ ) {
+					print "<ul><li>Error selecting database <strong>{$databaseSafe}</strong>: {$err} ";
+					print htmlspecialchars( mysql_error() ) . "</li></ul>";
+					continue;
+				}
+				print "<li>Attempting to create database...</li>";
+				$res = $wgDatabase->query( "CREATE DATABASE `$wgDBname`" );
+				if( !$res ) {
+					print "<li>Couldn't create database <tt>" .
+						htmlspecialchars( $wgDBname ) .
+						"</tt>; try with root access or check your username/pass.</li>\n";
+					$errs["RootPW"] = "&lt;- Enter";
+					continue;
+				}
+				print "<li>Created database <tt>" . htmlspecialchars( $wgDBname ) . "</tt></li>\n";
+			}
+			$wgDatabase->selectDB( $wgDBname );
+		}
+		else if ($conf->DBtype == 'postgres') {
+			if( version_compare( $myver, "PostgreSQL 8.0" ) < 0 ) {
+				dieout( " <b>Postgres 8.0 or later is required</b>. Aborting.</li></ul>" );
+			}
+		}
+
+		if( $wgDatabase->tableExists( "cur" ) || $wgDatabase->tableExists( "revision" ) ) {
+			print "<li>There are already MediaWiki tables in this database. Checking if updates are needed...</li>\n";
+
+			if ( $conf->DBtype == 'mysql') {
+
+				# Determine existing default character set
+				if ( $wgDatabase->tableExists( "revision" ) ) {
+					$revision = $wgDatabase->escapeLike( $conf->DBprefix . 'revision' );
+					$res = $wgDatabase->query( "SHOW TABLE STATUS LIKE '$revision'" );
+					$row = $wgDatabase->fetchObject( $res );
+					if ( !$row ) {
+						echo "<li>SHOW TABLE STATUS query failed!</li>\n";
+						$existingSchema = false;
+					} elseif ( preg_match( '/^latin1/', $row->Collation ) ) {
+						$existingSchema = 'mysql4';
+					} elseif ( preg_match( '/^utf8/', $row->Collation ) ) {
+						$existingSchema = 'mysql5';
+					} elseif ( preg_match( '/^binary/', $row->Collation ) ) {
+						$existingSchema = 'mysql5-binary';
+					} else {
+						$existingSchema = false;
+						echo "<li><strong>Warning:</strong> Unrecognised existing collation</li>\n";
+					}
+					if ( $existingSchema && $existingSchema != $conf->DBschema ) {
+						print "<li><strong>Warning:</strong> you requested the {$conf->DBschema} schema, " .
+							"but the existing database has the $existingSchema schema. This upgrade script ". 
+							"can't convert it, so it will remain $existingSchema.</li>\n";
+						$conf->setSchema( $existingSchema );
+					}
+				}
+
+				# Create user if required
+				if ( $conf->Root ) {
+					$conn = $dbc->newFromParams( $wgDBserver, $wgDBuser, $wgDBpassword, $wgDBname, 1 );
+					if ( $conn->isOpen() ) {
+						print "<li>DB user account ok</li>\n";
+						$conn->close();
+					} else {
+						print "<li>Granting user permissions...";
+						if( $mysqlOldClient && $mysqlNewAuth ) {
+							print " <b class='error'>If the next step fails, see <a href='http://dev.mysql.com/doc/mysql/en/old-client.html'>http://dev.mysql.com/doc/mysql/en/old-client.html</a> for help.</b>";
+						}
+						print "</li>\n";
+						dbsource( "../maintenance/users.sql", $wgDatabase );
+					}
+				}
+			}
+			print "</ul><pre>\n";
+			chdir( ".." );
+			flush();
+			do_all_updates();
+			chdir( "config" );
+			print "</pre>\n";
+			print "<ul><li>Finished update checks.</li>\n";
+		} else {
+			# FIXME: Check for errors
+			print "<li>Creating tables...";
+			if ($conf->DBtype == 'mysql') {
+				dbsource( "../maintenance/tables.sql", $wgDatabase );
+				dbsource( "../maintenance/interwiki.sql", $wgDatabase );
+			} else if ($conf->DBtype == 'postgres') {
+				$wgDatabase->setup_database();
+			}
+			else {
+				$errs["DBtype"] = "Do not know how to handle database type '$conf->DBtype'";
+				continue;
+			}
+
+			print " done.</li>\n";
+
+			print "<li>Initializing data...</li>\n";
+			$wgDatabase->insert( 'site_stats',
+				array ( 'ss_row_id'        => 1,
+						'ss_total_views'   => 0,
+						'ss_total_edits'   => 0,
+						'ss_good_articles' => 0 ) );
+
+			# Set up the "regular user" account *if we can, and if we need to*
+			if( $conf->Root and $conf->DBtype == 'mysql') {
+				# See if we need to
+				$wgDatabase2 = $dbc->newFromParams( $wgDBserver, $wgDBuser, $wgDBpassword, $wgDBname, 1 );
+				if( $wgDatabase2->isOpen() ) {
+					# Nope, just close the test connection and continue
+					$wgDatabase2->close();
+					echo( "<li>User $wgDBuser exists. Skipping grants.</li>\n" );
+				} else {
+					# Yes, so run the grants
+					echo( "<li>Granting user permissions to $wgDBuser on $wgDBname..." );
+					dbsource( "../maintenance/users.sql", $wgDatabase );
+					echo( "success.</li>\n" );
+				}
+			}
+
+			if( $conf->SysopName ) {
+				$u = User::newFromName( $conf->getSysopName() );
+				if ( !$u ) {
+					print "<li><strong class=\"error\">Warning:</strong> Skipped sysop account creation - invalid username!</li>\n";
+				}
+				else if ( 0 == $u->idForName() ) {
+					$u->addToDatabase();
+					$u->setPassword( $conf->getSysopPass() );
+					$u->saveSettings();
+
+					$u->addGroup( "sysop" );
+					$u->addGroup( "bureaucrat" );
+
+					print "<li>Created sysop account <tt>" .
+						htmlspecialchars( $conf->SysopName ) . "</tt>.</li>\n";
+				} else {
+					print "<li>Could not create user - already exists!</li>\n";
+				}
+			} else {
+				print "<li>Skipped sysop account creation, no name given.</li>\n";
+			}
+
+			$titleobj = Title::newFromText( wfMsgNoDB( "mainpage" ) );
+			$article = new Article( $titleobj );
+			$newid = $article->insertOn( $wgDatabase );
+			$revision = new Revision( array(
+				'page'      => $newid,
+				'text'      => wfMsg( 'mainpagetext' ) . "\n\n" . wfMsgNoTrans( 'mainpagedocfooter' ),
+				'comment'   => '',
+				'user'      => 0,
+				'user_text' => 'MediaWiki default',
+				) );
+			$revid = $revision->insertOn( $wgDatabase );
+			$article->updateRevisionOn( $wgDatabase, $revision );
+		}
+
+		/* Write out the config file now that all is well */
+		print "<li style=\"list-style: none\">\n";
+		print "<p>Creating LocalSettings.php...</p>\n\n";
+		$localSettings = "<" . "?php$endl$local$endl\r\n";
+		// Fix up a common line-ending problem (due to CVS on Windows)
+		$localSettings = str_replace( "\r\n", "\n", $localSettings );
+		$f = fopen( "LocalSettings.php", 'xt' );
+
+		if( $f == false ) {
+			dieout( "<p>Couldn't write out LocalSettings.php. Check that the directory permissions are correct and that there isn't already a file of that name here...</p>\n" .
+			"<p>Here's the file that would have been written, try to paste it into place manually:</p>\n" .
+			"<pre>\n" . htmlspecialchars( $localSettings ) . "</pre>\n" );
+		}
+		if(fwrite( $f, $localSettings ) ) {
+			fclose( $f );
+			writeSuccessMessage();
+		} else {
+			fclose( $f );
+			die("<p class='error'>An error occured while writing the config/LocalSettings.php file. Check user rights and disk space then try again.</p>\n");
+
+		}
+		print "</li>\n";
+
+	} while( false );
+}
+?>
+</ul>
+
+
+<?php
+
+if( count( $errs ) ) {
+	/* Display options form */
+
+	if( $conf->posted ) {
+		echo "<p class='error-top'>Something's not quite right yet; make sure everything below is filled out correctly.</p>\n";
+	}
+?>
+
+<form action="index.php" name="config" method="post">
+
+
+<h2>Site config</h2>
+
+<div class="config-section">
+	<div class="config-input">
+		<?php
+		aField( $conf, "Sitename", "Wiki name:" );
+		?>
+	</div>
+	<p class="config-desc">
+		Preferably a short word without punctuation, i.e. "Wikipedia".<br />
+		Will appear as the namespace name for "meta" pages, and throughout the interface.
+	</p>
+
+	<div class="config-input">
+		<?php
+		aField( $conf, "EmergencyContact", "Contact e-mail:" );
+		?>
+	</div>
+	<p class="config-desc">
+		Displayed to users in some error messages, used as the return address for password reminders, and used as the default sender address of e-mail notifications.
+	</p>
+
+	<div class="config-input">
+		<label class='column' for="LanguageCode">Language:</label>
+		<select id="LanguageCode" name="LanguageCode">
+
+		<?php
+			$list = getLanguageList();
+			foreach( $list as $code => $name ) {
+				$sel = ($code == $conf->LanguageCode) ? 'selected="selected"' : '';
+				echo "\t\t<option value=\"$code\" $sel>$name</option>\n";
+			}
+		?>
+		</select>
+	</div>
+	<p class="config-desc">
+		Select the language for your wiki's interface. Some localizations aren't fully complete. Unicode (UTF-8) is used for all localizations.
+	</p>
+
+	<div class="config-input">
+		<label class='column'>Copyright/license:</label>
+
+		<ul class="plain">
+		<li><?php aField( $conf, "License", "No license metadata", "radio", "none" ); ?></li>
+		<li><?php aField( $conf, "License", "GNU Free Documentation License 1.2 (Wikipedia-compatible)", "radio", "gfdl" ); ?></li>
+		<li><?php
+			aField( $conf, "License", "A Creative Commons license - ", "radio", "cc" );
+			$partner = "MediaWiki";
+			$exit = urlencode( "$wgServer{$conf->ScriptPath}/config/index.php?License=cc&RightsUrl=[license_url]&RightsText=[license_name]&RightsCode=[license_code]&RightsIcon=[license_button]" );
+			$icon = urlencode( "$wgServer$wgUploadPath/wiki.png" );
+			$ccApp = htmlspecialchars( "http://creativecommons.org/license/?partner=$partner&exit_url=$exit&partner_icon_url=$icon" );
+			print "<a href=\"$ccApp\" target='_blank'>choose</a>";
+			?>
+		<?php if( $conf->License == "cc" ) { ?>
+			<ul>
+				<li><?php aField( $conf, "RightsIcon", "<img src=\"" . htmlspecialchars( $conf->RightsIcon ) . "\" alt='(Creative Commons icon)' />", "hidden" ); ?></li>
+				<li><?php aField( $conf, "RightsText", htmlspecialchars( $conf->RightsText ), "hidden" ); ?></li>
+				<li><?php aField( $conf, "RightsCode", "code: " . htmlspecialchars( $conf->RightsCode ), "hidden" ); ?></li>
+				<li><?php aField( $conf, "RightsUrl", "<a href=\"" . htmlspecialchars( $conf->RightsUrl ) . "\">" . htmlspecialchars( $conf->RightsUrl ) . "</a>", "hidden" ); ?></li>
+			</ul>
+		<?php } ?>
+			</li>
+		</ul>
+	</div>
+	<p class="config-desc">
+		A notice, icon, and machine-readable copyright metadata will be displayed for the license you pick.
+	</p>
+
+
+	<div class="config-input">
+		<?php aField( $conf, "SysopName", "Admin username:" ) ?>
+	</div>
+	<div class="config-input">
+		<?php aField( $conf, "SysopPass", "Password:", "password" ) ?>
+	</div>
+	<div class="config-input">
+		<?php aField( $conf, "SysopPass2", "Password confirm:", "password" ) ?>
+	</div>
+	<p class="config-desc">
+		An admin can lock/delete pages, block users from editing, and do other maintenance tasks.<br />
+		A new account will be added only when creating a new wiki database.
+	</p>
+
+	<div class="config-input">
+		<label class='column'>Shared memory caching:</label>
+
+		<ul class="plain">
+		<li><?php aField( $conf, "Shm", "No caching", "radio", "none" ); ?></li>
+		<?php
+			if ( $conf->turck ) {
+				echo "<li>";
+				aField( $conf, "Shm", "Turck MMCache", "radio", "turck" );
+				echo "</li>";
+			}
+			if ( $conf->apc ) {
+				echo "<li>";
+				aField( $conf, "Shm", "APC", "radio", "apc" );
+				echo "</li>";
+			}
+			if ( $conf->eaccel ) {
+				echo "<li>";
+				aField( $conf, "Shm", "eAccelerator", "radio", "eaccel" );
+				echo "</li>";
+			}
+		?>
+		<li><?php aField( $conf, "Shm", "Memcached", "radio", "memcached" ); ?></li>
+		</ul>
+		<div style="clear:left"><?php aField( $conf, "MCServers", "Memcached servers:", "text" ) ?></div>
+	</div>
+	<p class="config-desc">
+		Using a shared memory system such as Turck MMCache, APC, eAccelerator, or Memcached 
+		will speed up MediaWiki significantly. Memcached is the best solution but needs to be
+		installed. Specify the server addresses and ports in a comma-separated list. Only
+		use Turck shared memory if the wiki will be running on a single Apache server.
+	</p>
+</div>
+
+<h2>E-mail, e-mail notification and authentication setup</h2>
+
+<div class="config-section">
+	<div class="config-input">
+		<label class='column'>E-mail features (global):</label>
+		<ul class="plain">
+		<li><?php aField( $conf, "Email", "Enabled", "radio", "email_enabled" ); ?></li>
+		<li><?php aField( $conf, "Email", "Disabled", "radio", "email_disabled" ); ?></li>
+		</ul>
+	</div>
+	<p class="config-desc">
+		Use this to disable all e-mail functions (password reminders, user-to-user e-mail, and e-mail notifications)
+		if sending mail doesn't work on your server.
+	</p>
+
+	<div class="config-input">
+		<label class='column'>User-to-user e-mail:</label>
+		<ul class="plain">
+		<li><?php aField( $conf, "Emailuser", "Enabled", "radio", "emailuser_enabled" ); ?></li>
+		<li><?php aField( $conf, "Emailuser", "Disabled", "radio", "emailuser_disabled" ); ?></li>
+		</ul>
+	</div>
+	<p class="config-desc">
+		The user-to-user e-mail feature (Special:Emailuser) lets the wiki act as a relay to allow users to exchange e-mail without publicly advertising their e-mail address.
+	</p>
+	<div class="config-input">
+		<label class='column'>E-mail notification about changes:</label>
+		<ul class="plain">
+		<li><?php aField( $conf, "Enotif", "Disabled", "radio", "enotif_disabled" ); ?></li>
+		<li><?php aField( $conf, "Enotif", "Enabled for changes to user discussion pages only", "radio", "enotif_usertalk" ); ?></li>
+		<li><?php aField( $conf, "Enotif", "Enabled for changes to user discussion pages, and to pages on watchlists (not recommended for large wikis)", "radio", "enotif_allpages" ); ?></li>
+		</ul>
+	</div>
+	<div class="config-desc">
+		<p>
+		For this feature to work, an e-mail address must be present for the user account, and the notification
+		options in the user's preferences must be enabled. Also note the 
+		authentication option below. When testing the feature, keep in mind that your own changes will never trigger notifications to be sent to yourself.</p>
+
+		<p>There are additional options for fine tuning in /includes/DefaultSettings.php; copy these to your LocalSettings.php and edit them there to change them.</p>
+	</div>
+
+	<div class="config-input">
+		<label class='column'>E-mail address authentication:</label>
+		<ul class="plain">
+		<li><?php aField( $conf, "Eauthent", "Disabled", "radio", "eauthent_disabled" ); ?></li>
+		<li><?php aField( $conf, "Eauthent", "Enabled", "radio", "eauthent_enabled" ); ?></li>
+		</ul>
+	</div>
+	<div class="config-desc">
+		<p>If this option is enabled, users have to confirm their e-mail address using a magic link sent to them whenever they set or change it, and only authenticated e-mail addresses can receive mails from other users and/or
+		change notification mails. Setting this option is <B>recommended</B> for public wikis because of potential abuse of the e-mail features above.</p>
+	</div>
+
+</div>
+
+<h2>Database config</h2>
+
+<div class="config-section">
+<div class="config-input">
+		<label class='column'>Database type:</label>
+<?php if (isset($errs['DBpicktype'])) print "<span class='error'>$errs[DBpicktype]</span>\n"; ?>
+		<ul class='plain'><?php database_picker($conf) ?></ul>
+	</div>
+
+	<div class="config-input" style="clear:left"><?php
+		aField( $conf, "DBserver", "Database host:" );
+	?></div>
+	<p class="config-desc">
+		If your database server isn't on your web server, enter the name or IP address here.
+	</p>
+
+	<div class="config-input"><?php
+		aField( $conf, "DBname", "Database name:" );
+	?></div>
+	<div class="config-input"><?php
+		aField( $conf, "DBuser", "DB username:" );
+	?></div>
+	<div class="config-input"><?php
+		aField( $conf, "DBpassword", "DB password:", "password" );
+	?></div>
+	<div class="config-input"><?php
+		aField( $conf, "DBpassword2", "DB password confirm:", "password" );
+	?></div>
+	<p class="config-desc">
+		If you only have a single user account and database available,
+		enter those here. If you have database root access (see below)
+		you can specify new accounts/databases to be created. This account 
+		will not be created if it pre-exists. If this is the case, ensure that it
+		has SELECT, INSERT, UPDATE, and DELETE permissions on the MediaWiki database.
+	</p>
+
+	<div class="config-input">
+		<label class="column">Superuser account:</label>
+		<input type="checkbox" name="useroot" id="useroot" <?php if( $useRoot ) { ?>checked="checked" <?php } ?>/>
+		&nbsp;<label for="useroot">Use superuser account</label>
+	</div>
+	<div class="config-input">
+		<?php
+		aField( $conf, "RootUser", "Superuser name:", "superuser" );
+		?>
+	</div>
+	<div class="config-input">
+		<?php
+		aField( $conf, "RootPW", "Superuser password:", "password" );
+		?>
+	</div>
+
+	<p class="config-desc">
+		If the database user specified above does not exist, or does not have access to create
+		the database (if needed) or tables within it, please check the box and provide details
+		of a superuser account,	such as <strong>root</strong>, which does.
+	</p>
+
+	<?php database_switcher('mysql'); ?>
+	<div class="config-input"><?php
+		aField( $conf, "DBprefix", "Database table prefix:" );
+	?></div>
+	<div class="config-desc">
+		<p>If you need to share one database between multiple wikis, or
+		between MediaWiki and another web application, you may choose to
+		add a prefix to all the table names to avoid conflicts.</p>
+
+		<p>Avoid exotic characters; something like <tt>mw_</tt> is good.</p>
+	</div>
+
+	<div class="config-input"><label class="column">Database charset</label>
+		<div>Select one:</div>
+		<ul class="plain">
+		<li><?php aField( $conf, "DBschema", "Backwards-compatible UTF-8", "radio", "mysql4" ); ?></li>
+		<li><?php aField( $conf, "DBschema", "Experimental MySQL 4.1/5.0 UTF-8", "radio", "mysql5" ); ?></li>
+		<li><?php aField( $conf, "DBschema", "Experimental MySQL 4.1/5.0 binary", "radio", "mysql5-binary" ); ?></li>
+		</ul>
+	</div>
+	<p class="config-desc">
+		<b>EXPERIMENTAL:</b> You can enable explicit Unicode charset support
+		for MySQL 4.1 and 5.0 servers. This is not well tested and may
+		cause things to break. <b>If upgrading an older installation, leave
+		in backwards-compatible mode.</b>
+	</p>
+	</div>
+
+	<?php database_switcher('postgres'); ?>
+	<div class="config-input"><?php
+		aField( $conf, "DBport", "Database port:" );
+	?></div>
+	<div class="config-input"><?php
+		aField( $conf, "DBmwschema", "Schema for mediawiki:" );
+	?></div>
+	<div class="config-input"><?php
+		aField( $conf, "DBts2schema", "Schema for tsearch2:" );
+	?></div>
+	<div class="config-desc">
+		<p>The username specified above (at "DB username") will have its search path set to the above schemas, 
+		so it is recommended that you create a new user. The above schemas are generally correct: 
+        only change them if you are sure you need to.</p>
+	</div>
+	</div>
+
+	<div class="config-input" style="padding:2em 0 3em">
+		<label class='column'>&nbsp;</label>
+		<input type="submit" value="Install MediaWiki!" class="btn-install" />
+	</div>
+
+</div>
+
+<script type="text/javascript">
+window.onload = toggleDBarea('<?php echo $conf->DBtype; ?>',
+<?php
+	## If they passed in a root user name, don't populate it on page load
+	echo strlen(importPost('RootUser', '')) ? 0 : 1;
+?>);
+</script>
+
+</form>
+
+<?php
+}
+
+/* -------------------------------------------------------------------------------------- */
+function writeSuccessMessage() {
+	if ( ini_get( 'safe_mode' ) && !ini_get( 'open_basedir' ) ) {
+		echo <<<EOT
+<p>Installation successful!</p>
+<p>To complete the installation, please do the following:
+<ol>
+	<li>Download config/LocalSettings.php with your FTP client or file manager</li>
+	<li>Upload it to the parent directory</li>
+	<li>Delete config/LocalSettings.php</li>
+	<li>Start using <a href='../index.php'>your wiki</a>!
+</ol>
+<p>If you are in a shared hosting environment, do <strong>not</strong> just move LocalSettings.php
+remotely. LocalSettings.php is currently owned by the user your webserver is running under,
+which means that anyone on the same server can read your database password! Downloading
+it and uploading it again will hopefully change the ownership to a user ID specific to you.</p>
+EOT;
+	} else {
+		echo "<p><span style='font-weight:bold;color:green;font-size:110%'>Installation successful!</span> Move the <tt>config/LocalSettings.php</tt> file into the parent directory, then follow
+			<strong><a href='../index.php'>this link</a></strong> to your wiki.</p>\n";
+	}
+}
+
+
+function escapePhpString( $string ) {
+	return strtr( $string,
+		array(
+			"\n" => "\\n",
+			"\r" => "\\r",
+			"\t" => "\\t",
+			"\\" => "\\\\",
+			"\$" => "\\\$",
+			"\"" => "\\\""
+		));
+}
+
+function writeLocalSettings( $conf ) {
+	$conf->PasswordSender = $conf->EmergencyContact;
+	$magic = ($conf->ImageMagick ? "" : "# ");
+	$convert = ($conf->ImageMagick ? $conf->ImageMagick : "/usr/bin/convert" );
+	$rights = ($conf->RightsUrl) ? "" : "# ";
+	$hashedUploads = $conf->safeMode ? '' : '# ';
+
+	switch ( $conf->Shm ) {
+		case 'memcached':
+			$cacheType = 'CACHE_MEMCACHED';
+			$mcservers = var_export( $conf->MCServerArray, true );
+			break;
+		case 'turck':
+		case 'apc':
+		case 'eaccel':
+			$cacheType = 'CACHE_ACCEL';
+			$mcservers = 'array()';
+			break;
+		default:
+			$cacheType = 'CACHE_NONE';
+			$mcservers = 'array()';
+	}
+
+	if ( $conf->Email == 'email_enabled' ) {
+		$enableemail = 'true';
+		$enableuseremail = ( $conf->Emailuser == 'emailuser_enabled' ) ? 'true' : 'false' ;
+		$eauthent = ( $conf->Eauthent == 'eauthent_enabled' ) ? 'true' : 'false' ;
+		switch ( $conf->Enotif ) {
+			case 'enotif_usertalk':
+				$enotifusertalk = 'true';
+				$enotifwatchlist = 'false';
+				break;
+			case 'enotif_allpages':
+				$enotifusertalk = 'true';
+				$enotifwatchlist = 'true';
+				break;
+			default:
+				$enotifusertalk = 'false';
+				$enotifwatchlist = 'false';
+		}
+	} else {
+		$enableuseremail = 'false';
+		$enableemail = 'false';
+		$eauthent = 'false';
+		$enotifusertalk = 'false';
+		$enotifwatchlist = 'false';
+	}
+
+	$file = @fopen( "/dev/urandom", "r" );
+	if ( $file ) {
+		$secretKey = bin2hex( fread( $file, 32 ) );
+		fclose( $file );
+	} else {
+		$secretKey = "";
+		for ( $i=0; $i<8; $i++ ) {
+			$secretKey .= dechex(mt_rand(0, 0x7fffffff));
+		}
+		print "<li>Warning: \$wgSecretKey key is insecure, generated with mt_rand(). Consider changing it manually.</li>\n";
+	}
+
+	# Add slashes to strings for double quoting
+	$slconf = array_map( "escapePhpString", get_object_vars( $conf ) );
+	if( $conf->License == 'gfdl' ) {
+		# Needs literal string interpolation for the current style path
+		$slconf['RightsIcon'] = $conf->RightsIcon;
+	}
+
+	$localsettings = "
+# This file was automatically generated by the MediaWiki installer.
+# If you make manual changes, please keep track in case you need to
+# recreate them later.
+#
+# See includes/DefaultSettings.php for all configurable settings
+# and their default values, but don't forget to make changes in _this_
+# file, not there.
+
+# If you customize your file layout, set \$IP to the directory that contains
+# the other MediaWiki files. It will be used as a base to locate files.
+if( defined( 'MW_INSTALL_PATH' ) ) {
+	\$IP = MW_INSTALL_PATH;
+} else {
+	\$IP = dirname( __FILE__ );
+}
+
+\$path = array( \$IP, \"\$IP/includes\", \"\$IP/languages\" );
+set_include_path( implode( PATH_SEPARATOR, \$path ) . PATH_SEPARATOR . get_include_path() );
+
+require_once( \"includes/DefaultSettings.php\" );
+
+# If PHP's memory limit is very low, some operations may fail.
+" . ($conf->raiseMemory ? '' : '# ' ) . "ini_set( 'memory_limit', '20M' );" . "
+
+if ( \$wgCommandLineMode ) {
+	if ( isset( \$_SERVER ) && array_key_exists( 'REQUEST_METHOD', \$_SERVER ) ) {
+		die( \"This script must be run from the command line\\n\" );
+	}
+}
+## Uncomment this to disable output compression
+# \$wgDisableOutputCompression = true;
+
+\$wgSitename         = \"{$slconf['Sitename']}\";
+
+## The URL base path to the directory containing the wiki;
+## defaults for all runtime URL paths are based off of this.
+\$wgScriptPath       = \"{$slconf['ScriptPath']}\";
+
+## For more information on customizing the URLs please see:
+## http://www.mediawiki.org/wiki/Manual:Short_URL
+
+\$wgEnableEmail      = $enableemail;
+\$wgEnableUserEmail  = $enableuseremail;
+
+\$wgEmergencyContact = \"{$slconf['EmergencyContact']}\";
+\$wgPasswordSender = \"{$slconf['PasswordSender']}\";
+
+## For a detailed description of the following switches see
+## http://meta.wikimedia.org/Enotif and http://meta.wikimedia.org/Eauthent
+## There are many more options for fine tuning available see
+## /includes/DefaultSettings.php
+## UPO means: this is also a user preference option
+\$wgEnotifUserTalk = $enotifusertalk; # UPO
+\$wgEnotifWatchlist = $enotifwatchlist; # UPO
+\$wgEmailAuthentication = $eauthent;
+
+\$wgDBtype           = \"{$slconf['DBtype']}\";
+\$wgDBserver         = \"{$slconf['DBserver']}\";
+\$wgDBname           = \"{$slconf['DBname']}\";
+\$wgDBuser           = \"{$slconf['DBuser']}\";
+\$wgDBpassword       = \"{$slconf['DBpassword']}\";
+\$wgDBport           = \"{$slconf['DBport']}\";
+\$wgDBprefix         = \"{$slconf['DBprefix']}\";
+
+# MySQL table options to use during installation or update
+\$wgDBTableOptions   = \"{$slconf['DBTableOptions']}\";
+
+# Schemas for Postgres
+\$wgDBmwschema       = \"{$slconf['DBmwschema']}\";
+\$wgDBts2schema      = \"{$slconf['DBts2schema']}\";
+
+# Experimental charset support for MySQL 4.1/5.0.
+\$wgDBmysql5 = {$conf->DBmysql5};
+
+## Shared memory settings
+\$wgMainCacheType = $cacheType;
+\$wgMemCachedServers = $mcservers;
+
+## To enable image uploads, make sure the 'images' directory
+## is writable, then set this to true:
+\$wgEnableUploads       = false;
+{$magic}\$wgUseImageMagick = true;
+{$magic}\$wgImageMagickConvertCommand = \"{$convert}\";
+
+## If you want to use image uploads under safe mode,
+## create the directories images/archive, images/thumb and
+## images/temp, and make them all writable. Then uncomment
+## this, if it's not already uncommented:
+{$hashedUploads}\$wgHashedUploadDirectory = false;
+
+## If you have the appropriate support software installed
+## you can enable inline LaTeX equations:
+\$wgUseTeX           = false;
+
+\$wgLocalInterwiki   = \$wgSitename;
+
+\$wgLanguageCode = \"{$slconf['LanguageCode']}\";
+
+\$wgProxyKey = \"$secretKey\";
+
+## Default skin: you can change the default skin. Use the internal symbolic
+## names, ie 'standard', 'nostalgia', 'cologneblue', 'monobook':
+\$wgDefaultSkin = 'monobook';
+
+## For attaching licensing metadata to pages, and displaying an
+## appropriate copyright notice / icon. GNU Free Documentation
+## License and Creative Commons licenses are supported so far.
+{$rights}\$wgEnableCreativeCommonsRdf = true;
+\$wgRightsPage = \"\"; # Set to the title of a wiki page that describes your license/copyright
+\$wgRightsUrl = \"{$slconf['RightsUrl']}\";
+\$wgRightsText = \"{$slconf['RightsText']}\";
+\$wgRightsIcon = \"{$slconf['RightsIcon']}\";
+# \$wgRightsCode = \"{$slconf['RightsCode']}\"; # Not yet used
+
+\$wgDiff3 = \"{$slconf['diff3']}\";
+
+# When you make changes to this configuration file, this will make
+# sure that cached pages are cleared.
+\$configdate = gmdate( 'YmdHis', @filemtime( __FILE__ ) );
+\$wgCacheEpoch = max( \$wgCacheEpoch, \$configdate );
+require_once \$IP . \"/extensions/FCKeditor/FCKeditor.php\";
+	"; ## End of setting the $localsettings string
+
+	// Keep things in Unix line endings internally;
+	// the system will write out as local text type.
+	return str_replace( "\r\n", "\n", $localsettings );
+}
+
+function dieout( $text ) {
+	die( $text . "\n\n</body>\n</html>" );
+}
+
+function importVar( &$var, $name, $default = "" ) {
+	if( isset( $var[$name] ) ) {
+		$retval = $var[$name];
+		if ( get_magic_quotes_gpc() ) {
+			$retval = stripslashes( $retval );
+		}
+	} else {
+		$retval = $default;
+	}
+	return $retval;
+}
+
+function importPost( $name, $default = "" ) {
+	return importVar( $_POST, $name, $default );
+}
+
+function importCheck( $name ) {
+	return isset( $_POST[$name] );
+}
+
+function importRequest( $name, $default = "" ) {
+	return importVar( $_REQUEST, $name, $default );
+}
+
+$radioCount = 0;
+
+function aField( &$conf, $field, $text, $type = "text", $value = "", $onclick = '' ) {
+	global $radioCount;
+	if( $type != "" ) {
+		$xtype = "type=\"$type\"";
+	} else {
+		$xtype = "";
+	}
+
+	$id = $field;
+	$nolabel = ($type == "radio") || ($type == "hidden");
+
+	if ($type == 'radio')
+		$id .= $radioCount++;
+
+	if( $nolabel ) {
+		echo "\t\t<label>";
+	} else {
+		echo "\t\t<label class='column' for=\"$id\">$text</label>\n";
+	}
+
+	if( $type == "radio" && $value == $conf->$field ) {
+		$checked = "checked='checked'";
+	} else {
+		$checked = "";
+	}
+	echo "\t\t<input $xtype name=\"$field\" id=\"$id\" class=\"iput-$type\" $checked ";
+	if ($onclick) {
+		echo " onclick='toggleDBarea(\"$value\",1)' " ;
+	}
+	echo "value=\"";
+	if( $type == "radio" ) {
+		echo htmlspecialchars( $value );
+	} else {
+		echo htmlspecialchars( $conf->$field );
+	}
+
+
+	echo "\" />\n";
+	if( $nolabel ) {
+		echo " $text</label>\n";
+	}
+
+	global $errs;
+	if(isset($errs[$field])) echo "<span class='error'>" . $errs[$field] . "</span>\n";
+}
+
+function getLanguageList() {
+	global $wgLanguageNames;
+	if( !isset( $wgLanguageNames ) ) {
+		require_once( "languages/Names.php" );
+	}
+
+	$codes = array();
+
+	$d = opendir( "../languages/messages" );
+	/* In case we are called from the root directory */
+	if (!$d)
+		$d = opendir( "languages/messages");
+	while( false !== ($f = readdir( $d ) ) ) {
+		$m = array();
+		if( preg_match( '/Messages([A-Z][a-z_]+)\.php$/', $f, $m ) ) {
+			$code = str_replace( '_', '-', strtolower( $m[1] ) );
+			if( isset( $wgLanguageNames[$code] ) ) {
+				$name = $code . ' - ' . $wgLanguageNames[$code];
+			} else {
+				$name = $code;
+			}
+			$codes[$code] = $name;
+		}
+	}
+	closedir( $d );
+	ksort( $codes );
+	return $codes;
+}
+
+#Check for location of an executable
+# @param string $loc single location to check
+# @param array $names filenames to check for.
+# @param mixed $versioninfo array of details to use when checking version, use false for no version checking
+function locate_executable($loc, $names, $versioninfo = false) {
+	if (!is_array($names))
+		$names = array($names);
+
+	foreach ($names as $name) {
+		$command = "$loc".DIRECTORY_SEPARATOR."$name";
+		if (file_exists($command)) {
+			if (!$versioninfo)
+				return $command;
+
+			$file = str_replace('$1', $command, $versioninfo[0]);
+			if (strstr(`$file`, $versioninfo[1]) !== false)
+				return $command;
+		}
+	}
+	return false;
+}
+
+# Test a memcached server
+function testMemcachedServer( $server ) {
+	$hostport = explode(":", $server);
+	$errstr = false;
+	$fp = false;
+	if ( !function_exists( 'fsockopen' ) ) {
+		$errstr = "Can't connect to memcached, fsockopen() not present";
+	}
+	if ( !$errstr && count( $hostport ) != 2 ) {
+		$errstr = 'Please specify host and port';
+		var_dump( $hostport );
+	}
+	if ( !$errstr ) {
+		list( $host, $port ) = $hostport;
+		$errno = 0;
+		$fsockerr = '';
+
+		$fp = @fsockopen( $host, $port, $errno, $fsockerr, 1.0 );
+		if ( $fp === false ) {
+			$errstr = "Cannot connect to memcached on $host:$port : $fsockerr";
+		}
+	}
+	if ( !$errstr ) {
+		$command = "version\r\n";
+		$bytes = fwrite( $fp, $command );
+		if ( $bytes != strlen( $command ) ) {
+			$errstr = "Cannot write to memcached socket on $host:$port";
+		}
+	}
+	if ( !$errstr ) {
+		$expected = "VERSION ";
+		$response = fread( $fp, strlen( $expected ) );
+		if ( $response != $expected ) {
+			$errstr = "Didn't get correct memcached response from $host:$port";
+		}
+	}
+	if ( $fp ) {
+		fclose( $fp );
+	}
+	if ( !$errstr ) {
+		echo "<li>Connected to memcached on $host:$port successfully";
+	}
+	return $errstr;
+}
+
+function database_picker($conf) {
+	global $ourdb;
+	print "\n";
+	foreach(array_keys($ourdb) as $db) {
+		if ($ourdb[$db]['havedriver']) {
+			print "<li>";
+			aField( $conf, "DBtype", $ourdb[$db]['fullname'], 'radio', $db, 'onclick');
+			print "</li>\n";
+		}
+	}
+	print "\n";
+}
+
+function database_switcher($db) {
+	global $ourdb;
+	$color = $ourdb[$db]['bgcolor'];
+	$full = $ourdb[$db]['fullname'];
+	print "<div id='$db' style='display:none; background: $color'>\n";
+	print "<h3>$full specific options:</h3>\n";
+}
+
+function printListItem( $item ) {
+	print "<li>$item</li>";
+}
+
+?>
+
+	<div class="license">
+	<hr>
+	<p>This program is free software; you can redistribute it and/or modify
+	 it under the terms of the GNU General Public License as published by
+	 the Free Software Foundation; either version 2 of the License, or
+	 (at your option) any later version.</p>
+
+	 <p>This program is distributed in the hope that it will be useful,
+	 but WITHOUT ANY WARRANTY; without even the implied warranty of
+	 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+	 GNU General Public License for more details.</p>
+
+	 <p>You should have received <a href="../COPYING">a copy of the GNU General Public License</a>
+	 along with this program; if not, write to the Free Software
+	 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+	 or <a href="http://www.gnu.org/copyleft/gpl.html">read it online</a></p>
+	</div>
+
+</div></div></div>
+
+
+<div id="column-one">
+	<div class="portlet" id="p-logo">
+	  <a style="background-image: url(../skins/common/images/mediawiki.png);"
+	    href="http://www.mediawiki.org/"
+	    title="Main Page"></a>
+	</div>
+	<script type="text/javascript"> if (window.isMSIE55) fixalpha(); </script>
+	<div class='portlet'><div class='pBody'>
+		<ul>
+			<li><strong><a href="http://www.mediawiki.org/">MediaWiki home</a></strong></li>
+			<li><a href="../README">Readme</a></li>
+			<li><a href="../RELEASE-NOTES">Release notes</a></li>
+			<li><a href="../docs/">Documentation</a></li>
+			<li><a href="http://meta.wikipedia.org/wiki/MediaWiki_User's_Guide">User's Guide</a></li>
+			<li><a href="http://meta.wikimedia.org/wiki/MediaWiki_FAQ">FAQ</a></li>
+		</ul>
+		<p style="font-size:90%;margin-top:1em">MediaWiki is Copyright &copy; 2001-2007 by Magnus Manske, Brion Vibber, Lee Daniel Crocker, Tim Starling, Erik M&ouml;ller, Gabriel Wicke and others.</p>
+	</div></div>
+</div>
+
+</div>
+
+</body>
+</html>
Index: /MediaWiki/branches/1.11/docs/README
===================================================================
--- /MediaWiki/branches/1.11/docs/README	(revision 1280)
+++ /MediaWiki/branches/1.11/docs/README	(revision 1280)
@@ -0,0 +1,17 @@
+[July 5th 2005]
+
+The 'docs' directory contain various text files that should help you
+understand the most importants classes in MediaWiki.
+
+API documentation is sometime generated and uploaded at:
+  http://svn.wikimedia.org/doc/
+
+You can get a fresh version using 'make doc' or mwdocgen.php
+in the ../maintenance/ directory.
+
+
+
+For end user / administrators, most of the documentation
+is located online at:
+  http://meta.wikimedia.org/wiki/Help:Help
+
Index: /MediaWiki/branches/1.11/docs/database.txt
===================================================================
--- /MediaWiki/branches/1.11/docs/database.txt	(revision 1280)
+++ /MediaWiki/branches/1.11/docs/database.txt	(revision 1280)
@@ -0,0 +1,179 @@
+Some information about database access in MediaWiki.
+By Tim Starling, January 2006.
+
+------------------------------------------------------------------------
+    Database layout
+------------------------------------------------------------------------
+
+For information about the MediaWiki database layout, such as a 
+description of the tables and their contents, please see:
+  http://www.mediawiki.org/wiki/Manual:Database_layout
+  http://svn.wikimedia.org/viewvc/mediawiki/trunk/phase3/maintenance/tables.sql?view=markup
+
+
+------------------------------------------------------------------------
+    API
+------------------------------------------------------------------------
+
+To make a read query, something like this usually suffices:
+
+$dbr = wfGetDB( DB_SLAVE );
+$res = $dbr->select( /* ...see docs... */ );
+while ( $row = $dbr->fetchObject( $res ) ) {
+	...
+}
+$dbr->freeResult( $res );
+
+Note the assignment operator in the while condition.
+
+For a write query, use something like:
+
+$dbw = wfGetDB( DB_MASTER );
+$dbw->insert( /* ...see docs... */ );
+
+We use the convention $dbr for read and $dbw for write to help you keep
+track of whether the database object is a slave (read-only) or a master
+(read/write). If you write to a slave, the world will explode. Or to be
+precise, a subsequent write query which succeeded on the master may fail
+when replicated to the slave due to a unique key collision. Replication
+on the slave will stop and it may take hours to repair the database and
+get it back online. Setting read_only in my.cnf on the slave will avoid
+this scenario, but given the dire consequences, we prefer to have as
+many checks as possible.
+
+We provide a query() function for raw SQL, but the wrapper functions
+like select() and insert() are usually more convenient. They take care
+of things like table prefixes and escaping for you. If you really need
+to make your own SQL, please read the documentation for tableName() and
+addQuotes(). You will need both of them.
+
+
+------------------------------------------------------------------------
+    Basic query optimisation
+------------------------------------------------------------------------
+
+MediaWiki developers who need to write DB queries should have some
+understanding of databases and the performance issues associated with
+them. Patches containing unacceptably slow features will not be
+accepted. Unindexed queries are generally not welcome in MediaWiki,
+except in special pages derived from QueryPage. It's a common pitfall
+for new developers to submit code containing SQL queries which examine
+huge numbers of rows. Remember that COUNT(*) is O(N), counting rows in a
+table is like counting beans in a bucket.
+
+
+------------------------------------------------------------------------
+    Replication
+------------------------------------------------------------------------
+
+The largest installation of MediaWiki, Wikimedia, uses a large set of
+slave MySQL servers replicating writes made to a master MySQL server. It
+is important to understand the issues associated with this setup if you
+want to write code destined for Wikipedia.
+
+It's often the case that the best algorithm to use for a given task
+depends on whether or not replication is in use. Due to our unabashed
+Wikipedia-centrism, we often just use the replication-friendly version,
+but if you like, you can use $wgLoadBalancer->getServerCount() > 1 to
+check to see if replication is in use.
+
+=== Lag ===
+
+Lag primarily occurs when large write queries are sent to the master.
+Writes on the master are executed in parallel, but they are executed in
+serial when they are replicated to the slaves. The master writes the
+query to the binlog when the transaction is committed. The slaves poll
+the binlog and start executing the query as soon as it appears. They can
+service reads while they are performing a write query, but will not read
+anything more from the binlog and thus will perform no more writes. This
+means that if the write query runs for a long time, the slaves will lag
+behind the master for the time it takes for the write query to complete.
+
+Lag can be exacerbated by high read load. MediaWiki's load balancer will
+stop sending reads to a slave when it is lagged by more than 30 seconds.
+If the load ratios are set incorrectly, or if there is too much load
+generally, this may lead to a slave permanently hovering around 30
+seconds lag.
+
+If all slaves are lagged by more than 30 seconds, MediaWiki will stop
+writing to the database. All edits and other write operations will be
+refused, with an error returned to the user. This gives the slaves a
+chance to catch up. Before we had this mechanism, the slaves would
+regularly lag by several minutes, making review of recent edits
+difficult.
+
+In addition to this, MediaWiki attempts to ensure that the user sees
+events occurring on the wiki in chronological order. A few seconds of lag
+can be tolerated, as long as the user sees a consistent picture from
+subsequent requests. This is done by saving the master binlog position
+in the session, and then at the start of each request, waiting for the
+slave to catch up to that position before doing any reads from it. If
+this wait times out, reads are allowed anyway, but the request is
+considered to be in "lagged slave mode". Lagged slave mode can be
+checked by calling $wgLoadBalancer->getLaggedSlaveMode(). The only
+practical consequence at present is a warning displayed in the page
+footer.
+
+=== Lag avoidance ===
+
+To avoid excessive lag, queries which write large numbers of rows should
+be split up, generally to write one row at a time. Multi-row INSERT ...
+SELECT queries are the worst offenders should be avoided altogether.
+Instead do the select first and then the insert.
+
+=== Working with lag ===
+
+Despite our best efforts, it's not practical to guarantee a low-lag
+environment. Lag will usually be less than one second, but may
+occasionally be up to 30 seconds. For scalability, it's very important
+to keep load on the master low, so simply sending all your queries to
+the master is not the answer. So when you have a genuine need for
+up-to-date data, the following approach is advised:
+
+1) Do a quick query to the master for a sequence number or timestamp 2)
+Run the full query on the slave and check if it matches the data you got
+from the master 3) If it doesn't, run the full query on the master
+
+To avoid swamping the master every time the slaves lag, use of this
+approach should be kept to a minimum. In most cases you should just read
+from the slave and let the user deal with the delay.
+
+
+------------------------------------------------------------------------
+    Lock contention
+------------------------------------------------------------------------
+
+Due to the high write rate on Wikipedia (and some other wikis),
+MediaWiki developers need to be very careful to structure their writes
+to avoid long-lasting locks. By default, MediaWiki opens a transaction
+at the first query, and commits it before the output is sent. Locks will
+be held from the time when the query is done until the commit. So you
+can reduce lock time by doing as much processing as possible before you
+do your write queries. Update operations which do not require database
+access can be delayed until after the commit by adding an object to
+$wgPostCommitUpdateList.
+
+Often this approach is not good enough, and it becomes necessary to
+enclose small groups of queries in their own transaction. Use the
+following syntax:
+
+$dbw = wfGetDB( DB_MASTER );
+$dbw->immediateBegin();
+/* Do queries */
+$dbw->immediateCommit();
+
+There are functions called begin() and commit() but they don't do what
+you would expect. Don't use them.
+
+Use of locking reads (e.g. the FOR UPDATE clause) is not advised. They
+are poorly implemented in InnoDB and will cause regular deadlock errors.
+It's also surprisingly easy to cripple the wiki with lock contention. If
+you must use them, define a new flag for $wgAntiLockFlags which allows
+them to be turned off, because we'll almost certainly need to do so on
+the Wikimedia cluster.
+
+Instead of locking reads, combine your existence checks into your write
+queries, by using an appropriate condition in the WHERE clause of an
+UPDATE, or by using unique indexes in combination with INSERT IGNORE.
+Then use the affected row count to see if the query succeeded.
+
Index: /MediaWiki/branches/1.11/docs/deferred.txt
===================================================================
--- /MediaWiki/branches/1.11/docs/deferred.txt	(revision 1280)
+++ /MediaWiki/branches/1.11/docs/deferred.txt	(revision 1280)
@@ -0,0 +1,27 @@
+
+deferred.txt
+
+A few of the database updates required by various functions here
+can be deferred until after the result page is displayed to the
+user.  For example, updating the view counts, updating the
+linked-to tables after a save, etc.  PHP does not yet have any
+way to tell the server to actually return and disconnect while
+still running these updates (as a Java servelet could), but it
+might have such a feature in the future.
+
+We handle these by creating a deferred-update object (in a real
+O-O language these would be classes that implement an interface)
+and putting those objects on a global list, then executing the
+whole list after the page is displayed. We don't do anything
+smart like collating updates to the same table or such because
+the list is almost always going to have just one item on it, if
+that, so it's not worth the trouble.
+
+
+Since 1.6 there is a 'job queue' in the jobs table, which is used
+to update link tables of transcluding pages after edits; this
+may be extended in the future to more general background tasks.
+
+Job queue items are fetched out of the queue and run either
+at a random rate during regular page views (by default) or by
+a batch process which can be run via maintenance/runJobs.php.
Index: /MediaWiki/branches/1.11/docs/design.txt
===================================================================
--- /MediaWiki/branches/1.11/docs/design.txt	(revision 1280)
+++ /MediaWiki/branches/1.11/docs/design.txt	(revision 1280)
@@ -0,0 +1,127 @@
+This is a brief overview of the new design.
+
+More thorough and up-to-date information is available on the documentation
+wiki at http://www.mediawiki.org/
+
+Primary source files/objects:
+
+  index.php
+    Main script. It creates the necessary global objects and parses
+    the URL to determine what to do, which it then generally passes
+    off to somebody else (depending on the action to be taken).
+
+    All of the functions to which it might delegate generally do
+    their job by sending content to the $wgOut object. After returning,
+    the script flushes that out by calling $wgOut->output(). If there
+    are any changes that need to be made to the database that can be
+    deferred until after page display, those happen at the end.
+
+    Note that the order in the includes is touchy; Language uses
+    some global functions, etc. Likewise with the creation of the
+    global variables. Don't move them around without some forethought.
+
+  User
+    Encapsulates the state of the user viewing/using the site.
+    Can be queried for things like the user's settings, name, etc.
+    Handles the details of getting and saving to the "user" table
+    of the database, and dealing with sessions and cookies.
+    More details in USER.TXT.
+
+  OutputPage
+    Encapsulates the entire HTML page that will be sent in
+    response to any server request. It is used by calling its
+    functions to add text, headers, etc., in any order, and then
+    calling output() to send it all. It could be easily changed
+    to send incrementally if that becomes useful, but I prefer
+    the flexibility. This should also do the output encoding.
+    The system allocates a global one in $wgOut. This class
+    also handles converting wikitext format to HTML.
+
+  Title
+    Represents the title of an article, and does all the work
+    of translating among various forms such as plain text, URL,
+    database key, etc. For convenience, and for historical
+    reasons, it also represents a few features of articles that
+    don't involve their text, such as access rights.
+
+  Article
+    Encapsulates access to the "page" table of the database. The
+    object represents a an article, and maintains state such as
+    text (in Wikitext format), flags, etc.
+
+  Revision
+    Encapsulates individual page revision data and access to the
+    revision/text/blobs storage system. Higher-level code should
+    never touch text storage directly; this class mediates it.
+
+  Skin
+    Encapsulates a "look and feel" for the wiki. All of the
+    functions that render HTML, and make choices about how to
+    render it, are here, and are called from various other
+    places when needed (most notably, OutputPage::addWikiText()).
+    The StandardSkin object is a complete implementation, and is
+    meant to be subclassed with other skins that may override
+    some of its functions. The User object contains a reference
+    to a skin (according to that user's preference), and so
+    rather than having a global skin object we just rely on the
+    global User and get the skin with $wgUser->getSkin().
+
+  Language
+    Represents the language used for incidental text, and also
+    has some character encoding functions and other locale stuff.
+    A global one is allocated in $wgLang.
+
+  LinkCache
+    Keeps information on existence of articles. See LINKCACHE.TXT.
+
+Naming/coding conventions:
+
+  These are meant to be descriptive, not dictatorial; I won't
+  presume to tell you how to program, I'm just describing the
+  methods I chose to use for myself. If you do choose to
+  follow these guidelines, it will probably be easier for you
+  to collaborate with others on the project, but if you want
+  to contribute without bothering, by all means do so (and don't
+  be surprised if I reformat your code).
+
+  - I have the code indented with tabs to save file size and
+    so that users can set their tab stops to any depth they like.
+    I use 4-space tab stops, which work well. I also use K&R brace
+    matching style. I know that's a religious issue for some,
+    so if you want to use a style that puts opening braces on the
+    next line, that's OK too, but please don't use a style where
+    closing braces don't align with either the opening brace on
+    its own line or the statement that opened the block--that's
+    confusing as hell.
+
+  - PHP doesn't have "private" member variables of functions,
+    so I've used the comment "/* private */" in some places to
+    indicate my intent. Don't access things marked that way
+    from outside the class def--use the accessor functions (or
+    make your own if you need them). Yes, even some globals
+    are marked private, because PHP is broken and doesn't
+    allow static class variables.
+
+  - Member variables are generally "mXxx" to distinguish them.
+    This should make it easier to spot errors of forgetting the
+    required "$this->", which PHP will happily accept by creating
+    a new local variable rather than complaining.
+
+  - Globals are particularly evil in PHP; it sets a lot of them
+    automatically from cookies, query strings, and such, leading to
+    namespace conflicts; when a variable name is used in a function,
+    it is silently declared as a new local masking the global, so
+    you'll get weird error because you forgot the global declaration;
+    lack of static class member variables means you have to use
+    globals for them, etc. Evil, evil.
+
+    I think I've managed to pare down the number of globals we use
+    to a scant few dozen or so, and I've prefixed them all with "wg"
+    so you can spot errors better (odds are, if you see a "wg"
+    variable being used in a function that doesn't declare it global,
+    that's probably an error).
+
+    Other conventions: Top-level functions are wfFuncname(), names
+    of session variables are wsName, cookies wcName, and form field
+    values wpName ("p" for "POST").
+
Index: /MediaWiki/branches/1.11/docs/export-0.1.xsd
===================================================================
--- /MediaWiki/branches/1.11/docs/export-0.1.xsd	(revision 1280)
+++ /MediaWiki/branches/1.11/docs/export-0.1.xsd	(revision 1280)
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+	This is an XML Schema description of the format
+	output by MediaWiki's Special:Export system.
+	
+	The canonical URL to the schema document is:
+	http://www.mediawiki.org/xml/export-0.1.xsd
+	
+	Use the namespace:
+	http://www.mediawiki.org/xml/export-0.1/
+-->
+<schema xmlns="http://www.w3.org/2001/XMLSchema"
+        xmlns:mw="http://www.mediawiki.org/xml/export-0.1/"
+        targetNamespace="http://www.mediawiki.org/xml/export-0.1/"
+        elementFormDefault="qualified">
+
+	<annotation>
+		<documentation xml:lang="en">
+			MediaWiki's page export format
+		</documentation>
+	</annotation>
+	
+	<!-- Need this to reference xml:lang -->
+	<import namespace="http://www.w3.org/XML/1998/namespace"
+		schemaLocation="http://www.w3.org/2001/xml.xsd"/>
+	
+	<!-- Our root element -->
+	<element name="mediawiki" type="mw:MediaWikiType"/>
+	
+	<complexType name="MediaWikiType">
+		<sequence>
+			<element name="page" type="mw:PageType"
+				minOccurs="0" maxOccurs="unbounded"/>
+		</sequence>
+		<attribute name="version" type="string" use="required"/>
+		<attribute ref="xml:lang" use="required"/>
+	</complexType>
+	
+	<complexType name="PageType">
+		<sequence>
+			<!-- Title in text form. (Using spaces, not underscores; with namespace ) -->
+			<element name="title" type="string"/>
+			
+			<!-- optional page ID number -->
+			<element name="id" type="positiveInteger" minOccurs="0"/>
+			
+			<!-- comma-separated list of string tokens, if present -->
+			<element name="restrictions" type="string" minOccurs="0"/>
+			
+			<!-- Zero or more sets of revision data -->
+			<element name="revision" type="mw:RevisionType"
+				minOccurs="0" maxOccurs="unbounded"/>
+		</sequence>
+	</complexType>
+	
+	<complexType name="RevisionType">
+		<sequence>
+			<element name="id" type="positiveInteger" minOccurs="0"/>
+			<element name="timestamp" type="dateTime"/>
+			<element name="contributor" type="mw:ContributorType"/>
+			<element name="minor" minOccurs="0" />
+			<element name="comment" type="string" minOccurs="0"/>
+			<element name="text" type="string"/>
+		</sequence>
+	</complexType>
+	
+	<complexType name="ContributorType">
+		<sequence>
+			<element name="username" type="string" minOccurs="0"/>
+			<element name="id" type="positiveInteger" minOccurs="0" />
+			
+			<element name="ip" type="string" minOccurs="0"/>
+		</sequence>
+	</complexType>
+
+</schema>
Index: /MediaWiki/branches/1.11/docs/export-0.2.xsd
===================================================================
--- /MediaWiki/branches/1.11/docs/export-0.2.xsd	(revision 1280)
+++ /MediaWiki/branches/1.11/docs/export-0.2.xsd	(revision 1280)
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+	This is an XML Schema description of the format
+	output by MediaWiki's Special:Export system.
+	
+	Version 0.2 adds optional basic file upload info support,
+	which is used by our OAI export/import submodule.
+	
+	The canonical URL to the schema document is:
+	http://www.mediawiki.org/xml/export-0.2.xsd
+	
+	Use the namespace:
+	http://www.mediawiki.org/xml/export-0.2/
+-->
+<schema xmlns="http://www.w3.org/2001/XMLSchema"
+        xmlns:mw="http://www.mediawiki.org/xml/export-0.2/"
+        targetNamespace="http://www.mediawiki.org/xml/export-0.2/"
+        elementFormDefault="qualified">
+
+	<annotation>
+		<documentation xml:lang="en">
+			MediaWiki's page export format
+		</documentation>
+	</annotation>
+	
+	<!-- Need this to reference xml:lang -->
+	<import namespace="http://www.w3.org/XML/1998/namespace"
+		schemaLocation="http://www.w3.org/2001/xml.xsd"/>
+	
+	<!-- Our root element -->
+	<element name="mediawiki" type="mw:MediaWikiType"/>
+	
+	<complexType name="MediaWikiType">
+		<sequence>
+			<element name="page" type="mw:PageType"
+				minOccurs="0" maxOccurs="unbounded"/>
+		</sequence>
+		<attribute name="version" type="string" use="required"/>
+		<attribute ref="xml:lang" use="required"/>
+	</complexType>
+	
+	<complexType name="PageType">
+		<sequence>
+			<!-- Title in text form. (Using spaces, not underscores; with namespace ) -->
+			<element name="title" type="string"/>
+			
+			<!-- optional page ID number -->
+			<element name="id" type="positiveInteger" minOccurs="0"/>
+			
+			<!-- comma-separated list of string tokens, if present -->
+			<element name="restrictions" type="string" minOccurs="0"/>
+			
+			<!-- Zero or more sets of revision or upload data -->
+			<choice minOccurs="0" maxOccurs="unbounded">
+				<element name="revision" type="mw:RevisionType" />
+				<element name="upload" type="mw:UploadType" />
+			</choice>
+		</sequence>
+	</complexType>
+	
+	<complexType name="RevisionType">
+		<sequence>
+			<element name="id" type="positiveInteger" minOccurs="0"/>
+			<element name="timestamp" type="dateTime"/>
+			<element name="contributor" type="mw:ContributorType"/>
+			<element name="minor" minOccurs="0" />
+			<element name="comment" type="string" minOccurs="0"/>
+			<element name="text" type="string"/>
+		</sequence>
+	</complexType>
+	
+	<complexType name="ContributorType">
+		<sequence>
+			<element name="username" type="string" minOccurs="0"/>
+			<element name="id" type="positiveInteger" minOccurs="0" />
+			
+			<element name="ip" type="string" minOccurs="0"/>
+		</sequence>
+	</complexType>
+	
+	<complexType name="UploadType">
+		<sequence>
+			<!-- Revision-style data... -->
+			<element name="timestamp" type="dateTime"/>
+			<element name="contributor" type="mw:ContributorType"/>
+			<element name="comment" type="string" minOccurs="0"/>
+			
+			<!-- Filename. (Using underscores, not spaces. No 'Image:' namespace marker.) -->
+			<element name="filename" type="string"/>
+			
+			<!-- URI at which this resource can be obtained -->
+			<element name="src" type="anyURI"/>
+			
+			<element name="size" type="positiveInteger" />
+			
+			<!-- TODO: add other metadata fields -->
+		</sequence>
+	</complexType>
+	
+</schema>
Index: /MediaWiki/branches/1.11/docs/export-0.3.xsd
===================================================================
--- /MediaWiki/branches/1.11/docs/export-0.3.xsd	(revision 1280)
+++ /MediaWiki/branches/1.11/docs/export-0.3.xsd	(revision 1280)
@@ -0,0 +1,154 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+	This is an XML Schema description of the format
+	output by MediaWiki's Special:Export system.
+	
+	Version 0.2 adds optional basic file upload info support,
+	which is used by our OAI export/import submodule.
+	
+	Version 0.3 adds some site configuration information such
+	as a list of defined namespaces.
+	
+	The canonical URL to the schema document is:
+	http://www.mediawiki.org/xml/export-0.3.xsd
+	
+	Use the namespace:
+	http://www.mediawiki.org/xml/export-0.3/
+-->
+<schema xmlns="http://www.w3.org/2001/XMLSchema"
+        xmlns:mw="http://www.mediawiki.org/xml/export-0.3/"
+        targetNamespace="http://www.mediawiki.org/xml/export-0.3/"
+        elementFormDefault="qualified">
+
+	<annotation>
+		<documentation xml:lang="en">
+			MediaWiki's page export format
+		</documentation>
+	</annotation>
+	
+	<!-- Need this to reference xml:lang -->
+	<import namespace="http://www.w3.org/XML/1998/namespace"
+		schemaLocation="http://www.w3.org/2001/xml.xsd"/>
+	
+	<!-- Our root element -->
+	<element name="mediawiki" type="mw:MediaWikiType"/>
+	
+	<complexType name="MediaWikiType">
+		<sequence>
+			<element name="siteinfo" type="mw:SiteInfoType"
+				minOccurs="0" maxOccurs="1"/>
+			<element name="page" type="mw:PageType"
+				minOccurs="0" maxOccurs="unbounded"/>
+		</sequence>
+		<attribute name="version" type="string" use="required"/>
+		<attribute ref="xml:lang" use="required"/>
+	</complexType>
+	
+	<complexType name="SiteInfoType">
+		<sequence>
+			<element name="sitename" type="string" minOccurs="0" />
+			<element name="base" type="anyURI" minOccurs="0" />
+			<element name="generator" type="string" minOccurs="0" />
+			<element name="case" type="mw:CaseType" minOccurs="0" />
+			<element name="namespaces" type="mw:NamespacesType" minOccurs="0" />
+		</sequence>
+	</complexType>
+	
+	<simpleType name="CaseType">
+		<restriction base="NMTOKEN">
+			<!-- Cannot have two titles differing only by case of first letter. -->
+			<!-- Default behavior through 1.5, $wgCapitalLinks = true -->
+			<enumeration value="first-letter" />
+			
+			<!-- Complete title is case-sensitive -->
+			<!-- Behavior when $wgCapitalLinks = false -->
+			<enumeration value="case-sensitive" />
+			
+			<!-- Cannot have two titles differing only by case. -->
+			<!-- Not yet implemented as of MediaWiki 1.5 -->
+			<enumeration value="case-insensitive" />
+		</restriction>
+	</simpleType>
+	
+	<complexType name="NamespacesType">
+		<sequence>
+			<element name="namespace" type="mw:NamespaceType"
+				minOccurs="0" maxOccurs="unbounded" />
+		</sequence>
+	</complexType>
+	
+	<complexType name="NamespaceType">
+		<simpleContent>
+			<extension base="string">
+				<attribute name="key" type="integer" />
+			</extension>
+		</simpleContent>
+	</complexType>
+	
+	<complexType name="PageType">
+		<sequence>
+			<!-- Title in text form. (Using spaces, not underscores; with namespace ) -->
+			<element name="title" type="string"/>
+			
+			<!-- optional page ID number -->
+			<element name="id" type="positiveInteger" minOccurs="0"/>
+			
+			<!-- comma-separated list of string tokens, if present -->
+			<element name="restrictions" type="string" minOccurs="0"/>
+			
+			<!-- Zero or more sets of revision or upload data -->
+			<choice minOccurs="0" maxOccurs="unbounded">
+				<element name="revision" type="mw:RevisionType" />
+				<element name="upload" type="mw:UploadType" />
+			</choice>
+		</sequence>
+	</complexType>
+	
+	<complexType name="RevisionType">
+		<sequence>
+			<element name="id" type="positiveInteger" minOccurs="0"/>
+			<element name="timestamp" type="dateTime"/>
+			<element name="contributor" type="mw:ContributorType"/>
+			<element name="minor" minOccurs="0" />
+			<element name="comment" type="string" minOccurs="0"/>
+			<element name="text" type="mw:TextType" />
+		</sequence>
+	</complexType>
+	
+	<complexType name="TextType">
+		<simpleContent>
+			<extension base="string">
+				<attribute ref="xml:space" use="optional" default="preserve" />
+			</extension>
+		</simpleContent>
+	</complexType>
+	
+	<complexType name="ContributorType">
+		<sequence>
+			<element name="username" type="string" minOccurs="0"/>
+			<element name="id" type="positiveInteger" minOccurs="0" />
+			
+			<element name="ip" type="string" minOccurs="0"/>
+		</sequence>
+	</complexType>
+	
+	<complexType name="UploadType">
+		<sequence>
+			<!-- Revision-style data... -->
+			<element name="timestamp" type="dateTime"/>
+			<element name="contributor" type="mw:ContributorType"/>
+			<element name="comment" type="string" minOccurs="0"/>
+			
+			<!-- Filename. (Using underscores, not spaces. No 'Image:' namespace marker.) -->
+			<element name="filename" type="string"/>
+			
+			<!-- URI at which this resource can be obtained -->
+			<element name="src" type="anyURI"/>
+			
+			<element name="size" type="positiveInteger" />
+			
+			<!-- TODO: add other metadata fields -->
+		</sequence>
+	</complexType>
+	
+</schema>
Index: /MediaWiki/branches/1.11/docs/export-demo.xml
===================================================================
--- /MediaWiki/branches/1.11/docs/export-demo.xml	(revision 1280)
+++ /MediaWiki/branches/1.11/docs/export-demo.xml	(revision 1280)
@@ -0,0 +1,115 @@
+<mediawiki xmlns="http://www.mediawiki.org/xml/export-0.3/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mediawiki.org/xml/export-0.3/ http://www.mediawiki.org/xml/export-0.3.xsd" version="0.3" xml:lang="en">
+
+<!-- Optional global configuration info -->
+<siteinfo>
+  <!-- Site name, as set in $wgSitename -->
+  <sitename>DemoWiki</sitename>
+  
+  <!-- Forgot where you got this set? -->
+  <base>http://example.com/wiki/Main_Page</base>
+  
+  <!-- Source software version -->
+  <generator>MediaWiki 1.5.0</generator>
+  
+  <!-- Title case sensitivity options of the wiki this data came from -->
+  <!-- May be 'first-letter', 'case-sensitive', or 'case-insensitive' -->
+  <case>first-letter</case>
+  
+  <!-- Defined namespace keys on the source wiki. -->
+  <!-- Titles can be substring-split to obtain the symbolic numeric key -->
+  <namespaces>
+    <namespace key="-2">Media</namespace>
+    <namespace key="-1">Special</namespace>
+    <namespace key="0"></namespace>
+    <namespace key="1">Talk</namespace>
+    <namespace key="2">User</namespace>
+    <namespace key="3">User talk</namespace>
+    <namespace key="4">DemoWiki</namespace>
+    <namespace key="5">DemoWIki talk</namespace>
+    <namespace key="6">Image</namespace>
+    <namespace key="7">Image talk</namespace>
+    <namespace key="8">MediaWiki</namespace>
+    <namespace key="9">MediaWiki talk</namespace>
+    <namespace key="10">Template</namespace>
+    <namespace key="11">Template talk</namespace>
+    <namespace key="12">Help</namespace>
+    <namespace key="13">Help talk</namespace>
+    <namespace key="14">Category</namespace>
+    <namespace key="15">Category talk</namespace>
+  </namespaces>
+</siteinfo>
+
+<!-- The rest of the data will be a series of page records -->
+<page>
+  <!-- Titles are listed here in text form, with namespace prefix   -->
+  <!-- if any, and spaces rather than the underscores used in URLs. -->
+  <title>Page title</title>
+  
+  <!-- The page's immutable page_id number in the source database.  -->
+  <!-- Page ID numbers are kept across page moves, but may change   -->
+  <!-- if a page is deleted and recreated.                          -->
+  <id>1</id>
+  
+  <!-- If restricted, the ACL is listed here raw. -->
+  <restrictions>edit=sysop:move=sysop</restrictions>
+  
+  <!-- With a series of revision records... -->
+  
+  <!-- Remember this is XML; if you must use a regex-based extractor -->
+  <!-- in place of a standard XML parser, be very careful.           -->
+  <!-- * Don't forget to decode character entities!                  -->
+  <!-- * If using a 'loose' XML parser, ensure that whitespace is    -->
+  <!--    preserved in the <text> elements.                          -->
+  <revision>
+    <!-- Unique revision ID number (rev_id) in the source database.  -->
+    <!-- This number uniquely identifies the revision on that wiki.  -->
+    <id>100</id>
+    
+    <timestamp>2001-01-15T13:15:00Z</timestamp>
+    <contributor><username>Foobar</username><id>42</id></contributor>
+    <minor />
+    <comment>I have just one thing to say!</comment>
+    <text xml:space="preserve">A bunch of [[text]] here.</text>
+  </revision>
+  
+  <revision>
+    <timestamp>2001-01-15T13:10:27Z</timestamp>
+    <contributor><ip>10.0.0.2</ip></contributor>
+    <comment>new!</comment>
+    <text xml:space="preserve">An earlier [[revision]].</text>
+  </revision>
+</page>
+
+<page>
+  <title>Talk:Page title</title>
+  <id>2</id>
+  <revision>
+    <id>101</id>
+    <timestamp>2001-01-15T14:03:00Z</timestamp>
+    <contributor><ip>10.0.0.2</ip></contributor>
+    <comment>hey</comment>
+    <text xml:space="preserve">WHYD YOU LOCK PAGE??!!! i was editing that jerk</text>
+  </revision>
+</page>
+
+<page>
+  <title>Image:Some image.jpg</title>
+  <id>3</id>
+  <revision>
+    <id>102</id>
+    <timestamp>2001-01-15T20:34:12Z</timestamp>
+    <contributor><username>Foobar</username><id>42</id></contributor>
+    <comment>My awesomeest image!</comment>
+    <text xml:space="preserve">This is an awesome little imgae. I lurves it. {{PD}}</text>
+  </revision>
+  <upload>
+    <timestamp>2001-01-15T20:34:12Z</timestamp>
+    <contributor><username>Foobar</username><id>42</id></contributor>
+    <comment>My awesomeest image!</comment>
+    <filename>Some_image.jpg</filename>
+    <src>http://upload.wikimedia.org/commons/2/22/Some_image.jpg</src>
+    <size>12345</size>
+  </upload>
+</page>
+
+</mediawiki>
Index: /MediaWiki/branches/1.11/docs/globals.txt
===================================================================
--- /MediaWiki/branches/1.11/docs/globals.txt	(revision 1280)
+++ /MediaWiki/branches/1.11/docs/globals.txt	(revision 1280)
@@ -0,0 +1,74 @@
+globals.txt
+
+Globals are evil. The original MediaWiki code relied on
+globals for processing context far too often. MediaWiki
+development since then has been a story of slowly moving
+context out of global variables and into objects. Storing
+processing context in object member variables allows those
+objects to be reused in a much more flexible way. Consider
+the elegance of:
+
+    # Generate the article HTML as if viewed by a web request
+    $article = new Article( Title::newFromText( $t ) );
+    $article->view();
+
+versus
+
+    # Save current globals
+    $oldTitle = $wgTitle;
+    $oldArticle = $wgArticle;
+
+    # Generate the HTML
+    $wgTitle = Title::newFromText( $t );
+    $wgArticle = new Article;
+    $wgArticle->view();
+
+    # Restore globals
+    $wgTitle = $oldTitle
+    $wgArticle = $oldArticle
+
+Some of the current MediaWiki developers have an idle
+fantasy that some day, globals will be eliminated from
+MediaWiki entirely, replaced by an application object which 
+would be passed to constructors. Whether that would be an 
+efficient, convenient solution remains to be seen, but 
+certainly PHP 5 makes such object-oriented programming 
+models easier than they were in previous versions.
+
+For the time being though, MediaWiki programmers will have
+to work in an environment with some global context. At the 
+time of writing, 418 globals were initialised on startup by 
+MediaWiki. 304 of these were configuration settings, which 
+are documented in DefaultSettings.php. There is no 
+comprehensive documentation for the remaining 114 globals, 
+however some of the most important ones are listed below. 
+They are typically initialised either in index.php or in 
+Setup.php.
+
+
+$wgOut
+	OutputPage object for HTTP response.
+
+$wgUser
+	User object for the user associated with the current
+	request.
+
+$wgTitle
+	Title object created from the request URL.
+
+$wgLang
+	Language object selected by user preferences
+
+$wgContLang
+	Language object associated with the wiki being
+	viewed.
+
+$wgArticle
+	Article object corresponding to $wgTitle.
+
+$wgParser
+	Parser object. Parser extensions register their
+	hooks here.
+
+$wgLoadBalancer
+	A LoadBalancer object, manages database connections.
Index: /MediaWiki/branches/1.11/docs/hooks.txt
===================================================================
--- /MediaWiki/branches/1.11/docs/hooks.txt	(revision 1280)
+++ /MediaWiki/branches/1.11/docs/hooks.txt	(revision 1280)
@@ -0,0 +1,594 @@
+hooks.txt
+
+This document describes how event hooks work in MediaWiki; how to add
+hooks for an event; and how to run hooks for an event.
+
+==Glossary==
+
+event
+     Something that happens with the wiki. For example: a user logs
+     in. A wiki page is saved. A wiki page is deleted. Often there are
+     two events associated with a single action: one before the code
+     is run to make the event happen, and one after. Each event has a
+     name, preferably in CamelCase. For example, 'UserLogin',
+     'ArticleSave', 'ArticleSaveComplete', 'ArticleDelete'.
+
+hook
+     A clump of code and data that should be run when an event
+     happens. This can be either a function and a chunk of data, or an
+     object and a method.
+     
+hook function
+     The function part of a hook.
+     
+==Rationale==
+
+Hooks allow us to decouple optionally-run code from code that is run
+for everyone. It allows MediaWiki hackers, third-party developers and
+local administrators to define code that will be run at certain points
+in the mainline code, and to modify the data run by that mainline
+code. Hooks can keep mainline code simple, and make it easier to
+write extensions. Hooks are a principled alternative to local patches.
+
+Consider, for example, two options in MediaWiki. One reverses the
+order of a title before displaying the article; the other converts the
+title to all uppercase letters. Currently, in MediaWiki code, we
+would handle this as follows (note: not real code, here):
+
+    function showAnArticle($article) {
+        global $wgReverseTitle, $wgCapitalizeTitle;
+	
+	if ($wgReverseTitle) {
+	    wfReverseTitle($article);
+        }
+	
+	if ($wgCapitalizeTitle) {
+	   wfCapitalizeTitle($article);
+        }
+	
+	# code to actually show the article goes here
+    }
+    
+An extension writer, or a local admin, will often add custom code to
+the function -- with or without a global variable. For example,
+someone wanting email notification when an article is shown may add:
+
+    function showAnArticle($article) {
+        global $wgReverseTitle, $wgCapitalizeTitle;
+	
+	if ($wgReverseTitle) {
+	    wfReverseTitle($article);
+        }
+	
+	if ($wgCapitalizeTitle) {
+	   wfCapitalizeTitle($article);
+        }
+
+	# code to actually show the article goes here
+	
+	if ($wgNotifyArticle) {
+	   wfNotifyArticleShow($article));
+        }
+    }
+
+Using a hook-running strategy, we can avoid having all this
+option-specific stuff in our mainline code. Using hooks, the function
+becomes:
+
+    function showAnArticle($article) {
+
+    	if (wfRunHooks('ArticleShow', array(&$article))) {
+	
+	    # code to actually show the article goes here
+	    
+	    wfRunHooks('ArticleShowComplete', array(&$article));
+	}
+    }
+
+We've cleaned up the code here by removing clumps of weird,
+infrequently used code and moving them off somewhere else. It's much
+easier for someone working with this code to see what's _really_ going
+on, and make changes or fix bugs.
+
+In addition, we can take all the code that deals with the little-used
+title-reversing options (say) and put it in one place. Instead of
+having little title-reversing if-blocks spread all over the codebase
+in showAnArticle, deleteAnArticle, exportArticle, etc., we can
+concentrate it all in an extension file:
+
+    function reverseArticleTitle($article) {
+        # ...
+    }
+
+    function reverseForExport($article) {
+        # ...
+    }
+
+The setup function for the extension just has to add its hook
+functions to the appropriate events:
+
+    setupTitleReversingExtension() {
+        global $wgHooks;
+	
+	$wgHooks['ArticleShow'][] = 'reverseArticleTitle';
+	$wgHooks['ArticleDelete'][] = 'reverseArticleTitle';
+	$wgHooks['ArticleExport'][] = 'reverseForExport';
+    }
+
+Having all this code related to the title-reversion option in one
+place means that it's easier to read and understand; you don't have to
+do a grep-find to see where the $wgReverseTitle variable is used, say.
+
+If the code is well enough isolated, it can even be excluded when not
+used -- making for some slight savings in memory and load-up
+performance at runtime. Admins who want to have all the reversed
+titles can add:
+
+    require_once('extensions/ReverseTitle.php');
+    
+...to their LocalSettings.php file; those of us who don't want or need
+it can just leave it out.
+
+The extensions don't even have to be shipped with MediaWiki; they
+could be provided by a third-party developer or written by the admin
+him/herself.
+
+==Writing hooks==
+
+A hook is a chunk of code run at some particular event. It consists of:
+
+  * a function with some optional accompanying data, or
+  * an object with a method and some optional accompanying data.
+
+Hooks are registered by adding them to the global $wgHooks array for a
+given event. All the following are valid ways to define hooks:
+
+      $wgHooks['EventName'][] = 'someFunction'; # function, no data
+      $wgHooks['EventName'][] = array('someFunction', $someData);
+      $wgHooks['EventName'][] = array('someFunction'); # weird, but OK
+      
+      $wgHooks['EventName'][] = $object; # object only
+      $wgHooks['EventName'][] = array($object, 'someMethod');
+      $wgHooks['EventName'][] = array($object, 'someMethod', $someData);
+      $wgHooks['EventName'][] = array($object); # weird but OK
+
+When an event occurs, the function (or object method) will be called
+with the optional data provided as well as event-specific parameters.
+The above examples would result in the following code being executed
+when 'EventName' happened:
+
+      # function, no data
+      someFunction($param1, $param2)
+      # function with data
+      someFunction($someData, $param1, $param2)
+
+      # object only
+      $object->onEventName($param1, $param2)
+      # object with method
+      $object->someMethod($param1, $param2)
+      # object with method and data
+      $object->someMethod($someData, $param1, $param2)
+      
+Note that when an object is the hook, and there's no specified method,
+the default method called is 'onEventName'. For different events this
+would be different: 'onArticleSave', 'onUserLogin', etc.
+
+The extra data is useful if we want to use the same function or object
+for different purposes. For example:
+
+      $wgHooks['ArticleSaveComplete'][] = array('ircNotify', 'TimStarling');
+      $wgHooks['ArticleSaveComplete'][] = array('ircNotify', 'brion');
+
+This code would result in ircNotify being run twice when an article is
+saved: once for 'TimStarling', and once for 'brion'.
+
+Hooks can return three possible values:
+
+  * true: the hook has operated successfully
+  * "some string": an error occurred; processing should
+    	  stop and the error should be shown to the user
+  * false: the hook has successfully done the work
+    	   necessary and the calling function should skip
+	
+The last result would be for cases where the hook function replaces
+the main functionality. For example, if you wanted to authenticate
+users to a custom system (LDAP, another PHP program, whatever), you
+could do:
+
+    $wgHooks['UserLogin'][] = array('ldapLogin', $ldapServer);
+			        
+    function ldapLogin($username, $password) {
+        # log user into LDAP
+	return false;
+    }
+
+Returning false makes less sense for events where the action is
+complete, and will normally be ignored.
+
+==Using hooks==
+
+A calling function or method uses the wfRunHooks() function to run
+the hooks related to a particular event, like so:
+
+    class Article { 
+        # ...
+	function protect() {
+	    global $wgUser;
+	    if (wfRunHooks('ArticleProtect', array(&$this, &$wgUser))) {
+	        # protect the article
+		wfRunHooks('ArticleProtectComplete', array(&$this, &$wgUser));
+	    }
+	}
+						    
+wfRunHooks() returns true if the calling function should continue
+processing (the hooks ran OK, or there are no hooks to run), or false
+if it shouldn't (an error occurred, or one of the hooks handled the
+action already). Checking the return value matters more for "before"
+hooks than for "complete" hooks.
+
+Note that hook parameters are passed in an array; this is a necessary
+inconvenience to make it possible to pass reference values (that can
+be changed) into the hook code. Also note that earlier versions of
+wfRunHooks took a variable number of arguments; the array() calling
+protocol came about after MediaWiki 1.4rc1.
+
+==Events and parameters==
+
+This is a list of known events and parameters; please add to it if
+you're going to add events to the MediaWiki code.
+
+'AbortNewAccount': Return false to cancel account creation.
+$user: the User object about to be created (read-only, incomplete)
+$message: out parameter: error message to display on abort
+
+'AddNewAccount': after a user account is created
+$user: the User object that was created. (Parameter added in 1.7)
+
+'ArticleDelete': before an article is deleted
+$article: the article (object) being deleted
+$user: the user (object) deleting the article
+$reason: the reason (string) the article is being deleted
+
+'ArticleDeleteComplete': after an article is deleted
+$article: the article that was deleted
+$user: the user that deleted the article
+$reason: the reason the article was deleted
+
+'ArticleProtect': before an article is protected
+$article: the article being protected
+$user: the user doing the protection
+$protect: boolean whether this is a protect or an unprotect
+$reason: Reason for protect
+$moveonly: boolean whether this is for move only or not
+
+'ArticleProtectComplete': after an article is protected
+$article: the article that was protected
+$user: the user who did the protection
+$protect: boolean whether it was a protect or an unprotect
+$reason: Reason for protect
+$moveonly: boolean whether it was for move only or not
+
+'ArticleSave': before an article is saved
+$article: the article (object) being saved
+$user: the user (object) saving the article
+$text: the new article text
+$summary: the article summary (comment)
+$isminor: minor flag
+$iswatch: watch flag
+$section: section #
+
+'ArticleSaveComplete': after an article is saved
+$article: the article (object) saved
+$user: the user (object) who saved the article
+$text: the new article text
+$summary: the article summary (comment)
+$isminor: minor flag
+$iswatch: watch flag
+$section: section #
+
+'ArticleUndeleted': When one or more revisions of an article are restored
+$title: Title corresponding to the article restored
+$create: Whether or not the restoration caused the page to be created
+(i.e. it didn't exist before)
+
+'AuthPluginSetup': update or replace authentication plugin object ($wgAuth)
+Gives a chance for an extension to set it programattically to a variable class.
+&$auth: the $wgAuth object, probably a stub
+
+'AutoAuthenticate': called to authenticate users on external/environmental means
+$user: writes user object to this parameter
+
+'BadImage': When checking against the bad image list
+$name: Image name being checked
+&$bad: Whether or not the image is "bad"
+
+Change $bad and return false to override. If an image is "bad", it is not
+rendered inline in wiki pages or galleries in category pages.
+
+'BlockIp': before an IP address or user is blocked
+$block: the Block object about to be saved
+$user: the user _doing_ the block (not the one being blocked)
+
+'BlockIpComplete': after an IP address or user is blocked
+$block: the Block object that was saved
+$user: the user who did the block (not the one being blocked)
+
+'BookInformation': Before information output on Special:Booksources
+$isbn: ISBN to show information for
+$output: OutputPage object in use
+
+'CustomEditor': When invoking the page editor
+$article: Article being edited
+$user: User performing the edit
+
+Return true to allow the normal editor to be used, or false
+if implementing a custom editor, e.g. for a special namespace,
+etc.
+
+'DiffViewHeader': called before diff display
+$diff: DifferenceEngine object that's calling
+$oldRev: Revision object of the "old" revision (may be null/invalid)
+$newRev: Revision object of the "new" revision
+
+'EditPage::attemptSave': called before an article is
+saved, that is before insertNewArticle() is called
+&$editpage_Obj: the current EditPage object
+
+'EditFormPreloadText': Allows population of the edit form when creating new pages
+&$text: Text to preload with
+&$title: Title object representing the page being created
+
+'EditPage::showEditForm:fields': allows injection of form field into edit form
+&$editor: the EditPage instance for reference
+&$out: an OutputPage instance to write to
+return value is ignored (should always return true)
+
+'EditFilter': Perform checks on an edit
+$editor: Edit form (see includes/EditPage.php)
+$text: Contents of the edit box
+$section: Section being edited
+&$error: Error message to return
+
+Return false to halt editing; you'll need to handle error messages, etc. yourself.
+Alternatively, modifying $error and returning true will cause the contents of $error
+to be echoed at the top of the edit form as wikitext. Return true without altering
+$error to allow the edit to proceed.
+
+'EmailConfirmed': When checking that the user's email address is "confirmed"
+$user: User being checked
+$confirmed: Whether or not the email address is confirmed
+This runs before the other checks, such as anonymity and the real check; return
+true to allow those checks to occur, and false if checking is done.
+
+'EmailUser': before sending email from one user to another
+$to: address of receiving user
+$from: address of sending user
+$subject: subject of the mail
+$text: text of the mail
+
+'EmailUserComplete': after sending email from one user to another
+$to: address of receiving user
+$from: address of sending user
+$subject: subject of the mail
+$text: text of the mail
+
+'FetchChangesList': When fetching the ChangesList derivative for a particular user
+&$user: User the list is being fetched for
+&$skin: Skin object to be used with the list
+&$list: List object (defaults to NULL, change it to an object instance and return
+false override the list derivative used)
+
+'FileUpload': When a file upload occurs
+$file : Image object representing the file that was uploaded
+
+'GetInternalURL': modify fully-qualified URLs used for squid cache purging
+$title: Title object of page
+$url: string value as output (out parameter, can modify)
+$query: query options passed to Title::getInternalURL()
+
+'GetLocalURL': modify local URLs as output into page links
+$title: Title object of page
+$url: string value as output (out parameter, can modify)
+$query: query options passed to Title::getLocalURL()
+
+'GetFullURL': modify fully-qualified URLs used in redirects/export/offsite data
+$title: Title object of page
+$url: string value as output (out parameter, can modify)
+$query: query options passed to Title::getFullURL()
+
+'InternalParseBeforeLinks': during Parser's internalParse method before links but
+after noinclude/includeonly/onlyinclude and other processing.
+&$this: Parser object
+&$text: string containing partially parsed text
+&$this->mStripState: Parser's internal StripState object
+
+'LogPageValidTypes': action being logged. DEPRECATED: Use $wgLogTypes
+&$type: array of strings
+
+'LogPageLogName': name of the logging page(s). DEPRECATED: Use $wgLogNames
+&$typeText: array of strings
+
+'LogPageLogHeader': strings used by wfMsg as a header. DEPRECATED: Use $wgLogHeaders
+&$headerText: array of strings
+
+'LogPageActionText': strings used by wfMsg as a header. DEPRECATED: Use $wgLogActions
+&$actionText: array of strings
+
+'MarkPatrolled': before an edit is marked patrolled
+$rcid: ID of the revision to be marked patrolled
+$user: the user (object) marking the revision as patrolled
+$wcOnlySysopsCanPatrol: config setting indicating whether the user
+ needs to be a sysop in order to mark an edit patrolled
+
+'MarkPatrolledComplete': after an edit is marked patrolled
+$rcid: ID of the revision marked as patrolled
+$user: user (object) who marked the edit patrolled
+$wcOnlySysopsCanPatrol: config setting indicating whether the user
+ must be a sysop to patrol the edit
+
+'MathAfterTexvc': after texvc is executed when rendering mathematics
+$mathRenderer: instance of MathRenderer
+$errmsg: error message, in HTML (string). Nonempty indicates failure
+ of rendering the formula
+
+'OutputPageBeforeHTML': a page has been processed by the parser and
+the resulting HTML is about to be displayed.  
+$parserOutput: the parserOutput (object) that corresponds to the page 
+$text: the text that will be displayed, in HTML (string)
+
+'PageHistoryBeforeList': When a history page list is about to be constructed.
+$article: the article that the history is loading for
+
+'PageHistoryLineEnding' : right before the end <li> is added to a history line
+$row: the revision row for this line
+$s: the string representing this parsed line
+
+'PageRenderingHash': alter the parser cache option hash key
+  A parser extension which depends on user options should install
+  this hook and append its values to the key.
+$hash: reference to a hash key string which can be modified
+
+'ParserTestTables': alter the list of tables to duplicate when parser tests
+are run. Use when page save hooks require the presence of custom tables
+to ensure that tests continue to run properly.
+&$tables: array of table names
+
+'PersonalUrls': Alter the user-specific navigation links (e.g. "my page,
+my talk page, my contributions" etc).
+
+&$personal_urls: Array of link specifiers (see SkinTemplate.php)
+&$title: Title object representing the current page
+
+'PingLimiter': Allows extensions to override the results of User::pingLimiter()
+&$user : User performing the action
+$action : Action being performed
+&$result : Whether or not the action should be prevented
+Change $result and return false to give a definitive answer, otherwise
+the built-in rate limiting checks are used, if enabled.
+
+'PreferencesUserInformationPanel': Add HTML bits to user information list in preferences form
+$form : PreferencesForm object
+&$html : HTML to append to
+
+'RawPageViewBeforeOutput': Right before the text is blown out in action=raw
+&$obj: RawPage object
+&$text: The text that's going to be the output
+
+'SearchUpdate': Prior to search update completion
+$id : Page id
+$namespace : Page namespace
+$title : Page title
+$text : Current text being indexed
+
+'SiteNoticeBefore': Before the sitenotice/anonnotice is composed
+&$siteNotice: HTML returned as the sitenotice
+Return true to allow the normal method of notice selection/rendering to work,
+or change the value of $siteNotice and return false to alter it.
+
+'SiteNoticeAfter': After the sitenotice/anonnotice is composed
+&$siteNotice: HTML sitenotice
+Alter the contents of $siteNotice to add to/alter the sitenotice/anonnotice.
+
+'SkinTemplateOutputPageBeforeExec': Before SkinTemplate::outputPage() starts page output
+&$sktemplate: SkinTemplate object
+&$tpl: Template engine object
+
+'TitleMoveComplete': after moving an article (title)
+$old: old title
+$nt: new title
+$user: user who did the move
+$pageid: database ID of the page that's been moved
+$redirid: database ID of the created redirect
+
+'UnknownAction': An unknown "action" has occured (useful for defining
+		 your own actions)
+$action: action name
+$article: article "acted on"
+
+'UnwatchArticle': before a watch is removed from an article
+$user: user watching
+$article: article object to be removed
+
+'UnwatchArticle': after a watch is removed from an article
+$user: user that was watching
+$article: article object removed
+
+'UploadForm:initial': before the upload form is generated
+$form: UploadForm object
+You might set the member-variables $uploadFormTextTop and 
+$uploadFormTextAfterSummary to inject text (HTML) either before
+or after the editform.
+
+'UploadForm:BeforeProcessing': at the beginning of processUpload()
+$form: UploadForm object
+Lets you poke at member variables like $mUploadDescription before the
+file is saved.
+
+'UploadVerification': additional chances to reject an uploaded file
+string $saveName: destination file name
+string $tempName: filesystem path to the temporary file for checks
+string &$error: output: HTML error to show if upload canceled by returning false
+
+'UploadComplete': Upon completion of a file upload
+$image: Image object representing the file that was uploaded
+
+'UserCan': To interrupt/advise the "user can do X to Y article" check
+$title: Title object being checked against
+$user : Current user object
+$action: Action being checked
+$result: Pointer to result returned if hook returns false. If null is returned,
+ UserCan checks are continued by internal code
+
+'UserCreateForm': change to manipulate the login form
+$template: SimpleTemplate instance for the form
+
+'UserLoginComplete': after a user has logged in
+$user: the user object that was created on login
+		    
+'UserLoginForm': change to manipulate the login form
+$template: SimpleTemplate instance for the form
+
+'UserLogout': before a user logs out
+$user: the user object that is about to be logged out
+       
+'UserLogoutComplete': after a user has logged out
+$user: the user object _after_ logout (won't have name, ID, etc.)
+
+'UserRights': After a user's group memberships are changed
+$user  : User object that was changed
+$add   : Array of strings corresponding to groups added
+$remove: Array of strings corresponding to groups removed
+		      
+'WatchArticle': before a watch is added to an article
+$user: user that will watch
+$article: article object to be watched
+
+'WatchArticleComplete': after a watch is added to an article
+$user: user that watched
+$article: article object watched
+
+'UnwatchArticleComplete': after a watch is removed from an article
+$user: user that watched
+$article: article object that was watched
+
+'CategoryPageView': before viewing a categorypage in CategoryPage::view
+$catpage: CategoryPage instance
+
+'SkinTemplateContentActions': after building the $content_action array right
+                              before returning it, see Content_action.php in
+                              the extensions/examples/ directory
+                              ( http://svn.wikimedia.org/viewvc/mediawiki/trunk/extensions/examples/ )
+                              for a demonstration of how to use this hook.
+$content_actions: The array of content actions
+
+'BeforePageDisplay': Called just before outputting a page (all kinds of,
+		     articles, special, history, preview, diff, edit, ...)
+		     Can be used to set custom CSS/JS
+$out: OutputPage object
+
+'AjaxAddScript': Called in output page just before the initialisation
+of the javascript ajax engine. The hook is only called when ajax
+is enabled ( $wgUseAjax = true; ).
+
+More hooks might be available but undocumented, you can execute
+./maintenance/findhooks.php to find hidden one.
Index: /MediaWiki/branches/1.11/docs/html/README
===================================================================
--- /MediaWiki/branches/1.11/docs/html/README	(revision 1280)
+++ /MediaWiki/branches/1.11/docs/html/README	(revision 1280)
@@ -0,0 +1,4 @@
+This directory is for the auto-generated phpdoc documentation.
+Run 'php mwdocgen.php' in the maintenance subdirectory to build the docs.
+
+Get phpDocumentor from http://phpdoc.org/
Index: /MediaWiki/branches/1.11/docs/language.txt
===================================================================
--- /MediaWiki/branches/1.11/docs/language.txt	(revision 1280)
+++ /MediaWiki/branches/1.11/docs/language.txt	(revision 1280)
@@ -0,0 +1,24 @@
+language.txt
+
+The Language object handles all readable text produced by the
+software. The most used function is getMessage(), usually
+called with the wrapper function wfMsg() which calls that method
+on the global language object. It just returns a piece of text
+given a text key. It is recommended that you use each key only
+once--bits of text in different contexts that happen to be
+identical in English may not be in other languages, so it's
+better to add new keys than to reuse them a lot. Likewise,
+if there is text that gets combined with things like names and
+titles, it is better to put markers like "$1" inside a piece
+of text and use str_replace() than to compose such messages in
+code, because their order may change in other languages too.
+
+While the system is running, there will be one global language
+object, which will be a subtype of Language. The methods in
+these objects will return the native text requested if available,
+otherwise they fall back to sending English text (which is why
+the LanguageEn object has no code at all--it just inherits the
+English defaults of the Language base class).
+
+The names of the namespaces are also contained in the language
+object, though the numbers are fixed.
Index: /MediaWiki/branches/1.11/docs/linkcache.txt
===================================================================
--- /MediaWiki/branches/1.11/docs/linkcache.txt	(revision 1280)
+++ /MediaWiki/branches/1.11/docs/linkcache.txt	(revision 1280)
@@ -0,0 +1,18 @@
+linkcache.txt
+
+The LinkCache class maintains a list of article titles and
+the information about whether or not the article exists in
+the database. This is used to mark up links when displaying
+a page. If the same link appears more than once on any page,
+then it only has to be looked up once. In most cases, link
+lookups are done in batches with the LinkBatch class, or the
+equivalent in Parser::replaceLinkHolders(), so the link
+cache is mostly useful for short snippets of parsed text
+(such as the site notice), and for links in the navigation
+areas of the skin. 
+
+The link cache was formerly used to track links used in a
+document for the purposes of updating the link tables. This
+application is now deprecated.
+
+
Index: /MediaWiki/branches/1.11/docs/magicword.txt
===================================================================
--- /MediaWiki/branches/1.11/docs/magicword.txt	(revision 1280)
+++ /MediaWiki/branches/1.11/docs/magicword.txt	(revision 1280)
@@ -0,0 +1,44 @@
+magicword.txt
+
+Magic Words are some phrases used in the wikitext. They are defined in several arrays:
+* $magicWords (includes/MagicWord.php) includes their internal names ('MAG_XXX').
+* $wgVariableIDs (includes/MagicWord.php) includes their IDs (MAG_XXX, which are constants),
+  after their internal names are used for "define()".
+* Localized arrays (languages/LanguageXX.php) include their different names to be used by the users.
+
+The localized arrays keys are the internal IDs, and the values are an array, whose include their
+case-sensitivity and their alias forms. The first form defined is used by the program, for example,
+when moving a page and its old name should include #REDIRECT.
+
+Adding magic words should be done using several hooks:
+* "MagicWordMagicWords" should be used to add the internal name ('MAG_XXX') to $magicWords.
+* "MagicWordwgVariableIDs" should be used to add the ID (MAG_XXX constant) to $wgVariableIDs.
+* "LanguageGetMagic" should be used to add the different names of the magic word. Use both
+  the localized name and the English name. Get the language code by the parameter $langCode;
+
+For example:
+
+$wgHooks['MagicWordMagicWords'][] = 'wfAddCustomMagicWord';
+$wgHooks['MagicWordwgVariableIDs'][] = 'wfAddCustomMagicWordID';
+$wgHooks['LanguageGetMagic'][] = 'wfAddCustomMagicWordLang';
+
+function wfAddCustomMagicWord( &$magicWords ) {
+	$magicWords[] = 'MAG_CUSTOM';
+	return true;
+}
+
+function wfAddCustomMagicWordID( &$magicWords ) {
+	$magicWords[] = MAG_CUSTOM;
+	return true;
+}
+
+function wfAddCustomMagicWordLang( &$magicWords, $langCode ) {
+	switch ( $langCode ) {
+		case 'es':
+			$magicWords[MAG_CUSTOM] = array( 0, "#aduanero", "#custom" );
+			break;
+		default:
+			$magicWords[MAG_CUSTOM] = array( 0, "#custom" );
+	}
+	return true;
+}
Index: /MediaWiki/branches/1.11/docs/memcached.txt
===================================================================
--- /MediaWiki/branches/1.11/docs/memcached.txt	(revision 1280)
+++ /MediaWiki/branches/1.11/docs/memcached.txt	(revision 1280)
@@ -0,0 +1,130 @@
+memcached support for MediaWiki:
+
+From ca August 2003, MediaWiki has optional support for memcached, a
+"high-performance, distributed memory object caching system".
+For general information on it, see: http://www.danga.com/memcached/
+
+Memcached is likely more trouble than a small site will need, but
+for a larger site with heavy load, like Wikipedia, it should help
+lighten the load on the database servers by caching data and objects
+in memory.
+
+== Requirements ==
+
+* PHP must be compiled with --enable-sockets
+
+* libevent: http://www.monkey.org/~provos/libevent/
+  (as of 2003-08-11, 0.7a is current)
+
+* optionally, epoll-rt patch for Linux kernel:
+  http://www.xmailserver.org/linux-patches/nio-improve.html
+
+* memcached: http://www.danga.com/memcached/download.bml
+  (as of this writing, 1.1.9 is current)
+  
+Memcached and libevent are under BSD-style licenses.
+
+The server should run on Linux and other Unix-like systems... you
+can run multiple servers on one machine or on multiple machines on
+a network; storage can be distributed across multiple servers, and
+multiple web servers can use the same cache cluster.
+
+********************* W A R N I N G ! ! ! ! ! ***********************
+Memcached has no security or authentication. Please ensure that your
+server is appropriately firewalled, and that the port(s) used for
+memcached servers are not publicly accessible. Otherwise, anyone on
+the internet can put data into and read data from your cache.
+
+An attacker familiar with MediaWiki internals could use this to give
+themselves developer access and delete all data from the wiki's
+database, as well as getting all users' password hashes and e-mail
+addresses.
+********************* W A R N I N G ! ! ! ! ! ***********************
+
+== Setup ==
+
+If you want to start small, just run one memcached on your web
+server:
+
+  memcached -d -l 127.0.0.1 -p 11000 -m 64
+
+(to run in daemon mode, accessible only via loopback interface,
+on port 11000, using up to 64MB of memory)
+
+In your LocalSettings.php file, set:
+
+	$wgMainCacheType = CACHE_MEMCACHED;;
+	$wgMemCachedServers = array( "127.0.0.1:11000" );
+
+The wiki should then use memcached to cache various data. To use
+multiple servers (physically separate boxes or multiple caches
+on one machine on a large-memory x86 box), just add more items
+to the array. To increase the weight of a server (say, because
+it has twice the memory of the others and you want to spread
+usage evenly), make its entry a subarray:
+
+  $wgMemCachedServers = array(
+    "127.0.0.1:11000", # one gig on this box
+    array("192.168.0.1:11000", 2 ) # two gigs on the other box
+  );
+
+== PHP client for memcached ==
+
+As of this writing, MediaWiki includes version 1.0.10 of the PHP
+memcached client by Ryan Gilfether <hotrodder@rocketmail.com>.
+You'll find some documentation for it in the 'php-memcached'
+subdirectory under the present one.
+
+We intend to track updates, but if you want to check for the lastest
+released version, see http://www.danga.com/memcached/apis.bml
+
+If you don't set $wgUseMemCached, we still create a MemCacheClient,
+but requests to it are no-ops and we always fall through to the
+database. If the cache daemon can't be contacted, it should also
+disable itself fairly smoothly.
+
+== Keys used ==
+
+User:
+	key: $wgDBname:user:id:$sId
+	ex: wikidb:user:id:51
+	stores: instance of class User
+	set in: User::loadFromSession()
+	cleared by: User::saveSettings(), UserTalkUpdate::doUpdate()
+	
+Newtalk:
+	key: $wgDBname:newtalk:ip:$ip
+	ex: wikidb:newtalk:ip:123.45.67.89
+	stores: integer, 0 or 1
+	set in: User::loadFromDatabase()
+	cleared by: User::saveSettings() # ?
+	expiry set to 30 minutes
+
+LinkCache:
+	key: $wgDBname:lc:title:$title
+	ex: wikidb:lc:title:Wikipedia:Welcome,_Newcomers!
+	stores: cur_id of page, or 0 if page does not exist
+	set in: LinkCache::addLink()
+	cleared by: LinkCache::clearBadLink()
+		should be cleared on page deletion and rename
+MediaWiki namespace:
+	key: $wgDBname:messages
+	ex: wikidb:messages
+	stores: an array where the keys are DB keys and the values are messages
+	set in: wfMsg(), Article::editUpdates() both call wfLoadAllMessages()
+	cleared by: nothing
+
+Watchlist:
+	key: $wgDBname:watchlist:id:$userID
+	ex: wikidb:watchlist:id:4635
+	stores: HTML string
+	cleared by: nothing, expiry time $wgWLCacheTimeout (1 hour)
+	note: emergency optimisation only
+
+IP blocks:
+	key: $wgDBname:ipblocks
+	ex: wikidb:ipblocks
+	stores: array of arrays, for the BlockCache class
+	cleared by: BlockCache:clear()
+	
+... more to come ...
Index: /MediaWiki/branches/1.11/docs/php-memcached/ChangeLog
===================================================================
--- /MediaWiki/branches/1.11/docs/php-memcached/ChangeLog	(revision 1280)
+++ /MediaWiki/branches/1.11/docs/php-memcached/ChangeLog	(revision 1280)
@@ -0,0 +1,45 @@
+Release 1.0.10
+--------------
+* bug fix: changes hashing function to crc32, sprintf %u
+* feature: optional compression
+
+Release 1.0.9
+-------------
+* protocol parsing bug
+
+Release 1.0.8
+-------------
+* whitespace/punctuation/wording cleanups
+
+Release 1.0.7
+-------------
+* added 3 functions which handle error reporting
+  error() - returns error number of last error generated, else returns 0
+  error_string() - returns a string description of error number retuned
+  error_clear() - clears the last error number and error string
+* removed call to preg_match() in _loaditems()
+* only non-scalar values are serialize() before being
+  sent to the server
+* added the optional timestamp argument for delete()
+  read Documentation file for details
+* PHPDocs/PEAR style comments added
+* abstract debugging (Brion Vibber <brion@pobox.com>)
+	
+Release 1.0.6
+-------------
+* removed all array_push() calls
+* applied patch provided by Stuart Herbert<stuart@gentoo.org>
+  corrects possible endless loop. Available at
+  http://bugs.gentoo.org/show_bug.cgi?id=25385
+* fixed problem with storing large binary files
+* added more error checking, specifically on all socket functions
+* added support for the INCR and DECR commands
+  which increment or decrement a value stored in MemCached
+* Documentation removed from source and is now available
+  in the file Documentation
+
+Release 1.0.4
+-------------
+* initial release, version numbers kept
+  in sync with MemCached version
+* capable of storing any datatype in MemCached
Index: /MediaWiki/branches/1.11/docs/php-memcached/Documentation
===================================================================
--- /MediaWiki/branches/1.11/docs/php-memcached/Documentation	(revision 1280)
+++ /MediaWiki/branches/1.11/docs/php-memcached/Documentation	(revision 1280)
@@ -0,0 +1,258 @@
+Ryan Gilfether <hotrodder@rocketmail.com>
+http://www.gilfether.com
+This module is Copyright (c) 2003 Ryan Gilfether.
+All rights reserved.
+
+You may distribute under the terms of the GNU General Public License
+This is free software. IT COMES WITHOUT WARRANTY OF ANY KIND.
+
+See the memcached website: http://www.danga.com/memcached/
+
+
+// Takes one parameter, a array of options.  The most important key is
+// options["servers"], but that can also be set later with the set_servers()
+// method.  The servers must be an array of hosts, each of which is
+// either a scalar of the form <10.0.0.10:11211> or an array of the
+// former and an integer weight value.  (the default weight if
+// unspecified is 1.)  It's recommended that weight values be kept as low
+// as possible, as this module currently allocates memory for bucket
+// distribution proportional to the total host weights.
+// $options["debug"] turns the debugging on if set to true
+MemCachedClient::MemCachedClient($options);
+
+// sets up the list of servers and the ports to connect to
+// takes an array of servers in the same format as in the constructor
+MemCachedClient::set_servers($servers);
+
+// Retrieves a key from the memcache.  Returns the value (automatically
+// unserialized, if necessary) or FALSE if it fails.
+// The $key can optionally be an array, with the first element being the
+// hash value, if you want to avoid making this module calculate a hash
+// value.  You may prefer, for example, to keep all of a given user's
+// objects on the same memcache server, so you could use the user's
+// unique id as the hash value.
+// Possible errors set are:
+// 		MC_ERR_GET
+MemCachedClient::get($key);
+
+// just like get(), but takes an array of keys, returns FALSE on error
+// Possible errors set are:
+// 		MC_ERR_NOT_ACTIVE
+MemCachedClient::get_multi($keys)
+
+// Unconditionally sets a key to a given value in the memcache.  Returns true
+// if it was stored successfully.
+// The $key can optionally be an arrayref, with the first element being the
+// hash value, as described above.
+// returns TRUE on success else FALSE
+// Possible errors set are:
+// 		MC_ERR_NOT_ACTIVE
+// 		MC_ERR_GET_SOCK
+// 		MC_ERR_SOCKET_WRITE
+// 		MC_ERR_SOCKET_READ
+// 		MC_ERR_SET
+MemCachedClient::set($key, $value, $exptime);
+
+// Like set(), but only stores in memcache if the key doesn't already exist.
+// returns TRUE on success else FALSE
+// Possible errors set are:
+// 		MC_ERR_NOT_ACTIVE
+// 		MC_ERR_GET_SOCK
+// 		MC_ERR_SOCKET_WRITE
+// 		MC_ERR_SOCKET_READ
+// 		MC_ERR_SET
+MemCachedClient::add($key, $value, $exptime);
+
+// Like set(), but only stores in memcache if the key already exists.
+// returns TRUE on success else FALSE
+// Possible errors set are:
+// 		MC_ERR_NOT_ACTIVE
+// 		MC_ERR_GET_SOCK
+// 		MC_ERR_SOCKET_WRITE
+// 		MC_ERR_SOCKET_READ
+// 		MC_ERR_SET
+MemCachedClient::replace($key, $value, $exptime);
+
+// removes the key from the MemCache
+// $time is the amount of time in seconds (or Unix time) until which
+// the client wishes the server to refuse "add" and "replace" commands
+// with this key. For this amount of item, the item is put into a
+// delete queue, which means that it won't possible to retrieve it by
+// the "get" command, but "add" and "replace" command with this key
+// will also fail (the "set" command will succeed, however). After the
+// time passes, the item is finally deleted from server memory.
+// The parameter $time is optional, and, if absent, defaults to 0
+// (which means that the item will be deleted immediately and further
+// storage commands with this key will succeed).
+// returns TRUE on success else returns FALSE
+// Possible errors set are:
+// 		MC_ERR_NOT_ACTIVE
+// 		MC_ERR_GET_SOCK
+// 		MC_ERR_SOCKET_WRITE
+// 		MC_ERR_SOCKET_READ
+// 		MC_ERR_DELETE
+MemCachedClient::delete($key, $time = 0);
+
+// Sends a command to the server to atomically increment the value for
+// $key by $value, or by 1 if $value is undefined.  Returns FALSE if $key
+// doesn't exist on server, otherwise it returns the new value after
+// incrementing.  Value should be zero or greater.  Overflow on server
+// is not checked.  Be aware of values approaching 2**32.  See decr.
+// Possible errors set are:
+// 		MC_ERR_NOT_ACTIVE
+// 		MC_ERR_GET_SOCK
+// 		MC_ERR_SOCKET_WRITE
+// 		MC_ERR_SOCKET_READ
+// returns new value on success, else returns FALSE
+// ONLY WORKS WITH NUMERIC VALUES
+MemCachedClient::incr($key[, $value]);
+
+// Like incr, but decrements.  Unlike incr, underflow is checked and new
+// values are capped at 0.  If server value is 1, a decrement of 2
+// returns 0, not -1.
+// Possible errors set are:
+// 		MC_ERR_NOT_ACTIVE
+// 		MC_ERR_GET_SOCK
+// 		MC_ERR_SOCKET_WRITE
+// 		MC_ERR_SOCKET_READ
+// returns new value on success, else returns FALSE
+// ONLY WORKS WITH NUMERIC VALUES
+MemCachedClient::decr($key[, $value]);
+
+// disconnects from all servers
+MemCachedClient::disconnect_all();
+
+// if $do_debug is set to true, will print out
+// debugging info, else debug is turned off
+MemCachedClient::set_debug($do_debug);
+
+// remove all cached hosts that are no longer good
+MemCachedClient::forget_dead_hosts();
+
+// When a function returns FALSE, an error code is set.
+// This funtion will return the error code.
+// See error_string()
+// returns last error code set
+MemCachedClient::error()
+
+// Returns a string describing the error set in error()
+// See error()
+// returns a string describing the error code given
+MemCachedClient::error_string()
+
+// Resets the error number and error string
+MemCachedClient::error_clear()
+
+Error codes are as follows:
+MC_ERR_NOT_ACTIVE		// no active servers
+MC_ERR_SOCKET_WRITE		// socket_write() failed
+MC_ERR_SOCKET_READ		// socket_read() failed
+MC_ERR_SOCKET_CONNECT	// failed to connect to host
+MC_ERR_DELETE			// delete() did not recieve DELETED command
+MC_ERR_HOST_FORMAT		// sock_to_host() invalid host format
+MC_ERR_HOST_DEAD		// sock_to_host() host is dead
+MC_ERR_GET_SOCK			// get_sock() failed to find a valid socket
+MC_ERR_SET				// _set() failed to receive the STORED response
+MC_ERR_LOADITEM_HEADER	// _load_items failed to receive valid data header
+MC_ERR_LOADITEM_END		// _load_items failed to receive END response
+MC_ERR_LOADITEM_BYTES	// _load_items bytes read larger than bytes available
+MC_ERR_GET				// failed to get value associated with key
+
+// Turns compression on or off; 0=off, 1=on
+MemCacheClient::set_compression($setting)
+
+EXAMPLE:
+<?php
+require("MemCachedClient.inc.php");
+
+// set the servers, with the last one having an interger weight value of 3
+$options["servers"] = array("10.0.0.15:11000","10.0.0.16:11001",array("10.0.0.17:11002", 3));
+$options["debug"] = false;
+
+$memc = new MemCachedClient($options);
+
+
+/***********************
+ * STORE AN ARRAY
+ ***********************/
+$myarr = array("one","two", 3);
+$memc->set("key_one", $myarr);
+$val = $memc->get("key_one");
+print $val[0]."\n";	// prints 'one'
+print $val[1]."\n";	// prints 'two'
+print $val[2]."\n";	// prints 3
+
+
+print "\n";
+
+
+/***********************
+ * STORE A CLASS
+ ***********************/
+class tester
+{
+	var $one;
+	var $two;
+	var $three;
+}
+
+$t = new tester;
+$t->one = "one";
+$t->two = "two";
+$t->three = 3;
+$memc->set("key_two", $t);
+$val = $memc->get("key_two");
+print $val->one."\n";
+print $val->two."\n";
+print $val->three."\n";
+
+
+print "\n";
+
+
+/***********************
+ * STORE A STRING
+ ***********************/
+$memc->set("key_three", "my string");
+$val = $memc->get("key_three");
+print $val;		// prints 'my string'
+
+$memc->delete("key_one");
+$memc->delete("key_two");
+$memc->delete("key_three");
+
+$memc->disconnect_all();
+
+
+
+print "\n";
+
+
+/***********************
+ * STORE A BINARY FILE
+ ***********************/
+
+ // first read the file and save it in memcache
+$fp = fopen( "./image.jpg", "rb" ) ;
+if ( !$fp )
+{
+	print "Could not open ./file.dat!\n" ;
+	exit ;
+}
+$data = fread( $fp, filesize( "./image.jpg" ) ) ;
+fclose( $fp ) ;
+print "Data length is " . strlen( $data ) . "\n" ;
+$memc->set( "key", $data ) ;
+
+// now open a file for writing and write the data
+// retrieved from memcache
+$fp = fopen("./test.jpg","wb");
+$data = $memc->get( "key" ) ;
+print "Data length is " . strlen( $data ) . "\n" ;
+fwrite($fp,$data,strlen( $data ));
+fclose($fp);
+
+
+?>
+
+
Index: /MediaWiki/branches/1.11/docs/schema.txt
===================================================================
--- /MediaWiki/branches/1.11/docs/schema.txt	(revision 1280)
+++ /MediaWiki/branches/1.11/docs/schema.txt	(revision 1280)
@@ -0,0 +1,6 @@
+The most up-to-date schema for the tables in the database
+will always be "tables.sql" in the maintenance directory,
+which is called from the installation script.
+
+That file has been commented with details of the usage for
+each table and field.
Index: /MediaWiki/branches/1.11/docs/skin.txt
===================================================================
--- /MediaWiki/branches/1.11/docs/skin.txt	(revision 1280)
+++ /MediaWiki/branches/1.11/docs/skin.txt	(revision 1280)
@@ -0,0 +1,48 @@
+
+skin.txt
+
+This document describes the overall architecture of MediaWiki's HTML rendering
+code as well as some history about the skin system. It is placed here rather
+than in comments in the code itself to help reduce the code size.
+
+== Version 1.4 ==
+
+MediaWiki still use the PHPTal skin system introduced in version 1.3 but some
+changes have been made to the file organisation.
+
+PHP class and PHPTal templates have been moved to /skins/ (respectivly from
+/includes/ and /templates/). This way skin designer and end user just stick to
+one directory.
+
+Two samples are provided to start with, one for PHPTal use (SkinPHPTal.sample)
+and one without (Skin.sample).
+
+
+== Version 1.3 ==
+
+The following might help a bit though.
+
+Firstly, there's Skin.php; this file will check various settings, and it 
+contains a base class from which new skins can be derived.
+
+Before version 1.3, each skin had its own PHP file (with a sub-class to Skin) 
+to generate the output. The files are:
+ * SkinCologneBlue.php
+ * SkinNostalgia.php
+ * SkinStandard.php
+ * SkinWikimediaWiki.php
+If you want to change those skins, you have to edit these PHP files.
+ 
+Since 1.3 a new special skin file is available: SkinPHPTal.php. It makes use of
+the PHPTal template engine and allows you to separate code and layout of the
+pages. The default 1.3 skin is MonoBook and it uses the SkinPHPTAL class.
+
+To change the layout, just edit the PHPTal template (templates/xhtml_slim.pt) 
+as well as the stylesheets (stylesheets/monobook/*).
+
+
+== pre 1.3 version ==
+
+Unfortunately there isn't any documentation, and the code's in a bit of a mess
+right now during the transition from the old skin code to the new template-based
+skin code in 1.3.
Index: /MediaWiki/branches/1.11/docs/title.txt
===================================================================
--- /MediaWiki/branches/1.11/docs/title.txt	(revision 1280)
+++ /MediaWiki/branches/1.11/docs/title.txt	(revision 1280)
@@ -0,0 +1,77 @@
+title.txt
+
+The MediaWiki software's "Title" class represents article
+titles, which are used for many purposes: as the human-readable
+text title of the article, in the URL used to access the article,
+the wikitext link to the article, the key into the article
+database, and so on. The class in instantiated from one of
+these forms and can be queried for the others, and for other
+attributes of the title. This is intended to be an
+immutable "value" class, so there are no mutator functions.
+
+To get a new instance, call one of the static factory
+methods WikiTitle::newFromURL(), WikiTitle::newFromDBKey(),
+or WikiTitle::newFromText(). Once instantiated, the
+other non-static accessor methods can be used, such as
+getText(), getDBKey(), getNamespace(), etc.
+
+The prefix rules: a title consists of an optional Interwiki
+prefix (such as "m:" for meta or "de:" for German), followed
+by an optional namespace, followed by the remainder of the
+title. Both Interwiki prefixes and namespace prefixes have
+the same rules: they contain only letters, digits, space, and
+underscore, must start with a letter, are case insensitive,
+and spaces and underscores are interchangeable.  Prefixes end
+with a ":". A prefix is only recognized if it is one of those
+specifically allowed by the software. For example, "de:name"
+is a link to the article "name" in the German Wikipedia, because
+"de" is recognized as one of the allowable interwikis. The
+title "talk:name" is a link to the article "name" in the "talk"
+namespace of the current wiki, because "talk" is a recognized
+namespace. Both may be present, and if so, the interwiki must
+come first, for example, "m:talk:name". If a title begins with
+a colon as its first character, no prefixes are scanned for,
+and the colon is just removed. Note that because of these
+rules, it is possible to have articles with colons in their
+names. "E. Coli 0157:H7" is a valid title, as is "2001: A Space
+Odyssey", because "E. Coli 0157" and "2001" are not valid
+interwikis or namespaces.
+
+It is not possible to have an article whose bare name includes
+a namespace or interwiki prefix.
+
+An initial colon in a title listed in wiki text may however
+suppress special handling for interlanguage links, image links,
+and category links.
+
+Character mapping rules: Once prefixes have been stripped, the
+rest of the title processed this way: spaces and underscores are
+treated as equivalent and each is converted to the other in the
+appropriate context (underscore in URL and database keys, spaces
+in plain text). "Extended" characters in the 0x80..0xFF range
+are allowed in all places, and are valid characters. They are
+encoded in URLs.  Other characters may be ASCII letters, digits,
+hyphen, comma, period, apostrophe, parentheses, and colon. No
+other ASCII characters are allowed, and will be deleted if found
+(they will probably cause a browser to misinterpret the URL).
+Extended characters are _not_ urlencoded when used as text or
+database keys.
+
+Character encoding rules: TODO
+
+Canonical forms: the canonical form of a title will always be
+returned by the object. In this form, the first (and only the
+first) character of the namespace and title will be uppercased;
+the rest of the namespace will be lowercased, while the title
+will be left as is. The text form will use spaces, the URL and
+DBkey forms will use underscores. Interwiki prefixes are all
+lowercase. The namespace will use underscores when returned
+alone; it will use spaces only when attached to the text title.
+
+getArticleID() needs some explanation: for "internal" articles,
+it should return the "page_id" field if the article exists, else
+it returns 0. For all external articles it returns 0. All of
+the IDs for all instances of Title created during a request are
+cached, so they can be looked up quickly while rendering wiki
+text with lots of internal links.
+
Index: /MediaWiki/branches/1.11/docs/user.txt
===================================================================
--- /MediaWiki/branches/1.11/docs/user.txt	(revision 1280)
+++ /MediaWiki/branches/1.11/docs/user.txt	(revision 1280)
@@ -0,0 +1,63 @@
+
+user.txt
+
+Documenting the MediaWiki User object.
+
+(DISCLAIMER: The documentation is not guaranteed to be in sync with
+the code at all times. If in doubt, check the table definitions
+and User.php.)
+
+Database fields:
+
+  user_id
+    Unique integer identifier; primary key. Sent to user in
+    cookie "{$wgDBname}UserID".
+
+  user_name
+    Text of full user name; title of "user:" page.  Displayed
+    on change lists, etc.  Sent to user as cookie "{$wgDBname}UserName".
+    Note that user names can contain spaces, while these are
+    converted to underscores in page titles.
+
+  user_rights
+    Comma-separated list of rights. Right now, only "sysop",
+    "developer", "bureaucrat", and "bot" have meaning.
+
+  user_password
+    Salted md5 hash of md5-hashed user login password.  If user option to
+    remember password is set, an md5 password hash is stored in cookie
+    "{$wgDBname}UserPassword". The original password and the hashed password
+    can be compared to the salted-hashed-hashed password.
+
+  user_newpassword
+    Hash for randomly generated password sent on 'send me a new password'.
+    If a match is made on login, the new password will replace the old one.
+
+  user_email
+    User's e-mail address. (Optional, used for user-to-user
+    e-mail and password recovery.)
+
+  user_options
+    A urlencoded string of name=value pairs to set various
+    user options.
+
+  user_touched
+    Timestamp updated when the user logs in, changes preferences, alters
+    watchlist, or when someone edits their user talk page or they clear
+    the new-talk field by viewing it. Used to invalidate old cached pages
+    from the user's browser cache.
+
+  user_real_name
+    "Real name" optionally used in some metadata lists.
+
+The user object encapsulates all of the settings, and clients
+classes use the getXXX() functions to access them. These functions
+do all the work of determining whether the user is logged in,
+whether the requested option can be satisfied from cookies or
+whether a database query is needed. Most of the settings needed
+for rendering normal pages are set in the cookie to minimize use
+of the database.
+
+Options
+  The user_options field is a list of name-value pairs.  The
+  following option names are used at various points in the system:
Index: /MediaWiki/branches/1.11/extensions/Cite/Cite.i18n.php
===================================================================
--- /MediaWiki/branches/1.11/extensions/Cite/Cite.i18n.php	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/Cite/Cite.i18n.php	(revision 1280)
@@ -0,0 +1,485 @@
+<?php
+/**
+ * Internationalisation file for Cite extension.
+ *
+ * @addtogroup Extensions
+*/
+
+$wgCiteMessages = array();
+
+$wgCiteMessages['en'] = array(
+	/*
+		Debug and errors
+	*/
+
+	# Internal errors
+	'cite_croak' => 'Cite croaked; $1: $2',
+
+	'cite_error_' . CITE_ERROR_STR_INVALID         => 'Internal error; invalid $str',
+	'cite_error_' . CITE_ERROR_KEY_INVALID_1       => 'Internal error; invalid key',
+	'cite_error_' . CITE_ERROR_KEY_INVALID_2       => 'Internal error; invalid key',
+	'cite_error_' . CITE_ERROR_STACK_INVALID_INPUT => 'Internal error; invalid stack key',
+
+	# User errors
+	'cite_error' => 'Cite error $1; $2',
+
+	'cite_error_' . CITE_ERROR_REF_NUMERIC_KEY               => 'Invalid <code>&lt;ref&gt;</code> tag; name cannot be a simple integer, use a descriptive title',
+	'cite_error_' . CITE_ERROR_REF_NO_KEY                    => 'Invalid <code>&lt;ref&gt;</code> tag; refs with no content must have a name',
+	'cite_error_' . CITE_ERROR_REF_TOO_MANY_KEYS             => 'Invalid <code>&lt;ref&gt;</code> tag; invalid names, e.g. too many',
+	'cite_error_' . CITE_ERROR_REF_NO_INPUT                  => 'Invalid <code>&lt;ref&gt;</code> tag; refs with no name must have content',
+	'cite_error_' . CITE_ERROR_REFERENCES_INVALID_INPUT      => 'Invalid <code>&lt;references&gt;</code> tag; no input is allowed, use
+<code>&lt;references /&gt;</code>',
+	'cite_error_' . CITE_ERROR_REFERENCES_INVALID_PARAMETERS => 'Invalid <code>&lt;references&gt;</code> tag; no parameters are allowed, use <code>&lt;references /&gt;</code>',
+	'cite_error_' . CITE_ERROR_REFERENCES_NO_BACKLINK_LABEL  => "Ran out of custom backlink labels, define more in the \"''cite_references_link_many_format_backlink_labels''\" message",
+
+	/*
+	   Output formatting
+	*/
+	'cite_reference_link_key_with_num' => '$1_$2',
+	# Ids produced by <ref>
+	'cite_reference_link_prefix'       => '_ref-',
+	'cite_reference_link_suffix'       => '',
+	# Ids produced by <references>
+	'cite_references_link_prefix'      => '_note-',
+	'cite_references_link_suffix'      => '',
+
+	'cite_reference_link'                              => '<sup id="$1" class="reference">[[#$2|<nowiki>[</nowiki>$3<nowiki>]</nowiki>]]</sup>',
+	'cite_references_link_one'                         => '<li id="$1">[[#$2|↑]] $3</li>',
+	'cite_references_link_many'                        => '<li id="$1">↑ $2 $3</li>',
+	'cite_references_link_many_format'                 => '<sup>[[#$1|$2]]</sup>',
+	# An item from this set is passed as $3 in the message above
+	'cite_references_link_many_format_backlink_labels' => 'a b c d e f g h i j k l m n o p q r s t u v w x y z',
+	'cite_references_link_many_sep'                    => " ",
+	'cite_references_link_many_and'                    => " ",
+
+	# Although I could just use # instead of <li> above and nothing here that
+	# will break on input that contains linebreaks
+	'cite_references_prefix' => '<ol class="references">',
+	'cite_references_suffix' => '</ol>',
+);
+$wgCiteMessages['cs'] = array(
+	/*
+		Debug and errors
+	*/
+
+	# Internal errors
+	'cite_croak' => 'Nefunkční citace; $1: $2',
+
+	'cite_error_' . CITE_ERROR_STR_INVALID         => 'Vnitřní chyba; neplatný $str',
+	'cite_error_' . CITE_ERROR_KEY_INVALID_1       => 'Vnitřní chyba; neplatný klíč',
+	'cite_error_' . CITE_ERROR_KEY_INVALID_2       => 'Vnitřní chyba; neplatný klíč',
+	'cite_error_' . CITE_ERROR_STACK_INVALID_INPUT => 'Vnitřní chyba; neplatný klíč zásobníku',
+
+	# User errors
+	'cite_error' => 'Chybná citace $1; $2',
+
+	'cite_error_' . CITE_ERROR_REF_NUMERIC_KEY               => 'Chyba v tagu <code>&lt;ref&gt;</code>; názvem nesmí být prosté číslo, použijte popisné označení',
+	'cite_error_' . CITE_ERROR_REF_NO_KEY                    => 'Chyba v tagu <code>&lt;ref&gt;</code>; prázdné citace musí obsahovat název',
+	'cite_error_' . CITE_ERROR_REF_TOO_MANY_KEYS             => 'Chyba v tagu <code>&lt;ref&gt;</code>; chybné názvy, např. je jich příliš mnoho',
+	'cite_error_' . CITE_ERROR_REF_NO_INPUT                  => 'Chyba v tagu <code>&lt;ref&gt;</code>; citace bez názvu musí mít vlastní obsah',
+	'cite_error_' . CITE_ERROR_REFERENCES_INVALID_INPUT      => 'Chyba v tagu <code>&lt;references&gt;</code>; zde není dovolen vstup, použijte <code>&lt;references /&gt;</code>',
+	'cite_error_' . CITE_ERROR_REFERENCES_INVALID_PARAMETERS => 'Invalid <code>&lt;references&gt;</code> tag; no parameters are allowed, use <code>&lt;references /&gt;</code>',
+	'cite_error_' . CITE_ERROR_REFERENCES_NO_BACKLINK_LABEL  => "Došla označení zpětných odkazů, přidejte jich několik do zprávy „''cite_references_link_many_format_backlink_labels''“",
+);
+
+$wgCiteMessages['de'] = array(
+	# Internal errors
+	'cite_croak'	=> 'Fehler im Referenz-System. $1: $2',
+	'cite_error'	=> 'Referenz-Fehler $1: $2',
+	'cite_error_' . CITE_ERROR_STR_INVALID			 => 'Interner Fehler: ungültiger $str',
+	'cite_error_' . CITE_ERROR_KEY_INVALID_1		 => 'Interner Fehler: Ungültiger „name“',
+	'cite_error_' . CITE_ERROR_KEY_INVALID_2		 => 'Interner Fehler: ungültiger „name“',
+	'cite_error_' . CITE_ERROR_STACK_INVALID_INPUT		 => 'Interner Fehler: ungültiger „name“-stack',
+
+	# User errors
+	'cite_error_' . CITE_ERROR_REF_NUMERIC_KEY		 => 'Ungültige <code><nowiki><ref></nowiki></code>-Verwendung: „name“ darf kein ' .
+									'reiner Zahlenwert sein, benutzen Sie einen beschreibenden Namen.',
+	'cite_error_' . CITE_ERROR_REF_NO_KEY			 => 'Ungültige <code><nowiki><ref></nowiki></code>-Verwendung: „ref“ ohne Inhalt muss einen Namen haben.',
+	'cite_error_' . CITE_ERROR_REF_TOO_MANY_KEYS		 => 'Ungültige <code><nowiki><ref></nowiki></code>-Verwendung: „name“ ist ungültig oder zu lang.',
+	'cite_error_' . CITE_ERROR_REF_NO_INPUT			 => 'Ungültige <code><nowiki><ref></nowiki></code>-Verwendung: „ref“ ohne Namen muss einen Inhalt haben.',
+	'cite_error_' . CITE_ERROR_REFERENCES_INVALID_INPUT	 => 'Ungültige <code><nowiki><references></nowiki></code>-Verwendung: Es ist kein zusätzlicher Text erlaubt, ' .
+									'verwenden Sie ausschließlich <code><nowiki><references /></nowiki></code>.',
+	'cite_error_' . CITE_ERROR_REFERENCES_INVALID_PARAMETERS => 'Ungültige <code><nowiki><reference></nowiki></code>-Verwendung: Es sind keine ' .
+									'zusätzlichen Parameter erlaubt, ' .
+									'verwenden Sie ausschließlich <code><nowiki><reference /></nowiki></code>.',
+	'cite_error_' . CITE_ERROR_REFERENCES_NO_BACKLINK_LABEL	 => 'Eine Referenz der Form <code><nowiki><ref name="…"/></nowiki></code> wird öfter ' .
+									'benutzt als Buchstaben vorhanden sind. Falls nötig, <nowiki>[[MediaWiki:cite ' .
+									'references link many format backlink labels]]</nowiki> um weitere Buchstaben/Zeichen ergänzen.',
+);
+
+$wgCiteMessages['fr'] = array(
+	# Internal errors
+	'cite_croak' => 'Citation corrompue ; $1 : $2',
+	'cite_error_' . CITE_ERROR_STR_INVALID         => 'Erreur interne ; $str attendue',
+	'cite_error_' . CITE_ERROR_KEY_INVALID_1       => 'Erreur interne ; clé invalide',
+	'cite_error_' . CITE_ERROR_KEY_INVALID_2       => 'Erreur interne ; clé invalide ',
+	'cite_error_' . CITE_ERROR_STACK_INVALID_INPUT => 'Erreur interne ; clé de pile invalide',
+
+	# User errors
+	'cite_error' => 'Erreur de citation $1 ; $2',
+	'cite_error_' . CITE_ERROR_REF_NUMERIC_KEY               => 'Appel invalide ; clé non-intégrale attendue',
+	'cite_error_' . CITE_ERROR_REF_NO_KEY                    => 'Appel invalide ; aucune clé spécifiée',
+	'cite_error_' . CITE_ERROR_REF_TOO_MANY_KEYS             => 'Appel invalide ; clés invalides, par exemple, trop de clés spécifiées ou clé erronée',
+	'cite_error_' . CITE_ERROR_REF_NO_INPUT                  => 'Appel invalide ; aucune entrée spécifiée',
+	'cite_error_' . CITE_ERROR_REFERENCES_INVALID_INPUT      => 'Entrée invalide ; entrée attendue',
+	'cite_error_' . CITE_ERROR_REFERENCES_INVALID_PARAMETERS => 'Arguments invalides ; argument attendu',
+	'cite_error_' . CITE_ERROR_REFERENCES_NO_BACKLINK_LABEL  => "Exécution hors des étiquettes personnalisées, définissez plus dans le message « cite_references_link_many_format_backlink_labels »",
+);
+$wgCiteMessages['he'] = array(
+	/*
+		Debug and errors
+	*/
+
+	# Internal errors
+	'cite_croak' => 'בהערה יש שגיאה; $1: $2',
+
+	'cite_error_' . CITE_ERROR_STR_INVALID         => 'שגיאה פנימית; $str שגוי',
+	'cite_error_' . CITE_ERROR_KEY_INVALID_1       => 'שגיאה פנימית; מפתח שגוי',
+	'cite_error_' . CITE_ERROR_KEY_INVALID_2       => 'שגיאה פנימית; מפתח שגוי',
+	'cite_error_' . CITE_ERROR_STACK_INVALID_INPUT => 'שגיאה פנימית; מפתח שגוי בערימה',
+
+	# User errors
+	'cite_error' => 'שגיאת ציטוט $1; $2',
+
+	'cite_error_' . CITE_ERROR_REF_NUMERIC_KEY               => 'תגית <code>&lt;ref&gt;</code> שגויה; שם לא יכול להיות מספר פשוט, יש להשתמש בכותרת תיאורית',
+	'cite_error_' . CITE_ERROR_REF_NO_KEY                    => 'תגית <code>&lt;ref&gt;</code> שגויה; להערות שוליים ללא תוכן חייב להיות שם',
+	'cite_error_' . CITE_ERROR_REF_TOO_MANY_KEYS             => 'תגית <code>&lt;ref&gt;</code> שגויה; שמות שגויים, למשל, רבים מדי',
+	'cite_error_' . CITE_ERROR_REF_NO_INPUT                  => 'תגית <code>&lt;ref&gt;</code> שגויה; להערות שוליים ללא שם חייב להיות תוכן',
+	'cite_error_' . CITE_ERROR_REFERENCES_INVALID_INPUT      => 'תגית <code>&lt;references&gt;</code> שגויה; לא ניתן לכתוב תוכן, יש להשתמש בקוד <code>&lt;references /&gt;</code>',
+	'cite_error_' . CITE_ERROR_REFERENCES_INVALID_PARAMETERS => 'תגית <code>&lt;references&gt;</code> שגויה; לא ניתן להשתמש בפרמטרים, יש להשתמש בקוד <code>&lt;references /&gt;</code>',
+	'cite_error_' . CITE_ERROR_REFERENCES_NO_BACKLINK_LABEL  => "נגמרו תוויות הקישורים המותאמים אישית, אנא הגדירו נוספים בהודעת המערכת \"''cite_references_link_many_format_backlink_labels''\"",
+);
+$wgCiteMessages['id'] = array(
+	# Internal errors
+	'cite_croak' => 'Kegagalan pengutipan; $1: $2',
+	'cite_error_' . CITE_ERROR_STR_INVALID         => 'Kesalahan internal; $str tak sah',
+	'cite_error_' . CITE_ERROR_KEY_INVALID_1       => 'Kesalahan internal; kunci tak sah',
+	'cite_error_' . CITE_ERROR_KEY_INVALID_2       => 'Kesalahan internal; kunci tak sah',
+	'cite_error_' . CITE_ERROR_STACK_INVALID_INPUT => 'Kesalahan internal; kunci stack tak sah',
+
+	# User errors
+	'cite_error' => 'Kesalahan pengutipan $1; $2',
+	'cite_error_' . CITE_ERROR_REF_NUMERIC_KEY               => 'Kesalahan pemanggilan; diharapkan suatu kunci non-integer',
+	'cite_error_' . CITE_ERROR_REF_NO_KEY                    => 'Kesalahan pemanggilan; tidak ada kunci yang dispesifikasikan',
+	'cite_error_' . CITE_ERROR_REF_TOO_MANY_KEYS             => 'Kesalahan pemanggilan; kunci tak sah, contohnya karena terlalu banyak atau tidak ada kunci yang dispesifikasikan',
+	'cite_error_' . CITE_ERROR_REF_NO_INPUT                  => 'Kesalahan pemanggilan; tidak ada masukan yang dispesifikasikan',
+	'cite_error_' . CITE_ERROR_REFERENCES_INVALID_INPUT      => 'Kesalahan masukan; seharusnya tidak ada',
+	'cite_error_' . CITE_ERROR_REFERENCES_INVALID_PARAMETERS => 'Paramater tak sah; seharusnya tidak ada',
+	'cite_error_' . CITE_ERROR_REFERENCES_NO_BACKLINK_LABEL  => "Kehabisan label pralana balik, tambakan pada pesan sistem \"''cite_references_link_many_format_backlink_labels''\"",
+);
+$wgCiteMessages['it'] = array(
+
+	# Internal errors
+	'cite_croak' => 'Errore nella citazione: $1: $2',
+	'cite_error_' . CITE_ERROR_STR_INVALID         => 'Errore interno: $str errato',
+	'cite_error_' . CITE_ERROR_KEY_INVALID_1       => 'Errore interno: chiave errata',
+	'cite_error_' . CITE_ERROR_KEY_INVALID_2       => 'Errore interno: chiave errata',
+	'cite_error_' . CITE_ERROR_STACK_INVALID_INPUT => 'Errore interno: chiave di stack errata',
+
+	# User errors
+	'cite_error' => 'Errore nella funzione Cite $1: $2',
+	'cite_error_' . CITE_ERROR_REF_NUMERIC_KEY               => 'Errore nell\'uso del marcatore <code>&lt;ref&gt;</code>: il nome non può essere un numero intero. Usare un titolo esteso',
+	'cite_error_' . CITE_ERROR_REF_NO_KEY                    => 'Errore nell\'uso del marcatore <code>&lt;ref&gt;</code>: i ref vuoti non possono essere privi di nome',
+	'cite_error_' . CITE_ERROR_REF_TOO_MANY_KEYS             => 'Errore nell\'uso del marcatore <code>&lt;ref&gt;</code>: nomi non validi (ad es. numero troppo elevato)',
+	'cite_error_' . CITE_ERROR_REF_NO_INPUT                  => 'Errore nell\'uso del marcatore <code>&lt;ref&gt;</code>: i ref privi di nome non possono essere vuoti',
+	'cite_error_' . CITE_ERROR_REFERENCES_INVALID_INPUT      => 'Errore nell\'uso del marcatoree <code>&lt;references&gt;</code>: input non ammesso, usare il marcatore
+<code>&lt;references /&gt;</code>',
+	'cite_error_' . CITE_ERROR_REFERENCES_INVALID_PARAMETERS => 'Errore nell\'uso del marcatore <code>&lt;references&gt;</code>: parametri non ammessi, usare il marcatore <code>&lt;references /&gt;</code>',
+	'cite_error_' . CITE_ERROR_REFERENCES_NO_BACKLINK_LABEL  => "Etichette di rimando personalizzate esaurite, aumentarne il numero nel messaggio \"''cite_references_link_many_format_backlink_labels''\"",
+
+);
+
+$wgCiteMessages['ja'] = array(
+
+	# Internal errors
+	'cite_croak' => '引用タグ機能の重大なエラー; $1: $2',
+
+	'cite_error_' . CITE_ERROR_STR_INVALID         => '内部エラー; 無効な $str',
+	'cite_error_' . CITE_ERROR_KEY_INVALID_1       => '内部エラー; 無効なキー',
+	'cite_error_' . CITE_ERROR_KEY_INVALID_2       => '内部エラー; 無効なキー',
+	'cite_error_' . CITE_ERROR_STACK_INVALID_INPUT => '内部エラー; 無効なスタックキー',
+
+	# User errors
+	'cite_error' => '引用エラー $1; $2',
+
+	'cite_error_' . CITE_ERROR_REF_NUMERIC_KEY               => '無効な <code>&lt;ref&gt;</code> タグ: 名前に単純な数値は使用できません。',
+	'cite_error_' . CITE_ERROR_REF_NO_KEY                    => '無効な <code>&lt;ref&gt;</code> タグ: 引用句の内容がない場合には名前 （<code>name</code> 属性）が必要です',
+	'cite_error_' . CITE_ERROR_REF_TOO_MANY_KEYS             => '無効な <code>&lt;ref&gt;</code> タグ: 無効な名前（多すぎる、もしくは誤った指定）',
+	'cite_error_' . CITE_ERROR_REF_NO_INPUT                  => '無効な <code>&lt;ref&gt;</code> タグ: 名前 （<code>name</code> 属性）がない場合には引用句の内容が必要です',
+	'cite_error_' . CITE_ERROR_REFERENCES_INVALID_INPUT      => '無効な <code>&lt;references&gt;</code> タグ: 内容のあるタグは使用できません。 <code>&lt;references /&gt;</code> を用いてください。',
+	'cite_error_' . CITE_ERROR_REFERENCES_INVALID_PARAMETERS => '無効な <code>&lt;references&gt;</code> タグ: 引数のあるタグは使用できません。 <code>&lt;references /&gt;</code> を用いてください。',
+	'cite_error_' . CITE_ERROR_REFERENCES_NO_BACKLINK_LABEL  => "バックリンクラベルが使用できる個数を超えました。\"''cite_references_link_many_format_backlink_labels''\" メッセージでの定義を増やしてください。",
+);
+
+$wgCiteMessages['kk-kz'] = array(
+	/*
+		Debug and errors
+	*/
+
+	# Internal errors
+	'cite_croak' => 'Дәйексөз алу сәтсіз бітті; $1: $2 ',
+
+	'cite_error_' . CITE_ERROR_STR_INVALID         => 'Ішкі қате; жарамсыз $str ',
+	'cite_error_' . CITE_ERROR_KEY_INVALID_1       => 'Ішкі қате; жарамсыз кілт',
+	'cite_error_' . CITE_ERROR_KEY_INVALID_2       => 'Ішкі қате; жарамсыз кілт',
+	'cite_error_' . CITE_ERROR_STACK_INVALID_INPUT => 'Ішкі қате; жарамсыз стек кілті',
+
+	# User errors
+	'cite_error' => 'Дәйексөз алу $1 қатесі; $2',
+
+	'cite_error_' . CITE_ERROR_REF_NUMERIC_KEY               => 'Жарамсыз <code>&lt;ref&gt;</code> белгішесі; атау кәдімгі бүтін сан болуы мүмкін емес, сиппатауыш атау қолданыңыз',
+	'cite_error_' . CITE_ERROR_REF_NO_KEY                    => 'Жарамсыз <code>&lt;ref&gt;</code> белгішесі; мағлұматсыз түсініктемелерде атау болуы қажет',
+	'cite_error_' . CITE_ERROR_REF_TOO_MANY_KEYS             => 'Жарамсыз <code>&lt;ref&gt;</code> белгіше; жарамсыз атаулар, мысалы, тым көп',
+	'cite_error_' . CITE_ERROR_REF_NO_INPUT                  => 'Жарамсыз <code>&lt;ref&gt;</code> белгіше; атаусыз түсініктемелерде мағлұматы болуы қажет',
+	'cite_error_' . CITE_ERROR_REFERENCES_INVALID_INPUT      => 'Жарамсыз <code>&lt;references&gt;</code> белгіше; еш кіріс рұқсат етілмейді, былай <code>&lt;references /&gt;</code> қолданыңыз',
+	'cite_error_' . CITE_ERROR_REFERENCES_INVALID_PARAMETERS => 'Жарамсыз <code>&lt;references&gt;</code> белгіше; еш баптар рұқсат етілмейді, былай <code>&lt;references /&gt;</code> қолданыңыз',
+	'cite_error_' . CITE_ERROR_REFERENCES_NO_BACKLINK_LABEL  => 'Қосымша белгілердің саны бітті, одан әрі көбірек «\'\'cite_references_link_many_format_backlink_labels\'\'» жүйе хабарында белгілеңіз',
+);
+$wgCiteMessages['kk-tr'] = array(
+	/*
+		Debug and errors
+	*/
+
+	# Internal errors
+	'cite_croak' => 'Däýeksöz alw sätsiz bitti; $1: $2 ',
+
+	'cite_error_' . CITE_ERROR_STR_INVALID         => 'İşki qate; jaramsız $str ',
+	'cite_error_' . CITE_ERROR_KEY_INVALID_1       => 'İşki qate; jaramsız kilt',
+	'cite_error_' . CITE_ERROR_KEY_INVALID_2       => 'İşki qate; jaramsız kilt',
+	'cite_error_' . CITE_ERROR_STACK_INVALID_INPUT => 'İşki qate; jaramsız stek kilti',
+
+	# User errors
+	'cite_error' => 'Däýeksöz alw $1 qatesi; $2',
+
+	'cite_error_' . CITE_ERROR_REF_NUMERIC_KEY               => 'Jaramsız <code>&lt;ref&gt;</code> belgişesi; ataw kädimgi bütin san bolwı mümkin emes, sïppatawış ataw qoldanıñız',
+	'cite_error_' . CITE_ERROR_REF_NO_KEY                    => 'Jaramsız <code>&lt;ref&gt;</code> belgişesi; mağlumatsız tüsiniktemelerde ataw bolwı qajet',
+	'cite_error_' . CITE_ERROR_REF_TOO_MANY_KEYS             => 'Jaramsız <code>&lt;ref&gt;</code> belgişe; jaramsız atawlar, mısalı, tım köp',
+	'cite_error_' . CITE_ERROR_REF_NO_INPUT                  => 'Jaramsız <code>&lt;ref&gt;</code> belgişe; atawsız tüsiniktemelerde mağlumatı bolwı qajet',
+	'cite_error_' . CITE_ERROR_REFERENCES_INVALID_INPUT      => 'Jaramsız <code>&lt;references&gt;</code> belgişe; eş kiris ruqsat etilmeýdi, bılaý <code>&lt;references /&gt;</code> qoldanıñız',
+	'cite_error_' . CITE_ERROR_REFERENCES_INVALID_PARAMETERS => 'Jaramsız <code>&lt;references&gt;</code> belgişe; eş baptar ruqsat etilmeýdi, bılaý <code>&lt;references /&gt;</code> qoldanıñız',
+	'cite_error_' . CITE_ERROR_REFERENCES_NO_BACKLINK_LABEL  => 'Qosımşa belgilerdiñ sanı bitti, odan äri köbirek «\'\'cite_references_link_many_format_backlink_labels\'\'» jüýe xabarında belgileñiz',
+);
+$wgCiteMessages['kk-cn'] = array(
+	/*
+		Debug and errors
+	*/
+
+	# Internal errors
+	'cite_croak' => 'دٵيەكسٶز الۋ سٵتسٸز بٸتتٸ; $1: $2 ',
+
+	'cite_error_' . CITE_ERROR_STR_INVALID         => 'ٸشكٸ قاتە; جارامسىز $str ',
+	'cite_error_' . CITE_ERROR_KEY_INVALID_1       => 'ٸشكٸ قاتە; جارامسىز كٸلت',
+	'cite_error_' . CITE_ERROR_KEY_INVALID_2       => 'ٸشكٸ قاتە; جارامسىز كٸلت',
+	'cite_error_' . CITE_ERROR_STACK_INVALID_INPUT => 'ٸشكٸ قاتە; جارامسىز ستەك كٸلتٸ',
+
+	# User errors
+	'cite_error' => 'دٵيەكسٶز الۋ $1 قاتەسٸ; $2',
+
+	'cite_error_' . CITE_ERROR_REF_NUMERIC_KEY               => 'جارامسىز <code>&lt;ref&gt;</code> بەلگٸشەسٸ; اتاۋ كٵدٸمگٸ بٷتٸن سان بولۋى مٷمكٸن ەمەس, سيپپاتاۋىش اتاۋ قولدانىڭىز',
+	'cite_error_' . CITE_ERROR_REF_NO_KEY                    => 'جارامسىز <code>&lt;ref&gt;</code> بەلگٸشەسٸ; ماعلۇماتسىز تٷسٸنٸكتەمەلەردە اتاۋ بولۋى قاجەت',
+	'cite_error_' . CITE_ERROR_REF_TOO_MANY_KEYS             => 'جارامسىز <code>&lt;ref&gt;</code> بەلگٸشە; جارامسىز اتاۋلار, مىسالى, تىم كٶپ',
+	'cite_error_' . CITE_ERROR_REF_NO_INPUT                  => 'جارامسىز <code>&lt;ref&gt;</code> بەلگٸشە; اتاۋسىز تٷسٸنٸكتەمەلەردە ماعلۇماتى بولۋى قاجەت',
+	'cite_error_' . CITE_ERROR_REFERENCES_INVALID_INPUT      => 'جارامسىز <code>&lt;references&gt;</code> بەلگٸشە; ەش كٸرٸس رۇقسات ەتٸلمەيدٸ, بىلاي <code>&lt;references /&gt;</code> قولدانىڭىز',
+	'cite_error_' . CITE_ERROR_REFERENCES_INVALID_PARAMETERS => 'جارامسىز <code>&lt;references&gt;</code> بەلگٸشە; ەش باپتار رۇقسات ەتٸلمەيدٸ, بىلاي <code>&lt;references /&gt;</code> قولدانىڭىز',
+	'cite_error_' . CITE_ERROR_REFERENCES_NO_BACKLINK_LABEL  => 'قوسىمشا بەلگٸلەردٸڭ سانى بٸتتٸ, ودان ٵرٸ كٶبٸرەك «\'\'cite_references_link_many_format_backlink_labels\'\'» جٷيە حابارىندا بەلگٸلەڭٸز',
+);
+$wgCiteMessages['kk'] = $wgCiteMessages['kk-kz'];
+$wgCiteMessages['lt'] = array(
+	# Internal errors
+	'cite_croak' => 'Cituoti nepavyko; $1: $2',
+	'cite_error_' . CITE_ERROR_STR_INVALID         => 'Vidinė klaida; neleistinas $str',
+	'cite_error_' . CITE_ERROR_KEY_INVALID_1       => 'Vidinė klaida; neleistinas raktas',
+	'cite_error_' . CITE_ERROR_KEY_INVALID_2       => 'Vidinė klaida; neleistinas raktas',
+	'cite_error_' . CITE_ERROR_STACK_INVALID_INPUT => 'Vidinė klaida; neleistinas steko raktas',
+
+	# User errors
+	'cite_error' => 'Citavimo klaida $1; $2',
+	'cite_error_' . CITE_ERROR_REF_NUMERIC_KEY               => 'Neleistina <code>&lt;ref&gt;</code> gairė; vardas negali būti tiesiog skaičius, naudokite tekstinį pavadinimą',
+	'cite_error_' . CITE_ERROR_REF_NO_KEY                    => 'Neleistina <code>&lt;ref&gt;</code> gairė; nuorodos be turinio turi turėti vardą',
+	'cite_error_' . CITE_ERROR_REF_TOO_MANY_KEYS             => 'Neleistina <code>&lt;ref&gt;</code> gairė; neleistini vardai, pvz., per daug',
+	'cite_error_' . CITE_ERROR_REF_NO_INPUT                  => 'Neleistina <code>&lt;ref&gt;</code> gairė; nuorodos be vardo turi turėti turinį',
+	'cite_error_' . CITE_ERROR_REFERENCES_INVALID_INPUT      => 'Neleistina <code>&lt;references&gt;</code> gairė; neleistina jokia įvestis, naudokite <code>&lt;references /&gt;</code>',
+	'cite_error_' . CITE_ERROR_REFERENCES_INVALID_PARAMETERS => 'Neleistina <code>&lt;references&gt;</code> gairė; neleidžiami jokie parametrai, naudokite <code>&lt;references /&gt;</code>',
+	'cite_error_' . CITE_ERROR_REFERENCES_NO_BACKLINK_LABEL  => "Baigėsi antraštės, nurodykite daugiau \"''cite_references_link_many_format_backlink_labels''\" sisteminiame tekste",
+);
+$wgCiteMessages['nl'] = array(
+	/*
+		Debug and errors
+	*/
+
+	# Internal errors
+	'cite_croak' => 'Probleem met Cite; $1: $2',
+
+	'cite_error_' . CITE_ERROR_STR_INVALID         => 'Interne fout; onjuiste $str',
+	'cite_error_' . CITE_ERROR_KEY_INVALID_1       => 'Interne fout; onjuiste sleutel',
+	'cite_error_' . CITE_ERROR_KEY_INVALID_2       => 'Interne fout; onjuiste sleutel',
+	'cite_error_' . CITE_ERROR_STACK_INVALID_INPUT => 'Interne fout; onjuiste stacksleutel',
+
+	# User errors
+	'cite_error' => 'Citefout $1; $2',
+
+	'cite_error_' . CITE_ERROR_REF_NUMERIC_KEY               => 'Onjuiste tag <code>&lt;ref&gt;</code>; de naam kan geen simplele integer zijn, gebruik een beschrijvende titel',
+	'cite_error_' . CITE_ERROR_REF_NO_KEY                    => 'Onjuiste tag <code>&lt;ref&gt;</code>; refs zonder inhoud moeten een naam hebben',
+	'cite_error_' . CITE_ERROR_REF_TOO_MANY_KEYS             => 'Onjuiste tag <code>&lt;ref&gt;</code>; onjuiste namen, bijvoorbeeld te veel',
+	'cite_error_' . CITE_ERROR_REF_NO_INPUT                  => 'Onjuiste tag <code>&lt;ref&gt;</code>; refs zonder naam moeten inhoud hebben',
+	'cite_error_' . CITE_ERROR_REFERENCES_INVALID_INPUT      => 'Onjuiste tag <code>&lt;references&gt;</code>; invoer is niet toegestaan, gebruik <code>&lt;references /&gt;</code>',
+	'cite_error_' . CITE_ERROR_REFERENCES_INVALID_PARAMETERS => 'Onjuiste tag <code>&lt;references&gt;</code>; parameters zijn niet toegestaan, gebruik <code>&lt;references /&gt;</code>',
+	'cite_error_' . CITE_ERROR_REFERENCES_NO_BACKLINK_LABEL  => "Ran out of custom backlink labels, define more in the \"''cite_references_link_many_format_backlink_labels''\" message",
+);
+$wgCiteMessages['pt'] = array(
+	/*
+		Debug and errors
+	*/
+
+	# Internal errors
+	'cite_croak' => 'Citação com problemas; $1: $2',
+
+	'cite_error_' . CITE_ERROR_STR_INVALID         => 'Erro interno; $str inválido',
+	'cite_error_' . CITE_ERROR_KEY_INVALID_1       => 'Erro interno; chave inválida',
+	'cite_error_' . CITE_ERROR_KEY_INVALID_2       => 'Erro interno; chave inválida',
+	'cite_error_' . CITE_ERROR_STACK_INVALID_INPUT => 'Erro interno; chave fixa inválida',
+
+	# User errors
+	'cite_error' => 'Erro de citação $1; $2',
+
+	'cite_error_' . CITE_ERROR_REF_NUMERIC_KEY               => 'Código <code>&lt;ref&gt;</code> inválido; o nome não pode ser um número. Utilize um nome descritivo',
+	'cite_error_' . CITE_ERROR_REF_NO_KEY                    => 'Código <code>&lt;ref&gt;</code> inválido; refs sem conteúdo devem ter um parâmetro de nome',
+	'cite_error_' . CITE_ERROR_REF_TOO_MANY_KEYS             => 'Código <code>&lt;ref&gt;</code> inválido; nomes inválidos (por exemplo, nome muito extenso)',
+	'cite_error_' . CITE_ERROR_REF_NO_INPUT                  => 'Código <code>&lt;ref&gt;</code> inválido; refs sem parâmetro de nome devem possuir conteúdo a elas associado',
+	'cite_error_' . CITE_ERROR_REFERENCES_INVALID_INPUT      => 'Código <code>&lt;references&gt;</code> inválido; no input is allowed, use
+<code>&lt;references /&gt;</code>',
+	'cite_error_' . CITE_ERROR_REFERENCES_INVALID_PARAMETERS => 'Código <code>&lt;references&gt;</code> inválido; não são permitidos parâmetros. Utilize como <code>&lt;references /&gt;</code>',
+	'cite_error_' . CITE_ERROR_REFERENCES_NO_BACKLINK_LABEL  => "Ran out of custom backlink labels, define more in the \"''cite_references_link_many_format_backlink_labels''\" message",
+);
+$wgCiteMessages['ru'] = array(
+	/*
+		Debug and errors
+	*/
+
+	# Internal errors
+	'cite_croak' => 'Цитата сдохла; $1: $2',
+
+	'cite_error_' . CITE_ERROR_STR_INVALID         => 'Внутренняя ошибка: неверный $str',
+	'cite_error_' . CITE_ERROR_KEY_INVALID_1       => 'Внутренняя ошибка: неверный ключ',
+	'cite_error_' . CITE_ERROR_KEY_INVALID_2       => 'Внутренняя ошибка: неверный ключ',
+	'cite_error_' . CITE_ERROR_STACK_INVALID_INPUT => 'Внутренняя ошибка: неверный ключ стека ',
+
+	# User errors
+	'cite_error' => 'Ошибка цитирования $1; $2',
+
+	'cite_error_' . CITE_ERROR_REF_NUMERIC_KEY               => 'Неправильный вызов: ожидался нечисловой ключ',
+	'cite_error_' . CITE_ERROR_REF_NO_KEY                    => 'Неправильный вызов: ключ не был указан',
+	'cite_error_' . CITE_ERROR_REF_TOO_MANY_KEYS             => 'Неправильный вызов: неверные ключи, например было указано слишком много ключей или ключ был неправильным',
+	'cite_error_' . CITE_ERROR_REF_NO_INPUT                  => 'Неверный вызов: нет входных данных',
+	'cite_error_' . CITE_ERROR_REFERENCES_INVALID_INPUT      => 'Входные данные недействительны, так как не предполагаются',
+	'cite_error_' . CITE_ERROR_REFERENCES_INVALID_PARAMETERS => 'Переданы недействительные параметры; их вообще не предусмотрено.',
+	'cite_error_' . CITE_ERROR_REFERENCES_NO_BACKLINK_LABEL  => 'Не хватает символов для возвратных гиперссылок; следует расширить системную переменную «cite_references_link_many_format_backlink_labels».',
+
+	/*
+	   Output formatting
+	*/
+	'cite_references_link_many_format_backlink_labels' => 'а б в г д е ё ж з и й к л м н о п р с т у ф х ц ч ш щ ъ ы ь э ю я',
+);
+$wgCiteMessages['sk'] = array(
+	/*
+	    Debug and errors
+	*/
+
+	# Internal errors
+	'cite_croak' => 'Citát je už neaktuálny; $1: $2',
+
+	'cite_error_' . CITE_ERROR_STR_INVALID         => 'Vnútorná chyba; neplatný $str',
+	'cite_error_' . CITE_ERROR_KEY_INVALID_1       => 'Vnútorná chyba; neplatný kľúč',
+	'cite_error_' . CITE_ERROR_KEY_INVALID_2       => 'Vnútorná chyba; neplatný kľúč',
+	'cite_error_' . CITE_ERROR_STACK_INVALID_INPUT => 'Vnútorná chyba; neplatný kľúč zásobníka',
+
+	# User errors
+	'cite_error' => 'Chyba citácie $1; $2',
+
+	'cite_error_' . CITE_ERROR_REF_NUMERIC_KEY               => 'Neplatné volanie; očakáva sa neceločíselný typ kľúča',
+	'cite_error_' . CITE_ERROR_REF_NO_KEY                    => 'Neplatné volanie; nebol špecifikovaný kľúč',
+	'cite_error_' . CITE_ERROR_REF_TOO_MANY_KEYS             => 'Neplatné volanie; neplatné kľúče, napr. príliš veľa alebo nesprávne špecifikovaný kľúč',
+	'cite_error_' . CITE_ERROR_REF_NO_INPUT                  => 'Neplatné volanie; nebol špecifikovaný vstup',
+	'cite_error_' . CITE_ERROR_REFERENCES_INVALID_INPUT      => 'Neplatné volanie; neočakával sa vstup',
+	'cite_error_' . CITE_ERROR_REFERENCES_INVALID_PARAMETERS => 'Neplatné parametre; neočakávli sa žiadne',
+	'cite_error_' . CITE_ERROR_REFERENCES_NO_BACKLINK_LABEL  => "Minuli sa generované návestia spätných odkazov, definujte viac v správe \"''cite_references_link_many_format_backlink_labels''\"",
+);
+$wgCiteMessages['yue'] = array(
+	/*
+		Debug and errors
+	*/
+
+	# Internal errors
+	'cite_croak' => '引用阻塞咗; $1: $2',
+
+	'cite_error_' . CITE_ERROR_STR_INVALID         => '內部錯誤; 無效嘅 $str',
+	'cite_error_' . CITE_ERROR_KEY_INVALID_1       => '內部錯誤; 無效嘅匙',
+	'cite_error_' . CITE_ERROR_KEY_INVALID_2       => '內部錯誤; 無效嘅匙',
+	'cite_error_' . CITE_ERROR_STACK_INVALID_INPUT => '內部錯誤; 無效嘅堆疊匙',
+
+	# User errors
+	'cite_error' => '引用錯誤 $1; $2',
+
+	'cite_error_' . CITE_ERROR_REF_NUMERIC_KEY               => '無效嘅呼叫; 需要一個非整數嘅匙',
+	'cite_error_' . CITE_ERROR_REF_NO_KEY                    => '無效嘅呼叫; 未指定匙',
+	'cite_error_' . CITE_ERROR_REF_TOO_MANY_KEYS             => '無效嘅呼叫; 無效嘅匙, 例如: 太多或者指定咗一個錯咗嘅匙',
+	'cite_error_' . CITE_ERROR_REF_NO_INPUT                  => '無效嘅呼叫; 未指定輸入',
+	'cite_error_' . CITE_ERROR_REFERENCES_INVALID_INPUT      => '無效嘅輸入; 唔需要有嘢',
+	'cite_error_' . CITE_ERROR_REFERENCES_INVALID_PARAMETERS => '無效嘅參數; 唔需要有嘢',
+	'cite_error_' . CITE_ERROR_REFERENCES_NO_BACKLINK_LABEL  => "用晒啲自定返回標籤, 響 \"''cite_references_link_many_format_backlink_labels''\" 信息再整多啲",
+);
+$wgCiteMessages['zh-hans'] = array(
+	/*
+		Debug and errors
+	*/
+
+	# Internal errors
+	'cite_croak' => '引用阻塞; $1: $2',
+
+	'cite_error_' . CITE_ERROR_STR_INVALID         => '内部错误；非法的 $str',
+	'cite_error_' . CITE_ERROR_KEY_INVALID_1       => '内部错误；非法键值',
+	'cite_error_' . CITE_ERROR_KEY_INVALID_2       => '内部错误；非法键值',
+	'cite_error_' . CITE_ERROR_STACK_INVALID_INPUT => '内部错误；非法堆栈键值',
+
+	# User errors
+	'cite_error' => '引用错误 $1; $2',
+
+	'cite_error_' . CITE_ERROR_REF_NUMERIC_KEY               => '无效呼叫；需要一个非整数的键值',
+	'cite_error_' . CITE_ERROR_REF_NO_KEY                    => '无效呼叫；没有指定键值',
+	'cite_error_' . CITE_ERROR_REF_TOO_MANY_KEYS             => '无效呼叫；非法键值，例如：过多或错误的指定键值',
+	'cite_error_' . CITE_ERROR_REF_NO_INPUT                  => '无效呼叫；没有指定的输入',
+	'cite_error_' . CITE_ERROR_REFERENCES_INVALID_INPUT      => '无效输入；需求为空',
+	'cite_error_' . CITE_ERROR_REFERENCES_INVALID_PARAMETERS => '非法参数；需求为空',
+	'cite_error_' . CITE_ERROR_REFERENCES_NO_BACKLINK_LABEL  => "自定义后退标签已经用完了，现在可在标签 \"''cite_references_link_many_format_backlink_labels''\" 定义更多信息",
+);
+$wgCiteMessages['zh-hant'] = array(
+	/*
+		Debug and errors
+	*/
+
+	# Internal errors
+	'cite_croak' => '引用阻塞; $1: $2',
+
+	'cite_error_' . CITE_ERROR_STR_INVALID         => '內部錯誤；非法的 $str',
+	'cite_error_' . CITE_ERROR_KEY_INVALID_1       => '內部錯誤；非法鍵',
+	'cite_error_' . CITE_ERROR_KEY_INVALID_2       => '內部錯誤；非法鍵',
+	'cite_error_' . CITE_ERROR_STACK_INVALID_INPUT => '內部錯誤；非法堆疊鍵值',
+
+	# User errors
+	'cite_error' => '引用錯誤 $1; $2',
+
+	'cite_error_' . CITE_ERROR_REF_NUMERIC_KEY               => '無效呼叫；需要一個非整數的鍵',
+	'cite_error_' . CITE_ERROR_REF_NO_KEY                    => '無效呼叫；沒有指定鍵',
+	'cite_error_' . CITE_ERROR_REF_TOO_MANY_KEYS             => '無效呼叫；非法鍵值，例如：過多或錯誤的指定鍵',
+	'cite_error_' . CITE_ERROR_REF_NO_INPUT                  => '無效呼叫；沒有指定的輸入',
+	'cite_error_' . CITE_ERROR_REFERENCES_INVALID_INPUT      => '無效輸入；需求為空',
+	'cite_error_' . CITE_ERROR_REFERENCES_INVALID_PARAMETERS => '非法參數；需求為空',
+	'cite_error_' . CITE_ERROR_REFERENCES_NO_BACKLINK_LABEL  => "自訂後退標籤已經用完了，現在可在標籤 \"''cite_references_link_many_format_backlink_labels''\" 定義更多信息",
+);
+$wgCiteMessages['zh-cn'] = $wgCiteMessages['zh-hans'];
+$wgCiteMessages['zh-hk'] = $wgCiteMessages['zh-hant'];
+$wgCiteMessages['zh-sg'] = $wgCiteMessages['zh-hans'];
+$wgCiteMessages['zh-tw'] = $wgCiteMessages['zh-hant'];
+$wgCiteMessages['zh-yue'] = $wgCiteMessages['yue'];
+
+
Index: /MediaWiki/branches/1.11/extensions/Cite/Cite.php
===================================================================
--- /MediaWiki/branches/1.11/extensions/Cite/Cite.php	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/Cite/Cite.php	(revision 1280)
@@ -0,0 +1,677 @@
+<?php
+if ( ! defined( 'MEDIAWIKI' ) )
+	die();
+/**#@+
+ * A parser extension that adds two tags, <ref> and <references> for adding
+ * citations to pages
+ *
+ * @addtogroup Extensions
+ *
+ * @link http://meta.wikimedia.org/wiki/Cite/Cite.php Documentation
+ * @link http://www.w3.org/TR/html4/struct/text.html#edef-CITE <cite> definition in HTML
+ * @link http://www.w3.org/TR/2005/WD-xhtml2-20050527/mod-text.html#edef_text_cite <cite> definition in XHTML 2.0
+ *
+ * @bug 4579
+ *
+ * @author Ævar Arnfjörð Bjarmason <avarab@gmail.com>
+ * @copyright Copyright © 2005, Ævar Arnfjörð Bjarmason
+ * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
+ */
+
+$wgExtensionFunctions[] = 'wfCite';
+$wgExtensionCredits['parserhook'][] = array(
+	'name' => 'Cite',
+	'author' => 'Ævar Arnfjörð Bjarmason',
+	'description' => 'Adds <nowiki><ref[ name=id]></nowiki> and <nowiki><references/></nowiki> tags, for citations',
+	'url' => 'http://www.mediawiki.org/wiki/Extension:Cite/Cite.php'
+);
+$wgParserTestFiles[] = dirname( __FILE__ ) . "/citeParserTests.txt";
+
+/**
+ * Error codes, first array = internal errors; second array = user errors
+ */
+$wgCiteErrors = array(
+	'system' => array(
+		'CITE_ERROR_STR_INVALID',
+		'CITE_ERROR_KEY_INVALID_1',
+		'CITE_ERROR_KEY_INVALID_2',
+		'CITE_ERROR_STACK_INVALID_INPUT'
+	),
+	'user' => array(
+		'CITE_ERROR_REF_NUMERIC_KEY',
+		'CITE_ERROR_REF_NO_KEY',
+		'CITE_ERROR_REF_TOO_MANY_KEYS',
+		'CITE_ERROR_REF_NO_INPUT',
+		'CITE_ERROR_REFERENCES_INVALID_INPUT',
+		'CITE_ERROR_REFERENCES_INVALID_PARAMETERS',
+		'CITE_ERROR_REFERENCES_NO_BACKLINK_LABEL'
+	)
+);
+
+for ( $i = 0; $i < count( $wgCiteErrors['system'] ); ++$i )
+	// System errors are negative integers
+	define( $wgCiteErrors['system'][$i], -($i + 1) );
+for ( $i = 0; $i < count( $wgCiteErrors['user'] ); ++$i )
+	// User errors are positive integers
+	define( $wgCiteErrors['user'][$i], $i + 1 );
+
+# Internationalisation file
+require_once( dirname(__FILE__) . '/Cite.i18n.php' );
+
+function wfCite() {
+	# Add messages
+	global $wgMessageCache, $wgCiteMessages;
+	foreach( $wgCiteMessages as $key => $value ) {
+		$wgMessageCache->addMessages( $wgCiteMessages[$key], $key );
+	}
+	
+	class Cite {
+		/**#@+
+		 * @access private
+		 */
+		
+		/**
+		 * Datastructure representing <ref> input, in the format of:
+		 * <code>
+		 * array(
+		 * 	'user supplied' => array(
+		 *		'text' => 'user supplied reference & key',
+		 *		'count' => 1, // occurs twice
+		 * 		'number' => 1, // The first reference, we want
+		 * 		               // all occourances of it to
+		 * 		               // use the same number
+		 *	),
+		 *	0 => 'Anonymous reference',
+		 *	1 => 'Another anonymous reference',
+		 *	'some key' => array(
+		 *		'text' => 'this one occurs once'
+		 *		'count' => 0,
+		 * 		'number' => 4
+		 *	),
+		 *	3 => 'more stuff'
+		 * );
+		 * </code>
+		 *
+		 * This works because:
+		 * * PHP's datastructures are guarenteed to be returned in the
+		 *   order that things are inserted into them (unless you mess
+		 *   with that)
+		 * * User supplied keys can't be integers, therefore avoiding
+		 *   conflict with anonymous keys
+		 *
+		 * @var array
+		 **/
+		var $mRefs = array();
+		
+		/**
+		 * Count for user displayed output (ref[1], ref[2], ...)
+		 *
+		 * @var int
+		 */
+		var $mOutCnt = 0;
+
+		/**
+		 * Internal counter for anonymous references, seperate from
+		 * $mOutCnt because anonymous references won't increment it,
+		 * but will incremement $mOutCnt
+		 *
+		 * @var int
+		 */
+		var $mInCnt = 0;
+
+		/**
+		 * The backlinks, in order, to pass as $3 to
+		 * 'cite_references_link_many_format', defined in
+		 * 'cite_references_link_many_format_backlink_labels
+		 *
+		 * @var array
+		 */
+		var $mBacklinkLabels;
+		
+		/**
+		 * @var object
+		 */
+		var $mParser;
+		
+		/**
+		 * True when a <ref> or <references> tag is being processed.
+		 * Used to avoid infinite recursion
+		 * 
+		 * @var boolean
+		 */
+		var $mInCite = false;
+		
+		/**#@-*/
+
+		/**
+		 * Constructor
+		 */
+		function Cite() {
+			$this->setHooks();
+		}
+
+		/**#@+ @access private */
+
+		/**
+		 * Callback function for <ref>
+		 *
+		 * @param string $str Input
+		 * @param array $argv Arguments
+		 * @return string
+		 */
+		function ref( $str, $argv, $parser ) {
+			if ( $this->mInCite ) {
+				return htmlspecialchars( "<ref>$str</ref>" );
+			} else {
+				$this->mInCite = true;
+				$ret = $this->guardedRef( $str, $argv, $parser );
+				$this->mInCite = false;
+				return $ret;
+			}
+		}
+		
+		function guardedRef( $str, $argv, $parser ) {
+			$this->mParser = $parser;
+			$key = $this->refArg( $argv );
+			
+			if ( $str !== null ) {
+				if ( $str === '' )
+					return $this->error( CITE_ERROR_REF_NO_INPUT );
+				if ( is_string( $key ) )
+					// I don't want keys in the form of /^[0-9]+$/ because they would
+					// conflict with the php datastructure I'm using, besides, why specify
+					// a manual key if it's just going to be any old integer?
+					if ( sprintf( '%d', $key ) === (string)$key )
+						return $this->error( CITE_ERROR_REF_NUMERIC_KEY );
+					else
+						return $this->stack( $str, $key );
+				else if ( $key === null )
+					return $this->stack( $str );
+				else if ( $key === false )
+					return $this->error( CITE_ERROR_REF_TOO_MANY_KEYS );
+				else
+					$this->croak( CITE_ERROR_KEY_INVALID_1, serialize( $key ) );
+			} else if ( $str === null ) {
+				if ( is_string( $key ) )
+					if ( sprintf( '%d', $key ) === (string)$key )
+						return $this->error( CITE_ERROR_REF_NUMERIC_KEY );
+					else
+						return $this->stack( $str, $key );
+				else if ( $key === false )
+					return $this->error( CITE_ERROR_REF_TOO_MANY_KEYS );
+				else if ( $key === null )
+					return $this->error( CITE_ERROR_REF_NO_KEY );
+				else
+					$this->croak( CITE_ERROR_KEY_INVALID_2, serialize( $key ) );
+					
+			} else
+				$this->croak( CITE_ERROR_STR_INVALID, serialize( $str ) );
+		}
+
+		/**
+		 * Parse the arguments to the <ref> tag
+		 *
+		 * @static
+		 *
+		 * @param array $argv The argument vector
+		 * @return mixed false on invalid input, a string on valid
+		 *               input and null on no input
+		 */
+		function refArg( $argv ) {
+
+			$cnt = count( $argv );
+			
+			if ( $cnt > 1 )
+				// There should only be one key
+				return false;
+			else if ( $cnt == 1 )
+				if ( isset( $argv['name'] ) )
+					// Key given.
+					return $this->validateName( array_shift( $argv ) );
+				else
+					// Invalid key
+					return false;
+			else
+				// No key
+				return null;
+		}
+		
+		/**
+		 * Since the key name is used in an XHTML id attribute, it must
+		 * conform to the validity rules. The restriction to begin with
+		 * a letter is lifted since references have their own prefix.
+		 *
+		 * @fixme merge this code with the various section name transformations
+		 * @fixme double-check for complete validity
+		 * @return string if valid, false if invalid
+		 */
+		function validateName( $name ) {
+			if( preg_match( '/^[A-Za-z0-9:_.-]*$/i', $name ) ) {
+				return $name;
+			} else {
+				// WARNING: CRAPPY CUT AND PASTE MAKES BABY JESUS CRY
+				$text = urlencode( str_replace( ' ', '_', $name ) );
+				$replacearray = array(
+					'%3A' => ':',
+					'%' => '.'
+				);
+				return str_replace(
+					array_keys( $replacearray ),
+					array_values( $replacearray ),
+					$text );
+			}
+		}
+
+		/**
+		 * Populate $this->mRefs based on input and arguments to <ref>
+		 *
+		 * @param string $str Input from the <ref> tag
+		 * @param mixed $key Argument to the <ref> tag as returned by $this->refArg()
+		 * @return string 
+		 */
+		function stack( $str, $key = null ) {
+			if ( $key === null ) {
+				// No key
+				$this->mRefs[] = $str;
+				return $this->linkRef( $this->mInCnt++ );
+			} else if ( is_string( $key ) )
+				// Valid key
+				if ( ! isset( $this->mRefs[$key] ) || ! is_array( $this->mRefs[$key] ) ) {
+					// First occourance
+					$this->mRefs[$key] = array(
+						'text' => $str,
+						'count' => 0,
+						'number' => ++$this->mOutCnt
+					);
+					return
+						$this->linkRef(
+							$key,
+							$this->mRefs[$key]['count'],
+							$this->mRefs[$key]['number']
+						);
+				} else {
+					// We've been here before
+					if ( $this->mRefs[$key]['text'] === null && $str !== '' ) {
+						// If no text found before, use this text
+						$this->mRefs[$key]['text'] = $str;
+					};
+					return 
+						$this->linkRef(
+							$key,
+							++$this->mRefs[$key]['count'],
+							$this->mRefs[$key]['number']
+						); }
+			else
+				$this->croak( CITE_ERROR_STACK_INVALID_INPUT, serialize( array( $key, $str ) ) );
+		}
+		
+		/**
+		 * Callback function for <references>
+		 *
+		 * @param string $str Input
+		 * @param array $argv Arguments
+		 * @return string
+		 */
+		function references( $str, $argv, $parser ) {
+			if ( $this->mInCite ) {
+				if ( is_null( $str ) ) {
+					return htmlspecialchars( "<references/>" );
+				} else {
+					return htmlspecialchars( "<references>$str</references>" );
+				}
+			} else {
+				$this->mInCite = true;
+				$ret = $this->guardedReferences( $str, $argv, $parser );
+				$this->mInCite = false;
+				return $ret;
+			}
+		}
+		
+		function guardedReferences( $str, $argv, $parser ) {
+			$this->mParser = $parser;
+			if ( $str !== null )
+				return $this->error( CITE_ERROR_REFERENCES_INVALID_INPUT );
+			else if ( count( $argv ) )
+				return $this->error( CITE_ERROR_REFERENCES_INVALID_PARAMETERS );
+			else
+				return $this->referencesFormat();
+		}
+
+		/**
+		 * Make output to be returned from the references() function
+		 *
+		 * @return string XHTML ready for output
+		 */
+		function referencesFormat() {
+			if ( count( $this->mRefs ) == 0 )
+				return '';
+			
+			$ent = array();
+			foreach ( $this->mRefs as $k => $v )
+				$ent[] = $this->referencesFormatEntry( $k, $v );
+			
+			$prefix = wfMsgForContentNoTrans( 'cite_references_prefix' );
+			$suffix = wfMsgForContentNoTrans( 'cite_references_suffix' );
+			$content = implode( "\n", $ent );
+			
+			// Live hack: parse() adds two newlines on WM, can't reproduce it locally -ævar
+			return rtrim( $this->parse( $prefix . $content . $suffix ), "\n" );
+		}
+
+		/**
+		 * Format a single entry for the referencesFormat() function
+		 *
+		 * @param string $key The key of the reference
+		 * @param mixed $val The value of the reference, string for anonymous
+		 *                   references, array for user-suppplied
+		 * @return string Wikitext
+		 */
+		function referencesFormatEntry( $key, $val ) {
+			// Anonymous reference
+			if ( ! is_array( $val ) )
+				return
+					wfMsgForContentNoTrans(
+						'cite_references_link_one',
+						$this->referencesKey( $key ),
+						$this->refKey( $key ),
+						$val
+					);
+			// Standalone named reference, I want to format this like an
+			// anonymous reference because displaying "1. 1.1 Ref text" is
+			// overkill and users frequently use named references when they
+			// don't need them for convenience
+			else if ( $val['count'] === 0 )
+				return
+					wfMsgForContentNoTrans(
+						'cite_references_link_one',
+						$this->referencesKey( $key ),
+						$this->refKey( $key, $val['count'] ),
+						$val['text']
+					);
+			// Named references with >1 occurrences
+			else {
+				$links = array();
+
+				for ( $i = 0; $i <= $val['count']; ++$i ) {
+					$links[] = wfMsgForContentNoTrans(
+							'cite_references_link_many_format',
+							$this->refKey( $key, $i ),
+							$this->referencesFormatEntryNumericBacklinkLabel( $val['number'], $i, $val['count'] ),
+							$this->referencesFormatEntryAlternateBacklinkLabel( $i )
+					);
+				}
+
+				$list = $this->listToText( $links );
+
+				return
+					wfMsgForContentNoTrans( 'cite_references_link_many',
+						$this->referencesKey( $key ),
+						$list,
+						$val['text']
+					);
+			}
+		}
+
+		/**
+		 * Generate a numeric backlink given a base number and an
+		 * offset, e.g. $base = 1, $offset = 2; = 1.2
+		 * Since bug #5525, it correctly does 1.9 -> 1.10 as well as 1.099 -> 1.100
+		 *
+		 * @static
+		 *
+		 * @param int $base The base
+		 * @param int $offset The offset
+		 * @param int $max Maximum value expected.
+		 * @return string
+		 */
+		function referencesFormatEntryNumericBacklinkLabel( $base, $offset, $max ) {
+			global $wgContLang;
+			$scope = strlen( $max );
+			$ret = $wgContLang->formatNum(
+				sprintf("%s.%0{$scope}s", $base, $offset)
+			);
+			return $ret;
+		}
+
+		/**
+		 * Generate a custom format backlink given an offset, e.g.
+		 * $offset = 2; = c if $this->mBacklinkLabels = array( 'a',
+		 * 'b', 'c', ...). Return an error if the offset > the # of
+		 * array items
+		 *
+		 * @param int $offset The offset
+		 *
+		 * @return string
+		 */
+		function referencesFormatEntryAlternateBacklinkLabel( $offset ) {
+			if ( !isset( $this->mBacklinkLabels ) ) {
+				$this->genBacklinkLabels();
+			}
+			if ( isset( $this->mBacklinkLabels[$offset] ) ) {
+				return $this->mBacklinkLabels[$offset];
+			} else {
+				// Feed me!
+				return $this->error( CITE_ERROR_REFERENCES_NO_BACKLINK_LABEL );
+			}
+		}
+
+		/**
+		 * Return an id for use in wikitext output based on a key and
+		 * optionally the # of it, used in <references>, not <ref>
+		 * (since otherwise it would link to itself)
+		 *
+		 * @static
+		 *
+		 * @param string $key The key
+		 * @param int $num The number of the key
+		 * @return string A key for use in wikitext
+		 */
+		function refKey( $key, $num = null ) {
+			$prefix = wfMsgForContent( 'cite_reference_link_prefix' );
+			$suffix = wfMsgForContent( 'cite_reference_link_suffix' );
+			if ( isset( $num ) )
+				$key = wfMsgForContentNoTrans( 'cite_reference_link_key_with_num', $key, $num );
+			
+			return $prefix . $key . $suffix;
+		}
+
+		/**
+		 * Return an id for use in wikitext output based on a key and
+		 * optionally the # of it, used in <ref>, not <references>
+		 * (since otherwise it would link to itself)
+		 *
+		 * @static
+		 *
+		 * @param string $key The key
+		 * @param int $num The number of the key
+		 * @return string A key for use in wikitext
+		 */
+		function referencesKey( $key, $num = null ) {
+			$prefix = wfMsgForContent( 'cite_references_link_prefix' );
+			$suffix = wfMsgForContent( 'cite_references_link_suffix' );
+			if ( isset( $num ) )
+				$key = wfMsgForContentNoTrans( 'cite_reference_link_key_with_num', $key, $num );
+			
+			return $prefix . $key . $suffix;
+		}
+
+		/**
+		 * Generate a link (<sup ...) for the <ref> element from a key
+		 * and return XHTML ready for output
+		 *
+		 * @param string $key The key for the link
+		 * @param int $count The # of the key, used for distinguishing
+		 *                   multiple occourances of the same key
+		 * @param int $label The label to use for the link, I want to
+		 *                   use the same label for all occourances of
+		 *                   the same named reference.
+		 * @return string
+		 */
+		function linkRef( $key, $count = null, $label = null ) {
+			global $wgContLang;
+
+			return
+				$this->parse(
+					wfMsgForContentNoTrans(
+						'cite_reference_link',
+						$this->refKey( $key, $count ),
+						$this->referencesKey( $key ),
+						$wgContLang->formatNum( is_null( $label ) ? ++$this->mOutCnt : $label )
+					)
+				);
+		}
+
+		/**
+		 * This does approximately the same thing as
+		 * Langauge::listToText() but due to this being used for a
+		 * slightly different purpose (people might not want , as the
+		 * first seperator and not 'and' as the second, and this has to
+		 * use messages from the content language) I'm rolling my own.
+		 *
+		 * @static
+		 *
+		 * @param array $arr The array to format
+		 * @return string
+		 */
+		function listToText( $arr ) {
+			$cnt = count( $arr );
+
+			$sep = wfMsgForContentNoTrans( 'cite_references_link_many_sep' );
+			$and = wfMsgForContentNoTrans( 'cite_references_link_many_and' );
+
+			if ( $cnt == 1 )
+				// Enforce always returning a string
+				return (string)$arr[0];
+			else {
+				$t = array_slice( $arr, 0, $cnt - 1 );
+				return implode( $sep, $t ) . $and . $arr[$cnt - 1];
+			}
+		}
+
+		/**
+		 * Parse a given fragment and fix up Tidy's trail of blood on
+		 * it...
+		 *
+		 * @param string $in The text to parse
+		 * @return string The parsed text
+		 */
+		function parse( $in ) {
+			if ( method_exists( $this->mParser, 'recursiveTagParse' ) ) {
+				// New fast method
+				return $this->mParser->recursiveTagParse( $in );
+			} else {
+				// Old method
+				$ret = $this->mParser->parse(
+					$in,
+					$this->mParser->mTitle,
+					$this->mParser->mOptions,
+					// Avoid whitespace buildup
+					false,
+					// Important, otherwise $this->clearState()
+					// would get run every time <ref> or
+					// <references> is called, fucking the whole
+					// thing up.
+					false
+				);
+				$text = $ret->getText();
+				
+				return $this->fixTidy( $text );
+			}
+		}
+
+		/**
+		 * Tidy treats all input as a block, it will e.g. wrap most
+		 * input in <p> if it isn't already, fix that and return the fixed text
+		 *
+		 * @static
+		 *
+		 * @param string $text The text to fix
+		 * @return string The fixed text
+		 */
+		function fixTidy( $text ) {
+			global $wgUseTidy;
+
+			if ( ! $wgUseTidy )
+				return $text;
+			else {
+				$text = preg_replace( '~^<p>\s*~', '', $text );
+				$text = preg_replace( '~\s*</p>\s*~', '', $text );
+				$text = preg_replace( '~\n$~', '', $text );
+				
+				return $text;
+			}
+		}
+
+		/**
+		 * Generate the labels to pass to the
+		 * 'cite_references_link_many_format' message, the format is an
+		 * arbitary number of tokens seperated by [\t\n ]
+		 */
+		function genBacklinkLabels() {
+			wfProfileIn( __METHOD__ );
+			$text = wfMsgForContentNoTrans( 'cite_references_link_many_format_backlink_labels' );
+			$this->mBacklinkLabels = preg_split( '#[\n\t ]#', $text );
+			wfProfileOut( __METHOD__ );
+		}
+
+		/**
+		 * Gets run when Parser::clearState() gets run, since we don't
+		 * want the counts to transcend pages and other instances
+		 */
+		function clearState() {
+			$this->mOutCnt = $this->mInCnt = 0;
+			$this->mRefs = array();
+
+			return true;
+		}
+
+		/**
+		 * Initialize the parser hooks
+		 */
+		function setHooks() {
+			global $wgParser, $wgHooks;
+			
+			$wgParser->setHook( 'ref' , array( &$this, 'ref' ) );
+			$wgParser->setHook( 'references' , array( &$this, 'references' ) );
+
+			$wgHooks['ParserClearState'][] = array( &$this, 'clearState' );
+		}
+
+		/**
+		 * Return an error message based on an error ID
+		 *
+		 * @param int $id ID for the error
+		 * @return string XHTML ready for output
+		 */
+		function error( $id ) {
+			if ( $id > 0 )
+				// User errors are positive
+				return 
+					$this->parse(
+						'<strong class="error">' .
+						wfMsgforContent( 'cite_error', $id, wfMsgForContent( "cite_error_$id" ) ) .
+						'</strong>'
+					);
+			else if ( $id < 0 )
+				return wfMsgforContent( 'cite_error', $id );
+		}
+
+		/**
+		 * Die with a backtrace if something happens in the code which
+		 * shouldn't have
+		 *
+		 * @param int $error  ID for the error
+		 * @param string $data Serialized error data
+		 */
+		function croak( $error, $data ) {
+			wfDebugDieBacktrace( wfMsgForContent( 'cite_croak', $this->error( $error ), $data ) );
+		}
+
+		/**#@-*/
+	}
+
+	new Cite;
+}
+
+/**#@-*/
+
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/FCKeditor.body.php
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/FCKeditor.body.php	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/FCKeditor.body.php	(revision 1280)
@@ -0,0 +1,289 @@
+<?php
+
+class FCKeditor_MediaWiki
+{
+    private $count = array();
+    private $wgFCKBypassText = "";
+    private $debug = 0;
+    private $excludedNamespaces;
+    static $nsToggles = array(
+    'riched_disable_ns_main',
+    'riched_disable_ns_talk',
+    'riched_disable_ns_user',
+    'riched_disable_ns_user_talk',
+    'riched_disable_ns_project',
+    'riched_disable_ns_project_talk',
+    'riched_disable_ns_image',
+    'riched_disable_ns_image_talk',
+    'riched_disable_ns_mediawiki',
+    'riched_disable_ns_mediawiki_talk',
+    'riched_disable_ns_template',
+    'riched_disable_ns_template_talk',
+    'riched_disable_ns_help',
+    'riched_disable_ns_help_talk',
+    'riched_disable_ns_category',
+    'riched_disable_ns_category_talk',
+    );
+
+    static $messagesLoaded = false;
+
+    function __call($m,$a)
+    {
+        print "\n#### " . $m . "\n";
+        if (!isset($this->count[$m])) {
+            $this->count[$m] = 0;
+        }
+        $this->count[$m]++;
+        return true;
+    }
+
+    function onMonoBookTemplateToolboxEnd()
+    {
+        if ($this->debug) {
+            print_r($this->count);
+        }
+    }
+
+    private function getExcludedNamespaces()
+    {
+        global $wgUser;
+
+        if ( is_null( $this->excludedNamespaces ) ) {
+            $this->excludedNamespaces = array();
+            foreach ( self::$nsToggles as $toggle ) {
+                if ( $wgUser->getOption( $toggle ) ) {
+                    $this->excludedNamespaces[] = constant(strtoupper(str_replace("riched_disable_", "", $toggle)));
+                }
+            }
+        }
+
+        return $this->excludedNamespaces;
+    }
+
+    public function registerHooks() {
+        global $wgHooks;
+
+        $wgHooks['UserToggles'][]                       = array($this, 'onUserToggles');
+        $wgHooks['MessagesPreLoad'][]                   = array($this, 'onMessagesPreLoad');
+        $wgHooks['ParserAfterTidy'][]                   = array($this, 'onParserAfterTidy');
+        $wgHooks['EditPage::showEditForm:initial'][]    = array($this, 'onEditPageShowEditFormInitial');
+
+        if ($this->debug) {
+            $opcje =  array('ArticleSave',
+            'ArticleInsertComplete', 'ArticleSaveComplete', 'TitleMoveComplete', 'ArticleProtect', 'ArticleProtectComplete', 'ArticleDelete', 'ArticleDeleteComplete', 'AlternateEdit', 'ArticleFromTitle', 'ArticleAfterFetchContent',
+            'ArticlePageDataBefore', 'ArticlePageDataAfter', 'ParserBeforeStrip', 'ParserAfterStrip', 'ParserBeforeInternalParse', 'InternalParseBeforeLinks', 'ParserBeforeTidy', 'ParserAfterTidy', 'ParserClearState', 'ParserGetVariableValueSwitch',
+            'ParserGetVariableValueTs', 'ParserGetVariableValueVarCache', 'OutputPageBeforeHTML', 'OutputPageParserOutput', 'CategoryPageView', 'PageRenderingHash', 'ArticleViewHeader', 'ArticleViewRedirect', 'editSectionLinkForOther', 'editSectionLink',
+            'AutoAuthenticate', 'UserLoginComplete', 'UserLogout', 'UserLogoutComplete', 'userCan', 'WatchArticle', 'WatchArticleComplete', 'UnwatchArticle', 'UnwatchArticleComplete', 'MarkPatrolled',
+            'MarkPatrolledComplete', 'EmailUser', 'EmailUserComplete', 'UploadVerification', 'UploadComplete', 'SpecialMovepageAfterMove', 'SpecialSearchNogomatch', 'ArticleEditUpdateNewTalk', 'UserRetrieveNewTalks', 'UserClearNewTalkNotification',
+            'ArticlePurge', 'SpecialPageGetRedirect', 'SpecialPageExecuteBeforeHeader', 'SpecialPageExecuteBeforePage', 'SpecialPageExecuteAfterPage', 'SpecialVersionExtensionTypes', 'SpecialPage_initList', 'UploadForm:initial', 'UploadForm:BeforeProcessing', 'AddNewAccount',
+            'AbortNewAccount', 'BlockIp', 'BlockIpComplete', 'UserRights', 'GetBlockedStatus', 'LogPageActionText', 'LogPageLogHeader', 'LogPageLogName', 'LogPageValidTypes', 'BeforePageDisplay',
+            'MonoBookTemplateToolboxEnd', 'PersonalUrls', 'SkinTemplateContentActions', 'SkinTemplateTabs', 'SkinTemplatePreventOtherActiveTabs', 'SkinTemplateSetupPageCss', 'SkinTemplateBuildContentActionUrlsAfterSpecialPage', 'SkinTemplateBuildNavUrlsNav_urlsAfterPermalink', 'UserCreateForm', 'UserLoginForm',
+            'ArticleEditUpdatesDeleteFromRecentchanges', 'EditFilter', 'EditPage::showEditForm:initial', 'GetInternalURL', 'GetLocalURL', 'GetFullURL', 'LanguageGetMagic', 'MagicWordMagicWords', 'MagicWordwgVariableIDs', 'MessagesPreLoad',
+            'ParserTestParser', 'SpecialContributionsBeforeMainOutput', 'UnknownAction', 'wgQueryPages', 'DisplayOldSubtitle', 'LoadAllMessages', 'RecentChange_save', 'UserToggles', 'BadImage', 'DiffViewHeader',
+            'EditFormPreloadText', 'EmailConfirmed', 'FetchChangesList', 'MathAfterTexvc', 'SiteNoticeAfter', 'SiteNoticeBefore');
+
+            foreach ($opcje as $o) {
+                $wgHooks[$o][] = $this;
+            }
+        }
+    }
+    
+    public function onParserAfterTidy(&$parser, &$text)
+    {
+        global $wgUseTeX, $wgUser, $wgTitle, $wgFCKEditorIsCompatible;
+        
+        if (!$wgUser->getOption( 'showtoolbar' ) || $wgUser->getOption( 'riched_disable' ) || !$wgFCKEditorIsCompatible) {
+            return true;
+        }
+
+        if (is_object($wgTitle) && in_array($wgTitle->getNamespace(), $this->getExcludedNamespaces())) {
+            return true;
+        }
+        
+        if ($wgUseTeX) {
+            //it may add much overload on page with huge amount of math content...
+			$text = preg_replace('/<img class="tex" alt="([^"]*)"/m', '<img _fckfakelement="true" _fck_mw_math="$1"', $text);
+			$text = preg_replace("/<img class='tex' src=\"([^\"]*)\" alt=\"([^\"]*)\"/m", '<img src="$1" _fckfakelement="true" _fck_mw_math="$2"', $text);
+        }
+        
+    	return true;
+    }
+    
+    public function onMessagesPreLoad()
+    {
+        global $wgMessageCache, $wgUser, $wgContLanguageCode;
+
+        if ( !self::$messagesLoaded ) {
+            $lang = $wgUser->getOption( 'language', $wgContLanguageCode );
+            $i18nfile = dirname( __FILE__ ) . DIRECTORY_SEPARATOR .'FCKeditor.i18n.' . $lang . '.php';
+
+            if ( file_exists( $i18nfile ) ) {
+                require( $i18nfile );
+            } else {
+                $lang = 'en';
+                require( dirname( __FILE__ ) . DIRECTORY_SEPARATOR .'FCKeditor.i18n.en.php' );
+            }
+
+            $wgMessageCache->addMessages( $allMessages, $lang );
+            self::$messagesLoaded = true;
+        }
+
+        return true;
+    }
+
+    /**
+     * Add FCK script
+     *
+     * @param unknown_type $q
+     * @return unknown
+     */
+    public function onEditPageShowEditFormInitial( $form ) {
+        global $wgOut, $wgTitle, $wgScriptPath;
+        global $wgFCKEditorToolbarSet, $wgFCKEditorIsCompatible;
+        global $wgFCKEditorExtDir, $wgFCKEditorDir, $wgFCKEditorHeight, $wgUser;
+        global $wgStylePath, $wgStyleVersion, $wgDefaultSkin, $wgExtensionFunctions;
+
+        if (!$wgUser->getOption( 'showtoolbar' ) || $wgUser->getOption( 'riched_disable' ) || !$wgFCKEditorIsCompatible) {
+            return true;
+        }
+
+        if (in_array($wgTitle->getNamespace(), $this->getExcludedNamespaces())) {
+            return true;
+        }
+
+        $options = new FCKeditorParserOptions();
+        $options->setTidy(true);
+        $parser = new FCKeditorParser();
+        $parser->setOutputType(OT_HTML);
+        $form->textbox1 = $parser->parse($form->textbox1, $wgTitle, $options)->getText();
+
+        $printsheet = htmlspecialchars( "$wgStylePath/common/wikiprintable.css?$wgStyleVersion" );
+
+        //CSS trick,  we need to get user CSS stylesheets somehow... it must be done in a different way!
+        $skin = $wgUser->getSkin();
+        $skin->loggedin = $wgUser->isLoggedIn();
+        $skin->mTitle =& $wgTitle;
+        $skin->skinname = 'monobook';
+        $skin->userpage = $wgUser->getUserPage()->getPrefixedText();
+        $skin->setupUserCss();
+
+        preg_match_all('/@import "([^"]+)";/', $skin->usercss, $matches);
+        $userStyles = $matches[1];
+        //End of CSS trick
+
+        $script = <<<HEREDOC
+<script type="text/javascript" src="$wgScriptPath/$wgFCKEditorDir/fckeditor.js"></script>
+<script type="text/javascript"> 
+var sEditorAreaCSS = '$printsheet,/mediawiki/skins/monobook/main.css?{$wgStyleVersion}';
+</script>
+<!--[if lt IE 5.5000]><script type="text/javascript">sEditorAreaCSS += ',/mediawiki/skins/monobook/IE50Fixes.css?{$wgStyleVersion}'; </script><![endif]-->
+<!--[if IE 5.5000]><script type="text/javascript">sEditorAreaCSS += ',/mediawiki/skins/monobook/IE55Fixes.css?{$wgStyleVersion}'; </script><![endif]-->
+<!--[if IE 6]><script type="text/javascript">sEditorAreaCSS += ',/mediawiki/skins/monobook/IE60Fixes.css?{$wgStyleVersion}'; </script><![endif]-->
+<!--[if IE 7]><script type="text/javascript">sEditorAreaCSS += ',/mediawiki/skins/monobook/IE70Fixes.css?{$wgStyleVersion}'; </script><![endif]-->
+<!--[if lt IE 7]><script type="text/javascript">sEditorAreaCSS += ',/mediawiki/skins/monobook/IEFixes.css?{$wgStyleVersion}'; </script><![endif]-->
+HEREDOC;
+
+        if (!is_null($userStyles) && !empty($userStyles)) {
+            $script .= '
+<script type="text/javascript"> 
+sEditorAreaCSS += ",'.implode(',', $userStyles).'";
+</script>';
+        }
+
+        $script .= <<<HEREDOC
+<script type="text/javascript"> 
+
+// Remove the mwSetupToolbar onload hook to avoid a JavaScript error with FF.
+if ( window.removeEventListener )
+	window.removeEventListener( 'load', mwSetupToolbar, false ) ;
+else if ( window.detachEvent )
+	window.detachEvent( 'onload', mwSetupToolbar ) ;
+	
+mwSetupToolbar = function() { return false ; } ;
+
+function onLoadFCKeditor()
+{
+	if ( document.getElementById('wpTextbox1') )
+	{
+		var height = $wgFCKEditorHeight ;
+		
+		if ( height == 0 )
+        {
+			// Get the window (inner) size.
+			var height = window.innerHeight || ( document.documentElement && document.documentElement.clientHeight ) || 550 ;
+			
+			// Reduce the height to the offset of the toolbar.
+			var offset = document.getElementById('wikiPreview') || document.getElementById('toolbar') ;
+			while ( offset )
+			{
+				height -= offset.offsetTop ;
+				offset = offset.offsetParent ;
+			}
+			
+			// Add a small space to be left in the bottom.
+			height -= 20 ;
+		}
+
+		// Enforce a minimum height.
+		height = ( !height || height < 300 ) ? 300 : height ;
+		
+		// Create the editor instance and replace the textarea.
+		var oFCKeditor = new FCKeditor('wpTextbox1') ;
+		oFCKeditor.BasePath = '$wgScriptPath/$wgFCKEditorDir/' ;
+		oFCKeditor.Config['CustomConfigurationsPath'] = '$wgScriptPath/$wgFCKEditorExtDir/fckeditor_config.js' ;
+		oFCKeditor.Config['EditorAreaCSS'] = "$wgScriptPath/$wgFCKEditorExtDir/css/fckeditor.css" ;
+		oFCKeditor.Height = height ;
+		oFCKeditor.ToolbarSet = '$wgFCKEditorToolbarSet' ;
+		oFCKeditor.ReplaceTextarea() ;
+		
+		// Hide the default toolbar.
+		document.getElementById('toolbar').style.cssText = 'display:none;' ;
+	}
+}
+addOnloadHook( onLoadFCKeditor ) ;
+
+/*
+function showSource() {
+    var wp = document.getElementById("wpDiff");
+    var s = document.createElement("input");
+    s.type="submit";
+    s.value="Wiki2HTML";
+    s.name="Wiki2HTML";
+    s.onclick = function wiki2html() {
+        var oEditor = FCKeditorAPI.GetInstance('wpTextbox1');        
+        WikiToHTML_Call();        
+        return false;
+    }
+    wp.parentNode.insertBefore(s, wp.nextSibling);
+}
+
+var sajax_debug_mode = false;
+var sajax_request_type = "GET";
+
+function WikiToHTML_Result(result)
+{
+    var oEditor = FCKeditorAPI.GetInstance('wpTextbox1');        
+    oEditor.SetHTML(result.responseText);
+}
+function WikiToHTML_Call()
+{
+     var oEditor = FCKeditorAPI.GetInstance('wpTextbox1');        
+     sajax_do_call('wfSajaxWikiToHTML', [oEditor.GetHTML()], WikiToHTML_Result); 
+}
+
+addOnloadHook(showSource);
+*/
+</script>        
+HEREDOC;
+
+        $wgOut->addScript($script);
+
+        return true;
+    }
+
+    public function onUserToggles( &$extraToggles ) {
+        $extraToggles[] = 'riched_disable';
+        $extraToggles = array_merge($extraToggles, self::$nsToggles);
+        return true;
+    }
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/FCKeditor.i18n.en.php
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/FCKeditor.i18n.en.php	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/FCKeditor.i18n.en.php	(revision 1280)
@@ -0,0 +1,22 @@
+<?php
+
+$allMessages = array(
+'textrichditor' => 'Rich Editor',
+'tog-riched_disable' => 'Disable rich editor',
+'tog-riched_disable_ns_main' => 'Disable rich editor within the main namespace',
+'tog-riched_disable_ns_talk' => 'Disable rich editor within the "{{ns:Talk}}" namespace',
+'tog-riched_disable_ns_user' => 'Disable rich editor within the "{{ns:User}}" namespace',
+'tog-riched_disable_ns_user_talk' => 'Disable rich editor within the "{{ns:User_talk}}" namespace',
+'tog-riched_disable_ns_project' => 'Disable rich editor within the "{{ns:Project}}" namespace',
+'tog-riched_disable_ns_project_talk' => 'Disable rich editor within the "{{ns:Project_talk}}" namespace',
+'tog-riched_disable_ns_image' => 'Disable rich editor within the "{{ns:Image}}" namespace',
+'tog-riched_disable_ns_image_talk' => 'Disable rich editor within the "{{ns:Image_talk}}" namespace',
+'tog-riched_disable_ns_mediawiki' => 'Disable rich editor within the "{{ns:MediaWiki}}" namespace',
+'tog-riched_disable_ns_mediawiki_talk' => 'Disable rich editor within the "{{ns:MediaWiki_talk}}" namespace',
+'tog-riched_disable_ns_template' => 'Disable rich editor within the "{{ns:Template}}" namespace',
+'tog-riched_disable_ns_template_talk' => 'Disable rich editor within the "{{ns:Template_talk}}" namespace',
+'tog-riched_disable_ns_help' => 'Disable rich editor within the "{{ns:Help}}" namespace',
+'tog-riched_disable_ns_help_talk' => 'Disable rich editor within the "{{ns:Help_talk}}" namespace',
+'tog-riched_disable_ns_category' => 'Disable rich editor within the "{{ns:Category}}" namespace',
+'tog-riched_disable_ns_category_talk' => 'Disable rich editor within the "{{ns:Category_talk}}" namespace',
+);
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/FCKeditor.i18n.pl.php
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/FCKeditor.i18n.pl.php	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/FCKeditor.i18n.pl.php	(revision 1280)
@@ -0,0 +1,22 @@
+<?php
+
+$allMessages = array(
+'textrichditor' => 'Rich Editor',
+'tog-riched_disable' => 'Wyłącz Rich Editora',
+'tog-riched_disable_ns_main' => 'Wyłącz Rich Editora wewątrz głównej przestrzeni nazw',
+'tog-riched_disable_ns_talk' => 'Wyłącz Rich Editora wewątrz przestrzeni nazw "{{ns:Talk}}"',
+'tog-riched_disable_ns_user' => 'Wyłącz Rich Editora wewątrz przestrzeni nazw "{{ns:User}}"',
+'tog-riched_disable_ns_user_talk' => 'Wyłącz Rich Editora wewątrz przestrzeni nazw "{{ns:User_talk}}"',
+'tog-riched_disable_ns_project' => 'Wyłącz Rich Editora wewątrz przestrzeni nazw "{{ns:Project}}"',
+'tog-riched_disable_ns_project_talk' => 'Wyłącz Rich Editora wewątrz przestrzeni nazw "{{ns:Project_talk}}"',
+'tog-riched_disable_ns_image' => 'Wyłącz Rich Editora wewątrz przestrzeni nazw "{{ns:Image}}"',
+'tog-riched_disable_ns_image_talk' => 'Wyłącz Rich Editora wewątrz przestrzeni nazw "{{ns:Image_talk}}"',
+'tog-riched_disable_ns_mediawiki' => 'Wyłącz Rich Editora wewątrz przestrzeni nazw "{{ns:MediaWiki}}"',
+'tog-riched_disable_ns_mediawiki_talk' => 'Wyłącz Rich Editora wewątrz przestrzeni nazw "{{ns:MediaWiki_talk}}"',
+'tog-riched_disable_ns_template' => 'Wyłącz Rich Editora wewątrz przestrzeni nazw "{{ns:Template}}"',
+'tog-riched_disable_ns_template_talk' => 'Wyłącz Rich Editora wewątrz przestrzeni nazw "{{ns:Template_talk}}"',
+'tog-riched_disable_ns_help' => 'Wyłącz Rich Editora wewątrz przestrzeni nazw "{{ns:Help}}"',
+'tog-riched_disable_ns_help_talk' => 'Wyłącz Rich Editora wewątrz przestrzeni nazw "{{ns:Help_talk}}"',
+'tog-riched_disable_ns_category' => 'Wyłącz Rich Editora wewątrz przestrzeni nazw "{{ns:Category}}"',
+'tog-riched_disable_ns_category_talk' => 'Wyłącz Rich Editora wewątrz przestrzeni nazw "{{ns:Category_talk}}"',
+);
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/FCKeditor.php
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/FCKeditor.php	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/FCKeditor.php	(revision 1280)
@@ -0,0 +1,73 @@
+<?php
+
+# Not a valid entry point, skip unless MEDIAWIKI is defined
+if (!defined('MEDIAWIKI')) {
+    echo <<<HEREDOC
+To install my extension, put the following line in LocalSettings.php:
+require_once( "\$IP/extensions/FCKeditor/FCKeditor.php" );
+HEREDOC;
+    exit( 1 );
+}
+
+/*
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
+*/
+
+require_once $IP . "/includes/GlobalFunctions.php";
+require_once $IP . "/includes/ParserOptions.php";
+require_once $IP . "/includes/Parser.php";
+require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . "FCKeditorSajax.body.php";
+require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . "FCKeditorParser.body.php";
+require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . "FCKeditorParserOptions.body.php";
+require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . "FCKeditorSkin.body.php";
+require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . "FCKeditor.body.php";
+require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . "fckeditor" . DIRECTORY_SEPARATOR . "fckeditor.php";
+
+$wgFCKEditorExtDir       = "extensions/FCKeditor";
+$wgFCKEditorDir          = "extensions/FCKeditor/fckeditor";
+$wgFCKEditorToolbarSet   = "Wiki";
+$wgFCKEditorHeight       = "0";		// "0" for automatic ("300" minimum).
+
+/**
+ * Enable use of AJAX features.
+ */
+$wgUseAjax = true;
+$wgAjaxExportList[] = 'wfSajaxSearchImageFCKeditor';
+$wgAjaxExportList[] = 'wfSajaxSearchArticleFCKeditor';
+$wgAjaxExportList[] = 'wfSajaxWikiToHTML';
+$wgAjaxExportList[] = 'wfSajaxGetImageUrl';
+$wgAjaxExportList[] = 'wfSajaxGetMathUrl';
+
+$wgExtensionCredits['other'][] = array(
+"name" => "FCKeditor extension",
+"author" => "FCKeditor.net (inspired by the code written by Mafs [Meta])",
+"version" => 'fckeditor/mw-extension $Rev$ 2007',
+"url" => "http://meta.wikimedia.org/wiki/FCKeditor",
+"description" => "FCKeditor extension"
+);
+
+$fckeditor = new FCKeditor("fake");
+$wgFCKEditorIsCompatible = $fckeditor->IsCompatible();
+
+$oFCKeditorExtension = new FCKeditor_MediaWiki();
+$oFCKeditorExtension->registerHooks();
+
+
+
+
+
+
+
+
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/FCKeditorParser.body.php
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/FCKeditorParser.body.php	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/FCKeditorParser.body.php	(revision 1280)
@@ -0,0 +1,445 @@
+<?php
+
+class FCKeditorParser extends Parser
+{
+    public static $fkc_mw_makeImage_options;
+    protected $fck_mw_strtr_span;
+    protected $fck_mw_strtr_span_counter=1;
+    protected $fck_mw_taghook;
+    protected $fck_internal_parse_text;
+
+    private $FCKeditorMagicWords = array(
+    '__NOTOC__',
+    '__FORCETOC__',
+    '__NOEDITSECTION__',
+    '__START__',
+    '__NOTITLECONVERT__',
+    '__NOCONTENTCONVERT__',
+    '__END__',
+    '__TOC__',
+    '__NOTC__',
+    '__NOCC__',
+    "__FORCETOC__",
+    "__NEWSECTIONLINK__",
+    "__NOGALLERY__",
+    );
+
+    function __construct() {
+        global $wgParser;
+        parent::Parser();
+
+        foreach ($wgParser->getTags() as $h) {
+            if (!in_array($h, array("pre"))) {
+                $this->setHook($h, array($this, "fck_genericTagHook"));
+            }
+        }
+    }
+
+    /**
+     * Add special string (that would be changed by Parser) to array and return simple unique string 
+     * that will remain unchanged during whole parsing operation.
+     * At the end we'll replace all this unique strings with original content
+     *
+     * @param string $text
+     * @return string
+     */
+    private function fck_addToStrtr($text) {
+        $key = 'Fckmw'.$this->fck_mw_strtr_span_counter.'fckmw';
+        $this->fck_mw_strtr_span_counter++;
+        $this->fck_mw_strtr_span[$key] = $text;
+        return $key;
+    }
+
+    /**
+	* Callback function for custom tags: feed, ref, references etc.
+	*
+	* @param string $str Input
+	* @param array $argv Arguments
+	* @return string
+	*/
+    function fck_genericTagHook( $str, $argv, $parser ) {
+        if (empty($argv)) {
+            $ret = "<span class=\"fck_mw_".$this->fck_mw_taghook."\" _fck_mw_customtag=\"true\" _fck_mw_tagname=\"".$this->fck_mw_taghook."\">";
+        }
+        else {
+            $ret = "<span class=\"fck_mw_".$this->fck_mw_taghook."\" _fck_mw_customtag=\"true\" _fck_mw_tagname=\"".$this->fck_mw_taghook."\"";
+            foreach ($argv as $key=>$value) {
+                $ret .= " ".$key."=\"".$value."\"";
+            }
+            $ret .=">";
+        }
+        if (is_null($str)) {
+            $ret = substr($ret, 0, -1) . " />";
+        }
+        else {
+            $ret .= htmlspecialchars($str);
+            $ret .= "</span>";
+        }
+
+        $replacement = $this->fck_addToStrtr($ret);
+        return $replacement;
+    }
+
+    /**
+	* Callback function for wiki tags: nowiki, includeonly, noinclude
+	*
+	* @param string $tagName tag name, eg. nowiki, math
+	* @param string $str Input
+	* @param array $argv Arguments
+	* @return string
+	*/
+    function fck_wikiTag( $tagName, $str, $argv = array()) {
+        if (empty($argv)) {
+            $ret = "<span class=\"fck_mw_".$tagName."\">";
+        }
+        else {
+            $ret = "<span class=\"fck_mw_".$tagName."\"";
+            foreach ($argv as $key=>$value) {
+                $ret .= " ".$key."=\"".$value."\"";
+            }
+            $ret .=">";
+        }
+        if (is_null($str)) {
+            $ret = substr($ret, 0, -1) . " />";
+        }
+        else {
+            $ret .= htmlspecialchars($str);
+            $ret .= "</span>";
+        }
+
+        $replacement = $this->fck_addToStrtr($ret);
+
+        return $replacement;
+    }
+
+    /**
+	 * Strips and renders nowiki, pre, math, hiero
+	 * If $render is set, performs necessary rendering operations on plugins
+	 * Returns the text, and fills an array with data needed in unstrip()
+	 *
+	 * @param StripState $state
+	 *
+	 * @param bool $stripcomments when set, HTML comments <!-- like this -->
+	 *  will be stripped in addition to other tags. This is important
+	 *  for section editing, where these comments cause confusion when
+	 *  counting the sections in the wikisource
+	 *
+	 * @param array dontstrip contains tags which should not be stripped;
+	 *  used to prevent stipping of <gallery> when saving (fixes bug 2700)
+	 *
+	 * @private
+	 */
+    function strip( $text, $state, $stripcomments = false , $dontstrip = array () ) {
+        global $wgContLang;
+
+        wfProfileIn( __METHOD__ );
+        $render = ($this->mOutputType == OT_HTML);
+
+        $uniq_prefix = $this->mUniqPrefix;
+        $commentState = new ReplacementArray;
+        $nowikiItems = array();
+        $generalItems = array();
+
+        $elements = array_merge(
+        array( 'nowiki', 'gallery' ),
+        array_keys( $this->mTagHooks ) );
+        global $wgRawHtml;
+        if( $wgRawHtml ) {
+            $elements[] = 'html';
+        }
+        if( $this->mOptions->getUseTeX() ) {
+            $elements[] = 'math';
+        }
+
+        # Removing $dontstrip tags from $elements list (currently only 'gallery', fixing bug 2700)
+        foreach ( $elements AS $k => $v ) {
+            if ( !in_array ( $v , $dontstrip ) ) continue;
+            unset ( $elements[$k] );
+        }
+
+        $matches = array();
+        $text = Parser::extractTagsAndParams( $elements, $text, $matches, $uniq_prefix );
+
+        foreach( $matches as $marker => $data ) {
+            list( $element, $content, $params, $tag ) = $data;
+            if( $render ) {
+                $tagName = strtolower( $element );
+                wfProfileIn( __METHOD__."-render-$tagName" );
+                switch( $tagName ) {
+                    case '!--':
+                        // Comment
+                        if( substr( $tag, -3 ) == '-->' ) {
+                            $output = $tag;
+                        } else {
+                            // Unclosed comment in input.
+                            // Close it so later stripping can remove it
+                            $output = "$tag-->";
+                        }
+                        break;
+                    case 'html':
+                        if( $wgRawHtml ) {
+                            $output = $content;
+                            break;
+                        }
+                        // Shouldn't happen otherwise. :)
+                    case 'nowiki':
+                        $output = $this->fck_wikiTag('nowiki', $content, $params); //required by FCKeditor
+                        break;
+                    case 'math':
+                        $output = $wgContLang->armourMath( MathRenderer::renderMath( $content ) );
+                        break;
+                    case 'gallery':
+                        $output = $this->renderImageGallery( $content, $params );
+                        break;
+                    default:
+                        if( isset( $this->mTagHooks[$tagName] ) ) {
+                            $this->fck_mw_taghook = $tagName; //required by FCKeditor
+                            $output = call_user_func_array( $this->mTagHooks[$tagName],
+                            array( $content, $params, $this ) );
+                        } else {
+                            throw new MWException( "Invalid call hook $element" );
+                        }
+                }
+                wfProfileOut( __METHOD__."-render-$tagName" );
+            } else {
+                // Just stripping tags; keep the source
+                $output = $tag;
+            }
+
+            // Unstrip the output, to support recursive strip() calls
+            $output = $state->unstripBoth( $output );
+
+            if( !$stripcomments && $element == '!--' ) {
+                $commentState->setPair( $marker, $output );
+            } elseif ( $element == 'html' || $element == 'nowiki' ) {
+                $nowikiItems[$marker] = $output;
+            } else {
+                $generalItems[$marker] = $output;
+            }
+        }
+        # Add the new items to the state
+        # We do this after the loop instead of during it to avoid slowing
+        # down the recursive unstrip
+        $state->nowiki->mergeArray( $nowikiItems );
+        $state->general->mergeArray( $generalItems );
+
+        # Unstrip comments unless explicitly told otherwise.
+        # (The comments are always stripped prior to this point, so as to
+        # not invoke any extension tags / parser hooks contained within
+        # a comment.)
+        if ( !$stripcomments ) {
+            // Put them all back and forget them
+            $text = $commentState->replace( $text );
+        }
+
+        wfProfileOut( __METHOD__ );
+        return $text;
+    }
+
+    /** Replace HTML comments with unique text using fck_addToStrtr function
+	 *
+	 * @private
+	 * @param string $text
+	 * @return string
+	 */
+    private function fck_replaceHTMLcomments( $text ) {
+        wfProfileIn( __METHOD__ );
+        while (($start = strpos($text, '<!--')) !== false) {
+            $end = strpos($text, '-->', $start + 4);
+            if ($end === false) {
+                # Unterminated comment; bail out
+                break;
+            }
+
+            $end += 3;
+
+            # Trim space and newline if the comment is both
+            # preceded and followed by a newline
+            $spaceStart = max($start - 1, 0);
+            $spaceLen = $end - $spaceStart;
+            while (substr($text, $spaceStart, 1) === ' ' && $spaceStart > 0) {
+                $spaceStart--;
+                $spaceLen++;
+            }
+            while (substr($text, $spaceStart + $spaceLen, 1) === ' ')
+            $spaceLen++;
+            if (substr($text, $spaceStart, 1) === "\n" and substr($text, $spaceStart + $spaceLen, 1) === "\n") {
+                # Remove the comment, leading and trailing
+                # spaces, and leave only one newline.
+                $replacement = $this->fck_addToStrtr(substr($text, $spaceStart, $spaceLen+1));
+                $text = substr_replace($text, $replacement."\n", $spaceStart, $spaceLen + 1);
+            }
+            else {
+                # Remove just the comment.
+                $replacement = $this->fck_addToStrtr(substr($text, $start, $end - $start));
+                $text = substr_replace($text, $replacement, $start, $end - $start);
+            }
+        }
+        wfProfileOut( __METHOD__ );
+        
+        return $text;
+    }
+
+    function replaceInternalLinks( $text ) {
+        return parent::replaceInternalLinks($text);
+    }
+
+    function makeImage( $nt, $options ) {
+        FCKeditorParser::$fkc_mw_makeImage_options = $options;
+        return parent::makeImage( $nt, $options );
+    }
+
+    /**
+     * Replace templates with unique text to preserve them from parsing
+     *
+     * @todo if {{template}} is inside string that also must be returned unparsed, 
+     * e.g. <noinclude>{{template}}</noinclude>
+     * {{template}} replaced with Fckmw[n]fckmw which is wrong...
+     * 
+     * @param string $text
+     * @return string
+     */
+    private function fck_replaceTemplates( $text ) {
+        
+        $callback = array('{' =>
+        array(
+        'end'=>'}',
+        'cb' => array(
+        2=>array('FCKeditorParser', 'fck_leaveTemplatesAlone'),
+        3=>array('FCKeditorParser', 'fck_leaveTemplatesAlone'),
+        ),
+        'min' =>2,
+        'max' =>3,
+        )
+        );
+
+        $text = $this->replace_callback($text, $callback);
+
+        $tags = array();
+        $offset=0;
+        $textTmp = $text;
+        while (false !== ($pos = strpos($textTmp, "<!--FCK_SKIP_START-->")))
+        {
+            $tags[abs($pos + $offset)] = 1;
+            $textTmp = substr($textTmp, $pos+21);
+            $offset += $pos + 21;
+        }
+
+        $offset=0;
+        $textTmp = $text;
+        while (false !== ($pos = strpos($textTmp, "<!--FCK_SKIP_END-->")))
+        {
+            $tags[abs($pos + $offset)] = -1;
+            $textTmp = substr($textTmp, $pos+19);
+            $offset += $pos + 19;
+        }
+
+        if (!empty($tags)) {
+            ksort($tags);
+
+            $strtr = array("<!--FCK_SKIP_START-->" => "", "<!--FCK_SKIP_END-->" => "");
+
+            $sum=0;
+            $lastSum=0;
+            $finalString = "";
+            $stringToParse = "";
+            $startingPos = 0;
+            $inner = "";
+            $strtr_span = array();
+            foreach ($tags as $pos=>$type) {
+                $sum += $type;
+                if ($sum == 1 && $lastSum == 0) {
+                    $stringToParse .= strtr(substr($text, $startingPos, $pos - $startingPos), $strtr);
+                    $startingPos = $pos;
+                }
+                else if ($sum == 0) {
+                    $stringToParse .= 'Fckmw'.$this->fck_mw_strtr_span_counter.'fckmw';
+                    $inner = htmlspecialchars(strtr(substr($text, $startingPos, $pos - $startingPos + 19), $strtr));
+                    $this->fck_mw_strtr_span['href="Fckmw'.$this->fck_mw_strtr_span_counter.'fckmw"'] = 'href="'.$inner.'"';
+                    $this->fck_mw_strtr_span['Fckmw'.$this->fck_mw_strtr_span_counter.'fckmw'] = '<span class="fck_mw_template">'.$inner.'</span>';
+                    $startingPos = $pos + 19;
+                    $this->fck_mw_strtr_span_counter++;
+                }
+                $lastSum = $sum;
+            }
+            $stringToParse .= substr($text, $startingPos);
+            $text = &$stringToParse;
+        }        
+        
+        return $text;
+    }
+
+    function internalParse ( $text ) {
+
+        $this->fck_internal_parse_text =& $text;
+
+        //these three tags should remain unchanged
+        $text = StringUtils::delimiterReplaceCallback( '<includeonly>', '</includeonly>', array($this, 'fck_includeonly'), $text );
+        $text = StringUtils::delimiterReplaceCallback( '<noinclude>', '</noinclude>', array($this, 'fck_noinclude'), $text );
+        $text = StringUtils::delimiterReplaceCallback( '<onlyinclude>', '</onlyinclude>', array($this, 'fck_onlyinclude'), $text );
+
+        //html comments shouldn't be stripped
+        $text = $this->fck_replaceHTMLcomments( $text );
+        //as well as templates
+        $text = $this->fck_replaceTemplates( $text );                
+        
+        $finalString = parent::internalParse($text);
+
+        return $finalString;
+    }
+    function fck_includeonly( $matches ) {
+        return $this->fck_wikiTag('includeonly', $matches[1]);
+    }
+    function fck_noinclude( $matches ) {
+        return $this->fck_wikiTag('noinclude', $matches[1]);
+    }
+    function fck_onlyinclude( $matches ) {
+        return $this->fck_wikiTag('onlyinclude', $matches[1]);
+    }
+    function fck_leaveTemplatesAlone( $matches ) {
+        return "<!--FCK_SKIP_START-->".$matches['text']."<!--FCK_SKIP_END-->";
+    }
+    function formatHeadings( $text, $isMain=true ) {
+        return $text;
+    }
+    function replaceFreeExternalLinks( $text ) { return $text; }
+    function stripNoGallery($text) {}
+    function stripToc( $text ) {
+        //$prefix = '<span class="fck_mw_magic">';
+        //$suffix = '</span>';
+        $prefix = '';
+        $suffix = '';
+
+        $strtr = array();
+        foreach ($this->FCKeditorMagicWords as $word) {
+            $strtr[$word] = $prefix . $word . $suffix;
+        }
+
+        return strtr( $text, $strtr );
+    }
+
+    function parse( $text, &$title, $options, $linestart = true, $clearState = true, $revid = null ) {
+        $parserOutput = parent::parse($text, $title, $options, $linestart , $clearState , $revid );
+
+        $categories = $parserOutput->getCategories();
+        if ($categories) {
+            $appendString = "";
+            foreach ($categories as $cat=>$val) {
+                $appendString .= "<a href=\"Category:" . $cat ."\">Category:" . $cat ."</a> ";
+            }
+            $parserOutput->setText($parserOutput->getText() . $appendString);
+        }
+        
+        if (!empty($this->fck_mw_strtr_span)) {
+            $parserOutput->setText(strtr($parserOutput->getText(), $this->fck_mw_strtr_span));
+        }
+
+        return $parserOutput;
+    }
+
+    /*
+    function replaceVariables( $text, $args = array(), $argsOnly = false ) {
+    return preg_replace("/\{\{([^}]+)\}\}(\}*)/", '<span class="fck_template">{{$1}}$2</span>', $text);
+    }
+    */
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/FCKeditorParserOptions.body.php
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/FCKeditorParserOptions.body.php	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/FCKeditorParserOptions.body.php	(revision 1280)
@@ -0,0 +1,14 @@
+<?php
+
+class FCKeditorParserOptions extends ParserOptions 
+{
+    function getNumberHeadings() {return false;}
+    function getEditSection() {return false;}
+    
+	function getSkin() {
+		if ( !isset( $this->mSkin ) ) {
+			$this->mSkin = new FCKeditorSkin( $this->mUser->getSkin() );
+		}
+		return $this->mSkin;
+	}
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/FCKeditorSajax.body.php
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/FCKeditorSajax.body.php	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/FCKeditorSajax.body.php	(revision 1280)
@@ -0,0 +1,134 @@
+<?php
+
+function wfSajaxGetMathUrl( $term )
+{
+    $originalLink = MathRenderer::renderMath( $term );
+    
+    if (false == strpos($originalLink, "src=\"")) {
+        return "";
+    }
+
+    $srcPart = substr($originalLink, strpos($originalLink, "src=")+ 5);
+    $url = strtok($srcPart, '"');
+
+    return $url;
+}
+
+function wfSajaxGetImageUrl( $term )
+{
+    global $wgExtensionFunctions, $wgTitle;
+
+    $options = new FCKeditorParserOptions();
+    $options->setTidy(true);
+    $parser = new FCKeditorParser();
+
+    if (in_array("wfCite", $wgExtensionFunctions)) {
+        $parser->setHook('ref', array($parser, 'ref'));
+        $parser->setHook('references', array($parser, 'references'));
+    }
+    $parser->setOutputType(OT_HTML);
+    $originalLink = $parser->parse("[[Image:".$term."]]", $wgTitle, $options)->getText();
+    if (false == strpos($originalLink, "src=\"")) {
+        return "";
+    }
+
+    $srcPart = substr($originalLink, strpos($originalLink, "src=")+ 5);
+    $url = strtok($srcPart, '"');
+
+    return $url;
+}
+
+function wfSajaxSearchImageFCKeditor( $term )
+{
+    global $wgContLang, $wgOut;
+    $limit = 10;
+
+    $term = $wgContLang->checkTitleEncoding( $wgContLang->recodeInput( js_unescape( $term ) ) );
+    $term1 = str_replace( ' ', '_', $wgContLang->ucfirst( $term ) );
+    $term2 = str_replace( ' ', '_', $wgContLang->lc( $term ) );
+    $term3 = str_replace( ' ', '_', $wgContLang->uc( $term ) );
+    $term = $term1;
+
+    if ( strlen( str_replace( '_', '', $term ) )<3 )
+    return "";
+
+    $db =& wfGetDB( DB_SLAVE );
+    $res = $db->select( 'page', 'page_title',
+    array(  'page_namespace' => NS_IMAGE,
+    "LOWER(page_title) LIKE '%". $db->strencode( $term2 ) ."%'" ),
+    "wfSajaxSearch",
+    array( 'LIMIT' => $limit+1 )
+    );
+
+    $ret = "";
+    $i=0;
+    while ( ( $row = $db->fetchObject( $res ) ) && ( ++$i <= $limit ) ) {
+        $ret .= $row->page_title ."\n";
+    }
+
+    $term = htmlspecialchars( $term );
+
+    return $ret;
+}
+
+function wfSajaxSearchArticleFCKeditor( $term )
+{
+    global $wgContLang, $wgOut;
+    $limit = 10;    
+    $ns = NS_MAIN;
+    
+    $term = $wgContLang->checkTitleEncoding( $wgContLang->recodeInput( js_unescape( $term ) ) );
+    
+    if (strpos($term, "Category:") === 0) {
+        $ns = NS_CATEGORY;
+        $term = substr($term, 9);
+        $prefix = "Category:";
+    }
+    else if (strpos($term, ":Category:") === 0) {
+        $ns = NS_CATEGORY;
+        $term = substr($term, 10);        
+        $prefix = ":Category:";
+    }
+    
+    $term1 = str_replace( ' ', '_', $wgContLang->ucfirst( $term ) );
+    $term2 = str_replace( ' ', '_', $wgContLang->lc( $term ) );
+    $term3 = str_replace( ' ', '_', $wgContLang->uc( $term ) );
+    $term = $term1;
+
+    if ( strlen( str_replace( '_', '', $term ) )<3 ) {
+        return "";
+    }
+
+    $db =& wfGetDB( DB_SLAVE );
+    $res = $db->select( 'page', 'page_title',
+    array(  'page_namespace' => $ns,
+    "LOWER(page_title) LIKE '%". $db->strencode( $term2 ) ."%'" ),
+    "wfSajaxSearch",
+    array( 'LIMIT' => $limit+1 )
+    );
+
+    $ret = "";
+    $i=0;
+    while ( ( $row = $db->fetchObject( $res ) ) && ( ++$i <= $limit ) ) {
+        if (isset($prefix) && !is_null($prefix)) {
+            $ret .= $prefix;
+        }
+        $ret .= $row->page_title ."\n";
+    }
+
+    $term = htmlspecialchars( $term );
+
+    return $ret;
+}
+
+function wfSajaxWikiToHTML( $wiki )
+{
+    global $wgTitle;
+
+    $options = new FCKeditorParserOptions();
+    $options->setTidy(true);
+    $parser = new FCKeditorParser();
+    $parser->setOutputType(OT_HTML);
+
+    return $parser->parse($wiki, $wgTitle, $options)->getText();
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/FCKeditorSkin.body.php
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/FCKeditorSkin.body.php	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/FCKeditorSkin.body.php	(revision 1280)
@@ -0,0 +1,346 @@
+<?php
+
+class FCKeditorSkin
+{
+    private $skin;
+
+    /**
+     * Create image link in MediaWiki 1.10
+     *
+	 * @param Title $nt
+	 * @param string $label label text
+	 * @param string $alt alt text
+	 * @param string $align horizontal alignment: none, left, center, right)
+	 * @param array $params Parameters to be passed to the media handler
+	 * @param boolean $framed shows image in original size in a frame
+	 * @param boolean $thumb shows image as thumbnail in a frame
+	 * @param string $manual_thumb image name for the manual thumbnail
+	 * @param string $valign vertical alignment: baseline, sub, super, top, text-top, middle, bottom, text-bottom
+	 * @return string     * 
+     */
+    function makeImageLinkObj( $nt, $label, $alt, $align = '', $params = array(), $framed = false,
+    $thumb = false, $manual_thumb = '', $valign = '' )
+    {
+        $orginal = $nt->getText();
+        $img   = new Image( $nt );
+        $imgName = $img->getName();
+        $found = $img->getURL();
+
+        if ($found) {
+            //trick to get real Url for image:
+            $originalLink = strip_tags(Linker::makeImageLinkObj($nt, $label, $alt, $align , $params , $framed , $thumb , $manual_thumb , $valign ), "<img>");
+            $srcPart = substr($originalLink, strpos($originalLink, "src=")+ 5);
+            $url = strtok($srcPart, '"');
+        }
+
+        $ret = "<img ";
+
+        if ($found) {
+            $ret .= "src=\"{$url}\" ";
+        }
+        else {
+            $ret .= "_fck_mw_valid=\"false"."\" ";
+        }
+        $ret .= "_fck_mw_filename=\"{$orginal}\" ";
+
+        if ($align) {
+            $ret .= "_fck_mw_location=\"".strtolower($align)."\" ";
+        }
+        if (!empty($params)) {
+            if (isset($params['width'])) {
+                $ret .= "_fck_mw_width=\"".$params['width']."\" ";
+            }
+            if (isset($params['height'])) {
+                $ret .= "_fck_mw_height=\"".$params['height']."\" ";
+            }
+        }
+        $class = "";
+        if ($thumb) {
+            $ret .= "_fck_mw_type=\"thumb"."\" ";
+            $class .= "fck_mw_frame";
+        }
+        else if ($framed) {
+            $ret .= "_fck_mw_type=\"frame"."\" ";
+            $class .= "fck_mw_frame";
+        }
+
+        if ($align == "right") {
+            $class .= ($class?" ":"") . "fck_mw_right";
+        }
+        else if($align == "center") {
+            $class .= ($class?" ":"") . "fck_mw_center";
+        }
+        else if($align == "left") {
+            $class .= ($class?" ":"") . "fck_mw_left";
+        }
+        else if($framed || $thumb) {
+            $class .= ($class?" ":"") . "fck_mw_right";
+        }
+
+        if (!$found) {
+            $class .= ($class?" ":"") . "fck_mw_notfound";
+        }
+
+        if (!is_null($alt) && !empty($alt) && false !== strpos(FCKeditorParser::$fkc_mw_makeImage_options, $alt) && $alt != "Image:" . $orginal) {
+            $ret .= "alt=\"".htmlspecialchars($alt)."\" ";
+        }
+        else {
+            $ret .= "alt=\"\" ";
+        }
+
+        if ($class) {
+            $ret .= "class=\"$class\" ";
+        }
+
+        $ret .= "/>";
+
+        return $ret;
+    }
+
+    /**
+	 * Make an image link in Mediawiki 1.11
+	 * @param Title $title Title object
+	 * @param File $file File object, or false if it doesn't exist
+	 *
+     * @param array $frameParams Associative array of parameters external to the media handler.
+     *     Boolean parameters are indicated by presence or absence, the value is arbitrary and 
+     *     will often be false.
+     *          thumbnail       If present, downscale and frame
+     *          manualthumb     Image name to use as a thumbnail, instead of automatic scaling
+     *          framed          Shows image in original size in a frame
+     *          frameless       Downscale but don't frame
+     *          upright         If present, tweak default sizes for portrait orientation
+     *          upright_factor  Fudge factor for "upright" tweak (default 0.75)
+     *          border          If present, show a border around the image
+     *          align           Horizontal alignment (left, right, center, none)
+     *          valign          Vertical alignment (baseline, sub, super, top, text-top, middle, 
+     *                          bottom, text-bottom)
+     *          alt             Alternate text for image (i.e. alt attribute). Plain text.
+     *          caption         HTML for image caption.
+	 *
+     * @param array $handlerParams Associative array of media handler parameters, to be passed 
+     *       to transform(). Typical keys are "width" and "page". 
+	 */
+    function makeImageLink2( Title $nt, $file, $frameParams = array(), $handlerParams = array() ) {
+        $orginal = $nt->getText();
+        $img   = new Image( $nt );
+        $imgName = $img->getName();
+        $found = $img->getURL();
+
+        if ($found) {
+            $originalLink = Linker::makeImageLink2( $nt, $file, $frameParams, $handlerParams);
+
+            if (false !== strpos($originalLink, "src=\"")) {
+                $srcPart = substr($originalLink, strpos($originalLink, "src=")+ 5);
+                $url = strtok($srcPart, '"');
+            }
+            $srcPart = substr($originalLink, strpos($originalLink, "src=")+ 5);
+            $url = strtok($srcPart, '"');
+        }
+
+        // Shortcuts
+        $fp =& $frameParams;
+        $hp =& $handlerParams;
+
+        if (!isset($fp['align'])) {
+            $fp['align'] = '';
+        }
+
+        $ret = "<img ";
+
+        if ($found) {
+            $ret .= "src=\"{$url}\" ";
+        }
+        else {
+            $ret .= "_fck_mw_valid=\"false"."\" ";
+        }
+        $ret .= "_fck_mw_filename=\"{$orginal}\" ";
+
+        if ($fp['align']) {
+            $ret .= "_fck_mw_location=\"".strtolower($fp['align'])."\" ";
+        }
+        if (!empty($hp)) {
+            if (isset($hp['width'])) {
+                $ret .= "_fck_mw_width=\"".$hp['width']."\" ";
+            }
+            if (isset($hp['height'])) {
+                $ret .= "_fck_mw_height=\"".$hp['height']."\" ";
+            }
+        }
+        $class = "";
+        if (isset($fp['thumbnail'])) {
+            $ret .= "_fck_mw_type=\"thumb"."\" ";
+            $class .= "fck_mw_frame";
+        }
+        else if (isset($fp['framed'])) {
+            $ret .= "_fck_mw_type=\"frame"."\" ";
+            $class .= "fck_mw_frame";
+        }
+
+        if ($fp['align'] == "right") {
+            $class .= ($class?" ":"") . "fck_mw_right";
+        }
+        else if($fp['align'] == "center") {
+            $class .= ($class?" ":"") . "fck_mw_center";
+        }
+        else if($fp['align'] == "left") {
+            $class .= ($class?" ":"") . "fck_mw_left";
+        }
+        else if(isset($fp['framed']) || isset($fp['thumbnail'])) {
+            $class .= ($class?" ":"") . "fck_mw_right";
+        }
+
+        if (!$found) {
+            $class .= ($class?" ":"") . "fck_mw_notfound";
+        }
+
+        if (isset($fp['alt']) && !empty($fp['alt']) && false !== strpos(FCKeditorParser::$fkc_mw_makeImage_options, $fp['alt']) && $fp['alt'] != "Image:" . $orginal) {
+            $ret .= "alt=\"".htmlspecialchars($fp['alt'])."\" ";
+        }
+        else {
+            $ret .= "alt=\"\" ";
+        }
+
+        if ($class) {
+            $ret .= "class=\"$class\" ";
+        }
+
+        $ret .= "/>";
+
+        return $ret;
+    }
+
+    function makeKnownLinkObj( $nt, $text = '', $query = '', $trail = '', $prefix = '' , $aprops = '', $style = '' )
+    {
+        $fname = 'FCKeditorSkin::makeKnownLinkObj';
+        wfProfileIn( $fname );
+
+        if ( !is_object( $nt ) ) {
+            wfProfileOut( $fname );
+            return $text;
+        }
+
+        //$u = $nt->escapeLocalURL( $query );
+        $u = $nt->getFullText();
+
+        if ( $nt->getFragment() != '' ) {
+            if( $nt->getPrefixedDbkey() == '' ) {
+                $u = '';
+                if ( '' == $text ) {
+                    $text = htmlspecialchars( $nt->getFragment() );
+                }
+            }
+            //see ticket 1386 why it is commented
+            //$u .= $nt->getFragmentForURL();
+        }
+        if ( $text == '' ) {
+            $text = htmlspecialchars( $nt->getPrefixedText() );
+        }
+
+        if ($nt->getNamespace() == NS_CATEGORY) {
+            $u = ':' . $u;
+        }
+
+        list( $inside, $trail ) = Linker::splitTrail( $trail );
+        $r = "<a href=\"{$u}\">{$prefix}{$text}{$inside}</a>{$trail}";
+        wfProfileOut( $fname );
+        return $r;
+    }
+
+    function makeBrokenLinkObj( $nt, $text = '', $query = '', $trail = '', $prefix = '' )
+    {
+        # Fail gracefully
+        if ( ! isset($nt) ) {
+            # throw new MWException();
+            return "<!-- ERROR -->{$prefix}{$text}{$trail}";
+        }
+
+        $fname = 'FCKeditorSkin::makeBrokenLinkObj';
+        wfProfileIn( $fname );
+
+        $u = $nt->getFullText();
+
+        if ( '' == $text ) {
+            $text = htmlspecialchars( $nt->getPrefixedText() );
+        }
+        if ($nt->getNamespace() == NS_CATEGORY) {
+            $u = ':' . $u;
+        }
+
+        list( $inside, $trail ) = Linker::splitTrail( $trail );
+        $s = "<a href=\"{$u}\">{$prefix}{$text}{$inside}</a>{$trail}";
+
+        wfProfileOut( $fname );
+        return $s;
+    }
+
+    /**
+	 * Create a direct link to a given uploaded file.
+	 *
+	 * @param $title Title object.
+	 * @param $text  String: pre-sanitized HTML
+	 * @return string HTML
+	 *
+	 * @public
+	 * @todo Handle invalid or missing images better.
+	 */
+    function makeMediaLinkObj( $title, $text = '' ) {
+        if( is_null( $title ) ) {
+            ### HOTFIX. Instead of breaking, return empty string.
+            return $text;
+        } else {
+            $orginal = $title->getPartialURL();
+            // Mediawiki 1.11
+            if ( function_exists('wfFindFile') ) {
+                $img  = wfFindFile( $title );
+                if( $img ) {
+                    $url  = $img->getURL();
+                    $class = 'internal';
+                } else {
+                    $upload = SpecialPage::getTitleFor( 'Upload' );
+                    $url = $upload->getLocalUrl( 'wpDestFile=' . urlencode( $title->getDbKey() ) );
+                    $class = 'new';
+                }
+            }
+            // Mediawiki 1.10
+            else {
+                $img  = new Image( $title );
+                if( $img->exists() ) {
+                    $url  = $img->getURL();
+                    $class = 'internal';
+                } else {
+                    $upload = SpecialPage::getTitleFor( 'Upload' );
+                    $url = $upload->getLocalUrl( 'wpDestFile=' . urlencode( $img->getName() ) );
+                    $class = 'new';
+                }
+            }
+            $alt = htmlspecialchars( $title->getText() );
+            if( $text == '' ) {
+                $text = $alt;
+            }
+            $u = htmlspecialchars( $url );
+            return "<a href=\"{$orginal}\" class=\"$class\" _fck_mw_filename=\"{$orginal}\" _fck_mw_type=\"media\" title=\"{$alt}\">{$text}</a>";
+        }
+    }
+
+    function makeExternalLink( $url, $text, $escape = true, $linktype = '', $ns = null ) {
+        $url = htmlspecialchars( $url );
+        if( $escape ) {
+            $text = htmlspecialchars( $text );
+        }
+        if ($linktype == 'autonumber') {
+            return '<a href="'.$url.'">[n]</a>';
+        }
+        return '<a href="'.$url.'">'.$text.'</a>';
+    }
+
+    function __call( $m, $a)
+    {
+        return call_user_func_array( array( $this->skin, $m ), $a );
+    }
+
+    function __construct( &$skin )
+    {
+        $this->skin = $skin;
+    }
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/css/fckeditor.css
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/css/fckeditor.css	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/css/fckeditor.css	(revision 1280)
@@ -0,0 +1,1651 @@
+/*
+** MediaWiki 'monobook' style sheet for CSS2-capable browsers.
+** Copyright Gabriel Wicke - http://wikidev.net/
+** License: GPL (http://www.gnu.org/copyleft/gpl.html)
+**
+** Loosely based on http://www.positioniseverything.net/ordered-floats.html by Big John
+** and the Plone 2.0 styles, see http://plone.org/ (Alexander Limi,Joe Geldart & Tom Croucher,
+** Michael Zeltner and Geir Bækholt)
+** All you guys rock :)
+*/
+
+/**
+ * Stylesheet for screen/projection.  All rules not marked media-specific are
+ * shared with handheld.css and should be updated in tandem.  The rules can't
+ * be in the same file because old browsers like IE5 won't obey @media rules.
+ *
+ * Rules that are screen/projection-specific are marked with commented-out
+ * @media rules and indentation.
+ */
+
+/* @media screen, projection { */
+	#column-one {
+		padding-top: 160px;
+	}
+/* } */
+/* the left column width is specified in class .portlet */
+
+/* Font size:
+** We take advantage of keyword scaling- browsers won't go below 9px
+** More at http://www.w3.org/2003/07/30-font-size
+** http://style.cleverchimp.com/font_size_intervals/altintervals.html
+*/
+
+body {
+	color: black;
+	margin: 0;
+	padding: 0;
+	font: 83% sans-serif;
+	width: 100%;
+	background: white;
+	line-height: 1.5em;
+}
+
+/* scale back up to a sane default */
+.visualClear {
+	clear: both;
+}
+
+/* general styles */
+
+table {
+	font-size: 100%;
+	color: black;
+	/* we don't want the bottom borders of <h2>s to be visible through
+	   floated tables */
+	background-color: white;
+	margin: 0 0 0 5px;
+}
+a {
+	text-decoration: underline !important;
+	color: #002bb8 !important;
+	background: none;
+}
+a:visited {
+	color: #002bb8 !important;
+}
+a:active {
+	color: #002bb8 !important;
+}
+a:hover {
+	text-decoration: underline;
+}
+a.stub {
+	color: #772233;
+}
+a.new, #p-personal a.new {
+	color: #ba0000;
+}
+a.new:visited, #p-personal a.new:visited {
+	color: #a55858;
+}
+
+img {
+	border: none;
+	vertical-align: middle;
+}
+/* @media screen, projection { */
+	p {
+		margin: .4em 0 .5em 5px;
+		line-height: 1.5em;
+	}
+/* } */
+p img {
+	margin: 0;
+}
+
+hr {
+	height: 1px;
+	color: #aaa;
+	background-color: #aaa;
+	border: 0;
+	margin: .2em 0 .2em 0;
+}
+
+h1, h2, h3, h4, h5, h6 {
+	color: black;
+	background: none;
+	font-weight: normal;
+	margin: 0 0 0 5px;
+	padding-top: .5em;
+	padding-bottom: .17em;
+	border-bottom: 1px solid #aaa;
+}
+h1 { font-size: 188%; }
+h1 .editsection { font-size: 53%; }
+h2 { font-size: 150%; }
+h2 .editsection { font-size: 67%; }
+h3, h4, h5, h6 {
+	border-bottom: none;
+	font-weight: bold;
+}
+h3 { font-size: 132%; }
+h3 .editsection { font-size: 76%; font-weight: normal; }
+h4 { font-size: 116%; }
+h4 .editsection { font-size: 86%; font-weight: normal; }
+h5 { font-size: 100%; }
+h5 .editsection { font-weight: normal; }
+h6 { font-size: 80%;  }
+h6 .editsection { font-size: 125%; font-weight: normal; }
+
+.editsection {
+	float: right;
+	margin-left: 5px;
+}
+
+ul {
+	line-height: 1.5em;
+	list-style-type: square;
+	margin: .3em 0 0 1.5em;
+	padding: 0;
+	list-style-image: url(bullet.gif);
+}
+ol {
+	line-height: 1.5em;
+	margin: .3em 0 0 3.2em;
+	padding: 0;
+	list-style-image: none;
+}
+li {
+	margin-bottom: .1em;
+}
+dt {
+	font-weight: bold;
+	margin-bottom: .1em;
+}
+dl {
+	margin-top: .2em;
+	margin-bottom: .5em;
+}
+dd {
+	line-height: 1.5em;
+	margin-left: 2em;
+	margin-bottom: .1em;
+}
+
+fieldset {
+	border: 1px solid #2f6fab;
+	margin: 1em 0 1em 0;
+	padding: 0 1em 1em;
+	line-height: 1.5em;
+}
+legend {
+	padding: .5em;
+	font-size: 95%;
+}
+form {
+	border: none;
+	margin: 0;
+}
+
+textarea {
+	width: 100%;
+	padding: .1em;
+}
+
+input.historysubmit {
+	padding: 0 .3em .3em .3em !important;
+	font-size: 94%;
+	cursor: pointer;
+	height: 1.7em !important;
+	margin-left: 1.6em;
+}
+select {
+	vertical-align: top;
+}
+abbr, acronym, .explain {
+	border-bottom: 1px dotted black;
+	color: black;
+	background: none;
+	cursor: help;
+}
+q {
+	font-family: Times, "Times New Roman", serif;
+	font-style: italic;
+}
+/* disabled for now
+blockquote {
+	font-family: Times, "Times New Roman", serif;
+	font-style: italic;
+}*/
+code {
+	background-color: #f9f9f9;
+}
+pre {
+	padding: 1em;
+	border: 1px dashed #2f6fab;
+	color: black;
+	background-color: #f9f9f9;
+	line-height: 1.1em;
+}
+
+/*
+** the main content area
+*/
+
+/* @media screen, projection { */
+	#siteSub {
+		display: none;
+	}
+	#jump-to-nav {
+		display: none;
+	}
+/* } */
+
+#contentSub, #contentSub2 {
+	font-size: 84%;
+	line-height: 1.2em;
+	margin: 0 0 1.4em 1em;
+	color: #7d7d7d;
+	width: auto;
+}
+span.subpages {
+	display: block;
+}
+
+/* Some space under the headers in the content area */
+h1, h2 {
+	margin-bottom: .6em;
+}
+h3, h4, h5 {
+	margin-bottom: .3em;
+}
+.firstHeading {
+	margin-bottom: .1em;
+}
+
+/* user notification thing */
+.usermessage {
+	background-color: #ffce7b;
+	border: 1px solid #ffa500;
+	color: black;
+	font-weight: bold;
+	margin: 2em 0 1em;
+	padding: .5em 1em;
+	vertical-align: middle;
+}
+#siteNotice {
+	text-align: center;
+	font-size: 95%;
+	padding: 0 .9em;
+}
+#siteNotice p {
+	margin: 0;
+	padding: 0;
+}
+.error {
+	color: red;
+	font-size: larger;
+}
+.errorbox, .successbox {
+	font-size: larger;
+	border: 2px solid;
+	padding: .5em 1em;
+	float: left;
+	margin-bottom: 2em;
+	color: #000;
+}
+.errorbox {
+	border-color: red;
+	background-color: #fff2f2;
+}
+.successbox {
+	border-color: green;
+	background-color: #dfd;
+}
+.errorbox h2, .successbox h2 {
+	font-size: 1em;
+	font-weight: bold;
+	display: inline;
+	margin: 0 .5em 0 0;
+	border: none;
+}
+
+#catlinks {
+	border: 1px solid #aaa;
+	background-color: #f9f9f9;
+	padding: 5px;
+	margin-top: 1em;
+	clear: both;
+}
+/* currently unused, intended to be used by a metadata box
+in the bottom-right corner of the content area */
+.documentDescription {
+	/* The summary text describing the document */
+	font-weight: bold;
+	display: block;
+	margin: 1em 0;
+	line-height: 1.5em;
+}
+.documentByLine {
+	text-align: right;
+	font-size: 90%;
+	clear: both;
+	font-weight: normal;
+	color: #76797c;
+}
+
+/* emulate center */
+.center {
+	width: 100%;
+	text-align: center;
+}
+*.center * {
+	margin-left: auto;
+	margin-right: auto;
+}
+/* small for tables and similar */
+.small, .small * {
+	font-size: 94%;
+}
+table.small {
+	font-size: 100%;
+}
+
+/*
+** content styles
+*/
+
+#toc,
+.toc,
+.mw-warning {
+	border: 1px solid #aaa;
+	background-color: #f9f9f9;
+	padding: 5px;
+	font-size: 95%;
+}
+#toc h2,
+.toc h2 {
+	display: inline;
+	border: none;
+	padding: 0;
+	font-size: 100%;
+	font-weight: bold;
+}
+#toc #toctitle,
+.toc #toctitle,
+#toc .toctitle,
+.toc .toctitle {
+	text-align: center;
+}
+#toc ul,
+.toc ul {
+	list-style-type: none;
+	list-style-image: none;
+	margin-left: 0;
+	padding-left: 0;
+	text-align: left;
+}
+#toc ul ul,
+.toc ul ul {
+	margin: 0 0 0 2em;
+}
+#toc .toctoggle,
+.toc .toctoggle {
+	font-size: 94%;
+}
+
+.mw-warning {
+	margin-left: 50px;
+	margin-right: 50px;
+	text-align: center;
+}
+
+/* images */
+div.floatright, table.floatright {
+	clear: right;
+	float: right;
+	position: relative;
+	margin: 0 0 .5em .5em;
+	border: 0;
+/*
+	border: .5em solid white;
+	border-width: .5em 0 .8em 1.4em;
+*/
+}
+div.floatright p { font-style: italic; }
+div.floatleft, table.floatleft {
+	float: left;
+	clear: left;
+	position: relative;
+	margin: 0 .5em .5em 0;
+	border: 0;
+/*
+	margin: .3em .5em .5em 0;
+	border: .5em solid white;
+	border-width: .5em 1.4em .8em 0;
+*/
+}
+div.floatleft p { font-style: italic; }
+/* thumbnails */
+div.thumb {
+	margin-bottom: .5em;
+	border-style: solid;
+	border-color: white;
+	width: auto;
+}
+div.thumbinner {
+	border: 1px solid #ccc;
+	padding: 3px !important;
+	background-color: #f9f9f9;
+	font-size: 94%;
+	text-align: center;
+	overflow: hidden;
+}
+html .thumbimage {
+	border: 1px solid #ccc;
+}
+html .thumbcaption {
+	border: none;
+	text-align: left;
+	line-height: 1.4em;
+	padding: 3px !important;
+	font-size: 94%;
+}
+div.magnify {
+	float: right;
+	border: none !important;
+	background: none !important;
+}
+div.magnify a, div.magnify img {
+	display: block;
+	border: none !important;
+	background: none !important;
+}
+div.tright {
+	clear: right;
+	float: right;
+	border-width: .5em 0 .8em 1.4em;
+}
+div.tleft {
+	float: left;
+	clear: left;
+	margin-right: .5em;
+	border-width: .5em 1.4em .8em 0;
+}
+
+.hiddenStructure {
+	display: none;
+	speak: none;
+}
+img.tex {
+	vertical-align: middle;
+}
+span.texhtml {
+	font-family: serif;
+}
+
+/* Have a checkered background on images on the description pages and in galleries
+   to make transparency visible
+
+#file img, .gallerybox .thumb img {
+	background: url(Checker-16x16.png) repeat;
+}
+*/
+
+/*
+** classes for special content elements like town boxes
+** intended to be referenced directly from the wiki src
+*/
+
+/*
+** User styles
+*/
+/* table standards */
+table.rimage {
+	float: right;
+	position: relative;
+	margin-left: 1em;
+	margin-bottom: 1em;
+	text-align: center;
+}
+.toccolours {
+	border: 1px solid #aaa;
+	background-color: #f9f9f9;
+	padding: 5px;
+	font-size: 95%;
+}
+div.townBox {
+	position: relative;
+	float: right;
+	background: white;
+	margin-left: 1em;
+	border: 1px solid gray;
+	padding: .3em;
+	width: 200px;
+	overflow: hidden;
+	clear: right;
+}
+div.townBox dl {
+	padding: 0;
+	margin: 0 0 .3em;
+	font-size: 96%;
+}
+div.townBox dl dt {
+	background: none;
+	margin: .4em 0 0;
+}
+div.townBox dl dd {
+	margin: .1em 0 0 1.1em;
+	background-color: #f3f3f3;
+}
+
+/*
+** edit views etc
+*/
+.special li {
+	line-height: 1.4em;
+	margin: 0;
+	padding: 0;
+}
+
+/* Page history styling */
+/* the auto-generated edit comments */
+.autocomment {
+	color: gray;
+}
+#pagehistory span.user {
+	margin-left: 1.4em;
+	margin-right: .4em;
+}
+#pagehistory span.minor {
+	font-weight: bold;
+}
+#pagehistory li {
+	border: 1px solid white;
+}
+#pagehistory li.selected {
+	background-color: #f9f9f9;
+	border: 1px dashed #aaa;
+}
+
+/*
+** Diff rendering
+*/
+table.diff, td.diff-otitle, td.diff-ntitle {
+	background-color: white;
+}
+td.diff-addedline {
+	background: #cfc;
+	font-size: smaller;
+}
+td.diff-deletedline {
+	background: #ffa;
+	font-size: smaller;
+}
+td.diff-context {
+	background: #eee;
+	font-size: smaller;
+}
+.diffchange {
+	color: red;
+	font-weight: bold;
+	text-decoration: none;
+}
+
+/*
+** keep the whitespace in front of the ^=, hides rule from konqueror
+** this is css3, the validator doesn't like it when validating as css2
+*/
+ a.external,
+ a[href ^="gopher://"] {
+	background: url(external.png) center right no-repeat;
+	padding-right: 13px;
+}
+ a[href ^="https://"],
+.link-https {
+	background: url(lock_icon.gif) center right no-repeat;
+	padding-right: 16px;
+}
+ a[href ^="mailto:"],
+.link-mailto {
+	background: url(mail_icon.gif) center right no-repeat;
+	padding-right: 18px;
+}
+ a[href ^="news://"] {
+	background: url(news_icon.png) center right no-repeat;
+	padding-right: 18px;
+}
+ a[href ^="ftp://"],
+.link-ftp {
+	background: url(file_icon.gif) center right no-repeat;
+	padding-right: 18px;
+}
+ a[href ^="irc://"],
+.link-irc {
+	background: url(discussionitem_icon.gif) center right no-repeat;
+	padding-right: 18px;
+}
+a.external[href $=".ogg"], a.external[href $=".OGG"],
+a.external[href $=".mid"], a.external[href $=".MID"],
+a.external[href $=".midi"], a.external[href $=".MIDI"],
+a.external[href $=".mp3"], a.external[href $=".MP3"],
+a.external[href $=".wav"], a.external[href $=".WAV"],
+a.external[href $=".wma"], a.external[href $=".WMA"],
+.link-audio {
+	background: url("audio.png") center right no-repeat;
+	padding-right: 13px;
+}
+a.external[href $=".ogm"], a.external[href $=".OGM"],
+a.external[href $=".avi"], a.external[href $=".AVI"],
+a.external[href $=".mpeg"], a.external[href $=".MPEG"],
+a.external[href $=".mpg"], a.external[href $=".MPG"],
+.link-video {
+	background: url("video.png") center right no-repeat;
+	padding-right: 13px;
+}
+a.external[href $=".pdf"], a.external[href $=".PDF"],
+a.external[href *=".pdf#"], a.external[href *=".PDF#"],
+a.external[href *=".pdf?"], a.external[href *=".PDF?"],
+.link-document {
+	background: url("document.png") center right no-repeat;
+	padding-right: 12px;
+}
+
+/* disable interwiki styling */
+a.extiw,
+a.extiw:active {
+	color: #36b;
+	background: none;
+	padding: 0;
+}
+a.external {
+	color: #36b;
+}
+/* this can be used in the content area to switch off
+special external link styling */
+.plainlinks a {
+	background: none !important;
+	padding: 0 !important;
+}
+/*
+** Structural Elements
+*/
+
+/*
+** general portlet styles (elements in the quickbar)
+*/
+.portlet {
+	border: none;
+	margin: 0 0 .5em;
+	padding: 0;
+	float: none;
+	width: 11.6em;
+	overflow: hidden;
+}
+.portlet h4 {
+	font-size: 95%;
+	font-weight: normal;
+	white-space: nowrap;
+}
+.portlet h5 {
+	background: transparent;
+	padding: 0 1em 0 .5em;
+	display: inline;
+	height: 1em;
+	text-transform: lowercase;
+	font-size: 91%;
+	font-weight: normal;
+	white-space: nowrap;
+}
+.portlet h6 {
+	background: #ffae2e;
+	border: 1px solid #2f6fab;
+	border-style: solid solid none solid;
+	padding: 0 1em 0 1em;
+	text-transform: lowercase;
+	display: block;
+	font-size: 1em;
+	height: 1.2em;
+	font-weight: normal;
+	white-space: nowrap;
+}
+.pBody {
+	font-size: 95%;
+	background-color: white;
+	color: black;
+	border-collapse: collapse;
+	border: 1px solid #aaa;
+	padding: 0 .8em .3em .5em;
+}
+.portlet h1,
+.portlet h2,
+.portlet h3,
+.portlet h4 {
+	margin: 0;
+	padding: 0;
+}
+.portlet ul {
+	line-height: 1.5em;
+	list-style-type: square;
+	list-style-image: url(bullet.gif);
+	font-size: 95%;
+}
+.portlet li {
+	padding: 0;
+	margin: 0;
+}
+
+/*
+** Logo properties
+*/
+
+/* @media screen, projection { */
+	#p-logo {
+		top: 0;
+		left: 0;
+		position: absolute; /*needed to use z-index */
+		z-index: 3;
+		height: 155px;
+		width: 12em;
+		overflow: visible;
+	}
+	#p-logo h5 {
+		display: none;
+	}
+	#p-logo a,
+	#p-logo a:hover {
+		display: block;
+		height: 155px;
+		width: 12.2em;
+		background-repeat: no-repeat;
+		background-position: 35% 50% !important;
+		text-decoration: none;
+	}
+/* } */
+/*
+** the navigation portlet
+*/
+
+/* @media screen, projection { */
+	#p-navigation {
+		position: relative;
+		z-index: 3;
+	}
+	#p-navigation a {
+		display: block;
+	}
+	#p-navigation li.active a, #p-navigation li.active a:hover {
+		display: inline;
+	}
+/* } */
+
+#p-navigation .pBody {
+	padding-right: 0;
+}
+
+#p-navigation li.active a, #p-navigation li.active a:hover {
+	text-decoration: none;
+	font-weight: bold;
+}
+
+
+/*
+** Search portlet
+*/
+/* @media screen, projection { */
+	#p-search {
+		position: relative;
+		z-index: 3;
+	}
+/* } */
+input.searchButton {
+	margin-top: 1px;
+	font-size: 95%;
+}
+#searchGoButton {
+	padding-left: .5em;
+	padding-right: .5em;
+	font-weight: bold;
+}
+#searchInput {
+	width: 10.9em;
+	margin: 0;
+	font-size: 95%;
+}
+#p-search .pBody {
+	padding: .5em .4em .4em .4em;
+	text-align: center;
+}
+
+/*
+** the personal toolbar
+*/
+/* @media screen, projection { */
+	#p-personal {
+		position: absolute;
+		left: 0;
+		top: 0;
+		z-index: 0;
+	}
+	#p-personal {
+		width: 100%;
+		white-space: nowrap;
+		padding: 0;
+		margin: 0;
+		border: none;
+		background: none;
+		overflow: visible;
+		line-height: 1.2em;
+	}
+	#p-personal h5 {
+		display: none;
+	}
+	#p-personal .portlet,
+	#p-personal .pBody {
+		z-index: 0;
+		padding: 0;
+		margin: 0;
+		border: none;
+		overflow: visible;
+		background: none;
+	}
+/* this is the ul contained in the portlet */
+	#p-personal ul {
+		border: none;
+		line-height: 1.4em;
+		color: #2f6fab;
+		padding: 0 2em 0 3em;
+		margin: 0;
+		text-align: right;
+		list-style: none;
+		z-index: 0;
+		background: none;
+		cursor: default;
+	}
+	#p-personal li {
+		z-index: 0;
+		border: none;
+		padding: 0;
+		display: inline;
+		color: #2f6fab;
+		margin-left: 1em;
+		line-height: 1.2em;
+		background: none;
+	}
+	#p-personal li a {
+		text-decoration: none;
+		color: #005896;
+		padding-bottom: .2em;
+		background: none;
+	}
+	#p-personal li a:hover {
+		background-color: white;
+		padding-bottom: .2em;
+		text-decoration: none;
+	}
+	#p-personal li.active a:hover {
+		background-color: transparent;
+	}
+	/* the icon in front of the user name, single quotes
+	in bg url to hide it from iemac */
+	li#pt-userpage,
+	li#pt-anonuserpage,
+	li#pt-login {
+		background: url(user.gif) top left no-repeat;
+		padding-left: 20px;
+		text-transform: none;
+	}
+/* } */
+#p-personal ul {
+	text-transform: lowercase;
+}
+#p-personal li.active {
+	font-weight: bold;
+}
+/*
+** the page-related actions- page/talk, edit etc
+*/
+/* @media screen, projection { */
+	#p-cactions {
+		position: absolute;
+		top: 1.3em;
+		left: 11.5em;
+		margin: 0;
+		white-space: nowrap;
+		width: 76%;
+		line-height: 1.1em;
+		overflow: visible;
+		background: none;
+		border-collapse: collapse;
+		padding-left: 1em;
+		list-style: none;
+		font-size: 95%;
+	}
+	#p-cactions ul {
+		list-style: none;
+	}
+	#p-cactions li {
+		display: inline;
+		border: 1px solid #aaa;
+		border-bottom: none;
+		padding: 0 0 .1em 0;
+		margin: 0 .3em 0 0;
+		overflow: visible;
+		background: white;
+	}
+	#p-cactions li.selected {
+		border-color: #fabd23;
+		padding: 0 0 .2em 0;
+		font-weight: bold;
+	}
+	#p-cactions li a {
+		background-color: #fbfbfb;
+		color: #002bb8;
+		border: none;
+		padding: 0 .8em .3em;
+		position: relative;
+		z-index: 0;
+		margin: 0;
+		text-decoration: none;
+	}
+	#p-cactions li.selected a {
+		z-index: 3;
+		padding: 0 1em .2em!important;
+		background-color: white;
+	}
+	#p-cactions .new a {
+		color: #ba0000;
+	}
+	#p-cactions li a:hover {
+		z-index: 3;
+		text-decoration: none;
+		background-color: white;
+	}
+	#p-cactions h5 {
+		display: none;
+	}
+	#p-cactions li.istalk {
+		margin-right: 0;
+	}
+	#p-cactions li.istalk a {
+		padding-right: .5em;
+	}
+	#p-cactions #ca-addsection a {
+		padding-left: .4em;
+		padding-right: .4em;
+	}
+	/* offsets to distinguish the tab groups */
+	li#ca-talk {
+		margin-right: 1.6em;
+	}
+	li#ca-watch, li#ca-unwatch, li#ca-varlang-0, li#ca-print {
+		margin-left: 1.6em;
+	}
+	#p-cactions .pBody {
+		font-size: 1em;
+		background-color: transparent;
+		color: inherit;
+		border-collapse: inherit;
+		border: 0;
+		padding: 0;
+	}
+/* } */
+#p-cactions .hiddenStructure {
+	display: none;
+}
+#p-cactions li a {
+	text-transform: lowercase;
+}
+
+/*
+** the remaining portlets
+*/
+/* @media screen, projection { */
+	#p-tbx,
+	#p-lang {
+		position: relative;
+		z-index: 3;
+	}
+/* } */
+
+/* TODO: #t-iscite is only used by the Cite extension, come up with some
+ * system which allows extensions to add to this file on the fly
+ */
+#t-ispermalink, #t-iscite {
+	color: #999;
+}
+/*
+** footer
+*/
+#footer {
+	background-color: white;
+	border-top: 1px solid #fabd23;
+	border-bottom: 1px solid #fabd23;
+	margin: .6em 0 1em 0;
+	padding: .4em 0 1.2em 0;
+	text-align: center;
+	font-size: 90%;
+}
+#footer li {
+	display: inline;
+	margin: 0 1.3em;
+}
+#f-poweredbyico, #f-copyrightico {
+	margin: 0 8px;
+	position: relative;
+	top: -2px; /* Bump it up just a tad */
+}
+#f-poweredbyico {
+	float: right;
+	height: 1%;
+}
+#f-copyrightico {
+	float: left;
+	height: 1%;
+}
+
+/* js pref toc */
+#preftoc {
+	margin: 0;
+	padding: 0;
+	width: 100%;
+	clear: both;
+}
+#preftoc li {
+	background-color: #f0f0f0;
+	color: #000;
+}
+/* @media screen, projection { */
+	#preftoc li {
+		margin: 1px -2px 1px 2px;
+		float: left;
+		padding: 2px 0 3px 0;
+		border: 1px solid #fff;
+		border-right-color: #716f64;
+		border-bottom: 0;
+		position: relative;
+		white-space: nowrap;
+		list-style-type: none;
+		list-style-image: none;
+		z-index: 3;
+	}
+/* } */
+#preftoc li.selected {
+	font-weight: bold;
+	background-color: #f9f9f9;
+	border: 1px solid #aaa;
+	border-bottom: none;
+	cursor: default;
+	top: 1px;
+	padding-top: 2px;
+	margin-right: -3px;
+}
+#preftoc > li.selected {
+	top: 2px;
+}
+#preftoc a,
+#preftoc a:active {
+	display: block;
+	color: #000;
+	padding: 0 .7em;
+	position: relative;
+	text-decoration: none;
+}
+#preftoc li.selected a {
+	cursor: default;
+	text-decoration: none;
+}
+#prefcontrol {
+	padding-top: 2em;
+	clear: both;
+}
+#preferences {
+	margin: 0;
+	border: 1px solid #aaa;
+	clear: both;
+	padding: 1.5em;
+	background-color: #F9F9F9;
+}
+.prefsection {
+	border: none;
+	padding: 0;
+	margin: 0;
+}
+.prefsection fieldset {
+	border: 1px solid #aaa;
+	float: left;
+	margin-right: 2em;
+}
+.prefsection legend {
+	font-weight: bold;   
+}
+.prefsection table, .prefsection legend {
+	background-color: #F9F9F9;
+}
+/* @media screen, projection { */
+	.mainLegend {
+		display: none;
+	}
+/* } */
+div.prefsectiontip {
+	font-size: 95%;
+	margin-top: 0;
+	background-color: #FFC1C1;
+	padding: .2em .7em;
+	clear: both;
+}
+.btnSavePrefs {
+	font-weight: bold;
+	padding-left: .3em;
+	padding-right: .3em;
+}
+
+.preferences-login {
+	clear: both;
+	margin-bottom: 1.5em;
+}
+
+.prefcache {
+	font-size: 90%;
+	margin-top: 2em;
+}
+
+div#userloginForm form,
+div#userlogin form#userlogin2 {
+	margin: 0 3em 1em 0;
+	border: 1px solid #aaa;
+	clear: both;
+	padding: 1.5em 2em;
+	background-color: #f9f9f9;
+	float: left;
+}
+
+div#userloginForm table,
+div#userlogin form#userlogin2 table {
+	background-color: #f9f9f9;
+}
+
+div#userloginForm h2,
+div#userlogin form#userlogin2 h2 {
+	padding-top: 0;
+}
+
+div#userlogin .captcha {
+	border: 1px solid #bbb;
+	padding: 1.5em 2em;
+	width: 400px;
+	background-color: white;
+}
+
+
+#userloginprompt, #languagelinks {
+	font-size: 85%;
+}
+
+#login-sectiontip {
+	font-size: 85%;
+	line-height: 1.2;
+	padding-top: 2em;
+}
+
+#userlogin .loginText, #userlogin .loginPassword {
+	width: 12em;
+}
+
+#userloginlink a, #wpLoginattempt, #wpCreateaccount {
+	font-weight: bold;
+}
+
+/* @media screen, projection { */
+	/*
+	** IE/Mac fixes, hope to find a validating way to move this
+	** to a separate stylesheet. This would work but doesn't validate:
+	** @import("IEMacFixes.css");
+	*/
+	/* tabs: border on the a, not the div */
+	* > html #p-cactions li { border: none; }
+	* > html #p-cactions li a {
+		border: 1px solid #aaa;
+		border-bottom: none;
+	}
+	* > html #p-cactions li.selected a { border-color: #fabd23; }
+	/* footer icons need a fixed width */
+	* > html #f-poweredbyico,
+	* > html #f-copyrightico { width: 88px; }
+	* > html ,
+	* > html pre {
+		overflow-x: auto;
+		width: 100%;
+		padding-bottom: 25px;
+	}
+/* } */
+
+/* more IE fixes */
+/* float/negative margin brokenness */
+* html #footer {margin-top: 0;}
+* html div.editsection { font-size: smaller; }
+#pagehistory li.selected { position: relative; }
+
+/* Mac IE 5.0 fix; floated content turns invisible */
+* > html #column-one {
+	position: absolute;
+	left: 0;
+	top: 0;
+}
+* > html #footer {
+	margin-left: 13.2em;
+}
+.redirectText {
+	font-size: 150%;
+	margin: 5px;
+}
+
+.printfooter {
+	display: none;
+}
+
+.not-patrolled {
+	background-color: #ffa;
+}
+div.patrollink {
+	font-size: 75%;
+	text-align: right;
+}
+span.newpage, span.minor, span.searchmatch, span.bot {
+	font-weight: bold;
+}
+span.unpatrolled {
+	font-weight: bold;
+	color: red;
+}
+
+span.searchmatch {
+	color: red;
+}
+.sharedUploadNotice {
+	font-style: italic;
+}
+
+span.updatedmarker {
+	color: black;
+	background-color: #0f0;
+}
+
+table.gallery {
+	border: 1px solid #ccc;
+	margin: 2px;
+	padding: 2px;
+	background-color: white;
+}
+
+table.gallery tr {
+	vertical-align: top;
+}
+
+table.gallery td {
+	vertical-align: top;
+	background-color: #f9f9f9;
+	border: solid 2px white;
+}
+/* Keep this temporarily so that cached pages will display right */
+table.gallery td.galleryheader {
+    text-align: center;
+	font-weight: bold;
+}
+table.gallery caption {
+	font-weight: bold;
+}
+
+div.gallerybox {
+	margin: 2px;
+}
+
+div.gallerybox div.thumb {
+	text-align: center;
+	border: 1px solid #ccc;
+	margin: 2px;
+}
+
+div.gallerytext {
+	font-size: 94%;
+	padding: 2px 4px;
+}
+
+span.comment {
+	font-style: italic;
+}
+
+span.changedby {
+	font-size: 95%;
+}
+
+.previewnote {
+	text-indent: 3em;
+	color: #c00;
+	border-bottom: 1px solid #aaa;
+	padding-bottom: 1em;
+	margin-bottom: 1em;
+}
+
+.previewnote p {
+	margin: 0;
+	padding: 0;
+}
+
+.editExternally {
+	border: 1px solid gray;
+	background-color: #ffffff;
+	padding: 3px;
+	margin-top: 0.5em;
+	float: left;
+	font-size: small;
+	text-align: center;
+}
+.editExternallyHelp {
+	font-style: italic;
+	color: gray;
+}
+
+li span.deleted, span.history-deleted {
+	text-decoration: line-through;
+	color: #888;
+	font-style: italic;
+}
+
+.toggle {
+	margin-left: 2em;
+	text-indent: -2em;
+}
+
+/* Classes for EXIF data display */
+table.mw_metadata {
+	font-size: 0.8em;
+	margin-left: 0.5em;
+	margin-bottom: 0.5em;
+	width: 300px;
+}
+
+table.mw_metadata caption {
+	font-weight: bold;
+}
+
+table.mw_metadata th {
+	font-weight: normal;
+}
+
+table.mw_metadata td {
+	padding: 0.1em;
+}
+
+table.mw_metadata {
+	border: none;
+	border-collapse: collapse;
+}
+
+table.mw_metadata td, table.mw_metadata th {
+	text-align: center;
+	border: 1px solid #aaaaaa;
+	padding-left: 0.1em;
+	padding-right: 0.1em;
+}
+
+table.mw_metadata th {
+	background-color: #f9f9f9;
+}
+
+table.mw_metadata td {
+	background-color: #fcfcfc;
+}
+
+table.collapsed tr.collapsable {
+	display: none;
+}
+
+
+/* filetoc */
+ul#filetoc {
+	text-align: center;
+	border: 1px solid #aaaaaa;
+	background-color: #f9f9f9;
+	padding: 5px;
+	font-size: 95%;
+	margin-bottom: 0.5em;
+	margin-left: 0;
+	margin-right: 0;
+}
+
+#filetoc li {
+	display: inline;
+	list-style-type: none;
+	padding-right: 2em;
+}
+
+input#wpSummary {
+	width: 80%;
+}
+
+/* @bug 1714 */
+input#wpSave, input#wpDiff {
+	margin-right: 0.33em;
+}
+
+#editform .editOptions {
+	display: inline;
+}
+
+#wpSave {
+	font-weight: bold;
+}
+
+/* Classes for article validation */
+
+table.revisionform_default {
+	border: 1px solid #000000;
+}
+
+table.revisionform_focus {
+	border: 1px solid #000000;
+	background-color:#00BBFF;
+}
+
+tr.revision_tr_default {
+	background-color:#EEEEEE;
+}
+
+tr.revision_tr_first {
+	background-color:#DDDDDD;
+}
+
+p.revision_saved {
+	color: green;
+	font-weight:bold;
+}
+
+#mw_trackbacks {
+	border: solid 1px #bbbbff;
+	background-color: #eeeeff;
+	padding: 0.2em;
+}
+
+
+/* Allmessages table */
+
+#allmessagestable th {
+	background-color: #b2b2ff;
+}
+
+#allmessagestable tr.orig {
+	background-color: #ffe2e2;
+}
+
+#allmessagestable tr.new {
+	background-color: #e2ffe2;
+}
+
+#allmessagestable tr.def {
+	background-color: #f0f0ff;
+}
+
+
+/* noarticletext */
+div.noarticletext {
+	border: 1px solid #ccc;
+	background: #fff;
+	padding: .2em 1em;
+	color: #000;
+}
+
+div#searchTargetContainer {
+	left:       10px;
+	top:        10px;
+	width:      90%;
+	background: white;
+}
+
+div#searchTarget {
+	padding:    3px;
+	margin:     5px;
+	background: #F0F0F0;
+	border:     solid 1px blue;
+}
+
+div#searchTarget ul li {
+	list-style: none;
+}
+
+div#searchTarget ul li:before {
+	color: orange;
+	content: "\00BB \0020";
+}
+
+div.multipageimagenavbox {
+   border: solid 1px silver;
+   padding: 4px;
+   margin: 1em;
+   -moz-border-radius: 6px;
+   background: #f0f0f0;
+}
+
+div.multipageimagenavbox div.thumb {
+   border: none;
+   margin-left: 2em;
+   margin-right: 2em;
+}
+
+div.multipageimagenavbox hr {
+   margin: 6px;
+}
+
+table.multipageimage td {
+   text-align: center;
+}
+
+/** Special:Version */
+
+table#sv-ext, table#sv-hooks {
+	margin: 1em;
+	padding:0em;
+}
+
+#sv-ext td, #sv-hooks td,
+#sv-ext th, #sv-hooks th {
+	border: 1px solid #A0A0A0;
+	padding: 0 0.15em 0 0.15em;
+}
+#sv-ext th, #sv-hooks th {
+	background-color: #F0F0F0;
+	color: black;
+	padding: 0 0.15em 0 0.15em;
+}
+tr.sv-space{
+	height: 0.8em;
+	border:none;
+}
+tr.sv-space td { display: none; }
+
+/*
+  Table pager (e.g. Special:Imagelist)
+  - remove underlines from the navigation link
+  - collapse borders
+  - set the borders to outsets (similar to Special:Allmessages)
+  - remove line wrapping for all td and th, set background color
+  - restore line wrapping for the last two table cells (description and size)
+*/
+.TablePager_nav a { text-decoration: none; }
+.TablePager { border-collapse: collapse; }
+.TablePager, .TablePager td, .TablePager th { 
+	border: 1px solid #aaaaaa;
+	padding: 0 0.15em 0 0.15em;
+}
+.TablePager th { background-color: #eeeeff }
+.TablePager td { background-color: #ffffff }
+.TablePager tr:hover td { background-color: #eeeeff }
+
+.imagelist td, .imagelist th { white-space: nowrap }
+.imagelist .TablePager_col_links { background-color: #eeeeff }
+.imagelist .TablePager_col_img_description { white-space: normal }
+.imagelist th.TablePager_sort { background-color: #ccccff }
+
+.templatesUsed { margin-top: 1.5em; }
+
+.mw-summary-preview {
+	margin: 0.1em 0;
+}
+
+/* Convenience links on Special:Ipblocklist */
+p.mw-ipb-conveniencelinks {
+	font-size: 90%;
+	float: right;
+}
+
+/**
+ * Here is some stuff that's ACTUALLY COMMON TO ALL SKINS.
+ * When the day comes, it can be moved to a *real* common.css.
+ */
+.mw-plusminus-null { color: #aaa; }
+.texvc { direction: ltr; unicode-bidi: embed; }
+/* Stop floats from intruding into edit area in previews */
+#toolbar, #wpTextbox1 { clear: both; }
+
+.MediaTransformError {
+	background-color: #ccc;
+	padding: 0.1em;
+}
+.MediaTransformError td {
+	text-align: center;
+	vertical-align: middle;
+	font-size: 90%;
+}
+
+
+/**
+ * FCKeditor specific styles
+ */
+
+img.fck_mw_frame
+{
+	background-color: #F9F9F9;
+	border: 1px solid #CCCCCC;
+	padding: 3px !important;
+}
+
+img.fck_mw_right
+{
+	margin: 0.5em 5px 0.8em 1.4em ;
+	clear: right;
+	float: right;
+}
+
+img.fck_mw_left
+{
+	margin: 0.5em 1.4em 0.8em 0em;
+	clear: left;
+	float: left;
+}
+
+img.fck_mw_center
+{
+	margin-left: auto;
+	margin-right: auto;
+	margin-bottom: 0.5em;
+	display: block;
+}
+
+img.fck_mw_notfound 
+{
+	font-size: 1px;
+	height: 25px;
+	width: 25px;
+	overflow: hidden ;
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/_documentation.html
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/_documentation.html	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/_documentation.html	(revision 1280)
@@ -0,0 +1,38 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+	<title>FCKeditor - Documentation</title>
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+	<style type="text/css">
+		body { font-family: arial, verdana, sans-serif }
+		p { margin-left: 20px }
+	</style>
+</head>
+<body>
+	<h1>
+		FCKeditor Documentation</h1>
+	<p>
+		You can find the official documentation for FCKeditor online, at <a href="http://wiki.fckeditor.net/">
+			http://wiki.fckeditor.net/</a>.</p>
+</body>
+</html>
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/_upgrade.html
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/_upgrade.html	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/_upgrade.html	(revision 1280)
@@ -0,0 +1,38 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+	<title>FCKeditor - Upgrade</title>
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+	<style type="text/css">
+		body { font-family: arial, verdana, sans-serif }
+		p { margin-left: 20px }
+	</style>
+</head>
+<body>
+	<h1>
+		FCKeditor Upgrade</h1>
+	<p>
+		Please check the following URL for notes regarding upgrade: <a href="http://wiki.fckeditor.net/Developer%27s_Guide/Upgrade">
+			http://wiki.fckeditor.net/Developer%27s_Guide/Upgrade</a></p>
+</body>
+</html>
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/_whatsnew.html
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/_whatsnew.html	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/_whatsnew.html	(revision 1280)
@@ -0,0 +1,478 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+	<title>FCKeditor - What's New?</title>
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+	<style type="text/css">
+		body { font-family: arial, verdana, sans-serif }
+		p { margin-left: 20px }
+	</style>
+</head>
+<body>
+	<h3>
+		Version 2.6 (SVN)</h3>
+	<p>
+		New Features and Improvements:</p>
+	<ul>
+		<li></li>
+	</ul>
+	<p>
+		Fixed Bugs:</p>
+	<ul>
+		<li></li>
+	</ul>
+	<h3>
+		Version 2.5 (SVN)</h3>
+	<p>
+		New Features and Improvements:</p>
+	<ul>
+		<li></li>
+	</ul>
+	<p>
+		Fixed Bugs:</p>
+	<ul>
+		<li></li>
+	</ul>
+	<h3>
+		Version 2.5 Beta</h3>
+	<p>
+		New Features and Improvements:</p>
+	<ul>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/624">#624</a>] [<a
+			target="_blank" href="http://dev.fckeditor.net/ticket/634">#634</a>] [<a target="_blank"
+				href="http://dev.fckeditor.net/ticket/1300">#1300</a>] [<a target="_blank" href="http://dev.fckeditor.net/ticket/1301">#1301</a>]
+			Official compatibility support with <strong>Opera 9.50</strong> and <strong>Safari 3</strong>
+			(WebKit based browsers actually). These browsers are still in Beta, but we are confident
+			that we'll have amazing results as soon as they get stable. We are continuously
+			collaborating with Opera Software and Apple to bring a wonderful FCKeditor experience
+			over their browser platforms.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/494">#494</a>] Introduced
+			the <strong>new Style System</strong>. We are not anymore relaying on browser features
+			to apply and remove styles, which guarantees that the editor will <strong>behave in
+				the same way in all browsers</strong>. It is an incredibly flexible system,
+			which aims to fit all developer's needs, from Flash content or HTML4 to XHTML 1.0
+			Strict or XHTML 1.1:
+			<ul>
+				<li>All basic formatting features, like Bold and Italic, can be precisely controlled
+					by using the configuration file (<b>CoreStyles</b> setting). It means that now,
+					the Bold button, for example, can produce &lt;b&gt;, &lt;strong&gt;, &lt;span class...&gt;,
+					&lt;span style...&gt; or anything the developer prefers.</li>
+				<li>Again with the <b>CoreStyles</b> setting, each block format, font, size, and even
+					the color pickers can precisely reflect end developer's needs.</li>
+				<li>Because of the above changes, font sizes are much more flexible. <b>Any kind of
+					font unit</b> can be used, including a mix of units.</li>
+				<li>All styles, including toolbar bottom styles, are precisely controlled when being
+					applied to the document. FCKeditor uses an element table derived from the <b>W3C XHTML
+						DTDs</b> to precisely create the elements, guarantee standards compliant code.</li>
+				<li><b>No more &lt;font&gt; tags</b>... well... actually, the system is so flexible
+					that it is up to you to use them or not.</li>
+				<li>It is possible to configure FCKeditor to produce a truly <b>semantic aware </b>and<b>
+					XHTML 1.1 compliant </b>code. Check out sample14.html.</li>
+				<li>It's also possible to precisely control which inline elements must be removed with
+					the &quot;Remove All&quot; button, by using the &quot;<b>RemoveFormatTags</b>&quot;
+					setting.</li>
+				<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/1231">#1231</a>] [<a
+					target="_blank" href="http://dev.fckeditor.net/ticket/160">#160</a>] Paragraph <b>indentation</b>
+					and <b>justification</b> now uses style attributes and don't create unnecessary
+					elements, and &lt;blockquote&gt; is not anymore used for it. Now, even CSS classes
+					can be used to indent or align text.</li>
+				<li>All paragraph formatting features work well when EnterMode=br.</li>
+				<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/172">#172</a>] All paragraph
+					formatting features work well when list items too.</li>
+			</ul>
+		</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/1197">#1197</a>] [<a
+			target="_blank" href="http://dev.fckeditor.net/ticket/132">#132</a>] The toolbar
+			now presents a <strong>new button for Blockquote</strong>. The indentation button
+			will not anymore be used for that.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/125">#125</a>] Table's
+			<strong>columns size can now be changed by dragging on cell borders</strong>, with
+			the "dragresizetable" plugin. </li>
+		<li>The EditorAreaCSS config option can now also be set to a string of paths separated
+			by commas.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/212">#212</a>] New "<strong>Show
+			Blocks</strong>" command button in toolbar to show block details in the editing
+			area. </li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/915">#915</a>] The <strong>
+			undo/redo system has been revamped</strong> to work the same across Internet Explorer
+			and Gecko-based browsers (e.g. Firefox). A number of critical bugs in the undo/redo
+			system are also fixed. </li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/194">#194</a>] The editor
+			now uses the <strong>Data Processor</strong> technology, which makes it possible
+			to handle different input formats. A sample of it may be found at "editor/plugins/bbcode/_sample",
+			that shows some simple BBCode support. </li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/145">#145</a>] The "htaccess.txt"
+			file has been renamed to ".htaccess" as it doesn't bring security concerns, being
+			active out of the box.</li>
+		<li>File Browser and Quick Upload changes:
+			<ul>
+				<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/163">#163</a>] <span
+					style="color: #ff0000"><strong>Attention:</strong></span> The default connector
+					in fckconfig.js has been changed from ASP to PHP. If you are using ASP remember
+					to change the _FileBrowserLanguage and _QuickUploadLanguage settings in your fckconfig.js.
+					[<a target="_blank" href="http://dev.fckeditor.net/ticket/454">#454</a>] The file
+					browser and upload connectors have been unified so they can reuse the same configuration
+					settings.</li>
+				<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/865">#865</a>] The ASP
+					and PHP connectors have been improved so it's easy to select the location of the
+					destination folder for each file type, and it's no longer necessary to use the "file",
+					"image", "flash" subfolders<br />
+					<span style="color: #ff0000"><strong>Attention:</strong></span> The location of
+					all the connectors have been changed in the fckconfig.js file. Please check your
+					settings to match the current ones. Also review carefully the config file for your
+					server language. </li>
+				<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/688">#688</a>] Now the
+					Perl quick upload is available. </li>
+				<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/575">#575</a>] The Python
+					connector has been rewritten as a WSGI app to be fully compatible with the latest
+					python frameworks and servers. The QuickUpload feature has been added as well as
+					all the features available in the PHP connector. Thanks to Mariano Reingart.</li>
+				<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/561">#561</a>] The ASP
+					connector provides an AbsolutePath setting so it's possible to set the url to a
+					full domain or a relative path and specify that way the physical folder where the
+					files are stored..</li>
+				<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/333">#333</a>] The Quick
+					Upload now can use the same ServerPath parameter as the full connector.</li>
+				<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/199">#199</a>] The AllowedCommands
+					configuration setting is available in the asp and php connectors so it's possible
+					to disallow the upload of files (although the "select file" button will still be
+					available in the file browser).</li>
+			</ul>
+		</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/100">#100</a>] A new configuration
+			directive "FCKConfig.EditorAreaStyles" has been implemented to allow setting editing
+			area styles from JavaScript. </li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/102">#102</a>] HTML code
+			generated by the "Paste As Plain Text" feature now obeys the EnterMode setting.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/1266">#1266</a>] Introducing
+			the HtmlEncodeOutput setting to instruct the editor to HTML-encode some characters
+			(&amp;, &lt; and &gt;) in the posted data.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/357">#357</a>] Added a
+			"Remove Anchor" option in the context menu for anchors. </li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/1060">#1060</a>] Compatibility
+			checks with Firefox 3.0 Alpha. </li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/817">#817</a>] [<a
+			target="_blank" href="http://dev.fckeditor.net/ticket/1077">#1077</a>] New "Merge
+			Down/Right" commands for merging tables cells in non-Gecko browsers.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/1288">#1288</a>] The "More
+			Colors..." button in color selector popup has been made optional and configurable
+			by the <strong>EnableMoreFontColors</strong> option. </li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/356">#356</a>] The <strong>
+			Find and Replace</strong> dialogs are now unified into a single dialog with tabs.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/549">#549</a>] Added a
+			'None' option to the FCKConfig.ToolbarLocation option to allow for hidden toolbars.
+		</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/1313">#1313</a>] An XHTML
+			1.1 target editor sample has been created as sample14.html. </li>
+		<li>The ASP, ColdFusion and PHP integration have been aligned to our standards.</li>
+	</ul>
+	<p>
+		Fixed Bugs:</p>
+	<ul>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/71">#71</a>] [<a target="_blank"
+			href="http://dev.fckeditor.net/ticket/243">#243</a>] [<a target="_blank" href="http://dev.fckeditor.net/ticket/267">#267</a>]
+			The editor now takes care to not create invalid nested block elements, like creating
+			&lt;form&gt; or &lt;hr&gt; inside &lt;p&gt;. &nbsp;</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&aid=1511298&group_id=75348&atid=543655">SF
+			Patch 1511298</a>] The CF Component failed on CFMX 6.0</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/639">#639</a>] If the
+			FCKConfig.DefaultLinkTarget setting was missing in fckconfig.js the links has target="undefined".</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/497">#497</a>] Fixed EMBED
+			attributes handling in IE.</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&aid=1315722&group_id=75348&atid=543655">SF
+			Patch 1315722</a>] Avoid getting a cached version of the folder contents after uploading
+			a file</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&aid=1386086&group_id=75348&atid=543655">SF
+			Patch 1386086</a>] The php connector has been protected so mkdir doesn't fail if
+			there are double slashes.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/943">#943</a>] The PHP
+			connector now specifies that the included files are relative to the current path.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/560">#560</a>] The PHP
+			connector will work better if the connector or the userfiles folder is a symlink.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/784">#784</a>] Fixed a
+			non initialized $php_errormsg in the PHP connector.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/802">#802</a>] The replace
+			dialog will now advance its searching position correctly and is able to search for
+			strings spanning across multiple inline tags.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/944">#944</a>] The _samples
+			didn't work directly from the Mac filesystem.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/946">#946</a>] Toolbar
+			images didn't show in non-IE browsers if the path contained a space.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/291">#291</a>] [<a
+			target="_blank" href="http://dev.fckeditor.net/ticket/395">#395</a>] [<a target="_blank"
+				href="http://dev.fckeditor.net/ticket/932">#932</a>] Clicking outside the editor
+			it was possible to paste or apply formatting to the rest of the page in IE.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/137">#137</a>] Fixed FCKConfig.TabSpaces
+			being ignored, and weird behaviors when pressing tab in edit source mode.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/268">#268</a>] Fixed special
+			XHTML characters present in event attribute values being converted inappropriately
+			when switching to source view.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/272">#272</a>] The toolbar
+			was cut sometimes in IE to just one row if there are multiple instances of the editor.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/515">#515</a>] Tables
+			in Firefox didn't inherit font styles properly in Standards mode.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/321">#321</a>] If FCKeditor
+			is initially hidden in Firefox it will no longer be necessary to call the oEditor.MakeEditable()
+			function.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/299">#299</a>] The 'Browse
+			Server' button in the Image and Flash dialogs was a little too high.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/931">#931</a>] The BodyId
+			and BodyClass configuration settings weren't applied in the preview window.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/583">#583</a>] The "noWrap"
+			attribute for table cells was getting an empty value in Firefox. Thanks to geirhelge.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/141">#141</a>] Fixed incorrect
+			startup focus in Internet Explorer after page reloads. </li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/143">#143</a>] Fixed browser
+			lockup when the user writes &lt;!--{PS..x}&gt; into the editor in source mode. </li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/174">#174</a>] Fixed incorrect
+			positioning of FCKeditor in full screen mode. </li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/978">#978</a>] Fixed a
+			SpellerPages error with ColdFusion when no suggestions where available for a word.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/977">#977</a>] The "shape"
+			attribute of &lt;area&gt; had its value changed to uppercase in IE.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/996">#996</a>] "OnPaste"
+			event listeners will now get executed only once.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/289">#289</a>] Removed
+			debugging popups from page load regarding JavaScript and CSS loading errors.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/328">#328</a>] [<a
+			target="_blank" href="http://dev.fckeditor.net/ticket/346">#346</a>] [<a target="_blank"
+				href="http://dev.fckeditor.net/ticket/404">#404</a>] Fixed a number of problems
+			regarding &lt;pre&gt; blocks:
+			<ol>
+				<li>Leading whitespaces and line breaks in &lt;pre&gt; blocks are trimmed when the user
+					switches between editor mode and source mode;</li>
+				<li>Pressing Enter inside a &lt;pre&gt; block would split the block into two, but the
+					expected behavior is simply inserting a line break;</li>
+				<li>Simple line breaks inside &lt;pre&gt; blocks entered in source mode are being turned
+					into &lt;br&gt; tags when the user switches to editor mode and back.</li>
+			</ol>
+		</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/581">#581</a>] Fixed the
+			issue where the "Maximize the editor size" toolbar button stops working if any of
+			the following occurs:
+			<ol>
+				<li>There exists a form input whose name or id is "style" in FCKeditor's host form;</li>
+				<li>There exists a form input whose name or id is "className" in FCKeditor's host form;</li>
+				<li>There exists a form and a form input whose name of id is "style" in the editing
+					frame.</li>
+			</ol>
+		</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/183">#183</a>] Fixed the
+			issue when FCKeditor is being executed in a custom application with the WebBrowser
+			ActiveX control, hiding the WebBrowser control would incorrectly invoke FCKeditor's
+			cleanup routines, causing FCKeditor to stop working.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/539">#539</a>] Fixed the
+			issue where right clicking on a table inside the editing frame in Firefox would
+			cause the editor the scroll to the top of the document.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/523">#523</a>] Fixed the
+			issue where, under certain circumstances, FCKeditor would obtain focus at startup
+			even though FCKConfig.StartupFocus is set to false. </li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/393">#393</a>] Fixed the
+			issue where if an inline tag is at the end of the document, the user would have
+			no way of escaping from the inline tag if he continues typing at the end of the
+			document. FCKeditor's behaviors regarding inline tags has been made to be more like
+			MS Word's:
+			<ol>
+				<li>If the caret is moved to the end of a hyperlink by the keyboard, then hyperlink
+					mode is disabled. </li>
+				<li>If the caret is moved to the end of other styled inline tags by any key other than
+					the End key (like bold text or italic text), the original bold/italic/... modes
+					would continue to be effective. </li>
+				<li>If the caret is moved to the end of other styled inline tags by the End key, all
+					style tag modes (e.g. bold, italic, underline, etc.) would be canceled. This is
+					not consistent with MS Word, but provides a convenient way for the user to escape
+					the inline tag at the end of a line.</li>
+			</ol>
+		</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/338">#338</a>] Fixed the
+			issue where the configuration directive FCKConfig.ForcePasteAsPlainText is ignored
+			when new contents are pasted into the editor via drag-and drop from outside of the
+			editor. </li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/1026">#1026</a>] Fixed
+			the issue where the cursor or selection positions are not restored with undo/redo
+			commands correctly in IE, under some circumstances. </li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/1160">#1160</a>] [<a
+			target="_blank" href="http://dev.fckeditor.net/ticket/1184">#1184</a>] Home, End
+			and Tab keys are working properly for numeric fields in dialogs. </li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/68">#68</a>] The style
+			system now properly handles Format styles when EnterMode=br.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/525">#525</a>] The union
+			if successive DIVs will work properly now if EnterMode!=div.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/1227">#1227</a>] The color
+			commands used an unnecessary temporary variable. Thanks to Matthias Miller</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/67">#67</a>] [<a target="_blank"
+			href="http://dev.fckeditor.net/ticket/277">#277</a>] [<a target="_blank" href="http://dev.fckeditor.net/ticket/427">#427</a>]
+			[<a target="_blank" href="http://dev.fckeditor.net/ticket/428">#428</a>] [<a target="_blank"
+				href="http://dev.fckeditor.net/ticket/965">#965</a>] [<a target="_blank" href="http://dev.fckeditor.net/ticket/1178">#1178</a>]
+			[<a target="_blank" href="http://dev.fckeditor.net/ticket/1267">#1267</a>] The list
+			insertion/removal/indent/outdent logic in FCKeditor has been rewritten, such that:
+			<ol>
+				<li>Text separated by &lt;br&gt; will always be treated as separate items during list
+					insertion regardless of browser;</li>
+				<li>List removal will now always obey the FCKConfig.EnterMode setting;</li>
+				<li>List indentation will be XHTML 1.1 compliant - all child elements under an &lt;ol&gt;
+					or &lt;ul&gt; must be &lt;li&gt; nodes;</li>
+				<li>IE editor hacks like &lt;ul type=&quot;1&quot;&gt; will no longer appear;</li>
+				<li>Excessive &lt;div&gt; nodes are no longer inserted into list items due to alignment
+					changes.</li>
+			</ol>
+		</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/205">#205</a>] Fixed the
+			issue where visible &gt;br&lt; tags at the end of paragraphs are incorrectly removed
+			after switching to and from source mode.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/1050">#1050</a>] Fixed
+			a minor PHP/XML incompatibility bug in editor/dialog/fck_docprops.html.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/462">#462</a>] Fixed an
+			algorithm bug in switching from source mode to WYSIWYG mode which causes the browser
+			to spin up and freeze for broken HTML code inputs.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/1019">#1019</a>] Table
+			command buttons are now disabled when the current selection is not inside a table.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/135">#135</a>] Fixed the
+			issue where context menus are misplaced in FCKeditor when FCKeditor is created inside
+			a &gt;div&lt; node with scrolling. </li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/1067">#1067</a>] Fixed
+			the issue where context menus are misplaced in Safari when FCKeditor is scrolled
+			down.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/1081">#1081</a>] Fixed
+			the issue where undoing table deletion in IE7 would cause JavaScript errors.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/1061">#1061</a>] Fixed
+			the issue where backspace and delete cannot delete special characters in Firefox
+			under some circumstances.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/403">#403</a>] Fixed the
+			issue where switching to and from source mode in full page mode under IE would add
+			excessive line breaks to &lt;style&gt; blocks.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/121">#121</a>] Fixed the
+			issue where maximizing FCKeditor inside a frameset would resize FCKeditor to the
+			whole window's size instead of just the container frame's size.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/1093">#1093</a>] Fixed
+			the issue where pressing Enter inside an inline tag would not create a new paragraph
+			correctly.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/1089">#1089</a>] Fixed
+			the issue where pressing Enter inside a &lt;pre&gt; block do not generate visible
+			line breaks in IE.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/332">#332</a>] Hitting
+			Enter when the caret is at the end of a hyperlink will no longer continue the link
+			at the new paragraph.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/1121">#1121</a>] Hitting
+			Enter with FCKConfig.EnterMode=br will now scroll the document correctly when the
+			new lines have exceeded the lower boundary of the editor frame.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/1063">#1063</a>] [<a
+			target="_blank" href="http://dev.fckeditor.net/ticket/1084">#1084</a>] [<a target="_blank"
+				href="http://dev.fckeditor.net/ticket/1092">#1092</a>] Fixed a few Norwegian
+			language translation errors.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/1148">#1148</a>] Fixed
+			the issue where the &quot;Automatic&quot; and &quot;More Colors...&quot; buttons
+			in the color selection panel are not centered in Safari.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/1187">#1187</a>] Fixed
+			the issue where the &quot;Paste as plain text&quot; command cannot be undone in
+			non-IE browsers.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/1222">#1222</a>] Ctrl-Backspace
+			operations will now save undo snapshots in all browsers.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/1223">#1223</a>] Fixed
+			the issue where the insert link dialog would save multiple undo snapshots for a
+			single operation.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/247">#247</a>] Fixed the
+			issue where deleting everything in the document in IE would create an empty &lt;p&gt;
+			block in the document regardless of EnterMode setting. </li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/1280">#1280</a>] Fixed
+			the issue where opening a combo box will cause the editor frames to lose focus when
+			there are multiple editors in the same document.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/363">#363</a>] Fixed the
+			issue where the Find dialog does not work under Opera.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/50">#50</a>] Fixed the
+			issue where the Paste button is always disabled in Safari.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/389">#389</a>] Pasting
+			text with comments from Word won't generate errors in IE, thanks to the idea from
+			Swift.</li>
+		<li>The pasting area in the Paste from Word dialog is focused on initial load</li>
+		<li>Some fixes related to html comment handling in the Word clean up routine</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/1303">#1303</a>] &lt;col&gt;
+			is correctly treated as an empty element.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/969">#969</a>] Removed
+			unused files (fcknumericfield.htc and moz-bindings.xml).</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/1166">#1166</a>] Fixed
+			the issue where &lt;meta&gt; tags are incorrectly outputted with closing tags in
+			full page mode.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/1200">#1200</a>] Fixed
+			the issue where context menus sometimes disappear prematurely before the user can
+			click on any items in Opera.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/1315">#1315</a>] Fixed
+			the issue where the source view text area in Safari is displayed with an excessive
+			blue border.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/1201">#1201</a>] Fixed
+			the issue where hitting Backspace or Delete inside a table cell deletes the table
+			cell instead of its contents in Opera.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/1311">#1311</a>] Fixed
+			the issue where undoing and redoing a special character insertion would send the
+			caret to incorrect positions. (e.g. the beginning of document)</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/923">#923</a>] Font colors
+			are now properly applied on links.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/1316">#1316</a>] Fixed
+			the issue where the image dialog expands to a size too big in Safari.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/1306">#1306</a>] [<a
+			target="_blank" href="http://dev.fckeditor.net/ticket/894">#894</a>] The undo system
+			can now undo text formatting steps like setting fonts to bold and italic.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/95">#95</a>] Fixed the
+			issue where FCKeditor breaks &lt;meta&gt; tags in full page mode in some circumstances.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/175">#175</a>] Fixed the
+			issue where entering an email address with a '%' sign in the insert link dialog
+			would cause JavaScript error.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/180">#180</a>] Improved
+			backward compatibility with older PHP versions. FCKeditor can now work with PHP
+			versions down to 4.0.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/192">#192</a>] Document
+			modifying actions from the FCKeditor JavaScript API will now save undo steps.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/246">#246</a>] Using text
+			formatting commands in EnterMode=div will no longer cause tags to randomly disappear.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/327">#327</a>] It is no
+			longer possible for the browser's back action to misfire when a user presses backspace
+			while an image is being selected in FCKeditor.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/362">#362</a>] Ctrl-Backspace
+			now works in FCKeditor.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/390">#390</a>] Text alignment
+			and justification commands now respects EnterMode=br paragraph rules.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/534">#534</a>] Pressing
+			Ctrl-End while the document contains a list towards the end will no longer make
+			the cursor disappear.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/906">#906</a>] It is now
+			possible to have XHTML 1.0 Strict compliant output from a document pasted from Word.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/929">#929</a>] Pressing
+			the Enter key will now produce an undo step.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/934">#934</a>] Fixed the
+			"Cannot execute code from a freed script" error in IE from editor dialogs.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/942">#942</a>] Server
+			based spell checking with ColdFusion integration no longer breaks fir non en_US
+			languages.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/942">#1056</a>] Deleting
+			everything in the editor document and moving the cursor around will no longer leave
+			the cursor hanging beyond the top of the editor document.</li>
+	</ul>
+	<p>
+		# This version has been <a href="http://dev.fckeditor.net/wiki/SD/COE">partially sponsored</a>
+		by the <a href="http://www.coe.int/">Council of Europe</a>.
+	</p>
+	<p>
+		<a href="_whatsnew_history.html">See previous versions history</a>
+	</p>
+</body>
+</html>
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/_whatsnew_history.html
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/_whatsnew_history.html	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/_whatsnew_history.html	(revision 1280)
@@ -0,0 +1,2804 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+	<title>FCKeditor - What's New?</title>
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+	<style type="text/css">
+		body { font-family: arial, verdana, sans-serif }
+		p { margin-left: 20px }
+	</style>
+</head>
+<body>
+	<h3>
+		Version 2.4.3</h3>
+	<p>
+		New Features and Improvements:</p>
+	<ul>
+		<li>It is now possible to set the default target when creating links, with the new "<strong>DefaultLinkTarget</strong>"
+			setting. </li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/436">#436</a>] The new
+			"<strong>FirefoxSpellChecker</strong>" setting is available, to enable/disable the
+			Firefox built-in spellchecker while typing. Even if word suggestions will not appear
+			in the FCKeditor context menu, this feature is useful to quickly identify misspelled
+			words.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/311">#311</a>] The new
+			"<strong>BrowserContextMenuOnCtrl</strong>" setting is being introduced, to enable/disable
+			the ability of displaying the default browser's context menu when right-clicking
+			with the CTRL key pressed.</li>
+	</ul>
+	<p>
+		Fixed Bugs:</p>
+	<ul>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/300">#300</a>] The fck_internal.css
+			file was not validating with the W3C CSS Validation Service.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/336">#336</a>] Ordered
+			list didn't keep the Type attribute properly (it was converted to lowercase when
+			the properties dialog was opened again).</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/318">#318</a>] Multiple
+			linked images are merged in a single link in IE.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/350">#350</a>] The &lt;marquee&gt;
+			element will no longer append unwanted &lt;p&gt;&amp;nbsp;&lt;/p&gt; to the code.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/351">#351</a>] The content
+			was being lost for images or comments only HTML inserted directly in the editor
+			source or loaded in the editor.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/388">#388</a>] Creating
+			links in lines separated by &lt;br&gt; in IE can lead to a merge of the links.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/325">#325</a>] Calling
+			the GetXHTML can distort visually the rendering in Firefox.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/391">#391</a>] When ToolbarLocation=Out,
+			a "Security Warning" alert was being shown in IE if under https. Thanks to reister.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/360">#360</a>] Form "name"
+			was being set to "[object]" if it contained an element with id="name".</li>
+		<li>Fixed a type that was breaking the ColdFusion SpellerPages integration file when
+			no spelling errors were found.</li>
+		<li>The ColdFusion SpellerPages integration was not working it Aspell was installed
+			in a directory with spaces in the name.</li>
+		<li>Added option to SpellerPages to ignore "alt" attributes.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/451">#451</a>] Classes
+			for images in IE didn't take effect immediately.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/430">#430</a>] Links with
+			a class did generate a span in Firefox when removing them.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/274">#274</a>] The PHP
+			quick upload still tried to use the uppercased types instead of the lowercased ones.
+		</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/416">#416</a>] The PHP
+			quick upload didn't check for the existence of the folder before saving.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/467">#467</a>] If InsertHtml
+			was called in IE with a comment (or any protected source at the beginning) it was
+			lost.</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&aid=1518766&group_id=75348&atid=543653">SF
+			BUG-1518766</a>] Mozilla 1.7.13 wasn't recognized properly as an old Gecko engine.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/324">#324</a>] Improperly
+			nested tags could lead to a crash in IE.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/455">#455</a>] Files and
+			folders with non-ANSI names were returned with a double UTF-8 encoding in the PHP
+			File Manager.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/273">#273</a>] The extensions
+			"sh", "shtml", "shtm" and "phtm" have been added to the list of denied extensions
+			on upload.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/453">#453</a>] No more
+			errors when hitting del inside an empty table cell.</li>
+		<li>The perl connector cgi file has been changed to Unix line endings.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/202">#202</a>] Regression:
+			The HR tag will not anymore break the contents loaded in the editor. </li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/508">#508</a>] The HR
+			command had a typo.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/505">#505</a>] Regression:
+			IE crashed if a table caption was deleted.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/82">#82</a>] [<a target="_blank"
+			href="http://dev.fckeditor.net/ticket/359">#359</a>] &lt;object&gt; and &lt;embed&gt;
+			tags are not anymore lost in IE.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/493">#493</a>] If the
+			containing form had a button named "submit" the "Save" command didn't work in Firefox.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/414">#414</a>] If tracing
+			was globally enabled in Asp.Net 2.0 then the Asp.Net connector did fail.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/520">#520</a>] The "Select
+			Field" properties dialog was not correctly handling select options with &amp;, &lt;
+			and &gt;.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/258">#258</a>] The Asp
+			integration didn't pass boolean values in English, using instead the locale of the
+			server and failing.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/487">#487</a>] If an image
+			with dimensions set as styles was opened with the image manager and then the dialog
+			was canceled the dimensions in the style were lost.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/220">#220</a>] The creation
+			of links or anchors in a selection that results on more than a single link created
+			will not anymore leave temporary links in the source. All links will be defined
+			as expected.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/220">#182</a>] [<a
+			target="_blank" href="http://dev.fckeditor.net/ticket/220">#261</a>] [<a target="_blank"
+				href="http://dev.fckeditor.net/ticket/220">#511</a>] Special characters, like
+			percent signs or accented chars, and spaces are now correctly returned by the File
+			Browser.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/281">#281</a>] Custom
+			toolbar buttons now render correctly in all skins.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/527">#527</a>] If the
+			configuration for a toolbar isn't fully valid, try to keep on parsing it.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/187">#187</a>] [<a
+			target="_blank" href="http://dev.fckeditor.net/ticket/435">#435</a>] [<a target="_blank"
+				href="https://sourceforge.net/tracker/?func=detail&aid=1612978&group_id=75348&atid=543653">SF
+				BUG-1612978</a>] [<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&aid=1163511&group_id=75348&atid=543653">SF
+					BUG-1163511</a>] Updated the configuration options in the ColdFusion integration
+			files.</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&aid=1726781&group_id=75348&atid=543655">SF
+			Patch-1726781</a>] Updated the upload class for asp to handle large files and other
+			data in the forms. Thanks to NetRube.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/225">#225</a>] With ColdFusion,
+			the target directory is now being automatically created if needed when "quick uploading".
+			Thanks to sirmeili.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/295">#295</a>] [<a
+			target="_blank" href="http://dev.fckeditor.net/ticket/510">#510</a>] Corrected some
+			path resolution issues with the File Browser connector for ColdFusion.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/239">#239</a>] The &lt;xml&gt;
+			tag will not anymore cause troubles.</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&aid=1721787&group_id=75348&atid=543653">SF
+			BUG-1721787</a>] If the editor is run from a virtual dir, the PHP connector will
+			detect that and avoid generating a wrong folder.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/431">#431</a>] PHP: The
+			File Browser now displays an error message when it is not able to create the configured
+			target directory for files (instead of sending broken XML responses).</li>
+	</ul>
+	<h3>
+		Version 2.4.2</h3>
+	<p>
+		Fixed Bugs:</p>
+	<ul>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/279">#279</a>] The UTF-8
+			BOM was being included in the wrong files, affecting mainly PHP installations.</li>
+	</ul>
+	<h3>
+		Version 2.4.1</h3>
+	<p>
+		New Features and Improvements:</p>
+	<ul>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/118">#118</a>] The SelectAll
+			command now is available in Source Mode.</li>
+		<li>The new open source FCKpackager sub-project is now available. It replaces the FCKeditor.Packager
+			software to compact the editor source.</li>
+		<li>With Firefox, if a paste execution is blocked by the browser security settings,
+			the new "Paste" popup is shown to the user to complete the pasting operation. </li>
+	</ul>
+	<p>
+		Fixed Bugs:</p>
+	<ul>
+		<li>Various fixes to the ColdFusion File Browser connector.</li>
+		<li>We are now pointing the download of ieSpell to their pages, instead to a direct
+			file download from one of their mirrors. This disables the ability of "click and
+			go" (which can still be achieved by pointing the download to a file in your server),
+			but removes any troubles with mirrors link changes (and they change it frequently).</li>
+		<li>The Word cleanup has been changed to remove "display:none" tags that may come from
+			Word.</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&atid=543653&aid=1659613&group_id=75348">SF
+			BUG-1659613</a>] The 2.4 version introduced a bug in the flash handling code that
+			generated out of memory errors in IE7.</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&atid=543653&aid=1660456&group_id=75348">SF
+			BUG-1660456</a>] The icons in context menus were draggable.</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&atid=543653&aid=1653009&group_id=75348">SF
+			BUG-1653009</a>] If the server is configured to process html files as asp then it
+			generated ASP error 0138.</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&atid=543653&aid=1288609&group_id=75348">SF
+			BUG-1288609</a>] The content of iframes is now preserved.</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&atid=543653&aid=1245504&group_id=75348">SF
+			BUG-1245504</a>] [<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&atid=543653&aid=1652240&group_id=75348">SF
+				BUG-1652240</a>] Flash files without the .swf extension weren't recognized upon
+			reload.</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&aid=1649753&group_id=75348&atid=543655">SF
+			PATCH-1649753</a>] Node selection for text didn't work in IE. Thanks to yurik dot
+			m.</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&aid=1573191&group_id=75348&atid=543653">SF
+			BUG-1573191</a>] The Html code inserted with FCK.InsertHtml didn't have the same
+			protection for special tags.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/110">#110</a>] The OK
+			button in dialogs had its width set as an inline style.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/113">#113</a>] [<a
+			target="_blank" href="http://dev.fckeditor.net/ticket/94">#94</a>] [<a target="_blank"
+				href="https://sourceforge.net/tracker/?func=detail&aid=1659270&group_id=75348&atid=543653">SF
+				BUG-1659270</a>] ForcePasteAsPlainText didn't work in Firefox.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/114">#114</a>] The correct
+			entity is now used to fill empty blocks when ProcessHTMLEntities is disabled.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/90">#90</a>] The editor
+			was wrongly removing some &lt;br&gt; tags from the code.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/139">#139</a>] The CTRL+F
+			and CTRL+S keystroke default behaviors are now preserved.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/138">#138</a>] We are
+			not providing a CTRL + ALT combination in the default configuration file because
+			it may be incompatible with some keyboard layouts. So, the CTRL + ALT + S combination
+			has been changed to CTRL + SHIFT + S.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/129">#129</a>] In IE,
+			it was not possible to paste if "Allow paste operation via script" was disabled
+			in the browser security settings.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/112">#112</a>] The enter
+			key now behaves correctly on lists with Firefox, when the EnterMode is set to 'br'.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/152">#152</a>] Invalid
+			self-closing tags are now being fixed before loading. </li>
+		<li>A few tags were being ignored to the check for required contents (not getting stripped
+			out, as expected). Fixed.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/202">#202</a>] The HR
+			tag will not anymore break the contents loaded in the editor.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/211">#211</a>] Some invalid
+			inputs, like "&lt;p&gt;" where making the caret disappear in Firefox.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/99">#99</a>] The &lt;div&gt;
+			element is now considered a block container if EnterMode=p|br. It acts like a simple
+			block only if EnterMode=div.</li>
+		<li>Hidden fields will now show up as an icon in IE, instead of a normal text field.
+			They are also selectable and draggable, in all browsers.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/213">#213</a>] Styles
+			are now preserved when hitting enter at the end of a paragraph.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/77">#77</a>] If ShiftEnterMode
+			is set to a block tag (p or div), the desired block creation in now enforced, instead
+			of copying the current block (which is still the behavior of the simple enter).</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/209">#209</a>] Links and
+			images URLs will now be correctly preserved with Netscape 7.1.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/165">#165</a>] The enter
+			key now honors the EnterMode settings when outdenting a list item.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/190">#190</a>] Toolbars
+			may be wrongly positioned. Fixed.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/254">#254</a>] The IgnoreEmptyParagraphValue
+			setting is now correctly handled in Firefox.</li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/254">#248</a>] The behavior
+			of the backspace key has been fixed on some very specific cases.</li>
+	</ul>
+	<h3>
+		Version 2.4</h3>
+	<p>
+		New Features and Improvements:</p>
+	<ul>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&aid=1329273&group_id=75348&atid=543656">SF
+			Feature-1329273</a>] [<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&aid=1456005&group_id=75348&atid=543656">SF
+				Feature-1456005</a>] [<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&aid=1315002&group_id=75348&atid=543653">SF
+					BUG-1315002</a>] [<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&aid=1350180&group_id=75348&atid=543653">SF
+						BUG-1350180</a>] [<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&aid=1450689&group_id=75348&atid=543653">SF
+							BUG-1450689</a>] [<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&aid=1461033&group_id=75348&atid=543653">SF
+								BUG-1461033</a>] [<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&aid=1510111&group_id=75348&atid=543653">SF
+									BUG-1510111</a>] [<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&aid=1203560&group_id=75348&atid=543653">SF
+										BUG-1203560</a>] [<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&aid=1564838&group_id=75348&atid=543653">SF
+											BUG-1564838</a>] The advance <strong>Enter Key Handler</strong>
+			is now being introduced. It gives you complete freedom to configure the editor to
+			generate <strong>&lt;p&gt;, &lt;div&gt; or &lt;br&gt;</strong> when the user uses
+			both the [Enter] and [Shift]+[Enter] keys. The new "EnterMode" and "ShiftEnterMode"
+			settings can be use to control its behavior. It also guarantees that all browsers
+			will generate the same output. </li>
+		<li>The new and powerful <strong>Keyboard Accelerator System</strong> is being introduced.
+			You can now precisely control the commands to execute when some key combinations
+			are activated by the user. It guarantees that all browsers will have the same behavior
+			regarding the shortcuts.<br />
+			It also makes it possible to remove buttons from the toolbar and still invoke their
+			features by using the keyboard instead.
+			<br />
+			It also blocks all default "CTRL based shortcuts" imposed by the browsers, so if
+			you don't want users to underline text, just remove the CTRL+U combination from
+			the keystrokes table. Take a look at the FCKConfig.Keystrokes setting in the fckconfig.js
+			file. </li>
+		<li>The new "<strong>ProtectedTags</strong>" configuration option is being introduced.
+			It will accept a list of tags (separated by a pipe "|"), which will have no effect
+			during editing, but will still be part of the document DOM. This can be used mainly
+			for non HTML standard, custom tags.</li>
+		<li>Dialog box commands can now open resizable dialogs (by setting oCommand.Resizable
+			= true).</li>
+		<li>Updated support for AFP. Thanks to Soenke Freitag.</li>
+		<li>New language file:<ul>
+			<li><strong>Afrikaans</strong> (by Willem Petrus Botha). </li>
+		</ul>
+		</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&aid=1456343&group_id=75348&atid=543655">SF
+			Patch-1456343</a>] New sample file showing how to dynamically exchange a textarea
+			and an instance of FCKeditor. Thanks to Finn Hakansson</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&aid=1496115&group_id=75348&atid=543655">SF
+			Patch-1496115</a>] [<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&aid=1588578&group_id=75348&atid=543653">SF
+				BUG-1588578</a>] [<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&aid=1376534&group_id=75348&atid=543653">SF
+					BUG-1376534</a>] [<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&aid=1343506&group_id=75348&atid=543653">SF
+						BUG-1343506</a>] [<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&aid=1211065&group_id=75348&atid=543656">SF
+							Feature-1211065</a>] [<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&aid=949144&group_id=75348&atid=543656">SF
+								Feature-949144</a>] The content of anchors are shown and preserved
+			on creation. * </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&aid=1587175&group_id=75348&atid=543656">SF
+			Feature-1587175</a>] Local links to an anchor are readjusted if the anchor changes.</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&aid=1500040&group_id=75348&atid=543655">SF
+			Patch-1500040</a>] New configuration values to specify the Id and Class for the
+			body element.</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&aid=1577202&group_id=75348&atid=543655">SF
+			Patch-1577202</a>] The links created with the popup option now are accessible even
+			if the user has JavaScript disabled.</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&aid=1443472&group_id=75348&atid=543655">SF
+			Patch-1443472</a>] [<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&aid=1576488&group_id=75348&atid=543653">SF
+				BUG-1576488</a>] [<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&aid=1334305&group_id=75348&atid=543653">SF
+					BUG-1334305</a>] [<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&aid=1578312&group_id=75348&atid=543653">SF
+						BUG-1578312</a>] The Paste from Word clean up function can be configured
+			with FCKConfig.CleanWordKeepsStructure to preserve the markup as much as possible.
+			Thanks Jean-Charles ROGEZ. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&aid=1472654&group_id=75348&atid=543655">SF
+			Patch-1472654</a>] The server side script location for SpellerPages can now be set
+			in the configuration file, by using the SpellerPagesServerScript setting.</li>
+		<li><span style="color: #ff0000">Attention:</span> All connectors are now pointing by
+			default to the "/userfiles/" folder instead of "/UserFiles/" (case change). Also,
+			the inner folders for each type (file, image, flash and media) are all lower-cased
+			too.</li>
+		<li><span style="color: #ff0000">Attention:</span> The UseBROnCarriageReturn configuration
+			is not anymore valid. The EnterMode setting can now be used to precisely set the
+			enter key behavior.</li>
+	</ul>
+	<p>
+		Fixed Bugs:</p>
+	<ul>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&atid=543653&aid=1444937&group_id=75348">SF
+			BUG-1444937</a>] [<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&atid=543653&aid=1274364&group_id=75348">SF
+				BUG-1274364</a>] Shortcut keys are now undoable correctly.</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&atid=543653&aid=1015230&group_id=75348">SF
+			BUG-1015230</a>] Toolbar buttons now update their state on shortcut keys activation.</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&atid=543653&aid=1485621&group_id=75348">SF
+			BUG-1485621</a>] It is now possible to precisely control which shortcut keys can
+			be used.</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&atid=543653&aid=1573714&group_id=75348">SF
+			BUG-1573714</a>] [<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&atid=543653&aid=1593323&group_id=75348">SF
+				BUG-1593323</a>] Paste was not working in IE if both AutoDetectPasteFromWord
+			and ForcePasteAsPlainText settings were set to "false". </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&atid=543653&aid=1578306&group_id=75348">SF
+			BUG-1578306</a>] The context menu was wrongly positioned if the editing document
+			was set to render in strict mode. Thanks to Alfonso Martinez.</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&atid=543653&aid=1567060&group_id=75348">SF
+			BUG-1567060</a>] [<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&atid=543653&aid=1565902&group_id=75348">SF
+				BUG-1565902</a>] [<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&atid=543653&aid=1440631&group_id=75348">SF
+					BUG-1440631</a>] IE was getting locked on some specific cases. Fixed.</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&atid=543653&aid=1582859&group_id=75348">SF
+			BUG-1582859</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&aid=1579507&group_id=75348&atid=543655">SF
+				Patch-1579507</a>] Firefox' spellchecker is now disabled during editing mode.
+			Thanks to Alfonso Martinez.</li>
+		<li>Fixed Safari and Opera detection system (for development purposes only).</li>
+		<li>Paste from Notepad was including font information in IE. Fixed.</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&atid=543653&aid=1584092&group_id=75348">SF
+			BUG-1584092</a>] When replacing text area, names with spaces are now accepted.</li>
+		<li>Depending on the implementation of toolbar combos (mainly for custom plugins) the
+			editor area was loosing the focus when clicking in the combo label. Fixed.</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&aid=1596937&group_id=75348&atid=543653">SF
+			BUG-1596937</a>] InsertHtml() was inserting the HTML outside the editor area on
+			some very specific cases.</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&atid=543653&aid=1585548&group_id=75348">SF
+			BUG-1585548</a>] On very specific, rare and strange cases, the XHTML processor was
+			not working properly in IE. Fixed.</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&atid=543653&aid=1584951&group_id=75348">SF
+			BUG-1584951</a>] [<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&atid=543653&aid=1380598&group_id=75348">SF
+				BUG-1380598</a>] [<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&atid=543653&aid=1198139&group_id=75348">SF
+					BUG-1198139</a>] [<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&atid=543653&aid=1437318&group_id=75348">SF
+						BUG-1437318</a>] In Firefox, the style selector will not anymore delete
+			the contents when removing styles on specific cases.</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&atid=543653&aid=1515441&group_id=75348">SF
+			BUG-1515441</a>] [<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&atid=543653&aid=1451071&group_id=75348">SF
+				BUG-1451071</a>] The "Insert/Edit Link" and "Select All" buttons are now working
+			properly when the editor is running on a IE Modal dialog.</li>
+		<li>On some very rare cases, IE was throwing a memory error when hiding the context
+			menus. Fixed.</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&atid=543653&aid=1526154&group_id=75348">SF
+			BUG-1526154</a>] [<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&aid=1509208&group_id=75348&atid=543653">SF
+				BUG-1509208</a>] With Firefox, &lt;style&gt; tags defined in the source are
+			now preserved.</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&atid=543653&aid=1535946&group_id=75348">SF
+			BUG-1535946</a>] The IE dialog system has been changed to better work with custom
+			dialogs.</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&atid=543653&aid=1599520&group_id=75348">SF
+			BUG-1599520</a>] The table dialog was producing empty tags when leaving some of
+			its fields empty.</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&atid=543653&aid=1599545&group_id=75348">SF
+			BUG-1599545</a>] HTML entities are now processed on attribute values too.</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&atid=543653&aid=1598517&group_id=75348">SF
+			BUG-1598517</a>] Meta tags are now protected from execution during editing (avoiding
+			the "redirect" meta to be activated).</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&atid=543653&aid=1415601&group_id=75348">SF
+			BUG-1415601</a>] Firefox internals: styleWithCSS is used instead of the deprecated
+			useCSS whenever possible.</li>
+		<li>All JavaScript Core extension function have been renamed to "PascalCase" (some were
+			in "camelCase"). This may have impact on plugins that use any of those functions.</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&atid=543653&aid=1592311&group_id=75348">SF
+			BUG-1592311</a>] Operations in the caption of tables are now working correctly in
+			both browsers.</li>
+		<li>Small interface fixes to the about box.</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&aid=1604576&group_id=75348&atid=543655">SF
+			PATCH-1604576</a>] [<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&atid=543653&aid=1604301&group_id=75348">SF
+				BUG-1604301</a>] Link creation failed in Firefox 3 alpha. Thanks to Arpad Borsos</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&aid=1577247&group_id=75348&atid=543653">SF
+			BUG-1577247</a>] Unneeded call to captureEvents and releaseEvents.</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&atid=543653&aid=1610790&group_id=75348">SF
+			BUG-1610790</a>] On some specific situations, the call to form.submit(), in form
+			were FCKeditor has been unloaded by code, was throwing the "Can't execute code from
+			a freed script" error.</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&aid=1613167&group_id=75348&atid=543653">SF
+			BUG-1613167</a>] If the configuration was missing the FCKConfig.AdditionalNumericEntities
+			entry an error appeared.</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&aid=1590848&group_id=75348&atid=543653">SF
+			BUG-1590848</a>] [<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&aid=1626360&group_id=75348&atid=543653">SF
+				BUG-1626360</a>] Cleaning of JavaScript strict warnings in the source code.</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&aid=1559466&group_id=75348&atid=543653">SF
+			BUG-1559466</a>] The ol/ul list property window always searched first for a UL element.</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&aid=1516008&group_id=75348&atid=543653">SF
+			BUG-1516008</a>] Class attribute in IE wasn't loaded in the image dialog.</li>
+		<li>The "OnAfterSetHTML" event is now fired when being/switching to Source View.</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&aid=1631807&group_id=75348&atid=543653">SF
+			BUG-1631807</a>] Elements' style properties are now forced to lowercase in IE.</li>
+		<li>The extensions "html", "htm" and "asis" have been added to the list of denied extensions
+			on upload.</li>
+		<li>Empty inline elements (like span and strong) will not be generated any more.</li>
+		<li>Some elements attributes (like hspace) where not being retrieved when set to "0".</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&aid=1508341&group_id=75348&atid=543653">SF
+			BUG-1508341</a>] Fix for the ColdFusion script file of SpellerPages.</li>
+	</ul>
+	<p>
+		* This version has been partially sponsored by <a href="http://www.imedi.org/">Medical
+			Media Lab</a>.</p>
+	<h3>
+		Version 2.3.3</h3>
+	<p>
+		New Features and Improvements:</p>
+	<ul>
+		<li>The project has been <strong>relicensed</strong> under the terms of the <strong>
+			GPL / LGPL / MPL</strong> licenses. This change will remove many licensing compatibility
+			issues with other open source licenses, making the editor even more "open" than
+			before. </li>
+		<li><font color="#ff0000">Attention:</font> The default directory in the distribution
+			package is now named "fckeditor" (in lowercase) instead of "FCKeditor".&nbsp; This
+			change may impact installations on case sensitive OSs, like Linux. </li>
+		<li><font color="#ff0000">Attention:</font> The "Universal Keyboard" has been removed
+			from the package. The license of those files was unclear so they can't be included
+			alongside the rest of FCKeditor.</li>
+	</ul>
+	<h3>
+		Version 2.3.2</h3>
+	<p>
+		New Features and Improvements:</p>
+	<ul>
+		<li>Users can now decide if the template dialog will replace the entire contents of
+			the editor or simply place the template in the cursor position. This feature can
+			be controlled by the "TemplateReplaceAll" and "TemplateReplaceCheckbox" configuration
+			options.</li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&aid=1237693&group_id=75348&atid=543655">SF
+			Patch-1237693</a>] A new configuration option (<strong>ProcessNumericEntities</strong>)
+			is now available to tell the editor to convert non ASCII chars to their relative
+			numeric entity references. It is disabled by default.</li>
+		<li>The new "<strong>AdditionalNumericEntities</strong>" setting makes it possible to
+			define a set of characters to be transformed to their relative numeric entities.
+			This is useful when you don't want the code to have simple quotes ('), for example.</li>
+		<li>The Norwegian language file (no.js) has been duplicated to include the Norwegian
+			Bokmal (nb.js) in the supported interface languages. Thanks to Martin Kronstad.
+		</li>
+		<li>Two new patterns have been added to the Universal Keyboard:
+			<ul>
+				<li>Persian. Thanks to Pooyan Mahdavi</li>
+				<li>Portuguese. Thanks to Bo Brandt.</li>
+			</ul>
+		</li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&aid=1517322&group_id=75348&atid=543655">SF
+			Patch-1517322</a>] It is now possible to define the start number on numbered lists.
+			Thanks to Marcel Bennett.</li>
+		<li>The Font Format combo will now reflect the EditorAreaCSS styles.</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&aid=1461539&group_id=75348&atid=543655">SF
+			Patch-1461539</a>] The File Browser connector can now optionally return a "url"
+			attribute for the files. Thanks to Pent.</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&atid=543653&aid=1090851&group_id=75348">SF
+			BUG-1090851</a>] The new "ToolbarComboPreviewCSS" configuration option has been
+			created, so it is possible to point the Style and Format toolbar combos to a different
+			CSS, avoiding conflicts with the editor area CSS.</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1421309&amp;group_id=75348&amp;atid=543656">SF
+			Feature-1421309</a>] [<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&atid=543653&aid=1489402&group_id=75348">SF
+				BUG-1489402</a>] It is now possible to configure the Quick Uploder target path
+			to consider the file type (ex: Image or File) in the target path for uploads.</li>
+		<li>The JavaScript integration file has two new things:
+			<ul>
+				<li>The "CreateHtml()" function in the FCKeditor object, used to retrieve the HTML of
+					an editor instance, instead of writing it directly to the page (as done by "Create()").</li>
+				<li>The global "FCKeditor_IsCompatibleBrowser()" function, which tells if the executing
+					browser is compatible with FCKeditor. This makes it possible to do any necessary
+					processing depending on the compatibility, without having to create and editor instance.</li>
+			</ul>
+		</li>
+	</ul>
+	<p>
+		Fixed Bugs:</p>
+	<ul>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&atid=543653&aid=1525242&group_id=75348">SF
+			BUG-1525242</a>] [<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&atid=543653&aid=1500050&group_id=75348">SF
+				BUG-1500050</a>] All event attributes (like onclick or onmouseover) are now
+			being protected before loading the editor. In this way, we avoid firing those events
+			during editing (IE issue) and they don't interfere in other specific processors
+			in the editor.</li>
+		<li>Small security fixes to the File Browser connectors. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&atid=543653&aid=1546226&group_id=75348">SF
+			BUG-1546226</a>] Small fix to the ColdFusion CFC integration file.</li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&atid=543655&aid=1547768&group_id=75348">SF
+			Patch-1407500</a>] The Word Cleanup function was breaking the HTML on pasting, on
+			very specific cases. Fixed, thanks to Frode E. Moe.</li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&aid=1551979&group_id=75348&atid=543655">SF
+			Patch-1551979</a>] [<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&atid=543653&aid=1418066&group_id=75348">SF
+				BUG-1418066</a>] [<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&atid=543653&aid=1439621&group_id=75348">SF
+					BUG-1439621</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&aid=1501698&group_id=75348&atid=543653">SF
+						BUG-1501698</a>] Make FCKeditor work with application/xhtml+xml. Thanks
+			to Arpad Borsos.</li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&aid=1547738&group_id=75348&atid=543655">SF
+			Patch-1547738</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&aid=1550595&group_id=75348&atid=543653">SF
+				BUG-1550595</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&aid=1540807&group_id=75348&atid=543653">SF
+					BUG-1540807</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&aid=1510685&group_id=75348&atid=543653">SF
+						BUG-1510685</a>] Fixed problem with panels wrongly positioned when the
+			editor is placed on absolute or relative positioned elements. Thanks to Filipe Martins.</li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&aid=1511294&group_id=75348&atid=543655">SF
+			Patch-1511294</a>] Small fix for the File Browser compatibility with IE 5.5.</li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&aid=1503178&group_id=75348&atid=543655">SF
+			Patch-1503178</a>] Small improvement to stop IE from loading smiley images when
+			one smiley is quickly selected from a huge list of smileys. Thanks to stuckhere.</li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&aid=1549112&group_id=75348&atid=543653">SF
+			BUG-1549112</a>] The Replace dialog window now escapes regular expression specific
+			characters in the find and replace fields.</li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&aid=1548788&group_id=75348&atid=543653">SF
+			BUG-1548788</a>] Updated the ieSpell download URL.</li>
+		<li>In FF, the editor was throwing an error when closing the window. Fixed.</li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&aid=1538509&group_id=75348&atid=543653">SF
+			BUG-1538509</a>] The "type" attribute for text fields will always be set now.</li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&aid=1551734&group_id=75348&atid=543653">SF
+			BUG-1551734</a>] The SetHTML function will now update the editing area height no
+			matter which editing mode is active.</li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&aid=1554141&group_id=75348&atid=543653">SF
+			BUG-1554141</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&aid=1565562&group_id=75348&atid=543653">SF
+				BUG-1565562</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&aid=1451056&group_id=75348&atid=543653">SF
+					BUG-1451056</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&aid=1478408&group_id=75348&atid=543653">SF
+						BUG-1478408</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&aid=1489322&group_id=75348&atid=543653">SF
+							BUG-1489322</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&aid=1513667&group_id=75348&atid=543653">SF
+								BUG-1513667</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&aid=1562134&group_id=75348&atid=543653">SF
+									BUG-1562134</a>] The protection of URLs has been enhanced
+			and now it will not break URLs on very specific cases.</li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&aid=1545732&group_id=75348&atid=543653">SF
+			BUG-1545732</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&aid=1490919&group_id=75348&atid=543653">SF
+				BUG-1490919</a>] No security errors will be thrown when loading FCKeditor in
+			page inside a FRAME defined in a different domain.</li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&aid=1512817&group_id=75348&atid=543653">SF
+			BUG-1512817</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&aid=1571345&group_id=75348&atid=543653">SF
+				BUG-1571345</a>] Fixed the "undefined" addition to the content when ShowBorders
+			= false and FullPage = true in Firefox. Thanks to Brett.</li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&aid=1512798&group_id=75348&atid=543653">SF
+			BUG-1512798</a>] BaseHref will now work well on FullPage, even if no &lt;head&gt;
+			is available.</li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&aid=1509923&group_id=75348&atid=543653">SF
+			BUG-1509923</a>] The DocumentProcessor is now called when using InserHtml().</li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&aid=1505964&group_id=75348&atid=543653">SF
+			BUG-1505964</a>] The DOCTYPE declaration is now preserved when working in FullPage.</li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&aid=1553727&group_id=75348&atid=543653">SF
+			BUG-1553727</a>] The editor was throwing an error when inserting complex templates.
+			Fixed.</li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&aid=1564930&group_id=75348&atid=543655">SF
+			Patch-1564930</a>] [<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&atid=543653&aid=1562828&group_id=75348">SF
+				BUG-1562828</a>] In IE, anchors where incorrectly copied when using the Paste
+			from Word button. Fixed, thanks to geirhelge.</li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&aid=1557709&group_id=75348&atid=543653">SF
+			BUG-1557709</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&aid=1421810&group_id=75348&atid=543653">SF
+				BUG-1421810</a>] The link dialog now validates Popup Window names.</li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&aid=1556878&group_id=75348&atid=543653">SF
+			BUG-1556878</a>] Firefox was creating empty tags when deleting the selection in
+			some special cases.</li>
+		<li>The context menu for links is now correctly shown when right-clicking on floating
+			divs.</li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&aid=1084404&group_id=75348&atid=543653">SF
+			BUG-1084404</a>] The XHTML processor now ignores empty span tags.</li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&aid=1221728&group_id=75348&atid=543653">SF
+			BUG-1221728</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&aid=1174503&group_id=75348&atid=543653">SF
+				BUG-1174503</a>] The &lt;abbr&gt; tag is not anymore getting broken by IE.</li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&aid=1182906&group_id=75348&atid=543653">SF
+			BUG-1182906</a>] IE is not anymore messing up mailto links.</li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&aid=1386094&group_id=75348&atid=543653">SF
+			BUG-1386094</a>] Fixed an issue when setting configuration options to empty ('')
+			by code.</li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&aid=1389435&group_id=75348&atid=543653">SF
+			BUG-1389435</a>] Fixed an issue in some dialog boxes when handling numeric inputs.</li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&aid=1398829&group_id=75348&atid=543653">SF
+			BUG-1398829</a>] Some links may got broken on very specific cases. Fixed.</li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&aid=1409969&group_id=75348&atid=543653">SF
+			BUG-1409969</a>] &lt;noscript&gt; tags now remain untouched by the editor.</li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&aid=1433457&group_id=75348&atid=543653">SF
+			BUG-1433457</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&aid=1513631&group_id=75348&atid=543653">SF
+				BUG-1513631</a>] Empty "href" attributes in &lt;a&gt; or empty "src" in &lt;img&gt;
+			will now be correctly preserved.</li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&aid=1435195&group_id=75348&atid=543653">SF
+			BUG-1435195</a>] Scrollbars are now visible in the File Browser (for custom implementations).</li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&aid=1438296&group_id=75348&atid=543653">SF
+			BUG-1438296</a>] The "ForceSimpleAmpersand" setting is now being honored in all
+			tags.</li>
+		<li>If a popup blocker blocks context menu operations, the correct alert message is
+			displayed now, instead of a ugly JavaScript error.</li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&aid=1454116&group_id=75348&atid=543653">SF
+			BUG-1454116</a>] The GetXHTML() function will not change the IsDirty() value of
+			the editor.</li>
+		<li>The spell check may not work correctly when using SpellerPages with ColdFusion.
+			Fixed.</li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&aid=1481861&group_id=75348&atid=543653">SF
+			BUG-1481861</a>] HTML comments are now removed by the Word Cleanup System.</li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&aid=1489390&group_id=75348&atid=543653">SF
+			BUG-1489390</a>] A few missing hard coded combo options used in some dialogs are
+			now localizable.</li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&aid=1505448&group_id=75348&atid=543653">SF
+			BUG-1505448</a>] The Form dialog now retrieves the value of the "action" attribute
+			exactly as defined in the source.</li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&aid=1517322&group_id=75348&atid=543655">SF
+			Patch-1517322</a>] Solved an issue when the toolbar has buttons with simple icons
+			(usually used by plugins) mixed with icons coming from a strip (the default toolbar
+			buttons).</li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&aid=1575261&group_id=75348&atid=543655">SF
+			Patch-1575261</a>] Some fields in the Table and Cell Properties dialogs were being
+			cut. Fixed.</li>
+		<li>Fixed a startup compatibility issue with Firefox 1.0.4.</li>
+	</ul>
+	<h3>
+		Version 2.3.1</h3>
+	<p>
+		Fixed Bugs:</p>
+	<ul>
+		<li>[<a target="_blank" href="https://sourceforge.net/support/tracker.php?aid=1506126">SF
+			BUG-1506126</a>] Fixed the Catalan language file, which had been published with
+			problems in accented letters. </li>
+		<li>More performance improvements in the default File Browser.</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&aid=1506701&group_id=75348&atid=543653">SF
+			BUG-1506701</a>] Fixed compatibility issues with IE 5.5.</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&aid=1509073&group_id=75348&atid=543653">SF
+			BUG-1509073</a>] Fixed the "Image Properties" dialog window, which was making invalid
+			calls to the "editor/dialog/" directory, generating error 400 entries in the web
+			server log.</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&aid=1507294&group_id=75348&atid=543653">SF
+			BUG-1507294</a>] [<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&aid=1507953&group_id=75348&atid=543653">SF
+				BUG-1507953</a>] The editing area was getting a fixed size when using the "SetHTML"
+			API command or even when switching back from the source view. Fixed.</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&atid=543653&aid=1507755&group_id=75348">SF
+			BUG-1507755</a>] Fixed a conflict between the "DisableObjectResizing" and "ShowBorders"
+			configuration options over IE.</li>
+		<li>Opera 9 tries to "mimic" Gecko in the browser detection system of FCKeditor. As
+			this browser is not "yet" supported, the editor was broken on it. It has been fixed,
+			and now a textarea is displayed, as in any other unsupported browser. Support for
+			Opera is still experimental and can be activated by setting the property "EnableOpera"
+			to true when creating an instance of the editor with the JavaScript integration
+			files.</li>
+		<li>With Opera 9, the toolbar was jumping on buttons rollover. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&aid=1509479&group_id=75348&atid=543656">SF
+			BUG-1509479</a>] The iframes used in Firefox for all editor panels (dropdown combos,
+			context menu, etc...) are now being placed right before the main iframe that holds
+			the editor. In this way, if the editor container element is removed from the DOM
+			(by DHTML) they are removed together with it.</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&aid=1271070&group_id=75348&atid=543653">SF
+			BUG-1271070</a>] [<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&aid=1411430&group_id=75348&atid=543653">SF
+				BUG-1411430</a>] The editor API now works well on DHTML pages that create and
+			remove instances of FCKeditor dynamically. </li>
+		<li>A second call to a page with the editor was not working correctly with Firefox 1.0.x.
+			Fixed.</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&aid=1511460&group_id=75348&atid=543653">SF
+			BUG-1511460</a>] Small correction to the &lt;script&gt; protected source regex.
+			Thanks to Randall Severy.</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&atid=543653&aid=1521754&group_id=75348">SF
+			BUG-1521754</a>] Small fix to the paths of the internal CSS files used by FCKeditor.
+			Thanks to johnw_ceb.</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&aid=1511442&group_id=75348&atid=543653">SF
+			BUG-1511442</a>] The &lt;base&gt; tag is now correctly handled in IE, no matter
+			its position in the source code.</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&aid=1507773&group_id=75348&atid=543653">SF
+			BUG-1507773</a>] The "Lock" and "Reset" buttons in the Image Properties dialog window
+			are not anymore jumping with Firefox 1.5.</li>
+	</ul>
+	<h3>
+		Version 2.3</h3>
+	<p>
+		New Features and Improvements:</p>
+	<ul>
+		<li>The <strong>Toolbar Sharing</strong> system has been completed. See sample10.html
+			and sample11.html.*</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&aid=1407500&group_id=75348&atid=543655">SF
+			Patch-1407500</a>] Small enhancement to the Find and Replace dialog windows.</li>
+	</ul>
+	<p>
+		Fixed Bugs:</p>
+	<ul>
+		<li>Small security fixes.</li>
+		<li>The context menu system has been optimized. Nested menus now open "onmouseover".
+		</li>
+		<li>An error in the image preloader system was making the toolbar strip being downloaded
+			once for each button on slow connections. Some enhancements have also been made
+			so now the smaple05.html is loading fast for all skins.</li>
+		<li>Fixed many memory leak issues with IE.</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&aid=1489768&group_id=75348&atid=543653">SF
+			BUG-1489768</a>] The panels (context menus, toolbar combos and color selectors),
+			where being displayed in the wrong position if the contents of the editor, or its
+			containing window were scrolled down. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&atid=543653&aid=1493176&group_id=75348">SF
+			BUG-1493176</a>] Using ASP, the connector was not working on servers with buffer
+			disable by default.</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&aid=1491784&group_id=75348&atid=543653">SF
+			BUG-1491784</a>] Language files have been updated to not include html entities.</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&aid=1490259&group_id=75348&atid=543653">SF
+			BUG-1490259</a>] No more security warning on IE over HTTPS.</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&aid=1493173&group_id=75348&atid=543653">SF
+			BUG-1493173</a>] [<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&atid=543653&aid=1499708&group_id=75348">SF
+				BUG-1499708</a>] We now assume that, if a user is in source editing, he/she
+			wants to control the HTML, so the editor doesn't make changes to it when posting
+			the form being in source view or when calling the GetXHTML function in the API.
+		</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&aid=1490610&group_id=75348&atid=543653">SF
+			BUG-1490610</a>] The FitWindow is now working on elements set with relative position.</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&aid=1493438&group_id=75348&atid=543653">SF
+			BUG-1493438</a>] The "Word Wrap" combo in the cell properties dialog now accepts
+			only Yes/No (no more &lt;Not Set&gt; value).</li>
+		<li>The context menu is now being hidden when a nested menu option is selected.</li>
+		<li>Table cell context menu operations are now working correctly.</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&aid=1494549&group_id=75348&atid=543653">SF
+			BUG-1494549</a>] The code formatter was having problems with dollar signs inside
+			&lt;pre&gt; tags.</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&aid=1459740&group_id=75348&atid=543655">SF
+			Patch-1459740</a>] The "src" element of images can now be set by styles definitions.
+			Thanks to joelwreed.</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&aid=1437052&group_id=75348&atid=543655">SF
+			Patch-1437052</a>] [<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&aid=1436166&group_id=75348&atid=543655">SF
+				Patch-1436166</a>] [<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&aid=1352385&group_id=75348&atid=543655">SF
+					Patch-1352385</a>] Small fix to the FCK.InsertHtml, FCKTools.AppendStyleSheet
+			and FCKSelection.SelectNode functions over IE. Thanks to Alfonso Martinez.</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&aid=1349765&group_id=75348&atid=543655">SF
+			Patch-1349765</a>] Small fix to the FCKSelection.GetType over Firefox. Thanks to
+			Alfonso Martinez.</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&atid=543655&aid=1495422&group_id=75348">SF
+			Patch-1495422</a>] The editor now creates link based on the URL when no selection
+			is available. Thanks to Dominik Pesch.</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&atid=543655&aid=1478859&group_id=75348">SF
+			Patch-1478859</a>] On some circumstances, the Yahoo popup blocker was blocking the
+			File Browser window, giving no feedback to the user. Now an alert message is displayed.</li>
+		<li>When using the editor in a RTL localized interface, like Arabic, the toolbar combos
+			were not showing completely in the first click. Fixed.</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&atid=543653&aid=1500212&group_id=75348">SF
+			BUG-1500212</a>] All "_samples/html" samples are now working when loading directly
+			from the Windows Explorer. Thanks to Alfonso Martinez.</li>
+		<li>The "FitWindow" feature was breaking the editor under Firefox 1.0.x.</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&aid=1500032&group_id=75348&atid=543655">SF
+			Patch-1500032</a>] In Firefox, the caret position now follows the user clicks when
+			clicking in the white area bellow the editor contents. Thanks to Alfonso Martinez.</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&atid=543653&aid=1499522&group_id=75348">SF
+			BUG-1499522</a>] In Firefox, the link dialog window was loosing the focus (and quickly
+			reacquiring it) when opening. This behavior was blocking the dialog in some Linux
+			installations. </li>
+		<li>Drastically improved the loading performance of the file list in the default File
+			Browser.</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&atid=543653&aid=1503059&group_id=75348">SF
+			BUG-1503059</a>] The default "BasePath" for FCKeditor in all integration files has
+			been now unified to "/fckeditor/" (lower-case). This is the usual casing system
+			in case sensitive OSs like Linux.</li>
+		<li>The "DisableFFTableHandles" setting is now honored when switching the full screen
+			mode with FitWindow.</li>
+		<li>Some fixes has been applied to the cell merging in Firefox.</li>
+	</ul>
+	<p>
+		* This version has been partially sponsored by <a href="http://www.footsteps.nl/">Footsteps</a>
+		and <a href="http://www.kentico.com/">Kentico</a>.</p>
+	<h3>
+		Version 2.3 Beta</h3>
+	<p>
+		New Features and Improvements:</p>
+	<ul>
+		<li><span><strong>Extremely Fast Loading!</strong> The editor now loads more than 3
+			times faster than before, with no impact on its advanced features.</span> </li>
+		<li><span><strong>New toolbar system</strong>:</span>
+			<ul>
+				<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1454850&amp;group_id=75348&amp;atid=543656">SF
+					Feature-1454850</a>] The toolbar will now <strong>load much faster</strong>. All
+					images have being merged in a single image file using a unique system available
+					only with FCKeditor. </li>
+				<li>The &quot;Text Color&quot; and &quot;Background Color&quot; commands buttons have
+					enhancements on the interface.</li>
+				<li><strong><span style="color: #ff0000">Attention</span></strong>: As a completely
+					new system has being developed. Skins created for versions prior this one will not
+					work. Skin styles definitions have being merged, added and removed. All skins have
+					been a little bit reviewed. </li>
+				<li>It is possible to <strong>detach the toolbar</strong> from an editor instance and
+					share it with other instances. In this way you may have only one toolbar (in the
+					top of the window, for example, that can be used by many editors (see <a href="_samples/html/sample10.html">
+						sample10.html</a>). This feature is still under development (issues with IE
+					focus still to be solved).* </li>
+			</ul>
+		</li>
+		<li><strong><span>New context menu system</span></strong>:
+			<ul>
+				<li>It uses the same (fast) loading system as the toolbar. </li>
+				<li>Sub-Menus are now available to group features (try the context menu over a table
+					cell). </li>
+				<li>It is now possible to create your own context menu entries by creating plugins.
+				</li>
+			</ul>
+		</li>
+		<li><strong>New "FitWindow" toolbar button</strong>, based on the <a href="https://sourceforge.net/tracker/index.php?func=detail&aid=1431638&group_id=75348&atid=737639">
+			plugin</a> published by Paul Moers. Thanks Paul!</li>
+		<li><strong>&quot;Auto Grow&quot; Plugin</strong>: automatically resizes the editor
+			until a maximum height, based on its contents size.** </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1444943&amp;group_id=75348&amp;atid=543656">SF
+			Feature-1444943</a>] <strong>Multiple CSS files</strong> can now be used in the
+			editing area. Just define FCKConfig.EditorAreaCSS as an array of strings (each one
+			is a path to a different css file). It works also as a simple string, as on prior
+			versions. </li>
+		<li>New language files:<ul>
+			<li><strong>Bengali / Bangla</strong> (by Richard Walledge).</li>
+			<li><strong>English (Canadian)</strong> (by Kevin Bennett). </li>
+			<li><strong>Khmer</strong> (by Sengtha Chay).</li>
+		</ul>
+		</li>
+		<li>The source view is now available in the editing area on Gecko browsers. Previously
+			a popup was used for it (due to a Firefox bug). </li>
+		<li><span>As some people may prefer the popup way for source editing, a new configuration
+			option (SourcePopup) has being introduced.</span> </li>
+		<li>The IEForceVScroll configuration option has been removed. The editor now automatically
+			shows the vertical scrollbar when needed (for XHTML doctypes). </li>
+		<li>The configuration file doesn't define a default DOCTYPE to be used now. </li>
+		<li>It is now possible to easily change the toolbar using the JavaScript API by just
+			calling &lt;EditorInstance&gt;.ToolbarSet.Load( '&lt;ToolbarName&gt;' ). See _testcases/010.html
+			for a sample. </li>
+		<li>The &quot;OnBlur&quot; and &quot;OnFocus&quot; JavaScript API events are now compatible
+			with all supported browsers. </li>
+		<li>Some few updates in the Lasso connector and uploader. </li>
+		<li>The GeckoUseSPAN setting is now set to "false" by default. In this way, the code
+			produced by the bold, italic and underline commands are the same on all browsers.</li>
+	</ul>
+	<p>
+		Fixed Bugs:</p>
+	<ul>
+		<li><strong>Important security fixes have been applied to the File Manager, Uploader
+			and Connectors. Upgrade is highly recommended.</strong> Thanks to Alberto Moro,
+			Baudouin Lamourere and James Bercegay.</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1399966&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1399966</a>] [<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1249853&amp;group_id=75348&amp;atid=543653">SF
+				BUG-1249853</a>] The &quot;BaseHref&quot; configuration is now working with
+			Firefox in both normal and full page modes.</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1405263&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1405263</a>] A typo in the configuration file was impacting the Quick Upload
+			feature. </li>
+		<li>Nested &lt;ul&gt; and &lt;ol&gt; tags are now generating valid html.</li>
+		<li>The &quot;wmode&quot; and &quot;quality&quot; attributes are now preserved for Flash
+			embed tags, in case they are entered manually in the source view. Also, empty attributes
+			are removed from that tag. </li>
+		<li>Tables where not being created correctly on Opera. </li>
+		<li>The XHTML processor will ignore invalid tags with names ending with &quot;:&quot;,
+			like http:. </li>
+		<li><span>On Firefox, the scrollbar is not anymore displayed on toolbar dropdown commands
+			when not needed.</span> </li>
+		<li><span>Some small fixes have being done to the dropdown commands rendering for FF</span>.
+		</li>
+		<li>The table dialog window has been a little bit enlarged to avoid contents being cropped
+			on some languages, like Russian. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1465203&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1465203</a>] The ieSpell download URL has been updated. The problem is that
+			they don't have a fixed URL for it, so let's hope the mirror will be up for it.
+		</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1456332&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1456332</a>] Small fix in the Spanish language file. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1457078&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1457078</a>] The File Manager was generating 404 calls in the server. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1459846&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1459846</a>] Fixed a problem with the config file if PHP is set to parse .js
+			files. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1432120&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1432120</a>] The &quot;UserFilesAbsolutePath&quot; setting is not correctly
+			used in the PHP uploader. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1432120&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1408869</a>] The collapse handler is now rendering correctly in Firefox 1.5.
+		</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1410082&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1410082</a>] [<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1424240&amp;group_id=75348&amp;atid=543653">SF
+				BUG-1424240</a>] The &quot;moz-bindings.xml&quot; file is now well formed. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1413980&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1413980</a>] All frameborder &quot;yes/no&quot; values have been changes to
+			&quot;1/0&quot;. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1414101&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1414101</a>] The fake table borders are now showing correctly when running under
+			the &quot;file://&quot; protocol. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1414155&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1414155</a>] Small typo in the cell properties dialog window.</li>
+		<li>Fixed a problem in the File Manager. It was not working well with folder or file
+			names with apostrophes ('). Thanks to René de Jong.</li>
+		<li>Small "lenght" type corrected in the select dialog window. Thanks to Bernd Nussbaumer.</li>
+		<li>The about box is now showing correctly in Firefox 1.5.</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&aid=1464020&group_id=75348&atid=543655">SF
+			Patch-1464020</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&aid=1155793&group_id=75348&atid=543653">SF
+				BUG-1155793</a>] The "Unlink" command is now working correctly under Firefox
+			if you don't have a complete link selection. Thanks to Johnny Egeland.</li>
+		<li>In the File Manager, it was not possible to upload files to folders with ampersands
+			in the name. Thanks to Mike Pone.</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&aid=1178359&group_id=75348&atid=543653">SF
+			BUG-1178359</a>] Elements from the toolbar are not anymore draggable in the editing
+			area.</li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&aid=1487544&group_id=75348&atid=543653">SF
+			BUG-1487544</a>] Fixed a small issue in the code formatter for &lt;br /&gt; and
+			&lt;hr /&gt; tags.</li>
+		<li>The "Background Color" command now works correctly when the GeckoUseSPAN setting
+			is disabled (default).</li>
+		<li>Links are now rendered in blue with Firefox (they were black before). Actually,
+			an entry for it has been added to the editing area CSS, so you can customize with
+			the color you prefer. </li>
+	</ul>
+	<p>
+		* This version has been partially sponsored by <a href="http://www.footsteps.nl/">Footsteps</a>
+		and <a href="http://www.kentico.com/">Kentico</a>.
+		<br />
+		** This version has been partially sponsored by <a href="http://www.nextide.ca/">Nextide</a>.</p>
+	<h3>
+		Version 2.2</h3>
+	<p>
+		New Features and Improvements:</p>
+	<ul>
+		<li>Let's welcome Wim Lemmens (didgiman). He's our new responsible for the ColdFusion
+			integration. In this version we are introducing his new files with the following
+			changes:
+			<ul>
+				<li>The &quot;<strong>Uploader</strong>&quot;, used for quick uploads,&nbsp;is now available
+					<strong>natively for ColdFusion</strong>. </li>
+				<li>Small bugs have been corrected in the <strong>File Browser connector</strong>. </li>
+				<li>The samples now work as is, even if you don't install the editor in the &quot;/FCKeditor&quot;
+					directory.</li>
+			</ul>
+		</li>
+		<li>And a big welcome also to &quot;Andrew Liu&quot;, our responsible for the <strong>
+			Python</strong> integration. This version is bringing <strong>native support for Python</strong>
+			, including the File Browser connector and Quick Upload. </li>
+		<li>The &quot;<strong>IsDirty()</strong>&quot; and &quot;<strong>ResetIsDirty()</strong>&quot;
+			functions have been&nbsp;added to the&nbsp;JavaScript API&nbsp;to check if the editor
+			content has been changed.* </li>
+		<li>New language files:
+			<ul>
+				<li><strong>Hindi</strong> (by Utkarshraj Atmaram) </li>
+				<li><strong>Latvian </strong>(by Janis Klavin&scaron;)</li>
+			</ul>
+		</li>
+		<li>For&nbsp;the interface, now we have complete <strong>RTL support</strong> also for
+			the drop-down toolbar commands, color selectors and context menu. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1325113&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1325113</a>] [<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1277661&amp;group_id=75348&amp;atid=543653">SF
+				BUG-1277661</a>] The new &quot;Delete Table&quot; command is available in the
+			Context Menu when right-clicking inside a table. </li>
+		<li>The &quot;FCKConfig.DisableTableHandles&quot; configuration option is now working
+			on Firefox 1.5. </li>
+		<li>The new &quot;<strong>OnBlur</strong>&quot; and &quot;<strong>OnFocus</strong>&quot;
+			events have been added to the JavaScript API (IE only). See&nbsp;&quot;_samples/html/sample09.html&quot;&nbsp;*
+		</li>
+		<li><strong><font color="#ff0000">Attention</font></strong>: The &quot;<strong>GetHTML</strong>&quot;
+			function has been deprecated. It now returns the same value as &quot;<strong>GetXHTML</strong>&quot;.
+			The same is valid for the &quot;EnableXHTML&quot; and &quot;EnableSourceXHTML&quot;
+			that have no effects now. The editor now works with XHTML output only. </li>
+		<li><strong><font color="#ff0000">Attention</font></strong>: A new &quot;<strong>PreserveSessionOnFileBrowser</strong>&quot;
+			configuration option has been introduced. It makes it possible to set whenever is
+			needed to maintain the user session in the File Browser. It is disabled by default,
+			as it has very specific usage and may cause the File Browser to be blocked by popup
+			blockers. If you have custom File Browsers that depends on session information,
+			remember to activate it. </li>
+		<li><strong><font color="#ff0000">Attention</font></strong>: The &quot;<strong>fun</strong>&quot;
+			smileys set has been removed from the package. If you are using it, you must manually
+			copy it to newer installations and upgrades. </li>
+		<li><strong><font color="#ff0000">Attention</font></strong>: The &quot;<strong>mcpuk</strong>&quot;
+			file browser has been removed from the package. We have no ways to support it. There
+			were also some licensing issues with it. Its web site can still be found at <a href="http://mcpuk.net/fbxp/">
+				http://mcpuk.net/fbxp/</a>. </li>
+		<li>It is now possible to set different CSS styles for the chars in the Special Chars
+			dialog window by adding the &quot;SpecialCharsOut&quot; and &quot;SpecialCharsOver&quot;
+			in the &quot;fck_dialog.css&quot; skin file.* </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1268726&amp;group_id=75348&amp;atid=543655">SF
+			Patch-1268726</a>] Added table &quot;summary&quot; support in the table dialog.
+			Thanks to Sebastien-Mahe. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1284380&amp;group_id=75348&amp;atid=543655">SF
+			Patch-1284380</a>] It is now possible to define the icon of a FCKToolbarPanelButton
+			object without being tied to the skin path (just like FCKToolbarButton). Thanks
+			to Ian Sullivan. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1338610&amp;group_id=75348&amp;atid=543655">SF
+			Patch-1338610</a>] [<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1263009&amp;group_id=75348&amp;atid=543656">SF
+				Patch-1263009</a>] New characters have been added to the &quot;Special Characters&quot;
+			dialog window. Thanks to Deian. </li>
+		<li>You can set the QueryString value &quot;fckdebug=true&quot; to activate &quot;debug
+			mode&quot; in the editor (showing the debug window), overriding the configurations.
+			The &quot;AllowQueryStringDebug&quot; configuration option is also available so
+			you can disable this feature.</li>
+	</ul>
+	<p>
+		Fixed Bugs:</p>
+	<ul>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1363548&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1363548</a>] [<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1364425&amp;group_id=75348&amp;atid=543653">SF
+				BUG-1364425</a>] [<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1335045&amp;group_id=75348&amp;atid=543653">SF
+					BUG-1335045</a>] [<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1289661&amp;group_id=75348&amp;atid=543653">SF
+						BUG-1289661</a>] [<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1225370&amp;group_id=75348&amp;atid=543653">SF
+							BUG-1225370</a>] [<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1156291&amp;group_id=75348&amp;atid=543653">SF
+								BUG-1156291</a>] [<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1165914&amp;group_id=75348&amp;atid=543653">SF
+									BUG-1165914</a>] [<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1111877&amp;group_id=75348&amp;atid=543653">SF
+										BUG-1111877</a>] [<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1092373&amp;group_id=75348&amp;atid=543653">SF
+											BUG-1092373</a>] [<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1101596&amp;group_id=75348&amp;atid=543653">SF
+												BUG-1101596</a>] [<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1246952&amp;group_id=75348&amp;atid=543653">SF
+													BUG-1246952</a>] The URLs for links and
+			images are now correctly preserved as entered, no matter if you are using relative
+			or absolute paths. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1162809&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1162809</a>] [<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1205638&amp;group_id=75348&amp;atid=543653">SF
+				BUG-1205638</a>] The &quot;Image&quot; and &quot;Flash&quot;&nbsp;dialog windows
+			now loads the preview correctly if the &quot;BaseHref&quot; configuration option
+			is set. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1329807&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1329807</a>] The alert boxes are now showing correctly when doing cut/copy/paste
+			operations on Firefox installations when it is not possible to execute that operations
+			due to security settings. </li>
+		<li>A new &quot;Panel&quot; system (used in the drop-dowm toolbar commands, color selectors
+			and context menu) has been developed. The following bugs have been fixed with it:
+			<ul>
+				<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1186927&amp;group_id=75348&amp;atid=543653">SF
+					BUG-1186927</a>] On IE, sometimes the context menu was being partially hidden.*
+				</li>
+				<li>On Firefox, the context menu was flashing in the wrong position before showing.
+				</li>
+				<li>On Firefox 1.5, the Color Selector was not working. </li>
+				<li>On Firefox 1.5, the fonts in the panels were too big. </li>
+				<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1076435&amp;group_id=75348&amp;atid=543653">SF
+					BUG-1076435</a>] [<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1200631&amp;group_id=75348&amp;atid=543653">SF
+						BUG-1200631</a>] On Firefox, sometimes the context menu was being shown in the
+					wrong position.</li>
+			</ul>
+		</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&amp;atid=543653&amp;aid=1364094&amp;group_id=75348">SF
+			BUG-1364094</a>] Font families were <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=317572">
+				not being rendered correctly on Firefox</a> . </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&amp;atid=543653&amp;aid=1315954&amp;group_id=75348">SF
+			BUG-1315954</a>] No error is thrown when pasting some case specific code from editor
+			to editor. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1341553&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1341553</a>] A small fix for a security alert in the File&nbsp;Browser has been
+			applied. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1370953&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1370953</a>] [<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1339898&amp;group_id=75348&amp;atid=543653">SF
+				BUG-1339898</a>] [<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1323319&amp;group_id=75348&amp;atid=543653">SF
+					BUG-1323319</a>] A message will be shown to the user (instead of a JS error)&nbsp;if
+			a &quot;popup blocker&quot; blocks the &quot;Browser Server&quot; button. Thanks
+			to Erwin Verdonk. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1370355&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1370355</a>] Anchor links that points to a single character anchor, like &quot;#A&quot;,
+			are now correctly detected in the Link dialog window. Thanks to Ricky Casey. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1368998&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1368998</a>] Custom error processing has been added to the file upload on the
+			File Browser. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1367802&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1367802</a>] [<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1207740&amp;group_id=75348&amp;atid=543653">SF
+				BUG-1207740</a>] A message is shown to the user if a dialog box is blocked by
+			a popup blocker in Firefox. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1358891&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1358891</a>] [<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1340960&amp;group_id=75348&amp;atid=543653">SF
+				BUG-1340960</a>] The editor not works locally (without a web server) on directories
+			where the path contains spaces. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1357247&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1357247</a>] The editor now intercepts SHIFT + INS keystrokes when needed. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1328488&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1328488</a>] <strong><font color="#ff0000">Attention</font></strong>: The Page
+			Break command now produces different tags&nbsp;to avoid&nbsp;XHTML compatibility
+			issues. Any Page Break previously applied to content produced with previous versions
+			of FCKeditor will not me rendered now, even if&nbsp;they will still be working correctly.
+		</li>
+		<li>It is now possible to allow cut/copy/past operations on Firefox using the <a
+			href="http://kb.mozillazine.org/Granting_JavaScript_access_to_the_clipboard"
+			target="_blank">user.js</a> file. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1336792&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1336792</a>] A fix has been applied to the XHTML processor to allow tag names
+			with the &quot;minus&quot; char (-). </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1339560&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1339560</a>] The editor now correctly removes the &quot;selected&quot; option
+			for checkboxes and radio buttons. </li>
+		<li>The Table dialog box now selects the table correctly when right-clicking on objects
+			(like images) placed inside the table. </li>
+		<li><strong><font color="#ff0000">Attention</font></strong>: A few changes have been
+			made in the skins. If you have a custom skin, it is recommended you to make a diff
+			of the fck_contextmenu.css file of the default skin with your implementation. </li>
+		<li>Mouse select (marking&nbsp;things in blue, like selecting text) has been disabled
+			on panels (drop-down menu commands, color selector and context menu) and toolbar,
+			for both IE and Firefox. </li>
+		<li>On Gecko, fake borders will not be applied to tables with the border attribute set
+			to more than 0, but placed inside tables with border set to 0. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1360717&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1360717</a>] A wrapping issue in the &quot;Silver&quot; skin has been corrected.
+			Thanks to Ricky Casey. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1251145&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1251145</a>] In IE, the focus is now maintained in the text when clicking in
+			the empty area&nbsp;following it. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1181386&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1181386</a>] [<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1237791&amp;group_id=75348&amp;atid=543653">SF
+				BUG-1237791</a>] The &quot;Stylesheet Classes&quot; field in the Link dialog
+			window in now applied correctly on IE. Thanks to Andrew Crowe. </li>
+		<li>The &quot;Past from Word&quot; dialog windows is now showing correctly on Firefox
+			on some languages. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1315008&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1315008</a>] [<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1241992&amp;group_id=75348&amp;atid=543653">SF
+				BUG-1241992</a>] IE, when selecting objects (like images) and hitting the &quot;Backspace&quot;
+			button, the browser's &quot;back&quot; will not get executed anymore and the object
+			will be correctly deleted. </li>
+		<li>The &quot;AutoDetectPasteFromWord&quot; is now working correctly in IE. Thanks to
+			Juan Ant. G&oacute;mez. </li>
+		<li>A small enhancement has been made in the Word pasting detection. Thanks to Juan
+			Ant. G&oacute;mez. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1090686&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1090686</a>] No more conflict with Firefox &quot;Type-Ahead Find&quot; feature.
+		</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=942653&amp;group_id=75348&amp;atid=543653">SF
+			BUG-942653</a>] [<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1155856&amp;group_id=75348&amp;atid=543653">SF
+				BUG-1155856</a>] The &quot;width&quot; and &quot;height&quot; of images sized
+			using the inline handlers are now correctly loaded in the image dialog box. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1209093&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1209093</a>] When &quot;Full Page Editing&quot; is active, in the &quot;Document
+			Properties&quot; dialog, the &quot;Browse Server&quot; button for the page background
+			is now correctly hidden if &quot;ImageBrowser&quot; is set to &quot;false&quot;
+			in the configurations file. Thanks to Richard. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1120266&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1120266</a>] [<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1186196&amp;group_id=75348&amp;atid=543653">SF
+				BUG-1186196</a>] The editor now retains the focus when selecting commands in
+			the toolbar. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1244480&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1244480</a>] The editor now will look first to linked fields &quot;ids&quot;
+			and&nbsp;second to &quot;names&quot;. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1252905&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1252905</a>] The &quot;InsertHtml&quot; function now preserves URLs as entered.
+		</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1266317&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1266317</a>] Toolbar commands are not anymore executed outside the editor. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1365664&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1365664</a>] The &quot;wrap=virtual&quot; attribute has been removed from the
+			integration files for validation purposes. No big impact. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=972193&amp;group_id=75348&amp;atid=543653">SF
+			BUG-972193</a>] Now just one click is needed to active the cursor inside the editor.
+		</li>
+		<li>The hidden fields used by the editor are now protected from changes using the &quot;Web
+			Developer Add-On &gt; Forms &gt; Display Forms Details&quot; extension. Thanks to
+			Jean-Marie Griess. </li>
+		<li>On IE, the &quot;Format&quot; toolbar dropdown now reflects the current paragraph
+			type on IE. Because of a bug in the browser, it is quite dependent on the browser
+			language and the editor interface language (both must be the same). Also, as the
+			&quot;Normal (DIV)&quot; type is seen by IE as &quot;Normal&quot;, to avoid confusion,
+			both types are ignored by this fix. </li>
+		<li>On some very rare cases, IE was loosing the &quot;align&quot; attribute for DIV
+			tags. Fixed. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&amp;atid=543653&amp;aid=1388799&amp;group_id=75348">SF
+			BUG-1388799</a>] The code formatter was removing spaces on the beginning of lines
+			inside PRE tags. Fixed. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1387135&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1387135</a>] No more &quot;NaN&quot; values in the image dialog, when changing
+			the sizes in some situations. </li>
+		<li>Corrected a small type in the table handler. </li>
+		<li>You can now set the &quot;z-index&quot; for floating panels (toolbar dropdowns,
+			color selectors, context menu) in Firefox, avoiding having them hidden under another
+			objects. By default it is set to 10,000. Use the FloatingPanelsZIndex configuration
+			option to change this value.</li>
+	</ul>
+	<p>
+		<strong>Special thanks</strong> to <a target="_blank" href="https://sourceforge.net/users/alfonsoml/">
+			Alfonso Martinez</a>, who have provided many patches and suggestions for the
+		following features / fixes present in this version. I encourage all you to <a href="https://sourceforge.net/donate/index.php?user_id=1356422">
+			donate</a> to Alfonso, as a way to say thanks for his nice open source approach.
+		Thanks Alfonso!. Check out his contributions:</p>
+	<ul>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&amp;atid=543653&amp;aid=1364094&amp;group_id=75348">SF
+			BUG-1352539</a>] [<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1208348&amp;group_id=75348&amp;atid=543653">SF
+				BUG-1208348</a>] With Firefox, no more &quot;fake&quot; selections are appearing
+			when inserting images, tables, special chars or when using the &quot;insertHtml&quot;
+			function. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&amp;atid=543655&amp;aid=1382588&amp;group_id=75348">SF
+			Patch-1382588</a>] The &quot;FCKConfig.DisableImageHandles&quot; configuration option
+			is not working on Firefox 1.5. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1368586&amp;group_id=75348&amp;atid=543655">SF
+			Patch-1368586</a>] Some fixes have been applied to the Flash dialog box and the
+			Flash pre-processor. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1360253&amp;group_id=75348&amp;atid=543655">SF
+			Patch-1360253</a>] [<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1378782&amp;group_id=75348&amp;atid=543653">SF
+				BUG-1378782</a>] [<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1305899&amp;group_id=75348&amp;atid=543653">SF
+					BUG-1305899</a>] [<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1344738&amp;group_id=75348&amp;atid=543653">SF
+						BUG-1344738</a>] [<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1347808&amp;group_id=75348&amp;atid=543653">SF
+							BUG-1347808</a>] On dialogs, some fields&nbsp;became impossible
+			to select or change when using Firefox. It has been fixed. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1357445&amp;group_id=75348&amp;atid=543655">SF
+			Patch-1357445</a>] Add support for DIV in the Format drop-down combo for Firefox.
+		</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1350465&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1350465</a>] [<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1376175&amp;group_id=75348&amp;atid=543653">SF
+				BUG-1376175</a>] The &quot;Cell Properties&quot; dialog now works correctly
+			when right-clicking in an object (image, for example) placed inside the cell itself.
+		</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1349166&amp;group_id=75348&amp;atid=543655">SF
+			Patch-1349166</a>] On IE, there is now support for namespaces on tags names. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1350552&amp;group_id=75348&amp;atid=543655">SF
+			Patch-1350552</a>] Fix the display issue when applying styles on tables. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1352320&amp;group_id=75348&amp;atid=543655">SF
+			Patch-1352320</a> ] Fixed&nbsp;a wrong&nbsp;usage of the &quot;parentElement&quot;
+			property on Gecko. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1355007&amp;group_id=75348&amp;atid=543655">SF
+			Patch-1355007</a>] The new &quot;FCKDebug.OutputObject&quot; function is available
+			to dump all object information in the debug window. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1329500&amp;group_id=75348&amp;atid=543655">SF
+			Patch-1329500</a>] It is now possible to delete table columns when clicking on a
+			TH cell of the column. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1315351&amp;group_id=75348&amp;atid=543655">SF
+			Patch-1315351</a>] It is now possible to pass the image width and height to the
+			&quot;SetUrl&quot; function of the Flash dialog box. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1327384&amp;group_id=75348&amp;atid=543655">SF
+			Patch-1327384</a>] TH tags are now correctly handled by the source code formatter
+			and the &quot;FillEmptyBlocks&quot; configuration option. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1327406&amp;group_id=75348&amp;atid=543655">SF
+			Patch-1327406</a>] Fake borders are now displayed for TH elements on tables with
+			border set to 0. Also, on Firefox, it will now work even if the border attribute
+			is not defined and the borders are not dotted. </li>
+		<li>Hidden fields now get rendered on Firefox. </li>
+		<li>The BasePath is now included in the debugger URL to avoid problems when calling
+			it from plugins.</li>
+	</ul>
+	<p>
+		* This version has been partially sponsored by <a target="_blank" href="http://www.alkacon.com">
+			Alkacon Software</a>.</p>
+	<h3>
+		Version 2.1.1</h3>
+	<p>
+		New Features and Improvements:</p>
+	<ul>
+		<li>The new &quot;<strong>Insert Page Break</strong>&quot;&nbsp;command (for printing)&nbsp;has
+			been introduced.* </li>
+		<li>The editor package now has a root directory called &quot;FCKeditor&quot;.</li>
+	</ul>
+	<p>
+		Fixed Bugs:</p>
+	<ul>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1326285&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1326285</a>] [<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1316430&amp;group_id=75348&amp;atid=543653">SF
+				BUG-1316430</a>] [<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1323662&amp;group_id=75348&amp;atid=543653">SF
+					BUG-1323662</a>] [<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1326223&amp;group_id=75348&amp;atid=543653">SF
+						BUG-1326223</a>] We are doing a little step back with this version.
+			The ENTER and BACKSPACE behavior changes for Firefox have been remove. It is a nice
+			feature, but we need much more testing&nbsp;on it. It introduced some bugs and so
+			its preferable to not have that feature, avoiding problems (even if that feature
+			was intended to solve some issues). </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1289372&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1275714</a>] Comments in the beginning of the source are now preserved when
+			using the &quot;undo&quot; and &quot;redo&quot; commands. </li>
+		<li>The &quot;undo&quot; and &quot;redo&quot; commands now work for the Style command.
+		</li>
+		<li>An error in the execution of the pasting commands on Firefox has been fixed. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&amp;atid=543653&amp;aid=1326184&amp;group_id=75348">SF
+			BUG-1326184</a>] No strange (invalid) entities are created when using Firefox. Also,
+			the &amp;nbsp; used by the FillEmptyBlocks setting is maintained even if you disable
+			the ProcessHTMLEntities setting.</li>
+	</ul>
+	<p>
+		* This version has been partially sponsored by <a target="_blank" href="http://www.acttive.com.br/">
+			Acctive Software&nbsp;S.A.</a>.</p>
+	<h3>
+		Version 2.1</h3>
+	<p>
+		New Features and Improvements:</p>
+	<ul>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1200328&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1200328</a>] The editor now offers a way to &quot;protect&quot; part of the
+			source to remain untouched while editing or changing views.&nbsp;Just use the &quot;FCKConfig.ProtectedSource&quot;
+			object to configure it and customize to your needs. It is based on regular expressions.
+			See fckconfig.js for some samples. </li>
+		<li>The editor now offers native support for <strong>Lasso</strong>. Thanks and welcome&nbsp;to
+			our new developer Jason Huck. </li>
+		<li>New language files are available:
+			<ul>
+				<li><strong>Faraose</strong> (by S&iacute;min Lassaberg and&nbsp;Helgi Arnthorsson)
+				</li>
+				<li><strong>Malay</strong> (by Fairul Izham Mohd Mokhlas) </li>
+				<li><strong>Mongolian</strong> (by Lkamtseren Odonbaatar) </li>
+				<li><strong>Vietnamese</strong> (by Phan Binh Giang)</li>
+			</ul>
+		</li>
+		<li>A new configurable&nbsp;ColdFusion connector is available. Thanks to Mark Woods.
+			Many enhancements has been introduced with it. </li>
+		<li>The PHP connector for the default File Browser now sorts the folders and files names.
+		</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1289372&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1289372</a>] [<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1282758&amp;group_id=75348&amp;atid=543653">SF
+				BUG-1282758</a>] In the PHP connector it is now possible to set the absolute
+			(server) path to the User Files directory, avoiding problems with Virtual Directories,
+			Symbolic Links or Aliases. Take a look at the config.php file. </li>
+		<li>The ASP.Net uploader (for Quick Uploads) has been added to the package. </li>
+		<li>A new way to define <strong>simple &quot;combo&quot; toolbar items</strong> , like
+			Style and Font, has been introduced.&nbsp;Thanks&nbsp;to Steve Lineberry.&nbsp;See
+			sample06.html and the &quot;simplecommands&quot; plugin&nbsp;to fully understand
+			it. </li>
+		<li>A new test case has been added that shows how to set the editor background dynamically
+			without using a CSS. </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1155906&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1155906</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1110116&amp;group_id=75348&amp;atid=543653">SF
+				BUG-1110116</a>] [<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1216332&amp;group_id=75348&amp;atid=543653">SF
+					BUG-1216332</a>] The &quot;AutoDetectPasteFromWord&quot; configuration option
+			is back (IE only feature). </li>
+		<li>The&nbsp;new &quot;OnAfterLinkedFieldUpdate&quot; event has been introduced. If
+			is fired when the editor updates its hidden associated field. </li>
+		<li>Attention: The color of the right border of the toolbar (left on RTL interfaces)
+			has been moved from code to the CSS (TB_SideBorder class). Update your custom skins.
+		</li>
+		<li>A&nbsp;sample &quot;htaccess.txt&quot; file has been added to the editor's package
+			to show how to configure some Linux sites that could present problems on Firefox
+			with &quot;Illegal characters&quot; errors. Respectively the &quot;&iuml;&raquo;&iquest;&quot;
+			chars. </li>
+		<li>With the JavaScript, ASP and PHP integration files, you can set the QueryString
+			value &quot;fcksource=true&quot; to load the editor using the source files (located
+			in the _source directory) instead of the compressed ones. Thanks to Kae Verens for
+			the suggestion. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1246623&amp;group_id=75348&amp;atid=543656">SF
+			Feature-1246623</a>] The new configuration option &quot;ForceStrongEm&quot; has
+			been introduced so you can force the editor to convert all &lt;B&gt; and &lt;I&gt;
+			tags to &lt;STRONG&gt; and &lt;EM&gt; respectively. </li>
+		<li>A nice contribution has been done by Goss Interactive Ltd:
+			<ul>
+				<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1246949&amp;group_id=75348&amp;atid=543653">SF
+					BUG-1246949</a>] Implemented ENTER key and BACKSPACE key handlers for Gecko so that
+					P tags (or an appropriate block element) get inserted instead of BR tags when not
+					in the UseBROnCarriageReturn config mode.
+					<br />
+					The ENTER key handling has been written to function much the same as the ENTER key
+					handling on IE : as soon as the ENTER key is pressed, existing content will be wrapped
+					with a suitable block element (P tag) as appropriate and a new block element (P
+					tag) will be started.
+					<br />
+					The ENTER key handler also caters for pressing ENTER within empty list items - ENTER
+					in an empty item at the top of a list will remove that list item and start a new
+					P tag above the list; ENTER in an empty item at the bottom of a list will remove
+					that list item and start a new P tag below the list; ENTER in an empty item in the
+					middle of a list will remove that list item, split the list into two, and start
+					a new P tag between the two lists. </li>
+				<li>Any tables that are found to be incorrectly nested within a block element (P tag)
+					will be moved out of the block element when loaded into the editor. This is required
+					for the new ENTER/BACKSPACE key handlers and it also avoids non-compliant HTML.&nbsp;
+				</li>
+				<li>The InsertOrderedList and InsertUnorderedList commands have been overridden on Gecko
+					to ensure that block elements (P tags) are placed around a list item's content when
+					it is moved out of the list due to clicking on the editor's list toolbar buttons
+					(when not in the UseBROnCarriageReturn config mode). </li>
+			</ul>
+		</li>
+	</ul>
+	<p>
+		Fixed Bugs:</p>
+	<ul>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1253255&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1253255</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1253255&amp;group_id=75348&amp;atid=543653">SF
+				BUG-1265520</a>] Due to changes on version 2.0, the anchor list was not anymore
+			visible in the link dialog window. It has been fixed. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&amp;atid=543653&amp;aid=1242979&amp;group_id=75348">SF
+			BUG-1242979</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1251354&amp;group_id=75348&amp;atid=543653">SF
+				BUG-1251354</a>] [<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1256178&amp;group_id=75348&amp;atid=543653">SF
+					BUG-1256178</a>] [<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1274841&amp;group_id=75348&amp;atid=543653">SF
+						BUG-1274841</a>] [<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1303949&amp;group_id=75348&amp;atid=543653">SF
+							BUG-1303949</a>] Due to a bug on Firefox, some keys stopped working
+			on startup over Firefox. It has been fixed. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1251373&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1251373</a> ] The above fix also has&nbsp;corrected some strange behaviors on
+			Firefox. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/?group_id=75348&amp;atid=543653&amp;func=detail&amp;aid=1144258">SF
+			BUG-1144258</a>] [<a target="_blank" href="https://sourceforge.net/tracker/?group_id=75348&amp;atid=543653&amp;func=detail&amp;aid=1092081">SF
+				BUG-1092081</a>] The File Browsers now run on the&nbsp;same server session used
+			in the page where the editor is placed in (IE issue). Thanks to Simone Chiaretta.
+		</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1305619&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1305619</a> ] No more repeated login dialogs when running the editor with Windows
+			Integrated Security with IIS. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1245304&amp;group_id=75348&amp;atid=543655">SF
+			Patch-1245304</a>] The Test Case 004 is now working correctly. It has been changed
+			to set the editor hidden at startup. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1290610&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1290610</a> ] Over HTTPS, there were some warnings when loading the Images,
+			Flash and Link dialogs. Fixed. </li>
+		<li>Due to Gecko bugs, two errors were thrown when loading the editor in a hidden div.
+			Workarounds have been introduced. In any case, the testcase 004 hack is needed when
+			showing the editor (as in a tabbed interface). </li>
+		<li>An invalid path in the dialogs CSS file has been corrected. </li>
+		<li>On IE, the Undo/Redo can now be controlled using the Ctrl+Z and Ctrl+Y shortcut
+			keys. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1295538&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1295538</a> ] A few Undo/Redo fixes for IE have been done. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1247070&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1247070</a>] On Gecko, it is now possible to use the shortcut keys for Bold
+			(CTRL+B), Italic (CTRL+I) and Underline (CTRL+U), like in IE. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1274303&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1274303</a>] The &quot;Insert Column&quot; command is now working correctly
+			on TH cells. It also copies any attribute applied to the source cells. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1287070&amp;group_id=75348&amp;atid=543655">SF
+			Patch-1287070</a> ] In the Universal Keyboard, the Arabic keystrokes translator
+			is now working with Firefox. Thanks again to Abdul-Aziz Al-Oraij. </li>
+		<li>The editor now handles AJAX requests with HTTP status 304. </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1157780&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1157780</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1229077&amp;group_id=75348&amp;atid=543653">SF
+				BUG-1229077</a>] Weird comments are now handled correctly (ignored on some cases).
+		</li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1155774&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1155774</a>] A spelling error in the Bulleted List Properties dialog has been
+			corrected. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1272018&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1272018</a>] The ampersand character can now be added from the Special Chars
+			dialog. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1263161&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1263161</a>] A small fix has been applied to the sampleposteddata.php file.
+			Thanks to Mike Wallace. </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1241504&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1241504</a>] The editor now looks also for the ID of the hidden linked field.
+		</li>
+		<li>The caption property on tables is now working on Gecko. Thanks to Helen Somers (Goss
+			Interactive Ltd). </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1297431&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1297431</a>] With IE, the editor now works locally when its files are placed
+			in a directory path that contains spaces. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1279551&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1279551</a>] [<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1242105&amp;group_id=75348&amp;atid=543653">SF
+				BUG-1242105</a>] On IE, some features are dependant of ActiveX components (secure...
+			distributed&nbsp;with IE itself). Some security setting could avoid the usage of
+			those components and the editor would stop working. Now a message is shown, indicating
+			the use the minimum necessary settings need&nbsp;by the editor to run. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1298880&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1298880</a>] Firefox can't handle the STRONG and EM tags. Those tags are now
+			converted to B and I so it works accordingly. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1271723&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1271723</a>] On IE, it is now possible to select the text and work correctly
+			in the contents of absolute positioned/dimensioned divs. </li>
+		<li>On IE, there is no need to click twice in the editor to&nbsp;activate the cursor
+			in the editing area. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&amp;atid=543653&amp;aid=1221621&amp;group_id=75348">SF
+			BUG-1221621</a>] Many &quot;warnings&quot; in the Firefox console are not thrown
+			anymore. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1295526&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1295526</a>] While&nbsp;editing on &quot;FullPage&quot; mode the basehref is
+			now active for CSS &quot;link&quot; tags. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1222584&amp;group_id=75348&amp;atid=543655">SF
+			Patch-1222584</a>] A small fix to the PHP connector has been applied. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1281313&amp;group_id=75348&amp;atid=543655">SF
+			Patch-1281313</a>] A few small changes to avoid problems with Plone. Thanks to Jean-mat.
+		</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1275911&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1275911</a>] A check for double dots sequences on directory names on creation
+			has been introduced to the PHP and ASP connectors.</li>
+	</ul>
+	<h3>
+		Version 2.0</h3>
+	<p>
+		New Features and Improvements:</p>
+	<ul>
+		<li>The&nbsp;new &quot;<strong>Flash</strong>&quot; command is available. Now you can
+			easily handle Flash content, over IE and Gecko, including server browser integration
+			and context menu support. Due to limitations of the browsers, it is not possible
+			to see the preview of the movie while editing, so a nice &quot;placeholder&quot;
+			is used instead. * </li>
+		<li>A&nbsp;&quot;<strong>Quick Upload</strong> &quot; option is now available in the
+			link, image and flash dialog windows, so the user don't need to go (or have) the
+			File Browser for this operations. The ASP and PHP uploader&nbsp;are included.&nbsp;Take
+			a look at the configuration file.*** </li>
+		<li>Added support for <strong>Active FoxPro Pages</strong> . Thanks to our new developer,
+			S&ouml;nke Freitag. </li>
+		<li>It is now possible to <strong>disable the size handles</strong> for images and tables
+			(IE only feature). Take a look at the DisableImageHandles and DisableTableHandles
+			configuration options. </li>
+		<li>The handles on form fields&nbsp;(small squares around them) and the inline editing
+			of&nbsp;its contents&nbsp;have been disabled. This makes it easier to users to use
+			the controls. </li>
+		<li>A much better support for Word pasting operations has been introduced. Now it uses
+			a dialog box, in this way we have better results and more control.** </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1225372&amp;group_id=75348&amp;atid=543655">SF
+			Patch-1225372</a>] A small change has been done to the PHP integration file. The
+			generic __construct constructor has been added for better PHP 5 sub-classing&nbsp;compatibility
+			(backward compatible). Thanks to Marcus Bointon.</li>
+	</ul>
+	<p>
+		Fixed Bugs:</p>
+	<ul>
+		<li>ATTENTION: Some security changes have been made to the connectors. Now you must
+			explicitly enable the connector you want to use. Please test your application before
+			deploying this update. </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/?group_id=75348&amp;atid=543653&amp;func=detail&amp;aid=1211591">SF
+			BUG-1211591</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1204273&amp;group_id=75348&amp;atid=543653">SF
+				BUG-1204273</a>] The connectors have been changed so it is not possible to use
+			&quot;..&quot; on directory names. </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1219734&amp;group_id=75348&amp;atid=543655">SF
+			Patch-1219734</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1219728&amp;group_id=75348&amp;atid=543653">SF
+				BUG-1219728</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1208654&amp;group_id=75348&amp;atid=543653">SF
+					BUG-1208654</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1205442&amp;group_id=75348&amp;atid=543653">SF
+						BUG-1205442</a>] There was an error in the page unload on some cases
+			that has been fixed. </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/?group_id=75348&amp;atid=543653&amp;func=detail&amp;aid=1209708">SF
+			BUG-1209708</a>] [<a target="_blank" href="http://sourceforge.net/tracker/?group_id=75348&amp;atid=543653&amp;func=detail&amp;aid=1214125">SF
+				BUG-1214125</a>] The undo on IE is now working correctly when the user starts
+			typing. </li>
+		<li>The preview now loads &quot;Full Page&quot; editing correctly. It also uses the
+			same XHTML code produced by the final output. </li>
+		<li>The &quot;Templates&quot; dialog was not working on some very specific (and strange)
+			occasions over IE. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&amp;atid=543653&amp;aid=1199631&amp;group_id=75348">SF
+			BUG-1199631</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1171944&amp;group_id=75348&amp;atid=543653">SF
+				BUG-1171944</a>] A new option is available to avoid a bad IE behavior that shows
+			the horizontal scrollbar even when not needed. You can now force the vertical scrollbar
+			to be always visible. Just set the &quot;IEForceVScroll&quot; configuration option
+			to &quot;true&quot;. Thanks to Grant Bartlett. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1212026&amp;group_id=75348&amp;atid=543655">SF
+			Patch-1212026</a>] [<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1228860&amp;group_id=75348&amp;atid=543653">SF
+				BUG-1228860</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1211775&amp;group_id=75348&amp;atid=543653">SF
+					BUG-1211775</a>] [<a target="_blank" href="http://sourceforge.net/tracker/?group_id=75348&amp;atid=543653&amp;func=detail&amp;aid=1199824">SF
+						BUG-1199824</a>] An error in the Packager has been corrected. </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/?group_id=75348&amp;atid=543653&amp;func=detail&amp;aid=1163669">SF
+			BUG-1163669</a>] The XHTML processor now adds a space before the closing slash of
+			tags that don't have a closing tag, like &lt;br /&gt;. </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1213733&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1213733</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1216866&amp;group_id=75348&amp;atid=543653">SF
+				BUG-1216866</a>]&nbsp;[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1209673&amp;group_id=75348&amp;atid=543653">SF
+					BUG-1209673</a>]&nbsp;[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1155454&amp;group_id=75348&amp;atid=543653">SF
+						BUG-1155454</a>]&nbsp;[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1187936&amp;group_id=75348&amp;atid=543653">SF
+							BUG-1187936</a> ]&nbsp;Now, on Gecko, the source is opened in a
+			dialog window to avoid fatal errors (Gecko bugs). </li>
+		<li>Some pages have been changed to avoid importing errors on Plone. Thanks to Arthur
+			Kalmenson. </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1171606&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1171606</a>] There&nbsp;is a bug on IE that makes the editor to not work if
+			the instance name matches a meta tag name. Fixed. </li>
+		<li>On Firefox, the source code is now opened in a dialog box, to avoid error on pages
+			with more than one editor. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1225703&amp;group_id=75348&amp;atid=543655">SF
+			Patch-1225703</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1214941&amp;group_id=75348&amp;atid=543653">SF
+				BUG-1214941</a>] The &quot;ForcePasteAsPlainText&quot; configuration option
+			is now working correctly on Gecko browsers. Thanks to Manuel Polo. </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1228836&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1228836</a>] The &quot;Show Table Borders&quot; feature is now working on Gecko
+			browsers. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1212529&amp;group_id=75348&amp;atid=543655">SF
+			Patch-1212529</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1212517&amp;group_id=75348&amp;atid=543653">SF
+				BUG-1212517</a>] The default File Browser now accepts connectors with querystring
+			parameters (with &quot;?&quot;). Thanks to Tomas Jucius. </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1233318&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1233318</a>] A JavaScript error thrown when using the Print command has been
+			fixed. </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1229696&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1229696</a>] A regular expression has been escaped to avoid problems when opening
+			the code in some editors. It has been moved to a&nbsp;dialog window. </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1231978&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1231978</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1228939&amp;group_id=75348&amp;atid=543653">SF
+				BUG-1228939</a>] The Preview window is now using the Content Type and Base href.
+		</li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1232056&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1232056</a>] The&nbsp;anchor icon is now working correctly on IE. </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1232056&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1202468</a>] The anchor icon is now available on Gecko too. </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1236279&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1236279</a>] A security warning has been corrected when using the File Browser
+			over HTTPS. </li>
+		<li>The ASP implementation now avoid errors when setting the editor value to null values.
+		</li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1237359&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1237359</a>] The trailing &lt;BR&gt; added by Gecko at the end of the source
+			is now removed. </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/?group_id=75348&amp;atid=543653&amp;func=detail&amp;aid=1170828">SF
+			BUG-1170828</a>] No more &amp;nbsp; is added to the source when using the &quot;New
+			Page&quot; button. </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1165264&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1165264</a>] A&nbsp;new configuration option has been included to force the
+			editor to ignore empty paragraph values&nbsp;(&lt;p&gt;&amp;nbsp;&lt;/p&gt;), returning
+			empty (&quot;&quot;). </li>
+		<li>No more &amp;nbsp; is added when creating a table or adding columns, rows or cells.
+		</li>
+		<li>The &lt;TD&gt; tags are now included in the FillEmptyBlocks configuration handling.
+		</li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1224829&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1224829</a>] A small bug in the &quot;Find&quot; dialog has been fixed. </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1221307&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1221307</a>] A small bug in the &quot;Image&quot; dialog has been fixed. </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1219981&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1219981</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1155726&amp;group_id=75348&amp;atid=543653">SF
+				BUG-1155726</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1178473&amp;group_id=75348&amp;atid=543653">SF
+					BUG-1178473</a>] It is handling the &lt;FORM&gt;, &lt;TEXTAREA&gt; and &lt;SELECT&gt;
+			tags &quot;name&quot; attribute correctly. Thanks to thc33. </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1205403&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1205403</a>] The checkbox and radio button values are now handled correctly
+			in their dialog windows. Thanks to thc33. </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1236626&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1236626</a>] The toolbar now doesn't need to collapse when unloading the page
+			(IE only). </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1212559&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1212559</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1017231&amp;group_id=75348&amp;atid=543653">SF
+				BUG-1017231</a>] The &quot;Save&quot; button now calls the &quot;onsubmit&quot;
+			event before posting the form. The submit can be cancelled if the onsubmit returns
+			&quot;false&quot;. </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1215823&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1215823</a>] The editor now works correctly on Firefox if it values is set to
+			&quot;&lt;p&gt;&lt;/p&gt;&quot;. </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1217546&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1217546</a>] No error is thrown when &quot;pasting as plain text&quot; and no
+			text is available for pasting (as an image for example). </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1207031&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1207031</a>] [<a target="_blank" href="http://sourceforge.net/tracker/?group_id=75348&amp;atid=543653&amp;func=detail&amp;aid=1223978">SF
+				BUG-1223978</a>] The context menu is now available in the source view. </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/?group_id=75348&amp;atid=543653&amp;func=detail&amp;aid=1213871">SF
+			BUG-1213871</a>] Undo has been added to table creation and table operation commands.
+		</li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1205211&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1205211</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1229941&amp;group_id=75348&amp;atid=543653">SF
+				BUG-1229941</a>] Small bug in the mcpuk file browser&nbsp;have been corrected.</li>
+	</ul>
+	<p>
+		* This version has been partially sponsored by <a target="_blank" href="http://www.infineon.com/">
+			Infineon Technologies AG</a>.<br />
+		** This version has been partially sponsored by <a href="http://www.visualsoft.co.uk">
+			Visualsoft</a> <a href="http://www.visualsoft.co.uk/websolutions.html">Web Solutions</a>.<br />
+		*** This version has been partially sponsored by <a target="_blank" href="http://www.webcrossing.com">
+			Web Crossing, Inc</a>.</p>
+	<h3>
+		Version 2.0&nbsp;FC (Final Candidate)</h3>
+	<p>
+		New Features and Improvements:</p>
+	<ul>
+		<li>A new tab called &quot;<strong>Link</strong>&quot; is available in the<strong> Image
+			Dialog</strong> window. In this way you can insert or modify the image link directly
+			from that dialog.* </li>
+		<li>The new &quot;<strong>Templates</strong>&quot; command is now available. Now the
+			user can select from a list of pre-build HTML and fill the editor with it. Take
+			a look at the &quot;_docs&quot; for more info.** </li>
+		<li>The <a target="_blank" href="http://mcpuk.net/fbxp/">mcpuk's</a> File Browser for
+			PHP has been included in the package. He became the official developer of the File
+			Manager for FCKeditor, so we can expect good news in the future. </li>
+		<li>New configuration options are available to <strong>hide tabs</strong> from the <strong>
+			Image</strong> Dialog&nbsp;and <strong>Link</strong> Dialog windows: LinkDlgHideTarget,
+			LinkDlgHideAdvanced, ImageDlgHideLink and ImageDlgHideAdvanced. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1189442&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1189442</a>] [<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1187164&amp;group_id=75348&amp;atid=543653">SF
+				BUG-1187164</a>] [<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1185905&amp;group_id=75348&amp;atid=543653">SF
+					BUG-1185905</a>] It is now possible to configure the editor to <strong>not convert Greek</strong>
+			or special&nbsp;<strong>Latin </strong>letters to ther specific HTML entities. You
+			can also configure it to not convert any character at all. Take a look at the &quot;ProcessHTMLEntities&quot;,
+			&quot;IncludeLatinEntities&quot; and &quot;IncludeGreekEntities&quot; configuration
+			options. </li>
+		<li>New language files are available:
+			<ul>
+				<li><strong>Basque</strong> (by Ibon Igartua) </li>
+				<li><strong>English (Australia / United Kingdom)</strong> (by Christopher Dawes) </li>
+				<li><strong>Ukrainian</strong> (by Alexander Pervak)</li>
+			</ul>
+		</li>
+		<li>The version and date information have been removed from the files headers to avoid
+			unecessary diffs in source control systems when new versions are released (from
+			now on). </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1159854&amp;group_id=75348&amp;atid=543655">SF
+			Patch-1159854</a>] Ther HTML output rendered by the server side integration files
+			are now XHTML compatible. </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1181823&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1181823</a>] It is now possible to set the desired DOCTYPE to use when edit
+			HTML fragments (not in Full Page mode). </li>
+		<li>There is now an optional way to implement different &quot;mouse over&quot; effects
+			to the buttons when they are &quot;on&quot; of &quot;off&quot;.</li>
+	</ul>
+	<p>
+		Fixed Bugs:</p>
+	<ul>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1162200&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1162200</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1161633&amp;group_id=75348&amp;atid=543653">SF
+				BUG-1161633</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1050293&amp;group_id=75348&amp;atid=543653">SF
+					BUG-1050293</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1058948&amp;group_id=75348&amp;atid=543653">SF
+						BUG-1058948</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1109120&amp;group_id=75348&amp;atid=543653">SF
+							BUG-1109120</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1155408&amp;group_id=75348&amp;atid=543653">SF
+								BUG-1155408</a>] The IE memory leak bug has been solved. The
+			code has been completely reviewed and many memory usage improvements have been done.
+		</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1179645&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1179645</a>] [<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1183252&amp;group_id=75348&amp;atid=543653">SF
+				BUG-1183252</a> ] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1166779&amp;group_id=75348&amp;atid=543653">SF
+					BUG-1181647</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1155627&amp;group_id=75348&amp;atid=543653">SF
+						BUG-1155627</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1155782&amp;group_id=75348&amp;atid=543653">SF
+							BUG-1155782</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1155750&amp;group_id=75348&amp;atid=543653">SF
+								BUG-1155750</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1157166&amp;group_id=75348&amp;atid=543653">SF
+									BUG-1157166</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1157857&amp;group_id=75348&amp;atid=543653">SF
+										BUG-1157857</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1158121&amp;group_id=75348&amp;atid=543653">SF
+											BUG-1158121</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1177153&amp;group_id=75348&amp;atid=543653">SF
+												BUG-1177153</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1175847&amp;group_id=75348&amp;atid=543653">SF
+													BUG-1175847</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1155747&amp;group_id=75348&amp;atid=543653">SF
+														BUG-1155747</a>] There was a loading
+			problem in Gecko browsers in some cases. It has been solved. </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1161147&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1161147</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1157635&amp;group_id=75348&amp;atid=543653">SF
+				BUG-1157635</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1149805&amp;group_id=75348&amp;atid=543653">SF
+					BUG-1149805</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1124600&amp;group_id=75348&amp;atid=543653">SF
+						BUG-1124600</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1117535&amp;group_id=75348&amp;atid=543653">SF
+							BUG-1117535</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1118145&amp;group_id=75348&amp;atid=543653">SF
+								BUG-1118145</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1098113&amp;group_id=75348&amp;atid=543653">SF
+									BUG-1098113</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1092272&amp;group_id=75348&amp;atid=543653">SF
+										BUG-1092272</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1086416&amp;group_id=75348&amp;atid=543653">SF
+											BUG-1086416</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1027952&amp;group_id=75348&amp;atid=543653">SF
+												BUG-1027952</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=978441&amp;group_id=75348&amp;atid=543653">SF
+													BUG-978441</a> ] A custom Undo/Redo system
+			has been implemented for IE. </li>
+		<li>The editor startup execution is now made in the right order (so configurations override
+			works correctly). </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1166779&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1166779</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1166651&amp;group_id=75348&amp;atid=543653">SF
+				BUG-1166651</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1066198&amp;group_id=75348&amp;atid=543653">SF
+					BUG-1066198</a>]&nbsp;[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1090388&amp;group_id=75348&amp;atid=543653">SF
+						BUG-1090388</a> ]&nbsp;No more &quot;illegible&quot; characters in the
+			toolbar when &quot;ClearType&quot; is active. </li>
+		<li>It is now possible to set the &quot;width&quot; style of the BODY tag in the EditorAreaCSS
+			to limit the editing area size. </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1113620&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1113620</a>] In IE, the editor doesn't generate new entries in the browser history
+			anymore. </li>
+		<li>The editor now uses the same method used on version RC2 to load its contents on
+			Gecko. It is now possible to have more than one editor in the page. This change
+			has a negative impact: the BaseHref property is not working. </li>
+		<li>Changes have been made to make the editor work with PHP versions&nbsp;older than&nbsp;2.1.0.
+		</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1190835&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1190835</a>] [<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&amp;atid=543653&amp;aid=1196547&amp;group_id=75348">SF
+				BUG-1196547</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1156863&amp;group_id=75348&amp;atid=543653">SF
+					BUG-1156863</a>] The &quot;Insert Horizontal Line&quot; command is now working
+			correctly. Thanks to Hector Raul Colonia Coral. </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1101861&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1101861</a>] The editor now shows a normal textarea correctly (as expected)
+			on Safari browsers (and all &quot;like Gecko&quot; browsers). Thanks to Bob Paul.
+		</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1182224&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1182224</a>] The PHP connector can now handle file extensions in upper case,&nbsp;like
+			JPG or Gif, correctly. Thanks to Georg Ivancsic. </li>
+		<li>The &quot;sample06.html&quot; is now working correctly with Gecko browsers. </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1156660&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1156660</a>] Some fixes have been applied to the Universal Keyboard. Thanks
+			to Abdul-Aziz Al-Oraij. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1192881&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1192881</a>] [<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1185006&amp;group_id=75348&amp;atid=543653">SF
+				BUG-1185006</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1156068&amp;group_id=75348&amp;atid=543653">SF
+					BUG-1156068</a>] The &quot;Browse Server&quot; button is now working correctly
+			for the Background Image in the &quot;Document Properties&quot; dialog window (full
+			page editing). The active &quot;BaseHref&quot; is also set to the preview window.
+		</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1191704&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1191704</a>] Invalid HTML tags (according to the W3C naming standards for XHTML)
+			are ignored with no errors. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1185911&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1185911</a>] The Greek language file name has been corrected to &quot;el.js&quot;.
+		</li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1181572&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1181572</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1158421&amp;group_id=75348&amp;atid=543653">SF
+				BUG-1158421</a>] The &quot;Print&quot; button is now active on startup. </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1181572&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1165219</a>] No error occours when the user defines just one color to the FontColors
+			on &quot;in page&quot; configurations. </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1162957&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1162957</a>] The small problem with Zope (ZPT)&nbsp;has been solved. </li>
+		<li>Some small RTL / LTR corrections has been done in the interface and the Farsi language
+			has been added to the Universal Keyboard. Thanks to Silver Baghdasarian.</li>
+	</ul>
+	<p>
+		* This version has been partially sponsored by the <a href="http://www.hamilton.edu">
+			Hamilton College</a>.<br />
+		** This version has been partially sponsored by <a target="_blank" href="http://www.infineon.com/">
+			Infineon Technologies AG</a>.</p>
+	<h3>
+		Version 2.0 RC3 (Release Candidate 3)</h3>
+	<p>
+		New Features and Improvements:</p>
+	<ul>
+		<li>The editor now offers native <strong>Perl integration</strong>! Thanks and welcome
+			to Takashi Yamaguchi, our official Perl developer. </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1026584&amp;group_id=75348&amp;atid=543656">SF
+			Feature-1026584</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1112692&amp;group_id=75348&amp;atid=543656">SF
+				Feature-1112692</a>] <strong>Formatting </strong>has been introduced to the
+			<strong>Source View</strong>. The output HTML can also be formatted. You can choose
+			to use spaces or tab for indentation. See the configuration file. </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1031492&amp;group_id=75348&amp;atid=543656">SF
+			Feature-1031492</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1004293&amp;group_id=75348&amp;atid=543656">SF
+				Feature-1004293</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=784281&amp;group_id=75348&amp;atid=543656">SF
+					Feature-784281</a>] It is now possible to edit <strong>full HTML pages</strong>
+			with the editor. Use the &quot;FullPage&quot; configuration setting to activate
+			it. </li>
+		<li>The&nbsp;new toolbar command, &quot;<strong>Document Properties</strong>&quot;&nbsp;is
+			available to edit document header info, title, colors, background, etc... Full page
+			editing must be enabled. </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1151448&amp;group_id=75348&amp;atid=543656">SF
+			Feature-1151448</a>] <strong>Spell Check</strong> is now available. You can use
+			<strong>ieSpell</strong> or <strong>Speller Pages</strong> right from FCKeditor.
+			More info about configuration can be found in the _docs folder. </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1041686&amp;group_id=75348&amp;atid=543656">SF
+			Feature-1041686</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1086386&amp;group_id=75348&amp;atid=543656">SF
+				Feature-1086386</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1124602&amp;group_id=75348&amp;atid=543656">SF
+					Feature-1124602</a>] New &quot;<strong>Insert Anchor</strong>&quot; command
+			has been introduced. (The anchor icon is visible only over&nbsp;IE for now). </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1123816&amp;group_id=75348&amp;atid=543656">SF
+			Feature-1123816</a>] It is now possible to configure the editor to <strong>show &quot;fake&quot;
+				table borders</strong> when the border size is set to zero. (It is working only
+			on IE for now). </li>
+		<li><strong>Numbered</strong> and <strong>Bulleted</strong> lists can now be <strong>
+			configured</strong> . Just right click on then. </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1088608&amp;group_id=75348&amp;atid=543656">SF
+			Feature-1088608</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1144047&amp;group_id=75348&amp;atid=543656">SF
+				Feature-1144047</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1149808&amp;group_id=75348&amp;atid=543656">SF
+					Feature-1149808</a>] A new configuration setting is available, &quot;<strong>BaseHref</strong>
+			&quot;, to set the URL used to resolve relative links. </li>
+		<li>It is now possible to set&nbsp;the <strong>content language direction</strong> .
+			See the &quot;FCKConfig.ContentLangDirection&quot; configurations setting. </li>
+		<li>All <strong>Field Commands</strong> available on version 1.6 have been upgraded
+			and&nbsp;included in this version: <strong>form</strong>, <strong>checkbox</strong>,
+			<strong>radio button</strong>, <strong>text field</strong>, text <strong>area</strong>,
+			<strong>select field</strong>, <strong>button</strong>, <strong>image button</strong>
+			and <strong>hidden field</strong> . </li>
+		<li><strong>Context menu</strong> options (right-click) has been added for: <strong>
+			anchors</strong>, <strong>select field</strong>, <strong>textarea</strong>, <strong>
+				checkbox</strong>, <strong>radio button</strong>, <strong>text field</strong>,
+			<strong>hidden field</strong>, <strong>textarea</strong>, <strong>button</strong>,
+			<strong>image button</strong>, <strong>form</strong>, <strong>bulleted list</strong>
+			and <strong>numbered list</strong> . </li>
+		<li>The &quot;<strong>Universal Keyboard</strong>&quot; has been converted from version
+			1.6 to this one and it's now available. </li>
+		<li>It is now possible to <strong>configure</strong> the items to be shown in the <strong>
+			context menu</strong> . Just use the FCKConfig.ContextMenu option&nbsp;at fckconfig.js.
+		</li>
+		<li>A new configuration (FillEmptyBlocks)&nbsp;is available to force the editor to <strong>
+			automatically insert a &amp;nbsp;</strong> on empty block elements (p, div, pre,
+			h1, etc...) to avoid differences from the editing and the final result. (Actually,
+			the editor automatically &quot;grows&quot; empty elements to make the user able
+			to enter text on it). Attention: the extra &amp;nbsp; will be added when switching
+			from WYSIWYG to Source View, so the user may see an additional space on empty blocks.
+			(XHTML support must be enabled). </li>
+		<li>It is now possible to configure the <strong>toolbar</strong> to &quot;<strong>break</strong>
+			&quot; between two toolbar strips. Just insert a &quot;/&quot; between then. Take
+			a look at fckconfig.js for a sample. </li>
+		<li>New Language files are available:
+			<ul>
+				<li><strong>Brazilian Portuguese</strong> (by Carlos Alberto Tomatis Loth) </li>
+				<li><strong>Bulgarian</strong> (by Miroslav Ivanov) </li>
+				<li><strong>Esperanto</strong> (by Tim Morley) </li>
+				<li><strong>Galician</strong> (by Fernando Riveiro Lopez) </li>
+				<li><strong>Japanese</strong> ( by Takashi Yamaguchi) </li>
+				<li><strong>Persian</strong> (by Hamed Taj-Abadi) </li>
+				<li><strong>Romanian</strong> (by Adrian Nicoara) </li>
+				<li><strong>Slovak</strong> (by Gabriel Kiss) </li>
+				<li><strong>Thai </strong>(by Audy Charin Arsakit) </li>
+				<li><strong>Turkish</strong> (by Reha Bi&ccedil;er) </li>
+				<li>The Chinese Traditional has been set as the default (zn) instead of zn-tw.</li>
+			</ul>
+		</li>
+		<li>Warning: All toolbar image images have been changed. The &quot;button.&quot; prefix
+			has been removed. If you have your custom skin, please rename your files. </li>
+		<li>A new plugin is available in the package: &quot;<strong>Placeholders</strong>&quot;.
+			In this way you can insert non editable tags in your document to be processed on
+			server side (very specific usage). </li>
+		<li>The ASPX files are no longer available in this package. They have been moved to
+			the FCKeditor.Net package. In this way the ASP.Net integration is much better organized.
+		</li>
+		<li>The FCKeditor.Packager program is now part of the main package. It is not anymore&nbsp;distributed
+			separately. </li>
+		<li>The PHP connector now sets the uploaded file permissions (chmod)&nbsp;to 0777. </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1090215&amp;group_id=75348&amp;atid=543655">SF
+			Patch-1090215</a>] It's now possible to give back more info from your custom image
+			browser calling the SetUrl( url [, width] [, height] [, alt] ). Thanks to Ben Noblet.
+		</li>
+		<li>The package files now maintain their original &quot;Last Modified&quot; date, so
+			incremental FTP uploads can be used to update to&nbsp;new versions of the editor
+			(from now on). </li>
+		<li>The &quot;Source&quot; view now forces its contents to be written in &quot;Left
+			to Right&quot; direction even when the editor interface language is running a RTL
+			language (like Arabic, Hebrew or Persian). </li>
+	</ul>
+	<p>
+		Fixed Bugs:</p>
+	<ul>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1124220&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1124220</a>] [<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1119894&amp;group_id=75348&amp;atid=543653">SF
+				BUG-1119894</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1090986&amp;group_id=75348&amp;atid=543653">SF
+					BUG-1090986</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1100408&amp;group_id=75348&amp;atid=543653">SF
+						BUG-1100408</a>] The editor now works correctly when starting with an
+			empty value and switching to the Source mode. </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1119380&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1119380</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1115750&amp;group_id=75348&amp;atid=543653">SF
+				BUG-1115750</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1101808&amp;group_id=75348&amp;atid=543653">SF
+					BUG-1101808</a>] The problem with the scrollbar and the toolbar combos (Style,
+			Font, etc...) over Mac has been fixed. </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1098460&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1098460</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1076544&amp;group_id=75348&amp;atid=543653">SF
+				BUG-1076544</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1077845&amp;group_id=75348&amp;atid=543653">SF
+					BUG-1077845</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1092395&amp;group_id=75348&amp;atid=543653">SF
+						BUG-1092395</a>] A new upload class has been included for the ASP File
+			Manager Connector. It uses the &quot;ADODB.Stream&quot; object. Many thanks to &quot;NetRube&quot;.
+		</li>
+		<li>I small correction has been made to the ColdFusion integration files. Thanks to
+			Hendrik Kramer. </li>
+		<li>There was a very specific problem when the editor was running over a FRAME executed
+			on another domain. </li>
+		<li>The performance problem on Gecko while typing&nbsp;quickly has been solved. </li>
+		<li>The &lt;br type= &quot;_moz&quot;&gt;is not anymore shown on XHTML source. </li>
+		<li>It has been introduced a mechanism to avoid automatic contents duplication on very
+			specific occasions (bad formatted HTML). </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1146407&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1146407</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1145800&amp;group_id=75348&amp;atid=543653">SF
+				BUG-1145800</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1118803&amp;group_id=75348&amp;atid=543653">SF
+					BUG-1118803</a> ] Other&nbsp;issues in the XHTML processor have been solved.
+		</li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1143969&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1143969</a>] The editor now accepts the &quot;accept-charset&quot; attribute
+			in the FORM tag (IE specific bug). </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1122742&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1122742</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1089548&amp;group_id=75348&amp;atid=543653">SF
+				BUG-1089548</a> ] Now, the contents of the SCRIPT and STYLE tags remain untouched.
+		</li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1114748&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1114748</a>] The PHP File Manager Connector now sets the new folders permissions
+			(chmod)&nbsp;to 0777 correctly. </li>
+		<li>The PHP File Manager Connector now has a configuration file (editor/filemanager/browser/default/connectors/php/config.php)
+			to set some security preferences. </li>
+		<li>The&nbsp;ASP File Manager Connector now has a configuration file (editor/filemanager/browser/default/connectors/asp/config.asp)
+			to set some security preferences. </li>
+		<li>A small bug in the toolbar rendering (strips auto position) has been corrected.
+		</li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1093732&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1093732</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1091377&amp;group_id=75348&amp;atid=543653">SF
+				BUG-1091377</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1083044&amp;group_id=75348&amp;atid=543653">SF
+					BUG-1083044</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1096307&amp;group_id=75348&amp;atid=543653">SF
+						BUG-1096307</a>] The configurations are now encoded so a user can use
+			values that has special chars (&amp;=/). </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1103688&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1103688</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1092331&amp;group_id=75348&amp;atid=543653">SF
+				BUG-1092331</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1088220&amp;group_id=75348&amp;atid=543653">SF
+					BUG-1088220</a>] PHP samples now use PHP_SELF to automatically discover
+			the editor's base path. </li>
+		<li>Some small wrapping problems with some labels in the Image and Table dialog windows
+			have been fixed. </li>
+		<li>All .js files are now encoded in UTF-8 format with the BOM (byte order mask) to
+			avoid some errors on specific Linux installations. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1114449&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1114449</a>] The editor packager program has been modified so now it is possible
+			to use the source files to run the editor as described in the documentation. The
+			new packager must be downloaded. </li>
+		<li>A small problem with the editor focus while in&nbsp;source&nbsp;mode has been corrected.
+			Thanks to Eric (ric1607). </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1108167&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1108167</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1085149&amp;group_id=75348&amp;atid=543653">SF
+				BUG-1085149</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1151296&amp;group_id=75348&amp;atid=543653">SF
+					BUG-1151296</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1082433&amp;group_id=75348&amp;atid=543653">SF
+						BUG-1082433</a>] No more IFRAMEs without src attribute. Now it points
+			to a blank page located in the editor's package. In this way we avoid security warnings
+			when using the editor over HTTPS. Thanks to Guillermo Bozovich. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1117779&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1117779</a>] The editor now works well if you have more than one element named
+			&quot;submit&quot;&nbsp;on its form (even if it is not correct to have this situation).
+		</li>
+		<li>The XHTML processor was duplicating the text on some specific situation. It has
+			been fixed. </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1090213&amp;group_id=75348&amp;atid=543655">SF
+			Patch-1090213</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1098929&amp;group_id=75348&amp;atid=543653">SF
+				Patch-1098929</a>] With ASP, the editor now works correctly on pages using &quot;Option
+			Explicit&quot;. Thanks to Ben Noblet. </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1100759&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1100759</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1029125&amp;group_id=75348&amp;atid=543653">SF
+				BUG-1029125</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=966130&amp;group_id=75348&amp;atid=543653">SF
+					BUG-966130</a>] The editor was not working with old IE 5.5 browsers. There
+			was a problem with the XML parser. It has been fixed. </li>
+		<li>The localization engine is now working correctly over IE 5.5 browsers. </li>
+		<li>Some commands where not working well over IE 5.5 (emoticons, image,...). It has
+			been fixed. </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1146441&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1146441</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1149777&amp;group_id=75348&amp;atid=543653">SF
+				BUG-1149777</a>] The editor now uses the TEXTAREA id&nbsp;in the ReplaceTextarea
+			function. If the id is now found, it uses the &quot;name&quot;. The docs have been
+			updated. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1144297&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1144297</a>] Some corrections have been made to the Dutch language file. Thanks
+			to Erwin Dondorp. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1121365&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1121365</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1090102&amp;group_id=75348&amp;atid=543653">SF
+				BUG-1090102</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1152171&amp;group_id=75348&amp;atid=543653">SF
+					BUG-1152171</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1102907&amp;group_id=75348&amp;atid=543653">SF
+						BUG-1102907</a>] There is no problem now to start the editor with values
+			like &quot;&lt;div&gt;&lt;/div&gt;&quot; or &quot;&lt;p&gt;&lt;/p&gt;&quot;. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1114059&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1114059</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1041861&amp;group_id=75348&amp;atid=543653">SF
+				BUG-1041861</a>] The click on the disabled options in the Context Menu has no
+			effects now. </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1152617&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1152617</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1102441&amp;group_id=75348&amp;atid=543653">SF
+				BUG-1102441</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1095312&amp;group_id=75348&amp;atid=543653">SF
+					BUG-1095312</a>] Some problems when setting the editor source to very specific
+			values has been fixed. </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1093514&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1093514</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1089204&amp;group_id=75348&amp;atid=543653">SF
+				BUG-1089204</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1077609&amp;group_id=75348&amp;atid=543653">SF
+					BUG-1077609</a>] The editor now runs correctly if called directly (locally)&nbsp;without
+			a server installation (just opening the HTML sample files). </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1088248&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1088248</a>] The editor now uses a different method to load its contents. In
+			this way the URLs remain untouched. </li>
+		<li>The PHP integration file now detects Internet Explorer 5.5 correctly.</li>
+	</ul>
+	<h3>
+		Version 2.0 RC2 (Release Candidate 2)</h3>
+	<ul>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1042034&amp;group_id=75348&amp;atid=543656">SF
+			Feature-1042034</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1075961&amp;group_id=75348&amp;atid=543656">SF
+				Feature-1075961</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1083200&amp;group_id=75348&amp;atid=543656">SF
+					Feature-1083200</a>] A new dialog window for the <strong>table cell properties</strong>
+			is now available (right-click). </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1042034&amp;group_id=75348&amp;atid=543656">SF
+			Feature-1042034</a>] The new &quot;<strong>Split Cell</strong> &quot;, to split
+			a table cell in two columns, has been introduced (right-click). </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1042034&amp;group_id=75348&amp;atid=543656">SF
+			Feature-1042034</a>] The new &quot;<strong>Merge Cells</strong>&quot;, to merge
+			table cells (in the same row), has been introduced (right-click). </li>
+		<li>The &quot;fake&quot; <strong>TAB key support</strong> (available by default over
+			Gecko browsers is now available over IE too. You can set the number of spaces to
+			add setting the FCKConfig.TabSpaces configuration setting. Set it to 0 (zero) to
+			disable this feature (IE). </li>
+		<li>It now possible to tell IE to send a <strong>&lt;BR&gt;</strong> when the user presses
+			the <strong>Enter key</strong>. Take a look at the FCKConfig.UseBROnCarriageReturn
+			configuration setting. </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1085422&amp;group_id=75348&amp;atid=543656">SF
+			Feature-1085422</a>] <strong>ColdFusion</strong>: The <strong>File Manager connector</strong>
+			is now available! (Thanks to Hendrik Kramer). </li>
+		<li>The editor is now available in <strong>29 languages!</strong> The new language files
+			available are:&nbsp;
+			<ul>
+				<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1067775&amp;group_id=75348&amp;atid=543656">SF
+					Feature-1067775</a>] <strong>Chinese Simplified and Traditional</strong> (Taiwan
+					and Hong Kong) (by NetRube). </li>
+				<li><strong>Czech</strong> (by David Hor&aacute;k). </li>
+				<li><strong>Danish</strong> (by Jesper Michelsen). </li>
+				<li><strong>Dutch</strong> (by Bram Crins). </li>
+				<li><strong>German</strong> (by Maik Unruh). </li>
+				<li><strong>Portuguese</strong> (Portugal) (by Francisco Pereira). </li>
+				<li><strong>Russian</strong> (by Andrey Grebnev). </li>
+				<li><strong>Slovenian</strong> (by Boris Volaric).</li>
+			</ul>
+		</li>
+		<li>Updates to the <strong>French</strong> language files (by Hubert Garrido). </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1085816&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1085816</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1083743&amp;group_id=75348&amp;atid=543653">SF
+				BUG-1083743</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1078783&amp;group_id=75348&amp;atid=543653">SF
+					BUG-1078783</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1077861&amp;group_id=75348&amp;atid=543653">SF
+						BUG-1077861</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1077861&amp;group_id=75348&amp;atid=543653">SF
+							BUG-1037404</a>] Many&nbsp;small bugs&nbsp;in the XHTML processor
+			has been corrected (workarounds to browser specific bugs). These are some things
+			to consider regarding the changes:
+			<ul>
+				<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1083744&amp;group_id=75348&amp;atid=543653">SF
+					BUG-1083744</a>] On Gecko browsers, any element attribute that the name starts with
+					&quot;_moz&quot; will be ignored. </li>
+				<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1060073&amp;group_id=75348&amp;atid=543653">SF
+					BUG-1060073</a>] The &lt;STYLE&gt; and &lt;SCRIPT&gt; elements contents will be
+					handled as is, without CDATA tag surrounding. This may break XHTML validation. In
+					any case the use of external files for scripts and styles is recommended (W3C recommendation).</li>
+			</ul>
+		</li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1088310&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1088310</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1078837&amp;group_id=75348&amp;atid=543653">SF
+				BUG-1078837</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=999792&amp;group_id=75348&amp;atid=543653">SF
+					BUG-999792</a>] URLs now remain untouched when initializing the editor or
+			switching from WYSYWYG to Source and vice versa. </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1082323&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1082323</a>] The&nbsp;problem in the ASP and PHP connectors when handling non
+			&quot;strange&quot; chars in file names has been corrected. </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1085034&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1085034</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1076796&amp;group_id=75348&amp;atid=543653">SF
+				BUG-1076796</a>] Some bugs in the PHP connector have been corrected. </li>
+		<li>A&nbsp;problem with the &quot;Format&quot; command on IE browsers on languages different
+			of English has been solved. The negative side of this correction is that due to
+			a IE bad design it is not possible to update the &quot;Format&quot; combo while
+			moving throw the text (context sensitive). </li>
+		<li>On Gecko browsers, when selecting an image and executing the &quot;New Page&quot;
+			command, the image handles still appear, even if the image is not available anymore
+			(this is a Gecko bug). When clicking in&nbsp;a &quot;phanton&quot; randle, the browser
+			crashes. It doesn't&nbsp;happen (the crash)&nbsp;anymore. </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1082197&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1082197</a>] On ASP, the bug in the browser detection system for Gecko browsers
+			has been corrected. Thanks to Alex Varga. </li>
+		<li>Again on ASP, the browser detection for IE had some problems on servers that use
+			comma for decimal separators on numbers. It has been corrected. Thanks to Agrotic.
+		</li>
+		<li>No error is thrown now when&nbsp;non existing&nbsp;language is configured in the
+			editor. The English language file is loaded in that case. </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1077747&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1077747</a>] The missing images on the Office2003 and Silver skins are now included
+			in the package. </li>
+		<li>On some Gecko browsers, the dialog window was not loading correctly. I couldn't
+			reproduce the problem, but a fix has been applied based on users tests. </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1004078&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1004078</a>] ColdFusion: The &quot;config&quot; structure/hash table with keys
+			and values is in ColdFusion not(!) case sensitive. All keys returned by ColdFusion
+			are in upper case format. Because the FCKeditor configuration keys must be case
+			sensitive, we had to match all structure/hash keys with a list of the correct configuration
+			names in mixed case. This has been added to the fckeditor.cfc and fckeditor.cfm.
+		</li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1075166&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1075166</a>] ColdFusion: The &quot;fallback&quot; variant of the texteditor
+			(&lt;textarea&gt;) has a bug in the fckeditor.cfm. This has been fixed. </li>
+		<li>A typo in the Polish language file has been corrected. Thanks to Pawel Tomicki.
+		</li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1086370&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1086370</a>] A small coding type in the Link dialog window has been corrected.
+		</li>
+	</ul>
+	<h3>
+		Version 2.0 RC1 (Release Candidate 1)</h3>
+	<ul>
+		<li><strong>ASP</strong> support is now available (including the&nbsp;File Manager connector).
+		</li>
+		<li><strong>PHP</strong> support is now available (including the File Manager connector).
+		</li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1063217&amp;group_id=75348&amp;atid=543656">SF
+			Feature-1063217</a>] The new advanced&nbsp;<strong>Style</strong> command is available
+			in the toolbar: full preview, context sensitive, style definitions are loaded from
+			a XML file (see documentation for more instructions). </li>
+		<li>The <strong>Font Format</strong>, <strong>Font Name</strong> and <strong>Font Size</strong>
+			toolbar command now show a <strong>preview</strong> of the available options. </li>
+		<li>The new <strong>Find</strong> and <strong>Replace</strong> features has been introduced.
+		</li>
+		<li>A new <strong>Plug-in</strong> system has been developed. Now it is quite easy to
+			customize the editor to your needs. (Take a look at the html/sample06.html file).
+		</li>
+		<li>The editor now handles <strong>HTML entities</strong> in the right way (XHTML support
+			must be set to &quot;true&quot;). It handles all entities defined in the W3C&nbsp;XHTML
+			DTD file. </li>
+		<li>A new &quot;_docs&quot; folder has been introduced for the <strong>documentation</strong>.
+			It is not yet complete, but I hope the community will help us to fill it better.
+		</li>
+		<li>It is now possible (even if it is not recommended by the W3C) to force the use of
+			simple ampersands (&amp;) on attributes (like the links href) instead of its entity
+			&amp;amp;. Just set FCKConfig.ForceSimpleAmpersand = true in the&nbsp;configuration
+			file. </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1026866&amp;group_id=75348&amp;atid=543656">SF
+			Feature-1026866</a>] The &quot;<strong>EditorAreaCSS</strong>&quot; configuration
+			option has been introduced. In this way you can set the CSS to use in the editor
+			(editable area). </li>
+		<li>The editing area is not anymore clipped if the toolbar is too large and exceeds
+			the window width. </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1064902&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1064902</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1033933&amp;group_id=75348&amp;atid=543653">SF
+				BUG-1033933</a>] The editor <strong>interface</strong> is now completely <strong>localizable</strong>.
+			The version ships with 19 languages including: <b>Arabic</b>, <b>Bosnian</b>, <b>Catalan</b>,
+			<b>English</b>, <b>Spanish</b>, <b>Estonian</b>, <b>Finnish</b>, <b>French</b>,
+			<b>Greek</b>, <b>Hebrew</b>, <b>Croatian</b>, <b>Italian</b>, <b>Korean</b>, <b>Lithuanian</b>,
+			<b>Norwegian</b>, <strong>Polish</strong>, <strong>Serbian (Cyrillic)</strong>,
+			<strong>Serbian (Latin)</strong> and <strong>Swedish</strong>.</li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1027858&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1027858</a>] Firefox 1.0 PR&nbsp;introduced&nbsp;a bug that made the editor
+			stop working on it. A workaround has been developed to fix the problem. </li>
+		<li>There was a positioning problem over IE&nbsp;with the color panel. It has been corrected.
+		</li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1049842&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1049842</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1033832&amp;group_id=75348&amp;atid=543653">SF
+				BUG-1033832</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1028623&amp;group_id=75348&amp;atid=543653">SF
+					BUG-1028623</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1026610&amp;group_id=75348&amp;atid=543653">SF
+						BUG-1026610</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1064498&amp;group_id=75348&amp;atid=543653">SF
+							BUG-1064498</a>] The combo commands in the toolbar were not opening
+			in the right way. It has been fixed. </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1053399&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1053399</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=965318&amp;group_id=75348&amp;atid=543653">SF
+				BUG-965318</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1018296&amp;group_id=75348&amp;atid=543653">SF
+					BUG-1018296</a>] The toolbar buttons icons were not showing on some IE and
+			Firefox/Mac installations. It has been fixed. </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1054621&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1054621</a>] Color pickers are now working with the &quot;office2003&quot; and
+			&quot;silver&quot; skins. </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1054108&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1054108</a>] IE doesn&rsquo;t recognize the &quot;&amp;apos;&quot; entity for
+			apostrophes, so a workaround has been developed to replace it with &quot;&amp;#39;&quot;
+			(its numeric entity representation). </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=983434&amp;group_id=75348&amp;atid=543653">SF
+			BUG-983434</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=983398&amp;group_id=75348&amp;atid=543653">SF
+				BUG-983398</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1028103&amp;group_id=75348&amp;atid=543653">SF
+					BUG-1028103</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1072496&amp;group_id=75348&amp;atid=543653">SF
+						BUG-1072496</a>] The problem with elements with name &quot;submit&quot;
+			inside the editor's form has been solved. </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1018743&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1018743</a>] The problem with Gecko when collapsing the toolbar while in source
+			mode has been fixed. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&amp;atid=543653&amp;aid=1065268&amp;group_id=75348">SF
+			BUG-1065268</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1034354&amp;group_id=75348&amp;atid=543653">SF
+				BUG-1034354</a>] The XHTML processor now doesn&rsquo;t use the minimized tag
+			syntax (like &lt;br/&gt;) for empty elements that are not marked as EMPTY in the
+			W3C XHTML DTD specifications. </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1029654&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1029654</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1046500&amp;group_id=75348&amp;atid=543653">SF
+				BUG-1046500</a>] Due to a bug on Gecko there was a problem when creating links.
+			It has been fixed. </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1065973&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1065973</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=999792&amp;group_id=75348&amp;atid=543653">SF
+				BUG-999792</a>] The editor now handles relative URLs in IE. In effect IE transform
+			all relative URLs to absolute links, pointing to the site the editor is running.
+			So now the editor removes the protocol and host part of the link if it matches the
+			running server. </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1071824&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1071824</a>] The color dialog box bug has been fixed. </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1052856&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1052856</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1046493&amp;group_id=75348&amp;atid=543653">SF
+				BUG-1046493</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1023530&amp;group_id=75348&amp;atid=543653">SF
+					BUG-1023530</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1025978&amp;group_id=75348&amp;atid=543653">SF
+						BUG-1025978</a>] The editor now doesn&rsquo;t throw an error if no selection
+			was made and the create link command is used. </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1036756&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1036756</a>] The XHTML processor has been reviewed. </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1029101&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1029101</a>] The Paste from Word feature is working correctly. </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1034623&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1034623</a>] There is an IE bug when setting the editor value to &quot;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;&quot;.
+			A workaround has been developed. </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1052695&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1052695</a>] There are some rendering differences between Netscape and Mozilla.
+			(Actually that is a bug on both browsers). A workaround has been developed to solve
+			it. </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1073053&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1073053</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1050394&amp;group_id=75348&amp;atid=543653">SF
+				BUG-1050394</a>] The editor doesn&rsquo;t throw errors when hidden. </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1066321&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1066321</a>] Scrollbars should not appear on dialog boxes (at least for the
+			Image and Link ones). </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1046490&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1046490</a>] Dialogs now are forced to show on foreground over Mac. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&amp;atid=543653&amp;aid=1073955&amp;group_id=75348">SF
+			BUG-1073955</a>] A small bug in the image dialog window has been corrected. </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1049534&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1049534</a>] The Resources Browser window is now working well over Gecko browsers.
+		</li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1036675&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1036675</a>] The Resources Browser window now displays the server error on bad
+			installations.</li>
+	</ul>
+	<h3>
+		Version 2.0 Beta 2</h3>
+	<ul>
+		<li>There is a new configuration - &quot;<strong>GeckoUseSPAN</strong>&quot; - that
+			can be used to tell Gecko browsers to use &lt;SPAN style...&gt; or &lt;B&gt;, &lt;I&gt;
+			and &lt;U&gt; for the bold, italic and underline commands. </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1002622&amp;group_id=75348&amp;atid=543656">SF
+			Feature-1002622</a>] New <strong>Text Color</strong> and&nbsp;<strong>Background Color</strong>
+			&nbsp;commands have been added to the editor. </li>
+		<li>On Gecko browsers, a message is shown when,&nbsp;because of&nbsp;security settings,&nbsp;the
+			user&nbsp;is not able to&nbsp;cut, copy or paste data from the clipboard using the
+			toolbar buttons or the context menu. </li>
+		<li>The new &quot;<strong>Paste as Plain Text</strong> &quot; command has been introduced.
+		</li>
+		<li>The new &quot;<strong>Paste from Word</strong> &quot; command has been introduced.
+		</li>
+		<li>A new configuration named&nbsp;&quot;StartupFocus&quot; can be used to tell the
+			editor to get the focus when the page is loaded. </li>
+		<li>All <strong>Java </strong>integration files has been moved to a new separated package.
+		</li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1016781&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1016781</a>] <strong>Table operations</strong> are now working when right click
+			inside a table. The following commands has been introduced: <strong>Insert Row</strong>,
+			<strong>Delete Row</strong>, <strong>Insert Column</strong>, <strong>Delete Column</strong>,
+			<strong>Insert Cell</strong> and <strong>Delete Cells</strong> . </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=965067&amp;group_id=75348&amp;atid=543653">SF
+			BUG-965067</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1010379&amp;group_id=75348&amp;atid=543653">SF
+				BUG-1010379</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=977713&amp;group_id=75348&amp;atid=543653">SF
+					BUG-977713</a>] XHTML support was not working with FireFox, blocking the
+			editor when submitting data. It has been fixed. </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1007547&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1007547</a> ] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=974595&amp;group_id=75348&amp;atid=543653">SF
+				BUG-974595</a> ]&nbsp;The &quot;FCKLang not defined&quot; error when loading
+			has been fixed. </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1021028&amp;group_id=75348&amp;atid=543653">SF
+			BUG-1021028</a>] If the editor doesn't have the focus, some commands were been executed
+			outside the editor in the place where the focus is. It has been fixed. </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=981191&amp;group_id=75348&amp;atid=543653">SF
+			BUG-981191</a>] We are now using &lt;!--- ---&gt; for ColdFusion comments.</li>
+	</ul>
+	<h3>
+		Version 2.0 Beta 1</h3>
+	<p>
+		This is the first beta of the 2.x series. It brings a lot of new and important things.
+		Beta versions will be released until all features available on version 1.x will
+		be introduced in the 2.0.<br />
+		<br />
+		<strong>Note:</strong> As it is a beta, it is not yet completely developed. Future
+		versions can bring new features that can break backward compatibility with this
+		version.
+	</p>
+	<ul>
+		<li>Gecko browsers (<strong>Mozilla</strong> and <strong>Netscape</strong>) support.
+		</li>
+		<li><strong>Quick startup</strong> response times. </li>
+		<li>Complete <strong>XHTML</strong> 1.0 support. </li>
+		<li><strong>Advanced link</strong> dialog box:
+			<ul>
+				<li>Target selection. </li>
+				<li>Popup configurator. </li>
+				<li>E-Mail link. </li>
+				<li>Anchor selector. </li>
+			</ul>
+		</li>
+		<li>New <strong>File Manager</strong>. </li>
+		<li>New dialog box system, with <strong>tabbed dialogs</strong> support. </li>
+		<li>New <strong>context menus</strong> with icons. </li>
+		<li>New toolbar with &quot;expand/collapse&quot; feature. </li>
+		<li><strong>Skins</strong> support. </li>
+		<li><strong>Right to left languages</strong> support. </li>
+	</ul>
+	<h3>
+		Version 1.6.1</h3>
+	<ul>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=862364&amp;group_id=75348&amp;atid=543653">SF
+			BUG-862364</a>] [<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=812733&amp;group_id=75348&amp;atid=543653">SF
+				BUG-812733</a>] There was a problem when the user tried to delete the last row,
+			collumn or cell in a table. It has been corrected.* </li>
+		<li>New Estonian language file. Thanks to Kristjan Kivikangur </li>
+		<li>New Croatian language file. Thanks to Alex Varga. </li>
+		<li>Updated language file for Czech. Thanks to Plachow. </li>
+		<li>Updated language file for Chineze (zh-cn). Thanks to Yanglin. </li>
+		<li>Updated language file for Catalan. Thanks to Jordi Cerdan.</li>
+	</ul>
+	<p>
+		* This version has been partially sponsored by <a href="http://www.genuitec.com/">Genuitec,
+			LLC</a>.</p>
+	<h3>
+		Version 1.6</h3>
+	<ul>
+		<li><strong>Context Menu</strong> support for <strong>form</strong> elements.* </li>
+		<li>New <strong>&quot;Selection Field&quot; command</strong> with advanced dialog box
+			for options definitions.* </li>
+		<li>New <strong>&quot;Image Button&quot; command</strong> is available.* </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=936196&amp;group_id=75348&amp;atid=543656">SF
+			Feature-936196</a>] Many form elements <strong>bugs has been fixed</strong> and
+			<strong>many improvements</strong> has been done.* </li>
+		<li>New <strong>Java Integration Module</strong>. There is a complete Java API and Tag
+			Library implementations. Take a look at the _jsp directory. Thanks to Simone Chiaretta
+			and Hao Jiang. </li>
+		<li>The <strong>Word Spell Checker</strong> can be used. To be able to run it, your
+			browser security configuration &quot;Initialize and script ActiveX controls not
+			marked as safe&quot; must be set to &quot;Enable&quot; or &quot;Prompt&quot;. And
+			easier and more secure way to do that is to add your site in the list of trusted
+			sites. IeSpell can still be used. Take a look at the fck_config.js file for some
+			configuration options. Thanks to EdwardRF. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=748807&amp;group_id=75348&amp;atid=543656">SF
+			Feature-748807</a>] [<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=801030&amp;group_id=75348&amp;atid=543656">SF
+				Feature-801030</a>] [<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=880684&amp;group_id=75348&amp;atid=543656">SF
+					Feature-880684</a>] New &quot;<strong>Anchor&quot; command</strong>, including
+			context menu support. Thanks to G.Meijer. </li>
+		<li>Special characters are replaced with their decimal HTML entities when the XHMTL
+			support is enabled (only over IE5.5+). </li>
+		<li>New <strong>Office 2003 Style</strong> toolbar icons are available. Just uncomment
+			the config.ToolbarImagesPath key in the fck_config.js file. Thanks to Abdul-Aziz
+			A. Al-Oraij. <strong>Attention</strong>: the default toolbar items have been moved
+			to the &quot;images/toolbar/default&quot; directory. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=934566&amp;group_id=75348&amp;atid=543655">SF
+			Patch-934566</a>] <strong>Double click support</strong> for Images, Tables, Links,
+			Anchors and all Form elements. Thanks to Top Man. </li>
+		<li>New <strong>&quot;New Page&quot; command</strong> to start a typing from scratch.
+			Thanks to Abdul-Aziz A. Al-Oraij. </li>
+		<li>New <strong>&quot;Replace&quot; command</strong>. Thanks to Abdul-Aziz A. Al-Oraij.
+		</li>
+		<li>New <strong>&quot;Advanced Font Style&quot; command</strong>. Thanks to Abdul-Aziz
+			A. Al-Oraij. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=738193&amp;group_id=75348&amp;atid=543656">SF
+			Feature-738193</a>] New <strong>&quot;Save&quot; command</strong>. It can be used
+			to simulate a save action, but in fact it just submits the form where the editor
+			is placed in. Thanks to Abdul-Aziz A. Al-Oraij. </li>
+		<li>New <strong>&quot;Universal Keyboard&quot; command</strong>. This 22 charsets are
+			available: Arabic, Belarusian, Bulgarian, Croatian, Czech, Danish, Finnish, French,
+			Greek, Hebrew, Hungarian, Diacritical, Macedonian, Norwegian, Polish, Russian, Serbian
+			(Cyrillic), Serbian (Latin), Slovak, Spanish, Ukrainian and Vietnamese. Includes
+			a keystroke listener to type Arabic on none Arabic OS or machine. Thanks to Abdul-Aziz
+			A. Al-Oraij. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=935358&amp;group_id=75348&amp;atid=543655">SF
+			Patch-935358</a>] New <strong>&quot;Preview&quot; command</strong>. Context menu
+			option is included and can be deactivated throw the config.ShowPreviewContextMenu
+			configuration. Thanks to Ben Ramsey. </li>
+		<li>New &quot;<strong>Table Auto Format</strong>&quot; context menu command. Hack a
+			little the fck_config.js and the fck_editorarea.css files. Thanks to Alexandros
+			Lezos. </li>
+		<li>New &quot;<strong>Bulleted List Properties</strong> &quot; context menu to define
+			its type and class. Thanks to Alexandros Lezos. </li>
+		<li>The <strong>image dialog</strong> box has been a <strong>redesigned</strong> . Thanks
+			to Mark Fierling. </li>
+		<li>Images now always have the <strong>&quot;alt&quot; attribute</strong> set, even
+			when it's value is empty. Thanks to Andreas Barnet. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=942250&amp;group_id=75348&amp;atid=543655">SF
+			Patch-942250</a>] You can set on fck_config.js to <strong>automatically clean Word</strong>
+			pasting operations without a user confirmation. </li>
+		<li>Forms element dialogs and other localization pending labels has been updated. </li>
+		<li>A new <strong>Lithuanian</strong> language file is available. Thanks to Tauras Paliulis.
+		</li>
+		<li>A new <strong>Hebrew</strong> language file is available. Thanks to Ophir Radnitz.
+		</li>
+		<li>A new <strong>Serbian</strong> language file is available. Thanks to Zoran Subic.
+		</li>
+		<li><strong>Danish</strong> language file updates. Thanks to Flemming Jensen. </li>
+		<li><strong>Catalan</strong> language file updates. Thanks to Jordi Cerdan. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=936514&amp;group_id=75348&amp;atid=543655">SF
+			Patch-936514</a>] [<a href="https://sourceforge.net/tracker/?func=detail&amp;atid=543653&amp;aid=918716&amp;group_id=75348">SF
+				BUG-918716</a>] [<a href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=931037&amp;group_id=75348&amp;atid=543653">SF
+					BUG-931037</a>] [<a href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=865864&amp;group_id=75348&amp;atid=543653">SF
+						BUG-865864</a>] [<a href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=915410&amp;group_id=75348&amp;atid=543653">SF
+							BUG-915410</a>] [<a href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=918716&amp;group_id=75348&amp;atid=543653">SF
+								BUG-918716</a>] Some <strong>languages files</strong> were not
+			saved on <strong>UTF-8</strong> format causing some javascript errors on loading
+			the editor or making &quot;undefined&quot; to show on editor labels. This problem
+			was solved. </li>
+		<li>Updates on the testsubmit.php file. Thanks to Geat and Gabriel Schillaci </li>
+		<li>[<a href="https://sourceforge.net/tracker/?func=detail&amp;atid=543653&amp;aid=924620&amp;group_id=75348">SF
+			BUG-924620</a>] There was a problem when setting a name to an editor instance when
+			the name is used by another tag. For example when using &quot;description&quot;
+			as the name in a page with the &lt;META name=&quot;description&quot;&gt; tag. </li>
+		<li>[<a href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=935018&amp;group_id=75348&amp;atid=543653">SF
+			BUG-935018</a>] The &quot;buletted&quot; typo has been corrected. </li>
+		<li>[<a href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=902122&amp;group_id=75348&amp;atid=543653">SF
+			BUG-902122</a>] Wrong css and js file references have been corrected. </li>
+		<li>[<a href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=918942&amp;group_id=75348&amp;atid=543653">SF
+			BUG-918942</a>] All dialog boxes now accept Enter and Escape keys as Ok and Cancel
+			buttons.</li>
+	</ul>
+	<p>
+		* This version has been partially sponsored by <a href="http://www.genuitec.com/">Genuitec,
+			LLC</a>.</p>
+	<h3>
+		Version 1.5</h3>
+	<ul>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&amp;atid=543656&amp;aid=913777&amp;group_id=75348">SF
+			Feature-913777</a>] <strong>New Form Commands</strong> are now available! Special
+			thanks to G.Meijer. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=861149&amp;group_id=75348&amp;atid=543656">SF
+			Feature-861149</a>] <strong>Print Command</strong> is now available! </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&amp;atid=543653&amp;aid=743546&amp;group_id=75348">SF
+			BUG-743546</a>] The <strong>XHTML content duplication problem </strong>has been
+			<strong>solved</strong> . Thanks to Paul Hutchison. </li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&amp;atid=543653&amp;aid=875853&amp;group_id=75348">SF
+			BUG-875853</a>] The <strong>image dialog box</strong> now gives precedence for width
+			and height values set as styles. In this way a user can change the size of the image
+			directly inside the editor and the changes will be reflected in the dialog box.
+		</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&amp;atid=543656&amp;aid=913777&amp;group_id=75348">SF
+			Feature-788368</a>] The sample <strong>file upload </strong>manager for ASPX now
+			uses <strong>guids</strong> for the file name generation. In this way a support
+			XML file is not needed anymore. </li>
+		<li>It's possible now to <strong>programmatically change the Base Path</strong> of the
+			editor if it's installed in a directory different of &quot;/FCKeditor/&quot;. Something
+			like this:<br />
+			oFCKeditor.BasePath = '/FCKeditor/' ;<br />
+			Take a look at the _test directory for samples. </li>
+		<li>There was a little bug in the TAB feature that moved the insertion point if there
+			were any object (images, tables) in the content. It has been fixed. </li>
+		<li>The problem with <strong>accented and international characters</strong> on the PHP
+			test page was solved. </li>
+		<li>A new <strong>Chinese (Taiwan)</strong> language file is available. Thanks to Nil.
+		</li>
+		<li>A new <strong>Slovenian</strong> language file is available. Thanks to Pavel Rotar.
+		</li>
+		<li>A new <strong>Catalan</strong> language file is available. Thanks to Jordi Cerdan.
+		</li>
+		<li>A new <strong>Arabic</strong> language file is available. Thanks to Abdul-Aziz A.
+			Al-Oraij. </li>
+		<li>Small corrections on the <strong>Norwegian</strong> language file. </li>
+		<li>A Java version for the test results (testsubmit.jsp) is now available. Thanks to
+			Pritpal Dhaliwal. </li>
+		<li>When using JavaScript to create a editor instance it's possible now to easily get
+			the editor's value calling oFCKeditor.GetValue() (eg.). Better JavaScript API interfaces
+			will be available on version 2.0. </li>
+		<li>If <strong>XHTML</strong> is enabled the editor cleans the HTML before showing it
+			on the Source View, so the exact result can be viewed by the user. This option can
+			be activated setting config.EnableSourceXHTML = true in the fck_config.js file.
+		</li>
+		<li>The <strong>JS integration object</strong> now escapes all configuration settings,
+			in this way a user can use <strong>reserved chars</strong> on it. For example:
+			<br />
+			oFCKeditor.Config[&quot;ImageBrowserURL&quot;] = '/imgs/browse.asp?filter=abc*.jpg&amp;userid=1';
+		</li>
+		<li>A minimal browse server sample is now available in ASP. Thanks to Andreas Barnet.
+		</li>
+	</ul>
+	<h3>
+		Version 1.4</h3>
+	<ul>
+		<li><strong>ATTENTION: For PHP users</strong>: The editor was changed and now uses <strong>
+			htmlspecialchars</strong> instead of <strong>htmlentities</strong> when handling
+			the initial value. It should works well, but please make some tests before upgrading
+			definitively. If there is any problem just uncomment the line in the fckeditor.php
+			file (and send me a message!). </li>
+		<li>The editor is now integrated with <strong>ieSpell</strong> (<a href="http://www.iespell.com">http://www.iespell.com</a>)
+			for <strong>Spell Checking</strong>. You can configure the download URL in then
+			fck_config.js file. Thanks to Sanjay Sharma. (ieSpell is free for personal use but
+			must be paid for commercial use) </li>
+		<li><strong>Table</strong> and <strong>table cell</strong> dialogs has been changed.
+			Now you can <strong>select the class</strong> you want to be applied. Thanks to
+			Alexander Lezos. </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=865378&amp;group_id=75348&amp;atid=543656">SF
+			Feature-865378</a>]A new <strong>upload support is available for ASP</strong>. It
+			uses the /UserImages/ folder in the root of the web site as the files container
+			and a counter controlled by the upload.cnt file. Both must have write permissions
+			set to the IUSR_xxx user. Thanks to Trax and Juanjo. </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=798128&amp;group_id=75348&amp;atid=543655">SF
+			Patch-798128</a>] The user (programmer) can now define a <strong>custom separator</strong>
+			for the list items of a combo in the toolbar. Thanks to Wulff D. Heiss. </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=741963&amp;group_id=75348&amp;atid=543656">SF
+			Feature-741963</a>][<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=878941&amp;group_id=75348&amp;atid=543656">SF
+				Feature-878941</a>][<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=869389&amp;group_id=75348&amp;atid=543655">SF
+					Patch-869389</a>] A minimal support for a &ldquo;fake&rdquo; <strong>TAB is now available</strong>,
+			even if HTML has no support for TAB. Now when the user presses the TAB key a configurable
+			number of spaces (&amp;nbsp;) is added. Take a look at config.TabSpaces on the fck_config.js
+			file. No action is performed if it is set to zero. The default value is 4. Thanks
+			to Phil Hassey. </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=782779&amp;group_id=75348&amp;atid=543653">SF
+			BUG-782779</a>][<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=790939&amp;group_id=75348&amp;atid=543653">SF
+				BUG-790939</a>] The problem with big images has been corrected. Thanks to Raver.
+		</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/?func=detail&amp;atid=543653&amp;aid=853374&amp;group_id=75348">SF
+			BUG-862975</a>] Now the editor does nothing if no image is selected in the image
+			dialog box and the OK button is hit. </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=851609&amp;group_id=75348&amp;atid=543653">SF
+			BUG-851609</a>] The problem with ASP and null values has been solved. </li>
+		<li><strong>Norwegean</strong> language pack. Thanks to Martin Kronstad. </li>
+		<li><strong>Hungarian</strong> language pack. Thanks to Bal&aacute;zs Szab&oacute;.
+		</li>
+		<li><strong>Bosnian</strong> language pack. Thanks to Trax. </li>
+		<li><strong>Japanese</strong> language pack. Thanks to Kato Yuichiro. </li>
+		<li>Updates on the <strong>Polish</strong> language pack. Thanks to Norbert Neubauer.
+		</li>
+		<li>The <strong>Chinese (Taiwan)</strong> (zh-tw) has been removed from the package
+			because it's corrupt. I'm sorry. I hope someone could send me a good version soon.
+		</li>
+	</ul>
+	<h3>
+		Version 1.3.1</h3>
+	<ul>
+		<li>It's now possible to configure the editor the insert a <strong>&lt;BR&gt; tag instead
+			of &lt;P&gt;</strong> when the user presses the <strong>&lt;Enter&gt;</strong> key.
+			Take a look at the fck_config.js configuration file for the &quot;<strong>UseBROnCarriageReturn</strong>&quot;
+			key. This option is disabled by default. </li>
+		<li><strong>Icelandic</strong> language pack. Thanks to Andri &Oacute;skarsson. </li>
+		<li>[<a href="https://sourceforge.net/tracker/?func=detail&amp;atid=543653&amp;aid=853374&amp;group_id=75348">SF
+			BUG-853374</a>] On IE 5.0 there was a little error introduced with version 1.3 on
+			initialization. It was corrected. </li>
+		<li>[<a href="https://sourceforge.net/tracker/?func=detail&amp;atid=543653&amp;aid=853372&amp;group_id=75348">SF
+			BUG-853372</a>] On IE 5.0 there was a little error introduced with version 1.3 when
+			setting the focus in the editor. It was corrected. </li>
+		<li>Minor errors on the language file for <strong>english</strong> has been corrected.
+			Thanks to Anders Madsen. </li>
+		<li>Minor errors on the language file for <strong>danish</strong> has been corrected.
+			Thanks to Martin Johansen. </li>
+	</ul>
+	<h3>
+		Version 1.3</h3>
+	<ul>
+		<li>Language support for <strong>Danish, Polish, Simple Chinese, Slovak, Swedish and
+			Turkish</strong>. </li>
+		<li>Language updates for <strong>Romanian</strong>. </li>
+		<li>It's now possible to <strong>override</strong> any of the <strong>editor's configurations</strong>
+			(for now it's implemented just for JavaScript, ASPX and HTC modules). See _test/test.html
+			for a sample. I'm now waiting for the Community for the ASP, CFM and PHP versions.
+		</li>
+		<li>A new method is available for <strong>PHP</strong> users. It's called <strong>ReturnFCKeditor</strong>.
+			It works exactly like CreateFCKeditor, but it <strong>returns a string with the HTML</strong>
+			for the editor instead of output it (echo). This feature is useful for people who
+			are working with Smarty Templates or something like that. Thanks to Timothy J. Finucane.
+		</li>
+		<li>Many people have had problems with <strong>international characters</strong> over
+			<strong>PHP</strong>. I had also the same problem. PHP have strange problems with
+			character encoding. The code hasn't been changed but just saved again with Western
+			European encoding. <strong>Now it works well</strong> in my system.<br />
+			Take a look also at the &quot;default_charset&quot; configuration option at the
+			php.ini file. It doesn't seem to be an editor's problem but a PHP issue. </li>
+		<li>The &quot;<strong>testsubmit.php</strong>&quot; file now strips the &quot;<strong>Magic
+			Quotes</strong> &quot; that are automatically added by PHP on form posts. </li>
+		<li>A <strong>new language</strong> integration module is available for <strong>ASP/Jscript</strong>.
+			Thanks to Dimiter Naydenov. </li>
+		<li><strong>New configuration</strong> options are available to <strong>customize the
+			Target</strong> combo box in the <strong>Insert/Modify Link</strong> dialog box.
+			Now you can hide it, or set which options are available in the combo box. Take a
+			look at the fck_config.js file. </li>
+		<li>The <strong>Text as Plain Text</strong> toolbar <strong>icon</strong> has been changed
+			<strong>to avoid confusion</strong> with the Normal Paste or. Thanks to Kaupo Kalda.
+		</li>
+		<li>The file <strong>dhtmled.cab has been removed</strong> from the package. It's not
+			needed to the editor to work and caused some confusion for a few users. </li>
+		<li>The <strong>editor's content</strong> now <strong>doesn't loose the focus</strong>
+			when the user clicks with the mouse in a toolbar button. </li>
+		<li>On <strong>drag-and-drop</strong> operations the data to be inserted in the editor
+			is now <strong>converted to plain text</strong> when the &quot;<strong>ForcePasteAsPlainText</strong>&quot;
+			configuration is set to <strong>true</strong>. </li>
+		<li>The <strong>image browser</strong> sample in PHP now <strong>sorts the files</strong>
+			by name. Thanks to Sergey Lupashko. </li>
+		<li>Two <strong>new configuration</strong> options are available to <strong>turn on/off
+			by default</strong> the &quot;<strong>Show Borders</strong>&quot; and &quot;<strong>Show
+				Details</strong>&quot; commands. </li>
+		<li>Some <strong>characters have been removed</strong> from the &quot;<strong>Insert
+			Special Chars</strong>&quot; dialog box because they were causing encoding problems
+			in some languages. Thanks to Abomb Hua. </li>
+		<li><strong>JSP</strong> versions of the <strong>image and file upload and browsing</strong>
+			features. Thanks to Simone Chiaretta.</li>
+	</ul>
+	<h3>
+		Version 1.2.4</h3>
+	<ul>
+		<li>Language support for <strong>Spanish, Finnish, Romanian and Korean</strong>. </li>
+		<li>Language updates for <strong>German</strong>. </li>
+		<li>New <strong>Zoom</strong> toolbar option. (<a href="https://sourceforge.net/forum/forum.php?thread_id=904116&amp;forum_id=257180">Thanks
+			to &quot;mtn_roadie&quot;</a>)</li>
+	</ul>
+	<h3>
+		Version 1.2.2</h3>
+	<ul>
+		<li>Language support for <strong>French</strong>. </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=782779&amp;group_id=75348&amp;atid=543653">SF
+			BUG-782779</a>] Version 1.2 introduced a bug on the image dialog window: when changing
+			the image, no update was done. This bug is now fixed. </li>
+	</ul>
+	<h3>
+		Version 1.2</h3>
+	<ul>
+		<li>Enhancements to the <strong>Word cleaning</strong> feature (Thanks to Karl von Randow).
+		</li>
+		<li>The <strong>Table dialog box</strong> now handles the Style width and height set
+			in the table (Thanks to Roberto Arruda). There where many problems on prior version
+			when people changed manually the table's size, dragging the size handles, and then
+			it was not possible to set a new size using the table dialog box. </li>
+		<li>For the <strong>Image dialog box:</strong>
+			<ul>
+				<li>No image is shown in the preview pane if no image has been set. </li>
+				<li>If no HSpace is set in the image a &quot;-1&quot; value was shown in the dialog
+					box. Now, nothing is shown if the value is negative. </li>
+			</ul>
+		</li>
+		<li>[<a target="_blank" href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=739630&amp;group_id=75348&amp;atid=543653">SF
+			BUG-739630</a>] Image with link lost the link when changing its properties. The
+			problem is solved. </li>
+		<li>Due to some problems in the XHTML cleaning (content duplication when the source
+			HTML is dirty and malformed), the <strong>XHTML support is turned off by default</strong>
+			from this version. You can still change this behavior and turn it on in the configuration
+			file. </li>
+		<li>Some little updates on the <strong>English </strong>language file. </li>
+		<li>A few addition of missing entries on all languages files (translations for these
+			changes are pending). </li>
+		<li>Language files has been added for the following languages:
+			<ul>
+				<li><strong>Brazilian Portuguese</strong> (pt-br) </li>
+				<li><strong>Czech</strong> (cz) </li>
+				<li><strong>Dutch</strong> (nl) </li>
+				<li><strong>Russian</strong> (ru) </li>
+				<li><strong>Chinese (Taiwan)</strong> (zh-tw) </li>
+				<li><strong>Greek</strong> (gr) </li>
+				<li><strong>German</strong> (de)</li>
+			</ul>
+		</li>
+	</ul>
+	<h3>
+		Version 1.1</h3>
+	<ul>
+		<li>The &quot;<strong>Multi Language</strong>&quot; system is now available. This version
+			ships with English and Italian versions completed. Other languages will be available
+			soon. The editor automatically detects the client language and sets all labels,
+			tooltips and dialog boxes to it, if available. The auto detection and the default
+			language can be set in the <strong>fck_config.file</strong>. </li>
+		<li>Two files can now be created to isolate customizations code from the original source
+			code of the editor: <strong>fckeditor.config.js</strong> and <strong>fckeditor.custom.js</strong>.
+			Create these files in the root folder of your web site, if needed. The first one
+			can be used to add or override configurations set on fck_config.js. The second one
+			is used for custom actions and behaviors. </li>
+		<li>A problem with relative links and images like &quot;/test/test.doc&quot; has been
+			solved. In prior versions, only with XHTML support enabled, the URL was changed
+			to something like &quot;http://www.mysite.xxx/test/test.doc&quot; (The domain was
+			automatically added). Now the XHTML cleaning procedure gets the URLs exactly how
+			they are defined in the editor&rsquo;s HTML. </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=742168&amp;group_id=75348&amp;atid=543653">SF
+			BUG-742168</a>] Mouse drag and drop from toolbar buttons has been disabled. </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=768210&amp;group_id=75348&amp;atid=543653">SF
+			BUG-768210</a>] HTML entities, like <strong>&amp;lt;</strong>, were not load correctly.
+			The problem is solved. </li>
+		<li>[<a target="_blank" href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=748812&amp;group_id=75348&amp;atid=543653">SF
+			BUG-748812</a>] The link dialog window doesn't open when the link button is grayed.
+		</li>
+	</ul>
+	<h3>
+		Version 1.0</h3>
+	<ul>
+		<li>Three new options are available in the configuration file to set what file types
+			are allowed / denied to be uploaded from the &quot;Insert Link&quot; and &quot;Insert
+			Image&quot; dialog boxes. </li>
+		<li>Upload options, for links and images, are automatically hidden on IE 5.0 browsers
+			(it's not compatible). </li>
+		<li>[SF BUG-734894] Fixed a problem on XHTML cleaning: the value on INPUT fields were
+			lost. </li>
+		<li>[SF BUG-713797] Fixed some image dialog errors when trying to set image properties
+			when no image is available. </li>
+		<li>[SF BUG-736414] Developed a workaround for a DHTML control bug when loading in the
+			editor some HTML started with &lt;p&gt;&lt;hr&gt;&lt;/p&gt;. </li>
+		<li>[SF BUG-737143] Paste from Word cleaning changed to solve some IE 5.0 errors. This
+			feature is still not available over IE 5.0. </li>
+		<li>[SF BUG-737233] CSS mappings are now OK on the PHP image browser module. </li>
+		<li>[SF BUG-737495] The image preview in the image dialog box is now working correctly.
+		</li>
+		<li>[SF BUG-737532] The editor automatically switches to WYSIWYG mode when the form
+			is posted. </li>
+		<li>[SF BUG-739571] The editor is now working well over Opera (as for Netscape, a TEXTAREA
+			is shown). </li>
+	</ul>
+	<h3>
+		Version 1.0 Final Candidate</h3>
+	<ul>
+		<li>A new dialog box for the &quot;Link&quot; command is available. Now you can upload
+			and browse the server exactly like the image dialog box. It's also possible to define
+			the link title and target window (_blank, _self, _parent and _top). As with the
+			image dialog box, a sample (and simple) file server browser is available. </li>
+		<li>A new configuration option is available to force every paste action to be handled
+			as plain text. See &quot;config.ForcePasteAsPlainText&quot; in fck_config.js. </li>
+		<li>A new Toolbar button is available: &quot;Paste from Word&quot;. It automatically
+			cleans the clipboard content before pasting (removesWord styles, classes, xml stuff,
+			etc...). This command is available for IE 5.5 and more. For IE 5.0 users, a message
+			is displayed advising that the text will not be cleaned before pasting. </li>
+		<li>The editor automatically detects Word clipboard data on pasting operations and asks
+			the user to clean it before pasting. This option is turned on by default but it
+			can be configured. See &quot;config.AutoDetectPasteFromWord&quot; in fck_config.js.
+		</li>
+		<li>Table properties are now available in cells' right click context menu. </li>
+		<li>It's now possible to edit cells advanced properties from it's right click context
+			menu. </li>
+	</ul>
+	<h3>
+		Version 1.0 Release Candidate 1 (RC1)</h3>
+	<ul>
+		<li>Some performance improvements. </li>
+		<li>The file dhtmled.cab has been added to the package for clients ho needs to install
+			the Microsoft DHTML Editor component. </li>
+		<li>[SF BUG-713952] The format command options are localized, so it depends on the IE
+			language to work. Until version 0.9.5 it was working only over English IE browsers.
+			Now the options are load dynamically on the client using the client's language.
+		</li>
+		<li>[SF BUG-712103] The style command is localized, so it depends on the IE language
+			to work. Until version 0.9.5 it was working only over English IE browsers. Now it
+			configures itself using the client's language. </li>
+		<li>[SF BUG-726137] On version 0.9.5, some commands (special chars, image, emoticons,
+			...) remove the next available character before inserting the required content even
+			if no selection was made in the editor. Now the editor replaces only the selected
+			content (if available). </li>
+	</ul>
+	<h3>
+		Version 0.9.5 beta</h3>
+	<ul>
+		<li>XHTML support is now available! It can be enabled/disabled in the fck_config.js
+			file. </li>
+		<li>&quot;Show Table Borders&quot; option: show borders for tables with borders size
+			set to zero. </li>
+		<li>&quot;Show Details&quot; option: show hidden elements (comments, scripts, paragraphs,
+			line breaks) </li>
+		<li>IE behavior integration module. Thanks to Daniel Shryock. </li>
+		<li>&quot;Find&quot; option: to find text in the document. </li>
+		<li>More performance enhancements. </li>
+		<li>New testsubmit.php file. Thansk to Jim Michaels. </li>
+		<li>Two initial PHP upload manager implementations (not working yet). Thanks to Frederic
+			Tyndiuk and Christian Liljedahl. </li>
+		<li>Initial PHP image browser implementation (not working yet). Thanks to Frederic Tyndiuk.
+		</li>
+		<li>Initial CFM upload manager implementation. Thanks to John Watson. </li>
+	</ul>
+	<h3>
+		Version 0.9.4 beta</h3>
+	<ul>
+		<li>ColdFusion module integration is now available! Thanks to John Watson. </li>
+		<li>&quot;Insert Smiley&quot; toolbar option! Thanks to Fredox. Take a look at fck_config.js
+			for configuration options. </li>
+		<li>&quot;Paste as plain text&quot; toolbar option! </li>
+		<li>Right click support for links (edit / remove). </li>
+		<li>Buttons now are shown in gray when disabled. </li>
+		<li>Buttons are shown just when the image is downloaded (no more &quot;red x&quot; while
+			waiting for it). </li>
+		<li>The toolbar background color can be set with a CSS style (see fck_editor.css). </li>
+		<li>Toolbar images have been reviewed:
+			<ul>
+				<li>Now they are transparent. </li>
+				<li>No more over...gif for every button (so the editor loads quicker). </li>
+				<li>Buttons states are controlled with CSS styles. (see fck_editor.css).</li>
+			</ul>
+		</li>
+		<li>Internet Explorer 5.0 compatibility, except for the image uploading popup. </li>
+		<li>Optimizations when loading the editor. </li>
+		<li>[SF BUG-709544] - Toolbar buttons wait for the images to be downloaded to start
+			watching and responding the user actions (turn buttons on/off when the user changes
+			position inside the editor). </li>
+		<li>JavaScript integration is now Object Oriented. CreateFCKeditor function is not available
+			anymore. Take a look in test.html. </li>
+		<li>Two new configuration options, ImageBrowser and ImageUpload, are available to turn
+			on and off the image upload and image browsing options in the Image dialog box.
+			This options can be hidden for a specific editor instance throw specific URL parameter
+			in the editor&rsquo;s IFRAME (upload=true/false&amp;browse=true/false). All specific
+			language integration modules handle this option. For sample see the _test directory.
+		</li>
+	</ul>
+</body>
+</html>
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckcontextmenu.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckcontextmenu.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckcontextmenu.js	(revision 1280)
@@ -0,0 +1,209 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKContextMenu Class: renders an control a context menu.
+ */
+
+var FCKContextMenu = function( parentWindow, langDir )
+{
+	this.CtrlDisable = false ;
+
+	var oPanel = this._Panel = new FCKPanel( parentWindow ) ;
+	oPanel.AppendStyleSheet( FCKConfig.SkinPath + 'fck_editor.css' ) ;
+	oPanel.IsContextMenu = true ;
+
+	// The FCKTools.DisableSelection doesn't seems to work to avoid dragging of the icons in Mozilla
+	// so we stop the start of the dragging
+	if ( FCKBrowserInfo.IsGecko )
+		oPanel.Document.addEventListener( 'draggesture', function(e) {e.preventDefault(); return false;}, true ) ;
+
+	var oMenuBlock = this._MenuBlock = new FCKMenuBlock() ;
+	oMenuBlock.Panel = oPanel ;
+	oMenuBlock.OnClick = FCKTools.CreateEventListener( FCKContextMenu_MenuBlock_OnClick, this ) ;
+
+	this._Redraw = true ;
+}
+
+
+FCKContextMenu.prototype.SetMouseClickWindow = function( mouseClickWindow )
+{
+	if ( !FCKBrowserInfo.IsIE )
+	{
+		this._Document = mouseClickWindow.document ;
+		if ( FCKBrowserInfo.IsOpera && !( 'oncontextmenu' in document.createElement('foo') ) )
+		{
+			this._Document.addEventListener( 'mousedown', FCKContextMenu_Document_OnMouseDown, false ) ;
+			this._Document.addEventListener( 'mouseup', FCKContextMenu_Document_OnMouseUp, false ) ;
+		}
+		this._Document.addEventListener( 'contextmenu', FCKContextMenu_Document_OnContextMenu, false ) ;
+	}
+}
+
+FCKContextMenu.prototype.AddItem = function( name, label, iconPathOrStripInfoArrayOrIndex, isDisabled )
+{
+	var oItem = this._MenuBlock.AddItem( name, label, iconPathOrStripInfoArrayOrIndex, isDisabled) ;
+	this._Redraw = true ;
+	return oItem ;
+}
+
+FCKContextMenu.prototype.AddSeparator = function()
+{
+	this._MenuBlock.AddSeparator() ;
+	this._Redraw = true ;
+}
+
+FCKContextMenu.prototype.RemoveAllItems = function()
+{
+	this._MenuBlock.RemoveAllItems() ;
+	this._Redraw = true ;
+}
+
+FCKContextMenu.prototype.AttachToElement = function( element )
+{
+	if ( FCKBrowserInfo.IsIE )
+		FCKTools.AddEventListenerEx( element, 'contextmenu', FCKContextMenu_AttachedElement_OnContextMenu, this ) ;
+	else
+		element._FCKContextMenu = this ;
+}
+
+function FCKContextMenu_Document_OnContextMenu( e )
+{
+	var el = e.target ;
+
+	while ( el )
+	{
+		if ( el._FCKContextMenu )
+		{
+			if ( el._FCKContextMenu.CtrlDisable && ( e.ctrlKey || e.metaKey ) )
+				return true ;
+
+			FCKTools.CancelEvent( e ) ;
+			FCKContextMenu_AttachedElement_OnContextMenu( e, el._FCKContextMenu, el ) ;
+			return false ;
+		}
+		el = el.parentNode ;
+	}
+	return true ;
+}
+
+var FCKContextMenu_OverrideButton ;
+
+function FCKContextMenu_Document_OnMouseDown( e )
+{
+	if( !e || e.button != 2 )
+		return false ;
+
+	var el = e.target ;
+
+	while ( el )
+	{
+		if ( el._FCKContextMenu )
+		{
+			if ( el._FCKContextMenu.CtrlDisable && ( e.ctrlKey || e.metaKey ) )
+				return true ;
+
+			var overrideButton = FCKContextMenu_OverrideButton ;
+			if( !overrideButton )
+			{
+				var doc = e.target.ownerDocument ;
+				overrideButton = FCKContextMenu_OverrideButton = doc.createElement('input') ;
+				overrideButton.type = 'button' ;
+				var buttonHolder = doc.createElement('p') ;
+				doc.body.appendChild( buttonHolder ) ;
+				buttonHolder.appendChild( overrideButton ) ;
+			}
+
+			overrideButton.style.cssText = 'position:absolute;top:' + ( e.clientY - 2 ) + 
+				'px;left:' + ( e.clientX - 2 ) + 
+				'px;width:5px;height:5px;opacity:0.01' ;
+		}
+		el = el.parentNode ;
+	}
+	return false ;
+}
+
+function FCKContextMenu_Document_OnMouseUp( e )
+{
+	var overrideButton = FCKContextMenu_OverrideButton ;
+
+	if ( overrideButton )
+	{
+		var parent = overrideButton.parentNode ;
+		parent.parentNode.removeChild( parent ) ;
+		FCKContextMenu_OverrideButton = undefined ;
+
+		if( e && e.button == 2 )
+		{
+			FCKContextMenu_Document_OnContextMenu( e ) ;
+			return false ;
+		}
+	}
+}
+
+function FCKContextMenu_AttachedElement_OnContextMenu( ev, fckContextMenu, el )
+{
+	if ( fckContextMenu.CtrlDisable && ( ev.ctrlKey || ev.metaKey ) )
+		return true ;
+
+	var eTarget = el || this ;
+
+	if ( fckContextMenu.OnBeforeOpen )
+		fckContextMenu.OnBeforeOpen.call( fckContextMenu, eTarget ) ;
+
+	if ( fckContextMenu._MenuBlock.Count() == 0 )
+		return false ;
+
+	if ( fckContextMenu._Redraw )
+	{
+		fckContextMenu._MenuBlock.Create( fckContextMenu._Panel.MainNode ) ;
+		fckContextMenu._Redraw = false ;
+	}
+	
+	// This will avoid that the content of the context menu can be dragged in IE
+	// as the content of the panel is recreated we need to do it every time
+	FCKTools.DisableSelection( fckContextMenu._Panel.Document.body ) ;
+
+	var x = 0 ;
+	var y = 0 ;
+	if ( FCKBrowserInfo.IsIE )
+	{
+		x = ev.screenX ;
+		y = ev.screenY ;
+	}
+	else if ( FCKBrowserInfo.IsSafari )
+	{
+		x = ev.clientX ;
+		y = ev.clientY ;
+	}
+	else
+	{
+		x = ev.pageX ;
+		y = ev.pageY ;
+	}
+	fckContextMenu._Panel.Show( x, y, ev.currentTarget || null ) ;
+
+	return false ;
+}
+
+function FCKContextMenu_MenuBlock_OnClick( menuItem, contextMenu )
+{
+	contextMenu._Panel.Hide() ;
+	FCKTools.RunFunction( contextMenu.OnItemClick, contextMenu, menuItem ) ;
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckdataprocessor.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckdataprocessor.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckdataprocessor.js	(revision 1280)
@@ -0,0 +1,119 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * The Data Processor is responsible for transforming the input and output data
+ * in the editor. For more info:
+ * http://dev.fckeditor.net/wiki/Components/DataProcessor
+ *
+ * The default implementation offers the base XHTML compatibility features of
+ * FCKeditor. Further Data Processors may be implemented for other purposes.
+ *
+ */
+
+var FCKDataProcessor = function()
+{}
+
+FCKDataProcessor.prototype =
+{
+	/*
+	 * Returns a string representing the HTML format of "data". The returned
+	 * value will be loaded in the editor.
+	 * The HTML must be from <html> to </html>, including <head>, <body> and
+	 * eventually the DOCTYPE.
+	 * Note: HTML comments may already be part of the data because of the
+	 * pre-processing made with ProtectedSource.
+	 *     @param {String} data The data to be converted in the
+	 *            DataProcessor specific format.
+	 */
+	ConvertToHtml : function( data )
+	{
+		// The default data processor must handle two different cases depending
+		// on the FullPage setting. Custom Data Processors will not be
+		// compatible with FullPage, much probably.
+		if ( FCKConfig.FullPage )
+		{
+			// Save the DOCTYPE.
+			FCK.DocTypeDeclaration = data.match( FCKRegexLib.DocTypeTag ) ;
+
+			// Check if the <body> tag is available.
+			if ( !FCKRegexLib.HasBodyTag.test( data ) )
+				data = '<body>' + data + '</body>' ;
+
+			// Check if the <html> tag is available.
+			if ( !FCKRegexLib.HtmlOpener.test( data ) )
+				data = '<html dir="' + FCKConfig.ContentLangDirection + '">' + data + '</html>' ;
+
+			// Check if the <head> tag is available.
+			if ( !FCKRegexLib.HeadOpener.test( data ) )
+				data = data.replace( FCKRegexLib.HtmlOpener, '$&<head><title></title></head>' ) ;
+
+			return data ;
+		}
+		else
+		{
+			var html =
+				FCKConfig.DocType +
+				'<html dir="' + FCKConfig.ContentLangDirection + '"' ;
+
+			// On IE, if you are using a DOCTYPE different of HTML 4 (like
+			// XHTML), you must force the vertical scroll to show, otherwise
+			// the horizontal one may appear when the page needs vertical scrolling.
+			// TODO : Check it with IE7 and make it IE6- if it is the case.
+			if ( FCKBrowserInfo.IsIE && FCKConfig.DocType.length > 0 && !FCKRegexLib.Html4DocType.test( FCKConfig.DocType ) )
+				html += ' style="overflow-y: scroll"' ;
+
+			html += '><head><title></title></head>' +
+				'<body' + FCKConfig.GetBodyAttributes() + '>' +
+				data +
+				'</body></html>' ;
+
+			return html ;
+		}
+	},
+
+	/*
+	 * Converts a DOM (sub-)tree to a string in the data format.
+	 *     @param {Object} rootNode The node that contains the DOM tree to be
+	 *            converted to the data format.
+	 *     @param {Boolean} excludeRoot Indicates that the root node must not
+	 *            be included in the conversion, only its children.
+	 *     @param {Boolean} format Indicates that the data must be formatted
+	 *            for human reading. Not all Data Processors may provide it.
+	 */
+	ConvertToDataFormat : function( rootNode, excludeRoot, ignoreIfEmptyParagraph, format )
+	{
+		var data = FCKXHtml.GetXHTML( rootNode, !excludeRoot, format ) ;
+
+		if ( ignoreIfEmptyParagraph && FCKRegexLib.EmptyOutParagraph.test( data ) )
+			return '' ;
+
+		return data ;
+	},
+
+	/*
+	 * Makes any necessary changes to a piece of HTML for insertion in the
+	 * editor selection position.
+	 *     @param {String} html The HTML to be fixed.
+	 */
+	FixHtml : function( html )
+	{
+		return html ;
+	}
+} ;
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckdocumentfragment_gecko.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckdocumentfragment_gecko.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckdocumentfragment_gecko.js	(revision 1280)
@@ -0,0 +1,46 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This is a generic Document Fragment object. It is not intended to provide
+ * the W3C implementation, but is a way to fix the missing of a real Document
+ * Fragment in IE (where document.createDocumentFragment() returns a normal
+ * document instead), giving a standard interface for it.
+ * (IE Implementation)
+ */
+
+var FCKDocumentFragment = function( parentDocument, baseDocFrag )
+{
+	this.RootNode = baseDocFrag || parentDocument.createDocumentFragment() ;
+}
+
+FCKDocumentFragment.prototype =
+{
+
+	// Append the contents of this Document Fragment to another element.
+	AppendTo : function( targetNode )
+	{
+		targetNode.appendChild( this.RootNode ) ;
+	},
+
+	InsertAfterNode : function( existingNode )
+	{
+		FCKDomTools.InsertAfterNode( existingNode, this.RootNode ) ;
+	}
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckdocumentfragment_ie.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckdocumentfragment_ie.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckdocumentfragment_ie.js	(revision 1280)
@@ -0,0 +1,58 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This is a generic Document Fragment object. It is not intended to provide
+ * the W3C implementation, but is a way to fix the missing of a real Document
+ * Fragment in IE (where document.createDocumentFragment() returns a normal
+ * document instead), giving a standard interface for it.
+ * (IE Implementation)
+ */
+
+var FCKDocumentFragment = function( parentDocument )
+{
+	this._Document = parentDocument ;
+	this.RootNode = parentDocument.createElement( 'div' ) ;
+}
+
+// Append the contents of this Document Fragment to another node.
+FCKDocumentFragment.prototype =
+{
+
+	AppendTo : function( targetNode )
+	{
+		FCKDomTools.MoveChildren( this.RootNode, targetNode ) ;
+	},
+
+	AppendHtml : function( html )
+	{
+		var eTmpDiv = this._Document.createElement( 'div' ) ;
+		eTmpDiv.innerHTML = html ;
+		FCKDomTools.MoveChildren( eTmpDiv, this.RootNode ) ;
+	},
+
+	InsertAfterNode : function( existingNode )
+	{
+		var eRoot = this.RootNode ;
+		var eLast ;
+
+		while( ( eLast = eRoot.lastChild ) )
+			FCKDomTools.InsertAfterNode( existingNode, eRoot.removeChild( eLast ) ) ;
+	}
+} ;
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckdomrange.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckdomrange.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckdomrange.js	(revision 1280)
@@ -0,0 +1,808 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Class for working with a selection range, much like the W3C DOM Range, but
+ * it is not intended to be an implementation of the W3C interface.
+ */
+
+var FCKDomRange = function( sourceWindow )
+{
+	this.Window = sourceWindow ;
+	this._Cache = {} ;
+}
+
+FCKDomRange.prototype =
+{
+
+	_UpdateElementInfo : function()
+	{
+		var innerRange = this._Range ;
+
+		if ( !innerRange )
+			this.Release( true ) ;
+		else
+		{
+			// For text nodes, the node itself is the StartNode.
+			var eStart	= innerRange.startContainer ;
+			var eEnd	= innerRange.endContainer ;
+
+			var oElementPath = new FCKElementPath( eStart ) ;
+			this.StartNode			= eStart.nodeType == 3 ? eStart : eStart.childNodes[ innerRange.startOffset ] ;
+			this.StartContainer		= eStart ;
+			this.StartBlock			= oElementPath.Block ;
+			this.StartBlockLimit	= oElementPath.BlockLimit ;
+
+			if ( eStart != eEnd )
+				oElementPath = new FCKElementPath( eEnd ) ;
+
+			// The innerRange.endContainer[ innerRange.endOffset ] is not
+			// usually part of the range, but the marker for the range end. So,
+			// let's get the previous available node as the real end.
+			var eEndNode = eEnd ;
+			if ( innerRange.endOffset == 0 )
+			{
+				while ( eEndNode && !eEndNode.previousSibling )
+					eEndNode = eEndNode.parentNode ;
+
+				if ( eEndNode )
+					eEndNode = eEndNode.previousSibling ;
+			}
+			else if ( eEndNode.nodeType == 1 )
+				eEndNode = eEndNode.childNodes[ innerRange.endOffset - 1 ] ;
+
+			this.EndNode			= eEndNode ;
+			this.EndContainer		= eEnd ;
+			this.EndBlock			= oElementPath.Block ;
+			this.EndBlockLimit		= oElementPath.BlockLimit ;
+		}
+
+		this._Cache = {} ;
+	},
+
+	CreateRange : function()
+	{
+		return new FCKW3CRange( this.Window.document ) ;
+	},
+
+	DeleteContents : function()
+	{
+		if ( this._Range )
+		{
+			this._Range.deleteContents() ;
+			this._UpdateElementInfo() ;
+		}
+	},
+
+	ExtractContents : function()
+	{
+		if ( this._Range )
+		{
+			var docFrag = this._Range.extractContents() ;
+			this._UpdateElementInfo() ;
+			return docFrag ;
+		}
+	},
+
+	CheckIsCollapsed : function()
+	{
+		if ( this._Range )
+			return this._Range.collapsed ;
+	},
+
+	Collapse : function( toStart )
+	{
+		if ( this._Range )
+			this._Range.collapse( toStart ) ;
+
+		this._UpdateElementInfo() ;
+	},
+
+	Clone : function()
+	{
+		var oClone = FCKTools.CloneObject( this ) ;
+
+		if ( this._Range )
+			oClone._Range = this._Range.cloneRange() ;
+
+		return oClone ;
+	},
+
+	MoveToNodeContents : function( targetNode )
+	{
+		if ( !this._Range )
+			this._Range = this.CreateRange() ;
+
+		this._Range.selectNodeContents( targetNode ) ;
+
+		this._UpdateElementInfo() ;
+	},
+
+	MoveToElementStart : function( targetElement )
+	{
+		this.SetStart(targetElement,1) ;
+		this.SetEnd(targetElement,1) ;
+	},
+
+	// Moves to the first editing point inside a element. For example, in a
+	// element tree like "<p><b><i></i></b> Text</p>", the start editing point
+	// is "<p><b><i>^</i></b> Text</p>" (inside <i>).
+	MoveToElementEditStart : function( targetElement )
+	{
+		var child ;
+
+		while ( ( child = targetElement.firstChild ) && child.nodeType == 1 && FCKListsLib.EmptyElements[ child.nodeName.toLowerCase() ] == null )
+			targetElement = child ;
+
+		this.MoveToElementStart( targetElement ) ;
+	},
+
+	InsertNode : function( node )
+	{
+		if ( this._Range )
+			this._Range.insertNode( node ) ;
+	},
+
+	CheckIsEmpty : function()
+	{
+		if ( this.CheckIsCollapsed() )
+			return true ;
+
+		// Inserts the contents of the range in a div tag.
+		var eToolDiv = this.Window.document.createElement( 'div' ) ;
+		this._Range.cloneContents().AppendTo( eToolDiv ) ;
+
+		FCKDomTools.TrimNode( eToolDiv ) ;
+
+		return ( eToolDiv.innerHTML.length == 0 ) ;
+	},
+
+	CheckStartOfBlock : function()
+	{
+		var bIsStartOfBlock = this._Cache.IsStartOfBlock ;
+
+		if ( bIsStartOfBlock != undefined )
+			return bIsStartOfBlock ;
+
+		// Create a clone of the current range.
+		var oTestRange = this.Clone() ;
+
+		// Collapse it to its start point.
+		oTestRange.Collapse( true ) ;
+
+		// Move the start boundary to the start of the block.
+		oTestRange.SetStart( oTestRange.StartBlock || oTestRange.StartBlockLimit, 1 ) ;
+
+		if ( oTestRange.CheckIsCollapsed() )
+			bIsStartOfBlock = true ;
+		else
+		{
+			// Inserts the contents of the range in a div tag.
+			var eToolDiv = oTestRange.Window.document.createElement( 'div' ) ;
+			oTestRange._Range.cloneContents().AppendTo( eToolDiv ) ;
+
+			// This line is why we don't use CheckIsEmpty() here...
+			// Because using RTrimNode() or TrimNode() would be incorrect - 
+			// TrimNode() and RTrimNode() would delete <br> nodes at the end of the div node,
+			// but for checking start of block they are actually meaningful. (Bug #1350)
+			FCKDomTools.LTrimNode( eToolDiv ) ;
+
+			bIsStartOfBlock = ( eToolDiv.innerHTML.length == 0 ) ;
+		}
+
+		oTestRange.Release() ;
+
+		return ( this._Cache.IsStartOfBlock = bIsStartOfBlock ) ;
+	},
+
+	CheckEndOfBlock : function( refreshSelection )
+	{
+		var bIsEndOfBlock = this._Cache.IsEndOfBlock ;
+
+		if ( bIsEndOfBlock != undefined )
+			return bIsEndOfBlock ;
+
+		// Create a clone of the current range.
+		var oTestRange = this.Clone() ;
+
+		// Collapse it to its end point.
+		oTestRange.Collapse( false ) ;
+
+		// Move the end boundary to the end of the block.
+		oTestRange.SetEnd( oTestRange.EndBlock || oTestRange.EndBlockLimit, 2 ) ;
+
+		bIsEndOfBlock = oTestRange.CheckIsCollapsed() ;
+
+		if ( !bIsEndOfBlock )
+		{
+			// Inserts the contents of the range in a div tag.
+			var eToolDiv = this.Window.document.createElement( 'div' ) ;
+			oTestRange._Range.cloneContents().AppendTo( eToolDiv ) ;
+			FCKDomTools.TrimNode( eToolDiv ) ;
+
+			// Find out if we are in an empty tree of inline elements, like <b><i><span></span></i></b>
+			bIsEndOfBlock = true ;
+			var eLastChild = eToolDiv ;
+			while ( ( eLastChild = eLastChild.lastChild ) )
+			{
+				// Check the following:
+				//		1. Is there more than one node in the parents children?
+				//		2. Is the node not an element node?
+				//		3. Is it not a inline element.
+				if ( eLastChild.previousSibling || eLastChild.nodeType != 1 || FCKListsLib.InlineChildReqElements[ eLastChild.nodeName.toLowerCase() ] == null )
+				{
+					// So we are not in the end of the range.
+					bIsEndOfBlock = false ;
+					break ;
+				}
+			}
+		}
+
+		oTestRange.Release() ;
+
+		if ( refreshSelection )
+			this.Select() ;
+
+		return this._Cache.IsEndOfBlock = bIsEndOfBlock ;
+	},
+
+	// This is an "intrusive" way to create a bookmark. It includes <span> tags
+	// in the range boundaries. The advantage of it is that it is possible to
+	// handle DOM mutations when moving back to the bookmark.
+	// Attention: the inclusion of nodes in the DOM is a design choice and
+	// should not be changed as there are other points in the code that may be
+	// using those nodes to perform operations. See GetBookmarkNode.
+	// For performance, includeNodes=true if intended to SelectBookmark.
+	CreateBookmark : function( includeNodes )
+	{
+		// Create the bookmark info (random IDs).
+		var oBookmark =
+		{
+			StartId	: (new Date()).valueOf() + Math.floor(Math.random()*1000) + 'S',
+			EndId	: (new Date()).valueOf() + Math.floor(Math.random()*1000) + 'E'
+		} ;
+
+		var oDoc = this.Window.document ;
+		var eStartSpan ;
+		var eEndSpan ;
+		var oClone ;
+
+		// For collapsed ranges, add just the start marker.
+		if ( !this.CheckIsCollapsed() )
+		{
+			eEndSpan = oDoc.createElement( 'span' ) ;
+			eEndSpan.style.display = 'none' ;
+			eEndSpan.id = oBookmark.EndId ;
+			eEndSpan.setAttribute( '_fck_bookmark', true ) ;
+
+			// For IE, it must have something inside, otherwise it may be
+			// removed during DOM operations.
+//			if ( FCKBrowserInfo.IsIE )
+				eEndSpan.innerHTML = '&nbsp;' ;
+
+			oClone = this.Clone() ;
+			oClone.Collapse( false ) ;
+			oClone.InsertNode( eEndSpan ) ;
+		}
+
+		eStartSpan = oDoc.createElement( 'span' ) ;
+		eStartSpan.style.display = 'none' ;
+		eStartSpan.id = oBookmark.StartId ;
+		eStartSpan.setAttribute( '_fck_bookmark', true ) ;
+
+		// For IE, it must have something inside, otherwise it may be removed
+		// during DOM operations.
+//		if ( FCKBrowserInfo.IsIE )
+			eStartSpan.innerHTML = '&nbsp;' ;
+
+		oClone = this.Clone() ;
+		oClone.Collapse( true ) ;
+		oClone.InsertNode( eStartSpan ) ;
+
+		if ( includeNodes )
+		{
+			oBookmark.StartNode = eStartSpan ;
+			oBookmark.EndNode = eEndSpan ;
+		}
+		
+		// Update the range position.
+		if ( eEndSpan )
+		{
+			this.SetStart( eStartSpan, 4 ) ;
+			this.SetEnd( eEndSpan, 3 ) ;
+		}
+		else
+			this.MoveToPosition( eStartSpan, 4 ) ;
+		
+		return oBookmark ;
+	},
+
+	// This one should be a part of a hypothetic "bookmark" object.
+	GetBookmarkNode : function( bookmark, start )
+	{
+		var doc = this.Window.document ;
+
+		if ( start )
+			return bookmark.StartNode || doc.getElementById( bookmark.StartId ) ;
+		else
+			return bookmark.EndNode || doc.getElementById( bookmark.EndId ) ;
+	},
+
+	MoveToBookmark : function( bookmark, preserveBookmark )
+	{
+		var eStartSpan	= this.GetBookmarkNode( bookmark, true ) ;
+		var eEndSpan	= this.GetBookmarkNode( bookmark, false ) ;
+
+		this.SetStart( eStartSpan, 3 ) ;
+
+		if ( !preserveBookmark )
+			FCKDomTools.RemoveNode( eStartSpan ) ;
+
+		// If collapsed, the end span will not be available.
+		if ( eEndSpan )
+		{
+			this.SetEnd( eEndSpan, 3 ) ;
+
+			if ( !preserveBookmark )
+				FCKDomTools.RemoveNode( eEndSpan ) ;
+		}
+		else
+			this.Collapse( true ) ;
+
+		this._UpdateElementInfo() ;
+	},
+
+	// Non-intrusive bookmark algorithm
+	CreateBookmark2 : function()
+	{
+		// If there is no range then get out of here.
+		// It happens on initial load in Safari #962 and if the editor it's hidden also in Firefox
+		if ( ! this._Range )
+			return { "Start" : 0, "End" : 0 } ;
+
+		// First, we record down the offset values
+		var bookmark =
+		{
+			"Start" : [ this._Range.startOffset ],
+			"End" : [ this._Range.endOffset ]
+		} ;
+		var curStart = this._Range.startContainer.previousSibling ;
+		var curEnd = this._Range.endContainer.previousSibling ;
+		while ( curStart && curStart.nodeType == 3 )
+		{
+			bookmark.Start[0] += curStart.length ;
+			curStart = curStart.previousSibling ;
+		}
+		while ( curEnd && curEnd.nodeType == 3 )
+		{
+			bookmark.End[0] += curEnd.length ;
+			curEnd = curEnd.previousSibling ;
+		}
+		// Then, we record down the precise position of the container nodes
+		// by walking up the DOM tree and counting their childNode index
+		bookmark.Start = FCKDomTools.GetNodeAddress( this._Range.startContainer, true ).concat( bookmark.Start ) ;
+		bookmark.End = FCKDomTools.GetNodeAddress( this._Range.endContainer, true ).concat( bookmark.End ) ;
+		return bookmark;
+	},
+
+	MoveToBookmark2 : function( bookmark )
+	{
+		// Reverse the childNode counting algorithm in CreateBookmark2()
+		var curStart = FCKDomTools.GetNodeFromAddress( this.Window.document, bookmark.Start.slice( 0, -1 ), true ) ;
+		var curEnd = FCKDomTools.GetNodeFromAddress( this.Window.document, bookmark.End.slice( 0, -1 ), true ) ;
+
+		// Generate the W3C Range object and update relevant data
+		this.Release( true ) ;
+		this._Range = new FCKW3CRange( this.Window.document ) ;
+		var startOffset = bookmark.Start[ bookmark.Start.length - 1 ] ;
+		var endOffset = bookmark.End[ bookmark.End.length - 1 ] ;
+		while ( curStart.nodeType == 3 && startOffset > curStart.length )
+		{
+			if ( ! curStart.nextSibling || curStart.nextSibling.nodeType != 3 )
+				break ;
+			startOffset -= curStart.length ;
+			curStart = curStart.nextSibling ;
+		}
+		while ( curEnd.nodeType == 3 && endOffset > curEnd.length )
+		{
+			if ( ! curEnd.nextSibling || curEnd.nextSibling.nodeType != 3 )
+				break ;
+			endOffset -= curEnd.length ;
+			curEnd = curEnd.nextSibling ;
+		}
+		this._Range.setStart( curStart, startOffset ) ;
+		this._Range.setEnd( curEnd, endOffset ) ;
+		this._UpdateElementInfo() ;
+	},
+
+	MoveToPosition : function( targetElement, position )
+	{
+		this.SetStart( targetElement, position ) ;
+		this.Collapse( true ) ;
+	},
+
+	/*
+	 * Moves the position of the start boundary of the range to a specific position
+	 * relatively to a element.
+	 *		@position:
+	 *			1 = After Start		<target>^contents</target>
+	 *			2 = Before End		<target>contents^</target>
+	 *			3 = Before Start	^<target>contents</target>
+	 *			4 = After End		<target>contents</target>^
+	 */
+	SetStart : function( targetElement, position, noInfoUpdate )
+	{
+		var oRange = this._Range ;
+		if ( !oRange )
+			oRange = this._Range = this.CreateRange() ;
+
+		switch( position )
+		{
+			case 1 :		// After Start		<target>^contents</target>
+				oRange.setStart( targetElement, 0 ) ;
+				break ;
+
+			case 2 :		// Before End		<target>contents^</target>
+				oRange.setStart( targetElement, targetElement.childNodes.length ) ;
+				break ;
+
+			case 3 :		// Before Start		^<target>contents</target>
+				oRange.setStartBefore( targetElement ) ;
+				break ;
+
+			case 4 :		// After End		<target>contents</target>^
+				oRange.setStartAfter( targetElement ) ;
+		}
+
+		if ( !noInfoUpdate )
+			this._UpdateElementInfo() ;
+	},
+
+	/*
+	 * Moves the position of the start boundary of the range to a specific position
+	 * relatively to a element.
+	 *		@position:
+	 *			1 = After Start		<target>^contents</target>
+	 *			2 = Before End		<target>contents^</target>
+	 *			3 = Before Start	^<target>contents</target>
+	 *			4 = After End		<target>contents</target>^
+	 */
+	SetEnd : function( targetElement, position, noInfoUpdate )
+	{
+		var oRange = this._Range ;
+		if ( !oRange )
+			oRange = this._Range = this.CreateRange() ;
+
+		switch( position )
+		{
+			case 1 :		// After Start		<target>^contents</target>
+				oRange.setEnd( targetElement, 0 ) ;
+				break ;
+
+			case 2 :		// Before End		<target>contents^</target>
+				oRange.setEnd( targetElement, targetElement.childNodes.length ) ;
+				break ;
+
+			case 3 :		// Before Start		^<target>contents</target>
+				oRange.setEndBefore( targetElement ) ;
+				break ;
+
+			case 4 :		// After End		<target>contents</target>^
+				oRange.setEndAfter( targetElement ) ;
+		}
+
+		if ( !noInfoUpdate )
+			this._UpdateElementInfo() ;
+	},
+
+	Expand : function( unit )
+	{
+		var oNode, oSibling ;
+
+		switch ( unit )
+		{
+			// Expand the range to include all inline parent elements if we are
+			// are in their boundary limits.
+			// For example (where [ ] are the range limits):
+			//	Before =>		Some <b>[<i>Some sample text]</i></b>.
+			//	After =>		Some [<b><i>Some sample text</i></b>].
+			case 'inline_elements' :
+				// Expand the start boundary.
+				if ( this._Range.startOffset == 0 )
+				{
+					oNode = this._Range.startContainer ;
+
+					if ( oNode.nodeType != 1 )
+						oNode = oNode.previousSibling ? null : oNode.parentNode ;
+					
+					if ( oNode )
+					{
+						while ( FCKListsLib.InlineNonEmptyElements[ oNode.nodeName.toLowerCase() ] )
+						{
+							this._Range.setStartBefore( oNode ) ;
+
+							if ( oNode != oNode.parentNode.firstChild )
+								break ;
+
+							oNode = oNode.parentNode ;
+						}
+					}
+				}
+
+				// Expand the end boundary.
+				oNode = this._Range.endContainer ;
+				var offset = this._Range.endOffset ;
+
+				if ( ( oNode.nodeType == 3 && offset >= oNode.nodeValue.length ) || ( oNode.nodeType == 1 && offset >= oNode.childNodes.length ) || ( oNode.nodeType != 1 && oNode.nodeType != 3 ) )
+				{
+					if ( oNode.nodeType != 1 )
+						oNode = oNode.nextSibling ? null : oNode.parentNode ;
+
+					if ( oNode )
+					{
+						while ( FCKListsLib.InlineNonEmptyElements[ oNode.nodeName.toLowerCase() ] )
+						{
+							this._Range.setEndAfter( oNode ) ;
+
+							if ( oNode != oNode.parentNode.lastChild )
+								break ;
+
+							oNode = oNode.parentNode ;
+						}
+					}
+				}
+
+				break ;
+
+			case 'block_contents' :
+			case 'list_contents' :
+				var boundarySet = FCKListsLib.BlockBoundaries ;
+				if ( unit == 'list_contents' || FCKConfig.EnterMode == 'br' )
+					boundarySet = FCKListsLib.ListBoundaries ;
+
+				if ( this.StartBlock && FCKConfig.EnterMode != 'br' && unit == 'block_contents' )
+					this.SetStart( this.StartBlock, 1 ) ;
+				else
+				{
+					// Get the start node for the current range.
+					oNode = this._Range.startContainer ;
+
+					// If it is an element, get the node right before of it (in source order).
+					if ( oNode.nodeType == 1 )
+					{
+						var lastNode = oNode.childNodes[ this._Range.startOffset ] ;
+						if ( lastNode )
+							oNode = FCKDomTools.GetPreviousSourceNode( lastNode, true ) ;
+						else
+							oNode = oNode.lastChild || oNode ;
+					}
+
+					// We must look for the left boundary, relative to the range
+					// start, which is limited by a block element.
+					while ( oNode
+							&& ( oNode.nodeType != 1
+								|| ( oNode != this.StartBlockLimit
+									&& !boundarySet[ oNode.nodeName.toLowerCase() ] ) ) )
+					{
+						this._Range.setStartBefore( oNode ) ;
+						oNode = oNode.previousSibling || oNode.parentNode ;
+					}
+				}
+
+				if ( this.EndBlock && FCKConfig.EnterMode != 'br' && unit == 'block_contents' && this.EndBlock.nodeName.toLowerCase() != 'li' )
+					this.SetEnd( this.EndBlock, 2 ) ;
+				else
+				{
+					oNode = this._Range.endContainer ;
+					if ( oNode.nodeType == 1 )
+						oNode = oNode.childNodes[ this._Range.endOffset ] || oNode.lastChild ;
+
+					// We must look for the right boundary, relative to the range
+					// end, which is limited by a block element.
+					while ( oNode
+							&& ( oNode.nodeType != 1
+								|| ( oNode != this.StartBlockLimit
+									&& !boundarySet[ oNode.nodeName.toLowerCase() ] ) ) )
+					{
+						this._Range.setEndAfter( oNode ) ;
+						oNode = oNode.nextSibling || oNode.parentNode ;
+					}
+
+					// In EnterMode='br', the end <br> boundary element must
+					// be included in the expanded range.
+					if ( oNode && oNode.nodeName.toLowerCase() == 'br' )
+						this._Range.setEndAfter( oNode ) ;
+				}
+
+				this._UpdateElementInfo() ;
+		}
+	},
+
+	/**
+	 * Split the block element for the current range. It deletes the contents
+	 * of the range and splits the block in the collapsed position, resulting
+	 * in two sucessive blocks. The range is then positioned in the middle of
+	 * them.
+	 *
+	 * It returns and object with the following properties:
+	 *		- PreviousBlock	: a reference to the block element that preceeds
+	 *		  the range after the split.
+	 *		- NextBlock : a reference to the block element that preceeds the
+	 *		  range after the split.
+	 *		- WasStartOfBlock : a boolean indicating that the range was
+	 *		  originaly at the start of the block.
+	 *		- WasEndOfBlock : a boolean indicating that the range was originaly
+	 *		  at the end of the block.
+	 *
+	 * If the range was originaly at the start of the block, no split will happen
+	 * and the PreviousBlock value will be null. The same is valid for the
+	 * NextBlock value if the range was at the end of the block.
+	 */
+	SplitBlock : function()
+	{
+		if ( !this._Range )
+			this.MoveToSelection() ;
+
+		// The range boundaries must be in the same "block limit" element.
+		if ( this.StartBlockLimit == this.EndBlockLimit )
+		{
+			// Get the current blocks.
+			var eStartBlock		= this.StartBlock ;
+			var eEndBlock		= this.EndBlock ;
+
+			if ( FCKConfig.EnterMode != 'br' )
+			{
+				if ( !eStartBlock )
+				{
+					eStartBlock = this.FixBlock( true ) ;
+					eEndBlock	= this.EndBlock ;	// FixBlock may have fixed the EndBlock too.
+				}
+
+				if ( !eEndBlock )
+					eEndBlock = this.FixBlock( false ) ;
+			}
+
+			// Get the range position.
+			var bIsStartOfBlock	= ( eStartBlock != null && this.CheckStartOfBlock() ) ;
+			var bIsEndOfBlock	= ( eEndBlock != null && this.CheckEndOfBlock() ) ;
+
+			// Delete the current contents.
+			if ( !this.CheckIsEmpty() )
+				this.DeleteContents() ;
+
+			if ( eStartBlock && eEndBlock && eStartBlock == eEndBlock )
+			{
+				if ( bIsEndOfBlock )
+				{
+					this.MoveToPosition( eEndBlock, 4 ) ;
+					eEndBlock = null ;
+				}
+				else if ( bIsStartOfBlock )
+				{
+					this.MoveToPosition( eStartBlock, 3 ) ;
+					eStartBlock = null ;
+				}
+				else
+				{
+					// Extract the contents of the block from the selection point to the end of its contents.
+					this.SetEnd( eStartBlock, 2 ) ;
+					var eDocFrag = this.ExtractContents() ;
+
+					// Duplicate the block element after it.
+					eEndBlock = eStartBlock.cloneNode( false ) ;
+					eEndBlock.removeAttribute( 'id', false ) ;
+
+					// Place the extracted contents in the duplicated block.
+					eDocFrag.AppendTo( eEndBlock ) ;
+
+					FCKDomTools.InsertAfterNode( eStartBlock, eEndBlock ) ;
+
+					this.MoveToPosition( eStartBlock, 4 ) ;
+
+					// In Gecko, the last child node must be a bogus <br>.
+					// Note: bogus <br> added under <ul> or <ol> would cause lists to be incorrectly rendered.
+					if ( FCKBrowserInfo.IsGecko &&
+							! eStartBlock.nodeName.IEquals( ['ul', 'ol'] ) )
+						FCKTools.AppendBogusBr( eStartBlock ) ;
+				}
+			}
+
+			return {
+				PreviousBlock	: eStartBlock,
+				NextBlock		: eEndBlock,
+				WasStartOfBlock : bIsStartOfBlock,
+				WasEndOfBlock	: bIsEndOfBlock
+			} ;
+		}
+
+		return null ;
+	},
+
+	// Transform a block without a block tag in a valid block (orphan text in the body or td, usually).
+	FixBlock : function( isStart )
+	{
+		// Bookmark the range so we can restore it later.
+		var oBookmark = this.CreateBookmark() ;
+
+		// Collapse the range to the requested ending boundary.
+		this.Collapse( isStart ) ;
+
+		// Expands it to the block contents.
+		this.Expand( 'block_contents' ) ;
+
+		// Create the fixed block.
+		var oFixedBlock = this.Window.document.createElement( FCKConfig.EnterMode ) ;
+
+		// Move the contents of the temporary range to the fixed block.
+		this.ExtractContents().AppendTo( oFixedBlock ) ;
+		FCKDomTools.TrimNode( oFixedBlock ) ;
+
+		// Insert the fixed block into the DOM.
+		this.InsertNode( oFixedBlock ) ;
+
+		// Move the range back to the bookmarked place.
+		this.MoveToBookmark( oBookmark ) ;
+
+		return oFixedBlock ;
+	},
+
+	Release : function( preserveWindow )
+	{
+		if ( !preserveWindow )
+			this.Window = null ;
+
+		this.StartNode = null ;
+		this.StartContainer = null ;
+		this.StartBlock = null ;
+		this.StartBlockLimit = null ;
+		this.EndNode = null ;
+		this.EndContainer = null ;
+		this.EndBlock = null ;
+		this.EndBlockLimit = null ;
+		this._Range = null ;
+		this._Cache = null ;
+	},
+
+	CheckHasRange : function()
+	{
+		return !!this._Range ;
+	},
+	
+	GetTouchedStartNode : function()
+	{
+		var range = this._Range ;
+		var container = range.startContainer ;
+		
+		if ( range.collapsed || container.nodeType != 1 )
+			return container ;
+		
+		return container.childNodes[ range.startOffset ] || container ;
+	},
+	
+	GetTouchedEndNode : function()
+	{
+		var range = this._Range ;
+		var container = range.endContainer ;
+		
+		if ( range.collapsed || container.nodeType != 1 )
+			return container ;
+		
+		return container.childNodes[ range.endOffset - 1 ] || container ;
+	}
+} ;
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckdomrange_gecko.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckdomrange_gecko.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckdomrange_gecko.js	(revision 1280)
@@ -0,0 +1,103 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Class for working with a selection range, much like the W3C DOM Range, but
+ * it is not intended to be an implementation of the W3C interface.
+ * (Gecko Implementation)
+ */
+
+FCKDomRange.prototype.MoveToSelection = function()
+{
+	this.Release( true ) ;
+
+	var oSel = this.Window.getSelection() ;
+
+	if ( oSel && oSel.rangeCount > 0 )
+	{
+		this._Range = FCKW3CRange.CreateFromRange( this.Window.document, oSel.getRangeAt(0) ) ;
+		this._UpdateElementInfo() ;
+	}
+	else
+		this.MoveToElementStart( this.Window.document.body ) ;
+}
+
+FCKDomRange.prototype.Select = function()
+{
+	var oRange = this._Range ;
+	if ( oRange )
+	{
+		var startContainer = oRange.startContainer ;
+
+		// If we have a collapsed range, inside an empty element, we must add
+		// something to it, otherwise the caret will not be visible.
+		if ( oRange.collapsed && startContainer.nodeType == 1 && startContainer.childNodes.length == 0 )
+			startContainer.appendChild( oRange._Document.createTextNode('') ) ;
+
+		var oDocRange = this.Window.document.createRange() ;
+		oDocRange.setStart( startContainer, oRange.startOffset ) ;
+
+		try
+		{
+			oDocRange.setEnd( oRange.endContainer, oRange.endOffset ) ;
+		}
+		catch ( e )
+		{
+			// There is a bug in Firefox implementation (it would be too easy
+			// otherwise). The new start can't be after the end (W3C says it can).
+			// So, let's create a new range and collapse it to the desired point.
+			if ( e.toString().Contains( 'NS_ERROR_ILLEGAL_VALUE' ) )
+			{
+				oRange.collapse( true ) ;
+				oDocRange.setEnd( oRange.endContainer, oRange.endOffset ) ;
+			}
+			else
+				throw( e ) ;
+		}
+
+		var oSel = this.Window.getSelection() ;
+		oSel.removeAllRanges() ;
+
+		// We must add a clone otherwise Firefox will have rendering issues.
+		oSel.addRange( oDocRange ) ;
+	}
+}
+
+// Not compatible with bookmark created with CreateBookmark2.
+// The bookmark nodes will be deleted from the document.
+FCKDomRange.prototype.SelectBookmark = function( bookmark )
+{
+	var domRange = this.Window.document.createRange() ;
+
+	var startNode	= this.GetBookmarkNode( bookmark, true ) ;
+	var endNode		= this.GetBookmarkNode( bookmark, false ) ;
+
+	domRange.setStart( startNode.parentNode, FCKDomTools.GetIndexOf( startNode ) ) ;
+	FCKDomTools.RemoveNode( startNode ) ;
+
+	if ( endNode )
+	{
+		domRange.setEnd( endNode.parentNode, FCKDomTools.GetIndexOf( endNode ) ) ;
+		FCKDomTools.RemoveNode( endNode ) ;
+	}
+
+	var selection = this.Window.getSelection() ;
+	selection.removeAllRanges() ;
+	selection.addRange( domRange ) ;
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckdomrange_ie.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckdomrange_ie.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckdomrange_ie.js	(revision 1280)
@@ -0,0 +1,199 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Class for working with a selection range, much like the W3C DOM Range, but
+ * it is not intended to be an implementation of the W3C interface.
+ * (IE Implementation)
+ */
+
+FCKDomRange.prototype.MoveToSelection = function()
+{
+	this.Release( true ) ;
+
+	this._Range = new FCKW3CRange( this.Window.document ) ;
+
+	var oSel = this.Window.document.selection ;
+
+	if ( oSel.type != 'Control' )
+	{
+		var eMarkerStart	= this._GetSelectionMarkerTag( true ) ;
+		var eMarkerEnd		= this._GetSelectionMarkerTag( false ) ;
+
+		if ( !eMarkerStart && !eMarkerEnd )
+		{
+			this._Range.setStart( this.Window.document.body, 0 ) ;
+			this._UpdateElementInfo() ;
+			return ;
+		}
+
+		// Set the start boundary.
+		this._Range.setStart( eMarkerStart.parentNode, FCKDomTools.GetIndexOf( eMarkerStart ) ) ;
+		eMarkerStart.parentNode.removeChild( eMarkerStart ) ;
+
+		// Set the end boundary.
+		this._Range.setEnd( eMarkerEnd.parentNode, FCKDomTools.GetIndexOf( eMarkerEnd ) ) ;
+		eMarkerEnd.parentNode.removeChild( eMarkerEnd ) ;
+
+		this._UpdateElementInfo() ;
+	}
+	else
+	{
+		var oControl = oSel.createRange().item(0) ;
+
+		if ( oControl )
+		{
+			this._Range.setStartBefore( oControl ) ;
+			this._Range.setEndAfter( oControl ) ;
+			this._UpdateElementInfo() ;
+		}
+	}
+}
+
+FCKDomRange.prototype.Select = function()
+{
+	if ( this._Range )
+		this.SelectBookmark( this.CreateBookmark( true ) ) ;
+}
+
+// Not compatible with bookmark created with CreateBookmark2.
+// The bookmark nodes will be deleted from the document.
+FCKDomRange.prototype.SelectBookmark = function( bookmark )
+{
+	var bIsCollapsed = this.CheckIsCollapsed() ;
+	var bIsStartMakerAlone ;
+	var dummySpan ;
+
+	// Create marker tags for the start and end boundaries.
+	var eStartMarker = this.GetBookmarkNode( bookmark, true ) ;
+	
+	if ( !eStartMarker )
+		return ;
+
+	var eEndMarker ;
+	if ( !bIsCollapsed )
+		eEndMarker = this.GetBookmarkNode( bookmark, false ) ;
+
+	// Create the main range which will be used for the selection.
+	var oIERange = this.Window.document.body.createTextRange() ;
+
+	// Position the range at the start boundary.
+	oIERange.moveToElementText( eStartMarker ) ;
+	oIERange.moveStart( 'character', 1 ) ;
+
+	if ( eEndMarker )
+	{
+		// Create a tool range for the end.
+		var oIERangeEnd = this.Window.document.body.createTextRange() ;
+
+		// Position the tool range at the end.
+		oIERangeEnd.moveToElementText( eEndMarker ) ;
+
+		// Move the end boundary of the main range to match the tool range.
+		oIERange.setEndPoint( 'EndToEnd', oIERangeEnd ) ;
+		oIERange.moveEnd( 'character', -1 ) ;
+	}
+	else
+	{
+		bIsStartMakerAlone = ( !eStartMarker.previousSibling || eStartMarker.previousSibling.nodeName.toLowerCase() == 'br' ) && !eStartMarker.nextSibing ;
+		
+		// Append a temporary <span>&nbsp;</span> before the selection.
+		// This is needed to avoid IE destroying selections inside empty
+		// inline elements, like <b></b> (#253).
+		// It is also needed when placing the selection right after an inline
+		// element to avoid the selection moving inside of it.
+		dummySpan = this.Window.document.createElement( 'span' ) ;
+		dummySpan.innerHTML = '&#65279;' ;	// Zero Width No-Break Space (U+FEFF). See #1359.
+		eStartMarker.parentNode.insertBefore( dummySpan, eStartMarker ) ;
+		
+		if ( bIsStartMakerAlone )
+		{
+			// To expand empty blocks or line spaces after <br>, we need
+			// instead to have any char, which will be later deleted using the
+			// selection.
+			// \ufeff = Zero Width No-Break Space (U+FEFF). See #1359.
+			eStartMarker.parentNode.insertBefore( this.Window.document.createTextNode( '\ufeff' ), eStartMarker ) ;
+		}
+	}
+	
+	if ( !this._Range )
+		this._Range = this.CreateRange() ;
+
+	// Remove the markers (reset the position, because of the changes in the DOM tree).
+	this._Range.setStartBefore( eStartMarker ) ;
+	eStartMarker.parentNode.removeChild( eStartMarker ) ;
+
+	if ( bIsCollapsed )
+	{
+		if ( bIsStartMakerAlone )
+		{
+			// Move the selection start to include the temporary &nbsp;.
+			oIERange.moveStart( 'character', -1 ) ;
+			
+			oIERange.select() ;
+
+			// Remove our temporary stuff.
+			this.Window.document.selection.clear() ;
+		}
+		else
+			oIERange.select() ;
+
+		FCKDomTools.RemoveNode( dummySpan ) ;
+	}
+	else
+	{
+		this._Range.setEndBefore( eEndMarker ) ;
+		eEndMarker.parentNode.removeChild( eEndMarker ) ;
+		oIERange.select() ;
+	}
+}
+
+FCKDomRange.prototype._GetSelectionMarkerTag = function( toStart )
+{
+	var doc = this.Window.document ;
+	var selection = doc.selection ;
+
+	// Get a range for the start boundary.
+	var oRange ;
+
+	// IE may throw an "unspecified error" on some cases (it happened when
+	// loading _samples/default.html), so try/catch.
+	try
+	{
+		oRange = selection.createRange() ;
+	}
+	catch (e)
+	{
+		return null ;
+	}
+
+	// IE might take the range object to the main window instead of inside the editor iframe window.
+	// This is known to happen when the editor window has not been selected before (See #933).
+	// We need to avoid that.
+	if ( oRange.parentElement().document != doc )
+		return null ;
+
+	oRange.collapse( toStart === true ) ;
+
+	// Paste a marker element at the collapsed range and get it from the DOM.
+	var sMarkerId = 'fck_dom_range_temp_' + (new Date()).valueOf() + '_' + Math.floor(Math.random()*1000) ;
+	oRange.pasteHTML( '<span id="' + sMarkerId + '"></span>' ) ;
+
+	return doc.getElementById( sMarkerId ) ;
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckdomrangeinterator.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckdomrangeinterator.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckdomrangeinterator.js	(revision 1280)
@@ -0,0 +1,271 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This class can be used to interate through nodes inside a range.
+ *
+ * During interation, the provided range can become invalid, due to document
+ * mutations, so CreateBookmark() used to restore it after processing, if
+ * needed.
+ */
+
+var FCKDomRangeInterator = function( range )
+{
+	/**
+	 * The FCKDomRange object that marks the interation boundaries.
+	 */
+	this.Range = range ;
+
+	/**
+	 * Indicates that <br> elements must be used as paragraph boundaries.
+	 */
+	this.ForceBrBreak = false ;
+	
+	/**
+	 * Guarantees that the interator will always return "real" block elements.
+	 * If "false", elements like <li>, <th> and <td> are returned. If "true", a
+	 * dedicated block element block element will be created inside those
+	 * elements to hold the selected content.
+	 */
+	this.EnforceRealBlocks = false ;
+}
+
+FCKDomRangeInterator.CreateFromSelection = function( targetWindow )
+{
+	var range = new FCKDomRange( targetWindow ) ;
+	range.MoveToSelection() ;
+	return new FCKDomRangeInterator( range ) ;
+}
+
+FCKDomRangeInterator.prototype =
+{
+	/**
+	 * Get the next paragraph element. It automatically breaks the document
+	 * when necessary to generate block elements for the paragraphs.
+	 */
+	GetNextParagraph : function()
+	{
+		var block ;
+		var range ;
+		var isLast ;
+
+		var boundarySet = this.ForceBrBreak ? FCKListsLib.ListBoundaries : FCKListsLib.BlockBoundaries ;
+
+		// This is the first interaction. Let's initialize it.
+		if ( !this._LastNode )
+		{
+			var range = this.Range.Clone() ;
+			range.Expand( this.ForceBrBreak ? 'list_contents' : 'block_contents' ) ;
+
+			this._NextNode = range.StartNode ;
+			this._LastNode = range.EndNode ;
+
+			// Let's reuse this variable.
+			range = null ;
+		}
+
+		var currentNode = this._NextNode ;
+		var lastNode = this._LastNode ;
+
+		while ( currentNode )
+		{
+			// closeRange indicates that a paragraph boundary has been found,
+			// so the range can be closed.
+			var closeRange = false ;
+
+			// includeNode indicates that the current node is good to be part
+			// of the range. By default, any non-element node is ok for it.
+			var includeNode = ( currentNode.nodeType != 1 ) ;
+
+			var continueFromSibling = false ;
+
+			// If it is an element node, let's check if it can be part of the
+			// range.
+			if ( !includeNode )
+			{
+				var nodeName = currentNode.nodeName.toLowerCase() ;
+
+				if ( boundarySet[ nodeName ] )
+				{
+					// <br> boundaries must be part of the range. It will
+					// happen only if ForceBrBreak.
+					if ( nodeName == 'br' )
+						includeNode = true ;
+					else if ( !range && currentNode.childNodes.length == 0 && nodeName != 'hr' )
+					{
+						// If we have found an empty block, and haven't started
+						// the range yet, it means we must return this block.
+						block = currentNode ;
+						break ;
+					}
+
+					closeRange = true ;
+				}
+				else
+				{
+					// If we have child nodes, let's check them.
+					if ( currentNode.firstChild )
+					{
+						// If we don't have a range yet, let's start it.
+						if ( !range )
+						{
+							range = new FCKDomRange( this.Range.Window ) ;
+							range.SetStart( currentNode, 3, true ) ;
+						}
+
+						currentNode = currentNode.firstChild ;
+						continue ;
+					}
+					includeNode = true ;
+				}
+			}
+			else if ( currentNode.nodeType == 3 )
+			{
+				// Ignore normal whitespaces (i.e. not including &nbsp; or
+				// other unicode whitespaces) before/after a block node.
+				if ( /^[\r\n\t ]+$/.test( currentNode.nodeValue ) )
+					includeNode = false ;
+			}
+
+			// The current node is good to be part of the range and we are
+			// starting a new range, initialize it first.
+			if ( includeNode && !range )
+			{
+				range = new FCKDomRange( this.Range.Window ) ;
+				range.SetStart( currentNode, 3, true ) ;
+			}
+
+			// The last node has been found.		
+			isLast = ( currentNode == lastNode ) ;
+
+			// If we are in an element boundary, let's check if it is time
+			// to close the range, otherwise we include the parent within it.
+			if ( range && !closeRange )
+			{
+				var parentNode = currentNode.parentNode ;
+				while ( currentNode == parentNode.lastChild && !isLast )
+				{
+					if ( boundarySet[ parentNode.nodeName.toLowerCase() ] )
+					{
+						closeRange = true ;
+						break ;
+					}
+
+					currentNode = parentNode ;
+					continueFromSibling = true ;
+				}
+			}
+
+			// Now finally include the node.
+			if ( includeNode )
+				range.SetEnd( currentNode, 4, true ) ;
+
+			// We have found a block boundary. Let's close the range and move out of the
+			// loop.
+			if ( ( closeRange && range ) || isLast )
+			{
+				if ( range )
+					range._UpdateElementInfo() ;
+
+				break ;
+			}
+
+			currentNode = FCKDomTools.GetNextSourceNode( currentNode, continueFromSibling ) ;
+		}
+
+		// Now, based on the processed range, look for (or create) the block to be returned.
+		if ( !block )
+		{
+			// If no range has been found, this is the end.
+			if ( !range )
+			{
+				this._NextNode = null ;
+				return null ;
+			}
+
+			block = range.StartBlock ;
+
+			if ( !block
+				&& !this.EnforceRealBlocks
+				&& range.StartBlockLimit.nodeName.IEquals( 'DIV', 'TH', 'TD' )
+				&& range.CheckStartOfBlock()
+				&& range.CheckEndOfBlock() )
+			{
+				block = range.StartBlockLimit ;
+			}
+			else if ( !block || ( this.EnforceRealBlocks && block.nodeName.toLowerCase() == 'li' ) )
+			{
+				// Create the fixed block.
+				block = this.Range.Window.document.createElement( FCKConfig.EnterMode == 'p' ? 'p' : 'div' ) ;
+
+				// Move the contents of the temporary range to the fixed block.
+				range.ExtractContents().AppendTo( block ) ;
+				FCKDomTools.TrimNode( block ) ;
+
+				// Insert the fixed block into the DOM.
+				range.InsertNode( block ) ;
+				
+				// When fixing a block, we can safely remove any remaining <br>
+				// before of it.
+				var previousSibling = block.previousSibling ;
+				if ( previousSibling && previousSibling.nodeType == 1 && previousSibling.nodeName.toLowerCase() == 'br' )
+					previousSibling.parentNode.removeChild( previousSibling ) ;
+			}
+			else if ( block.nodeName.toLowerCase() != 'li' )
+			{
+				// If the range doesn't includes the entire contents of the
+				// block, we must split it, isolating the range in a dedicated
+				// block.
+				if ( !range.CheckStartOfBlock() || !range.CheckEndOfBlock() )
+				{
+					// The resulting block will be a clone of the current one.
+					block = block.cloneNode( false ) ;
+
+					// Extract the range contents, moving it to the new block.
+					range.ExtractContents().AppendTo( block ) ;
+					FCKDomTools.TrimNode( block ) ;
+
+					// Split the block. At this point, the range will be in the
+					// right position for our intents.
+					range.SplitBlock() ;
+
+					// Insert the new block into the DOM.
+					range.InsertNode( block ) ;
+				}
+			}
+			else if ( !isLast )
+			{
+				// LIs are returned as is, with all their children (due to the
+				// nested lists). But, the next node is the node right after
+				// the current range, which could be an <li> child (nested
+				// lists) or the next sibling <li>.
+				
+				this._NextNode = FCKDomTools.GetNextSourceNode( range.EndNode, true ) ;
+				return block ;
+			}
+		}
+
+		// Get a reference for the next element. This is important because the
+		// above block can be removed or changed, so we can rely on it for the
+		// next interation.
+		this._NextNode = isLast ? null : FCKDomTools.GetNextSourceNode( block, true ) ;
+
+		return block ;
+	}
+} ;
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckdomrangeiterator.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckdomrangeiterator.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckdomrangeiterator.js	(revision 1280)
@@ -0,0 +1,306 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This class can be used to interate through nodes inside a range.
+ *
+ * During interation, the provided range can become invalid, due to document
+ * mutations, so CreateBookmark() used to restore it after processing, if
+ * needed.
+ */
+
+var FCKDomRangeIterator = function( range )
+{
+	/**
+	 * The FCKDomRange object that marks the interation boundaries.
+	 */
+	this.Range = range ;
+
+	/**
+	 * Indicates that <br> elements must be used as paragraph boundaries.
+	 */
+	this.ForceBrBreak = false ;
+
+	/**
+	 * Guarantees that the iterator will always return "real" block elements.
+	 * If "false", elements like <li>, <th> and <td> are returned. If "true", a
+	 * dedicated block element block element will be created inside those
+	 * elements to hold the selected content.
+	 */
+	this.EnforceRealBlocks = false ;
+}
+
+FCKDomRangeIterator.CreateFromSelection = function( targetWindow )
+{
+	var range = new FCKDomRange( targetWindow ) ;
+	range.MoveToSelection() ;
+	return new FCKDomRangeIterator( range ) ;
+}
+
+FCKDomRangeIterator.prototype =
+{
+	/**
+	 * Get the next paragraph element. It automatically breaks the document
+	 * when necessary to generate block elements for the paragraphs.
+	 */
+	GetNextParagraph : function()
+	{
+		// The block element to be returned.
+		var block ;
+
+		// The range object used to identify the paragraph contents.
+		var range ;
+
+		// Indicated that the current element in the loop is the last one.
+		var isLast ;
+
+		// Instructs to cleanup remaining BRs.
+		var removePreviousBr ;
+		var removeLastBr ;
+
+		var boundarySet = this.ForceBrBreak ? FCKListsLib.ListBoundaries : FCKListsLib.BlockBoundaries ;
+
+		// This is the first iteration. Let's initialize it.
+		if ( !this._LastNode )
+		{
+			var range = this.Range.Clone() ;
+			range.Expand( this.ForceBrBreak ? 'list_contents' : 'block_contents' ) ;
+
+			this._NextNode = range.GetTouchedStartNode() ;
+			this._LastNode = range.GetTouchedEndNode() ;
+
+			// Let's reuse this variable.
+			range = null ;
+		}
+
+		var currentNode = this._NextNode ;
+		var lastNode = this._LastNode ;
+
+		while ( currentNode )
+		{
+			// closeRange indicates that a paragraph boundary has been found,
+			// so the range can be closed.
+			var closeRange = false ;
+
+			// includeNode indicates that the current node is good to be part
+			// of the range. By default, any non-element node is ok for it.
+			var includeNode = ( currentNode.nodeType != 1 ) ;
+
+			var continueFromSibling = false ;
+
+			// If it is an element node, let's check if it can be part of the
+			// range.
+			if ( !includeNode )
+			{
+				var nodeName = currentNode.nodeName.toLowerCase() ;
+
+				if ( boundarySet[ nodeName ] )
+				{
+					// <br> boundaries must be part of the range. It will
+					// happen only if ForceBrBreak.
+					if ( nodeName == 'br' )
+						includeNode = true ;
+					else if ( !range && currentNode.childNodes.length == 0 && nodeName != 'hr' )
+					{
+						// If we have found an empty block, and haven't started
+						// the range yet, it means we must return this block.
+						block = currentNode ;
+						isLast = currentNode == lastNode ;
+						break ;
+					}
+
+					closeRange = true ;
+				}
+				else
+				{
+					// If we have child nodes, let's check them.
+					if ( currentNode.firstChild )
+					{
+						// If we don't have a range yet, let's start it.
+						if ( !range )
+						{
+							range = new FCKDomRange( this.Range.Window ) ;
+							range.SetStart( currentNode, 3, true ) ;
+						}
+
+						currentNode = currentNode.firstChild ;
+						continue ;
+					}
+					includeNode = true ;
+				}
+			}
+			else if ( currentNode.nodeType == 3 )
+			{
+				// Ignore normal whitespaces (i.e. not including &nbsp; or
+				// other unicode whitespaces) before/after a block node.
+				if ( /^[\r\n\t ]+$/.test( currentNode.nodeValue ) )
+					includeNode = false ;
+			}
+
+			// The current node is good to be part of the range and we are
+			// starting a new range, initialize it first.
+			if ( includeNode && !range )
+			{
+				range = new FCKDomRange( this.Range.Window ) ;
+				range.SetStart( currentNode, 3, true ) ;
+			}
+
+			// The last node has been found.
+			isLast = ( ( !closeRange || includeNode ) && currentNode == lastNode ) ;
+//			isLast = ( currentNode == lastNode && ( currentNode.nodeType != 1 || currentNode.childNodes.length == 0 ) ) ;
+
+			// If we are in an element boundary, let's check if it is time
+			// to close the range, otherwise we include the parent within it.
+			if ( range && !closeRange )
+			{
+				while ( !currentNode.nextSibling && !isLast )
+				{
+					var parentNode = currentNode.parentNode ;
+
+					if ( boundarySet[ parentNode.nodeName.toLowerCase() ] )
+					{
+						closeRange = true ;
+						isLast = isLast || ( parentNode == lastNode ) ;
+						break ;
+					}
+
+					currentNode = parentNode ;
+					isLast = ( currentNode == lastNode ) ;
+					continueFromSibling = true ;
+				}
+			}
+
+			// Now finally include the node.
+			if ( includeNode )
+				range.SetEnd( currentNode, 4, true ) ;
+
+			// We have found a block boundary. Let's close the range and move out of the
+			// loop.
+			if ( ( closeRange || isLast ) && range )
+			{
+				range._UpdateElementInfo() ;
+				
+				if ( range.StartNode == range.EndNode 
+						&& range.StartNode.parentNode == range.StartBlockLimit 
+						&& range.StartNode.getAttribute && range.StartNode.getAttribute( '_fck_bookmark' ) )
+					range = null ;
+				else
+					break ;
+			}
+			
+			if ( isLast )
+				break ;
+
+			currentNode = FCKDomTools.GetNextSourceNode( currentNode, continueFromSibling, null, lastNode ) ;
+		}
+
+		// Now, based on the processed range, look for (or create) the block to be returned.
+		if ( !block )
+		{
+			// If no range has been found, this is the end.
+			if ( !range )
+			{
+				this._NextNode = null ;
+				return null ;
+			}
+
+			block = range.StartBlock ;
+
+			if ( !block
+				&& !this.EnforceRealBlocks
+				&& range.StartBlockLimit.nodeName.IEquals( 'DIV', 'TH', 'TD' )
+				&& range.CheckStartOfBlock()
+				&& range.CheckEndOfBlock() )
+			{
+				block = range.StartBlockLimit ;
+			}
+			else if ( !block || ( this.EnforceRealBlocks && block.nodeName.toLowerCase() == 'li' ) )
+			{
+				// Create the fixed block.
+				block = this.Range.Window.document.createElement( FCKConfig.EnterMode == 'p' ? 'p' : 'div' ) ;
+
+				// Move the contents of the temporary range to the fixed block.
+				range.ExtractContents().AppendTo( block ) ;
+				FCKDomTools.TrimNode( block ) ;
+
+				// Insert the fixed block into the DOM.
+				range.InsertNode( block ) ;
+
+				removePreviousBr = true ;
+				removeLastBr = true ;
+			}
+			else if ( block.nodeName.toLowerCase() != 'li' )
+			{
+				// If the range doesn't includes the entire contents of the
+				// block, we must split it, isolating the range in a dedicated
+				// block.
+				if ( !range.CheckStartOfBlock() || !range.CheckEndOfBlock() )
+				{
+					// The resulting block will be a clone of the current one.
+					block = block.cloneNode( false ) ;
+
+					// Extract the range contents, moving it to the new block.
+					range.ExtractContents().AppendTo( block ) ;
+					FCKDomTools.TrimNode( block ) ;
+
+					// Split the block. At this point, the range will be in the
+					// right position for our intents.
+					var splitInfo = range.SplitBlock() ;
+
+					removePreviousBr = !splitInfo.WasStartOfBlock ;
+					removeLastBr = !splitInfo.WasEndOfBlock ;
+
+					// Insert the new block into the DOM.
+					range.InsertNode( block ) ;
+				}
+			}
+			else if ( !isLast )
+			{
+				// LIs are returned as is, with all their children (due to the
+				// nested lists). But, the next node is the node right after
+				// the current range, which could be an <li> child (nested
+				// lists) or the next sibling <li>.
+
+				this._NextNode = block == lastNode ? null : FCKDomTools.GetNextSourceNode( range.EndNode, true, null, lastNode ) ;
+				return block ;
+			}
+		}
+
+		if ( removePreviousBr )
+		{
+			var previousSibling = block.previousSibling ;
+			if ( previousSibling && previousSibling.nodeType == 1 && previousSibling.nodeName.toLowerCase() == 'br' )
+				previousSibling.parentNode.removeChild( previousSibling ) ;
+		}
+
+		if ( removeLastBr )
+		{
+			var lastChild = block.lastChild ;
+			if ( lastChild && lastChild.nodeType == 1 && lastChild.nodeName.toLowerCase() == 'br' )
+				block.removeChild( lastChild ) ;
+		}
+
+		// Get a reference for the next element. This is important because the
+		// above block can be removed or changed, so we can rely on it for the
+		// next interation.
+		this._NextNode = ( isLast || block == lastNode ) ? null : FCKDomTools.GetNextSourceNode( block, true, null, lastNode ) ;
+
+		return block ;
+	}
+} ;
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckeditingarea.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckeditingarea.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckeditingarea.js	(revision 1280)
@@ -0,0 +1,344 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKEditingArea Class: renders an editable area.
+ */
+
+/**
+ * @constructor
+ * @param {String} targetElement The element that will hold the editing area. Any child element present in the target will be deleted.
+ */
+var FCKEditingArea = function( targetElement )
+{
+	this.TargetElement = targetElement ;
+	this.Mode = FCK_EDITMODE_WYSIWYG ;
+
+	if ( FCK.IECleanup )
+		FCK.IECleanup.AddItem( this, FCKEditingArea_Cleanup ) ;
+}
+
+
+/**
+ * @param {String} html The complete HTML for the page, including DOCTYPE and the <html> tag.
+ */
+FCKEditingArea.prototype.Start = function( html, secondCall )
+{
+	var eTargetElement	= this.TargetElement ;
+	var oTargetDocument	= FCKTools.GetElementDocument( eTargetElement ) ;
+
+	// Remove all child nodes from the target.
+	var oChild ;
+	while( ( oChild = eTargetElement.firstChild ) )		// Only one "=".
+	{
+		// Set innerHTML = '' to avoid memory leak.
+		if ( oChild.contentWindow )
+			oChild.contentWindow.document.body.innerHTML = '' ;
+
+		eTargetElement.removeChild( oChild ) ;
+	}
+
+	if ( this.Mode == FCK_EDITMODE_WYSIWYG )
+	{
+		// Create the editing area IFRAME.
+		var oIFrame = this.IFrame = oTargetDocument.createElement( 'iframe' ) ;
+		
+		// Firefox will render the tables inside the body in Quirks mode if the 
+		// source of the iframe is set to javascript. see #515
+		if ( !FCKBrowserInfo.IsGecko )
+			oIFrame.src = 'javascript:void(0)' ;
+		
+		oIFrame.frameBorder = 0 ;
+		oIFrame.width = oIFrame.height = '100%' ;
+
+		// Append the new IFRAME to the target.
+		eTargetElement.appendChild( oIFrame ) ;
+
+		// IE has a bug with the <base> tag... it must have a </base> closer,
+		// otherwise the all successive tags will be set as children nodes of the <base>.
+		if ( FCKBrowserInfo.IsIE )
+			html = html.replace( /(<base[^>]*?)\s*\/?>(?!\s*<\/base>)/gi, '$1></base>' ) ;
+		else if ( !secondCall )
+		{
+			// Gecko moves some tags out of the body to the head, so we must use
+			// innerHTML to set the body contents (SF BUG 1526154).
+
+			// Extract the BODY contents from the html.
+			var oMatchBefore = html.match( FCKRegexLib.BeforeBody ) ;
+			var oMatchAfter = html.match( FCKRegexLib.AfterBody ) ;
+
+			if ( oMatchBefore && oMatchAfter )
+			{
+				var sBody = html.substr( oMatchBefore[1].length,
+					       html.length - oMatchBefore[1].length - oMatchAfter[1].length ) ;	// This is the BODY tag contents.
+
+				html =
+					oMatchBefore[1] +			// This is the HTML until the <body...> tag, inclusive.
+					'&nbsp;' +
+					oMatchAfter[1] ;			// This is the HTML from the </body> tag, inclusive.
+
+				// If nothing in the body, place a BOGUS tag so the cursor will appear.
+				if ( FCKBrowserInfo.IsGecko && ( sBody.length == 0 || FCKRegexLib.EmptyParagraph.test( sBody ) ) )
+					sBody = '<br type="_moz">' ;
+
+				this._BodyHTML = sBody ;
+
+			}
+			else
+				this._BodyHTML = html ;			// Invalid HTML input.
+		}
+
+		// Get the window and document objects used to interact with the newly created IFRAME.
+		this.Window = oIFrame.contentWindow ;
+
+		// IE: Avoid JavaScript errors thrown by the editing are source (like tags events).
+		// TODO: This error handler is not being fired.
+		// this.Window.onerror = function() { alert( 'Error!' ) ; return true ; }
+
+		var oDoc = this.Document = this.Window.document ;
+
+		oDoc.open() ;
+		oDoc.write( html ) ;
+		oDoc.close() ;
+
+		// Firefox 1.0.x is buggy... ohh yes... so let's do it two times and it
+		// will magically work.
+		if ( FCKBrowserInfo.IsGecko10 && !secondCall )
+		{
+			this.Start( html, true ) ;
+			return ;
+		}
+
+		this.Window._FCKEditingArea = this ;
+
+		// FF 1.0.x is buggy... we must wait a lot to enable editing because
+		// sometimes the content simply disappears, for example when pasting
+		// "bla1!<img src='some_url'>!bla2" in the source and then switching
+		// back to design.
+		if ( FCKBrowserInfo.IsGecko10 )
+			this.Window.setTimeout( FCKEditingArea_CompleteStart, 500 ) ;
+		else
+			FCKEditingArea_CompleteStart.call( this.Window ) ;
+	}
+	else
+	{
+		var eTextarea = this.Textarea = oTargetDocument.createElement( 'textarea' ) ;
+		eTextarea.className = 'SourceField' ;
+		eTextarea.dir = 'ltr' ;
+		FCKDomTools.SetElementStyles( eTextarea, 
+			{ 
+				width	: '100%', 
+				height	: '100%', 
+				border	: 'none', 
+				resize	: 'none',
+				outline	: 'none'
+			} ) ;
+		eTargetElement.appendChild( eTextarea ) ;
+
+		eTextarea.value = html  ;
+
+		// Fire the "OnLoad" event.
+		FCKTools.RunFunction( this.OnLoad ) ;
+	}
+}
+
+// "this" here is FCKEditingArea.Window
+function FCKEditingArea_CompleteStart()
+{
+	// On Firefox, the DOM takes a little to become available. So we must wait for it in a loop.
+	if ( !this.document.body )
+	{
+		this.setTimeout( FCKEditingArea_CompleteStart, 50 ) ;
+		return ;
+	}
+
+	var oEditorArea = this._FCKEditingArea ;
+	
+	oEditorArea.MakeEditable() ;
+
+	// Fire the "OnLoad" event.
+	FCKTools.RunFunction( oEditorArea.OnLoad ) ;
+}
+
+FCKEditingArea.prototype.MakeEditable = function()
+{
+	var oDoc = this.Document ;
+
+	if ( FCKBrowserInfo.IsIE )
+	{
+		// Kludge for #141 and #523
+		oDoc.body.disabled = true ;
+		oDoc.body.contentEditable = true ;
+		oDoc.body.removeAttribute( "disabled" ) ;
+
+		/* The following commands don't throw errors, but have no effect.
+		oDoc.execCommand( 'AutoDetect', false, false ) ;
+		oDoc.execCommand( 'KeepSelection', false, true ) ;
+		*/
+	}
+	else
+	{
+		try
+		{
+			// Disable Firefox 2 Spell Checker.
+			oDoc.body.spellcheck = ( this.FFSpellChecker !== false ) ;
+
+			if ( this._BodyHTML )
+			{
+				oDoc.body.innerHTML = this._BodyHTML ;
+				this._BodyHTML = null ;
+			}
+
+			oDoc.designMode = 'on' ;
+
+			// Tell Gecko to use or not the <SPAN> tag for the bold, italic and underline.
+			try
+			{
+				oDoc.execCommand( 'styleWithCSS', false, FCKConfig.GeckoUseSPAN ) ;
+			}
+			catch (e)
+			{
+				// As evidenced here, useCSS is deprecated in favor of styleWithCSS:
+				// http://www.mozilla.org/editor/midas-spec.html
+				oDoc.execCommand( 'useCSS', false, !FCKConfig.GeckoUseSPAN ) ;
+			}
+
+			// Analyzing Firefox 1.5 source code, it seams that there is support for a
+			// "insertBrOnReturn" command. Applying it gives no error, but it doesn't
+			// gives the same behavior that you have with IE. It works only if you are
+			// already inside a paragraph and it doesn't render correctly in the first enter.
+			// oDoc.execCommand( 'insertBrOnReturn', false, false ) ;
+
+			// Tell Gecko (Firefox 1.5+) to enable or not live resizing of objects (by Alfonso Martinez)
+			oDoc.execCommand( 'enableObjectResizing', false, !FCKConfig.DisableObjectResizing ) ;
+
+			// Disable the standard table editing features of Firefox.
+			oDoc.execCommand( 'enableInlineTableEditing', false, !FCKConfig.DisableFFTableHandles ) ;
+		}
+		catch (e) 
+		{
+			// In Firefox if the iframe is initially hidden it can't be set to designMode and it raises an exception
+			// So we set up a DOM Mutation event Listener on the HTML, as it will raise several events when the document is  visible again
+			FCKTools.AddEventListener( this.Window.frameElement, 'DOMAttrModified', FCKEditingArea_Document_AttributeNodeModified ) ;
+		}
+
+	}
+}
+
+// This function processes the notifications of the DOM Mutation event on the document
+// We use it to know that the document will be ready to be editable again (or we hope so)
+function FCKEditingArea_Document_AttributeNodeModified( evt )
+{
+	var editingArea = evt.currentTarget.contentWindow._FCKEditingArea ;
+	
+	// We want to run our function after the events no longer fire, so we can know that it's a stable situation
+	if ( editingArea._timer )
+		window.clearTimeout( editingArea._timer ) ;
+
+	editingArea._timer = FCKTools.SetTimeout( FCKEditingArea_MakeEditableByMutation, 1000, editingArea ) ;	
+}
+
+// This function ideally should be called after the document is visible, it does clean up of the
+// mutation tracking and tries again to make the area editable.
+function FCKEditingArea_MakeEditableByMutation()
+{
+	// Clean up
+	delete this._timer ;
+	// Now we don't want to keep on getting this event
+	FCKTools.RemoveEventListener( this.Window.frameElement, 'DOMAttrModified', FCKEditingArea_Document_AttributeNodeModified ) ;
+	// Let's try now to set the editing area editable
+	// If it fails it will set up the Mutation Listener again automatically
+	this.MakeEditable() ;
+}
+
+FCKEditingArea.prototype.Focus = function()
+{
+	try
+	{
+		if ( this.Mode == FCK_EDITMODE_WYSIWYG )
+		{
+			// The following check is important to avoid IE entering in a focus loop. Ref:
+			// http://sourceforge.net/tracker/index.php?func=detail&aid=1567060&group_id=75348&atid=543653
+			if ( FCKBrowserInfo.IsIE && this.Document.hasFocus() )
+				this._EnsureFocusIE() ;
+
+			if ( FCKBrowserInfo.IsSafari )
+				this.IFrame.focus() ;
+			else
+			{
+				this.Window.focus() ;
+
+				// In IE it can happen that the document is in theory focused but the active element is outside it
+				if ( FCKBrowserInfo.IsIE )
+					this._EnsureFocusIE() ;
+			}
+		}
+		else
+		{
+			var oDoc = FCKTools.GetElementDocument( this.Textarea ) ;
+			if ( (!oDoc.hasFocus || oDoc.hasFocus() ) && oDoc.activeElement == this.Textarea )
+				return ;
+
+			this.Textarea.focus() ;
+		}
+	}
+	catch(e) {}
+}
+
+FCKEditingArea.prototype._EnsureFocusIE = function()
+{
+	// In IE it can happen that the document is in theory focused but the active element is outside it
+	this.Document.body.setActive() ;
+
+	// Kludge for #141... yet more code to workaround IE bugs
+	var range = this.Document.selection.createRange() ;
+
+	// Only apply the fix when in a block and the block is empty.
+	var parentNode = range.parentElement() ;
+
+	if ( ! ( parentNode.childNodes.length == 0 && ( 
+					FCKListsLib.BlockElements[parentNode.nodeName.toLowerCase()] || 
+					FCKListsLib.NonEmptyBlockElements[parentNode.nodeName.toLowerCase()] ) ) )
+		return ;
+
+	var oldLength = range.text.length ;
+	range.moveEnd( "character", 1 ) ;
+	range.select() ;
+	if ( range.text.length > oldLength )
+	{
+		range.moveEnd( "character", -1 ) ;
+		range.select() ;
+	}
+}
+
+function FCKEditingArea_Cleanup()
+{
+	if ( this.Document )
+		this.Document.body.innerHTML = "" ;
+	this.TargetElement = null ;
+	this.IFrame = null ;
+	this.Document = null ;
+	this.Textarea = null ;
+
+	if ( this.Window )
+	{
+		this.Window._FCKEditingArea = null ;
+		this.Window = null ;
+	}
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckelementpath.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckelementpath.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckelementpath.js	(revision 1280)
@@ -0,0 +1,70 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Manages the DOM ascensors element list of a specific DOM node
+ * (limited to body, inclusive).
+ */
+
+var FCKElementPath = function( lastNode )
+{
+	var eBlock = null ;
+	var eBlockLimit = null ;
+
+	var aElements = new Array() ;
+
+	var e = lastNode ;
+	while ( e )
+	{
+		if ( e.nodeType == 1 )
+		{
+			if ( !this.LastElement )
+				this.LastElement = e ;
+
+			var sElementName = e.nodeName.toLowerCase() ;
+
+			if ( !eBlockLimit )
+			{
+				if ( !eBlock && FCKListsLib.PathBlockElements[ sElementName ] != null )
+					eBlock = e ;
+
+				if ( FCKListsLib.PathBlockLimitElements[ sElementName ] != null )
+				{
+					// DIV is considered the Block, if no block is available (#525).
+					if ( !eBlock && sElementName == 'div' )
+						eBlock = e ;
+					else
+						eBlockLimit = e ;
+				}
+			}
+
+			aElements.push( e ) ;
+
+			if ( sElementName == 'body' )
+				break ;
+		}
+		e = e.parentNode ;
+	}
+
+	this.Block = eBlock ;
+	this.BlockLimit = eBlockLimit ;
+	this.Elements = aElements ;
+}
+
+
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckenterkey.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckenterkey.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckenterkey.js	(revision 1280)
@@ -0,0 +1,629 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Controls the [Enter] keystroke behavior in a document.
+ */
+
+/*
+ *	Constructor.
+ *		@targetDocument : the target document.
+ *		@enterMode : the behavior for the <Enter> keystroke.
+ *			May be "p", "div", "br". Default is "p".
+ *		@shiftEnterMode : the behavior for the <Shift>+<Enter> keystroke.
+ *			May be "p", "div", "br". Defaults to "br".
+ */
+var FCKEnterKey = function( targetWindow, enterMode, shiftEnterMode, tabSpaces )
+{
+	this.Window			= targetWindow ;
+	this.EnterMode		= enterMode || 'p' ;
+	this.ShiftEnterMode	= shiftEnterMode || 'br' ;
+
+	// Setup the Keystroke Handler.
+	var oKeystrokeHandler = new FCKKeystrokeHandler( false ) ;
+	oKeystrokeHandler._EnterKey = this ;
+	oKeystrokeHandler.OnKeystroke = FCKEnterKey_OnKeystroke ;
+
+	oKeystrokeHandler.SetKeystrokes( [
+		[ 13		, 'Enter' ],
+		[ SHIFT + 13, 'ShiftEnter' ],
+		[ 9 		, 'Tab' ],
+		[ 8			, 'Backspace' ],
+		[ CTRL + 8		, 'CtrlBackspace' ],
+		[ 46		, 'Delete' ]
+	] ) ;
+
+	if ( tabSpaces > 0 )
+	{
+		this.TabText = '' ;
+		while ( tabSpaces-- > 0 )
+			this.TabText += '\xa0' ;
+	}
+
+	oKeystrokeHandler.AttachToElement( targetWindow.document ) ;
+}
+
+
+function FCKEnterKey_OnKeystroke(  keyCombination, keystrokeValue )
+{
+	var oEnterKey = this._EnterKey ;
+
+	try
+	{
+		switch ( keystrokeValue )
+		{
+			case 'Enter' :
+				return oEnterKey.DoEnter() ;
+				break ;
+			case 'ShiftEnter' :
+				return oEnterKey.DoShiftEnter() ;
+				break ;
+			case 'Backspace' :
+				return oEnterKey.DoBackspace() ;
+				break ;
+			case 'Delete' :
+				return oEnterKey.DoDelete() ;
+				break ;
+			case 'Tab' :
+				return oEnterKey.DoTab() ;
+				break ;
+			case 'CtrlBackspace' :
+				return oEnterKey.DoCtrlBackspace() ;
+				break ;
+		}
+	}
+	catch (e)
+	{
+		// If for any reason we are not able to handle it, go
+		// ahead with the browser default behavior.
+	}
+
+	return false ;
+}
+
+/*
+ * Executes the <Enter> key behavior.
+ */
+FCKEnterKey.prototype.DoEnter = function( mode, hasShift )
+{
+	// Save an undo snapshot before doing anything
+	FCKUndo.SaveUndoStep() ;
+
+	this._HasShift = ( hasShift === true ) ;
+
+	var parentElement = FCKSelection.GetParentElement() ;
+	var parentPath = new FCKElementPath( parentElement ) ;
+	var sMode = mode || this.EnterMode ;
+	
+	if ( sMode == 'br' || parentPath.Block && parentPath.Block.tagName.toLowerCase() == 'pre' )
+		return this._ExecuteEnterBr() ;
+	else
+		return this._ExecuteEnterBlock( sMode ) ;
+}
+
+/*
+ * Executes the <Shift>+<Enter> key behavior.
+ */
+FCKEnterKey.prototype.DoShiftEnter = function()
+{
+	return this.DoEnter( this.ShiftEnterMode, true ) ;
+}
+
+/*
+ * Executes the <Backspace> key behavior.
+ */
+FCKEnterKey.prototype.DoBackspace = function()
+{
+	var bCustom = false ;
+
+	// Get the current selection.
+	var oRange = new FCKDomRange( this.Window ) ;
+	oRange.MoveToSelection() ;
+
+	// Kludge for #247
+	if ( FCKBrowserInfo.IsIE && this._CheckIsAllContentsIncluded( oRange, this.Window.document.body ) )
+	{
+		this._FixIESelectAllBug( oRange ) ;
+		return true ;
+	}
+
+	var isCollapsed = oRange.CheckIsCollapsed() ;
+
+	if ( !isCollapsed )
+	{
+		// Bug #327, Backspace with an img selection would activate the default action in IE.
+		// Let's override that with our logic here.
+		if ( FCKBrowserInfo.IsIE && this.Window.document.selection.type.toLowerCase() == "control" )
+		{
+			var controls = this.Window.document.selection.createRange() ;
+			for ( var i = controls.length - 1 ; i >= 0 ; i-- )
+			{
+				var el = controls.item( i ) ;
+				el.parentNode.removeChild( el ) ;
+			}
+			return true ;
+		}
+
+		return false ;
+	}
+
+	var oStartBlock = oRange.StartBlock ;
+	var oEndBlock = oRange.EndBlock ;
+
+	// The selection boundaries must be in the same "block limit" element
+	if ( oRange.StartBlockLimit == oRange.EndBlockLimit && oStartBlock && oEndBlock )
+	{
+		if ( !isCollapsed )
+		{
+			var bEndOfBlock = oRange.CheckEndOfBlock() ;
+
+			oRange.DeleteContents() ;
+
+			if ( oStartBlock != oEndBlock )
+			{
+				oRange.SetStart(oEndBlock,1) ;
+				oRange.SetEnd(oEndBlock,1) ;
+
+//				if ( bEndOfBlock )
+//					oEndBlock.parentNode.removeChild( oEndBlock ) ;
+			}
+
+			oRange.Select() ;
+
+			bCustom = ( oStartBlock == oEndBlock ) ;
+		}
+
+		if ( oRange.CheckStartOfBlock() )
+		{
+			var oCurrentBlock = oRange.StartBlock ;
+
+			var ePrevious = FCKDomTools.GetPreviousSourceElement( oCurrentBlock, true, [ 'BODY', oRange.StartBlockLimit.nodeName ], ['UL','OL'] ) ;
+
+			bCustom = this._ExecuteBackspace( oRange, ePrevious, oCurrentBlock ) ;
+		}
+		else if ( FCKBrowserInfo.IsGeckoLike )
+		{
+			// Firefox and Opera (#1095) loose the selection when executing
+			// CheckStartOfBlock, so we must reselect.
+			oRange.Select() ;
+		}
+	}
+
+	oRange.Release() ;
+	return bCustom ;
+}
+
+FCKEnterKey.prototype.DoCtrlBackspace = function()
+{
+	FCKUndo.SaveUndoStep() ;
+	var oRange = new FCKDomRange( this.Window ) ;
+	oRange.MoveToSelection() ;
+	if ( FCKBrowserInfo.IsIE && this._CheckIsAllContentsIncluded( oRange, this.Window.document.body ) )
+	{
+		this._FixIESelectAllBug( oRange ) ;
+		return true ;
+	}
+	return false ;
+}
+
+FCKEnterKey.prototype._ExecuteBackspace = function( range, previous, currentBlock )
+{
+	var bCustom = false ;
+
+	// We could be in a nested LI.
+	if ( !previous && currentBlock && currentBlock.nodeName.IEquals( 'LI' ) && currentBlock.parentNode.parentNode.nodeName.IEquals( 'LI' ) )
+	{
+		this._OutdentWithSelection( currentBlock, range ) ;
+		return true ;
+	}
+
+	if ( previous && previous.nodeName.IEquals( 'LI' ) )
+	{
+		var oNestedList = FCKDomTools.GetLastChild( previous, ['UL','OL'] ) ;
+
+		while ( oNestedList )
+		{
+			previous = FCKDomTools.GetLastChild( oNestedList, 'LI' ) ;
+			oNestedList = FCKDomTools.GetLastChild( previous, ['UL','OL'] ) ;
+		}
+	}
+
+	if ( previous && currentBlock )
+	{
+		// If we are in a LI, and the previous block is not an LI, we must outdent it.
+		if ( currentBlock.nodeName.IEquals( 'LI' ) && !previous.nodeName.IEquals( 'LI' ) )
+		{
+			this._OutdentWithSelection( currentBlock, range ) ;
+			return true ;
+		}
+
+		// Take a reference to the parent for post processing cleanup.
+		var oCurrentParent = currentBlock.parentNode ;
+
+		var sPreviousName = previous.nodeName.toLowerCase() ;
+		if ( FCKListsLib.EmptyElements[ sPreviousName ] != null || sPreviousName == 'table' )
+		{
+			FCKDomTools.RemoveNode( previous ) ;
+			bCustom = true ;
+		}
+		else
+		{
+			// Remove the current block.
+			FCKDomTools.RemoveNode( currentBlock ) ;
+
+			// Remove any empty tag left by the block removal.
+			while ( oCurrentParent.innerHTML.Trim().length == 0 )
+			{
+				var oParent = oCurrentParent.parentNode ;
+				oParent.removeChild( oCurrentParent ) ;
+				oCurrentParent = oParent ;
+			}
+
+			// Cleanup the previous and the current elements.
+			FCKDomTools.LTrimNode( currentBlock ) ;
+			FCKDomTools.RTrimNode( previous ) ;
+
+			// Append a space to the previous.
+			// Maybe it is not always desirable...
+			// previous.appendChild( this.Window.document.createTextNode( ' ' ) ) ;
+
+			// Set the range to the end of the previous element and bookmark it.
+			range.SetStart( previous, 2, true ) ;
+			range.Collapse( true ) ;
+			var oBookmark = range.CreateBookmark() ;
+
+			// Move the contents of the block to the previous element and delete it.
+			// But for some block types (e.g. table), moving the children to the previous block makes no sense.
+			// So a check is needed. (See #1081)
+			if ( ! currentBlock.tagName.IEquals( [ 'TABLE' ] ) )
+				FCKDomTools.MoveChildren( currentBlock, previous ) ;
+
+			// Place the selection at the bookmark.
+			range.MoveToBookmark( oBookmark ) ;
+			range.Select() ;
+
+			bCustom = true ;
+		}
+	}
+
+	return bCustom ;
+}
+
+/*
+ * Executes the <Delete> key behavior.
+ */
+FCKEnterKey.prototype.DoDelete = function()
+{
+	// Save an undo snapshot before doing anything
+	// This is to conform with the behavior seen in MS Word
+	FCKUndo.SaveUndoStep() ;
+
+	// The <Delete> has the same effect as the <Backspace>, so we have the same
+	// results if we just move to the next block and apply the same <Backspace> logic.
+
+	var bCustom = false ;
+
+	// Get the current selection.
+	var oRange = new FCKDomRange( this.Window ) ;
+	oRange.MoveToSelection() ;
+
+	// Kludge for #247
+	if ( FCKBrowserInfo.IsIE && this._CheckIsAllContentsIncluded( oRange, this.Window.document.body ) )
+	{
+		this._FixIESelectAllBug( oRange ) ;
+		return true ;
+	}
+
+	// There is just one special case for collapsed selections at the end of a block.
+	if ( oRange.CheckIsCollapsed() && oRange.CheckEndOfBlock( FCKBrowserInfo.IsGeckoLike ) )
+	{
+		var oCurrentBlock = oRange.StartBlock ;
+		var eCurrentCell = FCKTools.GetElementAscensor( oCurrentBlock, 'td' );
+
+		var eNext = FCKDomTools.GetNextSourceElement( oCurrentBlock, true, [ oRange.StartBlockLimit.nodeName ], 
+				['UL','OL','TR'] ) ;
+
+		// Bug #1323 : if we're in a table cell, and the next node belongs to a different cell, then don't
+		// delete anything.
+		if ( eCurrentCell )
+		{
+			var eNextCell = FCKTools.GetElementAscensor( eNext, 'td' );
+			if ( eNextCell != eCurrentCell )
+				return true ;
+		}
+
+		bCustom = this._ExecuteBackspace( oRange, oCurrentBlock, eNext ) ;
+	}
+
+	oRange.Release() ;
+	return bCustom ;
+}
+
+/*
+ * Executes the <Tab> key behavior.
+ */
+FCKEnterKey.prototype.DoTab = function()
+{
+	var oRange = new FCKDomRange( this.Window );
+	oRange.MoveToSelection() ;
+
+	// If the user pressed <tab> inside a table, we should give him the default behavior ( moving between cells )
+	// instead of giving him more non-breaking spaces. (Bug #973)
+	var node = oRange._Range.startContainer ;
+	while ( node )
+	{
+		if ( node.nodeType == 1 )
+		{
+			var tagName = node.tagName.toLowerCase() ;
+			if ( tagName == "tr" || tagName == "td" || tagName == "th" || tagName == "tbody" || tagName == "table" )
+				return false ;
+			else
+				break ;
+		}
+		node = node.parentNode ;
+	}
+
+	if ( this.TabText )
+	{
+		oRange.DeleteContents() ;
+		oRange.InsertNode( this.Window.document.createTextNode( this.TabText ) ) ;
+		oRange.Collapse( false ) ;
+		oRange.Select() ;
+	}
+	return true ;
+}
+
+FCKEnterKey.prototype._ExecuteEnterBlock = function( blockTag, range )
+{
+	// Get the current selection.
+	var oRange = range || new FCKDomRange( this.Window ) ;
+
+	var oSplitInfo = oRange.SplitBlock() ;
+	
+	if ( oSplitInfo )
+	{
+		// Get the current blocks.
+		var ePreviousBlock	= oSplitInfo.PreviousBlock ;
+		var eNextBlock		= oSplitInfo.NextBlock ;
+
+		var bIsStartOfBlock	= oSplitInfo.WasStartOfBlock ;
+		var bIsEndOfBlock	= oSplitInfo.WasEndOfBlock ;
+
+		// If we have both the previous and next blocks, it means that the
+		// boundaries were on separated blocks, or none of them where on the
+		// block limits (start/end).
+		if ( !oSplitInfo.WasStartOfBlock && !oSplitInfo.WasEndOfBlock )
+		{
+			// Move the selection to the end block.
+			if ( eNextBlock )
+				oRange.MoveToElementEditStart( eNextBlock ) ;
+		}
+		else
+		{
+			if ( bIsStartOfBlock && bIsEndOfBlock && ePreviousBlock.tagName.toUpperCase() == 'LI' )
+			{
+				oRange.MoveToElementStart( ePreviousBlock ) ;
+				this._OutdentWithSelection( ePreviousBlock, oRange ) ;
+				oRange.Release() ;
+				return true ;
+			}
+
+			var eNewBlock ;
+
+			if ( ePreviousBlock )
+			{
+				var sPreviousBlockTag = ePreviousBlock.tagName.toUpperCase() ;
+
+				// If is a header tag, or we are in a Shift+Enter (#77),
+				// create a new block element.
+				if ( this._HasShift || (/^H[1-6]$/).test( sPreviousBlockTag ) )
+					eNewBlock = this.Window.document.createElement( blockTag ) ;
+				else
+				{
+					// Otherwise, duplicate the previous block.
+					eNewBlock = FCKDomTools.CloneElement( ePreviousBlock ) ;
+
+					this._RecreateEndingTree( ePreviousBlock, eNewBlock ) ;
+				}
+			}
+			else if ( eNextBlock )
+			{
+				eNewBlock = FCKDomTools.CloneElement( eNextBlock ) ;
+			}
+			else
+				eNewBlock = this.Window.document.createElement( blockTag ) ;
+
+			if ( FCKBrowserInfo.IsGeckoLike )
+				FCKTools.AppendBogusBr( eNewBlock ) ;
+
+			oRange.InsertNode( eNewBlock ) ;
+
+			// This is tricky, but to make the new block visible correctly
+			// we must select it.
+			if ( FCKBrowserInfo.IsIE )
+			{
+				// Move the selection to the new block.
+				oRange.MoveToNodeContents( eNewBlock ) ;
+				oRange.Select() ;
+			}
+
+			oRange.MoveToElementEditStart( bIsStartOfBlock && !bIsEndOfBlock ? eNextBlock : eNewBlock ) ;
+
+			if ( FCKBrowserInfo.IsGeckoLike )
+				eNewBlock.scrollIntoView( false ) ;
+		}
+
+		oRange.Select() ;
+	}
+
+	// Release the resources used by the range.
+	oRange.Release() ;
+
+	return true ;
+}
+
+FCKEnterKey.prototype._ExecuteEnterBr = function( blockTag )
+{
+	// Get the current selection.
+	var oRange = new FCKDomRange( this.Window ) ;
+	oRange.MoveToSelection() ;
+
+	// The selection boundaries must be in the same "block limit" element.
+	if ( oRange.StartBlockLimit == oRange.EndBlockLimit )
+	{
+		oRange.DeleteContents() ;
+
+		// Get the new selection (it is collapsed at this point).
+		oRange.MoveToSelection() ;
+
+		var bIsStartOfBlock	= oRange.CheckStartOfBlock() ;
+		var bIsEndOfBlock	= oRange.CheckEndOfBlock() ;
+
+		var sStartBlockTag = oRange.StartBlock ? oRange.StartBlock.tagName.toUpperCase() : '' ;
+
+		var bHasShift = this._HasShift ;
+
+		if ( !bHasShift && sStartBlockTag == 'LI' )
+			return this._ExecuteEnterBlock( null, oRange ) ;
+
+		// If we are at the end of a header block.
+		if ( !bHasShift && bIsEndOfBlock && (/^H[1-6]$/).test( sStartBlockTag ) )
+		{
+			// Insert a BR after the current paragraph.
+			FCKDomTools.InsertAfterNode( oRange.StartBlock, this.Window.document.createElement( 'br' ) ) ;
+
+			// The space is required by Gecko only to make the cursor blink.
+			if ( FCKBrowserInfo.IsGecko )
+				FCKDomTools.InsertAfterNode( oRange.StartBlock, this.Window.document.createTextNode( '' ) ) ;
+
+			// IE and Gecko have different behaviors regarding the position.
+			oRange.SetStart( oRange.StartBlock.nextSibling, FCKBrowserInfo.IsIE ? 3 : 1 ) ;
+		}
+		else
+		{
+			var eLineBreak = null ;
+			if ( sStartBlockTag.IEquals( 'pre' ) )
+				eLineBreak = this.Window.document.createTextNode( FCKBrowserInfo.IsIE ? '\r' : '\n' ) ;
+			else
+				eLineBreak = this.Window.document.createElement( 'br' ) ;
+
+			oRange.InsertNode( eLineBreak ) ;
+
+			// The space is required by Gecko only to make the cursor blink.
+			if ( FCKBrowserInfo.IsGecko )
+				FCKDomTools.InsertAfterNode( eLineBreak, this.Window.document.createTextNode( '' ) ) ;
+
+			// If we are at the end of a block, we must be sure the bogus node is available in that block.
+			if ( bIsEndOfBlock && FCKBrowserInfo.IsGeckoLike )
+				FCKTools.AppendBogusBr( eLineBreak.parentNode ) ;
+
+			if ( FCKBrowserInfo.IsIE )
+				oRange.SetStart( eLineBreak, 4 ) ;
+			else
+				oRange.SetStart( eLineBreak.nextSibling, 1 ) ;
+
+			if ( ! FCKBrowserInfo.IsIE )
+			{
+				var dummy = null ;
+				if ( FCKBrowserInfo.IsOpera )
+					dummy = this.Window.document.createElement( 'span' ) ;
+				else
+					dummy = this.Window.document.createElement( 'br' ) ;
+				eLineBreak.parentNode.insertBefore( dummy, eLineBreak.nextSibling ) ;
+				dummy.scrollIntoView( false ) ;
+				dummy.parentNode.removeChild( dummy ) ;
+			}
+		}
+
+		// This collapse guarantees the cursor will be blinking.
+		oRange.Collapse( true ) ;
+
+		oRange.Select() ;
+	}
+
+	// Release the resources used by the range.
+	oRange.Release() ;
+
+	return true ;
+}
+
+// Recreate the elements tree at the end of the source block, at the beginning
+// of the target block. Eg.:
+//	If source = <p><u>Some</u> sample <b><i>text</i></b></p> then target = <p><b><i></i></b></p>
+//	If source = <p><u>Some</u> sample text</p> then target = <p></p>
+FCKEnterKey.prototype._RecreateEndingTree = function( source, target )
+{
+	while ( ( source = source.lastChild ) && source.nodeType == 1 && FCKListsLib.InlineChildReqElements[ source.nodeName.toLowerCase() ] != null )
+		target = target.insertBefore( FCKDomTools.CloneElement( source ), target.firstChild ) ;
+}
+
+// Outdents a LI, maintaining the selection defined on a range.
+FCKEnterKey.prototype._OutdentWithSelection = function( li, range )
+{
+	var oBookmark = range.CreateBookmark() ;
+
+	FCKListHandler.OutdentListItem( li ) ;
+
+	range.MoveToBookmark( oBookmark ) ;
+	range.Select() ;
+}
+
+// Is all the contents under a node included by a range?
+FCKEnterKey.prototype._CheckIsAllContentsIncluded = function( range, node )
+{
+	var startOk = false ;
+	var endOk = false ;
+	
+	/*
+	FCKDebug.Output( 'sc='+range.StartContainer.nodeName+
+			',so='+range._Range.startOffset+
+			',ec='+range.EndContainer.nodeName+
+			',eo='+range._Range.endOffset ) ;
+	*/
+	if ( range.StartContainer == node || range.StartContainer == node.firstChild )
+		startOk = ( range._Range.startOffset == 0 ) ;
+
+	if ( range.EndContainer == node || range.EndContainer == node.lastChild )
+	{
+		var nodeLength = range.EndContainer.nodeType == 3 ? range.EndContainer.length : range.EndContainer.childNodes.length ;
+		endOk = ( range._Range.endOffset == nodeLength ) ;
+	}
+
+	return startOk && endOk ;
+}
+
+// Kludge for #247
+FCKEnterKey.prototype._FixIESelectAllBug = function( range )
+{
+	var doc = this.Window.document ;
+	doc.body.innerHTML = '' ;
+	var editBlock ;
+	if ( FCKConfig.EnterMode.IEquals( ['div', 'p'] ) )
+	{
+		editBlock = doc.createElement( FCKConfig.EnterMode ) ;
+		doc.body.appendChild( editBlock ) ;
+	}
+	else
+		editBlock = doc.body ;
+
+	range.MoveToNodeContents( editBlock ) ;
+	range.Collapse( true ) ;
+	range.Select() ;
+	range.Release() ;
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckevents.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckevents.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckevents.js	(revision 1280)
@@ -0,0 +1,66 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKEvents Class: used to handle events is a advanced way.
+ */
+
+var FCKEvents = function( eventsOwner )
+{
+	this.Owner = eventsOwner ;
+	this._RegisteredEvents = new Object() ;
+}
+
+FCKEvents.prototype.AttachEvent = function( eventName, functionPointer )
+{
+	var aTargets ;
+
+	if ( !( aTargets = this._RegisteredEvents[ eventName ] ) )
+		this._RegisteredEvents[ eventName ] = [ functionPointer ] ;
+	else
+		aTargets.push( functionPointer ) ;
+}
+
+FCKEvents.prototype.FireEvent = function( eventName, params )
+{
+	var bReturnValue = true ;
+
+	var oCalls = this._RegisteredEvents[ eventName ] ;
+
+	if ( oCalls )
+	{
+		for ( var i = 0 ; i < oCalls.length ; i++ )
+		{
+			try
+			{
+				bReturnValue = ( oCalls[ i ]( this.Owner, params ) && bReturnValue ) ;
+			}
+			catch(e)
+			{
+				// Ignore the following error. It may happen if pointing to a
+				// script not anymore available (#934):
+				// -2146823277 = Can't execute code from a freed script
+				if ( e.number != -2146823277 )
+					throw e ;
+			}
+		}
+	}
+
+	return bReturnValue ;
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckicon.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckicon.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckicon.js	(revision 1280)
@@ -0,0 +1,103 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKIcon Class: renders an icon from a single image, a strip or even a
+ * spacer.
+ */
+
+var FCKIcon = function( iconPathOrStripInfoArray )
+{
+	var sTypeOf = iconPathOrStripInfoArray ? typeof( iconPathOrStripInfoArray ) : 'undefined' ;
+	switch ( sTypeOf )
+	{
+		case 'number' :
+			this.Path = FCKConfig.SkinPath + 'fck_strip.gif' ;
+			this.Size = 16 ;
+			this.Position = iconPathOrStripInfoArray ;
+			break ;
+
+		case 'undefined' :
+			this.Path = FCK_SPACER_PATH ;
+			break ;
+
+		case 'string' :
+			this.Path = iconPathOrStripInfoArray ;
+			break ;
+
+		default :
+			// It is an array in the format [ StripFilePath, IconSize, IconPosition ]
+			this.Path		= iconPathOrStripInfoArray[0] ;
+			this.Size		= iconPathOrStripInfoArray[1] ;
+			this.Position	= iconPathOrStripInfoArray[2] ;
+	}
+}
+
+FCKIcon.prototype.CreateIconElement = function( document )
+{
+	var eIcon, eIconImage ;
+
+	if ( this.Position )		// It is using an icons strip image.
+	{
+		var sPos = '-' + ( ( this.Position - 1 ) * this.Size ) + 'px' ;
+
+		if ( FCKBrowserInfo.IsIE )
+		{
+			// <div class="TB_Button_Image"><img src="strip.gif" style="top:-16px"></div>
+
+			eIcon = document.createElement( 'DIV' ) ;
+
+			eIconImage = eIcon.appendChild( document.createElement( 'IMG' ) ) ;
+			eIconImage.src = this.Path ;
+			eIconImage.style.top = sPos ;
+		}
+		else
+		{
+			// <img class="TB_Button_Image" src="spacer.gif" style="background-position: 0px -16px;background-image: url(strip.gif);">
+
+			eIcon = document.createElement( 'IMG' ) ;
+			eIcon.src = FCK_SPACER_PATH ;
+			eIcon.style.backgroundPosition	= '0px ' + sPos ;
+			eIcon.style.backgroundImage		= 'url("' + this.Path + '")' ;
+		}
+	}
+	else					// It is using a single icon image.
+	{
+		if ( FCKBrowserInfo.IsIE )
+		{
+			// IE makes the button 1px higher if using the <img> directly, so we
+			// are changing to the <div> system to clip the image correctly.
+			eIcon = document.createElement( 'DIV' ) ;
+
+			eIconImage = eIcon.appendChild( document.createElement( 'IMG' ) ) ;
+			eIconImage.src = this.Path ? this.Path : FCK_SPACER_PATH ;
+		}
+		else
+		{
+			// This is not working well with IE. See notes above.
+			// <img class="TB_Button_Image" src="smiley.gif">
+			eIcon = document.createElement( 'IMG' ) ;
+			eIcon.src = this.Path ? this.Path : FCK_SPACER_PATH ;
+		}
+	}
+
+	eIcon.className = 'TB_Button_Image' ;
+
+	return eIcon ;
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckiecleanup.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckiecleanup.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckiecleanup.js	(revision 1280)
@@ -0,0 +1,68 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKIECleanup Class: a generic class used as a tool to remove IE leaks.
+ */
+
+var	FCKIECleanup = function( attachWindow )
+{
+	// If the attachWindow already have a cleanup object, just use that one.
+	if ( attachWindow._FCKCleanupObj )
+		this.Items = attachWindow._FCKCleanupObj.Items ;
+	else
+	{
+		this.Items = new Array() ;
+
+		attachWindow._FCKCleanupObj = this ;
+		FCKTools.AddEventListenerEx( attachWindow, 'unload', FCKIECleanup_Cleanup ) ;
+//		attachWindow.attachEvent( 'onunload', FCKIECleanup_Cleanup ) ;
+	}
+}
+
+FCKIECleanup.prototype.AddItem = function( dirtyItem, cleanupFunction )
+{
+	this.Items.push( [ dirtyItem, cleanupFunction ] ) ;
+}
+
+function FCKIECleanup_Cleanup()
+{
+	if ( !this._FCKCleanupObj || !window.FCKUnloadFlag )
+		return ;
+
+	var aItems = this._FCKCleanupObj.Items ;
+
+	while ( aItems.length > 0 )
+	{
+
+		// It is important to remove from the end to the beginning (pop()),
+		// because of the order things get created in the editor. In the code,
+		// elements in deeper position in the DOM are placed at the end of the
+		// cleanup function, so we must cleanup then first, otherwise IE could
+		// throw some crazy memory errors (IE bug).
+		var oItem = aItems.pop() ;
+		if ( oItem )
+			oItem[1].call( oItem[0] ) ;
+	}
+
+	this._FCKCleanupObj = null ;
+
+	if ( CollectGarbage )
+		CollectGarbage() ;
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckimagepreloader.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckimagepreloader.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckimagepreloader.js	(revision 1280)
@@ -0,0 +1,64 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Preload a list of images, firing an event when complete.
+ */
+
+var FCKImagePreloader = function()
+{
+	this._Images = new Array() ;
+}
+
+FCKImagePreloader.prototype =
+{
+	AddImages : function( images )
+	{
+		if ( typeof( images ) == 'string' )
+			images = images.split( ';' ) ;
+
+		this._Images = this._Images.concat( images ) ;
+	},
+
+	Start : function()
+	{
+		var aImages = this._Images ;
+		this._PreloadCount = aImages.length ;
+
+		for ( var i = 0 ; i < aImages.length ; i++ )
+		{
+			var eImg = document.createElement( 'img' ) ;
+			FCKTools.AddEventListenerEx( eImg, 'load', _FCKImagePreloader_OnImage, this ) ;
+			FCKTools.AddEventListenerEx( eImg, 'error', _FCKImagePreloader_OnImage, this ) ;
+			eImg.src = aImages[i] ;
+
+			_FCKImagePreloader_ImageCache.push( eImg ) ;
+		}
+	}
+};
+
+// All preloaded images must be placed in a global array, otherwise the preload
+// magic will not happen.
+var _FCKImagePreloader_ImageCache = new Array() ;
+
+function _FCKImagePreloader_OnImage( ev, imagePreloader )
+{
+	if ( (--imagePreloader._PreloadCount) == 0 && imagePreloader.OnComplete )
+		imagePreloader.OnComplete() ;
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckkeystrokehandler.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckkeystrokehandler.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckkeystrokehandler.js	(revision 1280)
@@ -0,0 +1,141 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Control keyboard keystroke combinations.
+ */
+
+var FCKKeystrokeHandler = function( cancelCtrlDefaults )
+{
+	this.Keystrokes = new Object() ;
+	this.CancelCtrlDefaults = ( cancelCtrlDefaults !== false ) ;
+}
+
+/*
+ * Listen to keystroke events in an element or DOM document object.
+ *		@target: The element or document to listen to keystroke events.
+ */
+FCKKeystrokeHandler.prototype.AttachToElement = function( target )
+{
+	// For newer browsers, it is enough to listen to the keydown event only.
+	// Some browsers instead, don't cancel key events in the keydown, but in the
+	// keypress. So we must do a longer trip in those cases.
+	FCKTools.AddEventListenerEx( target, 'keydown', _FCKKeystrokeHandler_OnKeyDown, this ) ;
+	if ( FCKBrowserInfo.IsGecko10 || FCKBrowserInfo.IsOpera || ( FCKBrowserInfo.IsGecko && FCKBrowserInfo.IsMac ) )
+		FCKTools.AddEventListenerEx( target, 'keypress', _FCKKeystrokeHandler_OnKeyPress, this ) ;
+}
+
+/*
+ * Sets a list of keystrokes. It can receive either a single array or "n"
+ * arguments, each one being an array of 1 or 2 elemenst. The first element
+ * is the keystroke combination, and the second is the value to assign to it.
+ * If the second element is missing, the keystroke definition is removed.
+ */
+FCKKeystrokeHandler.prototype.SetKeystrokes = function()
+{
+	// Look through the arguments.
+	for ( var i = 0 ; i < arguments.length ; i++ )
+	{
+		var keyDef = arguments[i] ;
+
+		// If the configuration for the keystrokes is missing some element or has any extra comma
+		// this item won't be valid, so skip it and keep on processing.
+		if ( !keyDef ) 
+			continue ;
+		
+		if ( typeof( keyDef[0] ) == 'object' )		// It is an array with arrays defining the keystrokes.
+			this.SetKeystrokes.apply( this, keyDef ) ;
+		else
+		{
+			if ( keyDef.length == 1 )		// If it has only one element, remove the keystroke.
+				delete this.Keystrokes[ keyDef[0] ] ;
+			else							// Otherwise add it.
+				this.Keystrokes[ keyDef[0] ] = keyDef[1] === true ? true : keyDef ;
+		}
+	}
+}
+
+function _FCKKeystrokeHandler_OnKeyDown( ev, keystrokeHandler )
+{
+	// Get the key code.
+	var keystroke = ev.keyCode || ev.which ;
+
+	// Combine it with the CTRL, SHIFT and ALT states.
+	var keyModifiers = 0 ;
+
+	if ( ev.ctrlKey || ev.metaKey )
+		keyModifiers += CTRL ;
+
+	if ( ev.shiftKey )
+		keyModifiers += SHIFT ;
+
+	if ( ev.altKey )
+		keyModifiers += ALT ;
+
+	var keyCombination = keystroke + keyModifiers ;
+
+	var cancelIt = keystrokeHandler._CancelIt = false ;
+
+	// Look for its definition availability.
+	var keystrokeValue = keystrokeHandler.Keystrokes[ keyCombination ] ;
+
+//	FCKDebug.Output( 'KeyDown: ' + keyCombination + ' - Value: ' + keystrokeValue ) ;
+
+	// If the keystroke is defined
+	if ( keystrokeValue )
+	{
+		// If the keystroke has been explicitly set to "true" OR calling the
+		// "OnKeystroke" event, it doesn't return "true", the default behavior
+		// must be preserved.
+		if ( keystrokeValue === true || !( keystrokeHandler.OnKeystroke && keystrokeHandler.OnKeystroke.apply( keystrokeHandler, keystrokeValue ) ) )
+			return true ;
+
+		cancelIt = true ;
+	}
+
+	// By default, it will cancel all combinations with the CTRL key only (except positioning keys).
+	if ( cancelIt || ( keystrokeHandler.CancelCtrlDefaults && keyModifiers == CTRL && ( keystroke < 33 || keystroke > 40 ) ) )
+	{
+		keystrokeHandler._CancelIt = true ;
+
+		if ( ev.preventDefault )
+			return ev.preventDefault() ;
+
+		ev.returnValue = false ;
+		ev.cancelBubble = true ;
+		return false ;
+	}
+
+	return true ;
+}
+
+function _FCKKeystrokeHandler_OnKeyPress( ev, keystrokeHandler )
+{
+	if ( keystrokeHandler._CancelIt )
+	{
+//		FCKDebug.Output( 'KeyPress Cancel', 'Red') ;
+
+		if ( ev.preventDefault )
+			return ev.preventDefault() ;
+
+		return false ;
+	}
+
+	return true ;
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckmenublock.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckmenublock.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckmenublock.js	(revision 1280)
@@ -0,0 +1,150 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Renders a list of menu items.
+ */
+
+var FCKMenuBlock = function()
+{
+	this._Items	= new Array() ;
+}
+
+
+FCKMenuBlock.prototype.Count = function()
+{
+	return this._Items.length ;
+}
+
+FCKMenuBlock.prototype.AddItem = function( name, label, iconPathOrStripInfoArrayOrIndex, isDisabled )
+{
+	var oItem = new FCKMenuItem( this, name, label, iconPathOrStripInfoArrayOrIndex, isDisabled ) ;
+
+	oItem.OnClick		= FCKTools.CreateEventListener( FCKMenuBlock_Item_OnClick, this ) ;
+	oItem.OnActivate	= FCKTools.CreateEventListener( FCKMenuBlock_Item_OnActivate, this ) ;
+
+	this._Items.push( oItem ) ;
+
+	return oItem ;
+}
+
+FCKMenuBlock.prototype.AddSeparator = function()
+{
+	this._Items.push( new FCKMenuSeparator() ) ;
+}
+
+FCKMenuBlock.prototype.RemoveAllItems = function()
+{
+	this._Items = new Array() ;
+
+	var eItemsTable = this._ItemsTable ;
+	if ( eItemsTable )
+	{
+		while ( eItemsTable.rows.length > 0 )
+			eItemsTable.deleteRow( 0 ) ;
+	}
+}
+
+FCKMenuBlock.prototype.Create = function( parentElement )
+{
+	if ( !this._ItemsTable )
+	{
+		if ( FCK.IECleanup )
+			FCK.IECleanup.AddItem( this, FCKMenuBlock_Cleanup ) ;
+
+		this._Window = FCKTools.GetElementWindow( parentElement ) ;
+
+		var oDoc = FCKTools.GetElementDocument( parentElement ) ;
+
+		var eTable = parentElement.appendChild( oDoc.createElement( 'table' ) ) ;
+		eTable.cellPadding = 0 ;
+		eTable.cellSpacing = 0 ;
+
+		FCKTools.DisableSelection( eTable ) ;
+
+		var oMainElement = eTable.insertRow(-1).insertCell(-1) ;
+		oMainElement.className = 'MN_Menu' ;
+
+		var eItemsTable = this._ItemsTable = oMainElement.appendChild( oDoc.createElement( 'table' ) ) ;
+		eItemsTable.cellPadding = 0 ;
+		eItemsTable.cellSpacing = 0 ;
+	}
+
+	for ( var i = 0 ; i < this._Items.length ; i++ )
+		this._Items[i].Create( this._ItemsTable ) ;
+}
+
+/* Events */
+
+function FCKMenuBlock_Item_OnClick( clickedItem, menuBlock )
+{
+	FCKTools.RunFunction( menuBlock.OnClick, menuBlock, [ clickedItem ] ) ;
+}
+
+function FCKMenuBlock_Item_OnActivate( menuBlock )
+{
+	var oActiveItem = menuBlock._ActiveItem ;
+
+	if ( oActiveItem && oActiveItem != this )
+	{
+		// Set the focus to this menu block window (to fire OnBlur on opened panels).
+		if ( !FCKBrowserInfo.IsIE && oActiveItem.HasSubMenu && !this.HasSubMenu )
+		{
+			menuBlock._Window.focus() ;
+			
+			// Due to the event model provided by Opera, we need to set
+			// HasFocus here as the above focus() call will not fire the focus
+			// event in the panel immediately (#1200).
+			menuBlock.Panel.HasFocus = true ;
+		}
+
+		oActiveItem.Deactivate() ;
+	}
+
+	menuBlock._ActiveItem = this ;
+}
+
+function FCKMenuBlock_Cleanup()
+{
+	this._Window = null ;
+	this._ItemsTable = null ;
+}
+
+// ################# //
+
+var FCKMenuSeparator = function()
+{}
+
+FCKMenuSeparator.prototype.Create = function( parentTable )
+{
+	var oDoc = FCKTools.GetElementDocument( parentTable ) ;
+
+	var r = parentTable.insertRow(-1) ;
+
+	var eCell = r.insertCell(-1) ;
+	eCell.className = 'MN_Separator MN_Icon' ;
+
+	eCell = r.insertCell(-1) ;
+	eCell.className = 'MN_Separator' ;
+	eCell.appendChild( oDoc.createElement( 'DIV' ) ).className = 'MN_Separator_Line' ;
+
+	eCell = r.insertCell(-1) ;
+	eCell.className = 'MN_Separator' ;
+	eCell.appendChild( oDoc.createElement( 'DIV' ) ).className = 'MN_Separator_Line' ;
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckmenublockpanel.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckmenublockpanel.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckmenublockpanel.js	(revision 1280)
@@ -0,0 +1,54 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This class is a menu block that behaves like a panel. It's a mix of the
+ * FCKMenuBlock and FCKPanel classes.
+ */
+
+var FCKMenuBlockPanel = function()
+{
+	// Call the "base" constructor.
+	FCKMenuBlock.call( this ) ;
+}
+
+FCKMenuBlockPanel.prototype = new FCKMenuBlock() ;
+
+
+// Override the create method.
+FCKMenuBlockPanel.prototype.Create = function()
+{
+	var oPanel = this.Panel = ( this.Parent && this.Parent.Panel ? this.Parent.Panel.CreateChildPanel() : new FCKPanel() ) ;
+	oPanel.AppendStyleSheet( FCKConfig.SkinPath + 'fck_editor.css' ) ;
+
+	// Call the "base" implementation.
+	FCKMenuBlock.prototype.Create.call( this, oPanel.MainNode ) ;
+}
+
+FCKMenuBlockPanel.prototype.Show = function( x, y, relElement )
+{
+	if ( !this.Panel.CheckIsOpened() )
+		this.Panel.Show( x, y, relElement ) ;
+}
+
+FCKMenuBlockPanel.prototype.Hide = function()
+{
+	if ( this.Panel.CheckIsOpened() )
+		this.Panel.Hide() ;
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckmenuitem.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckmenuitem.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckmenuitem.js	(revision 1280)
@@ -0,0 +1,160 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Defines and renders a menu items in a menu block.
+ */
+
+var FCKMenuItem = function( parentMenuBlock, name, label, iconPathOrStripInfoArray, isDisabled )
+{
+	this.Name		= name ;
+	this.Label		= label || name ;
+	this.IsDisabled	= isDisabled ;
+
+	this.Icon = new FCKIcon( iconPathOrStripInfoArray ) ;
+
+	this.SubMenu			= new FCKMenuBlockPanel() ;
+	this.SubMenu.Parent		= parentMenuBlock ;
+	this.SubMenu.OnClick	= FCKTools.CreateEventListener( FCKMenuItem_SubMenu_OnClick, this ) ;
+
+	if ( FCK.IECleanup )
+		FCK.IECleanup.AddItem( this, FCKMenuItem_Cleanup ) ;
+}
+
+
+FCKMenuItem.prototype.AddItem = function( name, label, iconPathOrStripInfoArrayOrIndex, isDisabled )
+{
+	this.HasSubMenu = true ;
+	return this.SubMenu.AddItem( name, label, iconPathOrStripInfoArrayOrIndex, isDisabled ) ;
+}
+
+FCKMenuItem.prototype.AddSeparator = function()
+{
+	this.SubMenu.AddSeparator() ;
+}
+
+FCKMenuItem.prototype.Create = function( parentTable )
+{
+	var bHasSubMenu = this.HasSubMenu ;
+
+	var oDoc = FCKTools.GetElementDocument( parentTable ) ;
+
+	// Add a row in the table to hold the menu item.
+	var r = this.MainElement = parentTable.insertRow(-1) ;
+	r.className = this.IsDisabled ? 'MN_Item_Disabled' : 'MN_Item' ;
+
+	// Set the row behavior.
+	if ( !this.IsDisabled )
+	{
+		FCKTools.AddEventListenerEx( r, 'mouseover', FCKMenuItem_OnMouseOver, [ this ] ) ;
+		FCKTools.AddEventListenerEx( r, 'click', FCKMenuItem_OnClick, [ this ] ) ;
+
+		if ( !bHasSubMenu )
+			FCKTools.AddEventListenerEx( r, 'mouseout', FCKMenuItem_OnMouseOut, [ this ] ) ;
+	}
+
+	// Create the icon cell.
+	var eCell = r.insertCell(-1) ;
+	eCell.className = 'MN_Icon' ;
+	eCell.appendChild( this.Icon.CreateIconElement( oDoc ) ) ;
+
+	// Create the label cell.
+	eCell = r.insertCell(-1) ;
+	eCell.className = 'MN_Label' ;
+	eCell.noWrap = true ;
+	eCell.appendChild( oDoc.createTextNode( this.Label ) ) ;
+
+	// Create the arrow cell and setup the sub menu panel (if needed).
+	eCell = r.insertCell(-1) ;
+	if ( bHasSubMenu )
+	{
+		eCell.className = 'MN_Arrow' ;
+
+		// The arrow is a fixed size image.
+		var eArrowImg = eCell.appendChild( oDoc.createElement( 'IMG' ) ) ;
+		eArrowImg.src = FCK_IMAGES_PATH + 'arrow_' + FCKLang.Dir + '.gif' ;
+		eArrowImg.width	 = 4 ;
+		eArrowImg.height = 7 ;
+
+		this.SubMenu.Create() ;
+		this.SubMenu.Panel.OnHide = FCKTools.CreateEventListener( FCKMenuItem_SubMenu_OnHide, this ) ;
+	}
+}
+
+FCKMenuItem.prototype.Activate = function()
+{
+	this.MainElement.className = 'MN_Item_Over' ;
+
+	if ( this.HasSubMenu )
+	{
+		// Show the child menu block. The ( +2, -2 ) correction is done because
+		// of the padding in the skin. It is not a good solution because one
+		// could change the skin and so the final result would not be accurate.
+		// For now it is ok because we are controlling the skin.
+		this.SubMenu.Show( this.MainElement.offsetWidth + 2, -2, this.MainElement ) ;
+	}
+
+	FCKTools.RunFunction( this.OnActivate, this ) ;
+}
+
+FCKMenuItem.prototype.Deactivate = function()
+{
+	this.MainElement.className = 'MN_Item' ;
+
+	if ( this.HasSubMenu )
+		this.SubMenu.Hide() ;
+}
+
+/* Events */
+
+function FCKMenuItem_SubMenu_OnClick( clickedItem, listeningItem )
+{
+	FCKTools.RunFunction( listeningItem.OnClick, listeningItem, [ clickedItem ] ) ;
+}
+
+function FCKMenuItem_SubMenu_OnHide( menuItem )
+{
+	menuItem.Deactivate() ;
+}
+
+function FCKMenuItem_OnClick( ev, menuItem )
+{
+	if ( menuItem.HasSubMenu )
+		menuItem.Activate() ;
+	else
+	{
+		menuItem.Deactivate() ;
+		FCKTools.RunFunction( menuItem.OnClick, menuItem, [ menuItem ] ) ;
+	}
+}
+
+function FCKMenuItem_OnMouseOver( ev, menuItem )
+{
+	menuItem.Activate() ;
+}
+
+function FCKMenuItem_OnMouseOut( ev, menuItem )
+{
+	menuItem.Deactivate() ;
+}
+
+function FCKMenuItem_Cleanup()
+{
+	this.MainElement = null ;
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckpanel.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckpanel.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckpanel.js	(revision 1280)
@@ -0,0 +1,338 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Component that creates floating panels. It is used by many
+ * other components, like the toolbar items, context menu, etc...
+ */
+
+var FCKPanel = function( parentWindow )
+{
+	this.IsRTL			= ( FCKLang.Dir == 'rtl' ) ;
+	this.IsContextMenu	= false ;
+	this._LockCounter	= 0 ;
+
+	this._Window = parentWindow || window ;
+
+	var oDocument ;
+
+	if ( FCKBrowserInfo.IsIE )
+	{
+		// Create the Popup that will hold the panel.
+		this._Popup	= this._Window.createPopup() ;
+		oDocument = this.Document = this._Popup.document ;
+
+		FCK.IECleanup.AddItem( this, FCKPanel_Cleanup ) ;
+	}
+	else
+	{
+		var oIFrame = this._IFrame = this._Window.document.createElement('iframe') ;
+		oIFrame.src					= 'javascript:void(0)' ;
+		oIFrame.allowTransparency	= true ;
+		oIFrame.frameBorder			= '0' ;
+		oIFrame.scrolling			= 'no' ;
+		oIFrame.width = oIFrame.height = 0 ;
+		FCKDomTools.SetElementStyles( oIFrame,
+			{
+				position	: 'absolute',
+				zIndex		: FCKConfig.FloatingPanelsZIndex
+			} ) ;
+
+		if ( this._Window == window.parent && window.frameElement )
+		{
+			var scrollPos = null ;
+			if ( FCKBrowserInfo.IsGecko && FCK && FCK.EditorDocument )
+				scrollPos = [ FCK.EditorDocument.body.scrollLeft, FCK.EditorDocument.body.scrollTop ] ;
+			window.frameElement.parentNode.insertBefore( oIFrame, window.frameElement ) ;
+			if ( scrollPos )
+			{
+				var restoreFunc = function()
+				{
+					FCK.EditorDocument.body.scrollLeft = scrollPos[0] ;
+					FCK.EditorDocument.body.scrollTop = scrollPos[1] ;
+				}
+				setTimeout( restoreFunc, 500 ) ;
+			}
+		}
+		else
+			this._Window.document.body.appendChild( oIFrame ) ;
+
+		var oIFrameWindow = oIFrame.contentWindow ;
+
+		oDocument = this.Document = oIFrameWindow.document ;
+
+		// Workaround for Safari 12256. Ticket #63
+		var sBase = '' ;
+		if ( FCKBrowserInfo.IsSafari )
+			sBase = '<base href="' + window.document.location + '">' ;
+
+		// Initialize the IFRAME document body.
+		oDocument.open() ;
+		oDocument.write( '<html><head>' + sBase + '<\/head><body style="margin:0px;padding:0px;"><\/body><\/html>' ) ;
+		oDocument.close() ;
+
+		FCKTools.AddEventListenerEx( oIFrameWindow, 'focus', FCKPanel_Window_OnFocus, this ) ;
+		FCKTools.AddEventListenerEx( oIFrameWindow, 'blur', FCKPanel_Window_OnBlur, this ) ;
+	}
+
+	oDocument.dir = FCKLang.Dir ;
+
+	FCKTools.AddEventListener( oDocument, 'contextmenu', FCKTools.CancelEvent ) ;
+
+
+	// Create the main DIV that is used as the panel base.
+	this.MainNode = oDocument.body.appendChild( oDocument.createElement('DIV') ) ;
+
+	// The "float" property must be set so Firefox calculates the size correctly.
+	this.MainNode.style.cssFloat = this.IsRTL ? 'right' : 'left' ;
+}
+
+
+FCKPanel.prototype.AppendStyleSheet = function( styleSheet )
+{
+	FCKTools.AppendStyleSheet( this.Document, styleSheet ) ;
+}
+
+FCKPanel.prototype.Preload = function( x, y, relElement )
+{
+	// The offsetWidth and offsetHeight properties are not available if the
+	// element is not visible. So we must "show" the popup with no size to
+	// be able to use that values in the second call (IE only).
+	if ( this._Popup )
+		this._Popup.show( x, y, 0, 0, relElement ) ;
+}
+
+FCKPanel.prototype.Show = function( x, y, relElement, width, height )
+{
+	var iMainWidth ;
+	var eMainNode = this.MainNode ;
+
+	if ( this._Popup )
+	{
+		// The offsetWidth and offsetHeight properties are not available if the
+		// element is not visible. So we must "show" the popup with no size to
+		// be able to use that values in the second call.
+		this._Popup.show( x, y, 0, 0, relElement ) ;
+
+		// The following lines must be place after the above "show", otherwise it
+		// doesn't has the desired effect.
+		FCKDomTools.SetElementStyles( eMainNode,
+			{
+				width	: width ? width + 'px' : '',
+				height	: height ? height + 'px' : ''
+			} ) ;
+
+		iMainWidth = eMainNode.offsetWidth ;
+
+		if ( this.IsRTL )
+		{
+			if ( this.IsContextMenu )
+				x  = x - iMainWidth + 1 ;
+			else if ( relElement )
+				x  = ( x * -1 ) + relElement.offsetWidth - iMainWidth ;
+		}
+
+		// Second call: Show the Popup at the specified location, with the correct size.
+		this._Popup.show( x, y, iMainWidth, eMainNode.offsetHeight, relElement ) ;
+
+		if ( this.OnHide )
+		{
+			if ( this._Timer )
+				CheckPopupOnHide.call( this, true ) ;
+
+			this._Timer = FCKTools.SetInterval( CheckPopupOnHide, 100, this ) ;
+		}
+	}
+	else
+	{
+		// Do not fire OnBlur while the panel is opened.
+		if ( typeof( FCK.ToolbarSet.CurrentInstance.FocusManager ) != 'undefined' )
+			FCK.ToolbarSet.CurrentInstance.FocusManager.Lock() ;
+
+		if ( this.ParentPanel )
+			this.ParentPanel.Lock() ;
+
+		FCKDomTools.SetElementStyles( eMainNode,
+			{
+				width	: width ? width + 'px' : '',
+				height	: height ? height + 'px' : ''
+			} ) ;
+
+		iMainWidth = eMainNode.offsetWidth ;
+
+		if ( !width )	this._IFrame.width	= 1 ;
+		if ( !height )	this._IFrame.height	= 1 ;
+
+		// This is weird... but with Firefox, we must get the offsetWidth before
+		// setting the _IFrame size (which returns "0"), and then after that,
+		// to return the correct width. Remove the first step and it will not
+		// work when the editor is in RTL.
+		//
+		// The "|| eMainNode.firstChild.offsetWidth" part has been added
+		// for Opera compatibility (see #570).
+		iMainWidth = eMainNode.offsetWidth || eMainNode.firstChild.offsetWidth ;
+
+		var oPos = FCKTools.GetElementPosition(
+			relElement.nodeType == 9 ?
+				( FCKTools.IsStrictMode( relElement ) ? relElement.documentElement : relElement.body ) :
+				relElement,
+			this._Window ) ;
+
+		if ( this.IsRTL && !this.IsContextMenu )
+			x = ( x * -1 ) ;
+
+		x += oPos.X ;
+		y += oPos.Y ;
+
+		if ( this.IsRTL )
+		{
+			if ( this.IsContextMenu )
+				x  = x - iMainWidth + 1 ;
+			else if ( relElement )
+				x  = x + relElement.offsetWidth - iMainWidth ;
+		}
+		else
+		{
+			var oViewPaneSize = FCKTools.GetViewPaneSize( this._Window ) ;
+			var oScrollPosition = FCKTools.GetScrollPosition( this._Window ) ;
+
+			var iViewPaneHeight	= oViewPaneSize.Height + oScrollPosition.Y ;
+			var iViewPaneWidth	= oViewPaneSize.Width + oScrollPosition.X ;
+
+			if ( ( x + iMainWidth ) > iViewPaneWidth )
+				x -= x + iMainWidth - iViewPaneWidth ;
+
+			if ( ( y + eMainNode.offsetHeight ) > iViewPaneHeight )
+				y -= y + eMainNode.offsetHeight - iViewPaneHeight ;
+		}
+
+		if ( x < 0 )
+			 x = 0 ;
+
+		// Set the context menu DIV in the specified location.
+		FCKDomTools.SetElementStyles( this._IFrame,
+			{
+				left	: x + 'px',
+				top		: y + 'px'
+			} ) ;
+
+		var iWidth	= iMainWidth ;
+		var iHeight	= eMainNode.offsetHeight ;
+
+		this._IFrame.width	= iWidth ;
+		this._IFrame.height = iHeight ;
+
+		// Move the focus to the IFRAME so we catch the "onblur".
+		this._IFrame.contentWindow.focus() ;
+	}
+
+	this._IsOpened = true ;
+
+	FCKTools.RunFunction( this.OnShow, this ) ;
+}
+
+FCKPanel.prototype.Hide = function( ignoreOnHide )
+{
+	if ( this._Popup )
+		this._Popup.hide() ;
+	else
+	{
+		if ( !this._IsOpened )
+			return ;
+
+		// Enable the editor to fire the "OnBlur".
+		if ( typeof( FCKFocusManager ) != 'undefined' )
+			FCKFocusManager.Unlock() ;
+
+		// It is better to set the sizes to 0, otherwise Firefox would have
+		// rendering problems.
+		this._IFrame.width = this._IFrame.height = 0 ;
+
+		this._IsOpened = false ;
+
+		if ( this.ParentPanel )
+			this.ParentPanel.Unlock() ;
+
+		if ( !ignoreOnHide )
+			FCKTools.RunFunction( this.OnHide, this ) ;
+	}
+}
+
+FCKPanel.prototype.CheckIsOpened = function()
+{
+	if ( this._Popup )
+		return this._Popup.isOpen ;
+	else
+		return this._IsOpened ;
+}
+
+FCKPanel.prototype.CreateChildPanel = function()
+{
+	var oWindow = this._Popup ? FCKTools.GetDocumentWindow( this.Document ) : this._Window ;
+
+	var oChildPanel = new FCKPanel( oWindow ) ;
+	oChildPanel.ParentPanel = this ;
+
+	return oChildPanel ;
+}
+
+FCKPanel.prototype.Lock = function()
+{
+	this._LockCounter++ ;
+}
+
+FCKPanel.prototype.Unlock = function()
+{
+	if ( --this._LockCounter == 0 && !this.HasFocus )
+		this.Hide() ;
+}
+
+/* Events */
+
+function FCKPanel_Window_OnFocus( e, panel )
+{
+	panel.HasFocus = true ;
+}
+
+function FCKPanel_Window_OnBlur( e, panel )
+{
+	panel.HasFocus = false ;
+
+	if ( panel._LockCounter == 0 )
+		FCKTools.RunFunction( panel.Hide, panel ) ;
+}
+
+function CheckPopupOnHide( forceHide )
+{
+	if ( forceHide || !this._Popup.isOpen )
+	{
+		window.clearInterval( this._Timer ) ;
+		this._Timer = null ;
+
+		FCKTools.RunFunction( this.OnHide, this ) ;
+	}
+}
+
+function FCKPanel_Cleanup()
+{
+	this._Popup = null ;
+	this._Window = null ;
+	this.Document = null ;
+	this.MainNode = null ;
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckplugin.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckplugin.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckplugin.js	(revision 1280)
@@ -0,0 +1,56 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKPlugin Class: Represents a single plugin.
+ */
+
+var FCKPlugin = function( name, availableLangs, basePath )
+{
+	this.Name = name ;
+	this.BasePath = basePath ? basePath : FCKConfig.PluginsPath ;
+	this.Path = this.BasePath + name + '/' ;
+
+	if ( !availableLangs || availableLangs.length == 0 )
+		this.AvailableLangs = new Array() ;
+	else
+		this.AvailableLangs = availableLangs.split(',') ;
+}
+
+FCKPlugin.prototype.Load = function()
+{
+	// Load the language file, if defined.
+	if ( this.AvailableLangs.length > 0 )
+	{
+		var sLang ;
+
+		// Check if the plugin has the language file for the active language.
+		if ( this.AvailableLangs.IndexOf( FCKLanguageManager.ActiveLanguage.Code ) >= 0 )
+			sLang = FCKLanguageManager.ActiveLanguage.Code ;
+		else
+			// Load the default language file (first one) if the current one is not available.
+			sLang = this.AvailableLangs[0] ;
+
+		// Add the main plugin script.
+		LoadScript( this.Path + 'lang/' + sLang + '.js' ) ;
+	}
+
+	// Add the main plugin script.
+	LoadScript( this.Path + 'fckplugin.js' ) ;
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckspecialcombo.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckspecialcombo.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckspecialcombo.js	(revision 1280)
@@ -0,0 +1,377 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKSpecialCombo Class: represents a special combo.
+ */
+
+var FCKSpecialCombo = function( caption, fieldWidth, panelWidth, panelMaxHeight, parentWindow )
+{
+	// Default properties values.
+	this.FieldWidth		= fieldWidth || 100 ;
+	this.PanelWidth		= panelWidth || 150 ;
+	this.PanelMaxHeight	= panelMaxHeight || 150 ;
+	this.Label			= '&nbsp;' ;
+	this.Caption		= caption ;
+	this.Tooltip		= caption ;
+	this.Style			= FCK_TOOLBARITEM_ICONTEXT ;
+
+	this.Enabled = true ;
+
+	this.Items = new Object() ;
+
+	this._Panel = new FCKPanel( parentWindow || window ) ;
+	this._Panel.AppendStyleSheet( FCKConfig.SkinPath + 'fck_editor.css' ) ;
+	this._PanelBox = this._Panel.MainNode.appendChild( this._Panel.Document.createElement( 'DIV' ) ) ;
+	this._PanelBox.className = 'SC_Panel' ;
+	this._PanelBox.style.width = this.PanelWidth + 'px' ;
+
+	this._PanelBox.innerHTML = '<table cellpadding="0" cellspacing="0" width="100%" style="TABLE-LAYOUT: fixed"><tr><td nowrap></td></tr></table>' ;
+
+	this._ItemsHolderEl = this._PanelBox.getElementsByTagName('TD')[0] ;
+
+	if ( FCK.IECleanup )
+		FCK.IECleanup.AddItem( this, FCKSpecialCombo_Cleanup ) ;
+
+//	this._Panel.StyleSheet = FCKConfig.SkinPath + 'fck_contextmenu.css' ;
+//	this._Panel.Create() ;
+//	this._Panel.PanelDiv.className += ' SC_Panel' ;
+//	this._Panel.PanelDiv.innerHTML = '<table cellpadding="0" cellspacing="0" width="100%" style="TABLE-LAYOUT: fixed"><tr><td nowrap></td></tr></table>' ;
+//	this._ItemsHolderEl = this._Panel.PanelDiv.getElementsByTagName('TD')[0] ;
+}
+
+function FCKSpecialCombo_ItemOnMouseOver()
+{
+	this.className += ' SC_ItemOver' ;
+}
+
+function FCKSpecialCombo_ItemOnMouseOut()
+{
+	this.className = this.originalClass ;
+}
+
+function FCKSpecialCombo_ItemOnClick( ev, specialCombo, itemId )
+{
+	this.className = this.originalClass ;
+
+	specialCombo._Panel.Hide() ;
+
+	specialCombo.SetLabel( this.FCKItemLabel ) ;
+
+	if ( typeof( specialCombo.OnSelect ) == 'function' )
+		specialCombo.OnSelect( itemId, this ) ;
+}
+
+FCKSpecialCombo.prototype.ClearItems = function ()
+{
+	if ( this.Items )
+	{
+		for ( var key in this.Items )
+			this.Items[key] = null ;
+	}
+	
+	var itemsholder = this._ItemsHolderEl ;
+	while ( itemsholder.firstChild )
+		itemsholder.removeChild( itemsholder.firstChild ) ;
+}
+
+FCKSpecialCombo.prototype.AddItem = function( id, html, label, bgColor )
+{
+	// <div class="SC_Item" onmouseover="this.className='SC_Item SC_ItemOver';" onmouseout="this.className='SC_Item';"><b>Bold 1</b></div>
+	var oDiv = this._ItemsHolderEl.appendChild( this._Panel.Document.createElement( 'DIV' ) ) ;
+	oDiv.className = oDiv.originalClass = 'SC_Item' ;
+	oDiv.innerHTML = html ;
+	oDiv.FCKItemLabel = label || id ;
+	oDiv.Selected = false ;
+
+	// In IE, the width must be set so the borders are shown correctly when the content overflows.
+	if ( FCKBrowserInfo.IsIE )
+		oDiv.style.width = '100%' ;
+
+	if ( bgColor )
+		oDiv.style.backgroundColor = bgColor ;
+
+	FCKTools.AddEventListenerEx( oDiv, 'mouseover', FCKSpecialCombo_ItemOnMouseOver ) ;
+	FCKTools.AddEventListenerEx( oDiv, 'mouseout', FCKSpecialCombo_ItemOnMouseOut ) ;
+	FCKTools.AddEventListenerEx( oDiv, 'click', FCKSpecialCombo_ItemOnClick, [ this, id ] ) ;
+
+	this.Items[ id.toString().toLowerCase() ] = oDiv ;
+
+	return oDiv ;
+}
+
+FCKSpecialCombo.prototype.SelectItem = function( item )
+{
+	if ( typeof item == 'string' )
+		item = this.Items[ item.toString().toLowerCase() ] ;
+
+	if ( item )
+	{
+		item.className = item.originalClass = 'SC_ItemSelected' ;
+		item.Selected = true ;
+	}
+}
+
+FCKSpecialCombo.prototype.SelectItemByLabel = function( itemLabel, setLabel )
+{
+	for ( var id in this.Items )
+	{
+		var oDiv = this.Items[id] ;
+
+		if ( oDiv.FCKItemLabel == itemLabel )
+		{
+			oDiv.className = oDiv.originalClass = 'SC_ItemSelected' ;
+			oDiv.Selected = true ;
+
+			if ( setLabel )
+				this.SetLabel( itemLabel ) ;
+		}
+	}
+}
+
+FCKSpecialCombo.prototype.DeselectAll = function( clearLabel )
+{
+	for ( var i in this.Items )
+	{
+		if ( !this.Items[i] ) continue;
+		this.Items[i].className = this.Items[i].originalClass = 'SC_Item' ;
+		this.Items[i].Selected = false ;
+	}
+
+	if ( clearLabel )
+		this.SetLabel( '' ) ;
+}
+
+FCKSpecialCombo.prototype.SetLabelById = function( id )
+{
+	id = id ? id.toString().toLowerCase() : '' ;
+
+	var oDiv = this.Items[ id ] ;
+	this.SetLabel( oDiv ? oDiv.FCKItemLabel : '' ) ;
+}
+
+FCKSpecialCombo.prototype.SetLabel = function( text )
+{
+	text = ( !text || text.length == 0 ) ? '&nbsp;' : text ;
+
+	if ( text == this.Label )
+		return ;
+
+	this.Label = text ;
+
+	var labelEl = this._LabelEl ;
+	if ( labelEl )
+	{
+		labelEl.innerHTML = text ;
+
+		// It may happen that the label is some HTML, including tags. This
+		// would be a problem because when the user click on those tags, the
+		// combo will get the selection from the editing area. So we must
+		// disable any kind of selection here.
+		FCKTools.DisableSelection( labelEl ) ;
+	}
+}
+
+FCKSpecialCombo.prototype.SetEnabled = function( isEnabled )
+{
+	this.Enabled = isEnabled ;
+
+	this._OuterTable.className = isEnabled ? '' : 'SC_FieldDisabled' ;
+}
+
+FCKSpecialCombo.prototype.Create = function( targetElement )
+{
+	var oDoc = FCKTools.GetElementDocument( targetElement ) ;
+	var eOuterTable = this._OuterTable = targetElement.appendChild( oDoc.createElement( 'TABLE' ) ) ;
+	eOuterTable.cellPadding = 0 ;
+	eOuterTable.cellSpacing = 0 ;
+
+	eOuterTable.insertRow(-1) ;
+
+	var sClass ;
+	var bShowLabel ;
+
+	switch ( this.Style )
+	{
+		case FCK_TOOLBARITEM_ONLYICON :
+			sClass = 'TB_ButtonType_Icon' ;
+			bShowLabel = false;
+			break ;
+		case FCK_TOOLBARITEM_ONLYTEXT :
+			sClass = 'TB_ButtonType_Text' ;
+			bShowLabel = false;
+			break ;
+		case FCK_TOOLBARITEM_ICONTEXT :
+			bShowLabel = true;
+			break ;
+	}
+
+	if ( this.Caption && this.Caption.length > 0 && bShowLabel )
+	{
+		var oCaptionCell = eOuterTable.rows[0].insertCell(-1) ;
+		oCaptionCell.innerHTML = this.Caption ;
+		oCaptionCell.className = 'SC_FieldCaption' ;
+	}
+
+	// Create the main DIV element.
+	var oField = FCKTools.AppendElement( eOuterTable.rows[0].insertCell(-1), 'div' ) ;
+	if ( bShowLabel )
+	{
+		oField.className = 'SC_Field' ;
+		oField.style.width = this.FieldWidth + 'px' ;
+		oField.innerHTML = '<table width="100%" cellpadding="0" cellspacing="0" style="TABLE-LAYOUT: fixed;"><tbody><tr><td class="SC_FieldLabel"><label>&nbsp;</label></td><td class="SC_FieldButton">&nbsp;</td></tr></tbody></table>' ;
+
+		this._LabelEl = oField.getElementsByTagName('label')[0] ;		// Memory Leak
+		this._LabelEl.innerHTML = this.Label ;
+	}
+	else
+	{
+		oField.className = 'TB_Button_Off' ;
+		//oField.innerHTML = '<span className="SC_FieldCaption">' + this.Caption + '<table cellpadding="0" cellspacing="0" style="TABLE-LAYOUT: fixed;"><tbody><tr><td class="SC_FieldButton" style="border-left: none;">&nbsp;</td></tr></tbody></table>' ;
+		//oField.innerHTML = '<table cellpadding="0" cellspacing="0" style="TABLE-LAYOUT: fixed;"><tbody><tr><td class="SC_FieldButton" style="border-left: none;">&nbsp;</td></tr></tbody></table>' ;
+
+		// Gets the correct CSS class to use for the specified style (param).
+		oField.innerHTML = '<table title="' + this.Tooltip + '" class="' + sClass + '" cellspacing="0" cellpadding="0" border="0">' +
+				'<tr>' +
+					//'<td class="TB_Icon"><img src="' + FCKConfig.SkinPath + 'toolbar/' + this.Command.Name.toLowerCase() + '.gif" width="21" height="21"></td>' +
+					'<td><img class="TB_Button_Padding" src="' + FCK_SPACER_PATH + '" /></td>' +
+					'<td class="TB_Text">' + this.Caption + '</td>' +
+					'<td><img class="TB_Button_Padding" src="' + FCK_SPACER_PATH + '" /></td>' +
+					'<td class="TB_ButtonArrow"><img src="' + FCKConfig.SkinPath + 'images/toolbar.buttonarrow.gif" width="5" height="3"></td>' +
+					'<td><img class="TB_Button_Padding" src="' + FCK_SPACER_PATH + '" /></td>' +
+				'</tr>' +
+			'</table>' ;
+	}
+
+
+	// Events Handlers
+
+	FCKTools.AddEventListenerEx( oField, 'mouseover', FCKSpecialCombo_OnMouseOver, this ) ;
+	FCKTools.AddEventListenerEx( oField, 'mouseout', FCKSpecialCombo_OnMouseOut, this ) ;
+	FCKTools.AddEventListenerEx( oField, 'click', FCKSpecialCombo_OnClick, this ) ;
+
+	FCKTools.DisableSelection( this._Panel.Document.body ) ;
+}
+
+function FCKSpecialCombo_Cleanup()
+{
+	this._LabelEl = null ;
+	this._OuterTable = null ;
+	this._ItemsHolderEl = null ;
+	this._PanelBox = null ;
+
+	if ( this.Items )
+	{
+		for ( var key in this.Items )
+			this.Items[key] = null ;
+	}
+}
+
+function FCKSpecialCombo_OnMouseOver( ev, specialCombo )
+{
+	if ( specialCombo.Enabled )
+	{
+		switch ( specialCombo.Style )
+		{
+			case FCK_TOOLBARITEM_ONLYICON :
+				this.className = 'TB_Button_On_Over';
+				break ;
+			case FCK_TOOLBARITEM_ONLYTEXT :
+				this.className = 'TB_Button_On_Over';
+				break ;
+			case FCK_TOOLBARITEM_ICONTEXT :
+				this.className = 'SC_Field SC_FieldOver' ;
+				break ;
+		}
+	}
+}
+
+function FCKSpecialCombo_OnMouseOut( ev, specialCombo )
+{
+	switch ( specialCombo.Style )
+	{
+		case FCK_TOOLBARITEM_ONLYICON :
+			this.className = 'TB_Button_Off';
+			break ;
+		case FCK_TOOLBARITEM_ONLYTEXT :
+			this.className = 'TB_Button_Off';
+			break ;
+		case FCK_TOOLBARITEM_ICONTEXT :
+			this.className='SC_Field' ;
+			break ;
+	}
+}
+
+function FCKSpecialCombo_OnClick( e, specialCombo )
+{
+	// For Mozilla we must stop the event propagation to avoid it hiding
+	// the panel because of a click outside of it.
+//	if ( e )
+//	{
+//		e.stopPropagation() ;
+//		FCKPanelEventHandlers.OnDocumentClick( e ) ;
+//	}
+
+	if ( specialCombo.Enabled )
+	{
+		var oPanel			= specialCombo._Panel ;
+		var oPanelBox		= specialCombo._PanelBox ;
+		var oItemsHolder	= specialCombo._ItemsHolderEl ;
+		var iMaxHeight		= specialCombo.PanelMaxHeight ;
+
+		if ( specialCombo.OnBeforeClick )
+			specialCombo.OnBeforeClick( specialCombo ) ;
+
+		// This is a tricky thing. We must call the "Load" function, otherwise
+		// it will not be possible to retrieve "oItemsHolder.offsetHeight" (IE only).
+		if ( FCKBrowserInfo.IsIE )
+			oPanel.Preload( 0, this.offsetHeight, this ) ;
+
+		if ( oItemsHolder.offsetHeight > iMaxHeight )
+//		{
+			oPanelBox.style.height = iMaxHeight + 'px' ;
+
+//			if ( FCKBrowserInfo.IsGecko )
+//				oPanelBox.style.overflow = '-moz-scrollbars-vertical' ;
+//		}
+		else
+			oPanelBox.style.height = '' ;
+
+//		oPanel.PanelDiv.style.width = specialCombo.PanelWidth + 'px' ;
+
+		oPanel.Show( 0, this.offsetHeight, this ) ;
+	}
+
+//	return false ;
+}
+
+/*
+Sample Combo Field HTML output:
+
+<div class="SC_Field" style="width: 80px;">
+	<table width="100%" cellpadding="0" cellspacing="0" style="table-layout: fixed;">
+		<tbody>
+			<tr>
+				<td class="SC_FieldLabel"><label>&nbsp;</label></td>
+				<td class="SC_FieldButton">&nbsp;</td>
+			</tr>
+		</tbody>
+	</table>
+</div>
+*/
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckstyle.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckstyle.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckstyle.js	(revision 1280)
@@ -0,0 +1,1280 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKStyle Class: contains a style definition, and all methods to work with
+ * the style in a document.
+ */
+
+/**
+ * @param {Object} styleDesc A "style descriptor" object, containing the raw
+ * style definition in the following format:
+ *		'<style name>' : {
+ *			Element : '<element name>',
+ *			Attributes : {
+ *				'<att name>' : '<att value>',
+ *				...
+ *			},
+ *			Styles : {
+ *				'<style name>' : '<style value>',
+ *				...
+ *			},
+ *			Overrides : '<element name>'|{
+ *				Element : '<element name>',
+ *				Attributes : {
+ *					'<att name>' : '<att value>'|/<att regex>/
+ *				},
+ *				Styles : {
+ *					'<style name>' : '<style value>'|/<style regex>/
+ *				},
+ *			}
+ *		}
+ */
+var FCKStyle = function( styleDesc )
+{
+	this.Element = ( styleDesc.Element || 'span' ).toLowerCase() ;
+	this._StyleDesc = styleDesc ;
+}
+
+FCKStyle.prototype =
+{
+	/**
+	 * Get the style type, based on its element name:
+	 *		- FCK_STYLE_BLOCK  (0): Block Style
+	 *		- FCK_STYLE_INLINE (1): Inline Style
+	 *		- FCK_STYLE_OBJECT (2): Object Style
+	 */
+	GetType : function()
+	{
+		var type = this.GetType_$ ;
+
+		if ( type != undefined )
+			return type ;
+
+		var elementName = this.Element ;
+
+		if ( elementName == '#' || FCKListsLib.StyleBlockElements[ elementName ] )
+			type = FCK_STYLE_BLOCK ;
+		else if ( FCKListsLib.StyleObjectElements[ elementName ] )
+			type = FCK_STYLE_OBJECT ;
+		else
+			type = FCK_STYLE_INLINE ;
+
+		return ( this.GetType_$ = type ) ;
+	},
+
+	/**
+	 * Apply the style to the current selection.
+	 */
+	ApplyToSelection : function( targetWindow )
+	{
+		// Create a range for the current selection.
+		var range = new FCKDomRange( targetWindow ) ;
+		range.MoveToSelection() ;
+
+		this.ApplyToRange( range, true ) ;
+	},
+
+	/**
+	 * Apply the style to a FCKDomRange.
+	 */
+	ApplyToRange : function( range, selectIt )
+	{
+		// ApplyToRange is not valid for FCK_STYLE_OBJECT types.
+		// Use ApplyToObject instead.
+
+		switch ( this.GetType() )
+		{
+			case FCK_STYLE_BLOCK :
+				this.ApplyToRange = this._ApplyBlockStyle ;
+				break ;
+			case FCK_STYLE_INLINE :
+				this.ApplyToRange = this._ApplyInlineStyle ;
+				break ;
+			default :
+				return ;
+		}
+
+		this.ApplyToRange( range, selectIt ) ;
+	},
+
+	/**
+	 * Apply the style to an object. Valid for FCK_STYLE_BLOCK types only.
+	 */
+	ApplyToObject : function( objectElement )
+	{
+		if ( !objectElement )
+			return ;
+
+		this.BuildElement( null, objectElement ) ;
+	},
+
+	/**
+	 * Remove the style from the current selection.
+	 */
+	RemoveFromSelection : function( targetWindow )
+	{
+		// Create a range for the current selection.
+		var range = new FCKDomRange( targetWindow ) ;
+		range.MoveToSelection() ;
+
+		this.RemoveFromRange( range, true ) ;
+	},
+
+	/**
+	 * Remove the style from a FCKDomRange. Block type styles will have no
+	 * effect.
+	 */
+	RemoveFromRange : function( range, selectIt )
+	{
+		var bookmark ;
+
+		// Create the attribute list to be used later for element comparisons.
+		var styleAttribs = this._GetAttribsForComparison() ;
+		var styleOverrides = this._GetOverridesForComparison() ;
+
+		// If collapsed, we are removing all conflicting styles from the range
+		// parent tree.
+		if ( range.CheckIsCollapsed() )
+		{
+			// Bookmark the range so we can re-select it after processing.
+			var bookmark = range.CreateBookmark( true ) ;
+
+			// Let's start from the bookmark <span> parent.
+			var bookmarkStart = range.GetBookmarkNode( bookmark, true ) ;
+
+			var path = new FCKElementPath( bookmarkStart.parentNode ) ;
+
+			// While looping through the path, we'll be saving references to
+			// parent elements if the range is in one of their boundaries. In
+			// this way, we are able to create a copy of those elements when
+			// removing a style if the range is in a boundary limit (see #1270).
+			var boundaryElements = [] ;
+
+			// Check if the range is in the boundary limits of an element
+			// (related to #1270).
+			var isBoundaryRight = !FCKDomTools.GetNextSibling( bookmarkStart ) ;
+			var isBoundary = isBoundaryRight || !FCKDomTools.GetPreviousSibling( bookmarkStart ) ;
+
+			// This is the last element to be removed in the boundary situation
+			// described at #1270.
+			var lastBoundaryElement ;
+			var boundaryLimitIndex = -1 ;
+
+			for ( var i = 0 ; i < path.Elements.length ; i++ )
+			{
+				var pathElement = path.Elements[i] ;
+				if ( this.CheckElementRemovable( pathElement ) )
+				{
+					if ( isBoundary
+						&& !FCKDomTools.CheckIsEmptyElement( pathElement,
+								function( el )
+								{
+									return ( el != bookmarkStart ) ;
+								} )
+						)
+					{
+						lastBoundaryElement = pathElement ;
+
+						// We'll be continuously including elements in the
+						// boundaryElements array, but only those added before
+						// setting lastBoundaryElement must be used later, so
+						// let's mark the current index here.
+						boundaryLimitIndex = boundaryElements.length - 1 ;
+					}
+					else
+					{
+						var pathElementName = pathElement.nodeName.toLowerCase() ;
+
+						if ( pathElementName == this.Element )
+						{
+							// Remove any attribute that conflict with this style, no
+							// matter their values.
+							for ( var att in styleAttribs )
+							{
+								if ( FCKDomTools.HasAttribute( pathElement, att ) )
+								{
+									switch ( att )
+									{
+										case 'style' :
+											this._RemoveStylesFromElement( pathElement ) ;
+											break ;
+
+										case 'class' :
+											// The 'class' element value must match (#1318).
+											if ( FCKDomTools.GetAttributeValue( pathElement, att ) != this.GetFinalAttributeValue( att ) )
+												continue ;
+
+										default :
+											FCKDomTools.RemoveAttribute( pathElement, att ) ;
+									}
+								}
+							}
+						}
+
+						// Remove overrides defined to the same element name.
+						this._RemoveOverrides( pathElement, styleOverrides[ pathElementName ] ) ;
+
+						// Remove the element if no more attributes are available.
+						this._RemoveNoAttribElement( pathElement ) ;
+					}
+				}
+				else if ( isBoundary )
+					boundaryElements.push( pathElement ) ;
+
+				// Check if we are still in a boundary (at the same side).
+				isBoundary = isBoundary && ( ( isBoundaryRight && !FCKDomTools.GetNextSibling( pathElement ) ) || ( !isBoundaryRight && !FCKDomTools.GetPreviousSibling( pathElement ) ) ) ;
+
+				// If we are in an element that is not anymore a boundary, or
+				// we are at the last element, let's move things outside the
+				// boundary (if available).
+				if ( lastBoundaryElement && ( !isBoundary || ( i == path.Elements.length - 1 ) ) )
+				{
+					// Remove the bookmark node from the DOM.
+					var currentElement = FCKDomTools.RemoveNode( bookmarkStart ) ;
+
+					// Build the collapsed group of elements that are not
+					// removed by this style, but share the boundary.
+					// (see comment 1 and 2 at #1270)
+					for ( var j = 0 ; j <= boundaryLimitIndex ; j++ )
+					{
+						var newElement = FCKDomTools.CloneElement( boundaryElements[j] ) ;
+						newElement.appendChild( currentElement ) ;
+						currentElement = newElement ;
+					}
+
+					// Re-insert the bookmark node (and the collapsed elements)
+					// in the DOM, in the new position next to the styled element.
+					if ( isBoundaryRight )
+						FCKDomTools.InsertAfterNode( lastBoundaryElement, currentElement ) ;
+					else
+						lastBoundaryElement.parentNode.insertBefore( currentElement, lastBoundaryElement ) ;
+
+					isBoundary = false ;
+					lastBoundaryElement = null ;
+				}
+			}
+
+				// Re-select the original range.
+			if ( selectIt )
+				range.SelectBookmark( bookmark ) ;
+
+			return ;
+		}
+
+		// Expand the range, if inside inline element boundaries.
+		range.Expand( 'inline_elements' ) ;
+
+		// Bookmark the range so we can re-select it after processing.
+		var bookmark = range.CreateBookmark( true ) ;
+
+		// The style will be applied within the bookmark boundaries.
+		var startNode	= range.GetBookmarkNode( bookmark, true ) ;
+		var endNode		= range.GetBookmarkNode( bookmark, false ) ;
+
+		range.Release( true ) ;
+
+		// We need to check the selection boundaries (bookmark spans) to break
+		// the code in a way that we can properly remove partially selected nodes.
+		// For example, removing a <b> style from
+		//		<b>This is [some text</b> to show <b>the] problem</b>
+		// ... where [ and ] represent the selection, must result:
+		//		<b>This is </b>[some text to show the]<b> problem</b>
+		// The strategy is simple, we just break the partial nodes before the
+		// removal logic, having something that could be represented this way:
+		//		<b>This is </b>[<b>some text</b> to show <b>the</b>]<b> problem</b>
+
+		// Let's start checking the start boundary.
+		var path = new FCKElementPath( startNode ) ;
+		var pathElements = path.Elements ;
+		var pathElement ;
+
+		for ( var i = 1 ; i < pathElements.length ; i++ )
+		{
+			pathElement = pathElements[i] ;
+
+			if ( pathElement == path.Block || pathElement == path.BlockLimit )
+				break ;
+
+			// If this element can be removed (even partially).
+			if ( this.CheckElementRemovable( pathElement ) )
+				FCKDomTools.BreakParent( startNode, pathElement, range ) ;
+		}
+
+		// Now the end boundary.
+		path = new FCKElementPath( endNode ) ;
+		pathElements = path.Elements ;
+
+		for ( var i = 1 ; i < pathElements.length ; i++ )
+		{
+			pathElement = pathElements[i] ;
+
+			if ( pathElement == path.Block || pathElement == path.BlockLimit )
+				break ;
+
+			elementName = pathElement.nodeName.toLowerCase() ;
+
+			// If this element can be removed (even partially).
+			if ( this.CheckElementRemovable( pathElement ) )
+				FCKDomTools.BreakParent( endNode, pathElement, range ) ;
+		}
+
+		// Navigate through all nodes between the bookmarks.
+		var currentNode = FCKDomTools.GetNextSourceNode( startNode, true ) ;
+
+		while ( currentNode )
+		{
+			// Cache the next node to be processed. Do it now, because
+			// currentNode may be removed.
+			var nextNode = FCKDomTools.GetNextSourceNode( currentNode ) ;
+
+			// Remove elements nodes that match with this style rules.
+			if ( currentNode.nodeType == 1 )
+			{
+				var elementName = currentNode.nodeName.toLowerCase() ;
+
+				var mayRemove = ( elementName == this.Element ) ;
+				if ( mayRemove )
+				{
+					// Remove any attribute that conflict with this style, no matter
+					// their values.
+					for ( var att in styleAttribs )
+					{
+						if ( FCKDomTools.HasAttribute( currentNode, att ) )
+						{
+							switch ( att )
+							{
+								case 'style' :
+									this._RemoveStylesFromElement( currentNode ) ;
+									break ;
+
+								case 'class' :
+									// The 'class' element value must match (#1318).
+									if ( FCKDomTools.GetAttributeValue( currentNode, att ) != this.GetFinalAttributeValue( att ) )
+										continue ;
+
+								default :
+									FCKDomTools.RemoveAttribute( currentNode, att ) ;
+							}
+						}
+					}
+				}
+				else
+					mayRemove = !!styleOverrides[ elementName ] ;
+
+				if ( mayRemove )
+				{
+					// Remove overrides defined to the same element name.
+					this._RemoveOverrides( currentNode, styleOverrides[ elementName ] ) ;
+
+					// Remove the element if no more attributes are available.
+					this._RemoveNoAttribElement( currentNode ) ;
+				}
+			}
+
+			// If we have reached the end of the selection, stop looping.
+			if ( nextNode == endNode )
+				break ;
+
+			currentNode = nextNode ;
+		}
+
+		this._FixBookmarkStart( startNode ) ;
+
+		// Re-select the original range.
+		if ( selectIt )
+			range.SelectBookmark( bookmark ) ;
+	},
+
+	/**
+	 * Checks if an element, or any of its attributes, is removable by the
+	 * current style definition.
+	 */
+	CheckElementRemovable : function( element, fullMatch )
+	{
+		if ( !element )
+			return false ;
+
+		var elementName = element.nodeName.toLowerCase() ;
+
+		// If the element name is the same as the style name.
+		if ( elementName == this.Element )
+		{
+			// If no attributes are defined in the element.
+			if ( !fullMatch && !FCKDomTools.HasAttributes( element ) )
+				return true ;
+
+			// If any attribute conflicts with the style attributes.
+			var attribs = this._GetAttribsForComparison() ;
+			var allMatched = ( attribs._length == 0 ) ;
+			for ( var att in attribs )
+			{
+				if ( att == '_length' )
+					continue ;
+
+				if ( this._CompareAttributeValues( att, FCKDomTools.GetAttributeValue( element, att ), ( this.GetFinalAttributeValue( att ) || '' ) ) )
+				{
+					allMatched = true ;
+					if ( !fullMatch )
+						break ;
+				}
+				else
+				{
+					allMatched = false ;
+					if ( fullMatch )
+						return false ;
+				}
+			}
+			if ( allMatched )
+				return true ;
+		}
+
+		// Check if the element can be somehow overriden.
+		var override = this._GetOverridesForComparison()[ elementName ] ;
+		if ( override )
+		{
+			// If no attributes have been defined, remove the element.
+			if ( !( attribs = override.Attributes ) ) // Only one "="
+				return true ;
+
+			for ( var i = 0 ; i < attribs.length ; i++ )
+			{
+				var attName = attribs[i][0] ;
+				if ( FCKDomTools.HasAttribute( element, attName ) )
+				{
+					var attValue = attribs[i][1] ;
+
+					// Remove the attribute if:
+					//    - The override definition value is null ;
+					//    - The override definition valie is a string that
+					//      matches the attribute value exactly.
+					//    - The override definition value is a regex that
+					//      has matches in the attribute value.
+					if ( attValue == null ||
+							( typeof attValue == 'string' && FCKDomTools.GetAttributeValue( element, attName ) == attValue ) ||
+							attValue.test( FCKDomTools.GetAttributeValue( element, attName ) ) )
+						return true ;
+				}
+			}
+		}
+
+		return false ;
+	},
+
+	/**
+	 * Get the style state for an element path. Returns "true" if the element
+	 * is active in the path.
+	 */
+	CheckActive : function( elementPath )
+	{
+		switch ( this.GetType() )
+		{
+			case FCK_STYLE_BLOCK :
+				return this.CheckElementRemovable( elementPath.Block || elementPath.BlockLimit ) ;
+
+			case FCK_STYLE_INLINE :
+
+				var elements = elementPath.Elements ;
+
+				for ( var i = 0 ; i < elements.length ; i++ )
+				{
+					var element = elements[i] ;
+
+					if ( element == elementPath.Block || element == elementPath.BlockLimit )
+						continue ;
+
+					if ( this.CheckElementRemovable( element, true ) )
+						return true ;
+				}
+		}
+		return false ;
+	},
+
+	/**
+	 * Removes an inline style from inside an element tree. The element node
+	 * itself is not checked or removed, only the child tree inside of it.
+	 */
+	RemoveFromElement : function( element )
+	{
+		var attribs = this._GetAttribsForComparison() ;
+		var overrides = this._GetOverridesForComparison() ;
+
+		// Get all elements with the same name.
+		var innerElements = element.getElementsByTagName( this.Element ) ;
+
+		for ( var i = innerElements.length - 1 ; i >= 0 ; i-- )
+		{
+			var innerElement = innerElements[i] ;
+
+			// Remove any attribute that conflict with this style, no matter
+			// their values.
+			for ( var att in attribs )
+			{
+				if ( FCKDomTools.HasAttribute( innerElement, att ) )
+				{
+					switch ( att )
+					{
+						case 'style' :
+							this._RemoveStylesFromElement( innerElement ) ;
+							break ;
+
+						case 'class' :
+							// The 'class' element value must match (#1318).
+							if ( FCKDomTools.GetAttributeValue( innerElement, att ) != this.GetFinalAttributeValue( att ) )
+								continue ;
+
+						default :
+							FCKDomTools.RemoveAttribute( innerElement, att ) ;
+					}
+				}
+			}
+
+			// Remove overrides defined to the same element name.
+			this._RemoveOverrides( innerElement, overrides[ this.Element ] ) ;
+
+			// Remove the element if no more attributes are available.
+			this._RemoveNoAttribElement( innerElement ) ;
+		}
+
+		// Now remove any other element with different name that is
+		// defined to be overriden.
+		for ( var overrideElement in overrides )
+		{
+			if ( overrideElement != this.Element )
+			{
+				// Get all elements.
+				innerElements = element.getElementsByTagName( overrideElement ) ;
+
+				for ( var i = innerElements.length - 1 ; i >= 0 ; i-- )
+				{
+					var innerElement = innerElements[i] ;
+					this._RemoveOverrides( innerElement, overrides[ overrideElement ] ) ;
+					this._RemoveNoAttribElement( innerElement ) ;
+				}
+			}
+		}
+	},
+
+	_RemoveStylesFromElement : function( element )
+	{
+		var elementStyle = element.style.cssText ;
+		var pattern = this.GetFinalStyleValue() ;
+
+		if ( elementStyle.length > 0 && pattern.length == 0 )
+			return ;
+
+		pattern = '(^|;)\\s*(' +
+			pattern.replace( /\s*([^ ]+):.*?(;|$)/g, '$1|' ).replace( /\|$/, '' ) +
+			'):[^;]+' ;
+
+		var regex = new RegExp( pattern, 'gi' ) ;
+
+		elementStyle = elementStyle.replace( regex, '' ).Trim() ;
+
+		if ( elementStyle.length == 0 || elementStyle == ';' )
+			FCKDomTools.RemoveAttribute( element, 'style' ) ;
+		else
+			element.style.cssText = elementStyle.replace( regex, '' ) ;
+	},
+
+	/**
+	 * Remove all attributes that are defined to be overriden,
+	 */
+	_RemoveOverrides : function( element, override )
+	{
+		var attributes = override && override.Attributes ;
+
+		if ( attributes )
+		{
+			for ( var i = 0 ; i < attributes.length ; i++ )
+			{
+				var attName = attributes[i][0] ;
+
+				if ( FCKDomTools.HasAttribute( element, attName ) )
+				{
+					var attValue	= attributes[i][1] ;
+
+					// Remove the attribute if:
+					//    - The override definition value is null ;
+					//    - The override definition valie is a string that
+					//      matches the attribute value exactly.
+					//    - The override definition value is a regex that
+					//      has matches in the attribute value.
+					if ( attValue == null ||
+							( attValue.test && attValue.test( FCKDomTools.GetAttributeValue( element, attName ) ) ) ||
+							( typeof attValue == 'string' && FCKDomTools.GetAttributeValue( element, attName ) == attValue ) )
+						FCKDomTools.RemoveAttribute( element, attName ) ;
+				}
+			}
+		}
+	},
+
+	/**
+	 * If the element has no more attributes, remove it.
+	 */
+	_RemoveNoAttribElement : function( element )
+	{
+		// If no more attributes remained in the element, remove it,
+		// leaving its children.
+		if ( !FCKDomTools.HasAttributes( element ) )
+		{
+			// Removing elements may open points where merging is possible,
+			// so let's cache the first and last nodes for later checking.
+			var firstChild	= element.firstChild ;
+			var lastChild	= element.lastChild ;
+
+			FCKDomTools.RemoveNode( element, true ) ;
+
+			// Check the cached nodes for merging.
+			this._MergeSiblings( firstChild ) ;
+
+			if ( firstChild != lastChild )
+				this._MergeSiblings( lastChild ) ;
+		}
+	},
+
+	/**
+	 * Creates a DOM element for this style object.
+	 */
+	BuildElement : function( targetDoc, element )
+	{
+		// Create the element.
+		var el = element || targetDoc.createElement( this.Element ) ;
+
+		// Assign all defined attributes.
+		var attribs	= this._StyleDesc.Attributes ;
+		var attValue ;
+		if ( attribs )
+		{
+			for ( var att in attribs )
+			{
+				attValue = this.GetFinalAttributeValue( att ) ;
+
+				if ( att.toLowerCase() == 'class' )
+					el.className = attValue ;
+				else
+					el.setAttribute( att, attValue ) ;
+			}
+		}
+
+		// Assign the style attribute.
+		if ( this._GetStyleText().length > 0 )
+			el.style.cssText = this.GetFinalStyleValue() ;
+
+		return el ;
+	},
+
+	_CompareAttributeValues : function( attName, valueA, valueB )
+	{
+		if ( attName == 'style' && valueA && valueB )
+		{
+			valueA = valueA.replace( /;$/, '' ).toLowerCase() ;
+			valueB = valueB.replace( /;$/, '' ).toLowerCase() ;
+		}
+
+		return ( valueA == valueB )
+	},
+
+	GetFinalAttributeValue : function( attName )
+	{
+		var attValue = this._StyleDesc.Attributes ;
+		var attValue = attValue ? attValue[ attName ] : null ;
+
+		if ( !attValue && attName == 'style' )
+			return this.GetFinalStyleValue() ;
+
+		if ( attValue && this._Variables )
+			// Using custom Replace() to guarantee the correct scope.
+			attValue = attValue.Replace( FCKRegexLib.StyleVariableAttName, this._GetVariableReplace, this ) ;
+
+		return attValue ;
+	},
+
+	GetFinalStyleValue : function()
+	{
+		var attValue = this._GetStyleText() ;
+
+		if ( attValue.length > 0 && this._Variables )
+		{
+			// Using custom Replace() to guarantee the correct scope.
+			attValue = attValue.Replace( FCKRegexLib.StyleVariableAttName, this._GetVariableReplace, this ) ;
+			attValue = FCKTools.NormalizeCssText( attValue ) ;
+		}
+
+		return attValue ;
+	},
+
+	_GetVariableReplace : function()
+	{
+		// The second group in the regex is the variable name.
+		return this._Variables[ arguments[2] ] || arguments[0] ;
+	},
+
+	/**
+	 * Set the value of a variable attribute or style, to be used when
+	 * appliying the style.
+	 */
+	SetVariable : function( name, value )
+	{
+		var variables = this._Variables ;
+
+		if ( !variables )
+			variables = this._Variables = {} ;
+
+		this._Variables[ name ] = value ;
+	},
+
+	/**
+	 * Apply an inline style to a FCKDomRange.
+	 *
+	 * TODO
+	 *	- Implement the "#" style handling.
+	 *	- Properly handle block containers like <div> and <blockquote>.
+	 */
+	_ApplyBlockStyle : function( range, selectIt )
+	{
+		// Bookmark the range so we can re-select it after processing.
+		var bookmark ;
+
+		if ( selectIt )
+			bookmark = range.CreateBookmark( true ) ;
+
+		var iterator = new FCKDomRangeIterator( range ) ;
+		iterator.EnforceRealBlocks = true ;
+
+		var block ;
+		while( ( block = iterator.GetNextParagraph() ) )		// Only one =
+		{
+			// Create the new node right before the current one.
+			var newBlock = block.parentNode.insertBefore( this.BuildElement( range.Window.document ), block ) ;
+
+			// Move everything from the current node to the new one.
+			FCKDomTools.MoveChildren( block, newBlock ) ;
+
+			// Delete the current node.
+			FCKDomTools.RemoveNode( block ) ;
+		}
+
+		// Re-select the original range.
+		if ( selectIt )
+			range.SelectBookmark( bookmark ) ;
+	},
+
+	/**
+	 * Apply an inline style to a FCKDomRange.
+	 *
+	 * TODO
+	 *	- Merge elements, when applying styles to similar elements that enclose
+	 *    the entire selection, outputing:
+	 *        <span style="color: #ff0000; background-color: #ffffff">XYZ</span>
+	 *    instead of:
+	 *        <span style="color: #ff0000;"><span style="background-color: #ffffff">XYZ</span></span>
+	 */
+	_ApplyInlineStyle : function( range, selectIt )
+	{
+		var doc = range.Window.document ;
+
+		if ( range.CheckIsCollapsed() )
+		{
+			// Create the element to be inserted in the DOM.
+			var collapsedElement = this.BuildElement( doc ) ;
+			range.InsertNode( collapsedElement ) ;
+			range.MoveToPosition( collapsedElement, 2 ) ;
+			range.Select() ;
+
+			return ;
+		}
+
+		// The general idea here is navigating through all nodes inside the
+		// current selection, working on distinct range blocks, defined by the
+		// DTD compatibility between the style element and the nodes inside the
+		// ranges.
+		//
+		// For example, suppose we have the following selection (where [ and ]
+		// are the boundaries), and we apply a <b> style there:
+		//
+		//		<p>Here we [have <b>some</b> text.<p>
+		//		<p>And some here] here.</p>
+		//
+		// Two different ranges will be detected:
+		//
+		//		"have <b>some</b> text."
+		//		"And some here"
+		//
+		// Both ranges will be extracted, moved to a <b> element, and
+		// re-inserted, resulting in the following output:
+		//
+		//		<p>Here we [<b>have some text.</b><p>
+		//		<p><b>And some here</b>] here.</p>
+		//
+		// Note that the <b> element at <b>some</b> is also removed because it
+		// is not needed anymore.
+
+		var elementName = this.Element ;
+
+		// Get the DTD definition for the element. Defaults to "span".
+		var elementDTD = FCK.DTD[ elementName ] || FCK.DTD.span ;
+
+		// Create the attribute list to be used later for element comparisons.
+		var styleAttribs = this._GetAttribsForComparison() ;
+		var styleNode ;
+
+		// Expand the range, if inside inline element boundaries.
+		range.Expand( 'inline_elements' ) ;
+
+		// Bookmark the range so we can re-select it after processing.
+		var bookmark = range.CreateBookmark( true ) ;
+
+		// The style will be applied within the bookmark boundaries.
+		var startNode	= range.GetBookmarkNode( bookmark, true ) ;
+		var endNode		= range.GetBookmarkNode( bookmark, false ) ;
+
+		// We'll be reusing the range to apply the styles. So, release it here
+		// to indicate that it has not been initialized.
+		range.Release( true ) ;
+
+		// Let's start the nodes lookup from the node right after the bookmark
+		// span.
+		var currentNode = FCKDomTools.GetNextSourceNode( startNode, true ) ;
+
+		while ( currentNode )
+		{
+			var applyStyle = false ;
+
+			var nodeType = currentNode.nodeType ;
+			var nodeName = nodeType == 1 ? currentNode.nodeName.toLowerCase() : null ;
+
+			// Check if the current node can be a child of the style element.
+			if ( !nodeName || elementDTD[ nodeName ] )
+			{
+				// Check if the style element can be a child of the current
+				// node parent.
+				if ( ( FCK.DTD[ currentNode.parentNode.nodeName.toLowerCase() ] || FCK.DTD.span )[ elementName ] )
+				{
+					// This node will be part of our range, so if it has not
+					// been started, place its start right before the node.
+					if ( !range.CheckHasRange() )
+						range.SetStart( currentNode, 3 ) ;
+
+					// Non element nodes, or empty elements can be added
+					// completely to the range.
+					if ( nodeType != 1 || currentNode.childNodes.length == 0 )
+					{
+						var includedNode = currentNode ;
+						var parentNode = includedNode.parentNode ;
+
+						// This node is about to be included completelly, but,
+						// if this is the last node in its parent, we must also
+						// check if the parent itself can be added completelly
+						// to the range.
+						while ( includedNode == parentNode.lastChild
+							&& elementDTD[ parentNode.nodeName.toLowerCase() ] )
+						{
+							includedNode = parentNode ;
+						}
+
+						range.SetEnd( includedNode, 4 ) ;
+
+						// If the included node is the last node in its parent
+						// and its parent can't be inside the style node, apply
+						// the style immediately.
+						if ( includedNode == includedNode.parentNode.lastChild && !elementDTD[ includedNode.parentNode.nodeName.toLowerCase() ] )
+							applyStyle = true ;
+					}
+					else
+					{
+						// Element nodes will not be added directly. We need to
+						// check their children because the selection could end
+						// inside the node, so let's place the range end right
+						// before the element.
+						range.SetEnd( currentNode, 3 ) ;
+					}
+				}
+				else
+					applyStyle = true ;
+			}
+			else
+				applyStyle = true ;
+
+			// Get the next node to be processed.
+			currentNode = FCKDomTools.GetNextSourceNode( currentNode ) ;
+
+			// If we have reached the end of the selection, just apply the
+			// style ot the range, and stop looping.
+			if ( currentNode == endNode )
+			{
+				currentNode = null ;
+				applyStyle = true ;
+			}
+
+			// Apply the style if we have something to which apply it.
+			if ( applyStyle && range.CheckHasRange() && !range.CheckIsCollapsed() )
+			{
+				// Build the style element, based on the style object definition.
+				styleNode = this.BuildElement( doc ) ;
+
+				// Move the contents of the range to the style element.
+				range.ExtractContents().AppendTo( styleNode ) ;
+
+				// If it is not empty.
+				if ( styleNode.innerHTML.RTrim().length > 0 )
+				{
+					// Insert it in the range position (it is collapsed after
+					// ExtractContents.
+					range.InsertNode( styleNode ) ;
+
+					// Here we do some cleanup, removing all duplicated
+					// elements from the style element.
+					this.RemoveFromElement( styleNode ) ;
+
+					// Let's merge our new style with its neighbors, if possible.
+					this._MergeSiblings( styleNode, this._GetAttribsForComparison() ) ;
+
+					// As the style system breaks text nodes constantly, let's normalize
+					// things for performance.
+					// With IE, some paragraphs get broken when calling normalize()
+					// repeatedly. Also, for IE, we must normalize body, not documentElement.
+					// IE is also known for having a "crash effect" with normalize().
+					// We should try to normalize with IE too in some way, somewhere.
+					if ( !FCKBrowserInfo.IsIE )
+						styleNode.normalize() ;
+				}
+
+				// Style applied, let's release the range, so it gets marked to
+				// re-initialization in the next loop.
+				range.Release( true ) ;
+			}
+		}
+
+		this._FixBookmarkStart( startNode ) ;
+
+		// Re-select the original range.
+		if ( selectIt )
+			range.SelectBookmark( bookmark ) ;
+	},
+
+	_FixBookmarkStart : function( startNode )
+	{
+		// After appliying or removing an inline style, the start boundary of
+		// the selection must be placed inside all inline elements it is
+		// bordering.
+		var startSibling ;
+		while ( ( startSibling = startNode.nextSibling ) )	// Only one "=".
+		{
+			if ( startSibling.nodeType == 1
+				&& FCKListsLib.InlineNonEmptyElements[ startSibling.nodeName.toLowerCase() ] )
+			{
+				// If it is an empty inline element, we can safely remove it.
+				if ( !startSibling.firstChild )
+					FCKDomTools.RemoveNode( startSibling ) ;
+				else
+					FCKDomTools.MoveNode( startNode, startSibling, true ) ;
+				continue ;
+			}
+
+			// Empty text nodes can be safely removed to not disturb.
+			if ( startSibling.nodeType == 3 && startSibling.length == 0 )
+			{
+				FCKDomTools.RemoveNode( startSibling ) ;
+				continue ;
+			}
+
+			break ;
+		}
+	},
+
+	/**
+	 * Merge an element with its similar siblings.
+	 * "attribs" is and object computed with _CreateAttribsForComparison.
+	 */
+	_MergeSiblings : function( element, attribs )
+	{
+		if ( !element || element.nodeType != 1 || !FCKListsLib.InlineNonEmptyElements[ element.nodeName.toLowerCase() ] )
+			return ;
+
+		this._MergeNextSibling( element, attribs ) ;
+		this._MergePreviousSibling( element, attribs ) ;
+	},
+
+	/**
+	 * Merge an element with its similar siblings after it.
+	 * "attribs" is and object computed with _CreateAttribsForComparison.
+	 */
+	_MergeNextSibling : function( element, attribs )
+	{
+		// Check the next sibling.
+		var sibling = element.nextSibling ;
+
+		// Check if the next sibling is a bookmark element. In this case, jump it.
+		var hasBookmark = ( sibling && sibling.nodeType == 1 && sibling.getAttribute( '_fck_bookmark' ) ) ;
+		if ( hasBookmark )
+			sibling = sibling.nextSibling ;
+
+		if ( sibling && sibling.nodeType == 1 && sibling.nodeName == element.nodeName )
+		{
+			if ( !attribs )
+				attribs = this._CreateElementAttribsForComparison( element ) ;
+
+			if ( this._CheckAttributesMatch( sibling, attribs ) )
+			{
+				// Save the last child to be checked too (to merge things like <b><i></i></b><b><i></i></b>).
+				var innerSibling = element.lastChild ;
+
+				if ( hasBookmark )
+					FCKDomTools.MoveNode( element.nextSibling, element ) ;
+
+				// Move contents from the sibling.
+				FCKDomTools.MoveChildren( sibling, element ) ;
+				FCKDomTools.RemoveNode( sibling ) ;
+
+				// Now check the last inner child (see two comments above).
+				if ( innerSibling )
+					this._MergeNextSibling( innerSibling ) ;
+			}
+		}
+	},
+
+	/**
+	 * Merge an element with its similar siblings before it.
+	 * "attribs" is and object computed with _CreateAttribsForComparison.
+	 */
+	_MergePreviousSibling : function( element, attribs )
+	{
+		// Check the previous sibling.
+		var sibling = element.previousSibling ;
+
+		// Check if the previous sibling is a bookmark element. In this case, jump it.
+		var hasBookmark = ( sibling && sibling.nodeType == 1 && sibling.getAttribute( '_fck_bookmark' ) ) ;
+		if ( hasBookmark )
+			sibling = sibling.previousSibling ;
+
+		if ( sibling && sibling.nodeType == 1 && sibling.nodeName == element.nodeName )
+		{
+			if ( !attribs )
+				attribs = this._CreateElementAttribsForComparison( element ) ;
+
+			if ( this._CheckAttributesMatch( sibling, attribs ) )
+			{
+				// Save the first child to be checked too (to merge things like <b><i></i></b><b><i></i></b>).
+				var innerSibling = element.firstChild ;
+
+				if ( hasBookmark )
+					FCKDomTools.MoveNode( element.previousSibling, element, true ) ;
+
+				// Move contents to the sibling.
+				FCKDomTools.MoveChildren( sibling, element, true ) ;
+				FCKDomTools.RemoveNode( sibling ) ;
+
+				// Now check the first inner child (see two comments above).
+				if ( innerSibling )
+					this._MergePreviousSibling( innerSibling ) ;
+			}
+		}
+	},
+
+	/**
+	 * Build the cssText based on the styles definition.
+	 */
+	_GetStyleText : function()
+	{
+		var stylesDef = this._StyleDesc.Styles ;
+
+		// Builds the StyleText.
+		var stylesText = ( this._StyleDesc.Attributes ? this._StyleDesc.Attributes['style'] || '' : '' ) ;
+
+		if ( stylesText.length > 0 )
+			stylesText += ';' ;
+
+		for ( var style in stylesDef )
+			stylesText += style + ':' + stylesDef[style] + ';' ;
+
+		// Browsers make some changes to the style when applying them. So, here
+		// we normalize it to the browser format. We'll not do that if there
+		// are variables inside the style.
+		if ( stylesText.length > 0 && !( /#\(/.test( stylesText ) ) )
+		{
+			stylesText = FCKTools.NormalizeCssText( stylesText ) ;
+		}
+
+		return (this._GetStyleText = function() { return stylesText ; })() ;
+	},
+
+	/**
+	 * Get the the collection used to compare the attributes defined in this
+	 * style with attributes in an element. All information in it is lowercased.
+	 */
+	_GetAttribsForComparison : function()
+	{
+		// If we have already computed it, just return it.
+		var attribs = this._GetAttribsForComparison_$ ;
+		if ( attribs )
+			return attribs ;
+
+		attribs = new Object() ;
+
+		// Loop through all defined attributes.
+		var styleAttribs = this._StyleDesc.Attributes ;
+		if ( styleAttribs )
+		{
+			for ( var styleAtt in styleAttribs )
+			{
+				attribs[ styleAtt.toLowerCase() ] = styleAttribs[ styleAtt ].toLowerCase() ;
+			}
+		}
+
+		// Includes the style definitions.
+		if ( this._GetStyleText().length > 0 )
+		{
+			attribs['style'] = this._GetStyleText().toLowerCase() ;
+		}
+
+		// Appends the "length" information to the object.
+		FCKTools.AppendLengthProperty( attribs, '_length' ) ;
+
+		// Return it, saving it to the next request.
+		return ( this._GetAttribsForComparison_$ = attribs ) ;
+	},
+
+	/**
+	 * Get the the collection used to compare the elements and attributes,
+	 * defined in this style overrides, with other element. All information in
+	 * it is lowercased.
+	 */
+	_GetOverridesForComparison : function()
+	{
+		// If we have already computed it, just return it.
+		var overrides = this._GetOverridesForComparison_$ ;
+		if ( overrides )
+			return overrides ;
+
+		overrides = new Object() ;
+
+		var overridesDesc = this._StyleDesc.Overrides ;
+
+		if ( overridesDesc )
+		{
+			// The override description can be a string, object or array.
+			// Internally, well handle arrays only, so transform it if needed.
+			if ( !FCKTools.IsArray( overridesDesc ) )
+				overridesDesc = [ overridesDesc ] ;
+
+			// Loop through all override definitions.
+			for ( var i = 0 ; i < overridesDesc.length ; i++ )
+			{
+				var override = overridesDesc[i] ;
+				var elementName ;
+				var overrideEl ;
+				var attrs ;
+
+				// If can be a string with the element name.
+				if ( typeof override == 'string' )
+					elementName = override.toLowerCase() ;
+				// Or an object.
+				else
+				{
+					elementName = override.Element ? override.Element.toLowerCase() : this.Element ;
+					attrs = override.Attributes ;
+				}
+
+				// We can have more than one override definition for the same
+				// element name, so we attempt to simply append information to
+				// it if it already exists.
+				overrideEl = overrides[ elementName ] || ( overrides[ elementName ] = {} ) ;
+
+				if ( attrs )
+				{
+					// The returning attributes list is an array, because we
+					// could have different override definitions for the same
+					// attribute name.
+					var overrideAttrs = ( overrideEl.Attributes = overrideEl.Attributes || new Array() ) ;
+					for ( var attName in attrs )
+					{
+						// Each item in the attributes array is also an array,
+						// where [0] is the attribute name and [1] is the
+						// override value.
+						overrideAttrs.push( [ attName.toLowerCase(), attrs[ attName ] ] ) ;
+					}
+				}
+			}
+		}
+
+		return ( this._GetOverridesForComparison_$ = overrides ) ;
+	},
+
+	/*
+	 * Create and object containing all attributes specified in an element,
+	 * added by a "_length" property. All values are lowercased.
+	 */
+	_CreateElementAttribsForComparison : function( element )
+	{
+		var attribs = new Object() ;
+		var attribsCount = 0 ;
+
+		for ( var i = 0 ; i < element.attributes.length ; i++ )
+		{
+			var att = element.attributes[i] ;
+
+			if ( att.specified )
+			{
+				attribs[ att.nodeName.toLowerCase() ] = FCKDomTools.GetAttributeValue( element, att ).toLowerCase() ;
+				attribsCount++ ;
+			}
+		}
+
+		attribs._length = attribsCount ;
+
+		return attribs ;
+	},
+
+	/**
+	 * Checks is the element attributes have a perfect match with the style
+	 * attributes.
+	 */
+	_CheckAttributesMatch : function( element, styleAttribs )
+	{
+		// Loop through all specified attributes. The same number of
+		// attributes must be found and their values must match to
+		// declare them as equal.
+
+		var elementAttrbs = element.attributes ;
+		var matchCount = 0 ;
+
+		for ( var i = 0 ; i < elementAttrbs.length ; i++ )
+		{
+			var att = elementAttrbs[i] ;
+			if ( att.specified )
+			{
+				var attName = att.nodeName.toLowerCase() ;
+				var styleAtt = styleAttribs[ attName ] ;
+
+				// The attribute is not defined in the style.
+				if ( !styleAtt )
+					break ;
+
+				// The values are different.
+				if ( styleAtt != FCKDomTools.GetAttributeValue( element, att ).toLowerCase() )
+					break ;
+
+				matchCount++ ;
+			}
+		}
+
+		return ( matchCount == styleAttribs._length ) ;
+	}
+} ;
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckstyledef.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckstyledef.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckstyledef.js	(revision 1280)
@@ -0,0 +1,59 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKStyleDef Class: represents a single style definition.
+ */
+
+var FCKStyleDef = function( name, element )
+{
+	this.Name = name ;
+	this.Element = element.toUpperCase() ;
+	this.IsObjectElement = FCKRegexLib.ObjectElements.test( this.Element ) ;
+	this.Attributes = new Object() ;
+}
+
+FCKStyleDef.prototype.AddAttribute = function( name, value )
+{
+	this.Attributes[ name ] = value ;
+}
+
+FCKStyleDef.prototype.GetOpenerTag = function()
+{
+	var s = '<' + this.Element ;
+
+	for ( var a in this.Attributes )
+		s += ' ' + a + '="' + this.Attributes[a] + '"' ;
+
+	return s + '>' ;
+}
+
+FCKStyleDef.prototype.GetCloserTag = function()
+{
+	return '</' + this.Element + '>' ;
+}
+
+
+FCKStyleDef.prototype.RemoveFromSelection = function()
+{
+	if ( FCKSelection.GetType() == 'Control' )
+		this._RemoveMe( FCK.ToolbarSet.CurrentInstance.Selection.GetSelectedElement() ) ;
+	else
+		this._RemoveMe( FCK.ToolbarSet.CurrentInstance.Selection.GetParentElement() ) ;
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckstyledef_gecko.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckstyledef_gecko.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckstyledef_gecko.js	(revision 1280)
@@ -0,0 +1,119 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKStyleDef Class: represents a single style definition. (Gecko specific)
+ */
+
+FCKStyleDef.prototype.ApplyToSelection = function()
+{
+	if ( FCKSelection.GetType() == 'Text' && !this.IsObjectElement )
+	{
+		var oSelection = FCK.ToolbarSet.CurrentInstance.EditorWindow.getSelection() ;
+
+		// Create the main element.
+		var e = FCK.ToolbarSet.CurrentInstance.EditorDocument.createElement( this.Element ) ;
+
+		for ( var i = 0 ; i < oSelection.rangeCount ; i++ )
+		{
+			e.appendChild( oSelection.getRangeAt(i).extractContents() ) ;
+		}
+
+		// Set the attributes.
+		this._AddAttributes( e ) ;
+
+		// Remove the duplicated elements.
+		this._RemoveDuplicates( e ) ;
+
+		var oRange = oSelection.getRangeAt(0) ;
+		oRange.insertNode( e ) ;
+	}
+	else
+	{
+		var oControl = FCK.ToolbarSet.CurrentInstance.Selection.GetSelectedElement() ;
+		if ( oControl.tagName == this.Element )
+			this._AddAttributes( oControl ) ;
+	}
+}
+
+FCKStyleDef.prototype._AddAttributes = function( targetElement )
+{
+	for ( var a in this.Attributes )
+	{
+		switch ( a.toLowerCase() )
+		{
+			case 'src' :
+				targetElement.setAttribute( '_fcksavedurl', this.Attributes[a], 0 ) ;
+			default :
+				targetElement.setAttribute( a, this.Attributes[a], 0 ) ;
+		}
+	}
+}
+
+FCKStyleDef.prototype._RemoveDuplicates = function( parent )
+{
+	for ( var i = 0 ; i < parent.childNodes.length ; i++ )
+	{
+		var oChild = parent.childNodes[i] ;
+
+		if ( oChild.nodeType != 1 )
+			continue ;
+
+		this._RemoveDuplicates( oChild ) ;
+
+		if ( this.IsEqual( oChild ) )
+			FCKTools.RemoveOuterTags( oChild ) ;
+	}
+}
+
+FCKStyleDef.prototype.IsEqual = function( e )
+{
+	if ( e.tagName != this.Element )
+		return false ;
+
+	for ( var a in this.Attributes )
+	{
+		if ( e.getAttribute( a ) != this.Attributes[a] )
+			return false ;
+	}
+
+	return true ;
+}
+
+FCKStyleDef.prototype._RemoveMe = function( elementToCheck )
+{
+	if ( ! elementToCheck )
+		return ;
+
+	var oParent = elementToCheck.parentNode ;
+
+	if ( elementToCheck.nodeType == 1 && this.IsEqual( elementToCheck ) )
+	{
+		if ( this.IsObjectElement )
+		{
+			for ( var a in this.Attributes )
+				elementToCheck.removeAttribute( a, 0 ) ;
+			return ;
+		}
+		else
+			FCKTools.RemoveOuterTags( elementToCheck ) ;
+	}
+
+	this._RemoveMe( oParent ) ;
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckstyledef_ie.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckstyledef_ie.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckstyledef_ie.js	(revision 1280)
@@ -0,0 +1,142 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKStyleDef Class: represents a single style definition. (IE specific)
+ */
+
+FCKStyleDef.prototype.ApplyToSelection = function()
+{
+	var oSelection = FCK.ToolbarSet.CurrentInstance.EditorDocument.selection ;
+
+	if ( oSelection.type == 'Text' )
+	{
+		var oRange = oSelection.createRange() ;
+
+		// Create the main element.
+		var e = document.createElement( this.Element ) ;
+		e.innerHTML = oRange.htmlText ;
+
+		// Set the attributes.
+		this._AddAttributes( e ) ;
+
+		// Remove the duplicated elements.
+		this._RemoveDuplicates( e ) ;
+
+		// Replace the selection with the resulting HTML.
+		oRange.pasteHTML( e.outerHTML ) ;
+	}
+	else if ( oSelection.type == 'Control' )
+	{
+		var oControl = FCK.ToolbarSet.CurrentInstance.Selection.GetSelectedElement() ;
+		if ( oControl.tagName == this.Element )
+			this._AddAttributes( oControl ) ;
+	}
+}
+
+FCKStyleDef.prototype._AddAttributes = function( targetElement )
+{
+	for ( var a in this.Attributes )
+	{
+		switch ( a.toLowerCase() )
+		{
+			case 'style' :
+				targetElement.style.cssText = this.Attributes[a] ;
+				break ;
+
+			case 'class' :
+				targetElement.setAttribute( 'className', this.Attributes[a], 0 ) ;
+				break ;
+
+			case 'src' :
+				targetElement.setAttribute( '_fcksavedurl', this.Attributes[a], 0 ) ;
+			default :
+				targetElement.setAttribute( a, this.Attributes[a], 0 ) ;
+		}
+	}
+}
+
+FCKStyleDef.prototype._RemoveDuplicates = function( parent )
+{
+	for ( var i = 0 ; i < parent.children.length ; i++ )
+	{
+		var oChild = parent.children[i] ;
+		this._RemoveDuplicates( oChild ) ;
+
+		if ( this.IsEqual( oChild ) )
+			FCKTools.RemoveOuterTags( oChild ) ;
+	}
+}
+
+FCKStyleDef.prototype.IsEqual = function( e )
+{
+	if ( e.tagName != this.Element )
+		return false ;
+
+	for ( var a in this.Attributes )
+	{
+		switch ( a.toLowerCase() )
+		{
+			case 'style' :
+				if ( e.style.cssText.toLowerCase() != this.Attributes[a].toLowerCase() )
+					return false ;
+				break ;
+			case 'class' :
+				if ( e.getAttribute( 'className', 0 ) != this.Attributes[a] )
+					return false ;
+				break ;
+			default :
+				if ( e.getAttribute( a, 0 ) != this.Attributes[a] )
+					return false ;
+		}
+	}
+
+	return true ;
+}
+
+FCKStyleDef.prototype._RemoveMe = function( elementToCheck )
+{
+	if ( ! elementToCheck )
+		return ;
+
+	var oParent = elementToCheck.parentElement ;
+
+	if ( this.IsEqual( elementToCheck ) )
+	{
+		if ( this.IsObjectElement )
+		{
+			for ( var a in this.Attributes )
+			{
+				switch ( a.toLowerCase() )
+				{
+					case 'class' :
+						elementToCheck.removeAttribute( 'className', 0 ) ;
+						break ;
+					default :
+						elementToCheck.removeAttribute( a, 0 ) ;
+				}
+			}
+			return ;
+		}
+		else
+			FCKTools.RemoveOuterTags( elementToCheck ) ;
+	}
+
+	this._RemoveMe( oParent ) ;
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckstylesloader.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckstylesloader.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckstylesloader.js	(revision 1280)
@@ -0,0 +1,88 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKStylesLoader Class: this class define objects that are responsible
+ * for loading the styles defined in the XML file.
+ */
+
+var FCKStylesLoader = function()
+{
+	this.Styles = new Object() ;
+	this.StyleGroups = new Object() ;
+	this.Loaded = false ;
+	this.HasObjectElements = false ;
+}
+
+FCKStylesLoader.prototype.Load = function( stylesXmlUrl )
+{
+	// Load the XML file into a FCKXml object.
+	var oXml = new FCKXml() ;
+	oXml.LoadUrl( stylesXmlUrl ) ;
+
+	// Get the "Style" nodes defined in the XML file.
+	var aStyleNodes = oXml.SelectNodes( 'Styles/Style' ) ;
+
+	// Add each style to our "Styles" collection.
+	for ( var i = 0 ; i < aStyleNodes.length ; i++ )
+	{
+		var sElement = aStyleNodes[i].attributes.getNamedItem('element').value.toUpperCase() ;
+
+		// Create the style definition object.
+		var oStyleDef = new FCKStyleDef( aStyleNodes[i].attributes.getNamedItem('name').value, sElement ) ;
+
+		if ( oStyleDef.IsObjectElement )
+			this.HasObjectElements = true ;
+
+		// Get the attributes defined for the style (if any).
+		var aAttNodes = oXml.SelectNodes( 'Attribute', aStyleNodes[i] ) ;
+
+		// Add the attributes to the style definition object.
+		for ( var j = 0 ; j < aAttNodes.length ; j++ )
+		{
+			var sAttName	= aAttNodes[j].attributes.getNamedItem('name').value ;
+			var sAttValue	= aAttNodes[j].attributes.getNamedItem('value').value ;
+
+			// IE changes the "style" attribute value when applied to an element
+			// so we must get the final resulting value (for comparison issues).
+			if ( sAttName.toLowerCase() == 'style' )
+			{
+				var oTempE = document.createElement( 'SPAN' ) ;
+				oTempE.style.cssText = sAttValue ;
+				sAttValue = oTempE.style.cssText ;
+			}
+
+			oStyleDef.AddAttribute( sAttName, sAttValue ) ;
+		}
+
+		// Add the style to the "Styles" collection using it's name as the key.
+		this.Styles[ oStyleDef.Name ] = oStyleDef ;
+
+		// Add the style to the "StyleGroups" collection.
+		var aGroup = this.StyleGroups[sElement] ;
+		if ( aGroup == null )
+		{
+			this.StyleGroups[sElement] = new Array() ;
+			aGroup = this.StyleGroups[sElement] ;
+		}
+		aGroup[aGroup.length] = oStyleDef ;
+	}
+
+	this.Loaded = true ;
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fcktoolbar.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fcktoolbar.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fcktoolbar.js	(revision 1280)
@@ -0,0 +1,103 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKToolbar Class: represents a toolbar in the toolbarset. It is a group of
+ * toolbar items.
+ */
+
+var FCKToolbar = function()
+{
+	this.Items = new Array() ;
+}
+
+FCKToolbar.prototype.AddItem = function( item )
+{
+	return this.Items[ this.Items.length ] = item ;
+}
+
+FCKToolbar.prototype.AddButton = function( name, label, tooltip, iconPathOrStripInfoArrayOrIndex, style, state )
+{
+	if ( typeof( iconPathOrStripInfoArrayOrIndex ) == 'number' )
+		 iconPathOrStripInfoArrayOrIndex = [ this.DefaultIconsStrip, this.DefaultIconSize, iconPathOrStripInfoArrayOrIndex ] ;
+
+	var oButton = new FCKToolbarButtonUI( name, label, tooltip, iconPathOrStripInfoArrayOrIndex, style, state ) ;
+	oButton._FCKToolbar = this ;
+	oButton.OnClick = FCKToolbar_OnItemClick ;
+
+	return this.AddItem( oButton ) ;
+}
+
+function FCKToolbar_OnItemClick( item )
+{
+	var oToolbar = item._FCKToolbar ;
+
+	if ( oToolbar.OnItemClick )
+		oToolbar.OnItemClick( oToolbar, item ) ;
+}
+
+FCKToolbar.prototype.AddSeparator = function()
+{
+	this.AddItem( new FCKToolbarSeparator() ) ;
+}
+
+FCKToolbar.prototype.Create = function( parentElement )
+{
+	var oDoc = FCKTools.GetElementDocument( parentElement ) ;
+
+	var e = oDoc.createElement( 'table' ) ;
+	e.className = 'TB_Toolbar' ;
+	e.style.styleFloat = e.style.cssFloat = ( FCKLang.Dir == 'ltr' ? 'left' : 'right' ) ;
+	e.dir = FCKLang.Dir ;
+	e.cellPadding = 0 ;
+	e.cellSpacing = 0 ;
+
+	var targetRow = e.insertRow(-1) ;
+
+	// Insert the start cell.
+	var eCell ;
+
+	if ( !this.HideStart )
+	{
+		eCell = targetRow.insertCell(-1) ;
+		eCell.appendChild( oDoc.createElement( 'div' ) ).className = 'TB_Start' ;
+	}
+
+	for ( var i = 0 ; i < this.Items.length ; i++ )
+	{
+		this.Items[i].Create( targetRow.insertCell(-1) ) ;
+	}
+
+	// Insert the ending cell.
+	if ( !this.HideEnd )
+	{
+		eCell = targetRow.insertCell(-1) ;
+		eCell.appendChild( oDoc.createElement( 'div' ) ).className = 'TB_End' ;
+	}
+
+	parentElement.appendChild( e ) ;
+}
+
+var FCKToolbarSeparator = function()
+{}
+
+FCKToolbarSeparator.prototype.Create = function( parentElement )
+{
+	FCKTools.AppendElement( parentElement, 'div' ).className = 'TB_Separator' ;
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fcktoolbarbreak_gecko.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fcktoolbarbreak_gecko.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fcktoolbarbreak_gecko.js	(revision 1280)
@@ -0,0 +1,36 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKToolbarBreak Class: breaks the toolbars.
+ * It makes it possible to force the toolbar to break to a new line.
+ * This is the Gecko specific implementation.
+ */
+
+var FCKToolbarBreak = function()
+{}
+
+FCKToolbarBreak.prototype.Create = function( targetElement )
+{
+	var oBreakDiv = targetElement.ownerDocument.createElement( 'div' ) ;
+
+	oBreakDiv.style.clear = oBreakDiv.style.cssFloat = FCKLang.Dir == 'rtl' ? 'right' : 'left' ;
+
+	targetElement.appendChild( oBreakDiv ) ;
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fcktoolbarbreak_ie.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fcktoolbarbreak_ie.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fcktoolbarbreak_ie.js	(revision 1280)
@@ -0,0 +1,38 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKToolbarBreak Class: breaks the toolbars.
+ * It makes it possible to force the toolbar to break to a new line.
+ * This is the IE specific implementation.
+ */
+
+var FCKToolbarBreak = function()
+{}
+
+FCKToolbarBreak.prototype.Create = function( targetElement )
+{
+	var oBreakDiv = FCKTools.GetElementDocument( targetElement ).createElement( 'div' ) ;
+
+	oBreakDiv.className = 'TB_Break' ;
+
+	oBreakDiv.style.clear = FCKLang.Dir == 'rtl' ? 'left' : 'right' ;
+
+	targetElement.appendChild( oBreakDiv ) ;
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fcktoolbarbutton.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fcktoolbarbutton.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fcktoolbarbutton.js	(revision 1280)
@@ -0,0 +1,76 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKToolbarButton Class: represents a button in the toolbar.
+ */
+
+var FCKToolbarButton = function( commandName, label, tooltip, style, sourceView, contextSensitive, icon )
+{
+	this.CommandName		= commandName ;
+	this.Label				= label ;
+	this.Tooltip			= tooltip ;
+	this.Style				= style ;
+	this.SourceView			= sourceView ? true : false ;
+	this.ContextSensitive	= contextSensitive ? true : false ;
+
+	if ( icon == null )
+		this.IconPath = FCKConfig.SkinPath + 'toolbar/' + commandName.toLowerCase() + '.gif' ;
+	else if ( typeof( icon ) == 'number' )
+		this.IconPath = [ FCKConfig.SkinPath + 'fck_strip.gif', 16, icon ] ;
+	else
+		this.IconPath = icon ;
+}
+
+FCKToolbarButton.prototype.Create = function( targetElement )
+{
+	this._UIButton = new FCKToolbarButtonUI( this.CommandName, this.Label, this.Tooltip, this.IconPath, this.Style ) ;
+	this._UIButton.OnClick = this.Click ;
+	this._UIButton._ToolbarButton = this ;
+	this._UIButton.Create( targetElement ) ;
+}
+
+FCKToolbarButton.prototype.RefreshState = function()
+{
+	// Gets the actual state.
+	var eState = FCK.ToolbarSet.CurrentInstance.Commands.GetCommand( this.CommandName ).GetState() ;
+
+	// If there are no state changes than do nothing and return.
+	if ( eState == this._UIButton.State ) return ;
+
+	// Sets the actual state.
+	this._UIButton.ChangeState( eState ) ;
+}
+
+FCKToolbarButton.prototype.Click = function()
+{
+	var oToolbarButton = this._ToolbarButton || this ;
+	FCK.ToolbarSet.CurrentInstance.Commands.GetCommand( oToolbarButton.CommandName ).Execute() ;
+}
+
+FCKToolbarButton.prototype.Enable = function()
+{
+	this.RefreshState() ;
+}
+
+FCKToolbarButton.prototype.Disable = function()
+{
+	// Sets the actual state.
+	this._UIButton.ChangeState( FCK_TRISTATE_DISABLED ) ;
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fcktoolbarbuttonui.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fcktoolbarbuttonui.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fcktoolbarbuttonui.js	(revision 1280)
@@ -0,0 +1,194 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKToolbarButtonUI Class: interface representation of a toolbar button.
+ */
+
+var FCKToolbarButtonUI = function( name, label, tooltip, iconPathOrStripInfoArray, style, state )
+{
+	this.Name		= name ;
+	this.Label		= label || name ;
+	this.Tooltip	= tooltip || this.Label ;
+	this.Style		= style || FCK_TOOLBARITEM_ONLYICON ;
+	this.State		= state || FCK_TRISTATE_OFF ;
+
+	this.Icon = new FCKIcon( iconPathOrStripInfoArray ) ;
+
+	if ( FCK.IECleanup )
+		FCK.IECleanup.AddItem( this, FCKToolbarButtonUI_Cleanup ) ;
+}
+
+
+FCKToolbarButtonUI.prototype._CreatePaddingElement = function( document )
+{
+	var oImg = document.createElement( 'IMG' ) ;
+	oImg.className = 'TB_Button_Padding' ;
+	oImg.src = FCK_SPACER_PATH ;
+	return oImg ;
+}
+
+FCKToolbarButtonUI.prototype.Create = function( parentElement )
+{
+	var oDoc = FCKTools.GetElementDocument( parentElement ) ;
+
+	// Create the Main Element.
+	var oMainElement = this.MainElement = oDoc.createElement( 'DIV' ) ;
+	oMainElement.title = this.Tooltip ;
+
+	// The following will prevent the button from catching the focus.
+	if ( FCKBrowserInfo.IsGecko )
+		 oMainElement.onmousedown	= FCKTools.CancelEvent ;
+
+	FCKTools.AddEventListenerEx( oMainElement, 'mouseover', FCKToolbarButtonUI_OnMouseOver, this ) ;
+	FCKTools.AddEventListenerEx( oMainElement, 'mouseout', FCKToolbarButtonUI_OnMouseOut, this ) ;
+	FCKTools.AddEventListenerEx( oMainElement, 'click', FCKToolbarButtonUI_OnClick, this ) ;
+
+	this.ChangeState( this.State, true ) ;
+
+	if ( this.Style == FCK_TOOLBARITEM_ONLYICON && !this.ShowArrow )
+	{
+		// <td><div class="TB_Button_On" title="Smiley">{Image}</div></td>
+
+		oMainElement.appendChild( this.Icon.CreateIconElement( oDoc ) ) ;
+	}
+	else
+	{
+		// <td><div class="TB_Button_On" title="Smiley"><table cellpadding="0" cellspacing="0"><tr><td>{Image}</td><td nowrap>Toolbar Button</td><td><img class="TB_Button_Padding"></td></tr></table></div></td>
+		// <td><div class="TB_Button_On" title="Smiley"><table cellpadding="0" cellspacing="0"><tr><td><img class="TB_Button_Padding"></td><td nowrap>Toolbar Button</td><td><img class="TB_Button_Padding"></td></tr></table></div></td>
+
+		var oTable = oMainElement.appendChild( oDoc.createElement( 'TABLE' ) ) ;
+		oTable.cellPadding = 0 ;
+		oTable.cellSpacing = 0 ;
+
+		var oRow = oTable.insertRow(-1) ;
+
+		// The Image cell (icon or padding).
+		var oCell = oRow.insertCell(-1) ;
+
+		if ( this.Style == FCK_TOOLBARITEM_ONLYICON || this.Style == FCK_TOOLBARITEM_ICONTEXT )
+			oCell.appendChild( this.Icon.CreateIconElement( oDoc ) ) ;
+		else
+			oCell.appendChild( this._CreatePaddingElement( oDoc ) ) ;
+
+		if ( this.Style == FCK_TOOLBARITEM_ONLYTEXT || this.Style == FCK_TOOLBARITEM_ICONTEXT )
+		{
+			// The Text cell.
+			oCell = oRow.insertCell(-1) ;
+			oCell.className = 'TB_Button_Text' ;
+			oCell.noWrap = true ;
+			oCell.appendChild( oDoc.createTextNode( this.Label ) ) ;
+		}
+
+		if ( this.ShowArrow )
+		{
+			if ( this.Style != FCK_TOOLBARITEM_ONLYICON )
+			{
+				// A padding cell.
+				oRow.insertCell(-1).appendChild( this._CreatePaddingElement( oDoc ) ) ;
+			}
+
+			oCell = oRow.insertCell(-1) ;
+			var eImg = oCell.appendChild( oDoc.createElement( 'IMG' ) ) ;
+			eImg.src	= FCKConfig.SkinPath + 'images/toolbar.buttonarrow.gif' ;
+			eImg.width	= 5 ;
+			eImg.height	= 3 ;
+		}
+
+		// The last padding cell.
+		oCell = oRow.insertCell(-1) ;
+		oCell.appendChild( this._CreatePaddingElement( oDoc ) ) ;
+	}
+
+	parentElement.appendChild( oMainElement ) ;
+}
+
+FCKToolbarButtonUI.prototype.ChangeState = function( newState, force )
+{
+	if ( !force && this.State == newState )
+		return ;
+
+	var e = this.MainElement ;
+
+	switch ( parseInt( newState, 10 ) )
+	{
+		case FCK_TRISTATE_OFF :
+			e.className		= 'TB_Button_Off' ;
+			break ;
+
+		case FCK_TRISTATE_ON :
+			e.className		= 'TB_Button_On' ;
+			break ;
+
+		case FCK_TRISTATE_DISABLED :
+			e.className		= 'TB_Button_Disabled' ;
+			break ;
+	}
+
+	this.State = newState ;
+}
+
+function FCKToolbarButtonUI_OnMouseOver( ev, button )
+{
+	if ( button.State == FCK_TRISTATE_OFF )
+		this.className = 'TB_Button_Off_Over' ;
+	else if ( button.State == FCK_TRISTATE_ON )
+		this.className = 'TB_Button_On_Over' ;
+}
+
+function FCKToolbarButtonUI_OnMouseOut( ev, button )
+{
+	if ( button.State == FCK_TRISTATE_OFF )
+		this.className = 'TB_Button_Off' ;
+	else if ( button.State == FCK_TRISTATE_ON )
+		this.className = 'TB_Button_On' ;
+}
+
+function FCKToolbarButtonUI_OnClick( ev, button )
+{
+	if ( button.OnClick && button.State != FCK_TRISTATE_DISABLED )
+		button.OnClick( button ) ;
+}
+
+function FCKToolbarButtonUI_Cleanup()
+{
+	// This one should not cause memory leak, but just for safety, let's clean
+	// it up.
+	this.MainElement = null ;
+}
+
+/*
+	Sample outputs:
+
+	This is the base structure. The variation is the image that is marked as {Image}:
+		<td><div class="TB_Button_On" title="Smiley">{Image}</div></td>
+		<td><div class="TB_Button_On" title="Smiley"><table cellpadding="0" cellspacing="0"><tr><td>{Image}</td><td nowrap>Toolbar Button</td><td><img class="TB_Button_Padding"></td></tr></table></div></td>
+		<td><div class="TB_Button_On" title="Smiley"><table cellpadding="0" cellspacing="0"><tr><td><img class="TB_Button_Padding"></td><td nowrap>Toolbar Button</td><td><img class="TB_Button_Padding"></td></tr></table></div></td>
+
+	These are samples of possible {Image} values:
+
+		Strip - IE version:
+			<div class="TB_Button_Image"><img src="strip.gif" style="top:-16px"></div>
+
+		Strip : Firefox, Safari and Opera version
+			<img class="TB_Button_Image" style="background-position: 0px -16px;background-image: url(strip.gif);">
+
+		No-Strip : Browser independent:
+			<img class="TB_Button_Image" src="smiley.gif">
+*/
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fcktoolbarfontformatcombo.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fcktoolbarfontformatcombo.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fcktoolbarfontformatcombo.js	(revision 1280)
@@ -0,0 +1,139 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKToolbarPanelButton Class: Handles the Fonts combo selector.
+ */
+
+var FCKToolbarFontFormatCombo = function( tooltip, style )
+{
+	if ( tooltip === false )
+		return ;
+
+	this.CommandName = 'FontFormat' ;
+	this.Label		= this.GetLabel() ;
+	this.Tooltip	= tooltip ? tooltip : this.Label ;
+	this.Style		= style ? style : FCK_TOOLBARITEM_ICONTEXT ;
+
+	this.NormalLabel = 'Normal' ;
+
+	this.PanelWidth = 190 ;
+	
+	this.DefaultLabel = FCKConfig.DefaultFontFormatLabel || '' ;
+}
+
+// Inherit from FCKToolbarSpecialCombo.
+FCKToolbarFontFormatCombo.prototype = new FCKToolbarStyleCombo( false ) ;
+
+FCKToolbarFontFormatCombo.prototype.GetLabel = function()
+{
+	return FCKLang.FontFormat ;
+}
+
+FCKToolbarFontFormatCombo.prototype.GetStyles = function()
+{
+	var styles = {} ;
+
+	// Get the format names from the language file.
+	var aNames = FCKLang['FontFormats'].split(';') ;
+	var oNames = {
+		p		: aNames[0],
+		pre		: aNames[1],
+		address	: aNames[2],
+		h1		: aNames[3],
+		h2		: aNames[4],
+		h3		: aNames[5],
+		h4		: aNames[6],
+		h5		: aNames[7],
+		h6		: aNames[8],
+		div		: aNames[9] || ( aNames[0] + ' (DIV)')
+	} ;
+	
+	// Get the available formats from the configuration file.
+	var elements = FCKConfig.FontFormats.split(';') ;
+
+	for ( var i = 0 ; i < elements.length ; i++ )
+	{
+		var elementName = elements[ i ] ;
+		var style = FCKStyles.GetStyle( '_FCK_' + elementName ) ;
+		if ( style )
+		{
+			style.Label = oNames[ elementName ] ;
+			styles[ '_FCK_' + elementName ] = style ;
+		}
+		else
+			alert( "The FCKConfig.CoreStyles['" + elementName + "'] setting was not found. Please check the fckconfig.js file" ) ;
+	}
+
+	return styles ;
+}
+
+FCKToolbarFontFormatCombo.prototype.RefreshActiveItems = function( targetSpecialCombo )
+{
+	var startElement = FCK.ToolbarSet.CurrentInstance.Selection.GetBoundaryParentElement( true ) ;
+
+	if ( startElement )
+	{
+		var path = new FCKElementPath( startElement ) ;
+		var blockElement = path.Block ;
+
+		if ( blockElement )
+		{
+			for ( var i in targetSpecialCombo.Items )
+			{
+				var item = targetSpecialCombo.Items[i] ;
+				var style = item.Style ;
+
+				if ( style.CheckElementRemovable( blockElement ) )
+				{
+					targetSpecialCombo.SetLabel( style.Label ) ;
+					return ;
+				}
+			}
+		}
+	}
+
+	targetSpecialCombo.SetLabel( this.DefaultLabel ) ;
+}
+
+FCKToolbarFontFormatCombo.prototype.StyleCombo_OnBeforeClick = function( targetSpecialCombo )
+{
+	// Clear the current selection.
+	targetSpecialCombo.DeselectAll() ;
+
+	var startElement = FCK.ToolbarSet.CurrentInstance.Selection.GetBoundaryParentElement( true ) ;
+
+	if ( startElement )
+	{
+		var path = new FCKElementPath( startElement ) ;
+		var blockElement = path.Block ;
+
+		for ( var i in targetSpecialCombo.Items )
+		{
+			var item = targetSpecialCombo.Items[i] ;
+			var style = item.Style ;
+
+			if ( style.CheckElementRemovable( blockElement ) )
+			{
+				targetSpecialCombo.SelectItem( item ) ;
+				return ;
+			}
+		}
+	}
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fcktoolbarfontscombo.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fcktoolbarfontscombo.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fcktoolbarfontscombo.js	(revision 1280)
@@ -0,0 +1,98 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKToolbarPanelButton Class: Handles the Fonts combo selector.
+ */
+
+var FCKToolbarFontsCombo = function( tooltip, style )
+{
+	this.CommandName	= 'FontName' ;
+	this.Label		= this.GetLabel() ;
+	this.Tooltip	= tooltip ? tooltip : this.Label ;
+	this.Style		= style ? style : FCK_TOOLBARITEM_ICONTEXT ;
+
+	this.DefaultLabel = FCKConfig.DefaultFontLabel || '' ;
+}
+
+// Inherit from FCKToolbarSpecialCombo.
+FCKToolbarFontsCombo.prototype = new FCKToolbarFontFormatCombo( false ) ;
+
+FCKToolbarFontsCombo.prototype.GetLabel = function()
+{
+	return FCKLang.Font ;
+}
+
+FCKToolbarFontsCombo.prototype.GetStyles = function()
+{
+	var baseStyle = FCKStyles.GetStyle( '_FCK_FontFace' ) ;
+
+	if ( !baseStyle )
+	{
+		alert( "The FCKConfig.CoreStyles['Size'] setting was not found. Please check the fckconfig.js file" ) ;
+		return {} ;
+	}
+
+	var styles = {} ;
+
+	var fonts = FCKConfig.FontNames.split(';') ;
+
+	for ( var i = 0 ; i < fonts.length ; i++ )
+	{
+		var fontParts = fonts[i].split('/') ;
+		var font = fontParts[0] ;
+		var caption = fontParts[1] || font ;
+
+		var style = FCKTools.CloneObject( baseStyle ) ;
+
+		style.SetVariable( 'Font', font ) ;
+		style.Label = caption ;
+
+		styles[ caption ] = style ;
+	}
+
+	return styles ;
+}
+
+FCKToolbarFontsCombo.prototype.RefreshActiveItems = FCKToolbarStyleCombo.prototype.RefreshActiveItems ;
+
+FCKToolbarFontsCombo.prototype.StyleCombo_OnBeforeClick = function( targetSpecialCombo )
+{
+	// Clear the current selection.
+	targetSpecialCombo.DeselectAll() ;
+
+	var startElement = FCKSelection.GetBoundaryParentElement( true ) ;
+
+	if ( startElement )
+	{
+		var path = new FCKElementPath( startElement ) ;
+
+		for ( var i in targetSpecialCombo.Items )
+		{
+			var item = targetSpecialCombo.Items[i] ;
+			var style = item.Style ;
+
+			if ( style.CheckActive( path ) )
+			{
+				targetSpecialCombo.SelectItem( item ) ;
+				return ;
+			}
+		}
+	}
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fcktoolbarfontsizecombo.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fcktoolbarfontsizecombo.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fcktoolbarfontsizecombo.js	(revision 1280)
@@ -0,0 +1,76 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKToolbarPanelButton Class: Handles the Fonts combo selector.
+ */
+
+var FCKToolbarFontSizeCombo = function( tooltip, style )
+{
+	this.CommandName	= 'FontSize' ;
+	this.Label		= this.GetLabel() ;
+	this.Tooltip	= tooltip ? tooltip : this.Label ;
+	this.Style		= style ? style : FCK_TOOLBARITEM_ICONTEXT ;
+
+	this.DefaultLabel = FCKConfig.DefaultFontSizeLabel || '' ;
+
+	this.FieldWidth = 70 ;
+}
+
+// Inherit from FCKToolbarSpecialCombo.
+FCKToolbarFontSizeCombo.prototype = new FCKToolbarFontFormatCombo( false ) ;
+
+FCKToolbarFontSizeCombo.prototype.GetLabel = function()
+{
+	return FCKLang.FontSize ;
+}
+
+FCKToolbarFontSizeCombo.prototype.GetStyles = function()
+{
+	var baseStyle = FCKStyles.GetStyle( '_FCK_Size' ) ;
+
+	if ( !baseStyle )
+	{
+		alert( "The FCKConfig.CoreStyles['FontFace'] setting was not found. Please check the fckconfig.js file" ) ;
+		return {} ;
+	}
+
+	var styles = {} ;
+
+	var fonts = FCKConfig.FontSizes.split(';') ;
+
+	for ( var i = 0 ; i < fonts.length ; i++ )
+	{
+		var fontParts = fonts[i].split('/') ;
+		var font = fontParts[0] ;
+		var caption = fontParts[1] || font ;
+
+		var style = FCKTools.CloneObject( baseStyle ) ;
+		style.SetVariable( 'Size', font ) ;
+		style.Label = caption ;
+
+		styles[ caption ] = style ;
+	}
+
+	return styles ;
+}
+
+FCKToolbarFontSizeCombo.prototype.RefreshActiveItems = FCKToolbarStyleCombo.prototype.RefreshActiveItems ;
+
+FCKToolbarFontSizeCombo.prototype.StyleCombo_OnBeforeClick = FCKToolbarFontsCombo.prototype.StyleCombo_OnBeforeClick ;
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fcktoolbarpanelbutton.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fcktoolbarpanelbutton.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fcktoolbarpanelbutton.js	(revision 1280)
@@ -0,0 +1,92 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKToolbarPanelButton Class: represents a special button in the toolbar
+ * that shows a panel when pressed.
+ */
+
+var FCKToolbarPanelButton = function( commandName, label, tooltip, style, icon )
+{
+	this.CommandName = commandName ;
+
+	var oIcon ;
+
+	if ( icon == null )
+		oIcon = FCKConfig.SkinPath + 'toolbar/' + commandName.toLowerCase() + '.gif' ;
+	else if ( typeof( icon ) == 'number' )
+		oIcon = [ FCKConfig.SkinPath + 'fck_strip.gif', 16, icon ] ;
+
+	var oUIButton = this._UIButton = new FCKToolbarButtonUI( commandName, label, tooltip, oIcon, style ) ;
+	oUIButton._FCKToolbarPanelButton = this ;
+	oUIButton.ShowArrow = true ;
+	oUIButton.OnClick = FCKToolbarPanelButton_OnButtonClick ;
+}
+
+FCKToolbarPanelButton.prototype.TypeName = 'FCKToolbarPanelButton' ;
+
+FCKToolbarPanelButton.prototype.Create = function( parentElement )
+{
+	parentElement.className += 'Menu' ;
+
+	this._UIButton.Create( parentElement ) ;
+
+	var oPanel = FCK.ToolbarSet.CurrentInstance.Commands.GetCommand( this.CommandName )._Panel ;
+	oPanel._FCKToolbarPanelButton = this ;
+
+	var eLineDiv = oPanel.Document.body.appendChild( oPanel.Document.createElement( 'div' ) ) ;
+	eLineDiv.style.position = 'absolute' ;
+	eLineDiv.style.top = '0px' ;
+
+	var eLine = this.LineImg = eLineDiv.appendChild( oPanel.Document.createElement( 'IMG' ) ) ;
+	eLine.className = 'TB_ConnectionLine' ;
+	eLine.style.position = 'absolute' ;
+//	eLine.style.backgroundColor = 'Red' ;
+	eLine.src = FCK_SPACER_PATH ;
+
+	oPanel.OnHide = FCKToolbarPanelButton_OnPanelHide ;
+}
+
+/*
+	Events
+*/
+
+function FCKToolbarPanelButton_OnButtonClick( toolbarButton )
+{
+	var oButton = this._FCKToolbarPanelButton ;
+	var e = oButton._UIButton.MainElement ;
+
+	oButton._UIButton.ChangeState( FCK_TRISTATE_ON ) ;
+
+	oButton.LineImg.style.width = ( e.offsetWidth - 2 ) + 'px' ;
+
+	FCK.ToolbarSet.CurrentInstance.Commands.GetCommand( oButton.CommandName ).Execute( 0, e.offsetHeight - 1, e ) ; // -1 to be over the border
+}
+
+function FCKToolbarPanelButton_OnPanelHide()
+{
+	var oMenuButton = this._FCKToolbarPanelButton ;
+	oMenuButton._UIButton.ChangeState( FCK_TRISTATE_OFF ) ;
+}
+
+// The Panel Button works like a normal button so the refresh state functions
+// defined for the normal button can be reused here.
+FCKToolbarPanelButton.prototype.RefreshState	= FCKToolbarButton.prototype.RefreshState ;
+FCKToolbarPanelButton.prototype.Enable			= FCKToolbarButton.prototype.Enable ;
+FCKToolbarPanelButton.prototype.Disable			= FCKToolbarButton.prototype.Disable ;
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fcktoolbarspecialcombo.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fcktoolbarspecialcombo.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fcktoolbarspecialcombo.js	(revision 1280)
@@ -0,0 +1,143 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKToolbarSpecialCombo Class: This is a "abstract" base class to be used
+ * by the special combo toolbar elements like font name, font size, paragraph format, etc...
+ *
+ * The following properties and methods must be implemented when inheriting from
+ * this class:
+ * 	- Property:	CommandName							[ The command name to be executed ]
+ * 	- Method:	GetLabel()							[ Returns the label ]
+ * 	-			CreateItems( targetSpecialCombo )	[ Add all items in the special combo ]
+ */
+
+var FCKToolbarSpecialCombo = function()
+{
+	this.SourceView			= false ;
+	this.ContextSensitive	= true ;
+	//this._LastValue			= null ;
+}
+
+
+FCKToolbarSpecialCombo.prototype.DefaultLabel = '' ;
+
+function FCKToolbarSpecialCombo_OnSelect( itemId, item )
+{
+	FCK.ToolbarSet.CurrentInstance.Commands.GetCommand( this.CommandName ).Execute( itemId, item ) ;
+}
+
+FCKToolbarSpecialCombo.prototype.Create = function( targetElement )
+{
+	this._Combo = new FCKSpecialCombo( this.GetLabel(), this.FieldWidth, this.PanelWidth, this.PanelMaxHeight, FCKBrowserInfo.IsIE ? window : FCKTools.GetElementWindow( targetElement ).parent ) ;
+
+	/*
+	this._Combo.FieldWidth		= this.FieldWidth		!= null ? this.FieldWidth		: 100 ;
+	this._Combo.PanelWidth		= this.PanelWidth		!= null ? this.PanelWidth		: 150 ;
+	this._Combo.PanelMaxHeight	= this.PanelMaxHeight	!= null ? this.PanelMaxHeight	: 150 ;
+	*/
+
+	//this._Combo.Command.Name = this.Command.Name;
+//	this._Combo.Label	= this.Label ;
+	this._Combo.Tooltip	= this.Tooltip ;
+	this._Combo.Style	= this.Style ;
+
+	this.CreateItems( this._Combo ) ;
+
+	this._Combo.Create( targetElement ) ;
+
+	this._Combo.CommandName = this.CommandName ;
+
+	this._Combo.OnSelect = FCKToolbarSpecialCombo_OnSelect ;
+}
+
+function FCKToolbarSpecialCombo_RefreshActiveItems( combo, value )
+{
+	combo.DeselectAll() ;
+	combo.SelectItem( value ) ;
+	combo.SetLabelById( value ) ;
+}
+
+FCKToolbarSpecialCombo.prototype.RefreshState = function()
+{
+	// Gets the actual state.
+	var eState ;
+
+//	if ( FCK.EditMode == FCK_EDITMODE_SOURCE && ! this.SourceView )
+//		eState = FCK_TRISTATE_DISABLED ;
+//	else
+//	{
+		var sValue = FCK.ToolbarSet.CurrentInstance.Commands.GetCommand( this.CommandName ).GetState() ;
+
+//		FCKDebug.Output( 'RefreshState of Special Combo "' + this.TypeOf + '" - State: ' + sValue ) ;
+
+		if ( sValue != FCK_TRISTATE_DISABLED )
+		{
+			eState = FCK_TRISTATE_ON ;
+
+			if ( this.RefreshActiveItems )
+				this.RefreshActiveItems( this._Combo, sValue ) ;
+			else
+			{
+				if ( this._LastValue !== sValue)
+				{
+					this._LastValue = sValue ;
+					
+					if ( !sValue || sValue.length == 0 )
+					{
+						this._Combo.DeselectAll() ;
+						this._Combo.SetLabel( this.DefaultLabel ) ;
+					}
+					else
+						FCKToolbarSpecialCombo_RefreshActiveItems( this._Combo, sValue ) ;
+				}
+			}
+		}
+		else
+			eState = FCK_TRISTATE_DISABLED ;
+//	}
+
+	// If there are no state changes then do nothing and return.
+	if ( eState == this.State ) return ;
+
+	if ( eState == FCK_TRISTATE_DISABLED )
+	{
+		this._Combo.DeselectAll() ;
+		this._Combo.SetLabel( '' ) ;
+	}
+
+	// Sets the actual state.
+	this.State = eState ;
+
+	// Updates the graphical state.
+	this._Combo.SetEnabled( eState != FCK_TRISTATE_DISABLED ) ;
+}
+
+FCKToolbarSpecialCombo.prototype.Enable = function()
+{
+	this.RefreshState() ;
+}
+
+FCKToolbarSpecialCombo.prototype.Disable = function()
+{
+	this.State = FCK_TRISTATE_DISABLED ;
+	this._Combo.DeselectAll() ;
+	this._Combo.SetLabel( '' ) ;
+	this._Combo.SetEnabled( false ) ;
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fcktoolbarstylecombo.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fcktoolbarstylecombo.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fcktoolbarstylecombo.js	(revision 1280)
@@ -0,0 +1,200 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKToolbarPanelButton Class: Handles the Fonts combo selector.
+ */
+
+var FCKToolbarStyleCombo = function( tooltip, style )
+{
+	if ( tooltip === false )
+		return ;
+
+	this.CommandName = 'Style' ;
+	this.Label		= this.GetLabel() ;
+	this.Tooltip	= tooltip ? tooltip : this.Label ;
+	this.Style		= style ? style : FCK_TOOLBARITEM_ICONTEXT ;
+
+	this.DefaultLabel = FCKConfig.DefaultStyleLabel || '' ;
+}
+
+// Inherit from FCKToolbarSpecialCombo.
+FCKToolbarStyleCombo.prototype = new FCKToolbarSpecialCombo ;
+
+FCKToolbarStyleCombo.prototype.GetLabel = function()
+{
+	return FCKLang.Style ;
+}
+
+FCKToolbarStyleCombo.prototype.GetStyles = function()
+{
+	var styles = {} ;
+	var allStyles = FCK.ToolbarSet.CurrentInstance.Styles.GetStyles() ;
+
+	for ( var styleName in allStyles )
+	{
+		var style = allStyles[ styleName ] ;
+		if ( !style.IsCore )
+			styles[ styleName ] = style ;
+	}
+	return styles ;
+}
+
+FCKToolbarStyleCombo.prototype.CreateItems = function( targetSpecialCombo )
+{
+	var targetDoc = targetSpecialCombo._Panel.Document ;
+
+	// Add the Editor Area CSS to the panel so the style classes are previewed correctly.
+	FCKTools.AppendStyleSheet( targetDoc, FCKConfig.ToolbarComboPreviewCSS ) ;
+	FCKTools.AppendStyleString( targetDoc, FCKConfig.EditorAreaStyles ) ;
+	targetDoc.body.className += ' ForceBaseFont' ;
+
+	// Add ID and Class to the body.
+	FCKConfig.ApplyBodyAttributes( targetDoc.body ) ;
+
+	// Get the styles list.
+	var styles = this.GetStyles() ;
+
+	for ( var styleName in styles )
+	{
+		var style = styles[ styleName ] ;
+
+		// Object type styles have no preview.
+		var caption = style.GetType() == FCK_STYLE_OBJECT ? 
+			styleName : 
+			FCKToolbarStyleCombo_BuildPreview( style, style.Label || styleName ) ;
+	
+		var item = targetSpecialCombo.AddItem( styleName, caption ) ;
+
+		item.Style = style ;
+	}
+
+	// We must prepare the list before showing it.
+	targetSpecialCombo.OnBeforeClick = this.StyleCombo_OnBeforeClick ;
+}
+
+FCKToolbarStyleCombo.prototype.RefreshActiveItems = function( targetSpecialCombo )
+{
+	var startElement = FCK.ToolbarSet.CurrentInstance.Selection.GetBoundaryParentElement( true ) ;
+
+	if ( startElement )
+	{
+		var path = new FCKElementPath( startElement ) ;
+		var elements = path.Elements ;
+
+		for ( var e = 0 ; e < elements.length ; e++ )
+		{
+			for ( var i in targetSpecialCombo.Items )
+			{
+				var item = targetSpecialCombo.Items[i] ;
+				var style = item.Style ;
+
+				if ( style.CheckElementRemovable( elements[ e ], true ) )
+				{
+					targetSpecialCombo.SetLabel( style.Label || style.Name ) ;
+					return ;
+				}
+			}
+		}
+	}
+
+	targetSpecialCombo.SetLabel( this.DefaultLabel ) ;
+}
+
+FCKToolbarStyleCombo.prototype.StyleCombo_OnBeforeClick = function( targetSpecialCombo )
+{
+	// Two things are done here:
+	//	- In a control selection, get the element name, so we'll display styles
+	//	  for that element only.
+	//	- Select the styles that are active for the current selection.
+	
+	// Clear the current selection.
+	targetSpecialCombo.DeselectAll() ;
+
+	var startElement ;
+	var path ;
+	var tagName ;
+	
+	var selection = FCK.ToolbarSet.CurrentInstance.Selection ;
+	
+	if ( selection.GetType() == 'Control' )
+	{
+		startElement = selection.GetSelectedElement() ;
+		tagName = startElement.nodeName.toLowerCase() ;
+	}
+	else
+	{
+		startElement = selection.GetBoundaryParentElement( true ) ;
+		path = new FCKElementPath( startElement ) ;
+	}
+
+	for ( var i in targetSpecialCombo.Items )
+	{
+		var item = targetSpecialCombo.Items[i] ;
+		var style = item.Style ;
+		
+		if ( ( tagName && style.Element == tagName ) || ( !tagName && style.GetType() != FCK_STYLE_OBJECT ) )
+		{
+			item.style.display = '' ;
+
+			if ( ( path && style.CheckActive( path ) ) || ( !path && style.CheckElementRemovable( startElement, true ) ) )
+				targetSpecialCombo.SelectItem( style.Name ) ;
+		}
+		else
+			item.style.display = 'none' ;
+	}
+}
+
+function FCKToolbarStyleCombo_BuildPreview( style, caption ) 
+{
+	var styleType = style.GetType() ;
+	var html = [] ;
+	
+	if ( styleType == FCK_STYLE_BLOCK )
+		html.push( '<div class="BaseFont">' ) ;
+	
+	var elementName = style.Element ;
+	
+	// Avoid <bdo> in the preview.
+	if ( elementName == 'bdo' )
+		elementName = 'span' ;
+
+	html = [ '<', elementName ] ;
+
+	// Assign all defined attributes.
+	var attribs	= style._StyleDesc.Attributes ;
+	if ( attribs )
+	{
+		for ( var att in attribs )
+		{
+			html.push( ' ', att, '="', style.GetFinalAttributeValue( att ), '"' ) ;
+		}
+	}
+
+	// Assign the style attribute.
+	if ( style._GetStyleText().length > 0 )
+		html.push( ' style="', style.GetFinalStyleValue(), '"' ) ;
+
+	html.push( '>', caption, '</', elementName, '>' ) ;
+
+	if ( styleType == FCK_STYLE_BLOCK )
+		html.push( '</div>' ) ;
+
+	return html.join( '' ) ;
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckw3crange.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckw3crange.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckw3crange.js	(revision 1280)
@@ -0,0 +1,447 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This class partially implements the W3C DOM Range for browser that don't
+ * support the standards (like IE):
+ * http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html
+ */
+
+var FCKW3CRange = function( parentDocument )
+{
+	this._Document = parentDocument ;
+
+	this.startContainer	= null ;
+	this.startOffset	= null ;
+	this.endContainer	= null ;
+	this.endOffset		= null ;
+	this.collapsed		= true ;
+}
+
+FCKW3CRange.CreateRange = function( parentDocument )
+{
+	// We could opt to use the Range implementation of the browsers. The problem
+	// is that every browser have different bugs on their implementations,
+	// mostly related to different interpretations of the W3C specifications.
+	// So, for now, let's use our implementation and pray for browsers fixings
+	// soon. Otherwise will go crazy on trying to find out workarounds.
+	/*
+	// Get the browser implementation of the range, if available.
+	if ( parentDocument.createRange )
+	{
+		var range = parentDocument.createRange() ;
+		if ( typeof( range.startContainer ) != 'undefined' )
+			return range ;
+	}
+	*/
+	return new FCKW3CRange( parentDocument ) ;
+}
+
+FCKW3CRange.CreateFromRange = function( parentDocument, sourceRange )
+{
+	var range = FCKW3CRange.CreateRange( parentDocument ) ;
+	range.setStart( sourceRange.startContainer, sourceRange.startOffset ) ;
+	range.setEnd( sourceRange.endContainer, sourceRange.endOffset ) ;
+	return range ;
+}
+
+FCKW3CRange.prototype =
+{
+
+	_UpdateCollapsed : function()
+	{
+      this.collapsed = ( this.startContainer == this.endContainer && this.startOffset == this.endOffset ) ;
+	},
+
+	// W3C requires a check for the new position. If it is after the end
+	// boundary, the range should be collapsed to the new start. It seams we
+	// will not need this check for our use of this class so we can ignore it for now.
+	setStart : function( refNode, offset )
+	{
+		this.startContainer	= refNode ;
+		this.startOffset	= offset ;
+
+		if ( !this.endContainer )
+		{
+			this.endContainer	= refNode ;
+			this.endOffset		= offset ;
+		}
+
+		this._UpdateCollapsed() ;
+	},
+
+	// W3C requires a check for the new position. If it is before the start
+	// boundary, the range should be collapsed to the new end. It seams we
+	// will not need this check for our use of this class so we can ignore it for now.
+	setEnd : function( refNode, offset )
+	{
+		this.endContainer	= refNode ;
+		this.endOffset		= offset ;
+
+		if ( !this.startContainer )
+		{
+			this.startContainer	= refNode ;
+			this.startOffset	= offset ;
+		}
+
+		this._UpdateCollapsed() ;
+	},
+
+	setStartAfter : function( refNode )
+	{
+		this.setStart( refNode.parentNode, FCKDomTools.GetIndexOf( refNode ) + 1 ) ;
+	},
+
+	setStartBefore : function( refNode )
+	{
+		this.setStart( refNode.parentNode, FCKDomTools.GetIndexOf( refNode ) ) ;
+	},
+
+	setEndAfter : function( refNode )
+	{
+		this.setEnd( refNode.parentNode, FCKDomTools.GetIndexOf( refNode ) + 1 ) ;
+	},
+
+	setEndBefore : function( refNode )
+	{
+		this.setEnd( refNode.parentNode, FCKDomTools.GetIndexOf( refNode ) ) ;
+	},
+
+	collapse : function( toStart )
+	{
+		if ( toStart )
+		{
+			this.endContainer	= this.startContainer ;
+			this.endOffset		= this.startOffset ;
+		}
+		else
+		{
+			this.startContainer	= this.endContainer ;
+			this.startOffset	= this.endOffset ;
+		}
+
+		this.collapsed = true ;
+	},
+
+	selectNodeContents : function( refNode )
+	{
+		this.setStart( refNode, 0 ) ;
+		this.setEnd( refNode, refNode.nodeType == 3 ? refNode.data.length : refNode.childNodes.length ) ;
+	},
+
+	insertNode : function( newNode )
+	{
+		var startContainer = this.startContainer ;
+		var startOffset = this.startOffset ;
+
+		// If we are in a text node.
+		if ( startContainer.nodeType == 3 )
+		{
+			startContainer.splitText( startOffset ) ;
+
+			// Check if it is necessary to update the end boundary.
+			if ( startContainer == this.endContainer )
+				this.setEnd( startContainer.nextSibling, this.endOffset - this.startOffset ) ;
+
+			// Insert the new node it after the text node.
+			FCKDomTools.InsertAfterNode( startContainer, newNode ) ;
+
+			return ;
+		}
+		else
+		{
+			// Simply insert the new node before the current start node.
+			startContainer.insertBefore( newNode, startContainer.childNodes[ startOffset ] || null ) ;
+
+			// Check if it is necessary to update the end boundary.
+			if ( startContainer == this.endContainer )
+			{
+				this.endOffset++ ;
+				this.collapsed = false ;
+			}
+		}
+	},
+
+	deleteContents : function()
+	{
+		if ( this.collapsed )
+			return ;
+
+		this._ExecContentsAction( 0 ) ;
+	},
+
+	extractContents : function()
+	{
+		var docFrag = new FCKDocumentFragment( this._Document ) ;
+
+		if ( !this.collapsed )
+			this._ExecContentsAction( 1, docFrag ) ;
+
+		return docFrag ;
+	},
+
+	// The selection may be lost when cloning (due to the splitText() call).
+	cloneContents : function()
+	{
+		var docFrag = new FCKDocumentFragment( this._Document ) ;
+
+		if ( !this.collapsed )
+			this._ExecContentsAction( 2, docFrag ) ;
+
+		return docFrag ;
+	},
+
+	_ExecContentsAction : function( action, docFrag )
+	{
+		var startNode	= this.startContainer ;
+		var endNode		= this.endContainer ;
+
+		var startOffset	= this.startOffset ;
+		var endOffset	= this.endOffset ;
+
+		var removeStartNode	= false ;
+		var removeEndNode	= false ;
+
+		// Check the start and end nodes and make the necessary removals or changes.
+
+		// Start from the end, otherwise DOM mutations (splitText) made in the
+		// start boundary may interfere on the results here.
+
+		// For text containers, we must simply split the node and point to the
+		// second part. The removal will be handled by the rest of the code .
+		if ( endNode.nodeType == 3 )
+			endNode = endNode.splitText( endOffset ) ;
+		else
+		{
+			// If the end container has children and the offset is pointing
+			// to a child, then we should start from it.
+			if ( endNode.childNodes.length > 0 )
+			{
+				// If the offset points after the last node.
+				if ( endOffset > endNode.childNodes.length - 1 )
+				{
+					// Let's create a temporary node and mark it for removal.
+					endNode = FCKDomTools.InsertAfterNode( endNode.lastChild, this._Document.createTextNode('') ) ;
+					removeEndNode = true ;
+				}
+				else
+					endNode = endNode.childNodes[ endOffset ] ;
+			}
+		}
+
+		// For text containers, we must simply split the node. The removal will
+		// be handled by the rest of the code .
+		if ( startNode.nodeType == 3 )
+		{
+			startNode.splitText( startOffset ) ;
+
+			// In cases the end node is the same as the start node, the above
+			// splitting will also split the end, so me must move the end to
+			// the second part of the split.
+			if ( startNode == endNode )
+				endNode = startNode.nextSibling ;
+		}
+		else
+		{
+			// If the start container has children and the offset is pointing
+			// to a child, then we should start from its previous sibling.
+			if ( startNode.childNodes.length > 0 &&  startOffset <= startNode.childNodes.length - 1 )
+			{
+				// If the offset points to the first node, we don't have a
+				// sibling, so let's use the first one, but mark it for removal.
+				if ( startOffset == 0 )
+				{
+					// Let's create a temporary node and mark it for removal.
+					startNode = startNode.insertBefore( this._Document.createTextNode(''), startNode.firstChild ) ;
+					removeStartNode = true ;
+				}
+				else
+					startNode = startNode.childNodes[ startOffset ].previousSibling ;
+			}
+		}
+
+		// Get the parent nodes tree for the start and end boundaries.
+		var startParents	= FCKDomTools.GetParents( startNode ) ;
+		var endParents		= FCKDomTools.GetParents( endNode ) ;
+
+		// Compare them, to find the top most siblings.
+		var i, topStart, topEnd ;
+
+		for ( i = 0 ; i < startParents.length ; i++ )
+		{
+			topStart	= startParents[i] ;
+			topEnd		= endParents[i] ;
+
+			// The compared nodes will match until we find the top most
+			// siblings (different nodes that have the same parent).
+			// "i" will hold the index in the parents array for the top
+			// most element.
+			if ( topStart != topEnd )
+				break ;
+		}
+
+		var clone, levelStartNode, levelClone, currentNode, currentSibling ;
+
+		if ( docFrag )
+			clone = docFrag.RootNode ;
+
+		// Remove all successive sibling nodes for every node in the
+		// startParents tree.
+		for ( var j = i ; j < startParents.length ; j++ )
+		{
+			levelStartNode = startParents[j] ;
+
+			// For Extract and Clone, we must clone this level.
+			if ( clone && levelStartNode != startNode )		// action = 0 = Delete
+				levelClone = clone.appendChild( levelStartNode.cloneNode( levelStartNode == startNode ) ) ;
+
+			currentNode = levelStartNode.nextSibling ;
+
+			while( currentNode )
+			{
+				// Stop processing when the current node matches a node in the
+				// endParents tree or if it is the endNode.
+				if ( currentNode == endParents[j] || currentNode == endNode )
+					break ;
+
+				// Cache the next sibling.
+				currentSibling = currentNode.nextSibling ;
+
+				// If cloning, just clone it.
+				if ( action == 2 )	// 2 = Clone
+					clone.appendChild( currentNode.cloneNode( true ) ) ;
+				else
+				{
+					// Both Delete and Extract will remove the node.
+					currentNode.parentNode.removeChild( currentNode ) ;
+
+					// When Extracting, move the removed node to the docFrag.
+					if ( action == 1 )	// 1 = Extract
+						clone.appendChild( currentNode ) ;
+				}
+
+				currentNode = currentSibling ;
+			}
+
+			if ( clone )
+				clone = levelClone ;
+		}
+
+		if ( docFrag )
+			clone = docFrag.RootNode ;
+
+		// Remove all previous sibling nodes for every node in the
+		// endParents tree.
+		for ( var k = i ; k < endParents.length ; k++ )
+		{
+			levelStartNode = endParents[k] ;
+
+			// For Extract and Clone, we must clone this level.
+			if ( action > 0 && levelStartNode != endNode )		// action = 0 = Delete
+				levelClone = clone.appendChild( levelStartNode.cloneNode( levelStartNode == endNode ) ) ;
+
+			// The processing of siblings may have already been done by the parent.
+			if ( !startParents[k] || levelStartNode.parentNode != startParents[k].parentNode )
+			{
+				currentNode = levelStartNode.previousSibling ;
+
+				while( currentNode )
+				{
+					// Stop processing when the current node matches a node in the
+					// startParents tree or if it is the startNode.
+					if ( currentNode == startParents[k] || currentNode == startNode )
+						break ;
+
+					// Cache the next sibling.
+					currentSibling = currentNode.previousSibling ;
+
+					// If cloning, just clone it.
+					if ( action == 2 )	// 2 = Clone
+						clone.insertBefore( currentNode.cloneNode( true ), clone.firstChild ) ;
+					else
+					{
+						// Both Delete and Extract will remove the node.
+						currentNode.parentNode.removeChild( currentNode ) ;
+
+						// When Extracting, mode the removed node to the docFrag.
+						if ( action == 1 )	// 1 = Extract
+							clone.insertBefore( currentNode, clone.firstChild ) ;
+					}
+
+					currentNode = currentSibling ;
+				}
+			}
+
+			if ( clone )
+				clone = levelClone ;
+		}
+
+		if ( action == 2 )		// 2 = Clone.
+		{
+			// No changes in the DOM should be done, so fix the split text (if any).
+
+			var startTextNode = this.startContainer ;
+			if ( startTextNode.nodeType == 3 )
+			{
+				startTextNode.data += startTextNode.nextSibling.data ;
+				startTextNode.parentNode.removeChild( startTextNode.nextSibling ) ;
+			}
+
+			var endTextNode = this.endContainer ;
+			if ( endTextNode.nodeType == 3 && endTextNode.nextSibling )
+			{
+				endTextNode.data += endTextNode.nextSibling.data ;
+				endTextNode.parentNode.removeChild( endTextNode.nextSibling ) ;
+			}
+		}
+		else
+		{
+			// Collapse the range.
+
+			// If a node has been partially selected, collapse the range between
+			// topStart and topEnd. Otherwise, simply collapse it to the start. (W3C specs).
+			if ( topStart && topEnd && ( startNode.parentNode != topStart.parentNode || endNode.parentNode != topEnd.parentNode ) )
+			{
+				var endIndex = FCKDomTools.GetIndexOf( topEnd ) ;
+				
+				// If the start node is to be removed, we must correct the
+				// index to reflect the removal.
+				if ( removeStartNode && topEnd.parentNode == startNode.parentNode )
+					endIndex-- ;
+
+				this.setStart( topEnd.parentNode, endIndex ) ;
+			}
+
+			// Collapse it to the start.
+			this.collapse( true ) ;
+		}
+
+		// Cleanup any marked node.
+		if( removeStartNode )
+			startNode.parentNode.removeChild( startNode ) ;
+
+		if( removeEndNode && endNode.parentNode )
+			endNode.parentNode.removeChild( endNode ) ;
+	},
+
+	cloneRange : function()
+	{
+		return FCKW3CRange.CreateFromRange( this._Document, this ) ;
+	}
+} ;
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckxml.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckxml.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckxml.js	(revision 1280)
@@ -0,0 +1,108 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKXml Class: class to load and manipulate XML files.
+ * (IE specific implementation)
+ */
+
+var FCKXml = function()
+{
+	this.Error = false ;
+}
+
+FCKXml.GetAttribute = function( node, attName, defaultValue )
+{
+	var attNode = node.attributes.getNamedItem( attName ) ;
+	return attNode ? attNode.value : defaultValue ;
+}
+
+/**
+ * Transforms a XML element node in a JavaScript object. Attributes defined for
+ * the element will be available as properties, as long as child  element
+ * nodes, but the later will generate arrays with property names prefixed with "$".
+ *
+ * For example, the following XML element:
+ *
+ *		<SomeNode name="Test" key="2">
+ *			<MyChild id="10">
+ *				<OtherLevel name="Level 3" />
+ *			</MyChild>
+ *			<MyChild id="25" />
+ *			<AnotherChild price="499" />
+ *		</SomeNode>
+ *
+ * ... results in the following object:
+ *
+ *		{
+ *			name : "Test",
+ *			key : "2",
+ *			$MyChild :
+ *			[
+ *				{
+ *					id : "10",
+ *					$OtherLevel :
+ *					{
+ *						name : "Level 3"
+ *					}
+ *				},
+ *				{
+ *					id : "25"
+ *				}
+ *			],
+ *			$AnotherChild :
+ *			[
+ *				{
+ *					price : "499"
+ *				}
+ *			]
+ *		}
+ */
+FCKXml.TransformToObject = function( element )
+{
+	if ( !element )
+		return null ;
+
+	var obj = {} ;
+
+	var attributes = element.attributes ;
+	for ( var i = 0 ; i < attributes.length ; i++ )
+	{
+		var att = attributes[i] ;
+		obj[ att.name ] = att.value ;
+	}
+
+	var childNodes = element.childNodes ;
+	for ( i = 0 ; i < childNodes.length ; i++ )
+	{
+		var child = childNodes[i] ;
+
+		if ( child.nodeType == 1 )
+		{
+			var childName = '$' + child.nodeName ;
+			var childList = obj[ childName ] ;
+			if ( !childList )
+				childList = obj[ childName ] = [] ;
+
+			childList.push( this.TransformToObject( child ) ) ;
+		}
+	}
+
+	return obj ;
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckxml_gecko.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckxml_gecko.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckxml_gecko.js	(revision 1280)
@@ -0,0 +1,87 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKXml Class: class to load and manipulate XML files.
+ */
+
+FCKXml.prototype =
+{
+	LoadUrl : function( urlToCall )
+	{
+		this.Error = false ;
+		var oFCKXml = this ;
+
+		var oXmlHttp = FCKTools.CreateXmlObject( 'XmlHttp' ) ;
+		oXmlHttp.open( "GET", urlToCall, false ) ;
+		oXmlHttp.send( null ) ;
+
+		if ( oXmlHttp.status == 200 || oXmlHttp.status == 304 )
+			this.DOMDocument = oXmlHttp.responseXML ;
+		else if ( oXmlHttp.status == 0 && oXmlHttp.readyState == 4 )
+			this.DOMDocument = oXmlHttp.responseXML ;
+		else
+			this.DOMDocument = null ;
+
+		if ( this.DOMDocument == null || this.DOMDocument.firstChild == null )
+		{
+			this.Error = true ;
+			if (window.confirm( 'Error loading "' + urlToCall + '"\r\nDo you want to see more info?' ) )
+				alert( 'URL requested: "' + urlToCall + '"\r\n' +
+							'Server response:\r\nStatus: ' + oXmlHttp.status + '\r\n' +
+							'Response text:\r\n' + oXmlHttp.responseText ) ;
+
+		}
+	},
+
+	SelectNodes : function( xpath, contextNode )
+	{
+		if ( this.Error )
+			return new Array() ;
+
+		var aNodeArray = new Array();
+
+		var xPathResult = this.DOMDocument.evaluate( xpath, contextNode ? contextNode : this.DOMDocument,
+				this.DOMDocument.createNSResolver(this.DOMDocument.documentElement), XPathResult.ORDERED_NODE_ITERATOR_TYPE, null) ;
+		if ( xPathResult )
+		{
+			var oNode = xPathResult.iterateNext() ;
+			while( oNode )
+			{
+				aNodeArray[aNodeArray.length] = oNode ;
+				oNode = xPathResult.iterateNext();
+			}
+		}
+		return aNodeArray ;
+	},
+
+	SelectSingleNode : function( xpath, contextNode )
+	{
+		if ( this.Error )
+			return null ;
+
+		var xPathResult = this.DOMDocument.evaluate( xpath, contextNode ? contextNode : this.DOMDocument,
+				this.DOMDocument.createNSResolver(this.DOMDocument.documentElement), 9, null);
+
+		if ( xPathResult && xPathResult.singleNodeValue )
+			return xPathResult.singleNodeValue ;
+		else
+			return null ;
+	}
+} ;
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckxml_ie.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckxml_ie.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/classes/fckxml_ie.js	(revision 1280)
@@ -0,0 +1,88 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKXml Class: class to load and manipulate XML files.
+ * (IE specific implementation)
+ */
+
+FCKXml.prototype =
+{
+	LoadUrl : function( urlToCall )
+	{
+		this.Error = false ;
+
+		var oXmlHttp = FCKTools.CreateXmlObject( 'XmlHttp' ) ;
+
+		if ( !oXmlHttp )
+		{
+			this.Error = true ;
+			return ;
+		}
+
+		oXmlHttp.open( "GET", urlToCall, false ) ;
+
+		oXmlHttp.send( null ) ;
+
+		if ( oXmlHttp.status == 200 || oXmlHttp.status == 304 )
+			this.DOMDocument = oXmlHttp.responseXML ;
+		else if ( oXmlHttp.status == 0 && oXmlHttp.readyState == 4 )
+		{
+			this.DOMDocument = FCKTools.CreateXmlObject( 'DOMDocument' ) ;
+			this.DOMDocument.async = false ;
+			this.DOMDocument.resolveExternals = false ;
+			this.DOMDocument.loadXML( oXmlHttp.responseText ) ;
+		}
+		else
+		{
+			this.DOMDocument = null ;
+		}
+
+		if ( this.DOMDocument == null || this.DOMDocument.firstChild == null )
+		{
+			this.Error = true ;
+			if (window.confirm( 'Error loading "' + urlToCall + '"\r\nDo you want to see more info?' ) )
+				alert( 'URL requested: "' + urlToCall + '"\r\n' +
+							'Server response:\r\nStatus: ' + oXmlHttp.status + '\r\n' +
+							'Response text:\r\n' + oXmlHttp.responseText ) ;
+		}
+	},
+
+	SelectNodes : function( xpath, contextNode )
+	{
+		if ( this.Error )
+			return new Array() ;
+
+		if ( contextNode )
+			return contextNode.selectNodes( xpath ) ;
+		else
+			return this.DOMDocument.selectNodes( xpath ) ;
+	},
+
+	SelectSingleNode : function( xpath, contextNode )
+	{
+		if ( this.Error )
+			return null ;
+
+		if ( contextNode )
+			return contextNode.selectSingleNode( xpath ) ;
+		else
+			return this.DOMDocument.selectSingleNode( xpath ) ;
+	}
+} ;
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/commandclasses/fck_othercommands.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/commandclasses/fck_othercommands.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/commandclasses/fck_othercommands.js	(revision 1280)
@@ -0,0 +1,462 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Definition of other commands that are not available internaly in the
+ * browser (see FCKNamedCommand).
+ */
+
+// ### General Dialog Box Commands.
+var FCKDialogCommand = function( name, title, url, width, height, getStateFunction, getStateParam )
+{
+	this.Name	= name ;
+	this.Title	= title ;
+	this.Url	= url ;
+	this.Width	= width ;
+	this.Height	= height ;
+
+	this.GetStateFunction	= getStateFunction ;
+	this.GetStateParam		= getStateParam ;
+
+	this.Resizable = false ;
+}
+
+FCKDialogCommand.prototype.Execute = function()
+{
+	FCKDialog.OpenDialog( 'FCKDialog_' + this.Name , this.Title, this.Url, this.Width, this.Height, null, null, this.Resizable ) ;
+}
+
+FCKDialogCommand.prototype.GetState = function()
+{
+	if ( this.GetStateFunction )
+		return this.GetStateFunction( this.GetStateParam ) ;
+	else
+		return FCK_TRISTATE_OFF ;
+}
+
+// Generic Undefined command (usually used when a command is under development).
+var FCKUndefinedCommand = function()
+{
+	this.Name = 'Undefined' ;
+}
+
+FCKUndefinedCommand.prototype.Execute = function()
+{
+	alert( FCKLang.NotImplemented ) ;
+}
+
+FCKUndefinedCommand.prototype.GetState = function()
+{
+	return FCK_TRISTATE_OFF ;
+}
+
+
+// ### FormatBlock
+var FCKFormatBlockCommand = function()
+{}
+
+FCKFormatBlockCommand.prototype = 
+{
+	Name : 'FormatBlock',
+	
+	Execute : FCKStyleCommand.prototype.Execute,
+	
+	GetState : function()
+	{
+		return FCK.EditorDocument ? FCK_TRISTATE_OFF : FCK_TRISTATE_DISABLED ;
+	}
+};
+
+// ### FontName
+
+var FCKFontNameCommand = function()
+{}
+
+FCKFontNameCommand.prototype = 
+{
+	Name		: 'FontName',
+	Execute		: FCKStyleCommand.prototype.Execute,
+	GetState	: FCKFormatBlockCommand.prototype.GetState
+};
+
+// ### FontSize
+var FCKFontSizeCommand = function()
+{}
+
+FCKFontSizeCommand.prototype = 
+{
+	Name		: 'FontSize',
+	Execute		: FCKStyleCommand.prototype.Execute,
+	GetState	: FCKFormatBlockCommand.prototype.GetState
+};
+
+// ### Preview
+var FCKPreviewCommand = function()
+{
+	this.Name = 'Preview' ;
+}
+
+FCKPreviewCommand.prototype.Execute = function()
+{
+     FCK.Preview() ;
+}
+
+FCKPreviewCommand.prototype.GetState = function()
+{
+	return FCK_TRISTATE_OFF ;
+}
+
+// ### Save
+var FCKSaveCommand = function()
+{
+	this.Name = 'Save' ;
+}
+
+FCKSaveCommand.prototype.Execute = function()
+{
+	// Get the linked field form.
+	var oForm = FCK.GetParentForm() ;
+
+	if ( typeof( oForm.onsubmit ) == 'function' )
+	{
+		var bRet = oForm.onsubmit() ;
+		if ( bRet != null && bRet === false )
+			return ;
+	}
+
+	// Submit the form.
+	// If there's a button named "submit" then the form.submit() function is masked and
+	// can't be called in Mozilla, so we call the click() method of that button.
+	if ( typeof( oForm.submit ) == 'function' )
+		oForm.submit() ;
+	else
+		oForm.submit.click() ;
+}
+
+FCKSaveCommand.prototype.GetState = function()
+{
+	return FCK_TRISTATE_OFF ;
+}
+
+// ### NewPage
+var FCKNewPageCommand = function()
+{
+	this.Name = 'NewPage' ;
+}
+
+FCKNewPageCommand.prototype.Execute = function()
+{
+	FCKUndo.SaveUndoStep() ;
+	FCK.SetData( '' ) ;
+	FCKUndo.Typing = true ;
+	FCK.Focus() ;
+}
+
+FCKNewPageCommand.prototype.GetState = function()
+{
+	return FCK_TRISTATE_OFF ;
+}
+
+// ### Source button
+var FCKSourceCommand = function()
+{
+	this.Name = 'Source' ;
+}
+
+FCKSourceCommand.prototype.Execute = function()
+{
+	if ( FCKConfig.SourcePopup )	// Until v2.2, it was mandatory for FCKBrowserInfo.IsGecko.
+	{
+		var iWidth	= FCKConfig.ScreenWidth * 0.65 ;
+		var iHeight	= FCKConfig.ScreenHeight * 0.65 ;
+		FCKDialog.OpenDialog( 'FCKDialog_Source', FCKLang.Source, 'dialog/fck_source.html', iWidth, iHeight, null, null, true ) ;
+	}
+	else
+	    FCK.SwitchEditMode() ;
+}
+
+FCKSourceCommand.prototype.GetState = function()
+{
+	return ( FCK.EditMode == FCK_EDITMODE_WYSIWYG ? FCK_TRISTATE_OFF : FCK_TRISTATE_ON ) ;
+}
+
+// ### Undo
+var FCKUndoCommand = function()
+{
+	this.Name = 'Undo' ;
+}
+
+FCKUndoCommand.prototype.Execute = function()
+{
+	FCKUndo.Undo() ;
+}
+
+FCKUndoCommand.prototype.GetState = function()
+{
+	return ( FCKUndo.CheckUndoState() ? FCK_TRISTATE_OFF : FCK_TRISTATE_DISABLED ) ;
+}
+
+// ### Redo
+var FCKRedoCommand = function()
+{
+	this.Name = 'Redo' ;
+}
+
+FCKRedoCommand.prototype.Execute = function()
+{
+	FCKUndo.Redo() ;
+}
+
+FCKRedoCommand.prototype.GetState = function()
+{
+	return ( FCKUndo.CheckRedoState() ? FCK_TRISTATE_OFF : FCK_TRISTATE_DISABLED ) ;
+}
+
+// ### Page Break
+var FCKPageBreakCommand = function()
+{
+	this.Name = 'PageBreak' ;
+}
+
+FCKPageBreakCommand.prototype.Execute = function()
+{
+	// Take an undo snapshot before changing the document
+	FCKUndo.SaveUndoStep() ;
+
+//	var e = FCK.EditorDocument.createElement( 'CENTER' ) ;
+//	e.style.pageBreakAfter = 'always' ;
+
+	// Tidy was removing the empty CENTER tags, so the following solution has
+	// been found. It also validates correctly as XHTML 1.0 Strict.
+	var e = FCK.EditorDocument.createElement( 'DIV' ) ;
+	e.style.pageBreakAfter = 'always' ;
+	e.innerHTML = '<span style="DISPLAY:none">&nbsp;</span>' ;
+
+	var oFakeImage = FCKDocumentProcessor_CreateFakeImage( 'FCK__PageBreak', e ) ;
+	FCK.InsertElement( oFakeImage ) ;
+}
+
+FCKPageBreakCommand.prototype.GetState = function()
+{
+	return 0 ; // FCK_TRISTATE_OFF
+}
+
+// FCKUnlinkCommand - by Johnny Egeland (johnny@coretrek.com)
+var FCKUnlinkCommand = function()
+{
+	this.Name = 'Unlink' ;
+}
+
+FCKUnlinkCommand.prototype.Execute = function()
+{
+	// Take an undo snapshot before changing the document
+	FCKUndo.SaveUndoStep() ;
+
+	if ( FCKBrowserInfo.IsGeckoLike )
+	{
+		var oLink = FCK.Selection.MoveToAncestorNode( 'A' ) ;
+		// The unlink command can generate a span in Firefox, so let's do it our way. See #430
+		if ( oLink )
+			FCKTools.RemoveOuterTags( oLink ) ;
+
+		return ;
+	}
+	
+	FCK.ExecuteNamedCommand( this.Name ) ;
+}
+
+FCKUnlinkCommand.prototype.GetState = function()
+{
+	var state = FCK.GetNamedCommandState( this.Name ) ;
+
+	// Check that it isn't an anchor
+	if ( state == FCK_TRISTATE_OFF && FCK.EditMode == FCK_EDITMODE_WYSIWYG )
+	{
+		var oLink = FCKSelection.MoveToAncestorNode( 'A' ) ;
+		var bIsAnchor = ( oLink && oLink.name.length > 0 && oLink.href.length == 0 ) ;
+		if ( bIsAnchor )
+			state = FCK_TRISTATE_DISABLED ;
+	}
+
+	return state ;
+}
+
+// FCKSelectAllCommand
+var FCKSelectAllCommand = function()
+{
+	this.Name = 'SelectAll' ;
+}
+
+FCKSelectAllCommand.prototype.Execute = function()
+{
+	if ( FCK.EditMode == FCK_EDITMODE_WYSIWYG )
+	{
+		FCK.ExecuteNamedCommand( 'SelectAll' ) ;
+	}
+	else
+	{
+		// Select the contents of the textarea
+		var textarea = FCK.EditingArea.Textarea ;
+		if ( FCKBrowserInfo.IsIE )
+		{
+			textarea.createTextRange().execCommand( 'SelectAll' ) ;
+		}
+		else
+		{
+			textarea.selectionStart = 0 ;
+			textarea.selectionEnd = textarea.value.length ;
+		}
+		textarea.focus() ;
+	}
+}
+
+FCKSelectAllCommand.prototype.GetState = function()
+{
+	return FCK_TRISTATE_OFF ;
+}
+
+// FCKPasteCommand
+var FCKPasteCommand = function()
+{
+	this.Name = 'Paste' ;
+}
+
+FCKPasteCommand.prototype =
+{
+	Execute : function()
+	{
+		if ( FCKBrowserInfo.IsIE )
+			FCK.Paste() ;
+		else
+			FCK.ExecuteNamedCommand( 'Paste' ) ;
+	},
+
+	GetState : function()
+	{
+		return FCK.GetNamedCommandState( 'Paste' ) ;
+	}
+} ;
+
+// FCKRuleCommand
+var FCKRuleCommand = function()
+{
+	this.Name = 'Rule' ;
+}
+
+FCKRuleCommand.prototype =
+{
+	Execute : function()
+	{
+		FCKUndo.SaveUndoStep() ;
+		FCK.InsertElement( 'hr' ) ;
+	},
+
+	GetState : function()
+	{
+		return FCK.GetNamedCommandState( 'InsertHorizontalRule' ) ;
+	}
+} ;
+
+// FCKCopyCommand
+var FCKCopyCommand = function()
+{
+	this.Name = 'Copy' ;
+}
+
+FCKCopyCommand.prototype = 
+{
+	Execute : function()
+	{
+		FCK.ExecuteNamedCommand( this.Name ) ;
+	},
+
+	GetState : function()
+	{
+		// Strangely, the cut command happens to have the correct states for both Copy and Cut in all browsers.
+		return FCK.GetNamedCommandState( 'Cut' ) ;
+	}
+};
+
+var FCKAnchorDeleteCommand = function()
+{
+	this.Name = 'AnchorDelete' ;
+}
+
+FCKAnchorDeleteCommand.prototype = 
+{
+	Execute : function()
+	{
+		if (FCK.Selection.GetType() == 'Control')
+		{
+			FCK.Selection.Delete();
+		}
+		else
+		{
+			var oFakeImage = FCK.Selection.GetSelectedElement() ;
+			if ( oFakeImage )
+			{
+				if ( oFakeImage.tagName == 'IMG' && oFakeImage.getAttribute('_fckanchor') )
+					oAnchor = FCK.GetRealElement( oFakeImage ) ;
+				else
+					oFakeImage = null ;
+			}
+
+			//Search for a real anchor
+			if ( !oFakeImage )
+			{
+				oAnchor = FCK.Selection.MoveToAncestorNode( 'A' ) ;
+				if ( oAnchor )
+					FCK.Selection.SelectNode( oAnchor ) ;
+			}
+
+			// If it's also a link, then just remove the name and exit
+			if ( oAnchor.href.length != 0 )
+			{
+				oAnchor.removeAttribute( 'name' ) ;
+				// Remove temporary class for IE
+				if ( FCKBrowserInfo.IsIE )
+					oAnchor.className = oAnchor.className.replace( FCKRegexLib.FCK_Class, '' ) ;
+				return ;
+			}
+
+			// We need to remove the anchor
+			// If we got a fake image, then just remove it and we're done
+			if ( oFakeImage )
+			{
+				oFakeImage.parentNode.removeChild( oFakeImage ) ;
+				return ;
+			}
+			// Empty anchor, so just remove it
+			if ( oAnchor.innerHTML.length == 0 )
+			{
+				oAnchor.parentNode.removeChild( oAnchor ) ;
+				return ;
+			}
+			// Anchor with content, leave the content
+			FCKTools.RemoveOuterTags( oAnchor ) ;
+		}
+		if ( FCKBrowserInfo.IsGecko )
+			FCK.Selection.Collapse( true ) ;
+	},
+
+	GetState : function()
+	{
+		return FCK.GetNamedCommandState( 'Unlink') ;
+	}
+};
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/commandclasses/fckblockquotecommand.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/commandclasses/fckblockquotecommand.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/commandclasses/fckblockquotecommand.js	(revision 1280)
@@ -0,0 +1,194 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKBlockQuoteCommand Class: adds or removes blockquote tags.
+ */
+
+var FCKBlockQuoteCommand = function()
+{
+}
+
+FCKBlockQuoteCommand.prototype = 
+{
+	Execute : function()
+	{
+		FCKUndo.SaveUndoStep() ;
+
+		var state = this.GetState() ;
+		var range = new FCKDomRange( FCK.EditorWindow ) ;
+		range.MoveToSelection() ;
+		var bookmark = range.CreateBookmark() ;
+		var iterator = new FCKDomRangeIterator( range ) ;
+		var block ;
+
+		if ( state == FCK_TRISTATE_OFF )
+		{
+			iterator.EnforceRealBlocks = true ;
+			var paragraphs = [] ;
+			while ( ( block = iterator.GetNextParagraph() ) )
+				paragraphs.push( block ) ;
+
+			// Make sure all paragraphs have the same parent.
+			var commonParent = paragraphs[0].parentNode ;
+			var tmp = [] ;
+			for ( var i = 0 ; i < paragraphs.length ; i++ )
+			{
+				block = paragraphs[i] ;
+				commonParent = FCKDomTools.GetCommonParents( block.parentNode, commonParent ).pop() ;
+			}
+			var lastBlock = null ;
+			while ( paragraphs.length > 0 )
+			{
+				block = paragraphs.shift() ;
+				while ( block.parentNode != commonParent )
+					block = block.parentNode ;
+				if ( block != lastBlock )
+					tmp.push( block ) ;
+				lastBlock = block ;
+			}
+
+			// If any of the selected blocks is a blockquote, remove it to prevent nested blockquotes.
+			while ( tmp.length > 0 )
+			{
+				block = tmp.shift() ;
+				if ( block.nodeName.IEquals( 'blockquote' ) )
+				{
+					var docFrag = block.ownerDocument.createDocumentFragment() ;
+					while ( block.firstChild )
+					{
+						docFrag.appendChild( block.removeChild( block.firstChild ) ) ;
+						paragraphs.push( docFrag.lastChild ) ;
+					}
+					block.parentNode.replaceChild( docFrag, block ) ;
+				}
+				else
+					paragraphs.push( block ) ;
+			}
+
+			// Now we have all the blocks to be included in a new blockquote node.
+			var bqBlock = range.Window.document.createElement( 'blockquote' ) ;
+			commonParent.insertBefore( bqBlock, paragraphs[0] ) ;
+			while ( paragraphs.length > 0 )
+			{
+				block = paragraphs.shift() ;
+				bqBlock.appendChild( block ) ;
+			}
+		}
+		else if ( state == FCK_TRISTATE_ON )
+		{
+			var moveOutNodes = [] ;
+			while ( ( block = iterator.GetNextParagraph() ) )
+			{
+				var bqParent = null ;
+				var bqChild = null ;
+				while ( block.parentNode )
+				{
+					if ( block.parentNode.nodeName.IEquals( 'blockquote' ) )
+					{
+						bqParent = block.parentNode ;
+						bqChild = block ;
+						break ;
+					}
+					block = block.parentNode ;
+				}
+
+				if ( bqParent && bqChild )
+					moveOutNodes.push( bqChild ) ;
+			}
+
+			var movedNodes = [] ;
+			while ( moveOutNodes.length > 0 )
+			{
+				var node = moveOutNodes.shift() ;
+				var bqBlock = node.parentNode ;
+
+				// If the node is located at the beginning or the end, just take it out without splitting.
+				// Otherwise, split the blockquote node and move the paragraph in between the two blockquote nodes.
+				if ( node == node.parentNode.firstChild )
+				{
+					bqBlock.parentNode.insertBefore( bqBlock.removeChild( node ), bqBlock ) ;
+					if ( ! bqBlock.firstChild )
+						bqBlock.parentNode.removeChild( bqBlock ) ;
+				}
+				else if ( node == node.parentNode.lastChild )
+				{
+					bqBlock.parentNode.insertBefore( bqBlock.removeChild( node ), bqBlock.nextSibling ) ;
+					if ( ! bqBlock.firstChild )
+						bqBlock.parentNode.removeChild( bqBlock ) ;
+				}
+				else
+					FCKDomTools.BreakParent( node, node.parentNode, range ) ;
+
+				movedNodes.push( node ) ;
+			}
+
+			if ( FCKConfig.EnterMode.IEquals( 'br' ) )
+			{
+				while ( movedNodes.length )
+				{
+					var node = movedNodes.shift() ;
+					var firstTime = true ;
+					if ( node.nodeName.IEquals( 'div' ) )
+					{
+						var docFrag = node.ownerDocument.createDocumentFragment() ;
+						var needBeginBr = firstTime && node.previousSibling && 
+							!FCKListsLib.BlockBoundaries[node.previousSibling.nodeName.toLowerCase()] ;
+						if ( firstTime && needBeginBr )
+							docFrag.appendChild( node.ownerDocument.createElement( 'br' ) ) ;
+						var needEndBr = node.nextSibling && 
+							!FCKListsLib.BlockBoundaries[node.nextSibling.nodeName.toLowerCase()] ;
+						while ( node.firstChild )
+							docFrag.appendChild( node.removeChild( node.firstChild ) ) ;
+						if ( needEndBr )
+							docFrag.appendChild( node.ownerDocument.createElement( 'br' ) ) ;
+						node.parentNode.replaceChild( docFrag, node ) ;
+						firstTime = false ;
+					}
+				}
+			}
+		}
+		range.MoveToBookmark( bookmark ) ;
+		range.Select() ;
+
+		FCK.Focus() ;
+		FCK.Events.FireEvent( 'OnSelectionChange' ) ;
+	},
+
+	GetState : function()
+	{
+		// Disabled if not WYSIWYG.
+		if ( FCK.EditMode != FCK_EDITMODE_WYSIWYG || ! FCK.EditorWindow )
+			return FCK_TRISTATE_DISABLED ;
+
+		var path = new FCKElementPath( FCKSelection.GetBoundaryParentElement( true ) ) ;
+		var firstBlock = path.Block || path.BlockLimit ;
+
+		if ( !firstBlock || firstBlock.nodeName.toLowerCase() == 'body' )
+			return FCK_TRISTATE_OFF ;
+
+		// See if the first block has a blockquote parent.
+		for ( var i = 0 ; i < path.Elements.length ; i++ )
+		{
+			if ( path.Elements[i].nodeName.IEquals( 'blockquote' ) )
+				return FCK_TRISTATE_ON ;
+		}
+		return FCK_TRISTATE_OFF ;
+	}
+} ;
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/commandclasses/fckcorestylecommand.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/commandclasses/fckcorestylecommand.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/commandclasses/fckcorestylecommand.js	(revision 1280)
@@ -0,0 +1,59 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKCoreStyleCommand Class: controls the execution of a core style. Core
+ * styles are usually represented as buttons in the toolbar., like Bold and
+ * Italic.
+ */
+
+ var FCKCoreStyleCommand = function( coreStyleName )
+ {
+ 	this.Name = 'CoreStyle' ;
+ 	this.StyleName = '_FCK_' + coreStyleName ;
+ 	this.IsActive = false ;
+
+ 	FCKStyles.AttachStyleStateChange( this.StyleName, this._OnStyleStateChange, this ) ;
+ }
+
+ FCKCoreStyleCommand.prototype =
+ {
+	Execute : function()
+	{
+		FCKUndo.SaveUndoStep() ;
+
+		if ( this.IsActive )
+			FCKStyles.RemoveStyle( this.StyleName ) ;
+		else
+			FCKStyles.ApplyStyle( this.StyleName ) ;
+
+		FCK.Focus() ;
+		FCK.Events.FireEvent( 'OnSelectionChange' ) ;
+	},
+
+	GetState : function()
+	{
+		return this.IsActive ? FCK_TRISTATE_ON : FCK_TRISTATE_OFF ;
+	},
+
+	_OnStyleStateChange : function( styleName, isActive )
+	{
+		this.IsActive = isActive ;
+	}
+ };
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/commandclasses/fckfitwindow.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/commandclasses/fckfitwindow.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/commandclasses/fckfitwindow.js	(revision 1280)
@@ -0,0 +1,180 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Stretch the editor to full window size and back.
+ */
+
+var FCKFitWindow = function()
+{
+	this.Name = 'FitWindow' ;
+}
+
+FCKFitWindow.prototype.Execute = function()
+{
+	var eEditorFrame		= window.frameElement ;
+	var eEditorFrameStyle	= eEditorFrame.style ;
+
+	var eMainWindow			= parent ;
+	var eDocEl				= eMainWindow.document.documentElement ;
+	var eBody				= eMainWindow.document.body ;
+	var eBodyStyle			= eBody.style ;
+	var eParent ;
+
+	// No original style properties known? Go fullscreen.
+	if ( !this.IsMaximized )
+	{
+		// Registering an event handler when the window gets resized.
+		if( FCKBrowserInfo.IsIE )
+			eMainWindow.attachEvent( 'onresize', FCKFitWindow_Resize ) ;
+		else
+			eMainWindow.addEventListener( 'resize', FCKFitWindow_Resize, true ) ;
+
+		// Save the scrollbars position.
+		this._ScrollPos = FCKTools.GetScrollPosition( eMainWindow ) ;
+
+		// Save and reset the styles for the entire node tree. They could interfere in the result.
+		eParent = eEditorFrame ;
+		// The extra () is to avoid a warning with strict error checking. This is ok.
+		while( (eParent = eParent.parentNode) )
+		{
+			if ( eParent.nodeType == 1 )
+			{
+				eParent._fckSavedStyles = FCKTools.SaveStyles( eParent ) ;
+				eParent.style.zIndex = FCKConfig.FloatingPanelsZIndex - 1 ;
+			}
+		}
+
+		// Hide IE scrollbars (in strict mode).
+		if ( FCKBrowserInfo.IsIE )
+		{
+			this.documentElementOverflow = eDocEl.style.overflow ;
+			eDocEl.style.overflow	= 'hidden' ;
+			eBodyStyle.overflow		= 'hidden' ;
+		}
+		else
+		{
+			// Hide the scroolbars in Firefox.
+			eBodyStyle.overflow = 'hidden' ;
+			eBodyStyle.width = '0px' ;
+			eBodyStyle.height = '0px' ;
+		}
+
+		// Save the IFRAME styles.
+		this._EditorFrameStyles = FCKTools.SaveStyles( eEditorFrame ) ;
+
+		// Resize.
+		var oViewPaneSize = FCKTools.GetViewPaneSize( eMainWindow ) ;
+
+		eEditorFrameStyle.position	= "absolute";
+		eEditorFrameStyle.zIndex	= FCKConfig.FloatingPanelsZIndex - 1;
+		eEditorFrameStyle.left		= "0px";
+		eEditorFrameStyle.top		= "0px";
+		eEditorFrameStyle.width		= oViewPaneSize.Width + "px";
+		eEditorFrameStyle.height	= oViewPaneSize.Height + "px";
+
+		// Giving the frame some (huge) borders on his right and bottom
+		// side to hide the background that would otherwise show when the
+		// editor is in fullsize mode and the window is increased in size
+		// not for IE, because IE immediately adapts the editor on resize,
+		// without showing any of the background oddly in firefox, the
+		// editor seems not to fill the whole frame, so just setting the
+		// background of it to white to cover the page laying behind it anyway.
+		if ( !FCKBrowserInfo.IsIE )
+		{
+			eEditorFrameStyle.borderRight = eEditorFrameStyle.borderBottom = "9999px solid white" ;
+			eEditorFrameStyle.backgroundColor		= "white";
+		}
+
+		// Scroll to top left.
+		eMainWindow.scrollTo(0, 0);
+
+		// Is the editor still not on the top left? Let's find out and fix that as well. (Bug #174)
+		var editorPos = FCKTools.GetWindowPosition( eMainWindow, eEditorFrame ) ;
+		if ( editorPos.x != 0 )
+			eEditorFrameStyle.left = ( -1 * editorPos.x ) + "px" ;
+		if ( editorPos.y != 0 )
+			eEditorFrameStyle.top = ( -1 * editorPos.y ) + "px" ;
+
+		this.IsMaximized = true ;
+	}
+	else	// Resize to original size.
+	{
+		// Remove the event handler of window resizing.
+		if( FCKBrowserInfo.IsIE )
+			eMainWindow.detachEvent( "onresize", FCKFitWindow_Resize ) ;
+		else
+			eMainWindow.removeEventListener( "resize", FCKFitWindow_Resize, true ) ;
+
+		// Restore the CSS position for the entire node tree.
+		eParent = eEditorFrame ;
+		// The extra () is to avoid a warning with strict error checking. This is ok.
+		while( (eParent = eParent.parentNode) )
+		{
+			if ( eParent._fckSavedStyles )
+			{
+				FCKTools.RestoreStyles( eParent, eParent._fckSavedStyles ) ;
+				eParent._fckSavedStyles = null ;
+			}
+		}
+
+		// Restore IE scrollbars
+		if ( FCKBrowserInfo.IsIE )
+			eDocEl.style.overflow = this.documentElementOverflow ;
+
+		// Restore original size
+		FCKTools.RestoreStyles( eEditorFrame, this._EditorFrameStyles ) ;
+
+		// Restore the window scroll position.
+		eMainWindow.scrollTo( this._ScrollPos.X, this._ScrollPos.Y ) ;
+
+		this.IsMaximized = false ;
+	}
+
+	FCKToolbarItems.GetItem('FitWindow').RefreshState() ;
+
+	// It seams that Firefox restarts the editing area when making this changes.
+	// On FF 1.0.x, the area is not anymore editable. On FF 1.5+, the special
+	//configuration, like DisableFFTableHandles and DisableObjectResizing get
+	//lost, so we must reset it. Also, the cursor position and selection are
+	//also lost, even if you comment the following line (MakeEditable).
+	// if ( FCKBrowserInfo.IsGecko10 )	// Initially I thought it was a FF 1.0 only problem.
+	if ( FCK.EditMode == FCK_EDITMODE_WYSIWYG ) 
+		FCK.EditingArea.MakeEditable() ;
+
+	FCK.Focus() ;
+}
+
+FCKFitWindow.prototype.GetState = function()
+{
+	if ( FCKConfig.ToolbarLocation != 'In' )
+		return FCK_TRISTATE_DISABLED ;
+	else
+		return ( this.IsMaximized ? FCK_TRISTATE_ON : FCK_TRISTATE_OFF );
+}
+
+function FCKFitWindow_Resize()
+{
+	var oViewPaneSize = FCKTools.GetViewPaneSize( parent ) ;
+
+	var eEditorFrameStyle = window.frameElement.style ;
+
+	eEditorFrameStyle.width		= oViewPaneSize.Width + 'px' ;
+	eEditorFrameStyle.height	= oViewPaneSize.Height + 'px' ;
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/commandclasses/fckindentcommands.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/commandclasses/fckindentcommands.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/commandclasses/fckindentcommands.js	(revision 1280)
@@ -0,0 +1,280 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKIndentCommand Class: controls block indentation.
+ */
+
+var FCKIndentCommand = function( name, offset )
+{
+	this.Name = name ;
+	this.Offset = offset ;
+	this.IndentCSSProperty = FCKConfig.ContentLangDirection.IEquals( 'ltr' ) ? 'marginLeft' : 'marginRight' ;
+}
+
+FCKIndentCommand._InitIndentModeParameters = function()
+{
+	if ( FCKConfig.IndentClasses && FCKConfig.IndentClasses.length > 0 )
+	{
+		this._UseIndentClasses = true ;
+		this._IndentClassMap = {} ;
+		for ( var i = 0 ; i < FCKConfig.IndentClasses.length ;i++ )
+			this._IndentClassMap[FCKConfig.IndentClasses[i]] = i + 1 ;
+		this._ClassNameRegex = new RegExp( '(?:^|\\s+)(' + FCKConfig.IndentClasses.join( '|' ) + ')(?=$|\\s)' ) ;
+	}
+	else
+		this._UseIndentClasses = false ;
+}
+
+
+FCKIndentCommand.prototype =
+{
+	Execute : function()
+	{
+		// Save an undo snapshot before doing anything.
+		FCKUndo.SaveUndoStep() ;
+
+		var range = new FCKDomRange( FCK.EditorWindow ) ;
+		range.MoveToSelection() ;
+		var bookmark = range.CreateBookmark() ;
+
+		// Two cases to handle here: either we're in a list, or not.
+		// If we're in a list, then the indent/outdent operations would be done on the list nodes.
+		// Otherwise, apply the operation on the nearest block nodes.
+		var nearestListBlock = FCKDomTools.GetCommonParentNode( range.StartNode || range.StartContainer , 
+				range.EndNode || range.EndContainer, 
+				['ul', 'ol'] ) ;
+		if ( nearestListBlock )
+			this._IndentList( range, nearestListBlock ) ;
+		else
+			this._IndentBlock( range ) ;
+
+		range.MoveToBookmark( bookmark ) ;
+		range.Select() ;
+
+		FCK.Focus() ;
+		FCK.Events.FireEvent( 'OnSelectionChange' ) ;
+	},
+
+	GetState : function()
+	{
+		// Disabled if not WYSIWYG.
+		if ( FCK.EditMode != FCK_EDITMODE_WYSIWYG || ! FCK.EditorWindow )
+			return FCK_TRISTATE_DISABLED ;
+
+		// Initialize parameters if not already initialzed.
+		if ( FCKIndentCommand._UseIndentClasses == undefined )
+			FCKIndentCommand._InitIndentModeParameters() ;
+
+		// If we're not in a list, and the starting block's indentation is zero, and the current
+		// command is the outdent command, then we should return FCK_TRISTATE_DISABLED.
+		var startContainer = FCKSelection.GetBoundaryParentElement( true ) ;
+		var endContainer = FCKSelection.GetBoundaryParentElement( false ) ;
+		var listNode = FCKDomTools.GetCommonParentNode( startContainer, endContainer, ['ul','ol'] ) ;
+
+		if ( listNode )
+		{
+			if ( this.Name.IEquals( 'outdent' ) )
+				return FCK_TRISTATE_OFF ;
+			var firstItem = FCKTools.GetElementAscensor( startContainer, 'li' ) ;
+			if ( !firstItem || !firstItem.previousSibling )
+				return FCK_TRISTATE_DISABLED ;
+			return FCK_TRISTATE_OFF ;
+		}
+		if ( ! FCKIndentCommand._UseIndentClasses && this.Name.IEquals( 'indent' ) )
+			return FCK_TRISTATE_OFF;
+
+		var path = new FCKElementPath( startContainer ) ;
+		var firstBlock = path.Block || path.BlockLimit ;
+		if ( !firstBlock )
+			return FCK_TRISTATE_DISABLED ;
+
+		if ( FCKIndentCommand._UseIndentClasses )
+		{
+			var indentClass = firstBlock.className.match( FCKIndentCommand._ClassNameRegex ) ;
+			var indentStep = 0 ;
+			if ( indentClass != null )
+			{
+				indentClass = indentClass[1] ;
+				indentStep = FCKIndentCommand._IndentClassMap[indentClass] ;
+			}
+			if ( ( this.Name == 'outdent' && indentStep == 0 ) ||
+					( this.Name == 'indent' && indentStep == FCKConfig.IndentClasses.length ) )
+				return FCK_TRISTATE_DISABLED ;
+			return FCK_TRISTATE_OFF ;
+		}
+		else
+		{
+			var indent = parseInt( firstBlock.style[this.IndentCSSProperty], 10 ) ;
+			if ( isNaN( indent ) )
+				indent = 0 ;
+			if ( indent <= 0 )
+				return FCK_TRISTATE_DISABLED ;
+			return FCK_TRISTATE_OFF ;
+		}
+	},
+
+	_IndentBlock : function( range )
+	{
+		var iterator = new FCKDomRangeIterator( range ) ;
+		range.Expand( 'block_contents' ) ;
+		var commonParents = FCKDomTools.GetCommonParents( range.StartContainer, range.EndContainer ) ;
+		var nearestParent = commonParents[commonParents.length - 1] ;
+		var block ;
+
+		while ( ( block = iterator.GetNextParagraph() ) )
+		{
+			// We don't want to indent subtrees recursively, so only perform the indent operation
+			// if the block itself is the nearestParent, or the block's parent is the nearestParent.
+			if ( ! ( block == nearestParent || block.parentNode == nearestParent ) )
+				continue ;
+
+			if ( FCKIndentCommand._UseIndentClasses )
+			{
+				// Transform current class name to indent step index.
+				var indentClass = block.className.match( FCKIndentCommand._ClassNameRegex ) ;
+				var indentStep = 0 ;
+				if ( indentClass != null )
+				{
+					indentClass = indentClass[1] ;
+					indentStep = FCKIndentCommand._IndentClassMap[indentClass] ;
+				}
+
+				// Operate on indent step index, transform indent step index back to class name.
+				if ( this.Name.IEquals( 'outdent' ) )
+					indentStep-- ;
+				else if ( this.Name.IEquals( 'indent' ) )
+					indentStep++ ;
+				indentStep = Math.min( indentStep, FCKConfig.IndentClasses.length ) ;
+				indentStep = Math.max( indentStep, 0 ) ;
+				var className = block.className.replace( FCKIndentCommand._ClassNameRegex, '' ) ;
+				if ( indentStep < 1 )
+					block.className = className ;
+				else
+					block.className = ( className.length > 0 ? className + ' ' : '' ) +
+						FCKConfig.IndentClasses[indentStep - 1] ;
+			}
+			else
+			{
+				// Offset distance is assumed to be in pixels for now.
+				var currentOffset = parseInt( block.style[this.IndentCSSProperty], 10 ) ;
+				if ( isNaN( currentOffset ) )
+					currentOffset = 0 ;
+				currentOffset += this.Offset ;
+				currentOffset = Math.max( currentOffset, 0 ) ;
+				currentOffset = Math.ceil( currentOffset / this.Offset ) * this.Offset ;
+				block.style[this.IndentCSSProperty] = currentOffset ? currentOffset + FCKConfig.IndentUnit : '' ;
+				if ( block.getAttribute( 'style' ) == '' )
+					block.removeAttribute( 'style' ) ;
+			}
+		}
+	},
+
+	_IndentList : function( range, listNode )
+	{
+		// Our starting and ending points of the range might be inside some blocks under a list item...
+		// So before playing with the iterator, we need to expand the block to include the list items.
+		var startContainer = range.StartContainer ;
+		var endContainer = range.EndContainer ;
+		while ( startContainer && startContainer.parentNode != listNode )
+			startContainer = startContainer.parentNode ;
+		while ( endContainer && endContainer.parentNode != listNode )
+			endContainer = endContainer.parentNode ;
+
+		if ( ! startContainer || ! endContainer )
+			return ;
+
+		// Now we can iterate over the individual items on the same tree depth.
+		var block = startContainer ;
+		var itemsToMove = [] ;
+		var stopFlag = false ;
+		while ( stopFlag == false )
+		{
+			if ( block == endContainer )
+				stopFlag = true ;
+			itemsToMove.push( block ) ;
+			block = block.nextSibling ;
+		}
+		if ( itemsToMove.length < 1 )
+			return ;
+
+		// Do indent or outdent operations on the array model of the list, not the list's DOM tree itself.
+		// The array model demands that it knows as much as possible about the surrounding lists, we need
+		// to feed it the further ancestor node that is still a list.
+		var listParents = FCKDomTools.GetParents( listNode ) ;
+		for ( var i = 0 ; i < listParents.length ; i++ )
+		{
+			if ( listParents[i].nodeName.IEquals( ['ul', 'ol'] ) )
+			{
+				listNode = listParents[i] ;
+				break ;
+			}
+		}
+		var indentOffset = this.Name.IEquals( 'indent' ) ? 1 : -1 ;
+		var startItem = itemsToMove[0] ;
+		var lastItem = itemsToMove[ itemsToMove.length - 1 ] ;
+		var markerObj = {} ;
+
+		// Convert the list DOM tree into a one dimensional array.
+		var listArray = FCKDomTools.ListToArray( listNode, markerObj ) ;
+
+		// Apply indenting or outdenting on the array.
+		var baseIndent = listArray[lastItem._FCK_ListArray_Index].indent ;
+		for ( var i = startItem._FCK_ListArray_Index ; i <= lastItem._FCK_ListArray_Index ; i++ )
+			listArray[i].indent += indentOffset ;
+		for ( var i = lastItem._FCK_ListArray_Index + 1 ; i < listArray.length && listArray[i].indent > baseIndent ; i++ )
+			listArray[i].indent += indentOffset ;
+
+		/* For debug use only
+		var PrintArray = function( listArray, doc )
+		{
+			var s = [] ;
+			for ( var i = 0 ; i < listArray.length ; i++ )
+			{
+				for ( var j in listArray[i] )
+				{
+					if ( j != 'contents' )
+						s.push( j + ":" + listArray[i][j] + "; " ) ;
+					else
+					{
+						var docFrag = doc.createDocumentFragment() ;
+						var tmpNode = doc.createElement( 'span' ) ;
+						for ( var k = 0 ; k < listArray[i][j].length ; k++ )
+							docFrag.appendChild( listArray[i][j][k].cloneNode( true ) ) ;
+						tmpNode.appendChild( docFrag ) ;
+						s.push( j + ":" + tmpNode.innerHTML + "; ") ;
+					}
+				}
+				s.push( '\n' ) ;
+			}
+			alert( s.join('') ) ;
+		}
+		PrintArray( listArray, FCK.EditorDocument ) ;
+		*/
+
+		// Convert the array back to a DOM forest (yes we might have a few subtrees now).
+		// And replace the old list with the new forest.
+		var newList = FCKDomTools.ArrayToList( listArray ) ;
+		if ( newList )
+			listNode.parentNode.replaceChild( newList.listNode, listNode ) ;
+
+		// Clean up the markers.
+		FCKDomTools.ClearAllMarkers( markerObj ) ;
+	}
+} ;
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/commandclasses/fckjustifycommands.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/commandclasses/fckjustifycommands.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/commandclasses/fckjustifycommands.js	(revision 1280)
@@ -0,0 +1,173 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKJustifyCommand Class: controls block justification.
+ */
+
+var FCKJustifyCommand = function( alignValue )
+{
+	this.AlignValue = alignValue ;
+
+	// Detect whether this is the instance for the default alignment.
+	var contentDir = FCKConfig.ContentLangDirection.toLowerCase() ;
+	this.IsDefaultAlign = ( alignValue == 'left' && contentDir == 'ltr' ) ||
+						  ( alignValue == 'right' && contentDir == 'rtl' ) ;
+
+	// Get the class name to be used by this instance.
+	var cssClassName = this._CssClassName = ( function()
+	{
+		var classes = FCKConfig.JustifyClasses ;
+		if ( classes )
+		{
+			switch ( alignValue )
+			{
+				case 'left' :
+					return classes[0] ;
+				case 'center' :
+					return classes[1] ;
+				case 'right' :
+					return classes[2] ;
+				case 'justify' :
+					return classes[3] ;
+			}
+		}
+		return null ;
+	} )() ;
+
+	if ( cssClassName && cssClassName.length > 0 )
+		this._CssClassRegex = new RegExp( '(?:^|\\s+)' + cssClassName + '(?=$|\\s)' ) ;
+}
+
+FCKJustifyCommand._GetClassNameRegex = function()
+{
+	var regex = FCKJustifyCommand._ClassRegex ;
+	if ( regex != undefined )
+		return regex ;
+
+	var names = [] ;
+
+	var classes = FCKConfig.JustifyClasses ;
+	if ( classes )
+	{
+		for ( var i = 0 ; i < 4 ; i++ )
+		{
+			var className = classes[i] ;
+			if ( className && className.length > 0 )
+				names.push( className ) ;
+		}
+	}
+
+	if ( names.length > 0 )
+		regex = new RegExp( '(?:^|\\s+)(?:' + names.join( '|' ) + ')(?=$|\\s)' ) ;
+	else
+		regex = null ;
+
+	return FCKJustifyCommand._ClassRegex = regex ;
+}
+
+FCKJustifyCommand.prototype =
+{
+	Execute : function()
+	{
+		// Save an undo snapshot before doing anything.
+		FCKUndo.SaveUndoStep() ;
+
+		var range = new FCKDomRange( FCK.EditorWindow ) ;
+		range.MoveToSelection() ;
+
+		var currentState = this.GetState() ;
+		if ( currentState == FCK_TRISTATE_DISABLED )
+			return ;
+
+		// Store a bookmark of the selection since the paragraph iterator might
+		// change the DOM tree and break selections.
+		var bookmark = range.CreateBookmark() ;
+		
+		var cssClassName = this._CssClassName ;
+
+		// Apply alignment setting for each paragraph.
+		var iterator = new FCKDomRangeIterator( range ) ;
+		var block ;
+		while ( ( block = iterator.GetNextParagraph() ) )
+		{
+			block.removeAttribute( 'align' ) ;
+
+			if ( cssClassName )
+			{
+				// Remove the any of the alignment classes from the className.
+				var className = block.className.replace( FCKJustifyCommand._GetClassNameRegex(), '' ) ;
+
+				// Append the desired class name.
+				if ( currentState == FCK_TRISTATE_OFF )
+				{
+					if ( className.length > 0 )
+						className += ' ' ;
+					block.className = className + cssClassName ;
+				}
+				else if ( className.length == 0 )
+					FCKDomTools.RemoveAttribute( block, 'class' ) ;
+			}
+			else
+			{
+				var style = block.style ;
+				if ( currentState == FCK_TRISTATE_OFF )
+					style.textAlign = this.AlignValue ;
+				else
+				{
+					style.textAlign = '' ;
+					if ( style.cssText.length == 0 )
+						block.removeAttribute( 'style' ) ;
+				}
+			}
+		}
+
+		// Restore previous selection.
+		range.MoveToBookmark( bookmark ) ;
+		range.Select() ;
+
+		FCK.Focus() ;
+		FCK.Events.FireEvent( 'OnSelectionChange' ) ;
+	},
+
+	GetState : function()
+	{
+		// Disabled if not WYSIWYG.
+		if ( FCK.EditMode != FCK_EDITMODE_WYSIWYG || ! FCK.EditorWindow )
+			return FCK_TRISTATE_DISABLED ;
+
+		// Retrieve the first selected block.
+		var path = new FCKElementPath( FCKSelection.GetBoundaryParentElement( true ) ) ;
+		var firstBlock = path.Block || path.BlockLimit ;
+
+		if ( !firstBlock || firstBlock.nodeName.toLowerCase() == 'body' )
+			return FCK_TRISTATE_OFF ;
+
+		// Check if the desired style is already applied to the block.
+		var currentAlign ;
+		if ( FCKBrowserInfo.IsIE )
+			currentAlign = firstBlock.currentStyle.textAlign ;
+		else
+			currentAlign = FCK.EditorWindow.getComputedStyle( firstBlock, '' ).getPropertyValue( 'text-align' );
+		currentAlign = currentAlign.replace( /(-moz-|-webkit-|start|auto)/i, '' );
+		if ( ( !currentAlign && this.IsDefaultAlign ) || currentAlign == this.AlignValue )
+			return FCK_TRISTATE_ON ;
+		return FCK_TRISTATE_OFF ;
+	}
+} ;
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/commandclasses/fcklistcommands.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/commandclasses/fcklistcommands.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/commandclasses/fcklistcommands.js	(revision 1280)
@@ -0,0 +1,382 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Implementation for the "Insert/Remove Ordered/Unordered List" commands.
+ */
+
+var FCKListCommand = function( name, tagName )
+{
+	this.Name = name ;
+	this.TagName = tagName ;
+}
+
+FCKListCommand.prototype =
+{
+	GetState : function()
+	{
+		// Disabled if not WYSIWYG.
+		if ( FCK.EditMode != FCK_EDITMODE_WYSIWYG || ! FCK.EditorWindow )
+			return FCK_TRISTATE_DISABLED ;
+
+		// We'll use the style system's convention to determine list state here...
+		// If the starting block is a descendant of an <ol> or <ul> node, then we're in a list.
+		var startContainer = FCKSelection.GetBoundaryParentElement( true ) ;
+		var listNode = startContainer ;
+		while ( listNode )
+		{
+			if ( listNode.nodeName.IEquals( [ 'ul', 'ol' ] ) )
+				break ;
+			listNode = listNode.parentNode ;
+		}
+		if ( listNode && listNode.nodeName.IEquals( this.TagName ) )
+			return FCK_TRISTATE_ON ;
+		else
+			return FCK_TRISTATE_OFF ;
+	},
+
+	Execute : function()
+	{
+		FCKUndo.SaveUndoStep() ;
+
+		var doc = FCK.EditorDocument ;
+		var range = new FCKDomRange( FCK.EditorWindow ) ;
+		range.MoveToSelection() ;
+		var state = this.GetState() ;
+
+		// Midas lists rule #1 says we can create a list even in an empty document.
+		// But FCKDomRangeIterator wouldn't run if the document is really empty.
+		// So create a paragraph if the document is empty and we're going to create a list.
+		if ( state == FCK_TRISTATE_OFF )
+		{
+			FCKDomTools.TrimNode( doc.body ) ;
+			if ( ! doc.body.firstChild )
+			{
+				var paragraph = doc.createElement( 'p' ) ;
+				doc.body.appendChild( paragraph ) ;
+				range.MoveToNodeContents( paragraph ) ;
+			}
+		}
+
+		var bookmark = range.CreateBookmark() ;
+
+		// Group the blocks up because there are many cases where multiple lists have to be created,
+		// or multiple lists have to be cancelled.
+		var listGroups = [] ;
+		var markerObj = {} ;
+		var iterator = new FCKDomRangeIterator( range ) ;
+		var block ;
+
+		iterator.ForceBrBreak = ( state == FCK_TRISTATE_OFF ) ;
+		var nextRangeExists = true ;
+		var rangeQueue = null ;
+		while ( nextRangeExists )
+		{
+			while ( ( block = iterator.GetNextParagraph() ) )
+			{
+				var path = new FCKElementPath( block ) ;
+				var listNode = null ;
+				var processedFlag = false ;
+				var blockLimit = path.BlockLimit ;
+
+				// First, try to group by a list ancestor.
+				for ( var i = path.Elements.length - 1 ; i >= 0 ; i-- )
+				{
+					var el = path.Elements[i] ;
+					if ( el.nodeName.IEquals( ['ol', 'ul'] ) )
+					{
+						// If we've encountered a list inside a block limit
+						// The last group object of the block limit element should
+						// no longer be valid. Since paragraphs after the list
+						// should belong to a different group of paragraphs before
+						// the list. (Bug #1309)
+						if ( blockLimit._FCK_ListGroupObject )
+							blockLimit._FCK_ListGroupObject = null ;
+
+						var groupObj = el._FCK_ListGroupObject ;
+						if ( groupObj )
+							groupObj.contents.push( block ) ;
+						else
+						{
+							groupObj = { 'root' : el, 'contents' : [ block ] } ;
+							listGroups.push( groupObj ) ;
+							FCKDomTools.SetElementMarker( markerObj, el, '_FCK_ListGroupObject', groupObj ) ;
+						}
+						processedFlag = true ;
+						break ;
+					}
+				}
+
+				if ( processedFlag )
+					continue ;
+
+				// No list ancestor? Group by block limit.
+				var root = blockLimit ;
+				if ( root._FCK_ListGroupObject )
+					root._FCK_ListGroupObject.contents.push( block ) ;
+				else
+				{
+					var groupObj = { 'root' : root, 'contents' : [ block ] } ;
+					FCKDomTools.SetElementMarker( markerObj, root, '_FCK_ListGroupObject', groupObj ) ;
+					listGroups.push( groupObj ) ;
+				}
+			}
+
+			if ( FCKBrowserInfo.IsIE )
+				nextRangeExists = false ;
+			else
+			{
+				if ( rangeQueue == null )
+				{
+					rangeQueue = [] ;
+					var selectionObject = FCK.EditorWindow.getSelection() ;
+					if ( selectionObject && listGroups.length == 0 )
+						rangeQueue.push( selectionObject.getRangeAt( 0 ) ) ;
+					for ( var i = 1 ; selectionObject && i < selectionObject.rangeCount ; i++ )
+						rangeQueue.push( selectionObject.getRangeAt( i ) ) ;
+				}
+				if ( rangeQueue.length < 1 )
+					nextRangeExists = false ;
+				else
+				{
+					var internalRange = FCKW3CRange.CreateFromRange( doc, rangeQueue.shift() ) ;
+					range._Range = internalRange ;
+					range._UpdateElementInfo() ;
+					if ( range.StartNode.nodeName.IEquals( 'td' ) )
+						range.SetStart( range.StartNode, 1 ) ;
+					if ( range.EndNode.nodeName.IEquals( 'td' ) )
+						range.SetEnd( range.EndNode, 2 ) ;
+					iterator = new FCKDomRangeIterator( range ) ;
+					iterator.ForceBrBreak = ( state == FCK_TRISTATE_OFF ) ;
+				}
+			}
+		}
+
+		// Now we have two kinds of list groups, groups rooted at a list, and groups rooted at a block limit element.
+		// We either have to build lists or remove lists, for removing a list does not makes sense when we are looking
+		// at the group that's not rooted at lists. So we have three cases to handle.
+		var listsCreated = [] ;
+		while ( listGroups.length > 0 )
+		{
+			var groupObj = listGroups.shift() ;
+			if ( state == FCK_TRISTATE_OFF )
+			{
+				if ( groupObj.root.nodeName.IEquals( ['ul', 'ol'] ) )
+					this._ChangeListType( groupObj, markerObj, listsCreated ) ;
+				else
+					this._CreateList( groupObj, listsCreated ) ;
+			}
+			else if ( state == FCK_TRISTATE_ON && groupObj.root.nodeName.IEquals( ['ul', 'ol'] ) )
+				this._RemoveList( groupObj, markerObj ) ;
+		}
+
+		// For all new lists created, merge adjacent, same type lists.
+		for ( var i = 0 ; i < listsCreated.length ; i++ )
+		{
+			var listNode = listsCreated[i] ;
+			var stopFlag = false ;
+			var currentNode = listNode ;
+			while ( ! stopFlag )
+			{
+				currentNode = currentNode.nextSibling ;
+				if ( currentNode && currentNode.nodeType == 3 && currentNode.nodeValue.search( /^[\n\r\t ]*$/ ) == 0 )
+					continue ;
+				stopFlag = true ;
+			}
+
+			if ( currentNode && currentNode.nodeName.IEquals( this.TagName ) )
+			{
+				currentNode.parentNode.removeChild( currentNode ) ;
+				while ( currentNode.firstChild )
+					listNode.appendChild( currentNode.removeChild( currentNode.firstChild ) ) ;
+			}
+
+			stopFlag = false ;
+			currentNode = listNode ;
+			while ( ! stopFlag )
+			{
+				currentNode = currentNode.previousSibling ;
+				if ( currentNode && currentNode.nodeType == 3 && currentNode.nodeValue.search( /^[\n\r\t ]*$/ ) == 0 )
+					continue ;
+				stopFlag = true ;
+			}
+			if ( currentNode && currentNode.nodeName.IEquals( this.TagName ) )
+			{
+				currentNode.parentNode.removeChild( currentNode ) ;
+				while ( currentNode.lastChild )
+					listNode.insertBefore( currentNode.removeChild( currentNode.lastChild ),
+						       listNode.firstChild ) ;
+			}
+		}
+
+		// Clean up, restore selection and update toolbar button states.
+		FCKDomTools.ClearAllMarkers( markerObj ) ;
+		range.MoveToBookmark( bookmark ) ;
+		range.Select() ;
+
+		FCK.Focus() ;
+		FCK.Events.FireEvent( 'OnSelectionChange' ) ;
+	},
+
+	_ChangeListType : function( groupObj, markerObj, listsCreated )
+	{
+		// This case is easy...
+		// 1. Convert the whole list into a one-dimensional array.
+		// 2. Change the list type by modifying the array.
+		// 3. Recreate the whole list by converting the array to a list.
+		// 4. Replace the original list with the recreated list.
+		var listArray = FCKDomTools.ListToArray( groupObj.root, markerObj ) ;
+		var selectedListItems = [] ;
+		for ( var i = 0 ; i < groupObj.contents.length ; i++ )
+		{
+			var itemNode = groupObj.contents[i] ;
+			itemNode = FCKTools.GetElementAscensor( itemNode, 'li' ) ;
+			if ( ! itemNode || itemNode._FCK_ListItem_Processed )
+				continue ;
+			selectedListItems.push( itemNode ) ;
+			FCKDomTools.SetElementMarker( markerObj, itemNode, '_FCK_ListItem_Processed', true ) ;
+		}
+		var fakeParent = groupObj.root.ownerDocument.createElement( this.TagName ) ;
+		for ( var i = 0 ; i < selectedListItems.length ; i++ )
+		{
+			var listIndex = selectedListItems[i]._FCK_ListArray_Index ;
+			listArray[listIndex].parent = fakeParent ;
+		}
+		var newList = FCKDomTools.ArrayToList( listArray, markerObj ) ;
+		for ( var i = 0 ; i < newList.listNode.childNodes.length ; i++ )
+		{
+			if ( newList.listNode.childNodes[i].nodeName.IEquals( this.TagName ) )
+				listsCreated.push( newList.listNode.childNodes[i] ) ;
+		}
+		groupObj.root.parentNode.replaceChild( newList.listNode, groupObj.root ) ;
+	},
+
+	_CreateList : function( groupObj, listsCreated )
+	{
+		var contents = groupObj.contents ;
+		var doc = groupObj.root.ownerDocument ;
+		var listContents = [] ;
+
+		// It is possible to have the contents returned by DomRangeIterator to be the same as the root.
+		// e.g. when we're running into table cells.
+		// In such a case, enclose the childNodes of contents[0] into a <div>.
+		if ( contents.length == 1 && contents[0] == groupObj.root )
+		{
+			var divBlock = doc.createElement( 'div' );
+			while ( contents[0].firstChild )
+				divBlock.appendChild( contents[0].removeChild( contents[0].firstChild ) ) ;
+			contents[0].appendChild( divBlock ) ;
+			contents[0] = divBlock ;
+		}
+
+		// Calculate the common parent node of all content blocks.
+		var commonParent = groupObj.contents[0].parentNode ;
+		for ( var i = 0 ; i < contents.length ; i++ )
+			commonParent = FCKDomTools.GetCommonParents( commonParent, contents[i].parentNode ).pop() ;
+
+		// We want to insert things that are in the same tree level only, so calculate the contents again
+		// by expanding the selected blocks to the same tree level.
+		for ( var i = 0 ; i < contents.length ; i++ )
+		{
+			var contentNode = contents[i] ;
+			while ( contentNode.parentNode )
+			{
+				if ( contentNode.parentNode == commonParent )
+				{
+					listContents.push( contentNode ) ;
+					break ;
+				}
+				contentNode = contentNode.parentNode ;
+			}
+		}
+
+		if ( listContents.length < 1 )
+			return ;
+
+		// Insert the list to the DOM tree.
+		var insertAnchor = listContents[listContents.length - 1].nextSibling ;
+		var listNode = doc.createElement( this.TagName ) ;
+		listsCreated.push( listNode ) ;
+		while ( listContents.length )
+		{
+			var contentBlock = listContents.shift() ;
+			var docFrag = doc.createDocumentFragment() ;
+			while ( contentBlock.firstChild )
+				docFrag.appendChild( contentBlock.removeChild( contentBlock.firstChild ) ) ;
+			contentBlock.parentNode.removeChild( contentBlock ) ;
+			var listItem = doc.createElement( 'li' ) ;
+			listItem.appendChild( docFrag ) ;
+			listNode.appendChild( listItem ) ;
+		}
+		commonParent.insertBefore( listNode, insertAnchor ) ;
+	},
+
+	_RemoveList : function( groupObj, markerObj )
+	{
+		// This is very much like the change list type operation.
+		// Except that we're changing the selected items' indent to -1 in the list array.
+		var listArray = FCKDomTools.ListToArray( groupObj.root, markerObj ) ;
+		var selectedListItems = [] ;
+		for ( var i = 0 ; i < groupObj.contents.length ; i++ )
+		{
+			var itemNode = groupObj.contents[i] ;
+			itemNode = FCKTools.GetElementAscensor( itemNode, 'li' ) ;
+			if ( ! itemNode || itemNode._FCK_ListItem_Processed )
+				continue ;
+			selectedListItems.push( itemNode ) ;
+			FCKDomTools.SetElementMarker( markerObj, itemNode, '_FCK_ListItem_Processed', true ) ;
+		}
+
+		var lastListIndex = null ;
+		for ( var i = 0 ; i < selectedListItems.length ; i++ )
+		{
+			var listIndex = selectedListItems[i]._FCK_ListArray_Index ;
+			listArray[listIndex].indent = -1 ;
+			lastListIndex = listIndex ;
+		}
+
+		// After cutting parts of the list out with indent=-1, we still have to maintain the array list
+		// model's nextItem.indent <= currentItem.indent + 1 invariant. Otherwise the array model of the
+		// list cannot be converted back to a real DOM list.
+		for ( var i = lastListIndex + 1; i < listArray.length ; i++ )
+		{
+			if ( listArray[i].indent > listArray[i-1].indent + 1 )
+			{
+				var indentOffset = listArray[i-1].indent + 1 - listArray[i].indent ;
+				var oldIndent = listArray[i].indent ;
+				while ( listArray[i] && listArray[i].indent >= oldIndent)
+				{
+					listArray[i].indent += indentOffset ;
+					i++ ;
+				}
+				i-- ;
+			}
+		}
+
+		var newList = FCKDomTools.ArrayToList( listArray, markerObj ) ;
+		// If groupObj.root is the last element in its parent, or its nextSibling is a <br>, then we should
+		// not add a <br> after the final item. So, check for the cases and trim the <br>.
+		if ( groupObj.root.nextSibling == null || groupObj.root.nextSibling.nodeName.IEquals( 'br' ) )
+		{
+			if ( newList.listNode.lastChild.nodeName.IEquals( 'br' ) )
+				newList.listNode.removeChild( newList.listNode.lastChild ) ;
+		}
+		groupObj.root.parentNode.replaceChild( newList.listNode, groupObj.root ) ;
+	}
+};
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/commandclasses/fcknamedcommand.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/commandclasses/fcknamedcommand.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/commandclasses/fcknamedcommand.js	(revision 1280)
@@ -0,0 +1,37 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKNamedCommand Class: represents an internal browser command.
+ */
+
+var FCKNamedCommand = function( commandName )
+{
+	this.Name = commandName ;
+}
+
+FCKNamedCommand.prototype.Execute = function()
+{
+	FCK.ExecuteNamedCommand( this.Name ) ;
+}
+
+FCKNamedCommand.prototype.GetState = function()
+{
+	return FCK.GetNamedCommandState( this.Name ) ;
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/commandclasses/fckpasteplaintextcommand.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/commandclasses/fckpasteplaintextcommand.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/commandclasses/fckpasteplaintextcommand.js	(revision 1280)
@@ -0,0 +1,38 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKPastePlainTextCommand Class: represents the
+ * "Paste as Plain Text" command.
+ */
+
+var FCKPastePlainTextCommand = function()
+{
+	this.Name = 'PasteText' ;
+}
+
+FCKPastePlainTextCommand.prototype.Execute = function()
+{
+	FCK.PasteAsPlainText() ;
+}
+
+FCKPastePlainTextCommand.prototype.GetState = function()
+{
+	return FCK.GetNamedCommandState( 'Paste' ) ;
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/commandclasses/fckpastewordcommand.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/commandclasses/fckpastewordcommand.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/commandclasses/fckpastewordcommand.js	(revision 1280)
@@ -0,0 +1,40 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKPasteWordCommand Class: represents the "Paste from Word" command.
+ */
+
+var FCKPasteWordCommand = function()
+{
+	this.Name = 'PasteWord' ;
+}
+
+FCKPasteWordCommand.prototype.Execute = function()
+{
+	FCK.PasteFromWord() ;
+}
+
+FCKPasteWordCommand.prototype.GetState = function()
+{
+	if ( FCKConfig.ForcePasteAsPlainText )
+		return FCK_TRISTATE_DISABLED ;
+	else
+		return FCK.GetNamedCommandState( 'Paste' ) ;
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/commandclasses/fckremoveformatcommand.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/commandclasses/fckremoveformatcommand.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/commandclasses/fckremoveformatcommand.js	(revision 1280)
@@ -0,0 +1,45 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKRemoveFormatCommand Class: controls the execution of a core style. Core
+ * styles are usually represented as buttons in the toolbar., like Bold and
+ * Italic.
+ */
+
+ var FCKRemoveFormatCommand = function()
+ {
+ 	this.Name = 'RemoveFormat' ;
+ }
+
+ FCKRemoveFormatCommand.prototype =
+ {
+	Execute : function()
+	{
+		FCKStyles.RemoveAll() ;
+
+		FCK.Focus() ;
+		FCK.Events.FireEvent( 'OnSelectionChange' ) ;
+	},
+
+	GetState : function()
+	{
+		return FCK.EditorWindow ? FCK_TRISTATE_OFF : FCK_TRISTATE_DISABLED ;
+	}
+ };
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/commandclasses/fckshowblocks.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/commandclasses/fckshowblocks.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/commandclasses/fckshowblocks.js	(revision 1280)
@@ -0,0 +1,76 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKShowBlockCommand Class: the "Show Blocks" command.
+ */
+
+var FCKShowBlockCommand = function( name, defaultState )
+{
+	this.Name = name ;
+	if ( defaultState != undefined )
+		this._SavedState = defaultState ;
+	else
+		this._SavedState = null ;
+}
+
+FCKShowBlockCommand.prototype.Execute = function()
+{
+	var state = this.GetState() ;
+
+	if ( state == FCK_TRISTATE_DISABLED )
+		return ;
+
+	var body = FCK.EditorDocument.body ;
+
+	if ( state == FCK_TRISTATE_ON )
+		body.className = body.className.replace( /(^| )FCK__ShowBlocks/g, '' ) ;
+	else
+		body.className += ' FCK__ShowBlocks' ;
+
+	FCK.Events.FireEvent( 'OnSelectionChange' ) ;
+}
+
+FCKShowBlockCommand.prototype.GetState = function()
+{
+	if ( FCK.EditMode != FCK_EDITMODE_WYSIWYG )
+		return FCK_TRISTATE_DISABLED ;
+
+	// On some cases FCK.EditorDocument.body is not yet available, so try/catch.
+	try
+	{
+		if ( /FCK__ShowBlocks(?:\s|$)/.test( FCK.EditorDocument.body.className ) )
+			return FCK_TRISTATE_ON ;
+	}
+	catch (e)
+	{}
+
+	return FCK_TRISTATE_OFF ;
+}
+
+FCKShowBlockCommand.prototype.SaveState = function()
+{
+	this._SavedState = this.GetState() ;
+}
+
+FCKShowBlockCommand.prototype.RestoreState = function()
+{
+	if ( this._SavedState != null && this.GetState() != this._SavedState )
+		this.Execute() ;
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/commandclasses/fckspellcheckcommand_gecko.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/commandclasses/fckspellcheckcommand_gecko.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/commandclasses/fckspellcheckcommand_gecko.js	(revision 1280)
@@ -0,0 +1,39 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKStyleCommand Class: represents the "Spell Check" command.
+ * (Gecko specific implementation)
+ */
+
+var FCKSpellCheckCommand = function()
+{
+	this.Name = 'SpellCheck' ;
+	this.IsEnabled = ( FCKConfig.SpellChecker == 'SpellerPages' ) ;
+}
+
+FCKSpellCheckCommand.prototype.Execute = function()
+{
+	FCKDialog.OpenDialog( 'FCKDialog_SpellCheck', 'Spell Check', 'dialog/fck_spellerpages.html', 440, 480 ) ;
+}
+
+FCKSpellCheckCommand.prototype.GetState = function()
+{
+	return this.IsEnabled ? FCK_TRISTATE_OFF : FCK_TRISTATE_DISABLED ;
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/commandclasses/fckspellcheckcommand_ie.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/commandclasses/fckspellcheckcommand_ie.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/commandclasses/fckspellcheckcommand_ie.js	(revision 1280)
@@ -0,0 +1,67 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKStyleCommand Class: represents the "Spell Check" command.
+ * (IE specific implementation)
+ */
+
+var FCKSpellCheckCommand = function()
+{
+	this.Name = 'SpellCheck' ;
+	this.IsEnabled = ( FCKConfig.SpellChecker == 'ieSpell' || FCKConfig.SpellChecker == 'SpellerPages' ) ;
+}
+
+FCKSpellCheckCommand.prototype.Execute = function()
+{
+	switch ( FCKConfig.SpellChecker )
+	{
+		case 'ieSpell' :
+			this._RunIeSpell() ;
+			break ;
+
+		case 'SpellerPages' :
+			FCKDialog.OpenDialog( 'FCKDialog_SpellCheck', 'Spell Check', 'dialog/fck_spellerpages.html', 440, 480 ) ;
+			break ;
+	}
+}
+
+FCKSpellCheckCommand.prototype._RunIeSpell = function()
+{
+	try
+	{
+		var oIeSpell = new ActiveXObject( "ieSpell.ieSpellExtension" ) ;
+		oIeSpell.CheckAllLinkedDocuments( FCK.EditorDocument ) ;
+	}
+	catch( e )
+	{
+		if( e.number == -2146827859 )
+		{
+			if ( confirm( FCKLang.IeSpellDownload ) )
+				window.open( FCKConfig.IeSpellDownloadUrl , 'IeSpellDownload' ) ;
+		}
+		else
+			alert( 'Error Loading ieSpell: ' + e.message + ' (' + e.number + ')' ) ;
+	}
+}
+
+FCKSpellCheckCommand.prototype.GetState = function()
+{
+	return this.IsEnabled ? FCK_TRISTATE_OFF : FCK_TRISTATE_DISABLED ;
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/commandclasses/fckstylecommand.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/commandclasses/fckstylecommand.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/commandclasses/fckstylecommand.js	(revision 1280)
@@ -0,0 +1,60 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKStyleCommand Class: represents the "Style" command.
+ */
+
+var FCKStyleCommand = function()
+{}
+
+FCKStyleCommand.prototype =
+{
+	Name : 'Style',
+	
+	Execute : function( styleName, styleComboItem )
+	{
+		FCKUndo.SaveUndoStep() ;
+
+		if ( styleComboItem.Selected )
+			FCK.Styles.RemoveStyle( styleComboItem.Style ) ;
+		else
+			FCK.Styles.ApplyStyle( styleComboItem.Style ) ;
+
+		FCKUndo.SaveUndoStep() ;
+
+		FCK.Focus() ;
+		FCK.Events.FireEvent( 'OnSelectionChange' ) ;
+	},
+
+	GetState : function()
+	{
+		if ( !FCK.EditorDocument )
+			return FCK_TRISTATE_DISABLED ;
+
+		if ( FCKSelection.GetType() == 'Control' )
+		{
+			var el = FCKSelection.GetSelectedElement() ;
+			if ( !el || !FCKStyles.CheckHasObjectStyle( el.nodeName.toLowerCase() ) )
+				return FCK_TRISTATE_DISABLED ;
+		}
+
+		return FCK_TRISTATE_OFF ;
+	}
+};
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/commandclasses/fcktablecommand.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/commandclasses/fcktablecommand.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/commandclasses/fcktablecommand.js	(revision 1280)
@@ -0,0 +1,106 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKPastePlainTextCommand Class: represents the
+ * "Paste as Plain Text" command.
+ */
+
+var FCKTableCommand = function( command )
+{
+	this.Name = command ;
+}
+
+FCKTableCommand.prototype.Execute = function()
+{
+	FCKUndo.SaveUndoStep() ;
+
+	if ( ! FCKBrowserInfo.IsGecko )
+	{
+		switch ( this.Name )
+		{
+			case 'TableMergeRight' : 
+				return FCKTableHandler.MergeRight() ;
+			case 'TableMergeDown' :
+				return FCKTableHandler.MergeDown() ;
+		}
+	}
+
+	switch ( this.Name )
+	{
+		case 'TableInsertRowAfter' :
+			return FCKTableHandler.InsertRow( false ) ;
+		case 'TableInsertRowBefore' :
+			return FCKTableHandler.InsertRow( true ) ;
+		case 'TableDeleteRows' :
+			return FCKTableHandler.DeleteRows() ;
+		case 'TableInsertColumnAfter' :
+			return FCKTableHandler.InsertColumn( false ) ;
+		case 'TableInsertColumnBefore' :
+			return FCKTableHandler.InsertColumn( true ) ;
+		case 'TableDeleteColumns' :
+			return FCKTableHandler.DeleteColumns() ;
+		case 'TableInsertCellAfter' :
+			return FCKTableHandler.InsertCell( null, false ) ;
+		case 'TableInsertCellBefore' :
+			return FCKTableHandler.InsertCell( null, true ) ;
+		case 'TableDeleteCells' :
+			return FCKTableHandler.DeleteCells() ;
+		case 'TableMergeCells' :
+			return FCKTableHandler.MergeCells() ;
+		case 'TableHorizontalSplitCell' :
+			return FCKTableHandler.HorizontalSplitCell() ;
+		case 'TableVerticalSplitCell' :
+			return FCKTableHandler.VerticalSplitCell() ;
+		case 'TableDelete' :
+			return FCKTableHandler.DeleteTable() ;
+		default :
+			return alert( FCKLang.UnknownCommand.replace( /%1/g, this.Name ) ) ;
+	}
+}
+
+FCKTableCommand.prototype.GetState = function()
+{
+	if ( FCK.EditorDocument != null && FCKSelection.HasAncestorNode( 'TABLE' ) )
+	{
+		switch ( this.Name )
+		{
+			case 'TableHorizontalSplitCell' :
+			case 'TableVerticalSplitCell' :
+				if ( FCKTableHandler.GetSelectedCells().length == 1 )
+					return FCK_TRISTATE_OFF ;
+				else
+					return FCK_TRISTATE_DISABLED ;
+			case 'TableMergeCells' :
+				if ( FCKTableHandler.CheckIsSelectionRectangular() 
+						&& FCKTableHandler.GetSelectedCells().length > 1 )
+					return FCK_TRISTATE_OFF ;
+				else
+					return FCK_TRISTATE_DISABLED ;
+			case 'TableMergeRight' :
+				return FCKTableHandler.GetMergeRightTarget() ? FCK_TRISTATE_OFF : FCK_TRISTATE_DISABLED ;
+			case 'TableMergeDown' :
+				return FCKTableHandler.GetMergeDownTarget() ? FCK_TRISTATE_OFF : FCK_TRISTATE_DISABLED ;
+			default :
+				return FCK_TRISTATE_OFF ;
+		}
+	}
+	else
+		return FCK_TRISTATE_DISABLED; 
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/commandclasses/fcktextcolorcommand.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/commandclasses/fcktextcolorcommand.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/commandclasses/fcktextcolorcommand.js	(revision 1280)
@@ -0,0 +1,183 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * FCKTextColorCommand Class: represents the text color comand. It shows the
+ * color selection panel.
+ */
+
+// FCKTextColorCommand Constructor
+//		type: can be 'ForeColor' or 'BackColor'.
+var FCKTextColorCommand = function( type )
+{
+	this.Name = type == 'ForeColor' ? 'TextColor' : 'BGColor' ;
+	this.Type = type ;
+
+	var oWindow ;
+
+	if ( FCKBrowserInfo.IsIE )
+		oWindow = window ;
+	else if ( FCK.ToolbarSet._IFrame )
+		oWindow = FCKTools.GetElementWindow( FCK.ToolbarSet._IFrame ) ;
+	else
+		oWindow = window.parent ;
+
+	this._Panel = new FCKPanel( oWindow ) ;
+	this._Panel.AppendStyleSheet( FCKConfig.SkinPath + 'fck_editor.css' ) ;
+	this._Panel.MainNode.className = 'FCK_Panel' ;
+	this._CreatePanelBody( this._Panel.Document, this._Panel.MainNode ) ;
+
+	FCKTools.DisableSelection( this._Panel.Document.body ) ;
+}
+
+FCKTextColorCommand.prototype.Execute = function( panelX, panelY, relElement )
+{
+	// Show the Color Panel at the desired position.
+	this._Panel.Show( panelX, panelY, relElement ) ;
+}
+
+FCKTextColorCommand.prototype.SetColor = function( color )
+{
+	var style = FCKStyles.GetStyle( '_FCK_' +
+		( this.Type == 'ForeColor' ? 'Color' : 'BackColor' ) ) ;
+
+	if ( !color || color.length == 0 )
+		FCK.Styles.RemoveStyle( style ) ;
+	else
+	{
+		style.SetVariable( 'Color', color ) ;
+		FCKStyles.ApplyStyle( style ) ;
+	}
+
+	FCK.Focus() ;
+	FCK.Events.FireEvent( 'OnSelectionChange' ) ;
+}
+
+FCKTextColorCommand.prototype.GetState = function()
+{
+	return FCK_TRISTATE_OFF ;
+}
+
+function FCKTextColorCommand_OnMouseOver()
+{
+	this.className = 'ColorSelected' ;
+}
+
+function FCKTextColorCommand_OnMouseOut()
+{
+	this.className = 'ColorDeselected' ;
+}
+
+function FCKTextColorCommand_OnClick( ev, command, color )
+{
+	this.className = 'ColorDeselected' ;
+	command.SetColor( color ) ;
+	command._Panel.Hide() ;
+}
+
+function FCKTextColorCommand_AutoOnClick( ev, command )
+{
+	this.className = 'ColorDeselected' ;
+	command.SetColor( '' ) ;
+	command._Panel.Hide() ;
+}
+
+function FCKTextColorCommand_MoreOnClick( ev, command )
+{
+	this.className = 'ColorDeselected' ;
+	command._Panel.Hide() ;
+	FCKDialog.OpenDialog( 'FCKDialog_Color', FCKLang.DlgColorTitle, 'dialog/fck_colorselector.html', 400, 330, FCKTools.Hitch(command, 'SetColor') ) ;
+}
+
+FCKTextColorCommand.prototype._CreatePanelBody = function( targetDocument, targetDiv )
+{
+	function CreateSelectionDiv()
+	{
+		var oDiv = targetDocument.createElement( "DIV" ) ;
+		oDiv.className = 'ColorDeselected' ;
+		FCKTools.AddEventListenerEx( oDiv, 'mouseover', FCKTextColorCommand_OnMouseOver ) ;
+		FCKTools.AddEventListenerEx( oDiv, 'mouseout', FCKTextColorCommand_OnMouseOut ) ;
+
+		return oDiv ;
+	}
+
+	// Create the Table that will hold all colors.
+	var oTable = targetDiv.appendChild( targetDocument.createElement( "TABLE" ) ) ;
+	oTable.className = 'ForceBaseFont' ;		// Firefox 1.5 Bug.
+	oTable.style.tableLayout = 'fixed' ;
+	oTable.cellPadding = 0 ;
+	oTable.cellSpacing = 0 ;
+	oTable.border = 0 ;
+	oTable.width = 150 ;
+
+	var oCell = oTable.insertRow(-1).insertCell(-1) ;
+	oCell.colSpan = 8 ;
+
+	// Create the Button for the "Automatic" color selection.
+	var oDiv = oCell.appendChild( CreateSelectionDiv() ) ;
+	oDiv.innerHTML =
+		'<table cellspacing="0" cellpadding="0" width="100%" border="0">\
+			<tr>\
+				<td><div class="ColorBoxBorder"><div class="ColorBox" style="background-color: #000000"></div></div></td>\
+				<td nowrap width="100%" align="center">' + FCKLang.ColorAutomatic + '</td>\
+			</tr>\
+		</table>' ;
+
+	FCKTools.AddEventListenerEx( oDiv, 'click', FCKTextColorCommand_AutoOnClick, this ) ;
+
+	if ( FCKBrowserInfo.IsSafari )
+		oDiv.style.width = '96%' ;
+
+	// Create an array of colors based on the configuration file.
+	var aColors = FCKConfig.FontColors.toString().split(',') ;
+
+	// Create the colors table based on the array.
+	var iCounter = 0 ;
+	while ( iCounter < aColors.length )
+	{
+		var oRow = oTable.insertRow(-1) ;
+
+		for ( var i = 0 ; i < 8 && iCounter < aColors.length ; i++, iCounter++ )
+		{
+			var colorParts = aColors[iCounter].split('/') ;
+			var colorValue = '#' + colorParts[0] ;
+			var colorName = colorParts[1] || colorValue ;
+
+			oDiv = oRow.insertCell(-1).appendChild( CreateSelectionDiv() ) ;
+			oDiv.innerHTML = '<div class="ColorBoxBorder"><div class="ColorBox" style="background-color: ' + colorValue + '"></div></div>' ;
+
+			FCKTools.AddEventListenerEx( oDiv, 'click', FCKTextColorCommand_OnClick, [ this, colorName ] ) ;
+		}
+	}
+
+	// Create the Row and the Cell for the "More Colors..." button.
+	if ( FCKConfig.EnableMoreFontColors )
+	{
+		oCell = oTable.insertRow(-1).insertCell(-1) ;
+		oCell.colSpan = 8 ;
+
+		oDiv = oCell.appendChild( CreateSelectionDiv() ) ;
+		oDiv.innerHTML = '<table width="100%" cellpadding="0" cellspacing="0" border="0"><tr><td nowrap align="center">' + FCKLang.ColorMoreColors + '</td></tr></table>' ;
+
+		FCKTools.AddEventListenerEx( oDiv, 'click', FCKTextColorCommand_MoreOnClick, this ) ;
+	}
+
+	if ( FCKBrowserInfo.IsSafari )
+		oDiv.style.width = '96%' ;
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/fckconstants.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/fckconstants.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/fckconstants.js	(revision 1280)
@@ -0,0 +1,56 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Defines some constants used by the editor. These constants are also
+ * globally available in the page where the editor is placed.
+ */
+
+// Editor Instance Status.
+var FCK_STATUS_NOTLOADED	= window.parent.FCK_STATUS_NOTLOADED	= 0 ;
+var FCK_STATUS_ACTIVE		= window.parent.FCK_STATUS_ACTIVE		= 1 ;
+var FCK_STATUS_COMPLETE		= window.parent.FCK_STATUS_COMPLETE		= 2 ;
+
+// Tristate Operations.
+var FCK_TRISTATE_OFF		= window.parent.FCK_TRISTATE_OFF		= 0 ;
+var FCK_TRISTATE_ON			= window.parent.FCK_TRISTATE_ON			= 1 ;
+var FCK_TRISTATE_DISABLED	= window.parent.FCK_TRISTATE_DISABLED	= -1 ;
+
+// For unknown values.
+var FCK_UNKNOWN				= window.parent.FCK_UNKNOWN				= -9 ;
+
+// Toolbar Items Style.
+var FCK_TOOLBARITEM_ONLYICON	= window.parent.FCK_TOOLBARITEM_ONLYICON	= 0 ;
+var FCK_TOOLBARITEM_ONLYTEXT	= window.parent.FCK_TOOLBARITEM_ONLYTEXT	= 1 ;
+var FCK_TOOLBARITEM_ICONTEXT	= window.parent.FCK_TOOLBARITEM_ICONTEXT	= 2 ;
+
+// Edit Mode
+var FCK_EDITMODE_WYSIWYG	= window.parent.FCK_EDITMODE_WYSIWYG	= 0 ;
+var FCK_EDITMODE_SOURCE		= window.parent.FCK_EDITMODE_SOURCE		= 1 ;
+
+var FCK_IMAGES_PATH = 'images/' ;		// Check usage.
+var FCK_SPACER_PATH = 'images/spacer.gif' ;
+
+var CTRL	= 1000 ;
+var SHIFT	= 2000 ;
+var ALT		= 4000 ;
+
+var FCK_STYLE_BLOCK		= 0 ;
+var FCK_STYLE_INLINE	= 1 ;
+var FCK_STYLE_OBJECT	= 2 ;
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/fckeditorapi.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/fckeditorapi.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/fckeditorapi.js	(revision 1280)
@@ -0,0 +1,168 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Create the FCKeditorAPI object that is available as a global object in
+ * the page where the editor is placed in.
+ */
+
+var FCKeditorAPI ;
+
+function InitializeAPI()
+{
+	var oParentWindow = window.parent ;
+
+	if ( !( FCKeditorAPI = oParentWindow.FCKeditorAPI ) )
+	{
+		// Make the FCKeditorAPI object available in the parent window. Use
+		// eval so this core runs in the parent's scope and so it will still be
+		// available if the editor instance is removed ("Can't execute code
+		// from a freed script" error).
+
+		// Note: we check the existence of oEditor.GetParentForm because some external 
+		// code (like JSON) can extend the Object prototype and we get then extra oEditor 
+		// objects that aren't really FCKeditor instances.
+		var sScript =
+			'var FCKeditorAPI = {' +
+				'Version : "2.5 SVN",' +
+				'VersionBuild : "16925",' +
+				'__Instances : new Object(),' +
+
+				'GetInstance : function( name )' +
+				'{' +
+					'return this.__Instances[ name ];' +
+				'},' +
+
+				'_FormSubmit : function()' +
+				'{' +
+					'for ( var name in FCKeditorAPI.__Instances )' +
+					'{' +
+						'var oEditor = FCKeditorAPI.__Instances[ name ] ;' +
+						'if ( oEditor.GetParentForm && oEditor.GetParentForm() == this )' +
+							'oEditor.UpdateLinkedField() ;' +
+					'}' +
+					'this._FCKOriginalSubmit() ;' +
+				'},' +
+
+				'_FunctionQueue	: {' +
+					'Functions : new Array(),' +
+					'IsRunning : false,' +
+
+					'Add : function( f )' +
+					'{' +
+						'this.Functions.push( f );' +
+						'if ( !this.IsRunning )' +
+							'this.StartNext();' +
+					'},' +
+
+					'StartNext : function()' +
+					'{' +
+						'var aQueue = this.Functions ;' +
+						'if ( aQueue.length > 0 )' +
+						'{' +
+							'this.IsRunning = true;' +
+							'aQueue[0].call();' +
+						'}' +
+						'else ' +
+							'this.IsRunning = false;' +
+					'},' +
+
+					'Remove : function( f )' +
+					'{' +
+						'var aQueue = this.Functions;' +
+						'var i = 0, fFunc;' +
+						'while( (fFunc = aQueue[ i ]) )' +
+						'{' +
+							'if ( fFunc == f )' +
+								'aQueue.splice( i,1 );' +
+							'i++ ;' +
+						'}' +
+						'this.StartNext();' +
+					'}' +
+				'}' +
+			'}' ;
+
+		// In IE, the "eval" function is not always available (it works with
+		// the JavaScript samples, but not with the ASP ones, for example).
+		// So, let's use the execScript instead.
+		if ( oParentWindow.execScript )
+			oParentWindow.execScript( sScript, 'JavaScript' ) ;
+		else
+		{
+			if ( FCKBrowserInfo.IsGecko10 )
+			{
+				// FF 1.0.4 gives an error with the request bellow. The
+				// following seams to work well.
+				eval.call( oParentWindow, sScript ) ;
+			}
+			else if ( FCKBrowserInfo.IsSafari || FCKBrowserInfo.IsGecko19 )
+			{
+				// oParentWindow.eval in Safari and Gran Paradiso executes in the calling window
+				// environment, instead of the parent one. The following should make it work.
+				var oParentDocument = oParentWindow.document ;
+				var eScript = oParentDocument.createElement('script') ;
+				eScript.appendChild( oParentDocument.createTextNode( sScript ) ) ;
+				oParentDocument.documentElement.appendChild( eScript ) ;
+			}
+			else
+				oParentWindow.eval( sScript ) ;
+		}
+
+		FCKeditorAPI = oParentWindow.FCKeditorAPI ;
+	}
+
+	// Add the current instance to the FCKeditorAPI's instances collection.
+	FCKeditorAPI.__Instances[ FCK.Name ] = FCK ;
+}
+
+// Attach to the form onsubmit event and to the form.submit().
+function _AttachFormSubmitToAPI()
+{
+	// Get the linked field form.
+	var oForm = FCK.GetParentForm() ;
+
+	if ( oForm )
+	{
+		// Attach to the onsubmit event.
+		FCKTools.AddEventListener( oForm, 'submit', FCK.UpdateLinkedField ) ;
+
+		// IE sees oForm.submit function as an 'object'.
+		if ( !oForm._FCKOriginalSubmit && ( typeof( oForm.submit ) == 'function' || ( !oForm.submit.tagName && !oForm.submit.length ) ) )
+		{
+			// Save the original submit.
+			oForm._FCKOriginalSubmit = oForm.submit ;
+
+			// Create our replacement for the submit.
+			oForm.submit = FCKeditorAPI._FormSubmit ;
+		}
+	}
+}
+
+function FCKeditorAPI_Cleanup()
+{
+	if ( ! window.FCKUnloadFlag )
+		return ;
+	delete FCKeditorAPI.__Instances[ FCK.Name ] ;
+}
+function FCKeditorAPI_ConfirmCleanup()
+{
+	window.FCKUnloadFlag = true ;
+}
+FCKTools.AddEventListener( window, 'unload', FCKeditorAPI_Cleanup ) ;	
+FCKTools.AddEventListener( window, 'beforeunload', FCKeditorAPI_ConfirmCleanup) ;
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/fckjscoreextensions.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/fckjscoreextensions.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/fckjscoreextensions.js	(revision 1280)
@@ -0,0 +1,166 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Extensions to the JavaScript Core.
+ *
+ * All custom extensions functions are PascalCased to differ from the standard
+ * camelCased ones.
+ */
+
+String.prototype.Contains = function( textToCheck )
+{
+	return ( this.indexOf( textToCheck ) > -1 ) ;
+}
+
+String.prototype.Equals = function()
+{
+	var aArgs = arguments ;
+
+	// The arguments could also be a single array.
+	if ( aArgs.length == 1 && aArgs[0].pop )
+		aArgs = aArgs[0] ;
+
+	for ( var i = 0 ; i < aArgs.length ; i++ )
+	{
+		if ( this == aArgs[i] )
+			return true ;
+	}
+	return false ;
+}
+
+String.prototype.IEquals = function()
+{
+	var thisUpper = this.toUpperCase() ;
+
+	var aArgs = arguments ;
+
+	// The arguments could also be a single array.
+	if ( aArgs.length == 1 && aArgs[0].pop )
+		aArgs = aArgs[0] ;
+
+	for ( var i = 0 ; i < aArgs.length ; i++ )
+	{
+		if ( thisUpper == aArgs[i].toUpperCase() )
+			return true ;
+	}
+	return false ;
+}
+
+String.prototype.ReplaceAll = function( searchArray, replaceArray )
+{
+	var replaced = this ;
+
+	for ( var i = 0 ; i < searchArray.length ; i++ )
+	{
+		replaced = replaced.replace( searchArray[i], replaceArray[i] ) ;
+	}
+
+	return replaced ;
+}
+
+String.prototype.StartsWith = function( value )
+{
+	return ( this.substr( 0, value.length ) == value ) ;
+}
+
+// Extends the String object, creating a "EndsWith" method on it.
+String.prototype.EndsWith = function( value, ignoreCase )
+{
+	var L1 = this.length ;
+	var L2 = value.length ;
+
+	if ( L2 > L1 )
+		return false ;
+
+	if ( ignoreCase )
+	{
+		var oRegex = new RegExp( value + '$' , 'i' ) ;
+		return oRegex.test( this ) ;
+	}
+	else
+		return ( L2 == 0 || this.substr( L1 - L2, L2 ) == value ) ;
+}
+
+String.prototype.Remove = function( start, length )
+{
+	var s = '' ;
+
+	if ( start > 0 )
+		s = this.substring( 0, start ) ;
+
+	if ( start + length < this.length )
+		s += this.substring( start + length , this.length ) ;
+
+	return s ;
+}
+
+String.prototype.Trim = function()
+{
+	// We are not using \s because we don't want "non-breaking spaces to be caught".
+	return this.replace( /(^[ \t\n\r]*)|([ \t\n\r]*$)/g, '' ) ;
+}
+
+String.prototype.LTrim = function()
+{
+	// We are not using \s because we don't want "non-breaking spaces to be caught".
+	return this.replace( /^[ \t\n\r]*/g, '' ) ;
+}
+
+String.prototype.RTrim = function()
+{
+	// We are not using \s because we don't want "non-breaking spaces to be caught".
+	return this.replace( /[ \t\n\r]*$/g, '' ) ;
+}
+
+String.prototype.ReplaceNewLineChars = function( replacement )
+{
+	return this.replace( /\n/g, replacement ) ;
+}
+
+String.prototype.Replace = function( regExp, replacement, thisObj )
+{
+	if ( typeof replacement == 'function' )
+	{
+		return this.replace( regExp, 
+			function() 
+			{ 
+				return replacement.apply( thisObj || this, arguments ) ; 
+			} ) ;
+	}
+	else
+		return this.replace( regExp, replacement ) ;
+}
+
+Array.prototype.AddItem = function( item )
+{
+	var i = this.length ;
+	this[ i ] = item ;
+	return i ;
+}
+
+Array.prototype.IndexOf = function( value )
+{
+	for ( var i = 0 ; i < this.length ; i++ )
+	{
+		if ( this[i] == value )
+			return i ;
+	}
+	return -1 ;
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/fckscriptloader.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/fckscriptloader.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/fckscriptloader.js	(revision 1280)
@@ -0,0 +1,122 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This is a utility object which can be used to load specific components of
+ * FCKeditor, including all dependencies.
+ */
+
+var FCK_GENERIC = 1 ;
+var FCK_GENERIC_SPECIFIC = 2 ;
+var FCK_SPECIFIC = 3 ;
+
+var FCKScriptLoader = new Object() ;
+FCKScriptLoader.FCKeditorPath = '/fckeditor/' ;
+
+FCKScriptLoader._Scripts = new Object() ;
+FCKScriptLoader._LoadedScripts = new Object() ;
+
+FCKScriptLoader._IsIE = (/msie/).test( navigator.userAgent.toLowerCase() ) ;
+
+FCKScriptLoader.Load = function( scriptName )
+{
+	// Check if the script has already been loaded.
+	if ( scriptName in FCKScriptLoader._LoadedScripts )
+		return ;
+
+	var oScriptInfo = this._Scripts[ scriptName ] ;
+
+	if ( !oScriptInfo )
+	{
+		alert( 'FCKScriptLoader: The script "' + scriptName + '" could not be loaded' ) ;
+		return ;
+	}
+
+	for ( var i = 0 ; i < oScriptInfo.Dependency.length ; i++ )
+	{
+		this.Load( oScriptInfo.Dependency[i] ) ;
+	}
+
+	var sBaseScriptName = oScriptInfo.BasePath + scriptName.toLowerCase() ;
+
+	if ( oScriptInfo.Compatibility == FCK_GENERIC || oScriptInfo.Compatibility == FCK_GENERIC_SPECIFIC )
+		this._LoadScript( sBaseScriptName + '.js' ) ;
+
+	if ( oScriptInfo.Compatibility == FCK_SPECIFIC || oScriptInfo.Compatibility == FCK_GENERIC_SPECIFIC )
+	{
+		if ( this._IsIE )
+			this._LoadScript( sBaseScriptName + '_ie.js' ) ;
+		else
+			this._LoadScript( sBaseScriptName + '_gecko.js' ) ;
+	}
+
+	FCKScriptLoader._LoadedScripts[ scriptName ] = true ;
+}
+
+FCKScriptLoader._LoadScript = function( scriptPathFromSource )
+{
+	document.write( '<script type="text/javascript" src="' + this.FCKeditorPath + 'editor/_source/' + scriptPathFromSource + '"><\/script>' ) ;
+}
+
+FCKScriptLoader.AddScript = function( scriptName, scriptBasePath, dependency, compatibility )
+{
+	this._Scripts[ scriptName ] =
+	{
+		BasePath : scriptBasePath || '',
+		Dependency : dependency || [],
+		Compatibility : compatibility || FCK_GENERIC
+	} ;
+}
+
+/*
+ * ####################################
+ * ### Scripts Definition List
+ */
+
+FCKScriptLoader.AddScript( 'FCKConstants' ) ;
+FCKScriptLoader.AddScript( 'FCKJSCoreExtensions' ) ;
+
+FCKScriptLoader.AddScript( 'FCK_Xhtml10Transitional', '../dtd/' ) ;
+
+FCKScriptLoader.AddScript( 'FCKDataProcessor'	, 'classes/'	, ['FCKConfig','FCKBrowserInfo','FCKRegexLib','FCKXHtml'] ) ;
+FCKScriptLoader.AddScript( 'FCKDocumentFragment', 'classes/'	, ['FCKDomTools'], FCK_SPECIFIC ) ;
+FCKScriptLoader.AddScript( 'FCKDomRange'		, 'classes/'	, ['FCKBrowserInfo','FCKJSCoreExtensions','FCKW3CRange','FCKElementPath','FCKDomTools','FCKTools','FCKDocumentFragment'], FCK_GENERIC_SPECIFIC ) ;
+FCKScriptLoader.AddScript( 'FCKDomRangeIterator', 'classes/'	, ['FCKDomRange','FCKListsLib'], FCK_GENERIC ) ;
+FCKScriptLoader.AddScript( 'FCKElementPath'		, 'classes/'	, ['FCKListsLib'], FCK_GENERIC ) ;
+FCKScriptLoader.AddScript( 'FCKEnterKey'		, 'classes/'	, ['FCKDomRange','FCKDomTools','FCKTools','FCKKeystrokeHandler','FCKListHandler'], FCK_GENERIC ) ;
+FCKScriptLoader.AddScript( 'FCKPanel'			, 'classes/'	, ['FCKBrowserInfo','FCKConfig','FCKTools'], FCK_GENERIC ) ;
+FCKScriptLoader.AddScript( 'FCKImagePreloader'	, 'classes/' ) ;
+FCKScriptLoader.AddScript( 'FCKKeystrokeHandler', 'classes/'	, ['FCKConstants','FCKBrowserInfo','FCKTools'], FCK_GENERIC ) ;
+FCKScriptLoader.AddScript( 'FCKStyle'			, 'classes/'	, ['FCKConstants','FCKDomRange','FCKDomRangeIterator','FCKDomTools','FCKListsLib','FCK_Xhtml10Transitional'], FCK_GENERIC ) ;
+FCKScriptLoader.AddScript( 'FCKW3CRange'		, 'classes/'	, ['FCKDomTools','FCKTools','FCKDocumentFragment'], FCK_GENERIC ) ;
+
+FCKScriptLoader.AddScript( 'FCKBrowserInfo'		, 'internals/'	, ['FCKJSCoreExtensions'] ) ;
+FCKScriptLoader.AddScript( 'FCKCodeFormatter'	, 'internals/' ) ;
+FCKScriptLoader.AddScript( 'FCKConfig'			, 'internals/'	, ['FCKBrowserInfo','FCKConstants'] ) ;
+FCKScriptLoader.AddScript( 'FCKDebug'			, 'internals/'	, ['FCKConfig'] ) ;
+FCKScriptLoader.AddScript( 'FCKDomTools'		, 'internals/'	, ['FCKJSCoreExtensions','FCKBrowserInfo','FCKTools'], FCK_GENERIC ) ;
+FCKScriptLoader.AddScript( 'FCKListsLib'		, 'internals/' ) ;
+FCKScriptLoader.AddScript( 'FCKListHandler'		, 'internals/'	, ['FCKConfig', 'FCKDocumentFragment', 'FCKJSCoreExtensions','FCKDomTools'], FCK_GENERIC ) ;
+FCKScriptLoader.AddScript( 'FCKRegexLib'		, 'internals/' ) ;
+FCKScriptLoader.AddScript( 'FCKStyles'			, 'internals/'	, ['FCKConfig', 'FCKDocumentFragment', 'FCKDomRange','FCKDomTools','FCKElementPath','FCKTools'], FCK_GENERIC ) ;
+FCKScriptLoader.AddScript( 'FCKTools'			, 'internals/'	, ['FCKJSCoreExtensions','FCKBrowserInfo'], FCK_GENERIC_SPECIFIC ) ;
+FCKScriptLoader.AddScript( 'FCKXHtml'			, 'internals/'	, ['FCKBrowserInfo','FCKCodeFormatter','FCKConfig','FCKDomTools','FCKListsLib','FCKRegexLib','FCKTools','FCKXHtmlEntities'], FCK_GENERIC_SPECIFIC ) ;
+FCKScriptLoader.AddScript( 'FCKXHtmlEntities'	, 'internals/'	, ['FCKConfig'] ) ;
+
+// ####################################
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fck.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fck.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fck.js	(revision 1280)
@@ -0,0 +1,1065 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Creation and initialization of the "FCK" object. This is the main object
+ * that represents an editor instance.
+ */
+
+// FCK represents the active editor instance.
+var FCK =
+{
+	Name			: FCKURLParams[ 'InstanceName' ],
+	Status			: FCK_STATUS_NOTLOADED,
+	EditMode		: FCK_EDITMODE_WYSIWYG,
+	Toolbar			: null,
+	HasFocus		: false,
+	DataProcessor	: new FCKDataProcessor(),
+
+	AttachToOnSelectionChange : function( functionPointer )
+	{
+		this.Events.AttachEvent( 'OnSelectionChange', functionPointer ) ;
+	},
+
+	GetLinkedFieldValue : function()
+	{
+		return this.LinkedField.value ;
+	},
+
+	GetParentForm : function()
+	{
+		return this.LinkedField.form ;
+	} ,
+
+	// # START : IsDirty implementation
+
+	StartupValue : '',
+
+	IsDirty : function()
+	{
+		if ( this.EditMode == FCK_EDITMODE_SOURCE )
+			return ( this.StartupValue != this.EditingArea.Textarea.value ) ;
+		else
+			return ( this.StartupValue != this.EditorDocument.body.innerHTML ) ;
+	},
+
+	ResetIsDirty : function()
+	{
+		if ( this.EditMode == FCK_EDITMODE_SOURCE )
+			this.StartupValue = this.EditingArea.Textarea.value ;
+		else if ( this.EditorDocument.body )
+			this.StartupValue = this.EditorDocument.body.innerHTML ;
+	},
+
+	// # END : IsDirty implementation
+
+	StartEditor : function()
+	{
+		this.TempBaseTag = FCKConfig.BaseHref.length > 0 ? '<base href="' + FCKConfig.BaseHref + '" _fcktemp="true"></base>' : '' ;
+
+		// Setup the keystroke handler.
+		var oKeystrokeHandler = FCK.KeystrokeHandler = new FCKKeystrokeHandler() ;
+		oKeystrokeHandler.OnKeystroke = _FCK_KeystrokeHandler_OnKeystroke ;
+
+		// Set the config keystrokes.
+		oKeystrokeHandler.SetKeystrokes( FCKConfig.Keystrokes ) ;
+
+		// In IE7, if the editor tries to access the clipboard by code, a dialog is
+		// shown to the user asking if the application is allowed to access or not.
+		// Due to the IE implementation of it, the KeystrokeHandler will not work
+		//well in this case, so we must leave the pasting keys to have their default behavior.
+		if ( FCKBrowserInfo.IsIE7 )
+		{
+			if ( ( CTRL + 86 /*V*/ ) in oKeystrokeHandler.Keystrokes )
+				oKeystrokeHandler.SetKeystrokes( [ CTRL + 86, true ] ) ;
+
+			if ( ( SHIFT + 45 /*INS*/ ) in oKeystrokeHandler.Keystrokes )
+				oKeystrokeHandler.SetKeystrokes( [ SHIFT + 45, true ] ) ;
+		}
+
+		// Retain default behavior for Ctrl-Backspace. (Bug #362)
+		oKeystrokeHandler.SetKeystrokes( [ CTRL + 8, true ] ) ;
+
+		this.EditingArea = new FCKEditingArea( document.getElementById( 'xEditingArea' ) ) ;
+		this.EditingArea.FFSpellChecker = FCKConfig.FirefoxSpellChecker ;
+
+		// Set the editor's startup contents.
+		this.SetData( this.GetLinkedFieldValue(), true ) ;
+
+		// Tab key handling for source mode.
+		FCKTools.AddEventListener( document, "keydown", this._TabKeyHandler ) ;
+	},
+
+	Focus : function()
+	{
+		FCK.EditingArea.Focus() ;
+	},
+
+	SetStatus : function( newStatus )
+	{
+		this.Status = newStatus ;
+
+		if ( newStatus == FCK_STATUS_ACTIVE )
+		{
+			FCKFocusManager.AddWindow( window, true ) ;
+
+			if ( FCKBrowserInfo.IsIE )
+				FCKFocusManager.AddWindow( window.frameElement, true ) ;
+
+			// Force the focus in the editor.
+			if ( FCKConfig.StartupFocus )
+				FCK.Focus() ;
+		}
+
+		this.Events.FireEvent( 'OnStatusChange', newStatus ) ;
+
+	},
+
+	// Fixes the body by moving all inline and text nodes to appropriate block
+	// elements.
+	FixBody : function()
+	{
+		var sBlockTag = FCKConfig.EnterMode ;
+
+		// In 'br' mode, no fix must be done.
+		if ( sBlockTag != 'p' && sBlockTag != 'div' )
+			return ;
+
+		var oDocument = this.EditorDocument ;
+
+		if ( !oDocument )
+			return ;
+
+		var oBody = oDocument.body ;
+
+		if ( !oBody )
+			return ;
+
+		FCKDomTools.TrimNode( oBody ) ;
+
+		var oNode = oBody.firstChild ;
+		var oNewBlock ;
+
+		while ( oNode )
+		{
+			var bMoveNode = false ;
+
+			switch ( oNode.nodeType )
+			{
+				// Element Node.
+				case 1 :
+					if ( !FCKListsLib.BlockElements[ oNode.nodeName.toLowerCase() ] )
+						bMoveNode = true ;
+					break ;
+
+				// Text Node.
+				case 3 :
+					// Ignore space only or empty text.
+					if ( oNewBlock || oNode.nodeValue.Trim().length > 0 )
+						bMoveNode = true ;
+			}
+
+			if ( bMoveNode )
+			{
+				var oParent = oNode.parentNode ;
+
+				if ( !oNewBlock )
+					oNewBlock = oParent.insertBefore( oDocument.createElement( sBlockTag ), oNode ) ;
+
+				oNewBlock.appendChild( oParent.removeChild( oNode ) ) ;
+
+				oNode = oNewBlock.nextSibling ;
+			}
+			else
+			{
+				if ( oNewBlock )
+				{
+					FCKDomTools.TrimNode( oNewBlock ) ;
+					oNewBlock = null ;
+				}
+				oNode = oNode.nextSibling ;
+			}
+		}
+
+		if ( oNewBlock )
+			FCKDomTools.TrimNode( oNewBlock ) ;
+	},
+
+	GetData : function( format )
+	{
+		// We assume that if the user is in source editing, the editor value must
+		// represent the exact contents of the source, as the user wanted it to be.
+		if ( FCK.EditMode == FCK_EDITMODE_SOURCE )
+				return FCK.EditingArea.Textarea.value ;
+
+		this.FixBody() ;
+
+		var oDoc = FCK.EditorDocument ;
+		if ( !oDoc )
+			return null ;
+
+		var isFullPage = FCKConfig.FullPage ;
+
+		// Call the Data Processor to generate the output data.
+		var data = FCK.DataProcessor.ConvertToDataFormat(
+			isFullPage ? oDoc.documentElement : oDoc.body,
+			!isFullPage,
+			FCKConfig.IgnoreEmptyParagraphValue,
+			format ) ;
+
+		// Restore protected attributes.
+		data = FCK.ProtectEventsRestore( data ) ;
+
+		if ( FCKBrowserInfo.IsIE )
+			data = data.replace( FCKRegexLib.ToReplace, '$1' ) ;
+
+		if ( isFullPage )
+		{
+			if ( FCK.DocTypeDeclaration && FCK.DocTypeDeclaration.length > 0 )
+				data = FCK.DocTypeDeclaration + '\n' + data ;
+
+			if ( FCK.XmlDeclaration && FCK.XmlDeclaration.length > 0 )
+				data = FCK.XmlDeclaration + '\n' + data ;
+		}
+
+		return FCKConfig.ProtectedSource.Revert( data ) ;
+	},
+
+	UpdateLinkedField : function()
+	{
+		var value = FCK.GetXHTML( FCKConfig.FormatOutput ) ;
+
+		if ( FCKConfig.HtmlEncodeOutput )
+			value = FCKTools.HTMLEncode( value ) ;
+
+		FCK.LinkedField.value = value ;
+		FCK.Events.FireEvent( 'OnAfterLinkedFieldUpdate' ) ;
+	},
+
+	RegisteredDoubleClickHandlers : new Object(),
+
+	OnDoubleClick : function( element )
+	{
+		var oHandler = FCK.RegisteredDoubleClickHandlers[ element.tagName ] ;
+		if ( oHandler )
+			oHandler( element ) ;
+	},
+
+	// Register objects that can handle double click operations.
+	RegisterDoubleClickHandler : function( handlerFunction, tag )
+	{
+		FCK.RegisteredDoubleClickHandlers[ tag.toUpperCase() ] = handlerFunction ;
+	},
+
+	OnAfterSetHTML : function()
+	{
+		FCKDocumentProcessor.Process( FCK.EditorDocument ) ;
+		FCKUndo.SaveUndoStep() ;
+
+		FCK.Events.FireEvent( 'OnSelectionChange' ) ;
+		FCK.Events.FireEvent( 'OnAfterSetHTML' ) ;
+	},
+
+	// Saves URLs on links and images on special attributes, so they don't change when
+	// moving around.
+	ProtectUrls : function( html )
+	{
+		// <A> href
+		html = html.replace( FCKRegexLib.ProtectUrlsA	, '$& _fcksavedurl=$1' ) ;
+
+		// <IMG> src
+		html = html.replace( FCKRegexLib.ProtectUrlsImg	, '$& _fcksavedurl=$1' ) ;
+
+		return html ;
+	},
+
+	// Saves event attributes (like onclick) so they don't get executed while
+	// editing.
+	ProtectEvents : function( html )
+	{
+		return html.replace( FCKRegexLib.TagsWithEvent, _FCK_ProtectEvents_ReplaceTags ) ;
+	},
+
+	ProtectEventsRestore : function( html )
+	{
+		return html.replace( FCKRegexLib.ProtectedEvents, _FCK_ProtectEvents_RestoreEvents ) ;
+	},
+
+	ProtectTags : function( html )
+	{
+		var sTags = FCKConfig.ProtectedTags ;
+
+		// IE doesn't support <abbr> and it breaks it. Let's protect it.
+		if ( FCKBrowserInfo.IsIE )
+			sTags += sTags.length > 0 ? '|ABBR|XML|EMBED' : 'ABBR|XML|EMBED' ;
+
+		var oRegex ;
+		if ( sTags.length > 0 )
+		{
+			oRegex = new RegExp( '<(' + sTags + ')(?!\w|:)', 'gi' ) ;
+			html = html.replace( oRegex, '<FCK:$1' ) ;
+
+			oRegex = new RegExp( '<\/(' + sTags + ')>', 'gi' ) ;
+			html = html.replace( oRegex, '<\/FCK:$1>' ) ;
+		}
+
+		// Protect some empty elements. We must do it separately because the
+		// original tag may not contain the closing slash, like <hr>:
+		//		- <meta> tags get executed, so if you have a redirect meta, the
+		//		  content will move to the target page.
+		//		- <hr> may destroy the document structure if not well
+		//		  positioned. The trick is protect it here and restore them in
+		//		  the FCKDocumentProcessor.
+		sTags = 'META' ;
+		if ( FCKBrowserInfo.IsIE )
+			sTags += '|HR' ;
+
+		oRegex = new RegExp( '<((' + sTags + ')(?=\\s|>|/)[\\s\\S]*?)/?>', 'gi' ) ;
+		html = html.replace( oRegex, '<FCK:$1 />' ) ;
+
+		return html ;
+	},
+
+	SetData : function( data, resetIsDirty )
+	{
+		this.EditingArea.Mode = FCK.EditMode ;
+
+		if ( FCK.EditMode == FCK_EDITMODE_WYSIWYG )
+		{
+			// Save the resetIsDirty for later use (async)
+			this._ForceResetIsDirty = ( resetIsDirty === true ) ;
+
+			// Protect parts of the code that must remain untouched (and invisible)
+			// during editing.
+			data = FCKConfig.ProtectedSource.Protect( data ) ;
+
+			// Call the Data Processor to transform the data.
+			data = FCK.DataProcessor.ConvertToHtml( data ) ;
+
+			// Fix for invalid self-closing tags (see #152).
+			data = data.replace( FCKRegexLib.InvalidSelfCloseTags, '$1></$2>' ) ;
+
+			// Protect event attributes (they could get fired in the editing area).
+			data = FCK.ProtectEvents( data ) ;
+
+			// Protect some things from the browser itself.
+			data = FCK.ProtectUrls( data ) ;
+			data = FCK.ProtectTags( data ) ;
+
+			// Insert the base tag (FCKConfig.BaseHref), if not exists in the source.
+			// The base must be the first tag in the HEAD, to get relative
+			// links on styles, for example.
+			if ( FCK.TempBaseTag.length > 0 && !FCKRegexLib.HasBaseTag.test( data ) )
+				data = data.replace( FCKRegexLib.HeadOpener, '$&' + FCK.TempBaseTag ) ;
+
+			// Build the HTML for the additional things we need on <head>.
+			var sHeadExtra = '' ;
+
+			if ( !FCKConfig.FullPage )
+				sHeadExtra += _FCK_GetEditorAreaStyleTags() ;
+
+			if ( FCKBrowserInfo.IsIE )
+				sHeadExtra += FCK._GetBehaviorsStyle() ;
+			else if ( FCKConfig.ShowBorders )
+				sHeadExtra += '<link href="' + FCKConfig.FullBasePath + 'css/fck_showtableborders_gecko.css" rel="stylesheet" type="text/css" _fcktemp="true" />' ;
+
+			sHeadExtra += '<link href="' + FCKConfig.FullBasePath + 'css/fck_internal.css" rel="stylesheet" type="text/css" _fcktemp="true" />' ;
+
+			// Attention: do not change it before testing it well (sample07)!
+			// This is tricky... if the head ends with <meta ... content type>,
+			// Firefox will break. But, it works if we place our extra stuff as
+			// the last elements in the HEAD.
+			data = data.replace( FCKRegexLib.HeadCloser, sHeadExtra + '$&' ) ;
+
+			// Load the HTML in the editing area.
+			this.EditingArea.OnLoad = _FCK_EditingArea_OnLoad ;
+			this.EditingArea.Start( data ) ;
+		}
+		else
+		{
+			// Remove the references to the following elements, as the editing area
+			// IFRAME will be removed.
+			FCK.EditorWindow	= null ;
+			FCK.EditorDocument	= null ;
+			FCKDomTools.PaddingNode = null ;
+
+			this.EditingArea.OnLoad = null ;
+			this.EditingArea.Start( data ) ;
+
+			// Enables the context menu in the textarea.
+			this.EditingArea.Textarea._FCKShowContextMenu = true ;
+
+			// Removes the enter key handler.
+			FCK.EnterKeyHandler = null ;
+
+			if ( resetIsDirty )
+				this.ResetIsDirty() ;
+
+			// Listen for keystroke events.
+			FCK.KeystrokeHandler.AttachToElement( this.EditingArea.Textarea ) ;
+
+			this.EditingArea.Textarea.focus() ;
+
+			FCK.Events.FireEvent( 'OnAfterSetHTML' ) ;
+		}
+
+		if ( FCKBrowserInfo.IsGecko )
+			window.onresize() ;
+	},
+
+	// For the FocusManager
+	HasFocus : false,
+
+
+	// This collection is used by the browser specific implementations to tell
+	// which named commands must be handled separately.
+	RedirectNamedCommands : new Object(),
+
+	ExecuteNamedCommand : function( commandName, commandParameter, noRedirect, noSaveUndo )
+	{
+		if ( !noSaveUndo )
+			FCKUndo.SaveUndoStep() ;
+
+		if ( !noRedirect && FCK.RedirectNamedCommands[ commandName ] != null )
+			FCK.ExecuteRedirectedNamedCommand( commandName, commandParameter ) ;
+		else
+		{
+			FCK.Focus() ;
+			FCK.EditorDocument.execCommand( commandName, false, commandParameter ) ;
+			FCK.Events.FireEvent( 'OnSelectionChange' ) ;
+		}
+
+		if ( !noSaveUndo )
+		FCKUndo.SaveUndoStep() ;
+	},
+
+	GetNamedCommandState : function( commandName )
+	{
+		try
+		{
+
+			// Bug #50 : Safari never returns positive state for the Paste command, override that.
+			if ( FCKBrowserInfo.IsSafari && FCK.EditorWindow && commandName.IEquals( 'Paste' ) )
+				return FCK_TRISTATE_OFF ;
+
+			if ( !FCK.EditorDocument.queryCommandEnabled( commandName ) )
+				return FCK_TRISTATE_DISABLED ;
+			else
+			{
+				return FCK.EditorDocument.queryCommandState( commandName ) ? FCK_TRISTATE_ON : FCK_TRISTATE_OFF ;
+			}
+		}
+		catch ( e )
+		{
+			return FCK_TRISTATE_OFF ;
+		}
+	},
+
+	GetNamedCommandValue : function( commandName )
+	{
+		var sValue = '' ;
+		var eState = FCK.GetNamedCommandState( commandName ) ;
+
+		if ( eState == FCK_TRISTATE_DISABLED )
+			return null ;
+
+		try
+		{
+			sValue = this.EditorDocument.queryCommandValue( commandName ) ;
+		}
+		catch(e) {}
+
+		return sValue ? sValue : '' ;
+	},
+
+	Paste : function( _callListenersOnly )
+	{
+		// First call 'OnPaste' listeners.
+		if ( FCK.Status != FCK_STATUS_COMPLETE || !FCK.Events.FireEvent( 'OnPaste' ) )
+			return false ;
+
+		// Then call the default implementation.
+		return _callListenersOnly || FCK._ExecPaste() ;
+	},
+
+	PasteFromWord : function()
+	{
+		FCKDialog.OpenDialog( 'FCKDialog_Paste', FCKLang.PasteFromWord, 'dialog/fck_paste.html', 400, 330, 'Word' ) ;
+	},
+
+	Preview : function()
+	{
+		var iWidth	= FCKConfig.ScreenWidth * 0.8 ;
+		var iHeight	= FCKConfig.ScreenHeight * 0.7 ;
+		var iLeft	= ( FCKConfig.ScreenWidth - iWidth ) / 2 ;
+		var oWindow = window.open( '', null, 'toolbar=yes,location=no,status=yes,menubar=yes,scrollbars=yes,resizable=yes,width=' + iWidth + ',height=' + iHeight + ',left=' + iLeft ) ;
+
+		var sHTML ;
+
+		if ( FCKConfig.FullPage )
+		{
+			if ( FCK.TempBaseTag.length > 0 )
+				sHTML = FCK.TempBaseTag + FCK.GetXHTML() ;
+			else
+				sHTML = FCK.GetXHTML() ;
+		}
+		else
+		{
+			sHTML =
+				FCKConfig.DocType +
+				'<html dir="' + FCKConfig.ContentLangDirection + '">' +
+				'<head>' +
+				FCK.TempBaseTag +
+				'<title>' + FCKLang.Preview + '</title>' +
+				_FCK_GetEditorAreaStyleTags() +
+				'</head><body' + FCKConfig.GetBodyAttributes() + '>' +
+				FCK.GetXHTML() +
+				'</body></html>' ;
+		}
+
+		oWindow.document.write( sHTML );
+		oWindow.document.close();
+	},
+
+	SwitchEditMode : function( noUndo )
+	{
+		var bIsWysiwyg = ( FCK.EditMode == FCK_EDITMODE_WYSIWYG ) ;
+
+		// Save the current IsDirty state, so we may restore it after the switch.
+		var bIsDirty = FCK.IsDirty() ;
+
+		var sHtml ;
+
+		// Update the HTML in the view output to show.
+		if ( bIsWysiwyg )
+		{
+			FCKCommands.GetCommand( 'ShowBlocks' ).SaveState() ;
+			if ( !noUndo && FCKBrowserInfo.IsIE )
+				FCKUndo.SaveUndoStep() ;
+
+			sHtml = FCK.GetXHTML( FCKConfig.FormatSource ) ;
+
+			if ( sHtml == null )
+				return false ;
+		}
+		else
+			sHtml = this.EditingArea.Textarea.value ;
+
+		FCK.EditMode = bIsWysiwyg ? FCK_EDITMODE_SOURCE : FCK_EDITMODE_WYSIWYG ;
+
+		FCK.SetData( sHtml, !bIsDirty ) ;
+
+		// Set the Focus.
+		FCK.Focus() ;
+
+		// Update the toolbar (Running it directly causes IE to fail).
+		FCKTools.RunFunction( FCK.ToolbarSet.RefreshModeState, FCK.ToolbarSet ) ;
+
+		return true ;
+	},
+
+	InsertElement : function( element )
+	{
+		// The parameter may be a string (element name), so transform it in an element.
+		if ( typeof element == 'string' )
+			element = this.EditorDocument.createElement( element ) ;
+
+		var elementName = element.nodeName.toLowerCase() ;
+
+		// Create a range for the selection. V3 will have a new selection
+		// object that may internally supply this feature.
+		var range = new FCKDomRange( this.EditorWindow ) ;
+
+		if ( FCKListsLib.BlockElements[ elementName ] != null )
+		{
+			range.SplitBlock() ;
+			range.InsertNode( element ) ;
+
+			var next = FCKDomTools.GetNextSourceElement( element, false, null, [ 'hr','br','param','img','area','input' ] ) ;
+
+			// Be sure that we have something after the new element, so we can move the cursor there.
+			if ( !next && FCKConfig.EnterMode != 'br')
+			{
+				next = this.EditorDocument.body.appendChild( this.EditorDocument.createElement( FCKConfig.EnterMode ) ) ;
+
+				if ( FCKBrowserInfo.IsGeckoLike )
+					FCKTools.AppendBogusBr( next ) ;
+			}
+
+			if ( FCKListsLib.EmptyElements[ elementName ] == null )
+				range.MoveToElementEditStart( element ) ;
+			else if ( next )
+				range.MoveToElementEditStart( next ) ;
+			else
+				range.MoveToPosition( element, 4 ) ;
+
+			if ( FCKBrowserInfo.IsGecko )
+			{
+				if ( next )
+					next.scrollIntoView( false ) ;
+				element.scrollIntoView( false ) ;
+			}
+		}
+		else
+		{
+			// Delete the current selection and insert the node.
+			range.MoveToSelection() ;
+			range.DeleteContents() ;
+			range.InsertNode( element ) ;
+
+			// Move the selection right after the new element.
+			// DISCUSSION: Should we select the element instead?
+			range.SetStart( element, 4 ) ;
+			range.SetEnd( element, 4 ) ;
+		}
+
+		range.Select() ;
+		range.Release() ;
+
+		// REMOVE IT: The focus should not really be set here. It is up to the
+		// calling code to reset the focus if needed.
+		this.Focus() ;
+
+		return element ;
+	},
+
+	_InsertBlockElement : function( blockElement )
+	{
+	},
+
+	_IsFunctionKey : function( keyCode )
+	{
+		// keys that are captured but do not change editor contents
+		if ( keyCode >= 16 && keyCode <= 20 )
+			// shift, ctrl, alt, pause, capslock
+			return true ;
+		if ( keyCode == 27 || ( keyCode >= 33 && keyCode <= 40 ) )
+			// esc, page up, page down, end, home, left, up, right, down
+			return true ;
+		if ( keyCode == 45 )
+			// insert, no effect on FCKeditor, yet
+			return true ;
+		return false ;
+	},
+
+	_KeyDownListener : function( evt )
+	{
+		if (! evt)
+			evt = FCK.EditorWindow.event ;
+		if ( FCK.EditorWindow )
+		{
+			if ( !FCK._IsFunctionKey(evt.keyCode) // do not capture function key presses, like arrow keys or shift/alt/ctrl
+					&& !(evt.ctrlKey || evt.metaKey) // do not capture Ctrl hotkeys, as they have their snapshot capture logic
+					&& !(evt.keyCode == 46) ) // do not capture Del, it has its own capture logic in fckenterkey.js
+				FCK._KeyDownUndo() ;
+		}
+		return true ;
+	},
+
+	_KeyDownUndo : function()
+	{
+		if ( !FCKUndo.Typing )
+		{
+			FCKUndo.SaveUndoStep() ;
+			FCKUndo.Typing = true ;
+			FCK.Events.FireEvent( "OnSelectionChange" ) ;
+		}
+
+		FCKUndo.TypesCount++ ;
+		FCKUndo.Changed = 1 ;
+
+		if ( FCKUndo.TypesCount > FCKUndo.MaxTypes )
+		{
+			FCKUndo.TypesCount = 0 ;
+			FCKUndo.SaveUndoStep() ;
+		}
+	},
+
+	_TabKeyHandler : function( evt )
+	{
+		if ( ! evt )
+			evt = window.event ;
+
+		var keystrokeValue = evt.keyCode ;
+
+		// Pressing <Tab> in source mode should produce a tab space in the text area, not
+		// changing the focus to something else.
+		if ( keystrokeValue == 9 && FCK.EditMode != FCK_EDITMODE_WYSIWYG )
+		{
+			if ( FCKBrowserInfo.IsIE )
+			{
+				var range = document.selection.createRange() ;
+				if ( range.parentElement() != FCK.EditingArea.Textarea )
+					return true ;
+				range.text = '\t' ;
+				range.select() ;
+			}
+			else
+			{
+				var a = [] ;
+				var el = FCK.EditingArea.Textarea ;
+				var selStart = el.selectionStart ;
+				var selEnd = el.selectionEnd ;
+				a.push( el.value.substr(0, selStart ) ) ;
+				a.push( '\t' ) ;
+				a.push( el.value.substr( selEnd ) ) ;
+				el.value = a.join( '' ) ;
+				el.setSelectionRange( selStart + 1, selStart + 1 ) ;
+			}
+
+			if ( evt.preventDefault )
+				return evt.preventDefault() ;
+
+			return evt.returnValue = false ;
+		}
+
+		return true ;
+	}
+} ;
+
+FCK.Events = new FCKEvents( FCK ) ;
+
+// DEPRECATED in favor or "GetData".
+FCK.GetHTML	= FCK.GetXHTML = FCK.GetData ;
+
+// DEPRECATED in favor of "SetData".
+FCK.SetHTML = FCK.SetData ;
+
+// InsertElementAndGetIt and CreateElement are Deprecated : returns the same value as InsertElement.
+FCK.InsertElementAndGetIt = FCK.CreateElement = FCK.InsertElement ;
+
+// Replace all events attributes (like onclick).
+function _FCK_ProtectEvents_ReplaceTags( tagMatch )
+{
+	return tagMatch.replace( FCKRegexLib.EventAttributes, _FCK_ProtectEvents_ReplaceEvents ) ;
+}
+
+// Replace an event attribute with its respective __fckprotectedatt attribute.
+// The original event markup will be encoded and saved as the value of the new
+// attribute.
+function _FCK_ProtectEvents_ReplaceEvents( eventMatch, attName )
+{
+	return ' ' + attName + '_fckprotectedatt="' + encodeURIComponent( eventMatch ) + '"' ;
+}
+
+function _FCK_ProtectEvents_RestoreEvents( match, encodedOriginal )
+{
+	return decodeURIComponent( encodedOriginal ) ;
+}
+
+function _FCK_MouseEventsListener( evt )
+{
+	if ( ! evt )
+		evt = window.event ;
+	if ( evt.type == 'mousedown' )
+		FCK.MouseDownFlag = true ;
+	else if ( evt.type == 'mouseup' )
+		FCK.MouseDownFlag = false ;
+	else if ( evt.type == 'mousemove' )
+		FCK.Events.FireEvent( 'OnMouseMove', evt ) ;
+}
+
+function _FCK_PaddingNodeListener()
+{
+	if ( FCKConfig.EnterMode.IEquals( 'br' ) )
+		return ;
+	FCKDomTools.EnforcePaddingNode( FCK.EditorDocument, FCKConfig.EnterMode ) ;
+
+	if ( ! FCKBrowserInfo.IsIE && FCKDomTools.PaddingNode )
+	{
+		var sel = FCK.EditorWindow.getSelection() ;
+		if ( sel && sel.rangeCount == 1 )
+		{
+			var range = sel.getRangeAt( 0 ) ;
+			if ( range.collapsed && range.startContainer == FCK.EditorDocument.body && range.startOffset == 0 )
+			{
+				range.selectNodeContents( FCKDomTools.PaddingNode ) ;
+				range.collapse( true ) ;
+				sel.removeAllRanges() ;
+				sel.addRange( range ) ;
+			}
+		}
+	}
+}
+
+function _FCK_EditingArea_OnLoad()
+{
+	// Get the editor's window and document (DOM)
+	FCK.EditorWindow	= FCK.EditingArea.Window ;
+	FCK.EditorDocument	= FCK.EditingArea.Document ;
+
+	FCK.InitializeBehaviors() ;
+	FCK.AttachToOnSelectionChange( _FCK_PaddingNodeListener ) ;
+
+	// Listen for mousedown and mouseup events for tracking drag and drops.
+	FCK.MouseDownFlag = false ;
+	FCKTools.AddEventListener( FCK.EditorDocument, 'mousemove', _FCK_MouseEventsListener ) ;
+	FCKTools.AddEventListener( FCK.EditorDocument, 'mousedown', _FCK_MouseEventsListener ) ;
+	FCKTools.AddEventListener( FCK.EditorDocument, 'mouseup', _FCK_MouseEventsListener ) ;
+
+	// Most of the CTRL key combos do not work under Safari for onkeydown and onkeypress (See #1119)
+	// But we can use the keyup event to override some of these...
+	if ( FCKBrowserInfo.IsSafari )
+	{
+		var undoFunc = function( evt )
+		{
+			if ( ! ( evt.ctrlKey || evt.metaKey ) )
+				return ;
+			if ( FCK.EditMode != FCK_EDITMODE_WYSIWYG )
+				return ;
+			switch ( evt.keyCode )
+			{
+				case 89:
+					FCKUndo.Redo() ;
+					break ;
+				case 90:
+					FCKUndo.Undo() ;
+					break ;
+			}
+		}
+
+		FCKTools.AddEventListener( FCK.EditorDocument, 'keyup', undoFunc ) ;
+	}
+
+	// Create the enter key handler
+	FCK.EnterKeyHandler = new FCKEnterKey( FCK.EditorWindow, FCKConfig.EnterMode, FCKConfig.ShiftEnterMode, FCKConfig.TabSpaces ) ;
+
+	// Listen for keystroke events.
+	FCK.KeystrokeHandler.AttachToElement( FCK.EditorDocument ) ;
+
+	if ( FCK._ForceResetIsDirty )
+		FCK.ResetIsDirty() ;
+
+	// This is a tricky thing for IE. In some cases, even if the cursor is
+	// blinking in the editing, the keystroke handler doesn't catch keyboard
+	// events. We must activate the editing area to make it work. (#142).
+	if ( FCKBrowserInfo.IsIE && FCK.HasFocus )
+		FCK.EditorDocument.body.setActive() ;
+
+	FCK.OnAfterSetHTML() ;
+
+	// Restore show blocks status.
+	FCKCommands.GetCommand( 'ShowBlocks' ).RestoreState() ;
+
+	// Check if it is not a startup call, otherwise complete the startup.
+	if ( FCK.Status != FCK_STATUS_NOTLOADED )
+		return ;
+
+	if ( FCKConfig.Debug )
+		FCKDebug._GetWindow() ;
+
+	FCK.SetStatus( FCK_STATUS_ACTIVE ) ;
+}
+
+function _FCK_GetEditorAreaStyleTags()
+{
+	var sTags = '' ;
+	var aCSSs = FCKConfig.EditorAreaCSS ;
+	var sStyles = FCKConfig.EditorAreaStyles ;
+
+	for ( var i = 0 ; i < aCSSs.length ; i++ )
+		sTags += '<link href="' + aCSSs[i] + '" rel="stylesheet" type="text/css" />' ;
+
+	if ( sStyles && sStyles.length > 0 )
+		sTags += "<style>" + sStyles + "</style>" ;
+
+	return sTags ;
+}
+
+function _FCK_KeystrokeHandler_OnKeystroke( keystroke, keystrokeValue )
+{
+	if ( FCK.Status != FCK_STATUS_COMPLETE )
+		return false ;
+
+	if ( FCK.EditMode == FCK_EDITMODE_WYSIWYG )
+	{
+		switch ( keystrokeValue )
+		{
+			case 'Paste' :
+				return !FCK.Paste() ;
+
+			case 'Cut' :
+				FCKUndo.SaveUndoStep() ;
+				return false ;
+		}
+	}
+	else
+	{
+		// In source mode, some actions must have their default behavior.
+		if ( keystrokeValue.Equals( 'Paste', 'Undo', 'Redo', 'SelectAll', 'Cut' ) )
+			return false ;
+	}
+
+	// The return value indicates if the default behavior of the keystroke must
+	// be cancelled. Let's do that only if the Execute() call explicitly returns "false".
+	var oCommand = FCK.Commands.GetCommand( keystrokeValue ) ;
+	return ( oCommand.Execute.apply( oCommand, FCKTools.ArgumentsToArray( arguments, 2 ) ) !== false ) ;
+}
+
+// Set the FCK.LinkedField reference to the field that will be used to post the
+// editor data.
+(function()
+{
+	// There is a bug on IE... getElementById returns any META tag that has the
+	// name set to the ID you are looking for. So the best way in to get the array
+	// by names and look for the correct one.
+	// As ASP.Net generates a ID that is different from the Name, we must also
+	// look for the field based on the ID (the first one is the ID).
+
+	var oDocument = window.parent.document ;
+
+	// Try to get the field using the ID.
+	var eLinkedField = oDocument.getElementById( FCK.Name ) ;
+
+	var i = 0;
+	while ( eLinkedField || i == 0 )
+	{
+		if ( eLinkedField && eLinkedField.tagName.toLowerCase().Equals( 'input', 'textarea' ) )
+		{
+			FCK.LinkedField = eLinkedField ;
+			break ;
+		}
+
+		eLinkedField = oDocument.getElementsByName( FCK.Name )[i++] ;
+	}
+})() ;
+
+var FCKTempBin =
+{
+	Elements : new Array(),
+
+	AddElement : function( element )
+	{
+		var iIndex = this.Elements.length ;
+		this.Elements[ iIndex ] = element ;
+		return iIndex ;
+	},
+
+	RemoveElement : function( index )
+	{
+		var e = this.Elements[ index ] ;
+		this.Elements[ index ] = null ;
+		return e ;
+	},
+
+	Reset : function()
+	{
+		var i = 0 ;
+		while ( i < this.Elements.length )
+			this.Elements[ i++ ] = null ;
+		this.Elements.length = 0 ;
+	}
+} ;
+
+
+
+// # Focus Manager: Manages the focus in the editor.
+var FCKFocusManager = FCK.FocusManager =
+{
+	IsLocked : false,
+
+	AddWindow : function( win, sendToEditingArea )
+	{
+		var oTarget ;
+
+		if ( FCKBrowserInfo.IsIE )
+			oTarget = win.nodeType == 1 ? win : win.frameElement ? win.frameElement : win.document ;
+		else if ( FCKBrowserInfo.IsSafari )
+			oTarget = win ;
+		else
+			oTarget = win.document ;
+
+		FCKTools.AddEventListener( oTarget, 'blur', FCKFocusManager_Win_OnBlur ) ;
+		FCKTools.AddEventListener( oTarget, 'focus', sendToEditingArea ? FCKFocusManager_Win_OnFocus_Area : FCKFocusManager_Win_OnFocus ) ;
+	},
+
+	RemoveWindow : function( win )
+	{
+		if ( FCKBrowserInfo.IsIE )
+			oTarget = win.nodeType == 1 ? win : win.frameElement ? win.frameElement : win.document ;
+		else
+			oTarget = win.document ;
+
+		FCKTools.RemoveEventListener( oTarget, 'blur', FCKFocusManager_Win_OnBlur ) ;
+		FCKTools.RemoveEventListener( oTarget, 'focus', FCKFocusManager_Win_OnFocus_Area ) ;
+		FCKTools.RemoveEventListener( oTarget, 'focus', FCKFocusManager_Win_OnFocus ) ;
+	},
+
+	Lock : function()
+	{
+		this.IsLocked = true ;
+	},
+
+	Unlock : function()
+	{
+		if ( this._HasPendingBlur )
+			FCKFocusManager._Timer = window.setTimeout( FCKFocusManager_FireOnBlur, 100 ) ;
+
+		this.IsLocked = false ;
+	},
+
+	_ResetTimer : function()
+	{
+		this._HasPendingBlur = false ;
+
+		if ( this._Timer )
+		{
+			window.clearTimeout( this._Timer ) ;
+			delete this._Timer ;
+		}
+	}
+} ;
+
+function FCKFocusManager_Win_OnBlur()
+{
+	if ( typeof(FCK) != 'undefined' && FCK.HasFocus )
+	{
+		FCKFocusManager._ResetTimer() ;
+		FCKFocusManager._Timer = window.setTimeout( FCKFocusManager_FireOnBlur, 100 ) ;
+	}
+}
+
+function FCKFocusManager_FireOnBlur()
+{
+	if ( FCKFocusManager.IsLocked )
+		FCKFocusManager._HasPendingBlur = true ;
+	else
+	{
+		FCK.HasFocus = false ;
+		FCK.Events.FireEvent( "OnBlur" ) ;
+	}
+}
+
+function FCKFocusManager_Win_OnFocus_Area()
+{
+	FCK.Focus() ;
+	FCKFocusManager_Win_OnFocus() ;
+}
+
+function FCKFocusManager_Win_OnFocus()
+{
+	FCKFocusManager._ResetTimer() ;
+
+	if ( !FCK.HasFocus && !FCKFocusManager.IsLocked )
+	{
+		FCK.HasFocus = true ;
+		FCK.Events.FireEvent( "OnFocus" ) ;
+	}
+}
+
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fck_contextmenu.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fck_contextmenu.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fck_contextmenu.js	(revision 1280)
@@ -0,0 +1,325 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Defines the FCK.ContextMenu object that is responsible for all
+ * Context Menu operations in the editing area.
+ */
+
+FCK.ContextMenu = new Object() ;
+FCK.ContextMenu.Listeners = new Array() ;
+
+FCK.ContextMenu.RegisterListener = function( listener )
+{
+	if ( listener )
+		this.Listeners.push( listener ) ;
+}
+
+function FCK_ContextMenu_Init()
+{
+	var oInnerContextMenu = FCK.ContextMenu._InnerContextMenu = new FCKContextMenu( FCKBrowserInfo.IsIE ? window : window.parent, FCKLang.Dir ) ;
+	oInnerContextMenu.CtrlDisable	= FCKConfig.BrowserContextMenuOnCtrl ;
+	oInnerContextMenu.OnBeforeOpen	= FCK_ContextMenu_OnBeforeOpen ;
+	oInnerContextMenu.OnItemClick	= FCK_ContextMenu_OnItemClick ;
+
+	// Get the registering function.
+	var oMenu = FCK.ContextMenu ;
+
+	// Register all configured context menu listeners.
+	for ( var i = 0 ; i < FCKConfig.ContextMenu.length ; i++ )
+		oMenu.RegisterListener( FCK_ContextMenu_GetListener( FCKConfig.ContextMenu[i] ) ) ;
+}
+
+function FCK_ContextMenu_GetListener( listenerName )
+{
+	switch ( listenerName )
+	{
+		case 'Generic' :
+			return {
+			AddItems : function( menu, tag, tagName )
+			{
+				menu.AddItem( 'Cut'		, FCKLang.Cut	, 7, FCKCommands.GetCommand( 'Cut' ).GetState() == FCK_TRISTATE_DISABLED ) ;
+				menu.AddItem( 'Copy'	, FCKLang.Copy	, 8, FCKCommands.GetCommand( 'Copy' ).GetState() == FCK_TRISTATE_DISABLED ) ;
+				menu.AddItem( 'Paste'	, FCKLang.Paste	, 9, FCKCommands.GetCommand( 'Paste' ).GetState() == FCK_TRISTATE_DISABLED ) ;
+			}} ;
+
+		case 'Table' :
+			return {
+			AddItems : function( menu, tag, tagName )
+			{
+				var bIsTable	= ( tagName == 'TABLE' ) ;
+				var bIsCell		= ( !bIsTable && FCKSelection.HasAncestorNode( 'TABLE' ) ) ;
+
+				if ( bIsCell )
+				{
+					menu.AddSeparator() ;
+					var oItem = menu.AddItem( 'Cell'	, FCKLang.CellCM ) ;
+					oItem.AddItem( 'TableInsertCellBefore'	, FCKLang.InsertCellBefore, 69 ) ; 
+					oItem.AddItem( 'TableInsertCellAfter'	, FCKLang.InsertCellAfter, 58 ) ;
+					oItem.AddItem( 'TableDeleteCells'	, FCKLang.DeleteCells, 59 ) ;
+					if ( FCKBrowserInfo.IsGecko )
+						oItem.AddItem( 'TableMergeCells'	, FCKLang.MergeCells, 60,
+							FCKCommands.GetCommand( 'TableMergeCells' ).GetState() == FCK_TRISTATE_DISABLED ) ;
+					else
+					{
+						oItem.AddItem( 'TableMergeRight'	, FCKLang.MergeRight, 60, 
+							FCKCommands.GetCommand( 'TableMergeRight' ).GetState() == FCK_TRISTATE_DISABLED ) ;
+						oItem.AddItem( 'TableMergeDown'		, FCKLang.MergeDown, 60,
+							FCKCommands.GetCommand( 'TableMergeDown' ).GetState() == FCK_TRISTATE_DISABLED ) ;
+					}
+					oItem.AddItem( 'TableHorizontalSplitCell'	, FCKLang.HorizontalSplitCell, 61,
+						FCKCommands.GetCommand( 'TableHorizontalSplitCell' ).GetState() == FCK_TRISTATE_DISABLED ) ;
+					oItem.AddItem( 'TableVerticalSplitCell'	, FCKLang.VerticalSplitCell, 61,
+						FCKCommands.GetCommand( 'TableVerticalSplitCell' ).GetState() == FCK_TRISTATE_DISABLED ) ;
+					oItem.AddSeparator() ;
+					oItem.AddItem( 'TableCellProp'		, FCKLang.CellProperties, 57,
+						FCKCommands.GetCommand( 'TableCellProp' ).GetState() == FCK_TRISTATE_DISABLED ) ;
+
+					menu.AddSeparator() ;
+					oItem = menu.AddItem( 'Row'			, FCKLang.RowCM ) ;
+					oItem.AddItem( 'TableInsertRowBefore'		, FCKLang.InsertRowBefore, 70 ) ;
+					oItem.AddItem( 'TableInsertRowAfter'		, FCKLang.InsertRowAfter, 62 ) ;
+					oItem.AddItem( 'TableDeleteRows'	, FCKLang.DeleteRows, 63 ) ;
+
+					menu.AddSeparator() ;
+					oItem = menu.AddItem( 'Column'		, FCKLang.ColumnCM ) ;
+					oItem.AddItem( 'TableInsertColumnBefore', FCKLang.InsertColumnBefore, 71 ) ;
+					oItem.AddItem( 'TableInsertColumnAfter'	, FCKLang.InsertColumnAfter, 64 ) ;
+					oItem.AddItem( 'TableDeleteColumns'	, FCKLang.DeleteColumns, 65 ) ;
+				}
+
+				if ( bIsTable || bIsCell )
+				{
+					menu.AddSeparator() ;
+					menu.AddItem( 'TableDelete'			, FCKLang.TableDelete ) ;
+					menu.AddItem( 'TableProp'			, FCKLang.TableProperties, 39 ) ;
+				}
+			}} ;
+
+		case 'Link' :
+			return {
+			AddItems : function( menu, tag, tagName )
+			{
+				var bInsideLink = ( tagName == 'A' || FCKSelection.HasAncestorNode( 'A' ) ) ;
+
+				if ( bInsideLink || FCK.GetNamedCommandState( 'Unlink' ) != FCK_TRISTATE_DISABLED )
+				{
+					// Go up to the anchor to test its properties
+					var oLink = FCKSelection.MoveToAncestorNode( 'A' ) ;
+					var bIsAnchor = ( oLink && oLink.name.length > 0 && oLink.href.length == 0 ) ;
+					// If it isn't a link then don't add the Link context menu
+					if ( bIsAnchor )
+						return ;
+
+					menu.AddSeparator() ;
+					if ( bInsideLink )
+						menu.AddItem( 'Link', FCKLang.EditLink		, 34 ) ;
+					menu.AddItem( 'Unlink'	, FCKLang.RemoveLink	, 35 ) ;
+				}
+			}} ;
+
+		case 'Image' :
+			return {
+			AddItems : function( menu, tag, tagName )
+			{
+				if ( tagName == 'IMG' && !tag.getAttribute( '_fckfakelement' ) )
+				{
+					menu.AddSeparator() ;
+					menu.AddItem( 'Image', FCKLang.ImageProperties, 37 ) ;
+				}
+			}} ;
+
+		case 'Anchor' :
+			return {
+			AddItems : function( menu, tag, tagName )
+			{
+				// Go up to the anchor to test its properties
+				var oLink = FCKSelection.MoveToAncestorNode( 'A' ) ;
+				var bIsAnchor = ( oLink && oLink.name.length > 0 ) ;
+
+				if ( bIsAnchor || ( tagName == 'IMG' && tag.getAttribute( '_fckanchor' ) ) )
+				{
+					menu.AddSeparator() ;
+					menu.AddItem( 'Anchor', FCKLang.AnchorProp, 36 ) ;
+					menu.AddItem( 'AnchorDelete', FCKLang.AnchorDelete ) ;
+				}
+			}} ;
+
+		case 'Flash' :
+			return {
+			AddItems : function( menu, tag, tagName )
+			{
+				if ( tagName == 'IMG' && tag.getAttribute( '_fckflash' ) )
+				{
+					menu.AddSeparator() ;
+					menu.AddItem( 'Flash', FCKLang.FlashProperties, 38 ) ;
+				}
+			}} ;
+
+		case 'Form' :
+			return {
+			AddItems : function( menu, tag, tagName )
+			{
+				if ( FCKSelection.HasAncestorNode('FORM') )
+				{
+					menu.AddSeparator() ;
+					menu.AddItem( 'Form', FCKLang.FormProp, 48 ) ;
+				}
+			}} ;
+
+		case 'Checkbox' :
+			return {
+			AddItems : function( menu, tag, tagName )
+			{
+				if ( tagName == 'INPUT' && tag.type == 'checkbox' )
+				{
+					menu.AddSeparator() ;
+					menu.AddItem( 'Checkbox', FCKLang.CheckboxProp, 49 ) ;
+				}
+			}} ;
+
+		case 'Radio' :
+			return {
+			AddItems : function( menu, tag, tagName )
+			{
+				if ( tagName == 'INPUT' && tag.type == 'radio' )
+				{
+					menu.AddSeparator() ;
+					menu.AddItem( 'Radio', FCKLang.RadioButtonProp, 50 ) ;
+				}
+			}} ;
+
+		case 'TextField' :
+			return {
+			AddItems : function( menu, tag, tagName )
+			{
+				if ( tagName == 'INPUT' && ( tag.type == 'text' || tag.type == 'password' ) )
+				{
+					menu.AddSeparator() ;
+					menu.AddItem( 'TextField', FCKLang.TextFieldProp, 51 ) ;
+				}
+			}} ;
+
+		case 'HiddenField' :
+			return {
+			AddItems : function( menu, tag, tagName )
+			{
+				if ( tagName == 'IMG' && tag.getAttribute( '_fckinputhidden' ) )
+				{
+					menu.AddSeparator() ;
+					menu.AddItem( 'HiddenField', FCKLang.HiddenFieldProp, 56 ) ;
+				}
+			}} ;
+
+		case 'ImageButton' :
+			return {
+			AddItems : function( menu, tag, tagName )
+			{
+				if ( tagName == 'INPUT' && tag.type == 'image' )
+				{
+					menu.AddSeparator() ;
+					menu.AddItem( 'ImageButton', FCKLang.ImageButtonProp, 55 ) ;
+				}
+			}} ;
+
+		case 'Button' :
+			return {
+			AddItems : function( menu, tag, tagName )
+			{
+				if ( tagName == 'INPUT' && ( tag.type == 'button' || tag.type == 'submit' || tag.type == 'reset' ) )
+				{
+					menu.AddSeparator() ;
+					menu.AddItem( 'Button', FCKLang.ButtonProp, 54 ) ;
+				}
+			}} ;
+
+		case 'Select' :
+			return {
+			AddItems : function( menu, tag, tagName )
+			{
+				if ( tagName == 'SELECT' )
+				{
+					menu.AddSeparator() ;
+					menu.AddItem( 'Select', FCKLang.SelectionFieldProp, 53 ) ;
+				}
+			}} ;
+
+		case 'Textarea' :
+			return {
+			AddItems : function( menu, tag, tagName )
+			{
+				if ( tagName == 'TEXTAREA' )
+				{
+					menu.AddSeparator() ;
+					menu.AddItem( 'Textarea', FCKLang.TextareaProp, 52 ) ;
+				}
+			}} ;
+
+		case 'BulletedList' :
+			return {
+			AddItems : function( menu, tag, tagName )
+			{
+				if ( FCKSelection.HasAncestorNode('UL') )
+				{
+					menu.AddSeparator() ;
+					menu.AddItem( 'BulletedList', FCKLang.BulletedListProp, 27 ) ;
+				}
+			}} ;
+
+		case 'NumberedList' :
+			return {
+			AddItems : function( menu, tag, tagName )
+			{
+				if ( FCKSelection.HasAncestorNode('OL') )
+				{
+					menu.AddSeparator() ;
+					menu.AddItem( 'NumberedList', FCKLang.NumberedListProp, 26 ) ;
+				}
+			}} ;
+	}
+	return null ;
+}
+
+function FCK_ContextMenu_OnBeforeOpen()
+{
+	// Update the UI.
+	FCK.Events.FireEvent( 'OnSelectionChange' ) ;
+
+	// Get the actual selected tag (if any).
+	var oTag, sTagName ;
+
+	// The extra () is to avoid a warning with strict error checking. This is ok.
+	if ( (oTag = FCKSelection.GetSelectedElement()) )
+		sTagName = oTag.tagName ;
+
+	// Cleanup the current menu items.
+	var oMenu = FCK.ContextMenu._InnerContextMenu ;
+	oMenu.RemoveAllItems() ;
+
+	// Loop through the listeners.
+	var aListeners = FCK.ContextMenu.Listeners ;
+	for ( var i = 0 ; i < aListeners.length ; i++ )
+		aListeners[i].AddItems( oMenu, oTag, sTagName ) ;
+}
+
+function FCK_ContextMenu_OnItemClick( item )
+{
+	FCK.Focus() ;
+	FCKCommands.GetCommand( item.Name ).Execute() ;
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fck_gecko.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fck_gecko.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fck_gecko.js	(revision 1280)
@@ -0,0 +1,458 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Creation and initialization of the "FCK" object. This is the main
+ * object that represents an editor instance.
+ * (Gecko specific implementations)
+ */
+
+FCK.Description = "FCKeditor for Gecko Browsers" ;
+
+FCK.InitializeBehaviors = function()
+{
+	// When calling "SetData", the editing area IFRAME gets a fixed height. So we must recalculate it.
+	if ( FCKBrowserInfo.IsGecko )		// Not for Safari/Opera.
+		Window_OnResize() ;
+
+	FCKFocusManager.AddWindow( this.EditorWindow ) ;
+
+	this.ExecOnSelectionChange = function()
+	{
+		FCK.Events.FireEvent( "OnSelectionChange" ) ;
+	}
+
+	this._ExecDrop = function( evt )
+	{
+		if ( FCK.MouseDownFlag )
+		{
+			FCK.MouseDownFlag = false ;
+			return ;
+		}
+		if ( FCKConfig.ForcePasteAsPlainText )
+		{
+			if ( evt.dataTransfer )
+			{
+				var text = evt.dataTransfer.getData( 'Text' ) ;
+				text = FCKTools.HTMLEncode( text ) ;
+				text = FCKTools.ProcessLineBreaks( window, FCKConfig, text ) ;
+				FCK.InsertHtml( text ) ;
+			}
+			else if ( FCKConfig.ShowDropDialog )
+				FCK.PasteAsPlainText() ;
+		}
+		else if ( FCKConfig.ShowDropDialog )
+			FCKDialog.OpenDialog( 'FCKDialog_Paste', FCKLang.Paste, 'dialog/fck_paste.html', 400, 330, 'Security' ) ;
+		evt.preventDefault() ;
+		evt.stopPropagation() ;
+	}
+
+	this._ExecCheckCaret = function( evt )
+	{
+		if ( FCK.EditMode != FCK_EDITMODE_WYSIWYG )
+			return ;
+
+		if ( evt.type == 'keypress' )
+		{
+			var keyCode = evt.keyCode ;
+			// ignore if positioning key is not pressed.
+			// left or up arrow keys need to be processed as well, since <a> links can be expanded in Gecko's editor
+			// when the caret moved left or up from another block element below.
+			if ( keyCode < 33 || keyCode > 40 )
+				return ;
+		}
+
+		var blockEmptyStop = function( node )
+		{
+			if ( node.nodeType != 1 )
+				return false ;
+			var tag = node.tagName.toLowerCase() ;
+			return ( FCKListsLib.BlockElements[tag] || FCKListsLib.EmptyElements[tag] ) ;
+		}
+
+		var moveCursor = function()
+		{
+			var selection = FCK.EditorWindow.getSelection() ;
+			var range = selection.getRangeAt(0) ;
+			if ( ! range || ! range.collapsed )
+				return ;
+
+			var node = range.endContainer ;
+
+			// only perform the patched behavior if we're at the end of a text node.
+			if ( node.nodeType != 3 )
+				return ;
+
+			if ( node.nodeValue.length != range.endOffset )
+				return ;
+
+			// only perform the patched behavior if we're in an <a> tag, or the End key is pressed.
+			var parentTag = node.parentNode.tagName.toLowerCase() ;
+			if ( ! (  parentTag == 'a' ||
+					( ! ( FCKListsLib.BlockElements[parentTag] || FCKListsLib.NonEmptyBlockElements[parentTag] )
+					  && keyCode == 35 ) ) )
+				return ;
+
+			// our caret has moved to just after the last character of a text node under an unknown tag, how to proceed?
+			// first, see if there are other text nodes by DFS walking from this text node.
+			// 	- if the DFS has scanned all nodes under my parent, then go the next step.
+			//	- if there is a text node after me but still under my parent, then do nothing and return.
+			var nextTextNode = FCKTools.GetNextTextNode( node, node.parentNode, blockEmptyStop ) ;
+			if ( nextTextNode )
+				return ;
+
+			// we're pretty sure we need to move the caret forcefully from here.
+			range = FCK.EditorDocument.createRange() ;
+
+			nextTextNode = FCKTools.GetNextTextNode( node, node.parentNode.parentNode, blockEmptyStop ) ;
+			if ( nextTextNode )
+			{
+				// Opera thinks the dummy empty text node we append beyond the end of <a> nodes occupies a caret
+				// position. So if the user presses the left key and we reset the caret position here, the user
+				// wouldn't be able to go back.
+				if ( FCKBrowserInfo.IsOpera && keyCode == 37 )
+					return ;
+
+				// now we want to get out of our current parent node, adopt the next parent, and move the caret to
+				// the appropriate text node under our new parent.
+				// our new parent might be our current parent's siblings if we are lucky.
+				range.setStart( nextTextNode, 0 ) ;
+				range.setEnd( nextTextNode, 0 ) ;
+			}
+			else
+			{
+				// no suitable next siblings under our grandparent! what to do next?
+				while ( node.parentNode
+					&& node.parentNode != FCK.EditorDocument.body
+					&& node.parentNode != FCK.EditorDocument.documentElement
+					&& node == node.parentNode.lastChild
+					&& ( ! FCKListsLib.BlockElements[node.parentNode.tagName.toLowerCase()] ) )
+					node = node.parentNode ;
+
+
+				if ( FCKListsLib.BlockElements[ parentTag ]
+						|| FCKListsLib.EmptyElements[ parentTag ]
+						|| node == FCK.EditorDocument.body )
+				{
+					// if our parent is a block node, move to the end of our parent.
+					range.setStart( node, node.childNodes.length ) ;
+					range.setEnd( node, node.childNodes.length ) ;
+				}
+				else
+				{
+					// things are a little bit more interesting if our parent is not a block node
+					// due to the weired ways how Gecko's caret acts...
+					var stopNode = node.nextSibling ;
+
+					// find out the next block/empty element at our grandparent, we'll
+					// move the caret just before it.
+					while ( stopNode )
+					{
+						if ( stopNode.nodeType != 1 )
+						{
+							stopNode = stopNode.nextSibling ;
+							continue ;
+						}
+
+						var stopTag = stopNode.tagName.toLowerCase() ;
+						if ( FCKListsLib.BlockElements[stopTag] || FCKListsLib.EmptyElements[stopTag] )
+							break ;
+						stopNode = stopNode.nextSibling ;
+					}
+
+					// note that the dummy marker below is NEEDED, otherwise the caret's behavior will
+					// be broken in Gecko.
+					var marker = FCK.EditorDocument.createTextNode( '' ) ;
+					if ( stopNode )
+						node.parentNode.insertBefore( marker, stopNode ) ;
+					else
+						node.parentNode.appendChild( marker ) ;
+					range.setStart( marker, 0 ) ;
+					range.setEnd( marker, 0 ) ;
+				}
+			}
+
+			selection.removeAllRanges() ;
+			selection.addRange( range ) ;
+			FCK.Events.FireEvent( "OnSelectionChange" ) ;
+		}
+
+		setTimeout( moveCursor, 1 ) ;
+	}
+
+	this._FillEmptyBlock = function( emptyBlockNode )
+	{
+		if ( ! emptyBlockNode || emptyBlockNode.nodeType != 1 )
+			return ;
+		var nodeTag = emptyBlockNode.tagName.toLowerCase() ;
+		if ( nodeTag != 'p' && nodeTag != 'div' )
+			return ;
+		if ( emptyBlockNode.firstChild )
+			return ;
+		FCKTools.AppendBogusBr( emptyBlockNode ) ;
+	}
+
+	this._ExecCheckEmptyBlock = function()
+	{
+		FCK._FillEmptyBlock( FCK.EditorDocument.body.firstChild ) ;
+		var sel = FCK.EditorWindow.getSelection() ;
+		if ( !sel || sel.rangeCount < 1 )
+			return ;
+		var range = sel.getRangeAt( 0 );
+		FCK._FillEmptyBlock( range.startContainer ) ;
+	}
+
+	this.ExecOnSelectionChangeTimer = function()
+	{
+		if ( FCK.LastOnChangeTimer )
+			window.clearTimeout( FCK.LastOnChangeTimer ) ;
+
+		FCK.LastOnChangeTimer = window.setTimeout( FCK.ExecOnSelectionChange, 100 ) ;
+	}
+
+	this.EditorDocument.addEventListener( 'mouseup', this.ExecOnSelectionChange, false ) ;
+
+	// On Gecko, firing the "OnSelectionChange" event on every key press started to be too much
+	// slow. So, a timer has been implemented to solve performance issues when typing to quickly.
+	this.EditorDocument.addEventListener( 'keyup', this.ExecOnSelectionChangeTimer, false ) ;
+
+	this._DblClickListener = function( e )
+	{
+		FCK.OnDoubleClick( e.target ) ;
+		e.stopPropagation() ;
+	}
+	this.EditorDocument.addEventListener( 'dblclick', this._DblClickListener, true ) ;
+
+	// Record changes for the undo system when there are key down events.
+	this.EditorDocument.addEventListener( 'keydown', this._KeyDownListener, false ) ;
+
+	// Hooks for data object drops
+	if ( FCKBrowserInfo.IsGecko )
+	{
+		this.EditorWindow.addEventListener( 'dragdrop', this._ExecDrop, true ) ;
+	}
+	else if ( FCKBrowserInfo.IsSafari )
+	{
+		var cancelHandler = function( evt ){ if ( ! FCK.MouseDownFlag ) evt.returnValue = false ; }
+		this.EditorDocument.addEventListener( 'dragenter', cancelHandler, true ) ;
+		this.EditorDocument.addEventListener( 'dragover', cancelHandler, true ) ;
+		this.EditorDocument.addEventListener( 'drop', this._ExecDrop, true ) ;
+		this.EditorDocument.addEventListener( 'mousedown',
+			function( ev )
+			{
+				var element = ev.srcElement ;
+
+				if ( element.nodeName.IEquals( 'IMG', 'HR', 'INPUT', 'TEXTAREA', 'SELECT' ) )
+				{
+					FCKSelection.SelectNode( element ) ;
+				}
+			}, true ) ;
+
+		this.EditorDocument.addEventListener( 'mouseup',
+			function( ev )
+			{
+				if ( ev.srcElement.nodeName.IEquals( 'INPUT', 'TEXTAREA', 'SELECT' ) )
+					ev.preventDefault()
+			}, true ) ;
+
+		this.EditorDocument.addEventListener( 'click',
+			function( ev )
+			{
+				if ( ev.srcElement.nodeName.IEquals( 'INPUT', 'TEXTAREA', 'SELECT' ) )
+					ev.preventDefault()
+			}, true ) ;
+	}
+
+	// Kludge for buggy Gecko caret positioning logic (Bug #393 and #1056)
+	if ( FCKBrowserInfo.IsGecko || FCKBrowserInfo.IsOpera )
+	{
+		this.EditorDocument.addEventListener( 'keypress', this._ExecCheckCaret, false ) ;
+		this.EditorDocument.addEventListener( 'click', this._ExecCheckCaret, false ) ;
+	}
+	if ( FCKBrowserInfo.IsGecko )
+		this.AttachToOnSelectionChange( this._ExecCheckEmptyBlock ) ;
+
+	// Reset the context menu.
+	FCK.ContextMenu._InnerContextMenu.SetMouseClickWindow( FCK.EditorWindow ) ;
+	FCK.ContextMenu._InnerContextMenu.AttachToElement( FCK.EditorDocument ) ;
+}
+
+FCK.MakeEditable = function()
+{
+	this.EditingArea.MakeEditable() ;
+}
+
+// Disable the context menu in the editor (outside the editing area).
+function Document_OnContextMenu( e )
+{
+	if ( !e.target._FCKShowContextMenu )
+		e.preventDefault() ;
+}
+document.oncontextmenu = Document_OnContextMenu ;
+
+// GetNamedCommandState overload for Gecko.
+FCK._BaseGetNamedCommandState = FCK.GetNamedCommandState ;
+FCK.GetNamedCommandState = function( commandName )
+{
+	switch ( commandName )
+	{
+		case 'Unlink' :
+			return FCKSelection.HasAncestorNode('A') ? FCK_TRISTATE_OFF : FCK_TRISTATE_DISABLED ;
+		default :
+			return FCK._BaseGetNamedCommandState( commandName ) ;
+	}
+}
+
+// Named commands to be handled by this browsers specific implementation.
+FCK.RedirectNamedCommands =
+{
+	Print	: true,
+	Paste	: true,
+
+	Cut	: true,
+	Copy	: true
+} ;
+
+// ExecuteNamedCommand overload for Gecko.
+FCK.ExecuteRedirectedNamedCommand = function( commandName, commandParameter )
+{
+	switch ( commandName )
+	{
+		case 'Print' :
+			FCK.EditorWindow.print() ;
+			break ;
+		case 'Paste' :
+			try
+			{
+				// Force the paste dialog for Safari (#50).
+				if ( FCKBrowserInfo.IsSafari )
+					throw '' ;
+
+				if ( FCK.Paste() )
+					FCK.ExecuteNamedCommand( 'Paste', null, true ) ;
+			}
+			catch (e)	{ FCKDialog.OpenDialog( 'FCKDialog_Paste', FCKLang.Paste, 'dialog/fck_paste.html', 400, 330, 'Security' ) ; }
+			break ;
+		case 'Cut' :
+			try			{ FCK.ExecuteNamedCommand( 'Cut', null, true ) ; }
+			catch (e)	{ alert(FCKLang.PasteErrorCut) ; }
+			break ;
+		case 'Copy' :
+			try			{ FCK.ExecuteNamedCommand( 'Copy', null, true ) ; }
+			catch (e)	{ alert(FCKLang.PasteErrorCopy) ; }
+			break ;
+		default :
+			FCK.ExecuteNamedCommand( commandName, commandParameter ) ;
+	}
+}
+
+FCK._ExecPaste = function()
+{
+	// Save a snapshot for undo before actually paste the text
+	FCKUndo.SaveUndoStep() ;
+
+	if ( FCKConfig.ForcePasteAsPlainText )
+	{
+		FCK.PasteAsPlainText() ;
+		return false ;
+	}
+
+	/* For now, the AutoDetectPasteFromWord feature is IE only. */
+	return true ;
+}
+
+//**
+// FCK.InsertHtml: Inserts HTML at the current cursor location. Deletes the
+// selected content if any.
+FCK.InsertHtml = function( html )
+{
+	html = FCKConfig.ProtectedSource.Protect( html ) ;
+	html = FCK.ProtectEvents( html ) ;
+	html = FCK.ProtectUrls( html ) ;
+	html = FCK.ProtectTags( html ) ;
+
+	// Save an undo snapshot first.
+	FCKUndo.SaveUndoStep() ;
+
+	// Insert the HTML code.
+	this.EditorDocument.execCommand( 'inserthtml', false, html ) ;
+	this.Focus() ;
+
+	// For some strange reason the SaveUndoStep() call doesn't activate the undo button at the first InsertHtml() call.
+	this.Events.FireEvent( "OnSelectionChange" ) ;
+}
+
+FCK.PasteAsPlainText = function()
+{
+	// TODO: Implement the "Paste as Plain Text" code.
+
+	// If the function is called immediately Firefox 2 does automatically paste the contents as soon as the new dialog is created
+	// so we run it in a Timeout and the paste event can be cancelled
+	FCKTools.RunFunction( FCKDialog.OpenDialog, FCKDialog, ['FCKDialog_Paste', FCKLang.PasteAsText, 'dialog/fck_paste.html', 400, 330, 'PlainText'] ) ;
+
+/*
+	var sText = FCKTools.HTMLEncode( clipboardData.getData("Text") ) ;
+	sText = sText.replace( /\n/g, '<BR>' ) ;
+	this.InsertHtml( sText ) ;
+*/
+}
+/*
+FCK.PasteFromWord = function()
+{
+	// TODO: Implement the "Paste as Plain Text" code.
+
+	FCKDialog.OpenDialog( 'FCKDialog_Paste', FCKLang.PasteFromWord, 'dialog/fck_paste.html', 400, 330, 'Word' ) ;
+
+//	FCK.CleanAndPaste( FCK.GetClipboardHTML() ) ;
+}
+*/
+FCK.GetClipboardHTML = function()
+{
+	return '' ;
+}
+
+FCK.CreateLink = function( url, noUndo )
+{
+	// Creates the array that will be returned. It contains one or more created links (see #220).
+	var aCreatedLinks = new Array() ;
+
+	FCK.ExecuteNamedCommand( 'Unlink', null, false, !!noUndo ) ;
+
+	if ( url.length > 0 )
+	{
+		// Generate a temporary name for the link.
+		var sTempUrl = 'javascript:void(0);/*' + ( new Date().getTime() ) + '*/' ;
+
+		// Use the internal "CreateLink" command to create the link.
+		FCK.ExecuteNamedCommand( 'CreateLink', sTempUrl, false, !!noUndo ) ;
+
+		// Retrieve the just created links using XPath.
+		var oLinksInteractor = this.EditorDocument.evaluate("//a[@href='" + sTempUrl + "']", this.EditorDocument.body, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null) ;
+
+		// Add all links to the returning array.
+		for ( var i = 0 ; i < oLinksInteractor.snapshotLength ; i++ )
+		{
+			var oLink = oLinksInteractor.snapshotItem( i ) ;
+			oLink.href = url ;
+			aCreatedLinks.push( oLink ) ;
+		}
+	}
+
+	return aCreatedLinks ;
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fck_ie.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fck_ie.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fck_ie.js	(revision 1280)
@@ -0,0 +1,420 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Creation and initialization of the "FCK" object. This is the main
+ * object that represents an editor instance.
+ * (IE specific implementations)
+ */
+
+FCK.Description = "FCKeditor for Internet Explorer 5.5+" ;
+
+FCK._GetBehaviorsStyle = function()
+{
+	if ( !FCK._BehaviorsStyle )
+	{
+		var sBasePath = FCKConfig.FullBasePath ;
+		var sTableBehavior = '' ;
+		var sStyle ;
+
+		// The behaviors should be pointed using the FullBasePath to avoid security
+		// errors when using a different BaseHref.
+		sStyle = '<style type="text/css" _fcktemp="true">' ;
+
+		if ( FCKConfig.ShowBorders )
+			sTableBehavior = 'url(' + sBasePath + 'css/behaviors/showtableborders.htc)' ;
+
+		// Disable resize handlers.
+		sStyle += 'INPUT,TEXTAREA,SELECT,.FCK__Anchor,.FCK__PageBreak,.FCK__InputHidden' ;
+
+		if ( FCKConfig.DisableObjectResizing )
+		{
+			sStyle += ',IMG' ;
+			sTableBehavior += ' url(' + sBasePath + 'css/behaviors/disablehandles.htc)' ;
+		}
+
+		sStyle += ' { behavior: url(' + sBasePath + 'css/behaviors/disablehandles.htc) ; }' ;
+
+		if ( sTableBehavior.length > 0 )
+			sStyle += 'TABLE { behavior: ' + sTableBehavior + ' ; }' ;
+
+		sStyle += '</style>' ;
+		FCK._BehaviorsStyle = sStyle ;
+	}
+
+	return FCK._BehaviorsStyle ;
+}
+
+function Doc_OnMouseUp()
+{
+	if ( FCK.EditorWindow.event.srcElement.tagName == 'HTML' )
+	{
+		FCK.Focus() ;
+		FCK.EditorWindow.event.cancelBubble	= true ;
+		FCK.EditorWindow.event.returnValue	= false ;
+	}
+}
+
+function Doc_OnPaste()
+{
+	var body = FCK.EditorDocument.body ;
+	
+	body.detachEvent( 'onpaste', Doc_OnPaste ) ;
+
+	var ret = FCK.Paste( !FCKConfig.ForcePasteAsPlainText && !FCKConfig.AutoDetectPasteFromWord ) ;
+
+	body.attachEvent( 'onpaste', Doc_OnPaste ) ;
+	
+	return ret ;
+}
+
+function Doc_OnDblClick()
+{
+	FCK.OnDoubleClick( FCK.EditorWindow.event.srcElement ) ;
+	FCK.EditorWindow.event.cancelBubble = true ;
+}
+
+function Doc_OnSelectionChange()
+{
+	FCK.Events.FireEvent( "OnSelectionChange" ) ;
+}
+
+function Doc_OnDrop()
+{
+	if ( FCK.MouseDownFlag )
+	{
+		FCK.MouseDownFlag = false ;
+		return ;
+	}
+	var evt = FCK.EditorWindow.event ;
+	if ( FCKConfig.ForcePasteAsPlainText )
+	{
+		if ( FCK._CheckIsPastingEnabled() || FCKConfig.ShowDropDialog )
+			FCK.PasteAsPlainText( evt.dataTransfer.getData( 'Text' ) ) ;
+	}
+	else
+	{
+		if ( FCKConfig.ShowDropDialog ) 
+			FCKTools.RunFunction( FCKDialog.OpenDialog, 
+				FCKDialog, ['FCKDialog_Paste', FCKLang.Paste, 'dialog/fck_paste.html', 400, 330, 'Security'] ) ;
+	}
+	evt.returnValue = false ;
+	evt.cancelBubble = true ;
+}
+
+FCK.InitializeBehaviors = function( dontReturn )
+{
+	// Set the focus to the editable area when clicking in the document area.
+	// TODO: The cursor must be positioned at the end.
+	this.EditorDocument.attachEvent( 'onmouseup', Doc_OnMouseUp ) ;
+
+	// Intercept pasting operations
+	this.EditorDocument.body.attachEvent( 'onpaste', Doc_OnPaste ) ;
+
+	// Intercept drop operations
+	this.EditorDocument.body.attachEvent( 'ondrop', Doc_OnDrop ) ;
+
+	// Reset the context menu.
+	FCK.ContextMenu._InnerContextMenu.AttachToElement( FCK.EditorDocument.body ) ;
+
+	this.EditorDocument.attachEvent("onkeydown", FCK._KeyDownListener ) ;
+
+	this.EditorDocument.attachEvent("ondblclick", Doc_OnDblClick ) ;
+	
+	// Catch cursor selection changes.
+	this.EditorDocument.attachEvent("onselectionchange", Doc_OnSelectionChange ) ;
+}
+
+FCK.InsertHtml = function( html )
+{
+	html = FCKConfig.ProtectedSource.Protect( html ) ;
+	html = FCK.ProtectEvents( html ) ;
+	html = FCK.ProtectUrls( html ) ;
+	html = FCK.ProtectTags( html ) ;
+
+//	FCK.Focus() ;
+	FCK.EditorWindow.focus() ;
+
+	FCKUndo.SaveUndoStep() ;
+
+	// Gets the actual selection.
+	var oSel = FCK.EditorDocument.selection ;
+
+	// Deletes the actual selection contents.
+	if ( oSel.type.toLowerCase() == 'control' )
+		oSel.clear() ;
+
+	// Using the following trick, any comment in the beginning of the HTML will
+	// be preserved.
+	html = '<span id="__fakeFCKRemove__">&nbsp;</span>' + html ;
+
+	// Insert the HTML.
+	oSel.createRange().pasteHTML( html ) ;
+
+	// Remove the fake node
+	FCK.EditorDocument.getElementById('__fakeFCKRemove__').removeNode( true ) ;
+
+	FCKDocumentProcessor.Process( FCK.EditorDocument ) ;
+
+	// For some strange reason the SaveUndoStep() call doesn't activate the undo button at the first InsertHtml() call.
+	this.Events.FireEvent( "OnSelectionChange" ) ;
+}
+
+FCK.SetInnerHtml = function( html )		// IE Only
+{
+	var oDoc = FCK.EditorDocument ;
+	// Using the following trick, any comment in the beginning of the HTML will
+	// be preserved.
+	oDoc.body.innerHTML = '<div id="__fakeFCKRemove__">&nbsp;</div>' + html ;
+	oDoc.getElementById('__fakeFCKRemove__').removeNode( true ) ;
+}
+
+function FCK_PreloadImages()
+{
+	var oPreloader = new FCKImagePreloader() ;
+
+	// Add the configured images.
+	oPreloader.AddImages( FCKConfig.PreloadImages ) ;
+
+	// Add the skin icons strip.
+	oPreloader.AddImages( FCKConfig.SkinPath + 'fck_strip.gif' ) ;
+
+	oPreloader.OnComplete = LoadToolbarSetup ;
+	oPreloader.Start() ;
+}
+
+// Disable the context menu in the editor (outside the editing area).
+function Document_OnContextMenu()
+{
+	return ( event.srcElement._FCKShowContextMenu == true ) ;
+}
+document.oncontextmenu = Document_OnContextMenu ;
+
+function FCK_Cleanup()
+{
+	this.LinkedField = null ;
+	this.EditorWindow = null ;
+	this.EditorDocument = null ;
+}
+
+FCK._ExecPaste = function()
+{
+	// As we call ExecuteNamedCommand('Paste'), it would enter in a loop. So, let's use a semaphore.
+	if ( FCK._PasteIsRunning )
+		return true ;
+
+	if ( FCKConfig.ForcePasteAsPlainText )
+	{
+		FCK.PasteAsPlainText() ;
+		return false ;
+	}
+
+	var sHTML = FCK._CheckIsPastingEnabled( true ) ;
+
+	if ( sHTML === false )
+		FCKTools.RunFunction( FCKDialog.OpenDialog, FCKDialog, ['FCKDialog_Paste', FCKLang.Paste, 'dialog/fck_paste.html', 400, 330, 'Security'] ) ;
+	else
+	{
+		if ( FCKConfig.AutoDetectPasteFromWord && sHTML.length > 0 )
+		{
+			var re = /<\w[^>]*(( class="?MsoNormal"?)|(="mso-))/gi ;
+			if ( re.test( sHTML ) )
+			{
+				if ( confirm( FCKLang.PasteWordConfirm ) )
+				{
+					FCK.PasteFromWord() ;
+					return false ;
+				}
+			}
+		}
+
+		// Instead of inserting the retrieved HTML, let's leave the OS work for us,
+		// by calling FCK.ExecuteNamedCommand( 'Paste' ). It could give better results.
+
+		// Enable the semaphore to avoid a loop.
+		FCK._PasteIsRunning = true ;
+
+		FCK.ExecuteNamedCommand( 'Paste' ) ;
+
+		// Removes the semaphore.
+		delete FCK._PasteIsRunning ;
+	}
+
+	// Let's always make a custom implementation (return false), otherwise
+	// the new Keyboard Handler may conflict with this code, and the CTRL+V code
+	// could result in a simple "V" being pasted.
+	return false ;
+}
+
+FCK.PasteAsPlainText = function( forceText )
+{
+	if ( !FCK._CheckIsPastingEnabled() )
+	{
+		FCKDialog.OpenDialog( 'FCKDialog_Paste', FCKLang.PasteAsText, 'dialog/fck_paste.html', 400, 330, 'PlainText' ) ;
+		return ;
+	}
+
+	// Get the data available in the clipboard in text format.
+	var sText = null ;
+	if ( ! forceText )
+		sText = clipboardData.getData("Text") ;
+	else 
+		sText = forceText ;
+
+	if ( sText && sText.length > 0 )
+	{
+		// Replace the carriage returns with <BR>
+		sText = FCKTools.HTMLEncode( sText ) ;
+		sText = FCKTools.ProcessLineBreaks( window, FCKConfig, sText ) ;
+
+		// Insert the resulting data in the editor.
+		this.InsertHtml( sText ) ;
+	}
+}
+
+FCK._CheckIsPastingEnabled = function( returnContents )
+{
+	// The following seams to be the only reliable way to check is script
+	// pasting operations are enabled in the security settings of IE6 and IE7.
+	// It adds a little bit of overhead to the check, but so far that's the
+	// only way, mainly because of IE7.
+
+	FCK._PasteIsEnabled = false ;
+
+	document.body.attachEvent( 'onpaste', FCK_CheckPasting_Listener ) ;
+
+	// The execCommand in GetClipboardHTML will fire the "onpaste", only if the
+	// security settings are enabled.
+	var oReturn = FCK.GetClipboardHTML() ;
+
+	document.body.detachEvent( 'onpaste', FCK_CheckPasting_Listener ) ;
+
+	if ( FCK._PasteIsEnabled )
+	{
+		if ( !returnContents )
+			oReturn = true ;
+	}
+	else
+		oReturn = false ;
+
+	delete FCK._PasteIsEnabled ;
+
+	return oReturn ;
+}
+
+function FCK_CheckPasting_Listener()
+{
+	FCK._PasteIsEnabled = true ;
+}
+
+FCK.GetClipboardHTML = function()
+{
+	var oDiv = document.getElementById( '___FCKHiddenDiv' ) ;
+
+	if ( !oDiv )
+	{
+		oDiv = document.createElement( 'DIV' ) ;
+		oDiv.id = '___FCKHiddenDiv' ;
+
+		var oDivStyle = oDiv.style ;
+		oDivStyle.position		= 'absolute' ;
+		oDivStyle.visibility	= oDivStyle.overflow	= 'hidden' ;
+		oDivStyle.width			= oDivStyle.height		= 1 ;
+
+		document.body.appendChild( oDiv ) ;
+	}
+
+	oDiv.innerHTML = '' ;
+
+	var oTextRange = document.body.createTextRange() ;
+	oTextRange.moveToElementText( oDiv ) ;
+	oTextRange.execCommand( 'Paste' ) ;
+
+	var sData = oDiv.innerHTML ;
+	oDiv.innerHTML = '' ;
+
+	return sData ;
+}
+
+FCK.CreateLink = function( url, noUndo )
+{
+	// Creates the array that will be returned. It contains one or more created links (see #220).
+	var aCreatedLinks = new Array() ;
+
+	// Remove any existing link in the selection.
+	FCK.ExecuteNamedCommand( 'Unlink', null, false, !!noUndo ) ;
+
+	if ( url.length > 0 )
+	{
+		// If there are several images, and you try to link each one, all the images get inside the link:
+		// <img><img> -> <a><img></a><img> -> <a><img><img></a> due to the call to 'CreateLink' (bug in IE)
+		if (FCKSelection.GetType() == 'Control')
+		{
+			// Create a link
+			var oLink = this.EditorDocument.createElement( 'A' ) ;
+			oLink.href = url ;
+
+			// Get the selected object
+			var oControl = FCKSelection.GetSelectedElement() ;
+			// Put the link just before the object
+			oControl.parentNode.insertBefore(oLink, oControl) ;
+			// Move the object inside the link
+			oControl.parentNode.removeChild( oControl ) ;
+			oLink.appendChild( oControl ) ;
+
+			return [ oLink ] ;
+		}
+
+		// Generate a temporary name for the link.
+		var sTempUrl = 'javascript:void(0);/*' + ( new Date().getTime() ) + '*/' ;
+
+		// Use the internal "CreateLink" command to create the link.
+		FCK.ExecuteNamedCommand( 'CreateLink', sTempUrl, false, !!noUndo ) ;
+
+		// Look for the just create link.
+		var oLinks = this.EditorDocument.links ;
+
+		for ( i = 0 ; i < oLinks.length ; i++ )
+		{
+			var oLink = oLinks[i] ;
+
+			// Check it this a newly created link.
+			// getAttribute must be used. oLink.url may cause problems with IE7 (#555).
+			if ( oLink.getAttribute( 'href', 2 ) == sTempUrl )
+			{
+				var sInnerHtml = oLink.innerHTML ;	// Save the innerHTML (IE changes it if it is like an URL).
+				oLink.href = url ;
+				oLink.innerHTML = sInnerHtml ;		// Restore the innerHTML.
+
+				// If the last child is a <br> move it outside the link or it
+				// will be too easy to select this link again #388.
+				var oLastChild = oLink.lastChild ;
+				if ( oLastChild && oLastChild.nodeName == 'BR' )
+				{
+					// Move the BR after the link.
+					FCKDomTools.InsertAfterNode( oLink, oLink.removeChild( oLastChild ) ) ;
+				}
+
+				aCreatedLinks.push( oLink ) ;
+			}
+		}
+	}
+
+	return aCreatedLinks ;
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fckbrowserinfo.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fckbrowserinfo.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fckbrowserinfo.js	(revision 1280)
@@ -0,0 +1,59 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Contains browser detection information.
+ */
+
+var s = navigator.userAgent.toLowerCase() ;
+
+var FCKBrowserInfo =
+{
+	IsIE		: /*@cc_on!@*/false,
+	IsIE7		: /*@cc_on!@*/false && s.Contains('msie 7'),
+	IsGecko		: s.Contains('gecko/'),
+	IsSafari	: s.Contains(' applewebkit/'),		// Read "IsWebKit"
+	IsOpera		: !!window.opera,
+	IsMac		: s.Contains('macintosh')
+} ;
+
+// Completes the browser info with further Gecko information.
+(function( browserInfo )
+{
+	browserInfo.IsGeckoLike = ( browserInfo.IsGecko || browserInfo.IsSafari || browserInfo.IsOpera ) ;
+
+	if ( browserInfo.IsGecko )
+	{
+		var geckoVersion = s.match( /gecko\/(\d+)/ )[1] ;
+
+		// Actually "10" refers to Gecko versions before Firefox 1.5, when
+		// Gecko 1.8 (build 20051111) has been released.
+
+		// Some browser (like Mozilla 1.7.13) may have a Gecko build greater
+		// than 20051111, so we must also check for the revision number not to
+		// be 1.7 (we are assuming that rv < 1.7 will not have build > 20051111).
+
+		// TODO: Future versions may consider the rv number only, but it is
+		// still to check that all Gecko based browser present the rv number.
+		browserInfo.IsGecko10 = ( ( geckoVersion < 20051111 ) || ( /rv:1\.7/.test(s) ) ) ;
+		browserInfo.IsGecko19 = /rv:1\.9/.test(s) ;
+	}
+	else
+		browserInfo.IsGecko10 = false ;
+})(FCKBrowserInfo) ;
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fckcodeformatter.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fckcodeformatter.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fckcodeformatter.js	(revision 1280)
@@ -0,0 +1,100 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Format the HTML.
+ */
+
+var FCKCodeFormatter = new Object() ;
+
+FCKCodeFormatter.Init = function()
+{
+	var oRegex = this.Regex = new Object() ;
+
+	// Regex for line breaks.
+	oRegex.BlocksOpener = /\<(P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|OL|UL|LI|TITLE|META|LINK|BASE|SCRIPT|LINK|TD|TH|AREA|OPTION)[^\>]*\>/gi ;
+	oRegex.BlocksCloser = /\<\/(P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|OL|UL|LI|TITLE|META|LINK|BASE|SCRIPT|LINK|TD|TH|AREA|OPTION)[^\>]*\>/gi ;
+
+	oRegex.NewLineTags	= /\<(BR|HR)[^\>]*\>/gi ;
+
+	oRegex.MainTags = /\<\/?(HTML|HEAD|BODY|FORM|TABLE|TBODY|THEAD|TR)[^\>]*\>/gi ;
+
+	oRegex.LineSplitter = /\s*\n+\s*/g ;
+
+	// Regex for indentation.
+	oRegex.IncreaseIndent = /^\<(HTML|HEAD|BODY|FORM|TABLE|TBODY|THEAD|TR|UL|OL)[ \/\>]/i ;
+	oRegex.DecreaseIndent = /^\<\/(HTML|HEAD|BODY|FORM|TABLE|TBODY|THEAD|TR|UL|OL)[ \>]/i ;
+	oRegex.FormatIndentatorRemove = new RegExp( '^' + FCKConfig.FormatIndentator ) ;
+
+	oRegex.ProtectedTags = /(<PRE[^>]*>)([\s\S]*?)(<\/PRE>)/gi ;
+}
+
+FCKCodeFormatter._ProtectData = function( outer, opener, data, closer )
+{
+	return opener + '___FCKpd___' + FCKCodeFormatter.ProtectedData.AddItem( data ) + closer ;
+}
+
+FCKCodeFormatter.Format = function( html )
+{
+	if ( !this.Regex )
+		this.Init() ;
+
+	// Protected content that remain untouched during the
+	// process go in the following array.
+	FCKCodeFormatter.ProtectedData = new Array() ;
+
+	var sFormatted = html.replace( this.Regex.ProtectedTags, FCKCodeFormatter._ProtectData ) ;
+
+	// Line breaks.
+	sFormatted		= sFormatted.replace( this.Regex.BlocksOpener, '\n$&' ) ;
+	sFormatted		= sFormatted.replace( this.Regex.BlocksCloser, '$&\n' ) ;
+	sFormatted		= sFormatted.replace( this.Regex.NewLineTags, '$&\n' ) ;
+	sFormatted		= sFormatted.replace( this.Regex.MainTags, '\n$&\n' ) ;
+
+	// Indentation.
+	var sIndentation = '' ;
+
+	var asLines = sFormatted.split( this.Regex.LineSplitter ) ;
+	sFormatted = '' ;
+
+	for ( var i = 0 ; i < asLines.length ; i++ )
+	{
+		var sLine = asLines[i] ;
+
+		if ( sLine.length == 0 )
+			continue ;
+
+		if ( this.Regex.DecreaseIndent.test( sLine ) )
+			sIndentation = sIndentation.replace( this.Regex.FormatIndentatorRemove, '' ) ;
+
+		sFormatted += sIndentation + sLine + '\n' ;
+
+		if ( this.Regex.IncreaseIndent.test( sLine ) )
+			sIndentation += FCKConfig.FormatIndentator ;
+	}
+
+	// Now we put back the protected data.
+	for ( var j = 0 ; j < FCKCodeFormatter.ProtectedData.length ; j++ )
+	{
+		var oRegex = new RegExp( '___FCKpd___' + j ) ;
+		sFormatted = sFormatted.replace( oRegex, FCKCodeFormatter.ProtectedData[j].replace( /\$/g, '$$$$' ) ) ;
+	}
+
+	return sFormatted.Trim() ;
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fckcommands.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fckcommands.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fckcommands.js	(revision 1280)
@@ -0,0 +1,167 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Define all commands available in the editor.
+ */
+
+var FCKCommands = FCK.Commands = new Object() ;
+FCKCommands.LoadedCommands = new Object() ;
+
+FCKCommands.RegisterCommand = function( commandName, command )
+{
+	this.LoadedCommands[ commandName ] = command ;
+}
+
+FCKCommands.GetCommand = function( commandName )
+{
+	var oCommand = FCKCommands.LoadedCommands[ commandName ] ;
+
+	if ( oCommand )
+		return oCommand ;
+
+	switch ( commandName )
+	{
+		case 'Bold'			:
+		case 'Italic'		:
+		case 'Underline'	:
+		case 'StrikeThrough':
+		case 'Subscript'	:
+		case 'Superscript'	: oCommand = new FCKCoreStyleCommand( commandName ) ; break ;
+		
+		case 'RemoveFormat'	: oCommand = new FCKRemoveFormatCommand() ; break ;
+
+		case 'DocProps'		: oCommand = new FCKDialogCommand( 'DocProps'	, FCKLang.DocProps				, 'dialog/fck_docprops.html'	, 400, 390, FCKCommands.GetFullPageState ) ; break ;
+		case 'Templates'	: oCommand = new FCKDialogCommand( 'Templates'	, FCKLang.DlgTemplatesTitle		, 'dialog/fck_template.html'	, 380, 450 ) ; break ;
+		case 'Link'			: oCommand = new FCKDialogCommand( 'Link'		, FCKLang.DlgLnkWindowTitle		, 'dialog/fck_link.html'		, 400, 330 ) ; break ;
+		case 'Unlink'		: oCommand = new FCKUnlinkCommand() ; break ;
+		case 'Anchor'		: oCommand = new FCKDialogCommand( 'Anchor'		, FCKLang.DlgAnchorTitle		, 'dialog/fck_anchor.html'		, 370, 170 ) ; break ;
+		case 'AnchorDelete'	: oCommand = new FCKAnchorDeleteCommand() ; break ;
+		case 'BulletedList'	: oCommand = new FCKDialogCommand( 'BulletedList', FCKLang.BulletedListProp		, 'dialog/fck_listprop.html?UL'	, 370, 170 ) ; break ;
+		case 'NumberedList'	: oCommand = new FCKDialogCommand( 'NumberedList', FCKLang.NumberedListProp		, 'dialog/fck_listprop.html?OL'	, 370, 170 ) ; break ;
+		case 'About'		: oCommand = new FCKDialogCommand( 'About'		, FCKLang.About					, 'dialog/fck_about.html'		, 400, 330 ) ; break ;
+
+		case 'Find'			: oCommand = new FCKDialogCommand( 'Find'		, FCKLang.DlgFindAndReplaceTitle			, 'dialog/fck_replace.html'		, 340, 250 ) ; break ;
+		case 'Replace'		: oCommand = new FCKDialogCommand( 'Replace'	, FCKLang.DlgFindAndReplaceTitle		, 'dialog/fck_replace.html'		, 340, 250 ) ; break ;
+
+		case 'Image'		: oCommand = new FCKDialogCommand( 'Image'		, FCKLang.DlgImgTitle			, 'dialog/fck_image.html'		, 450, 400 ) ; break ;
+		case 'Flash'		: oCommand = new FCKDialogCommand( 'Flash'		, FCKLang.DlgFlashTitle			, 'dialog/fck_flash.html'		, 450, 400 ) ; break ;
+		case 'SpecialChar'	: oCommand = new FCKDialogCommand( 'SpecialChar', FCKLang.DlgSpecialCharTitle	, 'dialog/fck_specialchar.html'	, 400, 320 ) ; break ;
+		case 'Smiley'		: oCommand = new FCKDialogCommand( 'Smiley'		, FCKLang.DlgSmileyTitle		, 'dialog/fck_smiley.html'		, FCKConfig.SmileyWindowWidth, FCKConfig.SmileyWindowHeight ) ; break ;
+		case 'Table'		: oCommand = new FCKDialogCommand( 'Table'		, FCKLang.DlgTableTitle			, 'dialog/fck_table.html'		, 450, 250 ) ; break ;
+		case 'TableProp'	: oCommand = new FCKDialogCommand( 'Table'		, FCKLang.DlgTableTitle			, 'dialog/fck_table.html?Parent', 400, 250 ) ; break ;
+		case 'TableCellProp': oCommand = new FCKDialogCommand( 'TableCell'	, FCKLang.DlgCellTitle			, 'dialog/fck_tablecell.html'	, 550, 250 ) ; break ;
+
+		case 'Style'		: oCommand = new FCKStyleCommand() ; break ;
+
+		case 'FontName'		: oCommand = new FCKFontNameCommand() ; break ;
+		case 'FontSize'		: oCommand = new FCKFontSizeCommand() ; break ;
+		case 'FontFormat'	: oCommand = new FCKFormatBlockCommand() ; break ;
+
+		case 'Source'		: oCommand = new FCKSourceCommand() ; break ;
+		case 'Preview'		: oCommand = new FCKPreviewCommand() ; break ;
+		case 'Save'			: oCommand = new FCKSaveCommand() ; break ;
+		case 'NewPage'		: oCommand = new FCKNewPageCommand() ; break ;
+		case 'PageBreak'	: oCommand = new FCKPageBreakCommand() ; break ;
+		case 'Rule'			: oCommand = new FCKRuleCommand() ; break ;
+
+		case 'TextColor'	: oCommand = new FCKTextColorCommand('ForeColor') ; break ;
+		case 'BGColor'		: oCommand = new FCKTextColorCommand('BackColor') ; break ;
+
+		case 'Paste'		: oCommand = new FCKPasteCommand() ; break ;
+		case 'PasteText'	: oCommand = new FCKPastePlainTextCommand() ; break ;
+		case 'PasteWord'	: oCommand = new FCKPasteWordCommand() ; break ;
+
+		case 'JustifyLeft'	: oCommand = new FCKJustifyCommand( 'left' ) ; break ;
+		case 'JustifyCenter'	: oCommand = new FCKJustifyCommand( 'center' ) ; break ;
+		case 'JustifyRight'	: oCommand = new FCKJustifyCommand( 'right' ) ; break ;
+		case 'JustifyFull'	: oCommand = new FCKJustifyCommand( 'justify' ) ; break ;
+		case 'Indent'	: oCommand = new FCKIndentCommand( 'indent', FCKConfig.IndentLength ) ; break ;
+		case 'Outdent'	: oCommand = new FCKIndentCommand( 'outdent', FCKConfig.IndentLength * -1 ) ; break ;
+		case 'Blockquote'	: oCommand = new FCKBlockQuoteCommand() ; break ;
+
+		case 'TableInsertRowAfter'		: oCommand = new FCKTableCommand('TableInsertRowAfter') ; break ;
+		case 'TableInsertRowBefore'		: oCommand = new FCKTableCommand('TableInsertRowBefore') ; break ;
+		case 'TableDeleteRows'			: oCommand = new FCKTableCommand('TableDeleteRows') ; break ;
+		case 'TableInsertColumnAfter'	: oCommand = new FCKTableCommand('TableInsertColumnAfter') ; break ;
+		case 'TableInsertColumnBefore'	: oCommand = new FCKTableCommand('TableInsertColumnBefore') ; break ;
+		case 'TableDeleteColumns'		: oCommand = new FCKTableCommand('TableDeleteColumns') ; break ;
+		case 'TableInsertCellAfter'		: oCommand = new FCKTableCommand('TableInsertCellAfter') ; break ;
+		case 'TableInsertCellBefore'	: oCommand = new FCKTableCommand('TableInsertCellBefore') ; break ;
+		case 'TableDeleteCells'			: oCommand = new FCKTableCommand('TableDeleteCells') ; break ;
+		case 'TableMergeCells'			: oCommand = new FCKTableCommand('TableMergeCells') ; break ;
+		case 'TableMergeRight'			: oCommand = new FCKTableCommand('TableMergeRight') ; break ;
+		case 'TableMergeDown'			: oCommand = new FCKTableCommand('TableMergeDown') ; break ;
+		case 'TableHorizontalSplitCell'	: oCommand = new FCKTableCommand('TableHorizontalSplitCell') ; break ;
+		case 'TableVerticalSplitCell'	: oCommand = new FCKTableCommand('TableVerticalSplitCell') ; break ;
+		case 'TableDelete'				: oCommand = new FCKTableCommand('TableDelete') ; break ;
+
+		case 'Form'			: oCommand = new FCKDialogCommand( 'Form'		, FCKLang.Form			, 'dialog/fck_form.html'		, 380, 230 ) ; break ;
+		case 'Checkbox'		: oCommand = new FCKDialogCommand( 'Checkbox'	, FCKLang.Checkbox		, 'dialog/fck_checkbox.html'	, 380, 230 ) ; break ;
+		case 'Radio'		: oCommand = new FCKDialogCommand( 'Radio'		, FCKLang.RadioButton	, 'dialog/fck_radiobutton.html'	, 380, 230 ) ; break ;
+		case 'TextField'	: oCommand = new FCKDialogCommand( 'TextField'	, FCKLang.TextField		, 'dialog/fck_textfield.html'	, 380, 230 ) ; break ;
+		case 'Textarea'		: oCommand = new FCKDialogCommand( 'Textarea'	, FCKLang.Textarea		, 'dialog/fck_textarea.html'	, 380, 230 ) ; break ;
+		case 'HiddenField'	: oCommand = new FCKDialogCommand( 'HiddenField', FCKLang.HiddenField	, 'dialog/fck_hiddenfield.html'	, 380, 230 ) ; break ;
+		case 'Button'		: oCommand = new FCKDialogCommand( 'Button'		, FCKLang.Button		, 'dialog/fck_button.html'		, 380, 230 ) ; break ;
+		case 'Select'		: oCommand = new FCKDialogCommand( 'Select'		, FCKLang.SelectionField, 'dialog/fck_select.html'		, 400, 380 ) ; break ;
+		case 'ImageButton'	: oCommand = new FCKDialogCommand( 'ImageButton', FCKLang.ImageButton	, 'dialog/fck_image.html?ImageButton', 450, 400 ) ; break ;
+
+		case 'SpellCheck'	: oCommand = new FCKSpellCheckCommand() ; break ;
+		case 'FitWindow'	: oCommand = new FCKFitWindow() ; break ;
+
+		case 'Undo'	: oCommand = new FCKUndoCommand() ; break ;
+		case 'Redo'	: oCommand = new FCKRedoCommand() ; break ;
+		case 'Copy'	: oCommand = new FCKCopyCommand() ; break ;
+
+		case 'SelectAll'			: oCommand = new FCKSelectAllCommand() ; break ;
+		case 'InsertOrderedList'	: oCommand = new FCKListCommand( 'insertorderedlist', 'ol' ) ; break ;
+		case 'InsertUnorderedList'	: oCommand = new FCKListCommand( 'insertunorderedlist', 'ul' ) ; break ;
+		case 'ShowBlocks' : oCommand = new FCKShowBlockCommand( 'ShowBlocks', FCKConfig.StartupShowBlocks ? FCK_TRISTATE_ON : FCK_TRISTATE_OFF ) ; break ;
+
+		// Generic Undefined command (usually used when a command is under development).
+		case 'Undefined'	: oCommand = new FCKUndefinedCommand() ; break ;
+
+		// By default we assume that it is a named command.
+		default:
+			if ( FCKRegexLib.NamedCommands.test( commandName ) )
+				oCommand = new FCKNamedCommand( commandName ) ;
+			else
+			{
+				alert( FCKLang.UnknownCommand.replace( /%1/g, commandName ) ) ;
+				return null ;
+			}
+	}
+
+	FCKCommands.LoadedCommands[ commandName ] = oCommand ;
+
+	return oCommand ;
+}
+
+// Gets the state of the "Document Properties" button. It must be enabled only
+// when "Full Page" editing is available.
+FCKCommands.GetFullPageState = function()
+{
+	return FCKConfig.FullPage ? FCK_TRISTATE_OFF : FCK_TRISTATE_DISABLED ;
+}
+
+
+FCKCommands.GetBooleanState = function( isDisabled )
+{
+	return isDisabled ? FCK_TRISTATE_DISABLED : FCK_TRISTATE_OFF ;
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fckconfig.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fckconfig.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fckconfig.js	(revision 1280)
@@ -0,0 +1,239 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Creates and initializes the FCKConfig object.
+ */
+
+var FCKConfig = FCK.Config = new Object() ;
+
+/*
+	For the next major version (probably 3.0) we should move all this stuff to
+	another dedicated object and leave FCKConfig as a holder object for settings only).
+*/
+
+// Editor Base Path
+if ( document.location.protocol == 'file:' )
+{
+	FCKConfig.BasePath = decodeURIComponent( document.location.pathname.substr(1) ) ;
+	FCKConfig.BasePath = FCKConfig.BasePath.replace( /\\/gi, '/' ) ;
+
+	// The way to address local files is different according to the OS.
+	// In Windows it is file:// but in MacOs it is file:/// so let's get it automatically
+	var sFullProtocol = document.location.href.match( /^(file\:\/{2,3})/ )[1] ;
+	// #945 Opera does strange things with files loaded from the disk, and it fails in Mac to load xml files
+	if ( FCKBrowserInfo.IsOpera )
+		sFullProtocol += 'localhost/' ;
+
+	FCKConfig.BasePath = sFullProtocol + FCKConfig.BasePath.substring( 0, FCKConfig.BasePath.lastIndexOf( '/' ) + 1) ;
+	FCKConfig.FullBasePath = FCKConfig.BasePath ;
+}
+else
+{
+	FCKConfig.BasePath = document.location.pathname.substring( 0, document.location.pathname.lastIndexOf( '/' ) + 1) ;
+	FCKConfig.FullBasePath = document.location.protocol + '//' + document.location.host + FCKConfig.BasePath ;
+}
+
+FCKConfig.EditorPath = FCKConfig.BasePath.replace( /editor\/$/, '' ) ;
+
+// There is a bug in Gecko. If the editor is hidden on startup, an error is
+// thrown when trying to get the screen dimensions.
+try
+{
+	FCKConfig.ScreenWidth	= screen.width ;
+	FCKConfig.ScreenHeight	= screen.height ;
+}
+catch (e)
+{
+	FCKConfig.ScreenWidth	= 800 ;
+	FCKConfig.ScreenHeight	= 600 ;
+}
+
+// Override the actual configuration values with the values passed throw the
+// hidden field "<InstanceName>___Config".
+FCKConfig.ProcessHiddenField = function()
+{
+	this.PageConfig = new Object() ;
+
+	// Get the hidden field.
+	var oConfigField = window.parent.document.getElementById( FCK.Name + '___Config' ) ;
+
+	// Do nothing if the config field was not defined.
+	if ( ! oConfigField ) return ;
+
+	var aCouples = oConfigField.value.split('&') ;
+
+	for ( var i = 0 ; i < aCouples.length ; i++ )
+	{
+		if ( aCouples[i].length == 0 )
+			continue ;
+
+		var aConfig = aCouples[i].split( '=' ) ;
+		var sKey = decodeURIComponent( aConfig[0] ) ;
+		var sVal = decodeURIComponent( aConfig[1] ) ;
+
+		if ( sKey == 'CustomConfigurationsPath' )	// The Custom Config File path must be loaded immediately.
+			FCKConfig[ sKey ] = sVal ;
+
+		else if ( sVal.toLowerCase() == "true" )	// If it is a boolean TRUE.
+			this.PageConfig[ sKey ] = true ;
+
+		else if ( sVal.toLowerCase() == "false" )	// If it is a boolean FALSE.
+			this.PageConfig[ sKey ] = false ;
+
+		else if ( sVal.length > 0 && !isNaN( sVal ) )	// If it is a number.
+			this.PageConfig[ sKey ] = parseInt( sVal, 10 ) ;
+
+		else										// In any other case it is a string.
+			this.PageConfig[ sKey ] = sVal ;
+	}
+}
+
+function FCKConfig_LoadPageConfig()
+{
+	var oPageConfig = FCKConfig.PageConfig ;
+	for ( var sKey in oPageConfig )
+		FCKConfig[ sKey ] = oPageConfig[ sKey ] ;
+}
+
+function FCKConfig_PreProcess()
+{
+	var oConfig = FCKConfig ;
+
+	// Force debug mode if fckdebug=true in the QueryString (main page).
+	if ( oConfig.AllowQueryStringDebug )
+	{
+		try
+		{
+			if ( (/fckdebug=true/i).test( window.top.location.search ) )
+				oConfig.Debug = true ;
+		}
+		catch (e) { /* Ignore it. Much probably we are inside a FRAME where the "top" is in another domain (security error). */ }
+	}
+
+	// Certifies that the "PluginsPath" configuration ends with a slash.
+	if ( !oConfig.PluginsPath.EndsWith('/') )
+		oConfig.PluginsPath += '/' ;
+
+	// EditorAreaCSS accepts a single path string, a list of paths separated by
+	// a comma or and array of paths.
+	// In the string cases, transform it in an array.
+	if ( typeof( oConfig.EditorAreaCSS ) == 'string' )
+		oConfig.EditorAreaCSS = oConfig.EditorAreaCSS.split(',') ;
+
+	var sComboPreviewCSS = oConfig.ToolbarComboPreviewCSS ;
+	if ( !sComboPreviewCSS || sComboPreviewCSS.length == 0 )
+		oConfig.ToolbarComboPreviewCSS = oConfig.EditorAreaCSS ;
+	else if ( typeof( sComboPreviewCSS ) == 'string' )
+		oConfig.ToolbarComboPreviewCSS = [ sComboPreviewCSS ] ;
+}
+
+// Define toolbar sets collection.
+FCKConfig.ToolbarSets = new Object() ;
+
+// Defines the plugins collection.
+FCKConfig.Plugins = new Object() ;
+FCKConfig.Plugins.Items = new Array() ;
+
+FCKConfig.Plugins.Add = function( name, langs, path )
+{
+	FCKConfig.Plugins.Items.AddItem( [name, langs, path] ) ;
+}
+
+// FCKConfig.ProtectedSource: object that holds a collection of Regular
+// Expressions that defined parts of the raw HTML that must remain untouched
+// like custom tags, scripts, server side code, etc...
+FCKConfig.ProtectedSource = new Object() ;
+
+// Generates a string used to identify and locate the Protected Tags comments.
+FCKConfig.ProtectedSource._CodeTag = (new Date()).valueOf() ;
+
+// Initialize the regex array with the default ones.
+FCKConfig.ProtectedSource.RegexEntries = [
+	// First of any other protection, we must protect all comments to avoid
+	// loosing them (of course, IE related).
+	/<!--[\s\S]*?-->/g ,
+
+	// Script tags will also be forced to be protected, otherwise IE will execute them.
+	/<script[\s\S]*?<\/script>/gi,
+
+	// <noscript> tags (get lost in IE and messed up in FF).
+	/<noscript[\s\S]*?<\/noscript>/gi,
+
+	// Protect <object> tags. See #359.
+	/<object[\s\S]+?<\/object>/gi
+] ;
+
+FCKConfig.ProtectedSource.Add = function( regexPattern )
+{
+	this.RegexEntries.AddItem( regexPattern ) ;
+}
+
+FCKConfig.ProtectedSource.Protect = function( html )
+{
+	var codeTag = this._CodeTag ;
+	function _Replace( protectedSource )
+	{
+		var index = FCKTempBin.AddElement( protectedSource ) ;
+		return '<!--{' + codeTag + index + '}-->' ;
+	}
+
+	for ( var i = 0 ; i < this.RegexEntries.length ; i++ )
+	{
+		html = html.replace( this.RegexEntries[i], _Replace ) ;
+	}
+
+	return html ;
+}
+
+FCKConfig.ProtectedSource.Revert = function( html, clearBin )
+{
+	function _Replace( m, opener, index )
+	{
+		var protectedValue = clearBin ? FCKTempBin.RemoveElement( index ) : FCKTempBin.Elements[ index ] ;
+		// There could be protected source inside another one.
+		return FCKConfig.ProtectedSource.Revert( protectedValue, clearBin ) ;
+	}
+
+	var regex = new RegExp( "(<|&lt;)!--\\{" + this._CodeTag + "(\\d+)\\}--(>|&gt;)", "g" ) ;
+	return html.replace( regex, _Replace ) ;
+}
+
+// Returns a string with the attributes that must be appended to the body
+FCKConfig.GetBodyAttributes = function()
+{
+	var bodyAttributes = '' ;
+	// Add id and class to the body.
+	if ( this.BodyId && this.BodyId.length > 0 )
+		bodyAttributes += ' id="' + this.BodyId + '"' ;
+	if ( this.BodyClass && this.BodyClass.length > 0 )
+		bodyAttributes += ' class="' + this.BodyClass + '"' ;
+
+	return bodyAttributes ;
+}
+
+// Sets the body attributes directly on the node
+FCKConfig.ApplyBodyAttributes = function( oBody )
+{
+	// Add ID and Class to the body
+	if ( this.BodyId && this.BodyId.length > 0 )
+		oBody.id = FCKConfig.BodyId ;
+	if ( this.BodyClass && this.BodyClass.length > 0 )
+		oBody.className += ' ' + FCKConfig.BodyClass ;
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fckdebug.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fckdebug.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fckdebug.js	(revision 1280)
@@ -0,0 +1,56 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Debug window control and operations.
+ */
+
+var FCKDebug = new Object() ;
+
+FCKDebug._GetWindow = function()
+{
+	if ( !this.DebugWindow || this.DebugWindow.closed )
+		this.DebugWindow = window.open( FCKConfig.BasePath + 'fckdebug.html', 'FCKeditorDebug', 'menubar=no,scrollbars=yes,resizable=yes,location=no,toolbar=no,width=600,height=500', true ) ;
+
+	return this.DebugWindow ;
+}
+
+FCKDebug.Output = function( message, color, noParse )
+{
+	if ( ! FCKConfig.Debug )
+		return ;
+
+	try
+	{
+		this._GetWindow().Output( message, color ) ;
+	}
+	catch ( e ) {}	 // Ignore errors
+}
+
+FCKDebug.OutputObject = function( anyObject, color )
+{
+	if ( ! FCKConfig.Debug )
+		return ;
+
+	try
+	{
+		this._GetWindow().OutputObject( anyObject, color ) ;
+	}
+	catch ( e ) {}	 // Ignore errors
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fckdialog.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fckdialog.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fckdialog.js	(revision 1280)
@@ -0,0 +1,38 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Dialog windows operations.
+ */
+
+var FCKDialog = new Object() ;
+
+// This method opens a dialog window using the standard dialog template.
+FCKDialog.OpenDialog = function( dialogName, dialogTitle, dialogPage, width, height, customValue, parentWindow, resizable )
+{
+	// Setup the dialog info.
+	var oDialogInfo = new Object() ;
+	oDialogInfo.Title = dialogTitle ;
+	oDialogInfo.Page = dialogPage ;
+	oDialogInfo.Editor = window ;
+	oDialogInfo.CustomValue = customValue ;		// Optional
+
+	var sUrl = FCKConfig.BasePath + 'fckdialog.html' ;
+	this.Show( oDialogInfo, dialogName, sUrl, width, height, parentWindow, resizable ) ;
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fckdialog_gecko.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fckdialog_gecko.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fckdialog_gecko.js	(revision 1280)
@@ -0,0 +1,103 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Dialog windows operations. (Gecko specific implementations)
+ */
+
+FCKDialog.Show = function( dialogInfo, dialogName, pageUrl, dialogWidth, dialogHeight, parentWindow, resizable )
+{
+	var iTop  = (FCKConfig.ScreenHeight - dialogHeight) / 2 ;
+	var iLeft = (FCKConfig.ScreenWidth  - dialogWidth)  / 2 ;
+
+	var sOption  = "location=no,menubar=no,toolbar=no,dependent=yes,dialog=yes,minimizable=no,alwaysRaised=yes" +
+		",resizable="  + ( resizable ? 'yes' : 'no' ) +
+		",width="  + dialogWidth +
+		",height=" + dialogHeight +
+		",top="  + iTop +
+		",left=" + iLeft ;
+
+	if ( !parentWindow )
+		parentWindow = window ;
+
+	FCKFocusManager.Lock() ;
+
+	var oWindow = parentWindow.open( '', 'FCKeditorDialog_' + dialogName, sOption, true ) ;
+
+	if ( !oWindow )
+	{
+		alert( FCKLang.DialogBlocked ) ;
+		FCKFocusManager.Unlock() ;
+		return ;
+	}
+
+	oWindow.moveTo( iLeft, iTop ) ;
+	oWindow.resizeTo( dialogWidth, dialogHeight ) ;
+	oWindow.focus() ;
+	oWindow.location.href = pageUrl ;
+
+	oWindow.dialogArguments = dialogInfo ;
+
+	// On some Gecko browsers (probably over slow connections) the
+	// "dialogArguments" are not set to the target window so we must
+	// put it in the opener window so it can be used by the target one.
+	parentWindow.FCKLastDialogInfo = dialogInfo ;
+
+	this.Window = oWindow ;
+
+	// Try/Catch must be used to avoid an error when using a frameset
+	// on a different domain:
+	// "Permission denied to get property Window.releaseEvents".
+	try
+	{
+		window.top.parent.addEventListener( 'mousedown', this.CheckFocus, true ) ;
+		window.top.parent.addEventListener( 'mouseup', this.CheckFocus, true ) ;
+		window.top.parent.addEventListener( 'click', this.CheckFocus, true ) ;
+		window.top.parent.addEventListener( 'focus', this.CheckFocus, true ) ;
+	}
+	catch (e)
+	{}
+}
+
+FCKDialog.CheckFocus = function()
+{
+	// It is strange, but we have to check the FCKDialog existence to avoid a
+	// random error: "FCKDialog is not defined".
+	if ( typeof( FCKDialog ) != "object" )
+		return false ;
+
+	if ( FCKDialog.Window && !FCKDialog.Window.closed )
+		FCKDialog.Window.focus() ;
+	else
+	{
+		// Try/Catch must be used to avoid an error when using a frameset
+		// on a different domain:
+		// "Permission denied to get property Window.releaseEvents".
+		try
+		{
+			window.top.parent.removeEventListener( 'onmousedown', FCKDialog.CheckFocus, true ) ;
+			window.top.parent.removeEventListener( 'mouseup', FCKDialog.CheckFocus, true ) ;
+			window.top.parent.removeEventListener( 'click', FCKDialog.CheckFocus, true ) ;
+			window.top.parent.removeEventListener( 'onfocus', FCKDialog.CheckFocus, true ) ;
+		}
+		catch (e)
+		{}
+	}
+	return false ;
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fckdialog_ie.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fckdialog_ie.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fckdialog_ie.js	(revision 1280)
@@ -0,0 +1,48 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Dialog windows operations. (IE specific implementations)
+ */
+
+FCKDialog.Show = function( dialogInfo, dialogName, pageUrl, dialogWidth, dialogHeight, parentWindow, resizable )
+{
+	if ( !parentWindow )
+		parentWindow = window ;
+
+	var sOptions = 'help:no;scroll:no;status:no' +
+		';resizable:'  + ( resizable ? 'yes' : 'no' ) +
+		';dialogWidth:' + dialogWidth + 'px' +
+		';dialogHeight:' + dialogHeight + 'px' ;
+
+	FCKFocusManager.Lock() ;
+
+	var oReturn = 'B' ;
+
+	try
+	{
+		oReturn = parentWindow.showModalDialog( pageUrl, dialogInfo, sOptions ) ;
+	}
+	catch( e ) {}
+
+	if ( 'B' === oReturn )
+		alert( FCKLang.DialogBlocked ) ;
+
+	FCKFocusManager.Unlock() ;
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fckdocumentprocessor.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fckdocumentprocessor.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fckdocumentprocessor.js	(revision 1280)
@@ -0,0 +1,225 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Advanced document processors.
+ */
+
+var FCKDocumentProcessor = new Object() ;
+FCKDocumentProcessor._Items = new Array() ;
+
+FCKDocumentProcessor.AppendNew = function()
+{
+	var oNewItem = new Object() ;
+	this._Items.AddItem( oNewItem ) ;
+	return oNewItem ;
+}
+
+FCKDocumentProcessor.Process = function( document )
+{
+	var oProcessor, i = 0 ;
+	while( ( oProcessor = this._Items[i++] ) )
+		oProcessor.ProcessDocument( document ) ;
+}
+
+var FCKDocumentProcessor_CreateFakeImage = function( fakeClass, realElement )
+{
+	var oImg = FCK.EditorDocument.createElement( 'IMG' ) ;
+	oImg.className = fakeClass ;
+	oImg.src = FCKConfig.FullBasePath + 'images/spacer.gif' ;
+	oImg.setAttribute( '_fckfakelement', 'true', 0 ) ;
+	oImg.setAttribute( '_fckrealelement', FCKTempBin.AddElement( realElement ), 0 ) ;
+	return oImg ;
+}
+
+// Link Anchors
+if ( FCKBrowserInfo.IsIE || FCKBrowserInfo.IsOpera )
+{
+	var FCKAnchorsProcessor = FCKDocumentProcessor.AppendNew() ;
+	FCKAnchorsProcessor.ProcessDocument = function( document )
+	{
+		var aLinks = document.getElementsByTagName( 'A' ) ;
+
+		var oLink ;
+		var i = aLinks.length - 1 ;
+		while ( i >= 0 && ( oLink = aLinks[i--] ) )
+		{
+			// If it is anchor. Doesn't matter if it's also a link (even better: we show that it's both a link and an anchor)
+			if ( oLink.name.length > 0 )
+			{
+				//if the anchor has some content then we just add a temporary class
+				if ( oLink.innerHTML !== '' )
+				{
+					if ( FCKBrowserInfo.IsIE )
+						oLink.className += ' FCK__AnchorC' ;
+				}
+				else
+				{
+					var oImg = FCKDocumentProcessor_CreateFakeImage( 'FCK__Anchor', oLink.cloneNode(true) ) ;
+					oImg.setAttribute( '_fckanchor', 'true', 0 ) ;
+
+					oLink.parentNode.insertBefore( oImg, oLink ) ;
+					oLink.parentNode.removeChild( oLink ) ;
+				}
+			}
+		}
+	}
+}
+
+// Page Breaks
+var FCKPageBreaksProcessor = FCKDocumentProcessor.AppendNew() ;
+FCKPageBreaksProcessor.ProcessDocument = function( document )
+{
+	var aDIVs = document.getElementsByTagName( 'DIV' ) ;
+
+	var eDIV ;
+	var i = aDIVs.length - 1 ;
+	while ( i >= 0 && ( eDIV = aDIVs[i--] ) )
+	{
+		if ( eDIV.style.pageBreakAfter == 'always' && eDIV.childNodes.length == 1 && eDIV.childNodes[0].style && eDIV.childNodes[0].style.display == 'none' )
+		{
+			var oFakeImage = FCKDocumentProcessor_CreateFakeImage( 'FCK__PageBreak', eDIV.cloneNode(true) ) ;
+
+			eDIV.parentNode.insertBefore( oFakeImage, eDIV ) ;
+			eDIV.parentNode.removeChild( eDIV ) ;
+		}
+	}
+/*
+	var aCenters = document.getElementsByTagName( 'CENTER' ) ;
+
+	var oCenter ;
+	var i = aCenters.length - 1 ;
+	while ( i >= 0 && ( oCenter = aCenters[i--] ) )
+	{
+		if ( oCenter.style.pageBreakAfter == 'always' && oCenter.innerHTML.Trim().length == 0 )
+		{
+			var oFakeImage = FCKDocumentProcessor_CreateFakeImage( 'FCK__PageBreak', oCenter.cloneNode(true) ) ;
+
+			oCenter.parentNode.insertBefore( oFakeImage, oCenter ) ;
+			oCenter.parentNode.removeChild( oCenter ) ;
+		}
+	}
+*/
+}
+
+// Flash Embeds.
+var FCKFlashProcessor = FCKDocumentProcessor.AppendNew() ;
+FCKFlashProcessor.ProcessDocument = function( document )
+{
+	/*
+	Sample code:
+	This is some <embed src="/UserFiles/Flash/Yellow_Runners.swf"></embed><strong>sample text</strong>. You are&nbsp;<a name="fred"></a> using <a href="http://www.fckeditor.net/">FCKeditor</a>.
+	*/
+
+	var aEmbeds = document.getElementsByTagName( 'EMBED' ) ;
+
+	var oEmbed ;
+	var i = aEmbeds.length - 1 ;
+	while ( i >= 0 && ( oEmbed = aEmbeds[i--] ) )
+	{
+		// IE doesn't return the type attribute with oEmbed.type or oEmbed.getAttribute("type") 
+		// But it turns out that after accessing it then it doesn't gets copied later
+		var oType = oEmbed.attributes[ 'type' ] ;
+
+		// Check the extension and the type. Now it should be enough with just the type
+		// Opera doesn't return oEmbed.src so oEmbed.src.EndsWith will fail
+		if ( (oEmbed.src && oEmbed.src.EndsWith( '.swf', true )) || ( oType && oType.nodeValue == 'application/x-shockwave-flash' ) )
+		{
+			var oCloned = oEmbed.cloneNode( true ) ;
+
+			var oImg = FCKDocumentProcessor_CreateFakeImage( 'FCK__Flash', oCloned ) ;
+			oImg.setAttribute( '_fckflash', 'true', 0 ) ;
+
+			FCKFlashProcessor.RefreshView( oImg, oEmbed ) ;
+
+			oEmbed.parentNode.insertBefore( oImg, oEmbed ) ;
+			oEmbed.parentNode.removeChild( oEmbed ) ;
+		}
+	}
+}
+
+FCKFlashProcessor.RefreshView = function( placeHolderImage, originalEmbed )
+{
+	if ( originalEmbed.getAttribute( 'width' ) > 0 )
+		placeHolderImage.style.width = FCKTools.ConvertHtmlSizeToStyle( originalEmbed.getAttribute( 'width' ) ) ;
+
+	if ( originalEmbed.getAttribute( 'height' ) > 0 )
+		placeHolderImage.style.height = FCKTools.ConvertHtmlSizeToStyle( originalEmbed.getAttribute( 'height' ) ) ;
+}
+
+FCK.GetRealElement = function( fakeElement )
+{
+	var e = FCKTempBin.Elements[ fakeElement.getAttribute('_fckrealelement') ] ;
+
+	if ( fakeElement.getAttribute('_fckflash') )
+	{
+		if ( fakeElement.style.width.length > 0 )
+				e.width = FCKTools.ConvertStyleSizeToHtml( fakeElement.style.width ) ;
+
+		if ( fakeElement.style.height.length > 0 )
+				e.height = FCKTools.ConvertStyleSizeToHtml( fakeElement.style.height ) ;
+	}
+
+	return e ;
+}
+
+// HR Processor.
+// This is a IE only (tricky) thing. We protect all HR tags before loading them
+// (see FCK.ProtectTags). Here we put the HRs back.
+if ( FCKBrowserInfo.IsIE )
+{
+	FCKDocumentProcessor.AppendNew().ProcessDocument = function( document )
+	{
+		var aHRs = document.getElementsByTagName( 'HR' ) ;
+
+		var eHR ;
+		var i = aHRs.length - 1 ;
+		while ( i >= 0 && ( eHR = aHRs[i--] ) )
+		{
+			// Create the replacement HR.
+			var newHR = document.createElement( 'hr' ) ;
+			newHR.mergeAttributes( eHR, true ) ;
+			
+			// We must insert the new one after it. insertBefore will not work in all cases.
+			FCKDomTools.InsertAfterNode( eHR, newHR ) ;
+
+			eHR.parentNode.removeChild( eHR ) ;
+		}
+	}
+}
+
+// INPUT:hidden Processor.
+FCKDocumentProcessor.AppendNew().ProcessDocument = function( document )
+{
+	var aInputs = document.getElementsByTagName( 'INPUT' ) ;
+
+	var oInput ;
+	var i = aInputs.length - 1 ;
+	while ( i >= 0 && ( oInput = aInputs[i--] ) )
+	{
+		if ( oInput.type == 'hidden' )
+		{
+			var oImg = FCKDocumentProcessor_CreateFakeImage( 'FCK__InputHidden', oInput.cloneNode(true) ) ;
+			oImg.setAttribute( '_fckinputhidden', 'true', 0 ) ;
+
+			oInput.parentNode.insertBefore( oImg, oInput ) ;
+			oInput.parentNode.removeChild( oInput ) ;
+		}
+	}
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fckdomtools.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fckdomtools.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fckdomtools.js	(revision 1280)
@@ -0,0 +1,884 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Utility functions to work with the DOM.
+ */
+
+var FCKDomTools =
+{
+	MoveChildren : function( source, target, toTargetStart )
+	{
+		if ( source == target )
+			return ;
+
+		var eChild ;
+
+		if ( toTargetStart )
+		{
+			while ( (eChild = source.lastChild) )
+				target.insertBefore( source.removeChild( eChild ), target.firstChild ) ;
+		}
+		else
+		{
+			while ( (eChild = source.firstChild) )
+				target.appendChild( source.removeChild( eChild ) ) ;
+		}
+	},
+
+	MoveNode : function( source, target, toTargetStart )
+	{
+		if ( toTargetStart )
+			target.insertBefore( FCKDomTools.RemoveNode( source ), target.firstChild ) ;
+		else
+			target.appendChild( FCKDomTools.RemoveNode( source ) ) ;
+	},
+
+	// Remove blank spaces from the beginning and the end of the contents of a node.
+	TrimNode : function( node )
+	{
+		this.LTrimNode( node ) ;
+		this.RTrimNode( node ) ;
+	},
+
+	LTrimNode : function( node )
+	{
+		var eChildNode ;
+
+		while ( (eChildNode = node.firstChild) )
+		{
+			if ( eChildNode.nodeType == 3 )
+			{
+				var sTrimmed = eChildNode.nodeValue.LTrim() ;
+				var iOriginalLength = eChildNode.nodeValue.length ;
+
+				if ( sTrimmed.length == 0 )
+				{
+					node.removeChild( eChildNode ) ;
+					continue ;
+				}
+				else if ( sTrimmed.length < iOriginalLength )
+				{
+					eChildNode.splitText( iOriginalLength - sTrimmed.length ) ;
+					node.removeChild( node.firstChild ) ;
+				}
+			}
+			break ;
+		}
+	},
+
+	RTrimNode : function( node )
+	{
+		var eChildNode ;
+
+		while ( (eChildNode = node.lastChild) )
+		{
+			if ( eChildNode.nodeType == 3 )
+			{
+				var sTrimmed = eChildNode.nodeValue.RTrim() ;
+				var iOriginalLength = eChildNode.nodeValue.length ;
+
+				if ( sTrimmed.length == 0 )
+				{
+					// If the trimmed text node is empty, just remove it.
+
+					// Use "eChildNode.parentNode" instead of "node" to avoid IE bug (#81).
+					eChildNode.parentNode.removeChild( eChildNode ) ;
+					continue ;
+				}
+				else if ( sTrimmed.length < iOriginalLength )
+				{
+					// If the trimmed text length is less than the original
+					// length, strip all spaces from the end by splitting
+					// the text and removing the resulting useless node.
+
+					eChildNode.splitText( sTrimmed.length ) ;
+					// Use "node.lastChild.parentNode" instead of "node" to avoid IE bug (#81).
+					node.lastChild.parentNode.removeChild( node.lastChild ) ;
+				}
+			}
+			break ;
+		}
+
+		if ( !FCKBrowserInfo.IsIE )
+		{
+			eChildNode = node.lastChild ;
+
+			if ( eChildNode && eChildNode.nodeType == 1 && eChildNode.nodeName.toLowerCase() == 'br' )
+			{
+				// Use "eChildNode.parentNode" instead of "node" to avoid IE bug (#324).
+				eChildNode.parentNode.removeChild( eChildNode ) ;
+			}
+		}
+	},
+
+	RemoveNode : function( node, excludeChildren )
+	{
+		if ( excludeChildren )
+		{
+			// Move all children before the node.
+			var eChild ;
+			while ( (eChild = node.firstChild) )
+				node.parentNode.insertBefore( node.removeChild( eChild ), node ) ;
+		}
+
+		return node.parentNode.removeChild( node ) ;
+	},
+
+	GetFirstChild : function( node, childNames )
+	{
+		// If childNames is a string, transform it in a Array.
+		if ( typeof ( childNames ) == 'string' )
+			childNames = [ childNames ] ;
+
+		var eChild = node.firstChild ;
+		while( eChild )
+		{
+			if ( eChild.nodeType == 1 && eChild.tagName.Equals.apply( eChild.tagName, childNames ) )
+				return eChild ;
+
+			eChild = eChild.nextSibling ;
+		}
+
+		return null ;
+	},
+
+	GetLastChild : function( node, childNames )
+	{
+		// If childNames is a string, transform it in a Array.
+		if ( typeof ( childNames ) == 'string' )
+			childNames = [ childNames ] ;
+
+		var eChild = node.lastChild ;
+		while( eChild )
+		{
+			if ( eChild.nodeType == 1 && ( !childNames || eChild.tagName.Equals( childNames ) ) )
+				return eChild ;
+
+			eChild = eChild.previousSibling ;
+		}
+
+		return null ;
+	},
+
+	/*
+	 * Gets the previous element (nodeType=1) in the source order. Returns
+	 * "null" If no element is found.
+	 *		@param {Object} currentNode The node to start searching from.
+	 *		@param {Boolean} ignoreSpaceTextOnly Sets how text nodes will be
+	 *				handled. If set to "true", only white spaces text nodes
+	 *				will be ignored, while non white space text nodes will stop
+	 *				the search, returning null. If "false" or omitted, all
+	 *				text nodes are ignored.
+	 *		@param {string[]} stopSearchElements An array of element names that
+	 *				will cause the search to stop when found, returning null.
+	 *				May be omitted (or null).
+	 *		@param {string[]} ignoreElements An array of element names that
+	 *				must be ignored during the search.
+	 */
+	GetPreviousSourceElement : function( currentNode, ignoreSpaceTextOnly, stopSearchElements, ignoreElements )
+	{
+		if ( !currentNode )
+			return null ;
+
+		if ( stopSearchElements && currentNode.nodeType == 1 && currentNode.nodeName.IEquals( stopSearchElements ) )
+			return null ;
+
+		if ( currentNode.previousSibling )
+			currentNode = currentNode.previousSibling ;
+		else
+			return this.GetPreviousSourceElement( currentNode.parentNode, ignoreSpaceTextOnly, stopSearchElements, ignoreElements ) ;
+
+		while ( currentNode )
+		{
+			if ( currentNode.nodeType == 1 )
+			{
+				if ( stopSearchElements && currentNode.nodeName.IEquals( stopSearchElements ) )
+					break ;
+
+				if ( !ignoreElements || !currentNode.nodeName.IEquals( ignoreElements ) )
+					return currentNode ;
+			}
+			else if ( ignoreSpaceTextOnly && currentNode.nodeType == 3 && currentNode.nodeValue.RTrim().length > 0 )
+				break ;
+
+			if ( currentNode.lastChild )
+				currentNode = currentNode.lastChild ;
+			else
+				return this.GetPreviousSourceElement( currentNode, ignoreSpaceTextOnly, stopSearchElements, ignoreElements ) ;
+		}
+
+		return null ;
+	},
+
+	/*
+	 * Gets the next element (nodeType=1) in the source order. Returns
+	 * "null" If no element is found.
+	 *		@param {Object} currentNode The node to start searching from.
+	 *		@param {Boolean} ignoreSpaceTextOnly Sets how text nodes will be
+	 *				handled. If set to "true", only white spaces text nodes
+	 *				will be ignored, while non white space text nodes will stop
+	 *				the search, returning null. If "false" or omitted, all
+	 *				text nodes are ignored.
+	 *		@param {string[]} stopSearchElements An array of element names that
+	 *				will cause the search to stop when found, returning null.
+	 *				May be omitted (or null).
+	 *		@param {string[]} ignoreElements An array of element names that
+	 *				must be ignored during the search.
+	 */
+	GetNextSourceElement : function( currentNode, ignoreSpaceTextOnly, stopSearchElements, ignoreElements )
+	{
+		while( ( currentNode = this.GetNextSourceNode( currentNode, true ) ) )	// Only one "=".
+		{
+			if ( currentNode.nodeType == 1 )
+			{
+				if ( stopSearchElements && currentNode.nodeName.IEquals( stopSearchElements ) )
+					break ;
+
+				if ( !ignoreElements || !currentNode.nodeName.IEquals( ignoreElements ) )
+					return currentNode ;
+			}
+			else if ( ignoreSpaceTextOnly && currentNode.nodeType == 3 && currentNode.nodeValue.RTrim().length > 0 )
+				break ;
+		}
+
+		return null ;
+	},
+
+	/*
+	 * Get the next DOM node available in source order.
+	 */
+	GetNextSourceNode : function( currentNode, startFromSibling, nodeType, stopSearchElement )
+	{
+		if ( !currentNode )
+			return null ;
+
+		var node ;
+
+		if ( !startFromSibling && currentNode.firstChild )
+			node = currentNode.firstChild ;
+		else
+		{
+			node = currentNode.nextSibling ;
+			
+			if ( !node && ( !stopSearchElement || stopSearchElement != currentNode.parentNode ) )
+				return this.GetNextSourceNode( currentNode.parentNode, true, nodeType, stopSearchElement ) ;
+		}
+
+		if ( nodeType && node && node.nodeType != nodeType )
+			return this.GetNextSourceNode( node, false, nodeType, stopSearchElement ) ;
+
+		return node ;
+	},
+
+	/*
+	 * Get the next DOM node available in source order.
+	 */
+	GetPreviousSourceNode : function( currentNode, startFromSibling, nodeType )
+	{
+		if ( !currentNode )
+			return null ;
+
+		var node ;
+
+		if ( !startFromSibling && currentNode.lastChild )
+			node = currentNode.lastChild ;
+		else
+			node = ( currentNode.previousSibling || this.GetPreviousSourceNode( currentNode.parentNode, true, nodeType ) ) ;
+
+		if ( nodeType && node && node.nodeType != nodeType )
+			return this.GetPreviousSourceNode( node, false, nodeType ) ;
+
+		return node ;
+	},
+
+	// Inserts a element after a existing one.
+	InsertAfterNode : function( existingNode, newNode )
+	{
+		return existingNode.parentNode.insertBefore( newNode, existingNode.nextSibling ) ;
+	},
+
+	GetParents : function( node )
+	{
+		var parents = new Array() ;
+
+		while ( node )
+		{
+			parents.unshift( node ) ;
+			node = node.parentNode ;
+		}
+
+		return parents ;
+	},
+
+	GetCommonParents : function( node1, node2 )
+	{
+		var p1 = this.GetParents( node1 ) ;
+		var p2 = this.GetParents( node2 ) ;
+		var retval = [] ;
+		for ( var i = 0 ; i < p1.length ; i++ )
+		{
+			if ( p1[i] == p2[i] )
+				retval.push( p1[i] ) ;
+		}
+		return retval ;
+	},
+
+	GetCommonParentNode : function( node1, node2, tagList )
+	{
+		var tagMap = {} ;
+		if ( ! tagList.pop )
+			tagList = [ tagList ] ;
+		while ( tagList.length > 0 )
+			tagMap[tagList.pop().toLowerCase()] = 1 ;
+
+		var commonParents = this.GetCommonParents( node1, node2 ) ;
+		var currentParent = null ;
+		while ( ( currentParent = commonParents.pop() ) )
+		{
+			if ( tagMap[currentParent.nodeName.toLowerCase()] )
+				return currentParent ;
+		}
+		return null ;
+	},
+
+	GetIndexOf : function( node )
+	{
+		var currentNode = node.parentNode ? node.parentNode.firstChild : null ;
+		var currentIndex = -1 ;
+
+		while ( currentNode )
+		{
+			currentIndex++ ;
+
+			if ( currentNode == node )
+				return currentIndex ;
+
+			currentNode = currentNode.nextSibling ;
+		}
+
+		return -1 ;
+	},
+
+	PaddingNode : null,
+
+	EnforcePaddingNode : function( doc, tagName )
+	{
+		this.CheckAndRemovePaddingNode( doc, tagName, true ) ;
+		if ( doc.body.lastChild && ( doc.body.lastChild.nodeType != 1
+				|| doc.body.lastChild.tagName.toLowerCase() == tagName.toLowerCase() ) )
+			return ;
+		var node = doc.createElement( tagName ) ;
+		if ( FCKBrowserInfo.IsGecko && FCKListsLib.NonEmptyBlockElements[ tagName ] )
+			FCKTools.AppendBogusBr( node ) ;
+		this.PaddingNode = node ;
+		if ( doc.body.childNodes.length == 1
+				&& doc.body.firstChild.nodeType == 1
+				&& doc.body.firstChild.tagName.toLowerCase() == 'br'
+				&& ( doc.body.firstChild.getAttribute( '_moz_dirty' ) != null
+					|| doc.body.firstChild.getAttribute( 'type' ) == '_moz' ) )
+			doc.body.replaceChild( node, doc.body.firstChild ) ;
+		else
+			doc.body.appendChild( node ) ;
+	},
+
+	CheckAndRemovePaddingNode : function( doc, tagName, dontRemove )
+	{
+		var paddingNode = this.PaddingNode ;
+		if ( ! paddingNode )
+			return ;
+
+		// If the padding node is changed, remove its status as a padding node.
+		if ( paddingNode.parentNode != doc.body
+			|| paddingNode.tagName.toLowerCase() != tagName
+			|| ( paddingNode.childNodes.length > 1 )
+			|| ( paddingNode.firstChild && paddingNode.firstChild.nodeValue != '\xa0'
+				&& String(paddingNode.firstChild.tagName).toLowerCase() != 'br' ) )
+		{
+			this.PaddingNode = null ;
+			return ;
+		}
+
+		// Now we're sure the padding node exists, and it is unchanged, and it
+		// isn't the only node in doc.body, remove it.
+		if ( !dontRemove )
+		{
+			if ( paddingNode.parentNode.childNodes.length > 1 )
+				paddingNode.parentNode.removeChild( paddingNode ) ;
+			this.PaddingNode = null ;
+		}
+	},
+
+	HasAttribute : function( element, attributeName )
+	{
+		if ( element.hasAttribute )
+			return element.hasAttribute( attributeName ) ;
+		else
+		{
+			var att = element.attributes[ attributeName ] ;
+			return ( att != undefined && att.specified ) ;
+		}
+	},
+
+	/**
+	 * Checks if an element has "specified" attributes.
+	 */
+	HasAttributes : function( element )
+	{
+		var attributes = element.attributes ;
+
+		for ( var i = 0 ; i < attributes.length ; i++ )
+		{
+			if ( FCKBrowserInfo.IsIE && attributes[i].nodeName == 'class' )
+			{
+				// IE has a strange bug. If calling removeAttribute('className'), 
+				// the attributes collection will still contain the "class"
+				// attribute, which will be marked as "specified", even if the
+				// outerHTML of the element is not displaying the class attribute.
+				// Note : I was not able to reproduce it outside the editor,
+				// but I've faced it while working on the TC of #1391.
+				if ( element.className.length > 0 )
+					return true ;
+			}
+			else if ( attributes[i].specified )
+				return true ;
+		}
+
+		return false ;
+	},
+
+	/**
+	 * Remove an attribute from an element.
+	 */
+	RemoveAttribute : function( element, attributeName )
+	{
+		if ( FCKBrowserInfo.IsIE && attributeName.toLowerCase() == 'class' )
+			attributeName = 'className' ;
+
+		return element.removeAttribute( attributeName, 0 ) ;
+	},
+
+	GetAttributeValue : function( element, att )
+	{
+		var attName = att ;
+
+		if ( typeof att == 'string' )
+			att = element.attributes[ att ] ;
+		else
+			attName = att.nodeName ;
+
+		if ( att && att.specified )
+		{
+			// IE returns "null" for the nodeValue of a "style" attribute.
+			if ( attName == 'style' )
+				return element.style.cssText ;
+			// There are two cases when the nodeValue must be used:
+			//		- for the "class" attribute (all browsers).
+			//		- for events attributes (IE only).
+			else if ( attName == 'class' || attName.indexOf('on') == 0 )
+				return att.nodeValue ;
+			else
+			{
+				// Use getAttribute to get its value  exactly as it is
+				// defined.
+				return element.getAttribute( attName, 2 ) ;
+			}
+		}
+		return null ;
+	},
+
+	/**
+	 * Checks whether one element contains the other.
+	 */
+	Contains : function( mainElement, otherElement )
+	{
+		// IE supports contains, but only for element nodes.
+		if ( mainElement.contains && otherElement.nodeType == 1 )
+			return mainElement.contains( otherElement ) ;
+
+		while ( ( otherElement = otherElement.parentNode ) )	// Only one "="
+		{
+			if ( otherElement == mainElement )
+				return true ;
+		}
+		return false ;
+	},
+
+	/**
+	 * Breaks a parent element in the position of one of its contained elements.
+	 * For example, in the following case:
+	 *		<b>This <i>is some<span /> sample</i> test text</b>
+	 * If element = <span />, we have these results:
+	 *		<b>This <i>is some</i><span /><i> sample</i> test text</b>			(If parent = <i>)
+	 *		<b>This <i>is some</i></b><span /><b<i> sample</i> test text</b>	(If parent = <b>)
+	 */
+	BreakParent : function( element, parent, reusableRange )
+	{
+		var range = reusableRange || new FCKDomRange( FCKTools.GetElementWindow( element ) ) ;
+
+		// We'll be extracting part of this element, so let's use our
+		// range to get the correct piece.
+		range.SetStart( element, 4 ) ;
+		range.SetEnd( parent, 4 ) ;
+
+		// Extract it.
+		var docFrag = range.ExtractContents() ;
+
+		// Move the element outside the broken element.
+		range.InsertNode( element.parentNode.removeChild( element ) ) ;
+
+		// Re-insert the extracted piece after the element.
+		docFrag.InsertAfterNode( element ) ;
+
+		range.Release( !!reusableRange ) ;
+	},
+
+	/**
+	 * Retrieves a uniquely identifiable tree address of a DOM tree node.
+	 * The tree address returns is an array of integers, with each integer
+	 * indicating a child index from a DOM tree node, starting from
+	 * document.documentElement.
+	 *
+	 * For example, assuming <body> is the second child from <html> (<head>
+	 * being the first), and we'd like to address the third child under the
+	 * fourth child of body, the tree address returned would be:
+	 * [1, 3, 2]
+	 *
+	 * The tree address cannot be used for finding back the DOM tree node once
+	 * the DOM tree structure has been modified.
+	 */
+	GetNodeAddress : function( node, normalized )
+	{
+		var retval = [] ;
+		while ( node && node != node.ownerDocument.documentElement )
+		{
+			var parentNode = node.parentNode ;
+			var currentIndex = -1 ;
+			for( var i = 0 ; i < parentNode.childNodes.length ; i++ )
+			{
+				var candidate = parentNode.childNodes[i] ;
+				if ( normalized === true && 
+						candidate.nodeType == 3 && 
+						candidate.previousSibling && 
+						candidate.previousSibling.nodeType == 3 )
+					continue;
+				currentIndex++ ;
+				if ( parentNode.childNodes[i] == node )
+					break ;
+			}
+			retval.unshift( currentIndex ) ;
+			node = node.parentNode ;
+		}
+		return retval ;
+	},
+
+	/**
+	 * The reverse transformation of FCKDomTools.GetNodeAddress(). This
+	 * function returns the DOM node pointed to by its index address.
+	 */
+	GetNodeFromAddress : function( doc, addr, normalized )
+	{
+		var cursor = doc.documentElement ;
+		for ( var i = 0 ; i < addr.length ; i++ )
+		{
+			var target = addr[i] ;
+			if ( ! normalized )
+			{
+				cursor = cursor.childNodes[target] ;
+				continue ;
+			}
+
+			var currentIndex = -1 ;
+			for (var j = 0 ; j < cursor.childNodes.length ; j++ )
+			{
+				var candidate = cursor.childNodes[j] ;
+				if ( normalized === true &&
+						candidate.nodeType == 3 &&
+						candidate.previousSibling &&
+						candidate.previousSibling.nodeType == 3 )
+					continue ;
+				currentIndex++ ;
+				if ( currentIndex == target )
+				{
+					cursor = candidate ;
+					break ;
+				}
+			}
+		}
+		return cursor ;
+	},
+
+	CloneElement : function( element )
+	{
+		element = element.cloneNode( false ) ;
+
+		// The "id" attribute should never be cloned to avoid duplication.
+		element.removeAttribute( 'id', false ) ;
+
+		return element ;
+	},
+
+	ClearElementJSProperty : function( element, attrName )
+	{
+		if ( FCKBrowserInfo.IsIE )
+			element.removeAttribute( attrName ) ;
+		else
+			delete element[attrName] ;
+	},
+
+	SetElementMarker : function ( markerObj, element, attrName, value)
+	{
+		var id = String( parseInt( Math.random() * 0xfffffff, 10 ) ) ;
+		element._FCKMarkerId = id ;
+		element[attrName] = value ;
+		if ( ! markerObj[id] )
+			markerObj[id] = { 'element' : element, 'markers' : {} } ;
+		markerObj[id]['markers'][attrName] = value ;
+	},
+
+	ClearElementMarkers : function( markerObj, element, clearMarkerObj )
+	{
+		var id = element._FCKMarkerId ;
+		if ( ! id )
+			return ;
+		this.ClearElementJSProperty( element, '_FCKMarkerId' ) ;
+		for ( var j in markerObj[id]['markers'] )
+			this.ClearElementJSProperty( element, j ) ;
+		if ( clearMarkerObj )
+			delete markerObj[id] ;
+	},
+
+	ClearAllMarkers : function( markerObj )
+	{
+		for ( var i in markerObj )
+			this.ClearElementMarkers( markerObj, markerObj[i]['element'], true ) ;
+	},
+
+	/**
+	 * Convert a DOM list tree into a data structure that is easier to
+	 * manipulate. This operation should be non-intrusive in the sense that it
+	 * does not change the DOM tree, with the exception that it may add some
+	 * markers to the list item nodes when markerObj is specified.
+	 */
+	ListToArray : function( listNode, markerObj, baseArray, baseIndentLevel, grandparentNode )
+	{
+		if ( ! listNode.nodeName.IEquals( ['ul', 'ol'] ) )
+			return [] ;
+
+		if ( ! baseIndentLevel )
+			baseIndentLevel = 0 ;
+		if ( ! baseArray )
+			baseArray = [] ;
+		// Iterate over all list items to get their contents and look for inner lists.
+		for ( var i = 0 ; i < listNode.childNodes.length ; i++ )
+		{
+			var listItem = listNode.childNodes[i] ;
+			if ( ! listItem.nodeName.IEquals( 'li' ) )
+				continue ;
+			var itemObj = { 'parent' : listNode, 'indent' : baseIndentLevel, 'contents' : [] } ;
+			if ( ! grandparentNode )
+			{
+				itemObj.grandparent = listNode.parentNode ;
+				if ( itemObj.grandparent && itemObj.grandparent.nodeName.IEquals( 'li' ) )
+					itemObj.grandparent = itemObj.grandparent.parentNode ;
+			}
+			else
+				itemObj.grandparent = grandparentNode ;
+			if ( markerObj )
+				this.SetElementMarker( markerObj, listItem, '_FCK_ListArray_Index', baseArray.length ) ;
+			baseArray.push( itemObj ) ;
+			for ( var j = 0 ; j < listItem.childNodes.length ; j++ )
+			{
+				var child = listItem.childNodes[j] ;
+				if ( child.nodeName.IEquals( ['ul', 'ol'] ) )
+					// Note the recursion here, it pushes inner list items with
+					// +1 indentation in the correct order.
+					this.ListToArray( child, markerObj, baseArray, baseIndentLevel + 1, itemObj.grandparent ) ;
+				else
+					itemObj.contents.push( child ) ;
+			}
+		}
+		return baseArray ;
+	},
+
+	// Convert our internal representation of a list back to a DOM forest.
+	ArrayToList : function( listArray, markerObj, baseIndex )
+	{
+		if ( baseIndex == undefined )
+			baseIndex = 0 ;
+		if ( ! listArray || listArray.length < baseIndex + 1 )
+			return null ;
+		var doc = listArray[baseIndex].parent.ownerDocument ;
+		var retval = doc.createDocumentFragment() ;
+		var rootNode = null ;
+		var currentIndex = baseIndex ;
+		var indentLevel = Math.max( listArray[baseIndex].indent, 0 ) ;
+		var currentListItem = null ;
+		while ( true )
+		{
+			var item = listArray[currentIndex] ;
+			if ( item.indent == indentLevel )
+			{
+				if ( ! rootNode || listArray[currentIndex].parent.nodeName != rootNode.nodeName )
+				{
+					rootNode = listArray[currentIndex].parent.cloneNode( false ) ;
+					retval.appendChild( rootNode ) ;
+				}
+				currentListItem = doc.createElement( 'li' ) ;
+				rootNode.appendChild( currentListItem ) ;
+				for ( var i = 0 ; i < item.contents.length ; i++ )
+					currentListItem.appendChild( item.contents[i].cloneNode( true ) ) ;
+				currentIndex++ ;
+			}
+			else if ( item.indent == Math.max( indentLevel, 0 ) + 1 )
+			{
+				var listData = this.ArrayToList( listArray, null, currentIndex ) ;
+				currentListItem.appendChild( listData.listNode ) ;
+				currentIndex = listData.nextIndex ;
+			}
+			else if ( item.indent == -1 && baseIndex == 0 && item.grandparent )
+			{
+				var currentListItem ;
+				if ( item.grandparent.nodeName.IEquals( ['ul', 'ol'] ) )
+					currentListItem = doc.createElement( 'li' ) ;
+				else
+				{
+					if ( FCKConfig.EnterMode.IEquals( ['div', 'p'] ) && ! item.grandparent.nodeName.IEquals( 'td' ) )
+						currentListItem = doc.createElement( FCKConfig.EnterMode ) ;
+					else
+						currentListItem = doc.createDocumentFragment() ;
+				}
+				for ( var i = 0 ; i < item.contents.length ; i++ )
+					currentListItem.appendChild( item.contents[i].cloneNode( true ) ) ;
+				if ( currentListItem.nodeType == 11 )
+				{
+					if ( currentListItem.lastChild && 
+							currentListItem.lastChild.getAttribute &&
+							currentListItem.lastChild.getAttribute( 'type' ) == '_moz' )
+						currentListItem.removeChild( currentListItem.lastChild );
+					currentListItem.appendChild( doc.createElement( 'br' ) ) ;
+				}
+				if ( currentListItem.nodeName.IEquals( FCKConfig.EnterMode ) && currentListItem.firstChild )
+				{
+					this.TrimNode( currentListItem ) ;
+					if ( FCKListsLib.BlockBoundaries[currentListItem.firstChild.nodeName.toLowerCase()] )
+					{
+						var tmp = doc.createDocumentFragment() ;
+						while ( currentListItem.firstChild )
+							tmp.appendChild( currentListItem.removeChild( currentListItem.firstChild ) ) ;
+						currentListItem = tmp ;
+					}
+				}
+				if ( FCKBrowserInfo.IsGeckoLike && currentListItem.nodeName.IEquals( ['div', 'p'] ) )
+					FCKTools.AppendBogusBr( currentListItem ) ;
+				retval.appendChild( currentListItem ) ;
+				rootNode = null ;
+				currentIndex++ ;
+			}
+			else
+				return null ;
+
+			if ( listArray.length <= currentIndex || Math.max( listArray[currentIndex].indent, 0 ) < indentLevel )
+			{
+				break ;
+			}
+		}
+
+		// Clear marker attributes for the new list tree made of cloned nodes, if any.
+		if ( markerObj )
+		{
+			var currentNode = retval.firstChild ;
+			while ( currentNode )
+			{
+				if ( currentNode.nodeType == 1 )
+					this.ClearElementMarkers( markerObj, currentNode ) ;
+				currentNode = this.GetNextSourceNode( currentNode ) ;
+			}
+		}
+
+		return { 'listNode' : retval, 'nextIndex' : currentIndex } ;
+	},
+
+	/**
+	 * Get the next sibling node for a node. If "includeEmpties" is false,
+	 * only element or non empty text nodes are returned.
+	 */
+	GetNextSibling : function( node, includeEmpties )
+	{
+		node = node.nextSibling ;
+
+		while ( node && !includeEmpties && node.nodeType != 1 && ( node.nodeType != 3 || node.nodeValue.length == 0 ) )
+			node = node.nextSibling ;
+
+		return node ;
+	},
+
+	/**
+	 * Get the previous sibling node for a node. If "includeEmpties" is false,
+	 * only element or non empty text nodes are returned.
+	 */
+	GetPreviousSibling : function( node, includeEmpties )
+	{
+		node = node.previousSibling ;
+
+		while ( node && !includeEmpties && node.nodeType != 1 && ( node.nodeType != 3 || node.nodeValue.length == 0 ) )
+			node = node.previousSibling ;
+
+		return node ;
+	},
+	
+	/**
+	 * Checks if an element has no "useful" content inside of it
+	 * node tree. No "useful" content means empty text node or a signle empty
+	 * inline node.
+	 * elementCheckCallback may point to a function that returns a boolean
+	 * indicating that a child element must be considered in the element check.
+	 */
+	CheckIsEmptyElement : function( element, elementCheckCallback )
+	{
+		var child = element.firstChild ;
+		var elementChild ;
+		
+		while ( child )
+		{
+			if ( child.nodeType == 1 )
+			{
+				if ( elementChild || !FCKListsLib.InlineNonEmptyElements[ child.nodeName.toLowerCase() ] )
+					return false ;
+				
+				if ( !elementCheckCallback || elementCheckCallback( child ) === true )
+					elementChild = child ;
+			}
+			else if ( child.nodeType == 3 && child.nodeValue.length > 0 )
+				return false ;
+			
+			child = child.nextSibling ;
+		}
+		
+		return elementChild ? this.CheckIsEmptyElement( elementChild, elementCheckCallback ) : true ;
+	},
+
+	SetElementStyles : function( element, styleDict )
+	{
+		var style = element.style ;
+		for ( var styleName in styleDict )
+			style[ styleName ] = styleDict[ styleName ] ;
+	}
+} ;
+
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fcklanguagemanager.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fcklanguagemanager.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fcklanguagemanager.js	(revision 1280)
@@ -0,0 +1,162 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Defines the FCKLanguageManager object that is used for language
+ * operations.
+ */
+
+var FCKLanguageManager = FCK.Language =
+{
+	AvailableLanguages :
+	{
+		af		: 'Afrikaans',
+		ar		: 'Arabic',
+		bg		: 'Bulgarian',
+		bn		: 'Bengali/Bangla',
+		bs		: 'Bosnian',
+		ca		: 'Catalan',
+		cs		: 'Czech',
+		da		: 'Danish',
+		de		: 'German',
+		el		: 'Greek',
+		en		: 'English',
+		'en-au'	: 'English (Australia)',
+		'en-ca'	: 'English (Canadian)',
+		'en-uk'	: 'English (United Kingdom)',
+		eo		: 'Esperanto',
+		es		: 'Spanish',
+		et		: 'Estonian',
+		eu		: 'Basque',
+		fa		: 'Persian',
+		fi		: 'Finnish',
+		fo		: 'Faroese',
+		fr		: 'French',
+		gl		: 'Galician',
+		he		: 'Hebrew',
+		hi		: 'Hindi',
+		hr		: 'Croatian',
+		hu		: 'Hungarian',
+		it		: 'Italian',
+		ja		: 'Japanese',
+		km		: 'Khmer',
+		ko		: 'Korean',
+		lt		: 'Lithuanian',
+		lv		: 'Latvian',
+		mn		: 'Mongolian',
+		ms		: 'Malay',
+		nb		: 'Norwegian Bokmal',
+		nl		: 'Dutch',
+		no		: 'Norwegian',
+		pl		: 'Polish',
+		pt		: 'Portuguese (Portugal)',
+		'pt-br'	: 'Portuguese (Brazil)',
+		ro		: 'Romanian',
+		ru		: 'Russian',
+		sk		: 'Slovak',
+		sl		: 'Slovenian',
+		sr		: 'Serbian (Cyrillic)',
+		'sr-latn'	: 'Serbian (Latin)',
+		sv		: 'Swedish',
+		th		: 'Thai',
+		tr		: 'Turkish',
+		uk		: 'Ukrainian',
+		vi		: 'Vietnamese',
+		zh		: 'Chinese Traditional',
+		'zh-cn'	: 'Chinese Simplified'
+	},
+
+	GetActiveLanguage : function()
+	{
+		if ( FCKConfig.AutoDetectLanguage )
+		{
+			var sUserLang ;
+
+			// IE accepts "navigator.userLanguage" while Gecko "navigator.language".
+			if ( navigator.userLanguage )
+				sUserLang = navigator.userLanguage.toLowerCase() ;
+			else if ( navigator.language )
+				sUserLang = navigator.language.toLowerCase() ;
+			else
+			{
+				// Firefox 1.0 PR has a bug: it doens't support the "language" property.
+				return FCKConfig.DefaultLanguage ;
+			}
+
+			// Some language codes are set in 5 characters,
+			// like "pt-br" for Brazilian Portuguese.
+			if ( sUserLang.length >= 5 )
+			{
+				sUserLang = sUserLang.substr(0,5) ;
+				if ( this.AvailableLanguages[sUserLang] ) return sUserLang ;
+			}
+
+			// If the user's browser is set to, for example, "pt-br" but only the
+			// "pt" language file is available then get that file.
+			if ( sUserLang.length >= 2 )
+			{
+				sUserLang = sUserLang.substr(0,2) ;
+				if ( this.AvailableLanguages[sUserLang] ) return sUserLang ;
+			}
+		}
+
+		return this.DefaultLanguage ;
+	},
+
+	TranslateElements : function( targetDocument, tag, propertyToSet, encode )
+	{
+		var e = targetDocument.getElementsByTagName(tag) ;
+		var sKey, s ;
+		for ( var i = 0 ; i < e.length ; i++ )
+		{
+			// The extra () is to avoid a warning with strict error checking. This is ok.
+			if ( (sKey = e[i].getAttribute( 'fckLang' )) )
+			{
+				// The extra () is to avoid a warning with strict error checking. This is ok.
+				if ( (s = FCKLang[ sKey ]) )
+				{
+					if ( encode )
+						s = FCKTools.HTMLEncode( s ) ;
+					e[i][ propertyToSet ] = s ;
+				}
+			}
+		}
+	},
+
+	TranslatePage : function( targetDocument )
+	{
+		this.TranslateElements( targetDocument, 'INPUT', 'value' ) ;
+		this.TranslateElements( targetDocument, 'SPAN', 'innerHTML' ) ;
+		this.TranslateElements( targetDocument, 'LABEL', 'innerHTML' ) ;
+		this.TranslateElements( targetDocument, 'OPTION', 'innerHTML', true ) ;
+		this.TranslateElements( targetDocument, 'LEGEND', 'innerHTML' ) ;
+	},
+
+	Initialize : function()
+	{
+		if ( this.AvailableLanguages[ FCKConfig.DefaultLanguage ] )
+			this.DefaultLanguage = FCKConfig.DefaultLanguage ;
+		else
+			this.DefaultLanguage = 'en' ;
+
+		this.ActiveLanguage = new Object() ;
+		this.ActiveLanguage.Code = this.GetActiveLanguage() ;
+		this.ActiveLanguage.Name = this.AvailableLanguages[ this.ActiveLanguage.Code ] ;
+	}
+} ;
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fcklisthandler.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fcklisthandler.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fcklisthandler.js	(revision 1280)
@@ -0,0 +1,152 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Tool object to manage HTML lists items (UL, OL and LI).
+ */
+
+var FCKListHandler =
+{
+	OutdentListItem : function( listItem )
+	{
+		var eParent = listItem.parentNode ;
+
+		// It may happen that a LI is not in a UL or OL (Orphan).
+		if ( eParent.tagName.toUpperCase().Equals( 'UL','OL' ) )
+		{
+			var oDocument = FCKTools.GetElementDocument( listItem ) ;
+			var oDogFrag = new FCKDocumentFragment( oDocument ) ;
+
+			// All children and successive siblings will be moved to a a DocFrag.
+			var eNextSiblings = oDogFrag.RootNode ;
+			var eHasLiSibling = false ;
+
+			// If we have nested lists inside it, let's move it to the list of siblings.
+			var eChildList = FCKDomTools.GetFirstChild( listItem, ['UL','OL'] ) ;
+			if ( eChildList )
+			{
+				eHasLiSibling = true ;
+
+				var eChild ;
+				// The extra () is to avoid a warning with strict error checking. This is ok.
+				while ( (eChild = eChildList.firstChild) )
+					eNextSiblings.appendChild( eChildList.removeChild( eChild ) ) ;
+
+				FCKDomTools.RemoveNode( eChildList ) ;
+			}
+
+			// Move all successive siblings.
+			var eSibling ;
+			var eHasSuccessiveLiSibling = false ;
+			// The extra () is to avoid a warning with strict error checking. This is ok.
+			while ( (eSibling = listItem.nextSibling) )
+			{
+				if ( !eHasLiSibling && eSibling.nodeType == 1 && eSibling.nodeName.toUpperCase() == 'LI' )
+					eHasSuccessiveLiSibling = eHasLiSibling = true ;
+
+				eNextSiblings.appendChild( eSibling.parentNode.removeChild( eSibling ) ) ;
+
+				// If a sibling is a incorrectly nested UL or OL, consider only its children.
+				if ( !eHasSuccessiveLiSibling && eSibling.nodeType == 1 && eSibling.nodeName.toUpperCase().Equals( 'UL','OL' ) )
+					FCKDomTools.RemoveNode( eSibling, true ) ;
+			}
+
+			// If we are in a list chain.
+			var sParentParentTag = eParent.parentNode.tagName.toUpperCase() ;
+			var bWellNested = ( sParentParentTag == 'LI' ) ;
+			if ( bWellNested || sParentParentTag.Equals( 'UL','OL' ) )
+			{
+				if ( eHasLiSibling )
+				{
+					var eChildList = eParent.cloneNode( false ) ;
+					oDogFrag.AppendTo( eChildList ) ;
+					listItem.appendChild( eChildList ) ;
+				}
+				else if ( bWellNested )
+					oDogFrag.InsertAfterNode( eParent.parentNode ) ;
+				else
+					oDogFrag.InsertAfterNode( eParent ) ;
+
+				// Move the LI after its parent.parentNode (the upper LI in the hierarchy).
+				if ( bWellNested )
+					FCKDomTools.InsertAfterNode( eParent.parentNode, eParent.removeChild( listItem ) ) ;
+				else
+					FCKDomTools.InsertAfterNode( eParent, eParent.removeChild( listItem ) ) ;
+			}
+			else
+			{
+				if ( eHasLiSibling )
+				{
+					var eNextList = eParent.cloneNode( false ) ;
+					oDogFrag.AppendTo( eNextList ) ;
+					FCKDomTools.InsertAfterNode( eParent, eNextList ) ;
+				}
+
+				var eBlock = oDocument.createElement( FCKConfig.EnterMode == 'p' ? 'p' : 'div' ) ;
+				FCKDomTools.MoveChildren( eParent.removeChild( listItem ), eBlock ) ;
+				FCKDomTools.InsertAfterNode( eParent, eBlock ) ;
+
+				if ( FCKConfig.EnterMode == 'br' )
+				{
+					// We need the bogus to make it work properly. In Gecko, we
+					// need it before the new block, on IE, after it.
+					if ( FCKBrowserInfo.IsGecko )
+						eBlock.parentNode.insertBefore( FCKTools.CreateBogusBR( oDocument ), eBlock ) ;
+					else
+						FCKDomTools.InsertAfterNode( eBlock, FCKTools.CreateBogusBR( oDocument ) ) ;
+
+					FCKDomTools.RemoveNode( eBlock, true ) ;
+				}
+			}
+
+			if ( this.CheckEmptyList( eParent ) )
+				FCKDomTools.RemoveNode( eParent, true ) ;
+		}
+	},
+
+	CheckEmptyList : function( listElement )
+	{
+		return ( FCKDomTools.GetFirstChild( listElement, 'LI' ) == null ) ;
+	},
+
+	// Check if the list has contents (excluding nested lists).
+	CheckListHasContents : function( listElement )
+	{
+		var eChildNode = listElement.firstChild ;
+
+		while ( eChildNode )
+		{
+			switch ( eChildNode.nodeType )
+			{
+				case 1 :
+					if ( !eChildNode.nodeName.IEquals( 'UL','LI' ) )
+						return true ;
+					break ;
+
+				case 3 :
+					if ( eChildNode.nodeValue.Trim().length > 0 )
+						return true ;
+			}
+
+			eChildNode = eChildNode.nextSibling ;
+		}
+
+		return false ;
+	}
+} ;
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fcklistslib.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fcklistslib.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fcklistslib.js	(revision 1280)
@@ -0,0 +1,60 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Library of keys collections.
+ *
+ * Test have shown that check for the existence of a key in an object is the
+ * most efficient list entry check (10x faster that regex). Example:
+ *		if ( FCKListsLib.<ListName>[key] != null )
+ */
+
+var FCKListsLib =
+{
+	// We are not handling <ins> and <del> as block elements, for now.
+	BlockElements : { address:1,blockquote:1,center:1,div:1,dl:1,fieldset:1,form:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,hr:1,marquee:1,noscript:1,ol:1,p:1,pre:1,script:1,table:1,ul:1 },
+
+	// Block elements that may be filled with &nbsp; if empty.
+	NonEmptyBlockElements : { p:1,div:1,form:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,address:1,pre:1,ol:1,ul:1,li:1,td:1,th:1 },
+
+	// Inline elements which MUST have child nodes.
+	InlineChildReqElements : { abbr:1,acronym:1,b:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,q:1,samp:1,small:1,span:1,strike:1,strong:1,sub:1,sup:1,tt:1,u:1,'var':1 },
+
+	// Inline elements which are not marked as empty "Empty" in the XHTML DTD.
+	InlineNonEmptyElements : { a:1,abbr:1,acronym:1,b:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,q:1,samp:1,small:1,span:1,strike:1,strong:1,sub:1,sup:1,tt:1,u:1,'var':1 },
+
+	// Elements marked as empty "Empty" in the XHTML DTD.
+	EmptyElements : { base:1,col:1,meta:1,link:1,hr:1,br:1,param:1,img:1,area:1,input:1 },
+
+	// Elements that may be considered the "Block boundary" in an element path.
+	PathBlockElements : { address:1,blockquote:1,dl:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,p:1,pre:1,li:1,dt:1,de:1 },
+
+	// Elements that may be considered the "Block limit" in an element path.
+	PathBlockLimitElements : { body:1,div:1,td:1,th:1,caption:1,form:1 },
+
+	// Block elements for the Styles System.
+	StyleBlockElements : { address:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,p:1,pre:1 },
+
+	// Object elements for the Styles System.
+	StyleObjectElements : { img:1,hr:1,li:1,table:1,tr:1,td:1,embed:1,object:1,ol:1,ul:1 },
+	
+	// Elements used to separate block contents.
+	BlockBoundaries : { p:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,hr:1,address:1,pre:1,ol:1,ul:1,li:1,dt:1,de:1,table:1,thead:1,tbody:1,tfoot:1,tr:1,th:1,td:1,caption:1,col:1,colgroup:1,blockquote:1,body:1 },
+	ListBoundaries  : { p:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,hr:1,address:1,pre:1,ol:1,ul:1,li:1,dt:1,de:1,table:1,thead:1,tbody:1,tfoot:1,tr:1,th:1,td:1,caption:1,col:1,colgroup:1,blockquote:1,body:1,br:1 }
+} ;
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fckplugins.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fckplugins.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fckplugins.js	(revision 1280)
@@ -0,0 +1,46 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Defines the FCKPlugins object that is responsible for loading the Plugins.
+ */
+
+var FCKPlugins = FCK.Plugins = new Object() ;
+FCKPlugins.ItemsCount = 0 ;
+FCKPlugins.Items = new Object() ;
+
+FCKPlugins.Load = function()
+{
+	var oItems = FCKPlugins.Items ;
+
+	// build the plugins collection.
+	for ( var i = 0 ; i < FCKConfig.Plugins.Items.length ; i++ )
+	{
+		var oItem = FCKConfig.Plugins.Items[i] ;
+		var oPlugin = oItems[ oItem[0] ] = new FCKPlugin( oItem[0], oItem[1], oItem[2] ) ;
+		FCKPlugins.ItemsCount++ ;
+	}
+
+	// Load all items in the plugins collection.
+	for ( var s in oItems )
+		oItems[s].Load() ;
+
+	// This is a self destroyable function (must be called once).
+	FCKPlugins.Load = null ;
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fckregexlib.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fckregexlib.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fckregexlib.js	(revision 1280)
@@ -0,0 +1,96 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * These are some Regular Expressions used by the editor.
+ */
+
+var FCKRegexLib =
+{
+// This is the Regular expression used by the SetData method for the "&apos;" entity.
+AposEntity		: /&apos;/gi ,
+
+// Used by the Styles combo to identify styles that can't be applied to text.
+ObjectElements	: /^(?:IMG|TABLE|TR|TD|TH|INPUT|SELECT|TEXTAREA|HR|OBJECT|A|UL|OL|LI)$/i ,
+
+// List all named commands (commands that can be interpreted by the browser "execCommand" method.
+NamedCommands	: /^(?:Cut|Copy|Paste|Print|SelectAll|RemoveFormat|Unlink|Undo|Redo|Bold|Italic|Underline|StrikeThrough|Subscript|Superscript|JustifyLeft|JustifyCenter|JustifyRight|JustifyFull|Outdent|Indent|InsertOrderedList|InsertUnorderedList|InsertHorizontalRule)$/i ,
+
+BeforeBody	: /(^[\s\S]*\<body[^\>]*\>)/i,
+AfterBody	: /(\<\/body\>[\s\S]*$)/i,
+
+// Temporary text used to solve some browser specific limitations.
+ToReplace		: /___fcktoreplace:([\w]+)/ig ,
+
+// Get the META http-equiv attribute from the tag.
+MetaHttpEquiv	: /http-equiv\s*=\s*["']?([^"' ]+)/i ,
+
+HasBaseTag		: /<base /i ,
+HasBodyTag		: /<body[\s|>]/i ,
+
+HtmlOpener		: /<html\s?[^>]*>/i ,
+HeadOpener		: /<head\s?[^>]*>/i ,
+HeadCloser		: /<\/head\s*>/i ,
+
+// Temporary classes (Tables without border, Anchors with content) used in IE
+FCK_Class		: /\s*FCK__[^ ]*(?=\s+|$)/ ,
+
+// Validate element names (it must be in lowercase).
+ElementName		: /(^[a-z_:][\w.\-:]*\w$)|(^[a-z_]$)/ ,
+
+// Used in conjunction with the FCKConfig.ForceSimpleAmpersand configuration option.
+ForceSimpleAmpersand : /___FCKAmp___/g ,
+
+// Get the closing parts of the tags with no closing tags, like <br/>... gets the "/>" part.
+SpaceNoClose	: /\/>/g ,
+
+// Empty elements may be <p></p> or even a simple opening <p> (see #211).
+EmptyParagraph	: /^<(p|div|address|h\d|center)(?=[ >])[^>]*>\s*(<\/\1>)?$/ ,
+
+EmptyOutParagraph : /^<(p|div|address|h\d|center)(?=[ >])[^>]*>(?:\s*|&nbsp;)(<\/\1>)?$/ ,
+
+TagBody			: /></ ,
+
+GeckoEntitiesMarker : /#\?-\:/g ,
+
+// We look for the "src" and href attribute with the " or ' or without one of
+// them. We have to do all in one, otherwise we will have problems with URLs
+// like "thumbnail.php?src=someimage.jpg" (SF-BUG 1554141).
+ProtectUrlsImg	: /<img(?=\s).*?\ssrc=((?:(?:\s*)("|').*?\2)|(?:[^"'][^ >]+))/gi ,
+ProtectUrlsA	: /<a(?=\s).*?\shref=((?:(?:\s*)("|').*?\2)|(?:[^"'][^ >]+))/gi ,
+
+Html4DocType	: /HTML 4\.0 Transitional/i ,
+DocTypeTag		: /<!DOCTYPE[^>]*>/i ,
+
+// These regex are used to save the original event attributes in the HTML.
+TagsWithEvent	: /<[^\>]+ on\w+[\s\r\n]*=[\s\r\n]*?('|")[\s\S]+?\>/g ,
+EventAttributes	: /\s(on\w+)[\s\r\n]*=[\s\r\n]*?('|")([\s\S]*?)\2/g,
+ProtectedEvents : /\s\w+_fckprotectedatt="([^"]+)"/g,
+
+StyleProperties : /\S+\s*:/g,
+
+// [a-zA-Z0-9:]+ seams to be more efficient than [\w:]+
+InvalidSelfCloseTags : /(<(?!base|meta|link|hr|br|param|img|area|input)([a-zA-Z0-9:]+)[^>]*)\/>/gi,
+
+// All variables defined in a style attribute or style definition. The variable
+// name is returned with $2.
+StyleVariableAttName : /#\(\s*("|')(.+?)\1[^\)]*\s*\)/g,
+
+RegExp : /^\/(.*)\/([gim]*)$/
+} ;
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fckselection.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fckselection.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fckselection.js	(revision 1280)
@@ -0,0 +1,42 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Active selection functions.
+ */
+
+var FCKSelection = FCK.Selection = 
+{
+	GetParentBlock : function()
+	{
+		var retval = this.GetParentElement() ;
+		while ( retval )
+		{
+			if ( FCKListsLib.BlockBoundaries[retval.nodeName.toLowerCase()] )
+				break ;
+			retval = retval.parentNode ;
+		}
+		return retval ;
+	},
+	
+	ApplyStyle : function( styleDefinition )
+	{
+		FCKStyles.ApplyStyle( new FCKStyle( styleDefinition ) ) ;
+	}
+} ;
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fckselection_gecko.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fckselection_gecko.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fckselection_gecko.js	(revision 1280)
@@ -0,0 +1,211 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Active selection functions. (Gecko specific implementation)
+ */
+
+// Get the selection type (like document.select.type in IE).
+FCKSelection.GetType = function()
+{
+	// By default set the type to "Text".
+	var type = 'Text' ;
+
+	// Check if the actual selection is a Control (IMG, TABLE, HR, etc...).
+
+	var sel ;
+	try { sel = FCK.EditorWindow.getSelection() ; } catch (e) {}
+
+	if ( sel && sel.rangeCount == 1 )
+	{
+		var range = sel.getRangeAt(0) ;
+		if ( range.startContainer == range.endContainer
+			&& ( range.endOffset - range.startOffset ) == 1
+			&& range.startContainer.nodeType == 1
+			&& FCKListsLib.StyleObjectElements[ range.startContainer.childNodes[ range.startOffset ].nodeName.toLowerCase() ] )
+		{
+			type = 'Control' ;
+		}
+	}
+
+	return type ;
+}
+
+// Retrieves the selected element (if any), just in the case that a single
+// element (object like and image or a table) is selected.
+FCKSelection.GetSelectedElement = function()
+{
+	var selectedElement = null ;
+
+	var selection = !!FCK.EditorWindow && FCK.EditorWindow.getSelection() ;
+
+	if ( selection && selection.anchorNode && selection.anchorNode.nodeType == 1 )
+	{
+		// This one is good for all browsers, expect Safari Mac.
+		selectedElement = selection.anchorNode.childNodes[ selection.anchorOffset ] ;
+
+		// For Safari (Mac only), the anchor node for a control selection is
+		// the control itself, which seams logic. FF and Opera use the parent
+		// as the anchor node, pointing to the control with the offset.
+		// As FF created the selection "standard", Safari would do better by
+		// following their steps.
+		if ( !selectedElement )
+			selectedElement = selection.anchorNode ;
+		else if ( selectedElement.nodeType != 1 )
+			return null ;
+	}
+
+	return selectedElement ;
+}
+
+FCKSelection.GetParentElement = function()
+{
+	if ( this.GetType() == 'Control' )
+		return FCKSelection.GetSelectedElement().parentNode ;
+	else
+	{
+		var oSel = FCK.EditorWindow.getSelection() ;
+		if ( oSel )
+		{
+			// make the common case fast - for collapsed/nearly collapsed selections just return anchor.parent.
+			if ( oSel.anchorNode && oSel.anchorNode == oSel.focusNode )
+				return oSel.anchorNode.parentNode ;
+
+			// looks like we're having a large selection here. To make the behavior same as IE's TextRange.parentElement(),
+			// we need to find the nearest ancestor node which encapsulates both the beginning and the end of the selection.
+			// TODO: A simpler logic can be found.
+			var anchorPath = new FCKElementPath( oSel.anchorNode ) ;
+			var focusPath = new FCKElementPath( oSel.focusNode ) ;
+			var deepPath = null ;
+			var shallowPath = null ;
+			if ( anchorPath.Elements.length > focusPath.Elements.length )
+			{
+				deepPath = anchorPath.Elements ;
+				shallowPath = focusPath.Elements ;
+			}
+			else
+			{
+				deepPath = focusPath.Elements ;
+				shallowPath = anchorPath.Elements ;
+			}
+
+			var deepPathBase = deepPath.length - shallowPath.length ;
+			for( var i = 0 ; i < shallowPath.length ; i++)
+			{
+				if ( deepPath[deepPathBase + i] == shallowPath[i])
+					return shallowPath[i];
+			}
+			return null ;
+		}
+	}
+	return null ;
+}
+
+FCKSelection.GetBoundaryParentElement = function( startBoundary )
+{
+	if ( ! FCK.EditorWindow )
+		return null ;
+	if ( this.GetType() == 'Control' )
+		return FCKSelection.GetSelectedElement().parentNode ;
+	else
+	{
+		var oSel = FCK.EditorWindow.getSelection() ;
+		if ( oSel && oSel.rangeCount > 0 )
+		{
+			var range = oSel.getRangeAt( startBoundary ? 0 : ( oSel.rangeCount - 1 ) ) ;
+
+			var element = startBoundary ? range.startContainer : range.endContainer ;
+
+			return ( element.nodeType == 1 ? element : element.parentNode ) ;
+		}
+	}
+	return null ;
+}
+
+FCKSelection.SelectNode = function( element )
+{
+	var oRange = FCK.EditorDocument.createRange() ;
+	oRange.selectNode( element ) ;
+
+	var oSel = FCK.EditorWindow.getSelection() ;
+	oSel.removeAllRanges() ;
+	oSel.addRange( oRange ) ;
+}
+
+FCKSelection.Collapse = function( toStart )
+{
+	var oSel = FCK.EditorWindow.getSelection() ;
+
+	if ( toStart == null || toStart === true )
+		oSel.collapseToStart() ;
+	else
+		oSel.collapseToEnd() ;
+}
+
+// The "nodeTagName" parameter must be Upper Case.
+FCKSelection.HasAncestorNode = function( nodeTagName )
+{
+	var oContainer = this.GetSelectedElement() ;
+	if ( ! oContainer && FCK.EditorWindow )
+	{
+		try		{ oContainer = FCK.EditorWindow.getSelection().getRangeAt(0).startContainer ; }
+		catch(e){}
+	}
+
+	while ( oContainer )
+	{
+		if ( oContainer.nodeType == 1 && oContainer.tagName == nodeTagName ) return true ;
+		oContainer = oContainer.parentNode ;
+	}
+
+	return false ;
+}
+
+// The "nodeTagName" parameter must be Upper Case.
+FCKSelection.MoveToAncestorNode = function( nodeTagName )
+{
+	var oNode ;
+
+	var oContainer = this.GetSelectedElement() ;
+	if ( ! oContainer )
+		oContainer = FCK.EditorWindow.getSelection().getRangeAt(0).startContainer ;
+
+	while ( oContainer )
+	{
+		if ( oContainer.nodeName == nodeTagName )
+			return oContainer ;
+
+		oContainer = oContainer.parentNode ;
+	}
+	return null ;
+}
+
+FCKSelection.Delete = function()
+{
+	// Gets the actual selection.
+	var oSel = FCK.EditorWindow.getSelection() ;
+
+	// Deletes the actual selection contents.
+	for ( var i = 0 ; i < oSel.rangeCount ; i++ )
+	{
+		oSel.getRangeAt(i).deleteContents() ;
+	}
+
+	return oSel ;
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fckselection_ie.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fckselection_ie.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fckselection_ie.js	(revision 1280)
@@ -0,0 +1,201 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Active selection functions. (IE specific implementation)
+ */
+
+// Get the selection type.
+FCKSelection.GetType = function()
+{
+	// It is possible that we can still get a text range object even when type=='None' is returned by IE.
+	// So we'd better check the object returned by createRange() rather than by looking at the type.
+	try
+	{
+		var ieType = FCK.EditorDocument.selection.type ;
+		if ( ieType == 'Control' || ieType == 'Text' )
+			return ieType ;
+
+		if ( FCK.EditorDocument.selection.createRange().parentElement )
+			return 'Text' ;
+	}
+	catch(e)
+	{
+		// Nothing to do, it will return None properly.
+	}
+
+	return 'None' ;
+} ;
+
+// Retrieves the selected element (if any), just in the case that a single
+// element (object like and image or a table) is selected.
+FCKSelection.GetSelectedElement = function()
+{
+	if ( this.GetType() == 'Control' )
+	{
+		var oRange = FCK.EditorDocument.selection.createRange() ;
+
+		if ( oRange && oRange.item )
+			return FCK.EditorDocument.selection.createRange().item(0) ;
+	}
+	return null ;
+} ;
+
+FCKSelection.GetParentElement = function()
+{
+	switch ( this.GetType() )
+	{
+		case 'Control' :
+			var el = FCKSelection.GetSelectedElement() ;
+			return el ? el.parentElement : null ;
+
+		case 'None' :
+			return null ;
+
+		default :
+			return FCK.EditorDocument.selection.createRange().parentElement() ;
+	}
+} ;
+
+FCKSelection.GetBoundaryParentElement = function( startBoundary )
+{
+	switch ( this.GetType() )
+	{
+		case 'Control' :
+			var el = FCKSelection.GetSelectedElement() ;
+			return el ? el.parentElement : null ;
+
+		case 'None' :
+			return null ;
+
+		default :
+			var doc = FCK.EditorDocument ;
+			
+			var range = doc.selection.createRange() ;
+			range.collapse( startBoundary !== false ) ;
+			
+			var el = range.parentElement() ;
+			
+			// It may happen that range is comming from outside "doc", so we
+			// must check it (#1204).
+			return FCKTools.GetElementDocument( el ) == doc ? el : null ;
+	}
+} ;
+
+FCKSelection.SelectNode = function( node )
+{
+	FCK.Focus() ;
+	FCK.EditorDocument.selection.empty() ;
+	var oRange ;
+	try
+	{
+		// Try to select the node as a control.
+		oRange = FCK.EditorDocument.body.createControlRange() ;
+		oRange.addElement( node ) ;
+	}
+	catch(e)
+	{
+		// If failed, select it as a text range.
+		oRange = FCK.EditorDocument.body.createTextRange() ;
+		oRange.moveToElementText( node ) ;
+	}
+
+	oRange.select() ;
+} ;
+
+FCKSelection.Collapse = function( toStart )
+{
+	FCK.Focus() ;
+	if ( this.GetType() == 'Text' )
+	{
+		var oRange = FCK.EditorDocument.selection.createRange() ;
+		oRange.collapse( toStart == null || toStart === true ) ;
+		oRange.select() ;
+	}
+} ;
+
+// The "nodeTagName" parameter must be Upper Case.
+FCKSelection.HasAncestorNode = function( nodeTagName )
+{
+	var oContainer ;
+
+	if ( FCK.EditorDocument.selection.type == "Control" )
+	{
+		oContainer = this.GetSelectedElement() ;
+	}
+	else
+	{
+		var oRange  = FCK.EditorDocument.selection.createRange() ;
+		oContainer = oRange.parentElement() ;
+	}
+
+	while ( oContainer )
+	{
+		if ( oContainer.tagName == nodeTagName ) return true ;
+		oContainer = oContainer.parentNode ;
+	}
+
+	return false ;
+} ;
+
+// The "nodeTagName" parameter must be UPPER CASE.
+FCKSelection.MoveToAncestorNode = function( nodeTagName )
+{
+	var oNode, oRange ;
+
+	if ( ! FCK.EditorDocument )
+		return null ;
+
+	if ( FCK.EditorDocument.selection.type == "Control" )
+	{
+		oRange = FCK.EditorDocument.selection.createRange() ;
+		for ( i = 0 ; i < oRange.length ; i++ )
+		{
+			if (oRange(i).parentNode)
+			{
+				oNode = oRange(i).parentNode ;
+				break ;
+			}
+		}
+	}
+	else
+	{
+		oRange  = FCK.EditorDocument.selection.createRange() ;
+		oNode = oRange.parentElement() ;
+	}
+
+	while ( oNode && oNode.nodeName != nodeTagName )
+		oNode = oNode.parentNode ;
+
+	return oNode ;
+} ;
+
+FCKSelection.Delete = function()
+{
+	// Gets the actual selection.
+	var oSel = FCK.EditorDocument.selection ;
+
+	// Deletes the actual selection contents.
+	if ( oSel.type.toLowerCase() != "none" )
+	{
+		oSel.clear() ;
+	}
+
+	return oSel ;
+} ;
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fckstyles.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fckstyles.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fckstyles.js	(revision 1280)
@@ -0,0 +1,375 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Handles styles in a give document.
+ */
+
+var FCKStyles = FCK.Styles =
+{
+	_Callbacks : {},
+	_ObjectStyles : {},
+
+	ApplyStyle : function( style )
+	{
+		if ( typeof style == 'string' )
+			style = this.GetStyles()[ style ] ;
+
+		if ( style )
+		{
+			if ( style.GetType() == FCK_STYLE_OBJECT )
+				style.ApplyToObject( FCKSelection.GetSelectedElement() ) ;
+			else
+				style.ApplyToSelection( FCK.EditorWindow ) ;
+
+			FCK.Events.FireEvent( 'OnSelectionChange' ) ;
+		}
+	},
+
+	RemoveStyle : function( style )
+	{
+		if ( typeof style == 'string' )
+			style = this.GetStyles()[ style ] ;
+
+		if ( style )
+		{
+			style.RemoveFromSelection( FCK.EditorWindow ) ;
+			FCK.Events.FireEvent( 'OnSelectionChange' ) ;
+		}
+	},
+
+	/**
+	 * Defines a callback function to be called when the current state of a
+	 * specific style changes.
+	 */
+	AttachStyleStateChange : function( styleName, callback, callbackOwner )
+	{
+		var callbacks = this._Callbacks[ styleName ] ;
+
+		if ( !callbacks )
+			callbacks = this._Callbacks[ styleName ] = [] ;
+
+		callbacks.push( [ callback, callbackOwner ] ) ;
+	},
+
+	CheckSelectionChanges : function()
+	{
+		var startElement = FCKSelection.GetBoundaryParentElement( true ) ;
+
+		if ( !startElement )
+			return ;
+
+		// Walks the start node parents path, checking all styles that are being listened.
+		var path = new FCKElementPath( startElement ) ;
+		var styles = this.GetStyles() ;
+
+		for ( var styleName in styles )
+		{
+			var callbacks = this._Callbacks[ styleName ] ;
+
+			if ( callbacks )
+			{
+				var style = styles[ styleName ] ;
+				var state = style.CheckActive( path ) ;
+
+				if ( style._LastState != state )
+				{
+					style._LastState = state ;
+
+					for ( var i = 0 ; i < callbacks.length ; i++ )
+					{
+						var callback = callbacks[i][0] ;
+						var callbackOwner = callbacks[i][1] ;
+
+						callback.call( callbackOwner || window, styleName, state ) ;
+					}
+				}
+			}
+		}
+	},
+
+	CheckStyleInSelection : function( styleName )
+	{
+		return false ;
+	},
+
+	_GetRemoveFormatTagsRegex : function ()
+	{
+		var regex = new RegExp( '^(?:' + FCKConfig.RemoveFormatTags.replace( /,/g,'|' ) + ')$', 'i' ) ;
+
+		return (this._GetRemoveFormatTagsRegex = function()
+		{
+			return regex ;
+		})
+		&& regex  ;
+	},
+
+	/**
+	 * Remove all styles from the current selection.
+	 * TODO:
+	 *  - This is almost a duplication of FCKStyle.RemoveFromRange. We should
+	 *    try to merge things.
+	 */
+	RemoveAll : function()
+	{
+		var range = new FCKDomRange( FCK.EditorWindow ) ;
+		range.MoveToSelection() ;
+
+		if ( range.CheckIsCollapsed() )
+			return ;
+
+			// Expand the range, if inside inline element boundaries.
+		range.Expand( 'inline_elements' ) ;
+
+		// Get the bookmark nodes.
+		// Bookmark the range so we can re-select it after processing.
+		var bookmark = range.CreateBookmark( true ) ;
+
+		// The style will be applied within the bookmark boundaries.
+		var startNode	= range.GetBookmarkNode( bookmark, true ) ;
+		var endNode		= range.GetBookmarkNode( bookmark, false ) ;
+
+		range.Release( true ) ;
+
+		var tagsRegex = this._GetRemoveFormatTagsRegex() ;
+
+		// We need to check the selection boundaries (bookmark spans) to break
+		// the code in a way that we can properly remove partially selected nodes.
+		// For example, removing a <b> style from
+		//		<b>This is [some text</b> to show <b>the] problem</b>
+		// ... where [ and ] represent the selection, must result:
+		//		<b>This is </b>[some text to show the]<b> problem</b>
+		// The strategy is simple, we just break the partial nodes before the
+		// removal logic, having something that could be represented this way:
+		//		<b>This is </b>[<b>some text</b> to show <b>the</b>]<b> problem</b>
+
+		// Let's start checking the start boundary.
+		var path = new FCKElementPath( startNode ) ;
+		var pathElements = path.Elements ;
+		var pathElement ;
+
+		for ( var i = 1 ; i < pathElements.length ; i++ )
+		{
+			pathElement = pathElements[i] ;
+
+			if ( pathElement == path.Block || pathElement == path.BlockLimit )
+				break ;
+
+			// If this element can be removed (even partially).
+			if ( tagsRegex.test( pathElement.nodeName ) )
+				FCKDomTools.BreakParent( startNode, pathElement, range ) ;
+		}
+
+		// Now the end boundary.
+		path = new FCKElementPath( endNode ) ;
+		pathElements = path.Elements ;
+
+		for ( var i = 1 ; i < pathElements.length ; i++ )
+		{
+			pathElement = pathElements[i] ;
+
+			if ( pathElement == path.Block || pathElement == path.BlockLimit )
+				break ;
+
+			elementName = pathElement.nodeName.toLowerCase() ;
+
+			// If this element can be removed (even partially).
+			if ( tagsRegex.test( pathElement.nodeName ) )
+				FCKDomTools.BreakParent( endNode, pathElement, range ) ;
+		}
+
+		// Navigate through all nodes between the bookmarks.
+		var currentNode = FCKDomTools.GetNextSourceNode( startNode, true, 1 ) ;
+
+		while ( currentNode )
+		{
+			// If we have reached the end of the selection, stop looping.
+			if ( currentNode == endNode )
+				break ;
+
+			// Cache the next node to be processed. Do it now, because
+			// currentNode may be removed.
+			var nextNode = FCKDomTools.GetNextSourceNode( currentNode, false, 1 ) ;
+
+			// Remove elements nodes that match with this style rules.
+			if ( tagsRegex.test( currentNode.nodeName ) )
+				FCKDomTools.RemoveNode( currentNode, true ) ;
+
+			currentNode = nextNode ;
+		}
+
+		range.SelectBookmark( bookmark ) ;
+
+		FCK.Events.FireEvent( 'OnSelectionChange' ) ;
+	},
+
+	GetStyle : function( styleName )
+	{
+		return this.GetStyles()[ styleName ] ;
+	},
+
+	GetStyles : function()
+	{
+		var styles = this._GetStyles ;
+		if ( !styles )
+		{
+			styles = this._GetStyles = FCKTools.Merge(
+				this._LoadStylesCore(),
+				this._LoadStylesCustom(),
+				this._LoadStylesXml() ) ;
+		}
+		return styles ;
+	},
+
+	CheckHasObjectStyle : function( elementName )
+	{
+		return !!this._ObjectStyles[ elementName ] ;
+	},
+
+	_LoadStylesCore : function()
+	{
+		var styles = {};
+		var styleDefs = FCKConfig.CoreStyles ;
+
+		for ( var styleName in styleDefs )
+		{
+			// Core styles are prefixed with _FCK_.
+			var style = styles[ '_FCK_' + styleName ] = new FCKStyle( styleDefs[ styleName ] ) ;
+			style.IsCore = true ;
+		}
+		return styles ;
+	},
+
+	_LoadStylesCustom : function()
+	{
+		var styles = {};
+		var styleDefs = FCKConfig.CustomStyles ;
+
+		if ( styleDefs )
+		{
+			for ( var styleName in styleDefs )
+			{
+				var style = styles[ styleName ] = new FCKStyle( styleDefs[ styleName ] ) ;
+				style.Name = styleName ;
+			}
+		}
+
+		return styles ;
+	},
+
+	_LoadStylesXml : function()
+	{
+		var styles = {};
+
+		var stylesXmlPath = FCKConfig.StylesXmlPath ;
+
+		if ( !stylesXmlPath || stylesXmlPath.length == 0 )
+			return styles ;
+
+		// Load the XML file into a FCKXml object.
+		var xml = new FCKXml() ;
+		xml.LoadUrl( stylesXmlPath ) ;
+
+		var stylesXmlObj = FCKXml.TransformToObject( xml.SelectSingleNode( 'Styles' ) ) ;
+
+		// Get the "Style" nodes defined in the XML file.
+		var styleNodes = stylesXmlObj.$Style ;
+
+		// Add each style to our "Styles" collection.
+		for ( var i = 0 ; i < styleNodes.length ; i++ )
+		{
+			var styleNode = styleNodes[i] ;
+
+			var element = ( styleNode.element || '' ).toLowerCase() ;
+
+			if ( element.length == 0 )
+				throw( 'The element name is required. Error loading "' + stylesXmlPath + '"' ) ;
+
+			var styleDef = {
+				Element : element,
+				Attributes : {},
+				Styles : {},
+				Overrides : []
+			} ;
+
+			// Get the attributes defined for the style (if any).
+			var attNodes = styleNode.$Attribute || [] ;
+
+			// Add the attributes to the style definition object.
+			for ( var j = 0 ; j < attNodes.length ; j++ )
+			{
+				styleDef.Attributes[ attNodes[j].name ] = attNodes[j].value ;
+			}
+
+			// Get the styles defined for the style (if any).
+			var cssStyleNodes = styleNode.$Style || [] ;
+
+			// Add the attributes to the style definition object.
+			for ( j = 0 ; j < cssStyleNodes.length ; j++ )
+			{
+				styleDef.Styles[ cssStyleNodes[j].name ] = cssStyleNodes[j].value ;
+			}
+
+			// Load override definitions.
+			var cssStyleOverrideNodes = styleNode.$Override ;
+			if ( cssStyleOverrideNodes )
+			{
+				for ( j = 0 ; j < cssStyleOverrideNodes.length ; j++ )
+				{
+					var overrideNode = cssStyleOverrideNodes[j] ;
+					var overrideDef =
+					{
+						Element : overrideNode.element
+					} ;
+
+					var overrideAttNode = overrideNode.$Attribute ;
+					if ( overrideAttNode )
+					{
+						overrideDef.Attributes = {} ;
+						for ( var k = 0 ; k < overrideAttNode.length ; k++ )
+						{
+							var overrideAttValue = overrideAttNode[k].value || null ;
+							if ( overrideAttValue )
+							{
+								// Check if the override attribute value is a regular expression.
+								var regexMatch = overrideAttValue && FCKRegexLib.RegExp.exec( overrideAttValue ) ;
+								if ( regexMatch )
+									overrideAttValue = new RegExp( regexMatch[1], regexMatch[2] || '' ) ;
+							}
+							overrideDef.Attributes[ overrideAttNode[k].name ] = overrideAttValue ;
+						}
+					}
+
+					styleDef.Overrides.push( overrideDef ) ;
+				}
+			}
+
+			var style = new FCKStyle( styleDef ) ;
+			style.Name = styleNode.name || element ;
+
+			if ( style.GetType() == FCK_STYLE_OBJECT )
+				this._ObjectStyles[ element ] = true ;
+
+			// Add the style to the "Styles" collection using it's name as the key.
+			styles[ style.Name ] = style ;
+		}
+
+		return styles ;
+	}
+} ;
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fcktablehandler.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fcktablehandler.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fcktablehandler.js	(revision 1280)
@@ -0,0 +1,858 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Manage table operations.
+ */
+
+var FCKTableHandler = new Object() ;
+
+FCKTableHandler.InsertRow = function( insertBefore )
+{
+	// Get the row where the selection is placed in.
+	var oRow = FCKSelection.MoveToAncestorNode( 'TR' ) ;
+	if ( !oRow ) return ;
+
+	// Create a clone of the row.
+	var oNewRow = oRow.cloneNode( true ) ;
+
+	// Insert the new row (copy) before of it.
+	oRow.parentNode.insertBefore( oNewRow, oRow ) ;
+
+	// Clean one of the rows to produce the illusion of inserting an empty row before or after.
+	FCKTableHandler.ClearRow( insertBefore ? oNewRow : oRow ) ;
+}
+
+FCKTableHandler.DeleteRows = function( row )
+{
+	// If no row has been passed as a parameter,
+	// then get the row( s ) containing the cells where the selection is placed in.
+	// If user selected multiple rows ( by selecting multiple cells ), walk
+	// the selected cell list and delete the rows containing the selected cells
+	if ( ! row )
+	{
+		var aCells = FCKTableHandler.GetSelectedCells() ;
+		var aRowsToDelete = new Array() ;
+		//queue up the rows -- it's possible ( and likely ) that we may get duplicates
+		for ( var i = 0; i < aCells.length; i++ )
+		{
+			var oRow = FCKTools.GetElementAscensor( aCells[i],'TR' ) ;
+			aRowsToDelete[oRow.rowIndex] = oRow ;
+		}
+		for ( var i = aRowsToDelete.length; i >= 0; i-- )
+		{
+			if ( aRowsToDelete[i] )
+				FCKTableHandler.DeleteRows( aRowsToDelete[i] );
+		}
+		return ;
+	}
+
+	// Get the row's table.
+	var oTable = FCKTools.GetElementAscensor( row, 'TABLE' ) ;
+
+	// If just one row is available then delete the entire table.
+	if ( oTable.rows.length == 1 )
+	{
+		FCKTableHandler.DeleteTable( oTable ) ;
+		return ;
+	}
+
+	// Delete the row.
+	row.parentNode.removeChild( row ) ;
+}
+
+FCKTableHandler.DeleteTable = function( table )
+{
+	// If no table has been passed as a parameter,
+	// then get the table where the selection is placed in.
+	if ( !table )
+	{
+		table = FCKSelection.GetSelectedElement() ;
+		if ( !table || table.tagName != 'TABLE' )
+			table = FCKSelection.MoveToAncestorNode( 'TABLE' ) ;
+	}
+	if ( !table ) return ;
+
+	// Delete the table.
+	FCKSelection.SelectNode( table ) ;
+	FCKSelection.Collapse();
+
+	// if the table is wrapped with a singleton <p> ( or something similar ), remove
+	// the surrounding tag -- which likely won't show after deletion anyway
+	if ( table.parentNode.childNodes.length == 1 )
+		table.parentNode.parentNode.removeChild( table.parentNode );
+	else
+		table.parentNode.removeChild( table  ) ;
+}
+
+FCKTableHandler.InsertColumn = function( insertBefore )
+{
+	// Get the cell where the selection is placed in.
+	var oCell = null ;
+	var nodes = this.GetSelectedCells() ;
+
+	if ( nodes && nodes.length )
+		oCell = nodes[ insertBefore ? 0 : ( nodes.length - 1 ) ] ;
+
+	if ( ! oCell )
+		return ;
+
+	// Get the cell's table.
+	var oTable = FCKTools.GetElementAscensor( oCell, 'TABLE' ) ;
+
+	var iIndex = oCell.cellIndex ;
+
+	// Loop throw all rows available in the table.
+	for ( var i = 0 ; i < oTable.rows.length ; i++ )
+	{
+		// Get the row.
+		var oRow = oTable.rows[i] ;
+
+		// If the row doens't have enough cells, ignore it.
+		if ( oRow.cells.length < ( iIndex + 1 ) )
+			continue ;
+
+		oCell = oRow.cells[iIndex].cloneNode(false) ;
+
+		if ( FCKBrowserInfo.IsGeckoLike )
+			FCKTools.AppendBogusBr( oCell ) ;
+
+		// Get back the currently selected cell.
+		var oBaseCell = oRow.cells[iIndex] ;
+
+		if ( insertBefore )
+			oRow.insertBefore( oCell, oBaseCell ) ;
+		else if ( oBaseCell.nextSibling )
+			oRow.insertBefore( oCell, oBaseCell.nextSibling ) ;
+		else
+			oRow.appendChild( oCell ) ;
+	}
+}
+
+FCKTableHandler.DeleteColumns = function( oCell )
+{
+	// if user selected multiple cols ( by selecting multiple cells ), walk
+	// the selected cell list and delete the rows containing the selected cells
+	if ( !oCell  )
+	{
+		var aColsToDelete = FCKTableHandler.GetSelectedCells();
+		for ( var i = aColsToDelete.length; i >= 0; i--  )
+		{
+			if ( aColsToDelete[i]  )
+				FCKTableHandler.DeleteColumns( aColsToDelete[i]  );
+		}
+		return;
+	}
+
+	if ( !oCell ) return ;
+
+	// Get the cell's table.
+	var oTable = FCKTools.GetElementAscensor( oCell, 'TABLE' ) ;
+
+	// Get the cell index.
+	var iIndex = oCell.cellIndex ;
+
+	// Loop throw all rows (from down to up, because it's possible that some
+	// rows will be deleted).
+	for ( var i = oTable.rows.length - 1 ; i >= 0 ; i-- )
+	{
+		// Get the row.
+		var oRow = oTable.rows[i] ;
+
+		// If the cell to be removed is the first one and the row has just one cell.
+		if ( iIndex == 0 && oRow.cells.length == 1 )
+		{
+			// Remove the entire row.
+			FCKTableHandler.DeleteRows( oRow ) ;
+			continue ;
+		}
+
+		// If the cell to be removed exists the delete it.
+		if ( oRow.cells[iIndex] )
+			oRow.removeChild( oRow.cells[iIndex] ) ;
+	}
+}
+
+FCKTableHandler.InsertCell = function( cell, insertBefore )
+{
+	// Get the cell where the selection is placed in.
+	var oCell = null ;
+	var nodes = this.GetSelectedCells() ;
+	if ( nodes && nodes.length )
+		oCell = nodes[ insertBefore ? 0 : ( nodes.length - 1 ) ] ;
+	if ( ! oCell )
+		return null ;
+
+	// Create the new cell element to be added.
+	var oNewCell = FCK.EditorDocument.createElement( 'TD' ) ;
+	if ( FCKBrowserInfo.IsGeckoLike )
+		FCKTools.AppendBogusBr( oNewCell ) ;
+
+	if ( !insertBefore && oCell.cellIndex == oCell.parentNode.cells.length - 1 )
+		oCell.parentNode.appendChild( oNewCell ) ;
+	else
+		oCell.parentNode.insertBefore( oNewCell, insertBefore ? oCell : oCell.nextSibling ) ;
+
+	return oNewCell ;
+}
+
+FCKTableHandler.DeleteCell = function( cell )
+{
+	// If this is the last cell in the row.
+	if ( cell.parentNode.cells.length == 1 )
+	{
+		// Delete the entire row.
+		FCKTableHandler.DeleteRows( FCKTools.GetElementAscensor( cell, 'TR' ) ) ;
+		return ;
+	}
+
+	// Delete the cell from the row.
+	cell.parentNode.removeChild( cell ) ;
+}
+
+FCKTableHandler.DeleteCells = function()
+{
+	var aCells = FCKTableHandler.GetSelectedCells() ;
+
+	for ( var i = aCells.length - 1 ; i >= 0  ; i-- )
+	{
+		FCKTableHandler.DeleteCell( aCells[i] ) ;
+	}
+}
+
+FCKTableHandler._MarkCells = function( cells, label )
+{
+	for ( var i = 0 ; i < cells.length ; i++ )
+		cells[i][label] = true ;
+}
+
+FCKTableHandler._UnmarkCells = function( cells, label )
+{
+	for ( var i = 0 ; i < cells.length ; i++ )
+	{
+		if ( FCKBrowserInfo.IsIE )
+			cells[i].removeAttribute( label ) ;
+		else
+			delete cells[i][label] ;
+	}
+}
+
+FCKTableHandler._ReplaceCellsByMarker = function( tableMap, marker, substitute )
+{
+	for ( var i = 0 ; i < tableMap.length ; i++ )
+	{
+		for ( var j = 0 ; j < tableMap[i].length ; j++ )
+		{
+			if ( tableMap[i][j][marker] )
+				tableMap[i][j] = substitute ;
+		}
+	}
+}
+
+FCKTableHandler._GetMarkerGeometry = function( tableMap, rowIdx, colIdx, markerName )
+{
+	var selectionWidth = 0 ;
+	var selectionHeight = 0 ;
+	var cellsLeft = 0 ;
+	var cellsUp = 0 ;
+	for ( var i = colIdx ; tableMap[rowIdx][i] && tableMap[rowIdx][i][markerName] ; i++ )
+		selectionWidth++ ;
+	for ( var i = colIdx - 1 ; tableMap[rowIdx][i] && tableMap[rowIdx][i][markerName] ; i-- )
+	{
+		selectionWidth++ ;
+		cellsLeft++ ;
+	}
+	for ( var i = rowIdx ; tableMap[i] && tableMap[i][colIdx] && tableMap[i][colIdx][markerName] ; i++ )
+		selectionHeight++ ;
+	for ( var i = rowIdx - 1 ; tableMap[i] && tableMap[i][colIdx] && tableMap[i][colIdx][markerName] ; i-- )
+	{
+		selectionHeight++ ;
+		cellsUp++ ;
+	}
+	return { 'width' : selectionWidth, 'height' : selectionHeight, 'x' : cellsLeft, 'y' : cellsUp } ;
+}
+
+FCKTableHandler.CheckIsSelectionRectangular = function()
+{
+	// If every row and column in an area on a plane are of the same width and height,
+	// Then the area is a rectangle.
+	var cells = FCKTableHandler.GetSelectedCells() ;
+	if ( cells.length < 1 )
+		return false ;
+
+	this._MarkCells( cells, '_CellSelected' ) ;
+
+	var tableMap = this._CreateTableMap( cells[0].parentNode.parentNode ) ;
+	var rowIdx = cells[0].parentNode.rowIndex ;
+	var colIdx = this._GetCellIndexSpan( tableMap, rowIdx, cells[0] ) ;
+
+	var geometry = this._GetMarkerGeometry( tableMap, rowIdx, colIdx, '_CellSelected' ) ;
+	var baseColIdx = colIdx - geometry.x ;
+	var baseRowIdx = rowIdx - geometry.y ;
+
+	if ( geometry.width >= geometry.height )
+	{
+		for ( colIdx = baseColIdx ; colIdx < baseColIdx + geometry.width ; colIdx++ )
+		{
+			rowIdx = baseRowIdx + ( colIdx - baseColIdx ) % geometry.height ;
+			if ( ! tableMap[rowIdx] || ! tableMap[rowIdx][colIdx] )
+			{
+				this._UnmarkCells( cells, '_CellSelected' ) ;
+				return false ;
+			}
+			var g = this._GetMarkerGeometry( tableMap, rowIdx, colIdx, '_CellSelected' ) ;
+			if ( g.width != geometry.width || g.height != geometry.height )
+			{
+				this._UnmarkCells( cells, '_CellSelected' ) ;
+				return false ;
+			}
+		}
+	}
+	else
+	{
+		for ( rowIdx = baseRowIdx ; rowIdx < baseRowIdx + geometry.height ; rowIdx++ )
+		{
+			colIdx = baseColIdx + ( rowIdx - baseRowIdx ) % geometry.width ;
+			if ( ! tableMap[rowIdx] || ! tableMap[rowIdx][colIdx] )
+			{
+				this._UnmarkCells( cells, '_CellSelected' ) ;
+				return false ;
+			}
+			var g = this._GetMarkerGeometry( tableMap, rowIdx, colIdx, '_CellSelected' ) ;
+			if ( g.width != geometry.width || g.height != geometry.height )
+			{
+				this._UnmarkCells( cells, '_CellSelected' ) ;
+				return false ;
+			}
+		}
+	}
+
+	this._UnmarkCells( cells, '_CellSelected' ) ;
+	return true ;
+}
+
+FCKTableHandler.MergeCells = function()
+{
+	// Get all selected cells.
+	var cells = this.GetSelectedCells() ;
+	if ( cells.length < 2 )
+		return ;
+
+	// Assume the selected cells are already in a rectangular geometry.
+	// Because the checking is already done by FCKTableCommand.
+	var refCell = cells[0] ;
+	var tableMap = this._CreateTableMap( refCell.parentNode.parentNode ) ;
+	var rowIdx = refCell.parentNode.rowIndex ;
+	var colIdx = this._GetCellIndexSpan( tableMap, rowIdx, refCell ) ;
+
+	this._MarkCells( cells, '_SelectedCells' ) ;
+	var selectionGeometry = this._GetMarkerGeometry( tableMap, rowIdx, colIdx, '_SelectedCells' ) ;
+
+	var baseColIdx = colIdx - selectionGeometry.x ;
+	var baseRowIdx = rowIdx - selectionGeometry.y ;
+	var cellContents = refCell.ownerDocument.createDocumentFragment() ;
+	for ( var i = 0 ; i < selectionGeometry.height ; i++ ) 
+	{
+		var rowChildNodesCount = 0 ;
+		for ( var j = 0 ; j < selectionGeometry.width ; j++ )
+		{
+			var currentCell = tableMap[baseRowIdx + i][baseColIdx + j] ;
+			while ( currentCell.childNodes.length > 0 )
+			{
+				var node = currentCell.removeChild( currentCell.firstChild ) ;
+				if ( node.nodeType != 1 
+					|| ( node.getAttribute( 'type', 2 ) != '_moz' && node.getAttribute( '_moz_dirty' ) != null ) )
+				{
+					cellContents.appendChild( node ) ;
+					rowChildNodesCount++ ;
+				}
+			}
+		}
+		if ( rowChildNodesCount > 0 )
+			cellContents.appendChild( refCell.ownerDocument.createElement( 'br' ) ) ;
+	}
+
+	this._ReplaceCellsByMarker( tableMap, '_SelectedCells', refCell ) ;
+	this._UnmarkCells( cells, '_SelectedCells' ) ;
+	this._InstallTableMap( tableMap, refCell.parentNode.parentNode ) ;
+	refCell.appendChild( cellContents ) ;
+	
+	if ( FCKBrowserInfo.IsGeckoLike && ( ! refCell.firstChild ) )
+		FCKTools.AppendBogusBr( refCell ) ;
+
+	this._MoveCaretToCell( refCell, false ) ;
+}
+
+FCKTableHandler.MergeRight = function()
+{
+	var target = this.GetMergeRightTarget() ;
+	if ( target == null )
+		return ;
+	var refCell = target.refCell ;
+	var tableMap = target.tableMap ;
+	var nextCell = target.nextCell ; 
+
+	var cellContents = FCK.EditorDocument.createDocumentFragment() ;
+	while ( nextCell && nextCell.childNodes && nextCell.childNodes.length > 0 )
+		cellContents.appendChild( nextCell.removeChild( nextCell.firstChild ) ) ;
+
+	nextCell.parentNode.removeChild( nextCell ) ;
+	refCell.appendChild( cellContents ) ;
+	this._MarkCells( [nextCell], '_Replace' ) ;
+	this._ReplaceCellsByMarker( tableMap, '_Replace', refCell ) ;
+	this._InstallTableMap( tableMap, refCell.parentNode.parentNode ) ;
+
+	this._MoveCaretToCell( refCell, false ) ;
+}
+
+FCKTableHandler.MergeDown = function()
+{
+	var target = this.GetMergeDownTarget() ;
+	if ( target == null )
+		return ;
+	var refCell = target.refCell ;
+	var tableMap = target.tableMap ;
+	var nextCell = target.nextCell ;
+
+	var cellContents = refCell.ownerDocument.createDocumentFragment() ;
+	while ( nextCell && nextCell.childNodes && nextCell.childNodes.length > 0 )
+		cellContents.appendChild( nextCell.removeChild( nextCell.firstChild ) ) ;
+	if ( cellContents.firstChild )
+		cellContents.insertBefore( nextCell.ownerDocument.createElement( 'br' ), cellContents.firstChild ) ;
+	refCell.appendChild( cellContents ) ;
+	this._MarkCells( [nextCell], '_Replace' ) ;
+	this._ReplaceCellsByMarker( tableMap, '_Replace', refCell ) ;
+	this._InstallTableMap( tableMap, refCell.parentNode.parentNode ) ;
+
+	this._MoveCaretToCell( refCell, false ) ;
+}
+
+FCKTableHandler.HorizontalSplitCell = function()
+{
+	var cells = FCKTableHandler.GetSelectedCells() ;
+	if ( cells.length != 1 )
+		return ;
+
+	var refCell = cells[0] ;
+	var tableMap = this._CreateTableMap( refCell.parentNode.parentNode ) ;
+	var rowIdx = refCell.parentNode.rowIndex ;
+	var colIdx = FCKTableHandler._GetCellIndexSpan( tableMap, rowIdx, refCell ) ;
+	var cellSpan = isNaN( refCell.colSpan ) ? 1 : refCell.colSpan ;
+
+	if ( cellSpan > 1 )
+	{
+		// Splittng a multi-column cell - original cell gets ceil(colSpan/2) columns,
+		// new cell gets floor(colSpan/2).
+		var newCellSpan = Math.ceil( cellSpan / 2 ) ;
+		var newCell = refCell.ownerDocument.createElement( 'td' ) ;
+		if ( FCKBrowserInfo.IsGeckoLike )
+			FCKTools.AppendBogusBr( newCell ) ;
+		var startIdx = colIdx + newCellSpan ;
+		var endIdx = colIdx + cellSpan ;
+		var rowSpan = isNaN( refCell.rowSpan ) ? 1 : refCell.rowSpan ;
+		for ( var r = rowIdx ; r < rowIdx + rowSpan ; r++ )
+		{
+			for ( var i = startIdx ; i < endIdx ; i++ )
+				tableMap[r][i] = newCell ;
+		}
+	}
+	else
+	{
+		// Splitting a single-column cell - add a new cell, and expand 
+		// cells crossing the same column.
+		var newTableMap = [] ;
+		for ( var i = 0 ; i < tableMap.length ; i++ ) 
+		{
+			var newRow = tableMap[i].slice( 0, colIdx ) ;
+			if ( tableMap[i].length <= colIdx )
+			{
+				newTableMap.push( newRow ) ;
+				continue ;
+			}
+			if ( tableMap[i][colIdx] == refCell )
+			{
+				newRow.push( refCell ) ;
+				newRow.push( refCell.ownerDocument.createElement( 'td' ) ) ;
+				if ( FCKBrowserInfo.IsGeckoLike )
+					FCKTools.AppendBogusBr( newRow[newRow.length - 1] ) ;
+			}
+			else
+			{
+				newRow.push( tableMap[i][colIdx] ) ;
+				newRow.push( tableMap[i][colIdx] ) ;
+			}
+			for ( var j = colIdx + 1 ; j < tableMap[i].length ; j++ )
+				newRow.push( tableMap[i][j] ) ;
+			newTableMap.push( newRow ) ;
+		}
+		tableMap = newTableMap ;
+	}
+
+	this._InstallTableMap( tableMap, refCell.parentNode.parentNode ) ;
+}
+
+FCKTableHandler.VerticalSplitCell = function()
+{
+	var cells = FCKTableHandler.GetSelectedCells() ;
+	if ( cells.length != 1 )
+		return ;
+
+	var currentCell = cells[0] ;
+	var tableMap = this._CreateTableMap( currentCell.parentNode.parentNode ) ;
+	var cellIndex = FCKTableHandler._GetCellIndexSpan( tableMap, currentCell.parentNode.rowIndex, currentCell ) ;
+	var currentRowSpan = currentCell.rowSpan ;
+	var currentRowIndex = currentCell.parentNode.rowIndex ;
+	if ( isNaN( currentRowSpan ) )
+		currentRowSpan = 1 ;
+
+	if ( currentRowSpan > 1 )
+	{
+		// 1. Set the current cell's rowSpan to 1.
+		currentCell.rowSpan = Math.ceil( currentRowSpan / 2 ) ;
+
+		// 2. Find the appropriate place to insert a new cell at the next row.
+		var newCellRowIndex = currentRowIndex + Math.ceil( currentRowSpan / 2 ) ;
+		var insertMarker = null ;
+		for ( var i = cellIndex+1 ; i < tableMap[newCellRowIndex].length ; i++ )
+		{
+			if ( tableMap[newCellRowIndex][i].parentNode.rowIndex == newCellRowIndex )
+			{
+				insertMarker = tableMap[newCellRowIndex][i] ;
+				break ;
+			}
+		}
+
+		// 3. Insert the new cell to the indicated place, with the appropriate rowSpan, next row.
+		var newCell = FCK.EditorDocument.createElement( 'td' ) ;
+		newCell.rowSpan = Math.floor( currentRowSpan / 2 ) ;
+		if ( FCKBrowserInfo.IsGeckoLike )
+			FCKTools.AppendBogusBr( newCell ) ;
+		currentCell.parentNode.parentNode.rows[newCellRowIndex].insertBefore( newCell, insertMarker ) ;
+	}
+	else
+	{
+		// 1. Insert a new row.
+		var newCellRowIndex = currentRowIndex + 1 ;
+		var newRow = FCK.EditorDocument.createElement( 'tr' ) ;
+		currentCell.parentNode.parentNode.insertBefore( newRow, currentCell.parentNode.parentNode.rows[newCellRowIndex] ) ;
+		
+		// 2. +1 to rowSpan for all cells crossing currentCell's row.
+		for ( var i = 0 ; i < tableMap[currentRowIndex].length ; )
+		{
+			var colSpan = tableMap[currentRowIndex][i].colSpan ;
+			if ( isNaN( colSpan ) || colSpan < 1 )
+				colSpan = 1 ;
+			if ( i == cellIndex )
+			{
+				i += colSpan ;
+				continue ;
+			}
+			var rowSpan = tableMap[currentRowIndex][i].rowSpan ;
+			if ( isNaN( rowSpan ) )
+				rowSpan = 1 ;
+			tableMap[currentRowIndex][i].rowSpan = rowSpan + 1 ;
+			i += colSpan ;
+		}
+
+		// 3. Insert a new cell to new row.
+		var newCell = FCK.EditorDocument.createElement( 'td' ) ;
+		if ( FCKBrowserInfo.IsGeckoLike )
+			FCKTools.AppendBogusBr( newCell	) ;
+		newRow.appendChild( newCell ) ;
+	}
+}
+
+// Get the cell index from a TableMap.
+FCKTableHandler._GetCellIndexSpan = function( tableMap, rowIndex, cell )
+{
+	if ( tableMap.length < rowIndex + 1 )
+		return null ;
+
+	var oRow = tableMap[ rowIndex ] ;
+
+	for ( var c = 0 ; c < oRow.length ; c++ )
+	{
+		if ( oRow[c] == cell )
+			return c ;
+	}
+
+	return null ;
+}
+
+// Get the cell location from a TableMap. Returns an array with an [x,y] location
+FCKTableHandler._GetCellLocation = function( tableMap, cell  )
+{
+	for ( var i = 0 ; i < tableMap.length; i++ )
+	{
+		for ( var c = 0 ; c < tableMap[i].length ; c++  )
+		{
+			if ( tableMap[i][c] == cell  ) return [i,c];
+		}
+	}
+	return null ;
+}
+
+// Get the cells available in a column of a TableMap.
+FCKTableHandler._GetColumnCells = function( tableMap, columnIndex )
+{
+	var aCollCells = new Array() ;
+
+	for ( var r = 0 ; r < tableMap.length ; r++ )
+	{
+		var oCell = tableMap[r][columnIndex] ;
+		if ( oCell && ( aCollCells.length == 0 || aCollCells[ aCollCells.length - 1 ] != oCell ) )
+			aCollCells[ aCollCells.length ] = oCell ;
+	}
+
+	return aCollCells ;
+}
+
+// This function is quite hard to explain. It creates a matrix representing all cells in a table.
+// The difference here is that the "spanned" cells (colSpan and rowSpan) are duplicated on the matrix
+// cells that are "spanned". For example, a row with 3 cells where the second cell has colSpan=2 and rowSpan=3
+// will produce a bi-dimensional matrix with the following values (representing the cells):
+//		Cell1, Cell2, Cell2, Cell 3
+//		Cell4, Cell2, Cell2, Cell 5
+FCKTableHandler._CreateTableMap = function( table )
+{
+	var aRows = table.rows ;
+
+	// Row and Column counters.
+	var r = -1 ;
+
+	var aMap = new Array() ;
+
+	for ( var i = 0 ; i < aRows.length ; i++ )
+	{
+		r++ ;
+		if ( !aMap[r] )
+			aMap[r] = new Array() ;
+
+		var c = -1 ;
+
+		for ( var j = 0 ; j < aRows[i].cells.length ; j++ )
+		{
+			var oCell = aRows[i].cells[j] ;
+
+			c++ ;
+			while ( aMap[r][c] )
+				c++ ;
+
+			var iColSpan = isNaN( oCell.colSpan ) ? 1 : oCell.colSpan ;
+			var iRowSpan = isNaN( oCell.rowSpan ) ? 1 : oCell.rowSpan ;
+
+			for ( var rs = 0 ; rs < iRowSpan ; rs++ )
+			{
+				if ( !aMap[r + rs] )
+					aMap[r + rs] = new Array() ;
+
+				for ( var cs = 0 ; cs < iColSpan ; cs++ )
+				{
+					aMap[r + rs][c + cs] = aRows[i].cells[j] ;
+				}
+			}
+
+			c += iColSpan - 1 ;
+		}
+	}
+	return aMap ;
+}
+
+// This function is the inverse of _CreateTableMap - it takes in a table map and converts it to an HTML table.
+FCKTableHandler._InstallTableMap = function( tableMap, table )
+{
+	// Clear the table of all rows first.
+	while ( table.rows.length > 0 )
+	{
+		var row = table.rows[0] ;
+		row.parentNode.removeChild( row ) ;
+	}
+
+	// Disconnect all the cells in tableMap from their parents, set all colSpan and rowSpan attributes to 1.
+	for ( var i = 0 ; i < tableMap.length ; i++ )
+	{
+		for ( var j = 0 ; j < tableMap[i].length ; j++ )
+		{
+			var cell = tableMap[i][j] ;
+			if ( cell.parentNode )
+				cell.parentNode.removeChild( cell ) ;
+			cell.colSpan = cell.rowSpan = 1 ;
+		}
+	}
+
+	// Scan by rows and set colSpan.
+	var maxCol = 0 ;
+	for ( var i = 0 ; i < tableMap.length ; i++ )
+	{
+		for ( var j = 0 ; j < tableMap[i].length ; j++ )
+		{
+			var cell = tableMap[i][j] ;
+			if ( ! cell)
+				continue ;
+			if ( j > maxCol )
+				maxCol = j ;
+			if ( cell._colScanned === true )
+				continue ;
+			if ( tableMap[i][j-1] == cell )
+				cell.colSpan++ ;
+			if ( tableMap[i][j+1] != cell )
+				cell._colScanned = true ;
+		}
+	}
+
+	// Scan by columns and set rowSpan.
+	for ( var i = 0 ; i <= maxCol ; i++ )
+	{
+		for ( var j = 0 ; j < tableMap.length ; j++ )
+		{
+			if ( ! tableMap[j] )
+				continue ;
+			var cell = tableMap[j][i] ;
+			if ( ! cell || cell._rowScanned === true )
+				continue ;
+			if ( tableMap[j-1] && tableMap[j-1][i] == cell )
+				cell.rowSpan++ ;
+			if ( ! tableMap[j+1] || tableMap[j+1][i] != cell )
+				cell._rowScanned = true ;
+		}
+	}
+
+	// Clear all temporary flags.
+	for ( var i = 0 ; i < tableMap.length ; i++ )
+	{
+		for ( var j = 0 ; j < tableMap[i].length ; j++)
+		{
+			var cell = tableMap[i][j] ;
+			if ( FCKBrowserInfo.IsIE )
+			{
+				cell.removeAttribute( '_colScanned' ) ;
+				cell.removeAttribute( '_rowScanned' ) ;
+			}
+			else
+			{
+				delete cell._colScanned ;
+				delete cell._rowScanned ;
+			}
+		}
+	}
+
+	// Insert physical rows and columns to the table.
+	for ( var i = 0 ; i < tableMap.length ; i++ )
+	{
+		var rowObj = table.ownerDocument.createElement( 'tr' ) ;
+		for ( var j = 0 ; j < tableMap[i].length ; )
+		{
+			var cell = tableMap[i][j] ;
+			if ( tableMap[i-1] && tableMap[i-1][j] == cell )
+			{
+				j += cell.colSpan ;
+				continue ;
+			}
+			rowObj.appendChild( cell ) ;
+			j += cell.colSpan ;
+			if ( cell.colSpan == 1 )
+				cell.removeAttribute( 'colspan' ) ;
+			if ( cell.rowSpan == 1 )
+				cell.removeAttribute( 'rowspan' ) ;
+		}
+		table.appendChild( rowObj ) ;
+	}
+}
+
+FCKTableHandler._MoveCaretToCell = function ( refCell, toStart )
+{
+	var range = new FCKDomRange( FCK.EditorWindow ) ;
+	range.MoveToNodeContents( refCell ) ;
+	range.Collapse( toStart ) ;
+	range.Select() ;
+}
+
+FCKTableHandler.ClearRow = function( tr )
+{
+	// Get the array of row's cells.
+	var aCells = tr.cells ;
+
+	// Replace the contents of each cell with "nothing".
+	for ( var i = 0 ; i < aCells.length ; i++ )
+	{
+		aCells[i].innerHTML = '' ;
+
+		if ( FCKBrowserInfo.IsGeckoLike )
+			FCKTools.AppendBogusBr( aCells[i] ) ;
+	}
+}
+
+FCKTableHandler.GetMergeRightTarget = function()
+{
+	var cells = this.GetSelectedCells() ;
+	if ( cells.length != 1 )
+		return null ;
+
+	var refCell = cells[0] ;
+	var tableMap = this._CreateTableMap( refCell.parentNode.parentNode ) ;
+	var rowIdx = refCell.parentNode.rowIndex ;
+	var colIdx = this._GetCellIndexSpan( tableMap, rowIdx, refCell ) ;
+	var nextColIdx = colIdx + ( isNaN( refCell.colSpan ) ? 1 : refCell.colSpan ) ;
+	var nextCell = tableMap[rowIdx][nextColIdx] ;
+
+	if ( ! nextCell )
+		return null ;
+
+	// The two cells must have the same vertical geometry, otherwise merging does not make sense.
+	this._MarkCells( [refCell, nextCell], '_SizeTest' ) ;
+	var refGeometry = this._GetMarkerGeometry( tableMap, rowIdx, colIdx, '_SizeTest' ) ;
+	var nextGeometry = this._GetMarkerGeometry( tableMap, rowIdx, nextColIdx, '_SizeTest' ) ;
+	this._UnmarkCells( [refCell, nextCell], '_SizeTest' ) ;
+
+	if ( refGeometry.height != nextGeometry.height || refGeometry.y != nextGeometry.y )
+		return null ;
+
+	return { 'refCell' : refCell, 'nextCell' : nextCell, 'tableMap' : tableMap } ;
+}
+
+FCKTableHandler.GetMergeDownTarget = function()
+{
+	var cells = this.GetSelectedCells() ;
+	if ( cells.length != 1 )
+		return null ;
+
+	var refCell = cells[0] ;
+	var tableMap = this._CreateTableMap( refCell.parentNode.parentNode ) ;
+	var rowIdx = refCell.parentNode.rowIndex ;
+	var colIdx = this._GetCellIndexSpan( tableMap, rowIdx, refCell ) ;
+	var newRowIdx = rowIdx + ( isNaN( refCell.rowSpan ) ? 1 : refCell.rowSpan ) ;
+	if ( ! tableMap[newRowIdx] )
+		return null ;
+
+	var nextCell = tableMap[newRowIdx][colIdx] ;
+
+	if ( ! nextCell )
+		return null ;
+
+	// The two cells must have the same horizontal geometry, otherwise merging does not makes sense.
+	this._MarkCells( [refCell, nextCell], '_SizeTest' ) ;
+	var refGeometry = this._GetMarkerGeometry( tableMap, rowIdx, colIdx, '_SizeTest' ) ;
+	var nextGeometry = this._GetMarkerGeometry( tableMap, newRowIdx, colIdx, '_SizeTest' ) ;
+	this._UnmarkCells( [refCell, nextCell], '_SizeTest' ) ;
+
+	if ( refGeometry.width != nextGeometry.width || refGeometry.x != nextGeometry.x )
+		return null ;
+
+	return { 'refCell' : refCell, 'nextCell' : nextCell, 'tableMap' : tableMap } ;
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fcktablehandler_gecko.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fcktablehandler_gecko.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fcktablehandler_gecko.js	(revision 1280)
@@ -0,0 +1,56 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Manage table operations (non-IE).
+ */
+
+FCKTableHandler.GetSelectedCells = function()
+{
+	var aCells = new Array() ;
+
+	var oSelection = FCK.EditorWindow.getSelection() ;
+
+	// If the selection is a text.
+	if ( oSelection.rangeCount == 1 && oSelection.anchorNode.nodeType == 3 )
+	{
+		var oParent = FCKTools.GetElementAscensor( oSelection.anchorNode, 'TD,TH' ) ;
+
+		if ( oParent )
+			aCells[0] = oParent ;
+
+		return aCells ;
+	}
+
+	for ( var i = 0 ; i < oSelection.rangeCount ; i++ )
+	{
+		var oRange = oSelection.getRangeAt(i) ;
+		var oCell ;
+
+		if ( oRange.startContainer.tagName.Equals( 'TD', 'TH' ) )
+			oCell = oRange.startContainer ;
+		else
+			oCell = oRange.startContainer.childNodes[ oRange.startOffset ] ;
+
+		if ( oCell.tagName.Equals( 'TD', 'TH' ) )
+			aCells[aCells.length] = oCell ;
+	}
+
+	return aCells ;
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fcktablehandler_ie.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fcktablehandler_ie.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fcktablehandler_ie.js	(revision 1280)
@@ -0,0 +1,64 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Manage table operations (IE specific).
+ */
+
+FCKTableHandler.GetSelectedCells = function()
+{
+	if ( FCKSelection.GetType() == 'Control' )
+	{
+		var td = FCKSelection.MoveToAncestorNode( 'TD' ) ;
+		return td ? [ td ] : [] ;
+	}
+
+	var aCells = new Array() ;
+
+	var oRange = FCK.EditorDocument.selection.createRange() ;
+//	var oParent = oRange.parentElement() ;
+	var oParent = FCKSelection.GetParentElement() ;
+
+	if ( oParent && oParent.tagName.Equals( 'TD', 'TH' ) )
+		aCells[0] = oParent ;
+	else
+	{
+		oParent = FCKSelection.MoveToAncestorNode( 'TABLE' ) ;
+
+		if ( oParent )
+		{
+			// Loops throw all cells checking if the cell is, or part of it, is inside the selection
+			// and then add it to the selected cells collection.
+			for ( var i = 0 ; i < oParent.cells.length ; i++ )
+			{
+				var oCellRange = FCK.EditorDocument.body.createTextRange() ;
+				oCellRange.moveToElementText( oParent.cells[i] ) ;
+
+				if ( oRange.inRange( oCellRange )
+					|| ( oRange.compareEndPoints('StartToStart',oCellRange) >= 0 &&  oRange.compareEndPoints('StartToEnd',oCellRange) <= 0 )
+					|| ( oRange.compareEndPoints('EndToStart',oCellRange) >= 0 &&  oRange.compareEndPoints('EndToEnd',oCellRange) <= 0 ) )
+				{
+					aCells[aCells.length] = oParent.cells[i] ;
+				}
+			}
+		}
+	}
+
+	return aCells ;
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fcktoolbaritems.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fcktoolbaritems.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fcktoolbaritems.js	(revision 1280)
@@ -0,0 +1,123 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Toolbar items definitions.
+ */
+
+var FCKToolbarItems = new Object() ;
+FCKToolbarItems.LoadedItems = new Object() ;
+
+FCKToolbarItems.RegisterItem = function( itemName, item )
+{
+	this.LoadedItems[ itemName ] = item ;
+}
+
+FCKToolbarItems.GetItem = function( itemName )
+{
+	var oItem = FCKToolbarItems.LoadedItems[ itemName ] ;
+
+	if ( oItem )
+		return oItem ;
+
+	switch ( itemName )
+	{
+		case 'Source'			: oItem = new FCKToolbarButton( 'Source'	, FCKLang.Source, null, FCK_TOOLBARITEM_ICONTEXT, true, true, 1 ) ; break ;
+		case 'DocProps'			: oItem = new FCKToolbarButton( 'DocProps'	, FCKLang.DocProps, null, null, null, null, 2 ) ; break ;
+		case 'Save'				: oItem = new FCKToolbarButton( 'Save'		, FCKLang.Save, null, null, true, null, 3 ) ; break ;
+		case 'NewPage'			: oItem = new FCKToolbarButton( 'NewPage'	, FCKLang.NewPage, null, null, true, null, 4  ) ; break ;
+		case 'Preview'			: oItem = new FCKToolbarButton( 'Preview'	, FCKLang.Preview, null, null, true, null, 5  ) ; break ;
+		case 'Templates'		: oItem = new FCKToolbarButton( 'Templates'	, FCKLang.Templates, null, null, null, null, 6 ) ; break ;
+		case 'About'			: oItem = new FCKToolbarButton( 'About'		, FCKLang.About, null, null, true, null, 47  ) ; break ;
+
+		case 'Cut'				: oItem = new FCKToolbarButton( 'Cut'		, FCKLang.Cut, null, null, false, true, 7 ) ; break ;
+		case 'Copy'				: oItem = new FCKToolbarButton( 'Copy'		, FCKLang.Copy, null, null, false, true, 8 ) ; break ;
+		case 'Paste'			: oItem = new FCKToolbarButton( 'Paste'		, FCKLang.Paste, null, null, false, true, 9 ) ; break ;
+		case 'PasteText'		: oItem = new FCKToolbarButton( 'PasteText'	, FCKLang.PasteText, null, null, false, true, 10 ) ; break ;
+		case 'PasteWord'		: oItem = new FCKToolbarButton( 'PasteWord'	, FCKLang.PasteWord, null, null, false, true, 11 ) ; break ;
+		case 'Print'			: oItem = new FCKToolbarButton( 'Print'		, FCKLang.Print, null, null, false, true, 12 ) ; break ;
+		case 'SpellCheck'		: oItem = new FCKToolbarButton( 'SpellCheck', FCKLang.SpellCheck, null, null, null, null, 13 ) ; break ;
+		case 'Undo'				: oItem = new FCKToolbarButton( 'Undo'		, FCKLang.Undo, null, null, false, true, 14 ) ; break ;
+		case 'Redo'				: oItem = new FCKToolbarButton( 'Redo'		, FCKLang.Redo, null, null, false, true, 15 ) ; break ;
+		case 'SelectAll'		: oItem = new FCKToolbarButton( 'SelectAll'	, FCKLang.SelectAll, null, null, true, null, 18 ) ; break ;
+		case 'RemoveFormat'		: oItem = new FCKToolbarButton( 'RemoveFormat', FCKLang.RemoveFormat, null, null, false, true, 19 ) ; break ;
+		case 'FitWindow'		: oItem = new FCKToolbarButton( 'FitWindow'	, FCKLang.FitWindow, null, null, true, true, 66 ) ; break ;
+
+		case 'Bold'				: oItem = new FCKToolbarButton( 'Bold'		, FCKLang.Bold, null, null, false, true, 20 ) ; break ;
+		case 'Italic'			: oItem = new FCKToolbarButton( 'Italic'	, FCKLang.Italic, null, null, false, true, 21 ) ; break ;
+		case 'Underline'		: oItem = new FCKToolbarButton( 'Underline'	, FCKLang.Underline, null, null, false, true, 22 ) ; break ;
+		case 'StrikeThrough'	: oItem = new FCKToolbarButton( 'StrikeThrough'	, FCKLang.StrikeThrough, null, null, false, true, 23 ) ; break ;
+		case 'Subscript'		: oItem = new FCKToolbarButton( 'Subscript'		, FCKLang.Subscript, null, null, false, true, 24 ) ; break ;
+		case 'Superscript'		: oItem = new FCKToolbarButton( 'Superscript'	, FCKLang.Superscript, null, null, false, true, 25 ) ; break ;
+
+		case 'OrderedList'		: oItem = new FCKToolbarButton( 'InsertOrderedList'		, FCKLang.NumberedListLbl, FCKLang.NumberedList, null, false, true, 26 ) ; break ;
+		case 'UnorderedList'	: oItem = new FCKToolbarButton( 'InsertUnorderedList'	, FCKLang.BulletedListLbl, FCKLang.BulletedList, null, false, true, 27 ) ; break ;
+		case 'Outdent'			: oItem = new FCKToolbarButton( 'Outdent'	, FCKLang.DecreaseIndent, null, null, false, true, 28 ) ; break ;
+		case 'Indent'			: oItem = new FCKToolbarButton( 'Indent'	, FCKLang.IncreaseIndent, null, null, false, true, 29 ) ; break ;
+		case 'Blockquote'			: oItem = new FCKToolbarButton( 'Blockquote'	, FCKLang.Blockquote, null, null, false, true, 73 ) ; break ;
+
+		case 'Link'				: oItem = new FCKToolbarButton( 'Link'		, FCKLang.InsertLinkLbl, FCKLang.InsertLink, null, false, true, 34 ) ; break ;
+		case 'Unlink'			: oItem = new FCKToolbarButton( 'Unlink'	, FCKLang.RemoveLink, null, null, false, true, 35 ) ; break ;
+		case 'Anchor'			: oItem = new FCKToolbarButton( 'Anchor'	, FCKLang.Anchor, null, null, null, null, 36 ) ; break ;
+
+		case 'Image'			: oItem = new FCKToolbarButton( 'Image'			, FCKLang.InsertImageLbl, FCKLang.InsertImage, null, false, true, 37 ) ; break ;
+		case 'Flash'			: oItem = new FCKToolbarButton( 'Flash'			, FCKLang.InsertFlashLbl, FCKLang.InsertFlash, null, false, true, 38 ) ; break ;
+		case 'Table'			: oItem = new FCKToolbarButton( 'Table'			, FCKLang.InsertTableLbl, FCKLang.InsertTable, null, false, true, 39 ) ; break ;
+		case 'SpecialChar'		: oItem = new FCKToolbarButton( 'SpecialChar'	, FCKLang.InsertSpecialCharLbl, FCKLang.InsertSpecialChar, null, false, true, 42 ) ; break ;
+		case 'Smiley'			: oItem = new FCKToolbarButton( 'Smiley'		, FCKLang.InsertSmileyLbl, FCKLang.InsertSmiley, null, false, true, 41 ) ; break ;
+		case 'PageBreak'		: oItem = new FCKToolbarButton( 'PageBreak'		, FCKLang.PageBreakLbl, FCKLang.PageBreak, null, false, true, 43 ) ; break ;
+
+		case 'Rule'				: oItem = new FCKToolbarButton( 'Rule'			, FCKLang.InsertLineLbl, FCKLang.InsertLine, null, false, true, 40 ) ; break ;
+
+		case 'JustifyLeft'		: oItem = new FCKToolbarButton( 'JustifyLeft'	, FCKLang.LeftJustify, null, null, false, true, 30 ) ; break ;
+		case 'JustifyCenter'	: oItem = new FCKToolbarButton( 'JustifyCenter'	, FCKLang.CenterJustify, null, null, false, true, 31 ) ; break ;
+		case 'JustifyRight'		: oItem = new FCKToolbarButton( 'JustifyRight'	, FCKLang.RightJustify, null, null, false, true, 32 ) ; break ;
+		case 'JustifyFull'		: oItem = new FCKToolbarButton( 'JustifyFull'	, FCKLang.BlockJustify, null, null, false, true, 33 ) ; break ;
+
+		case 'Style'			: oItem = new FCKToolbarStyleCombo() ; break ;
+		case 'FontName'			: oItem = new FCKToolbarFontsCombo() ; break ;
+		case 'FontSize'			: oItem = new FCKToolbarFontSizeCombo() ; break ;
+		case 'FontFormat'		: oItem = new FCKToolbarFontFormatCombo() ; break ;
+
+		case 'TextColor'		: oItem = new FCKToolbarPanelButton( 'TextColor', FCKLang.TextColor, null, null, 45 ) ; break ;
+		case 'BGColor'			: oItem = new FCKToolbarPanelButton( 'BGColor'	, FCKLang.BGColor, null, null, 46 ) ; break ;
+
+		case 'Find'				: oItem = new FCKToolbarButton( 'Find'		, FCKLang.Find, null, null, null, null, 16 ) ; break ;
+		case 'Replace'			: oItem = new FCKToolbarButton( 'Replace'	, FCKLang.Replace, null, null, null, null, 17 ) ; break ;
+
+		case 'Form'				: oItem = new FCKToolbarButton( 'Form'			, FCKLang.Form, null, null, null, null, 48 ) ; break ;
+		case 'Checkbox'			: oItem = new FCKToolbarButton( 'Checkbox'		, FCKLang.Checkbox, null, null, null, null, 49 ) ; break ;
+		case 'Radio'			: oItem = new FCKToolbarButton( 'Radio'			, FCKLang.RadioButton, null, null, null, null, 50 ) ; break ;
+		case 'TextField'		: oItem = new FCKToolbarButton( 'TextField'		, FCKLang.TextField, null, null, null, null, 51 ) ; break ;
+		case 'Textarea'			: oItem = new FCKToolbarButton( 'Textarea'		, FCKLang.Textarea, null, null, null, null, 52 ) ; break ;
+		case 'HiddenField'		: oItem = new FCKToolbarButton( 'HiddenField'	, FCKLang.HiddenField, null, null, null, null, 56 ) ; break ;
+		case 'Button'			: oItem = new FCKToolbarButton( 'Button'		, FCKLang.Button, null, null, null, null, 54 ) ; break ;
+		case 'Select'			: oItem = new FCKToolbarButton( 'Select'		, FCKLang.SelectionField, null, null, null, null, 53 ) ; break ;
+		case 'ImageButton'		: oItem = new FCKToolbarButton( 'ImageButton'	, FCKLang.ImageButton, null, null, null, null, 55 ) ; break ;
+		case 'ShowBlocks'		: oItem = new FCKToolbarButton( 'ShowBlocks'	, FCKLang.ShowBlocks, null, null, null, true, 72 ) ; break ;
+
+		default:
+			alert( FCKLang.UnknownToolbarItem.replace( /%1/g, itemName ) ) ;
+			return null ;
+	}
+
+	FCKToolbarItems.LoadedItems[ itemName ] = oItem ;
+
+	return oItem ;
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fcktoolbarset.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fcktoolbarset.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fcktoolbarset.js	(revision 1280)
@@ -0,0 +1,373 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Defines the FCKToolbarSet object that is used to load and draw the
+ * toolbar.
+ */
+
+function FCKToolbarSet_Create( overhideLocation )
+{
+	var oToolbarSet ;
+
+	var sLocation = overhideLocation || FCKConfig.ToolbarLocation ;
+	switch ( sLocation )
+	{
+		case 'In' :
+			document.getElementById( 'xToolbarRow' ).style.display = '' ;
+			oToolbarSet = new FCKToolbarSet( document ) ;
+			break ;
+		case 'None' :
+			oToolbarSet = new FCKToolbarSet( document ) ;
+			break ;
+
+//		case 'OutTop' :
+			// Not supported.
+
+		default :
+			FCK.Events.AttachEvent( 'OnBlur', FCK_OnBlur ) ;
+			FCK.Events.AttachEvent( 'OnFocus', FCK_OnFocus ) ;
+
+			var eToolbarTarget ;
+
+			// Out:[TargetWindow]([TargetId])
+			var oOutMatch = sLocation.match( /^Out:(.+)\((\w+)\)$/ ) ;
+			if ( oOutMatch )
+			{
+				eToolbarTarget = eval( 'parent.' + oOutMatch[1] ).document.getElementById( oOutMatch[2] ) ;
+			}
+			else
+			{
+				// Out:[TargetId]
+				oOutMatch = sLocation.match( /^Out:(\w+)$/ ) ;
+				if ( oOutMatch )
+					eToolbarTarget = parent.document.getElementById( oOutMatch[1] ) ;
+			}
+
+			if ( !eToolbarTarget )
+			{
+				alert( 'Invalid value for "ToolbarLocation"' ) ;
+				return arguments.callee( 'In' );
+			}
+
+			// If it is a shared toolbar, it may be already available in the target element.
+			oToolbarSet = eToolbarTarget.__FCKToolbarSet ;
+			if ( oToolbarSet )
+				break ;
+
+			// Create the IFRAME that will hold the toolbar inside the target element.
+			var eToolbarIFrame = FCKTools.GetElementDocument( eToolbarTarget ).createElement( 'iframe' ) ;
+			eToolbarIFrame.src = 'javascript:void(0)' ;
+			eToolbarIFrame.frameBorder = 0 ;
+			eToolbarIFrame.width = '100%' ;
+			eToolbarIFrame.height = '10' ;
+			eToolbarTarget.appendChild( eToolbarIFrame ) ;
+			eToolbarIFrame.unselectable = 'on' ;
+
+			// Write the basic HTML for the toolbar (copy from the editor main page).
+			var eTargetDocument = eToolbarIFrame.contentWindow.document ;
+
+			// Workaround for Safari 12256. Ticket #63
+			var sBase = '' ;
+			if ( FCKBrowserInfo.IsSafari )
+				sBase = '<base href="' + window.document.location + '">' ;
+
+			// Initialize the IFRAME document body.
+			eTargetDocument.open() ;
+			eTargetDocument.write( '<html><head>' + sBase + '<script type="text/javascript"> var adjust = function() { window.frameElement.height = document.body.scrollHeight ; }; window.onresize = adjust; window.onload = function () {adjust(); window.setTimeout( adjust, 1000 ); }</script></head><body style="overflow: hidden">' + document.getElementById( 'xToolbarSpace' ).innerHTML + '</body></html>' ) ;
+			eTargetDocument.close() ;
+
+			FCKTools.AddEventListener( eTargetDocument, 'contextmenu', FCKTools.CancelEvent ) ;
+
+			// Load external resources (must be done here, otherwise Firefox will not
+			// have the document DOM ready to be used right away.
+			FCKTools.AppendStyleSheet( eTargetDocument, FCKConfig.SkinPath + 'fck_editor.css' ) ;
+
+			oToolbarSet = eToolbarTarget.__FCKToolbarSet = new FCKToolbarSet( eTargetDocument ) ;
+			oToolbarSet._IFrame = eToolbarIFrame ;
+			
+			if ( FCK.IECleanup )
+				FCK.IECleanup.AddItem( eToolbarTarget, FCKToolbarSet_Target_Cleanup ) ;
+	}
+
+	oToolbarSet.CurrentInstance = FCK ;
+
+	FCK.AttachToOnSelectionChange( oToolbarSet.RefreshItemsState ) ;
+
+	return oToolbarSet ;
+}
+
+function FCK_OnBlur( editorInstance )
+{
+	var eToolbarSet = editorInstance.ToolbarSet ;
+
+	if ( eToolbarSet.CurrentInstance == editorInstance )
+		eToolbarSet.Disable() ;
+}
+
+function FCK_OnFocus( editorInstance )
+{
+	var oToolbarset = editorInstance.ToolbarSet ;
+	var oInstance = editorInstance || FCK ;
+
+	// Unregister the toolbar window from the current instance.
+	oToolbarset.CurrentInstance.FocusManager.RemoveWindow( oToolbarset._IFrame.contentWindow ) ;
+
+	// Set the new current instance.
+	oToolbarset.CurrentInstance = oInstance ;
+
+	// Register the toolbar window in the current instance.
+	oInstance.FocusManager.AddWindow( oToolbarset._IFrame.contentWindow, true ) ;
+
+	oToolbarset.Enable() ;
+}
+
+function FCKToolbarSet_Cleanup()
+{
+	this._TargetElement = null ;
+	this._IFrame = null ;
+}
+
+function FCKToolbarSet_Target_Cleanup()
+{
+	this.__FCKToolbarSet = null ;
+}
+
+var FCKToolbarSet = function( targetDocument )
+{
+	this._Document = targetDocument ;
+
+	// Get the element that will hold the elements structure.
+	this._TargetElement	= targetDocument.getElementById( 'xToolbar' ) ;
+
+	// Setup the expand and collapse handlers.
+	var eExpandHandle	= targetDocument.getElementById( 'xExpandHandle' ) ;
+	var eCollapseHandle	= targetDocument.getElementById( 'xCollapseHandle' ) ;
+
+	eExpandHandle.title		= FCKLang.ToolbarExpand ;
+	FCKTools.AddEventListener( eExpandHandle, 'click', FCKToolbarSet_Expand_OnClick ) ;
+
+	eCollapseHandle.title	= FCKLang.ToolbarCollapse ;
+	FCKTools.AddEventListener( eCollapseHandle, 'click', FCKToolbarSet_Collapse_OnClick ) ;
+
+	// Set the toolbar state at startup.
+	if ( !FCKConfig.ToolbarCanCollapse || FCKConfig.ToolbarStartExpanded )
+		this.Expand() ;
+	else
+		this.Collapse() ;
+
+	// Enable/disable the collapse handler
+	eCollapseHandle.style.display = FCKConfig.ToolbarCanCollapse ? '' : 'none' ;
+
+	if ( FCKConfig.ToolbarCanCollapse )
+		eCollapseHandle.style.display = '' ;
+	else
+		targetDocument.getElementById( 'xTBLeftBorder' ).style.display = '' ;
+
+	// Set the default properties.
+	this.Toolbars = new Array() ;
+	this.IsLoaded = false ;
+
+	if ( FCK.IECleanup )
+		FCK.IECleanup.AddItem( this, FCKToolbarSet_Cleanup ) ;
+}
+
+function FCKToolbarSet_Expand_OnClick()
+{
+	FCK.ToolbarSet.Expand() ;
+}
+
+function FCKToolbarSet_Collapse_OnClick()
+{
+	FCK.ToolbarSet.Collapse() ;
+}
+
+FCKToolbarSet.prototype.Expand = function()
+{
+	this._ChangeVisibility( false ) ;
+}
+
+FCKToolbarSet.prototype.Collapse = function()
+{
+	this._ChangeVisibility( true ) ;
+}
+
+FCKToolbarSet.prototype._ChangeVisibility = function( collapse )
+{
+	this._Document.getElementById( 'xCollapsed' ).style.display = collapse ? '' : 'none' ;
+	this._Document.getElementById( 'xExpanded' ).style.display = collapse ? 'none' : '' ;
+
+	if ( FCKBrowserInfo.IsGecko )
+	{
+		// I had to use "setTimeout" because Gecko was not responding in a right
+		// way when calling window.onresize() directly.
+		FCKTools.RunFunction( window.onresize ) ;
+	}
+}
+
+FCKToolbarSet.prototype.Load = function( toolbarSetName )
+{
+	this.Name = toolbarSetName ;
+
+	this.Items = new Array() ;
+
+	// Reset the array of toolbar items that are active only on WYSIWYG mode.
+	this.ItemsWysiwygOnly = new Array() ;
+
+	// Reset the array of toolbar items that are sensitive to the cursor position.
+	this.ItemsContextSensitive = new Array() ;
+
+	// Cleanup the target element.
+	this._TargetElement.innerHTML = '' ;
+
+	var ToolbarSet = FCKConfig.ToolbarSets[toolbarSetName] ;
+
+	if ( !ToolbarSet )
+	{
+		alert( FCKLang.UnknownToolbarSet.replace( /%1/g, toolbarSetName ) ) ;
+		return ;
+	}
+
+	this.Toolbars = new Array() ;
+
+	for ( var x = 0 ; x < ToolbarSet.length ; x++ )
+	{
+		var oToolbarItems = ToolbarSet[x] ;
+
+		// If the configuration for the toolbar is missing some element or has any extra comma
+		// this item won't be valid, so skip it and keep on processing.
+		if ( !oToolbarItems ) 
+			continue ;
+
+		var oToolbar ;
+
+		if ( typeof( oToolbarItems ) == 'string' )
+		{
+			if ( oToolbarItems == '/' )
+				oToolbar = new FCKToolbarBreak() ;
+		}
+		else
+		{
+			oToolbar = new FCKToolbar() ;
+
+			for ( var j = 0 ; j < oToolbarItems.length ; j++ )
+			{
+				var sItem = oToolbarItems[j] ;
+
+				if ( sItem == '-')
+					oToolbar.AddSeparator() ;
+				else
+				{
+					var oItem = FCKToolbarItems.GetItem( sItem ) ;
+					if ( oItem )
+					{
+						oToolbar.AddItem( oItem ) ;
+
+						this.Items.push( oItem ) ;
+
+						if ( !oItem.SourceView )
+							this.ItemsWysiwygOnly.push( oItem ) ;
+
+						if ( oItem.ContextSensitive )
+							this.ItemsContextSensitive.push( oItem ) ;
+					}
+				}
+			}
+
+			// oToolbar.AddTerminator() ;
+		}
+
+		oToolbar.Create( this._TargetElement ) ;
+
+		this.Toolbars[ this.Toolbars.length ] = oToolbar ;
+	}
+
+	FCKTools.DisableSelection( this._Document.getElementById( 'xCollapseHandle' ).parentNode ) ;
+
+	if ( FCK.Status != FCK_STATUS_COMPLETE )
+		FCK.Events.AttachEvent( 'OnStatusChange', this.RefreshModeState ) ;
+	else
+		this.RefreshModeState() ;
+
+	this.IsLoaded = true ;
+	this.IsEnabled = true ;
+
+	FCKTools.RunFunction( this.OnLoad ) ;
+}
+
+FCKToolbarSet.prototype.Enable = function()
+{
+	if ( this.IsEnabled )
+		return ;
+
+	this.IsEnabled = true ;
+
+	var aItems = this.Items ;
+	for ( var i = 0 ; i < aItems.length ; i++ )
+		aItems[i].RefreshState() ;
+}
+
+FCKToolbarSet.prototype.Disable = function()
+{
+	if ( !this.IsEnabled )
+		return ;
+
+	this.IsEnabled = false ;
+
+	var aItems = this.Items ;
+	for ( var i = 0 ; i < aItems.length ; i++ )
+		aItems[i].Disable() ;
+}
+
+FCKToolbarSet.prototype.RefreshModeState = function( editorInstance )
+{
+	if ( FCK.Status != FCK_STATUS_COMPLETE )
+		return ;
+
+	var oToolbarSet = editorInstance ? editorInstance.ToolbarSet : this ;
+	var aItems = oToolbarSet.ItemsWysiwygOnly ;
+
+	if ( FCK.EditMode == FCK_EDITMODE_WYSIWYG )
+	{
+		// Enable all buttons that are available on WYSIWYG mode only.
+		for ( var i = 0 ; i < aItems.length ; i++ )
+			aItems[i].Enable() ;
+
+		// Refresh the buttons state.
+		oToolbarSet.RefreshItemsState( editorInstance ) ;
+	}
+	else
+	{
+		// Refresh the buttons state.
+		oToolbarSet.RefreshItemsState( editorInstance ) ;
+
+		// Disable all buttons that are available on WYSIWYG mode only.
+		for ( var j = 0 ; j < aItems.length ; j++ )
+			aItems[j].Disable() ;
+	}
+}
+
+FCKToolbarSet.prototype.RefreshItemsState = function( editorInstance )
+{
+
+	var aItems = ( editorInstance ? editorInstance.ToolbarSet : this ).ItemsContextSensitive ;
+
+	for ( var i = 0 ; i < aItems.length ; i++ )
+		aItems[i].RefreshState() ;
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fcktools.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fcktools.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fcktools.js	(revision 1280)
@@ -0,0 +1,581 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Utility functions.
+ */
+
+var FCKTools = new Object() ;
+
+FCKTools.CreateBogusBR = function( targetDocument )
+{
+	var eBR = targetDocument.createElement( 'br' ) ;
+//	eBR.setAttribute( '_moz_editor_bogus_node', 'TRUE' ) ;
+	eBR.setAttribute( 'type', '_moz' ) ;
+	return eBR ;
+}
+
+// Returns a reference to the appended style sheet or an array with all the appended references
+FCKTools.AppendStyleSheet = function( documentElement, cssFileUrlOrArray )
+{
+	if ( typeof( cssFileUrlOrArray ) == 'string' )
+		return this._AppendStyleSheet( documentElement, cssFileUrlOrArray ) ;
+	else
+	{
+		var aStyleSheeArray = new Array() ;
+
+		for ( var i = 0 ; i < cssFileUrlOrArray.length ; i++ )
+			aStyleSheeArray.push(this._AppendStyleSheet( documentElement, cssFileUrlOrArray[i] ) ) ;
+
+		return aStyleSheeArray ;
+	}
+}
+
+FCKTools.AppendStyleString = function ( documentElement, cssStyles )
+{
+	this._AppendStyleString( documentElement, cssStyles ) ;
+}
+
+FCKTools.GetElementDocument = function ( element )
+{
+	return element.ownerDocument || element.document ;
+}
+
+// Get the window object where the element is placed in.
+FCKTools.GetElementWindow = function( element )
+{
+	return this.GetDocumentWindow( this.GetElementDocument( element ) ) ;
+}
+
+FCKTools.GetDocumentWindow = function( document )
+{
+	// With Safari, there is not way to retrieve the window from the document, so we must fix it.
+	if ( FCKBrowserInfo.IsSafari && !document.parentWindow )
+		this.FixDocumentParentWindow( window.top ) ;
+
+	return document.parentWindow || document.defaultView ;
+}
+
+/*
+	This is a Safari specific function that fix the reference to the parent
+	window from the document object.
+*/
+FCKTools.FixDocumentParentWindow = function( targetWindow )
+{
+	if ( targetWindow.document )
+		targetWindow.document.parentWindow = targetWindow ;
+
+	for ( var i = 0 ; i < targetWindow.frames.length ; i++ )
+		FCKTools.FixDocumentParentWindow( targetWindow.frames[i] ) ;
+}
+
+FCKTools.HTMLEncode = function( text )
+{
+	if ( !text )
+		return '' ;
+
+	text = text.replace( /&/g, '&amp;' ) ;
+	text = text.replace( /</g, '&lt;' ) ;
+	text = text.replace( />/g, '&gt;' ) ;
+
+	return text ;
+}
+
+FCKTools.HTMLDecode = function( text )
+{
+	if ( !text )
+		return '' ;
+
+	text = text.replace( /&gt;/g, '>' ) ;
+	text = text.replace( /&lt;/g, '<' ) ;
+	text = text.replace( /&amp;/g, '&' ) ;
+
+	return text ;
+}
+
+FCKTools._ProcessLineBreaksForPMode = function( oEditor, text, liState, node, strArray )
+{
+	var closeState = 0 ;
+	var blockStartTag = "<p>" ;
+	var blockEndTag = "</p>" ;
+	var lineBreakTag = "<br />" ;
+	if ( liState )
+	{
+		blockStartTag = "<li>" ;
+		blockEndTag = "</li>" ;
+		closeState = 1 ;
+	}
+
+	// Are we currently inside a <p> tag now?
+	// If yes, close it at the next double line break.
+	while ( node && node != oEditor.FCK.EditorDocument.body )
+	{
+		if ( node.tagName.toLowerCase() == 'p' )
+		{
+			closeState = 1 ;
+			break;
+		}
+		node = node.parentNode ;
+	}
+
+	for ( var i = 0 ; i < text.length ; i++ )
+	{
+		var c = text.charAt( i ) ;
+		if ( c == '\r' )
+			continue ;
+
+		if ( c != '\n' )
+		{
+			strArray.push( c ) ;
+			continue ;
+		}
+
+		// Now we have encountered a line break.
+		// Check if the next character is also a line break.
+		var n = text.charAt( i + 1 ) ;
+		if ( n == '\r' )
+		{
+			i++ ;
+			n = text.charAt( i + 1 ) ;
+		}
+		if ( n == '\n' )
+		{
+			i++ ;	// ignore next character - we have already processed it.
+			if ( closeState )
+				strArray.push( blockEndTag ) ;
+			strArray.push( blockStartTag ) ;
+			closeState = 1 ;
+		}
+		else
+			strArray.push( lineBreakTag ) ;
+	}
+}
+
+FCKTools._ProcessLineBreaksForDivMode = function( oEditor, text, liState, node, strArray )
+{
+	var closeState = 0 ;
+	var blockStartTag = "<div>" ;
+	var blockEndTag = "</div>" ;
+	if ( liState )
+	{
+		blockStartTag = "<li>" ;
+		blockEndTag = "</li>" ;
+		closeState = 1 ;
+	}
+
+	// Are we currently inside a <div> tag now?
+	// If yes, close it at the next double line break.
+	while ( node && node != oEditor.FCK.EditorDocument.body )
+	{
+		if ( node.tagName.toLowerCase() == 'div' )
+		{
+			closeState = 1 ;
+			break ;
+		}
+		node = node.parentNode ;
+	}
+
+	for ( var i = 0 ; i < text.length ; i++ )
+	{
+		var c = text.charAt( i ) ;
+		if ( c == '\r' )
+			continue ;
+
+		if ( c != '\n' )
+		{
+			strArray.push( c ) ;
+			continue ;
+		}
+
+		if ( closeState )
+		{
+			if ( strArray[ strArray.length - 1 ] == blockStartTag )
+			{
+				// A div tag must have some contents inside for it to be visible.
+				strArray.push( "&nbsp;" ) ;
+			}
+			strArray.push( blockEndTag ) ;
+		}
+		strArray.push( blockStartTag ) ;
+		closeState = 1 ;
+	}
+	if ( closeState )
+		strArray.push( blockEndTag ) ;
+}
+
+FCKTools._ProcessLineBreaksForBrMode = function( oEditor, text, liState, node, strArray )
+{
+	var closeState = 0 ;
+	var blockStartTag = "<br />" ;
+	var blockEndTag = "" ;
+	if ( liState )
+	{
+		blockStartTag = "<li>" ;
+		blockEndTag = "</li>" ;
+		closeState = 1 ;
+	}
+
+	for ( var i = 0 ; i < text.length ; i++ )
+	{
+		var c = text.charAt( i ) ;
+		if ( c == '\r' )
+			continue ;
+
+		if ( c != '\n' )
+		{
+			strArray.push( c ) ;
+			continue ;
+		}
+
+		if ( closeState && blockEndTag.length )
+			strArray.push ( blockEndTag ) ;
+		strArray.push( blockStartTag ) ;
+		closeState = 1 ;
+	}
+}
+
+FCKTools.ProcessLineBreaks = function( oEditor, oConfig, text )
+{
+	var enterMode = oConfig.EnterMode.toLowerCase() ;
+	var strArray = [] ;
+
+	// Is the caret or selection inside an <li> tag now?
+	var liState = 0 ;
+	var range = new oEditor.FCKDomRange( oEditor.FCK.EditorWindow ) ;
+	range.MoveToSelection() ;
+	var node = range._Range.startContainer ;
+	while ( node && node.nodeType != 1 )
+		node = node.parentNode ;
+	if ( node && node.tagName.toLowerCase() == 'li' )
+		liState = 1 ;
+
+	if ( enterMode == 'p' )
+		this._ProcessLineBreaksForPMode( oEditor, text, liState, node, strArray ) ;
+	else if ( enterMode == 'div' )
+		this._ProcessLineBreaksForDivMode( oEditor, text, liState, node, strArray ) ;
+	else if ( enterMode == 'br' )
+		this._ProcessLineBreaksForBrMode( oEditor, text, liState, node, strArray ) ;
+	return strArray.join( "" ) ;
+}
+
+/**
+ * Adds an option to a SELECT element.
+ */
+FCKTools.AddSelectOption = function( selectElement, optionText, optionValue )
+{
+	var oOption = FCKTools.GetElementDocument( selectElement ).createElement( "OPTION" ) ;
+
+	oOption.text	= optionText ;
+	oOption.value	= optionValue ;
+
+	selectElement.options.add(oOption) ;
+
+	return oOption ;
+}
+
+FCKTools.RunFunction = function( func, thisObject, paramsArray, timerWindow )
+{
+	if ( func )
+		this.SetTimeout( func, 0, thisObject, paramsArray, timerWindow ) ;
+}
+
+FCKTools.SetTimeout = function( func, milliseconds, thisObject, paramsArray, timerWindow )
+{
+	return ( timerWindow || window ).setTimeout(
+		function()
+		{
+			if ( paramsArray )
+				func.apply( thisObject, [].concat( paramsArray ) ) ;
+			else
+				func.apply( thisObject ) ;
+		},
+		milliseconds ) ;
+}
+
+FCKTools.SetInterval = function( func, milliseconds, thisObject, paramsArray, timerWindow )
+{
+	return ( timerWindow || window ).setInterval(
+		function()
+		{
+			func.apply( thisObject, paramsArray || [] ) ;
+		},
+		milliseconds ) ;
+}
+
+FCKTools.ConvertStyleSizeToHtml = function( size )
+{
+	return size.EndsWith( '%' ) ? size : parseInt( size, 10 ) ;
+}
+
+FCKTools.ConvertHtmlSizeToStyle = function( size )
+{
+	return size.EndsWith( '%' ) ? size : ( size + 'px' ) ;
+}
+
+// START iCM MODIFICATIONS
+// Amended to accept a list of one or more ascensor tag names
+// Amended to check the element itself before working back up through the parent hierarchy
+FCKTools.GetElementAscensor = function( element, ascensorTagNames )
+{
+//	var e = element.parentNode ;
+	var e = element ;
+	var lstTags = "," + ascensorTagNames.toUpperCase() + "," ;
+
+	while ( e )
+	{
+		if ( lstTags.indexOf( "," + e.nodeName.toUpperCase() + "," ) != -1 )
+			return e ;
+
+		e = e.parentNode ;
+	}
+	return null ;
+}
+// END iCM MODIFICATIONS
+
+FCKTools.CreateEventListener = function( func, params )
+{
+	var f = function()
+	{
+		var aAllParams = [] ;
+
+		for ( var i = 0 ; i < arguments.length ; i++ )
+			aAllParams.push( arguments[i] ) ;
+
+		func.apply( this, aAllParams.concat( params ) ) ;
+	}
+
+	return f ;
+}
+
+FCKTools.IsStrictMode = function( document )
+{
+	// There is no compatMode in Safari, but it seams that it always behave as
+	// CSS1Compat, so let's assume it as the default.
+	return ( 'CSS1Compat' == ( document.compatMode || 'CSS1Compat' ) ) ;
+}
+
+// Transforms a "arguments" object to an array.
+FCKTools.ArgumentsToArray = function( args, startIndex, maxLength )
+{
+	startIndex = startIndex || 0 ;
+	maxLength = maxLength || args.length ;
+
+	var argsArray = new Array() ;
+
+	for ( var i = startIndex ; i < startIndex + maxLength && i < args.length ; i++ )
+		argsArray.push( args[i] ) ;
+
+	return argsArray ;
+}
+
+FCKTools.CloneObject = function( sourceObject )
+{
+	var fCloneCreator = function() {} ;
+	fCloneCreator.prototype = sourceObject ;
+	return new fCloneCreator ;
+}
+
+// Appends a bogus <br> at the end of the element, if not yet available.
+FCKTools.AppendBogusBr = function( element )
+{
+	if ( !element )
+		return ;
+
+	var eLastChild = this.GetLastItem( element.getElementsByTagName('br') ) ;
+
+	if ( !eLastChild || ( eLastChild.getAttribute( 'type', 2 ) != '_moz' && eLastChild.getAttribute( '_moz_dirty' ) == null ) )
+	{
+		var doc = this.GetElementDocument( element ) ;
+
+		if ( FCKBrowserInfo.IsOpera )
+			element.appendChild( doc.createTextNode('') ) ;
+		else
+			element.appendChild( this.CreateBogusBR( doc ) ) ;
+	}
+}
+
+FCKTools.GetLastItem = function( list )
+{
+	if ( list.length > 0 )
+		return list[ list.length - 1 ] ;
+
+	return null ;
+}
+
+FCKTools.GetDocumentPosition = function( w, node )
+{
+	var x = 0 ;
+	var y = 0 ;
+	var curNode = node ;
+	while ( curNode && curNode != w.document.body )
+	{
+		x += curNode.offsetLeft - curNode.scrollLeft ;
+		y += curNode.offsetTop - curNode.scrollTop ;
+		curNode = curNode.offsetParent ;
+	}
+	return { "x" : x, "y" : y } ;
+}
+
+FCKTools.GetWindowPosition = function( w, node )
+{
+	var pos = this.GetDocumentPosition( w, node ) ;
+	var scroll = FCKTools.GetScrollPosition( w ) ;
+	pos.x -= scroll.X ;
+	pos.y -= scroll.Y ;
+	return pos ;
+}
+
+FCKTools.ProtectFormStyles = function( formNode )
+{
+	if ( !formNode || formNode.nodeType != 1 || formNode.tagName.toLowerCase() != 'form' )
+		return [] ;
+	var hijackRecord = [] ;
+	var hijackNames = [ 'style', 'className' ] ;
+	for ( var i = 0 ; i < hijackNames.length ; i++ )
+	{
+		var name = hijackNames[i] ;
+		if ( formNode.elements.namedItem( name ) )
+		{
+			var hijackNode = formNode.elements.namedItem( name ) ;
+			hijackRecord.push( [ hijackNode, hijackNode.nextSibling ] ) ;
+			formNode.removeChild( hijackNode ) ;
+		}
+	}
+	return hijackRecord ;
+}
+
+FCKTools.RestoreFormStyles = function( formNode, hijackRecord )
+{
+	if ( !formNode || formNode.nodeType != 1 || formNode.tagName.toLowerCase() != 'form' )
+		return ;
+	if ( hijackRecord.length > 0 )
+	{
+		for ( var i = hijackRecord.length - 1 ; i >= 0 ; i-- )
+		{
+			var node = hijackRecord[i][0] ;
+			var sibling = hijackRecord[i][1] ;
+			if ( sibling )
+				formNode.insertBefore( node, sibling ) ;
+			else
+				formNode.appendChild( node ) ;
+		}
+	}
+}
+
+// Perform a one-step DFS walk.
+FCKTools.GetNextNode = function( node, limitNode )
+{
+	if ( node.firstChild )
+		return node.firstChild ;
+	else if ( node.nextSibling )
+		return node.nextSibling ;
+	else
+	{
+		var ancestor = node.parentNode ;
+		while ( ancestor )
+		{
+			if ( ancestor == limitNode )
+				return null ;
+			if ( ancestor.nextSibling )
+				return ancestor.nextSibling ;
+			else
+				ancestor = ancestor.parentNode ;
+		}
+	}
+	return null ;
+}
+
+FCKTools.GetNextTextNode = function( textnode, limitNode, checkStop )
+{
+	node = this.GetNextNode( textnode, limitNode ) ;
+	if ( checkStop && node && checkStop( node ) )
+		return null ;
+	while ( node && node.nodeType != 3 )
+	{
+		node = this.GetNextNode( node, limitNode ) ;
+		if ( checkStop && node && checkStop( node ) )
+			return null ;
+	}
+	return node ;
+}
+
+/**
+ * Merge all objects passed by argument into a single object.
+ */
+FCKTools.Merge = function()
+{
+	var args = arguments ;
+	var o = args[0] ;
+
+	for ( var i = 1 ; i < args.length ; i++ )
+	{
+		var arg = args[i] ;
+		for ( var p in arg )
+			o[p] = arg[p] ;
+	}
+
+	return o ;
+}
+
+/**
+ * Check if the passed argument is a real Array. It may not working when
+ * calling it cross windows.
+ */
+FCKTools.IsArray = function( it )
+{
+	return ( it instanceof Array ) ;
+}
+
+/**
+ * Appends a "length" property to an object, containing the number of
+ * properties available on it, excluded the append property itself.
+ */
+FCKTools.AppendLengthProperty = function( targetObject, propertyName )
+{
+	var counter = 0 ;
+
+	for ( var n in targetObject )
+		counter++ ;
+
+	return targetObject[ propertyName || 'length' ] = counter ;
+}
+
+/**
+ * Gets the browser parsed version of a css text (style attribute value). On
+ * some cases, the browser makes changes to the css text, returning a different
+ * value. For example, hexadecimal colors get transformed to rgb().
+ */
+FCKTools.NormalizeCssText = function( unparsedCssText )
+{
+	// Injects the style in a temporary span object, so the browser parses it,
+	// retrieving its final format.
+	var tempSpan = document.createElement( 'span' ) ;
+	tempSpan.style.cssText = unparsedCssText ;
+	return tempSpan.style.cssText ;
+}
+
+/**
+ * Utility function to wrap a call to an object's method,
+ * so it can be passed for example to an event handler,
+ * and then it will be executed with 'this' being the object.
+ */
+FCKTools.Hitch = function( obj, methodName )
+{
+  return function() { obj[methodName].apply(obj, arguments); } ;
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fcktools_gecko.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fcktools_gecko.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fcktools_gecko.js	(revision 1280)
@@ -0,0 +1,270 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Utility functions. (Gecko version).
+ */
+
+FCKTools.CancelEvent = function( e )
+{
+	if ( e )
+		e.preventDefault() ;
+}
+
+FCKTools.DisableSelection = function( element )
+{
+	if ( FCKBrowserInfo.IsGecko )
+		element.style.MozUserSelect	= 'none' ;	// Gecko only.
+	else
+		element.style.userSelect	= 'none' ;	// CSS3 (not supported yet).
+}
+
+// Appends a CSS file to a document.
+FCKTools._AppendStyleSheet = function( documentElement, cssFileUrl )
+{
+	var e = documentElement.createElement( 'LINK' ) ;
+	e.rel	= 'stylesheet' ;
+	e.type	= 'text/css' ;
+	e.href	= cssFileUrl ;
+	documentElement.getElementsByTagName("HEAD")[0].appendChild( e ) ;
+	return e ;
+}
+
+// Appends a CSS style string to a document.
+FCKTools._AppendStyleString = function( documentElement, cssStyles )
+{
+	var e = documentElement.createElement( "STYLE" ) ;
+	e.appendChild( documentElement.createTextNode( cssStyles ) ) ;
+	documentElement.getElementsByTagName( "HEAD" )[0].appendChild( e ) ;
+	return e ;
+}
+
+// Removes all attributes and values from the element.
+FCKTools.ClearElementAttributes = function( element )
+{
+	// Loop throw all attributes in the element
+	for ( var i = 0 ; i < element.attributes.length ; i++ )
+	{
+		// Remove the element by name.
+		element.removeAttribute( element.attributes[i].name, 0 ) ;	// 0 : Case Insensitive
+	}
+}
+
+// Returns an Array of strings with all defined in the elements inside another element.
+FCKTools.GetAllChildrenIds = function( parentElement )
+{
+	// Create the array that will hold all Ids.
+	var aIds = new Array() ;
+
+	// Define a recursive function that search for the Ids.
+	var fGetIds = function( parent )
+	{
+		for ( var i = 0 ; i < parent.childNodes.length ; i++ )
+		{
+			var sId = parent.childNodes[i].id ;
+
+			// Check if the Id is defined for the element.
+			if ( sId && sId.length > 0 ) aIds[ aIds.length ] = sId ;
+
+			// Recursive call.
+			fGetIds( parent.childNodes[i] ) ;
+		}
+	}
+
+	// Start the recursive calls.
+	fGetIds( parentElement ) ;
+
+	return aIds ;
+}
+
+// Replaces a tag with its contents. For example "<span>My <b>tag</b></span>"
+// will be replaced with "My <b>tag</b>".
+FCKTools.RemoveOuterTags = function( e )
+{
+	var oFragment = e.ownerDocument.createDocumentFragment() ;
+
+	for ( var i = 0 ; i < e.childNodes.length ; i++ )
+		oFragment.appendChild( e.childNodes[i].cloneNode(true) ) ;
+
+	e.parentNode.replaceChild( oFragment, e ) ;
+}
+
+FCKTools.CreateXmlObject = function( object )
+{
+	switch ( object )
+	{
+		case 'XmlHttp' :
+			return new XMLHttpRequest() ;
+		case 'DOMDocument' :
+			return document.implementation.createDocument( '', '', null ) ;
+	}
+	return null ;
+}
+
+FCKTools.GetScrollPosition = function( relativeWindow )
+{
+	return { X : relativeWindow.pageXOffset, Y : relativeWindow.pageYOffset } ;
+}
+
+FCKTools.AddEventListener = function( sourceObject, eventName, listener )
+{
+	sourceObject.addEventListener( eventName, listener, false ) ;
+}
+
+FCKTools.RemoveEventListener = function( sourceObject, eventName, listener )
+{
+	sourceObject.removeEventListener( eventName, listener, false ) ;
+}
+
+// Listeners attached with this function cannot be detached.
+FCKTools.AddEventListenerEx = function( sourceObject, eventName, listener, paramsArray )
+{
+	sourceObject.addEventListener(
+		eventName,
+		function( e )
+		{
+			listener.apply( sourceObject, [ e ].concat( paramsArray || [] ) ) ;
+		},
+		false
+	) ;
+}
+
+// Returns and object with the "Width" and "Height" properties.
+FCKTools.GetViewPaneSize = function( win )
+{
+	return { Width : win.innerWidth, Height : win.innerHeight } ;
+}
+
+FCKTools.SaveStyles = function( element )
+{
+	var data = FCKTools.ProtectFormStyles( element ) ;
+
+	var oSavedStyles = new Object() ;
+
+	if ( element.className.length > 0 )
+	{
+		oSavedStyles.Class = element.className ;
+		element.className = '' ;
+	}
+
+	var sInlineStyle = element.getAttribute( 'style' ) ;
+
+	if ( sInlineStyle && sInlineStyle.length > 0 )
+	{
+		oSavedStyles.Inline = sInlineStyle ;
+		element.setAttribute( 'style', '', 0 ) ;	// 0 : Case Insensitive
+	}
+
+	FCKTools.RestoreFormStyles( element, data ) ;
+	return oSavedStyles ;
+}
+
+FCKTools.RestoreStyles = function( element, savedStyles )
+{
+	var data = FCKTools.ProtectFormStyles( element ) ;
+	element.className = savedStyles.Class || '' ;
+
+	if ( savedStyles.Inline )
+		element.setAttribute( 'style', savedStyles.Inline, 0 ) ;	// 0 : Case Insensitive
+	else
+		element.removeAttribute( 'style', 0 ) ;
+	FCKTools.RestoreFormStyles( element, data ) ;
+}
+
+FCKTools.RegisterDollarFunction = function( targetWindow )
+{
+	targetWindow.$ = function( id )
+	{
+		return this.document.getElementById( id ) ;
+	} ;
+}
+
+FCKTools.AppendElement = function( target, elementName )
+{
+	return target.appendChild( target.ownerDocument.createElement( elementName ) ) ;
+}
+
+// Get the coordinates of an element.
+//		@el : The element to get the position.
+//		@relativeWindow: The window to which we want the coordinates relative to.
+FCKTools.GetElementPosition = function( el, relativeWindow )
+{
+	// Initializes the Coordinates object that will be returned by the function.
+	var c = { X:0, Y:0 } ;
+
+	var oWindow = relativeWindow || window ;
+
+	var oOwnerWindow = FCKTools.GetElementWindow( el ) ;
+
+	var previousElement = null ;
+	// Loop throw the offset chain.
+	while ( el )
+	{
+		var sPosition = oOwnerWindow.getComputedStyle(el, '').position ;
+
+		// Check for non "static" elements.
+		// 'FCKConfig.FloatingPanelsZIndex' -- Submenus are under a positioned IFRAME.
+		if ( sPosition && sPosition != 'static' && el.style.zIndex != FCKConfig.FloatingPanelsZIndex )
+			break ;
+
+		/*
+		FCKDebug.Output( el.tagName + ":" + "offset=" + el.offsetLeft + "," + el.offsetTop + "  " 
+				+ "scroll=" + el.scrollLeft + "," + el.scrollTop ) ;
+		*/
+
+		c.X += el.offsetLeft - el.scrollLeft ;
+		c.Y += el.offsetTop - el.scrollTop  ;
+
+		// Backtrack due to offsetParent's calculation by the browser ignores scrollLeft and scrollTop.
+		// Backtracking is not needed for Opera
+		if ( ! FCKBrowserInfo.IsOpera )
+		{
+			var scrollElement = previousElement ;
+			while ( scrollElement && scrollElement != el )
+			{
+				c.X -= scrollElement.scrollLeft ;
+				c.Y -= scrollElement.scrollTop ;
+				scrollElement = scrollElement.parentNode ;
+			}
+		}
+
+		previousElement = el ;
+		if ( el.offsetParent )
+			el = el.offsetParent ;
+		else
+		{
+			if ( oOwnerWindow != oWindow )
+			{
+				el = oOwnerWindow.frameElement ;
+				previousElement = null ;
+				if ( el )
+					oOwnerWindow = FCKTools.GetElementWindow( el ) ;
+			}
+			else
+			{
+				c.X += el.scrollLeft ;
+				c.Y += el.scrollTop  ;
+				break ;
+			}
+		}
+	}
+
+	// Return the Coordinates object
+	return c ;
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fcktools_ie.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fcktools_ie.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fcktools_ie.js	(revision 1280)
@@ -0,0 +1,227 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Utility functions. (IE version).
+ */
+
+FCKTools.CancelEvent = function( e )
+{
+	return false ;
+}
+
+// Appends one or more CSS files to a document.
+FCKTools._AppendStyleSheet = function( documentElement, cssFileUrl )
+{
+	return documentElement.createStyleSheet( cssFileUrl ).owningElement ;
+}
+
+// Appends a CSS style string to a document.
+FCKTools._AppendStyleString = function( documentElement, cssStyles )
+{
+	var s = documentElement.createStyleSheet( "" ) ;
+	s.cssText = cssStyles ;
+	return s ;
+}
+
+// Removes all attributes and values from the element.
+FCKTools.ClearElementAttributes = function( element )
+{
+	element.clearAttributes() ;
+}
+
+FCKTools.GetAllChildrenIds = function( parentElement )
+{
+	var aIds = new Array() ;
+	for ( var i = 0 ; i < parentElement.all.length ; i++ )
+	{
+		var sId = parentElement.all[i].id ;
+		if ( sId && sId.length > 0 )
+			aIds[ aIds.length ] = sId ;
+	}
+	return aIds ;
+}
+
+FCKTools.RemoveOuterTags = function( e )
+{
+	e.insertAdjacentHTML( 'beforeBegin', e.innerHTML ) ;
+	e.parentNode.removeChild( e ) ;
+}
+
+FCKTools.CreateXmlObject = function( object )
+{
+	var aObjs ;
+
+	switch ( object )
+	{
+		case 'XmlHttp' :
+			aObjs = [ 'MSXML2.XmlHttp', 'Microsoft.XmlHttp' ] ;
+			break ;
+
+		case 'DOMDocument' :
+			aObjs = [ 'MSXML2.DOMDocument', 'Microsoft.XmlDom' ] ;
+			break ;
+	}
+
+	for ( var i = 0 ; i < 2 ; i++ )
+	{
+		try { return new ActiveXObject( aObjs[i] ) ; }
+		catch (e)
+		{}
+	}
+
+	if ( FCKLang.NoActiveX )
+	{
+		alert( FCKLang.NoActiveX ) ;
+		FCKLang.NoActiveX = null ;
+	}
+	return null ;
+}
+
+FCKTools.DisableSelection = function( element )
+{
+	element.unselectable = 'on' ;
+
+	var e, i = 0 ;
+	// The extra () is to avoid a warning with strict error checking. This is ok.
+	while ( (e = element.all[ i++ ]) )
+	{
+		switch ( e.tagName )
+		{
+			case 'IFRAME' :
+			case 'TEXTAREA' :
+			case 'INPUT' :
+			case 'SELECT' :
+				/* Ignore the above tags */
+				break ;
+			default :
+				e.unselectable = 'on' ;
+		}
+	}
+}
+
+FCKTools.GetScrollPosition = function( relativeWindow )
+{
+	var oDoc = relativeWindow.document ;
+
+	// Try with the doc element.
+	var oPos = { X : oDoc.documentElement.scrollLeft, Y : oDoc.documentElement.scrollTop } ;
+
+	if ( oPos.X > 0 || oPos.Y > 0 )
+		return oPos ;
+
+	// If no scroll, try with the body.
+	return { X : oDoc.body.scrollLeft, Y : oDoc.body.scrollTop } ;
+}
+
+FCKTools.AddEventListener = function( sourceObject, eventName, listener )
+{
+	sourceObject.attachEvent( 'on' + eventName, listener ) ;
+}
+
+FCKTools.RemoveEventListener = function( sourceObject, eventName, listener )
+{
+	sourceObject.detachEvent( 'on' + eventName, listener ) ;
+}
+
+// Listeners attached with this function cannot be detached.
+FCKTools.AddEventListenerEx = function( sourceObject, eventName, listener, paramsArray )
+{
+	// Ok... this is a closures party, but is the only way to make it clean of memory leaks.
+	var o = new Object() ;
+	o.Source = sourceObject ;
+	o.Params = paramsArray || [] ;	// Memory leak if we have DOM objects here.
+	o.Listener = function( ev )
+	{
+		return listener.apply( o.Source, [ ev ].concat( o.Params ) ) ;
+	}
+
+	if ( FCK.IECleanup )
+		FCK.IECleanup.AddItem( null, function() { o.Source = null ; o.Params = null ; } ) ;
+
+	sourceObject.attachEvent( 'on' + eventName, o.Listener ) ;
+
+	sourceObject = null ;	// Memory leak cleaner (because of the above closure).
+	paramsArray = null ;	// Memory leak cleaner (because of the above closure).
+}
+
+// Returns and object with the "Width" and "Height" properties.
+FCKTools.GetViewPaneSize = function( win )
+{
+	var oSizeSource ;
+
+	var oDoc = win.document.documentElement ;
+	if ( oDoc && oDoc.clientWidth )				// IE6 Strict Mode
+		oSizeSource = oDoc ;
+	else
+		oSizeSource = win.document.body ;		// Other IEs
+
+	if ( oSizeSource )
+		return { Width : oSizeSource.clientWidth, Height : oSizeSource.clientHeight } ;
+	else
+		return { Width : 0, Height : 0 } ;
+}
+
+FCKTools.SaveStyles = function( element )
+{
+	var data = FCKTools.ProtectFormStyles( element ) ;
+
+	var oSavedStyles = new Object() ;
+
+	if ( element.className.length > 0 )
+	{
+		oSavedStyles.Class = element.className ;
+		element.className = '' ;
+	}
+
+	var sInlineStyle = element.style.cssText ;
+
+	if ( sInlineStyle.length > 0 )
+	{
+		oSavedStyles.Inline = sInlineStyle ;
+		element.style.cssText = '' ;
+	}
+
+	FCKTools.RestoreFormStyles( element, data ) ;
+	return oSavedStyles ;
+}
+
+FCKTools.RestoreStyles = function( element, savedStyles )
+{
+	var data = FCKTools.ProtectFormStyles( element ) ;
+	element.className		= savedStyles.Class || '' ;
+	element.style.cssText	= savedStyles.Inline || '' ;
+	FCKTools.RestoreFormStyles( element, data ) ;
+}
+
+FCKTools.RegisterDollarFunction = function( targetWindow )
+{
+	targetWindow.$ = targetWindow.document.getElementById ;
+}
+
+FCKTools.AppendElement = function( target, elementName )
+{
+	return target.appendChild( this.GetElementDocument( target ).createElement( elementName ) ) ;
+}
+
+// This function may be used by Regex replacements.
+FCKTools.ToLowerCase = function( strValue )
+{
+	return strValue.toLowerCase() ;
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fckundo.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fckundo.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fckundo.js	(revision 1280)
@@ -0,0 +1,220 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ */
+
+var FCKUndo = new Object() ;
+
+FCKUndo.SavedData = new Array() ;
+FCKUndo.CurrentIndex = -1 ;
+FCKUndo.TypesCount = 0 ;
+FCKUndo.Changed = false ;	// Is the document changed in respect to its initial image?
+FCKUndo.MaxTypes = 25 ;
+FCKUndo.Typing = false ;
+
+FCKUndo._GetBookmark = function()
+{
+	var range = new FCKDomRange( FCK.EditorWindow ) ;
+	try
+	{
+		// There are some tricky cases where this might fail (e.g. having a lone empty table in IE)
+		range.MoveToSelection() ;
+	}
+	catch ( e )
+	{
+		return null ;
+	}
+	if ( FCKBrowserInfo.IsIE )
+	{
+		var bookmark = range.CreateBookmark() ;
+		var dirtyHtml = FCK.EditorDocument.body.innerHTML ;
+		range.MoveToBookmark( bookmark ) ;
+		return [ bookmark, dirtyHtml ] ;
+	}
+	return range.CreateBookmark2() ;
+}
+
+FCKUndo._SelectBookmark = function( bookmark )
+{
+	if ( ! bookmark )
+		return ;
+
+	var range = new FCKDomRange( FCK.EditorWindow ) ;
+	if ( bookmark instanceof Object )
+	{
+		if ( FCKBrowserInfo.IsIE )
+			range.MoveToBookmark( bookmark[0] ) ;
+		else
+			range.MoveToBookmark2( bookmark ) ;
+		try
+		{
+			// this does not always succeed, there are still some tricky cases where it fails
+			// e.g. add a special character at end of document, undo, redo -> error
+			range.Select() ;
+		}
+		catch ( e )
+		{
+			// if select restore fails, put the caret at the end of the document
+			range.MoveToPosition( FCK.EditorDocument.body, 4 ) ;
+			range.Select() ;
+		}
+	}
+}
+
+FCKUndo._CompareCursors = function( cursor1, cursor2 )
+{
+	for ( var i = 0 ; i < Math.min( cursor1.length, cursor2.length ) ; i++ )
+	{
+		if ( cursor1[i] < cursor2[i] )
+			return -1;
+		else if (cursor1[i] > cursor2[i] )
+			return 1;
+	}
+	if ( cursor1.length < cursor2.length )
+		return -1;
+	else if (cursor1.length > cursor2.length )
+		return 1;
+	return 0;
+}
+
+FCKUndo._CheckIsBookmarksEqual = function( bookmark1, bookmark2 )
+{
+	if ( ! ( bookmark1 && bookmark2 ) )
+		return false ;
+	if ( FCKBrowserInfo.IsIE )
+	{
+		var startOffset1 = bookmark1[1].search( bookmark1[0].StartId ) ;
+		var startOffset2 = bookmark2[1].search( bookmark2[0].StartId ) ;
+		var endOffset1 = bookmark1[1].search( bookmark1[0].EndId ) ;
+		var endOffset2 = bookmark2[1].search( bookmark2[0].EndId ) ;
+		return startOffset1 == startOffset2 && endOffset1 == endOffset2 ;
+	}
+	else
+	{
+		return this._CompareCursors( bookmark1.Start, bookmark2.Start ) == 0 
+			&& this._CompareCursors( bookmark1.End, bookmark2.End ) == 0 ;
+	}
+}
+
+FCKUndo.SaveUndoStep = function()
+{
+	if ( FCK.EditMode != FCK_EDITMODE_WYSIWYG )
+		return ;
+
+	// Assume the editor content is changed when SaveUndoStep() is called after the first time.
+	// This also enables the undo button in toolbar.
+	if ( this.SavedData.length )
+		this.Changed = true ;
+
+	// Get the HTML content.
+	var sHtml = FCK.EditorDocument.body.innerHTML ;
+	var bookmark = this._GetBookmark() ;
+
+	// Shrink the array to the current level.
+	this.SavedData = this.SavedData.slice( 0, this.CurrentIndex + 1 ) ;
+
+	// Cancel operation if the new step is identical to the previous one.
+	if ( this.CurrentIndex > 0 
+			&& sHtml == this.SavedData[ this.CurrentIndex ][0] 
+			&& this._CheckIsBookmarksEqual( bookmark, this.SavedData[ this.CurrentIndex ][1] ) )
+		return ;
+	// Save the selection and caret position in the first undo level for the first change.
+	else if ( this.CurrentIndex == 0 && this.SavedData.length && sHtml == this.SavedData[0][0] )
+	{
+		this.SavedData[0][1] = bookmark ;
+		return ;
+	}
+
+	// If we reach the Maximum number of undo levels, we must remove the first
+	// entry of the list shifting all elements.
+	if ( this.CurrentIndex + 1 >= FCKConfig.MaxUndoLevels )
+		this.SavedData.shift() ;
+	else
+		this.CurrentIndex++ ;
+
+	// Save the new level in front of the actual position.
+	this.SavedData[ this.CurrentIndex ] = [ sHtml, bookmark ] ;
+
+	FCK.Events.FireEvent( "OnSelectionChange" ) ;
+}
+
+FCKUndo.CheckUndoState = function()
+{
+	return ( this.Changed || this.CurrentIndex > 0 ) ;
+}
+
+FCKUndo.CheckRedoState = function()
+{
+	return ( this.CurrentIndex < ( this.SavedData.length - 1 ) ) ;
+}
+
+FCKUndo.Undo = function()
+{
+	if ( this.CheckUndoState() )
+	{
+		// If it is the first step.
+		if ( this.CurrentIndex == ( this.SavedData.length - 1 ) )
+		{
+			// Save the actual state for a possible "Redo" call.
+			this.SaveUndoStep() ;
+		}
+
+		// Go a step back.
+		this._ApplyUndoLevel( --this.CurrentIndex ) ;
+
+		FCK.Events.FireEvent( "OnSelectionChange" ) ;
+	}
+}
+
+FCKUndo.Redo = function()
+{
+	if ( this.CheckRedoState() )
+	{
+		// Go a step forward.
+		this._ApplyUndoLevel( ++this.CurrentIndex ) ;
+
+		FCK.Events.FireEvent( "OnSelectionChange" ) ;
+	}
+}
+
+FCKUndo._ApplyUndoLevel = function( level )
+{
+	var oData = this.SavedData[ level ] ;
+
+	if ( !oData )
+		return ;
+
+	// Update the editor contents with that step data.
+	if ( FCKBrowserInfo.IsIE )
+	{
+		if ( oData[1] && oData[1][1] )
+			FCK.SetInnerHtml( oData[1][1] ) ;
+		else
+			FCK.SetInnerHtml( oData[0] ) ;
+	}
+	else
+		FCK.EditorDocument.body.innerHTML = oData[0] ;
+
+	// Restore the selection
+	this._SelectBookmark( oData[1] ) ;
+
+	this.TypesCount = 0 ;
+	this.Changed = false ;
+	this.Typing = false ;
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fckurlparams.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fckurlparams.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fckurlparams.js	(revision 1280)
@@ -0,0 +1,39 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Defines the FCKURLParams object that is used to get all parameters
+ * passed by the URL QueryString (after the "?").
+ */
+
+// #### URLParams: holds all URL passed parameters (like ?Param1=Value1&Param2=Value2)
+var FCKURLParams = new Object() ;
+
+(function()
+{
+	var aParams = document.location.search.substr(1).split('&') ;
+	for ( var i = 0 ; i < aParams.length ; i++ )
+	{
+		var aParam = aParams[i].split('=') ;
+		var sParamName  = decodeURIComponent( aParam[0] ) ;
+		var sParamValue = decodeURIComponent( aParam[1] ) ;
+
+		FCKURLParams[ sParamName ] = sParamValue ;
+	}
+})();
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fckxhtml.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fckxhtml.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fckxhtml.js	(revision 1280)
@@ -0,0 +1,458 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Defines the FCKXHtml object, responsible for the XHTML operations.
+ */
+
+var FCKXHtml = new Object() ;
+
+FCKXHtml.CurrentJobNum = 0 ;
+
+FCKXHtml.GetXHTML = function( node, includeNode, format )
+{
+	FCKDomTools.CheckAndRemovePaddingNode( node.ownerDocument, FCKConfig.EnterMode ) ;
+	FCKXHtmlEntities.Initialize() ;
+
+	// Set the correct entity to use for empty blocks.
+	this._NbspEntity = ( FCKConfig.ProcessHTMLEntities? 'nbsp' : '#160' ) ;
+
+	// Save the current IsDirty state. The XHTML processor may change the
+	// original HTML, dirtying it.
+	var bIsDirty = FCK.IsDirty() ;
+
+	// Special blocks are blocks of content that remain untouched during the
+	// process. It is used for SCRIPTs and STYLEs.
+	FCKXHtml.SpecialBlocks = new Array() ;
+
+	// Create the XML DOMDocument object.
+	this.XML = FCKTools.CreateXmlObject( 'DOMDocument' ) ;
+
+	// Add a root element that holds all child nodes.
+	this.MainNode = this.XML.appendChild( this.XML.createElement( 'xhtml' ) ) ;
+
+	FCKXHtml.CurrentJobNum++ ;
+
+//	var dTimer = new Date() ;
+
+	if ( includeNode )
+		this._AppendNode( this.MainNode, node ) ;
+	else
+		this._AppendChildNodes( this.MainNode, node, false ) ;
+
+	// Get the resulting XHTML as a string.
+	var sXHTML = this._GetMainXmlString() ;
+
+//	alert( 'Time: ' + ( ( ( new Date() ) - dTimer ) ) + ' ms' ) ;
+
+	this.XML = null ;
+
+	// Safari adds xmlns="http://www.w3.org/1999/xhtml" to the root node (#963)
+	if ( FCKBrowserInfo.IsSafari )
+		sXHTML = sXHTML.replace( /^<xhtml.*?>/, '<xhtml>' ) ;
+
+	// Strip the "XHTML" root node.
+	sXHTML = sXHTML.substr( 7, sXHTML.length - 15 ).Trim() ;
+
+	// Add a space in the tags with no closing tags, like <br/> -> <br />
+	sXHTML = sXHTML.replace( FCKRegexLib.SpaceNoClose, ' />');
+
+	if ( FCKConfig.ForceSimpleAmpersand )
+		sXHTML = sXHTML.replace( FCKRegexLib.ForceSimpleAmpersand, '&' ) ;
+
+	if ( format )
+		sXHTML = FCKCodeFormatter.Format( sXHTML ) ;
+
+	// Now we put back the SpecialBlocks contents.
+	for ( var i = 0 ; i < FCKXHtml.SpecialBlocks.length ; i++ )
+	{
+		var oRegex = new RegExp( '___FCKsi___' + i ) ;
+		sXHTML = sXHTML.replace( oRegex, FCKXHtml.SpecialBlocks[i] ) ;
+	}
+
+	// Replace entities marker with the ampersand.
+	sXHTML = sXHTML.replace( FCKRegexLib.GeckoEntitiesMarker, '&' ) ;
+
+	// Restore the IsDirty state if it was not dirty.
+	if ( !bIsDirty )
+		FCK.ResetIsDirty() ;
+
+	FCKDomTools.EnforcePaddingNode( FCKTools.GetElementDocument( node ), FCKConfig.EnterMode ) ;
+	return sXHTML ;
+}
+
+FCKXHtml._AppendAttribute = function( xmlNode, attributeName, attributeValue )
+{
+	try
+	{
+		if ( attributeValue == undefined || attributeValue == null )
+			attributeValue = '' ;
+		else if ( attributeValue.replace )
+		{
+			if ( FCKConfig.ForceSimpleAmpersand )
+				attributeValue = attributeValue.replace( /&/g, '___FCKAmp___' ) ;
+
+			// Entities must be replaced in the attribute values.
+			attributeValue = attributeValue.replace( FCKXHtmlEntities.EntitiesRegex, FCKXHtml_GetEntity ) ;
+		}
+
+		// Create the attribute.
+		var oXmlAtt = this.XML.createAttribute( attributeName ) ;
+		oXmlAtt.value = attributeValue ;
+
+		// Set the attribute in the node.
+		xmlNode.attributes.setNamedItem( oXmlAtt ) ;
+	}
+	catch (e)
+	{}
+}
+
+FCKXHtml._AppendChildNodes = function( xmlNode, htmlNode, isBlockElement )
+{
+	var oNode = htmlNode.firstChild ;
+
+	while ( oNode )
+	{
+		this._AppendNode( xmlNode, oNode ) ;
+		oNode = oNode.nextSibling ;
+	}
+
+	// Trim block elements. This is also needed to avoid Firefox leaving extra
+	// BRs at the end of them.
+	if ( isBlockElement && htmlNode.tagName && htmlNode.tagName.toLowerCase() != 'pre' )
+	{
+		FCKDomTools.TrimNode( xmlNode ) ;
+
+		if ( FCKConfig.FillEmptyBlocks )
+		{
+			var lastChild = xmlNode.lastChild ;
+			if ( lastChild && lastChild.nodeType == 1 && lastChild.nodeName == 'br' )
+				this._AppendEntity( xmlNode, this._NbspEntity ) ;
+		}
+	}
+	
+	// If the resulting node is empty.
+	if ( xmlNode.childNodes.length == 0 )
+	{
+		if ( isBlockElement && FCKConfig.FillEmptyBlocks )
+		{
+			this._AppendEntity( xmlNode, this._NbspEntity ) ;
+			return xmlNode ;
+		}
+
+		var sNodeName = xmlNode.nodeName ;
+
+		// Some inline elements are required to have something inside (span, strong, etc...).
+		if ( FCKListsLib.InlineChildReqElements[ sNodeName ] )
+			return null ;
+
+		// We can't use short representation of empty elements that are not marked
+		// as empty in th XHTML DTD.
+		if ( !FCKListsLib.EmptyElements[ sNodeName ] )
+			xmlNode.appendChild( this.XML.createTextNode('') ) ;
+	}
+
+	return xmlNode ;
+}
+
+FCKXHtml._AppendNode = function( xmlNode, htmlNode )
+{
+	if ( !htmlNode )
+		return false ;
+
+	switch ( htmlNode.nodeType )
+	{
+		// Element Node.
+		case 1 :
+			// If we detect a <br> inside a <pre> in Gecko, turn it into a line break instead.
+			// This is a workaround for the Gecko bug here: https://bugzilla.mozilla.org/show_bug.cgi?id=92921
+			if ( FCKBrowserInfo.IsGecko 
+					&& htmlNode.tagName.toLowerCase() == 'br' 
+					&& htmlNode.parentNode.tagName.toLowerCase() == 'pre' )
+			{
+				var val = '\r' ;
+				if ( htmlNode == htmlNode.parentNode.firstChild )
+					val += '\r' ;
+				return FCKXHtml._AppendNode( xmlNode, this.XML.createTextNode( val ) ) ;
+			}
+
+			// Here we found an element that is not the real element, but a
+			// fake one (like the Flash placeholder image), so we must get the real one.
+			if ( htmlNode.getAttribute('_fckfakelement') )
+				return FCKXHtml._AppendNode( xmlNode, FCK.GetRealElement( htmlNode ) ) ;
+
+			// Ignore bogus BR nodes in the DOM.
+			if ( FCKBrowserInfo.IsGecko && 
+					( htmlNode.hasAttribute('_moz_editor_bogus_node') || htmlNode.getAttribute( 'type' ) == '_moz' ) )
+				return false ;
+
+			// This is for elements that are instrumental to FCKeditor and
+			// must be removed from the final HTML.
+			if ( htmlNode.getAttribute('_fcktemp') )
+				return false ;
+
+			// Get the element name.
+			var sNodeName = htmlNode.tagName.toLowerCase()  ;
+
+			if ( FCKBrowserInfo.IsIE )
+			{
+				// IE doens't include the scope name in the nodeName. So, add the namespace.
+				if ( htmlNode.scopeName && htmlNode.scopeName != 'HTML' && htmlNode.scopeName != 'FCK' )
+					sNodeName = htmlNode.scopeName.toLowerCase() + ':' + sNodeName ;
+			}
+			else
+			{
+				if ( sNodeName.StartsWith( 'fck:' ) )
+					sNodeName = sNodeName.Remove( 0,4 ) ;
+			}
+
+			// Check if the node name is valid, otherwise ignore this tag.
+			// If the nodeName starts with a slash, it is a orphan closing tag.
+			// On some strange cases, the nodeName is empty, even if the node exists.
+			if ( !FCKRegexLib.ElementName.test( sNodeName ) )
+				return false ;
+
+			// The already processed nodes must be marked to avoid then to be duplicated (bad formatted HTML).
+			// So here, the "mark" is checked... if the element is Ok, then mark it.
+			if ( htmlNode._fckxhtmljob && htmlNode._fckxhtmljob == FCKXHtml.CurrentJobNum )
+				return false ;
+
+			var oNode = this.XML.createElement( sNodeName ) ;
+			
+			// Add all attributes.
+			FCKXHtml._AppendAttributes( xmlNode, htmlNode, oNode, sNodeName ) ;
+
+			htmlNode._fckxhtmljob = FCKXHtml.CurrentJobNum ;
+
+			// Tag specific processing.
+			var oTagProcessor = FCKXHtml.TagProcessors[ sNodeName ] ;
+
+			if ( oTagProcessor )
+				oNode = oTagProcessor( oNode, htmlNode, xmlNode ) ;
+			else
+				oNode = this._AppendChildNodes( oNode, htmlNode, Boolean( FCKListsLib.NonEmptyBlockElements[ sNodeName ] ) ) ;
+
+			if ( !oNode )
+				return false ;
+
+			xmlNode.appendChild( oNode ) ;
+
+			break ;
+
+		// Text Node.
+		case 3 :
+			if ( htmlNode.parentNode && htmlNode.parentNode.nodeName.IEquals( 'pre' ) )
+				return this._AppendTextNode( xmlNode, htmlNode.nodeValue ) ;
+			return this._AppendTextNode( xmlNode, htmlNode.nodeValue.ReplaceNewLineChars(' ') ) ;
+
+		// Comment
+		case 8 :
+			// IE catches the <!DOTYPE ... > as a comment, but it has no
+			// innerHTML, so we can catch it, and ignore it.
+			if ( FCKBrowserInfo.IsIE && !htmlNode.innerHTML )
+				break ;
+
+			try { xmlNode.appendChild( this.XML.createComment( htmlNode.nodeValue ) ) ; }
+			catch (e) { /* Do nothing... probably this is a wrong format comment. */ }
+			break ;
+
+		// Unknown Node type.
+		default :
+			xmlNode.appendChild( this.XML.createComment( "Element not supported - Type: " + htmlNode.nodeType + " Name: " + htmlNode.nodeName ) ) ;
+			break ;
+	}
+	return true ;
+}
+
+// Append an item to the SpecialBlocks array and returns the tag to be used.
+FCKXHtml._AppendSpecialItem = function( item )
+{
+	return '___FCKsi___' + FCKXHtml.SpecialBlocks.AddItem( item ) ;
+}
+
+FCKXHtml._AppendEntity = function( xmlNode, entity )
+{
+	xmlNode.appendChild( this.XML.createTextNode( '#?-:' + entity + ';' ) ) ;
+}
+
+FCKXHtml._AppendTextNode = function( targetNode, textValue )
+{
+	var bHadText = textValue.length > 0 ;
+	if ( bHadText )
+		targetNode.appendChild( this.XML.createTextNode( textValue.replace( FCKXHtmlEntities.EntitiesRegex, FCKXHtml_GetEntity ) ) ) ;
+	return bHadText ;
+}
+
+// Retrieves a entity (internal format) for a given character.
+function FCKXHtml_GetEntity( character )
+{
+	// We cannot simply place the entities in the text, because the XML parser
+	// will translate & to &amp;. So we use a temporary marker which is replaced
+	// in the end of the processing.
+	var sEntity = FCKXHtmlEntities.Entities[ character ] || ( '#' + character.charCodeAt(0) ) ;
+	return '#?-:' + sEntity + ';' ;
+}
+
+// An object that hold tag specific operations.
+FCKXHtml.TagProcessors =
+{
+	img : function( node, htmlNode )
+	{
+		// The "ALT" attribute is required in XHTML.
+		if ( ! node.attributes.getNamedItem( 'alt' ) )
+			FCKXHtml._AppendAttribute( node, 'alt', '' ) ;
+
+		var sSavedUrl = htmlNode.getAttribute( '_fcksavedurl' ) ;
+		if ( sSavedUrl != null )
+			FCKXHtml._AppendAttribute( node, 'src', sSavedUrl ) ;
+
+		return node ;
+	},
+
+	a : function( node, htmlNode )
+	{
+		// Firefox may create empty tags when deleting the selection in some special cases (SF-BUG 1556878).
+		if ( htmlNode.innerHTML.Trim().length == 0 && !htmlNode.name )
+			return false ;
+
+		var sSavedUrl = htmlNode.getAttribute( '_fcksavedurl' ) ;
+		if ( sSavedUrl != null )
+			FCKXHtml._AppendAttribute( node, 'href', sSavedUrl ) ;
+
+
+		// Anchors with content has been marked with an additional class, now we must remove it.
+		if ( FCKBrowserInfo.IsIE )
+		{
+			// Buggy IE, doesn't copy the name of changed anchors.
+			if ( htmlNode.name )
+				FCKXHtml._AppendAttribute( node, 'name', htmlNode.name ) ;
+		}
+
+		node = FCKXHtml._AppendChildNodes( node, htmlNode, false ) ;
+
+		return node ;
+	},
+
+	script : function( node, htmlNode )
+	{
+		// The "TYPE" attribute is required in XHTML.
+		if ( ! node.attributes.getNamedItem( 'type' ) )
+			FCKXHtml._AppendAttribute( node, 'type', 'text/javascript' ) ;
+
+		node.appendChild( FCKXHtml.XML.createTextNode( FCKXHtml._AppendSpecialItem( htmlNode.text ) ) ) ;
+
+		return node ;
+	},
+
+	style : function( node, htmlNode )
+	{
+		// The "TYPE" attribute is required in XHTML.
+		if ( ! node.attributes.getNamedItem( 'type' ) )
+			FCKXHtml._AppendAttribute( node, 'type', 'text/css' ) ;
+
+		var cssText = htmlNode.innerHTML ;
+		if ( FCKBrowserInfo.IsIE )	// Bug #403 : IE always appends a \r\n to the beginning of StyleNode.innerHTML
+			cssText = cssText.replace( /^(\r\n|\n|\r)/, '' ) ;
+
+		node.appendChild( FCKXHtml.XML.createTextNode( FCKXHtml._AppendSpecialItem( cssText ) ) ) ;
+
+		return node ;
+	},
+
+	pre : function ( node, htmlNode )
+	{
+		var firstChild = htmlNode.firstChild ;
+
+		if ( firstChild && firstChild.nodeType == 3 )
+			node.appendChild( FCKXHtml.XML.createTextNode( FCKXHtml._AppendSpecialItem( '\r\n' ) ) ) ;
+
+		FCKXHtml._AppendChildNodes( node, htmlNode, true ) ;
+
+		return node ;
+	},
+
+	title : function( node, htmlNode )
+	{
+		node.appendChild( FCKXHtml.XML.createTextNode( FCK.EditorDocument.title ) ) ;
+
+		return node ;
+	},
+
+	// Fix nested <ul> and <ol>.
+	ol : function( node, htmlNode, targetNode )
+	{
+		if ( htmlNode.innerHTML.Trim().length == 0 )
+			return false ;
+
+		var ePSibling = targetNode.lastChild ;
+
+		if ( ePSibling && ePSibling.nodeType == 3 )
+			ePSibling = ePSibling.previousSibling ;
+
+		if ( ePSibling && ePSibling.nodeName.toUpperCase() == 'LI' )
+		{
+			htmlNode._fckxhtmljob = null ;
+			FCKXHtml._AppendNode( ePSibling, htmlNode ) ;
+			return false ;
+		}
+
+		node = FCKXHtml._AppendChildNodes( node, htmlNode ) ;
+
+		return node ;
+	},
+
+	span : function( node, htmlNode )
+	{
+		// Firefox may create empty tags when deleting the selection in some special cases (SF-BUG 1084404).
+		if ( htmlNode.innerHTML.length == 0 )
+			return false ;
+
+		node = FCKXHtml._AppendChildNodes( node, htmlNode, false ) ;
+
+		return node ;
+	},
+
+	// IE loses contents of iframes, and Gecko does give it back HtmlEncoded
+	// Note: Opera does lose the content and doesn't provide it in the innerHTML string
+	iframe : function( node, htmlNode )
+	{
+		var sHtml = htmlNode.innerHTML ;
+
+		// Gecko does give back the encoded html
+		if ( FCKBrowserInfo.IsGecko )
+			sHtml = FCKTools.HTMLDecode( sHtml );
+
+		// Remove the saved urls here as the data won't be processed as nodes
+		sHtml = sHtml.replace( /\s_fcksavedurl="[^"]*"/g, '' ) ;
+
+		node.appendChild( FCKXHtml.XML.createTextNode( FCKXHtml._AppendSpecialItem( sHtml ) ) ) ;
+
+		return node ;
+	},
+
+	body : function( node, htmlNode )
+	{
+		node = FCKXHtml._AppendChildNodes( node, htmlNode, false ) ;
+		// Remove spellchecker attributes added for Firefox when converting to HTML code (Bug #1351).
+		node.removeAttribute( 'spellcheck' ) ;
+		return node ;
+	}
+} ;
+
+FCKXHtml.TagProcessors.ul = FCKXHtml.TagProcessors.ol ;
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fckxhtml_gecko.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fckxhtml_gecko.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fckxhtml_gecko.js	(revision 1280)
@@ -0,0 +1,105 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Defines the FCKXHtml object, responsible for the XHTML operations.
+ * Gecko specific.
+ */
+
+FCKXHtml._GetMainXmlString = function()
+{
+	// Create the XMLSerializer.
+	var oSerializer = new XMLSerializer() ;
+
+	// Return the serialized XML as a string.
+	return oSerializer.serializeToString( this.MainNode ) ;
+}
+
+FCKXHtml._AppendAttributes = function( xmlNode, htmlNode, node )
+{
+	var aAttributes = htmlNode.attributes ;
+
+	for ( var n = 0 ; n < aAttributes.length ; n++ )
+	{
+		var oAttribute = aAttributes[n] ;
+
+		if ( oAttribute.specified )
+		{
+			var sAttName = oAttribute.nodeName.toLowerCase() ;
+			var sAttValue ;
+
+			// Ignore any attribute starting with "_fck".
+			if ( sAttName.StartsWith( '_fck' ) )
+				continue ;
+			// There is a bug in Mozilla that returns '_moz_xxx' attributes as specified.
+			else if ( sAttName.indexOf( '_moz' ) == 0 )
+				continue ;
+			// There are one cases (on Gecko) when the oAttribute.nodeValue must be used:
+			//		- for the "class" attribute
+			else if ( sAttName == 'class' )
+			{
+				sAttValue = oAttribute.nodeValue.replace( FCKRegexLib.FCK_Class, '' ) ;
+				if ( sAttValue.length == 0 )
+					continue ;
+			}
+			// XHTML doens't support attribute minimization like "CHECKED". It must be transformed to checked="checked".
+			else if ( oAttribute.nodeValue === true )
+				sAttValue = sAttName ;
+			else
+				sAttValue = htmlNode.getAttribute( sAttName, 2 ) ;	// We must use getAttribute to get it exactly as it is defined.
+
+			this._AppendAttribute( node, sAttName, sAttValue ) ;
+		}
+	}
+}
+
+if ( FCKBrowserInfo.IsOpera )
+{
+	// Opera moves the <FCK:meta> element outside head (#1166).
+	
+	// Save a reference to the XML <head> node, so we can use it for
+	// orphan <meta>s.
+	FCKXHtml.TagProcessors['head'] = function( node, htmlNode )
+	{
+		FCKXHtml.XML._HeadElement = node ;
+		
+		node = FCKXHtml._AppendChildNodes( node, htmlNode, true ) ;
+
+		return node ;
+	}
+
+	// Check whether a <meta> element is outside <head>, and move it to the
+	// proper place.
+	FCKXHtml.TagProcessors['meta'] = function( node, htmlNode, xmlNode )
+	{
+		if ( htmlNode.parentNode.nodeName.toLowerCase() != 'head' )
+		{
+			var headElement = FCKXHtml.XML._HeadElement ;
+			
+			if ( headElement && xmlNode != headElement )
+			{
+				delete htmlNode._fckxhtmljob ;
+				FCKXHtml._AppendNode( headElement, htmlNode ) ;
+				return null ;
+			}
+		}
+
+		return node ;
+	}
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fckxhtml_ie.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fckxhtml_ie.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fckxhtml_ie.js	(revision 1280)
@@ -0,0 +1,208 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Defines the FCKXHtml object, responsible for the XHTML operations.
+ * IE specific.
+ */
+
+FCKXHtml._GetMainXmlString = function()
+{
+	return this.MainNode.xml ;
+}
+
+FCKXHtml._AppendAttributes = function( xmlNode, htmlNode, node, nodeName )
+{
+	var aAttributes = htmlNode.attributes ;
+
+	for ( var n = 0 ; n < aAttributes.length ; n++ )
+	{
+		var oAttribute = aAttributes[n] ;
+
+		if ( oAttribute.specified )
+		{
+			var sAttName = oAttribute.nodeName.toLowerCase() ;
+			var sAttValue ;
+
+			// Ignore any attribute starting with "_fck".
+			if ( sAttName.StartsWith( '_fck' ) )
+				continue ;
+			// The following must be done because of a bug on IE regarding the style
+			// attribute. It returns "null" for the nodeValue.
+			else if ( sAttName == 'style' )
+			{
+				var data = FCKTools.ProtectFormStyles( htmlNode ) ;
+				sAttValue = htmlNode.style.cssText.replace( FCKRegexLib.StyleProperties, FCKTools.ToLowerCase ) ;
+				FCKTools.RestoreFormStyles( htmlNode, data ) ;
+			}
+			// There are two cases when the oAttribute.nodeValue must be used:
+			//		- for the "class" attribute
+			//		- for events attributes (on IE only).
+			else if ( sAttName == 'class' )
+			{
+				sAttValue = oAttribute.nodeValue.replace( FCKRegexLib.FCK_Class, '' ) ;
+				if ( sAttValue.length == 0 )
+					continue ;
+			}
+			else if ( sAttName.indexOf('on') == 0 )
+				sAttValue = oAttribute.nodeValue ;
+			else if ( nodeName == 'body' && sAttName == 'contenteditable' )
+				continue ;
+			// XHTML doens't support attribute minimization like "CHECKED". It must be transformed to checked="checked".
+			else if ( oAttribute.nodeValue === true )
+				sAttValue = sAttName ;
+			else
+			{
+				// We must use getAttribute to get it exactly as it is defined.
+				// There are some rare cases that IE throws an error here, so we must try/catch.
+				try
+				{
+					sAttValue = htmlNode.getAttribute( sAttName, 2 ) ;
+				}
+				catch (e) {}
+			}
+			this._AppendAttribute( node, sAttName, sAttValue || oAttribute.nodeValue ) ;
+		}
+	}
+}
+
+FCKXHtml.TagProcessors['meta'] = function( node, htmlNode )
+{
+	var oHttpEquiv = node.attributes.getNamedItem( 'http-equiv' ) ;
+
+	if ( oHttpEquiv == null || oHttpEquiv.value.length == 0 )
+	{
+		// Get the http-equiv value from the outerHTML.
+		var sHttpEquiv = htmlNode.outerHTML.match( FCKRegexLib.MetaHttpEquiv ) ;
+
+		if ( sHttpEquiv )
+		{
+			sHttpEquiv = sHttpEquiv[1] ;
+			FCKXHtml._AppendAttribute( node, 'http-equiv', sHttpEquiv ) ;
+		}
+	}
+
+	return node ;
+}
+
+// IE automatically changes <FONT> tags to <FONT size=+0>.
+FCKXHtml.TagProcessors['font'] = function( node, htmlNode )
+{
+	if ( node.attributes.length == 0 )
+		node = FCKXHtml.XML.createDocumentFragment() ;
+
+	node = FCKXHtml._AppendChildNodes( node, htmlNode ) ;
+
+	return node ;
+}
+
+// IE doens't see the value attribute as an attribute for the <INPUT> tag.
+FCKXHtml.TagProcessors['input'] = function( node, htmlNode )
+{
+	if ( htmlNode.name )
+		FCKXHtml._AppendAttribute( node, 'name', htmlNode.name ) ;
+
+	if ( htmlNode.value && !node.attributes.getNamedItem( 'value' ) )
+		FCKXHtml._AppendAttribute( node, 'value', htmlNode.value ) ;
+
+	if ( !node.attributes.getNamedItem( 'type' ) )
+		FCKXHtml._AppendAttribute( node, 'type', 'text' ) ;
+
+	return node ;
+}
+
+// IE ignores the "SELECTED" attribute so we must add it manually.
+FCKXHtml.TagProcessors['option'] = function( node, htmlNode )
+{
+	if ( htmlNode.selected && !node.attributes.getNamedItem( 'selected' ) )
+		FCKXHtml._AppendAttribute( node, 'selected', 'selected' ) ;
+
+	node = FCKXHtml._AppendChildNodes( node, htmlNode ) ;
+
+	return node ;
+}
+
+// IE ignores the "COORDS" and "SHAPE" attribute so we must add it manually.
+FCKXHtml.TagProcessors['area'] = function( node, htmlNode )
+{
+	if ( ! node.attributes.getNamedItem( 'coords' ) )
+	{
+		var sCoords = htmlNode.getAttribute( 'coords', 2 ) ;
+		if ( sCoords && sCoords != '0,0,0' )
+			FCKXHtml._AppendAttribute( node, 'coords', sCoords ) ;
+	}
+
+	if ( ! node.attributes.getNamedItem( 'shape' ) )
+	{
+		var sShape = htmlNode.getAttribute( 'shape', 2 ) ;
+		if ( sShape && sShape.length > 0 )
+			FCKXHtml._AppendAttribute( node, 'shape', sShape.toLowerCase() ) ;
+	}
+
+	return node ;
+}
+
+FCKXHtml.TagProcessors['label'] = function( node, htmlNode )
+{
+	if ( htmlNode.htmlFor.length > 0 )
+		FCKXHtml._AppendAttribute( node, 'for', htmlNode.htmlFor ) ;
+
+	node = FCKXHtml._AppendChildNodes( node, htmlNode ) ;
+
+	return node ;
+}
+
+FCKXHtml.TagProcessors['form'] = function( node, htmlNode )
+{
+	if ( htmlNode.acceptCharset && htmlNode.acceptCharset.length > 0 && htmlNode.acceptCharset != 'UNKNOWN' )
+		FCKXHtml._AppendAttribute( node, 'accept-charset', htmlNode.acceptCharset ) ;
+
+	// IE has a bug and htmlNode.attributes['name'].specified=false if there is
+	// no element with id="name" inside the form (#360 and SF-BUG-1155726).
+	var nameAtt = htmlNode.attributes['name'] ;
+
+	if ( nameAtt && nameAtt.value.length > 0 )
+		FCKXHtml._AppendAttribute( node, 'name', nameAtt.value ) ;
+
+	node = FCKXHtml._AppendChildNodes( node, htmlNode, true ) ;
+
+	return node ;
+}
+
+// IE doens't hold the name attribute as an attribute for the <TEXTAREA> and <SELECT> tags.
+FCKXHtml.TagProcessors['textarea'] = FCKXHtml.TagProcessors['select'] = function( node, htmlNode )
+{
+	if ( htmlNode.name )
+		FCKXHtml._AppendAttribute( node, 'name', htmlNode.name ) ;
+
+	node = FCKXHtml._AppendChildNodes( node, htmlNode ) ;
+
+	return node ;
+}
+
+// On very rare cases, IE is loosing the "align" attribute for DIV. (right align and apply bulleted list)
+FCKXHtml.TagProcessors['div'] = function( node, htmlNode )
+{
+	if ( htmlNode.align.length > 0 )
+		FCKXHtml._AppendAttribute( node, 'align', htmlNode.align ) ;
+
+	node = FCKXHtml._AppendChildNodes( node, htmlNode, true ) ;
+
+	return node ;
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fckxhtmlentities.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fckxhtmlentities.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/_source/internals/fckxhtmlentities.js	(revision 1280)
@@ -0,0 +1,354 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This file define the HTML entities handled by the editor.
+ */
+
+var FCKXHtmlEntities = new Object() ;
+
+FCKXHtmlEntities.Initialize = function()
+{
+	if ( FCKXHtmlEntities.Entities )
+		return ;
+
+	var sChars = '' ;
+	var oEntities, e ;
+
+	if ( FCKConfig.ProcessHTMLEntities )
+	{
+		FCKXHtmlEntities.Entities = {
+			// Latin-1 Entities
+			' ':'nbsp',
+			'¡':'iexcl',
+			'¢':'cent',
+			'£':'pound',
+			'¤':'curren',
+			'¥':'yen',
+			'¦':'brvbar',
+			'§':'sect',
+			'¨':'uml',
+			'©':'copy',
+			'ª':'ordf',
+			'«':'laquo',
+			'¬':'not',
+			'­':'shy',
+			'®':'reg',
+			'¯':'macr',
+			'°':'deg',
+			'±':'plusmn',
+			'²':'sup2',
+			'³':'sup3',
+			'´':'acute',
+			'µ':'micro',
+			'¶':'para',
+			'·':'middot',
+			'¸':'cedil',
+			'¹':'sup1',
+			'º':'ordm',
+			'»':'raquo',
+			'¼':'frac14',
+			'½':'frac12',
+			'¾':'frac34',
+			'¿':'iquest',
+			'×':'times',
+			'÷':'divide',
+
+			// Symbols
+
+			'ƒ':'fnof',
+			'•':'bull',
+			'…':'hellip',
+			'′':'prime',
+			'″':'Prime',
+			'‾':'oline',
+			'⁄':'frasl',
+			'℘':'weierp',
+			'ℑ':'image',
+			'ℜ':'real',
+			'™':'trade',
+			'ℵ':'alefsym',
+			'←':'larr',
+			'↑':'uarr',
+			'→':'rarr',
+			'↓':'darr',
+			'↔':'harr',
+			'↵':'crarr',
+			'⇐':'lArr',
+			'⇑':'uArr',
+			'⇒':'rArr',
+			'⇓':'dArr',
+			'⇔':'hArr',
+			'∀':'forall',
+			'∂':'part',
+			'∃':'exist',
+			'∅':'empty',
+			'∇':'nabla',
+			'∈':'isin',
+			'∉':'notin',
+			'∋':'ni',
+			'∏':'prod',
+			'∑':'sum',
+			'−':'minus',
+			'∗':'lowast',
+			'√':'radic',
+			'∝':'prop',
+			'∞':'infin',
+			'∠':'ang',
+			'∧':'and',
+			'∨':'or',
+			'∩':'cap',
+			'∪':'cup',
+			'∫':'int',
+			'∴':'there4',
+			'∼':'sim',
+			'≅':'cong',
+			'≈':'asymp',
+			'≠':'ne',
+			'≡':'equiv',
+			'≤':'le',
+			'≥':'ge',
+			'⊂':'sub',
+			'⊃':'sup',
+			'⊄':'nsub',
+			'⊆':'sube',
+			'⊇':'supe',
+			'⊕':'oplus',
+			'⊗':'otimes',
+			'⊥':'perp',
+			'⋅':'sdot',
+			'\u2308':'lceil',
+			'\u2309':'rceil',
+			'\u230a':'lfloor',
+			'\u230b':'rfloor',
+			'\u2329':'lang',
+			'\u232a':'rang',
+			'◊':'loz',
+			'♠':'spades',
+			'♣':'clubs',
+			'♥':'hearts',
+			'♦':'diams',
+
+			// Other Special Characters
+
+			'"':'quot',
+		//	'&':'amp',		// This entity is automatically handled by the XHTML parser.
+		//	'<':'lt',		// This entity is automatically handled by the XHTML parser.
+		//	'>':'gt',		// This entity is automatically handled by the XHTML parser.
+			'ˆ':'circ',
+			'˜':'tilde',
+			' ':'ensp',
+			' ':'emsp',
+			' ':'thinsp',
+			'‌':'zwnj',
+			'‍':'zwj',
+			'‎':'lrm',
+			'‏':'rlm',
+			'–':'ndash',
+			'—':'mdash',
+			'‘':'lsquo',
+			'’':'rsquo',
+			'‚':'sbquo',
+			'“':'ldquo',
+			'”':'rdquo',
+			'„':'bdquo',
+			'†':'dagger',
+			'‡':'Dagger',
+			'‰':'permil',
+			'‹':'lsaquo',
+			'›':'rsaquo',
+			'€':'euro'
+		} ;
+
+		// Process Base Entities.
+		for ( e in FCKXHtmlEntities.Entities )
+			sChars += e ;
+
+		// Include Latin Letters Entities.
+		if ( FCKConfig.IncludeLatinEntities )
+		{
+			oEntities = {
+				'À':'Agrave',
+				'Á':'Aacute',
+				'Â':'Acirc',
+				'Ã':'Atilde',
+				'Ä':'Auml',
+				'Å':'Aring',
+				'Æ':'AElig',
+				'Ç':'Ccedil',
+				'È':'Egrave',
+				'É':'Eacute',
+				'Ê':'Ecirc',
+				'Ë':'Euml',
+				'Ì':'Igrave',
+				'Í':'Iacute',
+				'Î':'Icirc',
+				'Ï':'Iuml',
+				'Ð':'ETH',
+				'Ñ':'Ntilde',
+				'Ò':'Ograve',
+				'Ó':'Oacute',
+				'Ô':'Ocirc',
+				'Õ':'Otilde',
+				'Ö':'Ouml',
+				'Ø':'Oslash',
+				'Ù':'Ugrave',
+				'Ú':'Uacute',
+				'Û':'Ucirc',
+				'Ü':'Uuml',
+				'Ý':'Yacute',
+				'Þ':'THORN',
+				'ß':'szlig',
+				'à':'agrave',
+				'á':'aacute',
+				'â':'acirc',
+				'ã':'atilde',
+				'ä':'auml',
+				'å':'aring',
+				'æ':'aelig',
+				'ç':'ccedil',
+				'è':'egrave',
+				'é':'eacute',
+				'ê':'ecirc',
+				'ë':'euml',
+				'ì':'igrave',
+				'í':'iacute',
+				'î':'icirc',
+				'ï':'iuml',
+				'ð':'eth',
+				'ñ':'ntilde',
+				'ò':'ograve',
+				'ó':'oacute',
+				'ô':'ocirc',
+				'õ':'otilde',
+				'ö':'ouml',
+				'ø':'oslash',
+				'ù':'ugrave',
+				'ú':'uacute',
+				'û':'ucirc',
+				'ü':'uuml',
+				'ý':'yacute',
+				'þ':'thorn',
+				'ÿ':'yuml',
+				'Œ':'OElig',
+				'œ':'oelig',
+				'Š':'Scaron',
+				'š':'scaron',
+				'Ÿ':'Yuml'
+			} ;
+
+			for ( e in oEntities )
+			{
+				FCKXHtmlEntities.Entities[ e ] = oEntities[ e ] ;
+				sChars += e ;
+			}
+
+			oEntities = null ;
+		}
+
+		// Include Greek Letters Entities.
+		if ( FCKConfig.IncludeGreekEntities )
+		{
+			oEntities = {
+				'Α':'Alpha',
+				'Β':'Beta',
+				'Γ':'Gamma',
+				'Δ':'Delta',
+				'Ε':'Epsilon',
+				'Ζ':'Zeta',
+				'Η':'Eta',
+				'Θ':'Theta',
+				'Ι':'Iota',
+				'Κ':'Kappa',
+				'Λ':'Lambda',
+				'Μ':'Mu',
+				'Ν':'Nu',
+				'Ξ':'Xi',
+				'Ο':'Omicron',
+				'Π':'Pi',
+				'Ρ':'Rho',
+				'Σ':'Sigma',
+				'Τ':'Tau',
+				'Υ':'Upsilon',
+				'Φ':'Phi',
+				'Χ':'Chi',
+				'Ψ':'Psi',
+				'Ω':'Omega',
+				'α':'alpha',
+				'β':'beta',
+				'γ':'gamma',
+				'δ':'delta',
+				'ε':'epsilon',
+				'ζ':'zeta',
+				'η':'eta',
+				'θ':'theta',
+				'ι':'iota',
+				'κ':'kappa',
+				'λ':'lambda',
+				'μ':'mu',
+				'ν':'nu',
+				'ξ':'xi',
+				'ο':'omicron',
+				'π':'pi',
+				'ρ':'rho',
+				'ς':'sigmaf',
+				'σ':'sigma',
+				'τ':'tau',
+				'υ':'upsilon',
+				'φ':'phi',
+				'χ':'chi',
+				'ψ':'psi',
+				'ω':'omega',
+				'\u03d1':'thetasym',
+				'\u03d2':'upsih',
+				'\u03d6':'piv'
+			} ;
+
+			for ( e in oEntities )
+			{
+				FCKXHtmlEntities.Entities[ e ] = oEntities[ e ] ;
+				sChars += e ;
+			}
+
+			oEntities = null ;
+		}
+	}
+	else
+	{
+		FCKXHtmlEntities.Entities = {} ;
+
+		// Even if we are not processing the entities, we must render the &nbsp;
+		// correctly. As we don't want HTML entities, let's use its numeric
+		// representation (&#160).
+		sChars = ' ' ;
+	}
+
+	// Create the Regex used to find entities in the text.
+	var sRegexPattern = '[' + sChars + ']' ;
+
+	if ( FCKConfig.ProcessNumericEntities )
+		sRegexPattern = '[^ -~]|' + sRegexPattern ;
+
+	var sAdditional = FCKConfig.AdditionalNumericEntities ;
+
+	if ( sAdditional && sAdditional.length > 0 )
+		sRegexPattern += '|' + FCKConfig.AdditionalNumericEntities ;
+
+	FCKXHtmlEntities.EntitiesRegex = new RegExp( sRegexPattern, 'g' ) ;
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/css/behaviors/disablehandles.htc
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/css/behaviors/disablehandles.htc	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/css/behaviors/disablehandles.htc	(revision 1280)
@@ -0,0 +1,15 @@
+<public:component lightweight="true">
+
+<script language="javascript">
+
+function CancelEvent()
+{
+	return false ;
+}
+
+this.onresizestart = CancelEvent ;
+this.onbeforeeditfocus = CancelEvent ;
+
+</script>
+
+</public:component>
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/css/behaviors/showtableborders.htc
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/css/behaviors/showtableborders.htc	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/css/behaviors/showtableborders.htc	(revision 1280)
@@ -0,0 +1,36 @@
+<public:component lightweight="true">
+
+<public:attach event="oncontentready" onevent="ShowBorders()" />
+<public:attach event="onpropertychange" onevent="OnPropertyChange()" />
+
+<script language="javascript">
+
+var oClassRegex = /\s*FCK__ShowTableBorders/ ;
+
+function ShowBorders()
+{
+	if ( this.border == 0 )
+	{
+		if ( !oClassRegex.test( this.className ) )
+			this.className += ' FCK__ShowTableBorders' ;
+	}
+	else
+	{
+		if ( oClassRegex.test( this.className ) )
+		{
+			this.className = this.className.replace( oClassRegex, '' ) ;
+			if ( this.className.length == 0 )
+				this.removeAttribute( 'className', 0 ) ;
+		}
+	}
+}
+
+function OnPropertyChange()
+{
+	if ( event.propertyName == 'border' || event.propertyName == 'className' )
+		ShowBorders.call(this) ;
+}
+
+</script>
+
+</public:component>
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/css/fck_editorarea.css
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/css/fck_editorarea.css	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/css/fck_editorarea.css	(revision 1280)
@@ -0,0 +1,91 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This is the default CSS file used by the editor area. It defines the
+ * initial font of the editor and background color.
+ *
+ * A user can configure the editor to use another CSS file. Just change
+ * the value of the FCKConfig.EditorAreaCSS key in the configuration
+ * file.
+ */
+
+/*
+    The "body" styles should match your editor web site, mainly regarding
+    background color and font family and size.
+*/
+
+body
+{
+	background-color: #ffffff;
+	padding: 5px 5px 5px 5px;
+	margin: 0px;
+}
+
+body, td
+{
+	font-family: Arial, Verdana, sans-serif;
+	font-size: 12px;
+}
+
+a[href]
+{
+	color: -moz-hyperlinktext !important;	/* For Firefox... mark as important, otherwise it becomes black */
+}
+
+/*
+	Just uncomment the following block if you want to avoid spaces between
+	paragraphs. Remember to apply the same style in your output front end page.
+*/
+
+/*
+p, ul, li
+{
+	margin-top: 0px;
+	margin-bottom: 0px;
+}
+*/
+
+/*
+    The following are some sample styles used in the "Styles" toolbar command.
+    You should instead remove them, and include the styles used by the site
+    you are using the editor in.
+*/
+
+.Bold
+{
+	font-weight: bold;
+}
+
+.Title
+{
+	font-weight: bold;
+	font-size: 18px;
+	color: #cc3300;
+}
+
+.Code
+{
+	border: #8b4513 1px solid;
+	padding-right: 5px;
+	padding-left: 5px;
+	color: #000066;
+	font-family: 'Courier New' , Monospace;
+	background-color: #ff9933;
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/css/fck_internal.css
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/css/fck_internal.css	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/css/fck_internal.css	(revision 1280)
@@ -0,0 +1,182 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This CSS Style Sheet defines rules used by the editor for its internal use.
+ */
+
+/* Fix to allow putting the caret at the end of the content in Firefox if
+   clicking below the content. */
+html
+{
+	min-height: 100%;
+}
+
+table.FCK__ShowTableBorders, table.FCK__ShowTableBorders td, table.FCK__ShowTableBorders th
+{
+	border: #d3d3d3 1px solid;
+}
+
+form
+{
+	border: 1px dotted #FF0000;
+	padding: 2px;
+}
+
+.FCK__Flash
+{
+	border: #a9a9a9 1px solid;
+	background-position: center center;
+	background-image: url(images/fck_flashlogo.gif);
+	background-repeat: no-repeat;
+	width: 80px;
+	height: 80px;
+}
+
+/* Empty anchors images */
+.FCK__Anchor
+{
+	border: 1px dotted #00F;
+	background-position: center center;
+	background-image: url(images/fck_anchor.gif);
+	background-repeat: no-repeat;
+	width: 16px;
+	height: 15px;
+	vertical-align: middle;
+}
+
+/* Anchors with content */
+.FCK__AnchorC
+{
+	border: 1px dotted #00F;
+	background-position: 1px center;
+	background-image: url(images/fck_anchor.gif);
+	background-repeat: no-repeat;
+	padding-left: 18px;
+}
+
+/* Any anchor for non-IE, if we combine it with the previous rule IE ignores all. */
+a[name]
+{
+	border: 1px dotted #00F;
+	background-position: 0 center;
+	background-image: url(images/fck_anchor.gif);
+	background-repeat: no-repeat;
+	padding-left: 18px;
+}
+
+.FCK__PageBreak
+{
+	background-position: center center;
+	background-image: url(images/fck_pagebreak.gif);
+	background-repeat: no-repeat;
+	clear: both;
+	display: block;
+	float: none;
+	width: 100%;
+	border-top: #999999 1px dotted;
+	border-bottom: #999999 1px dotted;
+	border-right: 0px;
+	border-left: 0px;
+	height: 5px;
+}
+
+/* Hidden fields */
+.FCK__InputHidden
+{
+	width: 19px;
+	height: 18px;
+	background-image: url(images/fck_hiddenfield.gif);
+	background-repeat: no-repeat;
+	vertical-align: text-bottom;
+	background-position: center center;
+}
+
+.FCK__ShowBlocks p,
+.FCK__ShowBlocks div,
+.FCK__ShowBlocks pre,
+.FCK__ShowBlocks address,
+.FCK__ShowBlocks blockquote,
+.FCK__ShowBlocks h1,
+.FCK__ShowBlocks h2,
+.FCK__ShowBlocks h3,
+.FCK__ShowBlocks h4,
+.FCK__ShowBlocks h5,
+.FCK__ShowBlocks h6
+{
+	background-repeat: no-repeat;
+	border: 1px dotted gray;
+	padding-top: 8px;
+	padding-left: 8px;
+}
+
+.FCK__ShowBlocks p
+{
+	background-image: url(images/block_p.png);
+}
+
+.FCK__ShowBlocks div
+{
+	background-image: url(images/block_div.png);
+}
+
+.FCK__ShowBlocks pre
+{
+	background-image: url(images/block_pre.png);
+}
+
+.FCK__ShowBlocks address
+{
+	background-image: url(images/block_address.png);
+}
+
+.FCK__ShowBlocks blockquote 
+{
+	background-image: url(images/block_blockquote.png);
+}
+
+.FCK__ShowBlocks h1
+{
+	background-image: url(images/block_h1.png);
+}
+
+.FCK__ShowBlocks h2
+{
+	background-image: url(images/block_h2.png);
+}
+
+.FCK__ShowBlocks h3
+{
+	background-image: url(images/block_h3.png);
+}
+
+.FCK__ShowBlocks h4
+{
+	background-image: url(images/block_h4.png);
+}
+
+.FCK__ShowBlocks h5
+{
+	background-image: url(images/block_h5.png);
+}
+
+.FCK__ShowBlocks h6
+{
+	background-image: url(images/block_h6.png);
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/css/fck_showtableborders_gecko.css
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/css/fck_showtableborders_gecko.css	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/css/fck_showtableborders_gecko.css	(revision 1280)
@@ -0,0 +1,42 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This CSS Style Sheet defines the rules to show table borders on Gecko.
+ */
+
+/* For tables with the "border" attribute set to "0" */
+table[border="0"],
+table[border="0"] > tr > td, table[border="0"] > tr > th,
+table[border="0"] > tbody > tr > td, table[border="0"] > tbody > tr > th,
+table[border="0"] > thead > tr > td, table[border="0"] > thead > tr > th,
+table[border="0"] > tfoot > tr > td, table[border="0"] > tfoot > tr > th
+{
+	border: #d3d3d3 1px dotted ;
+}
+
+/* For tables with no "border" attribute set */
+table:not([border]),
+table:not([border]) > tr > td, table:not([border]) > tr > th,
+table:not([border]) > tbody > tr > td, table:not([border]) > tbody > tr > th,
+table:not([border]) > thead > tr > td, table:not([border]) > thead > tr > th,
+table:not([border]) > tfoot > tr > td, table:not([border]) > tfoot > tr > th
+{
+	border: #d3d3d3 1px dotted ;
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/common/fck_dialog_common.css
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/common/fck_dialog_common.css	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/common/fck_dialog_common.css	(revision 1280)
@@ -0,0 +1,78 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This is the CSS file used for interface details in some dialog
+ * windows.
+ */
+
+.ImagePreviewArea
+{
+	border: #000000 1px solid;
+	overflow: auto;
+	width: 100%;
+	height: 170px;
+	background-color: #ffffff;
+}
+
+.FlashPreviewArea
+{
+	border: #000000 1px solid;
+	padding: 5px;
+	overflow: auto;
+	width: 100%;
+	height: 170px;
+	background-color: #ffffff;
+}
+
+.BtnReset
+{
+	float: left;
+	background-position: center center;
+	background-image: url(images/reset.gif);
+	width: 16px;
+	height: 16px;
+	background-repeat: no-repeat;
+	border: 1px none;
+	font-size: 1px ;
+}
+
+.BtnLocked, .BtnUnlocked
+{
+	float: left;
+	background-position: center center;
+	background-image: url(images/locked.gif);
+	width: 16px;
+	height: 16px;
+	background-repeat: no-repeat;
+	border: none 1px;
+	font-size: 1px ;
+}
+
+.BtnUnlocked
+{
+	background-image: url(images/unlocked.gif);
+}
+
+.BtnOver
+{
+	border: outset 1px;
+	cursor: pointer;
+	cursor: hand;
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/common/fck_dialog_common.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/common/fck_dialog_common.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/common/fck_dialog_common.js	(revision 1280)
@@ -0,0 +1,165 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Useful functions used by almost all dialog window pages.
+ */
+
+// Gets a element by its Id. Used for shorter coding.
+function GetE( elementId )
+{
+	return document.getElementById( elementId )  ;
+}
+
+function ShowE( element, isVisible )
+{
+	if ( typeof( element ) == 'string' )
+		element = GetE( element ) ;
+	element.style.display = isVisible ? '' : 'none' ;
+}
+
+function SetAttribute( element, attName, attValue )
+{
+	if ( attValue == null || attValue.length == 0 )
+		element.removeAttribute( attName, 0 ) ;			// 0 : Case Insensitive
+	else
+		element.setAttribute( attName, attValue, 0 ) ;	// 0 : Case Insensitive
+}
+
+function GetAttribute( element, attName, valueIfNull )
+{
+	var oAtt = element.attributes[attName] ;
+
+	if ( oAtt == null || !oAtt.specified )
+		return valueIfNull ? valueIfNull : '' ;
+
+	var oValue = element.getAttribute( attName, 2 ) ;
+
+	if ( oValue == null )
+		oValue = oAtt.nodeValue ;
+
+	return ( oValue == null ? valueIfNull : oValue ) ;
+}
+
+var KeyIdentifierMap = 
+{
+	End		: 35,
+	Home	: 36,
+	Left	: 37,
+	Right	: 39,
+	'U+00007F' : 46		// Delete
+} 
+
+// Functions used by text fields to accept numbers only.
+function IsDigit( e )
+{
+	if ( !e )
+		e = event ;
+
+	var iCode = ( e.keyCode || e.charCode ) ;
+	
+	if ( !iCode && e.keyIdentifier && ( e.keyIdentifier in KeyIdentifierMap ) ) 
+			iCode = KeyIdentifierMap[ e.keyIdentifier ] ;
+
+	return (
+			( iCode >= 48 && iCode <= 57 )		// Numbers
+			|| (iCode >= 35 && iCode <= 40)		// Arrows, Home, End
+			|| iCode == 8						// Backspace
+			|| iCode == 46						// Delete
+			|| iCode == 9						// Tab
+	) ;
+}
+
+String.prototype.Trim = function()
+{
+	return this.replace( /(^\s*)|(\s*$)/g, '' ) ;
+}
+
+String.prototype.StartsWith = function( value )
+{
+	return ( this.substr( 0, value.length ) == value ) ;
+}
+
+String.prototype.Remove = function( start, length )
+{
+	var s = '' ;
+
+	if ( start > 0 )
+		s = this.substring( 0, start ) ;
+
+	if ( start + length < this.length )
+		s += this.substring( start + length , this.length ) ;
+
+	return s ;
+}
+
+String.prototype.ReplaceAll = function( searchArray, replaceArray )
+{
+	var replaced = this ;
+
+	for ( var i = 0 ; i < searchArray.length ; i++ )
+	{
+		replaced = replaced.replace( searchArray[i], replaceArray[i] ) ;
+	}
+
+	return replaced ;
+}
+
+function OpenFileBrowser( url, width, height )
+{
+	// oEditor must be defined.
+
+	var iLeft = ( oEditor.FCKConfig.ScreenWidth  - width ) / 2 ;
+	var iTop  = ( oEditor.FCKConfig.ScreenHeight - height ) / 2 ;
+
+	var sOptions = "toolbar=no,status=no,resizable=yes,dependent=yes,scrollbars=yes" ;
+	sOptions += ",width=" + width ;
+	sOptions += ",height=" + height ;
+	sOptions += ",left=" + iLeft ;
+	sOptions += ",top=" + iTop ;
+
+	// The "PreserveSessionOnFileBrowser" because the above code could be
+	// blocked by popup blockers.
+	if ( oEditor.FCKConfig.PreserveSessionOnFileBrowser && oEditor.FCKBrowserInfo.IsIE )
+	{
+		// The following change has been made otherwise IE will open the file
+		// browser on a different server session (on some cases):
+		// http://support.microsoft.com/default.aspx?scid=kb;en-us;831678
+		// by Simone Chiaretta.
+		var oWindow = oEditor.window.open( url, 'FCKBrowseWindow', sOptions ) ;
+
+		if ( oWindow )
+		{
+			// Detect Yahoo popup blocker.
+			try
+			{
+				var sTest = oWindow.name ; // Yahoo returns "something", but we can't access it, so detect that and avoid strange errors for the user.
+				oWindow.opener = window ;
+			}
+			catch(e)
+			{
+				alert( oEditor.FCKLang.BrowseServerBlocked ) ;
+			}
+		}
+		else
+			alert( oEditor.FCKLang.BrowseServerBlocked ) ;
+    }
+    else
+		window.open( url, 'FCKBrowseWindow', sOptions ) ;
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/common/fcknumericfield.htc
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/common/fcknumericfield.htc	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/common/fcknumericfield.htc	(revision 1280)
@@ -0,0 +1,24 @@
+<public:component lightweight="true">
+
+<script language="javascript">
+
+function CheckIsDigit()
+{
+	var iCode = event.keyCode ;
+
+	event.returnValue =
+		(
+			( iCode >= 48 && iCode <= 57 )		// Numbers
+			|| (iCode >= 37 && iCode <= 40)		// Arrows
+			|| iCode == 8						// Backspace
+			|| iCode == 46						// Delete
+		) ;
+
+	return event.returnValue ;
+}
+
+this.onkeypress = CheckIsDigit ;
+
+</script>
+
+</public:component>
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/common/moz-bindings.xml
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/common/moz-bindings.xml	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/common/moz-bindings.xml	(revision 1280)
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<bindings xmlns="http://www.mozilla.org/xbl">
+	<binding id="numericfield">
+		<implementation>
+			<constructor>
+				this.keypress = CheckIsDigit ;
+			</constructor>
+			<method name="CheckIsDigit">
+				<body>
+					<![CDATA[
+					var iCode = keyCode ;
+
+					var bAccepted =
+						(
+							( iCode >= 48 && iCode <= 57 )		// Numbers
+							|| (iCode >= 37 && iCode <= 40)		// Arrows
+							|| iCode == 8						// Backspace
+							|| iCode == 46						// Delete
+						) ;
+
+					return bAccepted ;
+					]]>
+				</body>
+			</method>
+		</implementation>
+		<events>
+			<event type="keypress" value="CheckIsDigit()" />
+		</events>
+	</binding>
+</bindings>
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_about.html
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_about.html	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_about.html	(revision 1280)
@@ -0,0 +1,155 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * "About" dialog window.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+	<title></title>
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+	<meta name="robots" content="noindex, nofollow" />
+	<script src="common/fck_dialog_common.js" type="text/javascript"></script>
+	<script type="text/javascript">
+
+var oEditor = window.parent.InnerDialogLoaded() ;
+var FCKLang	= oEditor.FCKLang ;
+
+window.parent.AddTab( 'About', FCKLang.DlgAboutAboutTab ) ;
+window.parent.AddTab( 'License', FCKLang.DlgAboutLicenseTab ) ;
+window.parent.AddTab( 'BrowserInfo', FCKLang.DlgAboutBrowserInfoTab ) ;
+
+// Function called when a dialog tag is selected.
+function OnDialogTabChange( tabCode )
+{
+	ShowE('divAbout', ( tabCode == 'About' ) ) ;
+	ShowE('divLicense', ( tabCode == 'License' ) ) ;
+	ShowE('divInfo'	, ( tabCode == 'BrowserInfo' ) ) ;
+}
+
+function SendEMail()
+{
+	var eMail = 'mailto:' ;
+	eMail += 'fredck' ;
+	eMail += '@' ;
+	eMail += 'fckeditor' ;
+	eMail += '.' ;
+	eMail += 'net' ;
+
+	window.location = eMail ;
+}
+
+window.onload = function()
+{
+	// Translate the dialog box texts.
+	oEditor.FCKLanguageManager.TranslatePage(document) ;
+
+	window.parent.SetAutoSize( true ) ;
+}
+
+	</script>
+</head>
+<body style="overflow: hidden">
+	<div id="divAbout">
+		<table cellpadding="0" cellspacing="0" border="0" width="100%" style="height: 100%">
+			<tr>
+				<td>
+					<img alt="" src="fck_about/logo_fckeditor.gif" width="236" height="41" align="left" />
+					<table width="80" border="0" cellspacing="0" cellpadding="5" bgcolor="#ffffff" align="right">
+						<tr>
+							<td align="center" nowrap="nowrap" style="border-right: #000000 1px solid; border-top: #000000 1px solid;
+								border-left: #000000 1px solid; border-bottom: #000000 1px solid">
+								<span fcklang="DlgAboutVersion">version</span>
+								<br />
+								<b>2.5 SVN</b><br />
+								Build 16925</td>
+						</tr>
+					</table>
+				</td>
+			</tr>
+			<tr style="height: 100%">
+				<td align="center">
+					&nbsp;<br />
+					<span style="font-size: 14px" dir="ltr">
+						<br />
+						<b><a href="http://www.fckeditor.net/?about" target="_blank" title="Visit the FCKeditor web site">
+							Support <b>Open Source</b> Software</a></b> </span>
+					<br />
+					<br />
+					<br />
+					<span fcklang="DlgAboutInfo">For further information go to</span> <a href="http://www.fckeditor.net/?About"
+						target="_blank">http://www.fckeditor.net/</a>.
+					<br />
+					Copyright &copy; 2003-2007 <a href="#" onclick="SendEMail();">Frederico Caldeira Knabben</a>
+				</td>
+			</tr>
+			<tr>
+				<td align="center">
+					<img alt="" src="fck_about/logo_fredck.gif" width="87" height="36" />
+				</td>
+			</tr>
+		</table>
+	</div>
+	<div id="divLicense" style="display: none">
+			<p>
+				Licensed under the terms of any of the following licenses at your
+				choice:
+			</p>
+			<ul>
+				<li style="margin-bottom:15px">
+					<b>GNU General Public License</b> Version 2 or later (the "GPL")<br />
+					<a href="http://www.gnu.org/licenses/gpl.html" target="_blank">http://www.gnu.org/licenses/gpl.html</a>
+				</li>
+				<li style="margin-bottom:15px">
+					<b>GNU Lesser General Public License</b> Version 2.1 or later (the "LGPL")<br />
+					<a href="http://www.gnu.org/licenses/lgpl.html" target="_blank">http://www.gnu.org/licenses/lgpl.html</a>
+				</li>
+				<li>
+					<b>Mozilla Public License</b> Version 1.1 or later (the "MPL")<br />
+					<a href="http://www.mozilla.org/MPL/MPL-1.1.html" target="_blank">http://www.mozilla.org/MPL/MPL-1.1.html</a>
+			   </li>
+			</ul>
+	</div>
+	<div id="divInfo" style="display: none" dir="ltr">
+		<table align="center" width="80%" border="0">
+			<tr>
+				<td>
+					<script type="text/javascript">
+<!--
+document.write( '<b>User Agent<\/b><br />' + window.navigator.userAgent + '<br /><br />' ) ;
+document.write( '<b>Browser<\/b><br />' + window.navigator.appName + ' ' + window.navigator.appVersion + '<br /><br />' ) ;
+document.write( '<b>Platform<\/b><br />' + window.navigator.platform + '<br /><br />' ) ;
+
+var sUserLang = '?' ;
+
+if ( window.navigator.language )
+	sUserLang = window.navigator.language.toLowerCase() ;
+else if ( window.navigator.userLanguage )
+	sUserLang = window.navigator.userLanguage.toLowerCase() ;
+
+document.write( '<b>User Language<\/b><br />' + sUserLang ) ;
+//-->
+					</script>
+				</td>
+			</tr>
+		</table>
+	</div>
+</body>
+</html>
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_anchor.html
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_anchor.html	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_anchor.html	(revision 1280)
@@ -0,0 +1,207 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Anchor dialog window.
+-->
+<html>
+	<head>
+		<title>Anchor Properties</title>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+		<meta content="noindex, nofollow" name="robots">
+		<script src="common/fck_dialog_common.js" type="text/javascript"></script>
+		<script type="text/javascript">
+
+var oEditor	= window.parent.InnerDialogLoaded() ;
+var FCK		= oEditor.FCK ;
+var FCKBrowserInfo = oEditor.FCKBrowserInfo ;
+var FCKTools = oEditor.FCKTools ;
+var FCKRegexLib = oEditor.FCKRegexLib ;
+
+// Gets the document DOM
+var oDOM = oEditor.FCK.EditorDocument ;
+
+var oFakeImage = FCK.Selection.GetSelectedElement() ;
+var oAnchor ;
+
+if ( oFakeImage )
+{
+	if ( oFakeImage.tagName == 'IMG' && oFakeImage.getAttribute('_fckanchor') )
+		oAnchor = FCK.GetRealElement( oFakeImage ) ;
+	else
+		oFakeImage = null ;
+}
+
+//Search for a real anchor
+if ( !oFakeImage )
+{
+	oAnchor = FCK.Selection.MoveToAncestorNode( 'A' ) ;
+	if ( oAnchor )
+		FCK.Selection.SelectNode( oAnchor ) ;
+}
+
+window.onload = function()
+{
+	// First of all, translate the dialog box texts
+	oEditor.FCKLanguageManager.TranslatePage(document) ;
+
+	if ( oAnchor )
+		GetE('txtName').value = oAnchor.name ;
+	else
+		oAnchor = null ;
+
+	window.parent.SetOkButton( true ) ;
+}
+
+function Ok()
+{
+	var sNewName = GetE('txtName').value ;
+
+	// Remove any illegal character in a name attribute:
+	// A name should start with a letter, but the validator passes anyway.
+	sNewName = sNewName.replace( /[^\w-_\.:]/g, '_' ) ;
+
+	if ( sNewName.length == 0 )
+	{
+		// Remove the anchor if the user leaves the name blank
+		if ( oAnchor )
+		{
+			// Removes the current anchor from the document using the new command
+			FCK.Commands.GetCommand( 'AnchorDelete' ).Execute() ;
+			return true ;
+		}
+
+		alert( oEditor.FCKLang.DlgAnchorErrorName ) ;
+		return false ;
+	}
+
+	oEditor.FCKUndo.SaveUndoStep() ;
+
+	if ( oAnchor )	// Modifying an existent anchor.
+	{
+		ReadjustLinksToAnchor( oAnchor.name, sNewName );
+
+		// Buggy explorer, bad bad browser. http://alt-tag.com/blog/archives/2006/02/ie-dom-bugs/
+		// Instead of just replacing the .name for the existing anchor (in order to preserve the content), we must remove the .name
+		// and assign .name, although it won't appear until it's specially processed in fckxhtml.js
+
+		// We remove the previous name
+		oAnchor.removeAttribute( 'name' ) ;
+		// Now we set it, but later we must process it specially
+		oAnchor.name = sNewName ;
+
+		return true ;
+	}
+
+	// Create a new anchor preserving the current selection
+	var aNewAnchors = oEditor.FCK.CreateLink( '#' ) ;
+
+	if ( aNewAnchors.length == 0 )
+	{
+		// Nothing was selected, so now just create a normal A
+		aNewAnchors.push( oEditor.FCK.InsertElement( 'a' ) ) ;
+	}
+	else
+	{
+		// Remove the fake href
+		for ( var i = 0 ; i < aNewAnchors.length ; i++ )
+			aNewAnchors[i].removeAttribute( 'href' ) ;
+	}
+
+	// More than one anchors may have been created, so interact through all of them (see #220).
+	for ( var i = 0 ; i < aNewAnchors.length ; i++ )
+	{
+		oAnchor = aNewAnchors[i] ;
+
+		// Set the name
+		oAnchor.name = sNewName ;
+
+		// IE does require special processing to show the Anchor's image
+		// Opera doesn't allow to select empty anchors
+		if ( FCKBrowserInfo.IsIE || FCKBrowserInfo.IsOpera )
+		{
+			if ( oAnchor.innerHTML != '' )
+			{
+				if ( FCKBrowserInfo.IsIE )
+					oAnchor.className += ' FCK__AnchorC' ;
+			}
+			else
+			{
+				// Create a fake image for both IE and Opera
+				var oImg = oEditor.FCKDocumentProcessor_CreateFakeImage( 'FCK__Anchor', oAnchor.cloneNode(true) ) ;
+				oImg.setAttribute( '_fckanchor', 'true', 0 ) ;
+
+				oAnchor.parentNode.insertBefore( oImg, oAnchor ) ;
+				oAnchor.parentNode.removeChild( oAnchor ) ;
+			}
+
+		}
+	}
+
+	return true ;
+}
+
+// Checks all the links in the current page pointing to the current name and changes them to the new name
+function ReadjustLinksToAnchor( sCurrent, sNew )
+{
+	var oDoc = FCK.EditorDocument ;
+
+	var aLinks = oDoc.getElementsByTagName( 'A' ) ;
+
+	var sReference = '#' + sCurrent ;
+	// The url of the document, so we check absolute and partial references.
+	var sFullReference = oDoc.location.href.replace( /(#.*$)/, '') ;
+	sFullReference += sReference ;
+
+	var oLink ;
+	var i = aLinks.length - 1 ;
+	while ( i >= 0 && ( oLink = aLinks[i--] ) )
+	{
+		var sHRef = oLink.getAttribute( '_fcksavedurl' ) ;
+		if ( sHRef == null )
+			sHRef = oLink.getAttribute( 'href' , 2 ) || '' ;
+
+		if ( sHRef == sReference || sHRef == sFullReference )
+		{
+			oLink.href = '#' + sNew ;
+			SetAttribute( oLink, '_fcksavedurl', '#' + sNew ) ;
+		}
+	}
+}
+
+		</script>
+	</head>
+	<body style="OVERFLOW: hidden" scroll="no">
+		<table height="100%" width="100%">
+			<tr>
+				<td align="center">
+					<table border="0" cellpadding="0" cellspacing="0" width="80%">
+						<tr>
+							<td>
+								<span fckLang="DlgAnchorName">Anchor Name</span><BR>
+								<input id="txtName" style="WIDTH: 100%" type="text">
+							</td>
+						</tr>
+					</table>
+				</td>
+			</tr>
+		</table>
+	</body>
+</html>
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_button.html
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_button.html	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_button.html	(revision 1280)
@@ -0,0 +1,109 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Button dialog window.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+	<title>Button Properties</title>
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+	<meta content="noindex, nofollow" name="robots" />
+	<script src="common/fck_dialog_common.js" type="text/javascript"></script>
+	<script type="text/javascript">
+
+var oEditor = window.parent.InnerDialogLoaded() ;
+
+// Gets the document DOM
+var oDOM = oEditor.FCK.EditorDocument ;
+
+var oActiveEl = oEditor.FCKSelection.GetSelectedElement() ;
+
+window.onload = function()
+{
+	// First of all, translate the dialog box texts
+	oEditor.FCKLanguageManager.TranslatePage(document) ;
+
+	if ( oActiveEl && oActiveEl.tagName.toUpperCase() == "INPUT" && ( oActiveEl.type == "button" || oActiveEl.type == "submit" || oActiveEl.type == "reset" ) )
+	{
+		GetE('txtName').value	= oActiveEl.name ;
+		GetE('txtValue').value	= oActiveEl.value ;
+		GetE('txtType').value	= oActiveEl.type ;
+
+		GetE('txtType').disabled = true ;
+	}
+	else
+		oActiveEl = null ;
+
+	window.parent.SetOkButton( true ) ;
+}
+
+function Ok()
+{
+	oEditor.FCKUndo.SaveUndoStep() ;
+	
+	if ( !oActiveEl )
+	{
+		oActiveEl = oEditor.FCK.EditorDocument.createElement( 'INPUT' ) ;
+		oActiveEl.type = GetE('txtType').value ;
+		oActiveEl = oEditor.FCK.InsertElement( oActiveEl ) ;
+	}
+
+	oActiveEl.name = GetE('txtName').value ;
+	SetAttribute( oActiveEl, 'value', GetE('txtValue').value ) ;
+
+	return true ;
+}
+
+	</script>
+</head>
+<body style="overflow: hidden">
+	<table width="100%" style="height: 100%">
+		<tr>
+			<td align="center">
+				<table border="0" cellpadding="0" cellspacing="0" width="80%">
+					<tr>
+						<td colspan="">
+							<span fcklang="DlgCheckboxName">Name</span><br />
+							<input type="text" size="20" id="txtName" style="width: 100%" />
+						</td>
+					</tr>
+					<tr>
+						<td>
+							<span fcklang="DlgButtonText">Text (Value)</span><br />
+							<input type="text" id="txtValue" style="width: 100%" />
+						</td>
+					</tr>
+					<tr>
+						<td>
+							<span fcklang="DlgButtonType">Type</span><br />
+							<select id="txtType">
+								<option fcklang="DlgButtonTypeBtn" value="button" selected="selected">Button</option>
+								<option fcklang="DlgButtonTypeSbm" value="submit">Submit</option>
+								<option fcklang="DlgButtonTypeRst" value="reset">Reset</option>
+							</select>
+						</td>
+					</tr>
+				</table>
+			</td>
+		</tr>
+	</table>
+</body>
+</html>
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_checkbox.html
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_checkbox.html	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_checkbox.html	(revision 1280)
@@ -0,0 +1,109 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Checkbox dialog window.
+-->
+<html>
+	<head>
+		<title>Checkbox Properties</title>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+		<meta content="noindex, nofollow" name="robots">
+		<script src="common/fck_dialog_common.js" type="text/javascript"></script>
+		<script type="text/javascript">
+
+var oEditor = window.parent.InnerDialogLoaded() ;
+
+// Gets the document DOM
+var oDOM = oEditor.FCK.EditorDocument ;
+
+var oActiveEl = oEditor.FCKSelection.GetSelectedElement() ;
+
+window.onload = function()
+{
+	// First of all, translate the dialog box texts
+	oEditor.FCKLanguageManager.TranslatePage(document) ;
+
+	if ( oActiveEl && oActiveEl.tagName == 'INPUT' && oActiveEl.type == 'checkbox' )
+	{
+		GetE('txtName').value		= oActiveEl.name ;
+		GetE('txtValue').value		= oEditor.FCKBrowserInfo.IsIE ? oActiveEl.value : GetAttribute( oActiveEl, 'value' ) ;
+		GetE('txtSelected').checked	= oActiveEl.checked ;
+	}
+	else
+		oActiveEl = null ;
+
+	window.parent.SetOkButton( true ) ;
+}
+
+function Ok()
+{
+	oEditor.FCKUndo.SaveUndoStep() ;
+	
+	if ( !oActiveEl )
+	{
+		oActiveEl = oEditor.FCK.EditorDocument.createElement( 'INPUT' ) ;
+		oActiveEl.type = 'checkbox' ;
+		oActiveEl = oEditor.FCK.InsertElement( oActiveEl ) ;
+	}
+
+	if ( GetE('txtName').value.length > 0 )
+		oActiveEl.name = GetE('txtName').value ;
+
+	if ( oEditor.FCKBrowserInfo.IsIE )
+		oActiveEl.value = GetE('txtValue').value ;
+	else
+		SetAttribute( oActiveEl, 'value', GetE('txtValue').value ) ;
+
+	var bIsChecked = GetE('txtSelected').checked ;
+	SetAttribute( oActiveEl, 'checked', bIsChecked ? 'checked' : null ) ;	// For Firefox
+	oActiveEl.checked = bIsChecked ;
+
+	return true ;
+}
+
+		</script>
+	</head>
+	<body style="OVERFLOW: hidden" scroll="no">
+		<table height="100%" width="100%">
+			<tr>
+				<td align="center">
+					<table border="0" cellpadding="0" cellspacing="0" width="80%">
+						<tr>
+							<td>
+								<span fckLang="DlgCheckboxName">Name</span><br>
+								<input type="text" size="20" id="txtName" style="WIDTH: 100%">
+							</td>
+						</tr>
+						<tr>
+							<td>
+								<span fckLang="DlgCheckboxValue">Value</span><br>
+								<input type="text" size="20" id="txtValue" style="WIDTH: 100%">
+							</td>
+						</tr>
+						<tr>
+							<td><input type="checkbox" id="txtSelected"><label for="txtSelected" fckLang="DlgCheckboxSelected">Checked</label></td>
+						</tr>
+					</table>
+				</td>
+			</tr>
+		</table>
+	</body>
+</html>
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_colorselector.html
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_colorselector.html	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_colorselector.html	(revision 1280)
@@ -0,0 +1,171 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Color Selection dialog window.
+-->
+<html>
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+		<meta name="robots" content="noindex, nofollow" />
+		<style TYPE="text/css">
+			#ColorTable		{ cursor: pointer ; cursor: hand ; }
+			#hicolor		{ height: 74px ; width: 74px ; border-width: 1px ; border-style: solid ; }
+			#hicolortext	{ width: 75px ; text-align: right ; margin-bottom: 7px ; }
+			#selhicolor		{ height: 20px ; width: 74px ; border-width: 1px ; border-style: solid ; }
+			#selcolor		{ width: 75px ; height: 20px ; margin-top: 0px ; margin-bottom: 7px ; }
+			#btnClear		{ width: 75px ; height: 22px ; margin-bottom: 6px ; }
+			.ColorCell		{ height: 15px ; width: 15px ; }
+		</style>
+		<script type="text/javascript">
+
+var oEditor = window.parent.InnerDialogLoaded() ;
+
+function OnLoad()
+{
+	// First of all, translate the dialog box texts
+	oEditor.FCKLanguageManager.TranslatePage(document) ;
+
+	CreateColorTable() ;
+
+	window.parent.SetOkButton( true ) ;
+	window.parent.SetAutoSize( true ) ;
+}
+
+function CreateColorTable()
+{
+	// Get the target table.
+	var oTable = document.getElementById('ColorTable') ;
+
+	// Create the base colors array.
+	var aColors = ['00','33','66','99','cc','ff'] ;
+
+	// This function combines two ranges of three values from the color array into a row.
+	function AppendColorRow( rangeA, rangeB )
+	{
+		for ( var i = rangeA ; i < rangeA + 3 ; i++ )
+		{
+			var oRow = oTable.insertRow(-1) ;
+
+			for ( var j = rangeB ; j < rangeB + 3 ; j++ )
+			{
+				for ( var n = 0 ; n < 6 ; n++ )
+				{
+					AppendColorCell( oRow, '#' + aColors[j] + aColors[n] + aColors[i] ) ;
+				}
+			}
+		}
+	}
+
+	// This function create a single color cell in the color table.
+	function AppendColorCell( targetRow, color )
+	{
+		var oCell = targetRow.insertCell(-1) ;
+		oCell.className = 'ColorCell' ;
+		oCell.bgColor = color ;
+
+		oCell.onmouseover = function()
+		{
+			document.getElementById('hicolor').style.backgroundColor = this.bgColor ;
+			document.getElementById('hicolortext').innerHTML = this.bgColor ;
+		}
+
+		oCell.onclick = function()
+		{
+			document.getElementById('selhicolor').style.backgroundColor = this.bgColor ;
+			document.getElementById('selcolor').value = this.bgColor ;
+		}
+	}
+
+	AppendColorRow( 0, 0 ) ;
+	AppendColorRow( 3, 0 ) ;
+	AppendColorRow( 0, 3 ) ;
+	AppendColorRow( 3, 3 ) ;
+
+	// Create the last row.
+	var oRow = oTable.insertRow(-1) ;
+
+	// Create the gray scale colors cells.
+	for ( var n = 0 ; n < 6 ; n++ )
+	{
+		AppendColorCell( oRow, '#' + aColors[n] + aColors[n] + aColors[n] ) ;
+	}
+
+	// Fill the row with black cells.
+	for ( var i = 0 ; i < 12 ; i++ )
+	{
+		AppendColorCell( oRow, '#000000' ) ;
+	}
+}
+
+function Clear()
+{
+	document.getElementById('selhicolor').style.backgroundColor = '' ;
+	document.getElementById('selcolor').value = '' ;
+}
+
+function ClearActual()
+{
+	document.getElementById('hicolor').style.backgroundColor = '' ;
+	document.getElementById('hicolortext').innerHTML = '&nbsp;' ;
+}
+
+function UpdateColor()
+{
+	try		  { document.getElementById('selhicolor').style.backgroundColor = document.getElementById('selcolor').value ; }
+	catch (e) { Clear() ; }
+}
+
+function Ok()
+{
+	if ( typeof(window.parent.dialogArguments.CustomValue) == 'function' )
+		window.parent.dialogArguments.CustomValue( document.getElementById('selcolor').value ) ;
+
+	return true ;
+}
+		</script>
+	</head>
+	<body onload="OnLoad()" scroll="no" style="OVERFLOW: hidden">
+		<table cellpadding="0" cellspacing="0" border="0" width="100%" height="100%">
+			<tr>
+				<td align="center" valign="middle">
+					<table border="0" cellspacing="5" cellpadding="0" width="100%">
+						<tr>
+							<td valign="top" align="center" nowrap width="100%">
+								<table id="ColorTable" border="0" cellspacing="0" cellpadding="0" width="270" onmouseout="ClearActual();">
+								</table>
+							</td>
+							<td valign="top" align="left" nowrap>
+								<span fckLang="DlgColorHighlight">Highlight</span>
+								<div id="hicolor"></div>
+								<div id="hicolortext">&nbsp;</div>
+								<span fckLang="DlgColorSelected">Selected</span>
+								<div id="selhicolor"></div>
+								<input id="selcolor" type="text" maxlength="20" onchange="UpdateColor();">
+								<br>
+								<input id="btnClear" type="button" fckLang="DlgColorBtnClear" value="Clear" onclick="Clear();" />
+							</td>
+						</tr>
+					</table>
+				</td>
+			</tr>
+		</table>
+	</body>
+</html>
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_docprops.html
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_docprops.html	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_docprops.html	(revision 1280)
@@ -0,0 +1,600 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Link dialog window.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+	<title></title>
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+	<meta content="noindex, nofollow" name="robots" />
+	<script src="common/fck_dialog_common.js" type="text/javascript"></script>
+	<script type="text/javascript">
+
+var oEditor		= window.parent.InnerDialogLoaded() ;
+var FCK			= oEditor.FCK ;
+var FCKLang		= oEditor.FCKLang ;
+var FCKConfig	= oEditor.FCKConfig ;
+
+//#### Dialog Tabs
+
+// Set the dialog tabs.
+window.parent.AddTab( 'General'		, FCKLang.DlgDocGeneralTab ) ;
+window.parent.AddTab( 'Background'	, FCKLang.DlgDocBackTab ) ;
+window.parent.AddTab( 'Colors'		, FCKLang.DlgDocColorsTab ) ;
+window.parent.AddTab( 'Meta'		, FCKLang.DlgDocMetaTab ) ;
+
+// Function called when a dialog tag is selected.
+function OnDialogTabChange( tabCode )
+{
+	ShowE( 'divGeneral'		, ( tabCode == 'General' ) ) ;
+	ShowE( 'divBackground'	, ( tabCode == 'Background' ) ) ;
+	ShowE( 'divColors'		, ( tabCode == 'Colors' ) ) ;
+	ShowE( 'divMeta'		, ( tabCode == 'Meta' ) ) ;
+
+	ShowE( 'ePreview'		, ( tabCode == 'Background' || tabCode == 'Colors' ) ) ;
+}
+
+//#### Get Base elements from the document: BEGIN
+
+// The HTML element of the document.
+var oHTML = FCK.EditorDocument.getElementsByTagName('html')[0] ;
+
+// The HEAD element of the document.
+var oHead = oHTML.getElementsByTagName('head')[0] ;
+
+var oBody = FCK.EditorDocument.body ;
+
+// This object contains all META tags defined in the document.
+var oMetaTags = new Object() ;
+
+// Get all META tags defined in the document.
+AppendMetaCollection( oMetaTags, oHead.getElementsByTagName('meta') ) ;
+AppendMetaCollection( oMetaTags, oHead.getElementsByTagName('fck:meta') ) ;
+
+function AppendMetaCollection( targetObject, metaCollection )
+{
+	// Loop throw all METAs and put it in the HashTable.
+	for ( var i = 0 ; i < metaCollection.length ; i++ )
+	{
+		// Try to get the "name" attribute.
+		var sName = GetAttribute( metaCollection[i], 'name', GetAttribute( metaCollection[i], '___fcktoreplace:name', '' ) ) ;
+
+		// If no "name", try with the "http-equiv" attribute.
+		if ( sName.length == 0 )
+		{
+			if ( oEditor.FCKBrowserInfo.IsIE )
+			{
+				// Get the http-equiv value from the outerHTML.
+				var oHttpEquivMatch = metaCollection[i].outerHTML.match( oEditor.FCKRegexLib.MetaHttpEquiv ) ;
+				if ( oHttpEquivMatch )
+					sName = oHttpEquivMatch[1] ;
+			}
+			else
+				sName = GetAttribute( metaCollection[i], 'http-equiv', '' ) ;
+		}
+
+		if ( sName.length > 0 )
+			targetObject[ sName.toLowerCase() ] = metaCollection[i] ;
+	}
+}
+
+//#### END
+
+// Set a META tag in the document.
+function SetMetadata( name, content, isHttp )
+{
+	if ( content.length == 0 )
+	{
+		RemoveMetadata( name ) ;
+		return ;
+	}
+
+	var oMeta = oMetaTags[ name.toLowerCase() ] ;
+
+	if ( !oMeta )
+	{
+		oMeta = oHead.appendChild( FCK.EditorDocument.createElement('META') ) ;
+
+		if ( isHttp )
+			SetAttribute( oMeta, 'http-equiv', name ) ;
+		else
+		{
+			// On IE, it is not possible to set the "name" attribute of the META tag.
+			// So a temporary attribute is used and it is replaced when getting the
+			// editor's HTML/XHTML value. This is sad, I know :(
+			if ( oEditor.FCKBrowserInfo.IsIE )
+				SetAttribute( oMeta, '___fcktoreplace:name', name ) ;
+			else
+				SetAttribute( oMeta, 'name', name ) ;
+		}
+
+		oMetaTags[ name.toLowerCase() ] = oMeta ;
+	}
+
+	SetAttribute( oMeta, 'content', content ) ;
+//	oMeta.content = content ;
+}
+
+function RemoveMetadata( name )
+{
+	var oMeta = oMetaTags[ name.toLowerCase() ] ;
+
+	if ( oMeta && oMeta != null )
+	{
+		oMeta.parentNode.removeChild( oMeta ) ;
+		oMetaTags[ name.toLowerCase() ] = null ;
+	}
+}
+
+function GetMetadata( name )
+{
+	var oMeta = oMetaTags[ name.toLowerCase() ] ;
+
+	if ( oMeta && oMeta != null )
+		return oMeta.getAttribute( 'content', 2 ) ;
+	else
+		return '' ;
+}
+
+window.onload = function ()
+{
+	// Show/Hide the "Browse Server" button.
+	GetE('tdBrowse').style.display = oEditor.FCKConfig.ImageBrowser ? "" : "none";
+
+	// First of all, translate the dialog box texts
+	oEditor.FCKLanguageManager.TranslatePage( document ) ;
+
+	FillFields() ;
+
+	UpdatePreview() ;
+
+	// Show the "Ok" button.
+	window.parent.SetOkButton( true ) ;
+
+	window.parent.SetAutoSize( true ) ;
+}
+
+function FillFields()
+{
+	// ### General Info
+	GetE('txtPageTitle').value = FCK.EditorDocument.title ;
+
+	GetE('selDirection').value	= GetAttribute( oHTML, 'dir', '' ) ;
+	GetE('txtLang').value		= GetAttribute( oHTML, 'xml:lang', GetAttribute( oHTML, 'lang', '' ) ) ;	// "xml:lang" takes precedence to "lang".
+
+	// Character Set Encoding.
+//	if ( oEditor.FCKBrowserInfo.IsIE )
+//		var sCharSet = FCK.EditorDocument.charset ;
+//	else
+		var sCharSet = GetMetadata( 'Content-Type' ) ;
+
+	if ( sCharSet != null && sCharSet.length > 0 )
+	{
+//		if ( !oEditor.FCKBrowserInfo.IsIE )
+			sCharSet = sCharSet.match( /[^=]*$/ ) ;
+
+		GetE('selCharSet').value = sCharSet ;
+
+		if ( GetE('selCharSet').selectedIndex == -1 )
+		{
+			GetE('selCharSet').value = '...' ;
+			GetE('txtCustomCharSet').value = sCharSet ;
+
+			CheckOther( GetE('selCharSet'), 'txtCustomCharSet' ) ;
+		}
+	}
+
+	// Document Type.
+	if ( FCK.DocTypeDeclaration && FCK.DocTypeDeclaration.length > 0 )
+	{
+		GetE('selDocType').value = FCK.DocTypeDeclaration ;
+
+		if ( GetE('selDocType').selectedIndex == -1 )
+		{
+			GetE('selDocType').value = '...' ;
+			GetE('txtDocType').value = FCK.DocTypeDeclaration ;
+
+			CheckOther( GetE('selDocType'), 'txtDocType' ) ;
+		}
+	}
+
+	// Document Type.
+	GetE('chkIncXHTMLDecl').checked = ( FCK.XmlDeclaration && FCK.XmlDeclaration.length > 0 ) ;
+
+	// ### Background
+	GetE('txtBackColor').value = GetAttribute( oBody, 'bgColor'		, '' ) ;
+	GetE('txtBackImage').value = GetAttribute( oBody, 'background'	, '' ) ;
+	GetE('chkBackNoScroll').checked = ( GetAttribute( oBody, 'bgProperties', '' ).toLowerCase() == 'fixed' ) ;
+
+	// ### Colors
+	GetE('txtColorText').value		= GetAttribute( oBody, 'text'	, '' ) ;
+	GetE('txtColorLink').value		= GetAttribute( oBody, 'link'	, '' ) ;
+	GetE('txtColorVisited').value	= GetAttribute( oBody, 'vLink'	, '' ) ;
+	GetE('txtColorActive').value	= GetAttribute( oBody, 'aLink'	, '' ) ;
+
+	// ### Margins
+	GetE('txtMarginTop').value		= GetAttribute( oBody, 'topMargin'		, '' ) ;
+	GetE('txtMarginLeft').value		= GetAttribute( oBody, 'leftMargin'		, '' ) ;
+	GetE('txtMarginRight').value	= GetAttribute( oBody, 'rightMargin'	, '' ) ;
+	GetE('txtMarginBottom').value	= GetAttribute( oBody, 'bottomMargin'	, '' ) ;
+
+	// ### Meta Data
+	GetE('txtMetaKeywords').value		= GetMetadata( 'keywords' ) ;
+	GetE('txtMetaDescription').value	= GetMetadata( 'description' ) ;
+	GetE('txtMetaAuthor').value			= GetMetadata( 'author' ) ;
+	GetE('txtMetaCopyright').value		= GetMetadata( 'copyright' ) ;
+}
+
+// Called when the "Ok" button is clicked.
+function Ok()
+{
+	// ### General Info
+	FCK.EditorDocument.title = GetE('txtPageTitle').value ;
+
+	var oHTML = FCK.EditorDocument.getElementsByTagName('html')[0] ;
+
+	SetAttribute( oHTML, 'dir'		, GetE('selDirection').value ) ;
+	SetAttribute( oHTML, 'lang'		, GetE('txtLang').value ) ;
+	SetAttribute( oHTML, 'xml:lang'	, GetE('txtLang').value ) ;
+
+	// Character Set Enconding.
+	var sCharSet = GetE('selCharSet').value ;
+	if ( sCharSet == '...' )
+		sCharSet = GetE('txtCustomCharSet').value ;
+
+	if ( sCharSet.length > 0 )
+			sCharSet = 'text/html; charset=' + sCharSet ;
+
+//	if ( oEditor.FCKBrowserInfo.IsIE )
+//		FCK.EditorDocument.charset = sCharSet ;
+//	else
+		SetMetadata( 'Content-Type', sCharSet, true ) ;
+
+	// Document Type
+	var sDocType = GetE('selDocType').value ;
+	if ( sDocType == '...' )
+		sDocType = GetE('txtDocType').value ;
+
+	FCK.DocTypeDeclaration = sDocType ;
+
+	// XHTML Declarations.
+	if ( GetE('chkIncXHTMLDecl').checked )
+	{
+		if ( sCharSet.length == 0 )
+			sCharSet = 'utf-8' ;
+
+		FCK.XmlDeclaration = '<' + '?xml version="1.0" encoding="' + sCharSet + '"?>' ;
+
+		SetAttribute( oHTML, 'xmlns', 'http://www.w3.org/1999/xhtml' ) ;
+	}
+	else
+	{
+		FCK.XmlDeclaration = null ;
+		oHTML.removeAttribute( 'xmlns', 0 ) ;
+	}
+
+	// ### Background
+	SetAttribute( oBody, 'bgcolor'		, GetE('txtBackColor').value ) ;
+	SetAttribute( oBody, 'background'	, GetE('txtBackImage').value ) ;
+	SetAttribute( oBody, 'bgproperties'	, GetE('chkBackNoScroll').checked ? 'fixed' : '' ) ;
+
+	// ### Colors
+	SetAttribute( oBody, 'text'	, GetE('txtColorText').value ) ;
+	SetAttribute( oBody, 'link'	, GetE('txtColorLink').value ) ;
+	SetAttribute( oBody, 'vlink', GetE('txtColorVisited').value ) ;
+	SetAttribute( oBody, 'alink', GetE('txtColorActive').value ) ;
+
+	// ### Margins
+	SetAttribute( oBody, 'topmargin'	, GetE('txtMarginTop').value ) ;
+	SetAttribute( oBody, 'leftmargin'	, GetE('txtMarginLeft').value ) ;
+	SetAttribute( oBody, 'rightmargin'	, GetE('txtMarginRight').value ) ;
+	SetAttribute( oBody, 'bottommargin'	, GetE('txtMarginBottom').value ) ;
+
+	// ### Meta data
+	SetMetadata( 'keywords'		, GetE('txtMetaKeywords').value ) ;
+	SetMetadata( 'description'	, GetE('txtMetaDescription').value ) ;
+	SetMetadata( 'author'		, GetE('txtMetaAuthor').value ) ;
+	SetMetadata( 'copyright'	, GetE('txtMetaCopyright').value ) ;
+
+	return true ;
+}
+
+var bPreviewIsLoaded = false ;
+var oPreviewWindow ;
+var oPreviewBody ;
+
+// Called by the Preview page when loaded.
+function OnPreviewLoad( previewWindow, previewBody )
+{
+	oPreviewWindow	= previewWindow ;
+	oPreviewBody	= previewBody ;
+
+	bPreviewIsLoaded = true ;
+	UpdatePreview() ;
+}
+
+function UpdatePreview()
+{
+	if ( !bPreviewIsLoaded )
+		return ;
+
+	// ### Background
+	SetAttribute( oPreviewBody, 'bgcolor'		, GetE('txtBackColor').value ) ;
+	SetAttribute( oPreviewBody, 'background'	, GetE('txtBackImage').value ) ;
+	SetAttribute( oPreviewBody, 'bgproperties'	, GetE('chkBackNoScroll').checked ? 'fixed' : '' ) ;
+
+	// ### Colors
+	SetAttribute( oPreviewBody, 'text', GetE('txtColorText').value ) ;
+
+	oPreviewWindow.SetLinkColor( GetE('txtColorLink').value ) ;
+	oPreviewWindow.SetVisitedColor( GetE('txtColorVisited').value ) ;
+	oPreviewWindow.SetActiveColor( GetE('txtColorActive').value ) ;
+}
+
+function CheckOther( combo, txtField )
+{
+	var bNotOther = ( combo.value != '...' ) ;
+
+	GetE(txtField).style.backgroundColor = ( bNotOther ? '#cccccc' : '' ) ;
+	GetE(txtField).disabled = bNotOther ;
+}
+
+function SetColor( inputId, color )
+{
+	GetE( inputId ).value = color + '' ;
+	UpdatePreview() ;
+}
+
+function SelectBackColor( color )		{ SetColor('txtBackColor', color ) ; }
+function SelectColorText( color )		{ SetColor('txtColorText', color ) ; }
+function SelectColorLink( color )		{ SetColor('txtColorLink', color ) ; }
+function SelectColorVisited( color )	{ SetColor('txtColorVisited', color ) ; }
+function SelectColorActive( color )		{ SetColor('txtColorActive', color ) ; }
+
+function SelectColor( wich )
+{
+	switch ( wich )
+	{
+		case 'Back'			: oEditor.FCKDialog.OpenDialog( 'FCKDialog_Color', FCKLang.DlgColorTitle, 'dialog/fck_colorselector.html', 400, 330, SelectBackColor, window ) ; return ;
+		case 'ColorText'	: oEditor.FCKDialog.OpenDialog( 'FCKDialog_Color', FCKLang.DlgColorTitle, 'dialog/fck_colorselector.html', 400, 330, SelectColorText, window ) ; return ;
+		case 'ColorLink'	: oEditor.FCKDialog.OpenDialog( 'FCKDialog_Color', FCKLang.DlgColorTitle, 'dialog/fck_colorselector.html', 400, 330, SelectColorLink, window ) ; return ;
+		case 'ColorVisited'	: oEditor.FCKDialog.OpenDialog( 'FCKDialog_Color', FCKLang.DlgColorTitle, 'dialog/fck_colorselector.html', 400, 330, SelectColorVisited, window ) ; return ;
+		case 'ColorActive'	: oEditor.FCKDialog.OpenDialog( 'FCKDialog_Color', FCKLang.DlgColorTitle, 'dialog/fck_colorselector.html', 400, 330, SelectColorActive, window ) ; return ;
+	}
+}
+
+function BrowseServerBack()
+{
+	OpenFileBrowser( FCKConfig.ImageBrowserURL, FCKConfig.ImageBrowserWindowWidth, FCKConfig.ImageBrowserWindowHeight ) ;
+}
+
+function SetUrl( url )
+{
+	GetE('txtBackImage').value = url ;
+	UpdatePreview() ;
+}
+
+	</script>
+</head>
+<body style="overflow: hidden">
+	<table cellspacing="0" cellpadding="0" width="100%" border="0" style="height: 100%">
+		<tr>
+			<td valign="top" style="height: 100%">
+				<div id="divGeneral">
+					<span fcklang="DlgDocPageTitle">Page Title</span><br />
+					<input id="txtPageTitle" style="width: 100%" type="text" />
+					<br />
+					<table cellspacing="0" cellpadding="0" border="0">
+						<tr>
+							<td>
+								<span fcklang="DlgDocLangDir">Language Direction</span><br />
+								<select id="selDirection">
+									<option value="" selected="selected"></option>
+									<option value="ltr" fcklang="DlgDocLangDirLTR">Left to Right (LTR)</option>
+									<option value="rtl" fcklang="DlgDocLangDirRTL">Right to Left (RTL)</option>
+								</select>
+							</td>
+							<td>
+								&nbsp;&nbsp;&nbsp;</td>
+							<td>
+								<span fcklang="DlgDocLangCode">Language Code</span><br />
+								<input id="txtLang" type="text" />
+							</td>
+						</tr>
+					</table>
+					<br />
+					<table cellspacing="0" cellpadding="0" width="100%" border="0">
+						<tr>
+							<td style="white-space: nowrap">
+								<span fcklang="DlgDocCharSet">Character Set Encoding</span><br />
+								<select id="selCharSet" onchange="CheckOther( this, 'txtCustomCharSet' );">
+									<option value="" selected="selected"></option>
+									<option value="us-ascii">ASCII</option>
+									<option fcklang="DlgDocCharSetCE" value="iso-8859-2">Central European</option>
+									<option fcklang="DlgDocCharSetCT" value="big5">Chinese Traditional (Big5)</option>
+									<option fcklang="DlgDocCharSetCR" value="iso-8859-5">Cyrillic</option>
+									<option fcklang="DlgDocCharSetGR" value="iso-8859-7">Greek</option>
+									<option fcklang="DlgDocCharSetJP" value="iso-2022-jp">Japanese</option>
+									<option fcklang="DlgDocCharSetKR" value="iso-2022-kr">Korean</option>
+									<option fcklang="DlgDocCharSetTR" value="iso-8859-9">Turkish</option>
+									<option fcklang="DlgDocCharSetUN" value="utf-8">Unicode (UTF-8)</option>
+									<option fcklang="DlgDocCharSetWE" value="iso-8859-1">Western European</option>
+									<option fcklang="DlgOpOther" value="...">&lt;Other&gt;</option>
+								</select>
+							</td>
+							<td>
+								&nbsp;&nbsp;&nbsp;</td>
+							<td width="100%">
+								<span fcklang="DlgDocCharSetOther">Other Character Set Encoding</span><br />
+								<input id="txtCustomCharSet" style="width: 100%; background-color: #cccccc" disabled="disabled"
+									type="text" />
+							</td>
+						</tr>
+						<tr>
+							<td colspan="3">
+								&nbsp;</td>
+						</tr>
+						<tr>
+							<td nowrap="nowrap">
+								<span fcklang="DlgDocDocType">Document Type Heading</span><br />
+								<select id="selDocType" name="selDocType" onchange="CheckOther( this, 'txtDocType' );">
+									<option value="" selected="selected"></option>
+									<option value='<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">'>HTML
+										4.01 Transitional</option>
+									<option value='<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">'>
+										HTML 4.01 Strict</option>
+									<option value='<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">'>
+										HTML 4.01 Frameset</option>
+									<option value='<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">'>
+										XHTML 1.0 Transitional</option>
+									<option value='<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">'>
+										XHTML 1.0 Strict</option>
+									<option value='<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">'>
+										XHTML 1.0 Frameset</option>
+									<option value='<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">'>
+										XHTML 1.1</option>
+									<option value='<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">'>HTML 3.2</option>
+									<option value='<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">'>HTML 2.0</option>
+									<option value="..." fcklang="DlgOpOther">&lt;Other&gt;</option>
+								</select>
+							</td>
+							<td>
+							</td>
+							<td width="100%">
+								<span fcklang="DlgDocDocTypeOther">Other Document Type Heading</span><br />
+								<input id="txtDocType" style="width: 100%; background-color: #cccccc" disabled="disabled"
+									type="text" />
+							</td>
+						</tr>
+					</table>
+					<br />
+					<input id="chkIncXHTMLDecl" type="checkbox" />
+					<label for="chkIncXHTMLDecl" fcklang="DlgDocIncXHTML">
+						Include XHTML Declarations</label>
+				</div>
+				<div id="divBackground" style="display: none">
+					<span fcklang="DlgDocBgColor">Background Color</span><br />
+					<input id="txtBackColor" type="text" onchange="UpdatePreview();" onkeyup="UpdatePreview();" />&nbsp;<input
+						id="btnSelBackColor" onclick="SelectColor( 'Back' )" type="button" value="Select..."
+						fcklang="DlgCellBtnSelect" /><br />
+					<br />
+					<span fcklang="DlgDocBgImage">Background Image URL</span><br />
+					<table cellspacing="0" cellpadding="0" width="100%" border="0">
+						<tr>
+							<td width="100%">
+								<input id="txtBackImage" style="width: 100%" type="text" onchange="UpdatePreview();"
+									onkeyup="UpdatePreview();" /></td>
+							<td id="tdBrowse" nowrap="nowrap">
+								&nbsp;<input id="btnBrowse" onclick="BrowseServerBack();" type="button" fcklang="DlgBtnBrowseServer"
+									value="Browse Server" /></td>
+						</tr>
+					</table>
+					<input id="chkBackNoScroll" type="checkbox" onclick="UpdatePreview();" />
+					<label for="chkBackNoScroll" fcklang="DlgDocBgNoScroll">
+						Nonscrolling Background</label>
+				</div>
+				<div id="divColors" style="display: none">
+					<table cellspacing="0" cellpadding="0" width="100%" border="0">
+						<tr>
+							<td>
+								<span fcklang="DlgDocCText">Text</span><br />
+								<input id="txtColorText" type="text" onchange="UpdatePreview();" onkeyup="UpdatePreview();" /><input
+									onclick="SelectColor( 'ColorText' )" type="button" value="Select..." fcklang="DlgCellBtnSelect" />
+								<br />
+								<span fcklang="DlgDocCLink">Link</span><br />
+								<input id="txtColorLink" type="text" onchange="UpdatePreview();" onkeyup="UpdatePreview();" /><input
+									onclick="SelectColor( 'ColorLink' )" type="button" value="Select..." fcklang="DlgCellBtnSelect" />
+								<br />
+								<span fcklang="DlgDocCVisited">Visited Link</span><br />
+								<input id="txtColorVisited" type="text" onchange="UpdatePreview();" onkeyup="UpdatePreview();" /><input
+									onclick="SelectColor( 'ColorVisited' )" type="button" value="Select..." fcklang="DlgCellBtnSelect" />
+								<br />
+								<span fcklang="DlgDocCActive">Active Link</span><br />
+								<input id="txtColorActive" type="text" onchange="UpdatePreview();" onkeyup="UpdatePreview();" /><input
+									onclick="SelectColor( 'ColorActive' )" type="button" value="Select..." fcklang="DlgCellBtnSelect" />
+							</td>
+							<td valign="middle" align="center">
+								<table cellspacing="2" cellpadding="0" border="0">
+									<tr>
+										<td>
+											<span fcklang="DlgDocMargins">Page Margins</span></td>
+									</tr>
+									<tr>
+										<td style="border: #000000 1px solid; padding: 5px">
+											<table cellpadding="0" cellspacing="0" border="0" dir="ltr">
+												<tr>
+													<td align="center" colspan="3">
+														<span fcklang="DlgDocMaTop">Top</span><br />
+														<input id="txtMarginTop" type="text" size="3" />
+													</td>
+												</tr>
+												<tr>
+													<td align="left">
+														<span fcklang="DlgDocMaLeft">Left</span><br />
+														<input id="txtMarginLeft" type="text" size="3" />
+													</td>
+													<td>
+														&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
+													<td align="right">
+														<span fcklang="DlgDocMaRight">Right</span><br />
+														<input id="txtMarginRight" type="text" size="3" />
+													</td>
+												</tr>
+												<tr>
+													<td align="center" colspan="3">
+														<span fcklang="DlgDocMaBottom">Bottom</span><br />
+														<input id="txtMarginBottom" type="text" size="3" />
+													</td>
+												</tr>
+											</table>
+										</td>
+									</tr>
+								</table>
+							</td>
+						</tr>
+					</table>
+				</div>
+				<div id="divMeta" style="display: none">
+					<span fcklang="DlgDocMeIndex">Document Indexing Keywords (comma separated)</span><br />
+					<textarea id="txtMetaKeywords" style="width: 100%" rows="2" cols="20"></textarea>
+					<br />
+					<span fcklang="DlgDocMeDescr">Document Description</span><br />
+					<textarea id="txtMetaDescription" style="width: 100%" rows="4" cols="20"></textarea>
+					<br />
+					<span fcklang="DlgDocMeAuthor">Author</span><br />
+					<input id="txtMetaAuthor" style="width: 100%" type="text" /><br />
+					<br />
+					<span fcklang="DlgDocMeCopy">Copyright</span><br />
+					<input id="txtMetaCopyright" type="text" style="width: 100%" />
+				</div>
+			</td>
+		</tr>
+		<tr id="ePreview" style="display: none">
+			<td>
+				<span fcklang="DlgDocPreview">Preview</span><br />
+				<iframe id="frmPreview" src="fck_docprops/fck_document_preview.html" width="100%"
+					height="100"></iframe>
+			</td>
+		</tr>
+	</table>
+</body>
+</html>
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_docprops/fck_document_preview.html
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_docprops/fck_document_preview.html	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_docprops/fck_document_preview.html	(revision 1280)
@@ -0,0 +1,113 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Preview shown in the "Document Properties" dialog window.
+-->
+<html>
+	<head>
+		<title>Document Properties - Preview</title>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+		<meta name="robots" content="noindex, nofollow">
+		<script language="javascript">
+
+var eBase = parent.FCK.EditorDocument.getElementsByTagName( 'BASE' ) ;
+if ( eBase.length > 0 && eBase[0].href.length > 0 )
+{
+	document.write( '<base href="' + eBase[0].href + '">' ) ;
+}
+
+window.onload = function()
+{
+	if ( typeof( parent.OnPreviewLoad ) == 'function' )
+		parent.OnPreviewLoad( window, document.body ) ;
+}
+
+function SetBaseHRef( baseHref )
+{
+	var eBase = document.createElement( 'BASE' ) ;
+	eBase.href = baseHref ;
+
+	var eHead = document.getElementsByTagName( 'HEAD' )[0] ;
+	eHead.appendChild( eBase ) ;
+}
+
+function SetLinkColor( color )
+{
+	if ( color && color.length > 0 )
+		document.getElementById('eLink').style.color = color ;
+	else
+		document.getElementById('eLink').style.color = window.document.linkColor ;
+}
+
+function SetVisitedColor( color )
+{
+	if ( color && color.length > 0 )
+		document.getElementById('eVisited').style.color = color ;
+	else
+		document.getElementById('eVisited').style.color = window.document.vlinkColor ;
+}
+
+function SetActiveColor( color )
+{
+	if ( color && color.length > 0 )
+		document.getElementById('eActive').style.color = color ;
+	else
+		document.getElementById('eActive').style.color = window.document.alinkColor ;
+}
+		</script>
+	</head>
+	<body>
+		<table width="100%" height="100%" cellpadding="0" cellspacing="0" border="0">
+			<tr>
+				<td align="center" valign="middle">
+					Normal Text
+				</td>
+				<td id="eLink" align="center" valign="middle">
+					<u>Link Text</u>
+				</td>
+			</tr>
+			<tr>
+				<td id="eVisited" valign="middle" align="center">
+					<u>Visited Link</u>
+				</td>
+				<td id="eActive" valign="middle" align="center">
+					<u>Active Link</u>
+				</td>
+			</tr>
+		</table>
+		<br>
+		<br>
+		<br>
+		<br>
+		<br>
+		<br>
+		<br>
+		<br>
+		<br>
+		<br>
+		<br>
+		<br>
+		<br>
+		<br>
+		<br>
+		<br>
+	</body>
+</html>
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_find.html
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_find.html	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_find.html	(revision 1280)
@@ -0,0 +1,173 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * "Find" dialog window.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+	<title></title>
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+	<meta content="noindex, nofollow" name="robots" />
+	<script type="text/javascript">
+
+var oEditor = window.parent.InnerDialogLoaded() ;
+
+function OnLoad()
+{
+	// Whole word is available on IE only.
+	if ( oEditor.FCKBrowserInfo.IsIE )
+		document.getElementById('divWord').style.display = '' ;
+
+	// First of all, translate the dialog box texts.
+	oEditor.FCKLanguageManager.TranslatePage( document ) ;
+
+	window.parent.SetAutoSize( true ) ;
+}
+
+function btnStat(frm)
+{
+	document.getElementById('btnFind').disabled =
+		( document.getElementById('txtFind').value.length == 0 ) ;
+}
+
+function ReplaceTextNodes( parentNode, regex, replaceValue, replaceAll )
+{
+	for ( var i = 0 ; i < parentNode.childNodes.length ; i++ )
+	{
+		var oNode = parentNode.childNodes[i] ;
+		if ( oNode.nodeType == 3 )
+		{
+			var sReplaced = oNode.nodeValue.replace( regex, replaceValue ) ;
+			if ( oNode.nodeValue != sReplaced )
+			{
+				oNode.nodeValue = sReplaced ;
+				if ( ! replaceAll )
+					return true ;
+			}
+		}
+		else
+		{
+			if ( ReplaceTextNodes( oNode, regex, replaceValue ) )
+				return true ;
+		}
+	}
+	return false ;
+}
+
+function GetRegexExpr()
+{
+	var sExpr ;
+
+	if ( document.getElementById('chkWord').checked )
+		sExpr = '\\b' + document.getElementById('txtFind').value + '\\b' ;
+	else
+		sExpr = document.getElementById('txtFind').value ;
+
+	return sExpr ;
+}
+
+function GetCase()
+{
+	return ( document.getElementById('chkCase').checked ? '' : 'i' ) ;
+}
+
+function Ok()
+{
+	if ( document.getElementById('txtFind').value.length == 0 )
+		return ;
+
+	if ( oEditor.FCKBrowserInfo.IsIE )
+		FindIE() ;
+	else
+		FindGecko() ;
+}
+
+var oRange ;
+
+if ( oEditor.FCKBrowserInfo.IsIE )
+	oRange = oEditor.FCK.EditorDocument.body.createTextRange() ;
+
+function FindIE()
+{
+	var iFlags = 0 ;
+
+	if ( chkCase.checked )
+		iFlags = iFlags | 4 ;
+
+	if ( chkWord.checked )
+		iFlags = iFlags | 2 ;
+
+	var bFound = oRange.findText( document.getElementById('txtFind').value, 1, iFlags ) ;
+
+	if ( bFound )
+	{
+		oRange.scrollIntoView() ;
+		oRange.select() ;
+		oRange.collapse(false) ;
+		oLastRangeFound = oRange ;
+	}
+	else
+	{
+		oRange = oEditor.FCK.EditorDocument.body.createTextRange() ;
+		alert( oEditor.FCKLang.DlgFindNotFoundMsg ) ;
+	}
+}
+
+function FindGecko()
+{
+	var bCase = document.getElementById('chkCase').checked ;
+	var bWord = document.getElementById('chkWord').checked ;
+
+	// window.find( searchString, caseSensitive, backwards, wrapAround, wholeWord, searchInFrames, showDialog ) ;
+	if ( !oEditor.FCK.EditorWindow.find( document.getElementById('txtFind').value, bCase, false, false, bWord, false, false ) )
+		alert( oEditor.FCKLang.DlgFindNotFoundMsg ) ;
+}
+	</script>
+</head>
+<body onload="OnLoad()" style="overflow: hidden">
+	<table cellspacing="3" cellpadding="2" width="100%" border="0">
+		<tr>
+			<td nowrap="nowrap">
+				<label for="txtFind" fcklang="DlgReplaceFindLbl">
+					Find what:</label>&nbsp;
+			</td>
+			<td width="100%">
+				<input id="txtFind" style="width: 100%" tabindex="1" type="text" />
+			</td>
+			<td>
+				<input id="btnFind" style="padding-right: 5px; padding-left: 5px" onclick="Ok();"
+					type="button" value="Find" fcklang="DlgFindFindBtn" />
+			</td>
+		</tr>
+		<tr>
+			<td valign="bottom" colspan="3">
+				&nbsp;<input id="chkCase" tabindex="3" type="checkbox" /><label for="chkCase" fcklang="DlgReplaceCaseChk">Match
+					case</label>
+				<br />
+				<div id="divWord" style="display: none">
+					&nbsp;<input id="chkWord" tabindex="4" type="checkbox" /><label for="chkWord" fcklang="DlgReplaceWordChk">Match
+						whole word</label>
+				</div>
+			</td>
+		</tr>
+	</table>
+</body>
+</html>
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_flash.html
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_flash.html	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_flash.html	(revision 1280)
@@ -0,0 +1,146 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Flash Properties dialog window.
+-->
+<html>
+	<head>
+		<title>Flash Properties</title>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+		<meta content="noindex, nofollow" name="robots">
+		<script src="common/fck_dialog_common.js" type="text/javascript"></script>
+		<script src="fck_flash/fck_flash.js" type="text/javascript"></script>
+		<link href="common/fck_dialog_common.css" type="text/css" rel="stylesheet">
+	</head>
+	<body scroll="no" style="OVERFLOW: hidden">
+		<div id="divInfo">
+			<table cellSpacing="1" cellPadding="1" width="100%" border="0">
+				<tr>
+					<td>
+						<table cellSpacing="0" cellPadding="0" width="100%" border="0">
+							<tr>
+								<td width="100%"><span fckLang="DlgImgURL">URL</span>
+								</td>
+								<td id="tdBrowse" style="DISPLAY: none" noWrap rowSpan="2">&nbsp; <input id="btnBrowse" onclick="BrowseServer();" type="button" value="Browse Server" fckLang="DlgBtnBrowseServer">
+								</td>
+							</tr>
+							<tr>
+								<td vAlign="top"><input id="txtUrl" onblur="UpdatePreview();" style="WIDTH: 100%" type="text">
+								</td>
+							</tr>
+						</table>
+					</td>
+				</tr>
+				<TR>
+					<TD>
+						<table cellSpacing="0" cellPadding="0" border="0">
+							<TR>
+								<TD nowrap>
+									<span fckLang="DlgImgWidth">Width</span><br>
+									<input id="txtWidth" onkeypress="return IsDigit(event);" type="text" size="3">
+								</TD>
+								<TD>&nbsp;</TD>
+								<TD>
+									<span fckLang="DlgImgHeight">Height</span><br>
+									<input id="txtHeight" onkeypress="return IsDigit(event);" type="text" size="3">
+								</TD>
+							</TR>
+						</table>
+					</TD>
+				</TR>
+				<tr>
+					<td vAlign="top">
+						<table cellSpacing="0" cellPadding="0" width="100%" border="0">
+							<tr>
+								<td valign="top" width="100%">
+									<table cellSpacing="0" cellPadding="0" width="100%">
+										<tr>
+											<td><span fckLang="DlgImgPreview">Preview</span></td>
+										</tr>
+										<tr>
+											<td id="ePreviewCell" valign="top" class="FlashPreviewArea"><iframe src="fck_flash/fck_flash_preview.html" frameborder="0" marginheight="0" marginwidth="0"></iframe></td>
+										</tr>
+									</table>
+								</td>
+							</tr>
+						</table>
+					</td>
+				</tr>
+			</table>
+		</div>
+		<div id="divUpload" style="DISPLAY: none">
+			<form id="frmUpload" method="post" target="UploadWindow" enctype="multipart/form-data" action="" onsubmit="return CheckUpload();">
+				<span fckLang="DlgLnkUpload">Upload</span><br />
+				<input id="txtUploadFile" style="WIDTH: 100%" type="file" size="40" name="NewFile" /><br />
+				<br />
+				<input id="btnUpload" type="submit" value="Send it to the Server" fckLang="DlgLnkBtnUpload" />
+				<iframe name="UploadWindow" style="DISPLAY: none" src="javascript:void(0)"></iframe>
+			</form>
+		</div>
+		<div id="divAdvanced" style="DISPLAY: none">
+			<TABLE cellSpacing="0" cellPadding="0" border="0">
+				<TR>
+					<TD nowrap>
+						<span fckLang="DlgFlashScale">Scale</span><BR>
+						<select id="cmbScale">
+							<option value="" selected></option>
+							<option value="showall" fckLang="DlgFlashScaleAll">Show all</option>
+							<option value="noborder" fckLang="DlgFlashScaleNoBorder">No Border</option>
+							<option value="exactfit" fckLang="DlgFlashScaleFit">Exact Fit</option>
+						</select></TD>
+					<TD>&nbsp;&nbsp;&nbsp; &nbsp;
+					</TD>
+					<td valign="bottom">
+						<table>
+							<tr>
+								<td><input id="chkAutoPlay" type="checkbox" checked></td>
+								<td><label for="chkAutoPlay" nowrap fckLang="DlgFlashChkPlay">Auto Play</label>&nbsp;&nbsp;</td>
+								<td><input id="chkLoop" type="checkbox" checked></td>
+								<td><label for="chkLoop" nowrap fckLang="DlgFlashChkLoop">Loop</label>&nbsp;&nbsp;</td>
+								<td><input id="chkMenu" type="checkbox" checked></td>
+								<td><label for="chkMenu" nowrap fckLang="DlgFlashChkMenu">Enable Flash Menu</label></td>
+							</tr>
+						</table>
+					</td>
+				</TR>
+			</TABLE>
+			<br>
+			&nbsp;
+			<table cellSpacing="0" cellPadding="0" width="100%" align="center" border="0">
+				<tr>
+					<td vAlign="top" width="50%"><span fckLang="DlgGenId">Id</span><br>
+						<input id="txtAttId" style="WIDTH: 100%" type="text">
+					</td>
+					<td>&nbsp;&nbsp;</td>
+					<td vAlign="top" nowrap><span fckLang="DlgGenClass">Stylesheet Classes</span><br>
+						<input id="txtAttClasses" style="WIDTH: 100%" type="text">
+					</td>
+					<td>&nbsp;&nbsp;</td>
+					<td vAlign="top" nowrap width="50%">&nbsp;<span fckLang="DlgGenTitle">Advisory Title</span><br>
+						<input id="txtAttTitle" style="WIDTH: 100%" type="text">
+					</td>
+				</tr>
+			</table>
+			<span fckLang="DlgGenStyle">Style</span><br>
+			<input id="txtAttStyle" style="WIDTH: 100%" type="text">
+		</div>
+	</body>
+</html>
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_flash/fck_flash.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_flash/fck_flash.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_flash/fck_flash.js	(revision 1280)
@@ -0,0 +1,285 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Scripts related to the Flash dialog window (see fck_flash.html).
+ */
+
+var oEditor		= window.parent.InnerDialogLoaded() ;
+var FCK			= oEditor.FCK ;
+var FCKLang		= oEditor.FCKLang ;
+var FCKConfig	= oEditor.FCKConfig ;
+
+//#### Dialog Tabs
+
+// Set the dialog tabs.
+window.parent.AddTab( 'Info', oEditor.FCKLang.DlgInfoTab ) ;
+
+if ( FCKConfig.FlashUpload )
+	window.parent.AddTab( 'Upload', FCKLang.DlgLnkUpload ) ;
+
+if ( !FCKConfig.FlashDlgHideAdvanced )
+	window.parent.AddTab( 'Advanced', oEditor.FCKLang.DlgAdvancedTag ) ;
+
+// Function called when a dialog tag is selected.
+function OnDialogTabChange( tabCode )
+{
+	ShowE('divInfo'		, ( tabCode == 'Info' ) ) ;
+	ShowE('divUpload'	, ( tabCode == 'Upload' ) ) ;
+	ShowE('divAdvanced'	, ( tabCode == 'Advanced' ) ) ;
+}
+
+// Get the selected flash embed (if available).
+var oFakeImage = FCK.Selection.GetSelectedElement() ;
+var oEmbed ;
+
+if ( oFakeImage )
+{
+	if ( oFakeImage.tagName == 'IMG' && oFakeImage.getAttribute('_fckflash') )
+		oEmbed = FCK.GetRealElement( oFakeImage ) ;
+	else
+		oFakeImage = null ;
+}
+
+window.onload = function()
+{
+	// Translate the dialog box texts.
+	oEditor.FCKLanguageManager.TranslatePage(document) ;
+
+	// Load the selected element information (if any).
+	LoadSelection() ;
+
+	// Show/Hide the "Browse Server" button.
+	GetE('tdBrowse').style.display = FCKConfig.FlashBrowser	? '' : 'none' ;
+
+	// Set the actual uploader URL.
+	if ( FCKConfig.FlashUpload )
+		GetE('frmUpload').action = FCKConfig.FlashUploadURL ;
+
+	window.parent.SetAutoSize( true ) ;
+
+	// Activate the "OK" button.
+	window.parent.SetOkButton( true ) ;
+}
+
+function LoadSelection()
+{
+	if ( ! oEmbed ) return ;
+
+	GetE('txtUrl').value    = GetAttribute( oEmbed, 'src', '' ) ;
+	GetE('txtWidth').value  = GetAttribute( oEmbed, 'width', '' ) ;
+	GetE('txtHeight').value = GetAttribute( oEmbed, 'height', '' ) ;
+
+	// Get Advances Attributes
+	GetE('txtAttId').value		= oEmbed.id ;
+	GetE('chkAutoPlay').checked	= GetAttribute( oEmbed, 'play', 'true' ) == 'true' ;
+	GetE('chkLoop').checked		= GetAttribute( oEmbed, 'loop', 'true' ) == 'true' ;
+	GetE('chkMenu').checked		= GetAttribute( oEmbed, 'menu', 'true' ) == 'true' ;
+	GetE('cmbScale').value		= GetAttribute( oEmbed, 'scale', '' ).toLowerCase() ;
+
+	GetE('txtAttTitle').value		= oEmbed.title ;
+
+	if ( oEditor.FCKBrowserInfo.IsIE )
+	{
+		GetE('txtAttClasses').value = oEmbed.getAttribute('className') || '' ;
+		GetE('txtAttStyle').value = oEmbed.style.cssText ;
+	}
+	else
+	{
+		GetE('txtAttClasses').value = oEmbed.getAttribute('class',2) || '' ;
+		GetE('txtAttStyle').value = oEmbed.getAttribute('style',2) || '' ;
+	}
+
+	UpdatePreview() ;
+}
+
+//#### The OK button was hit.
+function Ok()
+{
+	if ( GetE('txtUrl').value.length == 0 )
+	{
+		window.parent.SetSelectedTab( 'Info' ) ;
+		GetE('txtUrl').focus() ;
+
+		alert( oEditor.FCKLang.DlgAlertUrl ) ;
+
+		return false ;
+	}
+
+	oEditor.FCKUndo.SaveUndoStep() ;
+	if ( !oEmbed )
+	{
+		oEmbed		= FCK.EditorDocument.createElement( 'EMBED' ) ;
+		oFakeImage  = null ;
+	}
+	UpdateEmbed( oEmbed ) ;
+
+	if ( !oFakeImage )
+	{
+		oFakeImage	= oEditor.FCKDocumentProcessor_CreateFakeImage( 'FCK__Flash', oEmbed ) ;
+		oFakeImage.setAttribute( '_fckflash', 'true', 0 ) ;
+		oFakeImage	= FCK.InsertElement( oFakeImage ) ;
+	}
+
+	oEditor.FCKFlashProcessor.RefreshView( oFakeImage, oEmbed ) ;
+
+	return true ;
+}
+
+function UpdateEmbed( e )
+{
+	SetAttribute( e, 'type'			, 'application/x-shockwave-flash' ) ;
+	SetAttribute( e, 'pluginspage'	, 'http://www.macromedia.com/go/getflashplayer' ) ;
+
+	SetAttribute( e, 'src', GetE('txtUrl').value ) ;
+	SetAttribute( e, "width" , GetE('txtWidth').value ) ;
+	SetAttribute( e, "height", GetE('txtHeight').value ) ;
+
+	// Advances Attributes
+
+	SetAttribute( e, 'id'	, GetE('txtAttId').value ) ;
+	SetAttribute( e, 'scale', GetE('cmbScale').value ) ;
+
+	SetAttribute( e, 'play', GetE('chkAutoPlay').checked ? 'true' : 'false' ) ;
+	SetAttribute( e, 'loop', GetE('chkLoop').checked ? 'true' : 'false' ) ;
+	SetAttribute( e, 'menu', GetE('chkMenu').checked ? 'true' : 'false' ) ;
+
+	SetAttribute( e, 'title'	, GetE('txtAttTitle').value ) ;
+
+	if ( oEditor.FCKBrowserInfo.IsIE )
+	{
+		SetAttribute( e, 'className', GetE('txtAttClasses').value ) ;
+		e.style.cssText = GetE('txtAttStyle').value ;
+	}
+	else
+	{
+		SetAttribute( e, 'class', GetE('txtAttClasses').value ) ;
+		SetAttribute( e, 'style', GetE('txtAttStyle').value ) ;
+	}
+}
+
+var ePreview ;
+
+function SetPreviewElement( previewEl )
+{
+	ePreview = previewEl ;
+
+	if ( GetE('txtUrl').value.length > 0 )
+		UpdatePreview() ;
+}
+
+function UpdatePreview()
+{
+	if ( !ePreview )
+		return ;
+
+	while ( ePreview.firstChild )
+		ePreview.removeChild( ePreview.firstChild ) ;
+
+	if ( GetE('txtUrl').value.length == 0 )
+		ePreview.innerHTML = '&nbsp;' ;
+	else
+	{
+		var oDoc	= ePreview.ownerDocument || ePreview.document ;
+		var e		= oDoc.createElement( 'EMBED' ) ;
+
+		SetAttribute( e, 'src', GetE('txtUrl').value ) ;
+		SetAttribute( e, 'type', 'application/x-shockwave-flash' ) ;
+		SetAttribute( e, 'width', '100%' ) ;
+		SetAttribute( e, 'height', '100%' ) ;
+
+		ePreview.appendChild( e ) ;
+	}
+}
+
+// <embed id="ePreview" src="fck_flash/claims.swf" width="100%" height="100%" style="visibility:hidden" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer">
+
+function BrowseServer()
+{
+	OpenFileBrowser( FCKConfig.FlashBrowserURL, FCKConfig.FlashBrowserWindowWidth, FCKConfig.FlashBrowserWindowHeight ) ;
+}
+
+function SetUrl( url, width, height )
+{
+	GetE('txtUrl').value = url ;
+
+	if ( width )
+		GetE('txtWidth').value = width ;
+
+	if ( height )
+		GetE('txtHeight').value = height ;
+
+	UpdatePreview() ;
+
+	window.parent.SetSelectedTab( 'Info' ) ;
+}
+
+function OnUploadCompleted( errorNumber, fileUrl, fileName, customMsg )
+{
+	switch ( errorNumber )
+	{
+		case 0 :	// No errors
+			alert( 'Your file has been successfully uploaded' ) ;
+			break ;
+		case 1 :	// Custom error
+			alert( customMsg ) ;
+			return ;
+		case 101 :	// Custom warning
+			alert( customMsg ) ;
+			break ;
+		case 201 :
+			alert( 'A file with the same name is already available. The uploaded file has been renamed to "' + fileName + '"' ) ;
+			break ;
+		case 202 :
+			alert( 'Invalid file type' ) ;
+			return ;
+		case 203 :
+			alert( "Security error. You probably don't have enough permissions to upload. Please check your server." ) ;
+			return ;
+		default :
+			alert( 'Error on file upload. Error number: ' + errorNumber ) ;
+			return ;
+	}
+
+	SetUrl( fileUrl ) ;
+	GetE('frmUpload').reset() ;
+}
+
+var oUploadAllowedExtRegex	= new RegExp( FCKConfig.FlashUploadAllowedExtensions, 'i' ) ;
+var oUploadDeniedExtRegex	= new RegExp( FCKConfig.FlashUploadDeniedExtensions, 'i' ) ;
+
+function CheckUpload()
+{
+	var sFile = GetE('txtUploadFile').value ;
+
+	if ( sFile.length == 0 )
+	{
+		alert( 'Please select a file to upload' ) ;
+		return false ;
+	}
+
+	if ( ( FCKConfig.FlashUploadAllowedExtensions.length > 0 && !oUploadAllowedExtRegex.test( sFile ) ) ||
+		( FCKConfig.FlashUploadDeniedExtensions.length > 0 && oUploadDeniedExtRegex.test( sFile ) ) )
+	{
+		OnUploadCompleted( 202 ) ;
+		return false ;
+	}
+
+	return true ;
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_flash/fck_flash_preview.html
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_flash/fck_flash_preview.html	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_flash/fck_flash_preview.html	(revision 1280)
@@ -0,0 +1,46 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Preview page for the Flash dialog window.
+-->
+<html>
+	<head>
+		<title></title>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+		<meta name="robots" content="noindex, nofollow">
+		<link href="../common/fck_dialog_common.css" rel="stylesheet" type="text/css" />
+		<script language="javascript">
+
+// Sets the Skin CSS
+document.write( '<link href="' + window.parent.FCKConfig.SkinPath + 'fck_dialog.css" type="text/css" rel="stylesheet">' ) ;
+
+if ( window.parent.FCKConfig.BaseHref.length > 0 )
+	document.write( '<base href="' + window.parent.FCKConfig.BaseHref + '">' ) ;
+
+window.onload = function()
+{
+	window.parent.SetPreviewElement( document.body ) ;
+}
+
+		</script>
+	</head>
+	<body style="COLOR: #000000; BACKGROUND-COLOR: #ffffff"></body>
+</html>
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_form.html
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_form.html	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_form.html	(revision 1280)
@@ -0,0 +1,106 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Form dialog window.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+	<title></title>
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+	<meta content="noindex, nofollow" name="robots" />
+	<script src="common/fck_dialog_common.js" type="text/javascript"></script>
+	<script type="text/javascript">
+
+var oEditor = window.parent.InnerDialogLoaded() ;
+
+// Gets the document DOM
+var oDOM = oEditor.FCK.EditorDocument ;
+
+var oActiveEl = oEditor.FCKSelection.MoveToAncestorNode( 'FORM' ) ;
+
+window.onload = function()
+{
+	// First of all, translate the dialog box texts
+	oEditor.FCKLanguageManager.TranslatePage(document) ;
+
+	if ( oActiveEl )
+	{
+		GetE('txtName').value	= oActiveEl.name ;
+		GetE('txtAction').value	= oActiveEl.getAttribute( 'action', 2 ) ;
+		GetE('txtMethod').value	= oActiveEl.method ;
+	}
+	else
+		oActiveEl = null ;
+
+	window.parent.SetOkButton( true ) ;
+}
+
+function Ok()
+{
+	if ( !oActiveEl )
+	{
+		oActiveEl = oEditor.FCK.InsertElement( 'form' ) ;
+
+		if ( oEditor.FCKBrowserInfo.IsGeckoLike )
+			oEditor.FCKTools.AppendBogusBr( oActiveEl ) ;
+	}
+
+	oActiveEl.name = GetE('txtName').value ;
+	SetAttribute( oActiveEl, 'action', GetE('txtAction').value ) ;
+	oActiveEl.method = GetE('txtMethod').value ;
+
+	return true ;
+}
+
+	</script>
+</head>
+<body style="overflow: hidden">
+	<table width="100%" style="height: 100%">
+		<tr>
+			<td align="center">
+				<table cellspacing="0" cellpadding="0" width="80%" border="0">
+					<tr>
+						<td>
+							<span fcklang="DlgFormName">Name</span><br />
+							<input style="width: 100%" type="text" id="txtName" />
+						</td>
+					</tr>
+					<tr>
+						<td>
+							<span fcklang="DlgFormAction">Action</span><br />
+							<input style="width: 100%" type="text" id="txtAction" />
+						</td>
+					</tr>
+					<tr>
+						<td>
+							<span fcklang="DlgFormMethod">Method</span><br />
+							<select id="txtMethod">
+								<option value="get" selected="selected">GET</option>
+								<option value="post">POST</option>
+							</select>
+						</td>
+					</tr>
+				</table>
+			</td>
+		</tr>
+	</table>
+</body>
+</html>
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_hiddenfield.html
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_hiddenfield.html	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_hiddenfield.html	(revision 1280)
@@ -0,0 +1,118 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Hidden Field dialog window.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+	<title>Hidden Field Properties</title>
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+	<meta content="noindex, nofollow" name="robots" />
+	<script src="common/fck_dialog_common.js" type="text/javascript"></script>
+	<script type="text/javascript">
+
+var oEditor = window.parent.InnerDialogLoaded() ;
+var FCK = oEditor.FCK ;
+
+// Gets the document DOM
+var oDOM = FCK.EditorDocument ;
+
+// Get the selected flash embed (if available).
+var oFakeImage = FCK.Selection.GetSelectedElement() ;
+var oActiveEl ;
+
+if ( oFakeImage )
+{
+	if ( oFakeImage.tagName == 'IMG' && oFakeImage.getAttribute('_fckinputhidden') )
+		oActiveEl = FCK.GetRealElement( oFakeImage ) ;
+	else
+		oFakeImage = null ;
+}
+
+window.onload = function()
+{
+	// First of all, translate the dialog box texts
+	oEditor.FCKLanguageManager.TranslatePage(document) ;
+
+	if ( oActiveEl )
+	{
+		GetE('txtName').value		= oActiveEl.name ;
+		GetE('txtValue').value		= oActiveEl.value ;
+	}
+
+	window.parent.SetOkButton( true ) ;
+}
+
+
+function Ok()
+{
+	oEditor.FCKUndo.SaveUndoStep() ;
+	
+	if ( !oActiveEl )
+	{
+		oActiveEl = FCK.EditorDocument.createElement( 'INPUT' ) ;
+		oActiveEl.type = 'hidden' ;
+
+		oFakeImage = null ;
+	}
+
+	oActiveEl.name = GetE('txtName').value ;
+	SetAttribute( oActiveEl, 'value', GetE('txtValue').value ) ;
+
+	if ( !oFakeImage )
+	{
+		oFakeImage	= oEditor.FCKDocumentProcessor_CreateFakeImage( 'FCK__InputHidden', oActiveEl ) ;
+		oFakeImage.setAttribute( '_fckinputhidden', 'true', 0 ) ;
+		oFakeImage	= FCK.InsertElement( oFakeImage ) ;
+	}
+	else
+		oEditor.FCKUndo.SaveUndoStep() ;
+
+	oEditor.FCKFlashProcessor.RefreshView( oFakeImage, oActiveEl ) ;
+
+	return true ;
+}
+
+	</script>
+</head>
+<body style="overflow: hidden" scroll="no">
+	<table height="100%" width="100%">
+		<tr>
+			<td align="center">
+				<table border="0" class="inhoud" cellpadding="0" cellspacing="0" width="80%">
+					<tr>
+						<td>
+							<span fcklang="DlgHiddenName">Name</span><br />
+							<input type="text" size="20" id="txtName" style="width: 100%" />
+						</td>
+					</tr>
+					<tr>
+						<td>
+							<span fcklang="DlgHiddenValue">Value</span><br />
+							<input type="text" size="30" id="txtValue" style="width: 100%" />
+						</td>
+					</tr>
+				</table>
+			</td>
+		</tr>
+	</table>
+</body>
+</html>
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_image.html
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_image.html	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_image.html	(revision 1280)
@@ -0,0 +1,252 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Image Properties dialog window.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+	<title>Image Properties</title>
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+	<meta name="robots" content="noindex, nofollow" />
+	<script src="common/fck_dialog_common.js" type="text/javascript"></script>
+	<script src="fck_image/fck_image.js" type="text/javascript"></script>
+	<link href="common/fck_dialog_common.css" rel="stylesheet" type="text/css" />
+</head>
+<body scroll="no" style="overflow: hidden">
+	<div id="divInfo">
+		<table cellspacing="1" cellpadding="1" border="0" width="100%" height="100%">
+			<tr>
+				<td>
+					<table cellspacing="0" cellpadding="0" width="100%" border="0">
+						<tr>
+							<td width="100%">
+								<span fcklang="DlgImgURL">URL</span>
+							</td>
+							<td id="tdBrowse" style="display: none" nowrap="nowrap" rowspan="2">
+								&nbsp;
+								<input id="btnBrowse" onclick="BrowseServer();" type="button" value="Browse Server"
+									fcklang="DlgBtnBrowseServer" />
+							</td>
+						</tr>
+						<tr>
+							<td valign="top">
+								<input id="txtUrl" style="width: 100%" type="text" onblur="UpdatePreview();" />
+							</td>
+						</tr>
+					</table>
+				</td>
+			</tr>
+			<tr>
+				<td>
+					<span fcklang="DlgImgAlt">Short Description</span><br />
+					<input id="txtAlt" style="width: 100%" type="text" /><br />
+				</td>
+			</tr>
+			<tr height="100%">
+				<td valign="top">
+					<table cellspacing="0" cellpadding="0" width="100%" border="0" height="100%">
+						<tr>
+							<td valign="top">
+								<br />
+								<table cellspacing="0" cellpadding="0" border="0">
+									<tr>
+										<td nowrap="nowrap">
+											<span fcklang="DlgImgWidth">Width</span>&nbsp;</td>
+										<td>
+											<input type="text" size="3" id="txtWidth" onkeyup="OnSizeChanged('Width',this.value);" /></td>
+										<td rowspan="2">
+											<div id="btnLockSizes" class="BtnLocked" onmouseover="this.className = (bLockRatio ? 'BtnLocked' : 'BtnUnlocked' ) + ' BtnOver';"
+												onmouseout="this.className = (bLockRatio ? 'BtnLocked' : 'BtnUnlocked' );" title="Lock Sizes"
+												onclick="SwitchLock(this);">
+											</div>
+										</td>
+										<td rowspan="2">
+											<div id="btnResetSize" class="BtnReset" onmouseover="this.className='BtnReset BtnOver';"
+												onmouseout="this.className='BtnReset';" title="Reset Size" onclick="ResetSizes();">
+											</div>
+										</td>
+									</tr>
+									<tr>
+										<td nowrap="nowrap">
+											<span fcklang="DlgImgHeight">Height</span>&nbsp;</td>
+										<td>
+											<input type="text" size="3" id="txtHeight" onkeyup="OnSizeChanged('Height',this.value);" /></td>
+									</tr>
+								</table>
+								<br />
+								<table cellspacing="0" cellpadding="0" border="0">
+									<tr>
+										<td nowrap="nowrap">
+											<span fcklang="DlgImgBorder">Border</span>&nbsp;</td>
+										<td>
+											<input type="text" size="2" value="" id="txtBorder" onkeyup="UpdatePreview();" /></td>
+									</tr>
+									<tr>
+										<td nowrap="nowrap">
+											<span fcklang="DlgImgHSpace">HSpace</span>&nbsp;</td>
+										<td>
+											<input type="text" size="2" id="txtHSpace" onkeyup="UpdatePreview();" /></td>
+									</tr>
+									<tr>
+										<td nowrap="nowrap">
+											<span fcklang="DlgImgVSpace">VSpace</span>&nbsp;</td>
+										<td>
+											<input type="text" size="2" id="txtVSpace" onkeyup="UpdatePreview();" /></td>
+									</tr>
+									<tr>
+										<td nowrap="nowrap">
+											<span fcklang="DlgImgAlign">Align</span>&nbsp;</td>
+										<td>
+											<select id="cmbAlign" onchange="UpdatePreview();">
+												<option value="" selected="selected"></option>
+												<option fcklang="DlgImgAlignLeft" value="left">Left</option>
+												<option fcklang="DlgImgAlignAbsBottom" value="absBottom">Abs Bottom</option>
+												<option fcklang="DlgImgAlignAbsMiddle" value="absMiddle">Abs Middle</option>
+												<option fcklang="DlgImgAlignBaseline" value="baseline">Baseline</option>
+												<option fcklang="DlgImgAlignBottom" value="bottom">Bottom</option>
+												<option fcklang="DlgImgAlignMiddle" value="middle">Middle</option>
+												<option fcklang="DlgImgAlignRight" value="right">Right</option>
+												<option fcklang="DlgImgAlignTextTop" value="textTop">Text Top</option>
+												<option fcklang="DlgImgAlignTop" value="top">Top</option>
+											</select>
+										</td>
+									</tr>
+								</table>
+							</td>
+							<td>
+								&nbsp;&nbsp;&nbsp;</td>
+							<td width="100%" valign="top">
+								<table cellpadding="0" cellspacing="0" width="100%" style="table-layout: fixed">
+									<tr>
+										<td>
+											<span fcklang="DlgImgPreview">Preview</span></td>
+									</tr>
+									<tr>
+										<td valign="top">
+											<iframe class="ImagePreviewArea" src="fck_image/fck_image_preview.html" frameborder="0"
+												marginheight="0" marginwidth="0"></iframe>
+										</td>
+									</tr>
+								</table>
+							</td>
+						</tr>
+					</table>
+				</td>
+			</tr>
+		</table>
+	</div>
+	<div id="divUpload" style="display: none">
+		<form id="frmUpload" method="post" target="UploadWindow" enctype="multipart/form-data"
+			action="" onsubmit="return CheckUpload();">
+			<span fcklang="DlgLnkUpload">Upload</span><br />
+			<input id="txtUploadFile" style="width: 100%" type="file" size="40" name="NewFile" /><br />
+			<br />
+			<input id="btnUpload" type="submit" value="Send it to the Server" fcklang="DlgLnkBtnUpload" />
+			<iframe name="UploadWindow" style="display: none" src="javascript:void(0)"></iframe>
+		</form>
+	</div>
+	<div id="divLink" style="display: none">
+		<table cellspacing="1" cellpadding="1" border="0" width="100%">
+			<tr>
+				<td>
+					<div>
+						<span fcklang="DlgLnkURL">URL</span><br />
+						<input id="txtLnkUrl" style="width: 100%" type="text" onblur="UpdatePreview();" />
+					</div>
+					<div id="divLnkBrowseServer" align="right">
+						<input type="button" value="Browse Server" fcklang="DlgBtnBrowseServer" onclick="LnkBrowseServer();" />
+					</div>
+					<div>
+						<span fcklang="DlgLnkTarget">Target</span><br />
+						<select id="cmbLnkTarget">
+							<option value="" fcklang="DlgGenNotSet" selected="selected">&lt;not set&gt;</option>
+							<option value="_blank" fcklang="DlgLnkTargetBlank">New Window (_blank)</option>
+							<option value="_top" fcklang="DlgLnkTargetTop">Topmost Window (_top)</option>
+							<option value="_self" fcklang="DlgLnkTargetSelf">Same Window (_self)</option>
+							<option value="_parent" fcklang="DlgLnkTargetParent">Parent Window (_parent)</option>
+						</select>
+					</div>
+				</td>
+			</tr>
+		</table>
+	</div>
+	<div id="divAdvanced" style="display: none">
+		<table cellspacing="0" cellpadding="0" width="100%" align="center" border="0">
+			<tr>
+				<td valign="top" width="50%">
+					<span fcklang="DlgGenId">Id</span><br />
+					<input id="txtAttId" style="width: 100%" type="text" />
+				</td>
+				<td width="1">
+					&nbsp;&nbsp;</td>
+				<td valign="top">
+					<table cellspacing="0" cellpadding="0" width="100%" align="center" border="0">
+						<tr>
+							<td width="60%">
+								<span fcklang="DlgGenLangDir">Language Direction</span><br />
+								<select id="cmbAttLangDir" style="width: 100%">
+									<option value="" fcklang="DlgGenNotSet" selected="selected">&lt;not set&gt;</option>
+									<option value="ltr" fcklang="DlgGenLangDirLtr">Left to Right (LTR)</option>
+									<option value="rtl" fcklang="DlgGenLangDirRtl">Right to Left (RTL)</option>
+								</select>
+							</td>
+							<td width="1%">
+								&nbsp;&nbsp;</td>
+							<td nowrap="nowrap">
+								<span fcklang="DlgGenLangCode">Language Code</span><br />
+								<input id="txtAttLangCode" style="width: 100%" type="text" />&nbsp;
+							</td>
+						</tr>
+					</table>
+				</td>
+			</tr>
+			<tr>
+				<td colspan="3">
+					&nbsp;</td>
+			</tr>
+			<tr>
+				<td colspan="3">
+					<span fcklang="DlgGenLongDescr">Long Description URL</span><br />
+					<input id="txtLongDesc" style="width: 100%" type="text" />
+				</td>
+			</tr>
+			<tr>
+				<td colspan="3">
+					&nbsp;</td>
+			</tr>
+			<tr>
+				<td valign="top">
+					<span fcklang="DlgGenClass">Stylesheet Classes</span><br />
+					<input id="txtAttClasses" style="width: 100%" type="text" />
+				</td>
+				<td>
+				</td>
+				<td valign="top">
+					&nbsp;<span fcklang="DlgGenTitle">Advisory Title</span><br />
+					<input id="txtAttTitle" style="width: 100%" type="text" />
+				</td>
+			</tr>
+		</table>
+		<span fcklang="DlgGenStyle">Style</span><br />
+		<input id="txtAttStyle" style="width: 100%" type="text" />
+	</div>
+</body>
+</html>
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_image/fck_image.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_image/fck_image.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_image/fck_image.js	(revision 1280)
@@ -0,0 +1,492 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Scripts related to the Image dialog window (see fck_image.html).
+ */
+
+var oEditor		= window.parent.InnerDialogLoaded() ;
+var FCK			= oEditor.FCK ;
+var FCKLang		= oEditor.FCKLang ;
+var FCKConfig	= oEditor.FCKConfig ;
+var FCKDebug	= oEditor.FCKDebug ;
+
+var bImageButton = ( document.location.search.length > 0 && document.location.search.substr(1) == 'ImageButton' ) ;
+
+//#### Dialog Tabs
+
+// Set the dialog tabs.
+window.parent.AddTab( 'Info', FCKLang.DlgImgInfoTab ) ;
+
+if ( !bImageButton && !FCKConfig.ImageDlgHideLink )
+	window.parent.AddTab( 'Link', FCKLang.DlgImgLinkTab ) ;
+
+if ( FCKConfig.ImageUpload )
+	window.parent.AddTab( 'Upload', FCKLang.DlgLnkUpload ) ;
+
+if ( !FCKConfig.ImageDlgHideAdvanced )
+	window.parent.AddTab( 'Advanced', FCKLang.DlgAdvancedTag ) ;
+
+// Function called when a dialog tag is selected.
+function OnDialogTabChange( tabCode )
+{
+	ShowE('divInfo'		, ( tabCode == 'Info' ) ) ;
+	ShowE('divLink'		, ( tabCode == 'Link' ) ) ;
+	ShowE('divUpload'	, ( tabCode == 'Upload' ) ) ;
+	ShowE('divAdvanced'	, ( tabCode == 'Advanced' ) ) ;
+}
+
+// Get the selected image (if available).
+var oImage = FCK.Selection.GetSelectedElement() ;
+
+if ( oImage && oImage.tagName != 'IMG' && !( oImage.tagName == 'INPUT' && oImage.type == 'image' ) )
+	oImage = null ;
+
+// Get the active link.
+var oLink = FCK.Selection.MoveToAncestorNode( 'A' ) ;
+
+var oImageOriginal ;
+
+function UpdateOriginal( resetSize )
+{
+	if ( !eImgPreview )
+		return ;
+
+	if ( GetE('txtUrl').value.length == 0 )
+	{
+		oImageOriginal = null ;
+		return ;
+	}
+
+	oImageOriginal = document.createElement( 'IMG' ) ;	// new Image() ;
+
+	if ( resetSize )
+	{
+		oImageOriginal.onload = function()
+		{
+			this.onload = null ;
+			ResetSizes() ;
+		}
+	}
+
+	oImageOriginal.src = eImgPreview.src ;
+}
+
+var bPreviewInitialized ;
+
+window.onload = function()
+{
+	// Translate the dialog box texts.
+	oEditor.FCKLanguageManager.TranslatePage(document) ;
+
+	GetE('btnLockSizes').title = FCKLang.DlgImgLockRatio ;
+	GetE('btnResetSize').title = FCKLang.DlgBtnResetSize ;
+
+	// Load the selected element information (if any).
+	LoadSelection() ;
+
+	// Show/Hide the "Browse Server" button.
+	GetE('tdBrowse').style.display				= FCKConfig.ImageBrowser	? '' : 'none' ;
+	GetE('divLnkBrowseServer').style.display	= FCKConfig.LinkBrowser		? '' : 'none' ;
+
+	UpdateOriginal() ;
+
+	// Set the actual uploader URL.
+	if ( FCKConfig.ImageUpload )
+		GetE('frmUpload').action = FCKConfig.ImageUploadURL ;
+
+	window.parent.SetAutoSize( true ) ;
+
+	// Activate the "OK" button.
+	window.parent.SetOkButton( true ) ;
+}
+
+function LoadSelection()
+{
+	if ( ! oImage ) return ;
+
+	var sUrl = oImage.getAttribute( '_fcksavedurl' ) ;
+	if ( sUrl == null )
+		sUrl = GetAttribute( oImage, 'src', '' ) ;
+
+	GetE('txtUrl').value    = sUrl ;
+	GetE('txtAlt').value    = GetAttribute( oImage, 'alt', '' ) ;
+	GetE('txtVSpace').value	= GetAttribute( oImage, 'vspace', '' ) ;
+	GetE('txtHSpace').value	= GetAttribute( oImage, 'hspace', '' ) ;
+	GetE('txtBorder').value	= GetAttribute( oImage, 'border', '' ) ;
+	GetE('cmbAlign').value	= GetAttribute( oImage, 'align', '' ) ;
+
+	var iWidth, iHeight ;
+
+	var regexSize = /^\s*(\d+)px\s*$/i ;
+
+	if ( oImage.style.width )
+	{
+		var aMatchW  = oImage.style.width.match( regexSize ) ;
+		if ( aMatchW )
+		{
+			iWidth = aMatchW[1] ;
+			oImage.style.width = '' ;
+			SetAttribute( oImage, 'width' , iWidth ) ;
+		}
+	}
+
+	if ( oImage.style.height )
+	{
+		var aMatchH  = oImage.style.height.match( regexSize ) ;
+		if ( aMatchH )
+		{
+			iHeight = aMatchH[1] ;
+			oImage.style.height = '' ;
+			SetAttribute( oImage, 'height', iHeight ) ;
+		}
+	}
+
+	GetE('txtWidth').value	= iWidth ? iWidth : GetAttribute( oImage, "width", '' ) ;
+	GetE('txtHeight').value	= iHeight ? iHeight : GetAttribute( oImage, "height", '' ) ;
+
+	// Get Advances Attributes
+	GetE('txtAttId').value			= oImage.id ;
+	GetE('cmbAttLangDir').value		= oImage.dir ;
+	GetE('txtAttLangCode').value	= oImage.lang ;
+	GetE('txtAttTitle').value		= oImage.title ;
+	GetE('txtLongDesc').value		= oImage.longDesc ;
+
+	if ( oEditor.FCKBrowserInfo.IsIE )
+	{
+		GetE('txtAttClasses').value = oImage.className || '' ;
+		GetE('txtAttStyle').value = oImage.style.cssText ;
+	}
+	else
+	{
+		GetE('txtAttClasses').value = oImage.getAttribute('class',2) || '' ;
+		GetE('txtAttStyle').value = oImage.getAttribute('style',2) ;
+	}
+
+	if ( oLink )
+	{
+		var sLinkUrl = oLink.getAttribute( '_fcksavedurl' ) ;
+		if ( sLinkUrl == null )
+			sLinkUrl = oLink.getAttribute('href',2) ;
+
+		GetE('txtLnkUrl').value		= sLinkUrl ;
+		GetE('cmbLnkTarget').value	= oLink.target ;
+	}
+
+	UpdatePreview() ;
+}
+
+//#### The OK button was hit.
+function Ok()
+{
+	if ( GetE('txtUrl').value.length == 0 )
+	{
+		window.parent.SetSelectedTab( 'Info' ) ;
+		GetE('txtUrl').focus() ;
+
+		alert( FCKLang.DlgImgAlertUrl ) ;
+
+		return false ;
+	}
+
+	var bHasImage = ( oImage != null ) ;
+
+	if ( bHasImage && bImageButton && oImage.tagName == 'IMG' )
+	{
+		if ( confirm( 'Do you want to transform the selected image on a image button?' ) )
+			oImage = null ;
+	}
+	else if ( bHasImage && !bImageButton && oImage.tagName == 'INPUT' )
+	{
+		if ( confirm( 'Do you want to transform the selected image button on a simple image?' ) )
+			oImage = null ;
+	}
+
+	oEditor.FCKUndo.SaveUndoStep() ;
+	if ( !bHasImage )
+	{
+		if ( bImageButton )
+		{
+			oImage = FCK.EditorDocument.createElement( 'input' ) ;
+			oImage.type = 'image' ;
+			oImage = FCK.InsertElement( oImage ) ;
+		}
+		else
+			oImage = FCK.InsertElement( 'img' ) ;
+	}
+
+	UpdateImage( oImage ) ;
+
+	var sLnkUrl = GetE('txtLnkUrl').value.Trim() ;
+
+	if ( sLnkUrl.length == 0 )
+	{
+		if ( oLink )
+			FCK.ExecuteNamedCommand( 'Unlink' ) ;
+	}
+	else
+	{
+		if ( oLink )	// Modifying an existent link.
+			oLink.href = sLnkUrl ;
+		else			// Creating a new link.
+		{
+			if ( !bHasImage )
+				oEditor.FCKSelection.SelectNode( oImage ) ;
+
+			oLink = oEditor.FCK.CreateLink( sLnkUrl )[0] ;
+
+			if ( !bHasImage )
+			{
+				oEditor.FCKSelection.SelectNode( oLink ) ;
+				oEditor.FCKSelection.Collapse( false ) ;
+			}
+		}
+
+		SetAttribute( oLink, '_fcksavedurl', sLnkUrl ) ;
+		SetAttribute( oLink, 'target', GetE('cmbLnkTarget').value ) ;
+	}
+
+	return true ;
+}
+
+function UpdateImage( e, skipId )
+{
+	e.src = GetE('txtUrl').value ;
+	SetAttribute( e, "_fcksavedurl", GetE('txtUrl').value ) ;
+	SetAttribute( e, "alt"   , GetE('txtAlt').value ) ;
+	SetAttribute( e, "width" , GetE('txtWidth').value ) ;
+	SetAttribute( e, "height", GetE('txtHeight').value ) ;
+	SetAttribute( e, "vspace", GetE('txtVSpace').value ) ;
+	SetAttribute( e, "hspace", GetE('txtHSpace').value ) ;
+	SetAttribute( e, "border", GetE('txtBorder').value ) ;
+	SetAttribute( e, "align" , GetE('cmbAlign').value ) ;
+
+	// Advances Attributes
+
+	if ( ! skipId )
+		SetAttribute( e, 'id', GetE('txtAttId').value ) ;
+
+	SetAttribute( e, 'dir'		, GetE('cmbAttLangDir').value ) ;
+	SetAttribute( e, 'lang'		, GetE('txtAttLangCode').value ) ;
+	SetAttribute( e, 'title'	, GetE('txtAttTitle').value ) ;
+	SetAttribute( e, 'longDesc'	, GetE('txtLongDesc').value ) ;
+
+	if ( oEditor.FCKBrowserInfo.IsIE )
+	{
+		e.className = GetE('txtAttClasses').value ;
+		e.style.cssText = GetE('txtAttStyle').value ;
+	}
+	else
+	{
+		SetAttribute( e, 'class'	, GetE('txtAttClasses').value ) ;
+		SetAttribute( e, 'style', GetE('txtAttStyle').value ) ;
+	}
+}
+
+var eImgPreview ;
+var eImgPreviewLink ;
+
+function SetPreviewElements( imageElement, linkElement )
+{
+	eImgPreview = imageElement ;
+	eImgPreviewLink = linkElement ;
+
+	UpdatePreview() ;
+	UpdateOriginal() ;
+
+	bPreviewInitialized = true ;
+}
+
+function UpdatePreview()
+{
+	if ( !eImgPreview || !eImgPreviewLink )
+		return ;
+
+	if ( GetE('txtUrl').value.length == 0 )
+		eImgPreviewLink.style.display = 'none' ;
+	else
+	{
+		UpdateImage( eImgPreview, true ) ;
+
+		if ( GetE('txtLnkUrl').value.Trim().length > 0 )
+			eImgPreviewLink.href = 'javascript:void(null);' ;
+		else
+			SetAttribute( eImgPreviewLink, 'href', '' ) ;
+
+		eImgPreviewLink.style.display = '' ;
+	}
+}
+
+var bLockRatio = true ;
+
+function SwitchLock( lockButton )
+{
+	bLockRatio = !bLockRatio ;
+	lockButton.className = bLockRatio ? 'BtnLocked' : 'BtnUnlocked' ;
+	lockButton.title = bLockRatio ? 'Lock sizes' : 'Unlock sizes' ;
+
+	if ( bLockRatio )
+	{
+		if ( GetE('txtWidth').value.length > 0 )
+			OnSizeChanged( 'Width', GetE('txtWidth').value ) ;
+		else
+			OnSizeChanged( 'Height', GetE('txtHeight').value ) ;
+	}
+}
+
+// Fired when the width or height input texts change
+function OnSizeChanged( dimension, value )
+{
+	// Verifies if the aspect ration has to be maintained
+	if ( oImageOriginal && bLockRatio )
+	{
+		var e = dimension == 'Width' ? GetE('txtHeight') : GetE('txtWidth') ;
+
+		if ( value.length == 0 || isNaN( value ) )
+		{
+			e.value = '' ;
+			return ;
+		}
+
+		if ( dimension == 'Width' )
+			value = value == 0 ? 0 : Math.round( oImageOriginal.height * ( value  / oImageOriginal.width ) ) ;
+		else
+			value = value == 0 ? 0 : Math.round( oImageOriginal.width  * ( value / oImageOriginal.height ) ) ;
+
+		if ( !isNaN( value ) )
+			e.value = value ;
+	}
+
+	UpdatePreview() ;
+}
+
+// Fired when the Reset Size button is clicked
+function ResetSizes()
+{
+	if ( ! oImageOriginal ) return ;
+
+	GetE('txtWidth').value  = oImageOriginal.width ;
+	GetE('txtHeight').value = oImageOriginal.height ;
+
+	UpdatePreview() ;
+}
+
+function BrowseServer()
+{
+	OpenServerBrowser(
+		'Image',
+		FCKConfig.ImageBrowserURL,
+		FCKConfig.ImageBrowserWindowWidth,
+		FCKConfig.ImageBrowserWindowHeight ) ;
+}
+
+function LnkBrowseServer()
+{
+	OpenServerBrowser(
+		'Link',
+		FCKConfig.LinkBrowserURL,
+		FCKConfig.LinkBrowserWindowWidth,
+		FCKConfig.LinkBrowserWindowHeight ) ;
+}
+
+function OpenServerBrowser( type, url, width, height )
+{
+	sActualBrowser = type ;
+	OpenFileBrowser( url, width, height ) ;
+}
+
+var sActualBrowser ;
+
+function SetUrl( url, width, height, alt )
+{
+	if ( sActualBrowser == 'Link' )
+	{
+		GetE('txtLnkUrl').value = url ;
+		UpdatePreview() ;
+	}
+	else
+	{
+		GetE('txtUrl').value = url ;
+		GetE('txtWidth').value = width ? width : '' ;
+		GetE('txtHeight').value = height ? height : '' ;
+
+		if ( alt )
+			GetE('txtAlt').value = alt;
+
+		UpdatePreview() ;
+		UpdateOriginal( true ) ;
+	}
+
+	window.parent.SetSelectedTab( 'Info' ) ;
+}
+
+function OnUploadCompleted( errorNumber, fileUrl, fileName, customMsg )
+{
+	switch ( errorNumber )
+	{
+		case 0 :	// No errors
+			alert( 'Your file has been successfully uploaded' ) ;
+			break ;
+		case 1 :	// Custom error
+			alert( customMsg ) ;
+			return ;
+		case 101 :	// Custom warning
+			alert( customMsg ) ;
+			break ;
+		case 201 :
+			alert( 'A file with the same name is already available. The uploaded file has been renamed to "' + fileName + '"' ) ;
+			break ;
+		case 202 :
+			alert( 'Invalid file type' ) ;
+			return ;
+		case 203 :
+			alert( "Security error. You probably don't have enough permissions to upload. Please check your server." ) ;
+			return ;
+		default :
+			alert( 'Error on file upload. Error number: ' + errorNumber ) ;
+			return ;
+	}
+
+	sActualBrowser = '' ;
+	SetUrl( fileUrl ) ;
+	GetE('frmUpload').reset() ;
+}
+
+var oUploadAllowedExtRegex	= new RegExp( FCKConfig.ImageUploadAllowedExtensions, 'i' ) ;
+var oUploadDeniedExtRegex	= new RegExp( FCKConfig.ImageUploadDeniedExtensions, 'i' ) ;
+
+function CheckUpload()
+{
+	var sFile = GetE('txtUploadFile').value ;
+
+	if ( sFile.length == 0 )
+	{
+		alert( 'Please select a file to upload' ) ;
+		return false ;
+	}
+
+	if ( ( FCKConfig.ImageUploadAllowedExtensions.length > 0 && !oUploadAllowedExtRegex.test( sFile ) ) ||
+		( FCKConfig.ImageUploadDeniedExtensions.length > 0 && oUploadDeniedExtRegex.test( sFile ) ) )
+	{
+		OnUploadCompleted( 202 ) ;
+		return false ;
+	}
+
+	return true ;
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_image/fck_image_preview.html
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_image/fck_image_preview.html	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_image/fck_image_preview.html	(revision 1280)
@@ -0,0 +1,66 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Preview page for the Image dialog window.
+ *
+ * Curiosity: http://en.wikipedia.org/wiki/Lorem_ipsum
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+	<title></title>
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+	<meta name="robots" content="noindex, nofollow" />
+	<link href="../common/fck_dialog_common.css" rel="stylesheet" type="text/css" />
+	<script type="text/javascript">
+
+// Sets the Skin CSS
+document.write( '<link href="' + window.parent.FCKConfig.SkinPath + 'fck_dialog.css" type="text/css" rel="stylesheet">' ) ;
+
+if ( window.parent.FCKConfig.BaseHref.length > 0 )
+	document.write( '<base href="' + window.parent.FCKConfig.BaseHref + '">' ) ;
+
+window.onload = function()
+{
+	window.parent.SetPreviewElements(
+		document.getElementById( 'imgPreview' ),
+		document.getElementById( 'lnkPreview' ) ) ;
+}
+
+	</script>
+</head>
+<body style="color: #000000; background-color: #ffffff">
+	<a id="lnkPreview" onclick="return false;" style="cursor: default">
+		<img id="imgPreview" onload="window.parent.UpdateOriginal();" style="display: none" /></a>Lorem
+	ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas feugiat consequat diam.
+	Maecenas metus. Vivamus diam purus, cursus a, commodo non, facilisis vitae, nulla.
+	Aenean dictum lacinia tortor. Nunc iaculis, nibh non iaculis aliquam, orci felis
+	euismod neque, sed ornare massa mauris sed velit. Nulla pretium mi et risus. Fusce
+	mi pede, tempor id, cursus ac, ullamcorper nec, enim. Sed tortor. Curabitur molestie.
+	Duis velit augue, condimentum at, ultrices a, luctus ut, orci. Donec pellentesque
+	egestas eros. Integer cursus, augue in cursus faucibus, eros pede bibendum sem,
+	in tempus tellus justo quis ligula. Etiam eget tortor. Vestibulum rutrum, est ut
+	placerat elementum, lectus nisl aliquam velit, tempor aliquam eros nunc nonummy
+	metus. In eros metus, gravida a, gravida sed, lobortis id, turpis. Ut ultrices,
+	ipsum at venenatis fringilla, sem nulla lacinia tellus, eget aliquet turpis mauris
+	non enim. Nam turpis. Suspendisse lacinia. Curabitur ac tortor ut ipsum egestas
+	elementum. Nunc imperdiet gravida mauris.
+</body>
+</html>
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_link.html
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_link.html	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_link.html	(revision 1280)
@@ -0,0 +1,293 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Link dialog window.
+-->
+<html>
+	<head>
+		<title>Link Properties</title>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+		<meta name="robots" content="noindex, nofollow" />
+		<script src="common/fck_dialog_common.js" type="text/javascript"></script>
+		<script src="fck_link/fck_link.js" type="text/javascript"></script>
+	</head>
+	<body scroll="no" style="OVERFLOW: hidden">
+		<div id="divInfo" style="DISPLAY: none">
+			<span fckLang="DlgLnkType">Link Type</span><br />
+			<select id="cmbLinkType" onchange="SetLinkType(this.value);">
+				<option value="url" fckLang="DlgLnkTypeURL" selected="selected">URL</option>
+				<option value="anchor" fckLang="DlgLnkTypeAnchor">Anchor in this page</option>
+				<option value="email" fckLang="DlgLnkTypeEMail">E-Mail</option>
+			</select>
+			<br />
+			<br />
+			<div id="divLinkTypeUrl">
+				<table cellspacing="0" cellpadding="0" width="100%" border="0" dir="ltr">
+					<tr>
+						<td nowrap="nowrap">
+							<span fckLang="DlgLnkProto">Protocol</span><br />
+							<select id="cmbLinkProtocol">
+								<option value="http://" selected="selected">http://</option>
+								<option value="https://">https://</option>
+								<option value="ftp://">ftp://</option>
+								<option value="news://">news://</option>
+								<option value="" fckLang="DlgLnkProtoOther">&lt;other&gt;</option>
+							</select>
+						</td>
+						<td nowrap="nowrap">&nbsp;</td>
+						<td nowrap="nowrap" width="100%">
+							<span fckLang="DlgLnkURL">URL</span><br />
+							<input id="txtUrl" style="WIDTH: 100%" type="text" onkeyup="OnUrlChange();" onchange="OnUrlChange();" />
+						</td>
+					</tr>
+				</table>
+				<br />
+				<div id="divBrowseServer">
+				<input type="button" value="Browse Server" fckLang="DlgBtnBrowseServer" onclick="BrowseServer();" />
+				</div>
+			</div>
+			<div id="divLinkTypeAnchor" style="DISPLAY: none" align="center">
+				<div id="divSelAnchor" style="DISPLAY: none">
+					<table cellspacing="0" cellpadding="0" border="0" width="70%">
+						<tr>
+							<td colspan="3">
+								<span fckLang="DlgLnkAnchorSel">Select an Anchor</span>
+							</td>
+						</tr>
+						<tr>
+							<td width="50%">
+								<span fckLang="DlgLnkAnchorByName">By Anchor Name</span><br />
+								<select id="cmbAnchorName" onchange="GetE('cmbAnchorId').value='';" style="WIDTH: 100%">
+									<option value="" selected="selected"></option>
+								</select>
+							</td>
+							<td>&nbsp;&nbsp;&nbsp;</td>
+							<td width="50%">
+								<span fckLang="DlgLnkAnchorById">By Element Id</span><br />
+								<select id="cmbAnchorId" onchange="GetE('cmbAnchorName').value='';" style="WIDTH: 100%">
+									<option value="" selected="selected"></option>
+								</select>
+							</td>
+						</tr>
+					</table>
+				</div>
+				<div id="divNoAnchor" style="DISPLAY: none">
+					<span fckLang="DlgLnkNoAnchors">&lt;No anchors available in the document&gt;</span>
+				</div>
+			</div>
+			<div id="divLinkTypeEMail" style="DISPLAY: none">
+				<span fckLang="DlgLnkEMail">E-Mail Address</span><br />
+				<input id="txtEMailAddress" style="WIDTH: 100%" type="text" /><br />
+				<span fckLang="DlgLnkEMailSubject">Message Subject</span><br />
+				<input id="txtEMailSubject" style="WIDTH: 100%" type="text" /><br />
+				<span fckLang="DlgLnkEMailBody">Message Body</span><br />
+				<textarea id="txtEMailBody" style="WIDTH: 100%" rows="3" cols="20"></textarea>
+			</div>
+		</div>
+		<div id="divUpload" style="DISPLAY: none">
+			<form id="frmUpload" method="post" target="UploadWindow" enctype="multipart/form-data" action="" onsubmit="return CheckUpload();">
+				<span fckLang="DlgLnkUpload">Upload</span><br />
+				<input id="txtUploadFile" style="WIDTH: 100%" type="file" size="40" name="NewFile" /><br />
+				<br />
+				<input id="btnUpload" type="submit" value="Send it to the Server" fckLang="DlgLnkBtnUpload" />
+				<iframe name="UploadWindow" style="DISPLAY: none" src="javascript:void(0)"></iframe>
+			</form>
+		</div>
+		<div id="divTarget" style="DISPLAY: none">
+			<table cellspacing="0" cellpadding="0" width="100%" border="0">
+				<tr>
+					<td nowrap="nowrap">
+						<span fckLang="DlgLnkTarget">Target</span><br />
+						<select id="cmbTarget" onchange="SetTarget(this.value);">
+							<option value="" fckLang="DlgGenNotSet" selected="selected">&lt;not set&gt;</option>
+							<option value="frame" fckLang="DlgLnkTargetFrame">&lt;frame&gt;</option>
+							<option value="popup" fckLang="DlgLnkTargetPopup">&lt;popup window&gt;</option>
+							<option value="_blank" fckLang="DlgLnkTargetBlank">New Window (_blank)</option>
+							<option value="_top" fckLang="DlgLnkTargetTop">Topmost Window (_top)</option>
+							<option value="_self" fckLang="DlgLnkTargetSelf">Same Window (_self)</option>
+							<option value="_parent" fckLang="DlgLnkTargetParent">Parent Window (_parent)</option>
+						</select>
+					</td>
+					<td>&nbsp;</td>
+					<td id="tdTargetFrame" nowrap="nowrap" width="100%">
+						<span fckLang="DlgLnkTargetFrameName">Target Frame Name</span><br />
+						<input id="txtTargetFrame" style="WIDTH: 100%" type="text" onkeyup="OnTargetNameChange();"
+							onchange="OnTargetNameChange();" />
+					</td>
+					<td id="tdPopupName" style="DISPLAY: none" nowrap="nowrap" width="100%">
+						<span fckLang="DlgLnkPopWinName">Popup Window Name</span><br />
+						<input id="txtPopupName" style="WIDTH: 100%" type="text" />
+					</td>
+				</tr>
+			</table>
+			<br />
+			<table id="tablePopupFeatures" style="DISPLAY: none" cellspacing="0" cellpadding="0" align="center"
+				border="0">
+				<tr>
+					<td>
+						<span fckLang="DlgLnkPopWinFeat">Popup Window Features</span><br />
+						<table cellspacing="0" cellpadding="0" border="0">
+							<tr>
+								<td valign="top" nowrap="nowrap" width="50%">
+									<input id="chkPopupResizable" name="chkFeature" value="resizable" type="checkbox" /><label for="chkPopupResizable" fckLang="DlgLnkPopResize">Resizable</label><br />
+									<input id="chkPopupLocationBar" name="chkFeature" value="location" type="checkbox" /><label for="chkPopupLocationBar" fckLang="DlgLnkPopLocation">Location
+										Bar</label><br />
+									<input id="chkPopupManuBar" name="chkFeature" value="menubar" type="checkbox" /><label for="chkPopupManuBar" fckLang="DlgLnkPopMenu">Menu
+										Bar</label><br />
+									<input id="chkPopupScrollBars" name="chkFeature" value="scrollbars" type="checkbox" /><label for="chkPopupScrollBars" fckLang="DlgLnkPopScroll">Scroll
+										Bars</label>
+								</td>
+								<td></td>
+								<td valign="top" nowrap="nowrap" width="50%">
+									<input id="chkPopupStatusBar" name="chkFeature" value="status" type="checkbox" /><label for="chkPopupStatusBar" fckLang="DlgLnkPopStatus">Status
+										Bar</label><br />
+									<input id="chkPopupToolbar" name="chkFeature" value="toolbar" type="checkbox" /><label for="chkPopupToolbar" fckLang="DlgLnkPopToolbar">Toolbar</label><br />
+									<input id="chkPopupFullScreen" name="chkFeature" value="fullscreen" type="checkbox" /><label for="chkPopupFullScreen" fckLang="DlgLnkPopFullScrn">Full
+										Screen (IE)</label><br />
+									<input id="chkPopupDependent" name="chkFeature" value="dependent" type="checkbox" /><label for="chkPopupDependent" fckLang="DlgLnkPopDependent">Dependent
+										(Netscape)</label>
+								</td>
+							</tr>
+							<tr>
+								<td valign="top" nowrap="nowrap" width="50%">&nbsp;</td>
+								<td></td>
+								<td valign="top" nowrap="nowrap" width="50%"></td>
+							</tr>
+							<tr>
+								<td valign="top">
+									<table cellspacing="0" cellpadding="0" border="0">
+										<tr>
+											<td nowrap="nowrap"><span fckLang="DlgLnkPopWidth">Width</span></td>
+											<td>&nbsp;<input id="txtPopupWidth" type="text" maxlength="4" size="4" /></td>
+										</tr>
+										<tr>
+											<td nowrap="nowrap"><span fckLang="DlgLnkPopHeight">Height</span></td>
+											<td>&nbsp;<input id="txtPopupHeight" type="text" maxlength="4" size="4" /></td>
+										</tr>
+									</table>
+								</td>
+								<td>&nbsp;&nbsp;</td>
+								<td valign="top">
+									<table cellspacing="0" cellpadding="0" border="0">
+										<tr>
+											<td nowrap="nowrap"><span fckLang="DlgLnkPopLeft">Left Position</span></td>
+											<td>&nbsp;<input id="txtPopupLeft" type="text" maxlength="4" size="4" /></td>
+										</tr>
+										<tr>
+											<td nowrap="nowrap"><span fckLang="DlgLnkPopTop">Top Position</span></td>
+											<td>&nbsp;<input id="txtPopupTop" type="text" maxlength="4" size="4" /></td>
+										</tr>
+									</table>
+								</td>
+							</tr>
+						</table>
+					</td>
+				</tr>
+			</table>
+		</div>
+		<div id="divAttribs" style="DISPLAY: none">
+			<table cellspacing="0" cellpadding="0" width="100%" align="center" border="0">
+				<tr>
+					<td valign="top" width="50%">
+						<span fckLang="DlgGenId">Id</span><br />
+						<input id="txtAttId" style="WIDTH: 100%" type="text" />
+					</td>
+					<td width="1"></td>
+					<td valign="top">
+						<table cellspacing="0" cellpadding="0" width="100%" align="center" border="0">
+							<tr>
+								<td width="60%">
+									<span fckLang="DlgGenLangDir">Language Direction</span><br />
+									<select id="cmbAttLangDir" style="WIDTH: 100%">
+										<option value="" fckLang="DlgGenNotSet" selected>&lt;not set&gt;</option>
+										<option value="ltr" fckLang="DlgGenLangDirLtr">Left to Right (LTR)</option>
+										<option value="rtl" fckLang="DlgGenLangDirRtl">Right to Left (RTL)</option>
+									</select>
+								</td>
+								<td width="1%">&nbsp;&nbsp;&nbsp;</td>
+								<td nowrap="nowrap"><span fckLang="DlgGenAccessKey">Access Key</span><br />
+									<input id="txtAttAccessKey" style="WIDTH: 100%" type="text" maxlength="1" size="1" />
+								</td>
+							</tr>
+						</table>
+					</td>
+				</tr>
+				<tr>
+					<td valign="top" width="50%">
+						<span fckLang="DlgGenName">Name</span><br />
+						<input id="txtAttName" style="WIDTH: 100%" type="text" />
+					</td>
+					<td width="1"></td>
+					<td valign="top">
+						<table cellspacing="0" cellpadding="0" width="100%" align="center" border="0">
+							<tr>
+								<td width="60%">
+									<span fckLang="DlgGenLangCode">Language Code</span><br />
+									<input id="txtAttLangCode" style="WIDTH: 100%" type="text" />
+								</td>
+								<td width="1%">&nbsp;&nbsp;&nbsp;</td>
+								<td nowrap="nowrap">
+									<span fckLang="DlgGenTabIndex">Tab Index</span><br />
+									<input id="txtAttTabIndex" style="WIDTH: 100%" type="text" maxlength="5" size="5" />
+								</td>
+							</tr>
+						</table>
+					</td>
+				</tr>
+				<tr>
+					<td valign="top" width="50%">&nbsp;</td>
+					<td width="1"></td>
+					<td valign="top"></td>
+				</tr>
+				<tr>
+					<td valign="top" width="50%">
+						<span fckLang="DlgGenTitle">Advisory Title</span><br />
+						<input id="txtAttTitle" style="WIDTH: 100%" type="text" />
+					</td>
+					<td width="1">&nbsp;&nbsp;&nbsp;</td>
+					<td valign="top">
+						<span fckLang="DlgGenContType">Advisory Content Type</span><br />
+						<input id="txtAttContentType" style="WIDTH: 100%" type="text" />
+					</td>
+				</tr>
+				<tr>
+					<td valign="top">
+						<span fckLang="DlgGenClass">Stylesheet Classes</span><br />
+						<input id="txtAttClasses" style="WIDTH: 100%" type="text" />
+					</td>
+					<td></td>
+					<td valign="top">
+						<span fckLang="DlgGenLinkCharset">Linked Resource Charset</span><br />
+						<input id="txtAttCharSet" style="WIDTH: 100%" type="text" />
+					</td>
+				</tr>
+			</table>
+			<table cellspacing="0" cellpadding="0" width="100%" align="center" border="0">
+				<tr>
+					<td>
+						<span fckLang="DlgGenStyle">Style</span><br />
+						<input id="txtAttStyle" style="WIDTH: 100%" type="text" />
+					</td>
+				</tr>
+			</table>
+		</div>
+	</body>
+</html>
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_link/fck_link.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_link/fck_link.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_link/fck_link.js	(revision 1280)
@@ -0,0 +1,715 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Scripts related to the Link dialog window (see fck_link.html).
+ */
+
+var oEditor		= window.parent.InnerDialogLoaded() ;
+var FCK			= oEditor.FCK ;
+var FCKLang		= oEditor.FCKLang ;
+var FCKConfig	= oEditor.FCKConfig ;
+var FCKRegexLib	= oEditor.FCKRegexLib ;
+var FCKTools	= oEditor.FCKTools ;
+
+//#### Dialog Tabs
+
+// Set the dialog tabs.
+window.parent.AddTab( 'Info', FCKLang.DlgLnkInfoTab ) ;
+
+if ( !FCKConfig.LinkDlgHideTarget )
+	window.parent.AddTab( 'Target', FCKLang.DlgLnkTargetTab, true ) ;
+
+if ( FCKConfig.LinkUpload )
+	window.parent.AddTab( 'Upload', FCKLang.DlgLnkUpload, true ) ;
+
+if ( !FCKConfig.LinkDlgHideAdvanced )
+	window.parent.AddTab( 'Advanced', FCKLang.DlgAdvancedTag ) ;
+
+// Function called when a dialog tag is selected.
+function OnDialogTabChange( tabCode )
+{
+	ShowE('divInfo'		, ( tabCode == 'Info' ) ) ;
+	ShowE('divTarget'	, ( tabCode == 'Target' ) ) ;
+	ShowE('divUpload'	, ( tabCode == 'Upload' ) ) ;
+	ShowE('divAttribs'	, ( tabCode == 'Advanced' ) ) ;
+
+	window.parent.SetAutoSize( true ) ;
+}
+
+//#### Regular Expressions library.
+var oRegex = new Object() ;
+
+oRegex.UriProtocol = /^(((http|https|ftp|news):\/\/)|mailto:)/gi ;
+
+oRegex.UrlOnChangeProtocol = /^(http|https|ftp|news):\/\/(?=.)/gi ;
+
+oRegex.UrlOnChangeTestOther = /^((javascript:)|[#\/\.])/gi ;
+
+oRegex.ReserveTarget = /^_(blank|self|top|parent)$/i ;
+
+oRegex.PopupUri = /^javascript:void\(\s*window.open\(\s*'([^']+)'\s*,\s*(?:'([^']*)'|null)\s*,\s*'([^']*)'\s*\)\s*\)\s*$/ ;
+
+// Accessible popups
+oRegex.OnClickPopup = /^\s*on[cC]lick="\s*window.open\(\s*this\.href\s*,\s*(?:'([^']*)'|null)\s*,\s*'([^']*)'\s*\)\s*;\s*return\s*false;*\s*"$/ ;
+
+oRegex.PopupFeatures = /(?:^|,)([^=]+)=(\d+|yes|no)/gi ;
+
+//#### Parser Functions
+
+var oParser = new Object() ;
+
+oParser.ParseEMailUrl = function( emailUrl )
+{
+	// Initializes the EMailInfo object.
+	var oEMailInfo = new Object() ;
+	oEMailInfo.Address	= '' ;
+	oEMailInfo.Subject	= '' ;
+	oEMailInfo.Body		= '' ;
+
+	var oParts = emailUrl.match( /^([^\?]+)\??(.+)?/ ) ;
+	if ( oParts )
+	{
+		// Set the e-mail address.
+		oEMailInfo.Address = oParts[1] ;
+
+		// Look for the optional e-mail parameters.
+		if ( oParts[2] )
+		{
+			var oMatch = oParts[2].match( /(^|&)subject=([^&]+)/i ) ;
+			if ( oMatch ) oEMailInfo.Subject = decodeURIComponent( oMatch[2] ) ;
+
+			oMatch = oParts[2].match( /(^|&)body=([^&]+)/i ) ;
+			if ( oMatch ) oEMailInfo.Body = decodeURIComponent( oMatch[2] ) ;
+		}
+	}
+
+	return oEMailInfo ;
+}
+
+oParser.CreateEMailUri = function( address, subject, body )
+{
+	var sBaseUri = 'mailto:' + address ;
+
+	var sParams = '' ;
+
+	if ( subject.length > 0 )
+		sParams = '?subject=' + encodeURIComponent( subject ) ;
+
+	if ( body.length > 0 )
+	{
+		sParams += ( sParams.length == 0 ? '?' : '&' ) ;
+		sParams += 'body=' + encodeURIComponent( body ) ;
+	}
+
+	return sBaseUri + sParams ;
+}
+
+//#### Initialization Code
+
+// oLink: The actual selected link in the editor.
+var oLink = FCK.Selection.MoveToAncestorNode( 'A' ) ;
+if ( oLink )
+	FCK.Selection.SelectNode( oLink ) ;
+
+window.onload = function()
+{
+	// Translate the dialog box texts.
+	oEditor.FCKLanguageManager.TranslatePage(document) ;
+
+	// Fill the Anchor Names and Ids combos.
+	LoadAnchorNamesAndIds() ;
+
+	// Load the selected link information (if any).
+	LoadSelection() ;
+
+	// Update the dialog box.
+	SetLinkType( GetE('cmbLinkType').value ) ;
+
+	// Show/Hide the "Browse Server" button.
+	GetE('divBrowseServer').style.display = FCKConfig.LinkBrowser ? '' : 'none' ;
+
+	// Show the initial dialog content.
+	GetE('divInfo').style.display = '' ;
+
+	// Set the actual uploader URL.
+	if ( FCKConfig.LinkUpload )
+		GetE('frmUpload').action = FCKConfig.LinkUploadURL ;
+
+	// Set the default target (from configuration).
+	SetDefaultTarget() ;
+
+	// Activate the "OK" button.
+	window.parent.SetOkButton( true ) ;
+}
+
+var bHasAnchors ;
+
+function LoadAnchorNamesAndIds()
+{
+	// Since version 2.0, the anchors are replaced in the DOM by IMGs so the user see the icon
+	// to edit them. So, we must look for that images now.
+	var aAnchors = new Array() ;
+	var i ;
+	var oImages = oEditor.FCK.EditorDocument.getElementsByTagName( 'IMG' ) ;
+	for( i = 0 ; i < oImages.length ; i++ )
+	{
+		if ( oImages[i].getAttribute('_fckanchor') )
+			aAnchors[ aAnchors.length ] = oEditor.FCK.GetRealElement( oImages[i] ) ;
+	}
+
+	// Add also real anchors
+	var oLinks = oEditor.FCK.EditorDocument.getElementsByTagName( 'A' ) ;
+	for( i = 0 ; i < oLinks.length ; i++ )
+	{
+		if ( oLinks[i].name && ( oLinks[i].name.length > 0 ) )
+			aAnchors[ aAnchors.length ] = oLinks[i] ;
+	}
+
+	var aIds = FCKTools.GetAllChildrenIds( oEditor.FCK.EditorDocument.body ) ;
+
+	bHasAnchors = ( aAnchors.length > 0 || aIds.length > 0 ) ;
+
+	for ( i = 0 ; i < aAnchors.length ; i++ )
+	{
+		var sName = aAnchors[i].name ;
+		if ( sName && sName.length > 0 )
+			FCKTools.AddSelectOption( GetE('cmbAnchorName'), sName, sName ) ;
+	}
+
+	for ( i = 0 ; i < aIds.length ; i++ )
+	{
+		FCKTools.AddSelectOption( GetE('cmbAnchorId'), aIds[i], aIds[i] ) ;
+	}
+
+	ShowE( 'divSelAnchor'	, bHasAnchors ) ;
+	ShowE( 'divNoAnchor'	, !bHasAnchors ) ;
+}
+
+function LoadSelection()
+{
+	if ( !oLink ) return ;
+
+	var sType = 'url' ;
+
+	// Get the actual Link href.
+	var sHRef = oLink.getAttribute( '_fcksavedurl' ) ;
+	if ( sHRef == null )
+		sHRef = oLink.getAttribute( 'href' , 2 ) || '' ;
+
+	// Look for a popup javascript link.
+	var oPopupMatch = oRegex.PopupUri.exec( sHRef ) ;
+	if( oPopupMatch )
+	{
+		GetE('cmbTarget').value = 'popup' ;
+		sHRef = oPopupMatch[1] ;
+		FillPopupFields( oPopupMatch[2], oPopupMatch[3] ) ;
+		SetTarget( 'popup' ) ;
+	}
+
+	// Accessible popups, the popup data is in the onclick attribute
+	if ( !oPopupMatch ) 
+	{
+		var onclick = oLink.getAttribute( 'onclick_fckprotectedatt' ) ;
+		if ( onclick )
+		{
+			// Decode the protected string
+			onclick = decodeURIComponent( onclick ) ;
+			
+			oPopupMatch = oRegex.OnClickPopup.exec( onclick ) ;
+			if( oPopupMatch )
+			{
+				GetE( 'cmbTarget' ).value = 'popup' ;
+				FillPopupFields( oPopupMatch[1], oPopupMatch[2] ) ;
+				SetTarget( 'popup' ) ;
+			}
+		}
+	}
+
+	// Search for the protocol.
+	var sProtocol = oRegex.UriProtocol.exec( sHRef ) ;
+
+	if ( sProtocol )
+	{
+		sProtocol = sProtocol[0].toLowerCase() ;
+		GetE('cmbLinkProtocol').value = sProtocol ;
+
+		// Remove the protocol and get the remaining URL.
+		var sUrl = sHRef.replace( oRegex.UriProtocol, '' ) ;
+
+		if ( sProtocol == 'mailto:' )	// It is an e-mail link.
+		{
+			sType = 'email' ;
+
+			var oEMailInfo = oParser.ParseEMailUrl( sUrl ) ;
+			GetE('txtEMailAddress').value	= oEMailInfo.Address ;
+			GetE('txtEMailSubject').value	= oEMailInfo.Subject ;
+			GetE('txtEMailBody').value		= oEMailInfo.Body ;
+		}
+		else				// It is a normal link.
+		{
+			sType = 'url' ;
+			GetE('txtUrl').value = sUrl ;
+		}
+	}
+	else if ( sHRef.substr(0,1) == '#' && sHRef.length > 1 )	// It is an anchor link.
+	{
+		sType = 'anchor' ;
+		GetE('cmbAnchorName').value = GetE('cmbAnchorId').value = sHRef.substr(1) ;
+	}
+	else					// It is another type of link.
+	{
+		sType = 'url' ;
+
+		GetE('cmbLinkProtocol').value = '' ;
+		GetE('txtUrl').value = sHRef ;
+	}
+
+	if ( !oPopupMatch )
+	{
+		// Get the target.
+		var sTarget = oLink.target ;
+
+		if ( sTarget && sTarget.length > 0 )
+		{
+			if ( oRegex.ReserveTarget.test( sTarget ) )
+			{
+				sTarget = sTarget.toLowerCase() ;
+				GetE('cmbTarget').value = sTarget ;
+			}
+			else
+				GetE('cmbTarget').value = 'frame' ;
+			GetE('txtTargetFrame').value = sTarget ;
+		}
+	}
+
+	// Get Advances Attributes
+	GetE('txtAttId').value			= oLink.id ;
+	GetE('txtAttName').value		= oLink.name ;
+	GetE('cmbAttLangDir').value		= oLink.dir ;
+	GetE('txtAttLangCode').value	= oLink.lang ;
+	GetE('txtAttAccessKey').value	= oLink.accessKey ;
+	GetE('txtAttTabIndex').value	= oLink.tabIndex <= 0 ? '' : oLink.tabIndex ;
+	GetE('txtAttTitle').value		= oLink.title ;
+	GetE('txtAttContentType').value	= oLink.type ;
+	GetE('txtAttCharSet').value		= oLink.charset ;
+
+	var sClass ;
+	if ( oEditor.FCKBrowserInfo.IsIE )
+	{
+		sClass	= oLink.getAttribute('className',2) || '' ;
+		// Clean up temporary classes for internal use:
+		sClass = sClass.replace( FCKRegexLib.FCK_Class, '' ) ;
+
+		GetE('txtAttStyle').value	= oLink.style.cssText ;
+	}
+	else
+	{
+		sClass	= oLink.getAttribute('class',2) || '' ;
+		GetE('txtAttStyle').value	= oLink.getAttribute('style',2) || '' ;
+	}
+	GetE('txtAttClasses').value	= sClass ;
+
+	// Update the Link type combo.
+	GetE('cmbLinkType').value = sType ;
+}
+
+//#### Link type selection.
+function SetLinkType( linkType )
+{
+	ShowE('divLinkTypeUrl'		, (linkType == 'url') ) ;
+	ShowE('divLinkTypeAnchor'	, (linkType == 'anchor') ) ;
+	ShowE('divLinkTypeEMail'	, (linkType == 'email') ) ;
+
+	if ( !FCKConfig.LinkDlgHideTarget )
+		window.parent.SetTabVisibility( 'Target'	, (linkType == 'url') ) ;
+
+	if ( FCKConfig.LinkUpload )
+		window.parent.SetTabVisibility( 'Upload'	, (linkType == 'url') ) ;
+
+	if ( !FCKConfig.LinkDlgHideAdvanced )
+		window.parent.SetTabVisibility( 'Advanced'	, (linkType != 'anchor' || bHasAnchors) ) ;
+
+	if ( linkType == 'email' )
+		window.parent.SetAutoSize( true ) ;
+}
+
+//#### Target type selection.
+function SetTarget( targetType )
+{
+	GetE('tdTargetFrame').style.display	= ( targetType == 'popup' ? 'none' : '' ) ;
+	GetE('tdPopupName').style.display	=
+	GetE('tablePopupFeatures').style.display = ( targetType == 'popup' ? '' : 'none' ) ;
+
+	switch ( targetType )
+	{
+		case "_blank" :
+		case "_self" :
+		case "_parent" :
+		case "_top" :
+			GetE('txtTargetFrame').value = targetType ;
+			break ;
+		case "" :
+			GetE('txtTargetFrame').value = '' ;
+			break ;
+	}
+
+	if ( targetType == 'popup' )
+		window.parent.SetAutoSize( true ) ;
+}
+
+//#### Called while the user types the URL.
+function OnUrlChange()
+{
+	var sUrl = GetE('txtUrl').value ;
+	var sProtocol = oRegex.UrlOnChangeProtocol.exec( sUrl ) ;
+
+	if ( sProtocol )
+	{
+		sUrl = sUrl.substr( sProtocol[0].length ) ;
+		GetE('txtUrl').value = sUrl ;
+		GetE('cmbLinkProtocol').value = sProtocol[0].toLowerCase() ;
+	}
+	else if ( oRegex.UrlOnChangeTestOther.test( sUrl ) )
+	{
+		GetE('cmbLinkProtocol').value = '' ;
+	}
+}
+
+//#### Called while the user types the target name.
+function OnTargetNameChange()
+{
+	var sFrame = GetE('txtTargetFrame').value ;
+
+	if ( sFrame.length == 0 )
+		GetE('cmbTarget').value = '' ;
+	else if ( oRegex.ReserveTarget.test( sFrame ) )
+		GetE('cmbTarget').value = sFrame.toLowerCase() ;
+	else
+		GetE('cmbTarget').value = 'frame' ;
+}
+
+// Accessible popups
+function BuildOnClickPopup()
+{
+	var sWindowName = "'" + GetE('txtPopupName').value.replace(/\W/gi, "") + "'" ;
+
+	var sFeatures = '' ;
+	var aChkFeatures = document.getElementsByName( 'chkFeature' ) ;
+	for ( var i = 0 ; i < aChkFeatures.length ; i++ )
+	{
+		if ( i > 0 ) sFeatures += ',' ;
+		sFeatures += aChkFeatures[i].value + '=' + ( aChkFeatures[i].checked ? 'yes' : 'no' ) ;
+	}
+
+	if ( GetE('txtPopupWidth').value.length > 0 )	sFeatures += ',width=' + GetE('txtPopupWidth').value ;
+	if ( GetE('txtPopupHeight').value.length > 0 )	sFeatures += ',height=' + GetE('txtPopupHeight').value ;
+	if ( GetE('txtPopupLeft').value.length > 0 )	sFeatures += ',left=' + GetE('txtPopupLeft').value ;
+	if ( GetE('txtPopupTop').value.length > 0 )		sFeatures += ',top=' + GetE('txtPopupTop').value ;
+
+	if ( sFeatures != '' )
+		sFeatures = sFeatures + ",status" ;
+
+	return ( "window.open(this.href," + sWindowName + ",'" + sFeatures + "'); return false" ) ;
+}
+
+//#### Fills all Popup related fields.
+function FillPopupFields( windowName, features )
+{
+	if ( windowName )
+		GetE('txtPopupName').value = windowName ;
+
+	var oFeatures = new Object() ;
+	var oFeaturesMatch ;
+	while( ( oFeaturesMatch = oRegex.PopupFeatures.exec( features ) ) != null )
+	{
+		var sValue = oFeaturesMatch[2] ;
+		if ( sValue == ( 'yes' || '1' ) )
+			oFeatures[ oFeaturesMatch[1] ] = true ;
+		else if ( ! isNaN( sValue ) && sValue != 0 )
+			oFeatures[ oFeaturesMatch[1] ] = sValue ;
+	}
+
+	// Update all features check boxes.
+	var aChkFeatures = document.getElementsByName('chkFeature') ;
+	for ( var i = 0 ; i < aChkFeatures.length ; i++ )
+	{
+		if ( oFeatures[ aChkFeatures[i].value ] )
+			aChkFeatures[i].checked = true ;
+	}
+
+	// Update position and size text boxes.
+	if ( oFeatures['width'] )	GetE('txtPopupWidth').value		= oFeatures['width'] ;
+	if ( oFeatures['height'] )	GetE('txtPopupHeight').value	= oFeatures['height'] ;
+	if ( oFeatures['left'] )	GetE('txtPopupLeft').value		= oFeatures['left'] ;
+	if ( oFeatures['top'] )		GetE('txtPopupTop').value		= oFeatures['top'] ;
+}
+
+//#### The OK button was hit.
+function Ok()
+{
+	var sUri, sInnerHtml ;
+	oEditor.FCKUndo.SaveUndoStep() ;
+
+	switch ( GetE('cmbLinkType').value )
+	{
+		case 'url' :
+			sUri = GetE('txtUrl').value ;
+
+			if ( sUri.length == 0 )
+			{
+				alert( FCKLang.DlnLnkMsgNoUrl ) ;
+				return false ;
+			}
+
+			sUri = GetE('cmbLinkProtocol').value + sUri ;
+
+			break ;
+
+		case 'email' :
+			sUri = GetE('txtEMailAddress').value ;
+
+			if ( sUri.length == 0 )
+			{
+				alert( FCKLang.DlnLnkMsgNoEMail ) ;
+				return false ;
+			}
+
+			sUri = oParser.CreateEMailUri(
+				sUri,
+				GetE('txtEMailSubject').value,
+				GetE('txtEMailBody').value ) ;
+			break ;
+
+		case 'anchor' :
+			var sAnchor = GetE('cmbAnchorName').value ;
+			if ( sAnchor.length == 0 ) sAnchor = GetE('cmbAnchorId').value ;
+
+			if ( sAnchor.length == 0 )
+			{
+				alert( FCKLang.DlnLnkMsgNoAnchor ) ;
+				return false ;
+			}
+
+			sUri = '#' + sAnchor ;
+			break ;
+	}
+
+	// If no link is selected, create a new one (it may result in more than one link creation - #220).
+	var aLinks = oLink ? [ oLink ] : oEditor.FCK.CreateLink( sUri, true ) ;
+
+	// If no selection, no links are created, so use the uri as the link text (by dom, 2006-05-26)
+	var aHasSelection = ( aLinks.length > 0 ) ;
+	if ( !aHasSelection )
+	{
+		sInnerHtml = sUri;
+
+		// Built a better text for empty links.
+		switch ( GetE('cmbLinkType').value )
+		{
+			// anchor: use old behavior --> return true
+			case 'anchor':
+				sInnerHtml = sInnerHtml.replace( /^#/, '' ) ;
+				break ;
+
+			// url: try to get path
+			case 'url':
+				var oLinkPathRegEx = new RegExp("//?([^?\"']+)([?].*)?$") ;
+				var asLinkPath = oLinkPathRegEx.exec( sUri ) ;
+				if (asLinkPath != null)
+					sInnerHtml = asLinkPath[1];  // use matched path
+				break ;
+
+			// mailto: try to get email address
+			case 'email':
+				sInnerHtml = GetE('txtEMailAddress').value ;
+				break ;
+		}
+
+		// Create a new (empty) anchor.
+		aLinks = [ oEditor.FCK.InsertElement( 'a' ) ] ;
+	}
+
+	for ( var i = 0 ; i < aLinks.length ; i++ )
+	{
+		oLink = aLinks[i] ;
+
+		if ( aHasSelection )
+			sInnerHtml = oLink.innerHTML ;		// Save the innerHTML (IE changes it if it is like an URL).
+
+		oLink.href = sUri ;
+		SetAttribute( oLink, '_fcksavedurl', sUri ) ;
+
+		var onclick;
+		// Accessible popups
+		if( GetE('cmbTarget').value == 'popup' )
+		{
+			onclick = BuildOnClickPopup() ;
+			// Encode the attribute
+			onclick = encodeURIComponent( " onclick=\"" + onclick + "\"" )  ;
+			SetAttribute( oLink, 'onclick_fckprotectedatt', onclick ) ;
+		}
+		else
+		{
+			// Check if the previous onclick was for a popup:
+			// In that case remove the onclick handler.
+			onclick = oLink.getAttribute( 'onclick_fckprotectedatt' ) ;
+			if ( onclick )
+			{
+				// Decode the protected string
+				onclick = decodeURIComponent( onclick ) ;
+			
+				if( oRegex.OnClickPopup.test( onclick ) )
+					SetAttribute( oLink, 'onclick_fckprotectedatt', '' ) ;
+			}
+		}
+
+		oLink.innerHTML = sInnerHtml ;		// Set (or restore) the innerHTML
+
+		// Target
+		if( GetE('cmbTarget').value != 'popup' )
+			SetAttribute( oLink, 'target', GetE('txtTargetFrame').value ) ;
+		else
+			SetAttribute( oLink, 'target', null ) ;
+
+		// Let's set the "id" only for the first link to avoid duplication.
+		if ( i == 0 )
+			SetAttribute( oLink, 'id', GetE('txtAttId').value ) ;
+
+		// Advances Attributes
+		SetAttribute( oLink, 'name'		, GetE('txtAttName').value ) ;
+		SetAttribute( oLink, 'dir'		, GetE('cmbAttLangDir').value ) ;
+		SetAttribute( oLink, 'lang'		, GetE('txtAttLangCode').value ) ;
+		SetAttribute( oLink, 'accesskey', GetE('txtAttAccessKey').value ) ;
+		SetAttribute( oLink, 'tabindex'	, ( GetE('txtAttTabIndex').value > 0 ? GetE('txtAttTabIndex').value : null ) ) ;
+		SetAttribute( oLink, 'title'	, GetE('txtAttTitle').value ) ;
+		SetAttribute( oLink, 'type'		, GetE('txtAttContentType').value ) ;
+		SetAttribute( oLink, 'charset'	, GetE('txtAttCharSet').value ) ;
+
+		if ( oEditor.FCKBrowserInfo.IsIE )
+		{
+			var sClass = GetE('txtAttClasses').value ;
+			// If it's also an anchor add an internal class
+			if ( GetE('txtAttName').value.length != 0 )
+				sClass += ' FCK__AnchorC' ;
+			SetAttribute( oLink, 'className', sClass ) ;
+
+			oLink.style.cssText = GetE('txtAttStyle').value ;
+		}
+		else
+		{
+			SetAttribute( oLink, 'class', GetE('txtAttClasses').value ) ;
+			SetAttribute( oLink, 'style', GetE('txtAttStyle').value ) ;
+		}
+	}
+
+	// Select the (first) link.
+	oEditor.FCKSelection.SelectNode( aLinks[0] );
+
+	return true ;
+}
+
+function BrowseServer()
+{
+	OpenFileBrowser( FCKConfig.LinkBrowserURL, FCKConfig.LinkBrowserWindowWidth, FCKConfig.LinkBrowserWindowHeight ) ;
+}
+
+function SetUrl( url )
+{
+	document.getElementById('txtUrl').value = url ;
+	OnUrlChange() ;
+	window.parent.SetSelectedTab( 'Info' ) ;
+}
+
+function OnUploadCompleted( errorNumber, fileUrl, fileName, customMsg )
+{
+	switch ( errorNumber )
+	{
+		case 0 :	// No errors
+			alert( 'Your file has been successfully uploaded' ) ;
+			break ;
+		case 1 :	// Custom error
+			alert( customMsg ) ;
+			return ;
+		case 101 :	// Custom warning
+			alert( customMsg ) ;
+			break ;
+		case 201 :
+			alert( 'A file with the same name is already available. The uploaded file has been renamed to "' + fileName + '"' ) ;
+			break ;
+		case 202 :
+			alert( 'Invalid file type' ) ;
+			return ;
+		case 203 :
+			alert( "Security error. You probably don't have enough permissions to upload. Please check your server." ) ;
+			return ;
+		default :
+			alert( 'Error on file upload. Error number: ' + errorNumber ) ;
+			return ;
+	}
+
+	SetUrl( fileUrl ) ;
+	GetE('frmUpload').reset() ;
+}
+
+var oUploadAllowedExtRegex	= new RegExp( FCKConfig.LinkUploadAllowedExtensions, 'i' ) ;
+var oUploadDeniedExtRegex	= new RegExp( FCKConfig.LinkUploadDeniedExtensions, 'i' ) ;
+
+function CheckUpload()
+{
+	var sFile = GetE('txtUploadFile').value ;
+
+	if ( sFile.length == 0 )
+	{
+		alert( 'Please select a file to upload' ) ;
+		return false ;
+	}
+
+	if ( ( FCKConfig.LinkUploadAllowedExtensions.length > 0 && !oUploadAllowedExtRegex.test( sFile ) ) ||
+		( FCKConfig.LinkUploadDeniedExtensions.length > 0 && oUploadDeniedExtRegex.test( sFile ) ) )
+	{
+		OnUploadCompleted( 202 ) ;
+		return false ;
+	}
+
+	return true ;
+}
+
+function SetDefaultTarget()
+{
+	var target = FCKConfig.DefaultLinkTarget || '' ;
+	
+	if ( oLink || target.length == 0 )
+		return ;
+
+	switch ( target )
+	{
+		case '_blank' :
+		case '_self' :
+		case '_parent' :
+		case '_top' :
+			GetE('cmbTarget').value = target ;
+			break ;
+		default :
+			GetE('cmbTarget').value = 'frame' ;
+			break ;
+	}
+	
+	GetE('txtTargetFrame').value = target ;
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_listprop.html
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_listprop.html	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_listprop.html	(revision 1280)
@@ -0,0 +1,116 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Bulleted List dialog window.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+	<title></title>
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+	<meta content="noindex, nofollow" name="robots" />
+	<script src="common/fck_dialog_common.js" type="text/javascript"></script>
+	<script type="text/javascript">
+
+var oEditor = window.parent.InnerDialogLoaded() ;
+
+// Gets the document DOM
+var oDOM = oEditor.FCK.EditorDocument ;
+var sListType = ( location.search == '?OL' ? 'OL' : 'UL' ) ;
+
+var oActiveEl = oEditor.FCKSelection.MoveToAncestorNode( sListType ) ;
+var oActiveSel ;
+
+window.onload = function()
+{
+	// First of all, translate the dialog box texts
+	oEditor.FCKLanguageManager.TranslatePage(document) ;
+
+	if ( sListType == 'UL' )
+		oActiveSel = GetE('selBulleted') ;
+	else
+	{
+		if ( oActiveEl )
+		{
+			oActiveSel = GetE('selNumbered') ;
+			GetE('eStart').style.display = '' ;
+			GetE('txtStartPosition').value	= GetAttribute( oActiveEl, 'start' ) ;
+		}
+	}
+
+	oActiveSel.style.display = '' ;
+
+	if ( oActiveEl )
+	{
+		if ( oActiveEl.getAttribute('type') )
+			oActiveSel.value = oActiveEl.getAttribute('type') ;
+	}
+
+	window.parent.SetOkButton( true ) ;
+}
+
+function Ok()
+{
+	if ( oActiveEl ){
+		SetAttribute( oActiveEl, 'type'	, oActiveSel.value ) ;
+		if(oActiveEl.tagName == 'OL')
+			SetAttribute( oActiveEl, 'start', GetE('txtStartPosition').value ) ;
+	}
+
+	return true ;
+}
+
+	</script>
+</head>
+<body style="overflow: hidden">
+	<table width="100%" style="height: 100%">
+		<tr>
+			<td style="text-align:center">
+				<table cellspacing="0" cellpadding="0" border="0" style="margin-left: auto; margin-right: auto;">
+					<tr>
+						<td id="eStart" style="display: none; padding-right: 5px; padding-left: 5px">
+							<span fcklang="DlgLstStart">Start</span><br />
+							<input type="text" id="txtStartPosition" size="5" />
+						</td>
+						<td style="padding-right: 5px; padding-left: 5px">
+							<span fcklang="DlgLstType">List Type</span><br />
+							<select id="selBulleted" style="display: none">
+								<option value="" selected="selected"></option>
+								<option value="circle" fcklang="DlgLstTypeCircle">Circle</option>
+								<option value="disc" fcklang="DlgLstTypeDisc">Disc</option>
+								<option value="square" fcklang="DlgLstTypeSquare">Square</option>
+							</select>
+							<select id="selNumbered" style="display: none">
+								<option value="" selected="selected"></option>
+								<option value="1" fcklang="DlgLstTypeNumbers">Numbers (1, 2, 3)</option>
+								<option value="a" fcklang="DlgLstTypeLCase">Lowercase Letters (a, b, c)</option>
+								<option value="A" fcklang="DlgLstTypeUCase">Uppercase Letters (A, B, C)</option>
+								<option value="i" fcklang="DlgLstTypeSRoman">Small Roman Numerals (i, ii, iii)</option>
+								<option value="I" fcklang="DlgLstTypeLRoman">Large Roman Numerals (I, II, III)</option>
+							</select>
+							&nbsp;
+						</td>
+					</tr>
+				</table>
+			</td>
+		</tr>
+	</table>
+</body>
+</html>
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_paste.html
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_paste.html	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_paste.html	(revision 1280)
@@ -0,0 +1,340 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This dialog is shown when, for some reason (usually security settings),
+ * the user is not able to paste data from the clipboard to the editor using
+ * the toolbar buttons or the context menu.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+	<title></title>
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+	<meta name="robots" content="noindex, nofollow" />
+
+	<script type="text/javascript">
+var oEditor = window.parent.InnerDialogLoaded() ;
+var FCK = oEditor.FCK;
+var FCKTools	= oEditor.FCKTools ;
+var FCKConfig	= oEditor.FCKConfig ;
+
+window.onload = function ()
+{
+	// First of all, translate the dialog box texts
+	oEditor.FCKLanguageManager.TranslatePage(document) ;
+
+	var sPastingType = window.parent.dialogArguments.CustomValue ;
+
+	if ( sPastingType == 'Word' || sPastingType == 'Security' )
+	{
+		if ( sPastingType == 'Security' )
+			document.getElementById( 'xSecurityMsg' ).style.display = '' ;
+
+		var oFrame = document.getElementById('frmData') ;
+		oFrame.style.display = '' ;
+
+		// Avoid errors if the pasted content has any script that fails: #389
+		var oDoc = oFrame.contentWindow.document ;
+		oDoc.open() ;
+		oDoc.write('<html><head><script>window.onerror = function() { return true ; };<\/script><\/head><body><\/body><\/html>') ;
+		oDoc.close() ;
+		
+		if ( oFrame.contentDocument )
+			oFrame.contentDocument.designMode = 'on' ;
+		else
+			oFrame.contentWindow.document.body.contentEditable = true ;
+
+		// Set the focus on the pasting area
+		oFrame.contentWindow.focus();
+	}
+	else
+	{
+		document.getElementById('txtData').style.display = '' ;
+	}
+
+	if ( sPastingType != 'Word' )
+		document.getElementById('oWordCommands').style.display = 'none' ;
+
+	window.parent.SetOkButton( true ) ;
+	window.parent.SetAutoSize( true ) ;
+}
+
+function Ok()
+{
+	// Before doing anything, save undo snapshot.
+	oEditor.FCKUndo.SaveUndoStep() ;
+
+	var sHtml ;
+
+	var sPastingType = window.parent.dialogArguments.CustomValue ;
+
+	if ( sPastingType == 'Word' || sPastingType == 'Security' )
+	{
+		var oFrame = document.getElementById('frmData') ;
+		var oBody ;
+
+		if ( oFrame.contentDocument )
+			oBody = oFrame.contentDocument.body ;
+		else
+			oBody = oFrame.contentWindow.document.body ;
+
+		if ( sPastingType == 'Word' )
+		{
+			// If a plugin creates a FCK.CustomCleanWord function it will be called instead of the default one
+			if ( typeof( FCK.CustomCleanWord ) == 'function' )
+				sHtml = FCK.CustomCleanWord( oBody, document.getElementById('chkRemoveFont').checked, document.getElementById('chkRemoveStyles').checked ) ;
+			else
+				sHtml = CleanWord( oBody, document.getElementById('chkRemoveFont').checked, document.getElementById('chkRemoveStyles').checked ) ;
+		}
+		else
+			sHtml = oBody.innerHTML ;
+
+		// Fix relative anchor URLs (IE automatically adds the current page URL).
+		var re = new RegExp( window.location + "#", "g" ) ;
+		sHtml = sHtml.replace( re, '#') ;
+	}
+	else
+	{
+		sHtml = oEditor.FCKTools.HTMLEncode( document.getElementById('txtData').value )  ;
+		sHtml = FCKTools.ProcessLineBreaks( oEditor, FCKConfig, sHtml ) ;
+
+		// FCK.InsertHtml() does not work for us, since document fragments cannot contain node fragments. :(
+		// Use the marker method instead. It's primitive, but it works.
+		var range = new oEditor.FCKDomRange( oEditor.FCK.EditorWindow ) ;
+		var oDoc = oEditor.FCK.EditorDocument ;
+		range.MoveToSelection() ;
+		range.DeleteContents() ;
+		var marker = [] ;
+		for ( var i = 0 ; i < 5 ; i++ )
+			marker.push( parseInt(Math.random() * 100000, 10 ) ) ;
+		marker = marker.join( "" ) ;
+		range.InsertNode ( oDoc.createTextNode( marker ) ) ;
+		var bookmark = range.CreateBookmark() ;
+
+		// Now we've got a marker indicating the paste position in the editor document.
+		// Find its position in the HTML code.
+		var htmlString = oDoc.body.innerHTML ;
+		var index = htmlString.indexOf( marker ) ;
+
+		// Split it the HTML code up, add the code we generated, and put them back together.
+		var htmlList = [] ;
+		htmlList.push( htmlString.substr( 0, index ) ) ;
+		htmlList.push( sHtml ) ;
+		htmlList.push( htmlString.substr( index + marker.length ) ) ;
+		htmlString = htmlList.join( "" ) ;
+
+		if ( oEditor.FCKBrowserInfo.IsIE )
+			oEditor.FCK.SetInnerHtml( htmlString ) ;
+		else
+			oDoc.body.innerHTML = htmlString ;
+
+		range.MoveToBookmark( bookmark ) ;
+		range.Collapse( false ) ;
+		range.Select() ;
+		range.Release() ;
+		return true ;
+	}
+
+	oEditor.FCK.InsertHtml( sHtml ) ;
+
+	return true ;
+}
+
+function CleanUpBox()
+{
+	var oFrame = document.getElementById('frmData') ;
+
+	if ( oFrame.contentDocument )
+		oFrame.contentDocument.body.innerHTML = '' ;
+	else
+		oFrame.contentWindow.document.body.innerHTML = '' ;
+}
+
+
+// This function will be called from the PasteFromWord dialog (fck_paste.html)
+// Input: oNode a DOM node that contains the raw paste from the clipboard
+// bIgnoreFont, bRemoveStyles booleans according to the values set in the dialog
+// Output: the cleaned string
+function CleanWord( oNode, bIgnoreFont, bRemoveStyles )
+{
+	var html = oNode.innerHTML ;
+
+	html = html.replace(/<o:p>\s*<\/o:p>/g, '') ;
+	html = html.replace(/<o:p>.*?<\/o:p>/g, '&nbsp;') ;
+
+	// Remove mso-xxx styles.
+	html = html.replace( /\s*mso-[^:]+:[^;"]+;?/gi, '' ) ;
+
+	// Remove margin styles.
+	html = html.replace( /\s*MARGIN: 0cm 0cm 0pt\s*;/gi, '' ) ;
+	html = html.replace( /\s*MARGIN: 0cm 0cm 0pt\s*"/gi, "\"" ) ;
+
+	html = html.replace( /\s*TEXT-INDENT: 0cm\s*;/gi, '' ) ;
+	html = html.replace( /\s*TEXT-INDENT: 0cm\s*"/gi, "\"" ) ;
+
+	html = html.replace( /\s*TEXT-ALIGN: [^\s;]+;?"/gi, "\"" ) ;
+
+	html = html.replace( /\s*PAGE-BREAK-BEFORE: [^\s;]+;?"/gi, "\"" ) ;
+
+	html = html.replace( /\s*FONT-VARIANT: [^\s;]+;?"/gi, "\"" ) ;
+
+	html = html.replace( /\s*tab-stops:[^;"]*;?/gi, '' ) ;
+	html = html.replace( /\s*tab-stops:[^"]*/gi, '' ) ;
+
+	// Remove FONT face attributes.
+	if ( bIgnoreFont )
+	{
+		html = html.replace( /\s*face="[^"]*"/gi, '' ) ;
+		html = html.replace( /\s*face=[^ >]*/gi, '' ) ;
+
+		html = html.replace( /\s*FONT-FAMILY:[^;"]*;?/gi, '' ) ;
+	}
+
+	// Remove Class attributes
+	html = html.replace(/<(\w[^>]*) class=([^ |>]*)([^>]*)/gi, "<$1$3") ;
+
+	// Remove styles.
+	if ( bRemoveStyles )
+		html = html.replace( /<(\w[^>]*) style="([^\"]*)"([^>]*)/gi, "<$1$3" ) ;
+
+	// Remove empty styles.
+	html =  html.replace( /\s*style="\s*"/gi, '' ) ;
+
+	html = html.replace( /<SPAN\s*[^>]*>\s*&nbsp;\s*<\/SPAN>/gi, '&nbsp;' ) ;
+
+	html = html.replace( /<SPAN\s*[^>]*><\/SPAN>/gi, '' ) ;
+
+	// Remove Lang attributes
+	html = html.replace(/<(\w[^>]*) lang=([^ |>]*)([^>]*)/gi, "<$1$3") ;
+
+	html = html.replace( /<SPAN\s*>(.*?)<\/SPAN>/gi, '$1' ) ;
+
+	html = html.replace( /<FONT\s*>(.*?)<\/FONT>/gi, '$1' ) ;
+
+	// Remove XML elements and declarations
+	html = html.replace(/<\\?\?xml[^>]*>/gi, '' ) ;
+
+	// Remove Tags with XML namespace declarations: <o:p><\/o:p>
+	html = html.replace(/<\/?\w+:[^>]*>/gi, '' ) ;
+
+	// Remove comments [SF BUG-1481861].
+	html = html.replace(/<\!--.*?-->/g, '' ) ;
+
+	html = html.replace( /<(U|I|STRIKE)>&nbsp;<\/\1>/g, '&nbsp;' ) ;
+
+	html = html.replace( /<H\d>\s*<\/H\d>/gi, '' ) ;
+
+	// Remove "display:none" tags.
+	html = html.replace( /<(\w+)[^>]*\sstyle="[^"]*DISPLAY\s?:\s?none(.*?)<\/\1>/ig, '' ) ;
+
+	// Remove language tags
+	html = html.replace( /<(\w[^>]*) language=([^ |>]*)([^>]*)/gi, "<$1$3") ;
+
+	// Remove onmouseover and onmouseout events (from MS Word comments effect)
+	html = html.replace( /<(\w[^>]*) onmouseover="([^\"]*)"([^>]*)/gi, "<$1$3") ;
+	html = html.replace( /<(\w[^>]*) onmouseout="([^\"]*)"([^>]*)/gi, "<$1$3") ;
+
+	if ( FCKConfig.CleanWordKeepsStructure )
+	{
+		// The original <Hn> tag send from Word is something like this: <Hn style="margin-top:0px;margin-bottom:0px">
+		html = html.replace( /<H(\d)([^>]*)>/gi, '<h$1>' ) ;
+
+		// Word likes to insert extra <font> tags, when using MSIE. (Wierd).
+		html = html.replace( /<(H\d)><FONT[^>]*>(.*?)<\/FONT><\/\1>/gi, '<$1>$2<\/$1>' );
+		html = html.replace( /<(H\d)><EM>(.*?)<\/EM><\/\1>/gi, '<$1>$2<\/$1>' );
+	}
+	else
+	{
+		html = html.replace( /<H1([^>]*)>/gi, '<div$1><b><font size="6">' ) ;
+		html = html.replace( /<H2([^>]*)>/gi, '<div$1><b><font size="5">' ) ;
+		html = html.replace( /<H3([^>]*)>/gi, '<div$1><b><font size="4">' ) ;
+		html = html.replace( /<H4([^>]*)>/gi, '<div$1><b><font size="3">' ) ;
+		html = html.replace( /<H5([^>]*)>/gi, '<div$1><b><font size="2">' ) ;
+		html = html.replace( /<H6([^>]*)>/gi, '<div$1><b><font size="1">' ) ;
+
+		html = html.replace( /<\/H\d>/gi, '<\/font><\/b><\/div>' ) ;
+
+		// Transform <P> to <DIV>
+		var re = new RegExp( '(<P)([^>]*>.*?)(<\/P>)', 'gi' ) ;	// Different because of a IE 5.0 error
+		html = html.replace( re, '<div$2<\/div>' ) ;
+
+		// Remove empty tags (three times, just to be sure).
+		// This also removes any empty anchor
+		html = html.replace( /<([^\s>]+)(\s[^>]*)?>\s*<\/\1>/g, '' ) ;
+		html = html.replace( /<([^\s>]+)(\s[^>]*)?>\s*<\/\1>/g, '' ) ;
+		html = html.replace( /<([^\s>]+)(\s[^>]*)?>\s*<\/\1>/g, '' ) ;
+	}
+
+	return html ;
+}
+
+	</script>
+
+</head>
+<body style="overflow: hidden">
+	<table cellspacing="0" cellpadding="0" width="100%" border="0" style="height: 98%">
+		<tr>
+			<td>
+				<div id="xSecurityMsg" style="display: none">
+					<span fcklang="DlgPasteSec">Because of your browser security settings,
+						the editor is not able to access your clipboard data directly. You are required
+						to paste it again in this window.</span><br />
+					&nbsp;
+				</div>
+				<div>
+					<span fcklang="DlgPasteMsg2">Please paste inside the following box using the keyboard
+						(<strong>Ctrl+V</strong>) and hit <strong>OK</strong>.</span><br />
+					&nbsp;
+				</div>
+			</td>
+		</tr>
+		<tr>
+			<td valign="top" height="100%" style="border-right: #000000 1px solid; border-top: #000000 1px solid;
+				border-left: #000000 1px solid; border-bottom: #000000 1px solid">
+				<textarea id="txtData" cols="80" rows="5" style="border: #000000 1px; display: none;
+					width: 99%; height: 98%"></textarea>
+				<iframe id="frmData" src="javascript:void(0)" height="98%" width="99%" frameborder="0"
+					style="border-right: #000000 1px; border-top: #000000 1px; display: none; border-left: #000000 1px;
+					border-bottom: #000000 1px; background-color: #ffffff"></iframe>
+			</td>
+		</tr>
+		<tr id="oWordCommands">
+			<td>
+				<table border="0" cellpadding="0" cellspacing="0" width="100%">
+					<tr>
+						<td nowrap="nowrap">
+							<input id="chkRemoveFont" type="checkbox" checked="checked" />
+							<label for="chkRemoveFont" fcklang="DlgPasteIgnoreFont">
+								Ignore Font Face definitions</label>
+							<br />
+							<input id="chkRemoveStyles" type="checkbox" />
+							<label for="chkRemoveStyles" fcklang="DlgPasteRemoveStyles">
+								Remove Styles definitions</label>
+						</td>
+						<td align="right" valign="top">
+							<input type="button" fcklang="DlgPasteCleanBox" value="Clean Up Box" onclick="CleanUpBox()" />
+						</td>
+					</tr>
+				</table>
+			</td>
+		</tr>
+	</table>
+</body>
+</html>
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_radiobutton.html
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_radiobutton.html	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_radiobutton.html	(revision 1280)
@@ -0,0 +1,109 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Radio Button dialog window.
+-->
+<html>
+	<head>
+		<title>Radio Button Properties</title>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+		<meta content="noindex, nofollow" name="robots">
+		<script src="common/fck_dialog_common.js" type="text/javascript"></script>
+		<script type="text/javascript">
+
+var oEditor = window.parent.InnerDialogLoaded() ;
+
+// Gets the document DOM
+var oDOM = oEditor.FCK.EditorDocument ;
+
+var oActiveEl = oEditor.FCKSelection.GetSelectedElement() ;
+
+window.onload = function()
+{
+	// First of all, translate the dialog box texts
+	oEditor.FCKLanguageManager.TranslatePage(document) ;
+
+	if ( oActiveEl && oActiveEl.tagName.toUpperCase() == 'INPUT' && oActiveEl.type == 'radio' )
+	{
+		GetE('txtName').value		= oActiveEl.name ;
+		GetE('txtValue').value		= oEditor.FCKBrowserInfo.IsIE ? oActiveEl.value : GetAttribute( oActiveEl, 'value' ) ;
+		GetE('txtSelected').checked	= oActiveEl.checked ;
+	}
+	else
+		oActiveEl = null ;
+
+	window.parent.SetOkButton( true ) ;
+}
+
+function Ok()
+{
+	oEditor.FCKUndo.SaveUndoStep() ;
+	
+	if ( !oActiveEl )
+	{
+		oActiveEl = oEditor.FCK.EditorDocument.createElement( 'INPUT' ) ;
+		oActiveEl.type = 'radio' ;
+		oActiveEl = oEditor.FCK.InsertElement( oActiveEl ) ;
+	}
+
+	if ( GetE('txtName').value.length > 0 )
+		oActiveEl.name = GetE('txtName').value ;
+
+	if ( oEditor.FCKBrowserInfo.IsIE )
+		oActiveEl.value = GetE('txtValue').value ;
+	else
+		SetAttribute( oActiveEl, 'value', GetE('txtValue').value ) ;
+
+	var bIsChecked = GetE('txtSelected').checked ;
+	SetAttribute( oActiveEl, 'checked', bIsChecked ? 'checked' : null ) ;	// For Firefox
+	oActiveEl.checked = bIsChecked ;
+
+	return true ;
+}
+
+		</script>
+	</head>
+	<body style="OVERFLOW: hidden" scroll="no">
+		<table height="100%" width="100%">
+			<tr>
+				<td align="center">
+					<table border="0" cellpadding="0" cellspacing="0" width="80%">
+						<tr>
+							<td>
+								<span fckLang="DlgCheckboxName">Name</span><br>
+								<input type="text" size="20" id="txtName" style="WIDTH: 100%">
+							</td>
+						</tr>
+						<tr>
+							<td>
+								<span fckLang="DlgCheckboxValue">Value</span><br>
+								<input type="text" size="20" id="txtValue" style="WIDTH: 100%">
+							</td>
+						</tr>
+						<tr>
+							<td><input type="checkbox" id="txtSelected"><label for="txtSelected" fckLang="DlgCheckboxSelected">Checked</label></td>
+						</tr>
+					</table>
+				</td>
+			</tr>
+		</table>
+	</body>
+</html>
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_replace.html
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_replace.html	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_replace.html	(revision 1280)
@@ -0,0 +1,452 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * "Find" and "Replace" dialog box window.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+	<title></title>
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+	<meta content="noindex, nofollow" name="robots" />
+	<script src="common/fck_dialog_common.js" type="text/javascript"></script>
+	<script type="text/javascript">
+
+var oEditor = window.parent.InnerDialogLoaded() ;
+var FCKLang = oEditor.FCKLang ;
+
+window.parent.AddTab( 'Find', FCKLang.DlgFindTitle ) ;
+window.parent.AddTab( 'Replace', FCKLang.DlgReplaceTitle ) ;
+var idMap = {} ;
+
+function OnDialogTabChange( tabCode )
+{
+	ShowE( 'divFind', ( tabCode == 'Find' ) ) ;
+	ShowE( 'divReplace', ( tabCode == 'Replace' ) ) ;
+	idMap['FindText'] = 'txtFind' + tabCode ;
+	idMap['CheckCase'] = 'chkCase' + tabCode ;
+	idMap['CheckWord'] = 'chkWord' + tabCode ;
+}
+
+function OnLoad()
+{
+	// First of all, translate the dialog box texts.
+	oEditor.FCKLanguageManager.TranslatePage( document ) ;
+
+	// Place the cursor at the start of document.
+	// This will be the starting point of our search.
+	var range = new oEditor.FCKDomRange( oEditor.FCK.EditorWindow ) ;
+	range.SetStart( oEditor.FCK.EditorDocument.body, 1 ) ;
+	range.SetEnd( oEditor.FCK.EditorDocument.body, 1 ) ;
+	range.Collapse( true ) ;
+	range.Select() ;
+
+	// Show the appropriate tab at startup.
+	if ( window.parent.name.search( 'Replace' ) == -1 )
+		window.parent.SetSelectedTab( 'Find' ) ;
+	else
+		window.parent.SetSelectedTab( 'Replace' ) ;
+}
+
+function btnStat(frm)
+{
+	document.getElementById('btnReplace').disabled =
+		document.getElementById('btnReplaceAll').disabled =
+			document.getElementById('btnFind').disabled =
+				( document.getElementById(idMap["FindText"]).value.length == 0 ) ;
+}
+
+function GetSelection()
+{
+	var range = new oEditor.FCKDomRange( oEditor.FCK.EditorWindow ) ;
+	range.MoveToSelection() ;
+	return range.CreateBookmark2() ;
+}
+
+function GetSearchString()
+{
+	return document.getElementById(idMap['FindText']).value ;
+}
+
+function GetReplaceString()
+{
+	return document.getElementById("txtReplace").value ;
+}
+
+function GetCheckCase()
+{
+	return !! ( document.getElementById(idMap['CheckCase']).checked ) ;
+}
+
+function GetMatchWord()
+{
+	return !! ( document.getElementById(idMap['CheckWord']).checked ) ;
+}
+
+// Get the data pointed to by a bookmark.
+function GetData( bookmark )
+{
+	var currentNode = oEditor.FCK.EditorDocument.documentElement;
+	for( var i = 0 ; i < bookmark.length ; i++ )
+	{
+		if ( currentNode.childNodes.length > bookmark[i] )
+			currentNode = currentNode.childNodes.item( bookmark[i] ) ;
+		else if ( currentNode.nodeType == 3 )	// text node
+		{
+			var c = currentNode.nodeValue.charAt( bookmark[i] ) ;
+			if ( i == bookmark.length - 1 )
+				return c != "" ? c : null ;
+			else
+				return null ;
+		}
+		else
+			return null;
+	}
+	return currentNode ;
+}
+
+// With this function, we can treat the bookmark as an iterator for DFS.
+function NextPosition( bookmark )
+{
+	// See if there's anything further down the tree.
+	var next = bookmark.concat( [0] ) ;
+
+	if ( GetData( next ) != null )
+		return next ;
+
+	// Nothing down there? See if there's anything next to me.
+	var next = bookmark.slice( 0, bookmark.length - 1 ).concat( [ bookmark[ bookmark.length - 1 ] + 1 ] ) ;
+	if ( GetData( next ) != null )
+		return next ;
+
+	// Nothing even next to me? See if there's anything next to my ancestors.
+	for ( var i = bookmark.length - 1 ; i > 0 ; i-- )
+	{
+		var next = bookmark.slice( 0, i - 1 ).concat( [ bookmark[ i - 1 ] + 1 ] ) ;
+		if ( GetData( next ) != null )
+			return next ;
+	}
+
+	// There's absolutely nothing left to walk, return null.
+	return null ;
+}
+
+// Is this character a unicode whitespace?
+// Reference: http://unicode.org/Public/UNIDATA/PropList.txt
+function CheckIsWhitespace( c )
+{
+	var code = c.charCodeAt( 0 );
+	if ( code >= 9 && code <= 0xd )
+		return true;
+	if ( code >= 0x2000 && code <= 0x200a )
+		return true;
+	switch ( code )
+	{
+		case 0x20:
+		case 0x85:
+		case 0xa0:
+		case 0x1680:
+		case 0x180e:
+		case 0x2028:
+		case 0x2029:
+		case 0x202f:
+		case 0x205f:
+		case 0x3000:
+			return true;
+		default:
+			return false;
+	}
+}
+
+// Knuth-Morris-Pratt Algorithm for stream input
+KMP_NOMATCH = 0 ;
+KMP_ADVANCED = 1 ;
+KMP_MATCHED = 2 ;
+function KmpMatch( pattern, ignoreCase )
+{
+	var overlap = [ -1 ] ;
+	for ( var i = 0 ; i < pattern.length ; i++ )
+	{
+		overlap.push( overlap[i] + 1 ) ;
+		while ( overlap[ i + 1 ] > 0 && pattern.charAt( i ) != pattern.charAt( overlap[ i + 1 ] - 1 ) )
+			overlap[ i + 1 ] = overlap[ overlap[ i + 1 ] - 1 ] + 1 ;
+	}
+	this._Overlap = overlap ;
+	this._State = 0 ;
+	this._IgnoreCase = ( ignoreCase === true ) ;
+	if ( ignoreCase )
+		this.Pattern = pattern.toLowerCase();
+	else
+		this.Pattern = pattern ;
+}
+KmpMatch.prototype = {
+	"FeedCharacter" : function( c )
+	{
+		if ( this._IgnoreCase )
+			c = c.toLowerCase();
+
+		while ( true )
+		{
+			if ( c == this.Pattern.charAt( this._State ) )
+			{
+				this._State++ ;
+				if ( this._State == this.Pattern.length )
+				{
+					// found a match, start over, don't care about partial matches involving the current match
+					this._State = 0;
+					return KMP_MATCHED;
+				}
+				return KMP_ADVANCED;
+			}
+			else if ( this._State == 0 )
+				return KMP_NOMATCH;
+			else
+				this._State = this._Overlap[ this._State ];
+		}
+
+		return null ;
+	},
+	"Reset" : function()
+	{
+		this._State = 0 ;
+	}
+};
+
+function _Find()
+{
+	// Start from the end of the current selection.
+	var matcher = new KmpMatch( GetSearchString(), ! GetCheckCase() ) ;
+	var cursor = GetSelection().End ;
+	var matchState = KMP_NOMATCH ;
+	var matchBookmark = null ;
+
+	// Match finding.
+	while ( true )
+	{
+		// Perform KMP stream matching.
+		//	- Reset KMP matcher if we encountered a block element.
+		var data = GetData( cursor ) ;
+		if ( data )
+		{
+			if ( data.tagName )
+			{
+				if ( oEditor.FCKListsLib.BlockElements[ data.tagName.toLowerCase() ] )
+					matcher.Reset();
+			}
+			else if ( data.charAt != undefined )
+			{
+				matchState = matcher.FeedCharacter(data) ;
+
+				if ( matchState == KMP_NOMATCH )
+					matchBookmark = null ;
+				else if ( matchState == KMP_ADVANCED && matchBookmark == null )
+					matchBookmark = { Start : cursor.concat( [] ) } ;
+				else if ( matchState == KMP_MATCHED )
+				{
+					if ( matchBookmark == null )
+						matchBookmark = { Start : cursor.concat( [] ) } ;
+					matchBookmark.End = cursor.concat( [] ) ;
+					matchBookmark.End[ matchBookmark.End.length - 1 ]++;
+
+					// Wait, do we have to match a whole word?
+					if ( GetMatchWord() )
+					{
+						var startOk = false ;
+						var endOk = false ;
+						var start = matchBookmark.Start ;
+						var end = matchBookmark.End ;
+						if ( start[ start.length - 1 ] == 0 )
+							startOk = true ;
+						else
+						{
+							var cursorBeforeStart = start.slice( 0, start.length - 1 ) ;
+							cursorBeforeStart.push( start[ start.length - 1 ] - 1 ) ;
+							var dataBeforeStart = GetData( cursorBeforeStart ) ;
+							if ( dataBeforeStart == null || dataBeforeStart.charAt == undefined )
+								startOk = true ;
+							else if ( CheckIsWhitespace( dataBeforeStart ) )
+								startOk = true ;
+						}
+
+						// this is already one character beyond the last char, no need to move
+						var cursorAfterEnd = end ;
+						var dataAfterEnd = GetData( cursorAfterEnd );
+						if ( dataAfterEnd == null || dataAfterEnd.charAt == undefined )
+							endOk = true ;
+						else if ( CheckIsWhitespace( dataAfterEnd ) )
+							endOk = true ;
+
+						if ( startOk && endOk )
+							break ;
+						else
+							matcher.Reset() ;
+					}
+					else
+						break ;
+				}
+			}
+		}
+
+		// Perform DFS across the document, until we've reached the end.
+		cursor = NextPosition( cursor ) ;
+		if ( cursor == null )
+			break;
+	}
+
+	// If we've found a match, select the match.
+	if ( matchState == KMP_MATCHED )
+	{
+		var range = new oEditor.FCKDomRange( oEditor.FCK.EditorWindow ) ;
+		range.MoveToBookmark2( matchBookmark ) ;
+		range.Select() ;
+		var focus = range._Range.endContainer ;
+		while ( focus && focus.nodeType != 1 )
+			focus = focus.parentNode ;
+		if ( focus )
+		focus.scrollIntoView( false ) ;
+		return true;
+	}
+	else
+		return false;
+}
+
+function Find()
+{
+	var range = new oEditor.FCKDomRange( oEditor.FCK.EditorWindow ) ;
+	range.MoveToSelection() ;
+	range.Collapse( false ) ;
+	range.Select() ;
+
+	if ( ! _Find() )
+		alert( FCKLang.DlgFindNotFoundMsg ) ;
+}
+
+function Replace()
+{
+	var selection = new oEditor.FCKDomRange( oEditor.FCK.EditorWindow ) ;
+	selection.MoveToSelection() ;
+
+	if ( selection.CheckIsCollapsed() )
+	{
+		if (! _Find() )
+			alert( FCKLang.DlgFindNotFoundMsg ) ;
+	}
+	else
+	{
+		oEditor.FCKUndo.SaveUndoStep() ;
+		selection.DeleteContents() ;
+		selection.InsertNode( oEditor.FCK.EditorDocument.createTextNode( GetReplaceString() ) ) ;
+		selection.Collapse( false ) ;
+		selection.Select() ;
+	}
+}
+
+function ReplaceAll()
+{
+	oEditor.FCKUndo.SaveUndoStep() ;
+	var range = new oEditor.FCKDomRange( oEditor.FCK.EditorWindow ) ;
+
+	var replaceCount = 0 ;
+
+	while ( _Find() )
+	{
+		range.MoveToSelection() ;
+		range.DeleteContents() ;
+		range.InsertNode( oEditor.FCK.EditorDocument.createTextNode( GetReplaceString() ) ) ;
+		range.Collapse( false ) ;
+		range.Select() ;
+		replaceCount++ ;
+	}
+	if ( replaceCount == 0 )
+		alert( FCKLang.DlgFindNotFoundMsg ) ;
+	window.parent.Cancel() ;
+}
+	</script>
+</head>
+<body onload="OnLoad()" style="overflow: hidden">
+	<div id="divFind" style="display: none">
+		<table cellspacing="3" cellpadding="2" width="100%" border="0">
+			<tr>
+				<td nowrap="nowrap">
+					<label for="txtFindFind" fcklang="DlgReplaceFindLbl">
+						Find what:</label>
+				</td>
+				<td width="100%">
+					<input id="txtFindFind" onkeyup="btnStat(this.form)" style="width: 100%" tabindex="1"
+						type="text" />
+				</td>
+				<td>
+					<input id="btnFind" style="width: 80px" disabled="disabled" onclick="Find();"
+						type="button" value="Find" fcklang="DlgFindFindBtn" />
+				</td>
+			</tr>
+			<tr>
+				<td valign="bottom" colspan="3">
+					&nbsp;<input id="chkCaseFind" tabindex="3" type="checkbox" /><label for="chkCaseFind" fcklang="DlgReplaceCaseChk">Match
+						case</label>
+					<br />
+					&nbsp;<input id="chkWordFind" tabindex="4" type="checkbox" /><label for="chkWordFind" fcklang="DlgReplaceWordChk">Match
+						whole word</label>
+				</td>
+			</tr>
+		</table>
+	</div>
+	<div id="divReplace" style="display:none">
+		<table cellspacing="3" cellpadding="2" width="100%" border="0">
+			<tr>
+				<td nowrap="nowrap">
+					<label for="txtFindReplace" fcklang="DlgReplaceFindLbl">
+						Find what:</label>
+				</td>
+				<td width="100%">
+					<input id="txtFindReplace" onkeyup="btnStat(this.form)" style="width: 100%" tabindex="1"
+						type="text" />
+				</td>
+				<td>
+					<input id="btnReplace" style="width: 80px" disabled="disabled" onclick="Replace();"
+						type="button" value="Replace" fcklang="DlgReplaceReplaceBtn" />
+				</td>
+			</tr>
+			<tr>
+				<td valign="top" nowrap="nowrap">
+					<label for="txtReplace" fcklang="DlgReplaceReplaceLbl">
+						Replace with:</label>
+				</td>
+				<td valign="top">
+					<input id="txtReplace" style="width: 100%" tabindex="2" type="text" />
+				</td>
+				<td>
+					<input id="btnReplaceAll" style="width: 80px" disabled="disabled" onclick="ReplaceAll()" type="button"
+						value="Replace All" fcklang="DlgReplaceReplAllBtn" />
+				</td>
+			</tr>
+			<tr>
+				<td valign="bottom" colspan="3">
+					&nbsp;<input id="chkCaseReplace" tabindex="3" type="checkbox" /><label for="chkCaseReplace" fcklang="DlgReplaceCaseChk">Match
+						case</label>
+					<br />
+					&nbsp;<input id="chkWordReplace" tabindex="4" type="checkbox" /><label for="chkWordReplace" fcklang="DlgReplaceWordChk">Match
+						whole word</label>
+				</td>
+			</tr>
+		</table>
+	</div>
+</body>
+</html>
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_select.html
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_select.html	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_select.html	(revision 1280)
@@ -0,0 +1,177 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Select dialog window.
+-->
+<html>
+	<head>
+		<title>Select Properties</title>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+		<meta content="noindex, nofollow" name="robots">
+		<script src="common/fck_dialog_common.js" type="text/javascript"></script>
+		<script type="text/javascript" src="fck_select/fck_select.js"></script>
+		<script type="text/javascript">
+
+var oEditor = window.parent.InnerDialogLoaded() ;
+
+// Gets the document DOM
+var oDOM = oEditor.FCK.EditorDocument ;
+
+var oActiveEl = oEditor.FCKSelection.GetSelectedElement() ;
+
+var oListText ;
+var oListValue ;
+
+window.onload = function()
+{
+	// First of all, translate the dialog box texts
+	oEditor.FCKLanguageManager.TranslatePage(document) ;
+
+	oListText	= document.getElementById( 'cmbText' ) ;
+	oListValue	= document.getElementById( 'cmbValue' ) ;
+
+	if ( oActiveEl && oActiveEl.tagName == 'SELECT' )
+	{
+		GetE('txtName').value		= oActiveEl.name ;
+		GetE('txtSelValue').value	= oActiveEl.value ;
+		GetE('txtLines').value		= GetAttribute( oActiveEl, 'size' ) ;
+		GetE('chkMultiple').checked	= oActiveEl.multiple ;
+
+		// Load the actual options
+		for ( var i = 0 ; i < oActiveEl.options.length ; i++ )
+		{
+			var sText	= HTMLDecode( oActiveEl.options[i].innerHTML ) ;
+			var sValue	= oActiveEl.options[i].value ;
+
+			AddComboOption( oListText, sText, sText ) ;
+			AddComboOption( oListValue, sValue, sValue ) ;
+		}
+	}
+	else
+		oActiveEl = null ;
+
+	window.parent.SetOkButton( true ) ;
+}
+
+function Ok()
+{
+	oEditor.FCKUndo.SaveUndoStep() ;
+	
+	var sSize = GetE('txtLines').value ;
+	if ( sSize == null || isNaN( sSize ) || sSize <= 1 )
+		sSize = '' ;
+
+	if ( !oActiveEl )
+	{
+		oActiveEl = oEditor.FCK.InsertElement( 'select' ) ;
+	}
+
+	SetAttribute( oActiveEl, 'name'	, GetE('txtName').value ) ;
+	SetAttribute( oActiveEl, 'size'	, sSize ) ;
+	oActiveEl.multiple = ( sSize.length > 0 && GetE('chkMultiple').checked ) ;
+
+	// Remove all options.
+	while ( oActiveEl.options.length > 0 )
+		oActiveEl.remove(0) ;
+
+	// Add all available options.
+	for ( var i = 0 ; i < oListText.options.length ; i++ )
+	{
+		var sText	= oListText.options[i].value ;
+		var sValue	= oListValue.options[i].value ;
+		if ( sValue.length == 0 ) sValue = sText ;
+
+		var oOption = AddComboOption( oActiveEl, sText, sValue, oDOM ) ;
+
+		if ( sValue == GetE('txtSelValue').value )
+		{
+			SetAttribute( oOption, 'selected', 'selected' ) ;
+			oOption.selected = true ;
+		}
+	}
+
+	return true ;
+}
+
+		</script>
+	</head>
+	<body style='OVERFLOW: hidden' scroll='no'>
+		<table width="100%" height="100%">
+			<tr>
+				<td>
+					<table width="100%">
+						<tr>
+							<td nowrap><span fckLang="DlgSelectName">Name</span>&nbsp;</td>
+							<td width="100%" colSpan="2"><input id="txtName" style="WIDTH: 100%" type="text"></td>
+						</tr>
+						<tr>
+							<td nowrap><span fckLang="DlgSelectValue">Value</span>&nbsp;</td>
+							<td width="100%" colSpan="2"><input id="txtSelValue" style="WIDTH: 100%; BACKGROUND-COLOR: buttonface" type="text" readonly></td>
+						</tr>
+						<tr>
+							<td nowrap><span fckLang="DlgSelectSize">Size</span>&nbsp;</td>
+							<td nowrap><input id="txtLines" type="text" size="2" value="">&nbsp;<span fckLang="DlgSelectLines">lines</span></td>
+							<td nowrap align="right"><input id="chkMultiple" name="chkMultiple" type="checkbox"><label for="chkMultiple" fckLang="DlgSelectChkMulti">Allow
+									multiple selections</label></td>
+						</tr>
+					</table>
+					<br>
+					<hr style="POSITION: absolute">
+					<span style="LEFT: 10px; POSITION: relative; TOP: -7px" class="BackColor">&nbsp;<span fckLang="DlgSelectOpAvail">Available
+							Options</span>&nbsp;</span>
+					<table width="100%">
+						<tr>
+							<td width="50%"><span fckLang="DlgSelectOpText">Text</span><br>
+								<input id="txtText" style="WIDTH: 100%" type="text" name="txtText">
+							</td>
+							<td width="50%"><span fckLang="DlgSelectOpValue">Value</span><br>
+								<input id="txtValue" style="WIDTH: 100%" type="text" name="txtValue">
+							</td>
+							<td vAlign="bottom"><input onclick="Add();" type="button" fckLang="DlgSelectBtnAdd" value="Add"></td>
+							<td vAlign="bottom"><input onclick="Modify();" type="button" fckLang="DlgSelectBtnModify" value="Modify"></td>
+						</tr>
+						<tr>
+							<td rowSpan="2"><select id="cmbText" style="WIDTH: 100%" onchange="GetE('cmbValue').selectedIndex = this.selectedIndex;Select(this);"
+									size="5" name="cmbText"></select>
+							</td>
+							<td rowSpan="2"><select id="cmbValue" style="WIDTH: 100%" onchange="GetE('cmbText').selectedIndex = this.selectedIndex;Select(this);"
+									size="5" name="cmbValue"></select>
+							</td>
+							<td vAlign="top" colSpan="2">
+							</td>
+						</tr>
+						<tr>
+							<td vAlign="bottom" colSpan="2"><input style="WIDTH: 100%" onclick="Move(-1);" type="button" fckLang="DlgSelectBtnUp" value="Up">
+								<br>
+								<input style="WIDTH: 100%" onclick="Move(1);" type="button" fckLang="DlgSelectBtnDown"
+									value="Down">
+							</td>
+						</tr>
+						<TR>
+							<TD vAlign="bottom" colSpan="4"><INPUT onclick="SetSelectedValue();" type="button" fckLang="DlgSelectBtnSetValue" value="Set as selected value">&nbsp;&nbsp;
+								<input onclick="Delete();" type="button" fckLang="DlgSelectBtnDelete" value="Delete"></TD>
+						</TR>
+					</table>
+				</td>
+			</tr>
+		</table>
+	</body>
+</html>
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_select/fck_select.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_select/fck_select.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_select/fck_select.js	(revision 1280)
@@ -0,0 +1,194 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Scripts for the fck_select.html page.
+ */
+
+function Select( combo )
+{
+	var iIndex = combo.selectedIndex ;
+
+	oListText.selectedIndex		= iIndex ;
+	oListValue.selectedIndex	= iIndex ;
+
+	var oTxtText	= document.getElementById( "txtText" ) ;
+	var oTxtValue	= document.getElementById( "txtValue" ) ;
+
+	oTxtText.value	= oListText.value ;
+	oTxtValue.value	= oListValue.value ;
+}
+
+function Add()
+{
+	var oTxtText	= document.getElementById( "txtText" ) ;
+	var oTxtValue	= document.getElementById( "txtValue" ) ;
+
+	AddComboOption( oListText, oTxtText.value, oTxtText.value ) ;
+	AddComboOption( oListValue, oTxtValue.value, oTxtValue.value ) ;
+
+	oListText.selectedIndex = oListText.options.length - 1 ;
+	oListValue.selectedIndex = oListValue.options.length - 1 ;
+
+	oTxtText.value	= '' ;
+	oTxtValue.value	= '' ;
+
+	oTxtText.focus() ;
+}
+
+function Modify()
+{
+	var iIndex = oListText.selectedIndex ;
+
+	if ( iIndex < 0 ) return ;
+
+	var oTxtText	= document.getElementById( "txtText" ) ;
+	var oTxtValue	= document.getElementById( "txtValue" ) ;
+
+	oListText.options[ iIndex ].innerHTML	= HTMLEncode( oTxtText.value ) ;
+	oListText.options[ iIndex ].value		= oTxtText.value ;
+
+	oListValue.options[ iIndex ].innerHTML	= HTMLEncode( oTxtValue.value ) ;
+	oListValue.options[ iIndex ].value		= oTxtValue.value ;
+
+	oTxtText.value	= '' ;
+	oTxtValue.value	= '' ;
+
+	oTxtText.focus() ;
+}
+
+function Move( steps )
+{
+	ChangeOptionPosition( oListText, steps ) ;
+	ChangeOptionPosition( oListValue, steps ) ;
+}
+
+function Delete()
+{
+	RemoveSelectedOptions( oListText ) ;
+	RemoveSelectedOptions( oListValue ) ;
+}
+
+function SetSelectedValue()
+{
+	var iIndex = oListValue.selectedIndex ;
+	if ( iIndex < 0 ) return ;
+
+	var oTxtValue = document.getElementById( "txtSelValue" ) ;
+
+	oTxtValue.value = oListValue.options[ iIndex ].value ;
+}
+
+// Moves the selected option by a number of steps (also negative)
+function ChangeOptionPosition( combo, steps )
+{
+	var iActualIndex = combo.selectedIndex ;
+
+	if ( iActualIndex < 0 )
+		return ;
+
+	var iFinalIndex = iActualIndex + steps ;
+
+	if ( iFinalIndex < 0 )
+		iFinalIndex = 0 ;
+
+	if ( iFinalIndex > ( combo.options.length - 1 ) )
+		iFinalIndex = combo.options.length - 1 ;
+
+	if ( iActualIndex == iFinalIndex )
+		return ;
+
+	var oOption = combo.options[ iActualIndex ] ;
+	var sText	= HTMLDecode( oOption.innerHTML ) ;
+	var sValue	= oOption.value ;
+
+	combo.remove( iActualIndex ) ;
+
+	oOption = AddComboOption( combo, sText, sValue, null, iFinalIndex ) ;
+
+	oOption.selected = true ;
+}
+
+// Remove all selected options from a SELECT object
+function RemoveSelectedOptions(combo)
+{
+	// Save the selected index
+	var iSelectedIndex = combo.selectedIndex ;
+
+	var oOptions = combo.options ;
+
+	// Remove all selected options
+	for ( var i = oOptions.length - 1 ; i >= 0 ; i-- )
+	{
+		if (oOptions[i].selected) combo.remove(i) ;
+	}
+
+	// Reset the selection based on the original selected index
+	if ( combo.options.length > 0 )
+	{
+		if ( iSelectedIndex >= combo.options.length ) iSelectedIndex = combo.options.length - 1 ;
+		combo.selectedIndex = iSelectedIndex ;
+	}
+}
+
+// Add a new option to a SELECT object (combo or list)
+function AddComboOption( combo, optionText, optionValue, documentObject, index )
+{
+	var oOption ;
+
+	if ( documentObject )
+		oOption = documentObject.createElement("OPTION") ;
+	else
+		oOption = document.createElement("OPTION") ;
+
+	if ( index != null )
+		combo.options.add( oOption, index ) ;
+	else
+		combo.options.add( oOption ) ;
+
+	oOption.innerHTML = optionText.length > 0 ? HTMLEncode( optionText ) : '&nbsp;' ;
+	oOption.value     = optionValue ;
+
+	return oOption ;
+}
+
+function HTMLEncode( text )
+{
+	if ( !text )
+		return '' ;
+
+	text = text.replace( /&/g, '&amp;' ) ;
+	text = text.replace( /</g, '&lt;' ) ;
+	text = text.replace( />/g, '&gt;' ) ;
+
+	return text ;
+}
+
+
+function HTMLDecode( text )
+{
+	if ( !text )
+		return '' ;
+
+	text = text.replace( /&gt;/g, '>' ) ;
+	text = text.replace( /&lt;/g, '<' ) ;
+	text = text.replace( /&amp;/g, '&' ) ;
+
+	return text ;
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_smiley.html
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_smiley.html	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_smiley.html	(revision 1280)
@@ -0,0 +1,106 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Smileys (emoticons) dialog window.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+	<title></title>
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+	<meta name="robots" content="noindex, nofollow" />
+	<style type="text/css">
+		.Hand
+		{
+			cursor: pointer;
+			cursor: hand;
+		}
+	</style>
+	<script type="text/javascript">
+
+var oEditor = window.parent.InnerDialogLoaded() ;
+
+window.onload = function ()
+{
+	// First of all, translate the dialog box texts
+	oEditor.FCKLanguageManager.TranslatePage(document) ;
+}
+
+function InsertSmiley( url )
+{
+	oEditor.FCKUndo.SaveUndoStep() ;
+	var oImg = oEditor.FCK.InsertElement( 'img' ) ;
+	oImg.src = url ;
+	oImg.setAttribute( '_fcksavedurl', url ) ;
+
+	// For long smileys list, it seams that IE continues loading the images in
+	// the background when you quickly select one image. so, let's clear
+	// everything before closing.
+	document.body.innerHTML = '' ;
+
+	window.parent.Cancel() ;
+}
+
+function over(td)
+{
+	td.className = 'LightBackground Hand' ;
+}
+
+function out(td)
+{
+	td.className = 'DarkBackground Hand' ;
+}
+	</script>
+</head>
+<body scroll="no">
+	<table cellpadding="2" cellspacing="2" align="center" border="0" width="100%" height="100%">
+		<script type="text/javascript">
+
+var FCKConfig = oEditor.FCKConfig ;
+
+var sBasePath	= FCKConfig.SmileyPath ;
+var aImages		= FCKConfig.SmileyImages ;
+var iCols		= FCKConfig.SmileyColumns ;
+var iColWidth	= parseInt( 100 / iCols, 10 ) ;
+
+var i = 0 ;
+while (i < aImages.length)
+{
+	document.write( '<tr>' ) ;
+	for(var j = 0 ; j < iCols ; j++)
+	{
+		if (aImages[i])
+		{
+			var sUrl = sBasePath + aImages[i] ;
+			document.write( '<td width="' + iColWidth + '%" align="center" class="DarkBackground Hand" onclick="InsertSmiley(\'' + sUrl.replace(/'/g, "\\'" ) + '\')" onmouseover="over(this)" onmouseout="out(this)">' ) ;
+			document.write( '<img src="' + sUrl + '" border="0" />' ) ;
+		}
+		else
+			document.write( '<td width="' + iColWidth + '%" class="DarkBackground">&nbsp;' ) ;
+		document.write( '<\/td>' ) ;
+		i++ ;
+	}
+	document.write('<\/tr>') ;
+}
+
+		</script>
+	</table>
+</body>
+</html>
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_source.html
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_source.html	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_source.html	(revision 1280)
@@ -0,0 +1,65 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Source editor dialog window.
+-->
+<html>
+	<head>
+		<title>Source</title>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+		<meta name="robots" content="noindex, nofollow">
+		<link href="common/fck_dialog_common.css" rel="stylesheet" type="text/css" />
+		<script language="javascript">
+
+var oEditor		= window.parent.InnerDialogLoaded() ;
+var FCK			= oEditor.FCK ;
+var FCKConfig	= oEditor.FCKConfig ;
+
+window.onload = function()
+{
+	// EnableXHTML and EnableSourceXHTML has been deprecated
+//	document.getElementById('txtSource').value = ( FCKConfig.EnableXHTML && FCKConfig.EnableSourceXHTML ? FCK.GetXHTML( FCKConfig.FormatSource ) : FCK.GetHTML( FCKConfig.FormatSource ) ) ;
+	document.getElementById('txtSource').value = FCK.GetXHTML( FCKConfig.FormatSource ) ;
+
+	// Activate the "OK" button.
+	window.parent.SetOkButton( true ) ;
+}
+
+//#### The OK button was hit.
+function Ok()
+{
+	if ( oEditor.FCKBrowserInfo.IsIE )
+		oEditor.FCKUndo.SaveUndoStep() ;
+
+	FCK.SetData( document.getElementById('txtSource').value, false ) ;
+
+	return true ;
+}
+		</script>
+	</head>
+	<body scroll="no" style="OVERFLOW: hidden">
+		<table width="100%" height="100%">
+			<tr>
+				<td height="100%"><textarea id="txtSource" dir="ltr" style="PADDING-RIGHT: 5px; PADDING-LEFT: 5px; FONT-SIZE: 14px; PADDING-BOTTOM: 5px; WIDTH: 100%; PADDING-TOP: 5px; FONT-FAMILY: Monospace; HEIGHT: 100%">Loading. Please wait...</textarea></td>
+			</tr>
+		</table>
+	</body>
+</html>
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_specialchar.html
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_specialchar.html	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_specialchar.html	(revision 1280)
@@ -0,0 +1,118 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Special Chars Selector dialog window.
+-->
+<html>
+	<head>
+		<meta name="robots" content="noindex, nofollow">
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+		<style type="text/css">
+				.Hand
+				{
+					cursor: pointer ;
+					cursor: hand ;
+				}
+				.Sample { font-size: 24px; }
+		</style>
+		<script type="text/javascript">
+
+var oEditor = window.parent.InnerDialogLoaded() ;
+
+var oSample ;
+
+function insertChar(charValue)
+{
+	oEditor.FCKUndo.SaveUndoStep() ;
+	oEditor.FCK.InsertHtml( charValue || "" ) ;
+	window.parent.Cancel() ;
+}
+
+function over(td)
+{
+	if ( ! oSample )
+		return ;
+	oSample.innerHTML = td.innerHTML ;
+	td.className = 'LightBackground SpecialCharsOver Hand' ;
+}
+
+function out(td)
+{
+	if ( ! oSample )
+		return ;
+	oSample.innerHTML = "&nbsp;" ;
+	td.className = 'DarkBackground SpecialCharsOut Hand' ;
+}
+
+function setDefaults()
+{
+	// Gets the sample placeholder.
+	oSample = document.getElementById("SampleTD") ;
+
+	// First of all, translates the dialog box texts.
+	oEditor.FCKLanguageManager.TranslatePage(document) ;
+}
+
+		</script>
+	</HEAD>
+	<BODY onload="setDefaults()" scroll="no">
+		<table cellpadding="0" cellspacing="0" width="100%" height="100%">
+			<tr>
+				<td width="100%">
+					<table cellpadding="1" cellspacing="1" align="center" border="0" width="100%" height="100%">
+						<script type="text/javascript">
+var aChars = ["!","&quot;","#","$","%","&amp;","\\'","(",")","*","+","-",".","/","0","1","2","3","4","5","6","7","8","9",":",";","&lt;","=","&gt;","?","@","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","[","]","^","_","`","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","{","|","}","~","&euro;","&lsquo;","&rsquo;","&rsquo;","&ldquo;","&rdquo;","&ndash;","&mdash;","&iexcl;","&cent;","&pound;","&curren;","&yen;","&brvbar;","&sect;","&uml;","&copy;","&ordf;","&laquo;","&not;","&reg;","&macr;","&deg;","&plusmn;","&sup2;","&sup3;","&acute;","&micro;","&para;","&middot;","&cedil;","&sup1;","&ordm;","&raquo;","&frac14;","&frac12;","&frac34;","&iquest;","&Agrave;","&Aacute;","&Acirc;","&Atilde;","&Auml;","&Aring;","&AElig;","&Ccedil;","&Egrave;","&Eacute;","&Ecirc;","&Euml;","&Igrave;","&Iacute;","&Icirc;","&Iuml;","&ETH;","&Ntilde;","&Ograve;","&Oacute;","&Ocirc;","&Otilde;","&Ouml;","&times;","&Oslash;","&Ugrave;","&Uacute;","&Ucirc;","&Uuml;","&Yacute;","&THORN;","&szlig;","&agrave;","&aacute;","&acirc;","&atilde;","&auml;","&aring;","&aelig;","&ccedil;","&egrave;","&eacute;","&ecirc;","&euml;","&igrave;","&iacute;","&icirc;","&iuml;","&eth;","&ntilde;","&ograve;","&oacute;","&ocirc;","&otilde;","&ouml;","&divide;","&oslash;","&ugrave;","&uacute;","&ucirc;","&uuml;","&uuml;","&yacute;","&thorn;","&yuml;","&OElig;","&oelig;","&sbquo;","&#8219;","&bdquo;","&hellip;","&trade;","&#9658;","&bull;","&rarr;","&rArr;","&hArr;","&diams;","&asymp;"] ;
+
+var cols = 20 ;
+
+var i = 0 ;
+while (i < aChars.length)
+{
+	document.write("<TR>") ;
+	for(var j = 0 ; j < cols ; j++)
+	{
+		if (aChars[i])
+		{
+			document.write('<TD width="1%" class="DarkBackground SpecialCharsOut Hand" align="center" onclick="insertChar(\'' + aChars[i].replace(/&/g, "&amp;") + '\')" onmouseover="over(this)" onmouseout="out(this)">') ;
+			document.write(aChars[i]) ;
+		}
+		else
+			document.write("<TD class='DarkBackground SpecialCharsOut'>&nbsp;") ;
+		document.write("<\/TD>") ;
+		i++ ;
+	}
+	document.write("<\/TR>") ;
+}
+						</script>
+					</table>
+				</td>
+				<td nowrap>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+				<td valign="top">
+					<table width="40" cellpadding="0" cellspacing="0" border="0">
+						<tr>
+							<td id="SampleTD" width="40" height="40" align="center" class="DarkBackground SpecialCharsOut Sample">&nbsp;</td>
+						</tr>
+					</table>
+				</td>
+			</tr>
+		</table>
+	</BODY>
+</HTML>
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_spellerpages.html
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_spellerpages.html	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_spellerpages.html	(revision 1280)
@@ -0,0 +1,64 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Spell Check dialog window.
+-->
+<html>
+	<head>
+		<title>Spell Check</title>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+		<meta content="noindex, nofollow" name="robots">
+		<script src="fck_spellerpages/spellerpages/spellChecker.js"></script>
+		<script type="text/javascript">
+
+var oEditor = window.parent.InnerDialogLoaded() ;
+var FCKLang = oEditor.FCKLang ;
+
+window.onload = function()
+{
+	document.getElementById('txtHtml').value = oEditor.FCK.EditorDocument.body.innerHTML ;
+
+	var oSpeller = new spellChecker( document.getElementById('txtHtml') ) ;
+	oSpeller.spellCheckScript = oEditor.FCKConfig.SpellerPagesServerScript || 'server-scripts/spellchecker.php' ;
+	oSpeller.OnFinished = oSpeller_OnFinished ;
+	oSpeller.openChecker() ;
+}
+
+function OnSpellerControlsLoad( controlsWindow )
+{
+	// Translate the dialog box texts
+	oEditor.FCKLanguageManager.TranslatePage( controlsWindow.document ) ;
+}
+
+function oSpeller_OnFinished( numberOCorrections )
+{
+	if ( numberOCorrections > 0 )
+		oEditor.FCK.SetData( document.getElementById('txtHtml').value ) ;
+	window.parent.Cancel() ;
+}
+
+		</script>
+	</head>
+	<body style="OVERFLOW: hidden" scroll="no" style="padding:0px;">
+		<input type="hidden" id="txtHtml" value="">
+		<iframe id="frmSpell" src="javascript:void(0)" name="spellchecker" width="100%" height="100%" frameborder="0"></iframe>
+	</body>
+</html>
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_spellerpages/spellerpages/controlWindow.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_spellerpages/spellerpages/controlWindow.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_spellerpages/spellerpages/controlWindow.js	(revision 1280)
@@ -0,0 +1,87 @@
+﻿////////////////////////////////////////////////////
+// controlWindow object
+////////////////////////////////////////////////////
+function controlWindow( controlForm ) {
+	// private properties
+	this._form = controlForm;
+
+	// public properties
+	this.windowType = "controlWindow";
+//	this.noSuggestionSelection = "- No suggestions -";	// by FredCK
+	this.noSuggestionSelection = FCKLang.DlgSpellNoSuggestions ;
+	// set up the properties for elements of the given control form
+	this.suggestionList  = this._form.sugg;
+	this.evaluatedText   = this._form.misword;
+	this.replacementText = this._form.txtsugg;
+	this.undoButton      = this._form.btnUndo;
+
+	// public methods
+	this.addSuggestion = addSuggestion;
+	this.clearSuggestions = clearSuggestions;
+	this.selectDefaultSuggestion = selectDefaultSuggestion;
+	this.resetForm = resetForm;
+	this.setSuggestedText = setSuggestedText;
+	this.enableUndo = enableUndo;
+	this.disableUndo = disableUndo;
+}
+
+function resetForm() {
+	if( this._form ) {
+		this._form.reset();
+	}
+}
+
+function setSuggestedText() {
+	var slct = this.suggestionList;
+	var txt = this.replacementText;
+	var str = "";
+	if( (slct.options[0].text) && slct.options[0].text != this.noSuggestionSelection ) {
+		str = slct.options[slct.selectedIndex].text;
+	}
+	txt.value = str;
+}
+
+function selectDefaultSuggestion() {
+	var slct = this.suggestionList;
+	var txt = this.replacementText;
+	if( slct.options.length == 0 ) {
+		this.addSuggestion( this.noSuggestionSelection );
+	} else {
+		slct.options[0].selected = true;
+	}
+	this.setSuggestedText();
+}
+
+function addSuggestion( sugg_text ) {
+	var slct = this.suggestionList;
+	if( sugg_text ) {
+		var i = slct.options.length;
+		var newOption = new Option( sugg_text, 'sugg_text'+i );
+		slct.options[i] = newOption;
+	 }
+}
+
+function clearSuggestions() {
+	var slct = this.suggestionList;
+	for( var j = slct.length - 1; j > -1; j-- ) {
+		if( slct.options[j] ) {
+			slct.options[j] = null;
+		}
+	}
+}
+
+function enableUndo() {
+	if( this.undoButton ) {
+		if( this.undoButton.disabled == true ) {
+			this.undoButton.disabled = false;
+		}
+	}
+}
+
+function disableUndo() {
+	if( this.undoButton ) {
+		if( this.undoButton.disabled == false ) {
+			this.undoButton.disabled = true;
+		}
+	}
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_spellerpages/spellerpages/controls.html
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_spellerpages/spellerpages/controls.html	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_spellerpages/spellerpages/controls.html	(revision 1280)
@@ -0,0 +1,153 @@
+<html>
+	<head>
+		<link rel="stylesheet" type="text/css" href="spellerStyle.css" />
+		<script type="text/javascript" src="controlWindow.js"></script>
+		<script type="text/javascript">
+var spellerObject;
+var controlWindowObj;
+
+if( parent.opener ) {
+	spellerObject = parent.opener.speller;
+}
+
+function ignore_word() {
+	if( spellerObject ) {
+		spellerObject.ignoreWord();
+	}
+}
+
+function ignore_all() {
+	if( spellerObject ) {
+		spellerObject.ignoreAll();
+	}
+}
+
+function replace_word() {
+	if( spellerObject ) {
+		spellerObject.replaceWord();
+	}
+}
+
+function replace_all() {
+	if( spellerObject ) {
+		spellerObject.replaceAll();
+	}
+}
+
+function end_spell() {
+	if( spellerObject ) {
+		spellerObject.terminateSpell();
+	}
+}
+
+function undo() {
+	if( spellerObject ) {
+		spellerObject.undo();
+	}
+}
+
+function suggText() {
+	if( controlWindowObj ) {
+		controlWindowObj.setSuggestedText();
+	}
+}
+
+var FCKLang = window.parent.parent.FCKLang ;	// by FredCK
+
+function init_spell() {
+	// By FredCK (fckLang attributes have been added to the HTML source of this page)
+	window.parent.parent.OnSpellerControlsLoad( this ) ;
+
+	var controlForm = document.spellcheck;
+
+	// create a new controlWindow object
+ 	controlWindowObj = new controlWindow( controlForm );
+
+	// call the init_spell() function in the parent frameset
+	if( parent.frames.length ) {
+		parent.init_spell( controlWindowObj );
+	} else {
+		alert( 'This page was loaded outside of a frameset. It might not display properly' );
+	}
+}
+
+</script>
+	</head>
+	<body class="controlWindowBody" onLoad="init_spell();" style="OVERFLOW: hidden" scroll="no">	<!-- by FredCK -->
+		<form name="spellcheck">
+			<table border="0" cellpadding="0" cellspacing="0" border="0" align="center">
+				<tr>
+					<td colspan="3" class="normalLabel"><span fckLang="DlgSpellNotInDic">Not in dictionary:</span></td>
+				</tr>
+				<tr>
+					<td colspan="3"><input class="readonlyInput" type="text" name="misword" readonly /></td>
+				</tr>
+				<tr>
+					<td colspan="3" height="5"></td>
+				</tr>
+				<tr>
+					<td class="normalLabel"><span fckLang="DlgSpellChangeTo">Change to:</span></td>
+				</tr>
+				<tr valign="top">
+					<td>
+						<table border="0" cellpadding="0" cellspacing="0" border="0">
+							<tr>
+								<td class="normalLabel">
+									<input class="textDefault" type="text" name="txtsugg" />
+								</td>
+							</tr>
+							<tr>
+								<td>
+									<select class="suggSlct" name="sugg" size="7" onChange="suggText();" onDblClick="replace_word();">
+										<option></option>
+									</select>
+								</td>
+							</tr>
+						</table>
+					</td>
+					<td>&nbsp;&nbsp;</td>
+					<td>
+						<table border="0" cellpadding="0" cellspacing="0" border="0">
+							<tr>
+								<td>
+									<input class="buttonDefault" type="button" fckLang="DlgSpellBtnIgnore" value="Ignore" onClick="ignore_word();">
+								</td>
+								<td>&nbsp;&nbsp;</td>
+								<td>
+									<input class="buttonDefault" type="button" fckLang="DlgSpellBtnIgnoreAll" value="Ignore All" onClick="ignore_all();">
+								</td>
+							</tr>
+							<tr>
+								<td colspan="3" height="5"></td>
+							</tr>
+							<tr>
+								<td>
+									<input class="buttonDefault" type="button" fckLang="DlgSpellBtnReplace" value="Replace" onClick="replace_word();">
+								</td>
+								<td>&nbsp;&nbsp;</td>
+								<td>
+									<input class="buttonDefault" type="button" fckLang="DlgSpellBtnReplaceAll" value="Replace All" onClick="replace_all();">
+								</td>
+							</tr>
+							<tr>
+								<td colspan="3" height="5"></td>
+							</tr>
+							<tr>
+								<td>
+									<input class="buttonDefault" type="button" name="btnUndo" fckLang="DlgSpellBtnUndo" value="Undo" onClick="undo();"
+										disabled>
+								</td>
+								<td>&nbsp;&nbsp;</td>
+								<td>
+									<!-- by FredCK
+									<input class="buttonDefault" type="button" value="Close" onClick="end_spell();">
+									-->
+								</td>
+							</tr>
+						</table>
+					</td>
+				</tr>
+			</table>
+		</form>
+	</body>
+</html>
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.cfm
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.cfm	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.cfm	(revision 1280)
@@ -0,0 +1,146 @@
+<cfsetting enablecfoutputonly="true">
+<!---
+This code uses a CF User Defined Function and should work in CF version 5.0
+and up without alteration.
+
+Also if you are hosting your site at an ISP, you will have to check with them
+to see if the use of <CFEXECUTE> is allowed. In most cases ISP will not allow
+the use of that tag for security reasons. Clients would be able to access each
+others files in certain cases.
+--->
+
+<!--- The following variables values must reflect your installation. --->
+<cfset aspell_dir	  = "C:\Program Files\Aspell\bin">
+<cfset lang         = "en_US">
+<cfset aspell_opts  = "-a --lang=#lang# --encoding=utf-8 -H --rem-sgml-check=alt">
+<cfset tempfile_in  = GetTempFile(GetTempDirectory(), "spell_")>
+<cfset tempfile_out = GetTempFile(GetTempDirectory(), "spell_")>
+<cfset spellercss   = "../spellerStyle.css">
+<cfset word_win_src = "../wordWindow.js">
+
+<cfset form.checktext = form["textinputs[]"]>
+
+<!--- make no difference between URL and FORM scopes --->
+<cfparam name="url.checktext"  default="">
+<cfparam name="form.checktext" default="#url.checktext#">
+
+<!--- Takes care of those pesky smart quotes from MS apps, replaces them with regular quotes --->
+<cfset submitted_text = ReplaceList(form.checktext,"%u201C,%u201D","%22,%22")>
+
+<!--- submitted_text now is ready for processing --->
+
+<!--- use carat on each line to escape possible aspell commands --->
+<cfset text = "">
+<cfset CRLF = Chr(13) & Chr(10)>
+
+<cfloop list="#submitted_text#" index="field" delimiters=",">
+	<cfset text = text & "%"  & CRLF
+                      & "^A" & CRLF
+                      & "!"  & CRLF>
+	<cfloop list="#URLDecode(field)#" index="line" delimiters="#CRLF#">
+		<cfset text = ListAppend(text, "^" & Trim(JSStringFormat(line)), CRLF)>
+	</cfloop>
+</cfloop>
+
+<!--- create temp file from the submitted text, this will be passed to aspell to be check for misspelled words --->
+<cffile action="write" file="#tempfile_in#" output="#text#" charset="utf-8">
+
+<!--- execute aspell in an UTF-8 console and redirect output to a file. UTF-8 encoding is lost if done differently --->
+<cfexecute name="cmd.exe" arguments='/c type "#tempfile_in#" | "#aspell_dir#\aspell.exe" #aspell_opts# > "#tempfile_out#"' timeout="100"/>
+
+<!--- read output file for further processing --->
+<cffile action="read" file="#tempfile_out#" variable="food" charset="utf-8">
+
+<!--- remove temp files --->
+<cffile action="delete" file="#tempfile_in#">
+<cffile action="delete" file="#tempfile_out#">
+
+<cfset texts = StructNew()>
+<cfset texts.textinputs = "">
+<cfset texts.words      = "">
+<cfset texts.abort      = "">
+
+<!--- Generate Text Inputs --->
+<cfset i = 0>
+<cfloop list="#submitted_text#" index="textinput">
+  <cfset texts.textinputs = ListAppend(texts.textinputs, 'textinputs[#i#] = decodeURIComponent("#textinput#");', CRLF)>
+  <cfset i = i + 1>
+</cfloop>
+
+<!--- Generate Words Lists --->
+<cfset word_cnt  = 0>
+<cfset input_cnt = -1>
+<cfloop list="#food#" index="aspell_line" delimiters="#CRLF#">
+    <cfset leftChar = Left(aspell_line, 1)>
+	<cfif leftChar eq "*">
+			<cfset input_cnt   = input_cnt + 1>
+			<cfset word_cnt    = 0>
+			<cfset texts.words = ListAppend(texts.words, "words[#input_cnt#] = [];", CRLF)>
+			<cfset texts.words = ListAppend(texts.words, "suggs[#input_cnt#] = [];", CRLF)>
+    <cfelse>
+        <cfif leftChar eq "&" or leftChar eq "##">
+			<!--- word that misspelled --->
+			<cfset bad_word    = Trim(ListGetAt(aspell_line, 2, " "))>
+			<cfset bad_word    = Replace(bad_word, "'", "\'", "ALL")>
+			<!--- sugestions --->
+			<cfset sug_list    = Trim(ListRest(aspell_line, ":"))>
+			<cfset sug_list    = ListQualify(Replace(sug_list, "'", "\'", "ALL"), "'")>
+			<!--- javascript --->
+			<cfset texts.words = ListAppend(texts.words, "words[#input_cnt#][#word_cnt#] = '#bad_word#';", CRLF)>
+			<cfset texts.words = ListAppend(texts.words, "suggs[#input_cnt#][#word_cnt#] = [#sug_list#];", CRLF)>
+			<cfset word_cnt    = word_cnt + 1>
+		</cfif>
+     </cfif>
+</cfloop>
+
+<cfif texts.words eq "">
+  <cfset texts.abort = "alert('Spell check complete.\n\nNo misspellings found.'); top.window.close();">
+</cfif>
+
+<cfcontent type="text/html; charset=utf-8">
+
+<cfoutput><html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<link rel="stylesheet" type="text/css" href="#spellercss#" />
+<script language="javascript" src="#word_win_src#"></script>
+<script language="javascript">
+var suggs      = new Array();
+var words      = new Array();
+var textinputs = new Array();
+var error;
+
+#texts.textinputs##CRLF#
+#texts.words#
+#texts.abort#
+
+var wordWindowObj = new wordWindow();
+wordWindowObj.originalSpellings = words;
+wordWindowObj.suggestions = suggs;
+wordWindowObj.textInputs = textinputs;
+
+function init_spell() {
+	// check if any error occured during server-side processing
+	if( error ) {
+		alert( error );
+	} else {
+		// call the init_spell() function in the parent frameset
+		if (parent.frames.length) {
+			parent.init_spell( wordWindowObj );
+		} else {
+			alert('This page was loaded outside of a frameset. It might not display properly');
+		}
+	}
+}
+</script>
+
+</head>
+<body onLoad="init_spell();">
+
+<script type="text/javascript">
+wordWindowObj.writeBody();
+</script>
+
+</body>
+</html></cfoutput>
+<cfsetting enablecfoutputonly="false">
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.php
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.php	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.php	(revision 1280)
@@ -0,0 +1,196 @@
+<?php
+header('Content-type: text/html; charset=utf-8');
+
+// The following variables values must reflect your installation needs.
+
+$aspell_prog	= '"C:\Program Files\Aspell\bin\aspell.exe"';	// by FredCK (for Windows)
+//$aspell_prog	= 'aspell';										// by FredCK (for Linux)
+
+$lang			= 'en_US';
+$aspell_opts	= "-a --lang=$lang --encoding=utf-8 -H --rem-sgml-check=alt";		// by FredCK
+
+$tempfiledir	= "./";
+
+$spellercss		= '../spellerStyle.css';						// by FredCK
+$word_win_src	= '../wordWindow.js';							// by FredCK
+
+$textinputs		= $_POST['textinputs']; # array
+$input_separator = "A";
+
+# set the JavaScript variable to the submitted text.
+# textinputs is an array, each element corresponding to the (url-encoded)
+# value of the text control submitted for spell-checking
+function print_textinputs_var() {
+	global $textinputs;
+	foreach( $textinputs as $key=>$val ) {
+		# $val = str_replace( "'", "%27", $val );
+		echo "textinputs[$key] = decodeURIComponent(\"" . $val . "\");\n";
+	}
+}
+
+# make declarations for the text input index
+function print_textindex_decl( $text_input_idx ) {
+	echo "words[$text_input_idx] = [];\n";
+	echo "suggs[$text_input_idx] = [];\n";
+}
+
+# set an element of the JavaScript 'words' array to a misspelled word
+function print_words_elem( $word, $index, $text_input_idx ) {
+	echo "words[$text_input_idx][$index] = '" . escape_quote( $word ) . "';\n";
+}
+
+
+# set an element of the JavaScript 'suggs' array to a list of suggestions
+function print_suggs_elem( $suggs, $index, $text_input_idx ) {
+	echo "suggs[$text_input_idx][$index] = [";
+	foreach( $suggs as $key=>$val ) {
+		if( $val ) {
+			echo "'" . escape_quote( $val ) . "'";
+			if ( $key+1 < count( $suggs )) {
+				echo ", ";
+			}
+		}
+	}
+	echo "];\n";
+}
+
+# escape single quote
+function escape_quote( $str ) {
+	return preg_replace ( "/'/", "\\'", $str );
+}
+
+
+# handle a server-side error.
+function error_handler( $err ) {
+	echo "error = '" . escape_quote( $err ) . "';\n";
+}
+
+## get the list of misspelled words. Put the results in the javascript words array
+## for each misspelled word, get suggestions and put in the javascript suggs array
+function print_checker_results() {
+
+	global $aspell_prog;
+	global $aspell_opts;
+	global $tempfiledir;
+	global $textinputs;
+	global $input_separator;
+	$aspell_err = "";
+	# create temp file
+	$tempfile = tempnam( $tempfiledir, 'aspell_data_' );
+
+	# open temp file, add the submitted text.
+	if( $fh = fopen( $tempfile, 'w' )) {
+		for( $i = 0; $i < count( $textinputs ); $i++ ) {
+			$text = urldecode( $textinputs[$i] );
+			$lines = explode( "\n", $text );
+			fwrite ( $fh, "%\n" ); # exit terse mode
+			fwrite ( $fh, "^$input_separator\n" );
+			fwrite ( $fh, "!\n" ); # enter terse mode
+			foreach( $lines as $key=>$value ) {
+				# use carat on each line to escape possible aspell commands
+				fwrite( $fh, "^$value\n" );
+			}
+		}
+		fclose( $fh );
+
+		# exec aspell command - redirect STDERR to STDOUT
+		$cmd = "$aspell_prog $aspell_opts < $tempfile 2>&1";
+		if( $aspellret = shell_exec( $cmd )) {
+			$linesout = explode( "\n", $aspellret );
+			$index = 0;
+			$text_input_index = -1;
+			# parse each line of aspell return
+			foreach( $linesout as $key=>$val ) {
+				$chardesc = substr( $val, 0, 1 );
+				# if '&', then not in dictionary but has suggestions
+				# if '#', then not in dictionary and no suggestions
+				# if '*', then it is a delimiter between text inputs
+				# if '@' then version info
+				if( $chardesc == '&' || $chardesc == '#' ) {
+					$line = explode( " ", $val, 5 );
+					print_words_elem( $line[1], $index, $text_input_index );
+					if( isset( $line[4] )) {
+						$suggs = explode( ", ", $line[4] );
+					} else {
+						$suggs = array();
+					}
+					print_suggs_elem( $suggs, $index, $text_input_index );
+					$index++;
+				} elseif( $chardesc == '*' ) {
+					$text_input_index++;
+					print_textindex_decl( $text_input_index );
+					$index = 0;
+				} elseif( $chardesc != '@' && $chardesc != "" ) {
+					# assume this is error output
+					$aspell_err .= $val;
+				}
+			}
+			if( $aspell_err ) {
+				$aspell_err = "Error executing `$cmd`\\n$aspell_err";
+				error_handler( $aspell_err );
+			}
+		} else {
+			error_handler( "System error: Aspell program execution failed (`$cmd`)" );
+		}
+	} else {
+		error_handler( "System error: Could not open file '$tempfile' for writing" );
+	}
+
+	# close temp file, delete file
+	unlink( $tempfile );
+}
+
+
+?>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<link rel="stylesheet" type="text/css" href="<?php echo $spellercss ?>" />
+<script language="javascript" src="<?php echo $word_win_src ?>"></script>
+<script language="javascript">
+var suggs = new Array();
+var words = new Array();
+var textinputs = new Array();
+var error;
+<?php
+
+print_textinputs_var();
+
+print_checker_results();
+
+?>
+
+var wordWindowObj = new wordWindow();
+wordWindowObj.originalSpellings = words;
+wordWindowObj.suggestions = suggs;
+wordWindowObj.textInputs = textinputs;
+
+function init_spell() {
+	// check if any error occured during server-side processing
+	if( error ) {
+		alert( error );
+	} else {
+		// call the init_spell() function in the parent frameset
+		if (parent.frames.length) {
+			parent.init_spell( wordWindowObj );
+		} else {
+			alert('This page was loaded outside of a frameset. It might not display properly');
+		}
+	}
+}
+
+
+
+</script>
+
+</head>
+<!-- <body onLoad="init_spell();">		by FredCK -->
+<body onLoad="init_spell();" bgcolor="#ffffff">
+
+<script type="text/javascript">
+wordWindowObj.writeBody();
+</script>
+
+</body>
+</html>
+
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.pl
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.pl	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.pl	(revision 1280)
@@ -0,0 +1,180 @@
+#!/usr/bin/perl
+
+use CGI qw/ :standard /;
+use File::Temp qw/ tempfile tempdir /;
+
+# my $spellercss = '/speller/spellerStyle.css';					# by FredCK
+my $spellercss = '../spellerStyle.css';							# by FredCK
+# my $wordWindowSrc = '/speller/wordWindow.js';					# by FredCK
+my $wordWindowSrc = '../wordWindow.js';							# by FredCK
+my @textinputs = param( 'textinputs[]' ); # array
+# my $aspell_cmd = 'aspell';									# by FredCK (for Linux)
+my $aspell_cmd = '"C:\Program Files\Aspell\bin\aspell.exe"';	# by FredCK (for Windows)
+my $lang = 'en_US';
+# my $aspell_opts = "-a --lang=$lang --encoding=utf-8";			# by FredCK
+my $aspell_opts = "-a --lang=$lang --encoding=utf-8 -H --rem-sgml-check=alt";		# by FredCK
+my $input_separator = "A";
+
+# set the 'wordtext' JavaScript variable to the submitted text.
+sub printTextVar {
+	for( my $i = 0; $i <= $#textinputs; $i++ ) {
+	        print "textinputs[$i] = decodeURIComponent('" . escapeQuote( $textinputs[$i] ) . "')\n";
+	}
+}
+
+sub printTextIdxDecl {
+	my $idx = shift;
+	print "words[$idx] = [];\n";
+	print "suggs[$idx] = [];\n";
+}
+
+sub printWordsElem {
+	my( $textIdx, $wordIdx, $word ) = @_;
+	print "words[$textIdx][$wordIdx] = '" . escapeQuote( $word ) . "';\n";
+}
+
+sub printSuggsElem {
+	my( $textIdx, $wordIdx, @suggs ) = @_;
+	print "suggs[$textIdx][$wordIdx] = [";
+	for my $i ( 0..$#suggs ) {
+		print "'" . escapeQuote( $suggs[$i] ) . "'";
+		if( $i < $#suggs ) {
+			print ", ";
+		}
+	}
+	print "];\n";
+}
+
+sub printCheckerResults {
+	my $textInputIdx = -1;
+	my $wordIdx = 0;
+	my $unhandledText;
+	# create temp file
+	my $dir = tempdir( CLEANUP => 1 );
+	my( $fh, $tmpfilename ) = tempfile( DIR => $dir );
+
+	# temp file was created properly?
+
+	# open temp file, add the submitted text.
+	for( my $i = 0; $i <= $#textinputs; $i++ ) {
+		$text = url_decode( $textinputs[$i] );
+		@lines = split( /\n/, $text );
+		print $fh "\%\n"; # exit terse mode
+		print $fh "^$input_separator\n";
+		print $fh "!\n";  # enter terse mode
+		for my $line ( @lines ) {
+			# use carat on each line to escape possible aspell commands
+			print $fh "^$line\n";
+		}
+
+	}
+	# exec aspell command
+	my $cmd = "$aspell_cmd $aspell_opts < $tmpfilename 2>&1";
+	open ASPELL, "$cmd |" or handleError( "Could not execute `$cmd`\\n$!" ) and return;
+	# parse each line of aspell return
+	for my $ret ( <ASPELL> ) {
+		chomp( $ret );
+		# if '&', then not in dictionary but has suggestions
+		# if '#', then not in dictionary and no suggestions
+		# if '*', then it is a delimiter between text inputs
+		if( $ret =~ /^\*/ ) {
+			$textInputIdx++;
+			printTextIdxDecl( $textInputIdx );
+			$wordIdx = 0;
+
+		} elsif( $ret =~ /^(&|#)/ ) {
+			my @tokens = split( " ", $ret, 5 );
+			printWordsElem( $textInputIdx, $wordIdx, $tokens[1] );
+			my @suggs = ();
+			if( $tokens[4] ) {
+				@suggs = split( ", ", $tokens[4] );
+			}
+			printSuggsElem( $textInputIdx, $wordIdx, @suggs );
+			$wordIdx++;
+		} else {
+			$unhandledText .= $ret;
+		}
+	}
+	close ASPELL or handleError( "Error executing `$cmd`\\n$unhandledText" ) and return;
+}
+
+sub escapeQuote {
+	my $str = shift;
+	$str =~ s/'/\\'/g;
+	return $str;
+}
+
+sub handleError {
+	my $err = shift;
+	print "error = '" . escapeQuote( $err ) . "';\n";
+}
+
+sub url_decode {
+	local $_ = @_ ? shift : $_;
+	defined or return;
+	# change + signs to spaces
+	tr/+/ /;
+	# change hex escapes to the proper characters
+	s/%([a-fA-F0-9]{2})/pack "H2", $1/eg;
+	return $_;
+}
+
+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
+# Display HTML
+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
+
+print <<EOF;
+Content-type: text/html; charset=utf-8
+
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<link rel="stylesheet" type="text/css" href="$spellercss"/>
+<script src="$wordWindowSrc"></script>
+<script type="text/javascript">
+var suggs = new Array();
+var words = new Array();
+var textinputs = new Array();
+var error;
+EOF
+
+printTextVar();
+
+printCheckerResults();
+
+print <<EOF;
+var wordWindowObj = new wordWindow();
+wordWindowObj.originalSpellings = words;
+wordWindowObj.suggestions = suggs;
+wordWindowObj.textInputs = textinputs;
+
+
+function init_spell() {
+	// check if any error occured during server-side processing
+	if( error ) {
+		alert( error );
+	} else {
+		// call the init_spell() function in the parent frameset
+		if (parent.frames.length) {
+			parent.init_spell( wordWindowObj );
+		} else {
+			error = "This page was loaded outside of a frameset. ";
+			error += "It might not display properly";
+			alert( error );
+		}
+	}
+}
+
+</script>
+
+</head>
+<body onLoad="init_spell();">
+
+<script type="text/javascript">
+wordWindowObj.writeBody();
+</script>
+
+</body>
+</html>
+EOF
+
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellChecker.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellChecker.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellChecker.js	(revision 1280)
@@ -0,0 +1,462 @@
+﻿////////////////////////////////////////////////////
+// spellChecker.js
+//
+// spellChecker object
+//
+// This file is sourced on web pages that have a textarea object to evaluate
+// for spelling. It includes the implementation for the spellCheckObject.
+//
+////////////////////////////////////////////////////
+
+
+// constructor
+function spellChecker( textObject ) {
+
+	// public properties - configurable
+//	this.popUpUrl = '/speller/spellchecker.html';							// by FredCK
+	this.popUpUrl = 'fck_spellerpages/spellerpages/spellchecker.html';		// by FredCK
+	this.popUpName = 'spellchecker';
+//	this.popUpProps = "menu=no,width=440,height=350,top=70,left=120,resizable=yes,status=yes";	// by FredCK
+	this.popUpProps = null ;																	// by FredCK
+//	this.spellCheckScript = '/speller/server-scripts/spellchecker.php';		// by FredCK
+	//this.spellCheckScript = '/cgi-bin/spellchecker.pl';
+
+	// values used to keep track of what happened to a word
+	this.replWordFlag = "R";	// single replace
+	this.ignrWordFlag = "I";	// single ignore
+	this.replAllFlag = "RA";	// replace all occurances
+	this.ignrAllFlag = "IA";	// ignore all occurances
+	this.fromReplAll = "~RA";	// an occurance of a "replace all" word
+	this.fromIgnrAll = "~IA";	// an occurance of a "ignore all" word
+	// properties set at run time
+	this.wordFlags = new Array();
+	this.currentTextIndex = 0;
+	this.currentWordIndex = 0;
+	this.spellCheckerWin = null;
+	this.controlWin = null;
+	this.wordWin = null;
+	this.textArea = textObject;	// deprecated
+	this.textInputs = arguments;
+
+	// private methods
+	this._spellcheck = _spellcheck;
+	this._getSuggestions = _getSuggestions;
+	this._setAsIgnored = _setAsIgnored;
+	this._getTotalReplaced = _getTotalReplaced;
+	this._setWordText = _setWordText;
+	this._getFormInputs = _getFormInputs;
+
+	// public methods
+	this.openChecker = openChecker;
+	this.startCheck = startCheck;
+	this.checkTextBoxes = checkTextBoxes;
+	this.checkTextAreas = checkTextAreas;
+	this.spellCheckAll = spellCheckAll;
+	this.ignoreWord = ignoreWord;
+	this.ignoreAll = ignoreAll;
+	this.replaceWord = replaceWord;
+	this.replaceAll = replaceAll;
+	this.terminateSpell = terminateSpell;
+	this.undo = undo;
+
+	// set the current window's "speller" property to the instance of this class.
+	// this object can now be referenced by child windows/frames.
+	window.speller = this;
+}
+
+// call this method to check all text boxes (and only text boxes) in the HTML document
+function checkTextBoxes() {
+	this.textInputs = this._getFormInputs( "^text$" );
+	this.openChecker();
+}
+
+// call this method to check all textareas (and only textareas ) in the HTML document
+function checkTextAreas() {
+	this.textInputs = this._getFormInputs( "^textarea$" );
+	this.openChecker();
+}
+
+// call this method to check all text boxes and textareas in the HTML document
+function spellCheckAll() {
+	this.textInputs = this._getFormInputs( "^text(area)?$" );
+	this.openChecker();
+}
+
+// call this method to check text boxe(s) and/or textarea(s) that were passed in to the
+// object's constructor or to the textInputs property
+function openChecker() {
+	this.spellCheckerWin = window.open( this.popUpUrl, this.popUpName, this.popUpProps );
+	if( !this.spellCheckerWin.opener ) {
+		this.spellCheckerWin.opener = window;
+	}
+}
+
+function startCheck( wordWindowObj, controlWindowObj ) {
+
+	// set properties from args
+	this.wordWin = wordWindowObj;
+	this.controlWin = controlWindowObj;
+
+	// reset properties
+	this.wordWin.resetForm();
+	this.controlWin.resetForm();
+	this.currentTextIndex = 0;
+	this.currentWordIndex = 0;
+	// initialize the flags to an array - one element for each text input
+	this.wordFlags = new Array( this.wordWin.textInputs.length );
+	// each element will be an array that keeps track of each word in the text
+	for( var i=0; i<this.wordFlags.length; i++ ) {
+		this.wordFlags[i] = [];
+	}
+
+	// start
+	this._spellcheck();
+
+	return true;
+}
+
+function ignoreWord() {
+	var wi = this.currentWordIndex;
+	var ti = this.currentTextIndex;
+	if( !this.wordWin ) {
+		alert( 'Error: Word frame not available.' );
+		return false;
+	}
+	if( !this.wordWin.getTextVal( ti, wi )) {
+		alert( 'Error: "Not in dictionary" text is missing.' );
+		return false;
+	}
+	// set as ignored
+	if( this._setAsIgnored( ti, wi, this.ignrWordFlag )) {
+		this.currentWordIndex++;
+		this._spellcheck();
+	}
+	return true;
+}
+
+function ignoreAll() {
+	var wi = this.currentWordIndex;
+	var ti = this.currentTextIndex;
+	if( !this.wordWin ) {
+		alert( 'Error: Word frame not available.' );
+		return false;
+	}
+	// get the word that is currently being evaluated.
+	var s_word_to_repl = this.wordWin.getTextVal( ti, wi );
+	if( !s_word_to_repl ) {
+		alert( 'Error: "Not in dictionary" text is missing' );
+		return false;
+	}
+
+	// set this word as an "ignore all" word.
+	this._setAsIgnored( ti, wi, this.ignrAllFlag );
+
+	// loop through all the words after this word
+	for( var i = ti; i < this.wordWin.textInputs.length; i++ ) {
+		for( var j = 0; j < this.wordWin.totalWords( i ); j++ ) {
+			if(( i == ti && j > wi ) || i > ti ) {
+				// future word: set as "from ignore all" if
+				// 1) do not already have a flag and
+				// 2) have the same value as current word
+				if(( this.wordWin.getTextVal( i, j ) == s_word_to_repl )
+				&& ( !this.wordFlags[i][j] )) {
+					this._setAsIgnored( i, j, this.fromIgnrAll );
+				}
+			}
+		}
+	}
+
+	// finally, move on
+	this.currentWordIndex++;
+	this._spellcheck();
+	return true;
+}
+
+function replaceWord() {
+	var wi = this.currentWordIndex;
+	var ti = this.currentTextIndex;
+	if( !this.wordWin ) {
+		alert( 'Error: Word frame not available.' );
+		return false;
+	}
+	if( !this.wordWin.getTextVal( ti, wi )) {
+		alert( 'Error: "Not in dictionary" text is missing' );
+		return false;
+	}
+	if( !this.controlWin.replacementText ) {
+		return false ;
+	}
+	var txt = this.controlWin.replacementText;
+	if( txt.value ) {
+		var newspell = new String( txt.value );
+		if( this._setWordText( ti, wi, newspell, this.replWordFlag )) {
+			this.currentWordIndex++;
+			this._spellcheck();
+		}
+	}
+	return true;
+}
+
+function replaceAll() {
+	var ti = this.currentTextIndex;
+	var wi = this.currentWordIndex;
+	if( !this.wordWin ) {
+		alert( 'Error: Word frame not available.' );
+		return false;
+	}
+	var s_word_to_repl = this.wordWin.getTextVal( ti, wi );
+	if( !s_word_to_repl ) {
+		alert( 'Error: "Not in dictionary" text is missing' );
+		return false;
+	}
+	var txt = this.controlWin.replacementText;
+	if( !txt.value ) return false;
+	var newspell = new String( txt.value );
+
+	// set this word as a "replace all" word.
+	this._setWordText( ti, wi, newspell, this.replAllFlag );
+
+	// loop through all the words after this word
+	for( var i = ti; i < this.wordWin.textInputs.length; i++ ) {
+		for( var j = 0; j < this.wordWin.totalWords( i ); j++ ) {
+			if(( i == ti && j > wi ) || i > ti ) {
+				// future word: set word text to s_word_to_repl if
+				// 1) do not already have a flag and
+				// 2) have the same value as s_word_to_repl
+				if(( this.wordWin.getTextVal( i, j ) == s_word_to_repl )
+				&& ( !this.wordFlags[i][j] )) {
+					this._setWordText( i, j, newspell, this.fromReplAll );
+				}
+			}
+		}
+	}
+
+	// finally, move on
+	this.currentWordIndex++;
+	this._spellcheck();
+	return true;
+}
+
+function terminateSpell() {
+	// called when we have reached the end of the spell checking.
+	var msg = "";		// by FredCK
+	var numrepl = this._getTotalReplaced();
+	if( numrepl == 0 ) {
+		// see if there were no misspellings to begin with
+		if( !this.wordWin ) {
+			msg = "";
+		} else {
+			if( this.wordWin.totalMisspellings() ) {
+//				msg += "No words changed.";			// by FredCK
+				msg += FCKLang.DlgSpellNoChanges ;	// by FredCK
+			} else {
+//				msg += "No misspellings found.";	// by FredCK
+				msg += FCKLang.DlgSpellNoMispell ;	// by FredCK
+			}
+		}
+	} else if( numrepl == 1 ) {
+//		msg += "One word changed.";			// by FredCK
+		msg += FCKLang.DlgSpellOneChange ;	// by FredCK
+	} else {
+//		msg += numrepl + " words changed.";	// by FredCK
+		msg += FCKLang.DlgSpellManyChanges.replace( /%1/g, numrepl ) ;
+	}
+	if( msg ) {
+//		msg += "\n";	// by FredCK
+		alert( msg );
+	}
+
+	if( numrepl > 0 ) {
+		// update the text field(s) on the opener window
+		for( var i = 0; i < this.textInputs.length; i++ ) {
+			// this.textArea.value = this.wordWin.text;
+			if( this.wordWin ) {
+				if( this.wordWin.textInputs[i] ) {
+					this.textInputs[i].value = this.wordWin.textInputs[i];
+				}
+			}
+		}
+	}
+
+	// return back to the calling window
+//	this.spellCheckerWin.close();					// by FredCK
+	if ( typeof( this.OnFinished ) == 'function' )	// by FredCK
+		this.OnFinished(numrepl) ;					// by FredCK
+
+	return true;
+}
+
+function undo() {
+	// skip if this is the first word!
+	var ti = this.currentTextIndex;
+	var wi = this.currentWordIndex;
+
+	if( this.wordWin.totalPreviousWords( ti, wi ) > 0 ) {
+		this.wordWin.removeFocus( ti, wi );
+
+		// go back to the last word index that was acted upon
+		do {
+			// if the current word index is zero then reset the seed
+			if( this.currentWordIndex == 0 && this.currentTextIndex > 0 ) {
+				this.currentTextIndex--;
+				this.currentWordIndex = this.wordWin.totalWords( this.currentTextIndex )-1;
+				if( this.currentWordIndex < 0 ) this.currentWordIndex = 0;
+			} else {
+				if( this.currentWordIndex > 0 ) {
+					this.currentWordIndex--;
+				}
+			}
+		} while (
+			this.wordWin.totalWords( this.currentTextIndex ) == 0
+			|| this.wordFlags[this.currentTextIndex][this.currentWordIndex] == this.fromIgnrAll
+			|| this.wordFlags[this.currentTextIndex][this.currentWordIndex] == this.fromReplAll
+		);
+
+		var text_idx = this.currentTextIndex;
+		var idx = this.currentWordIndex;
+		var preReplSpell = this.wordWin.originalSpellings[text_idx][idx];
+
+		// if we got back to the first word then set the Undo button back to disabled
+		if( this.wordWin.totalPreviousWords( text_idx, idx ) == 0 ) {
+			this.controlWin.disableUndo();
+		}
+
+		var i, j, origSpell ;
+		// examine what happened to this current word.
+		switch( this.wordFlags[text_idx][idx] ) {
+			// replace all: go through this and all the future occurances of the word
+			// and revert them all to the original spelling and clear their flags
+			case this.replAllFlag :
+				for( i = text_idx; i < this.wordWin.textInputs.length; i++ ) {
+					for( j = 0; j < this.wordWin.totalWords( i ); j++ ) {
+						if(( i == text_idx && j >= idx ) || i > text_idx ) {
+							origSpell = this.wordWin.originalSpellings[i][j];
+							if( origSpell == preReplSpell ) {
+								this._setWordText ( i, j, origSpell, undefined );
+							}
+						}
+					}
+				}
+				break;
+
+			// ignore all: go through all the future occurances of the word
+			// and clear their flags
+			case this.ignrAllFlag :
+				for( i = text_idx; i < this.wordWin.textInputs.length; i++ ) {
+					for( j = 0; j < this.wordWin.totalWords( i ); j++ ) {
+						if(( i == text_idx && j >= idx ) || i > text_idx ) {
+							origSpell = this.wordWin.originalSpellings[i][j];
+							if( origSpell == preReplSpell ) {
+								this.wordFlags[i][j] = undefined;
+							}
+						}
+					}
+				}
+				break;
+
+			// replace: revert the word to its original spelling
+			case this.replWordFlag :
+				this._setWordText ( text_idx, idx, preReplSpell, undefined );
+				break;
+		}
+
+		// For all four cases, clear the wordFlag of this word. re-start the process
+		this.wordFlags[text_idx][idx] = undefined;
+		this._spellcheck();
+	}
+}
+
+function _spellcheck() {
+	var ww = this.wordWin;
+
+	// check if this is the last word in the current text element
+	if( this.currentWordIndex == ww.totalWords( this.currentTextIndex) ) {
+		this.currentTextIndex++;
+		this.currentWordIndex = 0;
+		// keep going if we're not yet past the last text element
+		if( this.currentTextIndex < this.wordWin.textInputs.length ) {
+			this._spellcheck();
+			return;
+		} else {
+			this.terminateSpell();
+			return;
+		}
+	}
+
+	// if this is after the first one make sure the Undo button is enabled
+	if( this.currentWordIndex > 0 ) {
+		this.controlWin.enableUndo();
+	}
+
+	// skip the current word if it has already been worked on
+	if( this.wordFlags[this.currentTextIndex][this.currentWordIndex] ) {
+		// increment the global current word index and move on.
+		this.currentWordIndex++;
+		this._spellcheck();
+	} else {
+		var evalText = ww.getTextVal( this.currentTextIndex, this.currentWordIndex );
+		if( evalText ) {
+			this.controlWin.evaluatedText.value = evalText;
+			ww.setFocus( this.currentTextIndex, this.currentWordIndex );
+			this._getSuggestions( this.currentTextIndex, this.currentWordIndex );
+		}
+	}
+}
+
+function _getSuggestions( text_num, word_num ) {
+	this.controlWin.clearSuggestions();
+	// add suggestion in list for each suggested word.
+	// get the array of suggested words out of the
+	// three-dimensional array containing all suggestions.
+	var a_suggests = this.wordWin.suggestions[text_num][word_num];
+	if( a_suggests ) {
+		// got an array of suggestions.
+		for( var ii = 0; ii < a_suggests.length; ii++ ) {
+			this.controlWin.addSuggestion( a_suggests[ii] );
+		}
+	}
+	this.controlWin.selectDefaultSuggestion();
+}
+
+function _setAsIgnored( text_num, word_num, flag ) {
+	// set the UI
+	this.wordWin.removeFocus( text_num, word_num );
+	// do the bookkeeping
+	this.wordFlags[text_num][word_num] = flag;
+	return true;
+}
+
+function _getTotalReplaced() {
+	var i_replaced = 0;
+	for( var i = 0; i < this.wordFlags.length; i++ ) {
+		for( var j = 0; j < this.wordFlags[i].length; j++ ) {
+			if(( this.wordFlags[i][j] == this.replWordFlag )
+			|| ( this.wordFlags[i][j] == this.replAllFlag )
+			|| ( this.wordFlags[i][j] == this.fromReplAll )) {
+				i_replaced++;
+			}
+		}
+	}
+	return i_replaced;
+}
+
+function _setWordText( text_num, word_num, newText, flag ) {
+	// set the UI and form inputs
+	this.wordWin.setText( text_num, word_num, newText );
+	// keep track of what happened to this word:
+	this.wordFlags[text_num][word_num] = flag;
+	return true;
+}
+
+function _getFormInputs( inputPattern ) {
+	var inputs = new Array();
+	for( var i = 0; i < document.forms.length; i++ ) {
+		for( var j = 0; j < document.forms[i].elements.length; j++ ) {
+			if( document.forms[i].elements[j].type.match( inputPattern )) {
+				inputs[inputs.length] = document.forms[i].elements[j];
+			}
+		}
+	}
+	return inputs;
+}
+
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellchecker.html
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellchecker.html	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellchecker.html	(revision 1280)
@@ -0,0 +1,71 @@
+
+<script>
+
+var wordWindow = null;
+var controlWindow = null;
+
+function init_spell( spellerWindow ) {
+
+	if( spellerWindow ) {
+		if( spellerWindow.windowType == "wordWindow" ) {
+			wordWindow = spellerWindow;
+		} else if ( spellerWindow.windowType == "controlWindow" ) {
+			controlWindow = spellerWindow;
+		}
+	}
+
+	if( controlWindow && wordWindow ) {
+		// populate the speller object and start it off!
+		var speller = opener.speller;
+		wordWindow.speller = speller;
+		speller.startCheck( wordWindow, controlWindow );
+	}
+}
+
+// encodeForPost
+function encodeForPost( str ) {
+	var s = new String( str );
+	s = encodeURIComponent( s );
+	// additionally encode single quotes to evade any PHP
+	// magic_quotes_gpc setting (it inserts escape characters and
+	// therefore skews the btye positions of misspelled words)
+	return s.replace( /\'/g, '%27' );
+}
+
+// post the text area data to the script that populates the speller
+function postWords() {
+	var bodyDoc = window.frames[0].document;
+	bodyDoc.open();
+	bodyDoc.write('<html>');
+	bodyDoc.write('<meta http-equiv="Content-Type" content="text/html; charset=utf-8">');
+	bodyDoc.write('<link rel="stylesheet" type="text/css" href="spellerStyle.css"/>');
+	if (opener) {
+		var speller = opener.speller;
+		bodyDoc.write('<body class="normalText" onLoad="document.forms[0].submit();">');
+		bodyDoc.write('<p>' + window.parent.FCKLang.DlgSpellProgress + '<\/p>');		// by FredCK
+		bodyDoc.write('<form action="'+speller.spellCheckScript+'" method="post">');
+		for( var i = 0; i < speller.textInputs.length; i++ ) {
+			bodyDoc.write('<input type="hidden" name="textinputs[]" value="'+encodeForPost(speller.textInputs[i].value)+'">');
+		}
+		bodyDoc.write('<\/form>');
+		bodyDoc.write('<\/body>');
+	} else {
+		bodyDoc.write('<body class="normalText">');
+		bodyDoc.write('<p><b>This page cannot be displayed<\/b><\/p><p>The window was not opened from another window.<\/p>');
+		bodyDoc.write('<\/body>');
+	}
+	bodyDoc.write('<\/html>');
+	bodyDoc.close();
+}
+</script>
+
+<html>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<head>
+<title>Speller Pages</title>
+</head>
+<frameset rows="*,201" onLoad="postWords();">
+<frame src="blank.html">
+<frame src="controls.html">
+</frameset>
+</html>
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellerStyle.css
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellerStyle.css	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellerStyle.css	(revision 1280)
@@ -0,0 +1,49 @@
+.blend {
+	font-family: courier new;
+	font-size: 10pt;
+	border: 0;
+	margin-bottom:-1;
+}
+.normalLabel {
+	font-size:8pt;
+}
+.normalText {
+	font-family:arial, helvetica, sans-serif;
+	font-size:10pt;
+	color:000000;
+	background-color:FFFFFF;
+}
+.plainText {
+	font-family: courier new, courier, monospace;
+	font-size: 10pt;
+	color:000000;
+	background-color:FFFFFF;
+}
+.controlWindowBody {
+	font-family:arial, helvetica, sans-serif;
+	font-size:8pt;
+	padding: 7px ;		/* by FredCK */
+	margin: 0px ;		/* by FredCK */
+	/* color:000000;				by FredCK */
+	/* background-color:DADADA;		by FredCK */
+}
+.readonlyInput {
+	background-color:DADADA;
+	color:000000;
+	font-size:8pt;
+	width:392px;
+}
+.textDefault {
+	font-size:8pt;
+	width: 200px;
+}
+.buttonDefault {
+	width:90px;
+	height:22px;
+	font-size:8pt;
+}
+.suggSlct {
+	width:200px;
+	margin-top:2;
+	font-size:8pt;
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_spellerpages/spellerpages/wordWindow.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_spellerpages/spellerpages/wordWindow.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_spellerpages/spellerpages/wordWindow.js	(revision 1280)
@@ -0,0 +1,272 @@
+﻿////////////////////////////////////////////////////
+// wordWindow object
+////////////////////////////////////////////////////
+function wordWindow() {
+	// private properties
+	this._forms = [];
+
+	// private methods
+	this._getWordObject = _getWordObject;
+	//this._getSpellerObject = _getSpellerObject;
+	this._wordInputStr = _wordInputStr;
+	this._adjustIndexes = _adjustIndexes;
+	this._isWordChar = _isWordChar;
+	this._lastPos = _lastPos;
+
+	// public properties
+	this.wordChar = /[a-zA-Z]/;
+	this.windowType = "wordWindow";
+	this.originalSpellings = new Array();
+	this.suggestions = new Array();
+	this.checkWordBgColor = "pink";
+	this.normWordBgColor = "white";
+	this.text = "";
+	this.textInputs = new Array();
+	this.indexes = new Array();
+	//this.speller = this._getSpellerObject();
+
+	// public methods
+	this.resetForm = resetForm;
+	this.totalMisspellings = totalMisspellings;
+	this.totalWords = totalWords;
+	this.totalPreviousWords = totalPreviousWords;
+	//this.getTextObjectArray = getTextObjectArray;
+	this.getTextVal = getTextVal;
+	this.setFocus = setFocus;
+	this.removeFocus = removeFocus;
+	this.setText = setText;
+	//this.getTotalWords = getTotalWords;
+	this.writeBody = writeBody;
+	this.printForHtml = printForHtml;
+}
+
+function resetForm() {
+	if( this._forms ) {
+		for( var i = 0; i < this._forms.length; i++ ) {
+			this._forms[i].reset();
+		}
+	}
+	return true;
+}
+
+function totalMisspellings() {
+	var total_words = 0;
+	for( var i = 0; i < this.textInputs.length; i++ ) {
+		total_words += this.totalWords( i );
+	}
+	return total_words;
+}
+
+function totalWords( textIndex ) {
+	return this.originalSpellings[textIndex].length;
+}
+
+function totalPreviousWords( textIndex, wordIndex ) {
+	var total_words = 0;
+	for( var i = 0; i <= textIndex; i++ ) {
+		for( var j = 0; j < this.totalWords( i ); j++ ) {
+			if( i == textIndex && j == wordIndex ) {
+				break;
+			} else {
+				total_words++;
+			}
+		}
+	}
+	return total_words;
+}
+
+//function getTextObjectArray() {
+//	return this._form.elements;
+//}
+
+function getTextVal( textIndex, wordIndex ) {
+	var word = this._getWordObject( textIndex, wordIndex );
+	if( word ) {
+		return word.value;
+	}
+}
+
+function setFocus( textIndex, wordIndex ) {
+	var word = this._getWordObject( textIndex, wordIndex );
+	if( word ) {
+		if( word.type == "text" ) {
+			word.focus();
+			word.style.backgroundColor = this.checkWordBgColor;
+		}
+	}
+}
+
+function removeFocus( textIndex, wordIndex ) {
+	var word = this._getWordObject( textIndex, wordIndex );
+	if( word ) {
+		if( word.type == "text" ) {
+			word.blur();
+			word.style.backgroundColor = this.normWordBgColor;
+		}
+	}
+}
+
+function setText( textIndex, wordIndex, newText ) {
+	var word = this._getWordObject( textIndex, wordIndex );
+	var beginStr;
+	var endStr;
+	if( word ) {
+		var pos = this.indexes[textIndex][wordIndex];
+		var oldText = word.value;
+		// update the text given the index of the string
+		beginStr = this.textInputs[textIndex].substring( 0, pos );
+		endStr = this.textInputs[textIndex].substring(
+			pos + oldText.length,
+			this.textInputs[textIndex].length
+		);
+		this.textInputs[textIndex] = beginStr + newText + endStr;
+
+		// adjust the indexes on the stack given the differences in
+		// length between the new word and old word.
+		var lengthDiff = newText.length - oldText.length;
+		this._adjustIndexes( textIndex, wordIndex, lengthDiff );
+
+		word.size = newText.length;
+		word.value = newText;
+		this.removeFocus( textIndex, wordIndex );
+	}
+}
+
+
+function writeBody() {
+	var d = window.document;
+	var is_html = false;
+
+	d.open();
+
+	// iterate through each text input.
+	for( var txtid = 0; txtid < this.textInputs.length; txtid++ ) {
+		var end_idx = 0;
+		var begin_idx = 0;
+		d.writeln( '<form name="textInput'+txtid+'">' );
+		var wordtxt = this.textInputs[txtid];
+		this.indexes[txtid] = [];
+
+		if( wordtxt ) {
+			var orig = this.originalSpellings[txtid];
+			if( !orig ) break;
+
+			//!!! plain text, or HTML mode?
+			d.writeln( '<div class="plainText">' );
+			// iterate through each occurrence of a misspelled word.
+			for( var i = 0; i < orig.length; i++ ) {
+				// find the position of the current misspelled word,
+				// starting at the last misspelled word.
+				// and keep looking if it's a substring of another word
+				do {
+					begin_idx = wordtxt.indexOf( orig[i], end_idx );
+					end_idx = begin_idx + orig[i].length;
+					// word not found? messed up!
+					if( begin_idx == -1 ) break;
+					// look at the characters immediately before and after
+					// the word. If they are word characters we'll keep looking.
+					var before_char = wordtxt.charAt( begin_idx - 1 );
+					var after_char = wordtxt.charAt( end_idx );
+				} while (
+					this._isWordChar( before_char )
+					|| this._isWordChar( after_char )
+				);
+
+				// keep track of its position in the original text.
+				this.indexes[txtid][i] = begin_idx;
+
+				// write out the characters before the current misspelled word
+				for( var j = this._lastPos( txtid, i ); j < begin_idx; j++ ) {
+					// !!! html mode? make it html compatible
+					d.write( this.printForHtml( wordtxt.charAt( j )));
+				}
+
+				// write out the misspelled word.
+				d.write( this._wordInputStr( orig[i] ));
+
+				// if it's the last word, write out the rest of the text
+				if( i == orig.length-1 ){
+					d.write( printForHtml( wordtxt.substr( end_idx )));
+				}
+			}
+
+			d.writeln( '</div>' );
+
+		}
+		d.writeln( '</form>' );
+	}
+	//for ( var j = 0; j < d.forms.length; j++ ) {
+	//	alert( d.forms[j].name );
+	//	for( var k = 0; k < d.forms[j].elements.length; k++ ) {
+	//		alert( d.forms[j].elements[k].name + ": " + d.forms[j].elements[k].value );
+	//	}
+	//}
+
+	// set the _forms property
+	this._forms = d.forms;
+	d.close();
+}
+
+// return the character index in the full text after the last word we evaluated
+function _lastPos( txtid, idx ) {
+	if( idx > 0 )
+		return this.indexes[txtid][idx-1] + this.originalSpellings[txtid][idx-1].length;
+	else
+		return 0;
+}
+
+function printForHtml( n ) {
+	return n ;		// by FredCK
+/*
+	var htmlstr = n;
+	if( htmlstr.length == 1 ) {
+		// do simple case statement if it's just one character
+		switch ( n ) {
+			case "\n":
+				htmlstr = '<br/>';
+				break;
+			case "<":
+				htmlstr = '&lt;';
+				break;
+			case ">":
+				htmlstr = '&gt;';
+				break;
+		}
+		return htmlstr;
+	} else {
+		htmlstr = htmlstr.replace( /</g, '&lt' );
+		htmlstr = htmlstr.replace( />/g, '&gt' );
+		htmlstr = htmlstr.replace( /\n/g, '<br/>' );
+		return htmlstr;
+	}
+*/
+}
+
+function _isWordChar( letter ) {
+	if( letter.search( this.wordChar ) == -1 ) {
+		return false;
+	} else {
+		return true;
+	}
+}
+
+function _getWordObject( textIndex, wordIndex ) {
+	if( this._forms[textIndex] ) {
+		if( this._forms[textIndex].elements[wordIndex] ) {
+			return this._forms[textIndex].elements[wordIndex];
+		}
+	}
+	return null;
+}
+
+function _wordInputStr( word ) {
+	var str = '<input readonly ';
+	str += 'class="blend" type="text" value="' + word + '" size="' + word.length + '">';
+	return str;
+}
+
+function _adjustIndexes( textIndex, wordIndex, lengthDiff ) {
+	for( var i = wordIndex + 1; i < this.originalSpellings[textIndex].length; i++ ) {
+		this.indexes[textIndex][i] = this.indexes[textIndex][i] + lengthDiff;
+	}
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_table.html
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_table.html	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_table.html	(revision 1280)
@@ -0,0 +1,293 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Table dialog window.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+	<title>Table Properties</title>
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+	<meta name="robots" content="noindex, nofollow" />
+	<script src="common/fck_dialog_common.js" type="text/javascript"></script>
+	<script type="text/javascript">
+
+var oEditor = window.parent.InnerDialogLoaded() ;
+
+// Gets the document DOM
+var oDOM = oEditor.FCK.EditorDocument ;
+
+// Gets the table if there is one selected.
+var table ;
+var e = oEditor.FCKSelection.GetSelectedElement() ;
+
+if ( ( !e && document.location.search.substr(1) == 'Parent' ) || ( e && e.tagName != 'TABLE' ) )
+	e = oEditor.FCKSelection.MoveToAncestorNode( 'TABLE' ) ;
+
+if ( e && e.tagName == "TABLE" )
+	table = e ;
+
+// Fired when the window loading process is finished. It sets the fields with the
+// actual values if a table is selected in the editor.
+window.onload = function()
+{
+	// First of all, translate the dialog box texts
+	oEditor.FCKLanguageManager.TranslatePage(document) ;
+
+	if (table)
+	{
+		document.getElementById('txtRows').value    = table.rows.length ;
+		document.getElementById('txtColumns').value = table.rows[0].cells.length ;
+
+		// Gets the value from the Width or the Style attribute
+		var iWidth  = (table.style.width  ? table.style.width  : table.width ) ;
+		var iHeight = (table.style.height ? table.style.height : table.height ) ;
+
+		if (iWidth.indexOf('%') >= 0)			// Percentual = %
+		{
+			iWidth = parseInt( iWidth.substr(0,iWidth.length - 1), 10 ) ;
+			document.getElementById('selWidthType').value = "percent" ;
+		}
+		else if (iWidth.indexOf('px') >= 0)		// Style Pixel = px
+		{																										  //
+			iWidth = iWidth.substr(0,iWidth.length - 2);
+			document.getElementById('selWidthType').value = "pixels" ;
+		}
+
+		if (iHeight && iHeight.indexOf('px') >= 0)		// Style Pixel = px
+			iHeight = iHeight.substr(0,iHeight.length - 2);
+
+		document.getElementById('txtWidth').value		= iWidth || '' ;
+		document.getElementById('txtHeight').value		= iHeight || '' ;
+		document.getElementById('txtBorder').value		= GetAttribute( table, 'border', '' ) ;
+		document.getElementById('selAlignment').value	= GetAttribute( table, 'align', '' ) ;
+		document.getElementById('txtCellPadding').value	= GetAttribute( table, 'cellPadding', '' ) ;
+		document.getElementById('txtCellSpacing').value	= GetAttribute( table, 'cellSpacing', '' ) ;
+		document.getElementById('txtSummary').value     = GetAttribute( table, 'summary', '' ) ;
+//		document.getElementById('cmbFontStyle').value	= table.className ;
+
+		var eCaption = oEditor.FCKDomTools.GetFirstChild( table, 'CAPTION' ) ;
+		if ( eCaption ) document.getElementById('txtCaption').value = eCaption.innerHTML ;
+
+		document.getElementById('txtRows').disabled    = true ;
+		document.getElementById('txtColumns').disabled = true ;
+	}
+
+	window.parent.SetOkButton( true ) ;
+	window.parent.SetAutoSize( true ) ;
+}
+
+// Fired when the user press the OK button
+function Ok()
+{
+	var bExists = ( table != null ) ;
+
+	if ( ! bExists )
+		table = oEditor.FCK.EditorDocument.createElement( "TABLE" ) ;
+
+	// Removes the Width and Height styles
+	if ( bExists && table.style.width )		table.style.width = null ; //.removeAttribute("width") ;
+	if ( bExists && table.style.height )	table.style.height = null ; //.removeAttribute("height") ;
+
+	var sWidth = GetE('txtWidth').value ;
+	if ( sWidth.length > 0 && GetE('selWidthType').value == 'percent' )
+		sWidth += '%' ;
+
+	SetAttribute( table, 'width'		, sWidth ) ;
+	SetAttribute( table, 'height'		, GetE('txtHeight').value ) ;
+	SetAttribute( table, 'border'		, GetE('txtBorder').value ) ;
+	SetAttribute( table, 'align'		, GetE('selAlignment').value ) ;
+	SetAttribute( table, 'cellPadding'	, GetE('txtCellPadding').value ) ;
+	SetAttribute( table, 'cellSpacing'	, GetE('txtCellSpacing').value ) ;
+	SetAttribute( table, 'summary'		, GetE('txtSummary').value ) ;
+
+	var eCaption = oEditor.FCKDomTools.GetFirstChild( table, 'CAPTION' ) ;
+
+	if ( document.getElementById('txtCaption').value != '')
+	{
+		if ( !eCaption )
+		{
+			eCaption = oEditor.FCK.EditorDocument.createElement( 'CAPTION' ) ;
+			table.insertBefore( eCaption, table.firstChild ) ;
+		}
+
+		eCaption.innerHTML = document.getElementById('txtCaption').value ;
+	}
+	else if ( bExists && eCaption )
+	{
+		// TODO: It causes an IE internal error if using removeChild or
+		// table.deleteCaption() (see #505).
+		if ( oEditor.FCKBrowserInfo.IsIE )
+			eCaption.innerHTML = '' ;
+		else
+			eCaption.parentNode.removeChild( eCaption ) ;
+	}
+
+	if (! bExists)
+	{
+		var iRows = document.getElementById('txtRows').value ;
+		var iCols = document.getElementById('txtColumns').value ;
+
+		for ( var r = 0 ; r < iRows ; r++ )
+		{
+			var oRow = table.insertRow(-1) ;
+			for ( var c = 0 ; c < iCols ; c++ )
+			{
+				var oCell = oRow.insertCell(-1) ;
+				if ( oEditor.FCKBrowserInfo.IsGeckoLike )
+					oEditor.FCKTools.AppendBogusBr( oCell ) ;
+			}
+		}
+
+		oEditor.FCKUndo.SaveUndoStep() ;
+
+		oEditor.FCK.InsertElement( table ) ;
+	}
+
+	return true ;
+}
+
+	</script>
+</head>
+<body style="overflow: hidden">
+	<table id="otable" cellspacing="0" cellpadding="0" width="100%" border="0" style="height: 100%">
+		<tr>
+			<td>
+				<table cellspacing="1" cellpadding="1" width="100%" border="0">
+					<tr>
+						<td valign="top">
+							<table cellspacing="0" cellpadding="0" border="0">
+								<tr>
+									<td>
+										<span fcklang="DlgTableRows">Rows</span>:</td>
+									<td>
+										&nbsp;<input id="txtRows" type="text" maxlength="3" size="2" value="3" name="txtRows"
+											onkeypress="return IsDigit(event);" /></td>
+								</tr>
+								<tr>
+									<td>
+										<span fcklang="DlgTableColumns">Columns</span>:</td>
+									<td>
+										&nbsp;<input id="txtColumns" type="text" maxlength="2" size="2" value="2" name="txtColumns"
+											onkeypress="return IsDigit(event);" /></td>
+								</tr>
+								<tr>
+									<td>
+										&nbsp;</td>
+									<td>
+										&nbsp;</td>
+								</tr>
+								<tr>
+									<td>
+										<span fcklang="DlgTableBorder">Border size</span>:</td>
+									<td>
+										&nbsp;<input id="txtBorder" type="text" maxlength="2" size="2" value="1" name="txtBorder"
+											onkeypress="return IsDigit(event);" /></td>
+								</tr>
+								<tr>
+									<td>
+										<span fcklang="DlgTableAlign">Alignment</span>:</td>
+									<td>
+										&nbsp;<select id="selAlignment" name="selAlignment">
+											<option fcklang="DlgTableAlignNotSet" value="" selected="selected">&lt;Not set&gt;</option>
+											<option fcklang="DlgTableAlignLeft" value="left">Left</option>
+											<option fcklang="DlgTableAlignCenter" value="center">Center</option>
+											<option fcklang="DlgTableAlignRight" value="right">Right</option>
+										</select></td>
+								</tr>
+							</table>
+						</td>
+						<td>
+							&nbsp;&nbsp;&nbsp;</td>
+						<td align="right" valign="top">
+							<table cellspacing="0" cellpadding="0" border="0">
+								<tr>
+									<td>
+										<span fcklang="DlgTableWidth">Width</span>:</td>
+									<td>
+										&nbsp;<input id="txtWidth" type="text" maxlength="4" size="3" value="200" name="txtWidth"
+											onkeypress="return IsDigit(event);" /></td>
+									<td>
+										&nbsp;<select id="selWidthType" name="selWidthType">
+											<option fcklang="DlgTableWidthPx" value="pixels" selected="selected">pixels</option>
+											<option fcklang="DlgTableWidthPc" value="percent">percent</option>
+										</select></td>
+								</tr>
+								<tr>
+									<td>
+										<span fcklang="DlgTableHeight">Height</span>:</td>
+									<td>
+										&nbsp;<input id="txtHeight" type="text" maxlength="4" size="3" name="txtHeight" onkeypress="return IsDigit(event);" /></td>
+									<td>
+										&nbsp;<span fcklang="DlgTableWidthPx">pixels</span></td>
+								</tr>
+								<tr>
+									<td>
+										&nbsp;</td>
+									<td>
+										&nbsp;</td>
+									<td>
+										&nbsp;</td>
+								</tr>
+								<tr>
+									<td nowrap="nowrap">
+										<span fcklang="DlgTableCellSpace">Cell spacing</span>:</td>
+									<td>
+										&nbsp;<input id="txtCellSpacing" type="text" maxlength="2" size="2" value="1" name="txtCellSpacing"
+											onkeypress="return IsDigit(event);" /></td>
+									<td>
+										&nbsp;</td>
+								</tr>
+								<tr>
+									<td nowrap="nowrap">
+										<span fcklang="DlgTableCellPad">Cell padding</span>:</td>
+									<td>
+										&nbsp;<input id="txtCellPadding" type="text" maxlength="2" size="2" value="1" name="txtCellPadding"
+											onkeypress="return IsDigit(event);" /></td>
+									<td>
+										&nbsp;</td>
+								</tr>
+							</table>
+						</td>
+					</tr>
+				</table>
+				<table cellspacing="0" cellpadding="0" width="100%" border="0">
+					<tr>
+						<td nowrap="nowrap">
+							<span fcklang="DlgTableCaption">Caption</span>:&nbsp;</td>
+						<td>
+							&nbsp;</td>
+						<td width="100%" nowrap="nowrap">
+							<input id="txtCaption" type="text" style="width: 100%" /></td>
+					</tr>
+					<tr>
+						<td nowrap="nowrap">
+							<span fcklang="DlgTableSummary">Summary</span>:&nbsp;</td>
+						<td>
+							&nbsp;</td>
+						<td width="100%" nowrap="nowrap">
+							<input id="txtSummary" type="text" style="width: 100%" /></td>
+					</tr>
+				</table>
+			</td>
+		</tr>
+	</table>
+</body>
+</html>
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_tablecell.html
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_tablecell.html	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_tablecell.html	(revision 1280)
@@ -0,0 +1,255 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Cell properties dialog window.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+	<title>Table Cell Properties</title>
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+	<meta name="robots" content="noindex, nofollow" />
+	<script src="common/fck_dialog_common.js" type="text/javascript"></script>
+	<script type="text/javascript">
+
+var oEditor = window.parent.InnerDialogLoaded() ;
+
+// Gets the document DOM
+var oDOM = oEditor.FCK.EditorDocument ;
+
+// Array of selected Cells
+var aCells = oEditor.FCKTableHandler.GetSelectedCells() ;
+
+window.onload = function()
+{
+	// First of all, translate the dialog box texts
+	oEditor.FCKLanguageManager.TranslatePage( document ) ;
+
+	SetStartupValue() ;
+
+	window.parent.SetOkButton( true ) ;
+	window.parent.SetAutoSize( true ) ;
+}
+
+function SetStartupValue()
+{
+	if ( aCells.length > 0 )
+	{
+		var oCell = aCells[0] ;
+		var iWidth = GetAttribute( oCell, 'width' ) ;
+
+		if ( iWidth.indexOf && iWidth.indexOf( '%' ) >= 0 )
+		{
+			iWidth = iWidth.substr( 0, iWidth.length - 1 ) ;
+			GetE('selWidthType').value = 'percent' ;
+		}
+
+		if ( oCell.attributes['noWrap'] != null && oCell.attributes['noWrap'].specified )
+			GetE('selWordWrap').value = !oCell.noWrap ;
+
+		GetE('txtWidth').value			= iWidth ;
+		GetE('txtHeight').value			= GetAttribute( oCell, 'height' ) ;
+		GetE('selHAlign').value			= GetAttribute( oCell, 'align' ) ;
+		GetE('selVAlign').value			= GetAttribute( oCell, 'vAlign' ) ;
+		GetE('txtRowSpan').value		= GetAttribute( oCell, 'rowSpan' ) ;
+		GetE('txtCollSpan').value		= GetAttribute( oCell, 'colSpan' ) ;
+		GetE('txtBackColor').value		= GetAttribute( oCell, 'bgColor' ) ;
+		GetE('txtBorderColor').value	= GetAttribute( oCell, 'borderColor' ) ;
+//		GetE('cmbFontStyle').value		= oCell.className ;
+	}
+}
+
+// Fired when the user press the OK button
+function Ok()
+{
+	for( i = 0 ; i < aCells.length ; i++ )
+	{
+		if ( GetE('txtWidth').value.length > 0 )
+			aCells[i].width	= GetE('txtWidth').value + ( GetE('selWidthType').value == 'percent' ? '%' : '') ;
+		else
+			aCells[i].removeAttribute( 'width', 0 ) ;
+
+		if ( GetE('selWordWrap').value == 'false' )
+			SetAttribute( aCells[i], 'noWrap', 'nowrap' ) ;  
+		else
+			aCells[i].removeAttribute( 'noWrap' ) ;
+
+		SetAttribute( aCells[i], 'height'		, GetE('txtHeight').value ) ;
+		SetAttribute( aCells[i], 'align'		, GetE('selHAlign').value ) ;
+		SetAttribute( aCells[i], 'vAlign'		, GetE('selVAlign').value ) ;
+		SetAttribute( aCells[i], 'rowSpan'		, GetE('txtRowSpan').value ) ;
+		SetAttribute( aCells[i], 'colSpan'		, GetE('txtCollSpan').value ) ;
+		SetAttribute( aCells[i], 'bgColor'		, GetE('txtBackColor').value ) ;
+		SetAttribute( aCells[i], 'borderColor'	, GetE('txtBorderColor').value ) ;
+//		SetAttribute( aCells[i], 'className'	, GetE('cmbFontStyle').value ) ;
+	}
+
+	return true ;
+}
+
+function SelectBackColor( color )
+{
+	if ( color && color.length > 0 )
+		GetE('txtBackColor').value = color ;
+}
+
+function SelectBorderColor( color )
+{
+	if ( color && color.length > 0 )
+		GetE('txtBorderColor').value = color ;
+}
+
+function SelectColor( wich )
+{
+	oEditor.FCKDialog.OpenDialog( 'FCKDialog_Color', oEditor.FCKLang.DlgColorTitle, 'dialog/fck_colorselector.html', 400, 330, wich == 'Back' ? SelectBackColor : SelectBorderColor, window ) ;
+}
+
+	</script>
+</head>
+<body scroll="no" style="overflow: hidden">
+	<table cellspacing="0" cellpadding="0" width="100%" border="0" height="100%">
+		<tr>
+			<td>
+				<table cellspacing="1" cellpadding="1" width="100%" border="0">
+					<tr>
+						<td>
+							<table cellspacing="0" cellpadding="0" border="0">
+								<tr>
+									<td nowrap="nowrap">
+										<span fcklang="DlgCellWidth">Width</span>:</td>
+									<td>
+										&nbsp;<input onkeypress="return IsDigit(event);" id="txtWidth" type="text" maxlength="4"
+											size="3" name="txtWidth" />&nbsp;<select id="selWidthType" name="selWidthType">
+												<option fcklang="DlgCellWidthPx" value="pixels" selected="selected">pixels</option>
+												<option fcklang="DlgCellWidthPc" value="percent">percent</option>
+											</select></td>
+								</tr>
+								<tr>
+									<td nowrap="nowrap">
+										<span fcklang="DlgCellHeight">Height</span>:</td>
+									<td>
+										&nbsp;<input id="txtHeight" type="text" maxlength="4" size="3" name="txtHeight" onkeypress="return IsDigit(event);" />&nbsp;<span
+											fcklang="DlgCellWidthPx">pixels</span></td>
+								</tr>
+								<tr>
+									<td>
+										&nbsp;</td>
+									<td>
+										&nbsp;</td>
+								</tr>
+								<tr>
+									<td nowrap="nowrap">
+										<span fcklang="DlgCellWordWrap">Word Wrap</span>:</td>
+									<td>
+										&nbsp;<select id="selWordWrap" name="selAlignment">
+											<option fcklang="DlgCellWordWrapYes" value="true" selected="selected">Yes</option>
+											<option fcklang="DlgCellWordWrapNo" value="false">No</option>
+										</select></td>
+								</tr>
+								<tr>
+									<td>
+										&nbsp;</td>
+									<td>
+										&nbsp;</td>
+								</tr>
+								<tr>
+									<td nowrap="nowrap">
+										<span fcklang="DlgCellHorAlign">Horizontal Alignment</span>:</td>
+									<td>
+										&nbsp;<select id="selHAlign" name="selAlignment">
+											<option fcklang="DlgCellHorAlignNotSet" value="" selected>&lt;Not set&gt;</option>
+											<option fcklang="DlgCellHorAlignLeft" value="left">Left</option>
+											<option fcklang="DlgCellHorAlignCenter" value="center">Center</option>
+											<option fcklang="DlgCellHorAlignRight" value="right">Right</option>
+										</select></td>
+								</tr>
+								<tr>
+									<td nowrap="nowrap">
+										<span fcklang="DlgCellVerAlign">Vertical Alignment</span>:</td>
+									<td>
+										&nbsp;<select id="selVAlign" name="selAlignment">
+											<option fcklang="DlgCellVerAlignNotSet" value="" selected>&lt;Not set&gt;</option>
+											<option fcklang="DlgCellVerAlignTop" value="top">Top</option>
+											<option fcklang="DlgCellVerAlignMiddle" value="middle">Middle</option>
+											<option fcklang="DlgCellVerAlignBottom" value="bottom">Bottom</option>
+											<option fcklang="DlgCellVerAlignBaseline" value="baseline">Baseline</option>
+										</select></td>
+								</tr>
+							</table>
+						</td>
+						<td>
+							&nbsp;&nbsp;&nbsp;</td>
+						<td align="right">
+							<table cellspacing="0" cellpadding="0" border="0">
+								<tr>
+									<td nowrap="nowrap">
+										<span fcklang="DlgCellRowSpan">Rows Span</span>:</td>
+									<td>
+										&nbsp;
+										<input onkeypress="return IsDigit(event);" id="txtRowSpan" type="text" maxlength="3" size="2"
+											name="txtRows"></td>
+									<td>
+									</td>
+								</tr>
+								<tr>
+									<td nowrap="nowrap">
+										<span fcklang="DlgCellCollSpan">Columns Span</span>:</td>
+									<td>
+										&nbsp;
+										<input onkeypress="return IsDigit(event);" id="txtCollSpan" type="text" maxlength="2"
+											size="2" name="txtColumns"></td>
+									<td>
+									</td>
+								</tr>
+								<tr>
+									<td>
+										&nbsp;</td>
+									<td>
+										&nbsp;</td>
+									<td>
+										&nbsp;</td>
+								</tr>
+								<tr>
+									<td nowrap="nowrap">
+										<span fcklang="DlgCellBackColor">Background Color</span>:</td>
+									<td>
+										&nbsp;<input id="txtBackColor" type="text" size="8" name="txtCellSpacing"></td>
+									<td>
+										&nbsp;
+										<input type="button" fcklang="DlgCellBtnSelect" value="Select..." onclick="SelectColor( 'Back' )"></td>
+								</tr>
+								<tr>
+									<td nowrap="nowrap">
+										<span fcklang="DlgCellBorderColor">Border Color</span>:</td>
+									<td>
+										&nbsp;<input id="txtBorderColor" type="text" size="8" name="txtCellPadding" /></td>
+									<td>
+										&nbsp;
+										<input type="button" fcklang="DlgCellBtnSelect" value="Select..." onclick="SelectColor( 'Border' )" /></td>
+								</tr>
+							</table>
+						</td>
+					</tr>
+				</table>
+			</td>
+		</tr>
+	</table>
+</body>
+</html>
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_template.html
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_template.html	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_template.html	(revision 1280)
@@ -0,0 +1,242 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Template selection dialog window.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+	<title></title>
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+	<meta name="robots" content="noindex, nofollow" />
+	<style type="text/css">
+			.TplList
+			{
+				border: #dcdcdc 2px solid;
+				background-color: #ffffff;
+				overflow: auto;
+				width: 90%;
+			}
+
+			.TplItem
+			{
+				margin: 5px;
+				padding: 7px;
+				border: #eeeeee 1px solid;
+			}
+
+			.TplItem TABLE
+			{
+				display: inline;
+			}
+
+			.TplTitle
+			{
+				font-weight: bold;
+			}
+		</style>
+	<script src="common/fck_dialog_common.js" type="text/javascript"></script>
+	<script type="text/javascript">
+
+var oEditor		= window.parent.InnerDialogLoaded() ;
+var FCK			= oEditor.FCK ;
+var FCKLang		= oEditor.FCKLang ;
+var FCKConfig	= oEditor.FCKConfig ;
+
+window.onload = function()
+{
+	// Set the right box height (browser dependent).
+	GetE('eList').style.height = document.all ? '100%' : '295px' ;
+
+	// Translate the dialog box texts.
+	oEditor.FCKLanguageManager.TranslatePage(document) ;
+
+	GetE('xChkReplaceAll').checked = ( FCKConfig.TemplateReplaceAll !== false ) ;
+
+	if ( FCKConfig.TemplateReplaceCheckbox !== false )
+		GetE('xReplaceBlock').style.display = '' ;
+
+	window.parent.SetAutoSize( true ) ;
+
+	LoadTemplatesXml() ;
+}
+
+function LoadTemplatesXml()
+{
+	var oTemplate ;
+
+	if ( !FCK._Templates )
+	{
+		GetE('eLoading').style.display = '' ;
+
+		// Create the Templates array.
+		FCK._Templates = new Array() ;
+
+		// Load the XML file.
+		var oXml = new oEditor.FCKXml() ;
+		oXml.LoadUrl( FCKConfig.TemplatesXmlPath ) ;
+
+		// Get the Images Base Path.
+		var oAtt = oXml.SelectSingleNode( 'Templates/@imagesBasePath' ) ;
+		var sImagesBasePath = oAtt ? oAtt.value : '' ;
+
+		// Get the "Template" nodes defined in the XML file.
+		var aTplNodes = oXml.SelectNodes( 'Templates/Template' ) ;
+
+		for ( var i = 0 ; i < aTplNodes.length ; i++ )
+		{
+			var oNode = aTplNodes[i] ;
+
+			oTemplate = new Object() ;
+
+			var oPart ;
+
+			// Get the Template Title.
+			if ( (oPart = oNode.attributes.getNamedItem('title')) )
+				oTemplate.Title = oPart.value ;
+			else
+				oTemplate.Title = 'Template ' + ( i + 1 ) ;
+
+			// Get the Template Description.
+			if ( (oPart = oXml.SelectSingleNode( 'Description', oNode )) )
+				oTemplate.Description = oPart.text ? oPart.text : oPart.textContent ;
+
+			// Get the Template Image.
+			if ( (oPart = oNode.attributes.getNamedItem('image')) )
+				oTemplate.Image = sImagesBasePath + oPart.value ;
+
+			// Get the Template HTML.
+			if ( (oPart = oXml.SelectSingleNode( 'Html', oNode )) )
+				oTemplate.Html = oPart.text ? oPart.text : oPart.textContent ;
+			else
+			{
+				alert( 'No HTML defined for template index ' + i + '. Please review the "' + FCKConfig.TemplatesXmlPath + '" file.' ) ;
+				continue ;
+			}
+
+			FCK._Templates[ FCK._Templates.length ] = oTemplate ;
+		}
+
+		GetE('eLoading').style.display = 'none' ;
+	}
+
+	if ( FCK._Templates.length == 0 )
+		GetE('eEmpty').style.display = '' ;
+	else
+	{
+		for ( var j = 0 ; j < FCK._Templates.length ; j++ )
+		{
+			oTemplate = FCK._Templates[j] ;
+
+			var oItemDiv = GetE('eList').appendChild( document.createElement( 'DIV' ) ) ;
+			oItemDiv.TplIndex = j ;
+			oItemDiv.className = 'TplItem' ;
+
+			// Build the inner HTML of our new item DIV.
+			var sInner = '<table><tr>' ;
+
+			if ( oTemplate.Image )
+				sInner += '<td valign="top"><img src="' + oTemplate.Image + '"><\/td>' ;
+
+			sInner += '<td valign="top"><div class="TplTitle">' + oTemplate.Title + '<\/div>' ;
+
+			if ( oTemplate.Description )
+				sInner += '<div>' + oTemplate.Description + '<\/div>' ;
+
+			sInner += '<\/td><\/tr><\/table>' ;
+
+			oItemDiv.innerHTML = sInner ;
+
+			oItemDiv.onmouseover = ItemDiv_OnMouseOver ;
+			oItemDiv.onmouseout = ItemDiv_OnMouseOut ;
+			oItemDiv.onclick = ItemDiv_OnClick ;
+		}
+	}
+}
+
+function ItemDiv_OnMouseOver()
+{
+	this.className += ' PopupSelectionBox' ;
+}
+
+function ItemDiv_OnMouseOut()
+{
+	this.className = this.className.replace( /\s*PopupSelectionBox\s*/, '' ) ;
+}
+
+function ItemDiv_OnClick()
+{
+	SelectTemplate( this.TplIndex ) ;
+}
+
+function SelectTemplate( index )
+{
+	oEditor.FCKUndo.SaveUndoStep() ;
+
+	if ( GetE('xChkReplaceAll').checked )
+		FCK.SetData( FCK._Templates[index].Html ) ;
+	else
+		FCK.InsertHtml( FCK._Templates[index].Html ) ;
+
+	window.parent.Cancel( true ) ;
+}
+
+	</script>
+</head>
+<body style="overflow: hidden">
+	<table width="100%" style="height: 100%">
+		<tr>
+			<td align="center">
+				<span fcklang="DlgTemplatesSelMsg">Please select the template to open in the editor<br />
+					(the actual contents will be lost):</span>
+			</td>
+		</tr>
+		<tr>
+			<td height="100%" align="center">
+				<div id="eList" align="left" class="TplList">
+					<div id="eLoading" align="center" style="display: none">
+						<br />
+						<span fcklang="DlgTemplatesLoading">Loading templates list. Please wait...</span>
+					</div>
+					<div id="eEmpty" align="center" style="display: none">
+						<br />
+						<span fcklang="DlgTemplatesNoTpl">(No templates defined)</span>
+					</div>
+				</div>
+			</td>
+		</tr>
+		<tr id="xReplaceBlock" style="display: none">
+			<td>
+				<table cellpadding="0" cellspacing="0">
+					<tr>
+						<td>
+							<input id="xChkReplaceAll" type="checkbox" /></td>
+						<td>
+							&nbsp;</td>
+						<td>
+							<label for="xChkReplaceAll" fcklang="DlgTemplatesReplace">
+								Replace actual contents</label></td>
+					</tr>
+				</table>
+			</td>
+		</tr>
+	</table>
+</body>
+</html>
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_textarea.html
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_textarea.html	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_textarea.html	(revision 1280)
@@ -0,0 +1,95 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Text Area dialog window.
+-->
+<html>
+	<head>
+		<title>Text Area Properties</title>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+		<meta content="noindex, nofollow" name="robots">
+		<script src="common/fck_dialog_common.js" type="text/javascript"></script>
+		<script type="text/javascript">
+
+var oEditor = window.parent.InnerDialogLoaded() ;
+
+// Gets the document DOM
+var oDOM = oEditor.FCK.EditorDocument ;
+
+var oActiveEl = oEditor.FCKSelection.GetSelectedElement() ;
+
+window.onload = function()
+{
+	// First of all, translate the dialog box texts
+	oEditor.FCKLanguageManager.TranslatePage(document) ;
+
+	if ( oActiveEl && oActiveEl.tagName == 'TEXTAREA' )
+	{
+		GetE('txtName').value		= oActiveEl.name ;
+		GetE('txtCols').value		= GetAttribute( oActiveEl, 'cols' ) ;
+		GetE('txtRows').value		= GetAttribute( oActiveEl, 'rows' ) ;
+	}
+	else
+		oActiveEl = null ;
+
+	window.parent.SetOkButton( true ) ;
+}
+
+function Ok()
+{
+	oEditor.FCKUndo.SaveUndoStep() ;
+	
+	if ( !oActiveEl )
+	{
+		oActiveEl = oEditor.FCK.InsertElement( 'textarea' ) ;
+	}
+
+	oActiveEl.name = GetE('txtName').value ;
+	SetAttribute( oActiveEl, 'cols', GetE('txtCols').value ) ;
+	SetAttribute( oActiveEl, 'rows', GetE('txtRows').value ) ;
+
+	return true ;
+}
+
+		</script>
+	</head>
+	<body style='OVERFLOW: hidden' scroll='no'>
+		<table height="100%" width="100%">
+			<tr>
+				<td align="center">
+					<table border="0" cellpadding="0" cellspacing="0" width="80%">
+						<tr>
+							<td>
+								<span fckLang="DlgTextareaName">Name</span><br>
+								<input type="text" id="txtName" style="WIDTH: 100%">
+								<span fckLang="DlgTextareaCols">Collumns</span><br>
+								<input id="txtCols" type="text" size="5">
+								<br>
+								<span fckLang="DlgTextareaRows">Rows</span><br>
+								<input id="txtRows" type="text" size="5">
+							</td>
+						</tr>
+					</table>
+				</td>
+			</tr>
+		</table>
+	</body>
+</html>
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_textfield.html
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_textfield.html	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dialog/fck_textfield.html	(revision 1280)
@@ -0,0 +1,140 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Text field dialog window.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+	<title></title>
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+	<meta content="noindex, nofollow" name="robots" />
+	<script src="common/fck_dialog_common.js" type="text/javascript"></script>
+	<script type="text/javascript">
+
+var oEditor = window.parent.InnerDialogLoaded() ;
+
+// Gets the document DOM
+var oDOM = oEditor.FCK.EditorDocument ;
+
+var oActiveEl = oEditor.FCKSelection.GetSelectedElement() ;
+
+window.onload = function()
+{
+	// First of all, translate the dialog box texts
+	oEditor.FCKLanguageManager.TranslatePage(document) ;
+
+	if ( oActiveEl && oActiveEl.tagName == 'INPUT' && ( oActiveEl.type == 'text' || oActiveEl.type == 'password' ) )
+	{
+		GetE('txtName').value	= oActiveEl.name ;
+		GetE('txtValue').value	= oActiveEl.value ;
+		GetE('txtSize').value	= GetAttribute( oActiveEl, 'size' ) ;
+		GetE('txtMax').value	= GetAttribute( oActiveEl, 'maxLength' ) ;
+		GetE('txtType').value	= oActiveEl.type ;
+
+		GetE('txtType').disabled = true ;
+	}
+	else
+		oActiveEl = null ;
+
+	window.parent.SetOkButton( true ) ;
+}
+
+function Ok()
+{
+	if ( isNaN( GetE('txtMax').value ) || GetE('txtMax').value < 0 )
+	{
+		alert( "Maximum characters must be a positive number." ) ;
+		GetE('txtMax').focus() ;
+		return false ;
+	}
+	else if( isNaN( GetE('txtSize').value ) || GetE('txtSize').value < 0 )
+	{
+		alert( "Width must be a positive number." ) ;
+		GetE('txtSize').focus() ;
+		return false ;
+	}
+
+	if ( !oActiveEl )
+	{
+		oActiveEl = oEditor.FCK.EditorDocument.createElement( 'INPUT' ) ;
+		oActiveEl.type = GetE('txtType').value ;
+		oEditor.FCKUndo.SaveUndoStep() ;
+		oActiveEl = oEditor.FCK.InsertElement( oActiveEl ) ;
+	}
+
+	oActiveEl.name = GetE('txtName').value ;
+	SetAttribute( oActiveEl, 'value'	, GetE('txtValue').value ) ;
+	SetAttribute( oActiveEl, 'size'		, GetE('txtSize').value ) ;
+	SetAttribute( oActiveEl, 'maxlength', GetE('txtMax').value ) ;
+
+	return true ;
+}
+
+	</script>
+</head>
+<body style="overflow: hidden">
+	<table width="100%" style="height: 100%">
+		<tr>
+			<td align="center">
+				<table cellspacing="0" cellpadding="0" border="0">
+					<tr>
+						<td>
+							<span fcklang="DlgTextName">Name</span><br />
+							<input id="txtName" type="text" size="20" />
+						</td>
+						<td>
+						</td>
+						<td>
+							<span fcklang="DlgTextValue">Value</span><br />
+							<input id="txtValue" type="text" size="25" />
+						</td>
+					</tr>
+					<tr>
+						<td>
+							<span fcklang="DlgTextCharWidth">Character Width</span><br />
+							<input id="txtSize" type="text" size="5" />
+						</td>
+						<td>
+						</td>
+						<td>
+							<span fcklang="DlgTextMaxChars">Maximum Characters</span><br />
+							<input id="txtMax" type="text" size="5" />
+						</td>
+					</tr>
+					<tr>
+						<td>
+							<span fcklang="DlgTextType">Type</span><br />
+							<select id="txtType">
+								<option value="text" selected="selected" fcklang="DlgTextTypeText">Text</option>
+								<option value="password" fcklang="DlgTextTypePass">Password</option>
+							</select>
+						</td>
+						<td>
+							&nbsp;</td>
+						<td>
+						</td>
+					</tr>
+				</table>
+			</td>
+		</tr>
+	</table>
+</body>
+</html>
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dtd/fck_dtd_test.html
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dtd/fck_dtd_test.html	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dtd/fck_dtd_test.html	(revision 1280)
@@ -0,0 +1,43 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+	<title>DTD Test Page</title>
+	<script type="text/javascript">
+
+	// Define an object for this test page, so the assignment to FCK.DTD works
+	var FCK = {} ;
+	</script>
+	<script type="text/javascript" src="../_source/internals/fcktools.js"></script>
+	<script type="text/javascript" src="fck_xhtml10transitional.js"></script>
+</head>
+<body>
+	<h1>
+		DTD Contents
+	</h1>
+	<table border="1">
+		<script type="text/javascript">
+
+    alert(FCK.DTD);
+
+for ( var p in FCK.DTD )
+{
+	document.write( '<tr><td><b>' + p + '</b></td><td>' ) ;
+
+	var isFirst = true ;
+
+	for ( var c in FCK.DTD[p] )
+	{
+		if ( !isFirst )
+			document.write( ', ' ) ;
+		isFirst = false ;
+
+		document.write( c ) ;
+	}
+
+
+	document.write( '</td></tr>' ) ;
+}
+		</script>
+	</table>
+</body>
+</html>
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dtd/fck_xhtml10strict.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dtd/fck_xhtml10strict.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dtd/fck_xhtml10strict.js	(revision 1280)
@@ -0,0 +1,116 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Contains the DTD mapping for XHTML 1.0 Strict.
+ * This file was automatically generated from the file: xhtml10-strict.dtd
+ */
+FCK.DTD = (function()
+{
+    X = FCKTools.Merge ;
+
+    var H,I,J,K,C,L,M,A,B,D,E,G,N,F ;
+    A = {ins:1, del:1, script:1} ;
+    B = {hr:1, ul:1, div:1, blockquote:1, noscript:1, table:1, address:1, pre:1, p:1, h5:1, dl:1, h4:1, ol:1, h6:1, h1:1, h3:1, h2:1} ;
+    C = X({fieldset:1}, B) ;
+    D = X({sub:1, bdo:1, 'var':1, sup:1, br:1, kbd:1, map:1, samp:1, b:1, acronym:1, '#':1, abbr:1, code:1, i:1, cite:1, tt:1, strong:1, q:1, em:1, big:1, small:1, span:1, dfn:1}, A) ;
+    E = X({img:1, object:1}, D) ;
+    F = {input:1, button:1, textarea:1, select:1, label:1} ;
+    G = X({a:1}, F) ;
+    H = {img:1, noscript:1, br:1, kbd:1, button:1, h5:1, h4:1, samp:1, h6:1, ol:1, h1:1, h3:1, h2:1, form:1, select:1, '#':1, ins:1, abbr:1, label:1, code:1, table:1, script:1, cite:1, input:1, strong:1, textarea:1, big:1, small:1, span:1, hr:1, sub:1, bdo:1, 'var':1, div:1, object:1, sup:1, map:1, dl:1, del:1, fieldset:1, ul:1, b:1, acronym:1, a:1, blockquote:1, i:1, address:1, tt:1, q:1, pre:1, p:1, em:1, dfn:1} ;
+
+    I = X({form:1, fieldset:1}, B, E, G) ;
+    J = {tr:1} ;
+    K = {'#':1} ;
+    L = X(E, G) ;
+    M = {li:1} ;
+    N = X({form:1}, A, C) ;
+
+    return {
+        col: {},
+        tr: {td:1, th:1},
+        img: {},
+        colgroup: {col:1},
+        noscript: N,
+        td: I,
+        br: {},
+        th: I,
+        kbd: L,
+        button: X(B, E),
+        h5: L,
+        h4: L,
+        samp: L,
+        h6: L,
+        ol: M,
+        h1: L,
+        h3: L,
+        option: K,
+        h2: L,
+        form: X(A, C),
+        select: {optgroup:1, option:1},
+        ins: I,
+        abbr: L,
+        label: L,
+        code: L,
+        table: {thead:1, col:1, tbody:1, tr:1, colgroup:1, caption:1, tfoot:1},
+        script: K,
+        tfoot: J,
+        cite: L,
+        li: I,
+        input: {},
+        strong: L,
+        textarea: K,
+        big: L,
+        small: L,
+        span: L,
+        dt: L,
+        hr: {},
+        sub: L,
+        optgroup: {option:1},
+        bdo: L,
+        param: {},
+        'var': L,
+        div: I,
+        object: X({param:1}, H),
+        sup: L,
+        dd: I,
+        area: {},
+        map: X({form:1, area:1}, A, C),
+        dl: {dt:1, dd:1},
+        del: I,
+        fieldset: X({legend:1}, H),
+        thead: J,
+        ul: M,
+        acronym: L,
+        b: L,
+        a: X({img:1, object:1}, D, F),
+        blockquote: N,
+        caption: L,
+        i: L,
+        tbody: J,
+        address: L,
+        tt: L,
+        legend: L,
+        q: L,
+        pre: X({a:1}, D, F),
+        p: L,
+        em: L,
+        dfn: L
+    } ;
+})() ;
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dtd/fck_xhtml10transitional.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dtd/fck_xhtml10transitional.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/dtd/fck_xhtml10transitional.js	(revision 1280)
@@ -0,0 +1,140 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Contains the DTD mapping for XHTML 1.0 Transitional.
+ * This file was automatically generated from the file: xhtml10-transitional.dtd
+ */
+FCK.DTD = (function()
+{
+    X = FCKTools.Merge ;
+
+    var A,L,J,M,N,O,D,H,P,K,Q,F,G,C,B,E,I ;
+    A = {isindex:1, fieldset:1} ;
+    B = {input:1, button:1, select:1, textarea:1, label:1} ;
+    C = X({a:1}, B) ;
+    D = X({iframe:1}, C) ;
+    E = {hr:1, ul:1, menu:1, div:1, blockquote:1, noscript:1, table:1, center:1, address:1, dir:1, pre:1, h5:1, dl:1, h4:1, noframes:1, h6:1, ol:1, h1:1, h3:1, h2:1} ;
+    F = {ins:1, del:1, script:1} ;
+    G = X({b:1, acronym:1, bdo:1, 'var':1, '#':1, abbr:1, code:1, br:1, i:1, cite:1, kbd:1, u:1, strike:1, s:1, tt:1, strong:1, q:1, samp:1, em:1, dfn:1, span:1}, F) ;
+    H = X({sub:1, img:1, object:1, sup:1, basefont:1, map:1, applet:1, font:1, big:1, small:1}, G) ;
+    I = X({p:1}, H) ;
+    J = X({iframe:1}, H, B) ;
+    K = {img:1, noscript:1, br:1, kbd:1, center:1, button:1, basefont:1, h5:1, h4:1, samp:1, h6:1, ol:1, h1:1, h3:1, h2:1, form:1, font:1, '#':1, select:1, menu:1, ins:1, abbr:1, label:1, code:1, table:1, script:1, cite:1, input:1, iframe:1, strong:1, textarea:1, noframes:1, big:1, small:1, span:1, hr:1, sub:1, bdo:1, 'var':1, div:1, object:1, sup:1, strike:1, dir:1, map:1, dl:1, applet:1, del:1, isindex:1, fieldset:1, ul:1, b:1, acronym:1, a:1, blockquote:1, i:1, u:1, s:1, tt:1, address:1, q:1, pre:1, p:1, em:1, dfn:1} ;
+
+    L = X({a:1}, J) ;
+    M = {tr:1} ;
+    N = {'#':1} ;
+    O = X({param:1}, K) ;
+    P = X({form:1}, A, D, E, I) ;
+    Q = {li:1} ;
+
+    return {
+        col: {},
+        tr: {td:1, th:1},
+        img: {},
+        colgroup: {col:1},
+        noscript: P,
+        td: P,
+        br: {},
+        th: P,
+        center: P,
+        kbd: L,
+        button: X(I, E),
+        basefont: {},
+        h5: L,
+        h4: L,
+        samp: L,
+        h6: L,
+        ol: Q,
+        h1: L,
+        h3: L,
+        option: N,
+        h2: L,
+        form: X(A, D, E, I),
+        select: {optgroup:1, option:1},
+        font: J,		// Changed from L to J (see (1))
+        ins: P,
+        menu: Q,
+        abbr: L,
+        label: L,
+        table: {thead:1, col:1, tbody:1, tr:1, colgroup:1, caption:1, tfoot:1},
+        code: L,
+        script: N,
+        tfoot: M,
+        cite: L,
+        li: P,
+        input: {},
+        iframe: P,
+        strong: J,		// Changed from L to J (see (1))
+        textarea: N,
+        noframes: P,
+        big: J,			// Changed from L to J (see (1))
+        small: J,		// Changed from L to J (see (1))
+        span: J,		// Changed from L to J (see (1))
+        hr: {},
+        dt: L,
+        sub: J,			// Changed from L to J (see (1))
+        optgroup: {option:1},
+        param: {},
+        bdo: L,
+        'var': J,		// Changed from L to J (see (1))
+        div: P,
+        object: O,
+        sup: J,			// Changed from L to J (see (1))
+        dd: P,
+        strike: J,		// Changed from L to J (see (1))
+        area: {},
+        dir: Q,
+        map: X({area:1, form:1, p:1}, A, F, E),
+        applet: O,
+        dl: {dt:1, dd:1},
+        del: P,
+        isindex: {},
+        fieldset: X({legend:1}, K),
+        thead: M,
+        ul: Q,
+        acronym: L,
+        b: J,			// Changed from L to J (see (1))
+        a: J,
+        blockquote: P,
+        caption: L,
+        i: J,			// Changed from L to J (see (1))
+        u: J,			// Changed from L to J (see (1))
+        tbody: M,
+        s: L,
+        address: X(D, I),
+        tt: J,			// Changed from L to J (see (1))
+        legend: L,
+        q: L,
+        pre: X(G, C),
+        p: L,
+        em: J,			// Changed from L to J (see (1))
+        dfn: L
+    } ;
+})() ;
+
+/*
+	Notes:
+	(1) According to the DTD, many elements, like <b> accept <a> elements
+	    inside of them. But, to produce better output results, we have manually
+	    changed the map to avoid breaking the links on pieces, having
+	    "<b>this is a </b><a><b>link</b> test</a>", instead of
+	    "<b>this is a <a>link</a></b><a> test</a>".
+*/
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/fckdebug.html
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/fckdebug.html	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/fckdebug.html	(revision 1280)
@@ -0,0 +1,153 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This is the Debug window.
+ * It automatically popups if the Debug = true in the configuration file.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+	<title>FCKeditor Debug Window</title>
+	<meta name="robots" content="noindex, nofollow" />
+	<script type="text/javascript">
+
+var oWindow ;
+var oDiv ;
+
+if ( !window.FCKMessages )
+	window.FCKMessages = new Array() ;
+
+window.onload = function()
+{
+	oWindow = document.getElementById('xOutput').contentWindow ;
+	oWindow.document.open() ;
+	oWindow.document.write( '<div id="divMsg"><\/div>' ) ;
+	oWindow.document.close() ;
+	oDiv	= oWindow.document.getElementById('divMsg') ;
+}
+
+function Output( message, color, noParse )
+{
+	if ( !noParse && message != null && isNaN( message ) )
+		message = message.replace(/</g, "&lt;") ;
+
+	if ( color )
+		message = '<font color="' + color + '">' + message + '<\/font>' ;
+
+	window.FCKMessages[ window.FCKMessages.length ] = message ;
+	StartTimer() ;
+}
+
+function OutputObject( anyObject, color )
+{
+	var message ;
+
+	if ( anyObject != null )
+	{
+		message = 'Properties of: ' + anyObject + '</b><blockquote>' ;
+
+		for (var prop in anyObject)
+		{
+			try
+			{
+				var sVal = anyObject[ prop ] != null ? anyObject[ prop ] + '' : '[null]' ;
+				message += '<b>' + prop + '</b> : ' + sVal.replace(/</g, '&lt;') + '<br>' ;
+			}
+			catch (e)
+			{
+				try
+				{
+					message += '<b>' + prop + '</b> : [' + typeof( anyObject[ prop ] ) + ']<br>' ;
+				}
+				catch (e)
+				{
+					message += '<b>' + prop + '</b> : [-error-]<br>' ;
+				}
+			}
+		}
+
+		message += '</blockquote><b>' ;
+	} else
+		message = 'OutputObject : Object is "null".' ;
+
+	Output( message, color, true ) ;
+}
+
+function StartTimer()
+{
+	window.setTimeout( 'CheckMessages()', 100 ) ;
+}
+
+function CheckMessages()
+{
+	if ( window.FCKMessages.length > 0 )
+	{
+		// Get the first item in the queue
+		var sMessage = window.FCKMessages[0] ;
+
+		// Removes the first item from the queue
+		var oTempArray = new Array() ;
+		for ( i = 1 ; i < window.FCKMessages.length ; i++ )
+			oTempArray[ i - 1 ] = window.FCKMessages[ i ] ;
+		window.FCKMessages = oTempArray ;
+
+		var d = new Date() ;
+		var sTime =
+			( d.getHours() + 100 + '' ).substr( 1,2 ) + ':' +
+			( d.getMinutes() + 100 + '' ).substr( 1,2 ) + ':' +
+			( d.getSeconds() + 100 + '' ).substr( 1,2 ) + ':' +
+			( d.getMilliseconds() + 1000 + '' ).substr( 1,3 ) ;
+
+		var oMsgDiv = oWindow.document.createElement( 'div' ) ;
+		oMsgDiv.innerHTML = sTime + ': <b>' + sMessage + '<\/b>' ;
+		oDiv.appendChild( oMsgDiv ) ;
+		oMsgDiv.scrollIntoView() ;
+	}
+}
+
+function Clear()
+{
+	oDiv.innerHTML = '' ;
+}
+	</script>
+</head>
+<body style="margin: 10px">
+	<table style="height: 100%" cellspacing="5" cellpadding="0" width="100%" border="0">
+		<tr>
+			<td>
+				<table cellspacing="0" cellpadding="0" width="100%" border="0">
+					<tr>
+						<td style="font-weight: bold; font-size: 1.2em;">
+							FCKeditor Debug Window</td>
+						<td align="right">
+							<input type="button" value="Clear" onclick="Clear();" /></td>
+					</tr>
+				</table>
+			</td>
+		</tr>
+		<tr style="height: 100%">
+			<td style="border: #696969 1px solid">
+				<iframe id="xOutput" width="100%" height="100%" scrolling="auto" src="javascript:void(0)"
+					frameborder="0"></iframe>
+			</td>
+		</tr>
+	</table>
+</body>
+</html>
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/fckdialog.html
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/fckdialog.html	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/fckdialog.html	(revision 1280)
@@ -0,0 +1,336 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This page is used by all dialog box as the container.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+		<meta name="robots" content="noindex, nofollow" />
+		<script type="text/javascript">
+
+// On some Gecko browsers (probably over slow connections) the
+// "dialogArguments" are not set so we must get it from the opener window.
+if ( !window.dialogArguments )
+	window.dialogArguments = window.opener.FCKLastDialogInfo ;
+
+// Sets the Skin CSS
+document.write( '<link href="' + window.dialogArguments.Editor.FCKConfig.SkinPath + 'fck_dialog.css" type="text/css" rel="stylesheet">' ) ;
+
+// Sets the language direction.
+window.document.dir = window.dialogArguments.Editor.FCKLang.Dir ;
+
+var sTitle = window.dialogArguments.Title ;
+document.write( '<title>' + sTitle + '<\/title>' ) ;
+
+function LoadInnerDialog()
+{
+	if ( window.onresize )
+		window.onresize() ;
+
+	// First of all, translate the dialog box contents.
+	window.dialogArguments.Editor.FCKLanguageManager.TranslatePage( document ) ;
+
+	window.frames["frmMain"].document.location.href = window.dialogArguments.Page ;
+}
+
+function InnerDialogLoaded()
+{
+	var oInnerDoc = document.getElementById('frmMain').contentWindow.document ;
+
+	// Set the language direction.
+	oInnerDoc.dir = window.dialogArguments.Editor.FCKLang.Dir ;
+
+	// Sets the Skin CSS.
+	oInnerDoc.write( '<link href="' + window.dialogArguments.Editor.FCKConfig.SkinPath + 'fck_dialog.css" type="text/css" rel="stylesheet">' ) ;
+
+	SetOnKeyDown( oInnerDoc ) ;
+	DisableContextMenu( oInnerDoc ) ;
+
+	return window.dialogArguments.Editor ;
+}
+
+function SetOkButton( showIt )
+{
+	document.getElementById('btnOk').style.visibility = ( showIt ? '' : 'hidden' ) ;
+}
+
+var bAutoSize = false ;
+
+function SetAutoSize( autoSize )
+{
+	bAutoSize = autoSize ;
+	RefreshSize() ;
+}
+
+function RefreshSize()
+{
+	if ( bAutoSize )
+	{
+		var oInnerDoc = document.getElementById('frmMain').contentWindow.document ;
+
+		var iFrameHeight ;
+		if ( document.all )
+			iFrameHeight = oInnerDoc.body.offsetHeight ;
+		else
+			iFrameHeight = document.getElementById('frmMain').contentWindow.innerHeight ;
+
+		var iInnerHeight = oInnerDoc.body.scrollHeight ;
+
+		var iDiff = iInnerHeight - iFrameHeight ;
+
+		if ( iDiff > 0 )
+		{
+			if ( document.all )
+				window.dialogHeight = ( parseInt( window.dialogHeight, 10 ) + iDiff ) + 'px' ;
+			else
+				window.resizeBy( 0, iDiff ) ;
+		}
+	}
+}
+
+// Kludge for #1316: Safari seems to have a bug with the time when RefreshSize() is executed - it thinks frmMain's innerHeight 
+// is 0 if we query the value too soon after the page is loaded in some circumstances.
+if ( window.dialogArguments.Editor.FCKBrowserInfo.IsSafari )
+{
+	window.OriginalRefreshSize = RefreshSize ;
+
+	RefreshSize = function()
+	{
+		window.setTimeout( window.OriginalRefreshSize, 1 );
+	}
+}
+
+function Ok()
+{
+	if ( window.frames["frmMain"].Ok && window.frames["frmMain"].Ok() )
+		Cancel() ;
+}
+
+function Cancel( dontFireChange )
+{
+	if ( !dontFireChange && !window.dialogArguments.Editor.FCK.EditMode )
+	{
+		// All dialog windows, by default, will fire the "OnSelectionChange"
+		// event, no matter the Ok or Cancel button has been pressed.
+		window.dialogArguments.Editor.FCK.Events.FireEvent( 'OnSelectionChange' ) ;
+	}
+	window.close() ;
+}
+
+// Object that holds all available tabs.
+var oTabs = new Object() ;
+
+function TabDiv_OnClick()
+{
+	SetSelectedTab( this.TabCode ) ;
+}
+
+function AddTab( tabCode, tabText, startHidden )
+{
+	if ( typeof( oTabs[ tabCode ] ) != 'undefined' )
+		return ;
+
+	var eTabsRow = document.getElementById( 'Tabs' ) ;
+
+	var oCell = eTabsRow.insertCell(  eTabsRow.cells.length - 1 ) ;
+	oCell.noWrap = true ;
+
+	var oDiv = document.createElement( 'DIV' ) ;
+	oDiv.className = 'PopupTab' ;
+	oDiv.innerHTML = tabText ;
+	oDiv.TabCode = tabCode ;
+	oDiv.onclick = TabDiv_OnClick ;
+
+	if ( startHidden )
+		oDiv.style.display = 'none' ;
+
+	eTabsRow = document.getElementById( 'TabsRow' ) ;
+
+	oCell.appendChild( oDiv ) ;
+
+	if ( eTabsRow.style.display == 'none' )
+	{
+		var eTitleArea = document.getElementById( 'TitleArea' ) ;
+		eTitleArea.className = 'PopupTitle' ;
+
+		oDiv.className = 'PopupTabSelected' ;
+		eTabsRow.style.display = '' ;
+
+		if ( ! window.dialogArguments.Editor.FCKBrowserInfo.IsIE )
+			window.onresize() ;
+	}
+
+	oTabs[ tabCode ] = oDiv ;
+}
+
+function SetSelectedTab( tabCode )
+{
+	for ( var sCode in oTabs )
+	{
+		if ( sCode == tabCode )
+			oTabs[sCode].className = 'PopupTabSelected' ;
+		else
+			oTabs[sCode].className = 'PopupTab' ;
+	}
+
+	if ( typeof( window.frames["frmMain"].OnDialogTabChange ) == 'function' )
+		window.frames["frmMain"].OnDialogTabChange( tabCode ) ;
+}
+
+function SetTabVisibility( tabCode, isVisible )
+{
+	var oTab = oTabs[ tabCode ] ;
+	oTab.style.display = isVisible ? '' : 'none' ;
+
+	if ( ! isVisible && oTab.className == 'PopupTabSelected' )
+	{
+		for ( var sCode in oTabs )
+		{
+			if ( oTabs[sCode].style.display != 'none' )
+			{
+				SetSelectedTab( sCode ) ;
+				break ;
+			}
+		}
+	}
+}
+
+function SetOnKeyDown( targetDocument )
+{
+	targetDocument.onkeydown = function ( e )
+	{
+		e = e || event || this.parentWindow.event ;
+		switch ( e.keyCode )
+		{
+			case 13 :		// ENTER
+				var oTarget = e.srcElement || e.target ;
+				if ( oTarget.tagName == 'TEXTAREA' )
+					return true ;
+				Ok() ;
+				return false ;
+			case 27 :		// ESC
+				Cancel() ;
+				return false ;
+				break ;
+		}
+		return true ;
+	}
+}
+SetOnKeyDown( document ) ;
+
+function DisableContextMenu( targetDocument )
+{
+	if ( window.dialogArguments.Editor.FCKBrowserInfo.IsIE ) return ;
+
+	// Disable Right-Click
+	var oOnContextMenu = function( e )
+	{
+		var sTagName = e.target.tagName ;
+		if ( ! ( ( sTagName == "INPUT" && e.target.type == "text" ) || sTagName == "TEXTAREA" ) )
+			e.preventDefault() ;
+	}
+	targetDocument.addEventListener( 'contextmenu', oOnContextMenu, true ) ;
+}
+DisableContextMenu( document ) ;
+
+if ( ! window.dialogArguments.Editor.FCKBrowserInfo.IsIE )
+{
+	window.onresize = function()
+	{
+		var oFrame = document.getElementById("frmMain") ;
+
+		if ( ! oFrame )
+		return ;
+
+		oFrame.height = 0 ;
+
+		var oCell = document.getElementById("FrameCell") ;
+		var iHeight = oCell.offsetHeight ;
+
+		oFrame.height = iHeight - 2 ;
+	}
+}
+
+if ( window.dialogArguments.Editor.FCKBrowserInfo.IsIE )
+{
+	function Window_OnBeforeUnload()
+	{
+		for ( var t in oTabs )
+			oTabs[t] = null ;
+
+		window.dialogArguments.Editor = null ;
+	}
+	window.attachEvent( "onbeforeunload", Window_OnBeforeUnload ) ;
+}
+
+function Window_OnClose()
+{
+	window.dialogArguments.Editor.FCKFocusManager.Unlock() ;
+}
+
+if ( window.addEventListener )
+	window.addEventListener( 'unload', Window_OnClose, false ) ;
+
+		</script>
+	</head>
+	<body onload="LoadInnerDialog();" class="PopupBody">
+		<table height="100%" cellspacing="0" cellpadding="0" width="100%" border="0">
+			<tr>
+				<td id="TitleArea" class="PopupTitle PopupTitleBorder">
+					<script type="text/javascript">
+document.write( sTitle ) ;
+					</script>
+				</td>
+			</tr>
+			<tr id="TabsRow" style="DISPLAY: none">
+				<td class="PopupTabArea">
+					<table border="0" cellpadding="0" cellspacing="0" width="100%">
+						<tr id="Tabs" onselectstart="return false;">
+							<td class="PopupTabEmptyArea">&nbsp;</td>
+							<td class="PopupTabEmptyArea" width="100%">&nbsp;</td>
+						</tr>
+					</table>
+				</td>
+			</tr>
+			<tr>
+				<td id="FrameCell" height="100%" valign="top">
+					<iframe id="frmMain" src="javascript:void(0)" name="frmMain" frameborder="0" height="100%" width="100%" scrolling="auto">
+					</iframe>
+				</td>
+			</tr>
+			<tr>
+				<td class="PopupButtons">
+					<table border="0" cellpadding="0" cellspacing="0">
+						<tr>
+							<td width="100%">&nbsp;</td>
+							<td nowrap="nowrap">
+								<input id="btnOk" style="VISIBILITY: hidden;" type="button" value="Ok" class="Button" onclick="Ok();" fckLang="DlgBtnOK" />
+								&nbsp; 
+								<input id="btnCancel" type="button" value="Cancel" class="Button" onclick="Cancel();" fckLang="DlgBtnCancel" />
+							</td>
+						</tr>
+					</table>
+				</td>
+			</tr>
+		</table>
+	</body>
+</html>
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/fckeditor.html
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/fckeditor.html	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/fckeditor.html	(revision 1280)
@@ -0,0 +1,228 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Main page that holds the editor.
+-->
+<html>
+<head>
+	<title>FCKeditor</title>
+	<meta name="robots" content="noindex, nofollow">
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+	<meta http-equiv="Cache-Control" content="public" />
+	<script type="text/javascript">
+
+// Instead of loading scripts and CSSs using inline tags, all scripts are
+// loaded by code. In this way we can guarantee the correct processing order,
+// otherwise external scripts and inline scripts could be executed in an
+// unwanted order (IE).
+
+function LoadScript( url )
+{
+	document.write( '<scr' + 'ipt type="text/javascript" src="' + url + '"><\/scr' + 'ipt>' ) ;
+}
+
+function LoadCss( url )
+{
+	document.write( '<link href="' + url + '" type="text/css" rel="stylesheet" />' ) ;
+}
+
+// Main editor scripts.
+var sSuffix = ( /*@cc_on!@*/false ) ? 'ie' : 'gecko' ;
+
+LoadScript( 'js/fckeditorcode_' + sSuffix + '.js' ) ;
+
+// Base configuration file.
+LoadScript( '../fckconfig.js' ) ;
+
+	</script>
+	<script type="text/javascript">
+
+if ( FCKBrowserInfo.IsIE )
+{
+	// Remove IE mouse flickering.
+	try
+	{
+		document.execCommand( 'BackgroundImageCache', false, true ) ;
+	}
+	catch (e)
+	{
+		// We have been reported about loading problems caused by the above
+		// line. For safety, let's just ignore errors.
+	}
+
+	// Create the default cleanup object used by the editor.
+	FCK.IECleanup = new FCKIECleanup( window ) ;
+	FCK.IECleanup.AddItem( FCKTempBin, FCKTempBin.Reset ) ;
+	FCK.IECleanup.AddItem( FCK, FCK_Cleanup ) ;
+}
+
+// The first function to be called on selection change must the the styles
+// change checker, because the result of its processing may be used by another
+// functions listening to the same event.
+FCK.Events.AttachEvent( 'OnSelectionChange', function() { FCKStyles.CheckSelectionChanges() ; } ) ;
+
+// The config hidden field is processed immediately, because
+// CustomConfigurationsPath may be set in the page.
+FCKConfig.ProcessHiddenField() ;
+
+// Load the custom configurations file (if defined).
+if ( FCKConfig.CustomConfigurationsPath.length > 0 )
+	LoadScript( FCKConfig.CustomConfigurationsPath ) ;
+
+	</script>
+	<script type="text/javascript">
+
+// Load configurations defined at page level.
+FCKConfig_LoadPageConfig() ;
+
+FCKConfig_PreProcess() ;
+
+// Load the active skin CSS.
+LoadCss( FCKConfig.SkinPath + 'fck_editor.css' ) ;
+
+// Load the language file.
+FCKLanguageManager.Initialize() ;
+LoadScript( 'lang/' + FCKLanguageManager.ActiveLanguage.Code + '.js' ) ;
+
+	</script>
+	<script type="text/javascript">
+
+// Initialize the editing area context menu.
+FCK_ContextMenu_Init() ;
+
+FCKPlugins.Load() ;
+
+	</script>
+	<script type="text/javascript">
+
+// Set the editor interface direction.
+window.document.dir = FCKLang.Dir ;
+
+	</script>
+	<script type="text/javascript">
+
+window.onload = function()
+{
+	InitializeAPI() ;
+
+	if ( FCKBrowserInfo.IsIE )
+		FCK_PreloadImages() ;
+	else
+		LoadToolbarSetup() ;
+}
+
+function LoadToolbarSetup()
+{
+	FCKeditorAPI._FunctionQueue.Add( LoadToolbar ) ;
+}
+
+function LoadToolbar()
+{
+	var oToolbarSet = FCK.ToolbarSet = FCKToolbarSet_Create() ;
+
+	if ( oToolbarSet.IsLoaded )
+		StartEditor() ;
+	else
+	{
+		oToolbarSet.OnLoad = StartEditor ;
+		oToolbarSet.Load( FCKURLParams['Toolbar'] || 'Default' ) ;
+	}
+}
+
+function StartEditor()
+{
+	// Remove the onload listener.
+	FCK.ToolbarSet.OnLoad = null ;
+
+	FCKeditorAPI._FunctionQueue.Remove( LoadToolbar ) ;
+
+	FCK.Events.AttachEvent( 'OnStatusChange', WaitForActive ) ;
+
+	// Start the editor.
+	FCK.StartEditor() ;
+}
+
+function WaitForActive( editorInstance, newStatus )
+{
+	if ( newStatus == FCK_STATUS_ACTIVE )
+	{
+		if ( FCKBrowserInfo.IsGecko )
+			FCKTools.RunFunction( window.onresize ) ;
+
+		_AttachFormSubmitToAPI() ;
+
+		FCK.SetStatus( FCK_STATUS_COMPLETE ) ;
+
+		// Call the special "FCKeditor_OnComplete" function that should be present in
+		// the HTML page where the editor is located.
+		if ( typeof( window.parent.FCKeditor_OnComplete ) == 'function' )
+			window.parent.FCKeditor_OnComplete( FCK ) ;
+	}
+}
+
+// Gecko browsers doens't calculate well that IFRAME size so we must
+// recalculate it every time the window size changes.
+if ( FCKBrowserInfo.IsGecko )
+{
+	function Window_OnResize()
+	{
+		if ( FCKBrowserInfo.IsOpera )
+			return ;
+
+		var oCell = document.getElementById( 'xEditingArea' ) ;
+
+		var eInnerElement = oCell.firstChild ;
+		if ( eInnerElement )
+		{
+			eInnerElement.style.height = 0 ;
+			eInnerElement.style.height = oCell.scrollHeight - 2 ;
+		}
+	}
+	window.onresize = Window_OnResize ;
+}
+
+	</script>
+</head>
+<body>
+	<table width="100%" cellpadding="0" cellspacing="0" style="height: 100%; table-layout: fixed">
+		<tr id="xToolbarRow" style="display: none">
+			<td id="xToolbarSpace" style="overflow: hidden">
+				<table width="100%" cellpadding="0" cellspacing="0">
+					<tr id="xCollapsed" style="display: none">
+						<td id="xExpandHandle" class="TB_Expand" colspan="3">
+							<img class="TB_ExpandImg" alt="" src="images/spacer.gif" width="8" height="4" /></td>
+					</tr>
+					<tr id="xExpanded" style="display: none">
+						<td id="xTBLeftBorder" class="TB_SideBorder" style="width: 1px; display: none;"></td>
+						<td id="xCollapseHandle" style="display: none" class="TB_Collapse" valign="bottom">
+							<img class="TB_CollapseImg" alt="" src="images/spacer.gif" width="8" height="4" /></td>
+						<td id="xToolbar" class="TB_ToolbarSet"></td>
+						<td class="TB_SideBorder" style="width: 1px"></td>
+					</tr>
+				</table>
+			</td>
+		</tr>
+		<tr>
+			<td id="xEditingArea" valign="top" style="height: 100%"></td>
+		</tr>
+	</table>
+</body>
+</html>
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/fckeditor.original.html
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/fckeditor.original.html	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/fckeditor.original.html	(revision 1280)
@@ -0,0 +1,331 @@
+﻿<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Main page that holds the editor.
+-->
+<html>
+<head>
+	<title>FCKeditor</title>
+	<meta name="robots" content="noindex, nofollow">
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+	<!-- @Packager.RemoveLine
+	<meta http-equiv="Cache-Control" content="public" />
+	@Packager.RemoveLine -->
+	<script type="text/javascript">
+
+// Instead of loading scripts and CSSs using inline tags, all scripts are
+// loaded by code. In this way we can guarantee the correct processing order,
+// otherwise external scripts and inline scripts could be executed in an
+// unwanted order (IE).
+
+function LoadScript( url )
+{
+	document.write( '<scr' + 'ipt type="text/javascript" src="' + url + '"><\/scr' + 'ipt>' ) ;
+}
+
+function LoadCss( url )
+{
+	document.write( '<link href="' + url + '" type="text/css" rel="stylesheet" />' ) ;
+}
+
+// Main editor scripts.
+var sSuffix = ( /*@cc_on!@*/false ) ? 'ie' : 'gecko' ;
+
+/* @Packager.RemoveLine
+LoadScript( 'js/fckeditorcode_' + sSuffix + '.js' ) ;
+@Packager.RemoveLine */
+// @Packager.Remove.Start
+
+LoadScript( '_source/fckconstants.js' ) ;
+LoadScript( '_source/fckjscoreextensions.js' ) ;
+
+if ( sSuffix == 'ie' )
+	LoadScript( '_source/classes/fckiecleanup.js' ) ;
+
+LoadScript( '_source/internals/fckbrowserinfo.js' ) ;
+LoadScript( '_source/internals/fckurlparams.js' ) ;
+LoadScript( '_source/classes/fckevents.js' ) ;
+LoadScript( '_source/classes/fckdataprocessor.js' ) ;
+LoadScript( '_source/internals/fck.js' ) ;
+LoadScript( '_source/internals/fck_' + sSuffix + '.js' ) ;
+LoadScript( '_source/internals/fckconfig.js' ) ;
+
+LoadScript( '_source/internals/fckdebug.js' ) ;
+LoadScript( '_source/internals/fckdomtools.js' ) ;
+LoadScript( '_source/internals/fcktools.js' ) ;
+LoadScript( '_source/internals/fcktools_' + sSuffix + '.js' ) ;
+LoadScript( '_source/fckeditorapi.js' ) ;
+LoadScript( '_source/classes/fckimagepreloader.js' ) ;
+LoadScript( '_source/internals/fckregexlib.js' ) ;
+LoadScript( '_source/internals/fcklistslib.js' ) ;
+LoadScript( '_source/internals/fcklanguagemanager.js' ) ;
+LoadScript( '_source/internals/fckxhtmlentities.js' ) ;
+LoadScript( '_source/internals/fckxhtml.js' ) ;
+LoadScript( '_source/internals/fckxhtml_' + sSuffix + '.js' ) ;
+LoadScript( '_source/internals/fckcodeformatter.js' ) ;
+LoadScript( '_source/internals/fckundo.js' ) ;
+LoadScript( '_source/classes/fckeditingarea.js' ) ;
+LoadScript( '_source/classes/fckkeystrokehandler.js' ) ;
+
+LoadScript( 'dtd/fck_xhtml10transitional.js' ) ;
+LoadScript( '_source/classes/fckstyle.js' ) ;
+LoadScript( '_source/internals/fckstyles.js' ) ;
+
+LoadScript( '_source/internals/fcklisthandler.js' ) ;
+LoadScript( '_source/classes/fckelementpath.js' ) ;
+LoadScript( '_source/classes/fckdomrange.js' ) ;
+LoadScript( '_source/classes/fckdocumentfragment_' + sSuffix + '.js' ) ;
+LoadScript( '_source/classes/fckw3crange.js' ) ;
+LoadScript( '_source/classes/fckdomrange_' + sSuffix + '.js' ) ;
+LoadScript( '_source/classes/fckdomrangeiterator.js' ) ;
+LoadScript( '_source/classes/fckenterkey.js' ) ;
+
+LoadScript( '_source/internals/fckdocumentprocessor.js' ) ;
+LoadScript( '_source/internals/fckselection.js' ) ;
+LoadScript( '_source/internals/fckselection_' + sSuffix + '.js' ) ;
+
+LoadScript( '_source/internals/fcktablehandler.js' ) ;
+LoadScript( '_source/internals/fcktablehandler_' + sSuffix + '.js' ) ;
+LoadScript( '_source/classes/fckxml.js' ) ;
+LoadScript( '_source/classes/fckxml_' + sSuffix + '.js' ) ;
+
+LoadScript( '_source/commandclasses/fcknamedcommand.js' ) ;
+LoadScript( '_source/commandclasses/fckstylecommand.js' ) ;
+LoadScript( '_source/commandclasses/fck_othercommands.js' ) ;
+LoadScript( '_source/commandclasses/fckshowblocks.js' ) ;
+LoadScript( '_source/commandclasses/fckspellcheckcommand_' + sSuffix + '.js' ) ;
+LoadScript( '_source/commandclasses/fcktextcolorcommand.js' ) ;
+LoadScript( '_source/commandclasses/fckpasteplaintextcommand.js' ) ;
+LoadScript( '_source/commandclasses/fckpastewordcommand.js' ) ;
+LoadScript( '_source/commandclasses/fcktablecommand.js' ) ;
+LoadScript( '_source/commandclasses/fckfitwindow.js' ) ;
+LoadScript( '_source/commandclasses/fcklistcommands.js' ) ;
+LoadScript( '_source/commandclasses/fckjustifycommands.js' ) ;
+LoadScript( '_source/commandclasses/fckindentcommands.js' ) ;
+LoadScript( '_source/commandclasses/fckblockquotecommand.js' ) ;
+LoadScript( '_source/commandclasses/fckcorestylecommand.js' ) ;
+LoadScript( '_source/commandclasses/fckremoveformatcommand.js' ) ;
+LoadScript( '_source/internals/fckcommands.js' ) ;
+
+LoadScript( '_source/classes/fckpanel.js' ) ;
+LoadScript( '_source/classes/fckicon.js' ) ;
+LoadScript( '_source/classes/fcktoolbarbuttonui.js' ) ;
+LoadScript( '_source/classes/fcktoolbarbutton.js' ) ;
+LoadScript( '_source/classes/fckspecialcombo.js' ) ;
+LoadScript( '_source/classes/fcktoolbarspecialcombo.js' ) ;
+LoadScript( '_source/classes/fcktoolbarstylecombo.js' ) ;
+LoadScript( '_source/classes/fcktoolbarfontformatcombo.js' ) ;
+LoadScript( '_source/classes/fcktoolbarfontscombo.js' ) ;
+LoadScript( '_source/classes/fcktoolbarfontsizecombo.js' ) ;
+LoadScript( '_source/classes/fcktoolbarpanelbutton.js' ) ;
+LoadScript( '_source/internals/fcktoolbaritems.js' ) ;
+LoadScript( '_source/classes/fcktoolbar.js' ) ;
+LoadScript( '_source/classes/fcktoolbarbreak_' + sSuffix + '.js' ) ;
+LoadScript( '_source/internals/fcktoolbarset.js' ) ;
+LoadScript( '_source/internals/fckdialog.js' ) ;
+LoadScript( '_source/internals/fckdialog_' + sSuffix + '.js' ) ;
+LoadScript( '_source/classes/fckmenuitem.js' ) ;
+LoadScript( '_source/classes/fckmenublock.js' ) ;
+LoadScript( '_source/classes/fckmenublockpanel.js' ) ;
+LoadScript( '_source/classes/fckcontextmenu.js' ) ;
+LoadScript( '_source/internals/fck_contextmenu.js' ) ;
+LoadScript( '_source/classes/fckplugin.js' ) ;
+LoadScript( '_source/internals/fckplugins.js' ) ;
+
+// @Packager.Remove.End
+
+// Base configuration file.
+LoadScript( '../fckconfig.js' ) ;
+
+	</script>
+	<script type="text/javascript">
+
+if ( FCKBrowserInfo.IsIE )
+{
+	// Remove IE mouse flickering.
+	try
+	{
+		document.execCommand( 'BackgroundImageCache', false, true ) ;
+	}
+	catch (e)
+	{
+		// We have been reported about loading problems caused by the above
+		// line. For safety, let's just ignore errors.
+	}
+
+	// Create the default cleanup object used by the editor.
+	FCK.IECleanup = new FCKIECleanup( window ) ;
+	FCK.IECleanup.AddItem( FCKTempBin, FCKTempBin.Reset ) ;
+	FCK.IECleanup.AddItem( FCK, FCK_Cleanup ) ;
+}
+
+// The first function to be called on selection change must the the styles
+// change checker, because the result of its processing may be used by another
+// functions listening to the same event.
+FCK.Events.AttachEvent( 'OnSelectionChange', function() { FCKStyles.CheckSelectionChanges() ; } ) ;
+
+// The config hidden field is processed immediately, because
+// CustomConfigurationsPath may be set in the page.
+FCKConfig.ProcessHiddenField() ;
+
+// Load the custom configurations file (if defined).
+if ( FCKConfig.CustomConfigurationsPath.length > 0 )
+	LoadScript( FCKConfig.CustomConfigurationsPath ) ;
+
+	</script>
+	<script type="text/javascript">
+
+// Load configurations defined at page level.
+FCKConfig_LoadPageConfig() ;
+
+FCKConfig_PreProcess() ;
+
+// Load the active skin CSS.
+LoadCss( FCKConfig.SkinPath + 'fck_editor.css' ) ;
+
+// Load the language file.
+FCKLanguageManager.Initialize() ;
+LoadScript( 'lang/' + FCKLanguageManager.ActiveLanguage.Code + '.js' ) ;
+
+	</script>
+	<script type="text/javascript">
+
+// Initialize the editing area context menu.
+FCK_ContextMenu_Init() ;
+
+FCKPlugins.Load() ;
+
+	</script>
+	<script type="text/javascript">
+
+// Set the editor interface direction.
+window.document.dir = FCKLang.Dir ;
+
+	</script>
+	<script type="text/javascript">
+
+window.onload = function()
+{
+	InitializeAPI() ;
+
+	if ( FCKBrowserInfo.IsIE )
+		FCK_PreloadImages() ;
+	else
+		LoadToolbarSetup() ;
+}
+
+function LoadToolbarSetup()
+{
+	FCKeditorAPI._FunctionQueue.Add( LoadToolbar ) ;
+}
+
+function LoadToolbar()
+{
+	var oToolbarSet = FCK.ToolbarSet = FCKToolbarSet_Create() ;
+
+	if ( oToolbarSet.IsLoaded )
+		StartEditor() ;
+	else
+	{
+		oToolbarSet.OnLoad = StartEditor ;
+		oToolbarSet.Load( FCKURLParams['Toolbar'] || 'Default' ) ;
+	}
+}
+
+function StartEditor()
+{
+	// Remove the onload listener.
+	FCK.ToolbarSet.OnLoad = null ;
+
+	FCKeditorAPI._FunctionQueue.Remove( LoadToolbar ) ;
+
+	FCK.Events.AttachEvent( 'OnStatusChange', WaitForActive ) ;
+
+	// Start the editor.
+	FCK.StartEditor() ;
+}
+
+function WaitForActive( editorInstance, newStatus )
+{
+	if ( newStatus == FCK_STATUS_ACTIVE )
+	{
+		if ( FCKBrowserInfo.IsGecko )
+			FCKTools.RunFunction( window.onresize ) ;
+
+		_AttachFormSubmitToAPI() ;
+
+		FCK.SetStatus( FCK_STATUS_COMPLETE ) ;
+
+		// Call the special "FCKeditor_OnComplete" function that should be present in
+		// the HTML page where the editor is located.
+		if ( typeof( window.parent.FCKeditor_OnComplete ) == 'function' )
+			window.parent.FCKeditor_OnComplete( FCK ) ;
+	}
+}
+
+// Gecko browsers doens't calculate well that IFRAME size so we must
+// recalculate it every time the window size changes.
+if ( FCKBrowserInfo.IsGecko )
+{
+	function Window_OnResize()
+	{
+		if ( FCKBrowserInfo.IsOpera )
+			return ;
+
+		var oCell = document.getElementById( 'xEditingArea' ) ;
+
+		var eInnerElement = oCell.firstChild ;
+		if ( eInnerElement )
+		{
+			eInnerElement.style.height = 0 ;
+			eInnerElement.style.height = oCell.scrollHeight - 2 ;
+		}
+	}
+	window.onresize = Window_OnResize ;
+}
+
+	</script>
+</head>
+<body>
+	<table width="100%" cellpadding="0" cellspacing="0" style="height: 100%; table-layout: fixed">
+		<tr id="xToolbarRow" style="display: none">
+			<td id="xToolbarSpace" style="overflow: hidden">
+				<table width="100%" cellpadding="0" cellspacing="0">
+					<tr id="xCollapsed" style="display: none">
+						<td id="xExpandHandle" class="TB_Expand" colspan="3">
+							<img class="TB_ExpandImg" alt="" src="images/spacer.gif" width="8" height="4" /></td>
+					</tr>
+					<tr id="xExpanded" style="display: none">
+						<td id="xTBLeftBorder" class="TB_SideBorder" style="width: 1px; display: none;"></td>
+						<td id="xCollapseHandle" style="display: none" class="TB_Collapse" valign="bottom">
+							<img class="TB_CollapseImg" alt="" src="images/spacer.gif" width="8" height="4" /></td>
+						<td id="xToolbar" class="TB_ToolbarSet"></td>
+						<td class="TB_SideBorder" style="width: 1px"></td>
+					</tr>
+				</table>
+			</td>
+		</tr>
+		<tr>
+			<td id="xEditingArea" valign="top" style="height: 100%"></td>
+		</tr>
+	</table>
+</body>
+</html>
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/filemanager/browser/default/browser.css
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/filemanager/browser/default/browser.css	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/filemanager/browser/default/browser.css	(revision 1280)
@@ -0,0 +1,89 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * CSS styles used by all pages that compose the File Browser.
+ */
+
+body
+{
+	background-color: #f1f1e3;
+}
+
+form
+{
+	margin: 0px 0px 0px 0px ;
+	padding: 0px 0px 0px 0px ;
+}
+
+.Frame
+{
+	background-color: #f1f1e3;
+	border-color: #f1f1e3;
+	border-right: thin inset;
+	border-top: thin inset;
+	border-left: thin inset;
+	border-bottom: thin inset;
+}
+
+body.FileArea
+{
+
+	background-color: #ffffff;
+	margin: 10px;
+}
+
+body, td, input, select
+{
+	font-size: 11px;
+	font-family: 'Microsoft Sans Serif' , Arial, Helvetica, Verdana;
+}
+
+.ActualFolder
+{
+	font-weight: bold;
+	font-size: 14px;
+}
+
+.PopupButtons
+{
+	border-top: #d5d59d 1px solid;
+	background-color: #e3e3c7;
+	padding: 7px 10px 7px 10px;
+}
+
+.Button, button
+{
+	border-right: #737357 1px solid;
+	border-top: #737357 1px solid;
+	border-left: #737357 1px solid;
+	color: #3b3b1f;
+	border-bottom: #737357 1px solid;
+	background-color: #c7c78f;
+}
+
+.FolderListCurrentFolder img
+{
+	background-image: url(images/FolderOpened.gif);
+}
+
+.FolderListFolder img
+{
+	background-image: url(images/Folder.gif);
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/filemanager/browser/default/browser.html
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/filemanager/browser/default/browser.html	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/filemanager/browser/default/browser.html	(revision 1280)
@@ -0,0 +1,163 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This page compose the File Browser dialog frameset.
+-->
+<html>
+	<head>
+		<title>FCKeditor - Resources Browser</title>
+		<link href="browser.css" type="text/css" rel="stylesheet">
+		<script type="text/javascript" src="js/fckxml.js"></script>
+		<script language="javascript">
+
+function GetUrlParam( paramName )
+{
+	var oRegex = new RegExp( '[\?&]' + paramName + '=([^&]+)', 'i' ) ;
+	var oMatch = oRegex.exec( window.top.location.search ) ;
+
+	if ( oMatch && oMatch.length > 1 )
+		return decodeURIComponent( oMatch[1] ) ;
+	else
+		return '' ;
+}
+
+var oConnector = new Object() ;
+oConnector.CurrentFolder	= '/' ;
+
+var sConnUrl = GetUrlParam( 'Connector' ) ;
+
+// Gecko has some problems when using relative URLs (not starting with slash).
+if ( sConnUrl.substr(0,1) != '/' && sConnUrl.indexOf( '://' ) < 0 )
+	sConnUrl = window.location.href.replace( /browser.html.*$/, '' ) + sConnUrl ;
+
+oConnector.ConnectorUrl = sConnUrl + ( sConnUrl.indexOf('?') != -1 ? '&' : '?' ) ;
+
+var sServerPath = GetUrlParam( 'ServerPath' ) ;
+if ( sServerPath.length > 0 )
+	oConnector.ConnectorUrl += 'ServerPath=' + encodeURIComponent( sServerPath ) + '&' ;
+
+oConnector.ResourceType		= GetUrlParam( 'Type' ) ;
+oConnector.ShowAllTypes		= ( oConnector.ResourceType.length == 0 ) ;
+
+if ( oConnector.ShowAllTypes )
+	oConnector.ResourceType = 'File' ;
+
+oConnector.SendCommand = function( command, params, callBackFunction )
+{
+	var sUrl = this.ConnectorUrl + 'Command=' + command ;
+	sUrl += '&Type=' + this.ResourceType ;
+	sUrl += '&CurrentFolder=' + encodeURIComponent( this.CurrentFolder ) ;
+
+	if ( params ) sUrl += '&' + params ;
+
+	// Add a random salt to avoid getting a cached version of the command execution
+	sUrl += '&uuid=' + new Date().getTime() ;
+
+	var oXML = new FCKXml() ;
+
+	if ( callBackFunction )
+		oXML.LoadUrl( sUrl, callBackFunction ) ;	// Asynchronous load.
+	else
+		return oXML.LoadUrl( sUrl ) ;
+
+	return null ;
+}
+
+oConnector.CheckError = function( responseXml )
+{
+	var iErrorNumber = 0 ;
+	var oErrorNode = responseXml.SelectSingleNode( 'Connector/Error' ) ;
+
+	if ( oErrorNode )
+	{
+		iErrorNumber = parseInt( oErrorNode.attributes.getNamedItem('number').value, 10 ) ;
+
+		switch ( iErrorNumber )
+		{
+			case 0 :
+				break ;
+			case 1 :	// Custom error. Message placed in the "text" attribute.
+				alert( oErrorNode.attributes.getNamedItem('text').value ) ;
+				break ;
+			case 101 :
+				alert( 'Folder already exists' ) ;
+				break ;
+			case 102 :
+				alert( 'Invalid folder name' ) ;
+				break ;
+			case 103 :
+				alert( 'You have no permissions to create the folder' ) ;
+				break ;
+			case 110 :
+				alert( 'Unknown error creating folder' ) ;
+				break ;
+			default :
+				alert( 'Error on your request. Error number: ' + iErrorNumber ) ;
+				break ;
+		}
+	}
+	return iErrorNumber ;
+}
+
+var oIcons = new Object() ;
+
+oIcons.AvailableIconsArray = [
+	'ai','avi','bmp','cs','dll','doc','exe','fla','gif','htm','html','jpg','js',
+	'mdb','mp3','pdf','png','ppt','rdp','swf','swt','txt','vsd','xls','xml','zip' ] ;
+
+oIcons.AvailableIcons = new Object() ;
+
+for ( var i = 0 ; i < oIcons.AvailableIconsArray.length ; i++ )
+	oIcons.AvailableIcons[ oIcons.AvailableIconsArray[i] ] = true ;
+
+oIcons.GetIcon = function( fileName )
+{
+	var sExtension = fileName.substr( fileName.lastIndexOf('.') + 1 ).toLowerCase() ;
+
+	if ( this.AvailableIcons[ sExtension ] == true )
+		return sExtension ;
+	else
+		return 'default.icon' ;
+}
+
+function OnUploadCompleted( errorNumber, fileUrl, fileName, customMsg )
+{
+	window.frames['frmUpload'].OnUploadCompleted( errorNumber, fileName ) ;
+}
+
+		</script>
+	</head>
+	<frameset cols="150,*" class="Frame" framespacing="3" bordercolor="#f1f1e3" frameborder="1">
+		<frameset rows="50,*" framespacing="0">
+			<frame src="frmresourcetype.html" scrolling="no" frameborder="0">
+			<frame name="frmFolders" src="frmfolders.html" scrolling="auto" frameborder="1">
+		</frameset>
+		<frameset rows="50,*,50" framespacing="0">
+			<frame name="frmActualFolder" src="frmactualfolder.html" scrolling="no" frameborder="0">
+			<frame name="frmResourcesList" src="frmresourceslist.html" scrolling="auto" frameborder="1">
+			<frameset cols="150,*,0" framespacing="0" frameborder="0">
+				<frame name="frmCreateFolder" src="frmcreatefolder.html" scrolling="no" frameborder="0">
+				<frame name="frmUpload" src="frmupload.html" scrolling="no" frameborder="0">
+				<frame name="frmUploadWorker" src="javascript:void(0)" scrolling="no" frameborder="0">
+			</frameset>
+		</frameset>
+	</frameset>
+</html>
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/filemanager/browser/default/frmactualfolder.html
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/filemanager/browser/default/frmactualfolder.html	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/filemanager/browser/default/frmactualfolder.html	(revision 1280)
@@ -0,0 +1,67 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This page shows the actual folder path.
+-->
+<html>
+	<head>
+		<link href="browser.css" type="text/css" rel="stylesheet">
+		<script type="text/javascript">
+
+function OnResize()
+{
+	divName.style.width = "1px" ;
+	divName.style.width = tdName.offsetWidth + "px" ;
+}
+
+function SetCurrentFolder( resourceType, folderPath )
+{
+	document.getElementById('tdName').innerHTML = folderPath ;
+}
+
+window.onload = function()
+{
+	window.top.IsLoadedActualFolder = true ;
+}
+
+		</script>
+	</head>
+	<body bottomMargin="0" topMargin="0">
+		<table height="100%" cellSpacing="0" cellPadding="0" width="100%" border="0">
+			<tr>
+				<td>
+					<button style="WIDTH: 100%" type="button">
+						<table cellSpacing="0" cellPadding="0" width="100%" border="0">
+							<tr>
+								<td><img height="32" alt="" src="images/FolderOpened32.gif" width="32"></td>
+								<td>&nbsp;</td>
+								<td id="tdName" width="100%" nowrap class="ActualFolder">/</td>
+								<td>&nbsp;</td>
+								<td><img height="8" src="images/ButtonArrow.gif" width="12"></td>
+								<td>&nbsp;</td>
+							</tr>
+						</table>
+					</button>
+				</td>
+			</tr>
+		</table>
+	</body>
+</html>
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/filemanager/browser/default/frmcreatefolder.html
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/filemanager/browser/default/frmcreatefolder.html	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/filemanager/browser/default/frmcreatefolder.html	(revision 1280)
@@ -0,0 +1,113 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Page used to create new folders in the current folder.
+-->
+<html>
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+		<link href="browser.css" type="text/css" rel="stylesheet">
+		<script type="text/javascript" src="js/common.js"></script>
+		<script language="javascript">
+
+function SetCurrentFolder( resourceType, folderPath )
+{
+	oConnector.ResourceType = resourceType ;
+	oConnector.CurrentFolder = folderPath ;
+}
+
+function CreateFolder()
+{
+	var sFolderName ;
+
+	while ( true )
+	{
+		sFolderName = prompt( 'Type the name of the new folder:', '' ) ;
+
+		if ( sFolderName == null )
+			return ;
+		else if ( sFolderName.length == 0 )
+			alert( 'Please type the folder name' ) ;
+		else
+			break ;
+	}
+
+	oConnector.SendCommand( 'CreateFolder', 'NewFolderName=' + encodeURIComponent( sFolderName) , CreateFolderCallBack ) ;
+}
+
+function CreateFolderCallBack( fckXml )
+{
+	if ( oConnector.CheckError( fckXml ) == 0 )
+		window.parent.frames['frmResourcesList'].Refresh() ;
+
+	/*
+	// Get the current folder path.
+	var oNode = fckXml.SelectSingleNode( 'Connector/Error' ) ;
+	var iErrorNumber = parseInt( oNode.attributes.getNamedItem('number').value ) ;
+
+	switch ( iErrorNumber )
+	{
+		case 0 :
+			window.parent.frames['frmResourcesList'].Refresh() ;
+			break ;
+		case 101 :
+			alert( 'Folder already exists' ) ;
+			break ;
+		case 102 :
+			alert( 'Invalid folder name' ) ;
+			break ;
+		case 103 :
+			alert( 'You have no permissions to create the folder' ) ;
+			break ;
+		case 110 :
+			alert( 'Unknown error creating folder' ) ;
+			break ;
+		default :
+			alert( 'Error creating folder. Error number: ' + iErrorNumber ) ;
+			break ;
+	}
+	*/
+}
+
+window.onload = function()
+{
+	window.top.IsLoadedCreateFolder = true ;
+}
+		</script>
+	</head>
+	<body bottomMargin="0" topMargin="0">
+		<table height="100%" cellSpacing="0" cellPadding="0" width="100%" border="0">
+			<tr>
+				<td>
+					<button type="button" style="WIDTH: 100%" onclick="CreateFolder();">
+						<table cellSpacing="0" cellPadding="0" border="0">
+							<tr>
+								<td><img height="16" alt="" src="images/Folder.gif" width="16"></td>
+								<td>&nbsp;</td>
+								<td nowrap>Create New Folder</td>
+							</tr>
+						</table>
+					</button>
+				</td>
+			</tr>
+		</table>
+	</body>
+</html>
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/filemanager/browser/default/frmfolders.html
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/filemanager/browser/default/frmfolders.html	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/filemanager/browser/default/frmfolders.html	(revision 1280)
@@ -0,0 +1,196 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This page shows the list of folders available in the parent folder
+ * of the current folder.
+-->
+<html>
+	<head>
+		<link href="browser.css" type="text/css" rel="stylesheet">
+		<script type="text/javascript" src="js/common.js"></script>
+		<script language="javascript">
+
+var sActiveFolder ;
+
+var bIsLoaded = false ;
+var iIntervalId ;
+
+var oListManager = new Object() ;
+
+oListManager.Init = function()
+{
+	this.Table = document.getElementById('tableFiles') ;
+	this.UpRow = document.getElementById('trUp') ;
+
+	this.TableRows = new Object() ;
+}
+
+oListManager.Clear = function()
+{
+	// Remove all other rows available.
+	while ( this.Table.rows.length > 1 )
+		this.Table.deleteRow(1) ;
+
+	// Reset the TableRows collection.
+	this.TableRows = new Object() ;
+}
+
+oListManager.AddItem = function( folderName, folderPath )
+{
+	// Create the new row.
+	var oRow = this.Table.insertRow(-1) ;
+	oRow.className = 'FolderListFolder' ;
+
+	// Build the link to view the folder.
+	var sLink = '<a href="#" onclick="OpenFolder(\'' + folderPath + '\');return false;">' ;
+
+	// Add the folder icon cell.
+	var oCell = oRow.insertCell(-1) ;
+	oCell.width = 16 ;
+	oCell.innerHTML = sLink + '<img alt="" src="images/spacer.gif" width="16" height="16" border="0"></a>' ;
+
+	// Add the folder name cell.
+	oCell = oRow.insertCell(-1) ;
+	oCell.noWrap = true ;
+	oCell.innerHTML = '&nbsp;' + sLink + folderName + '</a>' ;
+
+	this.TableRows[ folderPath ] = oRow ;
+}
+
+oListManager.ShowUpFolder = function( upFolderPath )
+{
+	this.UpRow.style.display = ( upFolderPath != null ? '' : 'none' ) ;
+
+	if ( upFolderPath != null )
+	{
+		document.getElementById('linkUpIcon').onclick = document.getElementById('linkUp').onclick = function()
+		{
+			LoadFolders( upFolderPath ) ;
+			return false ;
+		}
+	}
+}
+
+function CheckLoaded()
+{
+	if ( window.top.IsLoadedActualFolder
+		&& window.top.IsLoadedCreateFolder
+		&& window.top.IsLoadedUpload
+		&& window.top.IsLoadedResourcesList )
+	{
+		window.clearInterval( iIntervalId ) ;
+		bIsLoaded = true ;
+		OpenFolder( sActiveFolder ) ;
+	}
+}
+
+function OpenFolder( folderPath )
+{
+	sActiveFolder = folderPath ;
+
+	if ( ! bIsLoaded )
+	{
+		if ( ! iIntervalId )
+			iIntervalId = window.setInterval( CheckLoaded, 100 ) ;
+		return ;
+	}
+
+	// Change the style for the select row (to show the opened folder).
+	for ( var sFolderPath in oListManager.TableRows )
+	{
+		oListManager.TableRows[ sFolderPath ].className =
+			( sFolderPath == folderPath ? 'FolderListCurrentFolder' : 'FolderListFolder' ) ;
+	}
+
+	// Set the current folder in all frames.
+	window.parent.frames['frmActualFolder'].SetCurrentFolder( oConnector.ResourceType, folderPath ) ;
+	window.parent.frames['frmCreateFolder'].SetCurrentFolder( oConnector.ResourceType, folderPath ) ;
+	window.parent.frames['frmUpload'].SetCurrentFolder( oConnector.ResourceType, folderPath ) ;
+
+	// Load the resources list for this folder.
+	window.parent.frames['frmResourcesList'].LoadResources( oConnector.ResourceType, folderPath ) ;
+}
+
+function LoadFolders( folderPath )
+{
+	// Clear the folders list.
+	oListManager.Clear() ;
+
+	// Get the parent folder path.
+	var sParentFolderPath ;
+	if ( folderPath != '/' )
+		sParentFolderPath = folderPath.substring( 0, folderPath.lastIndexOf( '/', folderPath.length - 2 ) + 1 ) ;
+
+	// Show/Hide the Up Folder.
+	oListManager.ShowUpFolder( sParentFolderPath ) ;
+
+	if ( folderPath != '/' )
+	{
+		sActiveFolder = folderPath ;
+		oConnector.CurrentFolder = sParentFolderPath ;
+		oConnector.SendCommand( 'GetFolders', null, GetFoldersCallBack ) ;
+	}
+	else
+		OpenFolder( '/' ) ;
+}
+
+function GetFoldersCallBack( fckXml )
+{
+	if ( oConnector.CheckError( fckXml ) != 0 )
+		return ;
+
+	// Get the current folder path.
+	var oNode = fckXml.SelectSingleNode( 'Connector/CurrentFolder' ) ;
+	var sCurrentFolderPath = oNode.attributes.getNamedItem('path').value ;
+
+	var oNodes = fckXml.SelectNodes( 'Connector/Folders/Folder' ) ;
+
+	for ( var i = 0 ; i < oNodes.length ; i++ )
+	{
+		var sFolderName = oNodes[i].attributes.getNamedItem('name').value ;
+		oListManager.AddItem( sFolderName, sCurrentFolderPath + sFolderName + '/' ) ;
+	}
+
+	OpenFolder( sActiveFolder ) ;
+}
+
+function SetResourceType( type )
+{
+	oConnector.ResourceType = type ;
+	LoadFolders( '/' ) ;
+}
+
+window.onload = function()
+{
+	oListManager.Init() ;
+	LoadFolders( '/' ) ;
+}
+		</script>
+	</head>
+	<body class="FileArea" bottomMargin="10" leftMargin="10" topMargin="10" rightMargin="10">
+		<table id="tableFiles" cellSpacing="0" cellPadding="0" width="100%" border="0">
+			<tr id="trUp" style="DISPLAY: none">
+				<td width="16"><a id="linkUpIcon" href="#"><img alt="" src="images/FolderUp.gif" width="16" height="16" border="0"></a></td>
+				<td nowrap width="100%">&nbsp;<a id="linkUp" href="#">..</a></td>
+			</tr>
+		</table>
+	</body>
+</html>
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/filemanager/browser/default/frmresourceslist.html
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/filemanager/browser/default/frmresourceslist.html	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/filemanager/browser/default/frmresourceslist.html	(revision 1280)
@@ -0,0 +1,167 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This page shows all resources available in a folder in the File Browser.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+	<link href="browser.css" type="text/css" rel="stylesheet" />
+	<script type="text/javascript" src="js/common.js"></script>
+	<script type="text/javascript">
+
+var oListManager = new Object() ;
+
+oListManager.Clear = function()
+{
+	document.body.innerHTML = '' ;
+}
+
+function ProtectPath(path)
+{
+	path = path.replace( /\\/g, '\\\\') ;
+	path = path.replace( /'/g, '\\\'') ;
+	return path ;
+}
+
+oListManager.GetFolderRowHtml = function( folderName, folderPath )
+{
+	// Build the link to view the folder.
+	var sLink = '<a href="#" onclick="OpenFolder(\'' + ProtectPath( folderPath ) + '\');return false;">' ;
+
+	return '<tr>' +
+			'<td width="16">' +
+				sLink +
+				'<img alt="" src="images/Folder.gif" width="16" height="16" border="0"><\/a>' +
+			'<\/td><td nowrap colspan="2">&nbsp;' +
+				sLink +
+				folderName +
+				'<\/a>' +
+		'<\/td><\/tr>' ;
+}
+
+oListManager.GetFileRowHtml = function( fileName, fileUrl, fileSize )
+{
+	// Build the link to view the folder.
+	var sLink = '<a href="#" onclick="OpenFile(\'' + ProtectPath( fileUrl ) + '\');return false;">' ;
+
+	// Get the file icon.
+	var sIcon = oIcons.GetIcon( fileName ) ;
+
+	return '<tr>' +
+			'<td width="16">' +
+				sLink +
+				'<img alt="" src="images/icons/' + sIcon + '.gif" width="16" height="16" border="0"><\/a>' +
+			'<\/td><td>&nbsp;' +
+				sLink +
+				fileName +
+				'<\/a>' +
+			'<\/td><td align="right" nowrap>&nbsp;' +
+				fileSize +
+				' KB' +
+		'<\/td><\/tr>' ;
+}
+
+function OpenFolder( folderPath )
+{
+	// Load the resources list for this folder.
+	window.parent.frames['frmFolders'].LoadFolders( folderPath ) ;
+}
+
+function OpenFile( fileUrl )
+{
+	window.top.opener.SetUrl( encodeURI( fileUrl ) ) ;
+	window.top.close() ;
+	window.top.opener.focus() ;
+}
+
+function LoadResources( resourceType, folderPath )
+{
+	oListManager.Clear() ;
+	oConnector.ResourceType = resourceType ;
+	oConnector.CurrentFolder = folderPath ;
+	oConnector.SendCommand( 'GetFoldersAndFiles', null, GetFoldersAndFilesCallBack ) ;
+}
+
+function Refresh()
+{
+	LoadResources( oConnector.ResourceType, oConnector.CurrentFolder ) ;
+}
+
+function GetFoldersAndFilesCallBack( fckXml )
+{
+	if ( oConnector.CheckError( fckXml ) != 0 )
+		return ;
+
+	// Get the current folder path.
+	var oFolderNode = fckXml.SelectSingleNode( 'Connector/CurrentFolder' ) ;
+	if ( oFolderNode == null )
+	{
+		alert( 'The server didn\'t reply with a proper XML data. Please check your configuration.' ) ;
+		return ;
+	}
+	var sCurrentFolderPath	= oFolderNode.attributes.getNamedItem('path').value ;
+	var sCurrentFolderUrl	= oFolderNode.attributes.getNamedItem('url').value ;
+
+//	var dTimer = new Date() ;
+
+	var oHtml = new StringBuilder( '<table id="tableFiles" cellspacing="1" cellpadding="0" width="100%" border="0">' ) ;
+
+	// Add the Folders.
+	var oNodes ;
+	oNodes = fckXml.SelectNodes( 'Connector/Folders/Folder' ) ;
+	for ( var i = 0 ; i < oNodes.length ; i++ )
+	{
+		var sFolderName = oNodes[i].attributes.getNamedItem('name').value ;
+		oHtml.Append( oListManager.GetFolderRowHtml( sFolderName, sCurrentFolderPath + sFolderName + "/" ) ) ;
+	}
+
+	// Add the Files.
+	oNodes = fckXml.SelectNodes( 'Connector/Files/File' ) ;
+	for ( var j = 0 ; j < oNodes.length ; j++ )
+	{
+		var oNode = oNodes[j] ;
+		var sFileName = oNode.attributes.getNamedItem('name').value ;
+		var sFileSize = oNode.attributes.getNamedItem('size').value ;
+
+		// Get the optional "url" attribute. If not available, build the url.
+		var oFileUrlAtt = oNodes[j].attributes.getNamedItem('url') ;
+		var sFileUrl = oFileUrlAtt != null ? oFileUrlAtt.value : sCurrentFolderUrl + sFileName ;
+
+		oHtml.Append( oListManager.GetFileRowHtml( sFileName, sFileUrl, sFileSize ) ) ;
+	}
+
+	oHtml.Append( '<\/table>' ) ;
+
+	document.body.innerHTML = oHtml.ToString() ;
+
+//	window.top.document.title = 'Finished processing in ' + ( ( ( new Date() ) - dTimer ) / 1000 ) + ' seconds' ;
+
+}
+
+window.onload = function()
+{
+	window.top.IsLoadedResourcesList = true ;
+}
+	</script>
+</head>
+<body class="FileArea">
+</body>
+</html>
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/filemanager/browser/default/frmresourcetype.html
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/filemanager/browser/default/frmresourcetype.html	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/filemanager/browser/default/frmresourcetype.html	(revision 1280)
@@ -0,0 +1,65 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This page shows the list of available resource types.
+-->
+<html>
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+		<link href="browser.css" type="text/css" rel="stylesheet">
+		<script type="text/javascript" src="js/common.js"></script>
+		<script language="javascript">
+
+function SetResourceType( type )
+{
+	window.parent.frames["frmFolders"].SetResourceType( type ) ;
+}
+
+var aTypes = [
+	['File','File'],
+	['Image','Image'],
+	['Flash','Flash'],
+	['Media','Media']
+] ;
+
+window.onload = function()
+{
+	for ( var i = 0 ; i < aTypes.length ; i++ )
+	{
+		if ( oConnector.ShowAllTypes || aTypes[i][0] == oConnector.ResourceType )
+			AddSelectOption( document.getElementById('cmbType'), aTypes[i][1], aTypes[i][0] ) ;
+	}
+}
+
+		</script>
+	</head>
+	<body bottomMargin="0" topMargin="0">
+		<table height="100%" cellSpacing="0" cellPadding="0" width="100%" border="0">
+			<tr>
+				<td nowrap>
+					Resource Type<BR>
+					<select id="cmbType" style="WIDTH: 100%" onchange="SetResourceType(this.value);">
+					</select>
+				</td>
+			</tr>
+		</table>
+	</body>
+</html>
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/filemanager/browser/default/frmupload.html
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/filemanager/browser/default/frmupload.html	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/filemanager/browser/default/frmupload.html	(revision 1280)
@@ -0,0 +1,114 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Page used to upload new files in the current folder.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+		<title>File Upload</title>
+		<link href="browser.css" type="text/css" rel="stylesheet" />
+		<script type="text/javascript" src="js/common.js"></script>
+		<script type="text/javascript">
+
+function SetCurrentFolder( resourceType, folderPath )
+{
+	var sUrl = oConnector.ConnectorUrl + 'Command=FileUpload' ;
+	sUrl += '&Type=' + resourceType ;
+	sUrl += '&CurrentFolder=' + encodeURIComponent( folderPath ) ;
+
+	document.getElementById('frmUpload').action = sUrl ;
+}
+
+function OnSubmit()
+{
+	if ( document.getElementById('NewFile').value.length == 0 )
+	{
+		alert( 'Please select a file from your computer' ) ;
+		return false ;
+	}
+
+	// Set the interface elements.
+	document.getElementById('eUploadMessage').innerHTML = 'Upload a new file in this folder (Upload in progress, please wait...)' ;
+	document.getElementById('btnUpload').disabled = true ;
+
+	return true ;
+}
+
+function OnUploadCompleted( errorNumber, data )
+{
+	// Reset the Upload Worker Frame.
+	window.parent.frames['frmUploadWorker'].location = 'javascript:void(0)' ;
+
+	// Reset the upload form (On IE we must do a little trick to avoid problems).
+	if ( document.all )
+		document.getElementById('NewFile').outerHTML = '<input id="NewFile" name="NewFile" style="WIDTH: 100%" type="file">' ;
+	else
+		document.getElementById('frmUpload').reset() ;
+
+	// Reset the interface elements.
+	document.getElementById('eUploadMessage').innerHTML = 'Upload a new file in this folder' ;
+	document.getElementById('btnUpload').disabled = false ;
+
+	switch ( errorNumber )
+	{
+		case 0 :
+			window.parent.frames['frmResourcesList'].Refresh() ;
+			break ;
+		case 1 :	// Custom error.
+			alert( data ) ;
+			break ;
+		case 201 :
+			window.parent.frames['frmResourcesList'].Refresh() ;
+			alert( 'A file with the same name is already available. The uploaded file has been renamed to "' + data + '"' ) ;
+			break ;
+		case 202 :
+			alert( 'Invalid file' ) ;
+			break ;
+		default :
+			alert( 'Error on file upload. Error number: ' + errorNumber ) ;
+			break ;
+	}
+}
+
+window.onload = function()
+{
+	window.top.IsLoadedUpload = true ;
+}
+		</script>
+	</head>
+	<body bottommargin="0" topmargin="0">
+		<form id="frmUpload" action="" target="frmUploadWorker" method="post" enctype="multipart/form-data" onsubmit="return OnSubmit();">
+			<table height="100%" cellspacing="0" cellpadding="0" width="100%" border="0">
+				<tr>
+					<td nowrap="nowrap">
+						<span id="eUploadMessage">Upload a new file in this folder</span><br>
+						<table cellspacing="0" cellpadding="0" width="100%" border="0">
+							<tr>
+								<td width="100%"><input id="NewFile" name="NewFile" style="WIDTH: 100%" type="file"></td>
+								<td nowrap="nowrap">&nbsp;<input id="btnUpload" type="submit" value="Upload"></td>
+							</tr>
+						</table>
+					</td>
+				</tr>
+			</table>
+		</form>
+	</body>
+</html>
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/filemanager/browser/default/js/common.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/filemanager/browser/default/js/common.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/filemanager/browser/default/js/common.js	(revision 1280)
@@ -0,0 +1,55 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Common objects and functions shared by all pages that compose the
+ * File Browser dialog window.
+ */
+
+function AddSelectOption( selectElement, optionText, optionValue )
+{
+	var oOption = document.createElement("OPTION") ;
+
+	oOption.text	= optionText ;
+	oOption.value	= optionValue ;
+
+	selectElement.options.add(oOption) ;
+
+	return oOption ;
+}
+
+var oConnector	= window.parent.oConnector ;
+var oIcons		= window.parent.oIcons ;
+
+
+function StringBuilder( value )
+{
+    this._Strings = new Array( value || '' ) ;
+}
+
+StringBuilder.prototype.Append = function( value )
+{
+    if ( value )
+        this._Strings.push( value ) ;
+}
+
+StringBuilder.prototype.ToString = function()
+{
+    return this._Strings.join( '' ) ;
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/filemanager/browser/default/js/fckxml.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/filemanager/browser/default/js/fckxml.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/filemanager/browser/default/js/fckxml.js	(revision 1280)
@@ -0,0 +1,129 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Defines the FCKXml object that is used for XML data calls
+ * and XML processing.
+ *
+ * This script is shared by almost all pages that compose the
+ * File Browser frameset.
+ */
+
+var FCKXml = function()
+{}
+
+FCKXml.prototype.GetHttpRequest = function()
+{
+	// Gecko / IE7
+	if ( typeof(XMLHttpRequest) != 'undefined' )
+		return new XMLHttpRequest() ;
+
+	// IE6
+	try { return new ActiveXObject( 'Msxml2.XMLHTTP' ) ; }
+	catch(e) {}
+
+	// IE5
+	try { return new ActiveXObject( 'Microsoft.XMLHTTP' ) ; }
+	catch(e) {}
+
+	return null ;
+}
+
+FCKXml.prototype.LoadUrl = function( urlToCall, asyncFunctionPointer )
+{
+	var oFCKXml = this ;
+
+	var bAsync = ( typeof(asyncFunctionPointer) == 'function' ) ;
+
+	var oXmlHttp = this.GetHttpRequest() ;
+
+	oXmlHttp.open( "GET", urlToCall, bAsync ) ;
+
+	if ( bAsync )
+	{
+		oXmlHttp.onreadystatechange = function()
+		{
+			if ( oXmlHttp.readyState == 4 )
+			{
+				if ( ( oXmlHttp.status != 200 && oXmlHttp.status != 304 ) || oXmlHttp.responseXML == null || oXmlHttp.responseXML.firstChild == null )
+				{
+					alert( 'The server didn\'t send back a proper XML response. Please contact your system administrator.\n\n' +
+							'XML request error: ' + oXmlHttp.statusText + ' (' + oXmlHttp.status + ')\n\n' +
+							'Requested URL:\n' + urlToCall + '\n\n' +
+							'Response text:\n' + oXmlHttp.responseText ) ;
+					return ;
+				}
+
+				oFCKXml.DOMDocument = oXmlHttp.responseXML ;
+				asyncFunctionPointer( oFCKXml ) ;
+			}
+		}
+	}
+
+	oXmlHttp.send( null ) ;
+
+	if ( ! bAsync )
+	{
+		if ( oXmlHttp.status == 200 || oXmlHttp.status == 304 )
+			this.DOMDocument = oXmlHttp.responseXML ;
+		else
+		{
+			alert( 'XML request error: ' + oXmlHttp.statusText + ' (' + oXmlHttp.status + ')' ) ;
+		}
+	}
+}
+
+FCKXml.prototype.SelectNodes = function( xpath )
+{
+	if ( navigator.userAgent.indexOf('MSIE') >= 0 )		// IE
+		return this.DOMDocument.selectNodes( xpath ) ;
+	else					// Gecko
+	{
+		var aNodeArray = new Array();
+
+		var xPathResult = this.DOMDocument.evaluate( xpath, this.DOMDocument,
+				this.DOMDocument.createNSResolver(this.DOMDocument.documentElement), XPathResult.ORDERED_NODE_ITERATOR_TYPE, null) ;
+		if ( xPathResult )
+		{
+			var oNode = xPathResult.iterateNext() ;
+ 			while( oNode )
+ 			{
+ 				aNodeArray[aNodeArray.length] = oNode ;
+ 				oNode = xPathResult.iterateNext();
+ 			}
+		}
+		return aNodeArray ;
+	}
+}
+
+FCKXml.prototype.SelectSingleNode = function( xpath )
+{
+	if ( navigator.userAgent.indexOf('MSIE') >= 0 )		// IE
+		return this.DOMDocument.selectSingleNode( xpath ) ;
+	else					// Gecko
+	{
+		var xPathResult = this.DOMDocument.evaluate( xpath, this.DOMDocument,
+				this.DOMDocument.createNSResolver(this.DOMDocument.documentElement), 9, null);
+
+		if ( xPathResult && xPathResult.singleNodeValue )
+			return xPathResult.singleNodeValue ;
+		else
+			return null ;
+	}
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/js/fckeditorcode_gecko.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/js/fckeditorcode_gecko.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/js/fckeditorcode_gecko.js	(revision 1280)
@@ -0,0 +1,108 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ * 
+ * == BEGIN LICENSE ==
+ * 
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ * 
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ * 
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ * 
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ * 
+ * == END LICENSE ==
+ * 
+ * This file has been compressed for better performance. The original source
+ * can be found at "editor/_source".
+ */
+
+var FCK_STATUS_NOTLOADED=window.parent.FCK_STATUS_NOTLOADED=0;var FCK_STATUS_ACTIVE=window.parent.FCK_STATUS_ACTIVE=1;var FCK_STATUS_COMPLETE=window.parent.FCK_STATUS_COMPLETE=2;var FCK_TRISTATE_OFF=window.parent.FCK_TRISTATE_OFF=0;var FCK_TRISTATE_ON=window.parent.FCK_TRISTATE_ON=1;var FCK_TRISTATE_DISABLED=window.parent.FCK_TRISTATE_DISABLED=-1;var FCK_UNKNOWN=window.parent.FCK_UNKNOWN=-9;var FCK_TOOLBARITEM_ONLYICON=window.parent.FCK_TOOLBARITEM_ONLYICON=0;var FCK_TOOLBARITEM_ONLYTEXT=window.parent.FCK_TOOLBARITEM_ONLYTEXT=1;var FCK_TOOLBARITEM_ICONTEXT=window.parent.FCK_TOOLBARITEM_ICONTEXT=2;var FCK_EDITMODE_WYSIWYG=window.parent.FCK_EDITMODE_WYSIWYG=0;var FCK_EDITMODE_SOURCE=window.parent.FCK_EDITMODE_SOURCE=1;var FCK_IMAGES_PATH='images/';var FCK_SPACER_PATH='images/spacer.gif';var CTRL=1000;var SHIFT=2000;var ALT=4000;var FCK_STYLE_BLOCK=0;var FCK_STYLE_INLINE=1;var FCK_STYLE_OBJECT=2;
+String.prototype.Contains=function(A){return (this.indexOf(A)>-1);};String.prototype.Equals=function(){var A=arguments;if (A.length==1&&A[0].pop) A=A[0];for (var i=0;i<A.length;i++){if (this==A[i]) return true;};return false;};String.prototype.IEquals=function(){var A=this.toUpperCase();var B=arguments;if (B.length==1&&B[0].pop) B=B[0];for (var i=0;i<B.length;i++){if (A==B[i].toUpperCase()) return true;};return false;};String.prototype.ReplaceAll=function(A,B){var C=this;for (var i=0;i<A.length;i++){C=C.replace(A[i],B[i]);};return C;};String.prototype.StartsWith=function(A){return (this.substr(0,A.length)==A);};String.prototype.EndsWith=function(A,B){var C=this.length;var D=A.length;if (D>C) return false;if (B){var E=new RegExp(A+'$','i');return E.test(this);}else return (D==0||this.substr(C-D,D)==A);};String.prototype.Remove=function(A,B){var s='';if (A>0) s=this.substring(0,A);if (A+B<this.length) s+=this.substring(A+B,this.length);return s;};String.prototype.Trim=function(){return this.replace(/(^[ \t\n\r]*)|([ \t\n\r]*$)/g,'');};String.prototype.LTrim=function(){return this.replace(/^[ \t\n\r]*/g,'');};String.prototype.RTrim=function(){return this.replace(/[ \t\n\r]*$/g,'');};String.prototype.ReplaceNewLineChars=function(A){return this.replace(/\n/g,A);};String.prototype.Replace=function(A,B,C){if (typeof B=='function'){return this.replace(A,function(){return B.apply(C||this,arguments);});}else return this.replace(A,B);};Array.prototype.AddItem=function(A){var i=this.length;this[i]=A;return i;};Array.prototype.IndexOf=function(A){for (var i=0;i<this.length;i++){if (this[i]==A) return i;};return-1;};
+var s=navigator.userAgent.toLowerCase();var FCKBrowserInfo={IsIE:/*@cc_on!@*/false,IsIE7:/*@cc_on!@*/false&&s.Contains('msie 7'),IsGecko:s.Contains('gecko/'),IsSafari:s.Contains(' applewebkit/'),IsOpera:!!window.opera,IsMac:s.Contains('macintosh')};(function(A){A.IsGeckoLike=(A.IsGecko||A.IsSafari||A.IsOpera);if (A.IsGecko){var B=s.match(/gecko\/(\d+)/)[1];A.IsGecko10=((B<20051111)||(/rv:1\.7/.test(s)));A.IsGecko19=/rv:1\.9/.test(s);}else A.IsGecko10=false;})(FCKBrowserInfo);
+var FCKURLParams={};(function(){var A=document.location.search.substr(1).split('&');for (var i=0;i<A.length;i++){var B=A[i].split('=');var C=decodeURIComponent(B[0]);var D=decodeURIComponent(B[1]);FCKURLParams[C]=D;}})();
+var FCKEvents=function(A){this.Owner=A;this._RegisteredEvents={};};FCKEvents.prototype.AttachEvent=function(A,B){var C;if (!(C=this._RegisteredEvents[A])) this._RegisteredEvents[A]=[B];else C.push(B);};FCKEvents.prototype.FireEvent=function(A,B){var C=true;var D=this._RegisteredEvents[A];if (D){for (var i=0;i<D.length;i++){try{C=(D[i](this.Owner,B)&&C);}catch(e){if (e.number!=-2146823277) throw e;}}};return C;};
+var FCKDataProcessor=function(){};FCKDataProcessor.prototype={ConvertToHtml:function(A){if (FCKConfig.FullPage){FCK.DocTypeDeclaration=A.match(FCKRegexLib.DocTypeTag);if (!FCKRegexLib.HasBodyTag.test(A)) A='<body>'+A+'</body>';if (!FCKRegexLib.HtmlOpener.test(A)) A='<html dir="'+FCKConfig.ContentLangDirection+'">'+A+'</html>';if (!FCKRegexLib.HeadOpener.test(A)) A=A.replace(FCKRegexLib.HtmlOpener,'$&<head><title></title></head>');return A;}else{var B=FCKConfig.DocType+'<html dir="'+FCKConfig.ContentLangDirection+'"';if (FCKBrowserInfo.IsIE&&FCKConfig.DocType.length>0&&!FCKRegexLib.Html4DocType.test(FCKConfig.DocType)) B+=' style="overflow-y: scroll"';B+='><head><title></title></head><body'+FCKConfig.GetBodyAttributes()+'>'+A+'</body></html>';return B;}},ConvertToDataFormat:function(A,B,C,D){var E=FCKXHtml.GetXHTML(A,!B,D);if (C&&FCKRegexLib.EmptyOutParagraph.test(E)) return '';return E;},FixHtml:function(A){return A;}};
+var FCK={Name:FCKURLParams['InstanceName'],Status:0,EditMode:0,Toolbar:null,HasFocus:false,DataProcessor:new FCKDataProcessor(),AttachToOnSelectionChange:function(A){this.Events.AttachEvent('OnSelectionChange',A);},GetLinkedFieldValue:function(){return this.LinkedField.value;},GetParentForm:function(){return this.LinkedField.form;},StartupValue:'',IsDirty:function(){if (this.EditMode==1) return (this.StartupValue!=this.EditingArea.Textarea.value);else return (this.StartupValue!=this.EditorDocument.body.innerHTML);},ResetIsDirty:function(){if (this.EditMode==1) this.StartupValue=this.EditingArea.Textarea.value;else if (this.EditorDocument.body) this.StartupValue=this.EditorDocument.body.innerHTML;},StartEditor:function(){this.TempBaseTag=FCKConfig.BaseHref.length>0?'<base href="'+FCKConfig.BaseHref+'" _fcktemp="true"></base>':'';var A=FCK.KeystrokeHandler=new FCKKeystrokeHandler();A.OnKeystroke=_FCK_KeystrokeHandler_OnKeystroke;A.SetKeystrokes(FCKConfig.Keystrokes);if (FCKBrowserInfo.IsIE7){if ((CTRL+86/*V*/) in A.Keystrokes) A.SetKeystrokes([CTRL+86,true]);if ((SHIFT+45/*INS*/) in A.Keystrokes) A.SetKeystrokes([SHIFT+45,true]);};A.SetKeystrokes([CTRL+8,true]);this.EditingArea=new FCKEditingArea(document.getElementById('xEditingArea'));this.EditingArea.FFSpellChecker=FCKConfig.FirefoxSpellChecker;this.SetData(this.GetLinkedFieldValue(),true);FCKTools.AddEventListener(document,"keydown",this._TabKeyHandler);},Focus:function(){FCK.EditingArea.Focus();},SetStatus:function(A){this.Status=A;if (A==1){FCKFocusManager.AddWindow(window,true);if (FCKBrowserInfo.IsIE) FCKFocusManager.AddWindow(window.frameElement,true);if (FCKConfig.StartupFocus) FCK.Focus();};this.Events.FireEvent('OnStatusChange',A);},FixBody:function(){var A=FCKConfig.EnterMode;if (A!='p'&&A!='div') return;var B=this.EditorDocument;if (!B) return;var C=B.body;if (!C) return;FCKDomTools.TrimNode(C);var D=C.firstChild;var E;while (D){var F=false;switch (D.nodeType){case 1:if (!FCKListsLib.BlockElements[D.nodeName.toLowerCase()]) F=true;break;case 3:if (E||D.nodeValue.Trim().length>0) F=true;};if (F){var G=D.parentNode;if (!E) E=G.insertBefore(B.createElement(A),D);E.appendChild(G.removeChild(D));D=E.nextSibling;}else{if (E){FCKDomTools.TrimNode(E);E=null;};D=D.nextSibling;}};if (E) FCKDomTools.TrimNode(E);},GetData:function(A){if (FCK.EditMode==1) return FCK.EditingArea.Textarea.value;this.FixBody();var B=FCK.EditorDocument;if (!B) return null;var C=FCKConfig.FullPage;var D=FCK.DataProcessor.ConvertToDataFormat(C?B.documentElement:B.body,!C,FCKConfig.IgnoreEmptyParagraphValue,A);D=FCK.ProtectEventsRestore(D);if (FCKBrowserInfo.IsIE) D=D.replace(FCKRegexLib.ToReplace,'$1');if (C){if (FCK.DocTypeDeclaration&&FCK.DocTypeDeclaration.length>0) D=FCK.DocTypeDeclaration+'\n'+D;if (FCK.XmlDeclaration&&FCK.XmlDeclaration.length>0) D=FCK.XmlDeclaration+'\n'+D;};return FCKConfig.ProtectedSource.Revert(D);},UpdateLinkedField:function(){var A=FCK.GetXHTML(FCKConfig.FormatOutput);if (FCKConfig.HtmlEncodeOutput) A=FCKTools.HTMLEncode(A);FCK.LinkedField.value=A;FCK.Events.FireEvent('OnAfterLinkedFieldUpdate');},RegisteredDoubleClickHandlers:{},OnDoubleClick:function(A){var B=FCK.RegisteredDoubleClickHandlers[A.tagName];if (B) B(A);},RegisterDoubleClickHandler:function(A,B){FCK.RegisteredDoubleClickHandlers[B.toUpperCase()]=A;},OnAfterSetHTML:function(){FCKDocumentProcessor.Process(FCK.EditorDocument);FCKUndo.SaveUndoStep();FCK.Events.FireEvent('OnSelectionChange');FCK.Events.FireEvent('OnAfterSetHTML');},ProtectUrls:function(A){A=A.replace(FCKRegexLib.ProtectUrlsA,'$& _fcksavedurl=$1');A=A.replace(FCKRegexLib.ProtectUrlsImg,'$& _fcksavedurl=$1');return A;},ProtectEvents:function(A){return A.replace(FCKRegexLib.TagsWithEvent,_FCK_ProtectEvents_ReplaceTags);},ProtectEventsRestore:function(A){return A.replace(FCKRegexLib.ProtectedEvents,_FCK_ProtectEvents_RestoreEvents);},ProtectTags:function(A){var B=FCKConfig.ProtectedTags;if (FCKBrowserInfo.IsIE) B+=B.length>0?'|ABBR|XML|EMBED':'ABBR|XML|EMBED';var C;if (B.length>0){C=new RegExp('<('+B+')(?!\w|:)','gi');A=A.replace(C,'<FCK:$1');C=new RegExp('<\/('+B+')>','gi');A=A.replace(C,'<\/FCK:$1>');};B='META';if (FCKBrowserInfo.IsIE) B+='|HR';C=new RegExp('<(('+B+')(?=\\s|>|/)[\\s\\S]*?)/?>','gi');A=A.replace(C,'<FCK:$1 />');return A;},SetData:function(A,B){this.EditingArea.Mode=FCK.EditMode;if (FCK.EditMode==0){this._ForceResetIsDirty=(B===true);A=FCKConfig.ProtectedSource.Protect(A);A=FCK.DataProcessor.ConvertToHtml(A);A=A.replace(FCKRegexLib.InvalidSelfCloseTags,'$1></$2>');A=FCK.ProtectEvents(A);A=FCK.ProtectUrls(A);A=FCK.ProtectTags(A);if (FCK.TempBaseTag.length>0&&!FCKRegexLib.HasBaseTag.test(A)) A=A.replace(FCKRegexLib.HeadOpener,'$&'+FCK.TempBaseTag);var C='';if (!FCKConfig.FullPage) C+=_FCK_GetEditorAreaStyleTags();if (FCKBrowserInfo.IsIE) C+=FCK._GetBehaviorsStyle();else if (FCKConfig.ShowBorders) C+='<link href="'+FCKConfig.FullBasePath+'css/fck_showtableborders_gecko.css" rel="stylesheet" type="text/css" _fcktemp="true" />';C+='<link href="'+FCKConfig.FullBasePath+'css/fck_internal.css" rel="stylesheet" type="text/css" _fcktemp="true" />';A=A.replace(FCKRegexLib.HeadCloser,C+'$&');this.EditingArea.OnLoad=_FCK_EditingArea_OnLoad;this.EditingArea.Start(A);}else{FCK.EditorWindow=null;FCK.EditorDocument=null;FCKDomTools.PaddingNode=null;this.EditingArea.OnLoad=null;this.EditingArea.Start(A);this.EditingArea.Textarea._FCKShowContextMenu=true;FCK.EnterKeyHandler=null;if (B) this.ResetIsDirty();FCK.KeystrokeHandler.AttachToElement(this.EditingArea.Textarea);this.EditingArea.Textarea.focus();FCK.Events.FireEvent('OnAfterSetHTML');};if (FCKBrowserInfo.IsGecko) window.onresize();},HasFocus:false,RedirectNamedCommands:{},ExecuteNamedCommand:function(A,B,C,D){if (!D) FCKUndo.SaveUndoStep();if (!C&&FCK.RedirectNamedCommands[A]!=null) FCK.ExecuteRedirectedNamedCommand(A,B);else{FCK.Focus();FCK.EditorDocument.execCommand(A,false,B);FCK.Events.FireEvent('OnSelectionChange');};if (!D) FCKUndo.SaveUndoStep();},GetNamedCommandState:function(A){try{if (FCKBrowserInfo.IsSafari&&FCK.EditorWindow&&A.IEquals('Paste')) return 0;if (!FCK.EditorDocument.queryCommandEnabled(A)) return -1;else{return FCK.EditorDocument.queryCommandState(A)?1:0;}}catch (e){return 0;}},GetNamedCommandValue:function(A){var B='';var C=FCK.GetNamedCommandState(A);if (C==-1) return null;try{B=this.EditorDocument.queryCommandValue(A);}catch(e) {};return B?B:'';},Paste:function(A){if (FCK.Status!=2||!FCK.Events.FireEvent('OnPaste')) return false;return A||FCK._ExecPaste();},PasteFromWord:function(){FCKDialog.OpenDialog('FCKDialog_Paste',FCKLang.PasteFromWord,'dialog/fck_paste.html',400,330,'Word');},Preview:function(){var A=FCKConfig.ScreenWidth*0.8;var B=FCKConfig.ScreenHeight*0.7;var C=(FCKConfig.ScreenWidth-A)/2;var D=window.open('',null,'toolbar=yes,location=no,status=yes,menubar=yes,scrollbars=yes,resizable=yes,width='+A+',height='+B+',left='+C);var E;if (FCKConfig.FullPage){if (FCK.TempBaseTag.length>0) E=FCK.TempBaseTag+FCK.GetXHTML();else E=FCK.GetXHTML();}else{E=FCKConfig.DocType+'<html dir="'+FCKConfig.ContentLangDirection+'"><head>'+FCK.TempBaseTag+'<title>'+FCKLang.Preview+'</title>'+_FCK_GetEditorAreaStyleTags()+'</head><body'+FCKConfig.GetBodyAttributes()+'>'+FCK.GetXHTML()+'</body></html>';};D.document.write(E);D.document.close();},SwitchEditMode:function(A){var B=(FCK.EditMode==0);var C=FCK.IsDirty();var D;if (B){FCKCommands.GetCommand('ShowBlocks').SaveState();if (!A&&FCKBrowserInfo.IsIE) FCKUndo.SaveUndoStep();D=FCK.GetXHTML(FCKConfig.FormatSource);if (D==null) return false;}else D=this.EditingArea.Textarea.value;FCK.EditMode=B?1:0;FCK.SetData(D,!C);FCK.Focus();FCKTools.RunFunction(FCK.ToolbarSet.RefreshModeState,FCK.ToolbarSet);return true;},InsertElement:function(A){if (typeof A=='string') A=this.EditorDocument.createElement(A);var B=A.nodeName.toLowerCase();var C=new FCKDomRange(this.EditorWindow);if (FCKListsLib.BlockElements[B]!=null){C.SplitBlock();C.InsertNode(A);var D=FCKDomTools.GetNextSourceElement(A,false,null,['hr','br','param','img','area','input']);if (!D&&FCKConfig.EnterMode!='br'){D=this.EditorDocument.body.appendChild(this.EditorDocument.createElement(FCKConfig.EnterMode));if (FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(D);};if (FCKListsLib.EmptyElements[B]==null) C.MoveToElementEditStart(A);else if (D) C.MoveToElementEditStart(D);else C.MoveToPosition(A,4);if (FCKBrowserInfo.IsGecko){if (D) D.scrollIntoView(false);A.scrollIntoView(false);}}else{C.MoveToSelection();C.DeleteContents();C.InsertNode(A);C.SetStart(A,4);C.SetEnd(A,4);};C.Select();C.Release();this.Focus();return A;},_InsertBlockElement:function(A){},_IsFunctionKey:function(A){if (A>=16&&A<=20) return true;if (A==27||(A>=33&&A<=40)) return true;if (A==45) return true;return false;},_KeyDownListener:function(A){if (!A) A=FCK.EditorWindow.event;if (FCK.EditorWindow){if (!FCK._IsFunctionKey(A.keyCode)&&!(A.ctrlKey||A.metaKey)&&!(A.keyCode==46)) FCK._KeyDownUndo();};return true;},_KeyDownUndo:function(){if (!FCKUndo.Typing){FCKUndo.SaveUndoStep();FCKUndo.Typing=true;FCK.Events.FireEvent("OnSelectionChange");};FCKUndo.TypesCount++;FCKUndo.Changed=1;if (FCKUndo.TypesCount>FCKUndo.MaxTypes){FCKUndo.TypesCount=0;FCKUndo.SaveUndoStep();}},_TabKeyHandler:function(A){if (!A) A=window.event;var B=A.keyCode;if (B==9&&FCK.EditMode!=0){if (FCKBrowserInfo.IsIE){var C=document.selection.createRange();if (C.parentElement()!=FCK.EditingArea.Textarea) return true;C.text='\t';C.select();}else{var a=[];var D=FCK.EditingArea.Textarea;var E=D.selectionStart;var F=D.selectionEnd;a.push(D.value.substr(0,E));a.push('\t');a.push(D.value.substr(F));D.value=a.join('');D.setSelectionRange(E+1,E+1);};if (A.preventDefault) return A.preventDefault();return A.returnValue=false;};return true;}};FCK.Events=new FCKEvents(FCK);FCK.GetHTML=FCK.GetXHTML=FCK.GetData;FCK.SetHTML=FCK.SetData;FCK.InsertElementAndGetIt=FCK.CreateElement=FCK.InsertElement;function _FCK_ProtectEvents_ReplaceTags(A){return A.replace(FCKRegexLib.EventAttributes,_FCK_ProtectEvents_ReplaceEvents);};function _FCK_ProtectEvents_ReplaceEvents(A,B){return ' '+B+'_fckprotectedatt="'+encodeURIComponent(A)+'"';};function _FCK_ProtectEvents_RestoreEvents(A,B){return decodeURIComponent(B);};function _FCK_MouseEventsListener(A){if (!A) A=window.event;if (A.type=='mousedown') FCK.MouseDownFlag=true;else if (A.type=='mouseup') FCK.MouseDownFlag=false;else if (A.type=='mousemove') FCK.Events.FireEvent('OnMouseMove',A);};function _FCK_PaddingNodeListener(){if (FCKConfig.EnterMode.IEquals('br')) return;FCKDomTools.EnforcePaddingNode(FCK.EditorDocument,FCKConfig.EnterMode);if (!FCKBrowserInfo.IsIE&&FCKDomTools.PaddingNode){var A=FCK.EditorWindow.getSelection();if (A&&A.rangeCount==1){var B=A.getRangeAt(0);if (B.collapsed&&B.startContainer==FCK.EditorDocument.body&&B.startOffset==0){B.selectNodeContents(FCKDomTools.PaddingNode);B.collapse(true);A.removeAllRanges();A.addRange(B);}}}};function _FCK_EditingArea_OnLoad(){FCK.EditorWindow=FCK.EditingArea.Window;FCK.EditorDocument=FCK.EditingArea.Document;FCK.InitializeBehaviors();FCK.AttachToOnSelectionChange(_FCK_PaddingNodeListener);FCK.MouseDownFlag=false;FCKTools.AddEventListener(FCK.EditorDocument,'mousemove',_FCK_MouseEventsListener);FCKTools.AddEventListener(FCK.EditorDocument,'mousedown',_FCK_MouseEventsListener);FCKTools.AddEventListener(FCK.EditorDocument,'mouseup',_FCK_MouseEventsListener);if (FCKBrowserInfo.IsSafari){var A=function(evt){if (!(evt.ctrlKey||evt.metaKey)) return;if (FCK.EditMode!=0) return;switch (evt.keyCode){case 89:FCKUndo.Redo();break;case 90:FCKUndo.Undo();break;}};FCKTools.AddEventListener(FCK.EditorDocument,'keyup',A);};FCK.EnterKeyHandler=new FCKEnterKey(FCK.EditorWindow,FCKConfig.EnterMode,FCKConfig.ShiftEnterMode,FCKConfig.TabSpaces);FCK.KeystrokeHandler.AttachToElement(FCK.EditorDocument);if (FCK._ForceResetIsDirty) FCK.ResetIsDirty();if (FCKBrowserInfo.IsIE&&FCK.HasFocus) FCK.EditorDocument.body.setActive();FCK.OnAfterSetHTML();FCKCommands.GetCommand('ShowBlocks').RestoreState();if (FCK.Status!=0) return;if (FCKConfig.Debug) FCKDebug._GetWindow();FCK.SetStatus(1);};function _FCK_GetEditorAreaStyleTags(){var A='';var B=FCKConfig.EditorAreaCSS;var C=FCKConfig.EditorAreaStyles;for (var i=0;i<B.length;i++) A+='<link href="'+B[i]+'" rel="stylesheet" type="text/css" />';if (C&&C.length>0) A+="<style>"+C+"</style>";return A;};function _FCK_KeystrokeHandler_OnKeystroke(A,B){if (FCK.Status!=2) return false;if (FCK.EditMode==0){switch (B){case 'Paste':return!FCK.Paste();case 'Cut':FCKUndo.SaveUndoStep();return false;}}else{if (B.Equals('Paste','Undo','Redo','SelectAll','Cut')) return false;};var C=FCK.Commands.GetCommand(B);return (C.Execute.apply(C,FCKTools.ArgumentsToArray(arguments,2))!==false);};(function(){var A=window.parent.document;var B=A.getElementById(FCK.Name);var i=0;while (B||i==0){if (B&&B.tagName.toLowerCase().Equals('input','textarea')){FCK.LinkedField=B;break;};B=A.getElementsByName(FCK.Name)[i++];}})();var FCKTempBin={Elements:[],AddElement:function(A){var B=this.Elements.length;this.Elements[B]=A;return B;},RemoveElement:function(A){var e=this.Elements[A];this.Elements[A]=null;return e;},Reset:function(){var i=0;while (i<this.Elements.length) this.Elements[i++]=null;this.Elements.length=0;}};var FCKFocusManager=FCK.FocusManager={IsLocked:false,AddWindow:function(A,B){var C;if (FCKBrowserInfo.IsIE) C=A.nodeType==1?A:A.frameElement?A.frameElement:A.document;else if (FCKBrowserInfo.IsSafari) C=A;else C=A.document;FCKTools.AddEventListener(C,'blur',FCKFocusManager_Win_OnBlur);FCKTools.AddEventListener(C,'focus',B?FCKFocusManager_Win_OnFocus_Area:FCKFocusManager_Win_OnFocus);},RemoveWindow:function(A){if (FCKBrowserInfo.IsIE) oTarget=A.nodeType==1?A:A.frameElement?A.frameElement:A.document;else oTarget=A.document;FCKTools.RemoveEventListener(oTarget,'blur',FCKFocusManager_Win_OnBlur);FCKTools.RemoveEventListener(oTarget,'focus',FCKFocusManager_Win_OnFocus_Area);FCKTools.RemoveEventListener(oTarget,'focus',FCKFocusManager_Win_OnFocus);},Lock:function(){this.IsLocked=true;},Unlock:function(){if (this._HasPendingBlur) FCKFocusManager._Timer=window.setTimeout(FCKFocusManager_FireOnBlur,100);this.IsLocked=false;},_ResetTimer:function(){this._HasPendingBlur=false;if (this._Timer){window.clearTimeout(this._Timer);delete this._Timer;}}};function FCKFocusManager_Win_OnBlur(){if (typeof(FCK)!='undefined'&&FCK.HasFocus){FCKFocusManager._ResetTimer();FCKFocusManager._Timer=window.setTimeout(FCKFocusManager_FireOnBlur,100);}};function FCKFocusManager_FireOnBlur(){if (FCKFocusManager.IsLocked) FCKFocusManager._HasPendingBlur=true;else{FCK.HasFocus=false;FCK.Events.FireEvent("OnBlur");}};function FCKFocusManager_Win_OnFocus_Area(){FCK.Focus();FCKFocusManager_Win_OnFocus();};function FCKFocusManager_Win_OnFocus(){FCKFocusManager._ResetTimer();if (!FCK.HasFocus&&!FCKFocusManager.IsLocked){FCK.HasFocus=true;FCK.Events.FireEvent("OnFocus");}};
+FCK.Description="FCKeditor for Gecko Browsers";FCK.InitializeBehaviors=function(){if (FCKBrowserInfo.IsGecko) Window_OnResize();FCKFocusManager.AddWindow(this.EditorWindow);this.ExecOnSelectionChange=function(){FCK.Events.FireEvent("OnSelectionChange");};this._ExecDrop=function(evt){if (FCK.MouseDownFlag){FCK.MouseDownFlag=false;return;};if (FCKConfig.ForcePasteAsPlainText){if (evt.dataTransfer){var A=evt.dataTransfer.getData('Text');A=FCKTools.HTMLEncode(A);A=FCKTools.ProcessLineBreaks(window,FCKConfig,A);FCK.InsertHtml(A);}else if (FCKConfig.ShowDropDialog) FCK.PasteAsPlainText();}else if (FCKConfig.ShowDropDialog) FCKDialog.OpenDialog('FCKDialog_Paste',FCKLang.Paste,'dialog/fck_paste.html',400,330,'Security');evt.preventDefault();evt.stopPropagation();};this._ExecCheckCaret=function(evt){if (FCK.EditMode!=0) return;if (evt.type=='keypress'){var B=evt.keyCode;if (B<33||B>40) return;};var C=function(H){if (H.nodeType!=1) return false;var D=H.tagName.toLowerCase();return (FCKListsLib.BlockElements[D]||FCKListsLib.EmptyElements[D]);};var E=function(){var F=FCK.EditorWindow.getSelection();var G=F.getRangeAt(0);if (!G||!G.collapsed) return;var H=G.endContainer;if (H.nodeType!=3) return;if (H.nodeValue.length!=G.endOffset) return;var I=H.parentNode.tagName.toLowerCase();if (!(I=='a'||(!(FCKListsLib.BlockElements[I]||FCKListsLib.NonEmptyBlockElements[I])&&B==35))) return;var J=FCKTools.GetNextTextNode(H,H.parentNode,C);if (J) return;G=FCK.EditorDocument.createRange();J=FCKTools.GetNextTextNode(H,H.parentNode.parentNode,C);if (J){if (FCKBrowserInfo.IsOpera&&B==37) return;G.setStart(J,0);G.setEnd(J,0);}else{while (H.parentNode&&H.parentNode!=FCK.EditorDocument.body&&H.parentNode!=FCK.EditorDocument.documentElement&&H==H.parentNode.lastChild&&(!FCKListsLib.BlockElements[H.parentNode.tagName.toLowerCase()])) H=H.parentNode;if (FCKListsLib.BlockElements[I]||FCKListsLib.EmptyElements[I]||H==FCK.EditorDocument.body){G.setStart(H,H.childNodes.length);G.setEnd(H,H.childNodes.length);}else{var K=H.nextSibling;while (K){if (K.nodeType!=1){K=K.nextSibling;continue;};var L=K.tagName.toLowerCase();if (FCKListsLib.BlockElements[L]||FCKListsLib.EmptyElements[L]) break;K=K.nextSibling;};var M=FCK.EditorDocument.createTextNode('');if (K) H.parentNode.insertBefore(M,K);else H.parentNode.appendChild(M);G.setStart(M,0);G.setEnd(M,0);}};F.removeAllRanges();F.addRange(G);FCK.Events.FireEvent("OnSelectionChange");};setTimeout(E,1);};this._FillEmptyBlock=function(emptyBlockNode){if (!emptyBlockNode||emptyBlockNode.nodeType!=1) return;var N=emptyBlockNode.tagName.toLowerCase();if (N!='p'&&N!='div') return;if (emptyBlockNode.firstChild) return;FCKTools.AppendBogusBr(emptyBlockNode);};this._ExecCheckEmptyBlock=function(){FCK._FillEmptyBlock(FCK.EditorDocument.body.firstChild);var O=FCK.EditorWindow.getSelection();if (!O||O.rangeCount<1) return;var G=O.getRangeAt(0);FCK._FillEmptyBlock(G.startContainer);};this.ExecOnSelectionChangeTimer=function(){if (FCK.LastOnChangeTimer) window.clearTimeout(FCK.LastOnChangeTimer);FCK.LastOnChangeTimer=window.setTimeout(FCK.ExecOnSelectionChange,100);};this.EditorDocument.addEventListener('mouseup',this.ExecOnSelectionChange,false);this.EditorDocument.addEventListener('keyup',this.ExecOnSelectionChangeTimer,false);this._DblClickListener=function(e){FCK.OnDoubleClick(e.target);e.stopPropagation();};this.EditorDocument.addEventListener('dblclick',this._DblClickListener,true);this.EditorDocument.addEventListener('keydown',this._KeyDownListener,false);if (FCKBrowserInfo.IsGecko){this.EditorWindow.addEventListener('dragdrop',this._ExecDrop,true);}else if (FCKBrowserInfo.IsSafari){var Q=function(evt){ if (!FCK.MouseDownFlag) evt.returnValue=false;};this.EditorDocument.addEventListener('dragenter',Q,true);this.EditorDocument.addEventListener('dragover',Q,true);this.EditorDocument.addEventListener('drop',this._ExecDrop,true);this.EditorDocument.addEventListener('mousedown',function(ev){var R=ev.srcElement;if (R.nodeName.IEquals('IMG','HR','INPUT','TEXTAREA','SELECT')){FCKSelection.SelectNode(R);}},true);this.EditorDocument.addEventListener('mouseup',function(ev){if (ev.srcElement.nodeName.IEquals('INPUT','TEXTAREA','SELECT')) ev.preventDefault()},true);this.EditorDocument.addEventListener('click',function(ev){if (ev.srcElement.nodeName.IEquals('INPUT','TEXTAREA','SELECT')) ev.preventDefault()},true);};if (FCKBrowserInfo.IsGecko||FCKBrowserInfo.IsOpera){this.EditorDocument.addEventListener('keypress',this._ExecCheckCaret,false);this.EditorDocument.addEventListener('click',this._ExecCheckCaret,false);};if (FCKBrowserInfo.IsGecko) this.AttachToOnSelectionChange(this._ExecCheckEmptyBlock);FCK.ContextMenu._InnerContextMenu.SetMouseClickWindow(FCK.EditorWindow);FCK.ContextMenu._InnerContextMenu.AttachToElement(FCK.EditorDocument);};FCK.MakeEditable=function(){this.EditingArea.MakeEditable();};function Document_OnContextMenu(e){if (!e.target._FCKShowContextMenu) e.preventDefault();};document.oncontextmenu=Document_OnContextMenu;FCK._BaseGetNamedCommandState=FCK.GetNamedCommandState;FCK.GetNamedCommandState=function(A){switch (A){case 'Unlink':return FCKSelection.HasAncestorNode('A')?0:-1;default:return FCK._BaseGetNamedCommandState(A);}};FCK.RedirectNamedCommands={Print:true,Paste:true,Cut:true,Copy:true};FCK.ExecuteRedirectedNamedCommand=function(A,B){switch (A){case 'Print':FCK.EditorWindow.print();break;case 'Paste':try{if (FCKBrowserInfo.IsSafari) throw '';if (FCK.Paste()) FCK.ExecuteNamedCommand('Paste',null,true);}catch (e)	{ FCKDialog.OpenDialog('FCKDialog_Paste',FCKLang.Paste,'dialog/fck_paste.html',400,330,'Security');};break;case 'Cut':try			{ FCK.ExecuteNamedCommand('Cut',null,true);}catch (e)	{ alert(FCKLang.PasteErrorCut);};break;case 'Copy':try			{ FCK.ExecuteNamedCommand('Copy',null,true);}catch (e)	{ alert(FCKLang.PasteErrorCopy);};break;default:FCK.ExecuteNamedCommand(A,B);}};FCK._ExecPaste=function(){FCKUndo.SaveUndoStep();if (FCKConfig.ForcePasteAsPlainText){FCK.PasteAsPlainText();return false;};return true;};FCK.InsertHtml=function(A){A=FCKConfig.ProtectedSource.Protect(A);A=FCK.ProtectEvents(A);A=FCK.ProtectUrls(A);A=FCK.ProtectTags(A);FCKUndo.SaveUndoStep();this.EditorDocument.execCommand('inserthtml',false,A);this.Focus();this.Events.FireEvent("OnSelectionChange");};FCK.PasteAsPlainText=function(){FCKTools.RunFunction(FCKDialog.OpenDialog,FCKDialog,['FCKDialog_Paste',FCKLang.PasteAsText,'dialog/fck_paste.html',400,330,'PlainText']);};FCK.GetClipboardHTML=function(){return '';};FCK.CreateLink=function(A,B){var C=[];FCK.ExecuteNamedCommand('Unlink',null,false,!!B);if (A.length>0){var D='javascript:void(0);/*'+(new Date().getTime())+'*/';FCK.ExecuteNamedCommand('CreateLink',D,false,!!B);var E=this.EditorDocument.evaluate("//a[@href='"+D+"']",this.EditorDocument.body,null,XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,null);for (var i=0;i<E.snapshotLength;i++){var F=E.snapshotItem(i);F.href=A;C.push(F);}};return C;};
+var FCKConfig=FCK.Config={};if (document.location.protocol=='file:'){FCKConfig.BasePath=decodeURIComponent(document.location.pathname.substr(1));FCKConfig.BasePath=FCKConfig.BasePath.replace(/\\/gi, '/');var sFullProtocol=document.location.href.match(/^(file\:\/{2,3})/)[1];if (FCKBrowserInfo.IsOpera) sFullProtocol+='localhost/';FCKConfig.BasePath=sFullProtocol+FCKConfig.BasePath.substring(0,FCKConfig.BasePath.lastIndexOf('/')+1);FCKConfig.FullBasePath=FCKConfig.BasePath;}else{FCKConfig.BasePath=document.location.pathname.substring(0,document.location.pathname.lastIndexOf('/')+1);FCKConfig.FullBasePath=document.location.protocol+'//'+document.location.host+FCKConfig.BasePath;};FCKConfig.EditorPath=FCKConfig.BasePath.replace(/editor\/$/,'');try{FCKConfig.ScreenWidth=screen.width;FCKConfig.ScreenHeight=screen.height;}catch (e){FCKConfig.ScreenWidth=800;FCKConfig.ScreenHeight=600;};FCKConfig.ProcessHiddenField=function(){this.PageConfig={};var A=window.parent.document.getElementById(FCK.Name+'___Config');if (!A) return;var B=A.value.split('&');for (var i=0;i<B.length;i++){if (B[i].length==0) continue;var C=B[i].split('=');var D=decodeURIComponent(C[0]);var E=decodeURIComponent(C[1]);if (D=='CustomConfigurationsPath') FCKConfig[D]=E;else if (E.toLowerCase()=="true") this.PageConfig[D]=true;else if (E.toLowerCase()=="false") this.PageConfig[D]=false;else if (E.length>0&&!isNaN(E)) this.PageConfig[D]=parseInt(E,10);else this.PageConfig[D]=E;}};function FCKConfig_LoadPageConfig(){var A=FCKConfig.PageConfig;for (var B in A) FCKConfig[B]=A[B];};function FCKConfig_PreProcess(){var A=FCKConfig;if (A.AllowQueryStringDebug){try{if ((/fckdebug=true/i).test(window.top.location.search)) A.Debug=true;}catch (e) {/*Ignore it. Much probably we are inside a FRAME where the "top" is in another domain (security error).*/}};if (!A.PluginsPath.EndsWith('/')) A.PluginsPath+='/';if (typeof(A.EditorAreaCSS)=='string') A.EditorAreaCSS=A.EditorAreaCSS.split(',');var B=A.ToolbarComboPreviewCSS;if (!B||B.length==0) A.ToolbarComboPreviewCSS=A.EditorAreaCSS;else if (typeof(B)=='string') A.ToolbarComboPreviewCSS=[B];};FCKConfig.ToolbarSets={};FCKConfig.Plugins={};FCKConfig.Plugins.Items=[];FCKConfig.Plugins.Add=function(A,B,C){FCKConfig.Plugins.Items.AddItem([A,B,C]);};FCKConfig.ProtectedSource={};FCKConfig.ProtectedSource._CodeTag=(new Date()).valueOf();FCKConfig.ProtectedSource.RegexEntries=[/<!--[\s\S]*?-->/g,/<script[\s\S]*?<\/script>/gi,/<noscript[\s\S]*?<\/noscript>/gi,/<object[\s\S]+?<\/object>/gi];FCKConfig.ProtectedSource.Add=function(A){this.RegexEntries.AddItem(A);};FCKConfig.ProtectedSource.Protect=function(A){var B=this._CodeTag;function _Replace(protectedSource){var C=FCKTempBin.AddElement(protectedSource);return '<!--{'+B+C+'}-->';};for (var i=0;i<this.RegexEntries.length;i++){A=A.replace(this.RegexEntries[i],_Replace);};return A;};FCKConfig.ProtectedSource.Revert=function(A,B){function _Replace(m,opener,index){var C=B?FCKTempBin.RemoveElement(index):FCKTempBin.Elements[index];return FCKConfig.ProtectedSource.Revert(C,B);};var D=new RegExp("(<|&lt;)!--\\{"+this._CodeTag+"(\\d+)\\}--(>|&gt;)","g");return A.replace(D,_Replace);};FCKConfig.GetBodyAttributes=function(){var A='';if (this.BodyId&&this.BodyId.length>0) A+=' id="'+this.BodyId+'"';if (this.BodyClass&&this.BodyClass.length>0) A+=' class="'+this.BodyClass+'"';return A;};FCKConfig.ApplyBodyAttributes=function(A){if (this.BodyId&&this.BodyId.length>0) A.id=FCKConfig.BodyId;if (this.BodyClass&&this.BodyClass.length>0) A.className+=' '+FCKConfig.BodyClass;};
+var FCKDebug={};FCKDebug._GetWindow=function(){if (!this.DebugWindow||this.DebugWindow.closed) this.DebugWindow=window.open(FCKConfig.BasePath+'fckdebug.html','FCKeditorDebug','menubar=no,scrollbars=yes,resizable=yes,location=no,toolbar=no,width=600,height=500',true);return this.DebugWindow;};FCKDebug.Output=function(A,B,C){if (!FCKConfig.Debug) return;try{this._GetWindow().Output(A,B);}catch (e) {}};FCKDebug.OutputObject=function(A,B){if (!FCKConfig.Debug) return;try{this._GetWindow().OutputObject(A,B);}catch (e) {}}
+var FCKDomTools={MoveChildren:function(A,B,C){if (A==B) return;var D;if (C){while ((D=A.lastChild)) B.insertBefore(A.removeChild(D),B.firstChild);}else{while ((D=A.firstChild)) B.appendChild(A.removeChild(D));}},MoveNode:function(A,B,C){if (C) B.insertBefore(FCKDomTools.RemoveNode(A),B.firstChild);else B.appendChild(FCKDomTools.RemoveNode(A));},TrimNode:function(A){this.LTrimNode(A);this.RTrimNode(A);},LTrimNode:function(A){var B;while ((B=A.firstChild)){if (B.nodeType==3){var C=B.nodeValue.LTrim();var D=B.nodeValue.length;if (C.length==0){A.removeChild(B);continue;}else if (C.length<D){B.splitText(D-C.length);A.removeChild(A.firstChild);}};break;}},RTrimNode:function(A){var B;while ((B=A.lastChild)){if (B.nodeType==3){var C=B.nodeValue.RTrim();var D=B.nodeValue.length;if (C.length==0){B.parentNode.removeChild(B);continue;}else if (C.length<D){B.splitText(C.length);A.lastChild.parentNode.removeChild(A.lastChild);}};break;};if (!FCKBrowserInfo.IsIE){B=A.lastChild;if (B&&B.nodeType==1&&B.nodeName.toLowerCase()=='br'){B.parentNode.removeChild(B);}}},RemoveNode:function(A,B){if (B){var C;while ((C=A.firstChild)) A.parentNode.insertBefore(A.removeChild(C),A);};return A.parentNode.removeChild(A);},GetFirstChild:function(A,B){if (typeof (B)=='string') B=[B];var C=A.firstChild;while(C){if (C.nodeType==1&&C.tagName.Equals.apply(C.tagName,B)) return C;C=C.nextSibling;};return null;},GetLastChild:function(A,B){if (typeof (B)=='string') B=[B];var C=A.lastChild;while(C){if (C.nodeType==1&&(!B||C.tagName.Equals(B))) return C;C=C.previousSibling;};return null;},GetPreviousSourceElement:function(A,B,C,D){if (!A) return null;if (C&&A.nodeType==1&&A.nodeName.IEquals(C)) return null;if (A.previousSibling) A=A.previousSibling;else return this.GetPreviousSourceElement(A.parentNode,B,C,D);while (A){if (A.nodeType==1){if (C&&A.nodeName.IEquals(C)) break;if (!D||!A.nodeName.IEquals(D)) return A;}else if (B&&A.nodeType==3&&A.nodeValue.RTrim().length>0) break;if (A.lastChild) A=A.lastChild;else return this.GetPreviousSourceElement(A,B,C,D);};return null;},GetNextSourceElement:function(A,B,C,D){while((A=this.GetNextSourceNode(A,true))){if (A.nodeType==1){if (C&&A.nodeName.IEquals(C)) break;if (!D||!A.nodeName.IEquals(D)) return A;}else if (B&&A.nodeType==3&&A.nodeValue.RTrim().length>0) break;};return null;},GetNextSourceNode:function(A,B,C,D){if (!A) return null;var E;if (!B&&A.firstChild) E=A.firstChild;else{E=A.nextSibling;if (!E&&(!D||D!=A.parentNode)) return this.GetNextSourceNode(A.parentNode,true,C,D);};if (C&&E&&E.nodeType!=C) return this.GetNextSourceNode(E,false,C,D);return E;},GetPreviousSourceNode:function(A,B,C){if (!A) return null;var D;if (!B&&A.lastChild) D=A.lastChild;else D=(A.previousSibling||this.GetPreviousSourceNode(A.parentNode,true,C));if (C&&D&&D.nodeType!=C) return this.GetPreviousSourceNode(D,false,C);return D;},InsertAfterNode:function(A,B){return A.parentNode.insertBefore(B,A.nextSibling);},GetParents:function(A){var B=[];while (A){B.unshift(A);A=A.parentNode;};return B;},GetCommonParents:function(A,B){var C=this.GetParents(A);var D=this.GetParents(B);var E=[];for (var i=0;i<C.length;i++){if (C[i]==D[i]) E.push(C[i]);};return E;},GetCommonParentNode:function(A,B,C){var D={};if (!C.pop) C=[C];while (C.length>0) D[C.pop().toLowerCase()]=1;var E=this.GetCommonParents(A,B);var F=null;while ((F=E.pop())){if (D[F.nodeName.toLowerCase()]) return F;};return null;},GetIndexOf:function(A){var B=A.parentNode?A.parentNode.firstChild:null;var C=-1;while (B){C++;if (B==A) return C;B=B.nextSibling;};return-1;},PaddingNode:null,EnforcePaddingNode:function(A,B){this.CheckAndRemovePaddingNode(A,B,true);if (A.body.lastChild&&(A.body.lastChild.nodeType!=1||A.body.lastChild.tagName.toLowerCase()==B.toLowerCase())) return;var C=A.createElement(B);if (FCKBrowserInfo.IsGecko&&FCKListsLib.NonEmptyBlockElements[B]) FCKTools.AppendBogusBr(C);this.PaddingNode=C;if (A.body.childNodes.length==1&&A.body.firstChild.nodeType==1&&A.body.firstChild.tagName.toLowerCase()=='br'&&(A.body.firstChild.getAttribute('_moz_dirty')!=null||A.body.firstChild.getAttribute('type')=='_moz')) A.body.replaceChild(C,A.body.firstChild);else A.body.appendChild(C);},CheckAndRemovePaddingNode:function(A,B,C){var D=this.PaddingNode;if (!D) return;if (D.parentNode!=A.body||D.tagName.toLowerCase()!=B||(D.childNodes.length>1)||(D.firstChild&&D.firstChild.nodeValue!='\xa0'&&String(D.firstChild.tagName).toLowerCase()!='br')){this.PaddingNode=null;return;};if (!C){if (D.parentNode.childNodes.length>1) D.parentNode.removeChild(D);this.PaddingNode=null;}},HasAttribute:function(A,B){if (A.hasAttribute) return A.hasAttribute(B);else{var C=A.attributes[B];return (C!=undefined&&C.specified);}},HasAttributes:function(A){var B=A.attributes;for (var i=0;i<B.length;i++){if (FCKBrowserInfo.IsIE&&B[i].nodeName=='class'){if (A.className.length>0) return true;}else if (B[i].specified) return true;};return false;},RemoveAttribute:function(A,B){if (FCKBrowserInfo.IsIE&&B.toLowerCase()=='class') B='className';return A.removeAttribute(B,0);},GetAttributeValue:function(A,B){var C=B;if (typeof B=='string') B=A.attributes[B];else C=B.nodeName;if (B&&B.specified){if (C=='style') return A.style.cssText;else if (C=='class'||C.indexOf('on')==0) return B.nodeValue;else{return A.getAttribute(C,2);}};return null;},Contains:function(A,B){if (A.contains&&B.nodeType==1) return A.contains(B);while ((B=B.parentNode)){if (B==A) return true;};return false;},BreakParent:function(A,B,C){var D=C||new FCKDomRange(FCKTools.GetElementWindow(A));D.SetStart(A,4);D.SetEnd(B,4);var E=D.ExtractContents();D.InsertNode(A.parentNode.removeChild(A));E.InsertAfterNode(A);D.Release(!!C);},GetNodeAddress:function(A,B){var C=[];while (A&&A!=A.ownerDocument.documentElement){var D=A.parentNode;var E=-1;for(var i=0;i<D.childNodes.length;i++){var F=D.childNodes[i];if (B===true&&F.nodeType==3&&F.previousSibling&&F.previousSibling.nodeType==3) continue;E++;if (D.childNodes[i]==A) break;};C.unshift(E);A=A.parentNode;};return C;},GetNodeFromAddress:function(A,B,C){var D=A.documentElement;for (var i=0;i<B.length;i++){var E=B[i];if (!C){D=D.childNodes[E];continue;};var F=-1;for (var j=0;j<D.childNodes.length;j++){var G=D.childNodes[j];if (C===true&&G.nodeType==3&&G.previousSibling&&G.previousSibling.nodeType==3) continue;F++;if (F==E){D=G;break;}}};return D;},CloneElement:function(A){A=A.cloneNode(false);A.removeAttribute('id',false);return A;},ClearElementJSProperty:function(A,B){if (FCKBrowserInfo.IsIE) A.removeAttribute(B);else delete A[B];},SetElementMarker:function (A,B,C,D){var E=String(parseInt(Math.random()*0xfffffff,10));B._FCKMarkerId=E;B[C]=D;if (!A[E]) A[E]={ 'element':B,'markers':{} };A[E]['markers'][C]=D;},ClearElementMarkers:function(A,B,C){var D=B._FCKMarkerId;if (!D) return;this.ClearElementJSProperty(B,'_FCKMarkerId');for (var j in A[D]['markers']) this.ClearElementJSProperty(B,j);if (C) delete A[D];},ClearAllMarkers:function(A){for (var i in A) this.ClearElementMarkers(A,A[i]['element'],true);},ListToArray:function(A,B,C,D,E){if (!A.nodeName.IEquals(['ul','ol'])) return [];if (!D) D=0;if (!C) C=[];for (var i=0;i<A.childNodes.length;i++){var F=A.childNodes[i];if (!F.nodeName.IEquals('li')) continue;var G={ 'parent':A,'indent':D,'contents':[] };if (!E){G.grandparent=A.parentNode;if (G.grandparent&&G.grandparent.nodeName.IEquals('li')) G.grandparent=G.grandparent.parentNode;}else G.grandparent=E;if (B) this.SetElementMarker(B,F,'_FCK_ListArray_Index',C.length);C.push(G);for (var j=0;j<F.childNodes.length;j++){var H=F.childNodes[j];if (H.nodeName.IEquals(['ul','ol'])) this.ListToArray(H,B,C,D+1,G.grandparent);else G.contents.push(H);}};return C;},ArrayToList:function(A,B,C){if (C==undefined) C=0;if (!A||A.length<C+1) return null;var D=A[C].parent.ownerDocument;var E=D.createDocumentFragment();var F=null;var G=C;var H=Math.max(A[C].indent,0);var I=null;while (true){var J=A[G];if (J.indent==H){if (!F||A[G].parent.nodeName!=F.nodeName){F=A[G].parent.cloneNode(false);E.appendChild(F);};I=D.createElement('li');F.appendChild(I);for (var i=0;i<J.contents.length;i++) I.appendChild(J.contents[i].cloneNode(true));G++;}else if (J.indent==Math.max(H,0)+1){var K=this.ArrayToList(A,null,G);I.appendChild(K.listNode);G=K.nextIndex;}else if (J.indent==-1&&C==0&&J.grandparent){var I;if (J.grandparent.nodeName.IEquals(['ul','ol'])) I=D.createElement('li');else{if (FCKConfig.EnterMode.IEquals(['div','p'])&&!J.grandparent.nodeName.IEquals('td')) I=D.createElement(FCKConfig.EnterMode);else I=D.createDocumentFragment();};for (var i=0;i<J.contents.length;i++) I.appendChild(J.contents[i].cloneNode(true));if (I.nodeType==11){if (I.lastChild&&I.lastChild.getAttribute&&I.lastChild.getAttribute('type')=='_moz') I.removeChild(I.lastChild);I.appendChild(D.createElement('br'));};if (I.nodeName.IEquals(FCKConfig.EnterMode)&&I.firstChild){this.TrimNode(I);if (FCKListsLib.BlockBoundaries[I.firstChild.nodeName.toLowerCase()]){var M=D.createDocumentFragment();while (I.firstChild) M.appendChild(I.removeChild(I.firstChild));I=M;}};if (FCKBrowserInfo.IsGeckoLike&&I.nodeName.IEquals(['div','p'])) FCKTools.AppendBogusBr(I);E.appendChild(I);F=null;G++;}else return null;if (A.length<=G||Math.max(A[G].indent,0)<H){break;}};if (B){var N=E.firstChild;while (N){if (N.nodeType==1) this.ClearElementMarkers(B,N);N=this.GetNextSourceNode(N);}};return { 'listNode':E,'nextIndex':G };},GetNextSibling:function(A,B){A=A.nextSibling;while (A&&!B&&A.nodeType!=1&&(A.nodeType!=3||A.nodeValue.length==0)) A=A.nextSibling;return A;},GetPreviousSibling:function(A,B){A=A.previousSibling;while (A&&!B&&A.nodeType!=1&&(A.nodeType!=3||A.nodeValue.length==0)) A=A.previousSibling;return A;},CheckIsEmptyElement:function(A,B){var C=A.firstChild;var D;while (C){if (C.nodeType==1){if (D||!FCKListsLib.InlineNonEmptyElements[C.nodeName.toLowerCase()]) return false;if (!B||B(C)===true) D=C;}else if (C.nodeType==3&&C.nodeValue.length>0) return false;C=C.nextSibling;};return D?this.CheckIsEmptyElement(D,B):true;},SetElementStyles:function(A,B){var C=A.style;for (var D in B) C[D]=B[D];}};
+var FCKTools={};FCKTools.CreateBogusBR=function(A){var B=A.createElement('br');B.setAttribute('type','_moz');return B;};FCKTools.AppendStyleSheet=function(A,B){if (typeof(B)=='string') return this._AppendStyleSheet(A,B);else{var C=[];for (var i=0;i<B.length;i++) C.push(this._AppendStyleSheet(A,B[i]));return C;}};FCKTools.AppendStyleString=function (A,B){this._AppendStyleString(A,B);};FCKTools.GetElementDocument=function (A){return A.ownerDocument||A.document;};FCKTools.GetElementWindow=function(A){return this.GetDocumentWindow(this.GetElementDocument(A));};FCKTools.GetDocumentWindow=function(A){if (FCKBrowserInfo.IsSafari&&!A.parentWindow) this.FixDocumentParentWindow(window.top);return A.parentWindow||A.defaultView;};FCKTools.FixDocumentParentWindow=function(A){if (A.document) A.document.parentWindow=A;for (var i=0;i<A.frames.length;i++) FCKTools.FixDocumentParentWindow(A.frames[i]);};FCKTools.HTMLEncode=function(A){if (!A) return '';A=A.replace(/&/g,'&amp;');A=A.replace(/</g,'&lt;');A=A.replace(/>/g,'&gt;');return A;};FCKTools.HTMLDecode=function(A){if (!A) return '';A=A.replace(/&gt;/g,'>');A=A.replace(/&lt;/g,'<');A=A.replace(/&amp;/g,'&');return A;};FCKTools._ProcessLineBreaksForPMode=function(A,B,C,D,E){var F=0;var G="<p>";var H="</p>";var I="<br />";if (C){G="<li>";H="</li>";F=1;};while (D&&D!=A.FCK.EditorDocument.body){if (D.tagName.toLowerCase()=='p'){F=1;break;};D=D.parentNode;};for (var i=0;i<B.length;i++){var c=B.charAt(i);if (c=='\r') continue;if (c!='\n'){E.push(c);continue;};var n=B.charAt(i+1);if (n=='\r'){i++;n=B.charAt(i+1);};if (n=='\n'){i++;if (F) E.push(H);E.push(G);F=1;}else E.push(I);}};FCKTools._ProcessLineBreaksForDivMode=function(A,B,C,D,E){var F=0;var G="<div>";var H="</div>";if (C){G="<li>";H="</li>";F=1;};while (D&&D!=A.FCK.EditorDocument.body){if (D.tagName.toLowerCase()=='div'){F=1;break;};D=D.parentNode;};for (var i=0;i<B.length;i++){var c=B.charAt(i);if (c=='\r') continue;if (c!='\n'){E.push(c);continue;};if (F){if (E[E.length-1]==G){E.push("&nbsp;");};E.push(H);};E.push(G);F=1;};if (F) E.push(H);};FCKTools._ProcessLineBreaksForBrMode=function(A,B,C,D,E){var F=0;var G="<br />";var H="";if (C){G="<li>";H="</li>";F=1;};for (var i=0;i<B.length;i++){var c=B.charAt(i);if (c=='\r') continue;if (c!='\n'){E.push(c);continue;};if (F&&H.length) E.push (H);E.push(G);F=1;}};FCKTools.ProcessLineBreaks=function(A,B,C){var D=B.EnterMode.toLowerCase();var E=[];var F=0;var G=new A.FCKDomRange(A.FCK.EditorWindow);G.MoveToSelection();var H=G._Range.startContainer;while (H&&H.nodeType!=1) H=H.parentNode;if (H&&H.tagName.toLowerCase()=='li') F=1;if (D=='p') this._ProcessLineBreaksForPMode(A,C,F,H,E);else if (D=='div') this._ProcessLineBreaksForDivMode(A,C,F,H,E);else if (D=='br') this._ProcessLineBreaksForBrMode(A,C,F,H,E);return E.join("");};FCKTools.AddSelectOption=function(A,B,C){var D=FCKTools.GetElementDocument(A).createElement("OPTION");D.text=B;D.value=C;A.options.add(D);return D;};FCKTools.RunFunction=function(A,B,C,D){if (A) this.SetTimeout(A,0,B,C,D);};FCKTools.SetTimeout=function(A,B,C,D,E){return (E||window).setTimeout(function(){if (D) A.apply(C,[].concat(D));else A.apply(C);},B);};FCKTools.SetInterval=function(A,B,C,D,E){return (E||window).setInterval(function(){A.apply(C,D||[]);},B);};FCKTools.ConvertStyleSizeToHtml=function(A){return A.EndsWith('%')?A:parseInt(A,10);};FCKTools.ConvertHtmlSizeToStyle=function(A){return A.EndsWith('%')?A:(A+'px');};FCKTools.GetElementAscensor=function(A,B){var e=A;var C=","+B.toUpperCase()+",";while (e){if (C.indexOf(","+e.nodeName.toUpperCase()+",")!=-1) return e;e=e.parentNode;};return null;};FCKTools.CreateEventListener=function(A,B){var f=function(){var C=[];for (var i=0;i<arguments.length;i++) C.push(arguments[i]);A.apply(this,C.concat(B));};return f;};FCKTools.IsStrictMode=function(A){return ('CSS1Compat'==(A.compatMode||'CSS1Compat'));};FCKTools.ArgumentsToArray=function(A,B,C){B=B||0;C=C||A.length;var D=[];for (var i=B;i<B+C&&i<A.length;i++) D.push(A[i]);return D;};FCKTools.CloneObject=function(A){var B=function() {};B.prototype=A;return new B;};FCKTools.AppendBogusBr=function(A){if (!A) return;var B=this.GetLastItem(A.getElementsByTagName('br'));if (!B||(B.getAttribute('type',2)!='_moz'&&B.getAttribute('_moz_dirty')==null)){var C=this.GetElementDocument(A);if (FCKBrowserInfo.IsOpera) A.appendChild(C.createTextNode(''));else A.appendChild(this.CreateBogusBR(C));}};FCKTools.GetLastItem=function(A){if (A.length>0) return A[A.length-1];return null;};FCKTools.GetDocumentPosition=function(w,A){var x=0;var y=0;var B=A;while (B&&B!=w.document.body){x+=B.offsetLeft-B.scrollLeft;y+=B.offsetTop-B.scrollTop;B=B.offsetParent;};return { "x":x,"y":y };};FCKTools.GetWindowPosition=function(w,A){var B=this.GetDocumentPosition(w,A);var C=FCKTools.GetScrollPosition(w);B.x-=C.X;B.y-=C.Y;return B;};FCKTools.ProtectFormStyles=function(A){if (!A||A.nodeType!=1||A.tagName.toLowerCase()!='form') return [];var B=[];var C=['style','className'];for (var i=0;i<C.length;i++){var D=C[i];if (A.elements.namedItem(D)){var E=A.elements.namedItem(D);B.push([E,E.nextSibling]);A.removeChild(E);}};return B;};FCKTools.RestoreFormStyles=function(A,B){if (!A||A.nodeType!=1||A.tagName.toLowerCase()!='form') return;if (B.length>0){for (var i=B.length-1;i>=0;i--){var C=B[i][0];var D=B[i][1];if (D) A.insertBefore(C,D);else A.appendChild(C);}}};FCKTools.GetNextNode=function(A,B){if (A.firstChild) return A.firstChild;else if (A.nextSibling) return A.nextSibling;else{var C=A.parentNode;while (C){if (C==B) return null;if (C.nextSibling) return C.nextSibling;else C=C.parentNode;}};return null;};FCKTools.GetNextTextNode=function(A,B,C){node=this.GetNextNode(A,B);if (C&&node&&C(node)) return null;while (node&&node.nodeType!=3){node=this.GetNextNode(node,B);if (C&&node&&C(node)) return null;};return node;};FCKTools.Merge=function(){var A=arguments;var o=A[0];for (var i=1;i<A.length;i++){var B=A[i];for (var p in B) o[p]=B[p];};return o;};FCKTools.IsArray=function(A){return (A instanceof Array);};FCKTools.AppendLengthProperty=function(A,B){var C=0;for (var n in A) C++;return A[B||'length']=C;};FCKTools.NormalizeCssText=function(A){var B=document.createElement('span');B.style.cssText=A;return B.style.cssText;};FCKTools.Hitch=function(A,B){return function() { A[B].apply(A,arguments);};};
+FCKTools.CancelEvent=function(e){if (e) e.preventDefault();};FCKTools.DisableSelection=function(A){if (FCKBrowserInfo.IsGecko) A.style.MozUserSelect='none';else A.style.userSelect='none';};FCKTools._AppendStyleSheet=function(A,B){var e=A.createElement('LINK');e.rel='stylesheet';e.type='text/css';e.href=B;A.getElementsByTagName("HEAD")[0].appendChild(e);return e;};FCKTools._AppendStyleString=function(A,B){var e=A.createElement("STYLE");e.appendChild(A.createTextNode(B));A.getElementsByTagName("HEAD")[0].appendChild(e);return e;};FCKTools.ClearElementAttributes=function(A){for (var i=0;i<A.attributes.length;i++){A.removeAttribute(A.attributes[i].name,0);}};FCKTools.GetAllChildrenIds=function(A){var B=[];var C=function(parent){for (var i=0;i<parent.childNodes.length;i++){var D=parent.childNodes[i].id;if (D&&D.length>0) B[B.length]=D;C(parent.childNodes[i]);}};C(A);return B;};FCKTools.RemoveOuterTags=function(e){var A=e.ownerDocument.createDocumentFragment();for (var i=0;i<e.childNodes.length;i++) A.appendChild(e.childNodes[i].cloneNode(true));e.parentNode.replaceChild(A,e);};FCKTools.CreateXmlObject=function(A){switch (A){case 'XmlHttp':return new XMLHttpRequest();case 'DOMDocument':return document.implementation.createDocument('','',null);};return null;};FCKTools.GetScrollPosition=function(A){return { X:A.pageXOffset,Y:A.pageYOffset };};FCKTools.AddEventListener=function(A,B,C){A.addEventListener(B,C,false);};FCKTools.RemoveEventListener=function(A,B,C){A.removeEventListener(B,C,false);};FCKTools.AddEventListenerEx=function(A,B,C,D){A.addEventListener(B,function(e){C.apply(A,[e].concat(D||[]));},false);};FCKTools.GetViewPaneSize=function(A){return { Width:A.innerWidth,Height:A.innerHeight };};FCKTools.SaveStyles=function(A){var B=FCKTools.ProtectFormStyles(A);var C={};if (A.className.length>0){C.Class=A.className;A.className='';};var D=A.getAttribute('style');if (D&&D.length>0){C.Inline=D;A.setAttribute('style','',0);};FCKTools.RestoreFormStyles(A,B);return C;};FCKTools.RestoreStyles=function(A,B){var C=FCKTools.ProtectFormStyles(A);A.className=B.Class||'';if (B.Inline) A.setAttribute('style',B.Inline,0);else A.removeAttribute('style',0);FCKTools.RestoreFormStyles(A,C);};FCKTools.RegisterDollarFunction=function(A){A.$=function(id){return this.document.getElementById(id);};};FCKTools.AppendElement=function(A,B){return A.appendChild(A.ownerDocument.createElement(B));};FCKTools.GetElementPosition=function(A,B){var c={ X:0,Y:0 };var C=B||window;var D=FCKTools.GetElementWindow(A);var E=null;while (A){var F=D.getComputedStyle(A,'').position;if (F&&F!='static'&&A.style.zIndex!=FCKConfig.FloatingPanelsZIndex) break;c.X+=A.offsetLeft-A.scrollLeft;c.Y+=A.offsetTop-A.scrollTop;if (!FCKBrowserInfo.IsOpera){var G=E;while (G&&G!=A){c.X-=G.scrollLeft;c.Y-=G.scrollTop;G=G.parentNode;}};E=A;if (A.offsetParent) A=A.offsetParent;else{if (D!=C){A=D.frameElement;E=null;if (A) D=FCKTools.GetElementWindow(A);}else{c.X+=A.scrollLeft;c.Y+=A.scrollTop;break;}}};return c;};
+var FCKeditorAPI;function InitializeAPI(){var A=window.parent;if (!(FCKeditorAPI=A.FCKeditorAPI)){var B='var FCKeditorAPI = {Version : "2.5 SVN",VersionBuild : "16925",__Instances : new Object(),GetInstance : function( name ){return this.__Instances[ name ];},_FormSubmit : function(){for ( var name in FCKeditorAPI.__Instances ){var oEditor = FCKeditorAPI.__Instances[ name ] ;if ( oEditor.GetParentForm && oEditor.GetParentForm() == this )oEditor.UpdateLinkedField() ;}this._FCKOriginalSubmit() ;},_FunctionQueue	: {Functions : new Array(),IsRunning : false,Add : function( f ){this.Functions.push( f );if ( !this.IsRunning )this.StartNext();},StartNext : function(){var aQueue = this.Functions ;if ( aQueue.length > 0 ){this.IsRunning = true;aQueue[0].call();}else this.IsRunning = false;},Remove : function( f ){var aQueue = this.Functions;var i = 0, fFunc;while( (fFunc = aQueue[ i ]) ){if ( fFunc == f )aQueue.splice( i,1 );i++ ;}this.StartNext();}}}';if (A.execScript) A.execScript(B,'JavaScript');else{if (FCKBrowserInfo.IsGecko10){eval.call(A,B);}else if (FCKBrowserInfo.IsSafari||FCKBrowserInfo.IsGecko19){var C=A.document;var D=C.createElement('script');D.appendChild(C.createTextNode(B));C.documentElement.appendChild(D);}else A.eval(B);};FCKeditorAPI=A.FCKeditorAPI;};FCKeditorAPI.__Instances[FCK.Name]=FCK;};function _AttachFormSubmitToAPI(){var A=FCK.GetParentForm();if (A){FCKTools.AddEventListener(A,'submit',FCK.UpdateLinkedField);if (!A._FCKOriginalSubmit&&(typeof(A.submit)=='function'||(!A.submit.tagName&&!A.submit.length))){A._FCKOriginalSubmit=A.submit;A.submit=FCKeditorAPI._FormSubmit;}}};function FCKeditorAPI_Cleanup(){if (!window.FCKUnloadFlag) return;delete FCKeditorAPI.__Instances[FCK.Name];};function FCKeditorAPI_ConfirmCleanup(){window.FCKUnloadFlag=true;};FCKTools.AddEventListener(window,'unload',FCKeditorAPI_Cleanup);FCKTools.AddEventListener(window,'beforeunload',FCKeditorAPI_ConfirmCleanup);
+var FCKImagePreloader=function(){this._Images=[];};FCKImagePreloader.prototype={AddImages:function(A){if (typeof(A)=='string') A=A.split(';');this._Images=this._Images.concat(A);},Start:function(){var A=this._Images;this._PreloadCount=A.length;for (var i=0;i<A.length;i++){var B=document.createElement('img');FCKTools.AddEventListenerEx(B,'load',_FCKImagePreloader_OnImage,this);FCKTools.AddEventListenerEx(B,'error',_FCKImagePreloader_OnImage,this);B.src=A[i];_FCKImagePreloader_ImageCache.push(B);}}};var _FCKImagePreloader_ImageCache=[];function _FCKImagePreloader_OnImage(A,B){if ((--B._PreloadCount)==0&&B.OnComplete) B.OnComplete();}
+var FCKRegexLib={AposEntity:/&apos;/gi,ObjectElements:/^(?:IMG|TABLE|TR|TD|TH|INPUT|SELECT|TEXTAREA|HR|OBJECT|A|UL|OL|LI)$/i,NamedCommands:/^(?:Cut|Copy|Paste|Print|SelectAll|RemoveFormat|Unlink|Undo|Redo|Bold|Italic|Underline|StrikeThrough|Subscript|Superscript|JustifyLeft|JustifyCenter|JustifyRight|JustifyFull|Outdent|Indent|InsertOrderedList|InsertUnorderedList|InsertHorizontalRule)$/i,BeforeBody:/(^[\s\S]*\<body[^\>]*\>)/i,AfterBody:/(\<\/body\>[\s\S]*$)/i,ToReplace:/___fcktoreplace:([\w]+)/ig,MetaHttpEquiv:/http-equiv\s*=\s*["']?([^"' ]+)/i,HasBaseTag:/<base /i,HasBodyTag:/<body[\s|>]/i,HtmlOpener:/<html\s?[^>]*>/i,HeadOpener:/<head\s?[^>]*>/i,HeadCloser:/<\/head\s*>/i,FCK_Class:/\s*FCK__[^ ]*(?=\s+|$)/,ElementName:/(^[a-z_:][\w.\-:]*\w$)|(^[a-z_]$)/,ForceSimpleAmpersand:/___FCKAmp___/g,SpaceNoClose:/\/>/g,EmptyParagraph:/^<(p|div|address|h\d|center)(?=[ >])[^>]*>\s*(<\/\1>)?$/,EmptyOutParagraph:/^<(p|div|address|h\d|center)(?=[ >])[^>]*>(?:\s*|&nbsp;)(<\/\1>)?$/,TagBody:/></,GeckoEntitiesMarker:/#\?-\:/g,ProtectUrlsImg:/<img(?=\s).*?\ssrc=((?:(?:\s*)("|').*?\2)|(?:[^"'][^ >]+))/gi,ProtectUrlsA:/<a(?=\s).*?\shref=((?:(?:\s*)("|').*?\2)|(?:[^"'][^ >]+))/gi,Html4DocType:/HTML 4\.0 Transitional/i,DocTypeTag:/<!DOCTYPE[^>]*>/i,TagsWithEvent:/<[^\>]+ on\w+[\s\r\n]*=[\s\r\n]*?('|")[\s\S]+?\>/g,EventAttributes:/\s(on\w+)[\s\r\n]*=[\s\r\n]*?('|")([\s\S]*?)\2/g,ProtectedEvents:/\s\w+_fckprotectedatt="([^"]+)"/g,StyleProperties:/\S+\s*:/g,InvalidSelfCloseTags:/(<(?!base|meta|link|hr|br|param|img|area|input)([a-zA-Z0-9:]+)[^>]*)\/>/gi,StyleVariableAttName:/#\(\s*("|')(.+?)\1[^\)]*\s*\)/g,RegExp:/^\/(.*)\/([gim]*)$/};
+var FCKListsLib={BlockElements:{ address:1,blockquote:1,center:1,div:1,dl:1,fieldset:1,form:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,hr:1,marquee:1,noscript:1,ol:1,p:1,pre:1,script:1,table:1,ul:1 },NonEmptyBlockElements:{ p:1,div:1,form:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,address:1,pre:1,ol:1,ul:1,li:1,td:1,th:1 },InlineChildReqElements:{ abbr:1,acronym:1,b:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,q:1,samp:1,small:1,span:1,strike:1,strong:1,sub:1,sup:1,tt:1,u:1,'var':1 },InlineNonEmptyElements:{ a:1,abbr:1,acronym:1,b:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,q:1,samp:1,small:1,span:1,strike:1,strong:1,sub:1,sup:1,tt:1,u:1,'var':1 },EmptyElements:{ base:1,col:1,meta:1,link:1,hr:1,br:1,param:1,img:1,area:1,input:1 },PathBlockElements:{ address:1,blockquote:1,dl:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,p:1,pre:1,li:1,dt:1,de:1 },PathBlockLimitElements:{ body:1,div:1,td:1,th:1,caption:1,form:1 },StyleBlockElements:{ address:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,p:1,pre:1 },StyleObjectElements:{ img:1,hr:1,li:1,table:1,tr:1,td:1,embed:1,object:1,ol:1,ul:1 },BlockBoundaries:{ p:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,hr:1,address:1,pre:1,ol:1,ul:1,li:1,dt:1,de:1,table:1,thead:1,tbody:1,tfoot:1,tr:1,th:1,td:1,caption:1,col:1,colgroup:1,blockquote:1,body:1 },ListBoundaries:{ p:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,hr:1,address:1,pre:1,ol:1,ul:1,li:1,dt:1,de:1,table:1,thead:1,tbody:1,tfoot:1,tr:1,th:1,td:1,caption:1,col:1,colgroup:1,blockquote:1,body:1,br:1 }};
+var FCKLanguageManager=FCK.Language={AvailableLanguages:{af:'Afrikaans',ar:'Arabic',bg:'Bulgarian',bn:'Bengali/Bangla',bs:'Bosnian',ca:'Catalan',cs:'Czech',da:'Danish',de:'German',el:'Greek',en:'English','en-au':'English (Australia)','en-ca':'English (Canadian)','en-uk':'English (United Kingdom)',eo:'Esperanto',es:'Spanish',et:'Estonian',eu:'Basque',fa:'Persian',fi:'Finnish',fo:'Faroese',fr:'French',gl:'Galician',he:'Hebrew',hi:'Hindi',hr:'Croatian',hu:'Hungarian',it:'Italian',ja:'Japanese',km:'Khmer',ko:'Korean',lt:'Lithuanian',lv:'Latvian',mn:'Mongolian',ms:'Malay',nb:'Norwegian Bokmal',nl:'Dutch',no:'Norwegian',pl:'Polish',pt:'Portuguese (Portugal)','pt-br':'Portuguese (Brazil)',ro:'Romanian',ru:'Russian',sk:'Slovak',sl:'Slovenian',sr:'Serbian (Cyrillic)','sr-latn':'Serbian (Latin)',sv:'Swedish',th:'Thai',tr:'Turkish',uk:'Ukrainian',vi:'Vietnamese',zh:'Chinese Traditional','zh-cn':'Chinese Simplified'},GetActiveLanguage:function(){if (FCKConfig.AutoDetectLanguage){var A;if (navigator.userLanguage) A=navigator.userLanguage.toLowerCase();else if (navigator.language) A=navigator.language.toLowerCase();else{return FCKConfig.DefaultLanguage;};if (A.length>=5){A=A.substr(0,5);if (this.AvailableLanguages[A]) return A;};if (A.length>=2){A=A.substr(0,2);if (this.AvailableLanguages[A]) return A;}};return this.DefaultLanguage;},TranslateElements:function(A,B,C,D){var e=A.getElementsByTagName(B);var E,s;for (var i=0;i<e.length;i++){if ((E=e[i].getAttribute('fckLang'))){if ((s=FCKLang[E])){if (D) s=FCKTools.HTMLEncode(s);e[i][C]=s;}}}},TranslatePage:function(A){this.TranslateElements(A,'INPUT','value');this.TranslateElements(A,'SPAN','innerHTML');this.TranslateElements(A,'LABEL','innerHTML');this.TranslateElements(A,'OPTION','innerHTML',true);this.TranslateElements(A,'LEGEND','innerHTML');},Initialize:function(){if (this.AvailableLanguages[FCKConfig.DefaultLanguage]) this.DefaultLanguage=FCKConfig.DefaultLanguage;else this.DefaultLanguage='en';this.ActiveLanguage={};this.ActiveLanguage.Code=this.GetActiveLanguage();this.ActiveLanguage.Name=this.AvailableLanguages[this.ActiveLanguage.Code];}};
+var FCKXHtmlEntities={};FCKXHtmlEntities.Initialize=function(){if (FCKXHtmlEntities.Entities) return;var A='';var B,e;if (FCKConfig.ProcessHTMLEntities){FCKXHtmlEntities.Entities={' ':'nbsp','¡':'iexcl','¢':'cent','£':'pound','¤':'curren','¥':'yen','¦':'brvbar','§':'sect','¨':'uml','©':'copy','ª':'ordf','«':'laquo','¬':'not','­':'shy','®':'reg','¯':'macr','°':'deg','±':'plusmn','²':'sup2','³':'sup3','´':'acute','µ':'micro','¶':'para','·':'middot','¸':'cedil','¹':'sup1','º':'ordm','»':'raquo','¼':'frac14','½':'frac12','¾':'frac34','¿':'iquest','×':'times','÷':'divide','ƒ':'fnof','•':'bull','…':'hellip','′':'prime','″':'Prime','‾':'oline','⁄':'frasl','℘':'weierp','ℑ':'image','ℜ':'real','™':'trade','ℵ':'alefsym','←':'larr','↑':'uarr','→':'rarr','↓':'darr','↔':'harr','↵':'crarr','⇐':'lArr','⇑':'uArr','⇒':'rArr','⇓':'dArr','⇔':'hArr','∀':'forall','∂':'part','∃':'exist','∅':'empty','∇':'nabla','∈':'isin','∉':'notin','∋':'ni','∏':'prod','∑':'sum','−':'minus','∗':'lowast','√':'radic','∝':'prop','∞':'infin','∠':'ang','∧':'and','∨':'or','∩':'cap','∪':'cup','∫':'int','∴':'there4','∼':'sim','≅':'cong','≈':'asymp','≠':'ne','≡':'equiv','≤':'le','≥':'ge','⊂':'sub','⊃':'sup','⊄':'nsub','⊆':'sube','⊇':'supe','⊕':'oplus','⊗':'otimes','⊥':'perp','⋅':'sdot','\u2308':'lceil','\u2309':'rceil','\u230a':'lfloor','\u230b':'rfloor','\u2329':'lang','\u232a':'rang','◊':'loz','♠':'spades','♣':'clubs','♥':'hearts','♦':'diams','"':'quot','ˆ':'circ','˜':'tilde',' ':'ensp',' ':'emsp',' ':'thinsp','‌':'zwnj','‍':'zwj','‎':'lrm','‏':'rlm','–':'ndash','—':'mdash','‘':'lsquo','’':'rsquo','‚':'sbquo','“':'ldquo','”':'rdquo','„':'bdquo','†':'dagger','‡':'Dagger','‰':'permil','‹':'lsaquo','›':'rsaquo','€':'euro'};for (e in FCKXHtmlEntities.Entities) A+=e;if (FCKConfig.IncludeLatinEntities){B={'À':'Agrave','Á':'Aacute','Â':'Acirc','Ã':'Atilde','Ä':'Auml','Å':'Aring','Æ':'AElig','Ç':'Ccedil','È':'Egrave','É':'Eacute','Ê':'Ecirc','Ë':'Euml','Ì':'Igrave','Í':'Iacute','Î':'Icirc','Ï':'Iuml','Ð':'ETH','Ñ':'Ntilde','Ò':'Ograve','Ó':'Oacute','Ô':'Ocirc','Õ':'Otilde','Ö':'Ouml','Ø':'Oslash','Ù':'Ugrave','Ú':'Uacute','Û':'Ucirc','Ü':'Uuml','Ý':'Yacute','Þ':'THORN','ß':'szlig','à':'agrave','á':'aacute','â':'acirc','ã':'atilde','ä':'auml','å':'aring','æ':'aelig','ç':'ccedil','è':'egrave','é':'eacute','ê':'ecirc','ë':'euml','ì':'igrave','í':'iacute','î':'icirc','ï':'iuml','ð':'eth','ñ':'ntilde','ò':'ograve','ó':'oacute','ô':'ocirc','õ':'otilde','ö':'ouml','ø':'oslash','ù':'ugrave','ú':'uacute','û':'ucirc','ü':'uuml','ý':'yacute','þ':'thorn','ÿ':'yuml','Œ':'OElig','œ':'oelig','Š':'Scaron','š':'scaron','Ÿ':'Yuml'};for (e in B){FCKXHtmlEntities.Entities[e]=B[e];A+=e;};B=null;};if (FCKConfig.IncludeGreekEntities){B={'Α':'Alpha','Β':'Beta','Γ':'Gamma','Δ':'Delta','Ε':'Epsilon','Ζ':'Zeta','Η':'Eta','Θ':'Theta','Ι':'Iota','Κ':'Kappa','Λ':'Lambda','Μ':'Mu','Ν':'Nu','Ξ':'Xi','Ο':'Omicron','Π':'Pi','Ρ':'Rho','Σ':'Sigma','Τ':'Tau','Υ':'Upsilon','Φ':'Phi','Χ':'Chi','Ψ':'Psi','Ω':'Omega','α':'alpha','β':'beta','γ':'gamma','δ':'delta','ε':'epsilon','ζ':'zeta','η':'eta','θ':'theta','ι':'iota','κ':'kappa','λ':'lambda','μ':'mu','ν':'nu','ξ':'xi','ο':'omicron','π':'pi','ρ':'rho','ς':'sigmaf','σ':'sigma','τ':'tau','υ':'upsilon','φ':'phi','χ':'chi','ψ':'psi','ω':'omega','\u03d1':'thetasym','\u03d2':'upsih','\u03d6':'piv'};for (e in B){FCKXHtmlEntities.Entities[e]=B[e];A+=e;};B=null;}}else{FCKXHtmlEntities.Entities={};A=' ';};var C='['+A+']';if (FCKConfig.ProcessNumericEntities) C='[^ -~]|'+C;var D=FCKConfig.AdditionalNumericEntities;if (D&&D.length>0) C+='|'+FCKConfig.AdditionalNumericEntities;FCKXHtmlEntities.EntitiesRegex=new RegExp(C,'g');};
+var FCKXHtml={};FCKXHtml.CurrentJobNum=0;FCKXHtml.GetXHTML=function(A,B,C){FCKDomTools.CheckAndRemovePaddingNode(A.ownerDocument,FCKConfig.EnterMode);FCKXHtmlEntities.Initialize();this._NbspEntity=(FCKConfig.ProcessHTMLEntities?'nbsp':'#160');var D=FCK.IsDirty();FCKXHtml.SpecialBlocks=[];this.XML=FCKTools.CreateXmlObject('DOMDocument');this.MainNode=this.XML.appendChild(this.XML.createElement('xhtml'));FCKXHtml.CurrentJobNum++;if (B) this._AppendNode(this.MainNode,A);else this._AppendChildNodes(this.MainNode,A,false);var E=this._GetMainXmlString();this.XML=null;if (FCKBrowserInfo.IsSafari) E=E.replace(/^<xhtml.*?>/,'<xhtml>');E=E.substr(7,E.length-15).Trim();E=E.replace(FCKRegexLib.SpaceNoClose,' />');if (FCKConfig.ForceSimpleAmpersand) E=E.replace(FCKRegexLib.ForceSimpleAmpersand,'&');if (C) E=FCKCodeFormatter.Format(E);for (var i=0;i<FCKXHtml.SpecialBlocks.length;i++){var F=new RegExp('___FCKsi___'+i);E=E.replace(F,FCKXHtml.SpecialBlocks[i]);};E=E.replace(FCKRegexLib.GeckoEntitiesMarker,'&');if (!D) FCK.ResetIsDirty();FCKDomTools.EnforcePaddingNode(FCKTools.GetElementDocument(A),FCKConfig.EnterMode);return E;};FCKXHtml._AppendAttribute=function(A,B,C){try{if (C==undefined||C==null) C='';else if (C.replace){if (FCKConfig.ForceSimpleAmpersand) C=C.replace(/&/g,'___FCKAmp___');C=C.replace(FCKXHtmlEntities.EntitiesRegex,FCKXHtml_GetEntity);};var D=this.XML.createAttribute(B);D.value=C;A.attributes.setNamedItem(D);}catch (e){}};FCKXHtml._AppendChildNodes=function(A,B,C){var D=B.firstChild;while (D){this._AppendNode(A,D);D=D.nextSibling;};if (C&&B.tagName&&B.tagName.toLowerCase()!='pre'){FCKDomTools.TrimNode(A);if (FCKConfig.FillEmptyBlocks){var E=A.lastChild;if (E&&E.nodeType==1&&E.nodeName=='br') this._AppendEntity(A,this._NbspEntity);}};if (A.childNodes.length==0){if (C&&FCKConfig.FillEmptyBlocks){this._AppendEntity(A,this._NbspEntity);return A;};var F=A.nodeName;if (FCKListsLib.InlineChildReqElements[F]) return null;if (!FCKListsLib.EmptyElements[F]) A.appendChild(this.XML.createTextNode(''));};return A;};FCKXHtml._AppendNode=function(A,B){if (!B) return false;switch (B.nodeType){case 1:if (FCKBrowserInfo.IsGecko&&B.tagName.toLowerCase()=='br'&&B.parentNode.tagName.toLowerCase()=='pre'){var C='\r';if (B==B.parentNode.firstChild) C+='\r';return FCKXHtml._AppendNode(A,this.XML.createTextNode(C));};if (B.getAttribute('_fckfakelement')) return FCKXHtml._AppendNode(A,FCK.GetRealElement(B));if (FCKBrowserInfo.IsGecko&&(B.hasAttribute('_moz_editor_bogus_node')||B.getAttribute('type')=='_moz')) return false;if (B.getAttribute('_fcktemp')) return false;var D=B.tagName.toLowerCase();if (FCKBrowserInfo.IsIE){if (B.scopeName&&B.scopeName!='HTML'&&B.scopeName!='FCK') D=B.scopeName.toLowerCase()+':'+D;}else{if (D.StartsWith('fck:')) D=D.Remove(0,4);};if (!FCKRegexLib.ElementName.test(D)) return false;if (B._fckxhtmljob&&B._fckxhtmljob==FCKXHtml.CurrentJobNum) return false;var E=this.XML.createElement(D);FCKXHtml._AppendAttributes(A,B,E,D);B._fckxhtmljob=FCKXHtml.CurrentJobNum;var F=FCKXHtml.TagProcessors[D];if (F) E=F(E,B,A);else E=this._AppendChildNodes(E,B,Boolean(FCKListsLib.NonEmptyBlockElements[D]));if (!E) return false;A.appendChild(E);break;case 3:if (B.parentNode&&B.parentNode.nodeName.IEquals('pre')) return this._AppendTextNode(A,B.nodeValue);return this._AppendTextNode(A,B.nodeValue.ReplaceNewLineChars(' '));case 8:if (FCKBrowserInfo.IsIE&&!B.innerHTML) break;try { A.appendChild(this.XML.createComment(B.nodeValue));}catch (e) {/*Do nothing... probably this is a wrong format comment.*/};break;default:A.appendChild(this.XML.createComment("Element not supported - Type: "+B.nodeType+" Name: "+B.nodeName));break;};return true;};FCKXHtml._AppendSpecialItem=function(A){return '___FCKsi___'+FCKXHtml.SpecialBlocks.AddItem(A);};FCKXHtml._AppendEntity=function(A,B){A.appendChild(this.XML.createTextNode('#?-:'+B+';'));};FCKXHtml._AppendTextNode=function(A,B){var C=B.length>0;if (C) A.appendChild(this.XML.createTextNode(B.replace(FCKXHtmlEntities.EntitiesRegex,FCKXHtml_GetEntity)));return C;};function FCKXHtml_GetEntity(A){var B=FCKXHtmlEntities.Entities[A]||('#'+A.charCodeAt(0));return '#?-:'+B+';';};FCKXHtml.TagProcessors={img:function(A,B){if (!A.attributes.getNamedItem('alt')) FCKXHtml._AppendAttribute(A,'alt','');var C=B.getAttribute('_fcksavedurl');if (C!=null) FCKXHtml._AppendAttribute(A,'src',C);return A;},a:function(A,B){if (B.innerHTML.Trim().length==0&&!B.name) return false;var C=B.getAttribute('_fcksavedurl');if (C!=null) FCKXHtml._AppendAttribute(A,'href',C);if (FCKBrowserInfo.IsIE){if (B.name) FCKXHtml._AppendAttribute(A,'name',B.name);};A=FCKXHtml._AppendChildNodes(A,B,false);return A;},script:function(A,B){if (!A.attributes.getNamedItem('type')) FCKXHtml._AppendAttribute(A,'type','text/javascript');A.appendChild(FCKXHtml.XML.createTextNode(FCKXHtml._AppendSpecialItem(B.text)));return A;},style:function(A,B){if (!A.attributes.getNamedItem('type')) FCKXHtml._AppendAttribute(A,'type','text/css');var C=B.innerHTML;if (FCKBrowserInfo.IsIE) C=C.replace(/^(\r\n|\n|\r)/,'');A.appendChild(FCKXHtml.XML.createTextNode(FCKXHtml._AppendSpecialItem(C)));return A;},pre:function (A,B){var C=B.firstChild;if (C&&C.nodeType==3) A.appendChild(FCKXHtml.XML.createTextNode(FCKXHtml._AppendSpecialItem('\r\n')));FCKXHtml._AppendChildNodes(A,B,true);return A;},title:function(A,B){A.appendChild(FCKXHtml.XML.createTextNode(FCK.EditorDocument.title));return A;},ol:function(A,B,C){if (B.innerHTML.Trim().length==0) return false;var D=C.lastChild;if (D&&D.nodeType==3) D=D.previousSibling;if (D&&D.nodeName.toUpperCase()=='LI'){B._fckxhtmljob=null;FCKXHtml._AppendNode(D,B);return false;};A=FCKXHtml._AppendChildNodes(A,B);return A;},span:function(A,B){if (B.innerHTML.length==0) return false;A=FCKXHtml._AppendChildNodes(A,B,false);return A;},iframe:function(A,B){var C=B.innerHTML;if (FCKBrowserInfo.IsGecko) C=FCKTools.HTMLDecode(C);C=C.replace(/\s_fcksavedurl="[^"]*"/g,'');A.appendChild(FCKXHtml.XML.createTextNode(FCKXHtml._AppendSpecialItem(C)));return A;},body:function(A,B){A=FCKXHtml._AppendChildNodes(A,B,false);A.removeAttribute('spellcheck');return A;}};FCKXHtml.TagProcessors.ul=FCKXHtml.TagProcessors.ol;
+FCKXHtml._GetMainXmlString=function(){var A=new XMLSerializer();return A.serializeToString(this.MainNode);};FCKXHtml._AppendAttributes=function(A,B,C){var D=B.attributes;for (var n=0;n<D.length;n++){var E=D[n];if (E.specified){var F=E.nodeName.toLowerCase();var G;if (F.StartsWith('_fck')) continue;else if (F.indexOf('_moz')==0) continue;else if (F=='class'){G=E.nodeValue.replace(FCKRegexLib.FCK_Class,'');if (G.length==0) continue;}else if (E.nodeValue===true) G=F;else G=B.getAttribute(F,2);this._AppendAttribute(C,F,G);}}};if (FCKBrowserInfo.IsOpera){FCKXHtml.TagProcessors['head']=function(A,B){FCKXHtml.XML._HeadElement=A;A=FCKXHtml._AppendChildNodes(A,B,true);return A;};FCKXHtml.TagProcessors['meta']=function(A,B,C){if (B.parentNode.nodeName.toLowerCase()!='head'){var D=FCKXHtml.XML._HeadElement;if (D&&C!=D){delete B._fckxhtmljob;FCKXHtml._AppendNode(D,B);return null;}};return A;}}
+var FCKCodeFormatter={};FCKCodeFormatter.Init=function(){var A=this.Regex={};A.BlocksOpener=/\<(P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|OL|UL|LI|TITLE|META|LINK|BASE|SCRIPT|LINK|TD|TH|AREA|OPTION)[^\>]*\>/gi;A.BlocksCloser=/\<\/(P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|OL|UL|LI|TITLE|META|LINK|BASE|SCRIPT|LINK|TD|TH|AREA|OPTION)[^\>]*\>/gi;A.NewLineTags=/\<(BR|HR)[^\>]*\>/gi;A.MainTags=/\<\/?(HTML|HEAD|BODY|FORM|TABLE|TBODY|THEAD|TR)[^\>]*\>/gi;A.LineSplitter=/\s*\n+\s*/g;A.IncreaseIndent=/^\<(HTML|HEAD|BODY|FORM|TABLE|TBODY|THEAD|TR|UL|OL)[ \/\>]/i;A.DecreaseIndent=/^\<\/(HTML|HEAD|BODY|FORM|TABLE|TBODY|THEAD|TR|UL|OL)[ \>]/i;A.FormatIndentatorRemove=new RegExp('^'+FCKConfig.FormatIndentator);A.ProtectedTags=/(<PRE[^>]*>)([\s\S]*?)(<\/PRE>)/gi;};FCKCodeFormatter._ProtectData=function(A,B,C,D){return B+'___FCKpd___'+FCKCodeFormatter.ProtectedData.AddItem(C)+D;};FCKCodeFormatter.Format=function(A){if (!this.Regex) this.Init();FCKCodeFormatter.ProtectedData=[];var B=A.replace(this.Regex.ProtectedTags,FCKCodeFormatter._ProtectData);B=B.replace(this.Regex.BlocksOpener,'\n$&');B=B.replace(this.Regex.BlocksCloser,'$&\n');B=B.replace(this.Regex.NewLineTags,'$&\n');B=B.replace(this.Regex.MainTags,'\n$&\n');var C='';var D=B.split(this.Regex.LineSplitter);B='';for (var i=0;i<D.length;i++){var E=D[i];if (E.length==0) continue;if (this.Regex.DecreaseIndent.test(E)) C=C.replace(this.Regex.FormatIndentatorRemove,'');B+=C+E+'\n';if (this.Regex.IncreaseIndent.test(E)) C+=FCKConfig.FormatIndentator;};for (var j=0;j<FCKCodeFormatter.ProtectedData.length;j++){var F=new RegExp('___FCKpd___'+j);B=B.replace(F,FCKCodeFormatter.ProtectedData[j].replace(/\$/g,'$$$$'));};return B.Trim();}
+var FCKUndo={};FCKUndo.SavedData=[];FCKUndo.CurrentIndex=-1;FCKUndo.TypesCount=0;FCKUndo.Changed=false;FCKUndo.MaxTypes=25;FCKUndo.Typing=false;FCKUndo._GetBookmark=function(){var A=new FCKDomRange(FCK.EditorWindow);try{A.MoveToSelection();}catch (e){return null;};if (FCKBrowserInfo.IsIE){var B=A.CreateBookmark();var C=FCK.EditorDocument.body.innerHTML;A.MoveToBookmark(B);return [B,C];};return A.CreateBookmark2();};FCKUndo._SelectBookmark=function(A){if (!A) return;var B=new FCKDomRange(FCK.EditorWindow);if (A instanceof Object){if (FCKBrowserInfo.IsIE) B.MoveToBookmark(A[0]);else B.MoveToBookmark2(A);try{B.Select();}catch (e){B.MoveToPosition(FCK.EditorDocument.body,4);B.Select();}}};FCKUndo._CompareCursors=function(A,B){for (var i=0;i<Math.min(A.length,B.length);i++){if (A[i]<B[i]) return-1;else if (A[i]>B[i]) return 1;};if (A.length<B.length) return-1;else if (A.length>B.length) return 1;return 0;};FCKUndo._CheckIsBookmarksEqual=function(A,B){if (!(A&&B)) return false;if (FCKBrowserInfo.IsIE){var C=A[1].search(A[0].StartId);var D=B[1].search(B[0].StartId);var E=A[1].search(A[0].EndId);var F=B[1].search(B[0].EndId);return C==D&&E==F;}else{return this._CompareCursors(A.Start,B.Start)==0&&this._CompareCursors(A.End,B.End)==0;}};FCKUndo.SaveUndoStep=function(){if (FCK.EditMode!=0) return;if (this.SavedData.length) this.Changed=true;var A=FCK.EditorDocument.body.innerHTML;var B=this._GetBookmark();this.SavedData=this.SavedData.slice(0,this.CurrentIndex+1);if (this.CurrentIndex>0&&A==this.SavedData[this.CurrentIndex][0]&&this._CheckIsBookmarksEqual(B,this.SavedData[this.CurrentIndex][1])) return;else if (this.CurrentIndex==0&&this.SavedData.length&&A==this.SavedData[0][0]){this.SavedData[0][1]=B;return;};if (this.CurrentIndex+1>=FCKConfig.MaxUndoLevels) this.SavedData.shift();else this.CurrentIndex++;this.SavedData[this.CurrentIndex]=[A,B];FCK.Events.FireEvent("OnSelectionChange");};FCKUndo.CheckUndoState=function(){return (this.Changed||this.CurrentIndex>0);};FCKUndo.CheckRedoState=function(){return (this.CurrentIndex<(this.SavedData.length-1));};FCKUndo.Undo=function(){if (this.CheckUndoState()){if (this.CurrentIndex==(this.SavedData.length-1)){this.SaveUndoStep();};this._ApplyUndoLevel(--this.CurrentIndex);FCK.Events.FireEvent("OnSelectionChange");}};FCKUndo.Redo=function(){if (this.CheckRedoState()){this._ApplyUndoLevel(++this.CurrentIndex);FCK.Events.FireEvent("OnSelectionChange");}};FCKUndo._ApplyUndoLevel=function(A){var B=this.SavedData[A];if (!B) return;if (FCKBrowserInfo.IsIE){if (B[1]&&B[1][1]) FCK.SetInnerHtml(B[1][1]);else FCK.SetInnerHtml(B[0]);}else FCK.EditorDocument.body.innerHTML=B[0];this._SelectBookmark(B[1]);this.TypesCount=0;this.Changed=false;this.Typing=false;};
+var FCKEditingArea=function(A){this.TargetElement=A;this.Mode=0;if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKEditingArea_Cleanup);};FCKEditingArea.prototype.Start=function(A,B){var C=this.TargetElement;var D=FCKTools.GetElementDocument(C);var E;while((E=C.firstChild)){if (E.contentWindow) E.contentWindow.document.body.innerHTML='';C.removeChild(E);};if (this.Mode==0){var F=this.IFrame=D.createElement('iframe');if (!FCKBrowserInfo.IsGecko) F.src='javascript:void(0)';F.frameBorder=0;F.width=F.height='100%';C.appendChild(F);if (FCKBrowserInfo.IsIE) A=A.replace(/(<base[^>]*?)\s*\/?>(?!\s*<\/base>)/gi,'$1></base>');else if (!B){var G=A.match(FCKRegexLib.BeforeBody);var H=A.match(FCKRegexLib.AfterBody);if (G&&H){var I=A.substr(G[1].length,A.length-G[1].length-H[1].length);A=G[1]+'&nbsp;'+H[1];if (FCKBrowserInfo.IsGecko&&(I.length==0||FCKRegexLib.EmptyParagraph.test(I))) I='<br type="_moz">';this._BodyHTML=I;}else this._BodyHTML=A;};this.Window=F.contentWindow;var J=this.Document=this.Window.document;J.open();J.write(A);J.close();if (FCKBrowserInfo.IsGecko10&&!B){this.Start(A,true);return;};this.Window._FCKEditingArea=this;if (FCKBrowserInfo.IsGecko10) this.Window.setTimeout(FCKEditingArea_CompleteStart,500);else FCKEditingArea_CompleteStart.call(this.Window);}else{var K=this.Textarea=D.createElement('textarea');K.className='SourceField';K.dir='ltr';FCKDomTools.SetElementStyles(K,{width:'100%',height:'100%',border:'none',resize:'none',outline:'none'});C.appendChild(K);K.value=A;FCKTools.RunFunction(this.OnLoad);}};function FCKEditingArea_CompleteStart(){if (!this.document.body){this.setTimeout(FCKEditingArea_CompleteStart,50);return;};var A=this._FCKEditingArea;A.MakeEditable();FCKTools.RunFunction(A.OnLoad);};FCKEditingArea.prototype.MakeEditable=function(){var A=this.Document;if (FCKBrowserInfo.IsIE){A.body.disabled=true;A.body.contentEditable=true;A.body.removeAttribute("disabled");}else{try{A.body.spellcheck=(this.FFSpellChecker!==false);if (this._BodyHTML){A.body.innerHTML=this._BodyHTML;this._BodyHTML=null;};A.designMode='on';try{A.execCommand('styleWithCSS',false,FCKConfig.GeckoUseSPAN);}catch (e){A.execCommand('useCSS',false,!FCKConfig.GeckoUseSPAN);};A.execCommand('enableObjectResizing',false,!FCKConfig.DisableObjectResizing);A.execCommand('enableInlineTableEditing',false,!FCKConfig.DisableFFTableHandles);}catch (e){FCKTools.AddEventListener(this.Window.frameElement,'DOMAttrModified',FCKEditingArea_Document_AttributeNodeModified);}}};function FCKEditingArea_Document_AttributeNodeModified(A){var B=A.currentTarget.contentWindow._FCKEditingArea;if (B._timer) window.clearTimeout(B._timer);B._timer=FCKTools.SetTimeout(FCKEditingArea_MakeEditableByMutation,1000,B);};function FCKEditingArea_MakeEditableByMutation(){delete this._timer;FCKTools.RemoveEventListener(this.Window.frameElement,'DOMAttrModified',FCKEditingArea_Document_AttributeNodeModified);this.MakeEditable();};FCKEditingArea.prototype.Focus=function(){try{if (this.Mode==0){if (FCKBrowserInfo.IsIE&&this.Document.hasFocus()) this._EnsureFocusIE();if (FCKBrowserInfo.IsSafari) this.IFrame.focus();else{this.Window.focus();if (FCKBrowserInfo.IsIE) this._EnsureFocusIE();}}else{var A=FCKTools.GetElementDocument(this.Textarea);if ((!A.hasFocus||A.hasFocus())&&A.activeElement==this.Textarea) return;this.Textarea.focus();}}catch(e) {}};FCKEditingArea.prototype._EnsureFocusIE=function(){this.Document.body.setActive();var A=this.Document.selection.createRange();var B=A.parentElement();if (!(B.childNodes.length==0&&(FCKListsLib.BlockElements[B.nodeName.toLowerCase()]||FCKListsLib.NonEmptyBlockElements[B.nodeName.toLowerCase()]))) return;var C=A.text.length;A.moveEnd("character",1);A.select();if (A.text.length>C){A.moveEnd("character",-1);A.select();}};function FCKEditingArea_Cleanup(){if (this.Document) this.Document.body.innerHTML="";this.TargetElement=null;this.IFrame=null;this.Document=null;this.Textarea=null;if (this.Window){this.Window._FCKEditingArea=null;this.Window=null;}};
+var FCKKeystrokeHandler=function(A){this.Keystrokes={};this.CancelCtrlDefaults=(A!==false);};FCKKeystrokeHandler.prototype.AttachToElement=function(A){FCKTools.AddEventListenerEx(A,'keydown',_FCKKeystrokeHandler_OnKeyDown,this);if (FCKBrowserInfo.IsGecko10||FCKBrowserInfo.IsOpera||(FCKBrowserInfo.IsGecko&&FCKBrowserInfo.IsMac)) FCKTools.AddEventListenerEx(A,'keypress',_FCKKeystrokeHandler_OnKeyPress,this);};FCKKeystrokeHandler.prototype.SetKeystrokes=function(){for (var i=0;i<arguments.length;i++){var A=arguments[i];if (!A) continue;if (typeof(A[0])=='object') this.SetKeystrokes.apply(this,A);else{if (A.length==1) delete this.Keystrokes[A[0]];else this.Keystrokes[A[0]]=A[1]===true?true:A;}}};function _FCKKeystrokeHandler_OnKeyDown(A,B){var C=A.keyCode||A.which;var D=0;if (A.ctrlKey||A.metaKey) D+=CTRL;if (A.shiftKey) D+=SHIFT;if (A.altKey) D+=ALT;var E=C+D;var F=B._CancelIt=false;var G=B.Keystrokes[E];if (G){if (G===true||!(B.OnKeystroke&&B.OnKeystroke.apply(B,G))) return true;F=true;};if (F||(B.CancelCtrlDefaults&&D==CTRL&&(C<33||C>40))){B._CancelIt=true;if (A.preventDefault) return A.preventDefault();A.returnValue=false;A.cancelBubble=true;return false;};return true;};function _FCKKeystrokeHandler_OnKeyPress(A,B){if (B._CancelIt){if (A.preventDefault) return A.preventDefault();return false;};return true;};
+FCK.DTD=(function(){X=FCKTools.Merge;var A,L,J,M,N,O,D,H,P,K,Q,F,G,C,B,E,I;A={isindex:1,fieldset:1};B={input:1,button:1,select:1,textarea:1,label:1};C=X({a:1},B);D=X({iframe:1},C);E={hr:1,ul:1,menu:1,div:1,blockquote:1,noscript:1,table:1,center:1,address:1,dir:1,pre:1,h5:1,dl:1,h4:1,noframes:1,h6:1,ol:1,h1:1,h3:1,h2:1};F={ins:1,del:1,script:1};G=X({b:1,acronym:1,bdo:1,'var':1,'#':1,abbr:1,code:1,br:1,i:1,cite:1,kbd:1,u:1,strike:1,s:1,tt:1,strong:1,q:1,samp:1,em:1,dfn:1,span:1},F);H=X({sub:1,img:1,object:1,sup:1,basefont:1,map:1,applet:1,font:1,big:1,small:1},G);I=X({p:1},H);J=X({iframe:1},H,B);K={img:1,noscript:1,br:1,kbd:1,center:1,button:1,basefont:1,h5:1,h4:1,samp:1,h6:1,ol:1,h1:1,h3:1,h2:1,form:1,font:1,'#':1,select:1,menu:1,ins:1,abbr:1,label:1,code:1,table:1,script:1,cite:1,input:1,iframe:1,strong:1,textarea:1,noframes:1,big:1,small:1,span:1,hr:1,sub:1,bdo:1,'var':1,div:1,object:1,sup:1,strike:1,dir:1,map:1,dl:1,applet:1,del:1,isindex:1,fieldset:1,ul:1,b:1,acronym:1,a:1,blockquote:1,i:1,u:1,s:1,tt:1,address:1,q:1,pre:1,p:1,em:1,dfn:1};L=X({a:1},J);M={tr:1};N={'#':1};O=X({param:1},K);P=X({form:1},A,D,E,I);Q={li:1};return {col:{},tr:{td:1,th:1},img:{},colgroup:{col:1},noscript:P,td:P,br:{},th:P,center:P,kbd:L,button:X(I,E),basefont:{},h5:L,h4:L,samp:L,h6:L,ol:Q,h1:L,h3:L,option:N,h2:L,form:X(A,D,E,I),select:{optgroup:1,option:1},font:J,ins:P,menu:Q,abbr:L,label:L,table:{thead:1,col:1,tbody:1,tr:1,colgroup:1,caption:1,tfoot:1},code:L,script:N,tfoot:M,cite:L,li:P,input:{},iframe:P,strong:J,textarea:N,noframes:P,big:J,small:J,span:J,hr:{},dt:L,sub:J,optgroup:{option:1},param:{},bdo:L,'var':J,div:P,object:O,sup:J,dd:P,strike:J,area:{},dir:Q,map:X({area:1,form:1,p:1},A,F,E),applet:O,dl:{dt:1,dd:1},del:P,isindex:{},fieldset:X({legend:1},K),thead:M,ul:Q,acronym:L,b:J,a:J,blockquote:P,caption:L,i:J,u:J,tbody:M,s:L,address:X(D,I),tt:J,legend:L,q:L,pre:X(G,C),p:L,em:J,dfn:L};})();
+var FCKStyle=function(A){this.Element=(A.Element||'span').toLowerCase();this._StyleDesc=A;};FCKStyle.prototype={GetType:function(){var A=this.GetType_$;if (A!=undefined) return A;var B=this.Element;if (B=='#'||FCKListsLib.StyleBlockElements[B]) A=0;else if (FCKListsLib.StyleObjectElements[B]) A=2;else A=1;return (this.GetType_$=A);},ApplyToSelection:function(A){var B=new FCKDomRange(A);B.MoveToSelection();this.ApplyToRange(B,true);},ApplyToRange:function(A,B){switch (this.GetType()){case 0:this.ApplyToRange=this._ApplyBlockStyle;break;case 1:this.ApplyToRange=this._ApplyInlineStyle;break;default:return;};this.ApplyToRange(A,B);},ApplyToObject:function(A){if (!A) return;this.BuildElement(null,A);},RemoveFromSelection:function(A){var B=new FCKDomRange(A);B.MoveToSelection();this.RemoveFromRange(B,true);},RemoveFromRange:function(A,B){var C;var D=this._GetAttribsForComparison();var E=this._GetOverridesForComparison();if (A.CheckIsCollapsed()){var C=A.CreateBookmark(true);var G=A.GetBookmarkNode(C,true);var H=new FCKElementPath(G.parentNode);var I=[];var J=!FCKDomTools.GetNextSibling(G);var K=J||!FCKDomTools.GetPreviousSibling(G);var L;var M=-1;for (var i=0;i<H.Elements.length;i++){var N=H.Elements[i];if (this.CheckElementRemovable(N)){if (K&&!FCKDomTools.CheckIsEmptyElement(N,function(el){return (el!=G);})){L=N;M=I.length-1;}else{var O=N.nodeName.toLowerCase();if (O==this.Element){for (var P in D){if (FCKDomTools.HasAttribute(N,P)){switch (P){case 'style':this._RemoveStylesFromElement(N);break;case 'class':if (FCKDomTools.GetAttributeValue(N,P)!=this.GetFinalAttributeValue(P)) continue;default:FCKDomTools.RemoveAttribute(N,P);}}}};this._RemoveOverrides(N,E[O]);this._RemoveNoAttribElement(N);}}else if (K) I.push(N);K=K&&((J&&!FCKDomTools.GetNextSibling(N))||(!J&&!FCKDomTools.GetPreviousSibling(N)));if (L&&(!K||(i==H.Elements.length-1))){var Q=FCKDomTools.RemoveNode(G);for (var j=0;j<=M;j++){var R=FCKDomTools.CloneElement(I[j]);R.appendChild(Q);Q=R;};if (J) FCKDomTools.InsertAfterNode(L,Q);else L.parentNode.insertBefore(Q,L);K=false;L=null;}};if (B) A.SelectBookmark(C);return;};A.Expand('inline_elements');var C=A.CreateBookmark(true);var T=A.GetBookmarkNode(C,true);var U=A.GetBookmarkNode(C,false);A.Release(true);var H=new FCKElementPath(T);var X=H.Elements;var N;for (var i=1;i<X.length;i++){N=X[i];if (N==H.Block||N==H.BlockLimit) break;if (this.CheckElementRemovable(N)) FCKDomTools.BreakParent(T,N,A);};H=new FCKElementPath(U);X=H.Elements;for (var i=1;i<X.length;i++){N=X[i];if (N==H.Block||N==H.BlockLimit) break;b=N.nodeName.toLowerCase();if (this.CheckElementRemovable(N)) FCKDomTools.BreakParent(U,N,A);};var Z=FCKDomTools.GetNextSourceNode(T,true);while (Z){var a=FCKDomTools.GetNextSourceNode(Z);if (Z.nodeType==1){var b=Z.nodeName.toLowerCase();var c=(b==this.Element);if (c){for (var P in D){if (FCKDomTools.HasAttribute(Z,P)){switch (P){case 'style':this._RemoveStylesFromElement(Z);break;case 'class':if (FCKDomTools.GetAttributeValue(Z,P)!=this.GetFinalAttributeValue(P)) continue;default:FCKDomTools.RemoveAttribute(Z,P);}}}}else c=!!E[b];if (c){this._RemoveOverrides(Z,E[b]);this._RemoveNoAttribElement(Z);}};if (a==U) break;Z=a;};this._FixBookmarkStart(T);if (B) A.SelectBookmark(C);},CheckElementRemovable:function(A,B){if (!A) return false;var C=A.nodeName.toLowerCase();if (C==this.Element){if (!B&&!FCKDomTools.HasAttributes(A)) return true;var D=this._GetAttribsForComparison();var E=(D._length==0);for (var F in D){if (F=='_length') continue;if (this._CompareAttributeValues(F,FCKDomTools.GetAttributeValue(A,F),(this.GetFinalAttributeValue(F)||''))){E=true;if (!B) break;}else{E=false;if (B) return false;}};if (E) return true;};var G=this._GetOverridesForComparison()[C];if (G){if (!(D=G.Attributes)) return true;for (var i=0;i<D.length;i++){var H=D[i][0];if (FCKDomTools.HasAttribute(A,H)){var I=D[i][1];if (I==null||(typeof I=='string'&&FCKDomTools.GetAttributeValue(A,H)==I)||I.test(FCKDomTools.GetAttributeValue(A,H))) return true;}}};return false;},CheckActive:function(A){switch (this.GetType()){case 0:return this.CheckElementRemovable(A.Block||A.BlockLimit);case 1:var B=A.Elements;for (var i=0;i<B.length;i++){var C=B[i];if (C==A.Block||C==A.BlockLimit) continue;if (this.CheckElementRemovable(C,true)) return true;}};return false;},RemoveFromElement:function(A){var B=this._GetAttribsForComparison();var C=this._GetOverridesForComparison();var D=A.getElementsByTagName(this.Element);for (var i=D.length-1;i>=0;i--){var E=D[i];for (var F in B){if (FCKDomTools.HasAttribute(E,F)){switch (F){case 'style':this._RemoveStylesFromElement(E);break;case 'class':if (FCKDomTools.GetAttributeValue(E,F)!=this.GetFinalAttributeValue(F)) continue;default:FCKDomTools.RemoveAttribute(E,F);}}};this._RemoveOverrides(E,C[this.Element]);this._RemoveNoAttribElement(E);};for (var G in C){if (G!=this.Element){D=A.getElementsByTagName(G);for (var i=D.length-1;i>=0;i--){var E=D[i];this._RemoveOverrides(E,C[G]);this._RemoveNoAttribElement(E);}}}},_RemoveStylesFromElement:function(A){var B=A.style.cssText;var C=this.GetFinalStyleValue();if (B.length>0&&C.length==0) return;C='(^|;)\\s*('+C.replace(/\s*([^ ]+):.*?(;|$)/g,'$1|').replace(/\|$/,'')+'):[^;]+';var D=new RegExp(C,'gi');B=B.replace(D,'').Trim();if (B.length==0||B==';') FCKDomTools.RemoveAttribute(A,'style');else A.style.cssText=B.replace(D,'');},_RemoveOverrides:function(A,B){var C=B&&B.Attributes;if (C){for (var i=0;i<C.length;i++){var D=C[i][0];if (FCKDomTools.HasAttribute(A,D)){var E=C[i][1];if (E==null||(E.test&&E.test(FCKDomTools.GetAttributeValue(A,D)))||(typeof E=='string'&&FCKDomTools.GetAttributeValue(A,D)==E)) FCKDomTools.RemoveAttribute(A,D);}}}},_RemoveNoAttribElement:function(A){if (!FCKDomTools.HasAttributes(A)){var B=A.firstChild;var C=A.lastChild;FCKDomTools.RemoveNode(A,true);this._MergeSiblings(B);if (B!=C) this._MergeSiblings(C);}},BuildElement:function(A,B){var C=B||A.createElement(this.Element);var D=this._StyleDesc.Attributes;var E;if (D){for (var F in D){E=this.GetFinalAttributeValue(F);if (F.toLowerCase()=='class') C.className=E;else C.setAttribute(F,E);}};if (this._GetStyleText().length>0) C.style.cssText=this.GetFinalStyleValue();return C;},_CompareAttributeValues:function(A,B,C){if (A=='style'&&B&&C){B=B.replace(/;$/,'').toLowerCase();C=C.replace(/;$/,'').toLowerCase();};return (B==C)},GetFinalAttributeValue:function(A){var B=this._StyleDesc.Attributes;var B=B?B[A]:null;if (!B&&A=='style') return this.GetFinalStyleValue();if (B&&this._Variables) B=B.Replace(FCKRegexLib.StyleVariableAttName,this._GetVariableReplace,this);return B;},GetFinalStyleValue:function(){var A=this._GetStyleText();if (A.length>0&&this._Variables){A=A.Replace(FCKRegexLib.StyleVariableAttName,this._GetVariableReplace,this);A=FCKTools.NormalizeCssText(A);};return A;},_GetVariableReplace:function(){return this._Variables[arguments[2]]||arguments[0];},SetVariable:function(A,B){var C=this._Variables;if (!C) C=this._Variables={};this._Variables[A]=B;},_ApplyBlockStyle:function(A,B){var C;if (B) C=A.CreateBookmark(true);var D=new FCKDomRangeIterator(A);D.EnforceRealBlocks=true;var E;while((E=D.GetNextParagraph())){var F=E.parentNode.insertBefore(this.BuildElement(A.Window.document),E);FCKDomTools.MoveChildren(E,F);FCKDomTools.RemoveNode(E);};if (B) A.SelectBookmark(C);},_ApplyInlineStyle:function(A,B){var C=A.Window.document;if (A.CheckIsCollapsed()){var D=this.BuildElement(C);A.InsertNode(D);A.MoveToPosition(D,2);A.Select();return;};var E=this.Element;var F=FCK.DTD[E]||FCK.DTD.span;var G=this._GetAttribsForComparison();var H;A.Expand('inline_elements');var I=A.CreateBookmark(true);var J=A.GetBookmarkNode(I,true);var K=A.GetBookmarkNode(I,false);A.Release(true);var L=FCKDomTools.GetNextSourceNode(J,true);while (L){var M=false;var N=L.nodeType;var O=N==1?L.nodeName.toLowerCase():null;if (!O||F[O]){if ((FCK.DTD[L.parentNode.nodeName.toLowerCase()]||FCK.DTD.span)[E]){if (!A.CheckHasRange()) A.SetStart(L,3);if (N!=1||L.childNodes.length==0){var P=L;var Q=P.parentNode;while (P==Q.lastChild&&F[Q.nodeName.toLowerCase()]){P=Q;};A.SetEnd(P,4);if (P==P.parentNode.lastChild&&!F[P.parentNode.nodeName.toLowerCase()]) M=true;}else{A.SetEnd(L,3);}}else M=true;}else M=true;L=FCKDomTools.GetNextSourceNode(L);if (L==K){L=null;M=true;};if (M&&A.CheckHasRange()&&!A.CheckIsCollapsed()){H=this.BuildElement(C);A.ExtractContents().AppendTo(H);if (H.innerHTML.RTrim().length>0){A.InsertNode(H);this.RemoveFromElement(H);this._MergeSiblings(H,this._GetAttribsForComparison());if (!FCKBrowserInfo.IsIE) H.normalize();};A.Release(true);}};this._FixBookmarkStart(J);if (B) A.SelectBookmark(I);},_FixBookmarkStart:function(A){var B;while ((B=A.nextSibling)){if (B.nodeType==1&&FCKListsLib.InlineNonEmptyElements[B.nodeName.toLowerCase()]){if (!B.firstChild) FCKDomTools.RemoveNode(B);else FCKDomTools.MoveNode(A,B,true);continue;};if (B.nodeType==3&&B.length==0){FCKDomTools.RemoveNode(B);continue;};break;}},_MergeSiblings:function(A,B){if (!A||A.nodeType!=1||!FCKListsLib.InlineNonEmptyElements[A.nodeName.toLowerCase()]) return;this._MergeNextSibling(A,B);this._MergePreviousSibling(A,B);},_MergeNextSibling:function(A,B){var C=A.nextSibling;var D=(C&&C.nodeType==1&&C.getAttribute('_fck_bookmark'));if (D) C=C.nextSibling;if (C&&C.nodeType==1&&C.nodeName==A.nodeName){if (!B) B=this._CreateElementAttribsForComparison(A);if (this._CheckAttributesMatch(C,B)){var E=A.lastChild;if (D) FCKDomTools.MoveNode(A.nextSibling,A);FCKDomTools.MoveChildren(C,A);FCKDomTools.RemoveNode(C);if (E) this._MergeNextSibling(E);}}},_MergePreviousSibling:function(A,B){var C=A.previousSibling;var D=(C&&C.nodeType==1&&C.getAttribute('_fck_bookmark'));if (D) C=C.previousSibling;if (C&&C.nodeType==1&&C.nodeName==A.nodeName){if (!B) B=this._CreateElementAttribsForComparison(A);if (this._CheckAttributesMatch(C,B)){var E=A.firstChild;if (D) FCKDomTools.MoveNode(A.previousSibling,A,true);FCKDomTools.MoveChildren(C,A,true);FCKDomTools.RemoveNode(C);if (E) this._MergePreviousSibling(E);}}},_GetStyleText:function(){var A=this._StyleDesc.Styles;var B=(this._StyleDesc.Attributes?this._StyleDesc.Attributes['style']||'':'');if (B.length>0) B+=';';for (var C in A) B+=C+':'+A[C]+';';if (B.length>0&&!(/#\(/.test(B))){B=FCKTools.NormalizeCssText(B);};return (this._GetStyleText=function() { return B;})();},_GetAttribsForComparison:function(){var A=this._GetAttribsForComparison_$;if (A) return A;A={};var B=this._StyleDesc.Attributes;if (B){for (var C in B){A[C.toLowerCase()]=B[C].toLowerCase();}};if (this._GetStyleText().length>0){A['style']=this._GetStyleText().toLowerCase();};FCKTools.AppendLengthProperty(A,'_length');return (this._GetAttribsForComparison_$=A);},_GetOverridesForComparison:function(){var A=this._GetOverridesForComparison_$;if (A) return A;A={};var B=this._StyleDesc.Overrides;if (B){if (!FCKTools.IsArray(B)) B=[B];for (var i=0;i<B.length;i++){var C=B[i];var D;var E;var F;if (typeof C=='string') D=C.toLowerCase();else{D=C.Element?C.Element.toLowerCase():this.Element;F=C.Attributes;};E=A[D]||(A[D]={});if (F){var G=(E.Attributes=E.Attributes||[]);for (var H in F){G.push([H.toLowerCase(),F[H]]);}}}};return (this._GetOverridesForComparison_$=A);},_CreateElementAttribsForComparison:function(A){var B={};var C=0;for (var i=0;i<A.attributes.length;i++){var D=A.attributes[i];if (D.specified){B[D.nodeName.toLowerCase()]=FCKDomTools.GetAttributeValue(A,D).toLowerCase();C++;}};B._length=C;return B;},_CheckAttributesMatch:function(A,B){var C=A.attributes;var D=0;for (var i=0;i<C.length;i++){var E=C[i];if (E.specified){var F=E.nodeName.toLowerCase();var G=B[F];if (!G) break;if (G!=FCKDomTools.GetAttributeValue(A,E).toLowerCase()) break;D++;}};return (D==B._length);}};
+var FCKStyles=FCK.Styles={_Callbacks:{},_ObjectStyles:{},ApplyStyle:function(A){if (typeof A=='string') A=this.GetStyles()[A];if (A){if (A.GetType()==2) A.ApplyToObject(FCKSelection.GetSelectedElement());else A.ApplyToSelection(FCK.EditorWindow);FCK.Events.FireEvent('OnSelectionChange');}},RemoveStyle:function(A){if (typeof A=='string') A=this.GetStyles()[A];if (A){A.RemoveFromSelection(FCK.EditorWindow);FCK.Events.FireEvent('OnSelectionChange');}},AttachStyleStateChange:function(A,B,C){var D=this._Callbacks[A];if (!D) D=this._Callbacks[A]=[];D.push([B,C]);},CheckSelectionChanges:function(){var A=FCKSelection.GetBoundaryParentElement(true);if (!A) return;var B=new FCKElementPath(A);var C=this.GetStyles();for (var D in C){var E=this._Callbacks[D];if (E){var F=C[D];var G=F.CheckActive(B);if (F._LastState!=G){F._LastState=G;for (var i=0;i<E.length;i++){var H=E[i][0];var I=E[i][1];H.call(I||window,D,G);}}}}},CheckStyleInSelection:function(A){return false;},_GetRemoveFormatTagsRegex:function (){var A=new RegExp('^(?:'+FCKConfig.RemoveFormatTags.replace(/,/g,'|')+')$','i');return (this._GetRemoveFormatTagsRegex=function(){return A;})&&A;},RemoveAll:function(){var A=new FCKDomRange(FCK.EditorWindow);A.MoveToSelection();if (A.CheckIsCollapsed()) return;A.Expand('inline_elements');var B=A.CreateBookmark(true);var C=A.GetBookmarkNode(B,true);var D=A.GetBookmarkNode(B,false);A.Release(true);var E=this._GetRemoveFormatTagsRegex();var F=new FCKElementPath(C);var G=F.Elements;var H;for (var i=1;i<G.length;i++){H=G[i];if (H==F.Block||H==F.BlockLimit) break;if (E.test(H.nodeName)) FCKDomTools.BreakParent(C,H,A);};F=new FCKElementPath(D);G=F.Elements;for (var i=1;i<G.length;i++){H=G[i];if (H==F.Block||H==F.BlockLimit) break;elementName=H.nodeName.toLowerCase();if (E.test(H.nodeName)) FCKDomTools.BreakParent(D,H,A);};var I=FCKDomTools.GetNextSourceNode(C,true,1);while (I){if (I==D) break;var J=FCKDomTools.GetNextSourceNode(I,false,1);if (E.test(I.nodeName)) FCKDomTools.RemoveNode(I,true);I=J;};A.SelectBookmark(B);FCK.Events.FireEvent('OnSelectionChange');},GetStyle:function(A){return this.GetStyles()[A];},GetStyles:function(){var A=this._GetStyles;if (!A){A=this._GetStyles=FCKTools.Merge(this._LoadStylesCore(),this._LoadStylesCustom(),this._LoadStylesXml());};return A;},CheckHasObjectStyle:function(A){return!!this._ObjectStyles[A];},_LoadStylesCore:function(){var A={};var B=FCKConfig.CoreStyles;for (var C in B){var D=A['_FCK_'+C]=new FCKStyle(B[C]);D.IsCore=true;};return A;},_LoadStylesCustom:function(){var A={};var B=FCKConfig.CustomStyles;if (B){for (var C in B){var D=A[C]=new FCKStyle(B[C]);D.Name=C;}};return A;},_LoadStylesXml:function(){var A={};var B=FCKConfig.StylesXmlPath;if (!B||B.length==0) return A;var C=new FCKXml();C.LoadUrl(B);var D=FCKXml.TransformToObject(C.SelectSingleNode('Styles'));var E=D.$Style;for (var i=0;i<E.length;i++){var F=E[i];var G=(F.element||'').toLowerCase();if (G.length==0) throw('The element name is required. Error loading "'+B+'"');var H={Element:G,Attributes:{},Styles:{},Overrides:[]};var I=F.$Attribute||[];for (var j=0;j<I.length;j++){H.Attributes[I[j].name]=I[j].value;};var J=F.$Style||[];for (j=0;j<J.length;j++){H.Styles[J[j].name]=J[j].value;};var K=F.$Override;if (K){for (j=0;j<K.length;j++){var L=K[j];var M={Element:L.element};var N=L.$Attribute;if (N){M.Attributes={};for (var k=0;k<N.length;k++){var O=N[k].value||null;if (O){var P=O&&FCKRegexLib.RegExp.exec(O);if (P) O=new RegExp(P[1],P[2]||'');};M.Attributes[N[k].name]=O;}};H.Overrides.push(M);}};var Q=new FCKStyle(H);Q.Name=F.name||G;if (Q.GetType()==2) this._ObjectStyles[G]=true;A[Q.Name]=Q;};return A;}};
+var FCKListHandler={OutdentListItem:function(A){var B=A.parentNode;if (B.tagName.toUpperCase().Equals('UL','OL')){var C=FCKTools.GetElementDocument(A);var D=new FCKDocumentFragment(C);var E=D.RootNode;var F=false;var G=FCKDomTools.GetFirstChild(A,['UL','OL']);if (G){F=true;var H;while ((H=G.firstChild)) E.appendChild(G.removeChild(H));FCKDomTools.RemoveNode(G);};var I;var J=false;while ((I=A.nextSibling)){if (!F&&I.nodeType==1&&I.nodeName.toUpperCase()=='LI') J=F=true;E.appendChild(I.parentNode.removeChild(I));if (!J&&I.nodeType==1&&I.nodeName.toUpperCase().Equals('UL','OL')) FCKDomTools.RemoveNode(I,true);};var K=B.parentNode.tagName.toUpperCase();var L=(K=='LI');if (L||K.Equals('UL','OL')){if (F){var G=B.cloneNode(false);D.AppendTo(G);A.appendChild(G);}else if (L) D.InsertAfterNode(B.parentNode);else D.InsertAfterNode(B);if (L) FCKDomTools.InsertAfterNode(B.parentNode,B.removeChild(A));else FCKDomTools.InsertAfterNode(B,B.removeChild(A));}else{if (F){var N=B.cloneNode(false);D.AppendTo(N);FCKDomTools.InsertAfterNode(B,N);};var O=C.createElement(FCKConfig.EnterMode=='p'?'p':'div');FCKDomTools.MoveChildren(B.removeChild(A),O);FCKDomTools.InsertAfterNode(B,O);if (FCKConfig.EnterMode=='br'){if (FCKBrowserInfo.IsGecko) O.parentNode.insertBefore(FCKTools.CreateBogusBR(C),O);else FCKDomTools.InsertAfterNode(O,FCKTools.CreateBogusBR(C));FCKDomTools.RemoveNode(O,true);}};if (this.CheckEmptyList(B)) FCKDomTools.RemoveNode(B,true);}},CheckEmptyList:function(A){return (FCKDomTools.GetFirstChild(A,'LI')==null);},CheckListHasContents:function(A){var B=A.firstChild;while (B){switch (B.nodeType){case 1:if (!B.nodeName.IEquals('UL','LI')) return true;break;case 3:if (B.nodeValue.Trim().length>0) return true;};B=B.nextSibling;};return false;}};
+var FCKElementPath=function(A){var B=null;var C=null;var D=[];var e=A;while (e){if (e.nodeType==1){if (!this.LastElement) this.LastElement=e;var E=e.nodeName.toLowerCase();if (!C){if (!B&&FCKListsLib.PathBlockElements[E]!=null) B=e;if (FCKListsLib.PathBlockLimitElements[E]!=null){if (!B&&E=='div') B=e;else C=e;}};D.push(e);if (E=='body') break;};e=e.parentNode;};this.Block=B;this.BlockLimit=C;this.Elements=D;};
+var FCKDomRange=function(A){this.Window=A;this._Cache={};};FCKDomRange.prototype={_UpdateElementInfo:function(){var A=this._Range;if (!A) this.Release(true);else{var B=A.startContainer;var C=A.endContainer;var D=new FCKElementPath(B);this.StartNode=B.nodeType==3?B:B.childNodes[A.startOffset];this.StartContainer=B;this.StartBlock=D.Block;this.StartBlockLimit=D.BlockLimit;if (B!=C) D=new FCKElementPath(C);var E=C;if (A.endOffset==0){while (E&&!E.previousSibling) E=E.parentNode;if (E) E=E.previousSibling;}else if (E.nodeType==1) E=E.childNodes[A.endOffset-1];this.EndNode=E;this.EndContainer=C;this.EndBlock=D.Block;this.EndBlockLimit=D.BlockLimit;};this._Cache={};},CreateRange:function(){return new FCKW3CRange(this.Window.document);},DeleteContents:function(){if (this._Range){this._Range.deleteContents();this._UpdateElementInfo();}},ExtractContents:function(){if (this._Range){var A=this._Range.extractContents();this._UpdateElementInfo();return A;}},CheckIsCollapsed:function(){if (this._Range) return this._Range.collapsed;},Collapse:function(A){if (this._Range) this._Range.collapse(A);this._UpdateElementInfo();},Clone:function(){var A=FCKTools.CloneObject(this);if (this._Range) A._Range=this._Range.cloneRange();return A;},MoveToNodeContents:function(A){if (!this._Range) this._Range=this.CreateRange();this._Range.selectNodeContents(A);this._UpdateElementInfo();},MoveToElementStart:function(A){this.SetStart(A,1);this.SetEnd(A,1);},MoveToElementEditStart:function(A){var B;while ((B=A.firstChild)&&B.nodeType==1&&FCKListsLib.EmptyElements[B.nodeName.toLowerCase()]==null) A=B;this.MoveToElementStart(A);},InsertNode:function(A){if (this._Range) this._Range.insertNode(A);},CheckIsEmpty:function(){if (this.CheckIsCollapsed()) return true;var A=this.Window.document.createElement('div');this._Range.cloneContents().AppendTo(A);FCKDomTools.TrimNode(A);return (A.innerHTML.length==0);},CheckStartOfBlock:function(){var A=this._Cache.IsStartOfBlock;if (A!=undefined) return A;var B=this.Clone();B.Collapse(true);B.SetStart(B.StartBlock||B.StartBlockLimit,1);if (B.CheckIsCollapsed()) A=true;else{var C=B.Window.document.createElement('div');B._Range.cloneContents().AppendTo(C);FCKDomTools.LTrimNode(C);A=(C.innerHTML.length==0);};B.Release();return (this._Cache.IsStartOfBlock=A);},CheckEndOfBlock:function(A){var B=this._Cache.IsEndOfBlock;if (B!=undefined) return B;var C=this.Clone();C.Collapse(false);C.SetEnd(C.EndBlock||C.EndBlockLimit,2);B=C.CheckIsCollapsed();if (!B){var D=this.Window.document.createElement('div');C._Range.cloneContents().AppendTo(D);FCKDomTools.TrimNode(D);B=true;var E=D;while ((E=E.lastChild)){if (E.previousSibling||E.nodeType!=1||FCKListsLib.InlineChildReqElements[E.nodeName.toLowerCase()]==null){B=false;break;}}};C.Release();if (A) this.Select();return this._Cache.IsEndOfBlock=B;},CreateBookmark:function(A){var B={StartId:(new Date()).valueOf()+Math.floor(Math.random()*1000)+'S',EndId:(new Date()).valueOf()+Math.floor(Math.random()*1000)+'E'};var C=this.Window.document;var D;var E;var F;if (!this.CheckIsCollapsed()){E=C.createElement('span');E.style.display='none';E.id=B.EndId;E.setAttribute('_fck_bookmark',true);E.innerHTML='&nbsp;';F=this.Clone();F.Collapse(false);F.InsertNode(E);};D=C.createElement('span');D.style.display='none';D.id=B.StartId;D.setAttribute('_fck_bookmark',true);D.innerHTML='&nbsp;';F=this.Clone();F.Collapse(true);F.InsertNode(D);if (A){B.StartNode=D;B.EndNode=E;};if (E){this.SetStart(D,4);this.SetEnd(E,3);}else this.MoveToPosition(D,4);return B;},GetBookmarkNode:function(A,B){var C=this.Window.document;if (B) return A.StartNode||C.getElementById(A.StartId);else return A.EndNode||C.getElementById(A.EndId);},MoveToBookmark:function(A,B){var C=this.GetBookmarkNode(A,true);var D=this.GetBookmarkNode(A,false);this.SetStart(C,3);if (!B) FCKDomTools.RemoveNode(C);if (D){this.SetEnd(D,3);if (!B) FCKDomTools.RemoveNode(D);}else this.Collapse(true);this._UpdateElementInfo();},CreateBookmark2:function(){if (!this._Range) return { "Start":0,"End":0 };var A={"Start":[this._Range.startOffset],"End":[this._Range.endOffset]};var B=this._Range.startContainer.previousSibling;var C=this._Range.endContainer.previousSibling;while (B&&B.nodeType==3){A.Start[0]+=B.length;B=B.previousSibling;};while (C&&C.nodeType==3){A.End[0]+=C.length;C=C.previousSibling;};A.Start=FCKDomTools.GetNodeAddress(this._Range.startContainer,true).concat(A.Start);A.End=FCKDomTools.GetNodeAddress(this._Range.endContainer,true).concat(A.End);return A;},MoveToBookmark2:function(A){var B=FCKDomTools.GetNodeFromAddress(this.Window.document,A.Start.slice(0,-1),true);var C=FCKDomTools.GetNodeFromAddress(this.Window.document,A.End.slice(0,-1),true);this.Release(true);this._Range=new FCKW3CRange(this.Window.document);var D=A.Start[A.Start.length-1];var E=A.End[A.End.length-1];while (B.nodeType==3&&D>B.length){if (!B.nextSibling||B.nextSibling.nodeType!=3) break;D-=B.length;B=B.nextSibling;};while (C.nodeType==3&&E>C.length){if (!C.nextSibling||C.nextSibling.nodeType!=3) break;E-=C.length;C=C.nextSibling;};this._Range.setStart(B,D);this._Range.setEnd(C,E);this._UpdateElementInfo();},MoveToPosition:function(A,B){this.SetStart(A,B);this.Collapse(true);},SetStart:function(A,B,C){var D=this._Range;if (!D) D=this._Range=this.CreateRange();switch(B){case 1:D.setStart(A,0);break;case 2:D.setStart(A,A.childNodes.length);break;case 3:D.setStartBefore(A);break;case 4:D.setStartAfter(A);};if (!C) this._UpdateElementInfo();},SetEnd:function(A,B,C){var D=this._Range;if (!D) D=this._Range=this.CreateRange();switch(B){case 1:D.setEnd(A,0);break;case 2:D.setEnd(A,A.childNodes.length);break;case 3:D.setEndBefore(A);break;case 4:D.setEndAfter(A);};if (!C) this._UpdateElementInfo();},Expand:function(A){var B,oSibling;switch (A){case 'inline_elements':if (this._Range.startOffset==0){B=this._Range.startContainer;if (B.nodeType!=1) B=B.previousSibling?null:B.parentNode;if (B){while (FCKListsLib.InlineNonEmptyElements[B.nodeName.toLowerCase()]){this._Range.setStartBefore(B);if (B!=B.parentNode.firstChild) break;B=B.parentNode;}}};B=this._Range.endContainer;var C=this._Range.endOffset;if ((B.nodeType==3&&C>=B.nodeValue.length)||(B.nodeType==1&&C>=B.childNodes.length)||(B.nodeType!=1&&B.nodeType!=3)){if (B.nodeType!=1) B=B.nextSibling?null:B.parentNode;if (B){while (FCKListsLib.InlineNonEmptyElements[B.nodeName.toLowerCase()]){this._Range.setEndAfter(B);if (B!=B.parentNode.lastChild) break;B=B.parentNode;}}};break;case 'block_contents':case 'list_contents':var D=FCKListsLib.BlockBoundaries;if (A=='list_contents'||FCKConfig.EnterMode=='br') D=FCKListsLib.ListBoundaries;if (this.StartBlock&&FCKConfig.EnterMode!='br'&&A=='block_contents') this.SetStart(this.StartBlock,1);else{B=this._Range.startContainer;if (B.nodeType==1){var E=B.childNodes[this._Range.startOffset];if (E) B=FCKDomTools.GetPreviousSourceNode(E,true);else B=B.lastChild||B;};while (B&&(B.nodeType!=1||(B!=this.StartBlockLimit&&!D[B.nodeName.toLowerCase()]))){this._Range.setStartBefore(B);B=B.previousSibling||B.parentNode;}};if (this.EndBlock&&FCKConfig.EnterMode!='br'&&A=='block_contents'&&this.EndBlock.nodeName.toLowerCase()!='li') this.SetEnd(this.EndBlock,2);else{B=this._Range.endContainer;if (B.nodeType==1) B=B.childNodes[this._Range.endOffset]||B.lastChild;while (B&&(B.nodeType!=1||(B!=this.StartBlockLimit&&!D[B.nodeName.toLowerCase()]))){this._Range.setEndAfter(B);B=B.nextSibling||B.parentNode;};if (B&&B.nodeName.toLowerCase()=='br') this._Range.setEndAfter(B);};this._UpdateElementInfo();}},SplitBlock:function(){if (!this._Range) this.MoveToSelection();if (this.StartBlockLimit==this.EndBlockLimit){var A=this.StartBlock;var B=this.EndBlock;if (FCKConfig.EnterMode!='br'){if (!A){A=this.FixBlock(true);B=this.EndBlock;};if (!B) B=this.FixBlock(false);};var C=(A!=null&&this.CheckStartOfBlock());var D=(B!=null&&this.CheckEndOfBlock());if (!this.CheckIsEmpty()) this.DeleteContents();if (A&&B&&A==B){if (D){this.MoveToPosition(B,4);B=null;}else if (C){this.MoveToPosition(A,3);A=null;}else{this.SetEnd(A,2);var E=this.ExtractContents();B=A.cloneNode(false);B.removeAttribute('id',false);E.AppendTo(B);FCKDomTools.InsertAfterNode(A,B);this.MoveToPosition(A,4);if (FCKBrowserInfo.IsGecko&&!A.nodeName.IEquals(['ul','ol'])) FCKTools.AppendBogusBr(A);}};return {PreviousBlock:A,NextBlock:B,WasStartOfBlock:C,WasEndOfBlock:D};};return null;},FixBlock:function(A){var B=this.CreateBookmark();this.Collapse(A);this.Expand('block_contents');var C=this.Window.document.createElement(FCKConfig.EnterMode);this.ExtractContents().AppendTo(C);FCKDomTools.TrimNode(C);this.InsertNode(C);this.MoveToBookmark(B);return C;},Release:function(A){if (!A) this.Window=null;this.StartNode=null;this.StartContainer=null;this.StartBlock=null;this.StartBlockLimit=null;this.EndNode=null;this.EndContainer=null;this.EndBlock=null;this.EndBlockLimit=null;this._Range=null;this._Cache=null;},CheckHasRange:function(){return!!this._Range;},GetTouchedStartNode:function(){var A=this._Range;var B=A.startContainer;if (A.collapsed||B.nodeType!=1) return B;return B.childNodes[A.startOffset]||B;},GetTouchedEndNode:function(){var A=this._Range;var B=A.endContainer;if (A.collapsed||B.nodeType!=1) return B;return B.childNodes[A.endOffset-1]||B;}};
+FCKDomRange.prototype.MoveToSelection=function(){this.Release(true);var A=this.Window.getSelection();if (A&&A.rangeCount>0){this._Range=FCKW3CRange.CreateFromRange(this.Window.document,A.getRangeAt(0));this._UpdateElementInfo();}else this.MoveToElementStart(this.Window.document.body);};FCKDomRange.prototype.Select=function(){var A=this._Range;if (A){var B=A.startContainer;if (A.collapsed&&B.nodeType==1&&B.childNodes.length==0) B.appendChild(A._Document.createTextNode(''));var C=this.Window.document.createRange();C.setStart(B,A.startOffset);try{C.setEnd(A.endContainer,A.endOffset);}catch (e){if (e.toString().Contains('NS_ERROR_ILLEGAL_VALUE')){A.collapse(true);C.setEnd(A.endContainer,A.endOffset);}else throw(e);};var D=this.Window.getSelection();D.removeAllRanges();D.addRange(C);}};FCKDomRange.prototype.SelectBookmark=function(A){var B=this.Window.document.createRange();var C=this.GetBookmarkNode(A,true);var D=this.GetBookmarkNode(A,false);B.setStart(C.parentNode,FCKDomTools.GetIndexOf(C));FCKDomTools.RemoveNode(C);if (D){B.setEnd(D.parentNode,FCKDomTools.GetIndexOf(D));FCKDomTools.RemoveNode(D);};var E=this.Window.getSelection();E.removeAllRanges();E.addRange(B);}
+var FCKDomRangeIterator=function(A){this.Range=A;this.ForceBrBreak=false;this.EnforceRealBlocks=false;};FCKDomRangeIterator.CreateFromSelection=function(A){var B=new FCKDomRange(A);B.MoveToSelection();return new FCKDomRangeIterator(B);};FCKDomRangeIterator.prototype={GetNextParagraph:function(){var A;var B;var C;var D;var E;var F=this.ForceBrBreak?FCKListsLib.ListBoundaries:FCKListsLib.BlockBoundaries;if (!this._LastNode){var B=this.Range.Clone();B.Expand(this.ForceBrBreak?'list_contents':'block_contents');this._NextNode=B.GetTouchedStartNode();this._LastNode=B.GetTouchedEndNode();B=null;};var H=this._NextNode;var I=this._LastNode;while (H){var J=false;var K=(H.nodeType!=1);var L=false;if (!K){var M=H.nodeName.toLowerCase();if (F[M]){if (M=='br') K=true;else if (!B&&H.childNodes.length==0&&M!='hr'){A=H;C=H==I;break;};J=true;}else{if (H.firstChild){if (!B){B=new FCKDomRange(this.Range.Window);B.SetStart(H,3,true);};H=H.firstChild;continue;};K=true;}}else if (H.nodeType==3){if (/^[\r\n\t ]+$/.test(H.nodeValue)) K=false;};if (K&&!B){B=new FCKDomRange(this.Range.Window);B.SetStart(H,3,true);};C=((!J||K)&&H==I);if (B&&!J){while (!H.nextSibling&&!C){var N=H.parentNode;if (F[N.nodeName.toLowerCase()]){J=true;C=C||(N==I);break;};H=N;C=(H==I);L=true;}};if (K) B.SetEnd(H,4,true);if ((J||C)&&B){B._UpdateElementInfo();if (B.StartNode==B.EndNode&&B.StartNode.parentNode==B.StartBlockLimit&&B.StartNode.getAttribute&&B.StartNode.getAttribute('_fck_bookmark')) B=null;else break;};if (C) break;H=FCKDomTools.GetNextSourceNode(H,L,null,I);};if (!A){if (!B){this._NextNode=null;return null;};A=B.StartBlock;if (!A&&!this.EnforceRealBlocks&&B.StartBlockLimit.nodeName.IEquals('DIV','TH','TD')&&B.CheckStartOfBlock()&&B.CheckEndOfBlock()){A=B.StartBlockLimit;}else if (!A||(this.EnforceRealBlocks&&A.nodeName.toLowerCase()=='li')){A=this.Range.Window.document.createElement(FCKConfig.EnterMode=='p'?'p':'div');B.ExtractContents().AppendTo(A);FCKDomTools.TrimNode(A);B.InsertNode(A);D=true;E=true;}else if (A.nodeName.toLowerCase()!='li'){if (!B.CheckStartOfBlock()||!B.CheckEndOfBlock()){A=A.cloneNode(false);B.ExtractContents().AppendTo(A);FCKDomTools.TrimNode(A);var O=B.SplitBlock();D=!O.WasStartOfBlock;E=!O.WasEndOfBlock;B.InsertNode(A);}}else if (!C){this._NextNode=A==I?null:FCKDomTools.GetNextSourceNode(B.EndNode,true,null,I);return A;}};if (D){var P=A.previousSibling;if (P&&P.nodeType==1&&P.nodeName.toLowerCase()=='br') P.parentNode.removeChild(P);};if (E){var Q=A.lastChild;if (Q&&Q.nodeType==1&&Q.nodeName.toLowerCase()=='br') A.removeChild(Q);};this._NextNode=(C||A==I)?null:FCKDomTools.GetNextSourceNode(A,true,null,I);return A;}};
+var FCKDocumentFragment=function(A,B){this.RootNode=B||A.createDocumentFragment();};FCKDocumentFragment.prototype={AppendTo:function(A){A.appendChild(this.RootNode);},InsertAfterNode:function(A){FCKDomTools.InsertAfterNode(A,this.RootNode);}}
+var FCKW3CRange=function(A){this._Document=A;this.startContainer=null;this.startOffset=null;this.endContainer=null;this.endOffset=null;this.collapsed=true;};FCKW3CRange.CreateRange=function(A){return new FCKW3CRange(A);};FCKW3CRange.CreateFromRange=function(A,B){var C=FCKW3CRange.CreateRange(A);C.setStart(B.startContainer,B.startOffset);C.setEnd(B.endContainer,B.endOffset);return C;};FCKW3CRange.prototype={_UpdateCollapsed:function(){this.collapsed=(this.startContainer==this.endContainer&&this.startOffset==this.endOffset);},setStart:function(A,B){this.startContainer=A;this.startOffset=B;if (!this.endContainer){this.endContainer=A;this.endOffset=B;};this._UpdateCollapsed();},setEnd:function(A,B){this.endContainer=A;this.endOffset=B;if (!this.startContainer){this.startContainer=A;this.startOffset=B;};this._UpdateCollapsed();},setStartAfter:function(A){this.setStart(A.parentNode,FCKDomTools.GetIndexOf(A)+1);},setStartBefore:function(A){this.setStart(A.parentNode,FCKDomTools.GetIndexOf(A));},setEndAfter:function(A){this.setEnd(A.parentNode,FCKDomTools.GetIndexOf(A)+1);},setEndBefore:function(A){this.setEnd(A.parentNode,FCKDomTools.GetIndexOf(A));},collapse:function(A){if (A){this.endContainer=this.startContainer;this.endOffset=this.startOffset;}else{this.startContainer=this.endContainer;this.startOffset=this.endOffset;};this.collapsed=true;},selectNodeContents:function(A){this.setStart(A,0);this.setEnd(A,A.nodeType==3?A.data.length:A.childNodes.length);},insertNode:function(A){var B=this.startContainer;var C=this.startOffset;if (B.nodeType==3){B.splitText(C);if (B==this.endContainer) this.setEnd(B.nextSibling,this.endOffset-this.startOffset);FCKDomTools.InsertAfterNode(B,A);return;}else{B.insertBefore(A,B.childNodes[C]||null);if (B==this.endContainer){this.endOffset++;this.collapsed=false;}}},deleteContents:function(){if (this.collapsed) return;this._ExecContentsAction(0);},extractContents:function(){var A=new FCKDocumentFragment(this._Document);if (!this.collapsed) this._ExecContentsAction(1,A);return A;},cloneContents:function(){var A=new FCKDocumentFragment(this._Document);if (!this.collapsed) this._ExecContentsAction(2,A);return A;},_ExecContentsAction:function(A,B){var C=this.startContainer;var D=this.endContainer;var E=this.startOffset;var F=this.endOffset;var G=false;var H=false;if (D.nodeType==3) D=D.splitText(F);else{if (D.childNodes.length>0){if (F>D.childNodes.length-1){D=FCKDomTools.InsertAfterNode(D.lastChild,this._Document.createTextNode(''));H=true;}else D=D.childNodes[F];}};if (C.nodeType==3){C.splitText(E);if (C==D) D=C.nextSibling;}else{if (C.childNodes.length>0&&E<=C.childNodes.length-1){if (E==0){C=C.insertBefore(this._Document.createTextNode(''),C.firstChild);G=true;}else C=C.childNodes[E].previousSibling;}};var I=FCKDomTools.GetParents(C);var J=FCKDomTools.GetParents(D);var i,topStart,topEnd;for (i=0;i<I.length;i++){topStart=I[i];topEnd=J[i];if (topStart!=topEnd) break;};var K,levelStartNode,levelClone,currentNode,currentSibling;if (B) K=B.RootNode;for (var j=i;j<I.length;j++){levelStartNode=I[j];if (K&&levelStartNode!=C) levelClone=K.appendChild(levelStartNode.cloneNode(levelStartNode==C));currentNode=levelStartNode.nextSibling;while(currentNode){if (currentNode==J[j]||currentNode==D) break;currentSibling=currentNode.nextSibling;if (A==2) K.appendChild(currentNode.cloneNode(true));else{currentNode.parentNode.removeChild(currentNode);if (A==1) K.appendChild(currentNode);};currentNode=currentSibling;};if (K) K=levelClone;};if (B) K=B.RootNode;for (var k=i;k<J.length;k++){levelStartNode=J[k];if (A>0&&levelStartNode!=D) levelClone=K.appendChild(levelStartNode.cloneNode(levelStartNode==D));if (!I[k]||levelStartNode.parentNode!=I[k].parentNode){currentNode=levelStartNode.previousSibling;while(currentNode){if (currentNode==I[k]||currentNode==C) break;currentSibling=currentNode.previousSibling;if (A==2) K.insertBefore(currentNode.cloneNode(true),K.firstChild);else{currentNode.parentNode.removeChild(currentNode);if (A==1) K.insertBefore(currentNode,K.firstChild);};currentNode=currentSibling;}};if (K) K=levelClone;};if (A==2){var L=this.startContainer;if (L.nodeType==3){L.data+=L.nextSibling.data;L.parentNode.removeChild(L.nextSibling);};var M=this.endContainer;if (M.nodeType==3&&M.nextSibling){M.data+=M.nextSibling.data;M.parentNode.removeChild(M.nextSibling);}}else{if (topStart&&topEnd&&(C.parentNode!=topStart.parentNode||D.parentNode!=topEnd.parentNode)){var N=FCKDomTools.GetIndexOf(topEnd);if (G&&topEnd.parentNode==C.parentNode) N--;this.setStart(topEnd.parentNode,N);};this.collapse(true);};if(G) C.parentNode.removeChild(C);if(H&&D.parentNode) D.parentNode.removeChild(D);},cloneRange:function(){return FCKW3CRange.CreateFromRange(this._Document,this);}};
+var FCKEnterKey=function(A,B,C,D){this.Window=A;this.EnterMode=B||'p';this.ShiftEnterMode=C||'br';var E=new FCKKeystrokeHandler(false);E._EnterKey=this;E.OnKeystroke=FCKEnterKey_OnKeystroke;E.SetKeystrokes([[13,'Enter'],[SHIFT+13,'ShiftEnter'],[9,'Tab'],[8,'Backspace'],[CTRL+8,'CtrlBackspace'],[46,'Delete']]);if (D>0){this.TabText='';while (D-->0) this.TabText+='\xa0';};E.AttachToElement(A.document);};function FCKEnterKey_OnKeystroke(A,B){var C=this._EnterKey;try{switch (B){case 'Enter':return C.DoEnter();break;case 'ShiftEnter':return C.DoShiftEnter();break;case 'Backspace':return C.DoBackspace();break;case 'Delete':return C.DoDelete();break;case 'Tab':return C.DoTab();break;case 'CtrlBackspace':return C.DoCtrlBackspace();break;}}catch (e){};return false;};FCKEnterKey.prototype.DoEnter=function(A,B){FCKUndo.SaveUndoStep();this._HasShift=(B===true);var C=FCKSelection.GetParentElement();var D=new FCKElementPath(C);var E=A||this.EnterMode;if (E=='br'||D.Block&&D.Block.tagName.toLowerCase()=='pre') return this._ExecuteEnterBr();else return this._ExecuteEnterBlock(E);};FCKEnterKey.prototype.DoShiftEnter=function(){return this.DoEnter(this.ShiftEnterMode,true);};FCKEnterKey.prototype.DoBackspace=function(){var A=false;var B=new FCKDomRange(this.Window);B.MoveToSelection();if (FCKBrowserInfo.IsIE&&this._CheckIsAllContentsIncluded(B,this.Window.document.body)){this._FixIESelectAllBug(B);return true;};var C=B.CheckIsCollapsed();if (!C){if (FCKBrowserInfo.IsIE&&this.Window.document.selection.type.toLowerCase()=="control"){var D=this.Window.document.selection.createRange();for (var i=D.length-1;i>=0;i--){var E=D.item(i);E.parentNode.removeChild(E);};return true;};return false;};var F=B.StartBlock;var G=B.EndBlock;if (B.StartBlockLimit==B.EndBlockLimit&&F&&G){if (!C){var H=B.CheckEndOfBlock();B.DeleteContents();if (F!=G){B.SetStart(G,1);B.SetEnd(G,1);};B.Select();A=(F==G);};if (B.CheckStartOfBlock()){var I=B.StartBlock;var J=FCKDomTools.GetPreviousSourceElement(I,true,['BODY',B.StartBlockLimit.nodeName],['UL','OL']);A=this._ExecuteBackspace(B,J,I);}else if (FCKBrowserInfo.IsGeckoLike){B.Select();}};B.Release();return A;};FCKEnterKey.prototype.DoCtrlBackspace=function(){FCKUndo.SaveUndoStep();var A=new FCKDomRange(this.Window);A.MoveToSelection();if (FCKBrowserInfo.IsIE&&this._CheckIsAllContentsIncluded(A,this.Window.document.body)){this._FixIESelectAllBug(A);return true;};return false;};FCKEnterKey.prototype._ExecuteBackspace=function(A,B,C){var D=false;if (!B&&C&&C.nodeName.IEquals('LI')&&C.parentNode.parentNode.nodeName.IEquals('LI')){this._OutdentWithSelection(C,A);return true;};if (B&&B.nodeName.IEquals('LI')){var E=FCKDomTools.GetLastChild(B,['UL','OL']);while (E){B=FCKDomTools.GetLastChild(E,'LI');E=FCKDomTools.GetLastChild(B,['UL','OL']);}};if (B&&C){if (C.nodeName.IEquals('LI')&&!B.nodeName.IEquals('LI')){this._OutdentWithSelection(C,A);return true;};var F=C.parentNode;var G=B.nodeName.toLowerCase();if (FCKListsLib.EmptyElements[G]!=null||G=='table'){FCKDomTools.RemoveNode(B);D=true;}else{FCKDomTools.RemoveNode(C);while (F.innerHTML.Trim().length==0){var H=F.parentNode;H.removeChild(F);F=H;};FCKDomTools.LTrimNode(C);FCKDomTools.RTrimNode(B);A.SetStart(B,2,true);A.Collapse(true);var I=A.CreateBookmark();if (!C.tagName.IEquals(['TABLE'])) FCKDomTools.MoveChildren(C,B);A.MoveToBookmark(I);A.Select();D=true;}};return D;};FCKEnterKey.prototype.DoDelete=function(){FCKUndo.SaveUndoStep();var A=false;var B=new FCKDomRange(this.Window);B.MoveToSelection();if (FCKBrowserInfo.IsIE&&this._CheckIsAllContentsIncluded(B,this.Window.document.body)){this._FixIESelectAllBug(B);return true;};if (B.CheckIsCollapsed()&&B.CheckEndOfBlock(FCKBrowserInfo.IsGeckoLike)){var C=B.StartBlock;var D=FCKTools.GetElementAscensor(C,'td');var E=FCKDomTools.GetNextSourceElement(C,true,[B.StartBlockLimit.nodeName],['UL','OL','TR']);if (D){var F=FCKTools.GetElementAscensor(E,'td');if (F!=D) return true;};A=this._ExecuteBackspace(B,C,E);};B.Release();return A;};FCKEnterKey.prototype.DoTab=function(){var A=new FCKDomRange(this.Window);A.MoveToSelection();var B=A._Range.startContainer;while (B){if (B.nodeType==1){var C=B.tagName.toLowerCase();if (C=="tr"||C=="td"||C=="th"||C=="tbody"||C=="table") return false;else break;};B=B.parentNode;};if (this.TabText){A.DeleteContents();A.InsertNode(this.Window.document.createTextNode(this.TabText));A.Collapse(false);A.Select();};return true;};FCKEnterKey.prototype._ExecuteEnterBlock=function(A,B){var C=B||new FCKDomRange(this.Window);var D=C.SplitBlock();if (D){var E=D.PreviousBlock;var F=D.NextBlock;var G=D.WasStartOfBlock;var H=D.WasEndOfBlock;if (!D.WasStartOfBlock&&!D.WasEndOfBlock){if (F) C.MoveToElementEditStart(F);}else{if (G&&H&&E.tagName.toUpperCase()=='LI'){C.MoveToElementStart(E);this._OutdentWithSelection(E,C);C.Release();return true;};var I;if (E){var J=E.tagName.toUpperCase();if (this._HasShift||(/^H[1-6]$/).test(J)) I=this.Window.document.createElement(A);else{I=FCKDomTools.CloneElement(E);this._RecreateEndingTree(E,I);}}else if (F){I=FCKDomTools.CloneElement(F);}else I=this.Window.document.createElement(A);if (FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(I);C.InsertNode(I);if (FCKBrowserInfo.IsIE){C.MoveToNodeContents(I);C.Select();};C.MoveToElementEditStart(G&&!H?F:I);if (FCKBrowserInfo.IsGeckoLike) I.scrollIntoView(false);};C.Select();};C.Release();return true;};FCKEnterKey.prototype._ExecuteEnterBr=function(A){var B=new FCKDomRange(this.Window);B.MoveToSelection();if (B.StartBlockLimit==B.EndBlockLimit){B.DeleteContents();B.MoveToSelection();var C=B.CheckStartOfBlock();var D=B.CheckEndOfBlock();var E=B.StartBlock?B.StartBlock.tagName.toUpperCase():'';var F=this._HasShift;if (!F&&E=='LI') return this._ExecuteEnterBlock(null,B);if (!F&&D&&(/^H[1-6]$/).test(E)){FCKDomTools.InsertAfterNode(B.StartBlock,this.Window.document.createElement('br'));if (FCKBrowserInfo.IsGecko) FCKDomTools.InsertAfterNode(B.StartBlock,this.Window.document.createTextNode(''));B.SetStart(B.StartBlock.nextSibling,FCKBrowserInfo.IsIE?3:1);}else{var G=null;if (E.IEquals('pre')) G=this.Window.document.createTextNode(FCKBrowserInfo.IsIE?'\r':'\n');else G=this.Window.document.createElement('br');B.InsertNode(G);if (FCKBrowserInfo.IsGecko) FCKDomTools.InsertAfterNode(G,this.Window.document.createTextNode(''));if (D&&FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(G.parentNode);if (FCKBrowserInfo.IsIE) B.SetStart(G,4);else B.SetStart(G.nextSibling,1);if (!FCKBrowserInfo.IsIE){var H=null;if (FCKBrowserInfo.IsOpera) H=this.Window.document.createElement('span');else H=this.Window.document.createElement('br');G.parentNode.insertBefore(H,G.nextSibling);H.scrollIntoView(false);H.parentNode.removeChild(H);}};B.Collapse(true);B.Select();};B.Release();return true;};FCKEnterKey.prototype._RecreateEndingTree=function(A,B){while ((A=A.lastChild)&&A.nodeType==1&&FCKListsLib.InlineChildReqElements[A.nodeName.toLowerCase()]!=null) B=B.insertBefore(FCKDomTools.CloneElement(A),B.firstChild);};FCKEnterKey.prototype._OutdentWithSelection=function(A,B){var C=B.CreateBookmark();FCKListHandler.OutdentListItem(A);B.MoveToBookmark(C);B.Select();};FCKEnterKey.prototype._CheckIsAllContentsIncluded=function(A,B){var C=false;var D=false;if (A.StartContainer==B||A.StartContainer==B.firstChild) C=(A._Range.startOffset==0);if (A.EndContainer==B||A.EndContainer==B.lastChild){var E=A.EndContainer.nodeType==3?A.EndContainer.length:A.EndContainer.childNodes.length;D=(A._Range.endOffset==E);};return C&&D;};FCKEnterKey.prototype._FixIESelectAllBug=function(A){var B=this.Window.document;B.body.innerHTML='';var C;if (FCKConfig.EnterMode.IEquals(['div','p'])){C=B.createElement(FCKConfig.EnterMode);B.body.appendChild(C);}else C=B.body;A.MoveToNodeContents(C);A.Collapse(true);A.Select();A.Release();};
+var FCKDocumentProcessor={};FCKDocumentProcessor._Items=[];FCKDocumentProcessor.AppendNew=function(){var A={};this._Items.AddItem(A);return A;};FCKDocumentProcessor.Process=function(A){var B,i=0;while((B=this._Items[i++])) B.ProcessDocument(A);};var FCKDocumentProcessor_CreateFakeImage=function(A,B){var C=FCK.EditorDocument.createElement('IMG');C.className=A;C.src=FCKConfig.FullBasePath+'images/spacer.gif';C.setAttribute('_fckfakelement','true',0);C.setAttribute('_fckrealelement',FCKTempBin.AddElement(B),0);return C;};if (FCKBrowserInfo.IsIE||FCKBrowserInfo.IsOpera){var FCKAnchorsProcessor=FCKDocumentProcessor.AppendNew();FCKAnchorsProcessor.ProcessDocument=function(A){var B=A.getElementsByTagName('A');var C;var i=B.length-1;while (i>=0&&(C=B[i--])){if (C.name.length>0){if (C.innerHTML!==''){if (FCKBrowserInfo.IsIE) C.className+=' FCK__AnchorC';}else{var D=FCKDocumentProcessor_CreateFakeImage('FCK__Anchor',C.cloneNode(true));D.setAttribute('_fckanchor','true',0);C.parentNode.insertBefore(D,C);C.parentNode.removeChild(C);}}}}};var FCKPageBreaksProcessor=FCKDocumentProcessor.AppendNew();FCKPageBreaksProcessor.ProcessDocument=function(A){var B=A.getElementsByTagName('DIV');var C;var i=B.length-1;while (i>=0&&(C=B[i--])){if (C.style.pageBreakAfter=='always'&&C.childNodes.length==1&&C.childNodes[0].style&&C.childNodes[0].style.display=='none'){var D=FCKDocumentProcessor_CreateFakeImage('FCK__PageBreak',C.cloneNode(true));C.parentNode.insertBefore(D,C);C.parentNode.removeChild(C);}}};var FCKFlashProcessor=FCKDocumentProcessor.AppendNew();FCKFlashProcessor.ProcessDocument=function(A){var B=A.getElementsByTagName('EMBED');var C;var i=B.length-1;while (i>=0&&(C=B[i--])){var D=C.attributes['type'];if ((C.src&&C.src.EndsWith('.swf',true))||(D&&D.nodeValue=='application/x-shockwave-flash')){var E=C.cloneNode(true);var F=FCKDocumentProcessor_CreateFakeImage('FCK__Flash',E);F.setAttribute('_fckflash','true',0);FCKFlashProcessor.RefreshView(F,C);C.parentNode.insertBefore(F,C);C.parentNode.removeChild(C);}}};FCKFlashProcessor.RefreshView=function(A,B){if (B.getAttribute('width')>0) A.style.width=FCKTools.ConvertHtmlSizeToStyle(B.getAttribute('width'));if (B.getAttribute('height')>0) A.style.height=FCKTools.ConvertHtmlSizeToStyle(B.getAttribute('height'));};FCK.GetRealElement=function(A){var e=FCKTempBin.Elements[A.getAttribute('_fckrealelement')];if (A.getAttribute('_fckflash')){if (A.style.width.length>0) e.width=FCKTools.ConvertStyleSizeToHtml(A.style.width);if (A.style.height.length>0) e.height=FCKTools.ConvertStyleSizeToHtml(A.style.height);};return e;};if (FCKBrowserInfo.IsIE){FCKDocumentProcessor.AppendNew().ProcessDocument=function(A){var B=A.getElementsByTagName('HR');var C;var i=B.length-1;while (i>=0&&(C=B[i--])){var D=A.createElement('hr');D.mergeAttributes(C,true);FCKDomTools.InsertAfterNode(C,D);C.parentNode.removeChild(C);}}};FCKDocumentProcessor.AppendNew().ProcessDocument=function(A){var B=A.getElementsByTagName('INPUT');var C;var i=B.length-1;while (i>=0&&(C=B[i--])){if (C.type=='hidden'){var D=FCKDocumentProcessor_CreateFakeImage('FCK__InputHidden',C.cloneNode(true));D.setAttribute('_fckinputhidden','true',0);C.parentNode.insertBefore(D,C);C.parentNode.removeChild(C);}}}
+var FCKSelection=FCK.Selection={GetParentBlock:function(){var A=this.GetParentElement();while (A){if (FCKListsLib.BlockBoundaries[A.nodeName.toLowerCase()]) break;A=A.parentNode;};return A;},ApplyStyle:function(A){FCKStyles.ApplyStyle(new FCKStyle(A));}};
+FCKSelection.GetType=function(){var A='Text';var B;try { B=FCK.EditorWindow.getSelection();} catch (e) {};if (B&&B.rangeCount==1){var C=B.getRangeAt(0);if (C.startContainer==C.endContainer&&(C.endOffset-C.startOffset)==1&&C.startContainer.nodeType==1&&FCKListsLib.StyleObjectElements[C.startContainer.childNodes[C.startOffset].nodeName.toLowerCase()]){A='Control';}};return A;};FCKSelection.GetSelectedElement=function(){var A=null;var B=!!FCK.EditorWindow&&FCK.EditorWindow.getSelection();if (B&&B.anchorNode&&B.anchorNode.nodeType==1){A=B.anchorNode.childNodes[B.anchorOffset];if (!A) A=B.anchorNode;else if (A.nodeType!=1) return null;};return A;};FCKSelection.GetParentElement=function(){if (this.GetType()=='Control') return FCKSelection.GetSelectedElement().parentNode;else{var A=FCK.EditorWindow.getSelection();if (A){if (A.anchorNode&&A.anchorNode==A.focusNode) return A.anchorNode.parentNode;var B=new FCKElementPath(A.anchorNode);var C=new FCKElementPath(A.focusNode);var D=null;var E=null;if (B.Elements.length>C.Elements.length){D=B.Elements;E=C.Elements;}else{D=C.Elements;E=B.Elements;};var F=D.length-E.length;for(var i=0;i<E.length;i++){if (D[F+i]==E[i]) return E[i];};return null;}};return null;};FCKSelection.GetBoundaryParentElement=function(A){if (!FCK.EditorWindow) return null;if (this.GetType()=='Control') return FCKSelection.GetSelectedElement().parentNode;else{var B=FCK.EditorWindow.getSelection();if (B&&B.rangeCount>0){var C=B.getRangeAt(A?0:(B.rangeCount-1));var D=A?C.startContainer:C.endContainer;return (D.nodeType==1?D:D.parentNode);}};return null;};FCKSelection.SelectNode=function(A){var B=FCK.EditorDocument.createRange();B.selectNode(A);var C=FCK.EditorWindow.getSelection();C.removeAllRanges();C.addRange(B);};FCKSelection.Collapse=function(A){var B=FCK.EditorWindow.getSelection();if (A==null||A===true) B.collapseToStart();else B.collapseToEnd();};FCKSelection.HasAncestorNode=function(A){var B=this.GetSelectedElement();if (!B&&FCK.EditorWindow){try		{ B=FCK.EditorWindow.getSelection().getRangeAt(0).startContainer;}catch(e){}};while (B){if (B.nodeType==1&&B.tagName==A) return true;B=B.parentNode;};return false;};FCKSelection.MoveToAncestorNode=function(A){var B;var C=this.GetSelectedElement();if (!C) C=FCK.EditorWindow.getSelection().getRangeAt(0).startContainer;while (C){if (C.nodeName==A) return C;C=C.parentNode;};return null;};FCKSelection.Delete=function(){var A=FCK.EditorWindow.getSelection();for (var i=0;i<A.rangeCount;i++){A.getRangeAt(i).deleteContents();};return A;};
+var FCKTableHandler={};FCKTableHandler.InsertRow=function(A){var B=FCKSelection.MoveToAncestorNode('TR');if (!B) return;var C=B.cloneNode(true);B.parentNode.insertBefore(C,B);FCKTableHandler.ClearRow(A?C:B);};FCKTableHandler.DeleteRows=function(A){if (!A){var B=FCKTableHandler.GetSelectedCells();var C=[];for (var i=0;i<B.length;i++){var D=FCKTools.GetElementAscensor(B[i],'TR');C[D.rowIndex]=D;};for (var i=C.length;i>=0;i--){if (C[i]) FCKTableHandler.DeleteRows(C[i]);};return;};var E=FCKTools.GetElementAscensor(A,'TABLE');if (E.rows.length==1){FCKTableHandler.DeleteTable(E);return;};A.parentNode.removeChild(A);};FCKTableHandler.DeleteTable=function(A){if (!A){A=FCKSelection.GetSelectedElement();if (!A||A.tagName!='TABLE') A=FCKSelection.MoveToAncestorNode('TABLE');};if (!A) return;FCKSelection.SelectNode(A);FCKSelection.Collapse();if (A.parentNode.childNodes.length==1) A.parentNode.parentNode.removeChild(A.parentNode);else A.parentNode.removeChild(A);};FCKTableHandler.InsertColumn=function(A){var B=null;var C=this.GetSelectedCells();if (C&&C.length) B=C[A?0:(C.length-1)];if (!B) return;var D=FCKTools.GetElementAscensor(B,'TABLE');var E=B.cellIndex;for (var i=0;i<D.rows.length;i++){var F=D.rows[i];if (F.cells.length<(E+1)) continue;B=F.cells[E].cloneNode(false);if (FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(B);var G=F.cells[E];if (A) F.insertBefore(B,G);else if (G.nextSibling) F.insertBefore(B,G.nextSibling);else F.appendChild(B);}};FCKTableHandler.DeleteColumns=function(A){if (!A){var B=FCKTableHandler.GetSelectedCells();for (var i=B.length;i>=0;i--){if (B[i]) FCKTableHandler.DeleteColumns(B[i]);};return;};if (!A) return;var C=FCKTools.GetElementAscensor(A,'TABLE');var D=A.cellIndex;for (var i=C.rows.length-1;i>=0;i--){var E=C.rows[i];if (D==0&&E.cells.length==1){FCKTableHandler.DeleteRows(E);continue;};if (E.cells[D]) E.removeChild(E.cells[D]);}};FCKTableHandler.InsertCell=function(A,B){var C=null;var D=this.GetSelectedCells();if (D&&D.length) C=D[B?0:(D.length-1)];if (!C) return null;var E=FCK.EditorDocument.createElement('TD');if (FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(E);if (!B&&C.cellIndex==C.parentNode.cells.length-1) C.parentNode.appendChild(E);else C.parentNode.insertBefore(E,B?C:C.nextSibling);return E;};FCKTableHandler.DeleteCell=function(A){if (A.parentNode.cells.length==1){FCKTableHandler.DeleteRows(FCKTools.GetElementAscensor(A,'TR'));return;};A.parentNode.removeChild(A);};FCKTableHandler.DeleteCells=function(){var A=FCKTableHandler.GetSelectedCells();for (var i=A.length-1;i>=0;i--){FCKTableHandler.DeleteCell(A[i]);}};FCKTableHandler._MarkCells=function(A,B){for (var i=0;i<A.length;i++) A[i][B]=true;};FCKTableHandler._UnmarkCells=function(A,B){for (var i=0;i<A.length;i++){if (FCKBrowserInfo.IsIE) A[i].removeAttribute(B);else delete A[i][B];}};FCKTableHandler._ReplaceCellsByMarker=function(A,B,C){for (var i=0;i<A.length;i++){for (var j=0;j<A[i].length;j++){if (A[i][j][B]) A[i][j]=C;}}};FCKTableHandler._GetMarkerGeometry=function(A,B,C,D){var E=0;var F=0;var G=0;var H=0;for (var i=C;A[B][i]&&A[B][i][D];i++) E++;for (var i=C-1;A[B][i]&&A[B][i][D];i--){E++;G++;};for (var i=B;A[i]&&A[i][C]&&A[i][C][D];i++) F++;for (var i=B-1;A[i]&&A[i][C]&&A[i][C][D];i--){F++;H++;};return { 'width':E,'height':F,'x':G,'y':H };};FCKTableHandler.CheckIsSelectionRectangular=function(){var A=FCKTableHandler.GetSelectedCells();if (A.length<1) return false;this._MarkCells(A,'_CellSelected');var B=this._CreateTableMap(A[0].parentNode.parentNode);var C=A[0].parentNode.rowIndex;var D=this._GetCellIndexSpan(B,C,A[0]);var E=this._GetMarkerGeometry(B,C,D,'_CellSelected');var F=D-E.x;var G=C-E.y;if (E.width>=E.height){for (D=F;D<F+E.width;D++){C=G+(D-F) % E.height;if (!B[C]||!B[C][D]){this._UnmarkCells(A,'_CellSelected');return false;};var g=this._GetMarkerGeometry(B,C,D,'_CellSelected');if (g.width!=E.width||g.height!=E.height){this._UnmarkCells(A,'_CellSelected');return false;}}}else{for (C=G;C<G+E.height;C++){D=F+(C-G) % E.width;if (!B[C]||!B[C][D]){this._UnmarkCells(A,'_CellSelected');return false;};var g=this._GetMarkerGeometry(B,C,D,'_CellSelected');if (g.width!=E.width||g.height!=E.height){this._UnmarkCells(A,'_CellSelected');return false;}}};this._UnmarkCells(A,'_CellSelected');return true;};FCKTableHandler.MergeCells=function(){var A=this.GetSelectedCells();if (A.length<2) return;var B=A[0];var C=this._CreateTableMap(B.parentNode.parentNode);var D=B.parentNode.rowIndex;var E=this._GetCellIndexSpan(C,D,B);this._MarkCells(A,'_SelectedCells');var F=this._GetMarkerGeometry(C,D,E,'_SelectedCells');var G=E-F.x;var H=D-F.y;var I=B.ownerDocument.createDocumentFragment();for (var i=0;i<F.height;i++){var J=0;for (var j=0;j<F.width;j++){var K=C[H+i][G+j];while (K.childNodes.length>0){var L=K.removeChild(K.firstChild);if (L.nodeType!=1||(L.getAttribute('type',2)!='_moz'&&L.getAttribute('_moz_dirty')!=null)){I.appendChild(L);J++;}}};if (J>0) I.appendChild(B.ownerDocument.createElement('br'));};this._ReplaceCellsByMarker(C,'_SelectedCells',B);this._UnmarkCells(A,'_SelectedCells');this._InstallTableMap(C,B.parentNode.parentNode);B.appendChild(I);if (FCKBrowserInfo.IsGeckoLike&&(!B.firstChild)) FCKTools.AppendBogusBr(B);this._MoveCaretToCell(B,false);};FCKTableHandler.MergeRight=function(){var A=this.GetMergeRightTarget();if (A==null) return;var B=A.refCell;var C=A.tableMap;var D=A.nextCell;var E=FCK.EditorDocument.createDocumentFragment();while (D&&D.childNodes&&D.childNodes.length>0) E.appendChild(D.removeChild(D.firstChild));D.parentNode.removeChild(D);B.appendChild(E);this._MarkCells([D],'_Replace');this._ReplaceCellsByMarker(C,'_Replace',B);this._InstallTableMap(C,B.parentNode.parentNode);this._MoveCaretToCell(B,false);};FCKTableHandler.MergeDown=function(){var A=this.GetMergeDownTarget();if (A==null) return;var B=A.refCell;var C=A.tableMap;var D=A.nextCell;var E=B.ownerDocument.createDocumentFragment();while (D&&D.childNodes&&D.childNodes.length>0) E.appendChild(D.removeChild(D.firstChild));if (E.firstChild) E.insertBefore(D.ownerDocument.createElement('br'),E.firstChild);B.appendChild(E);this._MarkCells([D],'_Replace');this._ReplaceCellsByMarker(C,'_Replace',B);this._InstallTableMap(C,B.parentNode.parentNode);this._MoveCaretToCell(B,false);};FCKTableHandler.HorizontalSplitCell=function(){var A=FCKTableHandler.GetSelectedCells();if (A.length!=1) return;var B=A[0];var C=this._CreateTableMap(B.parentNode.parentNode);var D=B.parentNode.rowIndex;var E=FCKTableHandler._GetCellIndexSpan(C,D,B);var F=isNaN(B.colSpan)?1:B.colSpan;if (F>1){var G=Math.ceil(F/2);var H=B.ownerDocument.createElement('td');if (FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(H);var I=E+G;var J=E+F;var K=isNaN(B.rowSpan)?1:B.rowSpan;for (var r=D;r<D+K;r++){for (var i=I;i<J;i++) C[r][i]=H;}}else{var L=[];for (var i=0;i<C.length;i++){var M=C[i].slice(0,E);if (C[i].length<=E){L.push(M);continue;};if (C[i][E]==B){M.push(B);M.push(B.ownerDocument.createElement('td'));if (FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(M[M.length-1]);}else{M.push(C[i][E]);M.push(C[i][E]);};for (var j=E+1;j<C[i].length;j++) M.push(C[i][j]);L.push(M);};C=L;};this._InstallTableMap(C,B.parentNode.parentNode);};FCKTableHandler.VerticalSplitCell=function(){var A=FCKTableHandler.GetSelectedCells();if (A.length!=1) return;var B=A[0];var C=this._CreateTableMap(B.parentNode.parentNode);var D=FCKTableHandler._GetCellIndexSpan(C,B.parentNode.rowIndex,B);var E=B.rowSpan;var F=B.parentNode.rowIndex;if (isNaN(E)) E=1;if (E>1){B.rowSpan=Math.ceil(E/2);var G=F+Math.ceil(E/2);var H=null;for (var i=D+1;i<C[G].length;i++){if (C[G][i].parentNode.rowIndex==G){H=C[G][i];break;}};var I=FCK.EditorDocument.createElement('td');I.rowSpan=Math.floor(E/2);if (FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(I);B.parentNode.parentNode.rows[G].insertBefore(I,H);}else{var G=F+1;var K=FCK.EditorDocument.createElement('tr');B.parentNode.parentNode.insertBefore(K,B.parentNode.parentNode.rows[G]);for (var i=0;i<C[F].length;){var L=C[F][i].colSpan;if (isNaN(L)||L<1) L=1;if (i==D){i+=L;continue;};var M=C[F][i].rowSpan;if (isNaN(M)) M=1;C[F][i].rowSpan=M+1;i+=L;};var I=FCK.EditorDocument.createElement('td');if (FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(I);K.appendChild(I);}};FCKTableHandler._GetCellIndexSpan=function(A,B,C){if (A.length<B+1) return null;var D=A[B];for (var c=0;c<D.length;c++){if (D[c]==C) return c;};return null;};FCKTableHandler._GetCellLocation=function(A,B){for (var i=0;i<A.length;i++){for (var c=0;c<A[i].length;c++){if (A[i][c]==B) return [i,c];}};return null;};FCKTableHandler._GetColumnCells=function(A,B){var C=[];for (var r=0;r<A.length;r++){var D=A[r][B];if (D&&(C.length==0||C[C.length-1]!=D)) C[C.length]=D;};return C;};FCKTableHandler._CreateTableMap=function(A){var B=A.rows;var r=-1;var C=[];for (var i=0;i<B.length;i++){r++;if (!C[r]) C[r]=[];var c=-1;for (var j=0;j<B[i].cells.length;j++){var D=B[i].cells[j];c++;while (C[r][c]) c++;var E=isNaN(D.colSpan)?1:D.colSpan;var F=isNaN(D.rowSpan)?1:D.rowSpan;for (var G=0;G<F;G++){if (!C[r+G]) C[r+G]=[];for (var H=0;H<E;H++){C[r+G][c+H]=B[i].cells[j];}};c+=E-1;}};return C;};FCKTableHandler._InstallTableMap=function(A,B){while (B.rows.length>0){var C=B.rows[0];C.parentNode.removeChild(C);};for (var i=0;i<A.length;i++){for (var j=0;j<A[i].length;j++){var D=A[i][j];if (D.parentNode) D.parentNode.removeChild(D);D.colSpan=D.rowSpan=1;}};var E=0;for (var i=0;i<A.length;i++){for (var j=0;j<A[i].length;j++){var D=A[i][j];if (!D) continue;if (j>E) E=j;if (D._colScanned===true) continue;if (A[i][j-1]==D) D.colSpan++;if (A[i][j+1]!=D) D._colScanned=true;}};for (var i=0;i<=E;i++){for (var j=0;j<A.length;j++){if (!A[j]) continue;var D=A[j][i];if (!D||D._rowScanned===true) continue;if (A[j-1]&&A[j-1][i]==D) D.rowSpan++;if (!A[j+1]||A[j+1][i]!=D) D._rowScanned=true;}};for (var i=0;i<A.length;i++){for (var j=0;j<A[i].length;j++){var D=A[i][j];if (FCKBrowserInfo.IsIE){D.removeAttribute('_colScanned');D.removeAttribute('_rowScanned');}else{delete D._colScanned;delete D._rowScanned;}}};for (var i=0;i<A.length;i++){var I=B.ownerDocument.createElement('tr');for (var j=0;j<A[i].length;){var D=A[i][j];if (A[i-1]&&A[i-1][j]==D){j+=D.colSpan;continue;};I.appendChild(D);j+=D.colSpan;if (D.colSpan==1) D.removeAttribute('colspan');if (D.rowSpan==1) D.removeAttribute('rowspan');};B.appendChild(I);}};FCKTableHandler._MoveCaretToCell=function (A,B){var C=new FCKDomRange(FCK.EditorWindow);C.MoveToNodeContents(A);C.Collapse(B);C.Select();};FCKTableHandler.ClearRow=function(A){var B=A.cells;for (var i=0;i<B.length;i++){B[i].innerHTML='';if (FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(B[i]);}};FCKTableHandler.GetMergeRightTarget=function(){var A=this.GetSelectedCells();if (A.length!=1) return null;var B=A[0];var C=this._CreateTableMap(B.parentNode.parentNode);var D=B.parentNode.rowIndex;var E=this._GetCellIndexSpan(C,D,B);var F=E+(isNaN(B.colSpan)?1:B.colSpan);var G=C[D][F];if (!G) return null;this._MarkCells([B,G],'_SizeTest');var H=this._GetMarkerGeometry(C,D,E,'_SizeTest');var I=this._GetMarkerGeometry(C,D,F,'_SizeTest');this._UnmarkCells([B,G],'_SizeTest');if (H.height!=I.height||H.y!=I.y) return null;return { 'refCell':B,'nextCell':G,'tableMap':C };};FCKTableHandler.GetMergeDownTarget=function(){var A=this.GetSelectedCells();if (A.length!=1) return null;var B=A[0];var C=this._CreateTableMap(B.parentNode.parentNode);var D=B.parentNode.rowIndex;var E=this._GetCellIndexSpan(C,D,B);var F=D+(isNaN(B.rowSpan)?1:B.rowSpan);if (!C[F]) return null;var G=C[F][E];if (!G) return null;this._MarkCells([B,G],'_SizeTest');var H=this._GetMarkerGeometry(C,D,E,'_SizeTest');var I=this._GetMarkerGeometry(C,F,E,'_SizeTest');this._UnmarkCells([B,G],'_SizeTest');if (H.width!=I.width||H.x!=I.x) return null;return { 'refCell':B,'nextCell':G,'tableMap':C };};
+FCKTableHandler.GetSelectedCells=function(){var A=[];var B=FCK.EditorWindow.getSelection();if (B.rangeCount==1&&B.anchorNode.nodeType==3){var C=FCKTools.GetElementAscensor(B.anchorNode,'TD,TH');if (C) A[0]=C;return A;};for (var i=0;i<B.rangeCount;i++){var D=B.getRangeAt(i);var E;if (D.startContainer.tagName.Equals('TD','TH')) E=D.startContainer;else E=D.startContainer.childNodes[D.startOffset];if (E.tagName.Equals('TD','TH')) A[A.length]=E;};return A;};
+var FCKXml=function(){this.Error=false;};FCKXml.GetAttribute=function(A,B,C){var D=A.attributes.getNamedItem(B);return D?D.value:C;};FCKXml.TransformToObject=function(A){if (!A) return null;var B={};var C=A.attributes;for (var i=0;i<C.length;i++){var D=C[i];B[D.name]=D.value;};var E=A.childNodes;for (i=0;i<E.length;i++){var F=E[i];if (F.nodeType==1){var G='$'+F.nodeName;var H=B[G];if (!H) H=B[G]=[];H.push(this.TransformToObject(F));}};return B;}
+FCKXml.prototype={LoadUrl:function(A){this.Error=false;var B=this;var C=FCKTools.CreateXmlObject('XmlHttp');C.open("GET",A,false);C.send(null);if (C.status==200||C.status==304) this.DOMDocument=C.responseXML;else if (C.status==0&&C.readyState==4) this.DOMDocument=C.responseXML;else this.DOMDocument=null;if (this.DOMDocument==null||this.DOMDocument.firstChild==null){this.Error=true;if (window.confirm('Error loading "'+A+'"\r\nDo you want to see more info?')) alert('URL requested: "'+A+'"\r\nServer response:\r\nStatus: '+C.status+'\r\nResponse text:\r\n'+C.responseText);}},SelectNodes:function(A,B){if (this.Error) return [];var C=[];var D=this.DOMDocument.evaluate(A,B?B:this.DOMDocument,this.DOMDocument.createNSResolver(this.DOMDocument.documentElement),XPathResult.ORDERED_NODE_ITERATOR_TYPE,null);if (D){var E=D.iterateNext();while(E){C[C.length]=E;E=D.iterateNext();}};return C;},SelectSingleNode:function(A,B){if (this.Error) return null;var C=this.DOMDocument.evaluate(A,B?B:this.DOMDocument,this.DOMDocument.createNSResolver(this.DOMDocument.documentElement),9,null);if (C&&C.singleNodeValue) return C.singleNodeValue;else return null;}};
+var FCKNamedCommand=function(A){this.Name=A;};FCKNamedCommand.prototype.Execute=function(){FCK.ExecuteNamedCommand(this.Name);};FCKNamedCommand.prototype.GetState=function(){return FCK.GetNamedCommandState(this.Name);};
+var FCKStyleCommand=function(){};FCKStyleCommand.prototype={Name:'Style',Execute:function(A,B){FCKUndo.SaveUndoStep();if (B.Selected) FCK.Styles.RemoveStyle(B.Style);else FCK.Styles.ApplyStyle(B.Style);FCKUndo.SaveUndoStep();FCK.Focus();FCK.Events.FireEvent('OnSelectionChange');},GetState:function(){if (!FCK.EditorDocument) return -1;if (FCKSelection.GetType()=='Control'){var A=FCKSelection.GetSelectedElement();if (!A||!FCKStyles.CheckHasObjectStyle(A.nodeName.toLowerCase())) return -1;};return 0;}};
+var FCKDialogCommand=function(A,B,C,D,E,F,G){this.Name=A;this.Title=B;this.Url=C;this.Width=D;this.Height=E;this.GetStateFunction=F;this.GetStateParam=G;this.Resizable=false;};FCKDialogCommand.prototype.Execute=function(){FCKDialog.OpenDialog('FCKDialog_'+this.Name,this.Title,this.Url,this.Width,this.Height,null,null,this.Resizable);};FCKDialogCommand.prototype.GetState=function(){if (this.GetStateFunction) return this.GetStateFunction(this.GetStateParam);else return 0;};var FCKUndefinedCommand=function(){this.Name='Undefined';};FCKUndefinedCommand.prototype.Execute=function(){alert(FCKLang.NotImplemented);};FCKUndefinedCommand.prototype.GetState=function(){return 0;};var FCKFormatBlockCommand=function(){};FCKFormatBlockCommand.prototype={Name:'FormatBlock',Execute:FCKStyleCommand.prototype.Execute,GetState:function(){return FCK.EditorDocument?0:-1;}};var FCKFontNameCommand=function(){};FCKFontNameCommand.prototype={Name:'FontName',Execute:FCKStyleCommand.prototype.Execute,GetState:FCKFormatBlockCommand.prototype.GetState};var FCKFontSizeCommand=function(){};FCKFontSizeCommand.prototype={Name:'FontSize',Execute:FCKStyleCommand.prototype.Execute,GetState:FCKFormatBlockCommand.prototype.GetState};var FCKPreviewCommand=function(){this.Name='Preview';};FCKPreviewCommand.prototype.Execute=function(){FCK.Preview();};FCKPreviewCommand.prototype.GetState=function(){return 0;};var FCKSaveCommand=function(){this.Name='Save';};FCKSaveCommand.prototype.Execute=function(){var A=FCK.GetParentForm();if (typeof(A.onsubmit)=='function'){var B=A.onsubmit();if (B!=null&&B===false) return;};if (typeof(A.submit)=='function') A.submit();else A.submit.click();};FCKSaveCommand.prototype.GetState=function(){return 0;};var FCKNewPageCommand=function(){this.Name='NewPage';};FCKNewPageCommand.prototype.Execute=function(){FCKUndo.SaveUndoStep();FCK.SetData('');FCKUndo.Typing=true;FCK.Focus();};FCKNewPageCommand.prototype.GetState=function(){return 0;};var FCKSourceCommand=function(){this.Name='Source';};FCKSourceCommand.prototype.Execute=function(){if (FCKConfig.SourcePopup){var A=FCKConfig.ScreenWidth*0.65;var B=FCKConfig.ScreenHeight*0.65;FCKDialog.OpenDialog('FCKDialog_Source',FCKLang.Source,'dialog/fck_source.html',A,B,null,null,true);}else FCK.SwitchEditMode();};FCKSourceCommand.prototype.GetState=function(){return (FCK.EditMode==0?0:1);};var FCKUndoCommand=function(){this.Name='Undo';};FCKUndoCommand.prototype.Execute=function(){FCKUndo.Undo();};FCKUndoCommand.prototype.GetState=function(){return (FCKUndo.CheckUndoState()?0:-1);};var FCKRedoCommand=function(){this.Name='Redo';};FCKRedoCommand.prototype.Execute=function(){FCKUndo.Redo();};FCKRedoCommand.prototype.GetState=function(){return (FCKUndo.CheckRedoState()?0:-1);};var FCKPageBreakCommand=function(){this.Name='PageBreak';};FCKPageBreakCommand.prototype.Execute=function(){FCKUndo.SaveUndoStep();var e=FCK.EditorDocument.createElement('DIV');e.style.pageBreakAfter='always';e.innerHTML='<span style="DISPLAY:none">&nbsp;</span>';var A=FCKDocumentProcessor_CreateFakeImage('FCK__PageBreak',e);FCK.InsertElement(A);};FCKPageBreakCommand.prototype.GetState=function(){return 0;};var FCKUnlinkCommand=function(){this.Name='Unlink';};FCKUnlinkCommand.prototype.Execute=function(){FCKUndo.SaveUndoStep();if (FCKBrowserInfo.IsGeckoLike){var A=FCK.Selection.MoveToAncestorNode('A');if (A) FCKTools.RemoveOuterTags(A);return;};FCK.ExecuteNamedCommand(this.Name);};FCKUnlinkCommand.prototype.GetState=function(){var A=FCK.GetNamedCommandState(this.Name);if (A==0&&FCK.EditMode==0){var B=FCKSelection.MoveToAncestorNode('A');var C=(B&&B.name.length>0&&B.href.length==0);if (C) A=-1;};return A;};var FCKSelectAllCommand=function(){this.Name='SelectAll';};FCKSelectAllCommand.prototype.Execute=function(){if (FCK.EditMode==0){FCK.ExecuteNamedCommand('SelectAll');}else{var A=FCK.EditingArea.Textarea;if (FCKBrowserInfo.IsIE){A.createTextRange().execCommand('SelectAll');}else{A.selectionStart=0;A.selectionEnd=A.value.length;};A.focus();}};FCKSelectAllCommand.prototype.GetState=function(){return 0;};var FCKPasteCommand=function(){this.Name='Paste';};FCKPasteCommand.prototype={Execute:function(){if (FCKBrowserInfo.IsIE) FCK.Paste();else FCK.ExecuteNamedCommand('Paste');},GetState:function(){return FCK.GetNamedCommandState('Paste');}};var FCKRuleCommand=function(){this.Name='Rule';};FCKRuleCommand.prototype={Execute:function(){FCKUndo.SaveUndoStep();FCK.InsertElement('hr');},GetState:function(){return FCK.GetNamedCommandState('InsertHorizontalRule');}};var FCKCopyCommand=function(){this.Name='Copy';};FCKCopyCommand.prototype={Execute:function(){FCK.ExecuteNamedCommand(this.Name);},GetState:function(){return FCK.GetNamedCommandState('Cut');}};var FCKAnchorDeleteCommand=function(){this.Name='AnchorDelete';};FCKAnchorDeleteCommand.prototype={Execute:function(){if (FCK.Selection.GetType()=='Control'){FCK.Selection.Delete();}else{var A=FCK.Selection.GetSelectedElement();if (A){if (A.tagName=='IMG'&&A.getAttribute('_fckanchor')) oAnchor=FCK.GetRealElement(A);else A=null;};if (!A){oAnchor=FCK.Selection.MoveToAncestorNode('A');if (oAnchor) FCK.Selection.SelectNode(oAnchor);};if (oAnchor.href.length!=0){oAnchor.removeAttribute('name');if (FCKBrowserInfo.IsIE) oAnchor.className=oAnchor.className.replace(FCKRegexLib.FCK_Class,'');return;};if (A){A.parentNode.removeChild(A);return;};if (oAnchor.innerHTML.length==0){oAnchor.parentNode.removeChild(oAnchor);return;};FCKTools.RemoveOuterTags(oAnchor);};if (FCKBrowserInfo.IsGecko) FCK.Selection.Collapse(true);},GetState:function(){return FCK.GetNamedCommandState('Unlink');}};
+var FCKShowBlockCommand=function(A,B){this.Name=A;if (B!=undefined) this._SavedState=B;else this._SavedState=null;};FCKShowBlockCommand.prototype.Execute=function(){var A=this.GetState();if (A==-1) return;var B=FCK.EditorDocument.body;if (A==1) B.className=B.className.replace(/(^| )FCK__ShowBlocks/g,'');else B.className+=' FCK__ShowBlocks';FCK.Events.FireEvent('OnSelectionChange');};FCKShowBlockCommand.prototype.GetState=function(){if (FCK.EditMode!=0) return -1;try{if (/FCK__ShowBlocks(?:\s|$)/.test(FCK.EditorDocument.body.className)) return 1;}catch (e){};return 0;};FCKShowBlockCommand.prototype.SaveState=function(){this._SavedState=this.GetState();};FCKShowBlockCommand.prototype.RestoreState=function(){if (this._SavedState!=null&&this.GetState()!=this._SavedState) this.Execute();};
+var FCKSpellCheckCommand=function(){this.Name='SpellCheck';this.IsEnabled=(FCKConfig.SpellChecker=='SpellerPages');};FCKSpellCheckCommand.prototype.Execute=function(){FCKDialog.OpenDialog('FCKDialog_SpellCheck','Spell Check','dialog/fck_spellerpages.html',440,480);};FCKSpellCheckCommand.prototype.GetState=function(){return this.IsEnabled?0:-1;}
+var FCKTextColorCommand=function(A){this.Name=A=='ForeColor'?'TextColor':'BGColor';this.Type=A;var B;if (FCKBrowserInfo.IsIE) B=window;else if (FCK.ToolbarSet._IFrame) B=FCKTools.GetElementWindow(FCK.ToolbarSet._IFrame);else B=window.parent;this._Panel=new FCKPanel(B);this._Panel.AppendStyleSheet(FCKConfig.SkinPath+'fck_editor.css');this._Panel.MainNode.className='FCK_Panel';this._CreatePanelBody(this._Panel.Document,this._Panel.MainNode);FCKTools.DisableSelection(this._Panel.Document.body);};FCKTextColorCommand.prototype.Execute=function(A,B,C){this._Panel.Show(A,B,C);};FCKTextColorCommand.prototype.SetColor=function(A){var B=FCKStyles.GetStyle('_FCK_'+(this.Type=='ForeColor'?'Color':'BackColor'));if (!A||A.length==0) FCK.Styles.RemoveStyle(B);else{B.SetVariable('Color',A);FCKStyles.ApplyStyle(B);};FCK.Focus();FCK.Events.FireEvent('OnSelectionChange');};FCKTextColorCommand.prototype.GetState=function(){return 0;};function FCKTextColorCommand_OnMouseOver(){this.className='ColorSelected';};function FCKTextColorCommand_OnMouseOut(){this.className='ColorDeselected';};function FCKTextColorCommand_OnClick(A,B,C){this.className='ColorDeselected';B.SetColor(C);B._Panel.Hide();};function FCKTextColorCommand_AutoOnClick(A,B){this.className='ColorDeselected';B.SetColor('');B._Panel.Hide();};function FCKTextColorCommand_MoreOnClick(A,B){this.className='ColorDeselected';B._Panel.Hide();FCKDialog.OpenDialog('FCKDialog_Color',FCKLang.DlgColorTitle,'dialog/fck_colorselector.html',400,330,FCKTools.Hitch(B,'SetColor'));};FCKTextColorCommand.prototype._CreatePanelBody=function(A,B){function CreateSelectionDiv(){var C=A.createElement("DIV");C.className='ColorDeselected';FCKTools.AddEventListenerEx(C,'mouseover',FCKTextColorCommand_OnMouseOver);FCKTools.AddEventListenerEx(C,'mouseout',FCKTextColorCommand_OnMouseOut);return C;};var D=B.appendChild(A.createElement("TABLE"));D.className='ForceBaseFont';D.style.tableLayout='fixed';D.cellPadding=0;D.cellSpacing=0;D.border=0;D.width=150;var E=D.insertRow(-1).insertCell(-1);E.colSpan=8;var C=E.appendChild(CreateSelectionDiv());C.innerHTML='<table cellspacing="0" cellpadding="0" width="100%" border="0">\n			<tr>\n				<td><div class="ColorBoxBorder"><div class="ColorBox" style="background-color: #000000"></div></div></td>\n				<td nowrap width="100%" align="center">'+FCKLang.ColorAutomatic+'</td>\n			</tr>\n		</table>';FCKTools.AddEventListenerEx(C,'click',FCKTextColorCommand_AutoOnClick,this);if (FCKBrowserInfo.IsSafari) C.style.width='96%';var G=FCKConfig.FontColors.toString().split(',');var H=0;while (H<G.length){var I=D.insertRow(-1);for (var i=0;i<8&&H<G.length;i++,H++){var J=G[H].split('/');var K='#'+J[0];var L=J[1]||K;C=I.insertCell(-1).appendChild(CreateSelectionDiv());C.innerHTML='<div class="ColorBoxBorder"><div class="ColorBox" style="background-color: '+K+'"></div></div>';FCKTools.AddEventListenerEx(C,'click',FCKTextColorCommand_OnClick,[this,L]);}};if (FCKConfig.EnableMoreFontColors){E=D.insertRow(-1).insertCell(-1);E.colSpan=8;C=E.appendChild(CreateSelectionDiv());C.innerHTML='<table width="100%" cellpadding="0" cellspacing="0" border="0"><tr><td nowrap align="center">'+FCKLang.ColorMoreColors+'</td></tr></table>';FCKTools.AddEventListenerEx(C,'click',FCKTextColorCommand_MoreOnClick,this);};if (FCKBrowserInfo.IsSafari) C.style.width='96%';};
+var FCKPastePlainTextCommand=function(){this.Name='PasteText';};FCKPastePlainTextCommand.prototype.Execute=function(){FCK.PasteAsPlainText();};FCKPastePlainTextCommand.prototype.GetState=function(){return FCK.GetNamedCommandState('Paste');};
+var FCKPasteWordCommand=function(){this.Name='PasteWord';};FCKPasteWordCommand.prototype.Execute=function(){FCK.PasteFromWord();};FCKPasteWordCommand.prototype.GetState=function(){if (FCKConfig.ForcePasteAsPlainText) return -1;else return FCK.GetNamedCommandState('Paste');};
+var FCKTableCommand=function(A){this.Name=A;};FCKTableCommand.prototype.Execute=function(){FCKUndo.SaveUndoStep();if (!FCKBrowserInfo.IsGecko){switch (this.Name){case 'TableMergeRight':return FCKTableHandler.MergeRight();case 'TableMergeDown':return FCKTableHandler.MergeDown();}};switch (this.Name){case 'TableInsertRowAfter':return FCKTableHandler.InsertRow(false);case 'TableInsertRowBefore':return FCKTableHandler.InsertRow(true);case 'TableDeleteRows':return FCKTableHandler.DeleteRows();case 'TableInsertColumnAfter':return FCKTableHandler.InsertColumn(false);case 'TableInsertColumnBefore':return FCKTableHandler.InsertColumn(true);case 'TableDeleteColumns':return FCKTableHandler.DeleteColumns();case 'TableInsertCellAfter':return FCKTableHandler.InsertCell(null,false);case 'TableInsertCellBefore':return FCKTableHandler.InsertCell(null,true);case 'TableDeleteCells':return FCKTableHandler.DeleteCells();case 'TableMergeCells':return FCKTableHandler.MergeCells();case 'TableHorizontalSplitCell':return FCKTableHandler.HorizontalSplitCell();case 'TableVerticalSplitCell':return FCKTableHandler.VerticalSplitCell();case 'TableDelete':return FCKTableHandler.DeleteTable();default:return alert(FCKLang.UnknownCommand.replace(/%1/g,this.Name));}};FCKTableCommand.prototype.GetState=function(){if (FCK.EditorDocument!=null&&FCKSelection.HasAncestorNode('TABLE')){switch (this.Name){case 'TableHorizontalSplitCell':case 'TableVerticalSplitCell':if (FCKTableHandler.GetSelectedCells().length==1) return 0;else return -1;case 'TableMergeCells':if (FCKTableHandler.CheckIsSelectionRectangular()&&FCKTableHandler.GetSelectedCells().length>1) return 0;else return -1;case 'TableMergeRight':return FCKTableHandler.GetMergeRightTarget()?0:-1;case 'TableMergeDown':return FCKTableHandler.GetMergeDownTarget()?0:-1;default:return 0;}}else return -1;};
+var FCKFitWindow=function(){this.Name='FitWindow';};FCKFitWindow.prototype.Execute=function(){var A=window.frameElement;var B=A.style;var C=parent;var D=C.document.documentElement;var E=C.document.body;var F=E.style;var G;if (!this.IsMaximized){if(FCKBrowserInfo.IsIE) C.attachEvent('onresize',FCKFitWindow_Resize);else C.addEventListener('resize',FCKFitWindow_Resize,true);this._ScrollPos=FCKTools.GetScrollPosition(C);G=A;while((G=G.parentNode)){if (G.nodeType==1){G._fckSavedStyles=FCKTools.SaveStyles(G);G.style.zIndex=FCKConfig.FloatingPanelsZIndex-1;}};if (FCKBrowserInfo.IsIE){this.documentElementOverflow=D.style.overflow;D.style.overflow='hidden';F.overflow='hidden';}else{F.overflow='hidden';F.width='0px';F.height='0px';};this._EditorFrameStyles=FCKTools.SaveStyles(A);var H=FCKTools.GetViewPaneSize(C);B.position="absolute";B.zIndex=FCKConfig.FloatingPanelsZIndex-1;B.left="0px";B.top="0px";B.width=H.Width+"px";B.height=H.Height+"px";if (!FCKBrowserInfo.IsIE){B.borderRight=B.borderBottom="9999px solid white";B.backgroundColor="white";};C.scrollTo(0,0);var I=FCKTools.GetWindowPosition(C,A);if (I.x!=0) B.left=(-1*I.x)+"px";if (I.y!=0) B.top=(-1*I.y)+"px";this.IsMaximized=true;}else{if(FCKBrowserInfo.IsIE) C.detachEvent("onresize",FCKFitWindow_Resize);else C.removeEventListener("resize",FCKFitWindow_Resize,true);G=A;while((G=G.parentNode)){if (G._fckSavedStyles){FCKTools.RestoreStyles(G,G._fckSavedStyles);G._fckSavedStyles=null;}};if (FCKBrowserInfo.IsIE) D.style.overflow=this.documentElementOverflow;FCKTools.RestoreStyles(A,this._EditorFrameStyles);C.scrollTo(this._ScrollPos.X,this._ScrollPos.Y);this.IsMaximized=false;};FCKToolbarItems.GetItem('FitWindow').RefreshState();if (FCK.EditMode==0) FCK.EditingArea.MakeEditable();FCK.Focus();};FCKFitWindow.prototype.GetState=function(){if (FCKConfig.ToolbarLocation!='In') return -1;else return (this.IsMaximized?1:0);};function FCKFitWindow_Resize(){var A=FCKTools.GetViewPaneSize(parent);var B=window.frameElement.style;B.width=A.Width+'px';B.height=A.Height+'px';};
+var FCKListCommand=function(A,B){this.Name=A;this.TagName=B;};FCKListCommand.prototype={GetState:function(){if (FCK.EditMode!=0||!FCK.EditorWindow) return -1;var A=FCKSelection.GetBoundaryParentElement(true);var B=A;while (B){if (B.nodeName.IEquals(['ul','ol'])) break;B=B.parentNode;};if (B&&B.nodeName.IEquals(this.TagName)) return 1;else return 0;},Execute:function(){FCKUndo.SaveUndoStep();var A=FCK.EditorDocument;var B=new FCKDomRange(FCK.EditorWindow);B.MoveToSelection();var C=this.GetState();if (C==0){FCKDomTools.TrimNode(A.body);if (!A.body.firstChild){var D=A.createElement('p');A.body.appendChild(D);B.MoveToNodeContents(D);}};var E=B.CreateBookmark();var F=[];var G={};var H=new FCKDomRangeIterator(B);var I;H.ForceBrBreak=(C==0);var J=true;var K=null;while (J){while ((I=H.GetNextParagraph())){var L=new FCKElementPath(I);var M=null;var N=false;var O=L.BlockLimit;for (var i=L.Elements.length-1;i>=0;i--){var P=L.Elements[i];if (P.nodeName.IEquals(['ol','ul'])){if (O._FCK_ListGroupObject) O._FCK_ListGroupObject=null;var Q=P._FCK_ListGroupObject;if (Q) Q.contents.push(I);else{Q={ 'root':P,'contents':[I] };F.push(Q);FCKDomTools.SetElementMarker(G,P,'_FCK_ListGroupObject',Q);};N=true;break;}};if (N) continue;var R=O;if (R._FCK_ListGroupObject) R._FCK_ListGroupObject.contents.push(I);else{var Q={ 'root':R,'contents':[I] };FCKDomTools.SetElementMarker(G,R,'_FCK_ListGroupObject',Q);F.push(Q);}};if (FCKBrowserInfo.IsIE) J=false;else{if (K==null){K=[];var T=FCK.EditorWindow.getSelection();if (T&&F.length==0) K.push(T.getRangeAt(0));for (var i=1;T&&i<T.rangeCount;i++) K.push(T.getRangeAt(i));};if (K.length<1) J=false;else{var U=FCKW3CRange.CreateFromRange(A,K.shift());B._Range=U;B._UpdateElementInfo();if (B.StartNode.nodeName.IEquals('td')) B.SetStart(B.StartNode,1);if (B.EndNode.nodeName.IEquals('td')) B.SetEnd(B.EndNode,2);H=new FCKDomRangeIterator(B);H.ForceBrBreak=(C==0);}}};var W=[];while (F.length>0){var Q=F.shift();if (C==0){if (Q.root.nodeName.IEquals(['ul','ol'])) this._ChangeListType(Q,G,W);else this._CreateList(Q,W);}else if (C==1&&Q.root.nodeName.IEquals(['ul','ol'])) this._RemoveList(Q,G);};for (var i=0;i<W.length;i++){var M=W[i];var Z=false;var a=M;while (!Z){a=a.nextSibling;if (a&&a.nodeType==3&&a.nodeValue.search(/^[\n\r\t ]*$/)==0) continue;Z=true;};if (a&&a.nodeName.IEquals(this.TagName)){a.parentNode.removeChild(a);while (a.firstChild) M.appendChild(a.removeChild(a.firstChild));};Z=false;a=M;while (!Z){a=a.previousSibling;if (a&&a.nodeType==3&&a.nodeValue.search(/^[\n\r\t ]*$/)==0) continue;Z=true;};if (a&&a.nodeName.IEquals(this.TagName)){a.parentNode.removeChild(a);while (a.lastChild) M.insertBefore(a.removeChild(a.lastChild),M.firstChild);}};FCKDomTools.ClearAllMarkers(G);B.MoveToBookmark(E);B.Select();FCK.Focus();FCK.Events.FireEvent('OnSelectionChange');},_ChangeListType:function(A,B,C){var D=FCKDomTools.ListToArray(A.root,B);var E=[];for (var i=0;i<A.contents.length;i++){var F=A.contents[i];F=FCKTools.GetElementAscensor(F,'li');if (!F||F._FCK_ListItem_Processed) continue;E.push(F);FCKDomTools.SetElementMarker(B,F,'_FCK_ListItem_Processed',true);};var G=A.root.ownerDocument.createElement(this.TagName);for (var i=0;i<E.length;i++){var H=E[i]._FCK_ListArray_Index;D[H].parent=G;};var I=FCKDomTools.ArrayToList(D,B);for (var i=0;i<I.listNode.childNodes.length;i++){if (I.listNode.childNodes[i].nodeName.IEquals(this.TagName)) C.push(I.listNode.childNodes[i]);};A.root.parentNode.replaceChild(I.listNode,A.root);},_CreateList:function(A,B){var C=A.contents;var D=A.root.ownerDocument;var E=[];if (C.length==1&&C[0]==A.root){var F=D.createElement('div');while (C[0].firstChild) F.appendChild(C[0].removeChild(C[0].firstChild));C[0].appendChild(F);C[0]=F;};var G=A.contents[0].parentNode;for (var i=0;i<C.length;i++) G=FCKDomTools.GetCommonParents(G,C[i].parentNode).pop();for (var i=0;i<C.length;i++){var H=C[i];while (H.parentNode){if (H.parentNode==G){E.push(H);break;};H=H.parentNode;}};if (E.length<1) return;var I=E[E.length-1].nextSibling;var J=D.createElement(this.TagName);B.push(J);while (E.length){var K=E.shift();var L=D.createDocumentFragment();while (K.firstChild) L.appendChild(K.removeChild(K.firstChild));K.parentNode.removeChild(K);var M=D.createElement('li');M.appendChild(L);J.appendChild(M);};G.insertBefore(J,I);},_RemoveList:function(A,B){var C=FCKDomTools.ListToArray(A.root,B);var D=[];for (var i=0;i<A.contents.length;i++){var E=A.contents[i];E=FCKTools.GetElementAscensor(E,'li');if (!E||E._FCK_ListItem_Processed) continue;D.push(E);FCKDomTools.SetElementMarker(B,E,'_FCK_ListItem_Processed',true);};var F=null;for (var i=0;i<D.length;i++){var G=D[i]._FCK_ListArray_Index;C[G].indent=-1;F=G;};for (var i=F+1;i<C.length;i++){if (C[i].indent>C[i-1].indent+1){var H=C[i-1].indent+1-C[i].indent;var I=C[i].indent;while (C[i]&&C[i].indent>=I){C[i].indent+=H;i++;};i--;}};var J=FCKDomTools.ArrayToList(C,B);if (A.root.nextSibling==null||A.root.nextSibling.nodeName.IEquals('br')){if (J.listNode.lastChild.nodeName.IEquals('br')) J.listNode.removeChild(J.listNode.lastChild);};A.root.parentNode.replaceChild(J.listNode,A.root);}};
+var FCKJustifyCommand=function(A){this.AlignValue=A;var B=FCKConfig.ContentLangDirection.toLowerCase();this.IsDefaultAlign=(A=='left'&&B=='ltr')||(A=='right'&&B=='rtl');var C=this._CssClassName=(function(){var D=FCKConfig.JustifyClasses;if (D){switch (A){case 'left':return D[0];case 'center':return D[1];case 'right':return D[2];case 'justify':return D[3];}};return null;})();if (C&&C.length>0) this._CssClassRegex=new RegExp('(?:^|\\s+)'+C+'(?=$|\\s)');};FCKJustifyCommand._GetClassNameRegex=function(){var A=FCKJustifyCommand._ClassRegex;if (A!=undefined) return A;var B=[];var C=FCKConfig.JustifyClasses;if (C){for (var i=0;i<4;i++){var D=C[i];if (D&&D.length>0) B.push(D);}};if (B.length>0) A=new RegExp('(?:^|\\s+)(?:'+B.join('|')+')(?=$|\\s)');else A=null;return FCKJustifyCommand._ClassRegex=A;};FCKJustifyCommand.prototype={Execute:function(){FCKUndo.SaveUndoStep();var A=new FCKDomRange(FCK.EditorWindow);A.MoveToSelection();var B=this.GetState();if (B==-1) return;var C=A.CreateBookmark();var D=this._CssClassName;var E=new FCKDomRangeIterator(A);var F;while ((F=E.GetNextParagraph())){F.removeAttribute('align');if (D){var G=F.className.replace(FCKJustifyCommand._GetClassNameRegex(),'');if (B==0){if (G.length>0) G+=' ';F.className=G+D;}else if (G.length==0) FCKDomTools.RemoveAttribute(F,'class');}else{var H=F.style;if (B==0) H.textAlign=this.AlignValue;else{H.textAlign='';if (H.cssText.length==0) F.removeAttribute('style');}}};A.MoveToBookmark(C);A.Select();FCK.Focus();FCK.Events.FireEvent('OnSelectionChange');},GetState:function(){if (FCK.EditMode!=0||!FCK.EditorWindow) return -1;var A=new FCKElementPath(FCKSelection.GetBoundaryParentElement(true));var B=A.Block||A.BlockLimit;if (!B||B.nodeName.toLowerCase()=='body') return 0;var C;if (FCKBrowserInfo.IsIE) C=B.currentStyle.textAlign;else C=FCK.EditorWindow.getComputedStyle(B,'').getPropertyValue('text-align');C=C.replace(/(-moz-|-webkit-|start|auto)/i,'');if ((!C&&this.IsDefaultAlign)||C==this.AlignValue) return 1;return 0;}};
+var FCKIndentCommand=function(A,B){this.Name=A;this.Offset=B;this.IndentCSSProperty=FCKConfig.ContentLangDirection.IEquals('ltr')?'marginLeft':'marginRight';};FCKIndentCommand._InitIndentModeParameters=function(){if (FCKConfig.IndentClasses&&FCKConfig.IndentClasses.length>0){this._UseIndentClasses=true;this._IndentClassMap={};for (var i=0;i<FCKConfig.IndentClasses.length;i++) this._IndentClassMap[FCKConfig.IndentClasses[i]]=i+1;this._ClassNameRegex=new RegExp('(?:^|\\s+)('+FCKConfig.IndentClasses.join('|')+')(?=$|\\s)');}else this._UseIndentClasses=false;};FCKIndentCommand.prototype={Execute:function(){FCKUndo.SaveUndoStep();var A=new FCKDomRange(FCK.EditorWindow);A.MoveToSelection();var B=A.CreateBookmark();var C=FCKDomTools.GetCommonParentNode(A.StartNode||A.StartContainer,A.EndNode||A.EndContainer,['ul','ol']);if (C) this._IndentList(A,C);else this._IndentBlock(A);A.MoveToBookmark(B);A.Select();FCK.Focus();FCK.Events.FireEvent('OnSelectionChange');},GetState:function(){if (FCK.EditMode!=0||!FCK.EditorWindow) return -1;if (FCKIndentCommand._UseIndentClasses==undefined) FCKIndentCommand._InitIndentModeParameters();var A=FCKSelection.GetBoundaryParentElement(true);var B=FCKSelection.GetBoundaryParentElement(false);var C=FCKDomTools.GetCommonParentNode(A,B,['ul','ol']);if (C){if (this.Name.IEquals('outdent')) return 0;var D=FCKTools.GetElementAscensor(A,'li');if (!D||!D.previousSibling) return -1;return 0;};if (!FCKIndentCommand._UseIndentClasses&&this.Name.IEquals('indent')) return 0;var E=new FCKElementPath(A);var F=E.Block||E.BlockLimit;if (!F) return -1;if (FCKIndentCommand._UseIndentClasses){var G=F.className.match(FCKIndentCommand._ClassNameRegex);var H=0;if (G!=null){G=G[1];H=FCKIndentCommand._IndentClassMap[G];};if ((this.Name=='outdent'&&H==0)||(this.Name=='indent'&&H==FCKConfig.IndentClasses.length)) return -1;return 0;}else{var I=parseInt(F.style[this.IndentCSSProperty],10);if (isNaN(I)) I=0;if (I<=0) return -1;return 0;}},_IndentBlock:function(A){var B=new FCKDomRangeIterator(A);A.Expand('block_contents');var C=FCKDomTools.GetCommonParents(A.StartContainer,A.EndContainer);var D=C[C.length-1];var E;while ((E=B.GetNextParagraph())){if (!(E==D||E.parentNode==D)) continue;if (FCKIndentCommand._UseIndentClasses){var F=E.className.match(FCKIndentCommand._ClassNameRegex);var G=0;if (F!=null){F=F[1];G=FCKIndentCommand._IndentClassMap[F];};if (this.Name.IEquals('outdent')) G--;else if (this.Name.IEquals('indent')) G++;G=Math.min(G,FCKConfig.IndentClasses.length);G=Math.max(G,0);var H=E.className.replace(FCKIndentCommand._ClassNameRegex,'');if (G<1) E.className=H;else E.className=(H.length>0?H+' ':'')+FCKConfig.IndentClasses[G-1];}else{var I=parseInt(E.style[this.IndentCSSProperty],10);if (isNaN(I)) I=0;I+=this.Offset;I=Math.max(I,0);I=Math.ceil(I/this.Offset)*this.Offset;E.style[this.IndentCSSProperty]=I?I+FCKConfig.IndentUnit:'';if (E.getAttribute('style')=='') E.removeAttribute('style');}}},_IndentList:function(A,B){var C=A.StartContainer;var D=A.EndContainer;while (C&&C.parentNode!=B) C=C.parentNode;while (D&&D.parentNode!=B) D=D.parentNode;if (!C||!D) return;var E=C;var F=[];var G=false;while (G==false){if (E==D) G=true;F.push(E);E=E.nextSibling;};if (F.length<1) return;var H=FCKDomTools.GetParents(B);for (var i=0;i<H.length;i++){if (H[i].nodeName.IEquals(['ul','ol'])){B=H[i];break;}};var I=this.Name.IEquals('indent')?1:-1;var J=F[0];var K=F[F.length-1];var L={};var M=FCKDomTools.ListToArray(B,L);var N=M[K._FCK_ListArray_Index].indent;for (var i=J._FCK_ListArray_Index;i<=K._FCK_ListArray_Index;i++) M[i].indent+=I;for (var i=K._FCK_ListArray_Index+1;i<M.length&&M[i].indent>N;i++) M[i].indent+=I;var O=FCKDomTools.ArrayToList(M);if (O) B.parentNode.replaceChild(O.listNode,B);FCKDomTools.ClearAllMarkers(L);}};
+var FCKBlockQuoteCommand=function(){};FCKBlockQuoteCommand.prototype={Execute:function(){FCKUndo.SaveUndoStep();var A=this.GetState();var B=new FCKDomRange(FCK.EditorWindow);B.MoveToSelection();var C=B.CreateBookmark();var D=new FCKDomRangeIterator(B);var E;if (A==0){D.EnforceRealBlocks=true;var F=[];while ((E=D.GetNextParagraph())) F.push(E);var G=F[0].parentNode;var H=[];for (var i=0;i<F.length;i++){E=F[i];G=FCKDomTools.GetCommonParents(E.parentNode,G).pop();};var I=null;while (F.length>0){E=F.shift();while (E.parentNode!=G) E=E.parentNode;if (E!=I) H.push(E);I=E;};while (H.length>0){E=H.shift();if (E.nodeName.IEquals('blockquote')){var J=E.ownerDocument.createDocumentFragment();while (E.firstChild){J.appendChild(E.removeChild(E.firstChild));F.push(J.lastChild);};E.parentNode.replaceChild(J,E);}else F.push(E);};var K=B.Window.document.createElement('blockquote');G.insertBefore(K,F[0]);while (F.length>0){E=F.shift();K.appendChild(E);}}else if (A==1){var L=[];while ((E=D.GetNextParagraph())){var M=null;var N=null;while (E.parentNode){if (E.parentNode.nodeName.IEquals('blockquote')){M=E.parentNode;N=E;break;};E=E.parentNode;};if (M&&N) L.push(N);};var O=[];while (L.length>0){var P=L.shift();var K=P.parentNode;if (P==P.parentNode.firstChild){K.parentNode.insertBefore(K.removeChild(P),K);if (!K.firstChild) K.parentNode.removeChild(K);}else if (P==P.parentNode.lastChild){K.parentNode.insertBefore(K.removeChild(P),K.nextSibling);if (!K.firstChild) K.parentNode.removeChild(K);}else FCKDomTools.BreakParent(P,P.parentNode,B);O.push(P);};if (FCKConfig.EnterMode.IEquals('br')){while (O.length){var P=O.shift();var S=true;if (P.nodeName.IEquals('div')){var J=P.ownerDocument.createDocumentFragment();var U=S&&P.previousSibling&&!FCKListsLib.BlockBoundaries[P.previousSibling.nodeName.toLowerCase()];if (S&&U) J.appendChild(P.ownerDocument.createElement('br'));var W=P.nextSibling&&!FCKListsLib.BlockBoundaries[P.nextSibling.nodeName.toLowerCase()];while (P.firstChild) J.appendChild(P.removeChild(P.firstChild));if (W) J.appendChild(P.ownerDocument.createElement('br'));P.parentNode.replaceChild(J,P);S=false;}}}};B.MoveToBookmark(C);B.Select();FCK.Focus();FCK.Events.FireEvent('OnSelectionChange');},GetState:function(){if (FCK.EditMode!=0||!FCK.EditorWindow) return -1;var A=new FCKElementPath(FCKSelection.GetBoundaryParentElement(true));var B=A.Block||A.BlockLimit;if (!B||B.nodeName.toLowerCase()=='body') return 0;for (var i=0;i<A.Elements.length;i++){if (A.Elements[i].nodeName.IEquals('blockquote')) return 1;};return 0;}};
+var FCKCoreStyleCommand=function(A){this.Name='CoreStyle';this.StyleName='_FCK_'+A;this.IsActive=false;FCKStyles.AttachStyleStateChange(this.StyleName,this._OnStyleStateChange,this);};FCKCoreStyleCommand.prototype={Execute:function(){FCKUndo.SaveUndoStep();if (this.IsActive) FCKStyles.RemoveStyle(this.StyleName);else FCKStyles.ApplyStyle(this.StyleName);FCK.Focus();FCK.Events.FireEvent('OnSelectionChange');},GetState:function(){return this.IsActive?1:0;},_OnStyleStateChange:function(A,B){this.IsActive=B;}};
+var FCKRemoveFormatCommand=function(){this.Name='RemoveFormat';};FCKRemoveFormatCommand.prototype={Execute:function(){FCKStyles.RemoveAll();FCK.Focus();FCK.Events.FireEvent('OnSelectionChange');},GetState:function(){return FCK.EditorWindow?0:-1;}};
+var FCKCommands=FCK.Commands={};FCKCommands.LoadedCommands={};FCKCommands.RegisterCommand=function(A,B){this.LoadedCommands[A]=B;};FCKCommands.GetCommand=function(A){var B=FCKCommands.LoadedCommands[A];if (B) return B;switch (A){case 'Bold':case 'Italic':case 'Underline':case 'StrikeThrough':case 'Subscript':case 'Superscript':B=new FCKCoreStyleCommand(A);break;case 'RemoveFormat':B=new FCKRemoveFormatCommand();break;case 'DocProps':B=new FCKDialogCommand('DocProps',FCKLang.DocProps,'dialog/fck_docprops.html',400,390,FCKCommands.GetFullPageState);break;case 'Templates':B=new FCKDialogCommand('Templates',FCKLang.DlgTemplatesTitle,'dialog/fck_template.html',380,450);break;case 'Link':B=new FCKDialogCommand('Link',FCKLang.DlgLnkWindowTitle,'dialog/fck_link.html',400,330);break;case 'Unlink':B=new FCKUnlinkCommand();break;case 'Anchor':B=new FCKDialogCommand('Anchor',FCKLang.DlgAnchorTitle,'dialog/fck_anchor.html',370,170);break;case 'AnchorDelete':B=new FCKAnchorDeleteCommand();break;case 'BulletedList':B=new FCKDialogCommand('BulletedList',FCKLang.BulletedListProp,'dialog/fck_listprop.html?UL',370,170);break;case 'NumberedList':B=new FCKDialogCommand('NumberedList',FCKLang.NumberedListProp,'dialog/fck_listprop.html?OL',370,170);break;case 'About':B=new FCKDialogCommand('About',FCKLang.About,'dialog/fck_about.html',400,330);break;case 'Find':B=new FCKDialogCommand('Find',FCKLang.DlgFindAndReplaceTitle,'dialog/fck_replace.html',340,250);break;case 'Replace':B=new FCKDialogCommand('Replace',FCKLang.DlgFindAndReplaceTitle,'dialog/fck_replace.html',340,250);break;case 'Image':B=new FCKDialogCommand('Image',FCKLang.DlgImgTitle,'dialog/fck_image.html',450,400);break;case 'Flash':B=new FCKDialogCommand('Flash',FCKLang.DlgFlashTitle,'dialog/fck_flash.html',450,400);break;case 'SpecialChar':B=new FCKDialogCommand('SpecialChar',FCKLang.DlgSpecialCharTitle,'dialog/fck_specialchar.html',400,320);break;case 'Smiley':B=new FCKDialogCommand('Smiley',FCKLang.DlgSmileyTitle,'dialog/fck_smiley.html',FCKConfig.SmileyWindowWidth,FCKConfig.SmileyWindowHeight);break;case 'Table':B=new FCKDialogCommand('Table',FCKLang.DlgTableTitle,'dialog/fck_table.html',450,250);break;case 'TableProp':B=new FCKDialogCommand('Table',FCKLang.DlgTableTitle,'dialog/fck_table.html?Parent',400,250);break;case 'TableCellProp':B=new FCKDialogCommand('TableCell',FCKLang.DlgCellTitle,'dialog/fck_tablecell.html',550,250);break;case 'Style':B=new FCKStyleCommand();break;case 'FontName':B=new FCKFontNameCommand();break;case 'FontSize':B=new FCKFontSizeCommand();break;case 'FontFormat':B=new FCKFormatBlockCommand();break;case 'Source':B=new FCKSourceCommand();break;case 'Preview':B=new FCKPreviewCommand();break;case 'Save':B=new FCKSaveCommand();break;case 'NewPage':B=new FCKNewPageCommand();break;case 'PageBreak':B=new FCKPageBreakCommand();break;case 'Rule':B=new FCKRuleCommand();break;case 'TextColor':B=new FCKTextColorCommand('ForeColor');break;case 'BGColor':B=new FCKTextColorCommand('BackColor');break;case 'Paste':B=new FCKPasteCommand();break;case 'PasteText':B=new FCKPastePlainTextCommand();break;case 'PasteWord':B=new FCKPasteWordCommand();break;case 'JustifyLeft':B=new FCKJustifyCommand('left');break;case 'JustifyCenter':B=new FCKJustifyCommand('center');break;case 'JustifyRight':B=new FCKJustifyCommand('right');break;case 'JustifyFull':B=new FCKJustifyCommand('justify');break;case 'Indent':B=new FCKIndentCommand('indent',FCKConfig.IndentLength);break;case 'Outdent':B=new FCKIndentCommand('outdent',FCKConfig.IndentLength*-1);break;case 'Blockquote':B=new FCKBlockQuoteCommand();break;case 'TableInsertRowAfter':B=new FCKTableCommand('TableInsertRowAfter');break;case 'TableInsertRowBefore':B=new FCKTableCommand('TableInsertRowBefore');break;case 'TableDeleteRows':B=new FCKTableCommand('TableDeleteRows');break;case 'TableInsertColumnAfter':B=new FCKTableCommand('TableInsertColumnAfter');break;case 'TableInsertColumnBefore':B=new FCKTableCommand('TableInsertColumnBefore');break;case 'TableDeleteColumns':B=new FCKTableCommand('TableDeleteColumns');break;case 'TableInsertCellAfter':B=new FCKTableCommand('TableInsertCellAfter');break;case 'TableInsertCellBefore':B=new FCKTableCommand('TableInsertCellBefore');break;case 'TableDeleteCells':B=new FCKTableCommand('TableDeleteCells');break;case 'TableMergeCells':B=new FCKTableCommand('TableMergeCells');break;case 'TableMergeRight':B=new FCKTableCommand('TableMergeRight');break;case 'TableMergeDown':B=new FCKTableCommand('TableMergeDown');break;case 'TableHorizontalSplitCell':B=new FCKTableCommand('TableHorizontalSplitCell');break;case 'TableVerticalSplitCell':B=new FCKTableCommand('TableVerticalSplitCell');break;case 'TableDelete':B=new FCKTableCommand('TableDelete');break;case 'Form':B=new FCKDialogCommand('Form',FCKLang.Form,'dialog/fck_form.html',380,230);break;case 'Checkbox':B=new FCKDialogCommand('Checkbox',FCKLang.Checkbox,'dialog/fck_checkbox.html',380,230);break;case 'Radio':B=new FCKDialogCommand('Radio',FCKLang.RadioButton,'dialog/fck_radiobutton.html',380,230);break;case 'TextField':B=new FCKDialogCommand('TextField',FCKLang.TextField,'dialog/fck_textfield.html',380,230);break;case 'Textarea':B=new FCKDialogCommand('Textarea',FCKLang.Textarea,'dialog/fck_textarea.html',380,230);break;case 'HiddenField':B=new FCKDialogCommand('HiddenField',FCKLang.HiddenField,'dialog/fck_hiddenfield.html',380,230);break;case 'Button':B=new FCKDialogCommand('Button',FCKLang.Button,'dialog/fck_button.html',380,230);break;case 'Select':B=new FCKDialogCommand('Select',FCKLang.SelectionField,'dialog/fck_select.html',400,380);break;case 'ImageButton':B=new FCKDialogCommand('ImageButton',FCKLang.ImageButton,'dialog/fck_image.html?ImageButton',450,400);break;case 'SpellCheck':B=new FCKSpellCheckCommand();break;case 'FitWindow':B=new FCKFitWindow();break;case 'Undo':B=new FCKUndoCommand();break;case 'Redo':B=new FCKRedoCommand();break;case 'Copy':B=new FCKCopyCommand();break;case 'SelectAll':B=new FCKSelectAllCommand();break;case 'InsertOrderedList':B=new FCKListCommand('insertorderedlist','ol');break;case 'InsertUnorderedList':B=new FCKListCommand('insertunorderedlist','ul');break;case 'ShowBlocks':B=new FCKShowBlockCommand('ShowBlocks',FCKConfig.StartupShowBlocks?1:0);break;case 'Undefined':B=new FCKUndefinedCommand();break;default:if (FCKRegexLib.NamedCommands.test(A)) B=new FCKNamedCommand(A);else{alert(FCKLang.UnknownCommand.replace(/%1/g,A));return null;}};FCKCommands.LoadedCommands[A]=B;return B;};FCKCommands.GetFullPageState=function(){return FCKConfig.FullPage?0:-1;};FCKCommands.GetBooleanState=function(A){return A?-1:0;};
+var FCKPanel=function(A){this.IsRTL=(FCKLang.Dir=='rtl');this.IsContextMenu=false;this._LockCounter=0;this._Window=A||window;var B;if (FCKBrowserInfo.IsIE){this._Popup=this._Window.createPopup();B=this.Document=this._Popup.document;FCK.IECleanup.AddItem(this,FCKPanel_Cleanup);}else{var C=this._IFrame=this._Window.document.createElement('iframe');C.src='javascript:void(0)';C.allowTransparency=true;C.frameBorder='0';C.scrolling='no';C.width=C.height=0;FCKDomTools.SetElementStyles(C,{position:'absolute',zIndex:FCKConfig.FloatingPanelsZIndex});if (this._Window==window.parent&&window.frameElement){var D=null;if (FCKBrowserInfo.IsGecko&&FCK&&FCK.EditorDocument) D=[FCK.EditorDocument.body.scrollLeft,FCK.EditorDocument.body.scrollTop];window.frameElement.parentNode.insertBefore(C,window.frameElement);if (D){var E=function(){FCK.EditorDocument.body.scrollLeft=D[0];FCK.EditorDocument.body.scrollTop=D[1];};setTimeout(E,500);}}else this._Window.document.body.appendChild(C);var F=C.contentWindow;B=this.Document=F.document;var G='';if (FCKBrowserInfo.IsSafari) G='<base href="'+window.document.location+'">';B.open();B.write('<html><head>'+G+'<\/head><body style="margin:0px;padding:0px;"><\/body><\/html>');B.close();FCKTools.AddEventListenerEx(F,'focus',FCKPanel_Window_OnFocus,this);FCKTools.AddEventListenerEx(F,'blur',FCKPanel_Window_OnBlur,this);};B.dir=FCKLang.Dir;FCKTools.AddEventListener(B,'contextmenu',FCKTools.CancelEvent);this.MainNode=B.body.appendChild(B.createElement('DIV'));this.MainNode.style.cssFloat=this.IsRTL?'right':'left';};FCKPanel.prototype.AppendStyleSheet=function(A){FCKTools.AppendStyleSheet(this.Document,A);};FCKPanel.prototype.Preload=function(x,y,A){if (this._Popup) this._Popup.show(x,y,0,0,A);};FCKPanel.prototype.Show=function(x,y,A,B,C){var D;var E=this.MainNode;if (this._Popup){this._Popup.show(x,y,0,0,A);FCKDomTools.SetElementStyles(E,{B:B?B+'px':'',C:C?C+'px':''});D=E.offsetWidth;if (this.IsRTL){if (this.IsContextMenu) x=x-D+1;else if (A) x=(x*-1)+A.offsetWidth-D;};this._Popup.show(x,y,D,E.offsetHeight,A);if (this.OnHide){if (this._Timer) CheckPopupOnHide.call(this,true);this._Timer=FCKTools.SetInterval(CheckPopupOnHide,100,this);}}else{if (typeof(FCK.ToolbarSet.CurrentInstance.FocusManager)!='undefined') FCK.ToolbarSet.CurrentInstance.FocusManager.Lock();if (this.ParentPanel) this.ParentPanel.Lock();FCKDomTools.SetElementStyles(E,{B:B?B+'px':'',C:C?C+'px':''});D=E.offsetWidth;if (!B)	this._IFrame.width=1;if (!C)	this._IFrame.height=1;D=E.offsetWidth||E.firstChild.offsetWidth;var F=FCKTools.GetElementPosition(A.nodeType==9?(FCKTools.IsStrictMode(A)?A.documentElement:A.body):A,this._Window);if (this.IsRTL&&!this.IsContextMenu) x=(x*-1);x+=F.X;y+=F.Y;if (this.IsRTL){if (this.IsContextMenu) x=x-D+1;else if (A) x=x+A.offsetWidth-D;}else{var G=FCKTools.GetViewPaneSize(this._Window);var H=FCKTools.GetScrollPosition(this._Window);var I=G.Height+H.Y;var J=G.Width+H.X;if ((x+D)>J) x-=x+D-J;if ((y+E.offsetHeight)>I) y-=y+E.offsetHeight-I;};if (x<0) x=0;FCKDomTools.SetElementStyles(this._IFrame,{left:x+'px',top:y+'px'});var K=D;var L=E.offsetHeight;this._IFrame.width=K;this._IFrame.height=L;this._IFrame.contentWindow.focus();};this._IsOpened=true;FCKTools.RunFunction(this.OnShow,this);};FCKPanel.prototype.Hide=function(A){if (this._Popup) this._Popup.hide();else{if (!this._IsOpened) return;if (typeof(FCKFocusManager)!='undefined') FCKFocusManager.Unlock();this._IFrame.width=this._IFrame.height=0;this._IsOpened=false;if (this.ParentPanel) this.ParentPanel.Unlock();if (!A) FCKTools.RunFunction(this.OnHide,this);}};FCKPanel.prototype.CheckIsOpened=function(){if (this._Popup) return this._Popup.isOpen;else return this._IsOpened;};FCKPanel.prototype.CreateChildPanel=function(){var A=this._Popup?FCKTools.GetDocumentWindow(this.Document):this._Window;var B=new FCKPanel(A);B.ParentPanel=this;return B;};FCKPanel.prototype.Lock=function(){this._LockCounter++;};FCKPanel.prototype.Unlock=function(){if (--this._LockCounter==0&&!this.HasFocus) this.Hide();};function FCKPanel_Window_OnFocus(e,A){A.HasFocus=true;};function FCKPanel_Window_OnBlur(e,A){A.HasFocus=false;if (A._LockCounter==0) FCKTools.RunFunction(A.Hide,A);};function CheckPopupOnHide(A){if (A||!this._Popup.isOpen){window.clearInterval(this._Timer);this._Timer=null;FCKTools.RunFunction(this.OnHide,this);}};function FCKPanel_Cleanup(){this._Popup=null;this._Window=null;this.Document=null;this.MainNode=null;};
+var FCKIcon=function(A){var B=A?typeof(A):'undefined';switch (B){case 'number':this.Path=FCKConfig.SkinPath+'fck_strip.gif';this.Size=16;this.Position=A;break;case 'undefined':this.Path=FCK_SPACER_PATH;break;case 'string':this.Path=A;break;default:this.Path=A[0];this.Size=A[1];this.Position=A[2];}};FCKIcon.prototype.CreateIconElement=function(A){var B,eIconImage;if (this.Position){var C='-'+((this.Position-1)*this.Size)+'px';if (FCKBrowserInfo.IsIE){B=A.createElement('DIV');eIconImage=B.appendChild(A.createElement('IMG'));eIconImage.src=this.Path;eIconImage.style.top=C;}else{B=A.createElement('IMG');B.src=FCK_SPACER_PATH;B.style.backgroundPosition='0px '+C;B.style.backgroundImage='url("'+this.Path+'")';}}else{if (FCKBrowserInfo.IsIE){B=A.createElement('DIV');eIconImage=B.appendChild(A.createElement('IMG'));eIconImage.src=this.Path?this.Path:FCK_SPACER_PATH;}else{B=A.createElement('IMG');B.src=this.Path?this.Path:FCK_SPACER_PATH;}};B.className='TB_Button_Image';return B;}
+var FCKToolbarButtonUI=function(A,B,C,D,E,F){this.Name=A;this.Label=B||A;this.Tooltip=C||this.Label;this.Style=E||0;this.State=F||0;this.Icon=new FCKIcon(D);if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKToolbarButtonUI_Cleanup);};FCKToolbarButtonUI.prototype._CreatePaddingElement=function(A){var B=A.createElement('IMG');B.className='TB_Button_Padding';B.src=FCK_SPACER_PATH;return B;};FCKToolbarButtonUI.prototype.Create=function(A){var B=FCKTools.GetElementDocument(A);var C=this.MainElement=B.createElement('DIV');C.title=this.Tooltip;if (FCKBrowserInfo.IsGecko) C.onmousedown=FCKTools.CancelEvent;FCKTools.AddEventListenerEx(C,'mouseover',FCKToolbarButtonUI_OnMouseOver,this);FCKTools.AddEventListenerEx(C,'mouseout',FCKToolbarButtonUI_OnMouseOut,this);FCKTools.AddEventListenerEx(C,'click',FCKToolbarButtonUI_OnClick,this);this.ChangeState(this.State,true);if (this.Style==0&&!this.ShowArrow){C.appendChild(this.Icon.CreateIconElement(B));}else{var D=C.appendChild(B.createElement('TABLE'));D.cellPadding=0;D.cellSpacing=0;var E=D.insertRow(-1);var F=E.insertCell(-1);if (this.Style==0||this.Style==2) F.appendChild(this.Icon.CreateIconElement(B));else F.appendChild(this._CreatePaddingElement(B));if (this.Style==1||this.Style==2){F=E.insertCell(-1);F.className='TB_Button_Text';F.noWrap=true;F.appendChild(B.createTextNode(this.Label));};if (this.ShowArrow){if (this.Style!=0){E.insertCell(-1).appendChild(this._CreatePaddingElement(B));};F=E.insertCell(-1);var G=F.appendChild(B.createElement('IMG'));G.src=FCKConfig.SkinPath+'images/toolbar.buttonarrow.gif';G.width=5;G.height=3;};F=E.insertCell(-1);F.appendChild(this._CreatePaddingElement(B));};A.appendChild(C);};FCKToolbarButtonUI.prototype.ChangeState=function(A,B){if (!B&&this.State==A) return;var e=this.MainElement;switch (parseInt(A,10)){case 0:e.className='TB_Button_Off';break;case 1:e.className='TB_Button_On';break;case -1:e.className='TB_Button_Disabled';break;};this.State=A;};function FCKToolbarButtonUI_OnMouseOver(A,B){if (B.State==0) this.className='TB_Button_Off_Over';else if (B.State==1) this.className='TB_Button_On_Over';};function FCKToolbarButtonUI_OnMouseOut(A,B){if (B.State==0) this.className='TB_Button_Off';else if (B.State==1) this.className='TB_Button_On';};function FCKToolbarButtonUI_OnClick(A,B){if (B.OnClick&&B.State!=-1) B.OnClick(B);};function FCKToolbarButtonUI_Cleanup(){this.MainElement=null;};
+var FCKToolbarButton=function(A,B,C,D,E,F,G){this.CommandName=A;this.Label=B;this.Tooltip=C;this.Style=D;this.SourceView=E?true:false;this.ContextSensitive=F?true:false;if (G==null) this.IconPath=FCKConfig.SkinPath+'toolbar/'+A.toLowerCase()+'.gif';else if (typeof(G)=='number') this.IconPath=[FCKConfig.SkinPath+'fck_strip.gif',16,G];else this.IconPath=G;};FCKToolbarButton.prototype.Create=function(A){this._UIButton=new FCKToolbarButtonUI(this.CommandName,this.Label,this.Tooltip,this.IconPath,this.Style);this._UIButton.OnClick=this.Click;this._UIButton._ToolbarButton=this;this._UIButton.Create(A);};FCKToolbarButton.prototype.RefreshState=function(){var A=FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(this.CommandName).GetState();if (A==this._UIButton.State) return;this._UIButton.ChangeState(A);};FCKToolbarButton.prototype.Click=function(){var A=this._ToolbarButton||this;FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(A.CommandName).Execute();};FCKToolbarButton.prototype.Enable=function(){this.RefreshState();};FCKToolbarButton.prototype.Disable=function(){this._UIButton.ChangeState(-1);}
+var FCKSpecialCombo=function(A,B,C,D,E){this.FieldWidth=B||100;this.PanelWidth=C||150;this.PanelMaxHeight=D||150;this.Label='&nbsp;';this.Caption=A;this.Tooltip=A;this.Style=2;this.Enabled=true;this.Items={};this._Panel=new FCKPanel(E||window);this._Panel.AppendStyleSheet(FCKConfig.SkinPath+'fck_editor.css');this._PanelBox=this._Panel.MainNode.appendChild(this._Panel.Document.createElement('DIV'));this._PanelBox.className='SC_Panel';this._PanelBox.style.width=this.PanelWidth+'px';this._PanelBox.innerHTML='<table cellpadding="0" cellspacing="0" width="100%" style="TABLE-LAYOUT: fixed"><tr><td nowrap></td></tr></table>';this._ItemsHolderEl=this._PanelBox.getElementsByTagName('TD')[0];if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKSpecialCombo_Cleanup);};function FCKSpecialCombo_ItemOnMouseOver(){this.className+=' SC_ItemOver';};function FCKSpecialCombo_ItemOnMouseOut(){this.className=this.originalClass;};function FCKSpecialCombo_ItemOnClick(A,B,C){this.className=this.originalClass;B._Panel.Hide();B.SetLabel(this.FCKItemLabel);if (typeof(B.OnSelect)=='function') B.OnSelect(C,this);};FCKSpecialCombo.prototype.ClearItems=function (){if (this.Items){for (var A in this.Items) this.Items[A]=null;};var B=this._ItemsHolderEl;while (B.firstChild) B.removeChild(B.firstChild);};FCKSpecialCombo.prototype.AddItem=function(A,B,C,D){var E=this._ItemsHolderEl.appendChild(this._Panel.Document.createElement('DIV'));E.className=E.originalClass='SC_Item';E.innerHTML=B;E.FCKItemLabel=C||A;E.Selected=false;if (FCKBrowserInfo.IsIE) E.style.width='100%';if (D) E.style.backgroundColor=D;FCKTools.AddEventListenerEx(E,'mouseover',FCKSpecialCombo_ItemOnMouseOver);FCKTools.AddEventListenerEx(E,'mouseout',FCKSpecialCombo_ItemOnMouseOut);FCKTools.AddEventListenerEx(E,'click',FCKSpecialCombo_ItemOnClick,[this,A]);this.Items[A.toString().toLowerCase()]=E;return E;};FCKSpecialCombo.prototype.SelectItem=function(A){if (typeof A=='string') A=this.Items[A.toString().toLowerCase()];if (A){A.className=A.originalClass='SC_ItemSelected';A.Selected=true;}};FCKSpecialCombo.prototype.SelectItemByLabel=function(A,B){for (var C in this.Items){var D=this.Items[C];if (D.FCKItemLabel==A){D.className=D.originalClass='SC_ItemSelected';D.Selected=true;if (B) this.SetLabel(A);}}};FCKSpecialCombo.prototype.DeselectAll=function(A){for (var i in this.Items){if (!this.Items[i]) continue;this.Items[i].className=this.Items[i].originalClass='SC_Item';this.Items[i].Selected=false;};if (A) this.SetLabel('');};FCKSpecialCombo.prototype.SetLabelById=function(A){A=A?A.toString().toLowerCase():'';var B=this.Items[A];this.SetLabel(B?B.FCKItemLabel:'');};FCKSpecialCombo.prototype.SetLabel=function(A){A=(!A||A.length==0)?'&nbsp;':A;if (A==this.Label) return;this.Label=A;var B=this._LabelEl;if (B){B.innerHTML=A;FCKTools.DisableSelection(B);}};FCKSpecialCombo.prototype.SetEnabled=function(A){this.Enabled=A;this._OuterTable.className=A?'':'SC_FieldDisabled';};FCKSpecialCombo.prototype.Create=function(A){var B=FCKTools.GetElementDocument(A);var C=this._OuterTable=A.appendChild(B.createElement('TABLE'));C.cellPadding=0;C.cellSpacing=0;C.insertRow(-1);var D;var E;switch (this.Style){case 0:D='TB_ButtonType_Icon';E=false;break;case 1:D='TB_ButtonType_Text';E=false;break;case 2:E=true;break;};if (this.Caption&&this.Caption.length>0&&E){var F=C.rows[0].insertCell(-1);F.innerHTML=this.Caption;F.className='SC_FieldCaption';};var G=FCKTools.AppendElement(C.rows[0].insertCell(-1),'div');if (E){G.className='SC_Field';G.style.width=this.FieldWidth+'px';G.innerHTML='<table width="100%" cellpadding="0" cellspacing="0" style="TABLE-LAYOUT: fixed;"><tbody><tr><td class="SC_FieldLabel"><label>&nbsp;</label></td><td class="SC_FieldButton">&nbsp;</td></tr></tbody></table>';this._LabelEl=G.getElementsByTagName('label')[0];this._LabelEl.innerHTML=this.Label;}else{G.className='TB_Button_Off';G.innerHTML='<table title="'+this.Tooltip+'" class="'+D+'" cellspacing="0" cellpadding="0" border="0"><tr><td><img class="TB_Button_Padding" src="'+FCK_SPACER_PATH+'" /></td><td class="TB_Text">'+this.Caption+'</td><td><img class="TB_Button_Padding" src="'+FCK_SPACER_PATH+'" /></td><td class="TB_ButtonArrow"><img src="'+FCKConfig.SkinPath+'images/toolbar.buttonarrow.gif" width="5" height="3"></td><td><img class="TB_Button_Padding" src="'+FCK_SPACER_PATH+'" /></td></tr></table>';};FCKTools.AddEventListenerEx(G,'mouseover',FCKSpecialCombo_OnMouseOver,this);FCKTools.AddEventListenerEx(G,'mouseout',FCKSpecialCombo_OnMouseOut,this);FCKTools.AddEventListenerEx(G,'click',FCKSpecialCombo_OnClick,this);FCKTools.DisableSelection(this._Panel.Document.body);};function FCKSpecialCombo_Cleanup(){this._LabelEl=null;this._OuterTable=null;this._ItemsHolderEl=null;this._PanelBox=null;if (this.Items){for (var A in this.Items) this.Items[A]=null;}};function FCKSpecialCombo_OnMouseOver(A,B){if (B.Enabled){switch (B.Style){case 0:this.className='TB_Button_On_Over';break;case 1:this.className='TB_Button_On_Over';break;case 2:this.className='SC_Field SC_FieldOver';break;}}};function FCKSpecialCombo_OnMouseOut(A,B){switch (B.Style){case 0:this.className='TB_Button_Off';break;case 1:this.className='TB_Button_Off';break;case 2:this.className='SC_Field';break;}};function FCKSpecialCombo_OnClick(e,A){if (A.Enabled){var B=A._Panel;var C=A._PanelBox;var D=A._ItemsHolderEl;var E=A.PanelMaxHeight;if (A.OnBeforeClick) A.OnBeforeClick(A);if (FCKBrowserInfo.IsIE) B.Preload(0,this.offsetHeight,this);if (D.offsetHeight>E) C.style.height=E+'px';else C.style.height='';B.Show(0,this.offsetHeight,this);}};
+var FCKToolbarSpecialCombo=function(){this.SourceView=false;this.ContextSensitive=true;};FCKToolbarSpecialCombo.prototype.DefaultLabel='';function FCKToolbarSpecialCombo_OnSelect(A,B){FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(this.CommandName).Execute(A,B);};FCKToolbarSpecialCombo.prototype.Create=function(A){this._Combo=new FCKSpecialCombo(this.GetLabel(),this.FieldWidth,this.PanelWidth,this.PanelMaxHeight,FCKBrowserInfo.IsIE?window:FCKTools.GetElementWindow(A).parent);this._Combo.Tooltip=this.Tooltip;this._Combo.Style=this.Style;this.CreateItems(this._Combo);this._Combo.Create(A);this._Combo.CommandName=this.CommandName;this._Combo.OnSelect=FCKToolbarSpecialCombo_OnSelect;};function FCKToolbarSpecialCombo_RefreshActiveItems(A,B){A.DeselectAll();A.SelectItem(B);A.SetLabelById(B);};FCKToolbarSpecialCombo.prototype.RefreshState=function(){var A;var B=FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(this.CommandName).GetState();if (B!=-1){A=1;if (this.RefreshActiveItems) this.RefreshActiveItems(this._Combo,B);else{if (this._LastValue!==B){this._LastValue=B;if (!B||B.length==0){this._Combo.DeselectAll();this._Combo.SetLabel(this.DefaultLabel);}else FCKToolbarSpecialCombo_RefreshActiveItems(this._Combo,B);}}}else A=-1;if (A==this.State) return;if (A==-1){this._Combo.DeselectAll();this._Combo.SetLabel('');};this.State=A;this._Combo.SetEnabled(A!=-1);};FCKToolbarSpecialCombo.prototype.Enable=function(){this.RefreshState();};FCKToolbarSpecialCombo.prototype.Disable=function(){this.State=-1;this._Combo.DeselectAll();this._Combo.SetLabel('');this._Combo.SetEnabled(false);};
+var FCKToolbarStyleCombo=function(A,B){if (A===false) return;this.CommandName='Style';this.Label=this.GetLabel();this.Tooltip=A?A:this.Label;this.Style=B?B:2;this.DefaultLabel=FCKConfig.DefaultStyleLabel||'';};FCKToolbarStyleCombo.prototype=new FCKToolbarSpecialCombo;FCKToolbarStyleCombo.prototype.GetLabel=function(){return FCKLang.Style;};FCKToolbarStyleCombo.prototype.GetStyles=function(){var A={};var B=FCK.ToolbarSet.CurrentInstance.Styles.GetStyles();for (var C in B){var D=B[C];if (!D.IsCore) A[C]=D;};return A;};FCKToolbarStyleCombo.prototype.CreateItems=function(A){var B=A._Panel.Document;FCKTools.AppendStyleSheet(B,FCKConfig.ToolbarComboPreviewCSS);FCKTools.AppendStyleString(B,FCKConfig.EditorAreaStyles);B.body.className+=' ForceBaseFont';FCKConfig.ApplyBodyAttributes(B.body);var C=this.GetStyles();for (var D in C){var E=C[D];var F=E.GetType()==2?D:FCKToolbarStyleCombo_BuildPreview(E,E.Label||D);var G=A.AddItem(D,F);G.Style=E;};A.OnBeforeClick=this.StyleCombo_OnBeforeClick;};FCKToolbarStyleCombo.prototype.RefreshActiveItems=function(A){var B=FCK.ToolbarSet.CurrentInstance.Selection.GetBoundaryParentElement(true);if (B){var C=new FCKElementPath(B);var D=C.Elements;for (var e=0;e<D.length;e++){for (var i in A.Items){var E=A.Items[i];var F=E.Style;if (F.CheckElementRemovable(D[e],true)){A.SetLabel(F.Label||F.Name);return;}}}};A.SetLabel(this.DefaultLabel);};FCKToolbarStyleCombo.prototype.StyleCombo_OnBeforeClick=function(A){A.DeselectAll();var B;var C;var D;var E=FCK.ToolbarSet.CurrentInstance.Selection;if (E.GetType()=='Control'){B=E.GetSelectedElement();D=B.nodeName.toLowerCase();}else{B=E.GetBoundaryParentElement(true);C=new FCKElementPath(B);};for (var i in A.Items){var F=A.Items[i];var G=F.Style;if ((D&&G.Element==D)||(!D&&G.GetType()!=2)){F.style.display='';if ((C&&G.CheckActive(C))||(!C&&G.CheckElementRemovable(B,true))) A.SelectItem(G.Name);}else F.style.display='none';}};function FCKToolbarStyleCombo_BuildPreview(A,B){var C=A.GetType();var D=[];if (C==0) D.push('<div class="BaseFont">');var E=A.Element;if (E=='bdo') E='span';D=['<',E];var F=A._StyleDesc.Attributes;if (F){for (var G in F){D.push(' ',G,'="',A.GetFinalAttributeValue(G),'"');}};if (A._GetStyleText().length>0) D.push(' style="',A.GetFinalStyleValue(),'"');D.push('>',B,'</',E,'>');if (C==0) D.push('</div>');return D.join('');}
+var FCKToolbarFontFormatCombo=function(A,B){if (A===false) return;this.CommandName='FontFormat';this.Label=this.GetLabel();this.Tooltip=A?A:this.Label;this.Style=B?B:2;this.NormalLabel='Normal';this.PanelWidth=190;this.DefaultLabel=FCKConfig.DefaultFontFormatLabel||'';};FCKToolbarFontFormatCombo.prototype=new FCKToolbarStyleCombo(false);FCKToolbarFontFormatCombo.prototype.GetLabel=function(){return FCKLang.FontFormat;};FCKToolbarFontFormatCombo.prototype.GetStyles=function(){var A={};var B=FCKLang['FontFormats'].split(';');var C={p:B[0],pre:B[1],address:B[2],h1:B[3],h2:B[4],h3:B[5],h4:B[6],h5:B[7],h6:B[8],div:B[9]||(B[0]+' (DIV)')};var D=FCKConfig.FontFormats.split(';');for (var i=0;i<D.length;i++){var E=D[i];var F=FCKStyles.GetStyle('_FCK_'+E);if (F){F.Label=C[E];A['_FCK_'+E]=F;}else alert("The FCKConfig.CoreStyles['"+E+"'] setting was not found. Please check the fckconfig.js file");};return A;};FCKToolbarFontFormatCombo.prototype.RefreshActiveItems=function(A){var B=FCK.ToolbarSet.CurrentInstance.Selection.GetBoundaryParentElement(true);if (B){var C=new FCKElementPath(B);var D=C.Block;if (D){for (var i in A.Items){var E=A.Items[i];var F=E.Style;if (F.CheckElementRemovable(D)){A.SetLabel(F.Label);return;}}}};A.SetLabel(this.DefaultLabel);};FCKToolbarFontFormatCombo.prototype.StyleCombo_OnBeforeClick=function(A){A.DeselectAll();var B=FCK.ToolbarSet.CurrentInstance.Selection.GetBoundaryParentElement(true);if (B){var C=new FCKElementPath(B);var D=C.Block;for (var i in A.Items){var E=A.Items[i];var F=E.Style;if (F.CheckElementRemovable(D)){A.SelectItem(E);return;}}}};
+var FCKToolbarFontsCombo=function(A,B){this.CommandName='FontName';this.Label=this.GetLabel();this.Tooltip=A?A:this.Label;this.Style=B?B:2;this.DefaultLabel=FCKConfig.DefaultFontLabel||'';};FCKToolbarFontsCombo.prototype=new FCKToolbarFontFormatCombo(false);FCKToolbarFontsCombo.prototype.GetLabel=function(){return FCKLang.Font;};FCKToolbarFontsCombo.prototype.GetStyles=function(){var A=FCKStyles.GetStyle('_FCK_FontFace');if (!A){alert("The FCKConfig.CoreStyles['Size'] setting was not found. Please check the fckconfig.js file");return {};};var B={};var C=FCKConfig.FontNames.split(';');for (var i=0;i<C.length;i++){var D=C[i].split('/');var E=D[0];var F=D[1]||E;var G=FCKTools.CloneObject(A);G.SetVariable('Font',E);G.Label=F;B[F]=G;};return B;};FCKToolbarFontsCombo.prototype.RefreshActiveItems=FCKToolbarStyleCombo.prototype.RefreshActiveItems;FCKToolbarFontsCombo.prototype.StyleCombo_OnBeforeClick=function(A){A.DeselectAll();var B=FCKSelection.GetBoundaryParentElement(true);if (B){var C=new FCKElementPath(B);for (var i in A.Items){var D=A.Items[i];var E=D.Style;if (E.CheckActive(C)){A.SelectItem(D);return;}}}};
+var FCKToolbarFontSizeCombo=function(A,B){this.CommandName='FontSize';this.Label=this.GetLabel();this.Tooltip=A?A:this.Label;this.Style=B?B:2;this.DefaultLabel=FCKConfig.DefaultFontSizeLabel||'';this.FieldWidth=70;};FCKToolbarFontSizeCombo.prototype=new FCKToolbarFontFormatCombo(false);FCKToolbarFontSizeCombo.prototype.GetLabel=function(){return FCKLang.FontSize;};FCKToolbarFontSizeCombo.prototype.GetStyles=function(){var A=FCKStyles.GetStyle('_FCK_Size');if (!A){alert("The FCKConfig.CoreStyles['FontFace'] setting was not found. Please check the fckconfig.js file");return {};};var B={};var C=FCKConfig.FontSizes.split(';');for (var i=0;i<C.length;i++){var D=C[i].split('/');var E=D[0];var F=D[1]||E;var G=FCKTools.CloneObject(A);G.SetVariable('Size',E);G.Label=F;B[F]=G;};return B;};FCKToolbarFontSizeCombo.prototype.RefreshActiveItems=FCKToolbarStyleCombo.prototype.RefreshActiveItems;FCKToolbarFontSizeCombo.prototype.StyleCombo_OnBeforeClick=FCKToolbarFontsCombo.prototype.StyleCombo_OnBeforeClick;
+var FCKToolbarPanelButton=function(A,B,C,D,E){this.CommandName=A;var F;if (E==null) F=FCKConfig.SkinPath+'toolbar/'+A.toLowerCase()+'.gif';else if (typeof(E)=='number') F=[FCKConfig.SkinPath+'fck_strip.gif',16,E];var G=this._UIButton=new FCKToolbarButtonUI(A,B,C,F,D);G._FCKToolbarPanelButton=this;G.ShowArrow=true;G.OnClick=FCKToolbarPanelButton_OnButtonClick;};FCKToolbarPanelButton.prototype.TypeName='FCKToolbarPanelButton';FCKToolbarPanelButton.prototype.Create=function(A){A.className+='Menu';this._UIButton.Create(A);var B=FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(this.CommandName)._Panel;B._FCKToolbarPanelButton=this;var C=B.Document.body.appendChild(B.Document.createElement('div'));C.style.position='absolute';C.style.top='0px';var D=this.LineImg=C.appendChild(B.Document.createElement('IMG'));D.className='TB_ConnectionLine';D.style.position='absolute';D.src=FCK_SPACER_PATH;B.OnHide=FCKToolbarPanelButton_OnPanelHide;};function FCKToolbarPanelButton_OnButtonClick(A){var B=this._FCKToolbarPanelButton;var e=B._UIButton.MainElement;B._UIButton.ChangeState(1);B.LineImg.style.width=(e.offsetWidth-2)+'px';FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(B.CommandName).Execute(0,e.offsetHeight-1,e);};function FCKToolbarPanelButton_OnPanelHide(){var A=this._FCKToolbarPanelButton;A._UIButton.ChangeState(0);};FCKToolbarPanelButton.prototype.RefreshState=FCKToolbarButton.prototype.RefreshState;FCKToolbarPanelButton.prototype.Enable=FCKToolbarButton.prototype.Enable;FCKToolbarPanelButton.prototype.Disable=FCKToolbarButton.prototype.Disable;
+var FCKToolbarItems={};FCKToolbarItems.LoadedItems={};FCKToolbarItems.RegisterItem=function(A,B){this.LoadedItems[A]=B;};FCKToolbarItems.GetItem=function(A){var B=FCKToolbarItems.LoadedItems[A];if (B) return B;switch (A){case 'Source':B=new FCKToolbarButton('Source',FCKLang.Source,null,2,true,true,1);break;case 'DocProps':B=new FCKToolbarButton('DocProps',FCKLang.DocProps,null,null,null,null,2);break;case 'Save':B=new FCKToolbarButton('Save',FCKLang.Save,null,null,true,null,3);break;case 'NewPage':B=new FCKToolbarButton('NewPage',FCKLang.NewPage,null,null,true,null,4);break;case 'Preview':B=new FCKToolbarButton('Preview',FCKLang.Preview,null,null,true,null,5);break;case 'Templates':B=new FCKToolbarButton('Templates',FCKLang.Templates,null,null,null,null,6);break;case 'About':B=new FCKToolbarButton('About',FCKLang.About,null,null,true,null,47);break;case 'Cut':B=new FCKToolbarButton('Cut',FCKLang.Cut,null,null,false,true,7);break;case 'Copy':B=new FCKToolbarButton('Copy',FCKLang.Copy,null,null,false,true,8);break;case 'Paste':B=new FCKToolbarButton('Paste',FCKLang.Paste,null,null,false,true,9);break;case 'PasteText':B=new FCKToolbarButton('PasteText',FCKLang.PasteText,null,null,false,true,10);break;case 'PasteWord':B=new FCKToolbarButton('PasteWord',FCKLang.PasteWord,null,null,false,true,11);break;case 'Print':B=new FCKToolbarButton('Print',FCKLang.Print,null,null,false,true,12);break;case 'SpellCheck':B=new FCKToolbarButton('SpellCheck',FCKLang.SpellCheck,null,null,null,null,13);break;case 'Undo':B=new FCKToolbarButton('Undo',FCKLang.Undo,null,null,false,true,14);break;case 'Redo':B=new FCKToolbarButton('Redo',FCKLang.Redo,null,null,false,true,15);break;case 'SelectAll':B=new FCKToolbarButton('SelectAll',FCKLang.SelectAll,null,null,true,null,18);break;case 'RemoveFormat':B=new FCKToolbarButton('RemoveFormat',FCKLang.RemoveFormat,null,null,false,true,19);break;case 'FitWindow':B=new FCKToolbarButton('FitWindow',FCKLang.FitWindow,null,null,true,true,66);break;case 'Bold':B=new FCKToolbarButton('Bold',FCKLang.Bold,null,null,false,true,20);break;case 'Italic':B=new FCKToolbarButton('Italic',FCKLang.Italic,null,null,false,true,21);break;case 'Underline':B=new FCKToolbarButton('Underline',FCKLang.Underline,null,null,false,true,22);break;case 'StrikeThrough':B=new FCKToolbarButton('StrikeThrough',FCKLang.StrikeThrough,null,null,false,true,23);break;case 'Subscript':B=new FCKToolbarButton('Subscript',FCKLang.Subscript,null,null,false,true,24);break;case 'Superscript':B=new FCKToolbarButton('Superscript',FCKLang.Superscript,null,null,false,true,25);break;case 'OrderedList':B=new FCKToolbarButton('InsertOrderedList',FCKLang.NumberedListLbl,FCKLang.NumberedList,null,false,true,26);break;case 'UnorderedList':B=new FCKToolbarButton('InsertUnorderedList',FCKLang.BulletedListLbl,FCKLang.BulletedList,null,false,true,27);break;case 'Outdent':B=new FCKToolbarButton('Outdent',FCKLang.DecreaseIndent,null,null,false,true,28);break;case 'Indent':B=new FCKToolbarButton('Indent',FCKLang.IncreaseIndent,null,null,false,true,29);break;case 'Blockquote':B=new FCKToolbarButton('Blockquote',FCKLang.Blockquote,null,null,false,true,73);break;case 'Link':B=new FCKToolbarButton('Link',FCKLang.InsertLinkLbl,FCKLang.InsertLink,null,false,true,34);break;case 'Unlink':B=new FCKToolbarButton('Unlink',FCKLang.RemoveLink,null,null,false,true,35);break;case 'Anchor':B=new FCKToolbarButton('Anchor',FCKLang.Anchor,null,null,null,null,36);break;case 'Image':B=new FCKToolbarButton('Image',FCKLang.InsertImageLbl,FCKLang.InsertImage,null,false,true,37);break;case 'Flash':B=new FCKToolbarButton('Flash',FCKLang.InsertFlashLbl,FCKLang.InsertFlash,null,false,true,38);break;case 'Table':B=new FCKToolbarButton('Table',FCKLang.InsertTableLbl,FCKLang.InsertTable,null,false,true,39);break;case 'SpecialChar':B=new FCKToolbarButton('SpecialChar',FCKLang.InsertSpecialCharLbl,FCKLang.InsertSpecialChar,null,false,true,42);break;case 'Smiley':B=new FCKToolbarButton('Smiley',FCKLang.InsertSmileyLbl,FCKLang.InsertSmiley,null,false,true,41);break;case 'PageBreak':B=new FCKToolbarButton('PageBreak',FCKLang.PageBreakLbl,FCKLang.PageBreak,null,false,true,43);break;case 'Rule':B=new FCKToolbarButton('Rule',FCKLang.InsertLineLbl,FCKLang.InsertLine,null,false,true,40);break;case 'JustifyLeft':B=new FCKToolbarButton('JustifyLeft',FCKLang.LeftJustify,null,null,false,true,30);break;case 'JustifyCenter':B=new FCKToolbarButton('JustifyCenter',FCKLang.CenterJustify,null,null,false,true,31);break;case 'JustifyRight':B=new FCKToolbarButton('JustifyRight',FCKLang.RightJustify,null,null,false,true,32);break;case 'JustifyFull':B=new FCKToolbarButton('JustifyFull',FCKLang.BlockJustify,null,null,false,true,33);break;case 'Style':B=new FCKToolbarStyleCombo();break;case 'FontName':B=new FCKToolbarFontsCombo();break;case 'FontSize':B=new FCKToolbarFontSizeCombo();break;case 'FontFormat':B=new FCKToolbarFontFormatCombo();break;case 'TextColor':B=new FCKToolbarPanelButton('TextColor',FCKLang.TextColor,null,null,45);break;case 'BGColor':B=new FCKToolbarPanelButton('BGColor',FCKLang.BGColor,null,null,46);break;case 'Find':B=new FCKToolbarButton('Find',FCKLang.Find,null,null,null,null,16);break;case 'Replace':B=new FCKToolbarButton('Replace',FCKLang.Replace,null,null,null,null,17);break;case 'Form':B=new FCKToolbarButton('Form',FCKLang.Form,null,null,null,null,48);break;case 'Checkbox':B=new FCKToolbarButton('Checkbox',FCKLang.Checkbox,null,null,null,null,49);break;case 'Radio':B=new FCKToolbarButton('Radio',FCKLang.RadioButton,null,null,null,null,50);break;case 'TextField':B=new FCKToolbarButton('TextField',FCKLang.TextField,null,null,null,null,51);break;case 'Textarea':B=new FCKToolbarButton('Textarea',FCKLang.Textarea,null,null,null,null,52);break;case 'HiddenField':B=new FCKToolbarButton('HiddenField',FCKLang.HiddenField,null,null,null,null,56);break;case 'Button':B=new FCKToolbarButton('Button',FCKLang.Button,null,null,null,null,54);break;case 'Select':B=new FCKToolbarButton('Select',FCKLang.SelectionField,null,null,null,null,53);break;case 'ImageButton':B=new FCKToolbarButton('ImageButton',FCKLang.ImageButton,null,null,null,null,55);break;case 'ShowBlocks':B=new FCKToolbarButton('ShowBlocks',FCKLang.ShowBlocks,null,null,null,true,72);break;default:alert(FCKLang.UnknownToolbarItem.replace(/%1/g,A));return null;};FCKToolbarItems.LoadedItems[A]=B;return B;};
+var FCKToolbar=function(){this.Items=[];};FCKToolbar.prototype.AddItem=function(A){return this.Items[this.Items.length]=A;};FCKToolbar.prototype.AddButton=function(A,B,C,D,E,F){if (typeof(D)=='number') D=[this.DefaultIconsStrip,this.DefaultIconSize,D];var G=new FCKToolbarButtonUI(A,B,C,D,E,F);G._FCKToolbar=this;G.OnClick=FCKToolbar_OnItemClick;return this.AddItem(G);};function FCKToolbar_OnItemClick(A){var B=A._FCKToolbar;if (B.OnItemClick) B.OnItemClick(B,A);};FCKToolbar.prototype.AddSeparator=function(){this.AddItem(new FCKToolbarSeparator());};FCKToolbar.prototype.Create=function(A){var B=FCKTools.GetElementDocument(A);var e=B.createElement('table');e.className='TB_Toolbar';e.style.styleFloat=e.style.cssFloat=(FCKLang.Dir=='ltr'?'left':'right');e.dir=FCKLang.Dir;e.cellPadding=0;e.cellSpacing=0;var C=e.insertRow(-1);var D;if (!this.HideStart){D=C.insertCell(-1);D.appendChild(B.createElement('div')).className='TB_Start';};for (var i=0;i<this.Items.length;i++){this.Items[i].Create(C.insertCell(-1));};if (!this.HideEnd){D=C.insertCell(-1);D.appendChild(B.createElement('div')).className='TB_End';};A.appendChild(e);};var FCKToolbarSeparator=function(){};FCKToolbarSeparator.prototype.Create=function(A){FCKTools.AppendElement(A,'div').className='TB_Separator';}
+var FCKToolbarBreak=function(){};FCKToolbarBreak.prototype.Create=function(A){var B=A.ownerDocument.createElement('div');B.style.clear=B.style.cssFloat=FCKLang.Dir=='rtl'?'right':'left';A.appendChild(B);}
+function FCKToolbarSet_Create(A){var B;var C=A||FCKConfig.ToolbarLocation;switch (C){case 'In':document.getElementById('xToolbarRow').style.display='';B=new FCKToolbarSet(document);break;case 'None':B=new FCKToolbarSet(document);break;default:FCK.Events.AttachEvent('OnBlur',FCK_OnBlur);FCK.Events.AttachEvent('OnFocus',FCK_OnFocus);var D;var E=C.match(/^Out:(.+)\((\w+)\)$/);if (E){D=eval('parent.'+E[1]).document.getElementById(E[2]);}else{E=C.match(/^Out:(\w+)$/);if (E) D=parent.document.getElementById(E[1]);};if (!D){alert('Invalid value for "ToolbarLocation"');return arguments.callee('In');};B=D.__FCKToolbarSet;if (B) break;var F=FCKTools.GetElementDocument(D).createElement('iframe');F.src='javascript:void(0)';F.frameBorder=0;F.width='100%';F.height='10';D.appendChild(F);F.unselectable='on';var G=F.contentWindow.document;var H='';if (FCKBrowserInfo.IsSafari) H='<base href="'+window.document.location+'">';G.open();G.write('<html><head>'+H+'<script type="text/javascript"> var adjust = function() { window.frameElement.height = document.body.scrollHeight ; }; window.onresize = adjust; window.onload = function () {adjust(); window.setTimeout( adjust, 1000 ); }</script></head><body style="overflow: hidden">'+document.getElementById('xToolbarSpace').innerHTML+'</body></html>');G.close();FCKTools.AddEventListener(G,'contextmenu',FCKTools.CancelEvent);FCKTools.AppendStyleSheet(G,FCKConfig.SkinPath+'fck_editor.css');B=D.__FCKToolbarSet=new FCKToolbarSet(G);B._IFrame=F;if (FCK.IECleanup) FCK.IECleanup.AddItem(D,FCKToolbarSet_Target_Cleanup);};B.CurrentInstance=FCK;FCK.AttachToOnSelectionChange(B.RefreshItemsState);return B;};function FCK_OnBlur(A){var B=A.ToolbarSet;if (B.CurrentInstance==A) B.Disable();};function FCK_OnFocus(A){var B=A.ToolbarSet;var C=A||FCK;B.CurrentInstance.FocusManager.RemoveWindow(B._IFrame.contentWindow);B.CurrentInstance=C;C.FocusManager.AddWindow(B._IFrame.contentWindow,true);B.Enable();};function FCKToolbarSet_Cleanup(){this._TargetElement=null;this._IFrame=null;};function FCKToolbarSet_Target_Cleanup(){this.__FCKToolbarSet=null;};var FCKToolbarSet=function(A){this._Document=A;this._TargetElement=A.getElementById('xToolbar');var B=A.getElementById('xExpandHandle');var C=A.getElementById('xCollapseHandle');B.title=FCKLang.ToolbarExpand;FCKTools.AddEventListener(B,'click',FCKToolbarSet_Expand_OnClick);C.title=FCKLang.ToolbarCollapse;FCKTools.AddEventListener(C,'click',FCKToolbarSet_Collapse_OnClick);if (!FCKConfig.ToolbarCanCollapse||FCKConfig.ToolbarStartExpanded) this.Expand();else this.Collapse();C.style.display=FCKConfig.ToolbarCanCollapse?'':'none';if (FCKConfig.ToolbarCanCollapse) C.style.display='';else A.getElementById('xTBLeftBorder').style.display='';this.Toolbars=[];this.IsLoaded=false;if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKToolbarSet_Cleanup);};function FCKToolbarSet_Expand_OnClick(){FCK.ToolbarSet.Expand();};function FCKToolbarSet_Collapse_OnClick(){FCK.ToolbarSet.Collapse();};FCKToolbarSet.prototype.Expand=function(){this._ChangeVisibility(false);};FCKToolbarSet.prototype.Collapse=function(){this._ChangeVisibility(true);};FCKToolbarSet.prototype._ChangeVisibility=function(A){this._Document.getElementById('xCollapsed').style.display=A?'':'none';this._Document.getElementById('xExpanded').style.display=A?'none':'';if (FCKBrowserInfo.IsGecko){FCKTools.RunFunction(window.onresize);}};FCKToolbarSet.prototype.Load=function(A){this.Name=A;this.Items=[];this.ItemsWysiwygOnly=[];this.ItemsContextSensitive=[];this._TargetElement.innerHTML='';var B=FCKConfig.ToolbarSets[A];if (!B){alert(FCKLang.UnknownToolbarSet.replace(/%1/g,A));return;};this.Toolbars=[];for (var x=0;x<B.length;x++){var C=B[x];if (!C) continue;var D;if (typeof(C)=='string'){if (C=='/') D=new FCKToolbarBreak();}else{D=new FCKToolbar();for (var j=0;j<C.length;j++){var E=C[j];if (E=='-') D.AddSeparator();else{var F=FCKToolbarItems.GetItem(E);if (F){D.AddItem(F);this.Items.push(F);if (!F.SourceView) this.ItemsWysiwygOnly.push(F);if (F.ContextSensitive) this.ItemsContextSensitive.push(F);}}}};D.Create(this._TargetElement);this.Toolbars[this.Toolbars.length]=D;};FCKTools.DisableSelection(this._Document.getElementById('xCollapseHandle').parentNode);if (FCK.Status!=2) FCK.Events.AttachEvent('OnStatusChange',this.RefreshModeState);else this.RefreshModeState();this.IsLoaded=true;this.IsEnabled=true;FCKTools.RunFunction(this.OnLoad);};FCKToolbarSet.prototype.Enable=function(){if (this.IsEnabled) return;this.IsEnabled=true;var A=this.Items;for (var i=0;i<A.length;i++) A[i].RefreshState();};FCKToolbarSet.prototype.Disable=function(){if (!this.IsEnabled) return;this.IsEnabled=false;var A=this.Items;for (var i=0;i<A.length;i++) A[i].Disable();};FCKToolbarSet.prototype.RefreshModeState=function(A){if (FCK.Status!=2) return;var B=A?A.ToolbarSet:this;var C=B.ItemsWysiwygOnly;if (FCK.EditMode==0){for (var i=0;i<C.length;i++) C[i].Enable();B.RefreshItemsState(A);}else{B.RefreshItemsState(A);for (var j=0;j<C.length;j++) C[j].Disable();}};FCKToolbarSet.prototype.RefreshItemsState=function(A){var B=(A?A.ToolbarSet:this).ItemsContextSensitive;for (var i=0;i<B.length;i++) B[i].RefreshState();};
+var FCKDialog={};FCKDialog.OpenDialog=function(A,B,C,D,E,F,G,H){var I={};I.Title=B;I.Page=C;I.Editor=window;I.CustomValue=F;var J=FCKConfig.BasePath+'fckdialog.html';this.Show(I,A,J,D,E,G,H);};
+FCKDialog.Show=function(A,B,C,D,E,F,G){var H=(FCKConfig.ScreenHeight-E)/2;var I=(FCKConfig.ScreenWidth-D)/2;var J="location=no,menubar=no,toolbar=no,dependent=yes,dialog=yes,minimizable=no,alwaysRaised=yes,resizable="+(G?'yes':'no')+",width="+D+",height="+E+",top="+H+",left="+I;if (!F) F=window;FCKFocusManager.Lock();var K=F.open('','FCKeditorDialog_'+B,J,true);if (!K){alert(FCKLang.DialogBlocked);FCKFocusManager.Unlock();return;};K.moveTo(I,H);K.resizeTo(D,E);K.focus();K.location.href=C;K.dialogArguments=A;F.FCKLastDialogInfo=A;this.Window=K;try{window.top.parent.addEventListener('mousedown',this.CheckFocus,true);window.top.parent.addEventListener('mouseup',this.CheckFocus,true);window.top.parent.addEventListener('click',this.CheckFocus,true);window.top.parent.addEventListener('focus',this.CheckFocus,true);}catch (e){}};FCKDialog.CheckFocus=function(){if (typeof(FCKDialog)!="object") return false;if (FCKDialog.Window&&!FCKDialog.Window.closed) FCKDialog.Window.focus();else{try{window.top.parent.removeEventListener('onmousedown',FCKDialog.CheckFocus,true);window.top.parent.removeEventListener('mouseup',FCKDialog.CheckFocus,true);window.top.parent.removeEventListener('click',FCKDialog.CheckFocus,true);window.top.parent.removeEventListener('onfocus',FCKDialog.CheckFocus,true);}catch (e){}};return false;};
+var FCKMenuItem=function(A,B,C,D,E){this.Name=B;this.Label=C||B;this.IsDisabled=E;this.Icon=new FCKIcon(D);this.SubMenu=new FCKMenuBlockPanel();this.SubMenu.Parent=A;this.SubMenu.OnClick=FCKTools.CreateEventListener(FCKMenuItem_SubMenu_OnClick,this);if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKMenuItem_Cleanup);};FCKMenuItem.prototype.AddItem=function(A,B,C,D){this.HasSubMenu=true;return this.SubMenu.AddItem(A,B,C,D);};FCKMenuItem.prototype.AddSeparator=function(){this.SubMenu.AddSeparator();};FCKMenuItem.prototype.Create=function(A){var B=this.HasSubMenu;var C=FCKTools.GetElementDocument(A);var r=this.MainElement=A.insertRow(-1);r.className=this.IsDisabled?'MN_Item_Disabled':'MN_Item';if (!this.IsDisabled){FCKTools.AddEventListenerEx(r,'mouseover',FCKMenuItem_OnMouseOver,[this]);FCKTools.AddEventListenerEx(r,'click',FCKMenuItem_OnClick,[this]);if (!B) FCKTools.AddEventListenerEx(r,'mouseout',FCKMenuItem_OnMouseOut,[this]);};var D=r.insertCell(-1);D.className='MN_Icon';D.appendChild(this.Icon.CreateIconElement(C));D=r.insertCell(-1);D.className='MN_Label';D.noWrap=true;D.appendChild(C.createTextNode(this.Label));D=r.insertCell(-1);if (B){D.className='MN_Arrow';var E=D.appendChild(C.createElement('IMG'));E.src=FCK_IMAGES_PATH+'arrow_'+FCKLang.Dir+'.gif';E.width=4;E.height=7;this.SubMenu.Create();this.SubMenu.Panel.OnHide=FCKTools.CreateEventListener(FCKMenuItem_SubMenu_OnHide,this);}};FCKMenuItem.prototype.Activate=function(){this.MainElement.className='MN_Item_Over';if (this.HasSubMenu){this.SubMenu.Show(this.MainElement.offsetWidth+2,-2,this.MainElement);};FCKTools.RunFunction(this.OnActivate,this);};FCKMenuItem.prototype.Deactivate=function(){this.MainElement.className='MN_Item';if (this.HasSubMenu) this.SubMenu.Hide();};function FCKMenuItem_SubMenu_OnClick(A,B){FCKTools.RunFunction(B.OnClick,B,[A]);};function FCKMenuItem_SubMenu_OnHide(A){A.Deactivate();};function FCKMenuItem_OnClick(A,B){if (B.HasSubMenu) B.Activate();else{B.Deactivate();FCKTools.RunFunction(B.OnClick,B,[B]);}};function FCKMenuItem_OnMouseOver(A,B){B.Activate();};function FCKMenuItem_OnMouseOut(A,B){B.Deactivate();};function FCKMenuItem_Cleanup(){this.MainElement=null;}
+var FCKMenuBlock=function(){this._Items=[];};FCKMenuBlock.prototype.Count=function(){return this._Items.length;};FCKMenuBlock.prototype.AddItem=function(A,B,C,D){var E=new FCKMenuItem(this,A,B,C,D);E.OnClick=FCKTools.CreateEventListener(FCKMenuBlock_Item_OnClick,this);E.OnActivate=FCKTools.CreateEventListener(FCKMenuBlock_Item_OnActivate,this);this._Items.push(E);return E;};FCKMenuBlock.prototype.AddSeparator=function(){this._Items.push(new FCKMenuSeparator());};FCKMenuBlock.prototype.RemoveAllItems=function(){this._Items=[];var A=this._ItemsTable;if (A){while (A.rows.length>0) A.deleteRow(0);}};FCKMenuBlock.prototype.Create=function(A){if (!this._ItemsTable){if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKMenuBlock_Cleanup);this._Window=FCKTools.GetElementWindow(A);var B=FCKTools.GetElementDocument(A);var C=A.appendChild(B.createElement('table'));C.cellPadding=0;C.cellSpacing=0;FCKTools.DisableSelection(C);var D=C.insertRow(-1).insertCell(-1);D.className='MN_Menu';var E=this._ItemsTable=D.appendChild(B.createElement('table'));E.cellPadding=0;E.cellSpacing=0;};for (var i=0;i<this._Items.length;i++) this._Items[i].Create(this._ItemsTable);};function FCKMenuBlock_Item_OnClick(A,B){FCKTools.RunFunction(B.OnClick,B,[A]);};function FCKMenuBlock_Item_OnActivate(A){var B=A._ActiveItem;if (B&&B!=this){if (!FCKBrowserInfo.IsIE&&B.HasSubMenu&&!this.HasSubMenu){A._Window.focus();A.Panel.HasFocus=true;};B.Deactivate();};A._ActiveItem=this;};function FCKMenuBlock_Cleanup(){this._Window=null;this._ItemsTable=null;};var FCKMenuSeparator=function(){};FCKMenuSeparator.prototype.Create=function(A){var B=FCKTools.GetElementDocument(A);var r=A.insertRow(-1);var C=r.insertCell(-1);C.className='MN_Separator MN_Icon';C=r.insertCell(-1);C.className='MN_Separator';C.appendChild(B.createElement('DIV')).className='MN_Separator_Line';C=r.insertCell(-1);C.className='MN_Separator';C.appendChild(B.createElement('DIV')).className='MN_Separator_Line';}
+var FCKMenuBlockPanel=function(){FCKMenuBlock.call(this);};FCKMenuBlockPanel.prototype=new FCKMenuBlock();FCKMenuBlockPanel.prototype.Create=function(){var A=this.Panel=(this.Parent&&this.Parent.Panel?this.Parent.Panel.CreateChildPanel():new FCKPanel());A.AppendStyleSheet(FCKConfig.SkinPath+'fck_editor.css');FCKMenuBlock.prototype.Create.call(this,A.MainNode);};FCKMenuBlockPanel.prototype.Show=function(x,y,A){if (!this.Panel.CheckIsOpened()) this.Panel.Show(x,y,A);};FCKMenuBlockPanel.prototype.Hide=function(){if (this.Panel.CheckIsOpened()) this.Panel.Hide();}
+var FCKContextMenu=function(A,B){this.CtrlDisable=false;var C=this._Panel=new FCKPanel(A);C.AppendStyleSheet(FCKConfig.SkinPath+'fck_editor.css');C.IsContextMenu=true;if (FCKBrowserInfo.IsGecko) C.Document.addEventListener('draggesture',function(e) {e.preventDefault();return false;},true);var D=this._MenuBlock=new FCKMenuBlock();D.Panel=C;D.OnClick=FCKTools.CreateEventListener(FCKContextMenu_MenuBlock_OnClick,this);this._Redraw=true;};FCKContextMenu.prototype.SetMouseClickWindow=function(A){if (!FCKBrowserInfo.IsIE){this._Document=A.document;if (FCKBrowserInfo.IsOpera&&!('oncontextmenu' in document.createElement('foo'))){this._Document.addEventListener('mousedown',FCKContextMenu_Document_OnMouseDown,false);this._Document.addEventListener('mouseup',FCKContextMenu_Document_OnMouseUp,false);};this._Document.addEventListener('contextmenu',FCKContextMenu_Document_OnContextMenu,false);}};FCKContextMenu.prototype.AddItem=function(A,B,C,D){var E=this._MenuBlock.AddItem(A,B,C,D);this._Redraw=true;return E;};FCKContextMenu.prototype.AddSeparator=function(){this._MenuBlock.AddSeparator();this._Redraw=true;};FCKContextMenu.prototype.RemoveAllItems=function(){this._MenuBlock.RemoveAllItems();this._Redraw=true;};FCKContextMenu.prototype.AttachToElement=function(A){if (FCKBrowserInfo.IsIE) FCKTools.AddEventListenerEx(A,'contextmenu',FCKContextMenu_AttachedElement_OnContextMenu,this);else A._FCKContextMenu=this;};function FCKContextMenu_Document_OnContextMenu(e){var A=e.target;while (A){if (A._FCKContextMenu){if (A._FCKContextMenu.CtrlDisable&&(e.ctrlKey||e.metaKey)) return true;FCKTools.CancelEvent(e);FCKContextMenu_AttachedElement_OnContextMenu(e,A._FCKContextMenu,A);return false;};A=A.parentNode;};return true;};var FCKContextMenu_OverrideButton;function FCKContextMenu_Document_OnMouseDown(e){if(!e||e.button!=2) return false;var A=e.target;while (A){if (A._FCKContextMenu){if (A._FCKContextMenu.CtrlDisable&&(e.ctrlKey||e.metaKey)) return true;var B=FCKContextMenu_OverrideButton;if(!B){var C=e.target.ownerDocument;B=FCKContextMenu_OverrideButton=C.createElement('input');B.type='button';var D=C.createElement('p');C.body.appendChild(D);D.appendChild(B);};B.style.cssText='position:absolute;top:'+(e.clientY-2)+'px;left:'+(e.clientX-2)+'px;width:5px;height:5px;opacity:0.01';};A=A.parentNode;};return false;};function FCKContextMenu_Document_OnMouseUp(e){var A=FCKContextMenu_OverrideButton;if (A){var B=A.parentNode;B.parentNode.removeChild(B);FCKContextMenu_OverrideButton=undefined;if(e&&e.button==2){FCKContextMenu_Document_OnContextMenu(e);return false;}}};function FCKContextMenu_AttachedElement_OnContextMenu(A,B,C){if (B.CtrlDisable&&(A.ctrlKey||A.metaKey)) return true;var D=C||this;if (B.OnBeforeOpen) B.OnBeforeOpen.call(B,D);if (B._MenuBlock.Count()==0) return false;if (B._Redraw){B._MenuBlock.Create(B._Panel.MainNode);B._Redraw=false;};FCKTools.DisableSelection(B._Panel.Document.body);var x=0;var y=0;if (FCKBrowserInfo.IsIE){x=A.screenX;y=A.screenY;}else if (FCKBrowserInfo.IsSafari){x=A.clientX;y=A.clientY;}else{x=A.pageX;y=A.pageY;};B._Panel.Show(x,y,A.currentTarget||null);return false;};function FCKContextMenu_MenuBlock_OnClick(A,B){B._Panel.Hide();FCKTools.RunFunction(B.OnItemClick,B,A);};
+FCK.ContextMenu={};FCK.ContextMenu.Listeners=[];FCK.ContextMenu.RegisterListener=function(A){if (A) this.Listeners.push(A);};function FCK_ContextMenu_Init(){var A=FCK.ContextMenu._InnerContextMenu=new FCKContextMenu(FCKBrowserInfo.IsIE?window:window.parent,FCKLang.Dir);A.CtrlDisable=FCKConfig.BrowserContextMenuOnCtrl;A.OnBeforeOpen=FCK_ContextMenu_OnBeforeOpen;A.OnItemClick=FCK_ContextMenu_OnItemClick;var B=FCK.ContextMenu;for (var i=0;i<FCKConfig.ContextMenu.length;i++) B.RegisterListener(FCK_ContextMenu_GetListener(FCKConfig.ContextMenu[i]));};function FCK_ContextMenu_GetListener(A){switch (A){case 'Generic':return {AddItems:function(menu,tag,tagName){menu.AddItem('Cut',FCKLang.Cut,7,FCKCommands.GetCommand('Cut').GetState()==-1);menu.AddItem('Copy',FCKLang.Copy,8,FCKCommands.GetCommand('Copy').GetState()==-1);menu.AddItem('Paste',FCKLang.Paste,9,FCKCommands.GetCommand('Paste').GetState()==-1);}};case 'Table':return {AddItems:function(menu,tag,tagName){var B=(tagName=='TABLE');var C=(!B&&FCKSelection.HasAncestorNode('TABLE'));if (C){menu.AddSeparator();var D=menu.AddItem('Cell',FCKLang.CellCM);D.AddItem('TableInsertCellBefore',FCKLang.InsertCellBefore,69);D.AddItem('TableInsertCellAfter',FCKLang.InsertCellAfter,58);D.AddItem('TableDeleteCells',FCKLang.DeleteCells,59);if (FCKBrowserInfo.IsGecko) D.AddItem('TableMergeCells',FCKLang.MergeCells,60,FCKCommands.GetCommand('TableMergeCells').GetState()==-1);else{D.AddItem('TableMergeRight',FCKLang.MergeRight,60,FCKCommands.GetCommand('TableMergeRight').GetState()==-1);D.AddItem('TableMergeDown',FCKLang.MergeDown,60,FCKCommands.GetCommand('TableMergeDown').GetState()==-1);};D.AddItem('TableHorizontalSplitCell',FCKLang.HorizontalSplitCell,61,FCKCommands.GetCommand('TableHorizontalSplitCell').GetState()==-1);D.AddItem('TableVerticalSplitCell',FCKLang.VerticalSplitCell,61,FCKCommands.GetCommand('TableVerticalSplitCell').GetState()==-1);D.AddSeparator();D.AddItem('TableCellProp',FCKLang.CellProperties,57,FCKCommands.GetCommand('TableCellProp').GetState()==-1);menu.AddSeparator();D=menu.AddItem('Row',FCKLang.RowCM);D.AddItem('TableInsertRowBefore',FCKLang.InsertRowBefore,70);D.AddItem('TableInsertRowAfter',FCKLang.InsertRowAfter,62);D.AddItem('TableDeleteRows',FCKLang.DeleteRows,63);menu.AddSeparator();D=menu.AddItem('Column',FCKLang.ColumnCM);D.AddItem('TableInsertColumnBefore',FCKLang.InsertColumnBefore,71);D.AddItem('TableInsertColumnAfter',FCKLang.InsertColumnAfter,64);D.AddItem('TableDeleteColumns',FCKLang.DeleteColumns,65);};if (B||C){menu.AddSeparator();menu.AddItem('TableDelete',FCKLang.TableDelete);menu.AddItem('TableProp',FCKLang.TableProperties,39);}}};case 'Link':return {AddItems:function(menu,tag,tagName){var E=(tagName=='A'||FCKSelection.HasAncestorNode('A'));if (E||FCK.GetNamedCommandState('Unlink')!=-1){var F=FCKSelection.MoveToAncestorNode('A');var G=(F&&F.name.length>0&&F.href.length==0);if (G) return;menu.AddSeparator();if (E) menu.AddItem('Link',FCKLang.EditLink,34);menu.AddItem('Unlink',FCKLang.RemoveLink,35);}}};case 'Image':return {AddItems:function(menu,tag,tagName){if (tagName=='IMG'&&!tag.getAttribute('_fckfakelement')){menu.AddSeparator();menu.AddItem('Image',FCKLang.ImageProperties,37);}}};case 'Anchor':return {AddItems:function(menu,tag,tagName){var F=FCKSelection.MoveToAncestorNode('A');var G=(F&&F.name.length>0);if (G||(tagName=='IMG'&&tag.getAttribute('_fckanchor'))){menu.AddSeparator();menu.AddItem('Anchor',FCKLang.AnchorProp,36);menu.AddItem('AnchorDelete',FCKLang.AnchorDelete);}}};case 'Flash':return {AddItems:function(menu,tag,tagName){if (tagName=='IMG'&&tag.getAttribute('_fckflash')){menu.AddSeparator();menu.AddItem('Flash',FCKLang.FlashProperties,38);}}};case 'Form':return {AddItems:function(menu,tag,tagName){if (FCKSelection.HasAncestorNode('FORM')){menu.AddSeparator();menu.AddItem('Form',FCKLang.FormProp,48);}}};case 'Checkbox':return {AddItems:function(menu,tag,tagName){if (tagName=='INPUT'&&tag.type=='checkbox'){menu.AddSeparator();menu.AddItem('Checkbox',FCKLang.CheckboxProp,49);}}};case 'Radio':return {AddItems:function(menu,tag,tagName){if (tagName=='INPUT'&&tag.type=='radio'){menu.AddSeparator();menu.AddItem('Radio',FCKLang.RadioButtonProp,50);}}};case 'TextField':return {AddItems:function(menu,tag,tagName){if (tagName=='INPUT'&&(tag.type=='text'||tag.type=='password')){menu.AddSeparator();menu.AddItem('TextField',FCKLang.TextFieldProp,51);}}};case 'HiddenField':return {AddItems:function(menu,tag,tagName){if (tagName=='IMG'&&tag.getAttribute('_fckinputhidden')){menu.AddSeparator();menu.AddItem('HiddenField',FCKLang.HiddenFieldProp,56);}}};case 'ImageButton':return {AddItems:function(menu,tag,tagName){if (tagName=='INPUT'&&tag.type=='image'){menu.AddSeparator();menu.AddItem('ImageButton',FCKLang.ImageButtonProp,55);}}};case 'Button':return {AddItems:function(menu,tag,tagName){if (tagName=='INPUT'&&(tag.type=='button'||tag.type=='submit'||tag.type=='reset')){menu.AddSeparator();menu.AddItem('Button',FCKLang.ButtonProp,54);}}};case 'Select':return {AddItems:function(menu,tag,tagName){if (tagName=='SELECT'){menu.AddSeparator();menu.AddItem('Select',FCKLang.SelectionFieldProp,53);}}};case 'Textarea':return {AddItems:function(menu,tag,tagName){if (tagName=='TEXTAREA'){menu.AddSeparator();menu.AddItem('Textarea',FCKLang.TextareaProp,52);}}};case 'BulletedList':return {AddItems:function(menu,tag,tagName){if (FCKSelection.HasAncestorNode('UL')){menu.AddSeparator();menu.AddItem('BulletedList',FCKLang.BulletedListProp,27);}}};case 'NumberedList':return {AddItems:function(menu,tag,tagName){if (FCKSelection.HasAncestorNode('OL')){menu.AddSeparator();menu.AddItem('NumberedList',FCKLang.NumberedListProp,26);}}};};return null;};function FCK_ContextMenu_OnBeforeOpen(){FCK.Events.FireEvent('OnSelectionChange');var A,sTagName;if ((A=FCKSelection.GetSelectedElement())) sTagName=A.tagName;var B=FCK.ContextMenu._InnerContextMenu;B.RemoveAllItems();var C=FCK.ContextMenu.Listeners;for (var i=0;i<C.length;i++) C[i].AddItems(B,A,sTagName);};function FCK_ContextMenu_OnItemClick(A){FCK.Focus();FCKCommands.GetCommand(A.Name).Execute();};
+var FCKPlugin=function(A,B,C){this.Name=A;this.BasePath=C?C:FCKConfig.PluginsPath;this.Path=this.BasePath+A+'/';if (!B||B.length==0) this.AvailableLangs=[];else this.AvailableLangs=B.split(',');};FCKPlugin.prototype.Load=function(){if (this.AvailableLangs.length>0){var A;if (this.AvailableLangs.IndexOf(FCKLanguageManager.ActiveLanguage.Code)>=0) A=FCKLanguageManager.ActiveLanguage.Code;else A=this.AvailableLangs[0];LoadScript(this.Path+'lang/'+A+'.js');};LoadScript(this.Path+'fckplugin.js');}
+var FCKPlugins=FCK.Plugins={};FCKPlugins.ItemsCount=0;FCKPlugins.Items={};FCKPlugins.Load=function(){var A=FCKPlugins.Items;for (var i=0;i<FCKConfig.Plugins.Items.length;i++){var B=FCKConfig.Plugins.Items[i];var C=A[B[0]]=new FCKPlugin(B[0],B[1],B[2]);FCKPlugins.ItemsCount++;};for (var s in A) A[s].Load();FCKPlugins.Load=null;}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/js/fckeditorcode_ie.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/js/fckeditorcode_ie.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/js/fckeditorcode_ie.js	(revision 1280)
@@ -0,0 +1,109 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ * 
+ * == BEGIN LICENSE ==
+ * 
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ * 
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ * 
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ * 
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ * 
+ * == END LICENSE ==
+ * 
+ * This file has been compressed for better performance. The original source
+ * can be found at "editor/_source".
+ */
+
+var FCK_STATUS_NOTLOADED=window.parent.FCK_STATUS_NOTLOADED=0;var FCK_STATUS_ACTIVE=window.parent.FCK_STATUS_ACTIVE=1;var FCK_STATUS_COMPLETE=window.parent.FCK_STATUS_COMPLETE=2;var FCK_TRISTATE_OFF=window.parent.FCK_TRISTATE_OFF=0;var FCK_TRISTATE_ON=window.parent.FCK_TRISTATE_ON=1;var FCK_TRISTATE_DISABLED=window.parent.FCK_TRISTATE_DISABLED=-1;var FCK_UNKNOWN=window.parent.FCK_UNKNOWN=-9;var FCK_TOOLBARITEM_ONLYICON=window.parent.FCK_TOOLBARITEM_ONLYICON=0;var FCK_TOOLBARITEM_ONLYTEXT=window.parent.FCK_TOOLBARITEM_ONLYTEXT=1;var FCK_TOOLBARITEM_ICONTEXT=window.parent.FCK_TOOLBARITEM_ICONTEXT=2;var FCK_EDITMODE_WYSIWYG=window.parent.FCK_EDITMODE_WYSIWYG=0;var FCK_EDITMODE_SOURCE=window.parent.FCK_EDITMODE_SOURCE=1;var FCK_IMAGES_PATH='images/';var FCK_SPACER_PATH='images/spacer.gif';var CTRL=1000;var SHIFT=2000;var ALT=4000;var FCK_STYLE_BLOCK=0;var FCK_STYLE_INLINE=1;var FCK_STYLE_OBJECT=2;
+String.prototype.Contains=function(A){return (this.indexOf(A)>-1);};String.prototype.Equals=function(){var A=arguments;if (A.length==1&&A[0].pop) A=A[0];for (var i=0;i<A.length;i++){if (this==A[i]) return true;};return false;};String.prototype.IEquals=function(){var A=this.toUpperCase();var B=arguments;if (B.length==1&&B[0].pop) B=B[0];for (var i=0;i<B.length;i++){if (A==B[i].toUpperCase()) return true;};return false;};String.prototype.ReplaceAll=function(A,B){var C=this;for (var i=0;i<A.length;i++){C=C.replace(A[i],B[i]);};return C;};String.prototype.StartsWith=function(A){return (this.substr(0,A.length)==A);};String.prototype.EndsWith=function(A,B){var C=this.length;var D=A.length;if (D>C) return false;if (B){var E=new RegExp(A+'$','i');return E.test(this);}else return (D==0||this.substr(C-D,D)==A);};String.prototype.Remove=function(A,B){var s='';if (A>0) s=this.substring(0,A);if (A+B<this.length) s+=this.substring(A+B,this.length);return s;};String.prototype.Trim=function(){return this.replace(/(^[ \t\n\r]*)|([ \t\n\r]*$)/g,'');};String.prototype.LTrim=function(){return this.replace(/^[ \t\n\r]*/g,'');};String.prototype.RTrim=function(){return this.replace(/[ \t\n\r]*$/g,'');};String.prototype.ReplaceNewLineChars=function(A){return this.replace(/\n/g,A);};String.prototype.Replace=function(A,B,C){if (typeof B=='function'){return this.replace(A,function(){return B.apply(C||this,arguments);});}else return this.replace(A,B);};Array.prototype.AddItem=function(A){var i=this.length;this[i]=A;return i;};Array.prototype.IndexOf=function(A){for (var i=0;i<this.length;i++){if (this[i]==A) return i;};return-1;};
+var	FCKIECleanup=function(A){if (A._FCKCleanupObj) this.Items=A._FCKCleanupObj.Items;else{this.Items=[];A._FCKCleanupObj=this;FCKTools.AddEventListenerEx(A,'unload',FCKIECleanup_Cleanup);}};FCKIECleanup.prototype.AddItem=function(A,B){this.Items.push([A,B]);};function FCKIECleanup_Cleanup(){if (!this._FCKCleanupObj||!window.FCKUnloadFlag) return;var A=this._FCKCleanupObj.Items;while (A.length>0){var B=A.pop();if (B) B[1].call(B[0]);};this._FCKCleanupObj=null;if (CollectGarbage) CollectGarbage();};
+var s=navigator.userAgent.toLowerCase();var FCKBrowserInfo={IsIE:/*@cc_on!@*/false,IsIE7:/*@cc_on!@*/false&&s.Contains('msie 7'),IsGecko:s.Contains('gecko/'),IsSafari:s.Contains(' applewebkit/'),IsOpera:!!window.opera,IsMac:s.Contains('macintosh')};(function(A){A.IsGeckoLike=(A.IsGecko||A.IsSafari||A.IsOpera);if (A.IsGecko){var B=s.match(/gecko\/(\d+)/)[1];A.IsGecko10=((B<20051111)||(/rv:1\.7/.test(s)));A.IsGecko19=/rv:1\.9/.test(s);}else A.IsGecko10=false;})(FCKBrowserInfo);
+var FCKURLParams={};(function(){var A=document.location.search.substr(1).split('&');for (var i=0;i<A.length;i++){var B=A[i].split('=');var C=decodeURIComponent(B[0]);var D=decodeURIComponent(B[1]);FCKURLParams[C]=D;}})();
+var FCKEvents=function(A){this.Owner=A;this._RegisteredEvents={};};FCKEvents.prototype.AttachEvent=function(A,B){var C;if (!(C=this._RegisteredEvents[A])) this._RegisteredEvents[A]=[B];else C.push(B);};FCKEvents.prototype.FireEvent=function(A,B){var C=true;var D=this._RegisteredEvents[A];if (D){for (var i=0;i<D.length;i++){try{C=(D[i](this.Owner,B)&&C);}catch(e){if (e.number!=-2146823277) throw e;}}};return C;};
+var FCKDataProcessor=function(){};FCKDataProcessor.prototype={ConvertToHtml:function(A){if (FCKConfig.FullPage){FCK.DocTypeDeclaration=A.match(FCKRegexLib.DocTypeTag);if (!FCKRegexLib.HasBodyTag.test(A)) A='<body>'+A+'</body>';if (!FCKRegexLib.HtmlOpener.test(A)) A='<html dir="'+FCKConfig.ContentLangDirection+'">'+A+'</html>';if (!FCKRegexLib.HeadOpener.test(A)) A=A.replace(FCKRegexLib.HtmlOpener,'$&<head><title></title></head>');return A;}else{var B=FCKConfig.DocType+'<html dir="'+FCKConfig.ContentLangDirection+'"';if (FCKBrowserInfo.IsIE&&FCKConfig.DocType.length>0&&!FCKRegexLib.Html4DocType.test(FCKConfig.DocType)) B+=' style="overflow-y: scroll"';B+='><head><title></title></head><body'+FCKConfig.GetBodyAttributes()+'>'+A+'</body></html>';return B;}},ConvertToDataFormat:function(A,B,C,D){var E=FCKXHtml.GetXHTML(A,!B,D);if (C&&FCKRegexLib.EmptyOutParagraph.test(E)) return '';return E;},FixHtml:function(A){return A;}};
+var FCK={Name:FCKURLParams['InstanceName'],Status:0,EditMode:0,Toolbar:null,HasFocus:false,DataProcessor:new FCKDataProcessor(),AttachToOnSelectionChange:function(A){this.Events.AttachEvent('OnSelectionChange',A);},GetLinkedFieldValue:function(){return this.LinkedField.value;},GetParentForm:function(){return this.LinkedField.form;},StartupValue:'',IsDirty:function(){if (this.EditMode==1) return (this.StartupValue!=this.EditingArea.Textarea.value);else return (this.StartupValue!=this.EditorDocument.body.innerHTML);},ResetIsDirty:function(){if (this.EditMode==1) this.StartupValue=this.EditingArea.Textarea.value;else if (this.EditorDocument.body) this.StartupValue=this.EditorDocument.body.innerHTML;},StartEditor:function(){this.TempBaseTag=FCKConfig.BaseHref.length>0?'<base href="'+FCKConfig.BaseHref+'" _fcktemp="true"></base>':'';var A=FCK.KeystrokeHandler=new FCKKeystrokeHandler();A.OnKeystroke=_FCK_KeystrokeHandler_OnKeystroke;A.SetKeystrokes(FCKConfig.Keystrokes);if (FCKBrowserInfo.IsIE7){if ((CTRL+86/*V*/) in A.Keystrokes) A.SetKeystrokes([CTRL+86,true]);if ((SHIFT+45/*INS*/) in A.Keystrokes) A.SetKeystrokes([SHIFT+45,true]);};A.SetKeystrokes([CTRL+8,true]);this.EditingArea=new FCKEditingArea(document.getElementById('xEditingArea'));this.EditingArea.FFSpellChecker=FCKConfig.FirefoxSpellChecker;this.SetData(this.GetLinkedFieldValue(),true);FCKTools.AddEventListener(document,"keydown",this._TabKeyHandler);},Focus:function(){FCK.EditingArea.Focus();},SetStatus:function(A){this.Status=A;if (A==1){FCKFocusManager.AddWindow(window,true);if (FCKBrowserInfo.IsIE) FCKFocusManager.AddWindow(window.frameElement,true);if (FCKConfig.StartupFocus) FCK.Focus();};this.Events.FireEvent('OnStatusChange',A);},FixBody:function(){var A=FCKConfig.EnterMode;if (A!='p'&&A!='div') return;var B=this.EditorDocument;if (!B) return;var C=B.body;if (!C) return;FCKDomTools.TrimNode(C);var D=C.firstChild;var E;while (D){var F=false;switch (D.nodeType){case 1:if (!FCKListsLib.BlockElements[D.nodeName.toLowerCase()]) F=true;break;case 3:if (E||D.nodeValue.Trim().length>0) F=true;};if (F){var G=D.parentNode;if (!E) E=G.insertBefore(B.createElement(A),D);E.appendChild(G.removeChild(D));D=E.nextSibling;}else{if (E){FCKDomTools.TrimNode(E);E=null;};D=D.nextSibling;}};if (E) FCKDomTools.TrimNode(E);},GetData:function(A){if (FCK.EditMode==1) return FCK.EditingArea.Textarea.value;this.FixBody();var B=FCK.EditorDocument;if (!B) return null;var C=FCKConfig.FullPage;var D=FCK.DataProcessor.ConvertToDataFormat(C?B.documentElement:B.body,!C,FCKConfig.IgnoreEmptyParagraphValue,A);D=FCK.ProtectEventsRestore(D);if (FCKBrowserInfo.IsIE) D=D.replace(FCKRegexLib.ToReplace,'$1');if (C){if (FCK.DocTypeDeclaration&&FCK.DocTypeDeclaration.length>0) D=FCK.DocTypeDeclaration+'\n'+D;if (FCK.XmlDeclaration&&FCK.XmlDeclaration.length>0) D=FCK.XmlDeclaration+'\n'+D;};return FCKConfig.ProtectedSource.Revert(D);},UpdateLinkedField:function(){var A=FCK.GetXHTML(FCKConfig.FormatOutput);if (FCKConfig.HtmlEncodeOutput) A=FCKTools.HTMLEncode(A);FCK.LinkedField.value=A;FCK.Events.FireEvent('OnAfterLinkedFieldUpdate');},RegisteredDoubleClickHandlers:{},OnDoubleClick:function(A){var B=FCK.RegisteredDoubleClickHandlers[A.tagName];if (B) B(A);},RegisterDoubleClickHandler:function(A,B){FCK.RegisteredDoubleClickHandlers[B.toUpperCase()]=A;},OnAfterSetHTML:function(){FCKDocumentProcessor.Process(FCK.EditorDocument);FCKUndo.SaveUndoStep();FCK.Events.FireEvent('OnSelectionChange');FCK.Events.FireEvent('OnAfterSetHTML');},ProtectUrls:function(A){A=A.replace(FCKRegexLib.ProtectUrlsA,'$& _fcksavedurl=$1');A=A.replace(FCKRegexLib.ProtectUrlsImg,'$& _fcksavedurl=$1');return A;},ProtectEvents:function(A){return A.replace(FCKRegexLib.TagsWithEvent,_FCK_ProtectEvents_ReplaceTags);},ProtectEventsRestore:function(A){return A.replace(FCKRegexLib.ProtectedEvents,_FCK_ProtectEvents_RestoreEvents);},ProtectTags:function(A){var B=FCKConfig.ProtectedTags;if (FCKBrowserInfo.IsIE) B+=B.length>0?'|ABBR|XML|EMBED':'ABBR|XML|EMBED';var C;if (B.length>0){C=new RegExp('<('+B+')(?!\w|:)','gi');A=A.replace(C,'<FCK:$1');C=new RegExp('<\/('+B+')>','gi');A=A.replace(C,'<\/FCK:$1>');};B='META';if (FCKBrowserInfo.IsIE) B+='|HR';C=new RegExp('<(('+B+')(?=\\s|>|/)[\\s\\S]*?)/?>','gi');A=A.replace(C,'<FCK:$1 />');return A;},SetData:function(A,B){this.EditingArea.Mode=FCK.EditMode;if (FCK.EditMode==0){this._ForceResetIsDirty=(B===true);A=FCKConfig.ProtectedSource.Protect(A);A=FCK.DataProcessor.ConvertToHtml(A);A=A.replace(FCKRegexLib.InvalidSelfCloseTags,'$1></$2>');A=FCK.ProtectEvents(A);A=FCK.ProtectUrls(A);A=FCK.ProtectTags(A);if (FCK.TempBaseTag.length>0&&!FCKRegexLib.HasBaseTag.test(A)) A=A.replace(FCKRegexLib.HeadOpener,'$&'+FCK.TempBaseTag);var C='';if (!FCKConfig.FullPage) C+=_FCK_GetEditorAreaStyleTags();if (FCKBrowserInfo.IsIE) C+=FCK._GetBehaviorsStyle();else if (FCKConfig.ShowBorders) C+='<link href="'+FCKConfig.FullBasePath+'css/fck_showtableborders_gecko.css" rel="stylesheet" type="text/css" _fcktemp="true" />';C+='<link href="'+FCKConfig.FullBasePath+'css/fck_internal.css" rel="stylesheet" type="text/css" _fcktemp="true" />';A=A.replace(FCKRegexLib.HeadCloser,C+'$&');this.EditingArea.OnLoad=_FCK_EditingArea_OnLoad;this.EditingArea.Start(A);}else{FCK.EditorWindow=null;FCK.EditorDocument=null;FCKDomTools.PaddingNode=null;this.EditingArea.OnLoad=null;this.EditingArea.Start(A);this.EditingArea.Textarea._FCKShowContextMenu=true;FCK.EnterKeyHandler=null;if (B) this.ResetIsDirty();FCK.KeystrokeHandler.AttachToElement(this.EditingArea.Textarea);this.EditingArea.Textarea.focus();FCK.Events.FireEvent('OnAfterSetHTML');};if (FCKBrowserInfo.IsGecko) window.onresize();},HasFocus:false,RedirectNamedCommands:{},ExecuteNamedCommand:function(A,B,C,D){if (!D) FCKUndo.SaveUndoStep();if (!C&&FCK.RedirectNamedCommands[A]!=null) FCK.ExecuteRedirectedNamedCommand(A,B);else{FCK.Focus();FCK.EditorDocument.execCommand(A,false,B);FCK.Events.FireEvent('OnSelectionChange');};if (!D) FCKUndo.SaveUndoStep();},GetNamedCommandState:function(A){try{if (FCKBrowserInfo.IsSafari&&FCK.EditorWindow&&A.IEquals('Paste')) return 0;if (!FCK.EditorDocument.queryCommandEnabled(A)) return -1;else{return FCK.EditorDocument.queryCommandState(A)?1:0;}}catch (e){return 0;}},GetNamedCommandValue:function(A){var B='';var C=FCK.GetNamedCommandState(A);if (C==-1) return null;try{B=this.EditorDocument.queryCommandValue(A);}catch(e) {};return B?B:'';},Paste:function(A){if (FCK.Status!=2||!FCK.Events.FireEvent('OnPaste')) return false;return A||FCK._ExecPaste();},PasteFromWord:function(){FCKDialog.OpenDialog('FCKDialog_Paste',FCKLang.PasteFromWord,'dialog/fck_paste.html',400,330,'Word');},Preview:function(){var A=FCKConfig.ScreenWidth*0.8;var B=FCKConfig.ScreenHeight*0.7;var C=(FCKConfig.ScreenWidth-A)/2;var D=window.open('',null,'toolbar=yes,location=no,status=yes,menubar=yes,scrollbars=yes,resizable=yes,width='+A+',height='+B+',left='+C);var E;if (FCKConfig.FullPage){if (FCK.TempBaseTag.length>0) E=FCK.TempBaseTag+FCK.GetXHTML();else E=FCK.GetXHTML();}else{E=FCKConfig.DocType+'<html dir="'+FCKConfig.ContentLangDirection+'"><head>'+FCK.TempBaseTag+'<title>'+FCKLang.Preview+'</title>'+_FCK_GetEditorAreaStyleTags()+'</head><body'+FCKConfig.GetBodyAttributes()+'>'+FCK.GetXHTML()+'</body></html>';};D.document.write(E);D.document.close();},SwitchEditMode:function(A){var B=(FCK.EditMode==0);var C=FCK.IsDirty();var D;if (B){FCKCommands.GetCommand('ShowBlocks').SaveState();if (!A&&FCKBrowserInfo.IsIE) FCKUndo.SaveUndoStep();D=FCK.GetXHTML(FCKConfig.FormatSource);if (D==null) return false;}else D=this.EditingArea.Textarea.value;FCK.EditMode=B?1:0;FCK.SetData(D,!C);FCK.Focus();FCKTools.RunFunction(FCK.ToolbarSet.RefreshModeState,FCK.ToolbarSet);return true;},InsertElement:function(A){if (typeof A=='string') A=this.EditorDocument.createElement(A);var B=A.nodeName.toLowerCase();var C=new FCKDomRange(this.EditorWindow);if (FCKListsLib.BlockElements[B]!=null){C.SplitBlock();C.InsertNode(A);var D=FCKDomTools.GetNextSourceElement(A,false,null,['hr','br','param','img','area','input']);if (!D&&FCKConfig.EnterMode!='br'){D=this.EditorDocument.body.appendChild(this.EditorDocument.createElement(FCKConfig.EnterMode));if (FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(D);};if (FCKListsLib.EmptyElements[B]==null) C.MoveToElementEditStart(A);else if (D) C.MoveToElementEditStart(D);else C.MoveToPosition(A,4);if (FCKBrowserInfo.IsGecko){if (D) D.scrollIntoView(false);A.scrollIntoView(false);}}else{C.MoveToSelection();C.DeleteContents();C.InsertNode(A);C.SetStart(A,4);C.SetEnd(A,4);};C.Select();C.Release();this.Focus();return A;},_InsertBlockElement:function(A){},_IsFunctionKey:function(A){if (A>=16&&A<=20) return true;if (A==27||(A>=33&&A<=40)) return true;if (A==45) return true;return false;},_KeyDownListener:function(A){if (!A) A=FCK.EditorWindow.event;if (FCK.EditorWindow){if (!FCK._IsFunctionKey(A.keyCode)&&!(A.ctrlKey||A.metaKey)&&!(A.keyCode==46)) FCK._KeyDownUndo();};return true;},_KeyDownUndo:function(){if (!FCKUndo.Typing){FCKUndo.SaveUndoStep();FCKUndo.Typing=true;FCK.Events.FireEvent("OnSelectionChange");};FCKUndo.TypesCount++;FCKUndo.Changed=1;if (FCKUndo.TypesCount>FCKUndo.MaxTypes){FCKUndo.TypesCount=0;FCKUndo.SaveUndoStep();}},_TabKeyHandler:function(A){if (!A) A=window.event;var B=A.keyCode;if (B==9&&FCK.EditMode!=0){if (FCKBrowserInfo.IsIE){var C=document.selection.createRange();if (C.parentElement()!=FCK.EditingArea.Textarea) return true;C.text='\t';C.select();}else{var a=[];var D=FCK.EditingArea.Textarea;var E=D.selectionStart;var F=D.selectionEnd;a.push(D.value.substr(0,E));a.push('\t');a.push(D.value.substr(F));D.value=a.join('');D.setSelectionRange(E+1,E+1);};if (A.preventDefault) return A.preventDefault();return A.returnValue=false;};return true;}};FCK.Events=new FCKEvents(FCK);FCK.GetHTML=FCK.GetXHTML=FCK.GetData;FCK.SetHTML=FCK.SetData;FCK.InsertElementAndGetIt=FCK.CreateElement=FCK.InsertElement;function _FCK_ProtectEvents_ReplaceTags(A){return A.replace(FCKRegexLib.EventAttributes,_FCK_ProtectEvents_ReplaceEvents);};function _FCK_ProtectEvents_ReplaceEvents(A,B){return ' '+B+'_fckprotectedatt="'+encodeURIComponent(A)+'"';};function _FCK_ProtectEvents_RestoreEvents(A,B){return decodeURIComponent(B);};function _FCK_MouseEventsListener(A){if (!A) A=window.event;if (A.type=='mousedown') FCK.MouseDownFlag=true;else if (A.type=='mouseup') FCK.MouseDownFlag=false;else if (A.type=='mousemove') FCK.Events.FireEvent('OnMouseMove',A);};function _FCK_PaddingNodeListener(){if (FCKConfig.EnterMode.IEquals('br')) return;FCKDomTools.EnforcePaddingNode(FCK.EditorDocument,FCKConfig.EnterMode);if (!FCKBrowserInfo.IsIE&&FCKDomTools.PaddingNode){var A=FCK.EditorWindow.getSelection();if (A&&A.rangeCount==1){var B=A.getRangeAt(0);if (B.collapsed&&B.startContainer==FCK.EditorDocument.body&&B.startOffset==0){B.selectNodeContents(FCKDomTools.PaddingNode);B.collapse(true);A.removeAllRanges();A.addRange(B);}}}};function _FCK_EditingArea_OnLoad(){FCK.EditorWindow=FCK.EditingArea.Window;FCK.EditorDocument=FCK.EditingArea.Document;FCK.InitializeBehaviors();FCK.AttachToOnSelectionChange(_FCK_PaddingNodeListener);FCK.MouseDownFlag=false;FCKTools.AddEventListener(FCK.EditorDocument,'mousemove',_FCK_MouseEventsListener);FCKTools.AddEventListener(FCK.EditorDocument,'mousedown',_FCK_MouseEventsListener);FCKTools.AddEventListener(FCK.EditorDocument,'mouseup',_FCK_MouseEventsListener);if (FCKBrowserInfo.IsSafari){var A=function(evt){if (!(evt.ctrlKey||evt.metaKey)) return;if (FCK.EditMode!=0) return;switch (evt.keyCode){case 89:FCKUndo.Redo();break;case 90:FCKUndo.Undo();break;}};FCKTools.AddEventListener(FCK.EditorDocument,'keyup',A);};FCK.EnterKeyHandler=new FCKEnterKey(FCK.EditorWindow,FCKConfig.EnterMode,FCKConfig.ShiftEnterMode,FCKConfig.TabSpaces);FCK.KeystrokeHandler.AttachToElement(FCK.EditorDocument);if (FCK._ForceResetIsDirty) FCK.ResetIsDirty();if (FCKBrowserInfo.IsIE&&FCK.HasFocus) FCK.EditorDocument.body.setActive();FCK.OnAfterSetHTML();FCKCommands.GetCommand('ShowBlocks').RestoreState();if (FCK.Status!=0) return;if (FCKConfig.Debug) FCKDebug._GetWindow();FCK.SetStatus(1);};function _FCK_GetEditorAreaStyleTags(){var A='';var B=FCKConfig.EditorAreaCSS;var C=FCKConfig.EditorAreaStyles;for (var i=0;i<B.length;i++) A+='<link href="'+B[i]+'" rel="stylesheet" type="text/css" />';if (C&&C.length>0) A+="<style>"+C+"</style>";return A;};function _FCK_KeystrokeHandler_OnKeystroke(A,B){if (FCK.Status!=2) return false;if (FCK.EditMode==0){switch (B){case 'Paste':return!FCK.Paste();case 'Cut':FCKUndo.SaveUndoStep();return false;}}else{if (B.Equals('Paste','Undo','Redo','SelectAll','Cut')) return false;};var C=FCK.Commands.GetCommand(B);return (C.Execute.apply(C,FCKTools.ArgumentsToArray(arguments,2))!==false);};(function(){var A=window.parent.document;var B=A.getElementById(FCK.Name);var i=0;while (B||i==0){if (B&&B.tagName.toLowerCase().Equals('input','textarea')){FCK.LinkedField=B;break;};B=A.getElementsByName(FCK.Name)[i++];}})();var FCKTempBin={Elements:[],AddElement:function(A){var B=this.Elements.length;this.Elements[B]=A;return B;},RemoveElement:function(A){var e=this.Elements[A];this.Elements[A]=null;return e;},Reset:function(){var i=0;while (i<this.Elements.length) this.Elements[i++]=null;this.Elements.length=0;}};var FCKFocusManager=FCK.FocusManager={IsLocked:false,AddWindow:function(A,B){var C;if (FCKBrowserInfo.IsIE) C=A.nodeType==1?A:A.frameElement?A.frameElement:A.document;else if (FCKBrowserInfo.IsSafari) C=A;else C=A.document;FCKTools.AddEventListener(C,'blur',FCKFocusManager_Win_OnBlur);FCKTools.AddEventListener(C,'focus',B?FCKFocusManager_Win_OnFocus_Area:FCKFocusManager_Win_OnFocus);},RemoveWindow:function(A){if (FCKBrowserInfo.IsIE) oTarget=A.nodeType==1?A:A.frameElement?A.frameElement:A.document;else oTarget=A.document;FCKTools.RemoveEventListener(oTarget,'blur',FCKFocusManager_Win_OnBlur);FCKTools.RemoveEventListener(oTarget,'focus',FCKFocusManager_Win_OnFocus_Area);FCKTools.RemoveEventListener(oTarget,'focus',FCKFocusManager_Win_OnFocus);},Lock:function(){this.IsLocked=true;},Unlock:function(){if (this._HasPendingBlur) FCKFocusManager._Timer=window.setTimeout(FCKFocusManager_FireOnBlur,100);this.IsLocked=false;},_ResetTimer:function(){this._HasPendingBlur=false;if (this._Timer){window.clearTimeout(this._Timer);delete this._Timer;}}};function FCKFocusManager_Win_OnBlur(){if (typeof(FCK)!='undefined'&&FCK.HasFocus){FCKFocusManager._ResetTimer();FCKFocusManager._Timer=window.setTimeout(FCKFocusManager_FireOnBlur,100);}};function FCKFocusManager_FireOnBlur(){if (FCKFocusManager.IsLocked) FCKFocusManager._HasPendingBlur=true;else{FCK.HasFocus=false;FCK.Events.FireEvent("OnBlur");}};function FCKFocusManager_Win_OnFocus_Area(){FCK.Focus();FCKFocusManager_Win_OnFocus();};function FCKFocusManager_Win_OnFocus(){FCKFocusManager._ResetTimer();if (!FCK.HasFocus&&!FCKFocusManager.IsLocked){FCK.HasFocus=true;FCK.Events.FireEvent("OnFocus");}};
+FCK.Description="FCKeditor for Internet Explorer 5.5+";FCK._GetBehaviorsStyle=function(){if (!FCK._BehaviorsStyle){var A=FCKConfig.FullBasePath;var B='';var C;C='<style type="text/css" _fcktemp="true">';if (FCKConfig.ShowBorders) B='url('+A+'css/behaviors/showtableborders.htc)';C+='INPUT,TEXTAREA,SELECT,.FCK__Anchor,.FCK__PageBreak,.FCK__InputHidden';if (FCKConfig.DisableObjectResizing){C+=',IMG';B+=' url('+A+'css/behaviors/disablehandles.htc)';};C+=' { behavior: url('+A+'css/behaviors/disablehandles.htc) ; }';if (B.length>0) C+='TABLE { behavior: '+B+' ; }';C+='</style>';FCK._BehaviorsStyle=C;};return FCK._BehaviorsStyle;};function Doc_OnMouseUp(){if (FCK.EditorWindow.event.srcElement.tagName=='HTML'){FCK.Focus();FCK.EditorWindow.event.cancelBubble=true;FCK.EditorWindow.event.returnValue=false;}};function Doc_OnPaste(){var A=FCK.EditorDocument.body;A.detachEvent('onpaste',Doc_OnPaste);var B=FCK.Paste(!FCKConfig.ForcePasteAsPlainText&&!FCKConfig.AutoDetectPasteFromWord);A.attachEvent('onpaste',Doc_OnPaste);return B;};function Doc_OnDblClick(){FCK.OnDoubleClick(FCK.EditorWindow.event.srcElement);FCK.EditorWindow.event.cancelBubble=true;};function Doc_OnSelectionChange(){FCK.Events.FireEvent("OnSelectionChange");};function Doc_OnDrop(){if (FCK.MouseDownFlag){FCK.MouseDownFlag=false;return;};var A=FCK.EditorWindow.event;if (FCKConfig.ForcePasteAsPlainText){if (FCK._CheckIsPastingEnabled()||FCKConfig.ShowDropDialog) FCK.PasteAsPlainText(A.dataTransfer.getData('Text'));}else{if (FCKConfig.ShowDropDialog) FCKTools.RunFunction(FCKDialog.OpenDialog,FCKDialog,['FCKDialog_Paste',FCKLang.Paste,'dialog/fck_paste.html',400,330,'Security']);};A.returnValue=false;A.cancelBubble=true;};FCK.InitializeBehaviors=function(A){this.EditorDocument.attachEvent('onmouseup',Doc_OnMouseUp);this.EditorDocument.body.attachEvent('onpaste',Doc_OnPaste);this.EditorDocument.body.attachEvent('ondrop',Doc_OnDrop);FCK.ContextMenu._InnerContextMenu.AttachToElement(FCK.EditorDocument.body);this.EditorDocument.attachEvent("onkeydown",FCK._KeyDownListener);this.EditorDocument.attachEvent("ondblclick",Doc_OnDblClick);this.EditorDocument.attachEvent("onselectionchange",Doc_OnSelectionChange);};FCK.InsertHtml=function(A){A=FCKConfig.ProtectedSource.Protect(A);A=FCK.ProtectEvents(A);A=FCK.ProtectUrls(A);A=FCK.ProtectTags(A);FCK.EditorWindow.focus();FCKUndo.SaveUndoStep();var B=FCK.EditorDocument.selection;if (B.type.toLowerCase()=='control') B.clear();A='<span id="__fakeFCKRemove__">&nbsp;</span>'+A;B.createRange().pasteHTML(A);FCK.EditorDocument.getElementById('__fakeFCKRemove__').removeNode(true);FCKDocumentProcessor.Process(FCK.EditorDocument);this.Events.FireEvent("OnSelectionChange");};FCK.SetInnerHtml=function(A){var B=FCK.EditorDocument;B.body.innerHTML='<div id="__fakeFCKRemove__">&nbsp;</div>'+A;B.getElementById('__fakeFCKRemove__').removeNode(true);};function FCK_PreloadImages(){var A=new FCKImagePreloader();A.AddImages(FCKConfig.PreloadImages);A.AddImages(FCKConfig.SkinPath+'fck_strip.gif');A.OnComplete=LoadToolbarSetup;A.Start();};function Document_OnContextMenu(){return (event.srcElement._FCKShowContextMenu==true);};document.oncontextmenu=Document_OnContextMenu;function FCK_Cleanup(){this.LinkedField=null;this.EditorWindow=null;this.EditorDocument=null;};FCK._ExecPaste=function(){if (FCK._PasteIsRunning) return true;if (FCKConfig.ForcePasteAsPlainText){FCK.PasteAsPlainText();return false;};var A=FCK._CheckIsPastingEnabled(true);if (A===false) FCKTools.RunFunction(FCKDialog.OpenDialog,FCKDialog,['FCKDialog_Paste',FCKLang.Paste,'dialog/fck_paste.html',400,330,'Security']);else{if (FCKConfig.AutoDetectPasteFromWord&&A.length>0){var B=/<\w[^>]*(( class="?MsoNormal"?)|(="mso-))/gi;if (B.test(A)){if (confirm(FCKLang.PasteWordConfirm)){FCK.PasteFromWord();return false;}}};FCK._PasteIsRunning=true;FCK.ExecuteNamedCommand('Paste');delete FCK._PasteIsRunning;};return false;};FCK.PasteAsPlainText=function(A){if (!FCK._CheckIsPastingEnabled()){FCKDialog.OpenDialog('FCKDialog_Paste',FCKLang.PasteAsText,'dialog/fck_paste.html',400,330,'PlainText');return;};var B=null;if (!A) B=clipboardData.getData("Text");else B=A;if (B&&B.length>0){B=FCKTools.HTMLEncode(B);B=FCKTools.ProcessLineBreaks(window,FCKConfig,B);this.InsertHtml(B);}};FCK._CheckIsPastingEnabled=function(A){FCK._PasteIsEnabled=false;document.body.attachEvent('onpaste',FCK_CheckPasting_Listener);var B=FCK.GetClipboardHTML();document.body.detachEvent('onpaste',FCK_CheckPasting_Listener);if (FCK._PasteIsEnabled){if (!A) B=true;}else B=false;delete FCK._PasteIsEnabled;return B;};function FCK_CheckPasting_Listener(){FCK._PasteIsEnabled=true;};FCK.GetClipboardHTML=function(){var A=document.getElementById('___FCKHiddenDiv');if (!A){A=document.createElement('DIV');A.id='___FCKHiddenDiv';var B=A.style;B.position='absolute';B.visibility=B.overflow='hidden';B.width=B.height=1;document.body.appendChild(A);};A.innerHTML='';var C=document.body.createTextRange();C.moveToElementText(A);C.execCommand('Paste');var D=A.innerHTML;A.innerHTML='';return D;};FCK.CreateLink=function(A,B){var C=[];FCK.ExecuteNamedCommand('Unlink',null,false,!!B);if (A.length>0){if (FCKSelection.GetType()=='Control'){var D=this.EditorDocument.createElement('A');D.href=A;var E=FCKSelection.GetSelectedElement();E.parentNode.insertBefore(D,E);E.parentNode.removeChild(E);D.appendChild(E);return [D];};var F='javascript:void(0);/*'+(new Date().getTime())+'*/';FCK.ExecuteNamedCommand('CreateLink',F,false,!!B);var G=this.EditorDocument.links;for (i=0;i<G.length;i++){var D=G[i];if (D.getAttribute('href',2)==F){var I=D.innerHTML;D.href=A;D.innerHTML=I;var J=D.lastChild;if (J&&J.nodeName=='BR'){FCKDomTools.InsertAfterNode(D,D.removeChild(J));};C.push(D);}}};return C;};
+var FCKConfig=FCK.Config={};if (document.location.protocol=='file:'){FCKConfig.BasePath=decodeURIComponent(document.location.pathname.substr(1));FCKConfig.BasePath=FCKConfig.BasePath.replace(/\\/gi, '/');var sFullProtocol=document.location.href.match(/^(file\:\/{2,3})/)[1];if (FCKBrowserInfo.IsOpera) sFullProtocol+='localhost/';FCKConfig.BasePath=sFullProtocol+FCKConfig.BasePath.substring(0,FCKConfig.BasePath.lastIndexOf('/')+1);FCKConfig.FullBasePath=FCKConfig.BasePath;}else{FCKConfig.BasePath=document.location.pathname.substring(0,document.location.pathname.lastIndexOf('/')+1);FCKConfig.FullBasePath=document.location.protocol+'//'+document.location.host+FCKConfig.BasePath;};FCKConfig.EditorPath=FCKConfig.BasePath.replace(/editor\/$/,'');try{FCKConfig.ScreenWidth=screen.width;FCKConfig.ScreenHeight=screen.height;}catch (e){FCKConfig.ScreenWidth=800;FCKConfig.ScreenHeight=600;};FCKConfig.ProcessHiddenField=function(){this.PageConfig={};var A=window.parent.document.getElementById(FCK.Name+'___Config');if (!A) return;var B=A.value.split('&');for (var i=0;i<B.length;i++){if (B[i].length==0) continue;var C=B[i].split('=');var D=decodeURIComponent(C[0]);var E=decodeURIComponent(C[1]);if (D=='CustomConfigurationsPath') FCKConfig[D]=E;else if (E.toLowerCase()=="true") this.PageConfig[D]=true;else if (E.toLowerCase()=="false") this.PageConfig[D]=false;else if (E.length>0&&!isNaN(E)) this.PageConfig[D]=parseInt(E,10);else this.PageConfig[D]=E;}};function FCKConfig_LoadPageConfig(){var A=FCKConfig.PageConfig;for (var B in A) FCKConfig[B]=A[B];};function FCKConfig_PreProcess(){var A=FCKConfig;if (A.AllowQueryStringDebug){try{if ((/fckdebug=true/i).test(window.top.location.search)) A.Debug=true;}catch (e) {/*Ignore it. Much probably we are inside a FRAME where the "top" is in another domain (security error).*/}};if (!A.PluginsPath.EndsWith('/')) A.PluginsPath+='/';if (typeof(A.EditorAreaCSS)=='string') A.EditorAreaCSS=A.EditorAreaCSS.split(',');var B=A.ToolbarComboPreviewCSS;if (!B||B.length==0) A.ToolbarComboPreviewCSS=A.EditorAreaCSS;else if (typeof(B)=='string') A.ToolbarComboPreviewCSS=[B];};FCKConfig.ToolbarSets={};FCKConfig.Plugins={};FCKConfig.Plugins.Items=[];FCKConfig.Plugins.Add=function(A,B,C){FCKConfig.Plugins.Items.AddItem([A,B,C]);};FCKConfig.ProtectedSource={};FCKConfig.ProtectedSource._CodeTag=(new Date()).valueOf();FCKConfig.ProtectedSource.RegexEntries=[/<!--[\s\S]*?-->/g,/<script[\s\S]*?<\/script>/gi,/<noscript[\s\S]*?<\/noscript>/gi,/<object[\s\S]+?<\/object>/gi];FCKConfig.ProtectedSource.Add=function(A){this.RegexEntries.AddItem(A);};FCKConfig.ProtectedSource.Protect=function(A){var B=this._CodeTag;function _Replace(protectedSource){var C=FCKTempBin.AddElement(protectedSource);return '<!--{'+B+C+'}-->';};for (var i=0;i<this.RegexEntries.length;i++){A=A.replace(this.RegexEntries[i],_Replace);};return A;};FCKConfig.ProtectedSource.Revert=function(A,B){function _Replace(m,opener,index){var C=B?FCKTempBin.RemoveElement(index):FCKTempBin.Elements[index];return FCKConfig.ProtectedSource.Revert(C,B);};var D=new RegExp("(<|&lt;)!--\\{"+this._CodeTag+"(\\d+)\\}--(>|&gt;)","g");return A.replace(D,_Replace);};FCKConfig.GetBodyAttributes=function(){var A='';if (this.BodyId&&this.BodyId.length>0) A+=' id="'+this.BodyId+'"';if (this.BodyClass&&this.BodyClass.length>0) A+=' class="'+this.BodyClass+'"';return A;};FCKConfig.ApplyBodyAttributes=function(A){if (this.BodyId&&this.BodyId.length>0) A.id=FCKConfig.BodyId;if (this.BodyClass&&this.BodyClass.length>0) A.className+=' '+FCKConfig.BodyClass;};
+var FCKDebug={};FCKDebug._GetWindow=function(){if (!this.DebugWindow||this.DebugWindow.closed) this.DebugWindow=window.open(FCKConfig.BasePath+'fckdebug.html','FCKeditorDebug','menubar=no,scrollbars=yes,resizable=yes,location=no,toolbar=no,width=600,height=500',true);return this.DebugWindow;};FCKDebug.Output=function(A,B,C){if (!FCKConfig.Debug) return;try{this._GetWindow().Output(A,B);}catch (e) {}};FCKDebug.OutputObject=function(A,B){if (!FCKConfig.Debug) return;try{this._GetWindow().OutputObject(A,B);}catch (e) {}}
+var FCKDomTools={MoveChildren:function(A,B,C){if (A==B) return;var D;if (C){while ((D=A.lastChild)) B.insertBefore(A.removeChild(D),B.firstChild);}else{while ((D=A.firstChild)) B.appendChild(A.removeChild(D));}},MoveNode:function(A,B,C){if (C) B.insertBefore(FCKDomTools.RemoveNode(A),B.firstChild);else B.appendChild(FCKDomTools.RemoveNode(A));},TrimNode:function(A){this.LTrimNode(A);this.RTrimNode(A);},LTrimNode:function(A){var B;while ((B=A.firstChild)){if (B.nodeType==3){var C=B.nodeValue.LTrim();var D=B.nodeValue.length;if (C.length==0){A.removeChild(B);continue;}else if (C.length<D){B.splitText(D-C.length);A.removeChild(A.firstChild);}};break;}},RTrimNode:function(A){var B;while ((B=A.lastChild)){if (B.nodeType==3){var C=B.nodeValue.RTrim();var D=B.nodeValue.length;if (C.length==0){B.parentNode.removeChild(B);continue;}else if (C.length<D){B.splitText(C.length);A.lastChild.parentNode.removeChild(A.lastChild);}};break;};if (!FCKBrowserInfo.IsIE){B=A.lastChild;if (B&&B.nodeType==1&&B.nodeName.toLowerCase()=='br'){B.parentNode.removeChild(B);}}},RemoveNode:function(A,B){if (B){var C;while ((C=A.firstChild)) A.parentNode.insertBefore(A.removeChild(C),A);};return A.parentNode.removeChild(A);},GetFirstChild:function(A,B){if (typeof (B)=='string') B=[B];var C=A.firstChild;while(C){if (C.nodeType==1&&C.tagName.Equals.apply(C.tagName,B)) return C;C=C.nextSibling;};return null;},GetLastChild:function(A,B){if (typeof (B)=='string') B=[B];var C=A.lastChild;while(C){if (C.nodeType==1&&(!B||C.tagName.Equals(B))) return C;C=C.previousSibling;};return null;},GetPreviousSourceElement:function(A,B,C,D){if (!A) return null;if (C&&A.nodeType==1&&A.nodeName.IEquals(C)) return null;if (A.previousSibling) A=A.previousSibling;else return this.GetPreviousSourceElement(A.parentNode,B,C,D);while (A){if (A.nodeType==1){if (C&&A.nodeName.IEquals(C)) break;if (!D||!A.nodeName.IEquals(D)) return A;}else if (B&&A.nodeType==3&&A.nodeValue.RTrim().length>0) break;if (A.lastChild) A=A.lastChild;else return this.GetPreviousSourceElement(A,B,C,D);};return null;},GetNextSourceElement:function(A,B,C,D){while((A=this.GetNextSourceNode(A,true))){if (A.nodeType==1){if (C&&A.nodeName.IEquals(C)) break;if (!D||!A.nodeName.IEquals(D)) return A;}else if (B&&A.nodeType==3&&A.nodeValue.RTrim().length>0) break;};return null;},GetNextSourceNode:function(A,B,C,D){if (!A) return null;var E;if (!B&&A.firstChild) E=A.firstChild;else{E=A.nextSibling;if (!E&&(!D||D!=A.parentNode)) return this.GetNextSourceNode(A.parentNode,true,C,D);};if (C&&E&&E.nodeType!=C) return this.GetNextSourceNode(E,false,C,D);return E;},GetPreviousSourceNode:function(A,B,C){if (!A) return null;var D;if (!B&&A.lastChild) D=A.lastChild;else D=(A.previousSibling||this.GetPreviousSourceNode(A.parentNode,true,C));if (C&&D&&D.nodeType!=C) return this.GetPreviousSourceNode(D,false,C);return D;},InsertAfterNode:function(A,B){return A.parentNode.insertBefore(B,A.nextSibling);},GetParents:function(A){var B=[];while (A){B.unshift(A);A=A.parentNode;};return B;},GetCommonParents:function(A,B){var C=this.GetParents(A);var D=this.GetParents(B);var E=[];for (var i=0;i<C.length;i++){if (C[i]==D[i]) E.push(C[i]);};return E;},GetCommonParentNode:function(A,B,C){var D={};if (!C.pop) C=[C];while (C.length>0) D[C.pop().toLowerCase()]=1;var E=this.GetCommonParents(A,B);var F=null;while ((F=E.pop())){if (D[F.nodeName.toLowerCase()]) return F;};return null;},GetIndexOf:function(A){var B=A.parentNode?A.parentNode.firstChild:null;var C=-1;while (B){C++;if (B==A) return C;B=B.nextSibling;};return-1;},PaddingNode:null,EnforcePaddingNode:function(A,B){this.CheckAndRemovePaddingNode(A,B,true);if (A.body.lastChild&&(A.body.lastChild.nodeType!=1||A.body.lastChild.tagName.toLowerCase()==B.toLowerCase())) return;var C=A.createElement(B);if (FCKBrowserInfo.IsGecko&&FCKListsLib.NonEmptyBlockElements[B]) FCKTools.AppendBogusBr(C);this.PaddingNode=C;if (A.body.childNodes.length==1&&A.body.firstChild.nodeType==1&&A.body.firstChild.tagName.toLowerCase()=='br'&&(A.body.firstChild.getAttribute('_moz_dirty')!=null||A.body.firstChild.getAttribute('type')=='_moz')) A.body.replaceChild(C,A.body.firstChild);else A.body.appendChild(C);},CheckAndRemovePaddingNode:function(A,B,C){var D=this.PaddingNode;if (!D) return;if (D.parentNode!=A.body||D.tagName.toLowerCase()!=B||(D.childNodes.length>1)||(D.firstChild&&D.firstChild.nodeValue!='\xa0'&&String(D.firstChild.tagName).toLowerCase()!='br')){this.PaddingNode=null;return;};if (!C){if (D.parentNode.childNodes.length>1) D.parentNode.removeChild(D);this.PaddingNode=null;}},HasAttribute:function(A,B){if (A.hasAttribute) return A.hasAttribute(B);else{var C=A.attributes[B];return (C!=undefined&&C.specified);}},HasAttributes:function(A){var B=A.attributes;for (var i=0;i<B.length;i++){if (FCKBrowserInfo.IsIE&&B[i].nodeName=='class'){if (A.className.length>0) return true;}else if (B[i].specified) return true;};return false;},RemoveAttribute:function(A,B){if (FCKBrowserInfo.IsIE&&B.toLowerCase()=='class') B='className';return A.removeAttribute(B,0);},GetAttributeValue:function(A,B){var C=B;if (typeof B=='string') B=A.attributes[B];else C=B.nodeName;if (B&&B.specified){if (C=='style') return A.style.cssText;else if (C=='class'||C.indexOf('on')==0) return B.nodeValue;else{return A.getAttribute(C,2);}};return null;},Contains:function(A,B){if (A.contains&&B.nodeType==1) return A.contains(B);while ((B=B.parentNode)){if (B==A) return true;};return false;},BreakParent:function(A,B,C){var D=C||new FCKDomRange(FCKTools.GetElementWindow(A));D.SetStart(A,4);D.SetEnd(B,4);var E=D.ExtractContents();D.InsertNode(A.parentNode.removeChild(A));E.InsertAfterNode(A);D.Release(!!C);},GetNodeAddress:function(A,B){var C=[];while (A&&A!=A.ownerDocument.documentElement){var D=A.parentNode;var E=-1;for(var i=0;i<D.childNodes.length;i++){var F=D.childNodes[i];if (B===true&&F.nodeType==3&&F.previousSibling&&F.previousSibling.nodeType==3) continue;E++;if (D.childNodes[i]==A) break;};C.unshift(E);A=A.parentNode;};return C;},GetNodeFromAddress:function(A,B,C){var D=A.documentElement;for (var i=0;i<B.length;i++){var E=B[i];if (!C){D=D.childNodes[E];continue;};var F=-1;for (var j=0;j<D.childNodes.length;j++){var G=D.childNodes[j];if (C===true&&G.nodeType==3&&G.previousSibling&&G.previousSibling.nodeType==3) continue;F++;if (F==E){D=G;break;}}};return D;},CloneElement:function(A){A=A.cloneNode(false);A.removeAttribute('id',false);return A;},ClearElementJSProperty:function(A,B){if (FCKBrowserInfo.IsIE) A.removeAttribute(B);else delete A[B];},SetElementMarker:function (A,B,C,D){var E=String(parseInt(Math.random()*0xfffffff,10));B._FCKMarkerId=E;B[C]=D;if (!A[E]) A[E]={ 'element':B,'markers':{} };A[E]['markers'][C]=D;},ClearElementMarkers:function(A,B,C){var D=B._FCKMarkerId;if (!D) return;this.ClearElementJSProperty(B,'_FCKMarkerId');for (var j in A[D]['markers']) this.ClearElementJSProperty(B,j);if (C) delete A[D];},ClearAllMarkers:function(A){for (var i in A) this.ClearElementMarkers(A,A[i]['element'],true);},ListToArray:function(A,B,C,D,E){if (!A.nodeName.IEquals(['ul','ol'])) return [];if (!D) D=0;if (!C) C=[];for (var i=0;i<A.childNodes.length;i++){var F=A.childNodes[i];if (!F.nodeName.IEquals('li')) continue;var G={ 'parent':A,'indent':D,'contents':[] };if (!E){G.grandparent=A.parentNode;if (G.grandparent&&G.grandparent.nodeName.IEquals('li')) G.grandparent=G.grandparent.parentNode;}else G.grandparent=E;if (B) this.SetElementMarker(B,F,'_FCK_ListArray_Index',C.length);C.push(G);for (var j=0;j<F.childNodes.length;j++){var H=F.childNodes[j];if (H.nodeName.IEquals(['ul','ol'])) this.ListToArray(H,B,C,D+1,G.grandparent);else G.contents.push(H);}};return C;},ArrayToList:function(A,B,C){if (C==undefined) C=0;if (!A||A.length<C+1) return null;var D=A[C].parent.ownerDocument;var E=D.createDocumentFragment();var F=null;var G=C;var H=Math.max(A[C].indent,0);var I=null;while (true){var J=A[G];if (J.indent==H){if (!F||A[G].parent.nodeName!=F.nodeName){F=A[G].parent.cloneNode(false);E.appendChild(F);};I=D.createElement('li');F.appendChild(I);for (var i=0;i<J.contents.length;i++) I.appendChild(J.contents[i].cloneNode(true));G++;}else if (J.indent==Math.max(H,0)+1){var K=this.ArrayToList(A,null,G);I.appendChild(K.listNode);G=K.nextIndex;}else if (J.indent==-1&&C==0&&J.grandparent){var I;if (J.grandparent.nodeName.IEquals(['ul','ol'])) I=D.createElement('li');else{if (FCKConfig.EnterMode.IEquals(['div','p'])&&!J.grandparent.nodeName.IEquals('td')) I=D.createElement(FCKConfig.EnterMode);else I=D.createDocumentFragment();};for (var i=0;i<J.contents.length;i++) I.appendChild(J.contents[i].cloneNode(true));if (I.nodeType==11){if (I.lastChild&&I.lastChild.getAttribute&&I.lastChild.getAttribute('type')=='_moz') I.removeChild(I.lastChild);I.appendChild(D.createElement('br'));};if (I.nodeName.IEquals(FCKConfig.EnterMode)&&I.firstChild){this.TrimNode(I);if (FCKListsLib.BlockBoundaries[I.firstChild.nodeName.toLowerCase()]){var M=D.createDocumentFragment();while (I.firstChild) M.appendChild(I.removeChild(I.firstChild));I=M;}};if (FCKBrowserInfo.IsGeckoLike&&I.nodeName.IEquals(['div','p'])) FCKTools.AppendBogusBr(I);E.appendChild(I);F=null;G++;}else return null;if (A.length<=G||Math.max(A[G].indent,0)<H){break;}};if (B){var N=E.firstChild;while (N){if (N.nodeType==1) this.ClearElementMarkers(B,N);N=this.GetNextSourceNode(N);}};return { 'listNode':E,'nextIndex':G };},GetNextSibling:function(A,B){A=A.nextSibling;while (A&&!B&&A.nodeType!=1&&(A.nodeType!=3||A.nodeValue.length==0)) A=A.nextSibling;return A;},GetPreviousSibling:function(A,B){A=A.previousSibling;while (A&&!B&&A.nodeType!=1&&(A.nodeType!=3||A.nodeValue.length==0)) A=A.previousSibling;return A;},CheckIsEmptyElement:function(A,B){var C=A.firstChild;var D;while (C){if (C.nodeType==1){if (D||!FCKListsLib.InlineNonEmptyElements[C.nodeName.toLowerCase()]) return false;if (!B||B(C)===true) D=C;}else if (C.nodeType==3&&C.nodeValue.length>0) return false;C=C.nextSibling;};return D?this.CheckIsEmptyElement(D,B):true;},SetElementStyles:function(A,B){var C=A.style;for (var D in B) C[D]=B[D];}};
+var FCKTools={};FCKTools.CreateBogusBR=function(A){var B=A.createElement('br');B.setAttribute('type','_moz');return B;};FCKTools.AppendStyleSheet=function(A,B){if (typeof(B)=='string') return this._AppendStyleSheet(A,B);else{var C=[];for (var i=0;i<B.length;i++) C.push(this._AppendStyleSheet(A,B[i]));return C;}};FCKTools.AppendStyleString=function (A,B){this._AppendStyleString(A,B);};FCKTools.GetElementDocument=function (A){return A.ownerDocument||A.document;};FCKTools.GetElementWindow=function(A){return this.GetDocumentWindow(this.GetElementDocument(A));};FCKTools.GetDocumentWindow=function(A){if (FCKBrowserInfo.IsSafari&&!A.parentWindow) this.FixDocumentParentWindow(window.top);return A.parentWindow||A.defaultView;};FCKTools.FixDocumentParentWindow=function(A){if (A.document) A.document.parentWindow=A;for (var i=0;i<A.frames.length;i++) FCKTools.FixDocumentParentWindow(A.frames[i]);};FCKTools.HTMLEncode=function(A){if (!A) return '';A=A.replace(/&/g,'&amp;');A=A.replace(/</g,'&lt;');A=A.replace(/>/g,'&gt;');return A;};FCKTools.HTMLDecode=function(A){if (!A) return '';A=A.replace(/&gt;/g,'>');A=A.replace(/&lt;/g,'<');A=A.replace(/&amp;/g,'&');return A;};FCKTools._ProcessLineBreaksForPMode=function(A,B,C,D,E){var F=0;var G="<p>";var H="</p>";var I="<br />";if (C){G="<li>";H="</li>";F=1;};while (D&&D!=A.FCK.EditorDocument.body){if (D.tagName.toLowerCase()=='p'){F=1;break;};D=D.parentNode;};for (var i=0;i<B.length;i++){var c=B.charAt(i);if (c=='\r') continue;if (c!='\n'){E.push(c);continue;};var n=B.charAt(i+1);if (n=='\r'){i++;n=B.charAt(i+1);};if (n=='\n'){i++;if (F) E.push(H);E.push(G);F=1;}else E.push(I);}};FCKTools._ProcessLineBreaksForDivMode=function(A,B,C,D,E){var F=0;var G="<div>";var H="</div>";if (C){G="<li>";H="</li>";F=1;};while (D&&D!=A.FCK.EditorDocument.body){if (D.tagName.toLowerCase()=='div'){F=1;break;};D=D.parentNode;};for (var i=0;i<B.length;i++){var c=B.charAt(i);if (c=='\r') continue;if (c!='\n'){E.push(c);continue;};if (F){if (E[E.length-1]==G){E.push("&nbsp;");};E.push(H);};E.push(G);F=1;};if (F) E.push(H);};FCKTools._ProcessLineBreaksForBrMode=function(A,B,C,D,E){var F=0;var G="<br />";var H="";if (C){G="<li>";H="</li>";F=1;};for (var i=0;i<B.length;i++){var c=B.charAt(i);if (c=='\r') continue;if (c!='\n'){E.push(c);continue;};if (F&&H.length) E.push (H);E.push(G);F=1;}};FCKTools.ProcessLineBreaks=function(A,B,C){var D=B.EnterMode.toLowerCase();var E=[];var F=0;var G=new A.FCKDomRange(A.FCK.EditorWindow);G.MoveToSelection();var H=G._Range.startContainer;while (H&&H.nodeType!=1) H=H.parentNode;if (H&&H.tagName.toLowerCase()=='li') F=1;if (D=='p') this._ProcessLineBreaksForPMode(A,C,F,H,E);else if (D=='div') this._ProcessLineBreaksForDivMode(A,C,F,H,E);else if (D=='br') this._ProcessLineBreaksForBrMode(A,C,F,H,E);return E.join("");};FCKTools.AddSelectOption=function(A,B,C){var D=FCKTools.GetElementDocument(A).createElement("OPTION");D.text=B;D.value=C;A.options.add(D);return D;};FCKTools.RunFunction=function(A,B,C,D){if (A) this.SetTimeout(A,0,B,C,D);};FCKTools.SetTimeout=function(A,B,C,D,E){return (E||window).setTimeout(function(){if (D) A.apply(C,[].concat(D));else A.apply(C);},B);};FCKTools.SetInterval=function(A,B,C,D,E){return (E||window).setInterval(function(){A.apply(C,D||[]);},B);};FCKTools.ConvertStyleSizeToHtml=function(A){return A.EndsWith('%')?A:parseInt(A,10);};FCKTools.ConvertHtmlSizeToStyle=function(A){return A.EndsWith('%')?A:(A+'px');};FCKTools.GetElementAscensor=function(A,B){var e=A;var C=","+B.toUpperCase()+",";while (e){if (C.indexOf(","+e.nodeName.toUpperCase()+",")!=-1) return e;e=e.parentNode;};return null;};FCKTools.CreateEventListener=function(A,B){var f=function(){var C=[];for (var i=0;i<arguments.length;i++) C.push(arguments[i]);A.apply(this,C.concat(B));};return f;};FCKTools.IsStrictMode=function(A){return ('CSS1Compat'==(A.compatMode||'CSS1Compat'));};FCKTools.ArgumentsToArray=function(A,B,C){B=B||0;C=C||A.length;var D=[];for (var i=B;i<B+C&&i<A.length;i++) D.push(A[i]);return D;};FCKTools.CloneObject=function(A){var B=function() {};B.prototype=A;return new B;};FCKTools.AppendBogusBr=function(A){if (!A) return;var B=this.GetLastItem(A.getElementsByTagName('br'));if (!B||(B.getAttribute('type',2)!='_moz'&&B.getAttribute('_moz_dirty')==null)){var C=this.GetElementDocument(A);if (FCKBrowserInfo.IsOpera) A.appendChild(C.createTextNode(''));else A.appendChild(this.CreateBogusBR(C));}};FCKTools.GetLastItem=function(A){if (A.length>0) return A[A.length-1];return null;};FCKTools.GetDocumentPosition=function(w,A){var x=0;var y=0;var B=A;while (B&&B!=w.document.body){x+=B.offsetLeft-B.scrollLeft;y+=B.offsetTop-B.scrollTop;B=B.offsetParent;};return { "x":x,"y":y };};FCKTools.GetWindowPosition=function(w,A){var B=this.GetDocumentPosition(w,A);var C=FCKTools.GetScrollPosition(w);B.x-=C.X;B.y-=C.Y;return B;};FCKTools.ProtectFormStyles=function(A){if (!A||A.nodeType!=1||A.tagName.toLowerCase()!='form') return [];var B=[];var C=['style','className'];for (var i=0;i<C.length;i++){var D=C[i];if (A.elements.namedItem(D)){var E=A.elements.namedItem(D);B.push([E,E.nextSibling]);A.removeChild(E);}};return B;};FCKTools.RestoreFormStyles=function(A,B){if (!A||A.nodeType!=1||A.tagName.toLowerCase()!='form') return;if (B.length>0){for (var i=B.length-1;i>=0;i--){var C=B[i][0];var D=B[i][1];if (D) A.insertBefore(C,D);else A.appendChild(C);}}};FCKTools.GetNextNode=function(A,B){if (A.firstChild) return A.firstChild;else if (A.nextSibling) return A.nextSibling;else{var C=A.parentNode;while (C){if (C==B) return null;if (C.nextSibling) return C.nextSibling;else C=C.parentNode;}};return null;};FCKTools.GetNextTextNode=function(A,B,C){node=this.GetNextNode(A,B);if (C&&node&&C(node)) return null;while (node&&node.nodeType!=3){node=this.GetNextNode(node,B);if (C&&node&&C(node)) return null;};return node;};FCKTools.Merge=function(){var A=arguments;var o=A[0];for (var i=1;i<A.length;i++){var B=A[i];for (var p in B) o[p]=B[p];};return o;};FCKTools.IsArray=function(A){return (A instanceof Array);};FCKTools.AppendLengthProperty=function(A,B){var C=0;for (var n in A) C++;return A[B||'length']=C;};FCKTools.NormalizeCssText=function(A){var B=document.createElement('span');B.style.cssText=A;return B.style.cssText;};FCKTools.Hitch=function(A,B){return function() { A[B].apply(A,arguments);};};
+FCKTools.CancelEvent=function(e){return false;};FCKTools._AppendStyleSheet=function(A,B){return A.createStyleSheet(B).owningElement;};FCKTools._AppendStyleString=function(A,B){var s=A.createStyleSheet("");s.cssText=B;return s;};FCKTools.ClearElementAttributes=function(A){A.clearAttributes();};FCKTools.GetAllChildrenIds=function(A){var B=[];for (var i=0;i<A.all.length;i++){var C=A.all[i].id;if (C&&C.length>0) B[B.length]=C;};return B;};FCKTools.RemoveOuterTags=function(e){e.insertAdjacentHTML('beforeBegin',e.innerHTML);e.parentNode.removeChild(e);};FCKTools.CreateXmlObject=function(A){var B;switch (A){case 'XmlHttp':B=['MSXML2.XmlHttp','Microsoft.XmlHttp'];break;case 'DOMDocument':B=['MSXML2.DOMDocument','Microsoft.XmlDom'];break;};for (var i=0;i<2;i++){try { return new ActiveXObject(B[i]);}catch (e){}};if (FCKLang.NoActiveX){alert(FCKLang.NoActiveX);FCKLang.NoActiveX=null;};return null;};FCKTools.DisableSelection=function(A){A.unselectable='on';var e,i=0;while ((e=A.all[i++])){switch (e.tagName){case 'IFRAME':case 'TEXTAREA':case 'INPUT':case 'SELECT':break;default:e.unselectable='on';}}};FCKTools.GetScrollPosition=function(A){var B=A.document;var C={ X:B.documentElement.scrollLeft,Y:B.documentElement.scrollTop };if (C.X>0||C.Y>0) return C;return { X:B.body.scrollLeft,Y:B.body.scrollTop };};FCKTools.AddEventListener=function(A,B,C){A.attachEvent('on'+B,C);};FCKTools.RemoveEventListener=function(A,B,C){A.detachEvent('on'+B,C);};FCKTools.AddEventListenerEx=function(A,B,C,D){var o={};o.Source=A;o.Params=D||[];o.Listener=function(ev){return C.apply(o.Source,[ev].concat(o.Params));};if (FCK.IECleanup) FCK.IECleanup.AddItem(null,function() { o.Source=null;o.Params=null;});A.attachEvent('on'+B,o.Listener);A=null;D=null;};FCKTools.GetViewPaneSize=function(A){var B;var C=A.document.documentElement;if (C&&C.clientWidth) B=C;else B=A.document.body;if (B) return { Width:B.clientWidth,Height:B.clientHeight };else return { Width:0,Height:0 };};FCKTools.SaveStyles=function(A){var B=FCKTools.ProtectFormStyles(A);var C={};if (A.className.length>0){C.Class=A.className;A.className='';};var D=A.style.cssText;if (D.length>0){C.Inline=D;A.style.cssText='';};FCKTools.RestoreFormStyles(A,B);return C;};FCKTools.RestoreStyles=function(A,B){var C=FCKTools.ProtectFormStyles(A);A.className=B.Class||'';A.style.cssText=B.Inline||'';FCKTools.RestoreFormStyles(A,C);};FCKTools.RegisterDollarFunction=function(A){A.$=A.document.getElementById;};FCKTools.AppendElement=function(A,B){return A.appendChild(this.GetElementDocument(A).createElement(B));};FCKTools.ToLowerCase=function(A){return A.toLowerCase();};
+var FCKeditorAPI;function InitializeAPI(){var A=window.parent;if (!(FCKeditorAPI=A.FCKeditorAPI)){var B='var FCKeditorAPI = {Version : "2.5 SVN",VersionBuild : "16925",__Instances : new Object(),GetInstance : function( name ){return this.__Instances[ name ];},_FormSubmit : function(){for ( var name in FCKeditorAPI.__Instances ){var oEditor = FCKeditorAPI.__Instances[ name ] ;if ( oEditor.GetParentForm && oEditor.GetParentForm() == this )oEditor.UpdateLinkedField() ;}this._FCKOriginalSubmit() ;},_FunctionQueue	: {Functions : new Array(),IsRunning : false,Add : function( f ){this.Functions.push( f );if ( !this.IsRunning )this.StartNext();},StartNext : function(){var aQueue = this.Functions ;if ( aQueue.length > 0 ){this.IsRunning = true;aQueue[0].call();}else this.IsRunning = false;},Remove : function( f ){var aQueue = this.Functions;var i = 0, fFunc;while( (fFunc = aQueue[ i ]) ){if ( fFunc == f )aQueue.splice( i,1 );i++ ;}this.StartNext();}}}';if (A.execScript) A.execScript(B,'JavaScript');else{if (FCKBrowserInfo.IsGecko10){eval.call(A,B);}else if (FCKBrowserInfo.IsSafari||FCKBrowserInfo.IsGecko19){var C=A.document;var D=C.createElement('script');D.appendChild(C.createTextNode(B));C.documentElement.appendChild(D);}else A.eval(B);};FCKeditorAPI=A.FCKeditorAPI;};FCKeditorAPI.__Instances[FCK.Name]=FCK;};function _AttachFormSubmitToAPI(){var A=FCK.GetParentForm();if (A){FCKTools.AddEventListener(A,'submit',FCK.UpdateLinkedField);if (!A._FCKOriginalSubmit&&(typeof(A.submit)=='function'||(!A.submit.tagName&&!A.submit.length))){A._FCKOriginalSubmit=A.submit;A.submit=FCKeditorAPI._FormSubmit;}}};function FCKeditorAPI_Cleanup(){if (!window.FCKUnloadFlag) return;delete FCKeditorAPI.__Instances[FCK.Name];};function FCKeditorAPI_ConfirmCleanup(){window.FCKUnloadFlag=true;};FCKTools.AddEventListener(window,'unload',FCKeditorAPI_Cleanup);FCKTools.AddEventListener(window,'beforeunload',FCKeditorAPI_ConfirmCleanup);
+var FCKImagePreloader=function(){this._Images=[];};FCKImagePreloader.prototype={AddImages:function(A){if (typeof(A)=='string') A=A.split(';');this._Images=this._Images.concat(A);},Start:function(){var A=this._Images;this._PreloadCount=A.length;for (var i=0;i<A.length;i++){var B=document.createElement('img');FCKTools.AddEventListenerEx(B,'load',_FCKImagePreloader_OnImage,this);FCKTools.AddEventListenerEx(B,'error',_FCKImagePreloader_OnImage,this);B.src=A[i];_FCKImagePreloader_ImageCache.push(B);}}};var _FCKImagePreloader_ImageCache=[];function _FCKImagePreloader_OnImage(A,B){if ((--B._PreloadCount)==0&&B.OnComplete) B.OnComplete();}
+var FCKRegexLib={AposEntity:/&apos;/gi,ObjectElements:/^(?:IMG|TABLE|TR|TD|TH|INPUT|SELECT|TEXTAREA|HR|OBJECT|A|UL|OL|LI)$/i,NamedCommands:/^(?:Cut|Copy|Paste|Print|SelectAll|RemoveFormat|Unlink|Undo|Redo|Bold|Italic|Underline|StrikeThrough|Subscript|Superscript|JustifyLeft|JustifyCenter|JustifyRight|JustifyFull|Outdent|Indent|InsertOrderedList|InsertUnorderedList|InsertHorizontalRule)$/i,BeforeBody:/(^[\s\S]*\<body[^\>]*\>)/i,AfterBody:/(\<\/body\>[\s\S]*$)/i,ToReplace:/___fcktoreplace:([\w]+)/ig,MetaHttpEquiv:/http-equiv\s*=\s*["']?([^"' ]+)/i,HasBaseTag:/<base /i,HasBodyTag:/<body[\s|>]/i,HtmlOpener:/<html\s?[^>]*>/i,HeadOpener:/<head\s?[^>]*>/i,HeadCloser:/<\/head\s*>/i,FCK_Class:/\s*FCK__[^ ]*(?=\s+|$)/,ElementName:/(^[a-z_:][\w.\-:]*\w$)|(^[a-z_]$)/,ForceSimpleAmpersand:/___FCKAmp___/g,SpaceNoClose:/\/>/g,EmptyParagraph:/^<(p|div|address|h\d|center)(?=[ >])[^>]*>\s*(<\/\1>)?$/,EmptyOutParagraph:/^<(p|div|address|h\d|center)(?=[ >])[^>]*>(?:\s*|&nbsp;)(<\/\1>)?$/,TagBody:/></,GeckoEntitiesMarker:/#\?-\:/g,ProtectUrlsImg:/<img(?=\s).*?\ssrc=((?:(?:\s*)("|').*?\2)|(?:[^"'][^ >]+))/gi,ProtectUrlsA:/<a(?=\s).*?\shref=((?:(?:\s*)("|').*?\2)|(?:[^"'][^ >]+))/gi,Html4DocType:/HTML 4\.0 Transitional/i,DocTypeTag:/<!DOCTYPE[^>]*>/i,TagsWithEvent:/<[^\>]+ on\w+[\s\r\n]*=[\s\r\n]*?('|")[\s\S]+?\>/g,EventAttributes:/\s(on\w+)[\s\r\n]*=[\s\r\n]*?('|")([\s\S]*?)\2/g,ProtectedEvents:/\s\w+_fckprotectedatt="([^"]+)"/g,StyleProperties:/\S+\s*:/g,InvalidSelfCloseTags:/(<(?!base|meta|link|hr|br|param|img|area|input)([a-zA-Z0-9:]+)[^>]*)\/>/gi,StyleVariableAttName:/#\(\s*("|')(.+?)\1[^\)]*\s*\)/g,RegExp:/^\/(.*)\/([gim]*)$/};
+var FCKListsLib={BlockElements:{ address:1,blockquote:1,center:1,div:1,dl:1,fieldset:1,form:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,hr:1,marquee:1,noscript:1,ol:1,p:1,pre:1,script:1,table:1,ul:1 },NonEmptyBlockElements:{ p:1,div:1,form:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,address:1,pre:1,ol:1,ul:1,li:1,td:1,th:1 },InlineChildReqElements:{ abbr:1,acronym:1,b:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,q:1,samp:1,small:1,span:1,strike:1,strong:1,sub:1,sup:1,tt:1,u:1,'var':1 },InlineNonEmptyElements:{ a:1,abbr:1,acronym:1,b:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,q:1,samp:1,small:1,span:1,strike:1,strong:1,sub:1,sup:1,tt:1,u:1,'var':1 },EmptyElements:{ base:1,col:1,meta:1,link:1,hr:1,br:1,param:1,img:1,area:1,input:1 },PathBlockElements:{ address:1,blockquote:1,dl:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,p:1,pre:1,li:1,dt:1,de:1 },PathBlockLimitElements:{ body:1,div:1,td:1,th:1,caption:1,form:1 },StyleBlockElements:{ address:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,p:1,pre:1 },StyleObjectElements:{ img:1,hr:1,li:1,table:1,tr:1,td:1,embed:1,object:1,ol:1,ul:1 },BlockBoundaries:{ p:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,hr:1,address:1,pre:1,ol:1,ul:1,li:1,dt:1,de:1,table:1,thead:1,tbody:1,tfoot:1,tr:1,th:1,td:1,caption:1,col:1,colgroup:1,blockquote:1,body:1 },ListBoundaries:{ p:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,hr:1,address:1,pre:1,ol:1,ul:1,li:1,dt:1,de:1,table:1,thead:1,tbody:1,tfoot:1,tr:1,th:1,td:1,caption:1,col:1,colgroup:1,blockquote:1,body:1,br:1 }};
+var FCKLanguageManager=FCK.Language={AvailableLanguages:{af:'Afrikaans',ar:'Arabic',bg:'Bulgarian',bn:'Bengali/Bangla',bs:'Bosnian',ca:'Catalan',cs:'Czech',da:'Danish',de:'German',el:'Greek',en:'English','en-au':'English (Australia)','en-ca':'English (Canadian)','en-uk':'English (United Kingdom)',eo:'Esperanto',es:'Spanish',et:'Estonian',eu:'Basque',fa:'Persian',fi:'Finnish',fo:'Faroese',fr:'French',gl:'Galician',he:'Hebrew',hi:'Hindi',hr:'Croatian',hu:'Hungarian',it:'Italian',ja:'Japanese',km:'Khmer',ko:'Korean',lt:'Lithuanian',lv:'Latvian',mn:'Mongolian',ms:'Malay',nb:'Norwegian Bokmal',nl:'Dutch',no:'Norwegian',pl:'Polish',pt:'Portuguese (Portugal)','pt-br':'Portuguese (Brazil)',ro:'Romanian',ru:'Russian',sk:'Slovak',sl:'Slovenian',sr:'Serbian (Cyrillic)','sr-latn':'Serbian (Latin)',sv:'Swedish',th:'Thai',tr:'Turkish',uk:'Ukrainian',vi:'Vietnamese',zh:'Chinese Traditional','zh-cn':'Chinese Simplified'},GetActiveLanguage:function(){if (FCKConfig.AutoDetectLanguage){var A;if (navigator.userLanguage) A=navigator.userLanguage.toLowerCase();else if (navigator.language) A=navigator.language.toLowerCase();else{return FCKConfig.DefaultLanguage;};if (A.length>=5){A=A.substr(0,5);if (this.AvailableLanguages[A]) return A;};if (A.length>=2){A=A.substr(0,2);if (this.AvailableLanguages[A]) return A;}};return this.DefaultLanguage;},TranslateElements:function(A,B,C,D){var e=A.getElementsByTagName(B);var E,s;for (var i=0;i<e.length;i++){if ((E=e[i].getAttribute('fckLang'))){if ((s=FCKLang[E])){if (D) s=FCKTools.HTMLEncode(s);e[i][C]=s;}}}},TranslatePage:function(A){this.TranslateElements(A,'INPUT','value');this.TranslateElements(A,'SPAN','innerHTML');this.TranslateElements(A,'LABEL','innerHTML');this.TranslateElements(A,'OPTION','innerHTML',true);this.TranslateElements(A,'LEGEND','innerHTML');},Initialize:function(){if (this.AvailableLanguages[FCKConfig.DefaultLanguage]) this.DefaultLanguage=FCKConfig.DefaultLanguage;else this.DefaultLanguage='en';this.ActiveLanguage={};this.ActiveLanguage.Code=this.GetActiveLanguage();this.ActiveLanguage.Name=this.AvailableLanguages[this.ActiveLanguage.Code];}};
+var FCKXHtmlEntities={};FCKXHtmlEntities.Initialize=function(){if (FCKXHtmlEntities.Entities) return;var A='';var B,e;if (FCKConfig.ProcessHTMLEntities){FCKXHtmlEntities.Entities={' ':'nbsp','¡':'iexcl','¢':'cent','£':'pound','¤':'curren','¥':'yen','¦':'brvbar','§':'sect','¨':'uml','©':'copy','ª':'ordf','«':'laquo','¬':'not','­':'shy','®':'reg','¯':'macr','°':'deg','±':'plusmn','²':'sup2','³':'sup3','´':'acute','µ':'micro','¶':'para','·':'middot','¸':'cedil','¹':'sup1','º':'ordm','»':'raquo','¼':'frac14','½':'frac12','¾':'frac34','¿':'iquest','×':'times','÷':'divide','ƒ':'fnof','•':'bull','…':'hellip','′':'prime','″':'Prime','‾':'oline','⁄':'frasl','℘':'weierp','ℑ':'image','ℜ':'real','™':'trade','ℵ':'alefsym','←':'larr','↑':'uarr','→':'rarr','↓':'darr','↔':'harr','↵':'crarr','⇐':'lArr','⇑':'uArr','⇒':'rArr','⇓':'dArr','⇔':'hArr','∀':'forall','∂':'part','∃':'exist','∅':'empty','∇':'nabla','∈':'isin','∉':'notin','∋':'ni','∏':'prod','∑':'sum','−':'minus','∗':'lowast','√':'radic','∝':'prop','∞':'infin','∠':'ang','∧':'and','∨':'or','∩':'cap','∪':'cup','∫':'int','∴':'there4','∼':'sim','≅':'cong','≈':'asymp','≠':'ne','≡':'equiv','≤':'le','≥':'ge','⊂':'sub','⊃':'sup','⊄':'nsub','⊆':'sube','⊇':'supe','⊕':'oplus','⊗':'otimes','⊥':'perp','⋅':'sdot','\u2308':'lceil','\u2309':'rceil','\u230a':'lfloor','\u230b':'rfloor','\u2329':'lang','\u232a':'rang','◊':'loz','♠':'spades','♣':'clubs','♥':'hearts','♦':'diams','"':'quot','ˆ':'circ','˜':'tilde',' ':'ensp',' ':'emsp',' ':'thinsp','‌':'zwnj','‍':'zwj','‎':'lrm','‏':'rlm','–':'ndash','—':'mdash','‘':'lsquo','’':'rsquo','‚':'sbquo','“':'ldquo','”':'rdquo','„':'bdquo','†':'dagger','‡':'Dagger','‰':'permil','‹':'lsaquo','›':'rsaquo','€':'euro'};for (e in FCKXHtmlEntities.Entities) A+=e;if (FCKConfig.IncludeLatinEntities){B={'À':'Agrave','Á':'Aacute','Â':'Acirc','Ã':'Atilde','Ä':'Auml','Å':'Aring','Æ':'AElig','Ç':'Ccedil','È':'Egrave','É':'Eacute','Ê':'Ecirc','Ë':'Euml','Ì':'Igrave','Í':'Iacute','Î':'Icirc','Ï':'Iuml','Ð':'ETH','Ñ':'Ntilde','Ò':'Ograve','Ó':'Oacute','Ô':'Ocirc','Õ':'Otilde','Ö':'Ouml','Ø':'Oslash','Ù':'Ugrave','Ú':'Uacute','Û':'Ucirc','Ü':'Uuml','Ý':'Yacute','Þ':'THORN','ß':'szlig','à':'agrave','á':'aacute','â':'acirc','ã':'atilde','ä':'auml','å':'aring','æ':'aelig','ç':'ccedil','è':'egrave','é':'eacute','ê':'ecirc','ë':'euml','ì':'igrave','í':'iacute','î':'icirc','ï':'iuml','ð':'eth','ñ':'ntilde','ò':'ograve','ó':'oacute','ô':'ocirc','õ':'otilde','ö':'ouml','ø':'oslash','ù':'ugrave','ú':'uacute','û':'ucirc','ü':'uuml','ý':'yacute','þ':'thorn','ÿ':'yuml','Œ':'OElig','œ':'oelig','Š':'Scaron','š':'scaron','Ÿ':'Yuml'};for (e in B){FCKXHtmlEntities.Entities[e]=B[e];A+=e;};B=null;};if (FCKConfig.IncludeGreekEntities){B={'Α':'Alpha','Β':'Beta','Γ':'Gamma','Δ':'Delta','Ε':'Epsilon','Ζ':'Zeta','Η':'Eta','Θ':'Theta','Ι':'Iota','Κ':'Kappa','Λ':'Lambda','Μ':'Mu','Ν':'Nu','Ξ':'Xi','Ο':'Omicron','Π':'Pi','Ρ':'Rho','Σ':'Sigma','Τ':'Tau','Υ':'Upsilon','Φ':'Phi','Χ':'Chi','Ψ':'Psi','Ω':'Omega','α':'alpha','β':'beta','γ':'gamma','δ':'delta','ε':'epsilon','ζ':'zeta','η':'eta','θ':'theta','ι':'iota','κ':'kappa','λ':'lambda','μ':'mu','ν':'nu','ξ':'xi','ο':'omicron','π':'pi','ρ':'rho','ς':'sigmaf','σ':'sigma','τ':'tau','υ':'upsilon','φ':'phi','χ':'chi','ψ':'psi','ω':'omega','\u03d1':'thetasym','\u03d2':'upsih','\u03d6':'piv'};for (e in B){FCKXHtmlEntities.Entities[e]=B[e];A+=e;};B=null;}}else{FCKXHtmlEntities.Entities={};A=' ';};var C='['+A+']';if (FCKConfig.ProcessNumericEntities) C='[^ -~]|'+C;var D=FCKConfig.AdditionalNumericEntities;if (D&&D.length>0) C+='|'+FCKConfig.AdditionalNumericEntities;FCKXHtmlEntities.EntitiesRegex=new RegExp(C,'g');};
+var FCKXHtml={};FCKXHtml.CurrentJobNum=0;FCKXHtml.GetXHTML=function(A,B,C){FCKDomTools.CheckAndRemovePaddingNode(A.ownerDocument,FCKConfig.EnterMode);FCKXHtmlEntities.Initialize();this._NbspEntity=(FCKConfig.ProcessHTMLEntities?'nbsp':'#160');var D=FCK.IsDirty();FCKXHtml.SpecialBlocks=[];this.XML=FCKTools.CreateXmlObject('DOMDocument');this.MainNode=this.XML.appendChild(this.XML.createElement('xhtml'));FCKXHtml.CurrentJobNum++;if (B) this._AppendNode(this.MainNode,A);else this._AppendChildNodes(this.MainNode,A,false);var E=this._GetMainXmlString();this.XML=null;if (FCKBrowserInfo.IsSafari) E=E.replace(/^<xhtml.*?>/,'<xhtml>');E=E.substr(7,E.length-15).Trim();E=E.replace(FCKRegexLib.SpaceNoClose,' />');if (FCKConfig.ForceSimpleAmpersand) E=E.replace(FCKRegexLib.ForceSimpleAmpersand,'&');if (C) E=FCKCodeFormatter.Format(E);for (var i=0;i<FCKXHtml.SpecialBlocks.length;i++){var F=new RegExp('___FCKsi___'+i);E=E.replace(F,FCKXHtml.SpecialBlocks[i]);};E=E.replace(FCKRegexLib.GeckoEntitiesMarker,'&');if (!D) FCK.ResetIsDirty();FCKDomTools.EnforcePaddingNode(FCKTools.GetElementDocument(A),FCKConfig.EnterMode);return E;};FCKXHtml._AppendAttribute=function(A,B,C){try{if (C==undefined||C==null) C='';else if (C.replace){if (FCKConfig.ForceSimpleAmpersand) C=C.replace(/&/g,'___FCKAmp___');C=C.replace(FCKXHtmlEntities.EntitiesRegex,FCKXHtml_GetEntity);};var D=this.XML.createAttribute(B);D.value=C;A.attributes.setNamedItem(D);}catch (e){}};FCKXHtml._AppendChildNodes=function(A,B,C){var D=B.firstChild;while (D){this._AppendNode(A,D);D=D.nextSibling;};if (C&&B.tagName&&B.tagName.toLowerCase()!='pre'){FCKDomTools.TrimNode(A);if (FCKConfig.FillEmptyBlocks){var E=A.lastChild;if (E&&E.nodeType==1&&E.nodeName=='br') this._AppendEntity(A,this._NbspEntity);}};if (A.childNodes.length==0){if (C&&FCKConfig.FillEmptyBlocks){this._AppendEntity(A,this._NbspEntity);return A;};var F=A.nodeName;if (FCKListsLib.InlineChildReqElements[F]) return null;if (!FCKListsLib.EmptyElements[F]) A.appendChild(this.XML.createTextNode(''));};return A;};FCKXHtml._AppendNode=function(A,B){if (!B) return false;switch (B.nodeType){case 1:if (FCKBrowserInfo.IsGecko&&B.tagName.toLowerCase()=='br'&&B.parentNode.tagName.toLowerCase()=='pre'){var C='\r';if (B==B.parentNode.firstChild) C+='\r';return FCKXHtml._AppendNode(A,this.XML.createTextNode(C));};if (B.getAttribute('_fckfakelement')) return FCKXHtml._AppendNode(A,FCK.GetRealElement(B));if (FCKBrowserInfo.IsGecko&&(B.hasAttribute('_moz_editor_bogus_node')||B.getAttribute('type')=='_moz')) return false;if (B.getAttribute('_fcktemp')) return false;var D=B.tagName.toLowerCase();if (FCKBrowserInfo.IsIE){if (B.scopeName&&B.scopeName!='HTML'&&B.scopeName!='FCK') D=B.scopeName.toLowerCase()+':'+D;}else{if (D.StartsWith('fck:')) D=D.Remove(0,4);};if (!FCKRegexLib.ElementName.test(D)) return false;if (B._fckxhtmljob&&B._fckxhtmljob==FCKXHtml.CurrentJobNum) return false;var E=this.XML.createElement(D);FCKXHtml._AppendAttributes(A,B,E,D);B._fckxhtmljob=FCKXHtml.CurrentJobNum;var F=FCKXHtml.TagProcessors[D];if (F) E=F(E,B,A);else E=this._AppendChildNodes(E,B,Boolean(FCKListsLib.NonEmptyBlockElements[D]));if (!E) return false;A.appendChild(E);break;case 3:if (B.parentNode&&B.parentNode.nodeName.IEquals('pre')) return this._AppendTextNode(A,B.nodeValue);return this._AppendTextNode(A,B.nodeValue.ReplaceNewLineChars(' '));case 8:if (FCKBrowserInfo.IsIE&&!B.innerHTML) break;try { A.appendChild(this.XML.createComment(B.nodeValue));}catch (e) {/*Do nothing... probably this is a wrong format comment.*/};break;default:A.appendChild(this.XML.createComment("Element not supported - Type: "+B.nodeType+" Name: "+B.nodeName));break;};return true;};FCKXHtml._AppendSpecialItem=function(A){return '___FCKsi___'+FCKXHtml.SpecialBlocks.AddItem(A);};FCKXHtml._AppendEntity=function(A,B){A.appendChild(this.XML.createTextNode('#?-:'+B+';'));};FCKXHtml._AppendTextNode=function(A,B){var C=B.length>0;if (C) A.appendChild(this.XML.createTextNode(B.replace(FCKXHtmlEntities.EntitiesRegex,FCKXHtml_GetEntity)));return C;};function FCKXHtml_GetEntity(A){var B=FCKXHtmlEntities.Entities[A]||('#'+A.charCodeAt(0));return '#?-:'+B+';';};FCKXHtml.TagProcessors={img:function(A,B){if (!A.attributes.getNamedItem('alt')) FCKXHtml._AppendAttribute(A,'alt','');var C=B.getAttribute('_fcksavedurl');if (C!=null) FCKXHtml._AppendAttribute(A,'src',C);return A;},a:function(A,B){if (B.innerHTML.Trim().length==0&&!B.name) return false;var C=B.getAttribute('_fcksavedurl');if (C!=null) FCKXHtml._AppendAttribute(A,'href',C);if (FCKBrowserInfo.IsIE){if (B.name) FCKXHtml._AppendAttribute(A,'name',B.name);};A=FCKXHtml._AppendChildNodes(A,B,false);return A;},script:function(A,B){if (!A.attributes.getNamedItem('type')) FCKXHtml._AppendAttribute(A,'type','text/javascript');A.appendChild(FCKXHtml.XML.createTextNode(FCKXHtml._AppendSpecialItem(B.text)));return A;},style:function(A,B){if (!A.attributes.getNamedItem('type')) FCKXHtml._AppendAttribute(A,'type','text/css');var C=B.innerHTML;if (FCKBrowserInfo.IsIE) C=C.replace(/^(\r\n|\n|\r)/,'');A.appendChild(FCKXHtml.XML.createTextNode(FCKXHtml._AppendSpecialItem(C)));return A;},pre:function (A,B){var C=B.firstChild;if (C&&C.nodeType==3) A.appendChild(FCKXHtml.XML.createTextNode(FCKXHtml._AppendSpecialItem('\r\n')));FCKXHtml._AppendChildNodes(A,B,true);return A;},title:function(A,B){A.appendChild(FCKXHtml.XML.createTextNode(FCK.EditorDocument.title));return A;},ol:function(A,B,C){if (B.innerHTML.Trim().length==0) return false;var D=C.lastChild;if (D&&D.nodeType==3) D=D.previousSibling;if (D&&D.nodeName.toUpperCase()=='LI'){B._fckxhtmljob=null;FCKXHtml._AppendNode(D,B);return false;};A=FCKXHtml._AppendChildNodes(A,B);return A;},span:function(A,B){if (B.innerHTML.length==0) return false;A=FCKXHtml._AppendChildNodes(A,B,false);return A;},iframe:function(A,B){var C=B.innerHTML;if (FCKBrowserInfo.IsGecko) C=FCKTools.HTMLDecode(C);C=C.replace(/\s_fcksavedurl="[^"]*"/g,'');A.appendChild(FCKXHtml.XML.createTextNode(FCKXHtml._AppendSpecialItem(C)));return A;},body:function(A,B){A=FCKXHtml._AppendChildNodes(A,B,false);A.removeAttribute('spellcheck');return A;}};FCKXHtml.TagProcessors.ul=FCKXHtml.TagProcessors.ol;
+FCKXHtml._GetMainXmlString=function(){return this.MainNode.xml;};FCKXHtml._AppendAttributes=function(A,B,C,D){var E=B.attributes;for (var n=0;n<E.length;n++){var F=E[n];if (F.specified){var G=F.nodeName.toLowerCase();var H;if (G.StartsWith('_fck')) continue;else if (G=='style'){var I=FCKTools.ProtectFormStyles(B);H=B.style.cssText.replace(FCKRegexLib.StyleProperties,FCKTools.ToLowerCase);FCKTools.RestoreFormStyles(B,I);}else if (G=='class'){H=F.nodeValue.replace(FCKRegexLib.FCK_Class,'');if (H.length==0) continue;}else if (G.indexOf('on')==0) H=F.nodeValue;else if (D=='body'&&G=='contenteditable') continue;else if (F.nodeValue===true) H=G;else{try{H=B.getAttribute(G,2);}catch (e) {}};this._AppendAttribute(C,G,H||F.nodeValue);}}};FCKXHtml.TagProcessors['meta']=function(A,B){var C=A.attributes.getNamedItem('http-equiv');if (C==null||C.value.length==0){var D=B.outerHTML.match(FCKRegexLib.MetaHttpEquiv);if (D){D=D[1];FCKXHtml._AppendAttribute(A,'http-equiv',D);}};return A;};FCKXHtml.TagProcessors['font']=function(A,B){if (A.attributes.length==0) A=FCKXHtml.XML.createDocumentFragment();A=FCKXHtml._AppendChildNodes(A,B);return A;};FCKXHtml.TagProcessors['input']=function(A,B){if (B.name) FCKXHtml._AppendAttribute(A,'name',B.name);if (B.value&&!A.attributes.getNamedItem('value')) FCKXHtml._AppendAttribute(A,'value',B.value);if (!A.attributes.getNamedItem('type')) FCKXHtml._AppendAttribute(A,'type','text');return A;};FCKXHtml.TagProcessors['option']=function(A,B){if (B.selected&&!A.attributes.getNamedItem('selected')) FCKXHtml._AppendAttribute(A,'selected','selected');A=FCKXHtml._AppendChildNodes(A,B);return A;};FCKXHtml.TagProcessors['area']=function(A,B){if (!A.attributes.getNamedItem('coords')){var C=B.getAttribute('coords',2);if (C&&C!='0,0,0') FCKXHtml._AppendAttribute(A,'coords',C);};if (!A.attributes.getNamedItem('shape')){var D=B.getAttribute('shape',2);if (D&&D.length>0) FCKXHtml._AppendAttribute(A,'shape',D.toLowerCase());};return A;};FCKXHtml.TagProcessors['label']=function(A,B){if (B.htmlFor.length>0) FCKXHtml._AppendAttribute(A,'for',B.htmlFor);A=FCKXHtml._AppendChildNodes(A,B);return A;};FCKXHtml.TagProcessors['form']=function(A,B){if (B.acceptCharset&&B.acceptCharset.length>0&&B.acceptCharset!='UNKNOWN') FCKXHtml._AppendAttribute(A,'accept-charset',B.acceptCharset);var C=B.attributes['name'];if (C&&C.value.length>0) FCKXHtml._AppendAttribute(A,'name',C.value);A=FCKXHtml._AppendChildNodes(A,B,true);return A;};FCKXHtml.TagProcessors['textarea']=FCKXHtml.TagProcessors['select']=function(A,B){if (B.name) FCKXHtml._AppendAttribute(A,'name',B.name);A=FCKXHtml._AppendChildNodes(A,B);return A;};FCKXHtml.TagProcessors['div']=function(A,B){if (B.align.length>0) FCKXHtml._AppendAttribute(A,'align',B.align);A=FCKXHtml._AppendChildNodes(A,B,true);return A;};
+var FCKCodeFormatter={};FCKCodeFormatter.Init=function(){var A=this.Regex={};A.BlocksOpener=/\<(P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|OL|UL|LI|TITLE|META|LINK|BASE|SCRIPT|LINK|TD|TH|AREA|OPTION)[^\>]*\>/gi;A.BlocksCloser=/\<\/(P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|OL|UL|LI|TITLE|META|LINK|BASE|SCRIPT|LINK|TD|TH|AREA|OPTION)[^\>]*\>/gi;A.NewLineTags=/\<(BR|HR)[^\>]*\>/gi;A.MainTags=/\<\/?(HTML|HEAD|BODY|FORM|TABLE|TBODY|THEAD|TR)[^\>]*\>/gi;A.LineSplitter=/\s*\n+\s*/g;A.IncreaseIndent=/^\<(HTML|HEAD|BODY|FORM|TABLE|TBODY|THEAD|TR|UL|OL)[ \/\>]/i;A.DecreaseIndent=/^\<\/(HTML|HEAD|BODY|FORM|TABLE|TBODY|THEAD|TR|UL|OL)[ \>]/i;A.FormatIndentatorRemove=new RegExp('^'+FCKConfig.FormatIndentator);A.ProtectedTags=/(<PRE[^>]*>)([\s\S]*?)(<\/PRE>)/gi;};FCKCodeFormatter._ProtectData=function(A,B,C,D){return B+'___FCKpd___'+FCKCodeFormatter.ProtectedData.AddItem(C)+D;};FCKCodeFormatter.Format=function(A){if (!this.Regex) this.Init();FCKCodeFormatter.ProtectedData=[];var B=A.replace(this.Regex.ProtectedTags,FCKCodeFormatter._ProtectData);B=B.replace(this.Regex.BlocksOpener,'\n$&');B=B.replace(this.Regex.BlocksCloser,'$&\n');B=B.replace(this.Regex.NewLineTags,'$&\n');B=B.replace(this.Regex.MainTags,'\n$&\n');var C='';var D=B.split(this.Regex.LineSplitter);B='';for (var i=0;i<D.length;i++){var E=D[i];if (E.length==0) continue;if (this.Regex.DecreaseIndent.test(E)) C=C.replace(this.Regex.FormatIndentatorRemove,'');B+=C+E+'\n';if (this.Regex.IncreaseIndent.test(E)) C+=FCKConfig.FormatIndentator;};for (var j=0;j<FCKCodeFormatter.ProtectedData.length;j++){var F=new RegExp('___FCKpd___'+j);B=B.replace(F,FCKCodeFormatter.ProtectedData[j].replace(/\$/g,'$$$$'));};return B.Trim();}
+var FCKUndo={};FCKUndo.SavedData=[];FCKUndo.CurrentIndex=-1;FCKUndo.TypesCount=0;FCKUndo.Changed=false;FCKUndo.MaxTypes=25;FCKUndo.Typing=false;FCKUndo._GetBookmark=function(){var A=new FCKDomRange(FCK.EditorWindow);try{A.MoveToSelection();}catch (e){return null;};if (FCKBrowserInfo.IsIE){var B=A.CreateBookmark();var C=FCK.EditorDocument.body.innerHTML;A.MoveToBookmark(B);return [B,C];};return A.CreateBookmark2();};FCKUndo._SelectBookmark=function(A){if (!A) return;var B=new FCKDomRange(FCK.EditorWindow);if (A instanceof Object){if (FCKBrowserInfo.IsIE) B.MoveToBookmark(A[0]);else B.MoveToBookmark2(A);try{B.Select();}catch (e){B.MoveToPosition(FCK.EditorDocument.body,4);B.Select();}}};FCKUndo._CompareCursors=function(A,B){for (var i=0;i<Math.min(A.length,B.length);i++){if (A[i]<B[i]) return-1;else if (A[i]>B[i]) return 1;};if (A.length<B.length) return-1;else if (A.length>B.length) return 1;return 0;};FCKUndo._CheckIsBookmarksEqual=function(A,B){if (!(A&&B)) return false;if (FCKBrowserInfo.IsIE){var C=A[1].search(A[0].StartId);var D=B[1].search(B[0].StartId);var E=A[1].search(A[0].EndId);var F=B[1].search(B[0].EndId);return C==D&&E==F;}else{return this._CompareCursors(A.Start,B.Start)==0&&this._CompareCursors(A.End,B.End)==0;}};FCKUndo.SaveUndoStep=function(){if (FCK.EditMode!=0) return;if (this.SavedData.length) this.Changed=true;var A=FCK.EditorDocument.body.innerHTML;var B=this._GetBookmark();this.SavedData=this.SavedData.slice(0,this.CurrentIndex+1);if (this.CurrentIndex>0&&A==this.SavedData[this.CurrentIndex][0]&&this._CheckIsBookmarksEqual(B,this.SavedData[this.CurrentIndex][1])) return;else if (this.CurrentIndex==0&&this.SavedData.length&&A==this.SavedData[0][0]){this.SavedData[0][1]=B;return;};if (this.CurrentIndex+1>=FCKConfig.MaxUndoLevels) this.SavedData.shift();else this.CurrentIndex++;this.SavedData[this.CurrentIndex]=[A,B];FCK.Events.FireEvent("OnSelectionChange");};FCKUndo.CheckUndoState=function(){return (this.Changed||this.CurrentIndex>0);};FCKUndo.CheckRedoState=function(){return (this.CurrentIndex<(this.SavedData.length-1));};FCKUndo.Undo=function(){if (this.CheckUndoState()){if (this.CurrentIndex==(this.SavedData.length-1)){this.SaveUndoStep();};this._ApplyUndoLevel(--this.CurrentIndex);FCK.Events.FireEvent("OnSelectionChange");}};FCKUndo.Redo=function(){if (this.CheckRedoState()){this._ApplyUndoLevel(++this.CurrentIndex);FCK.Events.FireEvent("OnSelectionChange");}};FCKUndo._ApplyUndoLevel=function(A){var B=this.SavedData[A];if (!B) return;if (FCKBrowserInfo.IsIE){if (B[1]&&B[1][1]) FCK.SetInnerHtml(B[1][1]);else FCK.SetInnerHtml(B[0]);}else FCK.EditorDocument.body.innerHTML=B[0];this._SelectBookmark(B[1]);this.TypesCount=0;this.Changed=false;this.Typing=false;};
+var FCKEditingArea=function(A){this.TargetElement=A;this.Mode=0;if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKEditingArea_Cleanup);};FCKEditingArea.prototype.Start=function(A,B){var C=this.TargetElement;var D=FCKTools.GetElementDocument(C);var E;while((E=C.firstChild)){if (E.contentWindow) E.contentWindow.document.body.innerHTML='';C.removeChild(E);};if (this.Mode==0){var F=this.IFrame=D.createElement('iframe');if (!FCKBrowserInfo.IsGecko) F.src='javascript:void(0)';F.frameBorder=0;F.width=F.height='100%';C.appendChild(F);if (FCKBrowserInfo.IsIE) A=A.replace(/(<base[^>]*?)\s*\/?>(?!\s*<\/base>)/gi,'$1></base>');else if (!B){var G=A.match(FCKRegexLib.BeforeBody);var H=A.match(FCKRegexLib.AfterBody);if (G&&H){var I=A.substr(G[1].length,A.length-G[1].length-H[1].length);A=G[1]+'&nbsp;'+H[1];if (FCKBrowserInfo.IsGecko&&(I.length==0||FCKRegexLib.EmptyParagraph.test(I))) I='<br type="_moz">';this._BodyHTML=I;}else this._BodyHTML=A;};this.Window=F.contentWindow;var J=this.Document=this.Window.document;J.open();J.write(A);J.close();if (FCKBrowserInfo.IsGecko10&&!B){this.Start(A,true);return;};this.Window._FCKEditingArea=this;if (FCKBrowserInfo.IsGecko10) this.Window.setTimeout(FCKEditingArea_CompleteStart,500);else FCKEditingArea_CompleteStart.call(this.Window);}else{var K=this.Textarea=D.createElement('textarea');K.className='SourceField';K.dir='ltr';FCKDomTools.SetElementStyles(K,{width:'100%',height:'100%',border:'none',resize:'none',outline:'none'});C.appendChild(K);K.value=A;FCKTools.RunFunction(this.OnLoad);}};function FCKEditingArea_CompleteStart(){if (!this.document.body){this.setTimeout(FCKEditingArea_CompleteStart,50);return;};var A=this._FCKEditingArea;A.MakeEditable();FCKTools.RunFunction(A.OnLoad);};FCKEditingArea.prototype.MakeEditable=function(){var A=this.Document;if (FCKBrowserInfo.IsIE){A.body.disabled=true;A.body.contentEditable=true;A.body.removeAttribute("disabled");}else{try{A.body.spellcheck=(this.FFSpellChecker!==false);if (this._BodyHTML){A.body.innerHTML=this._BodyHTML;this._BodyHTML=null;};A.designMode='on';try{A.execCommand('styleWithCSS',false,FCKConfig.GeckoUseSPAN);}catch (e){A.execCommand('useCSS',false,!FCKConfig.GeckoUseSPAN);};A.execCommand('enableObjectResizing',false,!FCKConfig.DisableObjectResizing);A.execCommand('enableInlineTableEditing',false,!FCKConfig.DisableFFTableHandles);}catch (e){FCKTools.AddEventListener(this.Window.frameElement,'DOMAttrModified',FCKEditingArea_Document_AttributeNodeModified);}}};function FCKEditingArea_Document_AttributeNodeModified(A){var B=A.currentTarget.contentWindow._FCKEditingArea;if (B._timer) window.clearTimeout(B._timer);B._timer=FCKTools.SetTimeout(FCKEditingArea_MakeEditableByMutation,1000,B);};function FCKEditingArea_MakeEditableByMutation(){delete this._timer;FCKTools.RemoveEventListener(this.Window.frameElement,'DOMAttrModified',FCKEditingArea_Document_AttributeNodeModified);this.MakeEditable();};FCKEditingArea.prototype.Focus=function(){try{if (this.Mode==0){if (FCKBrowserInfo.IsIE&&this.Document.hasFocus()) this._EnsureFocusIE();if (FCKBrowserInfo.IsSafari) this.IFrame.focus();else{this.Window.focus();if (FCKBrowserInfo.IsIE) this._EnsureFocusIE();}}else{var A=FCKTools.GetElementDocument(this.Textarea);if ((!A.hasFocus||A.hasFocus())&&A.activeElement==this.Textarea) return;this.Textarea.focus();}}catch(e) {}};FCKEditingArea.prototype._EnsureFocusIE=function(){this.Document.body.setActive();var A=this.Document.selection.createRange();var B=A.parentElement();if (!(B.childNodes.length==0&&(FCKListsLib.BlockElements[B.nodeName.toLowerCase()]||FCKListsLib.NonEmptyBlockElements[B.nodeName.toLowerCase()]))) return;var C=A.text.length;A.moveEnd("character",1);A.select();if (A.text.length>C){A.moveEnd("character",-1);A.select();}};function FCKEditingArea_Cleanup(){if (this.Document) this.Document.body.innerHTML="";this.TargetElement=null;this.IFrame=null;this.Document=null;this.Textarea=null;if (this.Window){this.Window._FCKEditingArea=null;this.Window=null;}};
+var FCKKeystrokeHandler=function(A){this.Keystrokes={};this.CancelCtrlDefaults=(A!==false);};FCKKeystrokeHandler.prototype.AttachToElement=function(A){FCKTools.AddEventListenerEx(A,'keydown',_FCKKeystrokeHandler_OnKeyDown,this);if (FCKBrowserInfo.IsGecko10||FCKBrowserInfo.IsOpera||(FCKBrowserInfo.IsGecko&&FCKBrowserInfo.IsMac)) FCKTools.AddEventListenerEx(A,'keypress',_FCKKeystrokeHandler_OnKeyPress,this);};FCKKeystrokeHandler.prototype.SetKeystrokes=function(){for (var i=0;i<arguments.length;i++){var A=arguments[i];if (!A) continue;if (typeof(A[0])=='object') this.SetKeystrokes.apply(this,A);else{if (A.length==1) delete this.Keystrokes[A[0]];else this.Keystrokes[A[0]]=A[1]===true?true:A;}}};function _FCKKeystrokeHandler_OnKeyDown(A,B){var C=A.keyCode||A.which;var D=0;if (A.ctrlKey||A.metaKey) D+=CTRL;if (A.shiftKey) D+=SHIFT;if (A.altKey) D+=ALT;var E=C+D;var F=B._CancelIt=false;var G=B.Keystrokes[E];if (G){if (G===true||!(B.OnKeystroke&&B.OnKeystroke.apply(B,G))) return true;F=true;};if (F||(B.CancelCtrlDefaults&&D==CTRL&&(C<33||C>40))){B._CancelIt=true;if (A.preventDefault) return A.preventDefault();A.returnValue=false;A.cancelBubble=true;return false;};return true;};function _FCKKeystrokeHandler_OnKeyPress(A,B){if (B._CancelIt){if (A.preventDefault) return A.preventDefault();return false;};return true;};
+FCK.DTD=(function(){X=FCKTools.Merge;var A,L,J,M,N,O,D,H,P,K,Q,F,G,C,B,E,I;A={isindex:1,fieldset:1};B={input:1,button:1,select:1,textarea:1,label:1};C=X({a:1},B);D=X({iframe:1},C);E={hr:1,ul:1,menu:1,div:1,blockquote:1,noscript:1,table:1,center:1,address:1,dir:1,pre:1,h5:1,dl:1,h4:1,noframes:1,h6:1,ol:1,h1:1,h3:1,h2:1};F={ins:1,del:1,script:1};G=X({b:1,acronym:1,bdo:1,'var':1,'#':1,abbr:1,code:1,br:1,i:1,cite:1,kbd:1,u:1,strike:1,s:1,tt:1,strong:1,q:1,samp:1,em:1,dfn:1,span:1},F);H=X({sub:1,img:1,object:1,sup:1,basefont:1,map:1,applet:1,font:1,big:1,small:1},G);I=X({p:1},H);J=X({iframe:1},H,B);K={img:1,noscript:1,br:1,kbd:1,center:1,button:1,basefont:1,h5:1,h4:1,samp:1,h6:1,ol:1,h1:1,h3:1,h2:1,form:1,font:1,'#':1,select:1,menu:1,ins:1,abbr:1,label:1,code:1,table:1,script:1,cite:1,input:1,iframe:1,strong:1,textarea:1,noframes:1,big:1,small:1,span:1,hr:1,sub:1,bdo:1,'var':1,div:1,object:1,sup:1,strike:1,dir:1,map:1,dl:1,applet:1,del:1,isindex:1,fieldset:1,ul:1,b:1,acronym:1,a:1,blockquote:1,i:1,u:1,s:1,tt:1,address:1,q:1,pre:1,p:1,em:1,dfn:1};L=X({a:1},J);M={tr:1};N={'#':1};O=X({param:1},K);P=X({form:1},A,D,E,I);Q={li:1};return {col:{},tr:{td:1,th:1},img:{},colgroup:{col:1},noscript:P,td:P,br:{},th:P,center:P,kbd:L,button:X(I,E),basefont:{},h5:L,h4:L,samp:L,h6:L,ol:Q,h1:L,h3:L,option:N,h2:L,form:X(A,D,E,I),select:{optgroup:1,option:1},font:J,ins:P,menu:Q,abbr:L,label:L,table:{thead:1,col:1,tbody:1,tr:1,colgroup:1,caption:1,tfoot:1},code:L,script:N,tfoot:M,cite:L,li:P,input:{},iframe:P,strong:J,textarea:N,noframes:P,big:J,small:J,span:J,hr:{},dt:L,sub:J,optgroup:{option:1},param:{},bdo:L,'var':J,div:P,object:O,sup:J,dd:P,strike:J,area:{},dir:Q,map:X({area:1,form:1,p:1},A,F,E),applet:O,dl:{dt:1,dd:1},del:P,isindex:{},fieldset:X({legend:1},K),thead:M,ul:Q,acronym:L,b:J,a:J,blockquote:P,caption:L,i:J,u:J,tbody:M,s:L,address:X(D,I),tt:J,legend:L,q:L,pre:X(G,C),p:L,em:J,dfn:L};})();
+var FCKStyle=function(A){this.Element=(A.Element||'span').toLowerCase();this._StyleDesc=A;};FCKStyle.prototype={GetType:function(){var A=this.GetType_$;if (A!=undefined) return A;var B=this.Element;if (B=='#'||FCKListsLib.StyleBlockElements[B]) A=0;else if (FCKListsLib.StyleObjectElements[B]) A=2;else A=1;return (this.GetType_$=A);},ApplyToSelection:function(A){var B=new FCKDomRange(A);B.MoveToSelection();this.ApplyToRange(B,true);},ApplyToRange:function(A,B){switch (this.GetType()){case 0:this.ApplyToRange=this._ApplyBlockStyle;break;case 1:this.ApplyToRange=this._ApplyInlineStyle;break;default:return;};this.ApplyToRange(A,B);},ApplyToObject:function(A){if (!A) return;this.BuildElement(null,A);},RemoveFromSelection:function(A){var B=new FCKDomRange(A);B.MoveToSelection();this.RemoveFromRange(B,true);},RemoveFromRange:function(A,B){var C;var D=this._GetAttribsForComparison();var E=this._GetOverridesForComparison();if (A.CheckIsCollapsed()){var C=A.CreateBookmark(true);var G=A.GetBookmarkNode(C,true);var H=new FCKElementPath(G.parentNode);var I=[];var J=!FCKDomTools.GetNextSibling(G);var K=J||!FCKDomTools.GetPreviousSibling(G);var L;var M=-1;for (var i=0;i<H.Elements.length;i++){var N=H.Elements[i];if (this.CheckElementRemovable(N)){if (K&&!FCKDomTools.CheckIsEmptyElement(N,function(el){return (el!=G);})){L=N;M=I.length-1;}else{var O=N.nodeName.toLowerCase();if (O==this.Element){for (var P in D){if (FCKDomTools.HasAttribute(N,P)){switch (P){case 'style':this._RemoveStylesFromElement(N);break;case 'class':if (FCKDomTools.GetAttributeValue(N,P)!=this.GetFinalAttributeValue(P)) continue;default:FCKDomTools.RemoveAttribute(N,P);}}}};this._RemoveOverrides(N,E[O]);this._RemoveNoAttribElement(N);}}else if (K) I.push(N);K=K&&((J&&!FCKDomTools.GetNextSibling(N))||(!J&&!FCKDomTools.GetPreviousSibling(N)));if (L&&(!K||(i==H.Elements.length-1))){var Q=FCKDomTools.RemoveNode(G);for (var j=0;j<=M;j++){var R=FCKDomTools.CloneElement(I[j]);R.appendChild(Q);Q=R;};if (J) FCKDomTools.InsertAfterNode(L,Q);else L.parentNode.insertBefore(Q,L);K=false;L=null;}};if (B) A.SelectBookmark(C);return;};A.Expand('inline_elements');var C=A.CreateBookmark(true);var T=A.GetBookmarkNode(C,true);var U=A.GetBookmarkNode(C,false);A.Release(true);var H=new FCKElementPath(T);var X=H.Elements;var N;for (var i=1;i<X.length;i++){N=X[i];if (N==H.Block||N==H.BlockLimit) break;if (this.CheckElementRemovable(N)) FCKDomTools.BreakParent(T,N,A);};H=new FCKElementPath(U);X=H.Elements;for (var i=1;i<X.length;i++){N=X[i];if (N==H.Block||N==H.BlockLimit) break;b=N.nodeName.toLowerCase();if (this.CheckElementRemovable(N)) FCKDomTools.BreakParent(U,N,A);};var Z=FCKDomTools.GetNextSourceNode(T,true);while (Z){var a=FCKDomTools.GetNextSourceNode(Z);if (Z.nodeType==1){var b=Z.nodeName.toLowerCase();var c=(b==this.Element);if (c){for (var P in D){if (FCKDomTools.HasAttribute(Z,P)){switch (P){case 'style':this._RemoveStylesFromElement(Z);break;case 'class':if (FCKDomTools.GetAttributeValue(Z,P)!=this.GetFinalAttributeValue(P)) continue;default:FCKDomTools.RemoveAttribute(Z,P);}}}}else c=!!E[b];if (c){this._RemoveOverrides(Z,E[b]);this._RemoveNoAttribElement(Z);}};if (a==U) break;Z=a;};this._FixBookmarkStart(T);if (B) A.SelectBookmark(C);},CheckElementRemovable:function(A,B){if (!A) return false;var C=A.nodeName.toLowerCase();if (C==this.Element){if (!B&&!FCKDomTools.HasAttributes(A)) return true;var D=this._GetAttribsForComparison();var E=(D._length==0);for (var F in D){if (F=='_length') continue;if (this._CompareAttributeValues(F,FCKDomTools.GetAttributeValue(A,F),(this.GetFinalAttributeValue(F)||''))){E=true;if (!B) break;}else{E=false;if (B) return false;}};if (E) return true;};var G=this._GetOverridesForComparison()[C];if (G){if (!(D=G.Attributes)) return true;for (var i=0;i<D.length;i++){var H=D[i][0];if (FCKDomTools.HasAttribute(A,H)){var I=D[i][1];if (I==null||(typeof I=='string'&&FCKDomTools.GetAttributeValue(A,H)==I)||I.test(FCKDomTools.GetAttributeValue(A,H))) return true;}}};return false;},CheckActive:function(A){switch (this.GetType()){case 0:return this.CheckElementRemovable(A.Block||A.BlockLimit);case 1:var B=A.Elements;for (var i=0;i<B.length;i++){var C=B[i];if (C==A.Block||C==A.BlockLimit) continue;if (this.CheckElementRemovable(C,true)) return true;}};return false;},RemoveFromElement:function(A){var B=this._GetAttribsForComparison();var C=this._GetOverridesForComparison();var D=A.getElementsByTagName(this.Element);for (var i=D.length-1;i>=0;i--){var E=D[i];for (var F in B){if (FCKDomTools.HasAttribute(E,F)){switch (F){case 'style':this._RemoveStylesFromElement(E);break;case 'class':if (FCKDomTools.GetAttributeValue(E,F)!=this.GetFinalAttributeValue(F)) continue;default:FCKDomTools.RemoveAttribute(E,F);}}};this._RemoveOverrides(E,C[this.Element]);this._RemoveNoAttribElement(E);};for (var G in C){if (G!=this.Element){D=A.getElementsByTagName(G);for (var i=D.length-1;i>=0;i--){var E=D[i];this._RemoveOverrides(E,C[G]);this._RemoveNoAttribElement(E);}}}},_RemoveStylesFromElement:function(A){var B=A.style.cssText;var C=this.GetFinalStyleValue();if (B.length>0&&C.length==0) return;C='(^|;)\\s*('+C.replace(/\s*([^ ]+):.*?(;|$)/g,'$1|').replace(/\|$/,'')+'):[^;]+';var D=new RegExp(C,'gi');B=B.replace(D,'').Trim();if (B.length==0||B==';') FCKDomTools.RemoveAttribute(A,'style');else A.style.cssText=B.replace(D,'');},_RemoveOverrides:function(A,B){var C=B&&B.Attributes;if (C){for (var i=0;i<C.length;i++){var D=C[i][0];if (FCKDomTools.HasAttribute(A,D)){var E=C[i][1];if (E==null||(E.test&&E.test(FCKDomTools.GetAttributeValue(A,D)))||(typeof E=='string'&&FCKDomTools.GetAttributeValue(A,D)==E)) FCKDomTools.RemoveAttribute(A,D);}}}},_RemoveNoAttribElement:function(A){if (!FCKDomTools.HasAttributes(A)){var B=A.firstChild;var C=A.lastChild;FCKDomTools.RemoveNode(A,true);this._MergeSiblings(B);if (B!=C) this._MergeSiblings(C);}},BuildElement:function(A,B){var C=B||A.createElement(this.Element);var D=this._StyleDesc.Attributes;var E;if (D){for (var F in D){E=this.GetFinalAttributeValue(F);if (F.toLowerCase()=='class') C.className=E;else C.setAttribute(F,E);}};if (this._GetStyleText().length>0) C.style.cssText=this.GetFinalStyleValue();return C;},_CompareAttributeValues:function(A,B,C){if (A=='style'&&B&&C){B=B.replace(/;$/,'').toLowerCase();C=C.replace(/;$/,'').toLowerCase();};return (B==C)},GetFinalAttributeValue:function(A){var B=this._StyleDesc.Attributes;var B=B?B[A]:null;if (!B&&A=='style') return this.GetFinalStyleValue();if (B&&this._Variables) B=B.Replace(FCKRegexLib.StyleVariableAttName,this._GetVariableReplace,this);return B;},GetFinalStyleValue:function(){var A=this._GetStyleText();if (A.length>0&&this._Variables){A=A.Replace(FCKRegexLib.StyleVariableAttName,this._GetVariableReplace,this);A=FCKTools.NormalizeCssText(A);};return A;},_GetVariableReplace:function(){return this._Variables[arguments[2]]||arguments[0];},SetVariable:function(A,B){var C=this._Variables;if (!C) C=this._Variables={};this._Variables[A]=B;},_ApplyBlockStyle:function(A,B){var C;if (B) C=A.CreateBookmark(true);var D=new FCKDomRangeIterator(A);D.EnforceRealBlocks=true;var E;while((E=D.GetNextParagraph())){var F=E.parentNode.insertBefore(this.BuildElement(A.Window.document),E);FCKDomTools.MoveChildren(E,F);FCKDomTools.RemoveNode(E);};if (B) A.SelectBookmark(C);},_ApplyInlineStyle:function(A,B){var C=A.Window.document;if (A.CheckIsCollapsed()){var D=this.BuildElement(C);A.InsertNode(D);A.MoveToPosition(D,2);A.Select();return;};var E=this.Element;var F=FCK.DTD[E]||FCK.DTD.span;var G=this._GetAttribsForComparison();var H;A.Expand('inline_elements');var I=A.CreateBookmark(true);var J=A.GetBookmarkNode(I,true);var K=A.GetBookmarkNode(I,false);A.Release(true);var L=FCKDomTools.GetNextSourceNode(J,true);while (L){var M=false;var N=L.nodeType;var O=N==1?L.nodeName.toLowerCase():null;if (!O||F[O]){if ((FCK.DTD[L.parentNode.nodeName.toLowerCase()]||FCK.DTD.span)[E]){if (!A.CheckHasRange()) A.SetStart(L,3);if (N!=1||L.childNodes.length==0){var P=L;var Q=P.parentNode;while (P==Q.lastChild&&F[Q.nodeName.toLowerCase()]){P=Q;};A.SetEnd(P,4);if (P==P.parentNode.lastChild&&!F[P.parentNode.nodeName.toLowerCase()]) M=true;}else{A.SetEnd(L,3);}}else M=true;}else M=true;L=FCKDomTools.GetNextSourceNode(L);if (L==K){L=null;M=true;};if (M&&A.CheckHasRange()&&!A.CheckIsCollapsed()){H=this.BuildElement(C);A.ExtractContents().AppendTo(H);if (H.innerHTML.RTrim().length>0){A.InsertNode(H);this.RemoveFromElement(H);this._MergeSiblings(H,this._GetAttribsForComparison());if (!FCKBrowserInfo.IsIE) H.normalize();};A.Release(true);}};this._FixBookmarkStart(J);if (B) A.SelectBookmark(I);},_FixBookmarkStart:function(A){var B;while ((B=A.nextSibling)){if (B.nodeType==1&&FCKListsLib.InlineNonEmptyElements[B.nodeName.toLowerCase()]){if (!B.firstChild) FCKDomTools.RemoveNode(B);else FCKDomTools.MoveNode(A,B,true);continue;};if (B.nodeType==3&&B.length==0){FCKDomTools.RemoveNode(B);continue;};break;}},_MergeSiblings:function(A,B){if (!A||A.nodeType!=1||!FCKListsLib.InlineNonEmptyElements[A.nodeName.toLowerCase()]) return;this._MergeNextSibling(A,B);this._MergePreviousSibling(A,B);},_MergeNextSibling:function(A,B){var C=A.nextSibling;var D=(C&&C.nodeType==1&&C.getAttribute('_fck_bookmark'));if (D) C=C.nextSibling;if (C&&C.nodeType==1&&C.nodeName==A.nodeName){if (!B) B=this._CreateElementAttribsForComparison(A);if (this._CheckAttributesMatch(C,B)){var E=A.lastChild;if (D) FCKDomTools.MoveNode(A.nextSibling,A);FCKDomTools.MoveChildren(C,A);FCKDomTools.RemoveNode(C);if (E) this._MergeNextSibling(E);}}},_MergePreviousSibling:function(A,B){var C=A.previousSibling;var D=(C&&C.nodeType==1&&C.getAttribute('_fck_bookmark'));if (D) C=C.previousSibling;if (C&&C.nodeType==1&&C.nodeName==A.nodeName){if (!B) B=this._CreateElementAttribsForComparison(A);if (this._CheckAttributesMatch(C,B)){var E=A.firstChild;if (D) FCKDomTools.MoveNode(A.previousSibling,A,true);FCKDomTools.MoveChildren(C,A,true);FCKDomTools.RemoveNode(C);if (E) this._MergePreviousSibling(E);}}},_GetStyleText:function(){var A=this._StyleDesc.Styles;var B=(this._StyleDesc.Attributes?this._StyleDesc.Attributes['style']||'':'');if (B.length>0) B+=';';for (var C in A) B+=C+':'+A[C]+';';if (B.length>0&&!(/#\(/.test(B))){B=FCKTools.NormalizeCssText(B);};return (this._GetStyleText=function() { return B;})();},_GetAttribsForComparison:function(){var A=this._GetAttribsForComparison_$;if (A) return A;A={};var B=this._StyleDesc.Attributes;if (B){for (var C in B){A[C.toLowerCase()]=B[C].toLowerCase();}};if (this._GetStyleText().length>0){A['style']=this._GetStyleText().toLowerCase();};FCKTools.AppendLengthProperty(A,'_length');return (this._GetAttribsForComparison_$=A);},_GetOverridesForComparison:function(){var A=this._GetOverridesForComparison_$;if (A) return A;A={};var B=this._StyleDesc.Overrides;if (B){if (!FCKTools.IsArray(B)) B=[B];for (var i=0;i<B.length;i++){var C=B[i];var D;var E;var F;if (typeof C=='string') D=C.toLowerCase();else{D=C.Element?C.Element.toLowerCase():this.Element;F=C.Attributes;};E=A[D]||(A[D]={});if (F){var G=(E.Attributes=E.Attributes||[]);for (var H in F){G.push([H.toLowerCase(),F[H]]);}}}};return (this._GetOverridesForComparison_$=A);},_CreateElementAttribsForComparison:function(A){var B={};var C=0;for (var i=0;i<A.attributes.length;i++){var D=A.attributes[i];if (D.specified){B[D.nodeName.toLowerCase()]=FCKDomTools.GetAttributeValue(A,D).toLowerCase();C++;}};B._length=C;return B;},_CheckAttributesMatch:function(A,B){var C=A.attributes;var D=0;for (var i=0;i<C.length;i++){var E=C[i];if (E.specified){var F=E.nodeName.toLowerCase();var G=B[F];if (!G) break;if (G!=FCKDomTools.GetAttributeValue(A,E).toLowerCase()) break;D++;}};return (D==B._length);}};
+var FCKStyles=FCK.Styles={_Callbacks:{},_ObjectStyles:{},ApplyStyle:function(A){if (typeof A=='string') A=this.GetStyles()[A];if (A){if (A.GetType()==2) A.ApplyToObject(FCKSelection.GetSelectedElement());else A.ApplyToSelection(FCK.EditorWindow);FCK.Events.FireEvent('OnSelectionChange');}},RemoveStyle:function(A){if (typeof A=='string') A=this.GetStyles()[A];if (A){A.RemoveFromSelection(FCK.EditorWindow);FCK.Events.FireEvent('OnSelectionChange');}},AttachStyleStateChange:function(A,B,C){var D=this._Callbacks[A];if (!D) D=this._Callbacks[A]=[];D.push([B,C]);},CheckSelectionChanges:function(){var A=FCKSelection.GetBoundaryParentElement(true);if (!A) return;var B=new FCKElementPath(A);var C=this.GetStyles();for (var D in C){var E=this._Callbacks[D];if (E){var F=C[D];var G=F.CheckActive(B);if (F._LastState!=G){F._LastState=G;for (var i=0;i<E.length;i++){var H=E[i][0];var I=E[i][1];H.call(I||window,D,G);}}}}},CheckStyleInSelection:function(A){return false;},_GetRemoveFormatTagsRegex:function (){var A=new RegExp('^(?:'+FCKConfig.RemoveFormatTags.replace(/,/g,'|')+')$','i');return (this._GetRemoveFormatTagsRegex=function(){return A;})&&A;},RemoveAll:function(){var A=new FCKDomRange(FCK.EditorWindow);A.MoveToSelection();if (A.CheckIsCollapsed()) return;A.Expand('inline_elements');var B=A.CreateBookmark(true);var C=A.GetBookmarkNode(B,true);var D=A.GetBookmarkNode(B,false);A.Release(true);var E=this._GetRemoveFormatTagsRegex();var F=new FCKElementPath(C);var G=F.Elements;var H;for (var i=1;i<G.length;i++){H=G[i];if (H==F.Block||H==F.BlockLimit) break;if (E.test(H.nodeName)) FCKDomTools.BreakParent(C,H,A);};F=new FCKElementPath(D);G=F.Elements;for (var i=1;i<G.length;i++){H=G[i];if (H==F.Block||H==F.BlockLimit) break;elementName=H.nodeName.toLowerCase();if (E.test(H.nodeName)) FCKDomTools.BreakParent(D,H,A);};var I=FCKDomTools.GetNextSourceNode(C,true,1);while (I){if (I==D) break;var J=FCKDomTools.GetNextSourceNode(I,false,1);if (E.test(I.nodeName)) FCKDomTools.RemoveNode(I,true);I=J;};A.SelectBookmark(B);FCK.Events.FireEvent('OnSelectionChange');},GetStyle:function(A){return this.GetStyles()[A];},GetStyles:function(){var A=this._GetStyles;if (!A){A=this._GetStyles=FCKTools.Merge(this._LoadStylesCore(),this._LoadStylesCustom(),this._LoadStylesXml());};return A;},CheckHasObjectStyle:function(A){return!!this._ObjectStyles[A];},_LoadStylesCore:function(){var A={};var B=FCKConfig.CoreStyles;for (var C in B){var D=A['_FCK_'+C]=new FCKStyle(B[C]);D.IsCore=true;};return A;},_LoadStylesCustom:function(){var A={};var B=FCKConfig.CustomStyles;if (B){for (var C in B){var D=A[C]=new FCKStyle(B[C]);D.Name=C;}};return A;},_LoadStylesXml:function(){var A={};var B=FCKConfig.StylesXmlPath;if (!B||B.length==0) return A;var C=new FCKXml();C.LoadUrl(B);var D=FCKXml.TransformToObject(C.SelectSingleNode('Styles'));var E=D.$Style;for (var i=0;i<E.length;i++){var F=E[i];var G=(F.element||'').toLowerCase();if (G.length==0) throw('The element name is required. Error loading "'+B+'"');var H={Element:G,Attributes:{},Styles:{},Overrides:[]};var I=F.$Attribute||[];for (var j=0;j<I.length;j++){H.Attributes[I[j].name]=I[j].value;};var J=F.$Style||[];for (j=0;j<J.length;j++){H.Styles[J[j].name]=J[j].value;};var K=F.$Override;if (K){for (j=0;j<K.length;j++){var L=K[j];var M={Element:L.element};var N=L.$Attribute;if (N){M.Attributes={};for (var k=0;k<N.length;k++){var O=N[k].value||null;if (O){var P=O&&FCKRegexLib.RegExp.exec(O);if (P) O=new RegExp(P[1],P[2]||'');};M.Attributes[N[k].name]=O;}};H.Overrides.push(M);}};var Q=new FCKStyle(H);Q.Name=F.name||G;if (Q.GetType()==2) this._ObjectStyles[G]=true;A[Q.Name]=Q;};return A;}};
+var FCKListHandler={OutdentListItem:function(A){var B=A.parentNode;if (B.tagName.toUpperCase().Equals('UL','OL')){var C=FCKTools.GetElementDocument(A);var D=new FCKDocumentFragment(C);var E=D.RootNode;var F=false;var G=FCKDomTools.GetFirstChild(A,['UL','OL']);if (G){F=true;var H;while ((H=G.firstChild)) E.appendChild(G.removeChild(H));FCKDomTools.RemoveNode(G);};var I;var J=false;while ((I=A.nextSibling)){if (!F&&I.nodeType==1&&I.nodeName.toUpperCase()=='LI') J=F=true;E.appendChild(I.parentNode.removeChild(I));if (!J&&I.nodeType==1&&I.nodeName.toUpperCase().Equals('UL','OL')) FCKDomTools.RemoveNode(I,true);};var K=B.parentNode.tagName.toUpperCase();var L=(K=='LI');if (L||K.Equals('UL','OL')){if (F){var G=B.cloneNode(false);D.AppendTo(G);A.appendChild(G);}else if (L) D.InsertAfterNode(B.parentNode);else D.InsertAfterNode(B);if (L) FCKDomTools.InsertAfterNode(B.parentNode,B.removeChild(A));else FCKDomTools.InsertAfterNode(B,B.removeChild(A));}else{if (F){var N=B.cloneNode(false);D.AppendTo(N);FCKDomTools.InsertAfterNode(B,N);};var O=C.createElement(FCKConfig.EnterMode=='p'?'p':'div');FCKDomTools.MoveChildren(B.removeChild(A),O);FCKDomTools.InsertAfterNode(B,O);if (FCKConfig.EnterMode=='br'){if (FCKBrowserInfo.IsGecko) O.parentNode.insertBefore(FCKTools.CreateBogusBR(C),O);else FCKDomTools.InsertAfterNode(O,FCKTools.CreateBogusBR(C));FCKDomTools.RemoveNode(O,true);}};if (this.CheckEmptyList(B)) FCKDomTools.RemoveNode(B,true);}},CheckEmptyList:function(A){return (FCKDomTools.GetFirstChild(A,'LI')==null);},CheckListHasContents:function(A){var B=A.firstChild;while (B){switch (B.nodeType){case 1:if (!B.nodeName.IEquals('UL','LI')) return true;break;case 3:if (B.nodeValue.Trim().length>0) return true;};B=B.nextSibling;};return false;}};
+var FCKElementPath=function(A){var B=null;var C=null;var D=[];var e=A;while (e){if (e.nodeType==1){if (!this.LastElement) this.LastElement=e;var E=e.nodeName.toLowerCase();if (!C){if (!B&&FCKListsLib.PathBlockElements[E]!=null) B=e;if (FCKListsLib.PathBlockLimitElements[E]!=null){if (!B&&E=='div') B=e;else C=e;}};D.push(e);if (E=='body') break;};e=e.parentNode;};this.Block=B;this.BlockLimit=C;this.Elements=D;};
+var FCKDomRange=function(A){this.Window=A;this._Cache={};};FCKDomRange.prototype={_UpdateElementInfo:function(){var A=this._Range;if (!A) this.Release(true);else{var B=A.startContainer;var C=A.endContainer;var D=new FCKElementPath(B);this.StartNode=B.nodeType==3?B:B.childNodes[A.startOffset];this.StartContainer=B;this.StartBlock=D.Block;this.StartBlockLimit=D.BlockLimit;if (B!=C) D=new FCKElementPath(C);var E=C;if (A.endOffset==0){while (E&&!E.previousSibling) E=E.parentNode;if (E) E=E.previousSibling;}else if (E.nodeType==1) E=E.childNodes[A.endOffset-1];this.EndNode=E;this.EndContainer=C;this.EndBlock=D.Block;this.EndBlockLimit=D.BlockLimit;};this._Cache={};},CreateRange:function(){return new FCKW3CRange(this.Window.document);},DeleteContents:function(){if (this._Range){this._Range.deleteContents();this._UpdateElementInfo();}},ExtractContents:function(){if (this._Range){var A=this._Range.extractContents();this._UpdateElementInfo();return A;}},CheckIsCollapsed:function(){if (this._Range) return this._Range.collapsed;},Collapse:function(A){if (this._Range) this._Range.collapse(A);this._UpdateElementInfo();},Clone:function(){var A=FCKTools.CloneObject(this);if (this._Range) A._Range=this._Range.cloneRange();return A;},MoveToNodeContents:function(A){if (!this._Range) this._Range=this.CreateRange();this._Range.selectNodeContents(A);this._UpdateElementInfo();},MoveToElementStart:function(A){this.SetStart(A,1);this.SetEnd(A,1);},MoveToElementEditStart:function(A){var B;while ((B=A.firstChild)&&B.nodeType==1&&FCKListsLib.EmptyElements[B.nodeName.toLowerCase()]==null) A=B;this.MoveToElementStart(A);},InsertNode:function(A){if (this._Range) this._Range.insertNode(A);},CheckIsEmpty:function(){if (this.CheckIsCollapsed()) return true;var A=this.Window.document.createElement('div');this._Range.cloneContents().AppendTo(A);FCKDomTools.TrimNode(A);return (A.innerHTML.length==0);},CheckStartOfBlock:function(){var A=this._Cache.IsStartOfBlock;if (A!=undefined) return A;var B=this.Clone();B.Collapse(true);B.SetStart(B.StartBlock||B.StartBlockLimit,1);if (B.CheckIsCollapsed()) A=true;else{var C=B.Window.document.createElement('div');B._Range.cloneContents().AppendTo(C);FCKDomTools.LTrimNode(C);A=(C.innerHTML.length==0);};B.Release();return (this._Cache.IsStartOfBlock=A);},CheckEndOfBlock:function(A){var B=this._Cache.IsEndOfBlock;if (B!=undefined) return B;var C=this.Clone();C.Collapse(false);C.SetEnd(C.EndBlock||C.EndBlockLimit,2);B=C.CheckIsCollapsed();if (!B){var D=this.Window.document.createElement('div');C._Range.cloneContents().AppendTo(D);FCKDomTools.TrimNode(D);B=true;var E=D;while ((E=E.lastChild)){if (E.previousSibling||E.nodeType!=1||FCKListsLib.InlineChildReqElements[E.nodeName.toLowerCase()]==null){B=false;break;}}};C.Release();if (A) this.Select();return this._Cache.IsEndOfBlock=B;},CreateBookmark:function(A){var B={StartId:(new Date()).valueOf()+Math.floor(Math.random()*1000)+'S',EndId:(new Date()).valueOf()+Math.floor(Math.random()*1000)+'E'};var C=this.Window.document;var D;var E;var F;if (!this.CheckIsCollapsed()){E=C.createElement('span');E.style.display='none';E.id=B.EndId;E.setAttribute('_fck_bookmark',true);E.innerHTML='&nbsp;';F=this.Clone();F.Collapse(false);F.InsertNode(E);};D=C.createElement('span');D.style.display='none';D.id=B.StartId;D.setAttribute('_fck_bookmark',true);D.innerHTML='&nbsp;';F=this.Clone();F.Collapse(true);F.InsertNode(D);if (A){B.StartNode=D;B.EndNode=E;};if (E){this.SetStart(D,4);this.SetEnd(E,3);}else this.MoveToPosition(D,4);return B;},GetBookmarkNode:function(A,B){var C=this.Window.document;if (B) return A.StartNode||C.getElementById(A.StartId);else return A.EndNode||C.getElementById(A.EndId);},MoveToBookmark:function(A,B){var C=this.GetBookmarkNode(A,true);var D=this.GetBookmarkNode(A,false);this.SetStart(C,3);if (!B) FCKDomTools.RemoveNode(C);if (D){this.SetEnd(D,3);if (!B) FCKDomTools.RemoveNode(D);}else this.Collapse(true);this._UpdateElementInfo();},CreateBookmark2:function(){if (!this._Range) return { "Start":0,"End":0 };var A={"Start":[this._Range.startOffset],"End":[this._Range.endOffset]};var B=this._Range.startContainer.previousSibling;var C=this._Range.endContainer.previousSibling;while (B&&B.nodeType==3){A.Start[0]+=B.length;B=B.previousSibling;};while (C&&C.nodeType==3){A.End[0]+=C.length;C=C.previousSibling;};A.Start=FCKDomTools.GetNodeAddress(this._Range.startContainer,true).concat(A.Start);A.End=FCKDomTools.GetNodeAddress(this._Range.endContainer,true).concat(A.End);return A;},MoveToBookmark2:function(A){var B=FCKDomTools.GetNodeFromAddress(this.Window.document,A.Start.slice(0,-1),true);var C=FCKDomTools.GetNodeFromAddress(this.Window.document,A.End.slice(0,-1),true);this.Release(true);this._Range=new FCKW3CRange(this.Window.document);var D=A.Start[A.Start.length-1];var E=A.End[A.End.length-1];while (B.nodeType==3&&D>B.length){if (!B.nextSibling||B.nextSibling.nodeType!=3) break;D-=B.length;B=B.nextSibling;};while (C.nodeType==3&&E>C.length){if (!C.nextSibling||C.nextSibling.nodeType!=3) break;E-=C.length;C=C.nextSibling;};this._Range.setStart(B,D);this._Range.setEnd(C,E);this._UpdateElementInfo();},MoveToPosition:function(A,B){this.SetStart(A,B);this.Collapse(true);},SetStart:function(A,B,C){var D=this._Range;if (!D) D=this._Range=this.CreateRange();switch(B){case 1:D.setStart(A,0);break;case 2:D.setStart(A,A.childNodes.length);break;case 3:D.setStartBefore(A);break;case 4:D.setStartAfter(A);};if (!C) this._UpdateElementInfo();},SetEnd:function(A,B,C){var D=this._Range;if (!D) D=this._Range=this.CreateRange();switch(B){case 1:D.setEnd(A,0);break;case 2:D.setEnd(A,A.childNodes.length);break;case 3:D.setEndBefore(A);break;case 4:D.setEndAfter(A);};if (!C) this._UpdateElementInfo();},Expand:function(A){var B,oSibling;switch (A){case 'inline_elements':if (this._Range.startOffset==0){B=this._Range.startContainer;if (B.nodeType!=1) B=B.previousSibling?null:B.parentNode;if (B){while (FCKListsLib.InlineNonEmptyElements[B.nodeName.toLowerCase()]){this._Range.setStartBefore(B);if (B!=B.parentNode.firstChild) break;B=B.parentNode;}}};B=this._Range.endContainer;var C=this._Range.endOffset;if ((B.nodeType==3&&C>=B.nodeValue.length)||(B.nodeType==1&&C>=B.childNodes.length)||(B.nodeType!=1&&B.nodeType!=3)){if (B.nodeType!=1) B=B.nextSibling?null:B.parentNode;if (B){while (FCKListsLib.InlineNonEmptyElements[B.nodeName.toLowerCase()]){this._Range.setEndAfter(B);if (B!=B.parentNode.lastChild) break;B=B.parentNode;}}};break;case 'block_contents':case 'list_contents':var D=FCKListsLib.BlockBoundaries;if (A=='list_contents'||FCKConfig.EnterMode=='br') D=FCKListsLib.ListBoundaries;if (this.StartBlock&&FCKConfig.EnterMode!='br'&&A=='block_contents') this.SetStart(this.StartBlock,1);else{B=this._Range.startContainer;if (B.nodeType==1){var E=B.childNodes[this._Range.startOffset];if (E) B=FCKDomTools.GetPreviousSourceNode(E,true);else B=B.lastChild||B;};while (B&&(B.nodeType!=1||(B!=this.StartBlockLimit&&!D[B.nodeName.toLowerCase()]))){this._Range.setStartBefore(B);B=B.previousSibling||B.parentNode;}};if (this.EndBlock&&FCKConfig.EnterMode!='br'&&A=='block_contents'&&this.EndBlock.nodeName.toLowerCase()!='li') this.SetEnd(this.EndBlock,2);else{B=this._Range.endContainer;if (B.nodeType==1) B=B.childNodes[this._Range.endOffset]||B.lastChild;while (B&&(B.nodeType!=1||(B!=this.StartBlockLimit&&!D[B.nodeName.toLowerCase()]))){this._Range.setEndAfter(B);B=B.nextSibling||B.parentNode;};if (B&&B.nodeName.toLowerCase()=='br') this._Range.setEndAfter(B);};this._UpdateElementInfo();}},SplitBlock:function(){if (!this._Range) this.MoveToSelection();if (this.StartBlockLimit==this.EndBlockLimit){var A=this.StartBlock;var B=this.EndBlock;if (FCKConfig.EnterMode!='br'){if (!A){A=this.FixBlock(true);B=this.EndBlock;};if (!B) B=this.FixBlock(false);};var C=(A!=null&&this.CheckStartOfBlock());var D=(B!=null&&this.CheckEndOfBlock());if (!this.CheckIsEmpty()) this.DeleteContents();if (A&&B&&A==B){if (D){this.MoveToPosition(B,4);B=null;}else if (C){this.MoveToPosition(A,3);A=null;}else{this.SetEnd(A,2);var E=this.ExtractContents();B=A.cloneNode(false);B.removeAttribute('id',false);E.AppendTo(B);FCKDomTools.InsertAfterNode(A,B);this.MoveToPosition(A,4);if (FCKBrowserInfo.IsGecko&&!A.nodeName.IEquals(['ul','ol'])) FCKTools.AppendBogusBr(A);}};return {PreviousBlock:A,NextBlock:B,WasStartOfBlock:C,WasEndOfBlock:D};};return null;},FixBlock:function(A){var B=this.CreateBookmark();this.Collapse(A);this.Expand('block_contents');var C=this.Window.document.createElement(FCKConfig.EnterMode);this.ExtractContents().AppendTo(C);FCKDomTools.TrimNode(C);this.InsertNode(C);this.MoveToBookmark(B);return C;},Release:function(A){if (!A) this.Window=null;this.StartNode=null;this.StartContainer=null;this.StartBlock=null;this.StartBlockLimit=null;this.EndNode=null;this.EndContainer=null;this.EndBlock=null;this.EndBlockLimit=null;this._Range=null;this._Cache=null;},CheckHasRange:function(){return!!this._Range;},GetTouchedStartNode:function(){var A=this._Range;var B=A.startContainer;if (A.collapsed||B.nodeType!=1) return B;return B.childNodes[A.startOffset]||B;},GetTouchedEndNode:function(){var A=this._Range;var B=A.endContainer;if (A.collapsed||B.nodeType!=1) return B;return B.childNodes[A.endOffset-1]||B;}};
+FCKDomRange.prototype.MoveToSelection=function(){this.Release(true);this._Range=new FCKW3CRange(this.Window.document);var A=this.Window.document.selection;if (A.type!='Control'){var B=this._GetSelectionMarkerTag(true);var C=this._GetSelectionMarkerTag(false);if (!B&&!C){this._Range.setStart(this.Window.document.body,0);this._UpdateElementInfo();return;};this._Range.setStart(B.parentNode,FCKDomTools.GetIndexOf(B));B.parentNode.removeChild(B);this._Range.setEnd(C.parentNode,FCKDomTools.GetIndexOf(C));C.parentNode.removeChild(C);this._UpdateElementInfo();}else{var D=A.createRange().item(0);if (D){this._Range.setStartBefore(D);this._Range.setEndAfter(D);this._UpdateElementInfo();}}};FCKDomRange.prototype.Select=function(){if (this._Range) this.SelectBookmark(this.CreateBookmark(true));};FCKDomRange.prototype.SelectBookmark=function(A){var B=this.CheckIsCollapsed();var C;var D;var E=this.GetBookmarkNode(A,true);if (!E) return;var F;if (!B) F=this.GetBookmarkNode(A,false);var G=this.Window.document.body.createTextRange();G.moveToElementText(E);G.moveStart('character',1);if (F){var H=this.Window.document.body.createTextRange();H.moveToElementText(F);G.setEndPoint('EndToEnd',H);G.moveEnd('character',-1);}else{C=(!E.previousSibling||E.previousSibling.nodeName.toLowerCase()=='br')&&!E.nextSibing;D=this.Window.document.createElement('span');D.innerHTML='&#65279;';E.parentNode.insertBefore(D,E);if (C){E.parentNode.insertBefore(this.Window.document.createTextNode('\ufeff'),E);}};if (!this._Range) this._Range=this.CreateRange();this._Range.setStartBefore(E);E.parentNode.removeChild(E);if (B){if (C){G.moveStart('character',-1);G.select();this.Window.document.selection.clear();}else G.select();FCKDomTools.RemoveNode(D);}else{this._Range.setEndBefore(F);F.parentNode.removeChild(F);G.select();}};FCKDomRange.prototype._GetSelectionMarkerTag=function(A){var B=this.Window.document;var C=B.selection;var D;try{D=C.createRange();}catch (e){return null;};if (D.parentElement().document!=B) return null;D.collapse(A===true);var E='fck_dom_range_temp_'+(new Date()).valueOf()+'_'+Math.floor(Math.random()*1000);D.pasteHTML('<span id="'+E+'"></span>');return B.getElementById(E);};
+var FCKDomRangeIterator=function(A){this.Range=A;this.ForceBrBreak=false;this.EnforceRealBlocks=false;};FCKDomRangeIterator.CreateFromSelection=function(A){var B=new FCKDomRange(A);B.MoveToSelection();return new FCKDomRangeIterator(B);};FCKDomRangeIterator.prototype={GetNextParagraph:function(){var A;var B;var C;var D;var E;var F=this.ForceBrBreak?FCKListsLib.ListBoundaries:FCKListsLib.BlockBoundaries;if (!this._LastNode){var B=this.Range.Clone();B.Expand(this.ForceBrBreak?'list_contents':'block_contents');this._NextNode=B.GetTouchedStartNode();this._LastNode=B.GetTouchedEndNode();B=null;};var H=this._NextNode;var I=this._LastNode;while (H){var J=false;var K=(H.nodeType!=1);var L=false;if (!K){var M=H.nodeName.toLowerCase();if (F[M]){if (M=='br') K=true;else if (!B&&H.childNodes.length==0&&M!='hr'){A=H;C=H==I;break;};J=true;}else{if (H.firstChild){if (!B){B=new FCKDomRange(this.Range.Window);B.SetStart(H,3,true);};H=H.firstChild;continue;};K=true;}}else if (H.nodeType==3){if (/^[\r\n\t ]+$/.test(H.nodeValue)) K=false;};if (K&&!B){B=new FCKDomRange(this.Range.Window);B.SetStart(H,3,true);};C=((!J||K)&&H==I);if (B&&!J){while (!H.nextSibling&&!C){var N=H.parentNode;if (F[N.nodeName.toLowerCase()]){J=true;C=C||(N==I);break;};H=N;C=(H==I);L=true;}};if (K) B.SetEnd(H,4,true);if ((J||C)&&B){B._UpdateElementInfo();if (B.StartNode==B.EndNode&&B.StartNode.parentNode==B.StartBlockLimit&&B.StartNode.getAttribute&&B.StartNode.getAttribute('_fck_bookmark')) B=null;else break;};if (C) break;H=FCKDomTools.GetNextSourceNode(H,L,null,I);};if (!A){if (!B){this._NextNode=null;return null;};A=B.StartBlock;if (!A&&!this.EnforceRealBlocks&&B.StartBlockLimit.nodeName.IEquals('DIV','TH','TD')&&B.CheckStartOfBlock()&&B.CheckEndOfBlock()){A=B.StartBlockLimit;}else if (!A||(this.EnforceRealBlocks&&A.nodeName.toLowerCase()=='li')){A=this.Range.Window.document.createElement(FCKConfig.EnterMode=='p'?'p':'div');B.ExtractContents().AppendTo(A);FCKDomTools.TrimNode(A);B.InsertNode(A);D=true;E=true;}else if (A.nodeName.toLowerCase()!='li'){if (!B.CheckStartOfBlock()||!B.CheckEndOfBlock()){A=A.cloneNode(false);B.ExtractContents().AppendTo(A);FCKDomTools.TrimNode(A);var O=B.SplitBlock();D=!O.WasStartOfBlock;E=!O.WasEndOfBlock;B.InsertNode(A);}}else if (!C){this._NextNode=A==I?null:FCKDomTools.GetNextSourceNode(B.EndNode,true,null,I);return A;}};if (D){var P=A.previousSibling;if (P&&P.nodeType==1&&P.nodeName.toLowerCase()=='br') P.parentNode.removeChild(P);};if (E){var Q=A.lastChild;if (Q&&Q.nodeType==1&&Q.nodeName.toLowerCase()=='br') A.removeChild(Q);};this._NextNode=(C||A==I)?null:FCKDomTools.GetNextSourceNode(A,true,null,I);return A;}};
+var FCKDocumentFragment=function(A){this._Document=A;this.RootNode=A.createElement('div');};FCKDocumentFragment.prototype={AppendTo:function(A){FCKDomTools.MoveChildren(this.RootNode,A);},AppendHtml:function(A){var B=this._Document.createElement('div');B.innerHTML=A;FCKDomTools.MoveChildren(B,this.RootNode);},InsertAfterNode:function(A){var B=this.RootNode;var C;while((C=B.lastChild)) FCKDomTools.InsertAfterNode(A,B.removeChild(C));}};
+var FCKW3CRange=function(A){this._Document=A;this.startContainer=null;this.startOffset=null;this.endContainer=null;this.endOffset=null;this.collapsed=true;};FCKW3CRange.CreateRange=function(A){return new FCKW3CRange(A);};FCKW3CRange.CreateFromRange=function(A,B){var C=FCKW3CRange.CreateRange(A);C.setStart(B.startContainer,B.startOffset);C.setEnd(B.endContainer,B.endOffset);return C;};FCKW3CRange.prototype={_UpdateCollapsed:function(){this.collapsed=(this.startContainer==this.endContainer&&this.startOffset==this.endOffset);},setStart:function(A,B){this.startContainer=A;this.startOffset=B;if (!this.endContainer){this.endContainer=A;this.endOffset=B;};this._UpdateCollapsed();},setEnd:function(A,B){this.endContainer=A;this.endOffset=B;if (!this.startContainer){this.startContainer=A;this.startOffset=B;};this._UpdateCollapsed();},setStartAfter:function(A){this.setStart(A.parentNode,FCKDomTools.GetIndexOf(A)+1);},setStartBefore:function(A){this.setStart(A.parentNode,FCKDomTools.GetIndexOf(A));},setEndAfter:function(A){this.setEnd(A.parentNode,FCKDomTools.GetIndexOf(A)+1);},setEndBefore:function(A){this.setEnd(A.parentNode,FCKDomTools.GetIndexOf(A));},collapse:function(A){if (A){this.endContainer=this.startContainer;this.endOffset=this.startOffset;}else{this.startContainer=this.endContainer;this.startOffset=this.endOffset;};this.collapsed=true;},selectNodeContents:function(A){this.setStart(A,0);this.setEnd(A,A.nodeType==3?A.data.length:A.childNodes.length);},insertNode:function(A){var B=this.startContainer;var C=this.startOffset;if (B.nodeType==3){B.splitText(C);if (B==this.endContainer) this.setEnd(B.nextSibling,this.endOffset-this.startOffset);FCKDomTools.InsertAfterNode(B,A);return;}else{B.insertBefore(A,B.childNodes[C]||null);if (B==this.endContainer){this.endOffset++;this.collapsed=false;}}},deleteContents:function(){if (this.collapsed) return;this._ExecContentsAction(0);},extractContents:function(){var A=new FCKDocumentFragment(this._Document);if (!this.collapsed) this._ExecContentsAction(1,A);return A;},cloneContents:function(){var A=new FCKDocumentFragment(this._Document);if (!this.collapsed) this._ExecContentsAction(2,A);return A;},_ExecContentsAction:function(A,B){var C=this.startContainer;var D=this.endContainer;var E=this.startOffset;var F=this.endOffset;var G=false;var H=false;if (D.nodeType==3) D=D.splitText(F);else{if (D.childNodes.length>0){if (F>D.childNodes.length-1){D=FCKDomTools.InsertAfterNode(D.lastChild,this._Document.createTextNode(''));H=true;}else D=D.childNodes[F];}};if (C.nodeType==3){C.splitText(E);if (C==D) D=C.nextSibling;}else{if (C.childNodes.length>0&&E<=C.childNodes.length-1){if (E==0){C=C.insertBefore(this._Document.createTextNode(''),C.firstChild);G=true;}else C=C.childNodes[E].previousSibling;}};var I=FCKDomTools.GetParents(C);var J=FCKDomTools.GetParents(D);var i,topStart,topEnd;for (i=0;i<I.length;i++){topStart=I[i];topEnd=J[i];if (topStart!=topEnd) break;};var K,levelStartNode,levelClone,currentNode,currentSibling;if (B) K=B.RootNode;for (var j=i;j<I.length;j++){levelStartNode=I[j];if (K&&levelStartNode!=C) levelClone=K.appendChild(levelStartNode.cloneNode(levelStartNode==C));currentNode=levelStartNode.nextSibling;while(currentNode){if (currentNode==J[j]||currentNode==D) break;currentSibling=currentNode.nextSibling;if (A==2) K.appendChild(currentNode.cloneNode(true));else{currentNode.parentNode.removeChild(currentNode);if (A==1) K.appendChild(currentNode);};currentNode=currentSibling;};if (K) K=levelClone;};if (B) K=B.RootNode;for (var k=i;k<J.length;k++){levelStartNode=J[k];if (A>0&&levelStartNode!=D) levelClone=K.appendChild(levelStartNode.cloneNode(levelStartNode==D));if (!I[k]||levelStartNode.parentNode!=I[k].parentNode){currentNode=levelStartNode.previousSibling;while(currentNode){if (currentNode==I[k]||currentNode==C) break;currentSibling=currentNode.previousSibling;if (A==2) K.insertBefore(currentNode.cloneNode(true),K.firstChild);else{currentNode.parentNode.removeChild(currentNode);if (A==1) K.insertBefore(currentNode,K.firstChild);};currentNode=currentSibling;}};if (K) K=levelClone;};if (A==2){var L=this.startContainer;if (L.nodeType==3){L.data+=L.nextSibling.data;L.parentNode.removeChild(L.nextSibling);};var M=this.endContainer;if (M.nodeType==3&&M.nextSibling){M.data+=M.nextSibling.data;M.parentNode.removeChild(M.nextSibling);}}else{if (topStart&&topEnd&&(C.parentNode!=topStart.parentNode||D.parentNode!=topEnd.parentNode)){var N=FCKDomTools.GetIndexOf(topEnd);if (G&&topEnd.parentNode==C.parentNode) N--;this.setStart(topEnd.parentNode,N);};this.collapse(true);};if(G) C.parentNode.removeChild(C);if(H&&D.parentNode) D.parentNode.removeChild(D);},cloneRange:function(){return FCKW3CRange.CreateFromRange(this._Document,this);}};
+var FCKEnterKey=function(A,B,C,D){this.Window=A;this.EnterMode=B||'p';this.ShiftEnterMode=C||'br';var E=new FCKKeystrokeHandler(false);E._EnterKey=this;E.OnKeystroke=FCKEnterKey_OnKeystroke;E.SetKeystrokes([[13,'Enter'],[SHIFT+13,'ShiftEnter'],[9,'Tab'],[8,'Backspace'],[CTRL+8,'CtrlBackspace'],[46,'Delete']]);if (D>0){this.TabText='';while (D-->0) this.TabText+='\xa0';};E.AttachToElement(A.document);};function FCKEnterKey_OnKeystroke(A,B){var C=this._EnterKey;try{switch (B){case 'Enter':return C.DoEnter();break;case 'ShiftEnter':return C.DoShiftEnter();break;case 'Backspace':return C.DoBackspace();break;case 'Delete':return C.DoDelete();break;case 'Tab':return C.DoTab();break;case 'CtrlBackspace':return C.DoCtrlBackspace();break;}}catch (e){};return false;};FCKEnterKey.prototype.DoEnter=function(A,B){FCKUndo.SaveUndoStep();this._HasShift=(B===true);var C=FCKSelection.GetParentElement();var D=new FCKElementPath(C);var E=A||this.EnterMode;if (E=='br'||D.Block&&D.Block.tagName.toLowerCase()=='pre') return this._ExecuteEnterBr();else return this._ExecuteEnterBlock(E);};FCKEnterKey.prototype.DoShiftEnter=function(){return this.DoEnter(this.ShiftEnterMode,true);};FCKEnterKey.prototype.DoBackspace=function(){var A=false;var B=new FCKDomRange(this.Window);B.MoveToSelection();if (FCKBrowserInfo.IsIE&&this._CheckIsAllContentsIncluded(B,this.Window.document.body)){this._FixIESelectAllBug(B);return true;};var C=B.CheckIsCollapsed();if (!C){if (FCKBrowserInfo.IsIE&&this.Window.document.selection.type.toLowerCase()=="control"){var D=this.Window.document.selection.createRange();for (var i=D.length-1;i>=0;i--){var E=D.item(i);E.parentNode.removeChild(E);};return true;};return false;};var F=B.StartBlock;var G=B.EndBlock;if (B.StartBlockLimit==B.EndBlockLimit&&F&&G){if (!C){var H=B.CheckEndOfBlock();B.DeleteContents();if (F!=G){B.SetStart(G,1);B.SetEnd(G,1);};B.Select();A=(F==G);};if (B.CheckStartOfBlock()){var I=B.StartBlock;var J=FCKDomTools.GetPreviousSourceElement(I,true,['BODY',B.StartBlockLimit.nodeName],['UL','OL']);A=this._ExecuteBackspace(B,J,I);}else if (FCKBrowserInfo.IsGeckoLike){B.Select();}};B.Release();return A;};FCKEnterKey.prototype.DoCtrlBackspace=function(){FCKUndo.SaveUndoStep();var A=new FCKDomRange(this.Window);A.MoveToSelection();if (FCKBrowserInfo.IsIE&&this._CheckIsAllContentsIncluded(A,this.Window.document.body)){this._FixIESelectAllBug(A);return true;};return false;};FCKEnterKey.prototype._ExecuteBackspace=function(A,B,C){var D=false;if (!B&&C&&C.nodeName.IEquals('LI')&&C.parentNode.parentNode.nodeName.IEquals('LI')){this._OutdentWithSelection(C,A);return true;};if (B&&B.nodeName.IEquals('LI')){var E=FCKDomTools.GetLastChild(B,['UL','OL']);while (E){B=FCKDomTools.GetLastChild(E,'LI');E=FCKDomTools.GetLastChild(B,['UL','OL']);}};if (B&&C){if (C.nodeName.IEquals('LI')&&!B.nodeName.IEquals('LI')){this._OutdentWithSelection(C,A);return true;};var F=C.parentNode;var G=B.nodeName.toLowerCase();if (FCKListsLib.EmptyElements[G]!=null||G=='table'){FCKDomTools.RemoveNode(B);D=true;}else{FCKDomTools.RemoveNode(C);while (F.innerHTML.Trim().length==0){var H=F.parentNode;H.removeChild(F);F=H;};FCKDomTools.LTrimNode(C);FCKDomTools.RTrimNode(B);A.SetStart(B,2,true);A.Collapse(true);var I=A.CreateBookmark();if (!C.tagName.IEquals(['TABLE'])) FCKDomTools.MoveChildren(C,B);A.MoveToBookmark(I);A.Select();D=true;}};return D;};FCKEnterKey.prototype.DoDelete=function(){FCKUndo.SaveUndoStep();var A=false;var B=new FCKDomRange(this.Window);B.MoveToSelection();if (FCKBrowserInfo.IsIE&&this._CheckIsAllContentsIncluded(B,this.Window.document.body)){this._FixIESelectAllBug(B);return true;};if (B.CheckIsCollapsed()&&B.CheckEndOfBlock(FCKBrowserInfo.IsGeckoLike)){var C=B.StartBlock;var D=FCKTools.GetElementAscensor(C,'td');var E=FCKDomTools.GetNextSourceElement(C,true,[B.StartBlockLimit.nodeName],['UL','OL','TR']);if (D){var F=FCKTools.GetElementAscensor(E,'td');if (F!=D) return true;};A=this._ExecuteBackspace(B,C,E);};B.Release();return A;};FCKEnterKey.prototype.DoTab=function(){var A=new FCKDomRange(this.Window);A.MoveToSelection();var B=A._Range.startContainer;while (B){if (B.nodeType==1){var C=B.tagName.toLowerCase();if (C=="tr"||C=="td"||C=="th"||C=="tbody"||C=="table") return false;else break;};B=B.parentNode;};if (this.TabText){A.DeleteContents();A.InsertNode(this.Window.document.createTextNode(this.TabText));A.Collapse(false);A.Select();};return true;};FCKEnterKey.prototype._ExecuteEnterBlock=function(A,B){var C=B||new FCKDomRange(this.Window);var D=C.SplitBlock();if (D){var E=D.PreviousBlock;var F=D.NextBlock;var G=D.WasStartOfBlock;var H=D.WasEndOfBlock;if (!D.WasStartOfBlock&&!D.WasEndOfBlock){if (F) C.MoveToElementEditStart(F);}else{if (G&&H&&E.tagName.toUpperCase()=='LI'){C.MoveToElementStart(E);this._OutdentWithSelection(E,C);C.Release();return true;};var I;if (E){var J=E.tagName.toUpperCase();if (this._HasShift||(/^H[1-6]$/).test(J)) I=this.Window.document.createElement(A);else{I=FCKDomTools.CloneElement(E);this._RecreateEndingTree(E,I);}}else if (F){I=FCKDomTools.CloneElement(F);}else I=this.Window.document.createElement(A);if (FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(I);C.InsertNode(I);if (FCKBrowserInfo.IsIE){C.MoveToNodeContents(I);C.Select();};C.MoveToElementEditStart(G&&!H?F:I);if (FCKBrowserInfo.IsGeckoLike) I.scrollIntoView(false);};C.Select();};C.Release();return true;};FCKEnterKey.prototype._ExecuteEnterBr=function(A){var B=new FCKDomRange(this.Window);B.MoveToSelection();if (B.StartBlockLimit==B.EndBlockLimit){B.DeleteContents();B.MoveToSelection();var C=B.CheckStartOfBlock();var D=B.CheckEndOfBlock();var E=B.StartBlock?B.StartBlock.tagName.toUpperCase():'';var F=this._HasShift;if (!F&&E=='LI') return this._ExecuteEnterBlock(null,B);if (!F&&D&&(/^H[1-6]$/).test(E)){FCKDomTools.InsertAfterNode(B.StartBlock,this.Window.document.createElement('br'));if (FCKBrowserInfo.IsGecko) FCKDomTools.InsertAfterNode(B.StartBlock,this.Window.document.createTextNode(''));B.SetStart(B.StartBlock.nextSibling,FCKBrowserInfo.IsIE?3:1);}else{var G=null;if (E.IEquals('pre')) G=this.Window.document.createTextNode(FCKBrowserInfo.IsIE?'\r':'\n');else G=this.Window.document.createElement('br');B.InsertNode(G);if (FCKBrowserInfo.IsGecko) FCKDomTools.InsertAfterNode(G,this.Window.document.createTextNode(''));if (D&&FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(G.parentNode);if (FCKBrowserInfo.IsIE) B.SetStart(G,4);else B.SetStart(G.nextSibling,1);if (!FCKBrowserInfo.IsIE){var H=null;if (FCKBrowserInfo.IsOpera) H=this.Window.document.createElement('span');else H=this.Window.document.createElement('br');G.parentNode.insertBefore(H,G.nextSibling);H.scrollIntoView(false);H.parentNode.removeChild(H);}};B.Collapse(true);B.Select();};B.Release();return true;};FCKEnterKey.prototype._RecreateEndingTree=function(A,B){while ((A=A.lastChild)&&A.nodeType==1&&FCKListsLib.InlineChildReqElements[A.nodeName.toLowerCase()]!=null) B=B.insertBefore(FCKDomTools.CloneElement(A),B.firstChild);};FCKEnterKey.prototype._OutdentWithSelection=function(A,B){var C=B.CreateBookmark();FCKListHandler.OutdentListItem(A);B.MoveToBookmark(C);B.Select();};FCKEnterKey.prototype._CheckIsAllContentsIncluded=function(A,B){var C=false;var D=false;if (A.StartContainer==B||A.StartContainer==B.firstChild) C=(A._Range.startOffset==0);if (A.EndContainer==B||A.EndContainer==B.lastChild){var E=A.EndContainer.nodeType==3?A.EndContainer.length:A.EndContainer.childNodes.length;D=(A._Range.endOffset==E);};return C&&D;};FCKEnterKey.prototype._FixIESelectAllBug=function(A){var B=this.Window.document;B.body.innerHTML='';var C;if (FCKConfig.EnterMode.IEquals(['div','p'])){C=B.createElement(FCKConfig.EnterMode);B.body.appendChild(C);}else C=B.body;A.MoveToNodeContents(C);A.Collapse(true);A.Select();A.Release();};
+var FCKDocumentProcessor={};FCKDocumentProcessor._Items=[];FCKDocumentProcessor.AppendNew=function(){var A={};this._Items.AddItem(A);return A;};FCKDocumentProcessor.Process=function(A){var B,i=0;while((B=this._Items[i++])) B.ProcessDocument(A);};var FCKDocumentProcessor_CreateFakeImage=function(A,B){var C=FCK.EditorDocument.createElement('IMG');C.className=A;C.src=FCKConfig.FullBasePath+'images/spacer.gif';C.setAttribute('_fckfakelement','true',0);C.setAttribute('_fckrealelement',FCKTempBin.AddElement(B),0);return C;};if (FCKBrowserInfo.IsIE||FCKBrowserInfo.IsOpera){var FCKAnchorsProcessor=FCKDocumentProcessor.AppendNew();FCKAnchorsProcessor.ProcessDocument=function(A){var B=A.getElementsByTagName('A');var C;var i=B.length-1;while (i>=0&&(C=B[i--])){if (C.name.length>0){if (C.innerHTML!==''){if (FCKBrowserInfo.IsIE) C.className+=' FCK__AnchorC';}else{var D=FCKDocumentProcessor_CreateFakeImage('FCK__Anchor',C.cloneNode(true));D.setAttribute('_fckanchor','true',0);C.parentNode.insertBefore(D,C);C.parentNode.removeChild(C);}}}}};var FCKPageBreaksProcessor=FCKDocumentProcessor.AppendNew();FCKPageBreaksProcessor.ProcessDocument=function(A){var B=A.getElementsByTagName('DIV');var C;var i=B.length-1;while (i>=0&&(C=B[i--])){if (C.style.pageBreakAfter=='always'&&C.childNodes.length==1&&C.childNodes[0].style&&C.childNodes[0].style.display=='none'){var D=FCKDocumentProcessor_CreateFakeImage('FCK__PageBreak',C.cloneNode(true));C.parentNode.insertBefore(D,C);C.parentNode.removeChild(C);}}};var FCKFlashProcessor=FCKDocumentProcessor.AppendNew();FCKFlashProcessor.ProcessDocument=function(A){var B=A.getElementsByTagName('EMBED');var C;var i=B.length-1;while (i>=0&&(C=B[i--])){var D=C.attributes['type'];if ((C.src&&C.src.EndsWith('.swf',true))||(D&&D.nodeValue=='application/x-shockwave-flash')){var E=C.cloneNode(true);var F=FCKDocumentProcessor_CreateFakeImage('FCK__Flash',E);F.setAttribute('_fckflash','true',0);FCKFlashProcessor.RefreshView(F,C);C.parentNode.insertBefore(F,C);C.parentNode.removeChild(C);}}};FCKFlashProcessor.RefreshView=function(A,B){if (B.getAttribute('width')>0) A.style.width=FCKTools.ConvertHtmlSizeToStyle(B.getAttribute('width'));if (B.getAttribute('height')>0) A.style.height=FCKTools.ConvertHtmlSizeToStyle(B.getAttribute('height'));};FCK.GetRealElement=function(A){var e=FCKTempBin.Elements[A.getAttribute('_fckrealelement')];if (A.getAttribute('_fckflash')){if (A.style.width.length>0) e.width=FCKTools.ConvertStyleSizeToHtml(A.style.width);if (A.style.height.length>0) e.height=FCKTools.ConvertStyleSizeToHtml(A.style.height);};return e;};if (FCKBrowserInfo.IsIE){FCKDocumentProcessor.AppendNew().ProcessDocument=function(A){var B=A.getElementsByTagName('HR');var C;var i=B.length-1;while (i>=0&&(C=B[i--])){var D=A.createElement('hr');D.mergeAttributes(C,true);FCKDomTools.InsertAfterNode(C,D);C.parentNode.removeChild(C);}}};FCKDocumentProcessor.AppendNew().ProcessDocument=function(A){var B=A.getElementsByTagName('INPUT');var C;var i=B.length-1;while (i>=0&&(C=B[i--])){if (C.type=='hidden'){var D=FCKDocumentProcessor_CreateFakeImage('FCK__InputHidden',C.cloneNode(true));D.setAttribute('_fckinputhidden','true',0);C.parentNode.insertBefore(D,C);C.parentNode.removeChild(C);}}}
+var FCKSelection=FCK.Selection={GetParentBlock:function(){var A=this.GetParentElement();while (A){if (FCKListsLib.BlockBoundaries[A.nodeName.toLowerCase()]) break;A=A.parentNode;};return A;},ApplyStyle:function(A){FCKStyles.ApplyStyle(new FCKStyle(A));}};
+FCKSelection.GetType=function(){try{var A=FCK.EditorDocument.selection.type;if (A=='Control'||A=='Text') return A;if (FCK.EditorDocument.selection.createRange().parentElement) return 'Text';}catch(e){};return 'None';};FCKSelection.GetSelectedElement=function(){if (this.GetType()=='Control'){var A=FCK.EditorDocument.selection.createRange();if (A&&A.item) return FCK.EditorDocument.selection.createRange().item(0);};return null;};FCKSelection.GetParentElement=function(){switch (this.GetType()){case 'Control':var A=FCKSelection.GetSelectedElement();return A?A.parentElement:null;case 'None':return null;default:return FCK.EditorDocument.selection.createRange().parentElement();}};FCKSelection.GetBoundaryParentElement=function(A){switch (this.GetType()){case 'Control':var B=FCKSelection.GetSelectedElement();return B?B.parentElement:null;case 'None':return null;default:var C=FCK.EditorDocument;var D=C.selection.createRange();D.collapse(A!==false);var B=D.parentElement();return FCKTools.GetElementDocument(B)==C?B:null;}};FCKSelection.SelectNode=function(A){FCK.Focus();FCK.EditorDocument.selection.empty();var B;try{B=FCK.EditorDocument.body.createControlRange();B.addElement(A);}catch(e){B=FCK.EditorDocument.body.createTextRange();B.moveToElementText(A);};B.select();};FCKSelection.Collapse=function(A){FCK.Focus();if (this.GetType()=='Text'){var B=FCK.EditorDocument.selection.createRange();B.collapse(A==null||A===true);B.select();}};FCKSelection.HasAncestorNode=function(A){var B;if (FCK.EditorDocument.selection.type=="Control"){B=this.GetSelectedElement();}else{var C=FCK.EditorDocument.selection.createRange();B=C.parentElement();};while (B){if (B.tagName==A) return true;B=B.parentNode;};return false;};FCKSelection.MoveToAncestorNode=function(A){var B,oRange;if (!FCK.EditorDocument) return null;if (FCK.EditorDocument.selection.type=="Control"){oRange=FCK.EditorDocument.selection.createRange();for (i=0;i<oRange.length;i++){if (oRange(i).parentNode){B=oRange(i).parentNode;break;}}}else{oRange=FCK.EditorDocument.selection.createRange();B=oRange.parentElement();};while (B&&B.nodeName!=A) B=B.parentNode;return B;};FCKSelection.Delete=function(){var A=FCK.EditorDocument.selection;if (A.type.toLowerCase()!="none"){A.clear();};return A;};
+var FCKTableHandler={};FCKTableHandler.InsertRow=function(A){var B=FCKSelection.MoveToAncestorNode('TR');if (!B) return;var C=B.cloneNode(true);B.parentNode.insertBefore(C,B);FCKTableHandler.ClearRow(A?C:B);};FCKTableHandler.DeleteRows=function(A){if (!A){var B=FCKTableHandler.GetSelectedCells();var C=[];for (var i=0;i<B.length;i++){var D=FCKTools.GetElementAscensor(B[i],'TR');C[D.rowIndex]=D;};for (var i=C.length;i>=0;i--){if (C[i]) FCKTableHandler.DeleteRows(C[i]);};return;};var E=FCKTools.GetElementAscensor(A,'TABLE');if (E.rows.length==1){FCKTableHandler.DeleteTable(E);return;};A.parentNode.removeChild(A);};FCKTableHandler.DeleteTable=function(A){if (!A){A=FCKSelection.GetSelectedElement();if (!A||A.tagName!='TABLE') A=FCKSelection.MoveToAncestorNode('TABLE');};if (!A) return;FCKSelection.SelectNode(A);FCKSelection.Collapse();if (A.parentNode.childNodes.length==1) A.parentNode.parentNode.removeChild(A.parentNode);else A.parentNode.removeChild(A);};FCKTableHandler.InsertColumn=function(A){var B=null;var C=this.GetSelectedCells();if (C&&C.length) B=C[A?0:(C.length-1)];if (!B) return;var D=FCKTools.GetElementAscensor(B,'TABLE');var E=B.cellIndex;for (var i=0;i<D.rows.length;i++){var F=D.rows[i];if (F.cells.length<(E+1)) continue;B=F.cells[E].cloneNode(false);if (FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(B);var G=F.cells[E];if (A) F.insertBefore(B,G);else if (G.nextSibling) F.insertBefore(B,G.nextSibling);else F.appendChild(B);}};FCKTableHandler.DeleteColumns=function(A){if (!A){var B=FCKTableHandler.GetSelectedCells();for (var i=B.length;i>=0;i--){if (B[i]) FCKTableHandler.DeleteColumns(B[i]);};return;};if (!A) return;var C=FCKTools.GetElementAscensor(A,'TABLE');var D=A.cellIndex;for (var i=C.rows.length-1;i>=0;i--){var E=C.rows[i];if (D==0&&E.cells.length==1){FCKTableHandler.DeleteRows(E);continue;};if (E.cells[D]) E.removeChild(E.cells[D]);}};FCKTableHandler.InsertCell=function(A,B){var C=null;var D=this.GetSelectedCells();if (D&&D.length) C=D[B?0:(D.length-1)];if (!C) return null;var E=FCK.EditorDocument.createElement('TD');if (FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(E);if (!B&&C.cellIndex==C.parentNode.cells.length-1) C.parentNode.appendChild(E);else C.parentNode.insertBefore(E,B?C:C.nextSibling);return E;};FCKTableHandler.DeleteCell=function(A){if (A.parentNode.cells.length==1){FCKTableHandler.DeleteRows(FCKTools.GetElementAscensor(A,'TR'));return;};A.parentNode.removeChild(A);};FCKTableHandler.DeleteCells=function(){var A=FCKTableHandler.GetSelectedCells();for (var i=A.length-1;i>=0;i--){FCKTableHandler.DeleteCell(A[i]);}};FCKTableHandler._MarkCells=function(A,B){for (var i=0;i<A.length;i++) A[i][B]=true;};FCKTableHandler._UnmarkCells=function(A,B){for (var i=0;i<A.length;i++){if (FCKBrowserInfo.IsIE) A[i].removeAttribute(B);else delete A[i][B];}};FCKTableHandler._ReplaceCellsByMarker=function(A,B,C){for (var i=0;i<A.length;i++){for (var j=0;j<A[i].length;j++){if (A[i][j][B]) A[i][j]=C;}}};FCKTableHandler._GetMarkerGeometry=function(A,B,C,D){var E=0;var F=0;var G=0;var H=0;for (var i=C;A[B][i]&&A[B][i][D];i++) E++;for (var i=C-1;A[B][i]&&A[B][i][D];i--){E++;G++;};for (var i=B;A[i]&&A[i][C]&&A[i][C][D];i++) F++;for (var i=B-1;A[i]&&A[i][C]&&A[i][C][D];i--){F++;H++;};return { 'width':E,'height':F,'x':G,'y':H };};FCKTableHandler.CheckIsSelectionRectangular=function(){var A=FCKTableHandler.GetSelectedCells();if (A.length<1) return false;this._MarkCells(A,'_CellSelected');var B=this._CreateTableMap(A[0].parentNode.parentNode);var C=A[0].parentNode.rowIndex;var D=this._GetCellIndexSpan(B,C,A[0]);var E=this._GetMarkerGeometry(B,C,D,'_CellSelected');var F=D-E.x;var G=C-E.y;if (E.width>=E.height){for (D=F;D<F+E.width;D++){C=G+(D-F) % E.height;if (!B[C]||!B[C][D]){this._UnmarkCells(A,'_CellSelected');return false;};var g=this._GetMarkerGeometry(B,C,D,'_CellSelected');if (g.width!=E.width||g.height!=E.height){this._UnmarkCells(A,'_CellSelected');return false;}}}else{for (C=G;C<G+E.height;C++){D=F+(C-G) % E.width;if (!B[C]||!B[C][D]){this._UnmarkCells(A,'_CellSelected');return false;};var g=this._GetMarkerGeometry(B,C,D,'_CellSelected');if (g.width!=E.width||g.height!=E.height){this._UnmarkCells(A,'_CellSelected');return false;}}};this._UnmarkCells(A,'_CellSelected');return true;};FCKTableHandler.MergeCells=function(){var A=this.GetSelectedCells();if (A.length<2) return;var B=A[0];var C=this._CreateTableMap(B.parentNode.parentNode);var D=B.parentNode.rowIndex;var E=this._GetCellIndexSpan(C,D,B);this._MarkCells(A,'_SelectedCells');var F=this._GetMarkerGeometry(C,D,E,'_SelectedCells');var G=E-F.x;var H=D-F.y;var I=B.ownerDocument.createDocumentFragment();for (var i=0;i<F.height;i++){var J=0;for (var j=0;j<F.width;j++){var K=C[H+i][G+j];while (K.childNodes.length>0){var L=K.removeChild(K.firstChild);if (L.nodeType!=1||(L.getAttribute('type',2)!='_moz'&&L.getAttribute('_moz_dirty')!=null)){I.appendChild(L);J++;}}};if (J>0) I.appendChild(B.ownerDocument.createElement('br'));};this._ReplaceCellsByMarker(C,'_SelectedCells',B);this._UnmarkCells(A,'_SelectedCells');this._InstallTableMap(C,B.parentNode.parentNode);B.appendChild(I);if (FCKBrowserInfo.IsGeckoLike&&(!B.firstChild)) FCKTools.AppendBogusBr(B);this._MoveCaretToCell(B,false);};FCKTableHandler.MergeRight=function(){var A=this.GetMergeRightTarget();if (A==null) return;var B=A.refCell;var C=A.tableMap;var D=A.nextCell;var E=FCK.EditorDocument.createDocumentFragment();while (D&&D.childNodes&&D.childNodes.length>0) E.appendChild(D.removeChild(D.firstChild));D.parentNode.removeChild(D);B.appendChild(E);this._MarkCells([D],'_Replace');this._ReplaceCellsByMarker(C,'_Replace',B);this._InstallTableMap(C,B.parentNode.parentNode);this._MoveCaretToCell(B,false);};FCKTableHandler.MergeDown=function(){var A=this.GetMergeDownTarget();if (A==null) return;var B=A.refCell;var C=A.tableMap;var D=A.nextCell;var E=B.ownerDocument.createDocumentFragment();while (D&&D.childNodes&&D.childNodes.length>0) E.appendChild(D.removeChild(D.firstChild));if (E.firstChild) E.insertBefore(D.ownerDocument.createElement('br'),E.firstChild);B.appendChild(E);this._MarkCells([D],'_Replace');this._ReplaceCellsByMarker(C,'_Replace',B);this._InstallTableMap(C,B.parentNode.parentNode);this._MoveCaretToCell(B,false);};FCKTableHandler.HorizontalSplitCell=function(){var A=FCKTableHandler.GetSelectedCells();if (A.length!=1) return;var B=A[0];var C=this._CreateTableMap(B.parentNode.parentNode);var D=B.parentNode.rowIndex;var E=FCKTableHandler._GetCellIndexSpan(C,D,B);var F=isNaN(B.colSpan)?1:B.colSpan;if (F>1){var G=Math.ceil(F/2);var H=B.ownerDocument.createElement('td');if (FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(H);var I=E+G;var J=E+F;var K=isNaN(B.rowSpan)?1:B.rowSpan;for (var r=D;r<D+K;r++){for (var i=I;i<J;i++) C[r][i]=H;}}else{var L=[];for (var i=0;i<C.length;i++){var M=C[i].slice(0,E);if (C[i].length<=E){L.push(M);continue;};if (C[i][E]==B){M.push(B);M.push(B.ownerDocument.createElement('td'));if (FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(M[M.length-1]);}else{M.push(C[i][E]);M.push(C[i][E]);};for (var j=E+1;j<C[i].length;j++) M.push(C[i][j]);L.push(M);};C=L;};this._InstallTableMap(C,B.parentNode.parentNode);};FCKTableHandler.VerticalSplitCell=function(){var A=FCKTableHandler.GetSelectedCells();if (A.length!=1) return;var B=A[0];var C=this._CreateTableMap(B.parentNode.parentNode);var D=FCKTableHandler._GetCellIndexSpan(C,B.parentNode.rowIndex,B);var E=B.rowSpan;var F=B.parentNode.rowIndex;if (isNaN(E)) E=1;if (E>1){B.rowSpan=Math.ceil(E/2);var G=F+Math.ceil(E/2);var H=null;for (var i=D+1;i<C[G].length;i++){if (C[G][i].parentNode.rowIndex==G){H=C[G][i];break;}};var I=FCK.EditorDocument.createElement('td');I.rowSpan=Math.floor(E/2);if (FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(I);B.parentNode.parentNode.rows[G].insertBefore(I,H);}else{var G=F+1;var K=FCK.EditorDocument.createElement('tr');B.parentNode.parentNode.insertBefore(K,B.parentNode.parentNode.rows[G]);for (var i=0;i<C[F].length;){var L=C[F][i].colSpan;if (isNaN(L)||L<1) L=1;if (i==D){i+=L;continue;};var M=C[F][i].rowSpan;if (isNaN(M)) M=1;C[F][i].rowSpan=M+1;i+=L;};var I=FCK.EditorDocument.createElement('td');if (FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(I);K.appendChild(I);}};FCKTableHandler._GetCellIndexSpan=function(A,B,C){if (A.length<B+1) return null;var D=A[B];for (var c=0;c<D.length;c++){if (D[c]==C) return c;};return null;};FCKTableHandler._GetCellLocation=function(A,B){for (var i=0;i<A.length;i++){for (var c=0;c<A[i].length;c++){if (A[i][c]==B) return [i,c];}};return null;};FCKTableHandler._GetColumnCells=function(A,B){var C=[];for (var r=0;r<A.length;r++){var D=A[r][B];if (D&&(C.length==0||C[C.length-1]!=D)) C[C.length]=D;};return C;};FCKTableHandler._CreateTableMap=function(A){var B=A.rows;var r=-1;var C=[];for (var i=0;i<B.length;i++){r++;if (!C[r]) C[r]=[];var c=-1;for (var j=0;j<B[i].cells.length;j++){var D=B[i].cells[j];c++;while (C[r][c]) c++;var E=isNaN(D.colSpan)?1:D.colSpan;var F=isNaN(D.rowSpan)?1:D.rowSpan;for (var G=0;G<F;G++){if (!C[r+G]) C[r+G]=[];for (var H=0;H<E;H++){C[r+G][c+H]=B[i].cells[j];}};c+=E-1;}};return C;};FCKTableHandler._InstallTableMap=function(A,B){while (B.rows.length>0){var C=B.rows[0];C.parentNode.removeChild(C);};for (var i=0;i<A.length;i++){for (var j=0;j<A[i].length;j++){var D=A[i][j];if (D.parentNode) D.parentNode.removeChild(D);D.colSpan=D.rowSpan=1;}};var E=0;for (var i=0;i<A.length;i++){for (var j=0;j<A[i].length;j++){var D=A[i][j];if (!D) continue;if (j>E) E=j;if (D._colScanned===true) continue;if (A[i][j-1]==D) D.colSpan++;if (A[i][j+1]!=D) D._colScanned=true;}};for (var i=0;i<=E;i++){for (var j=0;j<A.length;j++){if (!A[j]) continue;var D=A[j][i];if (!D||D._rowScanned===true) continue;if (A[j-1]&&A[j-1][i]==D) D.rowSpan++;if (!A[j+1]||A[j+1][i]!=D) D._rowScanned=true;}};for (var i=0;i<A.length;i++){for (var j=0;j<A[i].length;j++){var D=A[i][j];if (FCKBrowserInfo.IsIE){D.removeAttribute('_colScanned');D.removeAttribute('_rowScanned');}else{delete D._colScanned;delete D._rowScanned;}}};for (var i=0;i<A.length;i++){var I=B.ownerDocument.createElement('tr');for (var j=0;j<A[i].length;){var D=A[i][j];if (A[i-1]&&A[i-1][j]==D){j+=D.colSpan;continue;};I.appendChild(D);j+=D.colSpan;if (D.colSpan==1) D.removeAttribute('colspan');if (D.rowSpan==1) D.removeAttribute('rowspan');};B.appendChild(I);}};FCKTableHandler._MoveCaretToCell=function (A,B){var C=new FCKDomRange(FCK.EditorWindow);C.MoveToNodeContents(A);C.Collapse(B);C.Select();};FCKTableHandler.ClearRow=function(A){var B=A.cells;for (var i=0;i<B.length;i++){B[i].innerHTML='';if (FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(B[i]);}};FCKTableHandler.GetMergeRightTarget=function(){var A=this.GetSelectedCells();if (A.length!=1) return null;var B=A[0];var C=this._CreateTableMap(B.parentNode.parentNode);var D=B.parentNode.rowIndex;var E=this._GetCellIndexSpan(C,D,B);var F=E+(isNaN(B.colSpan)?1:B.colSpan);var G=C[D][F];if (!G) return null;this._MarkCells([B,G],'_SizeTest');var H=this._GetMarkerGeometry(C,D,E,'_SizeTest');var I=this._GetMarkerGeometry(C,D,F,'_SizeTest');this._UnmarkCells([B,G],'_SizeTest');if (H.height!=I.height||H.y!=I.y) return null;return { 'refCell':B,'nextCell':G,'tableMap':C };};FCKTableHandler.GetMergeDownTarget=function(){var A=this.GetSelectedCells();if (A.length!=1) return null;var B=A[0];var C=this._CreateTableMap(B.parentNode.parentNode);var D=B.parentNode.rowIndex;var E=this._GetCellIndexSpan(C,D,B);var F=D+(isNaN(B.rowSpan)?1:B.rowSpan);if (!C[F]) return null;var G=C[F][E];if (!G) return null;this._MarkCells([B,G],'_SizeTest');var H=this._GetMarkerGeometry(C,D,E,'_SizeTest');var I=this._GetMarkerGeometry(C,F,E,'_SizeTest');this._UnmarkCells([B,G],'_SizeTest');if (H.width!=I.width||H.x!=I.x) return null;return { 'refCell':B,'nextCell':G,'tableMap':C };};
+FCKTableHandler.GetSelectedCells=function(){if (FCKSelection.GetType()=='Control'){var A=FCKSelection.MoveToAncestorNode('TD');return A?[A]:[];};var B=[];var C=FCK.EditorDocument.selection.createRange();var D=FCKSelection.GetParentElement();if (D&&D.tagName.Equals('TD','TH')) B[0]=D;else{D=FCKSelection.MoveToAncestorNode('TABLE');if (D){for (var i=0;i<D.cells.length;i++){var E=FCK.EditorDocument.body.createTextRange();E.moveToElementText(D.cells[i]);if (C.inRange(E)||(C.compareEndPoints('StartToStart',E)>=0&&C.compareEndPoints('StartToEnd',E)<=0)||(C.compareEndPoints('EndToStart',E)>=0&&C.compareEndPoints('EndToEnd',E)<=0)){B[B.length]=D.cells[i];}}}};return B;};
+var FCKXml=function(){this.Error=false;};FCKXml.GetAttribute=function(A,B,C){var D=A.attributes.getNamedItem(B);return D?D.value:C;};FCKXml.TransformToObject=function(A){if (!A) return null;var B={};var C=A.attributes;for (var i=0;i<C.length;i++){var D=C[i];B[D.name]=D.value;};var E=A.childNodes;for (i=0;i<E.length;i++){var F=E[i];if (F.nodeType==1){var G='$'+F.nodeName;var H=B[G];if (!H) H=B[G]=[];H.push(this.TransformToObject(F));}};return B;}
+FCKXml.prototype={LoadUrl:function(A){this.Error=false;var B=FCKTools.CreateXmlObject('XmlHttp');if (!B){this.Error=true;return;};B.open("GET",A,false);B.send(null);if (B.status==200||B.status==304) this.DOMDocument=B.responseXML;else if (B.status==0&&B.readyState==4){this.DOMDocument=FCKTools.CreateXmlObject('DOMDocument');this.DOMDocument.async=false;this.DOMDocument.resolveExternals=false;this.DOMDocument.loadXML(B.responseText);}else{this.DOMDocument=null;};if (this.DOMDocument==null||this.DOMDocument.firstChild==null){this.Error=true;if (window.confirm('Error loading "'+A+'"\r\nDo you want to see more info?')) alert('URL requested: "'+A+'"\r\nServer response:\r\nStatus: '+B.status+'\r\nResponse text:\r\n'+B.responseText);}},SelectNodes:function(A,B){if (this.Error) return [];if (B) return B.selectNodes(A);else return this.DOMDocument.selectNodes(A);},SelectSingleNode:function(A,B){if (this.Error) return null;if (B) return B.selectSingleNode(A);else return this.DOMDocument.selectSingleNode(A);}};
+var FCKNamedCommand=function(A){this.Name=A;};FCKNamedCommand.prototype.Execute=function(){FCK.ExecuteNamedCommand(this.Name);};FCKNamedCommand.prototype.GetState=function(){return FCK.GetNamedCommandState(this.Name);};
+var FCKStyleCommand=function(){};FCKStyleCommand.prototype={Name:'Style',Execute:function(A,B){FCKUndo.SaveUndoStep();if (B.Selected) FCK.Styles.RemoveStyle(B.Style);else FCK.Styles.ApplyStyle(B.Style);FCKUndo.SaveUndoStep();FCK.Focus();FCK.Events.FireEvent('OnSelectionChange');},GetState:function(){if (!FCK.EditorDocument) return -1;if (FCKSelection.GetType()=='Control'){var A=FCKSelection.GetSelectedElement();if (!A||!FCKStyles.CheckHasObjectStyle(A.nodeName.toLowerCase())) return -1;};return 0;}};
+var FCKDialogCommand=function(A,B,C,D,E,F,G){this.Name=A;this.Title=B;this.Url=C;this.Width=D;this.Height=E;this.GetStateFunction=F;this.GetStateParam=G;this.Resizable=false;};FCKDialogCommand.prototype.Execute=function(){FCKDialog.OpenDialog('FCKDialog_'+this.Name,this.Title,this.Url,this.Width,this.Height,null,null,this.Resizable);};FCKDialogCommand.prototype.GetState=function(){if (this.GetStateFunction) return this.GetStateFunction(this.GetStateParam);else return 0;};var FCKUndefinedCommand=function(){this.Name='Undefined';};FCKUndefinedCommand.prototype.Execute=function(){alert(FCKLang.NotImplemented);};FCKUndefinedCommand.prototype.GetState=function(){return 0;};var FCKFormatBlockCommand=function(){};FCKFormatBlockCommand.prototype={Name:'FormatBlock',Execute:FCKStyleCommand.prototype.Execute,GetState:function(){return FCK.EditorDocument?0:-1;}};var FCKFontNameCommand=function(){};FCKFontNameCommand.prototype={Name:'FontName',Execute:FCKStyleCommand.prototype.Execute,GetState:FCKFormatBlockCommand.prototype.GetState};var FCKFontSizeCommand=function(){};FCKFontSizeCommand.prototype={Name:'FontSize',Execute:FCKStyleCommand.prototype.Execute,GetState:FCKFormatBlockCommand.prototype.GetState};var FCKPreviewCommand=function(){this.Name='Preview';};FCKPreviewCommand.prototype.Execute=function(){FCK.Preview();};FCKPreviewCommand.prototype.GetState=function(){return 0;};var FCKSaveCommand=function(){this.Name='Save';};FCKSaveCommand.prototype.Execute=function(){var A=FCK.GetParentForm();if (typeof(A.onsubmit)=='function'){var B=A.onsubmit();if (B!=null&&B===false) return;};if (typeof(A.submit)=='function') A.submit();else A.submit.click();};FCKSaveCommand.prototype.GetState=function(){return 0;};var FCKNewPageCommand=function(){this.Name='NewPage';};FCKNewPageCommand.prototype.Execute=function(){FCKUndo.SaveUndoStep();FCK.SetData('');FCKUndo.Typing=true;FCK.Focus();};FCKNewPageCommand.prototype.GetState=function(){return 0;};var FCKSourceCommand=function(){this.Name='Source';};FCKSourceCommand.prototype.Execute=function(){if (FCKConfig.SourcePopup){var A=FCKConfig.ScreenWidth*0.65;var B=FCKConfig.ScreenHeight*0.65;FCKDialog.OpenDialog('FCKDialog_Source',FCKLang.Source,'dialog/fck_source.html',A,B,null,null,true);}else FCK.SwitchEditMode();};FCKSourceCommand.prototype.GetState=function(){return (FCK.EditMode==0?0:1);};var FCKUndoCommand=function(){this.Name='Undo';};FCKUndoCommand.prototype.Execute=function(){FCKUndo.Undo();};FCKUndoCommand.prototype.GetState=function(){return (FCKUndo.CheckUndoState()?0:-1);};var FCKRedoCommand=function(){this.Name='Redo';};FCKRedoCommand.prototype.Execute=function(){FCKUndo.Redo();};FCKRedoCommand.prototype.GetState=function(){return (FCKUndo.CheckRedoState()?0:-1);};var FCKPageBreakCommand=function(){this.Name='PageBreak';};FCKPageBreakCommand.prototype.Execute=function(){FCKUndo.SaveUndoStep();var e=FCK.EditorDocument.createElement('DIV');e.style.pageBreakAfter='always';e.innerHTML='<span style="DISPLAY:none">&nbsp;</span>';var A=FCKDocumentProcessor_CreateFakeImage('FCK__PageBreak',e);FCK.InsertElement(A);};FCKPageBreakCommand.prototype.GetState=function(){return 0;};var FCKUnlinkCommand=function(){this.Name='Unlink';};FCKUnlinkCommand.prototype.Execute=function(){FCKUndo.SaveUndoStep();if (FCKBrowserInfo.IsGeckoLike){var A=FCK.Selection.MoveToAncestorNode('A');if (A) FCKTools.RemoveOuterTags(A);return;};FCK.ExecuteNamedCommand(this.Name);};FCKUnlinkCommand.prototype.GetState=function(){var A=FCK.GetNamedCommandState(this.Name);if (A==0&&FCK.EditMode==0){var B=FCKSelection.MoveToAncestorNode('A');var C=(B&&B.name.length>0&&B.href.length==0);if (C) A=-1;};return A;};var FCKSelectAllCommand=function(){this.Name='SelectAll';};FCKSelectAllCommand.prototype.Execute=function(){if (FCK.EditMode==0){FCK.ExecuteNamedCommand('SelectAll');}else{var A=FCK.EditingArea.Textarea;if (FCKBrowserInfo.IsIE){A.createTextRange().execCommand('SelectAll');}else{A.selectionStart=0;A.selectionEnd=A.value.length;};A.focus();}};FCKSelectAllCommand.prototype.GetState=function(){return 0;};var FCKPasteCommand=function(){this.Name='Paste';};FCKPasteCommand.prototype={Execute:function(){if (FCKBrowserInfo.IsIE) FCK.Paste();else FCK.ExecuteNamedCommand('Paste');},GetState:function(){return FCK.GetNamedCommandState('Paste');}};var FCKRuleCommand=function(){this.Name='Rule';};FCKRuleCommand.prototype={Execute:function(){FCKUndo.SaveUndoStep();FCK.InsertElement('hr');},GetState:function(){return FCK.GetNamedCommandState('InsertHorizontalRule');}};var FCKCopyCommand=function(){this.Name='Copy';};FCKCopyCommand.prototype={Execute:function(){FCK.ExecuteNamedCommand(this.Name);},GetState:function(){return FCK.GetNamedCommandState('Cut');}};var FCKAnchorDeleteCommand=function(){this.Name='AnchorDelete';};FCKAnchorDeleteCommand.prototype={Execute:function(){if (FCK.Selection.GetType()=='Control'){FCK.Selection.Delete();}else{var A=FCK.Selection.GetSelectedElement();if (A){if (A.tagName=='IMG'&&A.getAttribute('_fckanchor')) oAnchor=FCK.GetRealElement(A);else A=null;};if (!A){oAnchor=FCK.Selection.MoveToAncestorNode('A');if (oAnchor) FCK.Selection.SelectNode(oAnchor);};if (oAnchor.href.length!=0){oAnchor.removeAttribute('name');if (FCKBrowserInfo.IsIE) oAnchor.className=oAnchor.className.replace(FCKRegexLib.FCK_Class,'');return;};if (A){A.parentNode.removeChild(A);return;};if (oAnchor.innerHTML.length==0){oAnchor.parentNode.removeChild(oAnchor);return;};FCKTools.RemoveOuterTags(oAnchor);};if (FCKBrowserInfo.IsGecko) FCK.Selection.Collapse(true);},GetState:function(){return FCK.GetNamedCommandState('Unlink');}};
+var FCKShowBlockCommand=function(A,B){this.Name=A;if (B!=undefined) this._SavedState=B;else this._SavedState=null;};FCKShowBlockCommand.prototype.Execute=function(){var A=this.GetState();if (A==-1) return;var B=FCK.EditorDocument.body;if (A==1) B.className=B.className.replace(/(^| )FCK__ShowBlocks/g,'');else B.className+=' FCK__ShowBlocks';FCK.Events.FireEvent('OnSelectionChange');};FCKShowBlockCommand.prototype.GetState=function(){if (FCK.EditMode!=0) return -1;try{if (/FCK__ShowBlocks(?:\s|$)/.test(FCK.EditorDocument.body.className)) return 1;}catch (e){};return 0;};FCKShowBlockCommand.prototype.SaveState=function(){this._SavedState=this.GetState();};FCKShowBlockCommand.prototype.RestoreState=function(){if (this._SavedState!=null&&this.GetState()!=this._SavedState) this.Execute();};
+var FCKSpellCheckCommand=function(){this.Name='SpellCheck';this.IsEnabled=(FCKConfig.SpellChecker=='ieSpell'||FCKConfig.SpellChecker=='SpellerPages');};FCKSpellCheckCommand.prototype.Execute=function(){switch (FCKConfig.SpellChecker){case 'ieSpell':this._RunIeSpell();break;case 'SpellerPages':FCKDialog.OpenDialog('FCKDialog_SpellCheck','Spell Check','dialog/fck_spellerpages.html',440,480);break;}};FCKSpellCheckCommand.prototype._RunIeSpell=function(){try{var A=new ActiveXObject("ieSpell.ieSpellExtension");A.CheckAllLinkedDocuments(FCK.EditorDocument);}catch(e){if(e.number==-2146827859){if (confirm(FCKLang.IeSpellDownload)) window.open(FCKConfig.IeSpellDownloadUrl,'IeSpellDownload');}else alert('Error Loading ieSpell: '+e.message+' ('+e.number+')');}};FCKSpellCheckCommand.prototype.GetState=function(){return this.IsEnabled?0:-1;}
+var FCKTextColorCommand=function(A){this.Name=A=='ForeColor'?'TextColor':'BGColor';this.Type=A;var B;if (FCKBrowserInfo.IsIE) B=window;else if (FCK.ToolbarSet._IFrame) B=FCKTools.GetElementWindow(FCK.ToolbarSet._IFrame);else B=window.parent;this._Panel=new FCKPanel(B);this._Panel.AppendStyleSheet(FCKConfig.SkinPath+'fck_editor.css');this._Panel.MainNode.className='FCK_Panel';this._CreatePanelBody(this._Panel.Document,this._Panel.MainNode);FCKTools.DisableSelection(this._Panel.Document.body);};FCKTextColorCommand.prototype.Execute=function(A,B,C){this._Panel.Show(A,B,C);};FCKTextColorCommand.prototype.SetColor=function(A){var B=FCKStyles.GetStyle('_FCK_'+(this.Type=='ForeColor'?'Color':'BackColor'));if (!A||A.length==0) FCK.Styles.RemoveStyle(B);else{B.SetVariable('Color',A);FCKStyles.ApplyStyle(B);};FCK.Focus();FCK.Events.FireEvent('OnSelectionChange');};FCKTextColorCommand.prototype.GetState=function(){return 0;};function FCKTextColorCommand_OnMouseOver(){this.className='ColorSelected';};function FCKTextColorCommand_OnMouseOut(){this.className='ColorDeselected';};function FCKTextColorCommand_OnClick(A,B,C){this.className='ColorDeselected';B.SetColor(C);B._Panel.Hide();};function FCKTextColorCommand_AutoOnClick(A,B){this.className='ColorDeselected';B.SetColor('');B._Panel.Hide();};function FCKTextColorCommand_MoreOnClick(A,B){this.className='ColorDeselected';B._Panel.Hide();FCKDialog.OpenDialog('FCKDialog_Color',FCKLang.DlgColorTitle,'dialog/fck_colorselector.html',400,330,FCKTools.Hitch(B,'SetColor'));};FCKTextColorCommand.prototype._CreatePanelBody=function(A,B){function CreateSelectionDiv(){var C=A.createElement("DIV");C.className='ColorDeselected';FCKTools.AddEventListenerEx(C,'mouseover',FCKTextColorCommand_OnMouseOver);FCKTools.AddEventListenerEx(C,'mouseout',FCKTextColorCommand_OnMouseOut);return C;};var D=B.appendChild(A.createElement("TABLE"));D.className='ForceBaseFont';D.style.tableLayout='fixed';D.cellPadding=0;D.cellSpacing=0;D.border=0;D.width=150;var E=D.insertRow(-1).insertCell(-1);E.colSpan=8;var C=E.appendChild(CreateSelectionDiv());C.innerHTML='<table cellspacing="0" cellpadding="0" width="100%" border="0">\n			<tr>\n				<td><div class="ColorBoxBorder"><div class="ColorBox" style="background-color: #000000"></div></div></td>\n				<td nowrap width="100%" align="center">'+FCKLang.ColorAutomatic+'</td>\n			</tr>\n		</table>';FCKTools.AddEventListenerEx(C,'click',FCKTextColorCommand_AutoOnClick,this);if (FCKBrowserInfo.IsSafari) C.style.width='96%';var G=FCKConfig.FontColors.toString().split(',');var H=0;while (H<G.length){var I=D.insertRow(-1);for (var i=0;i<8&&H<G.length;i++,H++){var J=G[H].split('/');var K='#'+J[0];var L=J[1]||K;C=I.insertCell(-1).appendChild(CreateSelectionDiv());C.innerHTML='<div class="ColorBoxBorder"><div class="ColorBox" style="background-color: '+K+'"></div></div>';FCKTools.AddEventListenerEx(C,'click',FCKTextColorCommand_OnClick,[this,L]);}};if (FCKConfig.EnableMoreFontColors){E=D.insertRow(-1).insertCell(-1);E.colSpan=8;C=E.appendChild(CreateSelectionDiv());C.innerHTML='<table width="100%" cellpadding="0" cellspacing="0" border="0"><tr><td nowrap align="center">'+FCKLang.ColorMoreColors+'</td></tr></table>';FCKTools.AddEventListenerEx(C,'click',FCKTextColorCommand_MoreOnClick,this);};if (FCKBrowserInfo.IsSafari) C.style.width='96%';};
+var FCKPastePlainTextCommand=function(){this.Name='PasteText';};FCKPastePlainTextCommand.prototype.Execute=function(){FCK.PasteAsPlainText();};FCKPastePlainTextCommand.prototype.GetState=function(){return FCK.GetNamedCommandState('Paste');};
+var FCKPasteWordCommand=function(){this.Name='PasteWord';};FCKPasteWordCommand.prototype.Execute=function(){FCK.PasteFromWord();};FCKPasteWordCommand.prototype.GetState=function(){if (FCKConfig.ForcePasteAsPlainText) return -1;else return FCK.GetNamedCommandState('Paste');};
+var FCKTableCommand=function(A){this.Name=A;};FCKTableCommand.prototype.Execute=function(){FCKUndo.SaveUndoStep();if (!FCKBrowserInfo.IsGecko){switch (this.Name){case 'TableMergeRight':return FCKTableHandler.MergeRight();case 'TableMergeDown':return FCKTableHandler.MergeDown();}};switch (this.Name){case 'TableInsertRowAfter':return FCKTableHandler.InsertRow(false);case 'TableInsertRowBefore':return FCKTableHandler.InsertRow(true);case 'TableDeleteRows':return FCKTableHandler.DeleteRows();case 'TableInsertColumnAfter':return FCKTableHandler.InsertColumn(false);case 'TableInsertColumnBefore':return FCKTableHandler.InsertColumn(true);case 'TableDeleteColumns':return FCKTableHandler.DeleteColumns();case 'TableInsertCellAfter':return FCKTableHandler.InsertCell(null,false);case 'TableInsertCellBefore':return FCKTableHandler.InsertCell(null,true);case 'TableDeleteCells':return FCKTableHandler.DeleteCells();case 'TableMergeCells':return FCKTableHandler.MergeCells();case 'TableHorizontalSplitCell':return FCKTableHandler.HorizontalSplitCell();case 'TableVerticalSplitCell':return FCKTableHandler.VerticalSplitCell();case 'TableDelete':return FCKTableHandler.DeleteTable();default:return alert(FCKLang.UnknownCommand.replace(/%1/g,this.Name));}};FCKTableCommand.prototype.GetState=function(){if (FCK.EditorDocument!=null&&FCKSelection.HasAncestorNode('TABLE')){switch (this.Name){case 'TableHorizontalSplitCell':case 'TableVerticalSplitCell':if (FCKTableHandler.GetSelectedCells().length==1) return 0;else return -1;case 'TableMergeCells':if (FCKTableHandler.CheckIsSelectionRectangular()&&FCKTableHandler.GetSelectedCells().length>1) return 0;else return -1;case 'TableMergeRight':return FCKTableHandler.GetMergeRightTarget()?0:-1;case 'TableMergeDown':return FCKTableHandler.GetMergeDownTarget()?0:-1;default:return 0;}}else return -1;};
+var FCKFitWindow=function(){this.Name='FitWindow';};FCKFitWindow.prototype.Execute=function(){var A=window.frameElement;var B=A.style;var C=parent;var D=C.document.documentElement;var E=C.document.body;var F=E.style;var G;if (!this.IsMaximized){if(FCKBrowserInfo.IsIE) C.attachEvent('onresize',FCKFitWindow_Resize);else C.addEventListener('resize',FCKFitWindow_Resize,true);this._ScrollPos=FCKTools.GetScrollPosition(C);G=A;while((G=G.parentNode)){if (G.nodeType==1){G._fckSavedStyles=FCKTools.SaveStyles(G);G.style.zIndex=FCKConfig.FloatingPanelsZIndex-1;}};if (FCKBrowserInfo.IsIE){this.documentElementOverflow=D.style.overflow;D.style.overflow='hidden';F.overflow='hidden';}else{F.overflow='hidden';F.width='0px';F.height='0px';};this._EditorFrameStyles=FCKTools.SaveStyles(A);var H=FCKTools.GetViewPaneSize(C);B.position="absolute";B.zIndex=FCKConfig.FloatingPanelsZIndex-1;B.left="0px";B.top="0px";B.width=H.Width+"px";B.height=H.Height+"px";if (!FCKBrowserInfo.IsIE){B.borderRight=B.borderBottom="9999px solid white";B.backgroundColor="white";};C.scrollTo(0,0);var I=FCKTools.GetWindowPosition(C,A);if (I.x!=0) B.left=(-1*I.x)+"px";if (I.y!=0) B.top=(-1*I.y)+"px";this.IsMaximized=true;}else{if(FCKBrowserInfo.IsIE) C.detachEvent("onresize",FCKFitWindow_Resize);else C.removeEventListener("resize",FCKFitWindow_Resize,true);G=A;while((G=G.parentNode)){if (G._fckSavedStyles){FCKTools.RestoreStyles(G,G._fckSavedStyles);G._fckSavedStyles=null;}};if (FCKBrowserInfo.IsIE) D.style.overflow=this.documentElementOverflow;FCKTools.RestoreStyles(A,this._EditorFrameStyles);C.scrollTo(this._ScrollPos.X,this._ScrollPos.Y);this.IsMaximized=false;};FCKToolbarItems.GetItem('FitWindow').RefreshState();if (FCK.EditMode==0) FCK.EditingArea.MakeEditable();FCK.Focus();};FCKFitWindow.prototype.GetState=function(){if (FCKConfig.ToolbarLocation!='In') return -1;else return (this.IsMaximized?1:0);};function FCKFitWindow_Resize(){var A=FCKTools.GetViewPaneSize(parent);var B=window.frameElement.style;B.width=A.Width+'px';B.height=A.Height+'px';};
+var FCKListCommand=function(A,B){this.Name=A;this.TagName=B;};FCKListCommand.prototype={GetState:function(){if (FCK.EditMode!=0||!FCK.EditorWindow) return -1;var A=FCKSelection.GetBoundaryParentElement(true);var B=A;while (B){if (B.nodeName.IEquals(['ul','ol'])) break;B=B.parentNode;};if (B&&B.nodeName.IEquals(this.TagName)) return 1;else return 0;},Execute:function(){FCKUndo.SaveUndoStep();var A=FCK.EditorDocument;var B=new FCKDomRange(FCK.EditorWindow);B.MoveToSelection();var C=this.GetState();if (C==0){FCKDomTools.TrimNode(A.body);if (!A.body.firstChild){var D=A.createElement('p');A.body.appendChild(D);B.MoveToNodeContents(D);}};var E=B.CreateBookmark();var F=[];var G={};var H=new FCKDomRangeIterator(B);var I;H.ForceBrBreak=(C==0);var J=true;var K=null;while (J){while ((I=H.GetNextParagraph())){var L=new FCKElementPath(I);var M=null;var N=false;var O=L.BlockLimit;for (var i=L.Elements.length-1;i>=0;i--){var P=L.Elements[i];if (P.nodeName.IEquals(['ol','ul'])){if (O._FCK_ListGroupObject) O._FCK_ListGroupObject=null;var Q=P._FCK_ListGroupObject;if (Q) Q.contents.push(I);else{Q={ 'root':P,'contents':[I] };F.push(Q);FCKDomTools.SetElementMarker(G,P,'_FCK_ListGroupObject',Q);};N=true;break;}};if (N) continue;var R=O;if (R._FCK_ListGroupObject) R._FCK_ListGroupObject.contents.push(I);else{var Q={ 'root':R,'contents':[I] };FCKDomTools.SetElementMarker(G,R,'_FCK_ListGroupObject',Q);F.push(Q);}};if (FCKBrowserInfo.IsIE) J=false;else{if (K==null){K=[];var T=FCK.EditorWindow.getSelection();if (T&&F.length==0) K.push(T.getRangeAt(0));for (var i=1;T&&i<T.rangeCount;i++) K.push(T.getRangeAt(i));};if (K.length<1) J=false;else{var U=FCKW3CRange.CreateFromRange(A,K.shift());B._Range=U;B._UpdateElementInfo();if (B.StartNode.nodeName.IEquals('td')) B.SetStart(B.StartNode,1);if (B.EndNode.nodeName.IEquals('td')) B.SetEnd(B.EndNode,2);H=new FCKDomRangeIterator(B);H.ForceBrBreak=(C==0);}}};var W=[];while (F.length>0){var Q=F.shift();if (C==0){if (Q.root.nodeName.IEquals(['ul','ol'])) this._ChangeListType(Q,G,W);else this._CreateList(Q,W);}else if (C==1&&Q.root.nodeName.IEquals(['ul','ol'])) this._RemoveList(Q,G);};for (var i=0;i<W.length;i++){var M=W[i];var Z=false;var a=M;while (!Z){a=a.nextSibling;if (a&&a.nodeType==3&&a.nodeValue.search(/^[\n\r\t ]*$/)==0) continue;Z=true;};if (a&&a.nodeName.IEquals(this.TagName)){a.parentNode.removeChild(a);while (a.firstChild) M.appendChild(a.removeChild(a.firstChild));};Z=false;a=M;while (!Z){a=a.previousSibling;if (a&&a.nodeType==3&&a.nodeValue.search(/^[\n\r\t ]*$/)==0) continue;Z=true;};if (a&&a.nodeName.IEquals(this.TagName)){a.parentNode.removeChild(a);while (a.lastChild) M.insertBefore(a.removeChild(a.lastChild),M.firstChild);}};FCKDomTools.ClearAllMarkers(G);B.MoveToBookmark(E);B.Select();FCK.Focus();FCK.Events.FireEvent('OnSelectionChange');},_ChangeListType:function(A,B,C){var D=FCKDomTools.ListToArray(A.root,B);var E=[];for (var i=0;i<A.contents.length;i++){var F=A.contents[i];F=FCKTools.GetElementAscensor(F,'li');if (!F||F._FCK_ListItem_Processed) continue;E.push(F);FCKDomTools.SetElementMarker(B,F,'_FCK_ListItem_Processed',true);};var G=A.root.ownerDocument.createElement(this.TagName);for (var i=0;i<E.length;i++){var H=E[i]._FCK_ListArray_Index;D[H].parent=G;};var I=FCKDomTools.ArrayToList(D,B);for (var i=0;i<I.listNode.childNodes.length;i++){if (I.listNode.childNodes[i].nodeName.IEquals(this.TagName)) C.push(I.listNode.childNodes[i]);};A.root.parentNode.replaceChild(I.listNode,A.root);},_CreateList:function(A,B){var C=A.contents;var D=A.root.ownerDocument;var E=[];if (C.length==1&&C[0]==A.root){var F=D.createElement('div');while (C[0].firstChild) F.appendChild(C[0].removeChild(C[0].firstChild));C[0].appendChild(F);C[0]=F;};var G=A.contents[0].parentNode;for (var i=0;i<C.length;i++) G=FCKDomTools.GetCommonParents(G,C[i].parentNode).pop();for (var i=0;i<C.length;i++){var H=C[i];while (H.parentNode){if (H.parentNode==G){E.push(H);break;};H=H.parentNode;}};if (E.length<1) return;var I=E[E.length-1].nextSibling;var J=D.createElement(this.TagName);B.push(J);while (E.length){var K=E.shift();var L=D.createDocumentFragment();while (K.firstChild) L.appendChild(K.removeChild(K.firstChild));K.parentNode.removeChild(K);var M=D.createElement('li');M.appendChild(L);J.appendChild(M);};G.insertBefore(J,I);},_RemoveList:function(A,B){var C=FCKDomTools.ListToArray(A.root,B);var D=[];for (var i=0;i<A.contents.length;i++){var E=A.contents[i];E=FCKTools.GetElementAscensor(E,'li');if (!E||E._FCK_ListItem_Processed) continue;D.push(E);FCKDomTools.SetElementMarker(B,E,'_FCK_ListItem_Processed',true);};var F=null;for (var i=0;i<D.length;i++){var G=D[i]._FCK_ListArray_Index;C[G].indent=-1;F=G;};for (var i=F+1;i<C.length;i++){if (C[i].indent>C[i-1].indent+1){var H=C[i-1].indent+1-C[i].indent;var I=C[i].indent;while (C[i]&&C[i].indent>=I){C[i].indent+=H;i++;};i--;}};var J=FCKDomTools.ArrayToList(C,B);if (A.root.nextSibling==null||A.root.nextSibling.nodeName.IEquals('br')){if (J.listNode.lastChild.nodeName.IEquals('br')) J.listNode.removeChild(J.listNode.lastChild);};A.root.parentNode.replaceChild(J.listNode,A.root);}};
+var FCKJustifyCommand=function(A){this.AlignValue=A;var B=FCKConfig.ContentLangDirection.toLowerCase();this.IsDefaultAlign=(A=='left'&&B=='ltr')||(A=='right'&&B=='rtl');var C=this._CssClassName=(function(){var D=FCKConfig.JustifyClasses;if (D){switch (A){case 'left':return D[0];case 'center':return D[1];case 'right':return D[2];case 'justify':return D[3];}};return null;})();if (C&&C.length>0) this._CssClassRegex=new RegExp('(?:^|\\s+)'+C+'(?=$|\\s)');};FCKJustifyCommand._GetClassNameRegex=function(){var A=FCKJustifyCommand._ClassRegex;if (A!=undefined) return A;var B=[];var C=FCKConfig.JustifyClasses;if (C){for (var i=0;i<4;i++){var D=C[i];if (D&&D.length>0) B.push(D);}};if (B.length>0) A=new RegExp('(?:^|\\s+)(?:'+B.join('|')+')(?=$|\\s)');else A=null;return FCKJustifyCommand._ClassRegex=A;};FCKJustifyCommand.prototype={Execute:function(){FCKUndo.SaveUndoStep();var A=new FCKDomRange(FCK.EditorWindow);A.MoveToSelection();var B=this.GetState();if (B==-1) return;var C=A.CreateBookmark();var D=this._CssClassName;var E=new FCKDomRangeIterator(A);var F;while ((F=E.GetNextParagraph())){F.removeAttribute('align');if (D){var G=F.className.replace(FCKJustifyCommand._GetClassNameRegex(),'');if (B==0){if (G.length>0) G+=' ';F.className=G+D;}else if (G.length==0) FCKDomTools.RemoveAttribute(F,'class');}else{var H=F.style;if (B==0) H.textAlign=this.AlignValue;else{H.textAlign='';if (H.cssText.length==0) F.removeAttribute('style');}}};A.MoveToBookmark(C);A.Select();FCK.Focus();FCK.Events.FireEvent('OnSelectionChange');},GetState:function(){if (FCK.EditMode!=0||!FCK.EditorWindow) return -1;var A=new FCKElementPath(FCKSelection.GetBoundaryParentElement(true));var B=A.Block||A.BlockLimit;if (!B||B.nodeName.toLowerCase()=='body') return 0;var C;if (FCKBrowserInfo.IsIE) C=B.currentStyle.textAlign;else C=FCK.EditorWindow.getComputedStyle(B,'').getPropertyValue('text-align');C=C.replace(/(-moz-|-webkit-|start|auto)/i,'');if ((!C&&this.IsDefaultAlign)||C==this.AlignValue) return 1;return 0;}};
+var FCKIndentCommand=function(A,B){this.Name=A;this.Offset=B;this.IndentCSSProperty=FCKConfig.ContentLangDirection.IEquals('ltr')?'marginLeft':'marginRight';};FCKIndentCommand._InitIndentModeParameters=function(){if (FCKConfig.IndentClasses&&FCKConfig.IndentClasses.length>0){this._UseIndentClasses=true;this._IndentClassMap={};for (var i=0;i<FCKConfig.IndentClasses.length;i++) this._IndentClassMap[FCKConfig.IndentClasses[i]]=i+1;this._ClassNameRegex=new RegExp('(?:^|\\s+)('+FCKConfig.IndentClasses.join('|')+')(?=$|\\s)');}else this._UseIndentClasses=false;};FCKIndentCommand.prototype={Execute:function(){FCKUndo.SaveUndoStep();var A=new FCKDomRange(FCK.EditorWindow);A.MoveToSelection();var B=A.CreateBookmark();var C=FCKDomTools.GetCommonParentNode(A.StartNode||A.StartContainer,A.EndNode||A.EndContainer,['ul','ol']);if (C) this._IndentList(A,C);else this._IndentBlock(A);A.MoveToBookmark(B);A.Select();FCK.Focus();FCK.Events.FireEvent('OnSelectionChange');},GetState:function(){if (FCK.EditMode!=0||!FCK.EditorWindow) return -1;if (FCKIndentCommand._UseIndentClasses==undefined) FCKIndentCommand._InitIndentModeParameters();var A=FCKSelection.GetBoundaryParentElement(true);var B=FCKSelection.GetBoundaryParentElement(false);var C=FCKDomTools.GetCommonParentNode(A,B,['ul','ol']);if (C){if (this.Name.IEquals('outdent')) return 0;var D=FCKTools.GetElementAscensor(A,'li');if (!D||!D.previousSibling) return -1;return 0;};if (!FCKIndentCommand._UseIndentClasses&&this.Name.IEquals('indent')) return 0;var E=new FCKElementPath(A);var F=E.Block||E.BlockLimit;if (!F) return -1;if (FCKIndentCommand._UseIndentClasses){var G=F.className.match(FCKIndentCommand._ClassNameRegex);var H=0;if (G!=null){G=G[1];H=FCKIndentCommand._IndentClassMap[G];};if ((this.Name=='outdent'&&H==0)||(this.Name=='indent'&&H==FCKConfig.IndentClasses.length)) return -1;return 0;}else{var I=parseInt(F.style[this.IndentCSSProperty],10);if (isNaN(I)) I=0;if (I<=0) return -1;return 0;}},_IndentBlock:function(A){var B=new FCKDomRangeIterator(A);A.Expand('block_contents');var C=FCKDomTools.GetCommonParents(A.StartContainer,A.EndContainer);var D=C[C.length-1];var E;while ((E=B.GetNextParagraph())){if (!(E==D||E.parentNode==D)) continue;if (FCKIndentCommand._UseIndentClasses){var F=E.className.match(FCKIndentCommand._ClassNameRegex);var G=0;if (F!=null){F=F[1];G=FCKIndentCommand._IndentClassMap[F];};if (this.Name.IEquals('outdent')) G--;else if (this.Name.IEquals('indent')) G++;G=Math.min(G,FCKConfig.IndentClasses.length);G=Math.max(G,0);var H=E.className.replace(FCKIndentCommand._ClassNameRegex,'');if (G<1) E.className=H;else E.className=(H.length>0?H+' ':'')+FCKConfig.IndentClasses[G-1];}else{var I=parseInt(E.style[this.IndentCSSProperty],10);if (isNaN(I)) I=0;I+=this.Offset;I=Math.max(I,0);I=Math.ceil(I/this.Offset)*this.Offset;E.style[this.IndentCSSProperty]=I?I+FCKConfig.IndentUnit:'';if (E.getAttribute('style')=='') E.removeAttribute('style');}}},_IndentList:function(A,B){var C=A.StartContainer;var D=A.EndContainer;while (C&&C.parentNode!=B) C=C.parentNode;while (D&&D.parentNode!=B) D=D.parentNode;if (!C||!D) return;var E=C;var F=[];var G=false;while (G==false){if (E==D) G=true;F.push(E);E=E.nextSibling;};if (F.length<1) return;var H=FCKDomTools.GetParents(B);for (var i=0;i<H.length;i++){if (H[i].nodeName.IEquals(['ul','ol'])){B=H[i];break;}};var I=this.Name.IEquals('indent')?1:-1;var J=F[0];var K=F[F.length-1];var L={};var M=FCKDomTools.ListToArray(B,L);var N=M[K._FCK_ListArray_Index].indent;for (var i=J._FCK_ListArray_Index;i<=K._FCK_ListArray_Index;i++) M[i].indent+=I;for (var i=K._FCK_ListArray_Index+1;i<M.length&&M[i].indent>N;i++) M[i].indent+=I;var O=FCKDomTools.ArrayToList(M);if (O) B.parentNode.replaceChild(O.listNode,B);FCKDomTools.ClearAllMarkers(L);}};
+var FCKBlockQuoteCommand=function(){};FCKBlockQuoteCommand.prototype={Execute:function(){FCKUndo.SaveUndoStep();var A=this.GetState();var B=new FCKDomRange(FCK.EditorWindow);B.MoveToSelection();var C=B.CreateBookmark();var D=new FCKDomRangeIterator(B);var E;if (A==0){D.EnforceRealBlocks=true;var F=[];while ((E=D.GetNextParagraph())) F.push(E);var G=F[0].parentNode;var H=[];for (var i=0;i<F.length;i++){E=F[i];G=FCKDomTools.GetCommonParents(E.parentNode,G).pop();};var I=null;while (F.length>0){E=F.shift();while (E.parentNode!=G) E=E.parentNode;if (E!=I) H.push(E);I=E;};while (H.length>0){E=H.shift();if (E.nodeName.IEquals('blockquote')){var J=E.ownerDocument.createDocumentFragment();while (E.firstChild){J.appendChild(E.removeChild(E.firstChild));F.push(J.lastChild);};E.parentNode.replaceChild(J,E);}else F.push(E);};var K=B.Window.document.createElement('blockquote');G.insertBefore(K,F[0]);while (F.length>0){E=F.shift();K.appendChild(E);}}else if (A==1){var L=[];while ((E=D.GetNextParagraph())){var M=null;var N=null;while (E.parentNode){if (E.parentNode.nodeName.IEquals('blockquote')){M=E.parentNode;N=E;break;};E=E.parentNode;};if (M&&N) L.push(N);};var O=[];while (L.length>0){var P=L.shift();var K=P.parentNode;if (P==P.parentNode.firstChild){K.parentNode.insertBefore(K.removeChild(P),K);if (!K.firstChild) K.parentNode.removeChild(K);}else if (P==P.parentNode.lastChild){K.parentNode.insertBefore(K.removeChild(P),K.nextSibling);if (!K.firstChild) K.parentNode.removeChild(K);}else FCKDomTools.BreakParent(P,P.parentNode,B);O.push(P);};if (FCKConfig.EnterMode.IEquals('br')){while (O.length){var P=O.shift();var S=true;if (P.nodeName.IEquals('div')){var J=P.ownerDocument.createDocumentFragment();var U=S&&P.previousSibling&&!FCKListsLib.BlockBoundaries[P.previousSibling.nodeName.toLowerCase()];if (S&&U) J.appendChild(P.ownerDocument.createElement('br'));var W=P.nextSibling&&!FCKListsLib.BlockBoundaries[P.nextSibling.nodeName.toLowerCase()];while (P.firstChild) J.appendChild(P.removeChild(P.firstChild));if (W) J.appendChild(P.ownerDocument.createElement('br'));P.parentNode.replaceChild(J,P);S=false;}}}};B.MoveToBookmark(C);B.Select();FCK.Focus();FCK.Events.FireEvent('OnSelectionChange');},GetState:function(){if (FCK.EditMode!=0||!FCK.EditorWindow) return -1;var A=new FCKElementPath(FCKSelection.GetBoundaryParentElement(true));var B=A.Block||A.BlockLimit;if (!B||B.nodeName.toLowerCase()=='body') return 0;for (var i=0;i<A.Elements.length;i++){if (A.Elements[i].nodeName.IEquals('blockquote')) return 1;};return 0;}};
+var FCKCoreStyleCommand=function(A){this.Name='CoreStyle';this.StyleName='_FCK_'+A;this.IsActive=false;FCKStyles.AttachStyleStateChange(this.StyleName,this._OnStyleStateChange,this);};FCKCoreStyleCommand.prototype={Execute:function(){FCKUndo.SaveUndoStep();if (this.IsActive) FCKStyles.RemoveStyle(this.StyleName);else FCKStyles.ApplyStyle(this.StyleName);FCK.Focus();FCK.Events.FireEvent('OnSelectionChange');},GetState:function(){return this.IsActive?1:0;},_OnStyleStateChange:function(A,B){this.IsActive=B;}};
+var FCKRemoveFormatCommand=function(){this.Name='RemoveFormat';};FCKRemoveFormatCommand.prototype={Execute:function(){FCKStyles.RemoveAll();FCK.Focus();FCK.Events.FireEvent('OnSelectionChange');},GetState:function(){return FCK.EditorWindow?0:-1;}};
+var FCKCommands=FCK.Commands={};FCKCommands.LoadedCommands={};FCKCommands.RegisterCommand=function(A,B){this.LoadedCommands[A]=B;};FCKCommands.GetCommand=function(A){var B=FCKCommands.LoadedCommands[A];if (B) return B;switch (A){case 'Bold':case 'Italic':case 'Underline':case 'StrikeThrough':case 'Subscript':case 'Superscript':B=new FCKCoreStyleCommand(A);break;case 'RemoveFormat':B=new FCKRemoveFormatCommand();break;case 'DocProps':B=new FCKDialogCommand('DocProps',FCKLang.DocProps,'dialog/fck_docprops.html',400,390,FCKCommands.GetFullPageState);break;case 'Templates':B=new FCKDialogCommand('Templates',FCKLang.DlgTemplatesTitle,'dialog/fck_template.html',380,450);break;case 'Link':B=new FCKDialogCommand('Link',FCKLang.DlgLnkWindowTitle,'dialog/fck_link.html',400,330);break;case 'Unlink':B=new FCKUnlinkCommand();break;case 'Anchor':B=new FCKDialogCommand('Anchor',FCKLang.DlgAnchorTitle,'dialog/fck_anchor.html',370,170);break;case 'AnchorDelete':B=new FCKAnchorDeleteCommand();break;case 'BulletedList':B=new FCKDialogCommand('BulletedList',FCKLang.BulletedListProp,'dialog/fck_listprop.html?UL',370,170);break;case 'NumberedList':B=new FCKDialogCommand('NumberedList',FCKLang.NumberedListProp,'dialog/fck_listprop.html?OL',370,170);break;case 'About':B=new FCKDialogCommand('About',FCKLang.About,'dialog/fck_about.html',400,330);break;case 'Find':B=new FCKDialogCommand('Find',FCKLang.DlgFindAndReplaceTitle,'dialog/fck_replace.html',340,250);break;case 'Replace':B=new FCKDialogCommand('Replace',FCKLang.DlgFindAndReplaceTitle,'dialog/fck_replace.html',340,250);break;case 'Image':B=new FCKDialogCommand('Image',FCKLang.DlgImgTitle,'dialog/fck_image.html',450,400);break;case 'Flash':B=new FCKDialogCommand('Flash',FCKLang.DlgFlashTitle,'dialog/fck_flash.html',450,400);break;case 'SpecialChar':B=new FCKDialogCommand('SpecialChar',FCKLang.DlgSpecialCharTitle,'dialog/fck_specialchar.html',400,320);break;case 'Smiley':B=new FCKDialogCommand('Smiley',FCKLang.DlgSmileyTitle,'dialog/fck_smiley.html',FCKConfig.SmileyWindowWidth,FCKConfig.SmileyWindowHeight);break;case 'Table':B=new FCKDialogCommand('Table',FCKLang.DlgTableTitle,'dialog/fck_table.html',450,250);break;case 'TableProp':B=new FCKDialogCommand('Table',FCKLang.DlgTableTitle,'dialog/fck_table.html?Parent',400,250);break;case 'TableCellProp':B=new FCKDialogCommand('TableCell',FCKLang.DlgCellTitle,'dialog/fck_tablecell.html',550,250);break;case 'Style':B=new FCKStyleCommand();break;case 'FontName':B=new FCKFontNameCommand();break;case 'FontSize':B=new FCKFontSizeCommand();break;case 'FontFormat':B=new FCKFormatBlockCommand();break;case 'Source':B=new FCKSourceCommand();break;case 'Preview':B=new FCKPreviewCommand();break;case 'Save':B=new FCKSaveCommand();break;case 'NewPage':B=new FCKNewPageCommand();break;case 'PageBreak':B=new FCKPageBreakCommand();break;case 'Rule':B=new FCKRuleCommand();break;case 'TextColor':B=new FCKTextColorCommand('ForeColor');break;case 'BGColor':B=new FCKTextColorCommand('BackColor');break;case 'Paste':B=new FCKPasteCommand();break;case 'PasteText':B=new FCKPastePlainTextCommand();break;case 'PasteWord':B=new FCKPasteWordCommand();break;case 'JustifyLeft':B=new FCKJustifyCommand('left');break;case 'JustifyCenter':B=new FCKJustifyCommand('center');break;case 'JustifyRight':B=new FCKJustifyCommand('right');break;case 'JustifyFull':B=new FCKJustifyCommand('justify');break;case 'Indent':B=new FCKIndentCommand('indent',FCKConfig.IndentLength);break;case 'Outdent':B=new FCKIndentCommand('outdent',FCKConfig.IndentLength*-1);break;case 'Blockquote':B=new FCKBlockQuoteCommand();break;case 'TableInsertRowAfter':B=new FCKTableCommand('TableInsertRowAfter');break;case 'TableInsertRowBefore':B=new FCKTableCommand('TableInsertRowBefore');break;case 'TableDeleteRows':B=new FCKTableCommand('TableDeleteRows');break;case 'TableInsertColumnAfter':B=new FCKTableCommand('TableInsertColumnAfter');break;case 'TableInsertColumnBefore':B=new FCKTableCommand('TableInsertColumnBefore');break;case 'TableDeleteColumns':B=new FCKTableCommand('TableDeleteColumns');break;case 'TableInsertCellAfter':B=new FCKTableCommand('TableInsertCellAfter');break;case 'TableInsertCellBefore':B=new FCKTableCommand('TableInsertCellBefore');break;case 'TableDeleteCells':B=new FCKTableCommand('TableDeleteCells');break;case 'TableMergeCells':B=new FCKTableCommand('TableMergeCells');break;case 'TableMergeRight':B=new FCKTableCommand('TableMergeRight');break;case 'TableMergeDown':B=new FCKTableCommand('TableMergeDown');break;case 'TableHorizontalSplitCell':B=new FCKTableCommand('TableHorizontalSplitCell');break;case 'TableVerticalSplitCell':B=new FCKTableCommand('TableVerticalSplitCell');break;case 'TableDelete':B=new FCKTableCommand('TableDelete');break;case 'Form':B=new FCKDialogCommand('Form',FCKLang.Form,'dialog/fck_form.html',380,230);break;case 'Checkbox':B=new FCKDialogCommand('Checkbox',FCKLang.Checkbox,'dialog/fck_checkbox.html',380,230);break;case 'Radio':B=new FCKDialogCommand('Radio',FCKLang.RadioButton,'dialog/fck_radiobutton.html',380,230);break;case 'TextField':B=new FCKDialogCommand('TextField',FCKLang.TextField,'dialog/fck_textfield.html',380,230);break;case 'Textarea':B=new FCKDialogCommand('Textarea',FCKLang.Textarea,'dialog/fck_textarea.html',380,230);break;case 'HiddenField':B=new FCKDialogCommand('HiddenField',FCKLang.HiddenField,'dialog/fck_hiddenfield.html',380,230);break;case 'Button':B=new FCKDialogCommand('Button',FCKLang.Button,'dialog/fck_button.html',380,230);break;case 'Select':B=new FCKDialogCommand('Select',FCKLang.SelectionField,'dialog/fck_select.html',400,380);break;case 'ImageButton':B=new FCKDialogCommand('ImageButton',FCKLang.ImageButton,'dialog/fck_image.html?ImageButton',450,400);break;case 'SpellCheck':B=new FCKSpellCheckCommand();break;case 'FitWindow':B=new FCKFitWindow();break;case 'Undo':B=new FCKUndoCommand();break;case 'Redo':B=new FCKRedoCommand();break;case 'Copy':B=new FCKCopyCommand();break;case 'SelectAll':B=new FCKSelectAllCommand();break;case 'InsertOrderedList':B=new FCKListCommand('insertorderedlist','ol');break;case 'InsertUnorderedList':B=new FCKListCommand('insertunorderedlist','ul');break;case 'ShowBlocks':B=new FCKShowBlockCommand('ShowBlocks',FCKConfig.StartupShowBlocks?1:0);break;case 'Undefined':B=new FCKUndefinedCommand();break;default:if (FCKRegexLib.NamedCommands.test(A)) B=new FCKNamedCommand(A);else{alert(FCKLang.UnknownCommand.replace(/%1/g,A));return null;}};FCKCommands.LoadedCommands[A]=B;return B;};FCKCommands.GetFullPageState=function(){return FCKConfig.FullPage?0:-1;};FCKCommands.GetBooleanState=function(A){return A?-1:0;};
+var FCKPanel=function(A){this.IsRTL=(FCKLang.Dir=='rtl');this.IsContextMenu=false;this._LockCounter=0;this._Window=A||window;var B;if (FCKBrowserInfo.IsIE){this._Popup=this._Window.createPopup();B=this.Document=this._Popup.document;FCK.IECleanup.AddItem(this,FCKPanel_Cleanup);}else{var C=this._IFrame=this._Window.document.createElement('iframe');C.src='javascript:void(0)';C.allowTransparency=true;C.frameBorder='0';C.scrolling='no';C.width=C.height=0;FCKDomTools.SetElementStyles(C,{position:'absolute',zIndex:FCKConfig.FloatingPanelsZIndex});if (this._Window==window.parent&&window.frameElement){var D=null;if (FCKBrowserInfo.IsGecko&&FCK&&FCK.EditorDocument) D=[FCK.EditorDocument.body.scrollLeft,FCK.EditorDocument.body.scrollTop];window.frameElement.parentNode.insertBefore(C,window.frameElement);if (D){var E=function(){FCK.EditorDocument.body.scrollLeft=D[0];FCK.EditorDocument.body.scrollTop=D[1];};setTimeout(E,500);}}else this._Window.document.body.appendChild(C);var F=C.contentWindow;B=this.Document=F.document;var G='';if (FCKBrowserInfo.IsSafari) G='<base href="'+window.document.location+'">';B.open();B.write('<html><head>'+G+'<\/head><body style="margin:0px;padding:0px;"><\/body><\/html>');B.close();FCKTools.AddEventListenerEx(F,'focus',FCKPanel_Window_OnFocus,this);FCKTools.AddEventListenerEx(F,'blur',FCKPanel_Window_OnBlur,this);};B.dir=FCKLang.Dir;FCKTools.AddEventListener(B,'contextmenu',FCKTools.CancelEvent);this.MainNode=B.body.appendChild(B.createElement('DIV'));this.MainNode.style.cssFloat=this.IsRTL?'right':'left';};FCKPanel.prototype.AppendStyleSheet=function(A){FCKTools.AppendStyleSheet(this.Document,A);};FCKPanel.prototype.Preload=function(x,y,A){if (this._Popup) this._Popup.show(x,y,0,0,A);};FCKPanel.prototype.Show=function(x,y,A,B,C){var D;var E=this.MainNode;if (this._Popup){this._Popup.show(x,y,0,0,A);FCKDomTools.SetElementStyles(E,{B:B?B+'px':'',C:C?C+'px':''});D=E.offsetWidth;if (this.IsRTL){if (this.IsContextMenu) x=x-D+1;else if (A) x=(x*-1)+A.offsetWidth-D;};this._Popup.show(x,y,D,E.offsetHeight,A);if (this.OnHide){if (this._Timer) CheckPopupOnHide.call(this,true);this._Timer=FCKTools.SetInterval(CheckPopupOnHide,100,this);}}else{if (typeof(FCK.ToolbarSet.CurrentInstance.FocusManager)!='undefined') FCK.ToolbarSet.CurrentInstance.FocusManager.Lock();if (this.ParentPanel) this.ParentPanel.Lock();FCKDomTools.SetElementStyles(E,{B:B?B+'px':'',C:C?C+'px':''});D=E.offsetWidth;if (!B)	this._IFrame.width=1;if (!C)	this._IFrame.height=1;D=E.offsetWidth||E.firstChild.offsetWidth;var F=FCKTools.GetElementPosition(A.nodeType==9?(FCKTools.IsStrictMode(A)?A.documentElement:A.body):A,this._Window);if (this.IsRTL&&!this.IsContextMenu) x=(x*-1);x+=F.X;y+=F.Y;if (this.IsRTL){if (this.IsContextMenu) x=x-D+1;else if (A) x=x+A.offsetWidth-D;}else{var G=FCKTools.GetViewPaneSize(this._Window);var H=FCKTools.GetScrollPosition(this._Window);var I=G.Height+H.Y;var J=G.Width+H.X;if ((x+D)>J) x-=x+D-J;if ((y+E.offsetHeight)>I) y-=y+E.offsetHeight-I;};if (x<0) x=0;FCKDomTools.SetElementStyles(this._IFrame,{left:x+'px',top:y+'px'});var K=D;var L=E.offsetHeight;this._IFrame.width=K;this._IFrame.height=L;this._IFrame.contentWindow.focus();};this._IsOpened=true;FCKTools.RunFunction(this.OnShow,this);};FCKPanel.prototype.Hide=function(A){if (this._Popup) this._Popup.hide();else{if (!this._IsOpened) return;if (typeof(FCKFocusManager)!='undefined') FCKFocusManager.Unlock();this._IFrame.width=this._IFrame.height=0;this._IsOpened=false;if (this.ParentPanel) this.ParentPanel.Unlock();if (!A) FCKTools.RunFunction(this.OnHide,this);}};FCKPanel.prototype.CheckIsOpened=function(){if (this._Popup) return this._Popup.isOpen;else return this._IsOpened;};FCKPanel.prototype.CreateChildPanel=function(){var A=this._Popup?FCKTools.GetDocumentWindow(this.Document):this._Window;var B=new FCKPanel(A);B.ParentPanel=this;return B;};FCKPanel.prototype.Lock=function(){this._LockCounter++;};FCKPanel.prototype.Unlock=function(){if (--this._LockCounter==0&&!this.HasFocus) this.Hide();};function FCKPanel_Window_OnFocus(e,A){A.HasFocus=true;};function FCKPanel_Window_OnBlur(e,A){A.HasFocus=false;if (A._LockCounter==0) FCKTools.RunFunction(A.Hide,A);};function CheckPopupOnHide(A){if (A||!this._Popup.isOpen){window.clearInterval(this._Timer);this._Timer=null;FCKTools.RunFunction(this.OnHide,this);}};function FCKPanel_Cleanup(){this._Popup=null;this._Window=null;this.Document=null;this.MainNode=null;};
+var FCKIcon=function(A){var B=A?typeof(A):'undefined';switch (B){case 'number':this.Path=FCKConfig.SkinPath+'fck_strip.gif';this.Size=16;this.Position=A;break;case 'undefined':this.Path=FCK_SPACER_PATH;break;case 'string':this.Path=A;break;default:this.Path=A[0];this.Size=A[1];this.Position=A[2];}};FCKIcon.prototype.CreateIconElement=function(A){var B,eIconImage;if (this.Position){var C='-'+((this.Position-1)*this.Size)+'px';if (FCKBrowserInfo.IsIE){B=A.createElement('DIV');eIconImage=B.appendChild(A.createElement('IMG'));eIconImage.src=this.Path;eIconImage.style.top=C;}else{B=A.createElement('IMG');B.src=FCK_SPACER_PATH;B.style.backgroundPosition='0px '+C;B.style.backgroundImage='url("'+this.Path+'")';}}else{if (FCKBrowserInfo.IsIE){B=A.createElement('DIV');eIconImage=B.appendChild(A.createElement('IMG'));eIconImage.src=this.Path?this.Path:FCK_SPACER_PATH;}else{B=A.createElement('IMG');B.src=this.Path?this.Path:FCK_SPACER_PATH;}};B.className='TB_Button_Image';return B;}
+var FCKToolbarButtonUI=function(A,B,C,D,E,F){this.Name=A;this.Label=B||A;this.Tooltip=C||this.Label;this.Style=E||0;this.State=F||0;this.Icon=new FCKIcon(D);if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKToolbarButtonUI_Cleanup);};FCKToolbarButtonUI.prototype._CreatePaddingElement=function(A){var B=A.createElement('IMG');B.className='TB_Button_Padding';B.src=FCK_SPACER_PATH;return B;};FCKToolbarButtonUI.prototype.Create=function(A){var B=FCKTools.GetElementDocument(A);var C=this.MainElement=B.createElement('DIV');C.title=this.Tooltip;if (FCKBrowserInfo.IsGecko) C.onmousedown=FCKTools.CancelEvent;FCKTools.AddEventListenerEx(C,'mouseover',FCKToolbarButtonUI_OnMouseOver,this);FCKTools.AddEventListenerEx(C,'mouseout',FCKToolbarButtonUI_OnMouseOut,this);FCKTools.AddEventListenerEx(C,'click',FCKToolbarButtonUI_OnClick,this);this.ChangeState(this.State,true);if (this.Style==0&&!this.ShowArrow){C.appendChild(this.Icon.CreateIconElement(B));}else{var D=C.appendChild(B.createElement('TABLE'));D.cellPadding=0;D.cellSpacing=0;var E=D.insertRow(-1);var F=E.insertCell(-1);if (this.Style==0||this.Style==2) F.appendChild(this.Icon.CreateIconElement(B));else F.appendChild(this._CreatePaddingElement(B));if (this.Style==1||this.Style==2){F=E.insertCell(-1);F.className='TB_Button_Text';F.noWrap=true;F.appendChild(B.createTextNode(this.Label));};if (this.ShowArrow){if (this.Style!=0){E.insertCell(-1).appendChild(this._CreatePaddingElement(B));};F=E.insertCell(-1);var G=F.appendChild(B.createElement('IMG'));G.src=FCKConfig.SkinPath+'images/toolbar.buttonarrow.gif';G.width=5;G.height=3;};F=E.insertCell(-1);F.appendChild(this._CreatePaddingElement(B));};A.appendChild(C);};FCKToolbarButtonUI.prototype.ChangeState=function(A,B){if (!B&&this.State==A) return;var e=this.MainElement;switch (parseInt(A,10)){case 0:e.className='TB_Button_Off';break;case 1:e.className='TB_Button_On';break;case -1:e.className='TB_Button_Disabled';break;};this.State=A;};function FCKToolbarButtonUI_OnMouseOver(A,B){if (B.State==0) this.className='TB_Button_Off_Over';else if (B.State==1) this.className='TB_Button_On_Over';};function FCKToolbarButtonUI_OnMouseOut(A,B){if (B.State==0) this.className='TB_Button_Off';else if (B.State==1) this.className='TB_Button_On';};function FCKToolbarButtonUI_OnClick(A,B){if (B.OnClick&&B.State!=-1) B.OnClick(B);};function FCKToolbarButtonUI_Cleanup(){this.MainElement=null;};
+var FCKToolbarButton=function(A,B,C,D,E,F,G){this.CommandName=A;this.Label=B;this.Tooltip=C;this.Style=D;this.SourceView=E?true:false;this.ContextSensitive=F?true:false;if (G==null) this.IconPath=FCKConfig.SkinPath+'toolbar/'+A.toLowerCase()+'.gif';else if (typeof(G)=='number') this.IconPath=[FCKConfig.SkinPath+'fck_strip.gif',16,G];else this.IconPath=G;};FCKToolbarButton.prototype.Create=function(A){this._UIButton=new FCKToolbarButtonUI(this.CommandName,this.Label,this.Tooltip,this.IconPath,this.Style);this._UIButton.OnClick=this.Click;this._UIButton._ToolbarButton=this;this._UIButton.Create(A);};FCKToolbarButton.prototype.RefreshState=function(){var A=FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(this.CommandName).GetState();if (A==this._UIButton.State) return;this._UIButton.ChangeState(A);};FCKToolbarButton.prototype.Click=function(){var A=this._ToolbarButton||this;FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(A.CommandName).Execute();};FCKToolbarButton.prototype.Enable=function(){this.RefreshState();};FCKToolbarButton.prototype.Disable=function(){this._UIButton.ChangeState(-1);}
+var FCKSpecialCombo=function(A,B,C,D,E){this.FieldWidth=B||100;this.PanelWidth=C||150;this.PanelMaxHeight=D||150;this.Label='&nbsp;';this.Caption=A;this.Tooltip=A;this.Style=2;this.Enabled=true;this.Items={};this._Panel=new FCKPanel(E||window);this._Panel.AppendStyleSheet(FCKConfig.SkinPath+'fck_editor.css');this._PanelBox=this._Panel.MainNode.appendChild(this._Panel.Document.createElement('DIV'));this._PanelBox.className='SC_Panel';this._PanelBox.style.width=this.PanelWidth+'px';this._PanelBox.innerHTML='<table cellpadding="0" cellspacing="0" width="100%" style="TABLE-LAYOUT: fixed"><tr><td nowrap></td></tr></table>';this._ItemsHolderEl=this._PanelBox.getElementsByTagName('TD')[0];if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKSpecialCombo_Cleanup);};function FCKSpecialCombo_ItemOnMouseOver(){this.className+=' SC_ItemOver';};function FCKSpecialCombo_ItemOnMouseOut(){this.className=this.originalClass;};function FCKSpecialCombo_ItemOnClick(A,B,C){this.className=this.originalClass;B._Panel.Hide();B.SetLabel(this.FCKItemLabel);if (typeof(B.OnSelect)=='function') B.OnSelect(C,this);};FCKSpecialCombo.prototype.ClearItems=function (){if (this.Items){for (var A in this.Items) this.Items[A]=null;};var B=this._ItemsHolderEl;while (B.firstChild) B.removeChild(B.firstChild);};FCKSpecialCombo.prototype.AddItem=function(A,B,C,D){var E=this._ItemsHolderEl.appendChild(this._Panel.Document.createElement('DIV'));E.className=E.originalClass='SC_Item';E.innerHTML=B;E.FCKItemLabel=C||A;E.Selected=false;if (FCKBrowserInfo.IsIE) E.style.width='100%';if (D) E.style.backgroundColor=D;FCKTools.AddEventListenerEx(E,'mouseover',FCKSpecialCombo_ItemOnMouseOver);FCKTools.AddEventListenerEx(E,'mouseout',FCKSpecialCombo_ItemOnMouseOut);FCKTools.AddEventListenerEx(E,'click',FCKSpecialCombo_ItemOnClick,[this,A]);this.Items[A.toString().toLowerCase()]=E;return E;};FCKSpecialCombo.prototype.SelectItem=function(A){if (typeof A=='string') A=this.Items[A.toString().toLowerCase()];if (A){A.className=A.originalClass='SC_ItemSelected';A.Selected=true;}};FCKSpecialCombo.prototype.SelectItemByLabel=function(A,B){for (var C in this.Items){var D=this.Items[C];if (D.FCKItemLabel==A){D.className=D.originalClass='SC_ItemSelected';D.Selected=true;if (B) this.SetLabel(A);}}};FCKSpecialCombo.prototype.DeselectAll=function(A){for (var i in this.Items){if (!this.Items[i]) continue;this.Items[i].className=this.Items[i].originalClass='SC_Item';this.Items[i].Selected=false;};if (A) this.SetLabel('');};FCKSpecialCombo.prototype.SetLabelById=function(A){A=A?A.toString().toLowerCase():'';var B=this.Items[A];this.SetLabel(B?B.FCKItemLabel:'');};FCKSpecialCombo.prototype.SetLabel=function(A){A=(!A||A.length==0)?'&nbsp;':A;if (A==this.Label) return;this.Label=A;var B=this._LabelEl;if (B){B.innerHTML=A;FCKTools.DisableSelection(B);}};FCKSpecialCombo.prototype.SetEnabled=function(A){this.Enabled=A;this._OuterTable.className=A?'':'SC_FieldDisabled';};FCKSpecialCombo.prototype.Create=function(A){var B=FCKTools.GetElementDocument(A);var C=this._OuterTable=A.appendChild(B.createElement('TABLE'));C.cellPadding=0;C.cellSpacing=0;C.insertRow(-1);var D;var E;switch (this.Style){case 0:D='TB_ButtonType_Icon';E=false;break;case 1:D='TB_ButtonType_Text';E=false;break;case 2:E=true;break;};if (this.Caption&&this.Caption.length>0&&E){var F=C.rows[0].insertCell(-1);F.innerHTML=this.Caption;F.className='SC_FieldCaption';};var G=FCKTools.AppendElement(C.rows[0].insertCell(-1),'div');if (E){G.className='SC_Field';G.style.width=this.FieldWidth+'px';G.innerHTML='<table width="100%" cellpadding="0" cellspacing="0" style="TABLE-LAYOUT: fixed;"><tbody><tr><td class="SC_FieldLabel"><label>&nbsp;</label></td><td class="SC_FieldButton">&nbsp;</td></tr></tbody></table>';this._LabelEl=G.getElementsByTagName('label')[0];this._LabelEl.innerHTML=this.Label;}else{G.className='TB_Button_Off';G.innerHTML='<table title="'+this.Tooltip+'" class="'+D+'" cellspacing="0" cellpadding="0" border="0"><tr><td><img class="TB_Button_Padding" src="'+FCK_SPACER_PATH+'" /></td><td class="TB_Text">'+this.Caption+'</td><td><img class="TB_Button_Padding" src="'+FCK_SPACER_PATH+'" /></td><td class="TB_ButtonArrow"><img src="'+FCKConfig.SkinPath+'images/toolbar.buttonarrow.gif" width="5" height="3"></td><td><img class="TB_Button_Padding" src="'+FCK_SPACER_PATH+'" /></td></tr></table>';};FCKTools.AddEventListenerEx(G,'mouseover',FCKSpecialCombo_OnMouseOver,this);FCKTools.AddEventListenerEx(G,'mouseout',FCKSpecialCombo_OnMouseOut,this);FCKTools.AddEventListenerEx(G,'click',FCKSpecialCombo_OnClick,this);FCKTools.DisableSelection(this._Panel.Document.body);};function FCKSpecialCombo_Cleanup(){this._LabelEl=null;this._OuterTable=null;this._ItemsHolderEl=null;this._PanelBox=null;if (this.Items){for (var A in this.Items) this.Items[A]=null;}};function FCKSpecialCombo_OnMouseOver(A,B){if (B.Enabled){switch (B.Style){case 0:this.className='TB_Button_On_Over';break;case 1:this.className='TB_Button_On_Over';break;case 2:this.className='SC_Field SC_FieldOver';break;}}};function FCKSpecialCombo_OnMouseOut(A,B){switch (B.Style){case 0:this.className='TB_Button_Off';break;case 1:this.className='TB_Button_Off';break;case 2:this.className='SC_Field';break;}};function FCKSpecialCombo_OnClick(e,A){if (A.Enabled){var B=A._Panel;var C=A._PanelBox;var D=A._ItemsHolderEl;var E=A.PanelMaxHeight;if (A.OnBeforeClick) A.OnBeforeClick(A);if (FCKBrowserInfo.IsIE) B.Preload(0,this.offsetHeight,this);if (D.offsetHeight>E) C.style.height=E+'px';else C.style.height='';B.Show(0,this.offsetHeight,this);}};
+var FCKToolbarSpecialCombo=function(){this.SourceView=false;this.ContextSensitive=true;};FCKToolbarSpecialCombo.prototype.DefaultLabel='';function FCKToolbarSpecialCombo_OnSelect(A,B){FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(this.CommandName).Execute(A,B);};FCKToolbarSpecialCombo.prototype.Create=function(A){this._Combo=new FCKSpecialCombo(this.GetLabel(),this.FieldWidth,this.PanelWidth,this.PanelMaxHeight,FCKBrowserInfo.IsIE?window:FCKTools.GetElementWindow(A).parent);this._Combo.Tooltip=this.Tooltip;this._Combo.Style=this.Style;this.CreateItems(this._Combo);this._Combo.Create(A);this._Combo.CommandName=this.CommandName;this._Combo.OnSelect=FCKToolbarSpecialCombo_OnSelect;};function FCKToolbarSpecialCombo_RefreshActiveItems(A,B){A.DeselectAll();A.SelectItem(B);A.SetLabelById(B);};FCKToolbarSpecialCombo.prototype.RefreshState=function(){var A;var B=FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(this.CommandName).GetState();if (B!=-1){A=1;if (this.RefreshActiveItems) this.RefreshActiveItems(this._Combo,B);else{if (this._LastValue!==B){this._LastValue=B;if (!B||B.length==0){this._Combo.DeselectAll();this._Combo.SetLabel(this.DefaultLabel);}else FCKToolbarSpecialCombo_RefreshActiveItems(this._Combo,B);}}}else A=-1;if (A==this.State) return;if (A==-1){this._Combo.DeselectAll();this._Combo.SetLabel('');};this.State=A;this._Combo.SetEnabled(A!=-1);};FCKToolbarSpecialCombo.prototype.Enable=function(){this.RefreshState();};FCKToolbarSpecialCombo.prototype.Disable=function(){this.State=-1;this._Combo.DeselectAll();this._Combo.SetLabel('');this._Combo.SetEnabled(false);};
+var FCKToolbarStyleCombo=function(A,B){if (A===false) return;this.CommandName='Style';this.Label=this.GetLabel();this.Tooltip=A?A:this.Label;this.Style=B?B:2;this.DefaultLabel=FCKConfig.DefaultStyleLabel||'';};FCKToolbarStyleCombo.prototype=new FCKToolbarSpecialCombo;FCKToolbarStyleCombo.prototype.GetLabel=function(){return FCKLang.Style;};FCKToolbarStyleCombo.prototype.GetStyles=function(){var A={};var B=FCK.ToolbarSet.CurrentInstance.Styles.GetStyles();for (var C in B){var D=B[C];if (!D.IsCore) A[C]=D;};return A;};FCKToolbarStyleCombo.prototype.CreateItems=function(A){var B=A._Panel.Document;FCKTools.AppendStyleSheet(B,FCKConfig.ToolbarComboPreviewCSS);FCKTools.AppendStyleString(B,FCKConfig.EditorAreaStyles);B.body.className+=' ForceBaseFont';FCKConfig.ApplyBodyAttributes(B.body);var C=this.GetStyles();for (var D in C){var E=C[D];var F=E.GetType()==2?D:FCKToolbarStyleCombo_BuildPreview(E,E.Label||D);var G=A.AddItem(D,F);G.Style=E;};A.OnBeforeClick=this.StyleCombo_OnBeforeClick;};FCKToolbarStyleCombo.prototype.RefreshActiveItems=function(A){var B=FCK.ToolbarSet.CurrentInstance.Selection.GetBoundaryParentElement(true);if (B){var C=new FCKElementPath(B);var D=C.Elements;for (var e=0;e<D.length;e++){for (var i in A.Items){var E=A.Items[i];var F=E.Style;if (F.CheckElementRemovable(D[e],true)){A.SetLabel(F.Label||F.Name);return;}}}};A.SetLabel(this.DefaultLabel);};FCKToolbarStyleCombo.prototype.StyleCombo_OnBeforeClick=function(A){A.DeselectAll();var B;var C;var D;var E=FCK.ToolbarSet.CurrentInstance.Selection;if (E.GetType()=='Control'){B=E.GetSelectedElement();D=B.nodeName.toLowerCase();}else{B=E.GetBoundaryParentElement(true);C=new FCKElementPath(B);};for (var i in A.Items){var F=A.Items[i];var G=F.Style;if ((D&&G.Element==D)||(!D&&G.GetType()!=2)){F.style.display='';if ((C&&G.CheckActive(C))||(!C&&G.CheckElementRemovable(B,true))) A.SelectItem(G.Name);}else F.style.display='none';}};function FCKToolbarStyleCombo_BuildPreview(A,B){var C=A.GetType();var D=[];if (C==0) D.push('<div class="BaseFont">');var E=A.Element;if (E=='bdo') E='span';D=['<',E];var F=A._StyleDesc.Attributes;if (F){for (var G in F){D.push(' ',G,'="',A.GetFinalAttributeValue(G),'"');}};if (A._GetStyleText().length>0) D.push(' style="',A.GetFinalStyleValue(),'"');D.push('>',B,'</',E,'>');if (C==0) D.push('</div>');return D.join('');}
+var FCKToolbarFontFormatCombo=function(A,B){if (A===false) return;this.CommandName='FontFormat';this.Label=this.GetLabel();this.Tooltip=A?A:this.Label;this.Style=B?B:2;this.NormalLabel='Normal';this.PanelWidth=190;this.DefaultLabel=FCKConfig.DefaultFontFormatLabel||'';};FCKToolbarFontFormatCombo.prototype=new FCKToolbarStyleCombo(false);FCKToolbarFontFormatCombo.prototype.GetLabel=function(){return FCKLang.FontFormat;};FCKToolbarFontFormatCombo.prototype.GetStyles=function(){var A={};var B=FCKLang['FontFormats'].split(';');var C={p:B[0],pre:B[1],address:B[2],h1:B[3],h2:B[4],h3:B[5],h4:B[6],h5:B[7],h6:B[8],div:B[9]||(B[0]+' (DIV)')};var D=FCKConfig.FontFormats.split(';');for (var i=0;i<D.length;i++){var E=D[i];var F=FCKStyles.GetStyle('_FCK_'+E);if (F){F.Label=C[E];A['_FCK_'+E]=F;}else alert("The FCKConfig.CoreStyles['"+E+"'] setting was not found. Please check the fckconfig.js file");};return A;};FCKToolbarFontFormatCombo.prototype.RefreshActiveItems=function(A){var B=FCK.ToolbarSet.CurrentInstance.Selection.GetBoundaryParentElement(true);if (B){var C=new FCKElementPath(B);var D=C.Block;if (D){for (var i in A.Items){var E=A.Items[i];var F=E.Style;if (F.CheckElementRemovable(D)){A.SetLabel(F.Label);return;}}}};A.SetLabel(this.DefaultLabel);};FCKToolbarFontFormatCombo.prototype.StyleCombo_OnBeforeClick=function(A){A.DeselectAll();var B=FCK.ToolbarSet.CurrentInstance.Selection.GetBoundaryParentElement(true);if (B){var C=new FCKElementPath(B);var D=C.Block;for (var i in A.Items){var E=A.Items[i];var F=E.Style;if (F.CheckElementRemovable(D)){A.SelectItem(E);return;}}}};
+var FCKToolbarFontsCombo=function(A,B){this.CommandName='FontName';this.Label=this.GetLabel();this.Tooltip=A?A:this.Label;this.Style=B?B:2;this.DefaultLabel=FCKConfig.DefaultFontLabel||'';};FCKToolbarFontsCombo.prototype=new FCKToolbarFontFormatCombo(false);FCKToolbarFontsCombo.prototype.GetLabel=function(){return FCKLang.Font;};FCKToolbarFontsCombo.prototype.GetStyles=function(){var A=FCKStyles.GetStyle('_FCK_FontFace');if (!A){alert("The FCKConfig.CoreStyles['Size'] setting was not found. Please check the fckconfig.js file");return {};};var B={};var C=FCKConfig.FontNames.split(';');for (var i=0;i<C.length;i++){var D=C[i].split('/');var E=D[0];var F=D[1]||E;var G=FCKTools.CloneObject(A);G.SetVariable('Font',E);G.Label=F;B[F]=G;};return B;};FCKToolbarFontsCombo.prototype.RefreshActiveItems=FCKToolbarStyleCombo.prototype.RefreshActiveItems;FCKToolbarFontsCombo.prototype.StyleCombo_OnBeforeClick=function(A){A.DeselectAll();var B=FCKSelection.GetBoundaryParentElement(true);if (B){var C=new FCKElementPath(B);for (var i in A.Items){var D=A.Items[i];var E=D.Style;if (E.CheckActive(C)){A.SelectItem(D);return;}}}};
+var FCKToolbarFontSizeCombo=function(A,B){this.CommandName='FontSize';this.Label=this.GetLabel();this.Tooltip=A?A:this.Label;this.Style=B?B:2;this.DefaultLabel=FCKConfig.DefaultFontSizeLabel||'';this.FieldWidth=70;};FCKToolbarFontSizeCombo.prototype=new FCKToolbarFontFormatCombo(false);FCKToolbarFontSizeCombo.prototype.GetLabel=function(){return FCKLang.FontSize;};FCKToolbarFontSizeCombo.prototype.GetStyles=function(){var A=FCKStyles.GetStyle('_FCK_Size');if (!A){alert("The FCKConfig.CoreStyles['FontFace'] setting was not found. Please check the fckconfig.js file");return {};};var B={};var C=FCKConfig.FontSizes.split(';');for (var i=0;i<C.length;i++){var D=C[i].split('/');var E=D[0];var F=D[1]||E;var G=FCKTools.CloneObject(A);G.SetVariable('Size',E);G.Label=F;B[F]=G;};return B;};FCKToolbarFontSizeCombo.prototype.RefreshActiveItems=FCKToolbarStyleCombo.prototype.RefreshActiveItems;FCKToolbarFontSizeCombo.prototype.StyleCombo_OnBeforeClick=FCKToolbarFontsCombo.prototype.StyleCombo_OnBeforeClick;
+var FCKToolbarPanelButton=function(A,B,C,D,E){this.CommandName=A;var F;if (E==null) F=FCKConfig.SkinPath+'toolbar/'+A.toLowerCase()+'.gif';else if (typeof(E)=='number') F=[FCKConfig.SkinPath+'fck_strip.gif',16,E];var G=this._UIButton=new FCKToolbarButtonUI(A,B,C,F,D);G._FCKToolbarPanelButton=this;G.ShowArrow=true;G.OnClick=FCKToolbarPanelButton_OnButtonClick;};FCKToolbarPanelButton.prototype.TypeName='FCKToolbarPanelButton';FCKToolbarPanelButton.prototype.Create=function(A){A.className+='Menu';this._UIButton.Create(A);var B=FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(this.CommandName)._Panel;B._FCKToolbarPanelButton=this;var C=B.Document.body.appendChild(B.Document.createElement('div'));C.style.position='absolute';C.style.top='0px';var D=this.LineImg=C.appendChild(B.Document.createElement('IMG'));D.className='TB_ConnectionLine';D.style.position='absolute';D.src=FCK_SPACER_PATH;B.OnHide=FCKToolbarPanelButton_OnPanelHide;};function FCKToolbarPanelButton_OnButtonClick(A){var B=this._FCKToolbarPanelButton;var e=B._UIButton.MainElement;B._UIButton.ChangeState(1);B.LineImg.style.width=(e.offsetWidth-2)+'px';FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(B.CommandName).Execute(0,e.offsetHeight-1,e);};function FCKToolbarPanelButton_OnPanelHide(){var A=this._FCKToolbarPanelButton;A._UIButton.ChangeState(0);};FCKToolbarPanelButton.prototype.RefreshState=FCKToolbarButton.prototype.RefreshState;FCKToolbarPanelButton.prototype.Enable=FCKToolbarButton.prototype.Enable;FCKToolbarPanelButton.prototype.Disable=FCKToolbarButton.prototype.Disable;
+var FCKToolbarItems={};FCKToolbarItems.LoadedItems={};FCKToolbarItems.RegisterItem=function(A,B){this.LoadedItems[A]=B;};FCKToolbarItems.GetItem=function(A){var B=FCKToolbarItems.LoadedItems[A];if (B) return B;switch (A){case 'Source':B=new FCKToolbarButton('Source',FCKLang.Source,null,2,true,true,1);break;case 'DocProps':B=new FCKToolbarButton('DocProps',FCKLang.DocProps,null,null,null,null,2);break;case 'Save':B=new FCKToolbarButton('Save',FCKLang.Save,null,null,true,null,3);break;case 'NewPage':B=new FCKToolbarButton('NewPage',FCKLang.NewPage,null,null,true,null,4);break;case 'Preview':B=new FCKToolbarButton('Preview',FCKLang.Preview,null,null,true,null,5);break;case 'Templates':B=new FCKToolbarButton('Templates',FCKLang.Templates,null,null,null,null,6);break;case 'About':B=new FCKToolbarButton('About',FCKLang.About,null,null,true,null,47);break;case 'Cut':B=new FCKToolbarButton('Cut',FCKLang.Cut,null,null,false,true,7);break;case 'Copy':B=new FCKToolbarButton('Copy',FCKLang.Copy,null,null,false,true,8);break;case 'Paste':B=new FCKToolbarButton('Paste',FCKLang.Paste,null,null,false,true,9);break;case 'PasteText':B=new FCKToolbarButton('PasteText',FCKLang.PasteText,null,null,false,true,10);break;case 'PasteWord':B=new FCKToolbarButton('PasteWord',FCKLang.PasteWord,null,null,false,true,11);break;case 'Print':B=new FCKToolbarButton('Print',FCKLang.Print,null,null,false,true,12);break;case 'SpellCheck':B=new FCKToolbarButton('SpellCheck',FCKLang.SpellCheck,null,null,null,null,13);break;case 'Undo':B=new FCKToolbarButton('Undo',FCKLang.Undo,null,null,false,true,14);break;case 'Redo':B=new FCKToolbarButton('Redo',FCKLang.Redo,null,null,false,true,15);break;case 'SelectAll':B=new FCKToolbarButton('SelectAll',FCKLang.SelectAll,null,null,true,null,18);break;case 'RemoveFormat':B=new FCKToolbarButton('RemoveFormat',FCKLang.RemoveFormat,null,null,false,true,19);break;case 'FitWindow':B=new FCKToolbarButton('FitWindow',FCKLang.FitWindow,null,null,true,true,66);break;case 'Bold':B=new FCKToolbarButton('Bold',FCKLang.Bold,null,null,false,true,20);break;case 'Italic':B=new FCKToolbarButton('Italic',FCKLang.Italic,null,null,false,true,21);break;case 'Underline':B=new FCKToolbarButton('Underline',FCKLang.Underline,null,null,false,true,22);break;case 'StrikeThrough':B=new FCKToolbarButton('StrikeThrough',FCKLang.StrikeThrough,null,null,false,true,23);break;case 'Subscript':B=new FCKToolbarButton('Subscript',FCKLang.Subscript,null,null,false,true,24);break;case 'Superscript':B=new FCKToolbarButton('Superscript',FCKLang.Superscript,null,null,false,true,25);break;case 'OrderedList':B=new FCKToolbarButton('InsertOrderedList',FCKLang.NumberedListLbl,FCKLang.NumberedList,null,false,true,26);break;case 'UnorderedList':B=new FCKToolbarButton('InsertUnorderedList',FCKLang.BulletedListLbl,FCKLang.BulletedList,null,false,true,27);break;case 'Outdent':B=new FCKToolbarButton('Outdent',FCKLang.DecreaseIndent,null,null,false,true,28);break;case 'Indent':B=new FCKToolbarButton('Indent',FCKLang.IncreaseIndent,null,null,false,true,29);break;case 'Blockquote':B=new FCKToolbarButton('Blockquote',FCKLang.Blockquote,null,null,false,true,73);break;case 'Link':B=new FCKToolbarButton('Link',FCKLang.InsertLinkLbl,FCKLang.InsertLink,null,false,true,34);break;case 'Unlink':B=new FCKToolbarButton('Unlink',FCKLang.RemoveLink,null,null,false,true,35);break;case 'Anchor':B=new FCKToolbarButton('Anchor',FCKLang.Anchor,null,null,null,null,36);break;case 'Image':B=new FCKToolbarButton('Image',FCKLang.InsertImageLbl,FCKLang.InsertImage,null,false,true,37);break;case 'Flash':B=new FCKToolbarButton('Flash',FCKLang.InsertFlashLbl,FCKLang.InsertFlash,null,false,true,38);break;case 'Table':B=new FCKToolbarButton('Table',FCKLang.InsertTableLbl,FCKLang.InsertTable,null,false,true,39);break;case 'SpecialChar':B=new FCKToolbarButton('SpecialChar',FCKLang.InsertSpecialCharLbl,FCKLang.InsertSpecialChar,null,false,true,42);break;case 'Smiley':B=new FCKToolbarButton('Smiley',FCKLang.InsertSmileyLbl,FCKLang.InsertSmiley,null,false,true,41);break;case 'PageBreak':B=new FCKToolbarButton('PageBreak',FCKLang.PageBreakLbl,FCKLang.PageBreak,null,false,true,43);break;case 'Rule':B=new FCKToolbarButton('Rule',FCKLang.InsertLineLbl,FCKLang.InsertLine,null,false,true,40);break;case 'JustifyLeft':B=new FCKToolbarButton('JustifyLeft',FCKLang.LeftJustify,null,null,false,true,30);break;case 'JustifyCenter':B=new FCKToolbarButton('JustifyCenter',FCKLang.CenterJustify,null,null,false,true,31);break;case 'JustifyRight':B=new FCKToolbarButton('JustifyRight',FCKLang.RightJustify,null,null,false,true,32);break;case 'JustifyFull':B=new FCKToolbarButton('JustifyFull',FCKLang.BlockJustify,null,null,false,true,33);break;case 'Style':B=new FCKToolbarStyleCombo();break;case 'FontName':B=new FCKToolbarFontsCombo();break;case 'FontSize':B=new FCKToolbarFontSizeCombo();break;case 'FontFormat':B=new FCKToolbarFontFormatCombo();break;case 'TextColor':B=new FCKToolbarPanelButton('TextColor',FCKLang.TextColor,null,null,45);break;case 'BGColor':B=new FCKToolbarPanelButton('BGColor',FCKLang.BGColor,null,null,46);break;case 'Find':B=new FCKToolbarButton('Find',FCKLang.Find,null,null,null,null,16);break;case 'Replace':B=new FCKToolbarButton('Replace',FCKLang.Replace,null,null,null,null,17);break;case 'Form':B=new FCKToolbarButton('Form',FCKLang.Form,null,null,null,null,48);break;case 'Checkbox':B=new FCKToolbarButton('Checkbox',FCKLang.Checkbox,null,null,null,null,49);break;case 'Radio':B=new FCKToolbarButton('Radio',FCKLang.RadioButton,null,null,null,null,50);break;case 'TextField':B=new FCKToolbarButton('TextField',FCKLang.TextField,null,null,null,null,51);break;case 'Textarea':B=new FCKToolbarButton('Textarea',FCKLang.Textarea,null,null,null,null,52);break;case 'HiddenField':B=new FCKToolbarButton('HiddenField',FCKLang.HiddenField,null,null,null,null,56);break;case 'Button':B=new FCKToolbarButton('Button',FCKLang.Button,null,null,null,null,54);break;case 'Select':B=new FCKToolbarButton('Select',FCKLang.SelectionField,null,null,null,null,53);break;case 'ImageButton':B=new FCKToolbarButton('ImageButton',FCKLang.ImageButton,null,null,null,null,55);break;case 'ShowBlocks':B=new FCKToolbarButton('ShowBlocks',FCKLang.ShowBlocks,null,null,null,true,72);break;default:alert(FCKLang.UnknownToolbarItem.replace(/%1/g,A));return null;};FCKToolbarItems.LoadedItems[A]=B;return B;};
+var FCKToolbar=function(){this.Items=[];};FCKToolbar.prototype.AddItem=function(A){return this.Items[this.Items.length]=A;};FCKToolbar.prototype.AddButton=function(A,B,C,D,E,F){if (typeof(D)=='number') D=[this.DefaultIconsStrip,this.DefaultIconSize,D];var G=new FCKToolbarButtonUI(A,B,C,D,E,F);G._FCKToolbar=this;G.OnClick=FCKToolbar_OnItemClick;return this.AddItem(G);};function FCKToolbar_OnItemClick(A){var B=A._FCKToolbar;if (B.OnItemClick) B.OnItemClick(B,A);};FCKToolbar.prototype.AddSeparator=function(){this.AddItem(new FCKToolbarSeparator());};FCKToolbar.prototype.Create=function(A){var B=FCKTools.GetElementDocument(A);var e=B.createElement('table');e.className='TB_Toolbar';e.style.styleFloat=e.style.cssFloat=(FCKLang.Dir=='ltr'?'left':'right');e.dir=FCKLang.Dir;e.cellPadding=0;e.cellSpacing=0;var C=e.insertRow(-1);var D;if (!this.HideStart){D=C.insertCell(-1);D.appendChild(B.createElement('div')).className='TB_Start';};for (var i=0;i<this.Items.length;i++){this.Items[i].Create(C.insertCell(-1));};if (!this.HideEnd){D=C.insertCell(-1);D.appendChild(B.createElement('div')).className='TB_End';};A.appendChild(e);};var FCKToolbarSeparator=function(){};FCKToolbarSeparator.prototype.Create=function(A){FCKTools.AppendElement(A,'div').className='TB_Separator';}
+var FCKToolbarBreak=function(){};FCKToolbarBreak.prototype.Create=function(A){var B=FCKTools.GetElementDocument(A).createElement('div');B.className='TB_Break';B.style.clear=FCKLang.Dir=='rtl'?'left':'right';A.appendChild(B);};
+function FCKToolbarSet_Create(A){var B;var C=A||FCKConfig.ToolbarLocation;switch (C){case 'In':document.getElementById('xToolbarRow').style.display='';B=new FCKToolbarSet(document);break;case 'None':B=new FCKToolbarSet(document);break;default:FCK.Events.AttachEvent('OnBlur',FCK_OnBlur);FCK.Events.AttachEvent('OnFocus',FCK_OnFocus);var D;var E=C.match(/^Out:(.+)\((\w+)\)$/);if (E){D=eval('parent.'+E[1]).document.getElementById(E[2]);}else{E=C.match(/^Out:(\w+)$/);if (E) D=parent.document.getElementById(E[1]);};if (!D){alert('Invalid value for "ToolbarLocation"');return arguments.callee('In');};B=D.__FCKToolbarSet;if (B) break;var F=FCKTools.GetElementDocument(D).createElement('iframe');F.src='javascript:void(0)';F.frameBorder=0;F.width='100%';F.height='10';D.appendChild(F);F.unselectable='on';var G=F.contentWindow.document;var H='';if (FCKBrowserInfo.IsSafari) H='<base href="'+window.document.location+'">';G.open();G.write('<html><head>'+H+'<script type="text/javascript"> var adjust = function() { window.frameElement.height = document.body.scrollHeight ; }; window.onresize = adjust; window.onload = function () {adjust(); window.setTimeout( adjust, 1000 ); }</script></head><body style="overflow: hidden">'+document.getElementById('xToolbarSpace').innerHTML+'</body></html>');G.close();FCKTools.AddEventListener(G,'contextmenu',FCKTools.CancelEvent);FCKTools.AppendStyleSheet(G,FCKConfig.SkinPath+'fck_editor.css');B=D.__FCKToolbarSet=new FCKToolbarSet(G);B._IFrame=F;if (FCK.IECleanup) FCK.IECleanup.AddItem(D,FCKToolbarSet_Target_Cleanup);};B.CurrentInstance=FCK;FCK.AttachToOnSelectionChange(B.RefreshItemsState);return B;};function FCK_OnBlur(A){var B=A.ToolbarSet;if (B.CurrentInstance==A) B.Disable();};function FCK_OnFocus(A){var B=A.ToolbarSet;var C=A||FCK;B.CurrentInstance.FocusManager.RemoveWindow(B._IFrame.contentWindow);B.CurrentInstance=C;C.FocusManager.AddWindow(B._IFrame.contentWindow,true);B.Enable();};function FCKToolbarSet_Cleanup(){this._TargetElement=null;this._IFrame=null;};function FCKToolbarSet_Target_Cleanup(){this.__FCKToolbarSet=null;};var FCKToolbarSet=function(A){this._Document=A;this._TargetElement=A.getElementById('xToolbar');var B=A.getElementById('xExpandHandle');var C=A.getElementById('xCollapseHandle');B.title=FCKLang.ToolbarExpand;FCKTools.AddEventListener(B,'click',FCKToolbarSet_Expand_OnClick);C.title=FCKLang.ToolbarCollapse;FCKTools.AddEventListener(C,'click',FCKToolbarSet_Collapse_OnClick);if (!FCKConfig.ToolbarCanCollapse||FCKConfig.ToolbarStartExpanded) this.Expand();else this.Collapse();C.style.display=FCKConfig.ToolbarCanCollapse?'':'none';if (FCKConfig.ToolbarCanCollapse) C.style.display='';else A.getElementById('xTBLeftBorder').style.display='';this.Toolbars=[];this.IsLoaded=false;if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKToolbarSet_Cleanup);};function FCKToolbarSet_Expand_OnClick(){FCK.ToolbarSet.Expand();};function FCKToolbarSet_Collapse_OnClick(){FCK.ToolbarSet.Collapse();};FCKToolbarSet.prototype.Expand=function(){this._ChangeVisibility(false);};FCKToolbarSet.prototype.Collapse=function(){this._ChangeVisibility(true);};FCKToolbarSet.prototype._ChangeVisibility=function(A){this._Document.getElementById('xCollapsed').style.display=A?'':'none';this._Document.getElementById('xExpanded').style.display=A?'none':'';if (FCKBrowserInfo.IsGecko){FCKTools.RunFunction(window.onresize);}};FCKToolbarSet.prototype.Load=function(A){this.Name=A;this.Items=[];this.ItemsWysiwygOnly=[];this.ItemsContextSensitive=[];this._TargetElement.innerHTML='';var B=FCKConfig.ToolbarSets[A];if (!B){alert(FCKLang.UnknownToolbarSet.replace(/%1/g,A));return;};this.Toolbars=[];for (var x=0;x<B.length;x++){var C=B[x];if (!C) continue;var D;if (typeof(C)=='string'){if (C=='/') D=new FCKToolbarBreak();}else{D=new FCKToolbar();for (var j=0;j<C.length;j++){var E=C[j];if (E=='-') D.AddSeparator();else{var F=FCKToolbarItems.GetItem(E);if (F){D.AddItem(F);this.Items.push(F);if (!F.SourceView) this.ItemsWysiwygOnly.push(F);if (F.ContextSensitive) this.ItemsContextSensitive.push(F);}}}};D.Create(this._TargetElement);this.Toolbars[this.Toolbars.length]=D;};FCKTools.DisableSelection(this._Document.getElementById('xCollapseHandle').parentNode);if (FCK.Status!=2) FCK.Events.AttachEvent('OnStatusChange',this.RefreshModeState);else this.RefreshModeState();this.IsLoaded=true;this.IsEnabled=true;FCKTools.RunFunction(this.OnLoad);};FCKToolbarSet.prototype.Enable=function(){if (this.IsEnabled) return;this.IsEnabled=true;var A=this.Items;for (var i=0;i<A.length;i++) A[i].RefreshState();};FCKToolbarSet.prototype.Disable=function(){if (!this.IsEnabled) return;this.IsEnabled=false;var A=this.Items;for (var i=0;i<A.length;i++) A[i].Disable();};FCKToolbarSet.prototype.RefreshModeState=function(A){if (FCK.Status!=2) return;var B=A?A.ToolbarSet:this;var C=B.ItemsWysiwygOnly;if (FCK.EditMode==0){for (var i=0;i<C.length;i++) C[i].Enable();B.RefreshItemsState(A);}else{B.RefreshItemsState(A);for (var j=0;j<C.length;j++) C[j].Disable();}};FCKToolbarSet.prototype.RefreshItemsState=function(A){var B=(A?A.ToolbarSet:this).ItemsContextSensitive;for (var i=0;i<B.length;i++) B[i].RefreshState();};
+var FCKDialog={};FCKDialog.OpenDialog=function(A,B,C,D,E,F,G,H){var I={};I.Title=B;I.Page=C;I.Editor=window;I.CustomValue=F;var J=FCKConfig.BasePath+'fckdialog.html';this.Show(I,A,J,D,E,G,H);};
+FCKDialog.Show=function(A,B,C,D,E,F,G){if (!F) F=window;var H='help:no;scroll:no;status:no;resizable:'+(G?'yes':'no')+';dialogWidth:'+D+'px;dialogHeight:'+E+'px';FCKFocusManager.Lock();var I='B';try{I=F.showModalDialog(C,A,H);}catch(e) {};if ('B'===I) alert(FCKLang.DialogBlocked);FCKFocusManager.Unlock();};
+var FCKMenuItem=function(A,B,C,D,E){this.Name=B;this.Label=C||B;this.IsDisabled=E;this.Icon=new FCKIcon(D);this.SubMenu=new FCKMenuBlockPanel();this.SubMenu.Parent=A;this.SubMenu.OnClick=FCKTools.CreateEventListener(FCKMenuItem_SubMenu_OnClick,this);if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKMenuItem_Cleanup);};FCKMenuItem.prototype.AddItem=function(A,B,C,D){this.HasSubMenu=true;return this.SubMenu.AddItem(A,B,C,D);};FCKMenuItem.prototype.AddSeparator=function(){this.SubMenu.AddSeparator();};FCKMenuItem.prototype.Create=function(A){var B=this.HasSubMenu;var C=FCKTools.GetElementDocument(A);var r=this.MainElement=A.insertRow(-1);r.className=this.IsDisabled?'MN_Item_Disabled':'MN_Item';if (!this.IsDisabled){FCKTools.AddEventListenerEx(r,'mouseover',FCKMenuItem_OnMouseOver,[this]);FCKTools.AddEventListenerEx(r,'click',FCKMenuItem_OnClick,[this]);if (!B) FCKTools.AddEventListenerEx(r,'mouseout',FCKMenuItem_OnMouseOut,[this]);};var D=r.insertCell(-1);D.className='MN_Icon';D.appendChild(this.Icon.CreateIconElement(C));D=r.insertCell(-1);D.className='MN_Label';D.noWrap=true;D.appendChild(C.createTextNode(this.Label));D=r.insertCell(-1);if (B){D.className='MN_Arrow';var E=D.appendChild(C.createElement('IMG'));E.src=FCK_IMAGES_PATH+'arrow_'+FCKLang.Dir+'.gif';E.width=4;E.height=7;this.SubMenu.Create();this.SubMenu.Panel.OnHide=FCKTools.CreateEventListener(FCKMenuItem_SubMenu_OnHide,this);}};FCKMenuItem.prototype.Activate=function(){this.MainElement.className='MN_Item_Over';if (this.HasSubMenu){this.SubMenu.Show(this.MainElement.offsetWidth+2,-2,this.MainElement);};FCKTools.RunFunction(this.OnActivate,this);};FCKMenuItem.prototype.Deactivate=function(){this.MainElement.className='MN_Item';if (this.HasSubMenu) this.SubMenu.Hide();};function FCKMenuItem_SubMenu_OnClick(A,B){FCKTools.RunFunction(B.OnClick,B,[A]);};function FCKMenuItem_SubMenu_OnHide(A){A.Deactivate();};function FCKMenuItem_OnClick(A,B){if (B.HasSubMenu) B.Activate();else{B.Deactivate();FCKTools.RunFunction(B.OnClick,B,[B]);}};function FCKMenuItem_OnMouseOver(A,B){B.Activate();};function FCKMenuItem_OnMouseOut(A,B){B.Deactivate();};function FCKMenuItem_Cleanup(){this.MainElement=null;}
+var FCKMenuBlock=function(){this._Items=[];};FCKMenuBlock.prototype.Count=function(){return this._Items.length;};FCKMenuBlock.prototype.AddItem=function(A,B,C,D){var E=new FCKMenuItem(this,A,B,C,D);E.OnClick=FCKTools.CreateEventListener(FCKMenuBlock_Item_OnClick,this);E.OnActivate=FCKTools.CreateEventListener(FCKMenuBlock_Item_OnActivate,this);this._Items.push(E);return E;};FCKMenuBlock.prototype.AddSeparator=function(){this._Items.push(new FCKMenuSeparator());};FCKMenuBlock.prototype.RemoveAllItems=function(){this._Items=[];var A=this._ItemsTable;if (A){while (A.rows.length>0) A.deleteRow(0);}};FCKMenuBlock.prototype.Create=function(A){if (!this._ItemsTable){if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKMenuBlock_Cleanup);this._Window=FCKTools.GetElementWindow(A);var B=FCKTools.GetElementDocument(A);var C=A.appendChild(B.createElement('table'));C.cellPadding=0;C.cellSpacing=0;FCKTools.DisableSelection(C);var D=C.insertRow(-1).insertCell(-1);D.className='MN_Menu';var E=this._ItemsTable=D.appendChild(B.createElement('table'));E.cellPadding=0;E.cellSpacing=0;};for (var i=0;i<this._Items.length;i++) this._Items[i].Create(this._ItemsTable);};function FCKMenuBlock_Item_OnClick(A,B){FCKTools.RunFunction(B.OnClick,B,[A]);};function FCKMenuBlock_Item_OnActivate(A){var B=A._ActiveItem;if (B&&B!=this){if (!FCKBrowserInfo.IsIE&&B.HasSubMenu&&!this.HasSubMenu){A._Window.focus();A.Panel.HasFocus=true;};B.Deactivate();};A._ActiveItem=this;};function FCKMenuBlock_Cleanup(){this._Window=null;this._ItemsTable=null;};var FCKMenuSeparator=function(){};FCKMenuSeparator.prototype.Create=function(A){var B=FCKTools.GetElementDocument(A);var r=A.insertRow(-1);var C=r.insertCell(-1);C.className='MN_Separator MN_Icon';C=r.insertCell(-1);C.className='MN_Separator';C.appendChild(B.createElement('DIV')).className='MN_Separator_Line';C=r.insertCell(-1);C.className='MN_Separator';C.appendChild(B.createElement('DIV')).className='MN_Separator_Line';}
+var FCKMenuBlockPanel=function(){FCKMenuBlock.call(this);};FCKMenuBlockPanel.prototype=new FCKMenuBlock();FCKMenuBlockPanel.prototype.Create=function(){var A=this.Panel=(this.Parent&&this.Parent.Panel?this.Parent.Panel.CreateChildPanel():new FCKPanel());A.AppendStyleSheet(FCKConfig.SkinPath+'fck_editor.css');FCKMenuBlock.prototype.Create.call(this,A.MainNode);};FCKMenuBlockPanel.prototype.Show=function(x,y,A){if (!this.Panel.CheckIsOpened()) this.Panel.Show(x,y,A);};FCKMenuBlockPanel.prototype.Hide=function(){if (this.Panel.CheckIsOpened()) this.Panel.Hide();}
+var FCKContextMenu=function(A,B){this.CtrlDisable=false;var C=this._Panel=new FCKPanel(A);C.AppendStyleSheet(FCKConfig.SkinPath+'fck_editor.css');C.IsContextMenu=true;if (FCKBrowserInfo.IsGecko) C.Document.addEventListener('draggesture',function(e) {e.preventDefault();return false;},true);var D=this._MenuBlock=new FCKMenuBlock();D.Panel=C;D.OnClick=FCKTools.CreateEventListener(FCKContextMenu_MenuBlock_OnClick,this);this._Redraw=true;};FCKContextMenu.prototype.SetMouseClickWindow=function(A){if (!FCKBrowserInfo.IsIE){this._Document=A.document;if (FCKBrowserInfo.IsOpera&&!('oncontextmenu' in document.createElement('foo'))){this._Document.addEventListener('mousedown',FCKContextMenu_Document_OnMouseDown,false);this._Document.addEventListener('mouseup',FCKContextMenu_Document_OnMouseUp,false);};this._Document.addEventListener('contextmenu',FCKContextMenu_Document_OnContextMenu,false);}};FCKContextMenu.prototype.AddItem=function(A,B,C,D){var E=this._MenuBlock.AddItem(A,B,C,D);this._Redraw=true;return E;};FCKContextMenu.prototype.AddSeparator=function(){this._MenuBlock.AddSeparator();this._Redraw=true;};FCKContextMenu.prototype.RemoveAllItems=function(){this._MenuBlock.RemoveAllItems();this._Redraw=true;};FCKContextMenu.prototype.AttachToElement=function(A){if (FCKBrowserInfo.IsIE) FCKTools.AddEventListenerEx(A,'contextmenu',FCKContextMenu_AttachedElement_OnContextMenu,this);else A._FCKContextMenu=this;};function FCKContextMenu_Document_OnContextMenu(e){var A=e.target;while (A){if (A._FCKContextMenu){if (A._FCKContextMenu.CtrlDisable&&(e.ctrlKey||e.metaKey)) return true;FCKTools.CancelEvent(e);FCKContextMenu_AttachedElement_OnContextMenu(e,A._FCKContextMenu,A);return false;};A=A.parentNode;};return true;};var FCKContextMenu_OverrideButton;function FCKContextMenu_Document_OnMouseDown(e){if(!e||e.button!=2) return false;var A=e.target;while (A){if (A._FCKContextMenu){if (A._FCKContextMenu.CtrlDisable&&(e.ctrlKey||e.metaKey)) return true;var B=FCKContextMenu_OverrideButton;if(!B){var C=e.target.ownerDocument;B=FCKContextMenu_OverrideButton=C.createElement('input');B.type='button';var D=C.createElement('p');C.body.appendChild(D);D.appendChild(B);};B.style.cssText='position:absolute;top:'+(e.clientY-2)+'px;left:'+(e.clientX-2)+'px;width:5px;height:5px;opacity:0.01';};A=A.parentNode;};return false;};function FCKContextMenu_Document_OnMouseUp(e){var A=FCKContextMenu_OverrideButton;if (A){var B=A.parentNode;B.parentNode.removeChild(B);FCKContextMenu_OverrideButton=undefined;if(e&&e.button==2){FCKContextMenu_Document_OnContextMenu(e);return false;}}};function FCKContextMenu_AttachedElement_OnContextMenu(A,B,C){if (B.CtrlDisable&&(A.ctrlKey||A.metaKey)) return true;var D=C||this;if (B.OnBeforeOpen) B.OnBeforeOpen.call(B,D);if (B._MenuBlock.Count()==0) return false;if (B._Redraw){B._MenuBlock.Create(B._Panel.MainNode);B._Redraw=false;};FCKTools.DisableSelection(B._Panel.Document.body);var x=0;var y=0;if (FCKBrowserInfo.IsIE){x=A.screenX;y=A.screenY;}else if (FCKBrowserInfo.IsSafari){x=A.clientX;y=A.clientY;}else{x=A.pageX;y=A.pageY;};B._Panel.Show(x,y,A.currentTarget||null);return false;};function FCKContextMenu_MenuBlock_OnClick(A,B){B._Panel.Hide();FCKTools.RunFunction(B.OnItemClick,B,A);};
+FCK.ContextMenu={};FCK.ContextMenu.Listeners=[];FCK.ContextMenu.RegisterListener=function(A){if (A) this.Listeners.push(A);};function FCK_ContextMenu_Init(){var A=FCK.ContextMenu._InnerContextMenu=new FCKContextMenu(FCKBrowserInfo.IsIE?window:window.parent,FCKLang.Dir);A.CtrlDisable=FCKConfig.BrowserContextMenuOnCtrl;A.OnBeforeOpen=FCK_ContextMenu_OnBeforeOpen;A.OnItemClick=FCK_ContextMenu_OnItemClick;var B=FCK.ContextMenu;for (var i=0;i<FCKConfig.ContextMenu.length;i++) B.RegisterListener(FCK_ContextMenu_GetListener(FCKConfig.ContextMenu[i]));};function FCK_ContextMenu_GetListener(A){switch (A){case 'Generic':return {AddItems:function(menu,tag,tagName){menu.AddItem('Cut',FCKLang.Cut,7,FCKCommands.GetCommand('Cut').GetState()==-1);menu.AddItem('Copy',FCKLang.Copy,8,FCKCommands.GetCommand('Copy').GetState()==-1);menu.AddItem('Paste',FCKLang.Paste,9,FCKCommands.GetCommand('Paste').GetState()==-1);}};case 'Table':return {AddItems:function(menu,tag,tagName){var B=(tagName=='TABLE');var C=(!B&&FCKSelection.HasAncestorNode('TABLE'));if (C){menu.AddSeparator();var D=menu.AddItem('Cell',FCKLang.CellCM);D.AddItem('TableInsertCellBefore',FCKLang.InsertCellBefore,69);D.AddItem('TableInsertCellAfter',FCKLang.InsertCellAfter,58);D.AddItem('TableDeleteCells',FCKLang.DeleteCells,59);if (FCKBrowserInfo.IsGecko) D.AddItem('TableMergeCells',FCKLang.MergeCells,60,FCKCommands.GetCommand('TableMergeCells').GetState()==-1);else{D.AddItem('TableMergeRight',FCKLang.MergeRight,60,FCKCommands.GetCommand('TableMergeRight').GetState()==-1);D.AddItem('TableMergeDown',FCKLang.MergeDown,60,FCKCommands.GetCommand('TableMergeDown').GetState()==-1);};D.AddItem('TableHorizontalSplitCell',FCKLang.HorizontalSplitCell,61,FCKCommands.GetCommand('TableHorizontalSplitCell').GetState()==-1);D.AddItem('TableVerticalSplitCell',FCKLang.VerticalSplitCell,61,FCKCommands.GetCommand('TableVerticalSplitCell').GetState()==-1);D.AddSeparator();D.AddItem('TableCellProp',FCKLang.CellProperties,57,FCKCommands.GetCommand('TableCellProp').GetState()==-1);menu.AddSeparator();D=menu.AddItem('Row',FCKLang.RowCM);D.AddItem('TableInsertRowBefore',FCKLang.InsertRowBefore,70);D.AddItem('TableInsertRowAfter',FCKLang.InsertRowAfter,62);D.AddItem('TableDeleteRows',FCKLang.DeleteRows,63);menu.AddSeparator();D=menu.AddItem('Column',FCKLang.ColumnCM);D.AddItem('TableInsertColumnBefore',FCKLang.InsertColumnBefore,71);D.AddItem('TableInsertColumnAfter',FCKLang.InsertColumnAfter,64);D.AddItem('TableDeleteColumns',FCKLang.DeleteColumns,65);};if (B||C){menu.AddSeparator();menu.AddItem('TableDelete',FCKLang.TableDelete);menu.AddItem('TableProp',FCKLang.TableProperties,39);}}};case 'Link':return {AddItems:function(menu,tag,tagName){var E=(tagName=='A'||FCKSelection.HasAncestorNode('A'));if (E||FCK.GetNamedCommandState('Unlink')!=-1){var F=FCKSelection.MoveToAncestorNode('A');var G=(F&&F.name.length>0&&F.href.length==0);if (G) return;menu.AddSeparator();if (E) menu.AddItem('Link',FCKLang.EditLink,34);menu.AddItem('Unlink',FCKLang.RemoveLink,35);}}};case 'Image':return {AddItems:function(menu,tag,tagName){if (tagName=='IMG'&&!tag.getAttribute('_fckfakelement')){menu.AddSeparator();menu.AddItem('Image',FCKLang.ImageProperties,37);}}};case 'Anchor':return {AddItems:function(menu,tag,tagName){var F=FCKSelection.MoveToAncestorNode('A');var G=(F&&F.name.length>0);if (G||(tagName=='IMG'&&tag.getAttribute('_fckanchor'))){menu.AddSeparator();menu.AddItem('Anchor',FCKLang.AnchorProp,36);menu.AddItem('AnchorDelete',FCKLang.AnchorDelete);}}};case 'Flash':return {AddItems:function(menu,tag,tagName){if (tagName=='IMG'&&tag.getAttribute('_fckflash')){menu.AddSeparator();menu.AddItem('Flash',FCKLang.FlashProperties,38);}}};case 'Form':return {AddItems:function(menu,tag,tagName){if (FCKSelection.HasAncestorNode('FORM')){menu.AddSeparator();menu.AddItem('Form',FCKLang.FormProp,48);}}};case 'Checkbox':return {AddItems:function(menu,tag,tagName){if (tagName=='INPUT'&&tag.type=='checkbox'){menu.AddSeparator();menu.AddItem('Checkbox',FCKLang.CheckboxProp,49);}}};case 'Radio':return {AddItems:function(menu,tag,tagName){if (tagName=='INPUT'&&tag.type=='radio'){menu.AddSeparator();menu.AddItem('Radio',FCKLang.RadioButtonProp,50);}}};case 'TextField':return {AddItems:function(menu,tag,tagName){if (tagName=='INPUT'&&(tag.type=='text'||tag.type=='password')){menu.AddSeparator();menu.AddItem('TextField',FCKLang.TextFieldProp,51);}}};case 'HiddenField':return {AddItems:function(menu,tag,tagName){if (tagName=='IMG'&&tag.getAttribute('_fckinputhidden')){menu.AddSeparator();menu.AddItem('HiddenField',FCKLang.HiddenFieldProp,56);}}};case 'ImageButton':return {AddItems:function(menu,tag,tagName){if (tagName=='INPUT'&&tag.type=='image'){menu.AddSeparator();menu.AddItem('ImageButton',FCKLang.ImageButtonProp,55);}}};case 'Button':return {AddItems:function(menu,tag,tagName){if (tagName=='INPUT'&&(tag.type=='button'||tag.type=='submit'||tag.type=='reset')){menu.AddSeparator();menu.AddItem('Button',FCKLang.ButtonProp,54);}}};case 'Select':return {AddItems:function(menu,tag,tagName){if (tagName=='SELECT'){menu.AddSeparator();menu.AddItem('Select',FCKLang.SelectionFieldProp,53);}}};case 'Textarea':return {AddItems:function(menu,tag,tagName){if (tagName=='TEXTAREA'){menu.AddSeparator();menu.AddItem('Textarea',FCKLang.TextareaProp,52);}}};case 'BulletedList':return {AddItems:function(menu,tag,tagName){if (FCKSelection.HasAncestorNode('UL')){menu.AddSeparator();menu.AddItem('BulletedList',FCKLang.BulletedListProp,27);}}};case 'NumberedList':return {AddItems:function(menu,tag,tagName){if (FCKSelection.HasAncestorNode('OL')){menu.AddSeparator();menu.AddItem('NumberedList',FCKLang.NumberedListProp,26);}}};};return null;};function FCK_ContextMenu_OnBeforeOpen(){FCK.Events.FireEvent('OnSelectionChange');var A,sTagName;if ((A=FCKSelection.GetSelectedElement())) sTagName=A.tagName;var B=FCK.ContextMenu._InnerContextMenu;B.RemoveAllItems();var C=FCK.ContextMenu.Listeners;for (var i=0;i<C.length;i++) C[i].AddItems(B,A,sTagName);};function FCK_ContextMenu_OnItemClick(A){FCK.Focus();FCKCommands.GetCommand(A.Name).Execute();};
+var FCKPlugin=function(A,B,C){this.Name=A;this.BasePath=C?C:FCKConfig.PluginsPath;this.Path=this.BasePath+A+'/';if (!B||B.length==0) this.AvailableLangs=[];else this.AvailableLangs=B.split(',');};FCKPlugin.prototype.Load=function(){if (this.AvailableLangs.length>0){var A;if (this.AvailableLangs.IndexOf(FCKLanguageManager.ActiveLanguage.Code)>=0) A=FCKLanguageManager.ActiveLanguage.Code;else A=this.AvailableLangs[0];LoadScript(this.Path+'lang/'+A+'.js');};LoadScript(this.Path+'fckplugin.js');}
+var FCKPlugins=FCK.Plugins={};FCKPlugins.ItemsCount=0;FCKPlugins.Items={};FCKPlugins.Load=function(){var A=FCKPlugins.Items;for (var i=0;i<FCKConfig.Plugins.Items.length;i++){var B=FCKConfig.Plugins.Items[i];var C=A[B[0]]=new FCKPlugin(B[0],B[1],B[2]);FCKPlugins.ItemsCount++;};for (var s in A) A[s].Load();FCKPlugins.Load=null;}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/_getfontformat.html
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/_getfontformat.html	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/_getfontformat.html	(revision 1280)
@@ -0,0 +1,85 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+-->
+<html>
+	<head>
+		<title></title>
+	</head>
+	<script language="javascript">
+
+window.onload = function()
+{
+	var oRange = document.selection.createRange() ;
+
+	var sNormal ;
+	var sFormats = '' ;
+	for ( var i = 1 ; i <= 9 ; i++ )
+	{
+		oRange.moveToElementText( document.getElementById( 'x' + i ) ) ;
+		sFormats += oRange.queryCommandValue( 'FormatBlock' ) ;
+		if ( i == 1 )
+			sNormal = sFormats ;
+		sFormats += ';' ;
+	}
+
+	document.getElementById('xFontFormats').innerHTML = sFormats + sNormal + ' (DIV)' ;
+}
+	</script>
+	<body>
+		<table width="70%" align="center">
+			<tr>
+				<td>
+					<h3>FontFormats Localization</h3>
+					<p>
+						IE has some limits when handling the "Font Format". It actually uses localized
+						strings to retrieve the current format value. This makes it very difficult to
+						make a system that works on every single computer in the world.
+					</p>
+					<p>
+						With FCKeditor, this problem impacts in the "Format" toolbar command that
+						doesn't reflects the format of the current cursor position.
+					</p>
+					<p>
+						There is only one way to make it work. We must localize FCKeditor using the
+						strings used by IE. In this way, we will have the expected behavior at least
+						when using FCKeditor in the same language as the browser. So, when localizing
+						FCKeditor, go to a computer with IE in the target language, open this page and
+						use the following string to the "FontFormats" value:
+					</p>
+					<div style="white-space: nowrap">
+						FontFormats : "<span id="xFontFormats" style="COLOR: #000099"></span>",
+					</div>
+				</td>
+			</tr>
+		</table>
+		<div style="DISPLAY: none">
+			<p id="x1">&nbsp;</p>
+			<pre id="x2">&nbsp;</pre>
+			<address id="x3">&nbsp;</address>
+			<h1 id="x4">&nbsp;</h1>
+			<h2 id="x5">&nbsp;</h2>
+			<h3 id="x6">&nbsp;</h3>
+			<h4 id="x7">&nbsp;</h4>
+			<h5 id="x8">&nbsp;</h5>
+			<h6 id="x9">&nbsp;</h6>
+		</div>
+	</body>
+</html>
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/_translationstatus.txt
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/_translationstatus.txt	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/_translationstatus.txt	(revision 1280)
@@ -0,0 +1,76 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Translations Status.
+ */
+
+af.js      Found: 397   Missing: 15
+ar.js      Found: 397   Missing: 15
+bg.js      Found: 374   Missing: 38
+bn.js      Found: 381   Missing: 31
+bs.js      Found: 226   Missing: 186
+ca.js      Found: 412   Missing: 0
+cs.js      Found: 397   Missing: 15
+da.js      Found: 382   Missing: 30
+de.js      Found: 412   Missing: 0
+el.js      Found: 397   Missing: 15
+en-au.js   Found: 412   Missing: 0
+en-ca.js   Found: 412   Missing: 0
+en-uk.js   Found: 412   Missing: 0
+eo.js      Found: 346   Missing: 66
+es.js      Found: 382   Missing: 30
+et.js      Found: 398   Missing: 14
+eu.js      Found: 382   Missing: 30
+fa.js      Found: 398   Missing: 14
+fi.js      Found: 412   Missing: 0
+fo.js      Found: 397   Missing: 15
+fr.js      Found: 412   Missing: 0
+gl.js      Found: 382   Missing: 30
+he.js      Found: 412   Missing: 0
+hi.js      Found: 412   Missing: 0
+hr.js      Found: 412   Missing: 0
+hu.js      Found: 412   Missing: 0
+it.js      Found: 397   Missing: 15
+ja.js      Found: 412   Missing: 0
+km.js      Found: 371   Missing: 41
+ko.js      Found: 369   Missing: 43
+lt.js      Found: 377   Missing: 35
+lv.js      Found: 382   Missing: 30
+mn.js      Found: 226   Missing: 186
+ms.js      Found: 352   Missing: 60
+nb.js      Found: 396   Missing: 16
+nl.js      Found: 412   Missing: 0
+no.js      Found: 396   Missing: 16
+pl.js      Found: 382   Missing: 30
+pt-br.js   Found: 397   Missing: 15
+pt.js      Found: 382   Missing: 30
+ro.js      Found: 411   Missing: 1
+ru.js      Found: 397   Missing: 15
+sk.js      Found: 397   Missing: 15
+sl.js      Found: 412   Missing: 0
+sr-latn.js Found: 369   Missing: 43
+sr.js      Found: 369   Missing: 43
+sv.js      Found: 397   Missing: 15
+th.js      Found: 394   Missing: 18
+tr.js      Found: 397   Missing: 15
+uk.js      Found: 398   Missing: 14
+vi.js      Found: 397   Missing: 15
+zh-cn.js   Found: 411   Missing: 1
+zh.js      Found: 412   Missing: 0
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/af.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/af.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/af.js	(revision 1280)
@@ -0,0 +1,516 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Afrikaans language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Vou Gereedskaps balk toe",
+ToolbarExpand		: "Vou Gereedskaps balk oop",
+
+// Toolbar Items and Context Menu
+Save				: "Bewaar",
+NewPage				: "Nuwe Bladsy",
+Preview				: "Voorskou",
+Cut					: "Uitsny ",
+Copy				: "Kopieer",
+Paste				: "Byvoeg",
+PasteText			: "Slegs inhoud byvoeg",
+PasteWord			: "Van Word af byvoeg",
+Print				: "Druk",
+SelectAll			: "Selekteer alles",
+RemoveFormat		: "Formaat verweider",
+InsertLinkLbl		: "Skakel",
+InsertLink			: "Skakel byvoeg/verander",
+RemoveLink			: "Skakel verweider",
+Anchor				: "Plekhouer byvoeg/verander",
+AnchorDelete		: "Remove Anchor",	//MISSING
+InsertImageLbl		: "Beeld",
+InsertImage			: "Beeld byvoeg/verander",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Flash byvoeg/verander",
+InsertTableLbl		: "Tabel",
+InsertTable			: "Tabel byvoeg/verander",
+InsertLineLbl		: "Lyn",
+InsertLine			: "Horisontale lyn byvoeg",
+InsertSpecialCharLbl: "Spesiaale karakter",
+InsertSpecialChar	: "Spesiaale Karakter byvoeg",
+InsertSmileyLbl		: "Smiley",
+InsertSmiley		: "Smiley byvoeg",
+About				: "Meer oor FCKeditor",
+Bold				: "Vet",
+Italic				: "Skuins",
+Underline			: "Onderstreep",
+StrikeThrough		: "Gestreik",
+Subscript			: "Subscript",
+Superscript			: "Superscript",
+LeftJustify			: "Links rig",
+CenterJustify		: "Rig Middel",
+RightJustify		: "Regs rig",
+BlockJustify		: "Blok paradeer",
+DecreaseIndent		: "Paradeering verkort",
+IncreaseIndent		: "Paradeering verleng",
+Blockquote			: "Blockquote",	//MISSING
+Undo				: "Ont-skep",
+Redo				: "Her-skep",
+NumberedListLbl		: "Genommerde lys",
+NumberedList		: "Genommerde lys byvoeg/verweider",
+BulletedListLbl		: "Gepunkte lys",
+BulletedList		: "Gepunkte lys byvoeg/verweider",
+ShowTableBorders	: "Wys tabel kante",
+ShowDetails			: "Wys informasie",
+Style				: "Styl",
+FontFormat			: "Karakter formaat",
+Font				: "Karakters",
+FontSize			: "Karakter grote",
+TextColor			: "Karakter kleur",
+BGColor				: "Agtergrond kleur",
+Source				: "Source",
+Find				: "Vind",
+Replace				: "Vervang",
+SpellCheck			: "Spelling nagaan",
+UniversalKeyboard	: "Universeele Sleutelbord",
+PageBreakLbl		: "Bladsy breek",
+PageBreak			: "Bladsy breek byvoeg",
+
+Form			: "Form",
+Checkbox		: "HakBox",
+RadioButton		: "PuntBox",
+TextField		: "Byvoegbare karakter strook",
+Textarea		: "Byvoegbare karakter area",
+HiddenField		: "Blinde strook",
+Button			: "Knop",
+SelectionField	: "Opklapbare keuse strook",
+ImageButton		: "Beeld knop",
+
+FitWindow		: "Maksimaliseer venster grote",
+ShowBlocks		: "Show Blocks",	//MISSING
+
+// Context Menu
+EditLink			: "Verander skakel",
+CellCM				: "Cell",
+RowCM				: "Ry",
+ColumnCM			: "Kolom",
+InsertRowAfter		: "Insert Row After",	//MISSING
+InsertRowBefore		: "Insert Row Before",	//MISSING
+DeleteRows			: "Ry verweider",
+InsertColumnAfter	: "Insert Column After",	//MISSING
+InsertColumnBefore	: "Insert Column Before",	//MISSING
+DeleteColumns		: "Kolom verweider",
+InsertCellAfter		: "Insert Cell After",	//MISSING
+InsertCellBefore	: "Insert Cell Before",	//MISSING
+DeleteCells			: "Cell verweider",
+MergeCells			: "Cell verenig",
+MergeRight			: "Merge Right",	//MISSING
+MergeDown			: "Merge Down",	//MISSING
+HorizontalSplitCell	: "Split Cell Horizontally",	//MISSING
+VerticalSplitCell	: "Split Cell Vertically",	//MISSING
+TableDelete			: "Tabel verweider",
+CellProperties		: "Cell eienskappe",
+TableProperties		: "Tabel eienskappe",
+ImageProperties		: "Beeld eienskappe",
+FlashProperties		: "Flash eienskappe",
+
+AnchorProp			: "Plekhouer eienskappe",
+ButtonProp			: "Knop eienskappe",
+CheckboxProp		: "HakBox eienskappe",
+HiddenFieldProp		: "Blinde strook eienskappe",
+RadioButtonProp		: "PuntBox eienskappe",
+ImageButtonProp		: "Beeld knop eienskappe",
+TextFieldProp		: "Karakter strook eienskappe",
+SelectionFieldProp	: "Opklapbare keuse strook eienskappe",
+TextareaProp		: "Karakter area eienskappe",
+FormProp			: "Form eienskappe",
+
+FontFormats			: "Normaal;Geformateerd;Adres;Opskrif 1;Opskrif 2;Opskrif 3;Opskrif 4;Opskrif 5;Opskrif 6;Normaal (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "XHTML word verarbeit. U geduld asseblief...",
+Done				: "Kompleet",
+PasteWordConfirm	: "Die informasie wat U probeer byvoeg is warskynlik van Word. Wil U dit reinig voor die byvoeging?",
+NotCompatiblePaste	: "Die instruksie is beskikbaar vir Internet Explorer weergawe 5.5 of hor. Wil U dir byvoeg sonder reiniging?",
+UnknownToolbarItem	: "Unbekende gereedskaps balk item \"%1\"",
+UnknownCommand		: "Unbekende instruksie naam \"%1\"",
+NotImplemented		: "Instruksie is nie geimplementeer nie.",
+UnknownToolbarSet	: "Gereedskaps balk \"%1\" bestaan nie",
+NoActiveX			: "U browser sekuriteit instellings kan die funksies van die editor behinder. U moet die opsie \"Run ActiveX controls and plug-ins\" aktiveer. U ondervinding mag problematies geskiet of sekere funksionaliteit mag verhinder word.",
+BrowseServerBlocked : "Die vorraad venster word geblok! Verseker asseblief dat U die \"popup blocker\" instelling verander.",
+DialogBlocked		: "Die dialoog venster vir verdere informasie word geblok. De-aktiveer asseblief die \"popup blocker\" instellings wat dit behinder.",
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Kanseleer",
+DlgBtnClose			: "Sluit",
+DlgBtnBrowseServer	: "Server deurblaai",
+DlgAdvancedTag		: "Ingewikkeld",
+DlgOpOther			: "<Ander>",
+DlgInfoTab			: "Info",
+DlgAlertUrl			: "Voeg asseblief die URL in",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<geen instelling>",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Taal rigting",
+DlgGenLangDirLtr	: "Links na regs (LTR)",
+DlgGenLangDirRtl	: "Regs na links (RTL)",
+DlgGenLangCode		: "Taal kode",
+DlgGenAccessKey		: "Toegang sleutel",
+DlgGenName			: "Naam",
+DlgGenTabIndex		: "Tab Index",
+DlgGenLongDescr		: "Lang beskreiwing URL",
+DlgGenClass			: "Skakel Tiepe",
+DlgGenTitle			: "Voorbeveelings Titel",
+DlgGenContType		: "Voorbeveelings inhoud soort",
+DlgGenLinkCharset	: "Geskakelde voorbeeld karakterstel",
+DlgGenStyle			: "Styl",
+
+// Image Dialog
+DlgImgTitle			: "Beeld eienskappe",
+DlgImgInfoTab		: "Beeld informasie",
+DlgImgBtnUpload		: "Stuur dit na die Server",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Uplaai",
+DlgImgAlt			: "Alternatiewe beskrywing",
+DlgImgWidth			: "Weidte",
+DlgImgHeight		: "Hoogde",
+DlgImgLockRatio		: "Behou preporsie",
+DlgBtnResetSize		: "Herstel groote",
+DlgImgBorder		: "Kant",
+DlgImgHSpace		: "HSpasie",
+DlgImgVSpace		: "VSpasie",
+DlgImgAlign			: "Paradeer",
+DlgImgAlignLeft		: "Links",
+DlgImgAlignAbsBottom: "Abs Onder",
+DlgImgAlignAbsMiddle: "Abs Middel",
+DlgImgAlignBaseline	: "Baseline",
+DlgImgAlignBottom	: "Onder",
+DlgImgAlignMiddle	: "Middel",
+DlgImgAlignRight	: "Regs",
+DlgImgAlignTextTop	: "Text Bo",
+DlgImgAlignTop		: "Bo",
+DlgImgPreview		: "Voorskou",
+DlgImgAlertUrl		: "Voeg asseblief Beeld URL in.",
+DlgImgLinkTab		: "Skakel",
+
+// Flash Dialog
+DlgFlashTitle		: "Flash eienskappe",
+DlgFlashChkPlay		: "Automaties Speel",
+DlgFlashChkLoop		: "Herhaling",
+DlgFlashChkMenu		: "Laat Flash Menu toe",
+DlgFlashScale		: "Scale",
+DlgFlashScaleAll	: "Wys alles",
+DlgFlashScaleNoBorder	: "Geen kante",
+DlgFlashScaleFit	: "Presiese pas",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Skakel",
+DlgLnkInfoTab		: "Skakel informasie",
+DlgLnkTargetTab		: "Mikpunt",
+
+DlgLnkType			: "Skakel soort",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Skakel na plekhouers in text",
+DlgLnkTypeEMail		: "E-Mail",
+DlgLnkProto			: "Protokol",
+DlgLnkProtoOther	: "<ander>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Kies 'n plekhouer",
+DlgLnkAnchorByName	: "Volgens plekhouer naam",
+DlgLnkAnchorById	: "Volgens element Id",
+DlgLnkNoAnchors		: "(Geen plekhouers beskikbaar in dokument}",
+DlgLnkEMail			: "E-Mail Adres",
+DlgLnkEMailSubject	: "Boodskap Opskrif",
+DlgLnkEMailBody		: "Boodskap Inhoud",
+DlgLnkUpload		: "Oplaai",
+DlgLnkBtnUpload		: "Stuur na Server",
+
+DlgLnkTarget		: "Mikpunt",
+DlgLnkTargetFrame	: "<raam>",
+DlgLnkTargetPopup	: "<popup venster>",
+DlgLnkTargetBlank	: "Nuwe Venster (_blank)",
+DlgLnkTargetParent	: "Vorige Venster (_parent)",
+DlgLnkTargetSelf	: "Selfde Venster (_self)",
+DlgLnkTargetTop		: "Boonste Venster (_top)",
+DlgLnkTargetFrameName	: "Mikpunt Venster Naam",
+DlgLnkPopWinName	: "Popup Venster Naam",
+DlgLnkPopWinFeat	: "Popup Venster Geaartheid",
+DlgLnkPopResize		: "Verstelbare Groote",
+DlgLnkPopLocation	: "Adres Balk",
+DlgLnkPopMenu		: "Menu Balk",
+DlgLnkPopScroll		: "Gleibalkstuk",
+DlgLnkPopStatus		: "Status Balk",
+DlgLnkPopToolbar	: "Gereedskap Balk",
+DlgLnkPopFullScrn	: "Voll Skerm (IE)",
+DlgLnkPopDependent	: "Afhanklik (Netscape)",
+DlgLnkPopWidth		: "Weite",
+DlgLnkPopHeight		: "Hoogde",
+DlgLnkPopLeft		: "Links Posisie",
+DlgLnkPopTop		: "Bo Posisie",
+
+DlnLnkMsgNoUrl		: "Voeg asseblief die URL in",
+DlnLnkMsgNoEMail	: "Voeg asseblief die e-mail adres in",
+DlnLnkMsgNoAnchor	: "Kies asseblief 'n plekhouer",
+DlnLnkMsgInvPopName	: "Die popup naam moet begin met alphabetiese karakters sonder spasies.",
+
+// Color Dialog
+DlgColorTitle		: "Kies Kleur",
+DlgColorBtnClear	: "Maak skoon",
+DlgColorHighlight	: "Highlight",
+DlgColorSelected	: "Geselekteer",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Voeg Smiley by",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Kies spesiale karakter",
+
+// Table Dialog
+DlgTableTitle		: "Tabel eienskappe",
+DlgTableRows		: "Reie",
+DlgTableColumns		: "Kolome",
+DlgTableBorder		: "Kant groote",
+DlgTableAlign		: "Parideering",
+DlgTableAlignNotSet	: "<geen instelling>",
+DlgTableAlignLeft	: "Links",
+DlgTableAlignCenter	: "Middel",
+DlgTableAlignRight	: "Regs",
+DlgTableWidth		: "Weite",
+DlgTableWidthPx		: "pixels",
+DlgTableWidthPc		: "percent",
+DlgTableHeight		: "Hoogde",
+DlgTableCellSpace	: "Cell spasieering",
+DlgTableCellPad		: "Cell buffer",
+DlgTableCaption		: "Beskreiwing",
+DlgTableSummary		: "Opsomming",
+
+// Table Cell Dialog
+DlgCellTitle		: "Cell eienskappe",
+DlgCellWidth		: "Weite",
+DlgCellWidthPx		: "pixels",
+DlgCellWidthPc		: "percent",
+DlgCellHeight		: "Hoogde",
+DlgCellWordWrap		: "Woord Wrap",
+DlgCellWordWrapNotSet	: "<geen instelling>",
+DlgCellWordWrapYes	: "Ja",
+DlgCellWordWrapNo	: "Nee",
+DlgCellHorAlign		: "Horisontale rigting",
+DlgCellHorAlignNotSet	: "<geen instelling>",
+DlgCellHorAlignLeft	: "Links",
+DlgCellHorAlignCenter	: "Middel",
+DlgCellHorAlignRight: "Regs",
+DlgCellVerAlign		: "Vertikale rigting",
+DlgCellVerAlignNotSet	: "<geen instelling>",
+DlgCellVerAlignTop	: "Bo",
+DlgCellVerAlignMiddle	: "Middel",
+DlgCellVerAlignBottom	: "Onder",
+DlgCellVerAlignBaseline	: "Baseline",
+DlgCellRowSpan		: "Rei strekking",
+DlgCellCollSpan		: "Kolom strekking",
+DlgCellBackColor	: "Agtergrond Kleur",
+DlgCellBorderColor	: "Kant Kleur",
+DlgCellBtnSelect	: "Keuse...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Find and Replace",	//MISSING
+
+// Find Dialog
+DlgFindTitle		: "Vind",
+DlgFindFindBtn		: "Vind",
+DlgFindNotFoundMsg	: "Die gespesifiseerde karakters word nie gevind nie.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Vervang",
+DlgReplaceFindLbl		: "Soek wat:",
+DlgReplaceReplaceLbl	: "Vervang met:",
+DlgReplaceCaseChk		: "Vergelyk karakter skryfweise",
+DlgReplaceReplaceBtn	: "Vervang",
+DlgReplaceReplAllBtn	: "Vervang alles",
+DlgReplaceWordChk		: "Vergelyk komplete woord",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "U browser se sekuriteit instelling behinder die uitsny aksie. Gebruik asseblief die sleutel kombenasie(Ctrl+X).",
+PasteErrorCopy	: "U browser se sekuriteit instelling behinder die kopieerings aksie. Gebruik asseblief die sleutel kombenasie(Ctrl+C).",
+
+PasteAsText		: "Voeg slegs karakters by",
+PasteFromWord	: "Byvoeging uit Word",
+
+DlgPasteMsg2	: "Voeg asseblief die inhoud in die gegewe box by met sleutel kombenasie(<STRONG>Ctrl+V</STRONG>) en druk <STRONG>OK</STRONG>.",
+DlgPasteSec		: "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.",	//MISSING
+DlgPasteIgnoreFont		: "Ignoreer karakter soort defenisies",
+DlgPasteRemoveStyles	: "Verweider Styl defenisies",
+DlgPasteCleanBox		: "Maak Box Skoon",
+
+// Color Picker
+ColorAutomatic	: "Automaties",
+ColorMoreColors	: "Meer Kleure...",
+
+// Document Properties
+DocProps		: "Dokument Eienskappe",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Plekhouer Eienskappe",
+DlgAnchorName		: "Plekhouer Naam",
+DlgAnchorErrorName	: "Voltooi die plekhouer naam asseblief",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Nie in woordeboek nie",
+DlgSpellChangeTo		: "Verander na",
+DlgSpellBtnIgnore		: "Ignoreer",
+DlgSpellBtnIgnoreAll	: "Ignoreer na-volgende",
+DlgSpellBtnReplace		: "Vervang",
+DlgSpellBtnReplaceAll	: "vervang na-volgende",
+DlgSpellBtnUndo			: "Ont-skep",
+DlgSpellNoSuggestions	: "- Geen voorstel -",
+DlgSpellProgress		: "Spelling word beproef...",
+DlgSpellNoMispell		: "Spellproef kompleet: Geen foute",
+DlgSpellNoChanges		: "Spellproef kompleet: Geen woord veranderings",
+DlgSpellOneChange		: "Spellproef kompleet: Een woord verander",
+DlgSpellManyChanges		: "Spellproef kompleet: %1 woorde verander",
+
+IeSpellDownload			: "Geen Spellproefer geinstaleer nie. Wil U dit aflaai?",
+
+// Button Dialog
+DlgButtonText		: "Karakters (Waarde)",
+DlgButtonType		: "Soort",
+DlgButtonTypeBtn	: "Knop",
+DlgButtonTypeSbm	: "Indien",
+DlgButtonTypeRst	: "Reset",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Naam",
+DlgCheckboxValue	: "Waarde",
+DlgCheckboxSelected	: "Uitgekies",
+
+// Form Dialog
+DlgFormName		: "Naam",
+DlgFormAction	: "Aksie",
+DlgFormMethod	: "Metode",
+
+// Select Field Dialog
+DlgSelectName		: "Naam",
+DlgSelectValue		: "Waarde",
+DlgSelectSize		: "Grote",
+DlgSelectLines		: "lyne",
+DlgSelectChkMulti	: "Laat meerere keuses toe",
+DlgSelectOpAvail	: "Beskikbare Opsies",
+DlgSelectOpText		: "Karakters",
+DlgSelectOpValue	: "Waarde",
+DlgSelectBtnAdd		: "Byvoeg",
+DlgSelectBtnModify	: "Verander",
+DlgSelectBtnUp		: "Op",
+DlgSelectBtnDown	: "Af",
+DlgSelectBtnSetValue : "Stel as uitgekiesde waarde",
+DlgSelectBtnDelete	: "Verweider",
+
+// Textarea Dialog
+DlgTextareaName	: "Naam",
+DlgTextareaCols	: "Kolom",
+DlgTextareaRows	: "Reie",
+
+// Text Field Dialog
+DlgTextName			: "Naam",
+DlgTextValue		: "Waarde",
+DlgTextCharWidth	: "Karakter weite",
+DlgTextMaxChars		: "Maximale karakters",
+DlgTextType			: "Soort",
+DlgTextTypeText		: "Karakters",
+DlgTextTypePass		: "Wagwoord",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Naam",
+DlgHiddenValue	: "Waarde",
+
+// Bulleted List Dialog
+BulletedListProp	: "Gepunkte lys eienskappe",
+NumberedListProp	: "Genommerde lys eienskappe",
+DlgLstStart			: "Begin",
+DlgLstType			: "Soort",
+DlgLstTypeCircle	: "Sirkel",
+DlgLstTypeDisc		: "Skyf",
+DlgLstTypeSquare	: "Vierkant",
+DlgLstTypeNumbers	: "Nommer (1, 2, 3)",
+DlgLstTypeLCase		: "Klein Letters (a, b, c)",
+DlgLstTypeUCase		: "Hoof Letters (A, B, C)",
+DlgLstTypeSRoman	: "Klein Romeinse nommers (i, ii, iii)",
+DlgLstTypeLRoman	: "Groot Romeinse nommers (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Algemeen",
+DlgDocBackTab		: "Agtergrond",
+DlgDocColorsTab		: "Kleure en Rante",
+DlgDocMetaTab		: "Meta Data",
+
+DlgDocPageTitle		: "Bladsy Opskrif",
+DlgDocLangDir		: "Taal rigting",
+DlgDocLangDirLTR	: "Link na Regs (LTR)",
+DlgDocLangDirRTL	: "Regs na Links (RTL)",
+DlgDocLangCode		: "Taal Kode",
+DlgDocCharSet		: "Karakterstel Kodeering",
+DlgDocCharSetCE		: "Sentraal Europa",
+DlgDocCharSetCT		: "Chinees Traditioneel (Big5)",
+DlgDocCharSetCR		: "Cyrillic",
+DlgDocCharSetGR		: "Grieks",
+DlgDocCharSetJP		: "Japanees",
+DlgDocCharSetKR		: "Koreans",
+DlgDocCharSetTR		: "Turks",
+DlgDocCharSetUN		: "Unicode (UTF-8)",
+DlgDocCharSetWE		: "Western European",
+DlgDocCharSetOther	: "Ander Karakterstel Kodeering",
+
+DlgDocDocType		: "Dokument Opskrif Soort",
+DlgDocDocTypeOther	: "Ander Dokument Opskrif Soort",
+DlgDocIncXHTML		: "Voeg XHTML verklaring by",
+DlgDocBgColor		: "Agtergrond kleur",
+DlgDocBgImage		: "Agtergrond Beeld URL",
+DlgDocBgNoScroll	: "Vasgeklemde Agtergrond",
+DlgDocCText			: "Karakters",
+DlgDocCLink			: "Skakel",
+DlgDocCVisited		: "Besoekte Skakel",
+DlgDocCActive		: "Aktiewe Skakel",
+DlgDocMargins		: "Bladsy Rante",
+DlgDocMaTop			: "Bo",
+DlgDocMaLeft		: "Links",
+DlgDocMaRight		: "Regs",
+DlgDocMaBottom		: "Onder",
+DlgDocMeIndex		: "Dokument Index Sleutelwoorde(comma verdeelt)",
+DlgDocMeDescr		: "Dokument Beskrywing",
+DlgDocMeAuthor		: "Skrywer",
+DlgDocMeCopy		: "Kopiereg",
+DlgDocPreview		: "Voorskou",
+
+// Templates Dialog
+Templates			: "Templates",
+DlgTemplatesTitle	: "Inhoud Templates",
+DlgTemplatesSelMsg	: "Kies die template om te gebruik in die editor<br>(Inhoud word vervang!):",
+DlgTemplatesLoading	: "Templates word gelaai. U geduld asseblief...",
+DlgTemplatesNoTpl	: "(Geen templates gedefinieerd)",
+DlgTemplatesReplace	: "Vervang bestaande inhoud",
+
+// About Dialog
+DlgAboutAboutTab	: "Meer oor",
+DlgAboutBrowserInfoTab	: "Blaai Informasie deur",
+DlgAboutLicenseTab	: "Lesensie",
+DlgAboutVersion		: "weergawe",
+DlgAboutInfo		: "Vir meer informasie gaan na "
+};
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/ar.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/ar.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/ar.js	(revision 1280)
@@ -0,0 +1,516 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Arabic language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "rtl",
+
+ToolbarCollapse		: "ضم شريط الأدوات",
+ToolbarExpand		: "تمدد شريط الأدوات",
+
+// Toolbar Items and Context Menu
+Save				: "حفظ",
+NewPage				: "صفحة جديدة",
+Preview				: "معاينة الصفحة",
+Cut					: "قص",
+Copy				: "نسخ",
+Paste				: "لصق",
+PasteText			: "لصق كنص بسيط",
+PasteWord			: "لصق من وورد",
+Print				: "طباعة",
+SelectAll			: "تحديد الكل",
+RemoveFormat		: "إزالة التنسيقات",
+InsertLinkLbl		: "رابط",
+InsertLink			: "إدراج/تحرير رابط",
+RemoveLink			: "إزالة رابط",
+Anchor				: "إدراج/تحرير إشارة مرجعية",
+AnchorDelete		: "Remove Anchor",	//MISSING
+InsertImageLbl		: "صورة",
+InsertImage			: "إدراج/تحرير صورة",
+InsertFlashLbl		: "فلاش",
+InsertFlash			: "إدراج/تحرير فيلم فلاش",
+InsertTableLbl		: "جدول",
+InsertTable			: "إدراج/تحرير جدول",
+InsertLineLbl		: "خط فاصل",
+InsertLine			: "إدراج خط فاصل",
+InsertSpecialCharLbl: "رموز",
+InsertSpecialChar	: "إدراج  رموز..ِ",
+InsertSmileyLbl		: "ابتسامات",
+InsertSmiley		: "إدراج ابتسامات",
+About				: "حول FCKeditor",
+Bold				: "غامق",
+Italic				: "مائل",
+Underline			: "تسطير",
+StrikeThrough		: "يتوسطه خط",
+Subscript			: "منخفض",
+Superscript			: "مرتفع",
+LeftJustify			: "محاذاة إلى اليسار",
+CenterJustify		: "توسيط",
+RightJustify		: "محاذاة إلى اليمين",
+BlockJustify		: "ضبط",
+DecreaseIndent		: "إنقاص المسافة البادئة",
+IncreaseIndent		: "زيادة المسافة البادئة",
+Blockquote			: "Blockquote",	//MISSING
+Undo				: "تراجع",
+Redo				: "إعادة",
+NumberedListLbl		: "تعداد رقمي",
+NumberedList		: "إدراج/إلغاء تعداد رقمي",
+BulletedListLbl		: "تعداد نقطي",
+BulletedList		: "إدراج/إلغاء تعداد نقطي",
+ShowTableBorders	: "معاينة حدود الجداول",
+ShowDetails			: "معاينة التفاصيل",
+Style				: "نمط",
+FontFormat			: "تنسيق",
+Font				: "خط",
+FontSize			: "حجم الخط",
+TextColor			: "لون النص",
+BGColor				: "لون الخلفية",
+Source				: "شفرة المصدر",
+Find				: "بحث",
+Replace				: "إستبدال",
+SpellCheck			: "تدقيق إملائي",
+UniversalKeyboard	: "لوحة المفاتيح العالمية",
+PageBreakLbl		: "فصل الصفحة",
+PageBreak			: "إدخال صفحة جديدة",
+
+Form			: "نموذج",
+Checkbox		: "خانة إختيار",
+RadioButton		: "زر خيار",
+TextField		: "مربع نص",
+Textarea		: "ناحية نص",
+HiddenField		: "إدراج حقل خفي",
+Button			: "زر ضغط",
+SelectionField	: "قائمة منسدلة",
+ImageButton		: "زر صورة",
+
+FitWindow		: "تكبير حجم المحرر",
+ShowBlocks		: "Show Blocks",	//MISSING
+
+// Context Menu
+EditLink			: "تحرير رابط",
+CellCM				: "خلية",
+RowCM				: "صف",
+ColumnCM			: "عمود",
+InsertRowAfter		: "Insert Row After",	//MISSING
+InsertRowBefore		: "Insert Row Before",	//MISSING
+DeleteRows			: "حذف صفوف",
+InsertColumnAfter	: "Insert Column After",	//MISSING
+InsertColumnBefore	: "Insert Column Before",	//MISSING
+DeleteColumns		: "حذف أعمدة",
+InsertCellAfter		: "Insert Cell After",	//MISSING
+InsertCellBefore	: "Insert Cell Before",	//MISSING
+DeleteCells			: "حذف خلايا",
+MergeCells			: "دمج خلايا",
+MergeRight			: "Merge Right",	//MISSING
+MergeDown			: "Merge Down",	//MISSING
+HorizontalSplitCell	: "Split Cell Horizontally",	//MISSING
+VerticalSplitCell	: "Split Cell Vertically",	//MISSING
+TableDelete			: "حذف الجدول",
+CellProperties		: "خصائص الخلية",
+TableProperties		: "خصائص الجدول",
+ImageProperties		: "خصائص الصورة",
+FlashProperties		: "خصائص فيلم الفلاش",
+
+AnchorProp			: "خصائص الإشارة المرجعية",
+ButtonProp			: "خصائص زر الضغط",
+CheckboxProp		: "خصائص خانة الإختيار",
+HiddenFieldProp		: "خصائص الحقل الخفي",
+RadioButtonProp		: "خصائص زر الخيار",
+ImageButtonProp		: "خصائص زر الصورة",
+TextFieldProp		: "خصائص مربع النص",
+SelectionFieldProp	: "خصائص القائمة المنسدلة",
+TextareaProp		: "خصائص ناحية النص",
+FormProp			: "خصائص النموذج",
+
+FontFormats			: "عادي;منسّق;دوس;العنوان 1;العنوان  2;العنوان  3;العنوان  4;العنوان  5;العنوان  6",
+
+// Alerts and Messages
+ProcessingXHTML		: "إنتظر قليلاً ريثما تتم   معالَجة‏ XHTML. لن يستغرق طويلاً...",
+Done				: "تم",
+PasteWordConfirm	: "يبدو أن النص المراد لصقه منسوخ من برنامج وورد. هل تود تنظيفه قبل الشروع في عملية اللصق؟",
+NotCompatiblePaste	: "هذه الميزة تحتاج لمتصفح من النوعInternet Explorer إصدار 5.5 فما فوق. هل تود اللصق دون تنظيف الكود؟",
+UnknownToolbarItem	: "عنصر شريط أدوات غير معروف \"%1\"",
+UnknownCommand		: "أمر غير معروف \"%1\"",
+NotImplemented		: "لم يتم دعم هذا الأمر",
+UnknownToolbarSet	: "لم أتمكن من العثور على طقم الأدوات \"%1\" ",
+NoActiveX			: "لتأمين متصفحك يجب أن تحدد بعض مميزات المحرر. يتوجب عليك تمكين الخيار \"Run ActiveX controls and plug-ins\". قد تواجة أخطاء وتلاحظ مميزات مفقودة",
+BrowseServerBlocked : "لايمكن فتح مصدر المتصفح. فضلا يجب التأكد بأن جميع موانع النوافذ المنبثقة معطلة",
+DialogBlocked		: "لايمكن فتح نافذة الحوار . فضلا تأكد من أن  مانع النوافذ المنبثة معطل .",
+
+// Dialogs
+DlgBtnOK			: "موافق",
+DlgBtnCancel		: "إلغاء الأمر",
+DlgBtnClose			: "إغلاق",
+DlgBtnBrowseServer	: "تصفح الخادم",
+DlgAdvancedTag		: "متقدم",
+DlgOpOther			: "<أخرى>",
+DlgInfoTab			: "معلومات",
+DlgAlertUrl			: "الرجاء كتابة عنوان الإنترنت",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<بدون تحديد>",
+DlgGenId			: "الرقم",
+DlgGenLangDir		: "إتجاه النص",
+DlgGenLangDirLtr	: "اليسار لليمين (LTR)",
+DlgGenLangDirRtl	: "اليمين لليسار (RTL)",
+DlgGenLangCode		: "رمز اللغة",
+DlgGenAccessKey		: "مفاتيح الإختصار",
+DlgGenName			: "الاسم",
+DlgGenTabIndex		: "الترتيب",
+DlgGenLongDescr		: "عنوان الوصف المفصّل",
+DlgGenClass			: "فئات التنسيق",
+DlgGenTitle			: "تلميح الشاشة",
+DlgGenContType		: "نوع التلميح",
+DlgGenLinkCharset	: "ترميز المادة المطلوبة",
+DlgGenStyle			: "نمط",
+
+// Image Dialog
+DlgImgTitle			: "خصائص الصورة",
+DlgImgInfoTab		: "معلومات الصورة",
+DlgImgBtnUpload		: "أرسلها للخادم",
+DlgImgURL			: "موقع الصورة",
+DlgImgUpload		: "رفع",
+DlgImgAlt			: "الوصف",
+DlgImgWidth			: "العرض",
+DlgImgHeight		: "الإرتفاع",
+DlgImgLockRatio		: "تناسق الحجم",
+DlgBtnResetSize		: "إستعادة الحجم الأصلي",
+DlgImgBorder		: "سمك الحدود",
+DlgImgHSpace		: "تباعد أفقي",
+DlgImgVSpace		: "تباعد عمودي",
+DlgImgAlign			: "محاذاة",
+DlgImgAlignLeft		: "يسار",
+DlgImgAlignAbsBottom: "أسفل النص",
+DlgImgAlignAbsMiddle: "وسط السطر",
+DlgImgAlignBaseline	: "على السطر",
+DlgImgAlignBottom	: "أسفل",
+DlgImgAlignMiddle	: "وسط",
+DlgImgAlignRight	: "يمين",
+DlgImgAlignTextTop	: "أعلى النص",
+DlgImgAlignTop		: "أعلى",
+DlgImgPreview		: "معاينة",
+DlgImgAlertUrl		: "فضلاً أكتب الموقع الذي توجد عليه هذه الصورة.",
+DlgImgLinkTab		: "الرابط",
+
+// Flash Dialog
+DlgFlashTitle		: "خصائص فيلم الفلاش",
+DlgFlashChkPlay		: "تشغيل تلقائي",
+DlgFlashChkLoop		: "تكرار",
+DlgFlashChkMenu		: "تمكين قائمة فيلم الفلاش",
+DlgFlashScale		: "الحجم",
+DlgFlashScaleAll	: "إظهار الكل",
+DlgFlashScaleNoBorder	: "بلا حدود",
+DlgFlashScaleFit	: "ضبط تام",
+
+// Link Dialog
+DlgLnkWindowTitle	: "إرتباط تشعبي",
+DlgLnkInfoTab		: "معلومات الرابط",
+DlgLnkTargetTab		: "الهدف",
+
+DlgLnkType			: "نوع الربط",
+DlgLnkTypeURL		: "العنوان",
+DlgLnkTypeAnchor	: "مكان في هذا المستند",
+DlgLnkTypeEMail		: "بريد إلكتروني",
+DlgLnkProto			: "البروتوكول",
+DlgLnkProtoOther	: "<أخرى>",
+DlgLnkURL			: "الموقع",
+DlgLnkAnchorSel		: "اختر علامة مرجعية",
+DlgLnkAnchorByName	: "حسب اسم العلامة",
+DlgLnkAnchorById	: "حسب تعريف العنصر",
+DlgLnkNoAnchors		: "(لا يوجد علامات مرجعية في هذا المستند)",
+DlgLnkEMail			: "عنوان بريد إلكتروني",
+DlgLnkEMailSubject	: "موضوع الرسالة",
+DlgLnkEMailBody		: "محتوى الرسالة",
+DlgLnkUpload		: "رفع",
+DlgLnkBtnUpload		: "أرسلها للخادم",
+
+DlgLnkTarget		: "الهدف",
+DlgLnkTargetFrame	: "<إطار>",
+DlgLnkTargetPopup	: "<نافذة منبثقة>",
+DlgLnkTargetBlank	: "إطار جديد (_blank)",
+DlgLnkTargetParent	: "الإطار الأصل (_parent)",
+DlgLnkTargetSelf	: "نفس الإطار (_self)",
+DlgLnkTargetTop		: "صفحة كاملة (_top)",
+DlgLnkTargetFrameName	: "اسم الإطار الهدف",
+DlgLnkPopWinName	: "تسمية النافذة المنبثقة",
+DlgLnkPopWinFeat	: "خصائص النافذة المنبثقة",
+DlgLnkPopResize		: "قابلة للتحجيم",
+DlgLnkPopLocation	: "شريط العنوان",
+DlgLnkPopMenu		: "القوائم الرئيسية",
+DlgLnkPopScroll		: "أشرطة التمرير",
+DlgLnkPopStatus		: "شريط الحالة السفلي",
+DlgLnkPopToolbar	: "شريط الأدوات",
+DlgLnkPopFullScrn	: "ملئ الشاشة (IE)",
+DlgLnkPopDependent	: "تابع (Netscape)",
+DlgLnkPopWidth		: "العرض",
+DlgLnkPopHeight		: "الإرتفاع",
+DlgLnkPopLeft		: "التمركز لليسار",
+DlgLnkPopTop		: "التمركز للأعلى",
+
+DlnLnkMsgNoUrl		: "فضلاً أدخل عنوان الموقع الذي يشير إليه الرابط",
+DlnLnkMsgNoEMail	: "فضلاً أدخل عنوان البريد الإلكتروني",
+DlnLnkMsgNoAnchor	: "فضلاً حدد العلامة المرجعية المرغوبة",
+DlnLnkMsgInvPopName	: "اسم النافذة المنبثقة يجب أن يبدأ بحرف أبجدي دون مسافات",
+
+// Color Dialog
+DlgColorTitle		: "اختر لوناً",
+DlgColorBtnClear	: "مسح",
+DlgColorHighlight	: "تحديد",
+DlgColorSelected	: "إختيار",
+
+// Smiley Dialog
+DlgSmileyTitle		: "إدراج إبتسامات ",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "إدراج رمز",
+
+// Table Dialog
+DlgTableTitle		: "إدراج جدول",
+DlgTableRows		: "صفوف",
+DlgTableColumns		: "أعمدة",
+DlgTableBorder		: "سمك الحدود",
+DlgTableAlign		: "المحاذاة",
+DlgTableAlignNotSet	: "<بدون تحديد>",
+DlgTableAlignLeft	: "يسار",
+DlgTableAlignCenter	: "وسط",
+DlgTableAlignRight	: "يمين",
+DlgTableWidth		: "العرض",
+DlgTableWidthPx		: "بكسل",
+DlgTableWidthPc		: "بالمئة",
+DlgTableHeight		: "الإرتفاع",
+DlgTableCellSpace	: "تباعد الخلايا",
+DlgTableCellPad		: "المسافة البادئة",
+DlgTableCaption		: "الوصف",
+DlgTableSummary		: "الخلاصة",
+
+// Table Cell Dialog
+DlgCellTitle		: "خصائص الخلية",
+DlgCellWidth		: "العرض",
+DlgCellWidthPx		: "بكسل",
+DlgCellWidthPc		: "بالمئة",
+DlgCellHeight		: "الإرتفاع",
+DlgCellWordWrap		: "التفاف النص",
+DlgCellWordWrapNotSet	: "<بدون تحديد>",
+DlgCellWordWrapYes	: "نعم",
+DlgCellWordWrapNo	: "لا",
+DlgCellHorAlign		: "المحاذاة الأفقية",
+DlgCellHorAlignNotSet	: "<بدون تحديد>",
+DlgCellHorAlignLeft	: "يسار",
+DlgCellHorAlignCenter	: "وسط",
+DlgCellHorAlignRight: "يمين",
+DlgCellVerAlign		: "المحاذاة العمودية",
+DlgCellVerAlignNotSet	: "<بدون تحديد>",
+DlgCellVerAlignTop	: "أعلى",
+DlgCellVerAlignMiddle	: "وسط",
+DlgCellVerAlignBottom	: "أسفل",
+DlgCellVerAlignBaseline	: "على السطر",
+DlgCellRowSpan		: "إمتداد الصفوف",
+DlgCellCollSpan		: "إمتداد الأعمدة",
+DlgCellBackColor	: "لون الخلفية",
+DlgCellBorderColor	: "لون الحدود",
+DlgCellBtnSelect	: "حدّد...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Find and Replace",	//MISSING
+
+// Find Dialog
+DlgFindTitle		: "بحث",
+DlgFindFindBtn		: "ابحث",
+DlgFindNotFoundMsg	: "لم يتم العثور على النص المحدد.",
+
+// Replace Dialog
+DlgReplaceTitle			: "إستبدال",
+DlgReplaceFindLbl		: "البحث عن:",
+DlgReplaceReplaceLbl	: "إستبدال بـ:",
+DlgReplaceCaseChk		: "مطابقة حالة الأحرف",
+DlgReplaceReplaceBtn	: "إستبدال",
+DlgReplaceReplAllBtn	: "إستبدال الكل",
+DlgReplaceWordChk		: "الكلمة بالكامل فقط",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "الإعدادات الأمنية للمتصفح الذي تستخدمه تمنع القص التلقائي. فضلاً إستخدم لوحة المفاتيح لفعل ذلك (Ctrl+X).",
+PasteErrorCopy	: "الإعدادات الأمنية للمتصفح الذي تستخدمه تمنع النسخ التلقائي. فضلاً إستخدم لوحة المفاتيح لفعل ذلك (Ctrl+C).",
+
+PasteAsText		: "لصق كنص بسيط",
+PasteFromWord	: "لصق من وورد",
+
+DlgPasteMsg2	: "الصق داخل الصندوق بإستخدام زرّي (<STRONG>Ctrl+V</STRONG>) في لوحة المفاتيح، ثم اضغط زر  <STRONG>موافق</STRONG>.",
+DlgPasteSec		: "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.",	//MISSING
+DlgPasteIgnoreFont		: "تجاهل تعريفات أسماء الخطوط",
+DlgPasteRemoveStyles	: "إزالة تعريفات الأنماط",
+DlgPasteCleanBox		: "نظّف محتوى الصندوق",
+
+// Color Picker
+ColorAutomatic	: "تلقائي",
+ColorMoreColors	: "ألوان إضافية...",
+
+// Document Properties
+DocProps		: "خصائص الصفحة",
+
+// Anchor Dialog
+DlgAnchorTitle		: "خصائص إشارة مرجعية",
+DlgAnchorName		: "اسم الإشارة المرجعية",
+DlgAnchorErrorName	: "الرجاء كتابة اسم الإشارة المرجعية",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "ليست في القاموس",
+DlgSpellChangeTo		: "التغيير إلى",
+DlgSpellBtnIgnore		: "تجاهل",
+DlgSpellBtnIgnoreAll	: "تجاهل الكل",
+DlgSpellBtnReplace		: "تغيير",
+DlgSpellBtnReplaceAll	: "تغيير الكل",
+DlgSpellBtnUndo			: "تراجع",
+DlgSpellNoSuggestions	: "- لا توجد إقتراحات -",
+DlgSpellProgress		: "جاري التدقيق إملائياً",
+DlgSpellNoMispell		: "تم إكمال التدقيق الإملائي: لم يتم العثور على أي أخطاء إملائية",
+DlgSpellNoChanges		: "تم إكمال التدقيق الإملائي: لم يتم تغيير أي كلمة",
+DlgSpellOneChange		: "تم إكمال التدقيق الإملائي: تم تغيير كلمة واحدة فقط",
+DlgSpellManyChanges		: "تم إكمال التدقيق الإملائي: تم تغيير %1 كلمات\كلمة",
+
+IeSpellDownload			: "المدقق الإملائي (الإنجليزي) غير مثبّت. هل تود تحميله الآن؟",
+
+// Button Dialog
+DlgButtonText		: "القيمة/التسمية",
+DlgButtonType		: "نوع الزر",
+DlgButtonTypeBtn	: "زر",
+DlgButtonTypeSbm	: "إرسال",
+DlgButtonTypeRst	: "إعادة تعيين",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "الاسم",
+DlgCheckboxValue	: "القيمة",
+DlgCheckboxSelected	: "محدد",
+
+// Form Dialog
+DlgFormName		: "الاسم",
+DlgFormAction	: "اسم الملف",
+DlgFormMethod	: "الأسلوب",
+
+// Select Field Dialog
+DlgSelectName		: "الاسم",
+DlgSelectValue		: "القيمة",
+DlgSelectSize		: "الحجم",
+DlgSelectLines		: "الأسطر",
+DlgSelectChkMulti	: "السماح بتحديدات متعددة",
+DlgSelectOpAvail	: "الخيارات المتاحة",
+DlgSelectOpText		: "النص",
+DlgSelectOpValue	: "القيمة",
+DlgSelectBtnAdd		: "إضافة",
+DlgSelectBtnModify	: "تعديل",
+DlgSelectBtnUp		: "تحريك لأعلى",
+DlgSelectBtnDown	: "تحريك لأسفل",
+DlgSelectBtnSetValue : "إجعلها محددة",
+DlgSelectBtnDelete	: "إزالة",
+
+// Textarea Dialog
+DlgTextareaName	: "الاسم",
+DlgTextareaCols	: "الأعمدة",
+DlgTextareaRows	: "الصفوف",
+
+// Text Field Dialog
+DlgTextName			: "الاسم",
+DlgTextValue		: "القيمة",
+DlgTextCharWidth	: "العرض بالأحرف",
+DlgTextMaxChars		: "عدد الحروف الأقصى",
+DlgTextType			: "نوع المحتوى",
+DlgTextTypeText		: "نص",
+DlgTextTypePass		: "كلمة مرور",
+
+// Hidden Field Dialog
+DlgHiddenName	: "الاسم",
+DlgHiddenValue	: "القيمة",
+
+// Bulleted List Dialog
+BulletedListProp	: "خصائص التعداد النقطي",
+NumberedListProp	: "خصائص التعداد الرقمي",
+DlgLstStart			: "البدء عند",
+DlgLstType			: "النوع",
+DlgLstTypeCircle	: "دائرة",
+DlgLstTypeDisc		: "قرص",
+DlgLstTypeSquare	: "مربع",
+DlgLstTypeNumbers	: "أرقام (1، 2، 3)َ",
+DlgLstTypeLCase		: "حروف صغيرة (a, b, c)َ",
+DlgLstTypeUCase		: "حروف كبيرة (A, B, C)َ",
+DlgLstTypeSRoman	: "ترقيم روماني صغير (i, ii, iii)َ",
+DlgLstTypeLRoman	: "ترقيم روماني كبير (I, II, III)َ",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "عام",
+DlgDocBackTab		: "الخلفية",
+DlgDocColorsTab		: "الألوان والهوامش",
+DlgDocMetaTab		: "المعرّفات الرأسية",
+
+DlgDocPageTitle		: "عنوان الصفحة",
+DlgDocLangDir		: "إتجاه اللغة",
+DlgDocLangDirLTR	: "اليسار لليمين (LTR)",
+DlgDocLangDirRTL	: "اليمين لليسار (RTL)",
+DlgDocLangCode		: "رمز اللغة",
+DlgDocCharSet		: "ترميز الحروف",
+DlgDocCharSetCE		: "أوروبا الوسطى",
+DlgDocCharSetCT		: "الصينية التقليدية (Big5)",
+DlgDocCharSetCR		: "السيريلية",
+DlgDocCharSetGR		: "اليونانية",
+DlgDocCharSetJP		: "اليابانية",
+DlgDocCharSetKR		: "الكورية",
+DlgDocCharSetTR		: "التركية",
+DlgDocCharSetUN		: "Unicode (UTF-8)",
+DlgDocCharSetWE		: "أوروبا الغربية",
+DlgDocCharSetOther	: "ترميز آخر",
+
+DlgDocDocType		: "ترويسة نوع  الصفحة",
+DlgDocDocTypeOther	: "ترويسة نوع  صفحة أخرى",
+DlgDocIncXHTML		: "تضمين   إعلانات‏ لغة XHTMLَ",
+DlgDocBgColor		: "لون الخلفية",
+DlgDocBgImage		: "رابط الصورة الخلفية",
+DlgDocBgNoScroll	: "جعلها علامة مائية",
+DlgDocCText			: "النص",
+DlgDocCLink			: "الروابط",
+DlgDocCVisited		: "المزارة",
+DlgDocCActive		: "النشطة",
+DlgDocMargins		: "هوامش الصفحة",
+DlgDocMaTop			: "علوي",
+DlgDocMaLeft		: "أيسر",
+DlgDocMaRight		: "أيمن",
+DlgDocMaBottom		: "سفلي",
+DlgDocMeIndex		: "الكلمات الأساسية (مفصولة بفواصل)َ",
+DlgDocMeDescr		: "وصف الصفحة",
+DlgDocMeAuthor		: "الكاتب",
+DlgDocMeCopy		: "المالك",
+DlgDocPreview		: "معاينة",
+
+// Templates Dialog
+Templates			: "القوالب",
+DlgTemplatesTitle	: "قوالب المحتوى",
+DlgTemplatesSelMsg	: "اختر القالب الذي تود وضعه في المحرر <br>(سيتم فقدان المحتوى الحالي):",
+DlgTemplatesLoading	: "جاري تحميل قائمة القوالب، الرجاء الإنتظار...",
+DlgTemplatesNoTpl	: "(لم يتم تعريف أي قالب)",
+DlgTemplatesReplace	: "استبدال المحتوى",
+
+// About Dialog
+DlgAboutAboutTab	: "نبذة",
+DlgAboutBrowserInfoTab	: "معلومات متصفحك",
+DlgAboutLicenseTab	: "الترخيص",
+DlgAboutVersion		: "الإصدار",
+DlgAboutInfo		: "لمزيد من المعلومات تفضل بزيارة"
+};
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/bg.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/bg.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/bg.js	(revision 1280)
@@ -0,0 +1,516 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Bulgarian language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Скрий панела с инструментите",
+ToolbarExpand		: "Покажи панела с инструментите",
+
+// Toolbar Items and Context Menu
+Save				: "Запази",
+NewPage				: "Нова страница",
+Preview				: "Предварителен изглед",
+Cut					: "Изрежи",
+Copy				: "Запамети",
+Paste				: "Вмъкни",
+PasteText			: "Вмъкни само текст",
+PasteWord			: "Вмъкни от MS Word",
+Print				: "Печат",
+SelectAll			: "Селектирай всичко",
+RemoveFormat		: "Изтрий форматирането",
+InsertLinkLbl		: "Връзка",
+InsertLink			: "Добави/Редактирай връзка",
+RemoveLink			: "Изтрий връзка",
+Anchor				: "Добави/Редактирай котва",
+AnchorDelete		: "Remove Anchor",	//MISSING
+InsertImageLbl		: "Изображение",
+InsertImage			: "Добави/Редактирай изображение",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Добави/Редактиай Flash обект",
+InsertTableLbl		: "Таблица",
+InsertTable			: "Добави/Редактирай таблица",
+InsertLineLbl		: "Линия",
+InsertLine			: "Вмъкни хоризонтална линия",
+InsertSpecialCharLbl: "Специален символ",
+InsertSpecialChar	: "Вмъкни специален символ",
+InsertSmileyLbl		: "Усмивка",
+InsertSmiley		: "Добави усмивка",
+About				: "За FCKeditor",
+Bold				: "Удебелен",
+Italic				: "Курсив",
+Underline			: "Подчертан",
+StrikeThrough		: "Зачертан",
+Subscript			: "Индекс за база",
+Superscript			: "Индекс за степен",
+LeftJustify			: "Подравняване в ляво",
+CenterJustify		: "Подравнявне в средата",
+RightJustify		: "Подравняване в дясно",
+BlockJustify		: "Двустранно подравняване",
+DecreaseIndent		: "Намали отстъпа",
+IncreaseIndent		: "Увеличи отстъпа",
+Blockquote			: "Blockquote",	//MISSING
+Undo				: "Отмени",
+Redo				: "Повтори",
+NumberedListLbl		: "Нумериран списък",
+NumberedList		: "Добави/Изтрий нумериран списък",
+BulletedListLbl		: "Ненумериран списък",
+BulletedList		: "Добави/Изтрий ненумериран списък",
+ShowTableBorders	: "Покажи рамките на таблицата",
+ShowDetails			: "Покажи подробности",
+Style				: "Стил",
+FontFormat			: "Формат",
+Font				: "Шрифт",
+FontSize			: "Размер",
+TextColor			: "Цвят на текста",
+BGColor				: "Цвят на фона",
+Source				: "Код",
+Find				: "Търси",
+Replace				: "Замести",
+SpellCheck			: "Провери правописа",
+UniversalKeyboard	: "Универсална клавиатура",
+PageBreakLbl		: "Нов ред",
+PageBreak			: "Вмъкни нов ред",
+
+Form			: "Формуляр",
+Checkbox		: "Поле за отметка",
+RadioButton		: "Поле за опция",
+TextField		: "Текстово поле",
+Textarea		: "Текстова област",
+HiddenField		: "Скрито поле",
+Button			: "Бутон",
+SelectionField	: "Падащо меню с опции",
+ImageButton		: "Бутон-изображение",
+
+FitWindow		: "Maximize the editor size",	//MISSING
+ShowBlocks		: "Show Blocks",	//MISSING
+
+// Context Menu
+EditLink			: "Редактирай връзка",
+CellCM				: "Cell",	//MISSING
+RowCM				: "Row",	//MISSING
+ColumnCM			: "Column",	//MISSING
+InsertRowAfter		: "Insert Row After",	//MISSING
+InsertRowBefore		: "Insert Row Before",	//MISSING
+DeleteRows			: "Изтрий редовете",
+InsertColumnAfter	: "Insert Column After",	//MISSING
+InsertColumnBefore	: "Insert Column Before",	//MISSING
+DeleteColumns		: "Изтрий колоните",
+InsertCellAfter		: "Insert Cell After",	//MISSING
+InsertCellBefore	: "Insert Cell Before",	//MISSING
+DeleteCells			: "Изтрий клетките",
+MergeCells			: "Обедини клетките",
+MergeRight			: "Merge Right",	//MISSING
+MergeDown			: "Merge Down",	//MISSING
+HorizontalSplitCell	: "Split Cell Horizontally",	//MISSING
+VerticalSplitCell	: "Split Cell Vertically",	//MISSING
+TableDelete			: "Изтрий таблицата",
+CellProperties		: "Параметри на клетката",
+TableProperties		: "Параметри на таблицата",
+ImageProperties		: "Параметри на изображението",
+FlashProperties		: "Параметри на Flash обекта",
+
+AnchorProp			: "Параметри на котвата",
+ButtonProp			: "Параметри на бутона",
+CheckboxProp		: "Параметри на полето за отметка",
+HiddenFieldProp		: "Параметри на скритото поле",
+RadioButtonProp		: "Параметри на полето за опция",
+ImageButtonProp		: "Параметри на бутона-изображение",
+TextFieldProp		: "Параметри на текстовото-поле",
+SelectionFieldProp	: "Параметри на падащото меню с опции",
+TextareaProp		: "Параметри на текстовата област",
+FormProp			: "Параметри на формуляра",
+
+FontFormats			: "Нормален;Форматиран;Адрес;Заглавие 1;Заглавие 2;Заглавие 3;Заглавие 4;Заглавие 5;Заглавие 6;Параграф (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "Обработка на XHTML. Моля изчакайте...",
+Done				: "Готово",
+PasteWordConfirm	: "Текстът, който искате да вмъкнете е копиран от MS Word. Желаете ли да бъде изчистен преди вмъкването?",
+NotCompatiblePaste	: "Тази операция изисква MS Internet Explorer версия 5.5 или по-висока. Желаете ли да вмъкнете запаметеното без изчистване?",
+UnknownToolbarItem	: "Непознат инструмент \"%1\"",
+UnknownCommand		: "Непозната команда \"%1\"",
+NotImplemented		: "Командата не е имплементирана",
+UnknownToolbarSet	: "Панелът \"%1\" не съществува",
+NoActiveX			: "Your browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.",	//MISSING
+BrowseServerBlocked : "The resources browser could not be opened. Make sure that all popup blockers are disabled.",	//MISSING
+DialogBlocked		: "It was not possible to open the dialog window. Make sure all popup blockers are disabled.",	//MISSING
+
+// Dialogs
+DlgBtnOK			: "ОК",
+DlgBtnCancel		: "Отказ",
+DlgBtnClose			: "Затвори",
+DlgBtnBrowseServer	: "Разгледай сървъра",
+DlgAdvancedTag		: "Подробности...",
+DlgOpOther			: "<Друго>",
+DlgInfoTab			: "Информация",
+DlgAlertUrl			: "Моля, въведете пълния път (URL)",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<не е настроен>",
+DlgGenId			: "Идентификатор",
+DlgGenLangDir		: "посока на речта",
+DlgGenLangDirLtr	: "От ляво на дясно",
+DlgGenLangDirRtl	: "От дясно на ляво",
+DlgGenLangCode		: "Код на езика",
+DlgGenAccessKey		: "Бърз клавиш",
+DlgGenName			: "Име",
+DlgGenTabIndex		: "Ред на достъп",
+DlgGenLongDescr		: "Описание на връзката",
+DlgGenClass			: "Клас от стиловите таблици",
+DlgGenTitle			: "Препоръчително заглавие",
+DlgGenContType		: "Препоръчителен тип на съдържанието",
+DlgGenLinkCharset	: "Тип на свързания ресурс",
+DlgGenStyle			: "Стил",
+
+// Image Dialog
+DlgImgTitle			: "Параметри на изображението",
+DlgImgInfoTab		: "Информация за изображението",
+DlgImgBtnUpload		: "Прати към сървъра",
+DlgImgURL			: "Пълен път (URL)",
+DlgImgUpload		: "Качи",
+DlgImgAlt			: "Алтернативен текст",
+DlgImgWidth			: "Ширина",
+DlgImgHeight		: "Височина",
+DlgImgLockRatio		: "Запази пропорцията",
+DlgBtnResetSize		: "Възстанови размера",
+DlgImgBorder		: "Рамка",
+DlgImgHSpace		: "Хоризонтален отстъп",
+DlgImgVSpace		: "Вертикален отстъп",
+DlgImgAlign			: "Подравняване",
+DlgImgAlignLeft		: "Ляво",
+DlgImgAlignAbsBottom: "Най-долу",
+DlgImgAlignAbsMiddle: "Точно по средата",
+DlgImgAlignBaseline	: "По базовата линия",
+DlgImgAlignBottom	: "Долу",
+DlgImgAlignMiddle	: "По средата",
+DlgImgAlignRight	: "Дясно",
+DlgImgAlignTextTop	: "Върху текста",
+DlgImgAlignTop		: "Отгоре",
+DlgImgPreview		: "Изглед",
+DlgImgAlertUrl		: "Моля, въведете пълния път до изображението",
+DlgImgLinkTab		: "Връзка",
+
+// Flash Dialog
+DlgFlashTitle		: "Параметри на Flash обекта",
+DlgFlashChkPlay		: "Автоматично стартиране",
+DlgFlashChkLoop		: "Ново стартиране след завършването",
+DlgFlashChkMenu		: "Разрешено Flash меню",
+DlgFlashScale		: "Оразмеряване",
+DlgFlashScaleAll	: "Покажи целия обект",
+DlgFlashScaleNoBorder	: "Без рамка",
+DlgFlashScaleFit	: "Според мястото",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Връзка",
+DlgLnkInfoTab		: "Информация за връзката",
+DlgLnkTargetTab		: "Цел",
+
+DlgLnkType			: "Вид на връзката",
+DlgLnkTypeURL		: "Пълен път (URL)",
+DlgLnkTypeAnchor	: "Котва в текущата страница",
+DlgLnkTypeEMail		: "Е-поща",
+DlgLnkProto			: "Протокол",
+DlgLnkProtoOther	: "<друго>",
+DlgLnkURL			: "Пълен път (URL)",
+DlgLnkAnchorSel		: "Изберете котва",
+DlgLnkAnchorByName	: "По име на котвата",
+DlgLnkAnchorById	: "По идентификатор на елемент",
+DlgLnkNoAnchors		: "(Няма котви в текущия документ)",
+DlgLnkEMail			: "Адрес за е-поща",
+DlgLnkEMailSubject	: "Тема на писмото",
+DlgLnkEMailBody		: "Текст на писмото",
+DlgLnkUpload		: "Качи",
+DlgLnkBtnUpload		: "Прати на сървъра",
+
+DlgLnkTarget		: "Цел",
+DlgLnkTargetFrame	: "<рамка>",
+DlgLnkTargetPopup	: "<дъщерен прозорец>",
+DlgLnkTargetBlank	: "Нов прозорец (_blank)",
+DlgLnkTargetParent	: "Родителски прозорец (_parent)",
+DlgLnkTargetSelf	: "Активния прозорец (_self)",
+DlgLnkTargetTop		: "Целия прозорец (_top)",
+DlgLnkTargetFrameName	: "Име на целевия прозорец",
+DlgLnkPopWinName	: "Име на дъщерния прозорец",
+DlgLnkPopWinFeat	: "Параметри на дъщерния прозорец",
+DlgLnkPopResize		: "С променливи размери",
+DlgLnkPopLocation	: "Поле за адрес",
+DlgLnkPopMenu		: "Меню",
+DlgLnkPopScroll		: "Плъзгач",
+DlgLnkPopStatus		: "Поле за статус",
+DlgLnkPopToolbar	: "Панел с бутони",
+DlgLnkPopFullScrn	: "Голям екран (MS IE)",
+DlgLnkPopDependent	: "Зависим (Netscape)",
+DlgLnkPopWidth		: "Ширина",
+DlgLnkPopHeight		: "Височина",
+DlgLnkPopLeft		: "Координати - X",
+DlgLnkPopTop		: "Координати - Y",
+
+DlnLnkMsgNoUrl		: "Моля, напишете пълния път (URL)",
+DlnLnkMsgNoEMail	: "Моля, напишете адреса за е-поща",
+DlnLnkMsgNoAnchor	: "Моля, изберете котва",
+DlnLnkMsgInvPopName	: "The popup name must begin with an alphabetic character and must not contain spaces",	//MISSING
+
+// Color Dialog
+DlgColorTitle		: "Изберете цвят",
+DlgColorBtnClear	: "Изчисти",
+DlgColorHighlight	: "Текущ",
+DlgColorSelected	: "Избран",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Добави усмивка",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Изберете специален символ",
+
+// Table Dialog
+DlgTableTitle		: "Параметри на таблицата",
+DlgTableRows		: "Редове",
+DlgTableColumns		: "Колони",
+DlgTableBorder		: "Размер на рамката",
+DlgTableAlign		: "Подравняване",
+DlgTableAlignNotSet	: "<Не е избрано>",
+DlgTableAlignLeft	: "Ляво",
+DlgTableAlignCenter	: "Център",
+DlgTableAlignRight	: "Дясно",
+DlgTableWidth		: "Ширина",
+DlgTableWidthPx		: "пиксели",
+DlgTableWidthPc		: "проценти",
+DlgTableHeight		: "Височина",
+DlgTableCellSpace	: "Разстояние между клетките",
+DlgTableCellPad		: "Отстъп на съдържанието в клетките",
+DlgTableCaption		: "Заглавие",
+DlgTableSummary		: "Резюме",
+
+// Table Cell Dialog
+DlgCellTitle		: "Параметри на клетката",
+DlgCellWidth		: "Ширина",
+DlgCellWidthPx		: "пиксели",
+DlgCellWidthPc		: "проценти",
+DlgCellHeight		: "Височина",
+DlgCellWordWrap		: "пренасяне на нов ред",
+DlgCellWordWrapNotSet	: "<Не е настроено>",
+DlgCellWordWrapYes	: "Да",
+DlgCellWordWrapNo	: "не",
+DlgCellHorAlign		: "Хоризонтално подравняване",
+DlgCellHorAlignNotSet	: "<Не е настроено>",
+DlgCellHorAlignLeft	: "Ляво",
+DlgCellHorAlignCenter	: "Център",
+DlgCellHorAlignRight: "Дясно",
+DlgCellVerAlign		: "Вертикално подравняване",
+DlgCellVerAlignNotSet	: "<Не е настроено>",
+DlgCellVerAlignTop	: "Горе",
+DlgCellVerAlignMiddle	: "По средата",
+DlgCellVerAlignBottom	: "Долу",
+DlgCellVerAlignBaseline	: "По базовата линия",
+DlgCellRowSpan		: "повече от един ред",
+DlgCellCollSpan		: "повече от една колона",
+DlgCellBackColor	: "фонов цвят",
+DlgCellBorderColor	: "цвят на рамката",
+DlgCellBtnSelect	: "Изберете...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Find and Replace",	//MISSING
+
+// Find Dialog
+DlgFindTitle		: "Търси",
+DlgFindFindBtn		: "Търси",
+DlgFindNotFoundMsg	: "Указания текст не беше намерен.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Замести",
+DlgReplaceFindLbl		: "Търси:",
+DlgReplaceReplaceLbl	: "Замести с:",
+DlgReplaceCaseChk		: "Със същия регистър",
+DlgReplaceReplaceBtn	: "Замести",
+DlgReplaceReplAllBtn	: "Замести всички",
+DlgReplaceWordChk		: "Търси същата дума",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "Настройките за сигурност на вашия бразуър не разрешават на редактора да изпълни изрязването. За целта използвайте клавиатурата (Ctrl+X).",
+PasteErrorCopy	: "Настройките за сигурност на вашия бразуър не разрешават на редактора да изпълни запаметяването. За целта използвайте клавиатурата (Ctrl+C).",
+
+PasteAsText		: "Вмъкни като чист текст",
+PasteFromWord	: "Вмъкни от MS Word",
+
+DlgPasteMsg2	: "Вмъкнете тук съдъжанието с клавиатуарата (<STRONG>Ctrl+V</STRONG>) и натиснете <STRONG>OK</STRONG>.",
+DlgPasteSec		: "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.",	//MISSING
+DlgPasteIgnoreFont		: "Игнорирай шрифтовите дефиниции",
+DlgPasteRemoveStyles	: "Изтрий стиловите дефиниции",
+DlgPasteCleanBox		: "Изчисти",
+
+// Color Picker
+ColorAutomatic	: "По подразбиране",
+ColorMoreColors	: "Други цветове...",
+
+// Document Properties
+DocProps		: "Параметри на документа",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Параметри на котвата",
+DlgAnchorName		: "Име на котвата",
+DlgAnchorErrorName	: "Моля, въведете име на котвата",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Липсва в речника",
+DlgSpellChangeTo		: "Промени на",
+DlgSpellBtnIgnore		: "Игнорирай",
+DlgSpellBtnIgnoreAll	: "Игнорирай всички",
+DlgSpellBtnReplace		: "Замести",
+DlgSpellBtnReplaceAll	: "Замести всички",
+DlgSpellBtnUndo			: "Отмени",
+DlgSpellNoSuggestions	: "- Няма предложения -",
+DlgSpellProgress		: "Извършване на проверката за правопис...",
+DlgSpellNoMispell		: "Проверката за правопис завършена: не са открити правописни грешки",
+DlgSpellNoChanges		: "Проверката за правопис завършена: няма променени думи",
+DlgSpellOneChange		: "Проверката за правопис завършена: една дума е променена",
+DlgSpellManyChanges		: "Проверката за правопис завършена: %1 думи са променени",
+
+IeSpellDownload			: "Инструментът за проверка на правопис не е инсталиран. Желаете ли да го инсталирате ?",
+
+// Button Dialog
+DlgButtonText		: "Текст (Стойност)",
+DlgButtonType		: "Тип",
+DlgButtonTypeBtn	: "Button",	//MISSING
+DlgButtonTypeSbm	: "Submit",	//MISSING
+DlgButtonTypeRst	: "Reset",	//MISSING
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Име",
+DlgCheckboxValue	: "Стойност",
+DlgCheckboxSelected	: "Отметнато",
+
+// Form Dialog
+DlgFormName		: "Име",
+DlgFormAction	: "Действие",
+DlgFormMethod	: "Метод",
+
+// Select Field Dialog
+DlgSelectName		: "Име",
+DlgSelectValue		: "Стойност",
+DlgSelectSize		: "Размер",
+DlgSelectLines		: "линии",
+DlgSelectChkMulti	: "Разрешено множествено селектиране",
+DlgSelectOpAvail	: "Възможни опции",
+DlgSelectOpText		: "Текст",
+DlgSelectOpValue	: "Стойност",
+DlgSelectBtnAdd		: "Добави",
+DlgSelectBtnModify	: "Промени",
+DlgSelectBtnUp		: "Нагоре",
+DlgSelectBtnDown	: "Надолу",
+DlgSelectBtnSetValue : "Настрой като избрана стойност",
+DlgSelectBtnDelete	: "Изтрий",
+
+// Textarea Dialog
+DlgTextareaName	: "Име",
+DlgTextareaCols	: "Колони",
+DlgTextareaRows	: "Редове",
+
+// Text Field Dialog
+DlgTextName			: "Име",
+DlgTextValue		: "Стойност",
+DlgTextCharWidth	: "Ширина на символите",
+DlgTextMaxChars		: "Максимум символи",
+DlgTextType			: "Тип",
+DlgTextTypeText		: "Текст",
+DlgTextTypePass		: "Парола",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Име",
+DlgHiddenValue	: "Стойност",
+
+// Bulleted List Dialog
+BulletedListProp	: "Параметри на ненумерирания списък",
+NumberedListProp	: "Параметри на нумерирания списък",
+DlgLstStart			: "Start",	//MISSING
+DlgLstType			: "Тип",
+DlgLstTypeCircle	: "Окръжност",
+DlgLstTypeDisc		: "Кръг",
+DlgLstTypeSquare	: "Квадрат",
+DlgLstTypeNumbers	: "Числа (1, 2, 3)",
+DlgLstTypeLCase		: "Малки букви (a, b, c)",
+DlgLstTypeUCase		: "Големи букви (A, B, C)",
+DlgLstTypeSRoman	: "Малки римски числа (i, ii, iii)",
+DlgLstTypeLRoman	: "Големи римски числа (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Общи",
+DlgDocBackTab		: "Фон",
+DlgDocColorsTab		: "Цветове и отстъпи",
+DlgDocMetaTab		: "Мета данни",
+
+DlgDocPageTitle		: "Заглавие на страницата",
+DlgDocLangDir		: "Посока на речта",
+DlgDocLangDirLTR	: "От ляво на дясно",
+DlgDocLangDirRTL	: "От дясно на ляво",
+DlgDocLangCode		: "Код на езика",
+DlgDocCharSet		: "Кодиране на символите",
+DlgDocCharSetCE		: "Central European",	//MISSING
+DlgDocCharSetCT		: "Chinese Traditional (Big5)",	//MISSING
+DlgDocCharSetCR		: "Cyrillic",	//MISSING
+DlgDocCharSetGR		: "Greek",	//MISSING
+DlgDocCharSetJP		: "Japanese",	//MISSING
+DlgDocCharSetKR		: "Korean",	//MISSING
+DlgDocCharSetTR		: "Turkish",	//MISSING
+DlgDocCharSetUN		: "Unicode (UTF-8)",	//MISSING
+DlgDocCharSetWE		: "Western European",	//MISSING
+DlgDocCharSetOther	: "Друго кодиране на символите",
+
+DlgDocDocType		: "Тип на документа",
+DlgDocDocTypeOther	: "Друг тип на документа",
+DlgDocIncXHTML		: "Включи XHTML декларация",
+DlgDocBgColor		: "Цвят на фона",
+DlgDocBgImage		: "Пълен път до фоновото изображение",
+DlgDocBgNoScroll	: "Не-повтарящо се фоново изображение",
+DlgDocCText			: "Текст",
+DlgDocCLink			: "Връзка",
+DlgDocCVisited		: "Посетена връзка",
+DlgDocCActive		: "Активна връзка",
+DlgDocMargins		: "Отстъпи на страницата",
+DlgDocMaTop			: "Горе",
+DlgDocMaLeft		: "Ляво",
+DlgDocMaRight		: "Дясно",
+DlgDocMaBottom		: "Долу",
+DlgDocMeIndex		: "Ключови думи за документа (разделени със запетаи)",
+DlgDocMeDescr		: "Описание на документа",
+DlgDocMeAuthor		: "Автор",
+DlgDocMeCopy		: "Авторски права",
+DlgDocPreview		: "Изглед",
+
+// Templates Dialog
+Templates			: "Шаблони",
+DlgTemplatesTitle	: "Шаблони",
+DlgTemplatesSelMsg	: "Изберете шаблон <br>(текущото съдържание на редактора ще бъде загубено):",
+DlgTemplatesLoading	: "Зареждане на списъка с шаблоните. Моля изчакайте...",
+DlgTemplatesNoTpl	: "(Няма дефинирани шаблони)",
+DlgTemplatesReplace	: "Replace actual contents",	//MISSING
+
+// About Dialog
+DlgAboutAboutTab	: "За",
+DlgAboutBrowserInfoTab	: "Информация за браузъра",
+DlgAboutLicenseTab	: "License",	//MISSING
+DlgAboutVersion		: "версия",
+DlgAboutInfo		: "За повече информация посетете"
+};
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/bn.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/bn.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/bn.js	(revision 1280)
@@ -0,0 +1,516 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Bengali/Bangla language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "টূলবার গুটিয়ে দাও",
+ToolbarExpand		: "টূলবার ছড়িয়ে দাও",
+
+// Toolbar Items and Context Menu
+Save				: "সংরক্ষন কর",
+NewPage				: "নতুন পেজ",
+Preview				: "প্রিভিউ",
+Cut					: "কাট",
+Copy				: "কপি",
+Paste				: "পেস্ট",
+PasteText			: "পেস্ট (সাদা টেক্সট)",
+PasteWord			: "পেস্ট (শব্দ)",
+Print				: "প্রিন্ট",
+SelectAll			: "সব সিলেক্ট কর",
+RemoveFormat		: "ফরমেট সরাও",
+InsertLinkLbl		: "লিংকের যুক্ত করার লেবেল",
+InsertLink			: "লিংক যুক্ত কর",
+RemoveLink			: "লিংক সরাও",
+Anchor				: "নোঙ্গর",
+AnchorDelete		: "Remove Anchor",	//MISSING
+InsertImageLbl		: "ছবির লেবেল যুক্ত কর",
+InsertImage			: "ছবি যুক্ত কর",
+InsertFlashLbl		: "ফ্লাশ লেবেল যুক্ত কর",
+InsertFlash			: "ফ্লাশ যুক্ত কর",
+InsertTableLbl		: "টেবিলের লেবেল যুক্ত কর",
+InsertTable			: "টেবিল যুক্ত কর",
+InsertLineLbl		: "রেখা যুক্ত কর",
+InsertLine			: "রেখা যুক্ত কর",
+InsertSpecialCharLbl: "বিশেষ অক্ষরের লেবেল যুক্ত কর",
+InsertSpecialChar	: "বিশেষ অক্ষর যুক্ত কর",
+InsertSmileyLbl		: "স্মাইলী",
+InsertSmiley		: "স্মাইলী যুক্ত কর",
+About				: "FCKeditor কে বানিয়েছে",
+Bold				: "বোল্ড",
+Italic				: "ইটালিক",
+Underline			: "আন্ডারলাইন",
+StrikeThrough		: "স্ট্রাইক থ্রু",
+Subscript			: "অধোলেখ",
+Superscript			: "অভিলেখ",
+LeftJustify			: "বা দিকে ঘেঁষা",
+CenterJustify		: "মাঝ বরাবর ঘেষা",
+RightJustify		: "ডান দিকে ঘেঁষা",
+BlockJustify		: "ব্লক জাস্টিফাই",
+DecreaseIndent		: "ইনডেন্ট কমাও",
+IncreaseIndent		: "ইনডেন্ট বাড়াও",
+Blockquote			: "Blockquote",	//MISSING
+Undo				: "আনডু",
+Redo				: "রি-ডু",
+NumberedListLbl		: "সাংখ্যিক লিস্টের লেবেল",
+NumberedList		: "সাংখ্যিক লিস্ট",
+BulletedListLbl		: "বুলেট লিস্ট লেবেল",
+BulletedList		: "বুলেটেড লিস্ট",
+ShowTableBorders	: "টেবিল বর্ডার",
+ShowDetails			: "সবটুকু দেখাও",
+Style				: "স্টাইল",
+FontFormat			: "ফন্ট ফরমেট",
+Font				: "ফন্ট",
+FontSize			: "সাইজ",
+TextColor			: "টেক্স্ট রং",
+BGColor				: "বেকগ্রাউন্ড রং",
+Source				: "সোর্স",
+Find				: "খোজো",
+Replace				: "রিপ্লেস",
+SpellCheck			: "বানান চেক",
+UniversalKeyboard	: "সার্বজনীন কিবোর্ড",
+PageBreakLbl		: "পেজ ব্রেক লেবেল",
+PageBreak			: "পেজ ব্রেক",
+
+Form			: "ফর্ম",
+Checkbox		: "চেক বাক্স",
+RadioButton		: "রেডিও বাটন",
+TextField		: "টেক্সট ফীল্ড",
+Textarea		: "টেক্সট এরিয়া",
+HiddenField		: "গুপ্ত ফীল্ড",
+Button			: "বাটন",
+SelectionField	: "বাছাই ফীল্ড",
+ImageButton		: "ছবির বাটন",
+
+FitWindow		: "উইন্ডো ফিট কর",
+ShowBlocks		: "Show Blocks",	//MISSING
+
+// Context Menu
+EditLink			: "লিংক সম্পাদন",
+CellCM				: "সেল",
+RowCM				: "রো",
+ColumnCM			: "কলাম",
+InsertRowAfter		: "Insert Row After",	//MISSING
+InsertRowBefore		: "Insert Row Before",	//MISSING
+DeleteRows			: "রো মুছে দাও",
+InsertColumnAfter	: "Insert Column After",	//MISSING
+InsertColumnBefore	: "Insert Column Before",	//MISSING
+DeleteColumns		: "কলাম মুছে দাও",
+InsertCellAfter		: "Insert Cell After",	//MISSING
+InsertCellBefore	: "Insert Cell Before",	//MISSING
+DeleteCells			: "সেল মুছে দাও",
+MergeCells			: "সেল জোড়া দাও",
+MergeRight			: "Merge Right",	//MISSING
+MergeDown			: "Merge Down",	//MISSING
+HorizontalSplitCell	: "Split Cell Horizontally",	//MISSING
+VerticalSplitCell	: "Split Cell Vertically",	//MISSING
+TableDelete			: "টেবিল ডিলীট কর",
+CellProperties		: "সেলের প্রোপার্টিজ",
+TableProperties		: "টেবিল প্রোপার্টি",
+ImageProperties		: "ছবি প্রোপার্টি",
+FlashProperties		: "ফ্লাশ প্রোপার্টি",
+
+AnchorProp			: "নোঙর প্রোপার্টি",
+ButtonProp			: "বাটন প্রোপার্টি",
+CheckboxProp		: "চেক বক্স প্রোপার্টি",
+HiddenFieldProp		: "গুপ্ত ফীল্ড প্রোপার্টি",
+RadioButtonProp		: "রেডিও বাটন প্রোপার্টি",
+ImageButtonProp		: "ছবি বাটন প্রোপার্টি",
+TextFieldProp		: "টেক্সট ফীল্ড প্রোপার্টি",
+SelectionFieldProp	: "বাছাই ফীল্ড প্রোপার্টি",
+TextareaProp		: "টেক্সট এরিয়া প্রোপার্টি",
+FormProp			: "ফর্ম প্রোপার্টি",
+
+FontFormats			: "সাধারণ;ফর্মেটেড;ঠিকানা;শীর্ষক ১;শীর্ষক ২;শীর্ষক ৩;শীর্ষক ৪;শীর্ষক ৫;শীর্ষক ৬;শীর্ষক (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "XHTML প্রসেস করা হচ্ছে",
+Done				: "শেষ হয়েছে",
+PasteWordConfirm	: "যে টেকস্টটি আপনি পেস্ট করতে চাচ্ছেন মনে হচ্ছে সেটি ওয়ার্ড থেকে কপি করা। আপনি কি পেস্ট করার আগে একে পরিষ্কার করতে চান?",
+NotCompatiblePaste	: "এই কমান্ডটি শুধুমাত্র ইন্টারনেট এক্সপ্লোরার ৫.০ বা তার পরের ভার্সনে পাওয়া সম্ভব। আপনি কি পরিষ্কার না করেই পেস্ট করতে চান?",
+UnknownToolbarItem	: "অজানা টুলবার আইটেম \"%1\"",
+UnknownCommand		: "অজানা কমান্ড \"%1\"",
+NotImplemented		: "কমান্ড ইমপ্লিমেন্ট করা হয়নি",
+UnknownToolbarSet	: "টুলবার সেট \"%1\" এর অস্তিত্ব নেই",
+NoActiveX			: "আপনার ব্রাউজারের সুরক্ষা সেটিংস কারনে এডিটরের কিছু ফিচার পাওয়া নাও যেতে পারে। আপনাকে অবশ্যই \"Run ActiveX controls and plug-ins\" এনাবেল করে নিতে হবে। আপনি ভুলভ্রান্তি কিছু কিছু ফিচারের অনুপস্থিতি উপলব্ধি করতে পারেন।",
+BrowseServerBlocked : "রিসোর্স ব্রাউজার খোলা গেল না। নিশ্চিত করুন যে সব পপআপ ব্লকার বন্ধ করা আছে।",
+DialogBlocked		: "ডায়ালগ ইউন্ডো খোলা গেল না। নিশ্চিত করুন যে সব পপআপ ব্লকার বন্ধ করা আছে।",
+
+// Dialogs
+DlgBtnOK			: "ওকে",
+DlgBtnCancel		: "বাতিল",
+DlgBtnClose			: "বন্ধ কর",
+DlgBtnBrowseServer	: "ব্রাউজ সার্ভার",
+DlgAdvancedTag		: "এডভান্সড",
+DlgOpOther			: "<অন্য>",
+DlgInfoTab			: "তথ্য",
+DlgAlertUrl			: "দয়া করে URL যুক্ত করুন",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<সেট নেই>",
+DlgGenId			: "আইডি",
+DlgGenLangDir		: "ভাষা লেখার দিক",
+DlgGenLangDirLtr	: "বাম থেকে ডান (LTR)",
+DlgGenLangDirRtl	: "ডান থেকে বাম (RTL)",
+DlgGenLangCode		: "ভাষা কোড",
+DlgGenAccessKey		: "এক্সেস কী",
+DlgGenName			: "নাম",
+DlgGenTabIndex		: "ট্যাব ইন্ডেক্স",
+DlgGenLongDescr		: "URL এর লম্বা বর্ণনা",
+DlgGenClass			: "স্টাইল-শীট ক্লাস",
+DlgGenTitle			: "পরামর্শ শীর্ষক",
+DlgGenContType		: "পরামর্শ কন্টেন্টের প্রকার",
+DlgGenLinkCharset	: "লিংক রিসোর্স ক্যারেক্টর সেট",
+DlgGenStyle			: "স্টাইল",
+
+// Image Dialog
+DlgImgTitle			: "ছবির প্রোপার্টি",
+DlgImgInfoTab		: "ছবির তথ্য",
+DlgImgBtnUpload		: "ইহাকে সার্ভারে প্রেরন কর",
+DlgImgURL			: "URL",
+DlgImgUpload		: "আপলোড",
+DlgImgAlt			: "বিকল্প টেক্সট",
+DlgImgWidth			: "প্রস্থ",
+DlgImgHeight		: "দৈর্ঘ্য",
+DlgImgLockRatio		: "অনুপাত লক কর",
+DlgBtnResetSize		: "সাইজ পূর্বাবস্থায় ফিরিয়ে দাও",
+DlgImgBorder		: "বর্ডার",
+DlgImgHSpace		: "হরাইজন্টাল স্পেস",
+DlgImgVSpace		: "ভার্টিকেল স্পেস",
+DlgImgAlign			: "এলাইন",
+DlgImgAlignLeft		: "বামে",
+DlgImgAlignAbsBottom: "Abs নীচে",
+DlgImgAlignAbsMiddle: "Abs উপর",
+DlgImgAlignBaseline	: "মূল রেখা",
+DlgImgAlignBottom	: "নীচে",
+DlgImgAlignMiddle	: "মধ্য",
+DlgImgAlignRight	: "ডানে",
+DlgImgAlignTextTop	: "টেক্সট উপর",
+DlgImgAlignTop		: "উপর",
+DlgImgPreview		: "প্রীভিউ",
+DlgImgAlertUrl		: "অনুগ্রহক করে ছবির URL টাইপ করুন",
+DlgImgLinkTab		: "লিংক",
+
+// Flash Dialog
+DlgFlashTitle		: "ফ্ল্যাশ প্রোপার্টি",
+DlgFlashChkPlay		: "অটো প্লে",
+DlgFlashChkLoop		: "লূপ",
+DlgFlashChkMenu		: "ফ্ল্যাশ মেনু এনাবল কর",
+DlgFlashScale		: "স্কেল",
+DlgFlashScaleAll	: "সব দেখাও",
+DlgFlashScaleNoBorder	: "কোনো বর্ডার নেই",
+DlgFlashScaleFit	: "নিখুঁত ফিট",
+
+// Link Dialog
+DlgLnkWindowTitle	: "লিংক",
+DlgLnkInfoTab		: "লিংক তথ্য",
+DlgLnkTargetTab		: "টার্গেট",
+
+DlgLnkType			: "লিংক প্রকার",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "এই পেজে নোঙর কর",
+DlgLnkTypeEMail		: "ইমেইল",
+DlgLnkProto			: "প্রোটোকল",
+DlgLnkProtoOther	: "<অন্য>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "নোঙর বাছাই",
+DlgLnkAnchorByName	: "নোঙরের নাম দিয়ে",
+DlgLnkAnchorById	: "নোঙরের আইডি দিয়ে",
+DlgLnkNoAnchors		: "(No anchors available in the document)",	//MISSING
+DlgLnkEMail			: "ইমেইল ঠিকানা",
+DlgLnkEMailSubject	: "মেসেজের বিষয়",
+DlgLnkEMailBody		: "মেসেজের দেহ",
+DlgLnkUpload		: "আপলোড",
+DlgLnkBtnUpload		: "একে সার্ভারে পাঠাও",
+
+DlgLnkTarget		: "টার্গেট",
+DlgLnkTargetFrame	: "<ফ্রেম>",
+DlgLnkTargetPopup	: "<পপআপ উইন্ডো>",
+DlgLnkTargetBlank	: "নতুন উইন্ডো (_blank)",
+DlgLnkTargetParent	: "মূল উইন্ডো (_parent)",
+DlgLnkTargetSelf	: "এই উইন্ডো (_self)",
+DlgLnkTargetTop		: "শীর্ষ উইন্ডো (_top)",
+DlgLnkTargetFrameName	: "টার্গেট ফ্রেমের নাম",
+DlgLnkPopWinName	: "পপআপ উইন্ডোর নাম",
+DlgLnkPopWinFeat	: "পপআপ উইন্ডো ফীচার সমূহ",
+DlgLnkPopResize		: "রিসাইজ করা সম্ভব",
+DlgLnkPopLocation	: "লোকেশন বার",
+DlgLnkPopMenu		: "মেন্যু বার",
+DlgLnkPopScroll		: "স্ক্রল বার",
+DlgLnkPopStatus		: "স্ট্যাটাস বার",
+DlgLnkPopToolbar	: "টুল বার",
+DlgLnkPopFullScrn	: "পূর্ণ পর্দা জুড়ে (IE)",
+DlgLnkPopDependent	: "ডিপেন্ডেন্ট (Netscape)",
+DlgLnkPopWidth		: "প্রস্থ",
+DlgLnkPopHeight		: "দৈর্ঘ্য",
+DlgLnkPopLeft		: "বামের পজিশন",
+DlgLnkPopTop		: "ডানের পজিশন",
+
+DlnLnkMsgNoUrl		: "অনুগ্রহ করে URL লিংক টাইপ করুন",
+DlnLnkMsgNoEMail	: "অনুগ্রহ করে ইমেইল এড্রেস টাইপ করুন",
+DlnLnkMsgNoAnchor	: "অনুগ্রহ করে নোঙর বাছাই করুন",
+DlnLnkMsgInvPopName	: "The popup name must begin with an alphabetic character and must not contain spaces",	//MISSING
+
+// Color Dialog
+DlgColorTitle		: "রং বাছাই কর",
+DlgColorBtnClear	: "পরিষ্কার কর",
+DlgColorHighlight	: "হাইলাইট",
+DlgColorSelected	: "সিলেক্টেড",
+
+// Smiley Dialog
+DlgSmileyTitle		: "স্মাইলী যুক্ত কর",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "বিশেষ ক্যারেক্টার বাছাই কর",
+
+// Table Dialog
+DlgTableTitle		: "টেবিল প্রোপার্টি",
+DlgTableRows		: "রো",
+DlgTableColumns		: "কলাম",
+DlgTableBorder		: "বর্ডার সাইজ",
+DlgTableAlign		: "এলাইনমেন্ট",
+DlgTableAlignNotSet	: "<সেট নেই>",
+DlgTableAlignLeft	: "বামে",
+DlgTableAlignCenter	: "মাঝখানে",
+DlgTableAlignRight	: "ডানে",
+DlgTableWidth		: "প্রস্থ",
+DlgTableWidthPx		: "পিক্সেল",
+DlgTableWidthPc		: "শতকরা",
+DlgTableHeight		: "দৈর্ঘ্য",
+DlgTableCellSpace	: "সেল স্পেস",
+DlgTableCellPad		: "সেল প্যাডিং",
+DlgTableCaption		: "শীর্ষক",
+DlgTableSummary		: "সারাংশ",
+
+// Table Cell Dialog
+DlgCellTitle		: "সেল প্রোপার্টি",
+DlgCellWidth		: "প্রস্থ",
+DlgCellWidthPx		: "পিক্সেল",
+DlgCellWidthPc		: "শতকরা",
+DlgCellHeight		: "দৈর্ঘ্য",
+DlgCellWordWrap		: "ওয়ার্ড রেপ",
+DlgCellWordWrapNotSet	: "<সেট নেই>",
+DlgCellWordWrapYes	: "হাঁ",
+DlgCellWordWrapNo	: "না",
+DlgCellHorAlign		: "হরাইজন্টাল এলাইনমেন্ট",
+DlgCellHorAlignNotSet	: "<সেট নেই>",
+DlgCellHorAlignLeft	: "বামে",
+DlgCellHorAlignCenter	: "মাঝখানে",
+DlgCellHorAlignRight: "ডানে",
+DlgCellVerAlign		: "ভার্টিক্যাল এলাইনমেন্ট",
+DlgCellVerAlignNotSet	: "<সেট নেই>",
+DlgCellVerAlignTop	: "উপর",
+DlgCellVerAlignMiddle	: "মধ্য",
+DlgCellVerAlignBottom	: "নীচে",
+DlgCellVerAlignBaseline	: "মূলরেখা",
+DlgCellRowSpan		: "রো স্প্যান",
+DlgCellCollSpan		: "কলাম স্প্যান",
+DlgCellBackColor	: "ব্যাকগ্রাউন্ড রং",
+DlgCellBorderColor	: "বর্ডারের রং",
+DlgCellBtnSelect	: "বাছাই কর",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Find and Replace",	//MISSING
+
+// Find Dialog
+DlgFindTitle		: "খোঁজো",
+DlgFindFindBtn		: "খোঁজো",
+DlgFindNotFoundMsg	: "আপনার উল্লেখিত টেকস্ট পাওয়া যায়নি",
+
+// Replace Dialog
+DlgReplaceTitle			: "বদলে দাও",
+DlgReplaceFindLbl		: "যা খুঁজতে হবে:",
+DlgReplaceReplaceLbl	: "যার সাথে বদলাতে হবে:",
+DlgReplaceCaseChk		: "কেস মিলাও",
+DlgReplaceReplaceBtn	: "বদলে দাও",
+DlgReplaceReplAllBtn	: "সব বদলে দাও",
+DlgReplaceWordChk		: "পুরা শব্দ মেলাও",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "আপনার ব্রাউজারের সুরক্ষা সেটিংস এডিটরকে অটোমেটিক কাট করার অনুমতি দেয়নি। দয়া করে এই কাজের জন্য কিবোর্ড ব্যবহার করুন (Ctrl+X)।",
+PasteErrorCopy	: "আপনার ব্রাউজারের সুরক্ষা সেটিংস এডিটরকে অটোমেটিক কপি করার অনুমতি দেয়নি। দয়া করে এই কাজের জন্য কিবোর্ড ব্যবহার করুন (Ctrl+C)।",
+
+PasteAsText		: "সাদা টেক্সট হিসেবে পেস্ট কর",
+PasteFromWord	: "ওয়ার্ড থেকে পেস্ট কর",
+
+DlgPasteMsg2	: "অনুগ্রহ করে নীচের বাক্সে কিবোর্ড ব্যবহার করে (<STRONG>Ctrl+V</STRONG>) পেস্ট করুন এবং <STRONG>OK</STRONG> চাপ দিন",
+DlgPasteSec		: "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.",	//MISSING
+DlgPasteIgnoreFont		: "ফন্ট ফেস ডেফিনেশন ইগনোর করুন",
+DlgPasteRemoveStyles	: "স্টাইল ডেফিনেশন সরিয়ে দিন",
+DlgPasteCleanBox		: "বাক্স পরিষ্কার করুন",
+
+// Color Picker
+ColorAutomatic	: "অটোমেটিক",
+ColorMoreColors	: "আরও রং...",
+
+// Document Properties
+DocProps		: "ডক্যুমেন্ট প্রোপার্টি",
+
+// Anchor Dialog
+DlgAnchorTitle		: "নোঙরের প্রোপার্টি",
+DlgAnchorName		: "নোঙরের নাম",
+DlgAnchorErrorName	: "নোঙরের নাম টাইপ করুন",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "শব্দকোষে নেই",
+DlgSpellChangeTo		: "এতে বদলাও",
+DlgSpellBtnIgnore		: "ইগনোর কর",
+DlgSpellBtnIgnoreAll	: "সব ইগনোর কর",
+DlgSpellBtnReplace		: "বদলে দাও",
+DlgSpellBtnReplaceAll	: "সব বদলে দাও",
+DlgSpellBtnUndo			: "আন্ডু",
+DlgSpellNoSuggestions	: "- কোন সাজেশন নেই -",
+DlgSpellProgress		: "বানান পরীক্ষা চলছে...",
+DlgSpellNoMispell		: "বানান পরীক্ষা শেষ: কোন ভুল বানান পাওয়া যায়নি",
+DlgSpellNoChanges		: "বানান পরীক্ষা শেষ: কোন শব্দ পরিবর্তন করা হয়নি",
+DlgSpellOneChange		: "বানান পরীক্ষা শেষ: একটি মাত্র শব্দ পরিবর্তন করা হয়েছে",
+DlgSpellManyChanges		: "বানান পরীক্ষা শেষ: %1 গুলো শব্দ বদলে গ্যাছে",
+
+IeSpellDownload			: "বানান পরীক্ষক ইনস্টল করা নেই। আপনি কি এখনই এটা ডাউনলোড করতে চান?",
+
+// Button Dialog
+DlgButtonText		: "টেক্সট (ভ্যালু)",
+DlgButtonType		: "প্রকার",
+DlgButtonTypeBtn	: "Button",	//MISSING
+DlgButtonTypeSbm	: "Submit",	//MISSING
+DlgButtonTypeRst	: "Reset",	//MISSING
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "নাম",
+DlgCheckboxValue	: "ভ্যালু",
+DlgCheckboxSelected	: "সিলেক্টেড",
+
+// Form Dialog
+DlgFormName		: "নাম",
+DlgFormAction	: "একশ্যন",
+DlgFormMethod	: "পদ্ধতি",
+
+// Select Field Dialog
+DlgSelectName		: "নাম",
+DlgSelectValue		: "ভ্যালু",
+DlgSelectSize		: "সাইজ",
+DlgSelectLines		: "লাইন সমূহ",
+DlgSelectChkMulti	: "একাধিক সিলেকশন এলাউ কর",
+DlgSelectOpAvail	: "অন্যান্য বিকল্প",
+DlgSelectOpText		: "টেক্সট",
+DlgSelectOpValue	: "ভ্যালু",
+DlgSelectBtnAdd		: "যুক্ত",
+DlgSelectBtnModify	: "বদলে দাও",
+DlgSelectBtnUp		: "উপর",
+DlgSelectBtnDown	: "নীচে",
+DlgSelectBtnSetValue : "বাছাই করা ভ্যালু হিসেবে সেট কর",
+DlgSelectBtnDelete	: "ডিলীট",
+
+// Textarea Dialog
+DlgTextareaName	: "নাম",
+DlgTextareaCols	: "কলাম",
+DlgTextareaRows	: "রো",
+
+// Text Field Dialog
+DlgTextName			: "নাম",
+DlgTextValue		: "ভ্যালু",
+DlgTextCharWidth	: "ক্যারেক্টার প্রশস্ততা",
+DlgTextMaxChars		: "সর্বাধিক ক্যারেক্টার",
+DlgTextType			: "টাইপ",
+DlgTextTypeText		: "টেক্সট",
+DlgTextTypePass		: "পাসওয়ার্ড",
+
+// Hidden Field Dialog
+DlgHiddenName	: "নাম",
+DlgHiddenValue	: "ভ্যালু",
+
+// Bulleted List Dialog
+BulletedListProp	: "বুলেটেড সূচী প্রোপার্টি",
+NumberedListProp	: "সাংখ্যিক সূচী প্রোপার্টি",
+DlgLstStart			: "Start",	//MISSING
+DlgLstType			: "প্রকার",
+DlgLstTypeCircle	: "গোল",
+DlgLstTypeDisc		: "ডিস্ক",
+DlgLstTypeSquare	: "চৌকোণা",
+DlgLstTypeNumbers	: "সংখ্যা (1, 2, 3)",
+DlgLstTypeLCase		: "ছোট অক্ষর (a, b, c)",
+DlgLstTypeUCase		: "বড় অক্ষর (A, B, C)",
+DlgLstTypeSRoman	: "ছোট রোমান সংখ্যা (i, ii, iii)",
+DlgLstTypeLRoman	: "বড় রোমান সংখ্যা (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "সাধারন",
+DlgDocBackTab		: "ব্যাকগ্রাউন্ড",
+DlgDocColorsTab		: "রং এবং মার্জিন",
+DlgDocMetaTab		: "মেটাডেটা",
+
+DlgDocPageTitle		: "পেজ শীর্ষক",
+DlgDocLangDir		: "ভাষা লিখার দিক",
+DlgDocLangDirLTR	: "বাম থেকে ডানে (LTR)",
+DlgDocLangDirRTL	: "ডান থেকে বামে (RTL)",
+DlgDocLangCode		: "ভাষা কোড",
+DlgDocCharSet		: "ক্যারেক্টার সেট এনকোডিং",
+DlgDocCharSetCE		: "Central European",	//MISSING
+DlgDocCharSetCT		: "Chinese Traditional (Big5)",	//MISSING
+DlgDocCharSetCR		: "Cyrillic",	//MISSING
+DlgDocCharSetGR		: "Greek",	//MISSING
+DlgDocCharSetJP		: "Japanese",	//MISSING
+DlgDocCharSetKR		: "Korean",	//MISSING
+DlgDocCharSetTR		: "Turkish",	//MISSING
+DlgDocCharSetUN		: "Unicode (UTF-8)",	//MISSING
+DlgDocCharSetWE		: "Western European",	//MISSING
+DlgDocCharSetOther	: "অন্য ক্যারেক্টার সেট এনকোডিং",
+
+DlgDocDocType		: "ডক্যুমেন্ট টাইপ হেডিং",
+DlgDocDocTypeOther	: "অন্য ডক্যুমেন্ট টাইপ হেডিং",
+DlgDocIncXHTML		: "XHTML ডেক্লারেশন যুক্ত কর",
+DlgDocBgColor		: "ব্যাকগ্রাউন্ড রং",
+DlgDocBgImage		: "ব্যাকগ্রাউন্ড ছবির URL",
+DlgDocBgNoScroll	: "স্ক্রলহীন ব্যাকগ্রাউন্ড",
+DlgDocCText			: "টেক্সট",
+DlgDocCLink			: "লিংক",
+DlgDocCVisited		: "ভিজিট করা লিংক",
+DlgDocCActive		: "সক্রিয় লিংক",
+DlgDocMargins		: "পেজ মার্জিন",
+DlgDocMaTop			: "উপর",
+DlgDocMaLeft		: "বামে",
+DlgDocMaRight		: "ডানে",
+DlgDocMaBottom		: "নীচে",
+DlgDocMeIndex		: "ডক্যুমেন্ট ইন্ডেক্স কিওয়ার্ড (কমা দ্বারা বিচ্ছিন্ন)",
+DlgDocMeDescr		: "ডক্যূমেন্ট বর্ণনা",
+DlgDocMeAuthor		: "লেখক",
+DlgDocMeCopy		: "কপীরাইট",
+DlgDocPreview		: "প্রীভিউ",
+
+// Templates Dialog
+Templates			: "টেমপ্লেট",
+DlgTemplatesTitle	: "কনটেন্ট টেমপ্লেট",
+DlgTemplatesSelMsg	: "অনুগ্রহ করে এডিটরে ওপেন করার জন্য টেমপ্লেট বাছাই করুন<br>(আসল কনটেন্ট হারিয়ে যাবে):",
+DlgTemplatesLoading	: "টেমপ্লেট লিস্ট হারিয়ে যাবে। অনুগ্রহ করে অপেক্ষা করুন...",
+DlgTemplatesNoTpl	: "(কোন টেমপ্লেট ডিফাইন করা নেই)",
+DlgTemplatesReplace	: "Replace actual contents",	//MISSING
+
+// About Dialog
+DlgAboutAboutTab	: "কে বানিয়েছে",
+DlgAboutBrowserInfoTab	: "ব্রাউজারের ব্যাপারে তথ্য",
+DlgAboutLicenseTab	: "লাইসেন্স",
+DlgAboutVersion		: "ভার্সন",
+DlgAboutInfo		: "আরও তথ্যের জন্য যান"
+};
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/bs.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/bs.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/bs.js	(revision 1280)
@@ -0,0 +1,516 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Bosnian language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Skupi trake sa alatima",
+ToolbarExpand		: "Otvori trake sa alatima",
+
+// Toolbar Items and Context Menu
+Save				: "Snimi",
+NewPage				: "Novi dokument",
+Preview				: "Prikaži",
+Cut					: "Izreži",
+Copy				: "Kopiraj",
+Paste				: "Zalijepi",
+PasteText			: "Zalijepi kao obièan tekst",
+PasteWord			: "Zalijepi iz Word-a",
+Print				: "Štampaj",
+SelectAll			: "Selektuj sve",
+RemoveFormat		: "Poništi format",
+InsertLinkLbl		: "Link",
+InsertLink			: "Ubaci/Izmjeni link",
+RemoveLink			: "Izbriši link",
+Anchor				: "Insert/Edit Anchor",	//MISSING
+AnchorDelete		: "Remove Anchor",	//MISSING
+InsertImageLbl		: "Slika",
+InsertImage			: "Ubaci/Izmjeni sliku",
+InsertFlashLbl		: "Flash",	//MISSING
+InsertFlash			: "Insert/Edit Flash",	//MISSING
+InsertTableLbl		: "Tabela",
+InsertTable			: "Ubaci/Izmjeni tabelu",
+InsertLineLbl		: "Linija",
+InsertLine			: "Ubaci horizontalnu liniju",
+InsertSpecialCharLbl: "Specijalni karakter",
+InsertSpecialChar	: "Ubaci specijalni karater",
+InsertSmileyLbl		: "Smješko",
+InsertSmiley		: "Ubaci smješka",
+About				: "O FCKeditor-u",
+Bold				: "Boldiraj",
+Italic				: "Ukosi",
+Underline			: "Podvuci",
+StrikeThrough		: "Precrtaj",
+Subscript			: "Subscript",
+Superscript			: "Superscript",
+LeftJustify			: "Lijevo poravnanje",
+CenterJustify		: "Centralno poravnanje",
+RightJustify		: "Desno poravnanje",
+BlockJustify		: "Puno poravnanje",
+DecreaseIndent		: "Smanji uvod",
+IncreaseIndent		: "Poveæaj uvod",
+Blockquote			: "Blockquote",	//MISSING
+Undo				: "Vrati",
+Redo				: "Ponovi",
+NumberedListLbl		: "Numerisana lista",
+NumberedList		: "Ubaci/Izmjeni numerisanu listu",
+BulletedListLbl		: "Lista",
+BulletedList		: "Ubaci/Izmjeni listu",
+ShowTableBorders	: "Pokaži okvire tabela",
+ShowDetails			: "Pokaži detalje",
+Style				: "Stil",
+FontFormat			: "Format",
+Font				: "Font",
+FontSize			: "Velièina",
+TextColor			: "Boja teksta",
+BGColor				: "Boja pozadine",
+Source				: "HTML kôd",
+Find				: "Naði",
+Replace				: "Zamjeni",
+SpellCheck			: "Check Spelling",	//MISSING
+UniversalKeyboard	: "Universal Keyboard",	//MISSING
+PageBreakLbl		: "Page Break",	//MISSING
+PageBreak			: "Insert Page Break",	//MISSING
+
+Form			: "Form",	//MISSING
+Checkbox		: "Checkbox",	//MISSING
+RadioButton		: "Radio Button",	//MISSING
+TextField		: "Text Field",	//MISSING
+Textarea		: "Textarea",	//MISSING
+HiddenField		: "Hidden Field",	//MISSING
+Button			: "Button",	//MISSING
+SelectionField	: "Selection Field",	//MISSING
+ImageButton		: "Image Button",	//MISSING
+
+FitWindow		: "Maximize the editor size",	//MISSING
+ShowBlocks		: "Show Blocks",	//MISSING
+
+// Context Menu
+EditLink			: "Izmjeni link",
+CellCM				: "Cell",	//MISSING
+RowCM				: "Row",	//MISSING
+ColumnCM			: "Column",	//MISSING
+InsertRowAfter		: "Insert Row After",	//MISSING
+InsertRowBefore		: "Insert Row Before",	//MISSING
+DeleteRows			: "Briši redove",
+InsertColumnAfter	: "Insert Column After",	//MISSING
+InsertColumnBefore	: "Insert Column Before",	//MISSING
+DeleteColumns		: "Briši kolone",
+InsertCellAfter		: "Insert Cell After",	//MISSING
+InsertCellBefore	: "Insert Cell Before",	//MISSING
+DeleteCells			: "Briši æelije",
+MergeCells			: "Spoji æelije",
+MergeRight			: "Merge Right",	//MISSING
+MergeDown			: "Merge Down",	//MISSING
+HorizontalSplitCell	: "Split Cell Horizontally",	//MISSING
+VerticalSplitCell	: "Split Cell Vertically",	//MISSING
+TableDelete			: "Delete Table",	//MISSING
+CellProperties		: "Svojstva æelije",
+TableProperties		: "Svojstva tabele",
+ImageProperties		: "Svojstva slike",
+FlashProperties		: "Flash Properties",	//MISSING
+
+AnchorProp			: "Anchor Properties",	//MISSING
+ButtonProp			: "Button Properties",	//MISSING
+CheckboxProp		: "Checkbox Properties",	//MISSING
+HiddenFieldProp		: "Hidden Field Properties",	//MISSING
+RadioButtonProp		: "Radio Button Properties",	//MISSING
+ImageButtonProp		: "Image Button Properties",	//MISSING
+TextFieldProp		: "Text Field Properties",	//MISSING
+SelectionFieldProp	: "Selection Field Properties",	//MISSING
+TextareaProp		: "Textarea Properties",	//MISSING
+FormProp			: "Form Properties",	//MISSING
+
+FontFormats			: "Normal;Formatted;Address;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6",
+
+// Alerts and Messages
+ProcessingXHTML		: "Procesiram XHTML. Molim saèekajte...",
+Done				: "Gotovo",
+PasteWordConfirm	: "Tekst koji želite zalijepiti èini se da je kopiran iz Worda. Da li želite da se prvo oèisti?",
+NotCompatiblePaste	: "Ova komanda je podržana u Internet Explorer-u verzijama 5.5 ili novijim. Da li želite da izvršite lijepljenje teksta bez èišæenja?",
+UnknownToolbarItem	: "Nepoznata stavka sa trake sa alatima \"%1\"",
+UnknownCommand		: "Nepoznata komanda \"%1\"",
+NotImplemented		: "Komanda nije implementirana",
+UnknownToolbarSet	: "Traka sa alatima \"%1\" ne postoji",
+NoActiveX			: "Your browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.",	//MISSING
+BrowseServerBlocked : "The resources browser could not be opened. Make sure that all popup blockers are disabled.",	//MISSING
+DialogBlocked		: "It was not possible to open the dialog window. Make sure all popup blockers are disabled.",	//MISSING
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Odustani",
+DlgBtnClose			: "Zatvori",
+DlgBtnBrowseServer	: "Browse Server",	//MISSING
+DlgAdvancedTag		: "Naprednije",
+DlgOpOther			: "<Other>",	//MISSING
+DlgInfoTab			: "Info",	//MISSING
+DlgAlertUrl			: "Please insert the URL",	//MISSING
+
+// General Dialogs Labels
+DlgGenNotSet		: "<nije podešeno>",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Smjer pisanja",
+DlgGenLangDirLtr	: "S lijeva na desno (LTR)",
+DlgGenLangDirRtl	: "S desna na lijevo (RTL)",
+DlgGenLangCode		: "Jezièni kôd",
+DlgGenAccessKey		: "Pristupna tipka",
+DlgGenName			: "Naziv",
+DlgGenTabIndex		: "Tab indeks",
+DlgGenLongDescr		: "Dugaèki opis URL-a",
+DlgGenClass			: "Klase CSS stilova",
+DlgGenTitle			: "Advisory title",
+DlgGenContType		: "Advisory vrsta sadržaja",
+DlgGenLinkCharset	: "Linked Resource Charset",
+DlgGenStyle			: "Stil",
+
+// Image Dialog
+DlgImgTitle			: "Svojstva slike",
+DlgImgInfoTab		: "Info slike",
+DlgImgBtnUpload		: "Šalji na server",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Šalji",
+DlgImgAlt			: "Tekst na slici",
+DlgImgWidth			: "Širina",
+DlgImgHeight		: "Visina",
+DlgImgLockRatio		: "Zakljuèaj odnos",
+DlgBtnResetSize		: "Resetuj dimenzije",
+DlgImgBorder		: "Okvir",
+DlgImgHSpace		: "HSpace",
+DlgImgVSpace		: "VSpace",
+DlgImgAlign			: "Poravnanje",
+DlgImgAlignLeft		: "Lijevo",
+DlgImgAlignAbsBottom: "Abs dole",
+DlgImgAlignAbsMiddle: "Abs sredina",
+DlgImgAlignBaseline	: "Bazno",
+DlgImgAlignBottom	: "Dno",
+DlgImgAlignMiddle	: "Sredina",
+DlgImgAlignRight	: "Desno",
+DlgImgAlignTextTop	: "Vrh teksta",
+DlgImgAlignTop		: "Vrh",
+DlgImgPreview		: "Prikaz",
+DlgImgAlertUrl		: "Molimo ukucajte URL od slike.",
+DlgImgLinkTab		: "Link",	//MISSING
+
+// Flash Dialog
+DlgFlashTitle		: "Flash Properties",	//MISSING
+DlgFlashChkPlay		: "Auto Play",	//MISSING
+DlgFlashChkLoop		: "Loop",	//MISSING
+DlgFlashChkMenu		: "Enable Flash Menu",	//MISSING
+DlgFlashScale		: "Scale",	//MISSING
+DlgFlashScaleAll	: "Show all",	//MISSING
+DlgFlashScaleNoBorder	: "No Border",	//MISSING
+DlgFlashScaleFit	: "Exact Fit",	//MISSING
+
+// Link Dialog
+DlgLnkWindowTitle	: "Link",
+DlgLnkInfoTab		: "Link info",
+DlgLnkTargetTab		: "Prozor",
+
+DlgLnkType			: "Tip linka",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Sidro na ovoj stranici",
+DlgLnkTypeEMail		: "E-Mail",
+DlgLnkProto			: "Protokol",
+DlgLnkProtoOther	: "<drugi>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Izaberi sidro",
+DlgLnkAnchorByName	: "Po nazivu sidra",
+DlgLnkAnchorById	: "Po Id-u elementa",
+DlgLnkNoAnchors		: "(Nema dostupnih sidra na stranici)",
+DlgLnkEMail			: "E-Mail Adresa",
+DlgLnkEMailSubject	: "Subjekt poruke",
+DlgLnkEMailBody		: "Poruka",
+DlgLnkUpload		: "Šalji",
+DlgLnkBtnUpload		: "Šalji na server",
+
+DlgLnkTarget		: "Prozor",
+DlgLnkTargetFrame	: "<frejm>",
+DlgLnkTargetPopup	: "<popup prozor>",
+DlgLnkTargetBlank	: "Novi prozor (_blank)",
+DlgLnkTargetParent	: "Glavni prozor (_parent)",
+DlgLnkTargetSelf	: "Isti prozor (_self)",
+DlgLnkTargetTop		: "Najgornji prozor (_top)",
+DlgLnkTargetFrameName	: "Target Frame Name",	//MISSING
+DlgLnkPopWinName	: "Naziv popup prozora",
+DlgLnkPopWinFeat	: "Moguænosti popup prozora",
+DlgLnkPopResize		: "Promjenljive velièine",
+DlgLnkPopLocation	: "Traka za lokaciju",
+DlgLnkPopMenu		: "Izborna traka",
+DlgLnkPopScroll		: "Scroll traka",
+DlgLnkPopStatus		: "Statusna traka",
+DlgLnkPopToolbar	: "Traka sa alatima",
+DlgLnkPopFullScrn	: "Cijeli ekran (IE)",
+DlgLnkPopDependent	: "Ovisno (Netscape)",
+DlgLnkPopWidth		: "Širina",
+DlgLnkPopHeight		: "Visina",
+DlgLnkPopLeft		: "Lijeva pozicija",
+DlgLnkPopTop		: "Gornja pozicija",
+
+DlnLnkMsgNoUrl		: "Molimo ukucajte URL link",
+DlnLnkMsgNoEMail	: "Molimo ukucajte e-mail adresu",
+DlnLnkMsgNoAnchor	: "Molimo izaberite sidro",
+DlnLnkMsgInvPopName	: "The popup name must begin with an alphabetic character and must not contain spaces",	//MISSING
+
+// Color Dialog
+DlgColorTitle		: "Izaberi boju",
+DlgColorBtnClear	: "Oèisti",
+DlgColorHighlight	: "Igled",
+DlgColorSelected	: "Selektovana",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Ubaci smješka",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Izaberi specijalni karakter",
+
+// Table Dialog
+DlgTableTitle		: "Svojstva tabele",
+DlgTableRows		: "Redova",
+DlgTableColumns		: "Kolona",
+DlgTableBorder		: "Okvir",
+DlgTableAlign		: "Poravnanje",
+DlgTableAlignNotSet	: "<Nije podešeno>",
+DlgTableAlignLeft	: "Lijevo",
+DlgTableAlignCenter	: "Centar",
+DlgTableAlignRight	: "Desno",
+DlgTableWidth		: "Širina",
+DlgTableWidthPx		: "piksela",
+DlgTableWidthPc		: "posto",
+DlgTableHeight		: "Visina",
+DlgTableCellSpace	: "Razmak æelija",
+DlgTableCellPad		: "Uvod æelija",
+DlgTableCaption		: "Naslov",
+DlgTableSummary		: "Summary",	//MISSING
+
+// Table Cell Dialog
+DlgCellTitle		: "Svojstva æelije",
+DlgCellWidth		: "Širina",
+DlgCellWidthPx		: "piksela",
+DlgCellWidthPc		: "posto",
+DlgCellHeight		: "Visina",
+DlgCellWordWrap		: "Vrapuj tekst",
+DlgCellWordWrapNotSet	: "<Nije podešeno>",
+DlgCellWordWrapYes	: "Da",
+DlgCellWordWrapNo	: "Ne",
+DlgCellHorAlign		: "Horizontalno poravnanje",
+DlgCellHorAlignNotSet	: "<Nije podešeno>",
+DlgCellHorAlignLeft	: "Lijevo",
+DlgCellHorAlignCenter	: "Centar",
+DlgCellHorAlignRight: "Desno",
+DlgCellVerAlign		: "Vertikalno poravnanje",
+DlgCellVerAlignNotSet	: "<Nije podešeno>",
+DlgCellVerAlignTop	: "Gore",
+DlgCellVerAlignMiddle	: "Sredina",
+DlgCellVerAlignBottom	: "Dno",
+DlgCellVerAlignBaseline	: "Bazno",
+DlgCellRowSpan		: "Spajanje æelija",
+DlgCellCollSpan		: "Spajanje kolona",
+DlgCellBackColor	: "Boja pozadine",
+DlgCellBorderColor	: "Boja okvira",
+DlgCellBtnSelect	: "Selektuj...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Find and Replace",	//MISSING
+
+// Find Dialog
+DlgFindTitle		: "Naði",
+DlgFindFindBtn		: "Naði",
+DlgFindNotFoundMsg	: "Traženi tekst nije pronaðen.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Zamjeni",
+DlgReplaceFindLbl		: "Naði šta:",
+DlgReplaceReplaceLbl	: "Zamjeni sa:",
+DlgReplaceCaseChk		: "Uporeðuj velika/mala slova",
+DlgReplaceReplaceBtn	: "Zamjeni",
+DlgReplaceReplAllBtn	: "Zamjeni sve",
+DlgReplaceWordChk		: "Uporeðuj samo cijelu rijeè",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "Sigurnosne postavke vašeg pretraživaèa ne dozvoljavaju operacije automatskog rezanja. Molimo koristite kraticu na tastaturi (Ctrl+X).",
+PasteErrorCopy	: "Sigurnosne postavke Vašeg pretraživaèa ne dozvoljavaju operacije automatskog kopiranja. Molimo koristite kraticu na tastaturi (Ctrl+C).",
+
+PasteAsText		: "Zalijepi kao obièan tekst",
+PasteFromWord	: "Zalijepi iz Word-a",
+
+DlgPasteMsg2	: "Please paste inside the following box using the keyboard (<strong>Ctrl+V</strong>) and hit <strong>OK</strong>.",	//MISSING
+DlgPasteSec		: "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.",	//MISSING
+DlgPasteIgnoreFont		: "Ignore Font Face definitions",	//MISSING
+DlgPasteRemoveStyles	: "Remove Styles definitions",	//MISSING
+DlgPasteCleanBox		: "Clean Up Box",	//MISSING
+
+// Color Picker
+ColorAutomatic	: "Automatska",
+ColorMoreColors	: "Više boja...",
+
+// Document Properties
+DocProps		: "Document Properties",	//MISSING
+
+// Anchor Dialog
+DlgAnchorTitle		: "Anchor Properties",	//MISSING
+DlgAnchorName		: "Anchor Name",	//MISSING
+DlgAnchorErrorName	: "Please type the anchor name",	//MISSING
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Not in dictionary",	//MISSING
+DlgSpellChangeTo		: "Change to",	//MISSING
+DlgSpellBtnIgnore		: "Ignore",	//MISSING
+DlgSpellBtnIgnoreAll	: "Ignore All",	//MISSING
+DlgSpellBtnReplace		: "Replace",	//MISSING
+DlgSpellBtnReplaceAll	: "Replace All",	//MISSING
+DlgSpellBtnUndo			: "Undo",	//MISSING
+DlgSpellNoSuggestions	: "- No suggestions -",	//MISSING
+DlgSpellProgress		: "Spell check in progress...",	//MISSING
+DlgSpellNoMispell		: "Spell check complete: No misspellings found",	//MISSING
+DlgSpellNoChanges		: "Spell check complete: No words changed",	//MISSING
+DlgSpellOneChange		: "Spell check complete: One word changed",	//MISSING
+DlgSpellManyChanges		: "Spell check complete: %1 words changed",	//MISSING
+
+IeSpellDownload			: "Spell checker not installed. Do you want to download it now?",	//MISSING
+
+// Button Dialog
+DlgButtonText		: "Text (Value)",	//MISSING
+DlgButtonType		: "Type",	//MISSING
+DlgButtonTypeBtn	: "Button",	//MISSING
+DlgButtonTypeSbm	: "Submit",	//MISSING
+DlgButtonTypeRst	: "Reset",	//MISSING
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Name",	//MISSING
+DlgCheckboxValue	: "Value",	//MISSING
+DlgCheckboxSelected	: "Selected",	//MISSING
+
+// Form Dialog
+DlgFormName		: "Name",	//MISSING
+DlgFormAction	: "Action",	//MISSING
+DlgFormMethod	: "Method",	//MISSING
+
+// Select Field Dialog
+DlgSelectName		: "Name",	//MISSING
+DlgSelectValue		: "Value",	//MISSING
+DlgSelectSize		: "Size",	//MISSING
+DlgSelectLines		: "lines",	//MISSING
+DlgSelectChkMulti	: "Allow multiple selections",	//MISSING
+DlgSelectOpAvail	: "Available Options",	//MISSING
+DlgSelectOpText		: "Text",	//MISSING
+DlgSelectOpValue	: "Value",	//MISSING
+DlgSelectBtnAdd		: "Add",	//MISSING
+DlgSelectBtnModify	: "Modify",	//MISSING
+DlgSelectBtnUp		: "Up",	//MISSING
+DlgSelectBtnDown	: "Down",	//MISSING
+DlgSelectBtnSetValue : "Set as selected value",	//MISSING
+DlgSelectBtnDelete	: "Delete",	//MISSING
+
+// Textarea Dialog
+DlgTextareaName	: "Name",	//MISSING
+DlgTextareaCols	: "Columns",	//MISSING
+DlgTextareaRows	: "Rows",	//MISSING
+
+// Text Field Dialog
+DlgTextName			: "Name",	//MISSING
+DlgTextValue		: "Value",	//MISSING
+DlgTextCharWidth	: "Character Width",	//MISSING
+DlgTextMaxChars		: "Maximum Characters",	//MISSING
+DlgTextType			: "Type",	//MISSING
+DlgTextTypeText		: "Text",	//MISSING
+DlgTextTypePass		: "Password",	//MISSING
+
+// Hidden Field Dialog
+DlgHiddenName	: "Name",	//MISSING
+DlgHiddenValue	: "Value",	//MISSING
+
+// Bulleted List Dialog
+BulletedListProp	: "Bulleted List Properties",	//MISSING
+NumberedListProp	: "Numbered List Properties",	//MISSING
+DlgLstStart			: "Start",	//MISSING
+DlgLstType			: "Type",	//MISSING
+DlgLstTypeCircle	: "Circle",	//MISSING
+DlgLstTypeDisc		: "Disc",	//MISSING
+DlgLstTypeSquare	: "Square",	//MISSING
+DlgLstTypeNumbers	: "Numbers (1, 2, 3)",	//MISSING
+DlgLstTypeLCase		: "Lowercase Letters (a, b, c)",	//MISSING
+DlgLstTypeUCase		: "Uppercase Letters (A, B, C)",	//MISSING
+DlgLstTypeSRoman	: "Small Roman Numerals (i, ii, iii)",	//MISSING
+DlgLstTypeLRoman	: "Large Roman Numerals (I, II, III)",	//MISSING
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "General",	//MISSING
+DlgDocBackTab		: "Background",	//MISSING
+DlgDocColorsTab		: "Colors and Margins",	//MISSING
+DlgDocMetaTab		: "Meta Data",	//MISSING
+
+DlgDocPageTitle		: "Page Title",	//MISSING
+DlgDocLangDir		: "Language Direction",	//MISSING
+DlgDocLangDirLTR	: "Left to Right (LTR)",	//MISSING
+DlgDocLangDirRTL	: "Right to Left (RTL)",	//MISSING
+DlgDocLangCode		: "Language Code",	//MISSING
+DlgDocCharSet		: "Character Set Encoding",	//MISSING
+DlgDocCharSetCE		: "Central European",	//MISSING
+DlgDocCharSetCT		: "Chinese Traditional (Big5)",	//MISSING
+DlgDocCharSetCR		: "Cyrillic",	//MISSING
+DlgDocCharSetGR		: "Greek",	//MISSING
+DlgDocCharSetJP		: "Japanese",	//MISSING
+DlgDocCharSetKR		: "Korean",	//MISSING
+DlgDocCharSetTR		: "Turkish",	//MISSING
+DlgDocCharSetUN		: "Unicode (UTF-8)",	//MISSING
+DlgDocCharSetWE		: "Western European",	//MISSING
+DlgDocCharSetOther	: "Other Character Set Encoding",	//MISSING
+
+DlgDocDocType		: "Document Type Heading",	//MISSING
+DlgDocDocTypeOther	: "Other Document Type Heading",	//MISSING
+DlgDocIncXHTML		: "Include XHTML Declarations",	//MISSING
+DlgDocBgColor		: "Background Color",	//MISSING
+DlgDocBgImage		: "Background Image URL",	//MISSING
+DlgDocBgNoScroll	: "Nonscrolling Background",	//MISSING
+DlgDocCText			: "Text",	//MISSING
+DlgDocCLink			: "Link",	//MISSING
+DlgDocCVisited		: "Visited Link",	//MISSING
+DlgDocCActive		: "Active Link",	//MISSING
+DlgDocMargins		: "Page Margins",	//MISSING
+DlgDocMaTop			: "Top",	//MISSING
+DlgDocMaLeft		: "Left",	//MISSING
+DlgDocMaRight		: "Right",	//MISSING
+DlgDocMaBottom		: "Bottom",	//MISSING
+DlgDocMeIndex		: "Document Indexing Keywords (comma separated)",	//MISSING
+DlgDocMeDescr		: "Document Description",	//MISSING
+DlgDocMeAuthor		: "Author",	//MISSING
+DlgDocMeCopy		: "Copyright",	//MISSING
+DlgDocPreview		: "Preview",	//MISSING
+
+// Templates Dialog
+Templates			: "Templates",	//MISSING
+DlgTemplatesTitle	: "Content Templates",	//MISSING
+DlgTemplatesSelMsg	: "Please select the template to open in the editor<br />(the actual contents will be lost):",	//MISSING
+DlgTemplatesLoading	: "Loading templates list. Please wait...",	//MISSING
+DlgTemplatesNoTpl	: "(No templates defined)",	//MISSING
+DlgTemplatesReplace	: "Replace actual contents",	//MISSING
+
+// About Dialog
+DlgAboutAboutTab	: "About",	//MISSING
+DlgAboutBrowserInfoTab	: "Browser Info",	//MISSING
+DlgAboutLicenseTab	: "License",	//MISSING
+DlgAboutVersion		: "verzija",
+DlgAboutInfo		: "Za više informacija posjetite"
+};
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/ca.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/ca.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/ca.js	(revision 1280)
@@ -0,0 +1,516 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Catalan language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Col·lapsa la barra",
+ToolbarExpand		: "Amplia la barra",
+
+// Toolbar Items and Context Menu
+Save				: "Desa",
+NewPage				: "Nova Pàgina",
+Preview				: "Vista Prèvia",
+Cut					: "Retalla",
+Copy				: "Copia",
+Paste				: "Enganxa",
+PasteText			: "Enganxa com a text no formatat",
+PasteWord			: "Enganxa des del Word",
+Print				: "Imprimeix",
+SelectAll			: "Selecciona-ho tot",
+RemoveFormat		: "Elimina Format",
+InsertLinkLbl		: "Enllaç",
+InsertLink			: "Insereix/Edita enllaç",
+RemoveLink			: "Elimina enllaç",
+Anchor				: "Insereix/Edita àncora",
+AnchorDelete		: "Elimina àncora",
+InsertImageLbl		: "Imatge",
+InsertImage			: "Insereix/Edita imatge",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Insereix/Edita Flash",
+InsertTableLbl		: "Taula",
+InsertTable			: "Insereix/Edita taula",
+InsertLineLbl		: "Línia",
+InsertLine			: "Insereix línia horitzontal",
+InsertSpecialCharLbl: "Caràcter Especial",
+InsertSpecialChar	: "Insereix caràcter especial",
+InsertSmileyLbl		: "Icona",
+InsertSmiley		: "Insereix icona",
+About				: "Quant a FCKeditor",
+Bold				: "Negreta",
+Italic				: "Cursiva",
+Underline			: "Subratllat",
+StrikeThrough		: "Barrat",
+Subscript			: "Subíndex",
+Superscript			: "Superíndex",
+LeftJustify			: "Aliniament esquerra",
+CenterJustify		: "Aliniament centrat",
+RightJustify		: "Aliniament dreta",
+BlockJustify		: "Justifica",
+DecreaseIndent		: "Sagna el text",
+IncreaseIndent		: "Treu el sagnat del text",
+Blockquote			: "Bloc de cita",
+Undo				: "Desfés",
+Redo				: "Refés",
+NumberedListLbl		: "Llista numerada",
+NumberedList		: "Aplica o elimina la llista numerada",
+BulletedListLbl		: "Llista de pics",
+BulletedList		: "Aplica o elimina la llista de pics",
+ShowTableBorders	: "Mostra les vores de les taules",
+ShowDetails			: "Mostra detalls",
+Style				: "Estil",
+FontFormat			: "Format",
+Font				: "Tipus de lletra",
+FontSize			: "Mida",
+TextColor			: "Color de Text",
+BGColor				: "Color de Fons",
+Source				: "Codi font",
+Find				: "Cerca",
+Replace				: "Reemplaça",
+SpellCheck			: "Revisa l'ortografia",
+UniversalKeyboard	: "Teclat universal",
+PageBreakLbl		: "Salt de pàgina",
+PageBreak			: "Insereix salt de pàgina",
+
+Form			: "Formulari",
+Checkbox		: "Casella de verificació",
+RadioButton		: "Botó d'opció",
+TextField		: "Camp de text",
+Textarea		: "Àrea de text",
+HiddenField		: "Camp ocult",
+Button			: "Botó",
+SelectionField	: "Camp de selecció",
+ImageButton		: "Botó d'imatge",
+
+FitWindow		: "Maximiza la mida de l'editor",
+ShowBlocks		: "Mostra els blocs",
+
+// Context Menu
+EditLink			: "Edita l'enllaç",
+CellCM				: "Cel·la",
+RowCM				: "Fila",
+ColumnCM			: "Columna",
+InsertRowAfter		: "Insereix fila darrera",
+InsertRowBefore		: "Insereix fila abans de",
+DeleteRows			: "Suprimeix una fila",
+InsertColumnAfter	: "Insereix columna darrera",
+InsertColumnBefore	: "Insereix columna abans de",
+DeleteColumns		: "Suprimeix una columna",
+InsertCellAfter		: "Insereix cel·la darrera",
+InsertCellBefore	: "Insereix cel·la abans de",
+DeleteCells			: "Suprimeix les cel·les",
+MergeCells			: "Fusiona les cel·les",
+MergeRight			: "Fusiona cap a la dreta",
+MergeDown			: "Fusiona cap avall",
+HorizontalSplitCell	: "Divideix la cel·la horitzontalment",
+VerticalSplitCell	: "Divideix la cel·la verticalment",
+TableDelete			: "Suprimeix la taula",
+CellProperties		: "Propietats de la cel·la",
+TableProperties		: "Propietats de la taula",
+ImageProperties		: "Propietats de la imatge",
+FlashProperties		: "Propietats del Flash",
+
+AnchorProp			: "Propietats de l'àncora",
+ButtonProp			: "Propietats del botó",
+CheckboxProp		: "Propietats de la casella de verificació",
+HiddenFieldProp		: "Propietats del camp ocult",
+RadioButtonProp		: "Propietats del botó d'opció",
+ImageButtonProp		: "Propietats del botó d'imatge",
+TextFieldProp		: "Propietats del camp de text",
+SelectionFieldProp	: "Propietats del camp de selecció",
+TextareaProp		: "Propietats de l'àrea de text",
+FormProp			: "Propietats del formulari",
+
+FontFormats			: "Normal;Formatejat;Adreça;Encapçalament 1;Encapçalament 2;Encapçalament 3;Encapçalament 4;Encapçalament 5;Encapçalament 6",
+
+// Alerts and Messages
+ProcessingXHTML		: "Processant XHTML. Si us plau esperi...",
+Done				: "Fet",
+PasteWordConfirm	: "El text que voleu enganxar sembla provenir de Word. Voleu netejar aquest text abans que sigui enganxat?",
+NotCompatiblePaste	: "Aquesta funció és disponible per a Internet Explorer versió 5.5 o superior. Voleu enganxar sense netejar?",
+UnknownToolbarItem	: "Element de la barra d'eines desconegut \"%1\"",
+UnknownCommand		: "Nom de comanda desconegut \"%1\"",
+NotImplemented		: "Mètode no implementat",
+UnknownToolbarSet	: "Conjunt de barra d'eines \"%1\" inexistent",
+NoActiveX			: "Les preferències del navegador poden limitar algunes funcions d'aquest editor. Cal habilitar l'opció \"Executa controls ActiveX i plug-ins\". Poden sorgir errors i poden faltar algunes funcions.",
+BrowseServerBlocked : "El visualitzador de recursos no s'ha pogut obrir. Assegura't de que els bloquejos de finestres emergents estan desactivats.",
+DialogBlocked		: "No ha estat possible obrir una finestra de diàleg. Assegura't de que els bloquejos de finestres emergents estan desactivats.",
+
+// Dialogs
+DlgBtnOK			: "D'acord",
+DlgBtnCancel		: "Cancel·la",
+DlgBtnClose			: "Tanca",
+DlgBtnBrowseServer	: "Veure servidor",
+DlgAdvancedTag		: "Avançat",
+DlgOpOther			: "Altres",
+DlgInfoTab			: "Info",
+DlgAlertUrl			: "Si us plau, afegiu la URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<no definit>",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Direcció de l'idioma",
+DlgGenLangDirLtr	: "D'esquerra a dreta (LTR)",
+DlgGenLangDirRtl	: "De dreta a esquerra (RTL)",
+DlgGenLangCode		: "Codi d'idioma",
+DlgGenAccessKey		: "Clau d'accés",
+DlgGenName			: "Nom",
+DlgGenTabIndex		: "Index de Tab",
+DlgGenLongDescr		: "Descripció llarga de la URL",
+DlgGenClass			: "Classes del full d'estil",
+DlgGenTitle			: "Títol consultiu",
+DlgGenContType		: "Tipus de contingut consultiu",
+DlgGenLinkCharset	: "Conjunt de caràcters font enllaçat",
+DlgGenStyle			: "Estil",
+
+// Image Dialog
+DlgImgTitle			: "Propietats de la imatge",
+DlgImgInfoTab		: "Informació de la imatge",
+DlgImgBtnUpload		: "Envia-la al servidor",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Puja",
+DlgImgAlt			: "Text alternatiu",
+DlgImgWidth			: "Amplada",
+DlgImgHeight		: "Alçada",
+DlgImgLockRatio		: "Bloqueja les proporcions",
+DlgBtnResetSize		: "Restaura la mida",
+DlgImgBorder		: "Vora",
+DlgImgHSpace		: "Espaiat horit.",
+DlgImgVSpace		: "Espaiat vert.",
+DlgImgAlign			: "Alineació",
+DlgImgAlignLeft		: "Ajusta a l'esquerra",
+DlgImgAlignAbsBottom: "Abs Bottom",
+DlgImgAlignAbsMiddle: "Abs Middle",
+DlgImgAlignBaseline	: "Baseline",
+DlgImgAlignBottom	: "Bottom",
+DlgImgAlignMiddle	: "Middle",
+DlgImgAlignRight	: "Ajusta a la dreta",
+DlgImgAlignTextTop	: "Text Top",
+DlgImgAlignTop		: "Top",
+DlgImgPreview		: "Vista prèvia",
+DlgImgAlertUrl		: "Si us plau, escriviu la URL de la imatge",
+DlgImgLinkTab		: "Enllaç",
+
+// Flash Dialog
+DlgFlashTitle		: "Propietats del Flash",
+DlgFlashChkPlay		: "Reprodució automàtica",
+DlgFlashChkLoop		: "Bucle",
+DlgFlashChkMenu		: "Habilita menú Flash",
+DlgFlashScale		: "Escala",
+DlgFlashScaleAll	: "Mostra-ho tot",
+DlgFlashScaleNoBorder	: "Sense vores",
+DlgFlashScaleFit	: "Mida exacta",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Enllaç",
+DlgLnkInfoTab		: "Informació de l'enllaç",
+DlgLnkTargetTab		: "Destí",
+
+DlgLnkType			: "Tipus d'enllaç",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Àncora en aquesta pàgina",
+DlgLnkTypeEMail		: "Correu electrònic",
+DlgLnkProto			: "Protocol",
+DlgLnkProtoOther	: "<altra>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Selecciona una àncora",
+DlgLnkAnchorByName	: "Per nom d'àncora",
+DlgLnkAnchorById	: "Per Id d'element",
+DlgLnkNoAnchors		: "(No hi ha àncores disponibles en aquest document)",
+DlgLnkEMail			: "Adreça de correu electrònic",
+DlgLnkEMailSubject	: "Assumpte del missatge",
+DlgLnkEMailBody		: "Cos del missatge",
+DlgLnkUpload		: "Puja",
+DlgLnkBtnUpload		: "Envia al servidor",
+
+DlgLnkTarget		: "Destí",
+DlgLnkTargetFrame	: "<marc>",
+DlgLnkTargetPopup	: "<finestra emergent>",
+DlgLnkTargetBlank	: "Nova finestra (_blank)",
+DlgLnkTargetParent	: "Finestra pare (_parent)",
+DlgLnkTargetSelf	: "Mateixa finestra (_self)",
+DlgLnkTargetTop		: "Finestra Major (_top)",
+DlgLnkTargetFrameName	: "Nom del marc de destí",
+DlgLnkPopWinName	: "Nom finestra popup",
+DlgLnkPopWinFeat	: "Característiques finestra popup",
+DlgLnkPopResize		: "Redimensionable",
+DlgLnkPopLocation	: "Barra d'adreça",
+DlgLnkPopMenu		: "Barra de menú",
+DlgLnkPopScroll		: "Barres d'scroll",
+DlgLnkPopStatus		: "Barra d'estat",
+DlgLnkPopToolbar	: "Barra d'eines",
+DlgLnkPopFullScrn	: "Pantalla completa (IE)",
+DlgLnkPopDependent	: "Depenent (Netscape)",
+DlgLnkPopWidth		: "Amplada",
+DlgLnkPopHeight		: "Alçada",
+DlgLnkPopLeft		: "Posició esquerra",
+DlgLnkPopTop		: "Posició dalt",
+
+DlnLnkMsgNoUrl		: "Si us plau, escrigui l'enllaç URL",
+DlnLnkMsgNoEMail	: "Si us plau, escrigui l'adreça correu electrònic",
+DlnLnkMsgNoAnchor	: "Si us plau, escrigui l'àncora",
+DlnLnkMsgInvPopName	: "El nom de la finestra emergent ha de començar amb una lletra i no pot tenir espais",
+
+// Color Dialog
+DlgColorTitle		: "Selecciona el color",
+DlgColorBtnClear	: "Neteja",
+DlgColorHighlight	: "Realça",
+DlgColorSelected	: "Selecciona",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Insereix una icona",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Selecciona el caràcter especial",
+
+// Table Dialog
+DlgTableTitle		: "Propietats de la taula",
+DlgTableRows		: "Files",
+DlgTableColumns		: "Columnes",
+DlgTableBorder		: "Mida vora",
+DlgTableAlign		: "Alineació",
+DlgTableAlignNotSet	: "<No Definit>",
+DlgTableAlignLeft	: "Esquerra",
+DlgTableAlignCenter	: "Centre",
+DlgTableAlignRight	: "Dreta",
+DlgTableWidth		: "Amplada",
+DlgTableWidthPx		: "píxels",
+DlgTableWidthPc		: "percentatge",
+DlgTableHeight		: "Alçada",
+DlgTableCellSpace	: "Espaiat de cel·les",
+DlgTableCellPad		: "Encoixinament de cel·les",
+DlgTableCaption		: "Títol",
+DlgTableSummary		: "Resum",
+
+// Table Cell Dialog
+DlgCellTitle		: "Propietats de la cel·la",
+DlgCellWidth		: "Amplada",
+DlgCellWidthPx		: "píxels",
+DlgCellWidthPc		: "percentatge",
+DlgCellHeight		: "Alçada",
+DlgCellWordWrap		: "Ajust de paraula",
+DlgCellWordWrapNotSet	: "<No Definit>",
+DlgCellWordWrapYes	: "Si",
+DlgCellWordWrapNo	: "No",
+DlgCellHorAlign		: "Alineació horitzontal",
+DlgCellHorAlignNotSet	: "<No Definit>",
+DlgCellHorAlignLeft	: "Esquerra",
+DlgCellHorAlignCenter	: "Centre",
+DlgCellHorAlignRight: "Dreta",
+DlgCellVerAlign		: "Alineació vertical",
+DlgCellVerAlignNotSet	: "<No definit>",
+DlgCellVerAlignTop	: "Top",
+DlgCellVerAlignMiddle	: "Middle",
+DlgCellVerAlignBottom	: "Bottom",
+DlgCellVerAlignBaseline	: "Baseline",
+DlgCellRowSpan		: "Rows Span",
+DlgCellCollSpan		: "Columns Span",
+DlgCellBackColor	: "Color de fons",
+DlgCellBorderColor	: "Color de la vora",
+DlgCellBtnSelect	: "Seleccioneu...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Cerca i reemplaça",
+
+// Find Dialog
+DlgFindTitle		: "Cerca",
+DlgFindFindBtn		: "Cerca",
+DlgFindNotFoundMsg	: "El text especificat no s'ha trobat.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Reemplaça",
+DlgReplaceFindLbl		: "Cerca:",
+DlgReplaceReplaceLbl	: "Remplaça amb:",
+DlgReplaceCaseChk		: "Distingeix majúscules/minúscules",
+DlgReplaceReplaceBtn	: "Reemplaça",
+DlgReplaceReplAllBtn	: "Reemplaça-ho tot",
+DlgReplaceWordChk		: "Només paraules completes",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "La seguretat del vostre navegador no permet executar automàticament les operacions de retallar. Si us plau, utilitzeu el teclat (Ctrl+X).",
+PasteErrorCopy	: "La seguretat del vostre navegador no permet executar automàticament les operacions de copiar. Si us plau, utilitzeu el teclat (Ctrl+C).",
+
+PasteAsText		: "Enganxa com a text no formatat",
+PasteFromWord	: "Enganxa com a Word",
+
+DlgPasteMsg2	: "Si us plau, enganxeu dins del següent camp utilitzant el teclat (<STRONG>Ctrl+V</STRONG>) i premeu <STRONG>OK</STRONG>.",
+DlgPasteSec		: "A causa de la configuració de seguretat del vostre navegador, l'editor no pot accedir al porta-retalls directament. Enganxeu-ho un altre cop en aquesta finestra.",
+DlgPasteIgnoreFont		: "Ignora definicions de font",
+DlgPasteRemoveStyles	: "Elimina definicions d'estil",
+DlgPasteCleanBox		: "Neteja camp",
+
+// Color Picker
+ColorAutomatic	: "Automàtic",
+ColorMoreColors	: "Més colors...",
+
+// Document Properties
+DocProps		: "Propietats del document",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Propietats de l'àncora",
+DlgAnchorName		: "Nom de l'àncora",
+DlgAnchorErrorName	: "Si us plau, escriviu el nom de l'ancora",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "No és al diccionari",
+DlgSpellChangeTo		: "Canvia a",
+DlgSpellBtnIgnore		: "Ignora",
+DlgSpellBtnIgnoreAll	: "Ignora-les totes",
+DlgSpellBtnReplace		: "Canvia",
+DlgSpellBtnReplaceAll	: "Canvia-les totes",
+DlgSpellBtnUndo			: "Desfés",
+DlgSpellNoSuggestions	: "Cap sugerència",
+DlgSpellProgress		: "Comprovació ortogràfica en progrés",
+DlgSpellNoMispell		: "Comprovació ortogràfica completada",
+DlgSpellNoChanges		: "Comprovació ortogràfica: cap paraulada canviada",
+DlgSpellOneChange		: "Comprovació ortogràfica: una paraula canviada",
+DlgSpellManyChanges		: "Comprovació ortogràfica %1 paraules canviades",
+
+IeSpellDownload			: "Comprovació ortogràfica no instal·lada. Voleu descarregar-ho ara?",
+
+// Button Dialog
+DlgButtonText		: "Text (Valor)",
+DlgButtonType		: "Tipus",
+DlgButtonTypeBtn	: "Botó",
+DlgButtonTypeSbm	: "Transmet formulari",
+DlgButtonTypeRst	: "Reinicia formulari",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Nom",
+DlgCheckboxValue	: "Valor",
+DlgCheckboxSelected	: "Seleccionat",
+
+// Form Dialog
+DlgFormName		: "Nom",
+DlgFormAction	: "Acció",
+DlgFormMethod	: "Mètode",
+
+// Select Field Dialog
+DlgSelectName		: "Nom",
+DlgSelectValue		: "Valor",
+DlgSelectSize		: "Mida",
+DlgSelectLines		: "Línies",
+DlgSelectChkMulti	: "Permet múltiples seleccions",
+DlgSelectOpAvail	: "Opcions disponibles",
+DlgSelectOpText		: "Text",
+DlgSelectOpValue	: "Valor",
+DlgSelectBtnAdd		: "Afegeix",
+DlgSelectBtnModify	: "Modifica",
+DlgSelectBtnUp		: "Amunt",
+DlgSelectBtnDown	: "Avall",
+DlgSelectBtnSetValue : "Selecciona per defecte",
+DlgSelectBtnDelete	: "Elimina",
+
+// Textarea Dialog
+DlgTextareaName	: "Nom",
+DlgTextareaCols	: "Columnes",
+DlgTextareaRows	: "Files",
+
+// Text Field Dialog
+DlgTextName			: "Nom",
+DlgTextValue		: "Valor",
+DlgTextCharWidth	: "Amplada de caràcter",
+DlgTextMaxChars		: "Màxim de caràcters",
+DlgTextType			: "Tipus",
+DlgTextTypeText		: "Text",
+DlgTextTypePass		: "Contrasenya",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Nom",
+DlgHiddenValue	: "Valor",
+
+// Bulleted List Dialog
+BulletedListProp	: "Propietats de la llista de pics",
+NumberedListProp	: "Propietats de llista numerada",
+DlgLstStart			: "Inici",
+DlgLstType			: "Tipus",
+DlgLstTypeCircle	: "Cercle",
+DlgLstTypeDisc		: "Disc",
+DlgLstTypeSquare	: "Quadrat",
+DlgLstTypeNumbers	: "Números (1, 2, 3)",
+DlgLstTypeLCase		: "Lletres minúscules (a, b, c)",
+DlgLstTypeUCase		: "Lletres majúscules (A, B, C)",
+DlgLstTypeSRoman	: "Números romans minúscules (i, ii, iii)",
+DlgLstTypeLRoman	: "Números romans majúscules (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "General",
+DlgDocBackTab		: "Fons",
+DlgDocColorsTab		: "Colors i marges",
+DlgDocMetaTab		: "Metadades",
+
+DlgDocPageTitle		: "Títol de la pàgina",
+DlgDocLangDir		: "Direcció idioma",
+DlgDocLangDirLTR	: "Esquerra a dreta (LTR)",
+DlgDocLangDirRTL	: "Dreta a esquerra (RTL)",
+DlgDocLangCode		: "Codi d'idioma",
+DlgDocCharSet		: "Codificació de conjunt de caràcters",
+DlgDocCharSetCE		: "Centreeuropeu",
+DlgDocCharSetCT		: "Xinès tradicional (Big5)",
+DlgDocCharSetCR		: "Ciríl·lic",
+DlgDocCharSetGR		: "Grec",
+DlgDocCharSetJP		: "Japonès",
+DlgDocCharSetKR		: "Coreà",
+DlgDocCharSetTR		: "Turc",
+DlgDocCharSetUN		: "Unicode (UTF-8)",
+DlgDocCharSetWE		: "Europeu occidental",
+DlgDocCharSetOther	: "Una altra codificació de caràcters",
+
+DlgDocDocType		: "Capçalera de tipus de document",
+DlgDocDocTypeOther	: "Un altra capçalera de tipus de document",
+DlgDocIncXHTML		: "Incloure declaracions XHTML",
+DlgDocBgColor		: "Color de fons",
+DlgDocBgImage		: "URL de la imatge de fons",
+DlgDocBgNoScroll	: "Fons fixe",
+DlgDocCText			: "Text",
+DlgDocCLink			: "Enllaç",
+DlgDocCVisited		: "Enllaç visitat",
+DlgDocCActive		: "Enllaç actiu",
+DlgDocMargins		: "Marges de pàgina",
+DlgDocMaTop			: "Cap",
+DlgDocMaLeft		: "Esquerra",
+DlgDocMaRight		: "Dreta",
+DlgDocMaBottom		: "Peu",
+DlgDocMeIndex		: "Mots clau per a indexació (separats per coma)",
+DlgDocMeDescr		: "Descripció del document",
+DlgDocMeAuthor		: "Autor",
+DlgDocMeCopy		: "Copyright",
+DlgDocPreview		: "Vista prèvia",
+
+// Templates Dialog
+Templates			: "Plantilles",
+DlgTemplatesTitle	: "Contingut plantilles",
+DlgTemplatesSelMsg	: "Si us plau, seleccioneu la plantilla per obrir en l'editor<br>(el contingut actual no serà enregistrat):",
+DlgTemplatesLoading	: "Carregant la llista de plantilles. Si us plau, espereu...",
+DlgTemplatesNoTpl	: "(No hi ha plantilles definides)",
+DlgTemplatesReplace	: "Reemplaça el contingut actual",
+
+// About Dialog
+DlgAboutAboutTab	: "Quant a",
+DlgAboutBrowserInfoTab	: "Informació del navegador",
+DlgAboutLicenseTab	: "Llicència",
+DlgAboutVersion		: "versió",
+DlgAboutInfo		: "Per a més informació aneu a"
+};
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/cs.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/cs.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/cs.js	(revision 1280)
@@ -0,0 +1,516 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Czech language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Skrýt panel nástrojů",
+ToolbarExpand		: "Zobrazit panel nástrojů",
+
+// Toolbar Items and Context Menu
+Save				: "Uložit",
+NewPage				: "Nová stránka",
+Preview				: "Náhled",
+Cut					: "Vyjmout",
+Copy				: "Kopírovat",
+Paste				: "Vložit",
+PasteText			: "Vložit jako čistý text",
+PasteWord			: "Vložit z Wordu",
+Print				: "Tisk",
+SelectAll			: "Vybrat vše",
+RemoveFormat		: "Odstranit formátování",
+InsertLinkLbl		: "Odkaz",
+InsertLink			: "Vložit/změnit odkaz",
+RemoveLink			: "Odstranit odkaz",
+Anchor				: "Vložít/změnit záložku",
+AnchorDelete		: "Remove Anchor",	//MISSING
+InsertImageLbl		: "Obrázek",
+InsertImage			: "Vložit/změnit obrázek",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Vložit/Upravit Flash",
+InsertTableLbl		: "Tabulka",
+InsertTable			: "Vložit/změnit tabulku",
+InsertLineLbl		: "Linka",
+InsertLine			: "Vložit vodorovnou linku",
+InsertSpecialCharLbl: "Speciální znaky",
+InsertSpecialChar	: "Vložit speciální znaky",
+InsertSmileyLbl		: "Smajlíky",
+InsertSmiley		: "Vložit smajlík",
+About				: "O aplikaci FCKeditor",
+Bold				: "Tučné",
+Italic				: "Kurzíva",
+Underline			: "Podtržené",
+StrikeThrough		: "Přeškrtnuté",
+Subscript			: "Dolní index",
+Superscript			: "Horní index",
+LeftJustify			: "Zarovnat vlevo",
+CenterJustify		: "Zarovnat na střed",
+RightJustify		: "Zarovnat vpravo",
+BlockJustify		: "Zarovnat do bloku",
+DecreaseIndent		: "Zmenšit odsazení",
+IncreaseIndent		: "Zvětšit odsazení",
+Blockquote			: "Blockquote",	//MISSING
+Undo				: "Zpět",
+Redo				: "Znovu",
+NumberedListLbl		: "Číslování",
+NumberedList		: "Vložit/odstranit číslovaný seznam",
+BulletedListLbl		: "Odrážky",
+BulletedList		: "Vložit/odstranit odrážky",
+ShowTableBorders	: "Zobrazit okraje tabulek",
+ShowDetails			: "Zobrazit podrobnosti",
+Style				: "Styl",
+FontFormat			: "Formát",
+Font				: "Písmo",
+FontSize			: "Velikost",
+TextColor			: "Barva textu",
+BGColor				: "Barva pozadí",
+Source				: "Zdroj",
+Find				: "Hledat",
+Replace				: "Nahradit",
+SpellCheck			: "Zkontrolovat pravopis",
+UniversalKeyboard	: "Univerzální klávesnice",
+PageBreakLbl		: "Konec stránky",
+PageBreak			: "Vložit konec stránky",
+
+Form			: "Formulář",
+Checkbox		: "Zaškrtávací políčko",
+RadioButton		: "Přepínač",
+TextField		: "Textové pole",
+Textarea		: "Textová oblast",
+HiddenField		: "Skryté pole",
+Button			: "Tlačítko",
+SelectionField	: "Seznam",
+ImageButton		: "Obrázkové tlačítko",
+
+FitWindow		: "Maximalizovat velikost editoru",
+ShowBlocks		: "Show Blocks",	//MISSING
+
+// Context Menu
+EditLink			: "Změnit odkaz",
+CellCM				: "Buňka",
+RowCM				: "Řádek",
+ColumnCM			: "Sloupec",
+InsertRowAfter		: "Insert Row After",	//MISSING
+InsertRowBefore		: "Insert Row Before",	//MISSING
+DeleteRows			: "Smazat řádek",
+InsertColumnAfter	: "Insert Column After",	//MISSING
+InsertColumnBefore	: "Insert Column Before",	//MISSING
+DeleteColumns		: "Smazat sloupec",
+InsertCellAfter		: "Insert Cell After",	//MISSING
+InsertCellBefore	: "Insert Cell Before",	//MISSING
+DeleteCells			: "Smazat buňky",
+MergeCells			: "Sloučit buňky",
+MergeRight			: "Merge Right",	//MISSING
+MergeDown			: "Merge Down",	//MISSING
+HorizontalSplitCell	: "Split Cell Horizontally",	//MISSING
+VerticalSplitCell	: "Split Cell Vertically",	//MISSING
+TableDelete			: "Smazat tabulku",
+CellProperties		: "Vlastnosti buňky",
+TableProperties		: "Vlastnosti tabulky",
+ImageProperties		: "Vlastnosti obrázku",
+FlashProperties		: "Vlastnosti Flashe",
+
+AnchorProp			: "Vlastnosti záložky",
+ButtonProp			: "Vlastnosti tlačítka",
+CheckboxProp		: "Vlastnosti zaškrtávacího políčka",
+HiddenFieldProp		: "Vlastnosti skrytého pole",
+RadioButtonProp		: "Vlastnosti přepínače",
+ImageButtonProp		: "Vlastností obrázkového tlačítka",
+TextFieldProp		: "Vlastnosti textového pole",
+SelectionFieldProp	: "Vlastnosti seznamu",
+TextareaProp		: "Vlastnosti textové oblasti",
+FormProp			: "Vlastnosti formuláře",
+
+FontFormats			: "Normální;Naformátováno;Adresa;Nadpis 1;Nadpis 2;Nadpis 3;Nadpis 4;Nadpis 5;Nadpis 6;Normální (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "Probíhá zpracování XHTML. Prosím čekejte...",
+Done				: "Hotovo",
+PasteWordConfirm	: "Jak je vidět, vkládaný text je kopírován z Wordu. Chcete jej před vložením vyčistit?",
+NotCompatiblePaste	: "Tento příkaz je dostupný pouze v Internet Exploreru verze 5.5 nebo vyšší. Chcete vložit text bez vyčištění?",
+UnknownToolbarItem	: "Neznámá položka panelu nástrojů \"%1\"",
+UnknownCommand		: "Neznámý příkaz \"%1\"",
+NotImplemented		: "Příkaz není implementován",
+UnknownToolbarSet	: "Panel nástrojů \"%1\" neexistuje",
+NoActiveX			: "Nastavení bezpečnosti Vašeho prohlížeče omezuje funkčnost některých jeho možností. Je třeba zapnout volbu \"Spouštět ovládáací prvky ActiveX a moduly plug-in\", jinak nebude možné využívat všechny dosputné schopnosti editoru.",
+BrowseServerBlocked : "Průzkumník zdrojů nelze otevřít. Prověřte, zda nemáte aktivováno blokování popup oken.",
+DialogBlocked		: "Nelze otevřít dialogové okno. Prověřte, zda nemáte aktivováno blokování popup oken.",
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Storno",
+DlgBtnClose			: "Zavřít",
+DlgBtnBrowseServer	: "Vybrat na serveru",
+DlgAdvancedTag		: "Rozšířené",
+DlgOpOther			: "<Ostatní>",
+DlgInfoTab			: "Info",
+DlgAlertUrl			: "Prosím vložte URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<nenastaveno>",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Orientace jazyka",
+DlgGenLangDirLtr	: "Zleva do prava (LTR)",
+DlgGenLangDirRtl	: "Zprava do leva (RTL)",
+DlgGenLangCode		: "Kód jazyka",
+DlgGenAccessKey		: "Přístupový klíč",
+DlgGenName			: "Jméno",
+DlgGenTabIndex		: "Pořadí prvku",
+DlgGenLongDescr		: "Dlouhý popis URL",
+DlgGenClass			: "Třída stylu",
+DlgGenTitle			: "Pomocný titulek",
+DlgGenContType		: "Pomocný typ obsahu",
+DlgGenLinkCharset	: "Přiřazená znaková sada",
+DlgGenStyle			: "Styl",
+
+// Image Dialog
+DlgImgTitle			: "Vlastnosti obrázku",
+DlgImgInfoTab		: "Informace o obrázku",
+DlgImgBtnUpload		: "Odeslat na server",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Odeslat",
+DlgImgAlt			: "Alternativní text",
+DlgImgWidth			: "Šířka",
+DlgImgHeight		: "Výška",
+DlgImgLockRatio		: "Zámek",
+DlgBtnResetSize		: "Původní velikost",
+DlgImgBorder		: "Okraje",
+DlgImgHSpace		: "H-mezera",
+DlgImgVSpace		: "V-mezera",
+DlgImgAlign			: "Zarovnání",
+DlgImgAlignLeft		: "Vlevo",
+DlgImgAlignAbsBottom: "Zcela dolů",
+DlgImgAlignAbsMiddle: "Doprostřed",
+DlgImgAlignBaseline	: "Na účaří",
+DlgImgAlignBottom	: "Dolů",
+DlgImgAlignMiddle	: "Na střed",
+DlgImgAlignRight	: "Vpravo",
+DlgImgAlignTextTop	: "Na horní okraj textu",
+DlgImgAlignTop		: "Nahoru",
+DlgImgPreview		: "Náhled",
+DlgImgAlertUrl		: "Zadejte prosím URL obrázku",
+DlgImgLinkTab		: "Odkaz",
+
+// Flash Dialog
+DlgFlashTitle		: "Vlastnosti Flashe",
+DlgFlashChkPlay		: "Automatické spuštění",
+DlgFlashChkLoop		: "Opakování",
+DlgFlashChkMenu		: "Nabídka Flash",
+DlgFlashScale		: "Zobrazit",
+DlgFlashScaleAll	: "Zobrazit vše",
+DlgFlashScaleNoBorder	: "Bez okraje",
+DlgFlashScaleFit	: "Přizpůsobit",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Odkaz",
+DlgLnkInfoTab		: "Informace o odkazu",
+DlgLnkTargetTab		: "Cíl",
+
+DlgLnkType			: "Typ odkazu",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Kotva v této stránce",
+DlgLnkTypeEMail		: "E-Mail",
+DlgLnkProto			: "Protokol",
+DlgLnkProtoOther	: "<jiný>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Vybrat kotvu",
+DlgLnkAnchorByName	: "Podle jména kotvy",
+DlgLnkAnchorById	: "Podle Id objektu",
+DlgLnkNoAnchors		: "(Ve stránce žádná kotva není definována)",
+DlgLnkEMail			: "E-Mailová adresa",
+DlgLnkEMailSubject	: "Předmět zprávy",
+DlgLnkEMailBody		: "Tělo zprávy",
+DlgLnkUpload		: "Odeslat",
+DlgLnkBtnUpload		: "Odeslat na Server",
+
+DlgLnkTarget		: "Cíl",
+DlgLnkTargetFrame	: "<rámec>",
+DlgLnkTargetPopup	: "<vyskakovací okno>",
+DlgLnkTargetBlank	: "Nové okno (_blank)",
+DlgLnkTargetParent	: "Rodičovské okno (_parent)",
+DlgLnkTargetSelf	: "Stejné okno (_self)",
+DlgLnkTargetTop		: "Hlavní okno (_top)",
+DlgLnkTargetFrameName	: "Název cílového rámu",
+DlgLnkPopWinName	: "Název vyskakovacího okna",
+DlgLnkPopWinFeat	: "Vlastnosti vyskakovacího okna",
+DlgLnkPopResize		: "Měnitelná velikost",
+DlgLnkPopLocation	: "Panel umístění",
+DlgLnkPopMenu		: "Panel nabídky",
+DlgLnkPopScroll		: "Posuvníky",
+DlgLnkPopStatus		: "Stavový řádek",
+DlgLnkPopToolbar	: "Panel nástrojů",
+DlgLnkPopFullScrn	: "Celá obrazovka (IE)",
+DlgLnkPopDependent	: "Závislost (Netscape)",
+DlgLnkPopWidth		: "Šířka",
+DlgLnkPopHeight		: "Výška",
+DlgLnkPopLeft		: "Levý okraj",
+DlgLnkPopTop		: "Horní okraj",
+
+DlnLnkMsgNoUrl		: "Zadejte prosím URL odkazu",
+DlnLnkMsgNoEMail	: "Zadejte prosím e-mailovou adresu",
+DlnLnkMsgNoAnchor	: "Vyberte prosím kotvu",
+DlnLnkMsgInvPopName	: "Název vyskakovacího okna musí začínat písmenem a nesmí obsahovat mezery",
+
+// Color Dialog
+DlgColorTitle		: "Výběr barvy",
+DlgColorBtnClear	: "Vymazat",
+DlgColorHighlight	: "Zvýrazněná",
+DlgColorSelected	: "Vybraná",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Vkládání smajlíků",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Výběr speciálního znaku",
+
+// Table Dialog
+DlgTableTitle		: "Vlastnosti tabulky",
+DlgTableRows		: "Řádky",
+DlgTableColumns		: "Sloupce",
+DlgTableBorder		: "Ohraničení",
+DlgTableAlign		: "Zarovnání",
+DlgTableAlignNotSet	: "<nenastaveno>",
+DlgTableAlignLeft	: "Vlevo",
+DlgTableAlignCenter	: "Na střed",
+DlgTableAlignRight	: "Vpravo",
+DlgTableWidth		: "Šířka",
+DlgTableWidthPx		: "bodů",
+DlgTableWidthPc		: "procent",
+DlgTableHeight		: "Výška",
+DlgTableCellSpace	: "Vzdálenost buněk",
+DlgTableCellPad		: "Odsazení obsahu",
+DlgTableCaption		: "Popis",
+DlgTableSummary		: "Souhrn",
+
+// Table Cell Dialog
+DlgCellTitle		: "Vlastnosti buňky",
+DlgCellWidth		: "Šířka",
+DlgCellWidthPx		: "bodů",
+DlgCellWidthPc		: "procent",
+DlgCellHeight		: "Výška",
+DlgCellWordWrap		: "Zalamování",
+DlgCellWordWrapNotSet	: "<nenanstaveno>",
+DlgCellWordWrapYes	: "Ano",
+DlgCellWordWrapNo	: "Ne",
+DlgCellHorAlign		: "Vodorovné zarovnání",
+DlgCellHorAlignNotSet	: "<nenastaveno>",
+DlgCellHorAlignLeft	: "Vlevo",
+DlgCellHorAlignCenter	: "Na střed",
+DlgCellHorAlignRight: "Vpravo",
+DlgCellVerAlign		: "Svislé zarovnání",
+DlgCellVerAlignNotSet	: "<nenastaveno>",
+DlgCellVerAlignTop	: "Nahoru",
+DlgCellVerAlignMiddle	: "Doprostřed",
+DlgCellVerAlignBottom	: "Dolů",
+DlgCellVerAlignBaseline	: "Na účaří",
+DlgCellRowSpan		: "Sloučené řádky",
+DlgCellCollSpan		: "Sloučené sloupce",
+DlgCellBackColor	: "Barva pozadí",
+DlgCellBorderColor	: "Barva ohraničení",
+DlgCellBtnSelect	: "Výběr...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Find and Replace",	//MISSING
+
+// Find Dialog
+DlgFindTitle		: "Hledat",
+DlgFindFindBtn		: "Hledat",
+DlgFindNotFoundMsg	: "Hledaný text nebyl nalezen.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Nahradit",
+DlgReplaceFindLbl		: "Co hledat:",
+DlgReplaceReplaceLbl	: "Čím nahradit:",
+DlgReplaceCaseChk		: "Rozlišovat velikost písma",
+DlgReplaceReplaceBtn	: "Nahradit",
+DlgReplaceReplAllBtn	: "Nahradit vše",
+DlgReplaceWordChk		: "Pouze celá slova",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "Bezpečnostní nastavení Vašeho prohlížeče nedovolují editoru spustit funkci pro vyjmutí zvoleného textu do schránky. Prosím vyjměte zvolený text do schránky pomocí klávesnice (Ctrl+X).",
+PasteErrorCopy	: "Bezpečnostní nastavení Vašeho prohlížeče nedovolují editoru spustit funkci pro kopírování zvoleného textu do schránky. Prosím zkopírujte zvolený text do schránky pomocí klávesnice (Ctrl+C).",
+
+PasteAsText		: "Vložit jako čistý text",
+PasteFromWord	: "Vložit text z Wordu",
+
+DlgPasteMsg2	: "Do následujícího pole vložte požadovaný obsah pomocí klávesnice (<STRONG>Ctrl+V</STRONG>) a stiskněte <STRONG>OK</STRONG>.",
+DlgPasteSec		: "Z důvodů nastavení bezpečnosti Vašeho prohlížeče nemůže editor přistupovat přímo do schránky. Obsah schránky prosím vložte znovu do tohoto okna.",
+DlgPasteIgnoreFont		: "Ignorovat písmo",
+DlgPasteRemoveStyles	: "Odstranit styly",
+DlgPasteCleanBox		: "Vyčistit",
+
+// Color Picker
+ColorAutomatic	: "Automaticky",
+ColorMoreColors	: "Více barev...",
+
+// Document Properties
+DocProps		: "Vlastnosti dokumentu",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Vlastnosti záložky",
+DlgAnchorName		: "Název záložky",
+DlgAnchorErrorName	: "Zadejte prosím název záložky",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Není ve slovníku",
+DlgSpellChangeTo		: "Změnit na",
+DlgSpellBtnIgnore		: "Přeskočit",
+DlgSpellBtnIgnoreAll	: "Přeskakovat vše",
+DlgSpellBtnReplace		: "Zaměnit",
+DlgSpellBtnReplaceAll	: "Zaměňovat vše",
+DlgSpellBtnUndo			: "Zpět",
+DlgSpellNoSuggestions	: "- žádné návrhy -",
+DlgSpellProgress		: "Probíhá kontrola pravopisu...",
+DlgSpellNoMispell		: "Kontrola pravopisu dokončena: Žádné pravopisné chyby nenalezeny",
+DlgSpellNoChanges		: "Kontrola pravopisu dokončena: Beze změn",
+DlgSpellOneChange		: "Kontrola pravopisu dokončena: Jedno slovo změněno",
+DlgSpellManyChanges		: "Kontrola pravopisu dokončena: %1 slov změněno",
+
+IeSpellDownload			: "Kontrola pravopisu není nainstalována. Chcete ji nyní stáhnout?",
+
+// Button Dialog
+DlgButtonText		: "Popisek",
+DlgButtonType		: "Typ",
+DlgButtonTypeBtn	: "Tlačítko",
+DlgButtonTypeSbm	: "Odeslat",
+DlgButtonTypeRst	: "Obnovit",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Název",
+DlgCheckboxValue	: "Hodnota",
+DlgCheckboxSelected	: "Zaškrtnuto",
+
+// Form Dialog
+DlgFormName		: "Název",
+DlgFormAction	: "Akce",
+DlgFormMethod	: "Metoda",
+
+// Select Field Dialog
+DlgSelectName		: "Název",
+DlgSelectValue		: "Hodnota",
+DlgSelectSize		: "Velikost",
+DlgSelectLines		: "Řádků",
+DlgSelectChkMulti	: "Povolit mnohonásobné výběry",
+DlgSelectOpAvail	: "Dostupná nastavení",
+DlgSelectOpText		: "Text",
+DlgSelectOpValue	: "Hodnota",
+DlgSelectBtnAdd		: "Přidat",
+DlgSelectBtnModify	: "Změnit",
+DlgSelectBtnUp		: "Nahoru",
+DlgSelectBtnDown	: "Dolů",
+DlgSelectBtnSetValue : "Nastavit jako vybranou hodnotu",
+DlgSelectBtnDelete	: "Smazat",
+
+// Textarea Dialog
+DlgTextareaName	: "Název",
+DlgTextareaCols	: "Sloupců",
+DlgTextareaRows	: "Řádků",
+
+// Text Field Dialog
+DlgTextName			: "Název",
+DlgTextValue		: "Hodnota",
+DlgTextCharWidth	: "Šířka ve znacích",
+DlgTextMaxChars		: "Maximální počet znaků",
+DlgTextType			: "Typ",
+DlgTextTypeText		: "Text",
+DlgTextTypePass		: "Heslo",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Název",
+DlgHiddenValue	: "Hodnota",
+
+// Bulleted List Dialog
+BulletedListProp	: "Vlastnosti odrážek",
+NumberedListProp	: "Vlastnosti číslovaného seznamu",
+DlgLstStart			: "Start",	//MISSING
+DlgLstType			: "Typ",
+DlgLstTypeCircle	: "Kružnice",
+DlgLstTypeDisc		: "Kruh",
+DlgLstTypeSquare	: "Čtverec",
+DlgLstTypeNumbers	: "Čísla (1, 2, 3)",
+DlgLstTypeLCase		: "Malá písmena (a, b, c)",
+DlgLstTypeUCase		: "Velká písmena (A, B, C)",
+DlgLstTypeSRoman	: "Malé římská číslice (i, ii, iii)",
+DlgLstTypeLRoman	: "Velké římské číslice (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Obecné",
+DlgDocBackTab		: "Pozadí",
+DlgDocColorsTab		: "Barvy a okraje",
+DlgDocMetaTab		: "Metadata",
+
+DlgDocPageTitle		: "Titulek stránky",
+DlgDocLangDir		: "Směr jazyku",
+DlgDocLangDirLTR	: "Zleva do prava ",
+DlgDocLangDirRTL	: "Zprava doleva",
+DlgDocLangCode		: "Kód jazyku",
+DlgDocCharSet		: "Znaková sada",
+DlgDocCharSetCE		: "Středoevropské jazyky",
+DlgDocCharSetCT		: "Tradiční čínština (Big5)",
+DlgDocCharSetCR		: "Cyrilice",
+DlgDocCharSetGR		: "Řečtina",
+DlgDocCharSetJP		: "Japonština",
+DlgDocCharSetKR		: "Korejština",
+DlgDocCharSetTR		: "Turečtina",
+DlgDocCharSetUN		: "Unicode (UTF-8)",
+DlgDocCharSetWE		: "Západoevropské jazyky",
+DlgDocCharSetOther	: "Další znaková sada",
+
+DlgDocDocType		: "Typ dokumentu",
+DlgDocDocTypeOther	: "Jiný typ dokumetu",
+DlgDocIncXHTML		: "Zahrnou deklarace XHTML",
+DlgDocBgColor		: "Barva pozadí",
+DlgDocBgImage		: "URL obrázku na pozadí",
+DlgDocBgNoScroll	: "Nerolovatelné pozadí",
+DlgDocCText			: "Text",
+DlgDocCLink			: "Odkaz",
+DlgDocCVisited		: "Navštívený odkaz",
+DlgDocCActive		: "Vybraný odkaz",
+DlgDocMargins		: "Okraje stránky",
+DlgDocMaTop			: "Horní",
+DlgDocMaLeft		: "Levý",
+DlgDocMaRight		: "Pravý",
+DlgDocMaBottom		: "Dolní",
+DlgDocMeIndex		: "Klíčová slova (oddělená čárkou)",
+DlgDocMeDescr		: "Popis dokumentu",
+DlgDocMeAuthor		: "Autor",
+DlgDocMeCopy		: "Autorská práva",
+DlgDocPreview		: "Náhled",
+
+// Templates Dialog
+Templates			: "Šablony",
+DlgTemplatesTitle	: "Šablony obsahu",
+DlgTemplatesSelMsg	: "Prosím zvolte šablonu pro otevření v editoru<br>(aktuální obsah editoru bude ztracen):",
+DlgTemplatesLoading	: "Nahrávám přeheld šablon. Prosím čekejte...",
+DlgTemplatesNoTpl	: "(Není definována žádná šablona)",
+DlgTemplatesReplace	: "Nahradit aktuální obsah",
+
+// About Dialog
+DlgAboutAboutTab	: "O aplikaci",
+DlgAboutBrowserInfoTab	: "Informace o prohlížeči",
+DlgAboutLicenseTab	: "Licence",
+DlgAboutVersion		: "verze",
+DlgAboutInfo		: "Více informací získáte na"
+};
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/da.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/da.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/da.js	(revision 1280)
@@ -0,0 +1,516 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Danish language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Skjul værktøjslinier",
+ToolbarExpand		: "Vis værktøjslinier",
+
+// Toolbar Items and Context Menu
+Save				: "Gem",
+NewPage				: "Ny side",
+Preview				: "Vis eksempel",
+Cut					: "Klip",
+Copy				: "Kopier",
+Paste				: "Indsæt",
+PasteText			: "Indsæt som ikke-formateret tekst",
+PasteWord			: "Indsæt fra Word",
+Print				: "Udskriv",
+SelectAll			: "Vælg alt",
+RemoveFormat		: "Fjern formatering",
+InsertLinkLbl		: "Hyperlink",
+InsertLink			: "Indsæt/rediger hyperlink",
+RemoveLink			: "Fjern hyperlink",
+Anchor				: "Indsæt/rediger bogmærke",
+AnchorDelete		: "Remove Anchor",	//MISSING
+InsertImageLbl		: "Indsæt billede",
+InsertImage			: "Indsæt/rediger billede",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Indsæt/rediger Flash",
+InsertTableLbl		: "Table",
+InsertTable			: "Indsæt/rediger tabel",
+InsertLineLbl		: "Linie",
+InsertLine			: "Indsæt vandret linie",
+InsertSpecialCharLbl: "Symbol",
+InsertSpecialChar	: "Indsæt symbol",
+InsertSmileyLbl		: "Smiley",
+InsertSmiley		: "Indsæt smiley",
+About				: "Om FCKeditor",
+Bold				: "Fed",
+Italic				: "Kursiv",
+Underline			: "Understreget",
+StrikeThrough		: "Overstreget",
+Subscript			: "Sænket skrift",
+Superscript			: "Hævet skrift",
+LeftJustify			: "Venstrestillet",
+CenterJustify		: "Centreret",
+RightJustify		: "Højrestillet",
+BlockJustify		: "Lige margener",
+DecreaseIndent		: "Formindsk indrykning",
+IncreaseIndent		: "Forøg indrykning",
+Blockquote			: "Blockquote",	//MISSING
+Undo				: "Fortryd",
+Redo				: "Annuller fortryd",
+NumberedListLbl		: "Talopstilling",
+NumberedList		: "Indsæt/fjern talopstilling",
+BulletedListLbl		: "Punktopstilling",
+BulletedList		: "Indsæt/fjern punktopstilling",
+ShowTableBorders	: "Vis tabelkanter",
+ShowDetails			: "Vis detaljer",
+Style				: "Typografi",
+FontFormat			: "Formatering",
+Font				: "Skrifttype",
+FontSize			: "Skriftstørrelse",
+TextColor			: "Tekstfarve",
+BGColor				: "Baggrundsfarve",
+Source				: "Kilde",
+Find				: "Søg",
+Replace				: "Erstat",
+SpellCheck			: "Stavekontrol",
+UniversalKeyboard	: "Universaltastatur",
+PageBreakLbl		: "Sidskift",
+PageBreak			: "Indsæt sideskift",
+
+Form			: "Indsæt formular",
+Checkbox		: "Indsæt afkrydsningsfelt",
+RadioButton		: "Indsæt alternativknap",
+TextField		: "Indsæt tekstfelt",
+Textarea		: "Indsæt tekstboks",
+HiddenField		: "Indsæt skjult felt",
+Button			: "Indsæt knap",
+SelectionField	: "Indsæt liste",
+ImageButton		: "Indsæt billedknap",
+
+FitWindow		: "Maksimer editor vinduet",
+ShowBlocks		: "Show Blocks",	//MISSING
+
+// Context Menu
+EditLink			: "Rediger hyperlink",
+CellCM				: "Celle",
+RowCM				: "Række",
+ColumnCM			: "Kolonne",
+InsertRowAfter		: "Insert Row After",	//MISSING
+InsertRowBefore		: "Insert Row Before",	//MISSING
+DeleteRows			: "Slet række",
+InsertColumnAfter	: "Insert Column After",	//MISSING
+InsertColumnBefore	: "Insert Column Before",	//MISSING
+DeleteColumns		: "Slet kolonne",
+InsertCellAfter		: "Insert Cell After",	//MISSING
+InsertCellBefore	: "Insert Cell Before",	//MISSING
+DeleteCells			: "Slet celle",
+MergeCells			: "Flet celler",
+MergeRight			: "Merge Right",	//MISSING
+MergeDown			: "Merge Down",	//MISSING
+HorizontalSplitCell	: "Split Cell Horizontally",	//MISSING
+VerticalSplitCell	: "Split Cell Vertically",	//MISSING
+TableDelete			: "Slet tabel",
+CellProperties		: "Egenskaber for celle",
+TableProperties		: "Egenskaber for tabel",
+ImageProperties		: "Egenskaber for billede",
+FlashProperties		: "Egenskaber for Flash",
+
+AnchorProp			: "Egenskaber for bogmærke",
+ButtonProp			: "Egenskaber for knap",
+CheckboxProp		: "Egenskaber for afkrydsningsfelt",
+HiddenFieldProp		: "Egenskaber for skjult felt",
+RadioButtonProp		: "Egenskaber for alternativknap",
+ImageButtonProp		: "Egenskaber for billedknap",
+TextFieldProp		: "Egenskaber for tekstfelt",
+SelectionFieldProp	: "Egenskaber for liste",
+TextareaProp		: "Egenskaber for tekstboks",
+FormProp			: "Egenskaber for formular",
+
+FontFormats			: "Normal;Formateret;Adresse;Overskrift 1;Overskrift 2;Overskrift 3;Overskrift 4;Overskrift 5;Overskrift 6;Normal (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "Behandler XHTML...",
+Done				: "Færdig",
+PasteWordConfirm	: "Den tekst du forsøger at indsætte ser ud til at komme fra Word.<br>Vil du rense teksten før den indsættes?",
+NotCompatiblePaste	: "Denne kommando er tilgændelig i Internet Explorer 5.5 eller senere.<br>Vil du indsætte teksten uden at rense den ?",
+UnknownToolbarItem	: "Ukendt værktøjslinjeobjekt \"%1\"!",
+UnknownCommand		: "Ukendt kommandonavn \"%1\"!",
+NotImplemented		: "Kommandoen er ikke implementeret!",
+UnknownToolbarSet	: "Værktøjslinjen \"%1\" eksisterer ikke!",
+NoActiveX			: "Din browsers sikkerhedsindstillinger begrænser nogle af editorens muligheder.<br>Slå \"Kør ActiveX-objekter og plug-ins\" til, ellers vil du opleve fejl og manglende muligheder.",
+BrowseServerBlocked : "Browseren kunne ikke åbne de nødvendige ressourcer!<br>Slå pop-up blokering fra.",
+DialogBlocked		: "Dialogvinduet kunne ikke åbnes!<br>Slå pop-up blokering fra.",
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Annuller",
+DlgBtnClose			: "Luk",
+DlgBtnBrowseServer	: "Gennemse...",
+DlgAdvancedTag		: "Avanceret",
+DlgOpOther			: "<Andet>",
+DlgInfoTab			: "Generelt",
+DlgAlertUrl			: "Indtast URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<intet valgt>",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Tekstretning",
+DlgGenLangDirLtr	: "Fra venstre mod højre (LTR)",
+DlgGenLangDirRtl	: "Fra højre mod venstre (RTL)",
+DlgGenLangCode		: "Sprogkode",
+DlgGenAccessKey		: "Genvejstast",
+DlgGenName			: "Navn",
+DlgGenTabIndex		: "Tabulator indeks",
+DlgGenLongDescr		: "Udvidet beskrivelse",
+DlgGenClass			: "Typografiark",
+DlgGenTitle			: "Titel",
+DlgGenContType		: "Indholdstype",
+DlgGenLinkCharset	: "Tegnsæt",
+DlgGenStyle			: "Typografi",
+
+// Image Dialog
+DlgImgTitle			: "Egenskaber for billede",
+DlgImgInfoTab		: "Generelt",
+DlgImgBtnUpload		: "Upload",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Upload",
+DlgImgAlt			: "Alternativ tekst",
+DlgImgWidth			: "Bredde",
+DlgImgHeight		: "Højde",
+DlgImgLockRatio		: "Lås størrelsesforhold",
+DlgBtnResetSize		: "Nulstil størrelse",
+DlgImgBorder		: "Ramme",
+DlgImgHSpace		: "HMargen",
+DlgImgVSpace		: "VMargen",
+DlgImgAlign			: "Justering",
+DlgImgAlignLeft		: "Venstre",
+DlgImgAlignAbsBottom: "Absolut nederst",
+DlgImgAlignAbsMiddle: "Absolut centreret",
+DlgImgAlignBaseline	: "Grundlinje",
+DlgImgAlignBottom	: "Nederst",
+DlgImgAlignMiddle	: "Centreret",
+DlgImgAlignRight	: "Højre",
+DlgImgAlignTextTop	: "Toppen af teksten",
+DlgImgAlignTop		: "Øverst",
+DlgImgPreview		: "Vis eksempel",
+DlgImgAlertUrl		: "Indtast stien til billedet",
+DlgImgLinkTab		: "Hyperlink",
+
+// Flash Dialog
+DlgFlashTitle		: "Egenskaber for Flash",
+DlgFlashChkPlay		: "Automatisk afspilning",
+DlgFlashChkLoop		: "Gentagelse",
+DlgFlashChkMenu		: "Vis Flash menu",
+DlgFlashScale		: "Skalér",
+DlgFlashScaleAll	: "Vis alt",
+DlgFlashScaleNoBorder	: "Ingen ramme",
+DlgFlashScaleFit	: "Tilpas størrelse",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Egenskaber for hyperlink",
+DlgLnkInfoTab		: "Generelt",
+DlgLnkTargetTab		: "Mål",
+
+DlgLnkType			: "Hyperlink type",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Bogmærke på denne side",
+DlgLnkTypeEMail		: "E-mail",
+DlgLnkProto			: "Protokol",
+DlgLnkProtoOther	: "<anden>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Vælg et anker",
+DlgLnkAnchorByName	: "Efter anker navn",
+DlgLnkAnchorById	: "Efter element Id",
+DlgLnkNoAnchors		: "(Ingen bogmærker dokumentet)",
+DlgLnkEMail			: "E-mailadresse",
+DlgLnkEMailSubject	: "Emne",
+DlgLnkEMailBody		: "Brødtekst",
+DlgLnkUpload		: "Upload",
+DlgLnkBtnUpload		: "Upload",
+
+DlgLnkTarget		: "Mål",
+DlgLnkTargetFrame	: "<ramme>",
+DlgLnkTargetPopup	: "<popup vindue>",
+DlgLnkTargetBlank	: "Nyt vindue (_blank)",
+DlgLnkTargetParent	: "Overordnet ramme (_parent)",
+DlgLnkTargetSelf	: "Samme vindue (_self)",
+DlgLnkTargetTop		: "Hele vinduet (_top)",
+DlgLnkTargetFrameName	: "Destinationsvinduets navn",
+DlgLnkPopWinName	: "Pop-up vinduets navn",
+DlgLnkPopWinFeat	: "Egenskaber for pop-up",
+DlgLnkPopResize		: "Skalering",
+DlgLnkPopLocation	: "Adresselinje",
+DlgLnkPopMenu		: "Menulinje",
+DlgLnkPopScroll		: "Scrollbars",
+DlgLnkPopStatus		: "Statuslinje",
+DlgLnkPopToolbar	: "Værktøjslinje",
+DlgLnkPopFullScrn	: "Fuld skærm (IE)",
+DlgLnkPopDependent	: "Koblet/dependent (Netscape)",
+DlgLnkPopWidth		: "Bredde",
+DlgLnkPopHeight		: "Højde",
+DlgLnkPopLeft		: "Position fra venstre",
+DlgLnkPopTop		: "Position fra toppen",
+
+DlnLnkMsgNoUrl		: "Indtast hyperlink URL!",
+DlnLnkMsgNoEMail	: "Indtast e-mailaddresse!",
+DlnLnkMsgNoAnchor	: "Vælg bogmærke!",
+DlnLnkMsgInvPopName	: "The popup name must begin with an alphabetic character and must not contain spaces",	//MISSING
+
+// Color Dialog
+DlgColorTitle		: "Vælg farve",
+DlgColorBtnClear	: "Nulstil",
+DlgColorHighlight	: "Markeret",
+DlgColorSelected	: "Valgt",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Vælg smiley",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Vælg symbol",
+
+// Table Dialog
+DlgTableTitle		: "Egenskaber for tabel",
+DlgTableRows		: "Rækker",
+DlgTableColumns		: "Kolonner",
+DlgTableBorder		: "Rammebredde",
+DlgTableAlign		: "Justering",
+DlgTableAlignNotSet	: "<intet valgt>",
+DlgTableAlignLeft	: "Venstrestillet",
+DlgTableAlignCenter	: "Centreret",
+DlgTableAlignRight	: "Højrestillet",
+DlgTableWidth		: "Bredde",
+DlgTableWidthPx		: "pixels",
+DlgTableWidthPc		: "procent",
+DlgTableHeight		: "Højde",
+DlgTableCellSpace	: "Celleafstand",
+DlgTableCellPad		: "Cellemargen",
+DlgTableCaption		: "Titel",
+DlgTableSummary		: "Resume",
+
+// Table Cell Dialog
+DlgCellTitle		: "Egenskaber for celle",
+DlgCellWidth		: "Bredde",
+DlgCellWidthPx		: "pixels",
+DlgCellWidthPc		: "procent",
+DlgCellHeight		: "Højde",
+DlgCellWordWrap		: "Orddeling",
+DlgCellWordWrapNotSet	: "<intet valgt>",
+DlgCellWordWrapYes	: "Ja",
+DlgCellWordWrapNo	: "Nej",
+DlgCellHorAlign		: "Vandret justering",
+DlgCellHorAlignNotSet	: "<intet valgt>",
+DlgCellHorAlignLeft	: "Venstrestillet",
+DlgCellHorAlignCenter	: "Centreret",
+DlgCellHorAlignRight: "Højrestillet",
+DlgCellVerAlign		: "Lodret justering",
+DlgCellVerAlignNotSet	: "<intet valgt>",
+DlgCellVerAlignTop	: "Øverst",
+DlgCellVerAlignMiddle	: "Centreret",
+DlgCellVerAlignBottom	: "Nederst",
+DlgCellVerAlignBaseline	: "Grundlinje",
+DlgCellRowSpan		: "Højde i antal rækker",
+DlgCellCollSpan		: "Bredde i antal kolonner",
+DlgCellBackColor	: "Baggrundsfarve",
+DlgCellBorderColor	: "Rammefarve",
+DlgCellBtnSelect	: "Vælg...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Find and Replace",	//MISSING
+
+// Find Dialog
+DlgFindTitle		: "Find",
+DlgFindFindBtn		: "Find",
+DlgFindNotFoundMsg	: "Søgeteksten blev ikke fundet!",
+
+// Replace Dialog
+DlgReplaceTitle			: "Erstat",
+DlgReplaceFindLbl		: "Søg efter:",
+DlgReplaceReplaceLbl	: "Erstat med:",
+DlgReplaceCaseChk		: "Forskel på store og små bogstaver",
+DlgReplaceReplaceBtn	: "Erstat",
+DlgReplaceReplAllBtn	: "Erstat alle",
+DlgReplaceWordChk		: "Kun hele ord",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "Din browsers sikkerhedsindstillinger tillader ikke editoren at klippe tekst automatisk!<br>Brug i stedet tastaturet til at klippe teksten (Ctrl+X).",
+PasteErrorCopy	: "Din browsers sikkerhedsindstillinger tillader ikke editoren at kopiere tekst automatisk!<br>Brug i stedet tastaturet til at kopiere teksten (Ctrl+C).",
+
+PasteAsText		: "Indsæt som ikke-formateret tekst",
+PasteFromWord	: "Indsæt fra Word",
+
+DlgPasteMsg2	: "Indsæt i feltet herunder (<STRONG>Ctrl+V</STRONG>) og klik <STRONG>OK</STRONG>.",
+DlgPasteSec		: "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.",	//MISSING
+DlgPasteIgnoreFont		: "Ignorer font definitioner",
+DlgPasteRemoveStyles	: "Ignorer typografi",
+DlgPasteCleanBox		: "Slet indhold",
+
+// Color Picker
+ColorAutomatic	: "Automatisk",
+ColorMoreColors	: "Flere farver...",
+
+// Document Properties
+DocProps		: "Egenskaber for dokument",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Egenskaber for bogmærke",
+DlgAnchorName		: "Bogmærke navn",
+DlgAnchorErrorName	: "Indtast bogmærke navn!",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Ikke i ordbogen",
+DlgSpellChangeTo		: "Forslag",
+DlgSpellBtnIgnore		: "Ignorer",
+DlgSpellBtnIgnoreAll	: "Ignorer alle",
+DlgSpellBtnReplace		: "Erstat",
+DlgSpellBtnReplaceAll	: "Erstat alle",
+DlgSpellBtnUndo			: "Tilbage",
+DlgSpellNoSuggestions	: "- ingen forslag -",
+DlgSpellProgress		: "Stavekontrolen arbejder...",
+DlgSpellNoMispell		: "Stavekontrol færdig: Ingen fejl fundet",
+DlgSpellNoChanges		: "Stavekontrol færdig: Ingen ord ændret",
+DlgSpellOneChange		: "Stavekontrol færdig: Et ord ændret",
+DlgSpellManyChanges		: "Stavekontrol færdig: %1 ord ændret",
+
+IeSpellDownload			: "Stavekontrol ikke installeret.<br>Vil du hente den nu?",
+
+// Button Dialog
+DlgButtonText		: "Tekst",
+DlgButtonType		: "Type",
+DlgButtonTypeBtn	: "Button",	//MISSING
+DlgButtonTypeSbm	: "Submit",	//MISSING
+DlgButtonTypeRst	: "Reset",	//MISSING
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Navn",
+DlgCheckboxValue	: "Værdi",
+DlgCheckboxSelected	: "Valgt",
+
+// Form Dialog
+DlgFormName		: "Navn",
+DlgFormAction	: "Handling",
+DlgFormMethod	: "Metod",
+
+// Select Field Dialog
+DlgSelectName		: "Navn",
+DlgSelectValue		: "Værdi",
+DlgSelectSize		: "Størrelse",
+DlgSelectLines		: "linier",
+DlgSelectChkMulti	: "Tillad flere valg",
+DlgSelectOpAvail	: "Valgmuligheder",
+DlgSelectOpText		: "Tekst",
+DlgSelectOpValue	: "Værdi",
+DlgSelectBtnAdd		: "Tilføj",
+DlgSelectBtnModify	: "Rediger",
+DlgSelectBtnUp		: "Op",
+DlgSelectBtnDown	: "Ned",
+DlgSelectBtnSetValue : "Sæt som valgt",
+DlgSelectBtnDelete	: "Slet",
+
+// Textarea Dialog
+DlgTextareaName	: "Navn",
+DlgTextareaCols	: "Kolonner",
+DlgTextareaRows	: "Rækker",
+
+// Text Field Dialog
+DlgTextName			: "Navn",
+DlgTextValue		: "Værdi",
+DlgTextCharWidth	: "Bredde (tegn)",
+DlgTextMaxChars		: "Max antal tegn",
+DlgTextType			: "Type",
+DlgTextTypeText		: "Tekst",
+DlgTextTypePass		: "Adgangskode",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Navn",
+DlgHiddenValue	: "Værdi",
+
+// Bulleted List Dialog
+BulletedListProp	: "Egenskaber for punktopstilling",
+NumberedListProp	: "Egenskaber for talopstilling",
+DlgLstStart			: "Start",	//MISSING
+DlgLstType			: "Type",
+DlgLstTypeCircle	: "Cirkel",
+DlgLstTypeDisc		: "Udfyldt cirkel",
+DlgLstTypeSquare	: "Firkant",
+DlgLstTypeNumbers	: "Nummereret (1, 2, 3)",
+DlgLstTypeLCase		: "Små bogstaver (a, b, c)",
+DlgLstTypeUCase		: "Store bogstaver (A, B, C)",
+DlgLstTypeSRoman	: "Små romertal (i, ii, iii)",
+DlgLstTypeLRoman	: "Store romertal (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Generelt",
+DlgDocBackTab		: "Baggrund",
+DlgDocColorsTab		: "Farver og margen",
+DlgDocMetaTab		: "Metadata",
+
+DlgDocPageTitle		: "Sidetitel",
+DlgDocLangDir		: "Sprog",
+DlgDocLangDirLTR	: "Fra venstre mod højre (LTR)",
+DlgDocLangDirRTL	: "Fra højre mod venstre (RTL)",
+DlgDocLangCode		: "Landekode",
+DlgDocCharSet		: "Tegnsæt kode",
+DlgDocCharSetCE		: "Central European",	//MISSING
+DlgDocCharSetCT		: "Chinese Traditional (Big5)",	//MISSING
+DlgDocCharSetCR		: "Cyrillic",	//MISSING
+DlgDocCharSetGR		: "Greek",	//MISSING
+DlgDocCharSetJP		: "Japanese",	//MISSING
+DlgDocCharSetKR		: "Korean",	//MISSING
+DlgDocCharSetTR		: "Turkish",	//MISSING
+DlgDocCharSetUN		: "Unicode (UTF-8)",	//MISSING
+DlgDocCharSetWE		: "Western European",	//MISSING
+DlgDocCharSetOther	: "Anden tegnsæt kode",
+
+DlgDocDocType		: "Dokumenttype kategori",
+DlgDocDocTypeOther	: "Anden dokumenttype kategori",
+DlgDocIncXHTML		: "Inkludere XHTML deklartion",
+DlgDocBgColor		: "Baggrundsfarve",
+DlgDocBgImage		: "Baggrundsbillede URL",
+DlgDocBgNoScroll	: "Fastlåst baggrund",
+DlgDocCText			: "Tekst",
+DlgDocCLink			: "Hyperlink",
+DlgDocCVisited		: "Besøgt hyperlink",
+DlgDocCActive		: "Aktivt hyperlink",
+DlgDocMargins		: "Sidemargen",
+DlgDocMaTop			: "Øverst",
+DlgDocMaLeft		: "Venstre",
+DlgDocMaRight		: "Højre",
+DlgDocMaBottom		: "Nederst",
+DlgDocMeIndex		: "Dokument index nøgleord (kommasepareret)",
+DlgDocMeDescr		: "Dokument beskrivelse",
+DlgDocMeAuthor		: "Forfatter",
+DlgDocMeCopy		: "Copyright",
+DlgDocPreview		: "Vis",
+
+// Templates Dialog
+Templates			: "Skabeloner",
+DlgTemplatesTitle	: "Indholdsskabeloner",
+DlgTemplatesSelMsg	: "Vælg den skabelon, som skal åbnes i editoren.<br>(Nuværende indhold vil blive overskrevet!):",
+DlgTemplatesLoading	: "Henter liste over skabeloner...",
+DlgTemplatesNoTpl	: "(Der er ikke defineret nogen skabelon!)",
+DlgTemplatesReplace	: "Replace actual contents",	//MISSING
+
+// About Dialog
+DlgAboutAboutTab	: "Om",
+DlgAboutBrowserInfoTab	: "Generelt",
+DlgAboutLicenseTab	: "Licens",
+DlgAboutVersion		: "version",
+DlgAboutInfo		: "For yderlig information gå til"
+};
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/de.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/de.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/de.js	(revision 1280)
@@ -0,0 +1,516 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * German language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Symbolleiste einklappen",
+ToolbarExpand		: "Symbolleiste ausklappen",
+
+// Toolbar Items and Context Menu
+Save				: "Speichern",
+NewPage				: "Neue Seite",
+Preview				: "Vorschau",
+Cut					: "Ausschneiden",
+Copy				: "Kopieren",
+Paste				: "Einfügen",
+PasteText			: "aus Textdatei einfügen",
+PasteWord			: "aus MS-Word einfügen",
+Print				: "Drucken",
+SelectAll			: "Alles auswählen",
+RemoveFormat		: "Formatierungen entfernen",
+InsertLinkLbl		: "Link",
+InsertLink			: "Link einfügen/editieren",
+RemoveLink			: "Link entfernen",
+Anchor				: "Anker einfügen/editieren",
+AnchorDelete		: "Anker entfernen",
+InsertImageLbl		: "Bild",
+InsertImage			: "Bild einfügen/editieren",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Flash einfügen/editieren",
+InsertTableLbl		: "Tabelle",
+InsertTable			: "Tabelle einfügen/editieren",
+InsertLineLbl		: "Linie",
+InsertLine			: "Horizontale Linie einfügen",
+InsertSpecialCharLbl: "Sonderzeichen",
+InsertSpecialChar	: "Sonderzeichen einfügen/editieren",
+InsertSmileyLbl		: "Smiley",
+InsertSmiley		: "Smiley einfügen",
+About				: "Über FCKeditor",
+Bold				: "Fett",
+Italic				: "Kursiv",
+Underline			: "Unterstrichen",
+StrikeThrough		: "Durchgestrichen",
+Subscript			: "Tiefgestellt",
+Superscript			: "Hochgestellt",
+LeftJustify			: "Linksbündig",
+CenterJustify		: "Zentriert",
+RightJustify		: "Rechtsbündig",
+BlockJustify		: "Blocksatz",
+DecreaseIndent		: "Einzug verringern",
+IncreaseIndent		: "Einzug erhöhen",
+Blockquote			: "Zitatblock",
+Undo				: "Rückgängig",
+Redo				: "Wiederherstellen",
+NumberedListLbl		: "Nummerierte Liste",
+NumberedList		: "Nummerierte Liste einfügen/entfernen",
+BulletedListLbl		: "Liste",
+BulletedList		: "Liste einfügen/entfernen",
+ShowTableBorders	: "Zeige Tabellenrahmen",
+ShowDetails			: "Zeige Details",
+Style				: "Stil",
+FontFormat			: "Format",
+Font				: "Schriftart",
+FontSize			: "Größe",
+TextColor			: "Textfarbe",
+BGColor				: "Hintergrundfarbe",
+Source				: "Quellcode",
+Find				: "Suchen",
+Replace				: "Ersetzen",
+SpellCheck			: "Rechtschreibprüfung",
+UniversalKeyboard	: "Universal-Tastatur",
+PageBreakLbl		: "Seitenumbruch",
+PageBreak			: "Seitenumbruch einfügen",
+
+Form			: "Formular",
+Checkbox		: "Checkbox",
+RadioButton		: "Radiobutton",
+TextField		: "Textfeld einzeilig",
+Textarea		: "Textfeld mehrzeilig",
+HiddenField		: "verstecktes Feld",
+Button			: "Klickbutton",
+SelectionField	: "Auswahlfeld",
+ImageButton		: "Bildbutton",
+
+FitWindow		: "Editor maximieren",
+ShowBlocks		: "Blöcke anzeigen",
+
+// Context Menu
+EditLink			: "Link editieren",
+CellCM				: "Zelle",
+RowCM				: "Zeile",
+ColumnCM			: "Spalte",
+InsertRowAfter		: "Zeile unterhalb einfügen",
+InsertRowBefore		: "Zeile oberhalb einfügen",
+DeleteRows			: "Zeile entfernen",
+InsertColumnAfter	: "Spalte rechts danach einfügen",
+InsertColumnBefore	: "Spalte links davor einfügen",
+DeleteColumns		: "Spalte löschen",
+InsertCellAfter		: "Zelle danach einfügen",
+InsertCellBefore	: "Zelle davor einfügen",
+DeleteCells			: "Zelle löschen",
+MergeCells			: "Zellen verbinden",
+MergeRight			: "nach rechts verbinden",
+MergeDown			: "nach unten verbinden",
+HorizontalSplitCell	: "Zelle horizontal teilen",
+VerticalSplitCell	: "Zelle vertikal teilen",
+TableDelete			: "Tabelle löschen",
+CellProperties		: "Zellen-Eigenschaften",
+TableProperties		: "Tabellen-Eigenschaften",
+ImageProperties		: "Bild-Eigenschaften",
+FlashProperties		: "Flash-Eigenschaften",
+
+AnchorProp			: "Anker-Eigenschaften",
+ButtonProp			: "Button-Eigenschaften",
+CheckboxProp		: "Checkbox-Eigenschaften",
+HiddenFieldProp		: "Verstecktes Feld-Eigenschaften",
+RadioButtonProp		: "Optionsfeld-Eigenschaften",
+ImageButtonProp		: "Bildbutton-Eigenschaften",
+TextFieldProp		: "Textfeld (einzeilig) Eigenschaften",
+SelectionFieldProp	: "Auswahlfeld-Eigenschaften",
+TextareaProp		: "Textfeld (mehrzeilig) Eigenschaften",
+FormProp			: "Formular-Eigenschaften",
+
+FontFormats			: "Normal;Formatiert;Addresse;Überschrift 1;Überschrift 2;Überschrift 3;Überschrift 4;Überschrift 5;Überschrift 6;Normal (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "Bearbeite XHTML. Bitte warten...",
+Done				: "Fertig",
+PasteWordConfirm	: "Der Text, den Sie einfügen möchten, scheint aus MS-Word kopiert zu sein. Möchten Sie ihn zuvor bereinigen lassen?",
+NotCompatiblePaste	: "Diese Funktion steht nur im Internet Explorer ab Version 5.5 zur Verfügung. Möchten Sie den Text unbereinigt einfügen?",
+UnknownToolbarItem	: "Unbekanntes Menüleisten-Objekt \"%1\"",
+UnknownCommand		: "Unbekannter Befehl \"%1\"",
+NotImplemented		: "Befehl nicht implementiert",
+UnknownToolbarSet	: "Menüleiste \"%1\" existiert nicht",
+NoActiveX			: "Die Sicherheitseinstellungen Ihres Browsers beschränken evtl. einige Funktionen des Editors. Aktivieren Sie die Option \"ActiveX-Steuerelemente und Plugins ausführen\" in den Sicherheitseinstellungen, um diese Funktionen nutzen zu können",
+BrowseServerBlocked : "Ein Auswahlfenster konnte nicht geöffnet werden. Stellen Sie sicher, das alle Popup-Blocker ausgeschaltet sind.",
+DialogBlocked		: "Das Dialog-Fenster konnte nicht geöffnet werden. Stellen Sie sicher, das alle Popup-Blocker ausgeschaltet sind.",
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Abbrechen",
+DlgBtnClose			: "Schließen",
+DlgBtnBrowseServer	: "Server durchsuchen",
+DlgAdvancedTag		: "Erweitert",
+DlgOpOther			: "<andere>",
+DlgInfoTab			: "Info",
+DlgAlertUrl			: "Bitte tragen Sie die URL ein",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<nichts>",
+DlgGenId			: "ID",
+DlgGenLangDir		: "Schreibrichtung",
+DlgGenLangDirLtr	: "Links nach Rechts (LTR)",
+DlgGenLangDirRtl	: "Rechts nach Links (RTL)",
+DlgGenLangCode		: "Sprachenkürzel",
+DlgGenAccessKey		: "Zugriffstaste",
+DlgGenName			: "Name",
+DlgGenTabIndex		: "Tab-Index",
+DlgGenLongDescr		: "Langform URL",
+DlgGenClass			: "Stylesheet Klasse",
+DlgGenTitle			: "Titel Beschreibung",
+DlgGenContType		: "Inhaltstyp",
+DlgGenLinkCharset	: "Ziel-Zeichensatz",
+DlgGenStyle			: "Style",
+
+// Image Dialog
+DlgImgTitle			: "Bild-Eigenschaften",
+DlgImgInfoTab		: "Bild-Info",
+DlgImgBtnUpload		: "Zum Server senden",
+DlgImgURL			: "Bildauswahl",
+DlgImgUpload		: "Upload",
+DlgImgAlt			: "Alternativer Text",
+DlgImgWidth			: "Breite",
+DlgImgHeight		: "Höhe",
+DlgImgLockRatio		: "Größenverhältniss beibehalten",
+DlgBtnResetSize		: "Größe zurücksetzen",
+DlgImgBorder		: "Rahmen",
+DlgImgHSpace		: "H-Abstand",
+DlgImgVSpace		: "V-Abstand",
+DlgImgAlign			: "Ausrichtung",
+DlgImgAlignLeft		: "Links",
+DlgImgAlignAbsBottom: "Abs Unten",
+DlgImgAlignAbsMiddle: "Abs Mitte",
+DlgImgAlignBaseline	: "Baseline",
+DlgImgAlignBottom	: "Unten",
+DlgImgAlignMiddle	: "Mitte",
+DlgImgAlignRight	: "Rechts",
+DlgImgAlignTextTop	: "Text Oben",
+DlgImgAlignTop		: "Oben",
+DlgImgPreview		: "Vorschau",
+DlgImgAlertUrl		: "Bitte geben Sie die Bild-URL an",
+DlgImgLinkTab		: "Link",
+
+// Flash Dialog
+DlgFlashTitle		: "Flash-Eigenschaften",
+DlgFlashChkPlay		: "autom. Abspielen",
+DlgFlashChkLoop		: "Endlosschleife",
+DlgFlashChkMenu		: "Flash-Menü aktivieren",
+DlgFlashScale		: "Skalierung",
+DlgFlashScaleAll	: "Alles anzeigen",
+DlgFlashScaleNoBorder	: "ohne Rand",
+DlgFlashScaleFit	: "Passgenau",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Link",
+DlgLnkInfoTab		: "Link-Info",
+DlgLnkTargetTab		: "Zielseite",
+
+DlgLnkType			: "Link-Typ",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Anker in dieser Seite",
+DlgLnkTypeEMail		: "E-Mail",
+DlgLnkProto			: "Protokoll",
+DlgLnkProtoOther	: "<anderes>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Anker auswählen",
+DlgLnkAnchorByName	: "nach Anker Name",
+DlgLnkAnchorById	: "nach Element Id",
+DlgLnkNoAnchors		: "(keine Anker im Dokument vorhanden)",
+DlgLnkEMail			: "E-Mail Addresse",
+DlgLnkEMailSubject	: "Betreffzeile",
+DlgLnkEMailBody		: "Nachrichtentext",
+DlgLnkUpload		: "Upload",
+DlgLnkBtnUpload		: "Zum Server senden",
+
+DlgLnkTarget		: "Zielseite",
+DlgLnkTargetFrame	: "<Frame>",
+DlgLnkTargetPopup	: "<Pop-up Fenster>",
+DlgLnkTargetBlank	: "Neues Fenster (_blank)",
+DlgLnkTargetParent	: "Oberes Fenster (_parent)",
+DlgLnkTargetSelf	: "Gleiches Fenster (_self)",
+DlgLnkTargetTop		: "Oberstes Fenster (_top)",
+DlgLnkTargetFrameName	: "Ziel-Fenster-Name",
+DlgLnkPopWinName	: "Pop-up Fenster-Name",
+DlgLnkPopWinFeat	: "Pop-up Fenster-Eigenschaften",
+DlgLnkPopResize		: "Vergrößerbar",
+DlgLnkPopLocation	: "Adress-Leiste",
+DlgLnkPopMenu		: "Menü-Leiste",
+DlgLnkPopScroll		: "Rollbalken",
+DlgLnkPopStatus		: "Statusleiste",
+DlgLnkPopToolbar	: "Werkzeugleiste",
+DlgLnkPopFullScrn	: "Vollbild (IE)",
+DlgLnkPopDependent	: "Abhängig (Netscape)",
+DlgLnkPopWidth		: "Breite",
+DlgLnkPopHeight		: "Höhe",
+DlgLnkPopLeft		: "Linke Position",
+DlgLnkPopTop		: "Obere Position",
+
+DlnLnkMsgNoUrl		: "Bitte geben Sie die Link-URL an",
+DlnLnkMsgNoEMail	: "Bitte geben Sie e-Mail Adresse an",
+DlnLnkMsgNoAnchor	: "Bitte wählen Sie einen Anker aus",
+DlnLnkMsgInvPopName	: "Der Name des Popups muss mit einem Buchstaben beginnen und darf keine Leerzeichen enthalten",
+
+// Color Dialog
+DlgColorTitle		: "Farbauswahl",
+DlgColorBtnClear	: "Keine Farbe",
+DlgColorHighlight	: "Vorschau",
+DlgColorSelected	: "Ausgewählt",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Smiley auswählen",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Sonderzeichen auswählen",
+
+// Table Dialog
+DlgTableTitle		: "Tabellen-Eigenschaften",
+DlgTableRows		: "Zeile",
+DlgTableColumns		: "Spalte",
+DlgTableBorder		: "Rahmen",
+DlgTableAlign		: "Ausrichtung",
+DlgTableAlignNotSet	: "<keine>",
+DlgTableAlignLeft	: "Links",
+DlgTableAlignCenter	: "Zentriert",
+DlgTableAlignRight	: "Rechts",
+DlgTableWidth		: "Breite",
+DlgTableWidthPx		: "Pixel",
+DlgTableWidthPc		: "%",
+DlgTableHeight		: "Höhe",
+DlgTableCellSpace	: "Zellenabstand außen",
+DlgTableCellPad		: "Zellenabstand innen",
+DlgTableCaption		: "Überschrift",
+DlgTableSummary		: "Inhaltsübersicht",
+
+// Table Cell Dialog
+DlgCellTitle		: "Zellen-Eigenschaften",
+DlgCellWidth		: "Breite",
+DlgCellWidthPx		: "Pixel",
+DlgCellWidthPc		: "%",
+DlgCellHeight		: "Höhe",
+DlgCellWordWrap		: "Umbruch",
+DlgCellWordWrapNotSet	: "<keiner>",
+DlgCellWordWrapYes	: "Ja",
+DlgCellWordWrapNo	: "Nein",
+DlgCellHorAlign		: "Horizontale Ausrichtung",
+DlgCellHorAlignNotSet	: "<keine>",
+DlgCellHorAlignLeft	: "Links",
+DlgCellHorAlignCenter	: "Zentriert",
+DlgCellHorAlignRight: "Rechts",
+DlgCellVerAlign		: "Vertikale Ausrichtung",
+DlgCellVerAlignNotSet	: "<keine>",
+DlgCellVerAlignTop	: "Oben",
+DlgCellVerAlignMiddle	: "Mitte",
+DlgCellVerAlignBottom	: "Unten",
+DlgCellVerAlignBaseline	: "Grundlinie",
+DlgCellRowSpan		: "Zeilen zusammenfassen",
+DlgCellCollSpan		: "Spalten zusammenfassen",
+DlgCellBackColor	: "Hintergrundfarbe",
+DlgCellBorderColor	: "Rahmenfarbe",
+DlgCellBtnSelect	: "Auswahl...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Suchen und Ersetzen",
+
+// Find Dialog
+DlgFindTitle		: "Finden",
+DlgFindFindBtn		: "Finden",
+DlgFindNotFoundMsg	: "Der gesuchte Text wurde nicht gefunden.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Ersetzen",
+DlgReplaceFindLbl		: "Suche nach:",
+DlgReplaceReplaceLbl	: "Ersetze mit:",
+DlgReplaceCaseChk		: "Groß-Kleinschreibung beachten",
+DlgReplaceReplaceBtn	: "Ersetzen",
+DlgReplaceReplAllBtn	: "Alle Ersetzen",
+DlgReplaceWordChk		: "Nur ganze Worte suchen",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "Die Sicherheitseinstellungen Ihres Browsers lassen es nicht zu, den Text automatisch auszuschneiden. Bitte benutzen Sie die System-Zwischenablage über STRG-X (ausschneiden) und STRG-V (einfügen).",
+PasteErrorCopy	: "Die Sicherheitseinstellungen Ihres Browsers lassen es nicht zu, den Text automatisch kopieren. Bitte benutzen Sie die System-Zwischenablage über STRG-C (kopieren).",
+
+PasteAsText		: "Als Text einfügen",
+PasteFromWord	: "Aus Word einfügen",
+
+DlgPasteMsg2	: "Bitte fügen Sie den Text in der folgenden Box über die Tastatur (mit <STRONG>Strg+V</STRONG>) ein und bestätigen Sie mit <STRONG>OK</STRONG>.",
+DlgPasteSec		: "Aufgrund von Sicherheitsbeschränkungen Ihres Browsers kann der Editor nicht direkt auf die Zwischenablage zugreifen. Bitte fügen Sie den Inhalt erneut in diesem Fenster ein.",
+DlgPasteIgnoreFont		: "Ignoriere Schriftart-Definitionen",
+DlgPasteRemoveStyles	: "Entferne Style-Definitionen",
+DlgPasteCleanBox		: "Inhalt aufräumen",
+
+// Color Picker
+ColorAutomatic	: "Automatisch",
+ColorMoreColors	: "Weitere Farben...",
+
+// Document Properties
+DocProps		: "Dokument-Eigenschaften",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Anker-Eigenschaften",
+DlgAnchorName		: "Anker Name",
+DlgAnchorErrorName	: "Bitte geben Sie den Namen des Ankers ein",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Nicht im Wörterbuch",
+DlgSpellChangeTo		: "Ändern in",
+DlgSpellBtnIgnore		: "Ignorieren",
+DlgSpellBtnIgnoreAll	: "Alle Ignorieren",
+DlgSpellBtnReplace		: "Ersetzen",
+DlgSpellBtnReplaceAll	: "Alle Ersetzen",
+DlgSpellBtnUndo			: "Rückgängig",
+DlgSpellNoSuggestions	: " - keine Vorschläge - ",
+DlgSpellProgress		: "Rechtschreibprüfung läuft...",
+DlgSpellNoMispell		: "Rechtschreibprüfung abgeschlossen - keine Fehler gefunden",
+DlgSpellNoChanges		: "Rechtschreibprüfung abgeschlossen - keine Worte geändert",
+DlgSpellOneChange		: "Rechtschreibprüfung abgeschlossen - ein Wort geändert",
+DlgSpellManyChanges		: "Rechtschreibprüfung abgeschlossen - %1 Wörter geändert",
+
+IeSpellDownload			: "Rechtschreibprüfung nicht installiert. Möchten Sie sie jetzt herunterladen?",
+
+// Button Dialog
+DlgButtonText		: "Text (Wert)",
+DlgButtonType		: "Typ",
+DlgButtonTypeBtn	: "Button",
+DlgButtonTypeSbm	: "Absenden",
+DlgButtonTypeRst	: "Zurücksetzen",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Name",
+DlgCheckboxValue	: "Wert",
+DlgCheckboxSelected	: "ausgewählt",
+
+// Form Dialog
+DlgFormName		: "Name",
+DlgFormAction	: "Action",
+DlgFormMethod	: "Method",
+
+// Select Field Dialog
+DlgSelectName		: "Name",
+DlgSelectValue		: "Wert",
+DlgSelectSize		: "Größe",
+DlgSelectLines		: "Linien",
+DlgSelectChkMulti	: "Erlaube Mehrfachauswahl",
+DlgSelectOpAvail	: "Mögliche Optionen",
+DlgSelectOpText		: "Text",
+DlgSelectOpValue	: "Wert",
+DlgSelectBtnAdd		: "Hinzufügen",
+DlgSelectBtnModify	: "Ändern",
+DlgSelectBtnUp		: "Hoch",
+DlgSelectBtnDown	: "Runter",
+DlgSelectBtnSetValue : "Setze als Standardwert",
+DlgSelectBtnDelete	: "Entfernen",
+
+// Textarea Dialog
+DlgTextareaName	: "Name",
+DlgTextareaCols	: "Spalten",
+DlgTextareaRows	: "Reihen",
+
+// Text Field Dialog
+DlgTextName			: "Name",
+DlgTextValue		: "Wert",
+DlgTextCharWidth	: "Zeichenbreite",
+DlgTextMaxChars		: "Max. Zeichen",
+DlgTextType			: "Typ",
+DlgTextTypeText		: "Text",
+DlgTextTypePass		: "Passwort",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Name",
+DlgHiddenValue	: "Wert",
+
+// Bulleted List Dialog
+BulletedListProp	: "Listen-Eigenschaften",
+NumberedListProp	: "Nummerierte Listen-Eigenschaften",
+DlgLstStart			: "Start",
+DlgLstType			: "Typ",
+DlgLstTypeCircle	: "Ring",
+DlgLstTypeDisc		: "Kreis",
+DlgLstTypeSquare	: "Quadrat",
+DlgLstTypeNumbers	: "Nummern (1, 2, 3)",
+DlgLstTypeLCase		: "Kleinbuchstaben (a, b, c)",
+DlgLstTypeUCase		: "Großbuchstaben (A, B, C)",
+DlgLstTypeSRoman	: "Kleine römische Zahlen (i, ii, iii)",
+DlgLstTypeLRoman	: "Große römische Zahlen (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Allgemein",
+DlgDocBackTab		: "Hintergrund",
+DlgDocColorsTab		: "Farben und Abstände",
+DlgDocMetaTab		: "Metadaten",
+
+DlgDocPageTitle		: "Seitentitel",
+DlgDocLangDir		: "Schriftrichtung",
+DlgDocLangDirLTR	: "Links nach Rechts",
+DlgDocLangDirRTL	: "Rechts nach Links",
+DlgDocLangCode		: "Sprachkürzel",
+DlgDocCharSet		: "Zeichenkodierung",
+DlgDocCharSetCE		: "Zentraleuropäisch",
+DlgDocCharSetCT		: "traditionell Chinesisch (Big5)",
+DlgDocCharSetCR		: "Kyrillisch",
+DlgDocCharSetGR		: "Griechisch",
+DlgDocCharSetJP		: "Japanisch",
+DlgDocCharSetKR		: "Koreanisch",
+DlgDocCharSetTR		: "Türkisch",
+DlgDocCharSetUN		: "Unicode (UTF-8)",
+DlgDocCharSetWE		: "Westeuropäisch",
+DlgDocCharSetOther	: "Andere Zeichenkodierung",
+
+DlgDocDocType		: "Dokumententyp",
+DlgDocDocTypeOther	: "Anderer Dokumententyp",
+DlgDocIncXHTML		: "Beziehe XHTML Deklarationen ein",
+DlgDocBgColor		: "Hintergrundfarbe",
+DlgDocBgImage		: "Hintergrundbild URL",
+DlgDocBgNoScroll	: "feststehender Hintergrund",
+DlgDocCText			: "Text",
+DlgDocCLink			: "Link",
+DlgDocCVisited		: "Besuchter Link",
+DlgDocCActive		: "Aktiver Link",
+DlgDocMargins		: "Seitenränder",
+DlgDocMaTop			: "Oben",
+DlgDocMaLeft		: "Links",
+DlgDocMaRight		: "Rechts",
+DlgDocMaBottom		: "Unten",
+DlgDocMeIndex		: "Schlüsselwörter (durch Komma getrennt)",
+DlgDocMeDescr		: "Dokument-Beschreibung",
+DlgDocMeAuthor		: "Autor",
+DlgDocMeCopy		: "Copyright",
+DlgDocPreview		: "Vorschau",
+
+// Templates Dialog
+Templates			: "Vorlagen",
+DlgTemplatesTitle	: "Vorlagen",
+DlgTemplatesSelMsg	: "Klicken Sie auf eine Vorlage, um sie im Editor zu öffnen (der aktuelle Inhalt wird dabei gelöscht!):",
+DlgTemplatesLoading	: "Liste der Vorlagen wird geladen. Bitte warten...",
+DlgTemplatesNoTpl	: "(keine Vorlagen definiert)",
+DlgTemplatesReplace	: "Aktuellen Inhalt ersetzen",
+
+// About Dialog
+DlgAboutAboutTab	: "Über",
+DlgAboutBrowserInfoTab	: "Browser-Info",
+DlgAboutLicenseTab	: "Lizenz",
+DlgAboutVersion		: "Version",
+DlgAboutInfo		: "Für weitere Informationen siehe"
+};
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/el.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/el.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/el.js	(revision 1280)
@@ -0,0 +1,516 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Greek language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Απόκρυψη Μπάρας Εργαλείων",
+ToolbarExpand		: "Εμφάνιση Μπάρας Εργαλείων",
+
+// Toolbar Items and Context Menu
+Save				: "Αποθήκευση",
+NewPage				: "Νέα Σελίδα",
+Preview				: "Προεπισκόπιση",
+Cut					: "Αποκοπή",
+Copy				: "Αντιγραφή",
+Paste				: "Επικόλληση",
+PasteText			: "Επικόλληση (απλό κείμενο)",
+PasteWord			: "Επικόλληση από το Word",
+Print				: "Εκτύπωση",
+SelectAll			: "Επιλογή όλων",
+RemoveFormat		: "Αφαίρεση Μορφοποίησης",
+InsertLinkLbl		: "Σύνδεσμος (Link)",
+InsertLink			: "Εισαγωγή/Μεταβολή Συνδέσμου (Link)",
+RemoveLink			: "Αφαίρεση Συνδέσμου (Link)",
+Anchor				: "Εισαγωγή/επεξεργασία Anchor",
+AnchorDelete		: "Remove Anchor",	//MISSING
+InsertImageLbl		: "Εικόνα",
+InsertImage			: "Εισαγωγή/Μεταβολή Εικόνας",
+InsertFlashLbl		: "Εισαγωγή Flash",
+InsertFlash			: "Εισαγωγή/επεξεργασία Flash",
+InsertTableLbl		: "Πίνακας",
+InsertTable			: "Εισαγωγή/Μεταβολή Πίνακα",
+InsertLineLbl		: "Γραμμή",
+InsertLine			: "Εισαγωγή Οριζόντιας Γραμμής",
+InsertSpecialCharLbl: "Ειδικό Σύμβολο",
+InsertSpecialChar	: "Εισαγωγή Ειδικού Συμβόλου",
+InsertSmileyLbl		: "Smiley",
+InsertSmiley		: "Εισαγωγή Smiley",
+About				: "Περί του FCKeditor",
+Bold				: "Έντονα",
+Italic				: "Πλάγια",
+Underline			: "Υπογράμμιση",
+StrikeThrough		: "Διαγράμμιση",
+Subscript			: "Δείκτης",
+Superscript			: "Εκθέτης",
+LeftJustify			: "Στοίχιση Αριστερά",
+CenterJustify		: "Στοίχιση στο Κέντρο",
+RightJustify		: "Στοίχιση Δεξιά",
+BlockJustify		: "Πλήρης Στοίχιση (Block)",
+DecreaseIndent		: "Μείωση Εσοχής",
+IncreaseIndent		: "Αύξηση Εσοχής",
+Blockquote			: "Blockquote",	//MISSING
+Undo				: "Αναίρεση",
+Redo				: "Επαναφορά",
+NumberedListLbl		: "Λίστα με Αριθμούς",
+NumberedList		: "Εισαγωγή/Διαγραφή Λίστας με Αριθμούς",
+BulletedListLbl		: "Λίστα με Bullets",
+BulletedList		: "Εισαγωγή/Διαγραφή Λίστας με Bullets",
+ShowTableBorders	: "Προβολή Ορίων Πίνακα",
+ShowDetails			: "Προβολή Λεπτομερειών",
+Style				: "Στυλ",
+FontFormat			: "Μορφή Γραμματοσειράς",
+Font				: "Γραμματοσειρά",
+FontSize			: "Μέγεθος",
+TextColor			: "Χρώμα Γραμμάτων",
+BGColor				: "Χρώμα Υποβάθρου",
+Source				: "HTML κώδικας",
+Find				: "Αναζήτηση",
+Replace				: "Αντικατάσταση",
+SpellCheck			: "Ορθογραφικός έλεγχος",
+UniversalKeyboard	: "Διεθνής πληκτρολόγιο",
+PageBreakLbl		: "Τέλος σελίδας",
+PageBreak			: "Εισαγωγή τέλους σελίδας",
+
+Form			: "Φόρμα",
+Checkbox		: "Κουτί επιλογής",
+RadioButton		: "Κουμπί Radio",
+TextField		: "Πεδίο κειμένου",
+Textarea		: "Περιοχή κειμένου",
+HiddenField		: "Κρυφό πεδίο",
+Button			: "Κουμπί",
+SelectionField	: "Πεδίο επιλογής",
+ImageButton		: "Κουμπί εικόνας",
+
+FitWindow		: "Μεγιστοποίηση προγράμματος",
+ShowBlocks		: "Show Blocks",	//MISSING
+
+// Context Menu
+EditLink			: "Μεταβολή Συνδέσμου (Link)",
+CellCM				: "Κελί",
+RowCM				: "Σειρά",
+ColumnCM			: "Στήλη",
+InsertRowAfter		: "Insert Row After",	//MISSING
+InsertRowBefore		: "Insert Row Before",	//MISSING
+DeleteRows			: "Διαγραφή Γραμμών",
+InsertColumnAfter	: "Insert Column After",	//MISSING
+InsertColumnBefore	: "Insert Column Before",	//MISSING
+DeleteColumns		: "Διαγραφή Κολωνών",
+InsertCellAfter		: "Insert Cell After",	//MISSING
+InsertCellBefore	: "Insert Cell Before",	//MISSING
+DeleteCells			: "Διαγραφή Κελιών",
+MergeCells			: "Ενοποίηση Κελιών",
+MergeRight			: "Merge Right",	//MISSING
+MergeDown			: "Merge Down",	//MISSING
+HorizontalSplitCell	: "Split Cell Horizontally",	//MISSING
+VerticalSplitCell	: "Split Cell Vertically",	//MISSING
+TableDelete			: "Διαγραφή πίνακα",
+CellProperties		: "Ιδιότητες Κελιού",
+TableProperties		: "Ιδιότητες Πίνακα",
+ImageProperties		: "Ιδιότητες Εικόνας",
+FlashProperties		: "Ιδιότητες Flash",
+
+AnchorProp			: "Ιδιότητες άγκυρας",
+ButtonProp			: "Ιδιότητες κουμπιού",
+CheckboxProp		: "Ιδιότητες κουμπιού επιλογής",
+HiddenFieldProp		: "Ιδιότητες κρυφού πεδίου",
+RadioButtonProp		: "Ιδιότητες κουμπιού radio",
+ImageButtonProp		: "Ιδιότητες κουμπιού εικόνας",
+TextFieldProp		: "Ιδιότητες πεδίου κειμένου",
+SelectionFieldProp	: "Ιδιότητες πεδίου επιλογής",
+TextareaProp		: "Ιδιότητες περιοχής κειμένου",
+FormProp			: "Ιδιότητες φόρμας",
+
+FontFormats			: "Κανονικό;Μορφοποιημένο;Διεύθυνση;Επικεφαλίδα 1;Επικεφαλίδα 2;Επικεφαλίδα 3;Επικεφαλίδα 4;Επικεφαλίδα 5;Επικεφαλίδα 6",
+
+// Alerts and Messages
+ProcessingXHTML		: "Επεξεργασία XHTML. Παρακαλώ περιμένετε...",
+Done				: "Έτοιμο",
+PasteWordConfirm	: "Το κείμενο που θέλετε να επικολήσετε, φαίνεται πως προέρχεται από το Word. Θέλετε να καθαριστεί πριν επικοληθεί;",
+NotCompatiblePaste	: "Αυτή η επιλογή είναι διαθέσιμη στον Internet Explorer έκδοση 5.5+. Θέλετε να γίνει η επικόλληση χωρίς καθαρισμό;",
+UnknownToolbarItem	: "Άγνωστο αντικείμενο της μπάρας εργαλείων \"%1\"",
+UnknownCommand		: "Άγνωστή εντολή \"%1\"",
+NotImplemented		: "Η εντολή δεν έχει ενεργοποιηθεί",
+UnknownToolbarSet	: "Η μπάρα εργαλείων \"%1\" δεν υπάρχει",
+NoActiveX			: "Οι ρυθμίσεις ασφαλείας του browser σας μπορεί να περιορίσουν κάποιες ρυθμίσεις του προγράμματος. Χρειάζεται να ενεργοποιήσετε την επιλογή \"Run ActiveX controls and plug-ins\". Ίσως παρουσιαστούν λάθη και παρατηρήσετε ελειπείς λειτουργίες.",
+BrowseServerBlocked : "Οι πόροι του browser σας δεν είναι προσπελάσιμοι. Σιγουρευτείτε ότι δεν υπάρχουν ενεργοί popup blockers.",
+DialogBlocked		: "Δεν ήταν δυνατό να ανοίξει το παράθυρο διαλόγου. Σιγουρευτείτε ότι δεν υπάρχουν ενεργοί popup blockers.",
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Ακύρωση",
+DlgBtnClose			: "Κλείσιμο",
+DlgBtnBrowseServer	: "Εξερεύνηση διακομιστή",
+DlgAdvancedTag		: "Για προχωρημένους",
+DlgOpOther			: "<Άλλα>",
+DlgInfoTab			: "Πληροφορίες",
+DlgAlertUrl			: "Παρακαλώ εισάγετε URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<χωρίς>",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Κατεύθυνση κειμένου",
+DlgGenLangDirLtr	: "Αριστερά προς Δεξιά (LTR)",
+DlgGenLangDirRtl	: "Δεξιά προς Αριστερά (RTL)",
+DlgGenLangCode		: "Κωδικός Γλώσσας",
+DlgGenAccessKey		: "Συντόμευση (Access Key)",
+DlgGenName			: "Όνομα",
+DlgGenTabIndex		: "Tab Index",
+DlgGenLongDescr		: "Αναλυτική περιγραφή URL",
+DlgGenClass			: "Stylesheet Classes",
+DlgGenTitle			: "Συμβουλευτικός τίτλος",
+DlgGenContType		: "Συμβουλευτικός τίτλος περιεχομένου",
+DlgGenLinkCharset	: "Linked Resource Charset",
+DlgGenStyle			: "Στύλ",
+
+// Image Dialog
+DlgImgTitle			: "Ιδιότητες Εικόνας",
+DlgImgInfoTab		: "Πληροφορίες Εικόνας",
+DlgImgBtnUpload		: "Αποστολή στον Διακομιστή",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Αποστολή",
+DlgImgAlt			: "Εναλλακτικό Κείμενο (ALT)",
+DlgImgWidth			: "Πλάτος",
+DlgImgHeight		: "Ύψος",
+DlgImgLockRatio		: "Κλείδωμα Αναλογίας",
+DlgBtnResetSize		: "Επαναφορά Αρχικού Μεγέθους",
+DlgImgBorder		: "Περιθώριο",
+DlgImgHSpace		: "Οριζόντιος Χώρος (HSpace)",
+DlgImgVSpace		: "Κάθετος Χώρος (VSpace)",
+DlgImgAlign			: "Ευθυγράμμιση (Align)",
+DlgImgAlignLeft		: "Αριστερά",
+DlgImgAlignAbsBottom: "Απόλυτα Κάτω (Abs Bottom)",
+DlgImgAlignAbsMiddle: "Απόλυτα στη Μέση (Abs Middle)",
+DlgImgAlignBaseline	: "Γραμμή Βάσης (Baseline)",
+DlgImgAlignBottom	: "Κάτω (Bottom)",
+DlgImgAlignMiddle	: "Μέση (Middle)",
+DlgImgAlignRight	: "Δεξιά (Right)",
+DlgImgAlignTextTop	: "Κορυφή Κειμένου (Text Top)",
+DlgImgAlignTop		: "Πάνω (Top)",
+DlgImgPreview		: "Προεπισκόπιση",
+DlgImgAlertUrl		: "Εισάγετε την τοποθεσία (URL) της εικόνας",
+DlgImgLinkTab		: "Σύνδεσμος",
+
+// Flash Dialog
+DlgFlashTitle		: "Ιδιότητες flash",
+DlgFlashChkPlay		: "Αυτόματη έναρξη",
+DlgFlashChkLoop		: "Επανάληψη",
+DlgFlashChkMenu		: "Ενεργοποίηση Flash Menu",
+DlgFlashScale		: "Κλίμακα",
+DlgFlashScaleAll	: "Εμφάνιση όλων",
+DlgFlashScaleNoBorder	: "Χωρίς όρια",
+DlgFlashScaleFit	: "Ακριβής εφαρμογή",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Σύνδεσμος (Link)",
+DlgLnkInfoTab		: "Link",
+DlgLnkTargetTab		: "Παράθυρο Στόχος (Target)",
+
+DlgLnkType			: "Τύπος συνδέσμου (Link)",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Άγκυρα σε αυτή τη σελίδα",
+DlgLnkTypeEMail		: "E-Mail",
+DlgLnkProto			: "Προτόκολο",
+DlgLnkProtoOther	: "<άλλο>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Επιλέξτε μια άγκυρα",
+DlgLnkAnchorByName	: "Βάσει του Ονόματος (Name) της άγκυρας",
+DlgLnkAnchorById	: "Βάσει του Element Id",
+DlgLnkNoAnchors		: "(Δεν υπάρχουν άγκυρες στο κείμενο)",
+DlgLnkEMail			: "Διεύθυνση Ηλεκτρονικού Ταχυδρομείου",
+DlgLnkEMailSubject	: "Θέμα Μηνύματος",
+DlgLnkEMailBody		: "Κείμενο Μηνύματος",
+DlgLnkUpload		: "Αποστολή",
+DlgLnkBtnUpload		: "Αποστολή στον Διακομιστή",
+
+DlgLnkTarget		: "Παράθυρο Στόχος (Target)",
+DlgLnkTargetFrame	: "<πλαίσιο>",
+DlgLnkTargetPopup	: "<παράθυρο popup>",
+DlgLnkTargetBlank	: "Νέο Παράθυρο (_blank)",
+DlgLnkTargetParent	: "Γονικό Παράθυρο (_parent)",
+DlgLnkTargetSelf	: "Ίδιο Παράθυρο (_self)",
+DlgLnkTargetTop		: "Ανώτατο Παράθυρο (_top)",
+DlgLnkTargetFrameName	: "Όνομα πλαισίου στόχου",
+DlgLnkPopWinName	: "Όνομα Popup Window",
+DlgLnkPopWinFeat	: "Επιλογές Popup Window",
+DlgLnkPopResize		: "Με αλλαγή Μεγέθους",
+DlgLnkPopLocation	: "Μπάρα Τοποθεσίας",
+DlgLnkPopMenu		: "Μπάρα Menu",
+DlgLnkPopScroll		: "Μπάρες Κύλισης",
+DlgLnkPopStatus		: "Μπάρα Status",
+DlgLnkPopToolbar	: "Μπάρα Εργαλείων",
+DlgLnkPopFullScrn	: "Ολόκληρη η Οθόνη (IE)",
+DlgLnkPopDependent	: "Dependent (Netscape)",
+DlgLnkPopWidth		: "Πλάτος",
+DlgLnkPopHeight		: "Ύψος",
+DlgLnkPopLeft		: "Τοποθεσία Αριστερής Άκρης",
+DlgLnkPopTop		: "Τοποθεσία Πάνω Άκρης",
+
+DlnLnkMsgNoUrl		: "Εισάγετε την τοποθεσία (URL) του υπερσυνδέσμου (Link)",
+DlnLnkMsgNoEMail	: "Εισάγετε την διεύθυνση ηλεκτρονικού ταχυδρομείου",
+DlnLnkMsgNoAnchor	: "Επιλέξτε ένα Anchor",
+DlnLnkMsgInvPopName	: "Το όνομα του popup πρέπει να αρχίζει με χαρακτήρα της αλφαβήτου και να μην περιέχει κενά",
+
+// Color Dialog
+DlgColorTitle		: "Επιλογή χρώματος",
+DlgColorBtnClear	: "Καθαρισμός",
+DlgColorHighlight	: "Προεπισκόπιση",
+DlgColorSelected	: "Επιλεγμένο",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Επιλέξτε ένα Smiley",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Επιλέξτε ένα Ειδικό Σύμβολο",
+
+// Table Dialog
+DlgTableTitle		: "Ιδιότητες Πίνακα",
+DlgTableRows		: "Γραμμές",
+DlgTableColumns		: "Κολώνες",
+DlgTableBorder		: "Μέγεθος Περιθωρίου",
+DlgTableAlign		: "Στοίχιση",
+DlgTableAlignNotSet	: "<χωρίς>",
+DlgTableAlignLeft	: "Αριστερά",
+DlgTableAlignCenter	: "Κέντρο",
+DlgTableAlignRight	: "Δεξιά",
+DlgTableWidth		: "Πλάτος",
+DlgTableWidthPx		: "pixels",
+DlgTableWidthPc		: "\%",
+DlgTableHeight		: "Ύψος",
+DlgTableCellSpace	: "Απόσταση κελιών",
+DlgTableCellPad		: "Γέμισμα κελιών",
+DlgTableCaption		: "Υπέρτιτλος",
+DlgTableSummary		: "Περίληψη",
+
+// Table Cell Dialog
+DlgCellTitle		: "Ιδιότητες Κελιού",
+DlgCellWidth		: "Πλάτος",
+DlgCellWidthPx		: "pixels",
+DlgCellWidthPc		: "\%",
+DlgCellHeight		: "Ύψος",
+DlgCellWordWrap		: "Με αλλαγή γραμμής",
+DlgCellWordWrapNotSet	: "<χωρίς>",
+DlgCellWordWrapYes	: "Ναι",
+DlgCellWordWrapNo	: "Όχι",
+DlgCellHorAlign		: "Οριζόντια Στοίχιση",
+DlgCellHorAlignNotSet	: "<χωρίς>",
+DlgCellHorAlignLeft	: "Αριστερά",
+DlgCellHorAlignCenter	: "Κέντρο",
+DlgCellHorAlignRight: "Δεξιά",
+DlgCellVerAlign		: "Κάθετη Στοίχιση",
+DlgCellVerAlignNotSet	: "<χωρίς>",
+DlgCellVerAlignTop	: "Πάνω (Top)",
+DlgCellVerAlignMiddle	: "Μέση (Middle)",
+DlgCellVerAlignBottom	: "Κάτω (Bottom)",
+DlgCellVerAlignBaseline	: "Γραμμή Βάσης (Baseline)",
+DlgCellRowSpan		: "Αριθμός Γραμμών (Rows Span)",
+DlgCellCollSpan		: "Αριθμός Κολωνών (Columns Span)",
+DlgCellBackColor	: "Χρώμα Υποβάθρου",
+DlgCellBorderColor	: "Χρώμα Περιθωρίου",
+DlgCellBtnSelect	: "Επιλογή...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Find and Replace",	//MISSING
+
+// Find Dialog
+DlgFindTitle		: "Αναζήτηση",
+DlgFindFindBtn		: "Αναζήτηση",
+DlgFindNotFoundMsg	: "Το κείμενο δεν βρέθηκε.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Αντικατάσταση",
+DlgReplaceFindLbl		: "Αναζήτηση:",
+DlgReplaceReplaceLbl	: "Αντικατάσταση με:",
+DlgReplaceCaseChk		: "Έλεγχος πεζών/κεφαλαίων",
+DlgReplaceReplaceBtn	: "Αντικατάσταση",
+DlgReplaceReplAllBtn	: "Αντικατάσταση Όλων",
+DlgReplaceWordChk		: "Εύρεση πλήρους λέξης",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "Οι ρυθμίσεις ασφαλείας του φυλλομετρητή σας δεν επιτρέπουν την επιλεγμένη εργασία αποκοπής. Χρησιμοποιείστε το πληκτρολόγιο (Ctrl+X).",
+PasteErrorCopy	: "Οι ρυθμίσεις ασφαλείας του φυλλομετρητή σας δεν επιτρέπουν την επιλεγμένη εργασία αντιγραφής. Χρησιμοποιείστε το πληκτρολόγιο (Ctrl+C).",
+
+PasteAsText		: "Επικόλληση ως Απλό Κείμενο",
+PasteFromWord	: "Επικόλληση από το Word",
+
+DlgPasteMsg2	: "Παρακαλώ επικολήστε στο ακόλουθο κουτί χρησιμοποιόντας το πληκτρολόγιο (<STRONG>Ctrl+V</STRONG>) και πατήστε <STRONG>OK</STRONG>.",
+DlgPasteSec		: "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.",	//MISSING
+DlgPasteIgnoreFont		: "Αγνόηση προδιαγραφών γραμματοσειράς",
+DlgPasteRemoveStyles	: "Αφαίρεση προδιαγραφών στύλ",
+DlgPasteCleanBox		: "Κουτί εκαθάρισης",
+
+// Color Picker
+ColorAutomatic	: "Αυτόματο",
+ColorMoreColors	: "Περισσότερα χρώματα...",
+
+// Document Properties
+DocProps		: "Ιδιότητες εγγράφου",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Ιδιότητες άγκυρας",
+DlgAnchorName		: "Όνομα άγκυρας",
+DlgAnchorErrorName	: "Παρακαλούμε εισάγετε όνομα άγκυρας",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Δεν υπάρχει στο λεξικό",
+DlgSpellChangeTo		: "Αλλαγή σε",
+DlgSpellBtnIgnore		: "Αγνόηση",
+DlgSpellBtnIgnoreAll	: "Αγνόηση όλων",
+DlgSpellBtnReplace		: "Αντικατάσταση",
+DlgSpellBtnReplaceAll	: "Αντικατάσταση όλων",
+DlgSpellBtnUndo			: "Αναίρεση",
+DlgSpellNoSuggestions	: "- Δεν υπάρχουν προτάσεις -",
+DlgSpellProgress		: "Ορθογραφικός έλεγχος σε εξέλιξη...",
+DlgSpellNoMispell		: "Ο ορθογραφικός έλεγχος ολοκληρώθηκε: Δεν βρέθηκαν λάθη",
+DlgSpellNoChanges		: "Ο ορθογραφικός έλεγχος ολοκληρώθηκε: Δεν άλλαξαν λέξεις",
+DlgSpellOneChange		: "Ο ορθογραφικός έλεγχος ολοκληρώθηκε: Μια λέξη άλλαξε",
+DlgSpellManyChanges		: "Ο ορθογραφικός έλεγχος ολοκληρώθηκε: %1 λέξεις άλλαξαν",
+
+IeSpellDownload			: "Δεν υπάρχει εγκατεστημένος ορθογράφος. Θέλετε να τον κατεβάσετε τώρα;",
+
+// Button Dialog
+DlgButtonText		: "Κείμενο (Τιμή)",
+DlgButtonType		: "Τύπος",
+DlgButtonTypeBtn	: "Κουμπί",
+DlgButtonTypeSbm	: "Καταχώρηση",
+DlgButtonTypeRst	: "Επαναφορά",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Όνομα",
+DlgCheckboxValue	: "Τιμή",
+DlgCheckboxSelected	: "Επιλεγμένο",
+
+// Form Dialog
+DlgFormName		: "Όνομα",
+DlgFormAction	: "Δράση",
+DlgFormMethod	: "Μάθοδος",
+
+// Select Field Dialog
+DlgSelectName		: "Όνομα",
+DlgSelectValue		: "Τιμή",
+DlgSelectSize		: "Μέγεθος",
+DlgSelectLines		: "γραμμές",
+DlgSelectChkMulti	: "Πολλαπλές επιλογές",
+DlgSelectOpAvail	: "Διαθέσιμες επιλογές",
+DlgSelectOpText		: "Κείμενο",
+DlgSelectOpValue	: "Τιμή",
+DlgSelectBtnAdd		: "Προσθήκη",
+DlgSelectBtnModify	: "Αλλαγή",
+DlgSelectBtnUp		: "Πάνω",
+DlgSelectBtnDown	: "Κάτω",
+DlgSelectBtnSetValue : "Προεπιλεγμένη επιλογή",
+DlgSelectBtnDelete	: "Διαγραφή",
+
+// Textarea Dialog
+DlgTextareaName	: "Όνομα",
+DlgTextareaCols	: "Στήλες",
+DlgTextareaRows	: "Σειρές",
+
+// Text Field Dialog
+DlgTextName			: "Όνομα",
+DlgTextValue		: "Τιμή",
+DlgTextCharWidth	: "Μήκος χαρακτήρων",
+DlgTextMaxChars		: "Μέγιστοι χαρακτήρες",
+DlgTextType			: "Τύπος",
+DlgTextTypeText		: "Κείμενο",
+DlgTextTypePass		: "Κωδικός",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Όνομα",
+DlgHiddenValue	: "Τιμή",
+
+// Bulleted List Dialog
+BulletedListProp	: "Ιδιότητες λίστας Bulleted",
+NumberedListProp	: "Ιδιότητες αριθμημένης λίστας ",
+DlgLstStart			: "Αρχή",
+DlgLstType			: "Τύπος",
+DlgLstTypeCircle	: "Κύκλος",
+DlgLstTypeDisc		: "Δίσκος",
+DlgLstTypeSquare	: "Τετράγωνο",
+DlgLstTypeNumbers	: "Αριθμοί (1, 2, 3)",
+DlgLstTypeLCase		: "Πεζά γράμματα (a, b, c)",
+DlgLstTypeUCase		: "Κεφαλαία γράμματα (A, B, C)",
+DlgLstTypeSRoman	: "Μικρά λατινικά αριθμητικά (i, ii, iii)",
+DlgLstTypeLRoman	: "Μεγάλα λατινικά αριθμητικά (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Γενικά",
+DlgDocBackTab		: "Φόντο",
+DlgDocColorsTab		: "Χρώματα και περιθώρια",
+DlgDocMetaTab		: "Δεδομένα Meta",
+
+DlgDocPageTitle		: "Τίτλος σελίδας",
+DlgDocLangDir		: "Κατεύθυνση γραφής",
+DlgDocLangDirLTR	: "αριστερά προς δεξιά (LTR)",
+DlgDocLangDirRTL	: "δεξιά προς αριστερά (RTL)",
+DlgDocLangCode		: "Κωδικός γλώσσας",
+DlgDocCharSet		: "Κωδικοποίηση χαρακτήρων",
+DlgDocCharSetCE		: "Κεντρικής Ευρώπης",
+DlgDocCharSetCT		: "Παραδοσιακά κινέζικα (Big5)",
+DlgDocCharSetCR		: "Κυριλλική",
+DlgDocCharSetGR		: "Ελληνική",
+DlgDocCharSetJP		: "Ιαπωνική",
+DlgDocCharSetKR		: "Κορεάτικη",
+DlgDocCharSetTR		: "Τουρκική",
+DlgDocCharSetUN		: "Διεθνής (UTF-8)",
+DlgDocCharSetWE		: "Δυτικής Ευρώπης",
+DlgDocCharSetOther	: "Άλλη κωδικοποίηση χαρακτήρων",
+
+DlgDocDocType		: "Επικεφαλίδα τύπου εγγράφου",
+DlgDocDocTypeOther	: "Άλλη επικεφαλίδα τύπου εγγράφου",
+DlgDocIncXHTML		: "Να συμπεριληφθούν οι δηλώσεις XHTML",
+DlgDocBgColor		: "Χρώμα φόντου",
+DlgDocBgImage		: "Διεύθυνση εικόνας φόντου",
+DlgDocBgNoScroll	: "Φόντο χωρίς κύλιση",
+DlgDocCText			: "Κείμενο",
+DlgDocCLink			: "Σύνδεσμος",
+DlgDocCVisited		: "Σύνδεσμος που έχει επισκευθεί",
+DlgDocCActive		: "Ενεργός σύνδεσμος",
+DlgDocMargins		: "Περιθώρια σελίδας",
+DlgDocMaTop			: "Κορυφή",
+DlgDocMaLeft		: "Αριστερά",
+DlgDocMaRight		: "Δεξιά",
+DlgDocMaBottom		: "Κάτω",
+DlgDocMeIndex		: "Λέξεις κλειδιά δείκτες εγγράφου (διαχωρισμός με κόμμα)",
+DlgDocMeDescr		: "Περιγραφή εγγράφου",
+DlgDocMeAuthor		: "Συγγραφέας",
+DlgDocMeCopy		: "Πνευματικά δικαιώματα",
+DlgDocPreview		: "Προεπισκόπηση",
+
+// Templates Dialog
+Templates			: "Πρότυπα",
+DlgTemplatesTitle	: "Πρότυπα περιεχομένου",
+DlgTemplatesSelMsg	: "Παρακαλώ επιλέξτε πρότυπο για εισαγωγή στο πρόγραμμα<br>(τα υπάρχοντα περιεχόμενα θα χαθούν):",
+DlgTemplatesLoading	: "Φόρτωση καταλόγου προτύπων. Παρακαλώ περιμένετε...",
+DlgTemplatesNoTpl	: "(Δεν έχουν καθοριστεί πρότυπα)",
+DlgTemplatesReplace	: "Αντικατάσταση υπάρχοντων περιεχομένων",
+
+// About Dialog
+DlgAboutAboutTab	: "Σχετικά",
+DlgAboutBrowserInfoTab	: "Πληροφορίες Browser",
+DlgAboutLicenseTab	: "Άδεια",
+DlgAboutVersion		: "έκδοση",
+DlgAboutInfo		: "Για περισσότερες πληροφορίες"
+};
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/en-au.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/en-au.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/en-au.js	(revision 1280)
@@ -0,0 +1,516 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * English (Australia) language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Collapse Toolbar",
+ToolbarExpand		: "Expand Toolbar",
+
+// Toolbar Items and Context Menu
+Save				: "Save",
+NewPage				: "New Page",
+Preview				: "Preview",
+Cut					: "Cut",
+Copy				: "Copy",
+Paste				: "Paste",
+PasteText			: "Paste as plain text",
+PasteWord			: "Paste from Word",
+Print				: "Print",
+SelectAll			: "Select All",
+RemoveFormat		: "Remove Format",
+InsertLinkLbl		: "Link",
+InsertLink			: "Insert/Edit Link",
+RemoveLink			: "Remove Link",
+Anchor				: "Insert/Edit Anchor",
+AnchorDelete		: "Remove Anchor",
+InsertImageLbl		: "Image",
+InsertImage			: "Insert/Edit Image",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Insert/Edit Flash",
+InsertTableLbl		: "Table",
+InsertTable			: "Insert/Edit Table",
+InsertLineLbl		: "Line",
+InsertLine			: "Insert Horizontal Line",
+InsertSpecialCharLbl: "Special Character",
+InsertSpecialChar	: "Insert Special Character",
+InsertSmileyLbl		: "Smiley",
+InsertSmiley		: "Insert Smiley",
+About				: "About FCKeditor",
+Bold				: "Bold",
+Italic				: "Italic",
+Underline			: "Underline",
+StrikeThrough		: "Strike Through",
+Subscript			: "Subscript",
+Superscript			: "Superscript",
+LeftJustify			: "Left Justify",
+CenterJustify		: "Centre Justify",
+RightJustify		: "Right Justify",
+BlockJustify		: "Block Justify",
+DecreaseIndent		: "Decrease Indent",
+IncreaseIndent		: "Increase Indent",
+Blockquote			: "Blockquote",
+Undo				: "Undo",
+Redo				: "Redo",
+NumberedListLbl		: "Numbered List",
+NumberedList		: "Insert/Remove Numbered List",
+BulletedListLbl		: "Bulleted List",
+BulletedList		: "Insert/Remove Bulleted List",
+ShowTableBorders	: "Show Table Borders",
+ShowDetails			: "Show Details",
+Style				: "Style",
+FontFormat			: "Format",
+Font				: "Font",
+FontSize			: "Size",
+TextColor			: "Text Colour",
+BGColor				: "Background Colour",
+Source				: "Source",
+Find				: "Find",
+Replace				: "Replace",
+SpellCheck			: "Check Spelling",
+UniversalKeyboard	: "Universal Keyboard",
+PageBreakLbl		: "Page Break",
+PageBreak			: "Insert Page Break",
+
+Form			: "Form",
+Checkbox		: "Checkbox",
+RadioButton		: "Radio Button",
+TextField		: "Text Field",
+Textarea		: "Textarea",
+HiddenField		: "Hidden Field",
+Button			: "Button",
+SelectionField	: "Selection Field",
+ImageButton		: "Image Button",
+
+FitWindow		: "Maximize the editor size",
+ShowBlocks		: "Show Blocks",
+
+// Context Menu
+EditLink			: "Edit Link",
+CellCM				: "Cell",
+RowCM				: "Row",
+ColumnCM			: "Column",
+InsertRowAfter		: "Insert Row After",
+InsertRowBefore		: "Insert Row Before",
+DeleteRows			: "Delete Rows",
+InsertColumnAfter	: "Insert Column After",
+InsertColumnBefore	: "Insert Column Before",
+DeleteColumns		: "Delete Columns",
+InsertCellAfter		: "Insert Cell After",
+InsertCellBefore	: "Insert Cell Before",
+DeleteCells			: "Delete Cells",
+MergeCells			: "Merge Cells",
+MergeRight			: "Merge Right",
+MergeDown			: "Merge Down",
+HorizontalSplitCell	: "Split Cell Horizontally",
+VerticalSplitCell	: "Split Cell Vertically",
+TableDelete			: "Delete Table",
+CellProperties		: "Cell Properties",
+TableProperties		: "Table Properties",
+ImageProperties		: "Image Properties",
+FlashProperties		: "Flash Properties",
+
+AnchorProp			: "Anchor Properties",
+ButtonProp			: "Button Properties",
+CheckboxProp		: "Checkbox Properties",
+HiddenFieldProp		: "Hidden Field Properties",
+RadioButtonProp		: "Radio Button Properties",
+ImageButtonProp		: "Image Button Properties",
+TextFieldProp		: "Text Field Properties",
+SelectionFieldProp	: "Selection Field Properties",
+TextareaProp		: "Textarea Properties",
+FormProp			: "Form Properties",
+
+FontFormats			: "Normal;Formatted;Address;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6;Normal (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "Processing XHTML. Please wait...",
+Done				: "Done",
+PasteWordConfirm	: "The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?",
+NotCompatiblePaste	: "This command is available for Internet Explorer version 5.5 or more. Do you want to paste without cleaning?",
+UnknownToolbarItem	: "Unknown toolbar item \"%1\"",
+UnknownCommand		: "Unknown command name \"%1\"",
+NotImplemented		: "Command not implemented",
+UnknownToolbarSet	: "Toolbar set \"%1\" doesn't exist",
+NoActiveX			: "Your browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.",
+BrowseServerBlocked : "The resources browser could not be opened. Make sure that all popup blockers are disabled.",
+DialogBlocked		: "It was not possible to open the dialog window. Make sure all popup blockers are disabled.",
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Cancel",
+DlgBtnClose			: "Close",
+DlgBtnBrowseServer	: "Browse Server",
+DlgAdvancedTag		: "Advanced",
+DlgOpOther			: "<Other>",
+DlgInfoTab			: "Info",
+DlgAlertUrl			: "Please insert the URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<not set>",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Language Direction",
+DlgGenLangDirLtr	: "Left to Right (LTR)",
+DlgGenLangDirRtl	: "Right to Left (RTL)",
+DlgGenLangCode		: "Language Code",
+DlgGenAccessKey		: "Access Key",
+DlgGenName			: "Name",
+DlgGenTabIndex		: "Tab Index",
+DlgGenLongDescr		: "Long Description URL",
+DlgGenClass			: "Stylesheet Classes",
+DlgGenTitle			: "Advisory Title",
+DlgGenContType		: "Advisory Content Type",
+DlgGenLinkCharset	: "Linked Resource Charset",
+DlgGenStyle			: "Style",
+
+// Image Dialog
+DlgImgTitle			: "Image Properties",
+DlgImgInfoTab		: "Image Info",
+DlgImgBtnUpload		: "Send it to the Server",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Upload",
+DlgImgAlt			: "Alternative Text",
+DlgImgWidth			: "Width",
+DlgImgHeight		: "Height",
+DlgImgLockRatio		: "Lock Ratio",
+DlgBtnResetSize		: "Reset Size",
+DlgImgBorder		: "Border",
+DlgImgHSpace		: "HSpace",
+DlgImgVSpace		: "VSpace",
+DlgImgAlign			: "Align",
+DlgImgAlignLeft		: "Left",
+DlgImgAlignAbsBottom: "Abs Bottom",
+DlgImgAlignAbsMiddle: "Abs Middle",
+DlgImgAlignBaseline	: "Baseline",
+DlgImgAlignBottom	: "Bottom",
+DlgImgAlignMiddle	: "Middle",
+DlgImgAlignRight	: "Right",
+DlgImgAlignTextTop	: "Text Top",
+DlgImgAlignTop		: "Top",
+DlgImgPreview		: "Preview",
+DlgImgAlertUrl		: "Please type the image URL",
+DlgImgLinkTab		: "Link",
+
+// Flash Dialog
+DlgFlashTitle		: "Flash Properties",
+DlgFlashChkPlay		: "Auto Play",
+DlgFlashChkLoop		: "Loop",
+DlgFlashChkMenu		: "Enable Flash Menu",
+DlgFlashScale		: "Scale",
+DlgFlashScaleAll	: "Show all",
+DlgFlashScaleNoBorder	: "No Border",
+DlgFlashScaleFit	: "Exact Fit",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Link",
+DlgLnkInfoTab		: "Link Info",
+DlgLnkTargetTab		: "Target",
+
+DlgLnkType			: "Link Type",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Link to anchor in the text",
+DlgLnkTypeEMail		: "E-Mail",
+DlgLnkProto			: "Protocol",
+DlgLnkProtoOther	: "<other>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Select an Anchor",
+DlgLnkAnchorByName	: "By Anchor Name",
+DlgLnkAnchorById	: "By Element Id",
+DlgLnkNoAnchors		: "(No anchors available in the document)",
+DlgLnkEMail			: "E-Mail Address",
+DlgLnkEMailSubject	: "Message Subject",
+DlgLnkEMailBody		: "Message Body",
+DlgLnkUpload		: "Upload",
+DlgLnkBtnUpload		: "Send it to the Server",
+
+DlgLnkTarget		: "Target",
+DlgLnkTargetFrame	: "<frame>",
+DlgLnkTargetPopup	: "<popup window>",
+DlgLnkTargetBlank	: "New Window (_blank)",
+DlgLnkTargetParent	: "Parent Window (_parent)",
+DlgLnkTargetSelf	: "Same Window (_self)",
+DlgLnkTargetTop		: "Topmost Window (_top)",
+DlgLnkTargetFrameName	: "Target Frame Name",
+DlgLnkPopWinName	: "Popup Window Name",
+DlgLnkPopWinFeat	: "Popup Window Features",
+DlgLnkPopResize		: "Resizable",
+DlgLnkPopLocation	: "Location Bar",
+DlgLnkPopMenu		: "Menu Bar",
+DlgLnkPopScroll		: "Scroll Bars",
+DlgLnkPopStatus		: "Status Bar",
+DlgLnkPopToolbar	: "Toolbar",
+DlgLnkPopFullScrn	: "Full Screen (IE)",
+DlgLnkPopDependent	: "Dependent (Netscape)",
+DlgLnkPopWidth		: "Width",
+DlgLnkPopHeight		: "Height",
+DlgLnkPopLeft		: "Left Position",
+DlgLnkPopTop		: "Top Position",
+
+DlnLnkMsgNoUrl		: "Please type the link URL",
+DlnLnkMsgNoEMail	: "Please type the e-mail address",
+DlnLnkMsgNoAnchor	: "Please select an anchor",
+DlnLnkMsgInvPopName	: "The popup name must begin with an alphabetic character and must not contain spaces",
+
+// Color Dialog
+DlgColorTitle		: "Select Colour",
+DlgColorBtnClear	: "Clear",
+DlgColorHighlight	: "Highlight",
+DlgColorSelected	: "Selected",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Insert a Smiley",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Select Special Character",
+
+// Table Dialog
+DlgTableTitle		: "Table Properties",
+DlgTableRows		: "Rows",
+DlgTableColumns		: "Columns",
+DlgTableBorder		: "Border size",
+DlgTableAlign		: "Alignment",
+DlgTableAlignNotSet	: "<Not set>",
+DlgTableAlignLeft	: "Left",
+DlgTableAlignCenter	: "Centre",
+DlgTableAlignRight	: "Right",
+DlgTableWidth		: "Width",
+DlgTableWidthPx		: "pixels",
+DlgTableWidthPc		: "percent",
+DlgTableHeight		: "Height",
+DlgTableCellSpace	: "Cell spacing",
+DlgTableCellPad		: "Cell padding",
+DlgTableCaption		: "Caption",
+DlgTableSummary		: "Summary",
+
+// Table Cell Dialog
+DlgCellTitle		: "Cell Properties",
+DlgCellWidth		: "Width",
+DlgCellWidthPx		: "pixels",
+DlgCellWidthPc		: "percent",
+DlgCellHeight		: "Height",
+DlgCellWordWrap		: "Word Wrap",
+DlgCellWordWrapNotSet	: "<Not set>",
+DlgCellWordWrapYes	: "Yes",
+DlgCellWordWrapNo	: "No",
+DlgCellHorAlign		: "Horizontal Alignment",
+DlgCellHorAlignNotSet	: "<Not set>",
+DlgCellHorAlignLeft	: "Left",
+DlgCellHorAlignCenter	: "Centre",
+DlgCellHorAlignRight: "Right",
+DlgCellVerAlign		: "Vertical Alignment",
+DlgCellVerAlignNotSet	: "<Not set>",
+DlgCellVerAlignTop	: "Top",
+DlgCellVerAlignMiddle	: "Middle",
+DlgCellVerAlignBottom	: "Bottom",
+DlgCellVerAlignBaseline	: "Baseline",
+DlgCellRowSpan		: "Rows Span",
+DlgCellCollSpan		: "Columns Span",
+DlgCellBackColor	: "Background Colour",
+DlgCellBorderColor	: "Border Colour",
+DlgCellBtnSelect	: "Select...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Find and Replace",
+
+// Find Dialog
+DlgFindTitle		: "Find",
+DlgFindFindBtn		: "Find",
+DlgFindNotFoundMsg	: "The specified text was not found.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Replace",
+DlgReplaceFindLbl		: "Find what:",
+DlgReplaceReplaceLbl	: "Replace with:",
+DlgReplaceCaseChk		: "Match case",
+DlgReplaceReplaceBtn	: "Replace",
+DlgReplaceReplAllBtn	: "Replace All",
+DlgReplaceWordChk		: "Match whole word",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl+X).",
+PasteErrorCopy	: "Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl+C).",
+
+PasteAsText		: "Paste as Plain Text",
+PasteFromWord	: "Paste from Word",
+
+DlgPasteMsg2	: "Please paste inside the following box using the keyboard (<STRONG>Ctrl+V</STRONG>) and hit <STRONG>OK</STRONG>.",
+DlgPasteSec		: "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.",
+DlgPasteIgnoreFont		: "Ignore Font Face definitions",
+DlgPasteRemoveStyles	: "Remove Styles definitions",
+DlgPasteCleanBox		: "Clean Up Box",
+
+// Color Picker
+ColorAutomatic	: "Automatic",
+ColorMoreColors	: "More Colours...",
+
+// Document Properties
+DocProps		: "Document Properties",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Anchor Properties",
+DlgAnchorName		: "Anchor Name",
+DlgAnchorErrorName	: "Please type the anchor name",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Not in dictionary",
+DlgSpellChangeTo		: "Change to",
+DlgSpellBtnIgnore		: "Ignore",
+DlgSpellBtnIgnoreAll	: "Ignore All",
+DlgSpellBtnReplace		: "Replace",
+DlgSpellBtnReplaceAll	: "Replace All",
+DlgSpellBtnUndo			: "Undo",
+DlgSpellNoSuggestions	: "- No suggestions -",
+DlgSpellProgress		: "Spell check in progress...",
+DlgSpellNoMispell		: "Spell check complete: No misspellings found",
+DlgSpellNoChanges		: "Spell check complete: No words changed",
+DlgSpellOneChange		: "Spell check complete: One word changed",
+DlgSpellManyChanges		: "Spell check complete: %1 words changed",
+
+IeSpellDownload			: "Spell checker not installed. Do you want to download it now?",
+
+// Button Dialog
+DlgButtonText		: "Text (Value)",
+DlgButtonType		: "Type",
+DlgButtonTypeBtn	: "Button",
+DlgButtonTypeSbm	: "Submit",
+DlgButtonTypeRst	: "Reset",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Name",
+DlgCheckboxValue	: "Value",
+DlgCheckboxSelected	: "Selected",
+
+// Form Dialog
+DlgFormName		: "Name",
+DlgFormAction	: "Action",
+DlgFormMethod	: "Method",
+
+// Select Field Dialog
+DlgSelectName		: "Name",
+DlgSelectValue		: "Value",
+DlgSelectSize		: "Size",
+DlgSelectLines		: "lines",
+DlgSelectChkMulti	: "Allow multiple selections",
+DlgSelectOpAvail	: "Available Options",
+DlgSelectOpText		: "Text",
+DlgSelectOpValue	: "Value",
+DlgSelectBtnAdd		: "Add",
+DlgSelectBtnModify	: "Modify",
+DlgSelectBtnUp		: "Up",
+DlgSelectBtnDown	: "Down",
+DlgSelectBtnSetValue : "Set as selected value",
+DlgSelectBtnDelete	: "Delete",
+
+// Textarea Dialog
+DlgTextareaName	: "Name",
+DlgTextareaCols	: "Columns",
+DlgTextareaRows	: "Rows",
+
+// Text Field Dialog
+DlgTextName			: "Name",
+DlgTextValue		: "Value",
+DlgTextCharWidth	: "Character Width",
+DlgTextMaxChars		: "Maximum Characters",
+DlgTextType			: "Type",
+DlgTextTypeText		: "Text",
+DlgTextTypePass		: "Password",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Name",
+DlgHiddenValue	: "Value",
+
+// Bulleted List Dialog
+BulletedListProp	: "Bulleted List Properties",
+NumberedListProp	: "Numbered List Properties",
+DlgLstStart			: "Start",
+DlgLstType			: "Type",
+DlgLstTypeCircle	: "Circle",
+DlgLstTypeDisc		: "Disc",
+DlgLstTypeSquare	: "Square",
+DlgLstTypeNumbers	: "Numbers (1, 2, 3)",
+DlgLstTypeLCase		: "Lowercase Letters (a, b, c)",
+DlgLstTypeUCase		: "Uppercase Letters (A, B, C)",
+DlgLstTypeSRoman	: "Small Roman Numerals (i, ii, iii)",
+DlgLstTypeLRoman	: "Large Roman Numerals (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "General",
+DlgDocBackTab		: "Background",
+DlgDocColorsTab		: "Colours and Margins",
+DlgDocMetaTab		: "Meta Data",
+
+DlgDocPageTitle		: "Page Title",
+DlgDocLangDir		: "Language Direction",
+DlgDocLangDirLTR	: "Left to Right (LTR)",
+DlgDocLangDirRTL	: "Right to Left (RTL)",
+DlgDocLangCode		: "Language Code",
+DlgDocCharSet		: "Character Set Encoding",
+DlgDocCharSetCE		: "Central European",
+DlgDocCharSetCT		: "Chinese Traditional (Big5)",
+DlgDocCharSetCR		: "Cyrillic",
+DlgDocCharSetGR		: "Greek",
+DlgDocCharSetJP		: "Japanese",
+DlgDocCharSetKR		: "Korean",
+DlgDocCharSetTR		: "Turkish",
+DlgDocCharSetUN		: "Unicode (UTF-8)",
+DlgDocCharSetWE		: "Western European",
+DlgDocCharSetOther	: "Other Character Set Encoding",
+
+DlgDocDocType		: "Document Type Heading",
+DlgDocDocTypeOther	: "Other Document Type Heading",
+DlgDocIncXHTML		: "Include XHTML Declarations",
+DlgDocBgColor		: "Background Colour",
+DlgDocBgImage		: "Background Image URL",
+DlgDocBgNoScroll	: "Nonscrolling Background",
+DlgDocCText			: "Text",
+DlgDocCLink			: "Link",
+DlgDocCVisited		: "Visited Link",
+DlgDocCActive		: "Active Link",
+DlgDocMargins		: "Page Margins",
+DlgDocMaTop			: "Top",
+DlgDocMaLeft		: "Left",
+DlgDocMaRight		: "Right",
+DlgDocMaBottom		: "Bottom",
+DlgDocMeIndex		: "Document Indexing Keywords (comma separated)",
+DlgDocMeDescr		: "Document Description",
+DlgDocMeAuthor		: "Author",
+DlgDocMeCopy		: "Copyright",
+DlgDocPreview		: "Preview",
+
+// Templates Dialog
+Templates			: "Templates",
+DlgTemplatesTitle	: "Content Templates",
+DlgTemplatesSelMsg	: "Please select the template to open in the editor<br>(the actual contents will be lost):",
+DlgTemplatesLoading	: "Loading templates list. Please wait...",
+DlgTemplatesNoTpl	: "(No templates defined)",
+DlgTemplatesReplace	: "Replace actual contents",
+
+// About Dialog
+DlgAboutAboutTab	: "About",
+DlgAboutBrowserInfoTab	: "Browser Info",
+DlgAboutLicenseTab	: "License",
+DlgAboutVersion		: "version",
+DlgAboutInfo		: "For further information go to"
+};
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/en-ca.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/en-ca.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/en-ca.js	(revision 1280)
@@ -0,0 +1,516 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * English (Canadian) language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Collapse Toolbar",
+ToolbarExpand		: "Expand Toolbar",
+
+// Toolbar Items and Context Menu
+Save				: "Save",
+NewPage				: "New Page",
+Preview				: "Preview",
+Cut					: "Cut",
+Copy				: "Copy",
+Paste				: "Paste",
+PasteText			: "Paste as plain text",
+PasteWord			: "Paste from Word",
+Print				: "Print",
+SelectAll			: "Select All",
+RemoveFormat		: "Remove Format",
+InsertLinkLbl		: "Link",
+InsertLink			: "Insert/Edit Link",
+RemoveLink			: "Remove Link",
+Anchor				: "Insert/Edit Anchor",
+AnchorDelete		: "Remove Anchor",
+InsertImageLbl		: "Image",
+InsertImage			: "Insert/Edit Image",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Insert/Edit Flash",
+InsertTableLbl		: "Table",
+InsertTable			: "Insert/Edit Table",
+InsertLineLbl		: "Line",
+InsertLine			: "Insert Horizontal Line",
+InsertSpecialCharLbl: "Special Character",
+InsertSpecialChar	: "Insert Special Character",
+InsertSmileyLbl		: "Smiley",
+InsertSmiley		: "Insert Smiley",
+About				: "About FCKeditor",
+Bold				: "Bold",
+Italic				: "Italic",
+Underline			: "Underline",
+StrikeThrough		: "Strike Through",
+Subscript			: "Subscript",
+Superscript			: "Superscript",
+LeftJustify			: "Left Justify",
+CenterJustify		: "Centre Justify",
+RightJustify		: "Right Justify",
+BlockJustify		: "Block Justify",
+DecreaseIndent		: "Decrease Indent",
+IncreaseIndent		: "Increase Indent",
+Blockquote			: "Blockquote",
+Undo				: "Undo",
+Redo				: "Redo",
+NumberedListLbl		: "Numbered List",
+NumberedList		: "Insert/Remove Numbered List",
+BulletedListLbl		: "Bulleted List",
+BulletedList		: "Insert/Remove Bulleted List",
+ShowTableBorders	: "Show Table Borders",
+ShowDetails			: "Show Details",
+Style				: "Style",
+FontFormat			: "Format",
+Font				: "Font",
+FontSize			: "Size",
+TextColor			: "Text Colour",
+BGColor				: "Background Colour",
+Source				: "Source",
+Find				: "Find",
+Replace				: "Replace",
+SpellCheck			: "Check Spelling",
+UniversalKeyboard	: "Universal Keyboard",
+PageBreakLbl		: "Page Break",
+PageBreak			: "Insert Page Break",
+
+Form			: "Form",
+Checkbox		: "Checkbox",
+RadioButton		: "Radio Button",
+TextField		: "Text Field",
+Textarea		: "Textarea",
+HiddenField		: "Hidden Field",
+Button			: "Button",
+SelectionField	: "Selection Field",
+ImageButton		: "Image Button",
+
+FitWindow		: "Maximize the editor size",
+ShowBlocks		: "Show Blocks",
+
+// Context Menu
+EditLink			: "Edit Link",
+CellCM				: "Cell",
+RowCM				: "Row",
+ColumnCM			: "Column",
+InsertRowAfter		: "Insert Row After",
+InsertRowBefore		: "Insert Row Before",
+DeleteRows			: "Delete Rows",
+InsertColumnAfter	: "Insert Column After",
+InsertColumnBefore	: "Insert Column Before",
+DeleteColumns		: "Delete Columns",
+InsertCellAfter		: "Insert Cell After",
+InsertCellBefore	: "Insert Cell Before",
+DeleteCells			: "Delete Cells",
+MergeCells			: "Merge Cells",
+MergeRight			: "Merge Right",
+MergeDown			: "Merge Down",
+HorizontalSplitCell	: "Split Cell Horizontally",
+VerticalSplitCell	: "Split Cell Vertically",
+TableDelete			: "Delete Table",
+CellProperties		: "Cell Properties",
+TableProperties		: "Table Properties",
+ImageProperties		: "Image Properties",
+FlashProperties		: "Flash Properties",
+
+AnchorProp			: "Anchor Properties",
+ButtonProp			: "Button Properties",
+CheckboxProp		: "Checkbox Properties",
+HiddenFieldProp		: "Hidden Field Properties",
+RadioButtonProp		: "Radio Button Properties",
+ImageButtonProp		: "Image Button Properties",
+TextFieldProp		: "Text Field Properties",
+SelectionFieldProp	: "Selection Field Properties",
+TextareaProp		: "Textarea Properties",
+FormProp			: "Form Properties",
+
+FontFormats			: "Normal;Formatted;Address;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6;Normal (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "Processing XHTML. Please wait...",
+Done				: "Done",
+PasteWordConfirm	: "The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?",
+NotCompatiblePaste	: "This command is available for Internet Explorer version 5.5 or more. Do you want to paste without cleaning?",
+UnknownToolbarItem	: "Unknown toolbar item \"%1\"",
+UnknownCommand		: "Unknown command name \"%1\"",
+NotImplemented		: "Command not implemented",
+UnknownToolbarSet	: "Toolbar set \"%1\" doesn't exist",
+NoActiveX			: "Your browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.",
+BrowseServerBlocked : "The resources browser could not be opened. Make sure that all popup blockers are disabled.",
+DialogBlocked		: "It was not possible to open the dialog window. Make sure all popup blockers are disabled.",
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Cancel",
+DlgBtnClose			: "Close",
+DlgBtnBrowseServer	: "Browse Server",
+DlgAdvancedTag		: "Advanced",
+DlgOpOther			: "<Other>",
+DlgInfoTab			: "Info",
+DlgAlertUrl			: "Please insert the URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<not set>",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Language Direction",
+DlgGenLangDirLtr	: "Left to Right (LTR)",
+DlgGenLangDirRtl	: "Right to Left (RTL)",
+DlgGenLangCode		: "Language Code",
+DlgGenAccessKey		: "Access Key",
+DlgGenName			: "Name",
+DlgGenTabIndex		: "Tab Index",
+DlgGenLongDescr		: "Long Description URL",
+DlgGenClass			: "Stylesheet Classes",
+DlgGenTitle			: "Advisory Title",
+DlgGenContType		: "Advisory Content Type",
+DlgGenLinkCharset	: "Linked Resource Charset",
+DlgGenStyle			: "Style",
+
+// Image Dialog
+DlgImgTitle			: "Image Properties",
+DlgImgInfoTab		: "Image Info",
+DlgImgBtnUpload		: "Send it to the Server",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Upload",
+DlgImgAlt			: "Alternative Text",
+DlgImgWidth			: "Width",
+DlgImgHeight		: "Height",
+DlgImgLockRatio		: "Lock Ratio",
+DlgBtnResetSize		: "Reset Size",
+DlgImgBorder		: "Border",
+DlgImgHSpace		: "HSpace",
+DlgImgVSpace		: "VSpace",
+DlgImgAlign			: "Align",
+DlgImgAlignLeft		: "Left",
+DlgImgAlignAbsBottom: "Abs Bottom",
+DlgImgAlignAbsMiddle: "Abs Middle",
+DlgImgAlignBaseline	: "Baseline",
+DlgImgAlignBottom	: "Bottom",
+DlgImgAlignMiddle	: "Middle",
+DlgImgAlignRight	: "Right",
+DlgImgAlignTextTop	: "Text Top",
+DlgImgAlignTop		: "Top",
+DlgImgPreview		: "Preview",
+DlgImgAlertUrl		: "Please type the image URL",
+DlgImgLinkTab		: "Link",
+
+// Flash Dialog
+DlgFlashTitle		: "Flash Properties",
+DlgFlashChkPlay		: "Auto Play",
+DlgFlashChkLoop		: "Loop",
+DlgFlashChkMenu		: "Enable Flash Menu",
+DlgFlashScale		: "Scale",
+DlgFlashScaleAll	: "Show all",
+DlgFlashScaleNoBorder	: "No Border",
+DlgFlashScaleFit	: "Exact Fit",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Link",
+DlgLnkInfoTab		: "Link Info",
+DlgLnkTargetTab		: "Target",
+
+DlgLnkType			: "Link Type",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Link to anchor in the text",
+DlgLnkTypeEMail		: "E-Mail",
+DlgLnkProto			: "Protocol",
+DlgLnkProtoOther	: "<other>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Select an Anchor",
+DlgLnkAnchorByName	: "By Anchor Name",
+DlgLnkAnchorById	: "By Element Id",
+DlgLnkNoAnchors		: "(No anchors available in the document)",
+DlgLnkEMail			: "E-Mail Address",
+DlgLnkEMailSubject	: "Message Subject",
+DlgLnkEMailBody		: "Message Body",
+DlgLnkUpload		: "Upload",
+DlgLnkBtnUpload		: "Send it to the Server",
+
+DlgLnkTarget		: "Target",
+DlgLnkTargetFrame	: "<frame>",
+DlgLnkTargetPopup	: "<popup window>",
+DlgLnkTargetBlank	: "New Window (_blank)",
+DlgLnkTargetParent	: "Parent Window (_parent)",
+DlgLnkTargetSelf	: "Same Window (_self)",
+DlgLnkTargetTop		: "Topmost Window (_top)",
+DlgLnkTargetFrameName	: "Target Frame Name",
+DlgLnkPopWinName	: "Popup Window Name",
+DlgLnkPopWinFeat	: "Popup Window Features",
+DlgLnkPopResize		: "Resizable",
+DlgLnkPopLocation	: "Location Bar",
+DlgLnkPopMenu		: "Menu Bar",
+DlgLnkPopScroll		: "Scroll Bars",
+DlgLnkPopStatus		: "Status Bar",
+DlgLnkPopToolbar	: "Toolbar",
+DlgLnkPopFullScrn	: "Full Screen (IE)",
+DlgLnkPopDependent	: "Dependent (Netscape)",
+DlgLnkPopWidth		: "Width",
+DlgLnkPopHeight		: "Height",
+DlgLnkPopLeft		: "Left Position",
+DlgLnkPopTop		: "Top Position",
+
+DlnLnkMsgNoUrl		: "Please type the link URL",
+DlnLnkMsgNoEMail	: "Please type the e-mail address",
+DlnLnkMsgNoAnchor	: "Please select an anchor",
+DlnLnkMsgInvPopName	: "The popup name must begin with an alphabetic character and must not contain spaces",
+
+// Color Dialog
+DlgColorTitle		: "Select Colour",
+DlgColorBtnClear	: "Clear",
+DlgColorHighlight	: "Highlight",
+DlgColorSelected	: "Selected",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Insert a Smiley",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Select Special Character",
+
+// Table Dialog
+DlgTableTitle		: "Table Properties",
+DlgTableRows		: "Rows",
+DlgTableColumns		: "Columns",
+DlgTableBorder		: "Border size",
+DlgTableAlign		: "Alignment",
+DlgTableAlignNotSet	: "<Not set>",
+DlgTableAlignLeft	: "Left",
+DlgTableAlignCenter	: "Centre",
+DlgTableAlignRight	: "Right",
+DlgTableWidth		: "Width",
+DlgTableWidthPx		: "pixels",
+DlgTableWidthPc		: "percent",
+DlgTableHeight		: "Height",
+DlgTableCellSpace	: "Cell spacing",
+DlgTableCellPad		: "Cell padding",
+DlgTableCaption		: "Caption",
+DlgTableSummary		: "Summary",
+
+// Table Cell Dialog
+DlgCellTitle		: "Cell Properties",
+DlgCellWidth		: "Width",
+DlgCellWidthPx		: "pixels",
+DlgCellWidthPc		: "percent",
+DlgCellHeight		: "Height",
+DlgCellWordWrap		: "Word Wrap",
+DlgCellWordWrapNotSet	: "<Not set>",
+DlgCellWordWrapYes	: "Yes",
+DlgCellWordWrapNo	: "No",
+DlgCellHorAlign		: "Horizontal Alignment",
+DlgCellHorAlignNotSet	: "<Not set>",
+DlgCellHorAlignLeft	: "Left",
+DlgCellHorAlignCenter	: "Centre",
+DlgCellHorAlignRight: "Right",
+DlgCellVerAlign		: "Vertical Alignment",
+DlgCellVerAlignNotSet	: "<Not set>",
+DlgCellVerAlignTop	: "Top",
+DlgCellVerAlignMiddle	: "Middle",
+DlgCellVerAlignBottom	: "Bottom",
+DlgCellVerAlignBaseline	: "Baseline",
+DlgCellRowSpan		: "Rows Span",
+DlgCellCollSpan		: "Columns Span",
+DlgCellBackColor	: "Background Colour",
+DlgCellBorderColor	: "Border Colour",
+DlgCellBtnSelect	: "Select...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Find and Replace",
+
+// Find Dialog
+DlgFindTitle		: "Find",
+DlgFindFindBtn		: "Find",
+DlgFindNotFoundMsg	: "The specified text was not found.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Replace",
+DlgReplaceFindLbl		: "Find what:",
+DlgReplaceReplaceLbl	: "Replace with:",
+DlgReplaceCaseChk		: "Match case",
+DlgReplaceReplaceBtn	: "Replace",
+DlgReplaceReplAllBtn	: "Replace All",
+DlgReplaceWordChk		: "Match whole word",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl+X).",
+PasteErrorCopy	: "Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl+C).",
+
+PasteAsText		: "Paste as Plain Text",
+PasteFromWord	: "Paste from Word",
+
+DlgPasteMsg2	: "Please paste inside the following box using the keyboard (<STRONG>Ctrl+V</STRONG>) and hit <STRONG>OK</STRONG>.",
+DlgPasteSec		: "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.",
+DlgPasteIgnoreFont		: "Ignore Font Face definitions",
+DlgPasteRemoveStyles	: "Remove Styles definitions",
+DlgPasteCleanBox		: "Clean Up Box",
+
+// Color Picker
+ColorAutomatic	: "Automatic",
+ColorMoreColors	: "More Colours...",
+
+// Document Properties
+DocProps		: "Document Properties",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Anchor Properties",
+DlgAnchorName		: "Anchor Name",
+DlgAnchorErrorName	: "Please type the anchor name",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Not in dictionary",
+DlgSpellChangeTo		: "Change to",
+DlgSpellBtnIgnore		: "Ignore",
+DlgSpellBtnIgnoreAll	: "Ignore All",
+DlgSpellBtnReplace		: "Replace",
+DlgSpellBtnReplaceAll	: "Replace All",
+DlgSpellBtnUndo			: "Undo",
+DlgSpellNoSuggestions	: "- No suggestions -",
+DlgSpellProgress		: "Spell check in progress...",
+DlgSpellNoMispell		: "Spell check complete: No misspellings found",
+DlgSpellNoChanges		: "Spell check complete: No words changed",
+DlgSpellOneChange		: "Spell check complete: One word changed",
+DlgSpellManyChanges		: "Spell check complete: %1 words changed",
+
+IeSpellDownload			: "Spell checker not installed. Do you want to download it now?",
+
+// Button Dialog
+DlgButtonText		: "Text (Value)",
+DlgButtonType		: "Type",
+DlgButtonTypeBtn	: "Button",
+DlgButtonTypeSbm	: "Submit",
+DlgButtonTypeRst	: "Reset",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Name",
+DlgCheckboxValue	: "Value",
+DlgCheckboxSelected	: "Selected",
+
+// Form Dialog
+DlgFormName		: "Name",
+DlgFormAction	: "Action",
+DlgFormMethod	: "Method",
+
+// Select Field Dialog
+DlgSelectName		: "Name",
+DlgSelectValue		: "Value",
+DlgSelectSize		: "Size",
+DlgSelectLines		: "lines",
+DlgSelectChkMulti	: "Allow multiple selections",
+DlgSelectOpAvail	: "Available Options",
+DlgSelectOpText		: "Text",
+DlgSelectOpValue	: "Value",
+DlgSelectBtnAdd		: "Add",
+DlgSelectBtnModify	: "Modify",
+DlgSelectBtnUp		: "Up",
+DlgSelectBtnDown	: "Down",
+DlgSelectBtnSetValue : "Set as selected value",
+DlgSelectBtnDelete	: "Delete",
+
+// Textarea Dialog
+DlgTextareaName	: "Name",
+DlgTextareaCols	: "Columns",
+DlgTextareaRows	: "Rows",
+
+// Text Field Dialog
+DlgTextName			: "Name",
+DlgTextValue		: "Value",
+DlgTextCharWidth	: "Character Width",
+DlgTextMaxChars		: "Maximum Characters",
+DlgTextType			: "Type",
+DlgTextTypeText		: "Text",
+DlgTextTypePass		: "Password",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Name",
+DlgHiddenValue	: "Value",
+
+// Bulleted List Dialog
+BulletedListProp	: "Bulleted List Properties",
+NumberedListProp	: "Numbered List Properties",
+DlgLstStart			: "Start",
+DlgLstType			: "Type",
+DlgLstTypeCircle	: "Circle",
+DlgLstTypeDisc		: "Disc",
+DlgLstTypeSquare	: "Square",
+DlgLstTypeNumbers	: "Numbers (1, 2, 3)",
+DlgLstTypeLCase		: "Lowercase Letters (a, b, c)",
+DlgLstTypeUCase		: "Uppercase Letters (A, B, C)",
+DlgLstTypeSRoman	: "Small Roman Numerals (i, ii, iii)",
+DlgLstTypeLRoman	: "Large Roman Numerals (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "General",
+DlgDocBackTab		: "Background",
+DlgDocColorsTab		: "Colours and Margins",
+DlgDocMetaTab		: "Meta Data",
+
+DlgDocPageTitle		: "Page Title",
+DlgDocLangDir		: "Language Direction",
+DlgDocLangDirLTR	: "Left to Right (LTR)",
+DlgDocLangDirRTL	: "Right to Left (RTL)",
+DlgDocLangCode		: "Language Code",
+DlgDocCharSet		: "Character Set Encoding",
+DlgDocCharSetCE		: "Central European",
+DlgDocCharSetCT		: "Chinese Traditional (Big5)",
+DlgDocCharSetCR		: "Cyrillic",
+DlgDocCharSetGR		: "Greek",
+DlgDocCharSetJP		: "Japanese",
+DlgDocCharSetKR		: "Korean",
+DlgDocCharSetTR		: "Turkish",
+DlgDocCharSetUN		: "Unicode (UTF-8)",
+DlgDocCharSetWE		: "Western European",
+DlgDocCharSetOther	: "Other Character Set Encoding",
+
+DlgDocDocType		: "Document Type Heading",
+DlgDocDocTypeOther	: "Other Document Type Heading",
+DlgDocIncXHTML		: "Include XHTML Declarations",
+DlgDocBgColor		: "Background Colour",
+DlgDocBgImage		: "Background Image URL",
+DlgDocBgNoScroll	: "Nonscrolling Background",
+DlgDocCText			: "Text",
+DlgDocCLink			: "Link",
+DlgDocCVisited		: "Visited Link",
+DlgDocCActive		: "Active Link",
+DlgDocMargins		: "Page Margins",
+DlgDocMaTop			: "Top",
+DlgDocMaLeft		: "Left",
+DlgDocMaRight		: "Right",
+DlgDocMaBottom		: "Bottom",
+DlgDocMeIndex		: "Document Indexing Keywords (comma separated)",
+DlgDocMeDescr		: "Document Description",
+DlgDocMeAuthor		: "Author",
+DlgDocMeCopy		: "Copyright",
+DlgDocPreview		: "Preview",
+
+// Templates Dialog
+Templates			: "Templates",
+DlgTemplatesTitle	: "Content Templates",
+DlgTemplatesSelMsg	: "Please select the template to open in the editor<br>(the actual contents will be lost):",
+DlgTemplatesLoading	: "Loading templates list. Please wait...",
+DlgTemplatesNoTpl	: "(No templates defined)",
+DlgTemplatesReplace	: "Replace actual contents",
+
+// About Dialog
+DlgAboutAboutTab	: "About",
+DlgAboutBrowserInfoTab	: "Browser Info",
+DlgAboutLicenseTab	: "License",
+DlgAboutVersion		: "version",
+DlgAboutInfo		: "For further information go to"
+};
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/en-uk.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/en-uk.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/en-uk.js	(revision 1280)
@@ -0,0 +1,516 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * English (United Kingdom) language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Collapse Toolbar",
+ToolbarExpand		: "Expand Toolbar",
+
+// Toolbar Items and Context Menu
+Save				: "Save",
+NewPage				: "New Page",
+Preview				: "Preview",
+Cut					: "Cut",
+Copy				: "Copy",
+Paste				: "Paste",
+PasteText			: "Paste as plain text",
+PasteWord			: "Paste from Word",
+Print				: "Print",
+SelectAll			: "Select All",
+RemoveFormat		: "Remove Format",
+InsertLinkLbl		: "Link",
+InsertLink			: "Insert/Edit Link",
+RemoveLink			: "Remove Link",
+Anchor				: "Insert/Edit Anchor",
+AnchorDelete		: "Remove Anchor",
+InsertImageLbl		: "Image",
+InsertImage			: "Insert/Edit Image",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Insert/Edit Flash",
+InsertTableLbl		: "Table",
+InsertTable			: "Insert/Edit Table",
+InsertLineLbl		: "Line",
+InsertLine			: "Insert Horizontal Line",
+InsertSpecialCharLbl: "Special Character",
+InsertSpecialChar	: "Insert Special Character",
+InsertSmileyLbl		: "Smiley",
+InsertSmiley		: "Insert Smiley",
+About				: "About FCKeditor",
+Bold				: "Bold",
+Italic				: "Italic",
+Underline			: "Underline",
+StrikeThrough		: "Strike Through",
+Subscript			: "Subscript",
+Superscript			: "Superscript",
+LeftJustify			: "Left Justify",
+CenterJustify		: "Centre Justify",
+RightJustify		: "Right Justify",
+BlockJustify		: "Block Justify",
+DecreaseIndent		: "Decrease Indent",
+IncreaseIndent		: "Increase Indent",
+Blockquote			: "Blockquote",
+Undo				: "Undo",
+Redo				: "Redo",
+NumberedListLbl		: "Numbered List",
+NumberedList		: "Insert/Remove Numbered List",
+BulletedListLbl		: "Bulleted List",
+BulletedList		: "Insert/Remove Bulleted List",
+ShowTableBorders	: "Show Table Borders",
+ShowDetails			: "Show Details",
+Style				: "Style",
+FontFormat			: "Format",
+Font				: "Font",
+FontSize			: "Size",
+TextColor			: "Text Colour",
+BGColor				: "Background Colour",
+Source				: "Source",
+Find				: "Find",
+Replace				: "Replace",
+SpellCheck			: "Check Spelling",
+UniversalKeyboard	: "Universal Keyboard",
+PageBreakLbl		: "Page Break",
+PageBreak			: "Insert Page Break",
+
+Form			: "Form",
+Checkbox		: "Checkbox",
+RadioButton		: "Radio Button",
+TextField		: "Text Field",
+Textarea		: "Textarea",
+HiddenField		: "Hidden Field",
+Button			: "Button",
+SelectionField	: "Selection Field",
+ImageButton		: "Image Button",
+
+FitWindow		: "Maximize the editor size",
+ShowBlocks		: "Show Blocks",
+
+// Context Menu
+EditLink			: "Edit Link",
+CellCM				: "Cell",
+RowCM				: "Row",
+ColumnCM			: "Column",
+InsertRowAfter		: "Insert Row After",
+InsertRowBefore		: "Insert Row Before",
+DeleteRows			: "Delete Rows",
+InsertColumnAfter	: "Insert Column After",
+InsertColumnBefore	: "Insert Column Before",
+DeleteColumns		: "Delete Columns",
+InsertCellAfter		: "Insert Cell After",
+InsertCellBefore	: "Insert Cell Before",
+DeleteCells			: "Delete Cells",
+MergeCells			: "Merge Cells",
+MergeRight			: "Merge Right",
+MergeDown			: "Merge Down",
+HorizontalSplitCell	: "Split Cell Horizontally",
+VerticalSplitCell	: "Split Cell Vertically",
+TableDelete			: "Delete Table",
+CellProperties		: "Cell Properties",
+TableProperties		: "Table Properties",
+ImageProperties		: "Image Properties",
+FlashProperties		: "Flash Properties",
+
+AnchorProp			: "Anchor Properties",
+ButtonProp			: "Button Properties",
+CheckboxProp		: "Checkbox Properties",
+HiddenFieldProp		: "Hidden Field Properties",
+RadioButtonProp		: "Radio Button Properties",
+ImageButtonProp		: "Image Button Properties",
+TextFieldProp		: "Text Field Properties",
+SelectionFieldProp	: "Selection Field Properties",
+TextareaProp		: "Textarea Properties",
+FormProp			: "Form Properties",
+
+FontFormats			: "Normal;Formatted;Address;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6;Normal (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "Processing XHTML. Please wait...",
+Done				: "Done",
+PasteWordConfirm	: "The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?",
+NotCompatiblePaste	: "This command is available for Internet Explorer version 5.5 or more. Do you want to paste without cleaning?",
+UnknownToolbarItem	: "Unknown toolbar item \"%1\"",
+UnknownCommand		: "Unknown command name \"%1\"",
+NotImplemented		: "Command not implemented",
+UnknownToolbarSet	: "Toolbar set \"%1\" doesn't exist",
+NoActiveX			: "Your browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.",
+BrowseServerBlocked : "The resources browser could not be opened. Make sure that all popup blockers are disabled.",
+DialogBlocked		: "It was not possible to open the dialog window. Make sure all popup blockers are disabled.",
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Cancel",
+DlgBtnClose			: "Close",
+DlgBtnBrowseServer	: "Browse Server",
+DlgAdvancedTag		: "Advanced",
+DlgOpOther			: "<Other>",
+DlgInfoTab			: "Info",
+DlgAlertUrl			: "Please insert the URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<not set>",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Language Direction",
+DlgGenLangDirLtr	: "Left to Right (LTR)",
+DlgGenLangDirRtl	: "Right to Left (RTL)",
+DlgGenLangCode		: "Language Code",
+DlgGenAccessKey		: "Access Key",
+DlgGenName			: "Name",
+DlgGenTabIndex		: "Tab Index",
+DlgGenLongDescr		: "Long Description URL",
+DlgGenClass			: "Stylesheet Classes",
+DlgGenTitle			: "Advisory Title",
+DlgGenContType		: "Advisory Content Type",
+DlgGenLinkCharset	: "Linked Resource Charset",
+DlgGenStyle			: "Style",
+
+// Image Dialog
+DlgImgTitle			: "Image Properties",
+DlgImgInfoTab		: "Image Info",
+DlgImgBtnUpload		: "Send it to the Server",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Upload",
+DlgImgAlt			: "Alternative Text",
+DlgImgWidth			: "Width",
+DlgImgHeight		: "Height",
+DlgImgLockRatio		: "Lock Ratio",
+DlgBtnResetSize		: "Reset Size",
+DlgImgBorder		: "Border",
+DlgImgHSpace		: "HSpace",
+DlgImgVSpace		: "VSpace",
+DlgImgAlign			: "Align",
+DlgImgAlignLeft		: "Left",
+DlgImgAlignAbsBottom: "Abs Bottom",
+DlgImgAlignAbsMiddle: "Abs Middle",
+DlgImgAlignBaseline	: "Baseline",
+DlgImgAlignBottom	: "Bottom",
+DlgImgAlignMiddle	: "Middle",
+DlgImgAlignRight	: "Right",
+DlgImgAlignTextTop	: "Text Top",
+DlgImgAlignTop		: "Top",
+DlgImgPreview		: "Preview",
+DlgImgAlertUrl		: "Please type the image URL",
+DlgImgLinkTab		: "Link",
+
+// Flash Dialog
+DlgFlashTitle		: "Flash Properties",
+DlgFlashChkPlay		: "Auto Play",
+DlgFlashChkLoop		: "Loop",
+DlgFlashChkMenu		: "Enable Flash Menu",
+DlgFlashScale		: "Scale",
+DlgFlashScaleAll	: "Show all",
+DlgFlashScaleNoBorder	: "No Border",
+DlgFlashScaleFit	: "Exact Fit",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Link",
+DlgLnkInfoTab		: "Link Info",
+DlgLnkTargetTab		: "Target",
+
+DlgLnkType			: "Link Type",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Link to anchor in the text",
+DlgLnkTypeEMail		: "E-Mail",
+DlgLnkProto			: "Protocol",
+DlgLnkProtoOther	: "<other>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Select an Anchor",
+DlgLnkAnchorByName	: "By Anchor Name",
+DlgLnkAnchorById	: "By Element Id",
+DlgLnkNoAnchors		: "(No anchors available in the document)",
+DlgLnkEMail			: "E-Mail Address",
+DlgLnkEMailSubject	: "Message Subject",
+DlgLnkEMailBody		: "Message Body",
+DlgLnkUpload		: "Upload",
+DlgLnkBtnUpload		: "Send it to the Server",
+
+DlgLnkTarget		: "Target",
+DlgLnkTargetFrame	: "<frame>",
+DlgLnkTargetPopup	: "<popup window>",
+DlgLnkTargetBlank	: "New Window (_blank)",
+DlgLnkTargetParent	: "Parent Window (_parent)",
+DlgLnkTargetSelf	: "Same Window (_self)",
+DlgLnkTargetTop		: "Topmost Window (_top)",
+DlgLnkTargetFrameName	: "Target Frame Name",
+DlgLnkPopWinName	: "Popup Window Name",
+DlgLnkPopWinFeat	: "Popup Window Features",
+DlgLnkPopResize		: "Resizable",
+DlgLnkPopLocation	: "Location Bar",
+DlgLnkPopMenu		: "Menu Bar",
+DlgLnkPopScroll		: "Scroll Bars",
+DlgLnkPopStatus		: "Status Bar",
+DlgLnkPopToolbar	: "Toolbar",
+DlgLnkPopFullScrn	: "Full Screen (IE)",
+DlgLnkPopDependent	: "Dependent (Netscape)",
+DlgLnkPopWidth		: "Width",
+DlgLnkPopHeight		: "Height",
+DlgLnkPopLeft		: "Left Position",
+DlgLnkPopTop		: "Top Position",
+
+DlnLnkMsgNoUrl		: "Please type the link URL",
+DlnLnkMsgNoEMail	: "Please type the e-mail address",
+DlnLnkMsgNoAnchor	: "Please select an anchor",
+DlnLnkMsgInvPopName	: "The popup name must begin with an alphabetic character and must not contain spaces",
+
+// Color Dialog
+DlgColorTitle		: "Select Colour",
+DlgColorBtnClear	: "Clear",
+DlgColorHighlight	: "Highlight",
+DlgColorSelected	: "Selected",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Insert a Smiley",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Select Special Character",
+
+// Table Dialog
+DlgTableTitle		: "Table Properties",
+DlgTableRows		: "Rows",
+DlgTableColumns		: "Columns",
+DlgTableBorder		: "Border size",
+DlgTableAlign		: "Alignment",
+DlgTableAlignNotSet	: "<Not set>",
+DlgTableAlignLeft	: "Left",
+DlgTableAlignCenter	: "Centre",
+DlgTableAlignRight	: "Right",
+DlgTableWidth		: "Width",
+DlgTableWidthPx		: "pixels",
+DlgTableWidthPc		: "percent",
+DlgTableHeight		: "Height",
+DlgTableCellSpace	: "Cell spacing",
+DlgTableCellPad		: "Cell padding",
+DlgTableCaption		: "Caption",
+DlgTableSummary		: "Summary",
+
+// Table Cell Dialog
+DlgCellTitle		: "Cell Properties",
+DlgCellWidth		: "Width",
+DlgCellWidthPx		: "pixels",
+DlgCellWidthPc		: "percent",
+DlgCellHeight		: "Height",
+DlgCellWordWrap		: "Word Wrap",
+DlgCellWordWrapNotSet	: "<Not set>",
+DlgCellWordWrapYes	: "Yes",
+DlgCellWordWrapNo	: "No",
+DlgCellHorAlign		: "Horizontal Alignment",
+DlgCellHorAlignNotSet	: "<Not set>",
+DlgCellHorAlignLeft	: "Left",
+DlgCellHorAlignCenter	: "Centre",
+DlgCellHorAlignRight: "Right",
+DlgCellVerAlign		: "Vertical Alignment",
+DlgCellVerAlignNotSet	: "<Not set>",
+DlgCellVerAlignTop	: "Top",
+DlgCellVerAlignMiddle	: "Middle",
+DlgCellVerAlignBottom	: "Bottom",
+DlgCellVerAlignBaseline	: "Baseline",
+DlgCellRowSpan		: "Rows Span",
+DlgCellCollSpan		: "Columns Span",
+DlgCellBackColor	: "Background Colour",
+DlgCellBorderColor	: "Border Colour",
+DlgCellBtnSelect	: "Select...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Find and Replace",
+
+// Find Dialog
+DlgFindTitle		: "Find",
+DlgFindFindBtn		: "Find",
+DlgFindNotFoundMsg	: "The specified text was not found.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Replace",
+DlgReplaceFindLbl		: "Find what:",
+DlgReplaceReplaceLbl	: "Replace with:",
+DlgReplaceCaseChk		: "Match case",
+DlgReplaceReplaceBtn	: "Replace",
+DlgReplaceReplAllBtn	: "Replace All",
+DlgReplaceWordChk		: "Match whole word",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl+X).",
+PasteErrorCopy	: "Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl+C).",
+
+PasteAsText		: "Paste as Plain Text",
+PasteFromWord	: "Paste from Word",
+
+DlgPasteMsg2	: "Please paste inside the following box using the keyboard (<STRONG>Ctrl+V</STRONG>) and hit <STRONG>OK</STRONG>.",
+DlgPasteSec		: "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.",
+DlgPasteIgnoreFont		: "Ignore Font Face definitions",
+DlgPasteRemoveStyles	: "Remove Styles definitions",
+DlgPasteCleanBox		: "Clean Up Box",
+
+// Color Picker
+ColorAutomatic	: "Automatic",
+ColorMoreColors	: "More Colours...",
+
+// Document Properties
+DocProps		: "Document Properties",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Anchor Properties",
+DlgAnchorName		: "Anchor Name",
+DlgAnchorErrorName	: "Please type the anchor name",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Not in dictionary",
+DlgSpellChangeTo		: "Change to",
+DlgSpellBtnIgnore		: "Ignore",
+DlgSpellBtnIgnoreAll	: "Ignore All",
+DlgSpellBtnReplace		: "Replace",
+DlgSpellBtnReplaceAll	: "Replace All",
+DlgSpellBtnUndo			: "Undo",
+DlgSpellNoSuggestions	: "- No suggestions -",
+DlgSpellProgress		: "Spell check in progress...",
+DlgSpellNoMispell		: "Spell check complete: No misspellings found",
+DlgSpellNoChanges		: "Spell check complete: No words changed",
+DlgSpellOneChange		: "Spell check complete: One word changed",
+DlgSpellManyChanges		: "Spell check complete: %1 words changed",
+
+IeSpellDownload			: "Spell checker not installed. Do you want to download it now?",
+
+// Button Dialog
+DlgButtonText		: "Text (Value)",
+DlgButtonType		: "Type",
+DlgButtonTypeBtn	: "Button",
+DlgButtonTypeSbm	: "Submit",
+DlgButtonTypeRst	: "Reset",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Name",
+DlgCheckboxValue	: "Value",
+DlgCheckboxSelected	: "Selected",
+
+// Form Dialog
+DlgFormName		: "Name",
+DlgFormAction	: "Action",
+DlgFormMethod	: "Method",
+
+// Select Field Dialog
+DlgSelectName		: "Name",
+DlgSelectValue		: "Value",
+DlgSelectSize		: "Size",
+DlgSelectLines		: "lines",
+DlgSelectChkMulti	: "Allow multiple selections",
+DlgSelectOpAvail	: "Available Options",
+DlgSelectOpText		: "Text",
+DlgSelectOpValue	: "Value",
+DlgSelectBtnAdd		: "Add",
+DlgSelectBtnModify	: "Modify",
+DlgSelectBtnUp		: "Up",
+DlgSelectBtnDown	: "Down",
+DlgSelectBtnSetValue : "Set as selected value",
+DlgSelectBtnDelete	: "Delete",
+
+// Textarea Dialog
+DlgTextareaName	: "Name",
+DlgTextareaCols	: "Columns",
+DlgTextareaRows	: "Rows",
+
+// Text Field Dialog
+DlgTextName			: "Name",
+DlgTextValue		: "Value",
+DlgTextCharWidth	: "Character Width",
+DlgTextMaxChars		: "Maximum Characters",
+DlgTextType			: "Type",
+DlgTextTypeText		: "Text",
+DlgTextTypePass		: "Password",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Name",
+DlgHiddenValue	: "Value",
+
+// Bulleted List Dialog
+BulletedListProp	: "Bulleted List Properties",
+NumberedListProp	: "Numbered List Properties",
+DlgLstStart			: "Start",
+DlgLstType			: "Type",
+DlgLstTypeCircle	: "Circle",
+DlgLstTypeDisc		: "Disc",
+DlgLstTypeSquare	: "Square",
+DlgLstTypeNumbers	: "Numbers (1, 2, 3)",
+DlgLstTypeLCase		: "Lowercase Letters (a, b, c)",
+DlgLstTypeUCase		: "Uppercase Letters (A, B, C)",
+DlgLstTypeSRoman	: "Small Roman Numerals (i, ii, iii)",
+DlgLstTypeLRoman	: "Large Roman Numerals (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "General",
+DlgDocBackTab		: "Background",
+DlgDocColorsTab		: "Colours and Margins",
+DlgDocMetaTab		: "Meta Data",
+
+DlgDocPageTitle		: "Page Title",
+DlgDocLangDir		: "Language Direction",
+DlgDocLangDirLTR	: "Left to Right (LTR)",
+DlgDocLangDirRTL	: "Right to Left (RTL)",
+DlgDocLangCode		: "Language Code",
+DlgDocCharSet		: "Character Set Encoding",
+DlgDocCharSetCE		: "Central European",
+DlgDocCharSetCT		: "Chinese Traditional (Big5)",
+DlgDocCharSetCR		: "Cyrillic",
+DlgDocCharSetGR		: "Greek",
+DlgDocCharSetJP		: "Japanese",
+DlgDocCharSetKR		: "Korean",
+DlgDocCharSetTR		: "Turkish",
+DlgDocCharSetUN		: "Unicode (UTF-8)",
+DlgDocCharSetWE		: "Western European",
+DlgDocCharSetOther	: "Other Character Set Encoding",
+
+DlgDocDocType		: "Document Type Heading",
+DlgDocDocTypeOther	: "Other Document Type Heading",
+DlgDocIncXHTML		: "Include XHTML Declarations",
+DlgDocBgColor		: "Background Colour",
+DlgDocBgImage		: "Background Image URL",
+DlgDocBgNoScroll	: "Nonscrolling Background",
+DlgDocCText			: "Text",
+DlgDocCLink			: "Link",
+DlgDocCVisited		: "Visited Link",
+DlgDocCActive		: "Active Link",
+DlgDocMargins		: "Page Margins",
+DlgDocMaTop			: "Top",
+DlgDocMaLeft		: "Left",
+DlgDocMaRight		: "Right",
+DlgDocMaBottom		: "Bottom",
+DlgDocMeIndex		: "Document Indexing Keywords (comma separated)",
+DlgDocMeDescr		: "Document Description",
+DlgDocMeAuthor		: "Author",
+DlgDocMeCopy		: "Copyright",
+DlgDocPreview		: "Preview",
+
+// Templates Dialog
+Templates			: "Templates",
+DlgTemplatesTitle	: "Content Templates",
+DlgTemplatesSelMsg	: "Please select the template to open in the editor<br>(the actual contents will be lost):",
+DlgTemplatesLoading	: "Loading templates list. Please wait...",
+DlgTemplatesNoTpl	: "(No templates defined)",
+DlgTemplatesReplace	: "Replace actual contents",
+
+// About Dialog
+DlgAboutAboutTab	: "About",
+DlgAboutBrowserInfoTab	: "Browser Info",
+DlgAboutLicenseTab	: "License",
+DlgAboutVersion		: "version",
+DlgAboutInfo		: "For further information go to"
+};
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/en.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/en.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/en.js	(revision 1280)
@@ -0,0 +1,516 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * English language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Collapse Toolbar",
+ToolbarExpand		: "Expand Toolbar",
+
+// Toolbar Items and Context Menu
+Save				: "Save",
+NewPage				: "New Page",
+Preview				: "Preview",
+Cut					: "Cut",
+Copy				: "Copy",
+Paste				: "Paste",
+PasteText			: "Paste as plain text",
+PasteWord			: "Paste from Word",
+Print				: "Print",
+SelectAll			: "Select All",
+RemoveFormat		: "Remove Format",
+InsertLinkLbl		: "Link",
+InsertLink			: "Insert/Edit Link",
+RemoveLink			: "Remove Link",
+Anchor				: "Insert/Edit Anchor",
+AnchorDelete		: "Remove Anchor",
+InsertImageLbl		: "Image",
+InsertImage			: "Insert/Edit Image",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Insert/Edit Flash",
+InsertTableLbl		: "Table",
+InsertTable			: "Insert/Edit Table",
+InsertLineLbl		: "Line",
+InsertLine			: "Insert Horizontal Line",
+InsertSpecialCharLbl: "Special Character",
+InsertSpecialChar	: "Insert Special Character",
+InsertSmileyLbl		: "Smiley",
+InsertSmiley		: "Insert Smiley",
+About				: "About FCKeditor",
+Bold				: "Bold",
+Italic				: "Italic",
+Underline			: "Underline",
+StrikeThrough		: "Strike Through",
+Subscript			: "Subscript",
+Superscript			: "Superscript",
+LeftJustify			: "Left Justify",
+CenterJustify		: "Center Justify",
+RightJustify		: "Right Justify",
+BlockJustify		: "Block Justify",
+DecreaseIndent		: "Decrease Indent",
+IncreaseIndent		: "Increase Indent",
+Blockquote			: "Blockquote",
+Undo				: "Undo",
+Redo				: "Redo",
+NumberedListLbl		: "Numbered List",
+NumberedList		: "Insert/Remove Numbered List",
+BulletedListLbl		: "Bulleted List",
+BulletedList		: "Insert/Remove Bulleted List",
+ShowTableBorders	: "Show Table Borders",
+ShowDetails			: "Show Details",
+Style				: "Style",
+FontFormat			: "Format",
+Font				: "Font",
+FontSize			: "Size",
+TextColor			: "Text Color",
+BGColor				: "Background Color",
+Source				: "Source",
+Find				: "Find",
+Replace				: "Replace",
+SpellCheck			: "Check Spelling",
+UniversalKeyboard	: "Universal Keyboard",
+PageBreakLbl		: "Page Break",
+PageBreak			: "Insert Page Break",
+
+Form			: "Form",
+Checkbox		: "Checkbox",
+RadioButton		: "Radio Button",
+TextField		: "Text Field",
+Textarea		: "Textarea",
+HiddenField		: "Hidden Field",
+Button			: "Button",
+SelectionField	: "Selection Field",
+ImageButton		: "Image Button",
+
+FitWindow		: "Maximize the editor size",
+ShowBlocks		: "Show Blocks",
+
+// Context Menu
+EditLink			: "Edit Link",
+CellCM				: "Cell",
+RowCM				: "Row",
+ColumnCM			: "Column",
+InsertRowAfter		: "Insert Row After",
+InsertRowBefore		: "Insert Row Before",
+DeleteRows			: "Delete Rows",
+InsertColumnAfter	: "Insert Column After",
+InsertColumnBefore	: "Insert Column Before",
+DeleteColumns		: "Delete Columns",
+InsertCellAfter		: "Insert Cell After",
+InsertCellBefore	: "Insert Cell Before",
+DeleteCells			: "Delete Cells",
+MergeCells			: "Merge Cells",
+MergeRight			: "Merge Right",
+MergeDown			: "Merge Down",
+HorizontalSplitCell	: "Split Cell Horizontally",
+VerticalSplitCell	: "Split Cell Vertically",
+TableDelete			: "Delete Table",
+CellProperties		: "Cell Properties",
+TableProperties		: "Table Properties",
+ImageProperties		: "Image Properties",
+FlashProperties		: "Flash Properties",
+
+AnchorProp			: "Anchor Properties",
+ButtonProp			: "Button Properties",
+CheckboxProp		: "Checkbox Properties",
+HiddenFieldProp		: "Hidden Field Properties",
+RadioButtonProp		: "Radio Button Properties",
+ImageButtonProp		: "Image Button Properties",
+TextFieldProp		: "Text Field Properties",
+SelectionFieldProp	: "Selection Field Properties",
+TextareaProp		: "Textarea Properties",
+FormProp			: "Form Properties",
+
+FontFormats			: "Normal;Formatted;Address;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6;Normal (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "Processing XHTML. Please wait...",
+Done				: "Done",
+PasteWordConfirm	: "The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?",
+NotCompatiblePaste	: "This command is available for Internet Explorer version 5.5 or more. Do you want to paste without cleaning?",
+UnknownToolbarItem	: "Unknown toolbar item \"%1\"",
+UnknownCommand		: "Unknown command name \"%1\"",
+NotImplemented		: "Command not implemented",
+UnknownToolbarSet	: "Toolbar set \"%1\" doesn't exist",
+NoActiveX			: "Your browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.",
+BrowseServerBlocked : "The resources browser could not be opened. Make sure that all popup blockers are disabled.",
+DialogBlocked		: "It was not possible to open the dialog window. Make sure all popup blockers are disabled.",
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Cancel",
+DlgBtnClose			: "Close",
+DlgBtnBrowseServer	: "Browse Server",
+DlgAdvancedTag		: "Advanced",
+DlgOpOther			: "<Other>",
+DlgInfoTab			: "Info",
+DlgAlertUrl			: "Please insert the URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<not set>",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Language Direction",
+DlgGenLangDirLtr	: "Left to Right (LTR)",
+DlgGenLangDirRtl	: "Right to Left (RTL)",
+DlgGenLangCode		: "Language Code",
+DlgGenAccessKey		: "Access Key",
+DlgGenName			: "Name",
+DlgGenTabIndex		: "Tab Index",
+DlgGenLongDescr		: "Long Description URL",
+DlgGenClass			: "Stylesheet Classes",
+DlgGenTitle			: "Advisory Title",
+DlgGenContType		: "Advisory Content Type",
+DlgGenLinkCharset	: "Linked Resource Charset",
+DlgGenStyle			: "Style",
+
+// Image Dialog
+DlgImgTitle			: "Image Properties",
+DlgImgInfoTab		: "Image Info",
+DlgImgBtnUpload		: "Send it to the Server",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Upload",
+DlgImgAlt			: "Alternative Text",
+DlgImgWidth			: "Width",
+DlgImgHeight		: "Height",
+DlgImgLockRatio		: "Lock Ratio",
+DlgBtnResetSize		: "Reset Size",
+DlgImgBorder		: "Border",
+DlgImgHSpace		: "HSpace",
+DlgImgVSpace		: "VSpace",
+DlgImgAlign			: "Align",
+DlgImgAlignLeft		: "Left",
+DlgImgAlignAbsBottom: "Abs Bottom",
+DlgImgAlignAbsMiddle: "Abs Middle",
+DlgImgAlignBaseline	: "Baseline",
+DlgImgAlignBottom	: "Bottom",
+DlgImgAlignMiddle	: "Middle",
+DlgImgAlignRight	: "Right",
+DlgImgAlignTextTop	: "Text Top",
+DlgImgAlignTop		: "Top",
+DlgImgPreview		: "Preview",
+DlgImgAlertUrl		: "Please type the image URL",
+DlgImgLinkTab		: "Link",
+
+// Flash Dialog
+DlgFlashTitle		: "Flash Properties",
+DlgFlashChkPlay		: "Auto Play",
+DlgFlashChkLoop		: "Loop",
+DlgFlashChkMenu		: "Enable Flash Menu",
+DlgFlashScale		: "Scale",
+DlgFlashScaleAll	: "Show all",
+DlgFlashScaleNoBorder	: "No Border",
+DlgFlashScaleFit	: "Exact Fit",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Link",
+DlgLnkInfoTab		: "Link Info",
+DlgLnkTargetTab		: "Target",
+
+DlgLnkType			: "Link Type",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Link to anchor in the text",
+DlgLnkTypeEMail		: "E-Mail",
+DlgLnkProto			: "Protocol",
+DlgLnkProtoOther	: "<other>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Select an Anchor",
+DlgLnkAnchorByName	: "By Anchor Name",
+DlgLnkAnchorById	: "By Element Id",
+DlgLnkNoAnchors		: "(No anchors available in the document)",
+DlgLnkEMail			: "E-Mail Address",
+DlgLnkEMailSubject	: "Message Subject",
+DlgLnkEMailBody		: "Message Body",
+DlgLnkUpload		: "Upload",
+DlgLnkBtnUpload		: "Send it to the Server",
+
+DlgLnkTarget		: "Target",
+DlgLnkTargetFrame	: "<frame>",
+DlgLnkTargetPopup	: "<popup window>",
+DlgLnkTargetBlank	: "New Window (_blank)",
+DlgLnkTargetParent	: "Parent Window (_parent)",
+DlgLnkTargetSelf	: "Same Window (_self)",
+DlgLnkTargetTop		: "Topmost Window (_top)",
+DlgLnkTargetFrameName	: "Target Frame Name",
+DlgLnkPopWinName	: "Popup Window Name",
+DlgLnkPopWinFeat	: "Popup Window Features",
+DlgLnkPopResize		: "Resizable",
+DlgLnkPopLocation	: "Location Bar",
+DlgLnkPopMenu		: "Menu Bar",
+DlgLnkPopScroll		: "Scroll Bars",
+DlgLnkPopStatus		: "Status Bar",
+DlgLnkPopToolbar	: "Toolbar",
+DlgLnkPopFullScrn	: "Full Screen (IE)",
+DlgLnkPopDependent	: "Dependent (Netscape)",
+DlgLnkPopWidth		: "Width",
+DlgLnkPopHeight		: "Height",
+DlgLnkPopLeft		: "Left Position",
+DlgLnkPopTop		: "Top Position",
+
+DlnLnkMsgNoUrl		: "Please type the link URL",
+DlnLnkMsgNoEMail	: "Please type the e-mail address",
+DlnLnkMsgNoAnchor	: "Please select an anchor",
+DlnLnkMsgInvPopName	: "The popup name must begin with an alphabetic character and must not contain spaces",
+
+// Color Dialog
+DlgColorTitle		: "Select Color",
+DlgColorBtnClear	: "Clear",
+DlgColorHighlight	: "Highlight",
+DlgColorSelected	: "Selected",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Insert a Smiley",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Select Special Character",
+
+// Table Dialog
+DlgTableTitle		: "Table Properties",
+DlgTableRows		: "Rows",
+DlgTableColumns		: "Columns",
+DlgTableBorder		: "Border size",
+DlgTableAlign		: "Alignment",
+DlgTableAlignNotSet	: "<Not set>",
+DlgTableAlignLeft	: "Left",
+DlgTableAlignCenter	: "Center",
+DlgTableAlignRight	: "Right",
+DlgTableWidth		: "Width",
+DlgTableWidthPx		: "pixels",
+DlgTableWidthPc		: "percent",
+DlgTableHeight		: "Height",
+DlgTableCellSpace	: "Cell spacing",
+DlgTableCellPad		: "Cell padding",
+DlgTableCaption		: "Caption",
+DlgTableSummary		: "Summary",
+
+// Table Cell Dialog
+DlgCellTitle		: "Cell Properties",
+DlgCellWidth		: "Width",
+DlgCellWidthPx		: "pixels",
+DlgCellWidthPc		: "percent",
+DlgCellHeight		: "Height",
+DlgCellWordWrap		: "Word Wrap",
+DlgCellWordWrapNotSet	: "<Not set>",
+DlgCellWordWrapYes	: "Yes",
+DlgCellWordWrapNo	: "No",
+DlgCellHorAlign		: "Horizontal Alignment",
+DlgCellHorAlignNotSet	: "<Not set>",
+DlgCellHorAlignLeft	: "Left",
+DlgCellHorAlignCenter	: "Center",
+DlgCellHorAlignRight: "Right",
+DlgCellVerAlign		: "Vertical Alignment",
+DlgCellVerAlignNotSet	: "<Not set>",
+DlgCellVerAlignTop	: "Top",
+DlgCellVerAlignMiddle	: "Middle",
+DlgCellVerAlignBottom	: "Bottom",
+DlgCellVerAlignBaseline	: "Baseline",
+DlgCellRowSpan		: "Rows Span",
+DlgCellCollSpan		: "Columns Span",
+DlgCellBackColor	: "Background Color",
+DlgCellBorderColor	: "Border Color",
+DlgCellBtnSelect	: "Select...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Find and Replace",
+
+// Find Dialog
+DlgFindTitle		: "Find",
+DlgFindFindBtn		: "Find",
+DlgFindNotFoundMsg	: "The specified text was not found.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Replace",
+DlgReplaceFindLbl		: "Find what:",
+DlgReplaceReplaceLbl	: "Replace with:",
+DlgReplaceCaseChk		: "Match case",
+DlgReplaceReplaceBtn	: "Replace",
+DlgReplaceReplAllBtn	: "Replace All",
+DlgReplaceWordChk		: "Match whole word",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl+X).",
+PasteErrorCopy	: "Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl+C).",
+
+PasteAsText		: "Paste as Plain Text",
+PasteFromWord	: "Paste from Word",
+
+DlgPasteMsg2	: "Please paste inside the following box using the keyboard (<strong>Ctrl+V</strong>) and hit <strong>OK</strong>.",
+DlgPasteSec		: "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.",
+DlgPasteIgnoreFont		: "Ignore Font Face definitions",
+DlgPasteRemoveStyles	: "Remove Styles definitions",
+DlgPasteCleanBox		: "Clean Up Box",
+
+// Color Picker
+ColorAutomatic	: "Automatic",
+ColorMoreColors	: "More Colors...",
+
+// Document Properties
+DocProps		: "Document Properties",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Anchor Properties",
+DlgAnchorName		: "Anchor Name",
+DlgAnchorErrorName	: "Please type the anchor name",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Not in dictionary",
+DlgSpellChangeTo		: "Change to",
+DlgSpellBtnIgnore		: "Ignore",
+DlgSpellBtnIgnoreAll	: "Ignore All",
+DlgSpellBtnReplace		: "Replace",
+DlgSpellBtnReplaceAll	: "Replace All",
+DlgSpellBtnUndo			: "Undo",
+DlgSpellNoSuggestions	: "- No suggestions -",
+DlgSpellProgress		: "Spell check in progress...",
+DlgSpellNoMispell		: "Spell check complete: No misspellings found",
+DlgSpellNoChanges		: "Spell check complete: No words changed",
+DlgSpellOneChange		: "Spell check complete: One word changed",
+DlgSpellManyChanges		: "Spell check complete: %1 words changed",
+
+IeSpellDownload			: "Spell checker not installed. Do you want to download it now?",
+
+// Button Dialog
+DlgButtonText		: "Text (Value)",
+DlgButtonType		: "Type",
+DlgButtonTypeBtn	: "Button",
+DlgButtonTypeSbm	: "Submit",
+DlgButtonTypeRst	: "Reset",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Name",
+DlgCheckboxValue	: "Value",
+DlgCheckboxSelected	: "Selected",
+
+// Form Dialog
+DlgFormName		: "Name",
+DlgFormAction	: "Action",
+DlgFormMethod	: "Method",
+
+// Select Field Dialog
+DlgSelectName		: "Name",
+DlgSelectValue		: "Value",
+DlgSelectSize		: "Size",
+DlgSelectLines		: "lines",
+DlgSelectChkMulti	: "Allow multiple selections",
+DlgSelectOpAvail	: "Available Options",
+DlgSelectOpText		: "Text",
+DlgSelectOpValue	: "Value",
+DlgSelectBtnAdd		: "Add",
+DlgSelectBtnModify	: "Modify",
+DlgSelectBtnUp		: "Up",
+DlgSelectBtnDown	: "Down",
+DlgSelectBtnSetValue : "Set as selected value",
+DlgSelectBtnDelete	: "Delete",
+
+// Textarea Dialog
+DlgTextareaName	: "Name",
+DlgTextareaCols	: "Columns",
+DlgTextareaRows	: "Rows",
+
+// Text Field Dialog
+DlgTextName			: "Name",
+DlgTextValue		: "Value",
+DlgTextCharWidth	: "Character Width",
+DlgTextMaxChars		: "Maximum Characters",
+DlgTextType			: "Type",
+DlgTextTypeText		: "Text",
+DlgTextTypePass		: "Password",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Name",
+DlgHiddenValue	: "Value",
+
+// Bulleted List Dialog
+BulletedListProp	: "Bulleted List Properties",
+NumberedListProp	: "Numbered List Properties",
+DlgLstStart			: "Start",
+DlgLstType			: "Type",
+DlgLstTypeCircle	: "Circle",
+DlgLstTypeDisc		: "Disc",
+DlgLstTypeSquare	: "Square",
+DlgLstTypeNumbers	: "Numbers (1, 2, 3)",
+DlgLstTypeLCase		: "Lowercase Letters (a, b, c)",
+DlgLstTypeUCase		: "Uppercase Letters (A, B, C)",
+DlgLstTypeSRoman	: "Small Roman Numerals (i, ii, iii)",
+DlgLstTypeLRoman	: "Large Roman Numerals (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "General",
+DlgDocBackTab		: "Background",
+DlgDocColorsTab		: "Colors and Margins",
+DlgDocMetaTab		: "Meta Data",
+
+DlgDocPageTitle		: "Page Title",
+DlgDocLangDir		: "Language Direction",
+DlgDocLangDirLTR	: "Left to Right (LTR)",
+DlgDocLangDirRTL	: "Right to Left (RTL)",
+DlgDocLangCode		: "Language Code",
+DlgDocCharSet		: "Character Set Encoding",
+DlgDocCharSetCE		: "Central European",
+DlgDocCharSetCT		: "Chinese Traditional (Big5)",
+DlgDocCharSetCR		: "Cyrillic",
+DlgDocCharSetGR		: "Greek",
+DlgDocCharSetJP		: "Japanese",
+DlgDocCharSetKR		: "Korean",
+DlgDocCharSetTR		: "Turkish",
+DlgDocCharSetUN		: "Unicode (UTF-8)",
+DlgDocCharSetWE		: "Western European",
+DlgDocCharSetOther	: "Other Character Set Encoding",
+
+DlgDocDocType		: "Document Type Heading",
+DlgDocDocTypeOther	: "Other Document Type Heading",
+DlgDocIncXHTML		: "Include XHTML Declarations",
+DlgDocBgColor		: "Background Color",
+DlgDocBgImage		: "Background Image URL",
+DlgDocBgNoScroll	: "Nonscrolling Background",
+DlgDocCText			: "Text",
+DlgDocCLink			: "Link",
+DlgDocCVisited		: "Visited Link",
+DlgDocCActive		: "Active Link",
+DlgDocMargins		: "Page Margins",
+DlgDocMaTop			: "Top",
+DlgDocMaLeft		: "Left",
+DlgDocMaRight		: "Right",
+DlgDocMaBottom		: "Bottom",
+DlgDocMeIndex		: "Document Indexing Keywords (comma separated)",
+DlgDocMeDescr		: "Document Description",
+DlgDocMeAuthor		: "Author",
+DlgDocMeCopy		: "Copyright",
+DlgDocPreview		: "Preview",
+
+// Templates Dialog
+Templates			: "Templates",
+DlgTemplatesTitle	: "Content Templates",
+DlgTemplatesSelMsg	: "Please select the template to open in the editor<br />(the actual contents will be lost):",
+DlgTemplatesLoading	: "Loading templates list. Please wait...",
+DlgTemplatesNoTpl	: "(No templates defined)",
+DlgTemplatesReplace	: "Replace actual contents",
+
+// About Dialog
+DlgAboutAboutTab	: "About",
+DlgAboutBrowserInfoTab	: "Browser Info",
+DlgAboutLicenseTab	: "License",
+DlgAboutVersion		: "version",
+DlgAboutInfo		: "For further information go to"
+};
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/eo.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/eo.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/eo.js	(revision 1280)
@@ -0,0 +1,516 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Esperanto language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Kaŝi Ilobreton",
+ToolbarExpand		: "Vidigi Ilojn",
+
+// Toolbar Items and Context Menu
+Save				: "Sekurigi",
+NewPage				: "Nova Paĝo",
+Preview				: "Vidigi Aspekton",
+Cut					: "Eltondi",
+Copy				: "Kopii",
+Paste				: "Interglui",
+PasteText			: "Interglui kiel Tekston",
+PasteWord			: "Interglui el Word",
+Print				: "Presi",
+SelectAll			: "Elekti ĉion",
+RemoveFormat		: "Forigi Formaton",
+InsertLinkLbl		: "Ligilo",
+InsertLink			: "Enmeti/Ŝanĝi Ligilon",
+RemoveLink			: "Forigi Ligilon",
+Anchor				: "Enmeti/Ŝanĝi Ankron",
+AnchorDelete		: "Remove Anchor",	//MISSING
+InsertImageLbl		: "Bildo",
+InsertImage			: "Enmeti/Ŝanĝi Bildon",
+InsertFlashLbl		: "Flash",	//MISSING
+InsertFlash			: "Insert/Edit Flash",	//MISSING
+InsertTableLbl		: "Tabelo",
+InsertTable			: "Enmeti/Ŝanĝi Tabelon",
+InsertLineLbl		: "Horizonta Linio",
+InsertLine			: "Enmeti Horizonta Linio",
+InsertSpecialCharLbl: "Speciala Signo",
+InsertSpecialChar	: "Enmeti Specialan Signon",
+InsertSmileyLbl		: "Mienvinjeto",
+InsertSmiley		: "Enmeti Mienvinjeton",
+About				: "Pri FCKeditor",
+Bold				: "Grasa",
+Italic				: "Kursiva",
+Underline			: "Substreko",
+StrikeThrough		: "Trastreko",
+Subscript			: "Subskribo",
+Superscript			: "Superskribo",
+LeftJustify			: "Maldekstrigi",
+CenterJustify		: "Centrigi",
+RightJustify		: "Dekstrigi",
+BlockJustify		: "Ĝisrandigi Ambaŭflanke",
+DecreaseIndent		: "Malpligrandigi Krommarĝenon",
+IncreaseIndent		: "Pligrandigi Krommarĝenon",
+Blockquote			: "Blockquote",	//MISSING
+Undo				: "Malfari",
+Redo				: "Refari",
+NumberedListLbl		: "Numera Listo",
+NumberedList		: "Enmeti/Forigi Numeran Liston",
+BulletedListLbl		: "Bula Listo",
+BulletedList		: "Enmeti/Forigi Bulan Liston",
+ShowTableBorders	: "Vidigi Borderojn de Tabelo",
+ShowDetails			: "Vidigi Detalojn",
+Style				: "Stilo",
+FontFormat			: "Formato",
+Font				: "Tiparo",
+FontSize			: "Grando",
+TextColor			: "Teksta Koloro",
+BGColor				: "Fona Koloro",
+Source				: "Fonto",
+Find				: "Serĉi",
+Replace				: "Anstataŭigi",
+SpellCheck			: "Literumada Kontrolilo",
+UniversalKeyboard	: "Universala Klavaro",
+PageBreakLbl		: "Page Break",	//MISSING
+PageBreak			: "Insert Page Break",	//MISSING
+
+Form			: "Formularo",
+Checkbox		: "Markobutono",
+RadioButton		: "Radiobutono",
+TextField		: "Teksta kampo",
+Textarea		: "Teksta Areo",
+HiddenField		: "Kaŝita Kampo",
+Button			: "Butono",
+SelectionField	: "Elekta Kampo",
+ImageButton		: "Bildbutono",
+
+FitWindow		: "Maximize the editor size",	//MISSING
+ShowBlocks		: "Show Blocks",	//MISSING
+
+// Context Menu
+EditLink			: "Modifier Ligilon",
+CellCM				: "Cell",	//MISSING
+RowCM				: "Row",	//MISSING
+ColumnCM			: "Column",	//MISSING
+InsertRowAfter		: "Insert Row After",	//MISSING
+InsertRowBefore		: "Insert Row Before",	//MISSING
+DeleteRows			: "Forigi Liniojn",
+InsertColumnAfter	: "Insert Column After",	//MISSING
+InsertColumnBefore	: "Insert Column Before",	//MISSING
+DeleteColumns		: "Forigi Kolumnojn",
+InsertCellAfter		: "Insert Cell After",	//MISSING
+InsertCellBefore	: "Insert Cell Before",	//MISSING
+DeleteCells			: "Forigi Ĉelojn",
+MergeCells			: "Kunfandi Ĉelojn",
+MergeRight			: "Merge Right",	//MISSING
+MergeDown			: "Merge Down",	//MISSING
+HorizontalSplitCell	: "Split Cell Horizontally",	//MISSING
+VerticalSplitCell	: "Split Cell Vertically",	//MISSING
+TableDelete			: "Delete Table",	//MISSING
+CellProperties		: "Atributoj de Ĉelo",
+TableProperties		: "Atributoj de Tabelo",
+ImageProperties		: "Atributoj de Bildo",
+FlashProperties		: "Flash Properties",	//MISSING
+
+AnchorProp			: "Ankraj Atributoj",
+ButtonProp			: "Butonaj Atributoj",
+CheckboxProp		: "Markobutonaj Atributoj",
+HiddenFieldProp		: "Atributoj de Kaŝita Kampo",
+RadioButtonProp		: "Radiobutonaj Atributoj",
+ImageButtonProp		: "Bildbutonaj Atributoj",
+TextFieldProp		: "Atributoj de Teksta Kampo",
+SelectionFieldProp	: "Atributoj de Elekta Kampo",
+TextareaProp		: "Atributoj de Teksta Areo",
+FormProp			: "Formularaj Atributoj",
+
+FontFormats			: "Normala;Formatita;Adreso;Titolo 1;Titolo 2;Titolo 3;Titolo 4;Titolo 5;Titolo 6;Paragrafo (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "Traktado de XHTML. Bonvolu pacienci...",
+Done				: "Finita",
+PasteWordConfirm	: "La algluota teksto ŝajnas esti Word-devena. Ĉu vi volas purigi ĝin antaŭ ol interglui?",
+NotCompatiblePaste	: "Tiu ĉi komando bezonas almenaŭ Internet Explorer 5.5. Ĉu vi volas daŭrigi sen purigado?",
+UnknownToolbarItem	: "Ilobretero nekonata \"%1\"",
+UnknownCommand		: "Komandonomo nekonata \"%1\"",
+NotImplemented		: "Komando ne ankoraŭ realigita",
+UnknownToolbarSet	: "La ilobreto \"%1\" ne ekzistas",
+NoActiveX			: "Your browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.",	//MISSING
+BrowseServerBlocked : "The resources browser could not be opened. Make sure that all popup blockers are disabled.",	//MISSING
+DialogBlocked		: "It was not possible to open the dialog window. Make sure all popup blockers are disabled.",	//MISSING
+
+// Dialogs
+DlgBtnOK			: "Akcepti",
+DlgBtnCancel		: "Rezigni",
+DlgBtnClose			: "Fermi",
+DlgBtnBrowseServer	: "Foliumi en la Servilo",
+DlgAdvancedTag		: "Speciala",
+DlgOpOther			: "<Alia>",
+DlgInfoTab			: "Info",	//MISSING
+DlgAlertUrl			: "Please insert the URL",	//MISSING
+
+// General Dialogs Labels
+DlgGenNotSet		: "<Defaŭlta>",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Skribdirekto",
+DlgGenLangDirLtr	: "De maldekstro dekstren (LTR)",
+DlgGenLangDirRtl	: "De dekstro maldekstren (RTL)",
+DlgGenLangCode		: "Lingva Kodo",
+DlgGenAccessKey		: "Fulmoklavo",
+DlgGenName			: "Nomo",
+DlgGenTabIndex		: "Taba Ordo",
+DlgGenLongDescr		: "URL de Longa Priskribo",
+DlgGenClass			: "Klasoj de Stilfolioj",
+DlgGenTitle			: "Indika Titolo",
+DlgGenContType		: "Indika Enhavotipo",
+DlgGenLinkCharset	: "Signaro de la Ligita Rimedo",
+DlgGenStyle			: "Stilo",
+
+// Image Dialog
+DlgImgTitle			: "Atributoj de Bildo",
+DlgImgInfoTab		: "Informoj pri Bildo",
+DlgImgBtnUpload		: "Sendu al Servilo",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Alŝuti",
+DlgImgAlt			: "Anstataŭiga Teksto",
+DlgImgWidth			: "Larĝo",
+DlgImgHeight		: "Alto",
+DlgImgLockRatio		: "Konservi Proporcion",
+DlgBtnResetSize		: "Origina Grando",
+DlgImgBorder		: "Bordero",
+DlgImgHSpace		: "HSpaco",
+DlgImgVSpace		: "VSpaco",
+DlgImgAlign			: "Ĝisrandigo",
+DlgImgAlignLeft		: "Maldekstre",
+DlgImgAlignAbsBottom: "Abs Malsupre",
+DlgImgAlignAbsMiddle: "Abs Centre",
+DlgImgAlignBaseline	: "Je Malsupro de Teksto",
+DlgImgAlignBottom	: "Malsupre",
+DlgImgAlignMiddle	: "Centre",
+DlgImgAlignRight	: "Dekstre",
+DlgImgAlignTextTop	: "Je Supro de Teksto",
+DlgImgAlignTop		: "Supre",
+DlgImgPreview		: "Vidigi Aspekton",
+DlgImgAlertUrl		: "Bonvolu tajpi la URL de la bildo",
+DlgImgLinkTab		: "Link",	//MISSING
+
+// Flash Dialog
+DlgFlashTitle		: "Flash Properties",	//MISSING
+DlgFlashChkPlay		: "Auto Play",	//MISSING
+DlgFlashChkLoop		: "Loop",	//MISSING
+DlgFlashChkMenu		: "Enable Flash Menu",	//MISSING
+DlgFlashScale		: "Scale",	//MISSING
+DlgFlashScaleAll	: "Show all",	//MISSING
+DlgFlashScaleNoBorder	: "No Border",	//MISSING
+DlgFlashScaleFit	: "Exact Fit",	//MISSING
+
+// Link Dialog
+DlgLnkWindowTitle	: "Ligilo",
+DlgLnkInfoTab		: "Informoj pri la Ligilo",
+DlgLnkTargetTab		: "Celo",
+
+DlgLnkType			: "Tipo de Ligilo",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Ankri en tiu ĉi paĝo",
+DlgLnkTypeEMail		: "Retpoŝto",
+DlgLnkProto			: "Protokolo",
+DlgLnkProtoOther	: "<alia>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Elekti Ankron",
+DlgLnkAnchorByName	: "Per Ankronomo",
+DlgLnkAnchorById	: "Per Elementidentigilo",
+DlgLnkNoAnchors		: "<Ne disponeblas ankroj en la dokumento>",
+DlgLnkEMail			: "Retadreso",
+DlgLnkEMailSubject	: "Temlinio",
+DlgLnkEMailBody		: "Mesaĝa korpo",
+DlgLnkUpload		: "Alŝuti",
+DlgLnkBtnUpload		: "Sendi al Servilo",
+
+DlgLnkTarget		: "Celo",
+DlgLnkTargetFrame	: "<kadro>",
+DlgLnkTargetPopup	: "<ŝprucfenestro>",
+DlgLnkTargetBlank	: "Nova Fenestro (_blank)",
+DlgLnkTargetParent	: "Gepatra Fenestro (_parent)",
+DlgLnkTargetSelf	: "Sama Fenestro (_self)",
+DlgLnkTargetTop		: "Plej Supra Fenestro (_top)",
+DlgLnkTargetFrameName	: "Nomo de Kadro",
+DlgLnkPopWinName	: "Nomo de Ŝprucfenestro",
+DlgLnkPopWinFeat	: "Atributoj de la Ŝprucfenestro",
+DlgLnkPopResize		: "Grando Ŝanĝebla",
+DlgLnkPopLocation	: "Adresobreto",
+DlgLnkPopMenu		: "Menubreto",
+DlgLnkPopScroll		: "Rulumlisteloj",
+DlgLnkPopStatus		: "Statobreto",
+DlgLnkPopToolbar	: "Ilobreto",
+DlgLnkPopFullScrn	: "Tutekrane (IE)",
+DlgLnkPopDependent	: "Dependa (Netscape)",
+DlgLnkPopWidth		: "Larĝo",
+DlgLnkPopHeight		: "Alto",
+DlgLnkPopLeft		: "Pozicio de Maldekstro",
+DlgLnkPopTop		: "Pozicio de Supro",
+
+DlnLnkMsgNoUrl		: "Bonvolu entajpi la URL-on",
+DlnLnkMsgNoEMail	: "Bonvolu entajpi la retadreson",
+DlnLnkMsgNoAnchor	: "Bonvolu elekti ankron",
+DlnLnkMsgInvPopName	: "The popup name must begin with an alphabetic character and must not contain spaces",	//MISSING
+
+// Color Dialog
+DlgColorTitle		: "Elekti",
+DlgColorBtnClear	: "Forigi",
+DlgColorHighlight	: "Emfazi",
+DlgColorSelected	: "Elektita",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Enmeti Mienvinjeton",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Enmeti Specialan Signon",
+
+// Table Dialog
+DlgTableTitle		: "Atributoj de Tabelo",
+DlgTableRows		: "Linioj",
+DlgTableColumns		: "Kolumnoj",
+DlgTableBorder		: "Bordero",
+DlgTableAlign		: "Ĝisrandigo",
+DlgTableAlignNotSet	: "<Defaŭlte>",
+DlgTableAlignLeft	: "Maldekstre",
+DlgTableAlignCenter	: "Centre",
+DlgTableAlignRight	: "Dekstre",
+DlgTableWidth		: "Larĝo",
+DlgTableWidthPx		: "Bitbilderoj",
+DlgTableWidthPc		: "elcentoj",
+DlgTableHeight		: "Alto",
+DlgTableCellSpace	: "Interspacigo de Ĉeloj",
+DlgTableCellPad		: "Ĉirkaŭenhava Plenigado",
+DlgTableCaption		: "Titolo",
+DlgTableSummary		: "Summary",	//MISSING
+
+// Table Cell Dialog
+DlgCellTitle		: "Atributoj de Celo",
+DlgCellWidth		: "Larĝo",
+DlgCellWidthPx		: "bitbilderoj",
+DlgCellWidthPc		: "elcentoj",
+DlgCellHeight		: "Alto",
+DlgCellWordWrap		: "Linifaldo",
+DlgCellWordWrapNotSet	: "<Defaŭlte>",
+DlgCellWordWrapYes	: "Jes",
+DlgCellWordWrapNo	: "Ne",
+DlgCellHorAlign		: "Horizonta Ĝisrandigo",
+DlgCellHorAlignNotSet	: "<Defaŭlte>",
+DlgCellHorAlignLeft	: "Maldekstre",
+DlgCellHorAlignCenter	: "Centre",
+DlgCellHorAlignRight: "Dekstre",
+DlgCellVerAlign		: "Vertikala Ĝisrandigo",
+DlgCellVerAlignNotSet	: "<Defaŭlte>",
+DlgCellVerAlignTop	: "Supre",
+DlgCellVerAlignMiddle	: "Centre",
+DlgCellVerAlignBottom	: "Malsupre",
+DlgCellVerAlignBaseline	: "Je Malsupro de Teksto",
+DlgCellRowSpan		: "Linioj Kunfanditaj",
+DlgCellCollSpan		: "Kolumnoj Kunfanditaj",
+DlgCellBackColor	: "Fono",
+DlgCellBorderColor	: "Bordero",
+DlgCellBtnSelect	: "Elekti...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Find and Replace",	//MISSING
+
+// Find Dialog
+DlgFindTitle		: "Serĉi",
+DlgFindFindBtn		: "Serĉi",
+DlgFindNotFoundMsg	: "La celteksto ne estas trovita.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Anstataŭigi",
+DlgReplaceFindLbl		: "Serĉi:",
+DlgReplaceReplaceLbl	: "Anstataŭigi per:",
+DlgReplaceCaseChk		: "Kongruigi Usklecon",
+DlgReplaceReplaceBtn	: "Anstataŭigi",
+DlgReplaceReplAllBtn	: "Anstataŭigi Ĉiun",
+DlgReplaceWordChk		: "Tuta Vorto",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "La sekurecagordo de via TTT-legilo ne permesas, ke la redaktilo faras eltondajn operaciojn. Bonvolu uzi la klavaron por tio (ctrl-X).",
+PasteErrorCopy	: "La sekurecagordo de via TTT-legilo ne permesas, ke la redaktilo faras kopiajn operaciojn. Bonvolu uzi la klavaron por tio (ctrl-C).",
+
+PasteAsText		: "Interglui kiel Tekston",
+PasteFromWord	: "Interglui el Word",
+
+DlgPasteMsg2	: "Please paste inside the following box using the keyboard (<strong>Ctrl+V</strong>) and hit <strong>OK</strong>.",	//MISSING
+DlgPasteSec		: "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.",	//MISSING
+DlgPasteIgnoreFont		: "Ignore Font Face definitions",	//MISSING
+DlgPasteRemoveStyles	: "Remove Styles definitions",	//MISSING
+DlgPasteCleanBox		: "Clean Up Box",	//MISSING
+
+// Color Picker
+ColorAutomatic	: "Aŭtomata",
+ColorMoreColors	: "Pli da Koloroj...",
+
+// Document Properties
+DocProps		: "Dokumentaj Atributoj",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Ankraj Atributoj",
+DlgAnchorName		: "Ankra Nomo",
+DlgAnchorErrorName	: "Bv tajpi la ankran nomon",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Ne trovita en la vortaro",
+DlgSpellChangeTo		: "Ŝanĝi al",
+DlgSpellBtnIgnore		: "Malatenti",
+DlgSpellBtnIgnoreAll	: "Malatenti Ĉiun",
+DlgSpellBtnReplace		: "Anstataŭigi",
+DlgSpellBtnReplaceAll	: "Anstataŭigi Ĉiun",
+DlgSpellBtnUndo			: "Malfari",
+DlgSpellNoSuggestions	: "- Neniu propono -",
+DlgSpellProgress		: "Literumkontrolado daŭras...",
+DlgSpellNoMispell		: "Literumkontrolado finita: neniu fuŝo trovita",
+DlgSpellNoChanges		: "Literumkontrolado finita: neniu vorto ŝanĝita",
+DlgSpellOneChange		: "Literumkontrolado finita: unu vorto ŝanĝita",
+DlgSpellManyChanges		: "Literumkontrolado finita: %1 vortoj ŝanĝitaj",
+
+IeSpellDownload			: "Literumada Kontrolilo ne instalita. Ĉu vi volas elŝuti ĝin nun?",
+
+// Button Dialog
+DlgButtonText		: "Teksto (Valoro)",
+DlgButtonType		: "Tipo",
+DlgButtonTypeBtn	: "Button",	//MISSING
+DlgButtonTypeSbm	: "Submit",	//MISSING
+DlgButtonTypeRst	: "Reset",	//MISSING
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Nomo",
+DlgCheckboxValue	: "Valoro",
+DlgCheckboxSelected	: "Elektita",
+
+// Form Dialog
+DlgFormName		: "Nomo",
+DlgFormAction	: "Ago",
+DlgFormMethod	: "Metodo",
+
+// Select Field Dialog
+DlgSelectName		: "Nomo",
+DlgSelectValue		: "Valoro",
+DlgSelectSize		: "Grando",
+DlgSelectLines		: "Linioj",
+DlgSelectChkMulti	: "Permesi Plurajn Elektojn",
+DlgSelectOpAvail	: "Elektoj Disponeblaj",
+DlgSelectOpText		: "Teksto",
+DlgSelectOpValue	: "Valoro",
+DlgSelectBtnAdd		: "Aldoni",
+DlgSelectBtnModify	: "Modifi",
+DlgSelectBtnUp		: "Supren",
+DlgSelectBtnDown	: "Malsupren",
+DlgSelectBtnSetValue : "Agordi kiel Elektitan Valoron",
+DlgSelectBtnDelete	: "Forigi",
+
+// Textarea Dialog
+DlgTextareaName	: "Nomo",
+DlgTextareaCols	: "Kolumnoj",
+DlgTextareaRows	: "Vicoj",
+
+// Text Field Dialog
+DlgTextName			: "Nomo",
+DlgTextValue		: "Valoro",
+DlgTextCharWidth	: "Signolarĝo",
+DlgTextMaxChars		: "Maksimuma Nombro da Signoj",
+DlgTextType			: "Tipo",
+DlgTextTypeText		: "Teksto",
+DlgTextTypePass		: "Pasvorto",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Nomo",
+DlgHiddenValue	: "Valoro",
+
+// Bulleted List Dialog
+BulletedListProp	: "Atributoj de Bula Listo",
+NumberedListProp	: "Atributoj de Numera Listo",
+DlgLstStart			: "Start",	//MISSING
+DlgLstType			: "Tipo",
+DlgLstTypeCircle	: "Cirklo",
+DlgLstTypeDisc		: "Disc",	//MISSING
+DlgLstTypeSquare	: "Kvadrato",
+DlgLstTypeNumbers	: "Ciferoj (1, 2, 3)",
+DlgLstTypeLCase		: "Minusklaj Literoj (a, b, c)",
+DlgLstTypeUCase		: "Majusklaj Literoj (A, B, C)",
+DlgLstTypeSRoman	: "Malgrandaj Romanaj Ciferoj (i, ii, iii)",
+DlgLstTypeLRoman	: "Grandaj Romanaj Ciferoj (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Ĝeneralaĵoj",
+DlgDocBackTab		: "Fono",
+DlgDocColorsTab		: "Koloroj kaj Marĝenoj",
+DlgDocMetaTab		: "Metadatumoj",
+
+DlgDocPageTitle		: "Paĝotitolo",
+DlgDocLangDir		: "Skribdirekto de la Lingvo",
+DlgDocLangDirLTR	: "De maldekstro dekstren (LTR)",
+DlgDocLangDirRTL	: "De dekstro maldekstren (LTR)",
+DlgDocLangCode		: "Lingvokodo",
+DlgDocCharSet		: "Signara Kodo",
+DlgDocCharSetCE		: "Central European",	//MISSING
+DlgDocCharSetCT		: "Chinese Traditional (Big5)",	//MISSING
+DlgDocCharSetCR		: "Cyrillic",	//MISSING
+DlgDocCharSetGR		: "Greek",	//MISSING
+DlgDocCharSetJP		: "Japanese",	//MISSING
+DlgDocCharSetKR		: "Korean",	//MISSING
+DlgDocCharSetTR		: "Turkish",	//MISSING
+DlgDocCharSetUN		: "Unicode (UTF-8)",	//MISSING
+DlgDocCharSetWE		: "Western European",	//MISSING
+DlgDocCharSetOther	: "Alia Signara Kodo",
+
+DlgDocDocType		: "Dokumenta Tipo",
+DlgDocDocTypeOther	: "Alia Dokumenta Tipo",
+DlgDocIncXHTML		: "Inkluzivi XHTML Deklaroj",
+DlgDocBgColor		: "Fona Koloro",
+DlgDocBgImage		: "URL de Fona Bildo",
+DlgDocBgNoScroll	: "Neruluma Fono",
+DlgDocCText			: "Teksto",
+DlgDocCLink			: "Ligilo",
+DlgDocCVisited		: "Vizitita Ligilo",
+DlgDocCActive		: "Aktiva Ligilo",
+DlgDocMargins		: "Paĝaj Marĝenoj",
+DlgDocMaTop			: "Supra",
+DlgDocMaLeft		: "Maldekstra",
+DlgDocMaRight		: "Dekstra",
+DlgDocMaBottom		: "Malsupra",
+DlgDocMeIndex		: "Ŝlosilvortoj de la Dokumento (apartigita de komoj)",
+DlgDocMeDescr		: "Dokumenta Priskribo",
+DlgDocMeAuthor		: "Verkinto",
+DlgDocMeCopy		: "Kopirajto",
+DlgDocPreview		: "Aspekto",
+
+// Templates Dialog
+Templates			: "Templates",	//MISSING
+DlgTemplatesTitle	: "Content Templates",	//MISSING
+DlgTemplatesSelMsg	: "Please select the template to open in the editor<br />(the actual contents will be lost):",	//MISSING
+DlgTemplatesLoading	: "Loading templates list. Please wait...",	//MISSING
+DlgTemplatesNoTpl	: "(No templates defined)",	//MISSING
+DlgTemplatesReplace	: "Replace actual contents",	//MISSING
+
+// About Dialog
+DlgAboutAboutTab	: "Pri",
+DlgAboutBrowserInfoTab	: "Informoj pri TTT-legilo",
+DlgAboutLicenseTab	: "License",	//MISSING
+DlgAboutVersion		: "versio",
+DlgAboutInfo		: "Por pli da informoj, vizitu"
+};
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/es.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/es.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/es.js	(revision 1280)
@@ -0,0 +1,516 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Spanish language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Contraer Barra",
+ToolbarExpand		: "Expandir Barra",
+
+// Toolbar Items and Context Menu
+Save				: "Guardar",
+NewPage				: "Nueva Página",
+Preview				: "Vista Previa",
+Cut					: "Cortar",
+Copy				: "Copiar",
+Paste				: "Pegar",
+PasteText			: "Pegar como texto plano",
+PasteWord			: "Pegar desde Word",
+Print				: "Imprimir",
+SelectAll			: "Seleccionar Todo",
+RemoveFormat		: "Eliminar Formato",
+InsertLinkLbl		: "Vínculo",
+InsertLink			: "Insertar/Editar Vínculo",
+RemoveLink			: "Eliminar Vínculo",
+Anchor				: "Referencia",
+AnchorDelete		: "Remove Anchor",	//MISSING
+InsertImageLbl		: "Imagen",
+InsertImage			: "Insertar/Editar Imagen",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Insertar/Editar Flash",
+InsertTableLbl		: "Tabla",
+InsertTable			: "Insertar/Editar Tabla",
+InsertLineLbl		: "Línea",
+InsertLine			: "Insertar Línea Horizontal",
+InsertSpecialCharLbl: "Caracter Especial",
+InsertSpecialChar	: "Insertar Caracter Especial",
+InsertSmileyLbl		: "Emoticons",
+InsertSmiley		: "Insertar Emoticons",
+About				: "Acerca de FCKeditor",
+Bold				: "Negrita",
+Italic				: "Cursiva",
+Underline			: "Subrayado",
+StrikeThrough		: "Tachado",
+Subscript			: "Subíndice",
+Superscript			: "Superíndice",
+LeftJustify			: "Alinear a Izquierda",
+CenterJustify		: "Centrar",
+RightJustify		: "Alinear a Derecha",
+BlockJustify		: "Justificado",
+DecreaseIndent		: "Disminuir Sangría",
+IncreaseIndent		: "Aumentar Sangría",
+Blockquote			: "Blockquote",	//MISSING
+Undo				: "Deshacer",
+Redo				: "Rehacer",
+NumberedListLbl		: "Numeración",
+NumberedList		: "Insertar/Eliminar Numeración",
+BulletedListLbl		: "Viñetas",
+BulletedList		: "Insertar/Eliminar Viñetas",
+ShowTableBorders	: "Mostrar Bordes de Tablas",
+ShowDetails			: "Mostrar saltos de Párrafo",
+Style				: "Estilo",
+FontFormat			: "Formato",
+Font				: "Fuente",
+FontSize			: "Tamaño",
+TextColor			: "Color de Texto",
+BGColor				: "Color de Fondo",
+Source				: "Fuente HTML",
+Find				: "Buscar",
+Replace				: "Reemplazar",
+SpellCheck			: "Ortografía",
+UniversalKeyboard	: "Teclado Universal",
+PageBreakLbl		: "Salto de Página",
+PageBreak			: "Insertar Salto de Página",
+
+Form			: "Formulario",
+Checkbox		: "Casilla de Verificación",
+RadioButton		: "Botones de Radio",
+TextField		: "Campo de Texto",
+Textarea		: "Area de Texto",
+HiddenField		: "Campo Oculto",
+Button			: "Botón",
+SelectionField	: "Campo de Selección",
+ImageButton		: "Botón Imagen",
+
+FitWindow		: "Maximizar el tamaño del editor",
+ShowBlocks		: "Show Blocks",	//MISSING
+
+// Context Menu
+EditLink			: "Editar Vínculo",
+CellCM				: "Celda",
+RowCM				: "Fila",
+ColumnCM			: "Columna",
+InsertRowAfter		: "Insert Row After",	//MISSING
+InsertRowBefore		: "Insert Row Before",	//MISSING
+DeleteRows			: "Eliminar Filas",
+InsertColumnAfter	: "Insert Column After",	//MISSING
+InsertColumnBefore	: "Insert Column Before",	//MISSING
+DeleteColumns		: "Eliminar Columnas",
+InsertCellAfter		: "Insert Cell After",	//MISSING
+InsertCellBefore	: "Insert Cell Before",	//MISSING
+DeleteCells			: "Eliminar Celdas",
+MergeCells			: "Combinar Celdas",
+MergeRight			: "Merge Right",	//MISSING
+MergeDown			: "Merge Down",	//MISSING
+HorizontalSplitCell	: "Split Cell Horizontally",	//MISSING
+VerticalSplitCell	: "Split Cell Vertically",	//MISSING
+TableDelete			: "Eliminar Tabla",
+CellProperties		: "Propiedades de Celda",
+TableProperties		: "Propiedades de Tabla",
+ImageProperties		: "Propiedades de Imagen",
+FlashProperties		: "Propiedades de Flash",
+
+AnchorProp			: "Propiedades de Referencia",
+ButtonProp			: "Propiedades de Botón",
+CheckboxProp		: "Propiedades de Casilla",
+HiddenFieldProp		: "Propiedades de Campo Oculto",
+RadioButtonProp		: "Propiedades de Botón de Radio",
+ImageButtonProp		: "Propiedades de Botón de Imagen",
+TextFieldProp		: "Propiedades de Campo de Texto",
+SelectionFieldProp	: "Propiedades de Campo de Selección",
+TextareaProp		: "Propiedades de Area de Texto",
+FormProp			: "Propiedades de Formulario",
+
+FontFormats			: "Normal;Con formato;Dirección;Encabezado 1;Encabezado 2;Encabezado 3;Encabezado 4;Encabezado 5;Encabezado 6;Normal (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "Procesando XHTML. Por favor, espere...",
+Done				: "Hecho",
+PasteWordConfirm	: "El texto que desea parece provenir de Word. Desea depurarlo antes de pegarlo?",
+NotCompatiblePaste	: "Este comando está disponible sólo para Internet Explorer version 5.5 or superior. Desea pegar sin depurar?",
+UnknownToolbarItem	: "Item de barra desconocido \"%1\"",
+UnknownCommand		: "Nombre de comando desconocido \"%1\"",
+NotImplemented		: "Comando no implementado",
+UnknownToolbarSet	: "Nombre de barra \"%1\" no definido",
+NoActiveX			: "La configuración de las opciones de seguridad de su navegador puede estar limitando algunas características del editor. Por favor active la opción \"Ejecutar controles y complementos de ActiveX \", de lo contrario puede experimentar errores o ausencia de funcionalidades.",
+BrowseServerBlocked : "La ventana de visualización del servidor no pudo ser abierta. Verifique que su navegador no esté bloqueando las ventanas emergentes (pop up).",
+DialogBlocked		: "No se ha podido abrir la ventana de diálogo. Verifique que su navegador no esté bloqueando las ventanas emergentes (pop up).",
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Cancelar",
+DlgBtnClose			: "Cerrar",
+DlgBtnBrowseServer	: "Ver Servidor",
+DlgAdvancedTag		: "Avanzado",
+DlgOpOther			: "<Otro>",
+DlgInfoTab			: "Información",
+DlgAlertUrl			: "Inserte el URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<No definido>",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Orientación de idioma",
+DlgGenLangDirLtr	: "Izquierda a Derecha (LTR)",
+DlgGenLangDirRtl	: "Derecha a Izquierda (RTL)",
+DlgGenLangCode		: "Código de idioma",
+DlgGenAccessKey		: "Clave de Acceso",
+DlgGenName			: "Nombre",
+DlgGenTabIndex		: "Indice de tabulación",
+DlgGenLongDescr		: "Descripción larga URL",
+DlgGenClass			: "Clases de hojas de estilo",
+DlgGenTitle			: "Título",
+DlgGenContType		: "Tipo de Contenido",
+DlgGenLinkCharset	: "Fuente de caracteres vinculado",
+DlgGenStyle			: "Estilo",
+
+// Image Dialog
+DlgImgTitle			: "Propiedades de Imagen",
+DlgImgInfoTab		: "Información de Imagen",
+DlgImgBtnUpload		: "Enviar al Servidor",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Cargar",
+DlgImgAlt			: "Texto Alternativo",
+DlgImgWidth			: "Anchura",
+DlgImgHeight		: "Altura",
+DlgImgLockRatio		: "Proporcional",
+DlgBtnResetSize		: "Tamaño Original",
+DlgImgBorder		: "Borde",
+DlgImgHSpace		: "Esp.Horiz",
+DlgImgVSpace		: "Esp.Vert",
+DlgImgAlign			: "Alineación",
+DlgImgAlignLeft		: "Izquierda",
+DlgImgAlignAbsBottom: "Abs inferior",
+DlgImgAlignAbsMiddle: "Abs centro",
+DlgImgAlignBaseline	: "Línea de base",
+DlgImgAlignBottom	: "Pie",
+DlgImgAlignMiddle	: "Centro",
+DlgImgAlignRight	: "Derecha",
+DlgImgAlignTextTop	: "Tope del texto",
+DlgImgAlignTop		: "Tope",
+DlgImgPreview		: "Vista Previa",
+DlgImgAlertUrl		: "Por favor tipee el URL de la imagen",
+DlgImgLinkTab		: "Vínculo",
+
+// Flash Dialog
+DlgFlashTitle		: "Propiedades de Flash",
+DlgFlashChkPlay		: "Autoejecución",
+DlgFlashChkLoop		: "Repetir",
+DlgFlashChkMenu		: "Activar Menú Flash",
+DlgFlashScale		: "Escala",
+DlgFlashScaleAll	: "Mostrar todo",
+DlgFlashScaleNoBorder	: "Sin Borde",
+DlgFlashScaleFit	: "Ajustado",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Vínculo",
+DlgLnkInfoTab		: "Información de Vínculo",
+DlgLnkTargetTab		: "Destino",
+
+DlgLnkType			: "Tipo de vínculo",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Referencia en esta página",
+DlgLnkTypeEMail		: "E-Mail",
+DlgLnkProto			: "Protocolo",
+DlgLnkProtoOther	: "<otro>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Seleccionar una referencia",
+DlgLnkAnchorByName	: "Por Nombre de Referencia",
+DlgLnkAnchorById	: "Por ID de elemento",
+DlgLnkNoAnchors		: "(No hay referencias disponibles en el documento)",
+DlgLnkEMail			: "Dirección de E-Mail",
+DlgLnkEMailSubject	: "Título del Mensaje",
+DlgLnkEMailBody		: "Cuerpo del Mensaje",
+DlgLnkUpload		: "Cargar",
+DlgLnkBtnUpload		: "Enviar al Servidor",
+
+DlgLnkTarget		: "Destino",
+DlgLnkTargetFrame	: "<marco>",
+DlgLnkTargetPopup	: "<ventana emergente>",
+DlgLnkTargetBlank	: "Nueva Ventana(_blank)",
+DlgLnkTargetParent	: "Ventana Padre (_parent)",
+DlgLnkTargetSelf	: "Misma Ventana (_self)",
+DlgLnkTargetTop		: "Ventana primaria (_top)",
+DlgLnkTargetFrameName	: "Nombre del Marco Destino",
+DlgLnkPopWinName	: "Nombre de Ventana Emergente",
+DlgLnkPopWinFeat	: "Características de Ventana Emergente",
+DlgLnkPopResize		: "Ajustable",
+DlgLnkPopLocation	: "Barra de ubicación",
+DlgLnkPopMenu		: "Barra de Menú",
+DlgLnkPopScroll		: "Barras de desplazamiento",
+DlgLnkPopStatus		: "Barra de Estado",
+DlgLnkPopToolbar	: "Barra de Herramientas",
+DlgLnkPopFullScrn	: "Pantalla Completa (IE)",
+DlgLnkPopDependent	: "Dependiente (Netscape)",
+DlgLnkPopWidth		: "Anchura",
+DlgLnkPopHeight		: "Altura",
+DlgLnkPopLeft		: "Posición Izquierda",
+DlgLnkPopTop		: "Posición Derecha",
+
+DlnLnkMsgNoUrl		: "Por favor tipee el vínculo URL",
+DlnLnkMsgNoEMail	: "Por favor tipee la dirección de e-mail",
+DlnLnkMsgNoAnchor	: "Por favor seleccione una referencia",
+DlnLnkMsgInvPopName	: "The popup name must begin with an alphabetic character and must not contain spaces",	//MISSING
+
+// Color Dialog
+DlgColorTitle		: "Seleccionar Color",
+DlgColorBtnClear	: "Ninguno",
+DlgColorHighlight	: "Resaltado",
+DlgColorSelected	: "Seleccionado",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Insertar un Emoticon",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Seleccione un caracter especial",
+
+// Table Dialog
+DlgTableTitle		: "Propiedades de Tabla",
+DlgTableRows		: "Filas",
+DlgTableColumns		: "Columnas",
+DlgTableBorder		: "Tamaño de Borde",
+DlgTableAlign		: "Alineación",
+DlgTableAlignNotSet	: "<No establecido>",
+DlgTableAlignLeft	: "Izquierda",
+DlgTableAlignCenter	: "Centrado",
+DlgTableAlignRight	: "Derecha",
+DlgTableWidth		: "Anchura",
+DlgTableWidthPx		: "pixeles",
+DlgTableWidthPc		: "porcentaje",
+DlgTableHeight		: "Altura",
+DlgTableCellSpace	: "Esp. e/celdas",
+DlgTableCellPad		: "Esp. interior",
+DlgTableCaption		: "Título",
+DlgTableSummary		: "Síntesis",
+
+// Table Cell Dialog
+DlgCellTitle		: "Propiedades de Celda",
+DlgCellWidth		: "Anchura",
+DlgCellWidthPx		: "pixeles",
+DlgCellWidthPc		: "porcentaje",
+DlgCellHeight		: "Altura",
+DlgCellWordWrap		: "Cortar Línea",
+DlgCellWordWrapNotSet	: "<No establecido>",
+DlgCellWordWrapYes	: "Si",
+DlgCellWordWrapNo	: "No",
+DlgCellHorAlign		: "Alineación Horizontal",
+DlgCellHorAlignNotSet	: "<No establecido>",
+DlgCellHorAlignLeft	: "Izquierda",
+DlgCellHorAlignCenter	: "Centrado",
+DlgCellHorAlignRight: "Derecha",
+DlgCellVerAlign		: "Alineación Vertical",
+DlgCellVerAlignNotSet	: "<Not establecido>",
+DlgCellVerAlignTop	: "Tope",
+DlgCellVerAlignMiddle	: "Medio",
+DlgCellVerAlignBottom	: "ie",
+DlgCellVerAlignBaseline	: "Línea de Base",
+DlgCellRowSpan		: "Abarcar Filas",
+DlgCellCollSpan		: "Abarcar Columnas",
+DlgCellBackColor	: "Color de Fondo",
+DlgCellBorderColor	: "Color de Borde",
+DlgCellBtnSelect	: "Seleccione...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Find and Replace",	//MISSING
+
+// Find Dialog
+DlgFindTitle		: "Buscar",
+DlgFindFindBtn		: "Buscar",
+DlgFindNotFoundMsg	: "El texto especificado no ha sido encontrado.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Reemplazar",
+DlgReplaceFindLbl		: "Texto a buscar:",
+DlgReplaceReplaceLbl	: "Reemplazar con:",
+DlgReplaceCaseChk		: "Coincidir may/min",
+DlgReplaceReplaceBtn	: "Reemplazar",
+DlgReplaceReplAllBtn	: "Reemplazar Todo",
+DlgReplaceWordChk		: "Coincidir toda la palabra",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "La configuración de seguridad de este navegador no permite la ejecución automática de operaciones de cortado. Por favor use el teclado (Ctrl+X).",
+PasteErrorCopy	: "La configuración de seguridad de este navegador no permite la ejecución automática de operaciones de copiado. Por favor use el teclado (Ctrl+C).",
+
+PasteAsText		: "Pegar como Texto Plano",
+PasteFromWord	: "Pegar desde Word",
+
+DlgPasteMsg2	: "Por favor pegue dentro del cuadro utilizando el teclado (<STRONG>Ctrl+V</STRONG>); luego presione <STRONG>OK</STRONG>.",
+DlgPasteSec		: "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.",	//MISSING
+DlgPasteIgnoreFont		: "Ignorar definiciones de fuentes",
+DlgPasteRemoveStyles	: "Remover definiciones de estilo",
+DlgPasteCleanBox		: "Borrar el contenido del cuadro",
+
+// Color Picker
+ColorAutomatic	: "Automático",
+ColorMoreColors	: "Más Colores...",
+
+// Document Properties
+DocProps		: "Propiedades del Documento",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Propiedades de la Referencia",
+DlgAnchorName		: "Nombre de la Referencia",
+DlgAnchorErrorName	: "Por favor, complete el nombre de la Referencia",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "No se encuentra en el Diccionario",
+DlgSpellChangeTo		: "Cambiar a",
+DlgSpellBtnIgnore		: "Ignorar",
+DlgSpellBtnIgnoreAll	: "Ignorar Todo",
+DlgSpellBtnReplace		: "Reemplazar",
+DlgSpellBtnReplaceAll	: "Reemplazar Todo",
+DlgSpellBtnUndo			: "Deshacer",
+DlgSpellNoSuggestions	: "- No hay sugerencias -",
+DlgSpellProgress		: "Control de Ortografía en progreso...",
+DlgSpellNoMispell		: "Control finalizado: no se encontraron errores",
+DlgSpellNoChanges		: "Control finalizado: no se ha cambiado ninguna palabra",
+DlgSpellOneChange		: "Control finalizado: se ha cambiado una palabra",
+DlgSpellManyChanges		: "Control finalizado: se ha cambiado %1 palabras",
+
+IeSpellDownload			: "Módulo de Control de Ortografía no instalado. ¿Desea descargarlo ahora?",
+
+// Button Dialog
+DlgButtonText		: "Texto (Valor)",
+DlgButtonType		: "Tipo",
+DlgButtonTypeBtn	: "Button",	//MISSING
+DlgButtonTypeSbm	: "Submit",	//MISSING
+DlgButtonTypeRst	: "Reset",	//MISSING
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Nombre",
+DlgCheckboxValue	: "Valor",
+DlgCheckboxSelected	: "Seleccionado",
+
+// Form Dialog
+DlgFormName		: "Nombre",
+DlgFormAction	: "Acción",
+DlgFormMethod	: "Método",
+
+// Select Field Dialog
+DlgSelectName		: "Nombre",
+DlgSelectValue		: "Valor",
+DlgSelectSize		: "Tamaño",
+DlgSelectLines		: "Lineas",
+DlgSelectChkMulti	: "Permitir múltiple selección",
+DlgSelectOpAvail	: "Opciones disponibles",
+DlgSelectOpText		: "Texto",
+DlgSelectOpValue	: "Valor",
+DlgSelectBtnAdd		: "Agregar",
+DlgSelectBtnModify	: "Modificar",
+DlgSelectBtnUp		: "Subir",
+DlgSelectBtnDown	: "Bajar",
+DlgSelectBtnSetValue : "Establecer como predeterminado",
+DlgSelectBtnDelete	: "Eliminar",
+
+// Textarea Dialog
+DlgTextareaName	: "Nombre",
+DlgTextareaCols	: "Columnas",
+DlgTextareaRows	: "Filas",
+
+// Text Field Dialog
+DlgTextName			: "Nombre",
+DlgTextValue		: "Valor",
+DlgTextCharWidth	: "Caracteres de ancho",
+DlgTextMaxChars		: "Máximo caracteres",
+DlgTextType			: "Tipo",
+DlgTextTypeText		: "Texto",
+DlgTextTypePass		: "Contraseña",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Nombre",
+DlgHiddenValue	: "Valor",
+
+// Bulleted List Dialog
+BulletedListProp	: "Propiedades de Viñetas",
+NumberedListProp	: "Propiedades de Numeraciones",
+DlgLstStart			: "Start",	//MISSING
+DlgLstType			: "Tipo",
+DlgLstTypeCircle	: "Círculo",
+DlgLstTypeDisc		: "Disco",
+DlgLstTypeSquare	: "Cuadrado",
+DlgLstTypeNumbers	: "Números (1, 2, 3)",
+DlgLstTypeLCase		: "letras en minúsculas (a, b, c)",
+DlgLstTypeUCase		: "letras en mayúsculas (A, B, C)",
+DlgLstTypeSRoman	: "Números Romanos (i, ii, iii)",
+DlgLstTypeLRoman	: "Números Romanos (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "General",
+DlgDocBackTab		: "Fondo",
+DlgDocColorsTab		: "Colores y Márgenes",
+DlgDocMetaTab		: "Meta Información",
+
+DlgDocPageTitle		: "Título de Página",
+DlgDocLangDir		: "Orientación de idioma",
+DlgDocLangDirLTR	: "Izq. a Derecha (LTR)",
+DlgDocLangDirRTL	: "Der. a Izquierda (RTL)",
+DlgDocLangCode		: "Código de Idioma",
+DlgDocCharSet		: "Codif. de Conjunto de Caracteres",
+DlgDocCharSetCE		: "Central European",	//MISSING
+DlgDocCharSetCT		: "Chinese Traditional (Big5)",	//MISSING
+DlgDocCharSetCR		: "Cyrillic",	//MISSING
+DlgDocCharSetGR		: "Greek",	//MISSING
+DlgDocCharSetJP		: "Japanese",	//MISSING
+DlgDocCharSetKR		: "Korean",	//MISSING
+DlgDocCharSetTR		: "Turkish",	//MISSING
+DlgDocCharSetUN		: "Unicode (UTF-8)",	//MISSING
+DlgDocCharSetWE		: "Western European",	//MISSING
+DlgDocCharSetOther	: "Otra Codificación",
+
+DlgDocDocType		: "Encabezado de Tipo de Documento",
+DlgDocDocTypeOther	: "Otro Encabezado",
+DlgDocIncXHTML		: "Incluir Declaraciones XHTML",
+DlgDocBgColor		: "Color de Fondo",
+DlgDocBgImage		: "URL de Imagen de Fondo",
+DlgDocBgNoScroll	: "Fondo sin rolido",
+DlgDocCText			: "Texto",
+DlgDocCLink			: "Vínculo",
+DlgDocCVisited		: "Vínculo Visitado",
+DlgDocCActive		: "Vínculo Activo",
+DlgDocMargins		: "Márgenes de Página",
+DlgDocMaTop			: "Tope",
+DlgDocMaLeft		: "Izquierda",
+DlgDocMaRight		: "Derecha",
+DlgDocMaBottom		: "Pie",
+DlgDocMeIndex		: "Claves de indexación del Documento (separados por comas)",
+DlgDocMeDescr		: "Descripción del Documento",
+DlgDocMeAuthor		: "Autor",
+DlgDocMeCopy		: "Copyright",
+DlgDocPreview		: "Vista Previa",
+
+// Templates Dialog
+Templates			: "Plantillas",
+DlgTemplatesTitle	: "Contenido de Plantillas",
+DlgTemplatesSelMsg	: "Por favor selecciona la plantilla a abrir en el editor<br>(el contenido actual se perderá):",
+DlgTemplatesLoading	: "Cargando lista de Plantillas. Por favor, aguarde...",
+DlgTemplatesNoTpl	: "(No hay plantillas definidas)",
+DlgTemplatesReplace	: "Replace actual contents",	//MISSING
+
+// About Dialog
+DlgAboutAboutTab	: "Acerca de",
+DlgAboutBrowserInfoTab	: "Información de Navegador",
+DlgAboutLicenseTab	: "Licencia",
+DlgAboutVersion		: "versión",
+DlgAboutInfo		: "Para mayor información por favor dirigirse a"
+};
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/et.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/et.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/et.js	(revision 1280)
@@ -0,0 +1,516 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Estonian language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Voldi tööriistariba",
+ToolbarExpand		: "Laienda tööriistariba",
+
+// Toolbar Items and Context Menu
+Save				: "Salvesta",
+NewPage				: "Uus leht",
+Preview				: "Eelvaade",
+Cut					: "Lõika",
+Copy				: "Kopeeri",
+Paste				: "Kleebi",
+PasteText			: "Kleebi tavalise tekstina",
+PasteWord			: "Kleebi Wordist",
+Print				: "Prindi",
+SelectAll			: "Vali kõik",
+RemoveFormat		: "Eemalda vorming",
+InsertLinkLbl		: "Link",
+InsertLink			: "Sisesta/Muuda link",
+RemoveLink			: "Eemalda link",
+Anchor				: "Sisesta/Muuda ankur",
+AnchorDelete		: "Remove Anchor",	//MISSING
+InsertImageLbl		: "Pilt",
+InsertImage			: "Sisesta/Muuda pilt",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Sisesta/Muuda flash",
+InsertTableLbl		: "Tabel",
+InsertTable			: "Sisesta/Muuda tabel",
+InsertLineLbl		: "Joon",
+InsertLine			: "Sisesta horisontaaljoon",
+InsertSpecialCharLbl: "Erimärgid",
+InsertSpecialChar	: "Sisesta erimärk",
+InsertSmileyLbl		: "Emotikon",
+InsertSmiley		: "Sisesta emotikon",
+About				: "FCKeditor teave",
+Bold				: "Rasvane kiri",
+Italic				: "Kursiiv kiri",
+Underline			: "Allajoonitud kiri",
+StrikeThrough		: "Läbijoonitud kiri",
+Subscript			: "Allindeks",
+Superscript			: "Ülaindeks",
+LeftJustify			: "Vasakjoondus",
+CenterJustify		: "Keskjoondus",
+RightJustify		: "Paremjoondus",
+BlockJustify		: "Rööpjoondus",
+DecreaseIndent		: "Vähenda taanet",
+IncreaseIndent		: "Suurenda taanet",
+Blockquote			: "Blockquote",	//MISSING
+Undo				: "Võta tagasi",
+Redo				: "Korda toimingut",
+NumberedListLbl		: "Nummerdatud loetelu",
+NumberedList		: "Sisesta/Eemalda nummerdatud loetelu",
+BulletedListLbl		: "Punktiseeritud loetelu",
+BulletedList		: "Sisesta/Eemalda punktiseeritud loetelu",
+ShowTableBorders	: "Näita tabeli jooni",
+ShowDetails			: "Näita üksikasju",
+Style				: "Laad",
+FontFormat			: "Vorming",
+Font				: "Kiri",
+FontSize			: "Suurus",
+TextColor			: "Teksti värv",
+BGColor				: "Tausta värv",
+Source				: "Lähtekood",
+Find				: "Otsi",
+Replace				: "Asenda",
+SpellCheck			: "Kontrolli õigekirja",
+UniversalKeyboard	: "Universaalne klaviatuur",
+PageBreakLbl		: "Lehepiir",
+PageBreak			: "Sisesta lehevahetus koht",
+
+Form			: "Vorm",
+Checkbox		: "Märkeruut",
+RadioButton		: "Raadionupp",
+TextField		: "Tekstilahter",
+Textarea		: "Tekstiala",
+HiddenField		: "Varjatud lahter",
+Button			: "Nupp",
+SelectionField	: "Valiklahter",
+ImageButton		: "Piltnupp",
+
+FitWindow		: "Maksimeeri redaktori mõõtmed",
+ShowBlocks		: "Show Blocks",	//MISSING
+
+// Context Menu
+EditLink			: "Muuda linki",
+CellCM				: "Lahter",
+RowCM				: "Rida",
+ColumnCM			: "Veerg",
+InsertRowAfter		: "Insert Row After",	//MISSING
+InsertRowBefore		: "Insert Row Before",	//MISSING
+DeleteRows			: "Eemalda ridu",
+InsertColumnAfter	: "Insert Column After",	//MISSING
+InsertColumnBefore	: "Insert Column Before",	//MISSING
+DeleteColumns		: "Eemalda veerud",
+InsertCellAfter		: "Insert Cell After",	//MISSING
+InsertCellBefore	: "Insert Cell Before",	//MISSING
+DeleteCells			: "Eemalda lahtrid",
+MergeCells			: "Ühenda lahtrid",
+MergeRight			: "Merge Right",	//MISSING
+MergeDown			: "Merge Down",	//MISSING
+HorizontalSplitCell	: "Split Cell Horizontally",	//MISSING
+VerticalSplitCell	: "Split Cell Vertically",	//MISSING
+TableDelete			: "Kustuta tabel",
+CellProperties		: "Lahtri atribuudid",
+TableProperties		: "Tabeli atribuudid",
+ImageProperties		: "Pildi  atribuudid",
+FlashProperties		: "Flash omadused",
+
+AnchorProp			: "Ankru omadused",
+ButtonProp			: "Nupu omadused",
+CheckboxProp		: "Märkeruudu omadused",
+HiddenFieldProp		: "Varjatud lahtri omadused",
+RadioButtonProp		: "Raadionupu omadused",
+ImageButtonProp		: "Piltnupu omadused",
+TextFieldProp		: "Tekstilahtri omadused",
+SelectionFieldProp	: "Valiklahtri omadused",
+TextareaProp		: "Tekstiala omadused",
+FormProp			: "Vormi omadused",
+
+FontFormats			: "Tavaline;Vormindatud;Aadress;Pealkiri 1;Pealkiri 2;Pealkiri 3;Pealkiri 4;Pealkiri 5;Pealkiri 6;Tavaline (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "Töötlen XHTML. Palun oota...",
+Done				: "Tehtud",
+PasteWordConfirm	: "Tekst, mida soovid lisada paistab pärinevat Wordist. Kas soovid seda enne kleepimist puhastada?",
+NotCompatiblePaste	: "See käsk on saadaval ainult Internet Explorer versioon 5.5 või uuema puhul. Kas soovid kleepida ilma puhastamata?",
+UnknownToolbarItem	: "Tundmatu tööriistariba üksus \"%1\"",
+UnknownCommand		: "Tundmatu käsunimi \"%1\"",
+NotImplemented		: "Käsku ei täidetud",
+UnknownToolbarSet	: "Tööriistariba \"%1\" ei eksisteeri",
+NoActiveX			: "Sinu veebisirvija turvalisuse seaded võivad limiteerida mõningaid tekstirdaktori kasutus võimalusi. Sa peaksid võimaldama valiku \"Run ActiveX controls and plug-ins\" oma sirvija seadetes. Muidu võid sa täheldada vigu tekstiredaktori töös ja märgata puuduvaid funktsioone.",
+BrowseServerBlocked : "Ressursside sirvija avamine ebaõnnestus. Võimalda pop-up akende avanemine.",
+DialogBlocked		: "Ei olenud võimalik avada dialoogi akent. Võimalda pop-up akende avanemine.",
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Loobu",
+DlgBtnClose			: "Sulge",
+DlgBtnBrowseServer	: "Sirvi serverit",
+DlgAdvancedTag		: "Täpsemalt",
+DlgOpOther			: "<Teine>",
+DlgInfoTab			: "Info",
+DlgAlertUrl			: "Palun sisesta URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<määramata>",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Keele suund",
+DlgGenLangDirLtr	: "Vasakult paremale (LTR)",
+DlgGenLangDirRtl	: "Paremalt vasakule (RTL)",
+DlgGenLangCode		: "Keele kood",
+DlgGenAccessKey		: "Juurdepääsu võti",
+DlgGenName			: "Nimi",
+DlgGenTabIndex		: "Tab indeks",
+DlgGenLongDescr		: "Pikk kirjeldus URL",
+DlgGenClass			: "Stiilistiku klassid",
+DlgGenTitle			: "Juhendav tiitel",
+DlgGenContType		: "Juhendava sisu tüüp",
+DlgGenLinkCharset	: "Lingitud ressurssi märgistik",
+DlgGenStyle			: "Laad",
+
+// Image Dialog
+DlgImgTitle			: "Pildi atribuudid",
+DlgImgInfoTab		: "Pildi info",
+DlgImgBtnUpload		: "Saada serverissee",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Lae üles",
+DlgImgAlt			: "Alternatiivne tekst",
+DlgImgWidth			: "Laius",
+DlgImgHeight		: "Kõrgus",
+DlgImgLockRatio		: "Lukusta kuvasuhe",
+DlgBtnResetSize		: "Lähtesta suurus",
+DlgImgBorder		: "Joon",
+DlgImgHSpace		: "H. vaheruum",
+DlgImgVSpace		: "V. vaheruum",
+DlgImgAlign			: "Joondus",
+DlgImgAlignLeft		: "Vasak",
+DlgImgAlignAbsBottom: "Abs alla",
+DlgImgAlignAbsMiddle: "Abs keskele",
+DlgImgAlignBaseline	: "Baasjoonele",
+DlgImgAlignBottom	: "Alla",
+DlgImgAlignMiddle	: "Keskele",
+DlgImgAlignRight	: "Paremale",
+DlgImgAlignTextTop	: "Tekstit üles",
+DlgImgAlignTop		: "Üles",
+DlgImgPreview		: "Eelvaade",
+DlgImgAlertUrl		: "Palun kirjuta pildi URL",
+DlgImgLinkTab		: "Link",
+
+// Flash Dialog
+DlgFlashTitle		: "Flash omadused",
+DlgFlashChkPlay		: "Automaatne start ",
+DlgFlashChkLoop		: "Korduv",
+DlgFlashChkMenu		: "Võimalda flash menüü",
+DlgFlashScale		: "Mastaap",
+DlgFlashScaleAll	: "Näita kõike",
+DlgFlashScaleNoBorder	: "Äärist ei ole",
+DlgFlashScaleFit	: "Täpne sobivus",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Link",
+DlgLnkInfoTab		: "Lingi info",
+DlgLnkTargetTab		: "Sihtkoht",
+
+DlgLnkType			: "Lingi tüüp",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Ankur sellel lehel",
+DlgLnkTypeEMail		: "E-post",
+DlgLnkProto			: "Protokoll",
+DlgLnkProtoOther	: "<muu>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Vali ankur",
+DlgLnkAnchorByName	: "Ankru nime järgi",
+DlgLnkAnchorById	: "Elemendi id järgi",
+DlgLnkNoAnchors		: "(Selles dokumendis ei ole ankruid)",
+DlgLnkEMail			: "E-posti aadress",
+DlgLnkEMailSubject	: "Sõnumi teema",
+DlgLnkEMailBody		: "Sõnumi tekst",
+DlgLnkUpload		: "Lae üles",
+DlgLnkBtnUpload		: "Saada serverisse",
+
+DlgLnkTarget		: "Sihtkoht",
+DlgLnkTargetFrame	: "<raam>",
+DlgLnkTargetPopup	: "<hüpikaken>",
+DlgLnkTargetBlank	: "Uus aken (_blank)",
+DlgLnkTargetParent	: "Vanem aken (_parent)",
+DlgLnkTargetSelf	: "Sama aken (_self)",
+DlgLnkTargetTop		: "Pealmine aken (_top)",
+DlgLnkTargetFrameName	: "Sihtmärk raami nimi",
+DlgLnkPopWinName	: "Hüpikakna nimi",
+DlgLnkPopWinFeat	: "Hüpikakna omadused",
+DlgLnkPopResize		: "Suurendatav",
+DlgLnkPopLocation	: "Aadressiriba",
+DlgLnkPopMenu		: "Menüüriba",
+DlgLnkPopScroll		: "Kerimisribad",
+DlgLnkPopStatus		: "Olekuriba",
+DlgLnkPopToolbar	: "Tööriistariba",
+DlgLnkPopFullScrn	: "Täisekraan (IE)",
+DlgLnkPopDependent	: "Sõltuv (Netscape)",
+DlgLnkPopWidth		: "Laius",
+DlgLnkPopHeight		: "Kõrgus",
+DlgLnkPopLeft		: "Vasak asukoht",
+DlgLnkPopTop		: "Ülemine asukoht",
+
+DlnLnkMsgNoUrl		: "Palun kirjuta lingi URL",
+DlnLnkMsgNoEMail	: "Palun kirjuta E-Posti aadress",
+DlnLnkMsgNoAnchor	: "Palun vali ankur",
+DlnLnkMsgInvPopName	: "Hüpikakna nimi peab algama alfabeetilise tähega ja ei tohi sisaldada tühikuid",
+
+// Color Dialog
+DlgColorTitle		: "Vali värv",
+DlgColorBtnClear	: "Tühjenda",
+DlgColorHighlight	: "Märgi",
+DlgColorSelected	: "Valitud",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Sisesta emotikon",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Vali erimärk",
+
+// Table Dialog
+DlgTableTitle		: "Tabeli atribuudid",
+DlgTableRows		: "Read",
+DlgTableColumns		: "Veerud",
+DlgTableBorder		: "Joone suurus",
+DlgTableAlign		: "Joondus",
+DlgTableAlignNotSet	: "<Määramata>",
+DlgTableAlignLeft	: "Vasak",
+DlgTableAlignCenter	: "Kesk",
+DlgTableAlignRight	: "Parem",
+DlgTableWidth		: "Laius",
+DlgTableWidthPx		: "pikslit",
+DlgTableWidthPc		: "protsenti",
+DlgTableHeight		: "Kõrgus",
+DlgTableCellSpace	: "Lahtri vahe",
+DlgTableCellPad		: "Lahtri täidis",
+DlgTableCaption		: "Tabeli tiitel",
+DlgTableSummary		: "Kokkuvõte",
+
+// Table Cell Dialog
+DlgCellTitle		: "Lahtri atribuudid",
+DlgCellWidth		: "Laius",
+DlgCellWidthPx		: "pikslit",
+DlgCellWidthPc		: "protsenti",
+DlgCellHeight		: "Kõrgus",
+DlgCellWordWrap		: "Sõna ülekanne",
+DlgCellWordWrapNotSet	: "<Määramata>",
+DlgCellWordWrapYes	: "Jah",
+DlgCellWordWrapNo	: "Ei",
+DlgCellHorAlign		: "Horisontaaljoondus",
+DlgCellHorAlignNotSet	: "<Määramata>",
+DlgCellHorAlignLeft	: "Vasak",
+DlgCellHorAlignCenter	: "Kesk",
+DlgCellHorAlignRight: "Parem",
+DlgCellVerAlign		: "Vertikaaljoondus",
+DlgCellVerAlignNotSet	: "<Määramata>",
+DlgCellVerAlignTop	: "Üles",
+DlgCellVerAlignMiddle	: "Keskele",
+DlgCellVerAlignBottom	: "Alla",
+DlgCellVerAlignBaseline	: "Baasjoonele",
+DlgCellRowSpan		: "Reaulatus",
+DlgCellCollSpan		: "Veeruulatus",
+DlgCellBackColor	: "Tausta värv",
+DlgCellBorderColor	: "Joone värv",
+DlgCellBtnSelect	: "Vali...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Find and Replace",	//MISSING
+
+// Find Dialog
+DlgFindTitle		: "Otsi",
+DlgFindFindBtn		: "Otsi",
+DlgFindNotFoundMsg	: "Valitud teksti ei leitud.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Asenda",
+DlgReplaceFindLbl		: "Leia mida:",
+DlgReplaceReplaceLbl	: "Asenda millega:",
+DlgReplaceCaseChk		: "Erista suur- ja väiketähti",
+DlgReplaceReplaceBtn	: "Asenda",
+DlgReplaceReplAllBtn	: "Asenda kõik",
+DlgReplaceWordChk		: "Otsi terviklike sõnu",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "Sinu veebisirvija turvaseaded ei luba redaktoril automaatselt lõigata. Palun kasutage selleks klaviatuuri klahvikombinatsiooni (Ctrl+X).",
+PasteErrorCopy	: "Sinu veebisirvija turvaseaded ei luba redaktoril automaatselt kopeerida. Palun kasutage selleks klaviatuuri klahvikombinatsiooni (Ctrl+C).",
+
+PasteAsText		: "Kleebi tavalise tekstina",
+PasteFromWord	: "Kleebi Wordist",
+
+DlgPasteMsg2	: "Palun kleebi järgnevasse kasti kasutades klaviatuuri klahvikombinatsiooni (<STRONG>Ctrl+V</STRONG>) ja vajuta seejärel <STRONG>OK</STRONG>.",
+DlgPasteSec		: "Sinu veebisirvija turvaseadete tõttu, ei oma redaktor otsest ligipääsu lõikelaua andmetele. Sa pead kleepima need uuesti siia aknasse.",
+DlgPasteIgnoreFont		: "Ignoreeri kirja definitsioone",
+DlgPasteRemoveStyles	: "Eemalda stiilide definitsioonid",
+DlgPasteCleanBox		: "Puhasta ära kast",
+
+// Color Picker
+ColorAutomatic	: "Automaatne",
+ColorMoreColors	: "Rohkem värve...",
+
+// Document Properties
+DocProps		: "Dokumendi omadused",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Ankru omadused",
+DlgAnchorName		: "Ankru nimi",
+DlgAnchorErrorName	: "Palun sisest ankru nimi",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Puudub sõnastikust",
+DlgSpellChangeTo		: "Muuda",
+DlgSpellBtnIgnore		: "Ignoreeri",
+DlgSpellBtnIgnoreAll	: "Ignoreeri kõiki",
+DlgSpellBtnReplace		: "Asenda",
+DlgSpellBtnReplaceAll	: "Asenda kõik",
+DlgSpellBtnUndo			: "Võta tagasi",
+DlgSpellNoSuggestions	: "- Soovitused puuduvad -",
+DlgSpellProgress		: "Toimub õigekirja kontroll...",
+DlgSpellNoMispell		: "Õigekirja kontroll sooritatud: õigekirjuvigu ei leitud",
+DlgSpellNoChanges		: "Õigekirja kontroll sooritatud: ühtegi sõna ei muudetud",
+DlgSpellOneChange		: "Õigekirja kontroll sooritatud: üks sõna muudeti",
+DlgSpellManyChanges		: "Õigekirja kontroll sooritatud: %1 sõna muudetud",
+
+IeSpellDownload			: "Õigekirja kontrollija ei ole installeeritud. Soovid sa selle alla laadida?",
+
+// Button Dialog
+DlgButtonText		: "Tekst (väärtus)",
+DlgButtonType		: "Tüüp",
+DlgButtonTypeBtn	: "Nupp",
+DlgButtonTypeSbm	: "Saada",
+DlgButtonTypeRst	: "Lähtesta",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Nimi",
+DlgCheckboxValue	: "Väärtus",
+DlgCheckboxSelected	: "Valitud",
+
+// Form Dialog
+DlgFormName		: "Nimi",
+DlgFormAction	: "Toiming",
+DlgFormMethod	: "Meetod",
+
+// Select Field Dialog
+DlgSelectName		: "Nimi",
+DlgSelectValue		: "Väärtus",
+DlgSelectSize		: "Suurus",
+DlgSelectLines		: "ridu",
+DlgSelectChkMulti	: "Võimalda mitu valikut",
+DlgSelectOpAvail	: "Võimalikud valikud",
+DlgSelectOpText		: "Tekst",
+DlgSelectOpValue	: "Väärtus",
+DlgSelectBtnAdd		: "Lisa",
+DlgSelectBtnModify	: "Muuda",
+DlgSelectBtnUp		: "Üles",
+DlgSelectBtnDown	: "Alla",
+DlgSelectBtnSetValue : "Sea valitud olekuna",
+DlgSelectBtnDelete	: "Kustuta",
+
+// Textarea Dialog
+DlgTextareaName	: "Nimi",
+DlgTextareaCols	: "Veerge",
+DlgTextareaRows	: "Ridu",
+
+// Text Field Dialog
+DlgTextName			: "Nimi",
+DlgTextValue		: "Väärtus",
+DlgTextCharWidth	: "Laius (tähemärkides)",
+DlgTextMaxChars		: "Maksimaalselt tähemärke",
+DlgTextType			: "Tüüp",
+DlgTextTypeText		: "Tekst",
+DlgTextTypePass		: "Parool",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Nimi",
+DlgHiddenValue	: "Väärtus",
+
+// Bulleted List Dialog
+BulletedListProp	: "Täpitud loetelu omadused",
+NumberedListProp	: "Nummerdatud loetelu omadused",
+DlgLstStart			: "Alusta",
+DlgLstType			: "Tüüp",
+DlgLstTypeCircle	: "Ring",
+DlgLstTypeDisc		: "Ketas",
+DlgLstTypeSquare	: "Ruut",
+DlgLstTypeNumbers	: "Numbrid (1, 2, 3)",
+DlgLstTypeLCase		: "Väiketähed (a, b, c)",
+DlgLstTypeUCase		: "Suurtähed (A, B, C)",
+DlgLstTypeSRoman	: "Väiksed Rooma numbrid (i, ii, iii)",
+DlgLstTypeLRoman	: "Suured Rooma numbrid (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Üldine",
+DlgDocBackTab		: "Taust",
+DlgDocColorsTab		: "Värvid ja veerised",
+DlgDocMetaTab		: "Meta andmed",
+
+DlgDocPageTitle		: "Lehekülje tiitel",
+DlgDocLangDir		: "Kirja suund",
+DlgDocLangDirLTR	: "Vasakult paremale (LTR)",
+DlgDocLangDirRTL	: "Paremalt vasakule (RTL)",
+DlgDocLangCode		: "Keele kood",
+DlgDocCharSet		: "Märgistiku kodeering",
+DlgDocCharSetCE		: "Kesk-Euroopa",
+DlgDocCharSetCT		: "Hiina traditsiooniline (Big5)",
+DlgDocCharSetCR		: "Kirillisa",
+DlgDocCharSetGR		: "Kreeka",
+DlgDocCharSetJP		: "Jaapani",
+DlgDocCharSetKR		: "Korea",
+DlgDocCharSetTR		: "Türgi",
+DlgDocCharSetUN		: "Unicode (UTF-8)",
+DlgDocCharSetWE		: "Lääne-Euroopa",
+DlgDocCharSetOther	: "Ülejäänud märgistike kodeeringud",
+
+DlgDocDocType		: "Dokumendi tüüppäis",
+DlgDocDocTypeOther	: "Teised dokumendi tüüppäised",
+DlgDocIncXHTML		: "Arva kaasa XHTML deklaratsioonid",
+DlgDocBgColor		: "Taustavärv",
+DlgDocBgImage		: "Taustapildi URL",
+DlgDocBgNoScroll	: "Mittekeritav tagataust",
+DlgDocCText			: "Tekst",
+DlgDocCLink			: "Link",
+DlgDocCVisited		: "Külastatud link",
+DlgDocCActive		: "Aktiivne link",
+DlgDocMargins		: "Lehekülje äärised",
+DlgDocMaTop			: "Ülaserv",
+DlgDocMaLeft		: "Vasakserv",
+DlgDocMaRight		: "Paremserv",
+DlgDocMaBottom		: "Alaserv",
+DlgDocMeIndex		: "Dokumendi võtmesõnad (eraldatud komadega)",
+DlgDocMeDescr		: "Dokumendi kirjeldus",
+DlgDocMeAuthor		: "Autor",
+DlgDocMeCopy		: "Autoriõigus",
+DlgDocPreview		: "Eelvaade",
+
+// Templates Dialog
+Templates			: "Šabloon",
+DlgTemplatesTitle	: "Sisu šabloonid",
+DlgTemplatesSelMsg	: "Palun vali šabloon, et avada see redaktoris<br />(praegune sisu läheb kaotsi):",
+DlgTemplatesLoading	: "Laen šabloonide nimekirja. Palun oota...",
+DlgTemplatesNoTpl	: "(Ühtegi šablooni ei ole defineeritud)",
+DlgTemplatesReplace	: "Asenda tegelik sisu",
+
+// About Dialog
+DlgAboutAboutTab	: "Teave",
+DlgAboutBrowserInfoTab	: "Veebisirvija info",
+DlgAboutLicenseTab	: "Litsents",
+DlgAboutVersion		: "versioon",
+DlgAboutInfo		: "Täpsema info saamiseks mine"
+};
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/eu.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/eu.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/eu.js	(revision 1280)
@@ -0,0 +1,517 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Basque language file.
+ * Euskara hizkuntza fitxategia.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Estutu Tresna Barra",
+ToolbarExpand		: "Hedatu Tresna Barra",
+
+// Toolbar Items and Context Menu
+Save				: "Gorde",
+NewPage				: "Orrialde Berria",
+Preview				: "Aurrebista",
+Cut					: "Ebaki",
+Copy				: "Kopiatu",
+Paste				: "Itsatsi",
+PasteText			: "Itsatsi testu bezala",
+PasteWord			: "Itsatsi Word-etik",
+Print				: "Inprimatu",
+SelectAll			: "Hautatu dena",
+RemoveFormat		: "Kendu Formatoa",
+InsertLinkLbl		: "Esteka",
+InsertLink			: "Txertatu/Editatu Esteka",
+RemoveLink			: "Kendu Esteka",
+Anchor				: "Aingura",
+AnchorDelete		: "Remove Anchor",	//MISSING
+InsertImageLbl		: "Irudia",
+InsertImage			: "Txertatu/Editatu Irudia",
+InsertFlashLbl		: "Flasha",
+InsertFlash			: "Txertatu/Editatu Flasha",
+InsertTableLbl		: "Taula",
+InsertTable			: "Txertatu/Editatu Taula",
+InsertLineLbl		: "Lerroa",
+InsertLine			: "Txertatu Marra Horizontala",
+InsertSpecialCharLbl: "Karaktere Berezia",
+InsertSpecialChar	: "Txertatu Karaktere Berezia",
+InsertSmileyLbl		: "Aurpegierak",
+InsertSmiley		: "Txertatu Aurpegierak",
+About				: "FCKeditor-ri buruz",
+Bold				: "Lodia",
+Italic				: "Etzana",
+Underline			: "Azpimarratu",
+StrikeThrough		: "Marratua",
+Subscript			: "Azpi-indize",
+Superscript			: "Goi-indize",
+LeftJustify			: "Lerrokatu Ezkerrean",
+CenterJustify		: "Lerrokatu Erdian",
+RightJustify		: "Lerrokatu Eskuman",
+BlockJustify		: "Justifikatu",
+DecreaseIndent		: "Txikitu Koska",
+IncreaseIndent		: "Handitu Koska",
+Blockquote			: "Blockquote",	//MISSING
+Undo				: "Desegin",
+Redo				: "Berregin",
+NumberedListLbl		: "Zenbakidun Zerrenda",
+NumberedList		: "Txertatu/Kendu Zenbakidun zerrenda",
+BulletedListLbl		: "Buletdun Zerrenda",
+BulletedList		: "Txertatu/Kendu Buletdun zerrenda",
+ShowTableBorders	: "Erakutsi Taularen Ertzak",
+ShowDetails			: "Erakutsi Xehetasunak",
+Style				: "Estiloa",
+FontFormat			: "Formatoa",
+Font				: "Letra-tipoa",
+FontSize			: "Tamaina",
+TextColor			: "Testu Kolorea",
+BGColor				: "Atzeko kolorea",
+Source				: "HTML Iturburua",
+Find				: "Bilatu",
+Replace				: "Ordezkatu",
+SpellCheck			: "Ortografia",
+UniversalKeyboard	: "Teklatu Unibertsala",
+PageBreakLbl		: "Orrialde-jauzia",
+PageBreak			: "Txertatu Orrialde-jauzia",
+
+Form			: "Formularioa",
+Checkbox		: "Kontrol-laukia",
+RadioButton		: "Aukera-botoia",
+TextField		: "Testu Eremua",
+Textarea		: "Testu-area",
+HiddenField		: "Ezkutuko Eremua",
+Button			: "Botoia",
+SelectionField	: "Hautespen Eremua",
+ImageButton		: "Irudi Botoia",
+
+FitWindow		: "Maximizatu editorearen tamaina",
+ShowBlocks		: "Show Blocks",	//MISSING
+
+// Context Menu
+EditLink			: "Aldatu Esteka",
+CellCM				: "Gelaxka",
+RowCM				: "Errenkada",
+ColumnCM			: "Zutabea",
+InsertRowAfter		: "Insert Row After",	//MISSING
+InsertRowBefore		: "Insert Row Before",	//MISSING
+DeleteRows			: "Ezabatu Errenkadak",
+InsertColumnAfter	: "Insert Column After",	//MISSING
+InsertColumnBefore	: "Insert Column Before",	//MISSING
+DeleteColumns		: "Ezabatu Zutabeak",
+InsertCellAfter		: "Insert Cell After",	//MISSING
+InsertCellBefore	: "Insert Cell Before",	//MISSING
+DeleteCells			: "Kendu Gelaxkak",
+MergeCells			: "Batu Gelaxkak",
+MergeRight			: "Merge Right",	//MISSING
+MergeDown			: "Merge Down",	//MISSING
+HorizontalSplitCell	: "Split Cell Horizontally",	//MISSING
+VerticalSplitCell	: "Split Cell Vertically",	//MISSING
+TableDelete			: "Ezabatu Taula",
+CellProperties		: "Gelaxkaren Ezaugarriak",
+TableProperties		: "Taularen Ezaugarriak",
+ImageProperties		: "Irudiaren Ezaugarriak",
+FlashProperties		: "Flasharen Ezaugarriak",
+
+AnchorProp			: "Ainguraren Ezaugarriak",
+ButtonProp			: "Botoiaren Ezaugarriak",
+CheckboxProp		: "Kontrol-laukiko Ezaugarriak",
+HiddenFieldProp		: "Ezkutuko Eremuaren Ezaugarriak",
+RadioButtonProp		: "Aukera-botoiaren Ezaugarriak",
+ImageButtonProp		: "Irudi Botoiaren Ezaugarriak",
+TextFieldProp		: "Testu Eremuaren Ezaugarriak",
+SelectionFieldProp	: "Hautespen Eremuaren Ezaugarriak",
+TextareaProp		: "Testu-arearen Ezaugarriak",
+FormProp			: "Formularioaren Ezaugarriak",
+
+FontFormats			: "Arrunta;Formateatua;Helbidea;Izenburua 1;Izenburua 2;Izenburua 3;Izenburua 4;Izenburua 5;Izenburua 6;Paragrafoa (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "XHTML Prozesatzen. Itxaron mesedez...",
+Done				: "Eginda",
+PasteWordConfirm	: "Itsatsi nahi duzun textua Wordetik hartua dela dirudi. Itsatsi baino lehen garbitu nahi duzu?",
+NotCompatiblePaste	: "Komando hau Internet Explorer 5.5 bertsiorako edo ondorengoentzako erabilgarria dago. Garbitu gabe itsatsi nahi duzu?",
+UnknownToolbarItem	: "Ataza barrako elementu ezezaguna \"%1\"",
+UnknownCommand		: "Komando izen ezezaguna \"%1\"",
+NotImplemented		: "Komando ez inplementatua",
+UnknownToolbarSet	: "Ataza barra \"%1\" taldea ez da existitzen",
+NoActiveX			: "Zure nabigatzailearen segustasun hobespenak editore honen zenbait ezaugarri mugatu ditzake. \"ActiveX kontrolak eta plug-inak\" aktibatu beharko zenituzke, bestela erroreak eta ezaugarrietan mugak egon daitezke.",
+BrowseServerBlocked : "Baliabideen arakatzailea ezin da ireki. Ziurtatu popup blokeatzaileak desgaituta dituzula.",
+DialogBlocked		: "Ezin da elkarrizketa-leihoa ireki. Ziurtatu popup blokeatzaileak desgaituta dituzula.",
+
+// Dialogs
+DlgBtnOK			: "Ados",
+DlgBtnCancel		: "Utzi",
+DlgBtnClose			: "Itxi",
+DlgBtnBrowseServer	: "Zerbitzaria arakatu",
+DlgAdvancedTag		: "Aurreratua",
+DlgOpOther			: "<Bestelakoak>",
+DlgInfoTab			: "Informazioa",
+DlgAlertUrl			: "Mesedez URLa idatzi ezazu",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<Ezarri gabe>",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Hizkuntzaren Norabidea",
+DlgGenLangDirLtr	: "Ezkerretik Eskumara(LTR)",
+DlgGenLangDirRtl	: "Eskumatik Ezkerrera (RTL)",
+DlgGenLangCode		: "Hizkuntza Kodea",
+DlgGenAccessKey		: "Sarbide-gakoa",
+DlgGenName			: "Izena",
+DlgGenTabIndex		: "Tabulazio Indizea",
+DlgGenLongDescr		: "URL Deskribapen Luzea",
+DlgGenClass			: "Estilo-orriko Klaseak",
+DlgGenTitle			: "Izenburua",
+DlgGenContType		: "Eduki Mota (Content Type)",
+DlgGenLinkCharset	: "Estekatutako Karaktere Multzoa",
+DlgGenStyle			: "Estiloa",
+
+// Image Dialog
+DlgImgTitle			: "Irudi Ezaugarriak",
+DlgImgInfoTab		: "Irudi informazioa",
+DlgImgBtnUpload		: "Zerbitzarira bidalia",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Gora Kargatu",
+DlgImgAlt			: "Textu Alternatiboa",
+DlgImgWidth			: "Zabalera",
+DlgImgHeight		: "Altuera",
+DlgImgLockRatio		: "Erlazioa Blokeatu",
+DlgBtnResetSize		: "Tamaina Berrezarri",
+DlgImgBorder		: "Ertza",
+DlgImgHSpace		: "HSpace",
+DlgImgVSpace		: "VSpace",
+DlgImgAlign			: "Lerrokatu",
+DlgImgAlignLeft		: "Ezkerrera",
+DlgImgAlignAbsBottom: "Abs Behean",
+DlgImgAlignAbsMiddle: "Abs Erdian",
+DlgImgAlignBaseline	: "Oinan",
+DlgImgAlignBottom	: "Behean",
+DlgImgAlignMiddle	: "Erdian",
+DlgImgAlignRight	: "Eskuman",
+DlgImgAlignTextTop	: "Testua Goian",
+DlgImgAlignTop		: "Goian",
+DlgImgPreview		: "Aurrebista",
+DlgImgAlertUrl		: "Mesedez Irudiaren URLa idatzi",
+DlgImgLinkTab		: "Esteka",
+
+// Flash Dialog
+DlgFlashTitle		: "Flasharen Ezaugarriak",
+DlgFlashChkPlay		: "Automatikoki Erreproduzitu",
+DlgFlashChkLoop		: "Begizta",
+DlgFlashChkMenu		: "Flasharen Menua Gaitu",
+DlgFlashScale		: "Eskalatu",
+DlgFlashScaleAll	: "Dena erakutsi",
+DlgFlashScaleNoBorder	: "Ertzarik gabe",
+DlgFlashScaleFit	: "Doitu",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Esteka",
+DlgLnkInfoTab		: "Estekaren Informazioa",
+DlgLnkTargetTab		: "Helburua",
+
+DlgLnkType			: "Esteka Mota",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Aingura horrialde honentan",
+DlgLnkTypeEMail		: "ePosta",
+DlgLnkProto			: "Protokoloa",
+DlgLnkProtoOther	: "<Beste batzuk>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Aingura bat hautatu",
+DlgLnkAnchorByName	: "Aingura izenagatik",
+DlgLnkAnchorById	: "Elementuaren ID-gatik",
+DlgLnkNoAnchors		: "(Ez daude aingurak eskuragarri dokumentuan)",
+DlgLnkEMail			: "ePosta Helbidea",
+DlgLnkEMailSubject	: "Mezuaren Gaia",
+DlgLnkEMailBody		: "Mezuaren Gorputza",
+DlgLnkUpload		: "Gora kargatu",
+DlgLnkBtnUpload		: "Zerbitzarira bidali",
+
+DlgLnkTarget		: "Target (Helburua)",
+DlgLnkTargetFrame	: "<marko>",
+DlgLnkTargetPopup	: "<popup lehioa>",
+DlgLnkTargetBlank	: "Lehio Berria (_blank)",
+DlgLnkTargetParent	: "Lehio Gurasoa (_parent)",
+DlgLnkTargetSelf	: "Lehio Berdina (_self)",
+DlgLnkTargetTop		: "Goiko Lehioa (_top)",
+DlgLnkTargetFrameName	: "Marko Helburuaren Izena",
+DlgLnkPopWinName	: "Popup Lehioaren Izena",
+DlgLnkPopWinFeat	: "Popup Lehioaren Ezaugarriak",
+DlgLnkPopResize		: "Tamaina Aldakorra",
+DlgLnkPopLocation	: "Kokaleku Barra",
+DlgLnkPopMenu		: "Menu Barra",
+DlgLnkPopScroll		: "Korritze Barrak",
+DlgLnkPopStatus		: "Egoera Barra",
+DlgLnkPopToolbar	: "Tresna Barra",
+DlgLnkPopFullScrn	: "Pantaila Osoa (IE)",
+DlgLnkPopDependent	: "Menpekoa (Netscape)",
+DlgLnkPopWidth		: "Zabalera",
+DlgLnkPopHeight		: "Altuera",
+DlgLnkPopLeft		: "Ezkerreko  Posizioa",
+DlgLnkPopTop		: "Goiko Posizioa",
+
+DlnLnkMsgNoUrl		: "Mesedez URL esteka idatzi",
+DlnLnkMsgNoEMail	: "Mesedez ePosta helbidea idatzi",
+DlnLnkMsgNoAnchor	: "Mesedez aingura bat aukeratu",
+DlnLnkMsgInvPopName	: "The popup name must begin with an alphabetic character and must not contain spaces",	//MISSING
+
+// Color Dialog
+DlgColorTitle		: "Kolore Aukeraketa",
+DlgColorBtnClear	: "Garbitu",
+DlgColorHighlight	: "Nabarmendu",
+DlgColorSelected	: "Aukeratuta",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Aurpegiera Sartu",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Karaktere Berezia Aukeratu",
+
+// Table Dialog
+DlgTableTitle		: "Taularen Ezaugarriak",
+DlgTableRows		: "Lerroak",
+DlgTableColumns		: "Zutabeak",
+DlgTableBorder		: "Ertzaren Zabalera",
+DlgTableAlign		: "Lerrokatu",
+DlgTableAlignNotSet	: "<Ezarri gabe>",
+DlgTableAlignLeft	: "Ezkerrean",
+DlgTableAlignCenter	: "Erdian",
+DlgTableAlignRight	: "Eskuman",
+DlgTableWidth		: "Zabalera",
+DlgTableWidthPx		: "pixel",
+DlgTableWidthPc		: "ehuneko",
+DlgTableHeight		: "Altuera",
+DlgTableCellSpace	: "Gelaxka arteko tartea",
+DlgTableCellPad		: "Gelaxken betegarria",
+DlgTableCaption		: "Epigrafea",
+DlgTableSummary		: "Laburpena",
+
+// Table Cell Dialog
+DlgCellTitle		: "Gelaxken Ezaugarriak",
+DlgCellWidth		: "Zabalera",
+DlgCellWidthPx		: "pixel",
+DlgCellWidthPc		: "ehuneko",
+DlgCellHeight		: "Altuera",
+DlgCellWordWrap		: "Itzulbira",
+DlgCellWordWrapNotSet	: "<Ezarri gabe>",
+DlgCellWordWrapYes	: "Bai",
+DlgCellWordWrapNo	: "Ez",
+DlgCellHorAlign		: "Horizontal Alignment",
+DlgCellHorAlignNotSet	: "<Ezarri gabe>",
+DlgCellHorAlignLeft	: "Ezkerrean",
+DlgCellHorAlignCenter	: "Erdian",
+DlgCellHorAlignRight: "Eskuman",
+DlgCellVerAlign		: "Lerrokatu Bertikalki",
+DlgCellVerAlignNotSet	: "<Ezarri gabe>",
+DlgCellVerAlignTop	: "Goian",
+DlgCellVerAlignMiddle	: "Erdian",
+DlgCellVerAlignBottom	: "Behean",
+DlgCellVerAlignBaseline	: "Oinan",
+DlgCellRowSpan		: "Lerroak Hedatu",
+DlgCellCollSpan		: "Zutabeak Hedatu",
+DlgCellBackColor	: "Atzeko Kolorea",
+DlgCellBorderColor	: "Ertzako Kolorea",
+DlgCellBtnSelect	: "Aukertau...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Find and Replace",	//MISSING
+
+// Find Dialog
+DlgFindTitle		: "Bilaketa",
+DlgFindFindBtn		: "Bilatu",
+DlgFindNotFoundMsg	: "Idatzitako testua ez da topatu.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Ordeztu",
+DlgReplaceFindLbl		: "Zer bilatu:",
+DlgReplaceReplaceLbl	: "Zerekin ordeztu:",
+DlgReplaceCaseChk		: "Maiuskula/minuskula",
+DlgReplaceReplaceBtn	: "Ordeztu",
+DlgReplaceReplAllBtn	: "Ordeztu Guztiak",
+DlgReplaceWordChk		: "Esaldi osoa bilatu",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "Zure web nabigatzailearen segurtasun ezarpenak testuak automatikoki moztea ez dute baimentzen. Mesedez teklatua erabili ezazu (Ctrl+X).",
+PasteErrorCopy	: "Zure web nabigatzailearen segurtasun ezarpenak testuak automatikoki kopiatzea ez dute baimentzen. Mesedez teklatua erabili ezazu (Ctrl+C).",
+
+PasteAsText		: "Testu Arrunta bezala Itsatsi",
+PasteFromWord	: "Word-etik itsatsi",
+
+DlgPasteMsg2	: "Mesedez teklatua erabilita (<STRONG>Ctrl+V</STRONG>) ondorego eremuan testua itsatsi eta <STRONG>OK</STRONG> sakatu.",
+DlgPasteSec		: "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.",	//MISSING
+DlgPasteIgnoreFont		: "Letra Motaren definizioa ezikusi",
+DlgPasteRemoveStyles	: "Estilo definizioak kendu",
+DlgPasteCleanBox		: "Testu-eremua Garbitu",
+
+// Color Picker
+ColorAutomatic	: "Automatikoa",
+ColorMoreColors	: "Kolore gehiago...",
+
+// Document Properties
+DocProps		: "Dokumentuaren Ezarpenak",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Ainguraren Ezaugarriak",
+DlgAnchorName		: "Ainguraren Izena",
+DlgAnchorErrorName	: "Idatzi ainguraren izena",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Ez dago hiztegian",
+DlgSpellChangeTo		: "Honekin ordezkatu",
+DlgSpellBtnIgnore		: "Ezikusi",
+DlgSpellBtnIgnoreAll	: "Denak Ezikusi",
+DlgSpellBtnReplace		: "Ordezkatu",
+DlgSpellBtnReplaceAll	: "Denak Ordezkatu",
+DlgSpellBtnUndo			: "Desegin",
+DlgSpellNoSuggestions	: "- Iradokizunik ez -",
+DlgSpellProgress		: "Zuzenketa ortografikoa martxan...",
+DlgSpellNoMispell		: "Zuzenketa ortografikoa bukatuta: Akatsik ez",
+DlgSpellNoChanges		: "Zuzenketa ortografikoa bukatuta: Ez da ezer aldatu",
+DlgSpellOneChange		: "Zuzenketa ortografikoa bukatuta: Hitz bat aldatu da",
+DlgSpellManyChanges		: "Zuzenketa ortografikoa bukatuta: %1 hitz aldatu dira",
+
+IeSpellDownload			: "Zuzentzaile ortografikoa ez dago instalatuta. Deskargatu nahi duzu?",
+
+// Button Dialog
+DlgButtonText		: "Testua (Balorea)",
+DlgButtonType		: "Mota",
+DlgButtonTypeBtn	: "Button",	//MISSING
+DlgButtonTypeSbm	: "Submit",	//MISSING
+DlgButtonTypeRst	: "Reset",	//MISSING
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Izena",
+DlgCheckboxValue	: "Balorea",
+DlgCheckboxSelected	: "Hautatuta",
+
+// Form Dialog
+DlgFormName		: "Izena",
+DlgFormAction	: "Ekintza",
+DlgFormMethod	: "Method",
+
+// Select Field Dialog
+DlgSelectName		: "Izena",
+DlgSelectValue		: "Balorea",
+DlgSelectSize		: "Tamaina",
+DlgSelectLines		: "lerro kopurura",
+DlgSelectChkMulti	: "Hautaketa anitzak baimendu",
+DlgSelectOpAvail	: "Aukera Eskuragarriak",
+DlgSelectOpText		: "Testua",
+DlgSelectOpValue	: "Balorea",
+DlgSelectBtnAdd		: "Gehitu",
+DlgSelectBtnModify	: "Aldatu",
+DlgSelectBtnUp		: "Gora",
+DlgSelectBtnDown	: "Behera",
+DlgSelectBtnSetValue : "Aukeratutako balorea ezarri",
+DlgSelectBtnDelete	: "Ezabatu",
+
+// Textarea Dialog
+DlgTextareaName	: "Izena",
+DlgTextareaCols	: "Zutabeak",
+DlgTextareaRows	: "Lerroak",
+
+// Text Field Dialog
+DlgTextName			: "Izena",
+DlgTextValue		: "Balorea",
+DlgTextCharWidth	: "Zabalera",
+DlgTextMaxChars		: "Zenbat karaktere gehienez",
+DlgTextType			: "Mota",
+DlgTextTypeText		: "Testua",
+DlgTextTypePass		: "Pasahitza",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Izena",
+DlgHiddenValue	: "Balorea",
+
+// Bulleted List Dialog
+BulletedListProp	: "Buletdun Zerrendaren Ezarpenak",
+NumberedListProp	: "Zenbakidun Zerrendaren Ezarpenak",
+DlgLstStart			: "Start",	//MISSING
+DlgLstType			: "Mota",
+DlgLstTypeCircle	: "Zirkulua",
+DlgLstTypeDisc		: "Diskoa",
+DlgLstTypeSquare	: "Karratua",
+DlgLstTypeNumbers	: "Zenbakiak (1, 2, 3)",
+DlgLstTypeLCase		: "Letra xeheak (a, b, c)",
+DlgLstTypeUCase		: "Letra larriak (A, B, C)",
+DlgLstTypeSRoman	: "Erromatar zenbaki zeheak (i, ii, iii)",
+DlgLstTypeLRoman	: "Erromatar zenbaki larriak (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Orokorra",
+DlgDocBackTab		: "Atzekaldea",
+DlgDocColorsTab		: "Koloreak eta Marjinak",
+DlgDocMetaTab		: "Meta Informazioa",
+
+DlgDocPageTitle		: "Orriaren Izenburua",
+DlgDocLangDir		: "Hizkuntzaren Norabidea",
+DlgDocLangDirLTR	: "Ezkerretik eskumara (LTR)",
+DlgDocLangDirRTL	: "Eskumatik ezkerrera (RTL)",
+DlgDocLangCode		: "Hizkuntzaren Kodea",
+DlgDocCharSet		: "Karaktere Multzoaren Kodeketa",
+DlgDocCharSetCE		: "Central European",	//MISSING
+DlgDocCharSetCT		: "Chinese Traditional (Big5)",	//MISSING
+DlgDocCharSetCR		: "Cyrillic",	//MISSING
+DlgDocCharSetGR		: "Greek",	//MISSING
+DlgDocCharSetJP		: "Japanese",	//MISSING
+DlgDocCharSetKR		: "Korean",	//MISSING
+DlgDocCharSetTR		: "Turkish",	//MISSING
+DlgDocCharSetUN		: "Unicode (UTF-8)",	//MISSING
+DlgDocCharSetWE		: "Western European",	//MISSING
+DlgDocCharSetOther	: "Beste Karaktere Multzoaren Kodeketa",
+
+DlgDocDocType		: "Document Type Goiburua",
+DlgDocDocTypeOther	: "Beste Document Type Goiburua",
+DlgDocIncXHTML		: "XHTML Ezarpenak",
+DlgDocBgColor		: "Atzeko Kolorea",
+DlgDocBgImage		: "Atzeko Irudiaren URL-a",
+DlgDocBgNoScroll	: "Korritze gabeko Atzekaldea",
+DlgDocCText			: "Testua",
+DlgDocCLink			: "Estekak",
+DlgDocCVisited		: "Bisitatutako Estekak",
+DlgDocCActive		: "Esteka Aktiboa",
+DlgDocMargins		: "Orrialdearen marjinak",
+DlgDocMaTop			: "Goian",
+DlgDocMaLeft		: "Ezkerrean",
+DlgDocMaRight		: "Eskuman",
+DlgDocMaBottom		: "Behean",
+DlgDocMeIndex		: "Dokumentuaren Gako-hitzak (komarekin bananduta)",
+DlgDocMeDescr		: "Dokumentuaren Deskribapena",
+DlgDocMeAuthor		: "Egilea",
+DlgDocMeCopy		: "Copyright",
+DlgDocPreview		: "Aurrebista",
+
+// Templates Dialog
+Templates			: "Txantiloiak",
+DlgTemplatesTitle	: "Eduki Txantiloiak",
+DlgTemplatesSelMsg	: "Mesedez txantiloia aukeratu editorean kargatzeko<br>(orain dauden edukiak galduko dira):",
+DlgTemplatesLoading	: "Txantiloiak kargatzen. Itxaron mesedez...",
+DlgTemplatesNoTpl	: "(Ez dago definitutako txantiloirik)",
+DlgTemplatesReplace	: "Replace actual contents",	//MISSING
+
+// About Dialog
+DlgAboutAboutTab	: "Honi buruz",
+DlgAboutBrowserInfoTab	: "Nabigatzailearen Informazioa",
+DlgAboutLicenseTab	: "Lizentzia",
+DlgAboutVersion		: "bertsioa",
+DlgAboutInfo		: "Informazio gehiago eskuratzeko hona joan"
+};
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/fa.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/fa.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/fa.js	(revision 1280)
@@ -0,0 +1,516 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Persian language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "rtl",
+
+ToolbarCollapse		: "برچیدن نوارابزار",
+ToolbarExpand		: "گستردن نوارابزار",
+
+// Toolbar Items and Context Menu
+Save				: "ذخیره",
+NewPage				: "برگهٴ تازه",
+Preview				: "پیش‌نمایش",
+Cut					: "برش",
+Copy				: "کپی",
+Paste				: "چسباندن",
+PasteText			: "چسباندن به عنوان متن ِساده",
+PasteWord			: "چسباندن از Word",
+Print				: "چاپ",
+SelectAll			: "گزینش همه",
+RemoveFormat		: "برداشتن فرمت",
+InsertLinkLbl		: "پیوند",
+InsertLink			: "گنجاندن/ویرایش ِپیوند",
+RemoveLink			: "برداشتن پیوند",
+Anchor				: "گنجاندن/ویرایش ِلنگر",
+AnchorDelete		: "Remove Anchor",	//MISSING
+InsertImageLbl		: "تصویر",
+InsertImage			: "گنجاندن/ویرایش ِتصویر",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "گنجاندن/ویرایش ِFlash",
+InsertTableLbl		: "جدول",
+InsertTable			: "گنجاندن/ویرایش ِجدول",
+InsertLineLbl		: "خط",
+InsertLine			: "گنجاندن خط ِافقی",
+InsertSpecialCharLbl: "نویسهٴ ویژه",
+InsertSpecialChar	: "گنجاندن نویسهٴ ویژه",
+InsertSmileyLbl		: "خندانک",
+InsertSmiley		: "گنجاندن خندانک",
+About				: "دربارهٴ FCKeditor",
+Bold				: "درشت",
+Italic				: "خمیده",
+Underline			: "خط‌زیردار",
+StrikeThrough		: "میان‌خط",
+Subscript			: "زیرنویس",
+Superscript			: "بالانویس",
+LeftJustify			: "چپ‌چین",
+CenterJustify		: "میان‌چین",
+RightJustify		: "راست‌چین",
+BlockJustify		: "بلوک‌چین",
+DecreaseIndent		: "کاهش تورفتگی",
+IncreaseIndent		: "افزایش تورفتگی",
+Blockquote			: "Blockquote",	//MISSING
+Undo				: "واچیدن",
+Redo				: "بازچیدن",
+NumberedListLbl		: "فهرست شماره‌دار",
+NumberedList		: "گنجاندن/برداشتن فهرست شماره‌دار",
+BulletedListLbl		: "فهرست نقطه‌ای",
+BulletedList		: "گنجاندن/برداشتن فهرست نقطه‌ای",
+ShowTableBorders	: "نمایش لبهٴ جدول",
+ShowDetails			: "نمایش جزئیات",
+Style				: "سبک",
+FontFormat			: "فرمت",
+Font				: "قلم",
+FontSize			: "اندازه",
+TextColor			: "رنگ متن",
+BGColor				: "رنگ پس‌زمینه",
+Source				: "منبع",
+Find				: "جستجو",
+Replace				: "جایگزینی",
+SpellCheck			: "بررسی املا",
+UniversalKeyboard	: "صفحه‌کلید جهانی",
+PageBreakLbl		: "شکستگی ِپایان ِبرگه",
+PageBreak			: "گنجاندن شکستگی ِپایان ِبرگه",
+
+Form			: "فرم",
+Checkbox		: "خانهٴ گزینه‌ای",
+RadioButton		: "دکمهٴ رادیویی",
+TextField		: "فیلد متنی",
+Textarea		: "ناحیهٴ متنی",
+HiddenField		: "فیلد پنهان",
+Button			: "دکمه",
+SelectionField	: "فیلد چندگزینه‌ای",
+ImageButton		: "دکمهٴ تصویری",
+
+FitWindow		: "بیشینه‌سازی ِاندازهٴ ویرایشگر",
+ShowBlocks		: "Show Blocks",	//MISSING
+
+// Context Menu
+EditLink			: "ویرایش پیوند",
+CellCM				: "سلول",
+RowCM				: "سطر",
+ColumnCM			: "ستون",
+InsertRowAfter		: "Insert Row After",	//MISSING
+InsertRowBefore		: "Insert Row Before",	//MISSING
+DeleteRows			: "حذف سطرها",
+InsertColumnAfter	: "Insert Column After",	//MISSING
+InsertColumnBefore	: "Insert Column Before",	//MISSING
+DeleteColumns		: "حذف ستونها",
+InsertCellAfter		: "Insert Cell After",	//MISSING
+InsertCellBefore	: "Insert Cell Before",	//MISSING
+DeleteCells			: "حذف سلولها",
+MergeCells			: "ادغام سلولها",
+MergeRight			: "Merge Right",	//MISSING
+MergeDown			: "Merge Down",	//MISSING
+HorizontalSplitCell	: "Split Cell Horizontally",	//MISSING
+VerticalSplitCell	: "Split Cell Vertically",	//MISSING
+TableDelete			: "پاک‌کردن جدول",
+CellProperties		: "ویژگیهای سلول",
+TableProperties		: "ویژگیهای جدول",
+ImageProperties		: "ویژگیهای تصویر",
+FlashProperties		: "ویژگیهای Flash",
+
+AnchorProp			: "ویژگیهای لنگر",
+ButtonProp			: "ویژگیهای دکمه",
+CheckboxProp		: "ویژگیهای خانهٴ گزینه‌ای",
+HiddenFieldProp		: "ویژگیهای فیلد پنهان",
+RadioButtonProp		: "ویژگیهای دکمهٴ رادیویی",
+ImageButtonProp		: "ویژگیهای دکمهٴ تصویری",
+TextFieldProp		: "ویژگیهای فیلد متنی",
+SelectionFieldProp	: "ویژگیهای فیلد چندگزینه‌ای",
+TextareaProp		: "ویژگیهای ناحیهٴ متنی",
+FormProp			: "ویژگیهای فرم",
+
+FontFormats			: "نرمال;فرمت‌شده;آدرس;سرنویس 1;سرنویس 2;سرنویس 3;سرنویس 4;سرنویس 5;سرنویس 6;بند;(DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "پردازش XHTML. لطفا صبر کنید...",
+Done				: "انجام شد",
+PasteWordConfirm	: "متنی که می‌خواهید بچسبانید به نظر می‌رسد از Word کپی شده است. آیا می‌خواهید قبل از چسباندن آن را پاک‌سازی کنید؟",
+NotCompatiblePaste	: "این فرمان برای مرورگر Internet Explorer از نگارش 5.5 یا بالاتر در دسترس است. آیا می‌خواهید بدون پاک‌سازی، متن را بچسبانید؟",
+UnknownToolbarItem	: "فقرهٴ نوارابزار ناشناخته \"%1\"",
+UnknownCommand		: "نام دستور ناشناخته \"%1\"",
+NotImplemented		: "دستور پیاده‌سازی‌نشده",
+UnknownToolbarSet	: "مجموعهٴ نوارابزار \"%1\" وجود ندارد",
+NoActiveX			: "تنظیمات امنیتی مرورگر شما ممکن است در بعضی از ویژگیهای مرورگر محدودیت ایجاد کند. شما باید گزینهٴ \"Run ActiveX controls and plug-ins\" را فعال کنید. ممکن است شما با خطاهایی روبرو باشید و متوجه کمبود ویژگیهایی شوید.",
+BrowseServerBlocked : "توانایی بازگشایی مرورگر منابع فراهم نیست. اطمینان حاصل کنید که تمامی برنامه‌های پیشگیری از نمایش popup را از کار بازداشته‌اید.",
+DialogBlocked		: "توانایی بازگشایی پنجرهٴ کوچک ِگفتگو فراهم نیست. اطمینان حاصل کنید که تمامی برنامه‌های پیشگیری از نمایش popup را از کار بازداشته‌اید.",
+
+// Dialogs
+DlgBtnOK			: "پذیرش",
+DlgBtnCancel		: "انصراف",
+DlgBtnClose			: "بستن",
+DlgBtnBrowseServer	: "فهرست‌نمایی سرور",
+DlgAdvancedTag		: "پیشرفته",
+DlgOpOther			: "<غیره>",
+DlgInfoTab			: "اطلاعات",
+DlgAlertUrl			: "لطفاً URL را بنویسید",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<تعین‌نشده>",
+DlgGenId			: "شناسه",
+DlgGenLangDir		: "جهت‌نمای زبان",
+DlgGenLangDirLtr	: "چپ به راست (LTR)",
+DlgGenLangDirRtl	: "راست به چپ (RTL)",
+DlgGenLangCode		: "کد زبان",
+DlgGenAccessKey		: "کلید دستیابی",
+DlgGenName			: "نام",
+DlgGenTabIndex		: "نمایهٴ دسترسی با Tab",
+DlgGenLongDescr		: "URL توصیف طولانی",
+DlgGenClass			: "کلاسهای شیوه‌نامه(Stylesheet)",
+DlgGenTitle			: "عنوان کمکی",
+DlgGenContType		: "نوع محتوای کمکی",
+DlgGenLinkCharset	: "نویسه‌گان منبع ِپیوندشده",
+DlgGenStyle			: "شیوه(style)",
+
+// Image Dialog
+DlgImgTitle			: "ویژگیهای تصویر",
+DlgImgInfoTab		: "اطلاعات تصویر",
+DlgImgBtnUpload		: "به سرور بفرست",
+DlgImgURL			: "URL",
+DlgImgUpload		: "انتقال به سرور",
+DlgImgAlt			: "متن جایگزین",
+DlgImgWidth			: "پهنا",
+DlgImgHeight		: "درازا",
+DlgImgLockRatio		: "قفل‌کردن ِنسبت",
+DlgBtnResetSize		: "بازنشانی اندازه",
+DlgImgBorder		: "لبه",
+DlgImgHSpace		: "فاصلهٴ افقی",
+DlgImgVSpace		: "فاصلهٴ عمودی",
+DlgImgAlign			: "چینش",
+DlgImgAlignLeft		: "چپ",
+DlgImgAlignAbsBottom: "پائین مطلق",
+DlgImgAlignAbsMiddle: "وسط مطلق",
+DlgImgAlignBaseline	: "خط‌پایه",
+DlgImgAlignBottom	: "پائین",
+DlgImgAlignMiddle	: "وسط",
+DlgImgAlignRight	: "راست",
+DlgImgAlignTextTop	: "متن بالا",
+DlgImgAlignTop		: "بالا",
+DlgImgPreview		: "پیش‌نمایش",
+DlgImgAlertUrl		: "لطفا URL تصویر را بنویسید",
+DlgImgLinkTab		: "پیوند",
+
+// Flash Dialog
+DlgFlashTitle		: "ویژگیهای Flash",
+DlgFlashChkPlay		: "آغاز ِخودکار",
+DlgFlashChkLoop		: "اجرای پیاپی",
+DlgFlashChkMenu		: "دردسترس‌بودن منوی Flash",
+DlgFlashScale		: "مقیاس",
+DlgFlashScaleAll	: "نمایش همه",
+DlgFlashScaleNoBorder	: "بدون کران",
+DlgFlashScaleFit	: "جایگیری کامل",
+
+// Link Dialog
+DlgLnkWindowTitle	: "پیوند",
+DlgLnkInfoTab		: "اطلاعات پیوند",
+DlgLnkTargetTab		: "مقصد",
+
+DlgLnkType			: "نوع پیوند",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "لنگر در همین صفحه",
+DlgLnkTypeEMail		: "پست الکترونیکی",
+DlgLnkProto			: "پروتکل",
+DlgLnkProtoOther	: "<دیگر>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "یک لنگر برگزینید",
+DlgLnkAnchorByName	: "با نام لنگر",
+DlgLnkAnchorById	: "با شناسهٴ المان",
+DlgLnkNoAnchors		: "(در این سند لنگری دردسترس نیست)",
+DlgLnkEMail			: "نشانی پست الکترونیکی",
+DlgLnkEMailSubject	: "موضوع پیام",
+DlgLnkEMailBody		: "متن پیام",
+DlgLnkUpload		: "انتقال به سرور",
+DlgLnkBtnUpload		: "به سرور بفرست",
+
+DlgLnkTarget		: "مقصد",
+DlgLnkTargetFrame	: "<فریم>",
+DlgLnkTargetPopup	: "<پنجرهٴ پاپاپ>",
+DlgLnkTargetBlank	: "پنجرهٴ دیگر (_blank)",
+DlgLnkTargetParent	: "پنجرهٴ والد (_parent)",
+DlgLnkTargetSelf	: "همان پنجره (_self)",
+DlgLnkTargetTop		: "بالاترین پنجره (_top)",
+DlgLnkTargetFrameName	: "نام فریم مقصد",
+DlgLnkPopWinName	: "نام پنجرهٴ پاپاپ",
+DlgLnkPopWinFeat	: "ویژگیهای پنجرهٴ پاپاپ",
+DlgLnkPopResize		: "قابل تغییر اندازه",
+DlgLnkPopLocation	: "نوار موقعیت",
+DlgLnkPopMenu		: "نوار منو",
+DlgLnkPopScroll		: "میله‌های پیمایش",
+DlgLnkPopStatus		: "نوار وضعیت",
+DlgLnkPopToolbar	: "نوارابزار",
+DlgLnkPopFullScrn	: "تمام‌صفحه (IE)",
+DlgLnkPopDependent	: "وابسته (Netscape)",
+DlgLnkPopWidth		: "پهنا",
+DlgLnkPopHeight		: "درازا",
+DlgLnkPopLeft		: "موقعیت ِچپ",
+DlgLnkPopTop		: "موقعیت ِبالا",
+
+DlnLnkMsgNoUrl		: "لطفا URL پیوند را بنویسید",
+DlnLnkMsgNoEMail	: "لطفا نشانی پست الکترونیکی را بنویسید",
+DlnLnkMsgNoAnchor	: "لطفا لنگری را برگزینید",
+DlnLnkMsgInvPopName	: "نام پنجرهٴ پاپاپ باید با یک نویسهٴ الفبایی آغاز گردد و نباید فاصله‌های خالی در آن باشند",
+
+// Color Dialog
+DlgColorTitle		: "گزینش رنگ",
+DlgColorBtnClear	: "پاک‌کردن",
+DlgColorHighlight	: "نمونه",
+DlgColorSelected	: "برگزیده",
+
+// Smiley Dialog
+DlgSmileyTitle		: "گنجاندن خندانک",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "گزینش نویسهٴ‌ویژه",
+
+// Table Dialog
+DlgTableTitle		: "ویژگیهای جدول",
+DlgTableRows		: "سطرها",
+DlgTableColumns		: "ستونها",
+DlgTableBorder		: "اندازهٴ لبه",
+DlgTableAlign		: "چینش",
+DlgTableAlignNotSet	: "<تعین‌نشده>",
+DlgTableAlignLeft	: "چپ",
+DlgTableAlignCenter	: "وسط",
+DlgTableAlignRight	: "راست",
+DlgTableWidth		: "پهنا",
+DlgTableWidthPx		: "پیکسل",
+DlgTableWidthPc		: "درصد",
+DlgTableHeight		: "درازا",
+DlgTableCellSpace	: "فاصلهٴ میان سلولها",
+DlgTableCellPad		: "فاصلهٴ پرشده در سلول",
+DlgTableCaption		: "عنوان",
+DlgTableSummary		: "خلاصه",
+
+// Table Cell Dialog
+DlgCellTitle		: "ویژگیهای سلول",
+DlgCellWidth		: "پهنا",
+DlgCellWidthPx		: "پیکسل",
+DlgCellWidthPc		: "درصد",
+DlgCellHeight		: "درازا",
+DlgCellWordWrap		: "شکستن واژه‌ها",
+DlgCellWordWrapNotSet	: "<تعین‌نشده>",
+DlgCellWordWrapYes	: "بله",
+DlgCellWordWrapNo	: "خیر",
+DlgCellHorAlign		: "چینش ِافقی",
+DlgCellHorAlignNotSet	: "<تعین‌نشده>",
+DlgCellHorAlignLeft	: "چپ",
+DlgCellHorAlignCenter	: "وسط",
+DlgCellHorAlignRight: "راست",
+DlgCellVerAlign		: "چینش ِعمودی",
+DlgCellVerAlignNotSet	: "<تعین‌نشده>",
+DlgCellVerAlignTop	: "بالا",
+DlgCellVerAlignMiddle	: "میان",
+DlgCellVerAlignBottom	: "پائین",
+DlgCellVerAlignBaseline	: "خط‌پایه",
+DlgCellRowSpan		: "گستردگی سطرها",
+DlgCellCollSpan		: "گستردگی ستونها",
+DlgCellBackColor	: "رنگ پس‌زمینه",
+DlgCellBorderColor	: "رنگ لبه",
+DlgCellBtnSelect	: "برگزینید...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Find and Replace",	//MISSING
+
+// Find Dialog
+DlgFindTitle		: "یافتن",
+DlgFindFindBtn		: "یافتن",
+DlgFindNotFoundMsg	: "متن موردنظر یافت نشد.",
+
+// Replace Dialog
+DlgReplaceTitle			: "جایگزینی",
+DlgReplaceFindLbl		: "چه‌چیز را می‌یابید:",
+DlgReplaceReplaceLbl	: "جایگزینی با:",
+DlgReplaceCaseChk		: "همسانی در بزرگی و کوچکی نویسه‌ها",
+DlgReplaceReplaceBtn	: "جایگزینی",
+DlgReplaceReplAllBtn	: "جایگزینی همهٴ یافته‌ها",
+DlgReplaceWordChk		: "همسانی با واژهٴ کامل",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "تنظیمات امنیتی مرورگر شما اجازه نمی‌دهد که ویرایشگر به طور خودکار عملکردهای برش را انجام دهد. لطفا با دکمه‌های صفحه‌کلید این کار را انجام دهید (Ctrl+X).",
+PasteErrorCopy	: "تنظیمات امنیتی مرورگر شما اجازه نمی‌دهد که ویرایشگر به طور خودکار عملکردهای کپی‌کردن را انجام دهد. لطفا با دکمه‌های صفحه‌کلید این کار را انجام دهید (Ctrl+C).",
+
+PasteAsText		: "چسباندن به عنوان متن ِساده",
+PasteFromWord	: "چسباندن از Word",
+
+DlgPasteMsg2	: "لطفا متن را با کلیدهای (<STRONG>Ctrl+V</STRONG>) در این جعبهٴ متنی بچسبانید و <STRONG>پذیرش</STRONG> را بزنید.",
+DlgPasteSec		: "به خاطر تنظیمات امنیتی مرورگر شما، ویرایشگر نمی‌تواند دسترسی مستقیم به داده‌های clipboard داشته باشد. شما باید دوباره آنرا در این پنجره بچسبانید.",
+DlgPasteIgnoreFont		: "چشم‌پوشی از تعاریف نوع قلم",
+DlgPasteRemoveStyles	: "چشم‌پوشی از تعاریف سبک (style)",
+DlgPasteCleanBox		: "پاک‌کردن ناحیه",
+
+// Color Picker
+ColorAutomatic	: "خودکار",
+ColorMoreColors	: "رنگهای بیشتر...",
+
+// Document Properties
+DocProps		: "ویژگیهای سند",
+
+// Anchor Dialog
+DlgAnchorTitle		: "ویژگیهای لنگر",
+DlgAnchorName		: "نام لنگر",
+DlgAnchorErrorName	: "لطفا نام لنگر را بنویسید",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "در واژه‌نامه یافت نشد",
+DlgSpellChangeTo		: "تغییر به",
+DlgSpellBtnIgnore		: "چشم‌پوشی",
+DlgSpellBtnIgnoreAll	: "چشم‌پوشی همه",
+DlgSpellBtnReplace		: "جایگزینی",
+DlgSpellBtnReplaceAll	: "جایگزینی همه",
+DlgSpellBtnUndo			: "واچینش",
+DlgSpellNoSuggestions	: "- پیشنهادی نیست -",
+DlgSpellProgress		: "بررسی املا در حال انجام...",
+DlgSpellNoMispell		: "بررسی املا انجام شد. هیچ غلط‌املائی یافت نشد",
+DlgSpellNoChanges		: "بررسی املا انجام شد. هیچ واژه‌ای تغییر نیافت",
+DlgSpellOneChange		: "بررسی املا انجام شد. یک واژه تغییر یافت",
+DlgSpellManyChanges		: "بررسی املا انجام شد. %1 واژه تغییر یافت",
+
+IeSpellDownload			: "بررسی‌کنندهٴ املا نصب نشده است. آیا می‌خواهید آن را هم‌اکنون دریافت کنید؟",
+
+// Button Dialog
+DlgButtonText		: "متن (مقدار)",
+DlgButtonType		: "نوع",
+DlgButtonTypeBtn	: "دکمه",
+DlgButtonTypeSbm	: "Submit",
+DlgButtonTypeRst	: "بازنشانی (Reset)",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "نام",
+DlgCheckboxValue	: "مقدار",
+DlgCheckboxSelected	: "برگزیده",
+
+// Form Dialog
+DlgFormName		: "نام",
+DlgFormAction	: "رویداد",
+DlgFormMethod	: "متد",
+
+// Select Field Dialog
+DlgSelectName		: "نام",
+DlgSelectValue		: "مقدار",
+DlgSelectSize		: "اندازه",
+DlgSelectLines		: "خطوط",
+DlgSelectChkMulti	: "گزینش چندگانه فراهم باشد",
+DlgSelectOpAvail	: "گزینه‌های دردسترس",
+DlgSelectOpText		: "متن",
+DlgSelectOpValue	: "مقدار",
+DlgSelectBtnAdd		: "افزودن",
+DlgSelectBtnModify	: "ویرایش",
+DlgSelectBtnUp		: "بالا",
+DlgSelectBtnDown	: "پائین",
+DlgSelectBtnSetValue : "تنظیم به عنوان مقدار ِبرگزیده",
+DlgSelectBtnDelete	: "پاک‌کردن",
+
+// Textarea Dialog
+DlgTextareaName	: "نام",
+DlgTextareaCols	: "ستونها",
+DlgTextareaRows	: "سطرها",
+
+// Text Field Dialog
+DlgTextName			: "نام",
+DlgTextValue		: "مقدار",
+DlgTextCharWidth	: "پهنای نویسه",
+DlgTextMaxChars		: "بیشینهٴ نویسه‌ها",
+DlgTextType			: "نوع",
+DlgTextTypeText		: "متن",
+DlgTextTypePass		: "گذرواژه",
+
+// Hidden Field Dialog
+DlgHiddenName	: "نام",
+DlgHiddenValue	: "مقدار",
+
+// Bulleted List Dialog
+BulletedListProp	: "ویژگیهای فهرست نقطه‌ای",
+NumberedListProp	: "ویژگیهای فهرست شماره‌دار",
+DlgLstStart			: "آغاز",
+DlgLstType			: "نوع",
+DlgLstTypeCircle	: "دایره",
+DlgLstTypeDisc		: "قرص",
+DlgLstTypeSquare	: "چهارگوش",
+DlgLstTypeNumbers	: "شماره‌ها (1، 2، 3)",
+DlgLstTypeLCase		: "نویسه‌های کوچک (a، b، c)",
+DlgLstTypeUCase		: "نویسه‌های بزرگ (A، B، C)",
+DlgLstTypeSRoman	: "شمارگان رومی کوچک (i، ii، iii)",
+DlgLstTypeLRoman	: "شمارگان رومی بزرگ (I، II، III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "عمومی",
+DlgDocBackTab		: "پس‌زمینه",
+DlgDocColorsTab		: "رنگها و حاشیه‌ها",
+DlgDocMetaTab		: "فراداده",
+
+DlgDocPageTitle		: "عنوان صفحه",
+DlgDocLangDir		: "جهت زبان",
+DlgDocLangDirLTR	: "چپ به راست (LTR(",
+DlgDocLangDirRTL	: "راست به چپ (RTL(",
+DlgDocLangCode		: "کد زبان",
+DlgDocCharSet		: "رمزگذاری نویسه‌گان",
+DlgDocCharSetCE		: "اروپای مرکزی",
+DlgDocCharSetCT		: "چینی رسمی (Big5)",
+DlgDocCharSetCR		: "سیریلیک",
+DlgDocCharSetGR		: "یونانی",
+DlgDocCharSetJP		: "ژاپنی",
+DlgDocCharSetKR		: "کره‌ای",
+DlgDocCharSetTR		: "ترکی",
+DlgDocCharSetUN		: "یونیکُد (UTF-8)",
+DlgDocCharSetWE		: "اروپای غربی",
+DlgDocCharSetOther	: "رمزگذاری نویسه‌گان دیگر",
+
+DlgDocDocType		: "عنوان نوع سند",
+DlgDocDocTypeOther	: "عنوان نوع سند دیگر",
+DlgDocIncXHTML		: "شامل تعاریف XHTML",
+DlgDocBgColor		: "رنگ پس‌زمینه",
+DlgDocBgImage		: "URL تصویر پس‌زمینه",
+DlgDocBgNoScroll	: "پس‌زمینهٴ پیمایش‌ناپذیر",
+DlgDocCText			: "متن",
+DlgDocCLink			: "پیوند",
+DlgDocCVisited		: "پیوند مشاهده‌شده",
+DlgDocCActive		: "پیوند فعال",
+DlgDocMargins		: "حاشیه‌های صفحه",
+DlgDocMaTop			: "بالا",
+DlgDocMaLeft		: "چپ",
+DlgDocMaRight		: "راست",
+DlgDocMaBottom		: "پایین",
+DlgDocMeIndex		: "کلیدواژگان نمایه‌گذاری سند (با کاما جدا شوند)",
+DlgDocMeDescr		: "توصیف سند",
+DlgDocMeAuthor		: "نویسنده",
+DlgDocMeCopy		: "کپی‌رایت",
+DlgDocPreview		: "پیش‌نمایش",
+
+// Templates Dialog
+Templates			: "الگوها",
+DlgTemplatesTitle	: "الگوهای محتویات",
+DlgTemplatesSelMsg	: "لطفا الگوی موردنظر را برای بازکردن در ویرایشگر برگزینید<br>(محتویات کنونی از دست خواهند رفت):",
+DlgTemplatesLoading	: "بارگذاری فهرست الگوها. لطفا صبر کنید...",
+DlgTemplatesNoTpl	: "(الگوئی تعریف نشده است)",
+DlgTemplatesReplace	: "محتویات کنونی جایگزین شوند",
+
+// About Dialog
+DlgAboutAboutTab	: "درباره",
+DlgAboutBrowserInfoTab	: "اطلاعات مرورگر",
+DlgAboutLicenseTab	: "گواهینامه",
+DlgAboutVersion		: "نگارش",
+DlgAboutInfo		: "برای آگاهی بیشتر به این نشانی بروید"
+};
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/fi.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/fi.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/fi.js	(revision 1280)
@@ -0,0 +1,516 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Finnish language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Piilota työkalurivi",
+ToolbarExpand		: "Näytä työkalurivi",
+
+// Toolbar Items and Context Menu
+Save				: "Tallenna",
+NewPage				: "Tyhjennä",
+Preview				: "Esikatsele",
+Cut					: "Leikkaa",
+Copy				: "Kopioi",
+Paste				: "Liitä",
+PasteText			: "Liitä tekstinä",
+PasteWord			: "Liitä Wordista",
+Print				: "Tulosta",
+SelectAll			: "Valitse kaikki",
+RemoveFormat		: "Poista muotoilu",
+InsertLinkLbl		: "Linkki",
+InsertLink			: "Lisää linkki/muokkaa linkkiä",
+RemoveLink			: "Poista linkki",
+Anchor				: "Lisää ankkuri/muokkaa ankkuria",
+AnchorDelete		: "Poista ankkuri",
+InsertImageLbl		: "Kuva",
+InsertImage			: "Lisää kuva/muokkaa kuvaa",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Lisää/muokkaa Flashia",
+InsertTableLbl		: "Taulu",
+InsertTable			: "Lisää taulu/muokkaa taulua",
+InsertLineLbl		: "Murtoviiva",
+InsertLine			: "Lisää murtoviiva",
+InsertSpecialCharLbl: "Erikoismerkki",
+InsertSpecialChar	: "Lisää erikoismerkki",
+InsertSmileyLbl		: "Hymiö",
+InsertSmiley		: "Lisää hymiö",
+About				: "FCKeditorista",
+Bold				: "Lihavoitu",
+Italic				: "Kursivoitu",
+Underline			: "Alleviivattu",
+StrikeThrough		: "Yliviivattu",
+Subscript			: "Alaindeksi",
+Superscript			: "Yläindeksi",
+LeftJustify			: "Tasaa vasemmat reunat",
+CenterJustify		: "Keskitä",
+RightJustify		: "Tasaa oikeat reunat",
+BlockJustify		: "Tasaa molemmat reunat",
+DecreaseIndent		: "Pienennä sisennystä",
+IncreaseIndent		: "Suurenna sisennystä",
+Blockquote			: "Lainaus",
+Undo				: "Kumoa",
+Redo				: "Toista",
+NumberedListLbl		: "Numerointi",
+NumberedList		: "Lisää/poista numerointi",
+BulletedListLbl		: "Luottelomerkit",
+BulletedList		: "Lisää/poista luottelomerkit",
+ShowTableBorders	: "Näytä taulun rajat",
+ShowDetails			: "Näytä muotoilu",
+Style				: "Tyyli",
+FontFormat			: "Muotoilu",
+Font				: "Fontti",
+FontSize			: "Koko",
+TextColor			: "Tekstiväri",
+BGColor				: "Taustaväri",
+Source				: "Koodi",
+Find				: "Etsi",
+Replace				: "Korvaa",
+SpellCheck			: "Tarkista oikeinkirjoitus",
+UniversalKeyboard	: "Universaali näppäimistö",
+PageBreakLbl		: "Sivun vaihto",
+PageBreak			: "Lisää sivun vaihto",
+
+Form			: "Lomake",
+Checkbox		: "Valintaruutu",
+RadioButton		: "Radiopainike",
+TextField		: "Tekstikenttä",
+Textarea		: "Tekstilaatikko",
+HiddenField		: "Piilokenttä",
+Button			: "Painike",
+SelectionField	: "Valintakenttä",
+ImageButton		: "Kuvapainike",
+
+FitWindow		: "Suurenna editori koko ikkunaan",
+ShowBlocks		: "Näytä elementit",
+
+// Context Menu
+EditLink			: "Muokkaa linkkiä",
+CellCM				: "Solu",
+RowCM				: "Rivi",
+ColumnCM			: "Sarake",
+InsertRowAfter		: "Lisää rivi alapuolelle",
+InsertRowBefore		: "Lisää rivi yläpuolelle",
+DeleteRows			: "Poista rivit",
+InsertColumnAfter	: "Lisää sarake oikealle",
+InsertColumnBefore	: "Lisää sarake vasemmalle",
+DeleteColumns		: "Poista sarakkeet",
+InsertCellAfter		: "Lisää solu perään",
+InsertCellBefore	: "Lisää solu eteen",
+DeleteCells			: "Poista solut",
+MergeCells			: "Yhdistä solut",
+MergeRight			: "Yhdistä oikealla olevan kanssa",
+MergeDown			: "Yhdistä alla olevan kanssa",
+HorizontalSplitCell	: "Jaa solu vaakasuunnassa",
+VerticalSplitCell	: "Jaa solu pystysuunnassa",
+TableDelete			: "Poista taulu",
+CellProperties		: "Solun ominaisuudet",
+TableProperties		: "Taulun ominaisuudet",
+ImageProperties		: "Kuvan ominaisuudet",
+FlashProperties		: "Flash ominaisuudet",
+
+AnchorProp			: "Ankkurin ominaisuudet",
+ButtonProp			: "Painikkeen ominaisuudet",
+CheckboxProp		: "Valintaruudun ominaisuudet",
+HiddenFieldProp		: "Piilokentän ominaisuudet",
+RadioButtonProp		: "Radiopainikkeen ominaisuudet",
+ImageButtonProp		: "Kuvapainikkeen ominaisuudet",
+TextFieldProp		: "Tekstikentän ominaisuudet",
+SelectionFieldProp	: "Valintakentän ominaisuudet",
+TextareaProp		: "Tekstilaatikon ominaisuudet",
+FormProp			: "Lomakkeen ominaisuudet",
+
+FontFormats			: "Normaali;Muotoiltu;Osoite;Otsikko 1;Otsikko 2;Otsikko 3;Otsikko 4;Otsikko 5;Otsikko 6",
+
+// Alerts and Messages
+ProcessingXHTML		: "Prosessoidaan XHTML:ää. Odota hetki...",
+Done				: "Valmis",
+PasteWordConfirm	: "Teksti, jonka haluat liittää, näyttää olevan kopioitu Wordista. Haluatko puhdistaa sen ennen liittämistä?",
+NotCompatiblePaste	: "Tämä komento toimii vain Internet Explorer 5.5:ssa tai uudemmassa. Haluatko liittää ilman puhdistusta?",
+UnknownToolbarItem	: "Tuntemanton työkalu \"%1\"",
+UnknownCommand		: "Tuntematon komento \"%1\"",
+NotImplemented		: "Komentoa ei ole liitetty sovellukseen",
+UnknownToolbarSet	: "Työkalukokonaisuus \"%1\" ei ole olemassa",
+NoActiveX			: "Selaimesi turvallisuusasetukset voivat rajoittaa joitain editorin ominaisuuksia. Sinun pitää ottaa käyttöön asetuksista \"Suorita ActiveX komponentit ja -plugin-laajennukset\". Saatat kohdata virheitä ja huomata puuttuvia ominaisuuksia.",
+BrowseServerBlocked : "Resurssiselainta ei voitu avata. Varmista, että ponnahdusikkunoiden estäjät eivät ole päällä.",
+DialogBlocked		: "Apuikkunaa ei voitu avaata. Varmista, että ponnahdusikkunoiden estäjät eivät ole päällä.",
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Peruuta",
+DlgBtnClose			: "Sulje",
+DlgBtnBrowseServer	: "Selaa palvelinta",
+DlgAdvancedTag		: "Lisäominaisuudet",
+DlgOpOther			: "Muut",
+DlgInfoTab			: "Info",
+DlgAlertUrl			: "Lisää URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<ei asetettu>",
+DlgGenId			: "Tunniste",
+DlgGenLangDir		: "Kielen suunta",
+DlgGenLangDirLtr	: "Vasemmalta oikealle (LTR)",
+DlgGenLangDirRtl	: "Oikealta vasemmalle (RTL)",
+DlgGenLangCode		: "Kielikoodi",
+DlgGenAccessKey		: "Pikanäppäin",
+DlgGenName			: "Nimi",
+DlgGenTabIndex		: "Tabulaattori indeksi",
+DlgGenLongDescr		: "Pitkän kuvauksen URL",
+DlgGenClass			: "Tyyliluokat",
+DlgGenTitle			: "Avustava otsikko",
+DlgGenContType		: "Avustava sisällön tyyppi",
+DlgGenLinkCharset	: "Linkitetty kirjaimisto",
+DlgGenStyle			: "Tyyli",
+
+// Image Dialog
+DlgImgTitle			: "Kuvan ominaisuudet",
+DlgImgInfoTab		: "Kuvan tiedot",
+DlgImgBtnUpload		: "Lähetä palvelimelle",
+DlgImgURL			: "Osoite",
+DlgImgUpload		: "Lisää kuva",
+DlgImgAlt			: "Vaihtoehtoinen teksti",
+DlgImgWidth			: "Leveys",
+DlgImgHeight		: "Korkeus",
+DlgImgLockRatio		: "Lukitse suhteet",
+DlgBtnResetSize		: "Alkuperäinen koko",
+DlgImgBorder		: "Raja",
+DlgImgHSpace		: "Vaakatila",
+DlgImgVSpace		: "Pystytila",
+DlgImgAlign			: "Kohdistus",
+DlgImgAlignLeft		: "Vasemmalle",
+DlgImgAlignAbsBottom: "Aivan alas",
+DlgImgAlignAbsMiddle: "Aivan keskelle",
+DlgImgAlignBaseline	: "Alas (teksti)",
+DlgImgAlignBottom	: "Alas",
+DlgImgAlignMiddle	: "Keskelle",
+DlgImgAlignRight	: "Oikealle",
+DlgImgAlignTextTop	: "Ylös (teksti)",
+DlgImgAlignTop		: "Ylös",
+DlgImgPreview		: "Esikatselu",
+DlgImgAlertUrl		: "Kirjoita kuvan osoite (URL)",
+DlgImgLinkTab		: "Linkki",
+
+// Flash Dialog
+DlgFlashTitle		: "Flash ominaisuudet",
+DlgFlashChkPlay		: "Automaattinen käynnistys",
+DlgFlashChkLoop		: "Toisto",
+DlgFlashChkMenu		: "Näytä Flash-valikko",
+DlgFlashScale		: "Levitä",
+DlgFlashScaleAll	: "Näytä kaikki",
+DlgFlashScaleNoBorder	: "Ei rajaa",
+DlgFlashScaleFit	: "Tarkka koko",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Linkki",
+DlgLnkInfoTab		: "Linkin tiedot",
+DlgLnkTargetTab		: "Kohde",
+
+DlgLnkType			: "Linkkityyppi",
+DlgLnkTypeURL		: "Osoite",
+DlgLnkTypeAnchor	: "Ankkuri tässä sivussa",
+DlgLnkTypeEMail		: "Sähköposti",
+DlgLnkProto			: "Protokolla",
+DlgLnkProtoOther	: "<muu>",
+DlgLnkURL			: "Osoite",
+DlgLnkAnchorSel		: "Valitse ankkuri",
+DlgLnkAnchorByName	: "Ankkurin nimen mukaan",
+DlgLnkAnchorById	: "Ankkurin ID:n mukaan",
+DlgLnkNoAnchors		: "(Ei ankkureita tässä dokumentissa)",
+DlgLnkEMail			: "Sähköpostiosoite",
+DlgLnkEMailSubject	: "Aihe",
+DlgLnkEMailBody		: "Viesti",
+DlgLnkUpload		: "Lisää tiedosto",
+DlgLnkBtnUpload		: "Lähetä palvelimelle",
+
+DlgLnkTarget		: "Kohde",
+DlgLnkTargetFrame	: "<kehys>",
+DlgLnkTargetPopup	: "<popup ikkuna>",
+DlgLnkTargetBlank	: "Uusi ikkuna (_blank)",
+DlgLnkTargetParent	: "Emoikkuna (_parent)",
+DlgLnkTargetSelf	: "Sama ikkuna (_self)",
+DlgLnkTargetTop		: "Päällimmäisin ikkuna (_top)",
+DlgLnkTargetFrameName	: "Kohdekehyksen nimi",
+DlgLnkPopWinName	: "Popup ikkunan nimi",
+DlgLnkPopWinFeat	: "Popup ikkunan ominaisuudet",
+DlgLnkPopResize		: "Venytettävä",
+DlgLnkPopLocation	: "Osoiterivi",
+DlgLnkPopMenu		: "Valikkorivi",
+DlgLnkPopScroll		: "Vierityspalkit",
+DlgLnkPopStatus		: "Tilarivi",
+DlgLnkPopToolbar	: "Vakiopainikkeet",
+DlgLnkPopFullScrn	: "Täysi ikkuna (IE)",
+DlgLnkPopDependent	: "Riippuva (Netscape)",
+DlgLnkPopWidth		: "Leveys",
+DlgLnkPopHeight		: "Korkeus",
+DlgLnkPopLeft		: "Vasemmalta (px)",
+DlgLnkPopTop		: "Ylhäältä (px)",
+
+DlnLnkMsgNoUrl		: "Linkille on kirjoitettava URL",
+DlnLnkMsgNoEMail	: "Kirjoita sähköpostiosoite",
+DlnLnkMsgNoAnchor	: "Valitse ankkuri",
+DlnLnkMsgInvPopName	: "Popup-ikkunan nimi pitää alkaa aakkosella ja ei saa sisältää välejä",
+
+// Color Dialog
+DlgColorTitle		: "Valitse väri",
+DlgColorBtnClear	: "Tyhjennä",
+DlgColorHighlight	: "Kohdalla",
+DlgColorSelected	: "Valittu",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Lisää hymiö",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Valitse erikoismerkki",
+
+// Table Dialog
+DlgTableTitle		: "Taulun ominaisuudet",
+DlgTableRows		: "Rivit",
+DlgTableColumns		: "Sarakkeet",
+DlgTableBorder		: "Rajan paksuus",
+DlgTableAlign		: "Kohdistus",
+DlgTableAlignNotSet	: "<ei asetettu>",
+DlgTableAlignLeft	: "Vasemmalle",
+DlgTableAlignCenter	: "Keskelle",
+DlgTableAlignRight	: "Oikealle",
+DlgTableWidth		: "Leveys",
+DlgTableWidthPx		: "pikseliä",
+DlgTableWidthPc		: "prosenttia",
+DlgTableHeight		: "Korkeus",
+DlgTableCellSpace	: "Solujen väli",
+DlgTableCellPad		: "Solujen sisennys",
+DlgTableCaption		: "Otsikko",
+DlgTableSummary		: "Yhteenveto",
+
+// Table Cell Dialog
+DlgCellTitle		: "Solun ominaisuudet",
+DlgCellWidth		: "Leveys",
+DlgCellWidthPx		: "pikseliä",
+DlgCellWidthPc		: "prosenttia",
+DlgCellHeight		: "Korkeus",
+DlgCellWordWrap		: "Tekstikierrätys",
+DlgCellWordWrapNotSet	: "<Ei asetettu>",
+DlgCellWordWrapYes	: "Kyllä",
+DlgCellWordWrapNo	: "Ei",
+DlgCellHorAlign		: "Vaakakohdistus",
+DlgCellHorAlignNotSet	: "<Ei asetettu>",
+DlgCellHorAlignLeft	: "Vasemmalle",
+DlgCellHorAlignCenter	: "Keskelle",
+DlgCellHorAlignRight: "Oikealle",
+DlgCellVerAlign		: "Pystykohdistus",
+DlgCellVerAlignNotSet	: "<Ei asetettu>",
+DlgCellVerAlignTop	: "Ylös",
+DlgCellVerAlignMiddle	: "Keskelle",
+DlgCellVerAlignBottom	: "Alas",
+DlgCellVerAlignBaseline	: "Tekstin alas",
+DlgCellRowSpan		: "Rivin jatkuvuus",
+DlgCellCollSpan		: "Sarakkeen jatkuvuus",
+DlgCellBackColor	: "Taustaväri",
+DlgCellBorderColor	: "Rajan väri",
+DlgCellBtnSelect	: "Valitse...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Etsi ja korvaa",
+
+// Find Dialog
+DlgFindTitle		: "Etsi",
+DlgFindFindBtn		: "Etsi",
+DlgFindNotFoundMsg	: "Etsittyä tekstiä ei löytynyt.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Korvaa",
+DlgReplaceFindLbl		: "Etsi mitä:",
+DlgReplaceReplaceLbl	: "Korvaa tällä:",
+DlgReplaceCaseChk		: "Sama kirjainkoko",
+DlgReplaceReplaceBtn	: "Korvaa",
+DlgReplaceReplAllBtn	: "Korvaa kaikki",
+DlgReplaceWordChk		: "Koko sana",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "Selaimesi turva-asetukset eivät salli editorin toteuttaa leikkaamista. Käytä näppäimistöä leikkaamiseen (Ctrl+X).",
+PasteErrorCopy	: "Selaimesi turva-asetukset eivät salli editorin toteuttaa kopioimista. Käytä näppäimistöä kopioimiseen (Ctrl+C).",
+
+PasteAsText		: "Liitä tekstinä",
+PasteFromWord	: "Liitä Wordista",
+
+DlgPasteMsg2	: "Liitä painamalla (<STRONG>Ctrl+V</STRONG>) ja painamalla <STRONG>OK</STRONG>.",
+DlgPasteSec		: "Selaimesi turva-asetukset eivät salli editorin käyttää leikepöytää suoraan. Sinun pitää suorittaa liittäminen tässä ikkunassa.",
+DlgPasteIgnoreFont		: "Jätä huomioimatta fonttimääritykset",
+DlgPasteRemoveStyles	: "Poista tyylimääritykset",
+DlgPasteCleanBox		: "Tyhjennä",
+
+// Color Picker
+ColorAutomatic	: "Automaattinen",
+ColorMoreColors	: "Lisää värejä...",
+
+// Document Properties
+DocProps		: "Dokumentin ominaisuudet",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Ankkurin ominaisuudet",
+DlgAnchorName		: "Nimi",
+DlgAnchorErrorName	: "Ankkurille on kirjoitettava nimi",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Ei sanakirjassa",
+DlgSpellChangeTo		: "Vaihda",
+DlgSpellBtnIgnore		: "Jätä huomioimatta",
+DlgSpellBtnIgnoreAll	: "Jätä kaikki huomioimatta",
+DlgSpellBtnReplace		: "Korvaa",
+DlgSpellBtnReplaceAll	: "Korvaa kaikki",
+DlgSpellBtnUndo			: "Kumoa",
+DlgSpellNoSuggestions	: "Ei ehdotuksia",
+DlgSpellProgress		: "Tarkistus käynnissä...",
+DlgSpellNoMispell		: "Tarkistus valmis: Ei virheitä",
+DlgSpellNoChanges		: "Tarkistus valmis: Yhtään sanaa ei muutettu",
+DlgSpellOneChange		: "Tarkistus valmis: Yksi sana muutettiin",
+DlgSpellManyChanges		: "Tarkistus valmis: %1 sanaa muutettiin",
+
+IeSpellDownload			: "Oikeinkirjoituksen tarkistusta ei ole asennettu. Haluatko ladata sen nyt?",
+
+// Button Dialog
+DlgButtonText		: "Teksti (arvo)",
+DlgButtonType		: "Tyyppi",
+DlgButtonTypeBtn	: "Painike",
+DlgButtonTypeSbm	: "Lähetä",
+DlgButtonTypeRst	: "Tyhjennä",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Nimi",
+DlgCheckboxValue	: "Arvo",
+DlgCheckboxSelected	: "Valittu",
+
+// Form Dialog
+DlgFormName		: "Nimi",
+DlgFormAction	: "Toiminto",
+DlgFormMethod	: "Tapa",
+
+// Select Field Dialog
+DlgSelectName		: "Nimi",
+DlgSelectValue		: "Arvo",
+DlgSelectSize		: "Koko",
+DlgSelectLines		: "Rivit",
+DlgSelectChkMulti	: "Salli usea valinta",
+DlgSelectOpAvail	: "Ominaisuudet",
+DlgSelectOpText		: "Teksti",
+DlgSelectOpValue	: "Arvo",
+DlgSelectBtnAdd		: "Lisää",
+DlgSelectBtnModify	: "Muuta",
+DlgSelectBtnUp		: "Ylös",
+DlgSelectBtnDown	: "Alas",
+DlgSelectBtnSetValue : "Aseta valituksi",
+DlgSelectBtnDelete	: "Poista",
+
+// Textarea Dialog
+DlgTextareaName	: "Nimi",
+DlgTextareaCols	: "Sarakkeita",
+DlgTextareaRows	: "Rivejä",
+
+// Text Field Dialog
+DlgTextName			: "Nimi",
+DlgTextValue		: "Arvo",
+DlgTextCharWidth	: "Leveys",
+DlgTextMaxChars		: "Maksimi merkkimäärä",
+DlgTextType			: "Tyyppi",
+DlgTextTypeText		: "Teksti",
+DlgTextTypePass		: "Salasana",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Nimi",
+DlgHiddenValue	: "Arvo",
+
+// Bulleted List Dialog
+BulletedListProp	: "Luettelon ominaisuudet",
+NumberedListProp	: "Numeroinnin ominaisuudet",
+DlgLstStart			: "Alku",
+DlgLstType			: "Tyyppi",
+DlgLstTypeCircle	: "Kehä",
+DlgLstTypeDisc		: "Ympyrä",
+DlgLstTypeSquare	: "Neliö",
+DlgLstTypeNumbers	: "Numerot (1, 2, 3)",
+DlgLstTypeLCase		: "Pienet kirjaimet (a, b, c)",
+DlgLstTypeUCase		: "Isot kirjaimet (A, B, C)",
+DlgLstTypeSRoman	: "Pienet roomalaiset numerot (i, ii, iii)",
+DlgLstTypeLRoman	: "Isot roomalaiset numerot (Ii, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Yleiset",
+DlgDocBackTab		: "Tausta",
+DlgDocColorsTab		: "Värit ja marginaalit",
+DlgDocMetaTab		: "Meta-tieto",
+
+DlgDocPageTitle		: "Sivun nimi",
+DlgDocLangDir		: "Kielen suunta",
+DlgDocLangDirLTR	: "Vasemmalta oikealle (LTR)",
+DlgDocLangDirRTL	: "Oikealta vasemmalle (RTL)",
+DlgDocLangCode		: "Kielikoodi",
+DlgDocCharSet		: "Merkistökoodaus",
+DlgDocCharSetCE		: "Keskieurooppalainen",
+DlgDocCharSetCT		: "Kiina, perinteinen (Big5)",
+DlgDocCharSetCR		: "Kyrillinen",
+DlgDocCharSetGR		: "Kreikka",
+DlgDocCharSetJP		: "Japani",
+DlgDocCharSetKR		: "Korealainen",
+DlgDocCharSetTR		: "Turkkilainen",
+DlgDocCharSetUN		: "Unicode (UTF-8)",
+DlgDocCharSetWE		: "Länsieurooppalainen",
+DlgDocCharSetOther	: "Muu merkistökoodaus",
+
+DlgDocDocType		: "Dokumentin tyyppi",
+DlgDocDocTypeOther	: "Muu dokumentin tyyppi",
+DlgDocIncXHTML		: "Lisää XHTML julistukset",
+DlgDocBgColor		: "Taustaväri",
+DlgDocBgImage		: "Taustakuva",
+DlgDocBgNoScroll	: "Paikallaanpysyvä tausta",
+DlgDocCText			: "Teksti",
+DlgDocCLink			: "Linkki",
+DlgDocCVisited		: "Vierailtu linkki",
+DlgDocCActive		: "Aktiivinen linkki",
+DlgDocMargins		: "Sivun marginaalit",
+DlgDocMaTop			: "Ylä",
+DlgDocMaLeft		: "Vasen",
+DlgDocMaRight		: "Oikea",
+DlgDocMaBottom		: "Ala",
+DlgDocMeIndex		: "Hakusanat (pilkulla erotettuna)",
+DlgDocMeDescr		: "Kuvaus",
+DlgDocMeAuthor		: "Tekijä",
+DlgDocMeCopy		: "Tekijänoikeudet",
+DlgDocPreview		: "Esikatselu",
+
+// Templates Dialog
+Templates			: "Pohjat",
+DlgTemplatesTitle	: "Sisältöpohjat",
+DlgTemplatesSelMsg	: "Valitse pohja editoriin<br>(aiempi sisältö menetetään):",
+DlgTemplatesLoading	: "Ladataan listaa pohjista. Hetkinen...",
+DlgTemplatesNoTpl	: "(Ei määriteltyjä pohjia)",
+DlgTemplatesReplace	: "Korvaa editorin koko sisältö",
+
+// About Dialog
+DlgAboutAboutTab	: "Editorista",
+DlgAboutBrowserInfoTab	: "Selaimen tiedot",
+DlgAboutLicenseTab	: "Lisenssi",
+DlgAboutVersion		: "versio",
+DlgAboutInfo		: "Lisää tietoa osoitteesta"
+};
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/fo.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/fo.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/fo.js	(revision 1280)
@@ -0,0 +1,516 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Faroese language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Fjal amboðsbjálkan",
+ToolbarExpand		: "Vís amboðsbjálkan",
+
+// Toolbar Items and Context Menu
+Save				: "Goym",
+NewPage				: "Nýggj síða",
+Preview				: "Frumsýning",
+Cut					: "Kvett",
+Copy				: "Avrita",
+Paste				: "Innrita",
+PasteText			: "Innrita reinan tekst",
+PasteWord			: "Innrita frá Word",
+Print				: "Prenta",
+SelectAll			: "Markera alt",
+RemoveFormat		: "Strika sniðgeving",
+InsertLinkLbl		: "Tilknýti",
+InsertLink			: "Ger/broyt tilknýti",
+RemoveLink			: "Strika tilknýti",
+Anchor				: "Ger/broyt marknastein",
+AnchorDelete		: "Remove Anchor",	//MISSING
+InsertImageLbl		: "Myndir",
+InsertImage			: "Set inn/broyt mynd",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Set inn/broyt Flash",
+InsertTableLbl		: "Tabell",
+InsertTable			: "Set inn/broyt tabell",
+InsertLineLbl		: "Linja",
+InsertLine			: "Ger vatnrætta linju",
+InsertSpecialCharLbl: "Sertekn",
+InsertSpecialChar	: "Set inn sertekn",
+InsertSmileyLbl		: "Smiley",
+InsertSmiley		: "Set inn Smiley",
+About				: "Um FCKeditor",
+Bold				: "Feit skrift",
+Italic				: "Skráskrift",
+Underline			: "Undirstrikað",
+StrikeThrough		: "Yvirstrikað",
+Subscript			: "Lækkað skrift",
+Superscript			: "Hækkað skrift",
+LeftJustify			: "Vinstrasett",
+CenterJustify		: "Miðsett",
+RightJustify		: "Høgrasett",
+BlockJustify		: "Javnir tekstkantar",
+DecreaseIndent		: "Minka reglubrotarinntriv",
+IncreaseIndent		: "Økja reglubrotarinntriv",
+Blockquote			: "Blockquote",	//MISSING
+Undo				: "Angra",
+Redo				: "Vend aftur",
+NumberedListLbl		: "Talmerktur listi",
+NumberedList		: "Ger/strika talmerktan lista",
+BulletedListLbl		: "Punktmerktur listi",
+BulletedList		: "Ger/strika punktmerktan lista",
+ShowTableBorders	: "Vís tabellbordar",
+ShowDetails			: "Vís í smálutum",
+Style				: "Typografi",
+FontFormat			: "Skriftsnið",
+Font				: "Skrift",
+FontSize			: "Skriftstødd",
+TextColor			: "Tekstlitur",
+BGColor				: "Bakgrundslitur",
+Source				: "Kelda",
+Find				: "Leita",
+Replace				: "Yvirskriva",
+SpellCheck			: "Kanna stavseting",
+UniversalKeyboard	: "Knappaborð",
+PageBreakLbl		: "Síðuskift",
+PageBreak			: "Ger síðuskift",
+
+Form			: "Formur",
+Checkbox		: "Flugubein",
+RadioButton		: "Radioknøttur",
+TextField		: "Tekstteigur",
+Textarea		: "Tekstumráði",
+HiddenField		: "Fjaldur teigur",
+Button			: "Knøttur",
+SelectionField	: "Valskrá",
+ImageButton		: "Myndaknøttur",
+
+FitWindow		: "Set tekstviðgera til fulla stødd",
+ShowBlocks		: "Show Blocks",	//MISSING
+
+// Context Menu
+EditLink			: "Broyt tilknýti",
+CellCM				: "Meski",
+RowCM				: "Rað",
+ColumnCM			: "Kolonna",
+InsertRowAfter		: "Insert Row After",	//MISSING
+InsertRowBefore		: "Insert Row Before",	//MISSING
+DeleteRows			: "Strika røðir",
+InsertColumnAfter	: "Insert Column After",	//MISSING
+InsertColumnBefore	: "Insert Column Before",	//MISSING
+DeleteColumns		: "Strika kolonnur",
+InsertCellAfter		: "Insert Cell After",	//MISSING
+InsertCellBefore	: "Insert Cell Before",	//MISSING
+DeleteCells			: "Strika meskar",
+MergeCells			: "Flætta meskar",
+MergeRight			: "Merge Right",	//MISSING
+MergeDown			: "Merge Down",	//MISSING
+HorizontalSplitCell	: "Split Cell Horizontally",	//MISSING
+VerticalSplitCell	: "Split Cell Vertically",	//MISSING
+TableDelete			: "Strika tabell",
+CellProperties		: "Meskueginleikar",
+TableProperties		: "Tabelleginleikar",
+ImageProperties		: "Myndaeginleikar",
+FlashProperties		: "Flash eginleikar",
+
+AnchorProp			: "Eginleikar fyri marknastein",
+ButtonProp			: "Eginleikar fyri knøtt",
+CheckboxProp		: "Eginleikar fyri flugubein",
+HiddenFieldProp		: "Eginleikar fyri fjaldan teig",
+RadioButtonProp		: "Eginleikar fyri radioknøtt",
+ImageButtonProp		: "Eginleikar fyri myndaknøtt",
+TextFieldProp		: "Eginleikar fyri tekstteig",
+SelectionFieldProp	: "Eginleikar fyri valskrá",
+TextareaProp		: "Eginleikar fyri tekstumráði",
+FormProp			: "Eginleikar fyri Form",
+
+FontFormats			: "Vanligt;Sniðgivið;Adressa;Yvirskrift 1;Yvirskrift 2;Yvirskrift 3;Yvirskrift 4;Yvirskrift 5;Yvirskrift 6",
+
+// Alerts and Messages
+ProcessingXHTML		: "XHTML verður viðgjørt. Bíða við...",
+Done				: "Liðugt",
+PasteWordConfirm	: "Teksturin, royndur verður at seta inn, tykist at stava frá Word. Vilt tú reinsa tekstin, áðrenn hann verður settur inn?",
+NotCompatiblePaste	: "Hetta er bert tøkt í Internet Explorer 5.5 og nýggjari. Vilt tú seta tekstin inn kortini - óreinsaðan?",
+UnknownToolbarItem	: "Ókendur lutur í amboðsbjálkanum \"%1\"",
+UnknownCommand		: "Ókend kommando \"%1\"",
+NotImplemented		: "Hetta er ikki tøkt í hesi útgávuni",
+UnknownToolbarSet	: "Amboðsbjálkin \"%1\" finst ikki",
+NoActiveX			: "Trygdaruppsetingin í alnótskaganum kann sum er avmarka onkrar hentleikar í tekstviðgeranum. Tú mást loyva møguleikanum \"Run/Kør ActiveX controls and plug-ins\". Tú kanst uppliva feilir og ávaringar um tvørrandi hentleikar.",
+BrowseServerBlocked : "Ambætarakagin kundi ikki opnast. Tryggja tær, at allar pop-up forðingar eru óvirknar.",
+DialogBlocked		: "Tað eyðnaðist ikki at opna samskiftisrútin. Tryggja tær, at allar pop-up forðingar eru óvirknar.",
+
+// Dialogs
+DlgBtnOK			: "Góðkent",
+DlgBtnCancel		: "Avlýst",
+DlgBtnClose			: "Lat aftur",
+DlgBtnBrowseServer	: "Ambætarakagi",
+DlgAdvancedTag		: "Fjølbroytt",
+DlgOpOther			: "<Annað>",
+DlgInfoTab			: "Upplýsingar",
+DlgAlertUrl			: "Vinarliga veit ein URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<ikki sett>",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Tekstkós",
+DlgGenLangDirLtr	: "Frá vinstru til høgru (LTR)",
+DlgGenLangDirRtl	: "Frá høgru til vinstru (RTL)",
+DlgGenLangCode		: "Málkoda",
+DlgGenAccessKey		: "Snarvegisknappur",
+DlgGenName			: "Navn",
+DlgGenTabIndex		: "Inntriv indeks",
+DlgGenLongDescr		: "Víðkað URL frágreiðing",
+DlgGenClass			: "Typografi klassar",
+DlgGenTitle			: "Vegleiðandi heiti",
+DlgGenContType		: "Vegleiðandi innihaldsslag",
+DlgGenLinkCharset	: "Atknýtt teknsett",
+DlgGenStyle			: "Typografi",
+
+// Image Dialog
+DlgImgTitle			: "Myndaeginleikar",
+DlgImgInfoTab		: "Myndaupplýsingar",
+DlgImgBtnUpload		: "Send til ambætaran",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Send",
+DlgImgAlt			: "Alternativur tekstur",
+DlgImgWidth			: "Breidd",
+DlgImgHeight		: "Hædd",
+DlgImgLockRatio		: "Læs lutfallið",
+DlgBtnResetSize		: "Upprunastødd",
+DlgImgBorder		: "Bordi",
+DlgImgHSpace		: "Høgri breddi",
+DlgImgVSpace		: "Vinstri breddi",
+DlgImgAlign			: "Justering",
+DlgImgAlignLeft		: "Vinstra",
+DlgImgAlignAbsBottom: "Abs botnur",
+DlgImgAlignAbsMiddle: "Abs miðja",
+DlgImgAlignBaseline	: "Basislinja",
+DlgImgAlignBottom	: "Botnur",
+DlgImgAlignMiddle	: "Miðja",
+DlgImgAlignRight	: "Høgra",
+DlgImgAlignTextTop	: "Tekst toppur",
+DlgImgAlignTop		: "Ovast",
+DlgImgPreview		: "Frumsýning",
+DlgImgAlertUrl		: "Rita slóðina til myndina",
+DlgImgLinkTab		: "Tilknýti",
+
+// Flash Dialog
+DlgFlashTitle		: "Flash eginleikar",
+DlgFlashChkPlay		: "Avspælingin byrjar sjálv",
+DlgFlashChkLoop		: "Endurspæl",
+DlgFlashChkMenu		: "Ger Flash skrá virkna",
+DlgFlashScale		: "Skalering",
+DlgFlashScaleAll	: "Vís alt",
+DlgFlashScaleNoBorder	: "Eingin bordi",
+DlgFlashScaleFit	: "Neyv skalering",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Tilknýti",
+DlgLnkInfoTab		: "Tilknýtis upplýsingar",
+DlgLnkTargetTab		: "Mál",
+
+DlgLnkType			: "Tilknýtisslag",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Tilknýti til marknastein í tekstinum",
+DlgLnkTypeEMail		: "Teldupostur",
+DlgLnkProto			: "Protokoll",
+DlgLnkProtoOther	: "<Annað>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Vel ein marknastein",
+DlgLnkAnchorByName	: "Eftir navni á marknasteini",
+DlgLnkAnchorById	: "Eftir element Id",
+DlgLnkNoAnchors		: "(Eingir marknasteinar eru í hesum dokumentið)",
+DlgLnkEMail			: "Teldupost-adressa",
+DlgLnkEMailSubject	: "Evni",
+DlgLnkEMailBody		: "Breyðtekstur",
+DlgLnkUpload		: "Send til ambætaran",
+DlgLnkBtnUpload		: "Send til ambætaran",
+
+DlgLnkTarget		: "Mál",
+DlgLnkTargetFrame	: "<ramma>",
+DlgLnkTargetPopup	: "<popup vindeyga>",
+DlgLnkTargetBlank	: "Nýtt vindeyga (_blank)",
+DlgLnkTargetParent	: "Upphavliga vindeygað (_parent)",
+DlgLnkTargetSelf	: "Sama vindeygað (_self)",
+DlgLnkTargetTop		: "Alt vindeygað (_top)",
+DlgLnkTargetFrameName	: "Vís navn vindeygans",
+DlgLnkPopWinName	: "Popup vindeygans navn",
+DlgLnkPopWinFeat	: "Popup vindeygans víðkaðu eginleikar",
+DlgLnkPopResize		: "Kann broyta stødd",
+DlgLnkPopLocation	: "Adressulinja",
+DlgLnkPopMenu		: "Skrábjálki",
+DlgLnkPopScroll		: "Rullibjálki",
+DlgLnkPopStatus		: "Støðufrágreiðingarbjálki",
+DlgLnkPopToolbar	: "Amboðsbjálki",
+DlgLnkPopFullScrn	: "Fullur skermur (IE)",
+DlgLnkPopDependent	: "Bundið (Netscape)",
+DlgLnkPopWidth		: "Breidd",
+DlgLnkPopHeight		: "Hædd",
+DlgLnkPopLeft		: "Frástøða frá vinstru",
+DlgLnkPopTop		: "Frástøða frá íerva",
+
+DlnLnkMsgNoUrl		: "Vinarliga skriva tilknýti (URL)",
+DlnLnkMsgNoEMail	: "Vinarliga skriva teldupost-adressu",
+DlnLnkMsgNoAnchor	: "Vinarliga vel marknastein",
+DlnLnkMsgInvPopName	: "Popup navnið má byrja við bókstavi og má ikki hava millumrúm",
+
+// Color Dialog
+DlgColorTitle		: "Vel lit",
+DlgColorBtnClear	: "Strika alt",
+DlgColorHighlight	: "Framhevja",
+DlgColorSelected	: "Valt",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Vel Smiley",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Vel sertekn",
+
+// Table Dialog
+DlgTableTitle		: "Eginleikar fyri tabell",
+DlgTableRows		: "Røðir",
+DlgTableColumns		: "Kolonnur",
+DlgTableBorder		: "Bordabreidd",
+DlgTableAlign		: "Justering",
+DlgTableAlignNotSet	: "<Einki valt>",
+DlgTableAlignLeft	: "Vinstrasett",
+DlgTableAlignCenter	: "Miðsett",
+DlgTableAlignRight	: "Høgrasett",
+DlgTableWidth		: "Breidd",
+DlgTableWidthPx		: "pixels",
+DlgTableWidthPc		: "prosent",
+DlgTableHeight		: "Hædd",
+DlgTableCellSpace	: "Fjarstøða millum meskar",
+DlgTableCellPad		: "Meskubreddi",
+DlgTableCaption		: "Tabellfrágreiðing",
+DlgTableSummary		: "Samandráttur",
+
+// Table Cell Dialog
+DlgCellTitle		: "Mesku eginleikar",
+DlgCellWidth		: "Breidd",
+DlgCellWidthPx		: "pixels",
+DlgCellWidthPc		: "prosent",
+DlgCellHeight		: "Hædd",
+DlgCellWordWrap		: "Orðkloyving",
+DlgCellWordWrapNotSet	: "<Einki valt>",
+DlgCellWordWrapYes	: "Ja",
+DlgCellWordWrapNo	: "Nei",
+DlgCellHorAlign		: "Vatnrøtt justering",
+DlgCellHorAlignNotSet	: "<Einki valt>",
+DlgCellHorAlignLeft	: "Vinstrasett",
+DlgCellHorAlignCenter	: "Miðsett",
+DlgCellHorAlignRight: "Høgrasett",
+DlgCellVerAlign		: "Lodrøtt justering",
+DlgCellVerAlignNotSet	: "<Ikki sett>",
+DlgCellVerAlignTop	: "Ovast",
+DlgCellVerAlignMiddle	: "Miðjan",
+DlgCellVerAlignBottom	: "Niðast",
+DlgCellVerAlignBaseline	: "Basislinja",
+DlgCellRowSpan		: "Røðir, meskin fevnir um",
+DlgCellCollSpan		: "Kolonnur, meskin fevnir um",
+DlgCellBackColor	: "Bakgrundslitur",
+DlgCellBorderColor	: "Litur á borda",
+DlgCellBtnSelect	: "Vel...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Find and Replace",	//MISSING
+
+// Find Dialog
+DlgFindTitle		: "Finn",
+DlgFindFindBtn		: "Finn",
+DlgFindNotFoundMsg	: "Leititeksturin varð ikki funnin",
+
+// Replace Dialog
+DlgReplaceTitle			: "Yvirskriva",
+DlgReplaceFindLbl		: "Finn:",
+DlgReplaceReplaceLbl	: "Yvirskriva við:",
+DlgReplaceCaseChk		: "Munur á stórum og smáðum bókstavum",
+DlgReplaceReplaceBtn	: "Yvirskriva",
+DlgReplaceReplAllBtn	: "Yvirskriva alt",
+DlgReplaceWordChk		: "Bert heil orð",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "Trygdaruppseting alnótskagans forðar tekstviðgeranum í at kvetta tekstin. vinarliga nýt knappaborðið til at kvetta tekstin (CTRL+X).",
+PasteErrorCopy	: "Trygdaruppseting alnótskagans forðar tekstviðgeranum í at avrita tekstin. Vinarliga nýt knappaborðið til at avrita tekstin (CTRL+C).",
+
+PasteAsText		: "Innrita som reinan tekst",
+PasteFromWord	: "Innrita fra Word",
+
+DlgPasteMsg2	: "Vinarliga koyr tekstin í hendan rútin við knappaborðinum (<strong>CTRL+V</strong>) og klikk á <strong>Góðtak</strong>.",
+DlgPasteSec		: "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.",	//MISSING
+DlgPasteIgnoreFont		: "Forfjóna Font definitiónirnar",
+DlgPasteRemoveStyles	: "Strika Styles definitiónir",
+DlgPasteCleanBox		: "Reinskanarkassi",
+
+// Color Picker
+ColorAutomatic	: "Av sær sjálvum",
+ColorMoreColors	: "Fleiri litir...",
+
+// Document Properties
+DocProps		: "Eginleikar fyri dokument",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Eginleikar fyri marknastein",
+DlgAnchorName		: "Heiti marknasteinsins",
+DlgAnchorErrorName	: "Vinarliga rita marknasteinsins heiti",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Finst ikki í orðabókini",
+DlgSpellChangeTo		: "Broyt til",
+DlgSpellBtnIgnore		: "Forfjóna",
+DlgSpellBtnIgnoreAll	: "Forfjóna alt",
+DlgSpellBtnReplace		: "Yvirskriva",
+DlgSpellBtnReplaceAll	: "Yvirskriva alt",
+DlgSpellBtnUndo			: "Angra",
+DlgSpellNoSuggestions	: "- Einki uppskot -",
+DlgSpellProgress		: "Rættstavarin arbeiðir...",
+DlgSpellNoMispell		: "Rættstavarain liðugur: Eingin feilur funnin",
+DlgSpellNoChanges		: "Rættstavarain liðugur: Einki orð varð broytt",
+DlgSpellOneChange		: "Rættstavarain liðugur: Eitt orð er broytt",
+DlgSpellManyChanges		: "Rættstavarain liðugur: %1 orð broytt",
+
+IeSpellDownload			: "Rættstavarin er ikki tøkur í tekstviðgeranum. Vilt tú heinta hann nú?",
+
+// Button Dialog
+DlgButtonText		: "Tekstur",
+DlgButtonType		: "Slag",
+DlgButtonTypeBtn	: "Knøttur",
+DlgButtonTypeSbm	: "Send",
+DlgButtonTypeRst	: "Nullstilla",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Navn",
+DlgCheckboxValue	: "Virði",
+DlgCheckboxSelected	: "Valt",
+
+// Form Dialog
+DlgFormName		: "Navn",
+DlgFormAction	: "Hending",
+DlgFormMethod	: "Háttur",
+
+// Select Field Dialog
+DlgSelectName		: "Navn",
+DlgSelectValue		: "Virði",
+DlgSelectSize		: "Stødd",
+DlgSelectLines		: "Linjur",
+DlgSelectChkMulti	: "Loyv fleiri valmøguleikum samstundis",
+DlgSelectOpAvail	: "Tøkir møguleikar",
+DlgSelectOpText		: "Tekstur",
+DlgSelectOpValue	: "Virði",
+DlgSelectBtnAdd		: "Legg afturat",
+DlgSelectBtnModify	: "Broyt",
+DlgSelectBtnUp		: "Upp",
+DlgSelectBtnDown	: "Niður",
+DlgSelectBtnSetValue : "Set sum valt virði",
+DlgSelectBtnDelete	: "Strika",
+
+// Textarea Dialog
+DlgTextareaName	: "Navn",
+DlgTextareaCols	: "kolonnur",
+DlgTextareaRows	: "røðir",
+
+// Text Field Dialog
+DlgTextName			: "Navn",
+DlgTextValue		: "Virði",
+DlgTextCharWidth	: "Breidd (sjónlig tekn)",
+DlgTextMaxChars		: "Mest loyvdu tekn",
+DlgTextType			: "Slag",
+DlgTextTypeText		: "Tekstur",
+DlgTextTypePass		: "Loyniorð",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Navn",
+DlgHiddenValue	: "Virði",
+
+// Bulleted List Dialog
+BulletedListProp	: "Eginleikar fyri punktmerktan lista",
+NumberedListProp	: "Eginleikar fyri talmerktan lista",
+DlgLstStart			: "Byrjan",
+DlgLstType			: "Slag",
+DlgLstTypeCircle	: "Sirkul",
+DlgLstTypeDisc		: "Fyltur sirkul",
+DlgLstTypeSquare	: "Fjórhyrningur",
+DlgLstTypeNumbers	: "Talmerkt (1, 2, 3)",
+DlgLstTypeLCase		: "Smáir bókstavir (a, b, c)",
+DlgLstTypeUCase		: "Stórir bókstavir (A, B, C)",
+DlgLstTypeSRoman	: "Smá rómaratøl (i, ii, iii)",
+DlgLstTypeLRoman	: "Stór rómaratøl (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Generelt",
+DlgDocBackTab		: "Bakgrund",
+DlgDocColorsTab		: "Litir og breddar",
+DlgDocMetaTab		: "META-upplýsingar",
+
+DlgDocPageTitle		: "Síðuheiti",
+DlgDocLangDir		: "Tekstkós",
+DlgDocLangDirLTR	: "Frá vinstru móti høgru (LTR)",
+DlgDocLangDirRTL	: "Frá høgru móti vinstru (RTL)",
+DlgDocLangCode		: "Málkoda",
+DlgDocCharSet		: "Teknsett koda",
+DlgDocCharSetCE		: "Miðeuropa",
+DlgDocCharSetCT		: "Kinesiskt traditionelt (Big5)",
+DlgDocCharSetCR		: "Cyrilliskt",
+DlgDocCharSetGR		: "Grikst",
+DlgDocCharSetJP		: "Japanskt",
+DlgDocCharSetKR		: "Koreanskt",
+DlgDocCharSetTR		: "Turkiskt",
+DlgDocCharSetUN		: "UNICODE (UTF-8)",
+DlgDocCharSetWE		: "Vestureuropa",
+DlgDocCharSetOther	: "Onnur teknsett koda",
+
+DlgDocDocType		: "Dokumentslag yvirskrift",
+DlgDocDocTypeOther	: "Annað dokumentslag yvirskrift",
+DlgDocIncXHTML		: "Viðfest XHTML deklaratiónir",
+DlgDocBgColor		: "Bakgrundslitur",
+DlgDocBgImage		: "Leið til bakgrundsmynd (URL)",
+DlgDocBgNoScroll	: "Læst bakgrund (rullar ikki)",
+DlgDocCText			: "Tekstur",
+DlgDocCLink			: "Tilknýti",
+DlgDocCVisited		: "Vitjaði tilknýti",
+DlgDocCActive		: "Virkin tilknýti",
+DlgDocMargins		: "Síðubreddar",
+DlgDocMaTop			: "Ovast",
+DlgDocMaLeft		: "Vinstra",
+DlgDocMaRight		: "Høgra",
+DlgDocMaBottom		: "Niðast",
+DlgDocMeIndex		: "Dokument index lyklaorð (sundurbýtt við komma)",
+DlgDocMeDescr		: "Dokumentlýsing",
+DlgDocMeAuthor		: "Høvundur",
+DlgDocMeCopy		: "Upphavsrættindi",
+DlgDocPreview		: "Frumsýning",
+
+// Templates Dialog
+Templates			: "Skabelónir",
+DlgTemplatesTitle	: "Innihaldsskabelónir",
+DlgTemplatesSelMsg	: "Vinarliga vel ta skabelón, ið skal opnast í tekstviðgeranum<br>(Hetta yvirskrivar núverandi innihald):",
+DlgTemplatesLoading	: "Heinti yvirlit yvir skabelónir. Vinarliga bíða við...",
+DlgTemplatesNoTpl	: "(Ongar skabelónir tøkar)",
+DlgTemplatesReplace	: "Yvirskriva núverandi innihald",
+
+// About Dialog
+DlgAboutAboutTab	: "Um",
+DlgAboutBrowserInfoTab	: "Upplýsingar um alnótskagan",
+DlgAboutLicenseTab	: "License",
+DlgAboutVersion		: "version",
+DlgAboutInfo		: "Fyri fleiri upplýsingar, far til"
+};
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/fr.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/fr.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/fr.js	(revision 1280)
@@ -0,0 +1,516 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * French language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Masquer Outils",
+ToolbarExpand		: "Afficher Outils",
+
+// Toolbar Items and Context Menu
+Save				: "Enregistrer",
+NewPage				: "Nouvelle page",
+Preview				: "Prévisualisation",
+Cut					: "Couper",
+Copy				: "Copier",
+Paste				: "Coller",
+PasteText			: "Coller comme texte",
+PasteWord			: "Coller de Word",
+Print				: "Imprimer",
+SelectAll			: "Tout sélectionner",
+RemoveFormat		: "Supprimer le format",
+InsertLinkLbl		: "Lien",
+InsertLink			: "Insérer/modifier le lien",
+RemoveLink			: "Supprimer le lien",
+Anchor				: "Insérer/modifier l'ancre",
+AnchorDelete		: "Supprimer l'ancre",
+InsertImageLbl		: "Image",
+InsertImage			: "Insérer/modifier l'image",
+InsertFlashLbl		: "Animation Flash",
+InsertFlash			: "Insérer/modifier l'animation Flash",
+InsertTableLbl		: "Tableau",
+InsertTable			: "Insérer/modifier le tableau",
+InsertLineLbl		: "Séparateur",
+InsertLine			: "Insérer un séparateur",
+InsertSpecialCharLbl: "Caractères spéciaux",
+InsertSpecialChar	: "Insérer un caractère spécial",
+InsertSmileyLbl		: "Smiley",
+InsertSmiley		: "Insérer un Smiley",
+About				: "A propos de FCKeditor",
+Bold				: "Gras",
+Italic				: "Italique",
+Underline			: "Souligné",
+StrikeThrough		: "Barré",
+Subscript			: "Indice",
+Superscript			: "Exposant",
+LeftJustify			: "Aligné à gauche",
+CenterJustify		: "Centré",
+RightJustify		: "Aligné à Droite",
+BlockJustify		: "Texte justifié",
+DecreaseIndent		: "Diminuer le retrait",
+IncreaseIndent		: "Augmenter le retrait",
+Blockquote			: "Citation",
+Undo				: "Annuler",
+Redo				: "Refaire",
+NumberedListLbl		: "Liste numérotée",
+NumberedList		: "Insérer/supprimer la liste numérotée",
+BulletedListLbl		: "Liste à puces",
+BulletedList		: "Insérer/supprimer la liste à puces",
+ShowTableBorders	: "Afficher les bordures du tableau",
+ShowDetails			: "Afficher les caractères invisibles",
+Style				: "Style",
+FontFormat			: "Format",
+Font				: "Police",
+FontSize			: "Taille",
+TextColor			: "Couleur de caractère",
+BGColor				: "Couleur de fond",
+Source				: "Source",
+Find				: "Chercher",
+Replace				: "Remplacer",
+SpellCheck			: "Orthographe",
+UniversalKeyboard	: "Clavier universel",
+PageBreakLbl		: "Saut de page",
+PageBreak			: "Insérer un saut de page",
+
+Form			: "Formulaire",
+Checkbox		: "Case à cocher",
+RadioButton		: "Bouton radio",
+TextField		: "Champ texte",
+Textarea		: "Zone de texte",
+HiddenField		: "Champ caché",
+Button			: "Bouton",
+SelectionField	: "Liste/menu",
+ImageButton		: "Bouton image",
+
+FitWindow		: "Edition pleine page",
+ShowBlocks		: "Afficher les blocs",
+
+// Context Menu
+EditLink			: "Modifier le lien",
+CellCM				: "Cellule",
+RowCM				: "Ligne",
+ColumnCM			: "Colonne",
+InsertRowAfter		: "Insérer une ligne après",
+InsertRowBefore		: "Insérer une ligne avant",
+DeleteRows			: "Supprimer des lignes",
+InsertColumnAfter	: "Insérer une colonne après",
+InsertColumnBefore	: "Insérer une colonne avant",
+DeleteColumns		: "Supprimer des colonnes",
+InsertCellAfter		: "Insérer une cellule après",
+InsertCellBefore	: "Insérer une cellule avant",
+DeleteCells			: "Supprimer des cellules",
+MergeCells			: "Fusionner les cellules",
+MergeRight			: "Fusionner à droite",
+MergeDown			: "Fusionner en bas",
+HorizontalSplitCell	: "Scinder la cellule horizontalement",
+VerticalSplitCell	: "Scinder la cellule verticalement",
+TableDelete			: "Supprimer le tableau",
+CellProperties		: "Propriétés de cellule",
+TableProperties		: "Propriétés du tableau",
+ImageProperties		: "Propriétés de l'image",
+FlashProperties		: "Propriétés de l'animation Flash",
+
+AnchorProp			: "Propriétés de l'ancre",
+ButtonProp			: "Propriétés du bouton",
+CheckboxProp		: "Propriétés de la case à cocher",
+HiddenFieldProp		: "Propriétés du champ caché",
+RadioButtonProp		: "Propriétés du bouton radio",
+ImageButtonProp		: "Propriétés du bouton image",
+TextFieldProp		: "Propriétés du champ texte",
+SelectionFieldProp	: "Propriétés de la liste/du menu",
+TextareaProp		: "Propriétés de la zone de texte",
+FormProp			: "Propriétés du formulaire",
+
+FontFormats			: "Normal;Formaté;Adresse;En-tête 1;En-tête 2;En-tête 3;En-tête 4;En-tête 5;En-tête 6;Normal (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "Calcul XHTML. Veuillez patienter...",
+Done				: "Terminé",
+PasteWordConfirm	: "Le texte à coller semble provenir de Word. Désirez-vous le nettoyer avant de coller?",
+NotCompatiblePaste	: "Cette commande nécessite Internet Explorer version 5.5 minimum. Souhaitez-vous coller sans nettoyage?",
+UnknownToolbarItem	: "Elément de barre d'outil inconnu \"%1\"",
+UnknownCommand		: "Nom de commande inconnu \"%1\"",
+NotImplemented		: "Commande non encore écrite",
+UnknownToolbarSet	: "La barre d'outils \"%1\" n'existe pas",
+NoActiveX			: "Les paramètres de sécurité de votre navigateur peuvent limiter quelques fonctionnalités de l'éditeur. Veuillez activer l'option \"Exécuter les contrôles ActiveX et les plug-ins\". Il se peut que vous rencontriez des erreurs et remarquiez quelques limitations.",
+BrowseServerBlocked : "Le navigateur n'a pas pu être ouvert. Assurez-vous que les bloqueurs de popups soient désactivés.",
+DialogBlocked		: "La fenêtre de dialogue n'a pas pu s'ouvrir. Assurez-vous que les bloqueurs de popups soient désactivés.",
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Annuler",
+DlgBtnClose			: "Fermer",
+DlgBtnBrowseServer	: "Parcourir le serveur",
+DlgAdvancedTag		: "Avancé",
+DlgOpOther			: "<Autre>",
+DlgInfoTab			: "Info",
+DlgAlertUrl			: "Veuillez saisir l'URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<Par défaut>",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Sens d'écriture",
+DlgGenLangDirLtr	: "De gauche à droite (LTR)",
+DlgGenLangDirRtl	: "De droite à gauche (RTL)",
+DlgGenLangCode		: "Code langue",
+DlgGenAccessKey		: "Equivalent clavier",
+DlgGenName			: "Nom",
+DlgGenTabIndex		: "Ordre de tabulation",
+DlgGenLongDescr		: "URL de description longue",
+DlgGenClass			: "Classes de feuilles de style",
+DlgGenTitle			: "Titre",
+DlgGenContType		: "Type de contenu",
+DlgGenLinkCharset	: "Encodage de caractère",
+DlgGenStyle			: "Style",
+
+// Image Dialog
+DlgImgTitle			: "Propriétés de l'image",
+DlgImgInfoTab		: "Informations sur l'image",
+DlgImgBtnUpload		: "Envoyer sur le serveur",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Télécharger",
+DlgImgAlt			: "Texte de remplacement",
+DlgImgWidth			: "Largeur",
+DlgImgHeight		: "Hauteur",
+DlgImgLockRatio		: "Garder les proportions",
+DlgBtnResetSize		: "Taille originale",
+DlgImgBorder		: "Bordure",
+DlgImgHSpace		: "Espacement horizontal",
+DlgImgVSpace		: "Espacement vertical",
+DlgImgAlign			: "Alignement",
+DlgImgAlignLeft		: "Gauche",
+DlgImgAlignAbsBottom: "Abs Bas",
+DlgImgAlignAbsMiddle: "Abs Milieu",
+DlgImgAlignBaseline	: "Bas du texte",
+DlgImgAlignBottom	: "Bas",
+DlgImgAlignMiddle	: "Milieu",
+DlgImgAlignRight	: "Droite",
+DlgImgAlignTextTop	: "Haut du texte",
+DlgImgAlignTop		: "Haut",
+DlgImgPreview		: "Prévisualisation",
+DlgImgAlertUrl		: "Veuillez saisir l'URL de l'image",
+DlgImgLinkTab		: "Lien",
+
+// Flash Dialog
+DlgFlashTitle		: "Propriétés de l'animation Flash",
+DlgFlashChkPlay		: "Lecture automatique",
+DlgFlashChkLoop		: "Boucle",
+DlgFlashChkMenu		: "Activer le menu Flash",
+DlgFlashScale		: "Affichage",
+DlgFlashScaleAll	: "Par défaut (tout montrer)",
+DlgFlashScaleNoBorder	: "Sans bordure",
+DlgFlashScaleFit	: "Ajuster aux dimensions",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Propriétés du lien",
+DlgLnkInfoTab		: "Informations sur le lien",
+DlgLnkTargetTab		: "Destination",
+
+DlgLnkType			: "Type de lien",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Ancre dans cette page",
+DlgLnkTypeEMail		: "E-Mail",
+DlgLnkProto			: "Protocole",
+DlgLnkProtoOther	: "<autre>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Sélectionner une ancre",
+DlgLnkAnchorByName	: "Par nom",
+DlgLnkAnchorById	: "Par id",
+DlgLnkNoAnchors		: "(Pas d'ancre disponible dans le document)",
+DlgLnkEMail			: "Adresse E-Mail",
+DlgLnkEMailSubject	: "Sujet du message",
+DlgLnkEMailBody		: "Corps du message",
+DlgLnkUpload		: "Télécharger",
+DlgLnkBtnUpload		: "Envoyer sur le serveur",
+
+DlgLnkTarget		: "Destination",
+DlgLnkTargetFrame	: "<cadre>",
+DlgLnkTargetPopup	: "<fenêtre popup>",
+DlgLnkTargetBlank	: "Nouvelle fenêtre (_blank)",
+DlgLnkTargetParent	: "Fenêtre mère (_parent)",
+DlgLnkTargetSelf	: "Même fenêtre (_self)",
+DlgLnkTargetTop		: "Fenêtre supérieure (_top)",
+DlgLnkTargetFrameName	: "Nom du cadre de destination",
+DlgLnkPopWinName	: "Nom de la fenêtre popup",
+DlgLnkPopWinFeat	: "Caractéristiques de la fenêtre popup",
+DlgLnkPopResize		: "Taille modifiable",
+DlgLnkPopLocation	: "Barre d'adresses",
+DlgLnkPopMenu		: "Barre de menu",
+DlgLnkPopScroll		: "Barres de défilement",
+DlgLnkPopStatus		: "Barre d'état",
+DlgLnkPopToolbar	: "Barre d'outils",
+DlgLnkPopFullScrn	: "Plein écran (IE)",
+DlgLnkPopDependent	: "Dépendante (Netscape)",
+DlgLnkPopWidth		: "Largeur",
+DlgLnkPopHeight		: "Hauteur",
+DlgLnkPopLeft		: "Position à partir de la gauche",
+DlgLnkPopTop		: "Position à partir du haut",
+
+DlnLnkMsgNoUrl		: "Veuillez saisir l'URL",
+DlnLnkMsgNoEMail	: "Veuillez saisir l'adresse e-mail",
+DlnLnkMsgNoAnchor	: "Veuillez sélectionner une ancre",
+DlnLnkMsgInvPopName	: "Le nom de la fenêtre popup doit commencer par une lettre et ne doit pas contenir d'espace",
+
+// Color Dialog
+DlgColorTitle		: "Sélectionner",
+DlgColorBtnClear	: "Effacer",
+DlgColorHighlight	: "Prévisualisation",
+DlgColorSelected	: "Sélectionné",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Insérer un Smiley",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Insérer un caractère spécial",
+
+// Table Dialog
+DlgTableTitle		: "Propriétés du tableau",
+DlgTableRows		: "Lignes",
+DlgTableColumns		: "Colonnes",
+DlgTableBorder		: "Bordure",
+DlgTableAlign		: "Alignement",
+DlgTableAlignNotSet	: "<Par défaut>",
+DlgTableAlignLeft	: "Gauche",
+DlgTableAlignCenter	: "Centré",
+DlgTableAlignRight	: "Droite",
+DlgTableWidth		: "Largeur",
+DlgTableWidthPx		: "pixels",
+DlgTableWidthPc		: "pourcentage",
+DlgTableHeight		: "Hauteur",
+DlgTableCellSpace	: "Espacement",
+DlgTableCellPad		: "Contour",
+DlgTableCaption		: "Titre",
+DlgTableSummary		: "Résumé",
+
+// Table Cell Dialog
+DlgCellTitle		: "Propriétés de la cellule",
+DlgCellWidth		: "Largeur",
+DlgCellWidthPx		: "pixels",
+DlgCellWidthPc		: "pourcentage",
+DlgCellHeight		: "Hauteur",
+DlgCellWordWrap		: "Retour à la ligne",
+DlgCellWordWrapNotSet	: "<Par défaut>",
+DlgCellWordWrapYes	: "Oui",
+DlgCellWordWrapNo	: "Non",
+DlgCellHorAlign		: "Alignement horizontal",
+DlgCellHorAlignNotSet	: "<Par défaut>",
+DlgCellHorAlignLeft	: "Gauche",
+DlgCellHorAlignCenter	: "Centré",
+DlgCellHorAlignRight: "Droite",
+DlgCellVerAlign		: "Alignement vertical",
+DlgCellVerAlignNotSet	: "<Par défaut>",
+DlgCellVerAlignTop	: "Haut",
+DlgCellVerAlignMiddle	: "Milieu",
+DlgCellVerAlignBottom	: "Bas",
+DlgCellVerAlignBaseline	: "Bas du texte",
+DlgCellRowSpan		: "Lignes fusionnées",
+DlgCellCollSpan		: "Colonnes fusionnées",
+DlgCellBackColor	: "Fond",
+DlgCellBorderColor	: "Bordure",
+DlgCellBtnSelect	: "Choisir...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Chercher et Remplacer",
+
+// Find Dialog
+DlgFindTitle		: "Chercher",
+DlgFindFindBtn		: "Chercher",
+DlgFindNotFoundMsg	: "Le texte indiqué est introuvable.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Remplacer",
+DlgReplaceFindLbl		: "Rechercher:",
+DlgReplaceReplaceLbl	: "Remplacer par:",
+DlgReplaceCaseChk		: "Respecter la casse",
+DlgReplaceReplaceBtn	: "Remplacer",
+DlgReplaceReplAllBtn	: "Tout remplacer",
+DlgReplaceWordChk		: "Mot entier",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "Les paramètres de sécurité de votre navigateur empêchent l'éditeur de couper automatiquement vos données. Veuillez utiliser les équivalents claviers (Ctrl+X).",
+PasteErrorCopy	: "Les paramètres de sécurité de votre navigateur empêchent l'éditeur de copier automatiquement vos données. Veuillez utiliser les équivalents claviers (Ctrl+C).",
+
+PasteAsText		: "Coller comme texte",
+PasteFromWord	: "Coller à partir de Word",
+
+DlgPasteMsg2	: "Veuillez coller dans la zone ci-dessous en utilisant le clavier (<STRONG>Ctrl+V</STRONG>) et cliquez sur <STRONG>OK</STRONG>.",
+DlgPasteSec		: "A cause des paramètres de sécurité de votre navigateur, l'éditeur ne peut accéder au presse-papier directement. Vous devez coller à nouveau le contenu dans cette fenêtre.",
+DlgPasteIgnoreFont		: "Ignorer les polices de caractères",
+DlgPasteRemoveStyles	: "Supprimer les styles",
+DlgPasteCleanBox		: "Effacer le contenu",
+
+// Color Picker
+ColorAutomatic	: "Automatique",
+ColorMoreColors	: "Plus de couleurs...",
+
+// Document Properties
+DocProps		: "Propriétés du document",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Propriétés de l'ancre",
+DlgAnchorName		: "Nom de l'ancre",
+DlgAnchorErrorName	: "Veuillez saisir le nom de l'ancre",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Pas dans le dictionnaire",
+DlgSpellChangeTo		: "Changer en",
+DlgSpellBtnIgnore		: "Ignorer",
+DlgSpellBtnIgnoreAll	: "Ignorer tout",
+DlgSpellBtnReplace		: "Remplacer",
+DlgSpellBtnReplaceAll	: "Remplacer tout",
+DlgSpellBtnUndo			: "Annuler",
+DlgSpellNoSuggestions	: "- Aucune suggestion -",
+DlgSpellProgress		: "Vérification d'orthographe en cours...",
+DlgSpellNoMispell		: "Vérification d'orthographe terminée: Aucune erreur trouvée",
+DlgSpellNoChanges		: "Vérification d'orthographe terminée: Pas de modifications",
+DlgSpellOneChange		: "Vérification d'orthographe terminée: Un mot modifié",
+DlgSpellManyChanges		: "Vérification d'orthographe terminée: %1 mots modifiés",
+
+IeSpellDownload			: "Le Correcteur n'est pas installé. Souhaitez-vous le télécharger maintenant?",
+
+// Button Dialog
+DlgButtonText		: "Texte (valeur)",
+DlgButtonType		: "Type",
+DlgButtonTypeBtn	: "Bouton",
+DlgButtonTypeSbm	: "Envoyer",
+DlgButtonTypeRst	: "Réinitialiser",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Nom",
+DlgCheckboxValue	: "Valeur",
+DlgCheckboxSelected	: "Sélectionné",
+
+// Form Dialog
+DlgFormName		: "Nom",
+DlgFormAction	: "Action",
+DlgFormMethod	: "Méthode",
+
+// Select Field Dialog
+DlgSelectName		: "Nom",
+DlgSelectValue		: "Valeur",
+DlgSelectSize		: "Taille",
+DlgSelectLines		: "lignes",
+DlgSelectChkMulti	: "Sélection multiple",
+DlgSelectOpAvail	: "Options disponibles",
+DlgSelectOpText		: "Texte",
+DlgSelectOpValue	: "Valeur",
+DlgSelectBtnAdd		: "Ajouter",
+DlgSelectBtnModify	: "Modifier",
+DlgSelectBtnUp		: "Monter",
+DlgSelectBtnDown	: "Descendre",
+DlgSelectBtnSetValue : "Valeur sélectionnée",
+DlgSelectBtnDelete	: "Supprimer",
+
+// Textarea Dialog
+DlgTextareaName	: "Nom",
+DlgTextareaCols	: "Colonnes",
+DlgTextareaRows	: "Lignes",
+
+// Text Field Dialog
+DlgTextName			: "Nom",
+DlgTextValue		: "Valeur",
+DlgTextCharWidth	: "Largeur en caractères",
+DlgTextMaxChars		: "Nombre maximum de caractères",
+DlgTextType			: "Type",
+DlgTextTypeText		: "Texte",
+DlgTextTypePass		: "Mot de passe",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Nom",
+DlgHiddenValue	: "Valeur",
+
+// Bulleted List Dialog
+BulletedListProp	: "Propriétés de liste à puces",
+NumberedListProp	: "Propriétés de liste numérotée",
+DlgLstStart			: "Début",
+DlgLstType			: "Type",
+DlgLstTypeCircle	: "Cercle",
+DlgLstTypeDisc		: "Disque",
+DlgLstTypeSquare	: "Carré",
+DlgLstTypeNumbers	: "Nombres (1, 2, 3)",
+DlgLstTypeLCase		: "Lettres minuscules (a, b, c)",
+DlgLstTypeUCase		: "Lettres majuscules (A, B, C)",
+DlgLstTypeSRoman	: "Chiffres romains minuscules (i, ii, iii)",
+DlgLstTypeLRoman	: "Chiffres romains majuscules (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Général",
+DlgDocBackTab		: "Fond",
+DlgDocColorsTab		: "Couleurs et marges",
+DlgDocMetaTab		: "Métadonnées",
+
+DlgDocPageTitle		: "Titre de la page",
+DlgDocLangDir		: "Sens d'écriture",
+DlgDocLangDirLTR	: "De la gauche vers la droite (LTR)",
+DlgDocLangDirRTL	: "De la droite vers la gauche (RTL)",
+DlgDocLangCode		: "Code langue",
+DlgDocCharSet		: "Encodage de caractère",
+DlgDocCharSetCE		: "Europe Centrale",
+DlgDocCharSetCT		: "Chinois Traditionnel (Big5)",
+DlgDocCharSetCR		: "Cyrillique",
+DlgDocCharSetGR		: "Grec",
+DlgDocCharSetJP		: "Japanais",
+DlgDocCharSetKR		: "Coréen",
+DlgDocCharSetTR		: "Turc",
+DlgDocCharSetUN		: "Unicode (UTF-8)",
+DlgDocCharSetWE		: "Occidental",
+DlgDocCharSetOther	: "Autre encodage de caractère",
+
+DlgDocDocType		: "Type de document",
+DlgDocDocTypeOther	: "Autre type de document",
+DlgDocIncXHTML		: "Inclure les déclarations XHTML",
+DlgDocBgColor		: "Couleur de fond",
+DlgDocBgImage		: "Image de fond",
+DlgDocBgNoScroll	: "Image fixe sans défilement",
+DlgDocCText			: "Texte",
+DlgDocCLink			: "Lien",
+DlgDocCVisited		: "Lien visité",
+DlgDocCActive		: "Lien activé",
+DlgDocMargins		: "Marges",
+DlgDocMaTop			: "Haut",
+DlgDocMaLeft		: "Gauche",
+DlgDocMaRight		: "Droite",
+DlgDocMaBottom		: "Bas",
+DlgDocMeIndex		: "Mots-clés (séparés par des virgules)",
+DlgDocMeDescr		: "Description",
+DlgDocMeAuthor		: "Auteur",
+DlgDocMeCopy		: "Copyright",
+DlgDocPreview		: "Prévisualisation",
+
+// Templates Dialog
+Templates			: "Modèles",
+DlgTemplatesTitle	: "Modèles de contenu",
+DlgTemplatesSelMsg	: "Veuillez sélectionner le modèle à ouvrir dans l'éditeur<br>(le contenu actuel sera remplacé):",
+DlgTemplatesLoading	: "Chargement de la liste des modèles. Veuillez patienter...",
+DlgTemplatesNoTpl	: "(Aucun modèle disponible)",
+DlgTemplatesReplace	: "Remplacer tout le contenu",
+
+// About Dialog
+DlgAboutAboutTab	: "A propos de",
+DlgAboutBrowserInfoTab	: "Navigateur",
+DlgAboutLicenseTab	: "License",
+DlgAboutVersion		: "version",
+DlgAboutInfo		: "Pour plus d'informations, aller à"
+};
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/gl.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/gl.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/gl.js	(revision 1280)
@@ -0,0 +1,516 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Galician language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Ocultar Ferramentas",
+ToolbarExpand		: "Mostrar Ferramentas",
+
+// Toolbar Items and Context Menu
+Save				: "Gardar",
+NewPage				: "Nova Páxina",
+Preview				: "Vista Previa",
+Cut					: "Cortar",
+Copy				: "Copiar",
+Paste				: "Pegar",
+PasteText			: "Pegar como texto plano",
+PasteWord			: "Pegar dende Word",
+Print				: "Imprimir",
+SelectAll			: "Seleccionar todo",
+RemoveFormat		: "Eliminar Formato",
+InsertLinkLbl		: "Ligazón",
+InsertLink			: "Inserir/Editar Ligazón",
+RemoveLink			: "Eliminar Ligazón",
+Anchor				: "Inserir/Editar Referencia",
+AnchorDelete		: "Remove Anchor",	//MISSING
+InsertImageLbl		: "Imaxe",
+InsertImage			: "Inserir/Editar Imaxe",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Inserir/Editar Flash",
+InsertTableLbl		: "Tabla",
+InsertTable			: "Inserir/Editar Tabla",
+InsertLineLbl		: "Liña",
+InsertLine			: "Inserir Liña Horizontal",
+InsertSpecialCharLbl: "Carácter Special",
+InsertSpecialChar	: "Inserir Carácter Especial",
+InsertSmileyLbl		: "Smiley",
+InsertSmiley		: "Inserir Smiley",
+About				: "Acerca de FCKeditor",
+Bold				: "Negrita",
+Italic				: "Cursiva",
+Underline			: "Sub-raiado",
+StrikeThrough		: "Tachado",
+Subscript			: "Subíndice",
+Superscript			: "Superíndice",
+LeftJustify			: "Aliñar á Esquerda",
+CenterJustify		: "Centrado",
+RightJustify		: "Aliñar á Dereita",
+BlockJustify		: "Xustificado",
+DecreaseIndent		: "Disminuir Sangría",
+IncreaseIndent		: "Aumentar Sangría",
+Blockquote			: "Blockquote",	//MISSING
+Undo				: "Desfacer",
+Redo				: "Refacer",
+NumberedListLbl		: "Lista Numerada",
+NumberedList		: "Inserir/Eliminar Lista Numerada",
+BulletedListLbl		: "Marcas",
+BulletedList		: "Inserir/Eliminar Marcas",
+ShowTableBorders	: "Mostrar Bordes das Táboas",
+ShowDetails			: "Mostrar Marcas Parágrafo",
+Style				: "Estilo",
+FontFormat			: "Formato",
+Font				: "Tipo",
+FontSize			: "Tamaño",
+TextColor			: "Cor do Texto",
+BGColor				: "Cor do Fondo",
+Source				: "Código Fonte",
+Find				: "Procurar",
+Replace				: "Substituir",
+SpellCheck			: "Corrección Ortográfica",
+UniversalKeyboard	: "Teclado Universal",
+PageBreakLbl		: "Salto de Páxina",
+PageBreak			: "Inserir Salto de Páxina",
+
+Form			: "Formulario",
+Checkbox		: "Cadro de Verificación",
+RadioButton		: "Botón de Radio",
+TextField		: "Campo de Texto",
+Textarea		: "Área de Texto",
+HiddenField		: "Campo Oculto",
+Button			: "Botón",
+SelectionField	: "Campo de Selección",
+ImageButton		: "Botón de Imaxe",
+
+FitWindow		: "Maximizar o tamaño do editor",
+ShowBlocks		: "Show Blocks",	//MISSING
+
+// Context Menu
+EditLink			: "Editar Ligazón",
+CellCM				: "Cela",
+RowCM				: "Fila",
+ColumnCM			: "Columna",
+InsertRowAfter		: "Insert Row After",	//MISSING
+InsertRowBefore		: "Insert Row Before",	//MISSING
+DeleteRows			: "Borrar Filas",
+InsertColumnAfter	: "Insert Column After",	//MISSING
+InsertColumnBefore	: "Insert Column Before",	//MISSING
+DeleteColumns		: "Borrar Columnas",
+InsertCellAfter		: "Insert Cell After",	//MISSING
+InsertCellBefore	: "Insert Cell Before",	//MISSING
+DeleteCells			: "Borrar Cela",
+MergeCells			: "Unir Celas",
+MergeRight			: "Merge Right",	//MISSING
+MergeDown			: "Merge Down",	//MISSING
+HorizontalSplitCell	: "Split Cell Horizontally",	//MISSING
+VerticalSplitCell	: "Split Cell Vertically",	//MISSING
+TableDelete			: "Borrar Táboa",
+CellProperties		: "Propriedades da Cela",
+TableProperties		: "Propriedades da Táboa",
+ImageProperties		: "Propriedades Imaxe",
+FlashProperties		: "Propriedades Flash",
+
+AnchorProp			: "Propriedades da Referencia",
+ButtonProp			: "Propriedades do Botón",
+CheckboxProp		: "Propriedades do Cadro de Verificación",
+HiddenFieldProp		: "Propriedades do Campo Oculto",
+RadioButtonProp		: "Propriedades do Botón de Radio",
+ImageButtonProp		: "Propriedades do Botón de Imaxe",
+TextFieldProp		: "Propriedades do Campo de Texto",
+SelectionFieldProp	: "Propriedades do Campo de Selección",
+TextareaProp		: "Propriedades da Área de Texto",
+FormProp			: "Propriedades do Formulario",
+
+FontFormats			: "Normal;Formateado;Enderezo;Enacabezado 1;Encabezado 2;Encabezado 3;Encabezado 4;Encabezado 5;Encabezado 6;Paragraph (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "Procesando XHTML. Por facor, agarde...",
+Done				: "Feiro",
+PasteWordConfirm	: "Parece que o texto que quere pegar está copiado do Word.¿Quere limpar o formato antes de pegalo?",
+NotCompatiblePaste	: "Este comando está disponible para Internet Explorer versión 5.5 ou superior. ¿Quere pegalo sen limpar o formato?",
+UnknownToolbarItem	: "Ítem de ferramentas descoñecido \"%1\"",
+UnknownCommand		: "Nome de comando descoñecido \"%1\"",
+NotImplemented		: "Comando non implementado",
+UnknownToolbarSet	: "O conxunto de ferramentas \"%1\" non existe",
+NoActiveX			: "As opcións de seguridade do seu navegador poderían limitar algunha das características de editor. Debe activar a opción \"Executar controis ActiveX e plug-ins\". Pode notar que faltan características e experimentar erros",
+BrowseServerBlocked : "Non se poido abrir o navegador de recursos. Asegúrese de que están desactivados os bloqueadores de xanelas emerxentes",
+DialogBlocked		: "Non foi posible abrir a xanela de diálogo. Asegúrese de que están desactivados os bloqueadores de xanelas emerxentes",
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Cancelar",
+DlgBtnClose			: "Pechar",
+DlgBtnBrowseServer	: "Navegar no Servidor",
+DlgAdvancedTag		: "Advanzado",
+DlgOpOther			: "<Outro>",
+DlgInfoTab			: "Info",
+DlgAlertUrl			: "Por favor, insira a URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<non definido>",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Orientación do Idioma",
+DlgGenLangDirLtr	: "Esquerda a Dereita (LTR)",
+DlgGenLangDirRtl	: "Dereita a Esquerda (RTL)",
+DlgGenLangCode		: "Código do Idioma",
+DlgGenAccessKey		: "Chave de Acceso",
+DlgGenName			: "Nome",
+DlgGenTabIndex		: "Índice de Tabulación",
+DlgGenLongDescr		: "Descrición Completa da URL",
+DlgGenClass			: "Clases da Folla de Estilos",
+DlgGenTitle			: "Título",
+DlgGenContType		: "Tipo de Contido",
+DlgGenLinkCharset	: "Fonte de Caracteres Vinculado",
+DlgGenStyle			: "Estilo",
+
+// Image Dialog
+DlgImgTitle			: "Propriedades da Imaxe",
+DlgImgInfoTab		: "Información da Imaxe",
+DlgImgBtnUpload		: "Enviar ó Servidor",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Carregar",
+DlgImgAlt			: "Texto Alternativo",
+DlgImgWidth			: "Largura",
+DlgImgHeight		: "Altura",
+DlgImgLockRatio		: "Proporcional",
+DlgBtnResetSize		: "Tamaño Orixinal",
+DlgImgBorder		: "Límite",
+DlgImgHSpace		: "Esp. Horiz.",
+DlgImgVSpace		: "Esp. Vert.",
+DlgImgAlign			: "Aliñamento",
+DlgImgAlignLeft		: "Esquerda",
+DlgImgAlignAbsBottom: "Abs Inferior",
+DlgImgAlignAbsMiddle: "Abs Centro",
+DlgImgAlignBaseline	: "Liña Base",
+DlgImgAlignBottom	: "Pé",
+DlgImgAlignMiddle	: "Centro",
+DlgImgAlignRight	: "Dereita",
+DlgImgAlignTextTop	: "Tope do Texto",
+DlgImgAlignTop		: "Tope",
+DlgImgPreview		: "Vista Previa",
+DlgImgAlertUrl		: "Por favor, escriba a URL da imaxe",
+DlgImgLinkTab		: "Ligazón",
+
+// Flash Dialog
+DlgFlashTitle		: "Propriedades Flash",
+DlgFlashChkPlay		: "Auto Execución",
+DlgFlashChkLoop		: "Bucle",
+DlgFlashChkMenu		: "Activar Menú Flash",
+DlgFlashScale		: "Escalar",
+DlgFlashScaleAll	: "Amosar Todo",
+DlgFlashScaleNoBorder	: "Sen Borde",
+DlgFlashScaleFit	: "Encaixar axustando",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Ligazón",
+DlgLnkInfoTab		: "Información da Ligazón",
+DlgLnkTargetTab		: "Referencia a esta páxina",
+
+DlgLnkType			: "Tipo de Ligazón",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Referencia nesta páxina",
+DlgLnkTypeEMail		: "E-Mail",
+DlgLnkProto			: "Protocolo",
+DlgLnkProtoOther	: "<outro>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Seleccionar unha Referencia",
+DlgLnkAnchorByName	: "Por Nome de Referencia",
+DlgLnkAnchorById	: "Por Element Id",
+DlgLnkNoAnchors		: "(Non hai referencias disponibles no documento)",
+DlgLnkEMail			: "Enderezo de E-Mail",
+DlgLnkEMailSubject	: "Asunto do Mensaxe",
+DlgLnkEMailBody		: "Corpo do Mensaxe",
+DlgLnkUpload		: "Carregar",
+DlgLnkBtnUpload		: "Enviar ó servidor",
+
+DlgLnkTarget		: "Destino",
+DlgLnkTargetFrame	: "<frame>",
+DlgLnkTargetPopup	: "<Xanela Emerxente>",
+DlgLnkTargetBlank	: "Nova Xanela (_blank)",
+DlgLnkTargetParent	: "Xanela Pai (_parent)",
+DlgLnkTargetSelf	: "Mesma Xanela (_self)",
+DlgLnkTargetTop		: "Xanela Primaria (_top)",
+DlgLnkTargetFrameName	: "Nome do Marco Destino",
+DlgLnkPopWinName	: "Nome da Xanela Emerxente",
+DlgLnkPopWinFeat	: "Características da Xanela Emerxente",
+DlgLnkPopResize		: "Axustable",
+DlgLnkPopLocation	: "Barra de Localización",
+DlgLnkPopMenu		: "Barra de Menú",
+DlgLnkPopScroll		: "Barras de Desplazamento",
+DlgLnkPopStatus		: "Barra de Estado",
+DlgLnkPopToolbar	: "Barra de Ferramentas",
+DlgLnkPopFullScrn	: "A Toda Pantalla (IE)",
+DlgLnkPopDependent	: "Dependente (Netscape)",
+DlgLnkPopWidth		: "Largura",
+DlgLnkPopHeight		: "Altura",
+DlgLnkPopLeft		: "Posición Esquerda",
+DlgLnkPopTop		: "Posición dende Arriba",
+
+DlnLnkMsgNoUrl		: "Por favor, escriba a ligazón URL",
+DlnLnkMsgNoEMail	: "Por favor, escriba o enderezo de e-mail",
+DlnLnkMsgNoAnchor	: "Por favor, seleccione un destino",
+DlnLnkMsgInvPopName	: "The popup name must begin with an alphabetic character and must not contain spaces",	//MISSING
+
+// Color Dialog
+DlgColorTitle		: "Seleccionar Color",
+DlgColorBtnClear	: "Nengunha",
+DlgColorHighlight	: "Destacado",
+DlgColorSelected	: "Seleccionado",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Inserte un Smiley",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Seleccione Caracter Especial",
+
+// Table Dialog
+DlgTableTitle		: "Propiedades da Táboa",
+DlgTableRows		: "Filas",
+DlgTableColumns		: "Columnas",
+DlgTableBorder		: "Tamaño do Borde",
+DlgTableAlign		: "Aliñamento",
+DlgTableAlignNotSet	: "<Non Definido>",
+DlgTableAlignLeft	: "Esquerda",
+DlgTableAlignCenter	: "Centro",
+DlgTableAlignRight	: "Ereita",
+DlgTableWidth		: "Largura",
+DlgTableWidthPx		: "pixels",
+DlgTableWidthPc		: "percent",
+DlgTableHeight		: "Altura",
+DlgTableCellSpace	: "Marxe entre Celas",
+DlgTableCellPad		: "Marxe interior",
+DlgTableCaption		: "Título",
+DlgTableSummary		: "Sumario",
+
+// Table Cell Dialog
+DlgCellTitle		: "Propriedades da Cela",
+DlgCellWidth		: "Largura",
+DlgCellWidthPx		: "pixels",
+DlgCellWidthPc		: "percent",
+DlgCellHeight		: "Altura",
+DlgCellWordWrap		: "Axustar Liñas",
+DlgCellWordWrapNotSet	: "<Non Definido>",
+DlgCellWordWrapYes	: "Si",
+DlgCellWordWrapNo	: "Non",
+DlgCellHorAlign		: "Aliñamento Horizontal",
+DlgCellHorAlignNotSet	: "<Non definido>",
+DlgCellHorAlignLeft	: "Esquerda",
+DlgCellHorAlignCenter	: "Centro",
+DlgCellHorAlignRight: "Dereita",
+DlgCellVerAlign		: "Aliñamento Vertical",
+DlgCellVerAlignNotSet	: "<Non definido>",
+DlgCellVerAlignTop	: "Arriba",
+DlgCellVerAlignMiddle	: "Medio",
+DlgCellVerAlignBottom	: "Abaixo",
+DlgCellVerAlignBaseline	: "Liña de Base",
+DlgCellRowSpan		: "Ocupar Filas",
+DlgCellCollSpan		: "Ocupar Columnas",
+DlgCellBackColor	: "Color de Fondo",
+DlgCellBorderColor	: "Color de Borde",
+DlgCellBtnSelect	: "Seleccionar...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Find and Replace",	//MISSING
+
+// Find Dialog
+DlgFindTitle		: "Procurar",
+DlgFindFindBtn		: "Procurar",
+DlgFindNotFoundMsg	: "Non te atopou o texto indicado.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Substituir",
+DlgReplaceFindLbl		: "Texto a procurar:",
+DlgReplaceReplaceLbl	: "Substituir con:",
+DlgReplaceCaseChk		: "Coincidir Mai./min.",
+DlgReplaceReplaceBtn	: "Substituir",
+DlgReplaceReplAllBtn	: "Substitiur Todo",
+DlgReplaceWordChk		: "Coincidir con toda a palabra",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "Os axustes de seguridade do seu navegador non permiten que o editor realice automáticamente as tarefas de corte. Por favor, use o teclado para iso (Ctrl+X).",
+PasteErrorCopy	: "Os axustes de seguridade do seu navegador non permiten que o editor realice automáticamente as tarefas de copia. Por favor, use o teclado para iso (Ctrl+C).",
+
+PasteAsText		: "Pegar como texto plano",
+PasteFromWord	: "Pegar dende Word",
+
+DlgPasteMsg2	: "Por favor, pegue dentro do seguinte cadro usando o teclado (<STRONG>Ctrl+V</STRONG>) e pulse <STRONG>OK</STRONG>.",
+DlgPasteSec		: "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.",	//MISSING
+DlgPasteIgnoreFont		: "Ignorar as definicións de Tipografía",
+DlgPasteRemoveStyles	: "Eliminar as definicións de Estilos",
+DlgPasteCleanBox		: "Limpar o Cadro",
+
+// Color Picker
+ColorAutomatic	: "Automático",
+ColorMoreColors	: "Máis Cores...",
+
+// Document Properties
+DocProps		: "Propriedades do Documento",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Propriedades da Referencia",
+DlgAnchorName		: "Nome da Referencia",
+DlgAnchorErrorName	: "Por favor, escriba o nome da referencia",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Non está no diccionario",
+DlgSpellChangeTo		: "Cambiar a",
+DlgSpellBtnIgnore		: "Ignorar",
+DlgSpellBtnIgnoreAll	: "Ignorar Todas",
+DlgSpellBtnReplace		: "Substituir",
+DlgSpellBtnReplaceAll	: "Substituir Todas",
+DlgSpellBtnUndo			: "Desfacer",
+DlgSpellNoSuggestions	: "- Sen candidatos -",
+DlgSpellProgress		: "Corrección ortográfica en progreso...",
+DlgSpellNoMispell		: "Corrección ortográfica rematada: Non se atoparon erros",
+DlgSpellNoChanges		: "Corrección ortográfica rematada: Non se substituiu nengunha verba",
+DlgSpellOneChange		: "Corrección ortográfica rematada: Unha verba substituida",
+DlgSpellManyChanges		: "Corrección ortográfica rematada: %1 verbas substituidas",
+
+IeSpellDownload			: "O corrector ortográfico non está instalado. ¿Quere descargalo agora?",
+
+// Button Dialog
+DlgButtonText		: "Texto (Valor)",
+DlgButtonType		: "Tipo",
+DlgButtonTypeBtn	: "Button",	//MISSING
+DlgButtonTypeSbm	: "Submit",	//MISSING
+DlgButtonTypeRst	: "Reset",	//MISSING
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Nome",
+DlgCheckboxValue	: "Valor",
+DlgCheckboxSelected	: "Seleccionado",
+
+// Form Dialog
+DlgFormName		: "Nome",
+DlgFormAction	: "Acción",
+DlgFormMethod	: "Método",
+
+// Select Field Dialog
+DlgSelectName		: "Nome",
+DlgSelectValue		: "Valor",
+DlgSelectSize		: "Tamaño",
+DlgSelectLines		: "liñas",
+DlgSelectChkMulti	: "Permitir múltiples seleccións",
+DlgSelectOpAvail	: "Opcións Disponibles",
+DlgSelectOpText		: "Texto",
+DlgSelectOpValue	: "Valor",
+DlgSelectBtnAdd		: "Engadir",
+DlgSelectBtnModify	: "Modificar",
+DlgSelectBtnUp		: "Subir",
+DlgSelectBtnDown	: "Baixar",
+DlgSelectBtnSetValue : "Definir como valor por defecto",
+DlgSelectBtnDelete	: "Borrar",
+
+// Textarea Dialog
+DlgTextareaName	: "Nome",
+DlgTextareaCols	: "Columnas",
+DlgTextareaRows	: "Filas",
+
+// Text Field Dialog
+DlgTextName			: "Nome",
+DlgTextValue		: "Valor",
+DlgTextCharWidth	: "Tamaño do Caracter",
+DlgTextMaxChars		: "Máximo de Caracteres",
+DlgTextType			: "Tipo",
+DlgTextTypeText		: "Texto",
+DlgTextTypePass		: "Chave",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Nome",
+DlgHiddenValue	: "Valor",
+
+// Bulleted List Dialog
+BulletedListProp	: "Propriedades das Marcas",
+NumberedListProp	: "Propriedades da Lista de Numeración",
+DlgLstStart			: "Start",	//MISSING
+DlgLstType			: "Tipo",
+DlgLstTypeCircle	: "Círculo",
+DlgLstTypeDisc		: "Disco",
+DlgLstTypeSquare	: "Cuadrado",
+DlgLstTypeNumbers	: "Números (1, 2, 3)",
+DlgLstTypeLCase		: "Letras Minúsculas (a, b, c)",
+DlgLstTypeUCase		: "Letras Maiúsculas (A, B, C)",
+DlgLstTypeSRoman	: "Números Romanos en minúscula (i, ii, iii)",
+DlgLstTypeLRoman	: "Números Romanos en Maiúscula (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Xeral",
+DlgDocBackTab		: "Fondo",
+DlgDocColorsTab		: "Cores e Marxes",
+DlgDocMetaTab		: "Meta Data",
+
+DlgDocPageTitle		: "Título da Páxina",
+DlgDocLangDir		: "Orientación do Idioma",
+DlgDocLangDirLTR	: "Esquerda a Dereita (LTR)",
+DlgDocLangDirRTL	: "Dereita a Esquerda (RTL)",
+DlgDocLangCode		: "Código de Idioma",
+DlgDocCharSet		: "Codificación do Xogo de Caracteres",
+DlgDocCharSetCE		: "Central European",	//MISSING
+DlgDocCharSetCT		: "Chinese Traditional (Big5)",	//MISSING
+DlgDocCharSetCR		: "Cyrillic",	//MISSING
+DlgDocCharSetGR		: "Greek",	//MISSING
+DlgDocCharSetJP		: "Japanese",	//MISSING
+DlgDocCharSetKR		: "Korean",	//MISSING
+DlgDocCharSetTR		: "Turkish",	//MISSING
+DlgDocCharSetUN		: "Unicode (UTF-8)",	//MISSING
+DlgDocCharSetWE		: "Western European",	//MISSING
+DlgDocCharSetOther	: "Outra Codificación do Xogo de Caracteres",
+
+DlgDocDocType		: "Encabezado do Tipo de Documento",
+DlgDocDocTypeOther	: "Outro Encabezado do Tipo de Documento",
+DlgDocIncXHTML		: "Incluir Declaracións XHTML",
+DlgDocBgColor		: "Cor de Fondo",
+DlgDocBgImage		: "URL da Imaxe de Fondo",
+DlgDocBgNoScroll	: "Fondo Fixo",
+DlgDocCText			: "Texto",
+DlgDocCLink			: "Ligazóns",
+DlgDocCVisited		: "Ligazón Visitada",
+DlgDocCActive		: "Ligazón Activa",
+DlgDocMargins		: "Marxes da Páxina",
+DlgDocMaTop			: "Arriba",
+DlgDocMaLeft		: "Esquerda",
+DlgDocMaRight		: "Dereita",
+DlgDocMaBottom		: "Abaixo",
+DlgDocMeIndex		: "Palabras Chave de Indexación do Documento (separadas por comas)",
+DlgDocMeDescr		: "Descripción do Documento",
+DlgDocMeAuthor		: "Autor",
+DlgDocMeCopy		: "Copyright",
+DlgDocPreview		: "Vista Previa",
+
+// Templates Dialog
+Templates			: "Plantillas",
+DlgTemplatesTitle	: "Plantillas de Contido",
+DlgTemplatesSelMsg	: "Por favor, seleccione a plantilla a abrir no editor<br>(o contido actual perderase):",
+DlgTemplatesLoading	: "Cargando listado de plantillas. Por favor, espere...",
+DlgTemplatesNoTpl	: "(Non hai plantillas definidas)",
+DlgTemplatesReplace	: "Replace actual contents",	//MISSING
+
+// About Dialog
+DlgAboutAboutTab	: "Acerca de",
+DlgAboutBrowserInfoTab	: "Información do Navegador",
+DlgAboutLicenseTab	: "Licencia",
+DlgAboutVersion		: "versión",
+DlgAboutInfo		: "Para máis información visitar:"
+};
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/he.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/he.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/he.js	(revision 1280)
@@ -0,0 +1,516 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Hebrew language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "rtl",
+
+ToolbarCollapse		: "כיווץ סרגל הכלים",
+ToolbarExpand		: "פתיחת סרגל הכלים",
+
+// Toolbar Items and Context Menu
+Save				: "שמירה",
+NewPage				: "דף חדש",
+Preview				: "תצוגה מקדימה",
+Cut					: "גזירה",
+Copy				: "העתקה",
+Paste				: "הדבקה",
+PasteText			: "הדבקה כטקסט פשוט",
+PasteWord			: "הדבקה מ-וורד",
+Print				: "הדפסה",
+SelectAll			: "בחירת הכל",
+RemoveFormat		: "הסרת העיצוב",
+InsertLinkLbl		: "קישור",
+InsertLink			: "הוספת/עריכת קישור",
+RemoveLink			: "הסרת הקישור",
+Anchor				: "הוספת/עריכת נקודת עיגון",
+AnchorDelete		: "הסר נקודת עיגון",
+InsertImageLbl		: "תמונה",
+InsertImage			: "הוספת/עריכת תמונה",
+InsertFlashLbl		: "פלאש",
+InsertFlash			: "הוסף/ערוך פלאש",
+InsertTableLbl		: "טבלה",
+InsertTable			: "הוספת/עריכת טבלה",
+InsertLineLbl		: "קו",
+InsertLine			: "הוספת קו אופקי",
+InsertSpecialCharLbl: "תו מיוחד",
+InsertSpecialChar	: "הוספת תו מיוחד",
+InsertSmileyLbl		: "סמיילי",
+InsertSmiley		: "הוספת סמיילי",
+About				: "אודות FCKeditor",
+Bold				: "מודגש",
+Italic				: "נטוי",
+Underline			: "קו תחתון",
+StrikeThrough		: "כתיב מחוק",
+Subscript			: "כתיב תחתון",
+Superscript			: "כתיב עליון",
+LeftJustify			: "יישור לשמאל",
+CenterJustify		: "מרכוז",
+RightJustify		: "יישור לימין",
+BlockJustify		: "יישור לשוליים",
+DecreaseIndent		: "הקטנת אינדנטציה",
+IncreaseIndent		: "הגדלת אינדנטציה",
+Blockquote			: "בלוק ציטוט",
+Undo				: "ביטול צעד אחרון",
+Redo				: "חזרה על צעד אחרון",
+NumberedListLbl		: "רשימה ממוספרת",
+NumberedList		: "הוספת/הסרת רשימה ממוספרת",
+BulletedListLbl		: "רשימת נקודות",
+BulletedList		: "הוספת/הסרת רשימת נקודות",
+ShowTableBorders	: "הצגת מסגרת הטבלה",
+ShowDetails			: "הצגת פרטים",
+Style				: "סגנון",
+FontFormat			: "עיצוב",
+Font				: "גופן",
+FontSize			: "גודל",
+TextColor			: "צבע טקסט",
+BGColor				: "צבע רקע",
+Source				: "מקור",
+Find				: "חיפוש",
+Replace				: "החלפה",
+SpellCheck			: "בדיקת איות",
+UniversalKeyboard	: "מקלדת אוניברסלית",
+PageBreakLbl		: "שבירת דף",
+PageBreak			: "הוסף שבירת דף",
+
+Form			: "טופס",
+Checkbox		: "תיבת סימון",
+RadioButton		: "לחצן אפשרויות",
+TextField		: "שדה טקסט",
+Textarea		: "איזור טקסט",
+HiddenField		: "שדה חבוי",
+Button			: "כפתור",
+SelectionField	: "שדה בחירה",
+ImageButton		: "כפתור תמונה",
+
+FitWindow		: "הגדל את גודל העורך",
+ShowBlocks		: "הצג בלוקים",
+
+// Context Menu
+EditLink			: "עריכת קישור",
+CellCM				: "תא",
+RowCM				: "שורה",
+ColumnCM			: "עמודה",
+InsertRowAfter		: "הוסף שורה אחרי",
+InsertRowBefore		: "הוסף שורה לפני",
+DeleteRows			: "מחיקת שורות",
+InsertColumnAfter	: "הוסף עמודה אחרי",
+InsertColumnBefore	: "הוסף עמודה לפני",
+DeleteColumns		: "מחיקת עמודות",
+InsertCellAfter		: "הוסף תא אחרי",
+InsertCellBefore	: "הוסף תא אחרי",
+DeleteCells			: "מחיקת תאים",
+MergeCells			: "מיזוג תאים",
+MergeRight			: "מזג ימינה",
+MergeDown			: "מזג למטה",
+HorizontalSplitCell	: "פצל תא אופקית",
+VerticalSplitCell	: "פצל תא אנכית",
+TableDelete			: "מחק טבלה",
+CellProperties		: "תכונות התא",
+TableProperties		: "תכונות הטבלה",
+ImageProperties		: "תכונות התמונה",
+FlashProperties		: "מאפייני פלאש",
+
+AnchorProp			: "מאפייני נקודת עיגון",
+ButtonProp			: "מאפייני כפתור",
+CheckboxProp		: "מאפייני תיבת סימון",
+HiddenFieldProp		: "מאפיני שדה חבוי",
+RadioButtonProp		: "מאפייני לחצן אפשרויות",
+ImageButtonProp		: "מאפיני כפתור תמונה",
+TextFieldProp		: "מאפייני שדה טקסט",
+SelectionFieldProp	: "מאפייני שדה בחירה",
+TextareaProp		: "מאפיני איזור טקסט",
+FormProp			: "מאפיני טופס",
+
+FontFormats			: "נורמלי;קוד;כתובת;כותרת;כותרת 2;כותרת 3;כותרת 4;כותרת 5;כותרת 6",
+
+// Alerts and Messages
+ProcessingXHTML		: "מעבד XHTML, נא להמתין...",
+Done				: "המשימה הושלמה",
+PasteWordConfirm	: "נראה הטקסט שבכוונתך להדביק מקורו בקובץ וורד. האם ברצונך לנקות אותו טרם ההדבקה?",
+NotCompatiblePaste	: "פעולה זו זמינה לדפדפן אינטרנט אקספלורר מגירסא 5.5 ומעלה. האם להמשיך בהדבקה ללא הניקוי?",
+UnknownToolbarItem	: "פריט לא ידוע בסרגל הכלים \"%1\"",
+UnknownCommand		: "שם פעולה לא ידוע \"%1\"",
+NotImplemented		: "הפקודה לא מיושמת",
+UnknownToolbarSet	: "ערכת סרגל הכלים \"%1\" לא קיימת",
+NoActiveX			: "הגדרות אבטחה של הדפדפן עלולות לגביל את אפשרויות העריכה.יש לאפשר את האופציה \"הרץ פקדים פעילים ותוספות\". תוכל לחוות טעויות וחיווים של אפשרויות שחסרים.",
+BrowseServerBlocked : "לא ניתן לגשת לדפדפן משאבים.אנא וודא שחוסם חלונות הקופצים לא פעיל.",
+DialogBlocked		: "לא היה ניתן לפתוח חלון דיאלוג. אנא וודא שחוסם חלונות קופצים לא פעיל.",
+
+// Dialogs
+DlgBtnOK			: "אישור",
+DlgBtnCancel		: "ביטול",
+DlgBtnClose			: "סגירה",
+DlgBtnBrowseServer	: "סייר השרת",
+DlgAdvancedTag		: "אפשרויות מתקדמות",
+DlgOpOther			: "<אחר>",
+DlgInfoTab			: "מידע",
+DlgAlertUrl			: "אנה הזן URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<לא נקבע>",
+DlgGenId			: "זיהוי (Id)",
+DlgGenLangDir		: "כיוון שפה",
+DlgGenLangDirLtr	: "שמאל לימין (LTR)",
+DlgGenLangDirRtl	: "ימין לשמאל (RTL)",
+DlgGenLangCode		: "קוד שפה",
+DlgGenAccessKey		: "מקש גישה",
+DlgGenName			: "שם",
+DlgGenTabIndex		: "מספר טאב",
+DlgGenLongDescr		: "קישור לתיאור מפורט",
+DlgGenClass			: "גיליונות עיצוב קבוצות",
+DlgGenTitle			: "כותרת מוצעת",
+DlgGenContType		: "Content Type מוצע",
+DlgGenLinkCharset	: "קידוד המשאב המקושר",
+DlgGenStyle			: "סגנון",
+
+// Image Dialog
+DlgImgTitle			: "תכונות התמונה",
+DlgImgInfoTab		: "מידע על התמונה",
+DlgImgBtnUpload		: "שליחה לשרת",
+DlgImgURL			: "כתובת (URL)",
+DlgImgUpload		: "העלאה",
+DlgImgAlt			: "טקסט חלופי",
+DlgImgWidth			: "רוחב",
+DlgImgHeight		: "גובה",
+DlgImgLockRatio		: "נעילת היחס",
+DlgBtnResetSize		: "איפוס הגודל",
+DlgImgBorder		: "מסגרת",
+DlgImgHSpace		: "מרווח אופקי",
+DlgImgVSpace		: "מרווח אנכי",
+DlgImgAlign			: "יישור",
+DlgImgAlignLeft		: "לשמאל",
+DlgImgAlignAbsBottom: "לתחתית האבסולוטית",
+DlgImgAlignAbsMiddle: "מרכוז אבסולוטי",
+DlgImgAlignBaseline	: "לקו התחתית",
+DlgImgAlignBottom	: "לתחתית",
+DlgImgAlignMiddle	: "לאמצע",
+DlgImgAlignRight	: "לימין",
+DlgImgAlignTextTop	: "לראש הטקסט",
+DlgImgAlignTop		: "למעלה",
+DlgImgPreview		: "תצוגה מקדימה",
+DlgImgAlertUrl		: "נא להקליד את כתובת התמונה",
+DlgImgLinkTab		: "קישור",
+
+// Flash Dialog
+DlgFlashTitle		: "מאפיני פלאש",
+DlgFlashChkPlay		: "נגן אוטומטי",
+DlgFlashChkLoop		: "לולאה",
+DlgFlashChkMenu		: "אפשר תפריט פלאש",
+DlgFlashScale		: "גודל",
+DlgFlashScaleAll	: "הצג הכל",
+DlgFlashScaleNoBorder	: "ללא גבולות",
+DlgFlashScaleFit	: "התאמה מושלמת",
+
+// Link Dialog
+DlgLnkWindowTitle	: "קישור",
+DlgLnkInfoTab		: "מידע על הקישור",
+DlgLnkTargetTab		: "מטרה",
+
+DlgLnkType			: "סוג קישור",
+DlgLnkTypeURL		: "כתובת (URL)",
+DlgLnkTypeAnchor	: "עוגן בעמוד זה",
+DlgLnkTypeEMail		: "דוא''ל",
+DlgLnkProto			: "פרוטוקול",
+DlgLnkProtoOther	: "<אחר>",
+DlgLnkURL			: "כתובת (URL)",
+DlgLnkAnchorSel		: "בחירת עוגן",
+DlgLnkAnchorByName	: "עפ''י שם העוגן",
+DlgLnkAnchorById	: "עפ''י זיהוי (Id) הרכיב",
+DlgLnkNoAnchors		: "(אין עוגנים זמינים בדף)",
+DlgLnkEMail			: "כתובת הדוא''ל",
+DlgLnkEMailSubject	: "נושא ההודעה",
+DlgLnkEMailBody		: "גוף ההודעה",
+DlgLnkUpload		: "העלאה",
+DlgLnkBtnUpload		: "שליחה לשרת",
+
+DlgLnkTarget		: "מטרה",
+DlgLnkTargetFrame	: "<מסגרת>",
+DlgLnkTargetPopup	: "<חלון קופץ>",
+DlgLnkTargetBlank	: "חלון חדש (_blank)",
+DlgLnkTargetParent	: "חלון האב (_parent)",
+DlgLnkTargetSelf	: "באותו החלון (_self)",
+DlgLnkTargetTop		: "חלון ראשי (_top)",
+DlgLnkTargetFrameName	: "שם מסגרת היעד",
+DlgLnkPopWinName	: "שם החלון הקופץ",
+DlgLnkPopWinFeat	: "תכונות החלון הקופץ",
+DlgLnkPopResize		: "בעל גודל ניתן לשינוי",
+DlgLnkPopLocation	: "סרגל כתובת",
+DlgLnkPopMenu		: "סרגל תפריט",
+DlgLnkPopScroll		: "ניתן לגלילה",
+DlgLnkPopStatus		: "סרגל חיווי",
+DlgLnkPopToolbar	: "סרגל הכלים",
+DlgLnkPopFullScrn	: "מסך מלא (IE)",
+DlgLnkPopDependent	: "תלוי (Netscape)",
+DlgLnkPopWidth		: "רוחב",
+DlgLnkPopHeight		: "גובה",
+DlgLnkPopLeft		: "מיקום צד שמאל",
+DlgLnkPopTop		: "מיקום צד עליון",
+
+DlnLnkMsgNoUrl		: "נא להקליד את כתובת הקישור (URL)",
+DlnLnkMsgNoEMail	: "נא להקליד את כתובת הדוא''ל",
+DlnLnkMsgNoAnchor	: "נא לבחור עוגן במסמך",
+DlnLnkMsgInvPopName	: "שם החלון הקופץ חייב להתחיל באותיות ואסור לכלול רווחים",
+
+// Color Dialog
+DlgColorTitle		: "בחירת צבע",
+DlgColorBtnClear	: "איפוס",
+DlgColorHighlight	: "נוכחי",
+DlgColorSelected	: "נבחר",
+
+// Smiley Dialog
+DlgSmileyTitle		: "הוספת סמיילי",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "בחירת תו מיוחד",
+
+// Table Dialog
+DlgTableTitle		: "תכונות טבלה",
+DlgTableRows		: "שורות",
+DlgTableColumns		: "עמודות",
+DlgTableBorder		: "גודל מסגרת",
+DlgTableAlign		: "יישור",
+DlgTableAlignNotSet	: "<לא נקבע>",
+DlgTableAlignLeft	: "שמאל",
+DlgTableAlignCenter	: "מרכז",
+DlgTableAlignRight	: "ימין",
+DlgTableWidth		: "רוחב",
+DlgTableWidthPx		: "פיקסלים",
+DlgTableWidthPc		: "אחוז",
+DlgTableHeight		: "גובה",
+DlgTableCellSpace	: "מרווח תא",
+DlgTableCellPad		: "ריפוד תא",
+DlgTableCaption		: "כיתוב",
+DlgTableSummary		: "סיכום",
+
+// Table Cell Dialog
+DlgCellTitle		: "תכונות תא",
+DlgCellWidth		: "רוחב",
+DlgCellWidthPx		: "פיקסלים",
+DlgCellWidthPc		: "אחוז",
+DlgCellHeight		: "גובה",
+DlgCellWordWrap		: "גלילת שורות",
+DlgCellWordWrapNotSet	: "<לא נקבע>",
+DlgCellWordWrapYes	: "כן",
+DlgCellWordWrapNo	: "לא",
+DlgCellHorAlign		: "יישור אופקי",
+DlgCellHorAlignNotSet	: "<לא נקבע>",
+DlgCellHorAlignLeft	: "שמאל",
+DlgCellHorAlignCenter	: "מרכז",
+DlgCellHorAlignRight: "ימין",
+DlgCellVerAlign		: "יישור אנכי",
+DlgCellVerAlignNotSet	: "<לא נקבע>",
+DlgCellVerAlignTop	: "למעלה",
+DlgCellVerAlignMiddle	: "לאמצע",
+DlgCellVerAlignBottom	: "לתחתית",
+DlgCellVerAlignBaseline	: "קו תחתית",
+DlgCellRowSpan		: "טווח שורות",
+DlgCellCollSpan		: "טווח עמודות",
+DlgCellBackColor	: "צבע רקע",
+DlgCellBorderColor	: "צבע מסגרת",
+DlgCellBtnSelect	: "בחירה...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "חפש והחלף",
+
+// Find Dialog
+DlgFindTitle		: "חיפוש",
+DlgFindFindBtn		: "חיפוש",
+DlgFindNotFoundMsg	: "הטקסט המבוקש לא נמצא.",
+
+// Replace Dialog
+DlgReplaceTitle			: "החלפה",
+DlgReplaceFindLbl		: "חיפוש מחרוזת:",
+DlgReplaceReplaceLbl	: "החלפה במחרוזת:",
+DlgReplaceCaseChk		: "התאמת סוג אותיות (Case)",
+DlgReplaceReplaceBtn	: "החלפה",
+DlgReplaceReplAllBtn	: "החלפה בכל העמוד",
+DlgReplaceWordChk		: "התאמה למילה המלאה",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "הגדרות האבטחה בדפדפן שלך לא מאפשרות לעורך לבצע פעולות גזירה  אוטומטיות. יש להשתמש במקלדת לשם כך (Ctrl+X).",
+PasteErrorCopy	: "הגדרות האבטחה בדפדפן שלך לא מאפשרות לעורך לבצע פעולות העתקה אוטומטיות. יש להשתמש במקלדת לשם כך (Ctrl+C).",
+
+PasteAsText		: "הדבקה כטקסט פשוט",
+PasteFromWord	: "הדבקה מ-וורד",
+
+DlgPasteMsg2	: "אנא הדבק בתוך הקופסה באמצעות  (<STRONG>Ctrl+V</STRONG>) ולחץ על  <STRONG>אישור</STRONG>.",
+DlgPasteSec		: "עקב הגדרות אבטחה בדפדפן, לא ניתן לגשת אל לוח הגזירים (clipboard) בצורה ישירה.אנא בצע הדבק שוב בחלון זה.",
+DlgPasteIgnoreFont		: "התעלם מהגדרות סוג פונט",
+DlgPasteRemoveStyles	: "הסר הגדרות סגנון",
+DlgPasteCleanBox		: "ניקוי קופסה",
+
+// Color Picker
+ColorAutomatic	: "אוטומטי",
+ColorMoreColors	: "צבעים נוספים...",
+
+// Document Properties
+DocProps		: "מאפיני מסמך",
+
+// Anchor Dialog
+DlgAnchorTitle		: "מאפיני נקודת עיגון",
+DlgAnchorName		: "שם לנקודת עיגון",
+DlgAnchorErrorName	: "אנא הזן שם לנקודת עיגון",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "לא נמצא במילון",
+DlgSpellChangeTo		: "שנה ל",
+DlgSpellBtnIgnore		: "התעלם",
+DlgSpellBtnIgnoreAll	: "התעלם מהכל",
+DlgSpellBtnReplace		: "החלף",
+DlgSpellBtnReplaceAll	: "החלף הכל",
+DlgSpellBtnUndo			: "החזר",
+DlgSpellNoSuggestions	: "- אין הצעות -",
+DlgSpellProgress		: "בדיקות איות בתהליך ....",
+DlgSpellNoMispell		: "בדיקות איות הסתיימה: לא נמצאו שגיעות כתיב",
+DlgSpellNoChanges		: "בדיקות איות הסתיימה: לא שונתה אף מילה",
+DlgSpellOneChange		: "בדיקות איות הסתיימה: שונתה מילה אחת",
+DlgSpellManyChanges		: "בדיקות איות הסתיימה: %1 מילים שונו",
+
+IeSpellDownload			: "בודק האיות לא מותקן, האם אתה מעוניין להוריד?",
+
+// Button Dialog
+DlgButtonText		: "טקסט (ערך)",
+DlgButtonType		: "סוג",
+DlgButtonTypeBtn	: "כפתור",
+DlgButtonTypeSbm	: "שלח",
+DlgButtonTypeRst	: "אפס",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "שם",
+DlgCheckboxValue	: "ערך",
+DlgCheckboxSelected	: "בחור",
+
+// Form Dialog
+DlgFormName		: "שם",
+DlgFormAction	: "שלח אל",
+DlgFormMethod	: "סוג שליחה",
+
+// Select Field Dialog
+DlgSelectName		: "שם",
+DlgSelectValue		: "ערך",
+DlgSelectSize		: "גודל",
+DlgSelectLines		: "שורות",
+DlgSelectChkMulti	: "אפשר בחירות מרובות",
+DlgSelectOpAvail	: "אפשרויות זמינות",
+DlgSelectOpText		: "טקסט",
+DlgSelectOpValue	: "ערך",
+DlgSelectBtnAdd		: "הוסף",
+DlgSelectBtnModify	: "שנה",
+DlgSelectBtnUp		: "למעלה",
+DlgSelectBtnDown	: "למטה",
+DlgSelectBtnSetValue : "קבע כברירת מחדל",
+DlgSelectBtnDelete	: "מחק",
+
+// Textarea Dialog
+DlgTextareaName	: "שם",
+DlgTextareaCols	: "עמודות",
+DlgTextareaRows	: "שורות",
+
+// Text Field Dialog
+DlgTextName			: "שם",
+DlgTextValue		: "ערך",
+DlgTextCharWidth	: "רוחב באותיות",
+DlgTextMaxChars		: "מקסימות אותיות",
+DlgTextType			: "סוג",
+DlgTextTypeText		: "טקסט",
+DlgTextTypePass		: "סיסמה",
+
+// Hidden Field Dialog
+DlgHiddenName	: "שם",
+DlgHiddenValue	: "ערך",
+
+// Bulleted List Dialog
+BulletedListProp	: "מאפייני רשימה",
+NumberedListProp	: "מאפייני רשימה ממוספרת",
+DlgLstStart			: "התחלה",
+DlgLstType			: "סוג",
+DlgLstTypeCircle	: "עיגול",
+DlgLstTypeDisc		: "דיסק",
+DlgLstTypeSquare	: "מרובע",
+DlgLstTypeNumbers	: "מספרים (1, 2, 3)",
+DlgLstTypeLCase		: "אותיות קטנות (a, b, c)",
+DlgLstTypeUCase		: "אותיות גדולות (A, B, C)",
+DlgLstTypeSRoman	: "ספרות רומאיות קטנות (i, ii, iii)",
+DlgLstTypeLRoman	: "ספרות רומאיות גדולות (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "כללי",
+DlgDocBackTab		: "רקע",
+DlgDocColorsTab		: "צבעים וגבולות",
+DlgDocMetaTab		: "נתוני META",
+
+DlgDocPageTitle		: "כותרת דף",
+DlgDocLangDir		: "כיוון שפה",
+DlgDocLangDirLTR	: "שמאל לימין (LTR)",
+DlgDocLangDirRTL	: "ימין לשמאל (RTL)",
+DlgDocLangCode		: "קוד שפה",
+DlgDocCharSet		: "קידוד אותיות",
+DlgDocCharSetCE		: "מרכז אירופה",
+DlgDocCharSetCT		: "סיני מסורתי (Big5)",
+DlgDocCharSetCR		: "קירילי",
+DlgDocCharSetGR		: "יוונית",
+DlgDocCharSetJP		: "יפנית",
+DlgDocCharSetKR		: "קוראנית",
+DlgDocCharSetTR		: "טורקית",
+DlgDocCharSetUN		: "יוני קוד (UTF-8)",
+DlgDocCharSetWE		: "מערב אירופה",
+DlgDocCharSetOther	: "קידוד אותיות אחר",
+
+DlgDocDocType		: "הגדרות סוג מסמך",
+DlgDocDocTypeOther	: "הגדרות סוג מסמך אחרות",
+DlgDocIncXHTML		: "כלול הגדרות XHTML",
+DlgDocBgColor		: "צבע רקע",
+DlgDocBgImage		: "URL לתמונת רקע",
+DlgDocBgNoScroll	: "רגע ללא גלילה",
+DlgDocCText			: "טקסט",
+DlgDocCLink			: "קישור",
+DlgDocCVisited		: "קישור שבוקר",
+DlgDocCActive		: " קישור פעיל",
+DlgDocMargins		: "גבולות דף",
+DlgDocMaTop			: "למעלה",
+DlgDocMaLeft		: "שמאלה",
+DlgDocMaRight		: "ימינה",
+DlgDocMaBottom		: "למטה",
+DlgDocMeIndex		: "מפתח עניינים של המסמך )מופרד בפסיק(",
+DlgDocMeDescr		: "תאור מסמך",
+DlgDocMeAuthor		: "מחבר",
+DlgDocMeCopy		: "זכויות יוצרים",
+DlgDocPreview		: "תצוגה מקדימה",
+
+// Templates Dialog
+Templates			: "תבניות",
+DlgTemplatesTitle	: "תביות תוכן",
+DlgTemplatesSelMsg	: "אנא בחר תבנית לפתיחה בעורך <BR>התוכן המקורי ימחק:",
+DlgTemplatesLoading	: "מעלה רשימת תבניות אנא המתן",
+DlgTemplatesNoTpl	: "(לא הוגדרו תבניות)",
+DlgTemplatesReplace	: "החלפת תוכן ממשי",
+
+// About Dialog
+DlgAboutAboutTab	: "אודות",
+DlgAboutBrowserInfoTab	: "גירסת דפדפן",
+DlgAboutLicenseTab	: "רשיון",
+DlgAboutVersion		: "גירסא",
+DlgAboutInfo		: "מידע נוסף ניתן למצוא כאן:"
+};
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/hi.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/hi.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/hi.js	(revision 1280)
@@ -0,0 +1,516 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Hindi language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "टूलबार सिमटायें",
+ToolbarExpand		: "टूलबार का विस्तार करें",
+
+// Toolbar Items and Context Menu
+Save				: "सेव",
+NewPage				: "नया पेज",
+Preview				: "प्रीव्यू",
+Cut					: "कट",
+Copy				: "कॉपी",
+Paste				: "पेस्ट",
+PasteText			: "पेस्ट (सादा टॅक्स्ट)",
+PasteWord			: "पेस्ट (वर्ड से)",
+Print				: "प्रिन्ट",
+SelectAll			: "सब सॅलॅक्ट करें",
+RemoveFormat		: "फ़ॉर्मैट हटायें",
+InsertLinkLbl		: "लिंक",
+InsertLink			: "लिंक इन्सर्ट/संपादन",
+RemoveLink			: "लिंक हटायें",
+Anchor				: "ऐंकर इन्सर्ट/संपादन",
+AnchorDelete		: "ऐंकर हटायें",
+InsertImageLbl		: "तस्वीर",
+InsertImage			: "तस्वीर इन्सर्ट/संपादन",
+InsertFlashLbl		: "फ़्लैश",
+InsertFlash			: "फ़्लैश इन्सर्ट/संपादन",
+InsertTableLbl		: "टेबल",
+InsertTable			: "टेबल इन्सर्ट/संपादन",
+InsertLineLbl		: "रेखा",
+InsertLine			: "हॉरिज़ॉन्टल रेखा इन्सर्ट करें",
+InsertSpecialCharLbl: "विशेष करॅक्टर",
+InsertSpecialChar	: "विशेष करॅक्टर इन्सर्ट करें",
+InsertSmileyLbl		: "स्माइली",
+InsertSmiley		: "स्माइली इन्सर्ट करें",
+About				: "FCKeditor के बारे में",
+Bold				: "बोल्ड",
+Italic				: "इटैलिक",
+Underline			: "रेखांकण",
+StrikeThrough		: "स्ट्राइक थ्रू",
+Subscript			: "अधोलेख",
+Superscript			: "अभिलेख",
+LeftJustify			: "बायीं तरफ",
+CenterJustify		: "बीच में",
+RightJustify		: "दायीं तरफ",
+BlockJustify		: "ब्लॉक जस्टीफ़ाई",
+DecreaseIndent		: "इन्डॅन्ट कम करें",
+IncreaseIndent		: "इन्डॅन्ट बढ़ायें",
+Blockquote			: "ब्लॉक-कोट",
+Undo				: "अन्डू",
+Redo				: "रीडू",
+NumberedListLbl		: "अंकीय सूची",
+NumberedList		: "अंकीय सूची इन्सर्ट/संपादन",
+BulletedListLbl		: "बुलॅट सूची",
+BulletedList		: "बुलॅट सूची इन्सर्ट/संपादन",
+ShowTableBorders	: "टेबल बॉर्डरयें दिखायें",
+ShowDetails			: "ज्यादा   दिखायें",
+Style				: "स्टाइल",
+FontFormat			: "फ़ॉर्मैट",
+Font				: "फ़ॉन्ट",
+FontSize			: "साइज़",
+TextColor			: "टेक्स्ट रंग",
+BGColor				: "बैक्ग्राउन्ड रंग",
+Source				: "सोर्स",
+Find				: "खोजें",
+Replace				: "रीप्लेस",
+SpellCheck			: "वर्तनी (स्पेलिंग) जाँच",
+UniversalKeyboard	: "यूनीवर्सल कीबोर्ड",
+PageBreakLbl		: "पेज ब्रेक",
+PageBreak			: "पेज ब्रेक इन्सर्ट् करें",
+
+Form			: "फ़ॉर्म",
+Checkbox		: "चॅक बॉक्स",
+RadioButton		: "रेडिओ बटन",
+TextField		: "टेक्स्ट फ़ील्ड",
+Textarea		: "टेक्स्ट एरिया",
+HiddenField		: "गुप्त फ़ील्ड",
+Button			: "बटन",
+SelectionField	: "चुनाव फ़ील्ड",
+ImageButton		: "तस्वीर बटन",
+
+FitWindow		: "एडिटर साइज़ को चरम सीमा तक बढ़ायें",
+ShowBlocks		: "ब्लॉक दिखायें",
+
+// Context Menu
+EditLink			: "लिंक संपादन",
+CellCM				: "खाना",
+RowCM				: "पंक्ति",
+ColumnCM			: "कालम",
+InsertRowAfter		: "बाद में पंक्ति डालें",
+InsertRowBefore		: "पहले पंक्ति डालें",
+DeleteRows			: "पंक्तियाँ डिलीट करें",
+InsertColumnAfter	: "बाद में कालम डालें",
+InsertColumnBefore	: "पहले कालम डालें",
+DeleteColumns		: "कालम डिलीट करें",
+InsertCellAfter		: "बाद में सैल डालें",
+InsertCellBefore	: "पहले सैल डालें",
+DeleteCells			: "सैल डिलीट करें",
+MergeCells			: "सैल मिलायें",
+MergeRight			: "बाँया विलय",
+MergeDown			: "नीचे विलय करें",
+HorizontalSplitCell	: "सैल को क्षैतिज स्थिति में विभाजित करें",
+VerticalSplitCell	: "सैल को लम्बाकार में विभाजित करें",
+TableDelete			: "टेबल डिलीट करें",
+CellProperties		: "सैल प्रॉपर्टीज़",
+TableProperties		: "टेबल प्रॉपर्टीज़",
+ImageProperties		: "तस्वीर प्रॉपर्टीज़",
+FlashProperties		: "फ़्लैश प्रॉपर्टीज़",
+
+AnchorProp			: "ऐंकर प्रॉपर्टीज़",
+ButtonProp			: "बटन प्रॉपर्टीज़",
+CheckboxProp		: "चॅक बॉक्स प्रॉपर्टीज़",
+HiddenFieldProp		: "गुप्त फ़ील्ड प्रॉपर्टीज़",
+RadioButtonProp		: "रेडिओ बटन प्रॉपर्टीज़",
+ImageButtonProp		: "तस्वीर बटन प्रॉपर्टीज़",
+TextFieldProp		: "टेक्स्ट फ़ील्ड प्रॉपर्टीज़",
+SelectionFieldProp	: "चुनाव फ़ील्ड प्रॉपर्टीज़",
+TextareaProp		: "टेक्स्त एरिया प्रॉपर्टीज़",
+FormProp			: "फ़ॉर्म प्रॉपर्टीज़",
+
+FontFormats			: "साधारण;फ़ॉर्मैटॅड;पता;शीर्षक 1;शीर्षक 2;शीर्षक 3;शीर्षक 4;शीर्षक 5;शीर्षक 6;शीर्षक (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "XHTML प्रोसॅस हो रहा है। ज़रा ठहरें...",
+Done				: "पूरा हुआ",
+PasteWordConfirm	: "आप जो टेक्स्ट पेस्ट करना चाहते हैं, वह वर्ड से कॉपी किया हुआ लग रहा है। क्या पेस्ट करने से पहले आप इसे साफ़ करना चाहेंगे?",
+NotCompatiblePaste	: "यह कमांड इन्टरनॅट एक्स्प्लोरर(Internet Explorer) 5.5 या उसके बाद के वर्ज़न के लिए ही उपलब्ध है। क्या आप बिना साफ़ किए पेस्ट करना चाहेंगे?",
+UnknownToolbarItem	: "अनजान टूलबार आइटम \"%1\"",
+UnknownCommand		: "अनजान कमान्ड \"%1\"",
+NotImplemented		: "कमान्ड इम्प्लीमॅन्ट नहीं किया गया है",
+UnknownToolbarSet	: "टूलबार सॅट \"%1\" उपलब्ध नहीं है",
+NoActiveX			: "आपके ब्राउज़र् की सुरक्शा सेटिंग्स् एडिटर की कुछ् फ़ीचरों को सीमित कर् सकती हैं। क्रिपया \"Run ActiveX controls and plug-ins\" विकल्प को एनेबल करें. आपको एरर्स् और गायब फ़ीचर्स् का अनुभव हो सकता है।",
+BrowseServerBlocked : "रिसोर्सेज़ ब्राउज़र् नहीं खोला जा सका। क्रिपया सभी पॉप्-अप् ब्लॉकर्स् को डिसेबल करें।",
+DialogBlocked		: "डायलग विन्डो नहीं खोला जा सका। क्रिपया सभी पॉप्-अप् ब्लॉकर्स् को डिसेबल करें।",
+
+// Dialogs
+DlgBtnOK			: "ठीक है",
+DlgBtnCancel		: "रद्द करें",
+DlgBtnClose			: "बन्द करें",
+DlgBtnBrowseServer	: "सर्वर ब्राउज़ करें",
+DlgAdvancedTag		: "ऍड्वान्स्ड",
+DlgOpOther			: "<अन्य>",
+DlgInfoTab			: "सूचना",
+DlgAlertUrl			: "URL इन्सर्ट करें",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<सॅट नहीं>",
+DlgGenId			: "Id",
+DlgGenLangDir		: "भाषा लिखने की दिशा",
+DlgGenLangDirLtr	: "बायें से दायें (LTR)",
+DlgGenLangDirRtl	: "दायें से बायें (RTL)",
+DlgGenLangCode		: "भाषा कोड",
+DlgGenAccessKey		: "ऍक्सॅस की",
+DlgGenName			: "नाम",
+DlgGenTabIndex		: "टैब इन्डॅक्स",
+DlgGenLongDescr		: "अधिक विवरण के लिए URL",
+DlgGenClass			: "स्टाइल-शीट क्लास",
+DlgGenTitle			: "परामर्श शीर्शक",
+DlgGenContType		: "परामर्श कन्टॅन्ट प्रकार",
+DlgGenLinkCharset	: "लिंक रिसोर्स करॅक्टर सॅट",
+DlgGenStyle			: "स्टाइल",
+
+// Image Dialog
+DlgImgTitle			: "तस्वीर प्रॉपर्टीज़",
+DlgImgInfoTab		: "तस्वीर की जानकारी",
+DlgImgBtnUpload		: "इसे सर्वर को भेजें",
+DlgImgURL			: "URL",
+DlgImgUpload		: "अपलोड",
+DlgImgAlt			: "वैकल्पिक टेक्स्ट",
+DlgImgWidth			: "चौड़ाई",
+DlgImgHeight		: "ऊँचाई",
+DlgImgLockRatio		: "लॉक अनुपात",
+DlgBtnResetSize		: "रीसॅट साइज़",
+DlgImgBorder		: "बॉर्डर",
+DlgImgHSpace		: "हॉरिज़ॉन्टल स्पेस",
+DlgImgVSpace		: "वर्टिकल स्पेस",
+DlgImgAlign			: "ऍलाइन",
+DlgImgAlignLeft		: "दायें",
+DlgImgAlignAbsBottom: "Abs नीचे",
+DlgImgAlignAbsMiddle: "Abs ऊपर",
+DlgImgAlignBaseline	: "मूल रेखा",
+DlgImgAlignBottom	: "नीचे",
+DlgImgAlignMiddle	: "मध्य",
+DlgImgAlignRight	: "दायें",
+DlgImgAlignTextTop	: "टेक्स्ट ऊपर",
+DlgImgAlignTop		: "ऊपर",
+DlgImgPreview		: "प्रीव्यू",
+DlgImgAlertUrl		: "तस्वीर का URL टाइप करें ",
+DlgImgLinkTab		: "लिंक",
+
+// Flash Dialog
+DlgFlashTitle		: "फ़्लैश प्रॉपर्टीज़",
+DlgFlashChkPlay		: "ऑटो प्ले",
+DlgFlashChkLoop		: "लूप",
+DlgFlashChkMenu		: "फ़्लैश मॅन्यू का प्रयोग करें",
+DlgFlashScale		: "स्केल",
+DlgFlashScaleAll	: "सभी दिखायें",
+DlgFlashScaleNoBorder	: "कोई बॉर्डर नहीं",
+DlgFlashScaleFit	: "बिल्कुल फ़िट",
+
+// Link Dialog
+DlgLnkWindowTitle	: "लिंक",
+DlgLnkInfoTab		: "लिंक  ",
+DlgLnkTargetTab		: "टार्गेट",
+
+DlgLnkType			: "लिंक प्रकार",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "इस पेज का ऐंकर",
+DlgLnkTypeEMail		: "ई-मेल",
+DlgLnkProto			: "प्रोटोकॉल",
+DlgLnkProtoOther	: "<अन्य>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "ऐंकर चुनें",
+DlgLnkAnchorByName	: "ऐंकर नाम से",
+DlgLnkAnchorById	: "ऍलीमॅन्ट Id से",
+DlgLnkNoAnchors		: "(डॉक्यूमॅन्ट में ऐंकर्स की संख्या)",
+DlgLnkEMail			: "ई-मेल पता",
+DlgLnkEMailSubject	: "संदेश विषय",
+DlgLnkEMailBody		: "संदेश",
+DlgLnkUpload		: "अपलोड",
+DlgLnkBtnUpload		: "इसे सर्वर को भेजें",
+
+DlgLnkTarget		: "टार्गेट",
+DlgLnkTargetFrame	: "<फ़्रेम>",
+DlgLnkTargetPopup	: "<पॉप-अप विन्डो>",
+DlgLnkTargetBlank	: "नया विन्डो (_blank)",
+DlgLnkTargetParent	: "मूल विन्डो (_parent)",
+DlgLnkTargetSelf	: "इसी विन्डो (_self)",
+DlgLnkTargetTop		: "शीर्ष विन्डो (_top)",
+DlgLnkTargetFrameName	: "टार्गेट फ़्रेम का नाम",
+DlgLnkPopWinName	: "पॉप-अप विन्डो का नाम",
+DlgLnkPopWinFeat	: "पॉप-अप विन्डो फ़ीचर्स",
+DlgLnkPopResize		: "साइज़ बदला जा सकता है",
+DlgLnkPopLocation	: "लोकेशन बार",
+DlgLnkPopMenu		: "मॅन्यू बार",
+DlgLnkPopScroll		: "स्क्रॉल बार",
+DlgLnkPopStatus		: "स्टेटस बार",
+DlgLnkPopToolbar	: "टूल बार",
+DlgLnkPopFullScrn	: "फ़ुल स्क्रीन (IE)",
+DlgLnkPopDependent	: "डिपेन्डॅन्ट (Netscape)",
+DlgLnkPopWidth		: "चौड़ाई",
+DlgLnkPopHeight		: "ऊँचाई",
+DlgLnkPopLeft		: "बायीं तरफ",
+DlgLnkPopTop		: "दायीं तरफ",
+
+DlnLnkMsgNoUrl		: "लिंक URL टाइप करें",
+DlnLnkMsgNoEMail	: "ई-मेल पता टाइप करें",
+DlnLnkMsgNoAnchor	: "ऐंकर चुनें",
+DlnLnkMsgInvPopName	: "पॉप-अप का नाम अल्फाबेट से शुरू होना चाहिये और उसमें स्पेस नहीं होने चाहिए",
+
+// Color Dialog
+DlgColorTitle		: "रंग चुनें",
+DlgColorBtnClear	: "साफ़ करें",
+DlgColorHighlight	: "हाइलाइट",
+DlgColorSelected	: "सॅलॅक्टॅड",
+
+// Smiley Dialog
+DlgSmileyTitle		: "स्माइली इन्सर्ट करें",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "विशेष करॅक्टर चुनें",
+
+// Table Dialog
+DlgTableTitle		: "टेबल प्रॉपर्टीज़",
+DlgTableRows		: "पंक्तियाँ",
+DlgTableColumns		: "कालम",
+DlgTableBorder		: "बॉर्डर साइज़",
+DlgTableAlign		: "ऍलाइन्मॅन्ट",
+DlgTableAlignNotSet	: "<सॅट नहीं>",
+DlgTableAlignLeft	: "दायें",
+DlgTableAlignCenter	: "बीच में",
+DlgTableAlignRight	: "बायें",
+DlgTableWidth		: "चौड़ाई",
+DlgTableWidthPx		: "पिक्सैल",
+DlgTableWidthPc		: "प्रतिशत",
+DlgTableHeight		: "ऊँचाई",
+DlgTableCellSpace	: "सैल अंतर",
+DlgTableCellPad		: "सैल पैडिंग",
+DlgTableCaption		: "शीर्षक",
+DlgTableSummary		: "सारांश",
+
+// Table Cell Dialog
+DlgCellTitle		: "सैल प्रॉपर्टीज़",
+DlgCellWidth		: "चौड़ाई",
+DlgCellWidthPx		: "पिक्सैल",
+DlgCellWidthPc		: "प्रतिशत",
+DlgCellHeight		: "ऊँचाई",
+DlgCellWordWrap		: "वर्ड रैप",
+DlgCellWordWrapNotSet	: "<सॅट नहीं>",
+DlgCellWordWrapYes	: "हाँ",
+DlgCellWordWrapNo	: "नहीं",
+DlgCellHorAlign		: "हॉरिज़ॉन्टल ऍलाइन्मॅन्ट",
+DlgCellHorAlignNotSet	: "<सॅट नहीं>",
+DlgCellHorAlignLeft	: "दायें",
+DlgCellHorAlignCenter	: "बीच में",
+DlgCellHorAlignRight: "बायें",
+DlgCellVerAlign		: "वर्टिकल ऍलाइन्मॅन्ट",
+DlgCellVerAlignNotSet	: "<सॅट नहीं>",
+DlgCellVerAlignTop	: "ऊपर",
+DlgCellVerAlignMiddle	: "मध्य",
+DlgCellVerAlignBottom	: "नीचे",
+DlgCellVerAlignBaseline	: "मूलरेखा",
+DlgCellRowSpan		: "पंक्ति स्पैन",
+DlgCellCollSpan		: "कालम स्पैन",
+DlgCellBackColor	: "बैक्ग्राउन्ड रंग",
+DlgCellBorderColor	: "बॉर्डर का रंग",
+DlgCellBtnSelect	: "चुनें...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "खोजें और बदलें",
+
+// Find Dialog
+DlgFindTitle		: "खोजें",
+DlgFindFindBtn		: "खोजें",
+DlgFindNotFoundMsg	: "आपके द्वारा दिया गया टेक्स्ट नहीं मिला",
+
+// Replace Dialog
+DlgReplaceTitle			: "रिप्लेस",
+DlgReplaceFindLbl		: "यह खोजें:",
+DlgReplaceReplaceLbl	: "इससे रिप्लेस करें:",
+DlgReplaceCaseChk		: "केस मिलायें",
+DlgReplaceReplaceBtn	: "रिप्लेस",
+DlgReplaceReplAllBtn	: "सभी रिप्लेस करें",
+DlgReplaceWordChk		: "पूरा शब्द मिलायें",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "आपके ब्राउज़र की सुरक्षा सॅटिन्ग्स ने कट करने की अनुमति नहीं प्रदान की है। (Ctrl+X) का प्रयोग करें।",
+PasteErrorCopy	: "आपके ब्राआउज़र की सुरक्षा सॅटिन्ग्स ने कॉपी करने की अनुमति नहीं प्रदान की है। (Ctrl+C) का प्रयोग करें।",
+
+PasteAsText		: "पेस्ट (सादा टॅक्स्ट)",
+PasteFromWord	: "पेस्ट (वर्ड से)",
+
+DlgPasteMsg2	: "Ctrl+V का प्रयोग करके पेस्ट करें और ठीक है करें.",
+DlgPasteSec		: "आपके ब्राउज़र की सुरक्षा आपके ब्राउज़र की सुरKश सैटिंग के कारण, एडिटर आपके क्लिपबोर्ड डेटा को नहीं पा सकता है. आपको उसे इस विन्डो में दोबारा पेस्ट करना होगा.",
+DlgPasteIgnoreFont		: "फ़ॉन्ट परिभाषा निकालें",
+DlgPasteRemoveStyles	: "स्टाइल परिभाषा निकालें",
+DlgPasteCleanBox		: "बॉक्स साफ़ करें",
+
+// Color Picker
+ColorAutomatic	: "स्वचालित",
+ColorMoreColors	: "और रंग...",
+
+// Document Properties
+DocProps		: "डॉक्यूमॅन्ट प्रॉपर्टीज़",
+
+// Anchor Dialog
+DlgAnchorTitle		: "ऐंकर प्रॉपर्टीज़",
+DlgAnchorName		: "ऐंकर का नाम",
+DlgAnchorErrorName	: "ऐंकर का नाम टाइप करें",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "शब्दकोश में नहीं",
+DlgSpellChangeTo		: "इसमें बदलें",
+DlgSpellBtnIgnore		: "इग्नोर",
+DlgSpellBtnIgnoreAll	: "सभी इग्नोर करें",
+DlgSpellBtnReplace		: "रिप्लेस",
+DlgSpellBtnReplaceAll	: "सभी रिप्लेस करें",
+DlgSpellBtnUndo			: "अन्डू",
+DlgSpellNoSuggestions	: "- कोई सुझाव नहीं -",
+DlgSpellProgress		: "वर्तनी की जाँच (स्पॅल-चॅक) जारी है...",
+DlgSpellNoMispell		: "वर्तनी की जाँच : कोई गलत वर्तनी (स्पॅलिंग) नहीं पाई गई",
+DlgSpellNoChanges		: "वर्तनी की जाँच :कोई शब्द नहीं बदला गया",
+DlgSpellOneChange		: "वर्तनी की जाँच : एक शब्द बदला गया",
+DlgSpellManyChanges		: "वर्तनी की जाँच : %1 शब्द बदले गये",
+
+IeSpellDownload			: "स्पॅल-चॅकर इन्स्टाल नहीं किया गया है। क्या आप इसे डा‌उनलोड करना चाहेंगे?",
+
+// Button Dialog
+DlgButtonText		: "टेक्स्ट (वैल्यू)",
+DlgButtonType		: "प्रकार",
+DlgButtonTypeBtn	: "बटन",
+DlgButtonTypeSbm	: "सब्मिट",
+DlgButtonTypeRst	: "रिसेट",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "नाम",
+DlgCheckboxValue	: "वैल्यू",
+DlgCheckboxSelected	: "सॅलॅक्टॅड",
+
+// Form Dialog
+DlgFormName		: "नाम",
+DlgFormAction	: "क्रिया",
+DlgFormMethod	: "तरीका",
+
+// Select Field Dialog
+DlgSelectName		: "नाम",
+DlgSelectValue		: "वैल्यू",
+DlgSelectSize		: "साइज़",
+DlgSelectLines		: "पंक्तियाँ",
+DlgSelectChkMulti	: "एक से ज्यादा विकल्प चुनने दें",
+DlgSelectOpAvail	: "उपलब्ध विकल्प",
+DlgSelectOpText		: "टेक्स्ट",
+DlgSelectOpValue	: "वैल्यू",
+DlgSelectBtnAdd		: "जोड़ें",
+DlgSelectBtnModify	: "बदलें",
+DlgSelectBtnUp		: "ऊपर",
+DlgSelectBtnDown	: "नीचे",
+DlgSelectBtnSetValue : "चुनी गई वैल्यू सॅट करें",
+DlgSelectBtnDelete	: "डिलीट",
+
+// Textarea Dialog
+DlgTextareaName	: "नाम",
+DlgTextareaCols	: "कालम",
+DlgTextareaRows	: "पंक्तियां",
+
+// Text Field Dialog
+DlgTextName			: "नाम",
+DlgTextValue		: "वैल्यू",
+DlgTextCharWidth	: "करॅक्टर की चौढ़ाई",
+DlgTextMaxChars		: "अधिकतम करॅक्टर",
+DlgTextType			: "टाइप",
+DlgTextTypeText		: "टेक्स्ट",
+DlgTextTypePass		: "पास्वर्ड",
+
+// Hidden Field Dialog
+DlgHiddenName	: "नाम",
+DlgHiddenValue	: "वैल्यू",
+
+// Bulleted List Dialog
+BulletedListProp	: "बुलॅट सूची प्रॉपर्टीज़",
+NumberedListProp	: "अंकीय सूची प्रॉपर्टीज़",
+DlgLstStart			: "प्रारम्भ",
+DlgLstType			: "प्रकार",
+DlgLstTypeCircle	: "गोल",
+DlgLstTypeDisc		: "डिस्क",
+DlgLstTypeSquare	: "चौकॊण",
+DlgLstTypeNumbers	: "अंक (1, 2, 3)",
+DlgLstTypeLCase		: "छोटे अक्षर (a, b, c)",
+DlgLstTypeUCase		: "बड़े अक्षर (A, B, C)",
+DlgLstTypeSRoman	: "छोटे रोमन अंक (i, ii, iii)",
+DlgLstTypeLRoman	: "बड़े रोमन अंक (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "आम",
+DlgDocBackTab		: "बैक्ग्राउन्ड",
+DlgDocColorsTab		: "रंग और मार्जिन",
+DlgDocMetaTab		: "मॅटाडेटा",
+
+DlgDocPageTitle		: "पेज शीर्षक",
+DlgDocLangDir		: "भाषा लिखने की दिशा",
+DlgDocLangDirLTR	: "बायें से दायें (LTR)",
+DlgDocLangDirRTL	: "दायें से बायें (RTL)",
+DlgDocLangCode		: "भाषा कोड",
+DlgDocCharSet		: "करेक्टर सॅट ऍन्कोडिंग",
+DlgDocCharSetCE		: "मध्य यूरोपीय (Central European)",
+DlgDocCharSetCT		: "चीनी (Chinese Traditional Big5)",
+DlgDocCharSetCR		: "सिरीलिक (Cyrillic)",
+DlgDocCharSetGR		: "यवन (Greek)",
+DlgDocCharSetJP		: "जापानी (Japanese)",
+DlgDocCharSetKR		: "कोरीयन (Korean)",
+DlgDocCharSetTR		: "तुर्की (Turkish)",
+DlgDocCharSetUN		: "यूनीकोड (UTF-8)",
+DlgDocCharSetWE		: "पश्चिम यूरोपीय (Western European)",
+DlgDocCharSetOther	: "अन्य करेक्टर सॅट ऍन्कोडिंग",
+
+DlgDocDocType		: "डॉक्यूमॅन्ट प्रकार शीर्षक",
+DlgDocDocTypeOther	: "अन्य डॉक्यूमॅन्ट प्रकार शीर्षक",
+DlgDocIncXHTML		: "XHTML सूचना सम्मिलित करें",
+DlgDocBgColor		: "बैक्ग्राउन्ड रंग",
+DlgDocBgImage		: "बैक्ग्राउन्ड तस्वीर URL",
+DlgDocBgNoScroll	: "स्क्रॉल न करने वाला बैक्ग्राउन्ड",
+DlgDocCText			: "टेक्स्ट",
+DlgDocCLink			: "लिंक",
+DlgDocCVisited		: "विज़िट किया गया लिंक",
+DlgDocCActive		: "सक्रिय लिंक",
+DlgDocMargins		: "पेज मार्जिन",
+DlgDocMaTop			: "ऊपर",
+DlgDocMaLeft		: "बायें",
+DlgDocMaRight		: "दायें",
+DlgDocMaBottom		: "नीचे",
+DlgDocMeIndex		: "डॉक्युमॅन्ट इन्डेक्स संकेतशब्द (अल्पविराम से अलग करें)",
+DlgDocMeDescr		: "डॉक्यूमॅन्ट करॅक्टरन",
+DlgDocMeAuthor		: "लेखक",
+DlgDocMeCopy		: "कॉपीराइट",
+DlgDocPreview		: "प्रीव्यू",
+
+// Templates Dialog
+Templates			: "टॅम्प्लेट",
+DlgTemplatesTitle	: "कन्टेन्ट टॅम्प्लेट",
+DlgTemplatesSelMsg	: "ऍडिटर में ओपन करने हेतु टॅम्प्लेट चुनें(वर्तमान कन्टॅन्ट सेव नहीं होंगे):",
+DlgTemplatesLoading	: "टॅम्प्लेट सूची लोड की जा रही है। ज़रा ठहरें...",
+DlgTemplatesNoTpl	: "(कोई टॅम्प्लेट डिफ़ाइन नहीं किया गया है)",
+DlgTemplatesReplace	: "मूल शब्दों को बदलें",
+
+// About Dialog
+DlgAboutAboutTab	: "FCKEditor के बारे में",
+DlgAboutBrowserInfoTab	: "ब्राउज़र के बारे में",
+DlgAboutLicenseTab	: "लाइसैन्स",
+DlgAboutVersion		: "वर्ज़न",
+DlgAboutInfo		: "अधिक जानकारी के लिये यहाँ जायें:"
+};
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/hr.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/hr.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/hr.js	(revision 1280)
@@ -0,0 +1,516 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Croatian language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Smanji trake s alatima",
+ToolbarExpand		: "Proširi trake s alatima",
+
+// Toolbar Items and Context Menu
+Save				: "Snimi",
+NewPage				: "Nova stranica",
+Preview				: "Pregledaj",
+Cut					: "Izreži",
+Copy				: "Kopiraj",
+Paste				: "Zalijepi",
+PasteText			: "Zalijepi kao čisti tekst",
+PasteWord			: "Zalijepi iz Worda",
+Print				: "Ispiši",
+SelectAll			: "Odaberi sve",
+RemoveFormat		: "Ukloni formatiranje",
+InsertLinkLbl		: "Link",
+InsertLink			: "Ubaci/promijeni link",
+RemoveLink			: "Ukloni link",
+Anchor				: "Ubaci/promijeni sidro",
+AnchorDelete		: "Ukloni sidro",
+InsertImageLbl		: "Slika",
+InsertImage			: "Ubaci/promijeni sliku",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Ubaci/promijeni Flash",
+InsertTableLbl		: "Tablica",
+InsertTable			: "Ubaci/promijeni tablicu",
+InsertLineLbl		: "Linija",
+InsertLine			: "Ubaci vodoravnu liniju",
+InsertSpecialCharLbl: "Posebni karakteri",
+InsertSpecialChar	: "Ubaci posebne znakove",
+InsertSmileyLbl		: "Smješko",
+InsertSmiley		: "Ubaci smješka",
+About				: "O FCKeditoru",
+Bold				: "Podebljaj",
+Italic				: "Ukosi",
+Underline			: "Potcrtano",
+StrikeThrough		: "Precrtano",
+Subscript			: "Subscript",
+Superscript			: "Superscript",
+LeftJustify			: "Lijevo poravnanje",
+CenterJustify		: "Središnje poravnanje",
+RightJustify		: "Desno poravnanje",
+BlockJustify		: "Blok poravnanje",
+DecreaseIndent		: "Pomakni ulijevo",
+IncreaseIndent		: "Pomakni udesno",
+Blockquote			: "Blockquote",
+Undo				: "Poništi",
+Redo				: "Ponovi",
+NumberedListLbl		: "Brojčana lista",
+NumberedList		: "Ubaci/ukloni brojčanu listu",
+BulletedListLbl		: "Obična lista",
+BulletedList		: "Ubaci/ukloni običnu listu",
+ShowTableBorders	: "Prikaži okvir tablice",
+ShowDetails			: "Prikaži detalje",
+Style				: "Stil",
+FontFormat			: "Format",
+Font				: "Font",
+FontSize			: "Veličina",
+TextColor			: "Boja teksta",
+BGColor				: "Boja pozadine",
+Source				: "Kôd",
+Find				: "Pronađi",
+Replace				: "Zamijeni",
+SpellCheck			: "Provjeri pravopis",
+UniversalKeyboard	: "Univerzalna tipkovnica",
+PageBreakLbl		: "Prijelom stranice",
+PageBreak			: "Ubaci prijelom stranice",
+
+Form			: "Form",
+Checkbox		: "Checkbox",
+RadioButton		: "Radio Button",
+TextField		: "Text Field",
+Textarea		: "Textarea",
+HiddenField		: "Hidden Field",
+Button			: "Button",
+SelectionField	: "Selection Field",
+ImageButton		: "Image Button",
+
+FitWindow		: "Povećaj veličinu editora",
+ShowBlocks		: "Prikaži blokove",
+
+// Context Menu
+EditLink			: "Promijeni link",
+CellCM				: "Ćelija",
+RowCM				: "Red",
+ColumnCM			: "Kolona",
+InsertRowAfter		: "Ubaci red poslije",
+InsertRowBefore		: "Ubaci red prije",
+DeleteRows			: "Izbriši redove",
+InsertColumnAfter	: "Ubaci kolonu poslije",
+InsertColumnBefore	: "Ubaci kolonu prije",
+DeleteColumns		: "Izbriši kolone",
+InsertCellAfter		: "Ubaci ćeliju poslije",
+InsertCellBefore	: "Ubaci ćeliju prije",
+DeleteCells			: "Izbriši ćelije",
+MergeCells			: "Spoji ćelije",
+MergeRight			: "Spoji desno",
+MergeDown			: "Spoji dolje",
+HorizontalSplitCell	: "Podijeli ćeliju vodoravno",
+VerticalSplitCell	: "Podijeli ćeliju okomito",
+TableDelete			: "Izbriši tablicu",
+CellProperties		: "Svojstva ćelije",
+TableProperties		: "Svojstva tablice",
+ImageProperties		: "Svojstva slike",
+FlashProperties		: "Flash svojstva",
+
+AnchorProp			: "Svojstva sidra",
+ButtonProp			: "Image Button svojstva",
+CheckboxProp		: "Checkbox svojstva",
+HiddenFieldProp		: "Hidden Field svojstva",
+RadioButtonProp		: "Radio Button svojstva",
+ImageButtonProp		: "Image Button svojstva",
+TextFieldProp		: "Text Field svojstva",
+SelectionFieldProp	: "Selection svojstva",
+TextareaProp		: "Textarea svojstva",
+FormProp			: "Form svojstva",
+
+FontFormats			: "Normal;Formatted;Address;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6;Normal (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "Obrađujem XHTML. Molimo pričekajte...",
+Done				: "Završio",
+PasteWordConfirm	: "Tekst koji želite zalijepiti čini se da je kopiran iz Worda. Želite li prije očistiti tekst?",
+NotCompatiblePaste	: "Ova naredba je dostupna samo u Internet Exploreru 5.5 ili novijem. Želite li nastaviti bez čišćenja?",
+UnknownToolbarItem	: "Nepoznati član trake s alatima \"%1\"",
+UnknownCommand		: "Nepoznata naredba \"%1\"",
+NotImplemented		: "Naredba nije implementirana",
+UnknownToolbarSet	: "Traka s alatima \"%1\" ne postoji",
+NoActiveX			: "Vaše postavke pretraživača mogle bi ograničiti neke od mogućnosti editora. Morate uključiti opciju \"Run ActiveX controls and plug-ins\" u postavkama. Ukoliko to ne učinite, moguće su razliite greške tijekom rada.",
+BrowseServerBlocked : "Pretraivač nije moguće otvoriti. Provjerite da li je uključeno blokiranje pop-up prozora.",
+DialogBlocked		: "Nije moguće otvoriti novi prozor. Provjerite da li je uključeno blokiranje pop-up prozora.",
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Poništi",
+DlgBtnClose			: "Zatvori",
+DlgBtnBrowseServer	: "Pretraži server",
+DlgAdvancedTag		: "Napredno",
+DlgOpOther			: "<Drugo>",
+DlgInfoTab			: "Info",
+DlgAlertUrl			: "Molimo unesite URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<nije postavljeno>",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Smjer jezika",
+DlgGenLangDirLtr	: "S lijeva na desno (LTR)",
+DlgGenLangDirRtl	: "S desna na lijevo (RTL)",
+DlgGenLangCode		: "Kôd jezika",
+DlgGenAccessKey		: "Pristupna tipka",
+DlgGenName			: "Naziv",
+DlgGenTabIndex		: "Tab Indeks",
+DlgGenLongDescr		: "Dugački opis URL",
+DlgGenClass			: "Stylesheet klase",
+DlgGenTitle			: "Advisory naslov",
+DlgGenContType		: "Advisory vrsta sadržaja",
+DlgGenLinkCharset	: "Kodna stranica povezanih resursa",
+DlgGenStyle			: "Stil",
+
+// Image Dialog
+DlgImgTitle			: "Svojstva slika",
+DlgImgInfoTab		: "Info slike",
+DlgImgBtnUpload		: "Pošalji na server",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Pošalji",
+DlgImgAlt			: "Alternativni tekst",
+DlgImgWidth			: "Širina",
+DlgImgHeight		: "Visina",
+DlgImgLockRatio		: "Zaključaj odnos",
+DlgBtnResetSize		: "Obriši veličinu",
+DlgImgBorder		: "Okvir",
+DlgImgHSpace		: "HSpace",
+DlgImgVSpace		: "VSpace",
+DlgImgAlign			: "Poravnaj",
+DlgImgAlignLeft		: "Lijevo",
+DlgImgAlignAbsBottom: "Abs dolje",
+DlgImgAlignAbsMiddle: "Abs sredina",
+DlgImgAlignBaseline	: "Bazno",
+DlgImgAlignBottom	: "Dolje",
+DlgImgAlignMiddle	: "Sredina",
+DlgImgAlignRight	: "Desno",
+DlgImgAlignTextTop	: "Vrh teksta",
+DlgImgAlignTop		: "Vrh",
+DlgImgPreview		: "Pregledaj",
+DlgImgAlertUrl		: "Unesite URL slike",
+DlgImgLinkTab		: "Link",
+
+// Flash Dialog
+DlgFlashTitle		: "Flash svojstva",
+DlgFlashChkPlay		: "Auto Play",
+DlgFlashChkLoop		: "Ponavljaj",
+DlgFlashChkMenu		: "Omogući Flash izbornik",
+DlgFlashScale		: "Omjer",
+DlgFlashScaleAll	: "Prikaži sve",
+DlgFlashScaleNoBorder	: "Bez okvira",
+DlgFlashScaleFit	: "Točna veličina",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Link",
+DlgLnkInfoTab		: "Link Info",
+DlgLnkTargetTab		: "Meta",
+
+DlgLnkType			: "Link vrsta",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Sidro na ovoj stranici",
+DlgLnkTypeEMail		: "E-Mail",
+DlgLnkProto			: "Protokol",
+DlgLnkProtoOther	: "<drugo>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Odaberi sidro",
+DlgLnkAnchorByName	: "Po nazivu sidra",
+DlgLnkAnchorById	: "Po Id elementa",
+DlgLnkNoAnchors		: "(Nema dostupnih sidra)",
+DlgLnkEMail			: "E-Mail adresa",
+DlgLnkEMailSubject	: "Naslov",
+DlgLnkEMailBody		: "Sadržaj poruke",
+DlgLnkUpload		: "Pošalji",
+DlgLnkBtnUpload		: "Pošalji na server",
+
+DlgLnkTarget		: "Meta",
+DlgLnkTargetFrame	: "<okvir>",
+DlgLnkTargetPopup	: "<popup prozor>",
+DlgLnkTargetBlank	: "Novi prozor (_blank)",
+DlgLnkTargetParent	: "Roditeljski prozor (_parent)",
+DlgLnkTargetSelf	: "Isti prozor (_self)",
+DlgLnkTargetTop		: "Vršni prozor (_top)",
+DlgLnkTargetFrameName	: "Ime ciljnog okvira",
+DlgLnkPopWinName	: "Naziv popup prozora",
+DlgLnkPopWinFeat	: "Mogućnosti popup prozora",
+DlgLnkPopResize		: "Promjenljive veličine",
+DlgLnkPopLocation	: "Traka za lokaciju",
+DlgLnkPopMenu		: "Izborna traka",
+DlgLnkPopScroll		: "Scroll traka",
+DlgLnkPopStatus		: "Statusna traka",
+DlgLnkPopToolbar	: "Traka s alatima",
+DlgLnkPopFullScrn	: "Cijeli ekran (IE)",
+DlgLnkPopDependent	: "Ovisno (Netscape)",
+DlgLnkPopWidth		: "Širina",
+DlgLnkPopHeight		: "Visina",
+DlgLnkPopLeft		: "Lijeva pozicija",
+DlgLnkPopTop		: "Gornja pozicija",
+
+DlnLnkMsgNoUrl		: "Molimo upišite URL link",
+DlnLnkMsgNoEMail	: "Molimo upišite e-mail adresu",
+DlnLnkMsgNoAnchor	: "Molimo odaberite sidro",
+DlnLnkMsgInvPopName	: "Ime popup prozora mora početi sa slovom i ne smije sadržavati razmake",
+
+// Color Dialog
+DlgColorTitle		: "Odaberite boju",
+DlgColorBtnClear	: "Obriši",
+DlgColorHighlight	: "Osvijetli",
+DlgColorSelected	: "Odaberi",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Ubaci smješka",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Odaberite posebni karakter",
+
+// Table Dialog
+DlgTableTitle		: "Svojstva tablice",
+DlgTableRows		: "Redova",
+DlgTableColumns		: "Kolona",
+DlgTableBorder		: "Veličina okvira",
+DlgTableAlign		: "Poravnanje",
+DlgTableAlignNotSet	: "<nije postavljeno>",
+DlgTableAlignLeft	: "Lijevo",
+DlgTableAlignCenter	: "Središnje",
+DlgTableAlignRight	: "Desno",
+DlgTableWidth		: "Širina",
+DlgTableWidthPx		: "piksela",
+DlgTableWidthPc		: "postotaka",
+DlgTableHeight		: "Visina",
+DlgTableCellSpace	: "Prostornost ćelija",
+DlgTableCellPad		: "Razmak ćelija",
+DlgTableCaption		: "Naslov",
+DlgTableSummary		: "Sažetak",
+
+// Table Cell Dialog
+DlgCellTitle		: "Svojstva ćelije",
+DlgCellWidth		: "Širina",
+DlgCellWidthPx		: "piksela",
+DlgCellWidthPc		: "postotaka",
+DlgCellHeight		: "Visina",
+DlgCellWordWrap		: "Word Wrap",
+DlgCellWordWrapNotSet	: "<nije postavljeno>",
+DlgCellWordWrapYes	: "Da",
+DlgCellWordWrapNo	: "Ne",
+DlgCellHorAlign		: "Vodoravno poravnanje",
+DlgCellHorAlignNotSet	: "<nije postavljeno>",
+DlgCellHorAlignLeft	: "Lijevo",
+DlgCellHorAlignCenter	: "Središnje",
+DlgCellHorAlignRight: "Desno",
+DlgCellVerAlign		: "Okomito poravnanje",
+DlgCellVerAlignNotSet	: "<nije postavljeno>",
+DlgCellVerAlignTop	: "Gornje",
+DlgCellVerAlignMiddle	: "Srednišnje",
+DlgCellVerAlignBottom	: "Donje",
+DlgCellVerAlignBaseline	: "Bazno",
+DlgCellRowSpan		: "Spajanje redova",
+DlgCellCollSpan		: "Spajanje kolona",
+DlgCellBackColor	: "Boja pozadine",
+DlgCellBorderColor	: "Boja okvira",
+DlgCellBtnSelect	: "Odaberi...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Pronađi i zamijeni",
+
+// Find Dialog
+DlgFindTitle		: "Pronađi",
+DlgFindFindBtn		: "Pronađi",
+DlgFindNotFoundMsg	: "Traženi tekst nije pronađen.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Zamijeni",
+DlgReplaceFindLbl		: "Pronađi:",
+DlgReplaceReplaceLbl	: "Zamijeni s:",
+DlgReplaceCaseChk		: "Usporedi mala/velika slova",
+DlgReplaceReplaceBtn	: "Zamijeni",
+DlgReplaceReplAllBtn	: "Zamijeni sve",
+DlgReplaceWordChk		: "Usporedi cijele riječi",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "Sigurnosne postavke Vašeg pretraživača ne dozvoljavaju operacije automatskog izrezivanja. Molimo koristite kraticu na tipkovnici (Ctrl+X).",
+PasteErrorCopy	: "Sigurnosne postavke Vašeg pretraživača ne dozvoljavaju operacije automatskog kopiranja. Molimo koristite kraticu na tipkovnici (Ctrl+C).",
+
+PasteAsText		: "Zalijepi kao čisti tekst",
+PasteFromWord	: "Zalijepi iz Worda",
+
+DlgPasteMsg2	: "Molimo zaljepite unutar doljnjeg okvira koristeći tipkovnicu (<STRONG>Ctrl+V</STRONG>) i kliknite <STRONG>OK</STRONG>.",
+DlgPasteSec		: "Zbog sigurnosnih postavki Vašeg pretraživača, editor nema direktan pristup Vašem međuspremniku. Potrebno je ponovno zalijepiti tekst u ovaj prozor.",
+DlgPasteIgnoreFont		: "Zanemari definiciju vrste fonta",
+DlgPasteRemoveStyles	: "Ukloni definicije stilova",
+DlgPasteCleanBox		: "Očisti okvir",
+
+// Color Picker
+ColorAutomatic	: "Automatski",
+ColorMoreColors	: "Više boja...",
+
+// Document Properties
+DocProps		: "Svojstva dokumenta",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Svojstva sidra",
+DlgAnchorName		: "Ime sidra",
+DlgAnchorErrorName	: "Molimo unesite ime sidra",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Nije u rječniku",
+DlgSpellChangeTo		: "Promijeni u",
+DlgSpellBtnIgnore		: "Zanemari",
+DlgSpellBtnIgnoreAll	: "Zanemari sve",
+DlgSpellBtnReplace		: "Zamijeni",
+DlgSpellBtnReplaceAll	: "Zamijeni sve",
+DlgSpellBtnUndo			: "Vrati",
+DlgSpellNoSuggestions	: "-Nema preporuke-",
+DlgSpellProgress		: "Provjera u tijeku...",
+DlgSpellNoMispell		: "Provjera završena: Nema grešaka",
+DlgSpellNoChanges		: "Provjera završena: Nije napravljena promjena",
+DlgSpellOneChange		: "Provjera završena: Jedna riječ promjenjena",
+DlgSpellManyChanges		: "Provjera završena: Promijenjeno %1 riječi",
+
+IeSpellDownload			: "Provjera pravopisa nije instalirana. Želite li skinuti provjeru pravopisa?",
+
+// Button Dialog
+DlgButtonText		: "Tekst (vrijednost)",
+DlgButtonType		: "Vrsta",
+DlgButtonTypeBtn	: "Gumb",
+DlgButtonTypeSbm	: "Pošalji",
+DlgButtonTypeRst	: "Poništi",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Ime",
+DlgCheckboxValue	: "Vrijednost",
+DlgCheckboxSelected	: "Odabrano",
+
+// Form Dialog
+DlgFormName		: "Ime",
+DlgFormAction	: "Akcija",
+DlgFormMethod	: "Metoda",
+
+// Select Field Dialog
+DlgSelectName		: "Ime",
+DlgSelectValue		: "Vrijednost",
+DlgSelectSize		: "Veličina",
+DlgSelectLines		: "linija",
+DlgSelectChkMulti	: "Dozvoli višestruki odabir",
+DlgSelectOpAvail	: "Dostupne opcije",
+DlgSelectOpText		: "Tekst",
+DlgSelectOpValue	: "Vrijednost",
+DlgSelectBtnAdd		: "Dodaj",
+DlgSelectBtnModify	: "Promijeni",
+DlgSelectBtnUp		: "Gore",
+DlgSelectBtnDown	: "Dolje",
+DlgSelectBtnSetValue : "Postavi kao odabranu vrijednost",
+DlgSelectBtnDelete	: "Obriši",
+
+// Textarea Dialog
+DlgTextareaName	: "Ime",
+DlgTextareaCols	: "Kolona",
+DlgTextareaRows	: "Redova",
+
+// Text Field Dialog
+DlgTextName			: "Ime",
+DlgTextValue		: "Vrijednost",
+DlgTextCharWidth	: "Širina",
+DlgTextMaxChars		: "Najviše karaktera",
+DlgTextType			: "Vrsta",
+DlgTextTypeText		: "Tekst",
+DlgTextTypePass		: "Šifra",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Ime",
+DlgHiddenValue	: "Vrijednost",
+
+// Bulleted List Dialog
+BulletedListProp	: "Svojstva liste",
+NumberedListProp	: "Svojstva brojčane liste",
+DlgLstStart			: "Početak",
+DlgLstType			: "Vrsta",
+DlgLstTypeCircle	: "Krug",
+DlgLstTypeDisc		: "Disk",
+DlgLstTypeSquare	: "Kvadrat",
+DlgLstTypeNumbers	: "Brojevi (1, 2, 3)",
+DlgLstTypeLCase		: "Mala slova (a, b, c)",
+DlgLstTypeUCase		: "Velika slova (A, B, C)",
+DlgLstTypeSRoman	: "Male rimske brojke (i, ii, iii)",
+DlgLstTypeLRoman	: "Velike rimske brojke (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Općenito",
+DlgDocBackTab		: "Pozadina",
+DlgDocColorsTab		: "Boje i margine",
+DlgDocMetaTab		: "Meta Data",
+
+DlgDocPageTitle		: "Naslov stranice",
+DlgDocLangDir		: "Smjer jezika",
+DlgDocLangDirLTR	: "S lijeva na desno",
+DlgDocLangDirRTL	: "S desna na lijevo",
+DlgDocLangCode		: "Kôd jezika",
+DlgDocCharSet		: "Enkodiranje znakova",
+DlgDocCharSetCE		: "Središnja Europa",
+DlgDocCharSetCT		: "Tradicionalna kineska (Big5)",
+DlgDocCharSetCR		: "Ćirilica",
+DlgDocCharSetGR		: "Grčka",
+DlgDocCharSetJP		: "Japanska",
+DlgDocCharSetKR		: "Koreanska",
+DlgDocCharSetTR		: "Turska",
+DlgDocCharSetUN		: "Unicode (UTF-8)",
+DlgDocCharSetWE		: "Zapadna Europa",
+DlgDocCharSetOther	: "Ostalo enkodiranje znakova",
+
+DlgDocDocType		: "Zaglavlje vrste dokumenta",
+DlgDocDocTypeOther	: "Ostalo zaglavlje vrste dokumenta",
+DlgDocIncXHTML		: "Ubaci XHTML deklaracije",
+DlgDocBgColor		: "Boja pozadine",
+DlgDocBgImage		: "URL slike pozadine",
+DlgDocBgNoScroll	: "Pozadine se ne pomiče",
+DlgDocCText			: "Tekst",
+DlgDocCLink			: "Link",
+DlgDocCVisited		: "Posjećeni link",
+DlgDocCActive		: "Aktivni link",
+DlgDocMargins		: "Margine stranice",
+DlgDocMaTop			: "Vrh",
+DlgDocMaLeft		: "Lijevo",
+DlgDocMaRight		: "Desno",
+DlgDocMaBottom		: "Dolje",
+DlgDocMeIndex		: "Ključne riječi dokumenta (odvojene zarezom)",
+DlgDocMeDescr		: "Opis dokumenta",
+DlgDocMeAuthor		: "Autor",
+DlgDocMeCopy		: "Autorska prava",
+DlgDocPreview		: "Pregledaj",
+
+// Templates Dialog
+Templates			: "Predlošci",
+DlgTemplatesTitle	: "Predlošci sadržaja",
+DlgTemplatesSelMsg	: "Molimo odaberite predložak koji želite otvoriti<br>(stvarni sadržaj će biti izgubljen):",
+DlgTemplatesLoading	: "Učitavam listu predložaka. Molimo pričekajte...",
+DlgTemplatesNoTpl	: "(Nema definiranih predložaka)",
+DlgTemplatesReplace	: "Zamijeni trenutne sadržaje",
+
+// About Dialog
+DlgAboutAboutTab	: "O FCKEditoru",
+DlgAboutBrowserInfoTab	: "Podaci o pretraživaču",
+DlgAboutLicenseTab	: "Licenca",
+DlgAboutVersion		: "inačica",
+DlgAboutInfo		: "Za više informacija posjetite"
+};
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/hu.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/hu.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/hu.js	(revision 1280)
@@ -0,0 +1,516 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Hungarian language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Eszköztár elrejtése",
+ToolbarExpand		: "Eszköztár megjelenítése",
+
+// Toolbar Items and Context Menu
+Save				: "Mentés",
+NewPage				: "Új oldal",
+Preview				: "Előnézet",
+Cut					: "Kivágás",
+Copy				: "Másolás",
+Paste				: "Beillesztés",
+PasteText			: "Beillesztés formázás nélkül",
+PasteWord			: "Beillesztés Word-ből",
+Print				: "Nyomtatás",
+SelectAll			: "Mindent kijelöl",
+RemoveFormat		: "Formázás eltávolítása",
+InsertLinkLbl		: "Hivatkozás",
+InsertLink			: "Hivatkozás beillesztése/módosítása",
+RemoveLink			: "Hivatkozás törlése",
+Anchor				: "Horgony beillesztése/szerkesztése",
+AnchorDelete		: "Horgony eltávolítása",
+InsertImageLbl		: "Kép",
+InsertImage			: "Kép beillesztése/módosítása",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Flash beillesztése, módosítása",
+InsertTableLbl		: "Táblázat",
+InsertTable			: "Táblázat beillesztése/módosítása",
+InsertLineLbl		: "Vonal",
+InsertLine			: "Elválasztóvonal beillesztése",
+InsertSpecialCharLbl: "Speciális karakter",
+InsertSpecialChar	: "Speciális karakter beillesztése",
+InsertSmileyLbl		: "Hangulatjelek",
+InsertSmiley		: "Hangulatjelek beillesztése",
+About				: "FCKeditor névjegy",
+Bold				: "Félkövér",
+Italic				: "Dőlt",
+Underline			: "Aláhúzott",
+StrikeThrough		: "Áthúzott",
+Subscript			: "Alsó index",
+Superscript			: "Felső index",
+LeftJustify			: "Balra",
+CenterJustify		: "Középre",
+RightJustify		: "Jobbra",
+BlockJustify		: "Sorkizárt",
+DecreaseIndent		: "Behúzás csökkentése",
+IncreaseIndent		: "Behúzás növelése",
+Blockquote			: "Idézet blokk",
+Undo				: "Visszavonás",
+Redo				: "Ismétlés",
+NumberedListLbl		: "Számozás",
+NumberedList		: "Számozás beillesztése/törlése",
+BulletedListLbl		: "Felsorolás",
+BulletedList		: "Felsorolás beillesztése/törlése",
+ShowTableBorders	: "Táblázat szegély mutatása",
+ShowDetails			: "Részletek mutatása",
+Style				: "Stílus",
+FontFormat			: "Formátum",
+Font				: "Betűtípus",
+FontSize			: "Méret",
+TextColor			: "Betűszín",
+BGColor				: "Háttérszín",
+Source				: "Forráskód",
+Find				: "Keresés",
+Replace				: "Csere",
+SpellCheck			: "Helyesírás-ellenőrzés",
+UniversalKeyboard	: "Univerzális billentyűzet",
+PageBreakLbl		: "Oldaltörés",
+PageBreak			: "Oldaltörés beillesztése",
+
+Form			: "Űrlap",
+Checkbox		: "Jelölőnégyzet",
+RadioButton		: "Választógomb",
+TextField		: "Szövegmező",
+Textarea		: "Szövegterület",
+HiddenField		: "Rejtettmező",
+Button			: "Gomb",
+SelectionField	: "Legördülő lista",
+ImageButton		: "Képgomb",
+
+FitWindow		: "Maximalizálás",
+ShowBlocks		: "Blokkok megjelenítése",
+
+// Context Menu
+EditLink			: "Hivatkozás módosítása",
+CellCM				: "Cella",
+RowCM				: "Sor",
+ColumnCM			: "Oszlop",
+InsertRowAfter		: "Sor beillesztése az aktuális sor mögé",
+InsertRowBefore		: "Sor beillesztése az aktuális sor elé",
+DeleteRows			: "Sorok törlése",
+InsertColumnAfter	: "Oszlop beillesztése az aktuális oszlop mögé",
+InsertColumnBefore	: "Oszlop beillesztése az aktuális oszlop elé",
+DeleteColumns		: "Oszlopok törlése",
+InsertCellAfter		: "Cella beillesztése az aktuális cella mögé",
+InsertCellBefore	: "Cella beillesztése az aktuális cella elé",
+DeleteCells			: "Cellák törlése",
+MergeCells			: "Cellák egyesítése",
+MergeRight			: "Cellák egyesítése jobbra",
+MergeDown			: "Cellák egyesítése lefelé",
+HorizontalSplitCell	: "Cellák szétválasztása vízszintesen",
+VerticalSplitCell	: "Cellák szétválasztása függőlegesen",
+TableDelete			: "Táblázat törlése",
+CellProperties		: "Cella tulajdonságai",
+TableProperties		: "Táblázat tulajdonságai",
+ImageProperties		: "Kép tulajdonságai",
+FlashProperties		: "Flash tulajdonságai",
+
+AnchorProp			: "Horgony tulajdonságai",
+ButtonProp			: "Gomb tulajdonságai",
+CheckboxProp		: "Jelölőnégyzet tulajdonságai",
+HiddenFieldProp		: "Rejtett mező tulajdonságai",
+RadioButtonProp		: "Választógomb tulajdonságai",
+ImageButtonProp		: "Képgomb tulajdonságai",
+TextFieldProp		: "Szövegmező tulajdonságai",
+SelectionFieldProp	: "Legördülő lista tulajdonságai",
+TextareaProp		: "Szövegterület tulajdonságai",
+FormProp			: "Űrlap tulajdonságai",
+
+FontFormats			: "Normál;Formázott;Címsor;Fejléc 1;Fejléc 2;Fejléc 3;Fejléc 4;Fejléc 5;Fejléc 6;Bekezdés (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "XHTML feldolgozása. Kérem várjon...",
+Done				: "Kész",
+PasteWordConfirm	: "A beilleszteni kívánt szöveg Word-ből van másolva. El kívánja távolítani a formázást a beillesztés előtt?",
+NotCompatiblePaste	: "Ez a parancs csak Internet Explorer 5.5 verziótól használható. Megpróbálja beilleszteni a szöveget az eredeti formázással?",
+UnknownToolbarItem	: "Ismeretlen eszköztár elem \"%1\"",
+UnknownCommand		: "Ismeretlen parancs \"%1\"",
+NotImplemented		: "A parancs nem hajtható végre",
+UnknownToolbarSet	: "Az eszközkészlet \"%1\" nem létezik",
+NoActiveX			: "A böngésző biztonsági beállításai korlátozzák a szerkesztő lehetőségeit. Engedélyezni kell ezt az opciót: \"Run ActiveX controls and plug-ins\". Ettől függetlenül előfordulhatnak hibaüzenetek ill. bizonyos funkciók hiányozhatnak.",
+BrowseServerBlocked : "Nem lehet megnyitni a fájlböngészőt. Bizonyosodjon meg róla, hogy a felbukkanó ablakok engedélyezve vannak.",
+DialogBlocked		: "Nem lehet megnyitni a párbeszédablakot. Bizonyosodjon meg róla, hogy a felbukkanó ablakok engedélyezve vannak.",
+
+// Dialogs
+DlgBtnOK			: "Rendben",
+DlgBtnCancel		: "Mégsem",
+DlgBtnClose			: "Bezárás",
+DlgBtnBrowseServer	: "Böngészés a szerveren",
+DlgAdvancedTag		: "További opciók",
+DlgOpOther			: "Egyéb",
+DlgInfoTab			: "Alaptulajdonságok",
+DlgAlertUrl			: "Illessze be a webcímet",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<nincs beállítva>",
+DlgGenId			: "Azonosító",
+DlgGenLangDir		: "Írás iránya",
+DlgGenLangDirLtr	: "Balról jobbra",
+DlgGenLangDirRtl	: "Jobbról balra",
+DlgGenLangCode		: "Nyelv kódja",
+DlgGenAccessKey		: "Billentyűkombináció",
+DlgGenName			: "Név",
+DlgGenTabIndex		: "Tabulátor index",
+DlgGenLongDescr		: "Részletes leírás webcíme",
+DlgGenClass			: "Stíluskészlet",
+DlgGenTitle			: "Súgócimke",
+DlgGenContType		: "Súgó tartalomtípusa",
+DlgGenLinkCharset	: "Hivatkozott tartalom kódlapja",
+DlgGenStyle			: "Stílus",
+
+// Image Dialog
+DlgImgTitle			: "Kép tulajdonságai",
+DlgImgInfoTab		: "Alaptulajdonságok",
+DlgImgBtnUpload		: "Küldés a szerverre",
+DlgImgURL			: "Hivatkozás",
+DlgImgUpload		: "Feltöltés",
+DlgImgAlt			: "Buborék szöveg",
+DlgImgWidth			: "Szélesség",
+DlgImgHeight		: "Magasság",
+DlgImgLockRatio		: "Arány megtartása",
+DlgBtnResetSize		: "Eredeti méret",
+DlgImgBorder		: "Keret",
+DlgImgHSpace		: "Vízsz. táv",
+DlgImgVSpace		: "Függ. táv",
+DlgImgAlign			: "Igazítás",
+DlgImgAlignLeft		: "Bal",
+DlgImgAlignAbsBottom: "Legaljára",
+DlgImgAlignAbsMiddle: "Közepére",
+DlgImgAlignBaseline	: "Alapvonalhoz",
+DlgImgAlignBottom	: "Aljára",
+DlgImgAlignMiddle	: "Középre",
+DlgImgAlignRight	: "Jobbra",
+DlgImgAlignTextTop	: "Szöveg tetejére",
+DlgImgAlignTop		: "Tetejére",
+DlgImgPreview		: "Előnézet",
+DlgImgAlertUrl		: "Töltse ki a kép webcímét",
+DlgImgLinkTab		: "Hivatkozás",
+
+// Flash Dialog
+DlgFlashTitle		: "Flash tulajdonságai",
+DlgFlashChkPlay		: "Automata lejátszás",
+DlgFlashChkLoop		: "Folyamatosan",
+DlgFlashChkMenu		: "Flash menü engedélyezése",
+DlgFlashScale		: "Méretezés",
+DlgFlashScaleAll	: "Mindent mutat",
+DlgFlashScaleNoBorder	: "Keret nélkül",
+DlgFlashScaleFit	: "Teljes kitöltés",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Hivatkozás tulajdonságai",
+DlgLnkInfoTab		: "Alaptulajdonságok",
+DlgLnkTargetTab		: "Megjelenítés",
+
+DlgLnkType			: "Hivatkozás típusa",
+DlgLnkTypeURL		: "Webcím",
+DlgLnkTypeAnchor	: "Horgony az oldalon",
+DlgLnkTypeEMail		: "E-Mail",
+DlgLnkProto			: "Protokoll",
+DlgLnkProtoOther	: "<más>",
+DlgLnkURL			: "Webcím",
+DlgLnkAnchorSel		: "Horgony választása",
+DlgLnkAnchorByName	: "Horgony név szerint",
+DlgLnkAnchorById	: "Azonosító szerint",
+DlgLnkNoAnchors		: "(Nincs horgony a dokumentumban)",
+DlgLnkEMail			: "E-Mail cím",
+DlgLnkEMailSubject	: "Üzenet tárgya",
+DlgLnkEMailBody		: "Üzenet",
+DlgLnkUpload		: "Feltöltés",
+DlgLnkBtnUpload		: "Küldés a szerverre",
+
+DlgLnkTarget		: "Tartalom megjelenítése",
+DlgLnkTargetFrame	: "<keretben>",
+DlgLnkTargetPopup	: "<felugró ablakban>",
+DlgLnkTargetBlank	: "Új ablakban (_blank)",
+DlgLnkTargetParent	: "Szülő ablakban (_parent)",
+DlgLnkTargetSelf	: "Azonos ablakban (_self)",
+DlgLnkTargetTop		: "Legfelső ablakban (_top)",
+DlgLnkTargetFrameName	: "Keret neve",
+DlgLnkPopWinName	: "Felugró ablak neve",
+DlgLnkPopWinFeat	: "Felugró ablak jellemzői",
+DlgLnkPopResize		: "Méretezhető",
+DlgLnkPopLocation	: "Címsor",
+DlgLnkPopMenu		: "Menü sor",
+DlgLnkPopScroll		: "Gördítősáv",
+DlgLnkPopStatus		: "Állapotsor",
+DlgLnkPopToolbar	: "Eszköztár",
+DlgLnkPopFullScrn	: "Teljes képernyő (csak IE)",
+DlgLnkPopDependent	: "Szülőhöz kapcsolt (csak Netscape)",
+DlgLnkPopWidth		: "Szélesség",
+DlgLnkPopHeight		: "Magasság",
+DlgLnkPopLeft		: "Bal pozíció",
+DlgLnkPopTop		: "Felső pozíció",
+
+DlnLnkMsgNoUrl		: "Adja meg a hivatkozás webcímét",
+DlnLnkMsgNoEMail	: "Adja meg az E-Mail címet",
+DlnLnkMsgNoAnchor	: "Válasszon egy horgonyt",
+DlnLnkMsgInvPopName	: "A felbukkanó ablak neve alfanumerikus karakterrel kezdôdjön, valamint ne tartalmazzon szóközt",
+
+// Color Dialog
+DlgColorTitle		: "Színválasztás",
+DlgColorBtnClear	: "Törlés",
+DlgColorHighlight	: "Előnézet",
+DlgColorSelected	: "Kiválasztott",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Hangulatjel beszúrása",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Speciális karakter választása",
+
+// Table Dialog
+DlgTableTitle		: "Táblázat tulajdonságai",
+DlgTableRows		: "Sorok",
+DlgTableColumns		: "Oszlopok",
+DlgTableBorder		: "Szegélyméret",
+DlgTableAlign		: "Igazítás",
+DlgTableAlignNotSet	: "<Nincs beállítva>",
+DlgTableAlignLeft	: "Balra",
+DlgTableAlignCenter	: "Középre",
+DlgTableAlignRight	: "Jobbra",
+DlgTableWidth		: "Szélesség",
+DlgTableWidthPx		: "képpont",
+DlgTableWidthPc		: "százalék",
+DlgTableHeight		: "Magasság",
+DlgTableCellSpace	: "Cella térköz",
+DlgTableCellPad		: "Cella belső margó",
+DlgTableCaption		: "Felirat",
+DlgTableSummary		: "Leírás",
+
+// Table Cell Dialog
+DlgCellTitle		: "Cella tulajdonságai",
+DlgCellWidth		: "Szélesség",
+DlgCellWidthPx		: "képpont",
+DlgCellWidthPc		: "százalék",
+DlgCellHeight		: "Magasság",
+DlgCellWordWrap		: "Sortörés",
+DlgCellWordWrapNotSet	: "<Nincs beállítva>",
+DlgCellWordWrapYes	: "Igen",
+DlgCellWordWrapNo	: "Nem",
+DlgCellHorAlign		: "Vízsz. igazítás",
+DlgCellHorAlignNotSet	: "<Nincs beállítva>",
+DlgCellHorAlignLeft	: "Balra",
+DlgCellHorAlignCenter	: "Középre",
+DlgCellHorAlignRight: "Jobbra",
+DlgCellVerAlign		: "Függ. igazítás",
+DlgCellVerAlignNotSet	: "<Nincs beállítva>",
+DlgCellVerAlignTop	: "Tetejére",
+DlgCellVerAlignMiddle	: "Középre",
+DlgCellVerAlignBottom	: "Aljára",
+DlgCellVerAlignBaseline	: "Egyvonalba",
+DlgCellRowSpan		: "Sorok egyesítése",
+DlgCellCollSpan		: "Oszlopok egyesítése",
+DlgCellBackColor	: "Háttérszín",
+DlgCellBorderColor	: "Szegélyszín",
+DlgCellBtnSelect	: "Kiválasztás...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Keresés és csere",
+
+// Find Dialog
+DlgFindTitle		: "Keresés",
+DlgFindFindBtn		: "Keresés",
+DlgFindNotFoundMsg	: "A keresett szöveg nem található.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Csere",
+DlgReplaceFindLbl		: "Keresett szöveg:",
+DlgReplaceReplaceLbl	: "Csere erre:",
+DlgReplaceCaseChk		: "kis- és nagybetű megkülönböztetése",
+DlgReplaceReplaceBtn	: "Csere",
+DlgReplaceReplAllBtn	: "Az összes cseréje",
+DlgReplaceWordChk		: "csak ha ez a teljes szó",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "A böngésző biztonsági beállításai nem engedélyezik a szerkesztőnek, hogy végrehajtsa a kivágás műveletet. Használja az alábbi billentyűkombinációt (Ctrl+X).",
+PasteErrorCopy	: "A böngésző biztonsági beállításai nem engedélyezik a szerkesztőnek, hogy végrehajtsa a másolás műveletet. Használja az alábbi billentyűkombinációt (Ctrl+X).",
+
+PasteAsText		: "Beillesztés formázatlan szövegként",
+PasteFromWord	: "Beillesztés Word-ből",
+
+DlgPasteMsg2	: "Másolja be az alábbi mezőbe a <STRONG>Ctrl+V</STRONG> billentyűk lenyomásával, majd nyomjon <STRONG>Rendben</STRONG>-t.",
+DlgPasteSec		: "A böngésző biztonsági beállításai miatt a szerkesztő nem képes hozzáférni a vágólap adataihoz. Illeszd be újra ebben az ablakban.",
+DlgPasteIgnoreFont		: "Betű formázások megszüntetése",
+DlgPasteRemoveStyles	: "Stílusok eltávolítása",
+DlgPasteCleanBox		: "Törlés",
+
+// Color Picker
+ColorAutomatic	: "Automatikus",
+ColorMoreColors	: "További színek...",
+
+// Document Properties
+DocProps		: "Dokumentum tulajdonságai",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Horgony tulajdonságai",
+DlgAnchorName		: "Horgony neve",
+DlgAnchorErrorName	: "Kérem adja meg a horgony nevét",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Nincs a szótárban",
+DlgSpellChangeTo		: "Módosítás",
+DlgSpellBtnIgnore		: "Kihagyja",
+DlgSpellBtnIgnoreAll	: "Mindet kihagyja",
+DlgSpellBtnReplace		: "Csere",
+DlgSpellBtnReplaceAll	: "Összes cseréje",
+DlgSpellBtnUndo			: "Visszavonás",
+DlgSpellNoSuggestions	: "Nincs javaslat",
+DlgSpellProgress		: "Helyesírás-ellenőrzés folyamatban...",
+DlgSpellNoMispell		: "Helyesírás-ellenőrzés kész: Nem találtam hibát",
+DlgSpellNoChanges		: "Helyesírás-ellenőrzés kész: Nincs változtatott szó",
+DlgSpellOneChange		: "Helyesírás-ellenőrzés kész: Egy szó cserélve",
+DlgSpellManyChanges		: "Helyesírás-ellenőrzés kész: %1 szó cserélve",
+
+IeSpellDownload			: "A helyesírás-ellenőrző nincs telepítve. Szeretné letölteni most?",
+
+// Button Dialog
+DlgButtonText		: "Szöveg (Érték)",
+DlgButtonType		: "Típus",
+DlgButtonTypeBtn	: "Gomb",
+DlgButtonTypeSbm	: "Küldés",
+DlgButtonTypeRst	: "Alaphelyzet",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Név",
+DlgCheckboxValue	: "Érték",
+DlgCheckboxSelected	: "Kiválasztott",
+
+// Form Dialog
+DlgFormName		: "Név",
+DlgFormAction	: "Adatfeldolgozást végző hivatkozás",
+DlgFormMethod	: "Adatküldés módja",
+
+// Select Field Dialog
+DlgSelectName		: "Név",
+DlgSelectValue		: "Érték",
+DlgSelectSize		: "Méret",
+DlgSelectLines		: "sor",
+DlgSelectChkMulti	: "több sor is kiválasztható",
+DlgSelectOpAvail	: "Elérhető opciók",
+DlgSelectOpText		: "Szöveg",
+DlgSelectOpValue	: "Érték",
+DlgSelectBtnAdd		: "Hozzáad",
+DlgSelectBtnModify	: "Módosít",
+DlgSelectBtnUp		: "Fel",
+DlgSelectBtnDown	: "Le",
+DlgSelectBtnSetValue : "Legyen az alapértelmezett érték",
+DlgSelectBtnDelete	: "Töröl",
+
+// Textarea Dialog
+DlgTextareaName	: "Név",
+DlgTextareaCols	: "Karakterek száma egy sorban",
+DlgTextareaRows	: "Sorok száma",
+
+// Text Field Dialog
+DlgTextName			: "Név",
+DlgTextValue		: "Érték",
+DlgTextCharWidth	: "Megjelenített karakterek száma",
+DlgTextMaxChars		: "Maximális karakterszám",
+DlgTextType			: "Típus",
+DlgTextTypeText		: "Szöveg",
+DlgTextTypePass		: "Jelszó",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Név",
+DlgHiddenValue	: "Érték",
+
+// Bulleted List Dialog
+BulletedListProp	: "Felsorolás tulajdonságai",
+NumberedListProp	: "Számozás tulajdonságai",
+DlgLstStart			: "Start",
+DlgLstType			: "Formátum",
+DlgLstTypeCircle	: "Kör",
+DlgLstTypeDisc		: "Lemez",
+DlgLstTypeSquare	: "Négyzet",
+DlgLstTypeNumbers	: "Számok (1, 2, 3)",
+DlgLstTypeLCase		: "Kisbetűk (a, b, c)",
+DlgLstTypeUCase		: "Nagybetűk (A, B, C)",
+DlgLstTypeSRoman	: "Kis római számok (i, ii, iii)",
+DlgLstTypeLRoman	: "Nagy római számok (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Általános",
+DlgDocBackTab		: "Háttér",
+DlgDocColorsTab		: "Színek és margók",
+DlgDocMetaTab		: "Meta adatok",
+
+DlgDocPageTitle		: "Oldalcím",
+DlgDocLangDir		: "Írás iránya",
+DlgDocLangDirLTR	: "Balról jobbra",
+DlgDocLangDirRTL	: "Jobbról balra",
+DlgDocLangCode		: "Nyelv kód",
+DlgDocCharSet		: "Karakterkódolás",
+DlgDocCharSetCE		: "Közép-Európai",
+DlgDocCharSetCT		: "Kínai Tradicionális (Big5)",
+DlgDocCharSetCR		: "Cyrill",
+DlgDocCharSetGR		: "Görög",
+DlgDocCharSetJP		: "Japán",
+DlgDocCharSetKR		: "Koreai",
+DlgDocCharSetTR		: "Török",
+DlgDocCharSetUN		: "Unicode (UTF-8)",
+DlgDocCharSetWE		: "Nyugat-Európai",
+DlgDocCharSetOther	: "Más karakterkódolás",
+
+DlgDocDocType		: "Dokumentum típus fejléc",
+DlgDocDocTypeOther	: "Más dokumentum típus fejléc",
+DlgDocIncXHTML		: "XHTML deklarációk beillesztése",
+DlgDocBgColor		: "Háttérszín",
+DlgDocBgImage		: "Háttérkép cím",
+DlgDocBgNoScroll	: "Nem gördíthető háttér",
+DlgDocCText			: "Szöveg",
+DlgDocCLink			: "Cím",
+DlgDocCVisited		: "Látogatott cím",
+DlgDocCActive		: "Aktív cím",
+DlgDocMargins		: "Oldal margók",
+DlgDocMaTop			: "Felső",
+DlgDocMaLeft		: "Bal",
+DlgDocMaRight		: "Jobb",
+DlgDocMaBottom		: "Alsó",
+DlgDocMeIndex		: "Dokumentum keresőszavak (vesszővel elválasztva)",
+DlgDocMeDescr		: "Dokumentum leírás",
+DlgDocMeAuthor		: "Szerző",
+DlgDocMeCopy		: "Szerzői jog",
+DlgDocPreview		: "Előnézet",
+
+// Templates Dialog
+Templates			: "Sablonok",
+DlgTemplatesTitle	: "Elérhető sablonok",
+DlgTemplatesSelMsg	: "Válassza ki melyik sablon nyíljon meg a szerkesztőben<br>(a jelenlegi tartalom elveszik):",
+DlgTemplatesLoading	: "Sablon lista betöltése. Kis türelmet...",
+DlgTemplatesNoTpl	: "(Nincs sablon megadva)",
+DlgTemplatesReplace	: "Kicseréli a jelenlegi tartalmat",
+
+// About Dialog
+DlgAboutAboutTab	: "Névjegy",
+DlgAboutBrowserInfoTab	: "Böngésző információ",
+DlgAboutLicenseTab	: "Licensz",
+DlgAboutVersion		: "verzió",
+DlgAboutInfo		: "További információkért látogasson el ide:"
+};
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/it.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/it.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/it.js	(revision 1280)
@@ -0,0 +1,516 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Italian language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Nascondi la barra degli strumenti",
+ToolbarExpand		: "Mostra la barra degli strumenti",
+
+// Toolbar Items and Context Menu
+Save				: "Salva",
+NewPage				: "Nuova pagina vuota",
+Preview				: "Anteprima",
+Cut					: "Taglia",
+Copy				: "Copia",
+Paste				: "Incolla",
+PasteText			: "Incolla come testo semplice",
+PasteWord			: "Incolla da Word",
+Print				: "Stampa",
+SelectAll			: "Seleziona tutto",
+RemoveFormat		: "Elimina formattazione",
+InsertLinkLbl		: "Collegamento",
+InsertLink			: "Inserisci/Modifica collegamento",
+RemoveLink			: "Elimina collegamento",
+Anchor				: "Inserisci/Modifica Ancora",
+AnchorDelete		: "Remove Anchor",	//MISSING
+InsertImageLbl		: "Immagine",
+InsertImage			: "Inserisci/Modifica immagine",
+InsertFlashLbl		: "Oggetto Flash",
+InsertFlash			: "Inserisci/Modifica Oggetto Flash",
+InsertTableLbl		: "Tabella",
+InsertTable			: "Inserisci/Modifica tabella",
+InsertLineLbl		: "Riga orizzontale",
+InsertLine			: "Inserisci riga orizzontale",
+InsertSpecialCharLbl: "Caratteri speciali",
+InsertSpecialChar	: "Inserisci carattere speciale",
+InsertSmileyLbl		: "Emoticon",
+InsertSmiley		: "Inserisci emoticon",
+About				: "Informazioni su FCKeditor",
+Bold				: "Grassetto",
+Italic				: "Corsivo",
+Underline			: "Sottolineato",
+StrikeThrough		: "Barrato",
+Subscript			: "Pedice",
+Superscript			: "Apice",
+LeftJustify			: "Allinea a sinistra",
+CenterJustify		: "Centra",
+RightJustify		: "Allinea a destra",
+BlockJustify		: "Giustifica",
+DecreaseIndent		: "Riduci rientro",
+IncreaseIndent		: "Aumenta rientro",
+Blockquote			: "Blockquote",	//MISSING
+Undo				: "Annulla",
+Redo				: "Ripristina",
+NumberedListLbl		: "Elenco numerato",
+NumberedList		: "Inserisci/Modifica elenco numerato",
+BulletedListLbl		: "Elenco puntato",
+BulletedList		: "Inserisci/Modifica elenco puntato",
+ShowTableBorders	: "Mostra bordi tabelle",
+ShowDetails			: "Mostra dettagli",
+Style				: "Stile",
+FontFormat			: "Formato",
+Font				: "Font",
+FontSize			: "Dimensione",
+TextColor			: "Colore testo",
+BGColor				: "Colore sfondo",
+Source				: "Codice Sorgente",
+Find				: "Trova",
+Replace				: "Sostituisci",
+SpellCheck			: "Correttore ortografico",
+UniversalKeyboard	: "Tastiera universale",
+PageBreakLbl		: "Interruzione di pagina",
+PageBreak			: "Inserisci interruzione di pagina",
+
+Form			: "Modulo",
+Checkbox		: "Checkbox",
+RadioButton		: "Radio Button",
+TextField		: "Campo di testo",
+Textarea		: "Area di testo",
+HiddenField		: "Campo nascosto",
+Button			: "Bottone",
+SelectionField	: "Menu di selezione",
+ImageButton		: "Bottone immagine",
+
+FitWindow		: "Massimizza l'area dell'editor",
+ShowBlocks		: "Show Blocks",	//MISSING
+
+// Context Menu
+EditLink			: "Modifica collegamento",
+CellCM				: "Cella",
+RowCM				: "Riga",
+ColumnCM			: "Colonna",
+InsertRowAfter		: "Insert Row After",	//MISSING
+InsertRowBefore		: "Insert Row Before",	//MISSING
+DeleteRows			: "Elimina righe",
+InsertColumnAfter	: "Insert Column After",	//MISSING
+InsertColumnBefore	: "Insert Column Before",	//MISSING
+DeleteColumns		: "Elimina colonne",
+InsertCellAfter		: "Insert Cell After",	//MISSING
+InsertCellBefore	: "Insert Cell Before",	//MISSING
+DeleteCells			: "Elimina celle",
+MergeCells			: "Unisce celle",
+MergeRight			: "Merge Right",	//MISSING
+MergeDown			: "Merge Down",	//MISSING
+HorizontalSplitCell	: "Split Cell Horizontally",	//MISSING
+VerticalSplitCell	: "Split Cell Vertically",	//MISSING
+TableDelete			: "Cancella Tabella",
+CellProperties		: "Proprietà cella",
+TableProperties		: "Proprietà tabella",
+ImageProperties		: "Proprietà immagine",
+FlashProperties		: "Proprietà Oggetto Flash",
+
+AnchorProp			: "Proprietà ancora",
+ButtonProp			: "Proprietà bottone",
+CheckboxProp		: "Proprietà checkbox",
+HiddenFieldProp		: "Proprietà campo nascosto",
+RadioButtonProp		: "Proprietà radio button",
+ImageButtonProp		: "Proprietà bottone immagine",
+TextFieldProp		: "Proprietà campo di testo",
+SelectionFieldProp	: "Proprietà menu di selezione",
+TextareaProp		: "Proprietà area di testo",
+FormProp			: "Proprietà modulo",
+
+FontFormats			: "Normale;Formattato;Indirizzo;Titolo 1;Titolo 2;Titolo 3;Titolo 4;Titolo 5;Titolo 6;Paragrafo (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "Elaborazione XHTML in corso. Attendere prego...",
+Done				: "Completato",
+PasteWordConfirm	: "Il testo da incollare sembra provenire da Word. Desideri pulirlo prima di incollare?",
+NotCompatiblePaste	: "Questa funzione è disponibile solo per Internet Explorer 5.5 o superiore. Desideri incollare il testo senza pulirlo?",
+UnknownToolbarItem	: "Elemento della barra strumenti sconosciuto \"%1\"",
+UnknownCommand		: "Comando sconosciuto \"%1\"",
+NotImplemented		: "Comando non implementato",
+UnknownToolbarSet	: "La barra di strumenti \"%1\" non esiste",
+NoActiveX			: "Le impostazioni di sicurezza del tuo browser potrebbero limitare alcune funzionalità dell'editor. Devi abilitare l'opzione \"Esegui controlli e plug-in ActiveX\". Potresti avere errori e notare funzionalità mancanti.",
+BrowseServerBlocked : "Non è possibile aprire la finestra di espolorazione risorse. Verifica che tutti i blocca popup siano bloccati.",
+DialogBlocked		: "Non è possibile aprire la finestra di dialogo. Verifica che tutti i blocca popup siano bloccati.",
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Annulla",
+DlgBtnClose			: "Chiudi",
+DlgBtnBrowseServer	: "Cerca sul server",
+DlgAdvancedTag		: "Avanzate",
+DlgOpOther			: "<Altro>",
+DlgInfoTab			: "Info",
+DlgAlertUrl			: "Devi inserire l'URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<non impostato>",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Direzione scrittura",
+DlgGenLangDirLtr	: "Da Sinistra a Destra (LTR)",
+DlgGenLangDirRtl	: "Da Destra a Sinistra (RTL)",
+DlgGenLangCode		: "Codice Lingua",
+DlgGenAccessKey		: "Scorciatoia<br />da tastiera",
+DlgGenName			: "Nome",
+DlgGenTabIndex		: "Ordine di tabulazione",
+DlgGenLongDescr		: "URL descrizione estesa",
+DlgGenClass			: "Nome classe CSS",
+DlgGenTitle			: "Titolo",
+DlgGenContType		: "Tipo della risorsa collegata",
+DlgGenLinkCharset	: "Set di caretteri della risorsa collegata",
+DlgGenStyle			: "Stile",
+
+// Image Dialog
+DlgImgTitle			: "Proprietà immagine",
+DlgImgInfoTab		: "Informazioni immagine",
+DlgImgBtnUpload		: "Invia al server",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Carica",
+DlgImgAlt			: "Testo alternativo",
+DlgImgWidth			: "Larghezza",
+DlgImgHeight		: "Altezza",
+DlgImgLockRatio		: "Blocca rapporto",
+DlgBtnResetSize		: "Reimposta dimensione",
+DlgImgBorder		: "Bordo",
+DlgImgHSpace		: "HSpace",
+DlgImgVSpace		: "VSpace",
+DlgImgAlign			: "Allineamento",
+DlgImgAlignLeft		: "Sinistra",
+DlgImgAlignAbsBottom: "In basso assoluto",
+DlgImgAlignAbsMiddle: "Centrato assoluto",
+DlgImgAlignBaseline	: "Linea base",
+DlgImgAlignBottom	: "In Basso",
+DlgImgAlignMiddle	: "Centrato",
+DlgImgAlignRight	: "Destra",
+DlgImgAlignTextTop	: "In alto al testo",
+DlgImgAlignTop		: "In Alto",
+DlgImgPreview		: "Anteprima",
+DlgImgAlertUrl		: "Devi inserire l'URL per l'immagine",
+DlgImgLinkTab		: "Collegamento",
+
+// Flash Dialog
+DlgFlashTitle		: "Proprietà Oggetto Flash",
+DlgFlashChkPlay		: "Avvio Automatico",
+DlgFlashChkLoop		: "Cicla",
+DlgFlashChkMenu		: "Abilita Menu di Flash",
+DlgFlashScale		: "Ridimensiona",
+DlgFlashScaleAll	: "Mostra Tutto",
+DlgFlashScaleNoBorder	: "Senza Bordo",
+DlgFlashScaleFit	: "Dimensione Esatta",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Collegamento",
+DlgLnkInfoTab		: "Informazioni collegamento",
+DlgLnkTargetTab		: "Destinazione",
+
+DlgLnkType			: "Tipo di Collegamento",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Ancora nella pagina",
+DlgLnkTypeEMail		: "E-Mail",
+DlgLnkProto			: "Protocollo",
+DlgLnkProtoOther	: "<altro>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Scegli Ancora",
+DlgLnkAnchorByName	: "Per Nome",
+DlgLnkAnchorById	: "Per id elemento",
+DlgLnkNoAnchors		: "(Nessuna ancora disponibile nel documento)",
+DlgLnkEMail			: "Indirizzo E-Mail",
+DlgLnkEMailSubject	: "Oggetto del messaggio",
+DlgLnkEMailBody		: "Corpo del messaggio",
+DlgLnkUpload		: "Carica",
+DlgLnkBtnUpload		: "Invia al Server",
+
+DlgLnkTarget		: "Destinazione",
+DlgLnkTargetFrame	: "<riquadro>",
+DlgLnkTargetPopup	: "<finestra popup>",
+DlgLnkTargetBlank	: "Nuova finestra (_blank)",
+DlgLnkTargetParent	: "Finestra padre (_parent)",
+DlgLnkTargetSelf	: "Stessa finestra (_self)",
+DlgLnkTargetTop		: "Finestra superiore (_top)",
+DlgLnkTargetFrameName	: "Nome del riquadro di destinazione",
+DlgLnkPopWinName	: "Nome finestra popup",
+DlgLnkPopWinFeat	: "Caratteristiche finestra popup",
+DlgLnkPopResize		: "Ridimensionabile",
+DlgLnkPopLocation	: "Barra degli indirizzi",
+DlgLnkPopMenu		: "Barra del menu",
+DlgLnkPopScroll		: "Barre di scorrimento",
+DlgLnkPopStatus		: "Barra di stato",
+DlgLnkPopToolbar	: "Barra degli strumenti",
+DlgLnkPopFullScrn	: "A tutto schermo (IE)",
+DlgLnkPopDependent	: "Dipendente (Netscape)",
+DlgLnkPopWidth		: "Larghezza",
+DlgLnkPopHeight		: "Altezza",
+DlgLnkPopLeft		: "Posizione da sinistra",
+DlgLnkPopTop		: "Posizione dall'alto",
+
+DlnLnkMsgNoUrl		: "Devi inserire l'URL del collegamento",
+DlnLnkMsgNoEMail	: "Devi inserire un'indirizzo e-mail",
+DlnLnkMsgNoAnchor	: "Devi selezionare un'ancora",
+DlnLnkMsgInvPopName	: "Il nome del popup deve iniziare con una lettera, e non può contenere spazi",
+
+// Color Dialog
+DlgColorTitle		: "Seleziona colore",
+DlgColorBtnClear	: "Vuota",
+DlgColorHighlight	: "Evidenziato",
+DlgColorSelected	: "Selezionato",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Inserisci emoticon",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Seleziona carattere speciale",
+
+// Table Dialog
+DlgTableTitle		: "Proprietà tabella",
+DlgTableRows		: "Righe",
+DlgTableColumns		: "Colonne",
+DlgTableBorder		: "Dimensione bordo",
+DlgTableAlign		: "Allineamento",
+DlgTableAlignNotSet	: "<non impostato>",
+DlgTableAlignLeft	: "Sinistra",
+DlgTableAlignCenter	: "Centrato",
+DlgTableAlignRight	: "Destra",
+DlgTableWidth		: "Larghezza",
+DlgTableWidthPx		: "pixel",
+DlgTableWidthPc		: "percento",
+DlgTableHeight		: "Altezza",
+DlgTableCellSpace	: "Spaziatura celle",
+DlgTableCellPad		: "Padding celle",
+DlgTableCaption		: "Intestazione",
+DlgTableSummary		: "Indice",
+
+// Table Cell Dialog
+DlgCellTitle		: "Proprietà cella",
+DlgCellWidth		: "Larghezza",
+DlgCellWidthPx		: "pixel",
+DlgCellWidthPc		: "percento",
+DlgCellHeight		: "Altezza",
+DlgCellWordWrap		: "A capo automatico",
+DlgCellWordWrapNotSet	: "<non impostato>",
+DlgCellWordWrapYes	: "Si",
+DlgCellWordWrapNo	: "No",
+DlgCellHorAlign		: "Allineamento orizzontale",
+DlgCellHorAlignNotSet	: "<non impostato>",
+DlgCellHorAlignLeft	: "Sinistra",
+DlgCellHorAlignCenter	: "Centrato",
+DlgCellHorAlignRight: "Destra",
+DlgCellVerAlign		: "Allineamento verticale",
+DlgCellVerAlignNotSet	: "<non impostato>",
+DlgCellVerAlignTop	: "In Alto",
+DlgCellVerAlignMiddle	: "Centrato",
+DlgCellVerAlignBottom	: "In Basso",
+DlgCellVerAlignBaseline	: "Linea base",
+DlgCellRowSpan		: "Righe occupate",
+DlgCellCollSpan		: "Colonne occupate",
+DlgCellBackColor	: "Colore sfondo",
+DlgCellBorderColor	: "Colore bordo",
+DlgCellBtnSelect	: "Scegli...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Find and Replace",	//MISSING
+
+// Find Dialog
+DlgFindTitle		: "Trova",
+DlgFindFindBtn		: "Trova",
+DlgFindNotFoundMsg	: "L'elemento cercato non è stato trovato.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Sostituisci",
+DlgReplaceFindLbl		: "Trova:",
+DlgReplaceReplaceLbl	: "Sostituisci con:",
+DlgReplaceCaseChk		: "Maiuscole/minuscole",
+DlgReplaceReplaceBtn	: "Sostituisci",
+DlgReplaceReplAllBtn	: "Sostituisci tutto",
+DlgReplaceWordChk		: "Solo parole intere",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "Le impostazioni di sicurezza del browser non permettono di tagliare automaticamente il testo. Usa la tastiera (Ctrl+X).",
+PasteErrorCopy	: "Le impostazioni di sicurezza del browser non permettono di copiare automaticamente il testo. Usa la tastiera (Ctrl+C).",
+
+PasteAsText		: "Incolla come testo semplice",
+PasteFromWord	: "Incolla da Word",
+
+DlgPasteMsg2	: "Incolla il testo all'interno dell'area sottostante usando la scorciatoia di tastiere (<STRONG>Ctrl+V</STRONG>) e premi <STRONG>OK</STRONG>.",
+DlgPasteSec		: "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.",	//MISSING
+DlgPasteIgnoreFont		: "Ignora le definizioni di Font",
+DlgPasteRemoveStyles	: "Rimuovi le definizioni di Stile",
+DlgPasteCleanBox		: "Svuota area di testo",
+
+// Color Picker
+ColorAutomatic	: "Automatico",
+ColorMoreColors	: "Altri colori...",
+
+// Document Properties
+DocProps		: "Proprietà del Documento",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Proprietà ancora",
+DlgAnchorName		: "Nome ancora",
+DlgAnchorErrorName	: "Inserici il nome dell'ancora",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Non nel dizionario",
+DlgSpellChangeTo		: "Cambia in",
+DlgSpellBtnIgnore		: "Ignora",
+DlgSpellBtnIgnoreAll	: "Ignora tutto",
+DlgSpellBtnReplace		: "Cambia",
+DlgSpellBtnReplaceAll	: "Cambia tutto",
+DlgSpellBtnUndo			: "Annulla",
+DlgSpellNoSuggestions	: "- Nessun suggerimento -",
+DlgSpellProgress		: "Controllo ortografico in corso",
+DlgSpellNoMispell		: "Controllo ortografico completato: nessun errore trovato",
+DlgSpellNoChanges		: "Controllo ortografico completato: nessuna parola cambiata",
+DlgSpellOneChange		: "Controllo ortografico completato: 1 parola cambiata",
+DlgSpellManyChanges		: "Controllo ortografico completato: %1 parole cambiate",
+
+IeSpellDownload			: "Contollo ortografico non installato. Lo vuoi scaricare ora?",
+
+// Button Dialog
+DlgButtonText		: "Testo (Value)",
+DlgButtonType		: "Tipo",
+DlgButtonTypeBtn	: "Bottone",
+DlgButtonTypeSbm	: "Invio",
+DlgButtonTypeRst	: "Annulla",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Nome",
+DlgCheckboxValue	: "Valore",
+DlgCheckboxSelected	: "Selezionato",
+
+// Form Dialog
+DlgFormName		: "Nome",
+DlgFormAction	: "Azione",
+DlgFormMethod	: "Metodo",
+
+// Select Field Dialog
+DlgSelectName		: "Nome",
+DlgSelectValue		: "Valore",
+DlgSelectSize		: "Dimensione",
+DlgSelectLines		: "righe",
+DlgSelectChkMulti	: "Permetti selezione multipla",
+DlgSelectOpAvail	: "Opzioni disponibili",
+DlgSelectOpText		: "Testo",
+DlgSelectOpValue	: "Valore",
+DlgSelectBtnAdd		: "Aggiungi",
+DlgSelectBtnModify	: "Modifica",
+DlgSelectBtnUp		: "Su",
+DlgSelectBtnDown	: "Gi",
+DlgSelectBtnSetValue : "Imposta come predefinito",
+DlgSelectBtnDelete	: "Rimuovi",
+
+// Textarea Dialog
+DlgTextareaName	: "Nome",
+DlgTextareaCols	: "Colonne",
+DlgTextareaRows	: "Righe",
+
+// Text Field Dialog
+DlgTextName			: "Nome",
+DlgTextValue		: "Valore",
+DlgTextCharWidth	: "Larghezza",
+DlgTextMaxChars		: "Numero massimo di caratteri",
+DlgTextType			: "Tipo",
+DlgTextTypeText		: "Testo",
+DlgTextTypePass		: "Password",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Nome",
+DlgHiddenValue	: "Valore",
+
+// Bulleted List Dialog
+BulletedListProp	: "Proprietà lista puntata",
+NumberedListProp	: "Proprietà lista numerata",
+DlgLstStart			: "Inizio",
+DlgLstType			: "Tipo",
+DlgLstTypeCircle	: "Tondo",
+DlgLstTypeDisc		: "Disco",
+DlgLstTypeSquare	: "Quadrato",
+DlgLstTypeNumbers	: "Numeri (1, 2, 3)",
+DlgLstTypeLCase		: "Caratteri minuscoli (a, b, c)",
+DlgLstTypeUCase		: "Caratteri maiuscoli (A, B, C)",
+DlgLstTypeSRoman	: "Numeri Romani minuscoli (i, ii, iii)",
+DlgLstTypeLRoman	: "Numeri Romani maiuscoli (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Genarale",
+DlgDocBackTab		: "Sfondo",
+DlgDocColorsTab		: "Colori e margini",
+DlgDocMetaTab		: "Meta Data",
+
+DlgDocPageTitle		: "Titolo pagina",
+DlgDocLangDir		: "Direzione scrittura",
+DlgDocLangDirLTR	: "Da Sinistra a Destra (LTR)",
+DlgDocLangDirRTL	: "Da Destra a Sinistra (RTL)",
+DlgDocLangCode		: "Codice Lingua",
+DlgDocCharSet		: "Set di caretteri",
+DlgDocCharSetCE		: "Europa Centrale",
+DlgDocCharSetCT		: "Cinese Tradizionale (Big5)",
+DlgDocCharSetCR		: "Cirillico",
+DlgDocCharSetGR		: "Greco",
+DlgDocCharSetJP		: "Giapponese",
+DlgDocCharSetKR		: "Coreano",
+DlgDocCharSetTR		: "Turco",
+DlgDocCharSetUN		: "Unicode (UTF-8)",
+DlgDocCharSetWE		: "Europa Occidentale",
+DlgDocCharSetOther	: "Altro set di caretteri",
+
+DlgDocDocType		: "Intestazione DocType",
+DlgDocDocTypeOther	: "Altra intestazione DocType",
+DlgDocIncXHTML		: "Includi dichiarazione XHTML",
+DlgDocBgColor		: "Colore di sfondo",
+DlgDocBgImage		: "Immagine di sfondo",
+DlgDocBgNoScroll	: "Sfondo fissato",
+DlgDocCText			: "Testo",
+DlgDocCLink			: "Collegamento",
+DlgDocCVisited		: "Collegamento visitato",
+DlgDocCActive		: "Collegamento attivo",
+DlgDocMargins		: "Margini",
+DlgDocMaTop			: "In Alto",
+DlgDocMaLeft		: "A Sinistra",
+DlgDocMaRight		: "A Destra",
+DlgDocMaBottom		: "In Basso",
+DlgDocMeIndex		: "Chiavi di indicizzazione documento (separate da virgola)",
+DlgDocMeDescr		: "Descrizione documento",
+DlgDocMeAuthor		: "Autore",
+DlgDocMeCopy		: "Copyright",
+DlgDocPreview		: "Anteprima",
+
+// Templates Dialog
+Templates			: "Modelli",
+DlgTemplatesTitle	: "Contenuto dei modelli",
+DlgTemplatesSelMsg	: "Seleziona il modello da aprire nell'editor<br />(il contenuto attuale verrà eliminato):",
+DlgTemplatesLoading	: "Caricamento modelli in corso. Attendere prego...",
+DlgTemplatesNoTpl	: "(Nessun modello definito)",
+DlgTemplatesReplace	: "Cancella il contenuto corrente",
+
+// About Dialog
+DlgAboutAboutTab	: "Informazioni",
+DlgAboutBrowserInfoTab	: "Informazioni Browser",
+DlgAboutLicenseTab	: "Licenza",
+DlgAboutVersion		: "versione",
+DlgAboutInfo		: "Per maggiori informazioni visitare"
+};
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/ja.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/ja.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/ja.js	(revision 1280)
@@ -0,0 +1,516 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Japanese language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "ツールバーを隠す",
+ToolbarExpand		: "ツールバーを表示",
+
+// Toolbar Items and Context Menu
+Save				: "保存",
+NewPage				: "新しいページ",
+Preview				: "プレビュー",
+Cut					: "切り取り",
+Copy				: "コピー",
+Paste				: "貼り付け",
+PasteText			: "プレーンテキスト貼り付け",
+PasteWord			: "ワード文章から貼り付け",
+Print				: "印刷",
+SelectAll			: "すべて選択",
+RemoveFormat		: "フォーマット削除",
+InsertLinkLbl		: "リンク",
+InsertLink			: "リンク挿入/編集",
+RemoveLink			: "リンク削除",
+Anchor				: "アンカー挿入/編集",
+AnchorDelete		: "アンカー削除",
+InsertImageLbl		: "イメージ",
+InsertImage			: "イメージ挿入/編集",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Flash挿入/編集",
+InsertTableLbl		: "テーブル",
+InsertTable			: "テーブル挿入/編集",
+InsertLineLbl		: "ライン",
+InsertLine			: "横罫線",
+InsertSpecialCharLbl: "特殊文字",
+InsertSpecialChar	: "特殊文字挿入",
+InsertSmileyLbl		: "絵文字",
+InsertSmiley		: "絵文字挿入",
+About				: "FCKeditorヘルプ",
+Bold				: "太字",
+Italic				: "斜体",
+Underline			: "下線",
+StrikeThrough		: "打ち消し線",
+Subscript			: "添え字",
+Superscript			: "上付き文字",
+LeftJustify			: "左揃え",
+CenterJustify		: "中央揃え",
+RightJustify		: "右揃え",
+BlockJustify		: "両端揃え",
+DecreaseIndent		: "インデント解除",
+IncreaseIndent		: "インデント",
+Blockquote			: "ブロック引用",
+Undo				: "元に戻す",
+Redo				: "やり直し",
+NumberedListLbl		: "段落番号",
+NumberedList		: "段落番号の追加/削除",
+BulletedListLbl		: "箇条書き",
+BulletedList		: "箇条書きの追加/削除",
+ShowTableBorders	: "テーブルボーダー表示",
+ShowDetails			: "詳細表示",
+Style				: "スタイル",
+FontFormat			: "フォーマット",
+Font				: "フォント",
+FontSize			: "サイズ",
+TextColor			: "テキスト色",
+BGColor				: "背景色",
+Source				: "ソース",
+Find				: "検索",
+Replace				: "置き換え",
+SpellCheck			: "スペルチェック",
+UniversalKeyboard	: "ユニバーサル・キーボード",
+PageBreakLbl		: "改ページ",
+PageBreak			: "改ページ挿入",
+
+Form			: "フォーム",
+Checkbox		: "チェックボックス",
+RadioButton		: "ラジオボタン",
+TextField		: "１行テキスト",
+Textarea		: "テキストエリア",
+HiddenField		: "不可視フィールド",
+Button			: "ボタン",
+SelectionField	: "選択フィールド",
+ImageButton		: "画像ボタン",
+
+FitWindow		: "エディタサイズを最大にします",
+ShowBlocks		: "ブロック表示",
+
+// Context Menu
+EditLink			: "リンク編集",
+CellCM				: "セル",
+RowCM				: "行",
+ColumnCM			: "カラム",
+InsertRowAfter		: "列の後に挿入",
+InsertRowBefore		: "列の前に挿入",
+DeleteRows			: "行削除",
+InsertColumnAfter	: "カラムの後に挿入",
+InsertColumnBefore	: "カラムの前に挿入",
+DeleteColumns		: "列削除",
+InsertCellAfter		: "セルの後に挿入",
+InsertCellBefore	: "セルの前に挿入",
+DeleteCells			: "セル削除",
+MergeCells			: "セル結合",
+MergeRight			: "右に結合",
+MergeDown			: "下に結合",
+HorizontalSplitCell	: "セルを水平方向分割",
+VerticalSplitCell	: "セルを垂直方向に分割",
+TableDelete			: "テーブル削除",
+CellProperties		: "セル プロパティ",
+TableProperties		: "テーブル プロパティ",
+ImageProperties		: "イメージ プロパティ",
+FlashProperties		: "Flash プロパティ",
+
+AnchorProp			: "アンカー プロパティ",
+ButtonProp			: "ボタン プロパティ",
+CheckboxProp		: "チェックボックス プロパティ",
+HiddenFieldProp		: "不可視フィールド プロパティ",
+RadioButtonProp		: "ラジオボタン プロパティ",
+ImageButtonProp		: "画像ボタン プロパティ",
+TextFieldProp		: "１行テキスト プロパティ",
+SelectionFieldProp	: "選択フィールド プロパティ",
+TextareaProp		: "テキストエリア プロパティ",
+FormProp			: "フォーム プロパティ",
+
+FontFormats			: "標準;書式付き;アドレス;見出し 1;見出し 2;見出し 3;見出し 4;見出し 5;見出し 6;標準 (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "XHTML処理中. しばらくお待ちください...",
+Done				: "完了",
+PasteWordConfirm	: "貼り付けを行うテキストは、ワード文章からコピーされようとしています。貼り付ける前にクリーニングを行いますか？",
+NotCompatiblePaste	: "このコマンドはインターネット・エクスプローラーバージョン5.5以上で利用可能です。クリーニングしないで貼り付けを行いますか？",
+UnknownToolbarItem	: "未知のツールバー項目 \"%1\"",
+UnknownCommand		: "未知のコマンド名 \"%1\"",
+NotImplemented		: "コマンドはインプリメントされませんでした。",
+UnknownToolbarSet	: "ツールバー設定 \"%1\" 存在しません。",
+NoActiveX			: "エラー、警告メッセージなどが発生した場合、ブラウザーのセキュリティ設定によりエディタのいくつかの機能が制限されている可能性があります。セキュリティ設定のオプションで\"ActiveXコントロールとプラグインの実行\"を有効にするにしてください。",
+BrowseServerBlocked : "サーバーブラウザーを開くことができませんでした。ポップアップ・ブロック機能が無効になっているか確認してください。",
+DialogBlocked		: "ダイアログウィンドウを開くことができませんでした。ポップアップ・ブロック機能が無効になっているか確認してください。",
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "キャンセル",
+DlgBtnClose			: "閉じる",
+DlgBtnBrowseServer	: "サーバーブラウザー",
+DlgAdvancedTag		: "高度な設定",
+DlgOpOther			: "<その他>",
+DlgInfoTab			: "情報",
+DlgAlertUrl			: "URLを挿入してください",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<なし>",
+DlgGenId			: "Id",
+DlgGenLangDir		: "文字表記の方向",
+DlgGenLangDirLtr	: "左から右 (LTR)",
+DlgGenLangDirRtl	: "右から左 (RTL)",
+DlgGenLangCode		: "言語コード",
+DlgGenAccessKey		: "アクセスキー",
+DlgGenName			: "Name属性",
+DlgGenTabIndex		: "タブインデックス",
+DlgGenLongDescr		: "longdesc属性(長文説明)",
+DlgGenClass			: "スタイルシートクラス",
+DlgGenTitle			: "Title属性",
+DlgGenContType		: "Content Type属性",
+DlgGenLinkCharset	: "リンクcharset属性",
+DlgGenStyle			: "スタイルシート",
+
+// Image Dialog
+DlgImgTitle			: "イメージ プロパティ",
+DlgImgInfoTab		: "イメージ 情報",
+DlgImgBtnUpload		: "サーバーに送信",
+DlgImgURL			: "URL",
+DlgImgUpload		: "アップロード",
+DlgImgAlt			: "代替テキスト",
+DlgImgWidth			: "幅",
+DlgImgHeight		: "高さ",
+DlgImgLockRatio		: "ロック比率",
+DlgBtnResetSize		: "サイズリセット",
+DlgImgBorder		: "ボーダー",
+DlgImgHSpace		: "横間隔",
+DlgImgVSpace		: "縦間隔",
+DlgImgAlign			: "行揃え",
+DlgImgAlignLeft		: "左",
+DlgImgAlignAbsBottom: "下部(絶対的)",
+DlgImgAlignAbsMiddle: "中央(絶対的)",
+DlgImgAlignBaseline	: "ベースライン",
+DlgImgAlignBottom	: "下",
+DlgImgAlignMiddle	: "中央",
+DlgImgAlignRight	: "右",
+DlgImgAlignTextTop	: "テキスト上部",
+DlgImgAlignTop		: "上",
+DlgImgPreview		: "プレビュー",
+DlgImgAlertUrl		: "イメージのURLを入力してください。",
+DlgImgLinkTab		: "リンク",
+
+// Flash Dialog
+DlgFlashTitle		: "Flash プロパティ",
+DlgFlashChkPlay		: "再生",
+DlgFlashChkLoop		: "ループ再生",
+DlgFlashChkMenu		: "Flashメニュー可能",
+DlgFlashScale		: "拡大縮小設定",
+DlgFlashScaleAll	: "すべて表示",
+DlgFlashScaleNoBorder	: "外が見えない様に拡大",
+DlgFlashScaleFit	: "上下左右にフィット",
+
+// Link Dialog
+DlgLnkWindowTitle	: "ハイパーリンク",
+DlgLnkInfoTab		: "ハイパーリンク 情報",
+DlgLnkTargetTab		: "ターゲット",
+
+DlgLnkType			: "リンクタイプ",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "このページのアンカー",
+DlgLnkTypeEMail		: "E-Mail",
+DlgLnkProto			: "プロトコル",
+DlgLnkProtoOther	: "<その他>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "アンカーを選択",
+DlgLnkAnchorByName	: "アンカー名",
+DlgLnkAnchorById	: "エレメントID",
+DlgLnkNoAnchors		: "(ドキュメントにおいて利用可能なアンカーはありません。)",
+DlgLnkEMail			: "E-Mail アドレス",
+DlgLnkEMailSubject	: "件名",
+DlgLnkEMailBody		: "本文",
+DlgLnkUpload		: "アップロード",
+DlgLnkBtnUpload		: "サーバーに送信",
+
+DlgLnkTarget		: "ターゲット",
+DlgLnkTargetFrame	: "<フレーム>",
+DlgLnkTargetPopup	: "<ポップアップウィンドウ>",
+DlgLnkTargetBlank	: "新しいウィンドウ (_blank)",
+DlgLnkTargetParent	: "親ウィンドウ (_parent)",
+DlgLnkTargetSelf	: "同じウィンドウ (_self)",
+DlgLnkTargetTop		: "最上位ウィンドウ (_top)",
+DlgLnkTargetFrameName	: "目的のフレーム名",
+DlgLnkPopWinName	: "ポップアップウィンドウ名",
+DlgLnkPopWinFeat	: "ポップアップウィンドウ特徴",
+DlgLnkPopResize		: "リサイズ可能",
+DlgLnkPopLocation	: "ロケーションバー",
+DlgLnkPopMenu		: "メニューバー",
+DlgLnkPopScroll		: "スクロールバー",
+DlgLnkPopStatus		: "ステータスバー",
+DlgLnkPopToolbar	: "ツールバー",
+DlgLnkPopFullScrn	: "全画面モード(IE)",
+DlgLnkPopDependent	: "開いたウィンドウに連動して閉じる (Netscape)",
+DlgLnkPopWidth		: "幅",
+DlgLnkPopHeight		: "高さ",
+DlgLnkPopLeft		: "左端からの座標で指定",
+DlgLnkPopTop		: "上端からの座標で指定",
+
+DlnLnkMsgNoUrl		: "リンクURLを入力してください。",
+DlnLnkMsgNoEMail	: "メールアドレスを入力してください。",
+DlnLnkMsgNoAnchor	: "アンカーを選択してください。",
+DlnLnkMsgInvPopName	: "ポップ・アップ名は英字で始まる文字で指定してくだい。ポップ・アップ名にスペースは含めません",
+
+// Color Dialog
+DlgColorTitle		: "色選択",
+DlgColorBtnClear	: "クリア",
+DlgColorHighlight	: "ハイライト",
+DlgColorSelected	: "選択色",
+
+// Smiley Dialog
+DlgSmileyTitle		: "顔文字挿入",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "特殊文字選択",
+
+// Table Dialog
+DlgTableTitle		: "テーブル プロパティ",
+DlgTableRows		: "行",
+DlgTableColumns		: "列",
+DlgTableBorder		: "ボーダーサイズ",
+DlgTableAlign		: "キャプションの整列",
+DlgTableAlignNotSet	: "<なし>",
+DlgTableAlignLeft	: "左",
+DlgTableAlignCenter	: "中央",
+DlgTableAlignRight	: "右",
+DlgTableWidth		: "テーブル幅",
+DlgTableWidthPx		: "ピクセル",
+DlgTableWidthPc		: "パーセント",
+DlgTableHeight		: "テーブル高さ",
+DlgTableCellSpace	: "セル内余白",
+DlgTableCellPad		: "セル内間隔",
+DlgTableCaption		: "ｷｬﾌﾟｼｮﾝ",
+DlgTableSummary		: "テーブル目的/構造",
+
+// Table Cell Dialog
+DlgCellTitle		: "セル プロパティ",
+DlgCellWidth		: "幅",
+DlgCellWidthPx		: "ピクセル",
+DlgCellWidthPc		: "パーセント",
+DlgCellHeight		: "高さ",
+DlgCellWordWrap		: "折り返し",
+DlgCellWordWrapNotSet	: "<なし>",
+DlgCellWordWrapYes	: "Yes",
+DlgCellWordWrapNo	: "No",
+DlgCellHorAlign		: "セル横の整列",
+DlgCellHorAlignNotSet	: "<なし>",
+DlgCellHorAlignLeft	: "左",
+DlgCellHorAlignCenter	: "中央",
+DlgCellHorAlignRight: "右",
+DlgCellVerAlign		: "セル縦の整列",
+DlgCellVerAlignNotSet	: "<なし>",
+DlgCellVerAlignTop	: "上",
+DlgCellVerAlignMiddle	: "中央",
+DlgCellVerAlignBottom	: "下",
+DlgCellVerAlignBaseline	: "ベースライン",
+DlgCellRowSpan		: "縦幅(行数)",
+DlgCellCollSpan		: "横幅(列数)",
+DlgCellBackColor	: "背景色",
+DlgCellBorderColor	: "ボーダーカラー",
+DlgCellBtnSelect	: "選択...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "検索して置換",
+
+// Find Dialog
+DlgFindTitle		: "検索",
+DlgFindFindBtn		: "検索",
+DlgFindNotFoundMsg	: "指定された文字列は見つかりませんでした。",
+
+// Replace Dialog
+DlgReplaceTitle			: "置き換え",
+DlgReplaceFindLbl		: "検索する文字列:",
+DlgReplaceReplaceLbl	: "置換えする文字列:",
+DlgReplaceCaseChk		: "部分一致",
+DlgReplaceReplaceBtn	: "置換え",
+DlgReplaceReplAllBtn	: "すべて置換え",
+DlgReplaceWordChk		: "単語単位で一致",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "ブラウザーのセキュリティ設定によりエディタの切り取り操作が自動で実行することができません。実行するには手動でキーボードの(Ctrl+X)を使用してください。",
+PasteErrorCopy	: "ブラウザーのセキュリティ設定によりエディタのコピー操作が自動で実行することができません。実行するには手動でキーボードの(Ctrl+C)を使用してください。",
+
+PasteAsText		: "プレーンテキスト貼り付け",
+PasteFromWord	: "ワード文章から貼り付け",
+
+DlgPasteMsg2	: "キーボード(<STRONG>Ctrl+V</STRONG>)を使用して、次の入力エリア内で貼って、<STRONG>OK</STRONG>を押してください。",
+DlgPasteSec		: "ブラウザのセキュリティ設定により、エディタはクリップボード・データに直接アクセスすることができません。このウィンドウは貼り付け操作を行う度に表示されます。",
+DlgPasteIgnoreFont		: "FontタグのFace属性を無視します。",
+DlgPasteRemoveStyles	: "スタイル定義を削除します。",
+DlgPasteCleanBox		: "入力エリアクリア",
+
+// Color Picker
+ColorAutomatic	: "自動",
+ColorMoreColors	: "その他の色...",
+
+// Document Properties
+DocProps		: "文書 プロパティ",
+
+// Anchor Dialog
+DlgAnchorTitle		: "アンカー プロパティ",
+DlgAnchorName		: "アンカー名",
+DlgAnchorErrorName	: "アンカー名を必ず入力してください。",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "辞書にありません",
+DlgSpellChangeTo		: "変更",
+DlgSpellBtnIgnore		: "無視",
+DlgSpellBtnIgnoreAll	: "すべて無視",
+DlgSpellBtnReplace		: "置換",
+DlgSpellBtnReplaceAll	: "すべて置換",
+DlgSpellBtnUndo			: "やり直し",
+DlgSpellNoSuggestions	: "- 該当なし -",
+DlgSpellProgress		: "スペルチェック処理中...",
+DlgSpellNoMispell		: "スペルチェック完了: スペルの誤りはありませんでした",
+DlgSpellNoChanges		: "スペルチェック完了: 語句は変更されませんでした",
+DlgSpellOneChange		: "スペルチェック完了: １語句変更されました",
+DlgSpellManyChanges		: "スペルチェック完了: %1 語句変更されました",
+
+IeSpellDownload			: "スペルチェッカーがインストールされていません。今すぐダウンロードしますか?",
+
+// Button Dialog
+DlgButtonText		: "テキスト (値)",
+DlgButtonType		: "タイプ",
+DlgButtonTypeBtn	: "ボタン",
+DlgButtonTypeSbm	: "送信",
+DlgButtonTypeRst	: "リセット",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "名前",
+DlgCheckboxValue	: "値",
+DlgCheckboxSelected	: "選択済み",
+
+// Form Dialog
+DlgFormName		: "フォーム名",
+DlgFormAction	: "アクション",
+DlgFormMethod	: "メソッド",
+
+// Select Field Dialog
+DlgSelectName		: "名前",
+DlgSelectValue		: "値",
+DlgSelectSize		: "サイズ",
+DlgSelectLines		: "行",
+DlgSelectChkMulti	: "複数項目選択を許可",
+DlgSelectOpAvail	: "利用可能なオプション",
+DlgSelectOpText		: "選択項目名",
+DlgSelectOpValue	: "選択項目値",
+DlgSelectBtnAdd		: "追加",
+DlgSelectBtnModify	: "編集",
+DlgSelectBtnUp		: "上へ",
+DlgSelectBtnDown	: "下へ",
+DlgSelectBtnSetValue : "選択した値を設定",
+DlgSelectBtnDelete	: "削除",
+
+// Textarea Dialog
+DlgTextareaName	: "名前",
+DlgTextareaCols	: "列",
+DlgTextareaRows	: "行",
+
+// Text Field Dialog
+DlgTextName			: "名前",
+DlgTextValue		: "値",
+DlgTextCharWidth	: "サイズ",
+DlgTextMaxChars		: "最大長",
+DlgTextType			: "タイプ",
+DlgTextTypeText		: "テキスト",
+DlgTextTypePass		: "パスワード入力",
+
+// Hidden Field Dialog
+DlgHiddenName	: "名前",
+DlgHiddenValue	: "値",
+
+// Bulleted List Dialog
+BulletedListProp	: "箇条書き プロパティ",
+NumberedListProp	: "段落番号 プロパティ",
+DlgLstStart			: "開始文字",
+DlgLstType			: "タイプ",
+DlgLstTypeCircle	: "白丸",
+DlgLstTypeDisc		: "黒丸",
+DlgLstTypeSquare	: "四角",
+DlgLstTypeNumbers	: "アラビア数字 (1, 2, 3)",
+DlgLstTypeLCase		: "英字小文字 (a, b, c)",
+DlgLstTypeUCase		: "英字大文字 (A, B, C)",
+DlgLstTypeSRoman	: "ローマ数字小文字 (i, ii, iii)",
+DlgLstTypeLRoman	: "ローマ数字大文字 (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "全般",
+DlgDocBackTab		: "背景",
+DlgDocColorsTab		: "色とマージン",
+DlgDocMetaTab		: "メタデータ",
+
+DlgDocPageTitle		: "ページタイトル",
+DlgDocLangDir		: "言語文字表記の方向",
+DlgDocLangDirLTR	: "左から右に表記(LTR)",
+DlgDocLangDirRTL	: "右から左に表記(RTL)",
+DlgDocLangCode		: "言語コード",
+DlgDocCharSet		: "文字セット符号化",
+DlgDocCharSetCE		: "Central European",
+DlgDocCharSetCT		: "Chinese Traditional (Big5)",
+DlgDocCharSetCR		: "Cyrillic",
+DlgDocCharSetGR		: "Greek",
+DlgDocCharSetJP		: "Japanese",
+DlgDocCharSetKR		: "Korean",
+DlgDocCharSetTR		: "Turkish",
+DlgDocCharSetUN		: "Unicode (UTF-8)",
+DlgDocCharSetWE		: "Western European",
+DlgDocCharSetOther	: "他の文字セット符号化",
+
+DlgDocDocType		: "文書タイプヘッダー",
+DlgDocDocTypeOther	: "その他文書タイプヘッダー",
+DlgDocIncXHTML		: "XHTML宣言をインクルード",
+DlgDocBgColor		: "背景色",
+DlgDocBgImage		: "背景画像 URL",
+DlgDocBgNoScroll	: "スクロールしない背景",
+DlgDocCText			: "テキスト",
+DlgDocCLink			: "リンク",
+DlgDocCVisited		: "アクセス済みリンク",
+DlgDocCActive		: "アクセス中リンク",
+DlgDocMargins		: "ページ・マージン",
+DlgDocMaTop			: "上部",
+DlgDocMaLeft		: "左",
+DlgDocMaRight		: "右",
+DlgDocMaBottom		: "下部",
+DlgDocMeIndex		: "文書のキーワード(カンマ区切り)",
+DlgDocMeDescr		: "文書の概要",
+DlgDocMeAuthor		: "文書の作者",
+DlgDocMeCopy		: "文書の著作権",
+DlgDocPreview		: "プレビュー",
+
+// Templates Dialog
+Templates			: "テンプレート(雛形)",
+DlgTemplatesTitle	: "テンプレート内容",
+DlgTemplatesSelMsg	: "エディターで使用するテンプレートを選択してください。<br>(現在のエディタの内容は失われます):",
+DlgTemplatesLoading	: "テンプレート一覧読み込み中. しばらくお待ちください...",
+DlgTemplatesNoTpl	: "(テンプレートが定義されていません)",
+DlgTemplatesReplace	: "現在のエディタの内容と置換えをします",
+
+// About Dialog
+DlgAboutAboutTab	: "バージョン情報",
+DlgAboutBrowserInfoTab	: "ブラウザ情報",
+DlgAboutLicenseTab	: "ライセンス",
+DlgAboutVersion		: "バージョン",
+DlgAboutInfo		: "より詳しい情報はこちらで"
+};
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/km.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/km.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/km.js	(revision 1280)
@@ -0,0 +1,516 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Khmer language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "បង្រួមរបាឧបរកណ៍",
+ToolbarExpand		: "ពង្រីករបាឧបរណ៍",
+
+// Toolbar Items and Context Menu
+Save				: "រក្សាទុក",
+NewPage				: "ទំព័រថ្មី",
+Preview				: "មើលសាកល្បង",
+Cut					: "កាត់យក",
+Copy				: "ចំលងយក",
+Paste				: "ចំលងដាក់",
+PasteText			: "ចំលងដាក់ជាអត្ថបទធម្មតា",
+PasteWord			: "ចំលងដាក់ពី Word",
+Print				: "បោះពុម្ភ",
+SelectAll			: "ជ្រើសរើសទាំងអស់",
+RemoveFormat		: "លប់ចោល ការរចនា",
+InsertLinkLbl		: "ឈ្នាប់",
+InsertLink			: "បន្ថែម/កែប្រែ ឈ្នាប់",
+RemoveLink			: "លប់ឈ្នាប់",
+Anchor				: "បន្ថែម/កែប្រែ យុថ្កា",
+AnchorDelete		: "Remove Anchor",	//MISSING
+InsertImageLbl		: "រូបភាព",
+InsertImage			: "បន្ថែម/កែប្រែ រូបភាព",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "បន្ថែម/កែប្រែ Flash",
+InsertTableLbl		: "តារាង",
+InsertTable			: "បន្ថែម/កែប្រែ តារាង",
+InsertLineLbl		: "បន្ទាត់",
+InsertLine			: "បន្ថែមបន្ទាត់ផ្តេក",
+InsertSpecialCharLbl: "អក្សរពិសេស",
+InsertSpecialChar	: "បន្ថែមអក្សរពិសេស",
+InsertSmileyLbl		: "រូបភាព",
+InsertSmiley		: "បន្ថែម រូបភាព",
+About				: "អំពី FCKeditor",
+Bold				: "អក្សរដិតធំ",
+Italic				: "អក្សរផ្តេក",
+Underline			: "ដិតបន្ទាត់ពីក្រោមអក្សរ",
+StrikeThrough		: "ដិតបន្ទាត់ពាក់កណ្តាលអក្សរ",
+Subscript			: "អក្សរតូចក្រោម",
+Superscript			: "អក្សរតូចលើ",
+LeftJustify			: "តំរឹមឆ្វេង",
+CenterJustify		: "តំរឹមកណ្តាល",
+RightJustify		: "តំរឹមស្តាំ",
+BlockJustify		: "តំរឹមសងខាង",
+DecreaseIndent		: "បន្ថយការចូលបន្ទាត់",
+IncreaseIndent		: "បន្ថែមការចូលបន្ទាត់",
+Blockquote			: "Blockquote",	//MISSING
+Undo				: "សារឡើងវិញ",
+Redo				: "ធ្វើឡើងវិញ",
+NumberedListLbl		: "បញ្ជីជាអក្សរ",
+NumberedList		: "បន្ថែម/លប់ បញ្ជីជាអក្សរ",
+BulletedListLbl		: "បញ្ជីជារង្វង់មូល",
+BulletedList		: "បន្ថែម/លប់ បញ្ជីជារង្វង់មូល",
+ShowTableBorders	: "បង្ហាញស៊ុមតារាង",
+ShowDetails			: "បង្ហាញពិស្តារ",
+Style				: "ម៉ូត",
+FontFormat			: "រចនា",
+Font				: "ហ្វុង",
+FontSize			: "ទំហំ",
+TextColor			: "ពណ៌អក្សរ",
+BGColor				: "ពណ៌ផ្ទៃខាងក្រោយ",
+Source				: "កូត",
+Find				: "ស្វែងរក",
+Replace				: "ជំនួស",
+SpellCheck			: "ពិនិត្យអក្ខរាវិរុទ្ធ",
+UniversalKeyboard	: "ក្តារពុម្ភអក្សរសកល",
+PageBreakLbl		: "ការផ្តាច់ទំព័រ",
+PageBreak			: "បន្ថែម ការផ្តាច់ទំព័រ",
+
+Form			: "បែបបទ",
+Checkbox		: "ប្រអប់ជ្រើសរើស",
+RadioButton		: "ប៉ូតុនរង្វង់មូល",
+TextField		: "ជួរសរសេរអត្ថបទ",
+Textarea		: "តំបន់សរសេរអត្ថបទ",
+HiddenField		: "ជួរលាក់",
+Button			: "ប៉ូតុន",
+SelectionField	: "ជួរជ្រើសរើស",
+ImageButton		: "ប៉ូតុនរូបភាព",
+
+FitWindow		: "Maximize the editor size",	//MISSING
+ShowBlocks		: "Show Blocks",	//MISSING
+
+// Context Menu
+EditLink			: "កែប្រែឈ្នាប់",
+CellCM				: "Cell",	//MISSING
+RowCM				: "Row",	//MISSING
+ColumnCM			: "Column",	//MISSING
+InsertRowAfter		: "Insert Row After",	//MISSING
+InsertRowBefore		: "Insert Row Before",	//MISSING
+DeleteRows			: "លប់ជួរផ្តេក",
+InsertColumnAfter	: "Insert Column After",	//MISSING
+InsertColumnBefore	: "Insert Column Before",	//MISSING
+DeleteColumns		: "លប់ជួរឈរ",
+InsertCellAfter		: "Insert Cell After",	//MISSING
+InsertCellBefore	: "Insert Cell Before",	//MISSING
+DeleteCells			: "លប់សែល",
+MergeCells			: "បញ្ជូលសែល",
+MergeRight			: "Merge Right",	//MISSING
+MergeDown			: "Merge Down",	//MISSING
+HorizontalSplitCell	: "Split Cell Horizontally",	//MISSING
+VerticalSplitCell	: "Split Cell Vertically",	//MISSING
+TableDelete			: "លប់តារាង",
+CellProperties		: "ការកំណត់សែល",
+TableProperties		: "ការកំណត់តារាង",
+ImageProperties		: "ការកំណត់រូបភាព",
+FlashProperties		: "ការកំណត់ Flash",
+
+AnchorProp			: "ការកំណត់យុថ្កា",
+ButtonProp			: "ការកំណត់ ប៉ូតុន",
+CheckboxProp		: "ការកំណត់ប្រអប់ជ្រើសរើស",
+HiddenFieldProp		: "ការកំណត់ជួរលាក់",
+RadioButtonProp		: "ការកំណត់ប៉ូតុនរង្វង់",
+ImageButtonProp		: "ការកំណត់ប៉ូតុនរូបភាព",
+TextFieldProp		: "ការកំណត់ជួរអត្ថបទ",
+SelectionFieldProp	: "ការកំណត់ជួរជ្រើសរើស",
+TextareaProp		: "ការកំណត់កន្លែងសរសេរអត្ថបទ",
+FormProp			: "ការកំណត់បែបបទ",
+
+FontFormats			: "Normal;Formatted;Address;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6;Normal (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "កំពុងដំណើរការ XHTML ។ សូមរងចាំ...",
+Done				: "ចប់រួចរាល់",
+PasteWordConfirm	: "អត្ថបទដែលលោកអ្នកបំរុងចំលងដាក់ ហាក់បីដូចជាត្រូវចំលងមកពីកម្មវិធី​Word​។ តើលោកអ្នកចង់សំអាតមុនចំលងអត្ថបទដាក់ទេ?",
+NotCompatiblePaste	: "ពាក្យបញ្ជានេះប្រើបានតែជាមួយ Internet Explorer កំរិត 5.5 រឺ លើសនេះ ។ តើលោកអ្នកចង់ចំលងដាក់ដោយមិនចាំបាច់សំអាតទេ?",
+UnknownToolbarItem	: "វត្ថុលើរបាឧបរកណ៍ មិនស្គាល់ \"%1\"",
+UnknownCommand		: "ឈ្មោះពាក្យបញ្ជា មិនស្គាល់ \"%1\"",
+NotImplemented		: "ពាក្យបញ្ជា មិនបានអនុវត្ត",
+UnknownToolbarSet	: "របាឧបរកណ៍ \"%1\" ពុំមាន ។",
+NoActiveX			: "ការកំណត់សុវត្ថភាពរបស់កម្មវិធីរុករករបស់លោកអ្នក នេះ​អាចធ្វើអោយលោកអ្នកមិនអាចប្រើមុខងារខ្លះរបស់កម្មវិធីតាក់តែងអត្ថបទនេះ ។ លោកអ្នកត្រូវកំណត់អោយ \"ActiveX និង​កម្មវិធីជំនួយក្នុង (plug-ins)\" អោយដំណើរការ ។ លោកអ្នកអាចជួបប្រទះនឹង បញ្ហា ព្រមជាមួយនឹងការបាត់បង់មុខងារណាមួយរបស់កម្មវិធីតាក់តែងអត្ថបទនេះ ។",
+BrowseServerBlocked : "The resources browser could not be opened. Make sure that all popup blockers are disabled.",	//MISSING
+DialogBlocked		: "វីនដូវមិនអាចបើកបានទេ ។ សូមពិនិត្យចំពោះកម្មវិធីបិទ វីនដូវលោត (popup) ថាតើវាដំណើរការរឺទេ ។",
+
+// Dialogs
+DlgBtnOK			: "យល់ព្រម",
+DlgBtnCancel		: "មិនយល់ព្រម",
+DlgBtnClose			: "បិទ",
+DlgBtnBrowseServer	: "មើល",
+DlgAdvancedTag		: "កំរិតខ្ពស់",
+DlgOpOther			: "<ផ្សេងទៅត>",
+DlgInfoTab			: "ពត៌មាន",
+DlgAlertUrl			: "សូមសរសេរ URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<មិនមែន>",
+DlgGenId			: "Id",
+DlgGenLangDir		: "ទិសដៅភាសា",
+DlgGenLangDirLtr	: "ពីឆ្វេងទៅស្តាំ(LTR)",
+DlgGenLangDirRtl	: "ពីស្តាំទៅឆ្វេង(RTL)",
+DlgGenLangCode		: "លេខកូតភាសា",
+DlgGenAccessKey		: "ឃី សំរាប់ចូល",
+DlgGenName			: "ឈ្មោះ",
+DlgGenTabIndex		: "លេខ Tab",
+DlgGenLongDescr		: "អធិប្បាយ URL វែង",
+DlgGenClass			: "Stylesheet Classes",
+DlgGenTitle			: "ចំណងជើង ប្រឹក្សា",
+DlgGenContType		: "ប្រភេទអត្ថបទ ប្រឹក្សា",
+DlgGenLinkCharset	: "លេខកូតអក្សររបស់ឈ្នាប់",
+DlgGenStyle			: "ម៉ូត",
+
+// Image Dialog
+DlgImgTitle			: "ការកំណត់រូបភាព",
+DlgImgInfoTab		: "ពត៌មានអំពីរូបភាព",
+DlgImgBtnUpload		: "បញ្ជូនទៅកាន់ម៉ាស៊ីនផ្តល់សេវា",
+DlgImgURL			: "URL",
+DlgImgUpload		: "ទាញយក",
+DlgImgAlt			: "អត្ថបទជំនួស",
+DlgImgWidth			: "ទទឹង",
+DlgImgHeight		: "កំពស់",
+DlgImgLockRatio		: "អត្រាឡុក",
+DlgBtnResetSize		: "កំណត់ទំហំឡើងវិញ",
+DlgImgBorder		: "ស៊ុម",
+DlgImgHSpace		: "គំលាតទទឹង",
+DlgImgVSpace		: "គំលាតបណ្តោយ",
+DlgImgAlign			: "កំណត់ទីតាំង",
+DlgImgAlignLeft		: "ខាងឆ្វង",
+DlgImgAlignAbsBottom: "Abs Bottom",	//MISSING
+DlgImgAlignAbsMiddle: "Abs Middle",	//MISSING
+DlgImgAlignBaseline	: "បន្ទាត់ជាមូលដ្ឋាន",
+DlgImgAlignBottom	: "ខាងក្រោម",
+DlgImgAlignMiddle	: "កណ្តាល",
+DlgImgAlignRight	: "ខាងស្តាំ",
+DlgImgAlignTextTop	: "លើអត្ថបទ",
+DlgImgAlignTop		: "ខាងលើ",
+DlgImgPreview		: "មើលសាកល្បង",
+DlgImgAlertUrl		: "សូមសរសេរងាស័យដ្ឋានរបស់រូបភាព",
+DlgImgLinkTab		: "ឈ្នាប់",
+
+// Flash Dialog
+DlgFlashTitle		: "ការកំណត់ Flash",
+DlgFlashChkPlay		: "លេងដោយស្វ័យប្រវត្ត",
+DlgFlashChkLoop		: "ចំនួនដង",
+DlgFlashChkMenu		: "បង្ហាញ មឺនុយរបស់ Flash",
+DlgFlashScale		: "ទំហំ",
+DlgFlashScaleAll	: "បង្ហាញទាំងអស់",
+DlgFlashScaleNoBorder	: "មិនបង្ហាញស៊ុម",
+DlgFlashScaleFit	: "ត្រូវល្មម",
+
+// Link Dialog
+DlgLnkWindowTitle	: "ឈ្នាប់",
+DlgLnkInfoTab		: "ពត៌មានអំពីឈ្នាប់",
+DlgLnkTargetTab		: "គោលដៅ",
+
+DlgLnkType			: "ប្រភេទឈ្នាប់",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "យុថ្កានៅក្នុងទំព័រនេះ",
+DlgLnkTypeEMail		: "អ៊ីមែល",
+DlgLnkProto			: "ប្រូតូកូល",
+DlgLnkProtoOther	: "<ផ្សេងទៀត>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "ជ្រើសរើសយុថ្កា",
+DlgLnkAnchorByName	: "តាមឈ្មោះរបស់យុថ្កា",
+DlgLnkAnchorById	: "តាម Id",
+DlgLnkNoAnchors		: "(No anchors available in the document)",	//MISSING
+DlgLnkEMail			: "អ៊ីមែល",
+DlgLnkEMailSubject	: "ចំណងជើងអត្ថបទ",
+DlgLnkEMailBody		: "អត្ថបទ",
+DlgLnkUpload		: "ទាញយក",
+DlgLnkBtnUpload		: "ទាញយក",
+
+DlgLnkTarget		: "គោលដៅ",
+DlgLnkTargetFrame	: "<ហ្វ្រេម>",
+DlgLnkTargetPopup	: "<វីនដូវ លោត>",
+DlgLnkTargetBlank	: "វីនដូវថ្មី (_blank)",
+DlgLnkTargetParent	: "វីនដូវមេ (_parent)",
+DlgLnkTargetSelf	: "វីនដូវដដែល (_self)",
+DlgLnkTargetTop		: "វីនដូវនៅលើគេ(_top)",
+DlgLnkTargetFrameName	: "ឈ្មោះហ្រ្វេមដែលជាគោលដៅ",
+DlgLnkPopWinName	: "ឈ្មោះវីនដូវលោត",
+DlgLnkPopWinFeat	: "លក្ខណះរបស់វីនដូលលោត",
+DlgLnkPopResize		: "ទំហំអាចផ្លាស់ប្តូរ",
+DlgLnkPopLocation	: "របា ទីតាំង",
+DlgLnkPopMenu		: "របា មឺនុយ",
+DlgLnkPopScroll		: "របា ទាញ",
+DlgLnkPopStatus		: "របា ពត៌មាន",
+DlgLnkPopToolbar	: "របា ឩបករណ៍",
+DlgLnkPopFullScrn	: "អេក្រុងពេញ(IE)",
+DlgLnkPopDependent	: "អាស្រ័យលើ (Netscape)",
+DlgLnkPopWidth		: "ទទឹង",
+DlgLnkPopHeight		: "កំពស់",
+DlgLnkPopLeft		: "ទីតាំងខាងឆ្វេង",
+DlgLnkPopTop		: "ទីតាំងខាងលើ",
+
+DlnLnkMsgNoUrl		: "សូមសរសេរ អាស័យដ្ឋាន URL",
+DlnLnkMsgNoEMail	: "សូមសរសេរ អាស័យដ្ឋាន អ៊ីមែល",
+DlnLnkMsgNoAnchor	: "សូមជ្រើសរើស យុថ្កា",
+DlnLnkMsgInvPopName	: "The popup name must begin with an alphabetic character and must not contain spaces",	//MISSING
+
+// Color Dialog
+DlgColorTitle		: "ជ្រើសរើស ពណ៌",
+DlgColorBtnClear	: "លប់",
+DlgColorHighlight	: "ផាត់ពណ៌",
+DlgColorSelected	: "បានជ្រើសរើស",
+
+// Smiley Dialog
+DlgSmileyTitle		: "បញ្ជូលរូបភាព",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "តូអក្សរពិសេស",
+
+// Table Dialog
+DlgTableTitle		: "ការកំណត់ តារាង",
+DlgTableRows		: "ជួរផ្តេក",
+DlgTableColumns		: "ជួរឈរ",
+DlgTableBorder		: "ទំហំស៊ុម",
+DlgTableAlign		: "ការកំណត់ទីតាំង",
+DlgTableAlignNotSet	: "<មិនកំណត់>",
+DlgTableAlignLeft	: "ខាងឆ្វេង",
+DlgTableAlignCenter	: "កណ្តាល",
+DlgTableAlignRight	: "ខាងស្តាំ",
+DlgTableWidth		: "ទទឹង",
+DlgTableWidthPx		: "ភីកសែល",
+DlgTableWidthPc		: "ភាគរយ",
+DlgTableHeight		: "កំពស់",
+DlgTableCellSpace	: "គំលាតសែល",
+DlgTableCellPad		: "គែមសែល",
+DlgTableCaption		: "ចំណងជើង",
+DlgTableSummary		: "សេចក្តីសង្ខេប",
+
+// Table Cell Dialog
+DlgCellTitle		: "ការកំណត់ សែល",
+DlgCellWidth		: "ទទឹង",
+DlgCellWidthPx		: "ភីកសែល",
+DlgCellWidthPc		: "ភាគរយ",
+DlgCellHeight		: "កំពស់",
+DlgCellWordWrap		: "បង្ហាញអត្ថបទទាំងអស់",
+DlgCellWordWrapNotSet	: "<មិនកំណត់>",
+DlgCellWordWrapYes	: "បាទ(ចា)",
+DlgCellWordWrapNo	: "ទេ",
+DlgCellHorAlign		: "តំរឹមផ្តេក",
+DlgCellHorAlignNotSet	: "<មិនកំណត់>",
+DlgCellHorAlignLeft	: "ខាងឆ្វេង",
+DlgCellHorAlignCenter	: "កណ្តាល",
+DlgCellHorAlignRight: "Right",	//MISSING
+DlgCellVerAlign		: "តំរឹមឈរ",
+DlgCellVerAlignNotSet	: "<មិនកណត់>",
+DlgCellVerAlignTop	: "ខាងលើ",
+DlgCellVerAlignMiddle	: "កណ្តាល",
+DlgCellVerAlignBottom	: "ខាងក្រោម",
+DlgCellVerAlignBaseline	: "បន្ទាត់ជាមូលដ្ឋាន",
+DlgCellRowSpan		: "បញ្ជូលជួរផ្តេក",
+DlgCellCollSpan		: "បញ្ជូលជួរឈរ",
+DlgCellBackColor	: "ពណ៌ផ្នែកខាងក្រោម",
+DlgCellBorderColor	: "ពណ៌ស៊ុម",
+DlgCellBtnSelect	: "ជ្រើសរើស...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Find and Replace",	//MISSING
+
+// Find Dialog
+DlgFindTitle		: "ស្វែងរក",
+DlgFindFindBtn		: "ស្វែងរក",
+DlgFindNotFoundMsg	: "ពាក្យនេះ រកមិនឃើញទេ ។",
+
+// Replace Dialog
+DlgReplaceTitle			: "ជំនួស",
+DlgReplaceFindLbl		: "ស្វែងរកអ្វី:",
+DlgReplaceReplaceLbl	: "ជំនួសជាមួយ:",
+DlgReplaceCaseChk		: "ករណ៉ត្រូវរក",
+DlgReplaceReplaceBtn	: "ជំនួស",
+DlgReplaceReplAllBtn	: "ជំនួសទាំងអស់",
+DlgReplaceWordChk		: "ត្រូវពាក្យទាំងអស់",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "ការកំណត់សុវត្ថភាពរបស់កម្មវិធីរុករករបស់លោកអ្នក នេះ​មិនអាចធ្វើកម្មវិធីតាក់តែងអត្ថបទ កាត់អត្ថបទយកដោយស្វ័យប្រវត្តបានឡើយ ។ សូមប្រើប្រាស់បន្សំ ឃីដូចនេះ  (Ctrl+X) ។",
+PasteErrorCopy	: "ការកំណត់សុវត្ថភាពរបស់កម្មវិធីរុករករបស់លោកអ្នក នេះ​មិនអាចធ្វើកម្មវិធីតាក់តែងអត្ថបទ ចំលងអត្ថបទយកដោយស្វ័យប្រវត្តបានឡើយ ។ សូមប្រើប្រាស់បន្សំ ឃីដូចនេះ (Ctrl+C)។",
+
+PasteAsText		: "ចំលងដាក់អត្ថបទធម្មតា",
+PasteFromWord	: "ចំលងពាក្យពីកម្មវិធី Word",
+
+DlgPasteMsg2	: "សូមចំលងអត្ថបទទៅដាក់ក្នុងប្រអប់ដូចខាងក្រោមដោយប្រើប្រាស់ ឃី ​(<STRONG>Ctrl+V</STRONG>) ហើយចុច <STRONG>OK</STRONG> ។",
+DlgPasteSec		: "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.",	//MISSING
+DlgPasteIgnoreFont		: "មិនគិតអំពីប្រភេទពុម្ភអក្សរ",
+DlgPasteRemoveStyles	: "លប់ម៉ូត",
+DlgPasteCleanBox		: "លប់អត្ថបទចេញពីប្រអប់",
+
+// Color Picker
+ColorAutomatic	: "ស្វ័យប្រវត្ត",
+ColorMoreColors	: "ពណ៌ផ្សេងទៀត..",
+
+// Document Properties
+DocProps		: "ការកំណត់ ឯកសារ",
+
+// Anchor Dialog
+DlgAnchorTitle		: "ការកំណត់ចំណងជើងយុទ្ធថ្កា",
+DlgAnchorName		: "ឈ្មោះយុទ្ធថ្កា",
+DlgAnchorErrorName	: "សូមសរសេរ ឈ្មោះយុទ្ធថ្កា",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "គ្មានក្នុងវចនានុក្រម",
+DlgSpellChangeTo		: "ផ្លាស់ប្តូរទៅ",
+DlgSpellBtnIgnore		: "មិនផ្លាស់ប្តូរ",
+DlgSpellBtnIgnoreAll	: "មិនផ្លាស់ប្តូរ ទាំងអស់",
+DlgSpellBtnReplace		: "ជំនួស",
+DlgSpellBtnReplaceAll	: "ជំនួសទាំងអស់",
+DlgSpellBtnUndo			: "សារឡើងវិញ",
+DlgSpellNoSuggestions	: "- គ្មានសំណើរ -",
+DlgSpellProgress		: "កំពុងពិនិត្យអក្ខរាវិរុទ្ធ...",
+DlgSpellNoMispell		: "ការពិនិត្យអក្ខរាវិរុទ្ធបានចប់: គ្មានកំហុស",
+DlgSpellNoChanges		: "ការពិនិត្យអក្ខរាវិរុទ្ធបានចប់: ពុំមានផ្លាស់ប្តូរ",
+DlgSpellOneChange		: "ការពិនិត្យអក្ខរាវិរុទ្ធបានចប់: ពាក្យមួយត្រូចបានផ្លាស់ប្តូរ",
+DlgSpellManyChanges		: "ការពិនិត្យអក្ខរាវិរុទ្ធបានចប់: %1 ពាក្យបានផ្លាស់ប្តូរ",
+
+IeSpellDownload			: "ពុំមានកម្មវិធីពិនិត្យអក្ខរាវិរុទ្ធ ។ តើចង់ទាញយកពីណា?",
+
+// Button Dialog
+DlgButtonText		: "អត្ថបទ(តំលៃ)",
+DlgButtonType		: "ប្រភេទ",
+DlgButtonTypeBtn	: "Button",	//MISSING
+DlgButtonTypeSbm	: "Submit",	//MISSING
+DlgButtonTypeRst	: "Reset",	//MISSING
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "ឈ្មោះ",
+DlgCheckboxValue	: "តំលៃ",
+DlgCheckboxSelected	: "បានជ្រើសរើស",
+
+// Form Dialog
+DlgFormName		: "ឈ្មោះ",
+DlgFormAction	: "សកម្មភាព",
+DlgFormMethod	: "វិធី",
+
+// Select Field Dialog
+DlgSelectName		: "ឈ្មោះ",
+DlgSelectValue		: "តំលៃ",
+DlgSelectSize		: "ទំហំ",
+DlgSelectLines		: "បន្ទាត់",
+DlgSelectChkMulti	: "អនុញ្ញាតអោយជ្រើសរើសច្រើន",
+DlgSelectOpAvail	: "ការកំណត់ជ្រើសរើស ដែលអាចកំណត់បាន",
+DlgSelectOpText		: "ពាក្យ",
+DlgSelectOpValue	: "តំលៃ",
+DlgSelectBtnAdd		: "បន្ថែម",
+DlgSelectBtnModify	: "ផ្លាស់ប្តូរ",
+DlgSelectBtnUp		: "លើ",
+DlgSelectBtnDown	: "ក្រោម",
+DlgSelectBtnSetValue : "Set as selected value",	//MISSING
+DlgSelectBtnDelete	: "លប់",
+
+// Textarea Dialog
+DlgTextareaName	: "ឈ្មោះ",
+DlgTextareaCols	: "ជូរឈរ",
+DlgTextareaRows	: "ជូរផ្តេក",
+
+// Text Field Dialog
+DlgTextName			: "ឈ្មោះ",
+DlgTextValue		: "តំលៃ",
+DlgTextCharWidth	: "ទទឹង អក្សរ",
+DlgTextMaxChars		: "អក្សរអតិបរិមា",
+DlgTextType			: "ប្រភេទ",
+DlgTextTypeText		: "ពាក្យ",
+DlgTextTypePass		: "ពាក្យសំងាត់",
+
+// Hidden Field Dialog
+DlgHiddenName	: "ឈ្មោះ",
+DlgHiddenValue	: "តំលៃ",
+
+// Bulleted List Dialog
+BulletedListProp	: "កំណត់បញ្ជីរង្វង់",
+NumberedListProp	: "កំណត់បញ្េជីលេខ",
+DlgLstStart			: "Start",	//MISSING
+DlgLstType			: "ប្រភេទ",
+DlgLstTypeCircle	: "រង្វង់",
+DlgLstTypeDisc		: "Disc",
+DlgLstTypeSquare	: "ការេ",
+DlgLstTypeNumbers	: "លេខ(1, 2, 3)",
+DlgLstTypeLCase		: "អក្សរតូច(a, b, c)",
+DlgLstTypeUCase		: "អក្សរធំ(A, B, C)",
+DlgLstTypeSRoman	: "អក្សរឡាតាំងតូច(i, ii, iii)",
+DlgLstTypeLRoman	: "អក្សរឡាតាំងធំ(I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "ទូទៅ",
+DlgDocBackTab		: "ផ្នែកខាងក្រោយ",
+DlgDocColorsTab		: "ទំព័រ​និង ស៊ុម",
+DlgDocMetaTab		: "ទិន្នន័យមេ",
+
+DlgDocPageTitle		: "ចំណងជើងទំព័រ",
+DlgDocLangDir		: "ទិសដៅសរសេរភាសា",
+DlgDocLangDirLTR	: "ពីឆ្វេងទៅស្ដាំ(LTR)",
+DlgDocLangDirRTL	: "ពីស្ដាំទៅឆ្វេង(RTL)",
+DlgDocLangCode		: "លេខកូតភាសា",
+DlgDocCharSet		: "កំណត់លេខកូតភាសា",
+DlgDocCharSetCE		: "Central European",	//MISSING
+DlgDocCharSetCT		: "Chinese Traditional (Big5)",	//MISSING
+DlgDocCharSetCR		: "Cyrillic",	//MISSING
+DlgDocCharSetGR		: "Greek",	//MISSING
+DlgDocCharSetJP		: "Japanese",	//MISSING
+DlgDocCharSetKR		: "Korean",	//MISSING
+DlgDocCharSetTR		: "Turkish",	//MISSING
+DlgDocCharSetUN		: "Unicode (UTF-8)",	//MISSING
+DlgDocCharSetWE		: "Western European",	//MISSING
+DlgDocCharSetOther	: "កំណត់លេខកូតភាសាផ្សេងទៀត",
+
+DlgDocDocType		: "ប្រភេទក្បាលទំព័រ",
+DlgDocDocTypeOther	: "ប្រភេទក្បាលទំព័រផ្សេងទៀត",
+DlgDocIncXHTML		: "បញ្ជូល XHTML",
+DlgDocBgColor		: "ពណ៌ខាងក្រោម",
+DlgDocBgImage		: "URL របស់រូបភាពខាងក្រោម",
+DlgDocBgNoScroll	: "ទំព័រក្រោមមិនប្តូរ",
+DlgDocCText			: "អត្តបទ",
+DlgDocCLink			: "ឈ្នាប់",
+DlgDocCVisited		: "ឈ្នាប់មើលហើយ",
+DlgDocCActive		: "ឈ្នាប់កំពុងមើល",
+DlgDocMargins		: "ស៊ុមទំព័រ",
+DlgDocMaTop			: "លើ",
+DlgDocMaLeft		: "ឆ្វេង",
+DlgDocMaRight		: "ស្ដាំ",
+DlgDocMaBottom		: "ក្រោម",
+DlgDocMeIndex		: "ពាក្យនៅក្នុងឯកសារ (ផ្តាច់ពីគ្នាដោយក្បៀស)",
+DlgDocMeDescr		: "សេចក្តីអត្ថាធិប្បាយអំពីឯកសារ",
+DlgDocMeAuthor		: "អ្នកនិពន្ធ",
+DlgDocMeCopy		: "រក្សាសិទ្ធិ៏",
+DlgDocPreview		: "មើលសាកល្បង",
+
+// Templates Dialog
+Templates			: "ឯកសារគំរូ",
+DlgTemplatesTitle	: "ឯកសារគំរូ របស់អត្ថន័យ",
+DlgTemplatesSelMsg	: "សូមជ្រើសរើសឯកសារគំរូ ដើម្បីបើកនៅក្នុងកម្មវិធីតាក់តែងអត្ថបទ<br>(អត្ថបទនឹងបាត់បង់):",
+DlgTemplatesLoading	: "កំពុងអានបញ្ជីឯកសារគំរូ ។ សូមរងចាំ...",
+DlgTemplatesNoTpl	: "(ពុំមានឯកសារគំរូត្រូវបានកំណត់)",
+DlgTemplatesReplace	: "Replace actual contents",	//MISSING
+
+// About Dialog
+DlgAboutAboutTab	: "អំពី",
+DlgAboutBrowserInfoTab	: "ព៌តមានកម្មវិធីរុករក",
+DlgAboutLicenseTab	: "License",	//MISSING
+DlgAboutVersion		: "ជំនាន់",
+DlgAboutInfo		: "សំរាប់ព៌តមានផ្សេងទៀត សូមទាក់ទង"
+};
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/ko.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/ko.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/ko.js	(revision 1280)
@@ -0,0 +1,516 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Korean language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "툴바 감추기",
+ToolbarExpand		: "툴바 보이기",
+
+// Toolbar Items and Context Menu
+Save				: "저장하기",
+NewPage				: "새 문서",
+Preview				: "미리보기",
+Cut					: "잘라내기",
+Copy				: "복사하기",
+Paste				: "붙여넣기",
+PasteText			: "텍스트로 붙여넣기",
+PasteWord			: "MS Word 형식에서 붙여넣기",
+Print				: "인쇄하기",
+SelectAll			: "전체선택",
+RemoveFormat		: "포맷 지우기",
+InsertLinkLbl		: "링크",
+InsertLink			: "링크 삽입/변경",
+RemoveLink			: "링크 삭제",
+Anchor				: "책갈피 삽입/변경",
+AnchorDelete		: "Remove Anchor",	//MISSING
+InsertImageLbl		: "이미지",
+InsertImage			: "이미지 삽입/변경",
+InsertFlashLbl		: "플래쉬",
+InsertFlash			: "플래쉬 삽입/변경",
+InsertTableLbl		: "표",
+InsertTable			: "표 삽입/변경",
+InsertLineLbl		: "수평선",
+InsertLine			: "수평선 삽입",
+InsertSpecialCharLbl: "특수문자 삽입",
+InsertSpecialChar	: "특수문자 삽입",
+InsertSmileyLbl		: "아이콘",
+InsertSmiley		: "아이콘 삽입",
+About				: "FCKeditor에 대하여",
+Bold				: "진하게",
+Italic				: "이텔릭",
+Underline			: "밑줄",
+StrikeThrough		: "취소선",
+Subscript			: "아래 첨자",
+Superscript			: "위 첨자",
+LeftJustify			: "왼쪽 정렬",
+CenterJustify		: "가운데 정렬",
+RightJustify		: "오른쪽 정렬",
+BlockJustify		: "양쪽 맞춤",
+DecreaseIndent		: "내어쓰기",
+IncreaseIndent		: "들여쓰기",
+Blockquote			: "Blockquote",	//MISSING
+Undo				: "취소",
+Redo				: "재실행",
+NumberedListLbl		: "순서있는 목록",
+NumberedList		: "순서있는 목록",
+BulletedListLbl		: "순서없는 목록",
+BulletedList		: "순서없는 목록",
+ShowTableBorders	: "표 테두리 보기",
+ShowDetails			: "문서기호 보기",
+Style				: "스타일",
+FontFormat			: "포맷",
+Font				: "폰트",
+FontSize			: "글자 크기",
+TextColor			: "글자 색상",
+BGColor				: "배경 색상",
+Source				: "소스",
+Find				: "찾기",
+Replace				: "바꾸기",
+SpellCheck			: "철자검사",
+UniversalKeyboard	: "다국어 입력기",
+PageBreakLbl		: "Page Break",	//MISSING
+PageBreak			: "Insert Page Break",	//MISSING
+
+Form			: "폼",
+Checkbox		: "체크박스",
+RadioButton		: "라디오버튼",
+TextField		: "입력필드",
+Textarea		: "입력영역",
+HiddenField		: "숨김필드",
+Button			: "버튼",
+SelectionField	: "펼침목록",
+ImageButton		: "이미지버튼",
+
+FitWindow		: "Maximize the editor size",	//MISSING
+ShowBlocks		: "Show Blocks",	//MISSING
+
+// Context Menu
+EditLink			: "링크 수정",
+CellCM				: "Cell",	//MISSING
+RowCM				: "Row",	//MISSING
+ColumnCM			: "Column",	//MISSING
+InsertRowAfter		: "Insert Row After",	//MISSING
+InsertRowBefore		: "Insert Row Before",	//MISSING
+DeleteRows			: "가로줄 삭제",
+InsertColumnAfter	: "Insert Column After",	//MISSING
+InsertColumnBefore	: "Insert Column Before",	//MISSING
+DeleteColumns		: "세로줄 삭제",
+InsertCellAfter		: "Insert Cell After",	//MISSING
+InsertCellBefore	: "Insert Cell Before",	//MISSING
+DeleteCells			: "셀 삭제",
+MergeCells			: "셀 합치기",
+MergeRight			: "Merge Right",	//MISSING
+MergeDown			: "Merge Down",	//MISSING
+HorizontalSplitCell	: "Split Cell Horizontally",	//MISSING
+VerticalSplitCell	: "Split Cell Vertically",	//MISSING
+TableDelete			: "Delete Table",	//MISSING
+CellProperties		: "셀 속성",
+TableProperties		: "표 속성",
+ImageProperties		: "이미지 속성",
+FlashProperties		: "플래쉬 속성",
+
+AnchorProp			: "책갈피 속성",
+ButtonProp			: "버튼 속성",
+CheckboxProp		: "체크박스 속성",
+HiddenFieldProp		: "숨김필드 속성",
+RadioButtonProp		: "라디오버튼 속성",
+ImageButtonProp		: "이미지버튼 속성",
+TextFieldProp		: "입력필드 속성",
+SelectionFieldProp	: "펼침목록 속성",
+TextareaProp		: "입력영역 속성",
+FormProp			: "폼 속성",
+
+FontFormats			: "Normal;Formatted;Address;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6",
+
+// Alerts and Messages
+ProcessingXHTML		: "XHTML 처리중. 잠시만 기다려주십시요.",
+Done				: "완료",
+PasteWordConfirm	: "붙여넣기 할 텍스트는 MS Word에서 복사한 것입니다. 붙여넣기 전에 MS Word 포멧을 삭제하시겠습니까?",
+NotCompatiblePaste	: "이 명령은 인터넷익스플로러 5.5 버전 이상에서만 작동합니다. 포멧을 삭제하지 않고 붙여넣기 하시겠습니까?",
+UnknownToolbarItem	: "알수없는 툴바입니다. : \"%1\"",
+UnknownCommand		: "알수없는 기능입니다. : \"%1\"",
+NotImplemented		: "기능이 실행되지 않았습니다.",
+UnknownToolbarSet	: "툴바 설정이 없습니다. : \"%1\"",
+NoActiveX			: "Your browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.",	//MISSING
+BrowseServerBlocked : "The resources browser could not be opened. Make sure that all popup blockers are disabled.",	//MISSING
+DialogBlocked		: "It was not possible to open the dialog window. Make sure all popup blockers are disabled.",	//MISSING
+
+// Dialogs
+DlgBtnOK			: "예",
+DlgBtnCancel		: "아니오",
+DlgBtnClose			: "닫기",
+DlgBtnBrowseServer	: "서버 보기",
+DlgAdvancedTag		: "자세히",
+DlgOpOther			: "<기타>",
+DlgInfoTab			: "정보",
+DlgAlertUrl			: "URL을 입력하십시요",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<설정되지 않음>",
+DlgGenId			: "ID",
+DlgGenLangDir		: "쓰기 방향",
+DlgGenLangDirLtr	: "왼쪽에서 오른쪽 (LTR)",
+DlgGenLangDirRtl	: "오른쪽에서 왼쪽 (RTL)",
+DlgGenLangCode		: "언어 코드",
+DlgGenAccessKey		: "엑세스 키",
+DlgGenName			: "Name",
+DlgGenTabIndex		: "탭 순서",
+DlgGenLongDescr		: "URL 설명",
+DlgGenClass			: "Stylesheet Classes",
+DlgGenTitle			: "Advisory Title",
+DlgGenContType		: "Advisory Content Type",
+DlgGenLinkCharset	: "Linked Resource Charset",
+DlgGenStyle			: "Style",
+
+// Image Dialog
+DlgImgTitle			: "이미지 설정",
+DlgImgInfoTab		: "이미지 정보",
+DlgImgBtnUpload		: "서버로 전송",
+DlgImgURL			: "URL",
+DlgImgUpload		: "업로드",
+DlgImgAlt			: "이미지 설명",
+DlgImgWidth			: "너비",
+DlgImgHeight		: "높이",
+DlgImgLockRatio		: "비율 유지",
+DlgBtnResetSize		: "원래 크기로",
+DlgImgBorder		: "테두리",
+DlgImgHSpace		: "수평여백",
+DlgImgVSpace		: "수직여백",
+DlgImgAlign			: "정렬",
+DlgImgAlignLeft		: "왼쪽",
+DlgImgAlignAbsBottom: "줄아래(Abs Bottom)",
+DlgImgAlignAbsMiddle: "줄중간(Abs Middle)",
+DlgImgAlignBaseline	: "기준선",
+DlgImgAlignBottom	: "아래",
+DlgImgAlignMiddle	: "중간",
+DlgImgAlignRight	: "오른쪽",
+DlgImgAlignTextTop	: "글자위(Text Top)",
+DlgImgAlignTop		: "위",
+DlgImgPreview		: "미리보기",
+DlgImgAlertUrl		: "이미지 URL을 입력하십시요",
+DlgImgLinkTab		: "링크",
+
+// Flash Dialog
+DlgFlashTitle		: "플래쉬 등록정보",
+DlgFlashChkPlay		: "자동재생",
+DlgFlashChkLoop		: "반복",
+DlgFlashChkMenu		: "플래쉬메뉴 가능",
+DlgFlashScale		: "영역",
+DlgFlashScaleAll	: "모두보기",
+DlgFlashScaleNoBorder	: "경계선없음",
+DlgFlashScaleFit	: "영역자동조절",
+
+// Link Dialog
+DlgLnkWindowTitle	: "링크",
+DlgLnkInfoTab		: "링크 정보",
+DlgLnkTargetTab		: "타겟",
+
+DlgLnkType			: "링크 종류",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "책갈피",
+DlgLnkTypeEMail		: "이메일",
+DlgLnkProto			: "프로토콜",
+DlgLnkProtoOther	: "<기타>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "책갈피 선택",
+DlgLnkAnchorByName	: "책갈피 이름",
+DlgLnkAnchorById	: "책갈피 ID",
+DlgLnkNoAnchors		: "(문서에 책갈피가 없습니다.)",
+DlgLnkEMail			: "이메일 주소",
+DlgLnkEMailSubject	: "제목",
+DlgLnkEMailBody		: "내용",
+DlgLnkUpload		: "업로드",
+DlgLnkBtnUpload		: "서버로 전송",
+
+DlgLnkTarget		: "타겟",
+DlgLnkTargetFrame	: "<프레임>",
+DlgLnkTargetPopup	: "<팝업창>",
+DlgLnkTargetBlank	: "새 창 (_blank)",
+DlgLnkTargetParent	: "부모 창 (_parent)",
+DlgLnkTargetSelf	: "현재 창 (_self)",
+DlgLnkTargetTop		: "최 상위 창 (_top)",
+DlgLnkTargetFrameName	: "타겟 프레임 이름",
+DlgLnkPopWinName	: "팝업창 이름",
+DlgLnkPopWinFeat	: "팝업창 설정",
+DlgLnkPopResize		: "크기조정",
+DlgLnkPopLocation	: "주소표시줄",
+DlgLnkPopMenu		: "메뉴바",
+DlgLnkPopScroll		: "스크롤바",
+DlgLnkPopStatus		: "상태바",
+DlgLnkPopToolbar	: "툴바",
+DlgLnkPopFullScrn	: "전체화면 (IE)",
+DlgLnkPopDependent	: "Dependent (Netscape)",
+DlgLnkPopWidth		: "너비",
+DlgLnkPopHeight		: "높이",
+DlgLnkPopLeft		: "왼쪽 위치",
+DlgLnkPopTop		: "윗쪽 위치",
+
+DlnLnkMsgNoUrl		: "링크 URL을 입력하십시요.",
+DlnLnkMsgNoEMail	: "이메일주소를 입력하십시요.",
+DlnLnkMsgNoAnchor	: "책갈피명을 입력하십시요.",
+DlnLnkMsgInvPopName	: "The popup name must begin with an alphabetic character and must not contain spaces",	//MISSING
+
+// Color Dialog
+DlgColorTitle		: "색상 선택",
+DlgColorBtnClear	: "지우기",
+DlgColorHighlight	: "현재",
+DlgColorSelected	: "선택됨",
+
+// Smiley Dialog
+DlgSmileyTitle		: "아이콘 삽입",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "특수문자 선택",
+
+// Table Dialog
+DlgTableTitle		: "표 설정",
+DlgTableRows		: "가로줄",
+DlgTableColumns		: "세로줄",
+DlgTableBorder		: "테두리 크기",
+DlgTableAlign		: "정렬",
+DlgTableAlignNotSet	: "<설정되지 않음>",
+DlgTableAlignLeft	: "왼쪽",
+DlgTableAlignCenter	: "가운데",
+DlgTableAlignRight	: "오른쪽",
+DlgTableWidth		: "너비",
+DlgTableWidthPx		: "픽셀",
+DlgTableWidthPc		: "퍼센트",
+DlgTableHeight		: "높이",
+DlgTableCellSpace	: "셀 간격",
+DlgTableCellPad		: "셀 여백",
+DlgTableCaption		: "캡션",
+DlgTableSummary		: "Summary",	//MISSING
+
+// Table Cell Dialog
+DlgCellTitle		: "셀 설정",
+DlgCellWidth		: "너비",
+DlgCellWidthPx		: "픽셀",
+DlgCellWidthPc		: "퍼센트",
+DlgCellHeight		: "높이",
+DlgCellWordWrap		: "워드랩",
+DlgCellWordWrapNotSet	: "<설정되지 않음>",
+DlgCellWordWrapYes	: "예",
+DlgCellWordWrapNo	: "아니오",
+DlgCellHorAlign		: "수평 정렬",
+DlgCellHorAlignNotSet	: "<설정되지 않음>",
+DlgCellHorAlignLeft	: "왼쪽",
+DlgCellHorAlignCenter	: "가운데",
+DlgCellHorAlignRight: "오른쪽",
+DlgCellVerAlign		: "수직 정렬",
+DlgCellVerAlignNotSet	: "<설정되지 않음>",
+DlgCellVerAlignTop	: "위",
+DlgCellVerAlignMiddle	: "중간",
+DlgCellVerAlignBottom	: "아래",
+DlgCellVerAlignBaseline	: "기준선",
+DlgCellRowSpan		: "세로 합치기",
+DlgCellCollSpan		: "가로 합치기",
+DlgCellBackColor	: "배경 색상",
+DlgCellBorderColor	: "테두리 색상",
+DlgCellBtnSelect	: "선택",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Find and Replace",	//MISSING
+
+// Find Dialog
+DlgFindTitle		: "찾기",
+DlgFindFindBtn		: "찾기",
+DlgFindNotFoundMsg	: "문자열을 찾을 수 없습니다.",
+
+// Replace Dialog
+DlgReplaceTitle			: "바꾸기",
+DlgReplaceFindLbl		: "찾을 문자열:",
+DlgReplaceReplaceLbl	: "바꿀 문자열:",
+DlgReplaceCaseChk		: "대소문자 구분",
+DlgReplaceReplaceBtn	: "바꾸기",
+DlgReplaceReplAllBtn	: "모두 바꾸기",
+DlgReplaceWordChk		: "온전한 단어",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "브라우저의 보안설정때문에 잘라내기 기능을 실행할 수 없습니다. 키보드 명령을 사용하십시요. (Ctrl+X).",
+PasteErrorCopy	: "브라우저의 보안설정때문에 복사하기 기능을 실행할 수 없습니다. 키보드 명령을 사용하십시요.  (Ctrl+C).",
+
+PasteAsText		: "텍스트로 붙여넣기",
+PasteFromWord	: "MS Word 형식에서 붙여넣기",
+
+DlgPasteMsg2	: "키보드의 (<STRONG>Ctrl+V</STRONG>) 를 이용해서 상자안에 붙여넣고 <STRONG>OK</STRONG> 를 누르세요.",
+DlgPasteSec		: "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.",	//MISSING
+DlgPasteIgnoreFont		: "폰트 설정 무시",
+DlgPasteRemoveStyles	: "스타일 정의 제거",
+DlgPasteCleanBox		: "글상자 제거",
+
+// Color Picker
+ColorAutomatic	: "기본색상",
+ColorMoreColors	: "색상선택...",
+
+// Document Properties
+DocProps		: "문서 속성",
+
+// Anchor Dialog
+DlgAnchorTitle		: "책갈피 속성",
+DlgAnchorName		: "책갈피 이름",
+DlgAnchorErrorName	: "책갈피 이름을 입력하십시요.",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "사전에 없는 단어",
+DlgSpellChangeTo		: "변경할 단어",
+DlgSpellBtnIgnore		: "건너뜀",
+DlgSpellBtnIgnoreAll	: "모두 건너뜀",
+DlgSpellBtnReplace		: "변경",
+DlgSpellBtnReplaceAll	: "모두 변경",
+DlgSpellBtnUndo			: "취소",
+DlgSpellNoSuggestions	: "- 추천단어 없음 -",
+DlgSpellProgress		: "철자검사를 진행중입니다...",
+DlgSpellNoMispell		: "철자검사 완료: 잘못된 철자가 없습니다.",
+DlgSpellNoChanges		: "철자검사 완료: 변경된 단어가 없습니다.",
+DlgSpellOneChange		: "철자검사 완료: 단어가 변경되었습니다.",
+DlgSpellManyChanges		: "철자검사 완료: %1 단어가 변경되었습니다.",
+
+IeSpellDownload			: "철자 검사기가 철치되지 않았습니다. 지금 다운로드하시겠습니까?",
+
+// Button Dialog
+DlgButtonText		: "버튼글자(값)",
+DlgButtonType		: "버튼종류",
+DlgButtonTypeBtn	: "Button",	//MISSING
+DlgButtonTypeSbm	: "Submit",	//MISSING
+DlgButtonTypeRst	: "Reset",	//MISSING
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "이름",
+DlgCheckboxValue	: "값",
+DlgCheckboxSelected	: "선택됨",
+
+// Form Dialog
+DlgFormName		: "폼이름",
+DlgFormAction	: "실행경로(Action)",
+DlgFormMethod	: "방법(Method)",
+
+// Select Field Dialog
+DlgSelectName		: "이름",
+DlgSelectValue		: "값",
+DlgSelectSize		: "세로크기",
+DlgSelectLines		: "줄",
+DlgSelectChkMulti	: "여러항목 선택 허용",
+DlgSelectOpAvail	: "선택옵션",
+DlgSelectOpText		: "이름",
+DlgSelectOpValue	: "값",
+DlgSelectBtnAdd		: "추가",
+DlgSelectBtnModify	: "변경",
+DlgSelectBtnUp		: "위로",
+DlgSelectBtnDown	: "아래로",
+DlgSelectBtnSetValue : "선택된것으로 설정",
+DlgSelectBtnDelete	: "삭제",
+
+// Textarea Dialog
+DlgTextareaName	: "이름",
+DlgTextareaCols	: "칸수",
+DlgTextareaRows	: "줄수",
+
+// Text Field Dialog
+DlgTextName			: "이름",
+DlgTextValue		: "값",
+DlgTextCharWidth	: "글자 너비",
+DlgTextMaxChars		: "최대 글자수",
+DlgTextType			: "종류",
+DlgTextTypeText		: "문자열",
+DlgTextTypePass		: "비밀번호",
+
+// Hidden Field Dialog
+DlgHiddenName	: "이름",
+DlgHiddenValue	: "값",
+
+// Bulleted List Dialog
+BulletedListProp	: "순서없는 목록 속성",
+NumberedListProp	: "순서있는 목록 속성",
+DlgLstStart			: "Start",	//MISSING
+DlgLstType			: "종류",
+DlgLstTypeCircle	: "원(Circle)",
+DlgLstTypeDisc		: "Disc",	//MISSING
+DlgLstTypeSquare	: "네모점(Square)",
+DlgLstTypeNumbers	: "번호 (1, 2, 3)",
+DlgLstTypeLCase		: "소문자 (a, b, c)",
+DlgLstTypeUCase		: "대문자 (A, B, C)",
+DlgLstTypeSRoman	: "로마자 수문자 (i, ii, iii)",
+DlgLstTypeLRoman	: "로마자 대문자 (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "일반",
+DlgDocBackTab		: "배경",
+DlgDocColorsTab		: "색상 및 여백",
+DlgDocMetaTab		: "메타데이터",
+
+DlgDocPageTitle		: "페이지명",
+DlgDocLangDir		: "문자 쓰기방향",
+DlgDocLangDirLTR	: "왼쪽에서 오른쪽 (LTR)",
+DlgDocLangDirRTL	: "오른쪽에서 왼쪽 (RTL)",
+DlgDocLangCode		: "언어코드",
+DlgDocCharSet		: "캐릭터셋 인코딩",
+DlgDocCharSetCE		: "Central European",	//MISSING
+DlgDocCharSetCT		: "Chinese Traditional (Big5)",	//MISSING
+DlgDocCharSetCR		: "Cyrillic",	//MISSING
+DlgDocCharSetGR		: "Greek",	//MISSING
+DlgDocCharSetJP		: "Japanese",	//MISSING
+DlgDocCharSetKR		: "Korean",	//MISSING
+DlgDocCharSetTR		: "Turkish",	//MISSING
+DlgDocCharSetUN		: "Unicode (UTF-8)",	//MISSING
+DlgDocCharSetWE		: "Western European",	//MISSING
+DlgDocCharSetOther	: "다른 캐릭터셋 인코딩",
+
+DlgDocDocType		: "문서 헤드",
+DlgDocDocTypeOther	: "다른 문서헤드",
+DlgDocIncXHTML		: "XHTML 문서정의 포함",
+DlgDocBgColor		: "배경색상",
+DlgDocBgImage		: "배경이미지 URL",
+DlgDocBgNoScroll	: "스크롤되지않는 배경",
+DlgDocCText			: "텍스트",
+DlgDocCLink			: "링크",
+DlgDocCVisited		: "방문한 링크(Visited)",
+DlgDocCActive		: "활성화된 링크(Active)",
+DlgDocMargins		: "페이지 여백",
+DlgDocMaTop			: "위",
+DlgDocMaLeft		: "왼쪽",
+DlgDocMaRight		: "오른쪽",
+DlgDocMaBottom		: "아래",
+DlgDocMeIndex		: "문서 키워드 (콤마로 구분)",
+DlgDocMeDescr		: "문서 설명",
+DlgDocMeAuthor		: "작성자",
+DlgDocMeCopy		: "저작권",
+DlgDocPreview		: "미리보기",
+
+// Templates Dialog
+Templates			: "템플릿",
+DlgTemplatesTitle	: "내용 템플릿",
+DlgTemplatesSelMsg	: "에디터에서 사용할 템플릿을 선택하십시요.<br>(지금까지 작성된 내용은 사라집니다.):",
+DlgTemplatesLoading	: "템플릿 목록을 불러오는중입니다. 잠시만 기다려주십시요.",
+DlgTemplatesNoTpl	: "(템플릿이 없습니다.)",
+DlgTemplatesReplace	: "Replace actual contents",	//MISSING
+
+// About Dialog
+DlgAboutAboutTab	: "About",
+DlgAboutBrowserInfoTab	: "브라우저 정보",
+DlgAboutLicenseTab	: "License",	//MISSING
+DlgAboutVersion		: "버전",
+DlgAboutInfo		: "For further information go to"
+};
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/lt.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/lt.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/lt.js	(revision 1280)
@@ -0,0 +1,516 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Lithuanian language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Sutraukti mygtukų juostą",
+ToolbarExpand		: "Išplėsti mygtukų juostą",
+
+// Toolbar Items and Context Menu
+Save				: "Išsaugoti",
+NewPage				: "Naujas puslapis",
+Preview				: "Peržiūra",
+Cut					: "Iškirpti",
+Copy				: "Kopijuoti",
+Paste				: "Įdėti",
+PasteText			: "Įdėti kaip gryną tekstą",
+PasteWord			: "Įdėti iš Word",
+Print				: "Spausdinti",
+SelectAll			: "Pažymėti viską",
+RemoveFormat		: "Panaikinti formatą",
+InsertLinkLbl		: "Nuoroda",
+InsertLink			: "Įterpti/taisyti nuorodą",
+RemoveLink			: "Panaikinti nuorodą",
+Anchor				: "Įterpti/modifikuoti žymę",
+AnchorDelete		: "Remove Anchor",	//MISSING
+InsertImageLbl		: "Vaizdas",
+InsertImage			: "Įterpti/taisyti vaizdą",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Įterpti/taisyti Flash",
+InsertTableLbl		: "Lentelė",
+InsertTable			: "Įterpti/taisyti lentelę",
+InsertLineLbl		: "Linija",
+InsertLine			: "Įterpti horizontalią liniją",
+InsertSpecialCharLbl: "Spec. simbolis",
+InsertSpecialChar	: "Įterpti specialų simbolį",
+InsertSmileyLbl		: "Veideliai",
+InsertSmiley		: "Įterpti veidelį",
+About				: "Apie FCKeditor",
+Bold				: "Pusjuodis",
+Italic				: "Kursyvas",
+Underline			: "Pabrauktas",
+StrikeThrough		: "Perbrauktas",
+Subscript			: "Apatinis indeksas",
+Superscript			: "Viršutinis indeksas",
+LeftJustify			: "Lygiuoti kairę",
+CenterJustify		: "Centruoti",
+RightJustify		: "Lygiuoti dešinę",
+BlockJustify		: "Lygiuoti abi puses",
+DecreaseIndent		: "Sumažinti įtrauką",
+IncreaseIndent		: "Padidinti įtrauką",
+Blockquote			: "Blockquote",	//MISSING
+Undo				: "Atšaukti",
+Redo				: "Atstatyti",
+NumberedListLbl		: "Numeruotas sąrašas",
+NumberedList		: "Įterpti/Panaikinti numeruotą sąrašą",
+BulletedListLbl		: "Suženklintas sąrašas",
+BulletedList		: "Įterpti/Panaikinti suženklintą sąrašą",
+ShowTableBorders	: "Rodyti lentelės rėmus",
+ShowDetails			: "Rodyti detales",
+Style				: "Stilius",
+FontFormat			: "Šrifto formatas",
+Font				: "Šriftas",
+FontSize			: "Šrifto dydis",
+TextColor			: "Teksto spalva",
+BGColor				: "Fono spalva",
+Source				: "Šaltinis",
+Find				: "Rasti",
+Replace				: "Pakeisti",
+SpellCheck			: "Rašybos tikrinimas",
+UniversalKeyboard	: "Universali klaviatūra",
+PageBreakLbl		: "Puslapių skirtukas",
+PageBreak			: "Įterpti puslapių skirtuką",
+
+Form			: "Forma",
+Checkbox		: "Žymimasis langelis",
+RadioButton		: "Žymimoji akutė",
+TextField		: "Teksto laukas",
+Textarea		: "Teksto sritis",
+HiddenField		: "Nerodomas laukas",
+Button			: "Mygtukas",
+SelectionField	: "Atrankos laukas",
+ImageButton		: "Vaizdinis mygtukas",
+
+FitWindow		: "Maximize the editor size",	//MISSING
+ShowBlocks		: "Show Blocks",	//MISSING
+
+// Context Menu
+EditLink			: "Taisyti nuorodą",
+CellCM				: "Cell",	//MISSING
+RowCM				: "Row",	//MISSING
+ColumnCM			: "Column",	//MISSING
+InsertRowAfter		: "Insert Row After",	//MISSING
+InsertRowBefore		: "Insert Row Before",	//MISSING
+DeleteRows			: "Šalinti eilutes",
+InsertColumnAfter	: "Insert Column After",	//MISSING
+InsertColumnBefore	: "Insert Column Before",	//MISSING
+DeleteColumns		: "Šalinti stulpelius",
+InsertCellAfter		: "Insert Cell After",	//MISSING
+InsertCellBefore	: "Insert Cell Before",	//MISSING
+DeleteCells			: "Šalinti langelius",
+MergeCells			: "Sujungti langelius",
+MergeRight			: "Merge Right",	//MISSING
+MergeDown			: "Merge Down",	//MISSING
+HorizontalSplitCell	: "Split Cell Horizontally",	//MISSING
+VerticalSplitCell	: "Split Cell Vertically",	//MISSING
+TableDelete			: "Šalinti lentelę",
+CellProperties		: "Langelio savybės",
+TableProperties		: "Lentelės savybės",
+ImageProperties		: "Vaizdo savybės",
+FlashProperties		: "Flash savybės",
+
+AnchorProp			: "Žymės savybės",
+ButtonProp			: "Mygtuko savybės",
+CheckboxProp		: "Žymimojo langelio savybės",
+HiddenFieldProp		: "Nerodomo lauko savybės",
+RadioButtonProp		: "Žymimosios akutės savybės",
+ImageButtonProp		: "Vaizdinio mygtuko savybės",
+TextFieldProp		: "Teksto lauko savybės",
+SelectionFieldProp	: "Atrankos lauko savybės",
+TextareaProp		: "Teksto srities savybės",
+FormProp			: "Formos savybės",
+
+FontFormats			: "Normalus;Formuotas;Kreipinio;Antraštinis 1;Antraštinis 2;Antraštinis 3;Antraštinis 4;Antraštinis 5;Antraštinis 6",
+
+// Alerts and Messages
+ProcessingXHTML		: "Apdorojamas XHTML. Prašome palaukti...",
+Done				: "Baigta",
+PasteWordConfirm	: "Įdedamas tekstas yra panašus į kopiją iš Word. Ar Jūs norite prieš įdėjimą išvalyti jį?",
+NotCompatiblePaste	: "Ši komanda yra prieinama tik per Internet Explorer 5.5 ar aukštesnę versiją. Ar Jūs norite įterpti be valymo?",
+UnknownToolbarItem	: "Nežinomas mygtukų juosta elementas \"%1\"",
+UnknownCommand		: "Nežinomas komandos vardas \"%1\"",
+NotImplemented		: "Komanda nėra įgyvendinta",
+UnknownToolbarSet	: "Mygtukų juostos rinkinys \"%1\" neegzistuoja",
+NoActiveX			: "Jūsų naršyklės saugumo nuostatos gali riboti kai kurias redaktoriaus savybes. Jūs turite aktyvuoti opciją \"Run ActiveX controls and plug-ins\". Kitu atveju Jums bus pranešama apie klaidas ir trūkstamas savybes.",
+BrowseServerBlocked : "Neįmanoma atidaryti naujo naršyklės lango. Įsitikinkite, kad iškylančių langų blokavimo programos neveiksnios.",
+DialogBlocked		: "Neįmanoma atidaryti dialogo lango. Įsitikinkite, kad iškylančių langų blokavimo programos neveiksnios.",
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Nutraukti",
+DlgBtnClose			: "Uždaryti",
+DlgBtnBrowseServer	: "Naršyti po serverį",
+DlgAdvancedTag		: "Papildomas",
+DlgOpOther			: "<Kita>",
+DlgInfoTab			: "Informacija",
+DlgAlertUrl			: "Prašome įrašyti URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<nėra nustatyta>",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Teksto kryptis",
+DlgGenLangDirLtr	: "Iš kairės į dešinę (LTR)",
+DlgGenLangDirRtl	: "Iš dešinės į kairę (RTL)",
+DlgGenLangCode		: "Kalbos kodas",
+DlgGenAccessKey		: "Prieigos raktas",
+DlgGenName			: "Vardas",
+DlgGenTabIndex		: "Tabuliavimo indeksas",
+DlgGenLongDescr		: "Ilgas aprašymas URL",
+DlgGenClass			: "Stilių lentelės klasės",
+DlgGenTitle			: "Konsultacinė antraštė",
+DlgGenContType		: "Konsultacinio turinio tipas",
+DlgGenLinkCharset	: "Susietų išteklių simbolių lentelė",
+DlgGenStyle			: "Stilius",
+
+// Image Dialog
+DlgImgTitle			: "Vaizdo savybės",
+DlgImgInfoTab		: "Vaizdo informacija",
+DlgImgBtnUpload		: "Siųsti į serverį",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Nusiųsti",
+DlgImgAlt			: "Alternatyvus Tekstas",
+DlgImgWidth			: "Plotis",
+DlgImgHeight		: "Aukštis",
+DlgImgLockRatio		: "Išlaikyti proporciją",
+DlgBtnResetSize		: "Atstatyti dydį",
+DlgImgBorder		: "Rėmelis",
+DlgImgHSpace		: "Hor.Erdvė",
+DlgImgVSpace		: "Vert.Erdvė",
+DlgImgAlign			: "Lygiuoti",
+DlgImgAlignLeft		: "Kairę",
+DlgImgAlignAbsBottom: "Absoliučią apačią",
+DlgImgAlignAbsMiddle: "Absoliutų vidurį",
+DlgImgAlignBaseline	: "Apatinę liniją",
+DlgImgAlignBottom	: "Apačią",
+DlgImgAlignMiddle	: "Vidurį",
+DlgImgAlignRight	: "Dešinę",
+DlgImgAlignTextTop	: "Teksto viršūnę",
+DlgImgAlignTop		: "Viršūnę",
+DlgImgPreview		: "Peržiūra",
+DlgImgAlertUrl		: "Prašome įvesti vaizdo URL",
+DlgImgLinkTab		: "Nuoroda",
+
+// Flash Dialog
+DlgFlashTitle		: "Flash savybės",
+DlgFlashChkPlay		: "Automatinis paleidimas",
+DlgFlashChkLoop		: "Ciklas",
+DlgFlashChkMenu		: "Leisti Flash meniu",
+DlgFlashScale		: "Mastelis",
+DlgFlashScaleAll	: "Rodyti visą",
+DlgFlashScaleNoBorder	: "Be rėmelio",
+DlgFlashScaleFit	: "Tikslus atitikimas",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Nuoroda",
+DlgLnkInfoTab		: "Nuorodos informacija",
+DlgLnkTargetTab		: "Paskirtis",
+
+DlgLnkType			: "Nuorodos tipas",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Žymė šiame puslapyje",
+DlgLnkTypeEMail		: "El.paštas",
+DlgLnkProto			: "Protokolas",
+DlgLnkProtoOther	: "<kitas>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Pasirinkite žymę",
+DlgLnkAnchorByName	: "Pagal žymės vardą",
+DlgLnkAnchorById	: "Pagal žymės Id",
+DlgLnkNoAnchors		: "(Šiame dokumente žymių nėra)",
+DlgLnkEMail			: "El.pašto adresas",
+DlgLnkEMailSubject	: "Žinutės tema",
+DlgLnkEMailBody		: "Žinutės turinys",
+DlgLnkUpload		: "Siųsti",
+DlgLnkBtnUpload		: "Siųsti į serverį",
+
+DlgLnkTarget		: "Paskirties vieta",
+DlgLnkTargetFrame	: "<kadras>",
+DlgLnkTargetPopup	: "<išskleidžiamas langas>",
+DlgLnkTargetBlank	: "Naujas langas (_blank)",
+DlgLnkTargetParent	: "Pirminis langas (_parent)",
+DlgLnkTargetSelf	: "Tas pats langas (_self)",
+DlgLnkTargetTop		: "Svarbiausias langas (_top)",
+DlgLnkTargetFrameName	: "Paskirties kadro vardas",
+DlgLnkPopWinName	: "Paskirties lango vardas",
+DlgLnkPopWinFeat	: "Išskleidžiamo lango savybės",
+DlgLnkPopResize		: "Keičiamas dydis",
+DlgLnkPopLocation	: "Adreso juosta",
+DlgLnkPopMenu		: "Meniu juosta",
+DlgLnkPopScroll		: "Slinkties juostos",
+DlgLnkPopStatus		: "Būsenos juosta",
+DlgLnkPopToolbar	: "Mygtukų juosta",
+DlgLnkPopFullScrn	: "Visas ekranas (IE)",
+DlgLnkPopDependent	: "Priklausomas (Netscape)",
+DlgLnkPopWidth		: "Plotis",
+DlgLnkPopHeight		: "Aukštis",
+DlgLnkPopLeft		: "Kairė pozicija",
+DlgLnkPopTop		: "Viršutinė pozicija",
+
+DlnLnkMsgNoUrl		: "Prašome įvesti nuorodos URL",
+DlnLnkMsgNoEMail	: "Prašome įvesti el.pašto adresą",
+DlnLnkMsgNoAnchor	: "Prašome pasirinkti žymę",
+DlnLnkMsgInvPopName	: "The popup name must begin with an alphabetic character and must not contain spaces",	//MISSING
+
+// Color Dialog
+DlgColorTitle		: "Pasirinkite spalvą",
+DlgColorBtnClear	: "Trinti",
+DlgColorHighlight	: "Paryškinta",
+DlgColorSelected	: "Pažymėta",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Įterpti veidelį",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Pasirinkite specialų simbolį",
+
+// Table Dialog
+DlgTableTitle		: "Lentelės savybės",
+DlgTableRows		: "Eilutės",
+DlgTableColumns		: "Stulpeliai",
+DlgTableBorder		: "Rėmelio dydis",
+DlgTableAlign		: "Lygiuoti",
+DlgTableAlignNotSet	: "<Nenustatyta>",
+DlgTableAlignLeft	: "Kairę",
+DlgTableAlignCenter	: "Centrą",
+DlgTableAlignRight	: "Dešinę",
+DlgTableWidth		: "Plotis",
+DlgTableWidthPx		: "taškais",
+DlgTableWidthPc		: "procentais",
+DlgTableHeight		: "Aukštis",
+DlgTableCellSpace	: "Tarpas tarp langelių",
+DlgTableCellPad		: "Trapas nuo langelio rėmo iki teksto",
+DlgTableCaption		: "Antraštė",
+DlgTableSummary		: "Santrauka",
+
+// Table Cell Dialog
+DlgCellTitle		: "Langelio savybės",
+DlgCellWidth		: "Plotis",
+DlgCellWidthPx		: "taškais",
+DlgCellWidthPc		: "procentais",
+DlgCellHeight		: "Aukštis",
+DlgCellWordWrap		: "Teksto laužymas",
+DlgCellWordWrapNotSet	: "<Nenustatyta>",
+DlgCellWordWrapYes	: "Taip",
+DlgCellWordWrapNo	: "Ne",
+DlgCellHorAlign		: "Horizontaliai lygiuoti",
+DlgCellHorAlignNotSet	: "<Nenustatyta>",
+DlgCellHorAlignLeft	: "Kairę",
+DlgCellHorAlignCenter	: "Centrą",
+DlgCellHorAlignRight: "Dešinę",
+DlgCellVerAlign		: "Vertikaliai lygiuoti",
+DlgCellVerAlignNotSet	: "<Nenustatyta>",
+DlgCellVerAlignTop	: "Viršų",
+DlgCellVerAlignMiddle	: "Vidurį",
+DlgCellVerAlignBottom	: "Apačią",
+DlgCellVerAlignBaseline	: "Apatinę liniją",
+DlgCellRowSpan		: "Eilučių apjungimas",
+DlgCellCollSpan		: "Stulpelių apjungimas",
+DlgCellBackColor	: "Fono spalva",
+DlgCellBorderColor	: "Rėmelio spalva",
+DlgCellBtnSelect	: "Pažymėti...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Find and Replace",	//MISSING
+
+// Find Dialog
+DlgFindTitle		: "Paieška",
+DlgFindFindBtn		: "Surasti",
+DlgFindNotFoundMsg	: "Nurodytas tekstas nerastas.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Pakeisti",
+DlgReplaceFindLbl		: "Surasti tekstą:",
+DlgReplaceReplaceLbl	: "Pakeisti tekstu:",
+DlgReplaceCaseChk		: "Skirti didžiąsias ir mažąsias raides",
+DlgReplaceReplaceBtn	: "Pakeisti",
+DlgReplaceReplAllBtn	: "Pakeisti viską",
+DlgReplaceWordChk		: "Atitikti pilną žodį",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "Jūsų naršyklės saugumo nustatymai neleidžia redaktoriui automatiškai įvykdyti iškirpimo operacijų. Tam prašome naudoti klaviatūrą (Ctrl+X).",
+PasteErrorCopy	: "Jūsų naršyklės saugumo nustatymai neleidžia redaktoriui automatiškai įvykdyti kopijavimo operacijų. Tam prašome naudoti klaviatūrą (Ctrl+C).",
+
+PasteAsText		: "Įdėti kaip gryną tekstą",
+PasteFromWord	: "Įdėti iš Word",
+
+DlgPasteMsg2	: "Žemiau esančiame įvedimo lauke įdėkite tekstą, naudodami klaviatūrą (<STRONG>Ctrl+V</STRONG>) ir spūstelkite mygtuką <STRONG>OK</STRONG>.",
+DlgPasteSec		: "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.",	//MISSING
+DlgPasteIgnoreFont		: "Ignoruoti šriftų nustatymus",
+DlgPasteRemoveStyles	: "Pašalinti stilių nustatymus",
+DlgPasteCleanBox		: "Trinti įvedimo lauką",
+
+// Color Picker
+ColorAutomatic	: "Automatinis",
+ColorMoreColors	: "Daugiau spalvų...",
+
+// Document Properties
+DocProps		: "Dokumento savybės",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Žymės savybės",
+DlgAnchorName		: "Žymės vardas",
+DlgAnchorErrorName	: "Prašome įvesti žymės vardą",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Žodyne nerastas",
+DlgSpellChangeTo		: "Pakeisti į",
+DlgSpellBtnIgnore		: "Ignoruoti",
+DlgSpellBtnIgnoreAll	: "Ignoruoti visus",
+DlgSpellBtnReplace		: "Pakeisti",
+DlgSpellBtnReplaceAll	: "Pakeisti visus",
+DlgSpellBtnUndo			: "Atšaukti",
+DlgSpellNoSuggestions	: "- Nėra pasiūlymų -",
+DlgSpellProgress		: "Vyksta rašybos tikrinimas...",
+DlgSpellNoMispell		: "Rašybos tikrinimas baigtas: Nerasta rašybos klaidų",
+DlgSpellNoChanges		: "Rašybos tikrinimas baigtas: Nėra pakeistų žodžių",
+DlgSpellOneChange		: "Rašybos tikrinimas baigtas: Vienas žodis pakeistas",
+DlgSpellManyChanges		: "Rašybos tikrinimas baigtas: Pakeista %1 žodžių",
+
+IeSpellDownload			: "Rašybos tikrinimas neinstaliuotas. Ar Jūs norite jį dabar atsisiųsti?",
+
+// Button Dialog
+DlgButtonText		: "Tekstas (Reikšmė)",
+DlgButtonType		: "Tipas",
+DlgButtonTypeBtn	: "Button",	//MISSING
+DlgButtonTypeSbm	: "Submit",	//MISSING
+DlgButtonTypeRst	: "Reset",	//MISSING
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Vardas",
+DlgCheckboxValue	: "Reikšmė",
+DlgCheckboxSelected	: "Pažymėtas",
+
+// Form Dialog
+DlgFormName		: "Vardas",
+DlgFormAction	: "Veiksmas",
+DlgFormMethod	: "Metodas",
+
+// Select Field Dialog
+DlgSelectName		: "Vardas",
+DlgSelectValue		: "Reikšmė",
+DlgSelectSize		: "Dydis",
+DlgSelectLines		: "eilučių",
+DlgSelectChkMulti	: "Leisti daugeriopą atranką",
+DlgSelectOpAvail	: "Galimos parinktys",
+DlgSelectOpText		: "Tekstas",
+DlgSelectOpValue	: "Reikšmė",
+DlgSelectBtnAdd		: "Įtraukti",
+DlgSelectBtnModify	: "Modifikuoti",
+DlgSelectBtnUp		: "Aukštyn",
+DlgSelectBtnDown	: "Žemyn",
+DlgSelectBtnSetValue : "Laikyti pažymėta reikšme",
+DlgSelectBtnDelete	: "Trinti",
+
+// Textarea Dialog
+DlgTextareaName	: "Vardas",
+DlgTextareaCols	: "Ilgis",
+DlgTextareaRows	: "Plotis",
+
+// Text Field Dialog
+DlgTextName			: "Vardas",
+DlgTextValue		: "Reikšmė",
+DlgTextCharWidth	: "Ilgis simboliais",
+DlgTextMaxChars		: "Maksimalus simbolių skaičius",
+DlgTextType			: "Tipas",
+DlgTextTypeText		: "Tekstas",
+DlgTextTypePass		: "Slaptažodis",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Vardas",
+DlgHiddenValue	: "Reikšmė",
+
+// Bulleted List Dialog
+BulletedListProp	: "Suženklinto sąrašo savybės",
+NumberedListProp	: "Numeruoto sąrašo savybės",
+DlgLstStart			: "Start",	//MISSING
+DlgLstType			: "Tipas",
+DlgLstTypeCircle	: "Apskritimas",
+DlgLstTypeDisc		: "Diskas",
+DlgLstTypeSquare	: "Kvadratas",
+DlgLstTypeNumbers	: "Skaičiai (1, 2, 3)",
+DlgLstTypeLCase		: "Mažosios raidės (a, b, c)",
+DlgLstTypeUCase		: "Didžiosios raidės (A, B, C)",
+DlgLstTypeSRoman	: "Romėnų mažieji skaičiai (i, ii, iii)",
+DlgLstTypeLRoman	: "Romėnų didieji skaičiai (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Bendros savybės",
+DlgDocBackTab		: "Fonas",
+DlgDocColorsTab		: "Spalvos ir kraštinės",
+DlgDocMetaTab		: "Meta duomenys",
+
+DlgDocPageTitle		: "Puslapio antraštė",
+DlgDocLangDir		: "Kalbos kryptis",
+DlgDocLangDirLTR	: "Iš kairės į dešinę (LTR)",
+DlgDocLangDirRTL	: "Iš dešinės į kairę (RTL)",
+DlgDocLangCode		: "Kalbos kodas",
+DlgDocCharSet		: "Simbolių kodavimo lentelė",
+DlgDocCharSetCE		: "Central European",	//MISSING
+DlgDocCharSetCT		: "Chinese Traditional (Big5)",	//MISSING
+DlgDocCharSetCR		: "Cyrillic",	//MISSING
+DlgDocCharSetGR		: "Greek",	//MISSING
+DlgDocCharSetJP		: "Japanese",	//MISSING
+DlgDocCharSetKR		: "Korean",	//MISSING
+DlgDocCharSetTR		: "Turkish",	//MISSING
+DlgDocCharSetUN		: "Unicode (UTF-8)",	//MISSING
+DlgDocCharSetWE		: "Western European",	//MISSING
+DlgDocCharSetOther	: "Kita simbolių kodavimo lentelė",
+
+DlgDocDocType		: "Dokumento tipo antraštė",
+DlgDocDocTypeOther	: "Kita dokumento tipo antraštė",
+DlgDocIncXHTML		: "Įtraukti XHTML deklaracijas",
+DlgDocBgColor		: "Fono spalva",
+DlgDocBgImage		: "Fono paveikslėlio nuoroda (URL)",
+DlgDocBgNoScroll	: "Neslenkantis fonas",
+DlgDocCText			: "Tekstas",
+DlgDocCLink			: "Nuoroda",
+DlgDocCVisited		: "Aplankyta nuoroda",
+DlgDocCActive		: "Aktyvi nuoroda",
+DlgDocMargins		: "Puslapio kraštinės",
+DlgDocMaTop			: "Viršuje",
+DlgDocMaLeft		: "Kairėje",
+DlgDocMaRight		: "Dešinėje",
+DlgDocMaBottom		: "Apačioje",
+DlgDocMeIndex		: "Dokumento indeksavimo raktiniai žodžiai (atskirti kableliais)",
+DlgDocMeDescr		: "Dokumento apibūdinimas",
+DlgDocMeAuthor		: "Autorius",
+DlgDocMeCopy		: "Autorinės teisės",
+DlgDocPreview		: "Peržiūra",
+
+// Templates Dialog
+Templates			: "Šablonai",
+DlgTemplatesTitle	: "Turinio šablonai",
+DlgTemplatesSelMsg	: "Pasirinkite norimą šabloną<br>(<b>Dėmesio!</b> esamas turinys bus prarastas):",
+DlgTemplatesLoading	: "Įkeliamas šablonų sąrašas. Prašome palaukti...",
+DlgTemplatesNoTpl	: "(Šablonų sąrašas tuščias)",
+DlgTemplatesReplace	: "Replace actual contents",	//MISSING
+
+// About Dialog
+DlgAboutAboutTab	: "Apie",
+DlgAboutBrowserInfoTab	: "Naršyklės informacija",
+DlgAboutLicenseTab	: "License",	//MISSING
+DlgAboutVersion		: "versija",
+DlgAboutInfo		: "Papildomą informaciją galima gauti"
+};
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/lv.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/lv.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/lv.js	(revision 1280)
@@ -0,0 +1,516 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Latvian language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Samazināt rīku joslu",
+ToolbarExpand		: "Paplašināt rīku joslu",
+
+// Toolbar Items and Context Menu
+Save				: "Saglabāt",
+NewPage				: "Jauna lapa",
+Preview				: "Pārskatīt",
+Cut					: "Izgriezt",
+Copy				: "Kopēt",
+Paste				: "Ievietot",
+PasteText			: "Ievietot kā vienkāršu tekstu",
+PasteWord			: "Ievietot no Worda",
+Print				: "Drukāt",
+SelectAll			: "Iezīmēt visu",
+RemoveFormat		: "Noņemt stilus",
+InsertLinkLbl		: "Hipersaite",
+InsertLink			: "Ievietot/Labot hipersaiti",
+RemoveLink			: "Noņemt hipersaiti",
+Anchor				: "Ievietot/Labot iezīmi",
+AnchorDelete		: "Remove Anchor",	//MISSING
+InsertImageLbl		: "Attēls",
+InsertImage			: "Ievietot/Labot Attēlu",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Ievietot/Labot Flash",
+InsertTableLbl		: "Tabula",
+InsertTable			: "Ievietot/Labot Tabulu",
+InsertLineLbl		: "Atdalītājsvītra",
+InsertLine			: "Ievietot horizontālu Atdalītājsvītru",
+InsertSpecialCharLbl: "Īpašs simbols",
+InsertSpecialChar	: "Ievietot speciālo simbolu",
+InsertSmileyLbl		: "Smaidiņi",
+InsertSmiley		: "Ievietot smaidiņu",
+About				: "Īsumā par FCKeditor",
+Bold				: "Treknu šriftu",
+Italic				: "Slīprakstā",
+Underline			: "Apakšsvītra",
+StrikeThrough		: "Pārsvītrots",
+Subscript			: "Zemrakstā",
+Superscript			: "Augšrakstā",
+LeftJustify			: "Izlīdzināt pa kreisi",
+CenterJustify		: "Izlīdzināt pret centru",
+RightJustify		: "Izlīdzināt pa labi",
+BlockJustify		: "Izlīdzināt malas",
+DecreaseIndent		: "Samazināt atkāpi",
+IncreaseIndent		: "Palielināt atkāpi",
+Blockquote			: "Blockquote",	//MISSING
+Undo				: "Atcelt",
+Redo				: "Atkārtot",
+NumberedListLbl		: "Numurēts saraksts",
+NumberedList		: "Ievietot/Noņemt numerēto sarakstu",
+BulletedListLbl		: "Izcelts saraksts",
+BulletedList		: "Ievietot/Noņemt izceltu sarakstu",
+ShowTableBorders	: "Parādīt tabulas robežas",
+ShowDetails			: "Parādīt sīkāku informāciju",
+Style				: "Stils",
+FontFormat			: "Formāts",
+Font				: "Šrifts",
+FontSize			: "Izmērs",
+TextColor			: "Teksta krāsa",
+BGColor				: "Fona krāsa",
+Source				: "HTML kods",
+Find				: "Meklēt",
+Replace				: "Nomainīt",
+SpellCheck			: "Pareizrakstības pārbaude",
+UniversalKeyboard	: "Universāla klaviatūra",
+PageBreakLbl		: "Lapas pārtraukums",
+PageBreak			: "Ievietot lapas pārtraukumu",
+
+Form			: "Forma",
+Checkbox		: "Atzīmēšanas kastīte",
+RadioButton		: "Izvēles poga",
+TextField		: "Teksta rinda",
+Textarea		: "Teksta laukums",
+HiddenField		: "Paslēpta teksta rinda",
+Button			: "Poga",
+SelectionField	: "Iezīmēšanas lauks",
+ImageButton		: "Attēlpoga",
+
+FitWindow		: "Maksimizēt redaktora izmēru",
+ShowBlocks		: "Show Blocks",	//MISSING
+
+// Context Menu
+EditLink			: "Labot hipersaiti",
+CellCM				: "Šūna",
+RowCM				: "Rinda",
+ColumnCM			: "Kolonna",
+InsertRowAfter		: "Insert Row After",	//MISSING
+InsertRowBefore		: "Insert Row Before",	//MISSING
+DeleteRows			: "Dzēst rindas",
+InsertColumnAfter	: "Insert Column After",	//MISSING
+InsertColumnBefore	: "Insert Column Before",	//MISSING
+DeleteColumns		: "Dzēst kolonnas",
+InsertCellAfter		: "Insert Cell After",	//MISSING
+InsertCellBefore	: "Insert Cell Before",	//MISSING
+DeleteCells			: "Dzēst rūtiņas",
+MergeCells			: "Apvienot rūtiņas",
+MergeRight			: "Merge Right",	//MISSING
+MergeDown			: "Merge Down",	//MISSING
+HorizontalSplitCell	: "Split Cell Horizontally",	//MISSING
+VerticalSplitCell	: "Split Cell Vertically",	//MISSING
+TableDelete			: "Dzēst tabulu",
+CellProperties		: "Rūtiņas īpašības",
+TableProperties		: "Tabulas īpašības",
+ImageProperties		: "Attēla īpašības",
+FlashProperties		: "Flash īpašības",
+
+AnchorProp			: "Iezīmes īpašības",
+ButtonProp			: "Pogas īpašības",
+CheckboxProp		: "Atzīmēšanas kastītes īpašības",
+HiddenFieldProp		: "Paslēptās teksta rindas īpašības",
+RadioButtonProp		: "Izvēles poga īpašības",
+ImageButtonProp		: "Attēlpogas īpašības",
+TextFieldProp		: "Teksta rindas  īpašības",
+SelectionFieldProp	: "Iezīmēšanas lauka īpašības",
+TextareaProp		: "Teksta laukuma īpašības",
+FormProp			: "Formas īpašības",
+
+FontFormats			: "Normāls teksts;Formatēts teksts;Adrese;Virsraksts 1;Virsraksts 2;Virsraksts 3;Virsraksts 4;Virsraksts 5;Virsraksts 6;Rindkopa (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "Tiek apstrādāts XHTML. Lūdzu uzgaidiet...",
+Done				: "Darīts",
+PasteWordConfirm	: "Teksta fragments, kas tiek ievietots, izskatās, ka būtu sagatavots Word'ā. Vai vēlaties to apstrādāt pirms ievietošanas?",
+NotCompatiblePaste	: "Šī darbība ir pieejama Internet Explorer'ī, kas jaunāks par 5.5 versiju. Vai vēlaties ievietot bez apstrādes?",
+UnknownToolbarItem	: "Nezināms rīku joslas objekts \"%1\"",
+UnknownCommand		: "Nezināmas darbības nosaukums \"%1\"",
+NotImplemented		: "Darbība netika paveikta",
+UnknownToolbarSet	: "Rīku joslas komplekts \"%1\" neeksistē",
+NoActiveX			: "Interneta pārlūkprogrammas drošības uzstādījumi varētu ietekmēt dažas no redaktora īpašībām. Jābūt aktivizētai sadaļai \"Run ActiveX controls and plug-ins\". Savādāk ir iespējamas kļūdas darbībā un kļūdu paziņojumu parādīšanās.",
+BrowseServerBlocked : "Resursu pārlūks nevar tikt atvērts. Pārliecinieties, ka uznirstošo logu bloķētāji ir atslēgti.",
+DialogBlocked		: "Nav iespējams atvērt dialoglogu. Pārliecinieties, ka uznirstošo logu bloķētāji ir atslēgti.",
+
+// Dialogs
+DlgBtnOK			: "Darīts!",
+DlgBtnCancel		: "Atcelt",
+DlgBtnClose			: "Aizvērt",
+DlgBtnBrowseServer	: "Skatīt servera saturu",
+DlgAdvancedTag		: "Izvērstais",
+DlgOpOther			: "<Cits>",
+DlgInfoTab			: "Informācija",
+DlgAlertUrl			: "Lūdzu, ievietojiet hipersaiti",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<nav iestatīts>",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Valodas lasīšanas virziens",
+DlgGenLangDirLtr	: "No kreisās uz labo (LTR)",
+DlgGenLangDirRtl	: "No labās uz kreiso (RTL)",
+DlgGenLangCode		: "Valodas kods",
+DlgGenAccessKey		: "Pieejas kods",
+DlgGenName			: "Nosaukums",
+DlgGenTabIndex		: "Ciļņu indekss",
+DlgGenLongDescr		: "Gara apraksta Hipersaite",
+DlgGenClass			: "Stilu saraksta klases",
+DlgGenTitle			: "Konsultatīvs virsraksts",
+DlgGenContType		: "Konsultatīvs satura tips",
+DlgGenLinkCharset	: "Pievienotā resursa kodu tabula",
+DlgGenStyle			: "Stils",
+
+// Image Dialog
+DlgImgTitle			: "Attēla īpašības",
+DlgImgInfoTab		: "Informācija par attēlu",
+DlgImgBtnUpload		: "Nosūtīt serverim",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Augšupielādēt",
+DlgImgAlt			: "Alternatīvais teksts",
+DlgImgWidth			: "Platums",
+DlgImgHeight		: "Augstums",
+DlgImgLockRatio		: "Nemainīga Augstuma/Platuma attiecība",
+DlgBtnResetSize		: "Atjaunot sākotnējo izmēru",
+DlgImgBorder		: "Rāmis",
+DlgImgHSpace		: "Horizontālā telpa",
+DlgImgVSpace		: "Vertikālā telpa",
+DlgImgAlign			: "Nolīdzināt",
+DlgImgAlignLeft		: "Pa kreisi",
+DlgImgAlignAbsBottom: "Absolūti apakšā",
+DlgImgAlignAbsMiddle: "Absolūti vertikāli centrēts",
+DlgImgAlignBaseline	: "Pamatrindā",
+DlgImgAlignBottom	: "Apakšā",
+DlgImgAlignMiddle	: "Vertikāli centrēts",
+DlgImgAlignRight	: "Pa labi",
+DlgImgAlignTextTop	: "Teksta augšā",
+DlgImgAlignTop		: "Augšā",
+DlgImgPreview		: "Pārskats",
+DlgImgAlertUrl		: "Lūdzu norādīt attēla hipersaiti",
+DlgImgLinkTab		: "Hipersaite",
+
+// Flash Dialog
+DlgFlashTitle		: "Flash īpašības",
+DlgFlashChkPlay		: "Automātiska atskaņošana",
+DlgFlashChkLoop		: "Nepārtraukti",
+DlgFlashChkMenu		: "Atļaut Flash izvēlni",
+DlgFlashScale		: "Mainīt izmēru",
+DlgFlashScaleAll	: "Rādīt visu",
+DlgFlashScaleNoBorder	: "Bez rāmja",
+DlgFlashScaleFit	: "Precīzs izmērs",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Hipersaite",
+DlgLnkInfoTab		: "Hipersaites informācija",
+DlgLnkTargetTab		: "Mērķis",
+
+DlgLnkType			: "Hipersaites tips",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Iezīme šajā lapā",
+DlgLnkTypeEMail		: "E-pasts",
+DlgLnkProto			: "Protokols",
+DlgLnkProtoOther	: "<cits>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Izvēlēties iezīmi",
+DlgLnkAnchorByName	: "Pēc iezīmes nosaukuma",
+DlgLnkAnchorById	: "Pēc elementa ID",
+DlgLnkNoAnchors		: "(Šajā dokumentā nav iezīmju)",
+DlgLnkEMail			: "E-pasta adrese",
+DlgLnkEMailSubject	: "Ziņas tēma",
+DlgLnkEMailBody		: "Ziņas saturs",
+DlgLnkUpload		: "Augšupielādēt",
+DlgLnkBtnUpload		: "Nosūtīt serverim",
+
+DlgLnkTarget		: "Mērķis",
+DlgLnkTargetFrame	: "<ietvars>",
+DlgLnkTargetPopup	: "<uznirstošā logā>",
+DlgLnkTargetBlank	: "Jaunā logā (_blank)",
+DlgLnkTargetParent	: "Esošajā logā (_parent)",
+DlgLnkTargetSelf	: "Tajā pašā logā (_self)",
+DlgLnkTargetTop		: "Visredzamākajā logā (_top)",
+DlgLnkTargetFrameName	: "Mērķa ietvara nosaukums",
+DlgLnkPopWinName	: "Uznirstošā loga nosaukums",
+DlgLnkPopWinFeat	: "Uznirstošā loga nosaukums īpašības",
+DlgLnkPopResize		: "Ar maināmu izmēru",
+DlgLnkPopLocation	: "Atrašanās vietas josla",
+DlgLnkPopMenu		: "Izvēlnes josla",
+DlgLnkPopScroll		: "Ritjoslas",
+DlgLnkPopStatus		: "Statusa josla",
+DlgLnkPopToolbar	: "Rīku josla",
+DlgLnkPopFullScrn	: "Pilnā ekrānā (IE)",
+DlgLnkPopDependent	: "Atkarīgs (Netscape)",
+DlgLnkPopWidth		: "Platums",
+DlgLnkPopHeight		: "Augstums",
+DlgLnkPopLeft		: "Kreisā koordināte",
+DlgLnkPopTop		: "Augšējā koordināte",
+
+DlnLnkMsgNoUrl		: "Lūdzu norādi hipersaiti",
+DlnLnkMsgNoEMail	: "Lūdzu norādi e-pasta adresi",
+DlnLnkMsgNoAnchor	: "Lūdzu norādi iezīmi",
+DlnLnkMsgInvPopName	: "The popup name must begin with an alphabetic character and must not contain spaces",	//MISSING
+
+// Color Dialog
+DlgColorTitle		: "Izvēlies krāsu",
+DlgColorBtnClear	: "Dzēst",
+DlgColorHighlight	: "Izcelt",
+DlgColorSelected	: "Iezīmētais",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Ievietot smaidiņu",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Ievietot īpašu simbolu",
+
+// Table Dialog
+DlgTableTitle		: "Tabulas īpašības",
+DlgTableRows		: "Rindas",
+DlgTableColumns		: "Kolonnas",
+DlgTableBorder		: "Rāmja izmērs",
+DlgTableAlign		: "Novietojums",
+DlgTableAlignNotSet	: "<nav norādīts>",
+DlgTableAlignLeft	: "Pa kreisi",
+DlgTableAlignCenter	: "Centrēti",
+DlgTableAlignRight	: "Pa labi",
+DlgTableWidth		: "Platums",
+DlgTableWidthPx		: "pikseļos",
+DlgTableWidthPc		: "procentuāli",
+DlgTableHeight		: "Augstums",
+DlgTableCellSpace	: "Rūtiņu atstatums",
+DlgTableCellPad		: "Rūtiņu nobīde",
+DlgTableCaption		: "Leģenda",
+DlgTableSummary		: "Anotācija",
+
+// Table Cell Dialog
+DlgCellTitle		: "Rūtiņas īpašības",
+DlgCellWidth		: "Platums",
+DlgCellWidthPx		: "pikseļi",
+DlgCellWidthPc		: "procentos",
+DlgCellHeight		: "Augstums",
+DlgCellWordWrap		: "Teksta pārnese",
+DlgCellWordWrapNotSet	: "<nav norādīta>",
+DlgCellWordWrapYes	: "Jā",
+DlgCellWordWrapNo	: "Nē",
+DlgCellHorAlign		: "Horizontāla novietojums",
+DlgCellHorAlignNotSet	: "<Nav norādīts>",
+DlgCellHorAlignLeft	: "Pa kreisi",
+DlgCellHorAlignCenter	: "Centrēti",
+DlgCellHorAlignRight: "Pa labi",
+DlgCellVerAlign		: "Vertikālais novietojums",
+DlgCellVerAlignNotSet	: "<nav norādīts>",
+DlgCellVerAlignTop	: "Augša",
+DlgCellVerAlignMiddle	: "Vidus",
+DlgCellVerAlignBottom	: "Apakša",
+DlgCellVerAlignBaseline	: "Pamatrindā",
+DlgCellRowSpan		: "Rindu pārnese",
+DlgCellCollSpan		: "Kolonnu pārnese",
+DlgCellBackColor	: "Fona krāsa",
+DlgCellBorderColor	: "Rāmja krāsa",
+DlgCellBtnSelect	: "Iezīmē...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Find and Replace",	//MISSING
+
+// Find Dialog
+DlgFindTitle		: "Meklētājs",
+DlgFindFindBtn		: "Meklēt",
+DlgFindNotFoundMsg	: "Norādītā frāze netika atrasta.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Aizvietošana",
+DlgReplaceFindLbl		: "Meklēt:",
+DlgReplaceReplaceLbl	: "Nomainīt uz:",
+DlgReplaceCaseChk		: "Reģistrjūtīgs",
+DlgReplaceReplaceBtn	: "Aizvietot",
+DlgReplaceReplAllBtn	: "Aizvietot visu",
+DlgReplaceWordChk		: "Jāsakrīt pilnībā",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "Jūsu pārlūkprogrammas drošības iestatījumi nepieļauj editoram automātiski veikt izgriešanas darbību.  Lūdzu, izmantojiet (Ctrl+X, lai veiktu šo darbību.",
+PasteErrorCopy	: "Jūsu pārlūkprogrammas drošības iestatījumi nepieļauj editoram automātiski veikt kopēšanas darbību.  Lūdzu, izmantojiet (Ctrl+C), lai veiktu šo darbību.",
+
+PasteAsText		: "Ievietot kā vienkāršu tekstu",
+PasteFromWord	: "Ievietot no Worda",
+
+DlgPasteMsg2	: "Lūdzu, ievietojiet tekstu šajā laukumā, izmantojot klaviatūru (<STRONG>Ctrl+V</STRONG>) un apstipriniet ar <STRONG>Darīts!</STRONG>.",
+DlgPasteSec		: "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.",	//MISSING
+DlgPasteIgnoreFont		: "Ignorēt iepriekš norādītos fontus",
+DlgPasteRemoveStyles	: "Noņemt norādītos stilus",
+DlgPasteCleanBox		: "Apstrādāt laukuma saturu",
+
+// Color Picker
+ColorAutomatic	: "Automātiska",
+ColorMoreColors	: "Plašāka palete...",
+
+// Document Properties
+DocProps		: "Dokumenta īpašības",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Iezīmes īpašības",
+DlgAnchorName		: "Iezīmes nosaukums",
+DlgAnchorErrorName	: "Lūdzu norādiet iezīmes nosaukumu",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Netika atrasts vārdnīcā",
+DlgSpellChangeTo		: "Nomainīt uz",
+DlgSpellBtnIgnore		: "Ignorēt",
+DlgSpellBtnIgnoreAll	: "Ignorēt visu",
+DlgSpellBtnReplace		: "Aizvietot",
+DlgSpellBtnReplaceAll	: "Aizvietot visu",
+DlgSpellBtnUndo			: "Atcelt",
+DlgSpellNoSuggestions	: "- Nav ieteikumu -",
+DlgSpellProgress		: "Notiek pareizrakstības pārbaude...",
+DlgSpellNoMispell		: "Pareizrakstības pārbaude pabeigta: kļūdas netika atrastas",
+DlgSpellNoChanges		: "Pareizrakstības pārbaude pabeigta: nekas netika labots",
+DlgSpellOneChange		: "Pareizrakstības pārbaude pabeigta: 1 vārds izmainīts",
+DlgSpellManyChanges		: "Pareizrakstības pārbaude pabeigta: %1 vārdi tika mainīti",
+
+IeSpellDownload			: "Pareizrakstības pārbaudītājs nav pievienots. Vai vēlaties to lejupielādēt tagad?",
+
+// Button Dialog
+DlgButtonText		: "Teksts (vērtība)",
+DlgButtonType		: "Tips",
+DlgButtonTypeBtn	: "Button",	//MISSING
+DlgButtonTypeSbm	: "Submit",	//MISSING
+DlgButtonTypeRst	: "Reset",	//MISSING
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Nosaukums",
+DlgCheckboxValue	: "Vērtība",
+DlgCheckboxSelected	: "Iezīmēts",
+
+// Form Dialog
+DlgFormName		: "Nosaukums",
+DlgFormAction	: "Darbība",
+DlgFormMethod	: "Metode",
+
+// Select Field Dialog
+DlgSelectName		: "Nosaukums",
+DlgSelectValue		: "Vērtība",
+DlgSelectSize		: "Izmērs",
+DlgSelectLines		: "rindas",
+DlgSelectChkMulti	: "Atļaut vairākus iezīmējumus",
+DlgSelectOpAvail	: "Pieejamās iespējas",
+DlgSelectOpText		: "Teksts",
+DlgSelectOpValue	: "Vērtība",
+DlgSelectBtnAdd		: "Pievienot",
+DlgSelectBtnModify	: "Veikt izmaiņas",
+DlgSelectBtnUp		: "Augšup",
+DlgSelectBtnDown	: "Lejup",
+DlgSelectBtnSetValue : "Noteikt kā iezīmēto vērtību",
+DlgSelectBtnDelete	: "Dzēst",
+
+// Textarea Dialog
+DlgTextareaName	: "Nosaukums",
+DlgTextareaCols	: "Kolonnas",
+DlgTextareaRows	: "Rindas",
+
+// Text Field Dialog
+DlgTextName			: "Nosaukums",
+DlgTextValue		: "Vērtība",
+DlgTextCharWidth	: "Simbolu platums",
+DlgTextMaxChars		: "Simbolu maksimālais daudzums",
+DlgTextType			: "Tips",
+DlgTextTypeText		: "Teksts",
+DlgTextTypePass		: "Parole",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Nosaukums",
+DlgHiddenValue	: "Vērtība",
+
+// Bulleted List Dialog
+BulletedListProp	: "Aizzīmju saraksta īpašības",
+NumberedListProp	: "Numerētā saraksta īpašības",
+DlgLstStart			: "Start",	//MISSING
+DlgLstType			: "Tips",
+DlgLstTypeCircle	: "Aplis",
+DlgLstTypeDisc		: "Disks",
+DlgLstTypeSquare	: "Kvadrāts",
+DlgLstTypeNumbers	: "Skaitļi (1, 2, 3)",
+DlgLstTypeLCase		: "Maziem burtiem (a, b, c)",
+DlgLstTypeUCase		: "Lieliem burtiem (A, B, C)",
+DlgLstTypeSRoman	: "Maziem romiešu cipariem (i, ii, iii)",
+DlgLstTypeLRoman	: "Lieliem romiešu cipariem (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Vispārīga informācija",
+DlgDocBackTab		: "Fons",
+DlgDocColorsTab		: "Krāsas un robežu nobīdes",
+DlgDocMetaTab		: "META dati",
+
+DlgDocPageTitle		: "Dokumenta virsraksts <Title>",
+DlgDocLangDir		: "Valodas lasīšanas virziens",
+DlgDocLangDirLTR	: "No kreisās uz labo (LTR)",
+DlgDocLangDirRTL	: "No labās uz kreiso (RTL)",
+DlgDocLangCode		: "Valodas kods",
+DlgDocCharSet		: "Simbolu kodējums",
+DlgDocCharSetCE		: "Central European",	//MISSING
+DlgDocCharSetCT		: "Chinese Traditional (Big5)",	//MISSING
+DlgDocCharSetCR		: "Cyrillic",	//MISSING
+DlgDocCharSetGR		: "Greek",	//MISSING
+DlgDocCharSetJP		: "Japanese",	//MISSING
+DlgDocCharSetKR		: "Korean",	//MISSING
+DlgDocCharSetTR		: "Turkish",	//MISSING
+DlgDocCharSetUN		: "Unicode (UTF-8)",	//MISSING
+DlgDocCharSetWE		: "Western European",	//MISSING
+DlgDocCharSetOther	: "Cits simbolu kodējums",
+
+DlgDocDocType		: "Dokumenta tips",
+DlgDocDocTypeOther	: "Cits dokumenta tips",
+DlgDocIncXHTML		: "Ietvert XHTML deklarācijas",
+DlgDocBgColor		: "Fona krāsa",
+DlgDocBgImage		: "Fona attēla hipersaite",
+DlgDocBgNoScroll	: "Fona attēls ir fiksēts",
+DlgDocCText			: "Teksts",
+DlgDocCLink			: "Hipersaite",
+DlgDocCVisited		: "Apmeklēta hipersaite",
+DlgDocCActive		: "Aktīva hipersaite",
+DlgDocMargins		: "Lapas robežas",
+DlgDocMaTop			: "Augšā",
+DlgDocMaLeft		: "Pa kreisi",
+DlgDocMaRight		: "Pa labi",
+DlgDocMaBottom		: "Apakšā",
+DlgDocMeIndex		: "Dokumentu aprakstoši atslēgvārdi (atdalīti ar komatu)",
+DlgDocMeDescr		: "Dokumenta apraksts",
+DlgDocMeAuthor		: "Autors",
+DlgDocMeCopy		: "Autortiesības",
+DlgDocPreview		: "Priekšskats",
+
+// Templates Dialog
+Templates			: "Sagataves",
+DlgTemplatesTitle	: "Satura sagataves",
+DlgTemplatesSelMsg	: "Lūdzu, norādiet sagatavi, ko atvērt editorā<br>(patreizējie dati tiks zaudēti):",
+DlgTemplatesLoading	: "Notiek sagatavju saraksta ielāde. Lūdzu, uzgaidiet...",
+DlgTemplatesNoTpl	: "(Nav norādītas sagataves)",
+DlgTemplatesReplace	: "Replace actual contents",	//MISSING
+
+// About Dialog
+DlgAboutAboutTab	: "Par",
+DlgAboutBrowserInfoTab	: "Informācija par pārlūkprogrammu",
+DlgAboutLicenseTab	: "Licence",
+DlgAboutVersion		: "versija",
+DlgAboutInfo		: "Papildus informācija ir pieejama"
+};
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/mn.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/mn.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/mn.js	(revision 1280)
@@ -0,0 +1,516 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Mongolian language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Багажны хэсэг эвдэх",
+ToolbarExpand		: "Багажны хэсэг өргөтгөх",
+
+// Toolbar Items and Context Menu
+Save				: "Хадгалах",
+NewPage				: "Шинэ хуудас",
+Preview				: "Уридчлан харах",
+Cut					: "Хайчлах",
+Copy				: "Хуулах",
+Paste				: "Буулгах",
+PasteText			: "plain text-ээс буулгах",
+PasteWord			: "Word-оос буулгах",
+Print				: "Хэвлэх",
+SelectAll			: "Бүгдийг нь сонгох",
+RemoveFormat		: "Формат авч хаях",
+InsertLinkLbl		: "Линк",
+InsertLink			: "Линк Оруулах/Засварлах",
+RemoveLink			: "Линк авч хаях",
+Anchor				: "Insert/Edit Anchor",	//MISSING
+AnchorDelete		: "Remove Anchor",	//MISSING
+InsertImageLbl		: "Зураг",
+InsertImage			: "Зураг Оруулах/Засварлах",
+InsertFlashLbl		: "Flash",	//MISSING
+InsertFlash			: "Insert/Edit Flash",	//MISSING
+InsertTableLbl		: "Хүснэгт",
+InsertTable			: "Хүснэгт Оруулах/Засварлах",
+InsertLineLbl		: "Зураас",
+InsertLine			: "Хөндлөн зураас оруулах",
+InsertSpecialCharLbl: "Онцгой тэмдэгт",
+InsertSpecialChar	: "Онцгой тэмдэгт оруулах",
+InsertSmileyLbl		: "Тодорхойлолт",
+InsertSmiley		: "Тодорхойлолт оруулах",
+About				: "FCKeditor-н тухай",
+Bold				: "Тод бүдүүн",
+Italic				: "Налуу",
+Underline			: "Доогуур нь зураастай болгох",
+StrikeThrough		: "Дундуур нь зураастай болгох",
+Subscript			: "Суурь болгох",
+Superscript			: "Зэрэг болгох",
+LeftJustify			: "Зүүн талд байрлуулах",
+CenterJustify		: "Төвд байрлуулах",
+RightJustify		: "Баруун талд байрлуулах",
+BlockJustify		: "Блок хэлбэрээр байрлуулах",
+DecreaseIndent		: "Догол мөр нэмэх",
+IncreaseIndent		: "Догол мөр хасах",
+Blockquote			: "Blockquote",	//MISSING
+Undo				: "Хүчингүй болгох",
+Redo				: "Өмнөх үйлдлээ сэргээх",
+NumberedListLbl		: "Дугаарлагдсан жагсаалт",
+NumberedList		: "Дугаарлагдсан жагсаалт Оруулах/Авах",
+BulletedListLbl		: "Цэгтэй жагсаалт",
+BulletedList		: "Цэгтэй жагсаалт Оруулах/Авах",
+ShowTableBorders	: "Хүснэгтийн хүрээг үзүүлэх",
+ShowDetails			: "Деталчлан үзүүлэх",
+Style				: "Загвар",
+FontFormat			: "Формат",
+Font				: "Фонт",
+FontSize			: "Хэмжээ",
+TextColor			: "Фонтны өнгө",
+BGColor				: "Фонны өнгө",
+Source				: "Код",
+Find				: "Хайх",
+Replace				: "Солих",
+SpellCheck			: "Check Spelling",	//MISSING
+UniversalKeyboard	: "Universal Keyboard",	//MISSING
+PageBreakLbl		: "Page Break",	//MISSING
+PageBreak			: "Insert Page Break",	//MISSING
+
+Form			: "Form",	//MISSING
+Checkbox		: "Checkbox",	//MISSING
+RadioButton		: "Radio Button",	//MISSING
+TextField		: "Text Field",	//MISSING
+Textarea		: "Textarea",	//MISSING
+HiddenField		: "Hidden Field",	//MISSING
+Button			: "Button",	//MISSING
+SelectionField	: "Selection Field",	//MISSING
+ImageButton		: "Image Button",	//MISSING
+
+FitWindow		: "Maximize the editor size",	//MISSING
+ShowBlocks		: "Show Blocks",	//MISSING
+
+// Context Menu
+EditLink			: "Холбоос засварлах",
+CellCM				: "Cell",	//MISSING
+RowCM				: "Row",	//MISSING
+ColumnCM			: "Column",	//MISSING
+InsertRowAfter		: "Insert Row After",	//MISSING
+InsertRowBefore		: "Insert Row Before",	//MISSING
+DeleteRows			: "Мөр устгах",
+InsertColumnAfter	: "Insert Column After",	//MISSING
+InsertColumnBefore	: "Insert Column Before",	//MISSING
+DeleteColumns		: "Багана устгах",
+InsertCellAfter		: "Insert Cell After",	//MISSING
+InsertCellBefore	: "Insert Cell Before",	//MISSING
+DeleteCells			: "Нүх устгах",
+MergeCells			: "Нүх нэгтэх",
+MergeRight			: "Merge Right",	//MISSING
+MergeDown			: "Merge Down",	//MISSING
+HorizontalSplitCell	: "Split Cell Horizontally",	//MISSING
+VerticalSplitCell	: "Split Cell Vertically",	//MISSING
+TableDelete			: "Delete Table",	//MISSING
+CellProperties		: "Хоосон зайн шинж чанар",
+TableProperties		: "Хүснэгт",
+ImageProperties		: "Зураг",
+FlashProperties		: "Flash Properties",	//MISSING
+
+AnchorProp			: "Anchor Properties",	//MISSING
+ButtonProp			: "Button Properties",	//MISSING
+CheckboxProp		: "Checkbox Properties",	//MISSING
+HiddenFieldProp		: "Hidden Field Properties",	//MISSING
+RadioButtonProp		: "Radio Button Properties",	//MISSING
+ImageButtonProp		: "Image Button Properties",	//MISSING
+TextFieldProp		: "Text Field Properties",	//MISSING
+SelectionFieldProp	: "Selection Field Properties",	//MISSING
+TextareaProp		: "Textarea Properties",	//MISSING
+FormProp			: "Form Properties",	//MISSING
+
+FontFormats			: "Хэвийн;Formatted;Хаяг;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6;Paragraph (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "XHTML үйл явц явагдаж байна. Хүлээнэ үү...",
+Done				: "Хийх",
+PasteWordConfirm	: "Word-оос хуулсан текстээ санаж байгааг нь буулгахыг та хүсч байна уу. Та текст-ээ буулгахын өмнө цэвэрлэх үү?",
+NotCompatiblePaste	: "Энэ комманд Internet Explorer-ын 5.5 буюу түүнээс дээш хувилбарт идвэхшинэ. Та цэвэрлэхгүйгээр буулгахыг хүсч байна?",
+UnknownToolbarItem	: "Багажны хэсгийн \"%1\" item мэдэгдэхгүй байна",
+UnknownCommand		: "\"%1\" комманд нэр мэдагдэхгүй байна",
+NotImplemented		: "Зөвшөөрөгдөхгүй комманд",
+UnknownToolbarSet	: "Багажны хэсэгт \"%1\" оноох, үүсээгүй байна",
+NoActiveX			: "Your browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.",	//MISSING
+BrowseServerBlocked : "The resources browser could not be opened. Make sure that all popup blockers are disabled.",	//MISSING
+DialogBlocked		: "It was not possible to open the dialog window. Make sure all popup blockers are disabled.",	//MISSING
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Болих",
+DlgBtnClose			: "Хаах",
+DlgBtnBrowseServer	: "Browse Server",	//MISSING
+DlgAdvancedTag		: "Нэмэлт",
+DlgOpOther			: "<Other>",	//MISSING
+DlgInfoTab			: "Info",	//MISSING
+DlgAlertUrl			: "Please insert the URL",	//MISSING
+
+// General Dialogs Labels
+DlgGenNotSet		: "<Оноохгүй>",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Хэлний чиглэл",
+DlgGenLangDirLtr	: "Зүүнээс баруун (LTR)",
+DlgGenLangDirRtl	: "Баруунаас зүүн (RTL)",
+DlgGenLangCode		: "Хэлний код",
+DlgGenAccessKey		: "Холбох түлхүүр",
+DlgGenName			: "Нэр",
+DlgGenTabIndex		: "Tab индекс",
+DlgGenLongDescr		: "URL-ын тайлбар",
+DlgGenClass			: "Stylesheet классууд",
+DlgGenTitle			: "Зөвлөлдөх гарчиг",
+DlgGenContType		: "Зөвлөлдөх төрлийн агуулга",
+DlgGenLinkCharset	: "Тэмдэгт оноох нөөцөд холбогдсон",
+DlgGenStyle			: "Загвар",
+
+// Image Dialog
+DlgImgTitle			: "Зураг",
+DlgImgInfoTab		: "Зурагны мэдээлэл",
+DlgImgBtnUpload		: "Үүнийг сервэррүү илгээ",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Хуулах",
+DlgImgAlt			: "Тайлбар текст",
+DlgImgWidth			: "Өргөн",
+DlgImgHeight		: "Өндөр",
+DlgImgLockRatio		: "Lock Ratio",
+DlgBtnResetSize		: "хэмжээ дахин оноох",
+DlgImgBorder		: "Хүрээ",
+DlgImgHSpace		: "Хөндлөн зай",
+DlgImgVSpace		: "Босоо зай",
+DlgImgAlign			: "Эгнээ",
+DlgImgAlignLeft		: "Зүүн",
+DlgImgAlignAbsBottom: "Abs доод талд",
+DlgImgAlignAbsMiddle: "Abs Дунд талд",
+DlgImgAlignBaseline	: "Baseline",
+DlgImgAlignBottom	: "Доод талд",
+DlgImgAlignMiddle	: "Дунд талд",
+DlgImgAlignRight	: "Баруун",
+DlgImgAlignTextTop	: "Текст дээр",
+DlgImgAlignTop		: "Дээд талд",
+DlgImgPreview		: "Уридчлан харах",
+DlgImgAlertUrl		: "Зурагны URL-ын төрлийн сонгоно уу",
+DlgImgLinkTab		: "Link",	//MISSING
+
+// Flash Dialog
+DlgFlashTitle		: "Flash Properties",	//MISSING
+DlgFlashChkPlay		: "Auto Play",	//MISSING
+DlgFlashChkLoop		: "Loop",	//MISSING
+DlgFlashChkMenu		: "Enable Flash Menu",	//MISSING
+DlgFlashScale		: "Scale",	//MISSING
+DlgFlashScaleAll	: "Show all",	//MISSING
+DlgFlashScaleNoBorder	: "No Border",	//MISSING
+DlgFlashScaleFit	: "Exact Fit",	//MISSING
+
+// Link Dialog
+DlgLnkWindowTitle	: "Линк",
+DlgLnkInfoTab		: "Линкийн мэдээлэл",
+DlgLnkTargetTab		: "Байрлал",
+
+DlgLnkType			: "Линкийн төрөл",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Энэ хуудасандах холбоос",
+DlgLnkTypeEMail		: "E-Mail",
+DlgLnkProto			: "Протокол",
+DlgLnkProtoOther	: "<бусад>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Холбоос сонгох",
+DlgLnkAnchorByName	: "Холбоосын нэрээр",
+DlgLnkAnchorById	: "Элемэнт Id-гаар",
+DlgLnkNoAnchors		: "(Баримт бичиг холбоосгүй байна)",
+DlgLnkEMail			: "E-Mail Хаяг",
+DlgLnkEMailSubject	: "Message Subject",
+DlgLnkEMailBody		: "Message-ийн агуулга",
+DlgLnkUpload		: "Хуулах",
+DlgLnkBtnUpload		: "Үүнийг серверрүү илгээ",
+
+DlgLnkTarget		: "Байрлал",
+DlgLnkTargetFrame	: "<Агуулах хүрээ>",
+DlgLnkTargetPopup	: "<popup цонх>",
+DlgLnkTargetBlank	: "Шинэ цонх (_blank)",
+DlgLnkTargetParent	: "Эцэг цонх (_parent)",
+DlgLnkTargetSelf	: "Төстэй цонх (_self)",
+DlgLnkTargetTop		: "Хамгийн түрүүн байх цонх (_top)",
+DlgLnkTargetFrameName	: "Target Frame Name",	//MISSING
+DlgLnkPopWinName	: "Popup цонхны нэр",
+DlgLnkPopWinFeat	: "Popup цонхны онцлог",
+DlgLnkPopResize		: "Хэмжээ өөрчлөх",
+DlgLnkPopLocation	: "Location хэсэг",
+DlgLnkPopMenu		: "Meню хэсэг",
+DlgLnkPopScroll		: "Скрол хэсэгүүд",
+DlgLnkPopStatus		: "Статус хэсэг",
+DlgLnkPopToolbar	: "Багажны хэсэг",
+DlgLnkPopFullScrn	: "Цонх дүүргэх (IE)",
+DlgLnkPopDependent	: "Хамаатай (Netscape)",
+DlgLnkPopWidth		: "Өргөн",
+DlgLnkPopHeight		: "Өндөр",
+DlgLnkPopLeft		: "Зүүн байрлал",
+DlgLnkPopTop		: "Дээд байрлал",
+
+DlnLnkMsgNoUrl		: "Линк URL-ээ төрөлжүүлнэ үү",
+DlnLnkMsgNoEMail	: "Е-mail хаягаа төрөлжүүлнэ үү",
+DlnLnkMsgNoAnchor	: "Холбоосоо сонгоно уу",
+DlnLnkMsgInvPopName	: "The popup name must begin with an alphabetic character and must not contain spaces",	//MISSING
+
+// Color Dialog
+DlgColorTitle		: "Өнгө сонгох",
+DlgColorBtnClear	: "Цэвэрлэх",
+DlgColorHighlight	: "Өнгө",
+DlgColorSelected	: "Сонгогдсон",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Тодорхойлолт оруулах",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Онцгой тэмдэгт сонгох",
+
+// Table Dialog
+DlgTableTitle		: "Хүснэгт",
+DlgTableRows		: "Мөр",
+DlgTableColumns		: "Багана",
+DlgTableBorder		: "Хүрээний хэмжээ",
+DlgTableAlign		: "Эгнээ",
+DlgTableAlignNotSet	: "<Оноохгүй>",
+DlgTableAlignLeft	: "Зүүн талд",
+DlgTableAlignCenter	: "Төвд",
+DlgTableAlignRight	: "Баруун талд",
+DlgTableWidth		: "Өргөн",
+DlgTableWidthPx		: "цэг",
+DlgTableWidthPc		: "хувь",
+DlgTableHeight		: "Өндөр",
+DlgTableCellSpace	: "Нүх хоорондын зай",
+DlgTableCellPad		: "Нүх доторлох",
+DlgTableCaption		: "Тайлбар",
+DlgTableSummary		: "Summary",	//MISSING
+
+// Table Cell Dialog
+DlgCellTitle		: "Хоосон зайн шинж чанар",
+DlgCellWidth		: "Өргөн",
+DlgCellWidthPx		: "цэг",
+DlgCellWidthPc		: "хувь",
+DlgCellHeight		: "Өндөр",
+DlgCellWordWrap		: "Үг таслах",
+DlgCellWordWrapNotSet	: "<Оноохгүй>",
+DlgCellWordWrapYes	: "Тийм",
+DlgCellWordWrapNo	: "Үгүй",
+DlgCellHorAlign		: "Босоо эгнээ",
+DlgCellHorAlignNotSet	: "<Оноохгүй>",
+DlgCellHorAlignLeft	: "Зүүн",
+DlgCellHorAlignCenter	: "Төв",
+DlgCellHorAlignRight: "Баруун",
+DlgCellVerAlign		: "Хөндлөн эгнээ",
+DlgCellVerAlignNotSet	: "<Оноохгүй>",
+DlgCellVerAlignTop	: "Дээд тал",
+DlgCellVerAlignMiddle	: "Дунд",
+DlgCellVerAlignBottom	: "Доод тал",
+DlgCellVerAlignBaseline	: "Baseline",
+DlgCellRowSpan		: "Нийт мөр",
+DlgCellCollSpan		: "Нийт багана",
+DlgCellBackColor	: "Фонны өнгө",
+DlgCellBorderColor	: "Хүрээний өнгө",
+DlgCellBtnSelect	: "Сонго...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Find and Replace",	//MISSING
+
+// Find Dialog
+DlgFindTitle		: "Хайх",
+DlgFindFindBtn		: "Хайх",
+DlgFindNotFoundMsg	: "Хайсан текст олсонгүй.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Солих",
+DlgReplaceFindLbl		: "Хайх үг/үсэг:",
+DlgReplaceReplaceLbl	: "Солих үг:",
+DlgReplaceCaseChk		: "Тэнцэх төлөв",
+DlgReplaceReplaceBtn	: "Солих",
+DlgReplaceReplAllBtn	: "Бүгдийг нь Солих",
+DlgReplaceWordChk		: "Тэнцэх бүтэн үг",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "Таны browser-ын хамгаалалтын тохиргоо editor-д автоматаар хайчлах үйлдэлийг зөвшөөрөхгүй байна. (Ctrl+X) товчны хослолыг ашиглана уу.",
+PasteErrorCopy	: "Таны browser-ын хамгаалалтын тохиргоо editor-д автоматаар хуулах үйлдэлийг зөвшөөрөхгүй байна. (Ctrl+C) товчны хослолыг ашиглана уу.",
+
+PasteAsText		: "Plain Text-ээс буулгах",
+PasteFromWord	: "Word-оос буулгах",
+
+DlgPasteMsg2	: "Please paste inside the following box using the keyboard (<strong>Ctrl+V</strong>) and hit <strong>OK</strong>.",	//MISSING
+DlgPasteSec		: "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.",	//MISSING
+DlgPasteIgnoreFont		: "Ignore Font Face definitions",	//MISSING
+DlgPasteRemoveStyles	: "Remove Styles definitions",	//MISSING
+DlgPasteCleanBox		: "Clean Up Box",	//MISSING
+
+// Color Picker
+ColorAutomatic	: "Автоматаар",
+ColorMoreColors	: "Нэмэлт өнгөнүүд...",
+
+// Document Properties
+DocProps		: "Document Properties",	//MISSING
+
+// Anchor Dialog
+DlgAnchorTitle		: "Anchor Properties",	//MISSING
+DlgAnchorName		: "Anchor Name",	//MISSING
+DlgAnchorErrorName	: "Please type the anchor name",	//MISSING
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Not in dictionary",	//MISSING
+DlgSpellChangeTo		: "Change to",	//MISSING
+DlgSpellBtnIgnore		: "Ignore",	//MISSING
+DlgSpellBtnIgnoreAll	: "Ignore All",	//MISSING
+DlgSpellBtnReplace		: "Replace",	//MISSING
+DlgSpellBtnReplaceAll	: "Replace All",	//MISSING
+DlgSpellBtnUndo			: "Undo",	//MISSING
+DlgSpellNoSuggestions	: "- No suggestions -",	//MISSING
+DlgSpellProgress		: "Spell check in progress...",	//MISSING
+DlgSpellNoMispell		: "Spell check complete: No misspellings found",	//MISSING
+DlgSpellNoChanges		: "Spell check complete: No words changed",	//MISSING
+DlgSpellOneChange		: "Spell check complete: One word changed",	//MISSING
+DlgSpellManyChanges		: "Spell check complete: %1 words changed",	//MISSING
+
+IeSpellDownload			: "Spell checker not installed. Do you want to download it now?",	//MISSING
+
+// Button Dialog
+DlgButtonText		: "Text (Value)",	//MISSING
+DlgButtonType		: "Type",	//MISSING
+DlgButtonTypeBtn	: "Button",	//MISSING
+DlgButtonTypeSbm	: "Submit",	//MISSING
+DlgButtonTypeRst	: "Reset",	//MISSING
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Name",	//MISSING
+DlgCheckboxValue	: "Value",	//MISSING
+DlgCheckboxSelected	: "Selected",	//MISSING
+
+// Form Dialog
+DlgFormName		: "Name",	//MISSING
+DlgFormAction	: "Action",	//MISSING
+DlgFormMethod	: "Method",	//MISSING
+
+// Select Field Dialog
+DlgSelectName		: "Name",	//MISSING
+DlgSelectValue		: "Value",	//MISSING
+DlgSelectSize		: "Size",	//MISSING
+DlgSelectLines		: "lines",	//MISSING
+DlgSelectChkMulti	: "Allow multiple selections",	//MISSING
+DlgSelectOpAvail	: "Available Options",	//MISSING
+DlgSelectOpText		: "Text",	//MISSING
+DlgSelectOpValue	: "Value",	//MISSING
+DlgSelectBtnAdd		: "Add",	//MISSING
+DlgSelectBtnModify	: "Modify",	//MISSING
+DlgSelectBtnUp		: "Up",	//MISSING
+DlgSelectBtnDown	: "Down",	//MISSING
+DlgSelectBtnSetValue : "Set as selected value",	//MISSING
+DlgSelectBtnDelete	: "Delete",	//MISSING
+
+// Textarea Dialog
+DlgTextareaName	: "Name",	//MISSING
+DlgTextareaCols	: "Columns",	//MISSING
+DlgTextareaRows	: "Rows",	//MISSING
+
+// Text Field Dialog
+DlgTextName			: "Name",	//MISSING
+DlgTextValue		: "Value",	//MISSING
+DlgTextCharWidth	: "Character Width",	//MISSING
+DlgTextMaxChars		: "Maximum Characters",	//MISSING
+DlgTextType			: "Type",	//MISSING
+DlgTextTypeText		: "Text",	//MISSING
+DlgTextTypePass		: "Password",	//MISSING
+
+// Hidden Field Dialog
+DlgHiddenName	: "Name",	//MISSING
+DlgHiddenValue	: "Value",	//MISSING
+
+// Bulleted List Dialog
+BulletedListProp	: "Bulleted List Properties",	//MISSING
+NumberedListProp	: "Numbered List Properties",	//MISSING
+DlgLstStart			: "Start",	//MISSING
+DlgLstType			: "Type",	//MISSING
+DlgLstTypeCircle	: "Circle",	//MISSING
+DlgLstTypeDisc		: "Disc",	//MISSING
+DlgLstTypeSquare	: "Square",	//MISSING
+DlgLstTypeNumbers	: "Numbers (1, 2, 3)",	//MISSING
+DlgLstTypeLCase		: "Lowercase Letters (a, b, c)",	//MISSING
+DlgLstTypeUCase		: "Uppercase Letters (A, B, C)",	//MISSING
+DlgLstTypeSRoman	: "Small Roman Numerals (i, ii, iii)",	//MISSING
+DlgLstTypeLRoman	: "Large Roman Numerals (I, II, III)",	//MISSING
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "General",	//MISSING
+DlgDocBackTab		: "Background",	//MISSING
+DlgDocColorsTab		: "Colors and Margins",	//MISSING
+DlgDocMetaTab		: "Meta Data",	//MISSING
+
+DlgDocPageTitle		: "Page Title",	//MISSING
+DlgDocLangDir		: "Language Direction",	//MISSING
+DlgDocLangDirLTR	: "Left to Right (LTR)",	//MISSING
+DlgDocLangDirRTL	: "Right to Left (RTL)",	//MISSING
+DlgDocLangCode		: "Language Code",	//MISSING
+DlgDocCharSet		: "Character Set Encoding",	//MISSING
+DlgDocCharSetCE		: "Central European",	//MISSING
+DlgDocCharSetCT		: "Chinese Traditional (Big5)",	//MISSING
+DlgDocCharSetCR		: "Cyrillic",	//MISSING
+DlgDocCharSetGR		: "Greek",	//MISSING
+DlgDocCharSetJP		: "Japanese",	//MISSING
+DlgDocCharSetKR		: "Korean",	//MISSING
+DlgDocCharSetTR		: "Turkish",	//MISSING
+DlgDocCharSetUN		: "Unicode (UTF-8)",	//MISSING
+DlgDocCharSetWE		: "Western European",	//MISSING
+DlgDocCharSetOther	: "Other Character Set Encoding",	//MISSING
+
+DlgDocDocType		: "Document Type Heading",	//MISSING
+DlgDocDocTypeOther	: "Other Document Type Heading",	//MISSING
+DlgDocIncXHTML		: "Include XHTML Declarations",	//MISSING
+DlgDocBgColor		: "Background Color",	//MISSING
+DlgDocBgImage		: "Background Image URL",	//MISSING
+DlgDocBgNoScroll	: "Nonscrolling Background",	//MISSING
+DlgDocCText			: "Text",	//MISSING
+DlgDocCLink			: "Link",	//MISSING
+DlgDocCVisited		: "Visited Link",	//MISSING
+DlgDocCActive		: "Active Link",	//MISSING
+DlgDocMargins		: "Page Margins",	//MISSING
+DlgDocMaTop			: "Top",	//MISSING
+DlgDocMaLeft		: "Left",	//MISSING
+DlgDocMaRight		: "Right",	//MISSING
+DlgDocMaBottom		: "Bottom",	//MISSING
+DlgDocMeIndex		: "Document Indexing Keywords (comma separated)",	//MISSING
+DlgDocMeDescr		: "Document Description",	//MISSING
+DlgDocMeAuthor		: "Author",	//MISSING
+DlgDocMeCopy		: "Copyright",	//MISSING
+DlgDocPreview		: "Preview",	//MISSING
+
+// Templates Dialog
+Templates			: "Templates",	//MISSING
+DlgTemplatesTitle	: "Content Templates",	//MISSING
+DlgTemplatesSelMsg	: "Please select the template to open in the editor<br />(the actual contents will be lost):",	//MISSING
+DlgTemplatesLoading	: "Loading templates list. Please wait...",	//MISSING
+DlgTemplatesNoTpl	: "(No templates defined)",	//MISSING
+DlgTemplatesReplace	: "Replace actual contents",	//MISSING
+
+// About Dialog
+DlgAboutAboutTab	: "About",	//MISSING
+DlgAboutBrowserInfoTab	: "Browser Info",	//MISSING
+DlgAboutLicenseTab	: "License",	//MISSING
+DlgAboutVersion		: "Хувилбар",
+DlgAboutInfo		: "Мэдээллээр туслах"
+};
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/ms.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/ms.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/ms.js	(revision 1280)
@@ -0,0 +1,516 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Malay language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Collapse Toolbar",
+ToolbarExpand		: "Expand Toolbar",
+
+// Toolbar Items and Context Menu
+Save				: "Simpan",
+NewPage				: "Helaian Baru",
+Preview				: "Prebiu",
+Cut					: "Potong",
+Copy				: "Salin",
+Paste				: "Tampal",
+PasteText			: "Tampal sebagai Text Biasa",
+PasteWord			: "Tampal dari Word",
+Print				: "Cetak",
+SelectAll			: "Pilih Semua",
+RemoveFormat		: "Buang Format",
+InsertLinkLbl		: "Sambungan",
+InsertLink			: "Masukkan/Sunting Sambungan",
+RemoveLink			: "Buang Sambungan",
+Anchor				: "Masukkan/Sunting Pautan",
+AnchorDelete		: "Remove Anchor",	//MISSING
+InsertImageLbl		: "Gambar",
+InsertImage			: "Masukkan/Sunting Gambar",
+InsertFlashLbl		: "Flash",	//MISSING
+InsertFlash			: "Insert/Edit Flash",	//MISSING
+InsertTableLbl		: "Jadual",
+InsertTable			: "Masukkan/Sunting Jadual",
+InsertLineLbl		: "Garisan",
+InsertLine			: "Masukkan Garisan Membujur",
+InsertSpecialCharLbl: "Huruf Istimewa",
+InsertSpecialChar	: "Masukkan Huruf Istimewa",
+InsertSmileyLbl		: "Smiley",
+InsertSmiley		: "Masukkan Smiley",
+About				: "Tentang FCKeditor",
+Bold				: "Bold",
+Italic				: "Italic",
+Underline			: "Underline",
+StrikeThrough		: "Strike Through",
+Subscript			: "Subscript",
+Superscript			: "Superscript",
+LeftJustify			: "Jajaran Kiri",
+CenterJustify		: "Jajaran Tengah",
+RightJustify		: "Jajaran Kanan",
+BlockJustify		: "Jajaran Blok",
+DecreaseIndent		: "Kurangkan Inden",
+IncreaseIndent		: "Tambahkan Inden",
+Blockquote			: "Blockquote",	//MISSING
+Undo				: "Batalkan",
+Redo				: "Ulangkan",
+NumberedListLbl		: "Senarai bernombor",
+NumberedList		: "Masukkan/Sunting Senarai bernombor",
+BulletedListLbl		: "Senarai tidak bernombor",
+BulletedList		: "Masukkan/Sunting Senarai tidak bernombor",
+ShowTableBorders	: "Tunjukkan Border Jadual",
+ShowDetails			: "Tunjukkan Butiran",
+Style				: "Stail",
+FontFormat			: "Format",
+Font				: "Font",
+FontSize			: "Saiz",
+TextColor			: "Warna Text",
+BGColor				: "Warna Latarbelakang",
+Source				: "Sumber",
+Find				: "Cari",
+Replace				: "Ganti",
+SpellCheck			: "Semak Ejaan",
+UniversalKeyboard	: "Papan Kekunci Universal",
+PageBreakLbl		: "Page Break",	//MISSING
+PageBreak			: "Insert Page Break",	//MISSING
+
+Form			: "Borang",
+Checkbox		: "Checkbox",
+RadioButton		: "Butang Radio",
+TextField		: "Text Field",
+Textarea		: "Textarea",
+HiddenField		: "Field Tersembunyi",
+Button			: "Butang",
+SelectionField	: "Field Pilihan",
+ImageButton		: "Butang Bergambar",
+
+FitWindow		: "Maximize the editor size",	//MISSING
+ShowBlocks		: "Show Blocks",	//MISSING
+
+// Context Menu
+EditLink			: "Sunting Sambungan",
+CellCM				: "Cell",	//MISSING
+RowCM				: "Row",	//MISSING
+ColumnCM			: "Column",	//MISSING
+InsertRowAfter		: "Insert Row After",	//MISSING
+InsertRowBefore		: "Insert Row Before",	//MISSING
+DeleteRows			: "Buangkan Baris",
+InsertColumnAfter	: "Insert Column After",	//MISSING
+InsertColumnBefore	: "Insert Column Before",	//MISSING
+DeleteColumns		: "Buangkan Lajur",
+InsertCellAfter		: "Insert Cell After",	//MISSING
+InsertCellBefore	: "Insert Cell Before",	//MISSING
+DeleteCells			: "Buangkan Sel-sel",
+MergeCells			: "Cantumkan Sel-sel",
+MergeRight			: "Merge Right",	//MISSING
+MergeDown			: "Merge Down",	//MISSING
+HorizontalSplitCell	: "Split Cell Horizontally",	//MISSING
+VerticalSplitCell	: "Split Cell Vertically",	//MISSING
+TableDelete			: "Delete Table",	//MISSING
+CellProperties		: "Ciri-ciri Sel",
+TableProperties		: "Ciri-ciri Jadual",
+ImageProperties		: "Ciri-ciri Gambar",
+FlashProperties		: "Flash Properties",	//MISSING
+
+AnchorProp			: "Ciri-ciri Pautan",
+ButtonProp			: "Ciri-ciri Butang",
+CheckboxProp		: "Ciri-ciri Checkbox",
+HiddenFieldProp		: "Ciri-ciri Field Tersembunyi",
+RadioButtonProp		: "Ciri-ciri Butang Radio",
+ImageButtonProp		: "Ciri-ciri Butang Bergambar",
+TextFieldProp		: "Ciri-ciri Text Field",
+SelectionFieldProp	: "Ciri-ciri Selection Field",
+TextareaProp		: "Ciri-ciri Textarea",
+FormProp			: "Ciri-ciri Borang",
+
+FontFormats			: "Normal;Telah Diformat;Alamat;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6;Perenggan (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "Memproses XHTML. Sila tunggu...",
+Done				: "Siap",
+PasteWordConfirm	: "Text yang anda hendak tampal adalah berasal dari Word. Adakah anda mahu membuang semua format Word sebelum tampal ke dalam text?",
+NotCompatiblePaste	: "Arahan ini bole dilakukan jika anda mempuunyai Internet Explorer version 5.5 atau yang lebih tinggi. Adakah anda hendak tampal text tanpa membuang format Word?",
+UnknownToolbarItem	: "Toolbar item tidak diketahui\"%1\"",
+UnknownCommand		: "Arahan tidak diketahui \"%1\"",
+NotImplemented		: "Arahan tidak terdapat didalam sistem",
+UnknownToolbarSet	: "Set toolbar \"%1\" tidak wujud",
+NoActiveX			: "Your browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.",	//MISSING
+BrowseServerBlocked : "The resources browser could not be opened. Make sure that all popup blockers are disabled.",	//MISSING
+DialogBlocked		: "It was not possible to open the dialog window. Make sure all popup blockers are disabled.",	//MISSING
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Batal",
+DlgBtnClose			: "Tutup",
+DlgBtnBrowseServer	: "Browse Server",
+DlgAdvancedTag		: "Advanced",
+DlgOpOther			: "<Lain-lain>",
+DlgInfoTab			: "Info",	//MISSING
+DlgAlertUrl			: "Please insert the URL",	//MISSING
+
+// General Dialogs Labels
+DlgGenNotSet		: "<tidak di set>",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Arah Tulisan",
+DlgGenLangDirLtr	: "Kiri ke Kanan (LTR)",
+DlgGenLangDirRtl	: "Kanan ke Kiri (RTL)",
+DlgGenLangCode		: "Kod Bahasa",
+DlgGenAccessKey		: "Kunci Akses",
+DlgGenName			: "Nama",
+DlgGenTabIndex		: "Indeks Tab ",
+DlgGenLongDescr		: "Butiran Panjang URL",
+DlgGenClass			: "Kelas-kelas Stylesheet",
+DlgGenTitle			: "Tajuk Makluman",
+DlgGenContType		: "Jenis Kandungan Makluman",
+DlgGenLinkCharset	: "Linked Resource Charset",
+DlgGenStyle			: "Stail",
+
+// Image Dialog
+DlgImgTitle			: "Ciri-ciri Imej",
+DlgImgInfoTab		: "Info Imej",
+DlgImgBtnUpload		: "Hantar ke Server",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Muat Naik",
+DlgImgAlt			: "Text Alternatif",
+DlgImgWidth			: "Lebar",
+DlgImgHeight		: "Tinggi",
+DlgImgLockRatio		: "Tetapkan Nisbah",
+DlgBtnResetSize		: "Saiz Set Semula",
+DlgImgBorder		: "Border",
+DlgImgHSpace		: "Ruang Melintang",
+DlgImgVSpace		: "Ruang Menegak",
+DlgImgAlign			: "Jajaran",
+DlgImgAlignLeft		: "Kiri",
+DlgImgAlignAbsBottom: "Bawah Mutlak",
+DlgImgAlignAbsMiddle: "Pertengahan Mutlak",
+DlgImgAlignBaseline	: "Garis Dasar",
+DlgImgAlignBottom	: "Bawah",
+DlgImgAlignMiddle	: "Pertengahan",
+DlgImgAlignRight	: "Kanan",
+DlgImgAlignTextTop	: "Atas Text",
+DlgImgAlignTop		: "Atas",
+DlgImgPreview		: "Prebiu",
+DlgImgAlertUrl		: "Sila taip URL untuk fail gambar",
+DlgImgLinkTab		: "Sambungan",
+
+// Flash Dialog
+DlgFlashTitle		: "Flash Properties",	//MISSING
+DlgFlashChkPlay		: "Auto Play",	//MISSING
+DlgFlashChkLoop		: "Loop",	//MISSING
+DlgFlashChkMenu		: "Enable Flash Menu",	//MISSING
+DlgFlashScale		: "Scale",	//MISSING
+DlgFlashScaleAll	: "Show all",	//MISSING
+DlgFlashScaleNoBorder	: "No Border",	//MISSING
+DlgFlashScaleFit	: "Exact Fit",	//MISSING
+
+// Link Dialog
+DlgLnkWindowTitle	: "Sambungan",
+DlgLnkInfoTab		: "Butiran Sambungan",
+DlgLnkTargetTab		: "Sasaran",
+
+DlgLnkType			: "Jenis Sambungan",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Pautan dalam muka surat ini",
+DlgLnkTypeEMail		: "E-Mail",
+DlgLnkProto			: "Protokol",
+DlgLnkProtoOther	: "<lain-lain>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Sila pilih pautan",
+DlgLnkAnchorByName	: "dengan menggunakan nama pautan",
+DlgLnkAnchorById	: "dengan menggunakan ID elemen",
+DlgLnkNoAnchors		: "(Tiada pautan terdapat dalam dokumen ini)",
+DlgLnkEMail			: "Alamat E-Mail",
+DlgLnkEMailSubject	: "Subjek Mesej",
+DlgLnkEMailBody		: "Isi Kandungan Mesej",
+DlgLnkUpload		: "Muat Naik",
+DlgLnkBtnUpload		: "Hantar ke Server",
+
+DlgLnkTarget		: "Sasaran",
+DlgLnkTargetFrame	: "<bingkai>",
+DlgLnkTargetPopup	: "<tetingkap popup>",
+DlgLnkTargetBlank	: "Tetingkap Baru (_blank)",
+DlgLnkTargetParent	: "Tetingkap Parent (_parent)",
+DlgLnkTargetSelf	: "Tetingkap yang Sama (_self)",
+DlgLnkTargetTop		: "Tetingkap yang paling atas (_top)",
+DlgLnkTargetFrameName	: "Nama Bingkai Sasaran",
+DlgLnkPopWinName	: "Nama Tetingkap Popup",
+DlgLnkPopWinFeat	: "Ciri Tetingkap Popup",
+DlgLnkPopResize		: "Saiz bolehubah",
+DlgLnkPopLocation	: "Bar Lokasi",
+DlgLnkPopMenu		: "Bar Menu",
+DlgLnkPopScroll		: "Bar-bar skrol",
+DlgLnkPopStatus		: "Bar Status",
+DlgLnkPopToolbar	: "Toolbar",
+DlgLnkPopFullScrn	: "Skrin Penuh (IE)",
+DlgLnkPopDependent	: "Bergantungan (Netscape)",
+DlgLnkPopWidth		: "Lebar",
+DlgLnkPopHeight		: "Tinggi",
+DlgLnkPopLeft		: "Posisi Kiri",
+DlgLnkPopTop		: "Posisi Atas",
+
+DlnLnkMsgNoUrl		: "Sila taip sambungan URL",
+DlnLnkMsgNoEMail	: "Sila taip alamat e-mail",
+DlnLnkMsgNoAnchor	: "Sila pilih pautan berkenaaan",
+DlnLnkMsgInvPopName	: "The popup name must begin with an alphabetic character and must not contain spaces",	//MISSING
+
+// Color Dialog
+DlgColorTitle		: "Pilihan Warna",
+DlgColorBtnClear	: "Nyahwarna",
+DlgColorHighlight	: "Terang",
+DlgColorSelected	: "Dipilih",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Masukkan Smiley",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Sila pilih huruf istimewa",
+
+// Table Dialog
+DlgTableTitle		: "Ciri-ciri Jadual",
+DlgTableRows		: "Barisan",
+DlgTableColumns		: "Jaluran",
+DlgTableBorder		: "Saiz Border",
+DlgTableAlign		: "Penjajaran",
+DlgTableAlignNotSet	: "<Tidak diset>",
+DlgTableAlignLeft	: "Kiri",
+DlgTableAlignCenter	: "Tengah",
+DlgTableAlignRight	: "Kanan",
+DlgTableWidth		: "Lebar",
+DlgTableWidthPx		: "piksel-piksel",
+DlgTableWidthPc		: "peratus",
+DlgTableHeight		: "Tinggi",
+DlgTableCellSpace	: "Ruangan Antara Sel",
+DlgTableCellPad		: "Tambahan Ruang Sel",
+DlgTableCaption		: "Keterangan",
+DlgTableSummary		: "Summary",	//MISSING
+
+// Table Cell Dialog
+DlgCellTitle		: "Ciri-ciri Sel",
+DlgCellWidth		: "Lebar",
+DlgCellWidthPx		: "piksel-piksel",
+DlgCellWidthPc		: "peratus",
+DlgCellHeight		: "Tinggi",
+DlgCellWordWrap		: "Mengulung Perkataan",
+DlgCellWordWrapNotSet	: "<Tidak diset>",
+DlgCellWordWrapYes	: "Ya",
+DlgCellWordWrapNo	: "Tidak",
+DlgCellHorAlign		: "Jajaran Membujur",
+DlgCellHorAlignNotSet	: "<Tidak diset>",
+DlgCellHorAlignLeft	: "Kiri",
+DlgCellHorAlignCenter	: "Tengah",
+DlgCellHorAlignRight: "Kanan",
+DlgCellVerAlign		: "Jajaran Menegak",
+DlgCellVerAlignNotSet	: "<Tidak diset>",
+DlgCellVerAlignTop	: "Atas",
+DlgCellVerAlignMiddle	: "Tengah",
+DlgCellVerAlignBottom	: "Bawah",
+DlgCellVerAlignBaseline	: "Garis Dasar",
+DlgCellRowSpan		: "Penggunaan Baris",
+DlgCellCollSpan		: "Penggunaan Lajur",
+DlgCellBackColor	: "Warna Latarbelakang",
+DlgCellBorderColor	: "Warna Border",
+DlgCellBtnSelect	: "Pilih...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Find and Replace",	//MISSING
+
+// Find Dialog
+DlgFindTitle		: "Carian",
+DlgFindFindBtn		: "Cari",
+DlgFindNotFoundMsg	: "Text yang dicari tidak dijumpai.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Gantian",
+DlgReplaceFindLbl		: "Perkataan yang dicari:",
+DlgReplaceReplaceLbl	: "Diganti dengan:",
+DlgReplaceCaseChk		: "Padanan case huruf",
+DlgReplaceReplaceBtn	: "Ganti",
+DlgReplaceReplAllBtn	: "Ganti semua",
+DlgReplaceWordChk		: "Padana Keseluruhan perkataan",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "Keselamatan perisian browser anda tidak membenarkan operasi suntingan text/imej. Sila gunakan papan kekunci (Ctrl+X).",
+PasteErrorCopy	: "Keselamatan perisian browser anda tidak membenarkan operasi salinan text/imej. Sila gunakan papan kekunci (Ctrl+C).",
+
+PasteAsText		: "Tampal sebagai text biasa",
+PasteFromWord	: "Tampal dari perisian \"Word\"",
+
+DlgPasteMsg2	: "Please paste inside the following box using the keyboard (<strong>Ctrl+V</strong>) and hit <strong>OK</strong>.",	//MISSING
+DlgPasteSec		: "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.",	//MISSING
+DlgPasteIgnoreFont		: "Ignore Font Face definitions",	//MISSING
+DlgPasteRemoveStyles	: "Remove Styles definitions",	//MISSING
+DlgPasteCleanBox		: "Clean Up Box",	//MISSING
+
+// Color Picker
+ColorAutomatic	: "Otomatik",
+ColorMoreColors	: "Warna lain-lain...",
+
+// Document Properties
+DocProps		: "Ciri-ciri dokumen",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Ciri-ciri Pautan",
+DlgAnchorName		: "Nama Pautan",
+DlgAnchorErrorName	: "Sila taip nama pautan",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Tidak terdapat didalam kamus",
+DlgSpellChangeTo		: "Tukarkan kepada",
+DlgSpellBtnIgnore		: "Biar",
+DlgSpellBtnIgnoreAll	: "Biarkan semua",
+DlgSpellBtnReplace		: "Ganti",
+DlgSpellBtnReplaceAll	: "Gantikan Semua",
+DlgSpellBtnUndo			: "Batalkan",
+DlgSpellNoSuggestions	: "- Tiada cadangan -",
+DlgSpellProgress		: "Pemeriksaan ejaan sedang diproses...",
+DlgSpellNoMispell		: "Pemeriksaan ejaan siap: Tiada salah ejaan",
+DlgSpellNoChanges		: "Pemeriksaan ejaan siap: Tiada perkataan diubah",
+DlgSpellOneChange		: "Pemeriksaan ejaan siap: Satu perkataan telah diubah",
+DlgSpellManyChanges		: "Pemeriksaan ejaan siap: %1 perkataan diubah",
+
+IeSpellDownload			: "Pemeriksa ejaan tidak dipasang. Adakah anda mahu muat turun sekarang?",
+
+// Button Dialog
+DlgButtonText		: "Teks (Nilai)",
+DlgButtonType		: "Jenis",
+DlgButtonTypeBtn	: "Button",	//MISSING
+DlgButtonTypeSbm	: "Submit",	//MISSING
+DlgButtonTypeRst	: "Reset",	//MISSING
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Nama",
+DlgCheckboxValue	: "Nilai",
+DlgCheckboxSelected	: "Dipilih",
+
+// Form Dialog
+DlgFormName		: "Nama",
+DlgFormAction	: "Tindakan borang",
+DlgFormMethod	: "Cara borang dihantar",
+
+// Select Field Dialog
+DlgSelectName		: "Nama",
+DlgSelectValue		: "Nilai",
+DlgSelectSize		: "Saiz",
+DlgSelectLines		: "garisan",
+DlgSelectChkMulti	: "Benarkan pilihan pelbagai",
+DlgSelectOpAvail	: "Pilihan sediada",
+DlgSelectOpText		: "Teks",
+DlgSelectOpValue	: "Nilai",
+DlgSelectBtnAdd		: "Tambah Pilihan",
+DlgSelectBtnModify	: "Ubah Pilihan",
+DlgSelectBtnUp		: "Naik ke atas",
+DlgSelectBtnDown	: "Turun ke bawah",
+DlgSelectBtnSetValue : "Set sebagai nilai terpilih",
+DlgSelectBtnDelete	: "Padam",
+
+// Textarea Dialog
+DlgTextareaName	: "Nama",
+DlgTextareaCols	: "Lajur",
+DlgTextareaRows	: "Baris",
+
+// Text Field Dialog
+DlgTextName			: "Nama",
+DlgTextValue		: "Nilai",
+DlgTextCharWidth	: "Lebar isian",
+DlgTextMaxChars		: "Isian Maksimum",
+DlgTextType			: "Jenis",
+DlgTextTypeText		: "Teks",
+DlgTextTypePass		: "Kata Laluan",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Nama",
+DlgHiddenValue	: "Nilai",
+
+// Bulleted List Dialog
+BulletedListProp	: "Ciri-ciri senarai berpeluru",
+NumberedListProp	: "Ciri-ciri senarai bernombor",
+DlgLstStart			: "Start",	//MISSING
+DlgLstType			: "Jenis",
+DlgLstTypeCircle	: "Circle",
+DlgLstTypeDisc		: "Disc",	//MISSING
+DlgLstTypeSquare	: "Square",
+DlgLstTypeNumbers	: "Nombor-nombor (1, 2, 3)",
+DlgLstTypeLCase		: "Huruf-huruf kecil (a, b, c)",
+DlgLstTypeUCase		: "Huruf-huruf besar (A, B, C)",
+DlgLstTypeSRoman	: "Nombor Roman Kecil (i, ii, iii)",
+DlgLstTypeLRoman	: "Nombor Roman Besar (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Umum",
+DlgDocBackTab		: "Latarbelakang",
+DlgDocColorsTab		: "Warna dan margin",
+DlgDocMetaTab		: "Data Meta",
+
+DlgDocPageTitle		: "Tajuk Muka Surat",
+DlgDocLangDir		: "Arah Tulisan",
+DlgDocLangDirLTR	: "Kiri ke Kanan (LTR)",
+DlgDocLangDirRTL	: "Kanan ke Kiri (RTL)",
+DlgDocLangCode		: "Kod Bahasa",
+DlgDocCharSet		: "Enkod Set Huruf",
+DlgDocCharSetCE		: "Central European",	//MISSING
+DlgDocCharSetCT		: "Chinese Traditional (Big5)",	//MISSING
+DlgDocCharSetCR		: "Cyrillic",	//MISSING
+DlgDocCharSetGR		: "Greek",	//MISSING
+DlgDocCharSetJP		: "Japanese",	//MISSING
+DlgDocCharSetKR		: "Korean",	//MISSING
+DlgDocCharSetTR		: "Turkish",	//MISSING
+DlgDocCharSetUN		: "Unicode (UTF-8)",	//MISSING
+DlgDocCharSetWE		: "Western European",	//MISSING
+DlgDocCharSetOther	: "Enkod Set Huruf yang Lain",
+
+DlgDocDocType		: "Jenis Kepala Dokumen",
+DlgDocDocTypeOther	: "Jenis Kepala Dokumen yang Lain",
+DlgDocIncXHTML		: "Masukkan pemula kod XHTML",
+DlgDocBgColor		: "Warna Latarbelakang",
+DlgDocBgImage		: "URL Gambar Latarbelakang",
+DlgDocBgNoScroll	: "Imej Latarbelakang tanpa Skrol",
+DlgDocCText			: "Teks",
+DlgDocCLink			: "Sambungan",
+DlgDocCVisited		: "Sambungan telah Dilawati",
+DlgDocCActive		: "Sambungan Aktif",
+DlgDocMargins		: "Margin Muka Surat",
+DlgDocMaTop			: "Atas",
+DlgDocMaLeft		: "Kiri",
+DlgDocMaRight		: "Kanan",
+DlgDocMaBottom		: "Bawah",
+DlgDocMeIndex		: "Kata Kunci Indeks Dokumen (dipisahkan oleh koma)",
+DlgDocMeDescr		: "Keterangan Dokumen",
+DlgDocMeAuthor		: "Penulis",
+DlgDocMeCopy		: "Hakcipta",
+DlgDocPreview		: "Prebiu",
+
+// Templates Dialog
+Templates			: "Templat",
+DlgTemplatesTitle	: "Templat Kandungan",
+DlgTemplatesSelMsg	: "Sila pilih templat untuk dibuka oleh editor<br>(kandungan sebenar akan hilang):",
+DlgTemplatesLoading	: "Senarai Templat sedang diproses. Sila Tunggu...",
+DlgTemplatesNoTpl	: "(Tiada Templat Disimpan)",
+DlgTemplatesReplace	: "Replace actual contents",	//MISSING
+
+// About Dialog
+DlgAboutAboutTab	: "Tentang",
+DlgAboutBrowserInfoTab	: "Maklumat Perisian Browser",
+DlgAboutLicenseTab	: "License",	//MISSING
+DlgAboutVersion		: "versi",
+DlgAboutInfo		: "Untuk maklumat lanjut sila pergi ke"
+};
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/nb.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/nb.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/nb.js	(revision 1280)
@@ -0,0 +1,516 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Norwegian Bokmål language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Skjul verktøylinje",
+ToolbarExpand		: "Vis verktøylinje",
+
+// Toolbar Items and Context Menu
+Save				: "Lagre",
+NewPage				: "Ny Side",
+Preview				: "Forhåndsvis",
+Cut					: "Klipp ut",
+Copy				: "Kopier",
+Paste				: "Lim inn",
+PasteText			: "Lim inn som ren tekst",
+PasteWord			: "Lim inn fra Word",
+Print				: "Skriv ut",
+SelectAll			: "Merk alt",
+RemoveFormat		: "Fjern format",
+InsertLinkLbl		: "Lenke",
+InsertLink			: "Sett inn/Rediger lenke",
+RemoveLink			: "Fjern lenke",
+Anchor				: "Sett inn/Rediger anker",
+AnchorDelete		: "Remove Anchor",	//MISSING
+InsertImageLbl		: "Bilde",
+InsertImage			: "Sett inn/Rediger bilde",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Sett inn/Rediger Flash",
+InsertTableLbl		: "Tabell",
+InsertTable			: "Sett inn/Rediger tabell",
+InsertLineLbl		: "Linje",
+InsertLine			: "Sett inn horisontal linje",
+InsertSpecialCharLbl: "Spesielt tegn",
+InsertSpecialChar	: "Sett inn spesielt tegn",
+InsertSmileyLbl		: "Smil",
+InsertSmiley		: "Sett inn smil",
+About				: "Om FCKeditor",
+Bold				: "Fet",
+Italic				: "Kursiv",
+Underline			: "Understrek",
+StrikeThrough		: "Gjennomstrek",
+Subscript			: "Senket skrift",
+Superscript			: "Hevet skrift",
+LeftJustify			: "Venstrejuster",
+CenterJustify		: "Midtjuster",
+RightJustify		: "Høyrejuster",
+BlockJustify		: "Blokkjuster",
+DecreaseIndent		: "Senk nivå",
+IncreaseIndent		: "Øk nivå",
+Blockquote			: "Blockquote",	//MISSING
+Undo				: "Angre",
+Redo				: "Gjør om",
+NumberedListLbl		: "Numrert liste",
+NumberedList		: "Sett inn/Fjern numrert liste",
+BulletedListLbl		: "Uordnet liste",
+BulletedList		: "Sett inn/Fjern uordnet liste",
+ShowTableBorders	: "Vis tabellrammer",
+ShowDetails			: "Vis detaljer",
+Style				: "Stil",
+FontFormat			: "Format",
+Font				: "Skrift",
+FontSize			: "Størrelse",
+TextColor			: "Tekstfarge",
+BGColor				: "Bakgrunnsfarge",
+Source				: "Kilde",
+Find				: "Finn",
+Replace				: "Erstatt",
+SpellCheck			: "Stavekontroll",
+UniversalKeyboard	: "Universelt tastatur",
+PageBreakLbl		: "Sideskift",
+PageBreak			: "Sett inn sideskift",
+
+Form			: "Skjema",
+Checkbox		: "Sjekkboks",
+RadioButton		: "Radioknapp",
+TextField		: "Tekstfelt",
+Textarea		: "Tekstområde",
+HiddenField		: "Skjult felt",
+Button			: "Knapp",
+SelectionField	: "Dropdown meny",
+ImageButton		: "Bildeknapp",
+
+FitWindow		: "Maksimer størrelsen på redigeringsverktøyet",
+ShowBlocks		: "Show Blocks",	//MISSING
+
+// Context Menu
+EditLink			: "Rediger lenke",
+CellCM				: "Celle",
+RowCM				: "Rader",
+ColumnCM			: "Kolonne",
+InsertRowAfter		: "Insert Row After",	//MISSING
+InsertRowBefore		: "Insert Row Before",	//MISSING
+DeleteRows			: "Slett rader",
+InsertColumnAfter	: "Insert Column After",	//MISSING
+InsertColumnBefore	: "Insert Column Before",	//MISSING
+DeleteColumns		: "Slett kolonner",
+InsertCellAfter		: "Insert Cell After",	//MISSING
+InsertCellBefore	: "Insert Cell Before",	//MISSING
+DeleteCells			: "Slett celler",
+MergeCells			: "Slå sammen celler",
+MergeRight			: "Merge Right",	//MISSING
+MergeDown			: "Merge Down",	//MISSING
+HorizontalSplitCell	: "Split Cell Horizontally",	//MISSING
+VerticalSplitCell	: "Split Cell Vertically",	//MISSING
+TableDelete			: "Slett tabell",
+CellProperties		: "Celleegenskaper",
+TableProperties		: "Tabellegenskaper",
+ImageProperties		: "Bildeegenskaper",
+FlashProperties		: "Flash Egenskaper",
+
+AnchorProp			: "Ankeregenskaper",
+ButtonProp			: "Knappegenskaper",
+CheckboxProp		: "Sjekkboksegenskaper",
+HiddenFieldProp		: "Skjult felt egenskaper",
+RadioButtonProp		: "Radioknappegenskaper",
+ImageButtonProp		: "Bildeknappegenskaper",
+TextFieldProp		: "Tekstfeltegenskaper",
+SelectionFieldProp	: "Dropdown menyegenskaper",
+TextareaProp		: "Tekstfeltegenskaper",
+FormProp			: "Skjemaegenskaper",
+
+FontFormats			: "Normal;Formatert;Adresse;Tittel 1;Tittel 2;Tittel 3;Tittel 4;Tittel 5;Tittel 6;Normal (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "Lager XHTML. Vennligst vent...",
+Done				: "Ferdig",
+PasteWordConfirm	: "Teksten du prøver å lime inn ser ut som om den kommer fra word , du bør rense den før du limer inn , vil du gjøre dette?",
+NotCompatiblePaste	: "Denne kommandoen er tilgjenglig kun for Internet Explorer version 5.5 eller bedre. Vil du fortsette uten å rense?(Du kan lime inn som ren tekst)",
+UnknownToolbarItem	: "Ukjent menyvalg \"%1\"",
+UnknownCommand		: "Ukjent kommando \"%1\"",
+NotImplemented		: "Kommando ikke ennå implimentert",
+UnknownToolbarSet	: "Verktøylinjesett \"%1\" finnes ikke",
+NoActiveX			: "Din nettleser's sikkerhetsinstillinger kan begrense noen av funksjonene i redigeringsverktøyet. Du må aktivere \"Kjør ActiveXkontroller og plugins\". Du kan oppleve feil og advarsler om manglende funksjoner",
+BrowseServerBlocked : "Kunne ikke åpne dialogboksen for filarkiv. Pass på at du har slått av popupstoppere.",
+DialogBlocked		: "Kunne ikke åpne dialogboksen. Pass på at du har slått av popupstoppere.",
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Avbryt",
+DlgBtnClose			: "Lukk",
+DlgBtnBrowseServer	: "Bla igjennom server",
+DlgAdvancedTag		: "Avansert",
+DlgOpOther			: "<Annet>",
+DlgInfoTab			: "Info",
+DlgAlertUrl			: "Vennligst skriv inn URL'en",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<ikke satt>",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Språkretning",
+DlgGenLangDirLtr	: "Venstre til høyre (VTH)",
+DlgGenLangDirRtl	: "Høyre til venstre (HTV)",
+DlgGenLangCode		: "Språk kode",
+DlgGenAccessKey		: "Aksessknapp",
+DlgGenName			: "Navn",
+DlgGenTabIndex		: "Tab Indeks",
+DlgGenLongDescr		: "Utvidet beskrivelse",
+DlgGenClass			: "Stilarkklasser",
+DlgGenTitle			: "Tittel",
+DlgGenContType		: "Type",
+DlgGenLinkCharset	: "Lenket språkkart",
+DlgGenStyle			: "Stil",
+
+// Image Dialog
+DlgImgTitle			: "Bildeegenskaper",
+DlgImgInfoTab		: "Bildeinformasjon",
+DlgImgBtnUpload		: "Send det til serveren",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Last opp",
+DlgImgAlt			: "Alternativ tekst",
+DlgImgWidth			: "Bredde",
+DlgImgHeight		: "Høyde",
+DlgImgLockRatio		: "Lås forhold",
+DlgBtnResetSize		: "Tilbakestill størrelse",
+DlgImgBorder		: "Ramme",
+DlgImgHSpace		: "HMarg",
+DlgImgVSpace		: "VMarg",
+DlgImgAlign			: "Juster",
+DlgImgAlignLeft		: "Venstre",
+DlgImgAlignAbsBottom: "Abs bunn",
+DlgImgAlignAbsMiddle: "Abs midten",
+DlgImgAlignBaseline	: "Bunnlinje",
+DlgImgAlignBottom	: "Bunn",
+DlgImgAlignMiddle	: "Midten",
+DlgImgAlignRight	: "Høyre",
+DlgImgAlignTextTop	: "Tekst topp",
+DlgImgAlignTop		: "Topp",
+DlgImgPreview		: "Forhåndsvis",
+DlgImgAlertUrl		: "Vennligst skriv bildeurlen",
+DlgImgLinkTab		: "Lenke",
+
+// Flash Dialog
+DlgFlashTitle		: "Flash Egenskaper",
+DlgFlashChkPlay		: "Auto Spill",
+DlgFlashChkLoop		: "Loop",
+DlgFlashChkMenu		: "Slå på Flash meny",
+DlgFlashScale		: "Skaler",
+DlgFlashScaleAll	: "Vis alt",
+DlgFlashScaleNoBorder	: "Ingen ramme",
+DlgFlashScaleFit	: "Skaler til å passeExact Fit",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Lenke",
+DlgLnkInfoTab		: "Lenkeinfo",
+DlgLnkTargetTab		: "Mål",
+
+DlgLnkType			: "Lenketype",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Lenke til anker i teksten",
+DlgLnkTypeEMail		: "E-post",
+DlgLnkProto			: "Protokoll",
+DlgLnkProtoOther	: "<annet>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Velg ett anker",
+DlgLnkAnchorByName	: "Anker etter navn",
+DlgLnkAnchorById	: "Element etter ID",
+DlgLnkNoAnchors		: "(Ingen anker i dokumentet)",
+DlgLnkEMail			: "E-postadresse",
+DlgLnkEMailSubject	: "Meldingsemne",
+DlgLnkEMailBody		: "Melding",
+DlgLnkUpload		: "Last opp",
+DlgLnkBtnUpload		: "Send til server",
+
+DlgLnkTarget		: "Mål",
+DlgLnkTargetFrame	: "<ramme>",
+DlgLnkTargetPopup	: "<popup vindu>",
+DlgLnkTargetBlank	: "Nytt vindu (_blank)",
+DlgLnkTargetParent	: "Foreldre vindu (_parent)",
+DlgLnkTargetSelf	: "Samme vindu (_self)",
+DlgLnkTargetTop		: "Hele vindu (_top)",
+DlgLnkTargetFrameName	: "Målramme",
+DlgLnkPopWinName	: "Popup vindus navn",
+DlgLnkPopWinFeat	: "Popup vindus egenskaper",
+DlgLnkPopResize		: "Endre størrelse",
+DlgLnkPopLocation	: "Adresselinje",
+DlgLnkPopMenu		: "Menylinje",
+DlgLnkPopScroll		: "Scrollbar",
+DlgLnkPopStatus		: "Statuslinje",
+DlgLnkPopToolbar	: "Verktøylinje",
+DlgLnkPopFullScrn	: "Full skjerm (IE)",
+DlgLnkPopDependent	: "Avhenging (Netscape)",
+DlgLnkPopWidth		: "Bredde",
+DlgLnkPopHeight		: "Høyde",
+DlgLnkPopLeft		: "Venstre posisjon",
+DlgLnkPopTop		: "Topp posisjon",
+
+DlnLnkMsgNoUrl		: "Vennligst skriv inn lenkens url",
+DlnLnkMsgNoEMail	: "Vennligst skriv inn e-postadressen",
+DlnLnkMsgNoAnchor	: "Vennligst velg ett anker",
+DlnLnkMsgInvPopName	: "Popup vinduets navn må begynne med en bokstav, og kan ikke inneholde mellomrom",
+
+// Color Dialog
+DlgColorTitle		: "Velg farge",
+DlgColorBtnClear	: "Tøm",
+DlgColorHighlight	: "Marker",
+DlgColorSelected	: "Velg",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Sett inn smil",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Velg spesielt tegn",
+
+// Table Dialog
+DlgTableTitle		: "Tabellegenskaper",
+DlgTableRows		: "Rader",
+DlgTableColumns		: "Kolonner",
+DlgTableBorder		: "Rammestørrelse",
+DlgTableAlign		: "Justering",
+DlgTableAlignNotSet	: "<Ikke satt>",
+DlgTableAlignLeft	: "Venstre",
+DlgTableAlignCenter	: "Midtjuster",
+DlgTableAlignRight	: "Høyre",
+DlgTableWidth		: "Bredde",
+DlgTableWidthPx		: "piksler",
+DlgTableWidthPc		: "prosent",
+DlgTableHeight		: "Høyde",
+DlgTableCellSpace	: "Celle marg",
+DlgTableCellPad		: "Celle polstring",
+DlgTableCaption		: "Tittel",
+DlgTableSummary		: "Sammendrag",
+
+// Table Cell Dialog
+DlgCellTitle		: "Celleegenskaper",
+DlgCellWidth		: "Bredde",
+DlgCellWidthPx		: "piksler",
+DlgCellWidthPc		: "prosent",
+DlgCellHeight		: "Høyde",
+DlgCellWordWrap		: "Tekstbrytning",
+DlgCellWordWrapNotSet	: "<Ikke satt>",
+DlgCellWordWrapYes	: "Ja",
+DlgCellWordWrapNo	: "Nei",
+DlgCellHorAlign		: "Horisontal justering",
+DlgCellHorAlignNotSet	: "<Ikke satt>",
+DlgCellHorAlignLeft	: "Venstre",
+DlgCellHorAlignCenter	: "Midtjuster",
+DlgCellHorAlignRight: "Høyre",
+DlgCellVerAlign		: "Vertikal justering",
+DlgCellVerAlignNotSet	: "<Ikke satt>",
+DlgCellVerAlignTop	: "Topp",
+DlgCellVerAlignMiddle	: "Midten",
+DlgCellVerAlignBottom	: "Bunn",
+DlgCellVerAlignBaseline	: "Bunnlinje",
+DlgCellRowSpan		: "Radspenn",
+DlgCellCollSpan		: "Kolonnespenn",
+DlgCellBackColor	: "Bakgrunnsfarge",
+DlgCellBorderColor	: "Rammefarge",
+DlgCellBtnSelect	: "Velg...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Find and Replace",	//MISSING
+
+// Find Dialog
+DlgFindTitle		: "Finn",
+DlgFindFindBtn		: "Finn",
+DlgFindNotFoundMsg	: "Den spesifiserte teksten ble ikke funnet.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Erstatt",
+DlgReplaceFindLbl		: "Finn hva:",
+DlgReplaceReplaceLbl	: "Erstatt med:",
+DlgReplaceCaseChk		: "Riktig case",
+DlgReplaceReplaceBtn	: "Erstatt",
+DlgReplaceReplAllBtn	: "Erstatt alle",
+DlgReplaceWordChk		: "Finn hele ordet",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "Din nettlesers sikkerhetsinstillinger tillater ikke automatisk klipping av tekst. Vennligst brukt snareveien (Ctrl+X).",
+PasteErrorCopy	: "Din nettlesers sikkerhetsinstillinger tillater ikke automatisk kopiering av tekst. Vennligst brukt snareveien (Ctrl+C).",
+
+PasteAsText		: "Lim inn som ren tekst",
+PasteFromWord	: "Lim inn fra word",
+
+DlgPasteMsg2	: "Vennligst lim inn i den følgende boksen med tastaturet (<STRONG>Ctrl+V</STRONG>) og trykk <STRONG>OK</STRONG>.",
+DlgPasteSec		: "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.",	//MISSING
+DlgPasteIgnoreFont		: "Fjern skrifttyper",
+DlgPasteRemoveStyles	: "Fjern stildefinisjoner",
+DlgPasteCleanBox		: "Tøm boksen",
+
+// Color Picker
+ColorAutomatic	: "Automatisk",
+ColorMoreColors	: "Flere farger...",
+
+// Document Properties
+DocProps		: "Dokumentegenskaper",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Ankeregenskaper",
+DlgAnchorName		: "Ankernavn",
+DlgAnchorErrorName	: "Vennligst skriv inn ankernavnet",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Ikke i ordboken",
+DlgSpellChangeTo		: "Endre til",
+DlgSpellBtnIgnore		: "Ignorer",
+DlgSpellBtnIgnoreAll	: "Ignorer alle",
+DlgSpellBtnReplace		: "Erstatt",
+DlgSpellBtnReplaceAll	: "Erstatt alle",
+DlgSpellBtnUndo			: "Angre",
+DlgSpellNoSuggestions	: "- ingen forslag -",
+DlgSpellProgress		: "Stavekontroll pågår...",
+DlgSpellNoMispell		: "Stavekontroll fullført: ingen feilstavinger funnet",
+DlgSpellNoChanges		: "Stavekontroll fullført: ingen ord endret",
+DlgSpellOneChange		: "Stavekontroll fullført: Ett ord endret",
+DlgSpellManyChanges		: "Stavekontroll fullført: %1 ord endret",
+
+IeSpellDownload			: "Stavekontroll ikke installert, vil du laste den ned nå?",
+
+// Button Dialog
+DlgButtonText		: "Tekst",
+DlgButtonType		: "Type",
+DlgButtonTypeBtn	: "Knapp",
+DlgButtonTypeSbm	: "Send",
+DlgButtonTypeRst	: "Nullstill",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Navn",
+DlgCheckboxValue	: "Verdi",
+DlgCheckboxSelected	: "Valgt",
+
+// Form Dialog
+DlgFormName		: "Navn",
+DlgFormAction	: "Handling",
+DlgFormMethod	: "Metode",
+
+// Select Field Dialog
+DlgSelectName		: "Navn",
+DlgSelectValue		: "Verdi",
+DlgSelectSize		: "Størrelse",
+DlgSelectLines		: "Linjer",
+DlgSelectChkMulti	: "Tillat flervalg",
+DlgSelectOpAvail	: "Tilgjenglige alternativer",
+DlgSelectOpText		: "Tekst",
+DlgSelectOpValue	: "Verdi",
+DlgSelectBtnAdd		: "Legg til",
+DlgSelectBtnModify	: "Endre",
+DlgSelectBtnUp		: "Opp",
+DlgSelectBtnDown	: "Ned",
+DlgSelectBtnSetValue : "Sett som valgt",
+DlgSelectBtnDelete	: "Slett",
+
+// Textarea Dialog
+DlgTextareaName	: "Navn",
+DlgTextareaCols	: "Kolonner",
+DlgTextareaRows	: "Rader",
+
+// Text Field Dialog
+DlgTextName			: "Navn",
+DlgTextValue		: "verdi",
+DlgTextCharWidth	: "Tegnbredde",
+DlgTextMaxChars		: "Maks antall tegn",
+DlgTextType			: "Type",
+DlgTextTypeText		: "Tekst",
+DlgTextTypePass		: "Passord",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Navn",
+DlgHiddenValue	: "Verdi",
+
+// Bulleted List Dialog
+BulletedListProp	: "Uordnet listeegenskaper",
+NumberedListProp	: "Ordnet listeegenskaper",
+DlgLstStart			: "Start",
+DlgLstType			: "Type",
+DlgLstTypeCircle	: "Sirkel",
+DlgLstTypeDisc		: "Hel sirkel",
+DlgLstTypeSquare	: "Firkant",
+DlgLstTypeNumbers	: "Numre(1, 2, 3)",
+DlgLstTypeLCase		: "Små bokstaver (a, b, c)",
+DlgLstTypeUCase		: "Store bokstaver(A, B, C)",
+DlgLstTypeSRoman	: "Små romerske tall(i, ii, iii)",
+DlgLstTypeLRoman	: "Store romerske tall(I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Generalt",
+DlgDocBackTab		: "Bakgrunn",
+DlgDocColorsTab		: "Farger og marginer",
+DlgDocMetaTab		: "Meta Data",
+
+DlgDocPageTitle		: "Sidetittel",
+DlgDocLangDir		: "Språkretning",
+DlgDocLangDirLTR	: "Venstre til høyre (LTR)",
+DlgDocLangDirRTL	: "Høyre til venstre (RTL)",
+DlgDocLangCode		: "Språkkode",
+DlgDocCharSet		: "Tegnsett",
+DlgDocCharSetCE		: "Sentraleuropeisk",
+DlgDocCharSetCT		: "Tradisonell kinesisk(Big5)",
+DlgDocCharSetCR		: "Cyrillic",
+DlgDocCharSetGR		: "Gresk",
+DlgDocCharSetJP		: "Japansk",
+DlgDocCharSetKR		: "Koreansk",
+DlgDocCharSetTR		: "Tyrkisk",
+DlgDocCharSetUN		: "Unikode (UTF-8)",
+DlgDocCharSetWE		: "Vesteuropeisk",
+DlgDocCharSetOther	: "Annet tegnsett",
+
+DlgDocDocType		: "Dokumenttype header",
+DlgDocDocTypeOther	: "Annet dokumenttype header",
+DlgDocIncXHTML		: "Inkulder XHTML deklarasjon",
+DlgDocBgColor		: "Bakgrunnsfarge",
+DlgDocBgImage		: "Bakgrunnsbilde url",
+DlgDocBgNoScroll	: "Ikke scroll bakgrunnsbilde",
+DlgDocCText			: "Tekst",
+DlgDocCLink			: "Link",
+DlgDocCVisited		: "Besøkt lenke",
+DlgDocCActive		: "Aktiv lenke",
+DlgDocMargins		: "Sidemargin",
+DlgDocMaTop			: "Topp",
+DlgDocMaLeft		: "Venstre",
+DlgDocMaRight		: "Høyre",
+DlgDocMaBottom		: "Bunn",
+DlgDocMeIndex		: "Dokument nøkkelord (kommaseparert)",
+DlgDocMeDescr		: "Dokumentbeskrivelse",
+DlgDocMeAuthor		: "Forfatter",
+DlgDocMeCopy		: "Kopirett",
+DlgDocPreview		: "Forhåndsvising",
+
+// Templates Dialog
+Templates			: "Maler",
+DlgTemplatesTitle	: "Innholdsmaler",
+DlgTemplatesSelMsg	: "Velg malen du vil åpne<br>(innholdet du har skrevet blir tapt!):",
+DlgTemplatesLoading	: "Laster malliste. Vennligst vent...",
+DlgTemplatesNoTpl	: "(Ingen maler definert)",
+DlgTemplatesReplace	: "Erstatt faktisk innold",
+
+// About Dialog
+DlgAboutAboutTab	: "Om",
+DlgAboutBrowserInfoTab	: "Nettleserinfo",
+DlgAboutLicenseTab	: "Lisens",
+DlgAboutVersion		: "versjon",
+DlgAboutInfo		: "For further information go to"	//MISSING
+};
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/nl.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/nl.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/nl.js	(revision 1280)
@@ -0,0 +1,516 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Dutch language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Menubalk inklappen",
+ToolbarExpand		: "Menubalk uitklappen",
+
+// Toolbar Items and Context Menu
+Save				: "Opslaan",
+NewPage				: "Nieuwe pagina",
+Preview				: "Voorbeeld",
+Cut					: "Knippen",
+Copy				: "Kopiëren",
+Paste				: "Plakken",
+PasteText			: "Plakken als platte tekst",
+PasteWord			: "Plakken als Word-gegevens",
+Print				: "Printen",
+SelectAll			: "Alles selecteren",
+RemoveFormat		: "Opmaak verwijderen",
+InsertLinkLbl		: "Link",
+InsertLink			: "Link invoegen/wijzigen",
+RemoveLink			: "Link verwijderen",
+Anchor				: "Interne link",
+AnchorDelete		: "Anker verwijderen",
+InsertImageLbl		: "Afbeelding",
+InsertImage			: "Afbeelding invoegen/wijzigen",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Flash invoegen/wijzigen",
+InsertTableLbl		: "Tabel",
+InsertTable			: "Tabel invoegen/wijzigen",
+InsertLineLbl		: "Lijn",
+InsertLine			: "Horizontale lijn invoegen",
+InsertSpecialCharLbl: "Speciale tekens",
+InsertSpecialChar	: "Speciaal teken invoegen",
+InsertSmileyLbl		: "Smiley",
+InsertSmiley		: "Smiley invoegen",
+About				: "Over FCKeditor",
+Bold				: "Vet",
+Italic				: "Schuingedrukt",
+Underline			: "Onderstreept",
+StrikeThrough		: "Doorhalen",
+Subscript			: "Subscript",
+Superscript			: "Superscript",
+LeftJustify			: "Links uitlijnen",
+CenterJustify		: "Centreren",
+RightJustify		: "Rechts uitlijnen",
+BlockJustify		: "Uitvullen",
+DecreaseIndent		: "Inspringen verkleinen",
+IncreaseIndent		: "Inspringen vergroten",
+Blockquote			: "Citaatblok",
+Undo				: "Ongedaan maken",
+Redo				: "Opnieuw uitvoeren",
+NumberedListLbl		: "Genummerde lijst",
+NumberedList		: "Genummerde lijst invoegen/verwijderen",
+BulletedListLbl		: "Opsomming",
+BulletedList		: "Opsomming invoegen/verwijderen",
+ShowTableBorders	: "Randen tabel weergeven",
+ShowDetails			: "Details weergeven",
+Style				: "Stijl",
+FontFormat			: "Opmaak",
+Font				: "Lettertype",
+FontSize			: "Grootte",
+TextColor			: "Tekstkleur",
+BGColor				: "Achtergrondkleur",
+Source				: "Code",
+Find				: "Zoeken",
+Replace				: "Vervangen",
+SpellCheck			: "Spellingscontrole",
+UniversalKeyboard	: "Universeel toetsenbord",
+PageBreakLbl		: "Pagina-einde",
+PageBreak			: "Pagina-einde invoegen",
+
+Form			: "Formulier",
+Checkbox		: "Aanvinkvakje",
+RadioButton		: "Selectievakje",
+TextField		: "Tekstveld",
+Textarea		: "Tekstvak",
+HiddenField		: "Verborgen veld",
+Button			: "Knop",
+SelectionField	: "Selectieveld",
+ImageButton		: "Afbeeldingsknop",
+
+FitWindow		: "De editor maximaliseren",
+ShowBlocks		: "Toon blokken",
+
+// Context Menu
+EditLink			: "Link wijzigen",
+CellCM				: "Cel",
+RowCM				: "Rij",
+ColumnCM			: "Kolom",
+InsertRowAfter		: "Voeg rij in achter",
+InsertRowBefore		: "Voeg rij in voor",
+DeleteRows			: "Rijen verwijderen",
+InsertColumnAfter	: "Voeg kolom in achter",
+InsertColumnBefore	: "Voeg kolom in voor",
+DeleteColumns		: "Kolommen verwijderen",
+InsertCellAfter		: "Voeg cel in achter",
+InsertCellBefore	: "Voeg cel in voor",
+DeleteCells			: "Cellen verwijderen",
+MergeCells			: "Cellen samenvoegen",
+MergeRight			: "Voeg samen naar rechts",
+MergeDown			: "Voeg samen naar beneden",
+HorizontalSplitCell	: "Splits cellen horizontaal",
+VerticalSplitCell	: "Splits cellen verticaal",
+TableDelete			: "Tabel verwijderen",
+CellProperties		: "Eigenschappen cel",
+TableProperties		: "Eigenschappen tabel",
+ImageProperties		: "Eigenschappen afbeelding",
+FlashProperties		: "Eigenschappen Flash",
+
+AnchorProp			: "Eigenschappen interne link",
+ButtonProp			: "Eigenschappen knop",
+CheckboxProp		: "Eigenschappen aanvinkvakje",
+HiddenFieldProp		: "Eigenschappen verborgen veld",
+RadioButtonProp		: "Eigenschappen selectievakje",
+ImageButtonProp		: "Eigenschappen afbeeldingsknop",
+TextFieldProp		: "Eigenschappen tekstveld",
+SelectionFieldProp	: "Eigenschappen selectieveld",
+TextareaProp		: "Eigenschappen tekstvak",
+FormProp			: "Eigenschappen formulier",
+
+FontFormats			: "Normaal;Met opmaak;Adres;Kop 1;Kop 2;Kop 3;Kop 4;Kop 5;Kop 6;Normaal (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "Bezig met verwerken XHTML. Even geduld aub...",
+Done				: "Klaar",
+PasteWordConfirm	: "De tekst die je plakte lijkt gekopieerd uit te zijn Word. Wil je de tekst opschonen voordat deze geplakt wordt?",
+NotCompatiblePaste	: "Deze opdracht is beschikbaar voor Internet Explorer versie 5.5 of hoger. Wil je plakken zonder op te schonen?",
+UnknownToolbarItem	: "Onbekend item op menubalk \"%1\"",
+UnknownCommand		: "Onbekende opdrachtnaam: \"%1\"",
+NotImplemented		: "Opdracht niet geïmplementeerd.",
+UnknownToolbarSet	: "Menubalk \"%1\" bestaat niet.",
+NoActiveX			: "De beveilingsinstellingen van je browser zouden sommige functies van de editor kunnen beperken. De optie \"Activeer ActiveX-elementen en plug-ins\" dient ingeschakeld te worden. Het kan zijn dat er nu functies ontbreken of niet werken.",
+BrowseServerBlocked : "De bestandsbrowser kon niet geopend worden. Zorg ervoor dat pop-up-blokkeerders uit staan.",
+DialogBlocked		: "Kan het dialoogvenster niet weergeven. Zorg ervoor dat pop-up-blokkeerders uit staan.",
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Annuleren",
+DlgBtnClose			: "Afsluiten",
+DlgBtnBrowseServer	: "Bladeren op server",
+DlgAdvancedTag		: "Geavanceerd",
+DlgOpOther			: "<Anders>",
+DlgInfoTab			: "Informatie",
+DlgAlertUrl			: "Geef URL op",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<niet ingevuld>",
+DlgGenId			: "Kenmerk",
+DlgGenLangDir		: "Schrijfrichting",
+DlgGenLangDirLtr	: "Links naar rechts (LTR)",
+DlgGenLangDirRtl	: "Rechts naar links (RTL)",
+DlgGenLangCode		: "Taalcode",
+DlgGenAccessKey		: "Toegangstoets",
+DlgGenName			: "Naam",
+DlgGenTabIndex		: "Tabvolgorde",
+DlgGenLongDescr		: "Lange URL-omschrijving",
+DlgGenClass			: "Stylesheet-klassen",
+DlgGenTitle			: "Aanbevolen titel",
+DlgGenContType		: "Aanbevolen content-type",
+DlgGenLinkCharset	: "Karakterset van gelinkte bron",
+DlgGenStyle			: "Stijl",
+
+// Image Dialog
+DlgImgTitle			: "Eigenschappen afbeelding",
+DlgImgInfoTab		: "Informatie afbeelding",
+DlgImgBtnUpload		: "Naar server verzenden",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Upload",
+DlgImgAlt			: "Alternatieve tekst",
+DlgImgWidth			: "Breedte",
+DlgImgHeight		: "Hoogte",
+DlgImgLockRatio		: "Afmetingen vergrendelen",
+DlgBtnResetSize		: "Afmetingen resetten",
+DlgImgBorder		: "Rand",
+DlgImgHSpace		: "HSpace",
+DlgImgVSpace		: "VSpace",
+DlgImgAlign			: "Uitlijning",
+DlgImgAlignLeft		: "Links",
+DlgImgAlignAbsBottom: "Absoluut-onder",
+DlgImgAlignAbsMiddle: "Absoluut-midden",
+DlgImgAlignBaseline	: "Basislijn",
+DlgImgAlignBottom	: "Beneden",
+DlgImgAlignMiddle	: "Midden",
+DlgImgAlignRight	: "Rechts",
+DlgImgAlignTextTop	: "Boven tekst",
+DlgImgAlignTop		: "Boven",
+DlgImgPreview		: "Voorbeeld",
+DlgImgAlertUrl		: "Geef de URL van de afbeelding",
+DlgImgLinkTab		: "Link",
+
+// Flash Dialog
+DlgFlashTitle		: "Eigenschappen Flash",
+DlgFlashChkPlay		: "Automatisch afspelen",
+DlgFlashChkLoop		: "Herhalen",
+DlgFlashChkMenu		: "Flashmenu\'s inschakelen",
+DlgFlashScale		: "Schaal",
+DlgFlashScaleAll	: "Alles tonen",
+DlgFlashScaleNoBorder	: "Geen rand",
+DlgFlashScaleFit	: "Precies passend",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Link",
+DlgLnkInfoTab		: "Linkomschrijving",
+DlgLnkTargetTab		: "Doel",
+
+DlgLnkType			: "Linktype",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Interne link in pagina",
+DlgLnkTypeEMail		: "E-mail",
+DlgLnkProto			: "Protocol",
+DlgLnkProtoOther	: "<anders>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Kies een interne link",
+DlgLnkAnchorByName	: "Op naam interne link",
+DlgLnkAnchorById	: "Op kenmerk interne link",
+DlgLnkNoAnchors		: "(Geen interne links in document gevonden)",
+DlgLnkEMail			: "E-mailadres",
+DlgLnkEMailSubject	: "Onderwerp bericht",
+DlgLnkEMailBody		: "Inhoud bericht",
+DlgLnkUpload		: "Upload",
+DlgLnkBtnUpload		: "Naar de server versturen",
+
+DlgLnkTarget		: "Doel",
+DlgLnkTargetFrame	: "<frame>",
+DlgLnkTargetPopup	: "<popup window>",
+DlgLnkTargetBlank	: "Nieuw venster (_blank)",
+DlgLnkTargetParent	: "Origineel venster (_parent)",
+DlgLnkTargetSelf	: "Zelfde venster (_self)",
+DlgLnkTargetTop		: "Hele venster (_top)",
+DlgLnkTargetFrameName	: "Naam doelframe",
+DlgLnkPopWinName	: "Naam popupvenster",
+DlgLnkPopWinFeat	: "Instellingen popupvenster",
+DlgLnkPopResize		: "Grootte wijzigen",
+DlgLnkPopLocation	: "Locatiemenu",
+DlgLnkPopMenu		: "Menubalk",
+DlgLnkPopScroll		: "Schuifbalken",
+DlgLnkPopStatus		: "Statusbalk",
+DlgLnkPopToolbar	: "Menubalk",
+DlgLnkPopFullScrn	: "Volledig scherm (IE)",
+DlgLnkPopDependent	: "Afhankelijk (Netscape)",
+DlgLnkPopWidth		: "Breedte",
+DlgLnkPopHeight		: "Hoogte",
+DlgLnkPopLeft		: "Positie links",
+DlgLnkPopTop		: "Positie boven",
+
+DlnLnkMsgNoUrl		: "Geef de link van de URL",
+DlnLnkMsgNoEMail	: "Geef een e-mailadres",
+DlnLnkMsgNoAnchor	: "Selecteer een interne link",
+DlnLnkMsgInvPopName	: "De naam van de popup moet met een alfa-numerieke waarde beginnen, en mag geen spaties bevatten.",
+
+// Color Dialog
+DlgColorTitle		: "Selecteer kleur",
+DlgColorBtnClear	: "Opschonen",
+DlgColorHighlight	: "Accentueren",
+DlgColorSelected	: "Geselecteerd",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Smiley invoegen",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Selecteer speciaal teken",
+
+// Table Dialog
+DlgTableTitle		: "Eigenschappen tabel",
+DlgTableRows		: "Rijen",
+DlgTableColumns		: "Kolommen",
+DlgTableBorder		: "Breedte rand",
+DlgTableAlign		: "Uitlijning",
+DlgTableAlignNotSet	: "<Niet ingevoerd>",
+DlgTableAlignLeft	: "Links",
+DlgTableAlignCenter	: "Centreren",
+DlgTableAlignRight	: "Rechts",
+DlgTableWidth		: "Breedte",
+DlgTableWidthPx		: "pixels",
+DlgTableWidthPc		: "procent",
+DlgTableHeight		: "Hoogte",
+DlgTableCellSpace	: "Afstand tussen cellen",
+DlgTableCellPad		: "Afstand vanaf rand cel",
+DlgTableCaption		: "Naam",
+DlgTableSummary		: "Samenvatting",
+
+// Table Cell Dialog
+DlgCellTitle		: "Eigenschappen cel",
+DlgCellWidth		: "Breedte",
+DlgCellWidthPx		: "pixels",
+DlgCellWidthPc		: "procent",
+DlgCellHeight		: "Hoogte",
+DlgCellWordWrap		: "Afbreken woorden",
+DlgCellWordWrapNotSet	: "<Niet ingevoerd>",
+DlgCellWordWrapYes	: "Ja",
+DlgCellWordWrapNo	: "Nee",
+DlgCellHorAlign		: "Horizontale uitlijning",
+DlgCellHorAlignNotSet	: "<Niet ingevoerd>",
+DlgCellHorAlignLeft	: "Links",
+DlgCellHorAlignCenter	: "Centreren",
+DlgCellHorAlignRight: "Rechts",
+DlgCellVerAlign		: "Verticale uitlijning",
+DlgCellVerAlignNotSet	: "<Niet ingevoerd>",
+DlgCellVerAlignTop	: "Boven",
+DlgCellVerAlignMiddle	: "Midden",
+DlgCellVerAlignBottom	: "Beneden",
+DlgCellVerAlignBaseline	: "Basislijn",
+DlgCellRowSpan		: "Overkoepeling rijen",
+DlgCellCollSpan		: "Overkoepeling kolommen",
+DlgCellBackColor	: "Achtergrondkleur",
+DlgCellBorderColor	: "Randkleur",
+DlgCellBtnSelect	: "Selecteren...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Zoeken en vervangen",
+
+// Find Dialog
+DlgFindTitle		: "Zoeken",
+DlgFindFindBtn		: "Zoeken",
+DlgFindNotFoundMsg	: "De opgegeven tekst is niet gevonden.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Vervangen",
+DlgReplaceFindLbl		: "Zoeken naar:",
+DlgReplaceReplaceLbl	: "Vervangen met:",
+DlgReplaceCaseChk		: "Hoofdlettergevoelig",
+DlgReplaceReplaceBtn	: "Vervangen",
+DlgReplaceReplAllBtn	: "Alles vervangen",
+DlgReplaceWordChk		: "Hele woord moet voorkomen",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "De beveiligingsinstelling van de browser verhinderen het automatisch knippen. Gebruik de sneltoets Ctrl+X van het toetsenbord.",
+PasteErrorCopy	: "De beveiligingsinstelling van de browser verhinderen het automatisch kopiëren. Gebruik de sneltoets Ctrl+C van het toetsenbord.",
+
+PasteAsText		: "Plakken als platte tekst",
+PasteFromWord	: "Plakken als Word-gegevens",
+
+DlgPasteMsg2	: "Plak de tekst in het volgende vak gebruik makend van je toetstenbord (<strong>Ctrl+V</strong>) en klik op <strong>OK</strong>.",
+DlgPasteSec		: "Door de beveiligingsinstellingen van uw browser is het niet mogelijk om direct vanuit het klembord in de editor te plakken. Middels opnieuw plakken in dit venster kunt u de tekst alsnog plakken in de editor.",
+DlgPasteIgnoreFont		: "Negeer \"Font Face\"-definities",
+DlgPasteRemoveStyles	: "Verwijder \"Style\"-definities",
+DlgPasteCleanBox		: "Vak opschonen",
+
+// Color Picker
+ColorAutomatic	: "Automatisch",
+ColorMoreColors	: "Meer kleuren...",
+
+// Document Properties
+DocProps		: "Eigenschappen document",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Eigenschappen interne link",
+DlgAnchorName		: "Naam interne link",
+DlgAnchorErrorName	: "Geef de naam van de interne link op",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Niet in het woordenboek",
+DlgSpellChangeTo		: "Wijzig in",
+DlgSpellBtnIgnore		: "Negeren",
+DlgSpellBtnIgnoreAll	: "Alles negeren",
+DlgSpellBtnReplace		: "Vervangen",
+DlgSpellBtnReplaceAll	: "Alles vervangen",
+DlgSpellBtnUndo			: "Ongedaan maken",
+DlgSpellNoSuggestions	: "-Geen suggesties-",
+DlgSpellProgress		: "Bezig met spellingscontrole...",
+DlgSpellNoMispell		: "Klaar met spellingscontrole: geen fouten gevonden",
+DlgSpellNoChanges		: "Klaar met spellingscontrole: geen woorden aangepast",
+DlgSpellOneChange		: "Klaar met spellingscontrole: één woord aangepast",
+DlgSpellManyChanges		: "Klaar met spellingscontrole: %1 woorden aangepast",
+
+IeSpellDownload			: "De spellingscontrole niet geïnstalleerd. Wil je deze nu downloaden?",
+
+// Button Dialog
+DlgButtonText		: "Tekst (waarde)",
+DlgButtonType		: "Soort",
+DlgButtonTypeBtn	: "Knop",
+DlgButtonTypeSbm	: "Versturen",
+DlgButtonTypeRst	: "Leegmaken",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Naam",
+DlgCheckboxValue	: "Waarde",
+DlgCheckboxSelected	: "Geselecteerd",
+
+// Form Dialog
+DlgFormName		: "Naam",
+DlgFormAction	: "Actie",
+DlgFormMethod	: "Methode",
+
+// Select Field Dialog
+DlgSelectName		: "Naam",
+DlgSelectValue		: "Waarde",
+DlgSelectSize		: "Grootte",
+DlgSelectLines		: "Regels",
+DlgSelectChkMulti	: "Gecombineerde selecties toestaan",
+DlgSelectOpAvail	: "Beschikbare opties",
+DlgSelectOpText		: "Tekst",
+DlgSelectOpValue	: "Waarde",
+DlgSelectBtnAdd		: "Toevoegen",
+DlgSelectBtnModify	: "Wijzigen",
+DlgSelectBtnUp		: "Omhoog",
+DlgSelectBtnDown	: "Omlaag",
+DlgSelectBtnSetValue : "Als geselecteerde waarde instellen",
+DlgSelectBtnDelete	: "Verwijderen",
+
+// Textarea Dialog
+DlgTextareaName	: "Naam",
+DlgTextareaCols	: "Kolommen",
+DlgTextareaRows	: "Rijen",
+
+// Text Field Dialog
+DlgTextName			: "Naam",
+DlgTextValue		: "Waarde",
+DlgTextCharWidth	: "Breedte (tekens)",
+DlgTextMaxChars		: "Maximum aantal tekens",
+DlgTextType			: "Soort",
+DlgTextTypeText		: "Tekst",
+DlgTextTypePass		: "Wachtwoord",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Naam",
+DlgHiddenValue	: "Waarde",
+
+// Bulleted List Dialog
+BulletedListProp	: "Eigenschappen opsommingslijst",
+NumberedListProp	: "Eigenschappen genummerde opsommingslijst",
+DlgLstStart			: "Start",
+DlgLstType			: "Soort",
+DlgLstTypeCircle	: "Cirkel",
+DlgLstTypeDisc		: "Schijf",
+DlgLstTypeSquare	: "Vierkant",
+DlgLstTypeNumbers	: "Nummers (1, 2, 3)",
+DlgLstTypeLCase		: "Kleine letters (a, b, c)",
+DlgLstTypeUCase		: "Hoofdletters (A, B, C)",
+DlgLstTypeSRoman	: "Klein Romeins (i, ii, iii)",
+DlgLstTypeLRoman	: "Groot Romeins (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Algemeen",
+DlgDocBackTab		: "Achtergrond",
+DlgDocColorsTab		: "Kleuring en marges",
+DlgDocMetaTab		: "META-data",
+
+DlgDocPageTitle		: "Paginatitel",
+DlgDocLangDir		: "Schrijfrichting",
+DlgDocLangDirLTR	: "Links naar rechts",
+DlgDocLangDirRTL	: "Rechts naar links",
+DlgDocLangCode		: "Taalcode",
+DlgDocCharSet		: "Karakterset-encoding",
+DlgDocCharSetCE		: "Centraal Europees",
+DlgDocCharSetCT		: "Traditioneel Chinees (Big5)",
+DlgDocCharSetCR		: "Cyriliaans",
+DlgDocCharSetGR		: "Grieks",
+DlgDocCharSetJP		: "Japans",
+DlgDocCharSetKR		: "Koreaans",
+DlgDocCharSetTR		: "Turks",
+DlgDocCharSetUN		: "Unicode (UTF-8)",
+DlgDocCharSetWE		: "West europees",
+DlgDocCharSetOther	: "Andere karakterset-encoding",
+
+DlgDocDocType		: "Opschrift documentsoort",
+DlgDocDocTypeOther	: "Ander opschrift documentsoort",
+DlgDocIncXHTML		: "XHTML-declaraties meenemen",
+DlgDocBgColor		: "Achtergrondkleur",
+DlgDocBgImage		: "URL achtergrondplaatje",
+DlgDocBgNoScroll	: "Vaste achtergrond",
+DlgDocCText			: "Tekst",
+DlgDocCLink			: "Link",
+DlgDocCVisited		: "Bezochte link",
+DlgDocCActive		: "Active link",
+DlgDocMargins		: "Afstandsinstellingen document",
+DlgDocMaTop			: "Boven",
+DlgDocMaLeft		: "Links",
+DlgDocMaRight		: "Rechts",
+DlgDocMaBottom		: "Onder",
+DlgDocMeIndex		: "Trefwoorden betreffende document (kommagescheiden)",
+DlgDocMeDescr		: "Beschrijving document",
+DlgDocMeAuthor		: "Auteur",
+DlgDocMeCopy		: "Copyright",
+DlgDocPreview		: "Voorbeeld",
+
+// Templates Dialog
+Templates			: "Sjablonen",
+DlgTemplatesTitle	: "Inhoud sjabonen",
+DlgTemplatesSelMsg	: "Selecteer het sjabloon dat in de editor geopend moet worden (de actuele inhoud gaat verloren):",
+DlgTemplatesLoading	: "Bezig met laden sjabonen. Even geduld alstublieft...",
+DlgTemplatesNoTpl	: "(Geen sjablonen gedefinieerd)",
+DlgTemplatesReplace	: "Vervang de huidige inhoud",
+
+// About Dialog
+DlgAboutAboutTab	: "Over",
+DlgAboutBrowserInfoTab	: "Browserinformatie",
+DlgAboutLicenseTab	: "Licentie",
+DlgAboutVersion		: "Versie",
+DlgAboutInfo		: "Voor meer informatie ga naar "
+};
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/no.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/no.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/no.js	(revision 1280)
@@ -0,0 +1,516 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Norwegian language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Skjul verktøylinje",
+ToolbarExpand		: "Vis verktøylinje",
+
+// Toolbar Items and Context Menu
+Save				: "Lagre",
+NewPage				: "Ny Side",
+Preview				: "Forhåndsvis",
+Cut					: "Klipp ut",
+Copy				: "Kopier",
+Paste				: "Lim inn",
+PasteText			: "Lim inn som ren tekst",
+PasteWord			: "Lim inn fra Word",
+Print				: "Skriv ut",
+SelectAll			: "Merk alt",
+RemoveFormat		: "Fjern format",
+InsertLinkLbl		: "Lenke",
+InsertLink			: "Sett inn/Rediger lenke",
+RemoveLink			: "Fjern lenke",
+Anchor				: "Sett inn/Rediger anker",
+AnchorDelete		: "Remove Anchor",	//MISSING
+InsertImageLbl		: "Bilde",
+InsertImage			: "Sett inn/Rediger bilde",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Sett inn/Rediger Flash",
+InsertTableLbl		: "Tabell",
+InsertTable			: "Sett inn/Rediger tabell",
+InsertLineLbl		: "Linje",
+InsertLine			: "Sett inn horisontal linje",
+InsertSpecialCharLbl: "Spesielt tegn",
+InsertSpecialChar	: "Sett inn spesielt tegn",
+InsertSmileyLbl		: "Smil",
+InsertSmiley		: "Sett inn smil",
+About				: "Om FCKeditor",
+Bold				: "Fet",
+Italic				: "Kursiv",
+Underline			: "Understrek",
+StrikeThrough		: "Gjennomstrek",
+Subscript			: "Senket skrift",
+Superscript			: "Hevet skrift",
+LeftJustify			: "Venstrejuster",
+CenterJustify		: "Midtjuster",
+RightJustify		: "Høyrejuster",
+BlockJustify		: "Blokkjuster",
+DecreaseIndent		: "Senk nivå",
+IncreaseIndent		: "Øk nivå",
+Blockquote			: "Blockquote",	//MISSING
+Undo				: "Angre",
+Redo				: "Gjør om",
+NumberedListLbl		: "Numrert liste",
+NumberedList		: "Sett inn/Fjern numrert liste",
+BulletedListLbl		: "Uordnet liste",
+BulletedList		: "Sett inn/Fjern uordnet liste",
+ShowTableBorders	: "Vis tabellrammer",
+ShowDetails			: "Vis detaljer",
+Style				: "Stil",
+FontFormat			: "Format",
+Font				: "Skrift",
+FontSize			: "Størrelse",
+TextColor			: "Tekstfarge",
+BGColor				: "Bakgrunnsfarge",
+Source				: "Kilde",
+Find				: "Finn",
+Replace				: "Erstatt",
+SpellCheck			: "Stavekontroll",
+UniversalKeyboard	: "Universelt tastatur",
+PageBreakLbl		: "Sideskift",
+PageBreak			: "Sett inn sideskift",
+
+Form			: "Skjema",
+Checkbox		: "Sjekkboks",
+RadioButton		: "Radioknapp",
+TextField		: "Tekstfelt",
+Textarea		: "Tekstområde",
+HiddenField		: "Skjult felt",
+Button			: "Knapp",
+SelectionField	: "Dropdown meny",
+ImageButton		: "Bildeknapp",
+
+FitWindow		: "Maksimer størrelsen på redigeringsverktøyet",
+ShowBlocks		: "Show Blocks",	//MISSING
+
+// Context Menu
+EditLink			: "Rediger lenke",
+CellCM				: "Celle",
+RowCM				: "Rader",
+ColumnCM			: "Kolonne",
+InsertRowAfter		: "Insert Row After",	//MISSING
+InsertRowBefore		: "Insert Row Before",	//MISSING
+DeleteRows			: "Slett rader",
+InsertColumnAfter	: "Insert Column After",	//MISSING
+InsertColumnBefore	: "Insert Column Before",	//MISSING
+DeleteColumns		: "Slett kolonner",
+InsertCellAfter		: "Insert Cell After",	//MISSING
+InsertCellBefore	: "Insert Cell Before",	//MISSING
+DeleteCells			: "Slett celler",
+MergeCells			: "Slå sammen celler",
+MergeRight			: "Merge Right",	//MISSING
+MergeDown			: "Merge Down",	//MISSING
+HorizontalSplitCell	: "Split Cell Horizontally",	//MISSING
+VerticalSplitCell	: "Split Cell Vertically",	//MISSING
+TableDelete			: "Slett tabell",
+CellProperties		: "Celleegenskaper",
+TableProperties		: "Tabellegenskaper",
+ImageProperties		: "Bildeegenskaper",
+FlashProperties		: "Flash Egenskaper",
+
+AnchorProp			: "Ankeregenskaper",
+ButtonProp			: "Knappegenskaper",
+CheckboxProp		: "Sjekkboksegenskaper",
+HiddenFieldProp		: "Skjult felt egenskaper",
+RadioButtonProp		: "Radioknappegenskaper",
+ImageButtonProp		: "Bildeknappegenskaper",
+TextFieldProp		: "Tekstfeltegenskaper",
+SelectionFieldProp	: "Dropdown menyegenskaper",
+TextareaProp		: "Tekstfeltegenskaper",
+FormProp			: "Skjemaegenskaper",
+
+FontFormats			: "Normal;Formatert;Adresse;Tittel 1;Tittel 2;Tittel 3;Tittel 4;Tittel 5;Tittel 6;Normal (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "Lager XHTML. Vennligst vent...",
+Done				: "Ferdig",
+PasteWordConfirm	: "Teksten du prøver å lime inn ser ut som om den kommer fra word , du bør rense den før du limer inn , vil du gjøre dette?",
+NotCompatiblePaste	: "Denne kommandoen er tilgjenglig kun for Internet Explorer version 5.5 eller bedre. Vil du fortsette uten å rense?(Du kan lime inn som ren tekst)",
+UnknownToolbarItem	: "Ukjent menyvalg \"%1\"",
+UnknownCommand		: "Ukjent kommando \"%1\"",
+NotImplemented		: "Kommando ikke ennå implimentert",
+UnknownToolbarSet	: "Verktøylinjesett \"%1\" finnes ikke",
+NoActiveX			: "Din nettleser's sikkerhetsinstillinger kan begrense noen av funksjonene i redigeringsverktøyet. Du må aktivere \"Kjør ActiveXkontroller og plugins\". Du kan oppleve feil og advarsler om manglende funksjoner",
+BrowseServerBlocked : "Kunne ikke åpne dialogboksen for filarkiv. Pass på at du har slått av popupstoppere.",
+DialogBlocked		: "Kunne ikke åpne dialogboksen. Pass på at du har slått av popupstoppere.",
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Avbryt",
+DlgBtnClose			: "Lukk",
+DlgBtnBrowseServer	: "Bla igjennom server",
+DlgAdvancedTag		: "Avansert",
+DlgOpOther			: "<Annet>",
+DlgInfoTab			: "Info",
+DlgAlertUrl			: "Vennligst skriv inn URL'en",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<ikke satt>",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Språkretning",
+DlgGenLangDirLtr	: "Venstre til høyre (VTH)",
+DlgGenLangDirRtl	: "Høyre til venstre (HTV)",
+DlgGenLangCode		: "Språk kode",
+DlgGenAccessKey		: "Aksessknapp",
+DlgGenName			: "Navn",
+DlgGenTabIndex		: "Tab Indeks",
+DlgGenLongDescr		: "Utvidet beskrivelse",
+DlgGenClass			: "Stilarkklasser",
+DlgGenTitle			: "Tittel",
+DlgGenContType		: "Type",
+DlgGenLinkCharset	: "Lenket språkkart",
+DlgGenStyle			: "Stil",
+
+// Image Dialog
+DlgImgTitle			: "Bildeegenskaper",
+DlgImgInfoTab		: "Bildeinformasjon",
+DlgImgBtnUpload		: "Send det til serveren",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Last opp",
+DlgImgAlt			: "Alternativ tekst",
+DlgImgWidth			: "Bredde",
+DlgImgHeight		: "Høyde",
+DlgImgLockRatio		: "Lås forhold",
+DlgBtnResetSize		: "Tilbakestill størrelse",
+DlgImgBorder		: "Ramme",
+DlgImgHSpace		: "HMarg",
+DlgImgVSpace		: "VMarg",
+DlgImgAlign			: "Juster",
+DlgImgAlignLeft		: "Venstre",
+DlgImgAlignAbsBottom: "Abs bunn",
+DlgImgAlignAbsMiddle: "Abs midten",
+DlgImgAlignBaseline	: "Bunnlinje",
+DlgImgAlignBottom	: "Bunn",
+DlgImgAlignMiddle	: "Midten",
+DlgImgAlignRight	: "Høyre",
+DlgImgAlignTextTop	: "Tekst topp",
+DlgImgAlignTop		: "Topp",
+DlgImgPreview		: "Forhåndsvis",
+DlgImgAlertUrl		: "Vennligst skriv bildeurlen",
+DlgImgLinkTab		: "Lenke",
+
+// Flash Dialog
+DlgFlashTitle		: "Flash Egenskaper",
+DlgFlashChkPlay		: "Auto Spill",
+DlgFlashChkLoop		: "Loop",
+DlgFlashChkMenu		: "Slå på Flash meny",
+DlgFlashScale		: "Skaler",
+DlgFlashScaleAll	: "Vis alt",
+DlgFlashScaleNoBorder	: "Ingen ramme",
+DlgFlashScaleFit	: "Skaler til å passeExact Fit",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Lenke",
+DlgLnkInfoTab		: "Lenkeinfo",
+DlgLnkTargetTab		: "Mål",
+
+DlgLnkType			: "Lenketype",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Lenke til anker i teksten",
+DlgLnkTypeEMail		: "E-post",
+DlgLnkProto			: "Protokoll",
+DlgLnkProtoOther	: "<annet>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Velg ett anker",
+DlgLnkAnchorByName	: "Anker etter navn",
+DlgLnkAnchorById	: "Element etter ID",
+DlgLnkNoAnchors		: "(Ingen anker i dokumentet)",
+DlgLnkEMail			: "E-postadresse",
+DlgLnkEMailSubject	: "Meldingsemne",
+DlgLnkEMailBody		: "Melding",
+DlgLnkUpload		: "Last opp",
+DlgLnkBtnUpload		: "Send til server",
+
+DlgLnkTarget		: "Mål",
+DlgLnkTargetFrame	: "<ramme>",
+DlgLnkTargetPopup	: "<popup vindu>",
+DlgLnkTargetBlank	: "Nytt vindu (_blank)",
+DlgLnkTargetParent	: "Foreldre vindu (_parent)",
+DlgLnkTargetSelf	: "Samme vindu (_self)",
+DlgLnkTargetTop		: "Hele vindu (_top)",
+DlgLnkTargetFrameName	: "Målramme",
+DlgLnkPopWinName	: "Popup vindus navn",
+DlgLnkPopWinFeat	: "Popup vindus egenskaper",
+DlgLnkPopResize		: "Endre størrelse",
+DlgLnkPopLocation	: "Adresselinje",
+DlgLnkPopMenu		: "Menylinje",
+DlgLnkPopScroll		: "Scrollbar",
+DlgLnkPopStatus		: "Statuslinje",
+DlgLnkPopToolbar	: "Verktøylinje",
+DlgLnkPopFullScrn	: "Full skjerm (IE)",
+DlgLnkPopDependent	: "Avhenging (Netscape)",
+DlgLnkPopWidth		: "Bredde",
+DlgLnkPopHeight		: "Høyde",
+DlgLnkPopLeft		: "Venstre posisjon",
+DlgLnkPopTop		: "Topp posisjon",
+
+DlnLnkMsgNoUrl		: "Vennligst skriv inn lenkens url",
+DlnLnkMsgNoEMail	: "Vennligst skriv inn e-postadressen",
+DlnLnkMsgNoAnchor	: "Vennligst velg ett anker",
+DlnLnkMsgInvPopName	: "Popup vinduets navn må begynne med en bokstav, og kan ikke inneholde mellomrom",
+
+// Color Dialog
+DlgColorTitle		: "Velg farge",
+DlgColorBtnClear	: "Tøm",
+DlgColorHighlight	: "Marker",
+DlgColorSelected	: "Velg",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Sett inn smil",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Velg spesielt tegn",
+
+// Table Dialog
+DlgTableTitle		: "Tabellegenskaper",
+DlgTableRows		: "Rader",
+DlgTableColumns		: "Kolonner",
+DlgTableBorder		: "Rammestørrelse",
+DlgTableAlign		: "Justering",
+DlgTableAlignNotSet	: "<Ikke satt>",
+DlgTableAlignLeft	: "Venstre",
+DlgTableAlignCenter	: "Midtjuster",
+DlgTableAlignRight	: "Høyre",
+DlgTableWidth		: "Bredde",
+DlgTableWidthPx		: "piksler",
+DlgTableWidthPc		: "prosent",
+DlgTableHeight		: "Høyde",
+DlgTableCellSpace	: "Celle marg",
+DlgTableCellPad		: "Celle polstring",
+DlgTableCaption		: "Tittel",
+DlgTableSummary		: "Sammendrag",
+
+// Table Cell Dialog
+DlgCellTitle		: "Celleegenskaper",
+DlgCellWidth		: "Bredde",
+DlgCellWidthPx		: "piksler",
+DlgCellWidthPc		: "prosent",
+DlgCellHeight		: "Høyde",
+DlgCellWordWrap		: "Tekstbrytning",
+DlgCellWordWrapNotSet	: "<Ikke satt>",
+DlgCellWordWrapYes	: "Ja",
+DlgCellWordWrapNo	: "Nei",
+DlgCellHorAlign		: "Horisontal justering",
+DlgCellHorAlignNotSet	: "<Ikke satt>",
+DlgCellHorAlignLeft	: "Venstre",
+DlgCellHorAlignCenter	: "Midtjuster",
+DlgCellHorAlignRight: "Høyre",
+DlgCellVerAlign		: "Vertikal justering",
+DlgCellVerAlignNotSet	: "<Ikke satt>",
+DlgCellVerAlignTop	: "Topp",
+DlgCellVerAlignMiddle	: "Midten",
+DlgCellVerAlignBottom	: "Bunn",
+DlgCellVerAlignBaseline	: "Bunnlinje",
+DlgCellRowSpan		: "Radspenn",
+DlgCellCollSpan		: "Kolonnespenn",
+DlgCellBackColor	: "Bakgrunnsfarge",
+DlgCellBorderColor	: "Rammefarge",
+DlgCellBtnSelect	: "Velg...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Find and Replace",	//MISSING
+
+// Find Dialog
+DlgFindTitle		: "Finn",
+DlgFindFindBtn		: "Finn",
+DlgFindNotFoundMsg	: "Den spesifiserte teksten ble ikke funnet.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Erstatt",
+DlgReplaceFindLbl		: "Finn hva:",
+DlgReplaceReplaceLbl	: "Erstatt med:",
+DlgReplaceCaseChk		: "Riktig case",
+DlgReplaceReplaceBtn	: "Erstatt",
+DlgReplaceReplAllBtn	: "Erstatt alle",
+DlgReplaceWordChk		: "Finn hele ordet",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "Din nettlesers sikkerhetsinstillinger tillater ikke automatisk klipping av tekst. Vennligst brukt snareveien (Ctrl+X).",
+PasteErrorCopy	: "Din nettlesers sikkerhetsinstillinger tillater ikke automatisk kopiering av tekst. Vennligst brukt snareveien (Ctrl+C).",
+
+PasteAsText		: "Lim inn som ren tekst",
+PasteFromWord	: "Lim inn fra word",
+
+DlgPasteMsg2	: "Vennligst lim inn i den følgende boksen med tastaturet (<STRONG>Ctrl+V</STRONG>) og trykk <STRONG>OK</STRONG>.",
+DlgPasteSec		: "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.",	//MISSING
+DlgPasteIgnoreFont		: "Fjern skrifttyper",
+DlgPasteRemoveStyles	: "Fjern stildefinisjoner",
+DlgPasteCleanBox		: "Tøm boksen",
+
+// Color Picker
+ColorAutomatic	: "Automatisk",
+ColorMoreColors	: "Flere farger...",
+
+// Document Properties
+DocProps		: "Dokumentegenskaper",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Ankeregenskaper",
+DlgAnchorName		: "Ankernavn",
+DlgAnchorErrorName	: "Vennligst skriv inn ankernavnet",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Ikke i ordboken",
+DlgSpellChangeTo		: "Endre til",
+DlgSpellBtnIgnore		: "Ignorer",
+DlgSpellBtnIgnoreAll	: "Ignorer alle",
+DlgSpellBtnReplace		: "Erstatt",
+DlgSpellBtnReplaceAll	: "Erstatt alle",
+DlgSpellBtnUndo			: "Angre",
+DlgSpellNoSuggestions	: "- ingen forslag -",
+DlgSpellProgress		: "Stavekontroll pågår...",
+DlgSpellNoMispell		: "Stavekontroll fullført: ingen feilstavinger funnet",
+DlgSpellNoChanges		: "Stavekontroll fullført: ingen ord endret",
+DlgSpellOneChange		: "Stavekontroll fullført: Ett ord endret",
+DlgSpellManyChanges		: "Stavekontroll fullført: %1 ord endret",
+
+IeSpellDownload			: "Stavekontroll ikke installert, vil du laste den ned nå?",
+
+// Button Dialog
+DlgButtonText		: "Tekst",
+DlgButtonType		: "Type",
+DlgButtonTypeBtn	: "Knapp",
+DlgButtonTypeSbm	: "Send",
+DlgButtonTypeRst	: "Nullstill",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Navn",
+DlgCheckboxValue	: "Verdi",
+DlgCheckboxSelected	: "Valgt",
+
+// Form Dialog
+DlgFormName		: "Navn",
+DlgFormAction	: "Handling",
+DlgFormMethod	: "Metode",
+
+// Select Field Dialog
+DlgSelectName		: "Navn",
+DlgSelectValue		: "Verdi",
+DlgSelectSize		: "Størrelse",
+DlgSelectLines		: "Linjer",
+DlgSelectChkMulti	: "Tillat flervalg",
+DlgSelectOpAvail	: "Tilgjenglige alternativer",
+DlgSelectOpText		: "Tekst",
+DlgSelectOpValue	: "Verdi",
+DlgSelectBtnAdd		: "Legg til",
+DlgSelectBtnModify	: "Endre",
+DlgSelectBtnUp		: "Opp",
+DlgSelectBtnDown	: "Ned",
+DlgSelectBtnSetValue : "Sett som valgt",
+DlgSelectBtnDelete	: "Slett",
+
+// Textarea Dialog
+DlgTextareaName	: "Navn",
+DlgTextareaCols	: "Kolonner",
+DlgTextareaRows	: "Rader",
+
+// Text Field Dialog
+DlgTextName			: "Navn",
+DlgTextValue		: "verdi",
+DlgTextCharWidth	: "Tegnbredde",
+DlgTextMaxChars		: "Maks antall tegn",
+DlgTextType			: "Type",
+DlgTextTypeText		: "Tekst",
+DlgTextTypePass		: "Passord",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Navn",
+DlgHiddenValue	: "Verdi",
+
+// Bulleted List Dialog
+BulletedListProp	: "Uordnet listeegenskaper",
+NumberedListProp	: "Ordnet listeegenskaper",
+DlgLstStart			: "Start",
+DlgLstType			: "Type",
+DlgLstTypeCircle	: "Sirkel",
+DlgLstTypeDisc		: "Hel sirkel",
+DlgLstTypeSquare	: "Firkant",
+DlgLstTypeNumbers	: "Numre(1, 2, 3)",
+DlgLstTypeLCase		: "Små bokstaver (a, b, c)",
+DlgLstTypeUCase		: "Store bokstaver(A, B, C)",
+DlgLstTypeSRoman	: "Små romerske tall(i, ii, iii)",
+DlgLstTypeLRoman	: "Store romerske tall(I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Generalt",
+DlgDocBackTab		: "Bakgrunn",
+DlgDocColorsTab		: "Farger og marginer",
+DlgDocMetaTab		: "Meta Data",
+
+DlgDocPageTitle		: "Sidetittel",
+DlgDocLangDir		: "Språkretning",
+DlgDocLangDirLTR	: "Venstre til høyre (LTR)",
+DlgDocLangDirRTL	: "Høyre til venstre (RTL)",
+DlgDocLangCode		: "Språkkode",
+DlgDocCharSet		: "Tegnsett",
+DlgDocCharSetCE		: "Sentraleuropeisk",
+DlgDocCharSetCT		: "Tradisonell kinesisk(Big5)",
+DlgDocCharSetCR		: "Cyrillic",
+DlgDocCharSetGR		: "Gresk",
+DlgDocCharSetJP		: "Japansk",
+DlgDocCharSetKR		: "Koreansk",
+DlgDocCharSetTR		: "Tyrkisk",
+DlgDocCharSetUN		: "Unikode (UTF-8)",
+DlgDocCharSetWE		: "Vesteuropeisk",
+DlgDocCharSetOther	: "Annet tegnsett",
+
+DlgDocDocType		: "Dokumenttype header",
+DlgDocDocTypeOther	: "Annet dokumenttype header",
+DlgDocIncXHTML		: "Inkulder XHTML deklarasjon",
+DlgDocBgColor		: "Bakgrunnsfarge",
+DlgDocBgImage		: "Bakgrunnsbilde url",
+DlgDocBgNoScroll	: "Ikke scroll bakgrunnsbilde",
+DlgDocCText			: "Tekst",
+DlgDocCLink			: "Link",
+DlgDocCVisited		: "Besøkt lenke",
+DlgDocCActive		: "Aktiv lenke",
+DlgDocMargins		: "Sidemargin",
+DlgDocMaTop			: "Topp",
+DlgDocMaLeft		: "Venstre",
+DlgDocMaRight		: "Høyre",
+DlgDocMaBottom		: "Bunn",
+DlgDocMeIndex		: "Dokument nøkkelord (kommaseparert)",
+DlgDocMeDescr		: "Dokumentbeskrivelse",
+DlgDocMeAuthor		: "Forfatter",
+DlgDocMeCopy		: "Kopirett",
+DlgDocPreview		: "Forhåndsvising",
+
+// Templates Dialog
+Templates			: "Maler",
+DlgTemplatesTitle	: "Innholdsmaler",
+DlgTemplatesSelMsg	: "Velg malen du vil åpne<br>(innholdet du har skrevet blir tapt!):",
+DlgTemplatesLoading	: "Laster malliste. Vennligst vent...",
+DlgTemplatesNoTpl	: "(Ingen maler definert)",
+DlgTemplatesReplace	: "Erstatt faktisk innold",
+
+// About Dialog
+DlgAboutAboutTab	: "Om",
+DlgAboutBrowserInfoTab	: "Nettleserinfo",
+DlgAboutLicenseTab	: "Lisens",
+DlgAboutVersion		: "versjon",
+DlgAboutInfo		: "For further information go to"	//MISSING
+};
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/pl.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/pl.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/pl.js	(revision 1280)
@@ -0,0 +1,516 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Polish language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Zwiń pasek narzędzi",
+ToolbarExpand		: "Rozwiń pasek narzędzi",
+
+// Toolbar Items and Context Menu
+Save				: "Zapisz",
+NewPage				: "Nowa strona",
+Preview				: "Podgląd",
+Cut					: "Wytnij",
+Copy				: "Kopiuj",
+Paste				: "Wklej",
+PasteText			: "Wklej jako czysty tekst",
+PasteWord			: "Wklej z Worda",
+Print				: "Drukuj",
+SelectAll			: "Zaznacz wszystko",
+RemoveFormat		: "Usuń formatowanie",
+InsertLinkLbl		: "Hiperłącze",
+InsertLink			: "Wstaw/edytuj hiperłącze",
+RemoveLink			: "Usuń hiperłącze",
+Anchor				: "Wstaw/edytuj kotwicę",
+AnchorDelete		: "Remove Anchor",	//MISSING
+InsertImageLbl		: "Obrazek",
+InsertImage			: "Wstaw/edytuj obrazek",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Dodaj/Edytuj element Flash",
+InsertTableLbl		: "Tabela",
+InsertTable			: "Wstaw/edytuj tabelę",
+InsertLineLbl		: "Linia pozioma",
+InsertLine			: "Wstaw poziomą linię",
+InsertSpecialCharLbl: "Znak specjalny",
+InsertSpecialChar	: "Wstaw znak specjalny",
+InsertSmileyLbl		: "Emotikona",
+InsertSmiley		: "Wstaw emotikonę",
+About				: "O programie FCKeditor",
+Bold				: "Pogrubienie",
+Italic				: "Kursywa",
+Underline			: "Podkreślenie",
+StrikeThrough		: "Przekreślenie",
+Subscript			: "Indeks dolny",
+Superscript			: "Indeks górny",
+LeftJustify			: "Wyrównaj do lewej",
+CenterJustify		: "Wyrównaj do środka",
+RightJustify		: "Wyrównaj do prawej",
+BlockJustify		: "Wyrównaj do lewej i prawej",
+DecreaseIndent		: "Zmniejsz wcięcie",
+IncreaseIndent		: "Zwiększ wcięcie",
+Blockquote			: "Blockquote",	//MISSING
+Undo				: "Cofnij",
+Redo				: "Ponów",
+NumberedListLbl		: "Lista numerowana",
+NumberedList		: "Wstaw/usuń numerowanie listy",
+BulletedListLbl		: "Lista wypunktowana",
+BulletedList		: "Wstaw/usuń wypunktowanie listy",
+ShowTableBorders	: "Pokazuj ramkę tabeli",
+ShowDetails			: "Pokaż szczegóły",
+Style				: "Styl",
+FontFormat			: "Format",
+Font				: "Czcionka",
+FontSize			: "Rozmiar",
+TextColor			: "Kolor tekstu",
+BGColor				: "Kolor tła",
+Source				: "Źródło dokumentu",
+Find				: "Znajdź",
+Replace				: "Zamień",
+SpellCheck			: "Sprawdź pisownię",
+UniversalKeyboard	: "Klawiatura Uniwersalna",
+PageBreakLbl		: "Odstęp",
+PageBreak			: "Wstaw odstęp",
+
+Form			: "Formularz",
+Checkbox		: "Checkbox",
+RadioButton		: "Pole wyboru",
+TextField		: "Pole tekstowe",
+Textarea		: "Obszar tekstowy",
+HiddenField		: "Pole ukryte",
+Button			: "Przycisk",
+SelectionField	: "Lista wyboru",
+ImageButton		: "Przycisk obrazek",
+
+FitWindow		: "Maksymalizuj rozmiar edytora",
+ShowBlocks		: "Show Blocks",	//MISSING
+
+// Context Menu
+EditLink			: "Edytuj hiperłącze",
+CellCM				: "Komórka",
+RowCM				: "Wiersz",
+ColumnCM			: "Kolumna",
+InsertRowAfter		: "Insert Row After",	//MISSING
+InsertRowBefore		: "Insert Row Before",	//MISSING
+DeleteRows			: "Usuń wiersze",
+InsertColumnAfter	: "Insert Column After",	//MISSING
+InsertColumnBefore	: "Insert Column Before",	//MISSING
+DeleteColumns		: "Usuń kolumny",
+InsertCellAfter		: "Insert Cell After",	//MISSING
+InsertCellBefore	: "Insert Cell Before",	//MISSING
+DeleteCells			: "Usuń komórki",
+MergeCells			: "Połącz komórki",
+MergeRight			: "Merge Right",	//MISSING
+MergeDown			: "Merge Down",	//MISSING
+HorizontalSplitCell	: "Split Cell Horizontally",	//MISSING
+VerticalSplitCell	: "Split Cell Vertically",	//MISSING
+TableDelete			: "Usuń tabelę",
+CellProperties		: "Właściwości komórki",
+TableProperties		: "Właściwości tabeli",
+ImageProperties		: "Właściwości obrazka",
+FlashProperties		: "Właściwości elementu Flash",
+
+AnchorProp			: "Właściwości kotwicy",
+ButtonProp			: "Właściwości przycisku",
+CheckboxProp		: "Checkbox - właściwości",
+HiddenFieldProp		: "Właściwości pola ukrytego",
+RadioButtonProp		: "Właściwości pola wyboru",
+ImageButtonProp		: "Właściwości przycisku obrazka",
+TextFieldProp		: "Właściwości pola tekstowego",
+SelectionFieldProp	: "Właściwości listy wyboru",
+TextareaProp		: "Właściwości obszaru tekstowego",
+FormProp			: "Właściwości formularza",
+
+FontFormats			: "Normalny;Tekst sformatowany;Adres;Nagłówek 1;Nagłówek 2;Nagłówek 3;Nagłówek 4;Nagłówek 5;Nagłówek 6",
+
+// Alerts and Messages
+ProcessingXHTML		: "Przetwarzanie XHTML. Proszę czekać...",
+Done				: "Gotowe",
+PasteWordConfirm	: "Tekst, który chcesz wkleić, prawdopodobnie pochodzi z programu Word. Czy chcesz go wyczyścic przed wklejeniem?",
+NotCompatiblePaste	: "Ta funkcja jest dostępna w programie Internet Explorer w wersji 5.5 lub wyższej. Czy chcesz wkleić tekst bez czyszczenia?",
+UnknownToolbarItem	: "Nieznany element paska narzędzi \"%1\"",
+UnknownCommand		: "Nieznana komenda \"%1\"",
+NotImplemented		: "Komenda niezaimplementowana",
+UnknownToolbarSet	: "Pasek narzędzi \"%1\" nie istnieje",
+NoActiveX			: "Ustawienia zabezpieczeń twojej przeglądarki mogą ograniczyć niektóre funkcje edytora. Musisz włączyć opcję \"Uruchamianie formantów Activex i dodatków plugin\". W przeciwnym wypadku mogą pojawiać się błędy.",
+BrowseServerBlocked : "Okno menadżera plików nie może zostać otwarte. Upewnij się, że wszystkie blokady popup są wyłączone.",
+DialogBlocked		: "Nie można otworzyć okna dialogowego. Upewnij się, że wszystkie blokady popup są wyłączone.",
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Anuluj",
+DlgBtnClose			: "Zamknij",
+DlgBtnBrowseServer	: "Przeglądaj",
+DlgAdvancedTag		: "Zaawansowane",
+DlgOpOther			: "<Inny>",
+DlgInfoTab			: "Informacje",
+DlgAlertUrl			: "Proszę podać URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<nieustawione>",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Kierunek tekstu",
+DlgGenLangDirLtr	: "Od lewej do prawej (LTR)",
+DlgGenLangDirRtl	: "Od prawej do lewej (RTL)",
+DlgGenLangCode		: "Kod języka",
+DlgGenAccessKey		: "Klawisz dostępu",
+DlgGenName			: "Nazwa",
+DlgGenTabIndex		: "Indeks tabeli",
+DlgGenLongDescr		: "Long Description URL",
+DlgGenClass			: "Stylesheet Classes",
+DlgGenTitle			: "Advisory Title",
+DlgGenContType		: "Advisory Content Type",
+DlgGenLinkCharset	: "Linked Resource Charset",
+DlgGenStyle			: "Styl",
+
+// Image Dialog
+DlgImgTitle			: "Właściwości obrazka",
+DlgImgInfoTab		: "Informacje o obrazku",
+DlgImgBtnUpload		: "Syślij",
+DlgImgURL			: "Adres URL",
+DlgImgUpload		: "Wyślij",
+DlgImgAlt			: "Tekst zastępczy",
+DlgImgWidth			: "Szerokość",
+DlgImgHeight		: "Wysokość",
+DlgImgLockRatio		: "Zablokuj proporcje",
+DlgBtnResetSize		: "Przywróć rozmiar",
+DlgImgBorder		: "Ramka",
+DlgImgHSpace		: "Odstęp poziomy",
+DlgImgVSpace		: "Odstęp pionowy",
+DlgImgAlign			: "Wyrównaj",
+DlgImgAlignLeft		: "Do lewej",
+DlgImgAlignAbsBottom: "Do dołu",
+DlgImgAlignAbsMiddle: "Do środka w pionie",
+DlgImgAlignBaseline	: "Do linii bazowej",
+DlgImgAlignBottom	: "Do dołu",
+DlgImgAlignMiddle	: "Do środka",
+DlgImgAlignRight	: "Do prawej",
+DlgImgAlignTextTop	: "Do góry tekstu",
+DlgImgAlignTop		: "Do góry",
+DlgImgPreview		: "Podgląd",
+DlgImgAlertUrl		: "Podaj adres obrazka.",
+DlgImgLinkTab		: "Link",
+
+// Flash Dialog
+DlgFlashTitle		: "Właściwości elementu Flash",
+DlgFlashChkPlay		: "Auto Odtwarzanie",
+DlgFlashChkLoop		: "Pętla",
+DlgFlashChkMenu		: "Włącz menu",
+DlgFlashScale		: "Skaluj",
+DlgFlashScaleAll	: "Pokaż wszystko",
+DlgFlashScaleNoBorder	: "Bez Ramki",
+DlgFlashScaleFit	: "Dokładne dopasowanie",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Hiperłącze",
+DlgLnkInfoTab		: "Informacje ",
+DlgLnkTargetTab		: "Cel",
+
+DlgLnkType			: "Typ hiperłącza",
+DlgLnkTypeURL		: "Adres URL",
+DlgLnkTypeAnchor	: "Odnośnik wewnątrz strony",
+DlgLnkTypeEMail		: "Adres e-mail",
+DlgLnkProto			: "Protokół",
+DlgLnkProtoOther	: "<inny>",
+DlgLnkURL			: "Adres URL",
+DlgLnkAnchorSel		: "Wybierz etykietę",
+DlgLnkAnchorByName	: "Wg etykiety",
+DlgLnkAnchorById	: "Wg identyfikatora elementu",
+DlgLnkNoAnchors		: "(W dokumencie nie zdefiniowano żadnych etykiet)",
+DlgLnkEMail			: "Adres e-mail",
+DlgLnkEMailSubject	: "Temat",
+DlgLnkEMailBody		: "Treść",
+DlgLnkUpload		: "Upload",
+DlgLnkBtnUpload		: "Wyślij",
+
+DlgLnkTarget		: "Cel",
+DlgLnkTargetFrame	: "<ramka>",
+DlgLnkTargetPopup	: "<wyskakujące okno>",
+DlgLnkTargetBlank	: "Nowe okno (_blank)",
+DlgLnkTargetParent	: "Okno nadrzędne (_parent)",
+DlgLnkTargetSelf	: "To samo okno (_self)",
+DlgLnkTargetTop		: "Okno najwyższe w hierarchii (_top)",
+DlgLnkTargetFrameName	: "Nazwa Ramki Docelowej",
+DlgLnkPopWinName	: "Nazwa wyskakującego okna",
+DlgLnkPopWinFeat	: "Właściwości wyskakującego okna",
+DlgLnkPopResize		: "Możliwa zmiana rozmiaru",
+DlgLnkPopLocation	: "Pasek adresu",
+DlgLnkPopMenu		: "Pasek menu",
+DlgLnkPopScroll		: "Paski przewijania",
+DlgLnkPopStatus		: "Pasek statusu",
+DlgLnkPopToolbar	: "Pasek narzędzi",
+DlgLnkPopFullScrn	: "Pełny ekran (IE)",
+DlgLnkPopDependent	: "Okno zależne (Netscape)",
+DlgLnkPopWidth		: "Szerokość",
+DlgLnkPopHeight		: "Wysokość",
+DlgLnkPopLeft		: "Pozycja w poziomie",
+DlgLnkPopTop		: "Pozycja w pionie",
+
+DlnLnkMsgNoUrl		: "Podaj adres URL",
+DlnLnkMsgNoEMail	: "Podaj adres e-mail",
+DlnLnkMsgNoAnchor	: "Wybierz etykietę",
+DlnLnkMsgInvPopName	: "The popup name must begin with an alphabetic character and must not contain spaces",	//MISSING
+
+// Color Dialog
+DlgColorTitle		: "Wybierz kolor",
+DlgColorBtnClear	: "Wyczyść",
+DlgColorHighlight	: "Podgląd",
+DlgColorSelected	: "Wybrane",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Wstaw emotikonę",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Wybierz znak specjalny",
+
+// Table Dialog
+DlgTableTitle		: "Właściwości tabeli",
+DlgTableRows		: "Liczba wierszy",
+DlgTableColumns		: "Liczba kolumn",
+DlgTableBorder		: "Grubość ramki",
+DlgTableAlign		: "Wyrównanie",
+DlgTableAlignNotSet	: "<brak ustawień>",
+DlgTableAlignLeft	: "Do lewej",
+DlgTableAlignCenter	: "Do środka",
+DlgTableAlignRight	: "Do prawej",
+DlgTableWidth		: "Szerokość",
+DlgTableWidthPx		: "piksele",
+DlgTableWidthPc		: "%",
+DlgTableHeight		: "Wysokość",
+DlgTableCellSpace	: "Odstęp pomiędzy komórkami",
+DlgTableCellPad		: "Margines wewnętrzny komórek",
+DlgTableCaption		: "Tytuł",
+DlgTableSummary		: "Podsumowanie",
+
+// Table Cell Dialog
+DlgCellTitle		: "Właściwości komórki",
+DlgCellWidth		: "Szerokość",
+DlgCellWidthPx		: "piksele",
+DlgCellWidthPc		: "%",
+DlgCellHeight		: "Wysokość",
+DlgCellWordWrap		: "Zawijanie tekstu",
+DlgCellWordWrapNotSet	: "<brak ustawień>",
+DlgCellWordWrapYes	: "Tak",
+DlgCellWordWrapNo	: "Nie",
+DlgCellHorAlign		: "Wyrównanie poziome",
+DlgCellHorAlignNotSet	: "<brak ustawień>",
+DlgCellHorAlignLeft	: "Do lewej",
+DlgCellHorAlignCenter	: "Do środka",
+DlgCellHorAlignRight: "Do prawej",
+DlgCellVerAlign		: "Wyrównanie pionowe",
+DlgCellVerAlignNotSet	: "<brak ustawień>",
+DlgCellVerAlignTop	: "Do góry",
+DlgCellVerAlignMiddle	: "Do środka",
+DlgCellVerAlignBottom	: "Do dołu",
+DlgCellVerAlignBaseline	: "Do linii bazowej",
+DlgCellRowSpan		: "Zajętość wierszy",
+DlgCellCollSpan		: "Zajętość kolumn",
+DlgCellBackColor	: "Kolor tła",
+DlgCellBorderColor	: "Kolor ramki",
+DlgCellBtnSelect	: "Wybierz...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Find and Replace",	//MISSING
+
+// Find Dialog
+DlgFindTitle		: "Znajdź",
+DlgFindFindBtn		: "Znajdź",
+DlgFindNotFoundMsg	: "Nie znaleziono szukanego hasła.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Zamień",
+DlgReplaceFindLbl		: "Znajdź:",
+DlgReplaceReplaceLbl	: "Zastąp przez:",
+DlgReplaceCaseChk		: "Uwzględnij wielkość liter",
+DlgReplaceReplaceBtn	: "Zastąp",
+DlgReplaceReplAllBtn	: "Zastąp wszystko",
+DlgReplaceWordChk		: "Całe słowa",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "Ustawienia bezpieczeństwa Twojej przeglądarki nie pozwalają na automatyczne wycinanie tekstu. Użyj skrótu klawiszowego Ctrl+X.",
+PasteErrorCopy	: "Ustawienia bezpieczeństwa Twojej przeglądarki nie pozwalają na automatyczne kopiowanie tekstu. Użyj skrótu klawiszowego Ctrl+C.",
+
+PasteAsText		: "Wklej jako czysty tekst",
+PasteFromWord	: "Wklej z Worda",
+
+DlgPasteMsg2	: "Proszę wkleić w poniższym polu używając klawiaturowego skrótu (<STRONG>Ctrl+V</STRONG>) i kliknąć <STRONG>OK</STRONG>.",
+DlgPasteSec		: "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.",	//MISSING
+DlgPasteIgnoreFont		: "Ignoruj definicje 'Font Face'",
+DlgPasteRemoveStyles	: "Usuń definicje Stylów",
+DlgPasteCleanBox		: "Wyczyść",
+
+// Color Picker
+ColorAutomatic	: "Automatycznie",
+ColorMoreColors	: "Więcej kolorów...",
+
+// Document Properties
+DocProps		: "Właściwości dokumentu",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Właściwości kotwicy",
+DlgAnchorName		: "Nazwa kotwicy",
+DlgAnchorErrorName	: "Wpisz nazwę kotwicy",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Słowa nie ma w słowniku",
+DlgSpellChangeTo		: "Zmień na",
+DlgSpellBtnIgnore		: "Ignoruj",
+DlgSpellBtnIgnoreAll	: "Ignoruj wszystkie",
+DlgSpellBtnReplace		: "Zmień",
+DlgSpellBtnReplaceAll	: "Zmień wszystkie",
+DlgSpellBtnUndo			: "Undo",
+DlgSpellNoSuggestions	: "- Brak sugestii -",
+DlgSpellProgress		: "Trwa sprawdzanie ...",
+DlgSpellNoMispell		: "Sprawdzanie zakończone: nie znaleziono błędów",
+DlgSpellNoChanges		: "Sprawdzanie zakończone: nie zmieniono żadnego słowa",
+DlgSpellOneChange		: "Sprawdzanie zakończone: zmieniono jedno słowo",
+DlgSpellManyChanges		: "Sprawdzanie zakończone: zmieniono %l słów",
+
+IeSpellDownload			: "Słownik nie jest zainstalowany. Chcesz go ściągnąć?",
+
+// Button Dialog
+DlgButtonText		: "Tekst (Wartość)",
+DlgButtonType		: "Typ",
+DlgButtonTypeBtn	: "Button",	//MISSING
+DlgButtonTypeSbm	: "Submit",	//MISSING
+DlgButtonTypeRst	: "Reset",	//MISSING
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Nazwa",
+DlgCheckboxValue	: "Wartość",
+DlgCheckboxSelected	: "Zaznaczony",
+
+// Form Dialog
+DlgFormName		: "Nazwa",
+DlgFormAction	: "Akcja",
+DlgFormMethod	: "Metoda",
+
+// Select Field Dialog
+DlgSelectName		: "Nazwa",
+DlgSelectValue		: "Wartość",
+DlgSelectSize		: "Rozmiar",
+DlgSelectLines		: "linii",
+DlgSelectChkMulti	: "Wielokrotny wybór",
+DlgSelectOpAvail	: "Dostępne opcje",
+DlgSelectOpText		: "Tekst",
+DlgSelectOpValue	: "Wartość",
+DlgSelectBtnAdd		: "Dodaj",
+DlgSelectBtnModify	: "Zmień",
+DlgSelectBtnUp		: "Do góry",
+DlgSelectBtnDown	: "Do dołu",
+DlgSelectBtnSetValue : "Ustaw wartość zaznaczoną",
+DlgSelectBtnDelete	: "Usuń",
+
+// Textarea Dialog
+DlgTextareaName	: "Nazwa",
+DlgTextareaCols	: "Kolumnu",
+DlgTextareaRows	: "Wiersze",
+
+// Text Field Dialog
+DlgTextName			: "Nazwa",
+DlgTextValue		: "Wartość",
+DlgTextCharWidth	: "Szerokość w znakach",
+DlgTextMaxChars		: "Max. szerokość",
+DlgTextType			: "Typ",
+DlgTextTypeText		: "Tekst",
+DlgTextTypePass		: "Hasło",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Nazwa",
+DlgHiddenValue	: "Wartość",
+
+// Bulleted List Dialog
+BulletedListProp	: "Właściwości listy punktowanej",
+NumberedListProp	: "Właściwości listy numerowanej",
+DlgLstStart			: "Start",	//MISSING
+DlgLstType			: "Typ",
+DlgLstTypeCircle	: "Koło",
+DlgLstTypeDisc		: "Dysk",
+DlgLstTypeSquare	: "Kwadrat",
+DlgLstTypeNumbers	: "Cyfry (1, 2, 3)",
+DlgLstTypeLCase		: "Małe litery (a, b, c)",
+DlgLstTypeUCase		: "Duże litery (A, B, C)",
+DlgLstTypeSRoman	: "Numeracja rzymska (i, ii, iii)",
+DlgLstTypeLRoman	: "Numeracja rzymska (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Ogólne",
+DlgDocBackTab		: "Tło",
+DlgDocColorsTab		: "Kolory i marginesy",
+DlgDocMetaTab		: "Meta Dane",
+
+DlgDocPageTitle		: "Tytuł strony",
+DlgDocLangDir		: "Kierunek pisania",
+DlgDocLangDirLTR	: "Od lewej do prawej (LTR)",
+DlgDocLangDirRTL	: "Od prawej do lewej (RTL)",
+DlgDocLangCode		: "Kod języka",
+DlgDocCharSet		: "Kodowanie znaków",
+DlgDocCharSetCE		: "Central European",	//MISSING
+DlgDocCharSetCT		: "Chinese Traditional (Big5)",	//MISSING
+DlgDocCharSetCR		: "Cyrillic",	//MISSING
+DlgDocCharSetGR		: "Greek",	//MISSING
+DlgDocCharSetJP		: "Japanese",	//MISSING
+DlgDocCharSetKR		: "Korean",	//MISSING
+DlgDocCharSetTR		: "Turkish",	//MISSING
+DlgDocCharSetUN		: "Unicode (UTF-8)",	//MISSING
+DlgDocCharSetWE		: "Western European",	//MISSING
+DlgDocCharSetOther	: "Inne kodowanie znaków",
+
+DlgDocDocType		: "Nagłowek typu dokumentu",
+DlgDocDocTypeOther	: "Inny typ dokumentu",
+DlgDocIncXHTML		: "Dołącz deklarację XHTML",
+DlgDocBgColor		: "Kolor tła",
+DlgDocBgImage		: "Obrazek tła",
+DlgDocBgNoScroll	: "Tło nieruchome",
+DlgDocCText			: "Tekst",
+DlgDocCLink			: "Hiperłącze",
+DlgDocCVisited		: "Odwiedzane hiperłącze",
+DlgDocCActive		: "Aktywne hiperłącze",
+DlgDocMargins		: "Marginesy strony",
+DlgDocMaTop			: "Górny",
+DlgDocMaLeft		: "Lewy",
+DlgDocMaRight		: "Prawy",
+DlgDocMaBottom		: "Dolny",
+DlgDocMeIndex		: "Słowa kluczowe (oddzielone przecinkami)",
+DlgDocMeDescr		: "Opis dokumentu",
+DlgDocMeAuthor		: "Autor",
+DlgDocMeCopy		: "Copyright",
+DlgDocPreview		: "Podgląd",
+
+// Templates Dialog
+Templates			: "Sablony",
+DlgTemplatesTitle	: "Szablony zawartości",
+DlgTemplatesSelMsg	: "Wybierz szablon do otwarcia w edytorze<br>(obecna zawartość okna edytora zostanie utracona):",
+DlgTemplatesLoading	: "Ładowanie listy szablonów. Proszę czekać...",
+DlgTemplatesNoTpl	: "(Brak zdefiniowanych szablonów)",
+DlgTemplatesReplace	: "Replace actual contents",	//MISSING
+
+// About Dialog
+DlgAboutAboutTab	: "O ...",
+DlgAboutBrowserInfoTab	: "O przeglądarce",
+DlgAboutLicenseTab	: "Licencja",
+DlgAboutVersion		: "wersja",
+DlgAboutInfo		: "Więcej informacji uzyskasz pod adresem"
+};
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/pt-br.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/pt-br.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/pt-br.js	(revision 1280)
@@ -0,0 +1,516 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Brazilian Portuguese language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Ocultar Barra de Ferramentas",
+ToolbarExpand		: "Exibir Barra de Ferramentas",
+
+// Toolbar Items and Context Menu
+Save				: "Salvar",
+NewPage				: "Novo",
+Preview				: "Visualizar",
+Cut					: "Recortar",
+Copy				: "Copiar",
+Paste				: "Colar",
+PasteText			: "Colar como Texto sem Formatação",
+PasteWord			: "Colar do Word",
+Print				: "Imprimir",
+SelectAll			: "Selecionar Tudo",
+RemoveFormat		: "Remover Formatação",
+InsertLinkLbl		: "Hiperlink",
+InsertLink			: "Inserir/Editar Hiperlink",
+RemoveLink			: "Remover Hiperlink",
+Anchor				: "Inserir/Editar Âncora",
+AnchorDelete		: "Remove Anchor",	//MISSING
+InsertImageLbl		: "Figura",
+InsertImage			: "Inserir/Editar Figura",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Insere/Edita Flash",
+InsertTableLbl		: "Tabela",
+InsertTable			: "Inserir/Editar Tabela",
+InsertLineLbl		: "Linha",
+InsertLine			: "Inserir Linha Horizontal",
+InsertSpecialCharLbl: "Caracteres Especiais",
+InsertSpecialChar	: "Inserir Caractere Especial",
+InsertSmileyLbl		: "Emoticon",
+InsertSmiley		: "Inserir Emoticon",
+About				: "Sobre FCKeditor",
+Bold				: "Negrito",
+Italic				: "Itálico",
+Underline			: "Sublinhado",
+StrikeThrough		: "Tachado",
+Subscript			: "Subscrito",
+Superscript			: "Sobrescrito",
+LeftJustify			: "Alinhar Esquerda",
+CenterJustify		: "Centralizar",
+RightJustify		: "Alinhar Direita",
+BlockJustify		: "Justificado",
+DecreaseIndent		: "Diminuir Recuo",
+IncreaseIndent		: "Aumentar Recuo",
+Blockquote			: "Blockquote",	//MISSING
+Undo				: "Desfazer",
+Redo				: "Refazer",
+NumberedListLbl		: "Numeração",
+NumberedList		: "Inserir/Remover Numeração",
+BulletedListLbl		: "Marcadores",
+BulletedList		: "Inserir/Remover Marcadores",
+ShowTableBorders	: "Exibir Bordas da Tabela",
+ShowDetails			: "Exibir Detalhes",
+Style				: "Estilo",
+FontFormat			: "Formatação",
+Font				: "Fonte",
+FontSize			: "Tamanho",
+TextColor			: "Cor do Texto",
+BGColor				: "Cor do Plano de Fundo",
+Source				: "Código-Fonte",
+Find				: "Localizar",
+Replace				: "Substituir",
+SpellCheck			: "Verificar Ortografia",
+UniversalKeyboard	: "Teclado Universal",
+PageBreakLbl		: "Quebra de Página",
+PageBreak			: "Inserir Quebra de Página",
+
+Form			: "Formulário",
+Checkbox		: "Caixa de Seleção",
+RadioButton		: "Botão de Opção",
+TextField		: "Caixa de Texto",
+Textarea		: "Área de Texto",
+HiddenField		: "Campo Oculto",
+Button			: "Botão",
+SelectionField	: "Caixa de Listagem",
+ImageButton		: "Botão de Imagem",
+
+FitWindow		: "Maximizar o tamanho do editor",
+ShowBlocks		: "Show Blocks",	//MISSING
+
+// Context Menu
+EditLink			: "Editar Hiperlink",
+CellCM				: "Célula",
+RowCM				: "Linha",
+ColumnCM			: "Coluna",
+InsertRowAfter		: "Insert Row After",	//MISSING
+InsertRowBefore		: "Insert Row Before",	//MISSING
+DeleteRows			: "Remover Linhas",
+InsertColumnAfter	: "Insert Column After",	//MISSING
+InsertColumnBefore	: "Insert Column Before",	//MISSING
+DeleteColumns		: "Remover Colunas",
+InsertCellAfter		: "Insert Cell After",	//MISSING
+InsertCellBefore	: "Insert Cell Before",	//MISSING
+DeleteCells			: "Remover Células",
+MergeCells			: "Mesclar Células",
+MergeRight			: "Merge Right",	//MISSING
+MergeDown			: "Merge Down",	//MISSING
+HorizontalSplitCell	: "Split Cell Horizontally",	//MISSING
+VerticalSplitCell	: "Split Cell Vertically",	//MISSING
+TableDelete			: "Apagar Tabela",
+CellProperties		: "Formatar Célula",
+TableProperties		: "Formatar Tabela",
+ImageProperties		: "Formatar Figura",
+FlashProperties		: "Propriedades Flash",
+
+AnchorProp			: "Formatar Âncora",
+ButtonProp			: "Formatar Botão",
+CheckboxProp		: "Formatar Caixa de Seleção",
+HiddenFieldProp		: "Formatar Campo Oculto",
+RadioButtonProp		: "Formatar Botão de Opção",
+ImageButtonProp		: "Formatar Botão de Imagem",
+TextFieldProp		: "Formatar Caixa de Texto",
+SelectionFieldProp	: "Formatar Caixa de Listagem",
+TextareaProp		: "Formatar Área de Texto",
+FormProp			: "Formatar Formulário",
+
+FontFormats			: "Normal;Formatado;Endereço;Título 1;Título 2;Título 3;Título 4;Título 5;Título 6",
+
+// Alerts and Messages
+ProcessingXHTML		: "Processando XHTML. Por favor, aguarde...",
+Done				: "Pronto",
+PasteWordConfirm	: "O texto que você deseja colar parece ter sido copiado do Word. Você gostaria de remover a formatação antes de colar?",
+NotCompatiblePaste	: "Este comando está disponível para o navegador Internet Explorer 5.5 ou superior. Você gostaria de colar sem remover a formatação?",
+UnknownToolbarItem	: "O item da barra de ferramentas \"%1\" não é reconhecido",
+UnknownCommand		: "O comando \"%1\" não é reconhecido",
+NotImplemented		: "O comando não foi implementado",
+UnknownToolbarSet	: "A barra de ferramentas \"%1\" não existe",
+NoActiveX			: "As configurações de segurança do seu browser podem limitar algumas características do editor. Você precisa habilitar a opção \"Executar controles e plug-ins ActiveX\". Você pode experimentar erros e alertas de características faltantes.",
+BrowseServerBlocked : "Os recursos do browser não puderam ser abertos. Tenha certeza que todos os bloqueadores de popup estão desabilitados.",
+DialogBlocked		: "Não foi possível abrir a janela de diálogo. Tenha certeza que todos os bloqueadores de popup estão desabilitados.",
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Cancelar",
+DlgBtnClose			: "Fechar",
+DlgBtnBrowseServer	: "Localizar no Servidor",
+DlgAdvancedTag		: "Avançado",
+DlgOpOther			: "<Outros>",
+DlgInfoTab			: "Info",
+DlgAlertUrl			: "Inserir a URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<não ajustado>",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Direção do idioma",
+DlgGenLangDirLtr	: "Esquerda para Direita (LTR)",
+DlgGenLangDirRtl	: "Direita para Esquerda (RTL)",
+DlgGenLangCode		: "Idioma",
+DlgGenAccessKey		: "Chave de Acesso",
+DlgGenName			: "Nome",
+DlgGenTabIndex		: "Índice de Tabulação",
+DlgGenLongDescr		: "Descrição da URL",
+DlgGenClass			: "Classe de Folhas de Estilo",
+DlgGenTitle			: "Título",
+DlgGenContType		: "Tipo de Conteúdo",
+DlgGenLinkCharset	: "Conjunto de Caracteres do Hiperlink",
+DlgGenStyle			: "Estilos",
+
+// Image Dialog
+DlgImgTitle			: "Formatar Figura",
+DlgImgInfoTab		: "Informações da Figura",
+DlgImgBtnUpload		: "Enviar para o Servidor",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Submeter",
+DlgImgAlt			: "Texto Alternativo",
+DlgImgWidth			: "Largura",
+DlgImgHeight		: "Altura",
+DlgImgLockRatio		: "Manter proporções",
+DlgBtnResetSize		: "Redefinir para o Tamanho Original",
+DlgImgBorder		: "Borda",
+DlgImgHSpace		: "Horizontal",
+DlgImgVSpace		: "Vertical",
+DlgImgAlign			: "Alinhamento",
+DlgImgAlignLeft		: "Esquerda",
+DlgImgAlignAbsBottom: "Inferior Absoluto",
+DlgImgAlignAbsMiddle: "Centralizado Absoluto",
+DlgImgAlignBaseline	: "Baseline",
+DlgImgAlignBottom	: "Inferior",
+DlgImgAlignMiddle	: "Centralizado",
+DlgImgAlignRight	: "Direita",
+DlgImgAlignTextTop	: "Superior Absoluto",
+DlgImgAlignTop		: "Superior",
+DlgImgPreview		: "Visualização",
+DlgImgAlertUrl		: "Por favor, digite o URL da figura.",
+DlgImgLinkTab		: "Hiperlink",
+
+// Flash Dialog
+DlgFlashTitle		: "Propriedades Flash",
+DlgFlashChkPlay		: "Tocar Automaticamente",
+DlgFlashChkLoop		: "Loop",
+DlgFlashChkMenu		: "Habilita Menu Flash",
+DlgFlashScale		: "Escala",
+DlgFlashScaleAll	: "Mostrar tudo",
+DlgFlashScaleNoBorder	: "Sem Borda",
+DlgFlashScaleFit	: "Escala Exata",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Hiperlink",
+DlgLnkInfoTab		: "Informações",
+DlgLnkTargetTab		: "Destino",
+
+DlgLnkType			: "Tipo de hiperlink",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Âncora nesta página",
+DlgLnkTypeEMail		: "E-Mail",
+DlgLnkProto			: "Protocolo",
+DlgLnkProtoOther	: "<outro>",
+DlgLnkURL			: "URL do hiperlink",
+DlgLnkAnchorSel		: "Selecione uma âncora",
+DlgLnkAnchorByName	: "Pelo Nome da âncora",
+DlgLnkAnchorById	: "Pelo Id do Elemento",
+DlgLnkNoAnchors		: "(Não há âncoras disponíveis neste documento)",
+DlgLnkEMail			: "Endereço E-Mail",
+DlgLnkEMailSubject	: "Assunto da Mensagem",
+DlgLnkEMailBody		: "Corpo da Mensagem",
+DlgLnkUpload		: "Enviar ao Servidor",
+DlgLnkBtnUpload		: "Enviar ao Servidor",
+
+DlgLnkTarget		: "Destino",
+DlgLnkTargetFrame	: "<frame>",
+DlgLnkTargetPopup	: "<janela popup>",
+DlgLnkTargetBlank	: "Nova Janela (_blank)",
+DlgLnkTargetParent	: "Janela Pai (_parent)",
+DlgLnkTargetSelf	: "Mesma Janela (_self)",
+DlgLnkTargetTop		: "Janela Superior (_top)",
+DlgLnkTargetFrameName	: "Nome do Frame de Destino",
+DlgLnkPopWinName	: "Nome da Janela Pop-up",
+DlgLnkPopWinFeat	: "Atributos da Janela Pop-up",
+DlgLnkPopResize		: "Redimensionável",
+DlgLnkPopLocation	: "Barra de Endereços",
+DlgLnkPopMenu		: "Barra de Menus",
+DlgLnkPopScroll		: "Barras de Rolagem",
+DlgLnkPopStatus		: "Barra de Status",
+DlgLnkPopToolbar	: "Barra de Ferramentas",
+DlgLnkPopFullScrn	: "Modo Tela Cheia (IE)",
+DlgLnkPopDependent	: "Dependente (Netscape)",
+DlgLnkPopWidth		: "Largura",
+DlgLnkPopHeight		: "Altura",
+DlgLnkPopLeft		: "Esquerda",
+DlgLnkPopTop		: "Superior",
+
+DlnLnkMsgNoUrl		: "Por favor, digite o endereço do Hiperlink",
+DlnLnkMsgNoEMail	: "Por favor, digite o endereço de e-mail",
+DlnLnkMsgNoAnchor	: "Por favor, selecione uma âncora",
+DlnLnkMsgInvPopName	: "O nome da janela popup deve começar com uma letra ou sublinhado (_) e não pode conter espaços",
+
+// Color Dialog
+DlgColorTitle		: "Selecione uma Cor",
+DlgColorBtnClear	: "Limpar",
+DlgColorHighlight	: "Visualização",
+DlgColorSelected	: "Selecionada",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Inserir Emoticon",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Selecione um Caractere Especial",
+
+// Table Dialog
+DlgTableTitle		: "Formatar Tabela",
+DlgTableRows		: "Linhas",
+DlgTableColumns		: "Colunas",
+DlgTableBorder		: "Borda",
+DlgTableAlign		: "Alinhamento",
+DlgTableAlignNotSet	: "<Não ajustado>",
+DlgTableAlignLeft	: "Esquerda",
+DlgTableAlignCenter	: "Centralizado",
+DlgTableAlignRight	: "Direita",
+DlgTableWidth		: "Largura",
+DlgTableWidthPx		: "pixels",
+DlgTableWidthPc		: "%",
+DlgTableHeight		: "Altura",
+DlgTableCellSpace	: "Espaçamento",
+DlgTableCellPad		: "Enchimento",
+DlgTableCaption		: "Legenda",
+DlgTableSummary		: "Resumo",
+
+// Table Cell Dialog
+DlgCellTitle		: "Formatar célula",
+DlgCellWidth		: "Largura",
+DlgCellWidthPx		: "pixels",
+DlgCellWidthPc		: "%",
+DlgCellHeight		: "Altura",
+DlgCellWordWrap		: "Quebra de Linha",
+DlgCellWordWrapNotSet	: "<Não ajustado>",
+DlgCellWordWrapYes	: "Sim",
+DlgCellWordWrapNo	: "Não",
+DlgCellHorAlign		: "Alinhamento Horizontal",
+DlgCellHorAlignNotSet	: "<Não ajustado>",
+DlgCellHorAlignLeft	: "Esquerda",
+DlgCellHorAlignCenter	: "Centralizado",
+DlgCellHorAlignRight: "Direita",
+DlgCellVerAlign		: "Alinhamento Vertical",
+DlgCellVerAlignNotSet	: "<Não ajustado>",
+DlgCellVerAlignTop	: "Superior",
+DlgCellVerAlignMiddle	: "Centralizado",
+DlgCellVerAlignBottom	: "Inferior",
+DlgCellVerAlignBaseline	: "Baseline",
+DlgCellRowSpan		: "Transpor Linhas",
+DlgCellCollSpan		: "Transpor Colunas",
+DlgCellBackColor	: "Cor do Plano de Fundo",
+DlgCellBorderColor	: "Cor da Borda",
+DlgCellBtnSelect	: "Selecionar...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Find and Replace",	//MISSING
+
+// Find Dialog
+DlgFindTitle		: "Localizar...",
+DlgFindFindBtn		: "Localizar",
+DlgFindNotFoundMsg	: "O texto especificado não foi encontrado.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Substituir",
+DlgReplaceFindLbl		: "Procurar por:",
+DlgReplaceReplaceLbl	: "Substituir por:",
+DlgReplaceCaseChk		: "Coincidir Maiúsculas/Minúsculas",
+DlgReplaceReplaceBtn	: "Substituir",
+DlgReplaceReplAllBtn	: "Substituir Tudo",
+DlgReplaceWordChk		: "Coincidir a palavra inteira",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "As configurações de segurança do seu navegador não permitem que o editor execute operações de recortar automaticamente. Por favor, utilize o teclado para recortar (Ctrl+X).",
+PasteErrorCopy	: "As configurações de segurança do seu navegador não permitem que o editor execute operações de copiar automaticamente. Por favor, utilize o teclado para copiar (Ctrl+C).",
+
+PasteAsText		: "Colar como Texto sem Formatação",
+PasteFromWord	: "Colar do Word",
+
+DlgPasteMsg2	: "Transfira o link usado no box usando o teclado com (<STRONG>Ctrl+V</STRONG>) e <STRONG>OK</STRONG>.",
+DlgPasteSec		: "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.",	//MISSING
+DlgPasteIgnoreFont		: "Ignorar definições de fonte",
+DlgPasteRemoveStyles	: "Remove definições de estilo",
+DlgPasteCleanBox		: "Limpar Box",
+
+// Color Picker
+ColorAutomatic	: "Automático",
+ColorMoreColors	: "Mais Cores...",
+
+// Document Properties
+DocProps		: "Propriedades Documento",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Formatar Âncora",
+DlgAnchorName		: "Nome da Âncora",
+DlgAnchorErrorName	: "Por favor, digite o nome da âncora",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Não encontrada",
+DlgSpellChangeTo		: "Alterar para",
+DlgSpellBtnIgnore		: "Ignorar uma vez",
+DlgSpellBtnIgnoreAll	: "Ignorar Todas",
+DlgSpellBtnReplace		: "Alterar",
+DlgSpellBtnReplaceAll	: "Alterar Todas",
+DlgSpellBtnUndo			: "Desfazer",
+DlgSpellNoSuggestions	: "-sem sugestões de ortografia-",
+DlgSpellProgress		: "Verificação ortográfica em andamento...",
+DlgSpellNoMispell		: "Verificação encerrada: Não foram encontrados erros de ortografia",
+DlgSpellNoChanges		: "Verificação ortográfica encerrada: Não houve alterações",
+DlgSpellOneChange		: "Verificação ortográfica encerrada: Uma palavra foi alterada",
+DlgSpellManyChanges		: "Verificação ortográfica encerrada: %1 foram alteradas",
+
+IeSpellDownload			: "A verificação ortográfica não foi instalada. Você gostaria de realizar o download agora?",
+
+// Button Dialog
+DlgButtonText		: "Texto (Valor)",
+DlgButtonType		: "Tipo",
+DlgButtonTypeBtn	: "Botão",
+DlgButtonTypeSbm	: "Enviar",
+DlgButtonTypeRst	: "Limpar",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Nome",
+DlgCheckboxValue	: "Valor",
+DlgCheckboxSelected	: "Selecionado",
+
+// Form Dialog
+DlgFormName		: "Nome",
+DlgFormAction	: "Action",
+DlgFormMethod	: "Método",
+
+// Select Field Dialog
+DlgSelectName		: "Nome",
+DlgSelectValue		: "Valor",
+DlgSelectSize		: "Tamanho",
+DlgSelectLines		: "linhas",
+DlgSelectChkMulti	: "Permitir múltiplas seleções",
+DlgSelectOpAvail	: "Opções disponíveis",
+DlgSelectOpText		: "Texto",
+DlgSelectOpValue	: "Valor",
+DlgSelectBtnAdd		: "Adicionar",
+DlgSelectBtnModify	: "Modificar",
+DlgSelectBtnUp		: "Para cima",
+DlgSelectBtnDown	: "Para baixo",
+DlgSelectBtnSetValue : "Definir como selecionado",
+DlgSelectBtnDelete	: "Remover",
+
+// Textarea Dialog
+DlgTextareaName	: "Nome",
+DlgTextareaCols	: "Colunas",
+DlgTextareaRows	: "Linhas",
+
+// Text Field Dialog
+DlgTextName			: "Nome",
+DlgTextValue		: "Valor",
+DlgTextCharWidth	: "Comprimento (em caracteres)",
+DlgTextMaxChars		: "Número Máximo de Caracteres",
+DlgTextType			: "Tipo",
+DlgTextTypeText		: "Texto",
+DlgTextTypePass		: "Senha",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Nome",
+DlgHiddenValue	: "Valor",
+
+// Bulleted List Dialog
+BulletedListProp	: "Formatar Marcadores",
+NumberedListProp	: "Formatar Numeração",
+DlgLstStart			: "Iniciar",
+DlgLstType			: "Tipo",
+DlgLstTypeCircle	: "Círculo",
+DlgLstTypeDisc		: "Disco",
+DlgLstTypeSquare	: "Quadrado",
+DlgLstTypeNumbers	: "Números (1, 2, 3)",
+DlgLstTypeLCase		: "Letras Minúsculas (a, b, c)",
+DlgLstTypeUCase		: "Letras Maiúsculas (A, B, C)",
+DlgLstTypeSRoman	: "Números Romanos Minúsculos (i, ii, iii)",
+DlgLstTypeLRoman	: "Números Romanos Maiúsculos (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Geral",
+DlgDocBackTab		: "Plano de Fundo",
+DlgDocColorsTab		: "Cores e Margens",
+DlgDocMetaTab		: "Meta Dados",
+
+DlgDocPageTitle		: "Título da Página",
+DlgDocLangDir		: "Direção do Idioma",
+DlgDocLangDirLTR	: "Esquerda para Direita (LTR)",
+DlgDocLangDirRTL	: "Direita para Esquerda (RTL)",
+DlgDocLangCode		: "Código do Idioma",
+DlgDocCharSet		: "Codificação de Caracteres",
+DlgDocCharSetCE		: "Europa Central",
+DlgDocCharSetCT		: "Chinês Tradicional (Big5)",
+DlgDocCharSetCR		: "Cirílico",
+DlgDocCharSetGR		: "Grego",
+DlgDocCharSetJP		: "Japonês",
+DlgDocCharSetKR		: "Coreano",
+DlgDocCharSetTR		: "Turco",
+DlgDocCharSetUN		: "Unicode (UTF-8)",
+DlgDocCharSetWE		: "Europa Ocidental",
+DlgDocCharSetOther	: "Outra Codificação de Caracteres",
+
+DlgDocDocType		: "Cabeçalho Tipo de Documento",
+DlgDocDocTypeOther	: "Other Document Type Heading",
+DlgDocIncXHTML		: "Incluir Declarações XHTML",
+DlgDocBgColor		: "Cor do Plano de Fundo",
+DlgDocBgImage		: "URL da Imagem de Plano de Fundo",
+DlgDocBgNoScroll	: "Plano de Fundo Fixo",
+DlgDocCText			: "Texto",
+DlgDocCLink			: "Hiperlink",
+DlgDocCVisited		: "Hiperlink Visitado",
+DlgDocCActive		: "Hiperlink Ativo",
+DlgDocMargins		: "Margens da Página",
+DlgDocMaTop			: "Superior",
+DlgDocMaLeft		: "Inferior",
+DlgDocMaRight		: "Direita",
+DlgDocMaBottom		: "Inferior",
+DlgDocMeIndex		: "Palavras-chave de Indexação do Documento (separadas por vírgula)",
+DlgDocMeDescr		: "Descrição do Documento",
+DlgDocMeAuthor		: "Autor",
+DlgDocMeCopy		: "Direitos Autorais",
+DlgDocPreview		: "Visualizar",
+
+// Templates Dialog
+Templates			: "Modelos de layout",
+DlgTemplatesTitle	: "Modelo de layout do conteúdo",
+DlgTemplatesSelMsg	: "Selecione um modelo de layout para ser aberto no editor<br>(o conteúdo atual será perdido):",
+DlgTemplatesLoading	: "Carregando a lista de modelos de layout. Aguarde...",
+DlgTemplatesNoTpl	: "(Não foram definidos modelos de layout)",
+DlgTemplatesReplace	: "Substituir o conteúdo atual",
+
+// About Dialog
+DlgAboutAboutTab	: "Sobre",
+DlgAboutBrowserInfoTab	: "Informações do Navegador",
+DlgAboutLicenseTab	: "Licença",
+DlgAboutVersion		: "versão",
+DlgAboutInfo		: "Para maiores informações visite"
+};
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/pt.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/pt.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/pt.js	(revision 1280)
@@ -0,0 +1,516 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Portuguese language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Fechar Barra",
+ToolbarExpand		: "Expandir Barra",
+
+// Toolbar Items and Context Menu
+Save				: "Guardar",
+NewPage				: "Nova Página",
+Preview				: "Pré-visualizar",
+Cut					: "Cortar",
+Copy				: "Copiar",
+Paste				: "Colar",
+PasteText			: "Colar como texto não formatado",
+PasteWord			: "Colar do Word",
+Print				: "Imprimir",
+SelectAll			: "Seleccionar Tudo",
+RemoveFormat		: "Eliminar Formato",
+InsertLinkLbl		: "Hiperligação",
+InsertLink			: "Inserir/Editar Hiperligação",
+RemoveLink			: "Eliminar Hiperligação",
+Anchor				: " Inserir/Editar Âncora",
+AnchorDelete		: "Remove Anchor",	//MISSING
+InsertImageLbl		: "Imagem",
+InsertImage			: "Inserir/Editar Imagem",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Inserir/Editar Flash",
+InsertTableLbl		: "Tabela",
+InsertTable			: "Inserir/Editar Tabela",
+InsertLineLbl		: "Linha",
+InsertLine			: "Inserir Linha Horizontal",
+InsertSpecialCharLbl: "Caracter Especial",
+InsertSpecialChar	: "Inserir Caracter Especial",
+InsertSmileyLbl		: "Emoticons",
+InsertSmiley		: "Inserir Emoticons",
+About				: "Acerca do FCKeditor",
+Bold				: "Negrito",
+Italic				: "Itálico",
+Underline			: "Sublinhado",
+StrikeThrough		: "Rasurado",
+Subscript			: "Superior à Linha",
+Superscript			: "Inferior à Linha",
+LeftJustify			: "Alinhar à Esquerda",
+CenterJustify		: "Alinhar ao Centro",
+RightJustify		: "Alinhar à Direita",
+BlockJustify		: "Justificado",
+DecreaseIndent		: "Diminuir Avanço",
+IncreaseIndent		: "Aumentar Avanço",
+Blockquote			: "Blockquote",	//MISSING
+Undo				: "Anular",
+Redo				: "Repetir",
+NumberedListLbl		: "Numeração",
+NumberedList		: "Inserir/Eliminar Numeração",
+BulletedListLbl		: "Marcas",
+BulletedList		: "Inserir/Eliminar Marcas",
+ShowTableBorders	: "Mostrar Limites da Tabelas",
+ShowDetails			: "Mostrar Parágrafo",
+Style				: "Estilo",
+FontFormat			: "Formato",
+Font				: "Tipo de Letra",
+FontSize			: "Tamanho",
+TextColor			: "Cor do Texto",
+BGColor				: "Cor de Fundo",
+Source				: "Fonte",
+Find				: "Procurar",
+Replace				: "Substituir",
+SpellCheck			: "Verificação Ortográfica",
+UniversalKeyboard	: "Teclado Universal",
+PageBreakLbl		: "Quebra de Página",
+PageBreak			: "Inserir Quebra de Página",
+
+Form			: "Formulário",
+Checkbox		: "Caixa de Verificação",
+RadioButton		: "Botão de Opção",
+TextField		: "Campo de Texto",
+Textarea		: "Área de Texto",
+HiddenField		: "Campo Escondido",
+Button			: "Botão",
+SelectionField	: "Caixa de Combinação",
+ImageButton		: "Botão de Imagem",
+
+FitWindow		: "Maximizar o tamanho do editor",
+ShowBlocks		: "Show Blocks",	//MISSING
+
+// Context Menu
+EditLink			: "Editar Hiperligação",
+CellCM				: "Célula",
+RowCM				: "Linha",
+ColumnCM			: "Coluna",
+InsertRowAfter		: "Insert Row After",	//MISSING
+InsertRowBefore		: "Insert Row Before",	//MISSING
+DeleteRows			: "Eliminar Linhas",
+InsertColumnAfter	: "Insert Column After",	//MISSING
+InsertColumnBefore	: "Insert Column Before",	//MISSING
+DeleteColumns		: "Eliminar Coluna",
+InsertCellAfter		: "Insert Cell After",	//MISSING
+InsertCellBefore	: "Insert Cell Before",	//MISSING
+DeleteCells			: "Eliminar Célula",
+MergeCells			: "Unir Células",
+MergeRight			: "Merge Right",	//MISSING
+MergeDown			: "Merge Down",	//MISSING
+HorizontalSplitCell	: "Split Cell Horizontally",	//MISSING
+VerticalSplitCell	: "Split Cell Vertically",	//MISSING
+TableDelete			: "Eliminar Tabela",
+CellProperties		: "Propriedades da Célula",
+TableProperties		: "Propriedades da Tabela",
+ImageProperties		: "Propriedades da Imagem",
+FlashProperties		: "Propriedades do Flash",
+
+AnchorProp			: "Propriedades da Âncora",
+ButtonProp			: "Propriedades do Botão",
+CheckboxProp		: "Propriedades da Caixa de Verificação",
+HiddenFieldProp		: "Propriedades do Campo Escondido",
+RadioButtonProp		: "Propriedades do Botão de Opção",
+ImageButtonProp		: "Propriedades do Botão de imagens",
+TextFieldProp		: "Propriedades do Campo de Texto",
+SelectionFieldProp	: "Propriedades da Caixa de Combinação",
+TextareaProp		: "Propriedades da Área de Texto",
+FormProp			: "Propriedades do Formulário",
+
+FontFormats			: "Normal;Formatado;Endereço;Título 1;Título 2;Título 3;Título 4;Título 5;Título 6",
+
+// Alerts and Messages
+ProcessingXHTML		: "A Processar XHTML. Por favor, espere...",
+Done				: "Concluído",
+PasteWordConfirm	: "O texto que deseja parece ter sido copiado do Word. Deseja limpar a formatação antes de colar?",
+NotCompatiblePaste	: "Este comando só está disponível para Internet Explorer versão 5.5 ou superior. Deseja colar sem limpar a formatação?",
+UnknownToolbarItem	: "Item de barra desconhecido \"%1\"",
+UnknownCommand		: "Nome de comando desconhecido \"%1\"",
+NotImplemented		: "Comando não implementado",
+UnknownToolbarSet	: "Nome de barra \"%1\" não definido",
+NoActiveX			: "As definições de segurança do navegador podem limitar algumas potencalidades do editr. Deve activar a opção \"Executar controlos e extensões ActiveX\". Pode ocorrer erros ou verificar que faltam potencialidades.",
+BrowseServerBlocked : "Não foi possível abrir o navegador de recursos. Certifique-se que todos os bloqueadores de popup estão desactivados.",
+DialogBlocked		: "Não foi possível abrir a janela de diálogo. Certifique-se que todos os bloqueadores de popup estão desactivados.",
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Cancelar",
+DlgBtnClose			: "Fechar",
+DlgBtnBrowseServer	: "Navegar no Servidor",
+DlgAdvancedTag		: "Avançado",
+DlgOpOther			: "<Outro>",
+DlgInfoTab			: "Informação",
+DlgAlertUrl			: "Por favor introduza o URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<Não definido>",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Orientação de idioma",
+DlgGenLangDirLtr	: "Esquerda à Direita (LTR)",
+DlgGenLangDirRtl	: "Direita a Esquerda (RTL)",
+DlgGenLangCode		: "Código de Idioma",
+DlgGenAccessKey		: "Chave de Acesso",
+DlgGenName			: "Nome",
+DlgGenTabIndex		: "Índice de Tubulação",
+DlgGenLongDescr		: "Descrição Completa do URL",
+DlgGenClass			: "Classes de Estilo de Folhas Classes",
+DlgGenTitle			: "Título",
+DlgGenContType		: "Tipo de Conteúdo",
+DlgGenLinkCharset	: "Fonte de caracteres vinculado",
+DlgGenStyle			: "Estilo",
+
+// Image Dialog
+DlgImgTitle			: "Propriedades da Imagem",
+DlgImgInfoTab		: "Informação da Imagem",
+DlgImgBtnUpload		: "Enviar para o Servidor",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Carregar",
+DlgImgAlt			: "Texto Alternativo",
+DlgImgWidth			: "Largura",
+DlgImgHeight		: "Altura",
+DlgImgLockRatio		: "Proporcional",
+DlgBtnResetSize		: "Tamanho Original",
+DlgImgBorder		: "Limite",
+DlgImgHSpace		: "Esp.Horiz",
+DlgImgVSpace		: "Esp.Vert",
+DlgImgAlign			: "Alinhamento",
+DlgImgAlignLeft		: "Esquerda",
+DlgImgAlignAbsBottom: "Abs inferior",
+DlgImgAlignAbsMiddle: "Abs centro",
+DlgImgAlignBaseline	: "Linha de base",
+DlgImgAlignBottom	: "Fundo",
+DlgImgAlignMiddle	: "Centro",
+DlgImgAlignRight	: "Direita",
+DlgImgAlignTextTop	: "Topo do texto",
+DlgImgAlignTop		: "Topo",
+DlgImgPreview		: "Pré-visualizar",
+DlgImgAlertUrl		: "Por favor introduza o URL da imagem",
+DlgImgLinkTab		: "Hiperligação",
+
+// Flash Dialog
+DlgFlashTitle		: "Propriedades do Flash",
+DlgFlashChkPlay		: "Reproduzir automaticamente",
+DlgFlashChkLoop		: "Loop",
+DlgFlashChkMenu		: "Permitir Menu do Flash",
+DlgFlashScale		: "Escala",
+DlgFlashScaleAll	: "Mostrar tudo",
+DlgFlashScaleNoBorder	: "Sem Limites",
+DlgFlashScaleFit	: "Tamanho Exacto",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Hiperligação",
+DlgLnkInfoTab		: "Informação de Hiperligação",
+DlgLnkTargetTab		: "Destino",
+
+DlgLnkType			: "Tipo de Hiperligação",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Referência a esta página",
+DlgLnkTypeEMail		: "E-Mail",
+DlgLnkProto			: "Protocolo",
+DlgLnkProtoOther	: "<outro>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Seleccionar una referência",
+DlgLnkAnchorByName	: "Por Nome de Referência",
+DlgLnkAnchorById	: "Por ID de elemento",
+DlgLnkNoAnchors		: "(Não há referências disponíveis no documento)",
+DlgLnkEMail			: "Endereço de E-Mail",
+DlgLnkEMailSubject	: "Título de Mensagem",
+DlgLnkEMailBody		: "Corpo da Mensagem",
+DlgLnkUpload		: "Carregar",
+DlgLnkBtnUpload		: "Enviar ao Servidor",
+
+DlgLnkTarget		: "Destino",
+DlgLnkTargetFrame	: "<Frame>",
+DlgLnkTargetPopup	: "<Janela de popup>",
+DlgLnkTargetBlank	: "Nova Janela(_blank)",
+DlgLnkTargetParent	: "Janela Pai (_parent)",
+DlgLnkTargetSelf	: "Mesma janela (_self)",
+DlgLnkTargetTop		: "Janela primaria (_top)",
+DlgLnkTargetFrameName	: "Nome do Frame Destino",
+DlgLnkPopWinName	: "Nome da Janela de Popup",
+DlgLnkPopWinFeat	: "Características de Janela de Popup",
+DlgLnkPopResize		: "Ajustável",
+DlgLnkPopLocation	: "Barra de localização",
+DlgLnkPopMenu		: "Barra de Menu",
+DlgLnkPopScroll		: "Barras de deslocamento",
+DlgLnkPopStatus		: "Barra de Estado",
+DlgLnkPopToolbar	: "Barra de Ferramentas",
+DlgLnkPopFullScrn	: "Janela Completa (IE)",
+DlgLnkPopDependent	: "Dependente (Netscape)",
+DlgLnkPopWidth		: "Largura",
+DlgLnkPopHeight		: "Altura",
+DlgLnkPopLeft		: "Posição Esquerda",
+DlgLnkPopTop		: "Posição Direita",
+
+DlnLnkMsgNoUrl		: "Por favor introduza a hiperligação URL",
+DlnLnkMsgNoEMail	: "Por favor introduza o endereço de e-mail",
+DlnLnkMsgNoAnchor	: "Por favor seleccione uma referência",
+DlnLnkMsgInvPopName	: "The popup name must begin with an alphabetic character and must not contain spaces",	//MISSING
+
+// Color Dialog
+DlgColorTitle		: "Seleccionar Cor",
+DlgColorBtnClear	: "Nenhuma",
+DlgColorHighlight	: "Destacado",
+DlgColorSelected	: "Seleccionado",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Inserir um Emoticon",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Seleccione um caracter especial",
+
+// Table Dialog
+DlgTableTitle		: "Propriedades da Tabela",
+DlgTableRows		: "Linhas",
+DlgTableColumns		: "Colunas",
+DlgTableBorder		: "Tamanho do Limite",
+DlgTableAlign		: "Alinhamento",
+DlgTableAlignNotSet	: "<Não definido>",
+DlgTableAlignLeft	: "Esquerda",
+DlgTableAlignCenter	: "Centrado",
+DlgTableAlignRight	: "Direita",
+DlgTableWidth		: "Largura",
+DlgTableWidthPx		: "pixeis",
+DlgTableWidthPc		: "percentagem",
+DlgTableHeight		: "Altura",
+DlgTableCellSpace	: "Esp. e/células",
+DlgTableCellPad		: "Esp. interior",
+DlgTableCaption		: "Título",
+DlgTableSummary		: "Sumário",
+
+// Table Cell Dialog
+DlgCellTitle		: "Propriedades da Célula",
+DlgCellWidth		: "Largura",
+DlgCellWidthPx		: "pixeis",
+DlgCellWidthPc		: "percentagem",
+DlgCellHeight		: "Altura",
+DlgCellWordWrap		: "Moldar Texto",
+DlgCellWordWrapNotSet	: "<Não definido>",
+DlgCellWordWrapYes	: "Sim",
+DlgCellWordWrapNo	: "Não",
+DlgCellHorAlign		: "Alinhamento Horizontal",
+DlgCellHorAlignNotSet	: "<Não definido>",
+DlgCellHorAlignLeft	: "Esquerda",
+DlgCellHorAlignCenter	: "Centrado",
+DlgCellHorAlignRight: "Direita",
+DlgCellVerAlign		: "Alinhamento Vertical",
+DlgCellVerAlignNotSet	: "<Não definido>",
+DlgCellVerAlignTop	: "Topo",
+DlgCellVerAlignMiddle	: "Médio",
+DlgCellVerAlignBottom	: "Fundi",
+DlgCellVerAlignBaseline	: "Linha de Base",
+DlgCellRowSpan		: "Unir Linhas",
+DlgCellCollSpan		: "Unir Colunas",
+DlgCellBackColor	: "Cor do Fundo",
+DlgCellBorderColor	: "Cor do Limite",
+DlgCellBtnSelect	: "Seleccione...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Find and Replace",	//MISSING
+
+// Find Dialog
+DlgFindTitle		: "Procurar",
+DlgFindFindBtn		: "Procurar",
+DlgFindNotFoundMsg	: "O texto especificado não foi encontrado.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Substituir",
+DlgReplaceFindLbl		: "Texto a Procurar:",
+DlgReplaceReplaceLbl	: "Substituir por:",
+DlgReplaceCaseChk		: "Maiúsculas/Minúsculas",
+DlgReplaceReplaceBtn	: "Substituir",
+DlgReplaceReplAllBtn	: "Substituir Tudo",
+DlgReplaceWordChk		: "Coincidir com toda a palavra",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "A configuração de segurança do navegador não permite a execução automática de operações de cortar. Por favor use o teclado (Ctrl+X).",
+PasteErrorCopy	: "A configuração de segurança do navegador não permite a execução automática de operações de copiar. Por favor use o teclado (Ctrl+C).",
+
+PasteAsText		: "Colar como Texto Simples",
+PasteFromWord	: "Colar do Word",
+
+DlgPasteMsg2	: "Por favor, cole dentro da seguinte caixa usando o teclado (<STRONG>Ctrl+V</STRONG>) e prima <STRONG>OK</STRONG>.",
+DlgPasteSec		: "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.",	//MISSING
+DlgPasteIgnoreFont		: "Ignorar da definições do Tipo de Letra ",
+DlgPasteRemoveStyles	: "Remover as definições de Estilos",
+DlgPasteCleanBox		: "Caixa de Limpeza",
+
+// Color Picker
+ColorAutomatic	: "Automático",
+ColorMoreColors	: "Mais Cores...",
+
+// Document Properties
+DocProps		: "Propriedades do Documento",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Propriedades da Âncora",
+DlgAnchorName		: "Nome da Âncora",
+DlgAnchorErrorName	: "Por favor, introduza o nome da âncora",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Não está num directório",
+DlgSpellChangeTo		: "Mudar para",
+DlgSpellBtnIgnore		: "Ignorar",
+DlgSpellBtnIgnoreAll	: "Ignorar Tudo",
+DlgSpellBtnReplace		: "Substituir",
+DlgSpellBtnReplaceAll	: "Substituir Tudo",
+DlgSpellBtnUndo			: "Anular",
+DlgSpellNoSuggestions	: "- Sem sugestões -",
+DlgSpellProgress		: "Verificação ortográfica em progresso…",
+DlgSpellNoMispell		: "Verificação ortográfica completa: não foram encontrados erros",
+DlgSpellNoChanges		: "Verificação ortográfica completa: não houve alteração de palavras",
+DlgSpellOneChange		: "Verificação ortográfica completa: uma palavra alterada",
+DlgSpellManyChanges		: "Verificação ortográfica completa: %1 palavras alteradas",
+
+IeSpellDownload			: " Verificação ortográfica não instalada. Quer descarregar agora?",
+
+// Button Dialog
+DlgButtonText		: "Texto (Valor)",
+DlgButtonType		: "Tipo",
+DlgButtonTypeBtn	: "Button",	//MISSING
+DlgButtonTypeSbm	: "Submit",	//MISSING
+DlgButtonTypeRst	: "Reset",	//MISSING
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Nome",
+DlgCheckboxValue	: "Valor",
+DlgCheckboxSelected	: "Seleccionado",
+
+// Form Dialog
+DlgFormName		: "Nome",
+DlgFormAction	: "Acção",
+DlgFormMethod	: "Método",
+
+// Select Field Dialog
+DlgSelectName		: "Nome",
+DlgSelectValue		: "Valor",
+DlgSelectSize		: "Tamanho",
+DlgSelectLines		: "linhas",
+DlgSelectChkMulti	: "Permitir selecções múltiplas",
+DlgSelectOpAvail	: "Opções Possíveis",
+DlgSelectOpText		: "Texto",
+DlgSelectOpValue	: "Valor",
+DlgSelectBtnAdd		: "Adicionar",
+DlgSelectBtnModify	: "Modificar",
+DlgSelectBtnUp		: "Para cima",
+DlgSelectBtnDown	: "Para baixo",
+DlgSelectBtnSetValue : "Definir um valor por defeito",
+DlgSelectBtnDelete	: "Apagar",
+
+// Textarea Dialog
+DlgTextareaName	: "Nome",
+DlgTextareaCols	: "Colunas",
+DlgTextareaRows	: "Linhas",
+
+// Text Field Dialog
+DlgTextName			: "Nome",
+DlgTextValue		: "Valor",
+DlgTextCharWidth	: "Tamanho do caracter",
+DlgTextMaxChars		: "Nr. Máximo de Caracteres",
+DlgTextType			: "Tipo",
+DlgTextTypeText		: "Texto",
+DlgTextTypePass		: "Palavra-chave",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Nome",
+DlgHiddenValue	: "Valor",
+
+// Bulleted List Dialog
+BulletedListProp	: "Propriedades da Marca",
+NumberedListProp	: "Propriedades da Numeração",
+DlgLstStart			: "Start",	//MISSING
+DlgLstType			: "Tipo",
+DlgLstTypeCircle	: "Circulo",
+DlgLstTypeDisc		: "Disco",
+DlgLstTypeSquare	: "Quadrado",
+DlgLstTypeNumbers	: "Números (1, 2, 3)",
+DlgLstTypeLCase		: "Letras Minúsculas (a, b, c)",
+DlgLstTypeUCase		: "Letras Maiúsculas (A, B, C)",
+DlgLstTypeSRoman	: "Numeração Romana em Minúsculas (i, ii, iii)",
+DlgLstTypeLRoman	: "Numeração Romana em Maiúsculas (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Geral",
+DlgDocBackTab		: "Fundo",
+DlgDocColorsTab		: "Cores e Margens",
+DlgDocMetaTab		: "Meta Data",
+
+DlgDocPageTitle		: "Título da Página",
+DlgDocLangDir		: "Orientação de idioma",
+DlgDocLangDirLTR	: "Esquerda à Direita (LTR)",
+DlgDocLangDirRTL	: "Direita à Esquerda (RTL)",
+DlgDocLangCode		: "Código de Idioma",
+DlgDocCharSet		: "Codificação de Caracteres",
+DlgDocCharSetCE		: "Central European",	//MISSING
+DlgDocCharSetCT		: "Chinese Traditional (Big5)",	//MISSING
+DlgDocCharSetCR		: "Cyrillic",	//MISSING
+DlgDocCharSetGR		: "Greek",	//MISSING
+DlgDocCharSetJP		: "Japanese",	//MISSING
+DlgDocCharSetKR		: "Korean",	//MISSING
+DlgDocCharSetTR		: "Turkish",	//MISSING
+DlgDocCharSetUN		: "Unicode (UTF-8)",	//MISSING
+DlgDocCharSetWE		: "Western European",	//MISSING
+DlgDocCharSetOther	: "Outra Codificação de Caracteres",
+
+DlgDocDocType		: "Tipo de Cabeçalho do Documento",
+DlgDocDocTypeOther	: "Outro Tipo de Cabeçalho do Documento",
+DlgDocIncXHTML		: "Incluir Declarações XHTML",
+DlgDocBgColor		: "Cor de Fundo",
+DlgDocBgImage		: "Caminho para a Imagem de Fundo",
+DlgDocBgNoScroll	: "Fundo Fixo",
+DlgDocCText			: "Texto",
+DlgDocCLink			: "Hiperligação",
+DlgDocCVisited		: "Hiperligação Visitada",
+DlgDocCActive		: "Hiperligação Activa",
+DlgDocMargins		: "Margem das Páginas",
+DlgDocMaTop			: "Topo",
+DlgDocMaLeft		: "Esquerda",
+DlgDocMaRight		: "Direita",
+DlgDocMaBottom		: "Fundo",
+DlgDocMeIndex		: "Palavras de Indexação do Documento (separadas por virgula)",
+DlgDocMeDescr		: "Descrição do Documento",
+DlgDocMeAuthor		: "Autor",
+DlgDocMeCopy		: "Direitos de Autor",
+DlgDocPreview		: "Pré-visualizar",
+
+// Templates Dialog
+Templates			: "Modelos",
+DlgTemplatesTitle	: "Modelo de Conteúdo",
+DlgTemplatesSelMsg	: "Por favor, seleccione o modelo a abrir no editor<br>(o conteúdo actual será perdido):",
+DlgTemplatesLoading	: "A carregar a lista de modelos. Aguarde por favor...",
+DlgTemplatesNoTpl	: "(Sem modelos definidos)",
+DlgTemplatesReplace	: "Replace actual contents",	//MISSING
+
+// About Dialog
+DlgAboutAboutTab	: "Acerca",
+DlgAboutBrowserInfoTab	: "Informação do Nevegador",
+DlgAboutLicenseTab	: "Licença",
+DlgAboutVersion		: "versão",
+DlgAboutInfo		: "Para mais informações por favor dirija-se a"
+};
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/ro.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/ro.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/ro.js	(revision 1280)
@@ -0,0 +1,516 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Romanian language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Ascunde bara cu opţiuni",
+ToolbarExpand		: "Expandează bara cu opţiuni",
+
+// Toolbar Items and Context Menu
+Save				: "Salvează",
+NewPage				: "Pagină nouă",
+Preview				: "Previzualizare",
+Cut					: "Taie",
+Copy				: "Copiază",
+Paste				: "Adaugă",
+PasteText			: "Adaugă ca text simplu",
+PasteWord			: "Adaugă din Word",
+Print				: "Printează",
+SelectAll			: "Selectează tot",
+RemoveFormat		: "Înlătură formatarea",
+InsertLinkLbl		: "Link (Legătură web)",
+InsertLink			: "Inserează/Editează link (legătură web)",
+RemoveLink			: "Înlătură link (legătură web)",
+Anchor				: "Inserează/Editează ancoră",
+AnchorDelete		: "Şterge ancoră",
+InsertImageLbl		: "Imagine",
+InsertImage			: "Inserează/Editează imagine",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Inserează/Editează flash",
+InsertTableLbl		: "Tabel",
+InsertTable			: "Inserează/Editează tabel",
+InsertLineLbl		: "Linie",
+InsertLine			: "Inserează linie orizontă",
+InsertSpecialCharLbl: "Caracter special",
+InsertSpecialChar	: "Inserează caracter special",
+InsertSmileyLbl		: "Figură expresivă (Emoticon)",
+InsertSmiley		: "Inserează Figură expresivă (Emoticon)",
+About				: "Despre FCKeditor",
+Bold				: "Îngroşat (bold)",
+Italic				: "Înclinat (italic)",
+Underline			: "Subliniat (underline)",
+StrikeThrough		: "Tăiat (strike through)",
+Subscript			: "Indice (subscript)",
+Superscript			: "Putere (superscript)",
+LeftJustify			: "Aliniere la stânga",
+CenterJustify		: "Aliniere centrală",
+RightJustify		: "Aliniere la dreapta",
+BlockJustify		: "Aliniere în bloc (Block Justify)",
+DecreaseIndent		: "Scade indentarea",
+IncreaseIndent		: "Creşte indentarea",
+Blockquote			: "Citat",
+Undo				: "Starea anterioară (undo)",
+Redo				: "Starea ulterioară (redo)",
+NumberedListLbl		: "Listă numerotată",
+NumberedList		: "Inserează/Şterge listă numerotată",
+BulletedListLbl		: "Listă cu puncte",
+BulletedList		: "Inserează/Şterge listă cu puncte",
+ShowTableBorders	: "Arată marginile tabelului",
+ShowDetails			: "Arată detalii",
+Style				: "Stil",
+FontFormat			: "Formatare",
+Font				: "Font",
+FontSize			: "Mărime",
+TextColor			: "Culoarea textului",
+BGColor				: "Coloarea fundalului",
+Source				: "Sursa",
+Find				: "Găseşte",
+Replace				: "Înlocuieşte",
+SpellCheck			: "Verifică text",
+UniversalKeyboard	: "Tastatură universală",
+PageBreakLbl		: "Separator de pagină (Page Break)",
+PageBreak			: "Inserează separator de pagină (Page Break)",
+
+Form			: "Formular (Form)",
+Checkbox		: "Bifă (Checkbox)",
+RadioButton		: "Buton radio (RadioButton)",
+TextField		: "Câmp text (TextField)",
+Textarea		: "Suprafaţă text (Textarea)",
+HiddenField		: "Câmp ascuns (HiddenField)",
+Button			: "Buton",
+SelectionField	: "Câmp selecţie (SelectionField)",
+ImageButton		: "Buton imagine (ImageButton)",
+
+FitWindow		: "Maximizează mărimea editorului",
+ShowBlocks		: "Arată blocurile",
+
+// Context Menu
+EditLink			: "Editează Link",
+CellCM				: "Celulă",
+RowCM				: "Linie",
+ColumnCM			: "Coloană",
+InsertRowAfter		: "Inserează linie după",
+InsertRowBefore		: "Inserează linie înainte",
+DeleteRows			: "Şterge linii",
+InsertColumnAfter	: "Inserează coloană după",
+InsertColumnBefore	: "Inserează coloană înainte",
+DeleteColumns		: "Şterge celule",
+InsertCellAfter		: "Inserează celulă după",
+InsertCellBefore	: "Inserează celulă înainte",
+DeleteCells			: "Şterge celule",
+MergeCells			: "Uneşte celule",
+MergeRight			: "Uneşte la dreapta",
+MergeDown			: "Uneşte jos",
+HorizontalSplitCell	: "Împarte celula pe orizontală",
+VerticalSplitCell	: "Împarte celula pe verticală",
+TableDelete			: "Şterge tabel",
+CellProperties		: "Proprietăţile celulei",
+TableProperties		: "Proprietăţile tabelului",
+ImageProperties		: "Proprietăţile imaginii",
+FlashProperties		: "Proprietăţile flash-ului",
+
+AnchorProp			: "Proprietăţi ancoră",
+ButtonProp			: "Proprietăţi buton",
+CheckboxProp		: "Proprietăţi bifă (Checkbox)",
+HiddenFieldProp		: "Proprietăţi câmp ascuns (Hidden Field)",
+RadioButtonProp		: "Proprietăţi buton radio (Radio Button)",
+ImageButtonProp		: "Proprietăţi buton imagine (Image Button)",
+TextFieldProp		: "Proprietăţi câmp text (Text Field)",
+SelectionFieldProp	: "Proprietăţi câmp selecţie (Selection Field)",
+TextareaProp		: "Proprietăţi suprafaţă text (Textarea)",
+FormProp			: "Proprietăţi formular (Form)",
+
+FontFormats			: "Normal;Formatted;Address;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6;Normal (DIV)",	//MISSING
+
+// Alerts and Messages
+ProcessingXHTML		: "Procesăm XHTML. Vă rugăm aşteptaţi...",
+Done				: "Am terminat",
+PasteWordConfirm	: "Textul pe care doriţi să-l adăugaţi pare a fi formatat pentru Word. Doriţi să-l curăţaţi de această formatare înainte de a-l adăuga?",
+NotCompatiblePaste	: "Această facilitate e disponibilă doar pentru Microsoft Internet Explorer, versiunea 5.5 sau ulterioară. Vreţi să-l adăugaţi fără a-i fi înlăturat formatarea?",
+UnknownToolbarItem	: "Obiectul \"%1\" din bara cu opţiuni necunoscut",
+UnknownCommand		: "Comanda \"%1\" necunoscută",
+NotImplemented		: "Comandă neimplementată",
+UnknownToolbarSet	: "Grupul din bara cu opţiuni \"%1\" nu există",
+NoActiveX			: "Setările de securitate ale programului dvs. cu care navigaţi pe internet (browser) pot limita anumite funcţionalităţi ale editorului. Pentru a evita asta, trebuie să activaţi opţiunea \"Run ActiveX controls and plug-ins\". Poate veţi întâlni erori sau veţi observa funcţionalităţi lipsă.",
+BrowseServerBlocked : "The resources browser could not be opened. Asiguraţi-vă că nu e activ niciun \"popup blocker\" (funcţionalitate a programului de navigat (browser) sau a unui plug-in al acestuia de a bloca deschiderea unui noi ferestre).",
+DialogBlocked		: "Nu a fost posibilă deschiderea unei ferestre de dialog. Asiguraţi-vă că nu e activ niciun \"popup blocker\" (funcţionalitate a programului de navigat (browser) sau a unui plug-in al acestuia de a bloca deschiderea unui noi ferestre).",
+
+// Dialogs
+DlgBtnOK			: "Bine",
+DlgBtnCancel		: "Anulare",
+DlgBtnClose			: "Închidere",
+DlgBtnBrowseServer	: "Răsfoieşte server",
+DlgAdvancedTag		: "Avansat",
+DlgOpOther			: "<Altul>",
+DlgInfoTab			: "Informaţii",
+DlgAlertUrl			: "Vă rugăm să scrieţi URL-ul",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<nesetat>",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Direcţia cuvintelor",
+DlgGenLangDirLtr	: "stânga-dreapta (LTR)",
+DlgGenLangDirRtl	: "dreapta-stânga (RTL)",
+DlgGenLangCode		: "Codul limbii",
+DlgGenAccessKey		: "Tasta de acces",
+DlgGenName			: "Nume",
+DlgGenTabIndex		: "Indexul tabului",
+DlgGenLongDescr		: "Descrierea lungă URL",
+DlgGenClass			: "Clasele cu stilul paginii (CSS)",
+DlgGenTitle			: "Titlul consultativ",
+DlgGenContType		: "Tipul consultativ al titlului",
+DlgGenLinkCharset	: "Setul de caractere al resursei legate",
+DlgGenStyle			: "Stil",
+
+// Image Dialog
+DlgImgTitle			: "Proprietăţile imaginii",
+DlgImgInfoTab		: "Informaţii despre imagine",
+DlgImgBtnUpload		: "Trimite la server",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Încarcă",
+DlgImgAlt			: "Text alternativ",
+DlgImgWidth			: "Lăţime",
+DlgImgHeight		: "Înălţime",
+DlgImgLockRatio		: "Păstrează proporţiile",
+DlgBtnResetSize		: "Resetează mărimea",
+DlgImgBorder		: "Margine",
+DlgImgHSpace		: "HSpace",
+DlgImgVSpace		: "VSpace",
+DlgImgAlign			: "Aliniere",
+DlgImgAlignLeft		: "Stânga",
+DlgImgAlignAbsBottom: "Jos absolut (Abs Bottom)",
+DlgImgAlignAbsMiddle: "Mijloc absolut (Abs Middle)",
+DlgImgAlignBaseline	: "Linia de jos (Baseline)",
+DlgImgAlignBottom	: "Jos",
+DlgImgAlignMiddle	: "Mijloc",
+DlgImgAlignRight	: "Dreapta",
+DlgImgAlignTextTop	: "Text sus",
+DlgImgAlignTop		: "Sus",
+DlgImgPreview		: "Previzualizare",
+DlgImgAlertUrl		: "Vă rugăm să scrieţi URL-ul imaginii",
+DlgImgLinkTab		: "Link (Legătură web)",
+
+// Flash Dialog
+DlgFlashTitle		: "Proprietăţile flash-ului",
+DlgFlashChkPlay		: "Rulează automat",
+DlgFlashChkLoop		: "Repetă (Loop)",
+DlgFlashChkMenu		: "Activează meniul flash",
+DlgFlashScale		: "Scală",
+DlgFlashScaleAll	: "Arată tot",
+DlgFlashScaleNoBorder	: "Fără margini (No border)",
+DlgFlashScaleFit	: "Potriveşte",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Link (Legătură web)",
+DlgLnkInfoTab		: "Informaţii despre link (Legătură web)",
+DlgLnkTargetTab		: "Ţintă (Target)",
+
+DlgLnkType			: "Tipul link-ului (al legăturii web)",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Ancoră în această pagină",
+DlgLnkTypeEMail		: "E-Mail",
+DlgLnkProto			: "Protocol",
+DlgLnkProtoOther	: "<altul>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Selectaţi o ancoră",
+DlgLnkAnchorByName	: "după numele ancorei",
+DlgLnkAnchorById	: "după Id-ul elementului",
+DlgLnkNoAnchors		: "(Nicio ancoră disponibilă în document)",
+DlgLnkEMail			: "Adresă de e-mail",
+DlgLnkEMailSubject	: "Subiectul mesajului",
+DlgLnkEMailBody		: "Conţinutul mesajului",
+DlgLnkUpload		: "Încarcă",
+DlgLnkBtnUpload		: "Trimite la server",
+
+DlgLnkTarget		: "Ţintă (Target)",
+DlgLnkTargetFrame	: "<frame>",
+DlgLnkTargetPopup	: "<fereastra popup>",
+DlgLnkTargetBlank	: "Fereastră nouă (_blank)",
+DlgLnkTargetParent	: "Fereastra părinte (_parent)",
+DlgLnkTargetSelf	: "Aceeaşi fereastră (_self)",
+DlgLnkTargetTop		: "Fereastra din topul ierarhiei (_top)",
+DlgLnkTargetFrameName	: "Numele frame-ului ţintă",
+DlgLnkPopWinName	: "Numele ferestrei popup",
+DlgLnkPopWinFeat	: "Proprietăţile ferestrei popup",
+DlgLnkPopResize		: "Scalabilă",
+DlgLnkPopLocation	: "Bara de locaţie",
+DlgLnkPopMenu		: "Bara de meniu",
+DlgLnkPopScroll		: "Scroll Bars",
+DlgLnkPopStatus		: "Bara de status",
+DlgLnkPopToolbar	: "Bara de opţiuni",
+DlgLnkPopFullScrn	: "Tot ecranul (Full Screen)(IE)",
+DlgLnkPopDependent	: "Dependent (Netscape)",
+DlgLnkPopWidth		: "Lăţime",
+DlgLnkPopHeight		: "Înălţime",
+DlgLnkPopLeft		: "Poziţia la stânga",
+DlgLnkPopTop		: "Poziţia la dreapta",
+
+DlnLnkMsgNoUrl		: "Vă rugăm să scrieţi URL-ul",
+DlnLnkMsgNoEMail	: "Vă rugăm să scrieţi adresa de e-mail",
+DlnLnkMsgNoAnchor	: "Vă rugăm să selectaţi o ancoră",
+DlnLnkMsgInvPopName	: "Numele 'popup'-ului trebuie să înceapă cu un caracter alfabetic şi trebuie să nu conţină spaţii",
+
+// Color Dialog
+DlgColorTitle		: "Selectează culoare",
+DlgColorBtnClear	: "Curăţă",
+DlgColorHighlight	: "Subliniază (Highlight)",
+DlgColorSelected	: "Selectat",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Inserează o figură expresivă (Emoticon)",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Selectează caracter special",
+
+// Table Dialog
+DlgTableTitle		: "Proprietăţile tabelului",
+DlgTableRows		: "Linii",
+DlgTableColumns		: "Coloane",
+DlgTableBorder		: "Mărimea marginii",
+DlgTableAlign		: "Aliniament",
+DlgTableAlignNotSet	: "<Nesetat>",
+DlgTableAlignLeft	: "Stânga",
+DlgTableAlignCenter	: "Centru",
+DlgTableAlignRight	: "Dreapta",
+DlgTableWidth		: "Lăţime",
+DlgTableWidthPx		: "pixeli",
+DlgTableWidthPc		: "procente",
+DlgTableHeight		: "Înălţime",
+DlgTableCellSpace	: "Spaţiu între celule",
+DlgTableCellPad		: "Spaţiu în cadrul celulei",
+DlgTableCaption		: "Titlu (Caption)",
+DlgTableSummary		: "Rezumat",
+
+// Table Cell Dialog
+DlgCellTitle		: "Proprietăţile celulei",
+DlgCellWidth		: "Lăţime",
+DlgCellWidthPx		: "pixeli",
+DlgCellWidthPc		: "procente",
+DlgCellHeight		: "Înălţime",
+DlgCellWordWrap		: "Desparte cuvintele (Wrap)",
+DlgCellWordWrapNotSet	: "<Nesetat>",
+DlgCellWordWrapYes	: "Da",
+DlgCellWordWrapNo	: "Nu",
+DlgCellHorAlign		: "Aliniament orizontal",
+DlgCellHorAlignNotSet	: "<Nesetat>",
+DlgCellHorAlignLeft	: "Stânga",
+DlgCellHorAlignCenter	: "Centru",
+DlgCellHorAlignRight: "Dreapta",
+DlgCellVerAlign		: "Aliniament vertical",
+DlgCellVerAlignNotSet	: "<Nesetat>",
+DlgCellVerAlignTop	: "Sus",
+DlgCellVerAlignMiddle	: "Mijloc",
+DlgCellVerAlignBottom	: "Jos",
+DlgCellVerAlignBaseline	: "Linia de jos (Baseline)",
+DlgCellRowSpan		: "Lungimea în linii (Span)",
+DlgCellCollSpan		: "Lungimea în coloane (Span)",
+DlgCellBackColor	: "Culoarea fundalului",
+DlgCellBorderColor	: "Culoarea marginii",
+DlgCellBtnSelect	: "Selectaţi...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Găseşte şi înlocuieşte",
+
+// Find Dialog
+DlgFindTitle		: "Găseşte",
+DlgFindFindBtn		: "Găseşte",
+DlgFindNotFoundMsg	: "Textul specificat nu a fost găsit.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Replace",
+DlgReplaceFindLbl		: "Găseşte:",
+DlgReplaceReplaceLbl	: "Înlocuieşte cu:",
+DlgReplaceCaseChk		: "Deosebeşte majuscule de minuscule (Match case)",
+DlgReplaceReplaceBtn	: "Înlocuieşte",
+DlgReplaceReplAllBtn	: "Înlocuieşte tot",
+DlgReplaceWordChk		: "Doar cuvintele întregi",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "Setările de securitate ale navigatorului (browser) pe care îl folosiţi nu permit editorului să execute automat operaţiunea de tăiere. Vă rugăm folosiţi tastatura (Ctrl+X).",
+PasteErrorCopy	: "Setările de securitate ale navigatorului (browser) pe care îl folosiţi nu permit editorului să execute automat operaţiunea de copiere. Vă rugăm folosiţi tastatura (Ctrl+C).",
+
+PasteAsText		: "Adaugă ca text simplu (Plain Text)",
+PasteFromWord	: "Adaugă din Word",
+
+DlgPasteMsg2	: "Vă rugăm adăugaţi în căsuţa următoare folosind tastatura (<STRONG>Ctrl+V</STRONG>) şi apăsaţi <STRONG>OK</STRONG>.",
+DlgPasteSec		: "Din cauza setărilor de securitate ale programului dvs. cu care navigaţi pe internet (browser), editorul nu poate accesa direct datele din clipboard. Va trebui să adăugaţi din nou datele în această fereastră.",
+DlgPasteIgnoreFont		: "Ignoră definiţiile Font Face",
+DlgPasteRemoveStyles	: "Şterge definiţiile stilurilor",
+DlgPasteCleanBox		: "Şterge căsuţa",
+
+// Color Picker
+ColorAutomatic	: "Automatic",
+ColorMoreColors	: "Mai multe culori...",
+
+// Document Properties
+DocProps		: "Proprietăţile documentului",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Proprietăţile ancorei",
+DlgAnchorName		: "Numele ancorei",
+DlgAnchorErrorName	: "Vă rugăm scrieţi numele ancorei",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Nu e în dicţionar",
+DlgSpellChangeTo		: "Schimbă în",
+DlgSpellBtnIgnore		: "Ignoră",
+DlgSpellBtnIgnoreAll	: "Ignoră toate",
+DlgSpellBtnReplace		: "Înlocuieşte",
+DlgSpellBtnReplaceAll	: "Înlocuieşte tot",
+DlgSpellBtnUndo			: "Starea anterioară (undo)",
+DlgSpellNoSuggestions	: "- Fără sugestii -",
+DlgSpellProgress		: "Verificarea textului în desfăşurare...",
+DlgSpellNoMispell		: "Verificarea textului terminată: Nicio greşeală găsită",
+DlgSpellNoChanges		: "Verificarea textului terminată: Niciun cuvânt modificat",
+DlgSpellOneChange		: "Verificarea textului terminată: Un cuvânt modificat",
+DlgSpellManyChanges		: "Verificarea textului terminată: 1% cuvinte modificate",
+
+IeSpellDownload			: "Unealta pentru verificat textul (Spell checker) neinstalată. Doriţi să o descărcaţi acum?",
+
+// Button Dialog
+DlgButtonText		: "Text (Valoare)",
+DlgButtonType		: "Tip",
+DlgButtonTypeBtn	: "Button",
+DlgButtonTypeSbm	: "Submit",
+DlgButtonTypeRst	: "Reset",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Nume",
+DlgCheckboxValue	: "Valoare",
+DlgCheckboxSelected	: "Selectat",
+
+// Form Dialog
+DlgFormName		: "Nume",
+DlgFormAction	: "Acţiune",
+DlgFormMethod	: "Metodă",
+
+// Select Field Dialog
+DlgSelectName		: "Nume",
+DlgSelectValue		: "Valoare",
+DlgSelectSize		: "Mărime",
+DlgSelectLines		: "linii",
+DlgSelectChkMulti	: "Permite selecţii multiple",
+DlgSelectOpAvail	: "Opţiuni disponibile",
+DlgSelectOpText		: "Text",
+DlgSelectOpValue	: "Valoare",
+DlgSelectBtnAdd		: "Adaugă",
+DlgSelectBtnModify	: "Modifică",
+DlgSelectBtnUp		: "Sus",
+DlgSelectBtnDown	: "Jos",
+DlgSelectBtnSetValue : "Setează ca valoare selectată",
+DlgSelectBtnDelete	: "Şterge",
+
+// Textarea Dialog
+DlgTextareaName	: "Nume",
+DlgTextareaCols	: "Coloane",
+DlgTextareaRows	: "Linii",
+
+// Text Field Dialog
+DlgTextName			: "Nume",
+DlgTextValue		: "Valoare",
+DlgTextCharWidth	: "Lărgimea caracterului",
+DlgTextMaxChars		: "Caractere maxime",
+DlgTextType			: "Tip",
+DlgTextTypeText		: "Text",
+DlgTextTypePass		: "Parolă",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Nume",
+DlgHiddenValue	: "Valoare",
+
+// Bulleted List Dialog
+BulletedListProp	: "Proprietăţile listei punctate (Bulleted List)",
+NumberedListProp	: "Proprietăţile listei numerotate (Numbered List)",
+DlgLstStart			: "Start",
+DlgLstType			: "Tip",
+DlgLstTypeCircle	: "Cerc",
+DlgLstTypeDisc		: "Disc",
+DlgLstTypeSquare	: "Pătrat",
+DlgLstTypeNumbers	: "Numere (1, 2, 3)",
+DlgLstTypeLCase		: "Minuscule-litere mici (a, b, c)",
+DlgLstTypeUCase		: "Majuscule (A, B, C)",
+DlgLstTypeSRoman	: "Cifre romane mici (i, ii, iii)",
+DlgLstTypeLRoman	: "Cifre romane mari (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "General",
+DlgDocBackTab		: "Fundal",
+DlgDocColorsTab		: "Culori si margini",
+DlgDocMetaTab		: "Meta Data",
+
+DlgDocPageTitle		: "Titlul paginii",
+DlgDocLangDir		: "Descrierea limbii",
+DlgDocLangDirLTR	: "stânga-dreapta (LTR)",
+DlgDocLangDirRTL	: "dreapta-stânga (RTL)",
+DlgDocLangCode		: "Codul limbii",
+DlgDocCharSet		: "Encoding setului de caractere",
+DlgDocCharSetCE		: "Central european",
+DlgDocCharSetCT		: "Chinezesc tradiţional (Big5)",
+DlgDocCharSetCR		: "Chirilic",
+DlgDocCharSetGR		: "Grecesc",
+DlgDocCharSetJP		: "Japonez",
+DlgDocCharSetKR		: "Corean",
+DlgDocCharSetTR		: "Turcesc",
+DlgDocCharSetUN		: "Unicode (UTF-8)",
+DlgDocCharSetWE		: "Vest european",
+DlgDocCharSetOther	: "Alt encoding al setului de caractere",
+
+DlgDocDocType		: "Document Type Heading",
+DlgDocDocTypeOther	: "Alt Document Type Heading",
+DlgDocIncXHTML		: "Include declaraţii XHTML",
+DlgDocBgColor		: "Culoarea fundalului (Background Color)",
+DlgDocBgImage		: "URL-ul imaginii din fundal (Background Image URL)",
+DlgDocBgNoScroll	: "Fundal neflotant, fix (Nonscrolling Background)",
+DlgDocCText			: "Text",
+DlgDocCLink			: "Link (Legătură web)",
+DlgDocCVisited		: "Link (Legătură web) vizitat",
+DlgDocCActive		: "Link (Legătură web) activ",
+DlgDocMargins		: "Marginile paginii",
+DlgDocMaTop			: "Sus",
+DlgDocMaLeft		: "Stânga",
+DlgDocMaRight		: "Dreapta",
+DlgDocMaBottom		: "Jos",
+DlgDocMeIndex		: "Cuvinte cheie după care se va indexa documentul (separate prin virgulă)",
+DlgDocMeDescr		: "Descrierea documentului",
+DlgDocMeAuthor		: "Autor",
+DlgDocMeCopy		: "Drepturi de autor",
+DlgDocPreview		: "Previzualizare",
+
+// Templates Dialog
+Templates			: "Template-uri (şabloane)",
+DlgTemplatesTitle	: "Template-uri (şabloane) de conţinut",
+DlgTemplatesSelMsg	: "Vă rugăm selectaţi template-ul (şablonul) ce se va deschide în editor<br>(conţinutul actual va fi pierdut):",
+DlgTemplatesLoading	: "Se încarcă lista cu template-uri (şabloane). Vă rugăm aşteptaţi...",
+DlgTemplatesNoTpl	: "(Niciun template (şablon) definit)",
+DlgTemplatesReplace	: "Înlocuieşte cuprinsul actual",
+
+// About Dialog
+DlgAboutAboutTab	: "Despre",
+DlgAboutBrowserInfoTab	: "Informaţii browser",
+DlgAboutLicenseTab	: "Licenţă",
+DlgAboutVersion		: "versiune",
+DlgAboutInfo		: "Pentru informaţii amănunţite, vizitaţi"
+};
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/ru.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/ru.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/ru.js	(revision 1280)
@@ -0,0 +1,516 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Russian language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Свернуть панель инструментов",
+ToolbarExpand		: "Развернуть панель инструментов",
+
+// Toolbar Items and Context Menu
+Save				: "Сохранить",
+NewPage				: "Новая страница",
+Preview				: "Предварительный просмотр",
+Cut					: "Вырезать",
+Copy				: "Копировать",
+Paste				: "Вставить",
+PasteText			: "Вставить только текст",
+PasteWord			: "Вставить из Word",
+Print				: "Печать",
+SelectAll			: "Выделить все",
+RemoveFormat		: "Убрать форматирование",
+InsertLinkLbl		: "Ссылка",
+InsertLink			: "Вставить/Редактировать ссылку",
+RemoveLink			: "Убрать ссылку",
+Anchor				: "Вставить/Редактировать якорь",
+AnchorDelete		: "Remove Anchor",	//MISSING
+InsertImageLbl		: "Изображение",
+InsertImage			: "Вставить/Редактировать изображение",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Вставить/Редактировать Flash",
+InsertTableLbl		: "Таблица",
+InsertTable			: "Вставить/Редактировать таблицу",
+InsertLineLbl		: "Линия",
+InsertLine			: "Вставить горизонтальную линию",
+InsertSpecialCharLbl: "Специальный символ",
+InsertSpecialChar	: "Вставить специальный символ",
+InsertSmileyLbl		: "Смайлик",
+InsertSmiley		: "Вставить смайлик",
+About				: "О FCKeditor",
+Bold				: "Жирный",
+Italic				: "Курсив",
+Underline			: "Подчеркнутый",
+StrikeThrough		: "Зачеркнутый",
+Subscript			: "Подстрочный индекс",
+Superscript			: "Надстрочный индекс",
+LeftJustify			: "По левому краю",
+CenterJustify		: "По центру",
+RightJustify		: "По правому краю",
+BlockJustify		: "По ширине",
+DecreaseIndent		: "Уменьшить отступ",
+IncreaseIndent		: "Увеличить отступ",
+Blockquote			: "Blockquote",	//MISSING
+Undo				: "Отменить",
+Redo				: "Повторить",
+NumberedListLbl		: "Нумерованный список",
+NumberedList		: "Вставить/Удалить нумерованный список",
+BulletedListLbl		: "Маркированный список",
+BulletedList		: "Вставить/Удалить маркированный список",
+ShowTableBorders	: "Показать бордюры таблицы",
+ShowDetails			: "Показать детали",
+Style				: "Стиль",
+FontFormat			: "Форматирование",
+Font				: "Шрифт",
+FontSize			: "Размер",
+TextColor			: "Цвет текста",
+BGColor				: "Цвет фона",
+Source				: "Источник",
+Find				: "Найти",
+Replace				: "Заменить",
+SpellCheck			: "Проверить орфографию",
+UniversalKeyboard	: "Универсальная клавиатура",
+PageBreakLbl		: "Разрыв страницы",
+PageBreak			: "Вставить разрыв страницы",
+
+Form			: "Форма",
+Checkbox		: "Флаговая кнопка",
+RadioButton		: "Кнопка выбора",
+TextField		: "Текстовое поле",
+Textarea		: "Текстовая область",
+HiddenField		: "Скрытое поле",
+Button			: "Кнопка",
+SelectionField	: "Список",
+ImageButton		: "Кнопка с изображением",
+
+FitWindow		: "Развернуть окно редактора",
+ShowBlocks		: "Show Blocks",	//MISSING
+
+// Context Menu
+EditLink			: "Вставить ссылку",
+CellCM				: "Ячейка",
+RowCM				: "Строка",
+ColumnCM			: "Колонка",
+InsertRowAfter		: "Insert Row After",	//MISSING
+InsertRowBefore		: "Insert Row Before",	//MISSING
+DeleteRows			: "Удалить строки",
+InsertColumnAfter	: "Insert Column After",	//MISSING
+InsertColumnBefore	: "Insert Column Before",	//MISSING
+DeleteColumns		: "Удалить колонки",
+InsertCellAfter		: "Insert Cell After",	//MISSING
+InsertCellBefore	: "Insert Cell Before",	//MISSING
+DeleteCells			: "Удалить ячейки",
+MergeCells			: "Соединить ячейки",
+MergeRight			: "Merge Right",	//MISSING
+MergeDown			: "Merge Down",	//MISSING
+HorizontalSplitCell	: "Split Cell Horizontally",	//MISSING
+VerticalSplitCell	: "Split Cell Vertically",	//MISSING
+TableDelete			: "Удалить таблицу",
+CellProperties		: "Свойства ячейки",
+TableProperties		: "Свойства таблицы",
+ImageProperties		: "Свойства изображения",
+FlashProperties		: "Свойства Flash",
+
+AnchorProp			: "Свойства якоря",
+ButtonProp			: "Свойства кнопки",
+CheckboxProp		: "Свойства флаговой кнопки",
+HiddenFieldProp		: "Свойства скрытого поля",
+RadioButtonProp		: "Свойства кнопки выбора",
+ImageButtonProp		: "Свойства кнопки с изображением",
+TextFieldProp		: "Свойства текстового поля",
+SelectionFieldProp	: "Свойства списка",
+TextareaProp		: "Свойства текстовой области",
+FormProp			: "Свойства формы",
+
+FontFormats			: "Нормальный;Форматированный;Адрес;Заголовок 1;Заголовок 2;Заголовок 3;Заголовок 4;Заголовок 5;Заголовок 6;Нормальный (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "Обработка XHTML. Пожалуйста подождите...",
+Done				: "Сделано",
+PasteWordConfirm	: "Текст, который вы хотите вставить, похож на копируемый из Word. Вы хотите очистить его перед вставкой?",
+NotCompatiblePaste	: "Эта команда доступна для Internet Explorer версии 5.5 или выше. Вы хотите вставить без очистки?",
+UnknownToolbarItem	: "Не известный элемент панели инструментов \"%1\"",
+UnknownCommand		: "Не известное имя команды \"%1\"",
+NotImplemented		: "Команда не реализована",
+UnknownToolbarSet	: "Панель инструментов \"%1\" не существует",
+NoActiveX			: "Настройки безопасности вашего браузера могут ограничивать некоторые свойства редактора. Вы должны включить опцию \"Запускать элементы управления ActiveX и плугины\". Вы можете видеть ошибки и замечать отсутствие возможностей.",
+BrowseServerBlocked : "Ресурсы браузера не могут быть открыты. Проверьте что блокировки всплывающих окон выключены.",
+DialogBlocked		: "Не возможно открыть окно диалога. Проверьте что блокировки всплывающих окон выключены.",
+
+// Dialogs
+DlgBtnOK			: "ОК",
+DlgBtnCancel		: "Отмена",
+DlgBtnClose			: "Закрыть",
+DlgBtnBrowseServer	: "Просмотреть на сервере",
+DlgAdvancedTag		: "Расширенный",
+DlgOpOther			: "<Другое>",
+DlgInfoTab			: "Информация",
+DlgAlertUrl			: "Пожалуйста вставьте URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<не определено>",
+DlgGenId			: "Идентификатор",
+DlgGenLangDir		: "Направление языка",
+DlgGenLangDirLtr	: "Слева на право (LTR)",
+DlgGenLangDirRtl	: "Справа на лево (RTL)",
+DlgGenLangCode		: "Язык",
+DlgGenAccessKey		: "Горячая клавиша",
+DlgGenName			: "Имя",
+DlgGenTabIndex		: "Последовательность перехода",
+DlgGenLongDescr		: "Длинное описание URL",
+DlgGenClass			: "Класс CSS",
+DlgGenTitle			: "Заголовок",
+DlgGenContType		: "Тип содержимого",
+DlgGenLinkCharset	: "Кодировка",
+DlgGenStyle			: "Стиль CSS",
+
+// Image Dialog
+DlgImgTitle			: "Свойства изображения",
+DlgImgInfoTab		: "Информация о изображении",
+DlgImgBtnUpload		: "Послать на сервер",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Закачать",
+DlgImgAlt			: "Альтернативный текст",
+DlgImgWidth			: "Ширина",
+DlgImgHeight		: "Высота",
+DlgImgLockRatio		: "Сохранять пропорции",
+DlgBtnResetSize		: "Сбросить размер",
+DlgImgBorder		: "Бордюр",
+DlgImgHSpace		: "Горизонтальный отступ",
+DlgImgVSpace		: "Вертикальный отступ",
+DlgImgAlign			: "Выравнивание",
+DlgImgAlignLeft		: "По левому краю",
+DlgImgAlignAbsBottom: "Абс понизу",
+DlgImgAlignAbsMiddle: "Абс посередине",
+DlgImgAlignBaseline	: "По базовой линии",
+DlgImgAlignBottom	: "Понизу",
+DlgImgAlignMiddle	: "Посередине",
+DlgImgAlignRight	: "По правому краю",
+DlgImgAlignTextTop	: "Текст наверху",
+DlgImgAlignTop		: "По верху",
+DlgImgPreview		: "Предварительный просмотр",
+DlgImgAlertUrl		: "Пожалуйста введите URL изображения",
+DlgImgLinkTab		: "Ссылка",
+
+// Flash Dialog
+DlgFlashTitle		: "Свойства Flash",
+DlgFlashChkPlay		: "Авто проигрывание",
+DlgFlashChkLoop		: "Повтор",
+DlgFlashChkMenu		: "Включить меню Flash",
+DlgFlashScale		: "Масштабировать",
+DlgFlashScaleAll	: "Показывать все",
+DlgFlashScaleNoBorder	: "Без бордюра",
+DlgFlashScaleFit	: "Точное совпадение",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Ссылка",
+DlgLnkInfoTab		: "Информация ссылки",
+DlgLnkTargetTab		: "Цель",
+
+DlgLnkType			: "Тип ссылки",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Якорь на эту страницу",
+DlgLnkTypeEMail		: "Эл. почта",
+DlgLnkProto			: "Протокол",
+DlgLnkProtoOther	: "<другое>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Выберите якорь",
+DlgLnkAnchorByName	: "По имени якоря",
+DlgLnkAnchorById	: "По идентификатору элемента",
+DlgLnkNoAnchors		: "(Нет якорей доступных в этом документе)",
+DlgLnkEMail			: "Адрес эл. почты",
+DlgLnkEMailSubject	: "Заголовок сообщения",
+DlgLnkEMailBody		: "Тело сообщения",
+DlgLnkUpload		: "Закачать",
+DlgLnkBtnUpload		: "Послать на сервер",
+
+DlgLnkTarget		: "Цель",
+DlgLnkTargetFrame	: "<фрейм>",
+DlgLnkTargetPopup	: "<всплывающее окно>",
+DlgLnkTargetBlank	: "Новое окно (_blank)",
+DlgLnkTargetParent	: "Родительское окно (_parent)",
+DlgLnkTargetSelf	: "Тоже окно (_self)",
+DlgLnkTargetTop		: "Самое верхнее окно (_top)",
+DlgLnkTargetFrameName	: "Имя целевого фрейма",
+DlgLnkPopWinName	: "Имя всплывающего окна",
+DlgLnkPopWinFeat	: "Свойства всплывающего окна",
+DlgLnkPopResize		: "Изменяющееся в размерах",
+DlgLnkPopLocation	: "Панель локации",
+DlgLnkPopMenu		: "Панель меню",
+DlgLnkPopScroll		: "Полосы прокрутки",
+DlgLnkPopStatus		: "Строка состояния",
+DlgLnkPopToolbar	: "Панель инструментов",
+DlgLnkPopFullScrn	: "Полный экран (IE)",
+DlgLnkPopDependent	: "Зависимый (Netscape)",
+DlgLnkPopWidth		: "Ширина",
+DlgLnkPopHeight		: "Высота",
+DlgLnkPopLeft		: "Позиция слева",
+DlgLnkPopTop		: "Позиция сверху",
+
+DlnLnkMsgNoUrl		: "Пожалуйста введите URL ссылки",
+DlnLnkMsgNoEMail	: "Пожалуйста введите адрес эл. почты",
+DlnLnkMsgNoAnchor	: "Пожалуйста выберете якорь",
+DlnLnkMsgInvPopName	: "Название вспывающего окна должно начинаться буквы и не может содержать пробелов",
+
+// Color Dialog
+DlgColorTitle		: "Выберите цвет",
+DlgColorBtnClear	: "Очистить",
+DlgColorHighlight	: "Подсвеченный",
+DlgColorSelected	: "Выбранный",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Вставить смайлик",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Выберите специальный символ",
+
+// Table Dialog
+DlgTableTitle		: "Свойства таблицы",
+DlgTableRows		: "Строки",
+DlgTableColumns		: "Колонки",
+DlgTableBorder		: "Размер бордюра",
+DlgTableAlign		: "Выравнивание",
+DlgTableAlignNotSet	: "<Не уст.>",
+DlgTableAlignLeft	: "Слева",
+DlgTableAlignCenter	: "По центру",
+DlgTableAlignRight	: "Справа",
+DlgTableWidth		: "Ширина",
+DlgTableWidthPx		: "пикселей",
+DlgTableWidthPc		: "процентов",
+DlgTableHeight		: "Высота",
+DlgTableCellSpace	: "Промежуток (spacing)",
+DlgTableCellPad		: "Отступ (padding)",
+DlgTableCaption		: "Заголовок",
+DlgTableSummary		: "Резюме",
+
+// Table Cell Dialog
+DlgCellTitle		: "Свойства ячейки",
+DlgCellWidth		: "Ширина",
+DlgCellWidthPx		: "пикселей",
+DlgCellWidthPc		: "процентов",
+DlgCellHeight		: "Высота",
+DlgCellWordWrap		: "Заворачивание текста",
+DlgCellWordWrapNotSet	: "<Не уст.>",
+DlgCellWordWrapYes	: "Да",
+DlgCellWordWrapNo	: "Нет",
+DlgCellHorAlign		: "Гор. выравнивание",
+DlgCellHorAlignNotSet	: "<Не уст.>",
+DlgCellHorAlignLeft	: "Слева",
+DlgCellHorAlignCenter	: "По центру",
+DlgCellHorAlignRight: "Справа",
+DlgCellVerAlign		: "Верт. выравнивание",
+DlgCellVerAlignNotSet	: "<Не уст.>",
+DlgCellVerAlignTop	: "Сверху",
+DlgCellVerAlignMiddle	: "Посередине",
+DlgCellVerAlignBottom	: "Снизу",
+DlgCellVerAlignBaseline	: "По базовой линии",
+DlgCellRowSpan		: "Диапазон строк (span)",
+DlgCellCollSpan		: "Диапазон колонок (span)",
+DlgCellBackColor	: "Цвет фона",
+DlgCellBorderColor	: "Цвет бордюра",
+DlgCellBtnSelect	: "Выберите...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Find and Replace",	//MISSING
+
+// Find Dialog
+DlgFindTitle		: "Найти",
+DlgFindFindBtn		: "Найти",
+DlgFindNotFoundMsg	: "Указанный текст не найден.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Заменить",
+DlgReplaceFindLbl		: "Найти:",
+DlgReplaceReplaceLbl	: "Заменить на:",
+DlgReplaceCaseChk		: "Учитывать регистр",
+DlgReplaceReplaceBtn	: "Заменить",
+DlgReplaceReplAllBtn	: "Заменить все",
+DlgReplaceWordChk		: "Совпадение целых слов",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "Настройки безопасности вашего браузера не позволяют редактору автоматически выполнять операции вырезания. Пожалуйста используйте клавиатуру для этого (Ctrl+X).",
+PasteErrorCopy	: "Настройки безопасности вашего браузера не позволяют редактору автоматически выполнять операции копирования. Пожалуйста используйте клавиатуру для этого (Ctrl+C).",
+
+PasteAsText		: "Вставить только текст",
+PasteFromWord	: "Вставить из Word",
+
+DlgPasteMsg2	: "Пожалуйста вставьте текст в прямоугольник используя сочетание клавиш (<STRONG>Ctrl+V</STRONG>) и нажмите <STRONG>OK</STRONG>.",
+DlgPasteSec		: "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.",	//MISSING
+DlgPasteIgnoreFont		: "Игнорировать определения гарнитуры",
+DlgPasteRemoveStyles	: "Убрать определения стилей",
+DlgPasteCleanBox		: "Очистить",
+
+// Color Picker
+ColorAutomatic	: "Автоматический",
+ColorMoreColors	: "Цвета...",
+
+// Document Properties
+DocProps		: "Свойства документа",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Свойства якоря",
+DlgAnchorName		: "Имя якоря",
+DlgAnchorErrorName	: "Пожалуйста введите имя якоря",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Нет в словаре",
+DlgSpellChangeTo		: "Заменить на",
+DlgSpellBtnIgnore		: "Игнорировать",
+DlgSpellBtnIgnoreAll	: "Игнорировать все",
+DlgSpellBtnReplace		: "Заменить",
+DlgSpellBtnReplaceAll	: "Заменить все",
+DlgSpellBtnUndo			: "Отменить",
+DlgSpellNoSuggestions	: "- Нет предположений -",
+DlgSpellProgress		: "Идет проверка орфографии...",
+DlgSpellNoMispell		: "Проверка орфографии закончена: ошибок не найдено",
+DlgSpellNoChanges		: "Проверка орфографии закончена: ни одного слова не изменено",
+DlgSpellOneChange		: "Проверка орфографии закончена: одно слово изменено",
+DlgSpellManyChanges		: "Проверка орфографии закончена: 1% слов изменен",
+
+IeSpellDownload			: "Модуль проверки орфографии не установлен. Хотите скачать его сейчас?",
+
+// Button Dialog
+DlgButtonText		: "Текст (Значение)",
+DlgButtonType		: "Тип",
+DlgButtonTypeBtn	: "Кнопка",
+DlgButtonTypeSbm	: "Отправить",
+DlgButtonTypeRst	: "Сбросить",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Имя",
+DlgCheckboxValue	: "Значение",
+DlgCheckboxSelected	: "Выбранная",
+
+// Form Dialog
+DlgFormName		: "Имя",
+DlgFormAction	: "Действие",
+DlgFormMethod	: "Метод",
+
+// Select Field Dialog
+DlgSelectName		: "Имя",
+DlgSelectValue		: "Значение",
+DlgSelectSize		: "Размер",
+DlgSelectLines		: "линии",
+DlgSelectChkMulti	: "Разрешить множественный выбор",
+DlgSelectOpAvail	: "Доступные варианты",
+DlgSelectOpText		: "Текст",
+DlgSelectOpValue	: "Значение",
+DlgSelectBtnAdd		: "Добавить",
+DlgSelectBtnModify	: "Модифицировать",
+DlgSelectBtnUp		: "Вверх",
+DlgSelectBtnDown	: "Вниз",
+DlgSelectBtnSetValue : "Установить как выбранное значение",
+DlgSelectBtnDelete	: "Удалить",
+
+// Textarea Dialog
+DlgTextareaName	: "Имя",
+DlgTextareaCols	: "Колонки",
+DlgTextareaRows	: "Строки",
+
+// Text Field Dialog
+DlgTextName			: "Имя",
+DlgTextValue		: "Значение",
+DlgTextCharWidth	: "Ширина",
+DlgTextMaxChars		: "Макс. кол-во символов",
+DlgTextType			: "Тип",
+DlgTextTypeText		: "Текст",
+DlgTextTypePass		: "Пароль",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Имя",
+DlgHiddenValue	: "Значение",
+
+// Bulleted List Dialog
+BulletedListProp	: "Свойства маркированного списка",
+NumberedListProp	: "Свойства нумерованного списка",
+DlgLstStart			: "Начало",
+DlgLstType			: "Тип",
+DlgLstTypeCircle	: "Круг",
+DlgLstTypeDisc		: "Диск",
+DlgLstTypeSquare	: "Квадрат",
+DlgLstTypeNumbers	: "Номера (1, 2, 3)",
+DlgLstTypeLCase		: "Буквы нижнего регистра (a, b, c)",
+DlgLstTypeUCase		: "Буквы верхнего регистра (A, B, C)",
+DlgLstTypeSRoman	: "Малые римские буквы (i, ii, iii)",
+DlgLstTypeLRoman	: "Большие римские буквы (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Общие",
+DlgDocBackTab		: "Задний фон",
+DlgDocColorsTab		: "Цвета и отступы",
+DlgDocMetaTab		: "Мета данные",
+
+DlgDocPageTitle		: "Заголовок страницы",
+DlgDocLangDir		: "Направление текста",
+DlgDocLangDirLTR	: "Слева на право (LTR)",
+DlgDocLangDirRTL	: "Справа на лево (RTL)",
+DlgDocLangCode		: "Код языка",
+DlgDocCharSet		: "Кодировка набора символов",
+DlgDocCharSetCE		: "Центрально-европейская",
+DlgDocCharSetCT		: "Китайская традиционная (Big5)",
+DlgDocCharSetCR		: "Кириллица",
+DlgDocCharSetGR		: "Греческая",
+DlgDocCharSetJP		: "Японская",
+DlgDocCharSetKR		: "Корейская",
+DlgDocCharSetTR		: "Турецкая",
+DlgDocCharSetUN		: "Юникод (UTF-8)",
+DlgDocCharSetWE		: "Западно-европейская",
+DlgDocCharSetOther	: "Другая кодировка набора символов",
+
+DlgDocDocType		: "Заголовок типа документа",
+DlgDocDocTypeOther	: "Другой заголовок типа документа",
+DlgDocIncXHTML		: "Включить XHTML объявления",
+DlgDocBgColor		: "Цвет фона",
+DlgDocBgImage		: "URL изображения фона",
+DlgDocBgNoScroll	: "Нескроллируемый фон",
+DlgDocCText			: "Текст",
+DlgDocCLink			: "Ссылка",
+DlgDocCVisited		: "Посещенная ссылка",
+DlgDocCActive		: "Активная ссылка",
+DlgDocMargins		: "Отступы страницы",
+DlgDocMaTop			: "Верхний",
+DlgDocMaLeft		: "Левый",
+DlgDocMaRight		: "Правый",
+DlgDocMaBottom		: "Нижний",
+DlgDocMeIndex		: "Ключевые слова документа (разделенные запятой)",
+DlgDocMeDescr		: "Описание документа",
+DlgDocMeAuthor		: "Автор",
+DlgDocMeCopy		: "Авторские права",
+DlgDocPreview		: "Предварительный просмотр",
+
+// Templates Dialog
+Templates			: "Шаблоны",
+DlgTemplatesTitle	: "Шаблоны содержимого",
+DlgTemplatesSelMsg	: "Пожалуйста выберете шаблон для открытия в редакторе<br>(текущее содержимое будет потеряно):",
+DlgTemplatesLoading	: "Загрузка списка шаблонов. Пожалуйста подождите...",
+DlgTemplatesNoTpl	: "(Ни одного шаблона не определено)",
+DlgTemplatesReplace	: "Заменить текущее содержание",
+
+// About Dialog
+DlgAboutAboutTab	: "О программе",
+DlgAboutBrowserInfoTab	: "Информация браузера",
+DlgAboutLicenseTab	: "Лицензия",
+DlgAboutVersion		: "Версия",
+DlgAboutInfo		: "Для большей информации, посетите"
+};
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/sk.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/sk.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/sk.js	(revision 1280)
@@ -0,0 +1,516 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Slovak language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Skryť panel nástrojov",
+ToolbarExpand		: "Zobraziť panel nástrojov",
+
+// Toolbar Items and Context Menu
+Save				: "Uložit",
+NewPage				: "Nová stránka",
+Preview				: "Náhľad",
+Cut					: "Vystrihnúť",
+Copy				: "Kopírovať",
+Paste				: "Vložiť",
+PasteText			: "Vložiť ako čistý text",
+PasteWord			: "Vložiť z Wordu",
+Print				: "Tlač",
+SelectAll			: "Vybrať všetko",
+RemoveFormat		: "Odstrániť formátovanie",
+InsertLinkLbl		: "Odkaz",
+InsertLink			: "Vložiť/zmeniť odkaz",
+RemoveLink			: "Odstrániť odkaz",
+Anchor				: "Vložiť/zmeniť kotvu",
+AnchorDelete		: "Remove Anchor",	//MISSING
+InsertImageLbl		: "Obrázok",
+InsertImage			: "Vložiť/zmeniť obrázok",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Vložiť/zmeniť Flash",
+InsertTableLbl		: "Tabuľka",
+InsertTable			: "Vložiť/zmeniť tabuľku",
+InsertLineLbl		: "Čiara",
+InsertLine			: "Vložiť vodorovnú čiaru",
+InsertSpecialCharLbl: "Špeciálne znaky",
+InsertSpecialChar	: "Vložiť špeciálne znaky",
+InsertSmileyLbl		: "Smajlíky",
+InsertSmiley		: "Vložiť smajlíka",
+About				: "O aplikáci FCKeditor",
+Bold				: "Tučné",
+Italic				: "Kurzíva",
+Underline			: "Podčiarknuté",
+StrikeThrough		: "Prečiarknuté",
+Subscript			: "Dolný index",
+Superscript			: "Horný index",
+LeftJustify			: "Zarovnať vľavo",
+CenterJustify		: "Zarovnať na stred",
+RightJustify		: "Zarovnať vpravo",
+BlockJustify		: "Zarovnať do bloku",
+DecreaseIndent		: "Zmenšiť odsadenie",
+IncreaseIndent		: "Zväčšiť odsadenie",
+Blockquote			: "Blockquote",	//MISSING
+Undo				: "Späť",
+Redo				: "Znovu",
+NumberedListLbl		: "Číslovanie",
+NumberedList		: "Vložiť/odstrániť číslovaný zoznam",
+BulletedListLbl		: "Odrážky",
+BulletedList		: "Vložiť/odstraniť odrážky",
+ShowTableBorders	: "Zobraziť okraje tabuliek",
+ShowDetails			: "Zobraziť podrobnosti",
+Style				: "Štýl",
+FontFormat			: "Formát",
+Font				: "Písmo",
+FontSize			: "Veľkosť",
+TextColor			: "Farba textu",
+BGColor				: "Farba pozadia",
+Source				: "Zdroj",
+Find				: "Hľadať",
+Replace				: "Nahradiť",
+SpellCheck			: "Kontrola pravopisu",
+UniversalKeyboard	: "Univerzálna klávesnica",
+PageBreakLbl		: "Oddeľovač stránky",
+PageBreak			: "Vložiť oddeľovač stránky",
+
+Form			: "Formulár",
+Checkbox		: "Zaškrtávacie políčko",
+RadioButton		: "Prepínač",
+TextField		: "Textové pole",
+Textarea		: "Textová oblasť",
+HiddenField		: "Skryté pole",
+Button			: "Tlačíidlo",
+SelectionField	: "Rozbaľovací zoznam",
+ImageButton		: "Obrázkové tlačidlo",
+
+FitWindow		: "Maximalizovať veľkosť okna editora",
+ShowBlocks		: "Show Blocks",	//MISSING
+
+// Context Menu
+EditLink			: "Zmeniť odkaz",
+CellCM				: "Bunka",
+RowCM				: "Riadok",
+ColumnCM			: "Stĺpec",
+InsertRowAfter		: "Insert Row After",	//MISSING
+InsertRowBefore		: "Insert Row Before",	//MISSING
+DeleteRows			: "Vymazať riadok",
+InsertColumnAfter	: "Insert Column After",	//MISSING
+InsertColumnBefore	: "Insert Column Before",	//MISSING
+DeleteColumns		: "Zmazať stĺpec",
+InsertCellAfter		: "Insert Cell After",	//MISSING
+InsertCellBefore	: "Insert Cell Before",	//MISSING
+DeleteCells			: "Vymazať bunky",
+MergeCells			: "Zlúčiť bunky",
+MergeRight			: "Merge Right",	//MISSING
+MergeDown			: "Merge Down",	//MISSING
+HorizontalSplitCell	: "Split Cell Horizontally",	//MISSING
+VerticalSplitCell	: "Split Cell Vertically",	//MISSING
+TableDelete			: "Vymazať tabuľku",
+CellProperties		: "Vlastnosti bunky",
+TableProperties		: "Vlastnosti tabuľky",
+ImageProperties		: "Vlastnosti obrázku",
+FlashProperties		: "Vlastnosti Flashu",
+
+AnchorProp			: "Vlastnosti kotvy",
+ButtonProp			: "Vlastnosti tlačidla",
+CheckboxProp		: "Vlastnosti zaškrtávacieho políčka",
+HiddenFieldProp		: "Vlastnosti skrytého poľa",
+RadioButtonProp		: "Vlastnosti prepínača",
+ImageButtonProp		: "Vlastnosti obrázkového tlačidla",
+TextFieldProp		: "Vlastnosti textového poľa",
+SelectionFieldProp	: "Vlastnosti rozbaľovacieho zoznamu",
+TextareaProp		: "Vlastnosti textovej oblasti",
+FormProp			: "Vlastnosti formulára",
+
+FontFormats			: "Normálny;Formátovaný;Adresa;Nadpis 1;Nadpis 2;Nadpis 3;Nadpis 4;Nadpis 5;Nadpis 6;Odsek (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "Prebieha spracovanie XHTML. Čakajte prosím...",
+Done				: "Dokončené.",
+PasteWordConfirm	: "Vyzerá to tak, že vkladaný text je kopírovaný z Wordu. Chcete ho pred vložením vyčistiť?",
+NotCompatiblePaste	: "Tento príkaz je dostupný len v prehliadači Internet Explorer verzie 5.5 alebo vyššej. Chcete vložiť text bez vyčistenia?",
+UnknownToolbarItem	: "Neznáma položka panela nástrojov \"%1\"",
+UnknownCommand		: "Neznámy príkaz \"%1\"",
+NotImplemented		: "Príkaz nie je implementovaný",
+UnknownToolbarSet	: "Panel nástrojov \"%1\" neexistuje",
+NoActiveX			: "Bezpečnostné nastavenia vášho prehliadača môžu obmedzovať niektoré funkcie editora. Pre ich plnú funkčnosť musíte zapnúť voľbu \"Spúšťať ActiveX moduly a zásuvné moduly\", inak sa môžete stretnúť s chybami a nefunkčnosťou niektorých funkcií.",
+BrowseServerBlocked : "Prehliadač zdrojových prvkov nebolo možné otvoriť. Uistite sa, že máte vypnuté všetky blokovače vyskakujúcich okien.",
+DialogBlocked		: "Dialógové okno nebolo možné otvoriť. Uistite sa, že máte vypnuté všetky blokovače vyskakujúcich okien.",
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Zrušiť",
+DlgBtnClose			: "Zavrieť",
+DlgBtnBrowseServer	: "Prechádzať server",
+DlgAdvancedTag		: "Rozšírené",
+DlgOpOther			: "<Ďalšie>",
+DlgInfoTab			: "Info",
+DlgAlertUrl			: "Prosím vložte URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<nenastavené>",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Orientácia jazyka",
+DlgGenLangDirLtr	: "Zľava doprava (LTR)",
+DlgGenLangDirRtl	: "Sprava doľava (RTL)",
+DlgGenLangCode		: "Kód jazyka",
+DlgGenAccessKey		: "Prístupový kľúč",
+DlgGenName			: "Meno",
+DlgGenTabIndex		: "Poradie prvku",
+DlgGenLongDescr		: "Dlhý popis URL",
+DlgGenClass			: "Trieda štýlu",
+DlgGenTitle			: "Pomocný titulok",
+DlgGenContType		: "Pomocný typ obsahu",
+DlgGenLinkCharset	: "Priradená znaková sada",
+DlgGenStyle			: "Štýl",
+
+// Image Dialog
+DlgImgTitle			: "Vlastnosti obrázku",
+DlgImgInfoTab		: "Informácie o obrázku",
+DlgImgBtnUpload		: "Odoslať na server",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Odoslať",
+DlgImgAlt			: "Alternatívny text",
+DlgImgWidth			: "Šírka",
+DlgImgHeight		: "Výška",
+DlgImgLockRatio		: "Zámok",
+DlgBtnResetSize		: "Pôvodná veľkosť",
+DlgImgBorder		: "Okraje",
+DlgImgHSpace		: "H-medzera",
+DlgImgVSpace		: "V-medzera",
+DlgImgAlign			: "Zarovnanie",
+DlgImgAlignLeft		: "Vľavo",
+DlgImgAlignAbsBottom: "Úplne dole",
+DlgImgAlignAbsMiddle: "Do stredu",
+DlgImgAlignBaseline	: "Na základňu",
+DlgImgAlignBottom	: "Dole",
+DlgImgAlignMiddle	: "Na stred",
+DlgImgAlignRight	: "Vpravo",
+DlgImgAlignTextTop	: "Na horný okraj textu",
+DlgImgAlignTop		: "Nahor",
+DlgImgPreview		: "Náhľad",
+DlgImgAlertUrl		: "Zadajte prosím URL obrázku",
+DlgImgLinkTab		: "Odkaz",
+
+// Flash Dialog
+DlgFlashTitle		: "Vlastnosti Flashu",
+DlgFlashChkPlay		: "Automatické prehrávanie",
+DlgFlashChkLoop		: "Opakovanie",
+DlgFlashChkMenu		: "Povoliť Flash Menu",
+DlgFlashScale		: "Mierka",
+DlgFlashScaleAll	: "Zobraziť mierku",
+DlgFlashScaleNoBorder	: "Bez okrajov",
+DlgFlashScaleFit	: "Roztiahnuť na celé",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Odkaz",
+DlgLnkInfoTab		: "Informácie o odkaze",
+DlgLnkTargetTab		: "Cieľ",
+
+DlgLnkType			: "Typ odkazu",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Kotva v tejto stránke",
+DlgLnkTypeEMail		: "E-Mail",
+DlgLnkProto			: "Protokol",
+DlgLnkProtoOther	: "<iný>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Vybrať kotvu",
+DlgLnkAnchorByName	: "Podľa mena kotvy",
+DlgLnkAnchorById	: "Podľa Id objektu",
+DlgLnkNoAnchors		: "(V stránke nie je definovaná žiadna kotva)",
+DlgLnkEMail			: "E-Mailová adresa",
+DlgLnkEMailSubject	: "Predmet správy",
+DlgLnkEMailBody		: "Telo správy",
+DlgLnkUpload		: "Odoslať",
+DlgLnkBtnUpload		: "Odoslať na server",
+
+DlgLnkTarget		: "Cieľ",
+DlgLnkTargetFrame	: "<rámec>",
+DlgLnkTargetPopup	: "<vyskakovacie okno>",
+DlgLnkTargetBlank	: "Nové okno (_blank)",
+DlgLnkTargetParent	: "Rodičovské okno (_parent)",
+DlgLnkTargetSelf	: "Rovnaké okno (_self)",
+DlgLnkTargetTop		: "Hlavné okno (_top)",
+DlgLnkTargetFrameName	: "Meno rámu cieľa",
+DlgLnkPopWinName	: "Názov vyskakovacieho okna",
+DlgLnkPopWinFeat	: "Vlastnosti vyskakovacieho okna",
+DlgLnkPopResize		: "Meniteľná veľkosť",
+DlgLnkPopLocation	: "Panel umiestnenia",
+DlgLnkPopMenu		: "Panel ponuky",
+DlgLnkPopScroll		: "Posuvníky",
+DlgLnkPopStatus		: "Stavový riadok",
+DlgLnkPopToolbar	: "Panel nástrojov",
+DlgLnkPopFullScrn	: "Celá obrazovka (IE)",
+DlgLnkPopDependent	: "Závislosť (Netscape)",
+DlgLnkPopWidth		: "Šírka",
+DlgLnkPopHeight		: "Výška",
+DlgLnkPopLeft		: "Ľavý okraj",
+DlgLnkPopTop		: "Horný okraj",
+
+DlnLnkMsgNoUrl		: "Zadajte prosím URL odkazu",
+DlnLnkMsgNoEMail	: "Zadajte prosím e-mailovú adresu",
+DlnLnkMsgNoAnchor	: "Vyberte prosím kotvu",
+DlnLnkMsgInvPopName	: "Názov vyskakovacieho okna sa musá začínať písmenom a nemôže obsahovať medzery",
+
+// Color Dialog
+DlgColorTitle		: "Výber farby",
+DlgColorBtnClear	: "Vymazať",
+DlgColorHighlight	: "Zvýraznená",
+DlgColorSelected	: "Vybraná",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Vkladanie smajlíkov",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Výber špeciálneho znaku",
+
+// Table Dialog
+DlgTableTitle		: "Vlastnosti tabuľky",
+DlgTableRows		: "Riadky",
+DlgTableColumns		: "Stĺpce",
+DlgTableBorder		: "Ohraničenie",
+DlgTableAlign		: "Zarovnanie",
+DlgTableAlignNotSet	: "<nenastavené>",
+DlgTableAlignLeft	: "Vľavo",
+DlgTableAlignCenter	: "Na stred",
+DlgTableAlignRight	: "Vpravo",
+DlgTableWidth		: "Šírka",
+DlgTableWidthPx		: "pixelov",
+DlgTableWidthPc		: "percent",
+DlgTableHeight		: "Výška",
+DlgTableCellSpace	: "Vzdialenosť buniek",
+DlgTableCellPad		: "Odsadenie obsahu",
+DlgTableCaption		: "Popis",
+DlgTableSummary		: "Prehľad",
+
+// Table Cell Dialog
+DlgCellTitle		: "Vlastnosti bunky",
+DlgCellWidth		: "Šírka",
+DlgCellWidthPx		: "bodov",
+DlgCellWidthPc		: "percent",
+DlgCellHeight		: "Výška",
+DlgCellWordWrap		: "Zalamovannie",
+DlgCellWordWrapNotSet	: "<nenastavené>",
+DlgCellWordWrapYes	: "Áno",
+DlgCellWordWrapNo	: "Nie",
+DlgCellHorAlign		: "Vodorovné zarovnanie",
+DlgCellHorAlignNotSet	: "<nenastavené>",
+DlgCellHorAlignLeft	: "Vľavo",
+DlgCellHorAlignCenter	: "Na stred",
+DlgCellHorAlignRight: "Vpravo",
+DlgCellVerAlign		: "Zvislé zarovnanie",
+DlgCellVerAlignNotSet	: "<nenastavené>",
+DlgCellVerAlignTop	: "Nahor",
+DlgCellVerAlignMiddle	: "Doprostred",
+DlgCellVerAlignBottom	: "Dole",
+DlgCellVerAlignBaseline	: "Na základňu",
+DlgCellRowSpan		: "Zlúčené riadky",
+DlgCellCollSpan		: "Zlúčené stĺpce",
+DlgCellBackColor	: "Farba pozadia",
+DlgCellBorderColor	: "Farba ohraničenia",
+DlgCellBtnSelect	: "Výber...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Find and Replace",	//MISSING
+
+// Find Dialog
+DlgFindTitle		: "Hľadať",
+DlgFindFindBtn		: "Hľadať",
+DlgFindNotFoundMsg	: "Hľadaný text nebol nájdený.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Nahradiť",
+DlgReplaceFindLbl		: "Čo hľadať:",
+DlgReplaceReplaceLbl	: "Čím nahradiť:",
+DlgReplaceCaseChk		: "Rozlišovať malé/veľké písmená",
+DlgReplaceReplaceBtn	: "Nahradiť",
+DlgReplaceReplAllBtn	: "Nahradiť všetko",
+DlgReplaceWordChk		: "Len celé slová",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "Bezpečnostné nastavenie Vášho prehliadača nedovoľujú editoru spustiť funkciu pre vystrihnutie zvoleného textu do schránky. Prosím vystrihnite zvolený text do schránky pomocou klávesnice (Ctrl+X).",
+PasteErrorCopy	: "Bezpečnostné nastavenie Vášho prehliadača nedovoľujú editoru spustiť funkciu pre kopírovanie zvoleného textu do schránky. Prosím skopírujte zvolený text do schránky pomocou klávesnice (Ctrl+C).",
+
+PasteAsText		: "Vložiť ako čistý text",
+PasteFromWord	: "Vložiť text z Wordu",
+
+DlgPasteMsg2	: "Prosím vložte nasledovný rámček použitím klávesnice (<STRONG>Ctrl+V</STRONG>) a stlačte <STRONG>OK</STRONG>.",
+DlgPasteSec		: "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.",	//MISSING
+DlgPasteIgnoreFont		: "Ignorovať nastavenia typu písma",
+DlgPasteRemoveStyles	: "Odstrániť formátovanie",
+DlgPasteCleanBox		: "Vyčistiť schránku",
+
+// Color Picker
+ColorAutomatic	: "Automaticky",
+ColorMoreColors	: "Viac farieb...",
+
+// Document Properties
+DocProps		: "Vlastnosti dokumentu",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Vlastnosti kotvy",
+DlgAnchorName		: "Meno kotvy",
+DlgAnchorErrorName	: "Zadajte prosím meno kotvy",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Nie je v slovníku",
+DlgSpellChangeTo		: "Zmeniť na",
+DlgSpellBtnIgnore		: "Ignorovať",
+DlgSpellBtnIgnoreAll	: "Ignorovať všetko",
+DlgSpellBtnReplace		: "Prepísat",
+DlgSpellBtnReplaceAll	: "Prepísat všetko",
+DlgSpellBtnUndo			: "Späť",
+DlgSpellNoSuggestions	: "- Žiadny návrh -",
+DlgSpellProgress		: "Prebieha kontrola pravopisu...",
+DlgSpellNoMispell		: "Kontrola pravopisu dokončená: bez chýb",
+DlgSpellNoChanges		: "Kontrola pravopisu dokončená: žiadne slová nezmenené",
+DlgSpellOneChange		: "Kontrola pravopisu dokončená: zmenené jedno slovo",
+DlgSpellManyChanges		: "Kontrola pravopisu dokončená: zmenených %1 slov",
+
+IeSpellDownload			: "Kontrola pravopisu nie je naištalovaná. Chcete ju hneď stiahnuť?",
+
+// Button Dialog
+DlgButtonText		: "Text",
+DlgButtonType		: "Typ",
+DlgButtonTypeBtn	: "Tlačidlo",
+DlgButtonTypeSbm	: "Odoslať",
+DlgButtonTypeRst	: "Vymazať",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Názov",
+DlgCheckboxValue	: "Hodnota",
+DlgCheckboxSelected	: "Vybrané",
+
+// Form Dialog
+DlgFormName		: "Názov",
+DlgFormAction	: "Akcie",
+DlgFormMethod	: "Metóda",
+
+// Select Field Dialog
+DlgSelectName		: "Názov",
+DlgSelectValue		: "Hodnota",
+DlgSelectSize		: "Veľkosť",
+DlgSelectLines		: "riadkov",
+DlgSelectChkMulti	: "Povoliť viacnásobný výber",
+DlgSelectOpAvail	: "Dostupné možnosti",
+DlgSelectOpText		: "Text",
+DlgSelectOpValue	: "Hodnota",
+DlgSelectBtnAdd		: "Pridať",
+DlgSelectBtnModify	: "Zmeniť",
+DlgSelectBtnUp		: "Hore",
+DlgSelectBtnDown	: "Dole",
+DlgSelectBtnSetValue : "Nastaviť ako vybranú hodnotu",
+DlgSelectBtnDelete	: "Zmazať",
+
+// Textarea Dialog
+DlgTextareaName	: "Názov",
+DlgTextareaCols	: "Stĺpce",
+DlgTextareaRows	: "Riadky",
+
+// Text Field Dialog
+DlgTextName			: "Názov",
+DlgTextValue		: "Hodnota",
+DlgTextCharWidth	: "Šírka pola (znakov)",
+DlgTextMaxChars		: "Maximálny počet znakov",
+DlgTextType			: "Typ",
+DlgTextTypeText		: "Text",
+DlgTextTypePass		: "Heslo",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Názov",
+DlgHiddenValue	: "Hodnota",
+
+// Bulleted List Dialog
+BulletedListProp	: "Vlastnosti odrážok",
+NumberedListProp	: "Vlastnosti číslovania",
+DlgLstStart			: "Štart",
+DlgLstType			: "Typ",
+DlgLstTypeCircle	: "Krúžok",
+DlgLstTypeDisc		: "Disk",
+DlgLstTypeSquare	: "Štvorec",
+DlgLstTypeNumbers	: "Číslovanie (1, 2, 3)",
+DlgLstTypeLCase		: "Malé písmená (a, b, c)",
+DlgLstTypeUCase		: "Veľké písmená (A, B, C)",
+DlgLstTypeSRoman	: "Malé rímske číslice (i, ii, iii)",
+DlgLstTypeLRoman	: "Veľké rímske číslice (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Všeobecné",
+DlgDocBackTab		: "Pozadie",
+DlgDocColorsTab		: "Farby a okraje",
+DlgDocMetaTab		: "Meta Data",
+
+DlgDocPageTitle		: "Titulok",
+DlgDocLangDir		: "Orientácie jazyka",
+DlgDocLangDirLTR	: "Zľava doprava (LTR)",
+DlgDocLangDirRTL	: "Sprava doľava (RTL)",
+DlgDocLangCode		: "Kód jazyka",
+DlgDocCharSet		: "Kódová stránka",
+DlgDocCharSetCE		: "Stredoeurópske",
+DlgDocCharSetCT		: "Čínština tradičná (Big5)",
+DlgDocCharSetCR		: "Cyrillika",
+DlgDocCharSetGR		: "Gréčtina",
+DlgDocCharSetJP		: "Japončina",
+DlgDocCharSetKR		: "Korejčina",
+DlgDocCharSetTR		: "Turečtina",
+DlgDocCharSetUN		: "Unicode (UTF-8)",
+DlgDocCharSetWE		: "Západná európa",
+DlgDocCharSetOther	: "Iná kódová stránka",
+
+DlgDocDocType		: "Typ záhlavia dokumentu",
+DlgDocDocTypeOther	: "Iný typ záhlavia dokumentu",
+DlgDocIncXHTML		: "Obsahuje deklarácie XHTML",
+DlgDocBgColor		: "Farba pozadia",
+DlgDocBgImage		: "URL adresa obrázku na pozadí",
+DlgDocBgNoScroll	: "Fixné pozadie",
+DlgDocCText			: "Text",
+DlgDocCLink			: "Odkaz",
+DlgDocCVisited		: "Navštívený odkaz",
+DlgDocCActive		: "Aktívny odkaz",
+DlgDocMargins		: "Okraje stránky",
+DlgDocMaTop			: "Horný",
+DlgDocMaLeft		: "Ľavý",
+DlgDocMaRight		: "Pravý",
+DlgDocMaBottom		: "Dolný",
+DlgDocMeIndex		: "Kľúčové slová pre indexovanie (oddelené čiarkou)",
+DlgDocMeDescr		: "Popis stránky",
+DlgDocMeAuthor		: "Autor",
+DlgDocMeCopy		: "Autorské práva",
+DlgDocPreview		: "Náhľad",
+
+// Templates Dialog
+Templates			: "Šablóny",
+DlgTemplatesTitle	: "Šablóny obsahu",
+DlgTemplatesSelMsg	: "Prosím vyberte šablóny na otvorenie v editore<br>(súšasný obsah bude stratený):",
+DlgTemplatesLoading	: "Nahrávam zoznam šablón. Čakajte prosím...",
+DlgTemplatesNoTpl	: "(žiadne šablóny nenájdené)",
+DlgTemplatesReplace	: "Nahradiť aktuálny obsah",
+
+// About Dialog
+DlgAboutAboutTab	: "O aplikáci",
+DlgAboutBrowserInfoTab	: "Informácie o prehliadači",
+DlgAboutLicenseTab	: "Licencia",
+DlgAboutVersion		: "verzia",
+DlgAboutInfo		: "Viac informácií získate na"
+};
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/sl.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/sl.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/sl.js	(revision 1280)
@@ -0,0 +1,516 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Slovenian language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Zloži orodno vrstico",
+ToolbarExpand		: "Razširi orodno vrstico",
+
+// Toolbar Items and Context Menu
+Save				: "Shrani",
+NewPage				: "Nova stran",
+Preview				: "Predogled",
+Cut					: "Izreži",
+Copy				: "Kopiraj",
+Paste				: "Prilepi",
+PasteText			: "Prilepi kot golo besedilo",
+PasteWord			: "Prilepi iz Worda",
+Print				: "Natisni",
+SelectAll			: "Izberi vse",
+RemoveFormat		: "Odstrani oblikovanje",
+InsertLinkLbl		: "Povezava",
+InsertLink			: "Vstavi/uredi povezavo",
+RemoveLink			: "Odstrani povezavo",
+Anchor				: "Vstavi/uredi zaznamek",
+AnchorDelete		: "Odstrani zaznamek",
+InsertImageLbl		: "Slika",
+InsertImage			: "Vstavi/uredi sliko",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Vstavi/Uredi Flash",
+InsertTableLbl		: "Tabela",
+InsertTable			: "Vstavi/uredi tabelo",
+InsertLineLbl		: "Črta",
+InsertLine			: "Vstavi vodoravno črto",
+InsertSpecialCharLbl: "Posebni znak",
+InsertSpecialChar	: "Vstavi posebni znak",
+InsertSmileyLbl		: "Smeško",
+InsertSmiley		: "Vstavi smeška",
+About				: "O FCKeditorju",
+Bold				: "Krepko",
+Italic				: "Ležeče",
+Underline			: "Podčrtano",
+StrikeThrough		: "Prečrtano",
+Subscript			: "Podpisano",
+Superscript			: "Nadpisano",
+LeftJustify			: "Leva poravnava",
+CenterJustify		: "Sredinska poravnava",
+RightJustify		: "Desna poravnava",
+BlockJustify		: "Obojestranska poravnava",
+DecreaseIndent		: "Zmanjšaj zamik",
+IncreaseIndent		: "Povečaj zamik",
+Blockquote			: "Citat",
+Undo				: "Razveljavi",
+Redo				: "Ponovi",
+NumberedListLbl		: "Oštevilčen seznam",
+NumberedList		: "Vstavi/odstrani oštevilčevanje",
+BulletedListLbl		: "Označen seznam",
+BulletedList		: "Vstavi/odstrani označevanje",
+ShowTableBorders	: "Pokaži meje tabele",
+ShowDetails			: "Pokaži podrobnosti",
+Style				: "Slog",
+FontFormat			: "Oblika",
+Font				: "Pisava",
+FontSize			: "Velikost",
+TextColor			: "Barva besedila",
+BGColor				: "Barva ozadja",
+Source				: "Izvorna koda",
+Find				: "Najdi",
+Replace				: "Zamenjaj",
+SpellCheck			: "Preveri črkovanje",
+UniversalKeyboard	: "Večjezična tipkovnica",
+PageBreakLbl		: "Prelom strani",
+PageBreak			: "Vstavi prelom strani",
+
+Form			: "Obrazec",
+Checkbox		: "Potrditveno polje",
+RadioButton		: "Izbirno polje",
+TextField		: "Vnosno polje",
+Textarea		: "Vnosno območje",
+HiddenField		: "Skrito polje",
+Button			: "Gumb",
+SelectionField	: "Spustni seznam",
+ImageButton		: "Gumb s sliko",
+
+FitWindow		: "Razširi velikost urejevalnika čez cel zaslon",
+ShowBlocks		: "Prikaži ograde",
+
+// Context Menu
+EditLink			: "Uredi povezavo",
+CellCM				: "Celica",
+RowCM				: "Vrstica",
+ColumnCM			: "Stolpec",
+InsertRowAfter		: "Vstavi vrstico za",
+InsertRowBefore		: "Vstavi vrstico pred",
+DeleteRows			: "Izbriši vrstice",
+InsertColumnAfter	: "Vstavi stolpec za",
+InsertColumnBefore	: "Vstavi stolpec pred",
+DeleteColumns		: "Izbriši stolpce",
+InsertCellAfter		: "Vstavi celico za",
+InsertCellBefore	: "Vstavi celico pred",
+DeleteCells			: "Izbriši celice",
+MergeCells			: "Združi celice",
+MergeRight			: "Združi desno",
+MergeDown			: "Druži navzdol",
+HorizontalSplitCell	: "Razdeli celico vodoravno",
+VerticalSplitCell	: "Razdeli celico navpično",
+TableDelete			: "Izbriši tabelo",
+CellProperties		: "Lastnosti celice",
+TableProperties		: "Lastnosti tabele",
+ImageProperties		: "Lastnosti slike",
+FlashProperties		: "Lastnosti Flash",
+
+AnchorProp			: "Lastnosti zaznamka",
+ButtonProp			: "Lastnosti gumba",
+CheckboxProp		: "Lastnosti potrditvenega polja",
+HiddenFieldProp		: "Lastnosti skritega polja",
+RadioButtonProp		: "Lastnosti izbirnega polja",
+ImageButtonProp		: "Lastnosti gumba s sliko",
+TextFieldProp		: "Lastnosti vnosnega polja",
+SelectionFieldProp	: "Lastnosti spustnega seznama",
+TextareaProp		: "Lastnosti vnosnega območja",
+FormProp			: "Lastnosti obrazca",
+
+FontFormats			: "Navaden;Oblikovan;Napis;Naslov 1;Naslov 2;Naslov 3;Naslov 4;Naslov 5;Naslov 6",
+
+// Alerts and Messages
+ProcessingXHTML		: "Obdelujem XHTML. Prosim počakajte...",
+Done				: "Narejeno",
+PasteWordConfirm	: "Izgleda, da želite prilepiti besedilo iz Worda. Ali ga želite očistiti, preden ga prilepite?",
+NotCompatiblePaste	: "Ta ukaz deluje le v Internet Explorerje različice 5.5 ali višje. Ali želite prilepiti brez čiščenja?",
+UnknownToolbarItem	: "Neznan element orodne vrstice \"%1\"",
+UnknownCommand		: "Neznano ime ukaza \"%1\"",
+NotImplemented		: "Ukaz ni izdelan",
+UnknownToolbarSet	: "Skupina orodnih vrstic \"%1\" ne obstoja",
+NoActiveX			: "Varnostne nastavitve vašega brskalnika lahko omejijo delovanje nekaterih zmožnosti urejevalnika. Če ne želite zaznavati napak in sporočil o manjkajočih zmožnostih, omogočite možnost \"Zaženi ActiveX kontrolnike in vtičnike\".",
+BrowseServerBlocked : "Brskalnik virov se ne more odpreti. Prepričajte se, da je preprečevanje pojavnih oken onemogočeno.",
+DialogBlocked		: "Pogovorno okno se ni moglo odpreti. Prepričajte se, da je preprečevanje pojavnih oken onemogočeno.",
+
+// Dialogs
+DlgBtnOK			: "V redu",
+DlgBtnCancel		: "Prekliči",
+DlgBtnClose			: "Zapri",
+DlgBtnBrowseServer	: "Prebrskaj na strežniku",
+DlgAdvancedTag		: "Napredno",
+DlgOpOther			: "<Ostalo>",
+DlgInfoTab			: "Podatki",
+DlgAlertUrl			: "Prosim vpiši spletni naslov",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<ni postavljen>",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Smer jezika",
+DlgGenLangDirLtr	: "Od leve proti desni (LTR)",
+DlgGenLangDirRtl	: "Od desne proti levi (RTL)",
+DlgGenLangCode		: "Oznaka jezika",
+DlgGenAccessKey		: "Vstopno geslo",
+DlgGenName			: "Ime",
+DlgGenTabIndex		: "Številka tabulatorja",
+DlgGenLongDescr		: "Dolg opis URL-ja",
+DlgGenClass			: "Razred stilne predloge",
+DlgGenTitle			: "Predlagani naslov",
+DlgGenContType		: "Predlagani tip vsebine (content-type)",
+DlgGenLinkCharset	: "Kodna tabela povezanega vira",
+DlgGenStyle			: "Slog",
+
+// Image Dialog
+DlgImgTitle			: "Lastnosti slike",
+DlgImgInfoTab		: "Podatki o sliki",
+DlgImgBtnUpload		: "Pošlji na strežnik",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Pošlji",
+DlgImgAlt			: "Nadomestno besedilo",
+DlgImgWidth			: "Širina",
+DlgImgHeight		: "Višina",
+DlgImgLockRatio		: "Zakleni razmerje",
+DlgBtnResetSize		: "Ponastavi velikost",
+DlgImgBorder		: "Obroba",
+DlgImgHSpace		: "Vodoravni razmik",
+DlgImgVSpace		: "Navpični razmik",
+DlgImgAlign			: "Poravnava",
+DlgImgAlignLeft		: "Levo",
+DlgImgAlignAbsBottom: "Popolnoma na dno",
+DlgImgAlignAbsMiddle: "Popolnoma v sredino",
+DlgImgAlignBaseline	: "Na osnovno črto",
+DlgImgAlignBottom	: "Na dno",
+DlgImgAlignMiddle	: "V sredino",
+DlgImgAlignRight	: "Desno",
+DlgImgAlignTextTop	: "Besedilo na vrh",
+DlgImgAlignTop		: "Na vrh",
+DlgImgPreview		: "Predogled",
+DlgImgAlertUrl		: "Vnesite URL slike",
+DlgImgLinkTab		: "Povezava",
+
+// Flash Dialog
+DlgFlashTitle		: "Lastnosti Flash",
+DlgFlashChkPlay		: "Samodejno predvajaj",
+DlgFlashChkLoop		: "Ponavljanje",
+DlgFlashChkMenu		: "Omogoči Flash Meni",
+DlgFlashScale		: "Povečava",
+DlgFlashScaleAll	: "Pokaži vse",
+DlgFlashScaleNoBorder	: "Brez obrobe",
+DlgFlashScaleFit	: "Natančno prileganje",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Povezava",
+DlgLnkInfoTab		: "Podatki o povezavi",
+DlgLnkTargetTab		: "Cilj",
+
+DlgLnkType			: "Vrsta povezave",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Zaznamek na tej strani",
+DlgLnkTypeEMail		: "Elektronski naslov",
+DlgLnkProto			: "Protokol",
+DlgLnkProtoOther	: "<drugo>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Izberi zaznamek",
+DlgLnkAnchorByName	: "Po imenu zaznamka",
+DlgLnkAnchorById	: "Po ID-ju elementa",
+DlgLnkNoAnchors		: "(V tem dokumentu ni zaznamkov)",
+DlgLnkEMail			: "Elektronski naslov",
+DlgLnkEMailSubject	: "Predmet sporočila",
+DlgLnkEMailBody		: "Vsebina sporočila",
+DlgLnkUpload		: "Prenesi",
+DlgLnkBtnUpload		: "Pošlji na strežnik",
+
+DlgLnkTarget		: "Cilj",
+DlgLnkTargetFrame	: "<okvir>",
+DlgLnkTargetPopup	: "<pojavno okno>",
+DlgLnkTargetBlank	: "Novo okno (_blank)",
+DlgLnkTargetParent	: "Starševsko okno (_parent)",
+DlgLnkTargetSelf	: "Isto okno (_self)",
+DlgLnkTargetTop		: "Najvišje okno (_top)",
+DlgLnkTargetFrameName	: "Ime ciljnega okvirja",
+DlgLnkPopWinName	: "Ime pojavnega okna",
+DlgLnkPopWinFeat	: "Značilnosti pojavnega okna",
+DlgLnkPopResize		: "Spremenljive velikosti",
+DlgLnkPopLocation	: "Naslovna vrstica",
+DlgLnkPopMenu		: "Menijska vrstica",
+DlgLnkPopScroll		: "Drsniki",
+DlgLnkPopStatus		: "Vrstica stanja",
+DlgLnkPopToolbar	: "Orodna vrstica",
+DlgLnkPopFullScrn	: "Celozaslonska slika (IE)",
+DlgLnkPopDependent	: "Podokno (Netscape)",
+DlgLnkPopWidth		: "Širina",
+DlgLnkPopHeight		: "Višina",
+DlgLnkPopLeft		: "Lega levo",
+DlgLnkPopTop		: "Lega na vrhu",
+
+DlnLnkMsgNoUrl		: "Vnesite URL povezave",
+DlnLnkMsgNoEMail	: "Vnesite elektronski naslov",
+DlnLnkMsgNoAnchor	: "Izberite zaznamek",
+DlnLnkMsgInvPopName	: "Ime pojavnega okna se mora začeti s črko ali številko in ne sme vsebovati presledkov",
+
+// Color Dialog
+DlgColorTitle		: "Izberite barvo",
+DlgColorBtnClear	: "Počisti",
+DlgColorHighlight	: "Označi",
+DlgColorSelected	: "Izbrano",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Vstavi smeška",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Izberi posebni znak",
+
+// Table Dialog
+DlgTableTitle		: "Lastnosti tabele",
+DlgTableRows		: "Vrstice",
+DlgTableColumns		: "Stolpci",
+DlgTableBorder		: "Velikost obrobe",
+DlgTableAlign		: "Poravnava",
+DlgTableAlignNotSet	: "<Ni nastavljeno>",
+DlgTableAlignLeft	: "Levo",
+DlgTableAlignCenter	: "Sredinsko",
+DlgTableAlignRight	: "Desno",
+DlgTableWidth		: "Širina",
+DlgTableWidthPx		: "pik",
+DlgTableWidthPc		: "procentov",
+DlgTableHeight		: "Višina",
+DlgTableCellSpace	: "Razmik med celicami",
+DlgTableCellPad		: "Polnilo med celicami",
+DlgTableCaption		: "Naslov",
+DlgTableSummary		: "Povzetek",
+
+// Table Cell Dialog
+DlgCellTitle		: "Lastnosti celice",
+DlgCellWidth		: "Širina",
+DlgCellWidthPx		: "pik",
+DlgCellWidthPc		: "procentov",
+DlgCellHeight		: "Višina",
+DlgCellWordWrap		: "Pomikanje besedila",
+DlgCellWordWrapNotSet	: "<Ni nastavljeno>",
+DlgCellWordWrapYes	: "Da",
+DlgCellWordWrapNo	: "Ne",
+DlgCellHorAlign		: "Vodoravna poravnava",
+DlgCellHorAlignNotSet	: "<Ni nastavljeno>",
+DlgCellHorAlignLeft	: "Levo",
+DlgCellHorAlignCenter	: "Sredinsko",
+DlgCellHorAlignRight: "Desno",
+DlgCellVerAlign		: "Navpična poravnava",
+DlgCellVerAlignNotSet	: "<Ni nastavljeno>",
+DlgCellVerAlignTop	: "Na vrh",
+DlgCellVerAlignMiddle	: "V sredino",
+DlgCellVerAlignBottom	: "Na dno",
+DlgCellVerAlignBaseline	: "Na osnovno črto",
+DlgCellRowSpan		: "Spojenih vrstic (row-span)",
+DlgCellCollSpan		: "Spojenih stolpcev (col-span)",
+DlgCellBackColor	: "Barva ozadja",
+DlgCellBorderColor	: "Barva obrobe",
+DlgCellBtnSelect	: "Izberi...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Najdi in zamenjaj",
+
+// Find Dialog
+DlgFindTitle		: "Najdi",
+DlgFindFindBtn		: "Najdi",
+DlgFindNotFoundMsg	: "Navedeno besedilo ni bilo najdeno.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Zamenjaj",
+DlgReplaceFindLbl		: "Najdi:",
+DlgReplaceReplaceLbl	: "Zamenjaj z:",
+DlgReplaceCaseChk		: "Razlikuj velike in male črke",
+DlgReplaceReplaceBtn	: "Zamenjaj",
+DlgReplaceReplAllBtn	: "Zamenjaj vse",
+DlgReplaceWordChk		: "Samo cele besede",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "Varnostne nastavitve brskalnika ne dopuščajo samodejnega izrezovanja. Uporabite kombinacijo tipk na tipkovnici (Ctrl+X).",
+PasteErrorCopy	: "Varnostne nastavitve brskalnika ne dopuščajo samodejnega kopiranja. Uporabite kombinacijo tipk na tipkovnici (Ctrl+C).",
+
+PasteAsText		: "Prilepi kot golo besedilo",
+PasteFromWord	: "Prilepi iz Worda",
+
+DlgPasteMsg2	: "Prosim prilepite v sleči okvir s pomočjo tipkovnice (<STRONG>Ctrl+V</STRONG>) in pritisnite <STRONG>V redu</STRONG>.",
+DlgPasteSec		: "Zaradi varnostnih nastavitev vašega brskalnika urejevalnik ne more neposredno dostopati do odložišča. Vsebino odložišča ponovno prilepite v to okno.",
+DlgPasteIgnoreFont		: "Prezri obliko pisave",
+DlgPasteRemoveStyles	: "Odstrani nastavitve stila",
+DlgPasteCleanBox		: "Počisti okvir",
+
+// Color Picker
+ColorAutomatic	: "Samodejno",
+ColorMoreColors	: "Več barv...",
+
+// Document Properties
+DocProps		: "Lastnosti dokumenta",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Lastnosti zaznamka",
+DlgAnchorName		: "Ime zaznamka",
+DlgAnchorErrorName	: "Prosim vnesite ime zaznamka",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Ni v slovarju",
+DlgSpellChangeTo		: "Spremeni v",
+DlgSpellBtnIgnore		: "Prezri",
+DlgSpellBtnIgnoreAll	: "Prezri vse",
+DlgSpellBtnReplace		: "Zamenjaj",
+DlgSpellBtnReplaceAll	: "Zamenjaj vse",
+DlgSpellBtnUndo			: "Razveljavi",
+DlgSpellNoSuggestions	: "- Ni predlogov -",
+DlgSpellProgress		: "Preverjanje črkovanja se izvaja...",
+DlgSpellNoMispell		: "Črkovanje je končano: Brez napak",
+DlgSpellNoChanges		: "Črkovanje je končano: Nobena beseda ni bila spremenjena",
+DlgSpellOneChange		: "Črkovanje je končano: Spremenjena je bila ena beseda",
+DlgSpellManyChanges		: "Črkovanje je končano: Spremenjenih je bilo %1 besed",
+
+IeSpellDownload			: "Črkovalnik ni nameščen. Ali ga želite prenesti sedaj?",
+
+// Button Dialog
+DlgButtonText		: "Besedilo (Vrednost)",
+DlgButtonType		: "Tip",
+DlgButtonTypeBtn	: "Gumb",
+DlgButtonTypeSbm	: "Potrdi",
+DlgButtonTypeRst	: "Ponastavi",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Ime",
+DlgCheckboxValue	: "Vrednost",
+DlgCheckboxSelected	: "Izbrano",
+
+// Form Dialog
+DlgFormName		: "Ime",
+DlgFormAction	: "Akcija",
+DlgFormMethod	: "Metoda",
+
+// Select Field Dialog
+DlgSelectName		: "Ime",
+DlgSelectValue		: "Vrednost",
+DlgSelectSize		: "Velikost",
+DlgSelectLines		: "vrstic",
+DlgSelectChkMulti	: "Dovoli izbor večih vrstic",
+DlgSelectOpAvail	: "Razpoložljive izbire",
+DlgSelectOpText		: "Besedilo",
+DlgSelectOpValue	: "Vrednost",
+DlgSelectBtnAdd		: "Dodaj",
+DlgSelectBtnModify	: "Spremeni",
+DlgSelectBtnUp		: "Gor",
+DlgSelectBtnDown	: "Dol",
+DlgSelectBtnSetValue : "Postavi kot privzeto izbiro",
+DlgSelectBtnDelete	: "Izbriši",
+
+// Textarea Dialog
+DlgTextareaName	: "Ime",
+DlgTextareaCols	: "Stolpcev",
+DlgTextareaRows	: "Vrstic",
+
+// Text Field Dialog
+DlgTextName			: "Ime",
+DlgTextValue		: "Vrednost",
+DlgTextCharWidth	: "Dolžina",
+DlgTextMaxChars		: "Največje število znakov",
+DlgTextType			: "Tip",
+DlgTextTypeText		: "Besedilo",
+DlgTextTypePass		: "Geslo",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Ime",
+DlgHiddenValue	: "Vrednost",
+
+// Bulleted List Dialog
+BulletedListProp	: "Lastnosti označenega seznama",
+NumberedListProp	: "Lastnosti oštevilčenega seznama",
+DlgLstStart			: "Začetek",
+DlgLstType			: "Tip",
+DlgLstTypeCircle	: "Pikica",
+DlgLstTypeDisc		: "Kroglica",
+DlgLstTypeSquare	: "Kvadratek",
+DlgLstTypeNumbers	: "Številke (1, 2, 3)",
+DlgLstTypeLCase		: "Male črke (a, b, c)",
+DlgLstTypeUCase		: "Velike črke (A, B, C)",
+DlgLstTypeSRoman	: "Male rimske številke (i, ii, iii)",
+DlgLstTypeLRoman	: "Velike rimske številke (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Splošno",
+DlgDocBackTab		: "Ozadje",
+DlgDocColorsTab		: "Barve in zamiki",
+DlgDocMetaTab		: "Meta podatki",
+
+DlgDocPageTitle		: "Naslov strani",
+DlgDocLangDir		: "Smer jezika",
+DlgDocLangDirLTR	: "Od leve proti desni (LTR)",
+DlgDocLangDirRTL	: "Od desne proti levi (RTL)",
+DlgDocLangCode		: "Oznaka jezika",
+DlgDocCharSet		: "Kodna tabela",
+DlgDocCharSetCE		: "Srednjeevropsko",
+DlgDocCharSetCT		: "Tradicionalno Kitajsko (Big5)",
+DlgDocCharSetCR		: "Cirilica",
+DlgDocCharSetGR		: "Grško",
+DlgDocCharSetJP		: "Japonsko",
+DlgDocCharSetKR		: "Korejsko",
+DlgDocCharSetTR		: "Turško",
+DlgDocCharSetUN		: "Unicode (UTF-8)",
+DlgDocCharSetWE		: "Zahodnoevropsko",
+DlgDocCharSetOther	: "Druga kodna tabela",
+
+DlgDocDocType		: "Glava tipa dokumenta",
+DlgDocDocTypeOther	: "Druga glava tipa dokumenta",
+DlgDocIncXHTML		: "Vstavi XHTML deklaracije",
+DlgDocBgColor		: "Barva ozadja",
+DlgDocBgImage		: "URL slike za ozadje",
+DlgDocBgNoScroll	: "Nepremično ozadje",
+DlgDocCText			: "Besedilo",
+DlgDocCLink			: "Povezava",
+DlgDocCVisited		: "Obiskana povezava",
+DlgDocCActive		: "Aktivna povezava",
+DlgDocMargins		: "Zamiki strani",
+DlgDocMaTop			: "Na vrhu",
+DlgDocMaLeft		: "Levo",
+DlgDocMaRight		: "Desno",
+DlgDocMaBottom		: "Spodaj",
+DlgDocMeIndex		: "Ključne besede (ločene z vejicami)",
+DlgDocMeDescr		: "Opis strani",
+DlgDocMeAuthor		: "Avtor",
+DlgDocMeCopy		: "Avtorske pravice",
+DlgDocPreview		: "Predogled",
+
+// Templates Dialog
+Templates			: "Predloge",
+DlgTemplatesTitle	: "Vsebinske predloge",
+DlgTemplatesSelMsg	: "Izberite predlogo, ki jo želite odpreti v urejevalniku<br>(trenutna vsebina bo izgubljena):",
+DlgTemplatesLoading	: "Nalagam seznam predlog. Prosim počakajte...",
+DlgTemplatesNoTpl	: "(Ni pripravljenih predlog)",
+DlgTemplatesReplace	: "Zamenjaj trenutno vsebino",
+
+// About Dialog
+DlgAboutAboutTab	: "Vizitka",
+DlgAboutBrowserInfoTab	: "Informacije o brskalniku",
+DlgAboutLicenseTab	: "Dovoljenja",
+DlgAboutVersion		: "različica",
+DlgAboutInfo		: "Za več informacij obiščite"
+};
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/sr-latn.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/sr-latn.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/sr-latn.js	(revision 1280)
@@ -0,0 +1,516 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Serbian (Latin) language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Smanji liniju sa alatkama",
+ToolbarExpand		: "Proiri liniju sa alatkama",
+
+// Toolbar Items and Context Menu
+Save				: "Sačuvaj",
+NewPage				: "Nova stranica",
+Preview				: "Izgled stranice",
+Cut					: "Iseci",
+Copy				: "Kopiraj",
+Paste				: "Zalepi",
+PasteText			: "Zalepi kao neformatiran tekst",
+PasteWord			: "Zalepi iz Worda",
+Print				: "Štampa",
+SelectAll			: "Označi sve",
+RemoveFormat		: "Ukloni formatiranje",
+InsertLinkLbl		: "Link",
+InsertLink			: "Unesi/izmeni link",
+RemoveLink			: "Ukloni link",
+Anchor				: "Unesi/izmeni sidro",
+AnchorDelete		: "Remove Anchor",	//MISSING
+InsertImageLbl		: "Slika",
+InsertImage			: "Unesi/izmeni sliku",
+InsertFlashLbl		: "Fleš",
+InsertFlash			: "Unesi/izmeni fleš",
+InsertTableLbl		: "Tabela",
+InsertTable			: "Unesi/izmeni tabelu",
+InsertLineLbl		: "Linija",
+InsertLine			: "Unesi horizontalnu liniju",
+InsertSpecialCharLbl: "Specijalni karakteri",
+InsertSpecialChar	: "Unesi specijalni karakter",
+InsertSmileyLbl		: "Smajli",
+InsertSmiley		: "Unesi smajlija",
+About				: "O FCKeditoru",
+Bold				: "Podebljano",
+Italic				: "Kurziv",
+Underline			: "Podvučeno",
+StrikeThrough		: "Precrtano",
+Subscript			: "Indeks",
+Superscript			: "Stepen",
+LeftJustify			: "Levo ravnanje",
+CenterJustify		: "Centriran tekst",
+RightJustify		: "Desno ravnanje",
+BlockJustify		: "Obostrano ravnanje",
+DecreaseIndent		: "Smanji levu marginu",
+IncreaseIndent		: "Uvećaj levu marginu",
+Blockquote			: "Blockquote",	//MISSING
+Undo				: "Poni�ti akciju",
+Redo				: "Ponovi akciju",
+NumberedListLbl		: "Nabrojiva lista",
+NumberedList		: "Unesi/ukloni nabrojivu listu",
+BulletedListLbl		: "Nenabrojiva lista",
+BulletedList		: "Unesi/ukloni nenabrojivu listu",
+ShowTableBorders	: "Prikaži okvir tabele",
+ShowDetails			: "Prikaži detalje",
+Style				: "Stil",
+FontFormat			: "Format",
+Font				: "Font",
+FontSize			: "Veličina fonta",
+TextColor			: "Boja teksta",
+BGColor				: "Boja pozadine",
+Source				: "Kôd",
+Find				: "Pretraga",
+Replace				: "Zamena",
+SpellCheck			: "Proveri spelovanje",
+UniversalKeyboard	: "Univerzalna tastatura",
+PageBreakLbl		: "Page Break",	//MISSING
+PageBreak			: "Insert Page Break",	//MISSING
+
+Form			: "Forma",
+Checkbox		: "Polje za potvrdu",
+RadioButton		: "Radio-dugme",
+TextField		: "Tekstualno polje",
+Textarea		: "Zona teksta",
+HiddenField		: "Skriveno polje",
+Button			: "Dugme",
+SelectionField	: "Izborno polje",
+ImageButton		: "Dugme sa slikom",
+
+FitWindow		: "Maximize the editor size",	//MISSING
+ShowBlocks		: "Show Blocks",	//MISSING
+
+// Context Menu
+EditLink			: "Izmeni link",
+CellCM				: "Cell",	//MISSING
+RowCM				: "Row",	//MISSING
+ColumnCM			: "Column",	//MISSING
+InsertRowAfter		: "Insert Row After",	//MISSING
+InsertRowBefore		: "Insert Row Before",	//MISSING
+DeleteRows			: "Obriši redove",
+InsertColumnAfter	: "Insert Column After",	//MISSING
+InsertColumnBefore	: "Insert Column Before",	//MISSING
+DeleteColumns		: "Obriši kolone",
+InsertCellAfter		: "Insert Cell After",	//MISSING
+InsertCellBefore	: "Insert Cell Before",	//MISSING
+DeleteCells			: "Obriši ćelije",
+MergeCells			: "Spoj celije",
+MergeRight			: "Merge Right",	//MISSING
+MergeDown			: "Merge Down",	//MISSING
+HorizontalSplitCell	: "Split Cell Horizontally",	//MISSING
+VerticalSplitCell	: "Split Cell Vertically",	//MISSING
+TableDelete			: "Delete Table",	//MISSING
+CellProperties		: "Osobine celije",
+TableProperties		: "Osobine tabele",
+ImageProperties		: "Osobine slike",
+FlashProperties		: "Osobine fleša",
+
+AnchorProp			: "Osobine sidra",
+ButtonProp			: "Osobine dugmeta",
+CheckboxProp		: "Osobine polja za potvrdu",
+HiddenFieldProp		: "Osobine skrivenog polja",
+RadioButtonProp		: "Osobine radio-dugmeta",
+ImageButtonProp		: "Osobine dugmeta sa slikom",
+TextFieldProp		: "Osobine tekstualnog polja",
+SelectionFieldProp	: "Osobine izbornog polja",
+TextareaProp		: "Osobine zone teksta",
+FormProp			: "Osobine forme",
+
+FontFormats			: "Normal;Formatirano;Adresa;Naslov 1;Naslov 2;Naslov 3;Naslov 4;Naslov 5;Naslov 6",
+
+// Alerts and Messages
+ProcessingXHTML		: "Obradujem XHTML. Malo strpljenja...",
+Done				: "Završio",
+PasteWordConfirm	: "Tekst koji želite da nalepite kopiran je iz Worda. Da li želite da bude očišćen od formata pre lepljenja?",
+NotCompatiblePaste	: "Ova komanda je dostupna samo za Internet Explorer od verzije 5.5. Da li želite da nalepim tekst bez čišćenja?",
+UnknownToolbarItem	: "Nepoznata stavka toolbara \"%1\"",
+UnknownCommand		: "Nepoznata naredba \"%1\"",
+NotImplemented		: "Naredba nije implementirana",
+UnknownToolbarSet	: "Toolbar \"%1\" ne postoji",
+NoActiveX			: "Your browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.",	//MISSING
+BrowseServerBlocked : "The resources browser could not be opened. Make sure that all popup blockers are disabled.",	//MISSING
+DialogBlocked		: "It was not possible to open the dialog window. Make sure all popup blockers are disabled.",	//MISSING
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Otkaži",
+DlgBtnClose			: "Zatvori",
+DlgBtnBrowseServer	: "Pretraži server",
+DlgAdvancedTag		: "Napredni tagovi",
+DlgOpOther			: "<Ostali>",
+DlgInfoTab			: "Info",
+DlgAlertUrl			: "Molimo Vas, unesite URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<nije postavljeno>",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Smer jezika",
+DlgGenLangDirLtr	: "S leva na desno (LTR)",
+DlgGenLangDirRtl	: "S desna na levo (RTL)",
+DlgGenLangCode		: "Kôd jezika",
+DlgGenAccessKey		: "Pristupni taster",
+DlgGenName			: "Naziv",
+DlgGenTabIndex		: "Tab indeks",
+DlgGenLongDescr		: "Pun opis URL",
+DlgGenClass			: "Stylesheet klase",
+DlgGenTitle			: "Advisory naslov",
+DlgGenContType		: "Advisory vrsta sadržaja",
+DlgGenLinkCharset	: "Linked Resource Charset",
+DlgGenStyle			: "Stil",
+
+// Image Dialog
+DlgImgTitle			: "Osobine slika",
+DlgImgInfoTab		: "Info slike",
+DlgImgBtnUpload		: "Pošalji na server",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Pošalji",
+DlgImgAlt			: "Alternativni tekst",
+DlgImgWidth			: "Širina",
+DlgImgHeight		: "Visina",
+DlgImgLockRatio		: "Zaključaj odnos",
+DlgBtnResetSize		: "Resetuj veličinu",
+DlgImgBorder		: "Okvir",
+DlgImgHSpace		: "HSpace",
+DlgImgVSpace		: "VSpace",
+DlgImgAlign			: "Ravnanje",
+DlgImgAlignLeft		: "Levo",
+DlgImgAlignAbsBottom: "Abs dole",
+DlgImgAlignAbsMiddle: "Abs sredina",
+DlgImgAlignBaseline	: "Bazno",
+DlgImgAlignBottom	: "Dole",
+DlgImgAlignMiddle	: "Sredina",
+DlgImgAlignRight	: "Desno",
+DlgImgAlignTextTop	: "Vrh teksta",
+DlgImgAlignTop		: "Vrh",
+DlgImgPreview		: "Izgled",
+DlgImgAlertUrl		: "Unesite URL slike",
+DlgImgLinkTab		: "Link",
+
+// Flash Dialog
+DlgFlashTitle		: "Osobine fleša",
+DlgFlashChkPlay		: "Automatski start",
+DlgFlashChkLoop		: "Ponavljaj",
+DlgFlashChkMenu		: "Uključi fleš meni",
+DlgFlashScale		: "Skaliraj",
+DlgFlashScaleAll	: "Prikaži sve",
+DlgFlashScaleNoBorder	: "Bez ivice",
+DlgFlashScaleFit	: "Popuni površinu",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Link",
+DlgLnkInfoTab		: "Link Info",
+DlgLnkTargetTab		: "Meta",
+
+DlgLnkType			: "Vrsta linka",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Sidro na ovoj stranici",
+DlgLnkTypeEMail		: "E-Mail",
+DlgLnkProto			: "Protokol",
+DlgLnkProtoOther	: "<drugo>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Odaberi sidro",
+DlgLnkAnchorByName	: "Po nazivu sidra",
+DlgLnkAnchorById	: "Po Id-ju elementa",
+DlgLnkNoAnchors		: "(Nema dostupnih sidra)",
+DlgLnkEMail			: "E-Mail adresa",
+DlgLnkEMailSubject	: "Naslov",
+DlgLnkEMailBody		: "Sadržaj poruke",
+DlgLnkUpload		: "Pošalji",
+DlgLnkBtnUpload		: "Pošalji na server",
+
+DlgLnkTarget		: "Meta",
+DlgLnkTargetFrame	: "<okvir>",
+DlgLnkTargetPopup	: "<popup prozor>",
+DlgLnkTargetBlank	: "Novi prozor (_blank)",
+DlgLnkTargetParent	: "Roditeljski prozor (_parent)",
+DlgLnkTargetSelf	: "Isti prozor (_self)",
+DlgLnkTargetTop		: "Prozor na vrhu (_top)",
+DlgLnkTargetFrameName	: "Naziv odredišnog frejma",
+DlgLnkPopWinName	: "Naziv popup prozora",
+DlgLnkPopWinFeat	: "Mogućnosti popup prozora",
+DlgLnkPopResize		: "Promenljiva velicina",
+DlgLnkPopLocation	: "Lokacija",
+DlgLnkPopMenu		: "Kontekstni meni",
+DlgLnkPopScroll		: "Scroll bar",
+DlgLnkPopStatus		: "Statusna linija",
+DlgLnkPopToolbar	: "Toolbar",
+DlgLnkPopFullScrn	: "Prikaz preko celog ekrana (IE)",
+DlgLnkPopDependent	: "Zavisno (Netscape)",
+DlgLnkPopWidth		: "Širina",
+DlgLnkPopHeight		: "Visina",
+DlgLnkPopLeft		: "Od leve ivice ekrana (px)",
+DlgLnkPopTop		: "Od vrha ekrana (px)",
+
+DlnLnkMsgNoUrl		: "Unesite URL linka",
+DlnLnkMsgNoEMail	: "Otkucajte adresu elektronske pote",
+DlnLnkMsgNoAnchor	: "Odaberite sidro",
+DlnLnkMsgInvPopName	: "The popup name must begin with an alphabetic character and must not contain spaces",	//MISSING
+
+// Color Dialog
+DlgColorTitle		: "Odaberite boju",
+DlgColorBtnClear	: "Obriši",
+DlgColorHighlight	: "Posvetli",
+DlgColorSelected	: "Odaberi",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Unesi smajlija",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Odaberite specijalni karakter",
+
+// Table Dialog
+DlgTableTitle		: "Osobine tabele",
+DlgTableRows		: "Redova",
+DlgTableColumns		: "Kolona",
+DlgTableBorder		: "Veličina okvira",
+DlgTableAlign		: "Ravnanje",
+DlgTableAlignNotSet	: "<nije postavljeno>",
+DlgTableAlignLeft	: "Levo",
+DlgTableAlignCenter	: "Sredina",
+DlgTableAlignRight	: "Desno",
+DlgTableWidth		: "Širina",
+DlgTableWidthPx		: "piksela",
+DlgTableWidthPc		: "procenata",
+DlgTableHeight		: "Visina",
+DlgTableCellSpace	: "Ćelijski prostor",
+DlgTableCellPad		: "Razmak ćelija",
+DlgTableCaption		: "Naslov tabele",
+DlgTableSummary		: "Summary",	//MISSING
+
+// Table Cell Dialog
+DlgCellTitle		: "Osobine ćelije",
+DlgCellWidth		: "Širina",
+DlgCellWidthPx		: "piksela",
+DlgCellWidthPc		: "procenata",
+DlgCellHeight		: "Visina",
+DlgCellWordWrap		: "Deljenje reči",
+DlgCellWordWrapNotSet	: "<nije postavljeno>",
+DlgCellWordWrapYes	: "Da",
+DlgCellWordWrapNo	: "Ne",
+DlgCellHorAlign		: "Vodoravno ravnanje",
+DlgCellHorAlignNotSet	: "<nije postavljeno>",
+DlgCellHorAlignLeft	: "Levo",
+DlgCellHorAlignCenter	: "Sredina",
+DlgCellHorAlignRight: "Desno",
+DlgCellVerAlign		: "Vertikalno ravnanje",
+DlgCellVerAlignNotSet	: "<nije postavljeno>",
+DlgCellVerAlignTop	: "Gornje",
+DlgCellVerAlignMiddle	: "Sredina",
+DlgCellVerAlignBottom	: "Donje",
+DlgCellVerAlignBaseline	: "Bazno",
+DlgCellRowSpan		: "Spajanje redova",
+DlgCellCollSpan		: "Spajanje kolona",
+DlgCellBackColor	: "Boja pozadine",
+DlgCellBorderColor	: "Boja okvira",
+DlgCellBtnSelect	: "Odaberi...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Find and Replace",	//MISSING
+
+// Find Dialog
+DlgFindTitle		: "Pronađi",
+DlgFindFindBtn		: "Pronađi",
+DlgFindNotFoundMsg	: "Traženi tekst nije pronađen.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Zameni",
+DlgReplaceFindLbl		: "Pronadi:",
+DlgReplaceReplaceLbl	: "Zameni sa:",
+DlgReplaceCaseChk		: "Razlikuj mala i velika slova",
+DlgReplaceReplaceBtn	: "Zameni",
+DlgReplaceReplAllBtn	: "Zameni sve",
+DlgReplaceWordChk		: "Uporedi cele reci",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "Sigurnosna podešavanja Vašeg pretraživača ne dozvoljavaju operacije automatskog isecanja teksta. Molimo Vas da koristite prečicu sa tastature (Ctrl+X).",
+PasteErrorCopy	: "Sigurnosna podešavanja Vašeg pretraživača ne dozvoljavaju operacije automatskog kopiranja teksta. Molimo Vas da koristite prečicu sa tastature (Ctrl+C).",
+
+PasteAsText		: "Zalepi kao čist tekst",
+PasteFromWord	: "Zalepi iz Worda",
+
+DlgPasteMsg2	: "Molimo Vas da zalepite unutar donje povrine koristeći tastaturnu prečicu (<STRONG>Ctrl+V</STRONG>) i da pritisnete <STRONG>OK</STRONG>.",
+DlgPasteSec		: "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.",	//MISSING
+DlgPasteIgnoreFont		: "Ignoriši definicije fontova",
+DlgPasteRemoveStyles	: "Ukloni definicije stilova",
+DlgPasteCleanBox		: "Obriši sve",
+
+// Color Picker
+ColorAutomatic	: "Automatski",
+ColorMoreColors	: "Više boja...",
+
+// Document Properties
+DocProps		: "Osobine dokumenta",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Osobine sidra",
+DlgAnchorName		: "Ime sidra",
+DlgAnchorErrorName	: "Unesite ime sidra",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Nije u rečniku",
+DlgSpellChangeTo		: "Izmeni",
+DlgSpellBtnIgnore		: "Ignoriši",
+DlgSpellBtnIgnoreAll	: "Ignoriši sve",
+DlgSpellBtnReplace		: "Zameni",
+DlgSpellBtnReplaceAll	: "Zameni sve",
+DlgSpellBtnUndo			: "Vrati akciju",
+DlgSpellNoSuggestions	: "- Bez sugestija -",
+DlgSpellProgress		: "Provera spelovanja u toku...",
+DlgSpellNoMispell		: "Provera spelovanja završena: greške nisu pronadene",
+DlgSpellNoChanges		: "Provera spelovanja završena: Nije izmenjena nijedna rec",
+DlgSpellOneChange		: "Provera spelovanja završena: Izmenjena je jedna reč",
+DlgSpellManyChanges		: "Provera spelovanja završena: %1 reč(i) je izmenjeno",
+
+IeSpellDownload			: "Provera spelovanja nije instalirana. Da li želite da je skinete sa Interneta?",
+
+// Button Dialog
+DlgButtonText		: "Tekst (vrednost)",
+DlgButtonType		: "Tip",
+DlgButtonTypeBtn	: "Button",	//MISSING
+DlgButtonTypeSbm	: "Submit",	//MISSING
+DlgButtonTypeRst	: "Reset",	//MISSING
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Naziv",
+DlgCheckboxValue	: "Vrednost",
+DlgCheckboxSelected	: "Označeno",
+
+// Form Dialog
+DlgFormName		: "Naziv",
+DlgFormAction	: "Akcija",
+DlgFormMethod	: "Metoda",
+
+// Select Field Dialog
+DlgSelectName		: "Naziv",
+DlgSelectValue		: "Vrednost",
+DlgSelectSize		: "Veličina",
+DlgSelectLines		: "linija",
+DlgSelectChkMulti	: "Dozvoli višestruku selekciju",
+DlgSelectOpAvail	: "Dostupne opcije",
+DlgSelectOpText		: "Tekst",
+DlgSelectOpValue	: "Vrednost",
+DlgSelectBtnAdd		: "Dodaj",
+DlgSelectBtnModify	: "Izmeni",
+DlgSelectBtnUp		: "Gore",
+DlgSelectBtnDown	: "Dole",
+DlgSelectBtnSetValue : "Podesi kao označenu vrednost",
+DlgSelectBtnDelete	: "Obriši",
+
+// Textarea Dialog
+DlgTextareaName	: "Naziv",
+DlgTextareaCols	: "Broj kolona",
+DlgTextareaRows	: "Broj redova",
+
+// Text Field Dialog
+DlgTextName			: "Naziv",
+DlgTextValue		: "Vrednost",
+DlgTextCharWidth	: "Širina (karaktera)",
+DlgTextMaxChars		: "Maksimalno karaktera",
+DlgTextType			: "Tip",
+DlgTextTypeText		: "Tekst",
+DlgTextTypePass		: "Lozinka",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Naziv",
+DlgHiddenValue	: "Vrednost",
+
+// Bulleted List Dialog
+BulletedListProp	: "Osobine nenabrojive liste",
+NumberedListProp	: "Osobine nabrojive liste",
+DlgLstStart			: "Start",	//MISSING
+DlgLstType			: "Tip",
+DlgLstTypeCircle	: "Krug",
+DlgLstTypeDisc		: "Disc",	//MISSING
+DlgLstTypeSquare	: "Kvadrat",
+DlgLstTypeNumbers	: "Brojevi (1, 2, 3)",
+DlgLstTypeLCase		: "mala slova (a, b, c)",
+DlgLstTypeUCase		: "VELIKA slova (A, B, C)",
+DlgLstTypeSRoman	: "Male rimske cifre (i, ii, iii)",
+DlgLstTypeLRoman	: "Velike rimske cifre (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Opšte osobine",
+DlgDocBackTab		: "Pozadina",
+DlgDocColorsTab		: "Boje i margine",
+DlgDocMetaTab		: "Metapodaci",
+
+DlgDocPageTitle		: "Naslov stranice",
+DlgDocLangDir		: "Smer jezika",
+DlgDocLangDirLTR	: "Sleva nadesno (LTR)",
+DlgDocLangDirRTL	: "Zdesna nalevo (RTL)",
+DlgDocLangCode		: "Šifra jezika",
+DlgDocCharSet		: "Kodiranje skupa karaktera",
+DlgDocCharSetCE		: "Central European",	//MISSING
+DlgDocCharSetCT		: "Chinese Traditional (Big5)",	//MISSING
+DlgDocCharSetCR		: "Cyrillic",	//MISSING
+DlgDocCharSetGR		: "Greek",	//MISSING
+DlgDocCharSetJP		: "Japanese",	//MISSING
+DlgDocCharSetKR		: "Korean",	//MISSING
+DlgDocCharSetTR		: "Turkish",	//MISSING
+DlgDocCharSetUN		: "Unicode (UTF-8)",	//MISSING
+DlgDocCharSetWE		: "Western European",	//MISSING
+DlgDocCharSetOther	: "Ostala kodiranja skupa karaktera",
+
+DlgDocDocType		: "Zaglavlje tipa dokumenta",
+DlgDocDocTypeOther	: "Ostala zaglavlja tipa dokumenta",
+DlgDocIncXHTML		: "Ukljuci XHTML deklaracije",
+DlgDocBgColor		: "Boja pozadine",
+DlgDocBgImage		: "URL pozadinske slike",
+DlgDocBgNoScroll	: "Fiksirana pozadina",
+DlgDocCText			: "Tekst",
+DlgDocCLink			: "Link",
+DlgDocCVisited		: "Posećeni link",
+DlgDocCActive		: "Aktivni link",
+DlgDocMargins		: "Margine stranice",
+DlgDocMaTop			: "Gornja",
+DlgDocMaLeft		: "Leva",
+DlgDocMaRight		: "Desna",
+DlgDocMaBottom		: "Donja",
+DlgDocMeIndex		: "Ključne reci za indeksiranje dokumenta (razdvojene zarezima)",
+DlgDocMeDescr		: "Opis dokumenta",
+DlgDocMeAuthor		: "Autor",
+DlgDocMeCopy		: "Autorska prava",
+DlgDocPreview		: "Izgled stranice",
+
+// Templates Dialog
+Templates			: "Obrasci",
+DlgTemplatesTitle	: "Obrasci za sadržaj",
+DlgTemplatesSelMsg	: "Molimo Vas da odaberete obrazac koji ce biti primenjen na stranicu (trenutni sadržaj ce biti obrisan):",
+DlgTemplatesLoading	: "Učitavam listu obrazaca. Malo strpljenja...",
+DlgTemplatesNoTpl	: "(Nema definisanih obrazaca)",
+DlgTemplatesReplace	: "Replace actual contents",	//MISSING
+
+// About Dialog
+DlgAboutAboutTab	: "O editoru",
+DlgAboutBrowserInfoTab	: "Informacije o pretraživacu",
+DlgAboutLicenseTab	: "License",	//MISSING
+DlgAboutVersion		: "verzija",
+DlgAboutInfo		: "Za više informacija posetite"
+};
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/sr.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/sr.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/sr.js	(revision 1280)
@@ -0,0 +1,516 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Serbian (Cyrillic) language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Смањи линију са алаткама",
+ToolbarExpand		: "Прошири линију са алаткама",
+
+// Toolbar Items and Context Menu
+Save				: "Сачувај",
+NewPage				: "Нова страница",
+Preview				: "Изглед странице",
+Cut					: "Исеци",
+Copy				: "Копирај",
+Paste				: "Залепи",
+PasteText			: "Залепи као неформатиран текст",
+PasteWord			: "Залепи из Worda",
+Print				: "Штампа",
+SelectAll			: "Означи све",
+RemoveFormat		: "Уклони форматирање",
+InsertLinkLbl		: "Линк",
+InsertLink			: "Унеси/измени линк",
+RemoveLink			: "Уклони линк",
+Anchor				: "Унеси/измени сидро",
+AnchorDelete		: "Remove Anchor",	//MISSING
+InsertImageLbl		: "Слика",
+InsertImage			: "Унеси/измени слику",
+InsertFlashLbl		: "Флеш елемент",
+InsertFlash			: "Унеси/измени флеш",
+InsertTableLbl		: "Табела",
+InsertTable			: "Унеси/измени табелу",
+InsertLineLbl		: "Линија",
+InsertLine			: "Унеси хоризонталну линију",
+InsertSpecialCharLbl: "Специјални карактери",
+InsertSpecialChar	: "Унеси специјални карактер",
+InsertSmileyLbl		: "Смајли",
+InsertSmiley		: "Унеси смајлија",
+About				: "О ФЦКедитору",
+Bold				: "Подебљано",
+Italic				: "Курзив",
+Underline			: "Подвучено",
+StrikeThrough		: "Прецртано",
+Subscript			: "Индекс",
+Superscript			: "Степен",
+LeftJustify			: "Лево равнање",
+CenterJustify		: "Центриран текст",
+RightJustify		: "Десно равнање",
+BlockJustify		: "Обострано равнање",
+DecreaseIndent		: "Смањи леву маргину",
+IncreaseIndent		: "Увећај леву маргину",
+Blockquote			: "Blockquote",	//MISSING
+Undo				: "Поништи акцију",
+Redo				: "Понови акцију",
+NumberedListLbl		: "Набројиву листу",
+NumberedList		: "Унеси/уклони набројиву листу",
+BulletedListLbl		: "Ненабројива листа",
+BulletedList		: "Унеси/уклони ненабројиву листу",
+ShowTableBorders	: "Прикажи оквир табеле",
+ShowDetails			: "Прикажи детаље",
+Style				: "Стил",
+FontFormat			: "Формат",
+Font				: "Фонт",
+FontSize			: "Величина фонта",
+TextColor			: "Боја текста",
+BGColor				: "Боја позадине",
+Source				: "Kôд",
+Find				: "Претрага",
+Replace				: "Замена",
+SpellCheck			: "Провери спеловање",
+UniversalKeyboard	: "Универзална тастатура",
+PageBreakLbl		: "Page Break",	//MISSING
+PageBreak			: "Insert Page Break",	//MISSING
+
+Form			: "Форма",
+Checkbox		: "Поље за потврду",
+RadioButton		: "Радио-дугме",
+TextField		: "Текстуално поље",
+Textarea		: "Зона текста",
+HiddenField		: "Скривено поље",
+Button			: "Дугме",
+SelectionField	: "Изборно поље",
+ImageButton		: "Дугме са сликом",
+
+FitWindow		: "Maximize the editor size",	//MISSING
+ShowBlocks		: "Show Blocks",	//MISSING
+
+// Context Menu
+EditLink			: "Промени линк",
+CellCM				: "Cell",	//MISSING
+RowCM				: "Row",	//MISSING
+ColumnCM			: "Column",	//MISSING
+InsertRowAfter		: "Insert Row After",	//MISSING
+InsertRowBefore		: "Insert Row Before",	//MISSING
+DeleteRows			: "Обриши редове",
+InsertColumnAfter	: "Insert Column After",	//MISSING
+InsertColumnBefore	: "Insert Column Before",	//MISSING
+DeleteColumns		: "Обриши колоне",
+InsertCellAfter		: "Insert Cell After",	//MISSING
+InsertCellBefore	: "Insert Cell Before",	//MISSING
+DeleteCells			: "Обриши ћелије",
+MergeCells			: "Спој ћелије",
+MergeRight			: "Merge Right",	//MISSING
+MergeDown			: "Merge Down",	//MISSING
+HorizontalSplitCell	: "Split Cell Horizontally",	//MISSING
+VerticalSplitCell	: "Split Cell Vertically",	//MISSING
+TableDelete			: "Delete Table",	//MISSING
+CellProperties		: "Особине ћелије",
+TableProperties		: "Особине табеле",
+ImageProperties		: "Особине слике",
+FlashProperties		: "Особине Флеша",
+
+AnchorProp			: "Особине сидра",
+ButtonProp			: "Особине дугмета",
+CheckboxProp		: "Особине поља за потврду",
+HiddenFieldProp		: "Особине скривеног поља",
+RadioButtonProp		: "Особине радио-дугмета",
+ImageButtonProp		: "Особине дугмета са сликом",
+TextFieldProp		: "Особине текстуалног поља",
+SelectionFieldProp	: "Особине изборног поља",
+TextareaProp		: "Особине зоне текста",
+FormProp			: "Особине форме",
+
+FontFormats			: "Normal;Formatirano;Adresa;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6",
+
+// Alerts and Messages
+ProcessingXHTML		: "Обрађујем XHTML. Maлo стрпљења...",
+Done				: "Завршио",
+PasteWordConfirm	: "Текст који желите да налепите копиран је из Worda. Да ли желите да буде очишћен од формата пре лепљења?",
+NotCompatiblePaste	: "Ова команда је доступна само за Интернет Екплорер од верзије 5.5. Да ли желите да налепим текст без чишћења?",
+UnknownToolbarItem	: "Непозната ставка toolbara \"%1\"",
+UnknownCommand		: "Непозната наредба \"%1\"",
+NotImplemented		: "Наредба није имплементирана",
+UnknownToolbarSet	: "Toolbar \"%1\" не постоји",
+NoActiveX			: "Your browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.",	//MISSING
+BrowseServerBlocked : "The resources browser could not be opened. Make sure that all popup blockers are disabled.",	//MISSING
+DialogBlocked		: "It was not possible to open the dialog window. Make sure all popup blockers are disabled.",	//MISSING
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Oткажи",
+DlgBtnClose			: "Затвори",
+DlgBtnBrowseServer	: "Претражи сервер",
+DlgAdvancedTag		: "Напредни тагови",
+DlgOpOther			: "<Остали>",
+DlgInfoTab			: "Инфо",
+DlgAlertUrl			: "Молимо Вас, унесите УРЛ",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<није постављено>",
+DlgGenId			: "Ид",
+DlgGenLangDir		: "Смер језика",
+DlgGenLangDirLtr	: "С лева на десно (LTR)",
+DlgGenLangDirRtl	: "С десна на лево (RTL)",
+DlgGenLangCode		: "Kôд језика",
+DlgGenAccessKey		: "Приступни тастер",
+DlgGenName			: "Назив",
+DlgGenTabIndex		: "Таб индекс",
+DlgGenLongDescr		: "Пун опис УРЛ",
+DlgGenClass			: "Stylesheet класе",
+DlgGenTitle			: "Advisory наслов",
+DlgGenContType		: "Advisory врста садржаја",
+DlgGenLinkCharset	: "Linked Resource Charset",
+DlgGenStyle			: "Стил",
+
+// Image Dialog
+DlgImgTitle			: "Особине слика",
+DlgImgInfoTab		: "Инфо слике",
+DlgImgBtnUpload		: "Пошаљи на сервер",
+DlgImgURL			: "УРЛ",
+DlgImgUpload		: "Пошаљи",
+DlgImgAlt			: "Алтернативни текст",
+DlgImgWidth			: "Ширина",
+DlgImgHeight		: "Висина",
+DlgImgLockRatio		: "Закључај однос",
+DlgBtnResetSize		: "Ресетуј величину",
+DlgImgBorder		: "Оквир",
+DlgImgHSpace		: "HSpace",
+DlgImgVSpace		: "VSpace",
+DlgImgAlign			: "Равнање",
+DlgImgAlignLeft		: "Лево",
+DlgImgAlignAbsBottom: "Abs доле",
+DlgImgAlignAbsMiddle: "Abs средина",
+DlgImgAlignBaseline	: "Базно",
+DlgImgAlignBottom	: "Доле",
+DlgImgAlignMiddle	: "Средина",
+DlgImgAlignRight	: "Десно",
+DlgImgAlignTextTop	: "Врх текста",
+DlgImgAlignTop		: "Врх",
+DlgImgPreview		: "Изглед",
+DlgImgAlertUrl		: "Унесите УРЛ слике",
+DlgImgLinkTab		: "Линк",
+
+// Flash Dialog
+DlgFlashTitle		: "Особине флеша",
+DlgFlashChkPlay		: "Аутоматски старт",
+DlgFlashChkLoop		: "Понављај",
+DlgFlashChkMenu		: "Укључи флеш мени",
+DlgFlashScale		: "Скалирај",
+DlgFlashScaleAll	: "Прикажи све",
+DlgFlashScaleNoBorder	: "Без ивице",
+DlgFlashScaleFit	: "Попуни површину",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Линк",
+DlgLnkInfoTab		: "Линк инфо",
+DlgLnkTargetTab		: "Мета",
+
+DlgLnkType			: "Врста линка",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Сидро на овој страници",
+DlgLnkTypeEMail		: "Eлектронска пошта",
+DlgLnkProto			: "Протокол",
+DlgLnkProtoOther	: "<друго>",
+DlgLnkURL			: "УРЛ",
+DlgLnkAnchorSel		: "Одабери сидро",
+DlgLnkAnchorByName	: "По називу сидра",
+DlgLnkAnchorById	: "Пo Ид-jу елемента",
+DlgLnkNoAnchors		: "(Нема доступних сидра)",
+DlgLnkEMail			: "Адреса електронске поште",
+DlgLnkEMailSubject	: "Наслов",
+DlgLnkEMailBody		: "Садржај поруке",
+DlgLnkUpload		: "Пошаљи",
+DlgLnkBtnUpload		: "Пошаљи на сервер",
+
+DlgLnkTarget		: "Meтa",
+DlgLnkTargetFrame	: "<оквир>",
+DlgLnkTargetPopup	: "<искачући прозор>",
+DlgLnkTargetBlank	: "Нови прозор (_blank)",
+DlgLnkTargetParent	: "Родитељски прозор (_parent)",
+DlgLnkTargetSelf	: "Исти прозор (_self)",
+DlgLnkTargetTop		: "Прозор на врху (_top)",
+DlgLnkTargetFrameName	: "Назив одредишног фрејма",
+DlgLnkPopWinName	: "Назив искачућег прозора",
+DlgLnkPopWinFeat	: "Могућности искачућег прозора",
+DlgLnkPopResize		: "Променљива величина",
+DlgLnkPopLocation	: "Локација",
+DlgLnkPopMenu		: "Контекстни мени",
+DlgLnkPopScroll		: "Скрол бар",
+DlgLnkPopStatus		: "Статусна линија",
+DlgLnkPopToolbar	: "Toolbar",
+DlgLnkPopFullScrn	: "Приказ преко целог екрана (ИE)",
+DlgLnkPopDependent	: "Зависно (Netscape)",
+DlgLnkPopWidth		: "Ширина",
+DlgLnkPopHeight		: "Висина",
+DlgLnkPopLeft		: "Од леве ивице екрана (пиксела)",
+DlgLnkPopTop		: "Од врха екрана (пиксела)",
+
+DlnLnkMsgNoUrl		: "Унесите УРЛ линка",
+DlnLnkMsgNoEMail	: "Откуцајте адресу електронске поште",
+DlnLnkMsgNoAnchor	: "Одаберите сидро",
+DlnLnkMsgInvPopName	: "The popup name must begin with an alphabetic character and must not contain spaces",	//MISSING
+
+// Color Dialog
+DlgColorTitle		: "Одаберите боју",
+DlgColorBtnClear	: "Обриши",
+DlgColorHighlight	: "Посветли",
+DlgColorSelected	: "Одабери",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Унеси смајлија",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Одаберите специјални карактер",
+
+// Table Dialog
+DlgTableTitle		: "Особине табеле",
+DlgTableRows		: "Редова",
+DlgTableColumns		: "Kолона",
+DlgTableBorder		: "Величина оквира",
+DlgTableAlign		: "Равнање",
+DlgTableAlignNotSet	: "<није постављено>",
+DlgTableAlignLeft	: "Лево",
+DlgTableAlignCenter	: "Средина",
+DlgTableAlignRight	: "Десно",
+DlgTableWidth		: "Ширина",
+DlgTableWidthPx		: "пиксела",
+DlgTableWidthPc		: "процената",
+DlgTableHeight		: "Висина",
+DlgTableCellSpace	: "Ћелијски простор",
+DlgTableCellPad		: "Размак ћелија",
+DlgTableCaption		: "Наслов табеле",
+DlgTableSummary		: "Summary",	//MISSING
+
+// Table Cell Dialog
+DlgCellTitle		: "Особине ћелије",
+DlgCellWidth		: "Ширина",
+DlgCellWidthPx		: "пиксела",
+DlgCellWidthPc		: "процената",
+DlgCellHeight		: "Висина",
+DlgCellWordWrap		: "Дељење речи",
+DlgCellWordWrapNotSet	: "<није постављено>",
+DlgCellWordWrapYes	: "Да",
+DlgCellWordWrapNo	: "Не",
+DlgCellHorAlign		: "Водоравно равнање",
+DlgCellHorAlignNotSet	: "<није постављено>",
+DlgCellHorAlignLeft	: "Лево",
+DlgCellHorAlignCenter	: "Средина",
+DlgCellHorAlignRight: "Десно",
+DlgCellVerAlign		: "Вертикално равнање",
+DlgCellVerAlignNotSet	: "<није постављено>",
+DlgCellVerAlignTop	: "Горње",
+DlgCellVerAlignMiddle	: "Средина",
+DlgCellVerAlignBottom	: "Доње",
+DlgCellVerAlignBaseline	: "Базно",
+DlgCellRowSpan		: "Спајање редова",
+DlgCellCollSpan		: "Спајање колона",
+DlgCellBackColor	: "Боја позадине",
+DlgCellBorderColor	: "Боја оквира",
+DlgCellBtnSelect	: "Oдабери...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Find and Replace",	//MISSING
+
+// Find Dialog
+DlgFindTitle		: "Пронађи",
+DlgFindFindBtn		: "Пронађи",
+DlgFindNotFoundMsg	: "Тражени текст није пронађен.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Замени",
+DlgReplaceFindLbl		: "Пронађи:",
+DlgReplaceReplaceLbl	: "Замени са:",
+DlgReplaceCaseChk		: "Разликуј велика и мала слова",
+DlgReplaceReplaceBtn	: "Замени",
+DlgReplaceReplAllBtn	: "Замени све",
+DlgReplaceWordChk		: "Упореди целе речи",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "Сигурносна подешавања Вашег претраживача не дозвољавају операције аутоматског исецања текста. Молимо Вас да користите пречицу са тастатуре (Ctrl+X).",
+PasteErrorCopy	: "Сигурносна подешавања Вашег претраживача не дозвољавају операције аутоматског копирања текста. Молимо Вас да користите пречицу са тастатуре (Ctrl+C).",
+
+PasteAsText		: "Залепи као чист текст",
+PasteFromWord	: "Залепи из Worda",
+
+DlgPasteMsg2	: "Молимо Вас да залепите унутар доње површине користећи тастатурну пречицу (<STRONG>Ctrl+V</STRONG>) и да притиснете <STRONG>OK</STRONG>.",
+DlgPasteSec		: "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.",	//MISSING
+DlgPasteIgnoreFont		: "Игнориши Font Face дефиниције",
+DlgPasteRemoveStyles	: "Уклони дефиниције стилова",
+DlgPasteCleanBox		: "Обриши све",
+
+// Color Picker
+ColorAutomatic	: "Аутоматски",
+ColorMoreColors	: "Више боја...",
+
+// Document Properties
+DocProps		: "Особине документа",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Особине сидра",
+DlgAnchorName		: "Име сидра",
+DlgAnchorErrorName	: "Молимо Вас да унесете име сидра",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Није у речнику",
+DlgSpellChangeTo		: "Измени",
+DlgSpellBtnIgnore		: "Игнориши",
+DlgSpellBtnIgnoreAll	: "Игнориши све",
+DlgSpellBtnReplace		: "Замени",
+DlgSpellBtnReplaceAll	: "Замени све",
+DlgSpellBtnUndo			: "Врати акцију",
+DlgSpellNoSuggestions	: "- Без сугестија -",
+DlgSpellProgress		: "Провера спеловања у току...",
+DlgSpellNoMispell		: "Провера спеловања завршена: грешке нису пронађене",
+DlgSpellNoChanges		: "Провера спеловања завршена: Није измењена ниједна реч",
+DlgSpellOneChange		: "Провера спеловања завршена: Измењена је једна реч",
+DlgSpellManyChanges		: "Провера спеловања завршена:  %1 реч(и) је измењено",
+
+IeSpellDownload			: "Провера спеловања није инсталирана. Да ли желите да је скинете са Интернета?",
+
+// Button Dialog
+DlgButtonText		: "Текст (вредност)",
+DlgButtonType		: "Tип",
+DlgButtonTypeBtn	: "Button",	//MISSING
+DlgButtonTypeSbm	: "Submit",	//MISSING
+DlgButtonTypeRst	: "Reset",	//MISSING
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Назив",
+DlgCheckboxValue	: "Вредност",
+DlgCheckboxSelected	: "Означено",
+
+// Form Dialog
+DlgFormName		: "Назив",
+DlgFormAction	: "Aкција",
+DlgFormMethod	: "Mетода",
+
+// Select Field Dialog
+DlgSelectName		: "Назив",
+DlgSelectValue		: "Вредност",
+DlgSelectSize		: "Величина",
+DlgSelectLines		: "линија",
+DlgSelectChkMulti	: "Дозволи вишеструку селекцију",
+DlgSelectOpAvail	: "Доступне опције",
+DlgSelectOpText		: "Текст",
+DlgSelectOpValue	: "Вредност",
+DlgSelectBtnAdd		: "Додај",
+DlgSelectBtnModify	: "Измени",
+DlgSelectBtnUp		: "Горе",
+DlgSelectBtnDown	: "Доле",
+DlgSelectBtnSetValue : "Подеси као означену вредност",
+DlgSelectBtnDelete	: "Обриши",
+
+// Textarea Dialog
+DlgTextareaName	: "Назив",
+DlgTextareaCols	: "Број колона",
+DlgTextareaRows	: "Број редова",
+
+// Text Field Dialog
+DlgTextName			: "Назив",
+DlgTextValue		: "Вредност",
+DlgTextCharWidth	: "Ширина (карактера)",
+DlgTextMaxChars		: "Максимално карактера",
+DlgTextType			: "Тип",
+DlgTextTypeText		: "Текст",
+DlgTextTypePass		: "Лозинка",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Назив",
+DlgHiddenValue	: "Вредност",
+
+// Bulleted List Dialog
+BulletedListProp	: "Особине Bulleted листе",
+NumberedListProp	: "Особине набројиве листе",
+DlgLstStart			: "Start",	//MISSING
+DlgLstType			: "Тип",
+DlgLstTypeCircle	: "Круг",
+DlgLstTypeDisc		: "Disc",	//MISSING
+DlgLstTypeSquare	: "Квадрат",
+DlgLstTypeNumbers	: "Бројеви (1, 2, 3)",
+DlgLstTypeLCase		: "мала слова (a, b, c)",
+DlgLstTypeUCase		: "ВЕЛИКА СЛОВА (A, B, C)",
+DlgLstTypeSRoman	: "Мале римске цифре (i, ii, iii)",
+DlgLstTypeLRoman	: "Велике римске цифре (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Опште особине",
+DlgDocBackTab		: "Позадина",
+DlgDocColorsTab		: "Боје и маргине",
+DlgDocMetaTab		: "Метаподаци",
+
+DlgDocPageTitle		: "Наслов странице",
+DlgDocLangDir		: "Смер језика",
+DlgDocLangDirLTR	: "Слева надесно (LTR)",
+DlgDocLangDirRTL	: "Здесна налево (RTL)",
+DlgDocLangCode		: "Шифра језика",
+DlgDocCharSet		: "Кодирање скупа карактера",
+DlgDocCharSetCE		: "Central European",	//MISSING
+DlgDocCharSetCT		: "Chinese Traditional (Big5)",	//MISSING
+DlgDocCharSetCR		: "Cyrillic",	//MISSING
+DlgDocCharSetGR		: "Greek",	//MISSING
+DlgDocCharSetJP		: "Japanese",	//MISSING
+DlgDocCharSetKR		: "Korean",	//MISSING
+DlgDocCharSetTR		: "Turkish",	//MISSING
+DlgDocCharSetUN		: "Unicode (UTF-8)",	//MISSING
+DlgDocCharSetWE		: "Western European",	//MISSING
+DlgDocCharSetOther	: "Остала кодирања скупа карактера",
+
+DlgDocDocType		: "Заглавље типа документа",
+DlgDocDocTypeOther	: "Остала заглавља типа документа",
+DlgDocIncXHTML		: "Улључи XHTML декларације",
+DlgDocBgColor		: "Боја позадине",
+DlgDocBgImage		: "УРЛ позадинске слике",
+DlgDocBgNoScroll	: "Фиксирана позадина",
+DlgDocCText			: "Текст",
+DlgDocCLink			: "Линк",
+DlgDocCVisited		: "Посећени линк",
+DlgDocCActive		: "Активни линк",
+DlgDocMargins		: "Маргине странице",
+DlgDocMaTop			: "Горња",
+DlgDocMaLeft		: "Лева",
+DlgDocMaRight		: "Десна",
+DlgDocMaBottom		: "Доња",
+DlgDocMeIndex		: "Кључне речи за индексирање документа (раздвојене зарезом)",
+DlgDocMeDescr		: "Опис документа",
+DlgDocMeAuthor		: "Аутор",
+DlgDocMeCopy		: "Ауторска права",
+DlgDocPreview		: "Изглед странице",
+
+// Templates Dialog
+Templates			: "Обрасци",
+DlgTemplatesTitle	: "Обрасци за садржај",
+DlgTemplatesSelMsg	: "Молимо Вас да одаберете образац који ће бити примењен на страницу (тренутни садржај ће бити обрисан):",
+DlgTemplatesLoading	: "Учитавам листу образаца. Мало стрпљења...",
+DlgTemplatesNoTpl	: "(Нема дефинисаних образаца)",
+DlgTemplatesReplace	: "Replace actual contents",	//MISSING
+
+// About Dialog
+DlgAboutAboutTab	: "О едитору",
+DlgAboutBrowserInfoTab	: "Информације о претраживачу",
+DlgAboutLicenseTab	: "License",	//MISSING
+DlgAboutVersion		: "верзија",
+DlgAboutInfo		: "За више информација посетите"
+};
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/sv.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/sv.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/sv.js	(revision 1280)
@@ -0,0 +1,516 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Swedish language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Dölj verktygsfält",
+ToolbarExpand		: "Visa verktygsfält",
+
+// Toolbar Items and Context Menu
+Save				: "Spara",
+NewPage				: "Ny sida",
+Preview				: "Förhandsgranska",
+Cut					: "Klipp ut",
+Copy				: "Kopiera",
+Paste				: "Klistra in",
+PasteText			: "Klistra in som text",
+PasteWord			: "Klistra in från Word",
+Print				: "Skriv ut",
+SelectAll			: "Markera allt",
+RemoveFormat		: "Radera formatering",
+InsertLinkLbl		: "Länk",
+InsertLink			: "Infoga/Redigera länk",
+RemoveLink			: "Radera länk",
+Anchor				: "Infoga/Redigera ankarlänk",
+AnchorDelete		: "Remove Anchor",	//MISSING
+InsertImageLbl		: "Bild",
+InsertImage			: "Infoga/Redigera bild",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Infoga/Redigera Flash",
+InsertTableLbl		: "Tabell",
+InsertTable			: "Infoga/Redigera tabell",
+InsertLineLbl		: "Linje",
+InsertLine			: "Infoga horisontal linje",
+InsertSpecialCharLbl: "Utökade tecken",
+InsertSpecialChar	: "Klistra in utökat tecken",
+InsertSmileyLbl		: "Smiley",
+InsertSmiley		: "Infoga Smiley",
+About				: "Om FCKeditor",
+Bold				: "Fet",
+Italic				: "Kursiv",
+Underline			: "Understruken",
+StrikeThrough		: "Genomstruken",
+Subscript			: "Nedsänkta tecken",
+Superscript			: "Upphöjda tecken",
+LeftJustify			: "Vänsterjustera",
+CenterJustify		: "Centrera",
+RightJustify		: "Högerjustera",
+BlockJustify		: "Justera till marginaler",
+DecreaseIndent		: "Minska indrag",
+IncreaseIndent		: "Öka indrag",
+Blockquote			: "Blockquote",	//MISSING
+Undo				: "Ångra",
+Redo				: "Gör om",
+NumberedListLbl		: "Numrerad lista",
+NumberedList		: "Infoga/Radera numrerad lista",
+BulletedListLbl		: "Punktlista",
+BulletedList		: "Infoga/Radera punktlista",
+ShowTableBorders	: "Visa tabellkant",
+ShowDetails			: "Visa radbrytningar",
+Style				: "Anpassad stil",
+FontFormat			: "Teckenformat",
+Font				: "Typsnitt",
+FontSize			: "Storlek",
+TextColor			: "Textfärg",
+BGColor				: "Bakgrundsfärg",
+Source				: "Källa",
+Find				: "Sök",
+Replace				: "Ersätt",
+SpellCheck			: "Stavningskontroll",
+UniversalKeyboard	: "Universellt tangentbord",
+PageBreakLbl		: "Sidbrytning",
+PageBreak			: "Infoga sidbrytning",
+
+Form			: "Formulär",
+Checkbox		: "Kryssruta",
+RadioButton		: "Alternativknapp",
+TextField		: "Textfält",
+Textarea		: "Textruta",
+HiddenField		: "Dolt fält",
+Button			: "Knapp",
+SelectionField	: "Flervalslista",
+ImageButton		: "Bildknapp",
+
+FitWindow		: "Anpassa till fönstrets storlek",
+ShowBlocks		: "Show Blocks",	//MISSING
+
+// Context Menu
+EditLink			: "Redigera länk",
+CellCM				: "Cell",
+RowCM				: "Rad",
+ColumnCM			: "Kolumn",
+InsertRowAfter		: "Insert Row After",	//MISSING
+InsertRowBefore		: "Insert Row Before",	//MISSING
+DeleteRows			: "Radera rad",
+InsertColumnAfter	: "Insert Column After",	//MISSING
+InsertColumnBefore	: "Insert Column Before",	//MISSING
+DeleteColumns		: "Radera kolumn",
+InsertCellAfter		: "Insert Cell After",	//MISSING
+InsertCellBefore	: "Insert Cell Before",	//MISSING
+DeleteCells			: "Radera celler",
+MergeCells			: "Sammanfoga celler",
+MergeRight			: "Merge Right",	//MISSING
+MergeDown			: "Merge Down",	//MISSING
+HorizontalSplitCell	: "Split Cell Horizontally",	//MISSING
+VerticalSplitCell	: "Split Cell Vertically",	//MISSING
+TableDelete			: "Radera tabell",
+CellProperties		: "Cellegenskaper",
+TableProperties		: "Tabellegenskaper",
+ImageProperties		: "Bildegenskaper",
+FlashProperties		: "Flashegenskaper",
+
+AnchorProp			: "Egenskaper för ankarlänk",
+ButtonProp			: "Egenskaper för knapp",
+CheckboxProp		: "Egenskaper för kryssruta",
+HiddenFieldProp		: "Egenskaper för dolt fält",
+RadioButtonProp		: "Egenskaper för alternativknapp",
+ImageButtonProp		: "Egenskaper för bildknapp",
+TextFieldProp		: "Egenskaper för textfält",
+SelectionFieldProp	: "Egenskaper för flervalslista",
+TextareaProp		: "Egenskaper för textruta",
+FormProp			: "Egenskaper för formulär",
+
+FontFormats			: "Normal;Formaterad;Adress;Rubrik 1;Rubrik 2;Rubrik 3;Rubrik 4;Rubrik 5;Rubrik 6;Normal (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "Bearbetar XHTML. Var god vänta...",
+Done				: "Klar",
+PasteWordConfirm	: "Texten du vill klistra in verkar vara kopierad från Word. Vill du rensa innan du klistar in?",
+NotCompatiblePaste	: "Denna åtgärd är inte tillgängligt för Internet Explorer version 5.5 eller högre. Vill du klistra in utan att rensa?",
+UnknownToolbarItem	: "Okänt verktygsfält \"%1\"",
+UnknownCommand		: "Okänt kommando \"%1\"",
+NotImplemented		: "Kommandot finns ej",
+UnknownToolbarSet	: "Verktygsfält \"%1\" finns ej",
+NoActiveX			: "Din webläsares säkerhetsinställningar kan begränsa funktionaliteten. Du bör aktivera \"Kör ActiveX kontroller och plug-ins\". Fel och avsaknad av funktioner kan annars uppstå.",
+BrowseServerBlocked : "Kunde Ej öppna resursfönstret. Var god och avaktivera alla popup-blockerare.",
+DialogBlocked		: "Kunde Ej öppna dialogfönstret. Var god och avaktivera alla popup-blockerare.",
+
+// Dialogs
+DlgBtnOK			: "OK",
+DlgBtnCancel		: "Avbryt",
+DlgBtnClose			: "Stäng",
+DlgBtnBrowseServer	: "Bläddra på server",
+DlgAdvancedTag		: "Avancerad",
+DlgOpOther			: "Övrigt",
+DlgInfoTab			: "Information",
+DlgAlertUrl			: "Var god och ange en URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<ej angivet>",
+DlgGenId			: "Id",
+DlgGenLangDir		: "Språkriktning",
+DlgGenLangDirLtr	: "Vänster till Höger (VTH)",
+DlgGenLangDirRtl	: "Höger till Vänster (HTV)",
+DlgGenLangCode		: "Språkkod",
+DlgGenAccessKey		: "Behörighetsnyckel",
+DlgGenName			: "Namn",
+DlgGenTabIndex		: "Tabindex",
+DlgGenLongDescr		: "URL-beskrivning",
+DlgGenClass			: "Stylesheet class",
+DlgGenTitle			: "Titel",
+DlgGenContType		: "Innehållstyp",
+DlgGenLinkCharset	: "Teckenuppställning",
+DlgGenStyle			: "Style",
+
+// Image Dialog
+DlgImgTitle			: "Bildegenskaper",
+DlgImgInfoTab		: "Bildinformation",
+DlgImgBtnUpload		: "Skicka till server",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Ladda upp",
+DlgImgAlt			: "Alternativ text",
+DlgImgWidth			: "Bredd",
+DlgImgHeight		: "Höjd",
+DlgImgLockRatio		: "Lås höjd/bredd förhållanden",
+DlgBtnResetSize		: "Återställ storlek",
+DlgImgBorder		: "Kant",
+DlgImgHSpace		: "Horis. marginal",
+DlgImgVSpace		: "Vert. marginal",
+DlgImgAlign			: "Justering",
+DlgImgAlignLeft		: "Vänster",
+DlgImgAlignAbsBottom: "Absolut nederkant",
+DlgImgAlignAbsMiddle: "Absolut centrering",
+DlgImgAlignBaseline	: "Baslinje",
+DlgImgAlignBottom	: "Nederkant",
+DlgImgAlignMiddle	: "Mitten",
+DlgImgAlignRight	: "Höger",
+DlgImgAlignTextTop	: "Text överkant",
+DlgImgAlignTop		: "Överkant",
+DlgImgPreview		: "Förhandsgranska",
+DlgImgAlertUrl		: "Var god och ange bildens URL",
+DlgImgLinkTab		: "Länk",
+
+// Flash Dialog
+DlgFlashTitle		: "Flashegenskaper",
+DlgFlashChkPlay		: "Automatisk uppspelning",
+DlgFlashChkLoop		: "Upprepa/Loopa",
+DlgFlashChkMenu		: "Aktivera Flashmeny",
+DlgFlashScale		: "Skala",
+DlgFlashScaleAll	: "Visa allt",
+DlgFlashScaleNoBorder	: "Ingen ram",
+DlgFlashScaleFit	: "Exakt passning",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Länk",
+DlgLnkInfoTab		: "Länkinformation",
+DlgLnkTargetTab		: "Mål",
+
+DlgLnkType			: "Länktyp",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Ankare i sidan",
+DlgLnkTypeEMail		: "E-post",
+DlgLnkProto			: "Protokoll",
+DlgLnkProtoOther	: "<övrigt>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Välj ett ankare",
+DlgLnkAnchorByName	: "efter ankarnamn",
+DlgLnkAnchorById	: "efter objektid",
+DlgLnkNoAnchors		: "(Inga ankare kunde hittas)",
+DlgLnkEMail			: "E-postadress",
+DlgLnkEMailSubject	: "Ämne",
+DlgLnkEMailBody		: "Innehåll",
+DlgLnkUpload		: "Ladda upp",
+DlgLnkBtnUpload		: "Skicka till servern",
+
+DlgLnkTarget		: "Mål",
+DlgLnkTargetFrame	: "<ram>",
+DlgLnkTargetPopup	: "<popup-fönster>",
+DlgLnkTargetBlank	: "Nytt fönster (_blank)",
+DlgLnkTargetParent	: "Föregående Window (_parent)",
+DlgLnkTargetSelf	: "Detta fönstret (_self)",
+DlgLnkTargetTop		: "Översta fönstret (_top)",
+DlgLnkTargetFrameName	: "Målets ramnamn",
+DlgLnkPopWinName	: "Popup-fönstrets namn",
+DlgLnkPopWinFeat	: "Popup-fönstrets egenskaper",
+DlgLnkPopResize		: "Kan ändra storlek",
+DlgLnkPopLocation	: "Adressfält",
+DlgLnkPopMenu		: "Menyfält",
+DlgLnkPopScroll		: "Scrolllista",
+DlgLnkPopStatus		: "Statusfält",
+DlgLnkPopToolbar	: "Verktygsfält",
+DlgLnkPopFullScrn	: "Helskärm (endast IE)",
+DlgLnkPopDependent	: "Beroende (endest Netscape)",
+DlgLnkPopWidth		: "Bredd",
+DlgLnkPopHeight		: "Höjd",
+DlgLnkPopLeft		: "Position från vänster",
+DlgLnkPopTop		: "Position från sidans topp",
+
+DlnLnkMsgNoUrl		: "Var god ange länkens URL",
+DlnLnkMsgNoEMail	: "Var god ange E-postadress",
+DlnLnkMsgNoAnchor	: "Var god ange ett ankare",
+DlnLnkMsgInvPopName	: "Popup-rutans namn måste börja med en alfabetisk bokstav och får inte innehålla mellanslag",
+
+// Color Dialog
+DlgColorTitle		: "Välj färg",
+DlgColorBtnClear	: "Rensa",
+DlgColorHighlight	: "Markera",
+DlgColorSelected	: "Vald",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Infoga smiley",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Välj utökat tecken",
+
+// Table Dialog
+DlgTableTitle		: "Tabellegenskaper",
+DlgTableRows		: "Rader",
+DlgTableColumns		: "Kolumner",
+DlgTableBorder		: "Kantstorlek",
+DlgTableAlign		: "Justering",
+DlgTableAlignNotSet	: "<ej angivet>",
+DlgTableAlignLeft	: "Vänster",
+DlgTableAlignCenter	: "Centrerad",
+DlgTableAlignRight	: "Höger",
+DlgTableWidth		: "Bredd",
+DlgTableWidthPx		: "pixlar",
+DlgTableWidthPc		: "procent",
+DlgTableHeight		: "Höjd",
+DlgTableCellSpace	: "Cellavstånd",
+DlgTableCellPad		: "Cellutfyllnad",
+DlgTableCaption		: "Rubrik",
+DlgTableSummary		: "Sammanfattning",
+
+// Table Cell Dialog
+DlgCellTitle		: "Cellegenskaper",
+DlgCellWidth		: "Bredd",
+DlgCellWidthPx		: "pixlar",
+DlgCellWidthPc		: "procent",
+DlgCellHeight		: "Höjd",
+DlgCellWordWrap		: "Automatisk radbrytning",
+DlgCellWordWrapNotSet	: "<Ej angivet>",
+DlgCellWordWrapYes	: "Ja",
+DlgCellWordWrapNo	: "Nej",
+DlgCellHorAlign		: "Horisontal justering",
+DlgCellHorAlignNotSet	: "<Ej angivet>",
+DlgCellHorAlignLeft	: "Vänster",
+DlgCellHorAlignCenter	: "Centrerad",
+DlgCellHorAlignRight: "Höger",
+DlgCellVerAlign		: "Vertikal justering",
+DlgCellVerAlignNotSet	: "<Ej angivet>",
+DlgCellVerAlignTop	: "Topp",
+DlgCellVerAlignMiddle	: "Mitten",
+DlgCellVerAlignBottom	: "Nederkant",
+DlgCellVerAlignBaseline	: "Underst",
+DlgCellRowSpan		: "Radomfång",
+DlgCellCollSpan		: "Kolumnomfång",
+DlgCellBackColor	: "Bakgrundsfärg",
+DlgCellBorderColor	: "Kantfärg",
+DlgCellBtnSelect	: "Välj...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Find and Replace",	//MISSING
+
+// Find Dialog
+DlgFindTitle		: "Sök",
+DlgFindFindBtn		: "Sök",
+DlgFindNotFoundMsg	: "Angiven text kunde ej hittas.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Ersätt",
+DlgReplaceFindLbl		: "Sök efter:",
+DlgReplaceReplaceLbl	: "Ersätt med:",
+DlgReplaceCaseChk		: "Skiftläge",
+DlgReplaceReplaceBtn	: "Ersätt",
+DlgReplaceReplAllBtn	: "Ersätt alla",
+DlgReplaceWordChk		: "Inkludera hela ord",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "Säkerhetsinställningar i Er webläsare tillåter inte åtgården Klipp ut. Använd (Ctrl+X) istället.",
+PasteErrorCopy	: "Säkerhetsinställningar i Er webläsare tillåter inte åtgården Kopiera. Använd (Ctrl+C) istället",
+
+PasteAsText		: "Klistra in som vanlig text",
+PasteFromWord	: "Klistra in från Word",
+
+DlgPasteMsg2	: "Var god och klistra in Er text i rutan nedan genom att använda (<STRONG>Ctrl+V</STRONG>) klicka sen på <STRONG>OK</STRONG>.",
+DlgPasteSec		: "På grund av din webläsares säkerhetsinställningar kan verktyget inte få åtkomst till urklippsdatan. Var god och använd detta fönster istället.",
+DlgPasteIgnoreFont		: "Ignorera typsnittsdefinitioner",
+DlgPasteRemoveStyles	: "Radera Stildefinitioner",
+DlgPasteCleanBox		: "Töm rutans innehåll",
+
+// Color Picker
+ColorAutomatic	: "Automatisk",
+ColorMoreColors	: "Fler färger...",
+
+// Document Properties
+DocProps		: "Dokumentegenskaper",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Ankaregenskaper",
+DlgAnchorName		: "Ankarnamn",
+DlgAnchorErrorName	: "Var god ange ett ankarnamn",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Saknas i ordlistan",
+DlgSpellChangeTo		: "Ändra till",
+DlgSpellBtnIgnore		: "Ignorera",
+DlgSpellBtnIgnoreAll	: "Ignorera alla",
+DlgSpellBtnReplace		: "Ersätt",
+DlgSpellBtnReplaceAll	: "Ersätt alla",
+DlgSpellBtnUndo			: "Ångra",
+DlgSpellNoSuggestions	: "- Förslag saknas -",
+DlgSpellProgress		: "Stavningskontroll pågår...",
+DlgSpellNoMispell		: "Stavningskontroll slutförd: Inga stavfel påträffades.",
+DlgSpellNoChanges		: "Stavningskontroll slutförd: Inga ord rättades.",
+DlgSpellOneChange		: "Stavningskontroll slutförd: Ett ord rättades.",
+DlgSpellManyChanges		: "Stavningskontroll slutförd: %1 ord rättades.",
+
+IeSpellDownload			: "Stavningskontrollen är ej installerad. Vill du göra det nu?",
+
+// Button Dialog
+DlgButtonText		: "Text (Värde)",
+DlgButtonType		: "Typ",
+DlgButtonTypeBtn	: "Knapp",
+DlgButtonTypeSbm	: "Skicka",
+DlgButtonTypeRst	: "Återställ",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Namn",
+DlgCheckboxValue	: "Värde",
+DlgCheckboxSelected	: "Vald",
+
+// Form Dialog
+DlgFormName		: "Namn",
+DlgFormAction	: "Funktion",
+DlgFormMethod	: "Metod",
+
+// Select Field Dialog
+DlgSelectName		: "Namn",
+DlgSelectValue		: "Värde",
+DlgSelectSize		: "Storlek",
+DlgSelectLines		: "Linjer",
+DlgSelectChkMulti	: "Tillåt flerval",
+DlgSelectOpAvail	: "Befintliga val",
+DlgSelectOpText		: "Text",
+DlgSelectOpValue	: "Värde",
+DlgSelectBtnAdd		: "Lägg till",
+DlgSelectBtnModify	: "Redigera",
+DlgSelectBtnUp		: "Upp",
+DlgSelectBtnDown	: "Ner",
+DlgSelectBtnSetValue : "Markera som valt värde",
+DlgSelectBtnDelete	: "Radera",
+
+// Textarea Dialog
+DlgTextareaName	: "Namn",
+DlgTextareaCols	: "Kolumner",
+DlgTextareaRows	: "Rader",
+
+// Text Field Dialog
+DlgTextName			: "Namn",
+DlgTextValue		: "Värde",
+DlgTextCharWidth	: "Teckenbredd",
+DlgTextMaxChars		: "Max antal tecken",
+DlgTextType			: "Typ",
+DlgTextTypeText		: "Text",
+DlgTextTypePass		: "Lösenord",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Namn",
+DlgHiddenValue	: "Värde",
+
+// Bulleted List Dialog
+BulletedListProp	: "Egenskaper för punktlista",
+NumberedListProp	: "Egenskaper för numrerad lista",
+DlgLstStart			: "Start",	//MISSING
+DlgLstType			: "Typ",
+DlgLstTypeCircle	: "Cirkel",
+DlgLstTypeDisc		: "Punkt",
+DlgLstTypeSquare	: "Ruta",
+DlgLstTypeNumbers	: "Nummer (1, 2, 3)",
+DlgLstTypeLCase		: "Gemener (a, b, c)",
+DlgLstTypeUCase		: "Versaler (A, B, C)",
+DlgLstTypeSRoman	: "Små romerska siffror (i, ii, iii)",
+DlgLstTypeLRoman	: "Stora romerska siffror (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Allmän",
+DlgDocBackTab		: "Bakgrund",
+DlgDocColorsTab		: "Färg och marginal",
+DlgDocMetaTab		: "Metadata",
+
+DlgDocPageTitle		: "Sidtitel",
+DlgDocLangDir		: "Språkriktning",
+DlgDocLangDirLTR	: "Vänster till Höger",
+DlgDocLangDirRTL	: "Höger till Vänster",
+DlgDocLangCode		: "Språkkod",
+DlgDocCharSet		: "Teckenuppsättningar",
+DlgDocCharSetCE		: "Central Europa",
+DlgDocCharSetCT		: "Traditionell Kinesisk (Big5)",
+DlgDocCharSetCR		: "Kyrillisk",
+DlgDocCharSetGR		: "Grekiska",
+DlgDocCharSetJP		: "Japanska",
+DlgDocCharSetKR		: "Koreanska",
+DlgDocCharSetTR		: "Turkiska",
+DlgDocCharSetUN		: "Unicode (UTF-8)",
+DlgDocCharSetWE		: "Väst Europa",
+DlgDocCharSetOther	: "Övriga teckenuppsättningar",
+
+DlgDocDocType		: "Sidhuvud",
+DlgDocDocTypeOther	: "Övriga sidhuvuden",
+DlgDocIncXHTML		: "Inkludera XHTML deklaration",
+DlgDocBgColor		: "Bakgrundsfärg",
+DlgDocBgImage		: "Bakgrundsbildens URL",
+DlgDocBgNoScroll	: "Fast bakgrund",
+DlgDocCText			: "Text",
+DlgDocCLink			: "Länk",
+DlgDocCVisited		: "Besökt länk",
+DlgDocCActive		: "Aktiv länk",
+DlgDocMargins		: "Sidmarginal",
+DlgDocMaTop			: "Topp",
+DlgDocMaLeft		: "Vänster",
+DlgDocMaRight		: "Höger",
+DlgDocMaBottom		: "Botten",
+DlgDocMeIndex		: "Sidans nyckelord",
+DlgDocMeDescr		: "Sidans beskrivning",
+DlgDocMeAuthor		: "Författare",
+DlgDocMeCopy		: "Upphovsrätt",
+DlgDocPreview		: "Förhandsgranska",
+
+// Templates Dialog
+Templates			: "Sidmallar",
+DlgTemplatesTitle	: "Sidmallar",
+DlgTemplatesSelMsg	: "Var god välj en mall att använda med editorn<br>(allt nuvarande innehåll raderas):",
+DlgTemplatesLoading	: "Laddar mallar. Var god vänta...",
+DlgTemplatesNoTpl	: "(Ingen mall är vald)",
+DlgTemplatesReplace	: "Ersätt aktuellt innehåll",
+
+// About Dialog
+DlgAboutAboutTab	: "Om",
+DlgAboutBrowserInfoTab	: "Webläsare",
+DlgAboutLicenseTab	: "Licens",
+DlgAboutVersion		: "version",
+DlgAboutInfo		: "För mer information se"
+};
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/th.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/th.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/th.js	(revision 1280)
@@ -0,0 +1,516 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Thai language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "ซ่อนแถบเครื่องมือ",
+ToolbarExpand		: "แสดงแถบเครื่องมือ",
+
+// Toolbar Items and Context Menu
+Save				: "บันทึก",
+NewPage				: "สร้างหน้าเอกสารใหม่",
+Preview				: "ดูหน้าเอกสารตัวอย่าง",
+Cut					: "ตัด",
+Copy				: "สำเนา",
+Paste				: "วาง",
+PasteText			: "วางสำเนาจากตัวอักษรธรรมดา",
+PasteWord			: "วางสำเนาจากตัวอักษรเวิร์ด",
+Print				: "สั่งพิมพ์",
+SelectAll			: "เลือกทั้งหมด",
+RemoveFormat		: "ล้างรูปแบบ",
+InsertLinkLbl		: "ลิงค์เชื่อมโยงเว็บ อีเมล์ รูปภาพ หรือไฟล์อื่นๆ",
+InsertLink			: "แทรก/แก้ไข ลิงค์",
+RemoveLink			: "ลบ ลิงค์",
+Anchor				: "แทรก/แก้ไข Anchor",
+AnchorDelete		: "Remove Anchor",	//MISSING
+InsertImageLbl		: "รูปภาพ",
+InsertImage			: "แทรก/แก้ไข รูปภาพ",
+InsertFlashLbl		: "ไฟล์ Flash",
+InsertFlash			: "แทรก/แก้ไข ไฟล์ Flash",
+InsertTableLbl		: "ตาราง",
+InsertTable			: "แทรก/แก้ไข ตาราง",
+InsertLineLbl		: "เส้นคั่นบรรทัด",
+InsertLine			: "แทรกเส้นคั่นบรรทัด",
+InsertSpecialCharLbl: "ตัวอักษรพิเศษ",
+InsertSpecialChar	: "แทรกตัวอักษรพิเศษ",
+InsertSmileyLbl		: "รูปสื่ออารมณ์",
+InsertSmiley		: "แทรกรูปสื่ออารมณ์",
+About				: "เกี่ยวกับโปรแกรม FCKeditor",
+Bold				: "ตัวหนา",
+Italic				: "ตัวเอียง",
+Underline			: "ตัวขีดเส้นใต้",
+StrikeThrough		: "ตัวขีดเส้นทับ",
+Subscript			: "ตัวห้อย",
+Superscript			: "ตัวยก",
+LeftJustify			: "จัดชิดซ้าย",
+CenterJustify		: "จัดกึ่งกลาง",
+RightJustify		: "จัดชิดขวา",
+BlockJustify		: "จัดพอดีหน้ากระดาษ",
+DecreaseIndent		: "ลดระยะย่อหน้า",
+IncreaseIndent		: "เพิ่มระยะย่อหน้า",
+Blockquote			: "Blockquote",	//MISSING
+Undo				: "ยกเลิกคำสั่ง",
+Redo				: "ทำซ้ำคำสั่ง",
+NumberedListLbl		: "ลำดับรายการแบบตัวเลข",
+NumberedList		: "แทรก/แก้ไข ลำดับรายการแบบตัวเลข",
+BulletedListLbl		: "ลำดับรายการแบบสัญลักษณ์",
+BulletedList		: "แทรก/แก้ไข ลำดับรายการแบบสัญลักษณ์",
+ShowTableBorders	: "แสดงขอบของตาราง",
+ShowDetails			: "แสดงรายละเอียด",
+Style				: "ลักษณะ",
+FontFormat			: "รูปแบบ",
+Font				: "แบบอักษร",
+FontSize			: "ขนาด",
+TextColor			: "สีตัวอักษร",
+BGColor				: "สีพื้นหลัง",
+Source				: "ดูรหัส HTML",
+Find				: "ค้นหา",
+Replace				: "ค้นหาและแทนที่",
+SpellCheck			: "ตรวจการสะกดคำ",
+UniversalKeyboard	: "คีย์บอร์ดหลากภาษา",
+PageBreakLbl		: "ใส่ตัวแบ่งหน้า Page Break",
+PageBreak			: "แทรกตัวแบ่งหน้า Page Break",
+
+Form			: "แบบฟอร์ม",
+Checkbox		: "เช็คบ๊อก",
+RadioButton		: "เรดิโอบัตตอน",
+TextField		: "เท็กซ์ฟิลด์",
+Textarea		: "เท็กซ์แอเรีย",
+HiddenField		: "ฮิดเดนฟิลด์",
+Button			: "ปุ่ม",
+SelectionField	: "แถบตัวเลือก",
+ImageButton		: "ปุ่มแบบรูปภาพ",
+
+FitWindow		: "ขยายขนาดตัวอีดิตเตอร์",
+ShowBlocks		: "Show Blocks",	//MISSING
+
+// Context Menu
+EditLink			: "แก้ไข ลิงค์",
+CellCM				: "ช่องตาราง",
+RowCM				: "แถว",
+ColumnCM			: "คอลัมน์",
+InsertRowAfter		: "Insert Row After",	//MISSING
+InsertRowBefore		: "Insert Row Before",	//MISSING
+DeleteRows			: "ลบแถว",
+InsertColumnAfter	: "Insert Column After",	//MISSING
+InsertColumnBefore	: "Insert Column Before",	//MISSING
+DeleteColumns		: "ลบสดมน์",
+InsertCellAfter		: "Insert Cell After",	//MISSING
+InsertCellBefore	: "Insert Cell Before",	//MISSING
+DeleteCells			: "ลบช่อง",
+MergeCells			: "ผสานช่อง",
+MergeRight			: "Merge Right",	//MISSING
+MergeDown			: "Merge Down",	//MISSING
+HorizontalSplitCell	: "Split Cell Horizontally",	//MISSING
+VerticalSplitCell	: "Split Cell Vertically",	//MISSING
+TableDelete			: "ลบตาราง",
+CellProperties		: "คุณสมบัติของช่อง",
+TableProperties		: "คุณสมบัติของตาราง",
+ImageProperties		: "คุณสมบัติของรูปภาพ",
+FlashProperties		: "คุณสมบัติของไฟล์ Flash",
+
+AnchorProp			: "รายละเอียด Anchor",
+ButtonProp			: "รายละเอียดของ ปุ่ม",
+CheckboxProp		: "คุณสมบัติของ เช็คบ๊อก",
+HiddenFieldProp		: "คุณสมบัติของ ฮิดเดนฟิลด์",
+RadioButtonProp		: "คุณสมบัติของ เรดิโอบัตตอน",
+ImageButtonProp		: "คุณสมบัติของ ปุ่มแบบรูปภาพ",
+TextFieldProp		: "คุณสมบัติของ เท็กซ์ฟิลด์",
+SelectionFieldProp	: "คุณสมบัติของ แถบตัวเลือก",
+TextareaProp		: "คุณสมบัติของ เท็กแอเรีย",
+FormProp			: "คุณสมบัติของ แบบฟอร์ม",
+
+FontFormats			: "Normal;Formatted;Address;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6;Paragraph (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "โปรแกรมกำลังทำงานด้วยเทคโนโลยี XHTML กรุณารอสักครู่...",
+Done				: "โปรแกรมทำงานเสร็จสมบูรณ์",
+PasteWordConfirm	: "ข้อมูลที่ท่านต้องการวางลงในแผ่นงาน ถูกจัดรูปแบบจากโปรแกรมเวิร์ด. ท่านต้องการล้างรูปแบบที่มาจากโปรแกรมเวิร์ดหรือไม่?",
+NotCompatiblePaste	: "คำสั่งนี้ทำงานในโปรแกรมท่องเว็บ Internet Explorer version รุ่น 5.5 หรือใหม่กว่าเท่านั้น. ท่านต้องการวางตัวอักษรโดยไม่ล้างรูปแบบที่มาจากโปรแกรมเวิร์ดหรือไม่?",
+UnknownToolbarItem	: "ไม่สามารถระบุปุ่มเครื่องมือได้ \"%1\"",
+UnknownCommand		: "ไม่สามารถระบุชื่อคำสั่งได้ \"%1\"",
+NotImplemented		: "ไม่สามารถใช้งานคำสั่งได้",
+UnknownToolbarSet	: "ไม่มีการติดตั้งชุดคำสั่งในแถบเครื่องมือ \"%1\" กรุณาติดต่อผู้ดูแลระบบ",
+NoActiveX			: "โปรแกรมท่องอินเตอร์เน็ตของท่านไม่อนุญาติให้อีดิตเตอร์ทำงาน \"Run ActiveX controls and plug-ins\". หากไม่อนุญาติให้ใช้งาน ActiveX controls ท่านจะไม่สามารถใช้งานได้อย่างเต็มประสิทธิภาพ.",
+BrowseServerBlocked : "เปิดหน้าต่างป๊อบอัพเพื่อทำงานต่อไม่ได้ กรุณาปิดเครื่องมือป้องกันป๊อบอัพในโปรแกรมท่องอินเตอร์เน็ตของท่านด้วย",
+DialogBlocked		: "เปิดหน้าต่างป๊อบอัพเพื่อทำงานต่อไม่ได้ กรุณาปิดเครื่องมือป้องกันป๊อบอัพในโปรแกรมท่องอินเตอร์เน็ตของท่านด้วย",
+
+// Dialogs
+DlgBtnOK			: "ตกลง",
+DlgBtnCancel		: "ยกเลิก",
+DlgBtnClose			: "ปิด",
+DlgBtnBrowseServer	: "เปิดหน้าต่างจัดการไฟล์อัพโหลด",
+DlgAdvancedTag		: "ขั้นสูง",
+DlgOpOther			: "<อื่นๆ>",
+DlgInfoTab			: "อินโฟ",
+DlgAlertUrl			: "กรุณาระบุ URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<ไม่ระบุ>",
+DlgGenId			: "ไอดี",
+DlgGenLangDir		: "การเขียน-อ่านภาษา",
+DlgGenLangDirLtr	: "จากซ้ายไปขวา (LTR)",
+DlgGenLangDirRtl	: "จากขวามาซ้าย (RTL)",
+DlgGenLangCode		: "รหัสภาษา",
+DlgGenAccessKey		: "แอคเซส คีย์",
+DlgGenName			: "ชื่อ",
+DlgGenTabIndex		: "ลำดับของ แท็บ",
+DlgGenLongDescr		: "คำอธิบายประกอบ URL",
+DlgGenClass			: "คลาสของไฟล์กำหนดลักษณะการแสดงผล",
+DlgGenTitle			: "คำเกริ่นนำ",
+DlgGenContType		: "ชนิดของคำเกริ่นนำ",
+DlgGenLinkCharset	: "ลิงค์เชื่อมโยงไปยังชุดตัวอักษร",
+DlgGenStyle			: "ลักษณะการแสดงผล",
+
+// Image Dialog
+DlgImgTitle			: "คุณสมบัติของ รูปภาพ",
+DlgImgInfoTab		: "ข้อมูลของรูปภาพ",
+DlgImgBtnUpload		: "อัพโหลดไฟล์ไปเก็บไว้ที่เครื่องแม่ข่าย (เซิร์ฟเวอร์)",
+DlgImgURL			: "ที่อยู่อ้างอิง URL",
+DlgImgUpload		: "อัพโหลดไฟล์",
+DlgImgAlt			: "คำประกอบรูปภาพ",
+DlgImgWidth			: "ความกว้าง",
+DlgImgHeight		: "ความสูง",
+DlgImgLockRatio		: "กำหนดอัตราส่วน กว้าง-สูง แบบคงที่",
+DlgBtnResetSize		: "กำหนดรูปเท่าขนาดจริง",
+DlgImgBorder		: "ขนาดขอบรูป",
+DlgImgHSpace		: "ระยะแนวนอน",
+DlgImgVSpace		: "ระยะแนวตั้ง",
+DlgImgAlign			: "การจัดวาง",
+DlgImgAlignLeft		: "ชิดซ้าย",
+DlgImgAlignAbsBottom: "ชิดด้านล่างสุด",
+DlgImgAlignAbsMiddle: "กึ่งกลาง",
+DlgImgAlignBaseline	: "ชิดบรรทัด",
+DlgImgAlignBottom	: "ชิดด้านล่าง",
+DlgImgAlignMiddle	: "กึ่งกลางแนวตั้ง",
+DlgImgAlignRight	: "ชิดขวา",
+DlgImgAlignTextTop	: "ใต้ตัวอักษร",
+DlgImgAlignTop		: "บนสุด",
+DlgImgPreview		: "หน้าเอกสารตัวอย่าง",
+DlgImgAlertUrl		: "กรุณาระบุที่อยู่อ้างอิงออนไลน์ของไฟล์รูปภาพ (URL)",
+DlgImgLinkTab		: "ลิ้งค์",
+
+// Flash Dialog
+DlgFlashTitle		: "คุณสมบัติของไฟล์ Flash",
+DlgFlashChkPlay		: "เล่นอัตโนมัติ Auto Play",
+DlgFlashChkLoop		: "เล่นวนรอบ Loop",
+DlgFlashChkMenu		: "ให้ใช้งานเมนูของ Flash",
+DlgFlashScale		: "อัตราส่วน Scale",
+DlgFlashScaleAll	: "แสดงให้เห็นทั้งหมด Show all",
+DlgFlashScaleNoBorder	: "ไม่แสดงเส้นขอบ No Border",
+DlgFlashScaleFit	: "แสดงให้พอดีกับพื้นที่ Exact Fit",
+
+// Link Dialog
+DlgLnkWindowTitle	: "ลิงค์เชื่อมโยงเว็บ อีเมล์ รูปภาพ หรือไฟล์อื่นๆ",
+DlgLnkInfoTab		: "รายละเอียด",
+DlgLnkTargetTab		: "การเปิดหน้าจอ",
+
+DlgLnkType			: "ประเภทของลิงค์",
+DlgLnkTypeURL		: "ที่อยู่อ้างอิงออนไลน์ (URL)",
+DlgLnkTypeAnchor	: "จุดเชื่อมโยง (Anchor)",
+DlgLnkTypeEMail		: "ส่งอีเมล์ (E-Mail)",
+DlgLnkProto			: "โปรโตคอล",
+DlgLnkProtoOther	: "<อื่นๆ>",
+DlgLnkURL			: "ที่อยู่อ้างอิงออนไลน์ (URL)",
+DlgLnkAnchorSel		: "ระบุข้อมูลของจุดเชื่อมโยง (Anchor)",
+DlgLnkAnchorByName	: "ชื่อ",
+DlgLnkAnchorById	: "ไอดี",
+DlgLnkNoAnchors		: "(ยังไม่มีจุดเชื่อมโยงภายในหน้าเอกสารนี้)",
+DlgLnkEMail			: "อีเมล์ (E-Mail)",
+DlgLnkEMailSubject	: "หัวเรื่อง",
+DlgLnkEMailBody		: "ข้อความ",
+DlgLnkUpload		: "อัพโหลดไฟล์",
+DlgLnkBtnUpload		: "บันทึกไฟล์ไว้บนเซิร์ฟเวอร์",
+
+DlgLnkTarget		: "การเปิดหน้าลิงค์",
+DlgLnkTargetFrame	: "<เปิดในเฟรม>",
+DlgLnkTargetPopup	: "<เปิดหน้าจอเล็ก (Pop-up)>",
+DlgLnkTargetBlank	: "เปิดหน้าจอใหม่ (_blank)",
+DlgLnkTargetParent	: "เปิดในหน้าหลัก (_parent)",
+DlgLnkTargetSelf	: "เปิดในหน้าปัจจุบัน (_self)",
+DlgLnkTargetTop		: "เปิดในหน้าบนสุด (_top)",
+DlgLnkTargetFrameName	: "ชื่อทาร์เก็ตเฟรม",
+DlgLnkPopWinName	: "ระบุชื่อหน้าจอเล็ก (Pop-up)",
+DlgLnkPopWinFeat	: "คุณสมบัติของหน้าจอเล็ก (Pop-up)",
+DlgLnkPopResize		: "ปรับขนาดหน้าจอ",
+DlgLnkPopLocation	: "แสดงที่อยู่ของไฟล์",
+DlgLnkPopMenu		: "แสดงแถบเมนู",
+DlgLnkPopScroll		: "แสดงแถบเลื่อน",
+DlgLnkPopStatus		: "แสดงแถบสถานะ",
+DlgLnkPopToolbar	: "แสดงแถบเครื่องมือ",
+DlgLnkPopFullScrn	: "แสดงเต็มหน้าจอ (IE5.5++ เท่านั้น)",
+DlgLnkPopDependent	: "แสดงเต็มหน้าจอ (Netscape)",
+DlgLnkPopWidth		: "กว้าง",
+DlgLnkPopHeight		: "สูง",
+DlgLnkPopLeft		: "พิกัดซ้าย (Left Position)",
+DlgLnkPopTop		: "พิกัดบน (Top Position)",
+
+DlnLnkMsgNoUrl		: "กรุณาระบุที่อยู่อ้างอิงออนไลน์ (URL)",
+DlnLnkMsgNoEMail	: "กรุณาระบุอีเมล์ (E-mail)",
+DlnLnkMsgNoAnchor	: "กรุณาระบุจุดเชื่อมโยง (Anchor)",
+DlnLnkMsgInvPopName	: "ชื่อของหน้าต่างป๊อบอัพ จะต้องขึ้นต้นด้วยตัวอักษรเท่านั้น และต้องไม่มีช่องว่างในชื่อ",
+
+// Color Dialog
+DlgColorTitle		: "เลือกสี",
+DlgColorBtnClear	: "ล้างค่ารหัสสี",
+DlgColorHighlight	: "ตัวอย่างสี",
+DlgColorSelected	: "สีที่เลือก",
+
+// Smiley Dialog
+DlgSmileyTitle		: "แทรกสัญลักษณ์สื่ออารมณ์",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "แทรกตัวอักษรพิเศษ",
+
+// Table Dialog
+DlgTableTitle		: "คุณสมบัติของ ตาราง",
+DlgTableRows		: "แถว",
+DlgTableColumns		: "สดมน์",
+DlgTableBorder		: "ขนาดเส้นขอบ",
+DlgTableAlign		: "การจัดตำแหน่ง",
+DlgTableAlignNotSet	: "<ไม่ระบุ>",
+DlgTableAlignLeft	: "ชิดซ้าย",
+DlgTableAlignCenter	: "กึ่งกลาง",
+DlgTableAlignRight	: "ชิดขวา",
+DlgTableWidth		: "กว้าง",
+DlgTableWidthPx		: "จุดสี",
+DlgTableWidthPc		: "เปอร์เซ็น",
+DlgTableHeight		: "สูง",
+DlgTableCellSpace	: "ระยะแนวนอนน",
+DlgTableCellPad		: "ระยะแนวตั้ง",
+DlgTableCaption		: "หัวเรื่องของตาราง",
+DlgTableSummary		: "สรุปความ",
+
+// Table Cell Dialog
+DlgCellTitle		: "คุณสมบัติของ ช่อง",
+DlgCellWidth		: "กว้าง",
+DlgCellWidthPx		: "จุดสี",
+DlgCellWidthPc		: "เปอร์เซ็น",
+DlgCellHeight		: "สูง",
+DlgCellWordWrap		: "ตัดบรรทัดอัตโนมัติ",
+DlgCellWordWrapNotSet	: "<ไม่ระบุ>",
+DlgCellWordWrapYes	: "ใ่ช่",
+DlgCellWordWrapNo	: "ไม่",
+DlgCellHorAlign		: "การจัดวางแนวนอน",
+DlgCellHorAlignNotSet	: "<ไม่ระบุ>",
+DlgCellHorAlignLeft	: "ชิดซ้าย",
+DlgCellHorAlignCenter	: "กึ่งกลาง",
+DlgCellHorAlignRight: "ชิดขวา",
+DlgCellVerAlign		: "การจัดวางแนวตั้ง",
+DlgCellVerAlignNotSet	: "<ไม่ระบุ>",
+DlgCellVerAlignTop	: "บนสุด",
+DlgCellVerAlignMiddle	: "กึ่งกลาง",
+DlgCellVerAlignBottom	: "ล่างสุด",
+DlgCellVerAlignBaseline	: "อิงบรรทัด",
+DlgCellRowSpan		: "จำนวนแถวที่คร่อมกัน",
+DlgCellCollSpan		: "จำนวนสดมน์ที่คร่อมกัน",
+DlgCellBackColor	: "สีพื้นหลัง",
+DlgCellBorderColor	: "สีเส้นขอบ",
+DlgCellBtnSelect	: "เลือก..",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Find and Replace",	//MISSING
+
+// Find Dialog
+DlgFindTitle		: "ค้นหา",
+DlgFindFindBtn		: "ค้นหา",
+DlgFindNotFoundMsg	: "ไม่พบคำที่ค้นหา.",
+
+// Replace Dialog
+DlgReplaceTitle			: "ค้นหาและแทนที่",
+DlgReplaceFindLbl		: "ค้นหาคำว่า:",
+DlgReplaceReplaceLbl	: "แทนที่ด้วย:",
+DlgReplaceCaseChk		: "ตัวโหญ่-เล็ก ต้องตรงกัน",
+DlgReplaceReplaceBtn	: "แทนที่",
+DlgReplaceReplAllBtn	: "แทนที่ทั้งหมดที่พบ",
+DlgReplaceWordChk		: "ต้องตรงกันทุกคำ",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "ไม่สามารถตัดข้อความที่เลือกไว้ได้เนื่องจากการกำหนดค่าระดับความปลอดภัย. กรุณาใช้ปุ่มลัดเพื่อวางข้อความแทน (กดปุ่ม Ctrl และตัว X พร้อมกัน).",
+PasteErrorCopy	: "ไม่สามารถสำเนาข้อความที่เลือกไว้ได้เนื่องจากการกำหนดค่าระดับความปลอดภัย. กรุณาใช้ปุ่มลัดเพื่อวางข้อความแทน (กดปุ่ม Ctrl และตัว C พร้อมกัน).",
+
+PasteAsText		: "วางแบบตัวอักษรธรรมดา",
+PasteFromWord	: "วางแบบตัวอักษรจากโปรแกรมเวิร์ด",
+
+DlgPasteMsg2	: "กรุณาใช้คีย์บอร์ดเท่านั้น โดยกดปุ๋ม (<strong>Ctrl และ V</strong>)พร้อมๆกัน และกด <strong>OK</strong>.",
+DlgPasteSec		: "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.",	//MISSING
+DlgPasteIgnoreFont		: "ไม่สนใจ Font Face definitions",
+DlgPasteRemoveStyles	: "ลบ Styles definitions",
+DlgPasteCleanBox		: "ล้างข้อมูลใน Box",
+
+// Color Picker
+ColorAutomatic	: "สีอัตโนมัติ",
+ColorMoreColors	: "เลือกสีอื่นๆ...",
+
+// Document Properties
+DocProps		: "คุณสมบัติของเอกสาร",
+
+// Anchor Dialog
+DlgAnchorTitle		: "คุณสมบัติของ Anchor",
+DlgAnchorName		: "ชื่อ Anchor",
+DlgAnchorErrorName	: "กรุณาระบุชื่อของ Anchor",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "ไม่พบในดิกชันนารี",
+DlgSpellChangeTo		: "แก้ไขเป็น",
+DlgSpellBtnIgnore		: "ยกเว้น",
+DlgSpellBtnIgnoreAll	: "ยกเว้นทั้งหมด",
+DlgSpellBtnReplace		: "แทนที่",
+DlgSpellBtnReplaceAll	: "แทนที่ทั้งหมด",
+DlgSpellBtnUndo			: "ยกเลิก",
+DlgSpellNoSuggestions	: "- ไม่มีคำแนะนำใดๆ -",
+DlgSpellProgress		: "กำลังตรวจสอบคำสะกด...",
+DlgSpellNoMispell		: "ตรวจสอบคำสะกดเสร็จสิ้น: ไม่พบคำสะกดผิด",
+DlgSpellNoChanges		: "ตรวจสอบคำสะกดเสร็จสิ้น: ไม่มีการแก้คำใดๆ",
+DlgSpellOneChange		: "ตรวจสอบคำสะกดเสร็จสิ้น: แก้ไข1คำ",
+DlgSpellManyChanges		: "ตรวจสอบคำสะกดเสร็จสิ้น:: แก้ไข %1 คำ",
+
+IeSpellDownload			: "ไม่ได้ติดตั้งระบบตรวจสอบคำสะกด. ต้องการติดตั้งไหมครับ?",
+
+// Button Dialog
+DlgButtonText		: "ข้อความ (ค่าตัวแปร)",
+DlgButtonType		: "ข้อความ",
+DlgButtonTypeBtn	: "Button",
+DlgButtonTypeSbm	: "Submit",
+DlgButtonTypeRst	: "Reset",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "ชื่อ",
+DlgCheckboxValue	: "ค่าตัวแปร",
+DlgCheckboxSelected	: "เลือกเป็นค่าเริ่มต้น",
+
+// Form Dialog
+DlgFormName		: "ชื่อ",
+DlgFormAction	: "แอคชั่น",
+DlgFormMethod	: "เมธอด",
+
+// Select Field Dialog
+DlgSelectName		: "ชื่อ",
+DlgSelectValue		: "ค่าตัวแปร",
+DlgSelectSize		: "ขนาด",
+DlgSelectLines		: "บรรทัด",
+DlgSelectChkMulti	: "เลือกหลายค่าได้",
+DlgSelectOpAvail	: "รายการตัวเลือก",
+DlgSelectOpText		: "ข้อความ",
+DlgSelectOpValue	: "ค่าตัวแปร",
+DlgSelectBtnAdd		: "เพิ่ม",
+DlgSelectBtnModify	: "แก้ไข",
+DlgSelectBtnUp		: "บน",
+DlgSelectBtnDown	: "ล่าง",
+DlgSelectBtnSetValue : "เลือกเป็นค่าเริ่มต้น",
+DlgSelectBtnDelete	: "ลบ",
+
+// Textarea Dialog
+DlgTextareaName	: "ชื่อ",
+DlgTextareaCols	: "สดมภ์",
+DlgTextareaRows	: "แถว",
+
+// Text Field Dialog
+DlgTextName			: "ชื่อ",
+DlgTextValue		: "ค่าตัวแปร",
+DlgTextCharWidth	: "ความกว้าง",
+DlgTextMaxChars		: "จำนวนตัวอักษรสูงสุด",
+DlgTextType			: "ชนิด",
+DlgTextTypeText		: "ข้อความ",
+DlgTextTypePass		: "รหัสผ่าน",
+
+// Hidden Field Dialog
+DlgHiddenName	: "ชื่อ",
+DlgHiddenValue	: "ค่าตัวแปร",
+
+// Bulleted List Dialog
+BulletedListProp	: "คุณสมบัติของ บูลเล็ตลิสต์",
+NumberedListProp	: "คุณสมบัติของ นัมเบอร์ลิสต์",
+DlgLstStart			: "Start",	//MISSING
+DlgLstType			: "ชนิด",
+DlgLstTypeCircle	: "รูปวงกลม",
+DlgLstTypeDisc		: "Disc",	//MISSING
+DlgLstTypeSquare	: "รูปสี่เหลี่ยม",
+DlgLstTypeNumbers	: "หมายเลข (1, 2, 3)",
+DlgLstTypeLCase		: "ตัวพิมพ์เล็ก (a, b, c)",
+DlgLstTypeUCase		: "ตัวพิมพ์ใหญ่ (A, B, C)",
+DlgLstTypeSRoman	: "เลขโรมันพิมพ์เล็ก (i, ii, iii)",
+DlgLstTypeLRoman	: "เลขโรมันพิมพ์ใหญ่ (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "ลักษณะทั่วไปของเอกสาร",
+DlgDocBackTab		: "พื้นหลัง",
+DlgDocColorsTab		: "สีและระยะขอบ",
+DlgDocMetaTab		: "ข้อมูลสำหรับเสิร์ชเอนจิ้น",
+
+DlgDocPageTitle		: "ชื่อไตเติ้ล",
+DlgDocLangDir		: "การอ่านภาษา",
+DlgDocLangDirLTR	: "จากซ้ายไปขวา (LTR)",
+DlgDocLangDirRTL	: "จากขวาไปซ้าย (RTL)",
+DlgDocLangCode		: "รหัสภาษา",
+DlgDocCharSet		: "ชุดตัวอักษร",
+DlgDocCharSetCE		: "Central European",
+DlgDocCharSetCT		: "Chinese Traditional (Big5)",
+DlgDocCharSetCR		: "Cyrillic",
+DlgDocCharSetGR		: "Greek",
+DlgDocCharSetJP		: "Japanese",
+DlgDocCharSetKR		: "Korean",
+DlgDocCharSetTR		: "Turkish",
+DlgDocCharSetUN		: "Unicode (UTF-8)",
+DlgDocCharSetWE		: "Western European",
+DlgDocCharSetOther	: "ชุดตัวอักษรอื่นๆ",
+
+DlgDocDocType		: "ประเภทของเอกสาร",
+DlgDocDocTypeOther	: "ประเภทเอกสารอื่นๆ",
+DlgDocIncXHTML		: "รวมเอา  XHTML Declarations ไว้ด้วย",
+DlgDocBgColor		: "สีพื้นหลัง",
+DlgDocBgImage		: "ที่อยู่อ้างอิงออนไลน์ของรูปพื้นหลัง (Image URL)",
+DlgDocBgNoScroll	: "พื้นหลังแบบไม่มีแถบเลื่อน",
+DlgDocCText			: "ข้อความ",
+DlgDocCLink			: "ลิงค์",
+DlgDocCVisited		: "ลิงค์ที่เคยคลิ้กแล้ว Visited Link",
+DlgDocCActive		: "ลิงค์ที่กำลังคลิ้ก Active Link",
+DlgDocMargins		: "ระยะขอบของหน้าเอกสาร",
+DlgDocMaTop			: "ด้านบน",
+DlgDocMaLeft		: "ด้านซ้าย",
+DlgDocMaRight		: "ด้านขวา",
+DlgDocMaBottom		: "ด้านล่าง",
+DlgDocMeIndex		: "คำสำคัญอธิบายเอกสาร (คั่นคำด้วย คอมม่า)",
+DlgDocMeDescr		: "ประโยคอธิบายเกี่ยวกับเอกสาร",
+DlgDocMeAuthor		: "ผู้สร้างเอกสาร",
+DlgDocMeCopy		: "สงวนลิขสิทธิ์",
+DlgDocPreview		: "ตัวอย่างหน้าเอกสาร",
+
+// Templates Dialog
+Templates			: "เทมเพลต",
+DlgTemplatesTitle	: "เทมเพลตของส่วนเนื้อหาเว็บไซต์",
+DlgTemplatesSelMsg	: "กรุณาเลือก เทมเพลต เพื่อนำไปแก้ไขในอีดิตเตอร์<br />(เนื้อหาส่วนนี้จะหายไป):",
+DlgTemplatesLoading	: "กำลังโหลดรายการเทมเพลตทั้งหมด...",
+DlgTemplatesNoTpl	: "(ยังไม่มีการกำหนดเทมเพลต)",
+DlgTemplatesReplace	: "แทนที่เนื้อหาเว็บไซต์ที่เลือก",
+
+// About Dialog
+DlgAboutAboutTab	: "เกี่ยวกับโปรแกรม",
+DlgAboutBrowserInfoTab	: "โปรแกรมท่องเว็บที่ท่านใช้",
+DlgAboutLicenseTab	: "ลิขสิทธิ์",
+DlgAboutVersion		: "รุ่น",
+DlgAboutInfo		: "For further information go to"	//MISSING
+};
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/tr.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/tr.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/tr.js	(revision 1280)
@@ -0,0 +1,516 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Turkish language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Araç Çubuğunu Kapat",
+ToolbarExpand		: "Araç Çubuğunu Aç",
+
+// Toolbar Items and Context Menu
+Save				: "Kaydet",
+NewPage				: "Yeni Sayfa",
+Preview				: "Ön İzleme",
+Cut					: "Kes",
+Copy				: "Kopyala",
+Paste				: "Yapıştır",
+PasteText			: "Düzyazı Olarak Yapıştır",
+PasteWord			: "Word'den Yapıştır",
+Print				: "Yazdır",
+SelectAll			: "Tümünü Seç",
+RemoveFormat		: "Biçimi Kaldır",
+InsertLinkLbl		: "Köprü",
+InsertLink			: "Köprü Ekle/Düzenle",
+RemoveLink			: "Köprü Kaldır",
+Anchor				: "Çapa Ekle/Düzenle",
+AnchorDelete		: "Remove Anchor",	//MISSING
+InsertImageLbl		: "Resim",
+InsertImage			: "Resim Ekle/Düzenle",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Flash Ekle/Düzenle",
+InsertTableLbl		: "Tablo",
+InsertTable			: "Tablo Ekle/Düzenle",
+InsertLineLbl		: "Satır",
+InsertLine			: "Yatay Satır Ekle",
+InsertSpecialCharLbl: "Özel Karakter",
+InsertSpecialChar	: "Özel Karakter Ekle",
+InsertSmileyLbl		: "İfade",
+InsertSmiley		: "İfade Ekle",
+About				: "FCKeditor Hakkında",
+Bold				: "Kalın",
+Italic				: "İtalik",
+Underline			: "Altı Çizgili",
+StrikeThrough		: "Üstü Çizgili",
+Subscript			: "Alt Simge",
+Superscript			: "Üst Simge",
+LeftJustify			: "Sola Dayalı",
+CenterJustify		: "Ortalanmış",
+RightJustify		: "Sağa Dayalı",
+BlockJustify		: "İki Kenara Yaslanmış",
+DecreaseIndent		: "Sekme Azalt",
+IncreaseIndent		: "Sekme Arttır",
+Blockquote			: "Blockquote",	//MISSING
+Undo				: "Geri Al",
+Redo				: "Tekrarla",
+NumberedListLbl		: "Numaralı Liste",
+NumberedList		: "Numaralı Liste Ekle/Kaldır",
+BulletedListLbl		: "Simgeli Liste",
+BulletedList		: "Simgeli Liste Ekle/Kaldır",
+ShowTableBorders	: "Tablo Kenarlarını Göster",
+ShowDetails			: "Detayları Göster",
+Style				: "Biçem",
+FontFormat			: "Biçim",
+Font				: "Yazı Türü",
+FontSize			: "Boyut",
+TextColor			: "Yazı Rengi",
+BGColor				: "Arka Renk",
+Source				: "Kaynak",
+Find				: "Bul",
+Replace				: "Değiştir",
+SpellCheck			: "Yazım Denetimi",
+UniversalKeyboard	: "Evrensel Klavye",
+PageBreakLbl		: "Sayfa sonu",
+PageBreak			: "Sayfa Sonu Ekle",
+
+Form			: "Form",
+Checkbox		: "Onay Kutusu",
+RadioButton		: "Seçenek Düğmesi",
+TextField		: "Metin Girişi",
+Textarea		: "Çok Satırlı Metin",
+HiddenField		: "Gizli Veri",
+Button			: "Düğme",
+SelectionField	: "Seçim Menüsü",
+ImageButton		: "Resimli Düğme",
+
+FitWindow		: "Düzenleyici boyutunu büyüt",
+ShowBlocks		: "Show Blocks",	//MISSING
+
+// Context Menu
+EditLink			: "Köprü Düzenle",
+CellCM				: "Hücre",
+RowCM				: "Satır",
+ColumnCM			: "Sütun",
+InsertRowAfter		: "Insert Row After",	//MISSING
+InsertRowBefore		: "Insert Row Before",	//MISSING
+DeleteRows			: "Satır Sil",
+InsertColumnAfter	: "Insert Column After",	//MISSING
+InsertColumnBefore	: "Insert Column Before",	//MISSING
+DeleteColumns		: "Sütun Sil",
+InsertCellAfter		: "Insert Cell After",	//MISSING
+InsertCellBefore	: "Insert Cell Before",	//MISSING
+DeleteCells			: "Hücre Sil",
+MergeCells			: "Hücreleri Birleştir",
+MergeRight			: "Merge Right",	//MISSING
+MergeDown			: "Merge Down",	//MISSING
+HorizontalSplitCell	: "Split Cell Horizontally",	//MISSING
+VerticalSplitCell	: "Split Cell Vertically",	//MISSING
+TableDelete			: "Tabloyu Sil",
+CellProperties		: "Hücre Özellikleri",
+TableProperties		: "Tablo Özellikleri",
+ImageProperties		: "Resim Özellikleri",
+FlashProperties		: "Flash Özellikleri",
+
+AnchorProp			: "Çapa Özellikleri",
+ButtonProp			: "Düğme Özellikleri",
+CheckboxProp		: "Onay Kutusu Özellikleri",
+HiddenFieldProp		: "Gizli Veri Özellikleri",
+RadioButtonProp		: "Seçenek Düğmesi Özellikleri",
+ImageButtonProp		: "Resimli Düğme Özellikleri",
+TextFieldProp		: "Metin Girişi Özellikleri",
+SelectionFieldProp	: "Seçim Menüsü Özellikleri",
+TextareaProp		: "Çok Satırlı Metin Özellikleri",
+FormProp			: "Form Özellikleri",
+
+FontFormats			: "Normal;Biçimli;Adres;Başlık 1;Başlık 2;Başlık 3;Başlık 4;Başlık 5;Başlık 6;Paragraf (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "XHTML işleniyor. Lütfen bekleyin...",
+Done				: "Bitti",
+PasteWordConfirm	: "Yapıştırdığınız yazı Word'den gelmişe benziyor. Yapıştırmadan önce gereksiz eklentileri silmek ister misiniz?",
+NotCompatiblePaste	: "Bu komut Internet Explorer 5.5 ve ileriki sürümleri için mevcuttur. Temizlenmeden yapıştırılmasını ister misiniz ?",
+UnknownToolbarItem	: "Bilinmeyen araç çubugu öğesi \"%1\"",
+UnknownCommand		: "Bilinmeyen komut \"%1\"",
+NotImplemented		: "Komut uyarlanamadı",
+UnknownToolbarSet	: "\"%1\" araç çubuğu öğesi mevcut değil",
+NoActiveX			: "Kullandığınız tarayıcının güvenlik ayarları bazı özelliklerin kullanılmasını engelliyor. Bu özelliklerin çalışması için \"Run ActiveX controls and plug-ins (Activex ve eklentileri çalıştır)\" seçeneğinin aktif yapılması gerekiyor. Kullanılamayan eklentiler ve hatalar konusunda daha fazla bilgi sahibi olun.",
+BrowseServerBlocked : "Kaynak tarayıcısı açılamadı. Tüm \"popup blocker\" programlarının devre dışı olduğundan emin olun. (Yahoo toolbar, Msn toolbar, Google toolbar gibi)",
+DialogBlocked		: "Diyalog açmak mümkün olmadı. Tüm \"Popup Blocker\" programlarının devre dışı olduğundan emin olun.",
+
+// Dialogs
+DlgBtnOK			: "Tamam",
+DlgBtnCancel		: "İptal",
+DlgBtnClose			: "Kapat",
+DlgBtnBrowseServer	: "Sunucuyu Gez",
+DlgAdvancedTag		: "Gelişmiş",
+DlgOpOther			: "<Diğer>",
+DlgInfoTab			: "Bilgi",
+DlgAlertUrl			: "Lütfen URL girin",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<tanımlanmamış>",
+DlgGenId			: "Kimlik",
+DlgGenLangDir		: "Dil Yönü",
+DlgGenLangDirLtr	: "Soldan Sağa (LTR)",
+DlgGenLangDirRtl	: "Sağdan Sola (RTL)",
+DlgGenLangCode		: "Dil Kodlaması",
+DlgGenAccessKey		: "Erişim Tuşu",
+DlgGenName			: "Ad",
+DlgGenTabIndex		: "Sekme İndeksi",
+DlgGenLongDescr		: "Uzun Tanımlı URL",
+DlgGenClass			: "Biçem Sayfası Sınıfları",
+DlgGenTitle			: "Danışma Başlığı",
+DlgGenContType		: "Danışma İçerik Türü",
+DlgGenLinkCharset	: "Bağlı Kaynak Karakter Gurubu",
+DlgGenStyle			: "Biçem",
+
+// Image Dialog
+DlgImgTitle			: "Resim Özellikleri",
+DlgImgInfoTab		: "Resim Bilgisi",
+DlgImgBtnUpload		: "Sunucuya Yolla",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Karşıya Yükle",
+DlgImgAlt			: "Alternatif Yazı",
+DlgImgWidth			: "Genişlik",
+DlgImgHeight		: "Yükseklik",
+DlgImgLockRatio		: "Oranı Kilitle",
+DlgBtnResetSize		: "Boyutu Başa Döndür",
+DlgImgBorder		: "Kenar",
+DlgImgHSpace		: "Yatay Boşluk",
+DlgImgVSpace		: "Dikey Boşluk",
+DlgImgAlign			: "Hizalama",
+DlgImgAlignLeft		: "Sol",
+DlgImgAlignAbsBottom: "Tam Altı",
+DlgImgAlignAbsMiddle: "Tam Ortası",
+DlgImgAlignBaseline	: "Taban Çizgisi",
+DlgImgAlignBottom	: "Alt",
+DlgImgAlignMiddle	: "Orta",
+DlgImgAlignRight	: "Sağ",
+DlgImgAlignTextTop	: "Yazı Tepeye",
+DlgImgAlignTop		: "Tepe",
+DlgImgPreview		: "Ön İzleme",
+DlgImgAlertUrl		: "Lütfen resmin URL'sini yazınız",
+DlgImgLinkTab		: "Köprü",
+
+// Flash Dialog
+DlgFlashTitle		: "Flash Özellikleri",
+DlgFlashChkPlay		: "Otomatik Oynat",
+DlgFlashChkLoop		: "Döngü",
+DlgFlashChkMenu		: "Flash Menüsünü Kullan",
+DlgFlashScale		: "Boyutlandır",
+DlgFlashScaleAll	: "Hepsini Göster",
+DlgFlashScaleNoBorder	: "Kenar Yok",
+DlgFlashScaleFit	: "Tam Sığdır",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Köprü",
+DlgLnkInfoTab		: "Köprü Bilgisi",
+DlgLnkTargetTab		: "Hedef",
+
+DlgLnkType			: "Köprü Türü",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Bu sayfada çapa",
+DlgLnkTypeEMail		: "E-Posta",
+DlgLnkProto			: "Protokol",
+DlgLnkProtoOther	: "<diğer>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Çapa Seç",
+DlgLnkAnchorByName	: "Çapa Adı ile",
+DlgLnkAnchorById	: "Eleman Kimlik Numarası ile",
+DlgLnkNoAnchors		: "(Bu belgede hiç çapa yok)",
+DlgLnkEMail			: "E-Posta Adresi",
+DlgLnkEMailSubject	: "İleti Konusu",
+DlgLnkEMailBody		: "İleti Gövdesi",
+DlgLnkUpload		: "Karşıya Yükle",
+DlgLnkBtnUpload		: "Sunucuya Gönder",
+
+DlgLnkTarget		: "Hedef",
+DlgLnkTargetFrame	: "<çerçeve>",
+DlgLnkTargetPopup	: "<yeni açılan pencere>",
+DlgLnkTargetBlank	: "Yeni Pencere(_blank)",
+DlgLnkTargetParent	: "Anne Pencere (_parent)",
+DlgLnkTargetSelf	: "Kendi Penceresi (_self)",
+DlgLnkTargetTop		: "En Üst Pencere (_top)",
+DlgLnkTargetFrameName	: "Hedef Çerçeve Adı",
+DlgLnkPopWinName	: "Yeni Açılan Pencere Adı",
+DlgLnkPopWinFeat	: "Yeni Açılan Pencere Özellikleri",
+DlgLnkPopResize		: "Boyutlandırılabilir",
+DlgLnkPopLocation	: "Yer Çubuğu",
+DlgLnkPopMenu		: "Menü Çubuğu",
+DlgLnkPopScroll		: "Kaydırma Çubukları",
+DlgLnkPopStatus		: "Durum Çubuğu",
+DlgLnkPopToolbar	: "Araç Çubuğu",
+DlgLnkPopFullScrn	: "Tam Ekran (IE)",
+DlgLnkPopDependent	: "Bağımlı (Netscape)",
+DlgLnkPopWidth		: "Genişlik",
+DlgLnkPopHeight		: "Yükseklik",
+DlgLnkPopLeft		: "Sola Göre Konum",
+DlgLnkPopTop		: "Yukarıya Göre Konum",
+
+DlnLnkMsgNoUrl		: "Lütfen köprü URL'sini yazın",
+DlnLnkMsgNoEMail	: "Lütfen E-posta adresini yazın",
+DlnLnkMsgNoAnchor	: "Lütfen bir çapa seçin",
+DlnLnkMsgInvPopName	: "Açılır pencere adı abecesel bir karakterle başlamalı ve boşluk içermemelidir",
+
+// Color Dialog
+DlgColorTitle		: "Renk Seç",
+DlgColorBtnClear	: "Temizle",
+DlgColorHighlight	: "Vurgula",
+DlgColorSelected	: "Seçilmiş",
+
+// Smiley Dialog
+DlgSmileyTitle		: "İfade Ekle",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Özel Karakter Seç",
+
+// Table Dialog
+DlgTableTitle		: "Tablo Özellikleri",
+DlgTableRows		: "Satırlar",
+DlgTableColumns		: "Sütunlar",
+DlgTableBorder		: "Kenar Kalınlığı",
+DlgTableAlign		: "Hizalama",
+DlgTableAlignNotSet	: "<Tanımlanmamış>",
+DlgTableAlignLeft	: "Sol",
+DlgTableAlignCenter	: "Merkez",
+DlgTableAlignRight	: "Sağ",
+DlgTableWidth		: "Genişlik",
+DlgTableWidthPx		: "piksel",
+DlgTableWidthPc		: "yüzde",
+DlgTableHeight		: "Yükseklik",
+DlgTableCellSpace	: "Izgara kalınlığı",
+DlgTableCellPad		: "Izgara yazı arası",
+DlgTableCaption		: "Başlık",
+DlgTableSummary		: "Özet",
+
+// Table Cell Dialog
+DlgCellTitle		: "Hücre Özellikleri",
+DlgCellWidth		: "Genişlik",
+DlgCellWidthPx		: "piksel",
+DlgCellWidthPc		: "yüzde",
+DlgCellHeight		: "Yükseklik",
+DlgCellWordWrap		: "Sözcük Kaydır",
+DlgCellWordWrapNotSet	: "<Tanımlanmamış>",
+DlgCellWordWrapYes	: "Evet",
+DlgCellWordWrapNo	: "Hayır",
+DlgCellHorAlign		: "Yatay Hizalama",
+DlgCellHorAlignNotSet	: "<Tanımlanmamış>",
+DlgCellHorAlignLeft	: "Sol",
+DlgCellHorAlignCenter	: "Merkez",
+DlgCellHorAlignRight: "Sağ",
+DlgCellVerAlign		: "Dikey Hizalama",
+DlgCellVerAlignNotSet	: "<Tanımlanmamış>",
+DlgCellVerAlignTop	: "Tepe",
+DlgCellVerAlignMiddle	: "Orta",
+DlgCellVerAlignBottom	: "Alt",
+DlgCellVerAlignBaseline	: "Taban Çizgisi",
+DlgCellRowSpan		: "Satır Kapla",
+DlgCellCollSpan		: "Sütun Kapla",
+DlgCellBackColor	: "Arka Plan Rengi",
+DlgCellBorderColor	: "Kenar Rengi",
+DlgCellBtnSelect	: "Seç...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Find and Replace",	//MISSING
+
+// Find Dialog
+DlgFindTitle		: "Bul",
+DlgFindFindBtn		: "Bul",
+DlgFindNotFoundMsg	: "Belirtilen yazı bulunamadı.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Değiştir",
+DlgReplaceFindLbl		: "Aranan:",
+DlgReplaceReplaceLbl	: "Bununla değiştir:",
+DlgReplaceCaseChk		: "Büyük/küçük harf duyarlı",
+DlgReplaceReplaceBtn	: "Değiştir",
+DlgReplaceReplAllBtn	: "Tümünü Değiştir",
+DlgReplaceWordChk		: "Kelimenin tamamı uysun",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "Gezgin yazılımınızın güvenlik ayarları düzenleyicinin otomatik kesme işlemine izin vermiyor. İşlem için (Ctrl+X) tuşlarını kullanın.",
+PasteErrorCopy	: "Gezgin yazılımınızın güvenlik ayarları düzenleyicinin otomatik kopyalama işlemine izin vermiyor. İşlem için (Ctrl+C) tuşlarını kullanın.",
+
+PasteAsText		: "Düz Metin Olarak Yapıştır",
+PasteFromWord	: "Word'den yapıştır",
+
+DlgPasteMsg2	: "Lütfen aşağıdaki kutunun içine yapıştırın. (<STRONG>Ctrl+V</STRONG>) ve <STRONG>Tamam</STRONG> butonunu tıklayın.",
+DlgPasteSec		: "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.",	//MISSING
+DlgPasteIgnoreFont		: "Yazı Tipi tanımlarını yoksay",
+DlgPasteRemoveStyles	: "Biçem Tanımlarını çıkar",
+DlgPasteCleanBox		: "Temizlik Kutusu",
+
+// Color Picker
+ColorAutomatic	: "Otomatik",
+ColorMoreColors	: "Diğer renkler...",
+
+// Document Properties
+DocProps		: "Belge Özellikleri",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Çapa Özellikleri",
+DlgAnchorName		: "Çapa Adı",
+DlgAnchorErrorName	: "Lütfen çapa için ad giriniz",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Sözlükte Yok",
+DlgSpellChangeTo		: "Şuna değiştir:",
+DlgSpellBtnIgnore		: "Yoksay",
+DlgSpellBtnIgnoreAll	: "Tümünü Yoksay",
+DlgSpellBtnReplace		: "Değiştir",
+DlgSpellBtnReplaceAll	: "Tümünü Değiştir",
+DlgSpellBtnUndo			: "Geri Al",
+DlgSpellNoSuggestions	: "- Öneri Yok -",
+DlgSpellProgress		: "Yazım denetimi işlemde...",
+DlgSpellNoMispell		: "Yazım denetimi tamamlandı: Yanlış yazıma rastlanmadı",
+DlgSpellNoChanges		: "Yazım denetimi tamamlandı: Hiçbir kelime değiştirilmedi",
+DlgSpellOneChange		: "Yazım denetimi tamamlandı: Bir kelime değiştirildi",
+DlgSpellManyChanges		: "Yazım denetimi tamamlandı: %1 kelime değiştirildi",
+
+IeSpellDownload			: "Yazım denetimi yüklenmemiş. Şimdi yüklemek ister misiniz?",
+
+// Button Dialog
+DlgButtonText		: "Metin (Değer)",
+DlgButtonType		: "Tip",
+DlgButtonTypeBtn	: "Düğme",
+DlgButtonTypeSbm	: "Gönder",
+DlgButtonTypeRst	: "Sıfırla",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Ad",
+DlgCheckboxValue	: "Değer",
+DlgCheckboxSelected	: "Seçili",
+
+// Form Dialog
+DlgFormName		: "Ad",
+DlgFormAction	: "İşlem",
+DlgFormMethod	: "Yöntem",
+
+// Select Field Dialog
+DlgSelectName		: "Ad",
+DlgSelectValue		: "Değer",
+DlgSelectSize		: "Boyut",
+DlgSelectLines		: "satır",
+DlgSelectChkMulti	: "Çoklu seçime izin ver",
+DlgSelectOpAvail	: "Mevcut Seçenekler",
+DlgSelectOpText		: "Metin",
+DlgSelectOpValue	: "Değer",
+DlgSelectBtnAdd		: "Ekle",
+DlgSelectBtnModify	: "Düzenle",
+DlgSelectBtnUp		: "Yukarı",
+DlgSelectBtnDown	: "Aşağı",
+DlgSelectBtnSetValue : "Seçili değer olarak ata",
+DlgSelectBtnDelete	: "Sil",
+
+// Textarea Dialog
+DlgTextareaName	: "Ad",
+DlgTextareaCols	: "Sütunlar",
+DlgTextareaRows	: "Satırlar",
+
+// Text Field Dialog
+DlgTextName			: "Ad",
+DlgTextValue		: "Değer",
+DlgTextCharWidth	: "Karakter Genişliği",
+DlgTextMaxChars		: "En Fazla Karakter",
+DlgTextType			: "Tür",
+DlgTextTypeText		: "Metin",
+DlgTextTypePass		: "Parola",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Ad",
+DlgHiddenValue	: "Değer",
+
+// Bulleted List Dialog
+BulletedListProp	: "Simgeli Liste Özellikleri",
+NumberedListProp	: "Numaralı Liste Özellikleri",
+DlgLstStart			: "Başlangıç",
+DlgLstType			: "Tip",
+DlgLstTypeCircle	: "Çember",
+DlgLstTypeDisc		: "Disk",
+DlgLstTypeSquare	: "Kare",
+DlgLstTypeNumbers	: "Sayılar (1, 2, 3)",
+DlgLstTypeLCase		: "Küçük Harfler (a, b, c)",
+DlgLstTypeUCase		: "Büyük Harfler (A, B, C)",
+DlgLstTypeSRoman	: "Küçük Romen Rakamları (i, ii, iii)",
+DlgLstTypeLRoman	: "Büyük Romen Rakamları (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Genel",
+DlgDocBackTab		: "Arka Plan",
+DlgDocColorsTab		: "Renkler ve Kenar Boşlukları",
+DlgDocMetaTab		: "Tanım Bilgisi (Meta)",
+
+DlgDocPageTitle		: "Sayfa Başlığı",
+DlgDocLangDir		: "Dil Yönü",
+DlgDocLangDirLTR	: "Soldan Sağa (LTR)",
+DlgDocLangDirRTL	: "Sağdan Sola (RTL)",
+DlgDocLangCode		: "Dil Kodu",
+DlgDocCharSet		: "Karakter Kümesi Kodlaması",
+DlgDocCharSetCE		: "Orta Avrupa",
+DlgDocCharSetCT		: "Geleneksel Çince (Big5)",
+DlgDocCharSetCR		: "Kiril",
+DlgDocCharSetGR		: "Yunanca",
+DlgDocCharSetJP		: "Japonca",
+DlgDocCharSetKR		: "Korece",
+DlgDocCharSetTR		: "Türkçe",
+DlgDocCharSetUN		: "Unicode (UTF-8)",
+DlgDocCharSetWE		: "Batı Avrupa",
+DlgDocCharSetOther	: "Diğer Karakter Kümesi Kodlaması",
+
+DlgDocDocType		: "Belge Türü Başlığı",
+DlgDocDocTypeOther	: "Diğer Belge Türü Başlığı",
+DlgDocIncXHTML		: "XHTML Bildirimlerini Dahil Et",
+DlgDocBgColor		: "Arka Plan Rengi",
+DlgDocBgImage		: "Arka Plan Resim URLsi",
+DlgDocBgNoScroll	: "Sabit Arka Plan",
+DlgDocCText			: "Metin",
+DlgDocCLink			: "Köprü",
+DlgDocCVisited		: "Ziyaret Edilmiş Köprü",
+DlgDocCActive		: "Etkin Köprü",
+DlgDocMargins		: "Kenar Boşlukları",
+DlgDocMaTop			: "Tepe",
+DlgDocMaLeft		: "Sol",
+DlgDocMaRight		: "Sağ",
+DlgDocMaBottom		: "Alt",
+DlgDocMeIndex		: "Belge Dizinleme Anahtar Kelimeleri (virgülle ayrılmış)",
+DlgDocMeDescr		: "Belge Tanımı",
+DlgDocMeAuthor		: "Yazar",
+DlgDocMeCopy		: "Telif",
+DlgDocPreview		: "Ön İzleme",
+
+// Templates Dialog
+Templates			: "Şablonlar",
+DlgTemplatesTitle	: "İçerik Şablonları",
+DlgTemplatesSelMsg	: "Düzenleyicide açmak için lütfen bir şablon seçin.<br>(hali hazırdaki içerik kaybolacaktır.):",
+DlgTemplatesLoading	: "Şablon listesi yüklenmekte. Lütfen bekleyiniz...",
+DlgTemplatesNoTpl	: "(Belirli bir şablon seçilmedi)",
+DlgTemplatesReplace	: "Mevcut içerik ile değiştir",
+
+// About Dialog
+DlgAboutAboutTab	: "Hakkında",
+DlgAboutBrowserInfoTab	: "Gezgin Bilgisi",
+DlgAboutLicenseTab	: "Lisans",
+DlgAboutVersion		: "sürüm",
+DlgAboutInfo		: "Daha fazla bilgi için:"
+};
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/uk.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/uk.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/uk.js	(revision 1280)
@@ -0,0 +1,516 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Ukrainian language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Згорнути панель інструментів",
+ToolbarExpand		: "Розгорнути панель інструментів",
+
+// Toolbar Items and Context Menu
+Save				: "Зберегти",
+NewPage				: "Нова сторінка",
+Preview				: "Попередній перегляд",
+Cut					: "Вирізати",
+Copy				: "Копіювати",
+Paste				: "Вставити",
+PasteText			: "Вставити тільки текст",
+PasteWord			: "Вставити з Word",
+Print				: "Друк",
+SelectAll			: "Виділити все",
+RemoveFormat		: "Прибрати форматування",
+InsertLinkLbl		: "Посилання",
+InsertLink			: "Вставити/Редагувати посилання",
+RemoveLink			: "Знищити посилання",
+Anchor				: "Вставити/Редагувати якір",
+AnchorDelete		: "Remove Anchor",	//MISSING
+InsertImageLbl		: "Зображення",
+InsertImage			: "Вставити/Редагувати зображення",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Вставити/Редагувати Flash",
+InsertTableLbl		: "Таблиця",
+InsertTable			: "Вставити/Редагувати таблицю",
+InsertLineLbl		: "Лінія",
+InsertLine			: "Вставити горизонтальну лінію",
+InsertSpecialCharLbl: "Спеціальний символ",
+InsertSpecialChar	: "Вставити спеціальний символ",
+InsertSmileyLbl		: "Смайлик",
+InsertSmiley		: "Вставити смайлик",
+About				: "Про FCKeditor",
+Bold				: "Жирний",
+Italic				: "Курсив",
+Underline			: "Підкреслений",
+StrikeThrough		: "Закреслений",
+Subscript			: "Підрядковий індекс",
+Superscript			: "Надрядковий индекс",
+LeftJustify			: "По лівому краю",
+CenterJustify		: "По центру",
+RightJustify		: "По правому краю",
+BlockJustify		: "По ширині",
+DecreaseIndent		: "Зменшити відступ",
+IncreaseIndent		: "Збільшити відступ",
+Blockquote			: "Blockquote",	//MISSING
+Undo				: "Повернути",
+Redo				: "Повторити",
+NumberedListLbl		: "Нумерований список",
+NumberedList		: "Вставити/Видалити нумерований список",
+BulletedListLbl		: "Маркований список",
+BulletedList		: "Вставити/Видалити маркований список",
+ShowTableBorders	: "Показати бордюри таблиці",
+ShowDetails			: "Показати деталі",
+Style				: "Стиль",
+FontFormat			: "Форматування",
+Font				: "Шрифт",
+FontSize			: "Розмір",
+TextColor			: "Колір тексту",
+BGColor				: "Колір фону",
+Source				: "Джерело",
+Find				: "Пошук",
+Replace				: "Заміна",
+SpellCheck			: "Перевірити орфографію",
+UniversalKeyboard	: "Універсальна клавіатура",
+PageBreakLbl		: "Розривши сторінки",
+PageBreak			: "Вставити розривши сторінки",
+
+Form			: "Форма",
+Checkbox		: "Флагова кнопка",
+RadioButton		: "Кнопка вибору",
+TextField		: "Текстове поле",
+Textarea		: "Текстова область",
+HiddenField		: "Приховане поле",
+Button			: "Кнопка",
+SelectionField	: "Список",
+ImageButton		: "Кнопка із зображенням",
+
+FitWindow		: "Розвернути вікно редактора",
+ShowBlocks		: "Show Blocks",	//MISSING
+
+// Context Menu
+EditLink			: "Вставити посилання",
+CellCM				: "Осередок",
+RowCM				: "Рядок",
+ColumnCM			: "Колонка",
+InsertRowAfter		: "Insert Row After",	//MISSING
+InsertRowBefore		: "Insert Row Before",	//MISSING
+DeleteRows			: "Видалити строки",
+InsertColumnAfter	: "Insert Column After",	//MISSING
+InsertColumnBefore	: "Insert Column Before",	//MISSING
+DeleteColumns		: "Видалити колонки",
+InsertCellAfter		: "Insert Cell After",	//MISSING
+InsertCellBefore	: "Insert Cell Before",	//MISSING
+DeleteCells			: "Видалити комірки",
+MergeCells			: "Об'єднати комірки",
+MergeRight			: "Merge Right",	//MISSING
+MergeDown			: "Merge Down",	//MISSING
+HorizontalSplitCell	: "Split Cell Horizontally",	//MISSING
+VerticalSplitCell	: "Split Cell Vertically",	//MISSING
+TableDelete			: "Видалити таблицю",
+CellProperties		: "Властивості комірки",
+TableProperties		: "Властивості таблиці",
+ImageProperties		: "Властивості зображення",
+FlashProperties		: "Властивості Flash",
+
+AnchorProp			: "Властивості якоря",
+ButtonProp			: "Властивості кнопки",
+CheckboxProp		: "Властивості флагової кнопки",
+HiddenFieldProp		: "Властивості прихованого поля",
+RadioButtonProp		: "Властивості кнопки вибору",
+ImageButtonProp		: "Властивості кнопки із зображенням",
+TextFieldProp		: "Властивості текстового поля",
+SelectionFieldProp	: "Властивості списку",
+TextareaProp		: "Властивості текстової області",
+FormProp			: "Властивості форми",
+
+FontFormats			: "Нормальний;Форматований;Адреса;Заголовок 1;Заголовок 2;Заголовок 3;Заголовок 4;Заголовок 5;Заголовок 6;Нормальний (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "Обробка XHTML. Зачекайте, будь ласка...",
+Done				: "Зроблено",
+PasteWordConfirm	: "Текст, що ви хочете вставити, схожий на копійований з Word. Ви хочете очистити його перед вставкою?",
+NotCompatiblePaste	: "Ця команда доступна для Internet Explorer версії 5.5 або вище. Ви хочете вставити без очищення?",
+UnknownToolbarItem	: "Невідомий елемент панелі інструментів \"%1\"",
+UnknownCommand		: "Невідоме ім'я команди \"%1\"",
+NotImplemented		: "Команда не реалізована",
+UnknownToolbarSet	: "Панель інструментів \"%1\" не існує",
+NoActiveX			: "Настройки безпеки вашого браузера можуть обмежувати деякі властивості редактора. Ви повинні включити опцію \"Запускати елементи управління ACTIVEX і плугіни\". Ви можете бачити помилки і помічати відсутність можливостей.",
+BrowseServerBlocked : "Ресурси браузера не можуть бути відкриті. Перевірте що блокування спливаючих вікон вимкнені.",
+DialogBlocked		: "Не можливо відкрити вікно діалогу. Перевірте що блокування спливаючих вікон вимкнені.",
+
+// Dialogs
+DlgBtnOK			: "ОК",
+DlgBtnCancel		: "Скасувати",
+DlgBtnClose			: "Зачинити",
+DlgBtnBrowseServer	: "Передивитися на сервері",
+DlgAdvancedTag		: "Розширений",
+DlgOpOther			: "<Інше>",
+DlgInfoTab			: "Інфо",
+DlgAlertUrl			: "Вставте, будь-ласка, URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<не визначено>",
+DlgGenId			: "Ідентифікатор",
+DlgGenLangDir		: "Напрямок мови",
+DlgGenLangDirLtr	: "Зліва на право (LTR)",
+DlgGenLangDirRtl	: "Зправа на ліво (RTL)",
+DlgGenLangCode		: "Мова",
+DlgGenAccessKey		: "Гаряча клавіша",
+DlgGenName			: "Им'я",
+DlgGenTabIndex		: "Послідовність переходу",
+DlgGenLongDescr		: "Довгий опис URL",
+DlgGenClass			: "Клас CSS",
+DlgGenTitle			: "Заголовок",
+DlgGenContType		: "Тип вмісту",
+DlgGenLinkCharset	: "Кодировка",
+DlgGenStyle			: "Стиль CSS",
+
+// Image Dialog
+DlgImgTitle			: "Властивості зображення",
+DlgImgInfoTab		: "Інформація про изображении",
+DlgImgBtnUpload		: "Надіслати на сервер",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Закачати",
+DlgImgAlt			: "Альтернативний текст",
+DlgImgWidth			: "Ширина",
+DlgImgHeight		: "Висота",
+DlgImgLockRatio		: "Зберегти пропорції",
+DlgBtnResetSize		: "Скинути розмір",
+DlgImgBorder		: "Бордюр",
+DlgImgHSpace		: "Горизонтальний відступ",
+DlgImgVSpace		: "Вертикальний відступ",
+DlgImgAlign			: "Вирівнювання",
+DlgImgAlignLeft		: "По лівому краю",
+DlgImgAlignAbsBottom: "Абс по низу",
+DlgImgAlignAbsMiddle: "Абс по середині",
+DlgImgAlignBaseline	: "По базовій лінії",
+DlgImgAlignBottom	: "По низу",
+DlgImgAlignMiddle	: "По середині",
+DlgImgAlignRight	: "По правому краю",
+DlgImgAlignTextTop	: "Текст на верху",
+DlgImgAlignTop		: "По верху",
+DlgImgPreview		: "Попередній перегляд",
+DlgImgAlertUrl		: "Будь ласка, введіть URL зображення",
+DlgImgLinkTab		: "Посилання",
+
+// Flash Dialog
+DlgFlashTitle		: "Властивості Flash",
+DlgFlashChkPlay		: "Авто програвання",
+DlgFlashChkLoop		: "Зациклити",
+DlgFlashChkMenu		: "Дозволити меню Flash",
+DlgFlashScale		: "Масштаб",
+DlgFlashScaleAll	: "Показати всі",
+DlgFlashScaleNoBorder	: "Без рамки",
+DlgFlashScaleFit	: "Дійсний розмір",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Посилання",
+DlgLnkInfoTab		: "Інформація посилання",
+DlgLnkTargetTab		: "Ціль",
+
+DlgLnkType			: "Тип посилання",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Якір на цю сторінку",
+DlgLnkTypeEMail		: "Эл. пошта",
+DlgLnkProto			: "Протокол",
+DlgLnkProtoOther	: "<інше>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Оберіть якір",
+DlgLnkAnchorByName	: "За ім'ям якоря",
+DlgLnkAnchorById	: "За ідентифікатором елемента",
+DlgLnkNoAnchors		: "(Немає якорів доступних в цьому документі)",
+DlgLnkEMail			: "Адреса ел. пошти",
+DlgLnkEMailSubject	: "Тема листа",
+DlgLnkEMailBody		: "Тіло повідомлення",
+DlgLnkUpload		: "Закачати",
+DlgLnkBtnUpload		: "Переслати на сервер",
+
+DlgLnkTarget		: "Ціль",
+DlgLnkTargetFrame	: "<фрейм>",
+DlgLnkTargetPopup	: "<спливаюче вікно>",
+DlgLnkTargetBlank	: "Нове вікно (_blank)",
+DlgLnkTargetParent	: "Батьківське вікно (_parent)",
+DlgLnkTargetSelf	: "Теж вікно (_self)",
+DlgLnkTargetTop		: "Найвище вікно (_top)",
+DlgLnkTargetFrameName	: "Ім'я целевого фрейма",
+DlgLnkPopWinName	: "Ім'я спливаючого вікна",
+DlgLnkPopWinFeat	: "Властивості спливаючого вікна",
+DlgLnkPopResize		: "Змінюється в розмірах",
+DlgLnkPopLocation	: "Панель локації",
+DlgLnkPopMenu		: "Панель меню",
+DlgLnkPopScroll		: "Полоси прокрутки",
+DlgLnkPopStatus		: "Строка статусу",
+DlgLnkPopToolbar	: "Панель інструментів",
+DlgLnkPopFullScrn	: "Повний екран (IE)",
+DlgLnkPopDependent	: "Залежний (Netscape)",
+DlgLnkPopWidth		: "Ширина",
+DlgLnkPopHeight		: "Висота",
+DlgLnkPopLeft		: "Позиція зліва",
+DlgLnkPopTop		: "Позиція зверху",
+
+DlnLnkMsgNoUrl		: "Будь ласка, занесіть URL посилання",
+DlnLnkMsgNoEMail	: "Будь ласка, занесіть адрес эл. почты",
+DlnLnkMsgNoAnchor	: "Будь ласка, оберіть якір",
+DlnLnkMsgInvPopName	: "Назва спливаючого вікна повинна починатися букви і не може містити пропусків",
+
+// Color Dialog
+DlgColorTitle		: "Оберіть колір",
+DlgColorBtnClear	: "Очистити",
+DlgColorHighlight	: "Підсвічений",
+DlgColorSelected	: "Обраний",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Вставити смайлик",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Оберіть спеціальний символ",
+
+// Table Dialog
+DlgTableTitle		: "Властивості таблиці",
+DlgTableRows		: "Строки",
+DlgTableColumns		: "Колонки",
+DlgTableBorder		: "Розмір бордюра",
+DlgTableAlign		: "Вирівнювання",
+DlgTableAlignNotSet	: "<Не вст.>",
+DlgTableAlignLeft	: "Зліва",
+DlgTableAlignCenter	: "По центру",
+DlgTableAlignRight	: "Зправа",
+DlgTableWidth		: "Ширина",
+DlgTableWidthPx		: "пікселів",
+DlgTableWidthPc		: "відсотків",
+DlgTableHeight		: "Висота",
+DlgTableCellSpace	: "Проміжок (spacing)",
+DlgTableCellPad		: "Відступ (padding)",
+DlgTableCaption		: "Заголовок",
+DlgTableSummary		: "Резюме",
+
+// Table Cell Dialog
+DlgCellTitle		: "Властивості комірки",
+DlgCellWidth		: "Ширина",
+DlgCellWidthPx		: "пікселів",
+DlgCellWidthPc		: "відсотків",
+DlgCellHeight		: "Висота",
+DlgCellWordWrap		: "Згортання текста",
+DlgCellWordWrapNotSet	: "<Не вст.>",
+DlgCellWordWrapYes	: "Так",
+DlgCellWordWrapNo	: "Ні",
+DlgCellHorAlign		: "Горизонтальне вирівнювання",
+DlgCellHorAlignNotSet	: "<Не вст.>",
+DlgCellHorAlignLeft	: "Зліва",
+DlgCellHorAlignCenter	: "По центру",
+DlgCellHorAlignRight: "Зправа",
+DlgCellVerAlign		: "Вертикальное вирівнювання",
+DlgCellVerAlignNotSet	: "<Не вст.>",
+DlgCellVerAlignTop	: "Зверху",
+DlgCellVerAlignMiddle	: "Посередині",
+DlgCellVerAlignBottom	: "Знизу",
+DlgCellVerAlignBaseline	: "По базовій лінії",
+DlgCellRowSpan		: "Діапазон строк (span)",
+DlgCellCollSpan		: "Діапазон колонок (span)",
+DlgCellBackColor	: "Колір фона",
+DlgCellBorderColor	: "Колір бордюра",
+DlgCellBtnSelect	: "Оберіть...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Find and Replace",	//MISSING
+
+// Find Dialog
+DlgFindTitle		: "Пошук",
+DlgFindFindBtn		: "Пошук",
+DlgFindNotFoundMsg	: "Вказаний текст не знайдений.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Замінити",
+DlgReplaceFindLbl		: "Шукати:",
+DlgReplaceReplaceLbl	: "Замінити на:",
+DlgReplaceCaseChk		: "Учитывать регистр",
+DlgReplaceReplaceBtn	: "Замінити",
+DlgReplaceReplAllBtn	: "Замінити все",
+DlgReplaceWordChk		: "Збіг цілих слів",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "Настройки безпеки вашого браузера не дозволяють редактору автоматично виконувати операції вирізування. Будь ласка, використовуйте клавіатуру для цього (Ctrl+X).",
+PasteErrorCopy	: "Настройки безпеки вашого браузера не дозволяють редактору автоматично виконувати операції копіювання. Будь ласка, використовуйте клавіатуру для цього (Ctrl+C).",
+
+PasteAsText		: "Вставити тільки текст",
+PasteFromWord	: "Вставити з Word",
+
+DlgPasteMsg2	: "Будь-ласка, вставте з буфера обміну в цю область, користуючись комбінацією клавіш (<STRONG>Ctrl+V</STRONG>) та натисніть <STRONG>OK</STRONG>.",
+DlgPasteSec		: "Редактор не може отримати прямий доступ до буферу обміну у зв'язку з налаштуваннями вашого браузера. Вам потрібно вставити інформацію повторно в це вікно.",
+DlgPasteIgnoreFont		: "Ігнорувати налаштування шрифтів",
+DlgPasteRemoveStyles	: "Видалити налаштування стилів",
+DlgPasteCleanBox		: "Очистити область",
+
+// Color Picker
+ColorAutomatic	: "Автоматичний",
+ColorMoreColors	: "Кольори...",
+
+// Document Properties
+DocProps		: "Властивості документа",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Властивості якоря",
+DlgAnchorName		: "Ім'я якоря",
+DlgAnchorErrorName	: "Будь ласка, занесіть ім'я якоря",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Не має в словнику",
+DlgSpellChangeTo		: "Замінити на",
+DlgSpellBtnIgnore		: "Ігнорувати",
+DlgSpellBtnIgnoreAll	: "Ігнорувати все",
+DlgSpellBtnReplace		: "Замінити",
+DlgSpellBtnReplaceAll	: "Замінити все",
+DlgSpellBtnUndo			: "Назад",
+DlgSpellNoSuggestions	: "- Немає припущень -",
+DlgSpellProgress		: "Виконується перевірка орфографії...",
+DlgSpellNoMispell		: "Перевірку орфографії завершено: помилок не знайдено",
+DlgSpellNoChanges		: "Перевірку орфографії завершено: жодне слово не змінено",
+DlgSpellOneChange		: "Перевірку орфографії завершено: змінено одно слово",
+DlgSpellManyChanges		: "Перевірку орфографії завершено: 1% слів змінено",
+
+IeSpellDownload			: "Модуль перевірки орфографії не встановлено. Бажаєтн завантажити його зараз?",
+
+// Button Dialog
+DlgButtonText		: "Текст (Значення)",
+DlgButtonType		: "Тип",
+DlgButtonTypeBtn	: "Кнопка",
+DlgButtonTypeSbm	: "Відправити",
+DlgButtonTypeRst	: "Скинути",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Ім'я",
+DlgCheckboxValue	: "Значення",
+DlgCheckboxSelected	: "Обрана",
+
+// Form Dialog
+DlgFormName		: "Ім'я",
+DlgFormAction	: "Дія",
+DlgFormMethod	: "Метод",
+
+// Select Field Dialog
+DlgSelectName		: "Ім'я",
+DlgSelectValue		: "Значення",
+DlgSelectSize		: "Розмір",
+DlgSelectLines		: "лінії",
+DlgSelectChkMulti	: "Дозволити обрання декількох позицій",
+DlgSelectOpAvail	: "Доступні варіанти",
+DlgSelectOpText		: "Текст",
+DlgSelectOpValue	: "Значення",
+DlgSelectBtnAdd		: "Добавити",
+DlgSelectBtnModify	: "Змінити",
+DlgSelectBtnUp		: "Вгору",
+DlgSelectBtnDown	: "Вниз",
+DlgSelectBtnSetValue : "Встановити як вибране значення",
+DlgSelectBtnDelete	: "Видалити",
+
+// Textarea Dialog
+DlgTextareaName	: "Ім'я",
+DlgTextareaCols	: "Колонки",
+DlgTextareaRows	: "Строки",
+
+// Text Field Dialog
+DlgTextName			: "Ім'я",
+DlgTextValue		: "Значення",
+DlgTextCharWidth	: "Ширина",
+DlgTextMaxChars		: "Макс. кіл-ть символів",
+DlgTextType			: "Тип",
+DlgTextTypeText		: "Текст",
+DlgTextTypePass		: "Пароль",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Ім'я",
+DlgHiddenValue	: "Значення",
+
+// Bulleted List Dialog
+BulletedListProp	: "Властивості маркованого списка",
+NumberedListProp	: "Властивості нумерованного списка",
+DlgLstStart			: "Початок",
+DlgLstType			: "Тип",
+DlgLstTypeCircle	: "Коло",
+DlgLstTypeDisc		: "Диск",
+DlgLstTypeSquare	: "Квадрат",
+DlgLstTypeNumbers	: "Номери (1, 2, 3)",
+DlgLstTypeLCase		: "Літери нижнього регістра(a, b, c)",
+DlgLstTypeUCase		: "Букви верхнього регістра (A, B, C)",
+DlgLstTypeSRoman	: "Малі римські літери (i, ii, iii)",
+DlgLstTypeLRoman	: "Великі римські літери (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Загальні",
+DlgDocBackTab		: "Заднє тло",
+DlgDocColorsTab		: "Кольори та відступи",
+DlgDocMetaTab		: "Мета дані",
+
+DlgDocPageTitle		: "Заголовок сторінки",
+DlgDocLangDir		: "Напрямок тексту",
+DlgDocLangDirLTR	: "Зліва на право (LTR)",
+DlgDocLangDirRTL	: "Зправа на лево (RTL)",
+DlgDocLangCode		: "Код мови",
+DlgDocCharSet		: "Кодування набору символів",
+DlgDocCharSetCE		: "Центрально-європейська",
+DlgDocCharSetCT		: "Китайська традиційна (Big5)",
+DlgDocCharSetCR		: "Кирилиця",
+DlgDocCharSetGR		: "Грецька",
+DlgDocCharSetJP		: "Японська",
+DlgDocCharSetKR		: "Корейська",
+DlgDocCharSetTR		: "Турецька",
+DlgDocCharSetUN		: "Юнікод (UTF-8)",
+DlgDocCharSetWE		: "Західно-европейская",
+DlgDocCharSetOther	: "Інше кодування набору символів",
+
+DlgDocDocType		: "Заголовок типу документу",
+DlgDocDocTypeOther	: "Інший заголовок типу документу",
+DlgDocIncXHTML		: "Ввімкнути XHTML оголошення",
+DlgDocBgColor		: "Колір тла",
+DlgDocBgImage		: "URL зображення тла",
+DlgDocBgNoScroll	: "Тло без прокрутки",
+DlgDocCText			: "Текст",
+DlgDocCLink			: "Посилання",
+DlgDocCVisited		: "Відвідане посилання",
+DlgDocCActive		: "Активне посилання",
+DlgDocMargins		: "Відступи сторінки",
+DlgDocMaTop			: "Верхній",
+DlgDocMaLeft		: "Лівий",
+DlgDocMaRight		: "Правий",
+DlgDocMaBottom		: "Нижній",
+DlgDocMeIndex		: "Ключові слова документа (розділені комами)",
+DlgDocMeDescr		: "Опис документа",
+DlgDocMeAuthor		: "Автор",
+DlgDocMeCopy		: "Авторські права",
+DlgDocPreview		: "Попередній перегляд",
+
+// Templates Dialog
+Templates			: "Шаблони",
+DlgTemplatesTitle	: "Шаблони змісту",
+DlgTemplatesSelMsg	: "Оберіть, будь ласка, шаблон для відкриття в редакторі<br>(поточний зміст буде втрачено):",
+DlgTemplatesLoading	: "Завантаження списку шаблонів. Зачекайте, будь ласка...",
+DlgTemplatesNoTpl	: "(Не визначено жодного шаблону)",
+DlgTemplatesReplace	: "Замінити поточний вміст",
+
+// About Dialog
+DlgAboutAboutTab	: "Про програму",
+DlgAboutBrowserInfoTab	: "Інформація браузера",
+DlgAboutLicenseTab	: "Ліцензія",
+DlgAboutVersion		: "Версія",
+DlgAboutInfo		: "Додаткову інформацію дивіться на "
+};
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/vi.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/vi.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/vi.js	(revision 1280)
@@ -0,0 +1,516 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Vietnamese language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "Thu gọn Thanh công cụ",
+ToolbarExpand		: "Mở rộng Thanh công cụ",
+
+// Toolbar Items and Context Menu
+Save				: "Lưu",
+NewPage				: "Trang mới",
+Preview				: "Xem trước",
+Cut					: "Cắt",
+Copy				: "Sao chép",
+Paste				: "Dán",
+PasteText			: "Dán theo dạng văn bản thuần",
+PasteWord			: "Dán với định dạng Word",
+Print				: "In",
+SelectAll			: "Chọn Tất cả",
+RemoveFormat		: "Xoá Định dạng",
+InsertLinkLbl		: "Liên kết",
+InsertLink			: "Chèn/Sửa Liên kết",
+RemoveLink			: "Xoá Liên kết",
+Anchor				: "Chèn/Sửa Neo",
+AnchorDelete		: "Remove Anchor",	//MISSING
+InsertImageLbl		: "Hình ảnh",
+InsertImage			: "Chèn/Sửa Hình ảnh",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "Chèn/Sửa Flash",
+InsertTableLbl		: "Bảng",
+InsertTable			: "Chèn/Sửa Bảng",
+InsertLineLbl		: "Đường phân cách ngang",
+InsertLine			: "Chèn Đường phân cách ngang",
+InsertSpecialCharLbl: "Ký tự đặc biệt",
+InsertSpecialChar	: "Chèn Ký tự đặc biệt",
+InsertSmileyLbl		: "Hình biểu lộ cảm xúc (mặt cười)",
+InsertSmiley		: "Chèn Hình biểu lộ cảm xúc (mặt cười)",
+About				: "Giới thiệu về FCKeditor",
+Bold				: "Đậm",
+Italic				: "Nghiêng",
+Underline			: "Gạch chân",
+StrikeThrough		: "Gạch xuyên ngang",
+Subscript			: "Chỉ số dưới",
+Superscript			: "Chỉ số trên",
+LeftJustify			: "Canh trái",
+CenterJustify		: "Canh giữa",
+RightJustify		: "Canh phải",
+BlockJustify		: "Canh đều",
+DecreaseIndent		: "Dịch ra ngoài",
+IncreaseIndent		: "Dịch vào trong",
+Blockquote			: "Blockquote",	//MISSING
+Undo				: "Khôi phục thao tác",
+Redo				: "Làm lại thao tác",
+NumberedListLbl		: "Danh sách có thứ tự",
+NumberedList		: "Chèn/Xoá Danh sách có thứ tự",
+BulletedListLbl		: "Danh sách không thứ tự",
+BulletedList		: "Chèn/Xoá Danh sách không thứ tự",
+ShowTableBorders	: "Hiển thị Đường viền bảng",
+ShowDetails			: "Hiển thị Chi tiết",
+Style				: "Mẫu",
+FontFormat			: "Định dạng",
+Font				: "Phông",
+FontSize			: "Cỡ chữ",
+TextColor			: "Màu chữ",
+BGColor				: "Màu nền",
+Source				: "Mã HTML",
+Find				: "Tìm kiếm",
+Replace				: "Thay thế",
+SpellCheck			: "Kiểm tra Chính tả",
+UniversalKeyboard	: "Bàn phím Quốc tế",
+PageBreakLbl		: "Ngắt trang",
+PageBreak			: "Chèn Ngắt trang",
+
+Form			: "Biểu mẫu",
+Checkbox		: "Nút kiểm",
+RadioButton		: "Nút chọn",
+TextField		: "Trường văn bản",
+Textarea		: "Vùng văn bản",
+HiddenField		: "Trường ẩn",
+Button			: "Nút",
+SelectionField	: "Ô chọn",
+ImageButton		: "Nút hình ảnh",
+
+FitWindow		: "Mở rộng tối đa kích thước trình biên tập",
+ShowBlocks		: "Show Blocks",	//MISSING
+
+// Context Menu
+EditLink			: "Sửa Liên kết",
+CellCM				: "Ô",
+RowCM				: "Hàng",
+ColumnCM			: "Cột",
+InsertRowAfter		: "Insert Row After",	//MISSING
+InsertRowBefore		: "Insert Row Before",	//MISSING
+DeleteRows			: "Xoá Hàng",
+InsertColumnAfter	: "Insert Column After",	//MISSING
+InsertColumnBefore	: "Insert Column Before",	//MISSING
+DeleteColumns		: "Xoá Cột",
+InsertCellAfter		: "Insert Cell After",	//MISSING
+InsertCellBefore	: "Insert Cell Before",	//MISSING
+DeleteCells			: "Xoá Ô",
+MergeCells			: "Trộn Ô",
+MergeRight			: "Merge Right",	//MISSING
+MergeDown			: "Merge Down",	//MISSING
+HorizontalSplitCell	: "Split Cell Horizontally",	//MISSING
+VerticalSplitCell	: "Split Cell Vertically",	//MISSING
+TableDelete			: "Xóa Bảng",
+CellProperties		: "Thuộc tính Ô",
+TableProperties		: "Thuộc tính Bảng",
+ImageProperties		: "Thuộc tính Hình ảnh",
+FlashProperties		: "Thuộc tính Flash",
+
+AnchorProp			: "Thuộc tính Neo",
+ButtonProp			: "Thuộc tính Nút",
+CheckboxProp		: "Thuộc tính Nút kiểm",
+HiddenFieldProp		: "Thuộc tính Trường ẩn",
+RadioButtonProp		: "Thuộc tính Nút chọn",
+ImageButtonProp		: "Thuộc tính Nút hình ảnh",
+TextFieldProp		: "Thuộc tính Trường văn bản",
+SelectionFieldProp	: "Thuộc tính Ô chọn",
+TextareaProp		: "Thuộc tính Vùng văn bản",
+FormProp			: "Thuộc tính Biểu mẫu",
+
+FontFormats			: "Normal;Formatted;Address;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6;Normal (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "Đang xử lý XHTML. Vui lòng đợi trong giây lát...",
+Done				: "Đã hoàn thành",
+PasteWordConfirm	: "Văn bản bạn muốn dán có kèm định dạng của Word. Bạn có muốn loại bỏ định dạng Word trước khi dán?",
+NotCompatiblePaste	: "Lệnh này chỉ được hỗ trợ từ trình duyệt Internet Explorer phiên bản 5.5 hoặc mới hơn. Bạn có muốn dán nguyên mẫu?",
+UnknownToolbarItem	: "Không rõ mục trên thanh công cụ \"%1\"",
+UnknownCommand		: "Không rõ lệnh \"%1\"",
+NotImplemented		: "Lệnh không được thực hiện",
+UnknownToolbarSet	: "Thanh công cụ \"%1\" không tồn tại",
+NoActiveX			: "Các thiết lập bảo mật của trình duyệt có thể giới hạn một số chức năng của trình biên tập. Bạn phải bật tùy chọn \"Run ActiveX controls and plug-ins\". Bạn có thể gặp một số lỗi và thấy thiếu đi một số chức năng.",
+BrowseServerBlocked : "Không thể mở được bộ duyệt tài nguyên. Hãy đảm bảo chức năng chặn popup đã bị vô hiệu hóa.",
+DialogBlocked		: "Không thể mở được cửa sổ hộp thoại. Hãy đảm bảo chức năng chặn popup đã bị vô hiệu hóa.",
+
+// Dialogs
+DlgBtnOK			: "Đồng ý",
+DlgBtnCancel		: "Bỏ qua",
+DlgBtnClose			: "Đóng",
+DlgBtnBrowseServer	: "Duyệt trên máy chủ",
+DlgAdvancedTag		: "Mở rộng",
+DlgOpOther			: "<Khác>",
+DlgInfoTab			: "Thông tin",
+DlgAlertUrl			: "Hãy nhập vào một URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<không thiết lập>",
+DlgGenId			: "Định danh",
+DlgGenLangDir		: "Đường dẫn Ngôn ngữ",
+DlgGenLangDirLtr	: "Trái sang Phải (LTR)",
+DlgGenLangDirRtl	: "Phải sang Trái (RTL)",
+DlgGenLangCode		: "Mã Ngôn ngữ",
+DlgGenAccessKey		: "Phím Hỗ trợ truy cập",
+DlgGenName			: "Tên",
+DlgGenTabIndex		: "Chỉ số của Tab",
+DlgGenLongDescr		: "Mô tả URL",
+DlgGenClass			: "Lớp Stylesheet",
+DlgGenTitle			: "Advisory Title",
+DlgGenContType		: "Advisory Content Type",
+DlgGenLinkCharset	: "Bảng mã của tài nguyên được liên kết đến",
+DlgGenStyle			: "Mẫu",
+
+// Image Dialog
+DlgImgTitle			: "Thuộc tính Hình ảnh",
+DlgImgInfoTab		: "Thông tin Hình ảnh",
+DlgImgBtnUpload		: "Tải lên Máy chủ",
+DlgImgURL			: "URL",
+DlgImgUpload		: "Tải lên",
+DlgImgAlt			: "Chú thích Hình ảnh",
+DlgImgWidth			: "Rộng",
+DlgImgHeight		: "Cao",
+DlgImgLockRatio		: "Giữ tỷ lệ",
+DlgBtnResetSize		: "Kích thước gốc",
+DlgImgBorder		: "Đường viền",
+DlgImgHSpace		: "HSpace",
+DlgImgVSpace		: "VSpace",
+DlgImgAlign			: "Vị trí",
+DlgImgAlignLeft		: "Trái",
+DlgImgAlignAbsBottom: "Dưới tuyệt đối",
+DlgImgAlignAbsMiddle: "Giữa tuyệt đối",
+DlgImgAlignBaseline	: "Baseline",
+DlgImgAlignBottom	: "Dưới",
+DlgImgAlignMiddle	: "Giữa",
+DlgImgAlignRight	: "Phải",
+DlgImgAlignTextTop	: "Phía trên chữ",
+DlgImgAlignTop		: "Trên",
+DlgImgPreview		: "Xem trước",
+DlgImgAlertUrl		: "Hãy đưa vào URL của hình ảnh",
+DlgImgLinkTab		: "Liên kết",
+
+// Flash Dialog
+DlgFlashTitle		: "Thuộc tính Flash",
+DlgFlashChkPlay		: "Tự động chạy",
+DlgFlashChkLoop		: "Lặp",
+DlgFlashChkMenu		: "Cho phép bật Menu của Flash",
+DlgFlashScale		: "Tỷ lệ",
+DlgFlashScaleAll	: "Hiển thị tất cả",
+DlgFlashScaleNoBorder	: "Không đường viền",
+DlgFlashScaleFit	: "Vừa vặn",
+
+// Link Dialog
+DlgLnkWindowTitle	: "Liên kết",
+DlgLnkInfoTab		: "Thông tin Liên kết",
+DlgLnkTargetTab		: "Đích",
+
+DlgLnkType			: "Kiểu Liên kết",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "Neo trong trang này",
+DlgLnkTypeEMail		: "Thư điện tử",
+DlgLnkProto			: "Giao thức",
+DlgLnkProtoOther	: "<khác>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "Chọn một Neo",
+DlgLnkAnchorByName	: "Theo Tên Neo",
+DlgLnkAnchorById	: "Theo Định danh Element",
+DlgLnkNoAnchors		: "(Không có Neo nào trong tài liệu)",
+DlgLnkEMail			: "Thư điện tử",
+DlgLnkEMailSubject	: "Tiêu đề Thông điệp",
+DlgLnkEMailBody		: "Nội dung Thông điệp",
+DlgLnkUpload		: "Tải lên",
+DlgLnkBtnUpload		: "Tải lên Máy chủ",
+
+DlgLnkTarget		: "Đích",
+DlgLnkTargetFrame	: "<khung>",
+DlgLnkTargetPopup	: "<cửa sổ popup>",
+DlgLnkTargetBlank	: "Cửa sổ mới (_blank)",
+DlgLnkTargetParent	: "Cửa sổ cha (_parent)",
+DlgLnkTargetSelf	: "Cùng cửa sổ (_self)",
+DlgLnkTargetTop		: "Cửa sổ trên cùng(_top)",
+DlgLnkTargetFrameName	: "Tên Khung đích",
+DlgLnkPopWinName	: "Tên Cửa sổ Popup",
+DlgLnkPopWinFeat	: "Đặc điểm của Cửa sổ Popup",
+DlgLnkPopResize		: "Kích thước thay đổi",
+DlgLnkPopLocation	: "Thanh vị trí",
+DlgLnkPopMenu		: "Thanh Menu",
+DlgLnkPopScroll		: "Thanh cuộn",
+DlgLnkPopStatus		: "Thanh trạng thái",
+DlgLnkPopToolbar	: "Thanh công cụ",
+DlgLnkPopFullScrn	: "Toàn màn hình (IE)",
+DlgLnkPopDependent	: "Phụ thuộc (Netscape)",
+DlgLnkPopWidth		: "Rộng",
+DlgLnkPopHeight		: "Cao",
+DlgLnkPopLeft		: "Vị trí Trái",
+DlgLnkPopTop		: "Vị trí Trên",
+
+DlnLnkMsgNoUrl		: "Hãy đưa vào Liên kết URL",
+DlnLnkMsgNoEMail	: "Hãy đưa vào địa chỉ thư điện tử",
+DlnLnkMsgNoAnchor	: "Hãy chọn một Neo",
+DlnLnkMsgInvPopName	: "Tên của cửa sổ Popup phải bắt đầu bằng một ký tự và không được chứa khoảng trắng",
+
+// Color Dialog
+DlgColorTitle		: "Chọn màu",
+DlgColorBtnClear	: "Xoá",
+DlgColorHighlight	: "Tô sáng",
+DlgColorSelected	: "Đã chọn",
+
+// Smiley Dialog
+DlgSmileyTitle		: "Chèn Hình biểu lộ cảm xúc (mặt cười)",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "Hãy chọn Ký tự đặc biệt",
+
+// Table Dialog
+DlgTableTitle		: "Thuộc tính bảng",
+DlgTableRows		: "Hàng",
+DlgTableColumns		: "Cột",
+DlgTableBorder		: "Cỡ Đường viền",
+DlgTableAlign		: "Canh lề",
+DlgTableAlignNotSet	: "<Chưa thiết lập>",
+DlgTableAlignLeft	: "Trái",
+DlgTableAlignCenter	: "Giữa",
+DlgTableAlignRight	: "Phải",
+DlgTableWidth		: "Rộng",
+DlgTableWidthPx		: "điểm (px)",
+DlgTableWidthPc		: "%",
+DlgTableHeight		: "Cao",
+DlgTableCellSpace	: "Khoảng cách Ô",
+DlgTableCellPad		: "Đệm Ô",
+DlgTableCaption		: "Đầu đề",
+DlgTableSummary		: "Tóm lược",
+
+// Table Cell Dialog
+DlgCellTitle		: "Thuộc tính Ô",
+DlgCellWidth		: "Rộng",
+DlgCellWidthPx		: "điểm (px)",
+DlgCellWidthPc		: "%",
+DlgCellHeight		: "Cao",
+DlgCellWordWrap		: "Bọc từ",
+DlgCellWordWrapNotSet	: "<Chưa thiết lập>",
+DlgCellWordWrapYes	: "Đồng ý",
+DlgCellWordWrapNo	: "Không",
+DlgCellHorAlign		: "Canh theo Chiều ngang",
+DlgCellHorAlignNotSet	: "<Chưa thiết lập>",
+DlgCellHorAlignLeft	: "Trái",
+DlgCellHorAlignCenter	: "Giữa",
+DlgCellHorAlignRight: "Phải",
+DlgCellVerAlign		: "Canh theo Chiều dọc",
+DlgCellVerAlignNotSet	: "<Chưa thiết lập>",
+DlgCellVerAlignTop	: "Trên",
+DlgCellVerAlignMiddle	: "Giữa",
+DlgCellVerAlignBottom	: "Dưới",
+DlgCellVerAlignBaseline	: "Baseline",
+DlgCellRowSpan		: "Nối Hàng",
+DlgCellCollSpan		: "Nối Cột",
+DlgCellBackColor	: "Màu nền",
+DlgCellBorderColor	: "Màu viền",
+DlgCellBtnSelect	: "Chọn...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "Find and Replace",	//MISSING
+
+// Find Dialog
+DlgFindTitle		: "Tìm kiếm",
+DlgFindFindBtn		: "Tìm kiếm",
+DlgFindNotFoundMsg	: "Không tìm thấy chuỗi cần tìm.",
+
+// Replace Dialog
+DlgReplaceTitle			: "Thay thế",
+DlgReplaceFindLbl		: "Tìm chuỗi:",
+DlgReplaceReplaceLbl	: "Thay bằng:",
+DlgReplaceCaseChk		: "Phân biệt chữ hoa/thường",
+DlgReplaceReplaceBtn	: "Thay thế",
+DlgReplaceReplAllBtn	: "Thay thế Tất cả",
+DlgReplaceWordChk		: "Đúng toàn bộ từ",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "Các thiết lập bảo mật của trình duyệt không cho phép trình biên tập tự động thực thi lệnh cắt. Hãy sử dụng bàn phím cho lệnh này (Ctrl+X).",
+PasteErrorCopy	: "Các thiết lập bảo mật của trình duyệt không cho phép trình biên tập tự động thực thi lệnh sao chép. Hãy sử dụng bàn phím cho lệnh này (Ctrl+C).",
+
+PasteAsText		: "Dán theo định dạng văn bản thuần",
+PasteFromWord	: "Dán với định dạng Word",
+
+DlgPasteMsg2	: "Hãy dán nội dung vào trong khung bên dưới, sử dụng tổ hợp phím (<STRONG>Ctrl+V</STRONG>) và nhấn vào nút <STRONG>Đồng ý</STRONG>.",
+DlgPasteSec		: "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.",	//MISSING
+DlgPasteIgnoreFont		: "Chấp nhận các định dạng phông",
+DlgPasteRemoveStyles	: "Gỡ bỏ các định dạng Styles",
+DlgPasteCleanBox		: "Xóa nội dung",
+
+// Color Picker
+ColorAutomatic	: "Tự động",
+ColorMoreColors	: "Màu khác...",
+
+// Document Properties
+DocProps		: "Thuộc tính Tài liệu",
+
+// Anchor Dialog
+DlgAnchorTitle		: "Thuộc tính Neo",
+DlgAnchorName		: "Tên của Neo",
+DlgAnchorErrorName	: "Hãy đưa vào tên của Neo",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "Không có trong từ điển",
+DlgSpellChangeTo		: "Chuyển thành",
+DlgSpellBtnIgnore		: "Bỏ qua",
+DlgSpellBtnIgnoreAll	: "Bỏ qua Tất cả",
+DlgSpellBtnReplace		: "Thay thế",
+DlgSpellBtnReplaceAll	: "Thay thế Tất cả",
+DlgSpellBtnUndo			: "Phục hồi lại",
+DlgSpellNoSuggestions	: "- Không đưa ra gợi ý về từ -",
+DlgSpellProgress		: "Đang tiến hành kiểm tra chính tả...",
+DlgSpellNoMispell		: "Hoàn tất kiểm tra chính tả: Không có lỗi chính tả",
+DlgSpellNoChanges		: "Hoàn tất kiểm tra chính tả: Không có từ nào được thay đổi",
+DlgSpellOneChange		: "Hoàn tất kiểm tra chính tả: Một từ đã được thay đổi",
+DlgSpellManyChanges		: "Hoàn tất kiểm tra chính tả: %1 từ đã được thay đổi",
+
+IeSpellDownload			: "Chức năng kiểm tra chính tả chưa được cài đặt. Bạn có muốn tải về ngay bây giờ?",
+
+// Button Dialog
+DlgButtonText		: "Chuỗi hiển thị (Giá trị)",
+DlgButtonType		: "Kiểu",
+DlgButtonTypeBtn	: "Nút Bấm",
+DlgButtonTypeSbm	: "Nút Gửi",
+DlgButtonTypeRst	: "Nút Nhập lại",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "Tên",
+DlgCheckboxValue	: "Giá trị",
+DlgCheckboxSelected	: "Được chọn",
+
+// Form Dialog
+DlgFormName		: "Tên",
+DlgFormAction	: "Hành động",
+DlgFormMethod	: "Phương thức",
+
+// Select Field Dialog
+DlgSelectName		: "Tên",
+DlgSelectValue		: "Giá trị",
+DlgSelectSize		: "Kích cỡ",
+DlgSelectLines		: "dòng",
+DlgSelectChkMulti	: "Cho phép chọn nhiều",
+DlgSelectOpAvail	: "Các tùy chọn có thể sử dụng",
+DlgSelectOpText		: "Văn bản",
+DlgSelectOpValue	: "Giá trị",
+DlgSelectBtnAdd		: "Thêm",
+DlgSelectBtnModify	: "Thay đổi",
+DlgSelectBtnUp		: "Lên",
+DlgSelectBtnDown	: "Xuống",
+DlgSelectBtnSetValue : "Giá trị được chọn",
+DlgSelectBtnDelete	: "Xoá",
+
+// Textarea Dialog
+DlgTextareaName	: "Tên",
+DlgTextareaCols	: "Cột",
+DlgTextareaRows	: "Hàng",
+
+// Text Field Dialog
+DlgTextName			: "Tên",
+DlgTextValue		: "Giá trị",
+DlgTextCharWidth	: "Rộng",
+DlgTextMaxChars		: "Số Ký tự tối đa",
+DlgTextType			: "Kiểu",
+DlgTextTypeText		: "Ký tự",
+DlgTextTypePass		: "Mật khẩu",
+
+// Hidden Field Dialog
+DlgHiddenName	: "Tên",
+DlgHiddenValue	: "Giá trị",
+
+// Bulleted List Dialog
+BulletedListProp	: "Thuộc tính Danh sách không thứ tự",
+NumberedListProp	: "Thuộc tính Danh sách có thứ tự",
+DlgLstStart			: "Bắt đầu",
+DlgLstType			: "Kiểu",
+DlgLstTypeCircle	: "Hình tròn",
+DlgLstTypeDisc		: "Hình đĩa",
+DlgLstTypeSquare	: "Hình vuông",
+DlgLstTypeNumbers	: "Số thứ tự (1, 2, 3)",
+DlgLstTypeLCase		: "Chữ cái thường (a, b, c)",
+DlgLstTypeUCase		: "Chữ cái hoa (A, B, C)",
+DlgLstTypeSRoman	: "Số La Mã thường (i, ii, iii)",
+DlgLstTypeLRoman	: "Số La Mã hoa (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "Toàn thể",
+DlgDocBackTab		: "Nền",
+DlgDocColorsTab		: "Màu sắc và Đường biên",
+DlgDocMetaTab		: "Siêu dữ liệu",
+
+DlgDocPageTitle		: "Tiêu đề Trang",
+DlgDocLangDir		: "Đường dẫn Ngôn ngữ",
+DlgDocLangDirLTR	: "Trái sang Phải (LTR)",
+DlgDocLangDirRTL	: "Phải sang Trái (RTL)",
+DlgDocLangCode		: "Mã Ngôn ngữ",
+DlgDocCharSet		: "Bảng mã ký tự",
+DlgDocCharSetCE		: "Trung Âu",
+DlgDocCharSetCT		: "Tiếng Trung Quốc (Big5)",
+DlgDocCharSetCR		: "Tiếng Kirin",
+DlgDocCharSetGR		: "Tiếng Hy Lạp",
+DlgDocCharSetJP		: "Tiếng Nhật",
+DlgDocCharSetKR		: "Tiếng Hàn",
+DlgDocCharSetTR		: "Tiếng Thổ Nhĩ Kỳ",
+DlgDocCharSetUN		: "Unicode (UTF-8)",
+DlgDocCharSetWE		: "Tây Âu",
+DlgDocCharSetOther	: "Bảng mã ký tự khác",
+
+DlgDocDocType		: "Kiểu Đề mục Tài liệu",
+DlgDocDocTypeOther	: "Kiểu Đề mục Tài liệu khác",
+DlgDocIncXHTML		: "Bao gồm cả định nghĩa XHTML",
+DlgDocBgColor		: "Màu nền",
+DlgDocBgImage		: "URL của Hình ảnh nền",
+DlgDocBgNoScroll	: "Không cuộn nền",
+DlgDocCText			: "Văn bản",
+DlgDocCLink			: "Liên kết",
+DlgDocCVisited		: "Liên kết Đã ghé thăm",
+DlgDocCActive		: "Liên kết Hiện hành",
+DlgDocMargins		: "Đường biên của Trang",
+DlgDocMaTop			: "Trên",
+DlgDocMaLeft		: "Trái",
+DlgDocMaRight		: "Phải",
+DlgDocMaBottom		: "Dưới",
+DlgDocMeIndex		: "Các từ khóa chỉ mục tài liệu (phân cách bởi dấu phẩy)",
+DlgDocMeDescr		: "Mô tả tài liệu",
+DlgDocMeAuthor		: "Tác giả",
+DlgDocMeCopy		: "Bản quyền",
+DlgDocPreview		: "Xem trước",
+
+// Templates Dialog
+Templates			: "Mẫu dựng sẵn",
+DlgTemplatesTitle	: "Nội dung Mẫu dựng sẵn",
+DlgTemplatesSelMsg	: "Hãy chọn Mẫu dựng sẵn để mở trong trình biên tập<br>(nội dung hiện tại sẽ bị mất):",
+DlgTemplatesLoading	: "Đang nạp Danh sách Mẫu dựng sẵn. Vui lòng đợi trong giây lát...",
+DlgTemplatesNoTpl	: "(Không có Mẫu dựng sẵn nào được định nghĩa)",
+DlgTemplatesReplace	: "Thay thế nội dung hiện tại",
+
+// About Dialog
+DlgAboutAboutTab	: "Giới thiệu",
+DlgAboutBrowserInfoTab	: "Thông tin trình duyệt",
+DlgAboutLicenseTab	: "Giấy phép",
+DlgAboutVersion		: "phiên bản",
+DlgAboutInfo		: "Để biết thêm thông tin, hãy truy cập"
+};
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/zh-cn.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/zh-cn.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/zh-cn.js	(revision 1280)
@@ -0,0 +1,516 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Chinese Simplified language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "折叠工具栏",
+ToolbarExpand		: "展开工具栏",
+
+// Toolbar Items and Context Menu
+Save				: "保存",
+NewPage				: "新建",
+Preview				: "预览",
+Cut					: "剪切",
+Copy				: "复制",
+Paste				: "粘贴",
+PasteText			: "粘贴为无格式文本",
+PasteWord			: "从 MS Word 粘贴",
+Print				: "打印",
+SelectAll			: "全选",
+RemoveFormat		: "清除格式",
+InsertLinkLbl		: "超链接",
+InsertLink			: "插入/编辑超链接",
+RemoveLink			: "取消超链接",
+Anchor				: "插入/编辑锚点链接",
+AnchorDelete		: "清除锚点链接",
+InsertImageLbl		: "图象",
+InsertImage			: "插入/编辑图象",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "插入/编辑 Flash",
+InsertTableLbl		: "表格",
+InsertTable			: "插入/编辑表格",
+InsertLineLbl		: "水平线",
+InsertLine			: "插入水平线",
+InsertSpecialCharLbl: "特殊符号",
+InsertSpecialChar	: "插入特殊符号",
+InsertSmileyLbl		: "表情符",
+InsertSmiley		: "插入表情图标",
+About				: "关于 FCKeditor",
+Bold				: "加粗",
+Italic				: "倾斜",
+Underline			: "下划线",
+StrikeThrough		: "删除线",
+Subscript			: "下标",
+Superscript			: "上标",
+LeftJustify			: "左对齐",
+CenterJustify		: "居中对齐",
+RightJustify		: "右对齐",
+BlockJustify		: "两端对齐",
+DecreaseIndent		: "减少缩进量",
+IncreaseIndent		: "增加缩进量",
+Blockquote			: "引用文字",
+Undo				: "撤消",
+Redo				: "重做",
+NumberedListLbl		: "编号列表",
+NumberedList		: "插入/删除编号列表",
+BulletedListLbl		: "项目列表",
+BulletedList		: "插入/删除项目列表",
+ShowTableBorders	: "显示表格边框",
+ShowDetails			: "显示详细资料",
+Style				: "样式",
+FontFormat			: "格式",
+Font				: "字体",
+FontSize			: "大小",
+TextColor			: "文本颜色",
+BGColor				: "背景颜色",
+Source				: "源代码",
+Find				: "查找",
+Replace				: "替换",
+SpellCheck			: "拼写检查",
+UniversalKeyboard	: "软键盘",
+PageBreakLbl		: "分页符",
+PageBreak			: "插入分页符",
+
+Form			: "表单",
+Checkbox		: "复选框",
+RadioButton		: "单选按钮",
+TextField		: "单行文本",
+Textarea		: "多行文本",
+HiddenField		: "隐藏域",
+Button			: "按钮",
+SelectionField	: "列表/菜单",
+ImageButton		: "图像域",
+
+FitWindow		: "全屏编辑",
+ShowBlocks		: "显示区块",
+
+// Context Menu
+EditLink			: "编辑超链接",
+CellCM				: "单元格",
+RowCM				: "行",
+ColumnCM			: "列",
+InsertRowAfter		: "下插入行",
+InsertRowBefore		: "上插入行",
+DeleteRows			: "删除行",
+InsertColumnAfter	: "右插入列",
+InsertColumnBefore	: "左插入列",
+DeleteColumns		: "删除列",
+InsertCellAfter		: "右插入单元格",
+InsertCellBefore	: "左插入单元格",
+DeleteCells			: "删除单元格",
+MergeCells			: "合并单元格",
+MergeRight			: "右合并单元格",
+MergeDown			: "下合并单元格",
+HorizontalSplitCell	: "橫拆分单元格",
+VerticalSplitCell	: "縱拆分单元格",
+TableDelete			: "删除表格",
+CellProperties		: "单元格属性",
+TableProperties		: "表格属性",
+ImageProperties		: "图象属性",
+FlashProperties		: "Flash 属性",
+
+AnchorProp			: "锚点链接属性",
+ButtonProp			: "按钮属性",
+CheckboxProp		: "复选框属性",
+HiddenFieldProp		: "隐藏域属性",
+RadioButtonProp		: "单选按钮属性",
+ImageButtonProp		: "图像域属性",
+TextFieldProp		: "单行文本属性",
+SelectionFieldProp	: "菜单/列表属性",
+TextareaProp		: "多行文本属性",
+FormProp			: "表单属性",
+
+FontFormats			: "普通;已编排格式;地址;标题 1;标题 2;标题 3;标题 4;标题 5;标题 6;段落(DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "正在处理 XHTML，请稍等...",
+Done				: "完成",
+PasteWordConfirm	: "您要粘贴的内容好像是来自 MS Word，是否要清除 MS Word 格式后再粘贴？",
+NotCompatiblePaste	: "该命令需要 Internet Explorer 5.5 或更高版本的支持，是否按常规粘贴进行？",
+UnknownToolbarItem	: "未知工具栏项目 \"%1\"",
+UnknownCommand		: "未知命令名称 \"%1\"",
+NotImplemented		: "命令无法执行",
+UnknownToolbarSet	: "工具栏设置 \"%1\" 不存在",
+NoActiveX			: "浏览器安全设置限制了本编辑器的某些功能。您必须启用安全设置中的“运行 ActiveX 控件和插件”，否则将出现某些错误并缺少功能。",
+BrowseServerBlocked : "无法打开资源浏览器，请确认是否启用了禁止弹出窗口。",
+DialogBlocked		: "无法打开对话框窗口，请确认是否启用了禁止弹出窗口或网页对话框（IE）。",
+
+// Dialogs
+DlgBtnOK			: "确定",
+DlgBtnCancel		: "取消",
+DlgBtnClose			: "关闭",
+DlgBtnBrowseServer	: "浏览服务器",
+DlgAdvancedTag		: "高级",
+DlgOpOther			: "<其它>",
+DlgInfoTab			: "信息",
+DlgAlertUrl			: "请插入 URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<没有设置>",
+DlgGenId			: "ID",
+DlgGenLangDir		: "语言方向",
+DlgGenLangDirLtr	: "从左到右 (LTR)",
+DlgGenLangDirRtl	: "从右到左 (RTL)",
+DlgGenLangCode		: "语言代码",
+DlgGenAccessKey		: "访问键",
+DlgGenName			: "名称",
+DlgGenTabIndex		: "Tab 键次序",
+DlgGenLongDescr		: "详细说明地址",
+DlgGenClass			: "样式类名称",
+DlgGenTitle			: "标题",
+DlgGenContType		: "内容类型",
+DlgGenLinkCharset	: "字符编码",
+DlgGenStyle			: "行内样式",
+
+// Image Dialog
+DlgImgTitle			: "图象属性",
+DlgImgInfoTab		: "图象",
+DlgImgBtnUpload		: "发送到服务器上",
+DlgImgURL			: "源文件",
+DlgImgUpload		: "上传",
+DlgImgAlt			: "替换文本",
+DlgImgWidth			: "宽度",
+DlgImgHeight		: "高度",
+DlgImgLockRatio		: "锁定比例",
+DlgBtnResetSize		: "恢复尺寸",
+DlgImgBorder		: "边框大小",
+DlgImgHSpace		: "水平间距",
+DlgImgVSpace		: "垂直间距",
+DlgImgAlign			: "对齐方式",
+DlgImgAlignLeft		: "左对齐",
+DlgImgAlignAbsBottom: "绝对底边",
+DlgImgAlignAbsMiddle: "绝对居中",
+DlgImgAlignBaseline	: "基线",
+DlgImgAlignBottom	: "底边",
+DlgImgAlignMiddle	: "居中",
+DlgImgAlignRight	: "右对齐",
+DlgImgAlignTextTop	: "文本上方",
+DlgImgAlignTop		: "顶端",
+DlgImgPreview		: "预览",
+DlgImgAlertUrl		: "请输入图象地址",
+DlgImgLinkTab		: "链接",
+
+// Flash Dialog
+DlgFlashTitle		: "Flash 属性",
+DlgFlashChkPlay		: "自动播放",
+DlgFlashChkLoop		: "循环",
+DlgFlashChkMenu		: "启用 Flash 菜单",
+DlgFlashScale		: "缩放",
+DlgFlashScaleAll	: "全部显示",
+DlgFlashScaleNoBorder	: "无边框",
+DlgFlashScaleFit	: "严格匹配",
+
+// Link Dialog
+DlgLnkWindowTitle	: "超链接",
+DlgLnkInfoTab		: "超链接信息",
+DlgLnkTargetTab		: "目标",
+
+DlgLnkType			: "超链接类型",
+DlgLnkTypeURL		: "超链接",
+DlgLnkTypeAnchor	: "页内锚点链接",
+DlgLnkTypeEMail		: "电子邮件",
+DlgLnkProto			: "协议",
+DlgLnkProtoOther	: "<其它>",
+DlgLnkURL			: "地址",
+DlgLnkAnchorSel		: "选择一个锚点",
+DlgLnkAnchorByName	: "按锚点名称",
+DlgLnkAnchorById	: "按锚点 ID",
+DlgLnkNoAnchors		: "(此文档没有可用的锚点)",
+DlgLnkEMail			: "地址",
+DlgLnkEMailSubject	: "主题",
+DlgLnkEMailBody		: "内容",
+DlgLnkUpload		: "上传",
+DlgLnkBtnUpload		: "发送到服务器上",
+
+DlgLnkTarget		: "目标",
+DlgLnkTargetFrame	: "<框架>",
+DlgLnkTargetPopup	: "<弹出窗口>",
+DlgLnkTargetBlank	: "新窗口 (_blank)",
+DlgLnkTargetParent	: "父窗口 (_parent)",
+DlgLnkTargetSelf	: "本窗口 (_self)",
+DlgLnkTargetTop		: "整页 (_top)",
+DlgLnkTargetFrameName	: "目标框架名称",
+DlgLnkPopWinName	: "弹出窗口名称",
+DlgLnkPopWinFeat	: "弹出窗口属性",
+DlgLnkPopResize		: "调整大小",
+DlgLnkPopLocation	: "地址栏",
+DlgLnkPopMenu		: "菜单栏",
+DlgLnkPopScroll		: "滚动条",
+DlgLnkPopStatus		: "状态栏",
+DlgLnkPopToolbar	: "工具栏",
+DlgLnkPopFullScrn	: "全屏 (IE)",
+DlgLnkPopDependent	: "依附 (NS)",
+DlgLnkPopWidth		: "宽",
+DlgLnkPopHeight		: "高",
+DlgLnkPopLeft		: "左",
+DlgLnkPopTop		: "右",
+
+DlnLnkMsgNoUrl		: "请输入超链接地址",
+DlnLnkMsgNoEMail	: "请输入电子邮件地址",
+DlnLnkMsgNoAnchor	: "请选择一个锚点",
+DlnLnkMsgInvPopName	: "弹出窗口名称必须以字母开头，并且不能含有空格。",
+
+// Color Dialog
+DlgColorTitle		: "选择颜色",
+DlgColorBtnClear	: "清除",
+DlgColorHighlight	: "预览",
+DlgColorSelected	: "选择",
+
+// Smiley Dialog
+DlgSmileyTitle		: "插入表情图标",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "选择特殊符号",
+
+// Table Dialog
+DlgTableTitle		: "表格属性",
+DlgTableRows		: "行数",
+DlgTableColumns		: "列数",
+DlgTableBorder		: "边框",
+DlgTableAlign		: "对齐",
+DlgTableAlignNotSet	: "<没有设置>",
+DlgTableAlignLeft	: "左对齐",
+DlgTableAlignCenter	: "居中",
+DlgTableAlignRight	: "右对齐",
+DlgTableWidth		: "宽度",
+DlgTableWidthPx		: "像素",
+DlgTableWidthPc		: "百分比",
+DlgTableHeight		: "高度",
+DlgTableCellSpace	: "间距",
+DlgTableCellPad		: "边距",
+DlgTableCaption		: "标题",
+DlgTableSummary		: "摘要",
+
+// Table Cell Dialog
+DlgCellTitle		: "单元格属性",
+DlgCellWidth		: "宽度",
+DlgCellWidthPx		: "像素",
+DlgCellWidthPc		: "百分比",
+DlgCellHeight		: "高度",
+DlgCellWordWrap		: "自动换行",
+DlgCellWordWrapNotSet	: "<没有设置>",
+DlgCellWordWrapYes	: "是",
+DlgCellWordWrapNo	: "否",
+DlgCellHorAlign		: "水平对齐",
+DlgCellHorAlignNotSet	: "<没有设置>",
+DlgCellHorAlignLeft	: "左对齐",
+DlgCellHorAlignCenter	: "居中",
+DlgCellHorAlignRight: "右对齐",
+DlgCellVerAlign		: "垂直对齐",
+DlgCellVerAlignNotSet	: "<没有设置>",
+DlgCellVerAlignTop	: "顶端",
+DlgCellVerAlignMiddle	: "居中",
+DlgCellVerAlignBottom	: "底部",
+DlgCellVerAlignBaseline	: "基线",
+DlgCellRowSpan		: "纵跨行数",
+DlgCellCollSpan		: "横跨列数",
+DlgCellBackColor	: "背景颜色",
+DlgCellBorderColor	: "边框颜色",
+DlgCellBtnSelect	: "选择...",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "查找和替换",
+
+// Find Dialog
+DlgFindTitle		: "查找",
+DlgFindFindBtn		: "查找",
+DlgFindNotFoundMsg	: "指定文本没有找到。",
+
+// Replace Dialog
+DlgReplaceTitle			: "替换",
+DlgReplaceFindLbl		: "查找:",
+DlgReplaceReplaceLbl	: "替换:",
+DlgReplaceCaseChk		: "区分大小写",
+DlgReplaceReplaceBtn	: "替换",
+DlgReplaceReplAllBtn	: "全部替换",
+DlgReplaceWordChk		: "全字匹配",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "您的浏览器安全设置不允许编辑器自动执行剪切操作，请使用键盘快捷键(Ctrl+X)来完成。",
+PasteErrorCopy	: "您的浏览器安全设置不允许编辑器自动执行复制操作，请使用键盘快捷键(Ctrl+C)来完成。",
+
+PasteAsText		: "粘贴为无格式文本",
+PasteFromWord	: "从 MS Word 粘贴",
+
+DlgPasteMsg2	: "请使用键盘快捷键(<STRONG>Ctrl+V</STRONG>)把内容粘贴到下面的方框里，再按 <STRONG>确定</STRONG>。",
+DlgPasteSec		: "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.",	//MISSING
+DlgPasteIgnoreFont		: "忽略 Font 标签",
+DlgPasteRemoveStyles	: "清理 CSS 样式",
+DlgPasteCleanBox		: "清空上面内容",
+
+// Color Picker
+ColorAutomatic	: "自动",
+ColorMoreColors	: "其它颜色...",
+
+// Document Properties
+DocProps		: "页面属性",
+
+// Anchor Dialog
+DlgAnchorTitle		: "命名锚点",
+DlgAnchorName		: "锚点名称",
+DlgAnchorErrorName	: "请输入锚点名称",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "没有在字典里",
+DlgSpellChangeTo		: "更改为",
+DlgSpellBtnIgnore		: "忽略",
+DlgSpellBtnIgnoreAll	: "全部忽略",
+DlgSpellBtnReplace		: "替换",
+DlgSpellBtnReplaceAll	: "全部替换",
+DlgSpellBtnUndo			: "撤消",
+DlgSpellNoSuggestions	: "- 没有建议 -",
+DlgSpellProgress		: "正在进行拼写检查...",
+DlgSpellNoMispell		: "拼写检查完成：没有发现拼写错误",
+DlgSpellNoChanges		: "拼写检查完成：没有更改任何单词",
+DlgSpellOneChange		: "拼写检查完成：更改了一个单词",
+DlgSpellManyChanges		: "拼写检查完成：更改了 %1 个单词",
+
+IeSpellDownload			: "拼写检查插件还没安装，你是否想现在就下载？",
+
+// Button Dialog
+DlgButtonText		: "标签(值)",
+DlgButtonType		: "类型",
+DlgButtonTypeBtn	: "按钮",
+DlgButtonTypeSbm	: "提交",
+DlgButtonTypeRst	: "重设",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "名称",
+DlgCheckboxValue	: "选定值",
+DlgCheckboxSelected	: "已勾选",
+
+// Form Dialog
+DlgFormName		: "名称",
+DlgFormAction	: "动作",
+DlgFormMethod	: "方法",
+
+// Select Field Dialog
+DlgSelectName		: "名称",
+DlgSelectValue		: "选定",
+DlgSelectSize		: "高度",
+DlgSelectLines		: "行",
+DlgSelectChkMulti	: "允许多选",
+DlgSelectOpAvail	: "列表值",
+DlgSelectOpText		: "标签",
+DlgSelectOpValue	: "值",
+DlgSelectBtnAdd		: "新增",
+DlgSelectBtnModify	: "修改",
+DlgSelectBtnUp		: "上移",
+DlgSelectBtnDown	: "下移",
+DlgSelectBtnSetValue : "设为初始化时选定",
+DlgSelectBtnDelete	: "删除",
+
+// Textarea Dialog
+DlgTextareaName	: "名称",
+DlgTextareaCols	: "字符宽度",
+DlgTextareaRows	: "行数",
+
+// Text Field Dialog
+DlgTextName			: "名称",
+DlgTextValue		: "初始值",
+DlgTextCharWidth	: "字符宽度",
+DlgTextMaxChars		: "最多字符数",
+DlgTextType			: "类型",
+DlgTextTypeText		: "文本",
+DlgTextTypePass		: "密码",
+
+// Hidden Field Dialog
+DlgHiddenName	: "名称",
+DlgHiddenValue	: "初始值",
+
+// Bulleted List Dialog
+BulletedListProp	: "项目列表属性",
+NumberedListProp	: "编号列表属性",
+DlgLstStart			: "开始序号",
+DlgLstType			: "列表类型",
+DlgLstTypeCircle	: "圆圈",
+DlgLstTypeDisc		: "圆点",
+DlgLstTypeSquare	: "方块",
+DlgLstTypeNumbers	: "数字 (1, 2, 3)",
+DlgLstTypeLCase		: "小写字母 (a, b, c)",
+DlgLstTypeUCase		: "大写字母 (A, B, C)",
+DlgLstTypeSRoman	: "小写罗马数字 (i, ii, iii)",
+DlgLstTypeLRoman	: "大写罗马数字 (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "常规",
+DlgDocBackTab		: "背景",
+DlgDocColorsTab		: "颜色和边距",
+DlgDocMetaTab		: "Meta 数据",
+
+DlgDocPageTitle		: "页面标题",
+DlgDocLangDir		: "语言方向",
+DlgDocLangDirLTR	: "从左到右 (LTR)",
+DlgDocLangDirRTL	: "从右到左 (RTL)",
+DlgDocLangCode		: "语言代码",
+DlgDocCharSet		: "字符编码",
+DlgDocCharSetCE		: "中欧",
+DlgDocCharSetCT		: "繁体中文 (Big5)",
+DlgDocCharSetCR		: "西里尔文",
+DlgDocCharSetGR		: "希腊文",
+DlgDocCharSetJP		: "日文",
+DlgDocCharSetKR		: "韩文",
+DlgDocCharSetTR		: "土耳其文",
+DlgDocCharSetUN		: "Unicode (UTF-8)",
+DlgDocCharSetWE		: "西欧",
+DlgDocCharSetOther	: "其它字符编码",
+
+DlgDocDocType		: "文档类型",
+DlgDocDocTypeOther	: "其它文档类型",
+DlgDocIncXHTML		: "包含 XHTML 声明",
+DlgDocBgColor		: "背景颜色",
+DlgDocBgImage		: "背景图像",
+DlgDocBgNoScroll	: "不滚动背景图像",
+DlgDocCText			: "文本",
+DlgDocCLink			: "超链接",
+DlgDocCVisited		: "已访问的超链接",
+DlgDocCActive		: "活动超链接",
+DlgDocMargins		: "页面边距",
+DlgDocMaTop			: "上",
+DlgDocMaLeft		: "左",
+DlgDocMaRight		: "右",
+DlgDocMaBottom		: "下",
+DlgDocMeIndex		: "页面索引关键字 (用半角逗号[,]分隔)",
+DlgDocMeDescr		: "页面说明",
+DlgDocMeAuthor		: "作者",
+DlgDocMeCopy		: "版权",
+DlgDocPreview		: "预览",
+
+// Templates Dialog
+Templates			: "模板",
+DlgTemplatesTitle	: "内容模板",
+DlgTemplatesSelMsg	: "请选择编辑器内容模板<br>(当前内容将会被清除替换):",
+DlgTemplatesLoading	: "正在加载模板列表，请稍等...",
+DlgTemplatesNoTpl	: "(没有模板)",
+DlgTemplatesReplace	: "替换当前内容",
+
+// About Dialog
+DlgAboutAboutTab	: "关于",
+DlgAboutBrowserInfoTab	: "浏览器信息",
+DlgAboutLicenseTab	: "许可证",
+DlgAboutVersion		: "版本",
+DlgAboutInfo		: "要获得更多信息请访问 "
+};
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/zh.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/zh.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/lang/zh.js	(revision 1280)
@@ -0,0 +1,516 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Chinese Traditional language file.
+ */
+
+var FCKLang =
+{
+// Language direction : "ltr" (left to right) or "rtl" (right to left).
+Dir					: "ltr",
+
+ToolbarCollapse		: "隱藏面板",
+ToolbarExpand		: "顯示面板",
+
+// Toolbar Items and Context Menu
+Save				: "儲存",
+NewPage				: "開新檔案",
+Preview				: "預覽",
+Cut					: "剪下",
+Copy				: "複製",
+Paste				: "貼上",
+PasteText			: "貼為純文字格式",
+PasteWord			: "自 Word 貼上",
+Print				: "列印",
+SelectAll			: "全選",
+RemoveFormat		: "清除格式",
+InsertLinkLbl		: "超連結",
+InsertLink			: "插入/編輯超連結",
+RemoveLink			: "移除超連結",
+Anchor				: "插入/編輯錨點",
+AnchorDelete		: "移除錨點",
+InsertImageLbl		: "影像",
+InsertImage			: "插入/編輯影像",
+InsertFlashLbl		: "Flash",
+InsertFlash			: "插入/編輯 Flash",
+InsertTableLbl		: "表格",
+InsertTable			: "插入/編輯表格",
+InsertLineLbl		: "水平線",
+InsertLine			: "插入水平線",
+InsertSpecialCharLbl: "特殊符號",
+InsertSpecialChar	: "插入特殊符號",
+InsertSmileyLbl		: "表情符號",
+InsertSmiley		: "插入表情符號",
+About				: "關於 FCKeditor",
+Bold				: "粗體",
+Italic				: "斜體",
+Underline			: "底線",
+StrikeThrough		: "刪除線",
+Subscript			: "下標",
+Superscript			: "上標",
+LeftJustify			: "靠左對齊",
+CenterJustify		: "置中",
+RightJustify		: "靠右對齊",
+BlockJustify		: "左右對齊",
+DecreaseIndent		: "減少縮排",
+IncreaseIndent		: "增加縮排",
+Blockquote			: "块引用",
+Undo				: "復原",
+Redo				: "重複",
+NumberedListLbl		: "編號清單",
+NumberedList		: "插入/移除編號清單",
+BulletedListLbl		: "項目清單",
+BulletedList		: "插入/移除項目清單",
+ShowTableBorders	: "顯示表格邊框",
+ShowDetails			: "顯示詳細資料",
+Style				: "樣式",
+FontFormat			: "格式",
+Font				: "字體",
+FontSize			: "大小",
+TextColor			: "文字顏色",
+BGColor				: "背景顏色",
+Source				: "原始碼",
+Find				: "尋找",
+Replace				: "取代",
+SpellCheck			: "拼字檢查",
+UniversalKeyboard	: "萬國鍵盤",
+PageBreakLbl		: "分頁符號",
+PageBreak			: "插入分頁符號",
+
+Form			: "表單",
+Checkbox		: "核取方塊",
+RadioButton		: "選項按鈕",
+TextField		: "文字方塊",
+Textarea		: "文字區域",
+HiddenField		: "隱藏欄位",
+Button			: "按鈕",
+SelectionField	: "清單/選單",
+ImageButton		: "影像按鈕",
+
+FitWindow		: "編輯器最大化",
+ShowBlocks		: "顯示區塊",
+
+// Context Menu
+EditLink			: "編輯超連結",
+CellCM				: "儲存格",
+RowCM				: "列",
+ColumnCM			: "欄",
+InsertRowAfter		: "向下插入列",
+InsertRowBefore		: "向上插入列",
+DeleteRows			: "刪除列",
+InsertColumnAfter	: "向右插入欄",
+InsertColumnBefore	: "向左插入欄",
+DeleteColumns		: "刪除欄",
+InsertCellAfter		: "向右插入儲存格",
+InsertCellBefore	: "向左插入儲存格",
+DeleteCells			: "刪除儲存格",
+MergeCells			: "合併儲存格",
+MergeRight			: "向右合併儲存格",
+MergeDown			: "向下合併儲存格",
+HorizontalSplitCell	: "橫向分割儲存格",
+VerticalSplitCell	: "縱向分割儲存格",
+TableDelete			: "刪除表格",
+CellProperties		: "儲存格屬性",
+TableProperties		: "表格屬性",
+ImageProperties		: "影像屬性",
+FlashProperties		: "Flash 屬性",
+
+AnchorProp			: "錨點屬性",
+ButtonProp			: "按鈕屬性",
+CheckboxProp		: "核取方塊屬性",
+HiddenFieldProp		: "隱藏欄位屬性",
+RadioButtonProp		: "選項按鈕屬性",
+ImageButtonProp		: "影像按鈕屬性",
+TextFieldProp		: "文字方塊屬性",
+SelectionFieldProp	: "清單/選單屬性",
+TextareaProp		: "文字區域屬性",
+FormProp			: "表單屬性",
+
+FontFormats			: "一般;已格式化;位址;標題 1;標題 2;標題 3;標題 4;標題 5;標題 6;一般 (DIV)",
+
+// Alerts and Messages
+ProcessingXHTML		: "處理 XHTML 中，請稍候…",
+Done				: "完成",
+PasteWordConfirm	: "您想貼上的文字似乎是自 Word 複製而來，請問您是否要先清除 Word 的格式後再行貼上？",
+NotCompatiblePaste	: "此指令僅在 Internet Explorer 5.5 或以上的版本有效。請問您是否同意不清除格式即貼上？",
+UnknownToolbarItem	: "未知工具列項目 \"%1\"",
+UnknownCommand		: "未知指令名稱 \"%1\"",
+NotImplemented		: "尚未安裝此指令",
+UnknownToolbarSet	: "工具列設定 \"%1\" 不存在",
+NoActiveX			: "瀏覽器的安全性設定限制了本編輯器的某些功能。您必須啟用安全性設定中的「執行ActiveX控制項與外掛程式」項目，否則本編輯器將會出現錯誤並缺少某些功能",
+BrowseServerBlocked : "無法開啟資源瀏覽器，請確定所有快顯視窗封鎖程式是否關閉",
+DialogBlocked		: "無法開啟對話視窗，請確定所有快顯視窗封鎖程式是否關閉",
+
+// Dialogs
+DlgBtnOK			: "確定",
+DlgBtnCancel		: "取消",
+DlgBtnClose			: "關閉",
+DlgBtnBrowseServer	: "瀏覽伺服器端",
+DlgAdvancedTag		: "進階",
+DlgOpOther			: "<其他>",
+DlgInfoTab			: "資訊",
+DlgAlertUrl			: "請插入 URL",
+
+// General Dialogs Labels
+DlgGenNotSet		: "<尚未設定>",
+DlgGenId			: "ID",
+DlgGenLangDir		: "語言方向",
+DlgGenLangDirLtr	: "由左而右 (LTR)",
+DlgGenLangDirRtl	: "由右而左 (RTL)",
+DlgGenLangCode		: "語言代碼",
+DlgGenAccessKey		: "存取鍵",
+DlgGenName			: "名稱",
+DlgGenTabIndex		: "定位順序",
+DlgGenLongDescr		: "詳細 URL",
+DlgGenClass			: "樣式表類別",
+DlgGenTitle			: "標題",
+DlgGenContType		: "內容類型",
+DlgGenLinkCharset	: "連結資源之編碼",
+DlgGenStyle			: "樣式",
+
+// Image Dialog
+DlgImgTitle			: "影像屬性",
+DlgImgInfoTab		: "影像資訊",
+DlgImgBtnUpload		: "上傳至伺服器",
+DlgImgURL			: "URL",
+DlgImgUpload		: "上傳",
+DlgImgAlt			: "替代文字",
+DlgImgWidth			: "寬度",
+DlgImgHeight		: "高度",
+DlgImgLockRatio		: "等比例",
+DlgBtnResetSize		: "重設為原大小",
+DlgImgBorder		: "邊框",
+DlgImgHSpace		: "水平距離",
+DlgImgVSpace		: "垂直距離",
+DlgImgAlign			: "對齊",
+DlgImgAlignLeft		: "靠左對齊",
+DlgImgAlignAbsBottom: "絕對下方",
+DlgImgAlignAbsMiddle: "絕對中間",
+DlgImgAlignBaseline	: "基準線",
+DlgImgAlignBottom	: "靠下對齊",
+DlgImgAlignMiddle	: "置中對齊",
+DlgImgAlignRight	: "靠右對齊",
+DlgImgAlignTextTop	: "文字上方",
+DlgImgAlignTop		: "靠上對齊",
+DlgImgPreview		: "預覽",
+DlgImgAlertUrl		: "請輸入影像 URL",
+DlgImgLinkTab		: "超連結",
+
+// Flash Dialog
+DlgFlashTitle		: "Flash 屬性",
+DlgFlashChkPlay		: "自動播放",
+DlgFlashChkLoop		: "重複",
+DlgFlashChkMenu		: "開啟選單",
+DlgFlashScale		: "縮放",
+DlgFlashScaleAll	: "全部顯示",
+DlgFlashScaleNoBorder	: "無邊框",
+DlgFlashScaleFit	: "精確符合",
+
+// Link Dialog
+DlgLnkWindowTitle	: "超連結",
+DlgLnkInfoTab		: "超連結資訊",
+DlgLnkTargetTab		: "目標",
+
+DlgLnkType			: "超連接類型",
+DlgLnkTypeURL		: "URL",
+DlgLnkTypeAnchor	: "本頁錨點",
+DlgLnkTypeEMail		: "電子郵件",
+DlgLnkProto			: "通訊協定",
+DlgLnkProtoOther	: "<其他>",
+DlgLnkURL			: "URL",
+DlgLnkAnchorSel		: "請選擇錨點",
+DlgLnkAnchorByName	: "依錨點名稱",
+DlgLnkAnchorById	: "依元件 ID",
+DlgLnkNoAnchors		: "(本文件尚無可用之錨點)",
+DlgLnkEMail			: "電子郵件",
+DlgLnkEMailSubject	: "郵件主旨",
+DlgLnkEMailBody		: "郵件內容",
+DlgLnkUpload		: "上傳",
+DlgLnkBtnUpload		: "傳送至伺服器",
+
+DlgLnkTarget		: "目標",
+DlgLnkTargetFrame	: "<框架>",
+DlgLnkTargetPopup	: "<快顯視窗>",
+DlgLnkTargetBlank	: "新視窗 (_blank)",
+DlgLnkTargetParent	: "父視窗 (_parent)",
+DlgLnkTargetSelf	: "本視窗 (_self)",
+DlgLnkTargetTop		: "最上層視窗 (_top)",
+DlgLnkTargetFrameName	: "目標框架名稱",
+DlgLnkPopWinName	: "快顯視窗名稱",
+DlgLnkPopWinFeat	: "快顯視窗屬性",
+DlgLnkPopResize		: "可調整大小",
+DlgLnkPopLocation	: "網址列",
+DlgLnkPopMenu		: "選單列",
+DlgLnkPopScroll		: "捲軸",
+DlgLnkPopStatus		: "狀態列",
+DlgLnkPopToolbar	: "工具列",
+DlgLnkPopFullScrn	: "全螢幕 (IE)",
+DlgLnkPopDependent	: "從屬 (NS)",
+DlgLnkPopWidth		: "寬",
+DlgLnkPopHeight		: "高",
+DlgLnkPopLeft		: "左",
+DlgLnkPopTop		: "右",
+
+DlnLnkMsgNoUrl		: "請輸入欲連結的 URL",
+DlnLnkMsgNoEMail	: "請輸入電子郵件位址",
+DlnLnkMsgNoAnchor	: "請選擇錨點",
+DlnLnkMsgInvPopName	: "快顯名稱必須以「英文字母」為開頭，且不得含有空白",
+
+// Color Dialog
+DlgColorTitle		: "請選擇顏色",
+DlgColorBtnClear	: "清除",
+DlgColorHighlight	: "預覽",
+DlgColorSelected	: "選擇",
+
+// Smiley Dialog
+DlgSmileyTitle		: "插入表情符號",
+
+// Special Character Dialog
+DlgSpecialCharTitle	: "請選擇特殊符號",
+
+// Table Dialog
+DlgTableTitle		: "表格屬性",
+DlgTableRows		: "列數",
+DlgTableColumns		: "欄數",
+DlgTableBorder		: "邊框",
+DlgTableAlign		: "對齊",
+DlgTableAlignNotSet	: "<未設定>",
+DlgTableAlignLeft	: "靠左對齊",
+DlgTableAlignCenter	: "置中",
+DlgTableAlignRight	: "靠右對齊",
+DlgTableWidth		: "寬度",
+DlgTableWidthPx		: "像素",
+DlgTableWidthPc		: "百分比",
+DlgTableHeight		: "高度",
+DlgTableCellSpace	: "間距",
+DlgTableCellPad		: "內距",
+DlgTableCaption		: "標題",
+DlgTableSummary		: "摘要",
+
+// Table Cell Dialog
+DlgCellTitle		: "儲存格屬性",
+DlgCellWidth		: "寬度",
+DlgCellWidthPx		: "像素",
+DlgCellWidthPc		: "百分比",
+DlgCellHeight		: "高度",
+DlgCellWordWrap		: "自動換行",
+DlgCellWordWrapNotSet	: "<尚未設定>",
+DlgCellWordWrapYes	: "是",
+DlgCellWordWrapNo	: "否",
+DlgCellHorAlign		: "水平對齊",
+DlgCellHorAlignNotSet	: "<尚未設定>",
+DlgCellHorAlignLeft	: "靠左對齊",
+DlgCellHorAlignCenter	: "置中",
+DlgCellHorAlignRight: "靠右對齊",
+DlgCellVerAlign		: "垂直對齊",
+DlgCellVerAlignNotSet	: "<尚未設定>",
+DlgCellVerAlignTop	: "靠上對齊",
+DlgCellVerAlignMiddle	: "置中",
+DlgCellVerAlignBottom	: "靠下對齊",
+DlgCellVerAlignBaseline	: "基準線",
+DlgCellRowSpan		: "合併列數",
+DlgCellCollSpan		: "合併欄数",
+DlgCellBackColor	: "背景顏色",
+DlgCellBorderColor	: "邊框顏色",
+DlgCellBtnSelect	: "請選擇…",
+
+// Find and Replace Dialog
+DlgFindAndReplaceTitle	: "尋找與取代",
+
+// Find Dialog
+DlgFindTitle		: "尋找",
+DlgFindFindBtn		: "尋找",
+DlgFindNotFoundMsg	: "未找到指定的文字。",
+
+// Replace Dialog
+DlgReplaceTitle			: "取代",
+DlgReplaceFindLbl		: "尋找:",
+DlgReplaceReplaceLbl	: "取代:",
+DlgReplaceCaseChk		: "大小寫須相符",
+DlgReplaceReplaceBtn	: "取代",
+DlgReplaceReplAllBtn	: "全部取代",
+DlgReplaceWordChk		: "全字相符",
+
+// Paste Operations / Dialog
+PasteErrorCut	: "瀏覽器的安全性設定不允許編輯器自動執行剪下動作。請使用快捷鍵 (Ctrl+X) 剪下。",
+PasteErrorCopy	: "瀏覽器的安全性設定不允許編輯器自動執行複製動作。請使用快捷鍵 (Ctrl+C) 複製。",
+
+PasteAsText		: "貼為純文字格式",
+PasteFromWord	: "自 Word 貼上",
+
+DlgPasteMsg2	: "請使用快捷鍵 (<strong>Ctrl+V</strong>) 貼到下方區域中並按下 <strong>確定</strong>",
+DlgPasteSec		: "因為瀏覽器的安全性設定，本編輯器無法直接存取您的剪貼簿資料，請您自行在本視窗進行貼上動作。",
+DlgPasteIgnoreFont		: "移除字型設定",
+DlgPasteRemoveStyles	: "移除樣式設定",
+DlgPasteCleanBox		: "清除文字區域",
+
+// Color Picker
+ColorAutomatic	: "自動",
+ColorMoreColors	: "更多顏色…",
+
+// Document Properties
+DocProps		: "文件屬性",
+
+// Anchor Dialog
+DlgAnchorTitle		: "命名錨點",
+DlgAnchorName		: "錨點名稱",
+DlgAnchorErrorName	: "請輸入錨點名稱",
+
+// Speller Pages Dialog
+DlgSpellNotInDic		: "不在字典中",
+DlgSpellChangeTo		: "更改為",
+DlgSpellBtnIgnore		: "忽略",
+DlgSpellBtnIgnoreAll	: "全部忽略",
+DlgSpellBtnReplace		: "取代",
+DlgSpellBtnReplaceAll	: "全部取代",
+DlgSpellBtnUndo			: "復原",
+DlgSpellNoSuggestions	: "- 無建議值 -",
+DlgSpellProgress		: "進行拼字檢查中…",
+DlgSpellNoMispell		: "拼字檢查完成：未發現拼字錯誤",
+DlgSpellNoChanges		: "拼字檢查完成：未更改任何單字",
+DlgSpellOneChange		: "拼字檢查完成：更改了 1 個單字",
+DlgSpellManyChanges		: "拼字檢查完成：更改了 %1 個單字",
+
+IeSpellDownload			: "尚未安裝拼字檢查元件。您是否想要現在下載？",
+
+// Button Dialog
+DlgButtonText		: "顯示文字 (值)",
+DlgButtonType		: "類型",
+DlgButtonTypeBtn	: "按鈕 (Button)",
+DlgButtonTypeSbm	: "送出 (Submit)",
+DlgButtonTypeRst	: "重設 (Reset)",
+
+// Checkbox and Radio Button Dialogs
+DlgCheckboxName		: "名稱",
+DlgCheckboxValue	: "選取值",
+DlgCheckboxSelected	: "已選取",
+
+// Form Dialog
+DlgFormName		: "名稱",
+DlgFormAction	: "動作",
+DlgFormMethod	: "方法",
+
+// Select Field Dialog
+DlgSelectName		: "名稱",
+DlgSelectValue		: "選取值",
+DlgSelectSize		: "大小",
+DlgSelectLines		: "行",
+DlgSelectChkMulti	: "可多選",
+DlgSelectOpAvail	: "可用選項",
+DlgSelectOpText		: "顯示文字",
+DlgSelectOpValue	: "值",
+DlgSelectBtnAdd		: "新增",
+DlgSelectBtnModify	: "修改",
+DlgSelectBtnUp		: "上移",
+DlgSelectBtnDown	: "下移",
+DlgSelectBtnSetValue : "設為預設值",
+DlgSelectBtnDelete	: "刪除",
+
+// Textarea Dialog
+DlgTextareaName	: "名稱",
+DlgTextareaCols	: "字元寬度",
+DlgTextareaRows	: "列數",
+
+// Text Field Dialog
+DlgTextName			: "名稱",
+DlgTextValue		: "值",
+DlgTextCharWidth	: "字元寬度",
+DlgTextMaxChars		: "最多字元數",
+DlgTextType			: "類型",
+DlgTextTypeText		: "文字",
+DlgTextTypePass		: "密碼",
+
+// Hidden Field Dialog
+DlgHiddenName	: "名稱",
+DlgHiddenValue	: "值",
+
+// Bulleted List Dialog
+BulletedListProp	: "項目清單屬性",
+NumberedListProp	: "編號清單屬性",
+DlgLstStart			: "起始編號",
+DlgLstType			: "清單類型",
+DlgLstTypeCircle	: "圓圈",
+DlgLstTypeDisc		: "圓點",
+DlgLstTypeSquare	: "方塊",
+DlgLstTypeNumbers	: "數字 (1, 2, 3)",
+DlgLstTypeLCase		: "小寫字母 (a, b, c)",
+DlgLstTypeUCase		: "大寫字母 (A, B, C)",
+DlgLstTypeSRoman	: "小寫羅馬數字 (i, ii, iii)",
+DlgLstTypeLRoman	: "大寫羅馬數字 (I, II, III)",
+
+// Document Properties Dialog
+DlgDocGeneralTab	: "一般",
+DlgDocBackTab		: "背景",
+DlgDocColorsTab		: "顯色與邊界",
+DlgDocMetaTab		: "Meta 資料",
+
+DlgDocPageTitle		: "頁面標題",
+DlgDocLangDir		: "語言方向",
+DlgDocLangDirLTR	: "由左而右 (LTR)",
+DlgDocLangDirRTL	: "由右而左 (RTL)",
+DlgDocLangCode		: "語言代碼",
+DlgDocCharSet		: "字元編碼",
+DlgDocCharSetCE		: "中歐語系",
+DlgDocCharSetCT		: "正體中文 (Big5)",
+DlgDocCharSetCR		: "斯拉夫文",
+DlgDocCharSetGR		: "希臘文",
+DlgDocCharSetJP		: "日文",
+DlgDocCharSetKR		: "韓文",
+DlgDocCharSetTR		: "土耳其文",
+DlgDocCharSetUN		: "Unicode (UTF-8)",
+DlgDocCharSetWE		: "西歐語系",
+DlgDocCharSetOther	: "其他字元編碼",
+
+DlgDocDocType		: "文件類型",
+DlgDocDocTypeOther	: "其他文件類型",
+DlgDocIncXHTML		: "包含 XHTML 定義",
+DlgDocBgColor		: "背景顏色",
+DlgDocBgImage		: "背景影像",
+DlgDocBgNoScroll	: "浮水印",
+DlgDocCText			: "文字",
+DlgDocCLink			: "超連結",
+DlgDocCVisited		: "已瀏覽過的超連結",
+DlgDocCActive		: "作用中的超連結",
+DlgDocMargins		: "頁面邊界",
+DlgDocMaTop			: "上",
+DlgDocMaLeft		: "左",
+DlgDocMaRight		: "右",
+DlgDocMaBottom		: "下",
+DlgDocMeIndex		: "文件索引關鍵字 (用半形逗號[,]分隔)",
+DlgDocMeDescr		: "文件說明",
+DlgDocMeAuthor		: "作者",
+DlgDocMeCopy		: "版權所有",
+DlgDocPreview		: "預覽",
+
+// Templates Dialog
+Templates			: "樣版",
+DlgTemplatesTitle	: "內容樣版",
+DlgTemplatesSelMsg	: "請選擇欲開啟的樣版<br> (原有的內容將會被清除):",
+DlgTemplatesLoading	: "讀取樣版清單中，請稍候…",
+DlgTemplatesNoTpl	: "(無樣版)",
+DlgTemplatesReplace	: "取代原有內容",
+
+// About Dialog
+DlgAboutAboutTab	: "關於",
+DlgAboutBrowserInfoTab	: "瀏覽器資訊",
+DlgAboutLicenseTab	: "許可證",
+DlgAboutVersion		: "版本",
+DlgAboutInfo		: "想獲得更多資訊請至 "
+};
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/plugins/autogrow/fckplugin.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/plugins/autogrow/fckplugin.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/plugins/autogrow/fckplugin.js	(revision 1280)
@@ -0,0 +1,92 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Plugin: automatically resizes the editor until a configurable maximun
+ * height (FCKConfig.AutoGrowMax), based on its contents.
+ */
+
+var FCKAutoGrow_Min = window.frameElement.offsetHeight ;
+
+function FCKAutoGrow_Check()
+{
+	var oInnerDoc = FCK.EditorDocument ;
+
+	var iFrameHeight, iInnerHeight ;
+
+	if ( FCKBrowserInfo.IsIE )
+	{
+		iFrameHeight = FCK.EditorWindow.frameElement.offsetHeight ;
+		iInnerHeight = oInnerDoc.body.scrollHeight ;
+	}
+	else
+	{
+		iFrameHeight = FCK.EditorWindow.innerHeight ;
+		iInnerHeight = oInnerDoc.body.offsetHeight ;
+	}
+
+	var iDiff = iInnerHeight - iFrameHeight ;
+
+	if ( iDiff != 0 )
+	{
+		var iMainFrameSize = window.frameElement.offsetHeight ;
+
+		if ( iDiff > 0 && iMainFrameSize < FCKConfig.AutoGrowMax )
+		{
+			iMainFrameSize += iDiff ;
+			if ( iMainFrameSize > FCKConfig.AutoGrowMax )
+				iMainFrameSize = FCKConfig.AutoGrowMax ;
+		}
+		else if ( iDiff < 0 && iMainFrameSize > FCKAutoGrow_Min )
+		{
+			iMainFrameSize += iDiff ;
+			if ( iMainFrameSize < FCKAutoGrow_Min )
+				iMainFrameSize = FCKAutoGrow_Min ;
+		}
+		else
+			return ;
+
+		window.frameElement.height = iMainFrameSize ;
+	}
+}
+
+FCK.AttachToOnSelectionChange( FCKAutoGrow_Check ) ;
+
+function FCKAutoGrow_SetListeners()
+{
+	if ( FCK.EditMode != FCK_EDITMODE_WYSIWYG )
+		return ;
+
+	FCK.EditorWindow.attachEvent( 'onscroll', FCKAutoGrow_Check ) ;
+	FCK.EditorDocument.attachEvent( 'onkeyup', FCKAutoGrow_Check ) ;
+}
+
+if ( FCKBrowserInfo.IsIE )
+{
+//	FCKAutoGrow_SetListeners() ;
+	FCK.Events.AttachEvent( 'OnAfterSetHTML', FCKAutoGrow_SetListeners ) ;
+}
+
+function FCKAutoGrow_CheckEditorStatus( sender, status )
+{
+	if ( status == FCK_STATUS_COMPLETE )
+		FCKAutoGrow_Check() ;
+}
+
+FCK.Events.AttachEvent( 'OnStatusChange', FCKAutoGrow_CheckEditorStatus ) ;
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/plugins/bbcode/_sample/sample.config.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/plugins/bbcode/_sample/sample.config.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/plugins/bbcode/_sample/sample.config.js	(revision 1280)
@@ -0,0 +1,26 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Sample custom configuration settings used by the BBCode plugin. It simply
+ * loads the plugin. All the rest is done by the plugin itself.
+ */
+
+// Add the BBCode plugin.
+FCKConfig.Plugins.Add( 'bbcode' ) ;
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/plugins/bbcode/_sample/sample.html
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/plugins/bbcode/_sample/sample.html	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/plugins/bbcode/_sample/sample.html	(revision 1280)
@@ -0,0 +1,67 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Sample page.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+	<title>FCKeditor - BBCode Sample</title>
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+	<meta name="robots" content="noindex, nofollow" />
+	<link href="../../../../_samples/sample.css" rel="stylesheet" type="text/css" />
+	<script type="text/javascript" src="../../../../fckeditor.js"></script>
+</head>
+<body>
+	<h1>
+		FCKeditor - BBCode Sample</h1>
+	<p>
+		This is a sample of custom Data Processor implementation for (very) basic BBCode
+		syntax. Only <strong>[b]</strong>, <strong>[i]</strong>, <strong>[u]</strong> and
+		<strong>[url]</strong> may be used. It may be extended, but this is out of this
+		sample purpose.
+	</p>
+	<p>
+		Note that the input and output of the editor is not HTML, but BBCode
+	</p>
+	<hr />
+	<form action="../../../../_samples/html/sampleposteddata.asp" method="post" target="_blank">
+		<script type="text/javascript">
+<!--
+// Automatically calculates the editor base path based on the _samples directory.
+// This is usefull only for these samples. A real application should use something like this:
+// oFCKeditor.BasePath = '/fckeditor/' ;	// '/fckeditor/' is the default value.
+var sBasePath = document.location.pathname.substring(0,document.location.pathname.lastIndexOf('editor')) ;
+
+var oFCKeditor = new FCKeditor( 'FCKeditor1' ) ;
+oFCKeditor.BasePath	= sBasePath ;
+
+// Set the custom configurations file path (in this way the original file is mantained).
+oFCKeditor.Config['CustomConfigurationsPath'] = sBasePath + 'editor/plugins/bbcode/_sample/sample.config.js' ;
+
+oFCKeditor.Value = 'This is some [b]sample text[/b]. You are using [url=http://www.fckeditor.net/]FCKeditor[/url].' ;
+oFCKeditor.Create() ;
+//-->
+		</script>
+		<br />
+		<input type="submit" value="Submit" />
+	</form>
+</body>
+</html>
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/plugins/bbcode/fckplugin.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/plugins/bbcode/fckplugin.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/plugins/bbcode/fckplugin.js	(revision 1280)
@@ -0,0 +1,123 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This is a sample implementation for a custom Data Processor for basic BBCode.
+ */
+
+FCK.DataProcessor =
+{
+	/*
+	 * Returns a string representing the HTML format of "data". The returned
+	 * value will be loaded in the editor.
+	 * The HTML must be from <html> to </html>, eventually including
+	 * the DOCTYPE.
+	 *     @param {String} data The data to be converted in the
+	 *            DataProcessor specific format.
+	 */
+	ConvertToHtml : function( data )
+	{
+		// Convert < and > to their HTML entities.
+        data = data.replace( /</g, '&lt;' ) ;
+        data = data.replace( />/g, '&gt;' ) ;
+
+        // Convert line breaks to <br>.
+        data = data.replace( /(?:\r\n|\n|\r)/g, '<br>' ) ;
+
+        // [url]
+        data = data.replace( /\[url\](.+?)\[\/url]/gi, '<a href="$1">$1</a>' ) ;
+        data = data.replace( /\[url\=([^\]]+)](.+?)\[\/url]/gi, '<a href="$1">$2</a>' ) ;
+
+        // [b]
+        data = data.replace( /\[b\](.+?)\[\/b]/gi, '<b>$1</b>' ) ;
+
+        // [i]
+        data = data.replace( /\[i\](.+?)\[\/i]/gi, '<i>$1</i>' ) ;
+
+        // [u]
+        data = data.replace( /\[u\](.+?)\[\/u]/gi, '<u>$1</u>' ) ;
+
+		return '<html><head><title></title></head><body>' + data + '</body></html>' ;
+	},
+
+	/*
+	 * Converts a DOM (sub-)tree to a string in the data format.
+	 *     @param {Object} rootNode The node that contains the DOM tree to be
+	 *            converted to the data format.
+	 *     @param {Boolean} excludeRoot Indicates that the root node must not
+	 *            be included in the conversion, only its children.
+	 *     @param {Boolean} format Indicates that the data must be formatted
+	 *            for human reading. Not all Data Processors may provide it.
+	 */
+	ConvertToDataFormat : function( rootNode, excludeRoot, ignoreIfEmptyParagraph, format )
+	{
+		var data = rootNode.innerHTML ;
+
+		// Convert <br> to line breaks.
+		data = data.replace( /<br(?=[ \/>]).*?>/gi, '\r\n') ;
+
+		// [url]
+		data = data.replace( /<a .*?href=(["'])(.+?)\1.*?>(.+?)<\/a>/gi, '[url=$2]$3[/url]') ;
+
+		// [b]
+		data = data.replace( /<(?:b|strong)>/gi, '[b]') ;
+		data = data.replace( /<\/(?:b|strong)>/gi, '[/b]') ;
+
+		// [i]
+		data = data.replace( /<(?:i|em)>/gi, '[i]') ;
+		data = data.replace( /<\/(?:i|em)>/gi, '[/i]') ;
+
+		// [u]
+		data = data.replace( /<u>/gi, '[u]') ;
+		data = data.replace( /<\/u>/gi, '[/u]') ;
+
+		// Remove remaining tags.
+		data = data.replace( /<[^>]+>/g, '') ;
+
+		return data ;
+	},
+
+	/*
+	 * Makes any necessary changes to a piece of HTML for insertion in the
+	 * editor selection position.
+	 *     @param {String} html The HTML to be fixed.
+	 */
+	FixHtml : function( html )
+	{
+		return html ;
+	}
+} ;
+
+// This Data Processor doesn't support <p>, so let's use <br>.
+FCKConfig.EnterMode = 'br' ;
+
+// To avoid pasting invalid markup (which is discarded in any case), let's
+// force pasting to plain text.
+FCKConfig.ForcePasteAsPlainText	= true ;
+
+// Rename the "Source" buttom to "BBCode".
+FCKToolbarItems.RegisterItem( 'Source', new FCKToolbarButton( 'Source', 'BBCode', null, FCK_TOOLBARITEM_ICONTEXT, true, true, 1 ) ) ;
+
+// Let's enforce the toolbar to the limits of this Data Processor. A custom
+// toolbar set may be defined in the configuration file with more or less entries.
+FCKConfig.ToolbarSets["Default"] = [
+	['Source'],
+	['Bold','Italic','Underline','-','Link'],
+	['About']
+] ;
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/plugins/dragresizetable/fckplugin.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/plugins/dragresizetable/fckplugin.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/plugins/dragresizetable/fckplugin.js	(revision 1280)
@@ -0,0 +1,503 @@
+﻿var FCKDragTableHandler =
+{
+	"_DragState" : 0,
+	"_LeftCell" : null,
+	"_RightCell" : null,
+	"_MouseMoveMode" : 0,	// 0 - find candidate cells for resizing, 1 - drag to resize
+	"_ResizeBar" : null,
+	"_OriginalX" : null,
+	"_MinimumX" : null,
+	"_MaximumX" : null,
+	"_LastX" : null,
+	"_TableMap" : null,
+	"_IsInsideNode" : function( w, domNode, pos )
+	{
+		var myCoords = FCKTools.GetWindowPosition( w, domNode ) ;
+		var xMin = myCoords.x ;
+		var yMin = myCoords.y ;
+		var xMax = parseInt( xMin, 10 ) + parseInt( domNode.offsetWidth, 10 ) ;
+		var yMax = parseInt( yMin, 10 ) + parseInt( domNode.offsetHeight, 10 ) ;
+		if ( pos.x >= xMin && pos.x <= xMax && pos.y >= yMin && pos.y <= yMax )
+			return true;
+		return false;
+	},
+	"_GetBorderCells" : function( w, tableNode, tableMap, mouse )
+	{
+		// Enumerate all the cells in the table.
+		var cells = [] ;
+		for ( var i = 0 ; i < tableNode.rows.length ; i++ )
+		{
+			var r = tableNode.rows[i] ;
+			for ( var j = 0 ; j < r.cells.length ; j++ )
+				cells.push( r.cells[j] ) ;
+		}
+
+		if ( cells.length < 1 )
+			return null ;
+
+		// Get the cells whose right or left border is nearest to the mouse cursor's x coordinate.
+		var minRxDist = null ;
+		var lxDist = null ;
+		var minYDist = null ;
+		var rbCell = null ;
+		var lbCell = null ;
+		for ( var i = 0 ; i < cells.length ; i++ )
+		{
+			var pos = FCKTools.GetWindowPosition( w, cells[i] ) ;
+			var rightX = pos.x + parseInt( cells[i].clientWidth, 10 ) ;
+			var rxDist = mouse.x - rightX ;
+			var yDist = mouse.y - ( pos.y + ( cells[i].clientHeight / 2 ) ) ;
+			if ( minRxDist == null ||
+					( Math.abs( rxDist ) <= Math.abs( minRxDist ) &&
+					  ( minYDist == null || Math.abs( yDist ) <= Math.abs( minYDist ) ) ) )
+			{
+				minRxDist = rxDist ;
+				minYDist = yDist ;
+				rbCell = cells[i] ;
+			}
+		}
+		/*
+		var rowNode = FCKTools.GetElementAscensor( rbCell, "tr" ) ;
+		var cellIndex = rbCell.cellIndex + 1 ;
+		if ( cellIndex >= rowNode.cells.length )
+			return null ;
+		lbCell = rowNode.cells.item( cellIndex ) ;
+		*/
+		var rowIdx = rbCell.parentNode.rowIndex ;
+		var colIdx = FCKTableHandler._GetCellIndexSpan( tableMap, rowIdx, rbCell ) ;
+		var colSpan = isNaN( rbCell.colSpan ) ? 1 : rbCell.colSpan ;
+		lbCell = tableMap[rowIdx][colIdx + colSpan] ;
+
+		if ( ! lbCell )
+			return null ;
+
+		// Abort if too far from the border.
+		lxDist = mouse.x - FCKTools.GetWindowPosition( w, lbCell ).x ;
+		if ( lxDist < 0 && minRxDist < 0 && minRxDist < -2 )
+			return null ;
+		if ( lxDist > 0 && minRxDist > 0 && lxDist > 3 )
+			return null ;
+
+		return { "leftCell" : rbCell, "rightCell" : lbCell } ;
+	},
+	"_GetResizeBarPosition" : function()
+	{
+		var row = FCKTools.GetElementAscensor( this._RightCell, "tr" ) ;
+		return FCKTableHandler._GetCellIndexSpan( this._TableMap, row.rowIndex, this._RightCell ) ;
+	},
+	"_ResizeBarMouseDownListener" : function( evt )
+	{
+		if ( ! evt )
+			evt = window.event ;
+		if ( FCKDragTableHandler._LeftCell )
+			FCKDragTableHandler._MouseMoveMode = 1 ;
+		if ( FCKBrowserInfo.IsIE )
+			FCKDragTableHandler._ResizeBar.filters.item("DXImageTransform.Microsoft.Alpha").opacity = 50 ;
+		else
+			FCKDragTableHandler._ResizeBar.style.opacity = 0.5 ;
+		FCKDragTableHandler._OriginalX = evt.clientX ;
+
+		// Calculate maximum and minimum x-coordinate delta.
+		var borderIndex = FCKDragTableHandler._GetResizeBarPosition() ;
+		var offset = FCKTools.GetDocumentPosition( window, FCK.EditingArea.IFrame ) ;
+		var table = FCKTools.GetElementAscensor( FCKDragTableHandler._LeftCell, "table" );
+		var minX = null ;
+		var maxX = null ;
+		for ( var r = 0 ; r < FCKDragTableHandler._TableMap.length ; r++ )
+		{
+			var leftCell = FCKDragTableHandler._TableMap[r][borderIndex - 1] ;
+			var rightCell = FCKDragTableHandler._TableMap[r][borderIndex] ;
+			var leftPosition = FCKTools.GetWindowPosition( FCK.EditorWindow, leftCell ) ;
+			var rightPosition = FCKTools.GetWindowPosition( FCK.EditorWindow, rightCell ) ;
+			var leftPadding = FCKDragTableHandler._GetCellPadding( table, leftCell ) ;
+			var rightPadding = FCKDragTableHandler._GetCellPadding( table, rightCell ) ;
+			if ( minX == null || leftPosition.x + leftPadding > minX )
+				minX = leftPosition.x + leftPadding ;
+			if ( maxX == null || rightPosition.x + rightCell.clientWidth - rightPadding < maxX )
+				maxX = rightPosition.x + rightCell.clientWidth - rightPadding ;
+		}
+
+		FCKDragTableHandler._MinimumX = minX + offset.x ;
+		FCKDragTableHandler._MaximumX = maxX + offset.x ;
+		FCKDragTableHandler._LastX = null ;
+	},
+	"_ResizeBarMouseUpListener" : function( evt )
+	{
+		if ( ! evt )
+			evt = window.event ;
+		FCKDragTableHandler._MouseMoveMode = 0 ;
+		FCKDragTableHandler._HideResizeBar() ;
+
+		if ( FCKDragTableHandler._LastX == null )
+			return ;
+
+		// Calculate the delta value.
+		var deltaX = FCKDragTableHandler._LastX - FCKDragTableHandler._OriginalX ;
+
+		// Then, build an array of current column width values.
+		// This algorithm can be very slow if the cells have insane colSpan values. (e.g. colSpan=1000).
+		var table = FCKTools.GetElementAscensor( FCKDragTableHandler._LeftCell, "table" ) ;
+		var colArray = [] ;
+		var tableMap = FCKDragTableHandler._TableMap ;
+		for ( var i = 0 ; i < tableMap.length ; i++ )
+		{
+			for ( var j = 0 ; j < tableMap[i].length ; j++ )
+			{
+				var cell = tableMap[i][j] ;
+				var width = FCKDragTableHandler._GetCellWidth( table, cell ) ;
+				var colSpan = isNaN( cell.colSpan) ? 1 : cell.colSpan ;
+				if ( colArray.length <= j )
+					colArray.push( { width : width / colSpan, colSpan : colSpan } ) ;
+				else
+				{
+					var guessItem = colArray[j] ;
+					if ( guessItem.colSpan > colSpan )
+					{
+						guessItem.width = width / colSpan ;
+						guessItem.colSpan = colSpan ;
+					}
+				}
+			}
+		}
+
+		// Find out the equivalent column index of the two cells selected for resizing.
+		colIndex = FCKDragTableHandler._GetResizeBarPosition() ;
+
+		// Note that colIndex must be at least 1 here, so it's safe to subtract 1 from it.
+		colIndex-- ;
+
+		// Modify the widths in the colArray according to the mouse coordinate delta value.
+		colArray[colIndex].width += deltaX ;
+		colArray[colIndex + 1].width -= deltaX ;
+
+		// Clear all cell widths, delete all <col> elements from the table.
+		for ( var r = 0 ; r < table.rows.length ; r++ )
+		{
+			var row = table.rows.item( r ) ;
+			for ( var c = 0 ; c < row.cells.length ; c++ )
+			{
+				var cell = row.cells.item( c ) ;
+				cell.width = "" ;
+				cell.style.width = "" ;
+			}
+		}
+		var colElements = table.getElementsByTagName( "col" ) ;
+		for ( var i = colElements.length - 1 ; i >= 0 ; i-- )
+			colElements[i].parentNode.removeChild( colElements[i] ) ;
+
+		// Set new cell widths.
+		var processedCells = [] ;
+		for ( var i = 0 ; i < tableMap.length ; i++ )
+		{
+			for ( var j = 0 ; j < tableMap[i].length ; j++ )
+			{
+				var cell = tableMap[i][j] ;
+				if ( cell._Processed )
+					continue ;
+				if ( tableMap[i][j-1] != cell )
+					cell.width = colArray[j].width ;
+				else
+					cell.width = parseInt( cell.width, 10 ) + parseInt( colArray[j].width, 10 ) ;
+				if ( tableMap[i][j+1] != cell )
+				{
+					processedCells.push( cell ) ;
+					cell._Processed = true ;
+				}
+			}
+		}
+		for ( var i = 0 ; i < processedCells.length ; i++ )
+		{
+			if ( FCKBrowserInfo.IsIE )
+				processedCells[i].removeAttribute( '_Processed' ) ;
+			else
+				delete processedCells[i]._Processed ;
+		}
+
+		FCKDragTableHandler._LastX = null ;
+	},
+	"_ResizeBarMouseMoveListener" : function( evt )
+	{
+		if ( ! evt )
+			evt = window.event ;
+		if ( FCKDragTableHandler._MouseMoveMode == 0 )
+			return FCKDragTableHandler._MouseFindHandler( FCK, evt ) ;
+		else
+			return FCKDragTableHandler._MouseDragHandler( FCK, evt ) ;
+	},
+	// Calculate the padding of a table cell.
+	// It returns the value of paddingLeft + paddingRight of a table cell.
+	// This function is used, in part, to calculate the width parameter that should be used for setting cell widths.
+	// The equation in question is clientWidth = paddingLeft + paddingRight + width.
+	// So that width = clientWidth - paddingLeft - paddingRight.
+	// The return value of this function must be pixel accurate acorss all supported browsers, so be careful if you need to modify it.
+	"_GetCellPadding" : function( table, cell )
+	{
+		var attrGuess = parseInt( table.cellPadding, 10 ) * 2 ;
+		var cssGuess = null ;
+		if ( typeof( window.getComputedStyle ) == "function" )
+		{
+			var styleObj = window.getComputedStyle( cell, null ) ;
+			cssGuess = parseInt( styleObj.getPropertyValue( "padding-left" ), 10 ) +
+				parseInt( styleObj.getPropertyValue( "padding-right" ), 10 ) ;
+		}
+		else
+			cssGuess = parseInt( cell.currentStyle.paddingLeft, 10 ) + parseInt (cell.currentStyle.paddingRight, 10 ) ;
+
+		var cssRuntime = cell.style.padding ;
+		if ( isFinite( cssRuntime ) )
+			cssGuess = parseInt( cssRuntime, 10 ) * 2 ;
+		else
+		{
+			cssRuntime = cell.style.paddingLeft ;
+			if ( isFinite( cssRuntime ) )
+				cssGuess = parseInt( cssRuntime, 10 ) ;
+			cssRuntime = cell.style.paddingRight ;
+			if ( isFinite( cssRuntime ) )
+				cssGuess += parseInt( cssRuntime, 10 ) ;
+		}
+
+		attrGuess = parseInt( attrGuess, 10 ) ;
+		cssGuess = parseInt( cssGuess, 10 ) ;
+		if ( isNaN( attrGuess ) )
+			attrGuess = 0 ;
+		if ( isNaN( cssGuess ) )
+			cssGuess = 0 ;
+		return Math.max( attrGuess, cssGuess ) ;
+	},
+	// Calculate the real width of the table cell.
+	// The real width of the table cell is the pixel width that you can set to the width attribute of the table cell and after
+	// that, the table cell should be of exactly the same width as before.
+	// The real width of a table cell can be calculated as:
+	// width = clientWidth - paddingLeft - paddingRight.
+	"_GetCellWidth" : function( table, cell )
+	{
+		var clientWidth = cell.clientWidth ;
+		if ( isNaN( clientWidth ) )
+			clientWidth = 0 ;
+		return clientWidth - this._GetCellPadding( table, cell ) ;
+	},
+	"MouseMoveListener" : function( FCK, evt )
+	{
+		if ( FCKDragTableHandler._MouseMoveMode == 0 )
+			return FCKDragTableHandler._MouseFindHandler( FCK, evt ) ;
+		else
+			return FCKDragTableHandler._MouseDragHandler( FCK, evt ) ;
+	},
+	"_MouseFindHandler" : function( FCK, evt )
+	{
+		if ( FCK.MouseDownFlag )
+			return ;
+		var node = evt.srcElement || evt.target ;
+		try
+		{
+			if ( ! node || node.nodeType != 1 )
+			{
+				this._HideResizeBar() ;
+				return ;
+			}
+		}
+		catch ( e )
+		{
+			this._HideResizeBar() ;
+			return ;
+		}
+
+		// Since this function might be called from the editing area iframe or the outer fckeditor iframe,
+		// the mouse point coordinates from evt.clientX/Y can have different reference points.
+		// We need to resolve the mouse pointer position relative to the editing area iframe.
+		var mouseX = evt.clientX ;
+		var mouseY = evt.clientY ;
+		if ( node.ownerDocument == document )
+		{
+			var offset = FCKTools.GetDocumentPosition( window, FCK.EditingArea.IFrame ) ;
+			mouseX -= offset.x ;
+			mouseY -= offset.y ;
+		}
+
+
+		if ( this._ResizeBar && this._LeftCell )
+		{
+			var leftPos = FCKTools.GetWindowPosition( FCK.EditorWindow, this._LeftCell ) ;
+			var rightPos = FCKTools.GetWindowPosition( FCK.EditorWindow, this._RightCell ) ;
+			var rxDist = mouseX - ( leftPos.x + this._LeftCell.clientWidth ) ;
+			var lxDist = mouseX - rightPos.x ;
+			var inRangeFlag = false ;
+			if ( lxDist >= 0 && rxDist <= 0 )
+				inRangeFlag = true ;
+			else if ( rxDist > 0 && lxDist <= 3 )
+				inRangeFlag = true ;
+			else if ( lxDist < 0 && rxDist >= -2 )
+				inRangeFlag = true ;
+			if ( inRangeFlag )
+			{
+				this._ShowResizeBar( FCK.EditorWindow,
+					FCKTools.GetElementAscensor( this._LeftCell, "table" ),
+					{ "x" : mouseX, "y" : mouseY } ) ;
+				return ;
+			}
+		}
+
+		var tagName = node.tagName.toLowerCase() ;
+		if ( tagName != "table" && tagName != "td" && tagName != "th" )
+		{
+			if ( this._LeftCell )
+				this._LeftCell = this._RightCell = this._TableMap = null ;
+			this._HideResizeBar() ;
+			return ;
+		}
+		node = FCKTools.GetElementAscensor( node, "table" ) ;
+		var tableMap = FCKTableHandler._CreateTableMap( node ) ;
+		var cellTuple = this._GetBorderCells( FCK.EditorWindow, node, tableMap, { "x" : mouseX, "y" : mouseY } ) ;
+
+		if ( cellTuple == null )
+		{
+			if ( this._LeftCell )
+				this._LeftCell = this._RightCell = this._TableMap = null ;
+			this._HideResizeBar() ;
+		}
+		else
+		{
+			this._LeftCell = cellTuple["leftCell"] ;
+			this._RightCell = cellTuple["rightCell"] ;
+			this._TableMap = tableMap ;
+			this._ShowResizeBar( FCK.EditorWindow,
+					FCKTools.GetElementAscensor( this._LeftCell, "table" ),
+					{ "x" : mouseX, "y" : mouseY } ) ;
+		}
+	},
+	"_MouseDragHandler" : function( FCK, evt )
+	{
+		var mouse = { "x" : evt.clientX, "y" : evt.clientY } ;
+
+		// Convert mouse coordinates in reference to the outer iframe.
+		var node = evt.srcElement || evt.target ;
+		if ( node.ownerDocument == FCK.EditorDocument )
+		{
+			var offset = FCKTools.GetDocumentPosition( window, FCK.EditingArea.IFrame ) ;
+			mouse.x += offset.x ;
+			mouse.y += offset.y ;
+		}
+
+		// Calculate the mouse position delta and see if we've gone out of range.
+		if ( mouse.x >= this._MaximumX - 5 )
+			mouse.x = this._MaximumX - 5 ;
+		if ( mouse.x <= this._MinimumX + 5 )
+			mouse.x = this._MinimumX + 5 ;
+
+		var docX = mouse.x + FCKTools.GetScrollPosition( window ).X ;
+		this._ResizeBar.style.left = ( docX - this._ResizeBar.offsetWidth / 2 ) + "px" ;
+		this._LastX = mouse.x ;
+	},
+	"_ShowResizeBar" : function( w, table, mouse )
+	{
+		if ( this._ResizeBar == null )
+		{
+			this._ResizeBar = document.createElement( "div" ) ;
+			var paddingBar = this._ResizeBar ;
+			var paddingStyles = { 'position' : 'absolute', 'cursor' : 'e-resize' } ;
+			if ( FCKBrowserInfo.IsIE )
+				paddingStyles.filter = "progid:DXImageTransform.Microsoft.Alpha(opacity=10,enabled=true)" ;
+			else
+				paddingStyles.opacity = 0.10 ;
+			FCKDomTools.SetElementStyles( paddingBar, paddingStyles ) ;
+			document.body.appendChild( paddingBar ) ;
+			FCKTools.AddEventListener( paddingBar, "mousemove", this._ResizeBarMouseMoveListener ) ;
+			FCKTools.AddEventListener( paddingBar, "mousedown", this._ResizeBarMouseDownListener ) ;
+			FCKTools.AddEventListener( document, "mouseup", this._ResizeBarMouseUpListener ) ;
+			FCKTools.AddEventListener( FCK.EditorDocument, "mouseup", this._ResizeBarMouseUpListener ) ;
+
+			// IE doesn't let the tranparent part of the padding block to receive mouse events unless there's something inside.
+			// So we need to create a spacer image to fill the block up.
+			var filler = document.createElement( "img" ) ;
+			filler.border = 0 ;
+			filler.src = FCKConfig.BasePath + "images/spacer.gif" ;
+			filler.style.position = "absolute" ;
+			paddingBar.appendChild( filler ) ;
+
+			// Disable drag and drop, and selection for the filler image.
+			var disabledListener = function( evt )
+			{
+				if ( ! evt )
+					evt = window.event ;
+				if ( evt.preventDefault )
+					evt.preventDefault() ;
+				else
+					evt.returnValue = false ;
+			}
+			FCKTools.AddEventListener( filler, "dragstart", disabledListener ) ;
+			FCKTools.AddEventListener( filler, "selectstart", disabledListener ) ;
+		}
+
+		var paddingBar = this._ResizeBar ;
+		var offset = FCKTools.GetDocumentPosition( window, FCK.EditingArea.IFrame ) ;
+		var tablePos = FCKTools.GetWindowPosition( w, table ) ;
+		var barHeight = table.offsetHeight ;
+		var barTop = offset.y + tablePos.y ;
+		// Do not let the resize bar intrude into the toolbar area.
+		if ( tablePos.y < 0 )
+		{
+			barHeight += tablePos.y ;
+			barTop -= tablePos.y ;
+		}
+		var bw = parseInt( table.border, 10 ) ;
+		if ( isNaN( bw ) )
+			bw = 0 ;
+		var cs = parseInt( table.cellSpacing, 10 ) ;
+		if ( isNaN( cs ) )
+			cs = 0 ;
+		var barWidth = Math.max( bw+100, cs+100 ) ;
+		var paddingStyles =
+		{
+			'top'		: barTop + 'px',
+			'height'	: barHeight + 'px',
+			'width'		: barWidth + 'px',
+			'left'		: ( offset.x + mouse.x + FCKTools.GetScrollPosition( w ).X - barWidth / 2 ) + 'px'
+		} ;
+		if ( FCKBrowserInfo.IsIE )
+			paddingBar.filters.item("DXImageTransform.Microsoft.Alpha").opacity = 10 ;
+		else
+			paddingStyles.opacity = 0.1 ;
+
+		FCKDomTools.SetElementStyles( paddingBar, paddingStyles ) ;
+		var filler = paddingBar.getElementsByTagName( "img" )[0] ;
+
+		FCKDomTools.SetElementStyles( filler,
+			{
+				width	: paddingBar.offsetWidth + 'px',
+				height	: barHeight + 'px'
+			} ) ;
+
+		barWidth = Math.max( bw, cs, 3 ) ;
+		var visibleBar = null ;
+		if ( paddingBar.getElementsByTagName( "div" ).length < 1 )
+		{
+			visibleBar = document.createElement( "div" ) ;
+			paddingBar.appendChild( visibleBar ) ;
+		}
+		else
+			visibleBar = paddingBar.getElementsByTagName( "div" )[0] ;
+
+		FCKDomTools.SetElementStyles( visibleBar,
+			{
+				position		: 'absolute',
+				backgroundColor	: 'blue',
+				width			: barWidth + 'px',
+				height			: barHeight + 'px',
+				left			: '50px',
+				top				: '0px'
+			} ) ;
+	},
+	"_HideResizeBar" : function()
+	{
+		if ( this._ResizeBar )
+			// IE bug: display : none does not hide the resize bar for some reason.
+			// so set the position to somewhere invisible.
+			FCKDomTools.SetElementStyles( this._ResizeBar,
+				{
+					top		: '-100000px',
+					left	: '-100000px'
+				} ) ;
+	}
+};
+
+FCK.Events.AttachEvent( "OnMouseMove", FCKDragTableHandler.MouseMoveListener ) ;
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/plugins/placeholder/fck_placeholder.html
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/plugins/placeholder/fck_placeholder.html	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/plugins/placeholder/fck_placeholder.html	(revision 1280)
@@ -0,0 +1,100 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Placeholder Plugin.
+-->
+<html>
+	<head>
+		<title>Placeholder Properties</title>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+		<meta content="noindex, nofollow" name="robots">
+		<script language="javascript">
+
+var oEditor = window.parent.InnerDialogLoaded() ;
+var FCKLang = oEditor.FCKLang ;
+var FCKPlaceholders = oEditor.FCKPlaceholders ;
+
+window.onload = function ()
+{
+	// First of all, translate the dialog box texts
+	oEditor.FCKLanguageManager.TranslatePage( document ) ;
+
+	LoadSelected() ;
+
+	// Show the "Ok" button.
+	window.parent.SetOkButton( true ) ;
+}
+
+var eSelected = oEditor.FCKSelection.GetSelectedElement() ;
+
+function LoadSelected()
+{
+	if ( !eSelected )
+		return ;
+
+	if ( eSelected.tagName == 'SPAN' && eSelected._fckplaceholder )
+		document.getElementById('txtName').value = eSelected._fckplaceholder ;
+	else
+		eSelected == null ;
+}
+
+function Ok()
+{
+	var sValue = document.getElementById('txtName').value ;
+
+	if ( eSelected && eSelected._fckplaceholder == sValue )
+		return true ;
+
+	if ( sValue.length == 0 )
+	{
+		alert( FCKLang.PlaceholderErrNoName ) ;
+		return false ;
+	}
+
+	if ( FCKPlaceholders.Exist( sValue ) )
+	{
+		alert( FCKLang.PlaceholderErrNameInUse ) ;
+		return false ;
+	}
+
+	FCKPlaceholders.Add( sValue ) ;
+	return true ;
+}
+
+		</script>
+	</head>
+	<body scroll="no" style="OVERFLOW: hidden">
+		<table height="100%" cellSpacing="0" cellPadding="0" width="100%" border="0">
+			<tr>
+				<td>
+					<table cellSpacing="0" cellPadding="0" align="center" border="0">
+						<tr>
+							<td>
+								<span fckLang="PlaceholderDlgName">Placeholder Name</span><br>
+								<input id="txtName" type="text">
+							</td>
+						</tr>
+					</table>
+				</td>
+			</tr>
+		</table>
+	</body>
+</html>
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/plugins/placeholder/fckplugin.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/plugins/placeholder/fckplugin.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/plugins/placeholder/fckplugin.js	(revision 1280)
@@ -0,0 +1,187 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Plugin to insert "Placeholders" in the editor.
+ */
+
+// Register the related command.
+FCKCommands.RegisterCommand( 'Placeholder', new FCKDialogCommand( 'Placeholder', FCKLang.PlaceholderDlgTitle, FCKPlugins.Items['placeholder'].Path + 'fck_placeholder.html', 340, 170 ) ) ;
+
+// Create the "Plaholder" toolbar button.
+var oPlaceholderItem = new FCKToolbarButton( 'Placeholder', FCKLang.PlaceholderBtn ) ;
+oPlaceholderItem.IconPath = FCKPlugins.Items['placeholder'].Path + 'placeholder.gif' ;
+
+FCKToolbarItems.RegisterItem( 'Placeholder', oPlaceholderItem ) ;
+
+
+// The object used for all Placeholder operations.
+var FCKPlaceholders = new Object() ;
+
+// Add a new placeholder at the actual selection.
+FCKPlaceholders.Add = function( name )
+{
+	var oSpan = FCK.InsertElement( 'span' ) ;
+	this.SetupSpan( oSpan, name ) ;
+}
+
+FCKPlaceholders.SetupSpan = function( span, name )
+{
+	span.innerHTML = '[[ ' + name + ' ]]' ;
+
+	span.style.backgroundColor = '#ffff00' ;
+	span.style.color = '#000000' ;
+
+	if ( FCKBrowserInfo.IsGecko )
+		span.style.cursor = 'default' ;
+
+	span._fckplaceholder = name ;
+	span.contentEditable = false ;
+
+	// To avoid it to be resized.
+	span.onresizestart = function()
+	{
+		FCK.EditorWindow.event.returnValue = false ;
+		return false ;
+	}
+}
+
+// On Gecko we must do this trick so the user select all the SPAN when clicking on it.
+FCKPlaceholders._SetupClickListener = function()
+{
+	FCKPlaceholders._ClickListener = function( e )
+	{
+		if ( e.target.tagName == 'SPAN' && e.target._fckplaceholder )
+			FCKSelection.SelectNode( e.target ) ;
+	}
+
+	FCK.EditorDocument.addEventListener( 'click', FCKPlaceholders._ClickListener, true ) ;
+}
+
+// Open the Placeholder dialog on double click.
+FCKPlaceholders.OnDoubleClick = function( span )
+{
+	if ( span.tagName == 'SPAN' && span._fckplaceholder )
+		FCKCommands.GetCommand( 'Placeholder' ).Execute() ;
+}
+
+FCK.RegisterDoubleClickHandler( FCKPlaceholders.OnDoubleClick, 'SPAN' ) ;
+
+// Check if a Placholder name is already in use.
+FCKPlaceholders.Exist = function( name )
+{
+	var aSpans = FCK.EditorDocument.getElementsByTagName( 'SPAN' ) ;
+
+	for ( var i = 0 ; i < aSpans.length ; i++ )
+	{
+		if ( aSpans[i]._fckplaceholder == name )
+			return true ;
+	}
+
+	return false ;
+}
+
+if ( FCKBrowserInfo.IsIE )
+{
+	FCKPlaceholders.Redraw = function()
+	{
+		if ( FCK.EditMode != FCK_EDITMODE_WYSIWYG )
+			return ;
+
+		var aPlaholders = FCK.EditorDocument.body.innerText.match( /\[\[[^\[\]]+\]\]/g ) ;
+		if ( !aPlaholders )
+			return ;
+
+		var oRange = FCK.EditorDocument.body.createTextRange() ;
+
+		for ( var i = 0 ; i < aPlaholders.length ; i++ )
+		{
+			if ( oRange.findText( aPlaholders[i] ) )
+			{
+				var sName = aPlaholders[i].match( /\[\[\s*([^\]]*?)\s*\]\]/ )[1] ;
+				oRange.pasteHTML( '<span style="color: #000000; background-color: #ffff00" contenteditable="false" _fckplaceholder="' + sName + '">' + aPlaholders[i] + '</span>' ) ;
+			}
+		}
+	}
+}
+else
+{
+	FCKPlaceholders.Redraw = function()
+	{
+		if ( FCK.EditMode != FCK_EDITMODE_WYSIWYG )
+			return ;
+
+		var oInteractor = FCK.EditorDocument.createTreeWalker( FCK.EditorDocument.body, NodeFilter.SHOW_TEXT, FCKPlaceholders._AcceptNode, true ) ;
+
+		var	aNodes = new Array() ;
+
+		while ( ( oNode = oInteractor.nextNode() ) )
+		{
+			aNodes[ aNodes.length ] = oNode ;
+		}
+
+		for ( var n = 0 ; n < aNodes.length ; n++ )
+		{
+			var aPieces = aNodes[n].nodeValue.split( /(\[\[[^\[\]]+\]\])/g ) ;
+
+			for ( var i = 0 ; i < aPieces.length ; i++ )
+			{
+				if ( aPieces[i].length > 0 )
+				{
+					if ( aPieces[i].indexOf( '[[' ) == 0 )
+					{
+						var sName = aPieces[i].match( /\[\[\s*([^\]]*?)\s*\]\]/ )[1] ;
+
+						var oSpan = FCK.EditorDocument.createElement( 'span' ) ;
+						FCKPlaceholders.SetupSpan( oSpan, sName ) ;
+
+						aNodes[n].parentNode.insertBefore( oSpan, aNodes[n] ) ;
+					}
+					else
+						aNodes[n].parentNode.insertBefore( FCK.EditorDocument.createTextNode( aPieces[i] ) , aNodes[n] ) ;
+				}
+			}
+
+			aNodes[n].parentNode.removeChild( aNodes[n] ) ;
+		}
+
+		FCKPlaceholders._SetupClickListener() ;
+	}
+
+	FCKPlaceholders._AcceptNode = function( node )
+	{
+		if ( /\[\[[^\[\]]+\]\]/.test( node.nodeValue ) )
+			return NodeFilter.FILTER_ACCEPT ;
+		else
+			return NodeFilter.FILTER_SKIP ;
+	}
+}
+
+FCK.Events.AttachEvent( 'OnAfterSetHTML', FCKPlaceholders.Redraw ) ;
+
+// We must process the SPAN tags to replace then with the real resulting value of the placeholder.
+FCKXHtml.TagProcessors['span'] = function( node, htmlNode )
+{
+	if ( htmlNode._fckplaceholder )
+		node = FCKXHtml.XML.createTextNode( '[[' + htmlNode._fckplaceholder + ']]' ) ;
+	else
+		FCKXHtml._AppendChildNodes( node, htmlNode, false ) ;
+
+	return node ;
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/plugins/placeholder/lang/de.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/plugins/placeholder/lang/de.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/plugins/placeholder/lang/de.js	(revision 1280)
@@ -0,0 +1,27 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Placholder German language file.
+ */
+FCKLang.PlaceholderBtn			= 'Einfügen/editieren Platzhalter' ;
+FCKLang.PlaceholderDlgTitle		= 'Platzhalter Eigenschaften' ;
+FCKLang.PlaceholderDlgName		= 'Platzhalter Name' ;
+FCKLang.PlaceholderErrNoName	= 'Bitte den Namen des Platzhalters schreiben' ;
+FCKLang.PlaceholderErrNameInUse	= 'Der angegebene Namen ist schon in Gebrauch' ;
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/plugins/placeholder/lang/en.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/plugins/placeholder/lang/en.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/plugins/placeholder/lang/en.js	(revision 1280)
@@ -0,0 +1,27 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Placholder English language file.
+ */
+FCKLang.PlaceholderBtn			= 'Insert/Edit Placeholder' ;
+FCKLang.PlaceholderDlgTitle		= 'Placeholder Properties' ;
+FCKLang.PlaceholderDlgName		= 'Placeholder Name' ;
+FCKLang.PlaceholderErrNoName	= 'Please type the placeholder name' ;
+FCKLang.PlaceholderErrNameInUse	= 'The specified name is already in use' ;
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/plugins/placeholder/lang/fr.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/plugins/placeholder/lang/fr.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/plugins/placeholder/lang/fr.js	(revision 1280)
@@ -0,0 +1,27 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Placeholder French language file.
+ */
+FCKLang.PlaceholderBtn			= "Insérer/Modifier l'Espace réservé" ;
+FCKLang.PlaceholderDlgTitle		= "Propriétés de l'Espace réservé" ;
+FCKLang.PlaceholderDlgName		= "Nom de l'Espace réservé" ;
+FCKLang.PlaceholderErrNoName	= "Veuillez saisir le nom de l'Espace réservé" ;
+FCKLang.PlaceholderErrNameInUse	= "Ce nom est déjà utilisé" ;
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/plugins/placeholder/lang/it.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/plugins/placeholder/lang/it.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/plugins/placeholder/lang/it.js	(revision 1280)
@@ -0,0 +1,27 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Placholder Italian language file.
+ */
+FCKLang.PlaceholderBtn			= 'Aggiungi/Modifica Placeholder' ;
+FCKLang.PlaceholderDlgTitle		= 'Proprietà del Placeholder' ;
+FCKLang.PlaceholderDlgName		= 'Nome del Placeholder' ;
+FCKLang.PlaceholderErrNoName	= 'Digitare il nome del placeholder' ;
+FCKLang.PlaceholderErrNameInUse	= 'Il nome inserito è già in uso' ;
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/plugins/placeholder/lang/pl.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/plugins/placeholder/lang/pl.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/plugins/placeholder/lang/pl.js	(revision 1280)
@@ -0,0 +1,27 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Placholder Polish language file.
+ */
+FCKLang.PlaceholderBtn			= 'Wstaw/Edytuj nagłówek' ;
+FCKLang.PlaceholderDlgTitle		= 'Właśności nagłówka' ;
+FCKLang.PlaceholderDlgName		= 'Nazwa nagłówka' ;
+FCKLang.PlaceholderErrNoName	= 'Proszę wprowadzić nazwę nagłówka' ;
+FCKLang.PlaceholderErrNameInUse	= 'Podana nazwa jest już w użyciu' ;
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/plugins/simplecommands/fckplugin.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/plugins/simplecommands/fckplugin.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/plugins/simplecommands/fckplugin.js	(revision 1280)
@@ -0,0 +1,29 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This plugin register Toolbar items for the combos modifying the style to
+ * not show the box.
+ */
+
+FCKToolbarItems.RegisterItem( 'SourceSimple'	, new FCKToolbarButton( 'Source', FCKLang.Source, null, FCK_TOOLBARITEM_ONLYICON, true, true, 1 ) ) ;
+FCKToolbarItems.RegisterItem( 'StyleSimple'		, new FCKToolbarStyleCombo( null, FCK_TOOLBARITEM_ONLYTEXT ) ) ;
+FCKToolbarItems.RegisterItem( 'FontNameSimple'	, new FCKToolbarFontsCombo( null, FCK_TOOLBARITEM_ONLYTEXT ) ) ;
+FCKToolbarItems.RegisterItem( 'FontSizeSimple'	, new FCKToolbarFontSizeCombo( null, FCK_TOOLBARITEM_ONLYTEXT ) ) ;
+FCKToolbarItems.RegisterItem( 'FontFormatSimple', new FCKToolbarFontFormatCombo( null, FCK_TOOLBARITEM_ONLYTEXT ) ) ;
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/plugins/tablecommands/fckplugin.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/plugins/tablecommands/fckplugin.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/plugins/tablecommands/fckplugin.js	(revision 1280)
@@ -0,0 +1,33 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This plugin register the required Toolbar items to be able to insert the
+ * table commands in the toolbar.
+ */
+
+FCKToolbarItems.RegisterItem( 'TableInsertRowAfter'		, new FCKToolbarButton( 'TableInsertRowAfter'	, FCKLang.InsertRowAfter, null, null, null, true, 62 ) ) ;
+FCKToolbarItems.RegisterItem( 'TableDeleteRows'		, new FCKToolbarButton( 'TableDeleteRows'	, FCKLang.DeleteRows, null, null, null, true, 63 ) ) ;
+FCKToolbarItems.RegisterItem( 'TableInsertColumnAfter'	, new FCKToolbarButton( 'TableInsertColumnAfter'	, FCKLang.InsertColumnAfter, null, null, null, true, 64 ) ) ;
+FCKToolbarItems.RegisterItem( 'TableDeleteColumns'	, new FCKToolbarButton( 'TableDeleteColumns', FCKLang.DeleteColumns, null, null, null, true, 65 ) ) ;
+FCKToolbarItems.RegisterItem( 'TableInsertCellAfter'		, new FCKToolbarButton( 'TableInsertCellAfter'	, FCKLang.InsertCellAfter, null, null, null, true, 58 ) ) ;
+FCKToolbarItems.RegisterItem( 'TableDeleteCells'	, new FCKToolbarButton( 'TableDeleteCells'	, FCKLang.DeleteCells, null, null, null, true, 59 ) ) ;
+FCKToolbarItems.RegisterItem( 'TableMergeCells'		, new FCKToolbarButton( 'TableMergeCells'	, FCKLang.MergeCells, null, null, null, true, 60 ) ) ;
+FCKToolbarItems.RegisterItem( 'TableHorizontalSplitCell'		, new FCKToolbarButton( 'TableHorizontalSplitCell'	, FCKLang.SplitCell, null, null, null, true, 61 ) ) ;
+FCKToolbarItems.RegisterItem( 'TableCellProp'		, new FCKToolbarButton( 'TableCellProp'	, FCKLang.CellProperties, null, null, null, true, 57 ) ) ;
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/skins/_fckviewstrips.html
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/skins/_fckviewstrips.html	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/skins/_fckviewstrips.html	(revision 1280)
@@ -0,0 +1,121 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Useful page that enumerates all icons in the skins strips.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+	<title>FCKeditor - View Icons Strips</title>
+	<style type="text/css">
+		.TB_Button_Image
+		{
+			overflow: hidden;
+			width: 16px;
+			height: 16px;
+			margin: 3px;
+			background-repeat: no-repeat;
+		}
+
+		.TB_Button_Image img
+		{
+			position: relative;
+		}
+	</style>
+	<script type="text/javascript">
+
+window.onload = function()
+{
+	var eImg1 = document.createElement( 'img' ) ;
+	eImg1.onload = Img_OnLoad ;
+	eImg1.src = 'default/fck_strip.gif' ;
+
+	var eImg2 = document.createElement( 'img' ) ;
+	eImg2.onload = Img_OnLoad ;
+	eImg2.src = 'office2003/fck_strip.gif' ;
+
+	var eImg3 = document.createElement( 'img' ) ;
+	eImg3.onload = Img_OnLoad ;
+	eImg3.src = 'silver/fck_strip.gif' ;
+}
+
+var iTotalStrips = 3 ;
+var iMaxHeight = 0 ;
+
+function Img_OnLoad()
+{
+	if ( iMaxHeight < this.height )
+		iMaxHeight = this.height ;
+
+	iTotalStrips-- ;
+
+	if ( iTotalStrips == 0 )
+		LoadIcons( iMaxHeight / 16 ) ;
+}
+
+function LoadIcons( total )
+{
+	var xIconsTable = document.getElementById( 'xIconsTable' ) ;
+
+	for ( var i = 0 ; i < total ; i++ )
+	{
+		var eRow = xIconsTable.insertRow(-1) ;
+
+		var eCell = eRow.insertCell(-1) ;
+		eCell.innerHTML = i + 1 ;
+
+		eCell = eRow.insertCell(-1) ;
+		eCell.align = 'center' ;
+		eCell.style.border = '#dcdcdc 1px solid' ;
+		eCell.innerHTML = '<div class="TB_Button_Image"><img src="default/fck_strip.gif" style="top:-' + ( i * 16 ) + 'px;"><\/div>' ;
+
+		eCell = eRow.insertCell(-1) ;
+		eCell.align = 'center' ;
+		eCell.style.border = '#dcdcdc 1px solid' ;
+		eCell.innerHTML = '<div class="TB_Button_Image"><img src="office2003/fck_strip.gif" style="top:-' + ( i * 16 ) + 'px;"><\/div>' ;
+
+		eCell = eRow.insertCell(-1) ;
+		eCell.align = 'center' ;
+		eCell.style.border = '#dcdcdc 1px solid' ;
+		eCell.innerHTML = '<div class="TB_Button_Image"><img src="silver/fck_strip.gif" style="top:-' + ( i * 16 ) + 'px;"><\/div>' ;
+	}
+}
+
+	</script>
+</head>
+<body>
+	<table id="xIconsTable">
+		<tr>
+			<td rowspan="2">
+				Index</td>
+			<td align="center" colspan="3">
+				Skins</td>
+		</tr>
+		<tr>
+			<td width="80" align="center">
+				default</td>
+			<td width="80" align="center">
+				office2003</td>
+			<td width="80" align="center">
+				silver</td>
+		</tr>
+	</table>
+</body>
+</html>
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/skins/default/fck_dialog.css
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/skins/default/fck_dialog.css	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/skins/default/fck_dialog.css	(revision 1280)
@@ -0,0 +1,139 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Styles used by the dialog boxes.
+ */
+
+body
+{
+	margin: 0px;
+	padding: 10px;
+}
+
+body, td, input, select, textarea
+{
+	font-size: 11px;
+	font-family: 'Microsoft Sans Serif' , Arial, Helvetica, Verdana;
+}
+
+body, .BackColor
+{
+	background-color: #f1f1e3;
+}
+
+.PopupBody
+{
+	margin: 0px;
+	padding: 0px;
+}
+
+.PopupTitle
+{
+	font-weight: bold;
+	font-size: 14pt;
+	color: #737357;
+	background-color: #e3e3c7;
+	padding: 3px 10px 3px 10px;
+}
+
+.PopupButtons
+{
+	border-top: #d5d59d 1px solid;
+	background-color: #e3e3c7;
+	padding: 7px 10px 7px 10px;
+}
+
+.Button
+{
+	border: #737357 1px solid;
+	color: #3b3b1f;
+	background-color: #c7c78f;
+}
+
+#btnOk
+{
+	width: 100px;
+}
+
+.DarkBackground
+{
+	background-color: #d7d79f;
+}
+
+.LightBackground
+{
+	background-color: #ffffbe;
+}
+
+.PopupTitleBorder
+{
+	border-bottom: #d5d59d 1px solid;
+}
+
+.PopupTabArea
+{
+	color: #737357;
+	background-color: #e3e3c7;
+}
+
+.PopupTabEmptyArea
+{
+	padding-left: 10px ;
+	border-bottom: #d5d59d 1px solid;
+}
+
+.PopupTab, .PopupTabSelected
+{
+	border-right: #d5d59d 1px solid;
+	border-top: #d5d59d 1px solid;
+	border-left: #d5d59d 1px solid;
+	padding: 3px 5px 3px 5px;
+	color: #737357;
+}
+
+.PopupTab
+{
+	margin-top: 1px;
+	border-bottom: #d5d59d 1px solid;
+	cursor: pointer;
+	cursor: hand;
+}
+
+.PopupTabSelected
+{
+	font-weight:bold;
+	cursor: default;
+	padding-top: 4px;
+	border-bottom: #f1f1e3 1px solid;
+	background-color: #f1f1e3;
+}
+
+.PopupSelectionBox
+{
+	border: #ff9933 1px solid !important;
+	background-color: #fffacd !important;
+	cursor: pointer;
+	cursor: hand;
+}
+
+#tdBrowse 
+{
+	vertical-align: bottom;
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/skins/default/fck_editor.css
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/skins/default/fck_editor.css	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/skins/default/fck_editor.css	(revision 1280)
@@ -0,0 +1,464 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Styles used by the editor IFRAME and Toolbar.
+ */
+
+/*
+	### Basic Editor IFRAME Styles.
+*/
+
+body
+{
+	padding: 1px;
+	margin: 0;
+	background-color: #ffffff;
+}
+
+#xEditingArea
+{
+    border: #696969 1px solid;
+}
+
+.SourceField
+{
+    padding: 5px;
+    margin: 0px;
+    font-family: Monospace;
+}
+
+/*
+	Toolbar
+*/
+
+.TB_ToolbarSet, .TB_Expand, .TB_Collapse
+{
+    cursor: default;
+    background-color: #efefde;
+}
+
+.TB_ToolbarSet
+{
+    border-top: #efefde 1px outset;
+    border-bottom: #efefde 1px outset;
+}
+
+.TB_ToolbarSet TD
+{
+    font-size: 11px;
+    font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
+}
+
+.TB_Toolbar
+{
+	height: 24px;
+    display: inline-table;	/* inline = Opera jumping buttons bug */
+}
+
+.TB_Separator
+{
+    width: 1px;
+    height: 16px;
+    margin: 2px;
+    background-color: #999966;
+}
+
+.TB_Start
+{
+    background-image: url(images/toolbar.start.gif);
+    margin: 2px;
+    width: 3px;
+    background-repeat: no-repeat;
+    height: 16px;
+}
+
+.TB_End
+{
+    display: none;
+}
+
+.TB_ExpandImg
+{
+    background-image: url(images/toolbar.expand.gif);
+    background-repeat: no-repeat;
+}
+
+.TB_CollapseImg
+{
+    background-image: url(images/toolbar.collapse.gif);
+    background-repeat: no-repeat;
+}
+
+.TB_SideBorder
+{
+    background-color: #696969;
+}
+
+.TB_Expand, .TB_Collapse
+{
+    padding: 2px 2px 2px 2px;
+    border: #efefde 1px outset;
+}
+
+.TB_Collapse
+{
+    width: 5px;
+}
+
+.TB_Break
+{
+    height: 24px; /* IE needs the height to be set, otherwise no break */
+}
+
+/*
+	Toolbar Button
+*/
+
+.TB_Button_On, .TB_Button_Off, .TB_Button_On_Over, .TB_Button_Off_Over, .TB_Button_Disabled
+{
+    border: #efefde 1px solid; /* This is the default border */
+    height: 22px; /* The height is necessary, otherwise IE will not apply the alpha */
+}
+
+.TB_Button_On
+{
+    border: #316ac5 1px solid;
+    background-color: #c1d2ee;
+}
+
+.TB_Button_On_Over, .TB_Button_Off_Over
+{
+    border: #316ac5 1px solid;
+    background-color: #dff1ff;
+}
+
+.TB_Button_Off
+{
+    filter: alpha(opacity=70); /* IE */
+    opacity: 0.70; /* Safari, Opera and Mozilla */
+}
+
+.TB_Button_Disabled
+{
+    filter: gray() alpha(opacity=30); /* IE */
+    opacity: 0.30; /* Safari, Opera and Mozilla */
+}
+
+.TB_Button_Padding
+{
+    visibility: hidden;
+    width: 3px;
+    height: 22px;
+}
+
+.TB_Button_Image
+{
+    overflow: hidden;
+    width: 16px;
+    height: 16px;
+    margin: 3px;
+    background-repeat: no-repeat;
+}
+
+.TB_Button_Image img
+{
+    position: relative;
+}
+
+.TB_Button_Off .TB_Button_Text
+{
+   	background-color: #efefde;  /* Needed because of a bug on Clear Type */
+}
+
+.TB_ConnectionLine
+{
+    background-color: #ffffff;
+    height: 1px;
+    margin-left: 1px;   /* ltr */
+    margin-right: 1px;  /* rtl */
+}
+
+.TB_Text
+{
+	height: 22px;
+}
+
+.TB_Button_Off .TB_Text
+{
+   	background-color: #efefde ;  /* Needed because of a bug on ClearType */
+}
+
+.TB_Button_On_Over .TB_Text
+{
+   	background-color: #dff1ff ;  /* Needed because of a bug on ClearType */
+}
+
+/*
+	Menu
+*/
+
+.MN_Menu
+{
+    border: 1px solid #8f8f73;
+    padding: 2px;
+    background-color: #ffffff;
+    cursor: default;
+}
+
+.MN_Menu, .MN_Menu .MN_Label
+{
+    font-size: 11px;
+    font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
+}
+
+.MN_Item_Padding
+{
+    visibility: hidden;
+    width: 3px;
+    height: 20px;
+}
+
+.MN_Icon
+{
+    background-color: #e3e3c7;
+    text-align: center;
+    height: 20px;
+}
+
+.MN_Label
+{
+    padding-left: 3px;
+    padding-right: 3px;
+}
+
+.MN_Separator
+{
+    height: 3px;
+}
+
+.MN_Separator_Line
+{
+    border-top: #b9b99d 1px solid;
+}
+
+.MN_Item .MN_Icon IMG
+{
+    filter: alpha(opacity=70);
+    opacity: 0.70;
+}
+
+.MN_Item_Over
+{
+    color: #ffffff;
+    background-color: #8f8f73;
+}
+
+.MN_Item_Over .MN_Icon
+{
+    background-color: #737357;
+}
+
+.MN_Item_Disabled IMG
+{
+    filter: gray() alpha(opacity=30); /* IE */
+    opacity: 0.30; /* Safari, Opera and Mozilla */
+}
+
+.MN_Item_Disabled .MN_Label
+{
+    color: #b7b7b7;
+}
+
+.MN_Arrow
+{
+    padding-right: 3px;
+    padding-left: 3px;
+}
+
+.MN_ConnectionLine
+{
+    background-color: #ffffff;
+}
+
+.Menu .TB_Button_On, .Menu .TB_Button_On_Over
+{
+    border: #8f8f73 1px solid;
+    background-color: #ffffff;
+}
+
+/*
+	### Panel Styles
+*/
+
+.FCK_Panel
+{
+    border: #8f8f73 1px solid;
+    padding: 2px;
+    background-color: #ffffff;
+}
+
+.FCK_Panel, .FCK_Panel TD
+{
+    font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
+    font-size: 11px;
+}
+
+/*
+	### Special Combos
+*/
+
+.SC_Panel
+{
+    overflow: auto;
+    white-space: nowrap;
+    cursor: default;
+    border: 1px solid #8f8f73;
+    padding-left: 2px;
+    padding-right: 2px;
+}
+
+.SC_Panel, .SC_Panel TD
+{
+    font-size: 11px;
+    font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
+}
+
+.SC_Item, .SC_ItemSelected
+{
+    margin-top: 2px;
+    margin-bottom: 2px;
+    background-position: left center;
+    padding-left: 11px;
+    padding-right: 3px;
+    padding-top: 2px;
+    padding-bottom: 2px;
+    text-overflow: ellipsis;
+    overflow: hidden;
+    background-repeat: no-repeat;
+    border: #dddddd 1px solid;
+}
+
+.SC_Item *, .SC_ItemSelected *
+{
+    margin-top: 0px;
+    margin-bottom: 0px;
+}
+
+.SC_ItemSelected
+{
+    border: #9a9afb 1px solid;
+    background-image: url(images/toolbar.arrowright.gif);
+}
+
+.SC_ItemOver
+{
+    border: #316ac5 1px solid;
+}
+
+.SC_Field
+{
+    border: #b7b7a6 1px solid;
+    cursor: default;
+}
+
+.SC_FieldCaption
+{
+    overflow: visible;
+    padding-right: 5px;
+    padding-left: 5px;
+    opacity: 0.75; /* Safari, Opera and Mozilla */
+    filter: alpha(opacity=70); /* IE */ /* -moz-opacity: 0.75; Mozilla (Old) */
+    height: 23px;
+    background-color: #efefde;
+}
+
+.SC_FieldLabel
+{
+    white-space: nowrap;
+    padding: 2px;
+    width: 100%;
+    cursor: default;
+    background-color: #ffffff;
+    text-overflow: ellipsis;
+    overflow: hidden;
+}
+
+.SC_FieldButton
+{
+    background-position: center center;
+    background-image: url(images/toolbar.buttonarrow.gif);
+    border-left: #b7b7a6 1px solid;
+    width: 14px;
+    background-repeat: no-repeat;
+}
+
+.SC_FieldDisabled .SC_FieldButton, .SC_FieldDisabled .SC_FieldCaption
+{
+    opacity: 0.30; /* Safari, Opera and Mozilla */
+    filter: gray() alpha(opacity=30); /* IE */ /* -moz-opacity: 0.30; Mozilla (Old) */
+}
+
+.SC_FieldOver
+{
+    border: #316ac5 1px solid;
+}
+
+.SC_FieldOver .SC_FieldButton
+{
+    border-left: #316ac5 1px solid;
+}
+
+/*
+	### Color Selector Panel
+*/
+
+.ColorBoxBorder
+{
+    border: #808080 1px solid;
+    position: static;
+}
+
+.ColorBox
+{
+    font-size: 1px;
+    width: 10px;
+    position: static;
+    height: 10px;
+}
+
+.ColorDeselected, .ColorSelected
+{
+    cursor: default;
+}
+
+.ColorDeselected
+{
+    border: #ffffff 1px solid;
+    padding: 2px;
+    float: left;
+}
+
+.ColorSelected
+{
+    border: #330066 1px solid;
+    padding: 2px;
+    float: left;
+    background-color: #c4cdd6;
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/skins/office2003/fck_dialog.css
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/skins/office2003/fck_dialog.css	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/skins/office2003/fck_dialog.css	(revision 1280)
@@ -0,0 +1,140 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Styles used by the dialog boxes.
+ */
+
+body
+{
+	margin: 0px;
+	padding: 10px;
+	background-color: #f7f8fd;
+}
+
+body, td, input, select, textarea
+{
+	font-size: 11px;
+	font-family: 'Microsoft Sans Serif' , Arial, Helvetica, Verdana;
+}
+
+body, .BackColor
+{
+	background-color: #f7f8fd;
+}
+
+.PopupBody
+{
+	margin: 0px;
+	padding: 0px;
+}
+
+.PopupTitle
+{
+	font-weight: bold;
+	font-size: 14pt;
+	color: #0e3460;
+	background-color: #8cb2fd;
+	padding: 3px 10px 3px 10px;
+}
+
+.PopupButtons
+{
+	border-top: #466ca6 1px solid;
+	background-color: #8cb2fd;
+	padding: 7px 10px 7px 10px;
+}
+
+.Button
+{
+	border: #1c3460 1px solid;
+	color: #000a28;
+	background-color: #7096d3;
+}
+
+#btnOk
+{
+	width: 100px;
+}
+
+.DarkBackground
+{
+	background-color: #d7d79f;
+}
+
+.LightBackground
+{
+	background-color: #ffffbe;
+}
+
+.PopupTitleBorder
+{
+	border-bottom: #d5d59d 1px solid;
+}
+
+.PopupTabArea
+{
+	color: #0e3460;
+	background-color: #8cb2fd;
+}
+
+.PopupTabEmptyArea
+{
+	padding-left: 10px ;
+	border-bottom: #466ca6 1px solid;
+}
+
+.PopupTab, .PopupTabSelected
+{
+	border-right: #466ca6 1px solid;
+	border-top: #466ca6 1px solid;
+	border-left: #466ca6 1px solid;
+	padding: 3px 5px 3px 5px;
+	color: #0e3460;
+}
+
+.PopupTab
+{
+	margin-top: 1px;
+	border-bottom: #466ca6 1px solid;
+	cursor: pointer;
+	cursor: hand;
+}
+
+.PopupTabSelected
+{
+	font-weight:bold;
+	cursor: default;
+	padding-top: 4px;
+	border-bottom: #f7f8fd 1px solid;
+	background-color: #f7f8fd;
+}
+
+.PopupSelectionBox
+{
+	border: #1e90ff 1px solid !important;
+	background-color: #add8e6 !important;
+	cursor: pointer;
+	cursor: hand;
+}
+
+#tdBrowse 
+{
+	vertical-align: bottom;
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/skins/office2003/fck_editor.css
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/skins/office2003/fck_editor.css	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/skins/office2003/fck_editor.css	(revision 1280)
@@ -0,0 +1,476 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Styles used by the editor IFRAME and Toolbar.
+ */
+
+/*
+	### Basic Editor IFRAME Styles.
+*/
+
+body
+{
+	padding: 1px;
+	margin: 0;
+	background-color: #ffffff;
+}
+
+#xEditingArea
+{
+    border: #696969 1px solid;
+}
+
+.SourceField
+{
+    padding: 5px;
+    margin: 0px;
+    font-family: Monospace;
+}
+
+/*
+	Toolbar
+*/
+
+.TB_ToolbarSet, .TB_Expand, .TB_Collapse
+{
+    cursor: default;
+    background-color: #f7f8fd;
+}
+
+.TB_ToolbarSet
+{
+    border-top: #f7f8fd 1px outset;
+    border-bottom: #f7f8fd 1px outset;
+}
+
+.TB_ToolbarSet TD
+{
+    font-size: 11px;
+    font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
+}
+
+.TB_Toolbar
+{
+   	background-color: #d6dff7;
+	background-image: url(images/toolbar.bg.gif);
+	background-repeat: repeat-x;
+    display: inline-table;
+}
+
+.TB_Separator
+{
+    width: 1px;
+    height: 16px;
+    margin: 2px;
+    background-color: #B2CBFF;
+}
+
+.TB_Start
+{
+    background-image: url(images/toolbar.start.gif);
+    background-repeat: no-repeat;
+    background-position: center center;
+    margin: 0px;
+    width: 7px;
+    height: 24px;
+}
+
+.TB_End
+{
+    background-image: url(images/toolbar.end.gif);
+    background-repeat: no-repeat;
+    background-position: center left;
+    height: 24px;
+    width: 4px;
+}
+
+.TB_ExpandImg
+{
+    background-image: url(images/toolbar.expand.gif);
+    background-repeat: no-repeat;
+}
+
+.TB_CollapseImg
+{
+    background-image: url(images/toolbar.collapse.gif);
+    background-repeat: no-repeat;
+}
+
+.TB_SideBorder
+{
+    background-color: #696969;
+}
+
+.TB_Expand, .TB_Collapse
+{
+    padding: 2px 2px 2px 2px;
+    border: #f7f8fd 1px outset;
+}
+
+.TB_Collapse
+{
+    width: 5px;
+}
+
+.TB_Break
+{
+    height: 24px; /* IE needs the height to be set, otherwise no break */
+}
+
+/*
+	Toolbar Button
+*/
+
+.TB_Button_On, .TB_Button_Off, .TB_Button_On_Over, .TB_Button_Off_Over, .TB_Button_Disabled
+{
+    margin: 1px;
+    height: 22px; /* The height is necessary, otherwise IE will not apply the alpha */
+}
+
+.TB_Button_On
+{
+    margin: 0px;
+    border: #316ac5 1px solid;
+    background-color: #c1d2ee;
+}
+
+.TB_Button_On_Over, .TB_Button_Off_Over
+{
+    margin: 0px ;
+    border: #316ac5 1px solid;
+    background-color: #dff1ff;
+}
+
+.TB_Button_Off
+{
+    filter: alpha(opacity=70); /* IE */
+    opacity: 0.70; /* Safari, Opera and Mozilla */
+}
+
+.TB_Button_Disabled
+{
+    filter: gray() alpha(opacity=30); /* IE */
+    opacity: 0.30; /* Safari, Opera and Mozilla */
+}
+
+.TB_Button_Padding
+{
+    visibility: hidden;
+    width: 3px;
+    height: 22px;
+}
+
+.TB_Button_Image
+{
+    overflow: hidden;
+    width: 16px;
+    height: 16px;
+    margin: 3px;
+    background-repeat: no-repeat;
+}
+
+.TB_Button_Image img
+{
+    position: relative;
+}
+
+.TB_Button_Off .TB_Button_Text
+{
+   	background-color: #d6dff7;  /* Needed because of a bug on ClearType */
+	background-image: url(images/toolbar.bg.gif);
+	background-repeat: repeat-x;
+}
+
+.TB_ConnectionLine
+{
+    background-color: #f7f8fd;
+    height: 1px;
+    margin-left: 1px;   /* ltr */
+    margin-right: 1px;  /* rtl */
+}
+
+.TB_Button_Off .TB_Text
+{
+   	background-color: #d6dff7;  /* Needed because of a bug on ClearType */
+	background-image: url(images/toolbar.bg.gif);
+	background-repeat: repeat-x;
+}
+
+.TB_Button_On_Over .TB_Text
+{
+   	background-color: #dff1ff ;  /* Needed because of a bug on ClearType */
+}
+
+/*
+	Menu
+*/
+
+.MN_Menu
+{
+    border: 1px solid #8f8f73;
+    padding: 2px;
+    background-color: #f7f8fd;
+    cursor: default;
+}
+
+.MN_Menu, .MN_Menu .MN_Label
+{
+    font-size: 11px;
+    font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
+}
+
+.MN_Item_Padding
+{
+    visibility: hidden;
+    width: 3px;
+    height: 20px;
+}
+
+.MN_Icon
+{
+    background-color: #d6dff7;
+    text-align: center;
+    height: 20px;
+}
+
+.MN_Label
+{
+    padding-left: 3px;
+    padding-right: 3px;
+}
+
+.MN_Separator
+{
+    height: 3px;
+}
+
+.MN_Separator_Line
+{
+    border-top: #b9b99d 1px solid;
+}
+
+.MN_Item .MN_Icon IMG
+{
+    filter: alpha(opacity=70);
+    opacity: 0.70;
+}
+
+.MN_Item_Over
+{
+    color: #ffffff;
+    background-color: #7096FA;
+}
+
+.MN_Item_Over .MN_Icon
+{
+    background-color: #466ca6;
+}
+
+.MN_Item_Disabled IMG
+{
+    filter: gray() alpha(opacity=30); /* IE */
+    opacity: 0.30; /* Safari, Opera and Mozilla */
+}
+
+.MN_Item_Disabled .MN_Label
+{
+    color: #b7b7b7;
+}
+
+.MN_Arrow
+{
+    padding-right: 3px;
+    padding-left: 3px;
+}
+
+.MN_ConnectionLine
+{
+    background-color: #f7f8fd;
+}
+
+.Menu .TB_Button_On, .Menu .TB_Button_On_Over
+{
+    border: #8f8f73 1px solid;
+    background-color: #f7f8fd;
+}
+
+/*
+	### Panel Styles
+*/
+
+.FCK_Panel
+{
+    border: #8f8f73 1px solid;
+    padding: 2px;
+    background-color: #f7f8fd;
+}
+
+.FCK_Panel, .FCK_Panel TD
+{
+    font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
+    font-size: 11px;
+}
+
+/*
+	### Special Combos
+*/
+
+.SC_Panel
+{
+    overflow: auto;
+    white-space: nowrap;
+    cursor: default;
+    border: 1px solid #8f8f73;
+    padding-left: 2px;
+    padding-right: 2px;
+}
+
+.SC_Panel, .SC_Panel TD
+{
+    font-size: 11px;
+    font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
+}
+
+.SC_Item, .SC_ItemSelected
+{
+    margin-top: 2px;
+    margin-bottom: 2px;
+    background-position: left center;
+    padding-left: 11px;
+    padding-right: 3px;
+    padding-top: 2px;
+    padding-bottom: 2px;
+    text-overflow: ellipsis;
+    overflow: hidden;
+    background-repeat: no-repeat;
+    border: #dddddd 1px solid;
+}
+
+.SC_Item *, .SC_ItemSelected *
+{
+    margin-top: 0px;
+    margin-bottom: 0px;
+}
+
+.SC_ItemSelected
+{
+    border: #9a9afb 1px solid;
+    background-image: url(images/toolbar.arrowright.gif);
+}
+
+.SC_ItemOver
+{
+    border: #316ac5 1px solid;
+}
+
+.SC_Field
+{
+    margin-top: 2px ;
+    border: #b7b7a6 1px solid;
+    cursor: default;
+}
+
+.SC_FieldCaption
+{
+    overflow: visible;
+    padding-right: 5px;
+    padding-left: 5px;
+    opacity: 0.75; /* Safari, Opera and Mozilla */
+    filter: alpha(opacity=70); /* IE */ /* -moz-opacity: 0.75; Mozilla (Old) */
+    height: 23px;
+   	background-color: #d6dff7;  /* Needed because of a bug on ClearType */
+	background-image: url(images/toolbar.bg.gif);
+	background-repeat: repeat-x;
+/*    background-color:  inherit;     Maybe this is needed wait to check */
+}
+
+.SC_FieldLabel
+{
+    white-space: nowrap;
+    padding: 2px;
+    width: 100%;
+    cursor: default;
+    background-color: #ffffff;
+    text-overflow: ellipsis;
+    overflow: hidden;
+}
+
+.SC_FieldButton
+{
+    background-position: center center;
+    background-image: url(images/toolbar.buttonarrow.gif);
+    border-left: #b7b7a6 1px solid;
+    width: 14px;
+    background-repeat: no-repeat;
+}
+
+.SC_FieldDisabled .SC_FieldButton, .SC_FieldDisabled .SC_FieldCaption
+{
+    opacity: 0.30; /* Safari, Opera and Mozilla */
+    filter: gray() alpha(opacity=30); /* IE */ /* -moz-opacity: 0.30; Mozilla (Old) */
+}
+
+.SC_FieldOver
+{
+    border: #316ac5 1px solid;
+}
+
+.SC_FieldOver .SC_FieldButton
+{
+    border-left: #316ac5 1px solid;
+}
+
+/*
+	### Color Selector Panel
+*/
+
+.ColorBoxBorder
+{
+    border: #808080 1px solid;
+    position: static;
+}
+
+.ColorBox
+{
+    font-size: 1px;
+    width: 10px;
+    position: static;
+    height: 10px;
+}
+
+.ColorDeselected, .ColorSelected
+{
+    cursor: default;
+}
+
+.ColorDeselected
+{
+    border: #ffffff 1px solid;
+    padding: 2px;
+    float: left;
+}
+
+.ColorSelected
+{
+    border: #330066 1px solid;
+    padding: 2px;
+    float: left;
+    background-color: #c4cdd6;
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/skins/silver/fck_dialog.css
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/skins/silver/fck_dialog.css	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/skins/silver/fck_dialog.css	(revision 1280)
@@ -0,0 +1,143 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Styles used by the dialog boxes.
+ */
+
+body
+{
+	margin: 0px;
+	padding: 10px;
+	background-color: #f7f7f7;
+}
+
+body, td, input, select, textarea
+{
+	font-size: 11px;
+	font-family: 'Microsoft Sans Serif' , Arial, Helvetica, Verdana;
+}
+
+body, .BackColor
+{
+	background-color: #f7f7f7;
+}
+
+.PopupBody
+{
+	margin: 0px;
+	padding: 0px;
+}
+
+.PopupTitle
+{
+	padding-right: 10px;
+	padding-left: 10px;
+	font-weight: bold;
+	font-size: 14pt;
+	padding-bottom: 3px;
+	color: #504845;
+	padding-top: 3px;
+	background-color: #dedede;
+}
+
+.PopupButtons
+{
+	border-top: #cec6b5 1px solid;
+	background-color: #DEDEDE;
+	padding: 7px 10px 7px 10px;
+}
+
+.Button
+{
+	border: #7a7261 1px solid;
+	color: #504845;
+	background-color: #cec6b5;
+}
+
+#btnOk
+{
+	width: 100px;
+}
+
+.DarkBackground
+{
+	background-color: #d7d79f;
+}
+
+.LightBackground
+{
+	background-color: #ffffbe;
+}
+
+.PopupTitleBorder
+{
+	border-bottom: #cec6b5 1px solid;
+}
+
+.PopupTabArea
+{
+	color: #504845;
+	background-color: #DEDEDE;
+}
+
+.PopupTabEmptyArea
+{
+	padding-left: 10px ;
+	border-bottom: #cec6b5 1px solid;
+}
+
+.PopupTab, .PopupTabSelected
+{
+	border-right: #cec6b5 1px solid;
+	border-top: #cec6b5 1px solid;
+	border-left: #cec6b5 1px solid;
+	padding: 3px 5px 3px 5px;
+	color: #504845;
+}
+
+.PopupTab
+{
+	margin-top: 1px;
+	border-bottom: #cec6b5 1px solid;
+	cursor: pointer;
+	cursor: hand;
+}
+
+.PopupTabSelected
+{
+	font-weight:bold;
+	cursor: default;
+	padding-top: 4px;
+	border-bottom: #f1f1e3 1px solid;
+	background-color: #f7f7f7;
+}
+
+.PopupSelectionBox
+{
+	border: #a9a9a9 1px solid !important;
+	background-color: #dcdcdc !important;
+	cursor: pointer;
+	cursor: hand;
+}
+
+#tdBrowse 
+{
+	vertical-align: bottom;
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/skins/silver/fck_editor.css
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/skins/silver/fck_editor.css	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/editor/skins/silver/fck_editor.css	(revision 1280)
@@ -0,0 +1,473 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Styles used by the editor IFRAME and Toolbar.
+ */
+
+/*
+	### Basic Editor IFRAME Styles.
+*/
+
+body
+{
+	padding: 1px;
+	margin: 0;
+	background-color: #ffffff;
+}
+
+#xEditingArea
+{
+	border: #696969 1px solid;
+}
+
+.SourceField
+{
+	padding: 5px;
+	margin: 0px;
+	font-family: Monospace;
+}
+
+/*
+	Toolbar
+*/
+
+.TB_ToolbarSet, .TB_Expand, .TB_Collapse
+{
+    cursor: default;
+	background-color: #f7f7f7;
+}
+
+.TB_ToolbarSet
+{
+	padding: 1px;
+	border-top: #efefde 1px outset;
+	border-bottom: #efefde 1px outset;
+}
+
+.TB_ToolbarSet TD
+{
+	font-size: 11px;
+	font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
+}
+
+.TB_Toolbar
+{
+    display: inline-table;
+}
+
+.TB_Separator
+{
+    width: 1px;
+    height: 21px;
+    margin: 2px;
+    background-color: #C6C3BD;
+}
+
+.TB_Start
+{
+    background-image: url(images/toolbar.start.gif);
+    margin-left: 2px;
+    margin-right: 2px;
+    width: 3px;
+    background-repeat: no-repeat;
+    height: 27px;
+    background-position: center center;
+}
+
+.TB_End
+{
+	display: none;
+}
+
+.TB_ExpandImg
+{
+	background-image: url(images/toolbar.expand.gif);
+	background-repeat: no-repeat;
+}
+
+.TB_CollapseImg
+{
+	background-image: url(images/toolbar.collapse.gif);
+	background-repeat: no-repeat;
+}
+
+.TB_SideBorder
+{
+	background-color: #696969;
+}
+
+.TB_Expand, .TB_Collapse
+{
+	padding: 2px 2px 2px 2px;
+	border: #efefde 1px outset;
+}
+
+.TB_Collapse
+{
+	border: #efefde 1px outset;
+	width: 5px;
+}
+
+.TB_Break
+{
+	height: 27px;
+}
+
+/*
+	Toolbar Button
+*/
+
+.TB_Button_On, .TB_Button_Off, .TB_Button_On_Over, .TB_Button_Off_Over, .TB_Button_Disabled
+{
+	padding: 1px ;
+	margin:1px;
+	height: 21px;
+}
+
+.TB_Button_On, .TB_Button_Off, .TB_Button_On_Over, .TB_Button_Off_Over, .TB_Button_Disabled
+{
+	border: #cec6b5 1px solid;
+}
+
+.TB_Button_On
+{
+	border-color: #316ac5;
+	background-color: #c1d2ee;
+}
+
+.TB_Button_On_Over, .TB_Button_Off_Over
+{
+    border: #316ac5 1px solid;
+    background-color: #dff1ff;
+}
+
+.TB_Button_Off
+{
+	background: #efefef url(images/toolbar.buttonbg.gif) repeat-x;
+}
+
+.TB_Button_Off, .TB_Combo_Off
+{
+	opacity: 0.70; /* Safari, Opera and Mozilla */
+	filter: alpha(opacity=70); /* IE */
+	/* -moz-opacity: 0.70; Mozilla (Old) */
+}
+
+.TB_Button_Disabled
+{
+    opacity: 0.30; /* Safari, Opera and Mozilla */
+    filter: gray() alpha(opacity=30); /* IE */
+}
+
+.TB_Button_Padding
+{
+    visibility: hidden;
+    width: 3px;
+    height: 21px;
+}
+
+.TB_Button_Image
+{
+    overflow: hidden;
+    width: 16px;
+    height: 16px;
+    margin: 3px;
+    margin-top: 4px;
+    margin-bottom: 2px;
+    background-repeat: no-repeat;
+}
+
+/* For composed button ( icon + text, icon + arrow ), we must compensate the table */
+.TB_Button_On TABLE .TB_Button_Image,
+.TB_Button_Off TABLE .TB_Button_Image,
+.TB_Button_On_Over TABLE .TB_Button_Image,
+.TB_Button_Off_Over TABLE .TB_Button_Image,
+.TB_Button_Disabled TABLE .TB_Button_Image
+{
+    margin-top: 3px;
+}
+
+.TB_Button_Image img
+{
+    position: relative;
+}
+
+.TB_ConnectionLine
+{
+    background-color: #ffffff;
+    height: 1px;
+    margin-left: 1px;   /* ltr */
+    margin-right: 1px;  /* rtl */
+}
+
+/*
+	Menu
+*/
+
+.MN_Menu
+{
+    border: 1px solid #8f8f73;
+    padding: 2px;
+    background-color: #f7f7f7;
+    cursor: default;
+}
+
+.MN_Menu, .MN_Menu .MN_Label
+{
+    font-size: 11px;
+    font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
+}
+
+.MN_Item_Padding
+{
+    visibility: hidden;
+    width: 3px;
+    height: 20px;
+}
+
+.MN_Icon
+{
+    background-color: #dedede;
+    text-align: center;
+    height: 20px;
+}
+
+.MN_Label
+{
+    padding-left: 3px;
+    padding-right: 3px;
+}
+
+.MN_Separator
+{
+    height: 3px;
+}
+
+.MN_Separator_Line
+{
+    border-top: #b9b99d 1px solid;
+}
+
+.MN_Item .MN_Icon IMG
+{
+    filter: alpha(opacity=70);
+    opacity: 0.70;
+}
+
+.MN_Item_Over
+{
+    color: #ffffff;
+    background-color: #8a857d;
+}
+
+.MN_Item_Over .MN_Icon
+{
+    background-color: #6c6761;
+}
+
+.MN_Item_Disabled IMG
+{
+    filter: gray() alpha(opacity=30); /* IE */
+    opacity: 0.30; /* Safari, Opera and Mozilla */
+}
+
+.MN_Item_Disabled .MN_Label
+{
+    color: #b7b7b7;
+}
+
+.MN_Arrow
+{
+    padding-right: 3px;
+    padding-left: 3px;
+}
+
+.MN_ConnectionLine
+{
+    background-color: #ffffff;
+}
+
+.Menu .TB_Button_On, .Menu .TB_Button_On_Over
+{
+    border: #8f8f73 1px solid;
+    background-color: #ffffff;
+}
+
+/*
+	### Panel Styles
+*/
+
+.FCK_Panel
+{
+    border: #8f8f73 1px solid;
+    padding: 2px;
+    background-color: #ffffff;
+}
+
+.FCK_Panel, .FCK_Panel TD
+{
+    font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
+    font-size: 11px;
+}
+
+/*
+	### Special Combos
+*/
+
+.SC_Panel
+{
+    overflow: auto;
+    white-space: nowrap;
+    cursor: default;
+    border: 1px solid #8f8f73;
+    padding-left: 2px;
+    padding-right: 2px;
+}
+
+.SC_Panel, .SC_Panel TD
+{
+    font-size: 11px;
+    font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
+}
+
+.SC_Item, .SC_ItemSelected
+{
+    margin-top: 2px;
+    margin-bottom: 2px;
+    background-position: left center;
+    padding-left: 11px;
+    padding-right: 3px;
+    padding-top: 2px;
+    padding-bottom: 2px;
+    text-overflow: ellipsis;
+    overflow: hidden;
+    background-repeat: no-repeat;
+    border: #dddddd 1px solid;
+}
+
+.SC_Item *, .SC_ItemSelected *
+{
+    margin-top: 0px;
+    margin-bottom: 0px;
+}
+
+.SC_ItemSelected
+{
+    border: #9a9afb 1px solid;
+    background-image: url(images/toolbar.arrowright.gif);
+}
+
+.SC_ItemOver
+{
+    border: #316ac5 1px solid;
+}
+
+.SC_Field
+{
+    margin-top:1px ;
+    border: #b7b7a6 1px solid;
+    cursor: default;
+}
+
+.SC_FieldCaption
+{
+    padding-top: 1px ;
+    overflow: visible;
+    padding-right: 5px;
+    padding-left: 5px;
+    opacity: 0.75; /* Safari, Opera and Mozilla */
+    filter: alpha(opacity=70); /* IE */ /* -moz-opacity: 0.75; Mozilla (Old) */
+    height: 23px;
+    background-color: #f7f7f7;
+}
+
+.SC_FieldLabel
+{
+    white-space: nowrap;
+    padding: 2px;
+    width: 100%;
+    cursor: default;
+    background-color: #ffffff;
+    text-overflow: ellipsis;
+    overflow: hidden;
+}
+
+.SC_FieldButton
+{
+    background-position: center center;
+    background-image: url(images/toolbar.buttonarrow.gif);
+    border-left: #b7b7a6 1px solid;
+    width: 14px;
+    background-repeat: no-repeat;
+}
+
+.SC_FieldDisabled .SC_FieldButton, .SC_FieldDisabled .SC_FieldCaption
+{
+    opacity: 0.30; /* Safari, Opera and Mozilla */
+    filter: gray() alpha(opacity=30); /* IE */ /* -moz-opacity: 0.30; Mozilla (Old) */
+}
+
+.SC_FieldOver
+{
+    border: #316ac5 1px solid;
+}
+
+.SC_FieldOver .SC_FieldButton
+{
+    border-left: #316ac5 1px solid;
+}
+
+/*
+	### Color Selector Panel
+*/
+
+.ColorBoxBorder
+{
+    border: #808080 1px solid;
+    position: static;
+}
+
+.ColorBox
+{
+    font-size: 1px;
+    width: 10px;
+    position: static;
+    height: 10px;
+}
+
+.ColorDeselected, .ColorSelected
+{
+    cursor: default;
+}
+
+.ColorDeselected
+{
+    border: #ffffff 1px solid;
+    padding: 2px;
+    float: left;
+}
+
+.ColorSelected
+{
+    border: #316ac5 1px solid;
+    padding: 2px;
+    float: left;
+    background-color: #c1d2ee;
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/fckconfig.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/fckconfig.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/fckconfig.js	(revision 1280)
@@ -0,0 +1,306 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Editor configuration settings.
+ *
+ * Follow this link for more information:
+ * http://wiki.fckeditor.net/Developer%27s_Guide/Configuration/Configurations_Settings
+ */
+
+FCKConfig.CustomConfigurationsPath = '' ;
+
+FCKConfig.EditorAreaCSS = FCKConfig.BasePath + 'css/fck_editorarea.css' ;
+FCKConfig.EditorAreaStyles = '' ;
+FCKConfig.ToolbarComboPreviewCSS = '' ;
+
+FCKConfig.DocType = '' ;
+
+FCKConfig.BaseHref = '' ;
+
+FCKConfig.FullPage = false ;
+
+// The following option determines whether the "Show Blocks" feature is enabled or not at startup.
+FCKConfig.StartupShowBlocks = false ;
+
+FCKConfig.Debug = false ;
+FCKConfig.AllowQueryStringDebug = true ;
+
+FCKConfig.SkinPath = FCKConfig.BasePath + 'skins/default/' ;
+FCKConfig.PreloadImages = [ FCKConfig.SkinPath + 'images/toolbar.start.gif', FCKConfig.SkinPath + 'images/toolbar.buttonarrow.gif' ] ;
+
+FCKConfig.PluginsPath = FCKConfig.BasePath + 'plugins/' ;
+
+// FCKConfig.Plugins.Add( 'autogrow' ) ;
+// FCKConfig.Plugins.Add( 'dragresizetable' );
+FCKConfig.AutoGrowMax = 400 ;
+
+// FCKConfig.ProtectedSource.Add( /<%[\s\S]*?%>/g ) ;	// ASP style server side code <%...%>
+// FCKConfig.ProtectedSource.Add( /<\?[\s\S]*?\?>/g ) ;	// PHP style server side code
+// FCKConfig.ProtectedSource.Add( /(<asp:[^\>]+>[\s|\S]*?<\/asp:[^\>]+>)|(<asp:[^\>]+\/>)/gi ) ;	// ASP.Net style tags <asp:control>
+
+FCKConfig.AutoDetectLanguage	= true ;
+FCKConfig.DefaultLanguage		= 'en' ;
+FCKConfig.ContentLangDirection	= 'ltr' ;
+
+FCKConfig.ProcessHTMLEntities	= true ;
+FCKConfig.IncludeLatinEntities	= true ;
+FCKConfig.IncludeGreekEntities	= true ;
+
+FCKConfig.ProcessNumericEntities = false ;
+
+FCKConfig.AdditionalNumericEntities = ''  ;		// Single Quote: "'"
+
+FCKConfig.FillEmptyBlocks	= true ;
+
+FCKConfig.FormatSource		= true ;
+FCKConfig.FormatOutput		= true ;
+FCKConfig.FormatIndentator	= '    ' ;
+
+FCKConfig.GeckoUseSPAN	= false ;
+FCKConfig.StartupFocus	= false ;
+FCKConfig.ForcePasteAsPlainText	= false ;
+FCKConfig.AutoDetectPasteFromWord = true ;	// IE only.
+FCKConfig.ShowDropDialog = true ;
+FCKConfig.ForceSimpleAmpersand	= false ;
+FCKConfig.TabSpaces		= 0 ;
+FCKConfig.ShowBorders	= true ;
+FCKConfig.SourcePopup	= false ;
+FCKConfig.ToolbarStartExpanded	= true ;
+FCKConfig.ToolbarCanCollapse	= true ;
+FCKConfig.IgnoreEmptyParagraphValue = true ;
+FCKConfig.PreserveSessionOnFileBrowser = false ;
+FCKConfig.FloatingPanelsZIndex = 10000 ;
+FCKConfig.HtmlEncodeOutput = false ;
+
+FCKConfig.TemplateReplaceAll = true ;
+FCKConfig.TemplateReplaceCheckbox = true ;
+
+FCKConfig.ToolbarLocation = 'In' ;
+
+FCKConfig.ToolbarSets["Default"] = [
+	['Source','DocProps','-','Save','NewPage','Preview','-','Templates'],
+	['Cut','Copy','Paste','PasteText','PasteWord','-','Print','SpellCheck'],
+	['Undo','Redo','-','Find','Replace','-','SelectAll','RemoveFormat'],
+	['Form','Checkbox','Radio','TextField','Textarea','Select','Button','ImageButton','HiddenField'],
+	'/',
+	['Bold','Italic','Underline','StrikeThrough','-','Subscript','Superscript'],
+	['OrderedList','UnorderedList','-','Outdent','Indent','Blockquote'],
+	['JustifyLeft','JustifyCenter','JustifyRight','JustifyFull'],
+	['Link','Unlink','Anchor'],
+	['Image','Flash','Table','Rule','Smiley','SpecialChar','PageBreak'],
+	'/',
+	['Style','FontFormat','FontName','FontSize'],
+	['TextColor','BGColor'],
+	['FitWindow','ShowBlocks','-','About']		// No comma for the last row.
+] ;
+
+FCKConfig.ToolbarSets["Basic"] = [
+	['Bold','Italic','-','OrderedList','UnorderedList','-','Link','Unlink','-','About']
+] ;
+
+FCKConfig.EnterMode = 'p' ;			// p | div | br
+FCKConfig.ShiftEnterMode = 'br' ;	// p | div | br
+
+FCKConfig.Keystrokes = [
+	[ CTRL + 65 /*A*/, true ],
+	[ CTRL + 67 /*C*/, true ],
+	[ CTRL + 70 /*F*/, true ],
+	[ CTRL + 83 /*S*/, true ],
+	[ CTRL + 88 /*X*/, true ],
+	[ CTRL + 86 /*V*/, 'Paste' ],
+	[ SHIFT + 45 /*INS*/, 'Paste' ],
+	[ CTRL + 88 /*X*/, 'Cut' ],
+	[ SHIFT + 46 /*DEL*/, 'Cut' ],
+	[ CTRL + 90 /*Z*/, 'Undo' ],
+	[ CTRL + 89 /*Y*/, 'Redo' ],
+	[ CTRL + SHIFT + 90 /*Z*/, 'Redo' ],
+	[ CTRL + 76 /*L*/, 'Link' ],
+	[ CTRL + 66 /*B*/, 'Bold' ],
+	[ CTRL + 73 /*I*/, 'Italic' ],
+	[ CTRL + 85 /*U*/, 'Underline' ],
+	[ CTRL + SHIFT + 83 /*S*/, 'Save' ],
+	[ CTRL + ALT + 13 /*ENTER*/, 'FitWindow' ],
+	[ CTRL + 9 /*TAB*/, 'Source' ]
+] ;
+
+FCKConfig.ContextMenu = ['Generic','Link','Anchor','Image','Flash','Select','Textarea','Checkbox','Radio','TextField','HiddenField','ImageButton','Button','BulletedList','NumberedList','Table','Form'] ;
+FCKConfig.BrowserContextMenuOnCtrl = false ;
+
+FCKConfig.EnableMoreFontColors = true ;
+FCKConfig.FontColors = '000000,993300,333300,003300,003366,000080,333399,333333,800000,FF6600,808000,808080,008080,0000FF,666699,808080,FF0000,FF9900,99CC00,339966,33CCCC,3366FF,800080,999999,FF00FF,FFCC00,FFFF00,00FF00,00FFFF,00CCFF,993366,C0C0C0,FF99CC,FFCC99,FFFF99,CCFFCC,CCFFFF,99CCFF,CC99FF,FFFFFF' ;
+
+FCKConfig.FontFormats	= 'p;div;pre;address;h1;h2;h3;h4;h5;h6' ;
+FCKConfig.FontNames		= 'Arial;Comic Sans MS;Courier New;Tahoma;Times New Roman;Verdana' ;
+FCKConfig.FontSizes		= 'smaller;larger;xx-small;x-small;small;medium;large;x-large;xx-large' ;
+
+FCKConfig.StylesXmlPath		= FCKConfig.EditorPath + 'fckstyles.xml' ;
+FCKConfig.TemplatesXmlPath	= FCKConfig.EditorPath + 'fcktemplates.xml' ;
+
+FCKConfig.SpellChecker			= 'ieSpell' ;	// 'ieSpell' | 'SpellerPages'
+FCKConfig.IeSpellDownloadUrl	= 'http://www.iespell.com/download.php' ;
+FCKConfig.SpellerPagesServerScript = 'server-scripts/spellchecker.php' ;	// Available extension: .php .cfm .pl
+FCKConfig.FirefoxSpellChecker	= false ;
+
+FCKConfig.MaxUndoLevels = 15 ;
+
+FCKConfig.DisableObjectResizing = false ;
+FCKConfig.DisableFFTableHandles = true ;
+
+FCKConfig.LinkDlgHideTarget		= false ;
+FCKConfig.LinkDlgHideAdvanced	= false ;
+
+FCKConfig.ImageDlgHideLink		= false ;
+FCKConfig.ImageDlgHideAdvanced	= false ;
+
+FCKConfig.FlashDlgHideAdvanced	= false ;
+
+FCKConfig.ProtectedTags = '' ;
+
+// This will be applied to the body element of the editor
+FCKConfig.BodyId = '' ;
+FCKConfig.BodyClass = '' ;
+
+FCKConfig.DefaultStyleLabel = '' ;
+FCKConfig.DefaultFontFormatLabel = '' ;
+FCKConfig.DefaultFontLabel = '' ;
+FCKConfig.DefaultFontSizeLabel = '' ;
+
+FCKConfig.DefaultLinkTarget = '' ;
+
+// The option switches between trying to keep the html structure or do the changes so the content looks like it was in Word
+FCKConfig.CleanWordKeepsStructure = false ;
+
+// Only inline elements are valid.
+FCKConfig.RemoveFormatTags = 'b,big,code,del,dfn,em,font,i,ins,kbd,q,samp,small,span,strike,strong,sub,sup,tt,u,var' ;
+
+FCKConfig.CustomStyles = 
+{
+	'Red Title'	: { Element : 'h3', Styles : { 'color' : 'Red' } }
+};
+
+// Do not add, rename or remove styles here. Only apply definition changes.
+FCKConfig.CoreStyles = 
+{
+	// Basic Inline Styles.
+	'Bold'			: { Element : 'b', Overrides : 'strong' },
+	'Italic'		: { Element : 'i', Overrides : 'em' },
+	'Underline'		: { Element : 'u' },
+	'StrikeThrough'	: { Element : 'strike' },
+	'Subscript'		: { Element : 'sub' },
+	'Superscript'	: { Element : 'sup' },
+	
+	// Basic Block Styles (Font Format Combo).
+	'p'				: { Element : 'p' },
+	'div'			: { Element : 'div' },
+	'pre'			: { Element : 'pre' },
+	'address'		: { Element : 'address' },
+	'h1'			: { Element : 'h1' },
+	'h2'			: { Element : 'h2' },
+	'h3'			: { Element : 'h3' },
+	'h4'			: { Element : 'h4' },
+	'h5'			: { Element : 'h5' },
+	'h6'			: { Element : 'h6' },
+	
+	// Other formatting features.
+	'FontFace' : 
+	{ 
+		Element		: 'span', 
+		Styles		: { 'font-family' : '#("Font")' }, 
+		Overrides	: [ { Element : 'font', Attributes : { 'face' : null } } ]
+	},
+	
+	'Size' :
+	{ 
+		Element		: 'span', 
+		Styles		: { 'font-size' : '#("Size","fontSize")' }, 
+		Overrides	: [ { Element : 'font', Attributes : { 'size' : null } } ]
+	},
+	
+	'Color' :
+	{ 
+		Element		: 'span', 
+		Styles		: { 'color' : '#("Color","color")' }, 
+		Overrides	: [ { Element : 'font', Attributes : { 'color' : null } } ]
+	},
+	
+	'BackColor'		: { Element : 'span', Styles : { 'background-color' : '#("Color","color")' } }
+};
+
+// The distance of an indentation step.
+FCKConfig.IndentLength = 40 ;
+FCKConfig.IndentUnit = 'px' ;
+
+// Alternatively, FCKeditor allows the use of CSS classes for block indentation.
+// This overrides the IndentLength/IndentUnit settings.
+FCKConfig.IndentClasses = [] ;
+
+// [ Left, Center, Right, Justified ]
+FCKConfig.JustifyClasses = [] ;
+
+// The following value defines which File Browser connector and Quick Upload
+// "uploader" to use. It is valid for the default implementaion and it is here
+// just to make this configuration file cleaner.
+// It is not possible to change this value using an external file or even
+// inline when creating the editor instance. In that cases you must set the
+// values of LinkBrowserURL, ImageBrowserURL and so on.
+// Custom implementations should just ignore it.
+var _FileBrowserLanguage	= 'php' ;	// asp | aspx | cfm | lasso | perl | php | py
+var _QuickUploadLanguage	= 'php' ;	// asp | aspx | cfm | lasso | perl | php | py
+
+// Don't care about the following line. It just calculates the correct connector
+// extension to use for the default File Browser (Perl uses "cgi").
+var _FileBrowserExtension = _FileBrowserLanguage == 'perl' ? 'cgi' : _FileBrowserLanguage ;
+
+FCKConfig.LinkBrowser = true ;
+FCKConfig.LinkBrowserURL = FCKConfig.BasePath + 'filemanager/browser/default/browser.html?Connector=../../connectors/' + _FileBrowserLanguage + '/connector.' + _FileBrowserExtension ;
+FCKConfig.LinkBrowserWindowWidth	= FCKConfig.ScreenWidth * 0.7 ;		// 70%
+FCKConfig.LinkBrowserWindowHeight	= FCKConfig.ScreenHeight * 0.7 ;	// 70%
+
+FCKConfig.ImageBrowser = true ;
+FCKConfig.ImageBrowserURL = FCKConfig.BasePath + 'filemanager/browser/default/browser.html?Type=Image&Connector=../../connectors/' + _FileBrowserLanguage + '/connector.' + _FileBrowserExtension ;
+FCKConfig.ImageBrowserWindowWidth  = FCKConfig.ScreenWidth * 0.7 ;	// 70% ;
+FCKConfig.ImageBrowserWindowHeight = FCKConfig.ScreenHeight * 0.7 ;	// 70% ;
+
+FCKConfig.FlashBrowser = true ;
+FCKConfig.FlashBrowserURL = FCKConfig.BasePath + 'filemanager/browser/default/browser.html?Type=Flash&Connector=../../connectors/' + _FileBrowserLanguage + '/connector.' + _FileBrowserExtension ;
+FCKConfig.FlashBrowserWindowWidth  = FCKConfig.ScreenWidth * 0.7 ;	//70% ;
+FCKConfig.FlashBrowserWindowHeight = FCKConfig.ScreenHeight * 0.7 ;	//70% ;
+
+FCKConfig.LinkUpload = true ;
+FCKConfig.LinkUploadURL = FCKConfig.BasePath + 'filemanager/connectors/' + _QuickUploadLanguage + '/upload.' + _QuickUploadLanguage ;
+FCKConfig.LinkUploadAllowedExtensions	= "" ;			// empty for all
+FCKConfig.LinkUploadDeniedExtensions	= ".(html|htm|php|php2|php3|php4|php5|phtml|pwml|inc|asp|aspx|ascx|jsp|cfm|cfc|pl|bat|exe|com|dll|vbs|js|reg|cgi|htaccess|asis|sh|shtml|shtm|phtm)$" ;	// empty for no one
+
+FCKConfig.ImageUpload = true ;
+FCKConfig.ImageUploadURL = FCKConfig.BasePath + 'filemanager/connectors/' + _QuickUploadLanguage + '/upload.' + _QuickUploadLanguage + '?Type=Image' ;
+FCKConfig.ImageUploadAllowedExtensions	= ".(jpg|gif|jpeg|png|bmp)$" ;		// empty for all
+FCKConfig.ImageUploadDeniedExtensions	= "" ;							// empty for no one
+
+FCKConfig.FlashUpload = true ;
+FCKConfig.FlashUploadURL = FCKConfig.BasePath + 'filemanager/connectors/' + _QuickUploadLanguage + '/upload.' + _QuickUploadLanguage + '?Type=Flash' ;
+FCKConfig.FlashUploadAllowedExtensions	= ".(swf|fla)$" ;		// empty for all
+FCKConfig.FlashUploadDeniedExtensions	= "" ;					// empty for no one
+
+FCKConfig.SmileyPath	= FCKConfig.BasePath + 'images/smiley/msn/' ;
+FCKConfig.SmileyImages	= ['regular_smile.gif','sad_smile.gif','wink_smile.gif','teeth_smile.gif','confused_smile.gif','tounge_smile.gif','embaressed_smile.gif','omg_smile.gif','whatchutalkingabout_smile.gif','angry_smile.gif','angel_smile.gif','shades_smile.gif','devil_smile.gif','cry_smile.gif','lightbulb.gif','thumbs_down.gif','thumbs_up.gif','heart.gif','broken_heart.gif','kiss.gif','envelope.gif'] ;
+FCKConfig.SmileyColumns = 8 ;
+FCKConfig.SmileyWindowWidth		= 320 ;
+FCKConfig.SmileyWindowHeight	= 240 ;
+
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/fckeditor.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/fckeditor.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/fckeditor.js	(revision 1280)
@@ -0,0 +1,212 @@
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This is the integration file for JavaScript.
+ *
+ * It defines the FCKeditor class that can be used to create editor
+ * instances in a HTML page in the client side. For server side
+ * operations, use the specific integration system.
+ */
+
+// FCKeditor Class
+var FCKeditor = function( instanceName, width, height, toolbarSet, value )
+{
+	// Properties
+	this.InstanceName	= instanceName ;
+	this.Width			= width			|| '100%' ;
+	this.Height			= height		|| '200' ;
+	this.ToolbarSet		= toolbarSet	|| 'Default' ;
+	this.Value			= value			|| '' ;
+	this.BasePath		= '/fckeditor/' ;
+	this.CheckBrowser	= true ;
+	this.DisplayErrors	= true ;
+
+	this.Config			= new Object() ;
+
+	// Events
+	this.OnError		= null ;	// function( source, errorNumber, errorDescription )
+}
+
+FCKeditor.prototype.Version			= '2.5 SVN' ;
+FCKeditor.prototype.VersionBuild	= '16925' ;
+
+FCKeditor.prototype.Create = function()
+{
+	document.write( this.CreateHtml() ) ;
+}
+
+FCKeditor.prototype.CreateHtml = function()
+{
+	// Check for errors
+	if ( !this.InstanceName || this.InstanceName.length == 0 )
+	{
+		this._ThrowError( 701, 'You must specify an instance name.' ) ;
+		return '' ;
+	}
+
+	var sHtml = '<div>' ;
+
+	if ( !this.CheckBrowser || this._IsCompatibleBrowser() )
+	{
+		sHtml += '<input type="hidden" id="' + this.InstanceName + '" name="' + this.InstanceName + '" value="' + this._HTMLEncode( this.Value ) + '" style="display:none" />' ;
+		sHtml += this._GetConfigHtml() ;
+		sHtml += this._GetIFrameHtml() ;
+	}
+	else
+	{
+		var sWidth  = this.Width.toString().indexOf('%')  > 0 ? this.Width  : this.Width  + 'px' ;
+		var sHeight = this.Height.toString().indexOf('%') > 0 ? this.Height : this.Height + 'px' ;
+		sHtml += '<textarea name="' + this.InstanceName + '" rows="4" cols="40" style="width:' + sWidth + ';height:' + sHeight + '">' + this._HTMLEncode( this.Value ) + '<\/textarea>' ;
+	}
+
+	sHtml += '</div>' ;
+
+	return sHtml ;
+}
+
+FCKeditor.prototype.ReplaceTextarea = function()
+{
+	if ( !this.CheckBrowser || this._IsCompatibleBrowser() )
+	{
+		// We must check the elements firstly using the Id and then the name.
+		var oTextarea = document.getElementById( this.InstanceName ) ;
+		var colElementsByName = document.getElementsByName( this.InstanceName ) ;
+		var i = 0;
+		while ( oTextarea || i == 0 )
+		{
+			if ( oTextarea && oTextarea.tagName.toLowerCase() == 'textarea' )
+				break ;
+			oTextarea = colElementsByName[i++] ;
+		}
+
+		if ( !oTextarea )
+		{
+			alert( 'Error: The TEXTAREA with id or name set to "' + this.InstanceName + '" was not found' ) ;
+			return ;
+		}
+
+		oTextarea.style.display = 'none' ;
+		this._InsertHtmlBefore( this._GetConfigHtml(), oTextarea ) ;
+		this._InsertHtmlBefore( this._GetIFrameHtml(), oTextarea ) ;
+	}
+}
+
+FCKeditor.prototype._InsertHtmlBefore = function( html, element )
+{
+	if ( element.insertAdjacentHTML )	// IE
+		element.insertAdjacentHTML( 'beforeBegin', html ) ;
+	else								// Gecko
+	{
+		var oRange = document.createRange() ;
+		oRange.setStartBefore( element ) ;
+		var oFragment = oRange.createContextualFragment( html );
+		element.parentNode.insertBefore( oFragment, element ) ;
+	}
+}
+
+FCKeditor.prototype._GetConfigHtml = function()
+{
+	var sConfig = '' ;
+	for ( var o in this.Config )
+	{
+		if ( sConfig.length > 0 ) sConfig += '&amp;' ;
+		sConfig += encodeURIComponent( o ) + '=' + encodeURIComponent( this.Config[o] ) ;
+	}
+
+	return '<input type="hidden" id="' + this.InstanceName + '___Config" value="' + sConfig + '" style="display:none" />' ;
+}
+
+FCKeditor.prototype._GetIFrameHtml = function()
+{
+	var sFile = 'fckeditor.html' ;
+
+	try
+	{
+		if ( (/fcksource=true/i).test( window.top.location.search ) )
+			sFile = 'fckeditor.original.html' ;
+	}
+	catch (e) { /* Ignore it. Much probably we are inside a FRAME where the "top" is in another domain (security error). */ }
+
+	var sLink = this.BasePath + 'editor/' + sFile + '?InstanceName=' + encodeURIComponent( this.InstanceName ) ;
+	if (this.ToolbarSet) sLink += '&amp;Toolbar=' + this.ToolbarSet ;
+
+	return '<iframe id="' + this.InstanceName + '___Frame" src="' + sLink + '" width="' + this.Width + '" height="' + this.Height + '" frameborder="0" scrolling="no"></iframe>' ;
+}
+
+FCKeditor.prototype._IsCompatibleBrowser = function()
+{
+	return FCKeditor_IsCompatibleBrowser() ;
+}
+
+FCKeditor.prototype._ThrowError = function( errorNumber, errorDescription )
+{
+	this.ErrorNumber		= errorNumber ;
+	this.ErrorDescription	= errorDescription ;
+
+	if ( this.DisplayErrors )
+	{
+		document.write( '<div style="COLOR: #ff0000">' ) ;
+		document.write( '[ FCKeditor Error ' + this.ErrorNumber + ': ' + this.ErrorDescription + ' ]' ) ;
+		document.write( '</div>' ) ;
+	}
+
+	if ( typeof( this.OnError ) == 'function' )
+		this.OnError( this, errorNumber, errorDescription ) ;
+}
+
+FCKeditor.prototype._HTMLEncode = function( text )
+{
+	if ( typeof( text ) != "string" )
+		text = text.toString() ;
+
+	text = text.replace(
+		/&/g, "&amp;").replace(
+		/"/g, "&quot;").replace(
+		/</g, "&lt;").replace(
+		/>/g, "&gt;") ;
+
+	return text ;
+}
+
+function FCKeditor_IsCompatibleBrowser()
+{
+	var sAgent = navigator.userAgent.toLowerCase() ;
+
+	// Internet Explorer 5.5+
+	if ( /*@cc_on!@*/false && sAgent.indexOf("mac") == -1 )
+	{
+		var sBrowserVersion = navigator.appVersion.match(/MSIE (.\..)/)[1] ;
+		return ( sBrowserVersion >= 5.5 ) ;
+	}
+
+	// Gecko (Opera 9 tries to behave like Gecko at this point).
+	if ( navigator.product == "Gecko" && navigator.productSub >= 20030210 && !( typeof(opera) == 'object' && opera.postError ) )
+		return true ;
+
+	// Opera 9.50+
+	if ( window.opera && window.opera.version && parseFloat( window.opera.version() ) >= 9.5 )
+			return true ;
+
+	// Safari 3+
+	if ( sAgent.indexOf( ' applewebkit/' ) != -1 )
+		return ( sAgent.match( / applewebkit\/(\d+)/ )[1] >= 522 ) ;	// Build must be at least 522 (v3)
+
+	return false ;
+}
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/fckeditor.php
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/fckeditor.php	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/fckeditor.php	(revision 1280)
@@ -0,0 +1,71 @@
+<?php
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This is the integration file for PHP (All versions).
+ *
+ * It loads the correct integration file based on the PHP version (avoiding
+ * strict error messages with PHP 5).
+ */
+
+function FCKeditor_IsCompatibleBrowser()
+{
+	global $HTTP_USER_AGENT ;
+
+	if ( !isset( $_SERVER ) ) {
+		global $HTTP_SERVER_VARS ;
+	    $_SERVER = $HTTP_SERVER_VARS ;
+	}
+		
+	if ( isset( $HTTP_USER_AGENT ) )
+		$sAgent = $HTTP_USER_AGENT ;
+	else
+		$sAgent = $_SERVER['HTTP_USER_AGENT'] ;
+
+	if ( strpos($sAgent, 'MSIE') !== false && strpos($sAgent, 'mac') === false && strpos($sAgent, 'Opera') === false )
+	{
+		$iVersion = (float)substr($sAgent, strpos($sAgent, 'MSIE') + 5, 3) ;
+		return ($iVersion >= 5.5) ;
+	}
+	else if ( strpos($sAgent, 'Gecko/') !== false )
+	{
+		$iVersion = (int)substr($sAgent, strpos($sAgent, 'Gecko/') + 6, 8) ;
+		return ($iVersion >= 20030210) ;
+	}
+	else if ( strpos($sAgent, 'Opera/') !== false )
+	{
+		$fVersion = (float)substr($sAgent, strpos($sAgent, 'Opera/') + 6, 4) ;
+		return ($fVersion >= 9.5) ;
+	}
+	else if ( preg_match( "|AppleWebKit/(\d+)|i", $sAgent, $matches ) )
+	{
+		$iVersion = $matches[1] ;
+		return ( $matches[1] >= 522 ) ;
+	}
+	else
+		return false ;	
+}
+
+if ( !function_exists('version_compare') || version_compare( phpversion(), '5', '<' ) )
+	include_once( 'fckeditor_php4.php' ) ;
+else
+	include_once( 'fckeditor_php5.php' ) ;
+
+?>
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/fckeditor_php4.php
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/fckeditor_php4.php	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/fckeditor_php4.php	(revision 1280)
@@ -0,0 +1,147 @@
+<?php
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This is the integration file for PHP 4.
+ *
+ * It defines the FCKeditor class that can be used to create editor
+ * instances in PHP pages on server side.
+ */
+
+class FCKeditor
+{
+	var $InstanceName ;
+	var $BasePath ;
+	var $Width ;
+	var $Height ;
+	var $ToolbarSet ;
+	var $Value ;
+	var $Config ;
+
+	// PHP 4 Constructor
+	function FCKeditor( $instanceName )
+	{
+		$this->InstanceName	= $instanceName ;
+		$this->BasePath		= '/fckeditor/' ;
+		$this->Width		= '100%' ;
+		$this->Height		= '200' ;
+		$this->ToolbarSet	= 'Default' ;
+		$this->Value		= '' ;
+
+		$this->Config		= array() ;
+	}
+
+	function Create()
+	{
+		echo $this->CreateHtml() ;
+	}
+
+	function CreateHtml()
+	{
+		$HtmlValue = htmlspecialchars( $this->Value ) ;
+
+		$Html = '<div>' ;
+		
+		if ( !isset( $_GET ) ) {
+			global $HTTP_GET_VARS ;
+		    $_GET = $HTTP_GET_VARS ;
+		}
+
+		if ( $this->IsCompatible() )
+		{
+			if ( isset( $_GET['fcksource'] ) && $_GET['fcksource'] == "true" )
+				$File = 'fckeditor.original.html' ;
+			else
+				$File = 'fckeditor.html' ;
+
+			$Link = "{$this->BasePath}editor/{$File}?InstanceName={$this->InstanceName}" ;
+
+			if ( $this->ToolbarSet != '' )
+				$Link .= "&amp;Toolbar={$this->ToolbarSet}" ;
+
+			// Render the linked hidden field.
+			$Html .= "<input type=\"hidden\" id=\"{$this->InstanceName}\" name=\"{$this->InstanceName}\" value=\"{$HtmlValue}\" style=\"display:none\" />" ;
+
+			// Render the configurations hidden field.
+			$Html .= "<input type=\"hidden\" id=\"{$this->InstanceName}___Config\" value=\"" . $this->GetConfigFieldString() . "\" style=\"display:none\" />" ;
+
+			// Render the editor IFRAME.
+			$Html .= "<iframe id=\"{$this->InstanceName}___Frame\" src=\"{$Link}\" width=\"{$this->Width}\" height=\"{$this->Height}\" frameborder=\"0\" scrolling=\"no\"></iframe>" ;
+		}
+		else
+		{
+			if ( strpos( $this->Width, '%' ) === false )
+				$WidthCSS = $this->Width . 'px' ;
+			else
+				$WidthCSS = $this->Width ;
+
+			if ( strpos( $this->Height, '%' ) === false )
+				$HeightCSS = $this->Height . 'px' ;
+			else
+				$HeightCSS = $this->Height ;
+
+			$Html .= "<textarea name=\"{$this->InstanceName}\" rows=\"4\" cols=\"40\" style=\"width: {$WidthCSS}; height: {$HeightCSS}\">{$HtmlValue}</textarea>" ;
+		}
+
+		$Html .= '</div>' ;
+
+		return $Html ;
+	}
+
+	function IsCompatible()
+	{
+		return FCKeditor_IsCompatibleBrowser() ;
+	}
+
+	function GetConfigFieldString()
+	{
+		$sParams = '' ;
+		$bFirst = true ;
+
+		foreach ( $this->Config as $sKey => $sValue )
+		{
+			if ( $bFirst == false )
+				$sParams .= '&amp;' ;
+			else
+				$bFirst = false ;
+
+			if ( $sValue === true )
+				$sParams .= $this->EncodeConfig( $sKey ) . '=true' ;
+			else if ( $sValue === false )
+				$sParams .= $this->EncodeConfig( $sKey ) . '=false' ;
+			else
+				$sParams .= $this->EncodeConfig( $sKey ) . '=' . $this->EncodeConfig( $sValue ) ;
+		}
+
+		return $sParams ;
+	}
+
+	function EncodeConfig( $valueToEncode )
+	{
+		$chars = array(
+			'&' => '%26',
+			'=' => '%3D',
+			'"' => '%22' ) ;
+
+		return strtr( $valueToEncode,  $chars ) ;
+	}
+}
+
+?>
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/fckeditor_php5.php
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/fckeditor_php5.php	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/fckeditor_php5.php	(revision 1280)
@@ -0,0 +1,142 @@
+<?php
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This is the integration file for PHP 5.
+ *
+ * It defines the FCKeditor class that can be used to create editor
+ * instances in PHP pages on server side.
+ */
+
+class FCKeditor
+{
+	var $InstanceName ;
+	var $BasePath ;
+	var $Width ;
+	var $Height ;
+	var $ToolbarSet ;
+	var $Value ;
+	var $Config ;
+
+	// PHP 5 Constructor (by Marcus Bointon <coolbru@users.sourceforge.net>)
+	function __construct( $instanceName )
+ 	{
+		$this->InstanceName	= $instanceName ;
+		$this->BasePath		= '/fckeditor/' ;
+		$this->Width		= '100%' ;
+		$this->Height		= '200' ;
+		$this->ToolbarSet	= 'Default' ;
+		$this->Value		= '' ;
+
+		$this->Config		= array() ;
+	}
+
+	function Create()
+	{
+		echo $this->CreateHtml() ;
+	}
+
+	function CreateHtml()
+	{
+		$HtmlValue = htmlspecialchars( $this->Value ) ;
+
+		$Html = '<div>' ;
+
+		if ( $this->IsCompatible() )
+		{
+			if ( isset( $_GET['fcksource'] ) && $_GET['fcksource'] == "true" )
+				$File = 'fckeditor.original.html' ;
+			else
+				$File = 'fckeditor.html' ;
+
+			$Link = "{$this->BasePath}editor/{$File}?InstanceName={$this->InstanceName}" ;
+
+			if ( $this->ToolbarSet != '' )
+				$Link .= "&amp;Toolbar={$this->ToolbarSet}" ;
+
+			// Render the linked hidden field.
+			$Html .= "<input type=\"hidden\" id=\"{$this->InstanceName}\" name=\"{$this->InstanceName}\" value=\"{$HtmlValue}\" style=\"display:none\" />" ;
+
+			// Render the configurations hidden field.
+			$Html .= "<input type=\"hidden\" id=\"{$this->InstanceName}___Config\" value=\"" . $this->GetConfigFieldString() . "\" style=\"display:none\" />" ;
+
+			// Render the editor IFRAME.
+			$Html .= "<iframe id=\"{$this->InstanceName}___Frame\" src=\"{$Link}\" width=\"{$this->Width}\" height=\"{$this->Height}\" frameborder=\"0\" scrolling=\"no\"></iframe>" ;
+		}
+		else
+		{
+			if ( strpos( $this->Width, '%' ) === false )
+				$WidthCSS = $this->Width . 'px' ;
+			else
+				$WidthCSS = $this->Width ;
+
+			if ( strpos( $this->Height, '%' ) === false )
+				$HeightCSS = $this->Height . 'px' ;
+			else
+				$HeightCSS = $this->Height ;
+
+			$Html .= "<textarea name=\"{$this->InstanceName}\" rows=\"4\" cols=\"40\" style=\"width: {$WidthCSS}; height: {$HeightCSS}\">{$HtmlValue}</textarea>" ;
+		}
+
+		$Html .= '</div>' ;
+
+		return $Html ;
+	}
+
+	function IsCompatible()
+	{
+		return FCKeditor_IsCompatibleBrowser() ;
+	}
+
+	function GetConfigFieldString()
+	{
+		$sParams = '' ;
+		$bFirst = true ;
+
+		foreach ( $this->Config as $sKey => $sValue )
+		{
+			if ( $bFirst == false )
+				$sParams .= '&amp;' ;
+			else
+				$bFirst = false ;
+
+			if ( $sValue === true )
+				$sParams .= $this->EncodeConfig( $sKey ) . '=true' ;
+			else if ( $sValue === false )
+				$sParams .= $this->EncodeConfig( $sKey ) . '=false' ;
+			else
+				$sParams .= $this->EncodeConfig( $sKey ) . '=' . $this->EncodeConfig( $sValue ) ;
+		}
+
+		return $sParams ;
+	}
+
+	function EncodeConfig( $valueToEncode )
+	{
+		$chars = array(
+			'&' => '%26',
+			'=' => '%3D',
+			'"' => '%22' ) ;
+
+		return strtr( $valueToEncode,  $chars ) ;
+	}
+}
+
+?>
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/fckpackager.xml
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/fckpackager.xml	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/fckpackager.xml	(revision 1280)
@@ -0,0 +1,262 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This is the configuration file to be used with FCKpackager to generate the
+ * compressed code files in the "js" folder.
+ *
+ * Please check http://www.fckeditor.net for more info.
+-->
+<Package>
+	<Header><![CDATA[/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ * 
+ * == BEGIN LICENSE ==
+ * 
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ * 
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ * 
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ * 
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ * 
+ * == END LICENSE ==
+ * 
+ * This file has been compressed for better performance. The original source
+ * can be found at "editor/_source".
+ */
+]]></Header>
+	<Constants removeDeclaration="false">
+		<Constant name="FCK_STATUS_NOTLOADED" value="0" />
+		<Constant name="FCK_STATUS_ACTIVE" value="1" />
+		<Constant name="FCK_STATUS_COMPLETE" value="2" />
+		<Constant name="FCK_TRISTATE_OFF" value="0" />
+		<Constant name="FCK_TRISTATE_ON" value="1" />
+		<Constant name="FCK_TRISTATE_DISABLED" value="-1" />
+		<Constant name="FCK_UNKNOWN" value="-9" />
+		<Constant name="FCK_TOOLBARITEM_ONLYICON" value="0" />
+		<Constant name="FCK_TOOLBARITEM_ONLYTEXT" value="1" />
+		<Constant name="FCK_TOOLBARITEM_ICONTEXT" value="2" />
+		<Constant name="FCK_EDITMODE_WYSIWYG" value="0" />
+		<Constant name="FCK_EDITMODE_SOURCE" value="1" />
+		<Constant name="FCK_STYLE_BLOCK" value="0" />
+		<Constant name="FCK_STYLE_INLINE" value="1" />
+		<Constant name="FCK_STYLE_OBJECT" value="2" />
+	</Constants>
+	<PackageFile path="editor/js/fckeditorcode_ie.js">
+		<File path="editor/_source/fckconstants.js" />
+		<File path="editor/_source/fckjscoreextensions.js" />
+		<File path="editor/_source/classes/fckiecleanup.js" />
+		<File path="editor/_source/internals/fckbrowserinfo.js" />
+		<File path="editor/_source/internals/fckurlparams.js" />
+		<File path="editor/_source/classes/fckevents.js" />
+		<File path="editor/_source/classes/fckdataprocessor.js" />
+		<File path="editor/_source/internals/fck.js" />
+		<File path="editor/_source/internals/fck_ie.js" />
+		<File path="editor/_source/internals/fckconfig.js" />
+		<File path="editor/_source/internals/fckdebug.js" />
+		<File path="editor/_source/internals/fckdomtools.js" />
+		<File path="editor/_source/internals/fcktools.js" />
+		<File path="editor/_source/internals/fcktools_ie.js" />
+		<File path="editor/_source/fckeditorapi.js" />
+		<File path="editor/_source/classes/fckimagepreloader.js" />
+
+		<File path="editor/_source/internals/fckregexlib.js" />
+		<File path="editor/_source/internals/fcklistslib.js" />
+		<File path="editor/_source/internals/fcklanguagemanager.js" />
+		<File path="editor/_source/internals/fckxhtmlentities.js" />
+		<File path="editor/_source/internals/fckxhtml.js" />
+		<File path="editor/_source/internals/fckxhtml_ie.js" />
+		<File path="editor/_source/internals/fckcodeformatter.js" />
+		<File path="editor/_source/internals/fckundo.js" />
+		<File path="editor/_source/classes/fckeditingarea.js" />
+		<File path="editor/_source/classes/fckkeystrokehandler.js" />
+
+		<File path="editor/dtd/fck_xhtml10transitional.js" />
+		<File path="editor/_source/classes/fckstyle.js" />
+		<File path="editor/_source/internals/fckstyles.js" />
+			  
+		<File path="editor/_source/internals/fcklisthandler.js" />
+		<File path="editor/_source/classes/fckelementpath.js" />
+		<File path="editor/_source/classes/fckdomrange.js" />
+		<File path="editor/_source/classes/fckdomrange_ie.js" />
+		<File path="editor/_source/classes/fckdomrangeiterator.js" />
+		<File path="editor/_source/classes/fckdocumentfragment_ie.js" />
+		<File path="editor/_source/classes/fckw3crange.js" />
+		<File path="editor/_source/classes/fckenterkey.js" />
+
+		<File path="editor/_source/internals/fckdocumentprocessor.js" />
+		<File path="editor/_source/internals/fckselection.js" />
+		<File path="editor/_source/internals/fckselection_ie.js" />
+
+		<File path="editor/_source/internals/fcktablehandler.js" />
+		<File path="editor/_source/internals/fcktablehandler_ie.js" />
+		<File path="editor/_source/classes/fckxml.js" />
+		<File path="editor/_source/classes/fckxml_ie.js" />
+
+		<File path="editor/_source/commandclasses/fcknamedcommand.js" />
+		<File path="editor/_source/commandclasses/fckstylecommand.js" />
+		<File path="editor/_source/commandclasses/fck_othercommands.js" />
+		<File path="editor/_source/commandclasses/fckshowblocks.js" />
+		<File path="editor/_source/commandclasses/fckspellcheckcommand_ie.js" />
+		<File path="editor/_source/commandclasses/fcktextcolorcommand.js" />
+		<File path="editor/_source/commandclasses/fckpasteplaintextcommand.js" />
+		<File path="editor/_source/commandclasses/fckpastewordcommand.js" />
+		<File path="editor/_source/commandclasses/fcktablecommand.js" />
+		<File path="editor/_source/commandclasses/fckfitwindow.js" />
+		<File path="editor/_source/commandclasses/fcklistcommands.js" />
+		<File path="editor/_source/commandclasses/fckjustifycommands.js" />
+		<File path="editor/_source/commandclasses/fckindentcommands.js" />
+		<File path="editor/_source/commandclasses/fckblockquotecommand.js" />
+		<File path="editor/_source/commandclasses/fckcorestylecommand.js" />
+		<File path="editor/_source/commandclasses/fckremoveformatcommand.js" />
+		<File path="editor/_source/internals/fckcommands.js" />
+
+		<File path="editor/_source/classes/fckpanel.js" />
+		<File path="editor/_source/classes/fckicon.js" />
+		<File path="editor/_source/classes/fcktoolbarbuttonui.js" />
+		<File path="editor/_source/classes/fcktoolbarbutton.js" />
+		<File path="editor/_source/classes/fckspecialcombo.js" />
+		<File path="editor/_source/classes/fcktoolbarspecialcombo.js" />
+		<File path="editor/_source/classes/fcktoolbarstylecombo.js" />
+		<File path="editor/_source/classes/fcktoolbarfontformatcombo.js" />
+		<File path="editor/_source/classes/fcktoolbarfontscombo.js" />
+		<File path="editor/_source/classes/fcktoolbarfontsizecombo.js" />
+		<File path="editor/_source/classes/fcktoolbarpanelbutton.js" />
+		<File path="editor/_source/internals/fcktoolbaritems.js" />
+		<File path="editor/_source/classes/fcktoolbar.js" />
+		<File path="editor/_source/classes/fcktoolbarbreak_ie.js" />
+		<File path="editor/_source/internals/fcktoolbarset.js" />
+		<File path="editor/_source/internals/fckdialog.js" />
+		<File path="editor/_source/internals/fckdialog_ie.js" />
+
+		<File path="editor/_source/classes/fckmenuitem.js" />
+		<File path="editor/_source/classes/fckmenublock.js" />
+		<File path="editor/_source/classes/fckmenublockpanel.js" />
+		<File path="editor/_source/classes/fckcontextmenu.js" />
+		<File path="editor/_source/internals/fck_contextmenu.js" />
+
+		<File path="editor/_source/classes/fckplugin.js" />
+		<File path="editor/_source/internals/fckplugins.js" />
+	</PackageFile>
+
+	<PackageFile path="editor/js/fckeditorcode_gecko.js">
+		<File path="editor/_source/fckconstants.js" />
+		<File path="editor/_source/fckjscoreextensions.js" />
+		<File path="editor/_source/internals/fckbrowserinfo.js" />
+		<File path="editor/_source/internals/fckurlparams.js" />
+		<File path="editor/_source/classes/fckevents.js" />
+		<File path="editor/_source/classes/fckdataprocessor.js" />
+		<File path="editor/_source/internals/fck.js" />
+		<File path="editor/_source/internals/fck_gecko.js" />
+		<File path="editor/_source/internals/fckconfig.js" />
+		<File path="editor/_source/internals/fckdebug.js" />
+		<File path="editor/_source/internals/fckdomtools.js" />
+		<File path="editor/_source/internals/fcktools.js" />
+		<File path="editor/_source/internals/fcktools_gecko.js" />
+		<File path="editor/_source/fckeditorapi.js" />
+		<File path="editor/_source/classes/fckimagepreloader.js" />
+
+		<File path="editor/_source/internals/fckregexlib.js" />
+		<File path="editor/_source/internals/fcklistslib.js" />
+		<File path="editor/_source/internals/fcklanguagemanager.js" />
+		<File path="editor/_source/internals/fckxhtmlentities.js" />
+		<File path="editor/_source/internals/fckxhtml.js" />
+		<File path="editor/_source/internals/fckxhtml_gecko.js" />
+		<File path="editor/_source/internals/fckcodeformatter.js" />
+		<File path="editor/_source/internals/fckundo.js" />
+		<File path="editor/_source/classes/fckeditingarea.js" />
+		<File path="editor/_source/classes/fckkeystrokehandler.js" />
+
+		<File path="editor/dtd/fck_xhtml10transitional.js" />
+		<File path="editor/_source/classes/fckstyle.js" />
+		<File path="editor/_source/internals/fckstyles.js" />
+
+		<File path="editor/_source/internals/fcklisthandler.js" />
+		<File path="editor/_source/classes/fckelementpath.js" />
+		<File path="editor/_source/classes/fckdomrange.js" />
+		<File path="editor/_source/classes/fckdomrange_gecko.js" />
+		<File path="editor/_source/classes/fckdomrangeiterator.js" />
+		<File path="editor/_source/classes/fckdocumentfragment_gecko.js" />
+		<File path="editor/_source/classes/fckw3crange.js" />
+		<File path="editor/_source/classes/fckenterkey.js" />
+
+		<File path="editor/_source/internals/fckdocumentprocessor.js" />
+		<File path="editor/_source/internals/fckselection.js" />
+		<File path="editor/_source/internals/fckselection_gecko.js" />
+
+		<File path="editor/_source/internals/fcktablehandler.js" />
+		<File path="editor/_source/internals/fcktablehandler_gecko.js" />
+		<File path="editor/_source/classes/fckxml.js" />
+		<File path="editor/_source/classes/fckxml_gecko.js" />
+
+		<File path="editor/_source/commandclasses/fcknamedcommand.js" />
+		<File path="editor/_source/commandclasses/fckstylecommand.js" />
+		<File path="editor/_source/commandclasses/fck_othercommands.js" />
+		<File path="editor/_source/commandclasses/fckshowblocks.js" />
+		<File path="editor/_source/commandclasses/fckspellcheckcommand_gecko.js" />
+		<File path="editor/_source/commandclasses/fcktextcolorcommand.js" />
+		<File path="editor/_source/commandclasses/fckpasteplaintextcommand.js" />
+		<File path="editor/_source/commandclasses/fckpastewordcommand.js" />
+		<File path="editor/_source/commandclasses/fcktablecommand.js" />
+		<File path="editor/_source/commandclasses/fckfitwindow.js" />
+		<File path="editor/_source/commandclasses/fcklistcommands.js" />
+		<File path="editor/_source/commandclasses/fckjustifycommands.js" />
+		<File path="editor/_source/commandclasses/fckindentcommands.js" />
+		<File path="editor/_source/commandclasses/fckblockquotecommand.js" />
+		<File path="editor/_source/commandclasses/fckcorestylecommand.js" />
+		<File path="editor/_source/commandclasses/fckremoveformatcommand.js" />
+		<File path="editor/_source/internals/fckcommands.js" />
+
+		<File path="editor/_source/classes/fckpanel.js" />
+		<File path="editor/_source/classes/fckicon.js" />
+		<File path="editor/_source/classes/fcktoolbarbuttonui.js" />
+		<File path="editor/_source/classes/fcktoolbarbutton.js" />
+		<File path="editor/_source/classes/fckspecialcombo.js" />
+		<File path="editor/_source/classes/fcktoolbarspecialcombo.js" />
+		<File path="editor/_source/classes/fcktoolbarstylecombo.js" />
+		<File path="editor/_source/classes/fcktoolbarfontformatcombo.js" />
+		<File path="editor/_source/classes/fcktoolbarfontscombo.js" />
+		<File path="editor/_source/classes/fcktoolbarfontsizecombo.js" />
+		<File path="editor/_source/classes/fcktoolbarpanelbutton.js" />
+		<File path="editor/_source/internals/fcktoolbaritems.js" />
+		<File path="editor/_source/classes/fcktoolbar.js" />
+		<File path="editor/_source/classes/fcktoolbarbreak_gecko.js" />
+		<File path="editor/_source/internals/fcktoolbarset.js" />
+		<File path="editor/_source/internals/fckdialog.js" />
+		<File path="editor/_source/internals/fckdialog_gecko.js" />
+
+		<File path="editor/_source/classes/fckmenuitem.js" />
+		<File path="editor/_source/classes/fckmenublock.js" />
+		<File path="editor/_source/classes/fckmenublockpanel.js" />
+		<File path="editor/_source/classes/fckcontextmenu.js" />
+		<File path="editor/_source/internals/fck_contextmenu.js" />
+
+		<File path="editor/_source/classes/fckplugin.js" />
+		<File path="editor/_source/internals/fckplugins.js" />
+	</PackageFile>
+
+</Package>
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/fckstyles.xml
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/fckstyles.xml	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/fckstyles.xml	(revision 1280)
@@ -0,0 +1,114 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This is the sample style definitions file. It makes the styles combo
+ * completely customizable.
+ *
+ * See FCKConfig.StylesXmlPath in the configuration file.
+-->
+<Styles>
+
+	<!-- Block Styles -->
+
+	<!--
+	# These styles are already available in the "Format" combo, so they are not
+	# needed here by default.
+
+	<Style name="Heading 1" element="h1" />
+	<Style name="Heading 2" element="h2" />
+	<Style name="Heading 3" element="h3" />
+	<Style name="Heading 4" element="h4" />
+	<Style name="Heading 5" element="h5" />
+	<Style name="Heading 6" element="h6" />
+	<Style name="Paragraph" element="p" />
+	<Style name="Document Block" element="div" />
+	<Style name="Preformatted Text" element="pre" />
+	<Style name="Address" element="address" />
+	-->
+
+	<!-- Inline Styles -->
+
+	<!--
+	# These are core styles available as toolbar buttons.
+
+	<Style name="Bold" element="b">
+		<Override element="strong" />
+	</Style>
+	<Style name="Italic" element="i">
+		<Override element="em" />
+	</Style>
+	<Style name="Underline" element="u" />
+	<Style name="Strikethrough" element="strike" />
+	<Style name="Subscript" element="sub" />
+	<Style name="Superscript" element="sup" />
+	-->
+
+	<Style name="Marker: Yellow" element="span">
+		<Style name="background-color" value="Yellow" />
+	</Style>
+	<Style name="Marker: Green" element="span">
+		<Style name="background-color" value="Lime" />
+	</Style>
+
+	<Style name="Strong Emphasis" element="strong" />
+	<Style name="Emphasis" element="em" />
+
+	<Style name="Big" element="big" />
+	<Style name="Small" element="small" />
+	<Style name="Typewriter" element="tt" />
+
+	<Style name="Computer Code" element="code" />
+	<Style name="Keyboard Phrase" element="kbd" />
+	<Style name="Sample Text" element="samp" />
+	<Style name="Variable" element="var" />
+
+	<Style name="Deleted Text" element="del" />
+	<Style name="Inserted Text" element="ins" />
+
+	<Style name="Cited Work" element="cite" />
+	<Style name="Inline Quotation" element="q" />
+
+	<Style name="Language: RTL" element="span">
+		<Attribute name="dir" value="rtl" />
+	</Style>
+	<Style name="Language: LTR" element="span">
+		<Attribute name="dir" value="ltr" />
+	</Style>
+	<Style name="Language: RTL Strong" element="bdo">
+		<Attribute name="dir" value="rtl" />
+	</Style>
+	<Style name="Language: LTR Strong" element="bdo">
+		<Attribute name="dir" value="ltr" />
+	</Style>
+
+	<!-- Object Styles -->
+
+	<Style name="Image on Left" element="img">
+		<Attribute name="style" value="padding: 5px; margin-right: 5px" />
+		<Attribute name="border" value="2" />
+		<Attribute name="align" value="left" />
+	</Style>
+	<Style name="Image on Right" element="img">
+		<Attribute name="style" value="padding: 5px; margin-left: 5px" />
+		<Attribute name="border" value="2" />
+		<Attribute name="align" value="right" />
+	</Style>
+</Styles>
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/fcktemplates.xml
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/fcktemplates.xml	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/fcktemplates.xml	(revision 1280)
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * This is the sample templates definitions file. It makes the "templates"
+ * command completely customizable.
+ *
+ * See FCKConfig.TemplatesXmlPath in the configuration file.
+-->
+<Templates imagesBasePath="fck_template/images/">
+	<Template title="Image and Title" image="template1.gif">
+		<Description>One main image with a title and text that surround the image.</Description>
+		<Html>
+			<![CDATA[
+				<img style="MARGIN-RIGHT: 10px" height="100" alt="" width="100" align="left"/>
+				<h3>Type the title here</h3>
+				Type the text here
+			]]>
+		</Html>
+	</Template>
+	<Template title="Strange Template" image="template2.gif">
+		<Description>A template that defines two colums, each one with a title, and some text.</Description>
+		<Html>
+			<![CDATA[
+				<table cellspacing="0" cellpadding="0" width="100%" border="0">
+					<tbody>
+						<tr>
+							<td width="50%">
+							<h3>Title 1</h3>
+							</td>
+							<td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </td>
+							<td width="50%">
+							<h3>Title 2</h3>
+							</td>
+						</tr>
+						<tr>
+							<td>Text 1</td>
+							<td>&nbsp;</td>
+							<td>Text 2</td>
+						</tr>
+					</tbody>
+				</table>
+				More text goes here.
+			]]>
+		</Html>
+	</Template>
+	<Template title="Text and Table" image="template3.gif">
+		<Description>A title with some text and a table.</Description>
+		<Html>
+			<![CDATA[
+				<table align="left" width="80%" border="0" cellspacing="0" cellpadding="0"><tr><td>
+					<h3>Title goes here</h3>
+					<p>
+					<table style="FLOAT: right" cellspacing="0" cellpadding="0" width="150" border="1">
+						<tbody>
+							<tr>
+								<td align="center" colspan="3"><strong>Table title</strong></td>
+							</tr>
+							<tr>
+								<td>&nbsp;</td>
+								<td>&nbsp;</td>
+								<td>&nbsp;</td>
+							</tr>
+							<tr>
+								<td>&nbsp;</td>
+								<td>&nbsp;</td>
+								<td>&nbsp;</td>
+							</tr>
+							<tr>
+								<td>&nbsp;</td>
+								<td>&nbsp;</td>
+								<td>&nbsp;</td>
+							</tr>
+							<tr>
+								<td>&nbsp;</td>
+								<td>&nbsp;</td>
+								<td>&nbsp;</td>
+							</tr>
+						</tbody>
+					</table>
+					Type the text here</p>
+				</td></tr></table>
+			]]>
+		</Html>
+	</Template>
+</Templates>
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/license.txt
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/license.txt	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor/license.txt	(revision 1280)
@@ -0,0 +1,1247 @@
+FCKeditor - The text editor for Internet - http://www.fckeditor.net
+Copyright (C) 2003-2007 Frederico Caldeira Knabben
+
+Licensed under the terms of any of the following licenses at your
+choice:
+
+ - GNU General Public License Version 2 or later (the "GPL")
+   http://www.gnu.org/licenses/gpl.html
+   (See Appendix A)
+
+ - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+   http://www.gnu.org/licenses/lgpl.html
+   (See Appendix B)
+
+ - Mozilla Public License Version 1.1 or later (the "MPL")
+   http://www.mozilla.org/MPL/MPL-1.1.html
+   (See Appendix C)
+
+You are not required to, but if you want to explicitly declare the
+license you have chosen to be bound to when using, reproducing,
+modifying and distributing this software, just include a text file
+titled "legal.txt" in your version of this software, indicating your
+license choice. In any case, your choice will not restrict any
+recipient of your version of this software to use, reproduce, modify
+and distribute this software under any of the above licenses.
+
+Appendix A: The GPL 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.
+
+		     END OF TERMS AND CONDITIONS
+
+
+Appendix B: The LGPL License
+============================
+
+		  GNU LESSER GENERAL PUBLIC LICENSE
+		       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+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 and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+		  GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, 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 library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+  1. You may copy and distribute verbatim copies of the Library's
+complete 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 distribute a copy of this License along with the
+Library.
+
+  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 Library or any portion
+of it, thus forming a work based on the Library, 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) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+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 Library, 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 Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you 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.
+
+  If distribution of 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 satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be 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.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library 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.
+
+  9. 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 Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+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 with
+this License.
+
+  11. 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 Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library 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 Library.
+
+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.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library 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.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser 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 Library
+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 Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+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
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "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
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. 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 LIBRARY 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
+LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+
+Appendix C: The MPL License
+===========================
+
+                          MOZILLA PUBLIC LICENSE
+                                Version 1.1
+
+                              ---------------
+
+1. Definitions.
+
+     1.0.1. "Commercial Use" means distribution or otherwise making the
+     Covered Code available to a third party.
+
+     1.1. "Contributor" means each entity that creates or contributes to
+     the creation of Modifications.
+
+     1.2. "Contributor Version" means the combination of the Original
+     Code, prior Modifications used by a Contributor, and the Modifications
+     made by that particular Contributor.
+
+     1.3. "Covered Code" means the Original Code or Modifications or the
+     combination of the Original Code and Modifications, in each case
+     including portions thereof.
+
+     1.4. "Electronic Distribution Mechanism" means a mechanism generally
+     accepted in the software development community for the electronic
+     transfer of data.
+
+     1.5. "Executable" means Covered Code in any form other than Source
+     Code.
+
+     1.6. "Initial Developer" means the individual or entity identified
+     as the Initial Developer in the Source Code notice required by Exhibit
+     A.
+
+     1.7. "Larger Work" means a work which combines Covered Code or
+     portions thereof with code not governed by the terms of this License.
+
+     1.8. "License" means this document.
+
+     1.8.1. "Licensable" means having the right to grant, to the maximum
+     extent possible, whether at the time of the initial grant or
+     subsequently acquired, any and all of the rights conveyed herein.
+
+     1.9. "Modifications" means any addition to or deletion from the
+     substance or structure of either the Original Code or any previous
+     Modifications. When Covered Code is released as a series of files, a
+     Modification is:
+          A. Any addition to or deletion from the contents of a file
+          containing Original Code or previous Modifications.
+
+          B. Any new file that contains any part of the Original Code or
+          previous Modifications.
+
+     1.10. "Original Code" means Source Code of computer software code
+     which is described in the Source Code notice required by Exhibit A as
+     Original Code, and which, at the time of its release under this
+     License is not already Covered Code governed by this License.
+
+     1.10.1. "Patent Claims" means any patent claim(s), now owned or
+     hereafter acquired, including without limitation,  method, process,
+     and apparatus claims, in any patent Licensable by grantor.
+
+     1.11. "Source Code" means the preferred form of the Covered Code for
+     making modifications to it, including all modules it contains, plus
+     any associated interface definition files, scripts used to control
+     compilation and installation of an Executable, or source code
+     differential comparisons against either the Original Code or another
+     well known, available Covered Code of the Contributor's choice. The
+     Source Code can be in a compressed or archival form, provided the
+     appropriate decompression or de-archiving software is widely available
+     for no charge.
+
+     1.12. "You" (or "Your")  means an individual or a legal entity
+     exercising rights under, and complying with all of the terms of, this
+     License or a future version of this License issued under Section 6.1.
+     For legal entities, "You" includes any entity which controls, is
+     controlled by, or is under common control with You. For purposes of
+     this definition, "control" means (a) the power, direct or indirect,
+     to cause the direction or management of such entity, whether by
+     contract or otherwise, or (b) ownership of more than fifty percent
+     (50%) of the outstanding shares or beneficial ownership of such
+     entity.
+
+2. Source Code License.
+
+     2.1. The Initial Developer Grant.
+     The Initial Developer hereby grants You a world-wide, royalty-free,
+     non-exclusive license, subject to third party intellectual property
+     claims:
+          (a)  under intellectual property rights (other than patent or
+          trademark) Licensable by Initial Developer to use, reproduce,
+          modify, display, perform, sublicense and distribute the Original
+          Code (or portions thereof) with or without Modifications, and/or
+          as part of a Larger Work; and
+
+          (b) under Patents Claims infringed by the making, using or
+          selling of Original Code, to make, have made, use, practice,
+          sell, and offer for sale, and/or otherwise dispose of the
+          Original Code (or portions thereof).
+
+          (c) the licenses granted in this Section 2.1(a) and (b) are
+          effective on the date Initial Developer first distributes
+          Original Code under the terms of this License.
+
+          (d) Notwithstanding Section 2.1(b) above, no patent license is
+          granted: 1) for code that You delete from the Original Code; 2)
+          separate from the Original Code;  or 3) for infringements caused
+          by: i) the modification of the Original Code or ii) the
+          combination of the Original Code with other software or devices.
+
+     2.2. Contributor Grant.
+     Subject to third party intellectual property claims, each Contributor
+     hereby grants You a world-wide, royalty-free, non-exclusive license
+
+          (a)  under intellectual property rights (other than patent or
+          trademark) Licensable by Contributor, to use, reproduce, modify,
+          display, perform, sublicense and distribute the Modifications
+          created by such Contributor (or portions thereof) either on an
+          unmodified basis, with other Modifications, as Covered Code
+          and/or as part of a Larger Work; and
+
+          (b) under Patent Claims infringed by the making, using, or
+          selling of  Modifications made by that Contributor either alone
+          and/or in combination with its Contributor Version (or portions
+          of such combination), to make, use, sell, offer for sale, have
+          made, and/or otherwise dispose of: 1) Modifications made by that
+          Contributor (or portions thereof); and 2) the combination of
+          Modifications made by that Contributor with its Contributor
+          Version (or portions of such combination).
+
+          (c) the licenses granted in Sections 2.2(a) and 2.2(b) are
+          effective on the date Contributor first makes Commercial Use of
+          the Covered Code.
+
+          (d)    Notwithstanding Section 2.2(b) above, no patent license is
+          granted: 1) for any code that Contributor has deleted from the
+          Contributor Version; 2)  separate from the Contributor Version;
+          3)  for infringements caused by: i) third party modifications of
+          Contributor Version or ii)  the combination of Modifications made
+          by that Contributor with other software  (except as part of the
+          Contributor Version) or other devices; or 4) under Patent Claims
+          infringed by Covered Code in the absence of Modifications made by
+          that Contributor.
+
+3. Distribution Obligations.
+
+     3.1. Application of License.
+     The Modifications which You create or to which You contribute are
+     governed by the terms of this License, including without limitation
+     Section 2.2. The Source Code version of Covered Code may be
+     distributed only under the terms of this License or a future version
+     of this License released under Section 6.1, and You must include a
+     copy of this License with every copy of the Source Code You
+     distribute. You may not offer or impose any terms on any Source Code
+     version that alters or restricts the applicable version of this
+     License or the recipients' rights hereunder. However, You may include
+     an additional document offering the additional rights described in
+     Section 3.5.
+
+     3.2. Availability of Source Code.
+     Any Modification which You create or to which You contribute must be
+     made available in Source Code form under the terms of this License
+     either on the same media as an Executable version or via an accepted
+     Electronic Distribution Mechanism to anyone to whom you made an
+     Executable version available; and if made available via Electronic
+     Distribution Mechanism, must remain available for at least twelve (12)
+     months after the date it initially became available, or at least six
+     (6) months after a subsequent version of that particular Modification
+     has been made available to such recipients. You are responsible for
+     ensuring that the Source Code version remains available even if the
+     Electronic Distribution Mechanism is maintained by a third party.
+
+     3.3. Description of Modifications.
+     You must cause all Covered Code to which You contribute to contain a
+     file documenting the changes You made to create that Covered Code and
+     the date of any change. You must include a prominent statement that
+     the Modification is derived, directly or indirectly, from Original
+     Code provided by the Initial Developer and including the name of the
+     Initial Developer in (a) the Source Code, and (b) in any notice in an
+     Executable version or related documentation in which You describe the
+     origin or ownership of the Covered Code.
+
+     3.4. Intellectual Property Matters
+          (a) Third Party Claims.
+          If Contributor has knowledge that a license under a third party's
+          intellectual property rights is required to exercise the rights
+          granted by such Contributor under Sections 2.1 or 2.2,
+          Contributor must include a text file with the Source Code
+          distribution titled "LEGAL" which describes the claim and the
+          party making the claim in sufficient detail that a recipient will
+          know whom to contact. If Contributor obtains such knowledge after
+          the Modification is made available as described in Section 3.2,
+          Contributor shall promptly modify the LEGAL file in all copies
+          Contributor makes available thereafter and shall take other steps
+          (such as notifying appropriate mailing lists or newsgroups)
+          reasonably calculated to inform those who received the Covered
+          Code that new knowledge has been obtained.
+
+          (b) Contributor APIs.
+          If Contributor's Modifications include an application programming
+          interface and Contributor has knowledge of patent licenses which
+          are reasonably necessary to implement that API, Contributor must
+          also include this information in the LEGAL file.
+
+               (c)    Representations.
+          Contributor represents that, except as disclosed pursuant to
+          Section 3.4(a) above, Contributor believes that Contributor's
+          Modifications are Contributor's original creation(s) and/or
+          Contributor has sufficient rights to grant the rights conveyed by
+          this License.
+
+     3.5. Required Notices.
+     You must duplicate the notice in Exhibit A in each file of the Source
+     Code.  If it is not possible to put such notice in a particular Source
+     Code file due to its structure, then You must include such notice in a
+     location (such as a relevant directory) where a user would be likely
+     to look for such a notice.  If You created one or more Modification(s)
+     You may add your name as a Contributor to the notice described in
+     Exhibit A.  You must also duplicate this License in any documentation
+     for the Source Code where You describe recipients' rights or ownership
+     rights relating to Covered Code.  You may choose to offer, and to
+     charge a fee for, warranty, support, indemnity or liability
+     obligations to one or more recipients of Covered Code. However, You
+     may do so only on Your own behalf, and not on behalf of the Initial
+     Developer or any Contributor. You must make it absolutely clear than
+     any such warranty, support, indemnity or liability obligation is
+     offered by You alone, and You hereby agree to indemnify the Initial
+     Developer and every Contributor for any liability incurred by the
+     Initial Developer or such Contributor as a result of warranty,
+     support, indemnity or liability terms You offer.
+
+     3.6. Distribution of Executable Versions.
+     You may distribute Covered Code in Executable form only if the
+     requirements of Section 3.1-3.5 have been met for that Covered Code,
+     and if You include a notice stating that the Source Code version of
+     the Covered Code is available under the terms of this License,
+     including a description of how and where You have fulfilled the
+     obligations of Section 3.2. The notice must be conspicuously included
+     in any notice in an Executable version, related documentation or
+     collateral in which You describe recipients' rights relating to the
+     Covered Code. You may distribute the Executable version of Covered
+     Code or ownership rights under a license of Your choice, which may
+     contain terms different from this License, provided that You are in
+     compliance with the terms of this License and that the license for the
+     Executable version does not attempt to limit or alter the recipient's
+     rights in the Source Code version from the rights set forth in this
+     License. If You distribute the Executable version under a different
+     license You must make it absolutely clear that any terms which differ
+     from this License are offered by You alone, not by the Initial
+     Developer or any Contributor. You hereby agree to indemnify the
+     Initial Developer and every Contributor for any liability incurred by
+     the Initial Developer or such Contributor as a result of any such
+     terms You offer.
+
+     3.7. Larger Works.
+     You may create a Larger Work by combining Covered Code with other code
+     not governed by the terms of this License and distribute the Larger
+     Work as a single product. In such a case, You must make sure the
+     requirements of this License are fulfilled for the Covered Code.
+
+4. Inability to Comply Due to Statute or Regulation.
+
+     If it is impossible for You to comply with any of the terms of this
+     License with respect to some or all of the Covered Code due to
+     statute, judicial order, or regulation then You must: (a) comply with
+     the terms of this License to the maximum extent possible; and (b)
+     describe the limitations and the code they affect. Such description
+     must be included in the LEGAL file described in Section 3.4 and must
+     be included with all distributions of the Source Code. Except to the
+     extent prohibited by statute or regulation, such description must be
+     sufficiently detailed for a recipient of ordinary skill to be able to
+     understand it.
+
+5. Application of this License.
+
+     This License applies to code to which the Initial Developer has
+     attached the notice in Exhibit A and to related Covered Code.
+
+6. Versions of the License.
+
+     6.1. New Versions.
+     Netscape Communications Corporation ("Netscape") may publish revised
+     and/or new versions of the License from time to time. Each version
+     will be given a distinguishing version number.
+
+     6.2. Effect of New Versions.
+     Once Covered Code has been published under a particular version of the
+     License, You may always continue to use it under the terms of that
+     version. You may also choose to use such Covered Code under the terms
+     of any subsequent version of the License published by Netscape. No one
+     other than Netscape has the right to modify the terms applicable to
+     Covered Code created under this License.
+
+     6.3. Derivative Works.
+     If You create or use a modified version of this License (which you may
+     only do in order to apply it to code which is not already Covered Code
+     governed by this License), You must (a) rename Your license so that
+     the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape",
+     "MPL", "NPL" or any confusingly similar phrase do not appear in your
+     license (except to note that your license differs from this License)
+     and (b) otherwise make it clear that Your version of the license
+     contains terms which differ from the Mozilla Public License and
+     Netscape Public License. (Filling in the name of the Initial
+     Developer, Original Code or Contributor in the notice described in
+     Exhibit A shall not of themselves be deemed to be modifications of
+     this License.)
+
+7. DISCLAIMER OF WARRANTY.
+
+     COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS,
+     WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+     WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF
+     DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING.
+     THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE
+     IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT,
+     YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE
+     COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER
+     OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF
+     ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
+
+8. TERMINATION.
+
+     8.1.  This License and the rights granted hereunder will terminate
+     automatically if You fail to comply with terms herein and fail to cure
+     such breach within 30 days of becoming aware of the breach. All
+     sublicenses to the Covered Code which are properly granted shall
+     survive any termination of this License. Provisions which, by their
+     nature, must remain in effect beyond the termination of this License
+     shall survive.
+
+     8.2.  If You initiate litigation by asserting a patent infringement
+     claim (excluding declatory judgment actions) against Initial Developer
+     or a Contributor (the Initial Developer or Contributor against whom
+     You file such action is referred to as "Participant")  alleging that:
+
+     (a)  such Participant's Contributor Version directly or indirectly
+     infringes any patent, then any and all rights granted by such
+     Participant to You under Sections 2.1 and/or 2.2 of this License
+     shall, upon 60 days notice from Participant terminate prospectively,
+     unless if within 60 days after receipt of notice You either: (i)
+     agree in writing to pay Participant a mutually agreeable reasonable
+     royalty for Your past and future use of Modifications made by such
+     Participant, or (ii) withdraw Your litigation claim with respect to
+     the Contributor Version against such Participant.  If within 60 days
+     of notice, a reasonable royalty and payment arrangement are not
+     mutually agreed upon in writing by the parties or the litigation claim
+     is not withdrawn, the rights granted by Participant to You under
+     Sections 2.1 and/or 2.2 automatically terminate at the expiration of
+     the 60 day notice period specified above.
+
+     (b)  any software, hardware, or device, other than such Participant's
+     Contributor Version, directly or indirectly infringes any patent, then
+     any rights granted to You by such Participant under Sections 2.1(b)
+     and 2.2(b) are revoked effective as of the date You first made, used,
+     sold, distributed, or had made, Modifications made by that
+     Participant.
+
+     8.3.  If You assert a patent infringement claim against Participant
+     alleging that such Participant's Contributor Version directly or
+     indirectly infringes any patent where such claim is resolved (such as
+     by license or settlement) prior to the initiation of patent
+     infringement litigation, then the reasonable value of the licenses
+     granted by such Participant under Sections 2.1 or 2.2 shall be taken
+     into account in determining the amount or value of any payment or
+     license.
+
+     8.4.  In the event of termination under Sections 8.1 or 8.2 above,
+     all end user license agreements (excluding distributors and resellers)
+     which have been validly granted by You or any distributor hereunder
+     prior to termination shall survive termination.
+
+9. LIMITATION OF LIABILITY.
+
+     UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT
+     (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL
+     DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE,
+     OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR
+     ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY
+     CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL,
+     WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER
+     COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN
+     INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF
+     LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY
+     RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW
+     PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE
+     EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO
+     THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
+
+10. U.S. GOVERNMENT END USERS.
+
+     The Covered Code is a "commercial item," as that term is defined in
+     48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer
+     software" and "commercial computer software documentation," as such
+     terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48
+     C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995),
+     all U.S. Government End Users acquire Covered Code with only those
+     rights set forth herein.
+
+11. MISCELLANEOUS.
+
+     This License represents the complete agreement concerning subject
+     matter hereof. If any provision of this License is held to be
+     unenforceable, such provision shall be reformed only to the extent
+     necessary to make it enforceable. This License shall be governed by
+     California law provisions (except to the extent applicable law, if
+     any, provides otherwise), excluding its conflict-of-law provisions.
+     With respect to disputes in which at least one party is a citizen of,
+     or an entity chartered or registered to do business in the United
+     States of America, any litigation relating to this License shall be
+     subject to the jurisdiction of the Federal Courts of the Northern
+     District of California, with venue lying in Santa Clara County,
+     California, with the losing party responsible for costs, including
+     without limitation, court costs and reasonable attorneys' fees and
+     expenses. The application of the United Nations Convention on
+     Contracts for the International Sale of Goods is expressly excluded.
+     Any law or regulation which provides that the language of a contract
+     shall be construed against the drafter shall not apply to this
+     License.
+
+12. RESPONSIBILITY FOR CLAIMS.
+
+     As between Initial Developer and the Contributors, each party is
+     responsible for claims and damages arising, directly or indirectly,
+     out of its utilization of rights under this License and You agree to
+     work with Initial Developer and Contributors to distribute such
+     responsibility on an equitable basis. Nothing herein is intended or
+     shall be deemed to constitute any admission of liability.
+
+13. MULTIPLE-LICENSED CODE.
+
+     Initial Developer may designate portions of the Covered Code as
+     "Multiple-Licensed".  "Multiple-Licensed" means that the Initial
+     Developer permits you to utilize portions of the Covered Code under
+     Your choice of the NPL or the alternative licenses, if any, specified
+     by the Initial Developer in the file described in Exhibit A.
+
+EXHIBIT A -Mozilla Public License.
+
+     ``The contents of this file are subject to the Mozilla Public License
+     Version 1.1 (the "License"); you may not use this file except in
+     compliance with the License. You may obtain a copy of the License at
+     http://www.mozilla.org/MPL/
+
+     Software distributed under the License is distributed on an "AS IS"
+     basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
+     License for the specific language governing rights and limitations
+     under the License.
+
+     The Original Code is ______________________________________.
+
+     The Initial Developer of the Original Code is ________________________.
+     Portions created by ______________________ are Copyright (C) ______
+     _______________________. All Rights Reserved.
+
+     Contributor(s): ______________________________________.
+
+     Alternatively, the contents of this file may be used under the terms
+     of the _____ license (the  "[___] License"), in which case the
+     provisions of [______] License are applicable instead of those
+     above.  If you wish to allow use of your version of this file only
+     under the terms of the [____] License and not to allow others to use
+     your version of this file under the MPL, indicate your decision by
+     deleting  the provisions above and replace  them with the notice and
+     other provisions required by the [___] License.  If you do not delete
+     the provisions above, a recipient may use your version of this file
+     under either the MPL or the [___] License."
+
+     [NOTE: The text of this Exhibit A may differ slightly from the text of
+     the notices in the Source Code files of the Original Code. You should
+     use the text of this Exhibit A rather than the text found in the
+     Original Code Source Code for Your Modifications.]
+
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor_config.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor_config.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/fckeditor_config.js	(revision 1280)
@@ -0,0 +1,69 @@
+﻿/*
+ * FCKeditor Extension for MediaWiki specific settings.
+ */
+
+// When using the modified image dialog you must set this variable. It must
+// correspond to $wgScriptPath in LocalSettings.php.
+FCKConfig.mwScriptPath = '' ;     
+
+// Setup the editor toolbar.
+FCKConfig.ToolbarSets['Wiki'] = [
+	['Source'],
+	['Cut','Copy','Paste',/*'PasteText','PasteWord',*/'-','Print'],
+	['Undo','Redo','-','Find','Replace','-','SelectAll','RemoveFormat'],
+	['SpecialChar','Table','Image','Rule'],
+	['MW_Template','MW_Ref','MW_Math'],
+	'/',
+	['FontFormat'],
+	['Bold','Italic','Underline','StrikeThrough','-','Subscript','Superscript'],
+	['OrderedList','UnorderedList','-','Blockquote'],
+//	['JustifyLeft','JustifyCenter','JustifyRight','JustifyFull'],
+	['Link','Unlink','Anchor'],
+//	['TextColor','BGColor'],
+	['FitWindow','-','About']
+] ;
+
+// Load the extension plugins.
+FCKConfig.PluginsPath = FCKConfig.EditorPath + '../plugins/' ;
+FCKConfig.Plugins.Add( 'mediawiki' ) ;
+
+FCKConfig.ForcePasteAsPlainText = true ;
+FCKConfig.FontFormats	= 'p;h1;h2;h3;h4;h5;h6;pre' ;
+
+FCKConfig.AutoDetectLanguage	= false ;
+FCKConfig.DefaultLanguage		= 'en' ;
+
+// FCKConfig.DisableObjectResizing = true ;
+
+FCKConfig.EditorAreaStyles = '\
+.FCK__MWTemplate \
+{ \
+	border: 1px dotted #00F; \
+	background-position: center center; \
+	background-image: url(' + FCKConfig.PluginsPath + 'mediawiki/images/icon_template.gif); \
+	background-repeat: no-repeat; \
+	width: 20px; \
+	height: 15px; \
+	vertical-align: middle; \
+} \
+.FCK__MWRef \
+{ \
+	border: 1px dotted #00F; \
+	background-position: center center; \
+	background-image: url(' + FCKConfig.PluginsPath + 'mediawiki/images/icon_ref.gif); \
+	background-repeat: no-repeat; \
+	width: 18px; \
+	height: 15px; \
+	vertical-align: middle; \
+} \
+.FCK__MWReferences \
+{ \
+	border: 1px dotted #00F; \
+	background-position: center center; \
+	background-image: url(' + FCKConfig.PluginsPath + 'mediawiki/images/icon_references.gif); \
+	background-repeat: no-repeat; \
+	width: 66px; \
+	height: 15px; \
+	vertical-align: middle; \
+} \
+' ;
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/plugins/mediawiki/dialogs/image.html
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/plugins/mediawiki/dialogs/image.html	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/plugins/mediawiki/dialogs/image.html	(revision 1280)
@@ -0,0 +1,337 @@
+﻿<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Image dialog window.
+-->
+<html>
+<head>
+	<title>Image Properties</title>
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+	<meta name="robots" content="noindex, nofollow" />
+	<script type="text/javascript">
+
+var oEditor		= window.parent.InnerDialogLoaded() ;
+var FCK			= oEditor.FCK ;
+var FCKLang		= oEditor.FCKLang ;
+var FCKConfig	= oEditor.FCKConfig ;
+var FCKRegexLib	= oEditor.FCKRegexLib ;
+var FCKTools	= oEditor.FCKTools ;
+
+document.write( '<script src="' + FCKConfig.BasePath + 'dialog/common/fck_dialog_common.js" type="text/javascript"><\/script>' ) ;
+
+	</script>
+	<script type="text/javascript">
+
+// Get the selected image (if available).
+var oImage = FCK.Selection.GetSelectedElement() ;
+
+if ( oImage && oImage.tagName != 'IMG' )
+	oImage = null ;
+
+window.onload = function()
+{
+	// Translate the dialog box texts.
+	oEditor.FCKLanguageManager.TranslatePage(document) ;
+
+	// Load the selected element information (if any).
+	LoadSelection() ;
+
+	//	UpdateOriginal() ;
+
+	window.parent.SetAutoSize( true ) ;
+	window.parent.SetOkButton( true ) ;
+}
+
+function LoadSelection()
+{
+	if ( ! oImage ) return ;
+
+	var sUrl = GetAttribute( oImage, '_fcksavedurl', '' ) ;
+	if ( sUrl.length == 0 )
+		sUrl = GetAttribute( oImage, 'src', '' ) ;
+
+	GetE('txtUrl').value    = GetAttribute( oImage, '_fck_mw_filename', '' ) ;
+	GetE('txtAlt').value    = GetAttribute( oImage, 'alt', '' ) ;
+	GetE('xType').value		= GetAttribute( oImage, '_fck_mw_type', '' ) ;
+	GetE('cmbAlign').value  = GetAttribute( oImage, '_fck_mw_location', '' ) ;
+
+	GetE('txtWidth').value  = GetAttribute( oImage, '_fck_mw_width', '' ) ;
+	GetE('txtHeight').value = GetAttribute( oImage, '_fck_mw_height', '' ) ;
+
+	UpdatePreview();
+}
+
+//#### The OK button was hit.
+function Ok()
+{
+	if ( GetE('txtUrl').value.length == 0 )
+	{
+		GetE('txtUrl').focus() ;
+		return false ;
+	}
+
+	window.parent.document.getElementById( 'btnOk' ).disabled = true ;
+	window.parent.document.getElementById( 'btnCancel' ).disabled = true ;
+
+	var imgName		= GetE('txtUrl').value ;
+	var imgCaption	= GetE('txtAlt').value ;
+	var imgType		= GetE('xType').value ;
+	var imgLocation	= GetE('cmbAlign').value ;
+	var imgWidth	= GetE('txtWidth').value ;
+	var imgHeight	= GetE('txtHeight').value ;
+
+	var ajaxArg = imgName ;
+
+	if ( imgType.length > 0 )
+		ajaxArg += '|' + imgType ;
+
+	if ( imgLocation.length > 0 )
+		ajaxArg += '|' + imgLocation ;
+
+	if ( imgWidth.length > 0 )
+	{
+		ajaxArg += '|' + imgWidth ;
+
+		if ( imgHeight.length > 0 )
+			ajaxArg += 'x' + imgHeight ;
+
+		ajaxArg += 'px' ;
+	}
+
+	if ( imgCaption.length > 0 )
+		ajaxArg += '|' + imgCaption ;
+
+	oEditor.window.parent.sajax_request_type = 'GET' ;
+	oEditor.window.parent.sajax_do_call( 'wfSajaxGetImageUrl', [ajaxArg], UpdateImageFromAjax ) ;
+
+	return false ;
+}
+
+function UpdateImageFromAjax( response )
+{
+	var bHasImage = ( oImage != null ) ;
+
+	if ( !bHasImage )
+		oImage = FCK.CreateElement( 'IMG' ) ;
+	else
+		oEditor.FCKUndo.SaveUndoStep() ;
+
+	UpdateImage( oImage, response.responseText ) ;
+
+	// Call it using setTimeout to avoid a strange behavior in Firefox.
+	window.setTimeout( window.parent.Cancel, 0 ) ;
+}
+
+function UpdateImage( e, realUrl )
+{
+	var imgType = GetE('xType').value ;
+	var imgLocation = GetE('cmbAlign').value ;
+
+	SetAttribute( e, "_fck_mw_filename", GetE('txtUrl').value ) ;
+	SetAttribute( e, "alt", GetE('txtAlt').value ) ;
+	SetAttribute( e, "_fck_mw_type", imgType ) ;
+	SetAttribute( e, "_fck_mw_location", imgLocation ) ;
+	SetAttribute( e, "_fck_mw_width", GetE('txtWidth').value ) ;
+	SetAttribute( e, "_fck_mw_height", GetE('txtHeight').value ) ;
+
+	SetAttribute( e, "width" , GetE('txtWidth').value ) ;
+	SetAttribute( e, "height", GetE('txtHeight').value ) ;
+
+	if ( imgType == 'thumb' || imgType == 'frame' )
+	{
+		e.className = 'fck_mw_frame' ;
+
+		if ( imgLocation.length == 0 )
+			imgLocation = 'right' ;
+	}
+
+	if ( imgLocation.length > 0 )
+		e.className += ' fck_mw_' + imgLocation ;
+
+	if ( realUrl.length == 0 )
+	{
+		e.className += ' fck_mw_notfound' ;
+		realUrl = 'about:blank' ;
+	}
+
+	e.src = realUrl ;
+	SetAttribute( e, "_fcksavedurl", realUrl ) ;
+}
+
+var searchTimer ;
+
+//#### Called while the user types the URL.
+function OnUrlChange()
+{
+	var link = GetE('txtUrl').value.Trim() ;
+
+	if ( searchTimer )
+		window.clearTimeout( searchTimer ) ;
+
+	if ( link.length < 3  )
+	{
+		ClearSearch() ;
+
+		if ( link.length == 0 )
+			SetSearchMessage( 'start typing in the above field' ) ;
+		else
+			SetSearchMessage( 'too short... type more' ) ;
+		return ;
+	}
+
+	SetSearchMessage( 'stop typing to search' ) ;
+	searchTimer = window.setTimeout( StartSearch, 500 ) ;
+}
+
+function StartSearch()
+{
+	var link = GetE('txtUrl').value.Trim() ;
+
+	if ( link.length < 3  )
+		return ;
+
+	SetSearchMessage( 'searching...' ) ;
+
+	// Make an Ajax search for the pages.
+	oEditor.window.parent.sajax_request_type = 'GET' ;
+	oEditor.window.parent.sajax_do_call( 'wfSajaxSearchImageFCKeditor', [link], LoadSearchResults ) ;
+}
+
+function LoadSearchResults( result )
+{
+	var results = result.responseText.Trim().split( '\n' ) ;
+	var select = GetE( 'xWikiResults' ) ;
+
+	ClearSearch() ;
+
+	if ( results.length == 0 || ( results.length == 1 && results[0].length == 0 ) )
+	{
+		SetSearchMessage( 'no images found' ) ;
+	}
+	else
+	{
+		if ( results.length == 1 )
+			SetSearchMessage( 'one image found' ) ;
+		else
+			SetSearchMessage( results.length + ' images found' ) ;
+
+		for ( var i = 0 ; i < results.length ; i++ )
+			FCKTools.AddSelectOption( select, results[i], results[i] ) ;
+	}
+}
+
+function ClearSearch()
+{
+	var select = GetE( 'xWikiResults' ) ;
+
+	while ( select.options.length > 0 )
+		select.remove( 0 )
+}
+
+function SetSearchMessage( message )
+{
+	GetE('xWikiSearchStatus').innerHTML = message ;
+}
+
+function SetUrl( url )
+{
+	if ( url.length > 0 )
+		GetE('txtUrl').value = url ;
+}
+
+function UpdatePreviewFromAjax( response )
+{
+	var eImgPreview = window.document.getElementById('prevImg');
+	eImgPreview.src = response.responseText ;
+	SetAttribute(eImgPreview, "width" , '180px' ) ;
+	SetAttribute(eImgPreview, "height", '130px' ) ;
+	//UpdateImage( eImgPreview, response.responseText ) ;
+}
+
+function UpdatePreview()
+{
+	var ajaxArg = GetE('txtUrl').value + '|180x130px';
+	oEditor.window.parent.sajax_request_type = 'GET' ;
+	oEditor.window.parent.sajax_do_call( 'wfSajaxGetImageUrl', [ajaxArg], UpdatePreviewFromAjax ) ;
+}
+
+	</script>
+</head>
+<body scroll="no" style="overflow: hidden">
+	<div id="divInfo">
+		<table cellspacing="1" cellpadding="1" border="0" width="100%">
+			<tr valign="center">
+				<td>
+					<span>Image file name</span><br />
+					<input id="txtUrl" style="width: 100%" type="text" onkeyup="OnUrlChange();" />
+					<br />
+					Automatic search results (<span id="xWikiSearchStatus">start typing in the above field</span>)<br />
+					<select id="xWikiResults" size="5" style="width: 100%; height: 70px" onclick="SetUrl( this.value );UpdatePreview();">
+					</select>
+				</td>
+				<td width="180px" height="130px"><div style="width:180; height:130; border:solid 1px black;" valign="center" align="center">
+					<img id="prevImg" width="180px" height="130px" alt="Preview"></div>
+				</td>
+			</tr>
+			<tr>
+				<td colspan="2">
+					<span>Caption</span><br />
+					<input id="txtAlt" style="width: 100%" type="text"><br />
+				</td>
+			</tr>
+			<tr>
+				<td valign="top" colspan="2">
+					<table cellspacing="0" cellpadding="0" border="0">
+						<tr>
+							<td nowrap="nowrap">
+								Special Type<br />
+								<select id="xType">
+									<option value="" selected="selected"></option>
+									<option value="thumb">Thumbnail</option>
+									<option value="frame">Frame</option>
+									<option value="border">Border</option>
+								</select>
+							</td>
+							<td style="padding-left:7px;">
+								<span fcklang="DlgImgAlign">Align</span><br />
+								<select id="cmbAlign" onchange="UpdatePreview();">
+									<option value="" selected></option>
+									<option fcklang="DlgImgAlignRight" value="right">Right</option>
+									<option fcklang="DlgImgAlignLeft" value="left">Left</option>
+									<option value="center">Center</option>
+								</select>
+							</td>
+							<td style="padding-left:7px;">
+								<span fcklang="DlgImgWidth">Width</span><br />
+								<input type="text" size="3" id="txtWidth">
+							</td>
+							<td style="padding-left:7px;">
+								<span fcklang="DlgImgHeight">Height</span><br />
+								<input type="text" size="3" id="txtHeight">
+							</td>
+						</tr>
+					</table>
+				</td>
+			</tr>
+		</table>
+	</div>
+</body>
+</html>
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/plugins/mediawiki/dialogs/link.html
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/plugins/mediawiki/dialogs/link.html	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/plugins/mediawiki/dialogs/link.html	(revision 1280)
@@ -0,0 +1,231 @@
+﻿<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Link dialog window.
+-->
+<html>
+<head>
+	<title>Link Properties</title>
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+	<meta name="robots" content="noindex, nofollow" />
+	<script type="text/javascript">
+
+var oEditor		= window.parent.InnerDialogLoaded() ;
+var FCK			= oEditor.FCK ;
+var FCKLang		= oEditor.FCKLang ;
+var FCKConfig	= oEditor.FCKConfig ;
+var FCKRegexLib	= oEditor.FCKRegexLib ;
+var FCKTools	= oEditor.FCKTools ;
+
+document.write( '<script src="' + FCKConfig.BasePath + 'dialog/common/fck_dialog_common.js" type="text/javascript"><\/script>' ) ;
+
+	</script>
+	<script type="text/javascript">
+
+// oLink: The actual selected link in the editor.
+var oLink = FCK.Selection.MoveToAncestorNode( 'A' ) ;
+if ( oLink )
+	FCK.Selection.SelectNode( oLink ) ;
+
+window.onload = function()
+{
+	// Translate the dialog box texts.
+	oEditor.FCKLanguageManager.TranslatePage(document) ;
+
+	// Load the selected link information (if any).
+	LoadSelection() ;
+
+	// Activate the "OK" button.
+	window.parent.SetOkButton( true ) ;
+	window.parent.SetAutoSize( true ) ;
+}
+
+function LoadSelection()
+{
+	if ( !oLink ) return ;
+
+	// Get the actual Link href.
+	var sHRef = oLink.getAttribute( '_fcksavedurl' ) ;
+	if ( sHRef == null )
+		sHRef = oLink.getAttribute( 'href' , 2 ) || '' ;
+
+	GetE('txtUrl').value = sHRef ;
+}
+
+var searchTimer ;
+
+//#### Called while the user types the URL.
+function OnUrlChange()
+{
+	var link = GetE('txtUrl').value.Trim() ;
+
+	if ( searchTimer )
+		window.clearTimeout( searchTimer ) ;
+		
+	if ( link.StartsWith( '#' ) )
+	{
+		SetSearchMessage( 'anchor link... no search for it' ) ;
+		return ;
+	} 
+	
+	if ( link.StartsWith( 'mailto:' ) )
+	{
+		SetSearchMessage( 'e-mail link... no search for it' ) ;
+		return ;
+	} 
+	
+	if( /^\w+:\/\//.test( link ) )
+	{
+		SetSearchMessage( 'external link... no search for it' ) ;
+		return ;
+	}
+
+	if ( link.length < 3  )
+	{
+		ClearSearch() ;
+
+		if ( link.length == 0 )
+			SetSearchMessage( 'start typing in the above field' ) ;
+		else
+			SetSearchMessage( 'too short... type more' ) ;
+		return ;
+	}
+	
+	SetSearchMessage( 'stop typing to search' ) ;
+	searchTimer = window.setTimeout( StartSearch, 500 ) ;
+}
+
+function StartSearch()
+{
+	var link = GetE('txtUrl').value.Trim() ;
+
+	if ( link.length < 3  )
+		return ;
+
+	SetSearchMessage( 'searching...' ) ;
+
+	// Make an Ajax search for the pages.
+	oEditor.window.parent.sajax_request_type = 'GET' ;
+	oEditor.window.parent.sajax_do_call( 'wfSajaxSearchArticleFCKeditor', [link], LoadSearchResults ) ;
+}
+
+function LoadSearchResults( result )
+{
+	var results = result.responseText.Trim().split( '\n' ) ;
+	var select = GetE( 'xWikiResults' ) ;
+	
+	ClearSearch() ;
+
+	if ( results.length == 0 || ( results.length == 1 && results[0].length == 0 ) )
+	{
+		SetSearchMessage( 'no articles found' ) ;
+	}
+	else
+	{
+		if ( results.length == 1 )
+			SetSearchMessage( 'one article found' ) ;
+		else
+			SetSearchMessage( results.length + ' articles found' ) ;
+
+		for ( var i = 0 ; i < results.length ; i++ )
+			FCKTools.AddSelectOption( select, results[i], results[i] ) ;
+	}
+}
+
+function ClearSearch()
+{
+	var select = GetE( 'xWikiResults' ) ;
+
+	while ( select.options.length > 0 )
+		select.remove( 0 ) 
+}
+
+function SetSearchMessage( message )
+{
+	GetE('xWikiSearchStatus').innerHTML = message ;
+}
+
+function SetUrl( url )
+{
+	GetE('txtUrl').value = url ;
+}
+
+//#### The OK button was hit.
+function Ok()
+{
+	var sUri = GetE('txtUrl').value ;
+	var sInnerHtml ;
+
+	// If no link is selected, create a new one (it may result in more than one link creation - #220).
+	var aLinks = oLink ? [ oLink ] : oEditor.FCK.CreateLink( sUri ) ;
+
+	// If no selection, no links are created, so use the uri as the link text (by dom, 2006-05-26)
+	var aHasSelection = ( aLinks.length > 0 ) ;
+	if ( !aHasSelection )
+	{
+		sInnerHtml = sUri;
+
+		var oLinkPathRegEx = new RegExp("//?([^?\"']+)([?].*)?$") ;
+		var asLinkPath = oLinkPathRegEx.exec( sUri ) ;
+		if (asLinkPath != null)
+			sInnerHtml = asLinkPath[1];  // use matched path
+		
+		// Create a new (empty) anchor.
+		aLinks = [ oEditor.FCK.InsertElement( 'a' ) ] ;
+	}
+
+	oEditor.FCKUndo.SaveUndoStep() ;
+
+	for ( var i = 0 ; i < aLinks.length ; i++ )
+	{
+		oLink = aLinks[i] ;
+
+		if ( aHasSelection )
+			sInnerHtml = oLink.innerHTML ;		// Save the innerHTML (IE changes it if it is like an URL).
+
+		oLink.href = sUri ;
+		SetAttribute( oLink, '_fcksavedurl', sUri ) ;
+
+		oLink.innerHTML = sInnerHtml ;		// Set (or restore) the innerHTML
+
+	}
+
+	// Select the (first) link.
+	oEditor.FCKSelection.SelectNode( aLinks[0] );
+
+	return true ;
+}
+
+	</script>
+</head>
+<body scroll="no" style="overflow: hidden">
+	<div id="divInfo">
+		<div id="divLinkTypeUrl">
+			<span>Link</span><br />
+			<input id="txtUrl" style="width: 100%" type="text" onkeyup="OnUrlChange();" />
+			<br />
+			Automatic search results (<span id="xWikiSearchStatus">start typing in the above field</span>)<br />
+			<select id="xWikiResults" size="10" style="width: 100%; height:150px" onclick="SetUrl( this.value );">
+			</select>
+		</div>
+	</div>
+</body>
+</html>
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/plugins/mediawiki/dialogs/math.html
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/plugins/mediawiki/dialogs/math.html	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/plugins/mediawiki/dialogs/math.html	(revision 1280)
@@ -0,0 +1,128 @@
+﻿<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Link dialog window.
+-->
+<html>
+<head>
+	<title>Formula Editor</title>
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+	<meta name="robots" content="noindex, nofollow" />
+	<script type="text/javascript">
+
+var oEditor		= window.parent.InnerDialogLoaded() ;
+var FCK			= oEditor.FCK ;
+var FCKLang		= oEditor.FCKLang ;
+var FCKConfig	= oEditor.FCKConfig ;
+var FCKRegexLib	= oEditor.FCKRegexLib ;
+var FCKTools	= oEditor.FCKTools ;
+
+document.write( '<script src="' + FCKConfig.BasePath + 'dialog/common/fck_dialog_common.js" type="text/javascript"><\/script>' ) ;
+
+	</script>
+	<script type="text/javascript">
+
+// Get the selected flash embed (if available).
+var oMathImage = FCK.Selection.GetSelectedElement() ;
+
+if ( oMathImage )
+{
+	if ( oMathImage.tagName != 'IMG' || !oMathImage.getAttribute('_fck_mw_math') )
+		oMathImage = null ;
+}
+
+window.onload = function()
+{
+	// Translate the dialog box texts.
+	oEditor.FCKLanguageManager.TranslatePage(document) ;
+
+	// Load the selected link information (if any).
+	LoadSelection() ;
+
+	// Activate the "OK" button.
+	window.parent.SetOkButton( true ) ;
+	window.parent.SetAutoSize( true ) ;
+}
+
+function LoadSelection()
+{
+	if ( !oMathImage ) return ;
+
+	GetE('xTemplateRaw').value = oMathImage.getAttribute( '_fck_mw_math' ) ;
+}
+
+//#### The OK button was hit.
+function Ok()
+{
+	var formula = GetE('xTemplateRaw').value.Trim() ;
+	
+	if ( formula.length == 0 )
+	{
+		alert( 'Please type the formula' ) ;
+		return false ;
+	}
+
+	window.parent.document.getElementById( 'btnOk' ).disabled = true ;
+	window.parent.document.getElementById( 'btnCancel' ).disabled = true ;
+
+	oEditor.window.parent.sajax_request_type = 'GET' ;
+	oEditor.window.parent.sajax_do_call( 'wfSajaxGetMathUrl', [formula], UpdateImageFromAjax ) ;
+	
+	return false ;
+}
+
+function UpdateImageFromAjax( response )
+{
+	if ( !oMathImage )
+		oMathImage = FCK.CreateElement( 'IMG' ) ;
+	else
+		oEditor.FCKUndo.SaveUndoStep() ;
+	
+	SetAttribute( oMathImage, "_fck_mw_math", GetE('xTemplateRaw').value.Trim() ) ;
+	SetAttribute( oMathImage, "_fckfakelement", 'true' ) ;
+
+	oMathImage.src = response.responseText ;
+	SetAttribute( oMathImage, "_fcksavedurl", response.responseText ) ;
+
+	// Call it using setTimeout to avoid a strange behavior in Firefox.
+	window.setTimeout( window.parent.Cancel, 0 ) ;
+}
+
+	</script>
+</head>
+<body style="overflow: hidden">
+	<div id="divInfo">
+		<table cellpadding="0" cellspacing="0" border="0" width="100%" height="100%">
+			<tr>
+				<td>
+					<span>Formula (TeX markup)</span>
+				</td>
+			</tr>
+			<tr>
+				<td height="100%">
+					<textarea id="xTemplateRaw" style="width: 100%; height: 100%; font-family: Monospace"
+						cols="50" rows="10" wrap="off"></textarea>
+				</td>
+			</tr>
+		</table>
+	</div>
+</body>
+</html>
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/plugins/mediawiki/dialogs/ref.html
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/plugins/mediawiki/dialogs/ref.html	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/plugins/mediawiki/dialogs/ref.html	(revision 1280)
@@ -0,0 +1,124 @@
+﻿<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Link dialog window.
+-->
+<html>
+<head>
+	<title>Reference Properties</title>
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+	<meta name="robots" content="noindex, nofollow" />
+	<script type="text/javascript">
+
+var oEditor		= window.parent.InnerDialogLoaded() ;
+var FCK			= oEditor.FCK ;
+var FCKLang		= oEditor.FCKLang ;
+var FCKConfig	= oEditor.FCKConfig ;
+var FCKRegexLib	= oEditor.FCKRegexLib ;
+var FCKTools	= oEditor.FCKTools ;
+
+document.write( '<script src="' + FCKConfig.BasePath + 'dialog/common/fck_dialog_common.js" type="text/javascript"><\/script>' ) ;
+
+	</script>
+	<script type="text/javascript">
+
+// Get the selected flash embed (if available).
+var oFakeImage = FCK.Selection.GetSelectedElement() ;
+var oRef ;
+
+if ( oFakeImage )
+{
+	if ( oFakeImage.tagName == 'IMG' && oFakeImage.getAttribute('_fck_mw_ref') )
+		oRef = FCK.GetRealElement( oFakeImage ) ;
+	else
+		oFakeImage = null ;
+}
+
+window.onload = function()
+{
+	// Translate the dialog box texts.
+	oEditor.FCKLanguageManager.TranslatePage(document) ;
+
+	// Load the selected link information (if any).
+	LoadSelection() ;
+
+	// Activate the "OK" button.
+	window.parent.SetOkButton( true ) ;
+	window.parent.SetAutoSize( true ) ;
+}
+
+function LoadSelection()
+{
+	if ( !oRef ) return ;
+
+	GetE('xRefText').value = FCKTools.HTMLDecode( oRef.innerHTML ).replace( /&quot;/g, '"' ) ;
+	GetE('xRefName').value = oRef.getAttribute( 'name' ) ;
+}
+
+//#### The OK button was hit.
+function Ok()
+{
+	if ( !oRef )
+	{
+		oRef = FCK.EditorDocument.createElement( 'SPAN' ) ;
+		oRef.className = 'fck_mw_ref' ;
+	}
+	
+	var refData = FCKTools.HTMLEncode( GetE('xRefText').value ).Trim().replace( /"/g, '&quot;' ) ;
+	oRef.innerHTML = refData ;
+	SetAttribute( oRef, "name", GetE('xRefName').value ) ;
+
+	if ( !oFakeImage )
+	{
+		oFakeImage	= oEditor.FCKDocumentProcessor_CreateFakeImage( 'FCK__MWRef', oRef ) ;
+		oFakeImage.setAttribute( '_fck_mw_ref', 'true', 0 ) ;
+		oFakeImage	= FCK.InsertElement( oFakeImage ) ;
+	}
+
+	return true ;
+}
+
+	</script>
+</head>
+<body style="overflow: hidden">
+	<div id="divInfo">
+		<table cellpadding="0" cellspacing="0" border="0" width="100%" height="100%">
+			<tr>
+				<td>
+					<span>Reference text (Wikitext)</span>
+				</td>
+			</tr>
+			<tr>
+				<td height="100%">
+					<textarea id="xRefText" style="width: 100%; height: 100%; font-family: Monospace"
+						cols="50" rows="5"></textarea>
+				</td>
+			</tr>
+			<tr>
+				<td>
+					Reference name (optional)<br />
+					<input id="xRefName" type="text" size="15" />
+				</td>
+			</tr>
+		</table>
+	</div>
+</body>
+</html>
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/plugins/mediawiki/dialogs/template.html
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/plugins/mediawiki/dialogs/template.html	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/plugins/mediawiki/dialogs/template.html	(revision 1280)
@@ -0,0 +1,123 @@
+﻿<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Link dialog window.
+-->
+<html>
+<head>
+	<title>Template Properties</title>
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+	<meta name="robots" content="noindex, nofollow" />
+	<script type="text/javascript">
+
+var oEditor		= window.parent.InnerDialogLoaded() ;
+var FCK			= oEditor.FCK ;
+var FCKLang		= oEditor.FCKLang ;
+var FCKConfig	= oEditor.FCKConfig ;
+var FCKRegexLib	= oEditor.FCKRegexLib ;
+var FCKTools	= oEditor.FCKTools ;
+
+document.write( '<script src="' + FCKConfig.BasePath + 'dialog/common/fck_dialog_common.js" type="text/javascript"><\/script>' ) ;
+
+	</script>
+	<script type="text/javascript">
+
+// Get the selected flash embed (if available).
+var oFakeImage = FCK.Selection.GetSelectedElement() ;
+var oTemplateSpan ;
+
+if ( oFakeImage )
+{
+	if ( oFakeImage.tagName == 'IMG' && oFakeImage.getAttribute('_fck_mw_template') )
+		oTemplateSpan = FCK.GetRealElement( oFakeImage ) ;
+	else
+		oFakeImage = null ;
+}
+
+window.onload = function()
+{
+	// Translate the dialog box texts.
+	oEditor.FCKLanguageManager.TranslatePage(document) ;
+
+	// Load the selected link information (if any).
+	LoadSelection() ;
+
+	// Activate the "OK" button.
+	window.parent.SetOkButton( true ) ;
+	window.parent.SetAutoSize( true ) ;
+}
+
+function LoadSelection()
+{
+	if ( !oTemplateSpan ) return ;
+
+	GetE('xTemplateRaw').value = FCKTools.HTMLDecode( oTemplateSpan.innerHTML ).replace( /&quot;/g, '"' ) ;
+}
+
+//#### The OK button was hit.
+function Ok()
+{
+	if ( !oTemplateSpan )
+	{
+		oTemplateSpan = FCK.EditorDocument.createElement( 'SPAN' ) ;
+		oTemplateSpan.className = 'fck_mw_template' ;
+	}
+	
+	var templateData = FCKTools.HTMLEncode( GetE('xTemplateRaw').value ).Trim().replace( /"/g, '&quot;' ) ;
+	
+	if ( !( /^{{[\s\S]+}}$/.test( templateData ) ) )
+	{
+		alert( 'Templates must start with {{ and end with }}. Please check it.' ) ;
+		return false ;
+	}
+	
+	oTemplateSpan.innerHTML = templateData ;
+
+	if ( !oFakeImage )
+	{
+		oFakeImage	= oEditor.FCKDocumentProcessor_CreateFakeImage( 'FCK__MWTemplate', oTemplateSpan ) ;
+		oFakeImage.setAttribute( '_fck_mw_template', 'true', 0 ) ;
+		oFakeImage	= FCK.InsertElement( oFakeImage ) ;
+	}
+
+	return true ;
+}
+
+	</script>
+</head>
+<body style="overflow: hidden">
+	<div id="divInfo">
+		<table cellpadding="0" cellspacing="0" border="0" width="100%" height="100%">
+			<tr>
+				<td>
+					<span>Template raw definition (from {{ to }})</span><br />
+				</td>
+			</tr>
+			<tr>
+				<td height="100%">
+					<textarea id="xTemplateRaw" style="width: 100%; height: 100%; font-family: Monospace"
+						cols="50" rows="10" wrap="off"></textarea>
+				</td>
+			</tr>
+		</table>
+	</div>
+</body>
+</html>
Index: /MediaWiki/branches/1.11/extensions/FCKeditor/plugins/mediawiki/fckplugin.js
===================================================================
--- /MediaWiki/branches/1.11/extensions/FCKeditor/plugins/mediawiki/fckplugin.js	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/FCKeditor/plugins/mediawiki/fckplugin.js	(revision 1280)
@@ -0,0 +1,694 @@
+﻿/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Main MediaWiki integration plugin.
+ *
+ * Wikitext syntax reference:
+ *	http://meta.wikimedia.org/wiki/Help:Wikitext_examples
+ *	http://meta.wikimedia.org/wiki/Help:Advanced_editing
+ *
+ * MediaWiki Sandbox:
+ *	http://meta.wikimedia.org/wiki/Meta:Sandbox
+ */
+
+// Rename the "Source" buttom to "Wikitext".
+FCKToolbarItems.RegisterItem( 'Source', new FCKToolbarButton( 'Source', 'Wikitext', null, FCK_TOOLBARITEM_ICONTEXT, true, true, 1 ) ) ;
+
+// Register our toolbar buttons.
+var tbButton = new FCKToolbarButton( 'MW_Template', 'Template', 'Insert/Edit Template' ) ;
+tbButton.IconPath = FCKConfig.PluginsPath + 'mediawiki/images/tb_icon_template.gif' ;
+FCKToolbarItems.RegisterItem( 'MW_Template', tbButton ) ;
+
+tbButton = new FCKToolbarButton( 'MW_Ref', 'Reference', 'Insert/Edit Reference' ) ;
+tbButton.IconPath = FCKConfig.PluginsPath + 'mediawiki/images/tb_icon_ref.gif' ;
+FCKToolbarItems.RegisterItem( 'MW_Ref', tbButton ) ;
+
+tbButton = new FCKToolbarButton( 'MW_Math', 'Formula', 'Insert/Edit Formula' ) ;
+tbButton.IconPath = FCKConfig.PluginsPath + 'mediawiki/images/tb_icon_math.gif' ;
+FCKToolbarItems.RegisterItem( 'MW_Math', tbButton ) ;
+
+// Override some dialogs.
+FCKCommands.RegisterCommand( 'MW_Template', new FCKDialogCommand( 'MW_Template', 'Template Properties', FCKConfig.PluginsPath + 'mediawiki/dialogs/template.html', 400, 330 ) ) ;
+FCKCommands.RegisterCommand( 'MW_Ref', new FCKDialogCommand( 'MW_Ref', 'Reference Properties', FCKConfig.PluginsPath + 'mediawiki/dialogs/ref.html', 400, 250 ) ) ;
+FCKCommands.RegisterCommand( 'MW_Math', new FCKDialogCommand( 'MW_Math', 'Formula', FCKConfig.PluginsPath + 'mediawiki/dialogs/math.html', 400, 300 ) ) ;
+FCKCommands.RegisterCommand( 'Link', new FCKDialogCommand( 'Link', FCKLang.DlgLnkWindowTitle, FCKConfig.PluginsPath + 'mediawiki/dialogs/link.html', 400, 250 ) ) ;
+FCKCommands.RegisterCommand( 'Image', new FCKDialogCommand( 'Image', FCKLang.DlgImgTitle, FCKConfig.PluginsPath + 'mediawiki/dialogs/image.html', 450, 300 ) ) ;
+
+// MediaWiki Wikitext Data Processor implementation.
+FCK.DataProcessor =
+{
+	_inPre : false,
+	_inLSpace : false,	
+
+	/*
+	 * Returns a string representing the HTML format of "data". The returned
+	 * value will be loaded in the editor.
+	 * The HTML must be from <html> to </html>, eventually including
+	 * the DOCTYPE.
+	 *     @param {String} data The data to be converted in the
+	 *            DataProcessor specific format.
+	 */
+	ConvertToHtml : function( data )
+	{
+		// Call the original code.
+		return FCKDataProcessor.prototype.ConvertToHtml.call( this, data ) ;
+	},
+
+	/*
+	 * Converts a DOM (sub-)tree to a string in the data format.
+	 *     @param {Object} rootNode The node that contains the DOM tree to be
+	 *            converted to the data format.
+	 *     @param {Boolean} excludeRoot Indicates that the root node must not
+	 *            be included in the conversion, only its children.
+	 *     @param {Boolean} format Indicates that the data must be formatted
+	 *            for human reading. Not all Data Processors may provide it.
+	 */
+	ConvertToDataFormat : function( rootNode, excludeRoot, ignoreIfEmptyParagraph, format )
+	{
+		// rootNode is <body>.
+
+		// Normalize the document for text node processing.
+		rootNode.normalize() ;
+
+		var stringBuilder = new Array() ;
+		this._AppendNode( rootNode, stringBuilder ) ;
+		return stringBuilder.join( '' ).Trim() ;
+	},
+
+	/*
+	 * Makes any necessary changes to a piece of HTML for insertion in the
+	 * editor selection position.
+	 *     @param {String} html The HTML to be fixed.
+	 */
+	FixHtml : function( html )
+	{
+		return html ;
+	},
+
+	// Collection of element definitions:
+	//		0 : Prefix
+	//		1 : Suffix
+	//		2 : Ignore children
+	_BasicElements : {
+		body	: [ ],
+		b		: [ "'''", "'''" ],
+		strong	: [ "'''", "'''" ],
+		i		: [ "''", "''" ],
+		em		: [ "''", "''" ],
+		p		: [ '\n', '\n' ],
+		h1		: [ '\n= ', ' =\n' ],
+		h2		: [ '\n== ', ' ==\n' ],
+		h3		: [ '\n=== ', ' ===\n' ],
+		h4		: [ '\n==== ', ' ====\n' ],
+		h5		: [ '\n===== ', ' =====\n' ],
+		h6		: [ '\n====== ', ' ======\n' ],
+		br		: [ '<br>', null, true ],
+		hr		: [ '\n----\n', null, true ]
+	} ,
+
+	// This function is based on FCKXHtml._AppendNode.
+	_AppendNode : function( htmlNode, stringBuilder )
+	{
+		if ( !htmlNode )
+			return ;
+
+		switch ( htmlNode.nodeType )
+		{
+			// Element Node.
+			case 1 :
+
+				// Here we found an element that is not the real element, but a
+				// fake one (like the Flash placeholder image), so we must get the real one.
+				if ( htmlNode.getAttribute('_fckfakelement') && !htmlNode.getAttribute( '_fck_mw_math' ) )
+					return this._AppendNode( FCK.GetRealElement( htmlNode ), stringBuilder ) ;
+
+				// Mozilla insert custom nodes in the DOM.
+				if ( FCKBrowserInfo.IsGecko && htmlNode.hasAttribute('_moz_editor_bogus_node') )
+					return ;
+
+				// This is for elements that are instrumental to FCKeditor and
+				// must be removed from the final HTML.
+				if ( htmlNode.getAttribute('_fcktemp') )
+					return ;
+
+				// Get the element name.
+				var sNodeName = htmlNode.tagName.toLowerCase()  ;
+
+				if ( FCKBrowserInfo.IsIE )
+				{
+					// IE doens't include the scope name in the nodeName. So, add the namespace.
+					if ( htmlNode.scopeName && htmlNode.scopeName != 'HTML' && htmlNode.scopeName != 'FCK' )
+						sNodeName = htmlNode.scopeName.toLowerCase() + ':' + sNodeName ;
+				}
+				else
+				{
+					if ( sNodeName.StartsWith( 'fck:' ) )
+						sNodeName = sNodeName.Remove( 0,4 ) ;
+				}
+
+				// Check if the node name is valid, otherwise ignore this tag.
+				// If the nodeName starts with a slash, it is a orphan closing tag.
+				// On some strange cases, the nodeName is empty, even if the node exists.
+				if ( !FCKRegexLib.ElementName.test( sNodeName ) )
+					return ;
+
+				if ( sNodeName == 'br' && ( this._inPre || this._inLSpace ) ) 
+				{
+					stringBuilder.push( "\n" ) ;
+					if ( this._inLSpace )
+						stringBuilder.push( " " ) ;
+					return ;
+				}
+					
+				// Remove the <br> if it is a bogus node.
+				if ( sNodeName == 'br' && htmlNode.getAttribute( 'type', 2 ) == '_moz' )
+					return ;
+
+				// The already processed nodes must be marked to avoid then to be duplicated (bad formatted HTML).
+				// So here, the "mark" is checked... if the element is Ok, then mark it.
+				if ( htmlNode._fckxhtmljob && htmlNode._fckxhtmljob == FCKXHtml.CurrentJobNum )
+					return ;
+
+				var basicElement = this._BasicElements[ sNodeName ] ;
+				if ( basicElement )
+				{
+					if ( basicElement[0] )
+						stringBuilder.push( basicElement[0] ) ;
+
+					if ( !basicElement[2] )
+						this._AppendChildNodes( htmlNode, stringBuilder ) ;
+
+					if ( basicElement[1] )
+						stringBuilder.push( basicElement[1] ) ;
+				}
+				else
+				{
+					switch ( sNodeName )
+					{
+						case 'ol' :
+						case 'ul' :
+							var isFirstLevel = !htmlNode.parentNode.nodeName.IEquals( 'ul', 'ol', 'li' ) ;
+
+							this._AppendChildNodes( htmlNode, stringBuilder ) ;
+
+							if ( isFirstLevel )
+								stringBuilder.push( '\n' ) ;
+
+							break ;
+
+						case 'li' :
+
+							stringBuilder.push( '\n' ) ;
+
+							var listPrefix = '' ;
+							var parent = htmlNode.parentNode ;
+
+							while ( parent )
+							{
+								if ( parent.nodeName.toLowerCase() == 'ul' )
+									listPrefix = '*' + listPrefix ;
+								else if ( parent.nodeName.toLowerCase() == 'ol' )
+									listPrefix = '#' + listPrefix ;
+								else if ( parent.nodeName.toLowerCase() != 'li' )
+									break ;
+
+								parent = parent.parentNode ;
+							}
+
+							stringBuilder.push( listPrefix ) ;
+							stringBuilder.push( ' ' ) ;
+							this._AppendChildNodes( htmlNode, stringBuilder ) ;
+
+							break ;
+
+						case 'a' :
+
+							// Get the actual Link href.
+							var href = htmlNode.getAttribute( '_fcksavedurl' ) ;
+							var hrefType		= htmlNode.getAttribute( '_fck_mw_type' ) || '' ;
+							
+							if ( href == null )
+								href = htmlNode.getAttribute( 'href' , 2 ) || '' ;
+
+							if ( hrefType == "media" )
+							{
+								var isWikiUrl = true ;
+								stringBuilder.push( '[[Media:' ) ;
+							}
+							else
+							{
+								var isWikiUrl = !( href.StartsWith( 'mailto:' ) || /^\w+:\/\//.test( href ) ) ;
+								stringBuilder.push( isWikiUrl ? '[[' : '[' ) ;
+							}
+							stringBuilder.push( href ) ;
+							if ( href != htmlNode.innerHTML && htmlNode.innerHTML != '[n]' )
+							{
+								stringBuilder.push( isWikiUrl? '|' : ' ' ) ;
+								this._AppendChildNodes( htmlNode, stringBuilder ) ;
+							}
+							stringBuilder.push( isWikiUrl ? ']]' : ']' ) ;
+
+							break ;
+							
+						case 'dl' :
+							stringBuilder.push( '\n' ) ;
+							this._AppendChildNodes( htmlNode, stringBuilder ) ;
+							if (stringBuilder.length > 0 && !stringBuilder[ stringBuilder.length - 1 ].EndsWith( '\n' ))
+								stringBuilder.push( '\n' ) ;
+							break ;
+
+						case 'dt' :
+							stringBuilder.push( ';' ) ;
+							this._AppendChildNodes( htmlNode, stringBuilder ) ;
+							break ;
+
+						case 'dd' :
+							stringBuilder.push( ':' ) ;
+							this._AppendChildNodes( htmlNode, stringBuilder ) ;
+							stringBuilder.push( '\n' ) ;
+							break ;
+							
+						case 'table' :
+
+							var attribs = this._GetAttributesStr( htmlNode ) ;
+
+							stringBuilder.push( '\n{|' ) ;
+							if ( attribs.length > 0 )
+								stringBuilder.push( attribs ) ;
+							stringBuilder.push( '\n' ) ;
+
+							if ( htmlNode.caption && htmlNode.caption.innerHTML.length > 0 )
+							{
+								stringBuilder.push( '|+ ' ) ;
+								this._AppendChildNodes( htmlNode.caption, stringBuilder ) ;
+								stringBuilder.push( '\n' ) ;
+							}
+
+							for ( var r = 0 ; r < htmlNode.rows.length ; r++ )
+							{
+								attribs = this._GetAttributesStr( htmlNode.rows[r] ) ;
+
+								stringBuilder.push( '|-' ) ;
+								if ( attribs.length > 0 )
+									stringBuilder.push( attribs ) ;
+								stringBuilder.push( '\n' ) ;
+
+								for ( var c = 0 ; c < htmlNode.rows[r].cells.length ; c++ )
+								{
+									attribs = this._GetAttributesStr( htmlNode.rows[r].cells[c] ) ;
+
+									stringBuilder.push( '|' ) ;
+
+									if ( attribs.length > 0 )
+										stringBuilder.push( attribs + ' |' ) ;
+
+									stringBuilder.push( ' ' ) ;
+
+									this._IsInsideCell = true ;
+									this._AppendChildNodes( htmlNode.rows[r].cells[c], stringBuilder ) ;
+									this._IsInsideCell = false ;
+
+									stringBuilder.push( '\n' ) ;
+								}
+							}
+
+							stringBuilder.push( '|}\n' ) ;
+
+							break ;
+
+						case 'img' :
+
+							var formula = htmlNode.getAttribute( '_fck_mw_math' ) ;
+
+							if ( formula && formula.length > 0 )
+							{
+								stringBuilder.push( '<math>' ) ;
+								stringBuilder.push( formula ) ;
+								stringBuilder.push( '</math>' ) ;
+								return ;
+							}
+
+							var imgName		= htmlNode.getAttribute( '_fck_mw_filename' ) ;
+							var imgCaption	= htmlNode.getAttribute( 'alt' ) || '' ;
+							var imgType		= htmlNode.getAttribute( '_fck_mw_type' ) || '' ;
+							var imgLocation	= htmlNode.getAttribute( '_fck_mw_location' ) || '' ;
+							var imgWidth	= htmlNode.getAttribute( '_fck_mw_width' ) || '' ;
+							var imgHeight	= htmlNode.getAttribute( '_fck_mw_height' ) || '' ;
+
+							stringBuilder.push( '[[Image:' )
+							stringBuilder.push( imgName )
+
+							if ( imgType.length > 0 )
+								stringBuilder.push( '|' + imgType ) ;
+
+							if ( imgLocation.length > 0 )
+								stringBuilder.push( '|' + imgLocation ) ;
+
+							if ( imgWidth.length > 0 )
+							{
+								stringBuilder.push( '|' + imgWidth ) ;
+
+								if ( imgHeight.length > 0 )
+									stringBuilder.push( 'x' + imgHeight ) ;
+
+								stringBuilder.push( 'px' ) ;
+							}
+
+							if ( imgCaption.length > 0 )
+								stringBuilder.push( '|' + imgCaption ) ;
+
+							stringBuilder.push( ']]' )
+
+							break ;
+
+						case 'span' :
+							switch ( htmlNode.className )
+							{
+								case 'fck_mw_ref' :
+									var refName = htmlNode.getAttribute( 'name' ) ;
+
+									stringBuilder.push( '<ref' ) ;
+
+									if ( refName && refName.length > 0 )
+										stringBuilder.push( ' name="' + refName + '"' ) ;
+
+									if ( htmlNode.innerHTML.length == 0 )
+										stringBuilder.push( ' />' ) ;
+									else
+									{
+										stringBuilder.push( '>' ) ;
+										stringBuilder.push( htmlNode.innerHTML ) ;
+										stringBuilder.push( '</ref>' ) ;
+									}
+									return ;
+
+								case 'fck_mw_references' :
+									stringBuilder.push( '<references />' ) ;
+									return ;
+
+								case 'fck_mw_template' :
+									stringBuilder.push( FCKTools.HTMLDecode(htmlNode.innerHTML) ) ;
+									return ;
+								
+								case 'fck_mw_magic' :
+									stringBuilder.push( htmlNode.innerHTML ) ;
+									return ;
+
+								case 'fck_mw_nowiki' :
+									sNodeName = 'nowiki' ;
+									break ;
+
+								case 'fck_mw_includeonly' :
+									sNodeName = 'includeonly' ;
+									break ;
+
+								case 'fck_mw_noinclude' :
+									sNodeName = 'noinclude' ;
+									break ;
+
+								case 'fck_mw_onlyinclude' :
+									sNodeName = 'onlyinclude' ;
+									break ;
+							}
+
+							// Change the node name and fell in the "default" case.
+							if ( htmlNode.getAttribute( '_fck_mw_customtag' ) )
+								sNodeName = htmlNode.getAttribute( '_fck_mw_tagname' ) ;
+
+						case 'pre' :
+							var attribs = this._GetAttributesStr( htmlNode ) ;
+							
+							if ( htmlNode.className == "_fck_mw_lspace")
+							{
+								stringBuilder.push( "\n " ) ;
+								this._inLSpace = true ;
+								this._AppendChildNodes( htmlNode, stringBuilder ) ;
+								this._inLSpace = false ;
+								if ( stringBuilder[stringBuilder.length-2] == "\n" && stringBuilder[stringBuilder.length-1] == " " )
+									stringBuilder.pop() ;
+								else
+									stringBuilder.push( "\n" ) ;
+							}
+							else
+							{
+								stringBuilder.push( '<' ) ;
+								stringBuilder.push( sNodeName ) ;
+
+								if ( attribs.length > 0 )
+									stringBuilder.push( attribs ) ;
+
+								stringBuilder.push( '>' ) ;
+								this._inPre = true ;
+								this._AppendChildNodes( htmlNode, stringBuilder ) ;
+								this._inPre = false ;
+								stringBuilder.push( '<\/' ) ;
+								stringBuilder.push( sNodeName ) ;
+								stringBuilder.push( '>' ) ;								
+							}
+						
+							break ;
+						default :
+							var attribs = this._GetAttributesStr( htmlNode ) ;
+
+							stringBuilder.push( '<' ) ;
+							stringBuilder.push( sNodeName ) ;
+
+							if ( attribs.length > 0 )
+								stringBuilder.push( attribs ) ;
+
+							stringBuilder.push( '>' ) ;
+							this._AppendChildNodes( htmlNode, stringBuilder ) ;
+							stringBuilder.push( '<\/' ) ;
+							stringBuilder.push( sNodeName ) ;
+							stringBuilder.push( '>' ) ;
+							break ;
+					}
+				}
+
+				htmlNode._fckxhtmljob = FCKXHtml.CurrentJobNum ;
+				return ;
+
+			// Text Node.
+			case 3 :
+
+				var parentIsSpecialTag = htmlNode.parentNode.getAttribute( '_fck_mw_customtag' ) ; 
+				var textValue = htmlNode.nodeValue;
+
+				if ( !parentIsSpecialTag ) 
+				{
+					textValue = textValue.replace( /[\n\t]/g, ' ' ) ; 
+					textValue = FCKTools.HTMLEncode( textValue ) ;
+					textValue = textValue.replace( /\u00A0/g, '&nbsp;' ) ;
+
+					if ( !htmlNode.previousSibling ||
+					( stringBuilder.length > 0 && stringBuilder[ stringBuilder.length - 1 ].EndsWith( '\n' ) ) && !this._inLSpace )
+					{
+						textValue = textValue.LTrim() ;
+					}
+
+					if ( !htmlNode.nextSibling && !this._inLSpace )
+						textValue = textValue.RTrim() ;
+
+					textValue = textValue.replace( / {2,}/g, ' ' ) ;
+
+					if ( this._inLSpace && textValue.length == 1 && textValue.charCodeAt(0) == 13 )
+						textValue = textValue + " " ;
+					
+					if ( this._IsInsideCell )
+						textValue = textValue.replace( /\|/g, '&#124;' ) ;
+	
+				}
+				else 
+				{
+					textValue = FCKTools.HTMLDecode( textValue ) ;
+				}
+
+				stringBuilder.push( textValue ) ;
+				return ;
+
+			// Comment
+			case 8 :
+				// IE catches the <!DOTYPE ... > as a comment, but it has no
+				// innerHTML, so we can catch it, and ignore it.
+				if ( FCKBrowserInfo.IsIE && !htmlNode.innerHTML )
+					return ;
+
+				stringBuilder.push( "<!--"  ) ;
+
+				try	{ stringBuilder.push( htmlNode.nodeValue ) ; }
+				catch (e) { /* Do nothing... probably this is a wrong format comment. */ }
+
+				stringBuilder.push( " -->" ) ;
+				return ;
+		}
+	},
+
+	_AppendChildNodes : function( htmlNode, stringBuilder, isBlockElement )
+	{
+		var child = htmlNode.firstChild ;
+
+		while ( child )
+		{
+			this._AppendNode( child, stringBuilder ) ;
+			child = child.nextSibling ;
+		}
+	},
+
+	_GetAttributesStr : function( htmlNode )
+	{
+		var attStr = '' ;
+		var aAttributes = htmlNode.attributes ;
+
+		for ( var n = 0 ; n < aAttributes.length ; n++ )
+		{
+			var oAttribute = aAttributes[n] ;
+
+			if ( oAttribute.specified )
+			{
+				var sAttName = oAttribute.nodeName.toLowerCase() ;
+				var sAttValue ;
+
+				// Ignore any attribute starting with "_fck".
+				if ( sAttName.StartsWith( '_fck' ) )
+					continue ;
+				// There is a bug in Mozilla that returns '_moz_xxx' attributes as specified.
+				else if ( sAttName.indexOf( '_moz' ) == 0 )
+					continue ;
+				// For "class", nodeValue must be used.
+				else if ( sAttName == 'class' )
+				{
+					// Get the class, removing any fckXXX we can have there.
+					sAttValue = oAttribute.nodeValue.replace( /(^|\s*)fck\S+/, '' ).Trim() ;
+
+					if ( sAttValue.length == 0 )
+						continue ;
+				}
+				// XHTML doens't support attribute minimization like "CHECKED". It must be trasformed to cheched="checked".
+				else if ( oAttribute.nodeValue === true )
+					sAttValue = sAttName ;
+				else
+					sAttValue = htmlNode.getAttribute( sAttName, 2 ) ;	// We must use getAttribute to get it exactly as it is defined.
+
+				attStr += ' ' + sAttName + '="' + sAttValue.replace( '"', '&quot;' ) + '"' ;
+			}
+		}
+		return attStr ;
+	}
+} ;
+
+// Here we change the SwitchEditMode function to make the Ajax call when
+// switching from Wikitext.
+(function()
+{
+	var original = FCK.SwitchEditMode ;
+
+	FCK.SwitchEditMode = function()
+	{
+		var args = arguments ;
+
+		var loadHTMLFromAjax = function( result )
+		{
+			FCK.EditingArea.Textarea.value = result.responseText ;
+			original.apply( FCK, args ) ;
+		}
+
+		if ( FCK.EditMode == FCK_EDITMODE_SOURCE )
+		{
+			// Hide the textarea to avoid seeing the code change.
+			FCK.EditingArea.Textarea.style.visibility = 'hidden' ;
+
+			var loading = document.createElement( 'span' ) ;
+			loading.innerHTML = '&nbsp;Loading Wikitext. Please wait...&nbsp;' ;
+			loading.style.position = 'absolute' ;
+			loading.style.left = '5px' ;
+//			loading.style.backgroundColor = '#ff0000' ;
+			FCK.EditingArea.Textarea.parentNode.appendChild( loading, FCK.EditingArea.Textarea ) ;
+
+			// Use Ajax to transform the Wikitext to HTML.
+			window.parent.sajax_request_type = 'POST' ;
+			window.parent.sajax_do_call( 'wfSajaxWikiToHTML', [FCK.EditingArea.Textarea.value], loadHTMLFromAjax ) ;
+		}
+		else
+			original.apply( FCK, args ) ;
+	}
+})() ;
+
+// MediaWiki document processor.
+FCKDocumentProcessor.AppendNew().ProcessDocument = function( document )
+{
+	// Templates and magic words.
+	var aSpans = document.getElementsByTagName( 'SPAN' ) ;
+
+	var eSpan ;
+	var i = aSpans.length - 1 ;
+	while ( i >= 0 && ( eSpan = aSpans[i--] ) )
+	{
+		var className = null ;
+		switch ( eSpan.className )
+		{
+			case 'fck_mw_ref' :
+				className = 'FCK__MWRef' ;
+			case 'fck_mw_references' :
+				if ( className == null )
+					className = 'FCK__MWReferences' ;
+			case 'fck_mw_template' :
+			case 'fck_mw_magic' :
+				if ( className == null )
+					className = 'FCK__MWTemplate' ;
+
+				var oImg = FCKDocumentProcessor_CreateFakeImage( className, eSpan.cloneNode(true) ) ;
+				oImg.setAttribute( '_' + eSpan.className, 'true', 0 ) ;
+
+				eSpan.parentNode.insertBefore( oImg, eSpan ) ;
+				eSpan.parentNode.removeChild( eSpan ) ;
+			break ;
+		}
+	}
+}
+
+// Context menu for templates.
+FCK.ContextMenu.RegisterListener({
+	AddItems : function( contextMenu, tag, tagName )
+	{
+		if ( tagName == 'IMG' )
+		{
+			if ( tag.getAttribute( '_fck_mw_template' ) )
+			{
+				contextMenu.AddSeparator() ;
+				contextMenu.AddItem( 'MW_Template', 'Template Properties' ) ;
+			}
+			if ( tag.getAttribute( '_fck_mw_magic' ) )
+			{
+				contextMenu.AddSeparator() ;
+				contextMenu.AddItem( 'MW_MagicWord', 'Modify Magic Word' ) ;
+			}
+			if ( tag.getAttribute( '_fck_mw_ref' ) )
+			{
+				contextMenu.AddSeparator() ;
+				contextMenu.AddItem( 'MW_Ref', 'Reference Properties' ) ;
+			}
+			if ( tag.getAttribute( '_fck_mw_math' ) )
+			{
+				contextMenu.AddSeparator() ;
+				contextMenu.AddItem( 'MW_Math', 'Edit Formula' ) ;
+			}
+		}
+	}
+}) ;
Index: /MediaWiki/branches/1.11/extensions/README
===================================================================
--- /MediaWiki/branches/1.11/extensions/README	(revision 1280)
+++ /MediaWiki/branches/1.11/extensions/README	(revision 1280)
@@ -0,0 +1,14 @@
+Extensions (such as the hieroglyphic module WikiHiero) are distributed
+separately. Drop them into this extensions directory and enable as
+per the extension's directions.
+
+If you are a developer, you want to fetch the extension tree in another
+directory and make a symbolic link:
+
+ mediawiki/extensions$ ln -s ../../extensions-trunk/FooBarExt
+
+The extensions are available through svn at:
+    http://svn.wikimedia.org/svnroot/mediawiki/trunk/extensions/
+
+You can find documentation and additional extensions on MediaWiki website:
+    http://www.mediawiki.org/wiki/Category:Extensions
Index: /MediaWiki/branches/1.11/images/README
===================================================================
--- /MediaWiki/branches/1.11/images/README	(revision 1280)
+++ /MediaWiki/branches/1.11/images/README	(revision 1280)
@@ -0,0 +1,5 @@
+If uploads are enabled in the wiki, files will be put in subdirectories
+under here.
+
+Note to upgraders: as of MediaWiki 1.5, the images used in the user
+interface have been moved to skins/common/images.
Index: /MediaWiki/branches/1.11/img_auth.php
===================================================================
--- /MediaWiki/branches/1.11/img_auth.php	(revision 1280)
+++ /MediaWiki/branches/1.11/img_auth.php	(revision 1280)
@@ -0,0 +1,63 @@
+<?php
+/**
+ * Image download authorisation script
+ *
+ * To use, in LocalSettings.php set $wgUploadDirectory to point to a non-public
+ * directory, and $wgUploadPath to point to this file. Also set $wgWhitelistRead
+ * to an array of pages you want everyone to be able to access. Your server must
+ * support PATH_INFO, CGI-based configurations generally don't.
+ */
+define( 'MW_NO_OUTPUT_COMPRESSION', 1 );
+require_once( './includes/WebStart.php' );
+wfProfileIn( 'img_auth.php' );
+require_once( './includes/StreamFile.php' );
+
+if( !isset( $_SERVER['PATH_INFO'] ) ) {
+	wfDebugLog( 'img_auth', "missing PATH_INFO" );
+	wfForbidden();
+}
+
+# Get filenames/directories
+wfDebugLog( 'img_auth', "PATH_INFO is: " . $_SERVER['PATH_INFO'] );
+$filename = realpath( $wgUploadDirectory . $_SERVER['PATH_INFO'] );
+$realUploadDirectory = realpath( $wgUploadDirectory );
+$imageName = $wgContLang->getNsText( NS_IMAGE ) . ":" . wfBaseName( $_SERVER['PATH_INFO'] );
+
+# Check if the filename is in the correct directory
+if ( substr( $filename, 0, strlen( $realUploadDirectory ) ) != $realUploadDirectory ) {
+	wfDebugLog( 'img_auth', "requested path not in upload dir: $filename" );
+	wfForbidden();
+}
+
+if ( is_array( $wgWhitelistRead ) && !in_array( $imageName, $wgWhitelistRead ) && !$wgUser->getID() ) {
+	wfDebugLog( 'img_auth', "not logged in and requested file not in whitelist: $imageName" );
+	wfForbidden();
+}
+
+if( !file_exists( $filename ) ) {
+	wfDebugLog( 'img_auth', "requested file does not exist: $filename" );
+	wfForbidden();
+}
+if( is_dir( $filename ) ) {
+	wfDebugLog( 'img_auth', "requested file is a directory: $filename" );
+	wfForbidden();
+}
+
+# Write file
+wfDebugLog( 'img_auth', "streaming file: $filename" );
+wfStreamFile( $filename );
+wfLogProfilingData();
+
+function wfForbidden() {
+	header( 'HTTP/1.0 403 Forbidden' );
+	header( 'Content-Type: text/html; charset=utf-8' );
+	print
+"<html><body>
+<h1>Access denied</h1>
+<p>You need to log in to access files on this server</p>
+</body></html>";
+	wfLogProfilingData();
+	exit;
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/.htaccess
===================================================================
--- /MediaWiki/branches/1.11/includes/.htaccess	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/.htaccess	(revision 1280)
@@ -0,0 +1,1 @@
+Deny from all
Index: /MediaWiki/branches/1.11/includes/AjaxDispatcher.php
===================================================================
--- /MediaWiki/branches/1.11/includes/AjaxDispatcher.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/AjaxDispatcher.php	(revision 1280)
@@ -0,0 +1,96 @@
+<?php
+
+if( !defined( 'MEDIAWIKI' ) ) {
+	die( 1 );
+}
+
+if ( ! $wgUseAjax ) {
+	die( 1 );
+}
+
+require_once( 'AjaxFunctions.php' );
+
+/**
+ * Object-Oriented Ajax functions.
+ * @addtogroup Ajax
+ */
+class AjaxDispatcher {
+	var $mode;
+	var $func_name;
+	var $args;
+
+	function __construct() {
+		wfProfileIn( __METHOD__ );
+
+		$this->mode = "";
+
+		if (! empty($_GET["rs"])) {
+			$this->mode = "get";
+		}
+
+		if (!empty($_POST["rs"])) {
+			$this->mode = "post";
+		}
+
+		if ($this->mode == "get") {
+			$this->func_name = isset( $_GET["rs"] ) ? $_GET["rs"] : '';
+			if (! empty($_GET["rsargs"])) {
+				$this->args = $_GET["rsargs"];
+			} else {
+				$this->args = array();
+			}
+		} else {
+			$this->func_name = isset( $_POST["rs"] ) ? $_POST["rs"] : '';
+			if (! empty($_POST["rsargs"])) {
+				$this->args = $_POST["rsargs"];
+			} else {
+				$this->args = array();
+			}
+		}
+		wfProfileOut( __METHOD__ );
+	}
+
+	function performAction() {
+		global $wgAjaxExportList, $wgOut;
+
+		if ( empty( $this->mode ) ) {
+			return;
+		}
+		wfProfileIn( __METHOD__ );
+
+		if (! in_array( $this->func_name, $wgAjaxExportList ) ) {
+			wfHttpError( 400, 'Bad Request',
+				"unknown function " . (string) $this->func_name );
+		} else {
+			try {
+				$result = call_user_func_array($this->func_name, $this->args);
+
+				if ( $result === false || $result === NULL ) {
+					wfHttpError( 500, 'Internal Error',
+						"{$this->func_name} returned no data" );
+				}
+				else {
+					if ( is_string( $result ) ) {
+						$result= new AjaxResponse( $result );
+					}
+
+					$result->sendHeaders();
+					$result->printText();
+				}
+
+			} catch (Exception $e) {
+				if (!headers_sent()) {
+					wfHttpError( 500, 'Internal Error',
+						$e->getMessage() );
+				} else {
+					print $e->getMessage();
+				}
+			}
+		}
+
+		wfProfileOut( __METHOD__ );
+		$wgOut = null;
+	}
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/AjaxFunctions.php
===================================================================
--- /MediaWiki/branches/1.11/includes/AjaxFunctions.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/AjaxFunctions.php	(revision 1280)
@@ -0,0 +1,176 @@
+<?php
+
+/** 
+ * @package MediaWiki
+ * @addtogroup Ajax
+ */
+
+if( !defined( 'MEDIAWIKI' ) ) {
+	die( 1 );
+}
+
+/**
+ * Function converts an Javascript escaped string back into a string with
+ * specified charset (default is UTF-8).
+ * Modified function from http://pure-essence.net/stuff/code/utf8RawUrlDecode.phps
+ *
+ * @param $source String escaped with Javascript's escape() function
+ * @param $iconv_to String destination character set will be used as second paramether in the iconv function. Default is UTF-8.
+ * @return string
+ */
+function js_unescape($source, $iconv_to = 'UTF-8') {
+	$decodedStr = '';
+	$pos = 0;
+	$len = strlen ($source);
+
+	while ($pos < $len) {
+		$charAt = substr ($source, $pos, 1);
+		if ($charAt == '%') {
+			$pos++;
+			$charAt = substr ($source, $pos, 1);
+			if ($charAt == 'u') {
+				// we got a unicode character
+				$pos++;
+				$unicodeHexVal = substr ($source, $pos, 4);
+				$unicode = hexdec ($unicodeHexVal);
+				$decodedStr .= code2utf($unicode);
+				$pos += 4;
+			} else {
+				// we have an escaped ascii character
+				$hexVal = substr ($source, $pos, 2);
+				$decodedStr .= chr (hexdec ($hexVal));
+				$pos += 2;
+			}
+		} else {
+			$decodedStr .= $charAt;
+			$pos++;
+		}
+	}
+
+	if ($iconv_to != "UTF-8") {
+		$decodedStr = iconv("UTF-8", $iconv_to, $decodedStr);
+	}
+
+	return $decodedStr;
+}
+
+/**
+ * Function coverts number of utf char into that character.
+ * Function taken from: http://sk2.php.net/manual/en/function.utf8-encode.php#49336
+ *
+ * @param $num Integer
+ * @return utf8char
+ */
+function code2utf($num){
+   if ( $num<128 )
+   	return chr($num);
+   if ( $num<2048 )
+   	return chr(($num>>6)+192).chr(($num&63)+128);
+   if ( $num<65536 )
+   	return chr(($num>>12)+224).chr((($num>>6)&63)+128).chr(($num&63)+128);
+   if ( $num<2097152 )
+   	return chr(($num>>18)+240).chr((($num>>12)&63)+128).chr((($num>>6)&63)+128) .chr(($num&63)+128);
+   return '';
+}
+
+function wfSajaxSearch( $term ) {
+	global $wgContLang, $wgOut;
+	$limit = 16;
+
+	$l = new Linker;
+
+	$term = str_replace( ' ', '_', $wgContLang->ucfirst( 
+			$wgContLang->checkTitleEncoding( $wgContLang->recodeInput( js_unescape( $term ) ) )
+		) );
+
+	if ( strlen( str_replace( '_', '', $term ) )<3 )
+		return;
+
+	$db = wfGetDB( DB_SLAVE );
+	$res = $db->select( 'page', 'page_title',
+			array(  'page_namespace' => 0,
+				"page_title LIKE '". $db->strencode( $term) ."%'" ),
+				"wfSajaxSearch",
+				array( 'LIMIT' => $limit+1 )
+			);
+
+	$r = "";
+
+	$i=0;
+	while ( ( $row = $db->fetchObject( $res ) ) && ( ++$i <= $limit ) ) {
+		$nt = Title::newFromDBkey( $row->page_title );
+		$r .= '<li>' . $l->makeKnownLinkObj( $nt ) . "</li>\n";
+	}
+	if ( $i > $limit ) {
+		$more = '<i>' .  $l->makeKnownLink( $wgContLang->specialPage( "Allpages" ),
+		                                wfMsg('moredotdotdot'),
+		                                "namespace=0&from=" . wfUrlEncode ( $term ) ) .
+			'</i>';
+	} else {
+		$more = '';
+	}
+
+	$subtitlemsg = ( Title::newFromText($term) ? 'searchsubtitle' : 'searchsubtitleinvalid' );
+	$subtitle = $wgOut->parse( wfMsg( $subtitlemsg, wfEscapeWikiText($term) ) ); #FIXME: parser is missing mTitle !
+
+	$term = urlencode( $term );
+	$html = '<div style="float:right; border:solid 1px black;background:gainsboro;padding:2px;"><a onclick="Searching_Hide_Results();">'
+		. wfMsg( 'hideresults' ) . '</a></div>'
+		. '<h1 class="firstHeading">'.wfMsg('search')
+		. '</h1><div id="contentSub">'. $subtitle . '</div><ul><li>'
+		. $l->makeKnownLink( $wgContLang->specialPage( 'Search' ),
+					wfMsg( 'searchcontaining', $term ),
+					"search=$term&fulltext=Search" )
+		. '</li><li>' . $l->makeKnownLink( $wgContLang->specialPage( 'Search' ),
+					wfMsg( 'searchnamed', $term ) ,
+					"search=$term&go=Go" )
+		. "</li></ul><h2>" . wfMsg( 'articletitles', $term ) . "</h2>"
+		. '<ul>' .$r .'</ul>'.$more;
+
+	$response = new AjaxResponse( $html );
+
+	$response->setCacheDuration( 30*60 );
+
+	return $response;
+}
+
+/**
+ * Called for AJAX watch/unwatch requests.
+ * @param $pageID Integer ID of the page to be watched/unwatched
+ * @param $watch String 'w' to watch, 'u' to unwatch
+ * @return String '<w#>' or '<u#>' on successful watch or unwatch, respectively, or '<err#>' on error (invalid XML in case we want to add HTML sometime)
+ */
+function wfAjaxWatch($pageID = "", $watch = "") {
+	if(wfReadOnly())
+		return '<err#>'; // redirect to action=(un)watch, which will display the database lock message
+
+	if(('w' !== $watch && 'u' !== $watch) || !is_numeric($pageID))
+		return '<err#>';
+	$watch = 'w' === $watch;
+	$pageID = intval($pageID);
+
+	$title = Title::newFromID($pageID);
+	if(!$title)
+		return '<err#>';
+	$article = new Article($title);
+	$watching = $title->userIsWatching();
+
+	if($watch) {
+		if(!$watching) {
+			$dbw = wfGetDB(DB_MASTER);
+			$dbw->begin();
+			$article->doWatch();
+			$dbw->commit();
+		}
+	} else {
+		if($watching) {
+			$dbw = wfGetDB(DB_MASTER);
+			$dbw->begin();
+			$article->doUnwatch();
+			$dbw->commit();
+		}
+	}
+
+	return $watch ? '<w#>' : '<u#>';
+}
+?>
Index: /MediaWiki/branches/1.11/includes/AjaxResponse.php
===================================================================
--- /MediaWiki/branches/1.11/includes/AjaxResponse.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/AjaxResponse.php	(revision 1280)
@@ -0,0 +1,207 @@
+<?php
+if( !defined( 'MEDIAWIKI' ) ) {
+	die( 1 );
+}
+
+/**
+ * @todo document
+ * @addtogroup Ajax
+ */
+class AjaxResponse {
+	var $mCacheDuration;
+	var $mVary;
+
+	var $mDisabled;
+	var $mText;
+	var $mResponseCode;
+	var $mLastModified;
+	var $mContentType;
+
+	function __construct( $text = NULL ) {
+		$this->mCacheDuration = NULL;
+		$this->mVary = NULL;
+
+		$this->mDisabled = false;
+		$this->mText = '';
+		$this->mResponseCode = '200 OK';
+		$this->mLastModified = false;
+		$this->mContentType= 'text/html; charset=utf-8';
+
+		if ( $text ) {
+			$this->addText( $text );
+		}
+	}
+
+	function setCacheDuration( $duration ) {
+		$this->mCacheDuration = $duration;
+	}
+
+	function setVary( $vary ) {
+		$this->mVary = $vary;
+	}
+
+	function setResponseCode( $code ) {
+		$this->mResponseCode = $code;
+	}
+
+	function setContentType( $type ) {
+		$this->mContentType = $type;
+	}
+
+	function disable() {
+		$this->mDisabled = true;
+	}
+
+	function addText( $text ) {
+		if ( ! $this->mDisabled && $text ) {
+			$this->mText .= $text;
+		}
+	}
+
+	function printText() {
+		if ( ! $this->mDisabled ) {
+			print $this->mText;
+		}
+	}
+
+	function sendHeaders() {
+		global $wgUseSquid, $wgUseESI;
+
+		if ( $this->mResponseCode ) {
+			$n = preg_replace( '/^ *(\d+)/', '\1', $this->mResponseCode );
+			header( "Status: " . $this->mResponseCode, true, (int)$n );
+		}
+
+		header ("Content-Type: " . $this->mContentType );
+
+		if ( $this->mLastModified ) {
+			header ("Last-Modified: " . $this->mLastModified );
+		}
+		else {
+			header ("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
+		}
+
+		if ( $this->mCacheDuration ) {
+
+			# If squid caches are configured, tell them to cache the response, 
+			# and tell the client to always check with the squid. Otherwise,
+			# tell the client to use a cached copy, without a way to purge it.
+
+			if( $wgUseSquid ) {
+
+				# Expect explicite purge of the proxy cache, but require end user agents
+				# to revalidate against the proxy on each visit.
+				# Surrogate-Control controls our Squid, Cache-Control downstream caches
+
+				if ( $wgUseESI ) {
+					header( 'Surrogate-Control: max-age='.$this->mCacheDuration.', content="ESI/1.0"');
+					header( 'Cache-Control: s-maxage=0, must-revalidate, max-age=0' );
+				} else {
+					header( 'Cache-Control: s-maxage='.$this->mCacheDuration.', must-revalidate, max-age=0' );
+				}
+
+			} else {
+
+				# Let the client do the caching. Cache is not purged.
+				header ("Expires: " . gmdate( "D, d M Y H:i:s", time() + $this->mCacheDuration ) . " GMT");
+				header ("Cache-Control: s-max-age={$this->mCacheDuration},public,max-age={$this->mCacheDuration}");
+			}
+
+		} else {
+			# always expired, always modified
+			header ("Expires: Mon, 26 Jul 1997 05:00:00 GMT");    // Date in the past
+			header ("Cache-Control: no-cache, must-revalidate");  // HTTP/1.1
+			header ("Pragma: no-cache");                          // HTTP/1.0
+		}
+
+		if ( $this->mVary ) {
+			header ( "Vary: " . $this->mVary );
+		}
+	}
+
+	/**
+	 * checkLastModified tells the client to use the client-cached response if
+	 * possible. If sucessful, the AjaxResponse is disabled so that
+	 * any future call to AjaxResponse::printText() have no effect. The method
+	 * returns true iff the response code was set to 304 Not Modified.
+	 */
+	function checkLastModified ( $timestamp ) {
+		global $wgCachePages, $wgCacheEpoch, $wgUser;
+		$fname = 'AjaxResponse::checkLastModified';
+
+		if ( !$timestamp || $timestamp == '19700101000000' ) {
+			wfDebug( "$fname: CACHE DISABLED, NO TIMESTAMP\n" );
+			return;
+		}
+		if( !$wgCachePages ) {
+			wfDebug( "$fname: CACHE DISABLED\n", false );
+			return;
+		}
+		if( $wgUser->getOption( 'nocache' ) ) {
+			wfDebug( "$fname: USER DISABLED CACHE\n", false );
+			return;
+		}
+
+		$timestamp = wfTimestamp( TS_MW, $timestamp );
+		$lastmod = wfTimestamp( TS_RFC2822, max( $timestamp, $wgUser->mTouched, $wgCacheEpoch ) );
+
+		if( !empty( $_SERVER['HTTP_IF_MODIFIED_SINCE'] ) ) {
+			# IE sends sizes after the date like this:
+			# Wed, 20 Aug 2003 06:51:19 GMT; length=5202
+			# this breaks strtotime().
+			$modsince = preg_replace( '/;.*$/', '', $_SERVER["HTTP_IF_MODIFIED_SINCE"] );
+			$modsinceTime = strtotime( $modsince );
+			$ismodsince = wfTimestamp( TS_MW, $modsinceTime ? $modsinceTime : 1 );
+			wfDebug( "$fname: -- client send If-Modified-Since: " . $modsince . "\n", false );
+			wfDebug( "$fname: --  we might send Last-Modified : $lastmod\n", false );
+			if( ($ismodsince >= $timestamp ) && $wgUser->validateCache( $ismodsince ) && $ismodsince >= $wgCacheEpoch ) {
+				$this->setResponseCode( "304 Not Modified" );
+				$this->disable();
+				$this->mLastModified = $lastmod;
+
+				wfDebug( "$fname: CACHED client: $ismodsince ; user: $wgUser->mTouched ; page: $timestamp ; site $wgCacheEpoch\n", false );
+
+				return true;
+			} else {
+				wfDebug( "$fname: READY  client: $ismodsince ; user: $wgUser->mTouched ; page: $timestamp ; site $wgCacheEpoch\n", false );
+				$this->mLastModified = $lastmod;
+			}
+		} else {
+			wfDebug( "$fname: client did not send If-Modified-Since header\n", false );
+			$this->mLastModified = $lastmod;
+		}
+	}
+
+	function loadFromMemcached( $mckey, $touched ) {
+		global $wgMemc;
+		if ( !$touched ) return false;
+
+		$mcvalue = $wgMemc->get( $mckey );
+		if ( $mcvalue ) {
+			# Check to see if the value has been invalidated
+			if ( $touched <= $mcvalue['timestamp'] ) {
+				wfDebug( "Got $mckey from cache\n" );
+				$this->mText = $mcvalue['value'];
+				return true;
+			} else {
+				wfDebug( "$mckey has expired\n" );
+			}
+		}
+
+		return false;
+	}
+
+	function storeInMemcached( $mckey, $expiry = 86400 ) {
+		global $wgMemc;
+
+		$wgMemc->set( $mckey,
+			array(
+				'timestamp' => wfTimestampNow(),
+				'value' => $this->mText
+			), $expiry
+		);
+
+		return true;
+	}
+}
+?>
Index: /MediaWiki/branches/1.11/includes/Article.php
===================================================================
--- /MediaWiki/branches/1.11/includes/Article.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/Article.php	(revision 1280)
@@ -0,0 +1,2963 @@
+<?php
+/**
+ * File for articles
+ */
+
+/**
+ * Class representing a MediaWiki article and history.
+ *
+ * See design.txt for an overview.
+ * Note: edit user interface and cache support functions have been
+ * moved to separate EditPage and HTMLFileCache classes.
+ *
+ */
+class Article {
+	/**@{{
+	 * @private
+	 */
+	var $mComment;			//!<
+	var $mContent;			//!<
+	var $mContentLoaded;	//!<
+	var $mCounter;			//!<
+	var $mForUpdate;		//!<
+	var $mGoodAdjustment;	//!<
+	var $mLatest;			//!<
+	var $mMinorEdit;		//!<
+	var $mOldId;			//!<
+	var $mRedirectedFrom;	//!<
+	var $mRedirectUrl;		//!<
+	var $mRevIdFetched;		//!<
+	var $mRevision;			//!<
+	var $mTimestamp;		//!<
+	var $mTitle;			//!<
+	var $mTotalAdjustment;	//!<
+	var $mTouched;			//!<
+	var $mUser;				//!<
+	var $mUserText;			//!<
+	/**@}}*/
+
+	/**
+	 * Constructor and clear the article
+	 * @param $title Reference to a Title object.
+	 * @param $oldId Integer revision ID, null to fetch from request, zero for current
+	 */
+	function __construct( &$title, $oldId = null ) {
+		$this->mTitle =& $title;
+		$this->mOldId = $oldId;
+		$this->clear();
+	}
+
+	/**
+	 * Tell the page view functions that this view was redirected
+	 * from another page on the wiki.
+	 * @param $from Title object.
+	 */
+	function setRedirectedFrom( $from ) {
+		$this->mRedirectedFrom = $from;
+	}
+
+	/**
+	 * @return mixed false, Title of in-wiki target, or string with URL
+	 */
+	function followRedirect() {
+		$text = $this->getContent();
+		$rt = Title::newFromRedirect( $text );
+
+		# process if title object is valid and not special:userlogout
+		if( $rt ) {
+			if( $rt->getInterwiki() != '' ) {
+				if( $rt->isLocal() ) {
+					// Offsite wikis need an HTTP redirect.
+					//
+					// This can be hard to reverse and may produce loops,
+					// so they may be disabled in the site configuration.
+
+					$source = $this->mTitle->getFullURL( 'redirect=no' );
+					return $rt->getFullURL( 'rdfrom=' . urlencode( $source ) );
+				}
+			} else {
+				if( $rt->getNamespace() == NS_SPECIAL ) {
+					// Gotta handle redirects to special pages differently:
+					// Fill the HTTP response "Location" header and ignore
+					// the rest of the page we're on.
+					//
+					// This can be hard to reverse, so they may be disabled.
+
+					if( $rt->isSpecial( 'Userlogout' ) ) {
+						// rolleyes
+					} else {
+						return $rt->getFullURL();
+					}
+				}
+				return $rt;
+			}
+		}
+
+		// No or invalid redirect
+		return false;
+	}
+
+	/**
+	 * get the title object of the article
+	 */
+	function getTitle() {
+		return $this->mTitle;
+	}
+
+	/**
+	  * Clear the object
+	  * @private
+	  */
+	function clear() {
+		$this->mDataLoaded    = false;
+		$this->mContentLoaded = false;
+
+		$this->mCurID = $this->mUser = $this->mCounter = -1; # Not loaded
+		$this->mRedirectedFrom = null; # Title object if set
+		$this->mUserText =
+		$this->mTimestamp = $this->mComment = '';
+		$this->mGoodAdjustment = $this->mTotalAdjustment = 0;
+		$this->mTouched = '19700101000000';
+		$this->mForUpdate = false;
+		$this->mIsRedirect = false;
+		$this->mRevIdFetched = 0;
+		$this->mRedirectUrl = false;
+		$this->mLatest = false;
+	}
+
+	/**
+	 * Note that getContent/loadContent do not follow redirects anymore.
+	 * If you need to fetch redirectable content easily, try
+	 * the shortcut in Article::followContent()
+	 * FIXME
+	 * @todo There are still side-effects in this!
+	 *        In general, you should use the Revision class, not Article,
+	 *        to fetch text for purposes other than page views.
+	 *
+	 * @return Return the text of this revision
+	*/
+	function getContent() {
+		global $wgUser, $wgOut;
+
+		wfProfileIn( __METHOD__ );
+
+		if ( 0 == $this->getID() ) {
+			wfProfileOut( __METHOD__ );
+			$wgOut->setRobotpolicy( 'noindex,nofollow' );
+
+			if ( $this->mTitle->getNamespace() == NS_MEDIAWIKI ) {
+				$ret = wfMsgWeirdKey ( $this->mTitle->getText() ) ;
+			} else {
+				$ret = wfMsg( $wgUser->isLoggedIn() ? 'noarticletext' : 'noarticletextanon' );
+			}
+
+			return "<div class='noarticletext'>$ret</div>";
+		} else {
+			$this->loadContent();
+			wfProfileOut( __METHOD__ );
+			return $this->mContent;
+		}
+	}
+
+	/**
+	 * This function returns the text of a section, specified by a number ($section).
+	 * A section is text under a heading like == Heading == or \<h1\>Heading\</h1\>, or
+	 * the first section before any such heading (section 0).
+	 *
+	 * If a section contains subsections, these are also returned.
+	 *
+	 * @param $text String: text to look in
+	 * @param $section Integer: section number
+	 * @return string text of the requested section
+	 * @deprecated
+	 */
+	function getSection($text,$section) {
+		global $wgParser;
+		return $wgParser->getSection( $text, $section );
+	}
+
+	/**
+	 * @return int The oldid of the article that is to be shown, 0 for the
+	 *             current revision
+	 */
+	function getOldID() {
+		if ( is_null( $this->mOldId ) ) {
+			$this->mOldId = $this->getOldIDFromRequest();
+		}
+		return $this->mOldId;
+	}
+
+	/**
+	 * Sets $this->mRedirectUrl to a correct URL if the query parameters are incorrect
+	 *
+	 * @return int The old id for the request
+	 */
+	function getOldIDFromRequest() {
+		global $wgRequest;
+		$this->mRedirectUrl = false;
+		$oldid = $wgRequest->getVal( 'oldid' );
+		if ( isset( $oldid ) ) {
+			$oldid = intval( $oldid );
+			if ( $wgRequest->getVal( 'direction' ) == 'next' ) {
+				$nextid = $this->mTitle->getNextRevisionID( $oldid );
+				if ( $nextid  ) {
+					$oldid = $nextid;
+				} else {
+					$this->mRedirectUrl = $this->mTitle->getFullURL( 'redirect=no' );
+				}
+			} elseif ( $wgRequest->getVal( 'direction' ) == 'prev' ) {
+				$previd = $this->mTitle->getPreviousRevisionID( $oldid );
+				if ( $previd ) {
+					$oldid = $previd;
+				} else {
+					# TODO
+				}
+			}
+			# unused:
+			# $lastid = $oldid;
+		}
+
+		if ( !$oldid ) {
+			$oldid = 0;
+		}
+		return $oldid;
+	}
+
+	/**
+	 * Load the revision (including text) into this object
+	 */
+	function loadContent() {
+		if ( $this->mContentLoaded ) return;
+
+		# Query variables :P
+		$oldid = $this->getOldID();
+
+		# Pre-fill content with error message so that if something
+		# fails we'll have something telling us what we intended.
+		$this->mOldId = $oldid;
+		$this->fetchContent( $oldid );
+	}
+
+
+	/**
+	 * Fetch a page record with the given conditions
+	 * @param Database $dbr
+	 * @param array    $conditions
+	 * @private
+	 */
+	function pageData( $dbr, $conditions ) {
+		$fields = array(
+				'page_id',
+				'page_namespace',
+				'page_title',
+				'page_restrictions',
+				'page_counter',
+				'page_is_redirect',
+				'page_is_new',
+				'page_random',
+				'page_touched',
+				'page_latest',
+				'page_len' ) ;
+		wfRunHooks( 'ArticlePageDataBefore', array( &$this , &$fields ) )	;
+		$row = $dbr->selectRow( 'page',
+			$fields,
+			$conditions,
+			'Article::pageData' );
+		wfRunHooks( 'ArticlePageDataAfter', array( &$this , &$row ) )	;
+		return $row ;
+	}
+
+	/**
+	 * @param Database $dbr
+	 * @param Title $title
+	 */
+	function pageDataFromTitle( $dbr, $title ) {
+		return $this->pageData( $dbr, array(
+			'page_namespace' => $title->getNamespace(),
+			'page_title'     => $title->getDBkey() ) );
+	}
+
+	/**
+	 * @param Database $dbr
+	 * @param int $id
+	 */
+	function pageDataFromId( $dbr, $id ) {
+		return $this->pageData( $dbr, array( 'page_id' => $id ) );
+	}
+
+	/**
+	 * Set the general counter, title etc data loaded from
+	 * some source.
+	 *
+	 * @param object $data
+	 * @private
+	 */
+	function loadPageData( $data = 'fromdb' ) {
+		if ( $data === 'fromdb' ) {
+			$dbr = $this->getDB();
+			$data = $this->pageDataFromId( $dbr, $this->getId() );
+		}
+
+		$lc =& LinkCache::singleton();
+		if ( $data ) {
+			$lc->addGoodLinkObj( $data->page_id, $this->mTitle );
+
+			$this->mTitle->mArticleID = $data->page_id;
+
+			# Old-fashioned restrictions.
+			$this->mTitle->loadRestrictions( $data->page_restrictions );
+
+			$this->mCounter     = $data->page_counter;
+			$this->mTouched     = wfTimestamp( TS_MW, $data->page_touched );
+			$this->mIsRedirect  = $data->page_is_redirect;
+			$this->mLatest      = $data->page_latest;
+		} else {
+			if ( is_object( $this->mTitle ) ) {
+				$lc->addBadLinkObj( $this->mTitle );
+			}
+			$this->mTitle->mArticleID = 0;
+		}
+
+		$this->mDataLoaded  = true;
+	}
+
+	/**
+	 * Get text of an article from database
+	 * Does *NOT* follow redirects.
+	 * @param int $oldid 0 for whatever the latest revision is
+	 * @return string
+	 */
+	function fetchContent( $oldid = 0 ) {
+		if ( $this->mContentLoaded ) {
+			return $this->mContent;
+		}
+
+		$dbr = $this->getDB();
+
+		# Pre-fill content with error message so that if something
+		# fails we'll have something telling us what we intended.
+		$t = $this->mTitle->getPrefixedText();
+		if( $oldid ) {
+			$t .= ',oldid='.$oldid;
+		}
+		$this->mContent = wfMsg( 'missingarticle', $t ) ;
+
+		if( $oldid ) {
+			$revision = Revision::newFromId( $oldid );
+			if( is_null( $revision ) ) {
+				wfDebug( __METHOD__." failed to retrieve specified revision, id $oldid\n" );
+				return false;
+			}
+			$data = $this->pageDataFromId( $dbr, $revision->getPage() );
+			if( !$data ) {
+				wfDebug( __METHOD__." failed to get page data linked to revision id $oldid\n" );
+				return false;
+			}
+			$this->mTitle = Title::makeTitle( $data->page_namespace, $data->page_title );
+			$this->loadPageData( $data );
+		} else {
+			if( !$this->mDataLoaded ) {
+				$data = $this->pageDataFromTitle( $dbr, $this->mTitle );
+				if( !$data ) {
+					wfDebug( __METHOD__." failed to find page data for title " . $this->mTitle->getPrefixedText() . "\n" );
+					return false;
+				}
+				$this->loadPageData( $data );
+			}
+			$revision = Revision::newFromId( $this->mLatest );
+			if( is_null( $revision ) ) {
+				wfDebug( __METHOD__." failed to retrieve current page, rev_id {$data->page_latest}\n" );
+				return false;
+			}
+		}
+
+		// FIXME: Horrible, horrible! This content-loading interface just plain sucks.
+		// We should instead work with the Revision object when we need it...
+		$this->mContent = $revision->userCan( Revision::DELETED_TEXT ) ? $revision->getRawText() : "";
+		//$this->mContent   = $revision->getText();
+
+		$this->mUser      = $revision->getUser();
+		$this->mUserText  = $revision->getUserText();
+		$this->mComment   = $revision->getComment();
+		$this->mTimestamp = wfTimestamp( TS_MW, $revision->getTimestamp() );
+
+		$this->mRevIdFetched = $revision->getID();
+		$this->mContentLoaded = true;
+		$this->mRevision =& $revision;
+
+		wfRunHooks( 'ArticleAfterFetchContent', array( &$this, &$this->mContent ) ) ;
+
+		return $this->mContent;
+	}
+
+	/**
+	 * Read/write accessor to select FOR UPDATE
+	 *
+	 * @param $x Mixed: FIXME
+	 */
+	function forUpdate( $x = NULL ) {
+		return wfSetVar( $this->mForUpdate, $x );
+	}
+
+	/**
+	 * Get the database which should be used for reads
+	 *
+	 * @return Database
+	 */
+	function getDB() {
+		return wfGetDB( DB_MASTER );
+	}
+
+	/**
+	 * Get options for all SELECT statements
+	 *
+	 * @param $options Array: an optional options array which'll be appended to
+	 *                       the default
+	 * @return Array: options
+	 */
+	function getSelectOptions( $options = '' ) {
+		if ( $this->mForUpdate ) {
+			if ( is_array( $options ) ) {
+				$options[] = 'FOR UPDATE';
+			} else {
+				$options = 'FOR UPDATE';
+			}
+		}
+		return $options;
+	}
+
+	/**
+	 * @return int Page ID
+	 */
+	function getID() {
+		if( $this->mTitle ) {
+			return $this->mTitle->getArticleID();
+		} else {
+			return 0;
+		}
+	}
+
+	/**
+	 * @return bool Whether or not the page exists in the database
+	 */
+	function exists() {
+		return $this->getId() != 0;
+	}
+
+	/**
+	 * @return int The view count for the page
+	 */
+	function getCount() {
+		if ( -1 == $this->mCounter ) {
+			$id = $this->getID();
+			if ( $id == 0 ) {
+				$this->mCounter = 0;
+			} else {
+				$dbr = wfGetDB( DB_SLAVE );
+				$this->mCounter = $dbr->selectField( 'page', 'page_counter', array( 'page_id' => $id ),
+					'Article::getCount', $this->getSelectOptions() );
+			}
+		}
+		return $this->mCounter;
+	}
+
+	/**
+	 * Determine whether a page  would be suitable for being counted as an
+	 * article in the site_stats table based on the title & its content
+	 *
+	 * @param $text String: text to analyze
+	 * @return bool
+	 */
+	function isCountable( $text ) {
+		global $wgUseCommaCount;
+
+		$token = $wgUseCommaCount ? ',' : '[[';
+		return
+			$this->mTitle->isContentPage()
+			&& !$this->isRedirect( $text )
+			&& in_string( $token, $text );
+	}
+
+	/**
+	 * Tests if the article text represents a redirect
+	 *
+	 * @param $text String: FIXME
+	 * @return bool
+	 */
+	function isRedirect( $text = false ) {
+		if ( $text === false ) {
+			$this->loadContent();
+			$titleObj = Title::newFromRedirect( $this->fetchContent() );
+		} else {
+			$titleObj = Title::newFromRedirect( $text );
+		}
+		return $titleObj !== NULL;
+	}
+
+	/**
+	 * Returns true if the currently-referenced revision is the current edit
+	 * to this page (and it exists).
+	 * @return bool
+	 */
+	function isCurrent() {
+		return $this->exists() &&
+			isset( $this->mRevision ) &&
+			$this->mRevision->isCurrent();
+	}
+
+	/**
+	 * Loads everything except the text
+	 * This isn't necessary for all uses, so it's only done if needed.
+	 * @private
+	 */
+	function loadLastEdit() {
+		if ( -1 != $this->mUser )
+			return;
+
+		# New or non-existent articles have no user information
+		$id = $this->getID();
+		if ( 0 == $id ) return;
+
+		$this->mLastRevision = Revision::loadFromPageId( $this->getDB(), $id );
+		if( !is_null( $this->mLastRevision ) ) {
+			$this->mUser      = $this->mLastRevision->getUser();
+			$this->mUserText  = $this->mLastRevision->getUserText();
+			$this->mTimestamp = $this->mLastRevision->getTimestamp();
+			$this->mComment   = $this->mLastRevision->getComment();
+			$this->mMinorEdit = $this->mLastRevision->isMinor();
+			$this->mRevIdFetched = $this->mLastRevision->getID();
+		}
+	}
+
+	function getTimestamp() {
+		// Check if the field has been filled by ParserCache::get()
+		if ( !$this->mTimestamp ) {
+			$this->loadLastEdit();
+		}
+		return wfTimestamp(TS_MW, $this->mTimestamp);
+	}
+
+	function getUser() {
+		$this->loadLastEdit();
+		return $this->mUser;
+	}
+
+	function getUserText() {
+		$this->loadLastEdit();
+		return $this->mUserText;
+	}
+
+	function getComment() {
+		$this->loadLastEdit();
+		return $this->mComment;
+	}
+
+	function getMinorEdit() {
+		$this->loadLastEdit();
+		return $this->mMinorEdit;
+	}
+
+	function getRevIdFetched() {
+		$this->loadLastEdit();
+		return $this->mRevIdFetched;
+	}
+
+	/**
+	 * @todo Document, fixme $offset never used.
+	 * @param $limit Integer: default 0.
+	 * @param $offset Integer: default 0.
+	 */
+	function getContributors($limit = 0, $offset = 0) {
+		# XXX: this is expensive; cache this info somewhere.
+
+		$contribs = array();
+		$dbr = wfGetDB( DB_SLAVE );
+		$revTable = $dbr->tableName( 'revision' );
+		$userTable = $dbr->tableName( 'user' );
+		$user = $this->getUser();
+		$pageId = $this->getId();
+
+		$sql = "SELECT rev_user, rev_user_text, user_real_name, MAX(rev_timestamp) as timestamp
+			FROM $revTable LEFT JOIN $userTable ON rev_user = user_id
+			WHERE rev_page = $pageId
+			AND rev_user != $user
+			GROUP BY rev_user, rev_user_text, user_real_name
+			ORDER BY timestamp DESC";
+
+		if ($limit > 0) { $sql .= ' LIMIT '.$limit; }
+		$sql .= ' '. $this->getSelectOptions();
+
+		$res = $dbr->query($sql, __METHOD__);
+
+		while ( $line = $dbr->fetchObject( $res ) ) {
+			$contribs[] = array($line->rev_user, $line->rev_user_text, $line->user_real_name);
+		}
+
+		$dbr->freeResult($res);
+		return $contribs;
+	}
+
+	/**
+	 * This is the default action of the script: just view the page of
+	 * the given title.
+	*/
+	function view()	{
+		global $wgUser, $wgOut, $wgRequest, $wgContLang;
+		global $wgEnableParserCache, $wgStylePath, $wgUseRCPatrol, $wgParser;
+		global $wgUseTrackbacks, $wgNamespaceRobotPolicies;
+		$sk = $wgUser->getSkin();
+
+		wfProfileIn( __METHOD__ );
+
+		$parserCache =& ParserCache::singleton();
+		$ns = $this->mTitle->getNamespace(); # shortcut
+
+		# Get variables from query string
+		$oldid = $this->getOldID();
+
+		# getOldID may want us to redirect somewhere else
+		if ( $this->mRedirectUrl ) {
+			$wgOut->redirect( $this->mRedirectUrl );
+			wfProfileOut( __METHOD__ );
+			return;
+		}
+
+		$diff = $wgRequest->getVal( 'diff' );
+		$rcid = $wgRequest->getVal( 'rcid' );
+		$rdfrom = $wgRequest->getVal( 'rdfrom' );
+		$diffOnly = $wgRequest->getBool( 'diffonly', $wgUser->getOption( 'diffonly' ) );
+
+		$wgOut->setArticleFlag( true );
+
+		# Discourage indexing of printable versions, but encourage following
+		if( $wgOut->isPrintable() ) {
+			$policy = 'noindex,follow';
+		} elseif( isset( $wgNamespaceRobotPolicies[$ns] ) ) {
+			# Honour customised robot policies for this namespace
+			$policy = $wgNamespaceRobotPolicies[$ns];
+		} else {
+			# Default to encourage indexing and following links
+			$policy = 'index,follow';
+		}
+		$wgOut->setRobotPolicy( $policy );
+
+		# If we got diff and oldid in the query, we want to see a
+		# diff page instead of the article.
+
+		if ( !is_null( $diff ) ) {
+			$wgOut->setPageTitle( $this->mTitle->getPrefixedText() );
+
+			$de = new DifferenceEngine( $this->mTitle, $oldid, $diff, $rcid );
+			// DifferenceEngine directly fetched the revision:
+			$this->mRevIdFetched = $de->mNewid;
+			$de->showDiffPage( $diffOnly );
+
+			// Needed to get the page's current revision
+			$this->loadPageData();
+			if( $diff == 0 || $diff == $this->mLatest ) {
+				# Run view updates for current revision only
+				$this->viewUpdates();
+			}
+			wfProfileOut( __METHOD__ );
+			return;
+		}
+
+		if ( empty( $oldid ) && $this->checkTouched() ) {
+			$wgOut->setETag($parserCache->getETag($this, $wgUser));
+
+			if( $wgOut->checkLastModified( $this->mTouched ) ){
+				wfProfileOut( __METHOD__ );
+				return;
+			} else if ( $this->tryFileCache() ) {
+				# tell wgOut that output is taken care of
+				$wgOut->disable();
+				$this->viewUpdates();
+				wfProfileOut( __METHOD__ );
+				return;
+			}
+		}
+
+		# Should the parser cache be used?
+		$pcache = $wgEnableParserCache &&
+			intval( $wgUser->getOption( 'stubthreshold' ) ) == 0 &&
+			$this->exists() &&
+			empty( $oldid );
+		wfDebug( 'Article::view using parser cache: ' . ($pcache ? 'yes' : 'no' ) . "\n" );
+		if ( $wgUser->getOption( 'stubthreshold' ) ) {
+			wfIncrStats( 'pcache_miss_stub' );
+		}
+
+		$wasRedirected = false;
+		if ( isset( $this->mRedirectedFrom ) ) {
+			// This is an internally redirected page view.
+			// We'll need a backlink to the source page for navigation.
+			if ( wfRunHooks( 'ArticleViewRedirect', array( &$this ) ) ) {
+				$sk = $wgUser->getSkin();
+				$redir = $sk->makeKnownLinkObj( $this->mRedirectedFrom, '', 'redirect=no' );
+				$s = wfMsg( 'redirectedfrom', $redir );
+				$wgOut->setSubtitle( $s );
+
+				// Set the fragment if one was specified in the redirect
+				if ( strval( $this->mTitle->getFragment() ) != '' ) {
+					$fragment = Xml::escapeJsString( $this->mTitle->getFragmentForURL() );
+					$wgOut->addInlineScript( "redirectToFragment(\"$fragment\");" );
+				}
+				$wasRedirected = true;
+			}
+		} elseif ( !empty( $rdfrom ) ) {
+			// This is an externally redirected view, from some other wiki.
+			// If it was reported from a trusted site, supply a backlink.
+			global $wgRedirectSources;
+			if( $wgRedirectSources && preg_match( $wgRedirectSources, $rdfrom ) ) {
+				$sk = $wgUser->getSkin();
+				$redir = $sk->makeExternalLink( $rdfrom, $rdfrom );
+				$s = wfMsg( 'redirectedfrom', $redir );
+				$wgOut->setSubtitle( $s );
+				$wasRedirected = true;
+			}
+		}
+
+		$outputDone = false;
+		wfRunHooks( 'ArticleViewHeader', array( &$this ) );
+		if ( $pcache ) {
+			if ( $wgOut->tryParserCache( $this, $wgUser ) ) {
+				$outputDone = true;
+			}
+		}
+		if ( !$outputDone ) {
+			$text = $this->getContent();
+			if ( $text === false ) {
+				# Failed to load, replace text with error message
+				$t = $this->mTitle->getPrefixedText();
+				if( $oldid ) {
+					$t .= ',oldid='.$oldid;
+					$text = wfMsg( 'missingarticle', $t );
+				} else {
+					$text = wfMsg( 'noarticletext', $t );
+				}
+			}
+
+			# Another whitelist check in case oldid is altering the title
+			if ( !$this->mTitle->userCanRead() ) {
+				$wgOut->loginToUse();
+				$wgOut->output();
+				exit;
+			}
+
+			# We're looking at an old revision
+
+			if ( !empty( $oldid ) ) {
+				$wgOut->setRobotpolicy( 'noindex,nofollow' );
+				if( is_null( $this->mRevision ) ) {
+					// FIXME: This would be a nice place to load the 'no such page' text.
+				} else {
+					$this->setOldSubtitle( isset($this->mOldId) ? $this->mOldId : $oldid );
+					if( $this->mRevision->isDeleted( Revision::DELETED_TEXT ) ) {
+						if( !$this->mRevision->userCan( Revision::DELETED_TEXT ) ) {
+							$wgOut->addWikiText( wfMsg( 'rev-deleted-text-permission' ) );
+							$wgOut->setPageTitle( $this->mTitle->getPrefixedText() );
+							return;
+						} else {
+							$wgOut->addWikiText( wfMsg( 'rev-deleted-text-view' ) );
+							// and we are allowed to see...
+						}
+					}
+				}
+
+			}
+		}
+		if( !$outputDone ) {
+			$wgOut->setRevisionId( $this->getRevIdFetched() );
+			# wrap user css and user js in pre and don't parse
+			# XXX: use $this->mTitle->usCssJsSubpage() when php is fixed/ a workaround is found
+			if (
+				$ns == NS_USER &&
+				preg_match('/\\/[\\w]+\\.(?:css|js)$/', $this->mTitle->getDBkey())
+			) {
+				$wgOut->addWikiText( wfMsg('clearyourcache'));
+				$wgOut->addHTML( '<pre>'.htmlspecialchars($this->mContent)."\n</pre>" );
+			} else if ( $rt = Title::newFromRedirect( $text ) ) {
+				# Display redirect
+				$imageDir = $wgContLang->isRTL() ? 'rtl' : 'ltr';
+				$imageUrl = $wgStylePath.'/common/images/redirect' . $imageDir . '.png';
+				# Don't overwrite the subtitle if this was an old revision
+				if( !$wasRedirected && $this->isCurrent() ) {
+					$wgOut->setSubtitle( wfMsgHtml( 'redirectpagesub' ) );
+				}
+				$link = $sk->makeLinkObj( $rt, $rt->getFullText() );
+
+				$wgOut->addHTML( '<img src="'.$imageUrl.'" alt="#REDIRECT " />' .
+				  '<span class="redirectText">'.$link.'</span>' );
+
+				$parseout = $wgParser->parse($text, $this->mTitle, ParserOptions::newFromUser($wgUser));
+				$wgOut->addParserOutputNoText( $parseout );
+			} else if ( $pcache ) {
+				# Display content and save to parser cache
+				$this->outputWikiText( $text );
+			} else {
+				# Display content, don't attempt to save to parser cache
+				# Don't show section-edit links on old revisions... this way lies madness.
+				if( !$this->isCurrent() ) {
+					$oldEditSectionSetting = $wgOut->parserOptions()->setEditSection( false );
+				}
+				# Display content and don't save to parser cache
+				# With timing hack -- TS 2006-07-26
+				$time = -wfTime();
+				$this->outputWikiText( $text, false );
+				$time += wfTime();
+
+				# Timing hack
+				if ( $time > 3 ) {
+					wfDebugLog( 'slow-parse', sprintf( "%-5.2f %s", $time,
+						$this->mTitle->getPrefixedDBkey()));
+				}
+
+				if( !$this->isCurrent() ) {
+					$wgOut->parserOptions()->setEditSection( $oldEditSectionSetting );
+				}
+
+			}
+		}
+		/* title may have been set from the cache */
+		$t = $wgOut->getPageTitle();
+		if( empty( $t ) ) {
+			$wgOut->setPageTitle( $this->mTitle->getPrefixedText() );
+		}
+
+		# check if we're displaying a [[User talk:x.x.x.x]] anonymous talk page
+		if( $ns == NS_USER_TALK &&
+			User::isIP( $this->mTitle->getText() ) ) {
+			$wgOut->addWikiText( wfMsg('anontalkpagetext') );
+		}
+
+		# If we have been passed an &rcid= parameter, we want to give the user a
+		# chance to mark this new article as patrolled.
+		if ( $wgUseRCPatrol && !is_null( $rcid ) && $rcid != 0 && $wgUser->isAllowed( 'patrol' ) ) {
+			$wgOut->addHTML(
+				"<div class='patrollink'>" .
+					wfMsgHtml( 'markaspatrolledlink',
+					$sk->makeKnownLinkObj( $this->mTitle, wfMsgHtml('markaspatrolledtext'),
+						"action=markpatrolled&rcid=$rcid" )
+			 		) .
+				'</div>'
+			 );
+		}
+
+		# Trackbacks
+		if ($wgUseTrackbacks)
+			$this->addTrackbacks();
+
+		$this->viewUpdates();
+		wfProfileOut( __METHOD__ );
+	}
+
+	function addTrackbacks() {
+		global $wgOut, $wgUser;
+
+		$dbr = wfGetDB(DB_SLAVE);
+		$tbs = $dbr->select(
+				/* FROM   */ 'trackbacks',
+				/* SELECT */ array('tb_id', 'tb_title', 'tb_url', 'tb_ex', 'tb_name'),
+				/* WHERE  */ array('tb_page' => $this->getID())
+		);
+
+		if (!$dbr->numrows($tbs))
+			return;
+
+		$tbtext = "";
+		while ($o = $dbr->fetchObject($tbs)) {
+			$rmvtxt = "";
+			if ($wgUser->isAllowed( 'trackback' )) {
+				$delurl = $this->mTitle->getFullURL("action=deletetrackback&tbid="
+						. $o->tb_id . "&token=" . $wgUser->editToken());
+				$rmvtxt = wfMsg('trackbackremove', $delurl);
+			}
+			$tbtext .= wfMsg(strlen($o->tb_ex) ? 'trackbackexcerpt' : 'trackback',
+					$o->tb_title,
+					$o->tb_url,
+					$o->tb_ex,
+					$o->tb_name,
+					$rmvtxt);
+		}
+		$wgOut->addWikitext(wfMsg('trackbackbox', $tbtext));
+	}
+
+	function deletetrackback() {
+		global $wgUser, $wgRequest, $wgOut, $wgTitle;
+
+		if (!$wgUser->matchEditToken($wgRequest->getVal('token'))) {
+			$wgOut->addWikitext(wfMsg('sessionfailure'));
+			return;
+		}
+
+		if ((!$wgUser->isAllowed('delete'))) {
+			$wgOut->permissionRequired( 'delete' );
+			return;
+		}
+
+		if (wfReadOnly()) {
+			$wgOut->readOnlyPage();
+			return;
+		}
+
+		$db = wfGetDB(DB_MASTER);
+		$db->delete('trackbacks', array('tb_id' => $wgRequest->getInt('tbid')));
+		$wgTitle->invalidateCache();
+		$wgOut->addWikiText(wfMsg('trackbackdeleteok'));
+	}
+
+	function render() {
+		global $wgOut;
+
+		$wgOut->setArticleBodyOnly(true);
+		$this->view();
+	}
+
+	/**
+	 * Handle action=purge
+	 */
+	function purge() {
+		global $wgUser, $wgRequest, $wgOut;
+
+		if ( $wgUser->isAllowed( 'purge' ) || $wgRequest->wasPosted() ) {
+			if( wfRunHooks( 'ArticlePurge', array( &$this ) ) ) {
+				$this->doPurge();
+			}
+		} else {
+			$msg = $wgOut->parse( wfMsg( 'confirm_purge' ) );
+			$action = $this->mTitle->escapeLocalURL( 'action=purge' );
+			$button = htmlspecialchars( wfMsg( 'confirm_purge_button' ) );
+			$msg = str_replace( '$1',
+				"<form method=\"post\" action=\"$action\">\n" .
+				"<input type=\"submit\" name=\"submit\" value=\"$button\" />\n" .
+				"</form>\n", $msg );
+
+			$wgOut->setPageTitle( $this->mTitle->getPrefixedText() );
+			$wgOut->setRobotpolicy( 'noindex,nofollow' );
+			$wgOut->addHTML( $msg );
+		}
+	}
+
+	/**
+	 * Perform the actions of a page purging
+	 */
+	function doPurge() {
+		global $wgUseSquid;
+		// Invalidate the cache
+		$this->mTitle->invalidateCache();
+
+		if ( $wgUseSquid ) {
+			// Commit the transaction before the purge is sent
+			$dbw = wfGetDB( DB_MASTER );
+			$dbw->immediateCommit();
+
+			// Send purge
+			$update = SquidUpdate::newSimplePurge( $this->mTitle );
+			$update->doUpdate();
+		}
+		$this->view();
+	}
+
+	/**
+	 * Insert a new empty page record for this article.
+	 * This *must* be followed up by creating a revision
+	 * and running $this->updateToLatest( $rev_id );
+	 * or else the record will be left in a funky state.
+	 * Best if all done inside a transaction.
+	 *
+	 * @param Database $dbw
+	 * @return int     The newly created page_id key
+	 * @private
+	 */
+	function insertOn( $dbw ) {
+		wfProfileIn( __METHOD__ );
+
+		$page_id = $dbw->nextSequenceValue( 'page_page_id_seq' );
+		$dbw->insert( 'page', array(
+			'page_id'           => $page_id,
+			'page_namespace'    => $this->mTitle->getNamespace(),
+			'page_title'        => $this->mTitle->getDBkey(),
+			'page_counter'      => 0,
+			'page_restrictions' => '',
+			'page_is_redirect'  => 0, # Will set this shortly...
+			'page_is_new'       => 1,
+			'page_random'       => wfRandom(),
+			'page_touched'      => $dbw->timestamp(),
+			'page_latest'       => 0, # Fill this in shortly...
+			'page_len'          => 0, # Fill this in shortly...
+		), __METHOD__ );
+		$newid = $dbw->insertId();
+
+		$this->mTitle->resetArticleId( $newid );
+
+		wfProfileOut( __METHOD__ );
+		return $newid;
+	}
+
+	/**
+	 * Update the page record to point to a newly saved revision.
+	 *
+	 * @param Database $dbw
+	 * @param Revision $revision For ID number, and text used to set
+	                             length and redirect status fields
+	 * @param int $lastRevision If given, will not overwrite the page field
+	 *                          when different from the currently set value.
+	 *                          Giving 0 indicates the new page flag should
+	 *                          be set on.
+	 * @param bool $lastRevIsRedirect If given, will optimize adding and
+	 * 							removing rows in redirect table.
+	 * @return bool true on success, false on failure
+	 * @private
+	 */
+	function updateRevisionOn( &$dbw, $revision, $lastRevision = null, $lastRevIsRedirect = null ) {
+		wfProfileIn( __METHOD__ );
+
+		$text = $revision->getText();
+		$rt = Title::newFromRedirect( $text );
+
+		$conditions = array( 'page_id' => $this->getId() );
+		if( !is_null( $lastRevision ) ) {
+			# An extra check against threads stepping on each other
+			$conditions['page_latest'] = $lastRevision;
+		}
+
+		$dbw->update( 'page',
+			array( /* SET */
+				'page_latest'      => $revision->getId(),
+				'page_touched'     => $dbw->timestamp(),
+				'page_is_new'      => ($lastRevision === 0) ? 1 : 0,
+				'page_is_redirect' => $rt !== NULL ? 1 : 0,
+				'page_len'         => strlen( $text ),
+			),
+			$conditions,
+			__METHOD__ );
+
+		$result = $dbw->affectedRows() != 0;
+
+		if ($result) {
+			// FIXME: Should the result from updateRedirectOn() be returned instead?
+			$this->updateRedirectOn( $dbw, $rt, $lastRevIsRedirect );
+		}
+
+		wfProfileOut( __METHOD__ );
+		return $result;
+	}
+
+	/**
+	 * Add row to the redirect table if this is a redirect, remove otherwise.
+	 *
+	 * @param Database $dbw
+	 * @param $redirectTitle a title object pointing to the redirect target,
+	 * 							or NULL if this is not a redirect
+	 * @param bool $lastRevIsRedirect If given, will optimize adding and
+	 * 							removing rows in redirect table.
+	 * @return bool true on success, false on failure
+	 * @private
+	 */
+	function updateRedirectOn( &$dbw, $redirectTitle, $lastRevIsRedirect = null ) {
+
+		// Always update redirects (target link might have changed)
+		// Update/Insert if we don't know if the last revision was a redirect or not
+		// Delete if changing from redirect to non-redirect
+		$isRedirect = !is_null($redirectTitle);
+		if ($isRedirect || is_null($lastRevIsRedirect) || $lastRevIsRedirect !== $isRedirect) {
+
+			wfProfileIn( __METHOD__ );
+
+			if ($isRedirect) {
+
+				// This title is a redirect, Add/Update row in the redirect table
+				$set = array( /* SET */
+					'rd_namespace' => $redirectTitle->getNamespace(),
+					'rd_title'     => $redirectTitle->getDBkey(),
+					'rd_from'      => $this->getId(),
+				);
+
+				$dbw->replace( 'redirect', array( 'rd_from' ), $set, __METHOD__ );
+			} else {
+				// This is not a redirect, remove row from redirect table
+				$where = array( 'rd_from' => $this->getId() );
+				$dbw->delete( 'redirect', $where, __METHOD__);
+			}
+
+			wfProfileOut( __METHOD__ );
+			return ( $dbw->affectedRows() != 0 );
+		}
+
+		return true;
+	}
+
+	/**
+	 * If the given revision is newer than the currently set page_latest,
+	 * update the page record. Otherwise, do nothing.
+	 *
+	 * @param Database $dbw
+	 * @param Revision $revision
+	 */
+	function updateIfNewerOn( &$dbw, $revision ) {
+		wfProfileIn( __METHOD__ );
+
+		$row = $dbw->selectRow(
+			array( 'revision', 'page' ),
+			array( 'rev_id', 'rev_timestamp', 'page_is_redirect' ),
+			array(
+				'page_id' => $this->getId(),
+				'page_latest=rev_id' ),
+			__METHOD__ );
+		if( $row ) {
+			if( wfTimestamp(TS_MW, $row->rev_timestamp) >= $revision->getTimestamp() ) {
+				wfProfileOut( __METHOD__ );
+				return false;
+			}
+			$prev = $row->rev_id;
+			$lastRevIsRedirect = (bool)$row->page_is_redirect;
+		} else {
+			# No or missing previous revision; mark the page as new
+			$prev = 0;
+			$lastRevIsRedirect = null;
+		}
+
+		$ret = $this->updateRevisionOn( $dbw, $revision, $prev, $lastRevIsRedirect );
+		wfProfileOut( __METHOD__ );
+		return $ret;
+	}
+
+	/**
+	 * @return string Complete article text, or null if error
+	 */
+	function replaceSection($section, $text, $summary = '', $edittime = NULL) {
+		wfProfileIn( __METHOD__ );
+
+		if( $section == '' ) {
+			// Whole-page edit; let the text through unmolested.
+		} else {
+			if( is_null( $edittime ) ) {
+				$rev = Revision::newFromTitle( $this->mTitle );
+			} else {
+				$dbw = wfGetDB( DB_MASTER );
+				$rev = Revision::loadFromTimestamp( $dbw, $this->mTitle, $edittime );
+			}
+			if( is_null( $rev ) ) {
+				wfDebug( "Article::replaceSection asked for bogus section (page: " .
+					$this->getId() . "; section: $section; edittime: $edittime)\n" );
+				return null;
+			}
+			$oldtext = $rev->getText();
+
+			if( $section == 'new' ) {
+				# Inserting a new section
+				$subject = $summary ? "== {$summary} ==\n\n" : '';
+				$text = strlen( trim( $oldtext ) ) > 0
+						? "{$oldtext}\n\n{$subject}{$text}"
+						: "{$subject}{$text}";
+			} else {
+				# Replacing an existing section; roll out the big guns
+				global $wgParser;
+				$text = $wgParser->replaceSection( $oldtext, $section, $text );
+			}
+
+		}
+
+		wfProfileOut( __METHOD__ );
+		return $text;
+	}
+
+	/**
+	 * @deprecated use Article::doEdit()
+	 */
+	function insertNewArticle( $text, $summary, $isminor, $watchthis, $suppressRC=false, $comment=false ) {
+		$flags = EDIT_NEW | EDIT_DEFER_UPDATES | EDIT_AUTOSUMMARY |
+			( $isminor ? EDIT_MINOR : 0 ) |
+			( $suppressRC ? EDIT_SUPPRESS_RC : 0 );
+
+		# If this is a comment, add the summary as headline
+		if ( $comment && $summary != "" ) {
+			$text = "== {$summary} ==\n\n".$text;
+		}
+
+		$this->doEdit( $text, $summary, $flags );
+
+		$dbw = wfGetDB( DB_MASTER );
+		if ($watchthis) {
+			if (!$this->mTitle->userIsWatching()) {
+				$dbw->begin();
+				$this->doWatch();
+				$dbw->commit();
+			}
+		} else {
+			if ( $this->mTitle->userIsWatching() ) {
+				$dbw->begin();
+				$this->doUnwatch();
+				$dbw->commit();
+			}
+		}
+		$this->doRedirect( $this->isRedirect( $text ) );
+	}
+
+	/**
+	 * @deprecated use Article::doEdit()
+	 */
+	function updateArticle( $text, $summary, $minor, $watchthis, $forceBot = false, $sectionanchor = '' ) {
+		$flags = EDIT_UPDATE | EDIT_DEFER_UPDATES | EDIT_AUTOSUMMARY |
+			( $minor ? EDIT_MINOR : 0 ) |
+			( $forceBot ? EDIT_FORCE_BOT : 0 );
+
+		$good = $this->doEdit( $text, $summary, $flags );
+		if ( $good ) {
+			$dbw = wfGetDB( DB_MASTER );
+			if ($watchthis) {
+				if (!$this->mTitle->userIsWatching()) {
+					$dbw->begin();
+					$this->doWatch();
+					$dbw->commit();
+				}
+			} else {
+				if ( $this->mTitle->userIsWatching() ) {
+					$dbw->begin();
+					$this->doUnwatch();
+					$dbw->commit();
+				}
+			}
+
+			$this->doRedirect( $this->isRedirect( $text ), $sectionanchor );
+		}
+		return $good;
+	}
+
+	/**
+	 * Article::doEdit()
+	 *
+	 * Change an existing article or create a new article. Updates RC and all necessary caches,
+	 * optionally via the deferred update array.
+	 *
+	 * $wgUser must be set before calling this function.
+	 *
+	 * @param string $text New text
+	 * @param string $summary Edit summary
+	 * @param integer $flags bitfield:
+	 *      EDIT_NEW
+	 *          Article is known or assumed to be non-existent, create a new one
+	 *      EDIT_UPDATE
+	 *          Article is known or assumed to be pre-existing, update it
+	 *      EDIT_MINOR
+	 *          Mark this edit minor, if the user is allowed to do so
+	 *      EDIT_SUPPRESS_RC
+	 *          Do not log the change in recentchanges
+	 *      EDIT_FORCE_BOT
+	 *          Mark the edit a "bot" edit regardless of user rights
+	 *      EDIT_DEFER_UPDATES
+	 *          Defer some of the updates until the end of index.php
+	 *      EDIT_AUTOSUMMARY
+	 *          Fill in blank summaries with generated text where possible
+	 *
+	 * If neither EDIT_NEW nor EDIT_UPDATE is specified, the status of the article will be detected.
+	 * If EDIT_UPDATE is specified and the article doesn't exist, the function will return false. If
+	 * EDIT_NEW is specified and the article does exist, a duplicate key error will cause an exception
+	 * to be thrown from the Database. These two conditions are also possible with auto-detection due
+	 * to MediaWiki's performance-optimised locking strategy.
+	 *
+	 * @return bool success
+	 */
+	function doEdit( $text, $summary, $flags = 0 ) {
+		global $wgUser, $wgDBtransactions;
+
+		wfProfileIn( __METHOD__ );
+		$good = true;
+
+		if ( !($flags & EDIT_NEW) && !($flags & EDIT_UPDATE) ) {
+			$aid = $this->mTitle->getArticleID( GAID_FOR_UPDATE );
+			if ( $aid ) {
+				$flags |= EDIT_UPDATE;
+			} else {
+				$flags |= EDIT_NEW;
+			}
+		}
+
+		if( !wfRunHooks( 'ArticleSave', array( &$this, &$wgUser, &$text,
+			&$summary, $flags & EDIT_MINOR,
+			null, null, &$flags ) ) )
+		{
+			wfDebug( __METHOD__ . ": ArticleSave hook aborted save!\n" );
+			wfProfileOut( __METHOD__ );
+			return false;
+		}
+
+		# Silently ignore EDIT_MINOR if not allowed
+		$isminor = ( $flags & EDIT_MINOR ) && $wgUser->isAllowed('minoredit');
+		$bot = $wgUser->isAllowed( 'bot' ) || ( $flags & EDIT_FORCE_BOT );
+
+		$oldtext = $this->getContent();
+		$oldsize = strlen( $oldtext );
+
+		# Provide autosummaries if one is not provided.
+		if ($flags & EDIT_AUTOSUMMARY && $summary == '')
+			$summary = $this->getAutosummary( $oldtext, $text, $flags );
+
+		$text = $this->preSaveTransform( $text );
+		$newsize = strlen( $text );
+
+		$dbw = wfGetDB( DB_MASTER );
+		$now = wfTimestampNow();
+
+		if ( $flags & EDIT_UPDATE ) {
+			# Update article, but only if changed.
+
+			# Make sure the revision is either completely inserted or not inserted at all
+			if( !$wgDBtransactions ) {
+				$userAbort = ignore_user_abort( true );
+			}
+
+			$lastRevision = 0;
+			$revisionId = 0;
+
+			if ( 0 != strcmp( $text, $oldtext ) ) {
+				$this->mGoodAdjustment = (int)$this->isCountable( $text )
+				  - (int)$this->isCountable( $oldtext );
+				$this->mTotalAdjustment = 0;
+
+				$lastRevision = $dbw->selectField(
+					'page', 'page_latest', array( 'page_id' => $this->getId() ) );
+
+				if ( !$lastRevision ) {
+					# Article gone missing
+					wfDebug( __METHOD__.": EDIT_UPDATE specified but article doesn't exist\n" );
+					wfProfileOut( __METHOD__ );
+					return false;
+				}
+
+				$revision = new Revision( array(
+					'page'       => $this->getId(),
+					'comment'    => $summary,
+					'minor_edit' => $isminor,
+					'text'       => $text
+					) );
+
+				$dbw->begin();
+				$revisionId = $revision->insertOn( $dbw );
+
+				# Update page
+				$ok = $this->updateRevisionOn( $dbw, $revision, $lastRevision );
+
+				if( !$ok ) {
+					/* Belated edit conflict! Run away!! */
+					$good = false;
+					$dbw->rollback();
+				} else {
+					# Update recentchanges
+					if( !( $flags & EDIT_SUPPRESS_RC ) ) {
+						$rcid = RecentChange::notifyEdit( $now, $this->mTitle, $isminor, $wgUser, $summary,
+							$lastRevision, $this->getTimestamp(), $bot, '', $oldsize, $newsize,
+							$revisionId );
+
+						# Mark as patrolled if the user can do so
+						if( $GLOBALS['wgUseRCPatrol'] && $wgUser->isAllowed( 'autopatrol' ) ) {
+							RecentChange::markPatrolled( $rcid );
+							PatrolLog::record( $rcid, true );
+						}
+					}
+					$wgUser->incEditCount();
+					$dbw->commit();
+				}
+			} else {
+				// Keep the same revision ID, but do some updates on it
+				$revisionId = $this->getRevIdFetched();
+				// Update page_touched, this is usually implicit in the page update
+				// Other cache updates are done in onArticleEdit()
+				$this->mTitle->invalidateCache();
+			}
+
+			if( !$wgDBtransactions ) {
+				ignore_user_abort( $userAbort );
+			}
+
+			if ( $good ) {
+				# Invalidate cache of this article and all pages using this article
+				# as a template. Partly deferred.
+				Article::onArticleEdit( $this->mTitle );
+
+				# Update links tables, site stats, etc.
+				$changed = ( strcmp( $oldtext, $text ) != 0 );
+				$this->editUpdates( $text, $summary, $isminor, $now, $revisionId, $changed );
+			}
+		} else {
+			# Create new article
+
+			# Set statistics members
+			# We work out if it's countable after PST to avoid counter drift
+			# when articles are created with {{subst:}}
+			$this->mGoodAdjustment = (int)$this->isCountable( $text );
+			$this->mTotalAdjustment = 1;
+
+			$dbw->begin();
+
+			# Add the page record; stake our claim on this title!
+			# This will fail with a database query exception if the article already exists
+			$newid = $this->insertOn( $dbw );
+
+			# Save the revision text...
+			$revision = new Revision( array(
+				'page'       => $newid,
+				'comment'    => $summary,
+				'minor_edit' => $isminor,
+				'text'       => $text
+				) );
+			$revisionId = $revision->insertOn( $dbw );
+
+			$this->mTitle->resetArticleID( $newid );
+
+			# Update the page record with revision data
+			$this->updateRevisionOn( $dbw, $revision, 0 );
+
+			if( !( $flags & EDIT_SUPPRESS_RC ) ) {
+				$rcid = RecentChange::notifyNew( $now, $this->mTitle, $isminor, $wgUser, $summary, $bot,
+				  '', strlen( $text ), $revisionId );
+				# Mark as patrolled if the user can
+				if( $GLOBALS['wgUseRCPatrol'] && $wgUser->isAllowed( 'autopatrol' ) ) {
+					RecentChange::markPatrolled( $rcid );
+					PatrolLog::record( $rcid, true );
+				}
+			}
+			$wgUser->incEditCount();
+			$dbw->commit();
+
+			# Update links, etc.
+			$this->editUpdates( $text, $summary, $isminor, $now, $revisionId, true );
+
+			# Clear caches
+			Article::onArticleCreate( $this->mTitle );
+
+			wfRunHooks( 'ArticleInsertComplete', array( &$this, &$wgUser, $text,
+				$summary, $flags & EDIT_MINOR,
+				null, null, &$flags ) );
+		}
+
+		if ( $good && !( $flags & EDIT_DEFER_UPDATES ) ) {
+			wfDoUpdates();
+		}
+
+		wfRunHooks( 'ArticleSaveComplete',
+			array( &$this, &$wgUser, $text,
+			$summary, $flags & EDIT_MINOR,
+			null, null, &$flags ) );
+
+		wfProfileOut( __METHOD__ );
+		return $good;
+	}
+
+	/**
+	 * @deprecated wrapper for doRedirect
+	 */
+	function showArticle( $text, $subtitle , $sectionanchor = '', $me2, $now, $summary, $oldid ) {
+		$this->doRedirect( $this->isRedirect( $text ), $sectionanchor );
+	}
+
+	/**
+	 * Output a redirect back to the article.
+	 * This is typically used after an edit.
+	 *
+	 * @param boolean $noRedir Add redirect=no
+	 * @param string $sectionAnchor section to redirect to, including "#"
+	 */
+	function doRedirect( $noRedir = false, $sectionAnchor = '' ) {
+		global $wgOut;
+		if ( $noRedir ) {
+			$query = 'redirect=no';
+		} else {
+			$query = '';
+		}
+		$wgOut->redirect( $this->mTitle->getFullURL( $query ) . $sectionAnchor );
+	}
+
+	/**
+	 * Mark this particular edit as patrolled
+	 */
+	function markpatrolled() {
+		global $wgOut, $wgRequest, $wgUseRCPatrol, $wgUser;
+		$wgOut->setRobotPolicy( 'noindex,nofollow' );
+
+		# Check RC patrol config. option
+		if( !$wgUseRCPatrol ) {
+			$wgOut->errorPage( 'rcpatroldisabled', 'rcpatroldisabledtext' );
+			return;
+		}
+
+		# Check permissions
+		if( !$wgUser->isAllowed( 'patrol' ) ) {
+			$wgOut->permissionRequired( 'patrol' );
+			return;
+		}
+
+		# If we haven't been given an rc_id value, we can't do anything
+		$rcid = $wgRequest->getVal( 'rcid' );
+		if( !$rcid ) {
+			$wgOut->errorPage( 'markedaspatrollederror', 'markedaspatrollederrortext' );
+			return;
+		}
+
+		# Handle the 'MarkPatrolled' hook
+		if( !wfRunHooks( 'MarkPatrolled', array( $rcid, &$wgUser, false ) ) ) {
+			return;
+		}
+
+		$return = SpecialPage::getTitleFor( 'Recentchanges' );
+		# If it's left up to us, check that the user is allowed to patrol this edit
+		# If the user has the "autopatrol" right, then we'll assume there are no
+		# other conditions stopping them doing so
+		if( !$wgUser->isAllowed( 'autopatrol' ) ) {
+			$rc = RecentChange::newFromId( $rcid );
+			# Graceful error handling, as we've done before here...
+			# (If the recent change doesn't exist, then it doesn't matter whether
+			# the user is allowed to patrol it or not; nothing is going to happen
+			if( is_object( $rc ) && $wgUser->getName() == $rc->getAttribute( 'rc_user_text' ) ) {
+				# The user made this edit, and can't patrol it
+				# Tell them so, and then back off
+				$wgOut->setPageTitle( wfMsg( 'markedaspatrollederror' ) );
+				$wgOut->addWikiText( wfMsgNoTrans( 'markedaspatrollederror-noautopatrol' ) );
+				$wgOut->returnToMain( false, $return );
+				return;
+			}
+		}
+
+		# Mark the edit as patrolled
+		RecentChange::markPatrolled( $rcid );
+		PatrolLog::record( $rcid );
+		wfRunHooks( 'MarkPatrolledComplete', array( &$rcid, &$wgUser, false ) );
+
+		# Inform the user
+		$wgOut->setPageTitle( wfMsg( 'markedaspatrolled' ) );
+		$wgOut->addWikiText( wfMsgNoTrans( 'markedaspatrolledtext' ) );
+		$wgOut->returnToMain( false, $return );
+	}
+
+	/**
+	 * User-interface handler for the "watch" action
+	 */
+
+	function watch() {
+
+		global $wgUser, $wgOut;
+
+		if ( $wgUser->isAnon() ) {
+			$wgOut->showErrorPage( 'watchnologin', 'watchnologintext' );
+			return;
+		}
+		if ( wfReadOnly() ) {
+			$wgOut->readOnlyPage();
+			return;
+		}
+
+		if( $this->doWatch() ) {
+			$wgOut->setPagetitle( wfMsg( 'addedwatch' ) );
+			$wgOut->setRobotpolicy( 'noindex,nofollow' );
+
+			$link = wfEscapeWikiText( $this->mTitle->getPrefixedText() );
+			$text = wfMsg( 'addedwatchtext', $link );
+			$wgOut->addWikiText( $text );
+		}
+
+		$wgOut->returnToMain( true, $this->mTitle->getPrefixedText() );
+	}
+
+	/**
+	 * Add this page to $wgUser's watchlist
+	 * @return bool true on successful watch operation
+	 */
+	function doWatch() {
+		global $wgUser;
+		if( $wgUser->isAnon() ) {
+			return false;
+		}
+
+		if (wfRunHooks('WatchArticle', array(&$wgUser, &$this))) {
+			$wgUser->addWatch( $this->mTitle );
+
+			return wfRunHooks('WatchArticleComplete', array(&$wgUser, &$this));
+		}
+
+		return false;
+	}
+
+	/**
+	 * User interface handler for the "unwatch" action.
+	 */
+	function unwatch() {
+
+		global $wgUser, $wgOut;
+
+		if ( $wgUser->isAnon() ) {
+			$wgOut->showErrorPage( 'watchnologin', 'watchnologintext' );
+			return;
+		}
+		if ( wfReadOnly() ) {
+			$wgOut->readOnlyPage();
+			return;
+		}
+
+		if( $this->doUnwatch() ) {
+			$wgOut->setPagetitle( wfMsg( 'removedwatch' ) );
+			$wgOut->setRobotpolicy( 'noindex,nofollow' );
+
+			$link = wfEscapeWikiText( $this->mTitle->getPrefixedText() );
+			$text = wfMsg( 'removedwatchtext', $link );
+			$wgOut->addWikiText( $text );
+		}
+
+		$wgOut->returnToMain( true, $this->mTitle->getPrefixedText() );
+	}
+
+	/**
+	 * Stop watching a page
+	 * @return bool true on successful unwatch
+	 */
+	function doUnwatch() {
+		global $wgUser;
+		if( $wgUser->isAnon() ) {
+			return false;
+		}
+
+		if (wfRunHooks('UnwatchArticle', array(&$wgUser, &$this))) {
+			$wgUser->removeWatch( $this->mTitle );
+
+			return wfRunHooks('UnwatchArticleComplete', array(&$wgUser, &$this));
+		}
+
+		return false;
+	}
+
+	/**
+	 * action=protect handler
+	 */
+	function protect() {
+		$form = new ProtectionForm( $this );
+		$form->execute();
+	}
+
+	/**
+	 * action=unprotect handler (alias)
+	 */
+	function unprotect() {
+		$this->protect();
+	}
+
+	/**
+	 * Update the article's restriction field, and leave a log entry.
+	 *
+	 * @param array $limit set of restriction keys
+	 * @param string $reason
+	 * @return bool true on success
+	 */
+	function updateRestrictions( $limit = array(), $reason = '', $cascade = 0, $expiry = null ) {
+		global $wgUser, $wgRestrictionTypes, $wgContLang;
+
+		$id = $this->mTitle->getArticleID();
+		if( !$wgUser->isAllowed( 'protect' ) || wfReadOnly() || $id == 0 ) {
+			return false;
+		}
+
+		if (!$cascade) {
+			$cascade = false;
+		}
+
+		// Take this opportunity to purge out expired restrictions
+		Title::purgeExpiredRestrictions();
+
+		# FIXME: Same limitations as described in ProtectionForm.php (line 37);
+		# we expect a single selection, but the schema allows otherwise.
+		$current = array();
+		foreach( $wgRestrictionTypes as $action )
+			$current[$action] = implode( '', $this->mTitle->getRestrictions( $action ) );
+
+		$current = Article::flattenRestrictions( $current );
+		$updated = Article::flattenRestrictions( $limit );
+
+		$changed = ( $current != $updated );
+		$changed = $changed || ($this->mTitle->areRestrictionsCascading() != $cascade);
+		$changed = $changed || ($this->mTitle->mRestrictionsExpiry != $expiry);
+		$protect = ( $updated != '' );
+
+		# If nothing's changed, do nothing
+		if( $changed ) {
+			global $wgGroupPermissions;
+			if( wfRunHooks( 'ArticleProtect', array( &$this, &$wgUser, $limit, $reason ) ) ) {
+
+				$dbw = wfGetDB( DB_MASTER );
+
+				$encodedExpiry = Block::encodeExpiry($expiry, $dbw );
+
+				$expiry_description = '';
+				if ( $encodedExpiry != 'infinity' ) {
+					$expiry_description = ' (' . wfMsgForContent( 'protect-expiring', $wgContLang->timeanddate( $expiry ) ).')';
+				}
+
+				# Prepare a null revision to be added to the history
+				$comment = $wgContLang->ucfirst( wfMsgForContent( $protect ? 'protectedarticle' : 'unprotectedarticle', $this->mTitle->getPrefixedText() ) );
+
+				foreach( $limit as $action => $restrictions ) {
+					# Check if the group level required to edit also can protect pages
+					# Otherwise, people who cannot normally protect can "protect" pages via transclusion
+					$cascade = ( $cascade && isset($wgGroupPermissions[$restrictions]['protect']) && $wgGroupPermissions[$restrictions]['protect'] );	
+				}
+				
+				$cascade_description = '';
+				if ($cascade) {
+					$cascade_description = ' ['.wfMsg('protect-summary-cascade').']';
+				}
+
+				if( $reason )
+					$comment .= ": $reason";
+				if( $protect )
+					$comment .= " [$updated]";
+				if ( $expiry_description && $protect )
+					$comment .= "$expiry_description";
+				if ( $cascade )
+					$comment .= "$cascade_description";
+
+				$nullRevision = Revision::newNullRevision( $dbw, $id, $comment, true );
+				$nullRevId = $nullRevision->insertOn( $dbw );
+
+				# Update restrictions table
+				foreach( $limit as $action => $restrictions ) {
+					if ($restrictions != '' ) {
+						$dbw->replace( 'page_restrictions', array(array('pr_page', 'pr_type')),
+							array( 'pr_page' => $id, 'pr_type' => $action
+								, 'pr_level' => $restrictions, 'pr_cascade' => $cascade ? 1 : 0
+								, 'pr_expiry' => $encodedExpiry ), __METHOD__  );
+					} else {
+						$dbw->delete( 'page_restrictions', array( 'pr_page' => $id,
+							'pr_type' => $action ), __METHOD__ );
+					}
+				}
+
+				# Update page record
+				$dbw->update( 'page',
+					array( /* SET */
+						'page_touched' => $dbw->timestamp(),
+						'page_restrictions' => '',
+						'page_latest' => $nullRevId
+					), array( /* WHERE */
+						'page_id' => $id
+					), 'Article::protect'
+				);
+				wfRunHooks( 'ArticleProtectComplete', array( &$this, &$wgUser, $limit, $reason ) );
+
+				# Update the protection log
+				$log = new LogPage( 'protect' );
+
+				if( $protect ) {
+					$log->addEntry( 'protect', $this->mTitle, trim( $reason . " [$updated]$cascade_description$expiry_description" ) );
+				} else {
+					$log->addEntry( 'unprotect', $this->mTitle, $reason );
+				}
+
+			} # End hook
+		} # End "changed" check
+
+		return true;
+	}
+
+	/**
+	 * Take an array of page restrictions and flatten it to a string
+	 * suitable for insertion into the page_restrictions field.
+	 * @param array $limit
+	 * @return string
+	 * @private
+	 */
+	function flattenRestrictions( $limit ) {
+		if( !is_array( $limit ) ) {
+			throw new MWException( 'Article::flattenRestrictions given non-array restriction set' );
+		}
+		$bits = array();
+		ksort( $limit );
+		foreach( $limit as $action => $restrictions ) {
+			if( $restrictions != '' ) {
+				$bits[] = "$action=$restrictions";
+			}
+		}
+		return implode( ':', $bits );
+	}
+
+	/*
+	 * UI entry point for page deletion
+	 */
+	function delete() {
+		global $wgUser, $wgOut, $wgRequest;
+		$confirm = $wgRequest->wasPosted() &&
+			$wgUser->matchEditToken( $wgRequest->getVal( 'wpEditToken' ) );
+		$reason = $wgRequest->getText( 'wpReason' );
+
+		# This code desperately needs to be totally rewritten
+
+		# Check permissions
+		if( $wgUser->isAllowed( 'delete' ) ) {
+			if( $wgUser->isBlocked( !$confirm ) ) {
+				$wgOut->blockedPage();
+				return;
+			}
+		} else {
+			$wgOut->permissionRequired( 'delete' );
+			return;
+		}
+
+		if( wfReadOnly() ) {
+			$wgOut->readOnlyPage();
+			return;
+		}
+
+		$wgOut->setPagetitle( wfMsg( 'confirmdelete' ) );
+
+		# Better double-check that it hasn't been deleted yet!
+		$dbw = wfGetDB( DB_MASTER );
+		$conds = $this->mTitle->pageCond();
+		$latest = $dbw->selectField( 'page', 'page_latest', $conds, __METHOD__ );
+		if ( $latest === false ) {
+			$wgOut->showFatalError( wfMsg( 'cannotdelete' ) );
+			return;
+		}
+
+		if( $confirm ) {
+			$this->doDelete( $reason );
+			if( $wgRequest->getCheck( 'wpWatch' ) ) {
+				$this->doWatch();
+			} elseif( $this->mTitle->userIsWatching() ) {
+				$this->doUnwatch();
+			}
+			return;
+		}
+
+		# determine whether this page has earlier revisions
+		# and insert a warning if it does
+		$maxRevisions = 20;
+		$authors = $this->getLastNAuthors( $maxRevisions, $latest );
+
+		if( count( $authors ) > 1 && !$confirm ) {
+			$skin=$wgUser->getSkin();
+			$wgOut->addHTML( '<strong>' . wfMsg( 'historywarning' ) . ' ' . $skin->historyLink() . '</strong>' );
+		}
+
+		# If a single user is responsible for all revisions, find out who they are
+		if ( count( $authors ) == $maxRevisions ) {
+			// Query bailed out, too many revisions to find out if they're all the same
+			$authorOfAll = false;
+		} else {
+			$authorOfAll = reset( $authors );
+			foreach ( $authors as $author ) {
+				if ( $authorOfAll != $author ) {
+					$authorOfAll = false;
+					break;
+				}
+			}
+		}
+		# Fetch article text
+		$rev = Revision::newFromTitle( $this->mTitle );
+
+		if( !is_null( $rev ) ) {
+			# if this is a mini-text, we can paste part of it into the deletion reason
+			$text = $rev->getText();
+
+			#if this is empty, an earlier revision may contain "useful" text
+			$blanked = false;
+			if( $text == '' ) {
+				$prev = $rev->getPrevious();
+				if( $prev ) {
+					$text = $prev->getText();
+					$blanked = true;
+				}
+			}
+
+			$length = strlen( $text );
+
+			# this should not happen, since it is not possible to store an empty, new
+			# page. Let's insert a standard text in case it does, though
+			if( $length == 0 && $reason === '' ) {
+				$reason = wfMsgForContent( 'exblank' );
+			}
+
+			if( $reason === '' ) {
+				# comment field=255, let's grep the first 150 to have some user
+				# space left
+				global $wgContLang;
+				$text = $wgContLang->truncate( $text, 150, '...' );
+
+				# let's strip out newlines
+				$text = preg_replace( "/[\n\r]/", '', $text );
+
+				if( !$blanked ) {
+					if( $authorOfAll === false ) {
+						$reason = wfMsgForContent( 'excontent', $text );
+					} else {
+						$reason = wfMsgForContent( 'excontentauthor', $text, $authorOfAll );
+					}
+				} else {
+					$reason = wfMsgForContent( 'exbeforeblank', $text );
+				}
+			}
+		}
+
+		return $this->confirmDelete( '', $reason );
+	}
+
+	/**
+	 * Get the last N authors
+	 * @param int $num Number of revisions to get
+	 * @param string $revLatest The latest rev_id, selected from the master (optional)
+	 * @return array Array of authors, duplicates not removed
+	 */
+	function getLastNAuthors( $num, $revLatest = 0 ) {
+		wfProfileIn( __METHOD__ );
+
+		// First try the slave
+		// If that doesn't have the latest revision, try the master
+		$continue = 2;
+		$db = wfGetDB( DB_SLAVE );
+		do {
+			$res = $db->select( array( 'page', 'revision' ),
+				array( 'rev_id', 'rev_user_text' ),
+				array(
+					'page_namespace' => $this->mTitle->getNamespace(),
+					'page_title' => $this->mTitle->getDBkey(),
+					'rev_page = page_id'
+				), __METHOD__, $this->getSelectOptions( array(
+					'ORDER BY' => 'rev_timestamp DESC',
+					'LIMIT' => $num
+				) )
+			);
+			if ( !$res ) {
+				wfProfileOut( __METHOD__ );
+				return array();
+			}
+			$row = $db->fetchObject( $res );
+			if ( $continue == 2 && $revLatest && $row->rev_id != $revLatest ) {
+				$db = wfGetDB( DB_MASTER );
+				$continue--;
+			} else {
+				$continue = 0;
+			}
+		} while ( $continue );
+
+		$authors = array( $row->rev_user_text );
+		while ( $row = $db->fetchObject( $res ) ) {
+			$authors[] = $row->rev_user_text;
+		}
+		wfProfileOut( __METHOD__ );
+		return $authors;
+	}
+
+	/**
+	 * Output deletion confirmation dialog
+	 */
+	function confirmDelete( $par, $reason ) {
+		global $wgOut, $wgUser;
+
+		wfDebug( "Article::confirmDelete\n" );
+
+		$sub = htmlspecialchars( $this->mTitle->getPrefixedText() );
+		$wgOut->setSubtitle( wfMsg( 'deletesub', $sub ) );
+		$wgOut->setRobotpolicy( 'noindex,nofollow' );
+		$wgOut->addWikiText( wfMsg( 'confirmdeletetext' ) );
+
+		$formaction = $this->mTitle->escapeLocalURL( 'action=delete' . $par );
+
+		$confirm = htmlspecialchars( wfMsg( 'deletepage' ) );
+		$delcom = htmlspecialchars( wfMsg( 'deletecomment' ) );
+		$token = htmlspecialchars( $wgUser->editToken() );
+		$watch = Xml::checkLabel( wfMsg( 'watchthis' ), 'wpWatch', 'wpWatch', $wgUser->getBoolOption( 'watchdeletion' ) || $this->mTitle->userIsWatching(), array( 'tabindex' => '2' ) );
+
+		$wgOut->addHTML( "
+<form id='deleteconfirm' method='post' action=\"{$formaction}\">
+	<table border='0'>
+		<tr>
+			<td align='right'>
+				<label for='wpReason'>{$delcom}:</label>
+			</td>
+			<td align='left'>
+				<input type='text' size='60' name='wpReason' id='wpReason' value=\"" . htmlspecialchars( $reason ) . "\" tabindex=\"1\" />
+			</td>
+		</tr>
+		<tr>
+			<td>&nbsp;</td>
+			<td>$watch</td>
+		</tr>
+		<tr>
+			<td>&nbsp;</td>
+			<td>
+				<input type='submit' name='wpConfirmB' id='wpConfirmB' value=\"{$confirm}\" tabindex=\"3\" />
+			</td>
+		</tr>
+	</table>
+	<input type='hidden' name='wpEditToken' value=\"{$token}\" />
+</form>\n" );
+
+		$wgOut->returnToMain( false );
+
+		$this->showLogExtract( $wgOut );
+	}
+
+
+	/**
+	 * Fetch deletion log
+	 */
+	function showLogExtract( &$out ) {
+		# Show relevant lines from the deletion log:
+		$out->addHTML( "<h2>" . htmlspecialchars( LogPage::logName( 'delete' ) ) . "</h2>\n" );
+		$logViewer = new LogViewer(
+			new LogReader(
+				new FauxRequest(
+					array( 'page' => $this->mTitle->getPrefixedText(),
+					       'type' => 'delete' ) ) ) );
+		$logViewer->showList( $out );
+	}
+
+
+	/**
+	 * Perform a deletion and output success or failure messages
+	 */
+	function doDelete( $reason ) {
+		global $wgOut, $wgUser;
+		wfDebug( __METHOD__."\n" );
+
+		if (wfRunHooks('ArticleDelete', array(&$this, &$wgUser, &$reason))) {
+			if ( $this->doDeleteArticle( $reason ) ) {
+				$deleted = wfEscapeWikiText( $this->mTitle->getPrefixedText() );
+
+				$wgOut->setPagetitle( wfMsg( 'actioncomplete' ) );
+				$wgOut->setRobotpolicy( 'noindex,nofollow' );
+
+				$loglink = '[[Special:Log/delete|' . wfMsg( 'deletionlog' ) . ']]';
+				$text = wfMsg( 'deletedtext', $deleted, $loglink );
+
+				$wgOut->addWikiText( $text );
+				$wgOut->returnToMain( false );
+				wfRunHooks('ArticleDeleteComplete', array(&$this, &$wgUser, $reason));
+			} else {
+				$wgOut->showFatalError( wfMsg( 'cannotdelete' ) );
+			}
+		}
+	}
+
+	/**
+	 * Back-end article deletion
+	 * Deletes the article with database consistency, writes logs, purges caches
+	 * Returns success
+	 */
+	function doDeleteArticle( $reason ) {
+		global $wgUseSquid, $wgDeferredUpdateList;
+		global $wgUseTrackbacks;
+
+		wfDebug( __METHOD__."\n" );
+
+		$dbw = wfGetDB( DB_MASTER );
+		$ns = $this->mTitle->getNamespace();
+		$t = $this->mTitle->getDBkey();
+		$id = $this->mTitle->getArticleID();
+
+		if ( $t == '' || $id == 0 ) {
+			return false;
+		}
+
+		$u = new SiteStatsUpdate( 0, 1, -(int)$this->isCountable( $this->getContent() ), -1 );
+		array_push( $wgDeferredUpdateList, $u );
+
+		// For now, shunt the revision data into the archive table.
+		// Text is *not* removed from the text table; bulk storage
+		// is left intact to avoid breaking block-compression or
+		// immutable storage schemes.
+		//
+		// For backwards compatibility, note that some older archive
+		// table entries will have ar_text and ar_flags fields still.
+		//
+		// In the future, we may keep revisions and mark them with
+		// the rev_deleted field, which is reserved for this purpose.
+		$dbw->insertSelect( 'archive', array( 'page', 'revision' ),
+			array(
+				'ar_namespace'  => 'page_namespace',
+				'ar_title'      => 'page_title',
+				'ar_comment'    => 'rev_comment',
+				'ar_user'       => 'rev_user',
+				'ar_user_text'  => 'rev_user_text',
+				'ar_timestamp'  => 'rev_timestamp',
+				'ar_minor_edit' => 'rev_minor_edit',
+				'ar_rev_id'     => 'rev_id',
+				'ar_text_id'    => 'rev_text_id',
+				'ar_text'       => '\'\'', // Be explicit to appease
+				'ar_flags'      => '\'\'', // MySQL's "strict mode"...
+				'ar_len'		=> 'rev_len'
+			), array(
+				'page_id' => $id,
+				'page_id = rev_page'
+			), __METHOD__
+		);
+
+		# Delete restrictions for it
+		$dbw->delete( 'page_restrictions', array ( 'pr_page' => $id ), __METHOD__ );
+
+		# Now that it's safely backed up, delete it
+		$dbw->delete( 'page', array( 'page_id' => $id ), __METHOD__);
+
+		# If using cascading deletes, we can skip some explicit deletes
+		if ( !$dbw->cascadingDeletes() ) {
+
+			$dbw->delete( 'revision', array( 'rev_page' => $id ), __METHOD__ );
+
+			if ($wgUseTrackbacks)
+				$dbw->delete( 'trackbacks', array( 'tb_page' => $id ), __METHOD__ );
+
+			# Delete outgoing links
+			$dbw->delete( 'pagelinks', array( 'pl_from' => $id ) );
+			$dbw->delete( 'imagelinks', array( 'il_from' => $id ) );
+			$dbw->delete( 'categorylinks', array( 'cl_from' => $id ) );
+			$dbw->delete( 'templatelinks', array( 'tl_from' => $id ) );
+			$dbw->delete( 'externallinks', array( 'el_from' => $id ) );
+			$dbw->delete( 'langlinks', array( 'll_from' => $id ) );
+			$dbw->delete( 'redirect', array( 'rd_from' => $id ) );
+		}
+
+		# If using cleanup triggers, we can skip some manual deletes
+		if ( !$dbw->cleanupTriggers() ) {
+
+			# Clean up recentchanges entries...
+			$dbw->delete( 'recentchanges', array( 'rc_namespace' => $ns, 'rc_title' => $t ), __METHOD__ );
+		}
+
+		# Clear caches
+		Article::onArticleDelete( $this->mTitle );
+
+		# Log the deletion
+		$log = new LogPage( 'delete' );
+		$log->addEntry( 'delete', $this->mTitle, $reason );
+
+		# Clear the cached article id so the interface doesn't act like we exist
+		$this->mTitle->resetArticleID( 0 );
+		$this->mTitle->mArticleID = 0;
+		return true;
+	}
+
+	/**
+	 * Revert a modification
+	 */
+	function rollback() {
+		global $wgUser, $wgOut, $wgRequest, $wgUseRCPatrol;
+
+		if( $wgUser->isAllowed( 'rollback' ) ) {
+			if( $wgUser->isBlocked() ) {
+				$wgOut->blockedPage();
+				return;
+			}
+		} else {
+			$wgOut->permissionRequired( 'rollback' );
+			return;
+		}
+
+		if ( wfReadOnly() ) {
+			$wgOut->readOnlyPage( $this->getContent() );
+			return;
+		}
+		if( !$wgUser->matchEditToken( $wgRequest->getVal( 'token' ),
+			array( $this->mTitle->getPrefixedText(),
+				$wgRequest->getVal( 'from' ) )  ) ) {
+			$wgOut->setPageTitle( wfMsg( 'rollbackfailed' ) );
+			$wgOut->addWikiText( wfMsg( 'sessionfailure' ) );
+			return;
+		}
+		$dbw = wfGetDB( DB_MASTER );
+
+		# Enhanced rollback, marks edits rc_bot=1
+		$bot = $wgRequest->getBool( 'bot' );
+
+		# Replace all this user's current edits with the next one down
+
+		# Get the last editor
+		$current = Revision::newFromTitle( $this->mTitle );
+		if( is_null( $current ) ) {
+			# Something wrong... no page?
+			$wgOut->addHTML( wfMsg( 'notanarticle' ) );
+			return;
+		}
+
+		$from = str_replace( '_', ' ', $wgRequest->getVal( 'from' ) );
+		if( $from != $current->getUserText() ) {
+			$wgOut->setPageTitle( wfMsg('rollbackfailed') );
+			$wgOut->addWikiText( wfMsg( 'alreadyrolled',
+				htmlspecialchars( $this->mTitle->getPrefixedText()),
+				htmlspecialchars( $from ),
+				htmlspecialchars( $current->getUserText() ) ) );
+			if( $current->getComment() != '') {
+				$wgOut->addHTML(
+					wfMsg( 'editcomment',
+					$wgUser->getSkin()->formatComment( $current->getComment() ) ) );
+			}
+			return;
+		}
+
+		# Get the last edit not by this guy
+		$user = intval( $current->getUser() );
+		$user_text = $dbw->addQuotes( $current->getUserText() );
+		$s = $dbw->selectRow( 'revision',
+			array( 'rev_id', 'rev_timestamp' ),
+			array(
+				'rev_page' => $current->getPage(),
+				"rev_user <> {$user} OR rev_user_text <> {$user_text}"
+			), __METHOD__,
+			array(
+				'USE INDEX' => 'page_timestamp',
+				'ORDER BY'  => 'rev_timestamp DESC' )
+			);
+		if( $s === false ) {
+			# Something wrong
+			$wgOut->setPageTitle(wfMsg('rollbackfailed'));
+			$wgOut->addHTML( wfMsg( 'cantrollback' ) );
+			return;
+		}
+
+		$set = array();
+		if ( $bot ) {
+			# Mark all reverted edits as bot
+			$set['rc_bot'] = 1;
+		}
+		if ( $wgUseRCPatrol ) {
+			# Mark all reverted edits as patrolled
+			$set['rc_patrolled'] = 1;
+		}
+
+		if ( $set ) {
+			$dbw->update( 'recentchanges', $set,
+				array( /* WHERE */
+					'rc_cur_id'    => $current->getPage(),
+					'rc_user_text' => $current->getUserText(),
+					"rc_timestamp > '{$s->rev_timestamp}'",
+				), __METHOD__
+			);
+		}
+
+		# Get the edit summary
+		$target = Revision::newFromId( $s->rev_id );
+		$newComment = wfMsgForContent( 'revertpage', $target->getUserText(), $from );
+		$newComment = $wgRequest->getText( 'summary', $newComment );
+
+		# Save it!
+		$wgOut->setPagetitle( wfMsg( 'actioncomplete' ) );
+		$wgOut->setRobotpolicy( 'noindex,nofollow' );
+		$wgOut->addHTML( '<h2>' . htmlspecialchars( $newComment ) . "</h2>\n<hr />\n" );
+
+		$this->updateArticle( $target->getText(), $newComment, 1, $this->mTitle->userIsWatching(), $bot );
+
+		$wgOut->returnToMain( false );
+	}
+
+
+	/**
+	 * Do standard deferred updates after page view
+	 * @private
+	 */
+	function viewUpdates() {
+		global $wgDeferredUpdateList;
+
+		if ( 0 != $this->getID() ) {
+			global $wgDisableCounters;
+			if( !$wgDisableCounters ) {
+				Article::incViewCount( $this->getID() );
+				$u = new SiteStatsUpdate( 1, 0, 0 );
+				array_push( $wgDeferredUpdateList, $u );
+			}
+		}
+
+		# Update newtalk / watchlist notification status
+		global $wgUser;
+		$wgUser->clearNotification( $this->mTitle );
+	}
+
+	/**
+	 * Do standard deferred updates after page edit.
+	 * Update links tables, site stats, search index and message cache.
+	 * Every 1000th edit, prune the recent changes table.
+	 *
+	 * @private
+	 * @param $text New text of the article
+	 * @param $summary Edit summary
+	 * @param $minoredit Minor edit
+	 * @param $timestamp_of_pagechange Timestamp associated with the page change
+	 * @param $newid rev_id value of the new revision
+	 * @param $changed Whether or not the content actually changed
+	 */
+	function editUpdates( $text, $summary, $minoredit, $timestamp_of_pagechange, $newid, $changed = true ) {
+		global $wgDeferredUpdateList, $wgMessageCache, $wgUser, $wgParser;
+
+		wfProfileIn( __METHOD__ );
+
+		# Parse the text
+		$options = new ParserOptions;
+		$options->setTidy(true);
+		$poutput = $wgParser->parse( $text, $this->mTitle, $options, true, true, $newid );
+
+		# Save it to the parser cache
+		$parserCache =& ParserCache::singleton();
+		$parserCache->save( $poutput, $this, $wgUser );
+
+		# Update the links tables
+		$u = new LinksUpdate( $this->mTitle, $poutput );
+		$u->doUpdate();
+
+		if ( wfRunHooks( 'ArticleEditUpdatesDeleteFromRecentchanges', array( &$this ) ) ) {
+			wfSeedRandom();
+			if ( 0 == mt_rand( 0, 999 ) ) {
+				# Periodically flush old entries from the recentchanges table.
+				global $wgRCMaxAge;
+
+				$dbw = wfGetDB( DB_MASTER );
+				$cutoff = $dbw->timestamp( time() - $wgRCMaxAge );
+				$recentchanges = $dbw->tableName( 'recentchanges' );
+				$sql = "DELETE FROM $recentchanges WHERE rc_timestamp < '{$cutoff}'";
+				$dbw->query( $sql );
+			}
+		}
+
+		$id = $this->getID();
+		$title = $this->mTitle->getPrefixedDBkey();
+		$shortTitle = $this->mTitle->getDBkey();
+
+		if ( 0 == $id ) {
+			wfProfileOut( __METHOD__ );
+			return;
+		}
+
+		$u = new SiteStatsUpdate( 0, 1, $this->mGoodAdjustment, $this->mTotalAdjustment );
+		array_push( $wgDeferredUpdateList, $u );
+		$u = new SearchUpdate( $id, $title, $text );
+		array_push( $wgDeferredUpdateList, $u );
+
+		# If this is another user's talk page, update newtalk
+		# Don't do this if $changed = false otherwise some idiot can null-edit a
+		# load of user talk pages and piss people off, nor if it's a minor edit
+		# by a properly-flagged bot.
+		if( $this->mTitle->getNamespace() == NS_USER_TALK && $shortTitle != $wgUser->getTitleKey() && $changed
+			&& !($minoredit && $wgUser->isAllowed('nominornewtalk') ) ) {
+			if (wfRunHooks('ArticleEditUpdateNewTalk', array(&$this)) ) {
+				$other = User::newFromName( $shortTitle );
+				if( is_null( $other ) && User::isIP( $shortTitle ) ) {
+					// An anonymous user
+					$other = new User();
+					$other->setName( $shortTitle );
+				}
+				if( $other ) {
+					$other->setNewtalk( true );
+				}
+			}
+		}
+
+		if ( $this->mTitle->getNamespace() == NS_MEDIAWIKI ) {
+			$wgMessageCache->replace( $shortTitle, $text );
+		}
+
+		wfProfileOut( __METHOD__ );
+	}
+
+	/**
+	 * Perform article updates on a special page creation.
+	 *
+	 * @param Revision $rev
+	 *
+	 * @todo This is a shitty interface function. Kill it and replace the
+	 * other shitty functions like editUpdates and such so it's not needed
+	 * anymore.
+	 */
+	function createUpdates( $rev ) {
+		$this->mGoodAdjustment = $this->isCountable( $rev->getText() );
+		$this->mTotalAdjustment = 1;
+		$this->editUpdates( $rev->getText(), $rev->getComment(),
+			$rev->isMinor(), wfTimestamp(), $rev->getId(), true );
+	}
+
+	/**
+	 * Generate the navigation links when browsing through an article revisions
+	 * It shows the information as:
+	 *   Revision as of \<date\>; view current revision
+	 *   \<- Previous version | Next Version -\>
+	 *
+	 * @private
+	 * @param string $oldid		Revision ID of this article revision
+	 */
+	function setOldSubtitle( $oldid=0 ) {
+		global $wgLang, $wgOut, $wgUser;
+
+		if ( !wfRunHooks( 'DisplayOldSubtitle', array(&$this, &$oldid) ) ) {
+				return;
+		}
+
+		$revision = Revision::newFromId( $oldid );
+
+		$current = ( $oldid == $this->mLatest );
+		$td = $wgLang->timeanddate( $this->mTimestamp, true );
+		$sk = $wgUser->getSkin();
+		$lnk = $current
+			? wfMsg( 'currentrevisionlink' )
+			: $lnk = $sk->makeKnownLinkObj( $this->mTitle, wfMsg( 'currentrevisionlink' ) );
+		$curdiff = $current
+			? wfMsg( 'diff' )
+			: $sk->makeKnownLinkObj( $this->mTitle, wfMsg( 'diff' ), 'diff=cur&oldid='.$oldid );
+		$prev = $this->mTitle->getPreviousRevisionID( $oldid ) ;
+		$prevlink = $prev
+			? $sk->makeKnownLinkObj( $this->mTitle, wfMsg( 'previousrevision' ), 'direction=prev&oldid='.$oldid )
+			: wfMsg( 'previousrevision' );
+		$prevdiff = $prev
+			? $sk->makeKnownLinkObj( $this->mTitle, wfMsg( 'diff' ), 'diff=prev&oldid='.$oldid )
+			: wfMsg( 'diff' );
+		$nextlink = $current
+			? wfMsg( 'nextrevision' )
+			: $sk->makeKnownLinkObj( $this->mTitle, wfMsg( 'nextrevision' ), 'direction=next&oldid='.$oldid );
+		$nextdiff = $current
+			? wfMsg( 'diff' )
+			: $sk->makeKnownLinkObj( $this->mTitle, wfMsg( 'diff' ), 'diff=next&oldid='.$oldid );
+
+		$userlinks = $sk->userLink( $revision->getUser(), $revision->getUserText() )
+						. $sk->userToolLinks( $revision->getUser(), $revision->getUserText() );
+
+		$r = "\n\t\t\t\t<div id=\"mw-revision-info\">" . wfMsg( 'revision-info', $td, $userlinks ) . "</div>\n" .
+		     "\n\t\t\t\t<div id=\"mw-revision-nav\">" . wfMsg( 'revision-nav', $prevdiff, $prevlink, $lnk, $curdiff, $nextlink, $nextdiff ) . "</div>\n\t\t\t";
+		$wgOut->setSubtitle( $r );
+	}
+
+	/**
+	 * This function is called right before saving the wikitext,
+	 * so we can do things like signatures and links-in-context.
+	 *
+	 * @param string $text
+	 */
+	function preSaveTransform( $text ) {
+		global $wgParser, $wgUser;
+		return $wgParser->preSaveTransform( $text, $this->mTitle, $wgUser, ParserOptions::newFromUser( $wgUser ) );
+	}
+
+	/* Caching functions */
+
+	/**
+	 * checkLastModified returns true if it has taken care of all
+	 * output to the client that is necessary for this request.
+	 * (that is, it has sent a cached version of the page)
+	 */
+	function tryFileCache() {
+		static $called = false;
+		if( $called ) {
+			wfDebug( "Article::tryFileCache(): called twice!?\n" );
+			return;
+		}
+		$called = true;
+		if($this->isFileCacheable()) {
+			$touched = $this->mTouched;
+			$cache = new HTMLFileCache( $this->mTitle );
+			if($cache->isFileCacheGood( $touched )) {
+				wfDebug( "Article::tryFileCache(): about to load file\n" );
+				$cache->loadFromFileCache();
+				return true;
+			} else {
+				wfDebug( "Article::tryFileCache(): starting buffer\n" );
+				ob_start( array(&$cache, 'saveToFileCache' ) );
+			}
+		} else {
+			wfDebug( "Article::tryFileCache(): not cacheable\n" );
+		}
+	}
+
+	/**
+	 * Check if the page can be cached
+	 * @return bool
+	 */
+	function isFileCacheable() {
+		global $wgUser, $wgUseFileCache, $wgShowIPinHeader, $wgRequest, $wgLang, $wgContLang;
+		$action    = $wgRequest->getVal( 'action'    );
+		$oldid     = $wgRequest->getVal( 'oldid'     );
+		$diff      = $wgRequest->getVal( 'diff'      );
+		$redirect  = $wgRequest->getVal( 'redirect'  );
+		$printable = $wgRequest->getVal( 'printable' );
+		$page      = $wgRequest->getVal( 'page' );
+
+		//check for non-standard user language; this covers uselang, 
+		//and extensions for auto-detecting user language.
+		$ulang     = $wgLang->getCode(); 
+		$clang     = $wgContLang->getCode();
+
+		$cacheable = $wgUseFileCache
+			&& (!$wgShowIPinHeader)
+			&& ($this->getID() != 0)
+			&& ($wgUser->isAnon())
+			&& (!$wgUser->getNewtalk())
+			&& ($this->mTitle->getNamespace() != NS_SPECIAL )
+			&& (empty( $action ) || $action == 'view')
+			&& (!isset($oldid))
+			&& (!isset($diff))
+			&& (!isset($redirect))
+			&& (!isset($printable))
+			&& !isset($page)
+			&& (!$this->mRedirectedFrom)
+			&& ($ulang === $clang);
+
+		if ( $cacheable ) {
+			//extension may have reason to disable file caching on some pages.
+			$cacheable = wfRunHooks( 'IsFileCacheable', array( $this ) );
+		}
+
+		return $cacheable;
+	}
+
+	/**
+	 * Loads page_touched and returns a value indicating if it should be used
+	 *
+	 */
+	function checkTouched() {
+		if( !$this->mDataLoaded ) {
+			$this->loadPageData();
+		}
+		return !$this->mIsRedirect;
+	}
+
+	/**
+	 * Get the page_touched field
+	 */
+	function getTouched() {
+		# Ensure that page data has been loaded
+		if( !$this->mDataLoaded ) {
+			$this->loadPageData();
+		}
+		return $this->mTouched;
+	}
+
+	/**
+	 * Get the page_latest field
+	 */
+	function getLatest() {
+		if ( !$this->mDataLoaded ) {
+			$this->loadPageData();
+		}
+		return $this->mLatest;
+	}
+
+	/**
+	 * Edit an article without doing all that other stuff
+	 * The article must already exist; link tables etc
+	 * are not updated, caches are not flushed.
+	 *
+	 * @param string $text text submitted
+	 * @param string $comment comment submitted
+	 * @param bool $minor whereas it's a minor modification
+	 */
+	function quickEdit( $text, $comment = '', $minor = 0 ) {
+		wfProfileIn( __METHOD__ );
+
+		$dbw = wfGetDB( DB_MASTER );
+		$dbw->begin();
+		$revision = new Revision( array(
+			'page'       => $this->getId(),
+			'text'       => $text,
+			'comment'    => $comment,
+			'minor_edit' => $minor ? 1 : 0,
+			) );
+		$revision->insertOn( $dbw );
+		$this->updateRevisionOn( $dbw, $revision );
+		$dbw->commit();
+
+		wfProfileOut( __METHOD__ );
+	}
+
+	/**
+	 * Used to increment the view counter
+	 *
+	 * @static
+	 * @param integer $id article id
+	 */
+	function incViewCount( $id ) {
+		$id = intval( $id );
+		global $wgHitcounterUpdateFreq, $wgDBtype;
+
+		$dbw = wfGetDB( DB_MASTER );
+		$pageTable = $dbw->tableName( 'page' );
+		$hitcounterTable = $dbw->tableName( 'hitcounter' );
+		$acchitsTable = $dbw->tableName( 'acchits' );
+
+		if( $wgHitcounterUpdateFreq <= 1 ) {
+			$dbw->query( "UPDATE $pageTable SET page_counter = page_counter + 1 WHERE page_id = $id" );
+			return;
+		}
+
+		# Not important enough to warrant an error page in case of failure
+		$oldignore = $dbw->ignoreErrors( true );
+
+		$dbw->query( "INSERT INTO $hitcounterTable (hc_id) VALUES ({$id})" );
+
+		$checkfreq = intval( $wgHitcounterUpdateFreq/25 + 1 );
+		if( (rand() % $checkfreq != 0) or ($dbw->lastErrno() != 0) ){
+			# Most of the time (or on SQL errors), skip row count check
+			$dbw->ignoreErrors( $oldignore );
+			return;
+		}
+
+		$res = $dbw->query("SELECT COUNT(*) as n FROM $hitcounterTable");
+		$row = $dbw->fetchObject( $res );
+		$rown = intval( $row->n );
+		if( $rown >= $wgHitcounterUpdateFreq ){
+			wfProfileIn( 'Article::incViewCount-collect' );
+			$old_user_abort = ignore_user_abort( true );
+
+			if ($wgDBtype == 'mysql')
+				$dbw->query("LOCK TABLES $hitcounterTable WRITE");
+			$tabletype = $wgDBtype == 'mysql' ? "ENGINE=HEAP " : '';
+			$dbw->query("CREATE TEMPORARY TABLE $acchitsTable $tabletype AS ".
+				"SELECT hc_id,COUNT(*) AS hc_n FROM $hitcounterTable ".
+				'GROUP BY hc_id');
+			$dbw->query("DELETE FROM $hitcounterTable");
+			if ($wgDBtype == 'mysql') {
+				$dbw->query('UNLOCK TABLES');
+				$dbw->query("UPDATE $pageTable,$acchitsTable SET page_counter=page_counter + hc_n ".
+					'WHERE page_id = hc_id');
+			}
+			else {
+				$dbw->query("UPDATE $pageTable SET page_counter=page_counter + hc_n ".
+					"FROM $acchitsTable WHERE page_id = hc_id");
+			}
+			$dbw->query("DROP TABLE $acchitsTable");
+
+			ignore_user_abort( $old_user_abort );
+			wfProfileOut( 'Article::incViewCount-collect' );
+		}
+		$dbw->ignoreErrors( $oldignore );
+	}
+
+	/**#@+
+	 * The onArticle*() functions are supposed to be a kind of hooks
+	 * which should be called whenever any of the specified actions
+	 * are done.
+	 *
+	 * This is a good place to put code to clear caches, for instance.
+	 *
+	 * This is called on page move and undelete, as well as edit
+	 * @static
+	 * @param $title_obj a title object
+	 */
+
+	static function onArticleCreate($title) {
+		# The talk page isn't in the regular link tables, so we need to update manually:
+		if ( $title->isTalkPage() ) {
+			$other = $title->getSubjectPage();
+		} else {
+			$other = $title->getTalkPage();
+		}
+		$other->invalidateCache();
+		$other->purgeSquid();
+
+		$title->touchLinks();
+		$title->purgeSquid();
+	}
+
+	static function onArticleDelete( $title ) {
+		global $wgUseFileCache, $wgMessageCache;
+
+		$title->touchLinks();
+		$title->purgeSquid();
+
+		# File cache
+		if ( $wgUseFileCache ) {
+			$cm = new HTMLFileCache( $title );
+			@unlink( $cm->fileCacheName() );
+		}
+
+		if( $title->getNamespace() == NS_MEDIAWIKI) {
+			$wgMessageCache->replace( $title->getDBkey(), false );
+		}
+	}
+
+	/**
+	 * Purge caches on page update etc
+	 */
+	static function onArticleEdit( $title ) {
+		global $wgDeferredUpdateList, $wgUseFileCache;
+
+		// Invalidate caches of articles which include this page
+		$update = new HTMLCacheUpdate( $title, 'templatelinks' );
+		$wgDeferredUpdateList[] = $update;
+
+		# Purge squid for this page only
+		$title->purgeSquid();
+
+		# Clear file cache
+		if ( $wgUseFileCache ) {
+			$cm = new HTMLFileCache( $title );
+			@unlink( $cm->fileCacheName() );
+		}
+	}
+
+	/**#@-*/
+
+	/**
+	 * Info about this page
+	 * Called for ?action=info when $wgAllowPageInfo is on.
+	 *
+	 * @public
+	 */
+	function info() {
+		global $wgLang, $wgOut, $wgAllowPageInfo, $wgUser;
+
+		if ( !$wgAllowPageInfo ) {
+			$wgOut->showErrorPage( 'nosuchaction', 'nosuchactiontext' );
+			return;
+		}
+
+		$page = $this->mTitle->getSubjectPage();
+
+		$wgOut->setPagetitle( $page->getPrefixedText() );
+		$wgOut->setSubtitle( wfMsg( 'infosubtitle' ));
+
+		# first, see if the page exists at all.
+		$exists = $page->getArticleId() != 0;
+		if( !$exists ) {
+			if ( $this->mTitle->getNamespace() == NS_MEDIAWIKI ) {
+				$wgOut->addHTML(wfMsgWeirdKey ( $this->mTitle->getText() ) );
+			} else {
+				$wgOut->addHTML(wfMsg( $wgUser->isLoggedIn() ? 'noarticletext' : 'noarticletextanon' ) );
+			}
+		} else {
+			$dbr = wfGetDB( DB_SLAVE );
+			$wl_clause = array(
+				'wl_title'     => $page->getDBkey(),
+				'wl_namespace' => $page->getNamespace() );
+			$numwatchers = $dbr->selectField(
+				'watchlist',
+				'COUNT(*)',
+				$wl_clause,
+				__METHOD__,
+				$this->getSelectOptions() );
+
+			$pageInfo = $this->pageCountInfo( $page );
+			$talkInfo = $this->pageCountInfo( $page->getTalkPage() );
+
+			$wgOut->addHTML( "<ul><li>" . wfMsg("numwatchers", $wgLang->formatNum( $numwatchers ) ) . '</li>' );
+			$wgOut->addHTML( "<li>" . wfMsg('numedits', $wgLang->formatNum( $pageInfo['edits'] ) ) . '</li>');
+			if( $talkInfo ) {
+				$wgOut->addHTML( '<li>' . wfMsg("numtalkedits", $wgLang->formatNum( $talkInfo['edits'] ) ) . '</li>');
+			}
+			$wgOut->addHTML( '<li>' . wfMsg("numauthors", $wgLang->formatNum( $pageInfo['authors'] ) ) . '</li>' );
+			if( $talkInfo ) {
+				$wgOut->addHTML( '<li>' . wfMsg('numtalkauthors', $wgLang->formatNum( $talkInfo['authors'] ) ) . '</li>' );
+			}
+			$wgOut->addHTML( '</ul>' );
+
+		}
+	}
+
+	/**
+	 * Return the total number of edits and number of unique editors
+	 * on a given page. If page does not exist, returns false.
+	 *
+	 * @param Title $title
+	 * @return array
+	 * @private
+	 */
+	function pageCountInfo( $title ) {
+		$id = $title->getArticleId();
+		if( $id == 0 ) {
+			return false;
+		}
+
+		$dbr = wfGetDB( DB_SLAVE );
+
+		$rev_clause = array( 'rev_page' => $id );
+
+		$edits = $dbr->selectField(
+			'revision',
+			'COUNT(rev_page)',
+			$rev_clause,
+			__METHOD__,
+			$this->getSelectOptions() );
+
+		$authors = $dbr->selectField(
+			'revision',
+			'COUNT(DISTINCT rev_user_text)',
+			$rev_clause,
+			__METHOD__,
+			$this->getSelectOptions() );
+
+		return array( 'edits' => $edits, 'authors' => $authors );
+	}
+
+	/**
+	 * Return a list of templates used by this article.
+	 * Uses the templatelinks table
+	 *
+	 * @return array Array of Title objects
+	 */
+	function getUsedTemplates() {
+		$result = array();
+		$id = $this->mTitle->getArticleID();
+		if( $id == 0 ) {
+			return array();
+		}
+
+		$dbr = wfGetDB( DB_SLAVE );
+		$res = $dbr->select( array( 'templatelinks' ),
+			array( 'tl_namespace', 'tl_title' ),
+			array( 'tl_from' => $id ),
+			'Article:getUsedTemplates' );
+		if ( false !== $res ) {
+			if ( $dbr->numRows( $res ) ) {
+				while ( $row = $dbr->fetchObject( $res ) ) {
+					$result[] = Title::makeTitle( $row->tl_namespace, $row->tl_title );
+				}
+			}
+		}
+		$dbr->freeResult( $res );
+		return $result;
+	}
+
+	/**
+	 * Return an auto-generated summary if the text provided is a redirect.
+	 *
+	 * @param  string $text The wikitext to check
+	 * @return string '' or an appropriate summary
+	 */
+	public static function getRedirectAutosummary( $text ) {
+		$rt = Title::newFromRedirect( $text );
+		if( is_object( $rt ) )
+			return wfMsgForContent( 'autoredircomment', $rt->getFullText() );
+		else
+			return '';
+	}
+
+	/**
+	 * Return an auto-generated summary if the new text is much shorter than
+	 * the old text.
+	 *
+	 * @param  string $oldtext The previous text of the page
+	 * @param  string $text    The submitted text of the page
+	 * @return string An appropriate autosummary, or an empty string.
+	 */
+	public static function getBlankingAutosummary( $oldtext, $text ) {
+		if ($oldtext!='' && $text=='') {
+			return wfMsgForContent('autosumm-blank');
+		} elseif (strlen($oldtext) > 10 * strlen($text) && strlen($text) < 500) {
+			#Removing more than 90% of the article
+			global $wgContLang;
+			$truncatedtext = $wgContLang->truncate($text, max(0, 200 - strlen(wfMsgForContent('autosumm-replace'))), '...');
+			return wfMsgForContent('autosumm-replace', $truncatedtext);
+		} else {
+			return '';
+		}
+	}
+
+	/**
+	* Return an applicable autosummary if one exists for the given edit.
+	* @param string $oldtext The previous text of the page.
+	* @param string $newtext The submitted text of the page.
+	* @param bitmask $flags A bitmask of flags submitted for the edit.
+	* @return string An appropriate autosummary, or an empty string.
+	*/
+	public static function getAutosummary( $oldtext, $newtext, $flags ) {
+
+		# This code is UGLY UGLY UGLY.
+		# Somebody PLEASE come up with a more elegant way to do it.
+
+		#Redirect autosummaries
+		$summary = self::getRedirectAutosummary( $newtext );
+
+		if ($summary)
+			return $summary;
+
+		#Blanking autosummaries
+		if (!($flags & EDIT_NEW))
+			$summary = self::getBlankingAutosummary( $oldtext, $newtext );
+
+		if ($summary)
+			return $summary;
+
+		#New page autosummaries
+		if ($flags & EDIT_NEW && strlen($newtext)) {
+			#If they're making a new article, give its text, truncated, in the summary.
+			global $wgContLang;
+			$truncatedtext = $wgContLang->truncate(
+				str_replace("\n", ' ', $newtext),
+				max( 0, 200 - strlen( wfMsgForContent( 'autosumm-new') ) ),
+				'...' );
+			$summary = wfMsgForContent( 'autosumm-new', $truncatedtext );
+		}
+
+		if ($summary)
+			return $summary;
+
+		return $summary;
+	}
+
+	/**
+	 * Add the primary page-view wikitext to the output buffer
+	 * Saves the text into the parser cache if possible.
+	 * Updates templatelinks if it is out of date.
+	 *
+	 * @param string  $text
+	 * @param bool    $cache
+	 */
+	public function outputWikiText( $text, $cache = true ) {
+		global $wgParser, $wgUser, $wgOut;
+
+		$popts = $wgOut->parserOptions();
+		$popts->setTidy(true);
+		$parserOutput = $wgParser->parse( $text, $this->mTitle,
+			$popts, true, true, $this->getRevIdFetched() );
+		$popts->setTidy(false);
+		if ( $cache && $this && $parserOutput->getCacheTime() != -1 ) {
+			$parserCache =& ParserCache::singleton();
+			$parserCache->save( $parserOutput, $this, $wgUser );
+		}
+
+		if ( !wfReadOnly() && $this->mTitle->areRestrictionsCascading() ) {
+			// templatelinks table may have become out of sync,
+			// especially if using variable-based transclusions.
+			// For paranoia, check if things have changed and if
+			// so apply updates to the database. This will ensure
+			// that cascaded protections apply as soon as the changes
+			// are visible.
+
+			# Get templates from templatelinks
+			$id = $this->mTitle->getArticleID();
+
+			$tlTemplates = array();
+
+			$dbr = wfGetDB( DB_SLAVE );
+			$res = $dbr->select( array( 'templatelinks' ),
+				array( 'tl_namespace', 'tl_title' ),
+				array( 'tl_from' => $id ),
+				'Article:getUsedTemplates' );
+
+			global $wgContLang;
+
+			if ( false !== $res ) {
+				if ( $dbr->numRows( $res ) ) {
+					while ( $row = $dbr->fetchObject( $res ) ) {
+						$tlTemplates[] = $wgContLang->getNsText( $row->tl_namespace ) . ':' . $row->tl_title ;
+					}
+				}
+			}
+
+			# Get templates from parser output.
+			$poTemplates_allns = $parserOutput->getTemplates();
+
+			$poTemplates = array ();
+			foreach ( $poTemplates_allns as $ns_templates ) {
+				$poTemplates = array_merge( $poTemplates, $ns_templates );
+			}
+
+			# Get the diff
+			$templates_diff = array_diff( $poTemplates, $tlTemplates );
+
+			if ( count( $templates_diff ) > 0 ) {
+				# Whee, link updates time.
+				$u = new LinksUpdate( $this->mTitle, $parserOutput );
+
+				$dbw = wfGetDb( DB_MASTER );
+				$dbw->begin();
+
+				$u->doUpdate();
+
+				$dbw->commit();
+			}
+		}
+
+		$wgOut->addParserOutput( $parserOutput );
+	}
+
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/AuthPlugin.php
===================================================================
--- /MediaWiki/branches/1.11/includes/AuthPlugin.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/AuthPlugin.php	(revision 1280)
@@ -0,0 +1,237 @@
+<?php
+/**
+ */
+# Copyright (C) 2004 Brion Vibber <brion@pobox.com>
+# http://www.mediawiki.org/
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+# http://www.gnu.org/copyleft/gpl.html
+
+/**
+ * Authentication plugin interface. Instantiate a subclass of AuthPlugin
+ * and set $wgAuth to it to authenticate against some external tool.
+ *
+ * The default behavior is not to do anything, and use the local user
+ * database for all authentication. A subclass can require that all
+ * accounts authenticate externally, or use it only as a fallback; also
+ * you can transparently create internal wiki accounts the first time
+ * someone logs in who can be authenticated externally.
+ *
+ * This interface is new, and might change a bit before 1.4.0 final is
+ * done...
+ *
+ */
+class AuthPlugin {
+	/**
+	 * Check whether there exists a user account with the given name.
+	 * The name will be normalized to MediaWiki's requirements, so
+	 * you might need to munge it (for instance, for lowercase initial
+	 * letters).
+	 *
+	 * @param $username String: username.
+	 * @return bool
+	 * @public
+	 */
+	function userExists( $username ) {
+		# Override this!
+		return false;
+	}
+
+	/**
+	 * Check if a username+password pair is a valid login.
+	 * The name will be normalized to MediaWiki's requirements, so
+	 * you might need to munge it (for instance, for lowercase initial
+	 * letters).
+	 *
+	 * @param $username String: username.
+	 * @param $password String: user password.
+	 * @return bool
+	 * @public
+	 */
+	function authenticate( $username, $password ) {
+		# Override this!
+		return false;
+	}
+
+	/**
+	 * Modify options in the login template.
+	 *
+	 * @param $template UserLoginTemplate object.
+	 * @public
+	 */
+	function modifyUITemplate( &$template ) {
+		# Override this!
+		$template->set( 'usedomain', false );
+	}
+
+	/**
+	 * Set the domain this plugin is supposed to use when authenticating.
+	 *
+	 * @param $domain String: authentication domain.
+	 * @public
+	 */
+	function setDomain( $domain ) {
+		$this->domain = $domain;
+	}
+
+	/**
+	 * Check to see if the specific domain is a valid domain.
+	 *
+	 * @param $domain String: authentication domain.
+	 * @return bool
+	 * @public
+	 */
+	function validDomain( $domain ) {
+		# Override this!
+		return true;
+	}
+
+	/**
+	 * When a user logs in, optionally fill in preferences and such.
+	 * For instance, you might pull the email address or real name from the
+	 * external user database.
+	 *
+	 * The User object is passed by reference so it can be modified; don't
+	 * forget the & on your function declaration.
+	 *
+	 * @param User $user
+	 * @public
+	 */
+	function updateUser( &$user ) {
+		# Override this and do something
+		return true;
+	}
+
+
+	/**
+	 * Return true if the wiki should create a new local account automatically
+	 * when asked to login a user who doesn't exist locally but does in the
+	 * external auth database.
+	 *
+	 * If you don't automatically create accounts, you must still create
+	 * accounts in some way. It's not possible to authenticate without
+	 * a local account.
+	 *
+	 * This is just a question, and shouldn't perform any actions.
+	 *
+	 * @return bool
+	 * @public
+	 */
+	function autoCreate() {
+		return false;
+	}
+
+	/**
+	 * Can users change their passwords?
+	 *
+	 * @return bool
+	 */
+	function allowPasswordChange() {
+		return true;
+	}
+
+	/**
+	 * Set the given password in the authentication database.
+	 * As a special case, the password may be set to null to request
+	 * locking the password to an unusable value, with the expectation
+	 * that it will be set later through a mail reset or other method.
+	 *
+	 * Return true if successful.
+	 *
+	 * @param $user User object.
+	 * @param $password String: password.
+	 * @return bool
+	 * @public
+	 */
+	function setPassword( $user, $password ) {
+		return true;
+	}
+
+	/**
+	 * Update user information in the external authentication database.
+	 * Return true if successful.
+	 *
+	 * @param $user User object.
+	 * @return bool
+	 * @public
+	 */
+	function updateExternalDB( $user ) {
+		return true;
+	}
+
+	/**
+	 * Check to see if external accounts can be created.
+	 * Return true if external accounts can be created.
+	 * @return bool
+	 * @public
+	 */
+	function canCreateAccounts() {
+		return false;
+	}
+
+	/**
+	 * Add a user to the external authentication database.
+	 * Return true if successful.
+	 *
+	 * @param User $user - only the name should be assumed valid at this point
+	 * @param string $password
+	 * @param string $email
+	 * @param string $realname
+	 * @return bool
+	 * @public
+	 */
+	function addUser( $user, $password, $email='', $realname='' ) {
+		return true;
+	}
+
+
+	/**
+	 * Return true to prevent logins that don't authenticate here from being
+	 * checked against the local database's password fields.
+	 *
+	 * This is just a question, and shouldn't perform any actions.
+	 *
+	 * @return bool
+	 * @public
+	 */
+	function strict() {
+		return false;
+	}
+
+	/**
+	 * When creating a user account, optionally fill in preferences and such.
+	 * For instance, you might pull the email address or real name from the
+	 * external user database.
+	 *
+	 * The User object is passed by reference so it can be modified; don't
+	 * forget the & on your function declaration.
+	 *
+	 * @param $user User object.
+	 * @public
+	 */
+	function initUser( &$user ) {
+		# Override this to do something.
+	}
+
+	/**
+	 * If you want to munge the case of an account name before the final
+	 * check, now is your chance.
+	 */
+	function getCanonicalName( $username ) {
+		return $username;
+	}
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/AutoLoader.php
===================================================================
--- /MediaWiki/branches/1.11/includes/AutoLoader.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/AutoLoader.php	(revision 1280)
@@ -0,0 +1,350 @@
+<?php
+
+/* This defines autoloading handler for whole MediaWiki framework */
+
+ini_set('unserialize_callback_func', '__autoload' );
+
+function __autoload($className) {
+	global $wgAutoloadClasses;
+
+	static $localClasses = array(
+		# Includes
+		'AjaxDispatcher' => 'includes/AjaxDispatcher.php',
+		'AjaxCachePolicy' => 'includes/AjaxFunctions.php',
+		'AjaxResponse' => 'includes/AjaxResponse.php',
+		'AlphabeticPager' => 'includes/Pager.php',
+		'Article' => 'includes/Article.php',
+		'AuthPlugin' => 'includes/AuthPlugin.php',
+		'BagOStuff' => 'includes/BagOStuff.php',
+		'HashBagOStuff' => 'includes/BagOStuff.php',
+		'SqlBagOStuff' => 'includes/BagOStuff.php',
+		'MediaWikiBagOStuff' => 'includes/BagOStuff.php',
+		'TurckBagOStuff' => 'includes/BagOStuff.php',
+		'APCBagOStuff' => 'includes/BagOStuff.php',
+		'eAccelBagOStuff' => 'includes/BagOStuff.php',
+		'DBABagOStuff' => 'includes/BagOStuff.php',
+		'Block' => 'includes/Block.php',
+		'HTMLFileCache' => 'includes/HTMLFileCache.php',
+		'DependencyWrapper' => 'includes/CacheDependency.php',
+		'FileDependency' => 'includes/CacheDependency.php',
+		'TitleDependency' => 'includes/CacheDependency.php',
+		'TitleListDependency' => 'includes/CacheDependency.php',
+		'CategoryPage' => 'includes/CategoryPage.php',
+		'CategoryViewer' => 'includes/CategoryPage.php',
+		'Categoryfinder' => 'includes/Categoryfinder.php',
+		'RCCacheEntry' => 'includes/ChangesList.php',
+		'ChangesList' => 'includes/ChangesList.php',
+		'OldChangesList' => 'includes/ChangesList.php',
+		'EnhancedChangesList' => 'includes/ChangesList.php',
+		'CoreParserFunctions' => 'includes/CoreParserFunctions.php',
+		'DBObject' => 'includes/Database.php',
+		'Database' => 'includes/Database.php',
+		'DatabaseMysql' => 'includes/Database.php',
+		'ResultWrapper' => 'includes/Database.php',
+		'DatabasePostgres' => 'includes/DatabasePostgres.php',
+		'DatabaseOracle' => 'includes/DatabaseOracle.php',
+		'DateFormatter' => 'includes/DateFormatter.php',
+		'DifferenceEngine' => 'includes/DifferenceEngine.php',
+		'_DiffOp' => 'includes/DifferenceEngine.php',
+		'_DiffOp_Copy' => 'includes/DifferenceEngine.php',
+		'_DiffOp_Delete' => 'includes/DifferenceEngine.php',
+		'_DiffOp_Add' => 'includes/DifferenceEngine.php',
+		'_DiffOp_Change' => 'includes/DifferenceEngine.php',
+		'_DiffEngine' => 'includes/DifferenceEngine.php',
+		'Diff' => 'includes/DifferenceEngine.php',
+		'MappedDiff' => 'includes/DifferenceEngine.php',
+		'DiffFormatter' => 'includes/DifferenceEngine.php',
+		'DjVuImage' => 'includes/DjVuImage.php',
+		'_HWLDF_WordAccumulator' => 'includes/DifferenceEngine.php',
+		'WordLevelDiff' => 'includes/DifferenceEngine.php',
+		'TableDiffFormatter' => 'includes/DifferenceEngine.php',
+		'EditPage' => 'includes/EditPage.php',
+		'MWException' => 'includes/Exception.php',
+		'Exif' => 'includes/Exif.php',
+		'FormatExif' => 'includes/Exif.php',
+		'WikiExporter' => 'includes/Export.php',
+		'XmlDumpWriter' => 'includes/Export.php',
+		'DumpOutput' => 'includes/Export.php',
+		'DumpFileOutput' => 'includes/Export.php',
+		'DumpPipeOutput' => 'includes/Export.php',
+		'DumpGZipOutput' => 'includes/Export.php',
+		'DumpBZip2Output' => 'includes/Export.php',
+		'Dump7ZipOutput' => 'includes/Export.php',
+		'DumpFilter' => 'includes/Export.php',
+		'DumpNotalkFilter' => 'includes/Export.php',
+		'DumpNamespaceFilter' => 'includes/Export.php',
+		'DumpLatestFilter' => 'includes/Export.php',
+		'DumpMultiWriter' => 'includes/Export.php',
+		'ExternalEdit' => 'includes/ExternalEdit.php',
+		'ExternalStore' => 'includes/ExternalStore.php',
+		'ExternalStoreDB' => 'includes/ExternalStoreDB.php',
+		'ExternalStoreHttp' => 'includes/ExternalStoreHttp.php',
+		'FakeTitle' => 'includes/FakeTitle.php',
+		'FeedItem' => 'includes/Feed.php',
+		'ChannelFeed' => 'includes/Feed.php',
+		'RSSFeed' => 'includes/Feed.php',
+		'AtomFeed' => 'includes/Feed.php',
+		'FileStore' => 'includes/FileStore.php',
+		'FSException' => 'includes/FileStore.php',
+		'FSTransaction' => 'includes/FileStore.php',
+		'HTMLForm' => 'includes/HTMLForm.php',
+		'HistoryBlob' => 'includes/HistoryBlob.php',
+		'ConcatenatedGzipHistoryBlob' => 'includes/HistoryBlob.php',
+		'HistoryBlobStub' => 'includes/HistoryBlob.php',
+		'HistoryBlobCurStub' => 'includes/HistoryBlob.php',
+		'HTMLCacheUpdate' => 'includes/HTMLCacheUpdate.php',
+		'HTMLCacheUpdateJob' => 'includes/HTMLCacheUpdate.php',
+		'Http' => 'includes/HttpFunctions.php',
+		'Image' => 'includes/Image.php',
+		'ArchivedFile' => 'includes/Image.php',
+		'IP' => 'includes/IP.php',
+		'ThumbnailImage' => 'includes/Image.php',
+		'ImageGallery' => 'includes/ImageGallery.php',
+		'ImagePage' => 'includes/ImagePage.php',
+		'ImageHistoryList' => 'includes/ImagePage.php',
+		'ImageRemote' => 'includes/ImageRemote.php',
+		'Job' => 'includes/JobQueue.php',
+		'Licenses' => 'includes/Licenses.php',
+		'License' => 'includes/Licenses.php',
+		'LinkBatch' => 'includes/LinkBatch.php',
+		'LinkCache' => 'includes/LinkCache.php',
+		'LinkFilter' => 'includes/LinkFilter.php',
+		'Linker' => 'includes/Linker.php',
+		'LinksUpdate' => 'includes/LinksUpdate.php',
+		'LoadBalancer' => 'includes/LoadBalancer.php',
+		'LogPage' => 'includes/LogPage.php',
+		'MacBinary' => 'includes/MacBinary.php',
+		'MagicWord' => 'includes/MagicWord.php',
+		'MathRenderer' => 'includes/Math.php',
+		'MediaTransformOutput' => 'includes/MediaTransformOutput.php',
+		'ThumbnailImage' => 'includes/MediaTransformOutput.php',
+		'MediaTransformError' => 'includes/MediaTransformOutput.php',
+		'TransformParameterError' => 'includes/MediaTransformOutput.php',
+		'MessageCache' => 'includes/MessageCache.php',
+		'MimeMagic' => 'includes/MimeMagic.php',
+		'Namespace' => 'includes/Namespace.php',
+		'FakeMemCachedClient' => 'includes/ObjectCache.php',
+		'OutputPage' => 'includes/OutputPage.php',
+		'PageHistory' => 'includes/PageHistory.php',
+		'IndexPager' => 'includes/Pager.php',
+		'ReverseChronologicalPager' => 'includes/Pager.php',
+		'TablePager' => 'includes/Pager.php',
+		'Parser' => 'includes/Parser.php',
+		'ParserOutput' => 'includes/ParserOutput.php',
+		'ParserOptions' => 'includes/ParserOptions.php',
+		'ParserCache' => 'includes/ParserCache.php',
+		'PatrolLog' => 'includes/PatrolLog.php',
+		'ProfilerSimple' => 'includes/ProfilerSimple.php',
+		'ProfilerSimpleUDP' => 'includes/ProfilerSimpleUDP.php',
+		'Profiler' => 'includes/Profiler.php',
+		'ProxyTools' => 'includes/ProxyTools.php',
+		'ProtectionForm' => 'includes/ProtectionForm.php',
+		'QueryPage' => 'includes/QueryPage.php',
+		'PageQueryPage' => 'includes/PageQueryPage.php',
+		'ImageQueryPage' => 'includes/ImageQueryPage.php',
+		'RawPage' => 'includes/RawPage.php',
+		'RecentChange' => 'includes/RecentChange.php',
+		'Revision' => 'includes/Revision.php',
+		'Sanitizer' => 'includes/Sanitizer.php',
+		'SearchEngine' => 'includes/SearchEngine.php',
+		'SearchResultSet' => 'includes/SearchEngine.php',
+		'SearchResult' => 'includes/SearchEngine.php',
+		'SearchEngineDummy' => 'includes/SearchEngine.php',
+		'SearchMySQL' => 'includes/SearchMySQL.php',
+		'MySQLSearchResultSet' => 'includes/SearchMySQL.php',
+		'SearchMySQL4' => 'includes/SearchMySQL4.php',
+		'SearchPostgres' => 'includes/SearchPostgres.php',
+		'SearchUpdate' => 'includes/SearchUpdate.php',
+		'SearchUpdateMyISAM' => 'includes/SearchUpdate.php',
+		'SearchOracle' => 'includes/SearchOracle.php',
+		'SiteConfiguration' => 'includes/SiteConfiguration.php',
+		'SiteStats' => 'includes/SiteStats.php',
+		'SiteStatsUpdate' => 'includes/SiteStats.php',
+		'Skin' => 'includes/Skin.php',
+		'MediaWiki_I18N' => 'includes/SkinTemplate.php',
+		'SkinTemplate' => 'includes/SkinTemplate.php',
+		'QuickTemplate' => 'includes/SkinTemplate.php',
+		'SpecialAllpages' => 'includes/SpecialAllpages.php',
+		'AncientPagesPage' => 'includes/SpecialAncientpages.php',
+		'IPBlockForm' => 'includes/SpecialBlockip.php',
+		'SpecialBookSources' => 'includes/SpecialBooksources.php',
+		'BrokenRedirectsPage' => 'includes/SpecialBrokenRedirects.php',
+		'EmailConfirmation' => 'includes/SpecialConfirmemail.php',
+		'ContributionsPage' => 'includes/SpecialContributions.php',
+		'DeadendPagesPage' => 'includes/SpecialDeadendpages.php',
+		'DisambiguationsPage' => 'includes/SpecialDisambiguations.php',
+		'DoubleRedirectsPage' => 'includes/SpecialDoubleRedirects.php',
+		'EmailUserForm' => 'includes/SpecialEmailuser.php',
+		'WikiRevision' => 'includes/SpecialImport.php',
+		'WikiImporter' => 'includes/SpecialImport.php',
+		'ImportStringSource' => 'includes/SpecialImport.php',
+		'ImportStreamSource' => 'includes/SpecialImport.php',
+		'IPUnblockForm' => 'includes/SpecialIpblocklist.php',
+		'ListredirectsPage' => 'includes/SpecialListredirects.php',
+		'DBLockForm' => 'includes/SpecialLockdb.php',
+		'LogReader' => 'includes/SpecialLog.php',
+		'LogViewer' => 'includes/SpecialLog.php',
+		'LonelyPagesPage' => 'includes/SpecialLonelypages.php',
+		'LongPagesPage' => 'includes/SpecialLongpages.php',
+		'MIMEsearchPage' => 'includes/SpecialMIMEsearch.php',
+		'MostcategoriesPage' => 'includes/SpecialMostcategories.php',
+		'MostimagesPage' => 'includes/SpecialMostimages.php',
+		'MostlinkedPage' => 'includes/SpecialMostlinked.php',
+		'MostlinkedCategoriesPage' => 'includes/SpecialMostlinkedcategories.php',
+		'MostrevisionsPage' => 'includes/SpecialMostrevisions.php',
+		'FewestrevisionsPage' => 'includes/SpecialFewestrevisions.php',
+		'MovePageForm' => 'includes/SpecialMovepage.php',
+		'NewbieContributionsPage' => 'includes/SpecialNewbieContributions.php',
+		'NewPagesPage' => 'includes/SpecialNewpages.php',
+		'SpecialPage' => 'includes/SpecialPage.php',
+		'UnlistedSpecialPage' => 'includes/SpecialPage.php',
+		'IncludableSpecialPage' => 'includes/SpecialPage.php',
+		'PopularPagesPage' => 'includes/SpecialPopularpages.php',
+		'PreferencesForm' => 'includes/SpecialPreferences.php',
+		'SpecialPrefixindex' => 'includes/SpecialPrefixindex.php',
+		'PasswordResetForm' => 'includes/SpecialResetpass.php',
+		'RevisionDeleteForm' => 'includes/SpecialRevisiondelete.php',
+		'RevisionDeleter' => 'includes/SpecialRevisiondelete.php',
+		'SpecialSearch' => 'includes/SpecialSearch.php',
+		'ShortPagesPage' => 'includes/SpecialShortpages.php',
+		'UncategorizedCategoriesPage' => 'includes/SpecialUncategorizedcategories.php',
+		'UncategorizedPagesPage' => 'includes/SpecialUncategorizedpages.php',
+		'PageArchive' => 'includes/SpecialUndelete.php',
+		'UndeleteForm' => 'includes/SpecialUndelete.php',
+		'DBUnlockForm' => 'includes/SpecialUnlockdb.php',
+		'UnusedCategoriesPage' => 'includes/SpecialUnusedcategories.php',
+		'UnusedimagesPage' => 'includes/SpecialUnusedimages.php',
+		'UnusedtemplatesPage' => 'includes/SpecialUnusedtemplates.php',
+		'UnwatchedpagesPage' => 'includes/SpecialUnwatchedpages.php',
+		'UploadForm' => 'includes/SpecialUpload.php',
+		'UploadFormMogile' => 'includes/SpecialUploadMogile.php',
+		'LoginForm' => 'includes/SpecialUserlogin.php',
+		'UserrightsForm' => 'includes/SpecialUserrights.php',
+		'SpecialVersion' => 'includes/SpecialVersion.php',
+		'WantedCategoriesPage' => 'includes/SpecialWantedcategories.php',
+		'WantedPagesPage' => 'includes/SpecialWantedpages.php',
+		'WhatLinksHerePage' => 'includes/SpecialWhatlinkshere.php',
+		'WithoutInterwikiPage' => 'includes/SpecialWithoutinterwiki.php',
+		'SquidUpdate' => 'includes/SquidUpdate.php',
+		'ReplacementArray' => 'includes/StringUtils.php',
+		'Replacer' => 'includes/StringUtils.php',
+		'RegexlikeReplacer' => 'includes/StringUtils.php',
+		'DoubleReplacer' => 'includes/StringUtils.php',
+		'HashtableReplacer' => 'includes/StringUtils.php',
+		'StringUtils' => 'includes/StringUtils.php',
+		'Title' => 'includes/Title.php',
+		'User' => 'includes/User.php',
+		'MailAddress' => 'includes/UserMailer.php',
+		'EmailNotification' => 'includes/UserMailer.php',
+		'WatchedItem' => 'includes/WatchedItem.php',
+		'WebRequest' => 'includes/WebRequest.php',
+		'WebResponse' => 'includes/WebResponse.php',
+		'FauxRequest' => 'includes/WebRequest.php',
+		'MediaWiki' => 'includes/Wiki.php',
+		'WikiError' => 'includes/WikiError.php',
+		'WikiErrorMsg' => 'includes/WikiError.php',
+		'WikiXmlError' => 'includes/WikiError.php',
+		'Xml' => 'includes/Xml.php',
+		'ZhClient' => 'includes/ZhClient.php',
+		'memcached' => 'includes/memcached-client.php',
+
+		# Media
+		'BitmapHandler' => 'includes/media/Bitmap.php',
+		'BmpHandler' => 'includes/media/BMP.php',
+		'DjVuHandler' => 'includes/media/DjVu.php',
+		'MediaHandler' => 'includes/media/Generic.php',
+		'ImageHandler' => 'includes/media/Generic.php',
+		'SvgHandler' => 'includes/media/SVG.php',
+
+		# Normal
+		'UtfNormal' => 'includes/normal/UtfNormal.php',
+
+		# Templates
+		'UsercreateTemplate' => 'includes/templates/Userlogin.php',
+		'UserloginTemplate' => 'includes/templates/Userlogin.php',
+
+		# Languages
+		'Language' => 'languages/Language.php',
+		'RandomPage' => 'includes/SpecialRandompage.php',
+
+		# API
+		'ApiBase' => 'includes/api/ApiBase.php',
+		'ApiFormatFeedWrapper' => 'includes/api/ApiFormatBase.php',
+		'ApiFeedWatchlist' => 'includes/api/ApiFeedWatchlist.php',
+		'ApiFormatBase' => 'includes/api/ApiFormatBase.php',
+		'Services_JSON' => 'includes/api/ApiFormatJson_json.php',
+		'ApiFormatJson' => 'includes/api/ApiFormatJson.php',
+		'ApiFormatPhp' => 'includes/api/ApiFormatPhp.php',
+		'ApiFormatWddx' => 'includes/api/ApiFormatWddx.php',
+		'ApiFormatXml' => 'includes/api/ApiFormatXml.php',
+		'Spyc' => 'includes/api/ApiFormatYaml_spyc.php',
+		'ApiFormatYaml' => 'includes/api/ApiFormatYaml.php',
+		'ApiHelp' => 'includes/api/ApiHelp.php',
+		'ApiLogin' => 'includes/api/ApiLogin.php',
+		'ApiMain' => 'includes/api/ApiMain.php',
+		'ApiOpenSearch' => 'includes/api/ApiOpenSearch.php',
+		'ApiPageSet' => 'includes/api/ApiPageSet.php',
+		'ApiQuery' => 'includes/api/ApiQuery.php',
+		'ApiQueryAllpages' => 'includes/api/ApiQueryAllpages.php',
+		'ApiQueryBase' => 'includes/api/ApiQueryBase.php',
+		'ApiQueryBacklinks' => 'includes/api/ApiQueryBacklinks.php',
+		'ApiQueryContributions' => 'includes/api/ApiQueryUserContributions.php',
+		'ApiQueryInfo' => 'includes/api/ApiQueryInfo.php',
+		'ApiQueryLogEvents' => 'includes/api/ApiQueryLogEvents.php',
+		'ApiQueryRecentChanges'=> 'includes/api/ApiQueryRecentChanges.php',
+		'ApiQueryRevisions' => 'includes/api/ApiQueryRevisions.php',
+		'ApiQuerySiteinfo' => 'includes/api/ApiQuerySiteinfo.php',
+		'ApiQueryWatchlist' => 'includes/api/ApiQueryWatchlist.php',
+		'ApiResult' => 'includes/api/ApiResult.php',
+	);
+	
+	wfProfileIn( __METHOD__ );
+	if ( isset( $localClasses[$className] ) ) {
+		$filename = $localClasses[$className];
+	} elseif ( isset( $wgAutoloadClasses[$className] ) ) {
+		$filename = $wgAutoloadClasses[$className];
+	} else {
+		# Try a different capitalisation
+		# The case can sometimes be wrong when unserializing PHP 4 objects
+		$filename = false;
+		$lowerClass = strtolower( $className );
+		foreach ( $localClasses as $class2 => $file2 ) {
+			if ( strtolower( $class2 ) == $lowerClass ) {
+				$filename = $file2;
+			}
+		}
+		if ( !$filename ) {
+			# Give up
+			wfProfileOut( __METHOD__ );
+			return;
+		}
+	}
+
+	# Make an absolute path, this improves performance by avoiding some stat calls
+	if ( substr( $filename, 0, 1 ) != '/' && substr( $filename, 1, 1 ) != ':' ) {
+		global $IP;
+		$filename = "$IP/$filename";
+	}
+	require( $filename );
+	wfProfileOut( __METHOD__ );
+}
+
+function wfLoadAllExtensions() {
+	global $wgAutoloadClasses;
+
+	# It is crucial that SpecialPage.php is included before any special page 
+	# extensions are loaded. Otherwise the parent class will not be available
+	# when APC loads the early-bound extension class. Normally this is 
+	# guaranteed by entering special pages via SpecialPage members such as 
+	# executePath(), but here we have to take a more explicit measure.
+	
+	require_once( dirname(__FILE__) . '/SpecialPage.php' );
+	
+	foreach( $wgAutoloadClasses as $class => $file ) {
+		if( !( class_exists( $class ) || interface_exists( $class ) ) ) {
+			require( $file );
+		}
+	}
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/BagOStuff.php
===================================================================
--- /MediaWiki/branches/1.11/includes/BagOStuff.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/BagOStuff.php	(revision 1280)
@@ -0,0 +1,689 @@
+<?php
+#
+# Copyright (C) 2003-2004 Brion Vibber <brion@pobox.com>
+# http://www.mediawiki.org/
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+# http://www.gnu.org/copyleft/gpl.html
+/**
+ *
+ */
+
+/**
+ * Simple generic object store
+ *
+ * interface is intended to be more or less compatible with
+ * the PHP memcached client.
+ *
+ * backends for local hash array and SQL table included:
+ * <code>
+ *   $bag = new HashBagOStuff();
+ *   $bag = new MysqlBagOStuff($tablename); # connect to db first
+ * </code>
+ *
+ */
+class BagOStuff {
+	var $debugmode;
+
+	function __construct() {
+		$this->set_debug( false );
+	}
+
+	function set_debug($bool) {
+		$this->debugmode = $bool;
+	}
+
+	/* *** THE GUTS OF THE OPERATION *** */
+	/* Override these with functional things in subclasses */
+
+	function get($key) {
+		/* stub */
+		return false;
+	}
+
+	function set($key, $value, $exptime=0) {
+		/* stub */
+		return false;
+	}
+
+	function delete($key, $time=0) {
+		/* stub */
+		return false;
+	}
+
+	function lock($key, $timeout = 0) {
+		/* stub */
+		return true;
+	}
+
+	function unlock($key) {
+		/* stub */
+		return true;
+	}
+
+	/* *** Emulated functions *** */
+	/* Better performance can likely be got with custom written versions */
+	function get_multi($keys) {
+		$out = array();
+		foreach($keys as $key)
+			$out[$key] = $this->get($key);
+		return $out;
+	}
+
+	function set_multi($hash, $exptime=0) {
+		foreach($hash as $key => $value)
+			$this->set($key, $value, $exptime);
+	}
+
+	function add($key, $value, $exptime=0) {
+		if( $this->get($key) == false ) {
+			$this->set($key, $value, $exptime);
+			return true;
+		}
+	}
+
+	function add_multi($hash, $exptime=0) {
+		foreach($hash as $key => $value)
+			$this->add($key, $value, $exptime);
+	}
+
+	function delete_multi($keys, $time=0) {
+		foreach($keys as $key)
+			$this->delete($key, $time);
+	}
+
+	function replace($key, $value, $exptime=0) {
+		if( $this->get($key) !== false )
+			$this->set($key, $value, $exptime);
+	}
+
+	function incr($key, $value=1) {
+		if ( !$this->lock($key) ) {
+			return false;
+		}
+		$value = intval($value);
+		if($value < 0) $value = 0;
+
+		$n = false;
+		if( ($n = $this->get($key)) !== false ) {
+			$n += $value;
+			$this->set($key, $n); // exptime?
+		}
+		$this->unlock($key);
+		return $n;
+	}
+
+	function decr($key, $value=1) {
+		if ( !$this->lock($key) ) {
+			return false;
+		}
+		$value = intval($value);
+		if($value < 0) $value = 0;
+
+		$m = false;
+		if( ($n = $this->get($key)) !== false ) {
+			$m = $n - $value;
+			if($m < 0) $m = 0;
+			$this->set($key, $m); // exptime?
+		}
+		$this->unlock($key);
+		return $m;
+	}
+
+	function _debug($text) {
+		if($this->debugmode)
+			wfDebug("BagOStuff debug: $text\n");
+	}
+
+	/**
+	 * Convert an optionally relative time to an absolute time
+	 */
+	static function convertExpiry( $exptime ) {
+		if(($exptime != 0) && ($exptime < 3600*24*30)) {
+			return time() + $exptime;
+		} else {
+			return $exptime;
+		}
+	}
+}
+
+
+/**
+ * Functional versions!
+ * @todo document
+ */
+class HashBagOStuff extends BagOStuff {
+	/*
+	   This is a test of the interface, mainly. It stores
+	   things in an associative array, which is not going to
+	   persist between program runs.
+	*/
+	var $bag;
+
+	function HashBagOStuff() {
+		$this->bag = array();
+	}
+
+	function _expire($key) {
+		$et = $this->bag[$key][1];
+		if(($et == 0) || ($et > time()))
+			return false;
+		$this->delete($key);
+		return true;
+	}
+
+	function get($key) {
+		if(!$this->bag[$key])
+			return false;
+		if($this->_expire($key))
+			return false;
+		return $this->bag[$key][0];
+	}
+
+	function set($key,$value,$exptime=0) {
+		$this->bag[$key] = array( $value, BagOStuff::convertExpiry( $exptime ) );
+	}
+
+	function delete($key,$time=0) {
+		if(!$this->bag[$key])
+			return false;
+		unset($this->bag[$key]);
+		return true;
+	}
+}
+
+/*
+CREATE TABLE objectcache (
+  keyname char(255) binary not null default '',
+  value mediumblob,
+  exptime datetime,
+  unique key (keyname),
+  key (exptime)
+);
+*/
+
+/**
+ * @todo document
+ * @abstract
+ */
+abstract class SqlBagOStuff extends BagOStuff {
+	var $table;
+	var $lastexpireall = 0;
+
+	function SqlBagOStuff($tablename = 'objectcache') {
+		$this->table = $tablename;
+	}
+
+	function get($key) {
+		/* expire old entries if any */
+		$this->garbageCollect();
+
+		$res = $this->_query(
+			"SELECT value,exptime FROM $0 WHERE keyname='$1'", $key);
+		if(!$res) {
+			$this->_debug("get: ** error: " . $this->_dberror($res) . " **");
+			return false;
+		}
+		if($row=$this->_fetchobject($res)) {
+			$this->_debug("get: retrieved data; exp time is " . $row->exptime);
+			if ( $row->exptime != $this->_maxdatetime() && 
+			  wfTimestamp( TS_UNIX, $row->exptime ) < time() ) 
+			{
+				$this->_debug("get: key has expired, deleting");
+				$this->delete($key);
+				return false;
+			}
+			return $this->_unserialize($this->_blobdecode($row->value));
+		} else {
+			$this->_debug('get: no matching rows');
+		}
+		return false;
+	}
+
+	function set($key,$value,$exptime=0) {
+		$exptime = intval($exptime);
+		if($exptime < 0) $exptime = 0;
+		if($exptime == 0) {
+			$exp = $this->_maxdatetime();
+		} else {
+			if($exptime < 3.16e8) # ~10 years
+				$exptime += time();
+			$exp = $this->_fromunixtime($exptime);
+		}
+		$this->delete( $key );
+		$this->_doinsert($this->getTableName(), array(
+					'keyname' => $key,
+					'value' => $this->_blobencode($this->_serialize($value)),
+					'exptime' => $exp
+				));
+		return true; /* ? */
+	}
+
+	function delete($key,$time=0) {
+		$this->_query(
+			"DELETE FROM $0 WHERE keyname='$1'", $key );
+		return true; /* ? */
+	}
+
+	function getTableName() {
+		return $this->table;
+	}
+
+	function _query($sql) {
+		$reps = func_get_args();
+		$reps[0] = $this->getTableName();
+		// ewwww
+		for($i=0;$i<count($reps);$i++) {
+			$sql = str_replace(
+				'$' . $i,
+				$i > 0 ? $this->_strencode($reps[$i]) : $reps[$i],
+				$sql);
+		}
+		$res = $this->_doquery($sql);
+		if($res == false) {
+			$this->_debug('query failed: ' . $this->_dberror($res));
+		}
+		return $res;
+	}
+
+	function _strencode($str) {
+		/* Protect strings in SQL */
+		return str_replace( "'", "''", $str );
+	}
+	function _blobencode($str) {
+		return $str;
+	}
+	function _blobdecode($str) {
+		return $str;
+	}
+
+	abstract function _doinsert($table, $vals);
+	abstract function _doquery($sql);
+
+	function _freeresult($result) {
+		/* stub */
+		return false;
+	}
+
+	function _dberror($result) {
+		/* stub */
+		return 'unknown error';
+	}
+
+	abstract function _maxdatetime();
+	abstract function _fromunixtime($ts);
+
+	function garbageCollect() {
+		/* Ignore 99% of requests */
+		if ( !mt_rand( 0, 100 ) ) {
+			$nowtime = time();
+			/* Avoid repeating the delete within a few seconds */
+			if ( $nowtime > ($this->lastexpireall + 1) ) {
+				$this->lastexpireall = $nowtime;
+				$this->expireall();
+			}
+		}
+	}
+
+	function expireall() {
+		/* Remove any items that have expired */
+		$now = $this->_fromunixtime( time() );
+		$this->_query( "DELETE FROM $0 WHERE exptime < '$now'" );
+	}
+
+	function deleteall() {
+		/* Clear *all* items from cache table */
+		$this->_query( "DELETE FROM $0" );
+	}
+
+	/**
+	 * Serialize an object and, if possible, compress the representation.
+	 * On typical message and page data, this can provide a 3X decrease
+	 * in storage requirements.
+	 *
+	 * @param mixed $data
+	 * @return string
+	 */
+	function _serialize( &$data ) {
+		$serial = serialize( $data );
+		if( function_exists( 'gzdeflate' ) ) {
+			return gzdeflate( $serial );
+		} else {
+			return $serial;
+		}
+	}
+
+	/**
+	 * Unserialize and, if necessary, decompress an object.
+	 * @param string $serial
+	 * @return mixed
+	 */
+	function _unserialize( $serial ) {
+		if( function_exists( 'gzinflate' ) ) {
+			$decomp = @gzinflate( $serial );
+			if( false !== $decomp ) {
+				$serial = $decomp;
+			}
+		}
+		$ret = unserialize( $serial );
+		return $ret;
+	}
+}
+
+/**
+ * @todo document
+ */
+class MediaWikiBagOStuff extends SqlBagOStuff {
+	var $tableInitialised = false;
+
+	function _doquery($sql) {
+		$dbw = wfGetDB( DB_MASTER );
+		return $dbw->query($sql, 'MediaWikiBagOStuff::_doquery');
+	}
+	function _doinsert($t, $v) {
+		$dbw = wfGetDB( DB_MASTER );
+		return $dbw->insert($t, $v, 'MediaWikiBagOStuff::_doinsert',
+			array( 'IGNORE' ) );
+	}
+	function _fetchobject($result) {
+		$dbw = wfGetDB( DB_MASTER );
+		return $dbw->fetchObject($result);
+	}
+	function _freeresult($result) {
+		$dbw = wfGetDB( DB_MASTER );
+		return $dbw->freeResult($result);
+	}
+	function _dberror($result) {
+		$dbw = wfGetDB( DB_MASTER );
+		return $dbw->lastError();
+	}
+	function _maxdatetime() {
+		if ( time() > 0x7fffffff ) {
+			return $this->_fromunixtime( 1<<62 );
+		} else {
+			return $this->_fromunixtime( 0x7fffffff );
+		}
+	}
+	function _fromunixtime($ts) {
+		$dbw = wfGetDB(DB_MASTER);
+		return $dbw->timestamp($ts);
+	}
+	function _strencode($s) {
+		$dbw = wfGetDB( DB_MASTER );
+		return $dbw->strencode($s);
+	}
+	function _blobencode($s) {
+		$dbw = wfGetDB( DB_MASTER );
+		return $dbw->encodeBlob($s);
+	}
+	function _blobdecode($s) {
+		$dbw = wfGetDB( DB_MASTER );
+		return $dbw->decodeBlob($s);
+	}
+	function getTableName() {
+		if ( !$this->tableInitialised ) {
+			$dbw = wfGetDB( DB_MASTER );
+			/* This is actually a hack, we should be able
+			   to use Language classes here... or not */
+			if (!$dbw)
+				throw new MWException("Could not connect to database");
+			$this->table = $dbw->tableName( $this->table );
+			$this->tableInitialised = true;
+		}
+		return $this->table;
+	}
+}
+
+/**
+ * This is a wrapper for Turck MMCache's shared memory functions.
+ *
+ * You can store objects with mmcache_put() and mmcache_get(), but Turck seems
+ * to use a weird custom serializer that randomly segfaults. So we wrap calls
+ * with serialize()/unserialize().
+ *
+ * The thing I noticed about the Turck serialized data was that unlike ordinary
+ * serialize(), it contained the names of methods, and judging by the amount of
+ * binary data, perhaps even the bytecode of the methods themselves. It may be
+ * that Turck's serializer is faster, so a possible future extension would be
+ * to use it for arrays but not for objects.
+ *
+ */
+class TurckBagOStuff extends BagOStuff {
+	function get($key) {
+		$val = mmcache_get( $key );
+		if ( is_string( $val ) ) {
+			$val = unserialize( $val );
+		}
+		return $val;
+	}
+
+	function set($key, $value, $exptime=0) {
+		mmcache_put( $key, serialize( $value ), $exptime );
+		return true;
+	}
+
+	function delete($key, $time=0) {
+		mmcache_rm( $key );
+		return true;
+	}
+
+	function lock($key, $waitTimeout = 0 ) {
+		mmcache_lock( $key );
+		return true;
+	}
+
+	function unlock($key) {
+		mmcache_unlock( $key );
+		return true;
+	}
+}
+
+/**
+ * This is a wrapper for APC's shared memory functions
+ *
+ */
+class APCBagOStuff extends BagOStuff {
+	function get($key) {
+		$val = apc_fetch($key);
+		if ( is_string( $val ) ) {
+			$val = unserialize( $val );
+		}
+		return $val;
+	}
+	
+	function set($key, $value, $exptime=0) {
+		apc_store($key, serialize($value), $exptime);
+		return true;
+	}
+	
+	function delete($key, $time=0) {
+		apc_delete($key);
+		return true;
+	}
+}
+
+
+/**
+ * This is a wrapper for eAccelerator's shared memory functions.
+ *
+ * This is basically identical to the Turck MMCache version,
+ * mostly because eAccelerator is based on Turck MMCache.
+ *
+ */
+class eAccelBagOStuff extends BagOStuff {
+	function get($key) {
+		$val = eaccelerator_get( $key );
+		if ( is_string( $val ) ) {
+			$val = unserialize( $val );
+		}
+		return $val;
+	}
+
+	function set($key, $value, $exptime=0) {
+		eaccelerator_put( $key, serialize( $value ), $exptime );
+		return true;
+	}
+
+	function delete($key, $time=0) {
+		eaccelerator_rm( $key );
+		return true;
+	}
+
+	function lock($key, $waitTimeout = 0 ) {
+		eaccelerator_lock( $key );
+		return true;
+	}
+
+	function unlock($key) {
+		eaccelerator_unlock( $key );
+		return true;
+	}
+}
+
+/**
+ * @todo document
+ */
+class DBABagOStuff extends BagOStuff {
+	var $mHandler, $mFile, $mReader, $mWriter, $mDisabled;
+	
+	function __construct( $handler = 'db3', $dir = false ) {
+		if ( $dir === false ) {
+			global $wgTmpDirectory;
+			$dir = $wgTmpDirectory;
+		}
+		$this->mFile = "$dir/mw-cache-" . wfWikiID();
+		$this->mFile .= '.db';
+		$this->mHandler = $handler;
+	}
+
+	/**
+	 * Encode value and expiry for storage
+	 */
+	function encode( $value, $expiry ) {
+		# Convert to absolute time
+		$expiry = BagOStuff::convertExpiry( $expiry );
+		return sprintf( '%010u', intval( $expiry ) ) . ' ' . serialize( $value );
+	}
+
+	/**
+	 * @return list containing value first and expiry second
+	 */
+	function decode( $blob ) {
+		if ( !is_string( $blob ) ) {
+			return array( null, 0 );
+		} else {
+			return array( 
+				unserialize( substr( $blob, 11 ) ),
+				intval( substr( $blob, 0, 10 ) )
+		   	);
+		}
+	}
+
+	function getReader() {
+		if ( file_exists( $this->mFile ) ) {
+			$handle = dba_open( $this->mFile, 'rl', $this->mHandler );
+		} else {
+			$handle = $this->getWriter();
+		}
+		if ( !$handle ) {
+			wfDebug( "Unable to open DBA cache file {$this->mFile}\n" );
+		}
+		return $handle;
+	}
+
+	function getWriter() {
+		$handle = dba_open( $this->mFile, 'cl', $this->mHandler );
+		if ( !$handle ) {
+			wfDebug( "Unable to open DBA cache file {$this->mFile}\n" );
+		}
+		return $handle;
+	}
+
+	function get( $key ) {
+		wfProfileIn( __METHOD__ );
+		wfDebug( __METHOD__."($key)\n" );
+		$handle = $this->getReader();
+		if ( !$handle ) {
+			return null;
+		}
+		$val = dba_fetch( $key, $handle );
+		list( $val, $expiry ) = $this->decode( $val );
+		# Must close ASAP because locks are held
+		dba_close( $handle );
+
+		if ( !is_null( $val ) && $expiry && $expiry < time() ) {
+			# Key is expired, delete it
+			$handle = $this->getWriter();
+			dba_delete( $key, $handle );
+			dba_close( $handle );
+			wfDebug( __METHOD__.": $key expired\n" );
+			$val = null;
+		}
+		wfProfileOut( __METHOD__ );
+		return $val;
+	}
+
+	function set( $key, $value, $exptime=0 ) {
+		wfProfileIn( __METHOD__ );
+		wfDebug( __METHOD__."($key)\n" );
+		$blob = $this->encode( $value, $exptime );
+		$handle = $this->getWriter();
+		if ( !$handle ) {
+			return false;
+		}
+		$ret = dba_replace( $key, $blob, $handle );
+		dba_close( $handle );
+		wfProfileOut( __METHOD__ );
+		return $ret;
+	}
+
+	function delete( $key, $time = 0 ) {
+		wfProfileIn( __METHOD__ );
+		$handle = $this->getWriter();
+		if ( !$handle ) {
+			return false;
+		}
+		$ret = dba_delete( $key, $handle );
+		dba_close( $handle );
+		wfProfileOut( __METHOD__ );
+		return $ret;
+	}
+
+	function add( $key, $value, $exptime = 0 ) {
+		wfProfileIn( __METHOD__ );
+		$blob = $this->encode( $value, $exptime );
+		$handle = $this->getWriter();
+		if ( !$handle ) {
+			return false;
+		}
+		$ret = dba_insert( $key, $blob, $handle );
+		# Insert failed, check to see if it failed due to an expired key
+		if ( !$ret ) {
+			list( $value, $expiry ) = $this->decode( dba_fetch( $key, $handle ) );
+			if ( $expiry < time() ) {
+				# Yes expired, delete and try again
+				dba_delete( $key, $handle );
+				$ret = dba_insert( $key, $blob, $handle );
+				# This time if it failed then it will be handled by the caller like any other race
+			}
+		}
+
+		dba_close( $handle );
+		wfProfileOut( __METHOD__ );
+		return $ret;
+	}
+}
+	
+?>
Index: /MediaWiki/branches/1.11/includes/Block.php
===================================================================
--- /MediaWiki/branches/1.11/includes/Block.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/Block.php	(revision 1280)
@@ -0,0 +1,701 @@
+<?php
+/**
+ * Blocks and bans object
+ */
+
+/**
+ * The block class
+ * All the functions in this class assume the object is either explicitly
+ * loaded or filled. It is not load-on-demand. There are no accessors.
+ *
+ * Globals used: $wgAutoblockExpiry, $wgAntiLockFlags
+ *
+ * @todo This could be used everywhere, but it isn't.
+ */
+class Block
+{
+	/* public*/ var $mAddress, $mUser, $mBy, $mReason, $mTimestamp, $mAuto, $mId, $mExpiry,
+				$mRangeStart, $mRangeEnd, $mAnonOnly, $mEnableAutoblock, $mHideName;
+	/* private */ var $mNetworkBits, $mIntegerAddr, $mForUpdate, $mFromMaster, $mByName;
+	
+	const EB_KEEP_EXPIRED = 1;
+	const EB_FOR_UPDATE = 2;
+	const EB_RANGE_ONLY = 4;
+
+	function __construct( $address = '', $user = 0, $by = 0, $reason = '',
+		$timestamp = '' , $auto = 0, $expiry = '', $anonOnly = 0, $createAccount = 0, $enableAutoblock = 0, 
+		$hideName = 0 )
+	{
+		$this->mId = 0;
+		# Expand valid IPv6 addresses
+		$address = IP::sanitizeIP( $address );
+		$this->mAddress = $address;
+		$this->mUser = $user;
+		$this->mBy = $by;
+		$this->mReason = $reason;
+		$this->mTimestamp = wfTimestamp(TS_MW,$timestamp);
+		$this->mAuto = $auto;
+		$this->mAnonOnly = $anonOnly;
+		$this->mCreateAccount = $createAccount;
+		$this->mExpiry = self::decodeExpiry( $expiry );
+		$this->mEnableAutoblock = $enableAutoblock;
+		$this->mHideName = $hideName;
+
+		$this->mForUpdate = false;
+		$this->mFromMaster = false;
+		$this->mByName = false;
+		$this->initialiseRange();
+	}
+
+	static function newFromDB( $address, $user = 0, $killExpired = true )
+	{
+		$block = new Block();
+		$block->load( $address, $user, $killExpired );
+		if ( $block->isValid() ) {
+			return $block;
+		} else {
+			return null;
+		}
+	}
+
+	static function newFromID( $id ) 
+	{
+		$dbr = wfGetDB( DB_SLAVE );
+		$res = $dbr->resultObject( $dbr->select( 'ipblocks', '*', 
+			array( 'ipb_id' => $id ), __METHOD__ ) );
+		$block = new Block;
+		if ( $block->loadFromResult( $res ) ) {
+			return $block;
+		} else {
+			return null;
+		}
+	}
+
+	function clear()
+	{
+		$this->mAddress = $this->mReason = $this->mTimestamp = '';
+		$this->mId = $this->mAnonOnly = $this->mCreateAccount = 
+			$this->mEnableAutoblock = $this->mAuto = $this->mUser = 
+			$this->mBy = $this->mHideName = 0;
+		$this->mByName = false;
+	}
+
+	/**
+	 * Get the DB object and set the reference parameter to the query options
+	 */
+	function &getDBOptions( &$options )
+	{
+		global $wgAntiLockFlags;
+		if ( $this->mForUpdate || $this->mFromMaster ) {
+			$db = wfGetDB( DB_MASTER );
+			if ( !$this->mForUpdate || ($wgAntiLockFlags & ALF_NO_BLOCK_LOCK) ) {
+				$options = array();
+			} else {
+				$options = array( 'FOR UPDATE' );
+			}
+		} else {
+			$db = wfGetDB( DB_SLAVE );
+			$options = array();
+		}
+		return $db;
+	}
+
+	/**
+	 * Get a ban from the DB, with either the given address or the given username
+	 *
+	 * @param string $address The IP address of the user, or blank to skip IP blocks
+	 * @param integer $user The user ID, or zero for anonymous users
+	 * @param bool $killExpired Whether to delete expired rows while loading
+	 *
+	 */
+	function load( $address = '', $user = 0, $killExpired = true )
+	{
+		wfDebug( "Block::load: '$address', '$user', $killExpired\n" );
+
+		$options = array();
+		$db =& $this->getDBOptions( $options );
+
+		if ( 0 == $user && $address == '' ) {
+			# Invalid user specification, not blocked
+			$this->clear();
+			return false;
+		}
+
+		# Try user block
+		if ( $user ) {
+			$res = $db->resultObject( $db->select( 'ipblocks', '*', array( 'ipb_user' => $user ), 
+				__METHOD__, $options ) );
+			if ( $this->loadFromResult( $res, $killExpired ) ) {
+				return true;
+			}
+		}
+
+		# Try IP block
+		# TODO: improve performance by merging this query with the autoblock one
+		# Slightly tricky while handling killExpired as well
+		if ( $address ) {
+			$conds = array( 'ipb_address' => $address, 'ipb_auto' => 0 );
+			$res = $db->resultObject( $db->select( 'ipblocks', '*', $conds, __METHOD__, $options ) );
+			if ( $this->loadFromResult( $res, $killExpired ) ) {
+				if ( $user && $this->mAnonOnly ) {
+					# Block is marked anon-only
+					# Whitelist this IP address against autoblocks and range blocks
+					$this->clear();
+					return false;
+				} else {
+					return true;
+				}
+			}
+		}
+
+		# Try range block
+		if ( $this->loadRange( $address, $killExpired, $user ) ) {
+			if ( $user && $this->mAnonOnly ) {
+				$this->clear();
+				return false;
+			} else {
+				return true;
+			}
+		}
+
+		# Try autoblock
+		if ( $address ) {
+			$conds = array( 'ipb_address' => $address, 'ipb_auto' => 1 );
+			if ( $user ) {
+				$conds['ipb_anon_only'] = 0;
+			}
+			$res = $db->resultObject( $db->select( 'ipblocks', '*', $conds, __METHOD__, $options ) );
+			if ( $this->loadFromResult( $res, $killExpired ) ) {
+				return true;
+			}
+		}
+		
+		# Give up
+		$this->clear();
+		return false;
+	}
+
+	/**
+	 * Fill in member variables from a result wrapper
+	 */
+	function loadFromResult( ResultWrapper $res, $killExpired = true ) 
+	{
+		$ret = false;
+		if ( 0 != $res->numRows() ) {
+			# Get first block
+			$row = $res->fetchObject();
+			$this->initFromRow( $row );
+
+			if ( $killExpired ) {
+				# If requested, delete expired rows
+				do {
+					$killed = $this->deleteIfExpired();
+					if ( $killed ) {
+						$row = $res->fetchObject();
+						if ( $row ) {
+							$this->initFromRow( $row );
+						}
+					}
+				} while ( $killed && $row );
+
+				# If there were any left after the killing finished, return true
+				if ( $row ) {
+					$ret = true;
+				}
+			} else {
+				$ret = true;
+			}
+		}
+		$res->free();
+		return $ret;
+	}
+
+	/**
+	 * Search the database for any range blocks matching the given address, and
+	 * load the row if one is found.
+	 */
+	function loadRange( $address, $killExpired = true, $user = 0 )
+	{
+		$iaddr = IP::toHex( $address );
+		if ( $iaddr === false ) {
+			# Invalid address
+			return false;
+		}
+
+		# Only scan ranges which start in this /16, this improves search speed
+		# Blocks should not cross a /16 boundary.
+		$range = substr( $iaddr, 0, 4 );
+
+		$options = array();
+		$db =& $this->getDBOptions( $options );
+		$conds = array(
+			"ipb_range_start LIKE '$range%'",
+			"ipb_range_start <= '$iaddr'",
+			"ipb_range_end >= '$iaddr'"
+		);
+		
+		if ( $user ) {
+			$conds['ipb_anon_only'] = 0;
+		}
+
+		$res = $db->resultObject( $db->select( 'ipblocks', '*', $conds, __METHOD__, $options ) );
+		$success = $this->loadFromResult( $res, $killExpired );
+		return $success;
+	}
+
+	/**
+	 * Determine if a given integer IPv4 address is in a given CIDR network
+	 * @deprecated Use IP::isInRange
+	 */
+	function isAddressInRange( $addr, $range ) {
+		return IP::isInRange( $addr, $range );
+	}
+
+	function initFromRow( $row )
+	{
+		$this->mAddress = $row->ipb_address;
+		$this->mReason = $row->ipb_reason;
+		$this->mTimestamp = wfTimestamp(TS_MW,$row->ipb_timestamp);
+		$this->mUser = $row->ipb_user;
+		$this->mBy = $row->ipb_by;
+		$this->mAuto = $row->ipb_auto;
+		$this->mAnonOnly = $row->ipb_anon_only;
+		$this->mCreateAccount = $row->ipb_create_account;
+		$this->mEnableAutoblock = $row->ipb_enable_autoblock;
+		$this->mHideName = $row->ipb_deleted;
+		$this->mId = $row->ipb_id;
+		$this->mExpiry = self::decodeExpiry( $row->ipb_expiry );
+		if ( isset( $row->user_name ) ) {
+			$this->mByName = $row->user_name;
+		} else {
+			$this->mByName = false;
+		}
+		$this->mRangeStart = $row->ipb_range_start;
+		$this->mRangeEnd = $row->ipb_range_end;
+	}
+
+	function initialiseRange()
+	{
+		$this->mRangeStart = '';
+		$this->mRangeEnd = '';
+
+		if ( $this->mUser == 0 ) {
+			list( $this->mRangeStart, $this->mRangeEnd ) = IP::parseRange( $this->mAddress );
+		}
+	}
+
+	/**
+	 * Callback with a Block object for every block
+	 * @return integer number of blocks;
+	 */
+	/*static*/ function enumBlocks( $callback, $tag, $flags = 0 )
+	{
+		global $wgAntiLockFlags;
+
+		$block = new Block();
+		if ( $flags & Block::EB_FOR_UPDATE ) {
+			$db = wfGetDB( DB_MASTER );
+			if ( $wgAntiLockFlags & ALF_NO_BLOCK_LOCK ) {
+				$options = '';
+			} else {
+				$options = 'FOR UPDATE';
+			}
+			$block->forUpdate( true );
+		} else {
+			$db = wfGetDB( DB_SLAVE );
+			$options = '';
+		}
+		if ( $flags & Block::EB_RANGE_ONLY ) {
+			$cond = " AND ipb_range_start <> ''";
+		} else {
+			$cond = '';
+		}
+
+		$now = wfTimestampNow();
+
+		list( $ipblocks, $user ) = $db->tableNamesN( 'ipblocks', 'user' );
+
+		$sql = "SELECT $ipblocks.*,user_name FROM $ipblocks,$user " .
+			"WHERE user_id=ipb_by $cond ORDER BY ipb_timestamp DESC $options";
+		$res = $db->query( $sql, 'Block::enumBlocks' );
+		$num_rows = $db->numRows( $res );
+
+		while ( $row = $db->fetchObject( $res ) ) {
+			$block->initFromRow( $row );
+			if ( ( $flags & Block::EB_RANGE_ONLY ) && $block->mRangeStart == '' ) {
+				continue;
+			}
+
+			if ( !( $flags & Block::EB_KEEP_EXPIRED ) ) {
+				if ( $block->mExpiry && $now > $block->mExpiry ) {
+					$block->delete();
+				} else {
+					call_user_func( $callback, $block, $tag );
+				}
+			} else {
+				call_user_func( $callback, $block, $tag );
+			}
+		}
+		$db->freeResult( $res );
+		return $num_rows;
+	}
+
+	function delete()
+	{
+		if (wfReadOnly()) {
+			return false;
+		}
+		if ( !$this->mId ) {
+			throw new MWException( "Block::delete() now requires that the mId member be filled\n" );
+		}
+
+		$dbw = wfGetDB( DB_MASTER );
+		$dbw->delete( 'ipblocks', array( 'ipb_id' => $this->mId ), __METHOD__ );
+		return $dbw->affectedRows() > 0;
+	}
+
+	/**
+	* Insert a block into the block table.
+	*@return Whether or not the insertion was successful.
+	*/
+	function insert()
+	{
+		wfDebug( "Block::insert; timestamp {$this->mTimestamp}\n" );
+		$dbw = wfGetDB( DB_MASTER );
+
+		# Unset ipb_anon_only for user blocks, makes no sense
+		if ( $this->mUser ) {
+			$this->mAnonOnly = 0;
+		}
+
+		# Unset ipb_enable_autoblock for IP blocks, makes no sense
+		if ( !$this->mUser ) {
+			$this->mEnableAutoblock = 0;
+		}
+
+		# Don't collide with expired blocks
+		Block::purgeExpired();
+
+		$ipb_id = $dbw->nextSequenceValue('ipblocks_ipb_id_val');
+		$dbw->insert( 'ipblocks',
+			array(
+				'ipb_id' => $ipb_id,
+				'ipb_address' => $this->mAddress,
+				'ipb_user' => $this->mUser,
+				'ipb_by' => $this->mBy,
+				'ipb_reason' => $this->mReason,
+				'ipb_timestamp' => $dbw->timestamp($this->mTimestamp),
+				'ipb_auto' => $this->mAuto,
+				'ipb_anon_only' => $this->mAnonOnly,
+				'ipb_create_account' => $this->mCreateAccount,
+				'ipb_enable_autoblock' => $this->mEnableAutoblock,
+				'ipb_expiry' => self::encodeExpiry( $this->mExpiry, $dbw ),
+				'ipb_range_start' => $this->mRangeStart,
+				'ipb_range_end' => $this->mRangeEnd,
+				'ipb_deleted'	=> $this->mHideName
+			), 'Block::insert', array( 'IGNORE' )
+		);
+		$affected = $dbw->affectedRows();
+		$dbw->commit();
+
+		if ($affected)
+			$this->doRetroactiveAutoblock();
+
+		return $affected;
+	}
+
+	/**
+	* Retroactively autoblocks the last IP used by the user (if it is a user)
+	* blocked by this Block.
+	*@return Whether or not a retroactive autoblock was made.
+	*/
+	function doRetroactiveAutoblock() {
+		$dbr = wfGetDB( DB_SLAVE );
+		#If autoblock is enabled, autoblock the LAST IP used
+		# - stolen shamelessly from CheckUser_body.php
+
+		if ($this->mEnableAutoblock && $this->mUser) {
+			wfDebug("Doing retroactive autoblocks for " . $this->mAddress . "\n");
+
+			$row = $dbr->selectRow( 'recentchanges', array( 'rc_ip' ), array( 'rc_user_text' => $this->mAddress ),
+				__METHOD__ , array( 'ORDER BY' => 'rc_timestamp DESC' ) );
+
+			if ( !$row || !$row->rc_ip ) {
+				#No results, don't autoblock anything
+				wfDebug("No IP found to retroactively autoblock\n");
+			} else {
+				#Limit is 1, so no loop needed.
+				$retroblockip = $row->rc_ip;
+				return $this->doAutoblock( $retroblockip, true );
+			}
+		}
+	}
+
+	/**
+	* Autoblocks the given IP, referring to this Block.
+	* @param string $autoblockip The IP to autoblock.
+	* @param bool $justInserted The main block was just inserted
+	* @return bool Whether or not an autoblock was inserted.
+	*/
+	function doAutoblock( $autoblockip, $justInserted = false ) {
+		# Check if this IP address is already blocked
+		$dbw = wfGetDB( DB_MASTER );
+
+		# If autoblocks are disabled, go away.
+		if ( !$this->mEnableAutoblock ) {
+			return;
+		}
+
+		# Check for presence on the autoblock whitelist
+		# TODO cache this?
+		$lines = explode( "\n", wfMsgForContentNoTrans( 'autoblock_whitelist' ) );
+
+		$ip = $autoblockip;
+
+		wfDebug("Checking the autoblock whitelist..\n");
+
+		foreach( $lines as $line ) {
+			# List items only
+			if ( substr( $line, 0, 1 ) !== '*' ) {
+				continue;
+			}
+
+			$wlEntry = substr($line, 1);
+			$wlEntry = trim($wlEntry);
+
+			wfDebug("Checking $ip against $wlEntry...");
+
+			# Is the IP in this range?
+			if (IP::isInRange( $ip, $wlEntry )) {
+				wfDebug(" IP $ip matches $wlEntry, not autoblocking\n");
+				#$autoblockip = null; # Don't autoblock a whitelisted IP.
+				return; #This /SHOULD/ introduce a dummy block - but
+					# I don't know a safe way to do so. -werdna
+			} else {
+				wfDebug( " No match\n" );
+			}
+		}
+
+		# It's okay to autoblock. Go ahead and create/insert the block.
+
+		$ipblock = Block::newFromDB( $autoblockip );
+		if ( $ipblock ) {
+			# If the user is already blocked. Then check if the autoblock would
+			# exceed the user block. If it would exceed, then do nothing, else
+			# prolong block time
+			if ($this->mExpiry &&
+			($this->mExpiry < Block::getAutoblockExpiry($ipblock->mTimestamp))) {
+				return;
+			}
+			# Just update the timestamp
+			if ( !$justInserted ) {
+				$ipblock->updateTimestamp();
+			}
+			return;
+		} else {
+			$ipblock = new Block;
+		}
+
+		# Make a new block object with the desired properties
+		wfDebug( "Autoblocking {$this->mAddress}@" . $autoblockip . "\n" );
+		$ipblock->mAddress = $autoblockip;
+		$ipblock->mUser = 0;
+		$ipblock->mBy = $this->mBy;
+		$ipblock->mReason = wfMsgForContent( 'autoblocker', $this->mAddress, $this->mReason );
+		$ipblock->mTimestamp = wfTimestampNow();
+		$ipblock->mAuto = 1;
+		$ipblock->mCreateAccount = $this->mCreateAccount;
+		# Continue suppressing the name if needed
+		$ipblock->mHideName = $this->mHideName;
+
+		# If the user is already blocked with an expiry date, we don't
+		# want to pile on top of that!
+		if($this->mExpiry) {
+			$ipblock->mExpiry = min ( $this->mExpiry, Block::getAutoblockExpiry( $this->mTimestamp ));
+		} else {
+			$ipblock->mExpiry = Block::getAutoblockExpiry( $this->mTimestamp );
+		}
+		# Insert it
+		return $ipblock->insert();
+	}
+
+	function deleteIfExpired()
+	{
+		$fname = 'Block::deleteIfExpired';
+		wfProfileIn( $fname );
+		if ( $this->isExpired() ) {
+			wfDebug( "Block::deleteIfExpired() -- deleting\n" );
+			$this->delete();
+			$retVal = true;
+		} else {
+			wfDebug( "Block::deleteIfExpired() -- not expired\n" );
+			$retVal = false;
+		}
+		wfProfileOut( $fname );
+		return $retVal;
+	}
+
+	function isExpired()
+	{
+		wfDebug( "Block::isExpired() checking current " . wfTimestampNow() . " vs $this->mExpiry\n" );
+		if ( !$this->mExpiry ) {
+			return false;
+		} else {
+			return wfTimestampNow() > $this->mExpiry;
+		}
+	}
+
+	function isValid()
+	{
+		return $this->mAddress != '';
+	}
+
+	function updateTimestamp()
+	{
+		if ( $this->mAuto ) {
+			$this->mTimestamp = wfTimestamp();
+			$this->mExpiry = Block::getAutoblockExpiry( $this->mTimestamp );
+
+			$dbw = wfGetDB( DB_MASTER );
+			$dbw->update( 'ipblocks',
+				array( /* SET */
+					'ipb_timestamp' => $dbw->timestamp($this->mTimestamp),
+					'ipb_expiry' => $dbw->timestamp($this->mExpiry),
+				), array( /* WHERE */
+					'ipb_address' => $this->mAddress
+				), 'Block::updateTimestamp'
+			);
+		}
+	}
+
+	/*
+	function getIntegerAddr()
+	{
+		return $this->mIntegerAddr;
+	}
+
+	function getNetworkBits()
+	{
+		return $this->mNetworkBits;
+	}*/
+
+	/**
+	 * @return The blocker user ID.
+	 */
+	public function getBy() {
+		return $this->mBy;
+	}
+
+	/**
+	 * @return The blocker user name.
+	 */
+	function getByName()
+	{
+		if ( $this->mByName === false ) {
+			$this->mByName = User::whoIs( $this->mBy );
+		}
+		return $this->mByName;
+	}
+
+	function forUpdate( $x = NULL ) {
+		return wfSetVar( $this->mForUpdate, $x );
+	}
+
+	function fromMaster( $x = NULL ) {
+		return wfSetVar( $this->mFromMaster, $x );
+	}
+
+	function getRedactedName() {
+		if ( $this->mAuto ) {
+			return '#' . $this->mId;
+		} else {
+			return $this->mAddress;
+		}
+	}
+	
+	/**
+	 * Encode expiry for DB
+	 */
+	static function encodeExpiry( $expiry, $db ) {
+		if ( $expiry == '' || $expiry == Block::infinity() ) {
+			return Block::infinity();
+		} else {
+			return $db->timestamp( $expiry );
+		}
+	}
+
+	/** 
+	 * Decode expiry which has come from the DB
+	 */
+	static function decodeExpiry( $expiry ) {
+		if ( $expiry == '' || $expiry == Block::infinity() ) {
+			return Block::infinity();
+		} else {
+			return wfTimestamp( TS_MW, $expiry );
+		}
+	}
+	
+	static function getAutoblockExpiry( $timestamp )
+	{
+		global $wgAutoblockExpiry;
+		return wfTimestamp( TS_MW, wfTimestamp( TS_UNIX, $timestamp ) + $wgAutoblockExpiry );
+	}
+	
+	/** 
+	 * Gets rid of uneeded numbers in quad-dotted/octet IP strings
+	 * For example, 127.111.113.151/24 -> 127.111.113.0/24
+	 */
+	static function normaliseRange( $range ) {
+		$parts = explode( '/', $range );
+		if ( count( $parts ) == 2 ) {
+			// IPv6
+			if ( IP::isIPv6($range) && $parts[1] >= 64 && $parts[1] <= 128 ) {
+				$bits = $parts[1];
+				$ipint = IP::toUnsigned6( $parts[0] );
+				# Native 32 bit functions WONT work here!!!
+				# Convert to a padded binary number
+				$network = wfBaseConvert( $ipint, 10, 2, 128 );
+				# Truncate the last (128-$bits) bits and replace them with zeros
+				$network = str_pad( substr( $network, 0, $bits ), 128, 0, STR_PAD_RIGHT );
+				# Convert back to an integer
+				$network = wfBaseConvert( $network, 2, 10 );
+				# Reform octet address
+				$newip = IP::toOctet( $network );
+				$range = "$newip/{$parts[1]}";
+			} // IPv4
+			else if ( IP::isIPv4($range) && $parts[1] >= 16 && $parts[1] <= 32 ) {
+				$shift = 32 - $parts[1];
+				$ipint = IP::toUnsigned( $parts[0] );
+				$ipint = $ipint >> $shift << $shift;
+				$newip = long2ip( $ipint );
+				$range = "$newip/{$parts[1]}";
+			}
+		}
+		return $range;
+	}
+
+	/** 
+	 * Purge expired blocks from the ipblocks table
+	 */
+	static function purgeExpired() {
+		$dbw = wfGetDB( DB_MASTER );
+		$dbw->delete( 'ipblocks', array( 'ipb_expiry < ' . $dbw->addQuotes( $dbw->timestamp() ) ), __METHOD__ );
+	}
+
+	static function infinity() {
+		# This is a special keyword for timestamps in PostgreSQL, and 
+		# works with CHAR(14) as well because "i" sorts after all numbers.		
+		return 'infinity';
+
+		/*
+		static $infinity;
+		if ( !isset( $infinity ) ) {
+			$dbr = wfGetDB( DB_SLAVE );
+			$infinity = $dbr->bigTimestamp();
+		}
+		return $infinity;
+		 */
+	}
+
+}
+?>
Index: /MediaWiki/branches/1.11/includes/CacheDependency.php
===================================================================
--- /MediaWiki/branches/1.11/includes/CacheDependency.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/CacheDependency.php	(revision 1280)
@@ -0,0 +1,347 @@
+<?php
+
+/**
+ * This class stores an arbitrary value along with its dependencies. 
+ * Users should typically only use DependencyWrapper::getFromCache(), rather
+ * than instantiating one of these objects directly.
+ * @addtogroup Cache
+ */
+class DependencyWrapper {
+	var $value;
+	var $deps;
+
+	/**
+	 * Create an instance.
+	 * @param mixed $value The user-supplied value
+	 * @param mixed $deps A dependency or dependency array. All dependencies
+	 *        must be objects implementing CacheDependency.
+	 */
+	function __construct( $value = false, $deps = array() ) {
+		$this->value = $value;
+		if ( !is_array( $deps ) ) {
+			$deps = array( $deps );
+		}
+		$this->deps = $deps;
+	}
+
+	/** 
+	 * Returns true if any of the dependencies have expired
+	 */
+	function isExpired() {
+		foreach ( $this->deps as $dep ) {
+			if ( $dep->isExpired() ) {
+				return true;
+			}
+		}
+		return false;
+	}
+
+	/**
+	 * Initialise dependency values in preparation for storing. This must be
+	 * called before serialization.
+	 */
+	function initialiseDeps() {
+		foreach ( $this->deps as $dep ) {
+			$dep->loadDependencyValues();
+		}
+	}
+
+	/**
+	 * Get the user-defined value
+	 */
+	function getValue() {
+		return $this->value;
+	}
+
+	/**
+	 * Store the wrapper to a cache
+	 */
+	function storeToCache( $cache, $key, $expiry = 0 ) {
+		$this->initialiseDeps();
+		$cache->set( $key, $this, $expiry );
+	}
+
+	/**
+	 * Attempt to get a value from the cache. If the value is expired or missing, 
+	 * it will be generated with the callback function (if present), and the newly
+	 * calculated value will be stored to the cache in a wrapper. 
+	 *
+	 * @param object $cache A cache object such as $wgMemc
+	 * @param string $key The cache key
+	 * @param integer $expiry The expiry timestamp or interval in seconds
+	 * @param mixed $callback The callback for generating the value, or false
+	 * @param array $callbackParams The function parameters for the callback
+	 * @param array $deps The dependencies to store on a cache miss. Note: these 
+	 *    are not the dependencies used on a cache hit! Cache hits use the stored
+	 *    dependency array.
+	 *
+	 * @return mixed The value, or null if it was not present in the cache and no
+	 *    callback was defined.
+	 */
+	static function getValueFromCache( $cache, $key, $expiry = 0, $callback = false, 
+		$callbackParams = array(), $deps = array() ) 
+	{
+		$obj = $cache->get( $key );
+		if ( is_object( $obj ) && $obj instanceof DependencyWrapper && !$obj->isExpired() ) {
+			$value = $obj->value;
+		} elseif ( $callback ) {
+			$value = call_user_func_array( $callback, $callbackParams );
+			# Cache the newly-generated value
+			$wrapper = new DependencyWrapper( $value, $deps );
+			$wrapper->storeToCache( $cache, $key, $expiry );
+		} else {
+			$value = null;
+		}
+		return $value;
+	}
+}
+
+/**
+ * @addtogroup Cache
+ */
+abstract class CacheDependency {
+	/**
+	 * Returns true if the dependency is expired, false otherwise
+	 */
+	abstract function isExpired();
+
+	/**
+	 * Hook to perform any expensive pre-serialize loading of dependency values.
+	 */
+	function loadDependencyValues() {}
+}
+
+/**
+ * @addtogroup Cache
+ */
+class FileDependency extends CacheDependency {
+	var $filename, $timestamp;
+
+	/**
+	 * Create a file dependency
+	 *
+	 * @param string $filename The name of the file, preferably fully qualified
+	 * @param mixed $timestamp The unix last modified timestamp, or false if the
+	 *        file does not exist. If omitted, the timestamp will be loaded from 
+	 *        the file.
+	 *
+	 * A dependency on a nonexistent file will be triggered when the file is 
+	 * created. A dependency on an existing file will be triggered when the 
+	 * file is changed.
+	 */
+	function __construct( $filename, $timestamp = null ) {
+		$this->filename = $filename;
+		$this->timestamp = $timestamp;
+	}
+
+	function loadDependencyValues() {
+		if ( is_null( $this->timestamp ) ) {
+			if ( !file_exists( $this->filename ) ) {
+				# Dependency on a non-existent file
+				# This is a valid concept!
+				$this->timestamp = false;
+			} else {
+				$this->timestamp = filemtime( $this->filename );
+			}
+		}
+	}
+
+	function isExpired() {
+		if ( !file_exists( $this->filename ) ) {
+			if ( $this->timestamp === false ) {
+				# Still nonexistent
+				return false;
+			} else {
+				# Deleted
+				wfDebug( "Dependency triggered: {$this->filename} deleted.\n" );
+				return true;
+			}
+		} else {
+			$lastmod = filemtime( $this->filename );
+			if ( $lastmod > $this->timestamp ) {
+				# Modified or created
+				wfDebug( "Dependency triggered: {$this->filename} changed.\n" );
+				return true;
+			} else {
+				# Not modified
+				return false;
+			}
+		}
+	}
+}
+
+/**
+ * @addtogroup Cache
+ */
+class TitleDependency extends CacheDependency {
+	var $titleObj;
+	var $ns, $dbk;
+	var $touched;
+
+	/**
+	 * Construct a title dependency
+	 * @param Title $title
+	 */
+	function __construct( Title $title ) {
+		$this->titleObj = $title;
+		$this->ns = $title->getNamespace();
+		$this->dbk = $title->getDBkey();
+	}
+
+	function loadDependencyValues() {
+		$this->touched = $this->getTitle()->getTouched();
+	}
+	
+	/**
+	 * Get rid of bulky Title object for sleep
+	 */
+	function __sleep() {
+		return array( 'ns', 'dbk', 'touched' );
+	}
+
+	function getTitle() {
+		if ( !isset( $this->titleObj ) ) {
+			$this->titleObj = Title::makeTitle( $this->ns, $this->dbk );
+		} 
+		return $this->titleObj;
+	}
+
+	function isExpired() {
+		$touched = $this->getTitle()->getTouched();
+		if ( $this->touched === false ) {
+			if ( $touched === false ) {
+				# Still missing
+				return false;
+			} else {
+				# Created
+				return true;
+			}
+		} elseif ( $touched === false ) {
+			# Deleted
+			return true;
+		} elseif ( $touched > $this->touched ) {
+			# Updated
+			return true;
+		} else {
+			# Unmodified
+			return false;
+		}
+	}
+}
+
+/**
+ * @addtogroup Cache
+ */
+class TitleListDependency extends CacheDependency {
+	var $linkBatch;
+	var $timestamps;
+	
+	/**
+	 * Construct a dependency on a list of titles
+	 */
+	function __construct( LinkBatch $linkBatch ) {
+		$this->linkBatch = $linkBatch;
+	}
+
+	function calculateTimestamps() {
+		# Initialise values to false
+		$timestamps = array();
+		foreach ( $this->getLinkBatch()->data as $ns => $dbks ) {
+			if ( count( $dbks ) > 0 ) {
+				$timestamps[$ns] = array();
+				foreach ( $dbks as $dbk => $value ) {
+					$timestamps[$ns][$dbk] = false;
+				}
+			}
+		}
+
+		# Do the query
+		if ( count( $timestamps ) ) {
+			$dbr = wfGetDB( DB_SLAVE );
+			$where = $this->getLinkBatch()->constructSet( 'page', $dbr );
+			$res = $dbr->select( 'page', 
+				array( 'page_namespace', 'page_title', 'page_touched' ),
+				$where, __METHOD__ );
+			while ( $row = $dbr->fetchObject( $res ) ) {
+				$timestamps[$row->page_namespace][$row->page_title] = $row->page_touched;
+			}
+		}
+		return $timestamps;
+	}
+
+	function loadDependencyValues() {
+		$this->timestamps = $this->calculateTimestamps();
+	}
+
+	function __sleep() {
+		return array( 'timestamps' );
+	}
+
+	function getLinkBatch() {
+		if ( !isset( $this->linkBatch ) ){
+			$this->linkBatch = new LinkBatch;
+			$this->linkBatch->setArray( $this->timestamps );
+		}
+		return $this->linkBatch;
+	}
+
+	function isExpired() {
+		$newTimestamps = $this->calculateTimestamps();
+		foreach ( $this->timestamps as $ns => $dbks ) {
+			foreach ( $dbks as $dbk => $oldTimestamp ) {
+				$newTimestamp = $newTimestamps[$ns][$dbk];
+				if ( $oldTimestamp === false ) {
+					if ( $newTimestamp === false ) {
+						# Still missing
+					} else {
+						# Created
+						return true;
+					}
+				} elseif ( $newTimestamp === false ) {
+					# Deleted
+					return true;
+				} elseif ( $newTimestamp > $oldTimestamp ) {
+					# Updated
+					return true;
+				} else {
+					# Unmodified
+				}
+			}
+		}
+		return false;
+	}
+}
+
+/**
+ * @addtogroup Cache
+ */
+class GlobalDependency extends CacheDependency {
+	var $name, $value;
+	
+	function __construct( $name ) {
+		$this->name = $name;
+		$this->value = $GLOBALS[$name];
+	}
+
+	function isExpired() {
+		return $GLOBALS[$this->name] != $this->value;
+	}
+}
+
+/**
+ * @addtogroup Cache
+ */
+class ConstantDependency extends CacheDependency {
+	var $name, $value;
+
+	function __construct( $name ) {
+		$this->name = $name;
+		$this->value = constant( $name );
+	}
+
+	function isExpired() {
+		return constant( $this->name ) != $this->value;
+	}
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/CategoryPage.php
===================================================================
--- /MediaWiki/branches/1.11/includes/CategoryPage.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/CategoryPage.php	(revision 1280)
@@ -0,0 +1,426 @@
+<?php
+/**
+ * Special handling for category description pages
+ * Modelled after ImagePage.php
+ *
+ */
+
+if( !defined( 'MEDIAWIKI' ) )
+	die( 1 );
+
+/**
+ */
+class CategoryPage extends Article {
+	function view() {
+		global $wgRequest, $wgUser;
+
+		$diff = $wgRequest->getVal( 'diff' );
+		$diffOnly = $wgRequest->getBool( 'diffonly', $wgUser->getOption( 'diffonly' ) );
+
+		if ( isset( $diff ) && $diffOnly )
+			return Article::view();
+
+		if(!wfRunHooks('CategoryPageView', array(&$this))) return;
+
+		if ( NS_CATEGORY == $this->mTitle->getNamespace() ) {
+			$this->openShowCategory();
+		}
+
+		Article::view();
+
+		# If the article we've just shown is in the "Image" namespace,
+		# follow it with the history list and link list for the image
+		# it describes.
+
+		if ( NS_CATEGORY == $this->mTitle->getNamespace() ) {
+			$this->closeShowCategory();
+		}
+	}
+
+	function openShowCategory() {
+		# For overloading
+	}
+
+	function closeShowCategory() {
+		global $wgOut, $wgRequest;
+		$from = $wgRequest->getVal( 'from' );
+		$until = $wgRequest->getVal( 'until' );
+
+		$viewer = new CategoryViewer( $this->mTitle, $from, $until );
+		$wgOut->addHTML( $viewer->getHTML() );
+	}
+}
+
+class CategoryViewer {
+	var $title, $limit, $from, $until,
+		$articles, $articles_start_char, 
+		$children, $children_start_char,
+		$showGallery, $gallery,
+		$skin;
+
+	function __construct( $title, $from = '', $until = '' ) {
+		global $wgCategoryPagingLimit;
+		$this->title = $title;
+		$this->from = $from;
+		$this->until = $until;
+		$this->limit = $wgCategoryPagingLimit;
+	}
+	
+	/**
+	 * Format the category data list.
+	 *
+	 * @param string $from -- return only sort keys from this item on
+	 * @param string $until -- don't return keys after this point.
+	 * @return string HTML output
+	 * @private
+	 */
+	function getHTML() {
+		global $wgOut, $wgCategoryMagicGallery, $wgCategoryPagingLimit;
+		wfProfileIn( __METHOD__ );
+
+		$this->showGallery = $wgCategoryMagicGallery && !$wgOut->mNoGallery;
+
+		$this->clearCategoryState();
+		$this->doCategoryQuery();
+		$this->finaliseCategoryState();
+
+		$r = $this->getCategoryTop() .
+			$this->getSubcategorySection() .
+			$this->getPagesSection() .
+			$this->getImageSection() .
+			$this->getCategoryBottom();
+
+		wfProfileOut( __METHOD__ );
+		return $r;
+	}
+
+	function clearCategoryState() {
+		$this->articles = array();
+		$this->articles_start_char = array();
+		$this->children = array();
+		$this->children_start_char = array();
+		if( $this->showGallery ) {
+			$this->gallery = new ImageGallery();
+			$this->gallery->setParsing();
+		}
+	}
+
+	function getSkin() {
+		if ( !$this->skin ) {
+			global $wgUser;
+			$this->skin = $wgUser->getSkin();
+		}
+		return $this->skin;
+	}
+
+	/**
+	 * Add a subcategory to the internal lists
+	 */
+	function addSubcategory( $title, $sortkey, $pageLength ) {
+		global $wgContLang;
+		// Subcategory; strip the 'Category' namespace from the link text.
+		$this->children[] = $this->getSkin()->makeKnownLinkObj( 
+			$title, $wgContLang->convertHtml( $title->getText() ) );
+
+		$this->children_start_char[] = $this->getSubcategorySortChar( $title, $sortkey );
+	}
+
+	/**
+	* Get the character to be used for sorting subcategories.
+	* If there's a link from Category:A to Category:B, the sortkey of the resulting
+	* entry in the categorylinks table is Category:A, not A, which it SHOULD be.
+	* Workaround: If sortkey == "Category:".$title, than use $title for sorting,
+	* else use sortkey...
+	*/
+	function getSubcategorySortChar( $title, $sortkey ) {
+		global $wgContLang;
+		
+		if( $title->getPrefixedText() == $sortkey ) {
+			$firstChar = $wgContLang->firstChar( $title->getDBkey() );
+		} else {
+			$firstChar = $wgContLang->firstChar( $sortkey );
+		}
+		
+		return $wgContLang->convert( $firstChar );
+	}
+
+	/**
+	 * Add a page in the image namespace
+	 */
+	function addImage( $title, $sortkey, $pageLength ) {
+		if ( $this->showGallery ) {
+			$image = new Image( $title );
+			if( $this->flip ) {
+				$this->gallery->insert( $image );
+			} else {
+				$this->gallery->add( $image );
+			}
+		} else {
+			$this->addPage( $title, $sortkey, $pageLength );
+		}
+	}
+
+	/**
+	 * Add a miscellaneous page
+	 */
+	function addPage( $title, $sortkey, $pageLength ) {
+		global $wgContLang;
+		$this->articles[] = $this->getSkin()->makeSizeLinkObj( 
+			$pageLength, $title, $wgContLang->convert( $title->getPrefixedText() ) 
+		);
+		$this->articles_start_char[] = $wgContLang->convert( $wgContLang->firstChar( $sortkey ) );
+	}
+
+	function finaliseCategoryState() {
+		if( $this->flip ) {
+			$this->children            = array_reverse( $this->children );
+			$this->children_start_char = array_reverse( $this->children_start_char );
+			$this->articles            = array_reverse( $this->articles );
+			$this->articles_start_char = array_reverse( $this->articles_start_char );
+		}
+	}
+
+	function doCategoryQuery() {
+		$dbr = wfGetDB( DB_SLAVE );
+		if( $this->from != '' ) {
+			$pageCondition = 'cl_sortkey >= ' . $dbr->addQuotes( $this->from );
+			$this->flip = false;
+		} elseif( $this->until != '' ) {
+			$pageCondition = 'cl_sortkey < ' . $dbr->addQuotes( $this->until );
+			$this->flip = true;
+		} else {
+			$pageCondition = '1 = 1';
+			$this->flip = false;
+		}
+		$res = $dbr->select(
+			array( 'page', 'categorylinks' ),
+			array( 'page_title', 'page_namespace', 'page_len', 'cl_sortkey' ),
+			array( $pageCondition,
+			       'cl_from          =  page_id',
+			       'cl_to'           => $this->title->getDBKey()),
+			       #'page_is_redirect' => 0),
+			#+ $pageCondition,
+			__METHOD__,
+			array( 'ORDER BY' => $this->flip ? 'cl_sortkey DESC' : 'cl_sortkey',
+			       'USE INDEX' => 'cl_sortkey', 
+			       'LIMIT'    => $this->limit + 1 ) );
+
+		$count = 0;
+		$this->nextPage = null;
+		while( $x = $dbr->fetchObject ( $res ) ) {
+			if( ++$count > $this->limit ) {
+				// We've reached the one extra which shows that there are
+				// additional pages to be had. Stop here...
+				$this->nextPage = $x->cl_sortkey;
+				break;
+			}
+
+			$title = Title::makeTitle( $x->page_namespace, $x->page_title );
+
+			if( $title->getNamespace() == NS_CATEGORY ) {
+				$this->addSubcategory( $title, $x->cl_sortkey, $x->page_len );
+			} elseif( $title->getNamespace() == NS_IMAGE ) {
+				$this->addImage( $title, $x->cl_sortkey, $x->page_len );
+			} else {
+				$this->addPage( $title, $x->cl_sortkey, $x->page_len );
+			}
+		}
+		$dbr->freeResult( $res );
+	}
+
+	function getCategoryTop() {
+		$r = "<br style=\"clear:both;\"/>\n";
+		if( $this->until != '' ) {
+			$r .= $this->pagingLinks( $this->title, $this->nextPage, $this->until, $this->limit );
+		} elseif( $this->nextPage != '' || $this->from != '' ) {
+			$r .= $this->pagingLinks( $this->title, $this->from, $this->nextPage, $this->limit );
+		}
+		return $r;
+	}
+
+	function getSubcategorySection() {
+		# Don't show subcategories section if there are none.
+		$r = '';
+		$c = count( $this->children );
+		if( $c > 0 ) {
+			# Showing subcategories
+			$r .= "<div id=\"mw-subcategories\">\n";
+			$r .= '<h2>' . wfMsg( 'subcategories' ) . "</h2>\n";
+			$r .= wfMsgExt( 'subcategorycount', array( 'parse' ), $c );
+			$r .= $this->formatList( $this->children, $this->children_start_char );
+			$r .= "\n</div>";
+		}
+		return $r;
+	}
+
+	function getPagesSection() {
+		$ti = htmlspecialchars( $this->title->getText() );
+		# Don't show articles section if there are none.
+		$r = '';
+		$c = count( $this->articles );
+		if( $c > 0 ) {
+			$r = "<div id=\"mw-pages\">\n";
+			$r .= '<h2>' . wfMsg( 'category_header', $ti ) . "</h2>\n";
+			$r .= wfMsgExt( 'categoryarticlecount', array( 'parse' ), $c );
+			$r .= $this->formatList( $this->articles, $this->articles_start_char );
+			$r .= "\n</div>";
+		}
+		return $r;
+	}
+
+	function getImageSection() {
+		if( $this->showGallery && ! $this->gallery->isEmpty() ) {
+			return "<div id=\"mw-category-media\">\n" .
+			'<h2>' . wfMsg( 'category-media-header', htmlspecialchars($this->title->getText()) ) . "</h2>\n" .
+			wfMsgExt( 'category-media-count', array( 'parse' ), $this->gallery->count() ) .
+			$this->gallery->toHTML() . "\n</div>";
+		} else {
+			return '';
+		}
+	}
+
+	function getCategoryBottom() {
+		if( $this->until != '' ) {
+			return $this->pagingLinks( $this->title, $this->nextPage, $this->until, $this->limit );
+		} elseif( $this->nextPage != '' || $this->from != '' ) {
+			return $this->pagingLinks( $this->title, $this->from, $this->nextPage, $this->limit );
+		} else {
+			return '';
+		}
+	}
+
+	/**
+	 * Format a list of articles chunked by letter, either as a
+	 * bullet list or a columnar format, depending on the length.
+	 *
+	 * @param array $articles
+	 * @param array $articles_start_char
+	 * @param int   $cutoff
+	 * @return string
+	 * @private
+	 */
+	function formatList( $articles, $articles_start_char, $cutoff = 6 ) {
+		if ( count ( $articles ) > $cutoff ) {
+			return $this->columnList( $articles, $articles_start_char );
+		} elseif ( count($articles) > 0) {
+			// for short lists of articles in categories.
+			return $this->shortList( $articles, $articles_start_char );
+		}
+		return '';
+	}
+
+	/**
+	 * Format a list of articles chunked by letter in a three-column
+	 * list, ordered vertically.
+	 *
+	 * @param array $articles
+	 * @param array $articles_start_char
+	 * @return string
+	 * @private
+	 */
+	function columnList( $articles, $articles_start_char ) {
+		// divide list into three equal chunks
+		$chunk = (int) (count ( $articles ) / 3);
+
+		// get and display header
+		$r = '<table width="100%"><tr valign="top">';
+
+		$prev_start_char = 'none';
+
+		// loop through the chunks
+		for($startChunk = 0, $endChunk = $chunk, $chunkIndex = 0;
+			$chunkIndex < 3;
+			$chunkIndex++, $startChunk = $endChunk, $endChunk += $chunk + 1)
+		{
+			$r .= "<td>\n";
+			$atColumnTop = true;
+
+			// output all articles in category
+			for ($index = $startChunk ;
+				$index < $endChunk && $index < count($articles);
+				$index++ )
+			{
+				// check for change of starting letter or begining of chunk
+				if ( ($index == $startChunk) ||
+					 ($articles_start_char[$index] != $articles_start_char[$index - 1]) )
+
+				{
+					if( $atColumnTop ) {
+						$atColumnTop = false;
+					} else {
+						$r .= "</ul>\n";
+					}
+					$cont_msg = "";
+					if ( $articles_start_char[$index] == $prev_start_char )
+						$cont_msg = wfMsgHtml('listingcontinuesabbrev');
+					$r .= "<h3>" . htmlspecialchars( $articles_start_char[$index] ) . "$cont_msg</h3>\n<ul>";
+					$prev_start_char = $articles_start_char[$index];
+				}
+
+				$r .= "<li>{$articles[$index]}</li>";
+			}
+			if( !$atColumnTop ) {
+				$r .= "</ul>\n";
+			}
+			$r .= "</td>\n";
+
+
+		}
+		$r .= '</tr></table>';
+		return $r;
+	}
+
+	/**
+	 * Format a list of articles chunked by letter in a bullet list.
+	 * @param array $articles
+	 * @param array $articles_start_char
+	 * @return string
+	 * @private
+	 */
+	function shortList( $articles, $articles_start_char ) {
+		$r = '<h3>' . htmlspecialchars( $articles_start_char[0] ) . "</h3>\n";
+		$r .= '<ul><li>'.$articles[0].'</li>';
+		for ($index = 1; $index < count($articles); $index++ )
+		{
+			if ($articles_start_char[$index] != $articles_start_char[$index - 1])
+			{
+				$r .= "</ul><h3>" . htmlspecialchars( $articles_start_char[$index] ) . "</h3>\n<ul>";
+			}
+
+			$r .= "<li>{$articles[$index]}</li>";
+		}
+		$r .= '</ul>';
+		return $r;
+	}
+
+	/**
+	 * @param Title  $title
+	 * @param string $first
+	 * @param string $last
+	 * @param int    $limit
+	 * @param array  $query - additional query options to pass
+	 * @return string
+	 * @private
+	 */
+	function pagingLinks( $title, $first, $last, $limit, $query = array() ) {
+		global $wgUser, $wgLang;
+		$sk = $this->getSkin();
+		$limitText = $wgLang->formatNum( $limit );
+
+		$prevLink = htmlspecialchars( wfMsg( 'prevn', $limitText ) );
+		if( $first != '' ) {
+			$prevLink = $sk->makeLinkObj( $title, $prevLink,
+				wfArrayToCGI( $query + array( 'until' => $first ) ) );
+		}
+		$nextLink = htmlspecialchars( wfMsg( 'nextn', $limitText ) );
+		if( $last != '' ) {
+			$nextLink = $sk->makeLinkObj( $title, $nextLink,
+				wfArrayToCGI( $query + array( 'from' => $last ) ) );
+		}
+
+		return "($prevLink) ($nextLink)";
+	}
+}
+
+
+?>
Index: /MediaWiki/branches/1.11/includes/Categoryfinder.php
===================================================================
--- /MediaWiki/branches/1.11/includes/Categoryfinder.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/Categoryfinder.php	(revision 1280)
@@ -0,0 +1,192 @@
+<?php
+
+/**
+ * The "Categoryfinder" class takes a list of articles, creates an internal
+ * representation of all their parent categories (as well as parents of
+ * parents etc.). From this representation, it determines which of these
+ * articles are in one or all of a given subset of categories.
+ *
+ * Example use :
+ * <code>
+ * 	# Determines whether the article with the page_id 12345 is in both
+ * 	# "Category 1" and "Category 2" or their subcategories, respectively
+ *
+ * 	$cf = new Categoryfinder ;
+ * 	$cf->seed (
+ * 		array ( 12345 ) ,
+ * 		array ( "Category 1","Category 2" ) ,
+ * 		"AND"
+ * 	) ;
+ * 	$a = $cf->run() ;
+ * 	print implode ( "," , $a ) ;
+ * </code>
+ *
+ */
+class Categoryfinder {
+
+	var $articles = array () ; # The original article IDs passed to the seed function
+	var $deadend = array () ; # Array of DBKEY category names for categories that don't have a page
+	var $parents = array () ; # Array of [ID => array()]
+	var $next = array () ; # Array of article/category IDs
+	var $targets = array () ; # Array of DBKEY category names
+	var $name2id = array () ;
+	var $mode ; # "AND" or "OR"
+	var $dbr ; # Read-DB slave
+
+	/**
+	 * Constructor (currently empty).
+	 */
+	function __construct() {
+	}
+
+	/**
+	 * Initializes the instance. Do this prior to calling run().
+	 * @param $article_ids Array of article IDs
+	 * @param $categories FIXME
+	 * @param $mode String: FIXME, default 'AND'.
+	 */
+	function seed ( $article_ids , $categories , $mode = "AND" ) {
+		$this->articles = $article_ids ;
+		$this->next = $article_ids ;
+		$this->mode = $mode ;
+
+		# Set the list of target categories; convert them to DBKEY form first
+		$this->targets = array () ;
+		foreach ( $categories AS $c ) {
+			$ct = Title::newFromText ( $c , NS_CATEGORY ) ;
+			$c = $ct->getDBkey () ;
+			$this->targets[$c] = $c ;
+		}
+	}
+
+	/**
+	 * Iterates through the parent tree starting with the seed values,
+	 * then checks the articles if they match the conditions
+	 * @return array of page_ids (those given to seed() that match the conditions)
+	 */
+	function run () {
+		$this->dbr = wfGetDB( DB_SLAVE );
+		while ( count ( $this->next ) > 0 ) {
+			$this->scan_next_layer () ;
+		}
+
+		# Now check if this applies to the individual articles
+		$ret = array () ;
+		foreach ( $this->articles AS $article ) {
+			$conds = $this->targets ;
+			if ( $this->check ( $article , $conds ) ) {
+				# Matches the conditions
+				$ret[] = $article ;
+			}
+		}
+		return $ret ;
+	}
+
+	/**
+	 * This functions recurses through the parent representation, trying to match the conditions
+	 * @param $id The article/category to check
+	 * @param $conds The array of categories to match
+	 * @return bool Does this match the conditions?
+	 */
+	function check ( $id , &$conds ) {
+		# Shortcut (runtime paranoia): No contitions=all matched
+		if ( count ( $conds ) == 0 ) return true ;
+
+		if ( !isset ( $this->parents[$id] ) ) return false ;
+
+		# iterate through the parents
+		foreach ( $this->parents[$id] AS $p ) {
+			$pname = $p->cl_to ;
+
+			# Is this a condition?
+			if ( isset ( $conds[$pname] ) ) {
+				# This key is in the category list!
+				if ( $this->mode == "OR" ) {
+					# One found, that's enough!
+					$conds = array () ;
+					return true ;
+				} else {
+					# Assuming "AND" as default
+					unset ( $conds[$pname] ) ;
+					if ( count ( $conds ) == 0 ) {
+						# All conditions met, done
+						return true ;
+					}
+				}
+			}
+
+			# Not done yet, try sub-parents
+			if ( !isset ( $this->name2id[$pname] ) ) {
+				# No sub-parent
+				continue ;
+			}
+			$done = $this->check ( $this->name2id[$pname] , $conds ) ;
+			if ( $done OR count ( $conds ) == 0 ) {
+				# Subparents have done it!
+				return true ;
+			}
+		}
+		return false ;
+	}
+
+	/**
+	 * Scans a "parent layer" of the articles/categories in $this->next
+	 */
+	function scan_next_layer () {
+		$fname = "Categoryfinder::scan_next_layer" ;
+
+		# Find all parents of the article currently in $this->next
+		$layer = array () ;
+		$res = $this->dbr->select(
+				/* FROM   */ 'categorylinks',
+				/* SELECT */ '*',
+				/* WHERE  */ array( 'cl_from' => $this->next ),
+				$fname."-1"
+		);
+		while ( $o = $this->dbr->fetchObject( $res ) ) {
+			$k = $o->cl_to ;
+
+			# Update parent tree
+			if ( !isset ( $this->parents[$o->cl_from] ) ) {
+				$this->parents[$o->cl_from] = array () ;
+			}
+			$this->parents[$o->cl_from][$k] = $o ;
+
+			# Ignore those we already have
+			if ( in_array ( $k , $this->deadend ) ) continue ;
+			if ( isset ( $this->name2id[$k] ) ) continue ;
+
+			# Hey, new category!
+			$layer[$k] = $k ;
+		}
+		$this->dbr->freeResult( $res ) ;
+
+		$this->next = array() ;
+
+		# Find the IDs of all category pages in $layer, if they exist
+		if ( count ( $layer ) > 0 ) {
+			$res = $this->dbr->select(
+					/* FROM   */ 'page',
+					/* SELECT */ 'page_id,page_title',
+					/* WHERE  */ array( 'page_namespace' => NS_CATEGORY , 'page_title' => $layer ),
+					$fname."-2"
+			);
+			while ( $o = $this->dbr->fetchObject( $res ) ) {
+				$id = $o->page_id ;
+				$name = $o->page_title ;
+				$this->name2id[$name] = $id ;
+				$this->next[] = $id ;
+				unset ( $layer[$name] ) ;
+			}
+			$this->dbr->freeResult( $res ) ;
+			}
+
+		# Mark dead ends
+		foreach ( $layer AS $v ) {
+			$this->deadend[$v] = $v ;
+		}
+	}
+
+} # END OF CLASS "Categoryfinder"
+
+?>
Index: /MediaWiki/branches/1.11/includes/ChangesList.php
===================================================================
--- /MediaWiki/branches/1.11/includes/ChangesList.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/ChangesList.php	(revision 1280)
@@ -0,0 +1,706 @@
+<?php
+
+/**
+ * @todo document
+ */
+class RCCacheEntry extends RecentChange
+{
+	var $secureName, $link;
+	var $curlink , $difflink, $lastlink , $usertalklink , $versionlink ;
+	var $userlink, $timestamp, $watched;
+
+	function newFromParent( $rc ) {
+		$rc2 = new RCCacheEntry;
+		$rc2->mAttribs = $rc->mAttribs;
+		$rc2->mExtra = $rc->mExtra;
+		return $rc2;
+	}
+} ;
+
+/**
+ * Class to show various lists of changes:
+ * - what links here
+ * - related changes
+ * - recent changes
+ */
+class ChangesList {
+	# Called by history lists and recent changes
+	#
+
+	/** @todo document */
+	function __construct( &$skin ) {
+		$this->skin =& $skin;
+		$this->preCacheMessages();
+	}
+
+	/**
+	 * Fetch an appropriate changes list class for the specified user
+	 * Some users might want to use an enhanced list format, for instance
+	 *
+	 * @param $user User to fetch the list class for
+	 * @return ChangesList derivative
+	 */
+	public static function newFromUser( &$user ) {
+		$sk = $user->getSkin();
+		$list = NULL;
+		if( wfRunHooks( 'FetchChangesList', array( &$user, &$sk, &$list ) ) ) {
+			return $user->getOption( 'usenewrc' ) ? new EnhancedChangesList( $sk ) : new OldChangesList( $sk );
+		} else {
+			return $list;
+		}
+	}
+
+	/**
+	 * As we use the same small set of messages in various methods and that
+	 * they are called often, we call them once and save them in $this->message
+	 */
+	function preCacheMessages() {
+		// Precache various messages
+		if( !isset( $this->message ) ) {
+			foreach( explode(' ', 'cur diff hist minoreditletter newpageletter last '.
+				'blocklink history boteditletter' ) as $msg ) {
+				$this->message[$msg] = wfMsgExt( $msg, array( 'escape') );
+			}
+		}
+	}
+
+
+	/**
+	 * Returns the appropriate flags for new page, minor change and patrolling
+	 */
+	function recentChangesFlags( $new, $minor, $patrolled, $nothing = '&nbsp;', $bot = false ) {
+		$f = $new ? '<span class="newpage">' . $this->message['newpageletter'] . '</span>'
+				: $nothing;
+		$f .= $minor ? '<span class="minor">' . $this->message['minoreditletter'] . '</span>'
+				: $nothing;
+		$f .= $bot ? '<span class="bot">' . $this->message['boteditletter'] . '</span>' : $nothing;
+		$f .= $patrolled ? '<span class="unpatrolled">!</span>' : $nothing;
+		return $f;
+	}
+
+	/**
+	 * Returns text for the start of the tabular part of RC
+	 */
+	function beginRecentChangesList() {
+		$this->rc_cache = array();
+		$this->rcMoveIndex = 0;
+		$this->rcCacheIndex = 0;
+		$this->lastdate = '';
+		$this->rclistOpen = false;
+		return '';
+	}
+
+	/**
+ 	 * Returns text for the end of RC
+	 */
+	function endRecentChangesList() {
+		if( $this->rclistOpen ) {
+			return "</ul>\n";
+		} else {
+			return '';
+		}
+	}
+
+
+	function insertMove( &$s, $rc ) {
+		# Diff
+		$s .= '(' . $this->message['diff'] . ') (';
+		# Hist
+		$s .= $this->skin->makeKnownLinkObj( $rc->getMovedToTitle(), $this->message['hist'], 'action=history' ) .
+			') . . ';
+
+		# "[[x]] moved to [[y]]"
+		$msg = ( $rc->mAttribs['rc_type'] == RC_MOVE ) ? '1movedto2' : '1movedto2_redir';
+		$s .= wfMsg( $msg, $this->skin->makeKnownLinkObj( $rc->getTitle(), '', 'redirect=no' ),
+			$this->skin->makeKnownLinkObj( $rc->getMovedToTitle(), '' ) );
+	}
+
+	function insertDateHeader(&$s, $rc_timestamp) {
+		global $wgLang;
+
+		# Make date header if necessary
+		$date = $wgLang->date( $rc_timestamp, true, true );
+		$s = '';
+		if( $date != $this->lastdate ) {
+			if( '' != $this->lastdate ) {
+				$s .= "</ul>\n";
+			}
+			$s .= '<h4>'.$date."</h4>\n<ul class=\"special\">";
+			$this->lastdate = $date;
+			$this->rclistOpen = true;
+		}
+	}
+
+	function insertLog(&$s, $title, $logtype) {
+		$logname = LogPage::logName( $logtype );
+		$s .= '(' . $this->skin->makeKnownLinkObj($title, $logname ) . ')';
+	}
+
+
+	function insertDiffHist(&$s, &$rc, $unpatrolled) {
+		# Diff link
+		if( $rc->mAttribs['rc_type'] == RC_NEW || $rc->mAttribs['rc_type'] == RC_LOG ) {
+			$diffLink = $this->message['diff'];
+		} else {
+			$rcidparam = $unpatrolled
+				? array( 'rcid' => $rc->mAttribs['rc_id'] )
+				: array();
+			$diffLink = $this->skin->makeKnownLinkObj( $rc->getTitle(), $this->message['diff'],
+				wfArrayToCGI( array(
+					'curid' => $rc->mAttribs['rc_cur_id'],
+					'diff'  => $rc->mAttribs['rc_this_oldid'],
+					'oldid' => $rc->mAttribs['rc_last_oldid'] ),
+					$rcidparam ),
+				'', '', ' tabindex="'.$rc->counter.'"');
+		}
+		$s .= '('.$diffLink.') (';
+
+		# History link
+		$s .= $this->skin->makeKnownLinkObj( $rc->getTitle(), $this->message['hist'],
+			wfArrayToCGI( array(
+				'curid' => $rc->mAttribs['rc_cur_id'],
+				'action' => 'history' ) ) );
+		$s .= ') . . ';
+	}
+
+	function insertArticleLink(&$s, &$rc, $unpatrolled, $watched) {
+		# Article link
+		# If it's a new article, there is no diff link, but if it hasn't been
+		# patrolled yet, we need to give users a way to do so
+		$params = ( $unpatrolled && $rc->mAttribs['rc_type'] == RC_NEW )
+			? 'rcid='.$rc->mAttribs['rc_id']
+			: '';
+		$articlelink = ' '. $this->skin->makeKnownLinkObj( $rc->getTitle(), '', $params );
+		if($watched) $articlelink = '<strong>'.$articlelink.'</strong>';
+		global $wgContLang;
+		$articlelink .= $wgContLang->getDirMark();
+
+		$s .= ' '.$articlelink;
+	}
+
+	function insertTimestamp(&$s, $rc) {
+		global $wgLang;
+		# Timestamp
+		$s .= '; ' . $wgLang->time( $rc->mAttribs['rc_timestamp'], true, true ) . ' . . ';
+	}
+
+	/** Insert links to user page, user talk page and eventually a blocking link */
+	function insertUserRelatedLinks(&$s, &$rc) {
+		$s .= $this->skin->userLink( $rc->mAttribs['rc_user'], $rc->mAttribs['rc_user_text'] );
+		$s .= $this->skin->userToolLinks( $rc->mAttribs['rc_user'], $rc->mAttribs['rc_user_text'] );
+	}
+
+	/** insert a formatted comment */
+	function insertComment(&$s, &$rc) {
+		# Add comment
+		if( $rc->mAttribs['rc_type'] != RC_MOVE && $rc->mAttribs['rc_type'] != RC_MOVE_OVER_REDIRECT ) {
+			$s .= $this->skin->commentBlock( $rc->mAttribs['rc_comment'], $rc->getTitle() );
+		}
+	}
+
+	/**
+	 * Check whether to enable recent changes patrol features
+	 * @return bool
+	 */
+	function usePatrol() {
+		global $wgUseRCPatrol, $wgUser;
+		return( $wgUseRCPatrol && $wgUser->isAllowed( 'patrol' ) );
+	}
+
+	/**
+	 * Returns the string which indicates the number of watching users
+	 */
+	function numberofWatchingusers( $count ) {
+		global $wgLang;
+		static $cache = array();
+		if ( $count > 0 ) {
+			if ( !isset( $cache[$count] ) ) {
+				$cache[$count] = wfMsgExt('number_of_watching_users_RCview',
+					array('parsemag', 'escape'), $wgLang->formatNum($count));
+			}
+			return $cache[$count];
+		} else {
+			return '';
+		}
+	}
+}
+
+
+/**
+ * Generate a list of changes using the good old system (no javascript)
+ */
+class OldChangesList extends ChangesList {
+	/**
+	 * Format a line using the old system (aka without any javascript).
+	 */
+	function recentChangesLine( &$rc, $watched = false ) {
+		global $wgContLang, $wgRCShowChangedSize;
+
+		$fname = 'ChangesList::recentChangesLineOld';
+		wfProfileIn( $fname );
+
+		# Extract DB fields into local scope
+		// FIXME: Would be good to replace this extract() call with something that explicitly initializes local variables.
+		extract( $rc->mAttribs );
+
+		# Should patrol-related stuff be shown?
+		$unpatrolled = $this->usePatrol() && $rc_patrolled == 0;
+
+		$this->insertDateHeader($s,$rc_timestamp);
+
+		$s .= '<li>';
+
+		// moved pages
+		if( $rc_type == RC_MOVE || $rc_type == RC_MOVE_OVER_REDIRECT ) {
+			$this->insertMove( $s, $rc );
+		// log entries
+		} elseif ( $rc_namespace == NS_SPECIAL ) {
+			list( $specialName, $specialSubpage ) = SpecialPage::resolveAliasWithSubpage( $rc_title );
+			if ( $specialName == 'Log' ) {
+				$this->insertLog( $s, $rc->getTitle(), $specialSubpage );
+			} else {
+				wfDebug( "Unexpected special page in recentchanges\n" );
+			}
+		// all other stuff
+		} else {
+			wfProfileIn($fname.'-page');
+
+			$this->insertDiffHist($s, $rc, $unpatrolled);
+
+			# M, N, b and ! (minor, new, bot and unpatrolled)
+			$s .= ' ' . $this->recentChangesFlags( $rc_type == RC_NEW, $rc_minor, $unpatrolled, '', $rc_bot );
+			$this->insertArticleLink($s, $rc, $unpatrolled, $watched);
+
+			wfProfileOut($fname.'-page');
+		}
+
+		wfProfileIn( $fname.'-rest' );
+
+		$this->insertTimestamp($s,$rc);
+
+		if( $wgRCShowChangedSize ) {
+			$s .= ( $rc->getCharacterDifference() == '' ? '' : $rc->getCharacterDifference() . ' . . ' );
+		}
+
+		$this->insertUserRelatedLinks($s,$rc);
+		$this->insertComment($s, $rc);
+
+		$s .=  rtrim(' ' . $this->numberofWatchingusers($rc->numberofWatchingusers));
+
+		$s .= "</li>\n";
+
+		wfProfileOut( $fname.'-rest' );
+
+		wfProfileOut( $fname );
+		return $s;
+	}
+}
+
+
+/**
+ * Generate a list of changes using an Enhanced system (use javascript).
+ */
+class EnhancedChangesList extends ChangesList {
+	/**
+	 * Format a line for enhanced recentchange (aka with javascript and block of lines).
+	 */
+	function recentChangesLine( &$baseRC, $watched = false ) {
+		global $wgLang, $wgContLang;
+
+		# Create a specialised object
+		$rc = RCCacheEntry::newFromParent( $baseRC );
+
+		# Extract fields from DB into the function scope (rc_xxxx variables)
+		// FIXME: Would be good to replace this extract() call with something that explicitly initializes local variables.
+		extract( $rc->mAttribs );
+		$curIdEq = 'curid=' . $rc_cur_id;
+
+		# If it's a new day, add the headline and flush the cache
+		$date = $wgLang->date( $rc_timestamp, true);
+		$ret = '';
+		if( $date != $this->lastdate ) {
+			# Process current cache
+			$ret = $this->recentChangesBlock();
+			$this->rc_cache = array();
+			$ret .= "<h4>{$date}</h4>\n";
+			$this->lastdate = $date;
+		}
+
+		# Should patrol-related stuff be shown?
+		if( $this->usePatrol() ) {
+		  	$rc->unpatrolled = !$rc_patrolled;
+		} else {
+			$rc->unpatrolled = false;
+		}
+
+		# Make article link
+		if( $rc_type == RC_MOVE || $rc_type == RC_MOVE_OVER_REDIRECT ) {
+			$msg = ( $rc_type == RC_MOVE ) ? "1movedto2" : "1movedto2_redir";
+			$clink = wfMsg( $msg, $this->skin->makeKnownLinkObj( $rc->getTitle(), '', 'redirect=no' ),
+			  $this->skin->makeKnownLinkObj( $rc->getMovedToTitle(), '' ) );
+		} elseif( $rc_namespace == NS_SPECIAL ) {
+			list( $specialName, $logtype ) = SpecialPage::resolveAliasWithSubpage( $rc_title );
+			if ( $specialName == 'Log' ) {
+				# Log updates, etc
+				$logname = LogPage::logName( $logtype );
+				$clink = '(' . $this->skin->makeKnownLinkObj( $rc->getTitle(), $logname ) . ')';
+			} else {
+				wfDebug( "Unexpected special page in recentchanges\n" );
+				$clink = '';
+			}
+		} elseif( $rc->unpatrolled && $rc_type == RC_NEW ) {
+			# Unpatrolled new page, give rc_id in query
+			$clink = $this->skin->makeKnownLinkObj( $rc->getTitle(), '', "rcid={$rc_id}" );
+		} else {
+			$clink = $this->skin->makeKnownLinkObj( $rc->getTitle(), '' );
+		}
+
+		$time = $wgContLang->time( $rc_timestamp, true, true );
+		$rc->watched = $watched;
+		$rc->link = $clink;
+		$rc->timestamp = $time;
+		$rc->numberofWatchingusers = $baseRC->numberofWatchingusers;
+
+		# Make "cur" and "diff" links
+		if( $rc->unpatrolled ) {
+			$rcIdQuery = "&rcid={$rc_id}";
+		} else {
+			$rcIdQuery = '';
+		}
+		$querycur = $curIdEq."&diff=0&oldid=$rc_this_oldid";
+		$querydiff = $curIdEq."&diff=$rc_this_oldid&oldid=$rc_last_oldid$rcIdQuery";
+		$aprops = ' tabindex="'.$baseRC->counter.'"';
+		$curLink = $this->skin->makeKnownLinkObj( $rc->getTitle(), $this->message['cur'], $querycur, '' ,'', $aprops );
+		if( $rc_type == RC_NEW || $rc_type == RC_LOG || $rc_type == RC_MOVE || $rc_type == RC_MOVE_OVER_REDIRECT ) {
+			if( $rc_type != RC_NEW ) {
+				$curLink = $this->message['cur'];
+			}
+			$diffLink = $this->message['diff'];
+		} else {
+			$diffLink = $this->skin->makeKnownLinkObj( $rc->getTitle(), $this->message['diff'], $querydiff, '' ,'', $aprops );
+		}
+
+		# Make "last" link
+		if( $rc_last_oldid == 0 || $rc_type == RC_LOG || $rc_type == RC_MOVE || $rc_type == RC_MOVE_OVER_REDIRECT ) {
+			$lastLink = $this->message['last'];
+		} else {
+			$lastLink = $this->skin->makeKnownLinkObj( $rc->getTitle(), $this->message['last'],
+			  $curIdEq.'&diff='.$rc_this_oldid.'&oldid='.$rc_last_oldid . $rcIdQuery );
+		}
+
+		$rc->userlink = $this->skin->userLink( $rc_user, $rc_user_text );
+
+		$rc->lastlink = $lastLink;
+		$rc->curlink  = $curLink;
+		$rc->difflink = $diffLink;
+
+		$rc->usertalklink = $this->skin->userToolLinks( $rc_user, $rc_user_text );
+
+		# Put accumulated information into the cache, for later display
+		# Page moves go on their own line
+		$title = $rc->getTitle();
+		$secureName = $title->getPrefixedDBkey();
+		if( $rc_type == RC_MOVE || $rc_type == RC_MOVE_OVER_REDIRECT ) {
+			# Use an @ character to prevent collision with page names
+			$this->rc_cache['@@' . ($this->rcMoveIndex++)] = array($rc);
+		} else {
+			if( !isset ( $this->rc_cache[$secureName] ) ) {
+				$this->rc_cache[$secureName] = array();
+			}
+			array_push( $this->rc_cache[$secureName], $rc );
+		}
+		return $ret;
+	}
+
+	/**
+	 * Enhanced RC group
+	 */
+	function recentChangesBlockGroup( $block ) {
+		global $wgLang, $wgContLang, $wgRCShowChangedSize;
+		$r = '';
+
+		# Collate list of users
+		$isnew = false;
+		$unpatrolled = false;
+		$userlinks = array();
+		foreach( $block as $rcObj ) {
+			$oldid = $rcObj->mAttribs['rc_last_oldid'];
+			if( $rcObj->mAttribs['rc_new'] ) {
+				$isnew = true;
+			}
+			$u = $rcObj->userlink;
+			if( !isset( $userlinks[$u] ) ) {
+				$userlinks[$u] = 0;
+			}
+			if( $rcObj->unpatrolled ) {
+				$unpatrolled = true;
+			}
+			$bot = $rcObj->mAttribs['rc_bot'];
+			$userlinks[$u]++;
+		}
+
+		# Sort the list and convert to text
+		krsort( $userlinks );
+		asort( $userlinks );
+		$users = array();
+		foreach( $userlinks as $userlink => $count) {
+			$text = $userlink;
+			$text .= $wgContLang->getDirMark();
+			if( $count > 1 ) {
+				$text .= ' ('.$count.'&times;)';
+			}
+			array_push( $users, $text );
+		}
+
+		$users = ' <span class="changedby">['.implode('; ',$users).']</span>';
+
+		# Arrow
+		$rci = 'RCI'.$this->rcCacheIndex;
+		$rcl = 'RCL'.$this->rcCacheIndex;
+		$rcm = 'RCM'.$this->rcCacheIndex;
+		$toggleLink = "javascript:toggleVisibility('$rci','$rcm','$rcl')";
+		$tl  = '<span id="'.$rcm.'"><a href="'.$toggleLink.'">' . $this->sideArrow() . '</a></span>';
+		$tl .= '<span id="'.$rcl.'" style="display:none"><a href="'.$toggleLink.'">' . $this->downArrow() . '</a></span>';
+		$r .= $tl;
+
+		# Main line
+		$r .= '<tt>';
+		$r .= $this->recentChangesFlags( $isnew, false, $unpatrolled, '&nbsp;', $bot );
+
+		# Timestamp
+		$r .= ' '.$block[0]->timestamp.' </tt>';
+
+		# Article link
+		$r .= $this->maybeWatchedLink( $block[0]->link, $block[0]->watched );
+		$r .= $wgContLang->getDirMark();
+
+		$curIdEq = 'curid=' . $block[0]->mAttribs['rc_cur_id'];
+		$currentRevision = $block[0]->mAttribs['rc_this_oldid'];
+		if( $block[0]->mAttribs['rc_type'] != RC_LOG ) {
+			# Changes
+
+			$n = count($block);
+			static $nchanges = array();
+			if ( !isset( $nchanges[$n] ) ) {
+				$nchanges[$n] = wfMsgExt( 'nchanges', array( 'parsemag', 'escape'),
+					$wgLang->formatNum( $n ) );
+			}
+
+			$r .= ' (';
+
+			if( $isnew ) {
+				$r .= $nchanges[$n];
+			} else {
+				$r .= $this->skin->makeKnownLinkObj( $block[0]->getTitle(),
+					$nchanges[$n], $curIdEq."&diff=$currentRevision&oldid=$oldid" );
+			}
+
+			$r .= ') . . ';
+
+			if( $wgRCShowChangedSize ) {
+				# Character difference
+				$chardiff = $rcObj->getCharacterDifference( $block[ count( $block ) - 1 ]->mAttribs['rc_old_len'],
+						$block[0]->mAttribs['rc_new_len'] );
+				if( $chardiff == '' ) {
+					$r .= ' (';
+				} else {
+					$r .= ' ' . $chardiff. ' . . ';
+				}
+			}	
+
+			# History
+			$r .= '(' . $this->skin->makeKnownLinkObj( $block[0]->getTitle(),
+				$this->message['history'], $curIdEq.'&action=history' );
+			$r .= ')';
+		}
+
+		$r .= $users;
+
+		$r .= $this->numberofWatchingusers($block[0]->numberofWatchingusers);
+		$r .= "<br />\n";
+
+		# Sub-entries
+		$r .= '<div id="'.$rci.'" style="display:none">';
+		foreach( $block as $rcObj ) {
+			# Get rc_xxxx variables
+			// FIXME: Would be good to replace this extract() call with something that explicitly initializes local variables.
+			extract( $rcObj->mAttribs );
+
+			$r .= $this->spacerArrow();
+			$r .= '<tt>&nbsp; &nbsp; &nbsp; &nbsp;';
+			$r .= $this->recentChangesFlags( $rc_new, $rc_minor, $rcObj->unpatrolled, '&nbsp;', $rc_bot );
+			$r .= '&nbsp;</tt>';
+
+			$o = '';
+			if( $rc_this_oldid != 0 ) {
+				$o = 'oldid='.$rc_this_oldid;
+			}
+			if( $rc_type == RC_LOG ) {
+				$link = $rcObj->timestamp;
+			} else {
+				$link = $this->skin->makeKnownLinkObj( $rcObj->getTitle(), $rcObj->timestamp, $curIdEq.'&'.$o );
+			}
+			$link = '<tt>'.$link.'</tt>';
+
+			$r .= $link;
+			$r .= ' (';
+			$r .= $rcObj->curlink;
+			$r .= '; ';
+			$r .= $rcObj->lastlink;
+			$r .= ') . . ';
+
+			# Character diff
+			if( $wgRCShowChangedSize ) {
+				$r .= ( $rcObj->getCharacterDifference() == '' ? '' : $rcObj->getCharacterDifference() . ' . . ' ) ;
+			}
+
+			$r .= $rcObj->userlink;
+			$r .= $rcObj->usertalklink;
+			$r .= $this->skin->commentBlock( $rc_comment, $rcObj->getTitle() );
+			$r .= "<br />\n";
+		}
+		$r .= "</div>\n";
+
+		$this->rcCacheIndex++;
+		return $r;
+	}
+
+	function maybeWatchedLink( $link, $watched=false ) {
+		if( $watched ) {
+			// FIXME: css style might be more appropriate
+			return '<strong>' . $link . '</strong>';
+		} else {
+			return $link;
+		}
+	}
+
+	/**
+	 * Generate HTML for an arrow or placeholder graphic
+	 * @param string $dir one of '', 'd', 'l', 'r'
+	 * @param string $alt text
+	 * @return string HTML <img> tag
+	 * @access private
+	 */
+	function arrow( $dir, $alt='' ) {
+		global $wgStylePath;
+		$encUrl = htmlspecialchars( $wgStylePath . '/common/images/Arr_' . $dir . '.png' );
+		$encAlt = htmlspecialchars( $alt );
+		return "<img src=\"$encUrl\" width=\"12\" height=\"12\" alt=\"$encAlt\" />";
+	}
+
+	/**
+	 * Generate HTML for a right- or left-facing arrow,
+	 * depending on language direction.
+	 * @return string HTML <img> tag
+	 * @access private
+	 */
+	function sideArrow() {
+		global $wgContLang;
+		$dir = $wgContLang->isRTL() ? 'l' : 'r';
+		return $this->arrow( $dir, '+' );
+	}
+
+	/**
+	 * Generate HTML for a down-facing arrow
+	 * depending on language direction.
+	 * @return string HTML <img> tag
+	 * @access private
+	 */
+	function downArrow() {
+		return $this->arrow( 'd', '-' );
+	}
+
+	/**
+	 * Generate HTML for a spacer image
+	 * @return string HTML <img> tag
+	 * @access private
+	 */
+	function spacerArrow() {
+		return $this->arrow( '', ' ' );
+	}
+
+	/**
+	 * Enhanced RC ungrouped line.
+	 * @return string a HTML formated line (generated using $r)
+	 */
+	function recentChangesBlockLine( $rcObj ) {
+		global $wgContLang, $wgRCShowChangedSize;
+
+		# Get rc_xxxx variables
+		// FIXME: Would be good to replace this extract() call with something that explicitly initializes local variables.
+		extract( $rcObj->mAttribs );
+		$curIdEq = 'curid='.$rc_cur_id;
+
+		$r = '';
+
+		# Spacer image
+		$r .= $this->spacerArrow();
+
+		# Flag and Timestamp
+		$r .= '<tt>';
+
+		if( $rc_type == RC_MOVE || $rc_type == RC_MOVE_OVER_REDIRECT ) {
+			$r .= '&nbsp;&nbsp;&nbsp;';
+		} else {
+			$r .= $this->recentChangesFlags( $rc_type == RC_NEW, $rc_minor, $rcObj->unpatrolled, '&nbsp;', $rc_bot );
+		}
+		$r .= ' '.$rcObj->timestamp.' </tt>';
+
+		# Article link
+		$r .= $this->maybeWatchedLink( $rcObj->link, $rcObj->watched );
+
+		# Diff
+		$r .= ' ('. $rcObj->difflink .'; ';
+
+		# Hist
+		$r .= $this->skin->makeKnownLinkObj( $rcObj->getTitle(), wfMsg( 'hist' ), $curIdEq.'&action=history' ) . ') . . ';
+
+		# Character diff
+		if( $wgRCShowChangedSize ) {
+			$r .= ( $rcObj->getCharacterDifference() == '' ? '' : '&nbsp;' . $rcObj->getCharacterDifference() . ' . . ' ) ;
+		}
+
+		# User/talk
+		$r .= $rcObj->userlink . $rcObj->usertalklink;
+
+		# Comment
+		if( $rc_type != RC_MOVE && $rc_type != RC_MOVE_OVER_REDIRECT ) {
+			$r .= $this->skin->commentBlock( $rc_comment, $rcObj->getTitle() );
+		}
+
+		$r .= $this->numberofWatchingusers($rcObj->numberofWatchingusers);
+
+		$r .= "<br />\n";
+		return $r;
+	}
+
+	/**
+	 * If enhanced RC is in use, this function takes the previously cached
+	 * RC lines, arranges them, and outputs the HTML
+	 */
+	function recentChangesBlock() {
+		if( count ( $this->rc_cache ) == 0 ) {
+			return '';
+		}
+		$blockOut = '';
+		foreach( $this->rc_cache as $block ) {
+			if( count( $block ) < 2 ) {
+				$blockOut .= $this->recentChangesBlockLine( array_shift( $block ) );
+			} else {
+				$blockOut .= $this->recentChangesBlockGroup( $block );
+			}
+		}
+
+		return '<div>'.$blockOut.'</div>';
+	}
+
+	/**
+ 	 * Returns text for the end of RC
+	 * If enhanced RC is in use, returns pretty much all the text
+	 */
+	function endRecentChangesList() {
+		return $this->recentChangesBlock() . parent::endRecentChangesList();
+	}
+
+}
+?>
Index: /MediaWiki/branches/1.11/includes/CoreParserFunctions.php
===================================================================
--- /MediaWiki/branches/1.11/includes/CoreParserFunctions.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/CoreParserFunctions.php	(revision 1280)
@@ -0,0 +1,196 @@
+<?php
+
+/**
+ * Various core parser functions, registered in Parser::firstCallInit()
+ * @addtogroup Parser
+ */
+class CoreParserFunctions {
+	static function intFunction( $parser, $part1 = '' /*, ... */ ) {
+		if ( strval( $part1 ) !== '' ) {
+			$args = array_slice( func_get_args(), 2 );
+			return wfMsgReal( $part1, $args, true );
+		} else {
+			return array( 'found' => false );
+		}
+	}
+
+	static function ns( $parser, $part1 = '' ) {
+		global $wgContLang;
+		$found = false;
+		if ( intval( $part1 ) || $part1 == "0" ) {
+			$text = $wgContLang->getNsText( intval( $part1 ) );
+			$found = true;
+		} else {
+			$param = str_replace( ' ', '_', strtolower( $part1 ) );
+			$index = Namespace::getCanonicalIndex( strtolower( $param ) );
+			if ( !is_null( $index ) ) {
+				$text = $wgContLang->getNsText( $index );
+				$found = true;
+			}
+		}
+		if ( $found ) {
+			return $text;
+		} else {
+			return array( 'found' => false );
+		}
+	}
+
+	static function urlencode( $parser, $s = '' ) {
+		return urlencode( $s );
+	}
+
+	static function lcfirst( $parser, $s = '' ) {
+		global $wgContLang;
+		return $wgContLang->lcfirst( $s );
+	}
+
+	static function ucfirst( $parser, $s = '' ) {
+		global $wgContLang;
+		return $wgContLang->ucfirst( $s );
+	}
+
+	static function lc( $parser, $s = '' ) {
+		global $wgContLang;
+		return $wgContLang->lc( $s );
+	}
+
+	static function uc( $parser, $s = '' ) {
+		global $wgContLang;
+		return $wgContLang->uc( $s );
+	}
+
+	static function localurl( $parser, $s = '', $arg = null ) { return self::urlFunction( 'getLocalURL', $s, $arg ); }
+	static function localurle( $parser, $s = '', $arg = null ) { return self::urlFunction( 'escapeLocalURL', $s, $arg ); }
+	static function fullurl( $parser, $s = '', $arg = null ) { return self::urlFunction( 'getFullURL', $s, $arg ); }
+	static function fullurle( $parser, $s = '', $arg = null ) { return self::urlFunction( 'escapeFullURL', $s, $arg ); }
+
+	static function urlFunction( $func, $s = '', $arg = null ) {
+		$title = Title::newFromText( $s );
+		# Due to order of execution of a lot of bits, the values might be encoded
+		# before arriving here; if that's true, then the title can't be created
+		# and the variable will fail. If we can't get a decent title from the first
+		# attempt, url-decode and try for a second.
+		if( is_null( $title ) )
+			$title = Title::newFromUrl( urldecode( $s ) );
+		if ( !is_null( $title ) ) {
+			if ( !is_null( $arg ) ) {
+				$text = $title->$func( $arg );
+			} else {
+				$text = $title->$func();
+			}
+			return $text;
+		} else {
+			return array( 'found' => false );
+		}
+	}
+
+	static function formatNum( $parser, $num = '' ) {
+		return $parser->getFunctionLang()->formatNum( $num );
+	}
+
+	static function grammar( $parser, $case = '', $word = '' ) {
+		return $parser->getFunctionLang()->convertGrammar( $word, $case );
+	}
+
+	static function plural( $parser, $text = '', $arg0 = null, $arg1 = null, $arg2 = null, $arg3 = null, $arg4 = null ) {
+		$text = $parser->getFunctionLang()->parseFormattedNumber( $text );
+		return $parser->getFunctionLang()->convertPlural( $text, $arg0, $arg1, $arg2, $arg3, $arg4 );
+	}
+
+	static function displaytitle( $parser, $param = '' ) {
+		$parserOptions = new ParserOptions;
+		$local_parser = clone $parser;
+		$t2 = $local_parser->parse ( $param, $parser->mTitle, $parserOptions, false );
+		$parser->mOutput->mHTMLtitle = $t2->GetText();
+
+		# Add subtitle
+		$t = $parser->mTitle->getPrefixedText();
+		$parser->mOutput->mSubtitle .= wfMsg('displaytitle', $t);
+		return '';
+	}
+
+	static function isRaw( $param ) {
+		static $mwRaw;
+		if ( !$mwRaw ) {
+			$mwRaw =& MagicWord::get( 'rawsuffix' );
+		}
+		if ( is_null( $param ) ) {
+			return false;
+		} else {
+			return $mwRaw->match( $param );
+		}
+	}
+
+	static function statisticsFunction( $func, $raw = null ) {
+		if ( self::isRaw( $raw ) ) {
+			return call_user_func( array( 'SiteStats', $func ) );
+		} else {
+			global $wgContLang;
+			return $wgContLang->formatNum( call_user_func( array( 'SiteStats', $func ) ) );
+		}
+	}
+
+	static function numberofpages( $parser, $raw = null ) { return self::statisticsFunction( 'pages', $raw ); }
+	static function numberofusers( $parser, $raw = null ) { return self::statisticsFunction( 'users', $raw ); }
+	static function numberofarticles( $parser, $raw = null ) { return self::statisticsFunction( 'articles', $raw ); }
+	static function numberoffiles( $parser, $raw = null ) { return self::statisticsFunction( 'images', $raw ); }
+	static function numberofadmins( $parser, $raw = null ) { return self::statisticsFunction( 'admins', $raw ); }
+	static function numberofedits( $parser, $raw = null ) { return self::statisticsFunction( 'edits', $raw ); }
+
+	static function pagesinnamespace( $parser, $namespace = 0, $raw = null ) {
+		$count = SiteStats::pagesInNs( intval( $namespace ) );
+		if ( self::isRaw( $raw ) ) {
+			global $wgContLang;
+			return $wgContLang->formatNum( $count );
+		} else {
+			return $count;
+		}
+	}
+
+	static function language( $parser, $arg = '' ) {
+		global $wgContLang;
+		$lang = $wgContLang->getLanguageName( strtolower( $arg ) );
+		return $lang != '' ? $lang : $arg;
+	}
+
+	static function pad( $string = '', $length = 0, $char = 0, $direction = STR_PAD_RIGHT ) {
+		$length = min( max( $length, 0 ), 500 );
+		$char = substr( $char, 0, 1 );
+		return ( $string && (int)$length > 0 && strlen( trim( (string)$char ) ) > 0 )
+				? str_pad( $string, $length, (string)$char, $direction )
+				: $string;
+	}
+
+	static function padleft( $parser, $string = '', $length = 0, $char = 0 ) {
+		return self::pad( $string, $length, $char, STR_PAD_LEFT );
+	}
+
+	static function padright( $parser, $string = '', $length = 0, $char = 0 ) {
+		return self::pad( $string, $length, $char );
+	}
+
+	static function anchorencode( $parser, $text ) {
+		$a = urlencode( $text );
+		$a = strtr( $a, array( '%' => '.', '+' => '_' ) );
+		# leave colons alone, however
+		$a = str_replace( '.3A', ':', $a );
+		return $a;
+	}
+
+	static function special( $parser, $text ) {
+		$title = SpecialPage::getTitleForAlias( $text );
+		if ( $title ) {
+			return $title->getPrefixedText();
+		} else {
+			return wfMsgForContent( 'nosuchspecialpage' );
+		}
+	}
+
+	public static function defaultsort( $parser, $text ) {
+		$text = trim( $text );
+		if( strlen( $text ) > 0 )
+			$parser->setDefaultSort( $text );
+		return '';
+	}
+}
+?>
Index: /MediaWiki/branches/1.11/includes/Credits.php
===================================================================
--- /MediaWiki/branches/1.11/includes/Credits.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/Credits.php	(revision 1280)
@@ -0,0 +1,188 @@
+<?php
+/**
+ * Credits.php -- formats credits for articles
+ * Copyright 2004, Evan Prodromou <evan@wikitravel.org>.
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ *
+ * @author <evan@wikitravel.org>
+ */
+
+/**
+ * This is largely cadged from PageHistory::history
+ */
+function showCreditsPage($article) {
+	global $wgOut;
+
+	$fname = 'showCreditsPage';
+
+	wfProfileIn( $fname );
+	
+	$wgOut->setPageTitle( $article->mTitle->getPrefixedText() );
+	$wgOut->setSubtitle( wfMsg( 'creditspage' ) );
+	$wgOut->setArticleFlag( false );
+	$wgOut->setArticleRelated( true );
+	$wgOut->setRobotpolicy( 'noindex,nofollow' );
+
+	if( $article->mTitle->getArticleID() == 0 ) {
+		$s = wfMsg( 'nocredits' );
+	} else {
+		$s = getCredits($article, -1);
+	}
+
+	$wgOut->addHTML( $s );
+
+	wfProfileOut( $fname );
+}
+
+function getCredits($article, $cnt, $showIfMax=true) {
+	$fname = 'getCredits';
+	wfProfileIn( $fname );
+	$s = '';
+
+	if (isset($cnt) && $cnt != 0) {
+		$s = getAuthorCredits($article);
+		if ($cnt > 1 || $cnt < 0) {
+			$s .= ' ' . getContributorCredits($article, $cnt - 1, $showIfMax);
+		}
+	}
+
+	wfProfileOut( $fname );
+	return $s;
+}
+
+/**
+ *
+ */
+function getAuthorCredits($article) {
+	global $wgLang, $wgAllowRealName;
+
+	$last_author = $article->getUser();
+
+	if ($last_author == 0) {
+		$author_credit = wfMsg('anonymous');
+	} else {
+		if($wgAllowRealName) { $real_name = User::whoIsReal($last_author); }
+		$user_name = User::whoIs($last_author);
+
+		if (!empty($real_name)) {
+			$author_credit = creditLink($user_name, $real_name);
+		} else {
+			$author_credit = wfMsg('siteuser', creditLink($user_name));
+		}
+	}
+
+	$timestamp = $article->getTimestamp();
+	if ($timestamp) {
+		$d = $wgLang->date($article->getTimestamp(), true);
+		$t = $wgLang->time($article->getTimestamp(), true);
+	} else {
+		$d = '';
+		$t = '';
+	}
+	return wfMsg('lastmodifiedatby', $d, $t, $author_credit);
+}
+
+/**
+ *
+ */
+function getContributorCredits($article, $cnt, $showIfMax) {
+
+	global $wgLang, $wgAllowRealName;
+
+	$contributors = $article->getContributors();
+
+	$others_link = '';
+
+	# Hmm... too many to fit!
+
+	if ($cnt > 0 && count($contributors) > $cnt) {
+		$others_link = creditOthersLink($article);
+		if (!$showIfMax) {
+			return wfMsg('othercontribs', $others_link);
+		} else {
+			$contributors = array_slice($contributors, 0, $cnt);
+		}
+	}
+
+	$real_names = array();
+	$user_names = array();
+
+	$anon = '';
+
+	# Sift for real versus user names
+
+	foreach ($contributors as $user_parts) {
+		if ($user_parts[0] != 0) {
+			if ($wgAllowRealName && !empty($user_parts[2])) {
+				$real_names[] = creditLink($user_parts[1], $user_parts[2]);
+			} else {
+				$user_names[] = creditLink($user_parts[1]);
+			}
+		} else {
+			$anon = wfMsg('anonymous');
+		}
+	}
+
+	# Two strings: real names, and user names
+
+	$real = $wgLang->listToText($real_names);
+	$user = $wgLang->listToText($user_names);
+
+	# "ThisSite user(s) A, B and C"
+
+	if (!empty($user)) {
+		$user = wfMsg('siteusers', $user);
+	}
+
+	# This is the big list, all mooshed together. We sift for blank strings
+
+	$fulllist = array();
+
+	foreach (array($real, $user, $anon, $others_link) as $s) {
+		if (!empty($s)) {
+			array_push($fulllist, $s);
+		}
+	}
+
+	# Make the list into text...
+
+	$creds = $wgLang->listToText($fulllist);
+
+	# "Based on work by ..."
+
+	return (empty($creds)) ? '' : wfMsg('othercontribs', $creds);
+}
+
+/**
+ *
+ */
+function creditLink($user_name, $link_text = '') {
+	global $wgUser, $wgContLang;
+	$skin = $wgUser->getSkin();
+	return $skin->makeLink($wgContLang->getNsText(NS_USER) . ':' . $user_name,
+			       htmlspecialchars( (empty($link_text)) ? $user_name : $link_text ));
+}
+
+/**
+ *
+ */
+function creditOthersLink($article) {
+	global $wgUser;
+	$skin = $wgUser->getSkin();
+	return $skin->makeKnownLink($article->mTitle->getPrefixedText(), wfMsg('others'), 'action=credits');
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/Database.php
===================================================================
--- /MediaWiki/branches/1.11/includes/Database.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/Database.php	(revision 1280)
@@ -0,0 +1,2300 @@
+<?php
+/**
+ * This file deals with MySQL interface functions
+ * and query specifics/optimisations
+ */
+
+/** Number of times to re-try an operation in case of deadlock */
+define( 'DEADLOCK_TRIES', 4 );
+/** Minimum time to wait before retry, in microseconds */
+define( 'DEADLOCK_DELAY_MIN', 500000 );
+/** Maximum time to wait before retry */
+define( 'DEADLOCK_DELAY_MAX', 1500000 );
+
+/******************************************************************************
+ * Utility classes
+ *****************************************************************************/
+
+/**
+ * Utility class.
+ * @addtogroup Database
+ */
+class DBObject {
+	public $mData;
+
+	function DBObject($data) {
+		$this->mData = $data;
+	}
+
+	function isLOB() {
+		return false;
+	}
+
+	function data() {
+		return $this->mData;
+	}
+};
+
+/**
+ * Utility class.
+ * @addtogroup Database
+ */
+class MySQLField {
+	private $name, $tablename, $default, $max_length, $nullable,
+		$is_pk, $is_unique, $is_key, $type;
+	function __construct ($info) {
+		$this->name = $info->name;
+		$this->tablename = $info->table;
+		$this->default = $info->def;
+		$this->max_length = $info->max_length;
+		$this->nullable = !$info->not_null;
+		$this->is_pk = $info->primary_key;
+		$this->is_unique = $info->unique_key;
+		$this->is_multiple = $info->multiple_key;
+		$this->is_key = ($this->is_pk || $this->is_unique || $this->is_multiple);
+		$this->type = $info->type;
+	}
+
+	function name() {
+		return $this->name;
+	}
+
+	function tableName() {
+		return $this->tableName;
+	}
+
+	function defaultValue() {
+		return $this->default;
+	}
+
+	function maxLength() {
+		return $this->max_length;
+	}
+
+	function nullable() {
+		return $this->nullable;
+	}
+
+	function isKey() {
+		return $this->is_key;
+	}
+
+	function isMultipleKey() {
+		return $this->is_multiple;
+	}
+
+	function type() {
+		return $this->type;
+	}
+}
+
+/******************************************************************************
+ * Error classes
+ *****************************************************************************/
+
+/**
+ * Database error base class
+ * @addtogroup Database
+ */
+class DBError extends MWException {
+	public $db;
+
+	/**
+	 * Construct a database error
+	 * @param Database $db The database object which threw the error
+	 * @param string $error A simple error message to be used for debugging
+	 */
+	function __construct( Database &$db, $error ) {
+		$this->db =& $db;
+		parent::__construct( $error );
+	}
+}
+
+/**
+ * @addtogroup Database
+ */
+class DBConnectionError extends DBError {
+	public $error;
+	
+	function __construct( Database &$db, $error = 'unknown error' ) {
+		$msg = 'DB connection error';
+		if ( trim( $error ) != '' ) {
+			$msg .= ": $error";
+		}
+		$this->error = $error;
+		parent::__construct( $db, $msg );
+	}
+
+	function useOutputPage() {
+		// Not likely to work
+		return false;
+	}
+
+	function useMessageCache() {
+		// Not likely to work
+		return false;
+	}
+	
+	function getText() {
+		return $this->getMessage() . "\n";
+	}
+
+	function getLogMessage() {
+		# Don't send to the exception log
+		return false;
+	}
+
+	function getPageTitle() {
+		global $wgSitename;
+		return "$wgSitename has a problem";
+	}
+
+	function getHTML() {
+		global $wgTitle, $wgUseFileCache, $title, $wgInputEncoding;
+		global $wgSitename, $wgServer, $wgMessageCache;
+
+		# I give up, Brion is right. Getting the message cache to work when there is no DB is tricky.
+		# Hard coding strings instead.
+
+		$noconnect = "<p><strong>Sorry! This site is experiencing technical difficulties.</strong></p><p>Try waiting a few minutes and reloading.</p><p><small>(Can't contact the database server: $1)</small></p>";
+		$mainpage = 'Main Page';
+		$searchdisabled = <<<EOT
+<p style="margin: 1.5em 2em 1em">$wgSitename search is disabled for performance reasons. You can search via Google in the meantime.
+<span style="font-size: 89%; display: block; margin-left: .2em">Note that their indexes of $wgSitename content may be out of date.</span></p>',
+EOT;
+
+		$googlesearch = "
+<!-- SiteSearch Google -->
+<FORM method=GET action=\"http://www.google.com/search\">
+<TABLE bgcolor=\"#FFFFFF\"><tr><td>
+<A HREF=\"http://www.google.com/\">
+<IMG SRC=\"http://www.google.com/logos/Logo_40wht.gif\"
+border=\"0\" ALT=\"Google\"></A>
+</td>
+<td>
+<INPUT TYPE=text name=q size=31 maxlength=255 value=\"$1\">
+<INPUT type=submit name=btnG VALUE=\"Google Search\">
+<font size=-1>
+<input type=hidden name=domains value=\"$wgServer\"><br /><input type=radio name=sitesearch value=\"\"> WWW <input type=radio name=sitesearch value=\"$wgServer\" checked> $wgServer <br />
+<input type='hidden' name='ie' value='$2'>
+<input type='hidden' name='oe' value='$2'>
+</font>
+</td></tr></TABLE>
+</FORM>
+<!-- SiteSearch Google -->";
+		$cachederror = "The following is a cached copy of the requested page, and may not be up to date. ";
+
+		# No database access
+		if ( is_object( $wgMessageCache ) ) {
+			$wgMessageCache->disable();
+		}
+
+		if ( trim( $this->error ) == '' ) {
+			$this->error = $this->db->getProperty('mServer');
+		}
+
+		$text = str_replace( '$1', $this->error, $noconnect );
+		$text .= wfGetSiteNotice();
+
+		if($wgUseFileCache) {
+			if($wgTitle) {
+				$t =& $wgTitle;
+			} else {
+				if($title) {
+					$t = Title::newFromURL( $title );
+				} elseif (@/**/$_REQUEST['search']) {
+					$search = $_REQUEST['search'];
+					return $searchdisabled .
+					  str_replace( array( '$1', '$2' ), array( htmlspecialchars( $search ),
+					  $wgInputEncoding ), $googlesearch );
+				} else {
+					$t = Title::newFromText( $mainpage );
+				}
+			}
+
+			$cache = new HTMLFileCache( $t );
+			if( $cache->isFileCached() ) {
+				// FIXME: $msg is not defined on the next line.
+				$msg = '<p style="color: red"><b>'.$msg."<br />\n" .
+					$cachederror . "</b></p>\n";
+
+				$tag = '<div id="article">';
+				$text = str_replace(
+					$tag,
+					$tag . $msg,
+					$cache->fetchPageText() );
+			}
+		}
+
+		return $text;
+	}
+}
+
+/**
+ * @addtogroup Database
+ */
+class DBQueryError extends DBError {
+	public $error, $errno, $sql, $fname;
+	
+	function __construct( Database &$db, $error, $errno, $sql, $fname ) {
+		$message = "A database error has occurred\n" .
+		  "Query: $sql\n" .
+		  "Function: $fname\n" .
+		  "Error: $errno $error\n";
+
+		parent::__construct( $db, $message );
+		$this->error = $error;
+		$this->errno = $errno;
+		$this->sql = $sql;
+		$this->fname = $fname;
+	}
+
+	function getText() {
+		if ( $this->useMessageCache() ) {
+			return wfMsg( 'dberrortextcl', htmlspecialchars( $this->getSQL() ),
+			  htmlspecialchars( $this->fname ), $this->errno, htmlspecialchars( $this->error ) ) . "\n";
+		} else {
+			return $this->getMessage();
+		}
+	}
+	
+	function getSQL() {
+		global $wgShowSQLErrors;
+		if( !$wgShowSQLErrors ) {
+			return $this->msg( 'sqlhidden', 'SQL hidden' );
+		} else {
+			return $this->sql;
+		}
+	}
+	
+	function getLogMessage() {
+		# Don't send to the exception log
+		return false;
+	}
+
+	function getPageTitle() {
+		return $this->msg( 'databaseerror', 'Database error' );
+	}
+
+	function getHTML() {
+		if ( $this->useMessageCache() ) {
+			return wfMsgNoDB( 'dberrortext', htmlspecialchars( $this->getSQL() ),
+			  htmlspecialchars( $this->fname ), $this->errno, htmlspecialchars( $this->error ) );
+		} else {
+			return nl2br( htmlspecialchars( $this->getMessage() ) );
+		}
+	}
+}
+
+/**
+ * @addtogroup Database
+ */
+class DBUnexpectedError extends DBError {}
+
+/******************************************************************************/
+
+/**
+ * Database abstraction object
+ * @addtogroup Database
+ */
+class Database {
+
+#------------------------------------------------------------------------------
+# Variables
+#------------------------------------------------------------------------------
+
+	protected $mLastQuery = '';
+
+	protected $mServer, $mUser, $mPassword, $mConn = null, $mDBname;
+	protected $mOut, $mOpened = false;
+
+	protected $mFailFunction;
+	protected $mTablePrefix;
+	protected $mFlags;
+	protected $mTrxLevel = 0;
+	protected $mErrorCount = 0;
+	protected $mLBInfo = array();
+
+#------------------------------------------------------------------------------
+# Accessors
+#------------------------------------------------------------------------------
+	# These optionally set a variable and return the previous state
+
+	/**
+	 * Fail function, takes a Database as a parameter
+	 * Set to false for default, 1 for ignore errors
+	 */
+	function failFunction( $function = NULL ) {
+		return wfSetVar( $this->mFailFunction, $function );
+	}
+
+	/**
+	 * Output page, used for reporting errors
+	 * FALSE means discard output
+	 */
+	function setOutputPage( $out ) {
+		$this->mOut = $out;
+	}
+
+	/**
+	 * Boolean, controls output of large amounts of debug information
+	 */
+	function debug( $debug = NULL ) {
+		return wfSetBit( $this->mFlags, DBO_DEBUG, $debug );
+	}
+
+	/**
+	 * Turns buffering of SQL result sets on (true) or off (false).
+	 * Default is "on" and it should not be changed without good reasons.
+	 */
+	function bufferResults( $buffer = NULL ) {
+		if ( is_null( $buffer ) ) {
+			return !(bool)( $this->mFlags & DBO_NOBUFFER );
+		} else {
+			return !wfSetBit( $this->mFlags, DBO_NOBUFFER, !$buffer );
+		}
+	}
+
+	/**
+	 * Turns on (false) or off (true) the automatic generation and sending
+	 * of a "we're sorry, but there has been a database error" page on
+	 * database errors. Default is on (false). When turned off, the
+	 * code should use lastErrno() and lastError() to handle the
+	 * situation as appropriate.
+	 */
+	function ignoreErrors( $ignoreErrors = NULL ) {
+		return wfSetBit( $this->mFlags, DBO_IGNORE, $ignoreErrors );
+	}
+
+	/**
+	 * The current depth of nested transactions
+	 * @param $level Integer: , default NULL.
+	 */
+	function trxLevel( $level = NULL ) {
+		return wfSetVar( $this->mTrxLevel, $level );
+	}
+
+	/**
+	 * Number of errors logged, only useful when errors are ignored
+	 */
+	function errorCount( $count = NULL ) {
+		return wfSetVar( $this->mErrorCount, $count );
+	}
+
+	/**
+	 * Properties passed down from the server info array of the load balancer
+	 */
+	function getLBInfo( $name = NULL ) {
+		if ( is_null( $name ) ) {
+			return $this->mLBInfo;
+		} else {
+			if ( array_key_exists( $name, $this->mLBInfo ) ) {
+				return $this->mLBInfo[$name];
+			} else {
+				return NULL;
+			}
+		}
+	}
+
+	function setLBInfo( $name, $value = NULL ) {
+		if ( is_null( $value ) ) {
+			$this->mLBInfo = $name;
+		} else {
+			$this->mLBInfo[$name] = $value;
+		}
+	}
+
+	/**
+	 * Returns true if this database supports (and uses) cascading deletes
+	 */
+	function cascadingDeletes() {
+		return false;
+	}
+
+	/**
+	 * Returns true if this database supports (and uses) triggers (e.g. on the page table)
+	 */
+	function cleanupTriggers() {
+		return false;
+	}
+
+	/**
+	 * Returns true if this database is strict about what can be put into an IP field.
+	 * Specifically, it uses a NULL value instead of an empty string.
+	 */
+	function strictIPs() {
+		return false;
+	}
+
+	/**
+	 * Returns true if this database uses timestamps rather than integers
+	*/
+	function realTimestamps() {
+		return false;
+	}
+
+	/**
+	 * Returns true if this database does an implicit sort when doing GROUP BY
+	 */
+	function implicitGroupby() {
+		return true;
+	}
+
+	/**
+	 * Returns true if this database can do a native search on IP columns
+	 * e.g. this works as expected: .. WHERE rc_ip = '127.42.12.102/32';
+	 */
+	function searchableIPs() {
+		return false;
+	}
+
+	/**#@+
+	 * Get function
+	 */
+	function lastQuery() { return $this->mLastQuery; }
+	function isOpen() { return $this->mOpened; }
+	/**#@-*/
+
+	function setFlag( $flag ) {
+		$this->mFlags |= $flag;
+	}
+
+	function clearFlag( $flag ) {
+		$this->mFlags &= ~$flag;
+	}
+
+	function getFlag( $flag ) {
+		return !!($this->mFlags & $flag);
+	}
+
+	/**
+	 * General read-only accessor
+	 */
+	function getProperty( $name ) {
+		return $this->$name;
+	}
+
+#------------------------------------------------------------------------------
+# Other functions
+#------------------------------------------------------------------------------
+
+	/**@{{
+	 * Constructor.
+	 * @param string $server database server host
+	 * @param string $user database user name
+	 * @param string $password database user password
+	 * @param string $dbname database name
+	 * @param failFunction
+	 * @param $flags
+	 * @param $tablePrefix String: database table prefixes. By default use the prefix gave in LocalSettings.php
+	 */
+	function __construct( $server = false, $user = false, $password = false, $dbName = false,
+		$failFunction = false, $flags = 0, $tablePrefix = 'get from global' ) {
+
+		global $wgOut, $wgDBprefix, $wgCommandLineMode;
+		# Can't get a reference if it hasn't been set yet
+		if ( !isset( $wgOut ) ) {
+			$wgOut = NULL;
+		}
+		$this->mOut =& $wgOut;
+
+		$this->mFailFunction = $failFunction;
+		$this->mFlags = $flags;
+
+		if ( $this->mFlags & DBO_DEFAULT ) {
+			if ( $wgCommandLineMode ) {
+				$this->mFlags &= ~DBO_TRX;
+			} else {
+				$this->mFlags |= DBO_TRX;
+			}
+		}
+
+		/*
+		// Faster read-only access
+		if ( wfReadOnly() ) {
+			$this->mFlags |= DBO_PERSISTENT;
+			$this->mFlags &= ~DBO_TRX;
+		}*/
+
+		/** Get the default table prefix*/
+		if ( $tablePrefix == 'get from global' ) {
+			$this->mTablePrefix = $wgDBprefix;
+		} else {
+			$this->mTablePrefix = $tablePrefix;
+		}
+
+		if ( $server ) {
+			$this->open( $server, $user, $password, $dbName );
+		}
+	}
+
+	/**
+	 * @static
+	 * @param failFunction
+	 * @param $flags
+	 */
+	static function newFromParams( $server, $user, $password, $dbName, $failFunction = false, $flags = 0 )
+	{
+		return new Database( $server, $user, $password, $dbName, $failFunction, $flags );
+	}
+
+	/**
+	 * Usually aborts on failure
+	 * If the failFunction is set to a non-zero integer, returns success
+	 */
+	function open( $server, $user, $password, $dbName ) {
+		global $wguname;
+		wfProfileIn( __METHOD__ );
+
+		# Test for missing mysql.so
+		# First try to load it
+		if (!@extension_loaded('mysql')) {
+			@dl('mysql.so');
+		}
+
+		# Fail now
+		# Otherwise we get a suppressed fatal error, which is very hard to track down
+		if ( !function_exists( 'mysql_connect' ) ) {
+			throw new DBConnectionError( $this, "MySQL functions missing, have you compiled PHP with the --with-mysql option?\n" );
+		}
+
+		$this->close();
+		$this->mServer = $server;
+		$this->mUser = $user;
+		$this->mPassword = $password;
+		$this->mDBname = $dbName;
+
+		$success = false;
+
+		wfProfileIn("dbconnect-$server");
+		
+		# LIVE PATCH by Tim, ask Domas for why: retry loop
+		$this->mConn = false;
+		$max = 3;
+		for ( $i = 0; $i < $max && !$this->mConn; $i++ ) {
+			if ( $i > 1 ) {
+				usleep( 1000 );
+			}
+			if ( $this->mFlags & DBO_PERSISTENT ) {
+				@/**/$this->mConn = mysql_pconnect( $server, $user, $password );
+			} else {
+				# Create a new connection...
+				@/**/$this->mConn = mysql_connect( $server, $user, $password, true );
+			}
+			if ($this->mConn === false) {
+				$iplus = $i + 1;
+				#wfLogDBError("Connect loop error $iplus of $max ($server): " . mysql_errno() . " - " . mysql_error()."\n"); 
+			}
+		}
+		
+		wfProfileOut("dbconnect-$server");
+
+		if ( $dbName != '' ) {
+			if ( $this->mConn !== false ) {
+				$success = @/**/mysql_select_db( $dbName, $this->mConn );
+				if ( !$success ) {
+					$error = "Error selecting database $dbName on server {$this->mServer} " .
+						"from client host {$wguname['nodename']}\n";
+					wfLogDBError(" Error selecting database $dbName on server {$this->mServer} \n");
+					wfDebug( $error );
+				}
+			} else {
+				wfDebug( "DB connection error\n" );
+				wfDebug( "Server: $server, User: $user, Password: " .
+					substr( $password, 0, 3 ) . "..., error: " . mysql_error() . "\n" );
+				$success = false;
+			}
+		} else {
+			# Delay USE query
+			$success = (bool)$this->mConn;
+		}
+
+		if ( $success ) {
+			$version = $this->getServerVersion();
+			if ( version_compare( $version, '4.1' ) >= 0 ) {
+				// Tell the server we're communicating with it in UTF-8.
+				// This may engage various charset conversions.
+				global $wgDBmysql5;
+				if( $wgDBmysql5 ) {
+					$this->query( 'SET NAMES utf8', __METHOD__ );
+				}
+				// Turn off strict mode
+				$this->query( "SET sql_mode = ''", __METHOD__ );
+			}
+
+			// Turn off strict mode if it is on
+		} else {
+			$this->reportConnectionError();
+		}
+
+		$this->mOpened = $success;
+		wfProfileOut( __METHOD__ );
+		return $success;
+	}
+	/**@}}*/
+
+	/**
+	 * Closes a database connection.
+	 * if it is open : commits any open transactions
+	 *
+	 * @return bool operation success. true if already closed.
+	 */
+	function close()
+	{
+		$this->mOpened = false;
+		if ( $this->mConn ) {
+			if ( $this->trxLevel() ) {
+				$this->immediateCommit();
+			}
+			return mysql_close( $this->mConn );
+		} else {
+			return true;
+		}
+	}
+
+	/**
+	 * @param string $error fallback error message, used if none is given by MySQL
+	 */
+	function reportConnectionError( $error = 'Unknown error' ) {
+		$myError = $this->lastError();
+		if ( $myError ) {
+			$error = $myError;
+		}
+
+		if ( $this->mFailFunction ) {
+			# Legacy error handling method
+			if ( !is_int( $this->mFailFunction ) ) {
+				$ff = $this->mFailFunction;
+				$ff( $this, $error );
+			}
+		} else {
+			# New method
+			wfLogDBError( "Connection error: $error\n" );
+			throw new DBConnectionError( $this, $error );
+		}
+	}
+
+	/**
+	 * Usually aborts on failure.  If errors are explicitly ignored, returns success.
+	 *
+	 * @param  $sql        String: SQL query
+	 * @param  $fname      String: Name of the calling function, for profiling/SHOW PROCESSLIST comment (you can use __METHOD__ or add some extra info)
+	 * @param  $tempIgnore Bool:   Whether to avoid throwing an exception on errors... maybe best to catch the exception instead?
+	 * @return Result object to feed to fetchObject, fetchRow, ...; or false on failure if $tempIgnore set
+	 * @throws DBQueryError Thrown when the database returns an error of any kind
+	 */
+	public function query( $sql, $fname = '', $tempIgnore = false ) {
+		global $wgProfiling;
+
+		if ( $wgProfiling ) {
+			# generalizeSQL will probably cut down the query to reasonable
+			# logging size most of the time. The substr is really just a sanity check.
+
+			# Who's been wasting my precious column space? -- TS
+			#$profName = 'query: ' . $fname . ' ' . substr( Database::generalizeSQL( $sql ), 0, 255 );
+
+			if ( is_null( $this->getLBInfo( 'master' ) ) ) {
+				$queryProf = 'query: ' . substr( Database::generalizeSQL( $sql ), 0, 255 );
+				$totalProf = 'Database::query';
+			} else {
+				$queryProf = 'query-m: ' . substr( Database::generalizeSQL( $sql ), 0, 255 );
+				$totalProf = 'Database::query-master';
+			}
+			wfProfileIn( $totalProf );
+			wfProfileIn( $queryProf );
+		}
+
+		$this->mLastQuery = $sql;
+
+		# Add a comment for easy SHOW PROCESSLIST interpretation
+		#if ( $fname ) {
+			global $wgUser;
+			if ( is_object( $wgUser ) && !($wgUser instanceof StubObject) ) {
+				$userName = $wgUser->getName();
+				if ( strlen( $userName ) > 15 ) {
+					$userName = substr( $userName, 0, 15 ) . '...';
+				}
+				$userName = str_replace( '/', '', $userName );
+			} else {
+				$userName = '';
+			}
+			$commentedSql = preg_replace('/\s/', " /* $fname $userName */ ", $sql, 1);
+		#} else {
+		#	$commentedSql = $sql;
+		#}
+
+		# If DBO_TRX is set, start a transaction
+		if ( ( $this->mFlags & DBO_TRX ) && !$this->trxLevel() && 
+			$sql != 'BEGIN' && $sql != 'COMMIT' && $sql != 'ROLLBACK' 
+		) {
+			$this->begin();
+		}
+
+		if ( $this->debug() ) {
+			$sqlx = substr( $commentedSql, 0, 500 );
+			$sqlx = strtr( $sqlx, "\t\n", '  ' );
+			wfDebug( "SQL: $sqlx\n" );
+		}
+
+		# Do the query and handle errors
+		$ret = $this->doQuery( $commentedSql );
+
+		# Try reconnecting if the connection was lost
+		if ( false === $ret && ( $this->lastErrno() == 2013 || $this->lastErrno() == 2006 ) ) {
+			# Transaction is gone, like it or not
+			$this->mTrxLevel = 0;
+			wfDebug( "Connection lost, reconnecting...\n" );
+			if ( $this->ping() ) {
+				wfDebug( "Reconnected\n" );
+				$sqlx = substr( $commentedSql, 0, 500 );
+				$sqlx = strtr( $sqlx, "\t\n", '  ' );
+				global $wgRequestTime;
+				$elapsed = round( microtime(true) - $wgRequestTime, 3 );
+				wfLogDBError( "Connection lost and reconnected after {$elapsed}s, query: $sqlx\n" );
+				$ret = $this->doQuery( $commentedSql );
+			} else {
+				wfDebug( "Failed\n" );
+			}
+		}
+
+		if ( false === $ret ) {
+			$this->reportQueryError( $this->lastError(), $this->lastErrno(), $sql, $fname, $tempIgnore );
+		}
+
+		if ( $wgProfiling ) {
+			wfProfileOut( $queryProf );
+			wfProfileOut( $totalProf );
+		}
+		return $ret;
+	}
+
+	/**
+	 * The DBMS-dependent part of query()
+	 * @param  $sql String: SQL query.
+	 * @return Result object to feed to fetchObject, fetchRow, ...; or false on failure
+	 * @access private
+	 */
+	/*private*/ function doQuery( $sql ) {
+		if( $this->bufferResults() ) {
+			$ret = mysql_query( $sql, $this->mConn );
+		} else {
+			$ret = mysql_unbuffered_query( $sql, $this->mConn );
+		}
+		return $ret;
+	}
+
+	/**
+	 * @param $error
+	 * @param $errno
+	 * @param $sql
+	 * @param string $fname
+	 * @param bool $tempIgnore
+	 */
+	function reportQueryError( $error, $errno, $sql, $fname, $tempIgnore = false ) {
+		global $wgCommandLineMode;
+		# Ignore errors during error handling to avoid infinite recursion
+		$ignore = $this->ignoreErrors( true );
+		++$this->mErrorCount;
+
+		if( $ignore || $tempIgnore ) {
+			wfDebug("SQL ERROR (ignored): $error\n");
+			$this->ignoreErrors( $ignore );
+		} else {
+			$sql1line = str_replace( "\n", "\\n", $sql );
+			wfLogDBError("$fname\t{$this->mServer}\t$errno\t$error\t$sql1line\n");
+			wfDebug("SQL ERROR: " . $error . "\n");
+			throw new DBQueryError( $this, $error, $errno, $sql, $fname );
+		}
+	}
+
+
+	/**
+	 * Intended to be compatible with the PEAR::DB wrapper functions.
+	 * http://pear.php.net/manual/en/package.database.db.intro-execute.php
+	 *
+	 * ? = scalar value, quoted as necessary
+	 * ! = raw SQL bit (a function for instance)
+	 * & = filename; reads the file and inserts as a blob
+	 *     (we don't use this though...)
+	 */
+	function prepare( $sql, $func = 'Database::prepare' ) {
+		/* MySQL doesn't support prepared statements (yet), so just
+		   pack up the query for reference. We'll manually replace
+		   the bits later. */
+		return array( 'query' => $sql, 'func' => $func );
+	}
+
+	function freePrepared( $prepared ) {
+		/* No-op for MySQL */
+	}
+
+	/**
+	 * Execute a prepared query with the various arguments
+	 * @param string $prepared the prepared sql
+	 * @param mixed $args Either an array here, or put scalars as varargs
+	 */
+	function execute( $prepared, $args = null ) {
+		if( !is_array( $args ) ) {
+			# Pull the var args
+			$args = func_get_args();
+			array_shift( $args );
+		}
+		$sql = $this->fillPrepared( $prepared['query'], $args );
+		return $this->query( $sql, $prepared['func'] );
+	}
+
+	/**
+	 * Prepare & execute an SQL statement, quoting and inserting arguments
+	 * in the appropriate places.
+	 * @param string $query
+	 * @param string $args ...
+	 */
+	function safeQuery( $query, $args = null ) {
+		$prepared = $this->prepare( $query, 'Database::safeQuery' );
+		if( !is_array( $args ) ) {
+			# Pull the var args
+			$args = func_get_args();
+			array_shift( $args );
+		}
+		$retval = $this->execute( $prepared, $args );
+		$this->freePrepared( $prepared );
+		return $retval;
+	}
+
+	/**
+	 * For faking prepared SQL statements on DBs that don't support
+	 * it directly.
+	 * @param string $preparedSql - a 'preparable' SQL statement
+	 * @param array $args - array of arguments to fill it with
+	 * @return string executable SQL
+	 */
+	function fillPrepared( $preparedQuery, $args ) {
+		reset( $args );
+		$this->preparedArgs =& $args;
+		return preg_replace_callback( '/(\\\\[?!&]|[?!&])/',
+			array( &$this, 'fillPreparedArg' ), $preparedQuery );
+	}
+
+	/**
+	 * preg_callback func for fillPrepared()
+	 * The arguments should be in $this->preparedArgs and must not be touched
+	 * while we're doing this.
+	 *
+	 * @param array $matches
+	 * @return string
+	 * @private
+	 */
+	function fillPreparedArg( $matches ) {
+		switch( $matches[1] ) {
+			case '\\?': return '?';
+			case '\\!': return '!';
+			case '\\&': return '&';
+		}
+		list( /* $n */ , $arg ) = each( $this->preparedArgs );
+		switch( $matches[1] ) {
+			case '?': return $this->addQuotes( $arg );
+			case '!': return $arg;
+			case '&':
+				# return $this->addQuotes( file_get_contents( $arg ) );
+				throw new DBUnexpectedError( $this, '& mode is not implemented. If it\'s really needed, uncomment the line above.' );
+			default:
+				throw new DBUnexpectedError( $this, 'Received invalid match. This should never happen!' );
+		}
+	}
+
+	/**#@+
+	 * @param mixed $res A SQL result
+	 */
+	/**
+	 * Free a result object
+	 */
+	function freeResult( $res ) {
+		if ( !@/**/mysql_free_result( $res ) ) {
+			throw new DBUnexpectedError( $this, "Unable to free MySQL result" );
+		}
+	}
+
+	/**
+	 * Fetch the next row from the given result object, in object form.
+	 * Fields can be retrieved with $row->fieldname, with fields acting like
+	 * member variables.
+	 *
+	 * @param $res SQL result object as returned from Database::query(), etc.
+	 * @return MySQL row object
+	 * @throws DBUnexpectedError Thrown if the database returns an error
+	 */
+	function fetchObject( $res ) {
+		@/**/$row = mysql_fetch_object( $res );
+		if( $this->lastErrno() ) {
+			throw new DBUnexpectedError( $this, 'Error in fetchObject(): ' . htmlspecialchars( $this->lastError() ) );
+		}
+		return $row;
+	}
+
+	/**
+	 * Fetch the next row from the given result object, in associative array
+	 * form.  Fields are retrieved with $row['fieldname'].
+	 *
+	 * @param $res SQL result object as returned from Database::query(), etc.
+	 * @return MySQL row object
+	 * @throws DBUnexpectedError Thrown if the database returns an error
+	 */
+ 	function fetchRow( $res ) {
+		@/**/$row = mysql_fetch_array( $res );
+		if ( $this->lastErrno() ) {
+			throw new DBUnexpectedError( $this, 'Error in fetchRow(): ' . htmlspecialchars( $this->lastError() ) );
+		}
+		return $row;
+	}
+
+	/**
+	 * Get the number of rows in a result object
+	 */
+	function numRows( $res ) {
+		@/**/$n = mysql_num_rows( $res );
+		if( $this->lastErrno() ) {
+			throw new DBUnexpectedError( $this, 'Error in numRows(): ' . htmlspecialchars( $this->lastError() ) );
+		}
+		return $n;
+	}
+
+	/**
+	 * Get the number of fields in a result object
+	 * See documentation for mysql_num_fields()
+	 */
+	function numFields( $res ) { return mysql_num_fields( $res ); }
+
+	/**
+	 * Get a field name in a result object
+	 * See documentation for mysql_field_name():
+	 * http://www.php.net/mysql_field_name
+	 */
+	function fieldName( $res, $n ) { return mysql_field_name( $res, $n ); }
+
+	/**
+	 * Get the inserted value of an auto-increment row
+	 *
+	 * The value inserted should be fetched from nextSequenceValue()
+	 *
+	 * Example:
+	 * $id = $dbw->nextSequenceValue('page_page_id_seq');
+	 * $dbw->insert('page',array('page_id' => $id));
+	 * $id = $dbw->insertId();
+	 */
+	function insertId() { return mysql_insert_id( $this->mConn ); }
+
+	/**
+	 * Change the position of the cursor in a result object
+	 * See mysql_data_seek()
+	 */
+	function dataSeek( $res, $row ) { return mysql_data_seek( $res, $row ); }
+
+	/**
+	 * Get the last error number
+	 * See mysql_errno()
+	 */
+	function lastErrno() {
+		if ( $this->mConn ) {
+			return mysql_errno( $this->mConn );
+		} else {
+			return mysql_errno();
+		}
+	}
+
+	/**
+	 * Get a description of the last error
+	 * See mysql_error() for more details
+	 */
+	function lastError() {
+		if ( $this->mConn ) {
+			# Even if it's non-zero, it can still be invalid
+			wfSuppressWarnings();
+			$error = mysql_error( $this->mConn );
+			if ( !$error ) {
+				$error = mysql_error();
+			}
+			wfRestoreWarnings();
+		} else {
+			$error = mysql_error();
+		}
+		if( $error ) {
+			$error .= ' (' . $this->mServer . ')';
+		}
+		return $error;
+	}
+	/**
+	 * Get the number of rows affected by the last write query
+	 * See mysql_affected_rows() for more details
+	 */
+	function affectedRows() { return mysql_affected_rows( $this->mConn ); }
+	/**#@-*/ // end of template : @param $result
+
+	/**
+	 * Simple UPDATE wrapper
+	 * Usually aborts on failure
+	 * If errors are explicitly ignored, returns success
+	 *
+	 * This function exists for historical reasons, Database::update() has a more standard
+	 * calling convention and feature set
+	 */
+	function set( $table, $var, $value, $cond, $fname = 'Database::set' )
+	{
+		$table = $this->tableName( $table );
+		$sql = "UPDATE $table SET $var = '" .
+		  $this->strencode( $value ) . "' WHERE ($cond)";
+		return (bool)$this->query( $sql, $fname );
+	}
+
+	/**
+	 * Simple SELECT wrapper, returns a single field, input must be encoded
+	 * Usually aborts on failure
+	 * If errors are explicitly ignored, returns FALSE on failure
+	 */
+	function selectField( $table, $var, $cond='', $fname = 'Database::selectField', $options = array() ) {
+		if ( !is_array( $options ) ) {
+			$options = array( $options );
+		}
+		$options['LIMIT'] = 1;
+
+		$res = $this->select( $table, $var, $cond, $fname, $options );
+		if ( $res === false || !$this->numRows( $res ) ) {
+			return false;
+		}
+		$row = $this->fetchRow( $res );
+		if ( $row !== false ) {
+			$this->freeResult( $res );
+			return $row[0];
+		} else {
+			return false;
+		}
+	}
+
+	/**
+	 * Returns an optional USE INDEX clause to go after the table, and a
+	 * string to go at the end of the query
+	 *
+	 * @private
+	 *
+	 * @param array $options an associative array of options to be turned into
+	 *              an SQL query, valid keys are listed in the function.
+	 * @return array
+	 */
+	function makeSelectOptions( $options ) {
+		$preLimitTail = $postLimitTail = '';
+		$startOpts = '';
+
+		$noKeyOptions = array();
+		foreach ( $options as $key => $option ) {
+			if ( is_numeric( $key ) ) {
+				$noKeyOptions[$option] = true;
+			}
+		}
+
+		if ( isset( $options['GROUP BY'] ) ) $preLimitTail .= " GROUP BY {$options['GROUP BY']}";
+		if ( isset( $options['ORDER BY'] ) ) $preLimitTail .= " ORDER BY {$options['ORDER BY']}";
+		
+		//if (isset($options['LIMIT'])) {
+		//	$tailOpts .= $this->limitResult('', $options['LIMIT'],
+		//		isset($options['OFFSET']) ? $options['OFFSET'] 
+		//		: false);
+		//}
+
+		if ( isset( $noKeyOptions['FOR UPDATE'] ) ) $postLimitTail .= ' FOR UPDATE';
+		if ( isset( $noKeyOptions['LOCK IN SHARE MODE'] ) ) $postLimitTail .= ' LOCK IN SHARE MODE';
+		if ( isset( $noKeyOptions['DISTINCT'] ) && isset( $noKeyOptions['DISTINCTROW'] ) ) $startOpts .= 'DISTINCT';
+
+		# Various MySQL extensions
+		if ( isset( $noKeyOptions['STRAIGHT_JOIN'] ) ) $startOpts .= ' /*! STRAIGHT_JOIN */';
+		if ( isset( $noKeyOptions['HIGH_PRIORITY'] ) ) $startOpts .= ' HIGH_PRIORITY';
+		if ( isset( $noKeyOptions['SQL_BIG_RESULT'] ) ) $startOpts .= ' SQL_BIG_RESULT';
+		if ( isset( $noKeyOptions['SQL_BUFFER_RESULT'] ) ) $startOpts .= ' SQL_BUFFER_RESULT';
+		if ( isset( $noKeyOptions['SQL_SMALL_RESULT'] ) ) $startOpts .= ' SQL_SMALL_RESULT';
+		if ( isset( $noKeyOptions['SQL_CALC_FOUND_ROWS'] ) ) $startOpts .= ' SQL_CALC_FOUND_ROWS';
+		if ( isset( $noKeyOptions['SQL_CACHE'] ) ) $startOpts .= ' SQL_CACHE';
+		if ( isset( $noKeyOptions['SQL_NO_CACHE'] ) ) $startOpts .= ' SQL_NO_CACHE';
+
+		if ( isset( $options['USE INDEX'] ) && ! is_array( $options['USE INDEX'] ) ) {
+			$useIndex = $this->useIndexClause( $options['USE INDEX'] );
+		} else {
+			$useIndex = '';
+		}
+		
+		return array( $startOpts, $useIndex, $preLimitTail, $postLimitTail );
+	}
+
+	/**
+	 * SELECT wrapper
+	 *
+	 * @param mixed  $table   Array or string, table name(s) (prefix auto-added)
+	 * @param mixed  $vars    Array or string, field name(s) to be retrieved
+	 * @param mixed  $conds   Array or string, condition(s) for WHERE
+	 * @param string $fname   Calling function name (use __METHOD__) for logs/profiling
+	 * @param array  $options Associative array of options (e.g. array('GROUP BY' => 'page_title')),
+	 *                        see Database::makeSelectOptions code for list of supported stuff
+	 * @return mixed Database result resource (feed to Database::fetchObject or whatever), or false on failure
+	 */
+	function select( $table, $vars, $conds='', $fname = 'Database::select', $options = array() )
+	{
+		if( is_array( $vars ) ) {
+			$vars = implode( ',', $vars );
+		}
+		if( !is_array( $options ) ) {
+			$options = array( $options );
+		}
+		if( is_array( $table ) ) {
+			if ( isset( $options['USE INDEX'] ) && is_array( $options['USE INDEX'] ) )
+				$from = ' FROM ' . $this->tableNamesWithUseIndex( $table, $options['USE INDEX'] );
+			else
+				$from = ' FROM ' . implode( ',', array_map( array( &$this, 'tableName' ), $table ) );
+		} elseif ($table!='') {
+			if ($table{0}==' ') {
+				$from = ' FROM ' . $table;
+			} else {
+				$from = ' FROM ' . $this->tableName( $table );
+			}
+		} else {
+			$from = '';
+		}
+
+		list( $startOpts, $useIndex, $preLimitTail, $postLimitTail ) = $this->makeSelectOptions( $options );
+
+		if( !empty( $conds ) ) {
+			if ( is_array( $conds ) ) {
+				$conds = $this->makeList( $conds, LIST_AND );
+			}
+			$sql = "SELECT $startOpts $vars $from $useIndex WHERE $conds $preLimitTail";
+		} else {
+			$sql = "SELECT $startOpts $vars $from $useIndex $preLimitTail";
+		}
+
+		if (isset($options['LIMIT']))
+			$sql = $this->limitResult($sql, $options['LIMIT'],
+				isset($options['OFFSET']) ? $options['OFFSET'] : false);
+		$sql = "$sql $postLimitTail";
+		
+		if (isset($options['EXPLAIN'])) {
+			$sql = 'EXPLAIN ' . $sql;
+		}
+
+		return $this->query( $sql, $fname );
+	}
+
+	/**
+	 * Single row SELECT wrapper
+	 * Aborts or returns FALSE on error
+	 *
+	 * $vars: the selected variables
+	 * $conds: a condition map, terms are ANDed together.
+	 *   Items with numeric keys are taken to be literal conditions
+	 * Takes an array of selected variables, and a condition map, which is ANDed
+	 * e.g: selectRow( "page", array( "page_id" ), array( "page_namespace" =>
+	 * NS_MAIN, "page_title" => "Astronomy" ) )   would return an object where
+	 * $obj- >page_id is the ID of the Astronomy article
+	 *
+	 * @todo migrate documentation to phpdocumentor format
+	 */
+	function selectRow( $table, $vars, $conds, $fname = 'Database::selectRow', $options = array() ) {
+		$options['LIMIT'] = 1;
+		$res = $this->select( $table, $vars, $conds, $fname, $options );
+		if ( $res === false )
+			return false;
+		if ( !$this->numRows($res) ) {
+			$this->freeResult($res);
+			return false;
+		}
+		$obj = $this->fetchObject( $res );
+		$this->freeResult( $res );
+		return $obj;
+
+	}
+	
+	/**
+	 * Estimate rows in dataset
+	 * Returns estimated count, based on EXPLAIN output
+	 * Takes same arguments as Database::select()
+	 */
+	
+	function estimateRowCount( $table, $vars='*', $conds='', $fname = 'Database::estimateRowCount', $options = array() ) {
+		$options['EXPLAIN']=true;
+		$res = $this->select ($table, $vars, $conds, $fname, $options );
+		if ( $res === false )
+			return false;
+		if (!$this->numRows($res)) {
+			$this->freeResult($res);
+			return 0;
+		}
+		
+		$rows=1;
+	
+		while( $plan = $this->fetchObject( $res ) ) {
+			$rows *= ($plan->rows > 0)?$plan->rows:1; // avoid resetting to zero
+		}
+		
+		$this->freeResult($res);
+		return $rows;		
+	}
+	
+
+	/**
+	 * Removes most variables from an SQL query and replaces them with X or N for numbers.
+	 * It's only slightly flawed. Don't use for anything important.
+	 *
+	 * @param string $sql A SQL Query
+	 * @static
+	 */
+	static function generalizeSQL( $sql ) {
+		# This does the same as the regexp below would do, but in such a way
+		# as to avoid crashing php on some large strings.
+		# $sql = preg_replace ( "/'([^\\\\']|\\\\.)*'|\"([^\\\\\"]|\\\\.)*\"/", "'X'", $sql);
+
+		$sql = str_replace ( "\\\\", '', $sql);
+		$sql = str_replace ( "\\'", '', $sql);
+		$sql = str_replace ( "\\\"", '', $sql);
+		$sql = preg_replace ("/'.*'/s", "'X'", $sql);
+		$sql = preg_replace ('/".*"/s', "'X'", $sql);
+
+		# All newlines, tabs, etc replaced by single space
+		$sql = preg_replace ( '/\s+/', ' ', $sql);
+
+		# All numbers => N
+		$sql = preg_replace ('/-?[0-9]+/s', 'N', $sql);
+
+		return $sql;
+	}
+
+	/**
+	 * Determines whether a field exists in a table
+	 * Usually aborts on failure
+	 * If errors are explicitly ignored, returns NULL on failure
+	 */
+	function fieldExists( $table, $field, $fname = 'Database::fieldExists' ) {
+		$table = $this->tableName( $table );
+		$res = $this->query( 'DESCRIBE '.$table, $fname );
+		if ( !$res ) {
+			return NULL;
+		}
+
+		$found = false;
+
+		while ( $row = $this->fetchObject( $res ) ) {
+			if ( $row->Field == $field ) {
+				$found = true;
+				break;
+			}
+		}
+		return $found;
+	}
+
+	/**
+	 * Determines whether an index exists
+	 * Usually aborts on failure
+	 * If errors are explicitly ignored, returns NULL on failure
+	 */
+	function indexExists( $table, $index, $fname = 'Database::indexExists' ) {
+		$info = $this->indexInfo( $table, $index, $fname );
+		if ( is_null( $info ) ) {
+			return NULL;
+		} else {
+			return $info !== false;
+		}
+	}
+
+
+	/**
+	 * Get information about an index into an object
+	 * Returns false if the index does not exist
+	 */
+	function indexInfo( $table, $index, $fname = 'Database::indexInfo' ) {
+		# SHOW INDEX works in MySQL 3.23.58, but SHOW INDEXES does not.
+		# SHOW INDEX should work for 3.x and up:
+		# http://dev.mysql.com/doc/mysql/en/SHOW_INDEX.html
+		$table = $this->tableName( $table );
+		$sql = 'SHOW INDEX FROM '.$table;
+		$res = $this->query( $sql, $fname );
+		if ( !$res ) {
+			return NULL;
+		}
+
+		$result = array();
+		while ( $row = $this->fetchObject( $res ) ) {
+			if ( $row->Key_name == $index ) {
+				$result[] = $row;
+			}
+		}
+		$this->freeResult($res);
+		
+		return empty($result) ? false : $result;
+	}
+
+	/**
+	 * Query whether a given table exists
+	 */
+	function tableExists( $table ) {
+		$table = $this->tableName( $table );
+		$old = $this->ignoreErrors( true );
+		$res = $this->query( "SELECT 1 FROM $table LIMIT 1" );
+		$this->ignoreErrors( $old );
+		if( $res ) {
+			$this->freeResult( $res );
+			return true;
+		} else {
+			return false;
+		}
+	}
+
+	/**
+	 * mysql_fetch_field() wrapper
+	 * Returns false if the field doesn't exist
+	 *
+	 * @param $table
+	 * @param $field
+	 */
+	function fieldInfo( $table, $field ) {
+		$table = $this->tableName( $table );
+		$res = $this->query( "SELECT * FROM $table LIMIT 1" );
+		$n = mysql_num_fields( $res );
+		for( $i = 0; $i < $n; $i++ ) {
+			$meta = mysql_fetch_field( $res, $i );
+			if( $field == $meta->name ) {
+				return new MySQLField($meta);
+			}
+		}
+		return false;
+	}
+
+	/**
+	 * mysql_field_type() wrapper
+	 */
+	function fieldType( $res, $index ) {
+		return mysql_field_type( $res, $index );
+	}
+
+	/**
+	 * Determines if a given index is unique
+	 */
+	function indexUnique( $table, $index ) {
+		$indexInfo = $this->indexInfo( $table, $index );
+		if ( !$indexInfo ) {
+			return NULL;
+		}
+		return !$indexInfo[0]->Non_unique;
+	}
+
+	/**
+	 * INSERT wrapper, inserts an array into a table
+	 *
+	 * $a may be a single associative array, or an array of these with numeric keys, for
+	 * multi-row insert.
+	 *
+	 * Usually aborts on failure
+	 * If errors are explicitly ignored, returns success
+	 */
+	function insert( $table, $a, $fname = 'Database::insert', $options = array() ) {
+		# No rows to insert, easy just return now
+		if ( !count( $a ) ) {
+			return true;
+		}
+
+		$table = $this->tableName( $table );
+		if ( !is_array( $options ) ) {
+			$options = array( $options );
+		}
+		if ( isset( $a[0] ) && is_array( $a[0] ) ) {
+			$multi = true;
+			$keys = array_keys( $a[0] );
+		} else {
+			$multi = false;
+			$keys = array_keys( $a );
+		}
+
+		$sql = 'INSERT ' . implode( ' ', $options ) .
+			" INTO $table (" . implode( ',', $keys ) . ') VALUES ';
+
+		if ( $multi ) {
+			$first = true;
+			foreach ( $a as $row ) {
+				if ( $first ) {
+					$first = false;
+				} else {
+					$sql .= ',';
+				}
+				$sql .= '(' . $this->makeList( $row ) . ')';
+			}
+		} else {
+			$sql .= '(' . $this->makeList( $a ) . ')';
+		}
+		return (bool)$this->query( $sql, $fname );
+	}
+
+	/**
+	 * Make UPDATE options for the Database::update function
+	 *
+	 * @private
+	 * @param array $options The options passed to Database::update
+	 * @return string
+	 */
+	function makeUpdateOptions( $options ) {
+		if( !is_array( $options ) ) {
+			$options = array( $options );
+		}
+		$opts = array();
+		if ( in_array( 'LOW_PRIORITY', $options ) )
+			$opts[] = $this->lowPriorityOption();
+		if ( in_array( 'IGNORE', $options ) )
+			$opts[] = 'IGNORE';
+		return implode(' ', $opts);
+	}
+
+	/**
+	 * UPDATE wrapper, takes a condition array and a SET array
+	 *
+	 * @param string $table  The table to UPDATE
+	 * @param array  $values An array of values to SET
+	 * @param array  $conds  An array of conditions (WHERE). Use '*' to update all rows.
+	 * @param string $fname  The Class::Function calling this function
+	 *                       (for the log)
+	 * @param array  $options An array of UPDATE options, can be one or
+	 *                        more of IGNORE, LOW_PRIORITY
+	 */
+	function update( $table, $values, $conds, $fname = 'Database::update', $options = array() ) {
+		$table = $this->tableName( $table );
+		$opts = $this->makeUpdateOptions( $options );
+		$sql = "UPDATE $opts $table SET " . $this->makeList( $values, LIST_SET );
+		if ( $conds != '*' ) {
+			$sql .= " WHERE " . $this->makeList( $conds, LIST_AND );
+		}
+		$this->query( $sql, $fname );
+	}
+
+	/**
+	 * Makes an encoded list of strings from an array
+	 * $mode:
+	 *        LIST_COMMA         - comma separated, no field names
+	 *        LIST_AND           - ANDed WHERE clause (without the WHERE)
+	 *        LIST_OR            - ORed WHERE clause (without the WHERE)
+	 *        LIST_SET           - comma separated with field names, like a SET clause
+	 *        LIST_NAMES         - comma separated field names
+	 */
+	function makeList( $a, $mode = LIST_COMMA ) {
+		if ( !is_array( $a ) ) {
+			throw new DBUnexpectedError( $this, 'Database::makeList called with incorrect parameters' );
+		}
+
+		$first = true;
+		$list = '';
+		foreach ( $a as $field => $value ) {
+			if ( !$first ) {
+				if ( $mode == LIST_AND ) {
+					$list .= ' AND ';
+				} elseif($mode == LIST_OR) {
+					$list .= ' OR ';
+				} else {
+					$list .= ',';
+				}
+			} else {
+				$first = false;
+			}
+			if ( ($mode == LIST_AND || $mode == LIST_OR) && is_numeric( $field ) ) {
+				$list .= "($value)";
+			} elseif ( ($mode == LIST_SET) && is_numeric( $field ) ) {
+				$list .= "$value";
+			} elseif ( ($mode == LIST_AND || $mode == LIST_OR) && is_array ($value) ) {
+				$list .= $field." IN (".$this->makeList($value).") ";
+			} else {
+				if ( $mode == LIST_AND || $mode == LIST_OR || $mode == LIST_SET ) {
+					$list .= "$field = ";
+				}
+				$list .= $mode == LIST_NAMES ? $value : $this->addQuotes( $value );
+			}
+		}
+		return $list;
+	}
+
+	/**
+	 * Change the current database
+	 */
+	function selectDB( $db ) {
+		$this->mDBname = $db;
+		return mysql_select_db( $db, $this->mConn );
+	}
+
+	/**
+	 * Format a table name ready for use in constructing an SQL query
+	 *
+	 * This does two important things: it quotes table names which as necessary,
+	 * and it adds a table prefix if there is one.
+	 *
+	 * All functions of this object which require a table name call this function
+	 * themselves. Pass the canonical name to such functions. This is only needed
+	 * when calling query() directly.
+	 *
+	 * @param string $name database table name
+	 */
+	function tableName( $name ) {
+		global $wgSharedDB;
+		# Skip quoted literals
+		if ( $name{0} != '`' ) {
+			if ( $this->mTablePrefix !== '' &&  strpos( '.', $name ) === false ) {
+				$name = "{$this->mTablePrefix}$name";
+			}
+			if ( isset( $wgSharedDB ) && "{$this->mTablePrefix}user" == $name ) {
+				$name = "`$wgSharedDB`.`$name`";
+			} else {
+				# Standard quoting
+				$name = "`$name`";
+			}
+		}
+		return $name;
+	}
+
+	/**
+	 * Fetch a number of table names into an array
+	 * This is handy when you need to construct SQL for joins
+	 *
+	 * Example:
+	 * extract($dbr->tableNames('user','watchlist'));
+	 * $sql = "SELECT wl_namespace,wl_title FROM $watchlist,$user
+	 *         WHERE wl_user=user_id AND wl_user=$nameWithQuotes";
+	 */
+	public function tableNames() {
+		$inArray = func_get_args();
+		$retVal = array();
+		foreach ( $inArray as $name ) {
+			$retVal[$name] = $this->tableName( $name );
+		}
+		return $retVal;
+	}
+	
+	/**
+	 * Fetch a number of table names into an zero-indexed numerical array
+	 * This is handy when you need to construct SQL for joins
+	 *
+	 * Example:
+	 * list( $user, $watchlist ) = $dbr->tableNames('user','watchlist');
+	 * $sql = "SELECT wl_namespace,wl_title FROM $watchlist,$user
+	 *         WHERE wl_user=user_id AND wl_user=$nameWithQuotes";
+	 */
+	public function tableNamesN() {
+		$inArray = func_get_args();
+		$retVal = array();
+		foreach ( $inArray as $name ) {
+			$retVal[] = $this->tableName( $name );
+		}
+		return $retVal;
+	}
+
+	/**
+	 * @private
+	 */
+	function tableNamesWithUseIndex( $tables, $use_index ) {
+		$ret = array();
+
+		foreach ( $tables as $table )
+			if ( @$use_index[$table] !== null )
+				$ret[] = $this->tableName( $table ) . ' ' . $this->useIndexClause( implode( ',', (array)$use_index[$table] ) );
+			else
+				$ret[] = $this->tableName( $table );
+
+		return implode( ',', $ret );
+	}
+
+	/**
+	 * Wrapper for addslashes()
+	 * @param string $s String to be slashed.
+	 * @return string slashed string.
+	 */
+	function strencode( $s ) {
+		return mysql_real_escape_string( $s, $this->mConn );
+	}
+
+	/**
+	 * If it's a string, adds quotes and backslashes
+	 * Otherwise returns as-is
+	 */
+	function addQuotes( $s ) {
+		if ( is_null( $s ) ) {
+			return 'NULL';
+		} else {
+			# This will also quote numeric values. This should be harmless,
+			# and protects against weird problems that occur when they really
+			# _are_ strings such as article titles and string->number->string
+			# conversion is not 1:1.
+			return "'" . $this->strencode( $s ) . "'";
+		}
+	}
+
+	/**
+	 * Escape string for safe LIKE usage
+	 */
+	function escapeLike( $s ) {
+		$s=$this->strencode( $s );
+		$s=str_replace(array('%','_'),array('\%','\_'),$s);
+		return $s;
+	}
+
+	/**
+	 * Returns an appropriately quoted sequence value for inserting a new row.
+	 * MySQL has autoincrement fields, so this is just NULL. But the PostgreSQL
+	 * subclass will return an integer, and save the value for insertId()
+	 */
+	function nextSequenceValue( $seqName ) {
+		return NULL;
+	}
+
+	/**
+	 * USE INDEX clause
+	 * PostgreSQL doesn't have them and returns ""
+	 */
+	function useIndexClause( $index ) {
+		return "FORCE INDEX ($index)";
+	}
+
+	/**
+	 * REPLACE query wrapper
+	 * PostgreSQL simulates this with a DELETE followed by INSERT
+	 * $row is the row to insert, an associative array
+	 * $uniqueIndexes is an array of indexes. Each element may be either a
+	 * field name or an array of field names
+	 *
+	 * It may be more efficient to leave off unique indexes which are unlikely to collide.
+	 * However if you do this, you run the risk of encountering errors which wouldn't have
+	 * occurred in MySQL
+	 *
+	 * @todo migrate comment to phodocumentor format
+	 */
+	function replace( $table, $uniqueIndexes, $rows, $fname = 'Database::replace' ) {
+		$table = $this->tableName( $table );
+
+		# Single row case
+		if ( !is_array( reset( $rows ) ) ) {
+			$rows = array( $rows );
+		}
+
+		$sql = "REPLACE INTO $table (" . implode( ',', array_keys( $rows[0] ) ) .') VALUES ';
+		$first = true;
+		foreach ( $rows as $row ) {
+			if ( $first ) {
+				$first = false;
+			} else {
+				$sql .= ',';
+			}
+			$sql .= '(' . $this->makeList( $row ) . ')';
+		}
+		return $this->query( $sql, $fname );
+	}
+
+	/**
+	 * DELETE where the condition is a join
+	 * MySQL does this with a multi-table DELETE syntax, PostgreSQL does it with sub-selects
+	 *
+	 * For safety, an empty $conds will not delete everything. If you want to delete all rows where the
+	 * join condition matches, set $conds='*'
+	 *
+	 * DO NOT put the join condition in $conds
+	 *
+	 * @param string $delTable The table to delete from.
+	 * @param string $joinTable The other table.
+	 * @param string $delVar The variable to join on, in the first table.
+	 * @param string $joinVar The variable to join on, in the second table.
+	 * @param array $conds Condition array of field names mapped to variables, ANDed together in the WHERE clause
+	 */
+	function deleteJoin( $delTable, $joinTable, $delVar, $joinVar, $conds, $fname = 'Database::deleteJoin' ) {
+		if ( !$conds ) {
+			throw new DBUnexpectedError( $this, 'Database::deleteJoin() called with empty $conds' );
+		}
+
+		$delTable = $this->tableName( $delTable );
+		$joinTable = $this->tableName( $joinTable );
+		$sql = "DELETE $delTable FROM $delTable, $joinTable WHERE $delVar=$joinVar ";
+		if ( $conds != '*' ) {
+			$sql .= ' AND ' . $this->makeList( $conds, LIST_AND );
+		}
+
+		return $this->query( $sql, $fname );
+	}
+
+	/**
+	 * Returns the size of a text field, or -1 for "unlimited"
+	 */
+	function textFieldSize( $table, $field ) {
+		$table = $this->tableName( $table );
+		$sql = "SHOW COLUMNS FROM $table LIKE \"$field\";";
+		$res = $this->query( $sql, 'Database::textFieldSize' );
+		$row = $this->fetchObject( $res );
+		$this->freeResult( $res );
+
+		$m = array();
+		if ( preg_match( '/\((.*)\)/', $row->Type, $m ) ) {
+			$size = $m[1];
+		} else {
+			$size = -1;
+		}
+		return $size;
+	}
+
+	/**
+	 * @return string Returns the text of the low priority option if it is supported, or a blank string otherwise
+	 */
+	function lowPriorityOption() {
+		return 'LOW_PRIORITY';
+	}
+
+	/**
+	 * DELETE query wrapper
+	 *
+	 * Use $conds == "*" to delete all rows
+	 */
+	function delete( $table, $conds, $fname = 'Database::delete' ) {
+		if ( !$conds ) {
+			throw new DBUnexpectedError( $this, 'Database::delete() called with no conditions' );
+		}
+		$table = $this->tableName( $table );
+		$sql = "DELETE FROM $table";
+		if ( $conds != '*' ) {
+			$sql .= ' WHERE ' . $this->makeList( $conds, LIST_AND );
+		}
+		return $this->query( $sql, $fname );
+	}
+
+	/**
+	 * INSERT SELECT wrapper
+	 * $varMap must be an associative array of the form array( 'dest1' => 'source1', ...)
+	 * Source items may be literals rather than field names, but strings should be quoted with Database::addQuotes()
+	 * $conds may be "*" to copy the whole table
+	 * srcTable may be an array of tables.
+	 */
+	function insertSelect( $destTable, $srcTable, $varMap, $conds, $fname = 'Database::insertSelect',
+		$insertOptions = array(), $selectOptions = array() )
+	{
+		$destTable = $this->tableName( $destTable );
+		if ( is_array( $insertOptions ) ) {
+			$insertOptions = implode( ' ', $insertOptions );
+		}
+		if( !is_array( $selectOptions ) ) {
+			$selectOptions = array( $selectOptions );
+		}
+		list( $startOpts, $useIndex, $tailOpts ) = $this->makeSelectOptions( $selectOptions );
+		if( is_array( $srcTable ) ) {
+			$srcTable =  implode( ',', array_map( array( &$this, 'tableName' ), $srcTable ) );
+		} else {
+			$srcTable = $this->tableName( $srcTable );
+		}
+		$sql = "INSERT $insertOptions INTO $destTable (" . implode( ',', array_keys( $varMap ) ) . ')' .
+			" SELECT $startOpts " . implode( ',', $varMap ) .
+			" FROM $srcTable $useIndex ";
+		if ( $conds != '*' ) {
+			$sql .= ' WHERE ' . $this->makeList( $conds, LIST_AND );
+		}
+		$sql .= " $tailOpts";
+		return $this->query( $sql, $fname );
+	}
+
+	/**
+	 * Construct a LIMIT query with optional offset
+	 * This is used for query pages
+	 * $sql string SQL query we will append the limit too
+	 * $limit integer the SQL limit
+	 * $offset integer the SQL offset (default false)
+	 */
+	function limitResult($sql, $limit, $offset=false) {
+		if( !is_numeric($limit) ) {
+			throw new DBUnexpectedError( $this, "Invalid non-numeric limit passed to limitResult()\n" );
+		}
+		return " $sql LIMIT "
+				. ( (is_numeric($offset) && $offset != 0) ? "{$offset}," : "" )
+				. "{$limit} ";
+	}
+	function limitResultForUpdate($sql, $num) {
+		return $this->limitResult($sql, $num, 0);
+	}
+
+	/**
+	 * Returns an SQL expression for a simple conditional.
+	 * Uses IF on MySQL.
+	 *
+	 * @param string $cond SQL expression which will result in a boolean value
+	 * @param string $trueVal SQL expression to return if true
+	 * @param string $falseVal SQL expression to return if false
+	 * @return string SQL fragment
+	 */
+	function conditional( $cond, $trueVal, $falseVal ) {
+		return " IF($cond, $trueVal, $falseVal) ";
+	}
+
+	/**
+	 * Determines if the last failure was due to a deadlock
+	 */
+	function wasDeadlock() {
+		return $this->lastErrno() == 1213;
+	}
+
+	/**
+	 * Perform a deadlock-prone transaction.
+	 *
+	 * This function invokes a callback function to perform a set of write
+	 * queries. If a deadlock occurs during the processing, the transaction
+	 * will be rolled back and the callback function will be called again.
+	 *
+	 * Usage:
+	 *   $dbw->deadlockLoop( callback, ... );
+	 *
+	 * Extra arguments are passed through to the specified callback function.
+	 *
+	 * Returns whatever the callback function returned on its successful,
+	 * iteration, or false on error, for example if the retry limit was
+	 * reached.
+	 */
+	function deadlockLoop() {
+		$myFname = 'Database::deadlockLoop';
+
+		$this->begin();
+		$args = func_get_args();
+		$function = array_shift( $args );
+		$oldIgnore = $this->ignoreErrors( true );
+		$tries = DEADLOCK_TRIES;
+		if ( is_array( $function ) ) {
+			$fname = $function[0];
+		} else {
+			$fname = $function;
+		}
+		do {
+			$retVal = call_user_func_array( $function, $args );
+			$error = $this->lastError();
+			$errno = $this->lastErrno();
+			$sql = $this->lastQuery();
+
+			if ( $errno ) {
+				if ( $this->wasDeadlock() ) {
+					# Retry
+					usleep( mt_rand( DEADLOCK_DELAY_MIN, DEADLOCK_DELAY_MAX ) );
+				} else {
+					$this->reportQueryError( $error, $errno, $sql, $fname );
+				}
+			}
+		} while( $this->wasDeadlock() && --$tries > 0 );
+		$this->ignoreErrors( $oldIgnore );
+		if ( $tries <= 0 ) {
+			$this->query( 'ROLLBACK', $myFname );
+			$this->reportQueryError( $error, $errno, $sql, $fname );
+			return false;
+		} else {
+			$this->query( 'COMMIT', $myFname );
+			return $retVal;
+		}
+	}
+
+	/**
+	 * Do a SELECT MASTER_POS_WAIT()
+	 *
+	 * @param string $file the binlog file
+	 * @param string $pos the binlog position
+	 * @param integer $timeout the maximum number of seconds to wait for synchronisation
+	 */
+	function masterPosWait( $file, $pos, $timeout ) {
+		$fname = 'Database::masterPosWait';
+		wfProfileIn( $fname );
+
+
+		# Commit any open transactions
+		$this->immediateCommit();
+
+		# Call doQuery() directly, to avoid opening a transaction if DBO_TRX is set
+		$encFile = $this->strencode( $file );
+		$sql = "SELECT MASTER_POS_WAIT('$encFile', $pos, $timeout)";
+		$res = $this->doQuery( $sql );
+		if ( $res && $row = $this->fetchRow( $res ) ) {
+			$this->freeResult( $res );
+			wfProfileOut( $fname );
+			return $row[0];
+		} else {
+			wfProfileOut( $fname );
+			return false;
+		}
+	}
+
+	/**
+	 * Get the position of the master from SHOW SLAVE STATUS
+	 */
+	function getSlavePos() {
+		$res = $this->query( 'SHOW SLAVE STATUS', 'Database::getSlavePos' );
+		$row = $this->fetchObject( $res );
+		if ( $row ) {
+			return array( $row->Master_Log_File, $row->Read_Master_Log_Pos );
+		} else {
+			return array( false, false );
+		}
+	}
+
+	/**
+	 * Get the position of the master from SHOW MASTER STATUS
+	 */
+	function getMasterPos() {
+		$res = $this->query( 'SHOW MASTER STATUS', 'Database::getMasterPos' );
+		$row = $this->fetchObject( $res );
+		if ( $row ) {
+			return array( $row->File, $row->Position );
+		} else {
+			return array( false, false );
+		}
+	}
+
+	/**
+	 * Begin a transaction, committing any previously open transaction
+	 */
+	function begin( $fname = 'Database::begin' ) {
+		$this->query( 'BEGIN', $fname );
+		$this->mTrxLevel = 1;
+	}
+
+	/**
+	 * End a transaction
+	 */
+	function commit( $fname = 'Database::commit' ) {
+		$this->query( 'COMMIT', $fname );
+		$this->mTrxLevel = 0;
+	}
+
+	/**
+	 * Rollback a transaction
+	 */
+	function rollback( $fname = 'Database::rollback' ) {
+		$this->query( 'ROLLBACK', $fname );
+		$this->mTrxLevel = 0;
+	}
+
+	/**
+	 * Begin a transaction, committing any previously open transaction
+	 * @deprecated use begin()
+	 */
+	function immediateBegin( $fname = 'Database::immediateBegin' ) {
+		$this->begin();
+	}
+
+	/**
+	 * Commit transaction, if one is open
+	 * @deprecated use commit()
+	 */
+	function immediateCommit( $fname = 'Database::immediateCommit' ) {
+		$this->commit();
+	}
+
+	/**
+	 * Return MW-style timestamp used for MySQL schema
+	 */
+	function timestamp( $ts=0 ) {
+		return wfTimestamp(TS_MW,$ts);
+	}
+
+	/**
+	 * Local database timestamp format or null
+	 */
+	function timestampOrNull( $ts = null ) {
+		if( is_null( $ts ) ) {
+			return null;
+		} else {
+			return $this->timestamp( $ts );
+		}
+	}
+
+	/**
+	 * @todo document
+	 */
+	function resultObject( $result ) {
+		if( empty( $result ) ) {
+			return NULL;
+		} else {
+			return new ResultWrapper( $this, $result );
+		}
+	}
+
+	/**
+	 * Return aggregated value alias
+	 */
+	function aggregateValue ($valuedata,$valuename='value') {
+		return $valuename;
+	}
+
+	/**
+	 * @return string wikitext of a link to the server software's web site
+	 */
+	function getSoftwareLink() {
+		return "[http://www.mysql.com/ MySQL]";
+	}
+
+	/**
+	 * @return string Version information from the database
+	 */
+	function getServerVersion() {
+		return mysql_get_server_info( $this->mConn );
+	}
+
+	/**
+	 * Ping the server and try to reconnect if it there is no connection
+	 */
+	function ping() {
+		if( function_exists( 'mysql_ping' ) ) {
+			return mysql_ping( $this->mConn );
+		} else {
+			wfDebug( "Tried to call mysql_ping but this is ancient PHP version. Faking it!\n" );
+			return true;
+		}
+	}
+
+	/**
+	 * Get slave lag.
+	 * At the moment, this will only work if the DB user has the PROCESS privilege
+	 */
+	function getLag() {
+		$res = $this->query( 'SHOW PROCESSLIST' );
+		# Find slave SQL thread. Assumed to be the second one running, which is a bit
+		# dubious, but unfortunately there's no easy rigorous way
+		while ( $row = $this->fetchObject( $res ) ) {
+			/* This should work for most situations - when default db 
+			 * for thread is not specified, it had no events executed, 
+			 * and therefore it doesn't know yet how lagged it is.
+			 *
+			 * Relay log I/O thread does not select databases.
+			 */
+			if ( $row->User == 'system user' && 
+				$row->State != 'Waiting for master to send event' &&
+				$row->State != 'Connecting to master' && 
+				$row->State != 'Queueing master event to the relay log' &&
+				$row->State != 'Waiting for master update' &&
+				$row->State != 'Requesting binlog dump'
+				) {
+				# This is it, return the time (except -ve)
+				if ( $row->Time > 0x7fffffff ) {
+					return false;
+				} else {
+					return $row->Time;
+				}
+			}
+		}
+		return false;
+	}
+
+	/**
+	 * Get status information from SHOW STATUS in an associative array
+	 */
+	function getStatus($which="%") {
+		$res = $this->query( "SHOW STATUS LIKE '{$which}'" );
+		$status = array();
+		while ( $row = $this->fetchObject( $res ) ) {
+			$status[$row->Variable_name] = $row->Value;
+		}
+		return $status;
+	}
+
+	/**
+	 * Return the maximum number of items allowed in a list, or 0 for unlimited.
+	 */
+	function maxListLen() {
+		return 0;
+	}
+
+	function encodeBlob($b) {
+		return $b;
+	}
+
+	function decodeBlob($b) {
+		return $b;
+	}
+
+	/**
+	 * Override database's default connection timeout.
+	 * May be useful for very long batch queries such as
+	 * full-wiki dumps, where a single query reads out
+	 * over hours or days.
+	 * @param int $timeout in seconds
+	 */
+	public function setTimeout( $timeout ) {
+		$this->query( "SET net_read_timeout=$timeout" );
+		$this->query( "SET net_write_timeout=$timeout" );
+	}
+
+	/**
+	 * Read and execute SQL commands from a file.
+	 * Returns true on success, error string on failure
+	 * @param string $filename File name to open
+	 * @param callback $lineCallback Optional function called before reading each line
+	 * @param callback $resultCallback Optional function called for each MySQL result
+	 */
+	function sourceFile( $filename, $lineCallback = false, $resultCallback = false ) {
+		$fp = fopen( $filename, 'r' );
+		if ( false === $fp ) {
+			return "Could not open \"{$filename}\".\n";
+		}
+		$error = $this->sourceStream( $fp, $lineCallback, $resultCallback );
+		fclose( $fp );
+		return $error;
+	}
+
+	/**
+	 * Read and execute commands from an open file handle
+	 * Returns true on success, error string on failure
+	 * @param string $fp File handle
+	 * @param callback $lineCallback Optional function called before reading each line
+	 * @param callback $resultCallback Optional function called for each MySQL result
+	 */
+	function sourceStream( $fp, $lineCallback = false, $resultCallback = false ) {
+		$cmd = "";
+		$done = false;
+		$dollarquote = false;
+
+		while ( ! feof( $fp ) ) {
+			if ( $lineCallback ) {
+				call_user_func( $lineCallback );
+			}
+			$line = trim( fgets( $fp, 1024 ) );
+			$sl = strlen( $line ) - 1;
+
+			if ( $sl < 0 ) { continue; }
+			if ( '-' == $line{0} && '-' == $line{1} ) { continue; }
+
+			## Allow dollar quoting for function declarations
+			if (substr($line,0,4) == '$mw$') {
+				if ($dollarquote) {
+					$dollarquote = false;
+					$done = true;
+				}
+				else {
+					$dollarquote = true;
+				}
+			}
+			else if (!$dollarquote) {
+				if ( ';' == $line{$sl} && ($sl < 2 || ';' != $line{$sl - 1})) {
+					$done = true;
+					$line = substr( $line, 0, $sl );
+				}
+			}
+
+			if ( '' != $cmd ) { $cmd .= ' '; }
+			$cmd .= "$line\n";
+
+			if ( $done ) {
+				$cmd = str_replace(';;', ";", $cmd);
+				$cmd = $this->replaceVars( $cmd );
+				$res = $this->query( $cmd, __METHOD__, true );
+				if ( $resultCallback ) {
+					call_user_func( $resultCallback, $this->resultObject( $res ) );
+				}
+
+				if ( false === $res ) {
+					$err = $this->lastError();
+					return "Query \"{$cmd}\" failed with error code \"$err\".\n";
+				}
+
+				$cmd = '';
+				$done = false;
+			}
+		}
+		return true;
+	}
+
+
+	/**
+	 * Replace variables in sourced SQL
+	 */
+	protected function replaceVars( $ins ) {
+		$varnames = array(
+			'wgDBserver', 'wgDBname', 'wgDBintlname', 'wgDBuser',
+			'wgDBpassword', 'wgDBsqluser', 'wgDBsqlpassword',
+			'wgDBadminuser', 'wgDBadminpassword', 'wgDBTableOptions',
+		);
+
+		// Ordinary variables
+		foreach ( $varnames as $var ) {
+			if( isset( $GLOBALS[$var] ) ) {
+				$val = addslashes( $GLOBALS[$var] ); // FIXME: safety check?
+				$ins = str_replace( '{$' . $var . '}', $val, $ins );
+				$ins = str_replace( '/*$' . $var . '*/`', '`' . $val, $ins );
+				$ins = str_replace( '/*$' . $var . '*/', $val, $ins );
+			}
+		}
+
+		// Table prefixes
+		$ins = preg_replace_callback( '/\/\*(?:\$wgDBprefix|_)\*\/([a-z_]*)/',
+			array( &$this, 'tableNameCallback' ), $ins );
+		return $ins;
+	}
+
+	/**
+	 * Table name callback
+	 * @private
+	 */
+	protected function tableNameCallback( $matches ) {
+		return $this->tableName( $matches[1] );
+	}
+
+}
+
+/**
+ * Database abstraction object for mySQL
+ * Inherit all methods and properties of Database::Database()
+ *
+ * @addtogroup Database
+ * @see Database
+ */
+class DatabaseMysql extends Database {
+	# Inherit all
+}
+
+
+/**
+ * Result wrapper for grabbing data queried by someone else
+ * @addtogroup Database
+ */
+class ResultWrapper {
+	var $db, $result;
+
+	/**
+	 * @todo document
+	 */
+	function ResultWrapper( &$database, $result ) {
+		$this->db =& $database;
+		$this->result =& $result;
+	}
+
+	/**
+	 * @todo document
+	 */
+	function numRows() {
+		return $this->db->numRows( $this->result );
+	}
+
+	/**
+	 * @todo document
+	 */
+	function fetchObject() {
+		return $this->db->fetchObject( $this->result );
+	}
+
+	/**
+	 * @todo document
+	 */
+	function fetchRow() {
+		return $this->db->fetchRow( $this->result );
+	}
+
+	/**
+	 * @todo document
+	 */
+	function free() {
+		$this->db->freeResult( $this->result );
+		unset( $this->result );
+		unset( $this->db );
+	}
+
+	function seek( $row ) {
+		$this->db->dataSeek( $this->result, $row );
+	}
+	
+	function rewind() {
+		if ($this->numRows()) {
+			$this->db->dataSeek($this->result, 0);
+		}
+	}
+
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/DatabaseFunctions.php
===================================================================
--- /MediaWiki/branches/1.11/includes/DatabaseFunctions.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/DatabaseFunctions.php	(revision 1280)
@@ -0,0 +1,402 @@
+<?php
+/**
+ * Legacy database functions, for compatibility with pre-1.3 code
+ * NOTE: this file is no longer loaded by default.
+ *
+ */
+
+/**
+ * Usually aborts on failure
+ * If errors are explicitly ignored, returns success
+ * @param $sql String: SQL query
+ * @param $db Mixed: database handler
+ * @param $fname String: name of the php function calling
+ */
+function wfQuery( $sql, $db, $fname = '' ) {
+	if ( !is_numeric( $db ) ) {
+		# Someone has tried to call this the old way
+		throw new FatalError( wfMsgNoDB( 'wrong_wfQuery_params', $db, $sql ) );
+	}
+	$c = wfGetDB( $db );
+	if ( $c !== false ) {
+		return $c->query( $sql, $fname );
+	} else {
+		return false;
+	}
+}
+
+/**
+ *
+ * @param $sql String: SQL query
+ * @param $dbi
+ * @param $fname String: name of the php function calling
+ * @return Array: first row from the database
+ */
+function wfSingleQuery( $sql, $dbi, $fname = '' ) {
+	$db = wfGetDB( $dbi );
+	$res = $db->query($sql, $fname );
+	$row = $db->fetchRow( $res );
+	$ret = $row[0];
+	$db->freeResult( $res );
+	return $ret;
+}
+
+/**
+ * Turns on (false) or off (true) the automatic generation and sending
+ * of a "we're sorry, but there has been a database error" page on
+ * database errors. Default is on (false). When turned off, the
+ * code should use wfLastErrno() and wfLastError() to handle the
+ * situation as appropriate.
+ *
+ * @param $newstate
+ * @param $dbi
+ * @return Returns the previous state.
+ */
+function wfIgnoreSQLErrors( $newstate, $dbi = DB_LAST ) {
+	$db = wfGetDB( $dbi );
+	if ( $db !== false ) {
+		return $db->ignoreErrors( $newstate );
+	} else {
+		return NULL;
+	}
+}
+
+/**#@+
+ * @param $res Database result handler
+ * @param $dbi
+*/
+
+/**
+ * Free a database result
+ * @return Bool: whether result is sucessful or not.
+ */
+function wfFreeResult( $res, $dbi = DB_LAST )
+{
+	$db = wfGetDB( $dbi );
+	if ( $db !== false ) {
+		$db->freeResult( $res );
+		return true;
+	} else {
+		return false;
+	}
+}
+
+/**
+ * Get an object from a database result
+ * @return object|false object we requested
+ */
+function wfFetchObject( $res, $dbi = DB_LAST ) {
+	$db = wfGetDB( $dbi );
+	if ( $db !== false ) {
+		return $db->fetchObject( $res, $dbi = DB_LAST );
+	} else {
+		return false;
+	}
+}
+
+/**
+ * Get a row from a database result
+ * @return object|false row we requested
+ */
+function wfFetchRow( $res, $dbi = DB_LAST ) {
+	$db = wfGetDB( $dbi );
+	if ( $db !== false ) {
+		return $db->fetchRow ( $res, $dbi = DB_LAST );
+	} else {
+		return false;
+	}
+}
+
+/**
+ * Get a number of rows from a database result
+ * @return integer|false number of rows
+ */
+function wfNumRows( $res, $dbi = DB_LAST ) {
+	$db = wfGetDB( $dbi );
+	if ( $db !== false ) {
+		return $db->numRows( $res, $dbi = DB_LAST );
+	} else {
+		return false;
+	}
+}
+
+/**
+ * Get the number of fields from a database result
+ * @return integer|false number of fields
+ */
+function wfNumFields( $res, $dbi = DB_LAST ) {
+	$db = wfGetDB( $dbi );
+	if ( $db !== false ) {
+		return $db->numFields( $res );
+	} else {
+		return false;
+	}
+}
+
+/**
+ * Return name of a field in a result
+ * @param $res Mixed: Ressource link see Database::fieldName()
+ * @param $n Integer: id of the field
+ * @param $dbi Default DB_LAST
+ * @return string|false name of field
+ */
+function wfFieldName( $res, $n, $dbi = DB_LAST )
+{
+	$db = wfGetDB( $dbi );
+	if ( $db !== false ) {
+		return $db->fieldName( $res, $n, $dbi = DB_LAST );
+	} else {
+		return false;
+	}
+}
+/**#@-*/
+
+/**
+ * @todo document function
+ */
+function wfInsertId( $dbi = DB_LAST ) {
+	$db = wfGetDB( $dbi );
+	if ( $db !== false ) {
+		return $db->insertId();
+	} else {
+		return false;
+	}
+}
+
+/**
+ * @todo document function
+ */
+function wfDataSeek( $res, $row, $dbi = DB_LAST ) {
+	$db = wfGetDB( $dbi );
+	if ( $db !== false ) {
+		return $db->dataSeek( $res, $row );
+	} else {
+		return false;
+	}
+}
+
+/**
+ * @todo document function
+ */
+function wfLastErrno( $dbi = DB_LAST ) {
+	$db = wfGetDB( $dbi );
+	if ( $db !== false ) {
+		return $db->lastErrno();
+	} else {
+		return false;
+	}
+}
+
+/**
+ * @todo document function
+ */
+function wfLastError( $dbi = DB_LAST ) {
+	$db = wfGetDB( $dbi );
+	if ( $db !== false ) {
+		return $db->lastError();
+	} else {
+		return false;
+	}
+}
+
+/**
+ * @todo document function
+ */
+function wfAffectedRows( $dbi = DB_LAST ) {
+	$db = wfGetDB( $dbi );
+	if ( $db !== false ) {
+		return $db->affectedRows();
+	} else {
+		return false;
+	}
+}
+
+/**
+ * @todo document function
+ */
+function wfLastDBquery( $dbi = DB_LAST ) {
+	$db = wfGetDB( $dbi );
+	if ( $db !== false ) {
+		return $db->lastQuery();
+	} else {
+		return false;
+	}
+}
+
+/**
+ * @see Database::Set()
+ * @todo document function
+ * @param $table
+ * @param $var
+ * @param $value
+ * @param $cond
+ * @param $dbi Default DB_MASTER
+ */
+function wfSetSQL( $table, $var, $value, $cond, $dbi = DB_MASTER )
+{
+	$db = wfGetDB( $dbi );
+	if ( $db !== false ) {
+		return $db->set( $table, $var, $value, $cond );
+	} else {
+		return false;
+	}
+}
+
+
+/**
+ * @see Database::selectField()
+ * @todo document function
+ * @param $table
+ * @param $var
+ * @param $cond Default ''
+ * @param $dbi Default DB_LAST
+ */
+function wfGetSQL( $table, $var, $cond='', $dbi = DB_LAST )
+{
+	$db = wfGetDB( $dbi );
+	if ( $db !== false ) {
+		return $db->selectField( $table, $var, $cond );
+	} else {
+		return false;
+	}
+}
+
+/**
+ * @see Database::fieldExists()
+ * @todo document function
+ * @param $table
+ * @param $field
+ * @param $dbi Default DB_LAST
+ * @return Result of Database::fieldExists() or false.
+ */
+function wfFieldExists( $table, $field, $dbi = DB_LAST ) {
+	$db = wfGetDB( $dbi );
+	if ( $db !== false ) {
+		return $db->fieldExists( $table, $field );
+	} else {
+		return false;
+	}
+}
+
+/**
+ * @see Database::indexExists()
+ * @todo document function
+ * @param $table String
+ * @param $index
+ * @param $dbi Default DB_LAST
+ * @return Result of Database::indexExists() or false.
+ */
+function wfIndexExists( $table, $index, $dbi = DB_LAST ) {
+	$db = wfGetDB( $dbi );
+	if ( $db !== false ) {
+		return $db->indexExists( $table, $index );
+	} else {
+		return false;
+	}
+}
+
+/**
+ * @see Database::insert()
+ * @todo document function
+ * @param $table String
+ * @param $array Array
+ * @param $fname String, default 'wfInsertArray'.
+ * @param $dbi Default DB_MASTER
+ * @return result of Database::insert() or false.
+ */
+function wfInsertArray( $table, $array, $fname = 'wfInsertArray', $dbi = DB_MASTER ) {
+	$db = wfGetDB( $dbi );
+	if ( $db !== false ) {
+		return $db->insert( $table, $array, $fname );
+	} else {
+		return false;
+	}
+}
+
+/**
+ * @see Database::getArray()
+ * @todo document function
+ * @param $table String
+ * @param $vars
+ * @param $conds
+ * @param $fname String, default 'wfGetArray'.
+ * @param $dbi Default DB_LAST
+ * @return result of Database::getArray() or false.
+ */
+function wfGetArray( $table, $vars, $conds, $fname = 'wfGetArray', $dbi = DB_LAST ) {
+	$db = wfGetDB( $dbi );
+	if ( $db !== false ) {
+		return $db->getArray( $table, $vars, $conds, $fname );
+	} else {
+		return false;
+	}
+}
+
+/**
+ * @see Database::update()
+ * @param $table String
+ * @param $values
+ * @param $conds
+ * @param $fname String, default 'wfUpdateArray'
+ * @param $dbi Default DB_MASTER
+ * @return Result of Database::update()) or false;
+ * @todo document function
+ */
+function wfUpdateArray( $table, $values, $conds, $fname = 'wfUpdateArray', $dbi = DB_MASTER ) {
+	$db = wfGetDB( $dbi );
+	if ( $db !== false ) {
+		$db->update( $table, $values, $conds, $fname );
+		return true;
+	} else {
+		return false;
+	}
+}
+
+/**
+ * @todo document function
+ */
+function wfTableName( $name, $dbi = DB_LAST ) {
+	$db = wfGetDB( $dbi );
+	if ( $db !== false ) {
+		return $db->tableName( $name );
+	} else {
+		return false;
+	}
+}
+
+/**
+ * @todo document function
+ */
+function wfStrencode( $s, $dbi = DB_LAST ) {
+	$db = wfGetDB( $dbi );
+	if ( $db !== false ) {
+		return $db->strencode( $s );
+	} else {
+		return false;
+	}
+}
+
+/**
+ * @todo document function
+ */
+function wfNextSequenceValue( $seqName, $dbi = DB_MASTER ) {
+	$db = wfGetDB( $dbi );
+	if ( $db !== false ) {
+		return $db->nextSequenceValue( $seqName );
+	} else {
+		return false;
+	}
+}
+
+/**
+ * @todo document function
+ */
+function wfUseIndexClause( $index, $dbi = DB_SLAVE ) {
+	$db = wfGetDB( $dbi );
+	if ( $db !== false ) {
+		return $db->useIndexClause( $index );
+	} else {
+		return false;
+	}
+}
+?>
Index: /MediaWiki/branches/1.11/includes/DatabaseOracle.php
===================================================================
--- /MediaWiki/branches/1.11/includes/DatabaseOracle.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/DatabaseOracle.php	(revision 1280)
@@ -0,0 +1,685 @@
+<?php
+
+/**
+ * This is the Oracle database abstraction layer.
+ * @addtogroup Database
+ */
+class ORABlob {
+	var $mData;
+
+	function __construct($data) {
+		$this->mData = $data;
+	}
+
+	function getData() {
+		return $this->mData;
+	}
+}
+
+/**
+ * The oci8 extension is fairly weak and doesn't support oci_num_rows, among 
+ * other things.  We use a wrapper class to handle that and other 
+ * Oracle-specific bits, like converting column names back to lowercase.
+ * @addtogroup Database
+ */
+class ORAResult {
+	private $rows;
+	private $cursor;
+	private $stmt;
+	private $nrows;
+	private $db;
+
+	function __construct(&$db, $stmt) {
+		$this->db =& $db;
+		if (($this->nrows = oci_fetch_all($stmt, $this->rows, 0, -1, OCI_FETCHSTATEMENT_BY_ROW | OCI_NUM)) === false) {
+			$e = oci_error($stmt);
+			$db->reportQueryError($e['message'], $e['code'], '', __FUNCTION__);
+			return;
+		}
+
+		$this->cursor = 0;
+		$this->stmt = $stmt;
+	}
+
+	function free() {
+		oci_free_statement($this->stmt);
+	}
+
+	function seek($row) {
+		$this->cursor = min($row, $this->nrows);
+	}
+
+	function numRows() {
+		return $this->nrows;
+	}
+
+	function numFields() {
+		return oci_num_fields($this->stmt);
+	}
+
+	function fetchObject() {
+		if ($this->cursor >= $this->nrows)
+			return false;
+
+		$row = $this->rows[$this->cursor++];
+		$ret = new stdClass();
+		foreach ($row as $k => $v) {
+			$lc = strtolower(oci_field_name($this->stmt, $k + 1));
+			$ret->$lc = $v;
+		}
+
+		return $ret;
+	}
+
+	function fetchAssoc() {
+		if ($this->cursor >= $this->nrows)
+			return false;
+
+		$row = $this->rows[$this->cursor++];
+		$ret = array();
+		foreach ($row as $k => $v) {
+			$lc = strtolower(oci_field_name($this->stmt, $k + 1));
+			$ret[$lc] = $v;
+			$ret[$k] = $v;
+		}
+		return $ret;
+	}
+}
+
+/**
+ * @addtogroup Database
+ */
+class DatabaseOracle extends Database {
+	var $mInsertId = NULL;
+	var $mLastResult = NULL;
+	var $numeric_version = NULL;
+	var $lastResult = null;
+	var $cursor = 0;
+	var $mAffectedRows;
+
+	function DatabaseOracle($server = false, $user = false, $password = false, $dbName = false,
+		$failFunction = false, $flags = 0 )
+	{
+
+		global $wgOut;
+		# Can't get a reference if it hasn't been set yet
+		if ( !isset( $wgOut ) ) {
+			$wgOut = NULL;
+		}
+		$this->mOut =& $wgOut;
+		$this->mFailFunction = $failFunction;
+		$this->mFlags = $flags;
+		$this->open( $server, $user, $password, $dbName);
+
+	}
+
+	function cascadingDeletes() {
+		return true;
+	}
+	function cleanupTriggers() {
+		return true;
+	}
+	function strictIPs() {
+		return true;
+	}
+	function realTimestamps() {
+		return true;
+	}
+	function implicitGroupby() {
+		return false;
+	}
+	function searchableIPs() {
+		return true;
+	}
+
+	static function newFromParams( $server = false, $user = false, $password = false, $dbName = false,
+		$failFunction = false, $flags = 0)
+	{
+		return new DatabaseOracle( $server, $user, $password, $dbName, $failFunction, $flags );
+	}
+
+	/**
+	 * Usually aborts on failure
+	 * If the failFunction is set to a non-zero integer, returns success
+	 */
+	function open( $server, $user, $password, $dbName ) {
+		if ( !function_exists( 'oci_connect' ) ) {
+			throw new DBConnectionError( $this, "Oracle functions missing, have you compiled PHP with the --with-oci8 option?\n (Note: if you recently installed PHP, you may need to restart your webserver and database)\n" );
+		}
+
+		# Needed for proper UTF-8 functionality
+		putenv("NLS_LANG=AMERICAN_AMERICA.AL32UTF8");
+
+		$this->close();
+		$this->mServer = $server;
+		$this->mUser = $user;
+		$this->mPassword = $password;
+		$this->mDBname = $dbName;
+
+		if (!strlen($user)) { ## e.g. the class is being loaded
+			return;
+		}
+
+		error_reporting( E_ALL );
+		$this->mConn = oci_connect($user, $password, $dbName);
+
+		if ($this->mConn == false) {
+			wfDebug("DB connection error\n");
+			wfDebug("Server: $server, Database: $dbName, User: $user, Password: " . substr( $password, 0, 3 ) . "...\n");
+			wfDebug($this->lastError()."\n");
+			return false;
+		}
+
+		$this->mOpened = true;
+		return $this->mConn;
+	}
+
+	/**
+	 * Closes a database connection, if it is open
+	 * Returns success, true if already closed
+	 */
+	function close() {
+		$this->mOpened = false;
+		if ( $this->mConn ) {
+			return oci_close( $this->mConn );
+		} else {
+			return true;
+		}
+	}
+
+	function execFlags() {
+		return $this->mTrxLevel ? OCI_DEFAULT : OCI_COMMIT_ON_SUCCESS;
+	}
+
+	function doQuery($sql) {
+		wfDebug("SQL: [$sql]\n");
+		if (!mb_check_encoding($sql)) {
+			throw new MWException("SQL encoding is invalid");
+		}
+
+		if (($this->mLastResult = $stmt = oci_parse($this->mConn, $sql)) === false) {
+			$e = oci_error($this->mConn);
+			$this->reportQueryError($e['message'], $e['code'], $sql, __FUNCTION__);
+		}
+		
+		if (oci_execute($stmt, $this->execFlags()) == false) {
+			$e = oci_error($stmt);
+			$this->reportQueryError($e['message'], $e['code'], $sql, __FUNCTION__);
+		}
+		if (oci_statement_type($stmt) == "SELECT")
+			return new ORAResult($this, $stmt);
+		else {
+			$this->mAffectedRows = oci_num_rows($stmt);
+			return true;
+		}
+	}
+
+	function queryIgnore($sql, $fname = '') {
+		return $this->query($sql, $fname, true);
+	}
+
+	function freeResult($res) {
+		$res->free();
+	}
+
+	function fetchObject($res) {
+		return $res->fetchObject();
+	}
+
+	function fetchRow($res) {
+		return $res->fetchAssoc();
+	}
+
+	function numRows($res) {
+		return $res->numRows();
+	}
+
+	function numFields($res) {
+		return $res->numFields();
+	}
+
+	function fieldName($stmt, $n) {
+		return pg_field_name($stmt, $n);
+	}
+
+	/**
+	 * This must be called after nextSequenceVal
+	 */
+	function insertId() {
+		return $this->mInsertId;
+	}
+
+	function dataSeek($res, $row) {
+		$res->seek($row);
+	}
+
+	function lastError() {
+		if ($this->mConn === false)
+			$e = oci_error();
+		else
+			$e = oci_error($this->mConn);
+		return $e['message'];
+	}
+
+	function lastErrno() {
+		if ($this->mConn === false)
+			$e = oci_error();
+		else
+			$e = oci_error($this->mConn);
+		return $e['code'];
+	}
+
+	function affectedRows() {
+		return $this->mAffectedRows;
+	}
+
+	/**
+	 * Returns information about an index
+	 * If errors are explicitly ignored, returns NULL on failure
+	 */
+	function indexInfo( $table, $index, $fname = 'Database::indexExists' ) {
+		return false;
+	}
+
+	function indexUnique ($table, $index, $fname = 'Database::indexUnique' ) {
+		return false;
+	}
+
+	function insert( $table, $a, $fname = 'Database::insert', $options = array() ) {
+		if (!is_array($options))
+			$options = array($options);
+
+		#if (in_array('IGNORE', $options))
+		#	$oldIgnore = $this->ignoreErrors(true);
+
+		# IGNORE is performed using single-row inserts, ignoring errors in each
+		# FIXME: need some way to distiguish between key collision and other types of error
+		//$oldIgnore = $this->ignoreErrors(true);
+		if (!is_array(reset($a))) {
+			$a = array($a);
+		}
+		foreach ($a as $row) {
+			$this->insertOneRow($table, $row, $fname);
+		}
+		//$this->ignoreErrors($oldIgnore);
+		$retVal = true;
+
+		//if (in_array('IGNORE', $options))
+		//	$this->ignoreErrors($oldIgnore);
+
+		return $retVal;
+	}
+
+	function insertOneRow($table, $row, $fname) {
+		// "INSERT INTO tables (a, b, c)"
+		$sql = "INSERT INTO " . $this->tableName($table) . " (" . join(',', array_keys($row)) . ')';
+		$sql .= " VALUES (";
+
+		// for each value, append ":key"
+		$first = true;
+		$returning = '';
+		foreach ($row as $col => $val) {
+			if (is_object($val)) {
+				$what = "EMPTY_BLOB()";
+				assert($returning === '');
+				$returning = " RETURNING $col INTO :bval";
+				$blobcol = $col;
+			} else
+				$what = ":$col";
+
+			if ($first)
+				$sql .= "$what";
+			else
+				$sql.= ", $what";
+			$first = false;
+		}
+		$sql .= ") $returning";
+
+		$stmt = oci_parse($this->mConn, $sql);
+		foreach ($row as $col => $val) {
+			if (!is_object($val)) {
+				if (oci_bind_by_name($stmt, ":$col", $row[$col]) === false)
+					$this->reportQueryError($this->lastErrno(), $this->lastError(), $sql, __METHOD__);
+			}
+		}
+
+		if (($bval = oci_new_descriptor($this->mConn, OCI_D_LOB)) === false) {
+			$e = oci_error($stmt);
+			throw new DBUnexpectedError($this, "Cannot create LOB descriptor: " . $e['message']);
+		}
+
+		if (strlen($returning))
+			oci_bind_by_name($stmt, ":bval", $bval, -1, SQLT_BLOB);
+
+		if (oci_execute($stmt, OCI_DEFAULT) === false) {
+			$e = oci_error($stmt);
+			$this->reportQueryError($e['message'], $e['code'], $sql, __METHOD__);
+		}
+		if (strlen($returning)) {
+			$bval->save($row[$blobcol]->getData());
+			$bval->free();
+		}
+		if (!$this->mTrxLevel)
+			oci_commit($this->mConn);
+
+		oci_free_statement($stmt);
+	}
+	
+	function tableName( $name ) {
+		# Replace reserved words with better ones
+		switch( $name ) {
+			case 'user':
+				return 'mwuser';
+			case 'text':
+				return 'pagecontent';
+			default:
+				return $name;
+		}
+	}
+
+	/**
+	 * Return the next in a sequence, save the value for retrieval via insertId()
+	 */
+	function nextSequenceValue($seqName) {
+		$res = $this->query("SELECT $seqName.nextval FROM dual");
+		$row = $this->fetchRow($res);
+		$this->mInsertId = $row[0];
+		$this->freeResult($res);
+		return $this->mInsertId;
+	}
+
+	/**
+	 * Oracle does not have a "USE INDEX" clause, so return an empty string
+	 */
+	function useIndexClause($index) {
+		return '';
+	}
+
+	# REPLACE query wrapper
+	# Oracle simulates this with a DELETE followed by INSERT
+	# $row is the row to insert, an associative array
+	# $uniqueIndexes is an array of indexes. Each element may be either a
+	# field name or an array of field names
+	#
+	# It may be more efficient to leave off unique indexes which are unlikely to collide.
+	# However if you do this, you run the risk of encountering errors which wouldn't have
+	# occurred in MySQL
+	function replace( $table, $uniqueIndexes, $rows, $fname = 'Database::replace' ) {
+		$table = $this->tableName($table);
+
+		if (count($rows)==0) {
+			return;
+		}
+
+		# Single row case
+		if (!is_array(reset($rows))) {
+			$rows = array($rows);
+		}
+
+		foreach( $rows as $row ) {
+			# Delete rows which collide
+			if ( $uniqueIndexes ) {
+				$sql = "DELETE FROM $table WHERE ";
+				$first = true;
+				foreach ( $uniqueIndexes as $index ) {
+					if ( $first ) {
+						$first = false;
+						$sql .= "(";
+					} else {
+						$sql .= ') OR (';
+					}
+					if ( is_array( $index ) ) {
+						$first2 = true;
+						foreach ( $index as $col ) {
+							if ( $first2 ) {
+								$first2 = false;
+							} else {
+								$sql .= ' AND ';
+							}
+							$sql .= $col.'=' . $this->addQuotes( $row[$col] );
+						}
+					} else {
+						$sql .= $index.'=' . $this->addQuotes( $row[$index] );
+					}
+				}
+				$sql .= ')';
+				$this->query( $sql, $fname );
+			}
+
+			# Now insert the row
+			$sql = "INSERT INTO $table (" . $this->makeList( array_keys( $row ), LIST_NAMES ) .') VALUES (' .
+				$this->makeList( $row, LIST_COMMA ) . ')';
+			$this->query($sql, $fname);
+		}
+	}
+
+	# DELETE where the condition is a join
+	function deleteJoin( $delTable, $joinTable, $delVar, $joinVar, $conds, $fname = "Database::deleteJoin" ) {
+		if ( !$conds ) {
+			throw new DBUnexpectedError($this,  'Database::deleteJoin() called with empty $conds' );
+		}
+
+		$delTable = $this->tableName( $delTable );
+		$joinTable = $this->tableName( $joinTable );
+		$sql = "DELETE FROM $delTable WHERE $delVar IN (SELECT $joinVar FROM $joinTable ";
+		if ( $conds != '*' ) {
+			$sql .= 'WHERE ' . $this->makeList( $conds, LIST_AND );
+		}
+		$sql .= ')';
+
+		$this->query( $sql, $fname );
+	}
+
+	# Returns the size of a text field, or -1 for "unlimited"
+	function textFieldSize( $table, $field ) {
+		$table = $this->tableName( $table );
+		$sql = "SELECT t.typname as ftype,a.atttypmod as size
+			FROM pg_class c, pg_attribute a, pg_type t
+			WHERE relname='$table' AND a.attrelid=c.oid AND
+				a.atttypid=t.oid and a.attname='$field'";
+		$res =$this->query($sql);
+		$row=$this->fetchObject($res);
+		if ($row->ftype=="varchar") {
+			$size=$row->size-4;
+		} else {
+			$size=$row->size;
+		}
+		$this->freeResult( $res );
+		return $size;
+	}
+
+	function lowPriorityOption() {
+		return '';
+	}
+
+	function limitResult($sql, $limit, $offset) {
+		if ($offset === false)
+			$offset = 0;
+		return "SELECT * FROM ($sql) WHERE rownum >= (1 + $offset) AND rownum < 1 + $limit + $offset";
+	}
+
+	/**
+	 * Returns an SQL expression for a simple conditional.
+	 * Uses CASE on Oracle
+	 *
+	 * @param string $cond SQL expression which will result in a boolean value
+	 * @param string $trueVal SQL expression to return if true
+	 * @param string $falseVal SQL expression to return if false
+	 * @return string SQL fragment
+	 */
+	function conditional( $cond, $trueVal, $falseVal ) {
+		return " (CASE WHEN $cond THEN $trueVal ELSE $falseVal END) ";
+	}
+
+	function wasDeadlock() {
+		return $this->lastErrno() == 'OCI-00060';
+	}
+
+	function timestamp($ts = 0) {
+		return wfTimestamp(TS_ORACLE, $ts);
+	}
+
+	/**
+	 * Return aggregated value function call
+	 */
+	function aggregateValue ($valuedata,$valuename='value') {
+		return $valuedata;
+	}
+
+	function reportQueryError($error, $errno, $sql, $fname, $tempIgnore = false) {
+		# Ignore errors during error handling to avoid infinite 
+		# recursion
+		$ignore = $this->ignoreErrors(true);
+		++$this->mErrorCount;
+
+		if ($ignore || $tempIgnore) {
+echo "error ignored! query = [$sql]\n";
+			wfDebug("SQL ERROR (ignored): $error\n");
+			$this->ignoreErrors( $ignore );
+		}
+		else {
+echo "error!\n";
+			$message = "A database error has occurred\n" .
+				"Query: $sql\n" .
+				"Function: $fname\n" .
+				"Error: $errno $error\n";
+			throw new DBUnexpectedError($this, $message);
+		}
+	}
+
+	/**
+	 * @return string wikitext of a link to the server software's web site
+	 */
+	function getSoftwareLink() {
+		return "[http://www.oracle.com/ Oracle]";
+	}
+
+	/**
+	 * @return string Version information from the database
+	 */
+	function getServerVersion() {
+		return oci_server_version($this->mConn);
+	}
+
+	/**
+	 * Query whether a given table exists (in the given schema, or the default mw one if not given)
+	 */
+	function tableExists($table) {
+		$etable= $this->addQuotes($table);
+		$SQL = "SELECT 1 FROM user_tables WHERE table_name='$etable'";
+		$res = $this->query($SQL);
+		$count = $res ? oci_num_rows($res) : 0;
+		if ($res)
+			$this->freeResult($res);
+		return $count;
+	}
+
+	/**
+	 * Query whether a given column exists in the mediawiki schema
+	 */
+	function fieldExists( $table, $field ) {
+		return true; // XXX
+	}
+
+	function fieldInfo( $table, $field ) {
+		return false; // XXX
+	}
+
+	function begin( $fname = '' ) {
+		$this->mTrxLevel = 1;
+	}
+	function immediateCommit( $fname = '' ) {
+		return true;
+	}
+	function commit( $fname = '' ) {
+		oci_commit($this->mConn);
+		$this->mTrxLevel = 0;
+	}
+
+	/* Not even sure why this is used in the main codebase... */
+	function limitResultForUpdate($sql, $num) {
+		return $sql;
+	}
+
+	function strencode($s) {
+		return str_replace("'", "''", $s);
+	}
+
+	function encodeBlob($b) {
+		return new ORABlob($b);
+	}
+	function decodeBlob($b) {
+		return $b; //return $b->load();
+	}
+
+	function addQuotes( $s ) {
+	global	$wgLang;
+		$s = $wgLang->checkTitleEncoding($s);
+		return "'" . $this->strencode($s) . "'";
+	}
+
+	function quote_ident( $s ) {
+		return $s;
+	}
+
+	/* For now, does nothing */
+	function selectDB( $db ) {
+		return true;
+	}
+
+	/**
+	 * Returns an optional USE INDEX clause to go after the table, and a
+	 * string to go at the end of the query
+	 *
+	 * @private
+	 *
+	 * @param array $options an associative array of options to be turned into
+	 *              an SQL query, valid keys are listed in the function.
+	 * @return array
+	 */
+	function makeSelectOptions( $options ) {
+		$preLimitTail = $postLimitTail = '';
+		$startOpts = '';
+
+		$noKeyOptions = array();
+		foreach ( $options as $key => $option ) {
+			if ( is_numeric( $key ) ) {
+				$noKeyOptions[$option] = true;
+			}
+		}
+
+		if ( isset( $options['GROUP BY'] ) ) $preLimitTail .= " GROUP BY {$options['GROUP BY']}";
+		if ( isset( $options['ORDER BY'] ) ) $preLimitTail .= " ORDER BY {$options['ORDER BY']}";
+		
+		if (isset($options['LIMIT'])) {
+		//	$tailOpts .= $this->limitResult('', $options['LIMIT'],
+		//		isset($options['OFFSET']) ? $options['OFFSET'] 
+		//		: false);
+		}
+
+		#if ( isset( $noKeyOptions['FOR UPDATE'] ) ) $tailOpts .= ' FOR UPDATE';
+		#if ( isset( $noKeyOptions['LOCK IN SHARE MODE'] ) ) $tailOpts .= ' LOCK IN SHARE MODE';
+		if ( isset( $noKeyOptions['DISTINCT'] ) && isset( $noKeyOptions['DISTINCTROW'] ) ) $startOpts .= 'DISTINCT';
+
+		if ( isset( $options['USE INDEX'] ) && ! is_array( $options['USE INDEX'] ) ) {
+			$useIndex = $this->useIndexClause( $options['USE INDEX'] );
+		} else {
+			$useIndex = '';
+		}
+		
+		return array( $startOpts, $useIndex, $preLimitTail, $postLimitTail );
+	}
+
+	public function setTimeout( $timeout ) {
+		// @todo fixme no-op
+	}
+
+	function ping() {
+		wfDebug( "Function ping() not written for DatabasePostgres.php yet");
+		return true;
+	}
+
+
+} // end DatabaseOracle class
+
+?>
Index: /MediaWiki/branches/1.11/includes/DatabasePostgres.php
===================================================================
--- /MediaWiki/branches/1.11/includes/DatabasePostgres.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/DatabasePostgres.php	(revision 1280)
@@ -0,0 +1,1190 @@
+<?php
+
+/**
+ * This is the Postgres database abstraction layer.
+ *
+ * As it includes more generic version for DB functions,
+ * than MySQL ones, some of them should be moved to parent
+ * Database class.
+ *
+ * @addtogroup Database
+ */
+class PostgresField {
+	private $name, $tablename, $type, $nullable, $max_length;
+
+	static function fromText($db, $table, $field) {
+	global $wgDBmwschema;
+
+		$q = <<<END
+SELECT typname, attnotnull, attlen
+FROM pg_class, pg_namespace, pg_attribute, pg_type
+WHERE relnamespace=pg_namespace.oid
+AND relkind='r'
+AND attrelid=pg_class.oid
+AND atttypid=pg_type.oid
+AND nspname=%s
+AND relname=%s
+AND attname=%s;
+END;
+		$res = $db->query(sprintf($q,
+				$db->addQuotes($wgDBmwschema),
+				$db->addQuotes($table),
+				$db->addQuotes($field)));
+		$row = $db->fetchObject($res);
+		if (!$row)
+			return null;
+		$n = new PostgresField;
+		$n->type = $row->typname;
+		$n->nullable = ($row->attnotnull == 'f');
+		$n->name = $field;
+		$n->tablename = $table;
+		$n->max_length = $row->attlen;
+		return $n;
+	}
+
+	function name() {
+		return $this->name;
+	}
+
+	function tableName() {
+		return $this->tablename;
+	}
+
+	function type() {
+		return $this->type;
+	}
+
+	function nullable() {
+		return $this->nullable;
+	}
+
+	function maxLength() {
+		return $this->max_length;
+	}
+}
+
+/**
+ * @addtogroup Database
+ */
+class DatabasePostgres extends Database {
+	var $mInsertId = NULL;
+	var $mLastResult = NULL;
+	var $numeric_version = NULL;
+
+	function DatabasePostgres($server = false, $user = false, $password = false, $dbName = false,
+		$failFunction = false, $flags = 0 )
+	{
+
+		global $wgOut;
+		# Can't get a reference if it hasn't been set yet
+		if ( !isset( $wgOut ) ) {
+			$wgOut = NULL;
+		}
+		$this->mOut =& $wgOut;
+		$this->mFailFunction = $failFunction;
+		$this->mFlags = $flags;
+		$this->open( $server, $user, $password, $dbName);
+
+	}
+
+	function cascadingDeletes() {
+		return true;
+	}
+	function cleanupTriggers() {
+		return true;
+	}
+	function strictIPs() {
+		return true;
+	}
+	function realTimestamps() {
+		return true;
+	}
+	function implicitGroupby() {
+		return false;
+	}
+	function searchableIPs() {
+		return true;
+	}
+
+	static function newFromParams( $server, $user, $password, $dbName, $failFunction = false, $flags = 0)
+	{
+		return new DatabasePostgres( $server, $user, $password, $dbName, $failFunction, $flags );
+	}
+
+	/**
+	 * Usually aborts on failure
+	 * If the failFunction is set to a non-zero integer, returns success
+	 */
+	function open( $server, $user, $password, $dbName ) {
+		# Test for Postgres support, to avoid suppressed fatal error
+		if ( !function_exists( 'pg_connect' ) ) {
+			throw new DBConnectionError( $this, "Postgres functions missing, have you compiled PHP with the --with-pgsql option?\n (Note: if you recently installed PHP, you may need to restart your webserver and database)\n" );
+		}
+
+		global $wgDBport;
+
+		if (!strlen($user)) { ## e.g. the class is being loaded
+			return;
+		}
+
+		$this->close();
+		$this->mServer = $server;
+		$port = $wgDBport;
+		$this->mUser = $user;
+		$this->mPassword = $password;
+		$this->mDBname = $dbName;
+
+		$hstring="";
+		if ($server!=false && $server!="") {
+			$hstring="host=$server ";
+		}
+		if ($port!=false && $port!="") {
+			$hstring .= "port=$port ";
+		}
+
+
+		error_reporting( E_ALL );
+		@$this->mConn = pg_connect("$hstring dbname=$dbName user=$user password=$password");
+
+		if ( $this->mConn == false ) {
+			wfDebug( "DB connection error\n" );
+			wfDebug( "Server: $server, Database: $dbName, User: $user, Password: " . substr( $password, 0, 3 ) . "...\n" );
+			wfDebug( $this->lastError()."\n" );
+			return false;
+		}
+
+		$this->mOpened = true;
+		## If this is the initial connection, setup the schema stuff and possibly create the user
+		if (defined('MEDIAWIKI_INSTALL')) {
+			global $wgDBname, $wgDBuser, $wgDBpassword, $wgDBsuperuser, $wgDBmwschema,
+				$wgDBts2schema;
+
+			print "<li>Checking the version of Postgres...";
+			$version = $this->getServerVersion();
+			$PGMINVER = "8.1";
+			if ($this->numeric_version < $PGMINVER) {
+				print "<b>FAILED</b>. Required version is $PGMINVER. You have $this->numeric_version ($version)</li>\n";
+				dieout("</ul>");
+			}
+			print "version $this->numeric_version is OK.</li>\n";
+
+			$safeuser = $this->quote_ident($wgDBuser);
+			## Are we connecting as a superuser for the first time?
+			if ($wgDBsuperuser) {
+				## Are we really a superuser? Check out our rights
+				$SQL = "SELECT
+						CASE WHEN usesuper IS TRUE THEN
+							CASE WHEN usecreatedb IS TRUE THEN 3 ELSE 1 END
+							ELSE CASE WHEN usecreatedb IS TRUE THEN 2 ELSE 0 END
+                        END AS rights
+						FROM pg_catalog.pg_user WHERE usename = " . $this->addQuotes($wgDBsuperuser);
+				$rows = $this->numRows($res = $this->doQuery($SQL));
+				if (!$rows) {
+					print "<li>ERROR: Could not read permissions for user \"$wgDBsuperuser\"</li>\n";
+					dieout('</ul>');
+				}
+				$perms = pg_fetch_result($res, 0, 0);
+
+				$SQL = "SELECT 1 FROM pg_catalog.pg_user WHERE usename = " . $this->addQuotes($wgDBuser);
+				$rows = $this->numRows($this->doQuery($SQL));
+				if ($rows) {
+					print "<li>User \"$wgDBuser\" already exists, skipping account creation.</li>";
+				}
+				else {
+					if ($perms != 1 and $perms != 3) {
+						print "<li>ERROR: the user \"$wgDBsuperuser\" cannot create other users. ";
+						print 'Please use a different Postgres user.</li>';
+						dieout('</ul>');
+					}
+					print "<li>Creating user <b>$wgDBuser</b>...";
+					$safepass = $this->addQuotes($wgDBpassword);
+					$SQL = "CREATE USER $safeuser NOCREATEDB PASSWORD $safepass";
+					$this->doQuery($SQL);
+					print "OK</li>\n";
+				}
+				## User now exists, check out the database
+				if ($dbName != $wgDBname) {
+					$SQL = "SELECT 1 FROM pg_catalog.pg_database WHERE datname = " . $this->addQuotes($wgDBname);
+					$rows = $this->numRows($this->doQuery($SQL));
+					if ($rows) {
+						print "<li>Database \"$wgDBname\" already exists, skipping database creation.</li>";
+					}
+					else {
+						if ($perms < 2) {
+							print "<li>ERROR: the user \"$wgDBsuperuser\" cannot create databases. ";
+							print 'Please use a different Postgres user.</li>';
+							dieout('</ul>');
+						}
+						print "<li>Creating database <b>$wgDBname</b>...";
+						$safename = $this->quote_ident($wgDBname);
+						$SQL = "CREATE DATABASE $safename OWNER $safeuser ";
+						$this->doQuery($SQL);
+						print "OK</li>\n";
+						## Hopefully tsearch2 and plpgsql are in template1...
+					}
+
+					## Reconnect to check out tsearch2 rights for this user
+					print "<li>Connecting to \"$wgDBname\" as superuser \"$wgDBsuperuser\" to check rights...";
+					@$this->mConn = pg_connect("$hstring dbname=$wgDBname user=$user password=$password");
+					if ( $this->mConn == false ) {
+						print "<b>FAILED TO CONNECT!</b></li>";
+						dieout("</ul>");
+					}
+					print "OK</li>\n";
+				}
+
+				## Tsearch2 checks
+				print "<li>Checking that tsearch2 is installed in the database \"$wgDBname\"...";
+				if (! $this->tableExists("pg_ts_cfg", $wgDBts2schema)) {
+					print "<b>FAILED</b>. tsearch2 must be installed in the database \"$wgDBname\".";
+					print "Please see <a href='http://www.devx.com/opensource/Article/21674/0/page/2'>this article</a>";
+					print " for instructions or ask on #postgresql on irc.freenode.net</li>\n";
+					dieout("</ul>");
+				}				
+				print "OK</li>\n";
+				print "<li>Ensuring that user \"$wgDBuser\" has select rights on the tsearch2 tables...";
+				foreach (array('cfg','cfgmap','dict','parser') as $table) {
+					$SQL = "GRANT SELECT ON pg_ts_$table TO $safeuser";
+					$this->doQuery($SQL);
+				}
+				print "OK</li>\n";
+
+
+				## Setup the schema for this user if needed
+				$result = $this->schemaExists($wgDBmwschema);
+				$safeschema = $this->quote_ident($wgDBmwschema);
+				if (!$result) {
+					print "<li>Creating schema <b>$wgDBmwschema</b> ...";
+					$result = $this->doQuery("CREATE SCHEMA $safeschema AUTHORIZATION $safeuser");
+					if (!$result) {
+						print "<b>FAILED</b>.</li>\n";
+						dieout("</ul>");
+					}
+					print "OK</li>\n";
+				}
+				else {
+					print "<li>Schema already exists, explicitly granting rights...\n";
+					$safeschema2 = $this->addQuotes($wgDBmwschema);
+					$SQL = "SELECT 'GRANT ALL ON '||pg_catalog.quote_ident(relname)||' TO $safeuser;'\n".
+							"FROM pg_catalog.pg_class p, pg_catalog.pg_namespace n\n".
+							"WHERE relnamespace = n.oid AND n.nspname = $safeschema2\n".
+							"AND p.relkind IN ('r','S','v')\n";
+					$SQL .= "UNION\n";
+					$SQL .= "SELECT 'GRANT ALL ON FUNCTION '||pg_catalog.quote_ident(proname)||'('||\n".
+							"pg_catalog.oidvectortypes(p.proargtypes)||') TO $safeuser;'\n".
+							"FROM pg_catalog.pg_proc p, pg_catalog.pg_namespace n\n".
+							"WHERE p.pronamespace = n.oid AND n.nspname = $safeschema2";
+					$res = $this->doQuery($SQL);
+					if (!$res) {
+						print "<b>FAILED</b>. Could not set rights for the user.</li>\n";
+						dieout("</ul>");
+					}
+					$this->doQuery("SET search_path = $safeschema");
+					$rows = $this->numRows($res);
+					while ($rows) {
+						$rows--;
+						$this->doQuery(pg_fetch_result($res, $rows, 0));
+					}
+					print "OK</li>";
+				}
+
+				$wgDBsuperuser = '';
+				return true; ## Reconnect as regular user
+
+			} ## end superuser
+
+		if (!defined('POSTGRES_SEARCHPATH')) {
+
+			## Do we have the basic tsearch2 table?
+			print "<li>Checking for tsearch2 in the schema \"$wgDBts2schema\"...";
+			if (! $this->tableExists("pg_ts_dict", $wgDBts2schema)) {
+				print "<b>FAILED</b>. Make sure tsearch2 is installed. See <a href=";
+				print "'http://www.devx.com/opensource/Article/21674/0/page/2'>this article</a>";
+				print " for instructions.</li>\n";
+				dieout("</ul>");
+			}				
+			print "OK</li>\n";
+
+			## Does this user have the rights to the tsearch2 tables?
+			$ctype = pg_fetch_result($this->doQuery("SHOW lc_ctype"),0,0);
+			print "<li>Checking tsearch2 permissions...";
+			## Let's check all four, just to be safe
+			error_reporting( 0 );
+			$ts2tables = array('cfg','cfgmap','dict','parser');
+			foreach ( $ts2tables AS $tname ) {
+				$SQL = "SELECT count(*) FROM $wgDBts2schema.pg_ts_$tname";
+				$res = $this->doQuery($SQL);
+				if (!$res) {
+					print "<b>FAILED</b> to access pg_ts_$tname. Make sure that the user ".
+					"\"$wgDBuser\" has SELECT access to all four tsearch2 tables</li>\n";
+					dieout("</ul>");
+				}
+			}
+			$SQL = "SELECT ts_name FROM $wgDBts2schema.pg_ts_cfg WHERE locale = '$ctype'";
+			$SQL .= " ORDER BY CASE WHEN ts_name <> 'default' THEN 1 ELSE 0 END";
+			$res = $this->doQuery($SQL);
+			error_reporting( E_ALL );
+			if (!$res) {
+				print "<b>FAILED</b>. Could not determine the tsearch2 locale information</li>\n";
+				dieout("</ul>");
+			}
+			print "OK</li>";
+
+			## Will the current locale work? Can we force it to?
+			print "<li>Verifying tsearch2 locale with $ctype...";
+			$rows = $this->numRows($res);
+			$resetlocale = 0;
+			if (!$rows) {
+				print "<b>not found</b></li>\n";
+				print "<li>Attempting to set default tsearch2 locale to \"$ctype\"...";
+				$resetlocale = 1;
+			}
+			else {
+				$tsname = pg_fetch_result($res, 0, 0);
+				if ($tsname != 'default') {
+					print "<b>not set to default ($tsname)</b>";
+					print "<li>Attempting to change tsearch2 default locale to \"$ctype\"...";
+					$resetlocale = 1;
+				}
+			}
+			if ($resetlocale) {
+				$SQL = "UPDATE $wgDBts2schema.pg_ts_cfg SET locale = '$ctype' WHERE ts_name = 'default'";
+				$res = $this->doQuery($SQL);
+				if (!$res) {
+					print "<b>FAILED</b>. ";
+					print "Please make sure that the locale in pg_ts_cfg for \"default\" is set to \"$ctype\"</li>\n";
+					dieout("</ul>");
+				}
+				print "OK</li>";
+			}
+
+			## Final test: try out a simple tsearch2 query
+			$SQL = "SELECT $wgDBts2schema.to_tsvector('default','MediaWiki tsearch2 testing')";
+			$res = $this->doQuery($SQL);
+			if (!$res) {
+				print "<b>FAILED</b>. Specifically, \"$SQL\" did not work.</li>";
+				dieout("</ul>");
+			}
+			print "OK</li>";
+
+			## Do we have plpgsql installed?
+			print "<li>Checking for Pl/Pgsql ...";
+			$SQL = "SELECT 1 FROM pg_catalog.pg_language WHERE lanname = 'plpgsql'";
+			$rows = $this->numRows($this->doQuery($SQL));
+			if ($rows < 1) {
+				// plpgsql is not installed, but if we have a pg_pltemplate table, we should be able to create it
+				print "not installed. Attempting to install Pl/Pgsql ...";
+				$SQL = "SELECT 1 FROM pg_catalog.pg_class c JOIN pg_catalog.pg_namespace n ON (n.oid = c.relnamespace) ".
+					"WHERE relname = 'pg_pltemplate' AND nspname='pg_catalog'";
+				$rows = $this->numRows($this->doQuery($SQL));
+				if ($rows >= 1) {
+					$olde = error_reporting(0);
+					error_reporting($olde - E_WARNING);
+					$result = $this->doQuery("CREATE LANGUAGE plpgsql");
+					error_reporting($olde);
+					if (!$result) {
+						print "<b>FAILED</b>. You need to install the language plpgsql in the database <tt>$wgDBname</tt></li>";
+						dieout("</ul>");
+					}
+				}
+				else {
+					print "<b>FAILED</b>. You need to install the language plpgsql in the database <tt>$wgDBname</tt></li>";
+					dieout("</ul>");
+				}
+			}
+			print "OK</li>\n";
+
+			## Does the schema already exist? Who owns it?
+			$result = $this->schemaExists($wgDBmwschema);
+			if (!$result) {
+				print "<li>Creating schema <b>$wgDBmwschema</b> ...";
+				error_reporting( 0 );
+				$result = $this->doQuery("CREATE SCHEMA $wgDBmwschema");
+				error_reporting( E_ALL );
+				if (!$result) {
+					print "<b>FAILED</b>. The user \"$wgDBuser\" must be able to access the schema. ".
+					"You can try making them the owner of the database, or try creating the schema with a ".
+					"different user, and then grant access to the \"$wgDBuser\" user.</li>\n";
+					dieout("</ul>");
+				}
+				print "OK</li>\n";
+			}
+			else if ($result != $user) {
+				print "<li>Schema \"$wgDBmwschema\" exists but is not owned by \"$user\". Not ideal.</li>\n";
+			}
+			else {
+				print "<li>Schema \"$wgDBmwschema\" exists and is owned by \"$user\". Excellent.</li>\n";
+			}
+
+			## Always return GMT time to accomodate the existing integer-based timestamp assumption
+			print "<li>Setting the timezone to GMT for user \"$user\" ...";
+			$SQL = "ALTER USER $safeuser SET timezone = 'GMT'";
+			$result = pg_query($this->mConn, $SQL);
+			if (!$result) {
+				print "<b>FAILED</b>.</li>\n";
+				dieout("</ul>");
+			}
+			print "OK</li>\n";
+			## Set for the rest of this session
+			$SQL = "SET timezone = 'GMT'";
+			$result = pg_query($this->mConn, $SQL);
+			if (!$result) {
+				print "<li>Failed to set timezone</li>\n";
+				dieout("</ul>");
+			}
+
+			print "<li>Setting the datestyle to ISO, YMD for user \"$user\" ...";
+			$SQL = "ALTER USER $safeuser SET datestyle = 'ISO, YMD'";
+			$result = pg_query($this->mConn, $SQL);
+			if (!$result) {
+				print "<b>FAILED</b>.</li>\n";
+				dieout("</ul>");
+			}
+			print "OK</li>\n";
+			## Set for the rest of this session
+			$SQL = "SET datestyle = 'ISO, YMD'";
+			$result = pg_query($this->mConn, $SQL);
+			if (!$result) {
+				print "<li>Failed to set datestyle</li>\n";
+				dieout("</ul>");
+			}
+
+			## Fix up the search paths if needed
+			print "<li>Setting the search path for user \"$user\" ...";
+			$path = $this->quote_ident($wgDBmwschema);
+			if ($wgDBts2schema !== $wgDBmwschema)
+				$path .= ", ". $this->quote_ident($wgDBts2schema);
+			if ($wgDBmwschema !== 'public' and $wgDBts2schema !== 'public')
+				$path .= ", public";
+			$SQL = "ALTER USER $safeuser SET search_path = $path";
+			$result = pg_query($this->mConn, $SQL);
+			if (!$result) {
+				print "<b>FAILED</b>.</li>\n";
+				dieout("</ul>");
+			}
+			print "OK</li>\n";
+			## Set for the rest of this session
+			$SQL = "SET search_path = $path";
+			$result = pg_query($this->mConn, $SQL);
+			if (!$result) {
+				print "<li>Failed to set search_path</li>\n";
+				dieout("</ul>");
+			}
+			define( "POSTGRES_SEARCHPATH", $path );
+		}}
+
+		global $wgCommandLineMode;
+		## If called from the command-line (e.g. importDump), only show errors
+		if ($wgCommandLineMode) {
+			$this->doQuery("SET client_min_messages = 'ERROR'");
+		}
+
+		return $this->mConn;
+	}
+
+	/**
+	 * Closes a database connection, if it is open
+	 * Returns success, true if already closed
+	 */
+	function close() {
+		$this->mOpened = false;
+		if ( $this->mConn ) {
+			return pg_close( $this->mConn );
+		} else {
+			return true;
+		}
+	}
+
+	function doQuery( $sql ) {
+		return $this->mLastResult=pg_query( $this->mConn , $sql);
+	}
+
+	function queryIgnore( $sql, $fname = '' ) {
+		return $this->query( $sql, $fname, true );
+	}
+
+	function freeResult( $res ) {
+		if ( !@pg_free_result( $res ) ) {
+			throw new DBUnexpectedError($this,  "Unable to free Postgres result\n" );
+		}
+	}
+
+	function fetchObject( $res ) {
+		@$row = pg_fetch_object( $res );
+		# FIXME: HACK HACK HACK HACK debug
+
+		# TODO:
+		# hashar : not sure if the following test really trigger if the object
+		#          fetching failed.
+		if( pg_last_error($this->mConn) ) {
+			throw new DBUnexpectedError($this,  'SQL error: ' . htmlspecialchars( pg_last_error($this->mConn) ) );
+		}
+		return $row;
+	}
+
+	function fetchRow( $res ) {
+		@$row = pg_fetch_array( $res );
+		if( pg_last_error($this->mConn) ) {
+			throw new DBUnexpectedError($this,  'SQL error: ' . htmlspecialchars( pg_last_error($this->mConn) ) );
+		}
+		return $row;
+	}
+
+	function numRows( $res ) {
+		@$n = pg_num_rows( $res );
+		if( pg_last_error($this->mConn) ) {
+			throw new DBUnexpectedError($this,  'SQL error: ' . htmlspecialchars( pg_last_error($this->mConn) ) );
+		}
+		return $n;
+	}
+	function numFields( $res ) { return pg_num_fields( $res ); }
+	function fieldName( $res, $n ) { return pg_field_name( $res, $n ); }
+
+	/**
+	 * This must be called after nextSequenceVal
+	 */
+	function insertId() {
+		return $this->mInsertId;
+	}
+
+	function dataSeek( $res, $row ) { return pg_result_seek( $res, $row ); }
+	function lastError() {
+		if ( $this->mConn ) {
+			return pg_last_error();
+		}
+		else {
+			return "No database connection";
+		}
+	}
+	function lastErrno() {
+		return pg_last_error() ? 1 : 0;
+	}
+
+	function affectedRows() {
+		if( !isset( $this->mLastResult ) )
+			return 0;
+
+		return pg_affected_rows( $this->mLastResult );
+	}
+
+	/**
+	 * Estimate rows in dataset
+	 * Returns estimated count, based on EXPLAIN output
+	 * This is not necessarily an accurate estimate, so use sparingly
+	 * Returns -1 if count cannot be found
+	 * Takes same arguments as Database::select()
+	 */
+	
+	function estimateRowCount( $table, $vars='*', $conds='', $fname = 'Database::estimateRowCount', $options = array() ) {
+		$options['EXPLAIN'] = true;
+		$res = $this->select( $table, $vars, $conds, $fname, $options );
+		$rows = -1;
+		if ( $res ) {
+			$row = $this->fetchRow( $res );
+			$count = array();
+			if( preg_match( '/rows=(\d+)/', $row[0], $count ) ) {
+				$rows = $count[1];
+			}
+			$this->freeResult($res);
+		}
+		return $rows;
+	}
+
+
+	/**
+	 * Returns information about an index
+	 * If errors are explicitly ignored, returns NULL on failure
+	 */
+	function indexInfo( $table, $index, $fname = 'Database::indexExists' ) {
+		$sql = "SELECT indexname FROM pg_indexes WHERE tablename='$table'";
+		$res = $this->query( $sql, $fname );
+		if ( !$res ) {
+			return NULL;
+		}
+
+		while ( $row = $this->fetchObject( $res ) ) {
+			if ( $row->indexname == $index ) {
+				return $row;
+				
+				// BUG: !!!! This code needs to be synced up with database.php
+				
+			}
+		}
+		return false;
+	}
+
+	function indexUnique ($table, $index, $fname = 'Database::indexUnique' ) {
+		$sql = "SELECT indexname FROM pg_indexes WHERE tablename='{$table}'".
+			" AND indexdef LIKE 'CREATE UNIQUE%({$index})'";
+		$res = $this->query( $sql, $fname );
+		if ( !$res )
+			return NULL;
+		while ($row = $this->fetchObject( $res ))
+			return true;
+		return false;
+
+	}
+
+	/**
+	 * INSERT wrapper, inserts an array into a table
+	 *
+	 * $args may be a single associative array, or an array of these with numeric keys, 
+	 * for multi-row insert (Postgres version 8.2 and above only).
+	 *
+	 * @param array $table   String: Name of the table to insert to.
+	 * @param array $args    Array: Items to insert into the table.
+	 * @param array $fname   String: Name of the function, for profiling
+	 * @param mixed $options String or Array. Valid options: IGNORE
+	 *
+	 * @return bool Success of insert operation. IGNORE always returns true.
+	 */
+	function insert( $table, $args, $fname = 'DatabasePostgres::insert', $options = array() ) {
+		global $wgDBversion;
+
+		$table = $this->tableName( $table );
+		if (! isset( $wgDBversion ) ) {
+			$this->getServerVersion();
+			$wgDBversion = $this->numeric_version;
+		}
+
+		if ( !is_array( $options ) )
+			$options = array( $options );
+
+		if ( isset( $args[0] ) && is_array( $args[0] ) ) {
+			$multi = true;
+			$keys = array_keys( $args[0] );
+		}
+		else {
+			$multi = false;
+			$keys = array_keys( $args );
+		}
+
+		$ignore = in_array( 'IGNORE', $options ) ? 1 : 0;
+		if ( $ignore )
+			$olde = error_reporting( 0 );
+
+		$sql = "INSERT INTO $table (" . implode( ',', $keys ) . ') VALUES ';
+
+		if ( $multi ) {
+			if ( $wgDBversion >= 8.1 ) {
+				$first = true;
+				foreach ( $args as $row ) {
+					if ( $first ) {
+						$first = false;
+					} else {
+						$sql .= ',';
+					}
+					$sql .= '(' . $this->makeList( $row ) . ')';
+				}
+				$res = (bool)$this->query( $sql, $fname, $ignore );
+			}
+			else {
+				$res = true;
+				$origsql = $sql;
+				foreach ( $args as $row ) {
+					$tempsql = $origsql;
+					$tempsql .= '(' . $this->makeList( $row ) . ')';
+					$tempres = (bool)$this->query( $tempsql, $fname, $ignore );
+					if (! $tempres)
+						$res = false;
+				}
+			}
+		}
+		else {
+			$sql .= '(' . $this->makeList( $args ) . ')';
+			$res = (bool)$this->query( $sql, $fname, $ignore );
+		}
+
+		if ( $ignore ) {
+			$olde = error_reporting( $olde );
+			return true;
+		}
+
+		return $res;
+
+	}
+
+	function tableName( $name ) {
+		# Replace reserved words with better ones
+		switch( $name ) {
+			case 'user':
+				return 'mwuser';
+			case 'text':
+				return 'pagecontent';
+			default:
+				return $name;
+		}
+	}
+
+	/**
+	 * Return the next in a sequence, save the value for retrieval via insertId()
+	 */
+	function nextSequenceValue( $seqName ) {
+		$safeseq = preg_replace( "/'/", "''", $seqName );
+		$res = $this->query( "SELECT nextval('$safeseq')" );
+		$row = $this->fetchRow( $res );
+		$this->mInsertId = $row[0];
+		$this->freeResult( $res );
+		return $this->mInsertId;
+	}
+
+	/**
+	 * Postgres does not have a "USE INDEX" clause, so return an empty string
+	 */
+	function useIndexClause( $index ) {
+		return '';
+	}
+
+	# REPLACE query wrapper
+	# Postgres simulates this with a DELETE followed by INSERT
+	# $row is the row to insert, an associative array
+	# $uniqueIndexes is an array of indexes. Each element may be either a
+	# field name or an array of field names
+	#
+	# It may be more efficient to leave off unique indexes which are unlikely to collide.
+	# However if you do this, you run the risk of encountering errors which wouldn't have
+	# occurred in MySQL
+	function replace( $table, $uniqueIndexes, $rows, $fname = 'Database::replace' ) {
+		$table = $this->tableName( $table );
+
+		if (count($rows)==0) {
+			return;
+		}
+
+		# Single row case
+		if ( !is_array( reset( $rows ) ) ) {
+			$rows = array( $rows );
+		}
+
+		foreach( $rows as $row ) {
+			# Delete rows which collide
+			if ( $uniqueIndexes ) {
+				$sql = "DELETE FROM $table WHERE ";
+				$first = true;
+				foreach ( $uniqueIndexes as $index ) {
+					if ( $first ) {
+						$first = false;
+						$sql .= "(";
+					} else {
+						$sql .= ') OR (';
+					}
+					if ( is_array( $index ) ) {
+						$first2 = true;
+						foreach ( $index as $col ) {
+							if ( $first2 ) {
+								$first2 = false;
+							} else {
+								$sql .= ' AND ';
+							}
+							$sql .= $col.'=' . $this->addQuotes( $row[$col] );
+						}
+					} else {
+						$sql .= $index.'=' . $this->addQuotes( $row[$index] );
+					}
+				}
+				$sql .= ')';
+				$this->query( $sql, $fname );
+			}
+
+			# Now insert the row
+			$sql = "INSERT INTO $table (" . $this->makeList( array_keys( $row ), LIST_NAMES ) .') VALUES (' .
+				$this->makeList( $row, LIST_COMMA ) . ')';
+			$this->query( $sql, $fname );
+		}
+	}
+
+	# DELETE where the condition is a join
+	function deleteJoin( $delTable, $joinTable, $delVar, $joinVar, $conds, $fname = "Database::deleteJoin" ) {
+		if ( !$conds ) {
+			throw new DBUnexpectedError($this,  'Database::deleteJoin() called with empty $conds' );
+		}
+
+		$delTable = $this->tableName( $delTable );
+		$joinTable = $this->tableName( $joinTable );
+		$sql = "DELETE FROM $delTable WHERE $delVar IN (SELECT $joinVar FROM $joinTable ";
+		if ( $conds != '*' ) {
+			$sql .= 'WHERE ' . $this->makeList( $conds, LIST_AND );
+		}
+		$sql .= ')';
+
+		$this->query( $sql, $fname );
+	}
+
+	# Returns the size of a text field, or -1 for "unlimited"
+	function textFieldSize( $table, $field ) {
+		$table = $this->tableName( $table );
+		$sql = "SELECT t.typname as ftype,a.atttypmod as size
+			FROM pg_class c, pg_attribute a, pg_type t
+			WHERE relname='$table' AND a.attrelid=c.oid AND
+				a.atttypid=t.oid and a.attname='$field'";
+		$res =$this->query($sql);
+		$row=$this->fetchObject($res);
+		if ($row->ftype=="varchar") {
+			$size=$row->size-4;
+		} else {
+			$size=$row->size;
+		}
+		$this->freeResult( $res );
+		return $size;
+	}
+
+	function lowPriorityOption() {
+		return '';
+	}
+
+	function limitResult($sql, $limit,$offset=false) {
+		return "$sql LIMIT $limit ".(is_numeric($offset)?" OFFSET {$offset} ":"");
+	}
+
+	/**
+	 * Returns an SQL expression for a simple conditional.
+	 * Uses CASE on Postgres
+	 *
+	 * @param string $cond SQL expression which will result in a boolean value
+	 * @param string $trueVal SQL expression to return if true
+	 * @param string $falseVal SQL expression to return if false
+	 * @return string SQL fragment
+	 */
+	function conditional( $cond, $trueVal, $falseVal ) {
+		return " (CASE WHEN $cond THEN $trueVal ELSE $falseVal END) ";
+	}
+
+	function wasDeadlock() {
+		return $this->lastErrno() == '40P01';
+	}
+
+	function timestamp( $ts=0 ) {
+		return wfTimestamp(TS_POSTGRES,$ts);
+	}
+
+	/**
+	 * Return aggregated value function call
+	 */
+	function aggregateValue ($valuedata,$valuename='value') {
+		return $valuedata;
+	}
+
+
+	function reportQueryError( $error, $errno, $sql, $fname, $tempIgnore = false ) {
+		# Ignore errors during error handling to avoid infinite recursion
+		$ignore = $this->ignoreErrors( true );
+		++$this->mErrorCount;
+
+		if ($ignore || $tempIgnore) {
+			wfDebug("SQL ERROR (ignored): $error\n");
+			$this->ignoreErrors( $ignore );
+		}
+		else {
+			$message = "A database error has occurred\n" .
+				"Query: $sql\n" .
+				"Function: $fname\n" .
+				"Error: $errno $error\n";
+			throw new DBUnexpectedError($this, $message);
+		}
+	}
+
+	/**
+	 * @return string wikitext of a link to the server software's web site
+	 */
+	function getSoftwareLink() {
+		return "[http://www.postgresql.org/ PostgreSQL]";
+	}
+
+	/**
+	 * @return string Version information from the database
+	 */
+	function getServerVersion() {
+		$version = pg_fetch_result($this->doQuery("SELECT version()"),0,0);
+		$thisver = array();
+		if (!preg_match('/PostgreSQL (\d+\.\d+)(\S+)/', $version, $thisver)) {
+			die("Could not determine the numeric version from $version!");
+		}
+		$this->numeric_version = $thisver[1];
+		return $version;
+	}
+
+
+	/**
+	 * Query whether a given relation exists (in the given schema, or the 
+	 * default mw one if not given)
+	 */
+	function relationExists( $table, $types, $schema = false ) {
+		global $wgDBmwschema;
+		if (!is_array($types))
+			$types = array($types);
+		if (! $schema )
+			$schema = $wgDBmwschema;
+		$etable = $this->addQuotes($table);
+		$eschema = $this->addQuotes($schema);
+		$SQL = "SELECT 1 FROM pg_catalog.pg_class c, pg_catalog.pg_namespace n "
+			. "WHERE c.relnamespace = n.oid AND c.relname = $etable AND n.nspname = $eschema "
+			. "AND c.relkind IN ('" . implode("','", $types) . "')";
+		$res = $this->query( $SQL );
+		$count = $res ? pg_num_rows($res) : 0;
+		if ($res)
+			$this->freeResult( $res );
+		return $count;
+	}
+
+	/*
+	 * For backward compatibility, this function checks both tables and 
+	 * views.
+	 */
+	function tableExists ($table, $schema = false) {
+		return $this->relationExists($table, array('r', 'v'), $schema);
+	}
+	
+	function sequenceExists ($sequence, $schema = false) {
+		return $this->relationExists($sequence, 'S', $schema);
+	}
+
+	function triggerExists($table, $trigger) {
+		global $wgDBmwschema;
+
+		$q = <<<END
+	SELECT 1 FROM pg_class, pg_namespace, pg_trigger
+		WHERE relnamespace=pg_namespace.oid AND relkind='r'
+		      AND tgrelid=pg_class.oid
+		      AND nspname=%s AND relname=%s AND tgname=%s
+END;
+		$res = $this->query(sprintf($q,
+				$this->addQuotes($wgDBmwschema),
+				$this->addQuotes($table),
+				$this->addQuotes($trigger)));
+		if (!$res)
+			return NULL;
+		$rows = pg_num_rows($res);
+		$this->freeResult($res);
+		return $rows;
+	}
+
+	function ruleExists($table, $rule) {
+		global $wgDBmwschema;
+		$exists = $this->selectField("pg_rules", "rulename",
+				array(	"rulename" => $rule,
+					"tablename" => $table,
+					"schemaname" => $wgDBmwschema));
+		return $exists === $rule;
+	}
+
+	function constraintExists($table, $constraint) {
+		global $wgDBmwschema;
+		$SQL = sprintf("SELECT 1 FROM information_schema.table_constraints ".
+			   "WHERE constraint_schema = %s AND table_name = %s AND constraint_name = %s",
+			$this->addQuotes($wgDBmwschema),	
+			$this->addQuotes($table),	
+			$this->addQuotes($constraint));
+		$res = $this->query($SQL);
+		if (!$res)
+			return NULL;
+		$rows = pg_num_rows($res);
+		$this->freeResult($res);
+		return $rows;
+	}
+
+	/**
+	 * Query whether a given schema exists. Returns the name of the owner
+	 */
+	function schemaExists( $schema ) {
+		$eschema = preg_replace("/'/", "''", $schema);
+		$SQL = "SELECT rolname FROM pg_catalog.pg_namespace n, pg_catalog.pg_roles r "
+				."WHERE n.nspowner=r.oid AND n.nspname = '$eschema'";
+		$res = $this->query( $SQL );
+		$owner = $res ? pg_num_rows($res) ? pg_fetch_result($res, 0, 0) : false : false;
+		if ($res)
+			$this->freeResult($res);
+		return $owner;
+	}
+
+	/**
+	 * Query whether a given column exists in the mediawiki schema
+	 */
+	function fieldExists( $table, $field, $fname = 'DatabasePostgres::fieldExists' ) {
+		global $wgDBmwschema;
+		$etable = preg_replace("/'/", "''", $table);
+		$eschema = preg_replace("/'/", "''", $wgDBmwschema);
+		$ecol = preg_replace("/'/", "''", $field);
+		$SQL = "SELECT 1 FROM pg_catalog.pg_class c, pg_catalog.pg_namespace n, pg_catalog.pg_attribute a "
+			. "WHERE c.relnamespace = n.oid AND c.relname = '$etable' AND n.nspname = '$eschema' "
+			. "AND a.attrelid = c.oid AND a.attname = '$ecol'";
+		$res = $this->query( $SQL, $fname );
+		$count = $res ? pg_num_rows($res) : 0;
+		if ($res)
+			$this->freeResult( $res );
+		return $count;
+	}
+
+	function fieldInfo( $table, $field ) {
+		return PostgresField::fromText($this, $table, $field);
+	}
+
+	function begin( $fname = 'DatabasePostgres::begin' ) {
+		$this->query( 'BEGIN', $fname );
+		$this->mTrxLevel = 1;
+	}
+	function immediateCommit( $fname = 'DatabasePostgres::immediateCommit' ) {
+		return true;
+	}
+	function commit( $fname = 'DatabasePostgres::commit' ) {
+		$this->query( 'COMMIT', $fname );
+		$this->mTrxLevel = 0;
+	}
+
+	/* Not even sure why this is used in the main codebase... */
+	function limitResultForUpdate($sql, $num) {
+		return $sql;
+	}
+
+	function setup_database() {
+		global $wgVersion, $wgDBmwschema, $wgDBts2schema, $wgDBport, $wgDBuser;
+
+		## Make sure that we can write to the correct schema
+		## If not, Postgres will happily and silently go to the next search_path item
+		$ctest = "mw_test_table";
+		if ($this->tableExists($ctest, $wgDBmwschema)) {
+			$this->doQuery("DROP TABLE $wgDBmwschema.$ctest");
+		}
+		$SQL = "CREATE TABLE $wgDBmwschema.$ctest(a int)";
+		$olde = error_reporting( 0 );
+		$res = $this->doQuery($SQL);
+		error_reporting( $olde );
+		if (!$res) {
+			print "<b>FAILED</b>. Make sure that the user \"$wgDBuser\" can write to the schema \"$wgDBmwschema\"</li>\n";
+			dieout("</ul>");
+		}
+		$this->doQuery("DROP TABLE $wgDBmwschema.mw_test_table");
+
+		dbsource( "../maintenance/postgres/tables.sql", $this);
+
+		## Version-specific stuff
+		if ($this->numeric_version == 8.1) {
+			$this->doQuery("CREATE INDEX ts2_page_text ON pagecontent USING gist(textvector)");
+			$this->doQuery("CREATE INDEX ts2_page_title ON page USING gist(titlevector)");
+		}
+		else {
+			$this->doQuery("CREATE INDEX ts2_page_text ON pagecontent USING gin(textvector)");
+			$this->doQuery("CREATE INDEX ts2_page_title ON page USING gin(titlevector)");
+		}
+
+		## Update version information
+		$mwv = $this->addQuotes($wgVersion);
+		$pgv = $this->addQuotes($this->getServerVersion());
+		$pgu = $this->addQuotes($this->mUser);
+		$mws = $this->addQuotes($wgDBmwschema);
+		$tss = $this->addQuotes($wgDBts2schema);
+		$pgp = $this->addQuotes($wgDBport);
+		$dbn = $this->addQuotes($this->mDBname);
+		$ctype = pg_fetch_result($this->doQuery("SHOW lc_ctype"),0,0);
+
+		$SQL = "UPDATE mediawiki_version SET mw_version=$mwv, pg_version=$pgv, pg_user=$pgu, ".
+				"mw_schema = $mws, ts2_schema = $tss, pg_port=$pgp, pg_dbname=$dbn, ".
+				"ctype = '$ctype' ".
+				"WHERE type = 'Creation'";
+		$this->query($SQL);
+
+		## Avoid the non-standard "REPLACE INTO" syntax
+		$f = fopen( "../maintenance/interwiki.sql", 'r' );
+		if ($f == false ) {
+			dieout( "<li>Could not find the interwiki.sql file");
+		}
+		## We simply assume it is already empty as we have just created it
+		$SQL = "INSERT INTO interwiki(iw_prefix,iw_url,iw_local) VALUES ";
+		while ( ! feof( $f ) ) {
+			$line = fgets($f,1024);
+			$matches = array();
+			if (!preg_match('/^\s*(\(.+?),(\d)\)/', $line, $matches)) {
+				continue;
+			}
+			$this->query("$SQL $matches[1],$matches[2])");
+		}
+		print " (table interwiki successfully populated)...\n";
+
+		$this->doQuery("COMMIT");
+	}
+
+	function encodeBlob($b) {
+		return array('bytea',pg_escape_bytea($b));
+	}
+	function decodeBlob($b) {
+		return pg_unescape_bytea( $b );
+	}
+
+	function strencode( $s ) { ## Should not be called by us
+		return pg_escape_string( $s );
+	}
+
+	function addQuotes( $s ) {
+		if ( is_null( $s ) ) {
+			return 'NULL';
+		} else if (is_array( $s )) { ## Assume it is bytea data
+			return "E'$s[1]'";
+		}
+		return "'" . pg_escape_string($s) . "'";
+		// Unreachable: return "E'" . pg_escape_string($s) . "'";
+	}
+
+	function quote_ident( $s ) {
+		return '"' . preg_replace( '/"/', '""', $s) . '"';
+	}
+
+	/* For now, does nothing */
+	function selectDB( $db ) {
+		return true;
+	}
+
+	/**
+	 * Returns an optional USE INDEX clause to go after the table, and a
+	 * string to go at the end of the query
+	 *
+	 * @private
+	 *
+	 * @param array $options an associative array of options to be turned into
+	 *              an SQL query, valid keys are listed in the function.
+	 * @return array
+	 */
+	function makeSelectOptions( $options ) {
+		$preLimitTail = $postLimitTail = '';
+		$startOpts = '';
+
+		$noKeyOptions = array();
+		foreach ( $options as $key => $option ) {
+			if ( is_numeric( $key ) ) {
+				$noKeyOptions[$option] = true;
+			}
+		}
+
+		if ( isset( $options['GROUP BY'] ) ) $preLimitTail .= " GROUP BY " . $options['GROUP BY'];
+		if ( isset( $options['ORDER BY'] ) ) $preLimitTail .= " ORDER BY " . $options['ORDER BY'];
+		
+		//if (isset($options['LIMIT'])) {
+		//	$tailOpts .= $this->limitResult('', $options['LIMIT'],
+		//		isset($options['OFFSET']) ? $options['OFFSET'] 
+		//		: false);
+		//}
+
+		if ( isset( $noKeyOptions['FOR UPDATE'] ) ) $postLimitTail .= ' FOR UPDATE';
+		if ( isset( $noKeyOptions['LOCK IN SHARE MODE'] ) ) $postLimitTail .= ' LOCK IN SHARE MODE';
+		if ( isset( $noKeyOptions['DISTINCT'] ) && isset( $noKeyOptions['DISTINCTROW'] ) ) $startOpts .= 'DISTINCT';
+
+		if ( isset( $options['USE INDEX'] ) && ! is_array( $options['USE INDEX'] ) ) {
+			$useIndex = $this->useIndexClause( $options['USE INDEX'] );
+		} else {
+			$useIndex = '';
+		}
+		
+		return array( $startOpts, $useIndex, $preLimitTail, $postLimitTail );
+	}
+
+	public function setTimeout( $timeout ) {
+		// @todo fixme no-op
+	}
+
+	function ping() {
+		wfDebug( "Function ping() not written for DatabasePostgres.php yet");
+		return true;
+	}
+
+
+} // end DatabasePostgres class
+
+?>
Index: /MediaWiki/branches/1.11/includes/DateFormatter.php
===================================================================
--- /MediaWiki/branches/1.11/includes/DateFormatter.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/DateFormatter.php	(revision 1280)
@@ -0,0 +1,285 @@
+<?php
+
+/**
+ * Date formatter, recognises dates in plain text and formats them accoding to user preferences.
+ * @todo preferences, OutputPage
+ * @addtogroup Parser
+ */
+class DateFormatter
+{
+	var $mSource, $mTarget;
+	var $monthNames = '', $rxDM, $rxMD, $rxDMY, $rxYDM, $rxMDY, $rxYMD;
+
+	var $regexes, $pDays, $pMonths, $pYears;
+	var $rules, $xMonths, $preferences;
+	
+	const ALL = -1;
+	const NONE = 0;
+	const MDY = 1;
+	const DMY = 2;
+	const YMD = 3;
+	const ISO1 = 4;
+	const LASTPREF = 4;
+	const ISO2 = 5;
+	const YDM = 6;
+	const DM = 7;
+	const MD = 8;
+	const LAST = 8;
+
+	/**
+	 * @todo document
+	 */
+	function DateFormatter() {
+		global $wgContLang;
+
+		$this->monthNames = $this->getMonthRegex();
+		for ( $i=1; $i<=12; $i++ ) {
+			$this->xMonths[$wgContLang->lc( $wgContLang->getMonthName( $i ) )] = $i;
+			$this->xMonths[$wgContLang->lc( $wgContLang->getMonthAbbreviation( $i ) )] = $i;
+		}
+
+		$this->regexTrail = '(?![a-z])/iu';
+
+		# Partial regular expressions
+		$this->prxDM = '\[\[(\d{1,2})[ _](' . $this->monthNames . ')]]';
+		$this->prxMD = '\[\[(' . $this->monthNames . ')[ _](\d{1,2})]]';
+		$this->prxY = '\[\[(\d{1,4}([ _]BC|))]]';
+		$this->prxISO1 = '\[\[(-?\d{4})]]-\[\[(\d{2})-(\d{2})]]';
+		$this->prxISO2 = '\[\[(-?\d{4})-(\d{2})-(\d{2})]]';
+
+		# Real regular expressions
+		$this->regexes[self::DMY] = "/{$this->prxDM} *,? *{$this->prxY}{$this->regexTrail}";
+		$this->regexes[self::YDM] = "/{$this->prxY} *,? *{$this->prxDM}{$this->regexTrail}";
+		$this->regexes[self::MDY] = "/{$this->prxMD} *,? *{$this->prxY}{$this->regexTrail}";
+		$this->regexes[self::YMD] = "/{$this->prxY} *,? *{$this->prxMD}{$this->regexTrail}";
+		$this->regexes[self::DM] = "/{$this->prxDM}{$this->regexTrail}";
+		$this->regexes[self::MD] = "/{$this->prxMD}{$this->regexTrail}";
+		$this->regexes[self::ISO1] = "/{$this->prxISO1}{$this->regexTrail}";
+		$this->regexes[self::ISO2] = "/{$this->prxISO2}{$this->regexTrail}";
+
+		# Extraction keys
+		# See the comments in replace() for the meaning of the letters
+		$this->keys[self::DMY] = 'jFY';
+		$this->keys[self::YDM] = 'Y jF';
+		$this->keys[self::MDY] = 'FjY';
+		$this->keys[self::YMD] = 'Y Fj';
+		$this->keys[self::DM] = 'jF';
+		$this->keys[self::MD] = 'Fj';
+		$this->keys[self::ISO1] = 'ymd'; # y means ISO year
+		$this->keys[self::ISO2] = 'ymd';
+
+		# Target date formats
+		$this->targets[self::DMY] = '[[F j|j F]] [[Y]]';
+		$this->targets[self::YDM] = '[[Y]], [[F j|j F]]';
+		$this->targets[self::MDY] = '[[F j]], [[Y]]';
+		$this->targets[self::YMD] = '[[Y]] [[F j]]';
+		$this->targets[self::DM] = '[[F j|j F]]';
+		$this->targets[self::MD] = '[[F j]]';
+		$this->targets[self::ISO1] = '[[Y|y]]-[[F j|m-d]]';
+		$this->targets[self::ISO2] = '[[y-m-d]]';
+
+		# Rules
+		#            pref    source 	  target
+		$this->rules[self::DMY][self::MD] 	= self::DM;
+		$this->rules[self::ALL][self::MD] 	= self::MD;
+		$this->rules[self::MDY][self::DM] 	= self::MD;
+		$this->rules[self::ALL][self::DM] 	= self::DM;
+		$this->rules[self::NONE][self::ISO2] 	= self::ISO1;
+
+		$this->preferences = array(
+			'default' => self::NONE,
+			'dmy' => self::DMY,
+			'mdy' => self::MDY,
+			'ymd' => self::YMD,
+			'ISO 8601' => self::ISO1,
+		);
+	}
+
+	/**
+	 * @static
+	 */
+	function &getInstance() {
+		global $wgMemc;
+		static $dateFormatter = false;
+		if ( !$dateFormatter ) {
+			$dateFormatter = $wgMemc->get( wfMemcKey( 'dateformatter' ) );
+			if ( !$dateFormatter ) {
+				$dateFormatter = new DateFormatter;
+				$wgMemc->set( wfMemcKey( 'dateformatter' ), $dateFormatter, 3600 );
+			}
+		}
+		return $dateFormatter;
+	}
+
+	/**
+	 * @param string $preference User preference
+	 * @param string $text Text to reformat
+	 */
+	function reformat( $preference, $text ) {
+		if ( isset( $this->preferences[$preference] ) ) {
+			$preference = $this->preferences[$preference];
+		} else {
+			$preference = self::NONE;
+		}
+		for ( $i=1; $i<=self::LAST; $i++ ) {
+			$this->mSource = $i;
+			if ( isset ( $this->rules[$preference][$i] ) ) {
+				# Specific rules
+				$this->mTarget = $this->rules[$preference][$i];
+			} elseif ( isset ( $this->rules[self::ALL][$i] ) ) {
+				# General rules
+				$this->mTarget = $this->rules[self::ALL][$i];
+			} elseif ( $preference ) {
+				# User preference
+				$this->mTarget = $preference;
+			} else {
+				# Default
+				$this->mTarget = $i;
+			}
+			$text = preg_replace_callback( $this->regexes[$i], array( &$this, 'replace' ), $text );
+		}
+		return $text;
+	}
+
+	/**
+	 * @param $matches
+	 */
+	function replace( $matches ) {
+		# Extract information from $matches
+		$bits = array();
+		$key = $this->keys[$this->mSource];
+		for ( $p=0; $p < strlen($key); $p++ ) {
+			if ( $key{$p} != ' ' ) {
+				$bits[$key{$p}] = $matches[$p+1];
+			}
+		}
+
+		$format = $this->targets[$this->mTarget];
+
+		# Construct new date
+		$text = '';
+		$fail = false;
+
+		for ( $p=0; $p < strlen( $format ); $p++ ) {
+			$char = $format{$p};
+			switch ( $char ) {
+				case 'd': # ISO day of month
+					if ( !isset($bits['d']) ) {
+						$text .= sprintf( '%02d', $bits['j'] );
+					} else {
+						$text .= $bits['d'];
+					}
+					break;
+				case 'm': # ISO month
+					if ( !isset($bits['m']) ) {
+						$m = $this->makeIsoMonth( $bits['F'] );
+						if ( !$m || $m == '00' ) {
+							$fail = true;
+						} else {
+							$text .= $m;
+						}
+					} else {
+						$text .= $bits['m'];
+					}
+					break;
+				case 'y': # ISO year
+					if ( !isset( $bits['y'] ) ) {
+						$text .= $this->makeIsoYear( $bits['Y'] );
+					} else {
+						$text .= $bits['y'];
+					}
+					break;
+				case 'j': # ordinary day of month
+					if ( !isset($bits['j']) ) {
+						$text .= intval( $bits['d'] );
+					} else {
+						$text .= $bits['j'];
+					}
+					break;
+				case 'F': # long month
+					if ( !isset( $bits['F'] ) ) {
+						$m = intval($bits['m']);
+						if ( $m > 12 || $m < 1 ) {
+							$fail = true;
+						} else {
+							global $wgContLang;
+							$text .= $wgContLang->getMonthName( $m );
+						}
+					} else {
+						$text .= ucfirst( $bits['F'] );
+					}
+					break;
+				case 'Y': # ordinary (optional BC) year
+					if ( !isset( $bits['Y'] ) ) {
+						$text .= $this->makeNormalYear( $bits['y'] );
+					} else {
+						$text .= $bits['Y'];
+					}
+					break;
+				default:
+					$text .= $char;
+			}
+		}
+		if ( $fail ) {
+			$text = $matches[0];
+		}
+		return $text;
+	}
+
+	/**
+	 * @todo document
+	 */
+	function getMonthRegex() {
+		global $wgContLang;
+		$names = array();
+		for( $i = 1; $i <= 12; $i++ ) {
+			$names[] = $wgContLang->getMonthName( $i );
+			$names[] = $wgContLang->getMonthAbbreviation( $i );
+		}
+		return implode( '|', $names );
+	}
+
+	/**
+	 * Makes an ISO month, e.g. 02, from a month name
+	 * @param $monthName String: month name
+	 * @return string ISO month name
+	 */
+	function makeIsoMonth( $monthName ) {
+		global $wgContLang;
+
+		$n = $this->xMonths[$wgContLang->lc( $monthName )];
+		return sprintf( '%02d', $n );
+	}
+
+	/**
+	 * @todo document
+	 * @param $year String: Year name
+	 * @return string ISO year name
+	 */
+	function makeIsoYear( $year ) {
+		# Assumes the year is in a nice format, as enforced by the regex
+		if ( substr( $year, -2 ) == 'BC' ) {
+			$num = intval(substr( $year, 0, -3 )) - 1;
+			# PHP bug note: sprintf( "%04d", -1 ) fails poorly
+			$text = sprintf( '-%04d', $num );
+
+		} else {
+			$text = sprintf( '%04d', $year );
+		}
+		return $text;
+	}
+
+	/**
+	 * @todo document
+	 */
+	function makeNormalYear( $iso ) {
+		if ( $iso{0} == '-' ) {
+			$text = (intval( substr( $iso, 1 ) ) + 1) . ' BC';
+		} else {
+			$text = intval( $iso );
+		}
+		return $text;
+	}
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/DefaultSettings.php
===================================================================
--- /MediaWiki/branches/1.11/includes/DefaultSettings.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/DefaultSettings.php	(revision 1280)
@@ -0,0 +1,2535 @@
+<?php
+/**
+ *
+ *                 NEVER EDIT THIS FILE
+ *
+ *
+ * To customize your installation, edit "LocalSettings.php". If you make
+ * changes here, they will be lost on next upgrade of MediaWiki!
+ *
+ * Note that since all these string interpolations are expanded
+ * before LocalSettings is included, if you localize something
+ * like $wgScriptPath, you must also localize everything that
+ * depends on it.
+ *
+ * Documentation is in the source and on:
+ * http://www.mediawiki.org/wiki/Help:Configuration_settings
+ *
+ */
+
+# This is not a valid entry point, perform no further processing unless MEDIAWIKI is defined
+if( !defined( 'MEDIAWIKI' ) ) {
+	echo "This file is part of MediaWiki and is not a valid entry point\n";
+	die( 1 );
+}
+
+/**
+ * Create a site configuration object
+ * Not used for much in a default install
+ */
+require_once( 'includes/SiteConfiguration.php' );
+$wgConf = new SiteConfiguration;
+
+/** MediaWiki version number */
+$wgVersion			= '1.10.1';
+
+/** Name of the site. It must be changed in LocalSettings.php */
+$wgSitename         = 'MediaWiki';
+
+/** 
+ * Name of the project namespace. If left set to false, $wgSitename will be 
+ * used instead.
+ */
+$wgMetaNamespace    = false;
+
+/**
+ * Name of the project talk namespace. If left set to false, a name derived
+ * from the name of the project namespace will be used.
+ */
+$wgMetaNamespaceTalk = false;
+
+
+/** URL of the server. It will be automatically built including https mode */
+$wgServer = '';
+
+if( isset( $_SERVER['SERVER_NAME'] ) ) {
+	$wgServerName = $_SERVER['SERVER_NAME'];
+} elseif( isset( $_SERVER['HOSTNAME'] ) ) {
+	$wgServerName = $_SERVER['HOSTNAME'];
+} elseif( isset( $_SERVER['HTTP_HOST'] ) ) {
+	$wgServerName = $_SERVER['HTTP_HOST'];
+} elseif( isset( $_SERVER['SERVER_ADDR'] ) ) {
+	$wgServerName = $_SERVER['SERVER_ADDR'];
+} else {
+	$wgServerName = 'localhost';
+}
+
+# check if server use https:
+$wgProto = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') ? 'https' : 'http';
+
+$wgServer = $wgProto.'://' . $wgServerName;
+# If the port is a non-standard one, add it to the URL
+if(    isset( $_SERVER['SERVER_PORT'] )
+	&& !strpos( $wgServerName, ':' )
+    && (    ( $wgProto == 'http' && $_SERVER['SERVER_PORT'] != 80 )
+	 || ( $wgProto == 'https' && $_SERVER['SERVER_PORT'] != 443 ) ) ) {
+
+	$wgServer .= ":" . $_SERVER['SERVER_PORT'];
+}
+
+
+/**
+ * The path we should point to.
+ * It might be a virtual path in case with use apache mod_rewrite for example
+ *
+ * This *needs* to be set correctly.
+ *
+ * Other paths will be set to defaults based on it unless they are directly
+ * set in LocalSettings.php
+ */
+$wgScriptPath	    = '/wiki';
+
+/**
+ * Whether to support URLs like index.php/Page_title
+ * These often break when PHP is set up in CGI mode.
+ * PATH_INFO *may* be correct if cgi.fix_pathinfo is
+ * set, but then again it may not; lighttpd converts
+ * incoming path data to lowercase on systems with
+ * case-insensitive filesystems, and there have been
+ * reports of problems on Apache as well.
+ *
+ * To be safe we'll continue to keep it off by default.
+ *
+ * Override this to false if $_SERVER['PATH_INFO']
+ * contains unexpectedly incorrect garbage, or to
+ * true if it is really correct.
+ *
+ * The default $wgArticlePath will be set based on
+ * this value at runtime, but if you have customized
+ * it, having this incorrectly set to true can
+ * cause redirect loops when "pretty URLs" are used.
+ *
+ */
+$wgUsePathInfo =
+	( strpos( php_sapi_name(), 'cgi' ) === false ) &&
+	( strpos( php_sapi_name(), 'apache2filter' ) === false ) &&
+	( strpos( php_sapi_name(), 'isapi' ) === false );
+
+
+/**#@+
+ * Script users will request to get articles
+ * ATTN: Old installations used wiki.phtml and redirect.phtml -
+ * make sure that LocalSettings.php is correctly set!
+ *
+ * Will be set based on $wgScriptPath in Setup.php if not overridden
+ * in LocalSettings.php. Generally you should not need to change this
+ * unless you don't like seeing "index.php".
+ */
+$wgScript           = false; /// defaults to "{$wgScriptPath}/index.php"
+$wgRedirectScript   = false; /// defaults to "{$wgScriptPath}/redirect.php"
+/**#@-*/
+
+
+/**#@+
+ * These various web and file path variables are set to their defaults
+ * in Setup.php if they are not explicitly set from LocalSettings.php.
+ * If you do override them, be sure to set them all!
+ *
+ * These will relatively rarely need to be set manually, unless you are
+ * splitting style sheets or images outside the main document root.
+ *
+ * @global string
+ */
+/**
+ * style path as seen by users
+ */
+$wgStylePath   = false; /// defaults to "{$wgScriptPath}/skins"
+/**
+ * filesystem stylesheets directory
+ */
+$wgStyleDirectory = false; /// defaults to "{$IP}/skins"
+$wgStyleSheetPath = &$wgStylePath;
+$wgArticlePath      = false; /// default to "{$wgScript}/$1" or "{$wgScript}?title=$1", depending on $wgUsePathInfo
+$wgVariantArticlePath = false;
+$wgUploadPath       = false; /// defaults to "{$wgScriptPath}/images"
+$wgUploadDirectory	= false; /// defaults to "{$IP}/images"
+$wgHashedUploadDirectory	= true;
+$wgLogo				= false; /// defaults to "{$wgStylePath}/common/images/wiki.png"
+$wgFavicon			= '/favicon.ico';
+$wgMathPath         = false; /// defaults to "{$wgUploadPath}/math"
+$wgMathDirectory    = false; /// defaults to "{$wgUploadDirectory}/math"
+$wgTmpDirectory     = false; /// defaults to "{$wgUploadDirectory}/tmp"
+$wgUploadBaseUrl    = "";
+/**#@-*/
+
+/**
+ * By default deleted files are simply discarded; to save them and
+ * make it possible to undelete images, create a directory which
+ * is writable to the web server but is not exposed to the internet.
+ *
+ * Set $wgSaveDeletedFiles to true and set up the save path in
+ * $wgFileStore['deleted']['directory'].
+ */
+$wgSaveDeletedFiles = false;
+
+/**
+ * New file storage paths; currently used only for deleted files.
+ * Set it like this:
+ *
+ *   $wgFileStore['deleted']['directory'] = '/var/wiki/private/deleted';
+ *
+ */
+$wgFileStore = array();
+$wgFileStore['deleted']['directory'] = null; // Don't forget to set this.
+$wgFileStore['deleted']['url'] = null;       // Private
+$wgFileStore['deleted']['hash'] = 3;         // 3-level subdirectory split
+
+/**
+ * Allowed title characters -- regex character class
+ * Don't change this unless you know what you're doing
+ *
+ * Problematic punctuation:
+ *  []{}|#    Are needed for link syntax, never enable these
+ *  <>        Causes problems with HTML escaping, don't use
+ *  %         Enabled by default, minor problems with path to query rewrite rules, see below
+ *  +         Enabled by default, but doesn't work with path to query rewrite rules, corrupted by apache
+ *  ?         Enabled by default, but doesn't work with path to PATH_INFO rewrites
+ *
+ * All three of these punctuation problems can be avoided by using an alias, instead of a
+ * rewrite rule of either variety.
+ *
+ * The problem with % is that when using a path to query rewrite rule, URLs are
+ * double-unescaped: once by Apache's path conversion code, and again by PHP. So
+ * %253F, for example, becomes "?". Our code does not double-escape to compensate
+ * for this, indeed double escaping would break if the double-escaped title was
+ * passed in the query string rather than the path. This is a minor security issue
+ * because articles can be created such that they are hard to view or edit.
+ *
+ * In some rare cases you may wish to remove + for compatibility with old links.
+ *
+ * Theoretically 0x80-0x9F of ISO 8859-1 should be disallowed, but
+ * this breaks interlanguage links
+ */
+$wgLegalTitleChars = " %!\"$&'()*,\\-.\\/0-9:;=?@A-Z\\\\^_`a-z~\\x80-\\xFF+";
+
+
+/**
+ * The external URL protocols
+ */
+$wgUrlProtocols = array(
+	'http://',
+	'https://',
+	'ftp://',
+	'irc://',
+	'gopher://',
+	'telnet://', // Well if we're going to support the above.. -ævar
+	'nntp://', // @bug 3808 RFC 1738
+	'worldwind://',
+	'mailto:',
+	'news:'
+);
+
+/** internal name of virus scanner. This servers as a key to the $wgAntivirusSetup array.
+ * Set this to NULL to disable virus scanning. If not null, every file uploaded will be scanned for viruses.
+ * @global string $wgAntivirus
+ */
+$wgAntivirus= NULL;
+
+/** Configuration for different virus scanners. This an associative array of associative arrays:
+ * it contains on setup array per known scanner type. The entry is selected by $wgAntivirus, i.e.
+ * valid values for $wgAntivirus are the keys defined in this array.
+ *
+ * The configuration array for each scanner contains the following keys: "command", "codemap", "messagepattern";
+ *
+ * "command" is the full command to call the virus scanner - %f will be replaced with the name of the
+ * file to scan. If not present, the filename will be appended to the command. Note that this must be
+ * overwritten if the scanner is not in the system path; in that case, plase set
+ * $wgAntivirusSetup[$wgAntivirus]['command'] to the desired command with full path.
+ *
+ * "codemap" is a mapping of exit code to return codes of the detectVirus function in SpecialUpload.
+ * An exit code mapped to AV_SCAN_FAILED causes the function to consider the scan to be failed. This will pass
+ * the file if $wgAntivirusRequired is not set.
+ * An exit code mapped to AV_SCAN_ABORTED causes the function to consider the file to have an usupported format,
+ * which is probably imune to virusses. This causes the file to pass.
+ * An exit code mapped to AV_NO_VIRUS will cause the file to pass, meaning no virus was found.
+ * All other codes (like AV_VIRUS_FOUND) will cause the function to report a virus.
+ * You may use "*" as a key in the array to catch all exit codes not mapped otherwise.
+ *
+ * "messagepattern" is a perl regular expression to extract the meaningful part of the scanners
+ * output. The relevant part should be matched as group one (\1).
+ * If not defined or the pattern does not match, the full message is shown to the user.
+ *
+ * @global array $wgAntivirusSetup
+ */
+$wgAntivirusSetup= array(
+
+	#setup for clamav
+	'clamav' => array (
+		'command' => "clamscan --no-summary ",
+
+		'codemap'=> array (
+			"0"=>  AV_NO_VIRUS, #no virus
+			"1"=>  AV_VIRUS_FOUND, #virus found
+			"52"=> AV_SCAN_ABORTED, #unsupported file format (probably imune)
+			"*"=>  AV_SCAN_FAILED, #else scan failed
+		),
+
+		'messagepattern'=> '/.*?:(.*)/sim',
+	),
+
+	#setup for f-prot
+	'f-prot' => array (
+		'command' => "f-prot ",
+
+		'codemap'=> array (
+			"0"=> AV_NO_VIRUS, #no virus
+			"3"=> AV_VIRUS_FOUND, #virus found
+			"6"=> AV_VIRUS_FOUND, #virus found
+			"*"=> AV_SCAN_FAILED, #else scan failed
+		),
+
+		'messagepattern'=> '/.*?Infection:(.*)$/m',
+	),
+);
+
+
+/** Determines if a failed virus scan (AV_SCAN_FAILED) will cause the file to be rejected.
+ * @global boolean $wgAntivirusRequired
+*/
+$wgAntivirusRequired= true;
+
+/** Determines if the mime type of uploaded files should be checked
+ * @global boolean $wgVerifyMimeType
+*/
+$wgVerifyMimeType= true;
+
+/** Sets the mime type definition file to use by MimeMagic.php.
+* @global string $wgMimeTypeFile
+*/
+$wgMimeTypeFile= "includes/mime.types";
+#$wgMimeTypeFile= "/etc/mime.types";
+#$wgMimeTypeFile= NULL; #use built-in defaults only.
+
+/** Sets the mime type info file to use by MimeMagic.php.
+* @global string $wgMimeInfoFile
+*/
+$wgMimeInfoFile= "includes/mime.info";
+#$wgMimeInfoFile= NULL; #use built-in defaults only.
+
+/** Switch for loading the FileInfo extension by PECL at runtime.
+ * This should be used only if fileinfo is installed as a shared object 
+ * or a dynamic libary
+ * @global string $wgLoadFileinfoExtension
+*/
+$wgLoadFileinfoExtension= false;
+
+/** Sets an external mime detector program. The command must print only
+ * the mime type to standard output.
+ * The name of the file to process will be appended to the command given here.
+ * If not set or NULL, mime_content_type will be used if available.
+*/
+$wgMimeDetectorCommand= NULL; # use internal mime_content_type function, available since php 4.3.0
+#$wgMimeDetectorCommand= "file -bi"; #use external mime detector (Linux)
+
+/** Switch for trivial mime detection. Used by thumb.php to disable all fance
+ * things, because only a few types of images are needed and file extensions
+ * can be trusted.
+*/
+$wgTrivialMimeDetection= false;
+
+/**
+ * To set 'pretty' URL paths for actions other than
+ * plain page views, add to this array. For instance:
+ *   'edit' => "$wgScriptPath/edit/$1"
+ *
+ * There must be an appropriate script or rewrite rule
+ * in place to handle these URLs.
+ */
+$wgActionPaths = array();
+
+/**
+ * If you operate multiple wikis, you can define a shared upload path here.
+ * Uploads to this wiki will NOT be put there - they will be put into
+ * $wgUploadDirectory.
+ * If $wgUseSharedUploads is set, the wiki will look in the shared repository if
+ * no file of the given name is found in the local repository (for [[Image:..]],
+ * [[Media:..]] links). Thumbnails will also be looked for and generated in this
+ * directory.
+ */
+$wgUseSharedUploads = false;
+/** Full path on the web server where shared uploads can be found */
+$wgSharedUploadPath = "http://commons.wikimedia.org/shared/images";
+/** Fetch commons image description pages and display them on the local wiki? */
+$wgFetchCommonsDescriptions = false;
+/** Path on the file system where shared uploads can be found. */
+$wgSharedUploadDirectory = "/var/www/wiki3/images";
+/** DB name with metadata about shared directory. Set this to false if the uploads do not come from a wiki. */
+$wgSharedUploadDBname = false;
+/** Optional table prefix used in database. */
+$wgSharedUploadDBprefix = '';
+/** Cache shared metadata in memcached. Don't do this if the commons wiki is in a different memcached domain */
+$wgCacheSharedUploads = true;
+/** Allow for upload to be copied from an URL. Requires Special:Upload?source=web */
+$wgAllowCopyUploads = false;
+/**
+ * Max size for uploads, in bytes.  Currently only works for uploads from URL
+ * via CURL (see $wgAllowCopyUploads).  The only way to impose limits on
+ * normal uploads is currently to edit php.ini.
+ */
+$wgMaxUploadSize = 1024*1024*100; # 100MB
+
+/**
+ * Point the upload navigation link to an external URL
+ * Useful if you want to use a shared repository by default
+ * without disabling local uploads (use $wgEnableUploads = false for that)
+ * e.g. $wgUploadNavigationUrl = 'http://commons.wikimedia.org/wiki/Special:Upload';
+*/
+$wgUploadNavigationUrl = false;
+
+/**
+ * Give a path here to use thumb.php for thumbnail generation on client request, instead of
+ * generating them on render and outputting a static URL. This is necessary if some of your
+ * apache servers don't have read/write access to the thumbnail path.
+ *
+ * Example:
+ *   $wgThumbnailScriptPath = "{$wgScriptPath}/thumb.php";
+ */
+$wgThumbnailScriptPath = false;
+$wgSharedThumbnailScriptPath = false;
+
+/**
+ * Set the following to false especially if you have a set of files that need to
+ * be accessible by all wikis, and you do not want to use the hash (path/a/aa/)
+ * directory layout.
+ */
+$wgHashedSharedUploadDirectory = true;
+
+/**
+ * Base URL for a repository wiki. Leave this blank if uploads are just stored
+ * in a shared directory and not meant to be accessible through a separate wiki.
+ * Otherwise the image description pages on the local wiki will link to the
+ * image description page on this wiki.
+ *
+ * Please specify the namespace, as in the example below.
+ */
+$wgRepositoryBaseUrl="http://commons.wikimedia.org/wiki/Image:";
+
+
+#
+# Email settings
+#
+
+/**
+ * Site admin email address
+ * Default to wikiadmin@SERVER_NAME
+ * @global string $wgEmergencyContact
+ */
+$wgEmergencyContact = 'wikiadmin@' . $wgServerName;
+
+/**
+ * Password reminder email address
+ * The address we should use as sender when a user is requesting his password
+ * Default to apache@SERVER_NAME
+ * @global string $wgPasswordSender
+ */
+$wgPasswordSender	= 'MediaWiki Mail <apache@' . $wgServerName . '>';
+
+/**
+ * dummy address which should be accepted during mail send action
+ * It might be necessay to adapt the address or to set it equal
+ * to the $wgEmergencyContact address
+ */
+#$wgNoReplyAddress	= $wgEmergencyContact;
+$wgNoReplyAddress	= 'reply@not.possible';
+
+/**
+ * Set to true to enable the e-mail basic features:
+ * Password reminders, etc. If sending e-mail on your
+ * server doesn't work, you might want to disable this.
+ * @global bool $wgEnableEmail
+ */
+$wgEnableEmail = true;
+
+/**
+ * Set to true to enable user-to-user e-mail.
+ * This can potentially be abused, as it's hard to track.
+ * @global bool $wgEnableUserEmail
+ */
+$wgEnableUserEmail = true;
+
+/**
+ * Minimum time, in hours, which must elapse between password reminder
+ * emails for a given account. This is to prevent abuse by mail flooding.
+ */
+$wgPasswordReminderResendTime = 24;
+
+/**
+ * SMTP Mode
+ * For using a direct (authenticated) SMTP server connection.
+ * Default to false or fill an array :
+ * <code>
+ * "host" => 'SMTP domain',
+ * "IDHost" => 'domain for MessageID',
+ * "port" => "25",
+ * "auth" => true/false,
+ * "username" => user,
+ * "password" => password
+ * </code>
+ *
+ * @global mixed $wgSMTP
+ */
+$wgSMTP				= false;
+
+
+/**#@+
+ * Database settings
+ */
+/** database host name or ip address */
+$wgDBserver         = 'localhost';
+/** database port number */
+$wgDBport           = '';
+/** name of the database */
+$wgDBname           = 'wikidb';
+/** */
+$wgDBconnection     = '';
+/** Database username */
+$wgDBuser           = 'wikiuser';
+/** Database type
+ */
+$wgDBtype           = "mysql";
+/** Search type
+ * Leave as null to select the default search engine for the
+ * selected database type (eg SearchMySQL4), or set to a class
+ * name to override to a custom search engine.
+ */
+$wgSearchType	    = null;
+/** Table name prefix */
+$wgDBprefix         = '';
+/** MySQL table options to use during installation or update */
+$wgDBTableOptions = 'TYPE=InnoDB';
+
+/**#@-*/
+
+
+/** Live high performance sites should disable this - some checks acquire giant mysql locks */
+$wgCheckDBSchema = true;
+
+
+/**
+ * Shared database for multiple wikis. Presently used for storing a user table
+ * for single sign-on. The server for this database must be the same as for the
+ * main database.
+ * EXPERIMENTAL
+ */
+$wgSharedDB = null;
+
+# Database load balancer
+# This is a two-dimensional array, an array of server info structures
+# Fields are:
+#   host:        Host name
+#   dbname:      Default database name
+#   user:        DB user
+#   password:    DB password
+#   type:        "mysql" or "postgres"
+#   load:        ratio of DB_SLAVE load, must be >=0, the sum of all loads must be >0
+#   groupLoads:  array of load ratios, the key is the query group name. A query may belong
+#                to several groups, the most specific group defined here is used.
+#
+#   flags:       bit field
+#                   DBO_DEFAULT -- turns on DBO_TRX only if !$wgCommandLineMode (recommended)
+#                   DBO_DEBUG -- equivalent of $wgDebugDumpSql
+#                   DBO_TRX -- wrap entire request in a transaction
+#                   DBO_IGNORE -- ignore errors (not useful in LocalSettings.php)
+#                   DBO_NOBUFFER -- turn off buffering (not useful in LocalSettings.php)
+#
+#   max lag:     (optional) Maximum replication lag before a slave will taken out of rotation
+#   max threads: (optional) Maximum number of running threads
+#
+#   These and any other user-defined properties will be assigned to the mLBInfo member
+#   variable of the Database object.
+#
+# Leave at false to use the single-server variables above
+$wgDBservers		= false;
+
+/** How long to wait for a slave to catch up to the master */
+$wgMasterWaitTimeout = 10;
+
+/** File to log database errors to */
+$wgDBerrorLog		= false;
+
+/** When to give an error message */
+$wgDBClusterTimeout = 10;
+
+/**
+ * wgDBminWordLen :
+ * MySQL 3.x : used to discard words that MySQL will not return any results for
+ * shorter values configure mysql directly.
+ * MySQL 4.x : ignore it and configure mySQL
+ * See: http://dev.mysql.com/doc/mysql/en/Fulltext_Fine-tuning.html
+ */
+$wgDBminWordLen     = 4;
+/** Set to true if using InnoDB tables */
+$wgDBtransactions	= false;
+/** Set to true for compatibility with extensions that might be checking.
+ * MySQL 3.23.x is no longer supported. */
+$wgDBmysql4			= true;
+
+/**
+ * Set to true to engage MySQL 4.1/5.0 charset-related features;
+ * for now will just cause sending of 'SET NAMES=utf8' on connect.
+ *
+ * WARNING: THIS IS EXPERIMENTAL!
+ *
+ * May break if you're not using the table defs from mysql5/tables.sql.
+ * May break if you're upgrading an existing wiki if set differently.
+ * Broken symptoms likely to include incorrect behavior with page titles,
+ * usernames, comments etc containing non-ASCII characters.
+ * Might also cause failures on the object cache and other things.
+ *
+ * Even correct usage may cause failures with Unicode supplementary
+ * characters (those not in the Basic Multilingual Plane) unless MySQL
+ * has enhanced their Unicode support.
+ */
+$wgDBmysql5			= false;
+
+/**
+ * Other wikis on this site, can be administered from a single developer
+ * account.
+ * Array numeric key => database name
+ */
+$wgLocalDatabases   = array();
+
+/**
+ * Object cache settings
+ * See Defines.php for types
+ */
+$wgMainCacheType = CACHE_NONE;
+$wgMessageCacheType = CACHE_ANYTHING;
+$wgParserCacheType = CACHE_ANYTHING;
+
+$wgParserCacheExpireTime = 86400;
+
+$wgSessionsInMemcached = false;
+$wgLinkCacheMemcached = false; # Not fully tested
+
+/**
+ * Memcached-specific settings
+ * See docs/memcached.txt
+ */
+$wgUseMemCached     = false;
+$wgMemCachedDebug   = false; # Will be set to false in Setup.php, if the server isn't working
+$wgMemCachedServers = array( '127.0.0.1:11000' );
+$wgMemCachedDebug   = false;
+$wgMemCachedPersistent = false;
+
+/**
+ * Directory for local copy of message cache, for use in addition to memcached
+ */
+$wgLocalMessageCache = false;
+/**
+ * Defines format of local cache
+ * true - Serialized object
+ * false - PHP source file (Warning - security risk)
+ */
+$wgLocalMessageCacheSerialized = true;
+
+/**
+ * Directory for compiled constant message array databases
+ * WARNING: turning anything on will just break things, aaaaaah!!!!
+ */
+$wgCachedMessageArrays = false;
+
+# Language settings
+#
+/** Site language code, should be one of ./languages/Language(.*).php */
+$wgLanguageCode     = 'en';
+
+/**
+ * Some languages need different word forms, usually for different cases.
+ * Used in Language::convertGrammar().
+ */
+$wgGrammarForms = array();
+#$wgGrammarForms['en']['genitive']['car'] = 'car\'s';
+
+/** Treat language links as magic connectors, not inline links */
+$wgInterwikiMagic = true;
+
+/** Hide interlanguage links from the sidebar */
+$wgHideInterlanguageLinks = false;
+
+
+/** We speak UTF-8 all the time now, unless some oddities happen */
+$wgInputEncoding  = 'UTF-8';
+$wgOutputEncoding = 'UTF-8';
+$wgEditEncoding   = '';
+
+# Set this to eg 'ISO-8859-1' to perform character set
+# conversion when loading old revisions not marked with
+# "utf-8" flag. Use this when converting wiki to UTF-8
+# without the burdensome mass conversion of old text data.
+#
+# NOTE! This DOES NOT touch any fields other than old_text.
+# Titles, comments, user names, etc still must be converted
+# en masse in the database before continuing as a UTF-8 wiki.
+$wgLegacyEncoding   = false;
+
+/**
+ * If set to true, the MediaWiki 1.4 to 1.5 schema conversion will
+ * create stub reference rows in the text table instead of copying
+ * the full text of all current entries from 'cur' to 'text'.
+ *
+ * This will speed up the conversion step for large sites, but
+ * requires that the cur table be kept around for those revisions
+ * to remain viewable.
+ *
+ * maintenance/migrateCurStubs.php can be used to complete the
+ * migration in the background once the wiki is back online.
+ *
+ * This option affects the updaters *only*. Any present cur stub
+ * revisions will be readable at runtime regardless of this setting.
+ */
+$wgLegacySchemaConversion = false;
+
+$wgMimeType			= 'text/html';
+$wgJsMimeType			= 'text/javascript';
+$wgDocType			= '-//W3C//DTD XHTML 1.0 Transitional//EN';
+$wgDTD				= 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd';
+$wgXhtmlDefaultNamespace	= 'http://www.w3.org/1999/xhtml';
+
+# Permit other namespaces in addition to the w3.org default.
+# Use the prefix for the key and the namespace for the value. For
+# example:
+# $wgXhtmlNamespaces['svg'] = 'http://www.w3.org/2000/svg';
+# Normally we wouldn't have to define this in the root <html>
+# element, but IE needs it there in some circumstances.
+$wgXhtmlNamespaces		= array();
+
+/** Enable to allow rewriting dates in page text.
+ * DOES NOT FORMAT CORRECTLY FOR MOST LANGUAGES */
+$wgUseDynamicDates  = false;
+/** Enable dates like 'May 12' instead of '12 May', this only takes effect if
+ * the interface is set to English
+ */
+$wgAmericanDates    = false;
+/**
+ * For Hindi and Arabic use local numerals instead of Western style (0-9)
+ * numerals in interface.
+ */
+$wgTranslateNumerals = true;
+
+/**
+ * Translation using MediaWiki: namespace.
+ * This will increase load times by 25-60% unless memcached is installed.
+ * Interface messages will be loaded from the database.
+ */
+$wgUseDatabaseMessages = true;
+
+/**
+ * Expiry time for the message cache key
+ */
+$wgMsgCacheExpiry	= 86400;
+
+/**
+ * Maximum entry size in the message cache, in bytes
+ */
+$wgMaxMsgCacheEntrySize = 10000;
+
+# Whether to enable language variant conversion.
+$wgDisableLangConversion = false;
+
+# Default variant code, if false, the default will be the language code
+$wgDefaultLanguageVariant = false;
+
+/**
+ * Show a bar of language selection links in the user login and user
+ * registration forms; edit the "loginlanguagelinks" message to
+ * customise these
+ */
+$wgLoginLanguageSelector = false;
+
+# Whether to use zhdaemon to perform Chinese text processing
+# zhdaemon is under developement, so normally you don't want to
+# use it unless for testing
+$wgUseZhdaemon = false;
+$wgZhdaemonHost="localhost";
+$wgZhdaemonPort=2004;
+
+/** Normally you can ignore this and it will be something
+    like $wgMetaNamespace . "_talk". In some languages, you
+    may want to set this manually for grammatical reasons.
+    It is currently only respected by those languages
+    where it might be relevant and where no automatic
+    grammar converter exists.
+*/
+$wgMetaNamespaceTalk = false;
+
+# Miscellaneous configuration settings
+#
+
+$wgLocalInterwiki   = 'w';
+$wgInterwikiExpiry = 10800; # Expiry time for cache of interwiki table
+
+/** Interwiki caching settings.
+	$wgInterwikiCache specifies path to constant database file
+		This cdb database is generated by dumpInterwiki from maintenance
+		and has such key formats:
+			dbname:key - a simple key (e.g. enwiki:meta)
+			_sitename:key - site-scope key (e.g. wiktionary:meta)
+			__global:key - global-scope key (e.g. __global:meta)
+			__sites:dbname - site mapping (e.g. __sites:enwiki)
+		Sites mapping just specifies site name, other keys provide
+			"local url" data layout.
+	$wgInterwikiScopes specify number of domains to check for messages:
+		1 - Just wiki(db)-level
+		2 - wiki and global levels
+		3 - site levels
+	$wgInterwikiFallbackSite - if unable to resolve from cache
+*/
+$wgInterwikiCache = false;
+$wgInterwikiScopes = 3;
+$wgInterwikiFallbackSite = 'wiki';
+
+/**
+ * If local interwikis are set up which allow redirects,
+ * set this regexp to restrict URLs which will be displayed
+ * as 'redirected from' links.
+ *
+ * It might look something like this:
+ * $wgRedirectSources = '!^https?://[a-z-]+\.wikipedia\.org/!';
+ *
+ * Leave at false to avoid displaying any incoming redirect markers.
+ * This does not affect intra-wiki redirects, which don't change
+ * the URL.
+ */
+$wgRedirectSources = false;
+
+
+$wgShowIPinHeader	= true; # For non-logged in users
+$wgMaxNameChars		= 255;  # Maximum number of bytes in username
+$wgMaxArticleSize	= 2048; # Maximum article size in kilobytes
+
+$wgExtraSubtitle	= '';
+$wgSiteSupportPage	= ''; # A page where you users can receive donations
+
+/***
+ * If this lock file exists, the wiki will be forced into read-only mode.
+ * Its contents will be shown to users as part of the read-only warning
+ * message.
+ */
+$wgReadOnlyFile         = false; /// defaults to "{$wgUploadDirectory}/lock_yBgMBwiR";
+
+/**
+ * The debug log file should be not be publicly accessible if it is used, as it
+ * may contain private data. */
+$wgDebugLogFile         = '';
+
+/**#@+
+ * @global bool
+ */
+$wgDebugRedirects		= false;
+$wgDebugRawPage         = false; # Avoid overlapping debug entries by leaving out CSS
+
+$wgDebugComments        = false;
+$wgReadOnly             = null;
+$wgLogQueries           = false;
+
+/**
+ * Write SQL queries to the debug log
+ */
+$wgDebugDumpSql         = false;
+
+/**
+ * Set to an array of log group keys to filenames.
+ * If set, wfDebugLog() output for that group will go to that file instead
+ * of the regular $wgDebugLogFile. Useful for enabling selective logging
+ * in production.
+ */
+$wgDebugLogGroups       = array();
+
+/**
+ * Whether to show "we're sorry, but there has been a database error" pages.
+ * Displaying errors aids in debugging, but may display information useful
+ * to an attacker.
+ */
+$wgShowSQLErrors        = false;
+
+/**
+ * If true, some error messages will be colorized when running scripts on the
+ * command line; this can aid picking important things out when debugging.
+ * Ignored when running on Windows or when output is redirected to a file.
+ */
+$wgColorErrors          = true;
+
+/**
+ * If set to true, uncaught exceptions will print a complete stack trace
+ * to output. This should only be used for debugging, as it may reveal
+ * private information in function parameters due to PHP's backtrace
+ * formatting.
+ */
+$wgShowExceptionDetails = false;
+
+/**
+ * disable experimental dmoz-like category browsing. Output things like:
+ * Encyclopedia > Music > Style of Music > Jazz
+ */
+$wgUseCategoryBrowser   = false;
+
+/**
+ * Keep parsed pages in a cache (objectcache table, turck, or memcached)
+ * to speed up output of the same page viewed by another user with the
+ * same options.
+ *
+ * This can provide a significant speedup for medium to large pages,
+ * so you probably want to keep it on.
+ */
+$wgEnableParserCache = true;
+
+/**
+ * If on, the sidebar navigation links are cached for users with the
+ * current language set. This can save a touch of load on a busy site
+ * by shaving off extra message lookups.
+ *
+ * However it is also fragile: changing the site configuration, or
+ * having a variable $wgArticlePath, can produce broken links that
+ * don't update as expected.
+ */
+$wgEnableSidebarCache = false;
+
+/**
+ * Under which condition should a page in the main namespace be counted
+ * as a valid article? If $wgUseCommaCount is set to true, it will be
+ * counted if it contains at least one comma. If it is set to false
+ * (default), it will only be counted if it contains at least one [[wiki
+ * link]]. See http://meta.wikimedia.org/wiki/Help:Article_count
+ *
+ * Retroactively changing this variable will not affect
+ * the existing count (cf. maintenance/recount.sql).
+*/
+$wgUseCommaCount = false;
+
+/**#@-*/
+
+/**
+ * wgHitcounterUpdateFreq sets how often page counters should be updated, higher
+ * values are easier on the database. A value of 1 causes the counters to be
+ * updated on every hit, any higher value n cause them to update *on average*
+ * every n hits. Should be set to either 1 or something largish, eg 1000, for
+ * maximum efficiency.
+*/
+$wgHitcounterUpdateFreq = 1;
+
+# Basic user rights and block settings
+$wgSysopUserBans        = true; # Allow sysops to ban logged-in users
+$wgSysopRangeBans		= true; # Allow sysops to ban IP ranges
+$wgAutoblockExpiry		= 86400; # Number of seconds before autoblock entries expire
+$wgBlockAllowsUTEdit    = false; # Blocks allow users to edit their own user talk page
+
+# Pages anonymous user may see as an array, e.g.:
+# array ( "Main Page", "Special:Userlogin", "Wikipedia:Help");
+# NOTE: This will only work if $wgGroupPermissions['*']['read']
+# is false -- see below. Otherwise, ALL pages are accessible,
+# regardless of this setting.
+# Also note that this will only protect _pages in the wiki_.
+# Uploaded files will remain readable. Make your upload
+# directory name unguessable, or use .htaccess to protect it.
+$wgWhitelistRead = false;
+
+/** 
+ * Should editors be required to have a validated e-mail
+ * address before being allowed to edit?
+ */
+$wgEmailConfirmToEdit=false;
+
+/**
+ * Permission keys given to users in each group.
+ * All users are implicitly in the '*' group including anonymous visitors;
+ * logged-in users are all implicitly in the 'user' group. These will be
+ * combined with the permissions of all groups that a given user is listed
+ * in in the user_groups table.
+ *
+ * Functionality to make pages inaccessible has not been extensively tested
+ * for security. Use at your own risk!
+ *
+ * This replaces wgWhitelistAccount and wgWhitelistEdit
+ */
+$wgGroupPermissions = array();
+
+// Implicit group for all visitors
+$wgGroupPermissions['*'    ]['createaccount']   = true;
+$wgGroupPermissions['*'    ]['read']            = true;
+$wgGroupPermissions['*'    ]['edit']            = true;
+$wgGroupPermissions['*'    ]['createpage']      = true;
+$wgGroupPermissions['*'    ]['createtalk']      = true;
+
+// Implicit group for all logged-in accounts
+$wgGroupPermissions['user' ]['move']            = true;
+$wgGroupPermissions['user' ]['read']            = true;
+$wgGroupPermissions['user' ]['edit']            = true;
+$wgGroupPermissions['user' ]['createpage']      = true;
+$wgGroupPermissions['user' ]['createtalk']      = true;
+$wgGroupPermissions['user' ]['upload']          = true;
+$wgGroupPermissions['user' ]['reupload']        = true;
+$wgGroupPermissions['user' ]['reupload-shared'] = true;
+$wgGroupPermissions['user' ]['minoredit']       = true;
+$wgGroupPermissions['user' ]['purge']           = true; // can use ?action=purge without clicking "ok"
+
+// Implicit group for accounts that pass $wgAutoConfirmAge
+$wgGroupPermissions['autoconfirmed']['autoconfirmed'] = true;
+
+// Implicit group for accounts with confirmed email addresses
+// This has little use when email address confirmation is off
+$wgGroupPermissions['emailconfirmed']['emailconfirmed'] = true;
+
+// Users with bot privilege can have their edits hidden
+// from various log pages by default
+$wgGroupPermissions['bot'  ]['bot']             = true;
+$wgGroupPermissions['bot'  ]['autoconfirmed']   = true;
+$wgGroupPermissions['bot'  ]['nominornewtalk']  = true;
+$wgGroupPermissions['bot'  ]['autopatrol']      = true;
+
+// Most extra permission abilities go to this group
+$wgGroupPermissions['sysop']['block']           = true;
+$wgGroupPermissions['sysop']['createaccount']   = true;
+$wgGroupPermissions['sysop']['delete']          = true;
+$wgGroupPermissions['sysop']['deletedhistory'] 	= true; // can view deleted history entries, but not see or restore the text
+$wgGroupPermissions['sysop']['editinterface']   = true;
+$wgGroupPermissions['sysop']['import']          = true;
+$wgGroupPermissions['sysop']['importupload']    = true;
+$wgGroupPermissions['sysop']['move']            = true;
+$wgGroupPermissions['sysop']['patrol']          = true;
+$wgGroupPermissions['sysop']['autopatrol']      = true;
+$wgGroupPermissions['sysop']['protect']         = true;
+$wgGroupPermissions['sysop']['proxyunbannable'] = true;
+$wgGroupPermissions['sysop']['rollback']        = true;
+$wgGroupPermissions['sysop']['trackback']       = true;
+$wgGroupPermissions['sysop']['upload']          = true;
+$wgGroupPermissions['sysop']['reupload']        = true;
+$wgGroupPermissions['sysop']['reupload-shared'] = true;
+$wgGroupPermissions['sysop']['unwatchedpages']  = true;
+$wgGroupPermissions['sysop']['autoconfirmed']   = true;
+$wgGroupPermissions['sysop']['upload_by_url']   = true;
+$wgGroupPermissions['sysop']['ipblock-exempt']	= true;
+
+// Permission to change users' group assignments
+$wgGroupPermissions['bureaucrat']['userrights'] = true;
+
+// Experimental permissions, not ready for production use
+//$wgGroupPermissions['sysop']['deleterevision'] = true;
+//$wgGroupPermissions['bureaucrat']['hiderevision'] = true;
+
+/**
+ * The developer group is deprecated, but can be activated if need be
+ * to use the 'lockdb' and 'unlockdb' special pages. Those require
+ * that a lock file be defined and creatable/removable by the web
+ * server.
+ */
+# $wgGroupPermissions['developer']['siteadmin'] = true;
+
+/**
+ * Set of available actions that can be restricted via action=protect
+ * You probably shouldn't change this.
+ * Translated trough restriction-* messages.
+ */
+$wgRestrictionTypes = array( 'edit', 'move' );
+
+/**
+ * Set of permission keys that can be selected via action=protect.
+ * 'autoconfirm' allows all registerd users if $wgAutoConfirmAge is 0.
+ */
+$wgRestrictionLevels = array( '', 'autoconfirmed', 'sysop' );
+
+/**
+ * Set the minimum permissions required to edit pages in each
+ * namespace.  If you list more than one permission, a user must
+ * have all of them to edit pages in that namespace.
+ */
+$wgNamespaceProtection = array();
+$wgNamespaceProtection[ NS_MEDIAWIKI ] = array( 'editinterface' );
+
+/**
+* Pages in namespaces in this array can not be used as templates.
+* Elements must be numeric namespace ids.
+* Among other things, this may be useful to enforce read-restrictions
+* which may otherwise be bypassed by using the template machanism.
+*/
+$wgNonincludableNamespaces = array();
+
+/**
+ * Number of seconds an account is required to age before
+ * it's given the implicit 'autoconfirm' group membership.
+ * This can be used to limit privileges of new accounts.
+ *
+ * Accounts created by earlier versions of the software
+ * may not have a recorded creation date, and will always
+ * be considered to pass the age test.
+ *
+ * When left at 0, all registered accounts will pass.
+ */
+$wgAutoConfirmAge = 0;
+//$wgAutoConfirmAge = 600;     // ten minutes
+//$wgAutoConfirmAge = 3600*24; // one day
+
+# Number of edits an account requires before it is autoconfirmed
+# Passing both this AND the time requirement is needed
+$wgAutoConfirmCount = 0;
+//$wgAutoConfirmCount = 50;
+
+
+
+# Proxy scanner settings
+#
+
+/**
+ * If you enable this, every editor's IP address will be scanned for open HTTP
+ * proxies.
+ *
+ * Don't enable this. Many sysops will report "hostile TCP port scans" to your
+ * ISP and ask for your server to be shut down.
+ *
+ * You have been warned.
+ */
+$wgBlockOpenProxies = false;
+/** Port we want to scan for a proxy */
+$wgProxyPorts = array( 80, 81, 1080, 3128, 6588, 8000, 8080, 8888, 65506 );
+/** Script used to scan */
+$wgProxyScriptPath = "$IP/includes/proxy_check.php";
+/** */
+$wgProxyMemcExpiry = 86400;
+/** This should always be customised in LocalSettings.php */
+$wgSecretKey = false;
+/** big list of banned IP addresses, in the keys not the values */
+$wgProxyList = array();
+/** deprecated */
+$wgProxyKey = false;
+
+/** Number of accounts each IP address may create, 0 to disable.
+ * Requires memcached */
+$wgAccountCreationThrottle = 0;
+
+# Client-side caching:
+
+/** Allow client-side caching of pages */
+$wgCachePages       = true;
+
+/**
+ * Set this to current time to invalidate all prior cached pages. Affects both
+ * client- and server-side caching.
+ * You can get the current date on your server by using the command:
+ *   date +%Y%m%d%H%M%S
+ */
+$wgCacheEpoch = '20030516000000';
+
+/**
+ * Bump this number when changing the global style sheets and JavaScript.
+ * It should be appended in the query string of static CSS and JS includes,
+ * to ensure that client-side caches don't keep obsolete copies of global
+ * styles.
+ */
+$wgStyleVersion = '63';
+
+
+# Server-side caching:
+
+/**
+ * This will cache static pages for non-logged-in users to reduce
+ * database traffic on public sites.
+ * Must set $wgShowIPinHeader = false
+ */
+$wgUseFileCache = false;
+
+/** Directory where the cached page will be saved */
+$wgFileCacheDirectory = false; /// defaults to "{$wgUploadDirectory}/cache";
+
+/**
+ * When using the file cache, we can store the cached HTML gzipped to save disk
+ * space. Pages will then also be served compressed to clients that support it.
+ * THIS IS NOT COMPATIBLE with ob_gzhandler which is now enabled if supported in
+ * the default LocalSettings.php! If you enable this, remove that setting first.
+ *
+ * Requires zlib support enabled in PHP.
+ */
+$wgUseGzip = false;
+
+/** Whether MediaWiki should send an ETag header */
+$wgUseETag = false;
+
+# Email notification settings
+#
+
+/** For email notification on page changes */
+$wgPasswordSender = $wgEmergencyContact;
+
+# true: from page editor if s/he opted-in
+# false: Enotif mails appear to come from $wgEmergencyContact
+$wgEnotifFromEditor	= false;
+
+// TODO move UPO to preferences probably ?
+# If set to true, users get a corresponding option in their preferences and can choose to enable or disable at their discretion
+# If set to false, the corresponding input form on the user preference page is suppressed
+# It call this to be a "user-preferences-option (UPO)"
+$wgEmailAuthentication				= true; # UPO (if this is set to false, texts referring to authentication are suppressed)
+$wgEnotifWatchlist		= false; # UPO
+$wgEnotifUserTalk		= false;	# UPO
+$wgEnotifRevealEditorAddress	= false;	# UPO; reply-to address may be filled with page editor's address (if user allowed this in the preferences)
+$wgEnotifMinorEdits		= true;	# UPO; false: "minor edits" on pages do not trigger notification mails.
+#							# Attention: _every_ change on a user_talk page trigger a notification mail (if the user is not yet notified)
+
+/** 
+ * Array of usernames who will be sent a notification email for every change which occurs on a wiki
+ */
+$wgUsersNotifedOnAllChanges = array();
+
+/** Show watching users in recent changes, watchlist and page history views */
+$wgRCShowWatchingUsers 				= false; # UPO
+/** Show watching users in Page views */
+$wgPageShowWatchingUsers 			= false;
+/** Show the amount of changed characters in recent changes */
+$wgRCShowChangedSize				= true;
+
+/**
+ * If the difference between the character counts of the text
+ * before and after the edit is below that value, the value will be 
+ * highlighted on the RC page.
+ */
+$wgRCChangedSizeThreshold			= -500;
+
+/**
+ * Show "Updated (since my last visit)" marker in RC view, watchlist and history
+ * view for watched pages with new changes */
+$wgShowUpdatedMarker 				= true;
+
+$wgCookieExpiration = 2592000;
+
+/** Clock skew or the one-second resolution of time() can occasionally cause cache
+ * problems when the user requests two pages within a short period of time. This
+ * variable adds a given number of seconds to vulnerable timestamps, thereby giving
+ * a grace period.
+ */
+$wgClockSkewFudge = 5;
+
+# Squid-related settings
+#
+
+/** Enable/disable Squid */
+$wgUseSquid = false;
+
+/** If you run Squid3 with ESI support, enable this (default:false): */
+$wgUseESI = false;
+
+/** Internal server name as known to Squid, if different */
+# $wgInternalServer = 'http://yourinternal.tld:8000';
+$wgInternalServer = $wgServer;
+
+/**
+ * Cache timeout for the squid, will be sent as s-maxage (without ESI) or
+ * Surrogate-Control (with ESI). Without ESI, you should strip out s-maxage in
+ * the Squid config. 18000 seconds = 5 hours, more cache hits with 2678400 = 31
+ * days
+ */
+$wgSquidMaxage = 18000;
+
+/**
+ * A list of proxy servers (ips if possible) to purge on changes don't specify
+ * ports here (80 is default)
+ */
+# $wgSquidServers = array('127.0.0.1');
+$wgSquidServers = array();
+$wgSquidServersNoPurge = array();
+
+/** Maximum number of titles to purge in any one client operation */
+$wgMaxSquidPurgeTitles = 400;
+
+/** HTCP multicast purging */
+$wgHTCPPort = 4827;
+$wgHTCPMulticastTTL = 1;
+# $wgHTCPMulticastAddress = "224.0.0.85";
+$wgHTCPMulticastAddress = false;
+
+# Cookie settings:
+#
+/**
+ * Set to set an explicit domain on the login cookies eg, "justthis.domain. org"
+ * or ".any.subdomain.net"
+ */
+$wgCookieDomain = '';
+$wgCookiePath = '/';
+$wgCookieSecure = ($wgProto == 'https');
+$wgDisableCookieCheck = false;
+
+/** Override to customise the session name */
+$wgSessionName = false;
+
+/**  Whether to allow inline image pointing to other websites */
+$wgAllowExternalImages = false;
+
+/** If the above is false, you can specify an exception here. Image URLs
+  * that start with this string are then rendered, while all others are not.
+  * You can use this to set up a trusted, simple repository of images.
+  *
+  * Example:
+  * $wgAllowExternalImagesFrom = 'http://127.0.0.1/';
+  */
+$wgAllowExternalImagesFrom = '';
+
+/** Disable database-intensive features */
+$wgMiserMode = false;
+/** Disable all query pages if miser mode is on, not just some */
+$wgDisableQueryPages = false;
+/** Number of rows to cache in 'querycache' table when miser mode is on */
+$wgQueryCacheLimit = 1000;
+/** Number of links to a page required before it is deemed "wanted" */
+$wgWantedPagesThreshold = 1;
+/** Enable slow parser functions */
+$wgAllowSlowParserFunctions = false;
+
+/**
+ * To use inline TeX, you need to compile 'texvc' (in the 'math' subdirectory of
+ * the MediaWiki package and have latex, dvips, gs (ghostscript), andconvert
+ * (ImageMagick) installed and available in the PATH.
+ * Please see math/README for more information.
+ */
+$wgUseTeX = false;
+/** Location of the texvc binary */
+$wgTexvc = './math/texvc';
+
+#
+# Profiling / debugging
+#
+# You have to create a 'profiling' table in your database before using
+# profiling see maintenance/archives/patch-profiling.sql .
+#
+# To enable profiling, edit StartProfiler.php
+
+/** Only record profiling info for pages that took longer than this */
+$wgProfileLimit = 0.0;
+/** Don't put non-profiling info into log file */
+$wgProfileOnly = false;
+/** Log sums from profiling into "profiling" table in db. */
+$wgProfileToDatabase = false;
+/** If true, print a raw call tree instead of per-function report */
+$wgProfileCallTree = false;
+/** Should application server host be put into profiling table */
+$wgProfilePerHost = false;
+
+/** Settings for UDP profiler */
+$wgUDPProfilerHost = '127.0.0.1';
+$wgUDPProfilerPort = '3811';
+
+/** Detects non-matching wfProfileIn/wfProfileOut calls */
+$wgDebugProfiling = false;
+/** Output debug message on every wfProfileIn/wfProfileOut */
+$wgDebugFunctionEntry = 0;
+/** Lots of debugging output from SquidUpdate.php */
+$wgDebugSquid = false;
+
+$wgDisableCounters = false;
+$wgDisableTextSearch = false;
+$wgDisableSearchContext = false;
+/**
+ * If you've disabled search semi-permanently, this also disables updates to the
+ * table. If you ever re-enable, be sure to rebuild the search table.
+ */
+$wgDisableSearchUpdate = false;
+/** Uploads have to be specially set up to be secure */
+$wgEnableUploads = false;
+/**
+ * Show EXIF data, on by default if available.
+ * Requires PHP's EXIF extension: http://www.php.net/manual/en/ref.exif.php
+ */
+$wgShowEXIF = function_exists( 'exif_read_data' );
+
+/**
+ * Set to true to enable the upload _link_ while local uploads are disabled.
+ * Assumes that the special page link will be bounced to another server where
+ * uploads do work.
+ */
+$wgRemoteUploads = false;
+$wgDisableAnonTalk = false;
+/**
+ * Do DELETE/INSERT for link updates instead of incremental
+ */
+$wgUseDumbLinkUpdate = false;
+
+/**
+ * Anti-lock flags - bitfield
+ *   ALF_PRELOAD_LINKS
+ *       Preload links during link update for save
+ *   ALF_PRELOAD_EXISTENCE
+ *       Preload cur_id during replaceLinkHolders
+ *   ALF_NO_LINK_LOCK
+ *       Don't use locking reads when updating the link table. This is
+ *       necessary for wikis with a high edit rate for performance
+ *       reasons, but may cause link table inconsistency
+ *   ALF_NO_BLOCK_LOCK
+ *       As for ALF_LINK_LOCK, this flag is a necessity for high-traffic
+ *       wikis.
+ */
+$wgAntiLockFlags = 0;
+
+/**
+ * Path to the GNU diff3 utility. If the file doesn't exist, edit conflicts will
+ * fall back to the old behaviour (no merging).
+ */
+$wgDiff3 = '/usr/bin/diff3';
+
+/**
+ * We can also compress text in the old revisions table. If this is set on, old
+ * revisions will be compressed on page save if zlib support is available. Any
+ * compressed revisions will be decompressed on load regardless of this setting
+ * *but will not be readable at all* if zlib support is not available.
+ */
+$wgCompressRevisions = false;
+
+/**
+ * This is the list of preferred extensions for uploading files. Uploading files
+ * with extensions not in this list will trigger a warning.
+ */
+$wgFileExtensions = array( 'png', 'gif', 'jpg', 'jpeg' );
+
+/** Files with these extensions will never be allowed as uploads. */
+$wgFileBlacklist = array(
+	# HTML may contain cookie-stealing JavaScript and web bugs
+	'html', 'htm', 'js', 'jsb',
+	# PHP scripts may execute arbitrary code on the server
+	'php', 'phtml', 'php3', 'php4', 'php5', 'phps',
+	# Other types that may be interpreted by some servers
+	'shtml', 'jhtml', 'pl', 'py', 'cgi',
+	# May contain harmful executables for Windows victims
+	'exe', 'scr', 'dll', 'msi', 'vbs', 'bat', 'com', 'pif', 'cmd', 'vxd', 'cpl' );
+
+/** Files with these mime types will never be allowed as uploads
+ * if $wgVerifyMimeType is enabled.
+ */
+$wgMimeTypeBlacklist= array(
+	# HTML may contain cookie-stealing JavaScript and web bugs
+	'text/html', 'text/javascript', 'text/x-javascript',  'application/x-shellscript',
+	# PHP scripts may execute arbitrary code on the server
+	'application/x-php', 'text/x-php',
+	# Other types that may be interpreted by some servers
+	'text/x-python', 'text/x-perl', 'text/x-bash', 'text/x-sh', 'text/x-csh',
+	# Windows metafile, client-side vulnerability on some systems
+	'application/x-msmetafile'
+);
+
+/** This is a flag to determine whether or not to check file extensions on upload. */
+$wgCheckFileExtensions = true;
+
+/**
+ * If this is turned off, users may override the warning for files not covered
+ * by $wgFileExtensions.
+ */
+$wgStrictFileExtensions = true;
+
+/** Warn if uploaded files are larger than this (in bytes)*/
+$wgUploadSizeWarning = 150 * 1024;
+
+/** For compatibility with old installations set to false */
+$wgPasswordSalt = true;
+
+/** Which namespaces should support subpages?
+ * See Language.php for a list of namespaces.
+ */
+$wgNamespacesWithSubpages = array(
+	NS_TALK           => true,
+	NS_USER           => true,
+	NS_USER_TALK      => true,
+	NS_PROJECT_TALK   => true,
+	NS_IMAGE_TALK     => true,
+	NS_MEDIAWIKI_TALK => true,
+	NS_TEMPLATE_TALK  => true,
+	NS_HELP_TALK      => true,
+	NS_CATEGORY_TALK  => true
+);
+
+$wgNamespacesToBeSearchedDefault = array(
+	NS_MAIN           => true,
+);
+
+/** If set, a bold ugly notice will show up at the top of every page. */
+$wgSiteNotice = '';
+
+
+#
+# Images settings
+#
+
+/** 
+ * Plugins for media file type handling.
+ * Each entry in the array maps a MIME type to a class name
+ */
+$wgMediaHandlers = array(
+	'image/jpeg' => 'BitmapHandler',
+	'image/png' => 'BitmapHandler',
+	'image/gif' => 'BitmapHandler',
+	'image/x-ms-bmp' => 'BmpHandler',
+	'image/svg+xml' => 'SvgHandler',
+	'image/vnd.djvu' => 'DjVuHandler',
+);
+
+
+/**
+ * Resizing can be done using PHP's internal image libraries or using
+ * ImageMagick or another third-party converter, e.g. GraphicMagick.
+ * These support more file formats than PHP, which only supports PNG,
+ * GIF, JPG, XBM and WBMP.
+ *
+ * Use Image Magick instead of PHP builtin functions.
+ */
+$wgUseImageMagick		= false;
+/** The convert command shipped with ImageMagick */
+$wgImageMagickConvertCommand    = '/usr/bin/convert';
+
+/** Sharpening parameter to ImageMagick */
+$wgSharpenParameter = '0x0.4';
+
+/** Reduction in linear dimensions below which sharpening will be enabled */
+$wgSharpenReductionThreshold = 0.85;
+
+/**
+ * Use another resizing converter, e.g. GraphicMagick
+ * %s will be replaced with the source path, %d with the destination
+ * %w and %h will be replaced with the width and height
+ *
+ * An example is provided for GraphicMagick
+ * Leave as false to skip this
+ */
+#$wgCustomConvertCommand = "gm convert %s -resize %wx%h %d"
+$wgCustomConvertCommand = false;
+
+# Scalable Vector Graphics (SVG) may be uploaded as images.
+# Since SVG support is not yet standard in browsers, it is
+# necessary to rasterize SVGs to PNG as a fallback format.
+#
+# An external program is required to perform this conversion:
+$wgSVGConverters = array(
+	'ImageMagick' => '$path/convert -background white -geometry $width $input PNG:$output',
+	'sodipodi' => '$path/sodipodi -z -w $width -f $input -e $output',
+	'inkscape' => '$path/inkscape -z -w $width -f $input -e $output',
+	'batik' => 'java -Djava.awt.headless=true -jar $path/batik-rasterizer.jar -w $width -d $output $input',
+	'rsvg' => '$path/rsvg -w$width -h$height $input $output',
+	);
+/** Pick one of the above */
+$wgSVGConverter = 'ImageMagick';
+/** If not in the executable PATH, specify */
+$wgSVGConverterPath = '';
+/** Don't scale a SVG larger than this */
+$wgSVGMaxSize = 1024;
+/**
+ * Don't thumbnail an image if it will use too much working memory
+ * Default is 50 MB if decompressed to RGBA form, which corresponds to
+ * 12.5 million pixels or 3500x3500
+ */
+$wgMaxImageArea = 1.25e7;
+/**
+ * If rendered thumbnail files are older than this timestamp, they
+ * will be rerendered on demand as if the file didn't already exist.
+ * Update if there is some need to force thumbs and SVG rasterizations
+ * to rerender, such as fixes to rendering bugs.
+ */
+$wgThumbnailEpoch = '20030516000000';
+
+/**
+ * If set, inline scaled images will still produce <img> tags ready for
+ * output instead of showing an error message.
+ *
+ * This may be useful if errors are transitory, especially if the site
+ * is configured to automatically render thumbnails on request.
+ *
+ * On the other hand, it may obscure error conditions from debugging.
+ * Enable the debug log or the 'thumbnail' log group to make sure errors
+ * are logged to a file for review.
+ */
+$wgIgnoreImageErrors = false;
+
+/**
+ * Allow thumbnail rendering on page view. If this is false, a valid 
+ * thumbnail URL is still output, but no file will be created at 
+ * the target location. This may save some time if you have a 
+ * thumb.php or 404 handler set up which is faster than the regular 
+ * webserver(s).  
+ */
+$wgGenerateThumbnailOnParse = true;
+
+/** Obsolete, always true, kept for compatibility with extensions */
+$wgUseImageResize		= true;
+
+
+/** Set $wgCommandLineMode if it's not set already, to avoid notices */
+if( !isset( $wgCommandLineMode ) ) {
+	$wgCommandLineMode = false;
+}
+
+/** For colorized maintenance script output, is your terminal background dark ? */
+$wgCommandLineDarkBg = false;
+
+#
+# Recent changes settings
+#
+
+/** Log IP addresses in the recentchanges table; can be accessed only by extensions (e.g. CheckUser) or a DB admin */
+$wgPutIPinRC = true;
+
+/**
+ * Recentchanges items are periodically purged; entries older than this many
+ * seconds will go.
+ * For one week : 7 * 24 * 3600
+ */
+$wgRCMaxAge = 7 * 24 * 3600;
+
+
+# Send RC updates via UDP
+$wgRC2UDPAddress = false;
+$wgRC2UDPPort = false;
+$wgRC2UDPPrefix = '';
+
+#
+# Copyright and credits settings
+#
+
+/** RDF metadata toggles */
+$wgEnableDublinCoreRdf = false;
+$wgEnableCreativeCommonsRdf = false;
+
+/** Override for copyright metadata.
+ * TODO: these options need documentation
+ */
+$wgRightsPage = NULL;
+$wgRightsUrl = NULL;
+$wgRightsText = NULL;
+$wgRightsIcon = NULL;
+
+/** Set this to some HTML to override the rights icon with an arbitrary logo */
+$wgCopyrightIcon = NULL;
+
+/** Set this to true if you want detailed copyright information forms on Upload. */
+$wgUseCopyrightUpload = false;
+
+/** Set this to false if you want to disable checking that detailed copyright
+ * information values are not empty. */
+$wgCheckCopyrightUpload = true;
+
+/**
+ * Set this to the number of authors that you want to be credited below an
+ * article text. Set it to zero to hide the attribution block, and a negative
+ * number (like -1) to show all authors. Note that this will require 2-3 extra
+ * database hits, which can have a not insignificant impact on performance for
+ * large wikis.
+ */
+$wgMaxCredits = 0;
+
+/** If there are more than $wgMaxCredits authors, show $wgMaxCredits of them.
+ * Otherwise, link to a separate credits page. */
+$wgShowCreditsIfMax = true;
+
+
+
+/**
+ * Set this to false to avoid forcing the first letter of links to capitals.
+ * WARNING: may break links! This makes links COMPLETELY case-sensitive. Links
+ * appearing with a capital at the beginning of a sentence will *not* go to the
+ * same place as links in the middle of a sentence using a lowercase initial.
+ */
+$wgCapitalLinks = true;
+
+/**
+ * List of interwiki prefixes for wikis we'll accept as sources for
+ * Special:Import (for sysops). Since complete page history can be imported,
+ * these should be 'trusted'.
+ *
+ * If a user has the 'import' permission but not the 'importupload' permission,
+ * they will only be able to run imports through this transwiki interface.
+ */
+$wgImportSources = array();
+
+/**
+ * Optional default target namespace for interwiki imports.
+ * Can use this to create an incoming "transwiki"-style queue.
+ * Set to numeric key, not the name.
+ *
+ * Users may override this in the Special:Import dialog.
+ */
+$wgImportTargetNamespace = null;
+
+/**
+ * If set to false, disables the full-history option on Special:Export.
+ * This is currently poorly optimized for long edit histories, so is
+ * disabled on Wikimedia's sites.
+ */
+$wgExportAllowHistory = true;
+
+/**
+ * If set nonzero, Special:Export requests for history of pages with
+ * more revisions than this will be rejected. On some big sites things
+ * could get bogged down by very very long pages.
+ */
+$wgExportMaxHistory = 0;
+
+$wgExportAllowListContributors = false ;
+
+
+/** Text matching this regular expression will be recognised as spam
+ * See http://en.wikipedia.org/wiki/Regular_expression */
+$wgSpamRegex = false;
+/** Similarly you can get a function to do the job. The function will be given
+ * the following args:
+ *   - a Title object for the article the edit is made on
+ *   - the text submitted in the textarea (wpTextbox1)
+ *   - the section number.
+ * The return should be boolean indicating whether the edit matched some evilness:
+ *  - true : block it
+ *  - false : let it through
+ *
+ * For a complete example, have a look at the SpamBlacklist extension.
+ */
+$wgFilterCallback = false;
+
+/** Go button goes straight to the edit screen if the article doesn't exist. */
+$wgGoToEdit = false;
+
+/** Allow raw, unchecked HTML in <html>...</html> sections.
+ * THIS IS VERY DANGEROUS on a publically editable site, so USE wgGroupPermissions
+ * TO RESTRICT EDITING to only those that you trust
+ */
+$wgRawHtml = false;
+
+/**
+ * $wgUseTidy: use tidy to make sure HTML output is sane.
+ * Tidy is a free tool that fixes broken HTML.
+ * See http://www.w3.org/People/Raggett/tidy/
+ * $wgTidyBin should be set to the path of the binary and
+ * $wgTidyConf to the path of the configuration file.
+ * $wgTidyOpts can include any number of parameters.
+ *
+ * $wgTidyInternal controls the use of the PECL extension to use an in-
+ *   process tidy library instead of spawning a separate program.
+ *   Normally you shouldn't need to override the setting except for
+ *   debugging. To install, use 'pear install tidy' and add a line
+ *   'extension=tidy.so' to php.ini.
+ */
+$wgUseTidy = false;
+$wgAlwaysUseTidy = false;
+$wgTidyBin = 'tidy';
+$wgTidyConf = $IP.'/includes/tidy.conf';
+$wgTidyOpts = '';
+$wgTidyInternal = function_exists( 'tidy_load_config' );
+
+/** See list of skins and their symbolic names in languages/Language.php */
+$wgDefaultSkin = 'monobook';
+
+/**
+ * Settings added to this array will override the default globals for the user
+ * preferences used by anonymous visitors and newly created accounts.
+ * For instance, to disable section editing links:
+ * $wgDefaultUserOptions ['editsection'] = 0;
+ *
+ */
+$wgDefaultUserOptions = array( 
+	'quickbar' 		=> 1,
+	'underline' 		=> 2,
+	'cols'			=> 80,
+	'rows' 			=> 25,
+	'searchlimit' 		=> 20,
+	'contextlines' 		=> 5,
+	'contextchars' 		=> 50,
+	'skin' 			=> false,
+	'math' 			=> 1,
+	'rcdays' 		=> 7,
+	'rclimit' 		=> 50,
+	'wllimit' 		=> 250,
+	'highlightbroken'	=> 1,
+	'stubthreshold' 	=> 0,
+	'previewontop' 		=> 1,
+	'editsection'		=> 1,
+	'editsectiononrightclick'=> 0,
+	'showtoc'		=> 1,
+	'showtoolbar' 		=> 1,
+	'date' 			=> 'default',
+	'imagesize' 		=> 2,
+	'thumbsize'		=> 2,
+	'rememberpassword' 	=> 0,
+	'enotifwatchlistpages' 	=> 0,
+	'enotifusertalkpages' 	=> 1,
+	'enotifminoredits' 	=> 0,
+	'enotifrevealaddr' 	=> 0,
+	'shownumberswatching' 	=> 1,
+	'fancysig' 		=> 0,
+	'externaleditor' 	=> 0,
+	'externaldiff' 		=> 0,
+	'showjumplinks'		=> 1,
+	'numberheadings'	=> 0,
+	'uselivepreview'	=> 0,
+	'watchlistdays' 	=> 3.0,
+);
+
+/** Whether or not to allow and use real name fields. Defaults to true. */
+$wgAllowRealName = true;
+
+/*****************************************************************************
+ *  Extensions 
+ */
+
+/**
+ * A list of callback functions which are called once MediaWiki is fully initialised
+ */
+$wgExtensionFunctions = array();
+
+/**
+ * Extension functions for initialisation of skins. This is called somewhat earlier 
+ * than $wgExtensionFunctions.
+ */
+$wgSkinExtensionFunctions = array();
+
+/**
+ * List of valid skin names.
+ * The key should be the name in all lower case, the value should be a display name.
+ * The default skins will be added later, by Skin::getSkinNames(). Use 
+ * Skin::getSkinNames() as an accessor if you wish to have access to the full list.
+ */
+$wgValidSkinNames = array();
+
+/**
+ * Special page list.
+ * See the top of SpecialPage.php for documentation.
+ */
+$wgSpecialPages = array(); 
+
+/**
+ * Array mapping class names to filenames, for autoloading.
+ */
+$wgAutoloadClasses = array();
+
+/**
+ * An array of extension types and inside that their names, versions, authors
+ * and urls, note that the version and url key can be omitted.
+ *
+ * <code>
+ * $wgExtensionCredits[$type][] = array(
+ * 	'name' => 'Example extension',
+ *      'version' => 1.9,
+ *	'author' => 'Foo Barstein',
+ *	'url' => 'http://wwww.example.com/Example%20Extension/',
+ * );
+ * </code>
+ *
+ * Where $type is 'specialpage', 'parserhook', or 'other'.
+ */
+$wgExtensionCredits = array();
+/*
+ * end extensions
+ ******************************************************************************/
+
+/**
+ * Allow user Javascript page?
+ * This enables a lot of neat customizations, but may
+ * increase security risk to users and server load.
+ */
+$wgAllowUserJs = false;
+
+/**
+ * Allow user Cascading Style Sheets (CSS)?
+ * This enables a lot of neat customizations, but may
+ * increase security risk to users and server load.
+ */
+$wgAllowUserCss = false;
+
+/** Use the site's Javascript page? */
+$wgUseSiteJs = true;
+
+/** Use the site's Cascading Style Sheets (CSS)? */
+$wgUseSiteCss = true;
+
+/** Filter for Special:Randompage. Part of a WHERE clause */
+$wgExtraRandompageSQL = false;
+
+/** Allow the "info" action, very inefficient at the moment */
+$wgAllowPageInfo = false;
+
+/** Maximum indent level of toc. */
+$wgMaxTocLevel = 999;
+
+/** Name of the external diff engine to use */
+$wgExternalDiffEngine = false;
+
+/** Use RC Patrolling to check for vandalism */
+$wgUseRCPatrol = true;
+
+/** Set maximum number of results to return in syndication feeds (RSS, Atom) for
+ * eg Recentchanges, Newpages. */
+$wgFeedLimit = 50;
+
+/** _Minimum_ timeout for cached Recentchanges feed, in seconds.
+ * A cached version will continue to be served out even if changes
+ * are made, until this many seconds runs out since the last render.
+ *
+ * If set to 0, feed caching is disabled. Use this for debugging only;
+ * feed generation can be pretty slow with diffs.
+ */
+$wgFeedCacheTimeout = 60;
+
+/** When generating Recentchanges RSS/Atom feed, diffs will not be generated for
+ * pages larger than this size. */
+$wgFeedDiffCutoff = 32768;
+
+
+/**
+ * Additional namespaces. If the namespaces defined in Language.php and
+ * Namespace.php are insufficient, you can create new ones here, for example,
+ * to import Help files in other languages.
+ * PLEASE  NOTE: Once you delete a namespace, the pages in that namespace will
+ * no longer be accessible. If you rename it, then you can access them through
+ * the new namespace name.
+ *
+ * Custom namespaces should start at 100 to avoid conflicting with standard
+ * namespaces, and should always follow the even/odd main/talk pattern.
+ */
+#$wgExtraNamespaces =
+#	array(100 => "Hilfe",
+#	      101 => "Hilfe_Diskussion",
+#	      102 => "Aide",
+#	      103 => "Discussion_Aide"
+#	      );
+$wgExtraNamespaces = NULL;
+
+/**
+ * Namespace aliases
+ * These are alternate names for the primary localised namespace names, which 
+ * are defined by $wgExtraNamespaces and the language file. If a page is 
+ * requested with such a prefix, the request will be redirected to the primary 
+ * name. 
+ *
+ * Set this to a map from namespace names to IDs.
+ * Example:
+ *    $wgNamespaceAliases = array( 
+ *        'Wikipedian' => NS_USER,
+ *        'Help' => 100,
+ *    );
+ */
+$wgNamespaceAliases = array();
+
+/**
+ * Limit images on image description pages to a user-selectable limit. In order
+ * to reduce disk usage, limits can only be selected from a list.
+ * The user preference is saved as an array offset in the database, by default
+ * the offset is set with $wgDefaultUserOptions['imagesize']. Make sure you
+ * change it if you alter the array (see bug 8858).
+ * This is the list of settings the user can choose from:
+ */
+$wgImageLimits = array (
+	array(320,240),
+	array(640,480),
+	array(800,600),
+	array(1024,768),
+	array(1280,1024),
+	array(10000,10000) );
+
+/**
+ * Adjust thumbnails on image pages according to a user setting. In order to
+ * reduce disk usage, the values can only be selected from a list. This is the
+ * list of settings the user can choose from:
+ */
+$wgThumbLimits = array(
+	120,
+	150,
+	180,
+	200,
+	250,
+	300
+);
+
+/**
+ *  On  category pages, show thumbnail gallery for images belonging to that
+ * category instead of listing them as articles.
+ */
+$wgCategoryMagicGallery = true;
+
+/**
+ * Paging limit for categories
+ */
+$wgCategoryPagingLimit = 200;
+
+/**
+ * Browser Blacklist for unicode non compliant browsers
+ * Contains a list of regexps : "/regexp/"  matching problematic browsers
+ */
+$wgBrowserBlackList = array(
+	/**
+	 * Netscape 2-4 detection
+	 * The minor version may contain strings such as "Gold" or "SGoldC-SGI"
+	 * Lots of non-netscape user agents have "compatible", so it's useful to check for that
+	 * with a negative assertion. The [UIN] identifier specifies the level of security 
+	 * in a Netscape/Mozilla browser, checking for it rules out a number of fakers. 
+	 * The language string is unreliable, it is missing on NS4 Mac.
+	 * 
+	 * Reference: http://www.psychedelix.com/agents/index.shtml
+	 */
+	'/^Mozilla\/2\.[^ ]+ [^(]*?\((?!compatible).*; [UIN]/',
+	'/^Mozilla\/3\.[^ ]+ [^(]*?\((?!compatible).*; [UIN]/',
+	'/^Mozilla\/4\.[^ ]+ [^(]*?\((?!compatible).*; [UIN]/',
+	
+	/**
+	 * MSIE on Mac OS 9 is teh sux0r, converts þ to <thorn>, ð to <eth>, Þ to <THORN> and Ð to <ETH>
+	 *
+	 * Known useragents:
+	 * - Mozilla/4.0 (compatible; MSIE 5.0; Mac_PowerPC)
+	 * - Mozilla/4.0 (compatible; MSIE 5.15; Mac_PowerPC)
+	 * - Mozilla/4.0 (compatible; MSIE 5.23; Mac_PowerPC)
+	 * - [...]
+	 *
+	 * @link http://en.wikipedia.org/w/index.php?title=User%3A%C6var_Arnfj%F6r%F0_Bjarmason%2Ftestme&diff=12356041&oldid=12355864
+	 * @link http://en.wikipedia.org/wiki/Template%3AOS9
+	 */
+	'/^Mozilla\/4\.0 \(compatible; MSIE \d+\.\d+; Mac_PowerPC\)/'
+);
+
+/**
+ * Fake out the timezone that the server thinks it's in. This will be used for
+ * date display and not for what's stored in the DB. Leave to null to retain
+ * your server's OS-based timezone value. This is the same as the timezone.
+ *
+ * This variable is currently used ONLY for signature formatting, not for
+ * anything else.
+ */
+# $wgLocaltimezone = 'GMT';
+# $wgLocaltimezone = 'PST8PDT';
+# $wgLocaltimezone = 'Europe/Sweden';
+# $wgLocaltimezone = 'CET';
+$wgLocaltimezone = null;
+
+/**
+ * Set an offset from UTC in minutes to use for the default timezone setting
+ * for anonymous users and new user accounts.
+ *
+ * This setting is used for most date/time displays in the software, and is
+ * overrideable in user preferences. It is *not* used for signature timestamps.
+ *
+ * You can set it to match the configured server timezone like this:
+ *   $wgLocalTZoffset = date("Z") / 60;
+ *
+ * If your server is not configured for the timezone you want, you can set
+ * this in conjunction with the signature timezone and override the TZ
+ * environment variable like so:
+ *   $wgLocaltimezone="Europe/Berlin";
+ *   putenv("TZ=$wgLocaltimezone");
+ *   $wgLocalTZoffset = date("Z") / 60;
+ *
+ * Leave at NULL to show times in universal time (UTC/GMT).
+ */
+$wgLocalTZoffset = null;
+
+
+/**
+ * When translating messages with wfMsg(), it is not always clear what should be
+ * considered UI messages and what shoud be content messages.
+ *
+ * For example, for regular wikipedia site like en, there should be only one
+ * 'mainpage', therefore when getting the link of 'mainpage', we should treate
+ * it as content of the site and call wfMsgForContent(), while for rendering the
+ * text of the link, we call wfMsg(). The code in default behaves this way.
+ * However, sites like common do offer different versions of 'mainpage' and the
+ * like for different languages. This array provides a way to override the
+ * default behavior. For example, to allow language specific mainpage and
+ * community portal, set
+ *
+ * $wgForceUIMsgAsContentMsg = array( 'mainpage', 'portal-url' );
+ */
+$wgForceUIMsgAsContentMsg = array();
+
+
+/**
+ * Authentication plugin.
+ */
+$wgAuth = null;
+
+/**
+ * Global list of hooks.
+ * Add a hook by doing:
+ *     $wgHooks['event_name'][] = $function;
+ * or:
+ *     $wgHooks['event_name'][] = array($function, $data);
+ * or:
+ *     $wgHooks['event_name'][] = array($object, 'method');
+ */
+$wgHooks = array();
+
+/**
+ * The logging system has two levels: an event type, which describes the
+ * general category and can be viewed as a named subset of all logs; and
+ * an action, which is a specific kind of event that can exist in that
+ * log type.
+ */
+$wgLogTypes = array( '',
+	'block',
+	'protect',
+	'rights',
+	'delete',
+	'upload',
+	'move',
+	'import',
+	'patrol',
+);
+
+/**
+ * Lists the message key string for each log type. The localized messages
+ * will be listed in the user interface.
+ *
+ * Extensions with custom log types may add to this array.
+ */
+$wgLogNames = array(
+	''        => 'log',
+	'block'   => 'blocklogpage',
+	'protect' => 'protectlogpage',
+	'rights'  => 'rightslog',
+	'delete'  => 'dellogpage',
+	'upload'  => 'uploadlogpage',
+	'move'    => 'movelogpage',
+	'import'  => 'importlogpage',
+	'patrol'  => 'patrol-log-page',
+);
+
+/**
+ * Lists the message key string for descriptive text to be shown at the
+ * top of each log type.
+ *
+ * Extensions with custom log types may add to this array.
+ */
+$wgLogHeaders = array(
+	''        => 'alllogstext',
+	'block'   => 'blocklogtext',
+	'protect' => 'protectlogtext',
+	'rights'  => 'rightslogtext',
+	'delete'  => 'dellogpagetext',
+	'upload'  => 'uploadlogpagetext',
+	'move'    => 'movelogpagetext',
+	'import'  => 'importlogpagetext',
+	'patrol'  => 'patrol-log-header',
+);
+
+/**
+ * Lists the message key string for formatting individual events of each
+ * type and action when listed in the logs.
+ *
+ * Extensions with custom log types may add to this array.
+ */
+$wgLogActions = array(
+	'block/block'       => 'blocklogentry',
+	'block/unblock'     => 'unblocklogentry',
+	'protect/protect'   => 'protectedarticle',
+	'protect/unprotect' => 'unprotectedarticle',
+	'rights/rights'     => 'rightslogentry',
+	'delete/delete'     => 'deletedarticle',
+	'delete/restore'    => 'undeletedarticle',
+	'delete/revision'   => 'revdelete-logentry',
+	'upload/upload'     => 'uploadedimage',
+	'upload/revert'     => 'uploadedimage',
+	'move/move'         => '1movedto2',
+	'move/move_redir'   => '1movedto2_redir',
+	'import/upload'     => 'import-logentry-upload',
+	'import/interwiki'  => 'import-logentry-interwiki',
+);
+
+/**
+ * Experimental preview feature to fetch rendered text
+ * over an XMLHttpRequest from JavaScript instead of
+ * forcing a submit and reload of the whole page.
+ * Leave disabled unless you're testing it.
+ */
+$wgLivePreview = false;
+
+/**
+ * Disable the internal MySQL-based search, to allow it to be
+ * implemented by an extension instead.
+ */
+$wgDisableInternalSearch = false;
+
+/**
+ * Set this to a URL to forward search requests to some external location.
+ * If the URL includes '$1', this will be replaced with the URL-encoded
+ * search term.
+ *
+ * For example, to forward to Google you'd have something like:
+ * $wgSearchForwardUrl = 'http://www.google.com/search?q=$1' .
+ *                       '&domains=http://example.com' .
+ *                       '&sitesearch=http://example.com' .
+ *                       '&ie=utf-8&oe=utf-8';
+ */
+$wgSearchForwardUrl = null;
+
+/**
+ * If true, external URL links in wiki text will be given the
+ * rel="nofollow" attribute as a hint to search engines that
+ * they should not be followed for ranking purposes as they
+ * are user-supplied and thus subject to spamming.
+ */
+$wgNoFollowLinks = true;
+
+/**
+ * Namespaces in which $wgNoFollowLinks doesn't apply.
+ * See Language.php for a list of namespaces.
+ */
+$wgNoFollowNsExceptions = array();
+
+/**
+ * Robot policies per namespaces.
+ * The default policy is 'index,follow', the array is made of namespace
+ * constants as defined in includes/Defines.php
+ * Example:
+ *   $wgNamespaceRobotPolicies = array( NS_TALK => 'noindex' );
+ */
+$wgNamespaceRobotPolicies = array();
+
+/**
+ * Specifies the minimal length of a user password. If set to
+ * 0, empty passwords are allowed.
+ */
+$wgMinimalPasswordLength = 0;
+
+/**
+ * Activate external editor interface for files and pages
+ * See http://meta.wikimedia.org/wiki/Help:External_editors
+ */
+$wgUseExternalEditor = true;
+
+/** Whether or not to sort special pages in Special:Specialpages */
+
+$wgSortSpecialPages = true;
+
+/**
+ * Specify the name of a skin that should not be presented in the
+ * list of available skins.
+ * Use for blacklisting a skin which you do not want to remove
+ * from the .../skins/ directory
+ */
+$wgSkipSkin = '';
+$wgSkipSkins = array(); # More of the same
+
+/**
+ * Array of disabled article actions, e.g. view, edit, dublincore, delete, etc.
+ */
+$wgDisabledActions = array();
+
+/**
+ * Disable redirects to special pages and interwiki redirects, which use a 302 and have no "redirected from" link
+ */
+$wgDisableHardRedirects = false;
+
+/**
+ * Use http.dnsbl.sorbs.net to check for open proxies
+ */
+$wgEnableSorbs = false;
+$wgSorbsUrl = 'http.dnsbl.sorbs.net.';
+
+/**
+ * Proxy whitelist, list of addresses that are assumed to be non-proxy despite what the other
+ * methods might say
+ */
+$wgProxyWhitelist = array();
+
+/**
+ * Simple rate limiter options to brake edit floods.
+ * Maximum number actions allowed in the given number of seconds;
+ * after that the violating client receives HTTP 500 error pages
+ * until the period elapses.
+ *
+ * array( 4, 60 ) for a maximum of 4 hits in 60 seconds.
+ *
+ * This option set is experimental and likely to change.
+ * Requires memcached.
+ */
+$wgRateLimits = array(
+	'edit' => array(
+		'anon'   => null, // for any and all anonymous edits (aggregate)
+		'user'   => null, // for each logged-in user
+		'newbie' => null, // for each recent account; overrides 'user'
+		'ip'     => null, // for each anon and recent account
+		'subnet' => null, // ... with final octet removed
+		),
+	'move' => array(
+		'user'   => null,
+		'newbie' => null,
+		'ip'     => null,
+		'subnet' => null,
+		),
+	'mailpassword' => array(
+		'anon' => NULL,
+		),
+	'emailuser' => array(
+		'user' => null,
+		),
+	);
+
+/**
+ * Set to a filename to log rate limiter hits.
+ */
+$wgRateLimitLog = null;
+
+/**
+ * Array of groups which should never trigger the rate limiter
+ */
+$wgRateLimitsExcludedGroups = array( 'sysop', 'bureaucrat' );
+
+/**
+ * On Special:Unusedimages, consider images "used", if they are put
+ * into a category. Default (false) is not to count those as used.
+ */
+$wgCountCategorizedImagesAsUsed = false;
+
+/**
+ * External stores allow including content
+ * from non database sources following URL links
+ *
+ * Short names of ExternalStore classes may be specified in an array here:
+ * $wgExternalStores = array("http","file","custom")...
+ *
+ * CAUTION: Access to database might lead to code execution
+ */
+$wgExternalStores = false;
+
+/**
+ * An array of external mysql servers, e.g.
+ * $wgExternalServers = array( 'cluster1' => array( 'srv28', 'srv29', 'srv30' ) );
+ */
+$wgExternalServers = array();
+
+/**
+ * The place to put new revisions, false to put them in the local text table.
+ * Part of a URL, e.g. DB://cluster1
+ *
+ * Can be an array instead of a single string, to enable data distribution. Keys 
+ * must be consecutive integers, starting at zero. Example:
+ *
+ * $wgDefaultExternalStore = array( 'DB://cluster1', 'DB://cluster2' );
+ *
+ */
+$wgDefaultExternalStore = false;
+
+/**
+ * Revision text may be cached in $wgMemc to reduce load on external storage
+ * servers and object extraction overhead for frequently-loaded revisions.
+ *
+ * Set to 0 to disable, or number of seconds before cache expiry.
+ */
+$wgRevisionCacheExpiry = 0;
+
+/**
+* list of trusted media-types and mime types.
+* Use the MEDIATYPE_xxx constants to represent media types.
+* This list is used by Image::isSafeFile
+*
+* Types not listed here will have a warning about unsafe content
+* displayed on the images description page. It would also be possible
+* to use this for further restrictions, like disabling direct
+* [[media:...]] links for non-trusted formats.
+*/
+$wgTrustedMediaFormats= array(
+	MEDIATYPE_BITMAP, //all bitmap formats
+	MEDIATYPE_AUDIO,  //all audio formats
+	MEDIATYPE_VIDEO,  //all plain video formats
+	"image/svg+xml",  //svg (only needed if inline rendering of svg is not supported)
+	"application/pdf",  //PDF files
+	#"application/x-shockwave-flash", //flash/shockwave movie
+);
+
+/**
+ * Allow special page inclusions such as {{Special:Allpages}}
+ */
+$wgAllowSpecialInclusion = true;
+
+/**
+ * Timeout for HTTP requests done via CURL
+ */
+$wgHTTPTimeout = 3;
+
+/**
+ * Proxy to use for CURL requests.
+ */
+$wgHTTPProxy = false;
+
+/**
+ * Enable interwiki transcluding.  Only when iw_trans=1.
+ */
+$wgEnableScaryTranscluding = false;
+/**
+ * Expiry time for interwiki transclusion
+ */
+$wgTranscludeCacheExpiry = 3600;
+
+/**
+ * Support blog-style "trackbacks" for articles.  See
+ * http://www.sixapart.com/pronet/docs/trackback_spec for details.
+ */
+$wgUseTrackbacks = false;
+
+/**
+ * Enable filtering of categories in Recentchanges
+ */
+$wgAllowCategorizedRecentChanges = false ;
+
+/**
+ * Number of jobs to perform per request. May be less than one in which case
+ * jobs are performed probabalistically. If this is zero, jobs will not be done
+ * during ordinary apache requests. In this case, maintenance/runJobs.php should
+ * be run periodically.
+ */
+$wgJobRunRate = 1;
+
+/**
+ * Number of rows to update per job
+ */
+$wgUpdateRowsPerJob = 500;
+
+/**
+ * Number of rows to update per query
+ */
+$wgUpdateRowsPerQuery = 10;
+
+/**
+ * Enable AJAX framework
+ */
+$wgUseAjax = false;
+
+/**
+ * Enable auto suggestion for the search bar 
+ * Requires $wgUseAjax to be true too.
+ * Causes wfSajaxSearch to be added to $wgAjaxExportList
+ */
+$wgAjaxSearch = false;
+
+/**
+ * List of Ajax-callable functions. 
+ * Extensions acting as Ajax callbacks must register here
+ */
+$wgAjaxExportList = array( );
+
+/**
+ * Enable watching/unwatching pages using AJAX.
+ * Requires $wgUseAjax to be true too.
+ * Causes wfAjaxWatch to be added to $wgAjaxExportList
+ */
+$wgAjaxWatch = false;
+
+/**
+ * Allow DISPLAYTITLE to change title display
+ */
+$wgAllowDisplayTitle = false ;
+
+/**
+ * Array of usernames which may not be registered or logged in from
+ * Maintenance scripts can still use these
+ */
+$wgReservedUsernames = array(
+	'MediaWiki default', // Default 'Main Page' and MediaWiki: message pages
+	'Conversion script', // Used for the old Wikipedia software upgrade
+	'Maintenance script', // Maintenance scripts which perform editing, image import script
+	'Template namespace initialisation script', // Used in 1.2->1.3 upgrade
+);
+
+/**
+ * MediaWiki will reject HTMLesque tags in uploaded files due to idiotic browsers which can't
+ * perform basic stuff like MIME detection and which are vulnerable to further idiots uploading
+ * crap files as images. When this directive is on, <title> will be allowed in files with
+ * an "image/svg+xml" MIME type. You should leave this disabled if your web server is misconfigured
+ * and doesn't send appropriate MIME types for SVG images.
+ */
+$wgAllowTitlesInSVG = false;
+
+/**
+ * Array of namespaces which can be deemed to contain valid "content", as far
+ * as the site statistics are concerned. Useful if additional namespaces also
+ * contain "content" which should be considered when generating a count of the
+ * number of articles in the wiki.
+ */
+$wgContentNamespaces = array( NS_MAIN );
+
+/**
+ * Maximum amount of virtual memory available to shell processes under linux, in KB. 
+ */
+$wgMaxShellMemory = 102400;
+
+/**
+ * Maximum file size created by shell processes under linux, in KB
+ * ImageMagick convert for example can be fairly hungry for scratch space
+ */
+$wgMaxShellFileSize = 102400;
+
+/**
+ * DJVU settings
+ * Path of the djvudump executable
+ * Enable this and $wgDjvuRenderer to enable djvu rendering
+ */
+# $wgDjvuDump = 'djvudump';
+$wgDjvuDump = null;
+
+/**
+ * Path of the ddjvu DJVU renderer
+ * Enable this and $wgDjvuDump to enable djvu rendering
+ */
+# $wgDjvuRenderer = 'ddjvu';
+$wgDjvuRenderer = null;
+
+/**
+ * Path of the djvutoxml executable
+ * This works like djvudump except much, much slower as of version 3.5. 
+ *
+ * For now I recommend you use djvudump instead. The djvuxml output is
+ * probably more stable, so we'll switch back to it as soon as they fix
+ * the efficiency problem.
+ * http://sourceforge.net/tracker/index.php?func=detail&aid=1704049&group_id=32953&atid=406583
+ */
+# $wgDjvuToXML = 'djvutoxml';
+$wgDjvuToXML = null;
+
+
+/**
+ * Shell command for the DJVU post processor
+ * Default: pnmtopng, since ddjvu generates ppm output
+ * Set this to false to output the ppm file directly.
+ */
+$wgDjvuPostProcessor = 'pnmtojpeg';
+/**
+ * File extension for the DJVU post processor output
+ */
+$wgDjvuOutputExtension = 'jpg';
+
+/**
+* Enable direct access to the data API
+* through api.php
+*/
+$wgEnableAPI = true;
+$wgEnableWriteAPI = false;
+
+/**
+ * Parser test suite files to be run by parserTests.php when no specific
+ * filename is passed to it.
+ *
+ * Extensions may add their own tests to this array, or site-local tests
+ * may be added via LocalSettings.php
+ *
+ * Use full paths.
+ */
+$wgParserTestFiles = array(
+	"$IP/maintenance/parserTests.txt",
+);
+
+/**
+ * Break out of framesets. This can be used to prevent external sites from
+ * framing your site with ads.  
+ */
+$wgBreakFrames = false;
+
+/**
+ * Set this to an array of special page names to prevent 
+ * maintenance/updateSpecialPages.php from updating those pages.
+ */
+$wgDisableQueryPageUpdate = false;
+
+/**
+ * Set this to false to disable cascading protection
+ */
+$wgEnableCascadingProtection = true;
+
+/**
+ * Disable output compression (enabled by default if zlib is available)
+ */
+$wgDisableOutputCompression = false;
+
+?>
Index: /MediaWiki/branches/1.11/includes/Defines.php
===================================================================
--- /MediaWiki/branches/1.11/includes/Defines.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/Defines.php	(revision 1280)
@@ -0,0 +1,209 @@
+<?php
+/**
+ * A few constants that might be needed during LocalSettings.php
+ */
+
+/**
+ * Version constants for the benefit of extensions
+ */
+define( 'MW_SPECIALPAGE_VERSION', 2 );
+
+/**#@+
+ * Database related constants
+ */
+define( 'DBO_DEBUG', 1 );
+define( 'DBO_NOBUFFER', 2 );
+define( 'DBO_IGNORE', 4 );
+define( 'DBO_TRX', 8 );
+define( 'DBO_DEFAULT', 16 );
+define( 'DBO_PERSISTENT', 32 );
+/**#@-*/
+
+# Valid database indexes
+# Operation-based indexes
+define( 'DB_SLAVE', -1 );     # Read from the slave (or only server)
+define( 'DB_MASTER', -2 );    # Write to master (or only server)
+define( 'DB_LAST', -3 );     # Whatever database was used last
+
+# Obsolete aliases
+define( 'DB_READ', -1 );
+define( 'DB_WRITE', -2 );
+
+
+/**#@+
+ * Virtual namespaces; don't appear in the page database
+ */
+define('NS_MEDIA', -2);
+define('NS_SPECIAL', -1);
+/**#@-*/
+
+/**#@+
+ * Real namespaces
+ *
+ * Number 100 and beyond are reserved for custom namespaces;
+ * DO NOT assign standard namespaces at 100 or beyond.
+ * DO NOT Change integer values as they are most probably hardcoded everywhere
+ * see bug #696 which talked about that.
+ */
+define('NS_MAIN', 0);
+define('NS_TALK', 1);
+define('NS_USER', 2);
+define('NS_USER_TALK', 3);
+define('NS_PROJECT', 4);
+define('NS_PROJECT_TALK', 5);
+define('NS_IMAGE', 6);
+define('NS_IMAGE_TALK', 7);
+define('NS_MEDIAWIKI', 8);
+define('NS_MEDIAWIKI_TALK', 9);
+define('NS_TEMPLATE', 10);
+define('NS_TEMPLATE_TALK', 11);
+define('NS_HELP', 12);
+define('NS_HELP_TALK', 13);
+define('NS_CATEGORY', 14);
+define('NS_CATEGORY_TALK', 15);
+/**#@-*/
+
+/**
+ * Available feeds objects
+ * Should probably only be defined when a page is syndicated ie when
+ * $wgOut->isSyndicated() is true
+ */
+$wgFeedClasses = array(
+	'rss' => 'RSSFeed',
+	'atom' => 'AtomFeed',
+);
+
+/**#@+
+ * Maths constants
+ */
+define( 'MW_MATH_PNG',    0 );
+define( 'MW_MATH_SIMPLE', 1 );
+define( 'MW_MATH_HTML',   2 );
+define( 'MW_MATH_SOURCE', 3 );
+define( 'MW_MATH_MODERN', 4 );
+define( 'MW_MATH_MATHML', 5 );
+/**#@-*/
+
+/**
+ * User rights list
+ * @deprecated
+ */
+$wgAvailableRights = array(
+	'block',
+	'bot',
+	'createaccount',
+	'delete',
+	'edit',
+	'editinterface',
+	'import',
+	'importupload',
+	'move',
+	'patrol',
+	'protect',
+	'read',
+	'rollback',
+	'siteadmin',
+	'unwatchedpages',
+	'upload',
+	'userrights',
+);
+
+/**#@+
+ * Cache type
+ */
+define( 'CACHE_ANYTHING', -1 );  // Use anything, as long as it works
+define( 'CACHE_NONE', 0 );       // Do not cache
+define( 'CACHE_DB', 1 );         // Store cache objects in the DB
+define( 'CACHE_MEMCACHED', 2 );  // MemCached, must specify servers in $wgMemCacheServers
+define( 'CACHE_ACCEL', 3 );      // eAccelerator or Turck, whichever is available
+define( 'CACHE_DBA', 4 );        // Use PHP's DBA extension to store in a DBM-style database
+/**#@-*/
+
+
+
+/**#@+
+ * Media types.
+ * This defines constants for the value returned by Image::getMediaType()
+ */
+define( 'MEDIATYPE_UNKNOWN',    'UNKNOWN' );     // unknown format
+define( 'MEDIATYPE_BITMAP',     'BITMAP' );      // some bitmap image or image source (like psd, etc). Can't scale up.
+define( 'MEDIATYPE_DRAWING',    'DRAWING' );     // some vector drawing (SVG, WMF, PS, ...) or image source (oo-draw, etc). Can scale up.
+define( 'MEDIATYPE_AUDIO',      'AUDIO' );       // simple audio file (ogg, mp3, wav, midi, whatever)
+define( 'MEDIATYPE_VIDEO',      'VIDEO' );       // simple video file (ogg, mpg, etc; no not include formats here that may contain executable sections or scripts!)
+define( 'MEDIATYPE_MULTIMEDIA', 'MULTIMEDIA' );  // Scriptable Multimedia (flash, advanced video container formats, etc)
+define( 'MEDIATYPE_OFFICE',     'OFFICE' );      // Office Documents, Spreadsheets (office formats possibly containing apples, scripts, etc)
+define( 'MEDIATYPE_TEXT',       'TEXT' );        // Plain text (possibly containing program code or scripts)
+define( 'MEDIATYPE_EXECUTABLE', 'EXECUTABLE' );  // binary executable
+define( 'MEDIATYPE_ARCHIVE',    'ARCHIVE' );     // archive file (zip, tar, etc)
+/**#@-*/
+
+/**#@+
+ * Antivirus result codes, for use in $wgAntivirusSetup.
+ */
+define( 'AV_NO_VIRUS', 0 );  #scan ok, no virus found
+define( 'AV_VIRUS_FOUND', 1 );  #virus found!
+define( 'AV_SCAN_ABORTED', -1 );  #scan aborted, the file is probably imune
+define( 'AV_SCAN_FAILED', false );  #scan failed (scanner not found or error in scanner)
+/**#@-*/
+
+/**#@+
+ * Anti-lock flags
+ * See DefaultSettings.php for a description
+ */
+define( 'ALF_PRELOAD_LINKS', 1 );
+define( 'ALF_PRELOAD_EXISTENCE', 2 );
+define( 'ALF_NO_LINK_LOCK', 4 );
+define( 'ALF_NO_BLOCK_LOCK', 8 );
+/**#@-*/
+
+/**#@+
+ * Date format selectors; used in user preference storage and by
+ * Language::date() and co.
+ */
+/*define( 'MW_DATE_DEFAULT', '0' );
+define( 'MW_DATE_MDY', '1' );
+define( 'MW_DATE_DMY', '2' );
+define( 'MW_DATE_YMD', '3' );
+define( 'MW_DATE_ISO', 'ISO 8601' );*/
+define( 'MW_DATE_DEFAULT', 'default' );
+define( 'MW_DATE_MDY', 'mdy' );
+define( 'MW_DATE_DMY', 'dmy' );
+define( 'MW_DATE_YMD', 'ymd' );
+define( 'MW_DATE_ISO', 'ISO 8601' );
+/**#@-*/
+
+/**#@+
+ * RecentChange type identifiers
+ * This may be obsolete; log items are now used for moves?
+ */
+define( 'RC_EDIT', 0);
+define( 'RC_NEW', 1);
+define( 'RC_MOVE', 2);
+define( 'RC_LOG', 3);
+define( 'RC_MOVE_OVER_REDIRECT', 4);
+/**#@-*/
+
+/**#@+
+ * Article edit flags
+ */
+define( 'EDIT_NEW', 1 );
+define( 'EDIT_UPDATE', 2 );
+define( 'EDIT_MINOR', 4 ); 
+define( 'EDIT_SUPPRESS_RC', 8 );
+define( 'EDIT_FORCE_BOT', 16 );
+define( 'EDIT_DEFER_UPDATES', 32 );
+define( 'EDIT_AUTOSUMMARY', 64 );
+/**#@-*/
+
+/** 
+ * Flags for Database::makeList() 
+ * These are also available as Database class constants
+ */
+define( 'LIST_COMMA', 0 );
+define( 'LIST_AND', 1 );
+define( 'LIST_SET', 2 );
+define( 'LIST_NAMES', 3);
+define( 'LIST_OR', 4);
+
+
+?>
Index: /MediaWiki/branches/1.11/includes/DifferenceEngine.php
===================================================================
--- /MediaWiki/branches/1.11/includes/DifferenceEngine.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/DifferenceEngine.php	(revision 1280)
@@ -0,0 +1,1804 @@
+<?php
+/**
+ * See diff.doc
+ * @todo indicate where diff.doc can be found.
+ * @addtogroup DifferenceEngine
+ */
+
+/**
+ * @todo document
+ * @public
+ * @addtogroup DifferenceEngine
+ */
+class DifferenceEngine {
+	/**#@+
+	 * @private
+	 */
+	var $mOldid, $mNewid, $mTitle;
+	var $mOldtitle, $mNewtitle, $mPagetitle;
+	var $mOldtext, $mNewtext;
+	var $mOldPage, $mNewPage;
+	var $mRcidMarkPatrolled;
+	var $mOldRev, $mNewRev;
+	var $mRevisionsLoaded = false; // Have the revisions been loaded
+	var $mTextLoaded = 0; // How many text blobs have been loaded, 0, 1 or 2?
+	/**#@-*/
+
+	/**
+	 * Constructor
+	 * @param $titleObj Title object that the diff is associated with
+	 * @param $old Integer: old ID we want to show and diff with.
+	 * @param $new String: either 'prev' or 'next'.
+	 * @param $rcid Integer: ??? FIXME (default 0)
+	 */
+	function DifferenceEngine( $titleObj = null, $old = 0, $new = 0, $rcid = 0 ) {
+		$this->mTitle = $titleObj;
+		wfDebug("DifferenceEngine old '$old' new '$new' rcid '$rcid'\n");
+
+		if ( 'prev' === $new ) {
+			# Show diff between revision $old and the previous one.
+			# Get previous one from DB.
+			#
+			$this->mNewid = intval($old);
+
+			$this->mOldid = $this->mTitle->getPreviousRevisionID( $this->mNewid );
+
+		} elseif ( 'next' === $new ) {
+			# Show diff between revision $old and the previous one.
+			# Get previous one from DB.
+			#
+			$this->mOldid = intval($old);
+			$this->mNewid = $this->mTitle->getNextRevisionID( $this->mOldid );
+			if ( false === $this->mNewid ) {
+				# if no result, NewId points to the newest old revision. The only newer
+				# revision is cur, which is "0".
+				$this->mNewid = 0;
+			}
+
+		} else {
+			$this->mOldid = intval($old);
+			$this->mNewid = intval($new);
+		}
+		$this->mRcidMarkPatrolled = intval($rcid);  # force it to be an integer
+	}
+
+	function showDiffPage( $diffOnly = false ) {
+		global $wgUser, $wgOut, $wgUseExternalEditor, $wgUseRCPatrol;
+		$fname = 'DifferenceEngine::showDiffPage';
+		wfProfileIn( $fname );
+
+	 	# If external diffs are enabled both globally and for the user,
+		# we'll use the application/x-external-editor interface to call
+		# an external diff tool like kompare, kdiff3, etc.
+		if($wgUseExternalEditor && $wgUser->getOption('externaldiff')) {
+			global $wgInputEncoding,$wgServer,$wgScript,$wgLang;
+			$wgOut->disable();
+			header ( "Content-type: application/x-external-editor; charset=".$wgInputEncoding );
+			$url1=$this->mTitle->getFullURL("action=raw&oldid=".$this->mOldid);
+			$url2=$this->mTitle->getFullURL("action=raw&oldid=".$this->mNewid);
+			$special=$wgLang->getNsText(NS_SPECIAL);
+			$control=<<<CONTROL
+[Process]
+Type=Diff text
+Engine=MediaWiki
+Script={$wgServer}{$wgScript}
+Special namespace={$special}
+
+[File]
+Extension=wiki
+URL=$url1
+
+[File 2]
+Extension=wiki
+URL=$url2
+CONTROL;
+			echo($control);
+			return;
+		}
+
+		$wgOut->setArticleFlag( false );
+		if ( ! $this->loadRevisionData() ) {
+			$t = $this->mTitle->getPrefixedText() . " (Diff: {$this->mOldid}, {$this->mNewid})";
+			$mtext = wfMsg( 'missingarticle', "<nowiki>$t</nowiki>" );
+			$wgOut->setPagetitle( wfMsg( 'errorpagetitle' ) );
+			$wgOut->addWikitext( $mtext );
+			wfProfileOut( $fname );
+			return;
+		}
+		
+		wfRunHooks( 'DiffViewHeader', array( $this, $this->mOldRev, $this->mNewRev ) );
+
+		if ( $this->mNewRev->isCurrent() ) {
+			$wgOut->setArticleFlag( true );
+		}
+
+		# mOldid is false if the difference engine is called with a "vague" query for
+		# a diff between a version V and its previous version V' AND the version V
+		# is the first version of that article. In that case, V' does not exist.
+		if ( $this->mOldid === false ) {
+			$this->showFirstRevision();
+			$this->renderNewRevision();  // should we respect $diffOnly here or not?
+			wfProfileOut( $fname );
+			return;
+		}
+
+		$wgOut->suppressQuickbar();
+
+		$oldTitle = $this->mOldPage->getPrefixedText();
+		$newTitle = $this->mNewPage->getPrefixedText();
+		if( $oldTitle == $newTitle ) {
+			$wgOut->setPageTitle( $newTitle );
+		} else {
+			$wgOut->setPageTitle( $oldTitle . ', ' . $newTitle );
+		}
+		$wgOut->setSubtitle( wfMsg( 'difference' ) );
+		$wgOut->setRobotpolicy( 'noindex,nofollow' );
+
+		if ( !( $this->mOldPage->userCanRead() && $this->mNewPage->userCanRead() ) ) {
+			$wgOut->loginToUse();
+			$wgOut->output();
+			wfProfileOut( $fname );
+			exit;
+		}
+
+		$sk = $wgUser->getSkin();
+
+		if ( $this->mNewRev->isCurrent() && $wgUser->isAllowed('rollback') ) {
+			$rollback = '&nbsp;&nbsp;&nbsp;' . $sk->generateRollback( $this->mNewRev );
+		} else {
+			$rollback = '';
+		}
+		if( $wgUseRCPatrol && $this->mRcidMarkPatrolled != 0 && $wgUser->isAllowed( 'patrol' ) ) {
+			$patrol = ' [' . $sk->makeKnownLinkObj( $this->mTitle, wfMsg( 'markaspatrolleddiff' ), "action=markpatrolled&rcid={$this->mRcidMarkPatrolled}" ) . ']';
+		} else {
+			$patrol = '';
+		}
+
+		$prevlink = $sk->makeKnownLinkObj( $this->mTitle, wfMsgHtml( 'previousdiff' ),
+			'diff=prev&oldid='.$this->mOldid, '', '', 'id="differences-prevlink"' );
+		if ( $this->mNewRev->isCurrent() ) {
+			$nextlink = '&nbsp;';
+		} else {
+			$nextlink = $sk->makeKnownLinkObj( $this->mTitle, wfMsgHtml( 'nextdiff' ),
+				'diff=next&oldid='.$this->mNewid, '', '', 'id="differences-nextlink"' );
+		}
+
+		$oldminor = '';
+		$newminor = '';
+
+		if ($this->mOldRev->mMinorEdit == 1) {
+			$oldminor = wfElement( 'span', array( 'class' => 'minor' ),
+				wfMsg( 'minoreditletter') ) . ' ';
+		}
+
+		if ($this->mNewRev->mMinorEdit == 1) {
+			$newminor = wfElement( 'span', array( 'class' => 'minor' ),
+			wfMsg( 'minoreditletter') ) . ' ';
+		}
+
+		$oldHeader = "<strong>{$this->mOldtitle}</strong><br />" .
+			$sk->revUserTools( $this->mOldRev ) . "<br />" .
+			$oldminor . $sk->revComment( $this->mOldRev, !$diffOnly ) . "<br />" .
+			$prevlink;
+		$newHeader = "<strong>{$this->mNewtitle}</strong><br />" .
+			$sk->revUserTools( $this->mNewRev ) . " $rollback<br />" .
+			$newminor . $sk->revComment( $this->mNewRev, !$diffOnly ) . "<br />" .
+			$nextlink . $patrol;
+
+		$this->showDiff( $oldHeader, $newHeader );
+
+		if ( !$diffOnly )
+			$this->renderNewRevision();
+
+		wfProfileOut( $fname );
+	}
+
+	/**
+	 * Show the new revision of the page.
+	 */
+	function renderNewRevision() {
+		global $wgOut;
+		$fname = 'DifferenceEngine::renderNewRevision';
+		wfProfileIn( $fname );
+
+		$wgOut->addHTML( "<hr /><h2>{$this->mPagetitle}</h2>\n" );
+		#add deleted rev tag if needed
+		if ( !$this->mNewRev->userCan(Revision::DELETED_TEXT) ) {
+		  	$wgOut->addWikiText( wfMsg( 'rev-deleted-text-permission' ) );
+		}
+
+		if( !$this->mNewRev->isCurrent() ) {
+			$oldEditSectionSetting = $wgOut->parserOptions()->setEditSection( false );
+		}
+
+		$this->loadNewText();
+		if( is_object( $this->mNewRev ) ) {
+			$wgOut->setRevisionId( $this->mNewRev->getId() );
+		}
+
+		$wgOut->addWikiTextTidy( $this->mNewtext );
+
+		if( !$this->mNewRev->isCurrent() ) {
+			$wgOut->parserOptions()->setEditSection( $oldEditSectionSetting );
+		}
+
+		wfProfileOut( $fname );
+	}
+
+	/**
+	 * Show the first revision of an article. Uses normal diff headers in
+	 * contrast to normal "old revision" display style.
+	 */
+	function showFirstRevision() {
+		global $wgOut, $wgUser;
+
+		$fname = 'DifferenceEngine::showFirstRevision';
+		wfProfileIn( $fname );
+
+		# Get article text from the DB
+		#
+		if ( ! $this->loadNewText() ) {
+			$t = $this->mTitle->getPrefixedText() . " (Diff: {$this->mOldid}, " .
+			  "{$this->mNewid})";
+			$mtext = wfMsg( 'missingarticle', "<nowiki>$t</nowiki>" );
+			$wgOut->setPagetitle( wfMsg( 'errorpagetitle' ) );
+			$wgOut->addWikitext( $mtext );
+			wfProfileOut( $fname );
+			return;
+		}
+		if ( $this->mNewRev->isCurrent() ) {
+			$wgOut->setArticleFlag( true );
+		}
+
+		# Check if user is allowed to look at this page. If not, bail out.
+		#
+		if ( !( $this->mTitle->userCanRead() ) ) {
+			$wgOut->loginToUse();
+			$wgOut->output();
+			wfProfileOut( $fname );
+			exit;
+		}
+
+		# Prepare the header box
+		#
+		$sk = $wgUser->getSkin();
+
+		$nextlink = $sk->makeKnownLinkObj( $this->mTitle, wfMsgHtml( 'nextdiff' ), 'diff=next&oldid='.$this->mNewid, '', '', 'id="differences-nextlink"' );
+		$header = "<div class=\"firstrevisionheader\" style=\"text-align: center\"><strong>{$this->mOldtitle}</strong><br />" .
+			$sk->revUserTools( $this->mNewRev ) . "<br />" .
+			$sk->revComment( $this->mNewRev ) . "<br />" .
+			$nextlink . "</div>\n";
+
+		$wgOut->addHTML( $header );
+
+		$wgOut->setSubtitle( wfMsg( 'difference' ) );
+		$wgOut->setRobotpolicy( 'noindex,nofollow' );
+
+		wfProfileOut( $fname );
+	}
+
+	/**
+	 * Get the diff text, send it to $wgOut
+	 * Returns false if the diff could not be generated, otherwise returns true
+	 */
+	function showDiff( $otitle, $ntitle ) {
+		global $wgOut;
+		$diff = $this->getDiff( $otitle, $ntitle );
+		if ( $diff === false ) {
+			$wgOut->addWikitext( wfMsg( 'missingarticle', "<nowiki>(fixme, bug)</nowiki>" ) );
+			return false;
+		} else {
+			$wgOut->addHTML( $diff );
+			return true;
+		}
+	}
+
+	/**
+	 * Get diff table, including header
+	 * Note that the interface has changed, it's no longer static.
+	 * Returns false on error
+	 */
+	function getDiff( $otitle, $ntitle ) {
+		$body = $this->getDiffBody();
+		if ( $body === false ) {
+			return false;
+		} else {
+			$multi = $this->getMultiNotice();
+			return $this->addHeader( $body, $otitle, $ntitle, $multi );
+		}
+	}
+
+	/**
+	 * Get the diff table body, without header
+	 * Results are cached
+	 * Returns false on error
+	 */
+	function getDiffBody() {
+		global $wgMemc;
+		$fname = 'DifferenceEngine::getDiffBody';
+		wfProfileIn( $fname );
+		
+		// Cacheable?
+		$key = false;
+		if ( $this->mOldid && $this->mNewid ) {
+			// Try cache
+			$key = wfMemcKey( 'diff', 'oldid', $this->mOldid, 'newid', $this->mNewid );
+			$difftext = $wgMemc->get( $key );
+			if ( $difftext ) {
+				wfIncrStats( 'diff_cache_hit' );
+				$difftext = $this->localiseLineNumbers( $difftext );
+				$difftext .= "\n<!-- diff cache key $key -->\n";
+				wfProfileOut( $fname );
+				return $difftext;
+			}
+		}
+
+		#loadtext is permission safe, this just clears out the diff
+		if ( !$this->loadText() ) {
+			wfProfileOut( $fname );
+			return false;
+		} else if ( $this->mOldRev && !$this->mOldRev->userCan(Revision::DELETED_TEXT) ) {
+		  return '';
+		} else if ( $this->mNewRev && !$this->mNewRev->userCan(Revision::DELETED_TEXT) ) {
+		  return '';
+		}
+
+		$difftext = $this->generateDiffBody( $this->mOldtext, $this->mNewtext );
+		
+		// Save to cache for 7 days
+		if ( $key !== false && $difftext !== false ) {
+			wfIncrStats( 'diff_cache_miss' );
+			$wgMemc->set( $key, $difftext, 7*86400 );
+		} else {
+			wfIncrStats( 'diff_uncacheable' );
+		}
+		// Replace line numbers with the text in the user's language
+		if ( $difftext !== false ) {
+			$difftext = $this->localiseLineNumbers( $difftext );
+		}
+		wfProfileOut( $fname );
+		return $difftext;
+	}
+
+	/**
+	 * Generate a diff, no caching
+	 * $otext and $ntext must be already segmented
+	 */
+	function generateDiffBody( $otext, $ntext ) {
+		global $wgExternalDiffEngine, $wgContLang;
+		$fname = 'DifferenceEngine::generateDiffBody';
+
+		$otext = str_replace( "\r\n", "\n", $otext );
+		$ntext = str_replace( "\r\n", "\n", $ntext );
+		
+		if ( $wgExternalDiffEngine == 'wikidiff' ) {
+			# For historical reasons, external diff engine expects
+			# input text to be HTML-escaped already
+			$otext = htmlspecialchars ( $wgContLang->segmentForDiff( $otext ) );
+			$ntext = htmlspecialchars ( $wgContLang->segmentForDiff( $ntext ) );
+			if( !function_exists( 'wikidiff_do_diff' ) ) {
+				dl('php_wikidiff.so');
+			}
+			return $wgContLang->unsegementForDiff( wikidiff_do_diff( $otext, $ntext, 2 ) );
+		}
+		
+		if ( $wgExternalDiffEngine == 'wikidiff2' ) {
+			# Better external diff engine, the 2 may some day be dropped
+			# This one does the escaping and segmenting itself
+			if ( !function_exists( 'wikidiff2_do_diff' ) ) {
+				wfProfileIn( "$fname-dl" );
+				@dl('php_wikidiff2.so');
+				wfProfileOut( "$fname-dl" );
+			}
+			if ( function_exists( 'wikidiff2_do_diff' ) ) {
+				wfProfileIn( 'wikidiff2_do_diff' );
+				$text = wikidiff2_do_diff( $otext, $ntext, 2 );
+				wfProfileOut( 'wikidiff2_do_diff' );
+				return $text;
+			}
+		}
+		if ( $wgExternalDiffEngine !== false ) {
+			# Diff via the shell
+			global $wgTmpDirectory;
+			$tempName1 = tempnam( $wgTmpDirectory, 'diff_' );
+			$tempName2 = tempnam( $wgTmpDirectory, 'diff_' );
+
+			$tempFile1 = fopen( $tempName1, "w" );
+			if ( !$tempFile1 ) {
+				wfProfileOut( $fname );
+				return false;
+			}
+			$tempFile2 = fopen( $tempName2, "w" );
+			if ( !$tempFile2 ) {
+				wfProfileOut( $fname );
+				return false;
+			}
+			fwrite( $tempFile1, $otext );
+			fwrite( $tempFile2, $ntext );
+			fclose( $tempFile1 );
+			fclose( $tempFile2 );
+			$cmd = wfEscapeShellArg( $wgExternalDiffEngine, $tempName1, $tempName2 );
+			wfProfileIn( "$fname-shellexec" );
+			$difftext = wfShellExec( $cmd );
+			wfProfileOut( "$fname-shellexec" );
+			unlink( $tempName1 );
+			unlink( $tempName2 );
+			return $difftext;
+		}
+		
+		# Native PHP diff
+		$ota = explode( "\n", $wgContLang->segmentForDiff( $otext ) );
+		$nta = explode( "\n", $wgContLang->segmentForDiff( $ntext ) );
+		$diffs = new Diff( $ota, $nta );
+		$formatter = new TableDiffFormatter();
+		return $wgContLang->unsegmentForDiff( $formatter->format( $diffs ) );
+	}
+		
+
+	/**
+	 * Replace line numbers with the text in the user's language
+	 */
+	function localiseLineNumbers( $text ) {
+		return preg_replace_callback( '/<!--LINE (\d+)-->/',
+			array( &$this, 'localiseLineNumbersCb' ), $text );
+	}
+
+	function localiseLineNumbersCb( $matches ) {
+		global $wgLang;
+		return wfMsgExt( 'lineno', array('parseinline'), $wgLang->formatNum( $matches[1] ) );
+	}
+
+	
+	/**
+	 * If there are revisions between the ones being compared, return a note saying so.
+	 */
+	function getMultiNotice() {
+		if ( !is_object($this->mOldRev) || !is_object($this->mNewRev) )
+			return '';
+		
+		if( !$this->mOldPage->equals( $this->mNewPage ) ) {
+			// Comparing two different pages? Count would be meaningless.
+			return '';
+		}
+		
+		$oldid = $this->mOldRev->getId();
+		$newid = $this->mNewRev->getId();
+		if ( $oldid > $newid ) {
+			$tmp = $oldid; $oldid = $newid; $newid = $tmp;
+		}
+
+		$n = $this->mTitle->countRevisionsBetween( $oldid, $newid );
+		if ( !$n )
+			return '';
+
+		return wfMsgExt( 'diff-multi', array( 'parseinline' ), $n );
+	}
+
+
+	/**
+	 * Add the header to a diff body
+	 */
+	function addHeader( $diff, $otitle, $ntitle, $multi = '' ) {
+		global $wgOut;
+	
+		if ( $this->mOldRev && $this->mOldRev->isDeleted(Revision::DELETED_TEXT) ) {
+		   $otitle = '<span class="history-deleted">'.$otitle.'</span>';
+		}
+		if ( $this->mNewRev && $this->mNewRev->isDeleted(Revision::DELETED_TEXT) ) {
+		   $ntitle = '<span class="history-deleted">'.$ntitle.'</span>';
+		}
+		$header = "
+			<table border='0' width='98%' cellpadding='0' cellspacing='4' class='diff'>
+			<tr>
+				<td colspan='2' width='50%' align='center' class='diff-otitle'>{$otitle}</td>
+				<td colspan='2' width='50%' align='center' class='diff-ntitle'>{$ntitle}</td>
+			</tr>
+		";
+
+		if ( $multi != '' )
+			$header .= "<tr><td colspan='4' align='center' class='diff-multi'>{$multi}</td></tr>";
+
+		return $header . $diff . "</table>";
+	}
+
+	/**
+	 * Use specified text instead of loading from the database
+	 */
+	function setText( $oldText, $newText ) {
+		$this->mOldtext = $oldText;
+		$this->mNewtext = $newText;
+		$this->mTextLoaded = 2;
+	}
+
+	/**
+	 * Load revision metadata for the specified articles. If newid is 0, then compare
+	 * the old article in oldid to the current article; if oldid is 0, then
+	 * compare the current article to the immediately previous one (ignoring the
+	 * value of newid).
+	 *
+	 * If oldid is false, leave the corresponding revision object set
+	 * to false. This is impossible via ordinary user input, and is provided for
+	 * API convenience.
+	 */
+	function loadRevisionData() {
+		global $wgLang;
+		if ( $this->mRevisionsLoaded ) {
+			return true;
+		} else {
+			// Whether it succeeds or fails, we don't want to try again
+			$this->mRevisionsLoaded = true;
+		}
+
+		// Load the new revision object
+		if( $this->mNewid ) {
+			$this->mNewRev = Revision::newFromId( $this->mNewid );
+		} else {
+			$this->mNewRev = Revision::newFromTitle( $this->mTitle );
+		}
+
+		if( is_null( $this->mNewRev ) ) {
+			return false;
+		}
+
+		// Set assorted variables
+		$timestamp = $wgLang->timeanddate( $this->mNewRev->getTimestamp(), true );
+		$this->mNewPage = $this->mNewRev->getTitle();
+		if( $this->mNewRev->isCurrent() ) {
+			$newLink = $this->mNewPage->escapeLocalUrl();
+			$this->mPagetitle = htmlspecialchars( wfMsg( 'currentrev' ) );
+			$newEdit = $this->mNewPage->escapeLocalUrl( 'action=edit' );
+
+			$this->mNewtitle = "<a href='$newLink'>{$this->mPagetitle}</a> ($timestamp)"
+				. " (<a href='$newEdit'>" . htmlspecialchars( wfMsg( 'editold' ) ) . "</a>)";
+
+		} else {
+			$newLink = $this->mNewPage->escapeLocalUrl( 'oldid=' . $this->mNewid );
+			$newEdit = $this->mNewPage->escapeLocalUrl( 'action=edit&oldid=' . $this->mNewid );
+			$this->mPagetitle = htmlspecialchars( wfMsg( 'revisionasof', $timestamp ) );
+
+			$this->mNewtitle = "<a href='$newLink'>{$this->mPagetitle}</a>"
+				. " (<a href='$newEdit'>" . htmlspecialchars( wfMsg( 'editold' ) ) . "</a>)";
+		}
+
+		// Load the old revision object
+		$this->mOldRev = false;
+		if( $this->mOldid ) {
+			$this->mOldRev = Revision::newFromId( $this->mOldid );
+		} elseif ( $this->mOldid === 0 ) {
+			$rev = $this->mNewRev->getPrevious();
+			if( $rev ) {
+				$this->mOldid = $rev->getId();
+				$this->mOldRev = $rev;
+			} else {
+				// No previous revision; mark to show as first-version only.
+				$this->mOldid = false;
+				$this->mOldRev = false;
+			}
+		}/* elseif ( $this->mOldid === false ) leave mOldRev false; */
+
+		if( is_null( $this->mOldRev ) ) {
+			return false;
+		}
+
+		if ( $this->mOldRev ) {
+			$this->mOldPage = $this->mOldRev->getTitle();
+
+			$t = $wgLang->timeanddate( $this->mOldRev->getTimestamp(), true );
+			$oldLink = $this->mOldPage->escapeLocalUrl( 'oldid=' . $this->mOldid );
+			$oldEdit = $this->mOldPage->escapeLocalUrl( 'action=edit&oldid=' . $this->mOldid );
+			$this->mOldtitle = "<a href='$oldLink'>" . htmlspecialchars( wfMsg( 'revisionasof', $t ) )
+				. "</a> (<a href='$oldEdit'>" . htmlspecialchars( wfMsg( 'editold' ) ) . "</a>)";
+			//now that we considered old rev, we can make undo link (bug 8133, multi-edit undo)
+			$newUndo = $this->mNewPage->escapeLocalUrl( 'action=edit&undoafter=' . $this->mOldid . '&undo=' . $this->mNewid);
+			$this->mNewtitle .= " (<a href='$newUndo'>" . htmlspecialchars( wfMsg( 'editundo' ) ) . "</a>)";
+		}
+
+		return true;
+	}
+
+	/**
+	 * Load the text of the revisions, as well as revision data.
+	 */
+	function loadText() {
+		if ( $this->mTextLoaded == 2 ) {
+			return true;
+		} else {
+			// Whether it succeeds or fails, we don't want to try again
+			$this->mTextLoaded = 2;
+		}
+
+		if ( !$this->loadRevisionData() ) {
+			return false;
+		}
+		if ( $this->mOldRev ) {
+			// FIXME: permission tests
+			$this->mOldtext = $this->mOldRev->revText();
+			if ( $this->mOldtext === false ) {
+				return false;
+			}
+		}
+		if ( $this->mNewRev ) {
+			$this->mNewtext = $this->mNewRev->revText();
+			if ( $this->mNewtext === false ) {
+				return false;
+			}
+		}
+		return true;
+	}
+
+	/**
+	 * Load the text of the new revision, not the old one
+	 */
+	function loadNewText() {
+		if ( $this->mTextLoaded >= 1 ) {
+			return true;
+		} else {
+			$this->mTextLoaded = 1;
+		}
+		if ( !$this->loadRevisionData() ) {
+			return false;
+		}
+		$this->mNewtext = $this->mNewRev->getText();
+		return true;
+	}
+
+
+}
+
+// A PHP diff engine for phpwiki. (Taken from phpwiki-1.3.3)
+//
+// Copyright (C) 2000, 2001 Geoffrey T. Dairiki <dairiki@dairiki.org>
+// You may copy this code freely under the conditions of the GPL.
+//
+
+define('USE_ASSERTS', function_exists('assert'));
+
+/**
+ * @todo document
+ * @private
+ * @addtogroup DifferenceEngine
+ */
+class _DiffOp {
+	var $type;
+	var $orig;
+	var $closing;
+
+	function reverse() {
+		trigger_error('pure virtual', E_USER_ERROR);
+	}
+
+	function norig() {
+		return $this->orig ? sizeof($this->orig) : 0;
+	}
+
+	function nclosing() {
+		return $this->closing ? sizeof($this->closing) : 0;
+	}
+}
+
+/**
+ * @todo document
+ * @private
+ * @addtogroup DifferenceEngine
+ */
+class _DiffOp_Copy extends _DiffOp {
+	var $type = 'copy';
+
+	function _DiffOp_Copy ($orig, $closing = false) {
+		if (!is_array($closing))
+			$closing = $orig;
+		$this->orig = $orig;
+		$this->closing = $closing;
+	}
+
+	function reverse() {
+		return new _DiffOp_Copy($this->closing, $this->orig);
+	}
+}
+
+/**
+ * @todo document
+ * @private
+ * @addtogroup DifferenceEngine
+ */
+class _DiffOp_Delete extends _DiffOp {
+	var $type = 'delete';
+
+	function _DiffOp_Delete ($lines) {
+		$this->orig = $lines;
+		$this->closing = false;
+	}
+
+	function reverse() {
+		return new _DiffOp_Add($this->orig);
+	}
+}
+
+/**
+ * @todo document
+ * @private
+ * @addtogroup DifferenceEngine
+ */
+class _DiffOp_Add extends _DiffOp {
+	var $type = 'add';
+
+	function _DiffOp_Add ($lines) {
+		$this->closing = $lines;
+		$this->orig = false;
+	}
+
+	function reverse() {
+		return new _DiffOp_Delete($this->closing);
+	}
+}
+
+/**
+ * @todo document
+ * @private
+ * @addtogroup DifferenceEngine
+ */
+class _DiffOp_Change extends _DiffOp {
+	var $type = 'change';
+
+	function _DiffOp_Change ($orig, $closing) {
+		$this->orig = $orig;
+		$this->closing = $closing;
+	}
+
+	function reverse() {
+		return new _DiffOp_Change($this->closing, $this->orig);
+	}
+}
+
+
+/**
+ * Class used internally by Diff to actually compute the diffs.
+ *
+ * The algorithm used here is mostly lifted from the perl module
+ * Algorithm::Diff (version 1.06) by Ned Konz, which is available at:
+ *	 http://www.perl.com/CPAN/authors/id/N/NE/NEDKONZ/Algorithm-Diff-1.06.zip
+ *
+ * More ideas are taken from:
+ *	 http://www.ics.uci.edu/~eppstein/161/960229.html
+ *
+ * Some ideas are (and a bit of code) are from from analyze.c, from GNU
+ * diffutils-2.7, which can be found at:
+ *	 ftp://gnudist.gnu.org/pub/gnu/diffutils/diffutils-2.7.tar.gz
+ *
+ * closingly, some ideas (subdivision by NCHUNKS > 2, and some optimizations)
+ * are my own.
+ *
+ * Line length limits for robustness added by Tim Starling, 2005-08-31
+ *
+ * @author Geoffrey T. Dairiki, Tim Starling
+ * @private
+ * @addtogroup DifferenceEngine
+ */
+class _DiffEngine
+{
+	const MAX_XREF_LENGTH =  10000;
+
+	function diff ($from_lines, $to_lines) {
+		$fname = '_DiffEngine::diff';
+		wfProfileIn( $fname );
+
+		$n_from = sizeof($from_lines);
+		$n_to = sizeof($to_lines);
+
+		$this->xchanged = $this->ychanged = array();
+		$this->xv = $this->yv = array();
+		$this->xind = $this->yind = array();
+		unset($this->seq);
+		unset($this->in_seq);
+		unset($this->lcs);
+
+		// Skip leading common lines.
+		for ($skip = 0; $skip < $n_from && $skip < $n_to; $skip++) {
+			if ($from_lines[$skip] !== $to_lines[$skip])
+				break;
+			$this->xchanged[$skip] = $this->ychanged[$skip] = false;
+		}
+		// Skip trailing common lines.
+		$xi = $n_from; $yi = $n_to;
+		for ($endskip = 0; --$xi > $skip && --$yi > $skip; $endskip++) {
+			if ($from_lines[$xi] !== $to_lines[$yi])
+				break;
+			$this->xchanged[$xi] = $this->ychanged[$yi] = false;
+		}
+
+		// Ignore lines which do not exist in both files.
+		for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
+			$xhash[$this->_line_hash($from_lines[$xi])] = 1;
+		}
+
+		for ($yi = $skip; $yi < $n_to - $endskip; $yi++) {
+			$line = $to_lines[$yi];
+			if ( ($this->ychanged[$yi] = empty($xhash[$this->_line_hash($line)])) )
+				continue;
+			$yhash[$this->_line_hash($line)] = 1;
+			$this->yv[] = $line;
+			$this->yind[] = $yi;
+		}
+		for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
+			$line = $from_lines[$xi];
+			if ( ($this->xchanged[$xi] = empty($yhash[$this->_line_hash($line)])) )
+				continue;
+			$this->xv[] = $line;
+			$this->xind[] = $xi;
+		}
+
+		// Find the LCS.
+		$this->_compareseq(0, sizeof($this->xv), 0, sizeof($this->yv));
+
+		// Merge edits when possible
+		$this->_shift_boundaries($from_lines, $this->xchanged, $this->ychanged);
+		$this->_shift_boundaries($to_lines, $this->ychanged, $this->xchanged);
+
+		// Compute the edit operations.
+		$edits = array();
+		$xi = $yi = 0;
+		while ($xi < $n_from || $yi < $n_to) {
+			USE_ASSERTS && assert($yi < $n_to || $this->xchanged[$xi]);
+			USE_ASSERTS && assert($xi < $n_from || $this->ychanged[$yi]);
+
+			// Skip matching "snake".
+			$copy = array();
+			while ( $xi < $n_from && $yi < $n_to
+					&& !$this->xchanged[$xi] && !$this->ychanged[$yi]) {
+				$copy[] = $from_lines[$xi++];
+				++$yi;
+			}
+			if ($copy)
+				$edits[] = new _DiffOp_Copy($copy);
+
+			// Find deletes & adds.
+			$delete = array();
+			while ($xi < $n_from && $this->xchanged[$xi])
+				$delete[] = $from_lines[$xi++];
+
+			$add = array();
+			while ($yi < $n_to && $this->ychanged[$yi])
+				$add[] = $to_lines[$yi++];
+
+			if ($delete && $add)
+				$edits[] = new _DiffOp_Change($delete, $add);
+			elseif ($delete)
+				$edits[] = new _DiffOp_Delete($delete);
+			elseif ($add)
+				$edits[] = new _DiffOp_Add($add);
+		}
+		wfProfileOut( $fname );
+		return $edits;
+	}
+
+	/**
+	 * Returns the whole line if it's small enough, or the MD5 hash otherwise
+	 */
+	function _line_hash( $line ) {
+		if ( strlen( $line ) > self::MAX_XREF_LENGTH ) {
+			return md5( $line );
+		} else {
+			return $line;
+		}
+	}
+
+
+	/* Divide the Largest Common Subsequence (LCS) of the sequences
+	 * [XOFF, XLIM) and [YOFF, YLIM) into NCHUNKS approximately equally
+	 * sized segments.
+	 *
+	 * Returns (LCS, PTS).	LCS is the length of the LCS. PTS is an
+	 * array of NCHUNKS+1 (X, Y) indexes giving the diving points between
+	 * sub sequences.  The first sub-sequence is contained in [X0, X1),
+	 * [Y0, Y1), the second in [X1, X2), [Y1, Y2) and so on.  Note
+	 * that (X0, Y0) == (XOFF, YOFF) and
+	 * (X[NCHUNKS], Y[NCHUNKS]) == (XLIM, YLIM).
+	 *
+	 * This function assumes that the first lines of the specified portions
+	 * of the two files do not match, and likewise that the last lines do not
+	 * match.  The caller must trim matching lines from the beginning and end
+	 * of the portions it is going to specify.
+	 */
+	function _diag ($xoff, $xlim, $yoff, $ylim, $nchunks) {
+		$fname = '_DiffEngine::_diag';
+		wfProfileIn( $fname );
+		$flip = false;
+
+		if ($xlim - $xoff > $ylim - $yoff) {
+			// Things seems faster (I'm not sure I understand why)
+				// when the shortest sequence in X.
+				$flip = true;
+			list ($xoff, $xlim, $yoff, $ylim)
+			= array( $yoff, $ylim, $xoff, $xlim);
+		}
+
+		if ($flip)
+			for ($i = $ylim - 1; $i >= $yoff; $i--)
+				$ymatches[$this->xv[$i]][] = $i;
+		else
+			for ($i = $ylim - 1; $i >= $yoff; $i--)
+				$ymatches[$this->yv[$i]][] = $i;
+
+		$this->lcs = 0;
+		$this->seq[0]= $yoff - 1;
+		$this->in_seq = array();
+		$ymids[0] = array();
+
+		$numer = $xlim - $xoff + $nchunks - 1;
+		$x = $xoff;
+		for ($chunk = 0; $chunk < $nchunks; $chunk++) {
+			wfProfileIn( "$fname-chunk" );
+			if ($chunk > 0)
+				for ($i = 0; $i <= $this->lcs; $i++)
+					$ymids[$i][$chunk-1] = $this->seq[$i];
+
+			$x1 = $xoff + (int)(($numer + ($xlim-$xoff)*$chunk) / $nchunks);
+			for ( ; $x < $x1; $x++) {
+				$line = $flip ? $this->yv[$x] : $this->xv[$x];
+					if (empty($ymatches[$line]))
+						continue;
+				$matches = $ymatches[$line];
+				reset($matches);
+				while (list ($junk, $y) = each($matches))
+					if (empty($this->in_seq[$y])) {
+						$k = $this->_lcs_pos($y);
+						USE_ASSERTS && assert($k > 0);
+						$ymids[$k] = $ymids[$k-1];
+						break;
+					}
+				while (list ( /* $junk */, $y) = each($matches)) {
+					if ($y > $this->seq[$k-1]) {
+						USE_ASSERTS && assert($y < $this->seq[$k]);
+						// Optimization: this is a common case:
+						//	next match is just replacing previous match.
+						$this->in_seq[$this->seq[$k]] = false;
+						$this->seq[$k] = $y;
+						$this->in_seq[$y] = 1;
+					} else if (empty($this->in_seq[$y])) {
+						$k = $this->_lcs_pos($y);
+						USE_ASSERTS && assert($k > 0);
+						$ymids[$k] = $ymids[$k-1];
+					}
+				}
+			}
+			wfProfileOut( "$fname-chunk" );
+		}
+
+		$seps[] = $flip ? array($yoff, $xoff) : array($xoff, $yoff);
+		$ymid = $ymids[$this->lcs];
+		for ($n = 0; $n < $nchunks - 1; $n++) {
+			$x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $n) / $nchunks);
+			$y1 = $ymid[$n] + 1;
+			$seps[] = $flip ? array($y1, $x1) : array($x1, $y1);
+		}
+		$seps[] = $flip ? array($ylim, $xlim) : array($xlim, $ylim);
+
+		wfProfileOut( $fname );
+		return array($this->lcs, $seps);
+	}
+
+	function _lcs_pos ($ypos) {
+		$fname = '_DiffEngine::_lcs_pos';
+		wfProfileIn( $fname );
+
+		$end = $this->lcs;
+		if ($end == 0 || $ypos > $this->seq[$end]) {
+			$this->seq[++$this->lcs] = $ypos;
+			$this->in_seq[$ypos] = 1;
+			wfProfileOut( $fname );
+			return $this->lcs;
+		}
+
+		$beg = 1;
+		while ($beg < $end) {
+			$mid = (int)(($beg + $end) / 2);
+			if ( $ypos > $this->seq[$mid] )
+				$beg = $mid + 1;
+			else
+				$end = $mid;
+		}
+
+		USE_ASSERTS && assert($ypos != $this->seq[$end]);
+
+		$this->in_seq[$this->seq[$end]] = false;
+		$this->seq[$end] = $ypos;
+		$this->in_seq[$ypos] = 1;
+		wfProfileOut( $fname );
+		return $end;
+	}
+
+	/* Find LCS of two sequences.
+	 *
+	 * The results are recorded in the vectors $this->{x,y}changed[], by
+	 * storing a 1 in the element for each line that is an insertion
+	 * or deletion (ie. is not in the LCS).
+	 *
+	 * The subsequence of file 0 is [XOFF, XLIM) and likewise for file 1.
+	 *
+	 * Note that XLIM, YLIM are exclusive bounds.
+	 * All line numbers are origin-0 and discarded lines are not counted.
+	 */
+	function _compareseq ($xoff, $xlim, $yoff, $ylim) {
+		$fname = '_DiffEngine::_compareseq';
+		wfProfileIn( $fname );
+
+		// Slide down the bottom initial diagonal.
+		while ($xoff < $xlim && $yoff < $ylim
+			   && $this->xv[$xoff] == $this->yv[$yoff]) {
+			++$xoff;
+			++$yoff;
+		}
+
+		// Slide up the top initial diagonal.
+		while ($xlim > $xoff && $ylim > $yoff
+			   && $this->xv[$xlim - 1] == $this->yv[$ylim - 1]) {
+			--$xlim;
+			--$ylim;
+		}
+
+		if ($xoff == $xlim || $yoff == $ylim)
+			$lcs = 0;
+		else {
+			// This is ad hoc but seems to work well.
+			//$nchunks = sqrt(min($xlim - $xoff, $ylim - $yoff) / 2.5);
+			//$nchunks = max(2,min(8,(int)$nchunks));
+			$nchunks = min(7, $xlim - $xoff, $ylim - $yoff) + 1;
+			list ($lcs, $seps)
+			= $this->_diag($xoff,$xlim,$yoff, $ylim,$nchunks);
+		}
+
+		if ($lcs == 0) {
+			// X and Y sequences have no common subsequence:
+			// mark all changed.
+			while ($yoff < $ylim)
+				$this->ychanged[$this->yind[$yoff++]] = 1;
+			while ($xoff < $xlim)
+				$this->xchanged[$this->xind[$xoff++]] = 1;
+		} else {
+			// Use the partitions to split this problem into subproblems.
+			reset($seps);
+			$pt1 = $seps[0];
+			while ($pt2 = next($seps)) {
+				$this->_compareseq ($pt1[0], $pt2[0], $pt1[1], $pt2[1]);
+				$pt1 = $pt2;
+			}
+		}
+		wfProfileOut( $fname );
+	}
+
+	/* Adjust inserts/deletes of identical lines to join changes
+	 * as much as possible.
+	 *
+	 * We do something when a run of changed lines include a
+	 * line at one end and has an excluded, identical line at the other.
+	 * We are free to choose which identical line is included.
+	 * `compareseq' usually chooses the one at the beginning,
+	 * but usually it is cleaner to consider the following identical line
+	 * to be the "change".
+	 *
+	 * This is extracted verbatim from analyze.c (GNU diffutils-2.7).
+	 */
+	function _shift_boundaries ($lines, &$changed, $other_changed) {
+		$fname = '_DiffEngine::_shift_boundaries';
+		wfProfileIn( $fname );
+		$i = 0;
+		$j = 0;
+
+		USE_ASSERTS && assert('sizeof($lines) == sizeof($changed)');
+		$len = sizeof($lines);
+		$other_len = sizeof($other_changed);
+
+		while (1) {
+			/*
+			 * Scan forwards to find beginning of another run of changes.
+			 * Also keep track of the corresponding point in the other file.
+			 *
+			 * Throughout this code, $i and $j are adjusted together so that
+			 * the first $i elements of $changed and the first $j elements
+			 * of $other_changed both contain the same number of zeros
+			 * (unchanged lines).
+			 * Furthermore, $j is always kept so that $j == $other_len or
+			 * $other_changed[$j] == false.
+			 */
+			while ($j < $other_len && $other_changed[$j])
+				$j++;
+
+			while ($i < $len && ! $changed[$i]) {
+				USE_ASSERTS && assert('$j < $other_len && ! $other_changed[$j]');
+				$i++; $j++;
+				while ($j < $other_len && $other_changed[$j])
+					$j++;
+			}
+
+			if ($i == $len)
+				break;
+
+			$start = $i;
+
+			// Find the end of this run of changes.
+			while (++$i < $len && $changed[$i])
+				continue;
+
+			do {
+				/*
+				 * Record the length of this run of changes, so that
+				 * we can later determine whether the run has grown.
+				 */
+				$runlength = $i - $start;
+
+				/*
+				 * Move the changed region back, so long as the
+				 * previous unchanged line matches the last changed one.
+				 * This merges with previous changed regions.
+				 */
+				while ($start > 0 && $lines[$start - 1] == $lines[$i - 1]) {
+					$changed[--$start] = 1;
+					$changed[--$i] = false;
+					while ($start > 0 && $changed[$start - 1])
+						$start--;
+					USE_ASSERTS && assert('$j > 0');
+					while ($other_changed[--$j])
+						continue;
+					USE_ASSERTS && assert('$j >= 0 && !$other_changed[$j]');
+				}
+
+				/*
+				 * Set CORRESPONDING to the end of the changed run, at the last
+				 * point where it corresponds to a changed run in the other file.
+				 * CORRESPONDING == LEN means no such point has been found.
+				 */
+				$corresponding = $j < $other_len ? $i : $len;
+
+				/*
+				 * Move the changed region forward, so long as the
+				 * first changed line matches the following unchanged one.
+				 * This merges with following changed regions.
+				 * Do this second, so that if there are no merges,
+				 * the changed region is moved forward as far as possible.
+				 */
+				while ($i < $len && $lines[$start] == $lines[$i]) {
+					$changed[$start++] = false;
+					$changed[$i++] = 1;
+					while ($i < $len && $changed[$i])
+						$i++;
+
+					USE_ASSERTS && assert('$j < $other_len && ! $other_changed[$j]');
+					$j++;
+					if ($j < $other_len && $other_changed[$j]) {
+						$corresponding = $i;
+						while ($j < $other_len && $other_changed[$j])
+							$j++;
+					}
+				}
+			} while ($runlength != $i - $start);
+
+			/*
+			 * If possible, move the fully-merged run of changes
+			 * back to a corresponding run in the other file.
+			 */
+			while ($corresponding < $i) {
+				$changed[--$start] = 1;
+				$changed[--$i] = 0;
+				USE_ASSERTS && assert('$j > 0');
+				while ($other_changed[--$j])
+					continue;
+				USE_ASSERTS && assert('$j >= 0 && !$other_changed[$j]');
+			}
+		}
+		wfProfileOut( $fname );
+	}
+}
+
+/**
+ * Class representing a 'diff' between two sequences of strings.
+ * @todo document
+ * @private
+ * @addtogroup DifferenceEngine
+ */
+class Diff
+{
+	var $edits;
+
+	/**
+	 * Constructor.
+	 * Computes diff between sequences of strings.
+	 *
+	 * @param $from_lines array An array of strings.
+	 *		  (Typically these are lines from a file.)
+	 * @param $to_lines array An array of strings.
+	 */
+	function Diff($from_lines, $to_lines) {
+		$eng = new _DiffEngine;
+		$this->edits = $eng->diff($from_lines, $to_lines);
+		//$this->_check($from_lines, $to_lines);
+	}
+
+	/**
+	 * Compute reversed Diff.
+	 *
+	 * SYNOPSIS:
+	 *
+	 *	$diff = new Diff($lines1, $lines2);
+	 *	$rev = $diff->reverse();
+	 * @return object A Diff object representing the inverse of the
+	 *				  original diff.
+	 */
+	function reverse () {
+		$rev = $this;
+		$rev->edits = array();
+		foreach ($this->edits as $edit) {
+			$rev->edits[] = $edit->reverse();
+		}
+		return $rev;
+	}
+
+	/**
+	 * Check for empty diff.
+	 *
+	 * @return bool True iff two sequences were identical.
+	 */
+	function isEmpty () {
+		foreach ($this->edits as $edit) {
+			if ($edit->type != 'copy')
+				return false;
+		}
+		return true;
+	}
+
+	/**
+	 * Compute the length of the Longest Common Subsequence (LCS).
+	 *
+	 * This is mostly for diagnostic purposed.
+	 *
+	 * @return int The length of the LCS.
+	 */
+	function lcs () {
+		$lcs = 0;
+		foreach ($this->edits as $edit) {
+			if ($edit->type == 'copy')
+				$lcs += sizeof($edit->orig);
+		}
+		return $lcs;
+	}
+
+	/**
+	 * Get the original set of lines.
+	 *
+	 * This reconstructs the $from_lines parameter passed to the
+	 * constructor.
+	 *
+	 * @return array The original sequence of strings.
+	 */
+	function orig() {
+		$lines = array();
+
+		foreach ($this->edits as $edit) {
+			if ($edit->orig)
+				array_splice($lines, sizeof($lines), 0, $edit->orig);
+		}
+		return $lines;
+	}
+
+	/**
+	 * Get the closing set of lines.
+	 *
+	 * This reconstructs the $to_lines parameter passed to the
+	 * constructor.
+	 *
+	 * @return array The sequence of strings.
+	 */
+	function closing() {
+		$lines = array();
+
+		foreach ($this->edits as $edit) {
+			if ($edit->closing)
+				array_splice($lines, sizeof($lines), 0, $edit->closing);
+		}
+		return $lines;
+	}
+
+	/**
+	 * Check a Diff for validity.
+	 *
+	 * This is here only for debugging purposes.
+	 */
+	function _check ($from_lines, $to_lines) {
+		$fname = 'Diff::_check';
+		wfProfileIn( $fname );
+		if (serialize($from_lines) != serialize($this->orig()))
+			trigger_error("Reconstructed original doesn't match", E_USER_ERROR);
+		if (serialize($to_lines) != serialize($this->closing()))
+			trigger_error("Reconstructed closing doesn't match", E_USER_ERROR);
+
+		$rev = $this->reverse();
+		if (serialize($to_lines) != serialize($rev->orig()))
+			trigger_error("Reversed original doesn't match", E_USER_ERROR);
+		if (serialize($from_lines) != serialize($rev->closing()))
+			trigger_error("Reversed closing doesn't match", E_USER_ERROR);
+
+
+		$prevtype = 'none';
+		foreach ($this->edits as $edit) {
+			if ( $prevtype == $edit->type )
+				trigger_error("Edit sequence is non-optimal", E_USER_ERROR);
+			$prevtype = $edit->type;
+		}
+
+		$lcs = $this->lcs();
+		trigger_error('Diff okay: LCS = '.$lcs, E_USER_NOTICE);
+		wfProfileOut( $fname );
+	}
+}
+
+/**
+ * @todo document, bad name.
+ * @private
+ * @addtogroup DifferenceEngine
+ */
+class MappedDiff extends Diff
+{
+	/**
+	 * Constructor.
+	 *
+	 * Computes diff between sequences of strings.
+	 *
+	 * This can be used to compute things like
+	 * case-insensitve diffs, or diffs which ignore
+	 * changes in white-space.
+	 *
+	 * @param $from_lines array An array of strings.
+	 *	(Typically these are lines from a file.)
+	 *
+	 * @param $to_lines array An array of strings.
+	 *
+	 * @param $mapped_from_lines array This array should
+	 *	have the same size number of elements as $from_lines.
+	 *	The elements in $mapped_from_lines and
+	 *	$mapped_to_lines are what is actually compared
+	 *	when computing the diff.
+	 *
+	 * @param $mapped_to_lines array This array should
+	 *	have the same number of elements as $to_lines.
+	 */
+	function MappedDiff($from_lines, $to_lines,
+						$mapped_from_lines, $mapped_to_lines) {
+		$fname = 'MappedDiff::MappedDiff';
+		wfProfileIn( $fname );
+
+		assert(sizeof($from_lines) == sizeof($mapped_from_lines));
+		assert(sizeof($to_lines) == sizeof($mapped_to_lines));
+
+		$this->Diff($mapped_from_lines, $mapped_to_lines);
+
+		$xi = $yi = 0;
+		for ($i = 0; $i < sizeof($this->edits); $i++) {
+			$orig = &$this->edits[$i]->orig;
+			if (is_array($orig)) {
+				$orig = array_slice($from_lines, $xi, sizeof($orig));
+				$xi += sizeof($orig);
+			}
+
+			$closing = &$this->edits[$i]->closing;
+			if (is_array($closing)) {
+				$closing = array_slice($to_lines, $yi, sizeof($closing));
+				$yi += sizeof($closing);
+			}
+		}
+		wfProfileOut( $fname );
+	}
+}
+
+/**
+ * A class to format Diffs
+ *
+ * This class formats the diff in classic diff format.
+ * It is intended that this class be customized via inheritance,
+ * to obtain fancier outputs.
+ * @todo document
+ * @private
+ * @addtogroup DifferenceEngine
+ */
+class DiffFormatter
+{
+	/**
+	 * Number of leading context "lines" to preserve.
+	 *
+	 * This should be left at zero for this class, but subclasses
+	 * may want to set this to other values.
+	 */
+	var $leading_context_lines = 0;
+
+	/**
+	 * Number of trailing context "lines" to preserve.
+	 *
+	 * This should be left at zero for this class, but subclasses
+	 * may want to set this to other values.
+	 */
+	var $trailing_context_lines = 0;
+
+	/**
+	 * Format a diff.
+	 *
+	 * @param $diff object A Diff object.
+	 * @return string The formatted output.
+	 */
+	function format($diff) {
+		$fname = 'DiffFormatter::format';
+		wfProfileIn( $fname );
+
+		$xi = $yi = 1;
+		$block = false;
+		$context = array();
+
+		$nlead = $this->leading_context_lines;
+		$ntrail = $this->trailing_context_lines;
+
+		$this->_start_diff();
+
+		foreach ($diff->edits as $edit) {
+			if ($edit->type == 'copy') {
+				if (is_array($block)) {
+					if (sizeof($edit->orig) <= $nlead + $ntrail) {
+						$block[] = $edit;
+					}
+					else{
+						if ($ntrail) {
+							$context = array_slice($edit->orig, 0, $ntrail);
+							$block[] = new _DiffOp_Copy($context);
+						}
+						$this->_block($x0, $ntrail + $xi - $x0,
+									  $y0, $ntrail + $yi - $y0,
+									  $block);
+						$block = false;
+					}
+				}
+				$context = $edit->orig;
+			}
+			else {
+				if (! is_array($block)) {
+					$context = array_slice($context, sizeof($context) - $nlead);
+					$x0 = $xi - sizeof($context);
+					$y0 = $yi - sizeof($context);
+					$block = array();
+					if ($context)
+						$block[] = new _DiffOp_Copy($context);
+				}
+				$block[] = $edit;
+			}
+
+			if ($edit->orig)
+				$xi += sizeof($edit->orig);
+			if ($edit->closing)
+				$yi += sizeof($edit->closing);
+		}
+
+		if (is_array($block))
+			$this->_block($x0, $xi - $x0,
+						  $y0, $yi - $y0,
+						  $block);
+
+		$end = $this->_end_diff();
+		wfProfileOut( $fname );
+		return $end;
+	}
+
+	function _block($xbeg, $xlen, $ybeg, $ylen, &$edits) {
+		$fname = 'DiffFormatter::_block';
+		wfProfileIn( $fname );
+		$this->_start_block($this->_block_header($xbeg, $xlen, $ybeg, $ylen));
+		foreach ($edits as $edit) {
+			if ($edit->type == 'copy')
+				$this->_context($edit->orig);
+			elseif ($edit->type == 'add')
+				$this->_added($edit->closing);
+			elseif ($edit->type == 'delete')
+				$this->_deleted($edit->orig);
+			elseif ($edit->type == 'change')
+				$this->_changed($edit->orig, $edit->closing);
+			else
+				trigger_error('Unknown edit type', E_USER_ERROR);
+		}
+		$this->_end_block();
+		wfProfileOut( $fname );
+	}
+
+	function _start_diff() {
+		ob_start();
+	}
+
+	function _end_diff() {
+		$val = ob_get_contents();
+		ob_end_clean();
+		return $val;
+	}
+
+	function _block_header($xbeg, $xlen, $ybeg, $ylen) {
+		if ($xlen > 1)
+			$xbeg .= "," . ($xbeg + $xlen - 1);
+		if ($ylen > 1)
+			$ybeg .= "," . ($ybeg + $ylen - 1);
+
+		return $xbeg . ($xlen ? ($ylen ? 'c' : 'd') : 'a') . $ybeg;
+	}
+
+	function _start_block($header) {
+		echo $header;
+	}
+
+	function _end_block() {
+	}
+
+	function _lines($lines, $prefix = ' ') {
+		foreach ($lines as $line)
+			echo "$prefix $line\n";
+	}
+
+	function _context($lines) {
+		$this->_lines($lines);
+	}
+
+	function _added($lines) {
+		$this->_lines($lines, '>');
+	}
+	function _deleted($lines) {
+		$this->_lines($lines, '<');
+	}
+
+	function _changed($orig, $closing) {
+		$this->_deleted($orig);
+		echo "---\n";
+		$this->_added($closing);
+	}
+}
+
+
+/**
+ *	Additions by Axel Boldt follow, partly taken from diff.php, phpwiki-1.3.3
+ *
+ */
+
+define('NBSP', '&#160;');			// iso-8859-x non-breaking space.
+
+/**
+ * @todo document
+ * @private
+ * @addtogroup DifferenceEngine
+ */
+class _HWLDF_WordAccumulator {
+	function _HWLDF_WordAccumulator () {
+		$this->_lines = array();
+		$this->_line = '';
+		$this->_group = '';
+		$this->_tag = '';
+	}
+
+	function _flushGroup ($new_tag) {
+		if ($this->_group !== '') {
+			if ($this->_tag == 'ins')
+				$this->_line .= '<ins class="diffchange">' .
+					htmlspecialchars ( $this->_group ) . '</ins>';
+			elseif ($this->_tag == 'del')
+				$this->_line .= '<del class="diffchange">' .
+					htmlspecialchars ( $this->_group ) . '</del>';
+			else
+				$this->_line .= htmlspecialchars ( $this->_group );
+		}
+		$this->_group = '';
+		$this->_tag = $new_tag;
+	}
+
+	function _flushLine ($new_tag) {
+		$this->_flushGroup($new_tag);
+		if ($this->_line != '')
+			array_push ( $this->_lines, $this->_line );
+		else
+			# make empty lines visible by inserting an NBSP
+			array_push ( $this->_lines, NBSP );
+		$this->_line = '';
+	}
+
+	function addWords ($words, $tag = '') {
+		if ($tag != $this->_tag)
+			$this->_flushGroup($tag);
+
+		foreach ($words as $word) {
+			// new-line should only come as first char of word.
+			if ($word == '')
+				continue;
+			if ($word[0] == "\n") {
+				$this->_flushLine($tag);
+				$word = substr($word, 1);
+			}
+			assert(!strstr($word, "\n"));
+			$this->_group .= $word;
+		}
+	}
+
+	function getLines() {
+		$this->_flushLine('~done');
+		return $this->_lines;
+	}
+}
+
+/**
+ * @todo document
+ * @private
+ * @addtogroup DifferenceEngine
+ */
+class WordLevelDiff extends MappedDiff
+{
+	const MAX_LINE_LENGTH = 10000;
+
+	function WordLevelDiff ($orig_lines, $closing_lines) {
+		$fname = 'WordLevelDiff::WordLevelDiff';
+		wfProfileIn( $fname );
+
+		list ($orig_words, $orig_stripped) = $this->_split($orig_lines);
+		list ($closing_words, $closing_stripped) = $this->_split($closing_lines);
+
+		$this->MappedDiff($orig_words, $closing_words,
+						  $orig_stripped, $closing_stripped);
+		wfProfileOut( $fname );
+	}
+
+	function _split($lines) {
+		$fname = 'WordLevelDiff::_split';
+		wfProfileIn( $fname );
+
+		$words = array();
+		$stripped = array();
+		$first = true;
+		foreach ( $lines as $line ) {
+			# If the line is too long, just pretend the entire line is one big word
+			# This prevents resource exhaustion problems
+			if ( $first ) {
+				$first = false;
+			} else {
+				$words[] = "\n";
+				$stripped[] = "\n";
+			}
+			if ( strlen( $line ) > self::MAX_LINE_LENGTH ) {
+				$words[] = $line;
+				$stripped[] = $line;
+			} else {
+				$m = array();
+				if (preg_match_all('/ ( [^\S\n]+ | [0-9_A-Za-z\x80-\xff]+ | . ) (?: (?!< \n) [^\S\n])? /xs',
+					$line, $m))
+				{
+					$words = array_merge( $words, $m[0] );
+					$stripped = array_merge( $stripped, $m[1] );
+				}
+			}
+		}
+		wfProfileOut( $fname );
+		return array($words, $stripped);
+	}
+
+	function orig () {
+		$fname = 'WordLevelDiff::orig';
+		wfProfileIn( $fname );
+		$orig = new _HWLDF_WordAccumulator;
+
+		foreach ($this->edits as $edit) {
+			if ($edit->type == 'copy')
+				$orig->addWords($edit->orig);
+			elseif ($edit->orig)
+				$orig->addWords($edit->orig, 'del');
+		}
+		$lines = $orig->getLines();
+		wfProfileOut( $fname );
+		return $lines;
+	}
+
+	function closing () {
+		$fname = 'WordLevelDiff::closing';
+		wfProfileIn( $fname );
+		$closing = new _HWLDF_WordAccumulator;
+
+		foreach ($this->edits as $edit) {
+			if ($edit->type == 'copy')
+				$closing->addWords($edit->closing);
+			elseif ($edit->closing)
+				$closing->addWords($edit->closing, 'ins');
+		}
+		$lines = $closing->getLines();
+		wfProfileOut( $fname );
+		return $lines;
+	}
+}
+
+/**
+ *	Wikipedia Table style diff formatter.
+ * @todo document
+ * @private
+ * @addtogroup DifferenceEngine
+ */
+class TableDiffFormatter extends DiffFormatter
+{
+	function TableDiffFormatter() {
+		$this->leading_context_lines = 2;
+		$this->trailing_context_lines = 2;
+	}
+
+	function _block_header( $xbeg, $xlen, $ybeg, $ylen ) {
+		$r = '<tr><td colspan="2" align="left"><strong><!--LINE '.$xbeg."--></strong></td>\n" .
+		  '<td colspan="2" align="left"><strong><!--LINE '.$ybeg."--></strong></td></tr>\n";
+		return $r;
+	}
+
+	function _start_block( $header ) {
+		echo $header;
+	}
+
+	function _end_block() {
+	}
+
+	function _lines( $lines, $prefix=' ', $color='white' ) {
+	}
+
+	# HTML-escape parameter before calling this
+	function addedLine( $line ) {
+		return "<td>+</td><td class='diff-addedline'>{$line}</td>";
+	}
+
+	# HTML-escape parameter before calling this
+	function deletedLine( $line ) {
+		return "<td>-</td><td class='diff-deletedline'>{$line}</td>";
+	}
+
+	# HTML-escape parameter before calling this
+	function contextLine( $line ) {
+		return "<td> </td><td class='diff-context'>{$line}</td>";
+	}
+
+	function emptyLine() {
+		return '<td colspan="2">&nbsp;</td>';
+	}
+
+	function _added( $lines ) {
+		foreach ($lines as $line) {
+			echo '<tr>' . $this->emptyLine() .
+				$this->addedLine( htmlspecialchars ( $line ) ) . "</tr>\n";
+		}
+	}
+
+	function _deleted($lines) {
+		foreach ($lines as $line) {
+			echo '<tr>' . $this->deletedLine( htmlspecialchars ( $line ) ) .
+			  $this->emptyLine() . "</tr>\n";
+		}
+	}
+
+	function _context( $lines ) {
+		foreach ($lines as $line) {
+			echo '<tr>' .
+				$this->contextLine( htmlspecialchars ( $line ) ) .
+				$this->contextLine( htmlspecialchars ( $line ) ) . "</tr>\n";
+		}
+	}
+
+	function _changed( $orig, $closing ) {
+		$fname = 'TableDiffFormatter::_changed';
+		wfProfileIn( $fname );
+
+		$diff = new WordLevelDiff( $orig, $closing );
+		$del = $diff->orig();
+		$add = $diff->closing();
+
+		# Notice that WordLevelDiff returns HTML-escaped output.
+		# Hence, we will be calling addedLine/deletedLine without HTML-escaping.
+
+		while ( $line = array_shift( $del ) ) {
+			$aline = array_shift( $add );
+			echo '<tr>' . $this->deletedLine( $line ) .
+				$this->addedLine( $aline ) . "</tr>\n";
+		}
+		foreach ($add as $line) {	# If any leftovers
+			echo '<tr>' . $this->emptyLine() .
+				$this->addedLine( $line ) . "</tr>\n";
+		}
+		wfProfileOut( $fname );
+	}
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/DjVuImage.php
===================================================================
--- /MediaWiki/branches/1.11/includes/DjVuImage.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/DjVuImage.php	(revision 1280)
@@ -0,0 +1,343 @@
+<?php
+
+/**
+ *
+ * Copyright (C) 2006 Brion Vibber <brion@pobox.com>
+ * http://www.mediawiki.org/
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ */
+
+/**
+ * Support for detecting/validating DjVu image files and getting
+ * some basic file metadata (resolution etc)
+ *
+ * File format docs are available in source package for DjVuLibre:
+ * http://djvulibre.djvuzone.org/
+ *
+ * @addtogroup Media
+ */
+class DjVuImage {
+	function __construct( $filename ) {
+		$this->mFilename = $filename;
+	}
+	
+	/**
+	 * Check if the given file is indeed a valid DjVu image file
+	 * @return bool
+	 */
+	public function isValid() {
+		$info = $this->getInfo();
+		return $info !== false;
+	}
+	
+	
+	/**
+	 * Return data in the style of getimagesize()
+	 * @return array or false on failure
+	 */
+	public function getImageSize() {
+		$data = $this->getInfo();
+		
+		if( $data !== false ) {
+			$width  = $data['width'];
+			$height = $data['height'];
+			
+			return array( $width, $height, 'DjVu',
+				"width=\"$width\" height=\"$height\"" );
+		}
+		return false;
+	}
+	
+	// ---------
+	
+	/**
+	 * For debugging; dump the IFF chunk structure
+	 */
+	function dump() {
+		$file = fopen( $this->mFilename, 'rb' );
+		$header = fread( $file, 12 );
+		// FIXME: Would be good to replace this extract() call with something that explicitly initializes local variables.
+		extract( unpack( 'a4magic/a4chunk/NchunkLength', $header ) );
+		echo "$chunk $chunkLength\n";
+		$this->dumpForm( $file, $chunkLength, 1 );
+		fclose( $file );
+	}
+	
+	private function dumpForm( $file, $length, $indent ) {
+		$start = ftell( $file );
+		$secondary = fread( $file, 4 );
+		echo str_repeat( ' ', $indent * 4 ) . "($secondary)\n";
+		while( ftell( $file ) - $start < $length ) {
+			$chunkHeader = fread( $file, 8 );
+			if( $chunkHeader == '' ) {
+				break;
+			}
+			// FIXME: Would be good to replace this extract() call with something that explicitly initializes local variables.
+			extract( unpack( 'a4chunk/NchunkLength', $chunkHeader ) );
+			echo str_repeat( ' ', $indent * 4 ) . "$chunk $chunkLength\n";
+			
+			if( $chunk == 'FORM' ) {
+				$this->dumpForm( $file, $chunkLength, $indent + 1 );
+			} else {
+				fseek( $file, $chunkLength, SEEK_CUR );
+				if( $chunkLength & 1 == 1 ) {
+					// Padding byte between chunks
+					fseek( $file, 1, SEEK_CUR );
+				}
+			}
+		}
+	}
+	
+	function getInfo() {
+		$file = fopen( $this->mFilename, 'rb' );
+		if( $file === false ) {
+			wfDebug( __METHOD__ . ": missing or failed file read\n" );
+			return false;
+		}
+		
+		$header = fread( $file, 16 );
+		$info = false;
+		
+		if( strlen( $header ) < 16 ) {
+			wfDebug( __METHOD__ . ": too short file header\n" );
+		} else {
+			// FIXME: Would be good to replace this extract() call with something that explicitly initializes local variables.
+			extract( unpack( 'a4magic/a4form/NformLength/a4subtype', $header ) );
+			
+			if( $magic != 'AT&T' ) {
+				wfDebug( __METHOD__ . ": not a DjVu file\n" );
+			} elseif( $subtype == 'DJVU' ) {
+				// Single-page document
+				$info = $this->getPageInfo( $file, $formLength );
+			} elseif( $subtype == 'DJVM' ) {
+				// Multi-page document
+				$info = $this->getMultiPageInfo( $file, $formLength );
+			} else  {
+				wfDebug( __METHOD__ . ": unrecognized DJVU file type '$formType'\n" );
+			}
+		}
+		fclose( $file );
+		return $info;
+	}
+	
+	private function readChunk( $file ) {
+		$header = fread( $file, 8 );
+		if( strlen( $header ) < 8 ) {
+			return array( false, 0 );
+		} else {
+			// FIXME: Would be good to replace this extract() call with something that explicitly initializes local variables.
+			extract( unpack( 'a4chunk/Nlength', $header ) );
+			return array( $chunk, $length );
+		}
+	}
+	
+	private function skipChunk( $file, $chunkLength ) {
+		fseek( $file, $chunkLength, SEEK_CUR );
+		
+		if( $chunkLength & 0x01 == 1 && !feof( $file ) ) {
+			// padding byte
+			fseek( $file, 1, SEEK_CUR );
+		}
+	}
+	
+	private function getMultiPageInfo( $file, $formLength ) {
+		// For now, we'll just look for the first page in the file
+		// and report its information, hoping others are the same size.
+		$start = ftell( $file );
+		do {
+			list( $chunk, $length ) = $this->readChunk( $file );
+			if( !$chunk ) {
+				break;
+			}
+			
+			if( $chunk == 'FORM' ) {
+				$subtype = fread( $file, 4 );
+				if( $subtype == 'DJVU' ) {
+					wfDebug( __METHOD__ . ": found first subpage\n" );
+					return $this->getPageInfo( $file, $length );
+				}
+				$this->skipChunk( $file, $length - 4 );
+			} else {
+				wfDebug( __METHOD__ . ": skipping '$chunk' chunk\n" );
+				$this->skipChunk( $file, $length );
+			}
+		} while( $length != 0 && !feof( $file ) && ftell( $file ) - $start < $formLength );
+		
+		wfDebug( __METHOD__ . ": multi-page DJVU file contained no pages\n" );
+		return false;
+	}
+	
+	private function getPageInfo( $file, $formLength ) {
+		list( $chunk, $length ) = $this->readChunk( $file );
+		if( $chunk != 'INFO' ) {
+			wfDebug( __METHOD__ . ": expected INFO chunk, got '$chunk'\n" );
+			return false;
+		}
+		
+		if( $length < 9 ) {
+			wfDebug( __METHOD__ . ": INFO should be 9 or 10 bytes, found $length\n" );
+			return false;
+		}
+		$data = fread( $file, $length );
+		if( strlen( $data ) < $length ) {
+			wfDebug( __METHOD__ . ": INFO chunk cut off\n" );
+			return false;
+		}
+		
+		// FIXME: Would be good to replace this extract() call with something that explicitly initializes local variables.
+		extract( unpack(
+			'nwidth/' .
+			'nheight/' .
+			'Cminor/' .
+			'Cmajor/' .
+			'vresolution/' .
+			'Cgamma', $data ) );
+		# Newer files have rotation info in byte 10, but we don't use it yet.
+		
+		return array(
+			'width' => $width,
+			'height' => $height,
+			'version' => "$major.$minor",
+			'resolution' => $resolution,
+			'gamma' => $gamma / 10.0 );
+	}
+
+	/**
+	 * Return an XML string describing the DjVu image
+	 * @return string
+	 */
+	function retrieveMetaData() {
+		global $wgDjvuToXML, $wgDjvuDump;
+		if ( isset( $wgDjvuDump ) ) {
+			# djvudump is faster as of version 3.5
+			# http://sourceforge.net/tracker/index.php?func=detail&aid=1704049&group_id=32953&atid=406583
+			wfProfileIn( 'djvudump' );
+			$cmd = wfEscapeShellArg( $wgDjvuDump ) . ' ' . wfEscapeShellArg( $this->mFilename );
+			$dump = wfShellExec( $cmd );
+			$xml = $this->convertDumpToXML( $dump );
+			wfProfileOut( 'djvudump' );
+		} elseif ( isset( $wgDjvuToXML ) ) {
+			wfProfileIn( 'djvutoxml' );
+			$cmd = wfEscapeShellArg( $wgDjvuToXML ) . ' --without-anno --without-text ' .
+				wfEscapeShellArg( $this->mFilename );
+			$xml = wfShellExec( $cmd );
+			wfProfileOut( 'djvutoxml' );
+		} else {
+			$xml = null;
+		}
+		return $xml;
+	}
+
+	/**
+	 * Hack to temporarily work around djvutoxml bug
+	 */
+	function convertDumpToXML( $dump ) {
+		if ( strval( $dump ) == '' ) {
+			return false;
+		}
+
+		$xml = <<<EOT
+<?xml version="1.0" ?>
+<!DOCTYPE DjVuXML PUBLIC "-//W3C//DTD DjVuXML 1.1//EN" "pubtext/DjVuXML-s.dtd">
+<DjVuXML>
+<HEAD></HEAD>
+<BODY>
+EOT;
+
+		$dump = str_replace( "\r", '', $dump );
+		$line = strtok( $dump, "\n" );
+		$m = false;
+		$good = false;
+		if ( preg_match( '/^( *)FORM:DJVU/', $line, $m ) ) {
+			# Single-page
+			if ( $this->parseFormDjvu( $line, $xml ) ) {
+				$good = true;
+			} else {
+				return false;
+			}
+		} elseif ( preg_match( '/^( *)FORM:DJVM/', $line, $m ) ) {
+			# Multi-page
+			$parentLevel = strlen( $m[1] );
+			# Find DIRM
+			$line = strtok( "\n" );
+			while ( $line !== false ) {
+				$childLevel = strspn( $line, ' ' );
+				if ( $childLevel <= $parentLevel ) {
+					# End of chunk
+					break;
+				}
+
+				if ( preg_match( '/^ *DIRM.*indirect/', $line ) ) {
+					wfDebug( "Indirect multi-page DjVu document, bad for server!\n" );
+					return false;
+				}
+				if ( preg_match( '/^ *FORM:DJVU/', $line ) ) {
+					# Found page
+					if ( $this->parseFormDjvu( $line, $xml ) ) {
+						$good = true;
+					} else {
+						return false;
+					}
+				}
+				$line = strtok( "\n" );
+			}
+		}
+		if ( !$good ) {
+			return false;
+		}
+
+		$xml .= "</BODY>\n</DjVuXML>\n";
+		return $xml;
+	}
+
+	function parseFormDjvu( $line, &$xml ) {
+		$parentLevel = strspn( $line, ' ' );
+		$line = strtok( "\n" );
+
+		# Find INFO
+		while ( $line !== false ) {
+			$childLevel = strspn( $line, ' ' );
+			if ( $childLevel <= $parentLevel ) {
+				# End of chunk
+				break;
+			}
+
+			if ( preg_match( '/^ *INFO *\[\d*\] *DjVu *(\d+)x(\d+), *\w*, *(\d+) *dpi, *gamma=([0-9.-]+)/', $line, $m ) ) {
+				$xml .= Xml::tags( 'OBJECT', 
+					array(
+						#'data' => '',
+						#'type' => 'image/x.djvu',
+						'height' => $m[2],
+						'width' => $m[1],
+						#'usemap' => '',
+					), 
+					"\n" .
+					Xml::element( 'PARAM', array( 'name' => 'DPI', 'value' => $m[3] ) ) . "\n" .
+					Xml::element( 'PARAM', array( 'name' => 'GAMMA', 'value' => $m[4] ) ) . "\n"
+				) . "\n";
+				return true;
+			}
+			$line = strtok( "\n" );
+		}
+		# Not found
+		return false;
+	}
+}
+
+
+?>
Index: /MediaWiki/branches/1.11/includes/EditPage.php
===================================================================
--- /MediaWiki/branches/1.11/includes/EditPage.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/EditPage.php	(revision 1280)
@@ -0,0 +1,2049 @@
+<?php
+/**
+ * Contains the EditPage class
+ */
+
+/**
+ * The edit page/HTML interface (split from Article)
+ * The actual database and text munging is still in Article,
+ * but it should get easier to call those from alternate
+ * interfaces.
+ */
+class EditPage {
+	var $mArticle;
+	var $mTitle;
+	var $mMetaData = '';
+	var $isConflict = false;
+	var $isCssJsSubpage = false;
+	var $deletedSinceEdit = false;
+	var $formtype;
+	var $firsttime;
+	var $lastDelete;
+	var $mTokenOk = false;
+	var $mTriedSave = false;
+	var $tooBig = false;
+	var $kblength = false;
+	var $missingComment = false;
+	var $missingSummary = false;
+	var $allowBlankSummary = false;
+	var $autoSumm = '';
+	var $hookError = '';
+	var $mPreviewTemplates;
+
+	# Form values
+	var $save = false, $preview = false, $diff = false;
+	var $minoredit = false, $watchthis = false, $recreate = false;
+	var $textbox1 = '', $textbox2 = '', $summary = '';
+	var $edittime = '', $section = '', $starttime = '';
+	var $oldid = 0, $editintro = '', $scrolltop = null;
+
+	# Placeholders for text injection by hooks (must be HTML)
+	# extensions should take care to _append_ to the present value
+	public $editFormPageTop; // Before even the preview
+	public $editFormTextTop;
+	public $editFormTextAfterWarn;
+	public $editFormTextAfterTools;
+	public $editFormTextBottom;
+
+	/**
+	 * @todo document
+	 * @param $article
+	 */
+	function EditPage( $article ) {
+		$this->mArticle =& $article;
+		global $wgTitle;
+		$this->mTitle =& $wgTitle;
+
+		# Placeholders for text injection by hooks (empty per default)
+		$this->editFormPageTop =
+		$this->editFormTextTop =
+		$this->editFormTextAfterWarn =
+		$this->editFormTextAfterTools =
+		$this->editFormTextBottom = "";
+	}
+	
+	/**
+	 * Fetch initial editing page content.
+	 */
+	private function getContent( $def_text = '' ) {
+		global $wgOut, $wgRequest, $wgParser;
+
+		# Get variables from query string :P
+		$section = $wgRequest->getVal( 'section' );
+		$preload = $wgRequest->getVal( 'preload' );
+		$undoafter = $wgRequest->getVal( 'undoafter' );
+		$undo = $wgRequest->getVal( 'undo' );
+
+		wfProfileIn( __METHOD__ );
+
+		$text = '';
+		if( !$this->mTitle->exists() ) {
+			if ( $this->mTitle->getNamespace() == NS_MEDIAWIKI ) {
+				# If this is a system message, get the default text. 
+				$text = wfMsgWeirdKey ( $this->mTitle->getText() ) ;
+			} else {
+				# If requested, preload some text.
+				$text = $this->getPreloadedText( $preload );
+			}
+			# We used to put MediaWiki:Newarticletext here if
+			# $text was empty at this point.
+			# This is now shown above the edit box instead.
+		} else {
+			// FIXME: may be better to use Revision class directly
+			// But don't mess with it just yet. Article knows how to
+			// fetch the page record from the high-priority server,
+			// which is needed to guarantee we don't pick up lagged
+			// information.
+
+			$text = $this->mArticle->getContent();
+
+			if ( $undo > 0 && $undo > $undoafter ) {
+				# Undoing a specific edit overrides section editing; section-editing
+				# doesn't work with undoing.
+				if ( $undoafter ) {
+					$undorev = Revision::newFromId($undo);
+					$oldrev = Revision::newFromId($undoafter);
+				} else {
+					$undorev = Revision::newFromId($undo);
+					$oldrev = $undorev ? $undorev->getPrevious() : null;
+				}
+
+				#Sanity check, make sure it's the right page.
+				# Otherwise, $text will be left as-is.
+				if ( !is_null($undorev) && !is_null($oldrev) && $undorev->getPage()==$oldrev->getPage() && $undorev->getPage()==$this->mArticle->getID() ) {
+					$undorev_text = $undorev->getText();
+					$oldrev_text = $oldrev->getText();
+					$currev_text = $text;
+
+					#No use doing a merge if it's just a straight revert.
+					if ( $currev_text != $undorev_text ) {
+						$result = wfMerge($undorev_text, $oldrev_text, $currev_text, $text);
+					} else {
+						$text = $oldrev_text;
+						$result = true;
+					}
+				} else {
+					// Failed basic sanity checks.
+					// Older revisions may have been removed since the link
+					// was created, or we may simply have got bogus input.
+					$result = false;
+				}
+
+				if( $result ) {
+					# Inform the user of our success and set an automatic edit summary
+					$this->editFormPageTop .= $wgOut->parse( wfMsgNoTrans( 'undo-success' ) );
+					$firstrev = $oldrev->getNext();
+					# If we just undid one rev, use an autosummary
+					if ( $firstrev->mId == $undo ) {
+						$this->summary = wfMsgForContent('undo-summary', $undo, $undorev->getUserText());
+					}
+					$this->formtype = 'diff';
+				} else {
+					# Warn the user that something went wrong
+					$this->editFormPageTop .= $wgOut->parse( wfMsgNoTrans( 'undo-failure' ) );
+				}
+			} else if( $section != '' ) {
+				if( $section == 'new' ) {
+					$text = $this->getPreloadedText( $preload );
+				} else {
+					$text = $wgParser->getSection( $text, $section, $def_text );
+				}
+			}
+		}
+
+		wfProfileOut( __METHOD__ );
+		return $text;
+	}
+
+	/**
+	 * Get the contents of a page from its title and remove includeonly tags
+	 *
+	 * @param $preload String: the title of the page.
+	 * @return string The contents of the page.
+	 */
+	private function getPreloadedText($preload) {
+		if ( $preload === '' )
+			return '';
+		else {
+			$preloadTitle = Title::newFromText( $preload );
+			if ( isset( $preloadTitle ) && $preloadTitle->userCanRead() ) {
+				$rev=Revision::newFromTitle($preloadTitle);
+				if ( is_object( $rev ) ) {
+					$text = $rev->getText();
+					// TODO FIXME: AAAAAAAAAAA, this shouldn't be implementing
+					// its own mini-parser! -ævar
+					$text = preg_replace( '~</?includeonly>~', '', $text );
+					return $text;
+				} else
+					return '';
+			}
+		}
+	}
+
+	/**
+	 * This is the function that extracts metadata from the article body on the first view.
+	 * To turn the feature on, set $wgUseMetadataEdit = true ; in LocalSettings
+	 *  and set $wgMetadataWhitelist to the *full* title of the template whitelist
+	 */
+	function extractMetaDataFromArticle () {
+		global $wgUseMetadataEdit , $wgMetadataWhitelist , $wgLang ;
+		$this->mMetaData = '' ;
+		if ( !$wgUseMetadataEdit ) return ;
+		if ( $wgMetadataWhitelist == '' ) return ;
+		$s = '' ;
+		$t = $this->getContent();
+
+		# MISSING : <nowiki> filtering
+
+		# Categories and language links
+		$t = explode ( "\n" , $t ) ;
+		$catlow = strtolower ( $wgLang->getNsText ( NS_CATEGORY ) ) ;
+		$cat = $ll = array() ;
+		foreach ( $t AS $key => $x )
+		{
+			$y = trim ( strtolower ( $x ) ) ;
+			while ( substr ( $y , 0 , 2 ) == '[[' )
+			{
+				$y = explode ( ']]' , trim ( $x ) ) ;
+				$first = array_shift ( $y ) ;
+				$first = explode ( ':' , $first ) ;
+				$ns = array_shift ( $first ) ;
+				$ns = trim ( str_replace ( '[' , '' , $ns ) ) ;
+				if ( strlen ( $ns ) == 2 OR strtolower ( $ns ) == $catlow )
+				{
+					$add = '[[' . $ns . ':' . implode ( ':' , $first ) . ']]' ;
+					if ( strtolower ( $ns ) == $catlow ) $cat[] = $add ;
+					else $ll[] = $add ;
+					$x = implode ( ']]' , $y ) ;
+					$t[$key] = $x ;
+					$y = trim ( strtolower ( $x ) ) ;
+				}
+			}
+		}
+		if ( count ( $cat ) ) $s .= implode ( ' ' , $cat ) . "\n" ;
+		if ( count ( $ll ) ) $s .= implode ( ' ' , $ll ) . "\n" ;
+		$t = implode ( "\n" , $t ) ;
+
+		# Load whitelist
+		$sat = array () ; # stand-alone-templates; must be lowercase
+		$wl_title = Title::newFromText ( $wgMetadataWhitelist ) ;
+		$wl_article = new Article ( $wl_title ) ;
+		$wl = explode ( "\n" , $wl_article->getContent() ) ;
+		foreach ( $wl AS $x )
+		{
+			$isentry = false ;
+			$x = trim ( $x ) ;
+			while ( substr ( $x , 0 , 1 ) == '*' )
+			{
+				$isentry = true ;
+				$x = trim ( substr ( $x , 1 ) ) ;
+			}
+			if ( $isentry )
+			{
+				$sat[] = strtolower ( $x ) ;
+			}
+
+		}
+
+		# Templates, but only some
+		$t = explode ( '{{' , $t ) ;
+		$tl = array () ;
+		foreach ( $t AS $key => $x )
+		{
+			$y = explode ( '}}' , $x , 2 ) ;
+			if ( count ( $y ) == 2 )
+			{
+				$z = $y[0] ;
+				$z = explode ( '|' , $z ) ;
+				$tn = array_shift ( $z ) ;
+				if ( in_array ( strtolower ( $tn ) , $sat ) )
+				{
+					$tl[] = '{{' . $y[0] . '}}' ;
+					$t[$key] = $y[1] ;
+					$y = explode ( '}}' , $y[1] , 2 ) ;
+				}
+				else $t[$key] = '{{' . $x ;
+			}
+			else if ( $key != 0 ) $t[$key] = '{{' . $x ;
+			else $t[$key] = $x ;
+		}
+		if ( count ( $tl ) ) $s .= implode ( ' ' , $tl ) ;
+		$t = implode ( '' , $t ) ;
+
+		$t = str_replace ( "\n\n\n" , "\n" , $t ) ;
+		$this->mArticle->mContent = $t ;
+		$this->mMetaData = $s ;
+	}
+
+	function submit() {
+		$this->edit();
+	}
+
+	/**
+	 * This is the function that gets called for "action=edit". It
+	 * sets up various member variables, then passes execution to
+	 * another function, usually showEditForm()
+	 *
+	 * The edit form is self-submitting, so that when things like
+	 * preview and edit conflicts occur, we get the same form back
+	 * with the extra stuff added.  Only when the final submission
+	 * is made and all is well do we actually save and redirect to
+	 * the newly-edited page.
+	 */
+	function edit() {
+		global $wgOut, $wgUser, $wgRequest, $wgTitle;
+		global $wgEmailConfirmToEdit;
+
+		if ( ! wfRunHooks( 'AlternateEdit', array( &$this ) ) )
+			return;
+
+		$fname = 'EditPage::edit';
+		wfProfileIn( $fname );
+		wfDebug( "$fname: enter\n" );
+
+		// this is not an article
+		$wgOut->setArticleFlag(false);
+
+		$this->importFormData( $wgRequest );
+		$this->firsttime = false;
+
+		if( $this->live ) {
+			$this->livePreview();
+			wfProfileOut( $fname );
+			return;
+		}
+
+		if ( ! $this->mTitle->userCan( 'edit' ) ) {
+			wfDebug( "$fname: user can't edit\n" );
+			$wgOut->readOnlyPage( $this->getContent(), true );
+			wfProfileOut( $fname );
+			return;
+		}
+		wfDebug( "$fname: Checking blocks\n" );
+		if ( !$this->preview && !$this->diff && $wgUser->isBlockedFrom( $this->mTitle, !$this->save ) ) {
+			# When previewing, don't check blocked state - will get caught at save time.
+			# Also, check when starting edition is done against slave to improve performance.
+			wfDebug( "$fname: user is blocked\n" );
+			$this->blockedPage();
+			wfProfileOut( $fname );
+			return;
+		}
+		if ( !$wgUser->isAllowed('edit') ) {
+			if ( $wgUser->isAnon() ) {
+				wfDebug( "$fname: user must log in\n" );
+				$this->userNotLoggedInPage();
+				wfProfileOut( $fname );
+				return;
+			} else {
+				wfDebug( "$fname: read-only page\n" );
+				$wgOut->readOnlyPage( $this->getContent(), true );
+				wfProfileOut( $fname );
+				return;
+			}
+		}
+		if ($wgEmailConfirmToEdit && !$wgUser->isEmailConfirmed()) {
+			wfDebug("$fname: user must confirm e-mail address\n");
+			$this->userNotConfirmedPage();
+			wfProfileOut($fname);
+			return;
+		}
+		if ( !$this->mTitle->userCan( 'create' ) && !$this->mTitle->exists() ) {
+			wfDebug( "$fname: no create permission\n" );
+			$this->noCreatePermission();
+			wfProfileOut( $fname );
+			return;
+		}
+		if ( wfReadOnly() ) {
+			wfDebug( "$fname: read-only mode is engaged\n" );
+			if( $this->save || $this->preview ) {
+				$this->formtype = 'preview';
+			} else if ( $this->diff ) {
+				$this->formtype = 'diff';
+			} else {
+				$wgOut->readOnlyPage( $this->getContent() );
+				wfProfileOut( $fname );
+				return;
+			}
+		} else {
+			if ( $this->save ) {
+				$this->formtype = 'save';
+			} else if ( $this->preview ) {
+				$this->formtype = 'preview';
+			} else if ( $this->diff ) {
+				$this->formtype = 'diff';
+			} else { # First time through
+				$this->firsttime = true;
+				if( $this->previewOnOpen() ) {
+					$this->formtype = 'preview';
+				} else {
+					$this->extractMetaDataFromArticle () ;
+					$this->formtype = 'initial';
+				}
+			}
+		}
+
+		wfProfileIn( "$fname-business-end" );
+
+		$this->isConflict = false;
+		// css / js subpages of user pages get a special treatment
+		$this->isCssJsSubpage      = $wgTitle->isCssJsSubpage();
+		$this->isValidCssJsSubpage = $wgTitle->isValidCssJsSubpage();
+
+		/* Notice that we can't use isDeleted, because it returns true if article is ever deleted
+		 * no matter it's current state
+		 */
+		$this->deletedSinceEdit = false;
+		if ( $this->edittime != '' ) {
+			/* Note that we rely on logging table, which hasn't been always there,
+			 * but that doesn't matter, because this only applies to brand new
+			 * deletes. This is done on every preview and save request. Move it further down
+			 * to only perform it on saves
+			 */
+			if ( $this->mTitle->isDeleted() ) {
+				$this->lastDelete = $this->getLastDelete();
+				if ( !is_null($this->lastDelete) ) {
+					$deletetime = $this->lastDelete->log_timestamp;
+					if ( ($deletetime - $this->starttime) > 0 ) {
+						$this->deletedSinceEdit = true;
+					}
+				}
+			}
+		}
+
+		if(!$this->mTitle->getArticleID() && ('initial' == $this->formtype || $this->firsttime )) { # new article
+			$this->showIntro();
+		}
+		if( $this->mTitle->isTalkPage() ) {
+			$wgOut->addWikiText( wfMsg( 'talkpagetext' ) );
+		}
+
+		# Attempt submission here.  This will check for edit conflicts,
+		# and redundantly check for locked database, blocked IPs, etc.
+		# that edit() already checked just in case someone tries to sneak
+		# in the back door with a hand-edited submission URL.
+
+		if ( 'save' == $this->formtype ) {
+			if ( !$this->attemptSave() ) {
+				wfProfileOut( "$fname-business-end" );
+				wfProfileOut( $fname );
+				return;
+			}
+		}
+
+		# First time through: get contents, set time for conflict
+		# checking, etc.
+		if ( 'initial' == $this->formtype || $this->firsttime ) {
+			if ($this->initialiseForm() === false) {
+				$this->noSuchSectionPage();
+				wfProfileOut( "$fname-business-end" );
+				wfProfileOut( $fname );
+				return;
+			}
+			if( !$this->mTitle->getArticleId() ) 
+				wfRunHooks( 'EditFormPreloadText', array( &$this->textbox1, &$this->mTitle ) );
+		}
+
+		$this->showEditForm();
+		wfProfileOut( "$fname-business-end" );
+		wfProfileOut( $fname );
+	}
+
+	/**
+	 * Return true if this page should be previewed when the edit form
+	 * is initially opened.
+	 * @return bool
+	 * @private
+	 */
+	function previewOnOpen() {
+		global $wgUser;
+		return $this->section != 'new' &&
+			( ( $wgUser->getOption( 'previewonfirst' ) && $this->mTitle->exists() ) ||
+				( $this->mTitle->getNamespace() == NS_CATEGORY &&
+					!$this->mTitle->exists() ) );
+	}
+
+	/**
+	 * @todo document
+	 * @param $request
+	 */
+	function importFormData( &$request ) {
+		global $wgLang, $wgUser;
+		$fname = 'EditPage::importFormData';
+		wfProfileIn( $fname );
+
+		if( $request->wasPosted() ) {
+			# These fields need to be checked for encoding.
+			# Also remove trailing whitespace, but don't remove _initial_
+			# whitespace from the text boxes. This may be significant formatting.
+			$this->textbox1 = $this->safeUnicodeInput( $request, 'wpTextbox1' );
+			$this->textbox2 = $this->safeUnicodeInput( $request, 'wpTextbox2' );
+			$this->mMetaData = rtrim( $request->getText( 'metadata'   ) );
+			# Truncate for whole multibyte characters. +5 bytes for ellipsis
+			$this->summary   = $wgLang->truncate( $request->getText( 'wpSummary'  ), 250 );
+
+			$this->edittime = $request->getVal( 'wpEdittime' );
+			$this->starttime = $request->getVal( 'wpStarttime' );
+
+			$this->scrolltop = $request->getIntOrNull( 'wpScrolltop' );
+
+			if( is_null( $this->edittime ) ) {
+				# If the form is incomplete, force to preview.
+				wfDebug( "$fname: Form data appears to be incomplete\n" );
+				wfDebug( "POST DATA: " . var_export( $_POST, true ) . "\n" );
+				$this->preview  = true;
+			} else {
+				/* Fallback for live preview */
+				$this->preview = $request->getCheck( 'wpPreview' ) || $request->getCheck( 'wpLivePreview' );
+				$this->diff = $request->getCheck( 'wpDiff' );
+
+				// Remember whether a save was requested, so we can indicate
+				// if we forced preview due to session failure.
+				$this->mTriedSave = !$this->preview;
+
+				if ( $this->tokenOk( $request ) ) {
+					# Some browsers will not report any submit button
+					# if the user hits enter in the comment box.
+					# The unmarked state will be assumed to be a save,
+					# if the form seems otherwise complete.
+					wfDebug( "$fname: Passed token check.\n" );
+				} else if ( $this->diff ) {
+					# Failed token check, but only requested "Show Changes".
+					wfDebug( "$fname: Failed token check; Show Changes requested.\n" );
+				} else {
+					# Page might be a hack attempt posted from
+					# an external site. Preview instead of saving.
+					wfDebug( "$fname: Failed token check; forcing preview\n" );
+					$this->preview = true;
+				}
+			}
+			$this->save    = ! ( $this->preview OR $this->diff );
+			if( !preg_match( '/^\d{14}$/', $this->edittime )) {
+				$this->edittime = null;
+			}
+
+			if( !preg_match( '/^\d{14}$/', $this->starttime )) {
+				$this->starttime = null;
+			}
+
+			$this->recreate  = $request->getCheck( 'wpRecreate' );
+
+			$this->minoredit = $request->getCheck( 'wpMinoredit' );
+			$this->watchthis = $request->getCheck( 'wpWatchthis' );
+
+			# Don't force edit summaries when a user is editing their own user or talk page
+			if( ( $this->mTitle->mNamespace == NS_USER || $this->mTitle->mNamespace == NS_USER_TALK ) && $this->mTitle->getText() == $wgUser->getName() ) {
+				$this->allowBlankSummary = true;
+			} else {
+				$this->allowBlankSummary = $request->getBool( 'wpIgnoreBlankSummary' );
+			}
+
+			$this->autoSumm = $request->getText( 'wpAutoSummary' );	
+		} else {
+			# Not a posted form? Start with nothing.
+			wfDebug( "$fname: Not a posted form.\n" );
+			$this->textbox1  = '';
+			$this->textbox2  = '';
+			$this->mMetaData = '';
+			$this->summary   = '';
+			$this->edittime  = '';
+			$this->starttime = wfTimestampNow();
+			$this->preview   = false;
+			$this->save      = false;
+			$this->diff	 = false;
+			$this->minoredit = false;
+			$this->watchthis = false;
+			$this->recreate  = false;
+		}
+
+		$this->oldid = $request->getInt( 'oldid' );
+
+		# Section edit can come from either the form or a link
+		$this->section = $request->getVal( 'wpSection', $request->getVal( 'section' ) );
+
+		$this->live = $request->getCheck( 'live' );
+		$this->editintro = $request->getText( 'editintro' );
+
+		wfProfileOut( $fname );
+	}
+
+	/**
+	 * Make sure the form isn't faking a user's credentials.
+	 *
+	 * @param $request WebRequest
+	 * @return bool
+	 * @private
+	 */
+	function tokenOk( &$request ) {
+		global $wgUser;
+		if( $wgUser->isAnon() ) {
+			# Anonymous users may not have a session
+			# open. Check for suffix anyway.
+			$this->mTokenOk = ( EDIT_TOKEN_SUFFIX == $request->getVal( 'wpEditToken' ) );
+		} else {
+			$this->mTokenOk = $wgUser->matchEditToken( $request->getVal( 'wpEditToken' ) );
+		}
+		return $this->mTokenOk;
+	}
+
+	/** */
+	function showIntro() {
+		global $wgOut, $wgUser;
+		$addstandardintro=true;
+		if($this->editintro) {
+			$introtitle=Title::newFromText($this->editintro);
+			if(isset($introtitle) && $introtitle->userCanRead()) {
+				$rev=Revision::newFromTitle($introtitle);
+				if($rev) {
+					$wgOut->addSecondaryWikiText($rev->getText());
+					$addstandardintro=false;
+				}
+			}
+		}
+		if($addstandardintro) {
+			if ( $wgUser->isLoggedIn() )
+				$wgOut->addWikiText( wfMsg( 'newarticletext' ) );
+			else
+				$wgOut->addWikiText( wfMsg( 'newarticletextanon' ) );
+		}
+	}
+
+	/**
+	 * Attempt submission
+	 * @return bool false if output is done, true if the rest of the form should be displayed
+	 */
+	function attemptSave() {
+		global $wgSpamRegex, $wgFilterCallback, $wgUser, $wgOut;
+		global $wgMaxArticleSize;
+
+		$fname = 'EditPage::attemptSave';
+		wfProfileIn( $fname );
+		wfProfileIn( "$fname-checks" );
+
+		if( !wfRunHooks( 'EditPage::attemptSave', array( &$this ) ) )
+		{
+			wfDebug( "Hook 'EditPage::attemptSave' aborted article saving" );
+			return false;
+		}
+
+		# Reintegrate metadata
+		if ( $this->mMetaData != '' ) $this->textbox1 .= "\n" . $this->mMetaData ;
+		$this->mMetaData = '' ;
+
+		# Check for spam
+		$matches = array();
+		if ( $wgSpamRegex && preg_match( $wgSpamRegex, $this->textbox1, $matches ) ) {
+			$this->spamPage ( $matches[0] );
+			wfProfileOut( "$fname-checks" );
+			wfProfileOut( $fname );
+			return false;
+		}
+		if ( $wgFilterCallback && $wgFilterCallback( $this->mTitle, $this->textbox1, $this->section ) ) {
+			# Error messages or other handling should be performed by the filter function
+			wfProfileOut( $fname );
+			wfProfileOut( "$fname-checks" );
+			return false;
+		}
+		if ( !wfRunHooks( 'EditFilter', array( $this, $this->textbox1, $this->section, &$this->hookError ) ) ) {
+			# Error messages etc. could be handled within the hook...
+			wfProfileOut( $fname );
+			wfProfileOut( "$fname-checks" );
+			return false;
+		} elseif( $this->hookError != '' ) {
+			# ...or the hook could be expecting us to produce an error
+			wfProfileOut( "$fname-checks " );
+			wfProfileOut( $fname );
+			return true;
+		}
+		if ( $wgUser->isBlockedFrom( $this->mTitle, false ) ) {
+			# Check block state against master, thus 'false'.
+			$this->blockedPage();
+			wfProfileOut( "$fname-checks" );
+			wfProfileOut( $fname );
+			return false;
+		}
+		$this->kblength = (int)(strlen( $this->textbox1 ) / 1024);
+		if ( $this->kblength > $wgMaxArticleSize ) {
+			// Error will be displayed by showEditForm()
+			$this->tooBig = true;
+			wfProfileOut( "$fname-checks" );
+			wfProfileOut( $fname );
+			return true;
+		}
+
+		if ( !$wgUser->isAllowed('edit') ) {
+			if ( $wgUser->isAnon() ) {
+				$this->userNotLoggedInPage();
+				wfProfileOut( "$fname-checks" );
+				wfProfileOut( $fname );
+				return false;
+			}
+			else {
+				$wgOut->readOnlyPage();
+				wfProfileOut( "$fname-checks" );
+				wfProfileOut( $fname );
+				return false;
+			}
+		}
+
+		if ( wfReadOnly() ) {
+			$wgOut->readOnlyPage();
+			wfProfileOut( "$fname-checks" );
+			wfProfileOut( $fname );
+			return false;
+		}
+		if ( $wgUser->pingLimiter() ) {
+			$wgOut->rateLimited();
+			wfProfileOut( "$fname-checks" );
+			wfProfileOut( $fname );
+			return false;
+		}
+
+		# If the article has been deleted while editing, don't save it without
+		# confirmation
+		if ( $this->deletedSinceEdit && !$this->recreate ) {
+			wfProfileOut( "$fname-checks" );
+			wfProfileOut( $fname );
+			return true;
+		}
+
+		wfProfileOut( "$fname-checks" );
+
+		# If article is new, insert it.
+		$aid = $this->mTitle->getArticleID( GAID_FOR_UPDATE );
+		if ( 0 == $aid ) {
+
+			// Late check for create permission, just in case *PARANOIA*
+			if ( !$this->mTitle->userCan( 'create' ) ) {
+				wfDebug( "$fname: no create permission\n" );
+				$this->noCreatePermission();
+				wfProfileOut( $fname );
+				return;
+			}
+
+			# Don't save a new article if it's blank.
+			if ( ( '' == $this->textbox1 ) ) {
+					$wgOut->redirect( $this->mTitle->getFullURL() );
+					wfProfileOut( $fname );
+					return false;
+			}
+
+			$isComment=($this->section=='new');
+			$this->mArticle->insertNewArticle( $this->textbox1, $this->summary,
+				$this->minoredit, $this->watchthis, false, $isComment);
+
+			wfProfileOut( $fname );
+			return false;
+		}
+
+		# Article exists. Check for edit conflict.
+
+		$this->mArticle->clear(); # Force reload of dates, etc.
+		$this->mArticle->forUpdate( true ); # Lock the article
+
+		wfDebug("timestamp: {$this->mArticle->getTimestamp()}, edittime: {$this->edittime}\n");
+
+		if( $this->mArticle->getTimestamp() != $this->edittime ) {
+			$this->isConflict = true;
+			if( $this->section == 'new' ) {
+				if( $this->mArticle->getUserText() == $wgUser->getName() &&
+					$this->mArticle->getComment() == $this->summary ) {
+					// Probably a duplicate submission of a new comment.
+					// This can happen when squid resends a request after
+					// a timeout but the first one actually went through.
+					wfDebug( "EditPage::editForm duplicate new section submission; trigger edit conflict!\n" );
+				} else {
+					// New comment; suppress conflict.
+					$this->isConflict = false;
+					wfDebug( "EditPage::editForm conflict suppressed; new section\n" );
+				}
+			}
+		}
+		$userid = $wgUser->getID();
+
+		if ( $this->isConflict) {
+			wfDebug( "EditPage::editForm conflict! getting section '$this->section' for time '$this->edittime' (article time '" .
+				$this->mArticle->getTimestamp() . "'\n" );
+			$text = $this->mArticle->replaceSection( $this->section, $this->textbox1, $this->summary, $this->edittime);
+		}
+		else {
+			wfDebug( "EditPage::editForm getting section '$this->section'\n" );
+			$text = $this->mArticle->replaceSection( $this->section, $this->textbox1, $this->summary);
+		}
+		if( is_null( $text ) ) {
+			wfDebug( "EditPage::editForm activating conflict; section replace failed.\n" );
+			$this->isConflict = true;
+			$text = $this->textbox1;
+		}
+
+		# Suppress edit conflict with self, except for section edits where merging is required.
+		if ( ( $this->section == '' ) && ( 0 != $userid ) && ( $this->mArticle->getUser() == $userid ) ) {
+			wfDebug( "Suppressing edit conflict, same user.\n" );
+			$this->isConflict = false;
+		} else {
+			# switch from section editing to normal editing in edit conflict
+			if($this->isConflict) {
+				# Attempt merge
+				if( $this->mergeChangesInto( $text ) ){
+					// Successful merge! Maybe we should tell the user the good news?
+					$this->isConflict = false;
+					wfDebug( "Suppressing edit conflict, successful merge.\n" );
+				} else {
+					$this->section = '';
+					$this->textbox1 = $text;
+					wfDebug( "Keeping edit conflict, failed merge.\n" );
+				}
+			}
+		}
+
+		if ( $this->isConflict ) {
+			wfProfileOut( $fname );
+			return true;
+		}
+
+		$oldtext = $this->mArticle->getContent();
+
+		# Handle the user preference to force summaries here, but not for null edits
+		if( $this->section != 'new' && !$this->allowBlankSummary && $wgUser->getOption( 'forceeditsummary')
+			&&  0 != strcmp($oldtext, $text) && !Article::getRedirectAutosummary( $text )) {
+			if( md5( $this->summary ) == $this->autoSumm ) {
+				$this->missingSummary = true;
+				wfProfileOut( $fname );
+				return( true );
+			}
+		}
+
+		#And a similar thing for new sections
+		if( $this->section == 'new' && !$this->allowBlankSummary && $wgUser->getOption( 'forceeditsummary' ) ) {
+			if (trim($this->summary) == '') {
+				$this->missingSummary = true;
+				wfProfileOut( $fname );
+				return( true );
+			}
+		}
+
+		# All's well
+		wfProfileIn( "$fname-sectionanchor" );
+		$sectionanchor = '';
+		if( $this->section == 'new' ) {
+			if ( $this->textbox1 == '' ) {
+				$this->missingComment = true;
+				return true;
+			}
+			if( $this->summary != '' ) {
+				$sectionanchor = $this->sectionAnchor( $this->summary );
+			}
+		} elseif( $this->section != '' ) {
+			# Try to get a section anchor from the section source, redirect to edited section if header found
+			# XXX: might be better to integrate this into Article::replaceSection
+			# for duplicate heading checking and maybe parsing
+			$hasmatch = preg_match( "/^ *([=]{1,6})(.*?)(\\1) *\\n/i", $this->textbox1, $matches );
+			# we can't deal with anchors, includes, html etc in the header for now,
+			# headline would need to be parsed to improve this
+			if($hasmatch and strlen($matches[2]) > 0) {
+				$sectionanchor = $this->sectionAnchor( $matches[2] );
+			}
+		}
+		wfProfileOut( "$fname-sectionanchor" );
+
+		// Save errors may fall down to the edit form, but we've now
+		// merged the section into full text. Clear the section field
+		// so that later submission of conflict forms won't try to
+		// replace that into a duplicated mess.
+		$this->textbox1 = $text;
+		$this->section = '';
+
+		// Check for length errors again now that the section is merged in
+		$this->kblength = (int)(strlen( $text ) / 1024);
+		if ( $this->kblength > $wgMaxArticleSize ) {
+			$this->tooBig = true;
+			wfProfileOut( $fname );
+			return true;
+		}
+
+		# update the article here
+		if( $this->mArticle->updateArticle( $text, $this->summary, $this->minoredit,
+			$this->watchthis, '', $sectionanchor ) ) {
+			wfProfileOut( $fname );
+			return false;
+		} else {
+			$this->isConflict = true;
+		}
+		wfProfileOut( $fname );
+		return true;
+	}
+
+	/**
+	 * Initialise form fields in the object
+	 * Called on the first invocation, e.g. when a user clicks an edit link
+	 */
+	function initialiseForm() {
+		$this->edittime = $this->mArticle->getTimestamp();
+		$this->summary = '';
+		$this->textbox1 = $this->getContent(false);
+		if ($this->textbox1 === false) return false;
+
+		if ( !$this->mArticle->exists() && $this->mArticle->mTitle->getNamespace() == NS_MEDIAWIKI )
+			$this->textbox1 = wfMsgWeirdKey( $this->mArticle->mTitle->getText() );
+		wfProxyCheck();
+		return true;
+	}
+
+	/**
+	 * Send the edit form and related headers to $wgOut
+	 * @param $formCallback Optional callable that takes an OutputPage
+	 *                      parameter; will be called during form output
+	 *                      near the top, for captchas and the like.
+	 */
+	function showEditForm( $formCallback=null ) {
+		global $wgOut, $wgUser, $wgLang, $wgContLang, $wgMaxArticleSize;
+
+		$fname = 'EditPage::showEditForm';
+		wfProfileIn( $fname );
+
+		$sk = $wgUser->getSkin();
+
+		wfRunHooks( 'EditPage::showEditForm:initial', array( &$this ) ) ;
+
+		$wgOut->setRobotpolicy( 'noindex,nofollow' );
+
+		# Enabled article-related sidebar, toplinks, etc.
+		$wgOut->setArticleRelated( true );
+
+		if ( $this->isConflict ) {
+			$s = wfMsg( 'editconflict', $this->mTitle->getPrefixedText() );
+			$wgOut->setPageTitle( $s );
+			$wgOut->addWikiText( wfMsg( 'explainconflict' ) );
+
+			$this->textbox2 = $this->textbox1;
+			$this->textbox1 = $this->getContent();
+			$this->edittime = $this->mArticle->getTimestamp();
+		} else {
+
+			if( $this->section != '' ) {
+				if( $this->section == 'new' ) {
+					$s = wfMsg('editingcomment', $this->mTitle->getPrefixedText() );
+				} else {
+					$s = wfMsg('editingsection', $this->mTitle->getPrefixedText() );
+					$matches = array();
+					if( !$this->summary && !$this->preview && !$this->diff ) {
+						preg_match( "/^(=+)(.+)\\1/mi",
+							$this->textbox1,
+							$matches );
+						if( !empty( $matches[2] ) ) {
+							$this->summary = "/* ". trim($matches[2])." */ ";
+						}
+					}
+				}
+			} else {
+				$s = wfMsg( 'editing', $this->mTitle->getPrefixedText() );
+			}
+			$wgOut->setPageTitle( $s );
+
+			if ( $this->missingComment ) {
+				$wgOut->addWikiText( wfMsg( 'missingcommenttext' ) );
+			}
+
+			if( $this->missingSummary && $this->section != 'new' ) {
+				$wgOut->addWikiText( wfMsg( 'missingsummary' ) );
+			}
+
+			if( $this->missingSummary && $this->section == 'new' ) {
+				$wgOut->addWikiText( wfMsg( 'missingcommentheader' ) );
+			}
+
+			if( !$this->hookError == '' ) {
+				$wgOut->addWikiText( $this->hookError );
+			}
+
+			if ( !$this->checkUnicodeCompliantBrowser() ) {
+				$wgOut->addWikiText( wfMsg( 'nonunicodebrowser') );
+			}
+			if ( isset( $this->mArticle ) && isset( $this->mArticle->mRevision ) ) {
+			// Let sysop know that this will make private content public if saved
+				if( $this->mArticle->mRevision->isDeleted( Revision::DELETED_TEXT ) ) {
+					$wgOut->addWikiText( wfMsg( 'rev-deleted-text-view' ) );
+				}
+				if( !$this->mArticle->mRevision->isCurrent() ) {
+					$this->mArticle->setOldSubtitle( $this->mArticle->mRevision->getId() );
+					$wgOut->addWikiText( wfMsg( 'editingold' ) );
+				}
+			}
+		}
+
+		if( wfReadOnly() ) {
+			$wgOut->addWikiText( wfMsg( 'readonlywarning' ) );
+		} elseif( $wgUser->isAnon() && $this->formtype != 'preview' ) {
+			$wgOut->addWikiText( wfMsg( 'anoneditwarning' ) );
+		} else {
+			if( $this->isCssJsSubpage && $this->formtype != 'preview' ) {
+				# Check the skin exists
+				if( $this->isValidCssJsSubpage ) {
+					$wgOut->addWikiText( wfMsg( 'usercssjsyoucanpreview' ) );
+				} else {
+					$wgOut->addWikiText( wfMsg( 'userinvalidcssjstitle', $this->mTitle->getSkinFromCssJsSubpage() ) );
+				}
+			}
+		}
+
+		if( $this->mTitle->getNamespace() == NS_MEDIAWIKI ) {
+			# Show a warning if editing an interface message
+			$wgOut->addWikiText( wfMsg( 'editinginterface' ) );
+		} elseif( $this->mTitle->isProtected( 'edit' ) ) {
+			# Is the title semi-protected?
+			if( $this->mTitle->isSemiProtected() ) {
+				$notice = wfMsg( 'semiprotectedpagewarning' );
+				if( wfEmptyMsg( 'semiprotectedpagewarning', $notice ) || $notice == '-' )
+					$notice = '';
+			} else {
+			# Then it must be protected based on static groups (regular)
+				$notice = wfMsg( 'protectedpagewarning' );
+			}
+			$wgOut->addWikiText( $notice );
+		}
+		if ( $this->mTitle->isCascadeProtected() ) {
+			# Is this page under cascading protection from some source pages?
+			list($cascadeSources, $restrictions) = $this->mTitle->getCascadeProtectionSources();
+			if ( count($cascadeSources) > 0 ) {
+				# Explain, and list the titles responsible
+				$notice = wfMsgExt( 'cascadeprotectedwarning', array('parsemag'), count($cascadeSources) ) . "\n";
+				foreach( $cascadeSources as $id => $page )
+					$notice .= '* [[:' . $page->getPrefixedText() . "]]\n";
+				}
+			$wgOut->addWikiText( $notice );
+		}
+
+		if ( $this->kblength === false ) {
+			$this->kblength = (int)(strlen( $this->textbox1 ) / 1024);
+		}
+		if ( $this->tooBig || $this->kblength > $wgMaxArticleSize ) {
+			$wgOut->addWikiText( wfMsg( 'longpageerror', $wgLang->formatNum( $this->kblength ), $wgMaxArticleSize ) );
+		} elseif( $this->kblength > 29 ) {
+			$wgOut->addWikiText( wfMsg( 'longpagewarning', $wgLang->formatNum( $this->kblength ) ) );
+		}
+
+		#need to parse the preview early so that we know which templates are used,
+		#otherwise users with "show preview after edit box" will get a blank list
+		if ( $this->formtype == 'preview' ) {
+			$previewOutput = $this->getPreviewText();
+		}
+
+		$rows = $wgUser->getIntOption( 'rows' );
+		$cols = $wgUser->getIntOption( 'cols' );
+
+		$ew = $wgUser->getOption( 'editwidth' );
+		if ( $ew ) $ew = " style=\"width:100%\"";
+		else $ew = '';
+
+		$q = 'action=submit';
+		#if ( "no" == $redirect ) { $q .= "&redirect=no"; }
+		$action = $this->mTitle->escapeLocalURL( $q );
+
+		$summary = wfMsg('summary');
+		$subject = wfMsg('subject');
+
+		$cancel = $sk->makeKnownLink( $this->mTitle->getPrefixedText(),
+				wfMsgExt('cancel', array('parseinline')) );
+		$edithelpurl = Skin::makeInternalOrExternalUrl( wfMsgForContent( 'edithelppage' ));
+		$edithelp = '<a target="helpwindow" href="'.$edithelpurl.'">'.
+			htmlspecialchars( wfMsg( 'edithelp' ) ).'</a> '.
+			htmlspecialchars( wfMsg( 'newwindow' ) );
+
+		global $wgRightsText;
+		$copywarn = "<div id=\"editpage-copywarn\">\n" .
+			wfMsg( $wgRightsText ? 'copyrightwarning' : 'copyrightwarning2',
+				'[[' . wfMsgForContent( 'copyrightpage' ) . ']]',
+				$wgRightsText ) . "\n</div>";
+
+		if( $wgUser->getOption('showtoolbar') and !$this->isCssJsSubpage ) {
+			# prepare toolbar for edit buttons
+			$toolbar = $this->getEditToolbar();
+		} else {
+			$toolbar = '';
+		}
+
+		// activate checkboxes if user wants them to be always active
+		if( !$this->preview && !$this->diff ) {
+			# Sort out the "watch" checkbox
+			if( $wgUser->getOption( 'watchdefault' ) ) {
+				# Watch all edits
+				$this->watchthis = true;
+			} elseif( $wgUser->getOption( 'watchcreations' ) && !$this->mTitle->exists() ) {
+				# Watch creations
+				$this->watchthis = true;
+			} elseif( $this->mTitle->userIsWatching() ) {
+				# Already watched
+				$this->watchthis = true;
+			}
+
+			if( $wgUser->getOption( 'minordefault' ) ) $this->minoredit = true;
+		}
+
+		$wgOut->addHTML( $this->editFormPageTop );
+
+		if ( $wgUser->getOption( 'previewontop' ) ) {
+
+			if ( 'preview' == $this->formtype ) {
+				$this->showPreview( $previewOutput );
+			} else {
+				$wgOut->addHTML( '<div id="wikiPreview"></div>' );
+			}
+
+			if ( 'diff' == $this->formtype ) {
+				$wgOut->addHTML( $this->getDiff() );
+			}
+		}
+
+
+		$wgOut->addHTML( $this->editFormTextTop );
+
+		# if this is a comment, show a subject line at the top, which is also the edit summary.
+		# Otherwise, show a summary field at the bottom
+		$summarytext = htmlspecialchars( $wgContLang->recodeForEdit( $this->summary ) ); # FIXME
+		if( $this->section == 'new' ) {
+			$commentsubject="<span id='wpSummaryLabel'><label for='wpSummary'>{$subject}:</label></span>\n<div class='editOptions'>\n<input tabindex='1' type='text' value=\"$summarytext\" name='wpSummary' id='wpSummary' maxlength='200' size='60' /><br />";
+			$editsummary = '';
+			$subjectpreview = $summarytext && $this->preview ? "<div class=\"mw-summary-preview\">".wfMsg('subject-preview').':'.$sk->commentBlock( $this->summary, $this->mTitle )."</div>\n" : '';
+			$summarypreview = '';
+		} else {
+			$commentsubject = '';
+			$editsummary="<span id='wpSummaryLabel'><label for='wpSummary'>{$summary}:</label></span>\n<div class='editOptions'>\n<input tabindex='2' type='text' value=\"$summarytext\" name='wpSummary' id='wpSummary' maxlength='200' size='60' /><br />";
+			$summarypreview = $summarytext && $this->preview ? "<div class=\"mw-summary-preview\">".wfMsg('summary-preview').':'.$sk->commentBlock( $this->summary, $this->mTitle )."</div>\n" : '';
+			$subjectpreview = '';
+		}
+
+		# Set focus to the edit box on load, except on preview or diff, where it would interfere with the display
+		if( !$this->preview && !$this->diff ) {
+			$wgOut->setOnloadHandler( 'document.editform.wpTextbox1.focus()' );
+		}
+		$templates = ($this->preview || $this->section) ? $this->mPreviewTemplates : $this->mArticle->getUsedTemplates();
+		$formattedtemplates = $sk->formatTemplates( $templates, $this->preview, $this->section != '');
+
+		global $wgUseMetadataEdit ;
+		if ( $wgUseMetadataEdit ) {
+			$metadata = $this->mMetaData ;
+			$metadata = htmlspecialchars( $wgContLang->recodeForEdit( $metadata ) ) ;
+			$top = wfMsgWikiHtml( 'metadata_help' );
+			$metadata = $top . "<textarea name='metadata' rows='3' cols='{$cols}'{$ew}>{$metadata}</textarea>" ;
+		}
+		else $metadata = "" ;
+
+		$hidden = '';
+		$recreate = '';
+		if ($this->deletedSinceEdit) {
+			if ( 'save' != $this->formtype ) {
+				$wgOut->addWikiText( wfMsg('deletedwhileediting'));
+			} else {
+				// Hide the toolbar and edit area, use can click preview to get it back
+				// Add an confirmation checkbox and explanation.
+				$toolbar = '';
+				$hidden = 'type="hidden" style="display:none;"';
+				$recreate = $wgOut->parse( wfMsg( 'confirmrecreate',  $this->lastDelete->user_name , $this->lastDelete->log_comment ));
+				$recreate .=
+					"<br /><input tabindex='1' type='checkbox' value='1' name='wpRecreate' id='wpRecreate' />".
+					"<label for='wpRecreate' title='".wfMsg('tooltip-recreate')."'>". wfMsg('recreate')."</label>";
+			}
+		}
+
+		$tabindex = 2;
+
+		$checkboxes = self::getCheckboxes( $tabindex, $sk,
+			array( 'minor' => $this->minoredit, 'watch' => $this->watchthis ) );
+
+		$checkboxhtml = implode( $checkboxes, "\n" );
+
+		$buttons = $this->getEditButtons( $tabindex );
+		$buttonshtml = implode( $buttons, "\n" );
+
+		$safemodehtml = $this->checkUnicodeCompliantBrowser()
+			? '' : Xml::hidden( 'safemode', '1' );
+
+		$wgOut->addHTML( <<<END
+{$toolbar}
+<form id="editform" name="editform" method="post" action="$action" enctype="multipart/form-data">
+END
+);
+
+		if( is_callable( $formCallback ) ) {
+			call_user_func_array( $formCallback, array( &$wgOut ) );
+		}
+
+		wfRunHooks( 'EditPage::showEditForm:fields', array( &$this, &$wgOut ) );
+
+		// Put these up at the top to ensure they aren't lost on early form submission
+		$wgOut->addHTML( "
+<input type='hidden' value=\"" . htmlspecialchars( $this->section ) . "\" name=\"wpSection\" />
+<input type='hidden' value=\"{$this->starttime}\" name=\"wpStarttime\" />\n
+<input type='hidden' value=\"{$this->edittime}\" name=\"wpEdittime\" />\n
+<input type='hidden' value=\"{$this->scrolltop}\" name=\"wpScrolltop\" id=\"wpScrolltop\" />\n" );
+
+		$wgOut->addHTML( <<<END
+$recreate
+{$commentsubject}
+{$subjectpreview}
+<textarea tabindex='1' accesskey="," name="wpTextbox1" id="wpTextbox1" rows='{$rows}'
+cols='{$cols}'{$ew} $hidden>
+END
+. htmlspecialchars( $this->safeUnicodeOutput( $this->textbox1 ) ) .
+"
+</textarea>
+		" );
+
+		$wgOut->addWikiText( $copywarn );
+		$wgOut->addHTML( $this->editFormTextAfterWarn );
+		$wgOut->addHTML( "
+{$metadata}
+{$editsummary}
+{$summarypreview}
+{$checkboxhtml}
+{$safemodehtml}
+");
+
+		$wgOut->addHTML(
+"<div class='editButtons'>
+{$buttonshtml}
+	<span class='editHelp'>{$cancel} | {$edithelp}</span>
+</div><!-- editButtons -->
+</div><!-- editOptions -->");
+
+		$wgOut->addHtml( '<div class="mw-editTools">' );
+		$wgOut->addWikiText( wfMsgForContent( 'edittools' ) );
+		$wgOut->addHtml( '</div>' );
+
+		$wgOut->addHTML( $this->editFormTextAfterTools );
+
+		$wgOut->addHTML( "
+<div class='templatesUsed'>
+{$formattedtemplates}
+</div>
+" );
+
+		/**
+		 * To make it harder for someone to slip a user a page
+		 * which submits an edit form to the wiki without their
+		 * knowledge, a random token is associated with the login
+		 * session. If it's not passed back with the submission,
+		 * we won't save the page, or render user JavaScript and
+		 * CSS previews.
+		 *
+		 * For anon editors, who may not have a session, we just
+		 * include the constant suffix to prevent editing from
+		 * broken text-mangling proxies.
+		 */
+		if ( $wgUser->isLoggedIn() )
+			$token = htmlspecialchars( $wgUser->editToken() );
+		else
+			$token = EDIT_TOKEN_SUFFIX;
+		$wgOut->addHTML( "\n<input type='hidden' value=\"$token\" name=\"wpEditToken\" />\n" );
+
+
+		# If a blank edit summary was previously provided, and the appropriate
+		# user preference is active, pass a hidden tag here. This will stop the
+		# user being bounced back more than once in the event that a summary
+		# is not required.
+		if( $this->missingSummary ) {
+			$wgOut->addHTML( "<input type=\"hidden\" name=\"wpIgnoreBlankSummary\" value=\"1\" />\n" );
+		}
+
+		# For a bit more sophisticated detection of blank summaries, hash the
+		# automatic one and pass that in a hidden field.
+		$autosumm = $this->autoSumm ? $this->autoSumm : md5( $this->summary );
+		$wgOut->addHtml( wfHidden( 'wpAutoSummary', $autosumm ) );
+
+		if ( $this->isConflict ) {
+			$wgOut->addWikiText( '==' . wfMsg( "yourdiff" ) . '==' );
+
+			$de = new DifferenceEngine( $this->mTitle );
+			$de->setText( $this->textbox2, $this->textbox1 );
+			$de->showDiff( wfMsg( "yourtext" ), wfMsg( "storedversion" ) );
+
+			$wgOut->addWikiText( '==' . wfMsg( "yourtext" ) . '==' );
+			$wgOut->addHTML( "<textarea tabindex=6 id='wpTextbox2' name=\"wpTextbox2\" rows='{$rows}' cols='{$cols}' wrap='virtual'>"
+				. htmlspecialchars( $this->safeUnicodeOutput( $this->textbox2 ) ) . "\n</textarea>" );
+		}
+		$wgOut->addHTML( $this->editFormTextBottom );
+		$wgOut->addHTML( "</form>\n" );
+		if ( !$wgUser->getOption( 'previewontop' ) ) {
+
+			if ( $this->formtype == 'preview') {
+				$this->showPreview( $previewOutput );
+			} else {
+				$wgOut->addHTML( '<div id="wikiPreview"></div>' );
+			}
+
+			if ( $this->formtype == 'diff') {
+				$wgOut->addHTML( $this->getDiff() );
+			}
+
+		}
+
+		wfProfileOut( $fname );
+	}
+
+	/**
+	 * Append preview output to $wgOut.
+	 * Includes category rendering if this is a category page.
+	 *
+	 * @param string $text The HTML to be output for the preview.
+	 */
+	private function showPreview( $text ) {
+		global $wgOut;
+
+		$wgOut->addHTML( '<div id="wikiPreview">' );
+		if($this->mTitle->getNamespace() == NS_CATEGORY) {
+			$this->mArticle->openShowCategory();
+		}
+		$wgOut->addHTML( $text );
+		if($this->mTitle->getNamespace() == NS_CATEGORY) {
+			$this->mArticle->closeShowCategory();
+		}
+		$wgOut->addHTML( '</div>' );
+	}
+
+	/**
+	 * Live Preview lets us fetch rendered preview page content and
+	 * add it to the page without refreshing the whole page.
+	 * If not supported by the browser it will fall through to the normal form
+	 * submission method.
+	 *
+	 * This function outputs a script tag to support live preview, and
+	 * returns an onclick handler which should be added to the attributes
+	 * of the preview button
+	 */
+	function doLivePreviewScript() {
+		global $wgStylePath, $wgJsMimeType, $wgStyleVersion, $wgOut, $wgTitle;
+		$wgOut->addHTML( '<script type="'.$wgJsMimeType.'" src="' .
+			htmlspecialchars( "$wgStylePath/common/preview.js?$wgStyleVersion" ) .
+			'"></script>' . "\n" );
+		$liveAction = $wgTitle->getLocalUrl( 'action=submit&wpPreview=true&live=true' );
+		return "return !livePreview(" .
+			"getElementById('wikiPreview')," .
+			"editform.wpTextbox1.value," .
+			'"' . $liveAction . '"' . ")";
+	}
+
+	function getLastDelete() {
+		$dbr = wfGetDB( DB_SLAVE );
+		$fname = 'EditPage::getLastDelete';
+		$res = $dbr->select(
+			array( 'logging', 'user' ),
+			array( 'log_type',
+			       'log_action',
+			       'log_timestamp',
+			       'log_user',
+			       'log_namespace',
+			       'log_title',
+			       'log_comment',
+			       'log_params',
+			       'user_name', ),
+			array( 'log_namespace' => $this->mTitle->getNamespace(),
+			       'log_title' => $this->mTitle->getDBkey(),
+			       'log_type' => 'delete',
+			       'log_action' => 'delete',
+			       'user_id=log_user' ),
+			$fname,
+			array( 'LIMIT' => 1, 'ORDER BY' => 'log_timestamp DESC' ) );
+
+		if($dbr->numRows($res) == 1) {
+			while ( $x = $dbr->fetchObject ( $res ) )
+				$data = $x;
+			$dbr->freeResult ( $res ) ;
+		} else {
+			$data = null;
+		}
+		return $data;
+	}
+
+	/**
+	 * @todo document
+	 */
+	function getPreviewText() {
+		global $wgOut, $wgUser, $wgTitle, $wgParser, $wgRequest;
+
+		$fname = 'EditPage::getPreviewText';
+		wfProfileIn( $fname );
+
+		if ($wgUser->getOption( 'showtoolbar' ) && !$wgUser->getOption( 'riched_disable' ) && !$this->previewOnOpen() ) {
+
+			$oldTextBox1 = $this->textbox1;
+		    $this->importFormData( $wgRequest );
+        }
+        
+		if ( $this->mTriedSave && !$this->mTokenOk ) {
+			$msg = 'session_fail_preview';
+		} else {
+			$msg = 'previewnote';
+		}
+		$previewhead = '<h2>' . htmlspecialchars( wfMsg( 'preview' ) ) . "</h2>\n" .
+			"<div class='previewnote'>" . $wgOut->parse( wfMsg( $msg ) ) . "</div>\n";
+		if ( $this->isConflict ) {
+			$previewhead.='<h2>' . htmlspecialchars( wfMsg( 'previewconflict' ) ) . "</h2>\n";
+		}
+
+		$parserOptions = ParserOptions::newFromUser( $wgUser );
+		$parserOptions->setEditSection( false );
+
+		global $wgRawHtml;
+		if( $wgRawHtml && !$this->mTokenOk ) {
+			// Could be an offsite preview attempt. This is very unsafe if
+			// HTML is enabled, as it could be an attack.
+			return $wgOut->parse( "<div class='previewnote'>" .
+				wfMsg( 'session_fail_preview_html' ) . "</div>" );
+		}
+
+		# don't parse user css/js, show message about preview
+		# XXX: stupid php bug won't let us use $wgTitle->isCssJsSubpage() here
+
+		if ( $this->isCssJsSubpage ) {
+			if(preg_match("/\\.css$/", $wgTitle->getText() ) ) {
+				$previewtext = wfMsg('usercsspreview');
+			} else if(preg_match("/\\.js$/", $wgTitle->getText() ) ) {
+				$previewtext = wfMsg('userjspreview');
+			}
+			$parserOptions->setTidy(true);
+			$parserOutput = $wgParser->parse( $previewtext , $wgTitle, $parserOptions );
+			$wgOut->addHTML( $parserOutput->mText );
+			wfProfileOut( $fname );
+			return $previewhead;
+		} else {
+			$toparse = $this->textbox1;
+
+			# If we're adding a comment, we need to show the
+			# summary as the headline
+			if($this->section=="new" && $this->summary!="") {
+				$toparse="== {$this->summary} ==\n\n".$toparse;
+			}
+
+			if ( $this->mMetaData != "" ) $toparse .= "\n" . $this->mMetaData ;
+			$parserOptions->setTidy(true);
+			$parserOutput = $wgParser->parse( $this->mArticle->preSaveTransform( $toparse ) ."\n\n",
+					$wgTitle, $parserOptions );
+
+			$previewHTML = $parserOutput->getText();
+			$wgOut->addParserOutputNoText( $parserOutput );
+
+			foreach ( $parserOutput->getTemplates() as $ns => $template)
+				foreach ( array_keys( $template ) as $dbk)
+					$this->mPreviewTemplates[] = Title::makeTitle($ns, $dbk);
+
+            if ($wgUser->getOption( 'showtoolbar' ) && !$wgUser->getOption( 'riched_disable' ) && !$this->previewOnOpen() ) {
+	   	       $this->textbox1 = $oldTextBox1;
+            }
+			wfProfileOut( $fname );
+			return $previewhead . $previewHTML;
+		}		
+	}
+
+	/**
+	 * Call the stock "user is blocked" page
+	 */
+	function blockedPage() {
+		global $wgOut, $wgUser;
+		$wgOut->blockedPage( false ); # Standard block notice on the top, don't 'return'
+
+		# If the user made changes, preserve them when showing the markup
+		# (This happens when a user is blocked during edit, for instance)
+		$first = $this->firsttime || ( !$this->save && $this->textbox1 == '' );
+		if( $first ) {
+			$source = $this->mTitle->exists() ? $this->getContent() : false;
+		} else {
+			$source = $this->textbox1;
+		}
+
+		# Spit out the source or the user's modified version
+		if( $source !== false ) {
+			$rows = $wgUser->getOption( 'rows' );
+			$cols = $wgUser->getOption( 'cols' );
+			$attribs = array( 'id' => 'wpTextbox1', 'name' => 'wpTextbox1', 'cols' => $cols, 'rows' => $rows, 'readonly' => 'readonly' );
+			$wgOut->addHtml( '<hr />' );
+			$wgOut->addWikiText( wfMsg( $first ? 'blockedoriginalsource' : 'blockededitsource', $this->mTitle->getPrefixedText() ) );
+			$wgOut->addHtml( wfOpenElement( 'textarea', $attribs ) . htmlspecialchars( $source ) . wfCloseElement( 'textarea' ) );
+		}
+	}
+
+	/**
+	 * Produce the stock "please login to edit pages" page
+	 */
+	function userNotLoggedInPage() {
+		global $wgUser, $wgOut;
+		$skin = $wgUser->getSkin();
+
+		$loginTitle = SpecialPage::getTitleFor( 'Userlogin' );
+		$loginLink = $skin->makeKnownLinkObj( $loginTitle, wfMsgHtml( 'loginreqlink' ), 'returnto=' . $this->mTitle->getPrefixedUrl() );
+
+		$wgOut->setPageTitle( wfMsg( 'whitelistedittitle' ) );
+		$wgOut->setRobotPolicy( 'noindex,nofollow' );
+		$wgOut->setArticleRelated( false );
+
+		$wgOut->addHtml( wfMsgWikiHtml( 'whitelistedittext', $loginLink ) );
+		$wgOut->returnToMain( false, $this->mTitle->getPrefixedUrl() );
+	}
+
+	/**
+	 * Creates a basic error page which informs the user that
+	 * they have to validate their email address before being
+	 * allowed to edit.
+	 */
+	function userNotConfirmedPage() {
+		global $wgOut;
+
+		$wgOut->setPageTitle( wfMsg( 'confirmedittitle' ) );
+		$wgOut->setRobotPolicy( 'noindex,nofollow' );
+		$wgOut->setArticleRelated( false );
+
+		$wgOut->addWikiText( wfMsg( 'confirmedittext' ) );
+		$wgOut->returnToMain( false );
+	}
+
+	/**
+	 * Creates a basic error page which informs the user that
+	 * they have attempted to edit a nonexistant section.
+	 */
+	function noSuchSectionPage() {
+		global $wgOut;
+
+		$wgOut->setPageTitle( wfMsg( 'nosuchsectiontitle' ) );
+		$wgOut->setRobotPolicy( 'noindex,nofollow' );
+		$wgOut->setArticleRelated( false );
+
+		$wgOut->addWikiText( wfMsg( 'nosuchsectiontext', $this->section ) );
+		$wgOut->returnToMain( false );
+	}
+
+	/**
+	 * Produce the stock "your edit contains spam" page
+	 *
+	 * @param $match Text which triggered one or more filters
+	 */
+	function spamPage( $match = false ) {
+		global $wgOut;
+
+		$wgOut->setPageTitle( wfMsg( 'spamprotectiontitle' ) );
+		$wgOut->setRobotPolicy( 'noindex,nofollow' );
+		$wgOut->setArticleRelated( false );
+
+		$wgOut->addWikiText( wfMsg( 'spamprotectiontext' ) );
+		if ( $match )
+			$wgOut->addWikiText( wfMsg( 'spamprotectionmatch', "<nowiki>{$match}</nowiki>" ) );
+
+		$wgOut->returnToMain( false );
+	}
+
+	/**
+	 * @private
+	 * @todo document
+	 */
+	function mergeChangesInto( &$editText ){
+		$fname = 'EditPage::mergeChangesInto';
+		wfProfileIn( $fname );
+
+		$db = wfGetDB( DB_MASTER );
+
+		// This is the revision the editor started from
+		$baseRevision = Revision::loadFromTimestamp(
+			$db, $this->mArticle->mTitle, $this->edittime );
+		if( is_null( $baseRevision ) ) {
+			wfProfileOut( $fname );
+			return false;
+		}
+		$baseText = $baseRevision->getText();
+
+		// The current state, we want to merge updates into it
+		$currentRevision =  Revision::loadFromTitle(
+			$db, $this->mArticle->mTitle );
+		if( is_null( $currentRevision ) ) {
+			wfProfileOut( $fname );
+			return false;
+		}
+		$currentText = $currentRevision->getText();
+
+		$result = '';
+		if( wfMerge( $baseText, $editText, $currentText, $result ) ){
+			$editText = $result;
+			wfProfileOut( $fname );
+			return true;
+		} else {
+			wfProfileOut( $fname );
+			return false;
+		}
+	}
+
+	/**
+	 * Check if the browser is on a blacklist of user-agents known to
+	 * mangle UTF-8 data on form submission. Returns true if Unicode
+	 * should make it through, false if it's known to be a problem.
+	 * @return bool
+	 * @private
+	 */
+	function checkUnicodeCompliantBrowser() {
+		global $wgBrowserBlackList;
+		if( empty( $_SERVER["HTTP_USER_AGENT"] ) ) {
+			// No User-Agent header sent? Trust it by default...
+			return true;
+		}
+		$currentbrowser = $_SERVER["HTTP_USER_AGENT"];
+		foreach ( $wgBrowserBlackList as $browser ) {
+			if ( preg_match($browser, $currentbrowser) ) {
+				return false;
+			}
+		}
+		return true;
+	}
+
+	/**
+	 * Format an anchor fragment as it would appear for a given section name
+	 * @param string $text
+	 * @return string
+	 * @private
+	 */
+	function sectionAnchor( $text ) {
+		$headline = Sanitizer::decodeCharReferences( $text );
+		# strip out HTML
+		$headline = preg_replace( '/<.*?' . '>/', '', $headline );
+		$headline = trim( $headline );
+		$sectionanchor = '#' . urlencode( str_replace( ' ', '_', $headline ) );
+		$replacearray = array(
+			'%3A' => ':',
+			'%' => '.'
+		);
+		return str_replace(
+			array_keys( $replacearray ),
+			array_values( $replacearray ),
+			$sectionanchor );
+	}
+
+	/**
+	 * Shows a bulletin board style toolbar for common editing functions.
+	 * It can be disabled in the user preferences.
+	 * The necessary JavaScript code can be found in style/wikibits.js.
+	 */
+	function getEditToolbar() {
+		global $wgStylePath, $wgContLang, $wgJsMimeType;
+
+		/**
+		 * toolarray an array of arrays which each include the filename of
+		 * the button image (without path), the opening tag, the closing tag,
+		 * and optionally a sample text that is inserted between the two when no
+		 * selection is highlighted.
+		 * The tip text is shown when the user moves the mouse over the button.
+		 *
+		 * Already here are accesskeys (key), which are not used yet until someone
+		 * can figure out a way to make them work in IE. However, we should make
+		 * sure these keys are not defined on the edit page.
+		 */
+		$toolarray = array(
+			array(	'image'	=> 'button_bold.png',
+				'id'	=> 'mw-editbutton-bold',
+				'open'	=> '\\\'\\\'\\\'',
+				'close'	=> '\\\'\\\'\\\'',
+				'sample'=> wfMsg('bold_sample'),
+				'tip'	=> wfMsg('bold_tip'),
+				'key'	=> 'B'
+			),
+			array(	'image'	=> 'button_italic.png',
+				'id'	=> 'mw-editbutton-italic',
+				'open'	=> '\\\'\\\'',
+				'close'	=> '\\\'\\\'',
+				'sample'=> wfMsg('italic_sample'),
+				'tip'	=> wfMsg('italic_tip'),
+				'key'	=> 'I'
+			),
+			array(	'image'	=> 'button_link.png',
+				'id'	=> 'mw-editbutton-link',
+				'open'	=> '[[',
+				'close'	=> ']]',
+				'sample'=> wfMsg('link_sample'),
+				'tip'	=> wfMsg('link_tip'),
+				'key'	=> 'L'
+			),
+			array(	'image'	=> 'button_extlink.png',
+				'id'	=> 'mw-editbutton-extlink',
+				'open'	=> '[',
+				'close'	=> ']',
+				'sample'=> wfMsg('extlink_sample'),
+				'tip'	=> wfMsg('extlink_tip'),
+				'key'	=> 'X'
+			),
+			array(	'image'	=> 'button_headline.png',
+				'id'	=> 'mw-editbutton-headline',
+				'open'	=> "\\n== ",
+				'close'	=> " ==\\n",
+				'sample'=> wfMsg('headline_sample'),
+				'tip'	=> wfMsg('headline_tip'),
+				'key'	=> 'H'
+			),
+			array(	'image'	=> 'button_image.png',
+				'id'	=> 'mw-editbutton-image',
+				'open'	=> '[['.$wgContLang->getNsText(NS_IMAGE).":",
+				'close'	=> ']]',
+				'sample'=> wfMsg('image_sample'),
+				'tip'	=> wfMsg('image_tip'),
+				'key'	=> 'D'
+			),
+			array(	'image'	=> 'button_media.png',
+				'id'	=> 'mw-editbutton-media',
+				'open'	=> '[['.$wgContLang->getNsText(NS_MEDIA).':',
+				'close'	=> ']]',
+				'sample'=> wfMsg('media_sample'),
+				'tip'	=> wfMsg('media_tip'),
+				'key'	=> 'M'
+			),
+			array(	'image'	=> 'button_math.png',
+				'id'	=> 'mw-editbutton-math',
+				'open'	=> "<math>",
+				'close'	=> "<\\/math>",
+				'sample'=> wfMsg('math_sample'),
+				'tip'	=> wfMsg('math_tip'),
+				'key'	=> 'C'
+			),
+			array(	'image'	=> 'button_nowiki.png',
+				'id'	=> 'mw-editbutton-nowiki',
+				'open'	=> "<nowiki>",
+				'close'	=> "<\\/nowiki>",
+				'sample'=> wfMsg('nowiki_sample'),
+				'tip'	=> wfMsg('nowiki_tip'),
+				'key'	=> 'N'
+			),
+			array(	'image'	=> 'button_sig.png',
+				'id'	=> 'mw-editbutton-signature',
+				'open'	=> '--~~~~',
+				'close'	=> '',
+				'sample'=> '',
+				'tip'	=> wfMsg('sig_tip'),
+				'key'	=> 'Y'
+			),
+			array(	'image'	=> 'button_hr.png',
+				'id'	=> 'mw-editbutton-hr',
+				'open'	=> "\\n----\\n",
+				'close'	=> '',
+				'sample'=> '',
+				'tip'	=> wfMsg('hr_tip'),
+				'key'	=> 'R'
+			)
+		);
+		$toolbar = "<div id='toolbar'>\n";
+		$toolbar.="<script type='$wgJsMimeType'>\n/*<![CDATA[*/\n";
+
+		foreach($toolarray as $tool) {
+
+			$cssId = $tool['id'];
+			$image=$wgStylePath.'/common/images/'.$tool['image'];
+			$open=$tool['open'];
+			$close=$tool['close'];
+			$sample = wfEscapeJsString( $tool['sample'] );
+
+			// Note that we use the tip both for the ALT tag and the TITLE tag of the image.
+			// Older browsers show a "speedtip" type message only for ALT.
+			// Ideally these should be different, realistically they
+			// probably don't need to be.
+			$tip = wfEscapeJsString( $tool['tip'] );
+
+			#$key = $tool["key"];
+
+			$toolbar.="addButton('$image','$tip','$open','$close','$sample','$cssId');\n";
+		}
+
+		$toolbar.="/*]]>*/\n</script>";
+		$toolbar.="\n</div>";
+		return $toolbar;
+	}
+
+	/**
+	 * Returns an array of html code of the following checkboxes:
+	 * minor and watch
+	 *
+	 * @param $tabindex Current tabindex
+	 * @param $skin Skin object
+	 * @param $checked Array of checkbox => bool, where bool indicates the checked
+	 *                 status of the checkbox
+	 *
+	 * @return array
+	 */
+	public static function getCheckboxes( &$tabindex, $skin, $checked ) {
+		global $wgUser;
+
+		$checkboxes = array();
+
+		$checkboxes['minor'] = '';
+		$minorLabel = wfMsgExt('minoredit', array('parseinline'));
+		if ( $wgUser->isAllowed('minoredit') ) {
+			$attribs = array(
+				'tabindex'  => ++$tabindex,
+				'accesskey' => wfMsg( 'accesskey-minoredit' ),
+				'id'        => 'wpMinoredit',
+			);
+			$checkboxes['minor'] =
+				Xml::check( 'wpMinoredit', $checked['minor'], $attribs ) .
+				"&nbsp;<label for='wpMinoredit'".$skin->tooltipAndAccesskey('minoredit').">{$minorLabel}</label>";
+		}
+
+		$watchLabel = wfMsgExt('watchthis', array('parseinline'));
+		$checkboxes['watch'] = '';
+		if ( $wgUser->isLoggedIn() ) {
+			$attribs = array(
+				'tabindex'  => ++$tabindex,
+				'accesskey' => wfMsg( 'accesskey-watch' ),
+				'id'        => 'wpWatchthis',
+			);
+			$checkboxes['watch'] =
+				Xml::check( 'wpWatchthis', $checked['watch'], $attribs ) .
+				"&nbsp;<label for='wpWatchthis'".$skin->tooltipAndAccesskey('watch').">{$watchLabel}</label>";
+		}
+		return $checkboxes;
+	}
+
+	/**
+	 * Returns an array of html code of the following buttons:
+	 * save, diff, preview and live
+	 *
+	 * @param $tabindex Current tabindex
+	 *
+	 * @return array
+	 */
+	public function getEditButtons(&$tabindex) {
+		global $wgLivePreview, $wgUser;
+
+		$buttons = array();
+
+		$temp = array(
+			'id'        => 'wpSave',
+			'name'      => 'wpSave',
+			'type'      => 'submit',
+			'tabindex'  => ++$tabindex,
+			'value'     => wfMsg('savearticle'),
+			'accesskey' => wfMsg('accesskey-save'),
+			'title'     => wfMsg( 'tooltip-save' ).' ['.wfMsg( 'accesskey-save' ).']',
+		);
+		$buttons['save'] = wfElement('input', $temp, '');
+
+		++$tabindex; // use the same for preview and live preview
+		if ( $wgLivePreview && $wgUser->getOption( 'uselivepreview' ) ) {
+			$temp = array(
+				'id'        => 'wpPreview',
+				'name'      => 'wpPreview',
+				'type'      => 'submit',
+				'tabindex'  => $tabindex,
+				'value'     => wfMsg('showpreview'),
+				'accesskey' => '',
+				'title'     => wfMsg( 'tooltip-preview' ).' ['.wfMsg( 'accesskey-preview' ).']',
+				'style'     => 'display: none;',
+			);
+			$buttons['preview'] = wfElement('input', $temp, '');
+
+			$temp = array(
+				'id'        => 'wpLivePreview',
+				'name'      => 'wpLivePreview',
+				'type'      => 'submit',
+				'tabindex'  => $tabindex,
+				'value'     => wfMsg('showlivepreview'),
+				'accesskey' => wfMsg('accesskey-preview'),
+				'title'     => '',
+				'onclick'   => $this->doLivePreviewScript(),
+			);
+			$buttons['live'] = wfElement('input', $temp, '');
+		} else {
+			$temp = array(
+				'id'        => 'wpPreview',
+				'name'      => 'wpPreview',
+				'type'      => 'submit',
+				'tabindex'  => $tabindex,
+				'value'     => wfMsg('showpreview'),
+				'accesskey' => wfMsg('accesskey-preview'),
+				'title'     => wfMsg( 'tooltip-preview' ).' ['.wfMsg( 'accesskey-preview' ).']',
+			);
+			$buttons['preview'] = wfElement('input', $temp, '');
+			$buttons['live'] = '';
+		}
+
+		$temp = array(
+			'id'        => 'wpDiff',
+			'name'      => 'wpDiff',
+			'type'      => 'submit',
+			'tabindex'  => ++$tabindex,
+			'value'     => wfMsg('showdiff'),
+			'accesskey' => wfMsg('accesskey-diff'),
+			'title'     => wfMsg( 'tooltip-diff' ).' ['.wfMsg( 'accesskey-diff' ).']',
+		);
+		$buttons['diff'] = wfElement('input', $temp, '');
+
+		return $buttons;
+	}
+
+	/**
+	 * Output preview text only. This can be sucked into the edit page
+	 * via JavaScript, and saves the server time rendering the skin as
+	 * well as theoretically being more robust on the client (doesn't
+	 * disturb the edit box's undo history, won't eat your text on
+	 * failure, etc).
+	 *
+	 * @todo This doesn't include category or interlanguage links.
+	 *       Would need to enhance it a bit, <s>maybe wrap them in XML
+	 *       or something...</s> that might also require more skin
+	 *       initialization, so check whether that's a problem.
+	 */
+	function livePreview() {
+		global $wgOut;
+		$wgOut->disable();
+		header( 'Content-type: text/xml; charset=utf-8' );
+		header( 'Cache-control: no-cache' );
+
+		$s =
+		'<?xml version="1.0" encoding="UTF-8" ?>' . "\n" .
+		Xml::openElement( 'livepreview' ) .
+		Xml::element( 'preview', null, $this->getPreviewText() ) .
+		Xml::element( 'br', array( 'style' => 'clear: both;' ) ) .
+		Xml::closeElement( 'livepreview' );
+		echo $s;
+	}
+
+
+	/**
+	 * Get a diff between the current contents of the edit box and the
+	 * version of the page we're editing from.
+	 *
+	 * If this is a section edit, we'll replace the section as for final
+	 * save and then make a comparison.
+	 *
+	 * @return string HTML
+	 */
+	function getDiff() {
+		$oldtext = $this->mArticle->fetchContent();
+		$newtext = $this->mArticle->replaceSection(
+			$this->section, $this->textbox1, $this->summary, $this->edittime );
+		$newtext = $this->mArticle->preSaveTransform( $newtext );
+		$oldtitle = wfMsgExt( 'currentrev', array('parseinline') );
+		$newtitle = wfMsgExt( 'yourtext', array('parseinline') );
+		if ( $oldtext !== false  || $newtext != '' ) {
+			$de = new DifferenceEngine( $this->mTitle );
+			$de->setText( $oldtext, $newtext );
+			$difftext = $de->getDiff( $oldtitle, $newtitle );
+		} else {
+			$difftext = '';
+		}
+
+		return '<div id="wikiDiff">' . $difftext . '</div>';
+	}
+
+	/**
+	 * Filter an input field through a Unicode de-armoring process if it
+	 * came from an old browser with known broken Unicode editing issues.
+	 *
+	 * @param WebRequest $request
+	 * @param string $field
+	 * @return string
+	 * @private
+	 */
+	function safeUnicodeInput( $request, $field ) {
+		$text = rtrim( $request->getText( $field ) );
+		return $request->getBool( 'safemode' )
+			? $this->unmakesafe( $text )
+			: $text;
+	}
+
+	/**
+	 * Filter an output field through a Unicode armoring process if it is
+	 * going to an old browser with known broken Unicode editing issues.
+	 *
+	 * @param string $text
+	 * @return string
+	 * @private
+	 */
+	function safeUnicodeOutput( $text ) {
+		global $wgContLang;
+		$codedText = $wgContLang->recodeForEdit( $text );
+		return $this->checkUnicodeCompliantBrowser()
+			? $codedText
+			: $this->makesafe( $codedText );
+	}
+
+	/**
+	 * A number of web browsers are known to corrupt non-ASCII characters
+	 * in a UTF-8 text editing environment. To protect against this,
+	 * detected browsers will be served an armored version of the text,
+	 * with non-ASCII chars converted to numeric HTML character references.
+	 *
+	 * Preexisting such character references will have a 0 added to them
+	 * to ensure that round-trips do not alter the original data.
+	 *
+	 * @param string $invalue
+	 * @return string
+	 * @private
+	 */
+	function makesafe( $invalue ) {
+		// Armor existing references for reversability.
+		$invalue = strtr( $invalue, array( "&#x" => "&#x0" ) );
+
+		$bytesleft = 0;
+		$result = "";
+		$working = 0;
+		for( $i = 0; $i < strlen( $invalue ); $i++ ) {
+			$bytevalue = ord( $invalue{$i} );
+			if( $bytevalue <= 0x7F ) { //0xxx xxxx
+				$result .= chr( $bytevalue );
+				$bytesleft = 0;
+			} elseif( $bytevalue <= 0xBF ) { //10xx xxxx
+				$working = $working << 6;
+				$working += ($bytevalue & 0x3F);
+				$bytesleft--;
+				if( $bytesleft <= 0 ) {
+					$result .= "&#x" . strtoupper( dechex( $working ) ) . ";";
+				}
+			} elseif( $bytevalue <= 0xDF ) { //110x xxxx
+				$working = $bytevalue & 0x1F;
+				$bytesleft = 1;
+			} elseif( $bytevalue <= 0xEF ) { //1110 xxxx
+				$working = $bytevalue & 0x0F;
+				$bytesleft = 2;
+			} else { //1111 0xxx
+				$working = $bytevalue & 0x07;
+				$bytesleft = 3;
+			}
+		}
+		return $result;
+	}
+
+	/**
+	 * Reverse the previously applied transliteration of non-ASCII characters
+	 * back to UTF-8. Used to protect data from corruption by broken web browsers
+	 * as listed in $wgBrowserBlackList.
+	 *
+	 * @param string $invalue
+	 * @return string
+	 * @private
+	 */
+	function unmakesafe( $invalue ) {
+		$result = "";
+		for( $i = 0; $i < strlen( $invalue ); $i++ ) {
+			if( ( substr( $invalue, $i, 3 ) == "&#x" ) && ( $invalue{$i+3} != '0' ) ) {
+				$i += 3;
+				$hexstring = "";
+				do {
+					$hexstring .= $invalue{$i};
+					$i++;
+				} while( ctype_xdigit( $invalue{$i} ) && ( $i < strlen( $invalue ) ) );
+
+				// Do some sanity checks. These aren't needed for reversability,
+				// but should help keep the breakage down if the editor
+				// breaks one of the entities whilst editing.
+				if ((substr($invalue,$i,1)==";") and (strlen($hexstring) <= 6)) {
+					$codepoint = hexdec($hexstring);
+					$result .= codepointToUtf8( $codepoint );
+				} else {
+					$result .= "&#x" . $hexstring . substr( $invalue, $i, 1 );
+				}
+			} else {
+				$result .= substr( $invalue, $i, 1 );
+			}
+		}
+		// reverse the transform that we made for reversability reasons.
+		return strtr( $result, array( "&#x0" => "&#x" ) );
+	}
+
+	function noCreatePermission() {
+		global $wgOut;
+		$wgOut->setPageTitle( wfMsg( 'nocreatetitle' ) );
+		$wgOut->addWikiText( wfMsg( 'nocreatetext' ) );
+	}
+
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/Exception.php
===================================================================
--- /MediaWiki/branches/1.11/includes/Exception.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/Exception.php	(revision 1280)
@@ -0,0 +1,238 @@
+<?php
+
+/**
+ * MediaWiki exception
+ * @addtogroup Exception
+ */
+class MWException extends Exception
+{
+	function useOutputPage() {
+		return !empty( $GLOBALS['wgFullyInitialised'] ) && 
+			!empty( $GLOBALS['wgArticle'] ) && !empty( $GLOBALS['wgTitle'] );
+	}
+
+	function useMessageCache() {
+		global $wgLang;
+		return is_object( $wgLang );
+	}
+
+	/** Get a message from i18n */
+	function msg( $key, $fallback /*[, params...] */ ) {
+		$args = array_slice( func_get_args(), 2 );
+		if ( $this->useMessageCache() ) {
+			return wfMsgReal( $key, $args );
+		} else {
+			return wfMsgReplaceArgs( $fallback, $args );
+		}
+	}
+
+	/* If wgShowExceptionDetails, return a HTML message with a backtrace to the error. */
+	function getHTML() {
+		global $wgShowExceptionDetails;
+		if( $wgShowExceptionDetails ) {
+			return '<p>' . htmlspecialchars( $this->getMessage() ) . 
+				'</p><p>Backtrace:</p><p>' . nl2br( htmlspecialchars( $this->getTraceAsString() ) ) .
+				"</p>\n";
+		} else {
+			return "<p>Set <b><tt>\$wgShowExceptionDetails = true;</tt></b> " .
+				"in LocalSettings.php to show detailed debugging information.</p>";
+		}
+	}
+
+	/* If wgShowExceptionDetails, return a text message with a backtrace to the error */
+	function getText() {
+		global $wgShowExceptionDetails;
+		if( $wgShowExceptionDetails ) {
+			return $this->getMessage() .
+				"\nBacktrace:\n" . $this->getTraceAsString() . "\n";
+		} else {
+			return "<p>Set <tt>\$wgShowExceptionDetails = true;</tt> " .
+				"in LocalSettings.php to show detailed debugging information.</p>";
+		}
+	}
+
+	/* Return titles of this error page */
+	function getPageTitle() {
+		if ( $this->useMessageCache() ) {
+			return wfMsg( 'internalerror' );
+		} else {
+			global $wgSitename;
+			return "$wgSitename error";
+		}
+	}
+
+	/** Return the requested URL and point to file and line number from which the
+	 * exception occured
+	 */
+	function getLogMessage() {
+		global $wgRequest;
+		$file = $this->getFile();
+		$line = $this->getLine();
+		$message = $this->getMessage();
+		return $wgRequest->getRequestURL() . " Exception from line $line of $file: $message";
+	}
+
+	/** Output the exception report using HTML */
+	function reportHTML() {
+		global $wgOut;
+		if ( $this->useOutputPage() ) {
+			$wgOut->setPageTitle( $this->getPageTitle() );
+			$wgOut->setRobotpolicy( "noindex,nofollow" );
+			$wgOut->setArticleRelated( false );
+			$wgOut->enableClientCache( false );
+			$wgOut->redirect( '' );
+			$wgOut->clearHTML();
+			$wgOut->addHTML( $this->getHTML() );
+			$wgOut->output();
+		} else {
+			echo $this->htmlHeader();
+			echo $this->getHTML();
+			echo $this->htmlFooter();
+		}
+	}
+
+	/** Print the exception report using text */
+	function reportText() {
+		echo $this->getText();
+	}
+
+	/* Output a report about the exception and takes care of formatting.
+	 * It will be either HTML or plain text based on $wgCommandLineMode.
+	 */
+	function report() {
+		global $wgCommandLineMode;
+		if ( $wgCommandLineMode ) {
+			$this->reportText();
+		} else {
+			$log = $this->getLogMessage();
+			if ( $log ) {
+				wfDebugLog( 'exception', $log );
+			}
+			$this->reportHTML();
+		}
+	}
+
+	function htmlHeader() {
+		global $wgLogo, $wgSitename, $wgOutputEncoding;
+
+		if ( !headers_sent() ) {
+			header( 'HTTP/1.0 500 Internal Server Error' );
+			header( 'Content-type: text/html; charset='.$wgOutputEncoding );
+			/* Don't cache error pages!  They cause no end of trouble... */
+			header( 'Cache-control: none' );
+			header( 'Pragma: nocache' );
+		}
+		$title = $this->getPageTitle();
+		echo "<html>
+		<head>
+		<title>$title</title>
+		</head>
+		<body>
+		<h1><img src='$wgLogo' style='float:left;margin-right:1em' alt=''>$title</h1>
+		";
+	}
+
+	function htmlFooter() {
+		echo "</body></html>";
+	}
+
+}
+
+/**
+ * Exception class which takes an HTML error message, and does not
+ * produce a backtrace. Replacement for OutputPage::fatalError().
+ * @addtogroup Exception
+ */
+class FatalError extends MWException {
+	function getHTML() {
+		return $this->getMessage();
+	}
+
+	function getText() {
+		return $this->getMessage();
+	}
+}
+
+/**
+ * @addtogroup Exception
+ */
+class ErrorPageError extends MWException {
+	public $title, $msg;
+	
+	/**
+	 * Note: these arguments are keys into wfMsg(), not text!
+	 */
+	function __construct( $title, $msg ) {
+		$this->title = $title;
+		$this->msg = $msg;
+		parent::__construct( wfMsg( $msg ) );
+	}
+
+	function report() {
+		global $wgOut;
+		$wgOut->showErrorPage( $this->title, $this->msg );
+		$wgOut->output();
+	}
+}
+
+/**
+ * Install an exception handler for MediaWiki exception types.
+ */
+function wfInstallExceptionHandler() {
+	set_exception_handler( 'wfExceptionHandler' );
+}
+
+/**
+ * Report an exception to the user
+ */
+function wfReportException( Exception $e ) {
+	 if ( $e instanceof MWException ) {
+		 try {
+			 $e->report();
+		 } catch ( Exception $e2 ) {
+			 // Exception occurred from within exception handler
+			 // Show a simpler error message for the original exception,
+			 // don't try to invoke report()
+			 $message = "MediaWiki internal error.\n\n" .
+			 "Original exception: " . $e->__toString() .
+			 "\n\nException caught inside exception handler: " .
+			 $e2->__toString() . "\n";
+
+			 if ( !empty( $GLOBALS['wgCommandLineMode'] ) ) {
+				 echo $message;
+			 } else {
+				 echo nl2br( htmlspecialchars( $message ) ). "\n";
+			 }
+		 }
+	 } else {
+		 echo $e->__toString();
+	 }
+}
+
+/**
+ * Exception handler which simulates the appropriate catch() handling:
+ *
+ *   try {
+ *       ...
+ *   } catch ( MWException $e ) {
+ *       $e->report();
+ *   } catch ( Exception $e ) {
+ *       echo $e->__toString();
+ *   }
+ */
+function wfExceptionHandler( $e ) {
+	global $wgFullyInitialised;
+	wfReportException( $e );
+
+	// Final cleanup, similar to wfErrorExit()
+	if ( $wgFullyInitialised ) {
+		try {
+			wfLogProfilingData(); // uses $wgRequest, hence the $wgFullyInitialised condition
+		} catch ( Exception $e ) {}
+	}
+
+	// Exit value should be nonzero for the benefit of shell jobs
+	exit( 1 );
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/Exif.php
===================================================================
--- /MediaWiki/branches/1.11/includes/Exif.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/Exif.php	(revision 1280)
@@ -0,0 +1,1134 @@
+<?php
+/**
+ * @addtogroup Media
+ *
+ * @author Ævar Arnfjörð Bjarmason <avarab@gmail.com>
+ * @copyright Copyright © 2005, Ævar Arnfjörð Bjarmason
+ * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @see http://exif.org/Exif2-2.PDF The Exif 2.2 specification
+ */
+
+/**
+ * @todo document (e.g. one-sentence class-overview description)
+ * @addtogroup Media
+ */
+class Exif {
+	//@{
+	/* @var array
+	 * @private
+	 */
+
+	/**#@+
+	 * Exif tag type definition
+	 */
+	const BYTE      = 1;    # An 8-bit (1-byte) unsigned integer.
+	const ASCII     = 2;    # An 8-bit byte containing one 7-bit ASCII code. The final byte is terminated with NULL.
+	const SHORT     = 3;    # A 16-bit (2-byte) unsigned integer.
+	const LONG      = 4;    # A 32-bit (4-byte) unsigned integer.
+	const RATIONAL  = 5;    # Two LONGs. The first LONG is the numerator and the second LONG expresses the denominator
+	const UNDEFINED = 7;    # An 8-bit byte that can take any value depending on the field definition
+	const SLONG     = 9;    # A 32-bit (4-byte) signed integer (2's complement notation),
+	const SRATIONAL = 10;   # Two SLONGs. The first SLONG is the numerator and the second SLONG is the denominator.
+
+	/**
+	 * Exif tags grouped by category, the tagname itself is the key and the type
+	 * is the value, in the case of more than one possible value type they are
+	 * seperated by commas.
+	 */
+	var $mExifTags;
+
+	/**
+	 * A one dimentional array of all Exif tags
+	 */
+	var $mFlatExifTags;
+
+	/**
+	 * The raw Exif data returned by exif_read_data()
+	 */
+	var $mRawExifData;
+
+	/**
+	 * A Filtered version of $mRawExifData that has been pruned of invalid
+	 * tags and tags that contain content they shouldn't contain according
+	 * to the Exif specification
+	 */
+	var $mFilteredExifData;
+
+	/**
+	 * Filtered and formatted Exif data, see FormatExif::getFormattedData()
+	 */
+	var $mFormattedExifData;
+
+	//@}
+
+	//@{
+	/* @var string
+	 * @private
+	 */
+
+	/**
+	 * The file being processed
+	 */
+	var $file;
+
+	/**
+	 * The basename of the file being processed
+	 */
+	var $basename;
+
+	/**
+	 * The private log to log to, e.g. 'exif'
+	 */
+	var $log = false;
+
+	//@}
+
+	/**
+	 * Constructor
+	 *
+	 * @param $file String: filename.
+	 */
+	function __construct( $file ) {
+		/**
+		 * Page numbers here refer to pages in the EXIF 2.2 standard
+		 *
+		 * @link http://exif.org/Exif2-2.PDF The Exif 2.2 specification
+		 */
+		$this->mExifTags = array(
+			# TIFF Rev. 6.0 Attribute Information (p22)
+			'tiff' => array(
+				# Tags relating to image structure
+				'structure' => array(
+					'ImageWidth' => Exif::SHORT.','.Exif::LONG,		# Image width
+					'ImageLength' => Exif::SHORT.','.Exif::LONG,	# Image height
+					'BitsPerSample' => Exif::SHORT,			# Number of bits per component
+					# "When a primary image is JPEG compressed, this designation is not"
+					# "necessary and is omitted." (p23)
+					'Compression' => Exif::SHORT,				# Compression scheme #p23
+					'PhotometricInterpretation' => Exif::SHORT,		# Pixel composition #p23
+					'Orientation' => Exif::SHORT,				# Orientation of image #p24
+					'SamplesPerPixel' => Exif::SHORT,			# Number of components
+					'PlanarConfiguration' => Exif::SHORT,			# Image data arrangement #p24
+					'YCbCrSubSampling' => Exif::SHORT,			# Subsampling ratio of Y to C #p24
+					'YCbCrPositioning' => Exif::SHORT,			# Y and C positioning #p24-25
+					'XResolution' => Exif::RATIONAL,			# Image resolution in width direction
+					'YResolution' => Exif::RATIONAL,			# Image resolution in height direction
+					'ResolutionUnit' => Exif::SHORT,			# Unit of X and Y resolution #(p26)
+				),
+
+				# Tags relating to recording offset
+				'offset' => array(
+					'StripOffsets' => Exif::SHORT.','.Exif::LONG,			# Image data location
+					'RowsPerStrip' => Exif::SHORT.','.Exif::LONG,			# Number of rows per strip
+					'StripByteCounts' => Exif::SHORT.','.Exif::LONG,			# Bytes per compressed strip
+					'JPEGInterchangeFormat' => Exif::SHORT.','.Exif::LONG,		# Offset to JPEG SOI
+					'JPEGInterchangeFormatLength' => Exif::SHORT.','.Exif::LONG,	# Bytes of JPEG data
+				),
+
+				# Tags relating to image data characteristics
+				'characteristics' => array(
+					'TransferFunction' => Exif::SHORT,		# Transfer function
+					'WhitePoint' => Exif::RATIONAL,		# White point chromaticity
+					'PrimaryChromaticities' => Exif::RATIONAL,	# Chromaticities of primarities
+					'YCbCrCoefficients' => Exif::RATIONAL,	# Color space transformation matrix coefficients #p27
+					'ReferenceBlackWhite' => Exif::RATIONAL	# Pair of black and white reference values
+				),
+
+				# Other tags
+				'other' => array(
+					'DateTime' => Exif::ASCII,            # File change date and time
+					'ImageDescription' => Exif::ASCII,    # Image title
+					'Make' => Exif::ASCII,                # Image input equipment manufacturer
+					'Model' => Exif::ASCII,               # Image input equipment model
+					'Software' => Exif::ASCII,            # Software used
+					'Artist' => Exif::ASCII,              # Person who created the image
+					'Copyright' => Exif::ASCII,           # Copyright holder
+				),
+			),
+
+			# Exif IFD Attribute Information (p30-31)
+			'exif' => array(
+				# Tags relating to version
+				'version' => array(
+					# TODO: NOTE: Nonexistence of this field is taken to mean nonconformance
+					# to the EXIF 2.1 AND 2.2 standards
+					'ExifVersion' => Exif::UNDEFINED,	# Exif version
+					'FlashpixVersion' => Exif::UNDEFINED, # Supported Flashpix version #p32
+				),
+
+				# Tags relating to Image Data Characteristics
+				'characteristics' => array(
+					'ColorSpace' => Exif::SHORT,		# Color space information #p32
+				),
+
+				# Tags relating to image configuration
+				'configuration' => array(
+					'ComponentsConfiguration' => Exif::UNDEFINED,		# Meaning of each component #p33
+					'CompressedBitsPerPixel' => Exif::RATIONAL,		# Image compression mode
+					'PixelYDimension' => Exif::SHORT.','.Exif::LONG,	# Valid image width
+					'PixelXDimension' => Exif::SHORT.','.Exif::LONG,	# Valind image height
+				),
+
+				# Tags relating to related user information
+				'user' => array(
+					'MakerNote' => Exif::UNDEFINED,			# Manufacturer notes
+					'UserComment' => Exif::UNDEFINED,			# User comments #p34
+				),
+
+				# Tags relating to related file information
+				'related' => array(
+					'RelatedSoundFile' => Exif::ASCII,			# Related audio file
+				),
+
+				# Tags relating to date and time
+				'dateandtime' => array(
+					'DateTimeOriginal' => Exif::ASCII,			# Date and time of original data generation #p36
+					'DateTimeDigitized' => Exif::ASCII,			# Date and time of original data generation
+					'SubSecTime' => Exif::ASCII,				# DateTime subseconds
+					'SubSecTimeOriginal' => Exif::ASCII,			# DateTimeOriginal subseconds
+					'SubSecTimeDigitized' => Exif::ASCII,			# DateTimeDigitized subseconds
+				),
+
+				# Tags relating to picture-taking conditions (p31)
+				'conditions' => array(
+					'ExposureTime' => Exif::RATIONAL,			# Exposure time
+					'FNumber' => Exif::RATIONAL,				# F Number
+					'ExposureProgram' => Exif::SHORT,			# Exposure Program #p38
+					'SpectralSensitivity' => Exif::ASCII,			# Spectral sensitivity
+					'ISOSpeedRatings' => Exif::SHORT,			# ISO speed rating
+					'OECF' => Exif::UNDEFINED,				# Optoelectronic conversion factor
+					'ShutterSpeedValue' => Exif::SRATIONAL,		# Shutter speed
+					'ApertureValue' => Exif::RATIONAL,			# Aperture
+					'BrightnessValue' => Exif::SRATIONAL,			# Brightness
+					'ExposureBiasValue' => Exif::SRATIONAL,		# Exposure bias
+					'MaxApertureValue' => Exif::RATIONAL,			# Maximum land aperture
+					'SubjectDistance' => Exif::RATIONAL,			# Subject distance
+					'MeteringMode' => Exif::SHORT,			# Metering mode #p40
+					'LightSource' => Exif::SHORT,				# Light source #p40-41
+					'Flash' => Exif::SHORT,				# Flash #p41-42
+					'FocalLength' => Exif::RATIONAL,			# Lens focal length
+					'SubjectArea' => Exif::SHORT,				# Subject area
+					'FlashEnergy' => Exif::RATIONAL,			# Flash energy
+					'SpatialFrequencyResponse' => Exif::UNDEFINED,	# Spatial frequency response
+					'FocalPlaneXResolution' => Exif::RATIONAL,		# Focal plane X resolution
+					'FocalPlaneYResolution' => Exif::RATIONAL,		# Focal plane Y resolution
+					'FocalPlaneResolutionUnit' => Exif::SHORT,		# Focal plane resolution unit #p46
+					'SubjectLocation' => Exif::SHORT,			# Subject location
+					'ExposureIndex' => Exif::RATIONAL,			# Exposure index
+					'SensingMethod' => Exif::SHORT,			# Sensing method #p46
+					'FileSource' => Exif::UNDEFINED,			# File source #p47
+					'SceneType' => Exif::UNDEFINED,			# Scene type #p47
+					'CFAPattern' => Exif::UNDEFINED,			# CFA pattern
+					'CustomRendered' => Exif::SHORT,			# Custom image processing #p48
+					'ExposureMode' => Exif::SHORT,			# Exposure mode #p48
+					'WhiteBalance' => Exif::SHORT,			# White Balance #p49
+					'DigitalZoomRatio' => Exif::RATIONAL,			# Digital zoom ration
+					'FocalLengthIn35mmFilm' => Exif::SHORT,		# Focal length in 35 mm film
+					'SceneCaptureType' => Exif::SHORT,			# Scene capture type #p49
+					'GainControl' => Exif::RATIONAL,			# Scene control #p49-50
+					'Contrast' => Exif::SHORT,				# Contrast #p50
+					'Saturation' => Exif::SHORT,				# Saturation #p50
+					'Sharpness' => Exif::SHORT,				# Sharpness #p50
+					'DeviceSettingDescription' => Exif::UNDEFINED,	# Desice settings description
+					'SubjectDistanceRange' => Exif::SHORT,		# Subject distance range #p51
+				),
+
+				'other' => array(
+					'ImageUniqueID' => Exif::ASCII,	# Unique image ID
+				),
+			),
+
+			# GPS Attribute Information (p52)
+			'gps' => array(
+				'GPSVersionID' => Exif::BYTE,			# GPS tag version
+				'GPSLatitudeRef' => Exif::ASCII,		# North or South Latitude #p52-53
+				'GPSLatitude' => Exif::RATIONAL,		# Latitude
+				'GPSLongitudeRef' => Exif::ASCII,		# East or West Longitude #p53
+				'GPSLongitude' => Exif::RATIONAL,		# Longitude
+				'GPSAltitudeRef' => Exif::BYTE,		# Altitude reference
+				'GPSAltitude' => Exif::RATIONAL,		# Altitude
+				'GPSTimeStamp' => Exif::RATIONAL,		# GPS time (atomic clock)
+				'GPSSatellites' => Exif::ASCII,		# Satellites used for measurement
+				'GPSStatus' => Exif::ASCII,			# Receiver status #p54
+				'GPSMeasureMode' => Exif::ASCII,		# Measurement mode #p54-55
+				'GPSDOP' => Exif::RATIONAL,			# Measurement precision
+				'GPSSpeedRef' => Exif::ASCII,			# Speed unit #p55
+				'GPSSpeed' => Exif::RATIONAL,			# Speed of GPS receiver
+				'GPSTrackRef' => Exif::ASCII,			# Reference for direction of movement #p55
+				'GPSTrack' => Exif::RATIONAL,			# Direction of movement
+				'GPSImgDirectionRef' => Exif::ASCII,		# Reference for direction of image #p56
+				'GPSImgDirection' => Exif::RATIONAL,		# Direction of image
+				'GPSMapDatum' => Exif::ASCII,			# Geodetic survey data used
+				'GPSDestLatitudeRef' => Exif::ASCII,		# Reference for latitude of destination #p56
+				'GPSDestLatitude' => Exif::RATIONAL,		# Latitude destination
+				'GPSDestLongitudeRef' => Exif::ASCII,		# Reference for longitude of destination #p57
+				'GPSDestLongitude' => Exif::RATIONAL,		# Longitude of destination
+				'GPSDestBearingRef' => Exif::ASCII,		# Reference for bearing of destination #p57
+				'GPSDestBearing' => Exif::RATIONAL,		# Bearing of destination
+				'GPSDestDistanceRef' => Exif::ASCII,		# Reference for distance to destination #p57-58
+				'GPSDestDistance' => Exif::RATIONAL,		# Distance to destination
+				'GPSProcessingMethod' => Exif::UNDEFINED,	# Name of GPS processing method
+				'GPSAreaInformation' => Exif::UNDEFINED,	# Name of GPS area
+				'GPSDateStamp' => Exif::ASCII,		# GPS date
+				'GPSDifferential' => Exif::SHORT,		# GPS differential correction
+			),
+		);
+
+		$this->file = $file;
+		$this->basename = wfBaseName( $this->file );
+
+		$this->makeFlatExifTags();
+
+		$this->debugFile( $this->basename, __FUNCTION__, true );
+		wfSuppressWarnings();
+		$data = exif_read_data( $this->file );
+		wfRestoreWarnings();
+		/**
+		 * exif_read_data() will return false on invalid input, such as
+		 * when somebody uploads a file called something.jpeg
+		 * containing random gibberish.
+		 */
+		$this->mRawExifData = $data ? $data : array();
+
+		$this->makeFilteredData();
+		$this->makeFormattedData();
+
+		$this->debugFile( __FUNCTION__, false );
+	}
+
+	/**#@+
+	 * @private
+	 */
+	/**
+	 * Generate a flat list of the exif tags
+	 */
+	function makeFlatExifTags() {
+		$this->extractTags( $this->mExifTags );
+	}
+
+	/**
+	 * A recursing extractor function used by makeFlatExifTags()
+	 *
+	 * Note: This used to use an array_walk function, but it made PHP5
+	 * segfault, see `cvs diff -u -r 1.4 -r 1.5 Exif.php`
+	 */
+	function extractTags( &$tagset ) {
+		foreach( $tagset as $key => $val ) {
+			if( is_array( $val ) ) {
+				$this->extractTags( $val );
+			} else {
+				$this->mFlatExifTags[$key] = $val;
+			}
+		}
+	}
+
+	/**
+	 * Make $this->mFilteredExifData
+	 */
+	function makeFilteredData() {
+		$this->mFilteredExifData = $this->mRawExifData;
+
+		foreach( $this->mFilteredExifData as $k => $v ) {
+			if ( !in_array( $k, array_keys( $this->mFlatExifTags ) ) ) {
+				$this->debug( $v, __FUNCTION__, "'$k' is not a valid Exif tag" );
+				unset( $this->mFilteredExifData[$k] );
+			}
+		}
+
+		foreach( $this->mFilteredExifData as $k => $v ) {
+			if ( !$this->validate($k, $v) ) {
+				$this->debug( $v, __FUNCTION__, "'$k' contained invalid data" );
+				unset( $this->mFilteredExifData[$k] );
+			}
+		}
+	}
+
+	/**
+	 * @todo document
+	 */
+	function makeFormattedData( ) {
+		$format = new FormatExif( $this->getFilteredData() );
+		$this->mFormattedExifData = $format->getFormattedData();
+	}
+	/**#@-*/
+
+	/**#@+
+	 * @return array
+	 */
+	/**
+	 * Get $this->mRawExifData
+	 */
+	function getData() {
+		return $this->mRawExifData;
+	}
+
+	/**
+	 * Get $this->mFilteredExifData
+	 */
+	function getFilteredData() {
+		return $this->mFilteredExifData;
+	}
+
+	/**
+	 * Get $this->mFormattedExifData
+	 */
+	function getFormattedData() {
+		return $this->mFormattedExifData;
+	}
+	/**#@-*/
+
+	/**
+	 * The version of the output format
+	 *
+	 * Before the actual metadata information is saved in the database we
+	 * strip some of it since we don't want to save things like thumbnails
+	 * which usually accompany Exif data. This value gets saved in the
+	 * database along with the actual Exif data, and if the version in the
+	 * database doesn't equal the value returned by this function the Exif
+	 * data is regenerated.
+	 *
+	 * @return int
+	 */
+	function version() {
+		return 1; // We don't need no bloddy constants!
+	}
+
+	/**#@+
+	 * Validates if a tag value is of the type it should be according to the Exif spec
+	 *
+	 * @private
+	 *
+	 * @param $in Mixed: the input value to check
+	 * @return bool
+	 */
+	function isByte( $in ) {
+		if ( !is_array( $in ) && sprintf('%d', $in) == $in && $in >= 0 && $in <= 255 ) {
+			$this->debug( $in, __FUNCTION__, true );
+			return true;
+		} else {
+			$this->debug( $in, __FUNCTION__, false );
+			return false;
+		}
+	}
+
+	function isASCII( $in ) {
+		if ( is_array( $in ) ) {
+			return false;
+		}
+		
+		if ( preg_match( "/[^\x0a\x20-\x7e]/", $in ) ) {
+			$this->debug( $in, __FUNCTION__, 'found a character not in our whitelist' );
+			return false;
+		}
+
+		if ( preg_match( '/^\s*$/', $in ) ) {
+			$this->debug( $in, __FUNCTION__, 'input consisted solely of whitespace' );
+			return false;
+		}
+
+		return true;
+	}
+
+	function isShort( $in ) {
+		if ( !is_array( $in ) && sprintf('%d', $in) == $in && $in >= 0 && $in <= 65536 ) {
+			$this->debug( $in, __FUNCTION__, true );
+			return true;
+		} else {
+			$this->debug( $in, __FUNCTION__, false );
+			return false;
+		}
+	}
+
+	function isLong( $in ) {
+		if ( !is_array( $in ) && sprintf('%d', $in) == $in && $in >= 0 && $in <= 4294967296 ) {
+			$this->debug( $in, __FUNCTION__, true );
+			return true;
+		} else {
+			$this->debug( $in, __FUNCTION__, false );
+			return false;
+		}
+	}
+
+	function isRational( $in ) {
+		$m = array();
+		if ( !is_array( $in ) && @preg_match( '/^(\d+)\/(\d+[1-9]|[1-9]\d*)$/', $in, $m ) ) { # Avoid division by zero
+			return $this->isLong( $m[1] ) && $this->isLong( $m[2] );
+		} else {
+			$this->debug( $in, __FUNCTION__, 'fed a non-fraction value' );
+			return false;
+		}
+	}
+
+	function isUndefined( $in ) {
+		if ( !is_array( $in ) && preg_match( '/^\d{4}$/', $in ) ) { // Allow ExifVersion and FlashpixVersion
+			$this->debug( $in, __FUNCTION__, true );
+			return true;
+		} else {
+			$this->debug( $in, __FUNCTION__, false );
+			return false;
+		}
+	}
+
+	function isSlong( $in ) {
+		if ( $this->isLong( abs( $in ) ) ) {
+			$this->debug( $in, __FUNCTION__, true );
+			return true;
+		} else {
+			$this->debug( $in, __FUNCTION__, false );
+			return false;
+		}
+	}
+
+	function isSrational( $in ) {
+		$m = array();
+		if ( !is_array( $in ) && preg_match( '/^(\d+)\/(\d+[1-9]|[1-9]\d*)$/', $in, $m ) ) { # Avoid division by zero
+			return $this->isSlong( $m[0] ) && $this->isSlong( $m[1] );
+		} else {
+			$this->debug( $in, __FUNCTION__, 'fed a non-fraction value' );
+			return false;
+		}
+	}
+	/**#@-*/
+
+	/**
+	 * Validates if a tag has a legal value according to the Exif spec
+	 *
+	 * @private
+	 *
+	 * @param $tag String: the tag to check.
+	 * @param $val Mixed: the value of the tag.
+	 * @return bool
+	 */
+	function validate( $tag, $val ) {
+		$debug = "tag is '$tag'";
+		// Does not work if not typecast
+		switch( (string)$this->mFlatExifTags[$tag] ) {
+			case (string)Exif::BYTE:
+				$this->debug( $val, __FUNCTION__, $debug );
+				return $this->isByte( $val );
+			case (string)Exif::ASCII:
+				$this->debug( $val, __FUNCTION__, $debug );
+				return $this->isASCII( $val );
+			case (string)Exif::SHORT:
+				$this->debug( $val, __FUNCTION__, $debug );
+				return $this->isShort( $val );
+			case (string)Exif::LONG:
+				$this->debug( $val, __FUNCTION__, $debug );
+				return $this->isLong( $val );
+			case (string)Exif::RATIONAL:
+				$this->debug( $val, __FUNCTION__, $debug );
+				return $this->isRational( $val );
+			case (string)Exif::UNDEFINED:
+				$this->debug( $val, __FUNCTION__, $debug );
+				return $this->isUndefined( $val );
+			case (string)Exif::SLONG:
+				$this->debug( $val, __FUNCTION__, $debug );
+				return $this->isSlong( $val );
+			case (string)Exif::SRATIONAL:
+				$this->debug( $val, __FUNCTION__, $debug );
+				return $this->isSrational( $val );
+			case (string)Exif::SHORT.','.Exif::LONG:
+				$this->debug( $val, __FUNCTION__, $debug );
+				return $this->isShort( $val ) || $this->isLong( $val );
+			default:
+				$this->debug( $val, __FUNCTION__, "The tag '$tag' is unknown" );
+				return false;
+		}
+	}
+
+	/**
+	 * Convenience function for debugging output
+	 *
+	 * @private
+	 *
+	 * @param $in Mixed: 
+	 * @param $fname String: 
+	 * @param $action Mixed: , default NULL.
+	 */
+	function debug( $in, $fname, $action = NULL ) {
+		if ( !$this->log ) {
+			return;
+		}
+		$type = gettype( $in );
+		$class = ucfirst( __CLASS__ );
+		if ( $type === 'array' )
+			$in = print_r( $in, true );
+
+		if ( $action === true )
+			wfDebugLog( $this->log, "$class::$fname: accepted: '$in' (type: $type)\n");
+		elseif ( $action === false )
+			wfDebugLog( $this->log, "$class::$fname: rejected: '$in' (type: $type)\n");
+		elseif ( $action === null )
+			wfDebugLog( $this->log, "$class::$fname: input was: '$in' (type: $type)\n");
+		else
+			wfDebugLog( $this->log, "$class::$fname: $action (type: $type; content: '$in')\n");
+	}
+
+	/**
+	 * Convenience function for debugging output
+	 *
+	 * @private
+	 *
+	 * @param $fname String: the name of the function calling this function
+	 * @param $io Boolean: Specify whether we're beginning or ending
+	 */
+	function debugFile( $fname, $io ) {
+		if ( !$this->log ) {
+			return;
+		}
+		$class = ucfirst( __CLASS__ );
+		if ( $io ) {
+			wfDebugLog( $this->log, "$class::$fname: begin processing: '{$this->basename}'\n" );
+		} else {
+			wfDebugLog( $this->log, "$class::$fname: end processing: '{$this->basename}'\n" );
+		}
+	}
+
+}
+
+/**
+ * @todo document (e.g. one-sentence class-overview description)
+ * @addtogroup Media
+ */
+class FormatExif {
+	/**
+	 * The Exif data to format
+	 *
+	 * @var array
+	 * @private
+	 */
+	var $mExif;
+
+	/**
+	 * Constructor
+	 *
+	 * @param $exif Array: the Exif data to format ( as returned by
+	 *                    Exif::getFilteredData() )
+	 */
+	function FormatExif( $exif ) {
+		$this->mExif = $exif;
+	}
+
+	/**
+	 * Numbers given by Exif user agents are often magical, that is they
+	 * should be replaced by a detailed explanation depending on their
+	 * value which most of the time are plain integers. This function
+	 * formats Exif values into human readable form.
+	 *
+	 * @return array
+	 */
+	function getFormattedData() {
+		global $wgLang;
+
+		$tags =& $this->mExif;
+
+		$resolutionunit = !isset( $tags['ResolutionUnit'] ) || $tags['ResolutionUnit'] == 2 ? 2 : 3;
+		unset( $tags['ResolutionUnit'] );
+
+		foreach( $tags as $tag => $val ) {
+			switch( $tag ) {
+			case 'Compression':
+				switch( $val ) {
+				case 1: case 6:
+					$tags[$tag] = $this->msg( $tag, $val );
+					break;
+				default:
+					$tags[$tag] = $val;
+					break;
+				}
+				break;
+
+			case 'PhotometricInterpretation':
+				switch( $val ) {
+				case 2: case 6:
+					$tags[$tag] = $this->msg( $tag, $val );
+					break;
+				default:
+					$tags[$tag] = $val;
+					break;
+				}
+				break;
+
+			case 'Orientation':
+				switch( $val ) {
+				case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8:
+					$tags[$tag] = $this->msg( $tag, $val );
+					break;
+				default:
+					$tags[$tag] = $val;
+					break;
+				}
+				break;
+
+			case 'PlanarConfiguration':
+				switch( $val ) {
+				case 1: case 2:
+					$tags[$tag] = $this->msg( $tag, $val );
+					break;
+				default:
+					$tags[$tag] = $val;
+					break;
+				}
+				break;
+
+			// TODO: YCbCrSubSampling
+			// TODO: YCbCrPositioning
+
+			case 'XResolution':
+			case 'YResolution':
+				switch( $resolutionunit ) {
+					case 2:
+						$tags[$tag] = $this->msg( 'XYResolution', 'i', $this->formatNum( $val ) );
+						break;
+					case 3:
+						$this->msg( 'XYResolution', 'c', $this->formatNum( $val ) );
+						break;
+					default:
+						$tags[$tag] = $val;
+						break;
+				}
+				break;
+
+			// TODO: YCbCrCoefficients  #p27 (see annex E)
+			case 'ExifVersion': case 'FlashpixVersion':
+				$tags[$tag] = "$val"/100;
+				break;
+
+			case 'ColorSpace':
+				switch( $val ) {
+				case 1: case 'FFFF.H':
+					$tags[$tag] = $this->msg( $tag, $val );
+					break;
+				default:
+					$tags[$tag] = $val;
+					break;
+				}
+				break;
+
+			case 'ComponentsConfiguration':
+				switch( $val ) {
+				case 0: case 1: case 2: case 3: case 4: case 5: case 6:
+					$tags[$tag] = $this->msg( $tag, $val );
+					break;
+				default:
+					$tags[$tag] = $val;
+					break;
+				}
+				break;
+
+			case 'DateTime':
+			case 'DateTimeOriginal':
+			case 'DateTimeDigitized':
+				if( $val == '0000:00:00 00:00:00' ) {
+					$tags[$tag] = wfMsg('exif-unknowndate');
+				} elseif( preg_match( '/^(?:\d{4}):(?:\d\d):(?:\d\d) (?:\d\d):(?:\d\d):(?:\d\d)$/', $val ) ) {
+					$tags[$tag] = $wgLang->timeanddate( wfTimestamp(TS_MW, $val) );
+				}
+				break;
+
+			case 'ExposureProgram':
+				switch( $val ) {
+				case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8:
+					$tags[$tag] = $this->msg( $tag, $val );
+					break;
+				default:
+					$tags[$tag] = $val;
+					break;
+				}
+				break;
+
+			case 'SubjectDistance':
+				$tags[$tag] = $this->msg( $tag, '', $this->formatNum( $val ) );
+				break;
+
+			case 'MeteringMode':
+				switch( $val ) {
+				case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 255:
+					$tags[$tag] = $this->msg( $tag, $val );
+					break;
+				default:
+					$tags[$tag] = $val;
+					break;
+				}
+				break;
+
+			case 'LightSource':
+				switch( $val ) {
+				case 0: case 1: case 2: case 3: case 4: case 9: case 10: case 11:
+				case 12: case 13: case 14: case 15: case 17: case 18: case 19: case 20:
+				case 21: case 22: case 23: case 24: case 255:
+					$tags[$tag] = $this->msg( $tag, $val );
+					break;
+				default:
+					$tags[$tag] = $val;
+					break;
+				}
+				break;
+
+			// TODO: Flash
+			case 'FocalPlaneResolutionUnit':
+				switch( $val ) {
+				case 2:
+					$tags[$tag] = $this->msg( $tag, $val );
+					break;
+				default:
+					$tags[$tag] = $val;
+					break;
+				}
+				break;
+
+			case 'SensingMethod':
+				switch( $val ) {
+				case 1: case 2: case 3: case 4: case 5: case 7: case 8:
+					$tags[$tag] = $this->msg( $tag, $val );
+					break;
+				default:
+					$tags[$tag] = $val;
+					break;
+				}
+				break;
+
+			case 'FileSource':
+				switch( $val ) {
+				case 3:
+					$tags[$tag] = $this->msg( $tag, $val );
+					break;
+				default:
+					$tags[$tag] = $val;
+					break;
+				}
+				break;
+
+			case 'SceneType':
+				switch( $val ) {
+				case 1:
+					$tags[$tag] = $this->msg( $tag, $val );
+					break;
+				default:
+					$tags[$tag] = $val;
+					break;
+				}
+				break;
+
+			case 'CustomRendered':
+				switch( $val ) {
+				case 0: case 1:
+					$tags[$tag] = $this->msg( $tag, $val );
+					break;
+				default:
+					$tags[$tag] = $val;
+					break;
+				}
+				break;
+
+			case 'ExposureMode':
+				switch( $val ) {
+				case 0: case 1: case 2:
+					$tags[$tag] = $this->msg( $tag, $val );
+					break;
+				default:
+					$tags[$tag] = $val;
+					break;
+				}
+				break;
+
+			case 'WhiteBalance':
+				switch( $val ) {
+				case 0: case 1:
+					$tags[$tag] = $this->msg( $tag, $val );
+					break;
+				default:
+					$tags[$tag] = $val;
+					break;
+				}
+				break;
+
+			case 'SceneCaptureType':
+				switch( $val ) {
+				case 0: case 1: case 2: case 3:
+					$tags[$tag] = $this->msg( $tag, $val );
+					break;
+				default:
+					$tags[$tag] = $val;
+					break;
+				}
+				break;
+
+			case 'GainControl':
+				switch( $val ) {
+				case 0: case 1: case 2: case 3: case 4:
+					$tags[$tag] = $this->msg( $tag, $val );
+					break;
+				default:
+					$tags[$tag] = $val;
+					break;
+				}
+				break;
+
+			case 'Contrast':
+				switch( $val ) {
+				case 0: case 1: case 2:
+					$tags[$tag] = $this->msg( $tag, $val );
+					break;
+				default:
+					$tags[$tag] = $val;
+					break;
+				}
+				break;
+
+			case 'Saturation':
+				switch( $val ) {
+				case 0: case 1: case 2:
+					$tags[$tag] = $this->msg( $tag, $val );
+					break;
+				default:
+					$tags[$tag] = $val;
+					break;
+				}
+				break;
+
+			case 'Sharpness':
+				switch( $val ) {
+				case 0: case 1: case 2:
+					$tags[$tag] = $this->msg( $tag, $val );
+					break;
+				default:
+					$tags[$tag] = $val;
+					break;
+				}
+				break;
+
+			case 'SubjectDistanceRange':
+				switch( $val ) {
+				case 0: case 1: case 2: case 3:
+					$tags[$tag] = $this->msg( $tag, $val );
+					break;
+				default:
+					$tags[$tag] = $val;
+					break;
+				}
+				break;
+
+			case 'GPSLatitudeRef':
+			case 'GPSDestLatitudeRef':
+				switch( $val ) {
+				case 'N': case 'S':
+					$tags[$tag] = $this->msg( 'GPSLatitude', $val );
+					break;
+				default:
+					$tags[$tag] = $val;
+					break;
+				}
+				break;
+
+			case 'GPSLongitudeRef':
+			case 'GPSDestLongitudeRef':
+				switch( $val ) {
+				case 'E': case 'W':
+					$tags[$tag] = $this->msg( 'GPSLongitude', $val );
+					break;
+				default:
+					$tags[$tag] = $val;
+					break;
+				}
+				break;
+
+			case 'GPSStatus':
+				switch( $val ) {
+				case 'A': case 'V':
+					$tags[$tag] = $this->msg( $tag, $val );
+					break;
+				default:
+					$tags[$tag] = $val;
+					break;
+				}
+				break;
+
+			case 'GPSMeasureMode':
+				switch( $val ) {
+				case 2: case 3:
+					$tags[$tag] = $this->msg( $tag, $val );
+					break;
+				default:
+					$tags[$tag] = $val;
+					break;
+				}
+				break;
+
+			case 'GPSSpeedRef':
+			case 'GPSDestDistanceRef':
+				switch( $val ) {
+				case 'K': case 'M': case 'N':
+					$tags[$tag] = $this->msg( 'GPSSpeed', $val );
+					break;
+				default:
+					$tags[$tag] = $val;
+					break;
+				}
+				break;
+
+			case 'GPSTrackRef':
+			case 'GPSImgDirectionRef':
+			case 'GPSDestBearingRef':
+				switch( $val ) {
+				case 'T': case 'M':
+					$tags[$tag] = $this->msg( 'GPSDirection', $val );
+					break;
+				default:
+					$tags[$tag] = $val;
+					break;
+				}
+				break;
+
+			case 'GPSDateStamp':
+				$tags[$tag] = $wgLang->date( substr( $val, 0, 4 ) . substr( $val, 5, 2 ) . substr( $val, 8, 2 ) . '000000' );
+				break;
+
+			// This is not in the Exif standard, just a special
+			// case for our purposes which enables wikis to wikify
+			// the make, model and software name to link to their articles.
+			case 'Make':
+			case 'Model':
+			case 'Software':
+				$tags[$tag] = $this->msg( $tag, '', $val );
+				break;
+
+			case 'ExposureTime':
+				// Show the pretty fraction as well as decimal version
+				$tags[$tag] = wfMsg( 'exif-exposuretime-format',
+					$this->formatFraction( $val ), $this->formatNum( $val ) );
+				break;
+
+			case 'FNumber':
+				$tags[$tag] = wfMsg( 'exif-fnumber-format',
+					$this->formatNum( $val ) );
+				break;
+
+			case 'FocalLength':
+				$tags[$tag] = wfMsg( 'exif-focallength-format',
+					$this->formatNum( $val ) );
+				break;
+
+			default:
+				$tags[$tag] = $this->formatNum( $val );
+				break;
+			}
+		}
+
+		return $tags;
+	}
+
+	/**
+	 * Convenience function for getFormattedData()
+	 *
+	 * @private
+	 *
+	 * @param $tag String: the tag name to pass on
+	 * @param $val String: the value of the tag
+	 * @param $arg String: an argument to pass ($1)
+	 * @return string A wfMsg of "exif-$tag-$val" in lower case
+	 */
+	function msg( $tag, $val, $arg = null ) {
+		global $wgContLang;
+
+		if ($val === '')
+			$val = 'value';
+		return wfMsg( $wgContLang->lc( "exif-$tag-$val" ), $arg );
+	}
+
+	/**
+	 * Format a number, convert numbers from fractions into floating point
+	 * numbers
+	 *
+	 * @private
+	 *
+	 * @param $num Mixed: the value to format
+	 * @return mixed A floating point number or whatever we were fed
+	 */
+	function formatNum( $num ) {
+		$m = array();
+		if ( preg_match( '/^(\d+)\/(\d+)$/', $num, $m ) )
+			return $m[2] != 0 ? $m[1] / $m[2] : $num;
+		else
+			return $num;
+	}
+
+	/**
+	 * Format a rational number, reducing fractions
+	 *
+	 * @private
+	 *
+	 * @param $num Mixed: the value to format
+	 * @return mixed A floating point number or whatever we were fed
+	 */
+	function formatFraction( $num ) {
+		$m = array();
+		if ( preg_match( '/^(\d+)\/(\d+)$/', $num, $m ) ) {
+			$numerator = intval( $m[1] );
+			$denominator = intval( $m[2] );
+			$gcd = $this->gcd( $numerator, $denominator );
+			if( $gcd != 0 ) {
+				// 0 shouldn't happen! ;)
+				return $numerator / $gcd . '/' . $denominator / $gcd;
+			}
+		}
+		return $this->formatNum( $num );
+	}
+
+	/**
+	 * Calculate the greatest common divisor of two integers.
+	 *
+	 * @param $a Integer: FIXME
+	 * @param $b Integer: FIXME
+	 * @return int
+	 * @private
+	 */
+	function gcd( $a, $b ) {
+		/*
+			// http://en.wikipedia.org/wiki/Euclidean_algorithm
+			// Recursive form would be:
+			if( $b == 0 )
+				return $a;
+			else
+				return gcd( $b, $a % $b );
+		*/
+		while( $b != 0 ) {
+			$remainder = $a % $b;
+
+			// tail recursion...
+			$a = $b;
+			$b = $remainder;
+		}
+		return $a;
+	}
+}
+
+/**
+ * MW 1.6 compatibility
+ */
+define( 'MW_EXIF_BYTE', Exif::BYTE );
+define( 'MW_EXIF_ASCII', Exif::ASCII );
+define( 'MW_EXIF_SHORT', Exif::SHORT );
+define( 'MW_EXIF_LONG', Exif::LONG );
+define( 'MW_EXIF_RATIONAL', Exif::RATIONAL );
+define( 'MW_EXIF_UNDEFINED', Exif::UNDEFINED );
+define( 'MW_EXIF_SLONG', Exif::SLONG );
+define( 'MW_EXIF_SRATIONAL', Exif::SRATIONAL );
+
+?>
Index: /MediaWiki/branches/1.11/includes/Export.php
===================================================================
--- /MediaWiki/branches/1.11/includes/Export.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/Export.php	(revision 1280)
@@ -0,0 +1,770 @@
+<?php
+# Copyright (C) 2003, 2005, 2006 Brion Vibber <brion@pobox.com>
+# http://www.mediawiki.org/
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+# http://www.gnu.org/copyleft/gpl.html
+
+
+/**
+ *
+ * @addtogroup SpecialPage
+ */
+class WikiExporter {
+	var $list_authors = false ; # Return distinct author list (when not returning full history)
+	var $author_list = "" ;
+
+	const FULL = 0;
+	const CURRENT = 1;
+
+	const BUFFER = 0;
+	const STREAM = 1;
+
+	const TEXT = 0;
+	const STUB = 1;
+
+	/**
+	 * If using WikiExporter::STREAM to stream a large amount of data,
+	 * provide a database connection which is not managed by
+	 * LoadBalancer to read from: some history blob types will
+	 * make additional queries to pull source data while the
+	 * main query is still running.
+	 *
+	 * @param Database $db
+	 * @param mixed $history one of WikiExporter::FULL or WikiExporter::CURRENT, or an
+	 *                       associative array:
+	 *                         offset: non-inclusive offset at which to start the query
+	 *                         limit: maximum number of rows to return
+	 *                         dir: "asc" or "desc" timestamp order
+	 * @param int $buffer one of WikiExporter::BUFFER or WikiExporter::STREAM
+	 */
+	function __construct( &$db, $history = WikiExporter::CURRENT,
+			$buffer = WikiExporter::BUFFER, $text = WikiExporter::TEXT ) {
+		$this->db =& $db;
+		$this->history = $history;
+		$this->buffer  = $buffer;
+		$this->writer  = new XmlDumpWriter();
+		$this->sink    = new DumpOutput();
+		$this->text    = $text;
+	}
+
+	/**
+	 * Set the DumpOutput or DumpFilter object which will receive
+	 * various row objects and XML output for filtering. Filters
+	 * can be chained or used as callbacks.
+	 *
+	 * @param mixed $callback
+	 */
+	function setOutputSink( &$sink ) {
+		$this->sink =& $sink;
+	}
+
+	function openStream() {
+		$output = $this->writer->openStream();
+		$this->sink->writeOpenStream( $output );
+	}
+
+	function closeStream() {
+		$output = $this->writer->closeStream();
+		$this->sink->writeCloseStream( $output );
+	}
+
+	/**
+	 * Dumps a series of page and revision records for all pages
+	 * in the database, either including complete history or only
+	 * the most recent version.
+	 */
+	function allPages() {
+		return $this->dumpFrom( '' );
+	}
+
+	/**
+	 * Dumps a series of page and revision records for those pages
+	 * in the database falling within the page_id range given.
+	 * @param int $start Inclusive lower limit (this id is included)
+	 * @param int $end   Exclusive upper limit (this id is not included)
+	 *                   If 0, no upper limit.
+	 */
+	function pagesByRange( $start, $end ) {
+		$condition = 'page_id >= ' . intval( $start );
+		if( $end ) {
+			$condition .= ' AND page_id < ' . intval( $end );
+		}
+		return $this->dumpFrom( $condition );
+	}
+
+	/**
+	 * @param Title $title
+	 */
+	function pageByTitle( $title ) {
+		return $this->dumpFrom(
+			'page_namespace=' . $title->getNamespace() .
+			' AND page_title=' . $this->db->addQuotes( $title->getDbKey() ) );
+	}
+
+	function pageByName( $name ) {
+		$title = Title::newFromText( $name );
+		if( is_null( $title ) ) {
+			return new WikiError( "Can't export invalid title" );
+		} else {
+			return $this->pageByTitle( $title );
+		}
+	}
+
+	function pagesByName( $names ) {
+		foreach( $names as $name ) {
+			$this->pageByName( $name );
+		}
+	}
+
+
+	// -------------------- private implementation below --------------------
+
+	# Generates the distinct list of authors of an article
+	# Not called by default (depends on $this->list_authors)
+	# Can be set by Special:Export when not exporting whole history
+	function do_list_authors ( $page , $revision , $cond ) {
+		$fname = "do_list_authors" ;
+		wfProfileIn( $fname );
+		$this->author_list = "<contributors>";
+		//rev_deleted
+		$nothidden = '(rev_deleted & '.Revision::DELETED_USER.') = 0';
+		
+		$sql = "SELECT DISTINCT rev_user_text,rev_user FROM {$page},{$revision} WHERE page_id=rev_page AND $nothidden AND " . $cond ;
+		$result = $this->db->query( $sql, $fname );
+		$resultset = $this->db->resultObject( $result );
+		while( $row = $resultset->fetchObject() ) {
+			$this->author_list .= "<contributor>" . 
+				"<username>" . 
+				htmlentities( $row->rev_user_text )  . 
+				"</username>" . 
+				"<id>" . 
+				$row->rev_user .
+				"</id>" . 
+				"</contributor>";
+		}
+		wfProfileOut( $fname );
+		$this->author_list .= "</contributors>";
+	}
+
+	function dumpFrom( $cond = '' ) {
+		$fname = 'WikiExporter::dumpFrom';
+		wfProfileIn( $fname );
+
+		$page     = $this->db->tableName( 'page' );
+		$revision = $this->db->tableName( 'revision' );
+		$text     = $this->db->tableName( 'text' );
+
+		$order = 'ORDER BY page_id';
+		$limit = '';
+
+		if( $this->history == WikiExporter::FULL ) {
+			$join = 'page_id=rev_page';
+		} elseif( $this->history == WikiExporter::CURRENT ) {
+			if ( $this->list_authors && $cond != '' )  { // List authors, if so desired
+				$this->do_list_authors ( $page , $revision , $cond );
+			}
+			$join = 'page_id=rev_page AND page_latest=rev_id';
+		} elseif ( is_array( $this->history ) ) {
+			$join = 'page_id=rev_page';
+			if ( $this->history['dir'] == 'asc' ) {
+				$op = '>';
+				$order .= ', rev_timestamp';
+			} else {
+				$op = '<';
+				$order .= ', rev_timestamp DESC';
+			}
+			if ( !empty( $this->history['offset'] ) ) {
+				$join .= " AND rev_timestamp $op " . $this->db->addQuotes(
+					$this->db->timestamp( $this->history['offset'] ) );
+			}
+			if ( !empty( $this->history['limit'] ) ) {
+				$limitNum = intval( $this->history['limit'] );
+				if ( $limitNum > 0 ) {
+					$limit = "LIMIT $limitNum";
+				}
+			}
+		} else {
+			wfProfileOut( $fname );
+			return new WikiError( "$fname given invalid history dump type." );
+		}
+		$where = ( $cond == '' ) ? '' : "$cond AND";
+
+		if( $this->buffer == WikiExporter::STREAM ) {
+			$prev = $this->db->bufferResults( false );
+		}
+		if( $cond == '' ) {
+			// Optimization hack for full-database dump
+			$revindex = $pageindex = $this->db->useIndexClause("PRIMARY");
+			$straight = ' /*! STRAIGHT_JOIN */ ';
+		} else {
+			$pageindex = '';
+			$revindex = '';
+			$straight = '';
+		}
+		if( $this->text == WikiExporter::STUB ) {
+			$sql = "SELECT $straight * FROM
+					$page $pageindex,
+					$revision $revindex
+					WHERE $where $join
+					$order $limit";
+		} else {
+			$sql = "SELECT $straight * FROM
+					$page $pageindex,
+					$revision $revindex,
+					$text
+					WHERE $where $join AND rev_text_id=old_id
+					$order $limit";
+		}
+		$result = $this->db->query( $sql, $fname );
+		$wrapper = $this->db->resultObject( $result );
+		$this->outputStream( $wrapper );
+
+		if ( $this->list_authors ) {
+			$this->outputStream( $wrapper );
+		}
+
+		if( $this->buffer == WikiExporter::STREAM ) {
+			$this->db->bufferResults( $prev );
+		}
+
+		wfProfileOut( $fname );
+	}
+
+	/**
+	 * Runs through a query result set dumping page and revision records.
+	 * The result set should be sorted/grouped by page to avoid duplicate
+	 * page records in the output.
+	 *
+	 * The result set will be freed once complete. Should be safe for
+	 * streaming (non-buffered) queries, as long as it was made on a
+	 * separate database connection not managed by LoadBalancer; some
+	 * blob storage types will make queries to pull source data.
+	 *
+	 * @param ResultWrapper $resultset
+	 * @access private
+	 */
+	function outputStream( $resultset ) {
+		$last = null;
+		while( $row = $resultset->fetchObject() ) {
+			if( is_null( $last ) ||
+				$last->page_namespace != $row->page_namespace ||
+				$last->page_title     != $row->page_title ) {
+				if( isset( $last ) ) {
+					$output = $this->writer->closePage();
+					$this->sink->writeClosePage( $output );
+				}
+				$output = $this->writer->openPage( $row );
+				$this->sink->writeOpenPage( $row, $output );
+				$last = $row;
+			}
+			$output = $this->writer->writeRevision( $row );
+			$this->sink->writeRevision( $row, $output );
+		}
+		if( isset( $last ) ) {
+			$output = $this->author_list . $this->writer->closePage();
+			$this->sink->writeClosePage( $output );
+		}
+		$resultset->free();
+	}
+}
+
+/**
+ * @addtogroup Dump
+ */
+class XmlDumpWriter {
+
+	/**
+	 * Returns the export schema version.
+	 * @return string
+	 */
+	function schemaVersion() {
+		return "0.3"; // FIXME: upgrade to 0.4 when updated XSD is ready, for the revision deletion bits
+	}
+
+	/**
+	 * Opens the XML output stream's root <mediawiki> element.
+	 * This does not include an xml directive, so is safe to include
+	 * as a subelement in a larger XML stream. Namespace and XML Schema
+	 * references are included.
+	 *
+	 * Output will be encoded in UTF-8.
+	 *
+	 * @return string
+	 */
+	function openStream() {
+		global $wgContLanguageCode;
+		$ver = $this->schemaVersion();
+		return wfElement( 'mediawiki', array(
+			'xmlns'              => "http://www.mediawiki.org/xml/export-$ver/",
+			'xmlns:xsi'          => "http://www.w3.org/2001/XMLSchema-instance",
+			'xsi:schemaLocation' => "http://www.mediawiki.org/xml/export-$ver/ " .
+			                        "http://www.mediawiki.org/xml/export-$ver.xsd",
+			'version'            => $ver,
+			'xml:lang'           => $wgContLanguageCode ),
+			null ) .
+			"\n" .
+			$this->siteInfo();
+	}
+
+	function siteInfo() {
+		$info = array(
+			$this->sitename(),
+			$this->homelink(),
+			$this->generator(),
+			$this->caseSetting(),
+			$this->namespaces() );
+		return "  <siteinfo>\n    " .
+			implode( "\n    ", $info ) .
+			"\n  </siteinfo>\n";
+	}
+
+	function sitename() {
+		global $wgSitename;
+		return wfElement( 'sitename', array(), $wgSitename );
+	}
+
+	function generator() {
+		global $wgVersion;
+		return wfElement( 'generator', array(), "MediaWiki $wgVersion" );
+	}
+
+	function homelink() {
+		return wfElement( 'base', array(), Title::newMainPage()->getFullUrl() );
+	}
+
+	function caseSetting() {
+		global $wgCapitalLinks;
+		// "case-insensitive" option is reserved for future
+		$sensitivity = $wgCapitalLinks ? 'first-letter' : 'case-sensitive';
+		return wfElement( 'case', array(), $sensitivity );
+	}
+
+	function namespaces() {
+		global $wgContLang;
+		$spaces = "  <namespaces>\n";
+		foreach( $wgContLang->getFormattedNamespaces() as $ns => $title ) {
+			$spaces .= '      ' . wfElement( 'namespace', array( 'key' => $ns ), $title ) . "\n";
+		}
+		$spaces .= "    </namespaces>";
+		return $spaces;
+	}
+
+	/**
+	 * Closes the output stream with the closing root element.
+	 * Call when finished dumping things.
+	 */
+	function closeStream() {
+		return "</mediawiki>\n";
+	}
+
+
+	/**
+	 * Opens a <page> section on the output stream, with data
+	 * from the given database row.
+	 *
+	 * @param object $row
+	 * @return string
+	 * @access private
+	 */
+	function openPage( $row ) {
+		$out = "  <page>\n";
+		$title = Title::makeTitle( $row->page_namespace, $row->page_title );
+		$out .= '    ' . wfElementClean( 'title', array(), $title->getPrefixedText() ) . "\n";
+		$out .= '    ' . wfElement( 'id', array(), strval( $row->page_id ) ) . "\n";
+		if( '' != $row->page_restrictions ) {
+			$out .= '    ' . wfElement( 'restrictions', array(),
+				strval( $row->page_restrictions ) ) . "\n";
+		}
+		return $out;
+	}
+
+	/**
+	 * Closes a <page> section on the output stream.
+	 *
+	 * @access private
+	 */
+	function closePage() {
+		return "  </page>\n";
+	}
+
+	/**
+	 * Dumps a <revision> section on the output stream, with
+	 * data filled in from the given database row.
+	 *
+	 * @param object $row
+	 * @return string
+	 * @access private
+	 */
+	function writeRevision( $row ) {
+		$fname = 'WikiExporter::dumpRev';
+		wfProfileIn( $fname );
+
+		$out  = "    <revision>\n";
+		$out .= "      " . wfElement( 'id', null, strval( $row->rev_id ) ) . "\n";
+
+		$ts = wfTimestamp( TS_ISO_8601, $row->rev_timestamp );
+		$out .= "      " . wfElement( 'timestamp', null, $ts ) . "\n";
+
+		if( $row->rev_deleted & Revision::DELETED_USER ) {
+			$out .= "      " . wfElement( 'contributor', array( 'deleted' => 'deleted' ) ) . "\n";
+		} else {
+			$out .= "      <contributor>\n";
+			if( $row->rev_user ) {
+				$out .= "        " . wfElementClean( 'username', null, strval( $row->rev_user_text ) ) . "\n";
+				$out .= "        " . wfElement( 'id', null, strval( $row->rev_user ) ) . "\n";
+			} else {
+				$out .= "        " . wfElementClean( 'ip', null, strval( $row->rev_user_text ) ) . "\n";
+			}
+			$out .= "      </contributor>\n";
+		}
+
+		if( $row->rev_minor_edit ) {
+			$out .=  "      <minor/>\n";
+		}
+		if( $row->rev_deleted & Revision::DELETED_COMMENT ) {
+			$out .= "      " . wfElement( 'comment', array( 'deleted' => 'deleted' ) ) . "\n";
+		} elseif( $row->rev_comment != '' ) {
+			$out .= "      " . wfElementClean( 'comment', null, strval( $row->rev_comment ) ) . "\n";
+		}
+
+		if( $row->rev_deleted & Revision::DELETED_TEXT ) {
+			$out .= "      " . wfElement( 'text', array( 'deleted' => 'deleted' ) ) . "\n";
+		} elseif( isset( $row->old_text ) ) {
+			// Raw text from the database may have invalid chars
+			$text = strval( Revision::getRevisionText( $row ) );
+			$out .= "      " . wfElementClean( 'text',
+				array( 'xml:space' => 'preserve' ),
+				strval( $text ) ) . "\n";
+		} else {
+			// Stub output
+			$out .= "      " . wfElement( 'text',
+				array( 'id' => $row->rev_text_id ),
+				"" ) . "\n";
+		}
+
+		$out .= "    </revision>\n";
+
+		wfProfileOut( $fname );
+		return $out;
+	}
+
+}
+
+
+/**
+ * Base class for output stream; prints to stdout or buffer or whereever.
+ * @addtogroup Dump
+ */
+class DumpOutput {
+	function writeOpenStream( $string ) {
+		$this->write( $string );
+	}
+
+	function writeCloseStream( $string ) {
+		$this->write( $string );
+	}
+
+	function writeOpenPage( $page, $string ) {
+		$this->write( $string );
+	}
+
+	function writeClosePage( $string ) {
+		$this->write( $string );
+	}
+
+	function writeRevision( $rev, $string ) {
+		$this->write( $string );
+	}
+
+	/**
+	 * Override to write to a different stream type.
+	 * @return bool
+	 */
+	function write( $string ) {
+		print $string;
+	}
+}
+
+/**
+ * Stream outputter to send data to a file.
+ * @addtogroup Dump
+ */
+class DumpFileOutput extends DumpOutput {
+	var $handle;
+
+	function DumpFileOutput( $file ) {
+		$this->handle = fopen( $file, "wt" );
+	}
+
+	function write( $string ) {
+		fputs( $this->handle, $string );
+	}
+}
+
+/**
+ * Stream outputter to send data to a file via some filter program.
+ * Even if compression is available in a library, using a separate
+ * program can allow us to make use of a multi-processor system.
+ * @addtogroup Dump
+ */
+class DumpPipeOutput extends DumpFileOutput {
+	function DumpPipeOutput( $command, $file = null ) {
+		if( !is_null( $file ) ) {
+			$command .=  " > " . wfEscapeShellArg( $file );
+		}
+		$this->handle = popen( $command, "w" );
+	}
+}
+
+/**
+ * Sends dump output via the gzip compressor.
+ * @addtogroup Dump
+ */
+class DumpGZipOutput extends DumpPipeOutput {
+	function DumpGZipOutput( $file ) {
+		parent::DumpPipeOutput( "gzip", $file );
+	}
+}
+
+/**
+ * Sends dump output via the bgzip2 compressor.
+ * @addtogroup Dump
+ */
+class DumpBZip2Output extends DumpPipeOutput {
+	function DumpBZip2Output( $file ) {
+		parent::DumpPipeOutput( "bzip2", $file );
+	}
+}
+
+/**
+ * Sends dump output via the p7zip compressor.
+ * @addtogroup Dump
+ */
+class Dump7ZipOutput extends DumpPipeOutput {
+	function Dump7ZipOutput( $file ) {
+		$command = "7za a -bd -si " . wfEscapeShellArg( $file );
+		// Suppress annoying useless crap from p7zip
+		// Unfortunately this could suppress real error messages too
+		$command .= " >/dev/null 2>&1";
+		parent::DumpPipeOutput( $command );
+	}
+}
+
+
+
+/**
+ * Dump output filter class.
+ * This just does output filtering and streaming; XML formatting is done
+ * higher up, so be careful in what you do.
+ * @addtogroup Dump
+ */
+class DumpFilter {
+	function DumpFilter( &$sink ) {
+		$this->sink =& $sink;
+	}
+
+	function writeOpenStream( $string ) {
+		$this->sink->writeOpenStream( $string );
+	}
+
+	function writeCloseStream( $string ) {
+		$this->sink->writeCloseStream( $string );
+	}
+
+	function writeOpenPage( $page, $string ) {
+		$this->sendingThisPage = $this->pass( $page, $string );
+		if( $this->sendingThisPage ) {
+			$this->sink->writeOpenPage( $page, $string );
+		}
+	}
+
+	function writeClosePage( $string ) {
+		if( $this->sendingThisPage ) {
+			$this->sink->writeClosePage( $string );
+			$this->sendingThisPage = false;
+		}
+	}
+
+	function writeRevision( $rev, $string ) {
+		if( $this->sendingThisPage ) {
+			$this->sink->writeRevision( $rev, $string );
+		}
+	}
+
+	/**
+	 * Override for page-based filter types.
+	 * @return bool
+	 */
+	function pass( $page ) {
+		return true;
+	}
+}
+
+/**
+ * Simple dump output filter to exclude all talk pages.
+ * @addtogroup Dump
+ */
+class DumpNotalkFilter extends DumpFilter {
+	function pass( $page ) {
+		return !Namespace::isTalk( $page->page_namespace );
+	}
+}
+
+/**
+ * Dump output filter to include or exclude pages in a given set of namespaces.
+ * @addtogroup Dump
+ */
+class DumpNamespaceFilter extends DumpFilter {
+	var $invert = false;
+	var $namespaces = array();
+
+	function DumpNamespaceFilter( &$sink, $param ) {
+		parent::DumpFilter( $sink );
+
+		$constants = array(
+			"NS_MAIN"           => NS_MAIN,
+			"NS_TALK"           => NS_TALK,
+			"NS_USER"           => NS_USER,
+			"NS_USER_TALK"      => NS_USER_TALK,
+			"NS_PROJECT"        => NS_PROJECT,
+			"NS_PROJECT_TALK"   => NS_PROJECT_TALK,
+			"NS_IMAGE"          => NS_IMAGE,
+			"NS_IMAGE_TALK"     => NS_IMAGE_TALK,
+			"NS_MEDIAWIKI"      => NS_MEDIAWIKI,
+			"NS_MEDIAWIKI_TALK" => NS_MEDIAWIKI_TALK,
+			"NS_TEMPLATE"       => NS_TEMPLATE,
+			"NS_TEMPLATE_TALK"  => NS_TEMPLATE_TALK,
+			"NS_HELP"           => NS_HELP,
+			"NS_HELP_TALK"      => NS_HELP_TALK,
+			"NS_CATEGORY"       => NS_CATEGORY,
+			"NS_CATEGORY_TALK"  => NS_CATEGORY_TALK );
+
+		if( $param{0} == '!' ) {
+			$this->invert = true;
+			$param = substr( $param, 1 );
+		}
+
+		foreach( explode( ',', $param ) as $key ) {
+			$key = trim( $key );
+			if( isset( $constants[$key] ) ) {
+				$ns = $constants[$key];
+				$this->namespaces[$ns] = true;
+			} elseif( is_numeric( $key ) ) {
+				$ns = intval( $key );
+				$this->namespaces[$ns] = true;
+			} else {
+				throw new MWException( "Unrecognized namespace key '$key'\n" );
+			}
+		}
+	}
+
+	function pass( $page ) {
+		$match = isset( $this->namespaces[$page->page_namespace] );
+		return $this->invert xor $match;
+	}
+}
+
+
+/**
+ * Dump output filter to include only the last revision in each page sequence.
+ * @addtogroup Dump
+ */
+class DumpLatestFilter extends DumpFilter {
+	var $page, $pageString, $rev, $revString;
+
+	function writeOpenPage( $page, $string ) {
+		$this->page = $page;
+		$this->pageString = $string;
+	}
+
+	function writeClosePage( $string ) {
+		if( $this->rev ) {
+			$this->sink->writeOpenPage( $this->page, $this->pageString );
+			$this->sink->writeRevision( $this->rev, $this->revString );
+			$this->sink->writeClosePage( $string );
+		}
+		$this->rev = null;
+		$this->revString = null;
+		$this->page = null;
+		$this->pageString = null;
+	}
+
+	function writeRevision( $rev, $string ) {
+		if( $rev->rev_id == $this->page->page_latest ) {
+			$this->rev = $rev;
+			$this->revString = $string;
+		}
+	}
+}
+
+/**
+ * Base class for output stream; prints to stdout or buffer or whereever.
+ * @addtogroup Dump
+ */
+class DumpMultiWriter {
+	function DumpMultiWriter( $sinks ) {
+		$this->sinks = $sinks;
+		$this->count = count( $sinks );
+	}
+
+	function writeOpenStream( $string ) {
+		for( $i = 0; $i < $this->count; $i++ ) {
+			$this->sinks[$i]->writeOpenStream( $string );
+		}
+	}
+
+	function writeCloseStream( $string ) {
+		for( $i = 0; $i < $this->count; $i++ ) {
+			$this->sinks[$i]->writeCloseStream( $string );
+		}
+	}
+
+	function writeOpenPage( $page, $string ) {
+		for( $i = 0; $i < $this->count; $i++ ) {
+			$this->sinks[$i]->writeOpenPage( $page, $string );
+		}
+	}
+
+	function writeClosePage( $string ) {
+		for( $i = 0; $i < $this->count; $i++ ) {
+			$this->sinks[$i]->writeClosePage( $string );
+		}
+	}
+
+	function writeRevision( $rev, $string ) {
+		for( $i = 0; $i < $this->count; $i++ ) {
+			$this->sinks[$i]->writeRevision( $rev, $string );
+		}
+	}
+}
+
+function xmlsafe( $string ) {
+	$fname = 'xmlsafe';
+	wfProfileIn( $fname );
+
+	/**
+	 * The page may contain old data which has not been properly normalized.
+	 * Invalid UTF-8 sequences or forbidden control characters will make our
+	 * XML output invalid, so be sure to strip them out.
+	 */
+	$string = UtfNormal::cleanUp( $string );
+
+	$string = htmlspecialchars( $string );
+	wfProfileOut( $fname );
+	return $string;
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/ExternalEdit.php
===================================================================
--- /MediaWiki/branches/1.11/includes/ExternalEdit.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/ExternalEdit.php	(revision 1280)
@@ -0,0 +1,75 @@
+<?php
+/**
+ * License: Public domain
+ *
+ * @author Erik Moeller <moeller@scireview.de>
+ */
+
+/**
+ *
+ *
+ * Support for external editors to modify both text and files
+ * in external applications. It works as follows: MediaWiki
+ * sends a meta-file with the MIME type 'application/x-external-editor'
+ * to the client. The user has to associate that MIME type with
+ * a helper application (a reference implementation in Perl
+ * can be found in extensions/ee), which will launch the editor,
+ * and save the modified data back to the server.
+ *
+ */
+
+class ExternalEdit {
+
+	function __construct( $article, $mode ) {
+		global $wgInputEncoding;
+		$this->mArticle =& $article;
+		$this->mTitle =& $article->mTitle;
+		$this->mCharset = $wgInputEncoding;
+		$this->mMode = $mode;
+	}
+
+	function edit() {
+		global $wgOut, $wgScript, $wgScriptPath, $wgServer, $wgLang;
+		$wgOut->disable();
+		$name=$this->mTitle->getText();
+		$pos=strrpos($name,".")+1;
+		header ( "Content-type: application/x-external-editor; charset=".$this->mCharset );
+
+		# $type can be "Edit text", "Edit file" or "Diff text" at the moment
+		# See the protocol specifications at [[m:Help:External editors/Tech]] for
+		# details.
+		if(!isset($this->mMode)) {
+			$type="Edit text";
+			$url=$this->mTitle->getFullURL("action=edit&internaledit=true");
+			# *.wiki file extension is used by some editors for syntax
+			# highlighting, so we follow that convention
+			$extension="wiki";
+		} elseif($this->mMode=="file") {
+			$type="Edit file";
+			$image = new Image( $this->mTitle );
+			$img_url = $image->getURL();
+			if(strpos($img_url,"://")) {
+				$url = $img_url;
+			} else {
+				$url = $wgServer . $img_url;
+			}
+			$extension=substr($name, $pos);
+		}
+		$special=$wgLang->getNsText(NS_SPECIAL);
+		$control = <<<CONTROL
+[Process]
+Type=$type
+Engine=MediaWiki
+Script={$wgServer}{$wgScript}
+Server={$wgServer}
+Path={$wgScriptPath}
+Special namespace=$special
+
+[File]
+Extension=$extension
+URL=$url
+CONTROL;
+		echo $control;
+	}
+}
+?>
Index: /MediaWiki/branches/1.11/includes/ExternalStore.php
===================================================================
--- /MediaWiki/branches/1.11/includes/ExternalStore.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/ExternalStore.php	(revision 1280)
@@ -0,0 +1,69 @@
+<?php
+/**
+ *
+ *
+ * Constructor class for data kept in external repositories
+ *
+ * External repositories might be populated by maintenance/async
+ * scripts, thus partial moving of data may be possible, as well
+ * as possibility to have any storage format (i.e. for archives)
+ *
+ */
+
+class ExternalStore {
+	/* Fetch data from given URL */
+	function fetchFromURL($url) {
+		global $wgExternalStores;
+
+		if (!$wgExternalStores)
+			return false;
+
+		@list($proto,$path)=explode('://',$url,2);
+		/* Bad URL */
+		if ($path=="")
+			return false;
+
+		$store =& ExternalStore::getStoreObject( $proto );
+		if ( $store === false )
+			return false;
+		return $store->fetchFromURL($url);
+	}
+
+	/**
+	 * Get an external store object of the given type
+	 */
+	function &getStoreObject( $proto ) {
+		global $wgExternalStores;
+		if (!$wgExternalStores)
+			return false;
+		/* Protocol not enabled */
+		if (!in_array( $proto, $wgExternalStores ))
+			return false;
+
+		$class='ExternalStore'.ucfirst($proto);
+		/* Preloaded modules might exist, especially ones serving multiple protocols */
+		if (!class_exists($class)) {
+			if (!include_once($class.'.php'))
+				return false;
+		}
+		$store=new $class();
+		return $store;
+	}
+
+	/**
+	 * Store a data item to an external store, identified by a partial URL
+	 * The protocol part is used to identify the class, the rest is passed to the
+	 * class itself as a parameter.
+	 * Returns the URL of the stored data item, or false on error
+	 */
+	function insert( $url, $data ) {
+		list( $proto, $params ) = explode( '://', $url, 2 );
+		$store =& ExternalStore::getStoreObject( $proto );
+		if ( $store === false ) {
+			return false;
+		} else {
+			return $store->store( $params, $data );
+		}
+	}
+}
+?>
Index: /MediaWiki/branches/1.11/includes/ExternalStoreDB.php
===================================================================
--- /MediaWiki/branches/1.11/includes/ExternalStoreDB.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/ExternalStoreDB.php	(revision 1280)
@@ -0,0 +1,147 @@
+<?php
+/**
+ *
+ *
+ * DB accessable external objects
+ *
+ */
+
+
+
+/**
+ * External database storage will use one (or more) separate connection pools
+ * from what the main wiki uses. If we load many revisions, such as when doing
+ * bulk backups or maintenance, we want to keep them around over the lifetime
+ * of the script.
+ *
+ * Associative array of LoadBalancer objects, indexed by cluster name.
+ */
+global $wgExternalLoadBalancers;
+$wgExternalLoadBalancers = array();
+
+/**
+ * One-step cache variable to hold base blobs; operations that
+ * pull multiple revisions may often pull multiple times from
+ * the same blob. By keeping the last-used one open, we avoid
+ * redundant unserialization and decompression overhead.
+ */
+global $wgExternalBlobCache;
+$wgExternalBlobCache = array();
+
+class ExternalStoreDB {
+
+	/** @todo Document.*/
+	function &getLoadBalancer( $cluster ) {
+		global $wgExternalServers, $wgExternalLoadBalancers;
+		if ( !array_key_exists( $cluster, $wgExternalLoadBalancers ) ) {
+			$wgExternalLoadBalancers[$cluster] = LoadBalancer::newFromParams( $wgExternalServers[$cluster] );
+		}
+		$wgExternalLoadBalancers[$cluster]->allowLagged(true);
+		return $wgExternalLoadBalancers[$cluster];
+	}
+
+	/** @todo Document.*/
+	function &getSlave( $cluster ) {
+		$lb =& $this->getLoadBalancer( $cluster );
+		return $lb->getConnection( DB_SLAVE );
+	}
+
+	/** @todo Document.*/
+	function &getMaster( $cluster ) {
+		$lb =& $this->getLoadBalancer( $cluster );
+		return $lb->getConnection( DB_MASTER );
+	}
+
+	/** @todo Document.*/
+	function getTable( &$db ) {
+		$table = $db->getLBInfo( 'blobs table' );
+		if ( is_null( $table ) ) {
+			$table = 'blobs';
+		}
+		return $table;
+	}
+
+	/**
+	 * Fetch data from given URL
+	 * @param string $url An url of the form DB://cluster/id or DB://cluster/id/itemid for concatened storage.
+	 */
+	function fetchFromURL($url) {
+		$path = explode( '/', $url );
+		$cluster  = $path[2];
+		$id	  = $path[3];
+		if ( isset( $path[4] ) ) {
+			$itemID = $path[4];
+		} else {
+			$itemID = false;
+		}
+
+		$ret =& $this->fetchBlob( $cluster, $id, $itemID );
+
+		if ( $itemID !== false && $ret !== false ) {
+			return $ret->getItem( $itemID );
+		}
+		return $ret;
+	}
+
+	/**
+	 * Fetch a blob item out of the database; a cache of the last-loaded
+	 * blob will be kept so that multiple loads out of a multi-item blob
+	 * can avoid redundant database access and decompression.
+	 * @param $cluster
+	 * @param $id
+	 * @param $itemID
+	 * @return mixed
+	 * @private
+	 */
+	function &fetchBlob( $cluster, $id, $itemID ) {
+		global $wgExternalBlobCache;
+		$cacheID = ( $itemID === false ) ? "$cluster/$id" : "$cluster/$id/";
+		if( isset( $wgExternalBlobCache[$cacheID] ) ) {
+			wfDebug( "ExternalStoreDB::fetchBlob cache hit on $cacheID\n" );
+			return $wgExternalBlobCache[$cacheID];
+		}
+
+		wfDebug( "ExternalStoreDB::fetchBlob cache miss on $cacheID\n" );
+
+		$dbr =& $this->getSlave( $cluster );
+		$ret = $dbr->selectField( $this->getTable( $dbr ), 'blob_text', array( 'blob_id' => $id ) );
+		if ( $ret === false ) {
+			wfDebugLog( 'ExternalStoreDB', "ExternalStoreDB::fetchBlob master fallback on $cacheID\n" );
+			// Try the master
+			$dbw =& $this->getMaster( $cluster );
+			$ret = $dbw->selectField( $this->getTable( $dbw ), 'blob_text', array( 'blob_id' => $id ) );
+			if( $ret === false) {
+				wfDebugLog( 'ExternalStoreDB', "ExternalStoreDB::fetchBlob master failed to find $cacheID\n" );
+			}
+		}
+		if( $itemID !== false && $ret !== false ) {
+			// Unserialise object; caller extracts item
+			$ret = unserialize( $ret );
+		}
+
+		$wgExternalBlobCache = array( $cacheID => &$ret );
+		return $ret;
+	}
+
+	/**
+	 * Insert a data item into a given cluster
+	 *
+	 * @param $cluster String: the cluster name
+	 * @param $data String: the data item
+	 * @return string URL
+	 */
+	function store( $cluster, $data ) {
+		$fname = 'ExternalStoreDB::store';
+
+		$dbw =& $this->getMaster( $cluster );
+
+		$id = $dbw->nextSequenceValue( 'blob_blob_id_seq' );
+		$dbw->insert( $this->getTable( $dbw ), array( 'blob_id' => $id, 'blob_text' => $data ), $fname );
+		$id = $dbw->insertId();
+		if ( $dbw->getFlag( DBO_TRX ) ) {
+			$dbw->immediateCommit();
+		}
+		return "DB://$cluster/$id";
+	}
+}
+?>
Index: /MediaWiki/branches/1.11/includes/ExternalStoreHttp.php
===================================================================
--- /MediaWiki/branches/1.11/includes/ExternalStoreHttp.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/ExternalStoreHttp.php	(revision 1280)
@@ -0,0 +1,22 @@
+<?php
+/**
+ *
+ *
+ * Example class for HTTP accessable external objects
+ *
+ */
+
+class ExternalStoreHttp {
+	/* Fetch data from given URL */
+	function fetchFromURL($url) {
+	ini_set( "allow_url_fopen", true );
+	$ret = file_get_contents( $url );
+	ini_set( "allow_url_fopen", false );
+		return $ret;
+	}
+
+	/* XXX: may require other methods, for store, delete,
+	 * whatever, for initial ext storage
+	 */
+}
+?>
Index: /MediaWiki/branches/1.11/includes/FakeTitle.php
===================================================================
--- /MediaWiki/branches/1.11/includes/FakeTitle.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/FakeTitle.php	(revision 1280)
@@ -0,0 +1,87 @@
+<?php
+
+/**
+ * Fake title class that triggers an error if any members are called
+ */
+class FakeTitle {
+	function error() { throw new MWException( "Attempt to call member function of FakeTitle\n" ); }
+
+	// PHP 5.1 method overload
+	function __call( $name, $args ) { $this->error(); }
+
+	// PHP <5.1 compatibility
+	function getInterwikiLink()  { $this->error(); }
+	function getInterwikiCached() { $this->error(); }
+	function isLocal() { $this->error(); }
+	function isTrans() { $this->error(); }
+	function getText() { $this->error(); }
+	function getPartialURL() { $this->error(); }
+	function getDBkey() { $this->error(); }
+	function getNamespace() { $this->error(); }
+	function getNsText() { $this->error(); }
+	function getSubjectNsText() { $this->error(); }
+	function getInterwiki() { $this->error(); }
+	function getFragment() { $this->error(); }
+	function getDefaultNamespace() { $this->error(); }
+	function getIndexTitle() { $this->error(); }
+	function getPrefixedDBkey() { $this->error(); }
+	function getPrefixedText() { $this->error(); }
+	function getFullText() { $this->error(); }
+	function getPrefixedURL() { $this->error(); }
+	function getFullURL() {$this->error(); }
+	function getLocalURL() { $this->error(); }
+	function escapeLocalURL() { $this->error(); }
+	function escapeFullURL() { $this->error(); }
+	function getInternalURL() { $this->error(); }
+	function getEditURL() { $this->error(); }
+	function getEscapedText() { $this->error(); }
+	function isExternal() { $this->error(); }
+	function isSemiProtected() { $this->error(); }
+	function isProtected() { $this->error(); }
+	function userIsWatching() { $this->error(); }
+	function userCan() { $this->error(); }
+	function userCanCreate() { $this->error(); }
+	function userCanEdit() { $this->error(); }
+	function userCanMove() { $this->error(); }
+	function isMovable() { $this->error(); }
+	function userCanRead() { $this->error(); }
+	function isTalkPage() { $this->error(); }
+	function isCssJsSubpage() { $this->error(); }
+	function isValidCssJsSubpage() { $this->error(); }
+	function getSkinFromCssJsSubpage() { $this->error(); }
+	function isCssSubpage() { $this->error(); }
+	function isJsSubpage() { $this->error(); }
+	function userCanEditCssJsSubpage() { $this->error(); }
+	function loadRestrictions( $res ) { $this->error(); }
+	function getRestrictions($action) { $this->error(); }
+	function isDeleted() { $this->error(); }
+	function getArticleID( $flags = 0 ) { $this->error(); }
+	function getLatestRevID() { $this->error(); }
+	function resetArticleID( $newid ) { $this->error(); }
+	function invalidateCache() { $this->error(); }
+	function getTalkPage() { $this->error(); }
+	function getSubjectPage() { $this->error(); }
+	function getLinksTo() { $this->error(); }
+	function getTemplateLinksTo() { $this->error(); }
+	function getBrokenLinksFrom() { $this->error(); }
+	function getSquidURLs() { $this->error(); }
+	function moveNoAuth() { $this->error(); }
+	function isValidMoveOperation() { $this->error(); }
+	function moveTo() { $this->error(); }
+	function moveOverExistingRedirect() { $this->error(); }
+	function moveToNewTitle() { $this->error(); }
+	function isValidMoveTarget() { $this->error(); }
+	function getParentCategories() { $this->error(); }
+	function getParentCategoryTree() { $this->error(); }
+	function pageCond() { $this->error(); }
+	function getPreviousRevisionID() { $this->error(); }
+	function getNextRevisionID() { $this->error(); }
+	function equals() { $this->error(); }
+	function exists() { $this->error(); }
+	function isAlwaysKnown() { $this->error(); }
+	function touchLinks() { $this->error(); }
+	function trackbackURL() { $this->error(); }
+	function trackbackRDF() { $this->error(); }
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/Feed.php
===================================================================
--- /MediaWiki/branches/1.11/includes/Feed.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/Feed.php	(revision 1280)
@@ -0,0 +1,302 @@
+<?php
+
+# Copyright (C) 2004 Brion Vibber <brion@pobox.com>
+# http://www.mediawiki.org/
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+# http://www.gnu.org/copyleft/gpl.html
+
+/**
+ * Basic support for outputting syndication feeds in RSS, other formats.
+ * Contain a feed class as well as classes to build rss / atom ... feeds
+ * Available feeds are defined in Defines.php
+ */
+
+/**
+ * A base class for basic support for outputting syndication feeds in RSS and other formats.
+ */
+class FeedItem {
+	/**#@+
+	 * @var string
+	 * @private
+	 */
+	var $Title = 'Wiki';
+	var $Description = '';
+	var $Url = '';
+	var $Date = '';
+	var $Author = '';
+	/**#@-*/
+
+	/**#@+
+	 * @todo document
+	 */
+	function __construct( $Title, $Description, $Url, $Date = '', $Author = '', $Comments = '' ) {
+		$this->Title = $Title;
+		$this->Description = $Description;
+		$this->Url = $Url;
+		$this->Date = $Date;
+		$this->Author = $Author;
+		$this->Comments = $Comments;
+	}
+
+	/**
+	 * @static
+	 */
+	function xmlEncode( $string ) {
+		$string = str_replace( "\r\n", "\n", $string );
+		$string = preg_replace( '/[\x00-\x08\x0b\x0c\x0e-\x1f]/', '', $string );
+		return htmlspecialchars( $string );
+	}
+
+	function getTitle() { return $this->xmlEncode( $this->Title ); }
+	function getUrl() { return $this->xmlEncode( $this->Url ); }
+	function getDescription() { return $this->xmlEncode( $this->Description ); }
+	function getLanguage() {
+		global $wgContLanguageCode;
+		return $wgContLanguageCode;
+	}
+	function getDate() { return $this->Date; }
+	function getAuthor() { return $this->xmlEncode( $this->Author ); }
+	function getComments() { return $this->xmlEncode( $this->Comments ); }
+	/**#@-*/
+}
+
+/**
+ * @todo document (needs one-sentence top-level class description).
+ */
+class ChannelFeed extends FeedItem {
+	/**#@+
+	 * Abstract function, override!
+	 * @abstract
+	 */
+
+	/**
+	 * Generate Header of the feed
+	 */
+	function outHeader() {
+		# print "<feed>";
+	}
+
+	/**
+	 * Generate an item
+	 * @param $item
+	 */
+	function outItem( $item ) {
+		# print "<item>...</item>";
+	}
+
+	/**
+	 * Generate Footer of the feed
+	 */
+	function outFooter() {
+		# print "</feed>";
+	}
+	/**#@-*/
+
+	/**
+	 * Setup and send HTTP headers. Don't send any content;
+	 * content might end up being cached and re-sent with
+	 * these same headers later.
+	 *
+	 * This should be called from the outHeader() method,
+	 * but can also be called separately.
+	 *
+	 * @public
+	 */
+	function httpHeaders() {
+		global $wgOut;
+
+		# We take over from $wgOut, excepting its cache header info
+		$wgOut->disable();
+		$mimetype = $this->contentType();
+		header( "Content-type: $mimetype; charset=UTF-8" );
+		$wgOut->sendCacheControl();
+
+	}
+
+	/**
+	 * Return an internet media type to be sent in the headers.
+	 *
+	 * @return string
+	 * @private
+	 */
+	function contentType() {
+		global $wgRequest;
+		$ctype = $wgRequest->getVal('ctype','application/xml');
+		$allowedctypes = array('application/xml','text/xml','application/rss+xml','application/atom+xml');
+		return (in_array($ctype, $allowedctypes) ? $ctype : 'application/xml');
+	}
+
+	/**
+	 * Output the initial XML headers with a stylesheet for legibility
+	 * if someone finds it in a browser.
+	 * @private
+	 */
+	function outXmlHeader() {
+		global $wgServer, $wgStylePath, $wgStyleVersion;
+
+		$this->httpHeaders();
+		echo '<?xml version="1.0" encoding="utf-8"?>' . "\n";
+		echo '<?xml-stylesheet type="text/css" href="' .
+			htmlspecialchars( "$wgServer$wgStylePath/common/feed.css?$wgStyleVersion" ) . '"?' . ">\n";
+	}
+}
+
+/**
+ * Generate a RSS feed
+ */
+class RSSFeed extends ChannelFeed {
+
+	/**
+	 * Format a date given a timestamp
+	 * @param integer $ts Timestamp
+	 * @return string Date string
+	 */
+	function formatTime( $ts ) {
+		return gmdate( 'D, d M Y H:i:s \G\M\T', wfTimestamp( TS_UNIX, $ts ) );
+	}
+
+	/**
+	 * Ouput an RSS 2.0 header
+	 */
+	function outHeader() {
+		global $wgVersion;
+
+		$this->outXmlHeader();
+		?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
+	<channel>
+		<title><?php print $this->getTitle() ?></title>
+		<link><?php print $this->getUrl() ?></link>
+		<description><?php print $this->getDescription() ?></description>
+		<language><?php print $this->getLanguage() ?></language>
+		<generator>MediaWiki <?php print $wgVersion ?></generator>
+		<lastBuildDate><?php print $this->formatTime( wfTimestampNow() ) ?></lastBuildDate>
+<?php
+	}
+
+	/**
+	 * Output an RSS 2.0 item
+	 * @param FeedItem item to be output
+	 */
+	function outItem( $item ) {
+	?>
+		<item>
+			<title><?php print $item->getTitle() ?></title>
+			<link><?php print $item->getUrl() ?></link>
+			<description><?php print $item->getDescription() ?></description>
+			<?php if( $item->getDate() ) { ?><pubDate><?php print $this->formatTime( $item->getDate() ) ?></pubDate><?php } ?>
+			<?php if( $item->getAuthor() ) { ?><dc:creator><?php print $item->getAuthor() ?></dc:creator><?php }?>
+			<?php if( $item->getComments() ) { ?><comments><?php print $item->getComments() ?></comments><?php }?>
+		</item>
+<?php
+	}
+
+	/**
+	 * Ouput an RSS 2.0 footer
+	 */
+	function outFooter() {
+	?>
+	</channel>
+</rss><?php
+	}
+}
+
+/**
+ * Generate an Atom feed
+ */
+class AtomFeed extends ChannelFeed {
+	/**
+	 * @todo document
+	 */
+	function formatTime( $ts ) {
+		// need to use RFC 822 time format at least for rss2.0
+		return gmdate( 'Y-m-d\TH:i:s', wfTimestamp( TS_UNIX, $ts ) );
+	}
+
+	/**
+	 * Outputs a basic header for Atom 1.0 feeds.
+	 */
+	function outHeader() {
+		global $wgVersion;
+
+		$this->outXmlHeader();
+		?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="<?php print $this->getLanguage() ?>">
+		<id><?php print $this->getFeedId() ?></id>
+		<title><?php print $this->getTitle() ?></title>
+		<link rel="self" type="application/atom+xml" href="<?php print $this->getSelfUrl() ?>"/>
+		<link rel="alternate" type="text/html" href="<?php print $this->getUrl() ?>"/>
+		<updated><?php print $this->formatTime( wfTimestampNow() ) ?>Z</updated>
+		<subtitle><?php print $this->getDescription() ?></subtitle>
+		<generator>MediaWiki <?php print $wgVersion ?></generator>
+
+<?php
+	}
+
+	/**
+	 * Atom 1.0 requires a unique, opaque IRI as a unique indentifier
+	 * for every feed we create. For now just use the URL, but who
+	 * can tell if that's right? If we put options on the feed, do we
+	 * have to change the id? Maybe? Maybe not.
+	 *
+	 * @return string
+	 * @private
+	 */
+	function getFeedId() {
+		return $this->getSelfUrl();
+	}
+
+	/**
+	 * Atom 1.0 requests a self-reference to the feed.
+	 * @return string
+	 * @private
+	 */
+	function getSelfUrl() {
+		global $wgRequest;
+		return htmlspecialchars( $wgRequest->getFullRequestURL() );
+	}
+
+	/**
+	 * Output a given item.
+	 * @param $item
+	 */
+	function outItem( $item ) {
+		global $wgMimeType;
+	?>
+	<entry>
+		<id><?php print $item->getUrl() ?></id>
+		<title><?php print $item->getTitle() ?></title>
+		<link rel="alternate" type="<?php print $wgMimeType ?>" href="<?php print $item->getUrl() ?>"/>
+		<?php if( $item->getDate() ) { ?>
+		<updated><?php print $this->formatTime( $item->getDate() ) ?>Z</updated>
+		<?php } ?>
+
+		<summary type="html"><?php print $item->getDescription() ?></summary>
+		<?php if( $item->getAuthor() ) { ?><author><name><?php print $item->getAuthor() ?></name></author><?php }?>
+	</entry>
+
+<?php /* FIXME need to add comments
+	<?php if( $item->getComments() ) { ?><dc:comment><?php print $item->getComments() ?></dc:comment><?php }?>
+      */
+	}
+
+	/**
+	 * Outputs the footer for Atom 1.0 feed (basicly '\</feed\>').
+	 */
+	function outFooter() {?>
+	</feed><?php
+	}
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/FileStore.php
===================================================================
--- /MediaWiki/branches/1.11/includes/FileStore.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/FileStore.php	(revision 1280)
@@ -0,0 +1,379 @@
+<?php
+
+/**
+ * @todo document (needs one-sentence top-level class description).
+ */
+class FileStore {
+	const DELETE_ORIGINAL = 1;
+	
+	/**
+	 * Fetch the FileStore object for a given storage group
+	 */
+	static function get( $group ) {
+		global $wgFileStore;
+		
+		if( isset( $wgFileStore[$group] ) ) {
+			$info = $wgFileStore[$group];
+			return new FileStore( $group,
+				$info['directory'],
+				$info['url'],
+				intval( $info['hash'] ) );
+		} else {
+			return null;
+		}
+	}
+	
+	private function __construct( $group, $directory, $path, $hash ) {
+		$this->mGroup = $group;
+		$this->mDirectory = $directory;
+		$this->mPath = $path;
+		$this->mHashLevel = $hash;
+	}
+	
+	/**
+	 * Acquire a lock; use when performing write operations on a store.
+	 * This is attached to your master database connection, so if you
+	 * suffer an uncaught error the lock will be released when the
+	 * connection is closed.
+	 *
+	 * @todo Probably only works on MySQL. Abstract to the Database class?
+	 */
+	static function lock() {
+		global $wgDBtype;
+		if ($wgDBtype != 'mysql')
+			return true;
+		$dbw = wfGetDB( DB_MASTER );
+		$lockname = $dbw->addQuotes( FileStore::lockName() );
+		$result = $dbw->query( "SELECT GET_LOCK($lockname, 5) AS lockstatus", __METHOD__ );
+		$row = $dbw->fetchObject( $result );
+		$dbw->freeResult( $result );
+		
+		if( $row->lockstatus == 1 ) {
+			return true;
+		} else {
+			wfDebug( __METHOD__." failed to acquire lock\n" );
+			return false;
+		}
+	}
+	
+	/**
+	 * Release the global file store lock.
+	 */
+	static function unlock() {
+		global $wgDBtype;
+		if ($wgDBtype != 'mysql')
+			return true;
+		$dbw = wfGetDB( DB_MASTER );
+		$lockname = $dbw->addQuotes( FileStore::lockName() );
+		$result = $dbw->query( "SELECT RELEASE_LOCK($lockname)", __METHOD__ );
+		$dbw->fetchObject( $result );
+		$dbw->freeResult( $result );
+	}
+	
+	private static function lockName() {
+		return 'MediaWiki.' . wfWikiID() . '.FileStore';
+	}
+	
+	/**
+	 * Copy a file into the file store from elsewhere in the filesystem.
+	 * Should be protected by FileStore::lock() to avoid race conditions.
+	 *
+	 * @param $key storage key string
+	 * @param $flags
+	 *  DELETE_ORIGINAL - remove the source file on transaction commit.
+	 *
+	 * @throws FSException if copy can't be completed
+	 * @return FSTransaction
+	 */
+	function insert( $key, $sourcePath, $flags=0 ) {
+		$destPath = $this->filePath( $key );
+		return $this->copyFile( $sourcePath, $destPath, $flags );
+	}
+	
+	/**
+	 * Copy a file from the file store to elsewhere in the filesystem.
+	 * Should be protected by FileStore::lock() to avoid race conditions.
+	 *
+	 * @param $key storage key string
+	 * @param $flags
+	 *  DELETE_ORIGINAL - remove the source file on transaction commit.
+	 *
+	 * @throws FSException if copy can't be completed
+	 * @return FSTransaction on success
+	 */
+	function export( $key, $destPath, $flags=0 ) {
+		$sourcePath = $this->filePath( $key );
+		return $this->copyFile( $sourcePath, $destPath, $flags );
+	}
+	
+	private function copyFile( $sourcePath, $destPath, $flags=0 ) {
+		if( !file_exists( $sourcePath ) ) {
+			// Abort! Abort!
+			throw new FSException( "missing source file '$sourcePath'" );
+		}
+		
+		$transaction = new FSTransaction();
+		
+		if( $flags & self::DELETE_ORIGINAL ) {
+			$transaction->addCommit( FSTransaction::DELETE_FILE, $sourcePath );
+		}
+		
+		if( file_exists( $destPath ) ) {
+			// An identical file is already present; no need to copy.
+		} else {
+			if( !file_exists( dirname( $destPath ) ) ) {
+				wfSuppressWarnings();
+				$ok = mkdir( dirname( $destPath ), 0777, true );
+				wfRestoreWarnings();
+				
+				if( !$ok ) {
+					throw new FSException(
+						"failed to create directory for '$destPath'" );
+				}
+			}
+			
+			wfSuppressWarnings();
+			$ok = copy( $sourcePath, $destPath );
+			wfRestoreWarnings();
+			
+			if( $ok ) {
+				wfDebug( __METHOD__." copied '$sourcePath' to '$destPath'\n" );
+				$transaction->addRollback( FSTransaction::DELETE_FILE, $destPath );
+			} else {
+				throw new FSException(
+					__METHOD__." failed to copy '$sourcePath' to '$destPath'" );
+			}
+		}
+		
+		return $transaction;
+	}
+	
+	/**
+	 * Delete a file from the file store.
+	 * Caller's responsibility to make sure it's not being used by another row.
+	 *
+	 * File is not actually removed until transaction commit.
+	 * Should be protected by FileStore::lock() to avoid race conditions.
+	 *
+	 * @param $key storage key string
+	 * @throws FSException if file can't be deleted
+	 * @return FSTransaction
+	 */
+	function delete( $key ) {
+		$destPath = $this->filePath( $key );
+		if( false === $destPath ) {
+			throw new FSExcepton( "file store does not contain file '$key'" );
+		} else {
+			return FileStore::deleteFile( $destPath );
+		}
+	}
+	
+	/**
+	 * Delete a non-managed file on a transactional basis.
+	 *
+	 * File is not actually removed until transaction commit.
+	 * Should be protected by FileStore::lock() to avoid race conditions.
+	 *
+	 * @param $path file to remove
+	 * @throws FSException if file can't be deleted
+	 * @return FSTransaction
+	 *
+	 * @todo Might be worth preliminary permissions check
+	 */
+	static function deleteFile( $path ) {
+		if( file_exists( $path ) ) {
+			$transaction = new FSTransaction();
+			$transaction->addCommit( FSTransaction::DELETE_FILE, $path );
+			return $transaction;
+		} else {
+			throw new FSException( "cannot delete missing file '$path'" );
+		}
+	}
+	
+	/**
+	 * Stream a contained file directly to HTTP output.
+	 * Will throw a 404 if file is missing; 400 if invalid key.
+	 * @return true on success, false on failure
+	 */
+	function stream( $key ) {
+		$path = $this->filePath( $key );
+		if( $path === false ) {
+			wfHttpError( 400, "Bad request", "Invalid or badly-formed filename." );
+			return false;
+		}
+		
+		if( file_exists( $path ) ) {
+			// Set the filename for more convenient save behavior from browsers
+			// FIXME: Is this safe?
+			header( 'Content-Disposition: inline; filename="' . $key . '"' );
+			
+			require_once 'StreamFile.php';
+			wfStreamFile( $path );
+		} else {
+			return wfHttpError( 404, "Not found",
+				"The requested resource does not exist." );
+		}
+	}
+	
+	/**
+	 * Confirm that the given file key is valid.
+	 * Note that a valid key may refer to a file that does not exist.
+	 *
+	 * Key should consist of a 32-digit base-36 SHA-1 hash and
+	 * an optional alphanumeric extension, all lowercase.
+	 * The whole must not exceed 64 characters.
+	 *
+	 * @param $key
+	 * @return boolean
+	 */
+	static function validKey( $key ) {
+		return preg_match( '/^[0-9a-z]{32}(\.[0-9a-z]{1,31})?$/', $key );
+	}
+	
+	
+	/**
+	 * Calculate file storage key from a file on disk.
+	 * You must pass an extension to it, as some files may be calculated
+	 * out of a temporary file etc.
+	 *
+	 * @param $path to file
+	 * @param $extension
+	 * @return string or false if could not open file or bad extension
+	 */
+	static function calculateKey( $path, $extension ) {
+		wfSuppressWarnings();
+		$hash = sha1_file( $path );
+		wfRestoreWarnings();
+		if( $hash === false ) {
+			wfDebug( __METHOD__.": couldn't hash file '$path'\n" );
+			return false;
+		}
+		
+		$base36 = wfBaseConvert( $hash, 16, 36, 32 );
+		if( $extension == '' ) {
+			$key = $base36;
+		} else {
+			$key = $base36 . '.' . $extension;
+		}
+		
+		// Sanity check
+		if( self::validKey( $key ) ) {
+			return $key;
+		} else {
+			wfDebug( __METHOD__.": generated bad key '$key'\n" );
+			return false;
+		}
+	}
+	
+	/**
+	 * Return filesystem path to the given file.
+	 * Note that the file may or may not exist.
+	 * @return string or false if an invalid key
+	 */
+	function filePath( $key ) {
+		if( self::validKey( $key ) ) {
+			return $this->mDirectory . DIRECTORY_SEPARATOR .
+				$this->hashPath( $key, DIRECTORY_SEPARATOR );
+		} else {
+			return false;
+		}
+	}
+	
+	/**
+	 * Return URL path to the given file, if the store is public.
+	 * @return string or false if not public
+	 */
+	function urlPath( $key ) {
+		if( $this->mUrl && self::validKey( $key ) ) {
+			return $this->mUrl . '/' . $this->hashPath( $key, '/' );
+		} else {
+			return false;
+		}
+	}
+	
+	private function hashPath( $key, $separator ) {
+		$parts = array();
+		for( $i = 0; $i < $this->mHashLevel; $i++ ) {
+			$parts[] = $key{$i};
+		}
+		$parts[] = $key;
+		return implode( $separator, $parts );
+	}
+}
+
+/**
+ * Wrapper for file store transaction stuff.
+ *
+ * FileStore methods may return one of these for undoable operations;
+ * you can then call its rollback() or commit() methods to perform
+ * final cleanup if dependent database work fails or succeeds.
+ */
+class FSTransaction {
+	const DELETE_FILE = 1;
+	
+	/**
+	 * Combine more items into a fancier transaction
+	 */
+	function add( FSTransaction $transaction ) {
+		$this->mOnCommit = array_merge(
+			$this->mOnCommit, $transaction->mOnCommit );
+		$this->mOnRollback = array_merge(
+			$this->mOnRollback, $transaction->mOnRollback );
+	}
+	
+	/**
+	 * Perform final actions for success.
+	 * @return true if actions applied ok, false if errors
+	 */
+	function commit() {
+		return $this->apply( $this->mOnCommit );
+	}
+	
+	/**
+	 * Perform final actions for failure.
+	 * @return true if actions applied ok, false if errors
+	 */
+	function rollback() {
+		return $this->apply( $this->mOnRollback );
+	}
+	
+	// --- Private and friend functions below...
+	
+	function __construct() {
+		$this->mOnCommit = array();
+		$this->mOnRollback = array();
+	}
+	
+	function addCommit( $action, $path ) {
+		$this->mOnCommit[] = array( $action, $path );
+	}
+	
+	function addRollback( $action, $path ) {
+		$this->mOnRollback[] = array( $action, $path );
+	}
+	
+	private function apply( $actions ) {
+		$result = true;
+		foreach( $actions as $item ) {
+			list( $action, $path ) = $item;
+			if( $action == self::DELETE_FILE ) {
+				wfSuppressWarnings();
+				$ok = unlink( $path );
+				wfRestoreWarnings();
+				if( $ok )
+					wfDebug( __METHOD__.": deleting file '$path'\n" );
+				else
+					wfDebug( __METHOD__.": failed to delete file '$path'\n" );
+				$result = $result && $ok;
+			}
+		}
+		return $result;
+	}
+}
+
+/**
+ * @addtogroup Exception
+ */
+class FSException extends MWException { }
+
+?>
Index: /MediaWiki/branches/1.11/includes/GlobalFunctions.php
===================================================================
--- /MediaWiki/branches/1.11/includes/GlobalFunctions.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/GlobalFunctions.php	(revision 1280)
@@ -0,0 +1,2269 @@
+<?php
+
+if ( !defined( 'MEDIAWIKI' ) ) {
+	die( "This file is part of MediaWiki, it is not a valid entry point" );
+}
+
+/**
+ * Global functions used everywhere
+ */
+
+/**
+ * Some globals and requires needed
+ */
+
+/** Total number of articles */
+$wgNumberOfArticles = -1; # Unset
+
+/** Total number of views */
+$wgTotalViews = -1;
+
+/** Total number of edits */
+$wgTotalEdits = -1;
+
+
+require_once dirname(__FILE__) . '/LogPage.php';
+require_once dirname(__FILE__) . '/normal/UtfNormalUtil.php';
+require_once dirname(__FILE__) . '/XmlFunctions.php';
+
+/**
+ * Compatibility functions
+ *
+ * We more or less support PHP 5.0.x and up.
+ * Re-implementations of newer functions or functions in non-standard
+ * PHP extensions may be included here.
+ */
+if( !function_exists('iconv') ) {
+	# iconv support is not in the default configuration and so may not be present.
+	# Assume will only ever use utf-8 and iso-8859-1.
+	# This will *not* work in all circumstances.
+	function iconv( $from, $to, $string ) {
+		if(strcasecmp( $from, $to ) == 0) return $string;
+		if(strcasecmp( $from, 'utf-8' ) == 0) return utf8_decode( $string );
+		if(strcasecmp( $to, 'utf-8' ) == 0) return utf8_encode( $string );
+		return $string;
+	}
+}
+
+# UTF-8 substr function based on a PHP manual comment
+if ( !function_exists( 'mb_substr' ) ) {
+	function mb_substr( $str, $start ) {
+		$ar = array();
+		preg_match_all( '/./us', $str, $ar );
+
+		if( func_num_args() >= 3 ) {
+			$end = func_get_arg( 2 );
+			return join( '', array_slice( $ar[0], $start, $end ) );
+		} else {
+			return join( '', array_slice( $ar[0], $start ) );
+		}
+	}
+}
+
+if ( !function_exists( 'mb_strlen' ) ) {
+	/**
+	 * Fallback implementation of mb_strlen, hardcoded to UTF-8.
+	 * @param string $str
+	 * @param string $enc optional encoding; ignored
+	 * @return int
+	 */
+	function mb_strlen( $str, $enc="" ) {
+		$counts = count_chars( $str );
+		$total = 0;
+
+		// Count ASCII bytes
+		for( $i = 0; $i < 0x80; $i++ ) {
+			$total += $counts[$i];
+		}
+
+		// Count multibyte sequence heads
+		for( $i = 0xc0; $i < 0xff; $i++ ) {
+			$total += $counts[$i];
+		}
+		return $total;
+	}
+}
+
+if ( !function_exists( 'array_diff_key' ) ) {
+	/**
+	 * Exists in PHP 5.1.0+
+	 * Not quite compatible, two-argument version only
+	 * Null values will cause problems due to this use of isset()
+	 */
+	function array_diff_key( $left, $right ) {
+		$result = $left;
+		foreach ( $left as $key => $unused ) {
+			if ( isset( $right[$key] ) ) {
+				unset( $result[$key] );
+			}
+		}
+		return $result;
+	}
+}
+
+
+/**
+ * Wrapper for clone(), for compatibility with PHP4-friendly extensions.
+ * PHP 5 won't let you declare a 'clone' function, even conditionally,
+ * so it has to be a wrapper with a different name.
+ */
+function wfClone( $object ) {
+	return clone( $object );
+}
+
+/**
+ * Where as we got a random seed
+ */
+$wgRandomSeeded = false;
+
+/**
+ * Seed Mersenne Twister
+ * No-op for compatibility; only necessary in PHP < 4.2.0
+ */
+function wfSeedRandom() {
+	/* No-op */
+}
+
+/**
+ * Get a random decimal value between 0 and 1, in a way
+ * not likely to give duplicate values for any realistic
+ * number of articles.
+ *
+ * @return string
+ */
+function wfRandom() {
+	# The maximum random value is "only" 2^31-1, so get two random
+	# values to reduce the chance of dupes
+	$max = mt_getrandmax() + 1;
+	$rand = number_format( (mt_rand() * $max + mt_rand())
+		/ $max / $max, 12, '.', '' );
+	return $rand;
+}
+
+/**
+ * We want / and : to be included as literal characters in our title URLs.
+ * %2F in the page titles seems to fatally break for some reason.
+ *
+ * @param $s String:
+ * @return string
+*/
+function wfUrlencode ( $s ) {
+	$s = urlencode( $s );
+	$s = preg_replace( '/%3[Aa]/', ':', $s );
+	$s = preg_replace( '/%2[Ff]/', '/', $s );
+
+	return $s;
+}
+
+/**
+ * Sends a line to the debug log if enabled or, optionally, to a comment in output.
+ * In normal operation this is a NOP.
+ *
+ * Controlling globals:
+ * $wgDebugLogFile - points to the log file
+ * $wgProfileOnly - if set, normal debug messages will not be recorded.
+ * $wgDebugRawPage - if false, 'action=raw' hits will not result in debug output.
+ * $wgDebugComments - if on, some debug items may appear in comments in the HTML output.
+ *
+ * @param $text String
+ * @param $logonly Bool: set true to avoid appearing in HTML when $wgDebugComments is set
+ */
+function wfDebug( $text, $logonly = false ) {
+	global $wgOut, $wgDebugLogFile, $wgDebugComments, $wgProfileOnly, $wgDebugRawPage;
+	static $recursion = 0;
+
+	# Check for raw action using $_GET not $wgRequest, since the latter might not be initialised yet
+	if ( isset( $_GET['action'] ) && $_GET['action'] == 'raw' && !$wgDebugRawPage ) {
+		return;
+	}
+
+	if ( $wgDebugComments && !$logonly ) {
+		if ( !isset( $wgOut ) ) {
+			return;
+		}
+		if ( !StubObject::isRealObject( $wgOut ) ) {
+			if ( $recursion ) {
+				return;
+			}
+			$recursion++;
+			$wgOut->_unstub();
+			$recursion--;
+		}
+		$wgOut->debug( $text );
+	}
+	if ( '' != $wgDebugLogFile && !$wgProfileOnly ) {
+		# Strip unprintables; they can switch terminal modes when binary data
+		# gets dumped, which is pretty annoying.
+		$text = preg_replace( '![\x00-\x08\x0b\x0c\x0e-\x1f]!', ' ', $text );
+		wfErrorLog( $text, $wgDebugLogFile );
+	}
+}
+
+/**
+ * Send a line to a supplementary debug log file, if configured, or main debug log if not.
+ * $wgDebugLogGroups[$logGroup] should be set to a filename to send to a separate log.
+ *
+ * @param $logGroup String
+ * @param $text String
+ * @param $public Bool: whether to log the event in the public log if no private
+ *                     log file is specified, (default true)
+ */
+function wfDebugLog( $logGroup, $text, $public = true ) {
+	global $wgDebugLogGroups;
+	if( $text{strlen( $text ) - 1} != "\n" ) $text .= "\n";
+	if( isset( $wgDebugLogGroups[$logGroup] ) ) {
+		$time = wfTimestamp( TS_DB );
+		$wiki = wfWikiID();
+		wfErrorLog( "$time $wiki: $text", $wgDebugLogGroups[$logGroup] );
+	} else if ( $public === true ) {
+		wfDebug( $text, true );
+	}
+}
+
+/**
+ * Log for database errors
+ * @param $text String: database error message.
+ */
+function wfLogDBError( $text ) {
+	global $wgDBerrorLog, $wgDBname;
+	if ( $wgDBerrorLog ) {
+		$host = trim(`hostname`);
+		$text = date('D M j G:i:s T Y') . "\t$host\t$wgDBname\t$text";
+		wfErrorLog( $text, $wgDBerrorLog );
+	}
+}
+
+/**
+ * Log to a file without getting "file size exceeded" signals
+ */
+function wfErrorLog( $text, $file ) {
+	wfSuppressWarnings();
+	$exists = file_exists( $file );
+	$size = $exists ? filesize( $file ) : false;
+	if ( !$exists || ( $size !== false && $size + strlen( $text ) < 0x7fffffff ) ) {
+		error_log( $text, 3, $file );
+	}
+	wfRestoreWarnings();
+}
+
+/**
+ * @todo document
+ */
+function wfLogProfilingData() {
+	global $wgRequestTime, $wgDebugLogFile, $wgDebugRawPage, $wgRequest;
+	global $wgProfiling, $wgUser;
+	if ( $wgProfiling ) {
+		$now = wfTime();
+		$elapsed = $now - $wgRequestTime;
+		$prof = wfGetProfilingOutput( $wgRequestTime, $elapsed );
+		$forward = '';
+		if( !empty( $_SERVER['HTTP_X_FORWARDED_FOR'] ) )
+			$forward = ' forwarded for ' . $_SERVER['HTTP_X_FORWARDED_FOR'];
+		if( !empty( $_SERVER['HTTP_CLIENT_IP'] ) )
+			$forward .= ' client IP ' . $_SERVER['HTTP_CLIENT_IP'];
+		if( !empty( $_SERVER['HTTP_FROM'] ) )
+			$forward .= ' from ' . $_SERVER['HTTP_FROM'];
+		if( $forward )
+			$forward = "\t(proxied via {$_SERVER['REMOTE_ADDR']}{$forward})";
+		// Don't unstub $wgUser at this late stage just for statistics purposes
+		if( StubObject::isRealObject($wgUser) && $wgUser->isAnon() )
+			$forward .= ' anon';
+		$log = sprintf( "%s\t%04.3f\t%s\n",
+		  gmdate( 'YmdHis' ), $elapsed,
+		  urldecode( $wgRequest->getRequestURL() . $forward ) );
+		if ( '' != $wgDebugLogFile && ( $wgRequest->getVal('action') != 'raw' || $wgDebugRawPage ) ) {
+			wfErrorLog( $log . $prof, $wgDebugLogFile );
+		}
+	}
+}
+
+/**
+ * Check if the wiki read-only lock file is present. This can be used to lock
+ * off editing functions, but doesn't guarantee that the database will not be
+ * modified.
+ * @return bool
+ */
+function wfReadOnly() {
+	global $wgReadOnlyFile, $wgReadOnly;
+
+	if ( !is_null( $wgReadOnly ) ) {
+		return (bool)$wgReadOnly;
+	}
+	if ( '' == $wgReadOnlyFile ) {
+		return false;
+	}
+	// Set $wgReadOnly for faster access next time
+	if ( is_file( $wgReadOnlyFile ) ) {
+		$wgReadOnly = file_get_contents( $wgReadOnlyFile );
+	} else {
+		$wgReadOnly = false;
+	}
+	return (bool)$wgReadOnly;
+}
+
+
+/**
+ * Get a message from anywhere, for the current user language.
+ *
+ * Use wfMsgForContent() instead if the message should NOT
+ * change depending on the user preferences.
+ *
+ * Note that the message may contain HTML, and is therefore
+ * not safe for insertion anywhere. Some functions such as
+ * addWikiText will do the escaping for you. Use wfMsgHtml()
+ * if you need an escaped message.
+ *
+ * @param $key String: lookup key for the message, usually
+ *    defined in languages/Language.php
+ * 
+ * This function also takes extra optional parameters (not 
+ * shown in the function definition), which can by used to 
+ * insert variable text into the predefined message.
+ */
+function wfMsg( $key ) {
+	$args = func_get_args();
+	array_shift( $args );
+	return wfMsgReal( $key, $args, true );
+}
+
+/**
+ * Same as above except doesn't transform the message
+ */
+function wfMsgNoTrans( $key ) {
+	$args = func_get_args();
+	array_shift( $args );
+	return wfMsgReal( $key, $args, true, false, false );
+}
+
+/**
+ * Get a message from anywhere, for the current global language
+ * set with $wgLanguageCode.
+ *
+ * Use this if the message should NOT change  dependent on the
+ * language set in the user's preferences. This is the case for
+ * most text written into logs, as well as link targets (such as
+ * the name of the copyright policy page). Link titles, on the
+ * other hand, should be shown in the UI language.
+ *
+ * Note that MediaWiki allows users to change the user interface
+ * language in their preferences, but a single installation
+ * typically only contains content in one language.
+ *
+ * Be wary of this distinction: If you use wfMsg() where you should
+ * use wfMsgForContent(), a user of the software may have to
+ * customize over 70 messages in order to, e.g., fix a link in every
+ * possible language.
+ *
+ * @param $key String: lookup key for the message, usually
+ *    defined in languages/Language.php
+ */
+function wfMsgForContent( $key ) {
+	global $wgForceUIMsgAsContentMsg;
+	$args = func_get_args();
+	array_shift( $args );
+	$forcontent = true;
+	if( is_array( $wgForceUIMsgAsContentMsg ) &&
+		in_array( $key, $wgForceUIMsgAsContentMsg ) )
+		$forcontent = false;
+	return wfMsgReal( $key, $args, true, $forcontent );
+}
+
+/**
+ * Same as above except doesn't transform the message
+ */
+function wfMsgForContentNoTrans( $key ) {
+	global $wgForceUIMsgAsContentMsg;
+	$args = func_get_args();
+	array_shift( $args );
+	$forcontent = true;
+	if( is_array( $wgForceUIMsgAsContentMsg ) &&
+		in_array( $key, $wgForceUIMsgAsContentMsg ) )
+		$forcontent = false;
+	return wfMsgReal( $key, $args, true, $forcontent, false );
+}
+
+/**
+ * Get a message from the language file, for the UI elements
+ */
+function wfMsgNoDB( $key ) {
+	$args = func_get_args();
+	array_shift( $args );
+	return wfMsgReal( $key, $args, false );
+}
+
+/**
+ * Get a message from the language file, for the content
+ */
+function wfMsgNoDBForContent( $key ) {
+	global $wgForceUIMsgAsContentMsg;
+	$args = func_get_args();
+	array_shift( $args );
+	$forcontent = true;
+	if( is_array( $wgForceUIMsgAsContentMsg ) &&
+		in_array( $key,	$wgForceUIMsgAsContentMsg ) )
+		$forcontent = false;
+	return wfMsgReal( $key, $args, false, $forcontent );
+}
+
+
+/**
+ * Really get a message
+ * @param $key String: key to get.
+ * @param $args
+ * @param $useDB Boolean
+ * @param $transform Boolean: Whether or not to transform the message.
+ * @param $forContent Boolean
+ * @return String: the requested message.
+ */
+function wfMsgReal( $key, $args, $useDB = true, $forContent=false, $transform = true ) {
+	$fname = 'wfMsgReal';
+	wfProfileIn( $fname );
+	$message = wfMsgGetKey( $key, $useDB, $forContent, $transform );
+	$message = wfMsgReplaceArgs( $message, $args );
+	wfProfileOut( $fname );
+	return $message;
+}
+
+/**
+ * This function provides the message source for messages to be edited which are *not* stored in the database.
+ * @param $key String:
+ */
+function wfMsgWeirdKey ( $key ) {
+	$subsource = str_replace ( ' ' , '_' , $key ) ;
+	$source = wfMsgForContentNoTrans( $subsource ) ;
+	if ( wfEmptyMsg( $subsource, $source) ) {
+		# Try again with first char lower case
+		$subsource = strtolower ( substr ( $subsource , 0 , 1 ) ) . substr ( $subsource , 1 ) ;
+		$source = wfMsgForContentNoTrans( $subsource ) ;
+	}
+	if ( wfEmptyMsg( $subsource, $source ) ) {
+		# Didn't work either, return blank text
+		$source = "" ;
+	}
+	return $source ;
+}
+
+/**
+ * Fetch a message string value, but don't replace any keys yet.
+ * @param string $key
+ * @param bool $useDB
+ * @param bool $forContent
+ * @return string
+ * @private
+ */
+function wfMsgGetKey( $key, $useDB, $forContent = false, $transform = true ) {
+	global $wgParser, $wgContLang, $wgMessageCache, $wgLang;
+
+	if ( is_object( $wgMessageCache ) )
+		$transstat = $wgMessageCache->getTransform();
+
+	if( is_object( $wgMessageCache ) ) {
+		if ( ! $transform )
+			$wgMessageCache->disableTransform();
+		$message = $wgMessageCache->get( $key, $useDB, $forContent );
+	} else {
+		if( $forContent ) {
+			$lang = &$wgContLang;
+		} else {
+			$lang = &$wgLang;
+		}
+
+		wfSuppressWarnings();
+
+		if( is_object( $lang ) ) {
+			$message = $lang->getMessage( $key );
+		} else {
+			$message = false;
+		}
+		wfRestoreWarnings();
+		if($message === false)
+			$message = Language::getMessage($key);
+		if ( $transform && strstr( $message, '{{' ) !== false ) {
+			$message = $wgParser->transformMsg($message, $wgMessageCache->getParserOptions() );
+		}
+	}
+
+	if ( is_object( $wgMessageCache ) && ! $transform )
+		$wgMessageCache->setTransform( $transstat );
+
+	return $message;
+}
+
+/**
+ * Replace message parameter keys on the given formatted output.
+ *
+ * @param string $message
+ * @param array $args
+ * @return string
+ * @private
+ */
+function wfMsgReplaceArgs( $message, $args ) {
+	# Fix windows line-endings
+	# Some messages are split with explode("\n", $msg)
+	$message = str_replace( "\r", '', $message );
+
+	// Replace arguments
+	if ( count( $args ) ) {
+		if ( is_array( $args[0] ) ) {
+			foreach ( $args[0] as $key => $val ) {
+				$message = str_replace( '$' . $key, $val, $message );
+			}
+		} else {
+			foreach( $args as $n => $param ) {
+				$replacementKeys['$' . ($n + 1)] = $param;
+			}
+			$message = strtr( $message, $replacementKeys );
+		}
+	}
+
+	return $message;
+}
+
+/**
+ * Return an HTML-escaped version of a message.
+ * Parameter replacements, if any, are done *after* the HTML-escaping,
+ * so parameters may contain HTML (eg links or form controls). Be sure
+ * to pre-escape them if you really do want plaintext, or just wrap
+ * the whole thing in htmlspecialchars().
+ *
+ * @param string $key
+ * @param string ... parameters
+ * @return string
+ */
+function wfMsgHtml( $key ) {
+	$args = func_get_args();
+	array_shift( $args );
+	return wfMsgReplaceArgs( htmlspecialchars( wfMsgGetKey( $key, true ) ), $args );
+}
+
+/**
+ * Return an HTML version of message
+ * Parameter replacements, if any, are done *after* parsing the wiki-text message,
+ * so parameters may contain HTML (eg links or form controls). Be sure
+ * to pre-escape them if you really do want plaintext, or just wrap
+ * the whole thing in htmlspecialchars().
+ *
+ * @param string $key
+ * @param string ... parameters
+ * @return string
+ */
+function wfMsgWikiHtml( $key ) {
+	global $wgOut;
+	$args = func_get_args();
+	array_shift( $args );
+	return wfMsgReplaceArgs( $wgOut->parse( wfMsgGetKey( $key, true ), /* can't be set to false */ true ), $args );
+}
+
+/**
+ * Returns message in the requested format
+ * @param string $key Key of the message
+ * @param array $options Processing rules:
+ *  <i>parse</i>: parses wikitext to html
+ *  <i>parseinline</i>: parses wikitext to html and removes the surrounding p's added by parser or tidy
+ *  <i>escape</i>: filters message trough htmlspecialchars
+ *  <i>replaceafter</i>: parameters are substituted after parsing or escaping
+ *  <i>parsemag</i>: transform the message using magic phrases
+ */
+function wfMsgExt( $key, $options ) {
+	global $wgOut, $wgParser;
+
+	$args = func_get_args();
+	array_shift( $args );
+	array_shift( $args );
+
+	if( !is_array($options) ) {
+		$options = array($options);
+	}
+
+	$string = wfMsgGetKey( $key, true, false, false );
+
+	if( !in_array('replaceafter', $options) ) {
+		$string = wfMsgReplaceArgs( $string, $args );
+	}
+
+	if( in_array('parse', $options) ) {
+		$string = $wgOut->parse( $string, true, true );
+	} elseif ( in_array('parseinline', $options) ) {
+		$string = $wgOut->parse( $string, true, true );
+		$m = array();
+		if( preg_match( "~^<p>(.*)\n?</p>$~", $string, $m ) ) {
+			$string = $m[1];
+		}
+	} elseif ( in_array('parsemag', $options) ) {
+		global $wgMessageCache;
+		if ( isset( $wgMessageCache ) ) {
+			$string = $wgMessageCache->transform( $string );
+		}
+	}
+
+	if ( in_array('escape', $options) ) {
+		$string = htmlspecialchars ( $string );
+	}
+
+	if( in_array('replaceafter', $options) ) {
+		$string = wfMsgReplaceArgs( $string, $args );
+	}
+
+	return $string;
+}
+
+
+/**
+ * Just like exit() but makes a note of it.
+ * Commits open transactions except if the error parameter is set
+ *
+ * @deprecated Please return control to the caller or throw an exception
+ */
+function wfAbruptExit( $error = false ){
+	global $wgLoadBalancer;
+	static $called = false;
+	if ( $called ){
+		exit( -1 );
+	}
+	$called = true;
+
+	$bt = wfDebugBacktrace();
+	if( $bt ) {
+		for($i = 0; $i < count($bt) ; $i++){
+			$file = isset($bt[$i]['file']) ? $bt[$i]['file'] : "unknown";
+			$line = isset($bt[$i]['line']) ? $bt[$i]['line'] : "unknown";
+			wfDebug("WARNING: Abrupt exit in $file at line $line\n");
+		}
+	} else {
+		wfDebug('WARNING: Abrupt exit\n');
+	}
+
+	wfLogProfilingData();
+
+	if ( !$error ) {
+		$wgLoadBalancer->closeAll();
+	}
+	exit( -1 );
+}
+
+/**
+ * @deprecated Please return control the caller or throw an exception
+ */
+function wfErrorExit() {
+	wfAbruptExit( true );
+}
+
+/**
+ * Print a simple message and die, returning nonzero to the shell if any.
+ * Plain die() fails to return nonzero to the shell if you pass a string.
+ * @param string $msg
+ */
+function wfDie( $msg='' ) {
+	echo $msg;
+	die( 1 );
+}
+
+/**
+ * Throw a debugging exception. This function previously once exited the process, 
+ * but now throws an exception instead, with similar results.
+ *
+ * @param string $msg Message shown when dieing.
+ */
+function wfDebugDieBacktrace( $msg = '' ) {
+	throw new MWException( $msg );
+}
+
+/**
+ * Fetch server name for use in error reporting etc.
+ * Use real server name if available, so we know which machine
+ * in a server farm generated the current page.
+ * @return string
+ */
+function wfHostname() {
+	if ( function_exists( 'posix_uname' ) ) {
+		// This function not present on Windows
+		$uname = @posix_uname();
+	} else {
+		$uname = false;
+	}
+	if( is_array( $uname ) && isset( $uname['nodename'] ) ) {
+		return $uname['nodename'];
+	} else {
+		# This may be a virtual server.
+		return $_SERVER['SERVER_NAME'];
+	}
+}
+
+	/**
+	 * Returns a HTML comment with the elapsed time since request.
+	 * This method has no side effects.
+	 * @return string
+	 */
+	function wfReportTime() {
+		global $wgRequestTime;
+
+		$now = wfTime();
+		$elapsed = $now - $wgRequestTime;
+
+		$com = sprintf( "<!-- Served by %s in %01.3f secs. -->",
+		  wfHostname(), $elapsed );
+		return $com;
+	}
+
+/**
+ * Safety wrapper for debug_backtrace().
+ *
+ * With Zend Optimizer 3.2.0 loaded, this causes segfaults under somewhat
+ * murky circumstances, which may be triggered in part by stub objects
+ * or other fancy talkin'.
+ *
+ * Will return an empty array if Zend Optimizer is detected, otherwise
+ * the output from debug_backtrace() (trimmed).
+ *
+ * @return array of backtrace information
+ */
+function wfDebugBacktrace() {
+	if( extension_loaded( 'Zend Optimizer' ) ) {
+		wfDebug( "Zend Optimizer detected; skipping debug_backtrace for safety.\n" );
+		return array();
+	} else {
+		return array_slice( debug_backtrace(), 1 );
+	}
+}
+
+function wfBacktrace() {
+	global $wgCommandLineMode;
+
+	if ( $wgCommandLineMode ) {
+		$msg = '';
+	} else {
+		$msg = "<ul>\n";
+	}
+	$backtrace = wfDebugBacktrace();
+	foreach( $backtrace as $call ) {
+		if( isset( $call['file'] ) ) {
+			$f = explode( DIRECTORY_SEPARATOR, $call['file'] );
+			$file = $f[count($f)-1];
+		} else {
+			$file = '-';
+		}
+		if( isset( $call['line'] ) ) {
+			$line = $call['line'];
+		} else {
+			$line = '-';
+		}
+		if ( $wgCommandLineMode ) {
+			$msg .= "$file line $line calls ";
+		} else {
+			$msg .= '<li>' . $file . ' line ' . $line . ' calls ';
+		}
+		if( !empty( $call['class'] ) ) $msg .= $call['class'] . '::';
+		$msg .= $call['function'] . '()';
+
+		if ( $wgCommandLineMode ) {
+			$msg .= "\n";
+		} else {
+			$msg .= "</li>\n";
+		}
+	}
+	if ( $wgCommandLineMode ) {
+		$msg .= "\n";
+	} else {
+		$msg .= "</ul>\n";
+	}
+
+	return $msg;
+}
+
+
+/* Some generic result counters, pulled out of SearchEngine */
+
+
+/**
+ * @todo document
+ */
+function wfShowingResults( $offset, $limit ) {
+	global $wgLang;
+	return wfMsgExt( 'showingresults', array( 'parseinline' ), $wgLang->formatNum( $limit ), $wgLang->formatNum( $offset+1 ) );
+}
+
+/**
+ * @todo document
+ */
+function wfShowingResultsNum( $offset, $limit, $num ) {
+	global $wgLang;
+	return wfMsgExt( 'showingresultsnum', array( 'parseinline' ), $wgLang->formatNum( $limit ), $wgLang->formatNum( $offset+1 ), $wgLang->formatNum( $num ) );
+}
+
+/**
+ * @todo document
+ */
+function wfViewPrevNext( $offset, $limit, $link, $query = '', $atend = false ) {
+	global $wgLang;
+	$fmtLimit = $wgLang->formatNum( $limit );
+	$prev = wfMsg( 'prevn', $fmtLimit );
+	$next = wfMsg( 'nextn', $fmtLimit );
+
+	if( is_object( $link ) ) {
+		$title =& $link;
+	} else {
+		$title = Title::newFromText( $link );
+		if( is_null( $title ) ) {
+			return false;
+		}
+	}
+
+	if ( 0 != $offset ) {
+		$po = $offset - $limit;
+		if ( $po < 0 ) { $po = 0; }
+		$q = "limit={$limit}&offset={$po}";
+		if ( '' != $query ) { $q .= '&'.$query; }
+		$plink = '<a href="' . $title->escapeLocalUrl( $q ) . "\">{$prev}</a>";
+	} else { $plink = $prev; }
+
+	$no = $offset + $limit;
+	$q = 'limit='.$limit.'&offset='.$no;
+	if ( '' != $query ) { $q .= '&'.$query; }
+
+	if ( $atend ) {
+		$nlink = $next;
+	} else {
+		$nlink = '<a href="' . $title->escapeLocalUrl( $q ) . "\">{$next}</a>";
+	}
+	$nums = wfNumLink( $offset, 20, $title, $query ) . ' | ' .
+	  wfNumLink( $offset, 50, $title, $query ) . ' | ' .
+	  wfNumLink( $offset, 100, $title, $query ) . ' | ' .
+	  wfNumLink( $offset, 250, $title, $query ) . ' | ' .
+	  wfNumLink( $offset, 500, $title, $query );
+
+	return wfMsg( 'viewprevnext', $plink, $nlink, $nums );
+}
+
+/**
+ * @todo document
+ */
+function wfNumLink( $offset, $limit, &$title, $query = '' ) {
+	global $wgLang;
+	if ( '' == $query ) { $q = ''; }
+	else { $q = $query.'&'; }
+	$q .= 'limit='.$limit.'&offset='.$offset;
+
+	$fmtLimit = $wgLang->formatNum( $limit );
+	$s = '<a href="' . $title->escapeLocalUrl( $q ) . "\">{$fmtLimit}</a>";
+	return $s;
+}
+
+/**
+ * @todo document
+ * @todo FIXME: we may want to blacklist some broken browsers
+ *
+ * @return bool Whereas client accept gzip compression
+ */
+function wfClientAcceptsGzip() {
+	global $wgUseGzip;
+	if( $wgUseGzip ) {
+		# FIXME: we may want to blacklist some broken browsers
+		$m = array();
+		if( preg_match(
+			'/\bgzip(?:;(q)=([0-9]+(?:\.[0-9]+)))?\b/',
+			$_SERVER['HTTP_ACCEPT_ENCODING'],
+			$m ) ) {
+			if( isset( $m[2] ) && ( $m[1] == 'q' ) && ( $m[2] == 0 ) ) return false;
+			wfDebug( " accepts gzip\n" );
+			return true;
+		}
+	}
+	return false;
+}
+
+/**
+ * Obtain the offset and limit values from the request string;
+ * used in special pages
+ *
+ * @param $deflimit Default limit if none supplied
+ * @param $optionname Name of a user preference to check against
+ * @return array
+ * 
+ */
+function wfCheckLimits( $deflimit = 50, $optionname = 'rclimit' ) {
+	global $wgRequest;
+	return $wgRequest->getLimitOffset( $deflimit, $optionname );
+}
+
+/**
+ * Escapes the given text so that it may be output using addWikiText()
+ * without any linking, formatting, etc. making its way through. This
+ * is achieved by substituting certain characters with HTML entities.
+ * As required by the callers, <nowiki> is not used. It currently does
+ * not filter out characters which have special meaning only at the
+ * start of a line, such as "*".
+ *
+ * @param string $text Text to be escaped
+ */
+function wfEscapeWikiText( $text ) {
+	$text = str_replace(
+		array( '[',     '|',      '\'',    'ISBN ',     'RFC ',     '://',     "\n=",     '{{' ),
+		array( '&#91;', '&#124;', '&#39;', 'ISBN&#32;', 'RFC&#32;', '&#58;//', "\n&#61;", '&#123;&#123;' ),
+		htmlspecialchars($text) );
+	return $text;
+}
+
+/**
+ * @todo document
+ */
+function wfQuotedPrintable( $string, $charset = '' ) {
+	# Probably incomplete; see RFC 2045
+	if( empty( $charset ) ) {
+		global $wgInputEncoding;
+		$charset = $wgInputEncoding;
+	}
+	$charset = strtoupper( $charset );
+	$charset = str_replace( 'ISO-8859', 'ISO8859', $charset ); // ?
+
+	$illegal = '\x00-\x08\x0b\x0c\x0e-\x1f\x7f-\xff=';
+	$replace = $illegal . '\t ?_';
+	if( !preg_match( "/[$illegal]/", $string ) ) return $string;
+	$out = "=?$charset?Q?";
+	$out .= preg_replace( "/([$replace])/e", 'sprintf("=%02X",ord("$1"))', $string );
+	$out .= '?=';
+	return $out;
+}
+
+
+/**
+ * @todo document
+ * @return float
+ */
+function wfTime() {
+	return microtime(true);
+}
+
+/**
+ * Sets dest to source and returns the original value of dest
+ * If source is NULL, it just returns the value, it doesn't set the variable
+ */
+function wfSetVar( &$dest, $source ) {
+	$temp = $dest;
+	if ( !is_null( $source ) ) {
+		$dest = $source;
+	}
+	return $temp;
+}
+
+/**
+ * As for wfSetVar except setting a bit
+ */
+function wfSetBit( &$dest, $bit, $state = true ) {
+	$temp = (bool)($dest & $bit );
+	if ( !is_null( $state ) ) {
+		if ( $state ) {
+			$dest |= $bit;
+		} else {
+			$dest &= ~$bit;
+		}
+	}
+	return $temp;
+}
+
+/**
+ * This function takes two arrays as input, and returns a CGI-style string, e.g.
+ * "days=7&limit=100". Options in the first array override options in the second.
+ * Options set to "" will not be output.
+ */
+function wfArrayToCGI( $array1, $array2 = NULL )
+{
+	if ( !is_null( $array2 ) ) {
+		$array1 = $array1 + $array2;
+	}
+
+	$cgi = '';
+	foreach ( $array1 as $key => $value ) {
+		if ( '' !== $value ) {
+			if ( '' != $cgi ) {
+				$cgi .= '&';
+			}
+			$cgi .= urlencode( $key ) . '=' . urlencode( $value );
+		}
+	}
+	return $cgi;
+}
+
+/**
+ * Append a query string to an existing URL, which may or may not already
+ * have query string parameters already. If so, they will be combined.
+ *
+ * @param string $url
+ * @param string $query
+ * @return string
+ */
+function wfAppendQuery( $url, $query ) {
+	if( $query != '' ) {
+		if( false === strpos( $url, '?' ) ) {
+			$url .= '?';
+		} else {
+			$url .= '&';
+		}
+		$url .= $query;
+	}
+	return $url;
+}
+
+/**
+ * This is obsolete, use SquidUpdate::purge()
+ * @deprecated
+ */
+function wfPurgeSquidServers ($urlArr) {
+	SquidUpdate::purge( $urlArr );
+}
+
+/**
+ * Windows-compatible version of escapeshellarg()
+ * Windows doesn't recognise single-quotes in the shell, but the escapeshellarg()
+ * function puts single quotes in regardless of OS
+ */
+function wfEscapeShellArg( ) {
+	$args = func_get_args();
+	$first = true;
+	$retVal = '';
+	foreach ( $args as $arg ) {
+		if ( !$first ) {
+			$retVal .= ' ';
+		} else {
+			$first = false;
+		}
+
+		if ( wfIsWindows() ) {
+			// Escaping for an MSVC-style command line parser
+			// Ref: http://mailman.lyra.org/pipermail/scite-interest/2002-March/000436.html
+			// Double the backslashes before any double quotes. Escape the double quotes.
+			$tokens = preg_split( '/(\\\\*")/', $arg, -1, PREG_SPLIT_DELIM_CAPTURE );
+			$arg = '';
+			$delim = false;
+			foreach ( $tokens as $token ) {
+				if ( $delim ) {
+					$arg .= str_replace( '\\', '\\\\', substr( $token, 0, -1 ) ) . '\\"';
+				} else {
+					$arg .= $token;
+				}
+				$delim = !$delim;
+			}
+			// Double the backslashes before the end of the string, because
+			// we will soon add a quote
+			$m = array();
+			if ( preg_match( '/^(.*?)(\\\\+)$/', $arg, $m ) ) {
+				$arg = $m[1] . str_replace( '\\', '\\\\', $m[2] );
+			}
+
+			// Add surrounding quotes
+			$retVal .= '"' . $arg . '"';
+		} else {
+			$retVal .= escapeshellarg( $arg );
+		}
+	}
+	return $retVal;
+}
+
+/**
+ * wfMerge attempts to merge differences between three texts.
+ * Returns true for a clean merge and false for failure or a conflict.
+ */
+function wfMerge( $old, $mine, $yours, &$result ){
+	global $wgDiff3;
+
+	# This check may also protect against code injection in
+	# case of broken installations.
+	if(! file_exists( $wgDiff3 ) ){
+		wfDebug( "diff3 not found\n" );
+		return false;
+	}
+
+	# Make temporary files
+	$td = wfTempDir();
+	$oldtextFile = fopen( $oldtextName = tempnam( $td, 'merge-old-' ), 'w' );
+	$mytextFile = fopen( $mytextName = tempnam( $td, 'merge-mine-' ), 'w' );
+	$yourtextFile = fopen( $yourtextName = tempnam( $td, 'merge-your-' ), 'w' );
+
+	fwrite( $oldtextFile, $old ); fclose( $oldtextFile );
+	fwrite( $mytextFile, $mine ); fclose( $mytextFile );
+	fwrite( $yourtextFile, $yours ); fclose( $yourtextFile );
+
+	# Check for a conflict
+	$cmd = $wgDiff3 . ' -a --overlap-only ' .
+	  wfEscapeShellArg( $mytextName ) . ' ' .
+	  wfEscapeShellArg( $oldtextName ) . ' ' .
+	  wfEscapeShellArg( $yourtextName );
+	$handle = popen( $cmd, 'r' );
+
+	if( fgets( $handle, 1024 ) ){
+		$conflict = true;
+	} else {
+		$conflict = false;
+	}
+	pclose( $handle );
+
+	# Merge differences
+	$cmd = $wgDiff3 . ' -a -e --merge ' .
+	  wfEscapeShellArg( $mytextName, $oldtextName, $yourtextName );
+	$handle = popen( $cmd, 'r' );
+	$result = '';
+	do {
+		$data = fread( $handle, 8192 );
+		if ( strlen( $data ) == 0 ) {
+			break;
+		}
+		$result .= $data;
+	} while ( true );
+	pclose( $handle );
+	unlink( $mytextName ); unlink( $oldtextName ); unlink( $yourtextName );
+
+	if ( $result === '' && $old !== '' && $conflict == false ) {
+		wfDebug( "Unexpected null result from diff3. Command: $cmd\n" );
+		$conflict = true;
+	}
+	return ! $conflict;
+}
+
+/**
+ * @todo document
+ */
+function wfVarDump( $var ) {
+	global $wgOut;
+	$s = str_replace("\n","<br />\n", var_export( $var, true ) . "\n");
+	if ( headers_sent() || !@is_object( $wgOut ) ) {
+		print $s;
+	} else {
+		$wgOut->addHTML( $s );
+	}
+}
+
+/**
+ * Provide a simple HTTP error.
+ */
+function wfHttpError( $code, $label, $desc ) {
+	global $wgOut;
+	$wgOut->disable();
+	header( "HTTP/1.0 $code $label" );
+	header( "Status: $code $label" );
+	$wgOut->sendCacheControl();
+
+	header( 'Content-type: text/html; charset=utf-8' );
+	print "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">".
+		"<html><head><title>" .
+		htmlspecialchars( $label ) .
+		"</title></head><body><h1>" .
+		htmlspecialchars( $label ) .
+		"</h1><p>" .
+		nl2br( htmlspecialchars( $desc ) ) .
+		"</p></body></html>\n";
+}
+
+/**
+ * Clear away any user-level output buffers, discarding contents.
+ *
+ * Suitable for 'starting afresh', for instance when streaming
+ * relatively large amounts of data without buffering, or wanting to
+ * output image files without ob_gzhandler's compression.
+ *
+ * The optional $resetGzipEncoding parameter controls suppression of
+ * the Content-Encoding header sent by ob_gzhandler; by default it
+ * is left. See comments for wfClearOutputBuffers() for why it would
+ * be used.
+ *
+ * Note that some PHP configuration options may add output buffer
+ * layers which cannot be removed; these are left in place.
+ *
+ * @param bool $resetGzipEncoding
+ */
+function wfResetOutputBuffers( $resetGzipEncoding=true ) {
+	if( $resetGzipEncoding ) {
+		// Suppress Content-Encoding and Content-Length
+		// headers from 1.10+s wfOutputHandler
+		global $wgDisableOutputCompression;
+		$wgDisableOutputCompression = true;
+	}
+	while( $status = ob_get_status() ) {
+		if( $status['type'] == 0 /* PHP_OUTPUT_HANDLER_INTERNAL */ ) {
+			// Probably from zlib.output_compression or other
+			// PHP-internal setting which can't be removed.
+			//
+			// Give up, and hope the result doesn't break
+			// output behavior.
+			break;
+		}
+		if( !ob_end_clean() ) {
+			// Could not remove output buffer handler; abort now
+			// to avoid getting in some kind of infinite loop.
+			break;
+		}
+		if( $resetGzipEncoding ) {
+			if( $status['name'] == 'ob_gzhandler' ) {
+				// Reset the 'Content-Encoding' field set by this handler
+				// so we can start fresh.
+				header( 'Content-Encoding:' );
+			}
+		}
+	}
+}
+
+/**
+ * More legible than passing a 'false' parameter to wfResetOutputBuffers():
+ *
+ * Clear away output buffers, but keep the Content-Encoding header
+ * produced by ob_gzhandler, if any.
+ *
+ * This should be used for HTTP 304 responses, where you need to
+ * preserve the Content-Encoding header of the real result, but
+ * also need to suppress the output of ob_gzhandler to keep to spec
+ * and avoid breaking Firefox in rare cases where the headers and
+ * body are broken over two packets.
+ */
+function wfClearOutputBuffers() {
+	wfResetOutputBuffers( false );
+}
+
+/**
+ * Converts an Accept-* header into an array mapping string values to quality
+ * factors
+ */
+function wfAcceptToPrefs( $accept, $def = '*/*' ) {
+	# No arg means accept anything (per HTTP spec)
+	if( !$accept ) {
+		return array( $def => 1 );
+	}
+
+	$prefs = array();
+
+	$parts = explode( ',', $accept );
+
+	foreach( $parts as $part ) {
+		# FIXME: doesn't deal with params like 'text/html; level=1'
+		@list( $value, $qpart ) = explode( ';', $part );
+		$match = array();
+		if( !isset( $qpart ) ) {
+			$prefs[$value] = 1;
+		} elseif( preg_match( '/q\s*=\s*(\d*\.\d+)/', $qpart, $match ) ) {
+			$prefs[$value] = $match[1];
+		}
+	}
+
+	return $prefs;
+}
+
+/**
+ * Checks if a given MIME type matches any of the keys in the given
+ * array. Basic wildcards are accepted in the array keys.
+ *
+ * Returns the matching MIME type (or wildcard) if a match, otherwise
+ * NULL if no match.
+ *
+ * @param string $type
+ * @param array $avail
+ * @return string
+ * @private
+ */
+function mimeTypeMatch( $type, $avail ) {
+	if( array_key_exists($type, $avail) ) {
+		return $type;
+	} else {
+		$parts = explode( '/', $type );
+		if( array_key_exists( $parts[0] . '/*', $avail ) ) {
+			return $parts[0] . '/*';
+		} elseif( array_key_exists( '*/*', $avail ) ) {
+			return '*/*';
+		} else {
+			return NULL;
+		}
+	}
+}
+
+/**
+ * Returns the 'best' match between a client's requested internet media types
+ * and the server's list of available types. Each list should be an associative
+ * array of type to preference (preference is a float between 0.0 and 1.0).
+ * Wildcards in the types are acceptable.
+ *
+ * @param array $cprefs Client's acceptable type list
+ * @param array $sprefs Server's offered types
+ * @return string
+ *
+ * @todo FIXME: doesn't handle params like 'text/plain; charset=UTF-8'
+ * XXX: generalize to negotiate other stuff
+ */
+function wfNegotiateType( $cprefs, $sprefs ) {
+	$combine = array();
+
+	foreach( array_keys($sprefs) as $type ) {
+		$parts = explode( '/', $type );
+		if( $parts[1] != '*' ) {
+			$ckey = mimeTypeMatch( $type, $cprefs );
+			if( $ckey ) {
+				$combine[$type] = $sprefs[$type] * $cprefs[$ckey];
+			}
+		}
+	}
+
+	foreach( array_keys( $cprefs ) as $type ) {
+		$parts = explode( '/', $type );
+		if( $parts[1] != '*' && !array_key_exists( $type, $sprefs ) ) {
+			$skey = mimeTypeMatch( $type, $sprefs );
+			if( $skey ) {
+				$combine[$type] = $sprefs[$skey] * $cprefs[$type];
+			}
+		}
+	}
+
+	$bestq = 0;
+	$besttype = NULL;
+
+	foreach( array_keys( $combine ) as $type ) {
+		if( $combine[$type] > $bestq ) {
+			$besttype = $type;
+			$bestq = $combine[$type];
+		}
+	}
+
+	return $besttype;
+}
+
+/**
+ * Array lookup
+ * Returns an array where the values in the first array are replaced by the
+ * values in the second array with the corresponding keys
+ *
+ * @return array
+ */
+function wfArrayLookup( $a, $b ) {
+	return array_flip( array_intersect( array_flip( $a ), array_keys( $b ) ) );
+}
+
+/**
+ * Convenience function; returns MediaWiki timestamp for the present time.
+ * @return string
+ */
+function wfTimestampNow() {
+	# return NOW
+	return wfTimestamp( TS_MW, time() );
+}
+
+/**
+ * Reference-counted warning suppression
+ */
+function wfSuppressWarnings( $end = false ) {
+	static $suppressCount = 0;
+	static $originalLevel = false;
+
+	if ( $end ) {
+		if ( $suppressCount ) {
+			--$suppressCount;
+			if ( !$suppressCount ) {
+				error_reporting( $originalLevel );
+			}
+		}
+	} else {
+		if ( !$suppressCount ) {
+			$originalLevel = error_reporting( E_ALL & ~( E_WARNING | E_NOTICE ) );
+		}
+		++$suppressCount;
+	}
+}
+
+/**
+ * Restore error level to previous value
+ */
+function wfRestoreWarnings() {
+	wfSuppressWarnings( true );
+}
+
+# Autodetect, convert and provide timestamps of various types
+
+/**
+ * Unix time - the number of seconds since 1970-01-01 00:00:00 UTC
+ */
+define('TS_UNIX', 0);
+
+/**
+ * MediaWiki concatenated string timestamp (YYYYMMDDHHMMSS)
+ */
+define('TS_MW', 1);
+
+/**
+ * MySQL DATETIME (YYYY-MM-DD HH:MM:SS)
+ */
+define('TS_DB', 2);
+
+/**
+ * RFC 2822 format, for E-mail and HTTP headers
+ */
+define('TS_RFC2822', 3);
+
+/**
+ * ISO 8601 format with no timezone: 1986-02-09T20:00:00Z
+ *
+ * This is used by Special:Export
+ */
+define('TS_ISO_8601', 4);
+
+/**
+ * An Exif timestamp (YYYY:MM:DD HH:MM:SS)
+ *
+ * @see http://exif.org/Exif2-2.PDF The Exif 2.2 spec, see page 28 for the
+ *       DateTime tag and page 36 for the DateTimeOriginal and
+ *       DateTimeDigitized tags.
+ */
+define('TS_EXIF', 5);
+
+/**
+ * Oracle format time.
+ */
+define('TS_ORACLE', 6);
+
+/**
+ * Postgres format time.
+ */
+define('TS_POSTGRES', 7);
+
+/**
+ * @param mixed $outputtype A timestamp in one of the supported formats, the
+ *                          function will autodetect which format is supplied
+ *                          and act accordingly.
+ * @return string Time in the format specified in $outputtype
+ */
+function wfTimestamp($outputtype=TS_UNIX,$ts=0) {
+	$uts = 0;
+	$da = array();
+	if ($ts==0) {
+		$uts=time();
+	} elseif (preg_match('/^(\d{4})\-(\d\d)\-(\d\d) (\d\d):(\d\d):(\d\d)$/D',$ts,$da)) {
+		# TS_DB
+		$uts=gmmktime((int)$da[4],(int)$da[5],(int)$da[6],
+			    (int)$da[2],(int)$da[3],(int)$da[1]);
+	} elseif (preg_match('/^(\d{4}):(\d\d):(\d\d) (\d\d):(\d\d):(\d\d)$/D',$ts,$da)) {
+		# TS_EXIF
+		$uts=gmmktime((int)$da[4],(int)$da[5],(int)$da[6],
+			(int)$da[2],(int)$da[3],(int)$da[1]);
+	} elseif (preg_match('/^(\d{4})(\d\d)(\d\d)(\d\d)(\d\d)(\d\d)$/D',$ts,$da)) {
+		# TS_MW
+		$uts=gmmktime((int)$da[4],(int)$da[5],(int)$da[6],
+			    (int)$da[2],(int)$da[3],(int)$da[1]);
+	} elseif (preg_match('/^(\d{1,13})$/D',$ts,$da)) {
+		# TS_UNIX
+		$uts = $ts;
+	} elseif (preg_match('/^(\d{1,2})-(...)-(\d\d(\d\d)?) (\d\d)\.(\d\d)\.(\d\d)/', $ts, $da)) {
+		# TS_ORACLE
+		$uts = strtotime(preg_replace('/(\d\d)\.(\d\d)\.(\d\d)(\.(\d+))?/', "$1:$2:$3",
+				str_replace("+00:00", "UTC", $ts)));
+	} elseif (preg_match('/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})Z$/', $ts, $da)) {
+		# TS_ISO_8601
+		$uts=gmmktime((int)$da[4],(int)$da[5],(int)$da[6],
+			(int)$da[2],(int)$da[3],(int)$da[1]);
+	} elseif (preg_match('/^(\d{4})\-(\d\d)\-(\d\d) (\d\d):(\d\d):(\d\d)[\+\- ](\d\d)$/',$ts,$da)) {
+		# TS_POSTGRES
+		$uts=gmmktime((int)$da[4],(int)$da[5],(int)$da[6],
+		(int)$da[2],(int)$da[3],(int)$da[1]);
+	} elseif (preg_match('/^(\d{4})\-(\d\d)\-(\d\d) (\d\d):(\d\d):(\d\d) GMT$/',$ts,$da)) {
+		# TS_POSTGRES
+		$uts=gmmktime((int)$da[4],(int)$da[5],(int)$da[6],
+		(int)$da[2],(int)$da[3],(int)$da[1]);
+	} else {
+		# Bogus value; fall back to the epoch...
+		wfDebug("wfTimestamp() fed bogus time value: $outputtype; $ts\n");
+		$uts = 0;
+	}
+
+
+ 	switch($outputtype) {
+		case TS_UNIX:
+			return $uts;
+		case TS_MW:
+			return gmdate( 'YmdHis', $uts );
+		case TS_DB:
+			return gmdate( 'Y-m-d H:i:s', $uts );
+		case TS_ISO_8601:
+			return gmdate( 'Y-m-d\TH:i:s\Z', $uts );
+		// This shouldn't ever be used, but is included for completeness
+		case TS_EXIF:
+			return gmdate(  'Y:m:d H:i:s', $uts );
+		case TS_RFC2822:
+			return gmdate( 'D, d M Y H:i:s', $uts ) . ' GMT';
+		case TS_ORACLE:
+			return gmdate( 'd-M-y h.i.s A', $uts) . ' +00:00';
+		case TS_POSTGRES:
+			return gmdate( 'Y-m-d H:i:s', $uts) . ' GMT';
+		default:
+			throw new MWException( 'wfTimestamp() called with illegal output type.');
+	}
+}
+
+/**
+ * Return a formatted timestamp, or null if input is null.
+ * For dealing with nullable timestamp columns in the database.
+ * @param int $outputtype
+ * @param string $ts
+ * @return string
+ */
+function wfTimestampOrNull( $outputtype = TS_UNIX, $ts = null ) {
+	if( is_null( $ts ) ) {
+		return null;
+	} else {
+		return wfTimestamp( $outputtype, $ts );
+	}
+}
+
+/**
+ * Check if the operating system is Windows
+ *
+ * @return bool True if it's Windows, False otherwise.
+ */
+function wfIsWindows() {
+	if (substr(php_uname(), 0, 7) == 'Windows') {
+		return true;
+	} else {
+		return false;
+	}
+}
+
+/**
+ * Swap two variables
+ */
+function swap( &$x, &$y ) {
+	$z = $x;
+	$x = $y;
+	$y = $z;
+}
+
+function wfGetCachedNotice( $name ) {
+	global $wgOut, $parserMemc;
+	$fname = 'wfGetCachedNotice';
+	wfProfileIn( $fname );
+	
+	$needParse = false;
+	
+	if( $name === 'default' ) {
+		// special case
+		global $wgSiteNotice;
+		$notice = $wgSiteNotice;
+		if( empty( $notice ) ) {
+			wfProfileOut( $fname );
+			return false;
+		}
+	} else {
+		$notice = wfMsgForContentNoTrans( $name );
+		if( wfEmptyMsg( $name, $notice ) || $notice == '-' ) {
+			wfProfileOut( $fname );
+			return( false );
+		}
+	}
+	
+	$cachedNotice = $parserMemc->get( wfMemcKey( $name ) );
+	if( is_array( $cachedNotice ) ) {
+		if( md5( $notice ) == $cachedNotice['hash'] ) {
+			$notice = $cachedNotice['html'];
+		} else {
+			$needParse = true;
+		}
+	} else {
+		$needParse = true;
+	}
+	
+	if( $needParse ) {
+		if( is_object( $wgOut ) ) {
+			$parsed = $wgOut->parse( $notice );
+			$parserMemc->set( wfMemcKey( $name ), array( 'html' => $parsed, 'hash' => md5( $notice ) ), 600 );
+			$notice = $parsed;
+		} else {
+			wfDebug( 'wfGetCachedNotice called for ' . $name . ' with no $wgOut available' );
+			$notice = '';
+		}
+	}
+	
+	wfProfileOut( $fname );
+	return $notice;
+}
+
+function wfGetNamespaceNotice() {
+	global $wgTitle;
+	
+	# Paranoia
+	if ( !isset( $wgTitle ) || !is_object( $wgTitle ) )
+		return "";
+
+	$fname = 'wfGetNamespaceNotice';
+	wfProfileIn( $fname );
+	
+	$key = "namespacenotice-" . $wgTitle->getNsText();
+	$namespaceNotice = wfGetCachedNotice( $key );
+	if ( $namespaceNotice && substr ( $namespaceNotice , 0 ,7 ) != "<p>&lt;" ) {
+		 $namespaceNotice = '<div id="namespacebanner">' . $namespaceNotice . "</div>";
+	} else {
+		$namespaceNotice = "";
+	}
+
+	wfProfileOut( $fname );
+	return $namespaceNotice;
+}
+
+function wfGetSiteNotice() {
+	global $wgUser, $wgSiteNotice;
+	$fname = 'wfGetSiteNotice';
+	wfProfileIn( $fname );
+	$siteNotice = '';	
+	
+	if( wfRunHooks( 'SiteNoticeBefore', array( &$siteNotice ) ) ) {
+		if( is_object( $wgUser ) && $wgUser->isLoggedIn() ) {
+			$siteNotice = wfGetCachedNotice( 'sitenotice' );
+		} else {
+			$anonNotice = wfGetCachedNotice( 'anonnotice' );
+			if( !$anonNotice ) {
+				$siteNotice = wfGetCachedNotice( 'sitenotice' );
+			} else {
+				$siteNotice = $anonNotice;
+			}
+		}
+		if( !$siteNotice ) {
+			$siteNotice = wfGetCachedNotice( 'default' );
+		}
+	}
+
+	wfRunHooks( 'SiteNoticeAfter', array( &$siteNotice ) );
+	wfProfileOut( $fname );
+	return $siteNotice;
+}
+
+/** 
+ * BC wrapper for MimeMagic::singleton()
+ * @deprecated
+ */
+function &wfGetMimeMagic() {
+	return MimeMagic::singleton();
+}
+
+/**
+ * Tries to get the system directory for temporary files.
+ * The TMPDIR, TMP, and TEMP environment variables are checked in sequence,
+ * and if none are set /tmp is returned as the generic Unix default.
+ *
+ * NOTE: When possible, use the tempfile() function to create temporary
+ * files to avoid race conditions on file creation, etc.
+ *
+ * @return string
+ */
+function wfTempDir() {
+	foreach( array( 'TMPDIR', 'TMP', 'TEMP' ) as $var ) {
+		$tmp = getenv( $var );
+		if( $tmp && file_exists( $tmp ) && is_dir( $tmp ) && is_writable( $tmp ) ) {
+			return $tmp;
+		}
+	}
+	# Hope this is Unix of some kind!
+	return '/tmp';
+}
+
+/**
+ * Make directory, and make all parent directories if they don't exist
+ */
+function wfMkdirParents( $fullDir, $mode = 0777 ) {
+	if ( strval( $fullDir ) === '' ) {
+		return true;
+	}
+	
+	# Go back through the paths to find the first directory that exists
+	$currentDir = $fullDir;
+	$createList = array();
+	while ( strval( $currentDir ) !== '' && !file_exists( $currentDir ) ) {	
+		# Strip trailing slashes
+		$currentDir = rtrim( $currentDir, '/\\' );
+
+		# Add to create list
+		$createList[] = $currentDir;
+
+		# Find next delimiter searching from the end
+		$p = max( strrpos( $currentDir, '/' ), strrpos( $currentDir, '\\' ) );
+		if ( $p === false ) {
+			$currentDir = false;
+		} else {
+			$currentDir = substr( $currentDir, 0, $p );
+		}
+	}
+	
+	if ( count( $createList ) == 0 ) {
+		# Directory specified already exists
+		return true;
+	} elseif ( $currentDir === false ) {
+		# Went all the way back to root and it apparently doesn't exist
+		return false;
+	}
+	
+	# Now go forward creating directories
+	$createList = array_reverse( $createList );
+	foreach ( $createList as $dir ) {
+		# use chmod to override the umask, as suggested by the PHP manual
+		if ( !mkdir( $dir, $mode ) || !chmod( $dir, $mode ) ) {
+			wfDebugLog( 'mkdir', "Unable to create directory $dir\n" );
+			return false;
+		} 
+	}
+	return true;
+}
+
+/**
+ * Increment a statistics counter
+ */
+ function wfIncrStats( $key ) {
+	 global $wgMemc;
+	 $key = wfMemcKey( 'stats', $key );
+	 if ( is_null( $wgMemc->incr( $key ) ) ) {
+		 $wgMemc->add( $key, 1 );
+	 }
+ }
+
+/**
+ * @param mixed $nr The number to format
+ * @param int $acc The number of digits after the decimal point, default 2
+ * @param bool $round Whether or not to round the value, default true
+ * @return float
+ */
+function wfPercent( $nr, $acc = 2, $round = true ) {
+	$ret = sprintf( "%.${acc}f", $nr );
+	return $round ? round( $ret, $acc ) . '%' : "$ret%";
+}
+
+/**
+ * Encrypt a username/password.
+ *
+ * @param string $userid ID of the user
+ * @param string $password Password of the user
+ * @return string Hashed password
+ */
+function wfEncryptPassword( $userid, $password ) {
+	global $wgPasswordSalt;
+	$p = md5( $password);
+
+	if($wgPasswordSalt)
+		return md5( "{$userid}-{$p}" );
+	else
+		return $p;
+}
+
+/**
+ * Appends to second array if $value differs from that in $default
+ */
+function wfAppendToArrayIfNotDefault( $key, $value, $default, &$changed ) {
+	if ( is_null( $changed ) ) {
+		throw new MWException('GlobalFunctions::wfAppendToArrayIfNotDefault got null');
+	}
+	if ( $default[$key] !== $value ) {
+		$changed[$key] = $value;
+	}
+}
+
+/**
+ * Since wfMsg() and co suck, they don't return false if the message key they
+ * looked up didn't exist but a XHTML string, this function checks for the
+ * nonexistance of messages by looking at wfMsg() output
+ *
+ * @param $msg      The message key looked up
+ * @param $wfMsgOut The output of wfMsg*()
+ * @return bool
+ */
+function wfEmptyMsg( $msg, $wfMsgOut ) {
+	return $wfMsgOut === "&lt;$msg&gt;";
+}
+
+/**
+ * Find out whether or not a mixed variable exists in a string
+ *
+ * @param mixed  needle
+ * @param string haystack
+ * @return bool
+ */
+function in_string( $needle, $str ) {
+	return strpos( $str, $needle ) !== false;
+}
+
+function wfSpecialList( $page, $details ) {
+	global $wgContLang;
+	$details = $details ? ' ' . $wgContLang->getDirMark() . "($details)" : "";
+	return $page . $details;
+}
+
+/**
+ * Returns a regular expression of url protocols
+ *
+ * @return string
+ */
+function wfUrlProtocols() {
+	global $wgUrlProtocols;
+
+	// Support old-style $wgUrlProtocols strings, for backwards compatibility
+	// with LocalSettings files from 1.5
+	if ( is_array( $wgUrlProtocols ) ) {
+		$protocols = array();
+		foreach ($wgUrlProtocols as $protocol)
+			$protocols[] = preg_quote( $protocol, '/' );
+
+		return implode( '|', $protocols );
+	} else {
+		return $wgUrlProtocols;
+	}
+}
+
+/**
+ * Execute a shell command, with time and memory limits mirrored from the PHP
+ * configuration if supported.
+ * @param $cmd Command line, properly escaped for shell.
+ * @param &$retval optional, will receive the program's exit code.
+ *                 (non-zero is usually failure)
+ * @return collected stdout as a string (trailing newlines stripped)
+ */
+function wfShellExec( $cmd, &$retval=null ) {
+	global $IP, $wgMaxShellMemory, $wgMaxShellFileSize;
+	
+	if( ini_get( 'safe_mode' ) ) {
+		wfDebug( "wfShellExec can't run in safe_mode, PHP's exec functions are too broken.\n" );
+		$retval = 1;
+		return "Unable to run external programs in safe mode.";
+	}
+
+	if ( php_uname( 's' ) == 'Linux' ) {
+		$time = intval( ini_get( 'max_execution_time' ) );
+		$mem = intval( $wgMaxShellMemory );
+		$filesize = intval( $wgMaxShellFileSize );
+
+		if ( $time > 0 && $mem > 0 ) {
+			$script = "$IP/bin/ulimit4.sh";
+			if ( is_executable( $script ) ) {
+				$cmd = escapeshellarg( $script ) . " $time $mem $filesize " . escapeshellarg( $cmd );
+			}
+		}
+	} elseif ( php_uname( 's' ) == 'Windows NT' ) {
+		# This is a hack to work around PHP's flawed invocation of cmd.exe
+		# http://news.php.net/php.internals/21796
+		$cmd = '"' . $cmd . '"';
+	}
+	wfDebug( "wfShellExec: $cmd\n" );
+	
+	$output = array();
+	$retval = 1; // error by default?
+	exec( $cmd, $output, $retval ); // returns the last line of output.
+	return implode( "\n", $output );
+	
+}
+
+/**
+ * This function works like "use VERSION" in Perl, the program will die with a
+ * backtrace if the current version of PHP is less than the version provided
+ *
+ * This is useful for extensions which due to their nature are not kept in sync
+ * with releases, and might depend on other versions of PHP than the main code
+ *
+ * Note: PHP might die due to parsing errors in some cases before it ever
+ *       manages to call this function, such is life
+ *
+ * @see perldoc -f use
+ *
+ * @param mixed $version The version to check, can be a string, an integer, or
+ *                       a float
+ */
+function wfUsePHP( $req_ver ) {
+	$php_ver = PHP_VERSION;
+
+	if ( version_compare( $php_ver, (string)$req_ver, '<' ) )
+		 throw new MWException( "PHP $req_ver required--this is only $php_ver" );
+}
+
+/**
+ * This function works like "use VERSION" in Perl except it checks the version
+ * of MediaWiki, the program will die with a backtrace if the current version
+ * of MediaWiki is less than the version provided.
+ *
+ * This is useful for extensions which due to their nature are not kept in sync
+ * with releases
+ *
+ * @see perldoc -f use
+ *
+ * @param mixed $version The version to check, can be a string, an integer, or
+ *                       a float
+ */
+function wfUseMW( $req_ver ) {
+	global $wgVersion;
+
+	if ( version_compare( $wgVersion, (string)$req_ver, '<' ) )
+		throw new MWException( "MediaWiki $req_ver required--this is only $wgVersion" );
+}
+
+/**
+ * @deprecated use StringUtils::escapeRegexReplacement
+ */
+function wfRegexReplacement( $string ) {
+	return StringUtils::escapeRegexReplacement( $string );
+}
+
+/**
+ * Return the final portion of a pathname.
+ * Reimplemented because PHP5's basename() is buggy with multibyte text.
+ * http://bugs.php.net/bug.php?id=33898
+ *
+ * PHP's basename() only considers '\' a pathchar on Windows and Netware.
+ * We'll consider it so always, as we don't want \s in our Unix paths either.
+ * 
+ * @param string $path
+ * @return string
+ */
+function wfBaseName( $path ) {
+	$matches = array();
+	if( preg_match( '#([^/\\\\]*)[/\\\\]*$#', $path, $matches ) ) {
+		return $matches[1];
+	} else {
+		return '';
+	}
+}
+
+/**
+ * Generate a relative path name to the given file.
+ * May explode on non-matching case-insensitive paths,
+ * funky symlinks, etc.
+ *
+ * @param string $path Absolute destination path including target filename
+ * @param string $from Absolute source path, directory only
+ * @return string
+ */
+function wfRelativePath( $path, $from ) {
+	// Normalize mixed input on Windows...
+	$path = str_replace( '/', DIRECTORY_SEPARATOR, $path );
+	$from = str_replace( '/', DIRECTORY_SEPARATOR, $from );
+	
+	$pieces  = explode( DIRECTORY_SEPARATOR, dirname( $path ) );
+	$against = explode( DIRECTORY_SEPARATOR, $from );
+
+	// Trim off common prefix
+	while( count( $pieces ) && count( $against )
+		&& $pieces[0] == $against[0] ) {
+		array_shift( $pieces );
+		array_shift( $against );
+	}
+
+	// relative dots to bump us to the parent
+	while( count( $against ) ) {
+		array_unshift( $pieces, '..' );
+		array_shift( $against );
+	}
+
+	array_push( $pieces, wfBaseName( $path ) );
+
+	return implode( DIRECTORY_SEPARATOR, $pieces );
+}
+
+/**
+ * Make a URL index, appropriate for the el_index field of externallinks.
+ */
+function wfMakeUrlIndex( $url ) {
+	global $wgUrlProtocols; // Allow all protocols defined in DefaultSettings/LocalSettings.php
+	$bits = parse_url( $url );
+	wfSuppressWarnings();
+	wfRestoreWarnings();
+	if ( !$bits ) {
+		return false;
+	}
+	// most of the protocols are followed by ://, but mailto: and sometimes news: not, check for it
+	$delimiter = '';
+	if ( in_array( $bits['scheme'] . '://' , $wgUrlProtocols ) ) {
+		$delimiter = '://';
+	} elseif ( in_array( $bits['scheme'] .':' , $wgUrlProtocols ) ) {
+		$delimiter = ':';
+		// parse_url detects for news: and mailto: the host part of an url as path
+		// We have to correct this wrong detection
+		if ( isset ( $bits['path'] ) ) { 
+			$bits['host'] = $bits['path'];
+			$bits['path'] = '';
+		}
+	} else {
+		return false;
+	}
+
+	// Reverse the labels in the hostname, convert to lower case
+	// For emails reverse domainpart only
+	if ( $bits['scheme'] == 'mailto' ) {
+		$mailparts = explode( '@', $bits['host'] );
+		$domainpart = strtolower( implode( '.', array_reverse( explode( '.', $mailparts[1] ) ) ) );
+		$reversedHost = $domainpart . '@' . $mailparts[0];
+	} else {
+		$reversedHost = strtolower( implode( '.', array_reverse( explode( '.', $bits['host'] ) ) ) );
+	}
+	// Add an extra dot to the end
+	if ( substr( $reversedHost, -1, 1 ) !== '.' ) {
+		$reversedHost .= '.';
+	}
+	// Reconstruct the pseudo-URL
+	$prot = $bits['scheme'];
+	$index = "$prot$delimiter$reversedHost";
+	// Leave out user and password. Add the port, path, query and fragment
+	if ( isset( $bits['port'] ) )      $index .= ':' . $bits['port'];
+	if ( isset( $bits['path'] ) ) {
+		$index .= $bits['path'];
+	} else {
+		$index .= '/';
+	}
+	if ( isset( $bits['query'] ) )     $index .= '?' . $bits['query'];
+	if ( isset( $bits['fragment'] ) )  $index .= '#' . $bits['fragment'];
+	return $index;
+}
+
+/**
+ * Do any deferred updates and clear the list
+ * TODO: This could be in Wiki.php if that class made any sense at all
+ */
+function wfDoUpdates()
+{
+	global $wgPostCommitUpdateList, $wgDeferredUpdateList;
+	foreach ( $wgDeferredUpdateList as $update ) {
+		$update->doUpdate();
+	}
+	foreach ( $wgPostCommitUpdateList as $update ) {
+		$update->doUpdate();
+	}
+	$wgDeferredUpdateList = array();
+	$wgPostCommitUpdateList = array();
+}
+
+/**
+ * @deprecated use StringUtils::explodeMarkup
+ */
+function wfExplodeMarkup( $separator, $text ) {
+	return StringUtils::explodeMarkup( $separator, $text );
+}
+
+/**
+ * Convert an arbitrarily-long digit string from one numeric base
+ * to another, optionally zero-padding to a minimum column width.
+ *
+ * Supports base 2 through 36; digit values 10-36 are represented
+ * as lowercase letters a-z. Input is case-insensitive.
+ *
+ * @param $input string of digits
+ * @param $sourceBase int 2-36
+ * @param $destBase int 2-36
+ * @param $pad int 1 or greater
+ * @param $lowercase bool
+ * @return string or false on invalid input
+ */
+function wfBaseConvert( $input, $sourceBase, $destBase, $pad=1, $lowercase=true ) {
+	$input = strval( $input );
+	if( $sourceBase < 2 ||
+		$sourceBase > 36 ||
+		$destBase < 2 ||
+		$destBase > 36 ||
+		$pad < 1 ||
+		$sourceBase != intval( $sourceBase ) ||
+		$destBase != intval( $destBase ) ||
+		$pad != intval( $pad ) ||
+		!is_string( $input ) ||
+		$input == '' ) {
+		return false;
+	}
+	$digitChars = ( $lowercase ) ?  '0123456789abcdefghijklmnopqrstuvwxyz' : '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
+	$inDigits = array();
+	$outChars = '';
+	
+	// Decode and validate input string
+	$input = strtolower( $input );
+	for( $i = 0; $i < strlen( $input ); $i++ ) {
+		$n = strpos( $digitChars, $input{$i} );
+		if( $n === false || $n > $sourceBase ) {
+			return false;
+		}
+		$inDigits[] = $n;
+	}
+	
+	// Iterate over the input, modulo-ing out an output digit
+	// at a time until input is gone.
+	while( count( $inDigits ) ) {
+		$work = 0;
+		$workDigits = array();
+		
+		// Long division...
+		foreach( $inDigits as $digit ) {
+			$work *= $sourceBase;
+			$work += $digit;
+			
+			if( $work < $destBase ) {
+				// Gonna need to pull another digit.
+				if( count( $workDigits ) ) {
+					// Avoid zero-padding; this lets us find
+					// the end of the input very easily when
+					// length drops to zero.
+					$workDigits[] = 0;
+				}
+			} else {
+				// Finally! Actual division!
+				$workDigits[] = intval( $work / $destBase );
+				
+				// Isn't it annoying that most programming languages
+				// don't have a single divide-and-remainder operator,
+				// even though the CPU implements it that way?
+				$work = $work % $destBase;
+			}
+		}
+		
+		// All that division leaves us with a remainder,
+		// which is conveniently our next output digit.
+		$outChars .= $digitChars[$work];
+		
+		// And we continue!
+		$inDigits = $workDigits;
+	}
+	
+	while( strlen( $outChars ) < $pad ) {
+		$outChars .= '0';
+	}
+	
+	return strrev( $outChars );
+}
+
+/**
+ * Create an object with a given name and an array of construct parameters
+ * @param string $name
+ * @param array $p parameters
+ */
+function wfCreateObject( $name, $p ){
+	$p = array_values( $p );
+	switch ( count( $p ) ) {
+		case 0:
+			return new $name;
+		case 1:
+			return new $name( $p[0] );
+		case 2:
+			return new $name( $p[0], $p[1] );
+		case 3:
+			return new $name( $p[0], $p[1], $p[2] );
+		case 4:
+			return new $name( $p[0], $p[1], $p[2], $p[3] );
+		case 5:
+			return new $name( $p[0], $p[1], $p[2], $p[3], $p[4] );
+		case 6:
+			return new $name( $p[0], $p[1], $p[2], $p[3], $p[4], $p[5] );
+		default:
+			throw new MWException( "Too many arguments to construtor in wfCreateObject" );
+	}
+}
+
+/**
+ * Aliases for modularized functions
+ */
+function wfGetHTTP( $url, $timeout = 'default' ) { 
+	return Http::get( $url, $timeout ); 
+}
+function wfIsLocalURL( $url ) { 
+	return Http::isLocalURL( $url ); 
+}
+
+/**
+ * Initialise php session
+ */
+function wfSetupSession() {
+	global $wgSessionsInMemcached, $wgCookiePath, $wgCookieDomain, $wgCookieSecure;
+	if( $wgSessionsInMemcached ) {
+		require_once( 'MemcachedSessions.php' );
+	} elseif( 'files' != ini_get( 'session.save_handler' ) ) {
+		# If it's left on 'user' or another setting from another
+		# application, it will end up failing. Try to recover.
+		ini_set ( 'session.save_handler', 'files' );
+	}
+	session_set_cookie_params( 0, $wgCookiePath, $wgCookieDomain, $wgCookieSecure);
+	session_cache_limiter( 'private, must-revalidate' );
+	@session_start();
+}
+
+/**
+ * Get an object from the precompiled serialized directory
+ *
+ * @return mixed The variable on success, false on failure
+ */
+function wfGetPrecompiledData( $name ) {
+	global $IP;
+
+	$file = "$IP/serialized/$name";
+	if ( file_exists( $file ) ) {
+		$blob = file_get_contents( $file );
+		if ( $blob ) {
+			return unserialize( $blob );
+		}
+	}
+	return false;
+}
+
+function wfGetCaller( $level = 2 ) {
+	$backtrace = wfDebugBacktrace();
+	if ( isset( $backtrace[$level] ) ) {
+		if ( isset( $backtrace[$level]['class'] ) ) {
+			$caller = $backtrace[$level]['class'] . '::' . $backtrace[$level]['function'];
+		} else {
+			$caller = $backtrace[$level]['function'];
+		}
+	} else {
+		$caller = 'unknown';
+	}
+	return $caller;
+}
+
+/** Return a string consisting all callers in stack, somewhat useful sometimes for profiling specific points */
+function wfGetAllCallers() {
+	return implode('/', array_map(
+		create_function('$frame',' 
+			return isset( $frame["class"] )?
+				$frame["class"]."::".$frame["function"]:
+				$frame["function"]; 
+			'),
+		array_reverse(wfDebugBacktrace())));
+}
+
+/**
+ * Get a cache key
+ */
+function wfMemcKey( /*... */ ) {
+	global $wgDBprefix, $wgDBname;
+	$args = func_get_args();
+	if ( $wgDBprefix ) {
+		$key = "$wgDBname-$wgDBprefix:" . implode( ':', $args );
+	} else {
+		$key = $wgDBname . ':' . implode( ':', $args );
+	}
+	return $key;
+}
+
+/**
+ * Get a cache key for a foreign DB
+ */
+function wfForeignMemcKey( $db, $prefix /*, ... */ ) {
+	$args = array_slice( func_get_args(), 2 );
+	if ( $prefix ) {
+		$key = "$db-$prefix:" . implode( ':', $args );
+	} else {
+		$key = $db . ':' . implode( ':', $args );
+	}
+	return $key;
+}
+
+/**
+ * Get an ASCII string identifying this wiki
+ * This is used as a prefix in memcached keys
+ */
+function wfWikiID() {
+	global $wgDBprefix, $wgDBname;
+	if ( $wgDBprefix ) {
+		return "$wgDBname-$wgDBprefix";
+	} else {
+		return $wgDBname;
+	}
+}
+
+/*
+ * Get a Database object
+ * @param integer $db Index of the connection to get. May be DB_MASTER for the 
+ *                master (for write queries), DB_SLAVE for potentially lagged 
+ *                read queries, or an integer >= 0 for a particular server.
+ *
+ * @param mixed $groups Query groups. An array of group names that this query 
+ *              belongs to. May contain a single string if the query is only 
+ *              in one group.
+ */
+function &wfGetDB( $db = DB_LAST, $groups = array() ) {
+	global $wgLoadBalancer;
+	$ret = $wgLoadBalancer->getConnection( $db, true, $groups );
+	return $ret;
+}
+?>
Index: /MediaWiki/branches/1.11/includes/HTMLCacheUpdate.php
===================================================================
--- /MediaWiki/branches/1.11/includes/HTMLCacheUpdate.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/HTMLCacheUpdate.php	(revision 1280)
@@ -0,0 +1,232 @@
+<?php
+
+/**
+ * Class to invalidate the HTML cache of all the pages linking to a given title.
+ * Small numbers of links will be done immediately, large numbers are pushed onto
+ * the job queue.
+ *
+ * This class is designed to work efficiently with small numbers of links, and 
+ * to work reasonably well with up to ~10^5 links. Above ~10^6 links, the memory
+ * and time requirements of loading all backlinked IDs in doUpdate() might become
+ * prohibitive. The requirements measured at Wikimedia are approximately:
+ * 
+ *   memory: 48 bytes per row
+ *   time: 16us per row for the query plus processing
+ *
+ * The reason this query is done is to support partitioning of the job
+ * by backlinked ID. The memory issue could be allieviated by doing this query in 
+ * batches, but of course LIMIT with an offset is inefficient on the DB side.
+ *
+ * The class is nevertheless a vast improvement on the previous method of using 
+ * Image::getLinksTo() and Title::touchArray(), which uses about 2KB of memory per
+ * link.
+ */
+class HTMLCacheUpdate
+{
+	public $mTitle, $mTable, $mPrefix;
+	public $mRowsPerJob, $mRowsPerQuery;
+
+	function __construct( $titleTo, $table ) {
+		global $wgUpdateRowsPerJob, $wgUpdateRowsPerQuery;
+
+		$this->mTitle = $titleTo;
+		$this->mTable = $table;
+		$this->mRowsPerJob = $wgUpdateRowsPerJob;
+		$this->mRowsPerQuery = $wgUpdateRowsPerQuery;
+	}
+
+	function doUpdate() {
+		# Fetch the IDs
+		$cond = $this->getToCondition();
+		$dbr = wfGetDB( DB_SLAVE );
+		$res = $dbr->select( $this->mTable, $this->getFromField(), $cond, __METHOD__ );
+		$resWrap = new ResultWrapper( $dbr, $res );
+		if ( $dbr->numRows( $res ) != 0 ) {
+			if ( $dbr->numRows( $res ) > $this->mRowsPerJob ) {
+				$this->insertJobs( $resWrap );
+			} else {
+				$this->invalidateIDs( $resWrap );
+			}
+		}
+		$dbr->freeResult( $res );
+	}
+
+	function insertJobs( ResultWrapper $res ) {
+		$numRows = $res->numRows();
+		$numBatches = ceil( $numRows / $this->mRowsPerJob );
+		$realBatchSize = $numRows / $numBatches;
+		$start = false;
+		$jobs = array();
+		do {
+			for ( $i = 0; $i < $realBatchSize - 1; $i++ ) {
+				$row = $res->fetchRow();
+				if ( $row ) {
+					$id = $row[0];
+				} else {
+					$id = false;
+					break;
+				}
+			}
+			if ( $id !== false ) {
+				// One less on the end to avoid duplicating the boundary
+				$job = new HTMLCacheUpdateJob( $this->mTitle, $this->mTable, $start, $id - 1 );
+			} else {
+				$job = new HTMLCacheUpdateJob( $this->mTitle, $this->mTable, $start, false );
+			}
+			$jobs[] = $job;
+
+			$start = $id;
+		} while ( $start );
+
+		Job::batchInsert( $jobs );
+	}
+
+	function getPrefix() {
+		static $prefixes = array(
+			'pagelinks' => 'pl',
+			'imagelinks' => 'il',
+			'categorylinks' => 'cl',
+			'templatelinks' => 'tl',
+			
+			# Not needed
+			# 'externallinks' => 'el',
+			# 'langlinks' => 'll'
+		);
+
+		if ( is_null( $this->mPrefix ) ) {
+			$this->mPrefix = $prefixes[$this->mTable];
+			if ( is_null( $this->mPrefix ) ) {
+				throw new MWException( "Invalid table type \"{$this->mTable}\" in " . __CLASS__ );
+			}
+		}
+		return $this->mPrefix;
+	}
+	
+	function getFromField() {
+		return $this->getPrefix() . '_from';
+	}
+
+	function getToCondition() {
+		switch ( $this->mTable ) {
+			case 'pagelinks':
+				return array( 
+					'pl_namespace' => $this->mTitle->getNamespace(),
+					'pl_title' => $this->mTitle->getDBkey()
+				);
+			case 'templatelinks':
+				return array(
+					'tl_namespace' => $this->mTitle->getNamespace(),
+					'tl_title' => $this->mTitle->getDBkey()
+				);
+			case 'imagelinks':
+				return array( 'il_to' => $this->mTitle->getDBkey() );
+			case 'categorylinks':
+				return array( 'cl_to' => $this->mTitle->getDBkey() );
+		}
+		throw new MWException( 'Invalid table type in ' . __CLASS__ );
+	}
+
+	/**
+	 * Invalidate a set of IDs, right now
+	 */
+	function invalidateIDs( ResultWrapper $res ) {
+		global $wgUseFileCache, $wgUseSquid;
+
+		if ( $res->numRows() == 0 ) {
+			return;
+		}
+
+		$dbw = wfGetDB( DB_MASTER );
+		$timestamp = $dbw->timestamp();
+		$done = false;
+		
+		while ( !$done ) {
+			# Get all IDs in this query into an array
+			$ids = array();
+			for ( $i = 0; $i < $this->mRowsPerQuery; $i++ ) {
+				$row = $res->fetchRow();
+				if ( $row ) {
+					$ids[] = $row[0];
+				} else {
+					$done = true;
+					break;
+				}
+			}
+
+			if ( !count( $ids ) ) {
+				break;
+			}
+			
+			# Update page_touched
+			$dbw->update( 'page', 
+				array( 'page_touched' => $timestamp ), 
+				array( 'page_id IN (' . $dbw->makeList( $ids ) . ')' ),
+				__METHOD__
+			);
+
+			# Update squid
+			if ( $wgUseSquid || $wgUseFileCache ) {
+				$titles = Title::newFromIDs( $ids );
+				if ( $wgUseSquid ) {
+					$u = SquidUpdate::newFromTitles( $titles );
+					$u->doUpdate();
+				}
+
+				# Update file cache
+				if  ( $wgUseFileCache ) {
+					foreach ( $titles as $title ) {
+						$cm = new HTMLFileCache($title);
+						@unlink($cm->fileCacheName());
+					}
+				}
+			}
+		}
+	}
+}
+
+/**
+ * @todo document (e.g. one-sentence top-level class description).
+ */
+class HTMLCacheUpdateJob extends Job {
+	var $table, $start, $end;
+
+	/**
+	 * Construct a job
+	 * @param Title $title The title linked to
+	 * @param string $table The name of the link table.
+	 * @param integer $start Beginning page_id or false for open interval
+	 * @param integer $end End page_id or false for open interval
+	 * @param integer $id job_id
+	 */
+	function __construct( $title, $table, $start, $end, $id = 0 ) {
+		$params = array(
+			'table' => $table, 
+			'start' => $start, 
+			'end' => $end );
+		parent::__construct( 'htmlCacheUpdate', $title, $params, $id );
+		$this->table = $table;
+		$this->start = intval( $start );
+		$this->end = intval( $end );
+	}
+
+	function run() {
+		$update = new HTMLCacheUpdate( $this->title, $this->table );
+
+		$fromField = $update->getFromField();
+		$conds = $update->getToCondition();
+		if ( $this->start ) {
+			$conds[] = "$fromField >= {$this->start}";
+		}
+		if ( $this->end ) {
+			$conds[] = "$fromField <= {$this->end}";
+		}
+
+		$dbr = wfGetDB( DB_SLAVE );
+		$res = $dbr->select( $this->table, $fromField, $conds, __METHOD__ );
+		$update->invalidateIDs( new ResultWrapper( $dbr, $res ) );
+		$dbr->freeResult( $res );
+
+		return true;
+	}
+}
+?>
Index: /MediaWiki/branches/1.11/includes/HTMLFileCache.php
===================================================================
--- /MediaWiki/branches/1.11/includes/HTMLFileCache.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/HTMLFileCache.php	(revision 1280)
@@ -0,0 +1,157 @@
+<?php
+/**
+ * Contain the HTMLFileCache class
+ * @addtogroup Cache
+ */
+
+/**
+ * Handles talking to the file cache, putting stuff in and taking it back out.
+ * Mostly called from Article.php, also from DatabaseFunctions.php for the
+ * emergency abort/fallback to cache.
+ *
+ * Global options that affect this module:
+ * $wgCachePages
+ * $wgCacheEpoch
+ * $wgUseFileCache
+ * $wgFileCacheDirectory
+ * $wgUseGzip
+ */
+class HTMLFileCache {
+	var $mTitle, $mFileCache;
+
+	function HTMLFileCache( &$title ) {
+		$this->mTitle =& $title;
+		$this->mFileCache = '';
+	}
+
+	function fileCacheName() {
+		global $wgFileCacheDirectory;
+		if( !$this->mFileCache ) {
+			$key = $this->mTitle->getPrefixedDbkey();
+			$hash = md5( $key );
+			$key = str_replace( '.', '%2E', urlencode( $key ) );
+
+			$hash1 = substr( $hash, 0, 1 );
+			$hash2 = substr( $hash, 0, 2 );
+			$this->mFileCache = "{$wgFileCacheDirectory}/{$hash1}/{$hash2}/{$key}.html";
+
+			if($this->useGzip())
+				$this->mFileCache .= '.gz';
+
+			wfDebug( " fileCacheName() - {$this->mFileCache}\n" );
+		}
+		return $this->mFileCache;
+	}
+
+	function isFileCached() {
+		return file_exists( $this->fileCacheName() );
+	}
+
+	function fileCacheTime() {
+		return wfTimestamp( TS_MW, filemtime( $this->fileCacheName() ) );
+	}
+
+	function isFileCacheGood( $timestamp ) {
+		global $wgCacheEpoch;
+
+		if( !$this->isFileCached() ) return false;
+
+		$cachetime = $this->fileCacheTime();
+		$good = (( $timestamp <= $cachetime ) &&
+			 ( $wgCacheEpoch <= $cachetime ));
+
+		wfDebug(" isFileCacheGood() - cachetime $cachetime, touched {$timestamp} epoch {$wgCacheEpoch}, good $good\n");
+		return $good;
+	}
+
+	function useGzip() {
+		global $wgUseGzip;
+		return $wgUseGzip;
+	}
+
+	/* In handy string packages */
+	function fetchRawText() {
+		return file_get_contents( $this->fileCacheName() );
+	}
+
+	function fetchPageText() {
+		if( $this->useGzip() ) {
+			/* Why is there no gzfile_get_contents() or gzdecode()? */
+			return implode( '', gzfile( $this->fileCacheName() ) );
+		} else {
+			return $this->fetchRawText();
+		}
+	}
+
+	/* Working directory to/from output */
+	function loadFromFileCache() {
+		global $wgOut, $wgMimeType, $wgOutputEncoding, $wgContLanguageCode;
+		wfDebug(" loadFromFileCache()\n");
+
+		$filename=$this->fileCacheName();
+		$wgOut->sendCacheControl();
+
+		header( "Content-type: $wgMimeType; charset={$wgOutputEncoding}" );
+		header( "Content-language: $wgContLanguageCode" );
+
+		if( $this->useGzip() ) {
+			if( wfClientAcceptsGzip() ) {
+				header( 'Content-Encoding: gzip' );
+			} else {
+				/* Send uncompressed */
+				readgzfile( $filename );
+				return;
+			}
+		}
+		readfile( $filename );
+	}
+
+	function checkCacheDirs() {
+		$filename = $this->fileCacheName();
+		$mydir2=substr($filename,0,strrpos($filename,'/')); # subdirectory level 2
+		$mydir1=substr($mydir2,0,strrpos($mydir2,'/')); # subdirectory level 1
+
+		if(!file_exists($mydir1)) { mkdir($mydir1,0775); } # create if necessary
+		if(!file_exists($mydir2)) { mkdir($mydir2,0775); }
+	}
+
+	function saveToFileCache( $origtext ) {
+		$text = $origtext;
+		if(strcmp($text,'') == 0) return '';
+
+		wfDebug(" saveToFileCache()\n", false);
+
+		$this->checkCacheDirs();
+
+		$f = fopen( $this->fileCacheName(), 'w' );
+		if($f) {
+			$now = wfTimestampNow();
+			if( $this->useGzip() ) {
+				$rawtext = str_replace( '</html>',
+					'<!-- Cached/compressed '.$now." -->\n</html>",
+					$text );
+				$text = gzencode( $rawtext );
+			} else {
+				$text = str_replace( '</html>',
+					'<!-- Cached '.$now." -->\n</html>",
+					$text );
+			}
+			fwrite( $f, $text );
+			fclose( $f );
+			if( $this->useGzip() ) {
+				if( wfClientAcceptsGzip() ) {
+					header( 'Content-Encoding: gzip' );
+					return $text;
+				} else {
+					return $rawtext;
+				}
+			} else {
+				return $text;
+			}
+		}
+		return $text;
+	}
+
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/HTMLForm.php
===================================================================
--- /MediaWiki/branches/1.11/includes/HTMLForm.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/HTMLForm.php	(revision 1280)
@@ -0,0 +1,158 @@
+<?php
+/**
+ * This file contain a class to easily build HTML forms as well as custom
+ * functions used by SpecialUserrights.php
+ */
+
+/**
+ * Class to build various forms
+ *
+ * @author jeluf, hashar
+ */
+class HTMLForm {
+	/** name of our form. Used as prefix for labels */
+	var $mName, $mRequest;
+
+	function HTMLForm( &$request ) {
+		$this->mRequest = $request;
+	}
+
+	/**
+	 * @private
+	 * @param $name String: name of the fieldset.
+	 * @param $content String: HTML content to put in.
+	 * @return string HTML fieldset
+	 */
+	function fieldset( $name, $content ) {
+		return "<fieldset><legend>".wfMsg($this->mName.'-'.$name)."</legend>\n" .
+			$content . "\n</fieldset>\n";
+	}
+
+	/**
+	 * @private
+	 * @param $varname String: name of the checkbox.
+	 * @param $checked Boolean: set true to check the box (default False).
+	 */
+	function checkbox( $varname, $checked=false ) {
+		if ( $this->mRequest->wasPosted() && !is_null( $this->mRequest->getVal( $varname ) ) ) {
+			$checked = $this->mRequest->getCheck( $varname );
+		}
+		return "<div><input type='checkbox' value=\"1\" id=\"{$varname}\" name=\"wpOp{$varname}\"" .
+			( $checked ? ' checked="checked"' : '' ) .
+			" /><label for=\"{$varname}\">". wfMsg( $this->mName.'-'.$varname ) .
+			"</label></div>\n";
+	}
+
+	/**
+	 * @private
+	 * @param $varname String: name of the textbox.
+	 * @param $value String: optional value (default empty)
+	 * @param $size Integer: optional size of the textbox (default 20)
+	 */
+	function textbox( $varname, $value='', $size=20 ) {
+		if ( $this->mRequest->wasPosted() ) {
+			$value = $this->mRequest->getText( $varname, $value );
+		}
+		$value = htmlspecialchars( $value );
+		return "<div><label>". wfMsg( $this->mName.'-'.$varname ) .
+			"<input type='text' name=\"{$varname}\" value=\"{$value}\" size=\"{$size}\" /></label></div>\n";
+	}
+
+	/**
+	 * @private
+	 * @param $varname String: name of the radiobox.
+	 * @param $fields Array: Various fields.
+	 */
+	function radiobox( $varname, $fields ) {
+		foreach ( $fields as $value => $checked ) {
+			$s .= "<div><label><input type='radio' name=\"{$varname}\" value=\"{$value}\"" .
+				( $checked ? ' checked="checked"' : '' ) . " />" . wfMsg( $this->mName.'-'.$varname.'-'.$value ) .
+				"</label></div>\n";
+		}
+		return $this->fieldset( $varname, $s );
+	}
+
+	/**
+	 * @private
+	 * @param $varname String: name of the textareabox.
+	 * @param $value String: optional value (default empty)
+	 * @param $size Integer: optional size of the textarea (default 20)
+	 */
+	function textareabox ( $varname, $value='', $size=20 ) {
+		if ( $this->mRequest->wasPosted() ) {
+			$value = $this->mRequest->getText( $varname, $value );
+		}
+		$value = htmlspecialchars( $value );
+		return '<div><label>'.wfMsg( $this->mName.'-'.$varname ).
+		       "<textarea name=\"{$varname}\" rows=\"5\" cols=\"{$size}\">$value</textarea></label></div>\n";
+	}
+
+	/**
+	 * @private
+	 * @param $varname String: name of the arraybox.
+	 * @param $size Integer: Optional size of the textarea (default 20)
+	 */
+	function arraybox( $varname , $size=20 ) {
+		$s = '';
+		if ( $this->mRequest->wasPosted() ) {
+			$arr = $this->mRequest->getArray( $varname );
+			if ( is_array( $arr ) ) {
+				foreach ( $_POST[$varname] as $element ) {
+					$s .= htmlspecialchars( $element )."\n";
+				}
+			}
+		}
+		return "<div><label>".wfMsg( $this->mName.'-'.$varname ).
+			"<textarea name=\"{$varname}\" rows=\"5\" cols=\"{$size}\">{$s}</textarea>\n";
+	}
+} // end class
+
+/** Build a select with all defined groups
+ *
+ * used by SpecialUserrights.php
+ * @todo move it to there, and don't forget to copy it for SpecialMakesysop.php
+ *
+ * @param $selectname String: name of this element. Name of form is automaticly prefixed.
+ * @param $selectmsg String: FIXME
+ * @param $selected Array: array of element selected when posted. Only multiples will show them.
+ * @param $multiple Boolean: A multiple elements select.
+ * @param $size Integer: number of elements to be shown ignored for non-multiple (default 6).
+ * @param $reverse Boolean: if true, multiple select will hide selected elements (default false).
+ * @todo Document $selectmsg
+*/
+function HTMLSelectGroups($selectname, $selectmsg, $selected=array(), $multiple=false, $size=6, $reverse=false) {
+	$groups = User::getAllGroups();
+	$out = htmlspecialchars( wfMsg( $selectmsg ) );
+	$out .= "<br />";
+
+	if( $multiple ) {
+		$attribs = array(
+			'name'    => $selectname . '[]',
+			'multiple'=> 'multiple',
+			'size'    => $size );
+	} else {
+		$attribs = array( 'name' => $selectname );
+	}
+	$attribs['style'] = 'width: 100%';
+	$out .= wfElement( 'select', $attribs, null );
+
+	foreach( $groups as $group ) {
+		$attribs = array( 'value' => $group );
+		if( $multiple ) {
+			// for multiple will only show the things we want
+			if( !in_array( $group, $selected ) xor $reverse ) {
+				continue;
+			}
+		} else {
+			if( in_array( $group, $selected ) ) {
+				$attribs['selected'] = 'selected';
+			}
+		}
+		$out .= wfElement( 'option', $attribs, User::getGroupName( $group ) ) . "\n";
+	}
+
+	$out .= "</select>\n";
+	return $out;
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/HistoryBlob.php
===================================================================
--- /MediaWiki/branches/1.11/includes/HistoryBlob.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/HistoryBlob.php	(revision 1280)
@@ -0,0 +1,313 @@
+<?php
+/**
+ *
+ */
+
+/**
+ * Pure virtual parent
+ * @todo document (needs a one-sentence top-level class description, that answers the question: "what is a HistoryBlob?") 
+ */
+interface HistoryBlob
+{
+	/**
+	 * setMeta and getMeta currently aren't used for anything, I just thought
+	 * they might be useful in the future.
+	 * @param $meta String: a single string.
+	 */
+	public function setMeta( $meta );
+
+	/**
+	 * setMeta and getMeta currently aren't used for anything, I just thought
+	 * they might be useful in the future.
+	 * Gets the meta-value
+	 */
+	public function getMeta();
+
+	/**
+	 * Adds an item of text, returns a stub object which points to the item.
+	 * You must call setLocation() on the stub object before storing it to the
+	 * database
+	 */
+	public function addItem( $text );
+
+	/**
+	 * Get item by hash
+	 */
+	public function getItem( $hash );
+
+	# Set the "default text"
+	# This concept is an odd property of the current DB schema, whereby each text item has a revision
+	# associated with it. The default text is the text of the associated revision. There may, however,
+	# be other revisions in the same object
+	public function setText( $text );
+
+	/**
+	 * Get default text. This is called from Revision::getRevisionText()
+	 */
+	function getText();
+}
+
+/**
+ * The real object
+ * @todo document (needs one-sentence top-level class description + function descriptions).
+ */
+class ConcatenatedGzipHistoryBlob implements HistoryBlob
+{
+	public $mVersion = 0, $mCompressed = false, $mItems = array(), $mDefaultHash = '';
+	public $mFast = 0, $mSize = 0;
+
+	/** Constructor */
+	public function ConcatenatedGzipHistoryBlob() {
+		if ( !function_exists( 'gzdeflate' ) ) {
+			throw new MWException( "Need zlib support to read or write this kind of history object (ConcatenatedGzipHistoryBlob)\n" );
+		}
+	}
+
+	#
+	# HistoryBlob implementation:
+	#
+
+	/** @todo document */
+	public function setMeta( $metaData ) {
+		$this->uncompress();
+		$this->mItems['meta'] = $metaData;
+	}
+
+	/** @todo document */
+	public function getMeta() {
+		$this->uncompress();
+		return $this->mItems['meta'];
+	}
+
+	/** @todo document */
+	public function addItem( $text ) {
+		$this->uncompress();
+		$hash = md5( $text );
+		$this->mItems[$hash] = $text;
+		$this->mSize += strlen( $text );
+
+		$stub = new HistoryBlobStub( $hash );
+		return $stub;
+	}
+
+	/** @todo document */
+	public function getItem( $hash ) {
+		$this->uncompress();
+		if ( array_key_exists( $hash, $this->mItems ) ) {
+			return $this->mItems[$hash];
+		} else {
+			return false;
+		}
+	}
+
+	/** @todo document */
+	public function setText( $text ) {
+		$this->uncompress();
+		$stub = $this->addItem( $text );
+		$this->mDefaultHash = $stub->mHash;
+	}
+
+	/** @todo document */
+	public function getText() {
+		$this->uncompress();
+		return $this->getItem( $this->mDefaultHash );
+	}
+
+	# HistoryBlob implemented.
+
+
+	/** @todo document */
+	public function removeItem( $hash ) {
+		$this->mSize -= strlen( $this->mItems[$hash] );
+		unset( $this->mItems[$hash] );
+	}
+
+	/** @todo document */
+	public function compress() {
+		if ( !$this->mCompressed  ) {
+			$this->mItems = gzdeflate( serialize( $this->mItems ) );
+			$this->mCompressed = true;
+		}
+	}
+
+	/** @todo document */
+	public function uncompress() {
+		if ( $this->mCompressed ) {
+			$this->mItems = unserialize( gzinflate( $this->mItems ) );
+			$this->mCompressed = false;
+		}
+	}
+
+
+	/** @todo document */
+	function __sleep() {
+		$this->compress();
+		return array( 'mVersion', 'mCompressed', 'mItems', 'mDefaultHash' );
+	}
+
+	/** @todo document */
+	function __wakeup() {
+		$this->uncompress();
+	}
+
+	/**
+	 * Determines if this object is happy
+	 */
+	public function isHappy( $maxFactor, $factorThreshold ) {
+		if ( count( $this->mItems ) == 0 ) {
+			return true;
+		}
+		if ( !$this->mFast ) {
+			$this->uncompress();
+			$record = serialize( $this->mItems );
+			$size = strlen( $record );
+			$avgUncompressed = $size / count( $this->mItems );
+			$compressed = strlen( gzdeflate( $record ) );
+
+			if ( $compressed < $factorThreshold * 1024 ) {
+				return true;
+			} else {
+				return $avgUncompressed * $maxFactor < $compressed;
+			}
+		} else {
+			return count( $this->mItems ) <= 10;
+		}
+	}
+}
+
+
+/**
+ * One-step cache variable to hold base blobs; operations that
+ * pull multiple revisions may often pull multiple times from
+ * the same blob. By keeping the last-used one open, we avoid
+ * redundant unserialization and decompression overhead.
+ */
+global $wgBlobCache;
+$wgBlobCache = array();
+
+
+/**
+ * @todo document (needs one-sentence top-level class description + some function descriptions).
+ */
+class HistoryBlobStub {
+	var $mOldId, $mHash, $mRef;
+
+	/** @todo document */
+	function HistoryBlobStub( $hash = '', $oldid = 0 ) {
+		$this->mHash = $hash;
+	}
+
+	/**
+	 * Sets the location (old_id) of the main object to which this object
+	 * points
+	 */
+	function setLocation( $id ) {
+		$this->mOldId = $id;
+	}
+
+	/**
+	 * Sets the location (old_id) of the referring object
+	 */
+	function setReferrer( $id ) {
+		$this->mRef = $id;
+	}
+
+	/**
+	 * Gets the location of the referring object
+	 */
+	function getReferrer() {
+		return $this->mRef;
+	}
+
+	/** @todo document */
+	function getText() {
+		$fname = 'HistoryBlobStub::getText';
+		global $wgBlobCache;
+		if( isset( $wgBlobCache[$this->mOldId] ) ) {
+			$obj = $wgBlobCache[$this->mOldId];
+		} else {
+			$dbr = wfGetDB( DB_SLAVE );
+			$row = $dbr->selectRow( 'text', array( 'old_flags', 'old_text' ), array( 'old_id' => $this->mOldId ) );
+			if( !$row ) {
+				return false;
+			}
+			$flags = explode( ',', $row->old_flags );
+			if( in_array( 'external', $flags ) ) {
+				$url=$row->old_text;
+				@list( /* $proto */ ,$path)=explode('://',$url,2);
+				if ($path=="") {
+					wfProfileOut( $fname );
+					return false;
+				}
+				$row->old_text=ExternalStore::fetchFromUrl($url);
+
+			}
+			if( !in_array( 'object', $flags ) ) {
+				return false;
+			}
+
+			if( in_array( 'gzip', $flags ) ) {
+				// This shouldn't happen, but a bug in the compress script
+				// may at times gzip-compress a HistoryBlob object row.
+				$obj = unserialize( gzinflate( $row->old_text ) );
+			} else {
+				$obj = unserialize( $row->old_text );
+			}
+
+			if( !is_object( $obj ) ) {
+				// Correct for old double-serialization bug.
+				$obj = unserialize( $obj );
+			}
+
+			// Save this item for reference; if pulling many
+			// items in a row we'll likely use it again.
+			$obj->uncompress();
+			$wgBlobCache = array( $this->mOldId => $obj );
+		}
+		return $obj->getItem( $this->mHash );
+	}
+
+	/** @todo document */
+	function getHash() {
+		return $this->mHash;
+	}
+}
+
+
+/**
+ * To speed up conversion from 1.4 to 1.5 schema, text rows can refer to the
+ * leftover cur table as the backend. This avoids expensively copying hundreds
+ * of megabytes of data during the conversion downtime.
+ *
+ * Serialized HistoryBlobCurStub objects will be inserted into the text table
+ * on conversion if $wgFastSchemaUpgrades is set to true.
+ */
+class HistoryBlobCurStub {
+	var $mCurId;
+
+	/** @todo document */
+	function HistoryBlobCurStub( $curid = 0 ) {
+		$this->mCurId = $curid;
+	}
+
+	/**
+	 * Sets the location (cur_id) of the main object to which this object
+	 * points
+	 */
+	function setLocation( $id ) {
+		$this->mCurId = $id;
+	}
+
+	/** @todo document */
+	function getText() {
+		$dbr = wfGetDB( DB_SLAVE );
+		$row = $dbr->selectRow( 'cur', array( 'cur_text' ), array( 'cur_id' => $this->mCurId ) );
+		if( !$row ) {
+			return false;
+		}
+		return $row->cur_text;
+	}
+}
+
+
+?>
Index: /MediaWiki/branches/1.11/includes/Hooks.php
===================================================================
--- /MediaWiki/branches/1.11/includes/Hooks.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/Hooks.php	(revision 1280)
@@ -0,0 +1,129 @@
+<?php
+/**
+ * Hooks.php -- a tool for running hook functions
+ * Copyright 2004, 2005 Evan Prodromou <evan@wikitravel.org>.
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ *
+ * @author Evan Prodromou <evan@wikitravel.org>
+ * @see hooks.txt
+ */
+
+
+/**
+ * Because programmers assign to $wgHooks, we need to be very
+ * careful about its contents. So, there's a lot more error-checking
+ * in here than would normally be necessary.
+ */
+function wfRunHooks($event, $args = null) {
+
+	global $wgHooks;
+
+	if (!is_array($wgHooks)) {
+		throw new MWException("Global hooks array is not an array!\n");
+		return false;
+	}
+
+	if (!array_key_exists($event, $wgHooks)) {
+		return true;
+	}
+
+	if (!is_array($wgHooks[$event])) {
+		throw new MWException("Hooks array for event '$event' is not an array!\n");
+		return false;
+	}
+
+	foreach ($wgHooks[$event] as $index => $hook) {
+
+		$object = NULL;
+		$method = NULL;
+		$func = NULL;
+		$data = NULL;
+		$have_data = false;
+
+		/* $hook can be: a function, an object, an array of $function and $data,
+		 * an array of just a function, an array of object and method, or an
+		 * array of object, method, and data.
+		 */
+
+		if (is_array($hook)) {
+			if (count($hook) < 1) {
+				throw new MWException("Empty array in hooks for " . $event . "\n");
+			} else if (is_object($hook[0])) {
+				$object = $wgHooks[$event][$index][0];
+				if (count($hook) < 2) {
+					$method = "on" . $event;
+				} else {
+					$method = $hook[1];
+					if (count($hook) > 2) {
+						$data = $hook[2];
+						$have_data = true;
+					}
+				}
+			} else if (is_string($hook[0])) {
+				$func = $hook[0];
+				if (count($hook) > 1) {
+					$data = $hook[1];
+					$have_data = true;
+				}
+			} else {
+				var_dump( $wgHooks );
+				throw new MWException("Unknown datatype in hooks for " . $event . "\n");
+			}
+		} else if (is_string($hook)) { # functions look like strings, too
+			$func = $hook;
+		} else if (is_object($hook)) {
+			$object = $wgHooks[$event][$index];
+			$method = "on" . $event;
+		} else {
+			throw new MWException("Unknown datatype in hooks for " . $event . "\n");
+		}
+
+		/* We put the first data element on, if needed. */
+
+		if ($have_data) {
+			$hook_args = array_merge(array($data), $args);
+		} else {
+			$hook_args = $args;
+		}
+
+		if ( isset( $object ) ) {
+			$func = get_class( $object ) . '::' . $method;
+			$callback = array( $object, $method );
+		} elseif ( false !== ( $pos = strpos( $func, '::' ) ) ) {
+			$callback = array( substr( $func, 0, $pos ), substr( $func, $pos + 2 ) );
+		} else {
+			$callback = $func;
+		}
+
+		/* Call the hook. */
+		wfProfileIn( $func );
+		$retval = call_user_func_array( $callback, $hook_args );
+		wfProfileOut( $func );
+
+		/* String return is an error; false return means stop processing. */
+
+		if (is_string($retval)) {
+			global $wgOut;
+			$wgOut->showFatalError($retval);
+			return false;
+		} else if (!$retval) {
+			return false;
+		}
+	}
+
+	return true;
+}
+?>
Index: /MediaWiki/branches/1.11/includes/HttpFunctions.php
===================================================================
--- /MediaWiki/branches/1.11/includes/HttpFunctions.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/HttpFunctions.php	(revision 1280)
@@ -0,0 +1,91 @@
+<?php
+
+/**
+ * Various HTTP related functions
+ */
+class Http {
+	/**
+	 * Get the contents of a file by HTTP
+	 *
+	 * if $timeout is 'default', $wgHTTPTimeout is used
+	 */
+	static function get( $url, $timeout = 'default' ) {
+		global $wgHTTPTimeout, $wgHTTPProxy, $wgVersion, $wgTitle;
+
+		# Use curl if available
+		if ( function_exists( 'curl_init' ) ) {
+			$c = curl_init( $url );
+			if ( wfIsLocalURL( $url ) ) {
+				curl_setopt( $c, CURLOPT_PROXY, 'localhost:80' );
+			} else if ($wgHTTPProxy) {
+				curl_setopt($c, CURLOPT_PROXY, $wgHTTPProxy);
+			}
+
+			if ( $timeout == 'default' ) {
+				$timeout = $wgHTTPTimeout;
+			}
+			curl_setopt( $c, CURLOPT_TIMEOUT, $timeout );
+			curl_setopt( $c, CURLOPT_USERAGENT, "MediaWiki/$wgVersion" );
+
+			# Set the referer to $wgTitle, even in command-line mode
+			# This is useful for interwiki transclusion, where the foreign
+			# server wants to know what the referring page is.
+			# $_SERVER['REQUEST_URI'] gives a less reliable indication of the
+			# referring page.
+			if ( is_object( $wgTitle ) ) {
+				curl_setopt( $c, CURLOPT_REFERER, $wgTitle->getFullURL() );
+			}
+
+			ob_start();
+			curl_exec( $c );
+			$text = ob_get_contents();
+			ob_end_clean();
+
+			# Don't return the text of error messages, return false on error
+			if ( curl_getinfo( $c, CURLINFO_HTTP_CODE ) != 200 ) {
+				$text = false;
+			}
+			curl_close( $c );
+		} else {
+			# Otherwise use file_get_contents, or its compatibility function from GlobalFunctions.php
+			# This may take 3 minutes to time out, and doesn't have local fetch capabilities
+			$url_fopen = ini_set( 'allow_url_fopen', 1 );
+			$text = file_get_contents( $url );
+			ini_set( 'allow_url_fopen', $url_fopen );
+		}
+		return $text;
+	}
+
+	/**
+	 * Check if the URL can be served by localhost
+	 */
+	static function isLocalURL( $url ) {
+		global $wgCommandLineMode, $wgConf;
+		if ( $wgCommandLineMode ) {
+			return false;
+		}
+
+		// Extract host part
+		$matches = array();
+		if ( preg_match( '!^http://([\w.-]+)[/:].*$!', $url, $matches ) ) {
+			$host = $matches[1];
+			// Split up dotwise
+			$domainParts = explode( '.', $host );
+			// Check if this domain or any superdomain is listed in $wgConf as a local virtual host
+			$domainParts = array_reverse( $domainParts );
+			for ( $i = 0; $i < count( $domainParts ); $i++ ) {
+				$domainPart = $domainParts[$i];
+				if ( $i == 0 ) {
+					$domain = $domainPart;
+				} else {
+					$domain = $domainPart . '.' . $domain;
+				}
+				if ( $wgConf->isLocalVHost( $domain ) ) {
+					return true;
+				}
+			}
+		}
+		return false;
+	}
+}
+?>
Index: /MediaWiki/branches/1.11/includes/IP.php
===================================================================
--- /MediaWiki/branches/1.11/includes/IP.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/IP.php	(revision 1280)
@@ -0,0 +1,483 @@
+<?php
+/*
+ * @Author "Ashar Voultoiz" <hashar@altern.org>
+ * @License GPL v2 or later
+ */
+
+// Some regex definition to "play" with IP address and IP address blocks
+
+// An IP is made of 4 bytes from x00 to xFF which is d0 to d255
+define( 'RE_IP_BYTE', '(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|0?[0-9]?[0-9])');
+define( 'RE_IP_ADD' , RE_IP_BYTE . '\.' . RE_IP_BYTE . '\.' . RE_IP_BYTE . '\.' . RE_IP_BYTE );
+// An IPv4 block is an IP address and a prefix (d1 to d32)
+define( 'RE_IP_PREFIX', '(3[0-2]|[12]?\d)');
+define( 'RE_IP_BLOCK', RE_IP_ADD . '\/' . RE_IP_PREFIX);
+// For IPv6 canonicalization (NOT for strict validation; these are quite lax!)
+define( 'RE_IPV6_WORD', '([0-9A-Fa-f]{1,4})' );
+define( 'RE_IPV6_GAP', ':(?:0+:)*(?::(?:0+:)*)?' );
+define( 'RE_IPV6_V4_PREFIX', '0*' . RE_IPV6_GAP . '(?:ffff:)?' );
+// An IPv6 block is an IP address and a prefix (d1 to d128)
+define( 'RE_IPV6_PREFIX', '(12[0-8]|1[01][0-9]|[1-9]?\d)');
+// An IPv6 IP is made up of 8 octets. However abbreviations like "::" can be used. This is lax!
+define( 'RE_IPV6_ADD', '(:(:' . RE_IPV6_WORD . '){1,7}|' . RE_IPV6_WORD . '(:{1,2}' . RE_IPV6_WORD . '|::$){1,7})' );
+define( 'RE_IPV6_BLOCK', RE_IPV6_ADD . '\/' . RE_IPV6_PREFIX );
+// This might be useful for regexps used elsewhere, matches any IPv6 or IPv6 address or network
+define( 'IP_ADDRESS_STRING', RE_IP_ADD . '(\/' . RE_IP_PREFIX . '|)|' . RE_IPV6_ADD . '(\/' . RE_IPV6_PREFIX . '|)');
+
+/**
+ * A collection of public static functions to play with IP address
+ * and IP blocks.
+ */
+class IP {
+	/**
+	 * Given a string, determine if it as valid IP
+	 * Unlike isValid(), this looks for networks too
+	 * @param $ip IP address.
+	 * @return string
+	 */
+	public static function isIPAddress( $ip ) {
+		if ( !$ip ) return false;
+		if ( is_array( $ip ) ) {
+		  throw new MWException( "invalid value passed to " . __METHOD__ );
+		}
+		// IPv6 IPs with two "::" strings are ambiguous and thus invalid
+		return preg_match( '/^' . IP_ADDRESS_STRING . '$/', $ip) && ( substr_count($ip, '::') < 2 );
+	}
+	
+	public static function isIPv6( $ip ) {
+		if ( !$ip ) return false;
+		if( is_array( $ip ) ) {
+		  throw new MWException( "invalid value passed to " . __METHOD__ );
+		}
+		// IPv6 IPs with two "::" strings are ambiguous and thus invalid
+		return preg_match( '/^' . RE_IPV6_ADD . '(\/' . RE_IPV6_PREFIX . '|)$/', $ip) && ( substr_count($ip, '::') < 2);
+	}
+	
+	public static function isIPv4( $ip ) {
+		if ( !$ip ) return false;
+		return preg_match( '/^' . RE_IP_ADD . '(\/' . RE_IP_PREFIX . '|)$/', $ip);
+	}
+	
+	/**
+	 * Given an IP address in dotted-quad notation, returns an IPv6 octet.
+	 * See http://www.answers.com/topic/ipv4-compatible-address
+	 * IPs with the first 92 bits as zeros are reserved from IPv6
+	 * @param $ip quad-dotted IP address.
+	 * @return string 
+	 */
+	public static function IPv4toIPv6( $ip ) {
+		if ( !$ip ) return null;
+		// Convert only if needed
+		if ( self::isIPv6( $ip ) ) return $ip;
+		// IPv4 CIDRs
+		if ( strpos( $ip, '/' ) !== false ) {
+			$parts = explode( '/', $ip, 2 );
+			if ( count( $parts ) != 2 ) {
+				return false;
+			}
+			$network = self::toUnsigned( $parts[0] );
+			if ( $network !== false && is_numeric( $parts[1] ) && $parts[1] >= 0 && $parts[1] <= 32 ) {
+				$bits = $parts[1] + 96;
+				return self::toOctet( $network ) . "/$bits";
+			} else {
+				return false;
+			}
+		}
+		return self::toOctet( self::toUnsigned( $ip ) );
+	}
+
+	/**
+	 * Given an IPv6 address in octet notation, returns an unsigned integer.
+	 * @param $ip octet ipv6 IP address.
+	 * @return string
+	 */
+	public static function toUnsigned6( $ip ) {
+		if ( !$ip ) return null;
+       	$ip = explode(':', self::sanitizeIP( $ip ) );
+       	$r_ip = '';
+       	foreach ($ip as $v) {
+       		$r_ip .= str_pad( $v, 4, 0, STR_PAD_LEFT );
+        }
+        $r_ip = wfBaseConvert( $r_ip, 16, 10 );
+       	return $r_ip;
+	}
+	
+	/**
+	 * Given an IPv6 address in octet notation, returns the expanded octet.
+	 * IPv4 IPs will be trimmed, thats it...
+	 * @param $ip octet ipv6 IP address.
+	 * @return string 
+	 */	
+	public static function sanitizeIP( $ip ) {
+		if ( !$ip ) return null;
+		// Trim and return IPv4 addresses
+		if ( self::isIPv4($ip) ) return trim($ip);
+		// Only IPv6 addresses can be expanded
+		if ( !self::isIPv6($ip) ) return $ip;
+		// Remove any whitespaces, convert to upper case
+		$ip = strtoupper( trim($ip) );
+		// Expand zero abbreviations
+		if ( strpos( $ip, '::' ) !== false ) {
+    		$ip = str_replace('::', str_repeat(':0', 8 - substr_count($ip, ':')) . ':', $ip);
+    	}
+    	// For IPs that start with "::", correct the final IP so that it starts with '0' and not ':'
+    	if ( $ip[0] == ':' ) $ip = "0$ip";
+    	// Remove leading zereos from each bloc as needed
+    	$ip = preg_replace( '/(^|:)0+' . RE_IPV6_WORD . '/', '$1$2', $ip );
+    	return $ip;
+	}
+	
+	/**
+	 * Given an unsigned integer, returns an IPv6 address in octet notation
+	 * @param $ip integer IP address.
+	 * @return string 
+	 */
+	public static function toOctet( $ip_int ) {
+   		// Convert to padded uppercase hex
+   		$ip_hex = wfBaseConvert($ip_int, 10, 16, 32, false);
+   		// Seperate into 8 octets
+   		$ip_oct = substr( $ip_hex, 0, 4 );
+   		for ($n=1; $n < 8; $n++) {
+   			$ip_oct .= ':' . substr($ip_hex, 4*$n, 4);
+   		}
+   		// NO leading zeroes
+   		$ip_oct = preg_replace( '/(^|:)0+' . RE_IPV6_WORD . '/', '$1$2', $ip_oct );
+       	return $ip_oct;
+	}
+
+	/**
+	 * Convert a network specification in IPv6 CIDR notation to an integer network and a number of bits
+	 * @return array(string, int)
+	 */
+	public static function parseCIDR6( $range ) {
+		# Expand any IPv6 IP
+		$parts = explode( '/', IP::sanitizeIP( $range ), 2 );
+		if ( count( $parts ) != 2 ) {
+			return array( false, false );
+		}
+		$network = self::toUnsigned6( $parts[0] );
+		if ( $network !== false && is_numeric( $parts[1] ) && $parts[1] >= 0 && $parts[1] <= 128 ) {
+			$bits = $parts[1];
+			if ( $bits == 0 ) {
+				$network = 0;
+			} else {
+			# Native 32 bit functions WONT work here!!!
+			# Convert to a padded binary number
+				$network = wfBaseConvert( $network, 10, 2, 128 );
+			# Truncate the last (128-$bits) bits and replace them with zeros
+				$network = str_pad( substr( $network, 0, $bits ), 128, 0, STR_PAD_RIGHT );
+			# Convert back to an integer
+				$network = wfBaseConvert( $network, 2, 10 );
+			}
+		} else {
+			$network = false;
+			$bits = false;
+		}
+		return array( $network, $bits );
+	}
+	
+	/**
+	 * Given a string range in a number of formats, return the start and end of 
+	 * the range in hexadecimal. For IPv6.
+	 *
+	 * Formats are:
+	 *     2001:0db8:85a3::7344/96          			 CIDR
+	 *     2001:0db8:85a3::7344 - 2001:0db8:85a3::7344   Explicit range
+	 *     2001:0db8:85a3::7344/96             			 Single IP
+	 * @return array(string, int)
+	 */
+	public static function parseRange6( $range ) {
+		# Expand any IPv6 IP
+		$range = IP::sanitizeIP( $range );
+		if ( strpos( $range, '/' ) !== false ) {
+			# CIDR
+			list( $network, $bits ) = self::parseCIDR6( $range );
+			if ( $network === false ) {
+				$start = $end = false;
+			} else {
+				$start = wfBaseConvert( $network, 10, 16, 32, false );
+				# Turn network to binary (again)
+				$end = wfBaseConvert( $network, 10, 2, 128 );
+				# Truncate the last (128-$bits) bits and replace them with ones
+				$end = str_pad( substr( $end, 0, $bits ), 128, 1, STR_PAD_RIGHT );
+				# Convert to hex
+				$end = wfBaseConvert( $end, 2, 16, 32, false );
+				# see toHex() comment
+				$start = "v6-$start"; $end = "v6-$end";
+			}
+		} elseif ( strpos( $range, '-' ) !== false ) {
+			# Explicit range
+			list( $start, $end ) = array_map( 'trim', explode( '-', $range, 2 ) );
+			$start = self::toUnsigned6( $start ); $end = self::toUnsigned6( $end );
+			if ( $start > $end ) {
+				$start = $end = false;
+			} else {
+				$start = wfBaseConvert( $start, 10, 16, 32, false );
+				$end = wfBaseConvert( $end, 10, 16, 32, false );
+			}
+			# see toHex() comment
+			$start = "v6-$start"; $end = "v6-$end";
+		} else {
+			# Single IP
+			$start = $end = self::toHex( $range );
+		}
+		if ( $start === false || $end === false ) {
+			return array( false, false );
+		} else {
+			return array( $start, $end );
+		}
+    }
+	
+	/**
+	 * Validate an IP address.
+	 * @return boolean True if it is valid.
+	 */
+	public static function isValid( $ip ) {
+		return ( preg_match( '/^' . RE_IP_ADD . '$/', $ip) || preg_match( '/^' . RE_IPV6_ADD . '$/', $ip) );
+	}
+
+	/**
+	 * Validate an IP Block.
+	 * @return boolean True if it is valid.
+	 */
+	public static function isValidBlock( $ipblock ) {
+		return ( count(self::toArray($ipblock)) == 1 + 5 );
+	}
+
+	/**
+	 * Determine if an IP address really is an IP address, and if it is public,
+	 * i.e. not RFC 1918 or similar
+	 * Comes from ProxyTools.php
+	 */
+	public static function isPublic( $ip ) {
+		$n = self::toUnsigned( $ip );
+		if ( !$n ) {
+			return false;
+		}
+
+		// ip2long accepts incomplete addresses, as well as some addresses
+		// followed by garbage characters. Check that it's really valid.
+		if( $ip != long2ip( $n ) ) {
+			return false;
+		}
+
+		static $privateRanges = false;
+		if ( !$privateRanges ) {
+			$privateRanges = array(
+				array( '10.0.0.0',    '10.255.255.255' ),   # RFC 1918 (private)
+				array( '172.16.0.0',  '172.31.255.255' ),   #     "
+				array( '192.168.0.0', '192.168.255.255' ),  #     "
+				array( '0.0.0.0',     '0.255.255.255' ),    # this network
+				array( '127.0.0.0',   '127.255.255.255' ),  # loopback
+			);
+		}
+
+		foreach ( $privateRanges as $r ) {
+			$start = self::toUnsigned( $r[0] );
+			$end = self::toUnsigned( $r[1] );
+			if ( $n >= $start && $n <= $end ) {
+				return false;
+			}
+		}
+		return true;
+	}
+
+	/**
+	 * Split out an IP block as an array of 4 bytes and a mask,
+	 * return false if it can't be determined
+	 *
+	 * @param $ip string A quad dotted/octet IP address
+	 * @return array
+	 */
+	public static function toArray( $ipblock ) {
+		$matches = array();
+		if( preg_match( '/^' . RE_IP_ADD . '(?:\/(?:'.RE_IP_PREFIX.'))?' . '$/', $ipblock, $matches ) ) {
+			return $matches;
+		} else if ( preg_match( '/^' . RE_IPV6_ADD . '(?:\/(?:'.RE_IPV6_PREFIX.'))?' . '$/', $ipblock, $matches ) ) {
+			return $matches;
+		} else {
+			return false;
+		}
+	}
+
+	/**
+	 * Return a zero-padded hexadecimal representation of an IP address.
+	 *
+	 * Hexadecimal addresses are used because they can easily be extended to
+	 * IPv6 support. To separate the ranges, the return value from this 
+	 * function for an IPv6 address will be prefixed with "v6-", a non-
+	 * hexadecimal string which sorts after the IPv4 addresses.
+	 *
+	 * @param $ip Quad dotted/octet IP address.
+	 * @return hexidecimal
+	 */
+	public static function toHex( $ip ) {
+		$n = self::toUnsigned( $ip );
+		if ( $n !== false ) {
+			$n = ( self::isIPv6($ip) ) ? "v6-" . wfBaseConvert( $n, 10, 16, 32, false ) : wfBaseConvert( $n, 10, 16, 8, false );
+		}
+		return $n;
+	}
+
+	/**
+	 * Given an IP address in dotted-quad/octet notation, returns an unsigned integer.
+	 * Like ip2long() except that it actually works and has a consistent error return value.
+	 * Comes from ProxyTools.php
+	 * @param $ip Quad dotted IP address.
+	 * @return integer
+	 */
+	public static function toUnsigned( $ip ) {
+		// Use IPv6 functions if needed
+		if ( self::isIPv6( $ip ) ) {
+			return self::toUnsigned6( $ip );
+		}
+		if ( $ip == '255.255.255.255' ) {
+			$n = -1;
+		} else {
+			$n = ip2long( $ip );
+			if ( $n == -1 || $n === false ) { # Return value on error depends on PHP version
+				$n = false;
+			}
+		}
+		if ( $n < 0 ) {
+			$n += pow( 2, 32 );
+		}
+		return $n;
+	}
+
+	/**
+	 * Convert a dotted-quad IP to a signed integer
+	 * Returns false on failure
+	 */
+	public static function toSigned( $ip ) {
+		if ( $ip == '255.255.255.255' ) {
+			$n = -1;
+		} else {
+			$n = ip2long( $ip );
+			if ( $n == -1 ) {
+				$n = false;
+			}
+		}
+		return $n;
+	}
+
+	/**
+	 * Convert a network specification in CIDR notation to an integer network and a number of bits
+	 * @return array(string, int)
+	 */
+	public static function parseCIDR( $range ) {
+		$parts = explode( '/', $range, 2 );
+		if ( count( $parts ) != 2 ) {
+			return array( false, false );
+		}
+		$network = self::toSigned( $parts[0] );
+		if ( $network !== false && is_numeric( $parts[1] ) && $parts[1] >= 0 && $parts[1] <= 32 ) {
+			$bits = $parts[1];
+			if ( $bits == 0 ) {
+				$network = 0;
+			} else {
+				$network &= ~((1 << (32 - $bits)) - 1);
+			}
+			# Convert to unsigned
+			if ( $network < 0 ) {
+				$network += pow( 2, 32 );
+			}
+		} else {
+			$network = false;
+			$bits = false;
+		}
+		return array( $network, $bits );
+	}
+
+	/**
+	 * Given a string range in a number of formats, return the start and end of 
+	 * the range in hexadecimal.
+	 *
+	 * Formats are:
+	 *     1.2.3.4/24          CIDR
+	 *     1.2.3.4 - 1.2.3.5   Explicit range
+	 *     1.2.3.4             Single IP
+	 * 
+	 *     2001:0db8:85a3::7344/96          			 CIDR
+	 *     2001:0db8:85a3::7344 - 2001:0db8:85a3::7344   Explicit range
+	 *     2001:0db8:85a3::7344             			 Single IP
+	 * @return array(string, int)
+	 */
+	public static function parseRange( $range ) {
+		// Use IPv6 functions if needed
+		if ( self::isIPv6( $range ) ) {
+			return self::parseRange6( $range );
+		}
+		if ( strpos( $range, '/' ) !== false ) {
+			# CIDR
+			list( $network, $bits ) = self::parseCIDR( $range );
+			if ( $network === false ) {
+				$start = $end = false;
+			} else {
+				$start = sprintf( '%08X', $network );
+				$end = sprintf( '%08X', $network + pow( 2, (32 - $bits) ) - 1 );
+			}
+		} elseif ( strpos( $range, '-' ) !== false ) {
+			# Explicit range
+			list( $start, $end ) = array_map( 'trim', explode( '-', $range, 2 ) );
+			$start = self::toUnsigned( $start ); $end = self::toUnsigned( $end );
+			if ( $start > $end ) {
+				$start = $end = false;
+			} else {
+				$start = sprintf( '%08X', $start );
+				$end = sprintf( '%08X', $end );
+			}
+		} else {
+			# Single IP
+			$start = $end = self::toHex( $range );
+		}
+		if ( $start === false || $end === false ) {
+			return array( false, false );
+		} else {				
+			return array( $start, $end );
+		}
+    }
+
+    /**
+     * Determine if a given IPv4/IPv6 address is in a given CIDR network
+     * @param $addr The address to check against the given range.
+     * @param $range The range to check the given address against.
+     * @return bool Whether or not the given address is in the given range.
+     */
+    public static function isInRange( $addr, $range ) {
+    // Convert to IPv6 if needed
+        $unsignedIP = self::toHex( $addr );
+        list( $start, $end ) = self::parseRange( $range );
+        return (($unsignedIP >= $start) && ($unsignedIP <= $end));
+    }
+
+    /**
+     * Convert some unusual representations of IPv4 addresses to their
+     * canonical dotted quad representation.
+     *
+     * This currently only checks a few IPV4-to-IPv6 related cases.  More
+     * unusual representations may be added later.
+     *
+     * @param $addr something that might be an IP address
+     * @return valid dotted quad IPv4 address or null
+     */
+    public static function canonicalize( $addr ) {
+	if ( self::isValid( $addr ) )
+	    return $addr;
+
+	// IPv6 loopback address
+	$m = array();
+	if ( preg_match( '/^0*' . RE_IPV6_GAP . '1$/', $addr, $m ) )
+	    return '127.0.0.1';
+
+	// IPv4-mapped and IPv4-compatible IPv6 addresses
+	if ( preg_match( '/^' . RE_IPV6_V4_PREFIX . '(' . RE_IP_ADD . ')$/i', $addr, $m ) )
+	    return $m[1];
+	if ( preg_match( '/^' . RE_IPV6_V4_PREFIX . RE_IPV6_WORD . ':' . RE_IPV6_WORD . '$/i', $addr, $m ) )
+	    return long2ip( ( hexdec( $m[1] ) << 16 ) + hexdec( $m[2] ) );
+
+	return null;  // give up
+    }
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/Image.php
===================================================================
--- /MediaWiki/branches/1.11/includes/Image.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/Image.php	(revision 1280)
@@ -0,0 +1,2142 @@
+<?php
+/**
+ */
+
+/**
+ * NOTE FOR WINDOWS USERS:
+ * To enable EXIF functions, add the folloing lines to the
+ * "Windows extensions" section of php.ini:
+ *
+ * extension=extensions/php_mbstring.dll
+ * extension=extensions/php_exif.dll
+ */
+
+/**
+ * Bump this number when serialized cache records may be incompatible.
+ */
+define( 'MW_IMAGE_VERSION', 2 );
+
+/**
+ * Class to represent an image
+ *
+ * Provides methods to retrieve paths (physical, logical, URL),
+ * to generate thumbnails or for uploading.
+ *
+ * @addtogroup Media
+ */
+class Image
+{
+	const DELETED_FILE = 1;
+	const DELETED_COMMENT = 2;
+	const DELETED_USER = 4;
+	const DELETED_RESTRICTED = 8;
+	const RENDER_NOW = 1;
+    
+	/**#@+
+	 * @private
+	 */
+	var	$name,          # name of the image (constructor)
+		$imagePath,     # Path of the image (loadFromXxx)
+		$url,           # Image URL (accessor)
+		$title,         # Title object for this image (constructor)
+		$fileExists,    # does the image file exist on disk? (loadFromXxx)
+		$fromSharedDirectory, # load this image from $wgSharedUploadDirectory (loadFromXxx)
+		$historyLine,	# Number of line to return by nextHistoryLine() (constructor)
+		$historyRes,	# result of the query for the image's history (nextHistoryLine)
+		$width,         # \
+		$height,        #  |
+		$bits,          #   --- returned by getimagesize (loadFromXxx)
+		$attr,          # /
+		$type,          # MEDIATYPE_xxx (bitmap, drawing, audio...)
+		$mime,          # MIME type, determined by MimeMagic::guessMimeType
+		$extension,     # The file extension (constructor)
+		$size,          # Size in bytes (loadFromXxx)
+		$metadata,      # Metadata
+		$dataLoaded,    # Whether or not all this has been loaded from the database (loadFromXxx)
+		$page,		# Page to render when creating thumbnails
+		$lastError;     # Error string associated with a thumbnail display error
+
+
+	/**#@-*/
+
+	/**
+	 * Create an Image object from an image name
+	 *
+	 * @param string $name name of the image, used to create a title object using Title::makeTitleSafe
+	 * @public
+	 */
+	public static function newFromName( $name ) {
+		$title = Title::makeTitleSafe( NS_IMAGE, $name );
+		if ( is_object( $title ) ) {
+			return new Image( $title );
+		} else {
+			return NULL;
+		}
+	}
+
+	/**
+	 * Obsolete factory function, use constructor
+	 * @deprecated
+	 */
+	function newFromTitle( $title ) {
+		return new Image( $title );
+	}
+
+	function Image( $title ) {
+		if( !is_object( $title ) ) {
+			throw new MWException( 'Image constructor given bogus title.' );
+		}
+		$this->title =& $title;
+		$this->name = $title->getDBkey();
+		$this->metadata = '';
+
+		$n = strrpos( $this->name, '.' );
+		$this->extension = Image::normalizeExtension( $n ?
+			substr( $this->name, $n + 1 ) : '' );
+		$this->historyLine = 0;
+
+		$this->dataLoaded = false;
+	}
+
+	/**
+	 * Normalize a file extension to the common form, and ensure it's clean.
+	 * Extensions with non-alphanumeric characters will be discarded.
+	 *
+	 * @param $ext string (without the .)
+	 * @return string
+	 */
+	static function normalizeExtension( $ext ) {
+		$lower = strtolower( $ext );
+		$squish = array(
+			'htm' => 'html',
+			'jpeg' => 'jpg',
+			'mpeg' => 'mpg',
+			'tiff' => 'tif' );
+		if( isset( $squish[$lower] ) ) {
+			return $squish[$lower];
+		} elseif( preg_match( '/^[0-9a-z]+$/', $lower ) ) {
+			return $lower;
+		} else {
+			return '';
+		}
+	}
+
+	/**
+	 * Get the memcached keys
+	 * Returns an array, first element is the local cache key, second is the shared cache key, if there is one
+	 */
+	function getCacheKeys( ) {
+		global $wgUseSharedUploads, $wgSharedUploadDBname, $wgCacheSharedUploads;
+
+		$hashedName = md5($this->name);
+		$keys = array( wfMemcKey( 'Image', $hashedName ) );
+		if ( $wgUseSharedUploads && $wgSharedUploadDBname && $wgCacheSharedUploads ) {
+			$keys[] = wfForeignMemcKey( $wgSharedUploadDBname, false, 'Image', $hashedName );
+		}
+		return $keys;
+	}
+
+	/**
+	 * Try to load image metadata from memcached. Returns true on success.
+	 */
+	function loadFromCache() {
+		global $wgUseSharedUploads, $wgMemc;
+		wfProfileIn( __METHOD__ );
+		$this->dataLoaded = false;
+		$keys = $this->getCacheKeys();
+		$cachedValues = $wgMemc->get( $keys[0] );
+
+		// Check if the key existed and belongs to this version of MediaWiki
+		if (!empty($cachedValues) && is_array($cachedValues)
+		  && isset($cachedValues['version']) && ( $cachedValues['version'] == MW_IMAGE_VERSION )
+		  && isset( $cachedValues['mime'] ) && isset( $cachedValues['metadata'] ) )
+		{
+			if ( $wgUseSharedUploads && $cachedValues['fromShared']) {
+				# if this is shared file, we need to check if image
+				# in shared repository has not changed
+				if ( isset( $keys[1] ) ) {
+					$commonsCachedValues = $wgMemc->get( $keys[1] );
+					if (!empty($commonsCachedValues) && is_array($commonsCachedValues)
+					  && isset($commonsCachedValues['version'])
+					  && ( $commonsCachedValues['version'] == MW_IMAGE_VERSION )
+					  && isset($commonsCachedValues['mime'])) {
+						wfDebug( "Pulling image metadata from shared repository cache\n" );
+						$this->name = $commonsCachedValues['name'];
+						$this->imagePath = $commonsCachedValues['imagePath'];
+						$this->fileExists = $commonsCachedValues['fileExists'];
+						$this->width = $commonsCachedValues['width'];
+						$this->height = $commonsCachedValues['height'];
+						$this->bits = $commonsCachedValues['bits'];
+						$this->type = $commonsCachedValues['type'];
+						$this->mime = $commonsCachedValues['mime'];
+						$this->metadata = $commonsCachedValues['metadata'];
+						$this->size = $commonsCachedValues['size'];
+						$this->fromSharedDirectory = true;
+						$this->dataLoaded = true;
+						$this->imagePath = $this->getFullPath(true);
+					}
+				}
+			} else {
+				wfDebug( "Pulling image metadata from local cache\n" );
+				$this->name = $cachedValues['name'];
+				$this->imagePath = $cachedValues['imagePath'];
+				$this->fileExists = $cachedValues['fileExists'];
+				$this->width = $cachedValues['width'];
+				$this->height = $cachedValues['height'];
+				$this->bits = $cachedValues['bits'];
+				$this->type = $cachedValues['type'];
+				$this->mime = $cachedValues['mime'];
+				$this->metadata = $cachedValues['metadata'];
+				$this->size = $cachedValues['size'];
+				$this->fromSharedDirectory = false;
+				$this->dataLoaded = true;
+				$this->imagePath = $this->getFullPath();
+			}
+		}
+		if ( $this->dataLoaded ) {
+			wfIncrStats( 'image_cache_hit' );
+		} else {
+			wfIncrStats( 'image_cache_miss' );
+		}
+
+		wfProfileOut( __METHOD__ );
+		return $this->dataLoaded;
+	}
+
+	/**
+	 * Save the image metadata to memcached
+	 */
+	function saveToCache() {
+		global $wgMemc, $wgUseSharedUploads;
+		$this->load();
+		$keys = $this->getCacheKeys();
+		// We can't cache negative metadata for non-existent files,
+		// because if the file later appears in commons, the local
+		// keys won't be purged.
+		if ( $this->fileExists || !$wgUseSharedUploads ) {
+			$cachedValues = array(
+				'version'    => MW_IMAGE_VERSION,
+				'name'       => $this->name,
+				'imagePath'  => $this->imagePath,
+				'fileExists' => $this->fileExists,
+				'fromShared' => $this->fromSharedDirectory,
+				'width'      => $this->width,
+				'height'     => $this->height,
+				'bits'       => $this->bits,
+				'type'       => $this->type,
+				'mime'       => $this->mime,
+				'metadata'   => $this->metadata,
+				'size'       => $this->size );
+
+			$wgMemc->set( $keys[0], $cachedValues, 60 * 60 * 24 * 7 ); // A week
+		} else {
+			// However we should clear them, so they aren't leftover
+			// if we've deleted the file.
+			$wgMemc->delete( $keys[0] );
+		}
+	}
+
+	/**
+	 * Load metadata from the file itself
+	 */
+	function loadFromFile() {
+		global $wgUseSharedUploads, $wgSharedUploadDirectory, $wgContLang;
+		wfProfileIn( __METHOD__ );
+		$this->imagePath = $this->getFullPath();
+		$this->fileExists = file_exists( $this->imagePath );
+		$this->fromSharedDirectory = false;
+		$gis = array();
+
+		if (!$this->fileExists) wfDebug(__METHOD__.': '.$this->imagePath." not found locally!\n");
+
+		# If the file is not found, and a shared upload directory is used, look for it there.
+		if (!$this->fileExists && $wgUseSharedUploads && $wgSharedUploadDirectory) {
+			# In case we're on a wgCapitalLinks=false wiki, we
+			# capitalize the first letter of the filename before
+			# looking it up in the shared repository.
+			$sharedImage = Image::newFromName( $wgContLang->ucfirst($this->name) );
+			$this->fileExists = $sharedImage && file_exists( $sharedImage->getFullPath(true) );
+			if ( $this->fileExists ) {
+				$this->name = $sharedImage->name;
+				$this->imagePath = $this->getFullPath(true);
+				$this->fromSharedDirectory = true;
+			}
+		}
+
+
+		if ( $this->fileExists ) {
+			$magic=& MimeMagic::singleton();
+
+			$this->mime = $magic->guessMimeType($this->imagePath,true);
+			$this->type = $magic->getMediaType($this->imagePath,$this->mime);
+			$handler = MediaHandler::getHandler( $this->mime );
+
+			# Get size in bytes
+			$this->size = filesize( $this->imagePath );
+
+			# Height, width and metadata
+			if ( $handler ) {
+				$gis = $handler->getImageSize( $this, $this->imagePath );
+				$this->metadata = $handler->getMetadata( $this, $this->imagePath );
+			} else {
+				$gis = false;
+				$this->metadata = '';
+			}
+
+			wfDebug(__METHOD__.': '.$this->imagePath." loaded, ".$this->size." bytes, ".$this->mime.".\n");
+		}
+		else {
+			$this->mime = NULL;
+			$this->type = MEDIATYPE_UNKNOWN;
+			$this->metadata = '';
+			wfDebug(__METHOD__.': '.$this->imagePath." NOT FOUND!\n");
+		}
+
+		if( $gis ) {
+			$this->width = $gis[0];
+			$this->height = $gis[1];
+		} else {
+			$this->width = 0;
+			$this->height = 0;
+		}
+
+		#NOTE: $gis[2] contains a code for the image type. This is no longer used.
+
+		#NOTE: we have to set this flag early to avoid load() to be called
+		# be some of the functions below. This may lead to recursion or other bad things!
+		# as ther's only one thread of execution, this should be safe anyway.
+		$this->dataLoaded = true;
+
+		if ( isset( $gis['bits'] ) )  $this->bits = $gis['bits'];
+		else $this->bits = 0;
+
+		wfProfileOut( __METHOD__ );
+	}
+
+	/**
+	 * Load image metadata from the DB
+	 */
+	function loadFromDB() {
+		global $wgUseSharedUploads, $wgSharedUploadDBname, $wgSharedUploadDBprefix, $wgContLang;
+		wfProfileIn( __METHOD__ );
+
+		$dbr = wfGetDB( DB_SLAVE );
+		$this->checkDBSchema($dbr);
+
+		$row = $dbr->selectRow( 'image',
+			array( 'img_size', 'img_width', 'img_height', 'img_bits',
+			       'img_media_type', 'img_major_mime', 'img_minor_mime', 'img_metadata' ),
+			array( 'img_name' => $this->name ), __METHOD__ );
+		if ( $row ) {
+			$this->fromSharedDirectory = false;
+			$this->fileExists = true;
+			$this->loadFromRow( $row );
+			$this->imagePath = $this->getFullPath();
+			// Check for rows from a previous schema, quietly upgrade them
+			$this->maybeUpgradeRow();
+		} elseif ( $wgUseSharedUploads && $wgSharedUploadDBname ) {
+			# In case we're on a wgCapitalLinks=false wiki, we
+			# capitalize the first letter of the filename before
+			# looking it up in the shared repository.
+			$name = $wgContLang->ucfirst($this->name);
+			$dbc = Image::getCommonsDB();
+
+			$row = $dbc->selectRow( "`$wgSharedUploadDBname`.{$wgSharedUploadDBprefix}image",
+				array(
+					'img_size', 'img_width', 'img_height', 'img_bits',
+					'img_media_type', 'img_major_mime', 'img_minor_mime', 'img_metadata' ),
+				array( 'img_name' => $name ), __METHOD__ );
+			if ( $row ) {
+				$this->fromSharedDirectory = true;
+				$this->fileExists = true;
+				$this->imagePath = $this->getFullPath(true);
+				$this->name = $name;
+				$this->loadFromRow( $row );
+
+				// Check for rows from a previous schema, quietly upgrade them
+				$this->maybeUpgradeRow();
+			}
+		}
+
+		if ( !$row ) {
+			$this->size = 0;
+			$this->width = 0;
+			$this->height = 0;
+			$this->bits = 0;
+			$this->type = 0;
+			$this->fileExists = false;
+			$this->fromSharedDirectory = false;
+			$this->metadata = '';
+			$this->mime = false;
+		}
+
+		# Unconditionally set loaded=true, we don't want the accessors constantly rechecking
+		$this->dataLoaded = true;
+		wfProfileOut( __METHOD__ );
+	}
+
+	/*
+	 * Load image metadata from a DB result row
+	 */
+	function loadFromRow( &$row ) {
+		$this->size = $row->img_size;
+		$this->width = $row->img_width;
+		$this->height = $row->img_height;
+		$this->bits = $row->img_bits;
+		$this->type = $row->img_media_type;
+
+		$major= $row->img_major_mime;
+		$minor= $row->img_minor_mime;
+
+		if (!$major) $this->mime = "unknown/unknown";
+		else {
+			if (!$minor) $minor= "unknown";
+			$this->mime = $major.'/'.$minor;
+		}
+		$this->metadata = $row->img_metadata;
+
+		$this->dataLoaded = true;
+	}
+
+	/**
+	 * Load image metadata from cache or DB, unless already loaded
+	 */
+	function load() {
+		global $wgSharedUploadDBname, $wgUseSharedUploads;
+		if ( !$this->dataLoaded ) {
+			if ( !$this->loadFromCache() ) {
+				$this->loadFromDB();
+				if ( !$wgSharedUploadDBname && $wgUseSharedUploads ) {
+					$this->loadFromFile();
+				} elseif ( $this->fileExists || !$wgUseSharedUploads ) {
+					// We can do negative caching for local images, because the cache
+					// will be purged on upload. But we can't do it when shared images
+					// are enabled, since updates to that won't purge foreign caches.
+					$this->saveToCache();
+				} 
+			}
+			$this->dataLoaded = true;
+		}
+	}
+
+	/**
+	 * Upgrade a row if it needs it
+	 */
+	function maybeUpgradeRow() {
+		if ( is_null($this->type) || $this->mime == 'image/svg' ) {
+			$this->upgradeRow();
+		} else {
+			$handler = $this->getHandler();
+			if ( $handler && !$handler->isMetadataValid( $this, $this->metadata ) ) {
+				$this->upgradeRow();
+			}
+		}
+	}
+
+	/**
+	 * Fix assorted version-related problems with the image row by reloading it from the file
+	 */
+	function upgradeRow() {
+		global $wgDBname, $wgSharedUploadDBname;
+		wfProfileIn( __METHOD__ );
+
+		$this->loadFromFile();
+
+		if ( $this->fromSharedDirectory ) {
+			if ( !$wgSharedUploadDBname ) {
+				wfProfileOut( __METHOD__ );
+				return;
+			}
+
+			// Write to the other DB using selectDB, not database selectors
+			// This avoids breaking replication in MySQL
+			$dbw = Image::getCommonsDB();
+		} else {
+			$dbw = wfGetDB( DB_MASTER );
+		}
+
+		$this->checkDBSchema($dbw);
+
+		list( $major, $minor ) = self::splitMime( $this->mime );
+
+		wfDebug(__METHOD__.': upgrading '.$this->name." to the current schema\n");
+
+		$dbw->update( 'image',
+			array(
+				'img_width' => $this->width,
+				'img_height' => $this->height,
+				'img_bits' => $this->bits,
+				'img_media_type' => $this->type,
+				'img_major_mime' => $major,
+				'img_minor_mime' => $minor,
+				'img_metadata' => $this->metadata,
+			), array( 'img_name' => $this->name ), __METHOD__
+		);
+		if ( $this->fromSharedDirectory ) {
+			$dbw->selectDB( $wgDBname );
+		}
+		wfProfileOut( __METHOD__ );
+	}
+
+	/**
+	 * Split an internet media type into its two components; if not
+	 * a two-part name, set the minor type to 'unknown'.
+	 *
+	 * @param $mime "text/html" etc
+	 * @return array ("text", "html") etc
+	 */
+	static function splitMime( $mime ) {
+		if( strpos( $mime, '/' ) !== false ) {
+			return explode( '/', $mime, 2 );
+		} else {
+			return array( $mime, 'unknown' );
+		}
+	}
+
+	/**
+	 * Return the name of this image
+	 * @public
+	 */
+	function getName() {
+		return $this->name;
+	}
+
+	/**
+	 * Return the associated title object
+	 * @public
+	 */
+	function getTitle() {
+		return $this->title;
+	}
+
+	/**
+	 * Return the URL of the image file
+	 * @public
+	 */
+	function getURL() {
+		if ( !$this->url ) {
+			$this->load();
+			if($this->fileExists) {
+				$this->url = Image::imageUrl( $this->name, $this->fromSharedDirectory );
+			} else {
+				$this->url = '';
+			}
+		}
+		return $this->url;
+	}
+
+	function getViewURL() {
+		if( $this->mustRender()) {
+			if( $this->canRender() ) {
+				return $this->createThumb( $this->getWidth() );
+			}
+			else {
+				wfDebug('Image::getViewURL(): supposed to render '.$this->name.' ('.$this->mime."), but can't!\n");
+				return $this->getURL(); #hm... return NULL?
+			}
+		} else {
+			return $this->getURL();
+		}
+	}
+
+	/**
+	 * Return the image path of the image in the
+	 * local file system as an absolute path
+	 * @public
+	 */
+	function getImagePath() {
+		$this->load();
+		return $this->imagePath;
+	}
+
+	/**
+	 * Return the width of the image
+	 *
+	 * Returns false on error
+	 * @public
+	 */
+	function getWidth( $page = 1 ) {
+		$this->load();
+		if ( $this->isMultipage() ) {
+			$dim = $this->getHandler()->getPageDimensions( $this, $page );
+			if ( $dim ) {
+				return $dim['width'];
+			} else {
+				return false;
+			}
+		} else {
+			return $this->width;
+		}
+	}
+
+	/**
+	 * Return the height of the image
+	 *
+	 * Returns false on error
+	 * @public
+	 */
+	function getHeight( $page = 1 ) {
+		$this->load();
+		if ( $this->isMultipage() ) {
+			$dim = $this->getHandler()->getPageDimensions( $this, $page );
+			if ( $dim ) {
+				return $dim['height'];
+			} else {
+				return false;
+			}
+		} else {
+			return $this->height;
+		}
+	}
+
+	/**
+	 * Get handler-specific metadata
+	 */
+	function getMetadata() {
+		$this->load();
+		return $this->metadata;
+	}
+
+	/**
+	 * Return the size of the image file, in bytes
+	 * @public
+	 */
+	function getSize() {
+		$this->load();
+		return $this->size;
+	}
+
+	/**
+	 * Returns the mime type of the file.
+	 */
+	function getMimeType() {
+		$this->load();
+		return $this->mime;
+	}
+
+	/**
+	 * Return the type of the media in the file.
+	 * Use the value returned by this function with the MEDIATYPE_xxx constants.
+	 */
+	function getMediaType() {
+		$this->load();
+		return $this->type;
+	}
+
+	/**
+	 * Checks if the file can be presented to the browser as a bitmap.
+	 *
+	 * Currently, this checks if the file is an image format
+	 * that can be converted to a format
+	 * supported by all browsers (namely GIF, PNG and JPEG),
+	 * or if it is an SVG image and SVG conversion is enabled.
+	 *
+	 * @todo remember the result of this check.
+	 */
+	function canRender() {
+		$handler = $this->getHandler();
+		return $handler && $handler->canRender();
+	}
+
+	/**
+	 * Return true if the file is of a type that can't be directly
+	 * rendered by typical browsers and needs to be re-rasterized.
+	 *
+	 * This returns true for everything but the bitmap types
+	 * supported by all browsers, i.e. JPEG; GIF and PNG. It will
+	 * also return true for any non-image formats.
+	 *
+	 * @return bool
+	 */
+	function mustRender() {
+		$handler = $this->getHandler();
+		return $handler && $handler->mustRender();
+	}
+
+	/**
+	 * Determines if this media file may be shown inline on a page.
+	 *
+	 * This is currently synonymous to canRender(), but this could be
+	 * extended to also allow inline display of other media,
+	 * like flash animations or videos. If you do so, please keep in mind that
+	 * that could be a security risk.
+	 */
+	function allowInlineDisplay() {
+		return $this->canRender();
+	}
+
+	/**
+	 * Determines if this media file is in a format that is unlikely to
+	 * contain viruses or malicious content. It uses the global
+	 * $wgTrustedMediaFormats list to determine if the file is safe.
+	 *
+	 * This is used to show a warning on the description page of non-safe files.
+	 * It may also be used to disallow direct [[media:...]] links to such files.
+	 *
+	 * Note that this function will always return true if allowInlineDisplay()
+	 * or isTrustedFile() is true for this file.
+	 */
+	function isSafeFile() {
+		if ($this->allowInlineDisplay()) return true;
+		if ($this->isTrustedFile()) return true;
+
+		global $wgTrustedMediaFormats;
+
+		$type= $this->getMediaType();
+		$mime= $this->getMimeType();
+		#wfDebug("Image::isSafeFile: type= $type, mime= $mime\n");
+
+		if (!$type || $type===MEDIATYPE_UNKNOWN) return false; #unknown type, not trusted
+		if ( in_array( $type, $wgTrustedMediaFormats) ) return true;
+
+		if ($mime==="unknown/unknown") return false; #unknown type, not trusted
+		if ( in_array( $mime, $wgTrustedMediaFormats) ) return true;
+
+		return false;
+	}
+
+	/** Returns true if the file is flagged as trusted. Files flagged that way
+	* can be linked to directly, even if that is not allowed for this type of
+	* file normally.
+	*
+	* This is a dummy function right now and always returns false. It could be
+	* implemented to extract a flag from the database. The trusted flag could be
+	* set on upload, if the user has sufficient privileges, to bypass script-
+	* and html-filters. It may even be coupled with cryptographics signatures
+	* or such.
+	*/
+	function isTrustedFile() {
+		#this could be implemented to check a flag in the databas,
+		#look for signatures, etc
+		return false;
+	}
+
+	/**
+	 * Return the escapeLocalURL of this image
+	 * @public
+	 */
+	function getEscapeLocalURL( $query=false) {
+		return $this->getTitle()->escapeLocalURL( $query );
+	}
+
+	/**
+	 * Return the escapeFullURL of this image
+	 * @public
+	 */
+	function getEscapeFullURL() {
+		$this->getTitle();
+		return $this->title->escapeFullURL();
+	}
+
+	/**
+	 * Return the URL of an image, provided its name.
+	 *
+	 * @param string $name	Name of the image, without the leading "Image:"
+	 * @param boolean $fromSharedDirectory	Should this be in $wgSharedUploadPath?
+	 * @return string URL of $name image
+	 * @public
+	 * @static
+	 */
+	function imageUrl( $name, $fromSharedDirectory = false ) {
+		global $wgUploadPath,$wgUploadBaseUrl,$wgSharedUploadPath;
+		if($fromSharedDirectory) {
+			$base = '';
+			$path = $wgSharedUploadPath;
+		} else {
+			$base = $wgUploadBaseUrl;
+			$path = $wgUploadPath;
+		}
+		$url = "{$base}{$path}" .  wfGetHashPath($name, $fromSharedDirectory) . "{$name}";
+		return wfUrlencode( $url );
+	}
+
+	/**
+	 * Returns true if the image file exists on disk.
+	 * @return boolean Whether image file exist on disk.
+	 * @public
+	 */
+	function exists() {
+		$this->load();
+		return $this->fileExists;
+	}
+
+	/**
+	 * @todo document
+	 * @private
+	 */
+	function thumbUrlFromName( $thumbName, $subdir = 'thumb' ) {
+		global $wgUploadPath, $wgUploadBaseUrl, $wgSharedUploadPath;
+		if($this->fromSharedDirectory) {
+			$base = '';
+			$path = $wgSharedUploadPath;
+		} else {
+			$base = $wgUploadBaseUrl;
+			$path = $wgUploadPath;
+		}
+		if ( Image::isHashed( $this->fromSharedDirectory ) ) {
+			$hashdir = wfGetHashPath($this->name, $this->fromSharedDirectory) .
+			wfUrlencode( $this->name );
+		} else {
+			$hashdir = '';
+		}
+		$url = "{$base}{$path}/{$subdir}{$hashdir}/" . wfUrlencode( $thumbName );
+		return $url;
+	}
+
+	/**
+	 * @deprecated Use $image->transform()->getUrl() or thumbUrlFromName()
+	 */
+	function thumbUrl( $width, $subdir = 'thumb' ) {
+		$name = $this->thumbName( array( 'width' => $width ) );
+		if ( strval( $name ) !== '' ) {
+			return array( false, $this->thumbUrlFromName( $name, $subdir ) );
+		} else {
+			return array( false, false );
+		}
+	}
+
+	function getTransformScript() {
+		global $wgSharedThumbnailScriptPath, $wgThumbnailScriptPath;
+		if ( $this->fromSharedDirectory ) {
+			$script = $wgSharedThumbnailScriptPath;
+		} else {
+			$script = $wgThumbnailScriptPath;
+		}
+		if ( $script ) {
+			return "$script?f=" . urlencode( $this->name );
+		} else {
+			return false;
+		}
+	}
+
+	/**
+	 * Get a ThumbnailImage which is the same size as the source
+	 */
+	function getUnscaledThumb( $page = false ) {
+		if ( $page ) {
+			$params = array(
+				'page' => $page,
+				'width' => $this->getWidth( $page )
+			);
+		} else {
+			$params = array( 'width' => $this->getWidth() );
+		}
+		return $this->transform( $params );
+	}
+
+	/**
+	 * Return the file name of a thumbnail with the specified parameters
+	 *
+	 * @param array $params Handler-specific parameters
+	 * @private
+	 */
+	function thumbName( $params ) {
+		$handler = $this->getHandler();
+		if ( !$handler ) {
+			return null;
+		}
+		list( $thumbExt, $thumbMime ) = self::getThumbType( $this->extension, $this->mime );
+		$thumbName = $handler->makeParamString( $params ) . '-' . $this->name;
+		if ( $thumbExt != $this->extension ) {
+			$thumbName .= ".$thumbExt";
+		}
+		return $thumbName;
+	}
+
+	/**
+	 * Create a thumbnail of the image having the specified width/height.
+	 * The thumbnail will not be created if the width is larger than the
+	 * image's width. Let the browser do the scaling in this case.
+	 * The thumbnail is stored on disk and is only computed if the thumbnail
+	 * file does not exist OR if it is older than the image.
+	 * Returns the URL.
+	 *
+	 * Keeps aspect ratio of original image. If both width and height are
+	 * specified, the generated image will be no bigger than width x height,
+	 * and will also have correct aspect ratio.
+	 *
+	 * @param integer $width	maximum width of the generated thumbnail
+	 * @param integer $height	maximum height of the image (optional)
+	 * @public
+	 */
+	function createThumb( $width, $height = -1 ) {
+		$params = array( 'width' => $width );
+		if ( $height != -1 ) {
+			$params['height'] = $height;
+		}
+		$thumb = $this->transform( $params );
+		if( is_null( $thumb ) || $thumb->isError() ) return '';
+		return $thumb->getUrl();
+	}
+
+	/**
+	 * As createThumb, but returns a ThumbnailImage object. This can
+	 * provide access to the actual file, the real size of the thumb,
+	 * and can produce a convenient <img> tag for you.
+	 *
+	 * For non-image formats, this may return a filetype-specific icon.
+	 *
+	 * @param integer $width	maximum width of the generated thumbnail
+	 * @param integer $height	maximum height of the image (optional)
+	 * @param boolean $render	True to render the thumbnail if it doesn't exist,
+	 *                       	false to just return the URL
+	 *
+	 * @return ThumbnailImage or null on failure
+	 * @public
+	 *
+	 * @deprecated use transform()
+	 */
+	function getThumbnail( $width, $height=-1, $render = true ) {
+		$params = array( 'width' => $width );
+		if ( $height != -1 ) {
+			$params['height'] = $height;
+		}
+		$flags = $render ? self::RENDER_NOW : 0;
+		return $this->transform( $params, $flags );
+	}
+	
+	/**
+	 * Transform a media file
+	 *
+	 * @param array $params An associative array of handler-specific parameters. Typical 
+	 *                      keys are width, height and page.
+	 * @param integer $flags A bitfield, may contain self::RENDER_NOW to force rendering
+	 * @return MediaTransformOutput
+	 */
+	function transform( $params, $flags = 0 ) {
+		global $wgGenerateThumbnailOnParse, $wgUseSquid, $wgIgnoreImageErrors;
+
+		wfProfileIn( __METHOD__ );
+		do {
+			$handler = $this->getHandler();
+			if ( !$handler || !$handler->canRender() ) {
+				// not a bitmap or renderable image, don't try.
+				$thumb = $this->iconThumb();
+				break;
+			}
+
+			$script = $this->getTransformScript();
+			if ( $script && !($flags & self::RENDER_NOW) ) {
+				// Use a script to transform on client request
+				$thumb = $handler->getScriptedTransform( $this, $script, $params );
+				break;
+			}
+
+			$normalisedParams = $params;
+			$handler->normaliseParams( $this, $normalisedParams );
+			list( $thumbExt, $thumbMime ) = self::getThumbType( $this->extension, $this->mime );
+			$thumbName = $this->thumbName( $normalisedParams );	
+			$thumbPath = wfImageThumbDir( $this->name, $this->fromSharedDirectory ) .  "/$thumbName";
+			$thumbUrl = $this->thumbUrlFromName( $thumbName );
+
+
+			if ( !$wgGenerateThumbnailOnParse && !($flags & self::RENDER_NOW ) ) {
+				$thumb = $handler->getTransform( $this, $thumbPath, $thumbUrl, $params );
+				break;
+			}
+			
+			wfDebug( "Doing stat for $thumbPath\n" );
+			$this->migrateThumbFile( $thumbName );
+			if ( file_exists( $thumbPath ) ) {
+				$thumb = $handler->getTransform( $this, $thumbPath, $thumbUrl, $params );
+				break;
+			}
+
+			$thumb = $handler->doTransform( $this, $thumbPath, $thumbUrl, $params );
+
+			// Ignore errors if requested
+			if ( !$thumb ) {
+				$thumb = null;
+			} elseif ( $thumb->isError() ) {
+				$this->lastError = $thumb->toText();
+				if ( $wgIgnoreImageErrors && !($flags & self::RENDER_NOW) ) {
+					$thumb = $handler->getTransform( $this, $thumbPath, $thumbUrl, $params );
+				}
+			}
+			
+			if ( $wgUseSquid ) {
+				wfPurgeSquidServers( array( $thumbUrl ) );
+			}
+		} while (false);
+
+		wfProfileOut( __METHOD__ );
+		return $thumb;
+	}
+
+	/**
+	 * Fix thumbnail files from 1.4 or before, with extreme prejudice
+	 */
+	function migrateThumbFile( $thumbName ) {
+		$thumbDir = wfImageThumbDir( $this->name, $this->fromSharedDirectory );
+		$thumbPath = "$thumbDir/$thumbName";
+		if ( is_dir( $thumbPath ) ) {
+			// Directory where file should be
+			// This happened occasionally due to broken migration code in 1.5
+			// Rename to broken-*
+			global $wgUploadDirectory;
+			for ( $i = 0; $i < 100 ; $i++ ) {
+				$broken = "$wgUploadDirectory/broken-$i-$thumbName";
+				if ( !file_exists( $broken ) ) {
+					rename( $thumbPath, $broken );
+					break;
+				}
+			}
+			// Doesn't exist anymore
+			clearstatcache();
+		}
+		if ( is_file( $thumbDir ) ) {
+			// File where directory should be
+			unlink( $thumbDir );
+			// Doesn't exist anymore
+			clearstatcache();
+		}
+	}
+
+	/**
+	 * Get a MediaHandler instance for this image
+	 */
+	function getHandler() {
+		return MediaHandler::getHandler( $this->getMimeType() );
+	}
+
+	/**
+	 * Get a ThumbnailImage representing a file type icon
+	 * @return ThumbnailImage
+	 */
+	function iconThumb() {
+		global $wgStylePath, $wgStyleDirectory;
+
+		$try = array( 'fileicon-' . $this->extension . '.png', 'fileicon.png' );
+		foreach( $try as $icon ) {
+			$path = '/common/images/icons/' . $icon;
+			$filepath = $wgStyleDirectory . $path;
+			if( file_exists( $filepath ) ) {
+				return new ThumbnailImage( $wgStylePath . $path, 120, 120 );
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Get last thumbnailing error.
+	 * Largely obsolete.
+	 */
+	function getLastError() {
+		return $this->lastError;
+	}
+
+	/**
+	 * Get all thumbnail names previously generated for this image
+	 */
+	function getThumbnails( $shared = false ) {
+		if ( Image::isHashed( $shared ) ) {
+			$this->load();
+			$files = array();
+			$dir = wfImageThumbDir( $this->name, $shared );
+
+			if ( is_dir( $dir ) ) {
+				$handle = opendir( $dir );
+
+				if ( $handle ) {
+					while ( false !== ( $file = readdir($handle) ) ) {
+						if ( $file{0} != '.' ) {
+							$files[] = $file;
+						}
+					}
+					closedir( $handle );
+				}
+			}
+		} else {
+			$files = array();
+		}
+
+		return $files;
+	}
+
+	/**
+	 * Refresh metadata in memcached, but don't touch thumbnails or squid
+	 */
+	function purgeMetadataCache() {
+		clearstatcache();
+		$this->loadFromFile();
+		$this->saveToCache();
+	}
+
+	/**
+	 * Delete all previously generated thumbnails, refresh metadata in memcached and purge the squid
+	 */
+	function purgeCache( $archiveFiles = array(), $shared = false ) {
+		global $wgUseSquid;
+
+		// Refresh metadata cache
+		$this->purgeMetadataCache();
+
+		// Delete thumbnails
+		$files = $this->getThumbnails( $shared );
+		$dir = wfImageThumbDir( $this->name, $shared );
+		$urls = array();
+		foreach ( $files as $file ) {
+			$m = array();
+			# Check that the base image name is part of the thumb name
+			# This is a basic sanity check to avoid erasing unrelated directories
+			if ( strpos( $file, $this->name ) !== false ) {
+				$url = $this->thumbUrlFromName( $file );
+				$urls[] = $url;
+				@unlink( "$dir/$file" );
+			}
+		}
+
+		// Purge the squid
+		if ( $wgUseSquid ) {
+			$urls[] = $this->getURL();
+			foreach ( $archiveFiles as $file ) {
+				$urls[] = wfImageArchiveUrl( $file );
+			}
+			wfPurgeSquidServers( $urls );
+		}
+	}
+
+	/**
+	 * Purge the image description page, but don't go after
+	 * pages using the image. Use when modifying file history
+	 * but not the current data.
+	 */
+	function purgeDescription() {
+		$page = Title::makeTitle( NS_IMAGE, $this->name );
+		$page->invalidateCache();
+		$page->purgeSquid();
+	}
+
+	/**
+	 * Purge metadata and all affected pages when the image is created,
+	 * deleted, or majorly updated. A set of additional URLs may be
+	 * passed to purge, such as specific image files which have changed.
+	 * @param $urlArray array
+	 */
+	function purgeEverything( $urlArr=array() ) {
+		// Delete thumbnails and refresh image metadata cache
+		$this->purgeCache();
+		$this->purgeDescription();
+
+		// Purge cache of all pages using this image
+		$update = new HTMLCacheUpdate( $this->getTitle(), 'imagelinks' );
+		$update->doUpdate();
+	}
+
+	/**
+	 * Check the image table schema on the given connection for subtle problems
+	 */
+	function checkDBSchema(&$db) {
+		static $checkDone = false;
+		global $wgCheckDBSchema;
+		if (!$wgCheckDBSchema || $checkDone) {
+			return;
+		}
+		# img_name must be unique
+		if ( !$db->indexUnique( 'image', 'img_name' ) && !$db->indexExists('image','PRIMARY') ) {
+			throw new MWException( 'Database schema not up to date, please run maintenance/archives/patch-image_name_unique.sql' );
+		}
+		$checkDone = true;
+
+		# new fields must exist
+		# 
+		# Not really, there's hundreds of checks like this that we could do and they're all pointless, because 
+		# if the fields are missing, the database will loudly report a query error, the first time you try to do 
+		# something. The only reason I put the above schema check in was because the absence of that particular
+		# index would lead to an annoying subtle bug. No error message, just some very odd behaviour on duplicate
+		# uploads. -- TS
+		/*
+		if ( !$db->fieldExists( 'image', 'img_media_type' )
+		  || !$db->fieldExists( 'image', 'img_metadata' )
+		  || !$db->fieldExists( 'image', 'img_width' ) ) {
+
+			throw new MWException( 'Database schema not up to date, please run maintenance/update.php' );
+		 }
+		 */
+	}
+
+	/**
+	 * Return the image history of this image, line by line.
+	 * starts with current version, then old versions.
+	 * uses $this->historyLine to check which line to return:
+	 *  0      return line for current version
+	 *  1      query for old versions, return first one
+	 *  2, ... return next old version from above query
+	 *
+	 * @public
+	 */
+	function nextHistoryLine() {
+		$dbr = wfGetDB( DB_SLAVE );
+
+		$this->checkDBSchema($dbr);
+
+		if ( $this->historyLine == 0 ) {// called for the first time, return line from cur
+			$this->historyRes = $dbr->select( 'image',
+				array(
+					'img_size',
+					'img_description',
+					'img_user','img_user_text',
+					'img_timestamp',
+					'img_width',
+					'img_height',
+					"'' AS oi_archive_name"
+				),
+				array( 'img_name' => $this->title->getDBkey() ),
+				__METHOD__
+			);
+			if ( 0 == $dbr->numRows( $this->historyRes ) ) {
+				return FALSE;
+			}
+		} else if ( $this->historyLine == 1 ) {
+			$this->historyRes = $dbr->select( 'oldimage',
+				array(
+					'oi_size AS img_size',
+					'oi_description AS img_description',
+					'oi_user AS img_user',
+					'oi_user_text AS img_user_text',
+					'oi_timestamp AS img_timestamp',
+					'oi_width as img_width',
+					'oi_height as img_height',
+					'oi_archive_name'
+				),
+				array( 'oi_name' => $this->title->getDBkey() ),
+				__METHOD__,
+				array( 'ORDER BY' => 'oi_timestamp DESC' )
+			);
+		}
+		$this->historyLine ++;
+
+		return $dbr->fetchObject( $this->historyRes );
+	}
+
+	/**
+	 * Reset the history pointer to the first element of the history
+	 * @public
+	 */
+	function resetHistory() {
+		$this->historyLine = 0;
+	}
+
+	/**
+	* Return the full filesystem path to the file. Note that this does
+	* not mean that a file actually exists under that location.
+	*
+	* This path depends on whether directory hashing is active or not,
+	* i.e. whether the images are all found in the same directory,
+	* or in hashed paths like /images/3/3c.
+	*
+	* @public
+	* @param boolean $fromSharedDirectory Return the path to the file
+	*   in a shared repository (see $wgUseSharedRepository and related
+	*   options in DefaultSettings.php) instead of a local one.
+	*
+	*/
+	function getFullPath( $fromSharedRepository = false ) {
+		global $wgUploadDirectory, $wgSharedUploadDirectory;
+
+		$dir      = $fromSharedRepository ? $wgSharedUploadDirectory :
+		                                    $wgUploadDirectory;
+
+		// $wgSharedUploadDirectory may be false, if thumb.php is used
+		if ( $dir ) {
+			$fullpath = $dir . wfGetHashPath($this->name, $fromSharedRepository) . $this->name;
+		} else {
+			$fullpath = false;
+		}
+
+		return $fullpath;
+	}
+
+	/**
+	 * @return bool
+	 * @static
+	 */
+	public static function isHashed( $shared ) {
+		global $wgHashedUploadDirectory, $wgHashedSharedUploadDirectory;
+		return $shared ? $wgHashedSharedUploadDirectory : $wgHashedUploadDirectory;
+	}
+
+	/**
+	 * Record an image upload in the upload log and the image table
+	 */
+	function recordUpload( $oldver, $desc, $license = '', $copyStatus = '', $source = '', $watch = false ) {
+		global $wgUser, $wgUseCopyrightUpload;
+
+		$dbw = wfGetDB( DB_MASTER );
+
+		$this->checkDBSchema($dbw);
+
+		// Delete thumbnails and refresh the metadata cache
+		$this->purgeCache();
+
+		// Fail now if the image isn't there
+		if ( !$this->fileExists || $this->fromSharedDirectory ) {
+			wfDebug( "Image::recordUpload: File ".$this->imagePath." went missing!\n" );
+			return false;
+		}
+
+		if ( $wgUseCopyrightUpload ) {
+			if ( $license != '' ) {
+				$licensetxt = '== ' . wfMsgForContent( 'license' ) . " ==\n" . '{{' . $license . '}}' . "\n";
+			}
+			$textdesc = '== ' . wfMsg ( 'filedesc' ) . " ==\n" . $desc . "\n" .
+			  '== ' . wfMsgForContent ( 'filestatus' ) . " ==\n" . $copyStatus . "\n" .
+			  "$licensetxt" .
+			  '== ' . wfMsgForContent ( 'filesource' ) . " ==\n" . $source ;
+		} else {
+			if ( $license != '' ) {
+				$filedesc = $desc == '' ? '' : '== ' . wfMsg ( 'filedesc' ) . " ==\n" . $desc . "\n";
+				 $textdesc = $filedesc .
+					 '== ' . wfMsgForContent ( 'license' ) . " ==\n" . '{{' . $license . '}}' . "\n";
+			} else {
+				$textdesc = $desc;
+			}
+		}
+
+		$now = $dbw->timestamp();
+
+		#split mime type
+		if (strpos($this->mime,'/')!==false) {
+			list($major,$minor)= explode('/',$this->mime,2);
+		}
+		else {
+			$major= $this->mime;
+			$minor= "unknown";
+		}
+
+		# Test to see if the row exists using INSERT IGNORE
+		# This avoids race conditions by locking the row until the commit, and also
+		# doesn't deadlock. SELECT FOR UPDATE causes a deadlock for every race condition.
+		$dbw->insert( 'image',
+			array(
+				'img_name' => $this->name,
+				'img_size'=> $this->size,
+				'img_width' => intval( $this->width ),
+				'img_height' => intval( $this->height ),
+				'img_bits' => $this->bits,
+				'img_media_type' => $this->type,
+				'img_major_mime' => $major,
+				'img_minor_mime' => $minor,
+				'img_timestamp' => $now,
+				'img_description' => $desc,
+				'img_user' => $wgUser->getID(),
+				'img_user_text' => $wgUser->getName(),
+				'img_metadata' => $this->metadata,
+			),
+			__METHOD__,
+			'IGNORE'
+		);
+
+		if( $dbw->affectedRows() == 0 ) {
+			# Collision, this is an update of an image
+			# Insert previous contents into oldimage
+			$dbw->insertSelect( 'oldimage', 'image',
+				array(
+					'oi_name' => 'img_name',
+					'oi_archive_name' => $dbw->addQuotes( $oldver ),
+					'oi_size' => 'img_size',
+					'oi_width' => 'img_width',
+					'oi_height' => 'img_height',
+					'oi_bits' => 'img_bits',
+					'oi_timestamp' => 'img_timestamp',
+					'oi_description' => 'img_description',
+					'oi_user' => 'img_user',
+					'oi_user_text' => 'img_user_text',
+				), array( 'img_name' => $this->name ), __METHOD__
+			);
+
+			# Update the current image row
+			$dbw->update( 'image',
+				array( /* SET */
+					'img_size' => $this->size,
+					'img_width' => intval( $this->width ),
+					'img_height' => intval( $this->height ),
+					'img_bits' => $this->bits,
+					'img_media_type' => $this->type,
+					'img_major_mime' => $major,
+					'img_minor_mime' => $minor,
+					'img_timestamp' => $now,
+					'img_description' => $desc,
+					'img_user' => $wgUser->getID(),
+					'img_user_text' => $wgUser->getName(),
+					'img_metadata' => $this->metadata,
+				), array( /* WHERE */
+					'img_name' => $this->name
+				), __METHOD__
+			);
+		} else {
+			# This is a new image
+			# Update the image count
+			$site_stats = $dbw->tableName( 'site_stats' );
+			$dbw->query( "UPDATE $site_stats SET ss_images=ss_images+1", __METHOD__ );
+		}
+
+		$descTitle = $this->getTitle();
+		$article = new Article( $descTitle );
+		$minor = false;
+		$watch = $watch || $wgUser->isWatched( $descTitle );
+		$suppressRC = true; // There's already a log entry, so don't double the RC load
+
+		if( $descTitle->exists() ) {
+			// TODO: insert a null revision into the page history for this update.
+			if( $watch ) {
+				$wgUser->addWatch( $descTitle );
+			}
+
+			# Invalidate the cache for the description page
+			$descTitle->invalidateCache();
+			$descTitle->purgeSquid();
+		} else {
+			// New image; create the description page.
+			$article->insertNewArticle( $textdesc, $desc, $minor, $watch, $suppressRC );
+		}
+
+		# Hooks, hooks, the magic of hooks...
+		wfRunHooks( 'FileUpload', array( $this ) );
+
+		# Add the log entry
+		$log = new LogPage( 'upload' );
+		$log->addEntry( 'upload', $descTitle, $desc );
+
+		# Commit the transaction now, in case something goes wrong later
+		# The most important thing is that images don't get lost, especially archives
+		$dbw->immediateCommit();
+
+		# Invalidate cache for all pages using this image
+		$update = new HTMLCacheUpdate( $this->getTitle(), 'imagelinks' );
+		$update->doUpdate();
+
+		return true;
+	}
+
+	/**
+	 * Get an array of Title objects which are articles which use this image
+	 * Also adds their IDs to the link cache
+	 *
+	 * This is mostly copied from Title::getLinksTo()
+	 *
+	 * @deprecated Use HTMLCacheUpdate, this function uses too much memory
+	 */
+	function getLinksTo( $options = '' ) {
+		wfProfileIn( __METHOD__ );
+
+		if ( $options ) {
+			$db = wfGetDB( DB_MASTER );
+		} else {
+			$db = wfGetDB( DB_SLAVE );
+		}
+		$linkCache =& LinkCache::singleton();
+
+		list( $page, $imagelinks ) = $db->tableNamesN( 'page', 'imagelinks' );
+		$encName = $db->addQuotes( $this->name );
+		$sql = "SELECT page_namespace,page_title,page_id FROM $page,$imagelinks WHERE page_id=il_from AND il_to=$encName $options";
+		$res = $db->query( $sql, __METHOD__ );
+
+		$retVal = array();
+		if ( $db->numRows( $res ) ) {
+			while ( $row = $db->fetchObject( $res ) ) {
+				if ( $titleObj = Title::makeTitle( $row->page_namespace, $row->page_title ) ) {
+					$linkCache->addGoodLinkObj( $row->page_id, $titleObj );
+					$retVal[] = $titleObj;
+				}
+			}
+		}
+		$db->freeResult( $res );
+		wfProfileOut( __METHOD__ );
+		return $retVal;
+	}
+
+	function getExifData() {
+		global $wgRequest;
+		$handler = $this->getHandler();
+		if ( !$handler || $handler->getMetadataType( $this ) != 'exif' ) {
+			return array();
+		}
+		if ( !$this->metadata ) {
+			return array();
+		}
+		$exif = unserialize( $this->metadata );
+		if ( !$exif ) {
+			return array();
+		}
+		unset( $exif['MEDIAWIKI_EXIF_VERSION'] );
+		$format = new FormatExif( $exif );
+
+		return $format->getFormattedData();
+	}
+
+	/**
+	 * Returns true if the image does not come from the shared
+	 * image repository.
+	 *
+	 * @return bool
+	 */
+	function isLocal() {
+		return !$this->fromSharedDirectory;
+	}
+
+	/**
+	 * Was this image ever deleted from the wiki?
+	 *
+	 * @return bool
+	 */
+	function wasDeleted() {
+		$title = Title::makeTitle( NS_IMAGE, $this->name );
+		return ( $title->isDeleted() > 0 );
+	}
+
+	/**
+	 * Delete all versions of the image.
+	 *
+	 * Moves the files into an archive directory (or deletes them)
+	 * and removes the database rows.
+	 *
+	 * Cache purging is done; logging is caller's responsibility.
+	 *
+	 * @param $reason
+	 * @return true on success, false on some kind of failure
+	 */
+	function delete( $reason, $suppress=false ) {
+		$transaction = new FSTransaction();
+		$urlArr = array( $this->getURL() );
+
+		if( !FileStore::lock() ) {
+			wfDebug( __METHOD__.": failed to acquire file store lock, aborting\n" );
+			return false;
+		}
+
+		try {
+			$dbw = wfGetDB( DB_MASTER );
+			$dbw->begin();
+
+			// Delete old versions
+			$result = $dbw->select( 'oldimage',
+				array( 'oi_archive_name' ),
+				array( 'oi_name' => $this->name ) );
+
+			while( $row = $dbw->fetchObject( $result ) ) {
+				$oldName = $row->oi_archive_name;
+
+				$transaction->add( $this->prepareDeleteOld( $oldName, $reason, $suppress ) );
+
+				// We'll need to purge this URL from caches...
+				$urlArr[] = wfImageArchiveUrl( $oldName );
+			}
+			$dbw->freeResult( $result );
+
+			// And the current version...
+			$transaction->add( $this->prepareDeleteCurrent( $reason, $suppress ) );
+
+			$dbw->immediateCommit();
+		} catch( MWException $e ) {
+			wfDebug( __METHOD__.": db error, rolling back file transactions\n" );
+			$transaction->rollback();
+			FileStore::unlock();
+			throw $e;
+		}
+
+		wfDebug( __METHOD__.": deleted db items, applying file transactions\n" );
+		$transaction->commit();
+		FileStore::unlock();
+
+
+		// Update site_stats
+		$site_stats = $dbw->tableName( 'site_stats' );
+		$dbw->query( "UPDATE $site_stats SET ss_images=ss_images-1", __METHOD__ );
+
+		$this->purgeEverything( $urlArr );
+
+		return true;
+	}
+
+
+	/**
+	 * Delete an old version of the image.
+	 *
+	 * Moves the file into an archive directory (or deletes it)
+	 * and removes the database row.
+	 *
+	 * Cache purging is done; logging is caller's responsibility.
+	 *
+	 * @param $reason
+	 * @throws MWException or FSException on database or filestore failure
+	 * @return true on success, false on some kind of failure
+	 */
+	function deleteOld( $archiveName, $reason, $suppress=false ) {
+		$transaction = new FSTransaction();
+		$urlArr = array();
+
+		if( !FileStore::lock() ) {
+			wfDebug( __METHOD__.": failed to acquire file store lock, aborting\n" );
+			return false;
+		}
+
+		$transaction = new FSTransaction();
+		try {
+			$dbw = wfGetDB( DB_MASTER );
+			$dbw->begin();
+			$transaction->add( $this->prepareDeleteOld( $archiveName, $reason, $suppress ) );
+			$dbw->immediateCommit();
+		} catch( MWException $e ) {
+			wfDebug( __METHOD__.": db error, rolling back file transaction\n" );
+			$transaction->rollback();
+			FileStore::unlock();
+			throw $e;
+		}
+
+		wfDebug( __METHOD__.": deleted db items, applying file transaction\n" );
+		$transaction->commit();
+		FileStore::unlock();
+
+		$this->purgeDescription();
+
+		// Squid purging
+		global $wgUseSquid;
+		if ( $wgUseSquid ) {
+			$urlArr = array(
+				wfImageArchiveUrl( $archiveName ),
+			);
+			wfPurgeSquidServers( $urlArr );
+		}
+		return true;
+	}
+
+	/**
+	 * Delete the current version of a file.
+	 * May throw a database error.
+	 * @return true on success, false on failure
+	 */
+	private function prepareDeleteCurrent( $reason, $suppress=false ) {
+		return $this->prepareDeleteVersion(
+			$this->getFullPath(),
+			$reason,
+			'image',
+			array(
+				'fa_name'         => 'img_name',
+				'fa_archive_name' => 'NULL',
+				'fa_size'         => 'img_size',
+				'fa_width'        => 'img_width',
+				'fa_height'       => 'img_height',
+				'fa_metadata'     => 'img_metadata',
+				'fa_bits'         => 'img_bits',
+				'fa_media_type'   => 'img_media_type',
+				'fa_major_mime'   => 'img_major_mime',
+				'fa_minor_mime'   => 'img_minor_mime',
+				'fa_description'  => 'img_description',
+				'fa_user'         => 'img_user',
+				'fa_user_text'    => 'img_user_text',
+				'fa_timestamp'    => 'img_timestamp' ),
+			array( 'img_name' => $this->name ),
+			$suppress,
+			__METHOD__ );
+	}
+
+	/**
+	 * Delete a given older version of a file.
+	 * May throw a database error.
+	 * @return true on success, false on failure
+	 */
+	private function prepareDeleteOld( $archiveName, $reason, $suppress=false ) {
+		$oldpath = wfImageArchiveDir( $this->name ) .
+			DIRECTORY_SEPARATOR . $archiveName;
+		return $this->prepareDeleteVersion(
+			$oldpath,
+			$reason,
+			'oldimage',
+			array(
+				'fa_name'         => 'oi_name',
+				'fa_archive_name' => 'oi_archive_name',
+				'fa_size'         => 'oi_size',
+				'fa_width'        => 'oi_width',
+				'fa_height'       => 'oi_height',
+				'fa_metadata'     => 'NULL',
+				'fa_bits'         => 'oi_bits',
+				'fa_media_type'   => 'NULL',
+				'fa_major_mime'   => 'NULL',
+				'fa_minor_mime'   => 'NULL',
+				'fa_description'  => 'oi_description',
+				'fa_user'         => 'oi_user',
+				'fa_user_text'    => 'oi_user_text',
+				'fa_timestamp'    => 'oi_timestamp' ),
+			array(
+				'oi_name' => $this->name,
+				'oi_archive_name' => $archiveName ),
+			$suppress,
+			__METHOD__ );
+	}
+
+	/**
+	 * Do the dirty work of backing up an image row and its file
+	 * (if $wgSaveDeletedFiles is on) and removing the originals.
+	 *
+	 * Must be run while the file store is locked and a database
+	 * transaction is open to avoid race conditions.
+	 *
+	 * @return FSTransaction
+	 */
+	private function prepareDeleteVersion( $path, $reason, $table, $fieldMap, $where, $suppress=false, $fname ) {
+		global $wgUser, $wgSaveDeletedFiles;
+
+		// Dupe the file into the file store
+		if( file_exists( $path ) ) {
+			if( $wgSaveDeletedFiles ) {
+				$group = 'deleted';
+
+				$store = FileStore::get( $group );
+				$key = FileStore::calculateKey( $path, $this->extension );
+				$transaction = $store->insert( $key, $path,
+					FileStore::DELETE_ORIGINAL );
+			} else {
+				$group = null;
+				$key = null;
+				$transaction = FileStore::deleteFile( $path );
+			}
+		} else {
+			wfDebug( __METHOD__." deleting already-missing '$path'; moving on to database\n" );
+			$group = null;
+			$key = null;
+			$transaction = new FSTransaction(); // empty
+		}
+
+		if( $transaction === false ) {
+			// Fail to restore?
+			wfDebug( __METHOD__.": import to file store failed, aborting\n" );
+			throw new MWException( "Could not archive and delete file $path" );
+			return false;
+		}
+		
+		// Bitfields to further supress the image content
+		// Note that currently, live images are stored elsewhere
+		// and cannot be partially deleted
+		$bitfield = 0;
+		if ( $suppress ) {
+			$bitfield |= self::DELETED_FILE;
+			$bitfield |= self::DELETED_COMMENT;
+			$bitfield |= self::DELETED_USER;
+			$bitfield |= self::DELETED_RESTRICTED;
+		}
+
+		$dbw = wfGetDB( DB_MASTER );
+		$storageMap = array(
+			'fa_storage_group' => $dbw->addQuotes( $group ),
+			'fa_storage_key'   => $dbw->addQuotes( $key ),
+
+			'fa_deleted_user'      => $dbw->addQuotes( $wgUser->getId() ),
+			'fa_deleted_timestamp' => $dbw->timestamp(),
+			'fa_deleted_reason'    => $dbw->addQuotes( $reason ),
+			'fa_deleted'		   => $bitfield);
+		$allFields = array_merge( $storageMap, $fieldMap );
+
+		try {
+			if( $wgSaveDeletedFiles ) {
+				$dbw->insertSelect( 'filearchive', $table, $allFields, $where, $fname );
+			}
+			$dbw->delete( $table, $where, $fname );
+		} catch( DBQueryError $e ) {
+			// Something went horribly wrong!
+			// Leave the file as it was...
+			wfDebug( __METHOD__.": database error, rolling back file transaction\n" );
+			$transaction->rollback();
+			throw $e;
+		}
+
+		return $transaction;
+	}
+
+	/**
+	 * Restore all or specified deleted revisions to the given file.
+	 * Permissions and logging are left to the caller.
+	 *
+	 * May throw database exceptions on error.
+	 *
+	 * @param $versions set of record ids of deleted items to restore,
+	 *                    or empty to restore all revisions.
+	 * @return the number of file revisions restored if successful,
+	 *         or false on failure
+	 */
+	function restore( $versions=array(), $Unsuppress=false ) {
+		global $wgUser;
+	
+		if( !FileStore::lock() ) {
+			wfDebug( __METHOD__." could not acquire filestore lock\n" );
+			return false;
+		}
+
+		$transaction = new FSTransaction();
+		try {
+			$dbw = wfGetDB( DB_MASTER );
+			$dbw->begin();
+
+			// Re-confirm whether this image presently exists;
+			// if no we'll need to create an image record for the
+			// first item we restore.
+			$exists = $dbw->selectField( 'image', '1',
+				array( 'img_name' => $this->name ),
+				__METHOD__ );
+
+			// Fetch all or selected archived revisions for the file,
+			// sorted from the most recent to the oldest.
+			$conditions = array( 'fa_name' => $this->name );
+			if( $versions ) {
+				$conditions['fa_id'] = $versions;
+			}
+
+			$result = $dbw->select( 'filearchive', '*',
+				$conditions,
+				__METHOD__,
+				array( 'ORDER BY' => 'fa_timestamp DESC' ) );
+
+			if( $dbw->numRows( $result ) < count( $versions ) ) {
+				// There's some kind of conflict or confusion;
+				// we can't restore everything we were asked to.
+				wfDebug( __METHOD__.": couldn't find requested items\n" );
+				$dbw->rollback();
+				FileStore::unlock();
+				return false;
+			}
+
+			if( $dbw->numRows( $result ) == 0 ) {
+				// Nothing to do.
+				wfDebug( __METHOD__.": nothing to do\n" );
+				$dbw->rollback();
+				FileStore::unlock();
+				return true;
+			}
+
+			$revisions = 0;
+			while( $row = $dbw->fetchObject( $result ) ) {
+				if ( $Unsuppress ) {
+				// Currently, fa_deleted flags fall off upon restore, lets be careful about this
+				} else if ( ($row->fa_deleted & Revision::DELETED_RESTRICTED) && !$wgUser->isAllowed('hiderevision') ) {
+				// Skip restoring file revisions that the user cannot restore
+					continue;
+				}
+				$revisions++;
+				$store = FileStore::get( $row->fa_storage_group );
+				if( !$store ) {
+					wfDebug( __METHOD__.": skipping row with no file.\n" );
+					continue;
+				}
+
+				if( $revisions == 1 && !$exists ) {
+					$destDir = wfImageDir( $row->fa_name );
+					if ( !is_dir( $destDir ) ) {
+						wfMkdirParents( $destDir );
+					}
+					$destPath = $destDir . DIRECTORY_SEPARATOR . $row->fa_name;
+
+					// We may have to fill in data if this was originally
+					// an archived file revision.
+					if( is_null( $row->fa_metadata ) ) {
+						$tempFile = $store->filePath( $row->fa_storage_key );
+
+						$magic = MimeMagic::singleton();
+						$mime = $magic->guessMimeType( $tempFile, true );
+						$media_type = $magic->getMediaType( $tempFile, $mime );
+						list( $major_mime, $minor_mime ) = self::splitMime( $mime );
+						$handler = MediaHandler::getHandler( $mime );
+						if ( $handler ) {
+							$metadata = $handler->getMetadata( false, $tempFile );
+						} else {
+							$metadata = '';
+						}
+					} else {
+						$metadata   = $row->fa_metadata;
+						$major_mime = $row->fa_major_mime;
+						$minor_mime = $row->fa_minor_mime;
+						$media_type = $row->fa_media_type;
+					}
+
+					$table = 'image';
+					$fields = array(
+						'img_name'        => $row->fa_name,
+						'img_size'        => $row->fa_size,
+						'img_width'       => $row->fa_width,
+						'img_height'      => $row->fa_height,
+						'img_metadata'    => $metadata,
+						'img_bits'        => $row->fa_bits,
+						'img_media_type'  => $media_type,
+						'img_major_mime'  => $major_mime,
+						'img_minor_mime'  => $minor_mime,
+						'img_description' => $row->fa_description,
+						'img_user'        => $row->fa_user,
+						'img_user_text'   => $row->fa_user_text,
+						'img_timestamp'   => $row->fa_timestamp );
+				} else {
+					$archiveName = $row->fa_archive_name;
+					if( $archiveName == '' ) {
+						// This was originally a current version; we
+						// have to devise a new archive name for it.
+						// Format is <timestamp of archiving>!<name>
+						$archiveName =
+							wfTimestamp( TS_MW, $row->fa_deleted_timestamp ) .
+							'!' . $row->fa_name;
+					}
+					$destDir = wfImageArchiveDir( $row->fa_name );
+					if ( !is_dir( $destDir ) ) {
+						wfMkdirParents( $destDir );
+					}
+					$destPath = $destDir . DIRECTORY_SEPARATOR . $archiveName;
+
+					$table = 'oldimage';
+					$fields = array(
+						'oi_name'         => $row->fa_name,
+						'oi_archive_name' => $archiveName,
+						'oi_size'         => $row->fa_size,
+						'oi_width'        => $row->fa_width,
+						'oi_height'       => $row->fa_height,
+						'oi_bits'         => $row->fa_bits,
+						'oi_description'  => $row->fa_description,
+						'oi_user'         => $row->fa_user,
+						'oi_user_text'    => $row->fa_user_text,
+						'oi_timestamp'    => $row->fa_timestamp );
+				}
+
+				$dbw->insert( $table, $fields, __METHOD__ );
+				// @todo this delete is not totally safe, potentially
+				$dbw->delete( 'filearchive',
+					array( 'fa_id' => $row->fa_id ),
+					__METHOD__ );
+
+				// Check if any other stored revisions use this file;
+				// if so, we shouldn't remove the file from the deletion
+				// archives so they will still work.
+				$useCount = $dbw->selectField( 'filearchive',
+					'COUNT(*)',
+					array(
+						'fa_storage_group' => $row->fa_storage_group,
+						'fa_storage_key'   => $row->fa_storage_key ),
+					__METHOD__ );
+				if( $useCount == 0 ) {
+					wfDebug( __METHOD__.": nothing else using {$row->fa_storage_key}, will deleting after\n" );
+					$flags = FileStore::DELETE_ORIGINAL;
+				} else {
+					$flags = 0;
+				}
+
+				$transaction->add( $store->export( $row->fa_storage_key,
+					$destPath, $flags ) );
+			}
+
+			$dbw->immediateCommit();
+		} catch( MWException $e ) {
+			wfDebug( __METHOD__." caught error, aborting\n" );
+			$transaction->rollback();
+			throw $e;
+		}
+
+		$transaction->commit();
+		FileStore::unlock();
+
+		if( $revisions > 0 ) {
+			if( !$exists ) {
+				wfDebug( __METHOD__." restored $revisions items, creating a new current\n" );
+
+				// Update site_stats
+				$site_stats = $dbw->tableName( 'site_stats' );
+				$dbw->query( "UPDATE $site_stats SET ss_images=ss_images+1", __METHOD__ );
+
+				$this->purgeEverything();
+			} else {
+				wfDebug( __METHOD__." restored $revisions as archived versions\n" );
+				$this->purgeDescription();
+			}
+		}
+
+		return $revisions;
+	}
+
+	/**
+	 * Returns 'true' if this image is a multipage document, e.g. a DJVU
+	 * document.
+	 *
+	 * @return Bool
+	 */
+	function isMultipage() {
+		$handler = $this->getHandler();
+		return $handler && $handler->isMultiPage();
+	}
+
+	/**
+	 * Returns the number of pages of a multipage document, or NULL for
+	 * documents which aren't multipage documents
+	 */
+	function pageCount() {
+		$handler = $this->getHandler();
+		if ( $handler && $handler->isMultiPage() ) {
+			return $handler->pageCount( $this );
+		} else {
+			return null;
+		}
+	}
+
+	static function getCommonsDB() {
+		static $dbc;
+		global $wgLoadBalancer, $wgSharedUploadDBname;
+		if ( !isset( $dbc ) ) {
+			$i = $wgLoadBalancer->getGroupIndex( 'commons' );
+			$dbinfo = $wgLoadBalancer->mServers[$i];
+			$dbc = new Database( $dbinfo['host'], $dbinfo['user'], 
+				$dbinfo['password'], $wgSharedUploadDBname );
+		}
+		return $dbc;
+	}
+
+	/**
+	 * Calculate the height of a thumbnail using the source and destination width
+	 */
+	static function scaleHeight( $srcWidth, $srcHeight, $dstWidth ) {
+		// Exact integer multiply followed by division
+		if ( $srcWidth == 0 ) {
+			return 0;
+		} else {
+			return round( $srcHeight * $dstWidth / $srcWidth );
+		}
+	}
+
+	/**
+	 * Get an image size array like that returned by getimagesize(), or false if it 
+	 * can't be determined.
+	 *
+	 * @param string $fileName The filename
+	 * @return array
+	 */
+	function getImageSize( $fileName ) {
+		$handler = $this->getHandler();
+		return $handler->getImageSize( $this, $fileName );
+	}
+
+	/**
+	 * Get the thumbnail extension and MIME type for a given source MIME type
+	 * @return array thumbnail extension and MIME type
+	 */
+	static function getThumbType( $ext, $mime ) {
+		$handler = MediaHandler::getHandler( $mime );
+		if ( $handler ) {
+			return $handler->getThumbType( $ext, $mime );
+		} else {
+			return array( $ext, $mime );
+		}
+	}
+
+} //class
+
+
+/**
+ * @addtogroup Media
+ */
+class ArchivedFile
+{
+	/**
+	 * Returns a file object from the filearchive table
+	 * In the future, all current and old image storage
+	 * may use FileStore. There will be a "old" storage 
+	 * for current and previous file revisions as well as
+	 * the "deleted" group for archived revisions
+	 * @param $title, the corresponding image page title
+	 * @param $id, the image id, a unique key
+	 * @param $key, optional storage key
+	 * @return ResultWrapper
+	 */
+	function ArchivedFile( $title, $id=0, $key='' ) {
+		if( !is_object( $title ) ) {
+			throw new MWException( 'Image constructor given bogus title.' );
+		}
+		$conds = ($id) ? "fa_id = $id" : "fa_storage_key = '$key'";
+		if( $title->getNamespace() == NS_IMAGE ) {
+			$dbr = wfGetDB( DB_SLAVE );
+			$res = $dbr->select( 'filearchive',
+				array(
+					'fa_id',
+					'fa_name',
+					'fa_storage_key',
+					'fa_storage_group',
+					'fa_size',
+					'fa_bits',
+					'fa_width',
+					'fa_height',
+					'fa_metadata',
+					'fa_media_type',
+					'fa_major_mime',
+					'fa_minor_mime',
+					'fa_description',
+					'fa_user',
+					'fa_user_text',
+					'fa_timestamp',
+					'fa_deleted' ),
+				array( 
+					'fa_name' => $title->getDbKey(),
+					$conds ),
+				__METHOD__,
+				array( 'ORDER BY' => 'fa_timestamp DESC' ) );
+				
+			if ( $dbr->numRows( $res ) == 0 ) {
+			// this revision does not exist?
+				return;
+			}
+			$ret = $dbr->resultObject( $res );
+			$row = $ret->fetchObject();
+	
+			// initialize fields for filestore image object
+			$this->mId = intval($row->fa_id);
+			$this->mName = $row->fa_name;
+			$this->mGroup = $row->fa_storage_group;
+			$this->mKey = $row->fa_storage_key;
+			$this->mSize = $row->fa_size;
+			$this->mBits = $row->fa_bits;
+			$this->mWidth = $row->fa_width;
+			$this->mHeight = $row->fa_height;
+			$this->mMetaData = $row->fa_metadata;
+			$this->mMime = "$row->fa_major_mime/$row->fa_minor_mime";
+			$this->mType = $row->fa_media_type;
+			$this->mDescription = $row->fa_description;
+			$this->mUser = $row->fa_user;
+			$this->mUserText = $row->fa_user_text;
+			$this->mTimestamp = $row->fa_timestamp;
+			$this->mDeleted = $row->fa_deleted;		
+		} else {
+			throw new MWException( 'This title does not correspond to an image page.' );
+			return;
+		}
+		return true;
+	}
+
+	/**
+	 * int $field one of DELETED_* bitfield constants
+	 * for file or revision rows
+	 * @return bool
+	 */
+	function isDeleted( $field ) {
+		return ($this->mDeleted & $field) == $field;
+	}
+	
+	/**
+	 * Determine if the current user is allowed to view a particular
+	 * field of this FileStore image file, if it's marked as deleted.
+	 * @param int $field					
+	 * @return bool
+	 */
+	function userCan( $field ) {
+		if( isset($this->mDeleted) && ($this->mDeleted & $field) == $field ) {
+		// images
+			global $wgUser;
+			$permission = ( $this->mDeleted & Revision::DELETED_RESTRICTED ) == Revision::DELETED_RESTRICTED
+				? 'hiderevision'
+				: 'deleterevision';
+			wfDebug( "Checking for $permission due to $field match on $this->mDeleted\n" );
+			return $wgUser->isAllowed( $permission );
+		} else {
+			return true;
+		}
+	}
+}
+
+/**
+ * Aliases for backwards compatibility with 1.6
+ */
+define( 'MW_IMG_DELETED_FILE', Image::DELETED_FILE );
+define( 'MW_IMG_DELETED_COMMENT', Image::DELETED_COMMENT );
+define( 'MW_IMG_DELETED_USER', Image::DELETED_USER );
+define( 'MW_IMG_DELETED_RESTRICTED', Image::DELETED_RESTRICTED );
+
+?>
Index: /MediaWiki/branches/1.11/includes/ImageFunctions.php
===================================================================
--- /MediaWiki/branches/1.11/includes/ImageFunctions.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/ImageFunctions.php	(revision 1280)
@@ -0,0 +1,259 @@
+<?php
+
+/**
+ * Returns the image directory of an image
+ * The result is an absolute path.
+ *
+ * This function is called from thumb.php before Setup.php is included
+ *
+ * @param $fname String: file name of the image file.
+ * @public
+ */
+function wfImageDir( $fname ) {
+	global $wgUploadDirectory, $wgHashedUploadDirectory;
+
+	if (!$wgHashedUploadDirectory) { return $wgUploadDirectory; }
+
+	$hash = md5( $fname );
+	$dest = $wgUploadDirectory . '/' . $hash{0} . '/' . substr( $hash, 0, 2 );
+
+	return $dest;
+}
+
+/**
+ * Returns the image directory of an image's thumbnail
+ * The result is an absolute path.
+ *
+ * This function is called from thumb.php before Setup.php is included
+ *
+ * @param $fname String: file name of the original image file
+ * @param $shared Boolean: (optional) use the shared upload directory (default: 'false').
+ * @public
+ */
+function wfImageThumbDir( $fname, $shared = false ) {
+	$base = wfImageArchiveDir( $fname, 'thumb', $shared );
+	if ( Image::isHashed( $shared ) ) {
+		$dir =  "$base/$fname";
+	} else {
+		$dir = $base;
+	}
+
+	return $dir;
+}
+
+/**
+ * Old thumbnail directory, kept for conversion
+ */
+function wfDeprecatedThumbDir( $thumbName , $subdir='thumb', $shared=false) {
+	return wfImageArchiveDir( $thumbName, $subdir, $shared );
+}
+
+/**
+ * Returns the image directory of an image's old version
+ * The result is an absolute path.
+ *
+ * This function is called from thumb.php before Setup.php is included
+ *
+ * @param $fname String: file name of the thumbnail file, including file size prefix.
+ * @param $subdir String: subdirectory of the image upload directory that should be used for storing the old version. Default is 'archive'.
+ * @param $shared Boolean use the shared upload directory (only relevant for other functions which call this one). Default is 'false'.
+ * @public
+ */
+function wfImageArchiveDir( $fname , $subdir='archive', $shared=false ) {
+	global $wgUploadDirectory, $wgHashedUploadDirectory;
+	global $wgSharedUploadDirectory, $wgHashedSharedUploadDirectory;
+	$dir = $shared ? $wgSharedUploadDirectory : $wgUploadDirectory;
+	$hashdir = $shared ? $wgHashedSharedUploadDirectory : $wgHashedUploadDirectory;
+	if (!$hashdir) { return $dir.'/'.$subdir; }
+	$hash = md5( $fname );
+
+	return $dir.'/'.$subdir.'/'.$hash[0].'/'.substr( $hash, 0, 2 );
+}
+
+
+/*
+ * Return the hash path component of an image path (URL or filesystem),
+ * e.g. "/3/3c/", or just "/" if hashing is not used.
+ *
+ * @param $dbkey The filesystem / database name of the file
+ * @param $fromSharedDirectory Use the shared file repository? It may
+ *   use different hash settings from the local one.
+ */
+function wfGetHashPath ( $dbkey, $fromSharedDirectory = false ) {
+	if( Image::isHashed( $fromSharedDirectory ) ) {
+		$hash = md5($dbkey);
+		return '/' . $hash{0} . '/' . substr( $hash, 0, 2 ) . '/';
+	} else {
+		return '/';
+	}
+}
+
+/**
+ * Returns the image URL of an image's old version
+ *
+ * @param $name String: file name of the image file
+ * @param $subdir String: (optional) subdirectory of the image upload directory that is used by the old version. Default is 'archive'
+ * @public
+ */
+function wfImageArchiveUrl( $name, $subdir='archive' ) {
+	global $wgUploadPath, $wgHashedUploadDirectory;
+
+	if ($wgHashedUploadDirectory) {
+		$hash = md5( substr( $name, 15) );
+		$url = $wgUploadPath.'/'.$subdir.'/' . $hash{0} . '/' .
+		  substr( $hash, 0, 2 ) . '/'.$name;
+	} else {
+		$url = $wgUploadPath.'/'.$subdir.'/'.$name;
+	}
+	return wfUrlencode($url);
+}
+
+/**
+ * Return a rounded pixel equivalent for a labeled CSS/SVG length.
+ * http://www.w3.org/TR/SVG11/coords.html#UnitIdentifiers
+ *
+ * @param $length String: CSS/SVG length.
+ * @return Integer: length in pixels
+ */
+function wfScaleSVGUnit( $length ) {
+	static $unitLength = array(
+		'px' => 1.0,
+		'pt' => 1.25,
+		'pc' => 15.0,
+		'mm' => 3.543307,
+		'cm' => 35.43307,
+		'in' => 90.0,
+		''   => 1.0, // "User units" pixels by default
+		'%'  => 2.0, // Fake it!
+		);
+	$matches = array();
+	if( preg_match( '/^(\d+(?:\.\d+)?)(em|ex|px|pt|pc|cm|mm|in|%|)$/', $length, $matches ) ) {
+		$length = floatval( $matches[1] );
+		$unit = $matches[2];
+		return round( $length * $unitLength[$unit] );
+	} else {
+		// Assume pixels
+		return round( floatval( $length ) );
+	}
+}
+
+/**
+ * Compatible with PHP getimagesize()
+ * @todo support gzipped SVGZ
+ * @todo check XML more carefully
+ * @todo sensible defaults
+ *
+ * @param $filename String: full name of the file (passed to php fopen()).
+ * @return array
+ */
+function wfGetSVGsize( $filename ) {
+	$width = 256;
+	$height = 256;
+
+	// Read a chunk of the file
+	$f = fopen( $filename, "rt" );
+	if( !$f ) return false;
+	$chunk = fread( $f, 4096 );
+	fclose( $f );
+
+	// Uber-crappy hack! Run through a real XML parser.
+	$matches = array();
+	if( !preg_match( '/<svg\s*([^>]*)\s*>/s', $chunk, $matches ) ) {
+		return false;
+	}
+	$tag = $matches[1];
+	if( preg_match( '/\bwidth\s*=\s*("[^"]+"|\'[^\']+\')/s', $tag, $matches ) ) {
+		$width = wfScaleSVGUnit( trim( substr( $matches[1], 1, -1 ) ) );
+	}
+	if( preg_match( '/\bheight\s*=\s*("[^"]+"|\'[^\']+\')/s', $tag, $matches ) ) {
+		$height = wfScaleSVGUnit( trim( substr( $matches[1], 1, -1 ) ) );
+	}
+
+	return array( $width, $height, 'SVG',
+		"width=\"$width\" height=\"$height\"" );
+}
+
+/**
+ * Determine if an image exists on the 'bad image list'.
+ *
+ * The format of MediaWiki:Bad_image_list is as follows:
+ *    * Only list items (lines starting with "*") are considered
+ *    * The first link on a line must be a link to a bad image
+ *    * Any subsequent links on the same line are considered to be exceptions,
+ *      i.e. articles where the image may occur inline.
+ *
+ * @param string $name the image name to check
+ * @param Title $contextTitle The page on which the image occurs, if known
+ * @return bool
+ */
+function wfIsBadImage( $name, $contextTitle = false ) {
+	static $badImages = false;
+	wfProfileIn( __METHOD__ );
+
+	# Run the extension hook
+	$bad = false;
+	if( !wfRunHooks( 'BadImage', array( $name, &$bad ) ) ) {
+		wfProfileOut( __METHOD__ );
+		return $bad;
+	}
+
+	if( !$badImages ) {
+		# Build the list now
+		$badImages = array();
+		$lines = explode( "\n", wfMsgForContentNoTrans( 'bad_image_list' ) );
+		foreach( $lines as $line ) {
+			# List items only
+			if ( substr( $line, 0, 1 ) !== '*' ) {
+				continue;
+			}
+
+			# Find all links
+			$m = array();
+			if ( !preg_match_all( '/\[\[:?(.*?)\]\]/', $line, $m ) ) {
+				continue;
+			}
+
+			$exceptions = array();
+			$imageDBkey = false;
+			foreach ( $m[1] as $i => $titleText ) {
+				$title = Title::newFromText( $titleText );
+				if ( !is_null( $title ) ) {
+					if ( $i == 0 ) {
+						$imageDBkey = $title->getDBkey();
+					} else {
+						$exceptions[$title->getPrefixedDBkey()] = true;
+					}
+				}
+			}
+
+			if ( $imageDBkey !== false ) {
+				$badImages[$imageDBkey] = $exceptions;
+			}
+		}
+	}
+	
+	$contextKey = $contextTitle ? $contextTitle->getPrefixedDBkey() : false;
+	$bad = isset( $badImages[$name] ) && !isset( $badImages[$name][$contextKey] );
+	wfProfileOut( __METHOD__ );
+	return $bad;
+}
+
+/**
+ * Calculate the largest thumbnail width for a given original file size
+ * such that the thumbnail's height is at most $maxHeight.
+ * @param $boxWidth Integer Width of the thumbnail box.
+ * @param $boxHeight Integer Height of the thumbnail box.
+ * @param $maxHeight Integer Maximum height expected for the thumbnail.
+ * @return Integer.
+ */
+function wfFitBoxWidth( $boxWidth, $boxHeight, $maxHeight ) {
+	$idealWidth = $boxWidth * $maxHeight / $boxHeight;
+	$roundedUp = ceil( $idealWidth );
+	if( round( $roundedUp * $boxHeight / $boxWidth ) > $maxHeight )
+		return floor( $idealWidth );
+	else
+		return $roundedUp;
+}
+
+
+?>
Index: /MediaWiki/branches/1.11/includes/ImageGallery.php
===================================================================
--- /MediaWiki/branches/1.11/includes/ImageGallery.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/ImageGallery.php	(revision 1280)
@@ -0,0 +1,295 @@
+<?php
+if ( ! defined( 'MEDIAWIKI' ) )
+	die( 1 );
+
+/**
+ */
+
+/**
+ * Image gallery
+ *
+ * Add images to the gallery using add(), then render that list to HTML using toHTML().
+ *
+ * @addtogroup Media
+ */
+class ImageGallery
+{
+	var $mImages, $mShowBytes, $mShowFilename;
+	var $mCaption = false;
+	var $mSkin = false;
+
+	/**
+	 * Is the gallery on a wiki page (i.e. not a special page)
+	 */
+	var $mParsing;
+
+	/**
+	 * Contextual title, used when images are being screened
+	 * against the bad image list
+	 */
+	private $contextTitle = false;
+
+	private $mPerRow = 4; // How many images wide should the gallery be?
+	private $mWidths = 120, $mHeights = 120; // How wide/tall each thumbnail should be
+
+	/**
+	 * Create a new image gallery object.
+	 */
+	function __construct( ) {
+		$this->mImages = array();
+		$this->mShowBytes = true;
+		$this->mShowFilename = true;
+		$this->mParsing = false;
+	}
+
+	/**
+	 * Set the "parse" bit so we know to hide "bad" images
+	 */
+	function setParsing( $val = true ) {
+		$this->mParsing = $val;
+	}
+
+	/**
+	 * Set the caption (as plain text)
+	 *
+	 * @param $caption Caption
+	 */
+	function setCaption( $caption ) {
+		$this->mCaption = htmlspecialchars( $caption );
+	}
+
+	/**
+	 * Set the caption (as HTML)
+	 *
+	 * @param $caption Caption
+	 */
+	public function setCaptionHtml( $caption ) {
+		$this->mCaption = $caption;
+	}
+
+	/**
+	 * Set how many images will be displayed per row.
+	 *
+	 * @param int $num > 0; invalid numbers will be rejected
+	 */
+	public function setPerRow( $num ) {
+		if ($num > 0) {
+			$this->mPerRow = (int)$num;
+		}
+	}
+
+	/**
+	 * Set how wide each image will be, in pixels.
+	 *
+	 * @param int $num > 0; invalid numbers will be ignored
+	 */
+	public function setWidths( $num ) {
+		if ($num > 0) {
+			$this->mWidths = (int)$num;
+		}
+	}
+
+	/**
+	 * Set how high each image will be, in pixels.
+	 *
+	 * @param int $num > 0; invalid numbers will be ignored
+	 */
+	public function setHeights( $num ) {
+		if ($num > 0) {
+			$this->mHeights = (int)$num;
+		}
+	}
+
+	/**
+	 * Instruct the class to use a specific skin for rendering
+	 *
+	 * @param $skin Skin object
+	 */
+	function useSkin( $skin ) {
+		$this->mSkin = $skin;
+	}
+
+	/**
+	 * Return the skin that should be used
+	 *
+	 * @return Skin object
+	 */
+	function getSkin() {
+		if( !$this->mSkin ) {
+			global $wgUser;
+			$skin = $wgUser->getSkin();
+		} else {
+			$skin = $this->mSkin;
+		}
+		return $skin;
+	}
+
+	/**
+	 * Add an image to the gallery.
+	 *
+	 * @param $image Image object that is added to the gallery
+	 * @param $html  String: additional HTML text to be shown. The name and size of the image are always shown.
+	 */
+	function add( $image, $html='' ) {
+		$this->mImages[] = array( &$image, $html );
+		wfDebug( "ImageGallery::add " . $image->getName() . "\n" );
+	}
+
+	/**
+ 	* Add an image at the beginning of the gallery.
+ 	*
+ 	* @param $image Image object that is added to the gallery
+ 	* @param $html  String:  Additional HTML text to be shown. The name and size of the image are always shown.
+ 	*/
+	function insert( $image, $html='' ) {
+		array_unshift( $this->mImages, array( &$image, $html ) );
+	}
+
+
+	/**
+	 * isEmpty() returns true if the gallery contains no images
+	 */
+	function isEmpty() {
+		return empty( $this->mImages );
+	}
+
+	/**
+	 * Enable/Disable showing of the file size of an image in the gallery.
+	 * Enabled by default.
+	 *
+	 * @param $f Boolean: set to false to disable.
+	 */
+	function setShowBytes( $f ) {
+		$this->mShowBytes = ( $f == true);
+	}
+
+	/**
+	 * Enable/Disable showing of the filename of an image in the gallery.
+	 * Enabled by default.
+	 *
+	 * @param $f Boolean: set to false to disable.
+	 */
+	function setShowFilename( $f ) {
+		$this->mShowFilename = ( $f == true);
+	}
+
+	/**
+	 * Return a HTML representation of the image gallery
+	 *
+	 * For each image in the gallery, display
+	 * - a thumbnail
+	 * - the image name
+	 * - the additional text provided when adding the image
+	 * - the size of the image
+	 *
+	 */
+	function toHTML() {
+		global $wgLang;
+
+		$sk = $this->getSkin();
+
+		$s = '<table class="gallery" cellspacing="0" cellpadding="0">';
+		if( $this->mCaption )
+			$s .= "\n\t<caption>{$this->mCaption}</caption>";
+
+		$params = array( 'width' => $this->mWidths, 'height' => $this->mHeights );
+		$i = 0;
+		foreach ( $this->mImages as $pair ) {
+			$img =& $pair[0];
+			$text = $pair[1];
+
+			$nt = $img->getTitle();
+
+			if( $nt->getNamespace() != NS_IMAGE ) {
+				# We're dealing with a non-image, spit out the name and be done with it.
+				$thumbhtml = "\n\t\t\t".'<div style="height: '.($this->mHeights*1.25+2).'px;">'
+					. htmlspecialchars( $nt->getText() ) . '</div>';
+ 			} elseif( $this->mParsing && wfIsBadImage( $nt->getDBkey(), $this->getContextTitle() ) ) {
+				# The image is blacklisted, just show it as a text link.
+				$thumbhtml = "\n\t\t\t".'<div style="height: '.($this->mHeights*1.25+2).'px;">'
+					. $sk->makeKnownLinkObj( $nt, htmlspecialchars( $nt->getText() ) ) . '</div>';
+			} elseif( !( $thumb = $img->transform( $params ) ) ) {
+				# Error generating thumbnail.
+				$thumbhtml = "\n\t\t\t".'<div style="height: '.($this->mHeights*1.25+2).'px;">'
+					. htmlspecialchars( $img->getLastError() ) . '</div>';
+			} else {
+				$vpad = floor( ( 1.25*$this->mHeights - $thumb->height ) /2 ) - 2;
+				$thumbhtml = "\n\t\t\t".'<div class="thumb" style="padding: ' . $vpad . 'px 0; width: '.($this->mWidths+30).'px;">'
+					. $sk->makeKnownLinkObj( $nt, $thumb->toHtml() ) . '</div>';
+			}
+
+			//TODO
+			//$ul = $sk->makeLink( $wgContLang->getNsText( Namespace::getUser() ) . ":{$ut}", $ut );
+
+			if( $this->mShowBytes ) {
+				if( $img->exists() ) {
+					$nb = wfMsgExt( 'nbytes', array( 'parsemag', 'escape'),
+						$wgLang->formatNum( $img->getSize() ) );
+				} else {
+					$nb = wfMsgHtml( 'filemissing' );
+				}
+				$nb = "$nb<br />\n";
+			} else {
+				$nb = '';
+			}
+
+			$textlink = $this->mShowFilename ?
+				$sk->makeKnownLinkObj( $nt, htmlspecialchars( $wgLang->truncate( $nt->getText(), 20, '...' ) ) ) . "<br />\n" :
+				'' ;
+
+			# ATTENTION: The newline after <div class="gallerytext"> is needed to accommodate htmltidy which
+			# in version 4.8.6 generated crackpot html in its absence, see:
+			# http://bugzilla.wikimedia.org/show_bug.cgi?id=1765 -Ævar
+
+			if ( $i % $this->mPerRow == 0 ) {
+				$s .= "\n\t<tr>";
+			}
+			$s .=
+				"\n\t\t" . '<td><div class="gallerybox" style="width: '.($this->mWidths*1.25).'px;">'
+					. $thumbhtml
+					. "\n\t\t\t" . '<div class="gallerytext">' . "\n"
+						. $textlink . $text . $nb
+					. "\n\t\t\t</div>"
+				. "\n\t\t</div></td>";
+			if ( $i % $this->mPerRow == $this->mPerRow - 1 ) {
+				$s .= "\n\t</tr>";
+			}
+			++$i;
+		}
+		if( $i % $this->mPerRow != 0 ) {
+			$s .= "\n\t</tr>";
+		}
+		$s .= "\n</table>";
+
+		return $s;
+	}
+
+	/**
+	 * @return int Number of images in the gallery
+	 */
+	public function count() {
+		return count( $this->mImages );
+	}
+	
+	/**
+	 * Set the contextual title
+	 *
+	 * @param Title $title Contextual title
+	 */
+	public function setContextTitle( $title ) {
+		$this->contextTitle = $title;
+	}
+	
+	/**
+	 * Get the contextual title, if applicable
+	 *
+	 * @return mixed Title or false
+	 */
+	public function getContextTitle() {
+		return is_object( $this->contextTitle ) && $this->contextTitle instanceof Title
+				? $this->contextTitle
+				: false;
+	}
+
+} //class
+?>
Index: /MediaWiki/branches/1.11/includes/ImagePage.php
===================================================================
--- /MediaWiki/branches/1.11/includes/ImagePage.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/ImagePage.php	(revision 1280)
@@ -0,0 +1,790 @@
+<?php
+/**
+ */
+
+/**
+ *
+ */
+if( !defined( 'MEDIAWIKI' ) )
+	die( 1 );
+
+/**
+ * Special handling for image description pages
+ *
+ * @addtogroup Media
+ */
+class ImagePage extends Article {
+
+	/* private */ var $img;  // Image object this page is shown for
+	var $mExtraDescription = false;
+
+	/**
+	 * Handler for action=render
+	 * Include body text only; none of the image extras
+	 */
+	function render() {
+		global $wgOut;
+		$wgOut->setArticleBodyOnly( true );
+		$wgOut->addSecondaryWikitext( $this->getContent() );
+	}
+
+	function view() {
+		global $wgOut, $wgShowEXIF, $wgRequest, $wgUser;
+
+		$this->img = new Image( $this->mTitle );
+
+		$diff = $wgRequest->getVal( 'diff' );
+		$diffOnly = $wgRequest->getBool( 'diffonly', $wgUser->getOption( 'diffonly' ) );
+
+		if ( $this->mTitle->getNamespace() != NS_IMAGE || ( isset( $diff ) && $diffOnly ) )
+			return Article::view();
+
+		if ($wgShowEXIF && $this->img->exists()) {
+			$exif = $this->img->getExifData();
+			$showmeta = count($exif) ? true : false;
+		} else {
+			$exif = false;
+			$showmeta = false;
+		}
+
+		if ($this->img->exists())
+			$wgOut->addHTML($this->showTOC($showmeta));
+
+		$this->openShowImage();
+
+		# No need to display noarticletext, we use our own message, output in openShowImage()
+		if ( $this->getID() ) {
+			Article::view();
+		} else {
+			# Just need to set the right headers
+			$wgOut->setArticleFlag( true );
+			$wgOut->setRobotpolicy( 'index,follow' );
+			$wgOut->setPageTitle( $this->mTitle->getPrefixedText() );
+			$this->viewUpdates();
+		}
+
+		# Show shared description, if needed
+		if ( $this->mExtraDescription ) {
+			$fol = wfMsg( 'shareddescriptionfollows' );
+			if( $fol != '-' && !wfEmptyMsg( 'shareddescriptionfollows', $fol ) ) {
+				$wgOut->addWikiText( $fol );
+			}
+			$wgOut->addHTML( '<div id="shared-image-desc">' . $this->mExtraDescription . '</div>' );
+		}
+
+		$this->closeShowImage();
+		$this->imageHistory();
+		$this->imageLinks();
+
+		if ( $exif ) {
+			global $wgStylePath, $wgStyleVersion;
+			$expand = htmlspecialchars( wfEscapeJsString( wfMsg( 'metadata-expand' ) ) );
+			$collapse = htmlspecialchars( wfEscapeJsString( wfMsg( 'metadata-collapse' ) ) );
+			$wgOut->addHTML( Xml::element( 'h2', array( 'id' => 'metadata' ), wfMsg( 'metadata' ) ). "\n" );
+			$wgOut->addWikiText( $this->makeMetadataTable( $exif ) );
+			$wgOut->addHTML(
+				"<script type=\"text/javascript\" src=\"$wgStylePath/common/metadata.js?$wgStyleVersion\"></script>\n" .
+				"<script type=\"text/javascript\">attachMetadataToggle('mw_metadata', '$expand', '$collapse');</script>\n" );
+		}
+	}
+
+	/**
+	 * Create the TOC
+	 *
+	 * @access private
+	 *
+	 * @param bool $metadata Whether or not to show the metadata link
+	 * @return string
+	 */
+	function showTOC( $metadata ) {
+		global $wgLang;
+		$r = '<ul id="filetoc">
+			<li><a href="#file">' . $wgLang->getNsText( NS_IMAGE ) . '</a></li>
+			<li><a href="#filehistory">' . wfMsgHtml( 'imghistory' ) . '</a></li>
+			<li><a href="#filelinks">' . wfMsgHtml( 'imagelinks' ) . '</a></li>' .
+			($metadata ? '<li><a href="#metadata">' . wfMsgHtml( 'metadata' ) . '</a></li>' : '') . '
+		</ul>';
+		return $r;
+	}
+
+	/**
+	 * Make a table with metadata to be shown in the output page.
+	 *
+	 * @access private
+	 *
+	 * @param array $exif The array containing the EXIF data
+	 * @return string
+	 */
+	function makeMetadataTable( $exif ) {
+		$r = wfMsg( 'metadata-help' ) . "\n\n";
+		$r .= "{| id=mw_metadata class=mw_metadata\n";
+		$visibleFields = $this->visibleMetadataFields();
+		foreach( $exif as $k => $v ) {
+			$tag = strtolower( $k );
+			$msg = wfMsg( "exif-$tag" );
+			$class = "exif-$tag";
+			if( !in_array( $tag, $visibleFields ) ) {
+				$class .= ' collapsable';
+			}
+			$r .= "|- class=\"$class\"\n";
+			$r .= "!| $msg\n";
+			$r .= "|| $v\n";
+		}
+		$r .= '|}';
+		return $r;
+	}
+
+	/**
+	 * Get a list of EXIF metadata items which should be displayed when
+	 * the metadata table is collapsed.
+	 *
+	 * @return array of strings
+	 * @access private
+	 */
+	function visibleMetadataFields() {
+		$fields = array();
+		$lines = explode( "\n", wfMsgForContent( 'metadata-fields' ) );
+		foreach( $lines as $line ) {
+			$matches = array();
+			if( preg_match( '/^\\*\s*(.*?)\s*$/', $line, $matches ) ) {
+				$fields[] = $matches[1];
+			}
+		}
+		return $fields;
+	}
+
+	/**
+	 * Overloading Article's getContent method.
+	 * 
+	 * Omit noarticletext if sharedupload; text will be fetched from the
+	 * shared upload server if possible.
+	 */
+	function getContent() {
+		if( $this->img && $this->img->fromSharedDirectory && 0 == $this->getID() ) {
+			return '';
+		}
+		return Article::getContent();
+	}
+
+	function openShowImage() {
+		global $wgOut, $wgUser, $wgImageLimits, $wgRequest, $wgLang;
+
+		$full_url  = $this->img->getURL();
+		$linkAttribs = false;
+		$sizeSel = intval( $wgUser->getOption( 'imagesize') );
+		if( !isset( $wgImageLimits[$sizeSel] ) ) {
+			$sizeSel = User::getDefaultOption( 'imagesize' );
+
+			// The user offset might still be incorrect, specially if
+			// $wgImageLimits got changed (see bug #8858).
+			if( !isset( $wgImageLimits[$sizeSel] ) ) {
+				// Default to the first offset in $wgImageLimits
+				$sizeSel = 0;
+			}
+		}
+		$max = $wgImageLimits[$sizeSel];
+		$maxWidth = $max[0];
+		$maxHeight = $max[1];
+		$sk = $wgUser->getSkin();
+
+		if ( $this->img->exists() ) {
+			# image
+			$page = $wgRequest->getIntOrNull( 'page' );
+			if ( is_null( $page ) ) {
+				$params = array();
+				$page = 1;
+			} else {
+				$params = array( 'page' => $page );
+			}
+			$width_orig = $this->img->getWidth();
+			$width = $width_orig;
+			$height_orig = $this->img->getHeight();
+			$height = $height_orig;
+			$mime = $this->img->getMimeType();
+			$showLink = false;
+			$linkAttribs = array( 'href' => $full_url );
+
+			if ( $this->img->allowInlineDisplay() and $width and $height) {
+				# image
+
+				# "Download high res version" link below the image
+				$msgsize = wfMsgHtml('file-info-size', $width_orig, $height_orig, $sk->formatSize( $this->img->getSize() ), $mime );
+				# We'll show a thumbnail of this image
+				if ( $width > $maxWidth || $height > $maxHeight ) {
+					# Calculate the thumbnail size.
+					# First case, the limiting factor is the width, not the height.
+					if ( $width / $height >= $maxWidth / $maxHeight ) {
+						$height = round( $height * $maxWidth / $width);
+						$width = $maxWidth;
+						# Note that $height <= $maxHeight now.
+					} else {
+						$newwidth = floor( $width * $maxHeight / $height);
+						$height = round( $height * $newwidth / $width );
+						$width = $newwidth;
+						# Note that $height <= $maxHeight now, but might not be identical
+						# because of rounding.
+					}
+					$msgbig  = wfMsgHtml( 'show-big-image' );
+					$msgsmall = wfMsgExt( 'show-big-image-thumb',
+						array( 'parseinline' ), $width, $height );
+				} else {
+					# Image is small enough to show full size on image page
+					$msgbig = htmlspecialchars( $this->img->getName() );
+					$msgsmall = wfMsgExt( 'file-nohires', array( 'parseinline' ) );
+				}
+
+				$params['width'] = $width;
+				$thumbnail = $this->img->transform( $params );
+
+				$anchorclose = "<br />";
+				if( $this->img->mustRender() ) {
+					$showLink = true;
+				} else {
+					$anchorclose .= 
+						$msgsmall .
+						'<br />' . Xml::tags( 'a', $linkAttribs,  $msgbig ) . ' ' . $msgsize;
+				}
+
+				if ( $this->img->isMultipage() ) {
+					$wgOut->addHTML( '<table class="multipageimage"><tr><td>' );
+				}
+
+				$imgAttribs = array(
+					'border' => 0,
+					'alt' => $this->img->getTitle()->getPrefixedText()
+				);
+
+				if ( $thumbnail ) {
+					$wgOut->addHTML( '<div class="fullImageLink" id="file">' . 
+						$thumbnail->toHtml( $imgAttribs, $linkAttribs ) .
+						$anchorclose . '</div>' );
+				}
+
+				if ( $this->img->isMultipage() ) {
+					$count = $this->img->pageCount();
+
+					if ( $page > 1 ) {
+						$label = $wgOut->parse( wfMsg( 'imgmultipageprev' ), false );
+						$link = $sk->makeLinkObj( $this->mTitle, $label, 'page='. ($page-1) );
+						$thumb1 = $sk->makeThumbLinkObj( $this->img, $link, $label, 'none', 
+							array( 'page' => $page - 1 ) );
+					} else {
+						$thumb1 = '';
+					}
+
+					if ( $page < $count ) {
+						$label = wfMsg( 'imgmultipagenext' );
+						$link = $sk->makeLinkObj( $this->mTitle, $label, 'page='. ($page+1) );
+						$thumb2 = $sk->makeThumbLinkObj( $this->img, $link, $label, 'none', 
+							array( 'page' => $page + 1 ) );
+					} else {
+						$thumb2 = '';
+					}
+
+					global $wgScript;
+					$select = '<form name="pageselector" action="' . 
+						htmlspecialchars( $wgScript ) .
+						'" method="get" onchange="document.pageselector.submit();">' .
+						Xml::hidden( 'title', $this->getTitle()->getPrefixedDbKey() );
+					$select .= $wgOut->parse( wfMsg( 'imgmultigotopre' ), false ) .
+						' <select id="pageselector" name="page">';
+					for ( $i=1; $i <= $count; $i++ ) {
+						$select .= Xml::option( $wgLang->formatNum( $i ), $i,
+							$i == $page );
+					}
+					$select .= '</select>' . $wgOut->parse( wfMsg( 'imgmultigotopost' ), false ) .
+						'<input type="submit" value="' .
+						htmlspecialchars( wfMsg( 'imgmultigo' ) ) . '"></form>';
+
+					$wgOut->addHTML( '</td><td><div class="multipageimagenavbox">' .
+						"$select<hr />$thumb1\n$thumb2<br clear=\"all\" /></div></td></tr></table>" );
+				}
+			} else {
+				#if direct link is allowed but it's not a renderable image, show an icon.
+				if ($this->img->isSafeFile()) {
+					$icon= $this->img->iconThumb();
+
+					$wgOut->addHTML( '<div class="fullImageLink" id="file"><a href="' . $full_url . '">' .
+					$icon->toHtml() .
+					'</a></div>' );
+				}
+
+				$showLink = true;
+			}
+
+
+			if ($showLink) {
+				// Workaround for incorrect MIME type on SVGs uploaded in previous versions
+				if ($mime == 'image/svg') $mime = 'image/svg+xml';
+
+				$filename = wfEscapeWikiText( $this->img->getName() );
+				$info = wfMsg( 'file-info', $sk->formatSize( $this->img->getSize() ), $mime );
+				$infores = '';
+
+				// Check for MIME type. Other types may have more information in the future.
+				if (substr($mime,0,9) == 'image/svg' ) {
+					$infores = wfMsg('file-svg', $width_orig, $height_orig ) . '<br />';
+				}
+
+				global $wgContLang;
+				$dirmark = $wgContLang->getDirMark();
+				if (!$this->img->isSafeFile()) {
+					$warning = wfMsg( 'mediawarning' );
+					$wgOut->addWikiText( <<<END
+<div class="fullMedia">$infores
+<span class="dangerousLink">[[Media:$filename|$filename]]</span>$dirmark
+<span class="fileInfo"> $info</span>
+</div>
+
+<div class="mediaWarning">$warning</div>
+END
+						);
+				} else {
+					$wgOut->addWikiText( <<<END
+<div class="fullMedia">$infores
+[[Media:$filename|$filename]]$dirmark <span class="fileInfo"> $info</span>
+</div>
+END
+						);
+				}
+			}
+
+			if($this->img->fromSharedDirectory) {
+				$this->printSharedImageText();
+			}
+		} else {
+			# Image does not exist
+
+			$title = SpecialPage::getTitleFor( 'Upload' );
+			$link = $sk->makeKnownLinkObj($title, wfMsgHtml('noimage-linktext'),
+				'wpDestFile=' . urlencode( $this->img->getName() ) );
+			$wgOut->addHTML( wfMsgWikiHtml( 'noimage', $link ) );
+		}
+	}
+
+	function printSharedImageText() {
+		global $wgRepositoryBaseUrl, $wgFetchCommonsDescriptions, $wgOut, $wgUser;
+
+		$url = $wgRepositoryBaseUrl . urlencode($this->mTitle->getDBkey());
+		$sharedtext = "<div class='sharedUploadNotice'>" . wfMsgWikiHtml("sharedupload");
+		if ($wgRepositoryBaseUrl && !$wgFetchCommonsDescriptions) {
+
+			$sk = $wgUser->getSkin();
+			$title = SpecialPage::getTitleFor( 'Upload' );
+			$link = $sk->makeKnownLinkObj($title, wfMsgHtml('shareduploadwiki-linktext'),
+			array( 'wpDestFile' => urlencode( $this->img->getName() )));
+			$sharedtext .= " " . wfMsgWikiHtml('shareduploadwiki', $link);
+		}
+		$sharedtext .= "</div>";
+		$wgOut->addHTML($sharedtext);
+
+		if ($wgRepositoryBaseUrl && $wgFetchCommonsDescriptions) {
+			$renderUrl = wfAppendQuery( $url, 'action=render' );
+			wfDebug( "Fetching shared description from $renderUrl\n" );
+			$text = Http::get( $renderUrl );
+			if ($text)
+				$this->mExtraDescription = $text;
+		}
+	}
+
+	function getUploadUrl() {
+		global $wgServer;
+		$uploadTitle = SpecialPage::getTitleFor( 'Upload' );
+		return $wgServer . $uploadTitle->getLocalUrl( 'wpDestFile=' . urlencode( $this->img->getName() ) );
+	}
+
+	/**
+	 * Print out the various links at the bottom of the image page, e.g. reupload,
+	 * external editing (and instructions link) etc.
+	 */
+	function uploadLinksBox() {
+		global $wgUser, $wgOut;
+
+		if( $this->img->fromSharedDirectory )
+			return;
+
+		$sk = $wgUser->getSkin();
+		
+		$wgOut->addHtml( '<br /><ul>' );
+		
+		# "Upload a new version of this file" link
+		if( $wgUser->isAllowed( 'reupload' ) ) {
+			$ulink = $sk->makeExternalLink( $this->getUploadUrl(), wfMsg( 'uploadnewversion-linktext' ) );
+			$wgOut->addHtml( "<li><div class='plainlinks'>{$ulink}</div></li>" );
+		}
+		
+		# External editing link
+		$elink = $sk->makeKnownLinkObj( $this->mTitle, wfMsgHtml( 'edit-externally' ), 'action=edit&externaledit=true&mode=file' );
+		$wgOut->addHtml( '<li>' . $elink . '<div>' . wfMsgWikiHtml( 'edit-externally-help' ) . '</div></li>' );
+		
+		$wgOut->addHtml( '</ul>' );
+	}
+
+	function closeShowImage()
+	{
+		# For overloading
+
+	}
+
+	/**
+	 * If the page we've just displayed is in the "Image" namespace,
+	 * we follow it with an upload history of the image and its usage.
+	 */
+	function imageHistory()
+	{
+		global $wgUser, $wgOut, $wgUseExternalEditor;
+
+		$sk = $wgUser->getSkin();
+
+		$line = $this->img->nextHistoryLine();
+
+		if ( $line ) {
+			$list = new ImageHistoryList( $sk );
+			$s = $list->beginImageHistoryList() .
+				$list->imageHistoryLine( true, wfTimestamp(TS_MW, $line->img_timestamp),
+					$this->mTitle->getDBkey(),  $line->img_user,
+					$line->img_user_text, $line->img_size, $line->img_description,
+					$line->img_width, $line->img_height
+				);
+
+			while ( $line = $this->img->nextHistoryLine() ) {
+				$s .= $list->imageHistoryLine( false, $line->img_timestamp,
+			  		$line->oi_archive_name, $line->img_user,
+			  		$line->img_user_text, $line->img_size, $line->img_description,
+					$line->img_width, $line->img_height
+				);
+			}
+			$s .= $list->endImageHistoryList();
+		} else { $s=''; }
+		$wgOut->addHTML( $s );
+
+		# Exist check because we don't want to show this on pages where an image
+		# doesn't exist along with the noimage message, that would suck. -ævar
+		if( $wgUseExternalEditor && $this->img->exists() ) {
+			$this->uploadLinksBox();
+		}
+
+	}
+
+	function imageLinks()
+	{
+		global $wgUser, $wgOut;
+
+		$wgOut->addHTML( Xml::element( 'h2', array( 'id' => 'filelinks' ), wfMsg( 'imagelinks' ) ) . "\n" );
+
+		$dbr = wfGetDB( DB_SLAVE );
+		$page = $dbr->tableName( 'page' );
+		$imagelinks = $dbr->tableName( 'imagelinks' );
+
+		$sql = "SELECT page_namespace,page_title FROM $imagelinks,$page WHERE il_to=" .
+		  $dbr->addQuotes( $this->mTitle->getDBkey() ) . " AND il_from=page_id";
+		$sql = $dbr->limitResult($sql, 500, 0);
+		$res = $dbr->query( $sql, "ImagePage::imageLinks" );
+
+		if ( 0 == $dbr->numRows( $res ) ) {
+			$wgOut->addHtml( '<p>' . wfMsg( "nolinkstoimage" ) . "</p>\n" );
+			return;
+		}
+		$wgOut->addHTML( '<p>' . wfMsg( 'linkstoimage' ) .  "</p>\n<ul>" );
+
+		$sk = $wgUser->getSkin();
+		while ( $s = $dbr->fetchObject( $res ) ) {
+			$name = Title::MakeTitle( $s->page_namespace, $s->page_title );
+			$link = $sk->makeKnownLinkObj( $name, "" );
+			$wgOut->addHTML( "<li>{$link}</li>\n" );
+		}
+		$wgOut->addHTML( "</ul>\n" );
+	}
+
+	function delete()
+	{
+		global $wgUser, $wgOut, $wgRequest;
+
+		$confirm = $wgRequest->wasPosted();
+		$reason = $wgRequest->getVal( 'wpReason' );
+		$image = $wgRequest->getVal( 'image' );
+		$oldimage = $wgRequest->getVal( 'oldimage' );
+
+		# Only sysops can delete images. Previously ordinary users could delete
+		# old revisions, but this is no longer the case.
+		if ( !$wgUser->isAllowed('delete') ) {
+			$wgOut->permissionRequired( 'delete' );
+			return;
+		}
+		if ( $wgUser->isBlocked() ) {
+			return $this->blockedIPpage();
+		}
+		if ( wfReadOnly() ) {
+			$wgOut->readOnlyPage();
+			return;
+		}
+
+		# Better double-check that it hasn't been deleted yet!
+		$wgOut->setPagetitle( wfMsg( 'confirmdelete' ) );
+		if ( ( !is_null( $image ) )
+		  && ( '' == trim( $image ) ) ) {
+			$wgOut->showFatalError( wfMsg( 'cannotdelete' ) );
+			return;
+		}
+
+		$this->img  = new Image( $this->mTitle );
+
+		# Deleting old images doesn't require confirmation
+		if ( !is_null( $oldimage ) || $confirm ) {
+			if( $wgUser->matchEditToken( $wgRequest->getVal( 'wpEditToken' ), $oldimage ) ) {
+				$this->doDelete( $reason );
+			} else {
+				$wgOut->showFatalError( wfMsg( 'sessionfailure' ) );
+			}
+			return;
+		}
+
+		if ( !is_null( $image ) ) {
+			$q = '&image=' . urlencode( $image );
+		} else if ( !is_null( $oldimage ) ) {
+			$q = '&oldimage=' . urlencode( $oldimage );
+		} else {
+			$q = '';
+		}
+		return $this->confirmDelete( $q, $wgRequest->getText( 'wpReason' ) );
+	}
+
+	/*
+	 * Delete an image.
+	 * @param $reason User provided reason for deletion.
+	 */
+	function doDelete( $reason ) {
+		global $wgOut, $wgRequest;
+
+		$oldimage = $wgRequest->getVal( 'oldimage' );
+
+		if ( !is_null( $oldimage ) ) {
+			if ( strlen( $oldimage ) < 16 ) {
+				$wgOut->showUnexpectedValueError( 'oldimage', htmlspecialchars($oldimage) );
+				return;
+			}
+			if ( strstr( $oldimage, "/" ) || strstr( $oldimage, "\\" ) ) {
+				$wgOut->showUnexpectedValueError( 'oldimage', htmlspecialchars($oldimage) );
+				return;
+			}
+			if ( !$this->doDeleteOldImage( $oldimage ) ) {
+				return;
+			}
+			$deleted = $oldimage;
+		} else {
+			$ok = $this->img->delete( $reason );
+			if( !$ok ) {
+				# If the deletion operation actually failed, bug out:
+				$wgOut->showFileDeleteError( $this->img->getName() );
+				return;
+			}
+			
+			# Image itself is now gone, and database is cleaned.
+			# Now we remove the image description page.
+	
+			$article = new Article( $this->mTitle );
+			$article->doDeleteArticle( $reason ); # ignore errors
+
+			$deleted = $this->img->getName();
+		}
+
+		$wgOut->setPagetitle( wfMsg( 'actioncomplete' ) );
+		$wgOut->setRobotpolicy( 'noindex,nofollow' );
+
+		$loglink = '[[Special:Log/delete|' . wfMsg( 'deletionlog' ) . ']]';
+		$text = wfMsg( 'deletedtext', $deleted, $loglink );
+
+		$wgOut->addWikiText( $text );
+
+		$wgOut->returnToMain( false, $this->mTitle->getPrefixedText() );
+	}
+
+	/**
+	 * @return success
+	 */
+	function doDeleteOldImage( $oldimage )
+	{
+		global $wgOut;
+
+		$ok = $this->img->deleteOld( $oldimage, '' );
+		if( !$ok ) {
+			# If we actually have a file and can't delete it, throw an error.
+			# Something went awry...
+			$wgOut->showFileDeleteError( "$oldimage" );
+		} else {
+			# Log the deletion
+			$log = new LogPage( 'delete' );
+			$log->addEntry( 'delete', $this->mTitle, wfMsg('deletedrevision',$oldimage) );
+		}
+		return $ok;
+	}
+
+	function revert() {
+		global $wgOut, $wgRequest, $wgUser;
+
+		$oldimage = $wgRequest->getText( 'oldimage' );
+		if ( strlen( $oldimage ) < 16 ) {
+			$wgOut->showUnexpectedValueError( 'oldimage', htmlspecialchars($oldimage) );
+			return;
+		}
+		if ( strstr( $oldimage, "/" ) || strstr( $oldimage, "\\" ) ) {
+			$wgOut->showUnexpectedValueError( 'oldimage', htmlspecialchars($oldimage) );
+			return;
+		}
+
+		if ( wfReadOnly() ) {
+			$wgOut->readOnlyPage();
+			return;
+		}
+		if( $wgUser->isAnon() ) {
+			$wgOut->showErrorPage( 'uploadnologin', 'uploadnologintext' );
+			return;
+		}
+		if ( ! $this->mTitle->userCan( 'edit' ) ) {
+			$wgOut->readOnlyPage( $this->getContent(), true );
+			return;
+		}
+		if ( $wgUser->isBlocked() ) {
+			return $this->blockedIPpage();
+		}
+		if( !$wgUser->matchEditToken( $wgRequest->getVal( 'wpEditToken' ), $oldimage ) ) {
+			$wgOut->showErrorPage( 'internalerror', 'sessionfailure' );
+			return;
+		}
+		$name = substr( $oldimage, 15 );
+
+		$dest = wfImageDir( $name );
+		$archive = wfImageArchiveDir( $name );
+		$curfile = "{$dest}/{$name}";
+
+		if ( !is_dir( $dest ) ) wfMkdirParents( $dest );
+		if ( !is_dir( $archive ) ) wfMkdirParents( $archive );
+
+		if ( ! is_file( $curfile ) ) {
+			$wgOut->showFileNotFoundError( htmlspecialchars( $curfile ) );
+			return;
+		}
+		$oldver = wfTimestampNow() . "!{$name}";
+
+		if ( ! rename( $curfile, "${archive}/{$oldver}" ) ) {
+			$wgOut->showFileRenameError( $curfile, "${archive}/{$oldver}" );
+			return;
+		}
+		if ( ! copy( "{$archive}/{$oldimage}", $curfile ) ) {
+			$wgOut->showFileCopyError( "${archive}/{$oldimage}", $curfile );
+			return;
+		}
+
+		# Record upload and update metadata cache
+		$img = Image::newFromName( $name );
+		$img->recordUpload( $oldver, wfMsg( "reverted" ) );
+
+		$wgOut->setPagetitle( wfMsg( 'actioncomplete' ) );
+		$wgOut->setRobotpolicy( 'noindex,nofollow' );
+		$wgOut->addHTML( wfMsg( 'imagereverted' ) );
+
+		$descTitle = $img->getTitle();
+		$wgOut->returnToMain( false, $descTitle->getPrefixedText() );
+	}
+
+	function blockedIPpage() {
+		$edit = new EditPage( $this );
+		return $edit->blockedIPpage();
+	}
+	
+	/**
+	 * Override handling of action=purge
+	 */
+	function doPurge() {
+		$this->img = new Image( $this->mTitle );
+		if( $this->img->exists() ) {
+			wfDebug( "ImagePage::doPurge purging " . $this->img->getName() . "\n" );
+			$update = new HTMLCacheUpdate( $this->mTitle, 'imagelinks' );
+			$update->doUpdate();
+			$this->img->upgradeRow();
+			$this->img->purgeCache();
+		} else {
+			wfDebug( "ImagePage::doPurge no image\n" );
+		}
+		parent::doPurge();
+	}
+
+}
+
+/**
+ * @todo document
+ * @addtogroup Media
+ */
+class ImageHistoryList {
+	function ImageHistoryList( &$skin ) {
+		$this->skin =& $skin;
+	}
+
+	function beginImageHistoryList() {
+		$s = "\n" .
+			Xml::element( 'h2', array( 'id' => 'filehistory' ), wfMsg( 'imghistory' ) ) .
+			"\n<p>" . wfMsg( 'imghistlegend' ) . "</p>\n".'<ul class="special">';
+		return $s;
+	}
+
+	function endImageHistoryList() {
+		$s = "</ul>\n";
+		return $s;
+	}
+
+	function imageHistoryLine( $iscur, $timestamp, $img, $user, $usertext, $size, $description, $width, $height ) {
+		global $wgUser, $wgLang, $wgTitle, $wgContLang;
+
+		$datetime = $wgLang->timeanddate( $timestamp, true );
+		$del = wfMsgHtml( 'deleteimg' );
+		$delall = wfMsgHtml( 'deleteimgcompletely' );
+		$cur = wfMsgHtml( 'cur' );
+
+		if ( $iscur ) {
+			$url = Image::imageUrl( $img );
+			$rlink = $cur;
+			if ( $wgUser->isAllowed('delete') ) {
+				$link = $wgTitle->escapeLocalURL( 'image=' . $wgTitle->getPartialURL() .
+				  '&action=delete' );
+				$style = $this->skin->getInternalLinkAttributes( $link, $delall );
+
+				$dlink = '<a href="'.$link.'"'.$style.'>'.$delall.'</a>';
+			} else {
+				$dlink = $del;
+			}
+		} else {
+			$url = htmlspecialchars( wfImageArchiveUrl( $img ) );
+			if( $wgUser->getID() != 0 && $wgTitle->userCan( 'edit' ) ) {
+				$token = urlencode( $wgUser->editToken( $img ) );
+				$rlink = $this->skin->makeKnownLinkObj( $wgTitle,
+				           wfMsgHtml( 'revertimg' ), 'action=revert&oldimage=' .
+				           urlencode( $img ) . "&wpEditToken=$token" );
+				$dlink = $this->skin->makeKnownLinkObj( $wgTitle,
+				           $del, 'action=delete&oldimage=' . urlencode( $img ) .
+				           "&wpEditToken=$token" );
+			} else {
+				# Having live active links for non-logged in users
+				# means that bots and spiders crawling our site can
+				# inadvertently change content. Baaaad idea.
+				$rlink = wfMsgHtml( 'revertimg' );
+				$dlink = $del;
+			}
+		}
+		
+		$userlink = $this->skin->userLink( $user, $usertext ) . $this->skin->userToolLinks( $user, $usertext );
+		$nbytes = wfMsgExt( 'nbytes', array( 'parsemag', 'escape' ),
+			$wgLang->formatNum( $size ) );
+		$widthheight = wfMsgHtml( 'widthheight', $width, $height );
+		$style = $this->skin->getInternalLinkAttributes( $url, $datetime );
+
+		$s = "<li> ({$dlink}) ({$rlink}) <a href=\"{$url}\"{$style}>{$datetime}</a> . . {$userlink} . . {$widthheight} ({$nbytes})";
+
+		$s .= $this->skin->commentBlock( $description, $wgTitle );
+		$s .= "</li>\n";
+		return $s;
+	}
+
+}
+
+
+?>
Index: /MediaWiki/branches/1.11/includes/ImageQueryPage.php
===================================================================
--- /MediaWiki/branches/1.11/includes/ImageQueryPage.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/ImageQueryPage.php	(revision 1280)
@@ -0,0 +1,68 @@
+<?php
+
+/**
+ * Variant of QueryPage which uses a gallery to output results, thus
+ * suited for reports generating images
+ *
+ * @package MediaWiki
+ * @addtogroup SpecialPage
+ * @author Rob Church <robchur@gmail.com>
+ */
+class ImageQueryPage extends QueryPage {
+
+	/**
+	 * Format and output report results using the given information plus
+	 * OutputPage
+	 *
+	 * @param OutputPage $out OutputPage to print to
+	 * @param Skin $skin User skin to use
+	 * @param Database $dbr Database (read) connection to use
+	 * @param int $res Result pointer
+	 * @param int $num Number of available result rows
+	 * @param int $offset Paging offset
+	 */
+	protected function outputResults( $out, $skin, $dbr, $res, $num, $offset ) {
+		if( $num > 0 ) {
+			$gallery = new ImageGallery();
+			$gallery->useSkin( $skin );
+
+			# $res might contain the whole 1,000 rows, so we read up to
+			# $num [should update this to use a Pager]
+			for( $i = 0; $i < $num && $row = $dbr->fetchObject( $res ); $i++ ) {
+				$image = $this->prepareImage( $row );
+				if( $image instanceof Image ) {
+					$gallery->add( $image, $this->getCellHtml( $row ) );
+				}
+			}
+
+			$out->addHtml( $gallery->toHtml() );
+		}
+	}
+
+	/**
+	 * Prepare an image object given a result row
+	 *
+	 * @param object $row Result row
+	 * @return Image
+	 */
+	private function prepareImage( $row ) {
+		$namespace = isset( $row->namespace ) ? $row->namespace : NS_IMAGE;
+		$title = Title::makeTitleSafe( $namespace, $row->title );
+		return ( $title instanceof Title && $title->getNamespace() == NS_IMAGE )
+			? new Image( $title )
+			: null;
+	}
+
+	/**
+	 * Get additional HTML to be shown in a results' cell
+	 *
+	 * @param object $row Result row
+	 * @return string
+	 */
+	protected function getCellHtml( $row ) {
+		return '';
+	}
+
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/JobQueue.php
===================================================================
--- /MediaWiki/branches/1.11/includes/JobQueue.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/JobQueue.php	(revision 1280)
@@ -0,0 +1,294 @@
+<?php
+
+if ( !defined( 'MEDIAWIKI' ) ) {
+	die( "This file is part of MediaWiki, it is not a valid entry point\n" );
+}
+
+/**
+ * Class to both describe a background job and handle jobs.
+ */
+abstract class Job {
+	var $command,
+		$title,
+		$params,
+		$id,
+		$removeDuplicates,
+		$error;
+
+	/*-------------------------------------------------------------------------
+	 * Abstract functions
+	 *------------------------------------------------------------------------*/
+
+	/**
+	 * Run the job
+	 * @return boolean success
+	 */
+	abstract function run();
+
+	/*-------------------------------------------------------------------------
+	 * Static functions
+	 *------------------------------------------------------------------------*/
+
+	/**
+	 * @deprecated use LinksUpdate::queueRecursiveJobs()
+	 */
+	/**
+	 * static function queueLinksJobs( $titles ) {}
+	 */
+
+	/**
+	 * Pop a job off the front of the queue
+	 * @static
+	 * @param $offset Number of jobs to skip
+	 * @return Job or false if there's no jobs
+	 */
+	static function pop($offset=0) {
+		wfProfileIn( __METHOD__ );
+
+		$dbr = wfGetDB( DB_SLAVE );
+
+		/* Get a job from the slave, start with an offset, 
+			scan full set afterwards, avoid hitting purged rows
+
+			NB: If random fetch previously was used, offset 
+				will always be ahead of few entries 
+		*/
+
+		$row = $dbr->selectRow( 'job', '*', "job_id >= ${offset}", __METHOD__,
+			array( 'ORDER BY' => 'job_id', 'LIMIT' => 1 ));
+
+		// Refetching without offset is needed as some of job IDs could have had delayed commits
+		// and have lower IDs than jobs already executed, blame concurrency :)
+		//
+		if ( $row === false) {
+			if ($offset!=0)
+				$row = $dbr->selectRow( 'job', '*', '', __METHOD__,
+					array( 'ORDER BY' => 'job_id', 'LIMIT' => 1 ));
+
+			if ($row === false ) {
+				wfProfileOut( __METHOD__ );
+				return false;
+			}
+		}
+		$offset = $row->job_id;
+
+		// Try to delete it from the master
+		$dbw = wfGetDB( DB_MASTER );
+		$dbw->delete( 'job', array( 'job_id' => $row->job_id ), __METHOD__ );
+		$affected = $dbw->affectedRows();
+		$dbw->immediateCommit();
+
+		if ( !$affected ) {
+			// Failed, someone else beat us to it
+			// Try getting a random row
+			$row = $dbw->selectRow( 'job', array( 'MIN(job_id) as minjob',
+				'MAX(job_id) as maxjob' ), "job_id >= $offset", __METHOD__ );
+			if ( $row === false || is_null( $row->minjob ) || is_null( $row->maxjob ) ) {
+				// No jobs to get
+				wfProfileOut( __METHOD__ );
+				return false;
+			}
+			// Get the random row
+			$row = $dbw->selectRow( 'job', '*',
+				'job_id >= ' . mt_rand( $row->minjob, $row->maxjob ),	__METHOD__ );
+			if ( $row === false ) {
+				// Random job gone before we got the chance to select it
+				// Give up
+				wfProfileOut( __METHOD__ );
+				return false;
+			}
+			// Delete the random row
+			$dbw->delete( 'job', array( 'job_id' => $row->job_id ), __METHOD__ );
+			$affected = $dbw->affectedRows();
+			$dbw->immediateCommit();
+
+			if ( !$affected ) {
+				// Random job gone before we exclusively deleted it
+				// Give up
+				wfProfileOut( __METHOD__ );
+				return false;
+			}
+		}
+
+		// If execution got to here, there's a row in $row that has been deleted from the database
+		// by this thread. Hence the concurrent pop was successful.
+		$namespace = $row->job_namespace;
+		$dbkey = $row->job_title;
+		$title = Title::makeTitleSafe( $namespace, $dbkey );
+		$job = Job::factory( $row->job_cmd, $title, Job::extractBlob( $row->job_params ), $row->job_id );
+
+		// Remove any duplicates it may have later in the queue
+		$dbw->delete( 'job', $job->insertFields(), __METHOD__ );
+
+		wfProfileOut( __METHOD__ );
+		return $job;
+	}
+
+	/**
+	 * Create an object of a subclass
+	 */
+	static function factory( $command, $title, $params = false, $id = 0 ) {
+		switch ( $command ) {
+			case 'refreshLinks':
+				return new RefreshLinksJob( $title, $params, $id );
+			case 'htmlCacheUpdate':
+			case 'html_cache_update': # BC
+				return new HTMLCacheUpdateJob( $title, $params['table'], $params['start'], $params['end'], $id );
+			default:
+				throw new MWException( "Invalid job command \"$command\"" );
+		}
+	}
+
+	static function makeBlob( $params ) {
+		if ( $params !== false ) {
+			return serialize( $params );
+		} else {
+			return '';
+		}
+	}
+
+	static function extractBlob( $blob ) {
+		if ( (string)$blob !== '' ) {
+			return unserialize( $blob );
+		} else {
+			return false;
+		}
+	}
+
+	/**
+	 * Batch-insert a group of jobs into the queue.
+	 * This will be wrapped in a transaction with a forced commit.
+	 *
+	 * This may add duplicate at insert time, but they will be
+	 * removed later on, when the first one is popped.
+	 *
+	 * @param $jobs array of Job objects
+	 */
+	static function batchInsert( $jobs ) {
+		if( count( $jobs ) ) {
+			$dbw = wfGetDB( DB_MASTER );
+			$dbw->begin();
+			foreach( $jobs as $job ) {
+				$rows[] = $job->insertFields();
+			}
+			$dbw->insert( 'job', $rows, __METHOD__, 'IGNORE' );
+			$dbw->commit();
+		}
+	}
+
+	/*-------------------------------------------------------------------------
+	 * Non-static functions
+	 *------------------------------------------------------------------------*/
+
+	function __construct( $command, $title, $params = false, $id = 0 ) {
+		$this->command = $command;
+		$this->title = $title;
+		$this->params = $params;
+		$this->id = $id;
+
+		// A bit of premature generalisation
+		// Oh well, the whole class is premature generalisation really
+		$this->removeDuplicates = true;
+	}
+
+	/**
+	 * Insert a single job into the queue.
+	 */
+	function insert() {
+		$fields = $this->insertFields();
+
+		$dbw = wfGetDB( DB_MASTER );
+
+		if ( $this->removeDuplicates ) {
+			$res = $dbw->select( 'job', array( '1' ), $fields, __METHOD__ );
+			if ( $dbw->numRows( $res ) ) {
+				return;
+			}
+		}
+		$fields['job_id'] = $dbw->nextSequenceValue( 'job_job_id_seq' );
+		$dbw->insert( 'job', $fields, __METHOD__ );
+	}
+
+	protected function insertFields() {
+		return array(
+			'job_cmd' => $this->command,
+			'job_namespace' => $this->title->getNamespace(),
+			'job_title' => $this->title->getDBkey(),
+			'job_params' => Job::makeBlob( $this->params )
+		);
+	}
+
+	function toString() {
+		$paramString = '';
+		if ( $this->params ) {
+			foreach ( $this->params as $key => $value ) {
+				if ( $paramString != '' ) {
+					$paramString .= ' ';
+				}
+				$paramString .= "$key=$value";
+			}
+		}
+
+		if ( is_object( $this->title ) ) {
+			$s = "{$this->command} " . $this->title->getPrefixedDBkey();
+			if ( $paramString !== '' ) {
+				$s .= ' ' . $paramString;
+			}
+			return $s;
+		} else {
+			return "{$this->command} $paramString";
+		}
+	}
+
+	function getLastError() {
+		return $this->error;
+	}
+}
+
+
+/**
+ * Background job to update links for a given title.
+ */
+class RefreshLinksJob extends Job {
+	function __construct( $title, $params = '', $id = 0 ) {
+		parent::__construct( 'refreshLinks', $title, $params, $id );
+	}
+
+	/**
+	 * Run a refreshLinks job
+	 * @return boolean success
+	 */
+	function run() {
+		global $wgParser;
+		wfProfileIn( __METHOD__ );
+
+		$linkCache =& LinkCache::singleton();
+		$linkCache->clear();
+
+		if ( is_null( $this->title ) ) {
+			$this->error = "refreshLinks: Invalid title";
+			wfProfileOut( __METHOD__ );
+			return false;
+		}
+
+		$revision = Revision::newFromTitle( $this->title );
+		if ( !$revision ) {
+			$this->error = 'refreshLinks: Article not found "' . $this->title->getPrefixedDBkey() . '"';
+			wfProfileOut( __METHOD__ );
+			return false;
+		}
+
+		wfProfileIn( __METHOD__.'-parse' );
+		$options = new ParserOptions;
+		$parserOutput = $wgParser->parse( $revision->getText(), $this->title, $options, true, true, $revision->getId() );
+		wfProfileOut( __METHOD__.'-parse' );
+		wfProfileIn( __METHOD__.'-update' );
+		$update = new LinksUpdate( $this->title, $parserOutput, false );
+		$update->doUpdate();
+		wfProfileOut( __METHOD__.'-update' );
+		wfProfileOut( __METHOD__ );
+		return true;
+	}
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/Licenses.php
===================================================================
--- /MediaWiki/branches/1.11/includes/Licenses.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/Licenses.php	(revision 1280)
@@ -0,0 +1,175 @@
+<?php
+/**
+ * A License class for use on Special:Upload
+ * 
+ * @addtogroup SpecialPage
+ *
+ * @author Ævar Arnfjörð Bjarmason <avarab@gmail.com>
+ * @copyright Copyright © 2005, Ævar Arnfjörð Bjarmason
+ * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
+ */
+
+class Licenses {
+	/**#@+
+	 * @private
+	 */
+	/**
+	 * @var string
+	 */
+	var $msg;
+
+	/**
+	 * @var array
+	 */
+	var $licenses = array();
+
+	/**
+	 * @var string
+	 */
+	var $html;
+	/**#@-*/
+
+	/**
+	 * Constructor
+	 *
+	 * @param $str String: the string to build the licenses member from, will use
+	 *                    wfMsgForContent( 'licenses' ) if null (default: null)
+	 */
+	function __construct( $str = null ) {
+		// PHP sucks, this should be possible in the constructor
+		$this->msg = is_null( $str ) ? wfMsgForContent( 'licenses' ) : $str;
+		$this->html = '';
+
+		$this->makeLicenses();
+		$tmp = $this->getLicenses();
+		$this->makeHtml( $tmp );
+	}
+
+	/**#@+
+	 * @private
+	 */
+	function makeLicenses() {
+		$levels = array();
+		$lines = explode( "\n", $this->msg );
+
+		foreach ( $lines as $line ) {
+			if ( strpos( $line, '*' ) !== 0 )
+				continue;
+			else {
+				list( $level, $line ) = $this->trimStars( $line );
+
+				if ( strpos( $line, '|' ) !== false ) {
+					$obj = new License( $line );
+					$this->stackItem( $this->licenses, $levels, $obj );
+				} else {
+					if ( $level < count( $levels ) ) {
+						$levels = array_slice( $levels, 0, $level );
+					}
+					if ( $level == count( $levels ) ) {
+						$levels[$level - 1] = $line;
+					} else if ( $level > count( $levels ) ) {
+						$levels[] = $line;
+					}
+				}
+			}
+		}
+	}
+
+	function trimStars( $str ) {
+		$i = $count = 0;
+
+		wfSuppressWarnings();
+		while ($str[$i++] == '*')
+			++$count;
+		wfRestoreWarnings();
+
+		return array( $count, ltrim( $str, '* ' ) );
+	}
+
+	function stackItem( &$list, $path, $item ) {
+		$position =& $list;
+		if ( $path )
+			foreach( $path as $key )
+				$position =& $position[$key];
+		$position[] = $item;
+	}
+
+	function makeHtml( &$tagset, $depth = 0 ) {
+		foreach ( $tagset as $key => $val )
+			if ( is_array( $val ) ) {
+				$this->html .= $this->outputOption(
+					$this->msg( $key ),
+					array(
+						'value' => '',
+						'disabled' => 'disabled',
+						'style' => 'color: GrayText', // for MSIE
+					),
+					$depth
+				);
+				$this->makeHtml( $val, $depth + 1 );
+			} else {
+				$this->html .= $this->outputOption(
+					$this->msg( $val->text ),
+					array(
+						'value' => $val->template,
+						'title' => '{{' . $val->template . '}}'
+					),
+					$depth
+				);
+			}
+	}
+
+	function outputOption( $val, $attribs = null, $depth ) {
+		$val = str_repeat( /* &nbsp */ "\xc2\xa0", $depth * 2 ) . $val;
+		return str_repeat( "\t", $depth ) . wfElement( 'option', $attribs, $val ) . "\n";
+	}
+
+	function msg( $str ) {
+		$out = wfMsg( $str );
+		return wfEmptyMsg( $str, $out ) ? $str : $out;
+	}
+
+	/**#@-*/
+
+	/**
+	 *  Accessor for $this->licenses
+	 *
+	 * @return array
+	 */
+	function getLicenses() { return $this->licenses; }
+
+	/**
+	 * Accessor for $this->html
+	 *
+	 * @return string
+	 */
+	function getHtml() { return $this->html; }
+}
+
+/**
+ * A License class for use on Special:Upload (represents a single type of license).
+ */
+class License {
+	/**
+	 * @var string
+	 */
+	var $template;
+
+	/**
+	 * @var string
+	 */
+	var $text;
+
+	/**
+	 * Constructor
+	 *
+	 * @param $str String: license name??
+	 */
+	function License( $str ) {
+		list( $text, $template ) = explode( '|', strrev( $str ), 2 );
+
+		$this->template = strrev( $template );
+		$this->text = strrev( $text );
+	}
+}
+?>
Index: /MediaWiki/branches/1.11/includes/LinkBatch.php
===================================================================
--- /MediaWiki/branches/1.11/includes/LinkBatch.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/LinkBatch.php	(revision 1280)
@@ -0,0 +1,182 @@
+<?php
+
+/**
+ * Class representing a list of titles
+ * The execute() method checks them all for existence and adds them to a LinkCache object
+ +
+ * @addtogroup Cache
+ */
+class LinkBatch {
+	/**
+	 * 2-d array, first index namespace, second index dbkey, value arbitrary
+	 */
+	var $data = array();
+
+	function __construct( $arr = array() ) {
+		foreach( $arr as $item ) {
+			$this->addObj( $item );
+		}
+	}
+
+	function addObj( $title ) {
+		if ( is_object( $title ) ) {
+			$this->add( $title->getNamespace(), $title->getDBkey() );
+		} else {
+			wfDebug( "Warning: LinkBatch::addObj got invalid title object\n" );
+		}
+	}
+
+	function add( $ns, $dbkey ) {
+		if ( $ns < 0 ) {
+			return;
+		}
+		if ( !array_key_exists( $ns, $this->data ) ) {
+			$this->data[$ns] = array();
+		}
+
+		$this->data[$ns][$dbkey] = 1;
+	}
+
+	/**
+	 * Set the link list to a given 2-d array
+	 * First key is the namespace, second is the DB key, value arbitrary
+	 */
+	function setArray( $array ) {
+		$this->data = $array;
+	}
+
+	/**
+	 * Returns true if no pages have been added, false otherwise.
+	 */
+	function isEmpty() {
+		return ($this->getSize() == 0);
+	}
+
+	/**
+	 * Returns the size of the batch.
+	 */
+	function getSize() {
+		return count( $this->data );
+	}
+
+	/**
+	 * Do the query and add the results to the LinkCache object
+	 * Return an array mapping PDBK to ID
+	 */
+	 function execute() {
+	 	$linkCache =& LinkCache::singleton();
+	 	return $this->executeInto( $linkCache );
+	 }
+
+	/**
+	 * Do the query and add the results to a given LinkCache object
+	 * Return an array mapping PDBK to ID
+	 */
+	function executeInto( &$cache ) {
+		$fname = 'LinkBatch::executeInto';
+		wfProfileIn( $fname );
+		// Do query
+		$res = $this->doQuery();
+		if ( !$res ) {
+			wfProfileOut( $fname );
+			return array();
+		}
+
+		// For each returned entry, add it to the list of good links, and remove it from $remaining
+
+		$ids = array();
+		$remaining = $this->data;
+		while ( $row = $res->fetchObject() ) {
+			$title = Title::makeTitle( $row->page_namespace, $row->page_title );
+			$cache->addGoodLinkObj( $row->page_id, $title );
+			$ids[$title->getPrefixedDBkey()] = $row->page_id;
+			unset( $remaining[$row->page_namespace][$row->page_title] );
+		}
+		$res->free();
+
+		// The remaining links in $data are bad links, register them as such
+		foreach ( $remaining as $ns => $dbkeys ) {
+			foreach ( $dbkeys as $dbkey => $unused ) {
+				$title = Title::makeTitle( $ns, $dbkey );
+				$cache->addBadLinkObj( $title );
+				$ids[$title->getPrefixedDBkey()] = 0;
+			}
+		}
+		wfProfileOut( $fname );
+		return $ids;
+	}
+
+	/**
+	 * Perform the existence test query, return a ResultWrapper with page_id fields
+	 */
+	function doQuery() {
+		$fname = 'LinkBatch::doQuery';
+
+		if ( $this->isEmpty() ) {
+			return false;
+		}
+		wfProfileIn( $fname );
+
+		// Construct query
+		// This is very similar to Parser::replaceLinkHolders
+		$dbr = wfGetDB( DB_SLAVE );
+		$page = $dbr->tableName( 'page' );
+		$set = $this->constructSet( 'page', $dbr );
+		if ( $set === false ) {
+			wfProfileOut( $fname );
+			return false;
+		}
+		$sql = "SELECT page_id, page_namespace, page_title FROM $page WHERE $set";
+
+		// Do query
+		$res = new ResultWrapper( $dbr,  $dbr->query( $sql, $fname ) );
+		wfProfileOut( $fname );
+		return $res;
+	}
+
+	/**
+	 * Construct a WHERE clause which will match all the given titles.
+	 * Give the appropriate table's field name prefix ('page', 'pl', etc).
+	 *
+	 * @param $prefix String: ??
+	 * @return string
+	 * @public
+	 */
+	function constructSet( $prefix, &$db ) {
+		$first = true;
+		$firstTitle = true;
+		$sql = '';
+		foreach ( $this->data as $ns => $dbkeys ) {
+			if ( !count( $dbkeys ) ) {
+				continue;
+			}
+
+			if ( $first ) {
+				$first = false;
+			} else {
+				$sql .= ' OR ';
+			}
+			$sql .= "({$prefix}_namespace=$ns AND {$prefix}_title IN (";
+
+			$firstTitle = true;
+			foreach( $dbkeys as $dbkey => $unused ) {
+				if ( $firstTitle ) {
+					$firstTitle = false;
+				} else {
+					$sql .= ',';
+				}
+				$sql .= $db->addQuotes( $dbkey );
+			}
+
+			$sql .= '))';
+		}
+		if ( $first && $firstTitle ) {
+			# No titles added
+			return false;
+		} else {
+			return $sql;
+		}
+	}
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/LinkCache.php
===================================================================
--- /MediaWiki/branches/1.11/includes/LinkCache.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/LinkCache.php	(revision 1280)
@@ -0,0 +1,172 @@
+<?php
+/**
+ * Cache for article titles (prefixed DB keys) and ids linked from one source
+ * 
+ * @addtogroup Cache
+ */
+class LinkCache {
+	// Increment $mClassVer whenever old serialized versions of this class
+	// becomes incompatible with the new version.
+	/* private */ var $mClassVer = 3;
+
+	/* private */ var $mPageLinks;
+	/* private */ var $mGoodLinks, $mBadLinks;
+	/* private */ var $mForUpdate;
+
+	/**
+	 * Get an instance of this class
+	 */
+	static function &singleton() {
+		static $instance;
+		if ( !isset( $instance ) ) {
+			$instance = new LinkCache;
+		}
+		return $instance;
+	}
+
+	function __construct() {
+		$this->mForUpdate = false;
+		$this->mPageLinks = array();
+		$this->mGoodLinks = array();
+		$this->mBadLinks = array();
+	}
+
+	/* private */ function getKey( $title ) {
+		return wfMemcKey( 'lc', 'title', $title );
+	}
+
+	/**
+	 * General accessor to get/set whether SELECT FOR UPDATE should be used
+	 */
+	function forUpdate( $update = NULL ) {
+		return wfSetVar( $this->mForUpdate, $update );
+	}
+
+	function getGoodLinkID( $title ) {
+		if ( array_key_exists( $title, $this->mGoodLinks ) ) {
+			return $this->mGoodLinks[$title];
+		} else {
+			return 0;
+		}
+	}
+
+	function isBadLink( $title ) {
+		return array_key_exists( $title, $this->mBadLinks );
+	}
+
+	function addGoodLinkObj( $id, $title ) {
+		$dbkey = $title->getPrefixedDbKey();
+		$this->mGoodLinks[$dbkey] = $id;
+		$this->mPageLinks[$dbkey] = $title;
+	}
+
+	function addBadLinkObj( $title ) {
+		$dbkey = $title->getPrefixedDbKey();
+		if ( ! $this->isBadLink( $dbkey ) ) {
+			$this->mBadLinks[$dbkey] = 1;
+			$this->mPageLinks[$dbkey] = $title;
+		}
+	}
+
+	function clearBadLink( $title ) {
+		unset( $this->mBadLinks[$title] );
+		$this->clearLink( $title );
+	}
+
+	function clearLink( $title ) {
+		global $wgMemc, $wgLinkCacheMemcached;
+		if( $wgLinkCacheMemcached )
+			$wgMemc->delete( $this->getKey( $title ) );
+	}
+
+	function getPageLinks() { return $this->mPageLinks; }
+	function getGoodLinks() { return $this->mGoodLinks; }
+	function getBadLinks() { return array_keys( $this->mBadLinks ); }
+
+	/**
+	 * Add a title to the link cache, return the page_id or zero if non-existent
+	 * @param $title String: title to add
+	 * @return integer
+	 */
+	function addLink( $title ) {
+		$nt = Title::newFromDBkey( $title );
+		if( $nt ) {
+			return $this->addLinkObj( $nt );
+		} else {
+			return 0;
+		}
+	}
+
+	/**
+	 * Add a title to the link cache, return the page_id or zero if non-existent
+	 * @param $nt Title to add.
+	 * @return integer
+	 */
+	function addLinkObj( &$nt ) {
+		global $wgMemc, $wgLinkCacheMemcached, $wgAntiLockFlags;
+		$title = $nt->getPrefixedDBkey();
+		if ( $this->isBadLink( $title ) ) { return 0; }
+		$id = $this->getGoodLinkID( $title );
+		if ( 0 != $id ) { return $id; }
+
+		$fname = 'LinkCache::addLinkObj';
+		global $wgProfiling, $wgProfiler;
+		if ( $wgProfiling && isset( $wgProfiler ) ) {
+			$fname .= ' (' . $wgProfiler->getCurrentSection() . ')';
+		}
+
+		wfProfileIn( $fname );
+
+		$ns = $nt->getNamespace();
+		$t = $nt->getDBkey();
+
+		if ( '' == $title ) {
+			wfProfileOut( $fname );
+			return 0;
+		}
+
+		$id = NULL;
+		if( $wgLinkCacheMemcached )
+			$id = $wgMemc->get( $key = $this->getKey( $title ) );
+		if( ! is_integer( $id ) ) {
+			if ( $this->mForUpdate ) {
+				$db = wfGetDB( DB_MASTER );
+				if ( !( $wgAntiLockFlags & ALF_NO_LINK_LOCK ) ) {
+					$options = array( 'FOR UPDATE' );
+				} else {
+					$options = array();
+				}
+			} else {
+				$db = wfGetDB( DB_SLAVE );
+				$options = array();
+			}
+
+			$id = $db->selectField( 'page', 'page_id',
+					array( 'page_namespace' => $ns, 'page_title' => $t ),
+					$fname, $options );
+			if ( !$id ) {
+				$id = 0;
+			}
+			if( $wgLinkCacheMemcached )
+				$wgMemc->add( $key, $id, 3600*24 );
+		}
+
+		if( 0 == $id ) {
+			$this->addBadLinkObj( $nt );
+		} else {
+			$this->addGoodLinkObj( $id, $nt );
+		}
+		wfProfileOut( $fname );
+		return $id;
+	}
+
+	/**
+	 * Clears cache
+	 */
+	function clear() {
+		$this->mPageLinks = array();
+		$this->mGoodLinks = array();
+		$this->mBadLinks = array();
+	}
+}
+?>
Index: /MediaWiki/branches/1.11/includes/LinkFilter.php
===================================================================
--- /MediaWiki/branches/1.11/includes/LinkFilter.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/LinkFilter.php	(revision 1280)
@@ -0,0 +1,108 @@
+<?php
+
+/**
+ * Some functions to help implement an external link filter for spam control.
+ * 
+ * TODO: implement the filter. Currently these are just some functions to help
+ * maintenance/cleanupSpam.php remove links to a single specified domain. The
+ * next thing is to implement functions for checking a given page against a big
+ * list of domains.
+ *
+ * Another cool thing to do would be a web interface for fast spam removal.
+ */
+class LinkFilter {
+	/**
+	 * @static
+	 */
+	static function matchEntry( $text, $filterEntry ) {
+		$regex = LinkFilter::makeRegex( $filterEntry );
+		return preg_match( $regex, $text );
+	}
+
+	/**
+	 * @static
+	 */
+	private static function makeRegex( $filterEntry ) {
+		$regex = '!http://';
+		if ( substr( $filterEntry, 0, 2 ) == '*.' ) {
+			$regex .= '(?:[A-Za-z0-9.-]+\.|)';
+			$filterEntry = substr( $filterEntry, 2 );
+		}
+		$regex .= preg_quote( $filterEntry, '!' ) . '!Si';
+		return $regex;
+	}
+
+	/**
+	 * Make a string to go after an SQL LIKE, which will match the specified
+	 * string. There are several kinds of filter entry:
+	 *     *.domain.com    -  Produces http://com.domain.%, matches domain.com
+	 *                        and www.domain.com
+	 *     domain.com      -  Produces http://com.domain./%, matches domain.com
+	 *                        or domain.com/ but not www.domain.com
+	 *     *.domain.com/x  -  Produces http://com.domain.%/x%, matches
+	 *                        www.domain.com/xy
+	 *     domain.com/x    -  Produces http://com.domain./x%, matches
+	 *                        domain.com/xy but not www.domain.com/xy
+	 *
+	 * Asterisks in any other location are considered invalid.
+	 * 
+	 * @static
+	 * @param $filterEntry String: domainparts
+	 * @param $prot        String: protocol
+	 */
+	 public static function makeLike( $filterEntry , $prot = 'http://' ) {
+		if ( substr( $filterEntry, 0, 2 ) == '*.' ) {
+			$subdomains = true;
+			$filterEntry = substr( $filterEntry, 2 );
+			if ( $filterEntry == '' ) {
+				// We don't want to make a clause that will match everything,
+				// that could be dangerous
+				return false;
+			}
+		} else {
+			$subdomains = false;
+		}
+		// No stray asterisks, that could cause confusion
+		// It's not simple or efficient to handle it properly so we don't
+		// handle it at all.
+		if ( strpos( $filterEntry, '*' ) !== false ) {
+			return false;
+		}
+		$slash = strpos( $filterEntry, '/' );
+		if ( $slash !== false ) {
+			$path = substr( $filterEntry, $slash );
+			$host = substr( $filterEntry, 0, $slash );
+		} else {
+			$path = '/';
+			$host = $filterEntry;
+		}
+		// Reverse the labels in the hostname, convert to lower case
+		// For emails reverse domainpart only
+		if ( $prot == 'mailto:' && strpos($host, '@') ) {
+			// complete email adress 
+			$mailparts = explode( '@', $host );
+			$domainpart = strtolower( implode( '.', array_reverse( explode( '.', $mailparts[1] ) ) ) );
+			$host = $domainpart . '@' . $mailparts[0];
+			$like = "$prot$host%";
+		} elseif ( $prot == 'mailto:' ) {
+			// domainpart of email adress only. do not add '.'
+			$host = strtolower( implode( '.', array_reverse( explode( '.', $host ) ) ) );	
+			$like = "$prot$host%";			
+		} else {
+			$host = strtolower( implode( '.', array_reverse( explode( '.', $host ) ) ) );	
+			if ( substr( $host, -1, 1 ) !== '.' ) {
+				$host .= '.';
+			}
+			$like = "$prot$host";
+
+			if ( $subdomains ) {
+				$like .= '%';
+			}
+			if ( !$subdomains || $path !== '/' ) {
+				$like .= $path . '%';
+			}
+		}
+		return $like;
+	}
+}
+?>
Index: /MediaWiki/branches/1.11/includes/Linker.php
===================================================================
--- /MediaWiki/branches/1.11/includes/Linker.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/Linker.php	(revision 1280)
@@ -0,0 +1,1211 @@
+<?php
+/**
+ * Split off some of the internal bits from Skin.php.
+ * These functions are used for primarily page content:
+ * links, embedded images, table of contents. Links are
+ * also used in the skin.
+ * For the moment, Skin is a descendent class of Linker.
+ * In the future, it should probably be further split
+ * so that ever other bit of the wiki doesn't have to
+ * go loading up Skin to get at it.
+ *
+ * @addtogroup Skins
+ */
+class Linker {
+	function __construct() {}
+
+	/**
+	 * @deprecated
+	 */
+	function postParseLinkColour( $s = NULL ) {
+		return NULL;
+	}
+
+	/** @todo document */
+	function getExternalLinkAttributes( $link, $text, $class='' ) {
+		$link = htmlspecialchars( $link );
+
+		$r = ($class != '') ? " class=\"$class\"" : " class=\"external\"";
+
+		$r .= " title=\"{$link}\"";
+		return $r;
+	}
+
+	function getInterwikiLinkAttributes( $link, $text, $class='' ) {
+		global $wgContLang;
+
+		$link = urldecode( $link );
+		$link = $wgContLang->checkTitleEncoding( $link );
+		$link = preg_replace( '/[\\x00-\\x1f]/', ' ', $link );
+		$link = htmlspecialchars( $link );
+
+		$r = ($class != '') ? " class=\"$class\"" : " class=\"external\"";
+
+		$r .= " title=\"{$link}\"";
+		return $r;
+	}
+
+	/** @todo document */
+	function getInternalLinkAttributes( $link, $text, $broken = false ) {
+		$link = urldecode( $link );
+		$link = str_replace( '_', ' ', $link );
+		$link = htmlspecialchars( $link );
+
+		if( $broken == 'stub' ) {
+			$r = ' class="stub"';
+		} else if ( $broken == 'yes' ) {
+			$r = ' class="new"';
+		} else {
+			$r = '';
+		}
+
+		$r .= " title=\"{$link}\"";
+		return $r;
+	}
+
+	/**
+	 * @param $nt Title object.
+	 * @param $text String: FIXME
+	 * @param $broken Boolean: FIXME, default 'false'.
+	 */
+	function getInternalLinkAttributesObj( &$nt, $text, $broken = false ) {
+		if( $broken == 'stub' ) {
+			$r = ' class="stub"';
+		} else if ( $broken == 'yes' ) {
+			$r = ' class="new"';
+		} else {
+			$r = '';
+		}
+
+		$r .= ' title="' . $nt->getEscapedText() . '"';
+		return $r;
+	}
+
+	/**
+	 * This function is a shortcut to makeLinkObj(Title::newFromText($title),...). Do not call
+	 * it if you already have a title object handy. See makeLinkObj for further documentation.
+	 *
+	 * @param $title String: the text of the title
+	 * @param $text  String: link text
+	 * @param $query String: optional query part
+	 * @param $trail String: optional trail. Alphabetic characters at the start of this string will
+	 *                      be included in the link text. Other characters will be appended after
+	 *                      the end of the link.
+	 */
+	function makeLink( $title, $text = '', $query = '', $trail = '' ) {
+		wfProfileIn( 'Linker::makeLink' );
+	 	$nt = Title::newFromText( $title );
+		if ($nt) {
+			$result = $this->makeLinkObj( Title::newFromText( $title ), $text, $query, $trail );
+		} else {
+			wfDebug( 'Invalid title passed to Linker::makeLink(): "'.$title."\"\n" );
+			$result = $text == "" ? $title : $text;
+		}
+
+		wfProfileOut( 'Linker::makeLink' );
+		return $result;
+	}
+
+	/**
+	 * This function is a shortcut to makeKnownLinkObj(Title::newFromText($title),...). Do not call
+	 * it if you already have a title object handy. See makeKnownLinkObj for further documentation.
+	 * 
+	 * @param $title String: the text of the title
+	 * @param $text  String: link text
+	 * @param $query String: optional query part
+	 * @param $trail String: optional trail. Alphabetic characters at the start of this string will
+	 *                      be included in the link text. Other characters will be appended after
+	 *                      the end of the link.
+	 */
+	function makeKnownLink( $title, $text = '', $query = '', $trail = '', $prefix = '',$aprops = '') {
+		$nt = Title::newFromText( $title );
+		if ($nt) {
+			return $this->makeKnownLinkObj( Title::newFromText( $title ), $text, $query, $trail, $prefix , $aprops );
+		} else {
+			wfDebug( 'Invalid title passed to Linker::makeKnownLink(): "'.$title."\"\n" );
+			return $text == '' ? $title : $text;
+		}
+	}
+
+	/**
+	 * This function is a shortcut to makeBrokenLinkObj(Title::newFromText($title),...). Do not call
+	 * it if you already have a title object handy. See makeBrokenLinkObj for further documentation.
+	 * 
+	 * @param string $title The text of the title
+	 * @param string $text Link text
+	 * @param string $query Optional query part
+	 * @param string $trail Optional trail. Alphabetic characters at the start of this string will
+	 *                      be included in the link text. Other characters will be appended after
+	 *                      the end of the link.
+	 */
+	function makeBrokenLink( $title, $text = '', $query = '', $trail = '' ) {
+		$nt = Title::newFromText( $title );
+		if ($nt) {
+			return $this->makeBrokenLinkObj( Title::newFromText( $title ), $text, $query, $trail );
+		} else {
+			wfDebug( 'Invalid title passed to Linker::makeBrokenLink(): "'.$title."\"\n" );
+			return $text == '' ? $title : $text;
+		}
+	}
+
+	/**
+	 * This function is a shortcut to makeStubLinkObj(Title::newFromText($title),...). Do not call
+	 * it if you already have a title object handy. See makeStubLinkObj for further documentation.
+	 * 
+	 * @param $title String: the text of the title
+	 * @param $text  String: link text
+	 * @param $query String: optional query part
+	 * @param $trail String: optional trail. Alphabetic characters at the start of this string will
+	 *                      be included in the link text. Other characters will be appended after
+	 *                      the end of the link.
+	 */
+	function makeStubLink( $title, $text = '', $query = '', $trail = '' ) {
+		$nt = Title::newFromText( $title );
+		if ($nt) {
+			return $this->makeStubLinkObj( Title::newFromText( $title ), $text, $query, $trail );
+		} else {
+			wfDebug( 'Invalid title passed to Linker::makeStubLink(): "'.$title."\"\n" );
+			return $text == '' ? $title : $text;
+		}
+	}
+
+	/**
+	 * Make a link for a title which may or may not be in the database. If you need to
+	 * call this lots of times, pre-fill the link cache with a LinkBatch, otherwise each
+	 * call to this will result in a DB query.
+	 * 
+	 * @param $nt     Title: the title object to make the link from, e.g. from
+	 *                      Title::newFromText.
+	 * @param $text  String: link text
+	 * @param $query String: optional query part
+	 * @param $trail String: optional trail. Alphabetic characters at the start of this string will
+	 *                      be included in the link text. Other characters will be appended after
+	 *                      the end of the link.
+	 * @param $prefix String: optional prefix. As trail, only before instead of after.
+	 */
+	function makeLinkObj( $nt, $text= '', $query = '', $trail = '', $prefix = '' ) {
+		global $wgUser;
+		$fname = 'Linker::makeLinkObj';
+		wfProfileIn( $fname );
+
+		# Fail gracefully
+		if ( ! is_object($nt) ) {
+			# throw new MWException();
+			wfProfileOut( $fname );
+			return "<!-- ERROR -->{$prefix}{$text}{$trail}";
+		}
+
+		if ( $nt->isExternal() ) {
+			$u = $nt->getFullURL();
+			$link = $nt->getPrefixedURL();
+			if ( '' == $text ) { $text = $nt->getPrefixedText(); }
+			$style = $this->getInterwikiLinkAttributes( $link, $text, 'extiw' );
+
+			$inside = '';
+			if ( '' != $trail ) {
+				$m = array();
+				if ( preg_match( '/^([a-z]+)(.*)$$/sD', $trail, $m ) ) {
+					$inside = $m[1];
+					$trail = $m[2];
+				}
+			}
+			$t = "<a href=\"{$u}\"{$style}>{$text}{$inside}</a>";
+
+			wfProfileOut( $fname );
+			return $t;
+		} elseif ( $nt->isAlwaysKnown() ) {
+			# Image links, special page links and self-links with fragements are always known.
+			$retVal = $this->makeKnownLinkObj( $nt, $text, $query, $trail, $prefix );
+		} else {
+			wfProfileIn( $fname.'-immediate' );
+			# Work out link colour immediately
+			$aid = $nt->getArticleID() ;
+			if ( 0 == $aid ) {
+				$retVal = $this->makeBrokenLinkObj( $nt, $text, $query, $trail, $prefix );
+			} else {
+				$threshold = $wgUser->getOption('stubthreshold') ;
+				if ( $threshold > 0 ) {
+					$dbr = wfGetDB( DB_SLAVE );
+					$s = $dbr->selectRow(
+						array( 'page' ),
+						array( 'page_len',
+							'page_namespace',
+							'page_is_redirect' ),
+						array( 'page_id' => $aid ), $fname ) ;
+					if ( $s !== false ) {
+						$size = $s->page_len;
+						if ( $s->page_is_redirect OR $s->page_namespace != NS_MAIN ) {
+							$size = $threshold*2 ; # Really big
+						}
+					} else {
+						$size = $threshold*2 ; # Really big
+					}
+				} else {
+					$size = 1 ;
+				}
+				if ( $size < $threshold ) {
+					$retVal = $this->makeStubLinkObj( $nt, $text, $query, $trail, $prefix );
+				} else {
+					$retVal = $this->makeKnownLinkObj( $nt, $text, $query, $trail, $prefix );
+				}
+			}
+			wfProfileOut( $fname.'-immediate' );
+		}
+		wfProfileOut( $fname );
+		return $retVal;
+	}
+
+	/**
+	 * Make a link for a title which definitely exists. This is faster than makeLinkObj because
+	 * it doesn't have to do a database query. It's also valid for interwiki titles and special
+	 * pages.
+	 *
+	 * @param $nt Title object of target page
+	 * @param $text   String: text to replace the title
+	 * @param $query  String: link target
+	 * @param $trail  String: text after link
+	 * @param $prefix String: text before link text
+	 * @param $aprops String: extra attributes to the a-element
+	 * @param $style  String: style to apply - if empty, use getInternalLinkAttributesObj instead
+	 * @return the a-element
+	 */
+	function makeKnownLinkObj( $nt, $text = '', $query = '', $trail = '', $prefix = '' , $aprops = '', $style = '' ) {
+
+		$fname = 'Linker::makeKnownLinkObj';
+		wfProfileIn( $fname );
+
+		if ( !is_object( $nt ) ) {
+			wfProfileOut( $fname );
+			return $text;
+		}
+
+		$u = $nt->escapeLocalURL( $query );
+		if ( $nt->getFragment() != '' ) {
+			if( $nt->getPrefixedDbkey() == '' ) {
+				$u = '';
+				if ( '' == $text ) {
+					$text = htmlspecialchars( $nt->getFragment() );
+				}
+			}
+			$u .= $nt->getFragmentForURL();
+		}
+		if ( $text == '' ) {
+			$text = htmlspecialchars( $nt->getPrefixedText() );
+		}
+		if ( $style == '' ) {
+			$style = $this->getInternalLinkAttributesObj( $nt, $text );
+		}
+
+		if ( $aprops !== '' ) $aprops = ' ' . $aprops;
+
+		list( $inside, $trail ) = Linker::splitTrail( $trail );
+		$r = "<a href=\"{$u}\"{$style}{$aprops}>{$prefix}{$text}{$inside}</a>{$trail}";
+		wfProfileOut( $fname );
+		return $r;
+	}
+
+	/**
+	 * Make a red link to the edit page of a given title.
+	 * 
+	 * @param $title String: The text of the title
+	 * @param $text  String: Link text
+	 * @param $query String: Optional query part
+	 * @param $trail String: Optional trail. Alphabetic characters at the start of this string will
+	 *                      be included in the link text. Other characters will be appended after
+	 *                      the end of the link.
+	 */
+	function makeBrokenLinkObj( $nt, $text = '', $query = '', $trail = '', $prefix = '' ) {
+		# Fail gracefully
+		if ( ! isset($nt) ) {
+			# throw new MWException();
+			return "<!-- ERROR -->{$prefix}{$text}{$trail}";
+		}
+
+		$fname = 'Linker::makeBrokenLinkObj';
+		wfProfileIn( $fname );
+
+		if ( '' == $query ) {
+			$q = 'action=edit';
+		} else {
+			$q = 'action=edit&'.$query;
+		}
+		$u = $nt->escapeLocalURL( $q );
+
+		if ( '' == $text ) {
+			$text = htmlspecialchars( $nt->getPrefixedText() );
+		}
+		$style = $this->getInternalLinkAttributesObj( $nt, $text, "yes" );
+
+		list( $inside, $trail ) = Linker::splitTrail( $trail );
+		$s = "<a href=\"{$u}\"{$style}>{$prefix}{$text}{$inside}</a>{$trail}";
+
+		wfProfileOut( $fname );
+		return $s;
+	}
+
+	/**
+	 * Make a brown link to a short article.
+	 * 
+	 * @param $title String: the text of the title
+	 * @param $text  String: link text
+	 * @param $query String: optional query part
+	 * @param $trail String: optional trail. Alphabetic characters at the start of this string will
+	 *                      be included in the link text. Other characters will be appended after
+	 *                      the end of the link.
+	 */
+	function makeStubLinkObj( $nt, $text = '', $query = '', $trail = '', $prefix = '' ) {
+		$style = $this->getInternalLinkAttributesObj( $nt, $text, 'stub' );
+		return $this->makeKnownLinkObj( $nt, $text, $query, $trail, $prefix, '', $style );
+	}
+
+	/**
+	 * Generate either a normal exists-style link or a stub link, depending
+	 * on the given page size.
+	 *
+ 	 * @param $size Integer
+ 	 * @param $nt Title object.
+ 	 * @param $text String
+ 	 * @param $query String
+ 	 * @param $trail String
+ 	 * @param $prefix String
+ 	 * @return string HTML of link
+	 */
+	function makeSizeLinkObj( $size, $nt, $text = '', $query = '', $trail = '', $prefix = '' ) {
+		global $wgUser;
+		$threshold = intval( $wgUser->getOption( 'stubthreshold' ) );
+		if( $size < $threshold ) {
+			return $this->makeStubLinkObj( $nt, $text, $query, $trail, $prefix );
+		} else {
+			return $this->makeKnownLinkObj( $nt, $text, $query, $trail, $prefix );
+		}
+	}
+
+	/** 
+	 * Make appropriate markup for a link to the current article. This is currently rendered
+	 * as the bold link text. The calling sequence is the same as the other make*LinkObj functions,
+	 * despite $query not being used.
+	 */
+	function makeSelfLinkObj( $nt, $text = '', $query = '', $trail = '', $prefix = '' ) {
+		if ( '' == $text ) {
+			$text = htmlspecialchars( $nt->getPrefixedText() );
+		}
+		list( $inside, $trail ) = Linker::splitTrail( $trail );
+		return "<strong class=\"selflink\">{$prefix}{$text}{$inside}</strong>{$trail}";
+	}
+
+	/** @todo document */
+	function fnamePart( $url ) {
+		$basename = strrchr( $url, '/' );
+		if ( false === $basename ) {
+			$basename = $url;
+		} else {
+			$basename = substr( $basename, 1 );
+		}
+		return htmlspecialchars( $basename );
+	}
+
+	/** Obsolete alias */
+	function makeImage( $url, $alt = '' ) {
+		return $this->makeExternalImage( $url, $alt );
+	}
+
+	/** @todo document */
+	function makeExternalImage( $url, $alt = '' ) {
+		if ( '' == $alt ) {
+			$alt = $this->fnamePart( $url );
+		}
+		$s = '<img src="'.$url.'" alt="'.$alt.'" />';
+		return $s;
+	}
+
+	/** @todo document */
+	function makeImageLinkObj( $nt, $label, $alt, $align = '', $params = array(), $framed = false,
+	  $thumb = false, $manual_thumb = '', $valign = '' )
+	{
+		global $wgContLang, $wgUser, $wgThumbLimits;
+
+		$img   = new Image( $nt );
+
+		if ( !$img->allowInlineDisplay() && $img->exists() ) {
+			return $this->makeKnownLinkObj( $nt );
+		}
+
+		$error = $prefix = $postfix = '';
+		$page = isset( $params['page'] ) ? $params['page'] : false;
+
+		if ( 'center' == $align )
+		{
+			$prefix  = '<div class="center">';
+			$postfix = '</div>';
+			$align   = 'none';
+		}
+
+		if ( !isset( $params['width'] ) ) {
+			$params['width'] = $img->getWidth( $page );
+			if( $thumb || $framed ) {
+				$wopt = $wgUser->getOption( 'thumbsize' );
+
+				if( !isset( $wgThumbLimits[$wopt] ) ) {
+					 $wopt = User::getDefaultOption( 'thumbsize' );
+				}
+
+				$params['width'] = min( $params['width'], $wgThumbLimits[$wopt] );
+			}
+		}
+
+		if ( $thumb || $framed ) {
+
+			# Create a thumbnail. Alignment depends on language
+			# writing direction, # right aligned for left-to-right-
+			# languages ("Western languages"), left-aligned
+			# for right-to-left-languages ("Semitic languages")
+			#
+			# If  thumbnail width has not been provided, it is set
+			# to the default user option as specified in Language*.php
+			if ( $align == '' ) {
+				$align = $wgContLang->isRTL() ? 'left' : 'right';
+			}
+			return $prefix.$this->makeThumbLinkObj( $img, $label, $alt, $align, $params, $framed, $manual_thumb ).$postfix;
+		}
+
+		if ( $params['width'] && $img->exists() ) {
+			# Create a resized image, without the additional thumbnail features
+			$thumb = $img->transform( $params );
+		} else {
+			$thumb = false;
+		}
+
+		if ( $page ) {
+			$query = 'page=' . urlencode( $page );
+		} else {
+			$query = '';
+		}
+		$u = $nt->getLocalURL( $query );
+		$imgAttribs = array(
+			'alt' => $alt,
+			'longdesc' => $u
+		);
+		if ( $valign ) {
+			$imgAttribs['style'] = "vertical-align: $valign";
+		}
+		$linkAttribs = array(
+			'href' => $u,
+			'class' => 'image',
+			'title' => $alt
+		);
+
+		if ( !$thumb ) {
+			$s = $this->makeBrokenImageLinkObj( $img->getTitle() );
+		} else {
+			$s = $thumb->toHtml( $imgAttribs, $linkAttribs );
+		}
+		if ( '' != $align ) {
+			$s = "<div class=\"float{$align}\"><span>{$s}</span></div>";
+		}
+		return str_replace("\n", ' ',$prefix.$s.$postfix);
+	}
+
+	/**
+	 * Make HTML for a thumbnail including image, border and caption
+	 * $img is an Image object
+	 */
+	function makeThumbLinkObj( $img, $label = '', $alt, $align = 'right', $params = array(), $framed=false , $manual_thumb = "" ) {
+		global $wgStylePath, $wgContLang;
+		$thumbUrl = '';
+		$error = '';
+
+		$page = isset( $params['page'] ) ? $params['page'] : false;
+
+		if ( empty( $params['width'] ) ) {
+			$params['width'] = 180;
+		}
+		$thumb = false;
+		if ( $manual_thumb != '' ) {
+			# Use manually specified thumbnail
+			$manual_title = Title::makeTitleSafe( NS_IMAGE, $manual_thumb );
+			if( $manual_title ) {
+				$manual_img = new Image( $manual_title );
+				$thumb = $manual_img->getUnscaledThumb();
+			}
+		} elseif ( $framed ) {
+			// Use image dimensions, don't scale
+			$thumb = $img->getUnscaledThumb( $page );
+		} else {
+			$thumb = $img->transform( $params );
+		}
+
+		if ( $thumb ) {
+			$outerWidth = $thumb->getWidth() + 2;
+		} else {
+			$outerWidth = $params['width'] + 2;
+		}
+
+		$query = $page ? 'page=' . urlencode( $page ) : '';
+		$u = $img->getTitle()->getLocalURL( $query );
+
+		$more = htmlspecialchars( wfMsg( 'thumbnail-more' ) );
+		$magnifyalign = $wgContLang->isRTL() ? 'left' : 'right';
+		$textalign = $wgContLang->isRTL() ? ' style="text-align:right"' : '';
+
+		$s = "<div class=\"thumb t{$align}\"><div class=\"thumbinner\" style=\"width:{$outerWidth}px;\">";
+		if ( !$thumb ) {
+			$s .= htmlspecialchars( wfMsg( 'thumbnail_error', '' ) );
+			$zoomicon = '';
+		} elseif( !$img->exists() ) {
+			$s .= $this->makeBrokenImageLinkObj( $img->getTitle() );
+			$zoomicon = '';
+		} else {
+			$imgAttribs = array(
+				'alt' => $alt,
+				'longdesc' => $u,
+				'class' => 'thumbimage'
+			);
+			$linkAttribs = array(
+				'href' => $u,
+				'class' => 'internal',
+				'title' => $alt
+			);
+				
+			$s .= $thumb->toHtml( $imgAttribs, $linkAttribs );
+			if ( $framed ) {
+				$zoomicon="";
+			} else {
+				$zoomicon =  '<div class="magnify" style="float:'.$magnifyalign.'">'.
+					'<a href="'.$u.'" class="internal" title="'.$more.'">'.
+					'<img src="'.$wgStylePath.'/common/images/magnify-clip.png" ' .
+					'width="15" height="11" alt="" /></a></div>';
+			}
+		}
+		$s .= '  <div class="thumbcaption"'.$textalign.'>'.$zoomicon.$label."</div></div></div>";
+		return str_replace("\n", ' ', $s);
+	}
+
+	/**
+	 * Pass a title object, not a title string
+	 */
+	function makeBrokenImageLinkObj( $nt, $text = '', $query = '', $trail = '', $prefix = '' ) {
+		# Fail gracefully
+		if ( ! isset($nt) ) {
+			# throw new MWException();
+			return "<!-- ERROR -->{$prefix}{$text}{$trail}";
+		}
+
+		$fname = 'Linker::makeBrokenImageLinkObj';
+		wfProfileIn( $fname );
+
+		$q = 'wpDestFile=' . urlencode( $nt->getDBkey() );
+		if ( '' != $query ) {
+			$q .= "&$query";
+		}
+		$uploadTitle = SpecialPage::getTitleFor( 'Upload' );
+		$url = $uploadTitle->escapeLocalURL( $q );
+
+		if ( '' == $text ) {
+			$text = htmlspecialchars( $nt->getPrefixedText() );
+		}
+		$style = $this->getInternalLinkAttributesObj( $nt, $text, "yes" );
+		list( $inside, $trail ) = Linker::splitTrail( $trail );
+		$s = "<a href=\"{$url}\"{$style}>{$prefix}{$text}{$inside}</a>{$trail}";
+
+		wfProfileOut( $fname );
+		return $s;
+	}
+
+	/** @todo document */
+	function makeMediaLink( $name, /* wtf?! */ $url, $alt = '' ) {
+		$nt = Title::makeTitleSafe( NS_IMAGE, $name );
+		return $this->makeMediaLinkObj( $nt, $alt );
+	}
+
+	/**
+	 * Create a direct link to a given uploaded file.
+	 *
+	 * @param $title Title object.
+	 * @param $text  String: pre-sanitized HTML
+	 * @return string HTML
+	 *
+	 * @public
+	 * @todo Handle invalid or missing images better.
+	 */
+	function makeMediaLinkObj( $title, $text = '' ) {
+		if( is_null( $title ) ) {
+			### HOTFIX. Instead of breaking, return empty string.
+			return $text;
+		} else {
+			$img  = new Image( $title );
+			if( $img->exists() ) {
+				$url  = $img->getURL();
+				$class = 'internal';
+			} else {
+				$upload = SpecialPage::getTitleFor( 'Upload' );
+				$url = $upload->getLocalUrl( 'wpDestFile=' . urlencode( $img->getName() ) );
+				$class = 'new';
+			}
+			$alt = htmlspecialchars( $title->getText() );
+			if( $text == '' ) {
+				$text = $alt;
+			}
+			$u = htmlspecialchars( $url );
+			return "<a href=\"{$u}\" class=\"$class\" title=\"{$alt}\">{$text}</a>";
+		}
+	}
+
+	/** @todo document */
+	function specialLink( $name, $key = '' ) {
+		global $wgContLang;
+
+		if ( '' == $key ) { $key = strtolower( $name ); }
+		$pn = $wgContLang->ucfirst( $name );
+		return $this->makeKnownLink( $wgContLang->specialPage( $pn ),
+		  wfMsg( $key ) );
+	}
+
+	/** @todo document */
+	function makeExternalLink( $url, $text, $escape = true, $linktype = '', $ns = null ) {
+		$style = $this->getExternalLinkAttributes( $url, $text, 'external ' . $linktype );
+		global $wgNoFollowLinks, $wgNoFollowNsExceptions;
+		if( $wgNoFollowLinks && !(isset($ns) && in_array($ns, $wgNoFollowNsExceptions)) ) {
+			$style .= ' rel="nofollow"';
+		}
+		$url = htmlspecialchars( $url );
+		if( $escape ) {
+			$text = htmlspecialchars( $text );
+		}
+		return '<a href="'.$url.'"'.$style.'>'.$text.'</a>';
+	}
+
+	/**
+	 * Make user link (or user contributions for unregistered users)
+	 * @param $userId   Integer: user id in database.
+	 * @param $userText String: user name in database
+	 * @return string HTML fragment
+	 * @private
+	 */
+	function userLink( $userId, $userText ) {
+		$encName = htmlspecialchars( $userText );
+		if( $userId == 0 ) {
+			$contribsPage = SpecialPage::getTitleFor( 'Contributions', $userText );
+			return $this->makeKnownLinkObj( $contribsPage,
+				$encName);
+		} else {
+			$userPage = Title::makeTitle( NS_USER, $userText );
+			return $this->makeLinkObj( $userPage, $encName );
+		}
+	}
+
+	/**
+	 * @param $userId Integer: user id in database.
+	 * @param $userText String: user name in database.
+	 * @param $redContribsWhenNoEdits Bool: return a red contribs link when the user had no edits and this is true.
+	 * @return string HTML fragment with talk and/or block links
+	 */
+	public function userToolLinks( $userId, $userText, $redContribsWhenNoEdits = false ) {
+		global $wgUser, $wgDisableAnonTalk, $wgSysopUserBans;
+		$talkable = !( $wgDisableAnonTalk && 0 == $userId );
+		$blockable = ( $wgSysopUserBans || 0 == $userId );
+
+		$items = array();
+		if( $talkable ) {
+			$items[] = $this->userTalkLink( $userId, $userText );
+		}
+		if( $userId ) {
+			// check if the user has an edit
+			if( $redContribsWhenNoEdits && User::edits( $userId ) == 0 ) {
+				$style = "class='new'";
+			} else {
+				$style = '';
+			}
+			$contribsPage = SpecialPage::getTitleFor( 'Contributions', $userText );
+
+			$items[] = $this->makeKnownLinkObj( $contribsPage, wfMsgHtml( 'contribslink' ), '', '', '', '', $style );
+		}
+		if( $blockable && $wgUser->isAllowed( 'block' ) ) {
+			$items[] = $this->blockLink( $userId, $userText );
+		}
+
+		if( $items ) {
+			return ' (' . implode( ' | ', $items ) . ')';
+		} else {
+			return '';
+		}
+	}
+
+	/**
+	 * Alias for userToolLinks( $userId, $userText, true );
+	 */
+	public function userToolLinksRedContribs( $userId, $userText ) {
+		return $this->userToolLinks( $userId, $userText, true );
+	}
+
+
+	/**
+	 * @param $userId Integer: user id in database.
+	 * @param $userText String: user name in database.
+	 * @return string HTML fragment with user talk link
+	 * @private
+	 */
+	function userTalkLink( $userId, $userText ) {
+		$userTalkPage = Title::makeTitle( NS_USER_TALK, $userText );
+		$userTalkLink = $this->makeLinkObj( $userTalkPage, wfMsgHtml( 'talkpagelinktext' ) );
+		return $userTalkLink;
+	}
+
+	/**
+	 * @param $userId Integer: userid
+	 * @param $userText String: user name in database.
+	 * @return string HTML fragment with block link
+	 * @private
+	 */
+	function blockLink( $userId, $userText ) {
+		$blockPage = SpecialPage::getTitleFor( 'Blockip', $userText );
+		$blockLink = $this->makeKnownLinkObj( $blockPage,
+			wfMsgHtml( 'blocklink' ) );
+		return $blockLink;
+	}
+	
+	/**
+	 * Generate a user link if the current user is allowed to view it
+	 * @param $rev Revision object.
+	 * @return string HTML
+	 */
+	function revUserLink( $rev ) {
+		if( $rev->userCan( Revision::DELETED_USER ) ) {
+			$link = $this->userLink( $rev->getRawUser(), $rev->getRawUserText() );
+		} else {
+			$link = wfMsgHtml( 'rev-deleted-user' );
+		}
+		if( $rev->isDeleted( Revision::DELETED_USER ) ) {
+			return '<span class="history-deleted">' . $link . '</span>';
+		}
+		return $link;
+	}
+
+	/**
+	 * Generate a user tool link cluster if the current user is allowed to view it
+	 * @param $rev Revision object.
+	 * @return string HTML
+	 */
+	function revUserTools( $rev ) {
+		if( $rev->userCan( Revision::DELETED_USER ) ) {
+			$link = $this->userLink( $rev->getRawUser(), $rev->getRawUserText() ) .
+				' ' .
+				$this->userToolLinks( $rev->getRawUser(), $rev->getRawUserText() );
+		} else {
+			$link = wfMsgHtml( 'rev-deleted-user' );
+		}
+		if( $rev->isDeleted( Revision::DELETED_USER ) ) {
+			return '<span class="history-deleted">' . $link . '</span>';
+		}
+		return $link;
+	}
+	
+	/**
+	 * This function is called by all recent changes variants, by the page history,
+	 * and by the user contributions list. It is responsible for formatting edit
+	 * comments. It escapes any HTML in the comment, but adds some CSS to format
+	 * auto-generated comments (from section editing) and formats [[wikilinks]].
+	 *
+	 * @author Erik Moeller <moeller@scireview.de>
+	 *
+	 * Note: there's not always a title to pass to this function.
+	 * Since you can't set a default parameter for a reference, I've turned it
+	 * temporarily to a value pass. Should be adjusted further. --brion
+	 *
+	 * @param string $comment
+	 * @param mixed $title Title object (to generate link to the section in autocomment) or null
+	 * @param bool $local Whether section links should refer to local page
+	 */
+	function formatComment($comment, $title = NULL, $local = false) {
+		wfProfileIn( __METHOD__ );
+
+		global $wgContLang;
+		$comment = str_replace( "\n", " ", $comment );
+		$comment = htmlspecialchars( $comment );
+
+		# The pattern for autogen comments is / * foo * /, which makes for
+		# some nasty regex.
+		# We look for all comments, match any text before and after the comment,
+		# add a separator where needed and format the comment itself with CSS
+		$match = array();
+		while (preg_match('/(.*)\/\*\s*(.*?)\s*\*\/(.*)/', $comment,$match)) {
+			$pre=$match[1];
+			$auto=$match[2];
+			$post=$match[3];
+			$link='';
+			if( $title ) {
+				$section = $auto;
+
+				# Generate a valid anchor name from the section title.
+				# Hackish, but should generally work - we strip wiki
+				# syntax, including the magic [[: that is used to
+				# "link rather than show" in case of images and
+				# interlanguage links.
+				$section = str_replace( '[[:', '', $section );
+				$section = str_replace( '[[', '', $section );
+				$section = str_replace( ']]', '', $section );
+				if ( $local ) {
+					$sectionTitle = Title::newFromText( '#' . $section);
+				} else {
+					$sectionTitle = wfClone( $title );
+					$sectionTitle->mFragment = $section;
+				}
+				$link = $this->makeKnownLinkObj( $sectionTitle, wfMsg( 'sectionlink' ) );
+			}
+			$sep='-';
+			$auto=$link.$auto;
+			if($pre) { $auto = $sep.' '.$auto; }
+			if($post) { $auto .= ' '.$sep; }
+			$auto='<span class="autocomment">'.$auto.'</span>';
+			$comment=$pre.$auto.$post;
+		}
+
+		# format regular and media links - all other wiki formatting
+		# is ignored
+		$medians = '(?:' . preg_quote( Namespace::getCanonicalName( NS_MEDIA ), '/' ) . '|';
+		$medians .= preg_quote( $wgContLang->getNsText( NS_MEDIA ), '/' ) . '):';
+		while(preg_match('/\[\[:?(.*?)(\|(.*?))*\]\](.*)$/',$comment,$match)) {
+			# Handle link renaming [[foo|text]] will show link as "text"
+			if( "" != $match[3] ) {
+				$text = $match[3];
+			} else {
+				$text = $match[1];
+			}
+			$submatch = array();
+			if( preg_match( '/^' . $medians . '(.*)$/i', $match[1], $submatch ) ) {
+				# Media link; trail not supported.
+				$linkRegexp = '/\[\[(.*?)\]\]/';
+				$thelink = $this->makeMediaLink( $submatch[1], "", $text );
+			} else {
+				# Other kind of link
+				if( preg_match( $wgContLang->linkTrail(), $match[4], $submatch ) ) {
+					$trail = $submatch[1];
+				} else {
+					$trail = "";
+				}
+				$linkRegexp = '/\[\[(.*?)\]\]' . preg_quote( $trail, '/' ) . '/';
+				if (isset($match[1][0]) && $match[1][0] == ':')
+					$match[1] = substr($match[1], 1);
+				$thelink = $this->makeLink( $match[1], $text, "", $trail );
+			}
+			$comment = preg_replace( $linkRegexp, StringUtils::escapeRegexReplacement( $thelink ), $comment, 1 );
+		}
+		wfProfileOut( __METHOD__ );
+		return $comment;
+	}
+
+	/**
+	 * Wrap a comment in standard punctuation and formatting if
+	 * it's non-empty, otherwise return empty string.
+	 *
+	 * @param string $comment
+	 * @param mixed $title Title object (to generate link to section in autocomment) or null
+	 * @param bool $local Whether section links should refer to local page
+	 *
+	 * @return string
+	 */
+	function commentBlock( $comment, $title = NULL, $local = false ) {
+		// '*' used to be the comment inserted by the software way back
+		// in antiquity in case none was provided, here for backwards
+		// compatability, acc. to brion -ævar
+		if( $comment == '' || $comment == '*' ) {
+			return '';
+		} else {
+			$formatted = $this->formatComment( $comment, $title, $local );
+			return " <span class=\"comment\">($formatted)</span>";
+		}
+	}
+	
+	/**
+	 * Wrap and format the given revision's comment block, if the current
+	 * user is allowed to view it.
+	 *
+	 * @param Revision $rev
+	 * @param bool $local Whether section links should refer to local page
+	 * @return string HTML
+	 */
+	function revComment( Revision $rev, $local = false ) {
+		if( $rev->userCan( Revision::DELETED_COMMENT ) ) {
+			$block = $this->commentBlock( $rev->getRawComment(), $rev->getTitle(), $local );
+		} else {
+			$block = " <span class=\"comment\">" .
+				wfMsgHtml( 'rev-deleted-comment' ) . "</span>";
+		}
+		if( $rev->isDeleted( Revision::DELETED_COMMENT ) ) {
+			return " <span class=\"history-deleted\">$block</span>";
+		}
+		return $block;
+	}
+
+	/** @todo document */
+	function tocIndent() {
+		return "\n<ul>";
+	}
+
+	/** @todo document */
+	function tocUnindent($level) {
+		return "</li>\n" . str_repeat( "</ul>\n</li>\n", $level>0 ? $level : 0 );
+	}
+
+	/**
+	 * parameter level defines if we are on an indentation level
+	 */
+	function tocLine( $anchor, $tocline, $tocnumber, $level ) {
+		return "\n<li class=\"toclevel-$level\"><a href=\"#" .
+			$anchor . '"><span class="tocnumber">' .
+			$tocnumber . '</span> <span class="toctext">' .
+			$tocline . '</span></a>';
+	}
+
+	/** @todo document */
+	function tocLineEnd() {
+		return "</li>\n";
+ 	}
+
+	/** @todo document */
+	function tocList($toc) {
+		global $wgJsMimeType;
+		$title =  wfMsgHtml('toc') ;
+		return
+		   '<table id="toc" class="toc" summary="' . $title .'"><tr><td>'
+		 . '<div id="toctitle"><h2>' . $title . "</h2></div>\n"
+		 . $toc
+		 # no trailing newline, script should not be wrapped in a
+		 # paragraph
+		 . "</ul>\n</td></tr></table>"
+		 . '<script type="' . $wgJsMimeType . '">'
+		 . ' if (window.showTocToggle) {'
+		 . ' var tocShowText = "' . wfEscapeJsString( wfMsg('showtoc') ) . '";'
+		 . ' var tocHideText = "' . wfEscapeJsString( wfMsg('hidetoc') ) . '";'
+		 . ' showTocToggle();'
+		 . ' } '
+		 . "</script>\n";
+	}
+
+	/** @todo document */
+	public function editSectionLinkForOther( $title, $section ) {
+		global $wgContLang;
+
+		$title = Title::newFromText( $title );
+		$editurl = '&section='.$section;
+		$url = $this->makeKnownLinkObj( $title, wfMsg('editsection'), 'action=edit'.$editurl );
+
+		return "<span class=\"editsection\">[".$url."]</span>";
+
+	}
+
+	/**
+	 * @param $title Title object.
+	 * @param $section Integer: section number.
+	 * @param $hint Link String: title, or default if omitted or empty
+	 */
+	public function editSectionLink( $nt, $section, $hint='' ) {
+		global $wgContLang;
+
+		$editurl = '&section='.$section;
+		$hint = ( $hint=='' ) ? '' : ' title="' . wfMsgHtml( 'editsectionhint', htmlspecialchars( $hint ) ) . '"';
+		$url = $this->makeKnownLinkObj( $nt, wfMsg('editsection'), 'action=edit'.$editurl, '', '', '',  $hint );
+
+		return "<span class=\"editsection\">[".$url."]</span>";
+	}
+
+	/**
+	 * Create a headline for content
+	 *
+	 * @param int    $level   The level of the headline (1-6)
+	 * @param string $attribs Any attributes for the headline, starting with a space and ending with '>'
+	 *                        This *must* be at least '>' for no attribs
+	 * @param string $anchor  The anchor to give the headline (the bit after the #)
+	 * @param string $text    The text of the header
+	 * @param string $link    HTML to add for the section edit link
+	 *
+	 * @return string HTML headline
+	 */
+	public function makeHeadline( $level, $attribs, $anchor, $text, $link ) {
+		return "<a name=\"$anchor\"></a><h$level$attribs$link <span class=\"mw-headline\">$text</span></h$level>";
+	}
+
+	/**
+	 * Split a link trail, return the "inside" portion and the remainder of the trail
+	 * as a two-element array
+	 *
+	 * @static
+	 */
+	static function splitTrail( $trail ) {
+		static $regex = false;
+		if ( $regex === false ) {
+			global $wgContLang;
+			$regex = $wgContLang->linkTrail();
+		}
+		$inside = '';
+		if ( '' != $trail ) {
+			$m = array();
+			if ( preg_match( $regex, $trail, $m ) ) {
+				$inside = $m[1];
+				$trail = $m[2];
+			}
+		}
+		return array( $inside, $trail );
+	}
+
+	/**
+	 * Generate a rollback link for a given revision.  Currently it's the
+	 * caller's responsibility to ensure that the revision is the top one. If
+	 * it's not, of course, the user will get an error message.
+	 *
+	 * If the calling page is called with the parameter &bot=1, all rollback
+	 * links also get that parameter. It causes the edit itself and the rollback
+	 * to be marked as "bot" edits. Bot edits are hidden by default from recent
+	 * changes, so this allows sysops to combat a busy vandal without bothering
+	 * other users.
+	 *
+	 * @param Revision $rev
+	 */
+	function generateRollback( $rev ) {
+		global $wgUser, $wgRequest;
+		$title = $rev->getTitle();
+
+		$extraRollback = $wgRequest->getBool( 'bot' ) ? '&bot=1' : '';
+		$extraRollback .= '&token=' . urlencode(
+			$wgUser->editToken( array( $title->getPrefixedText(), $rev->getUserText() ) ) );
+		return '<span class="mw-rollback-link">['. $this->makeKnownLinkObj( $title,
+		  	wfMsg('rollbacklink'),
+		  	'action=rollback&from=' . urlencode( $rev->getUserText() ) . $extraRollback ) .']</span>';
+	}
+
+	/**
+	 * Returns HTML for the "templates used on this page" list.
+	 *
+	 * @param array $templates Array of templates from Article::getUsedTemplate
+	 * or similar
+	 * @param bool $preview Whether this is for a preview
+	 * @param bool $section Whether this is for a section edit
+	 * @return string HTML output
+	 */
+	public function formatTemplates( $templates, $preview = false, $section = false) {
+		global $wgUser;
+		wfProfileIn( __METHOD__ );
+
+		$sk = $wgUser->getSkin();
+
+		$outText = '';
+		if ( count( $templates ) > 0 ) {
+			# Do a batch existence check
+			$batch = new LinkBatch;
+			foreach( $templates as $title ) {
+				$batch->addObj( $title );
+			}
+			$batch->execute();
+
+			# Construct the HTML
+			$outText = '<div class="mw-templatesUsedExplanation">';
+			if ( $preview ) {
+				$outText .= wfMsgExt( 'templatesusedpreview', array( 'parse' ) );
+			} elseif ( $section ) {
+				$outText .= wfMsgExt( 'templatesusedsection', array( 'parse' ) );
+			} else {
+				$outText .= wfMsgExt( 'templatesused', array( 'parse' ) );
+			}
+			$outText .= '</div><ul>';
+
+			foreach ( $templates as $titleObj ) {
+				$r = $titleObj->getRestrictions( 'edit' );
+				if ( in_array( 'sysop', $r ) ) { 
+					$protected = wfMsgExt( 'template-protected', array( 'parseinline' ) );
+				} elseif ( in_array( 'autoconfirmed', $r ) ) {
+					$protected = wfMsgExt( 'template-semiprotected', array( 'parseinline' ) );
+				} else {
+					$protected = '';
+				}
+				$outText .= '<li>' . $sk->makeLinkObj( $titleObj ) . ' ' . $protected . '</li>';
+			}
+			$outText .= '</ul>';
+		}
+		wfProfileOut( __METHOD__  );
+		return $outText;
+	}
+	
+	/**
+	 * Format a size in bytes for output, using an appropriate
+	 * unit (B, KB, MB or GB) according to the magnitude in question
+	 *
+	 * @param $size Size to format
+	 * @return string
+	 */
+	public function formatSize( $size ) {
+		global $wgLang;
+		// For small sizes no decimal places necessary
+		$round = 0;
+		if( $size > 1024 ) {
+			$size = $size / 1024;
+			if( $size > 1024 ) {
+				$size = $size / 1024;
+				// For MB and bigger two decimal places are smarter
+				$round = 2;
+				if( $size > 1024 ) {
+					$size = $size / 1024;
+					$msg = 'size-gigabytes';
+				} else {
+					$msg = 'size-megabytes';
+				}
+			} else {
+				$msg = 'size-kilobytes';
+			}
+		} else {
+			$msg = 'size-bytes';
+		}
+		$size = round( $size, $round );
+		return wfMsgHtml( $msg, $wgLang->formatNum( $size ) );
+	}
+
+	/**
+	 * Given the id of an interface element, constructs the appropriate title
+	 * and accesskey attributes from the system messages.  (Note, this is usu-
+	 * ally the id but isn't always, because sometimes the accesskey needs to
+	 * go on a different element than the id, for reverse-compatibility, etc.)
+	 *
+	 * @param string $name Id of the element, minus prefixes.
+	 * @return string title and accesskey attributes, ready to drop in an
+	 *   element (e.g., ' title="This does something [x]" accesskey="x"').
+	 */
+	public function tooltipAndAccesskey($name) {
+		$out = '';
+
+		$tooltip = wfMsg('tooltip-'.$name);
+		if (!wfEmptyMsg('tooltip-'.$name, $tooltip) && $tooltip != '-') {
+			// Compatibility: formerly some tooltips had [alt-.] hardcoded
+			$tooltip = preg_replace( "/ ?\[alt-.\]$/", '', $tooltip );
+			$out .= ' title="'.htmlspecialchars($tooltip);
+		}
+		$accesskey = wfMsg('accesskey-'.$name);
+		if ($accesskey && $accesskey != '-' && !wfEmptyMsg('accesskey-'.$name, $accesskey)) {
+			if ($out) $out .= " [$accesskey]\" accesskey=\"$accesskey\"";
+			else $out .= " title=\"[$accesskey]\" accesskey=\"$accesskey\"";
+		} elseif ($out) {
+			$out .= '"';
+		}
+		return $out;
+	}
+
+	/**
+	 * Given the id of an interface element, constructs the appropriate title
+	 * attribute from the system messages.  (Note, this is usually the id but
+	 * isn't always, because sometimes the accesskey needs to go on a different
+	 * element than the id, for reverse-compatibility, etc.)
+	 *
+	 * @param string $name Id of the element, minus prefixes.
+	 * @return string title attribute, ready to drop in an element
+	 * (e.g., ' title="This does something"').
+	 */
+	public function tooltip($name) {
+		$out = '';
+
+		$tooltip = wfMsg('tooltip-'.$name);
+		if (!wfEmptyMsg('tooltip-'.$name, $tooltip) && $tooltip != '-') {
+			$out = ' title="'.htmlspecialchars($tooltip).'"';
+		}
+
+		return $out;
+	}
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/LinksUpdate.php
===================================================================
--- /MediaWiki/branches/1.11/includes/LinksUpdate.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/LinksUpdate.php	(revision 1280)
@@ -0,0 +1,597 @@
+<?php
+/**
+ * See docs/deferred.txt
+ * 
+ * @todo document (e.g. one-sentence top-level class description).
+ */
+class LinksUpdate {
+
+	/**@{{
+	 * @private
+	 */
+	var 	$mId,            //!< Page ID of the article linked from
+		$mTitle,         //!< Title object of the article linked from
+		$mLinks,         //!< Map of title strings to IDs for the links in the document
+		$mImages,        //!< DB keys of the images used, in the array key only
+		$mTemplates,     //!< Map of title strings to IDs for the template references, including broken ones
+		$mExternals,     //!< URLs of external links, array key only
+		$mCategories,    //!< Map of category names to sort keys
+		$mInterlangs,    //!< Map of language codes to titles
+		$mDb,            //!< Database connection reference
+		$mOptions,       //!< SELECT options to be used (array)
+		$mRecursive;     //!< Whether to queue jobs for recursive updates
+	/**@}}*/
+
+	/**
+	 * Constructor
+	 * Initialize private variables
+	 * @param $title Integer: FIXME
+	 * @param $parserOutput FIXME
+	 * @param $recursive Boolean: FIXME, default 'true'.
+	 */
+	function LinksUpdate( $title, $parserOutput, $recursive = true ) {
+		global $wgAntiLockFlags;
+
+		if ( $wgAntiLockFlags & ALF_NO_LINK_LOCK ) {
+			$this->mOptions = array();
+		} else {
+			$this->mOptions = array( 'FOR UPDATE' );
+		}
+		$this->mDb = wfGetDB( DB_MASTER );
+
+		if ( !is_object( $title ) ) {
+			throw new MWException( "The calling convention to LinksUpdate::LinksUpdate() has changed. " .
+				"Please see Article::editUpdates() for an invocation example.\n" );
+		}
+		$this->mTitle = $title;
+		$this->mId = $title->getArticleID();
+
+		$this->mLinks = $parserOutput->getLinks();
+		$this->mImages = $parserOutput->getImages();
+		$this->mTemplates = $parserOutput->getTemplates();
+		$this->mExternals = $parserOutput->getExternalLinks();
+		$this->mCategories = $parserOutput->getCategories();
+
+		# Convert the format of the interlanguage links
+		# I didn't want to change it in the ParserOutput, because that array is passed all 
+		# the way back to the skin, so either a skin API break would be required, or an 
+		# inefficient back-conversion.
+		$ill = $parserOutput->getLanguageLinks();
+		$this->mInterlangs = array();
+		foreach ( $ill as $link ) {
+			list( $key, $title ) = explode( ':', $link, 2 );
+			$this->mInterlangs[$key] = $title;
+		}
+
+		$this->mRecursive = $recursive;
+	}
+
+	/**
+	 * Update link tables with outgoing links from an updated article
+	 */
+	function doUpdate() {
+		global $wgUseDumbLinkUpdate;
+		if ( $wgUseDumbLinkUpdate ) {
+			$this->doDumbUpdate();
+		} else {
+			$this->doIncrementalUpdate();
+		}
+	}
+
+	function doIncrementalUpdate() {
+		$fname = 'LinksUpdate::doIncrementalUpdate';
+		wfProfileIn( $fname );
+		
+		# Page links
+		$existing = $this->getExistingLinks();
+		$this->incrTableUpdate( 'pagelinks', 'pl', $this->getLinkDeletions( $existing ),
+			$this->getLinkInsertions( $existing ) );
+
+		# Image links
+		$existing = $this->getExistingImages();
+		$this->incrTableUpdate( 'imagelinks', 'il', $this->getImageDeletions( $existing ),
+			$this->getImageInsertions( $existing ) );
+
+		# Invalidate all image description pages which had links added or removed
+		$imageUpdates = array_diff_key( $existing, $this->mImages ) + array_diff_key( $this->mImages, $existing );
+		$this->invalidateImageDescriptions( $imageUpdates );
+
+		# External links
+		$existing = $this->getExistingExternals();
+		$this->incrTableUpdate( 'externallinks', 'el', $this->getExternalDeletions( $existing ),
+	        $this->getExternalInsertions( $existing ) );
+
+		# Language links
+		$existing = $this->getExistingInterlangs();
+		$this->incrTableUpdate( 'langlinks', 'll', $this->getInterlangDeletions( $existing ),
+			$this->getInterlangInsertions( $existing ) );
+
+		# Template links
+		$existing = $this->getExistingTemplates();
+		$this->incrTableUpdate( 'templatelinks', 'tl', $this->getTemplateDeletions( $existing ),
+			$this->getTemplateInsertions( $existing ) );
+
+		# Category links
+		$existing = $this->getExistingCategories();
+		$this->incrTableUpdate( 'categorylinks', 'cl', $this->getCategoryDeletions( $existing ),
+			$this->getCategoryInsertions( $existing ) );
+
+		# Invalidate all categories which were added, deleted or changed (set symmetric difference)
+		$categoryUpdates = array_diff_assoc( $existing, $this->mCategories ) + array_diff_assoc( $this->mCategories, $existing );
+		$this->invalidateCategories( $categoryUpdates );
+
+		# Refresh links of all pages including this page
+		# This will be in a separate transaction
+		if ( $this->mRecursive ) {
+			$this->queueRecursiveJobs();
+		}
+		
+		wfProfileOut( $fname );
+	}
+
+	/**
+	 * Link update which clears the previous entries and inserts new ones
+	 * May be slower or faster depending on level of lock contention and write speed of DB
+	 * Also useful where link table corruption needs to be repaired, e.g. in refreshLinks.php
+	 */
+	function doDumbUpdate() {
+		$fname = 'LinksUpdate::doDumbUpdate';
+		wfProfileIn( $fname );
+
+		# Refresh category pages and image description pages
+		$existing = $this->getExistingCategories();
+		$categoryUpdates = array_diff_assoc( $existing, $this->mCategories ) + array_diff_assoc( $this->mCategories, $existing );
+		$existing = $this->getExistingImages();
+		$imageUpdates = array_diff_key( $existing, $this->mImages ) + array_diff_key( $this->mImages, $existing );
+
+		$this->dumbTableUpdate( 'pagelinks',     $this->getLinkInsertions(),     'pl_from' );
+		$this->dumbTableUpdate( 'imagelinks',    $this->getImageInsertions(),    'il_from' );
+		$this->dumbTableUpdate( 'categorylinks', $this->getCategoryInsertions(), 'cl_from' );
+		$this->dumbTableUpdate( 'templatelinks', $this->getTemplateInsertions(), 'tl_from' );
+		$this->dumbTableUpdate( 'externallinks', $this->getExternalInsertions(), 'el_from' );
+		$this->dumbTableUpdate( 'langlinks',     $this->getInterlangInsertions(), 'll_from' );
+
+		# Update the cache of all the category pages and image description pages which were changed
+		$this->invalidateCategories( $categoryUpdates );
+		$this->invalidateImageDescriptions( $imageUpdates );
+
+		# Refresh links of all pages including this page
+		# This will be in a separate transaction
+		if ( $this->mRecursive ) {
+			$this->queueRecursiveJobs();
+		}
+
+		wfProfileOut( $fname );
+	}
+
+	function queueRecursiveJobs() {
+		wfProfileIn( __METHOD__ );
+		
+		$batchSize = 100;
+		$dbr = wfGetDB( DB_SLAVE );
+		$res = $dbr->select( array( 'templatelinks', 'page' ), 
+			array( 'page_namespace', 'page_title' ),
+			array( 
+				'page_id=tl_from', 
+				'tl_namespace' => $this->mTitle->getNamespace(),
+				'tl_title' => $this->mTitle->getDBkey()
+			), __METHOD__
+		);
+
+		$done = false;
+		while ( !$done ) {
+			$jobs = array();
+			for ( $i = 0; $i < $batchSize; $i++ ) {
+				$row = $dbr->fetchObject( $res );
+				if ( !$row ) {
+					$done = true;
+					break;
+				}
+				$title = Title::makeTitle( $row->page_namespace, $row->page_title );
+				$jobs[] = Job::factory( 'refreshLinks', $title );
+			}
+			Job::batchInsert( $jobs );
+		}
+		$dbr->freeResult( $res );
+		wfProfileOut( __METHOD__ );
+	}
+	
+	/**
+	 * Invalidate the cache of a list of pages from a single namespace
+	 *
+	 * @param integer $namespace
+	 * @param array $dbkeys
+	 */
+	function invalidatePages( $namespace, $dbkeys ) {
+		$fname = 'LinksUpdate::invalidatePages';
+		
+		if ( !count( $dbkeys ) ) {
+			return;
+		}
+		
+		/**
+		 * Determine which pages need to be updated
+		 * This is necessary to prevent the job queue from smashing the DB with
+		 * large numbers of concurrent invalidations of the same page
+		 */
+		$now = $this->mDb->timestamp();
+		$ids = array();
+		$res = $this->mDb->select( 'page', array( 'page_id' ), 
+			array( 
+				'page_namespace' => $namespace,
+				'page_title IN (' . $this->mDb->makeList( $dbkeys ) . ')',
+				'page_touched < ' . $this->mDb->addQuotes( $now )
+			), $fname
+		);
+		while ( $row = $this->mDb->fetchObject( $res ) ) {
+			$ids[] = $row->page_id;
+		}
+		if ( !count( $ids ) ) {
+			return;
+		}
+		
+		/**
+		 * Do the update
+		 * We still need the page_touched condition, in case the row has changed since 
+		 * the non-locking select above.
+		 */
+		$this->mDb->update( 'page', array( 'page_touched' => $now ), 
+			array( 
+				'page_id IN (' . $this->mDb->makeList( $ids ) . ')',
+				'page_touched < ' . $this->mDb->addQuotes( $now )
+			), $fname
+		);
+	}
+
+	function invalidateCategories( $cats ) {
+		$this->invalidatePages( NS_CATEGORY, array_keys( $cats ) );
+	}
+
+	function invalidateImageDescriptions( $images ) {
+		$this->invalidatePages( NS_IMAGE, array_keys( $images ) );
+	}
+
+	function dumbTableUpdate( $table, $insertions, $fromField ) {
+		$fname = 'LinksUpdate::dumbTableUpdate';
+		$this->mDb->delete( $table, array( $fromField => $this->mId ), $fname );
+		if ( count( $insertions ) ) {
+			# The link array was constructed without FOR UPDATE, so there may be collisions
+			# This may cause minor link table inconsistencies, which is better than
+			# crippling the site with lock contention.
+			$this->mDb->insert( $table, $insertions, $fname, array( 'IGNORE' ) );
+		}
+	}
+
+	/**
+	 * Make a WHERE clause from a 2-d NS/dbkey array
+	 *
+	 * @param array $arr 2-d array indexed by namespace and DB key
+	 * @param string $prefix Field name prefix, without the underscore
+	 */
+	function makeWhereFrom2d( &$arr, $prefix ) {
+		$lb = new LinkBatch;
+		$lb->setArray( $arr );
+		return $lb->constructSet( $prefix, $this->mDb );
+	}
+
+	/**
+	 * Update a table by doing a delete query then an insert query
+	 * @private
+	 */
+	function incrTableUpdate( $table, $prefix, $deletions, $insertions ) {
+		$fname = 'LinksUpdate::incrTableUpdate';
+		$where = array( "{$prefix}_from" => $this->mId );
+		if ( $table == 'pagelinks' || $table == 'templatelinks' ) {
+			$clause = $this->makeWhereFrom2d( $deletions, $prefix );
+			if ( $clause ) {
+				$where[] = $clause;
+			} else {
+				$where = false;
+			}
+		} else {
+			if ( $table == 'langlinks' ) {
+				$toField = 'll_lang';
+			} else {
+				$toField = $prefix . '_to';
+			}
+			if ( count( $deletions ) ) {
+				$where[] = "$toField IN (" . $this->mDb->makeList( array_keys( $deletions ) ) . ')';
+			} else {
+				$where = false;
+			}
+		}
+		if ( $where ) {
+			$this->mDb->delete( $table, $where, $fname );
+		}
+		if ( count( $insertions ) ) {
+			$this->mDb->insert( $table, $insertions, $fname, 'IGNORE' );
+		}
+	}
+
+
+	/**
+	 * Get an array of pagelinks insertions for passing to the DB
+	 * Skips the titles specified by the 2-D array $existing
+	 * @private
+	 */
+	function getLinkInsertions( $existing = array() ) {
+		$arr = array();
+		foreach( $this->mLinks as $ns => $dbkeys ) {
+			# array_diff_key() was introduced in PHP 5.1, there is a compatibility function
+			# in GlobalFunctions.php
+			$diffs = isset( $existing[$ns] ) ? array_diff_key( $dbkeys, $existing[$ns] ) : $dbkeys;
+			foreach ( $diffs as $dbk => $id ) {
+				$arr[] = array(
+					'pl_from'      => $this->mId,
+					'pl_namespace' => $ns,
+					'pl_title'     => $dbk
+				);
+			}
+		}
+		return $arr;
+	}
+
+	/**
+	 * Get an array of template insertions. Like getLinkInsertions()
+	 * @private
+	 */
+	function getTemplateInsertions( $existing = array() ) {
+		$arr = array();
+		foreach( $this->mTemplates as $ns => $dbkeys ) {
+			$diffs = isset( $existing[$ns] ) ? array_diff_key( $dbkeys, $existing[$ns] ) : $dbkeys;
+			foreach ( $diffs as $dbk => $id ) {
+				$arr[] = array(
+					'tl_from'      => $this->mId,
+					'tl_namespace' => $ns,
+					'tl_title'     => $dbk
+				);
+			}
+		}
+		return $arr;
+	}
+
+	/**
+	 * Get an array of image insertions
+	 * Skips the names specified in $existing
+	 * @private
+	 */
+	function getImageInsertions( $existing = array() ) {
+		$arr = array();
+		$diffs = array_diff_key( $this->mImages, $existing );
+		foreach( $diffs as $iname => $dummy ) {
+			$arr[] = array(
+				'il_from' => $this->mId,
+				'il_to'   => $iname
+			);
+		}
+		return $arr;
+	}
+
+	/**
+	 * Get an array of externallinks insertions. Skips the names specified in $existing
+	 * @private
+	 */
+	function getExternalInsertions( $existing = array() ) {
+		$arr = array();
+		$diffs = array_diff_key( $this->mExternals, $existing );
+		foreach( $diffs as $url => $dummy ) {
+			$arr[] = array(
+				'el_from'   => $this->mId,
+				'el_to'     => $url,
+				'el_index'  => wfMakeUrlIndex( $url ),
+			);
+		}
+		return $arr;
+	}
+
+	/**
+	 * Get an array of category insertions
+	 * @param array $existing Array mapping existing category names to sort keys. If both
+	 * match a link in $this, the link will be omitted from the output
+	 * @private
+	 */
+	function getCategoryInsertions( $existing = array() ) {
+		$diffs = array_diff_assoc( $this->mCategories, $existing );
+		$arr = array();
+		foreach ( $diffs as $name => $sortkey ) {
+			$arr[] = array(
+				'cl_from'    => $this->mId,
+				'cl_to'      => $name,
+				'cl_sortkey' => $sortkey,
+				'cl_timestamp' => $this->mDb->timestamp()
+			);
+		}
+		return $arr;
+	}
+
+	/**
+	 * Get an array of interlanguage link insertions
+	 * @param array $existing Array mapping existing language codes to titles	 
+	 * @private
+	 */
+	function getInterlangInsertions( $existing = array() ) {
+	    $diffs = array_diff_assoc( $this->mInterlangs, $existing );
+	    $arr = array();
+	    foreach( $diffs as $lang => $title ) {
+	        $arr[] = array(
+	            'll_from'  => $this->mId,
+	            'll_lang'  => $lang,
+	            'll_title' => $title
+	        );
+	    }
+	    return $arr;
+	}
+
+	/**
+	 * Given an array of existing links, returns those links which are not in $this
+	 * and thus should be deleted.
+	 * @private
+	 */
+	function getLinkDeletions( $existing ) {
+		$del = array();
+		foreach ( $existing as $ns => $dbkeys ) {
+			if ( isset( $this->mLinks[$ns] ) ) {
+				$del[$ns] = array_diff_key( $existing[$ns], $this->mLinks[$ns] );
+			} else {
+				$del[$ns] = $existing[$ns];
+			}
+		}
+		return $del;
+	}
+
+	/**
+	 * Given an array of existing templates, returns those templates which are not in $this
+	 * and thus should be deleted.
+	 * @private
+	 */
+	function getTemplateDeletions( $existing ) {
+		$del = array();
+		foreach ( $existing as $ns => $dbkeys ) {
+			if ( isset( $this->mTemplates[$ns] ) ) {
+				$del[$ns] = array_diff_key( $existing[$ns], $this->mTemplates[$ns] );
+			} else {
+				$del[$ns] = $existing[$ns];
+			}
+		}
+		return $del;
+	}
+
+	/**
+	 * Given an array of existing images, returns those images which are not in $this
+	 * and thus should be deleted.
+	 * @private
+	 */
+	function getImageDeletions( $existing ) {
+		return array_diff_key( $existing, $this->mImages );
+	}
+
+	/** 
+	 * Given an array of existing external links, returns those links which are not
+	 * in $this and thus should be deleted.
+	 * @private
+	 */
+	function getExternalDeletions( $existing ) {
+		return array_diff_key( $existing, $this->mExternals );
+	}
+
+	/**
+	 * Given an array of existing categories, returns those categories which are not in $this
+	 * and thus should be deleted.
+	 * @private
+	 */
+	function getCategoryDeletions( $existing ) {
+		return array_diff_assoc( $existing, $this->mCategories );
+	}
+
+	/** 
+	 * Given an array of existing interlanguage links, returns those links which are not
+	 * in $this and thus should be deleted.
+	 * @private
+	 */
+	function getInterlangDeletions( $existing ) {
+	    return array_diff_assoc( $existing, $this->mInterlangs );
+	}
+
+	/**
+	 * Get an array of existing links, as a 2-D array
+	 * @private
+	 */
+	function getExistingLinks() {
+		$fname = 'LinksUpdate::getExistingLinks';
+		$res = $this->mDb->select( 'pagelinks', array( 'pl_namespace', 'pl_title' ),
+			array( 'pl_from' => $this->mId ), $fname, $this->mOptions );
+		$arr = array();
+		while ( $row = $this->mDb->fetchObject( $res ) ) {
+			if ( !isset( $arr[$row->pl_namespace] ) ) {
+				$arr[$row->pl_namespace] = array();
+			}
+			$arr[$row->pl_namespace][$row->pl_title] = 1;
+		}
+		$this->mDb->freeResult( $res );
+		return $arr;
+	}
+
+	/**
+	 * Get an array of existing templates, as a 2-D array
+	 * @private
+	 */
+	function getExistingTemplates() {
+		$fname = 'LinksUpdate::getExistingTemplates';
+		$res = $this->mDb->select( 'templatelinks', array( 'tl_namespace', 'tl_title' ),
+			array( 'tl_from' => $this->mId ), $fname, $this->mOptions );
+		$arr = array();
+		while ( $row = $this->mDb->fetchObject( $res ) ) {
+			if ( !isset( $arr[$row->tl_namespace] ) ) {
+				$arr[$row->tl_namespace] = array();
+			}
+			$arr[$row->tl_namespace][$row->tl_title] = 1;
+		}
+		$this->mDb->freeResult( $res );
+		return $arr;
+	}
+
+	/**
+	 * Get an array of existing images, image names in the keys
+	 * @private
+	 */
+	function getExistingImages() {
+		$fname = 'LinksUpdate::getExistingImages';
+		$res = $this->mDb->select( 'imagelinks', array( 'il_to' ),
+			array( 'il_from' => $this->mId ), $fname, $this->mOptions );
+		$arr = array();
+		while ( $row = $this->mDb->fetchObject( $res ) ) {
+			$arr[$row->il_to] = 1;
+		}
+		$this->mDb->freeResult( $res );
+		return $arr;
+	}
+
+	/**
+	 * Get an array of existing external links, URLs in the keys
+	 * @private
+	 */
+	function getExistingExternals() {
+		$fname = 'LinksUpdate::getExistingExternals';
+		$res = $this->mDb->select( 'externallinks', array( 'el_to' ),
+			array( 'el_from' => $this->mId ), $fname, $this->mOptions );
+		$arr = array();
+		while ( $row = $this->mDb->fetchObject( $res ) ) {
+			$arr[$row->el_to] = 1;
+		}
+		$this->mDb->freeResult( $res );
+		return $arr;
+	}
+
+	/**
+	 * Get an array of existing categories, with the name in the key and sort key in the value.
+	 * @private
+	 */
+	function getExistingCategories() {
+		$fname = 'LinksUpdate::getExistingCategories';
+		$res = $this->mDb->select( 'categorylinks', array( 'cl_to', 'cl_sortkey' ),
+			array( 'cl_from' => $this->mId ), $fname, $this->mOptions );
+		$arr = array();
+		while ( $row = $this->mDb->fetchObject( $res ) ) {
+			$arr[$row->cl_to] = $row->cl_sortkey;
+		}
+		$this->mDb->freeResult( $res );
+		return $arr;
+	}
+
+	/**
+	 * Get an array of existing interlanguage links, with the language code in the key and the 
+	 * title in the value.
+	 * @private
+	 */
+	function getExistingInterlangs() {
+		$fname = 'LinksUpdate::getExistingInterlangs';
+		$res = $this->mDb->select( 'langlinks', array( 'll_lang', 'll_title' ), 
+			array( 'll_from' => $this->mId ), $fname, $this->mOptions );
+		$arr = array();
+		while ( $row = $this->mDb->fetchObject( $res ) ) {
+			$arr[$row->ll_lang] = $row->ll_title;
+		}
+		return $arr;
+	}
+}
+?>
Index: /MediaWiki/branches/1.11/includes/LoadBalancer.php
===================================================================
--- /MediaWiki/branches/1.11/includes/LoadBalancer.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/LoadBalancer.php	(revision 1280)
@@ -0,0 +1,649 @@
+<?php
+/**
+ *
+ */
+
+
+/**
+ * Database load balancing object
+ *
+ * @todo document
+ */
+class LoadBalancer {
+	/* private */ var $mServers, $mConnections, $mLoads, $mGroupLoads;
+	/* private */ var $mFailFunction, $mErrorConnection;
+	/* private */ var $mForce, $mReadIndex, $mLastIndex, $mAllowLagged;
+	/* private */ var $mWaitForFile, $mWaitForPos, $mWaitTimeout;
+	/* private */ var $mLaggedSlaveMode, $mLastError = 'Unknown error';
+
+	/**
+	 * Scale polling time so that under overload conditions, the database server
+	 * receives a SHOW STATUS query at an average interval of this many microseconds
+	 */
+	const AVG_STATUS_POLL = 2000;
+
+	function __construct( $servers, $failFunction = false, $waitTimeout = 10, $waitForMasterNow = false )
+	{
+		$this->mServers = $servers;
+		$this->mFailFunction = $failFunction;
+		$this->mReadIndex = -1;
+		$this->mWriteIndex = -1;
+		$this->mForce = -1;
+		$this->mConnections = array();
+		$this->mLastIndex = -1;
+		$this->mLoads = array();
+		$this->mWaitForFile = false;
+		$this->mWaitForPos = false;
+		$this->mWaitTimeout = $waitTimeout;
+		$this->mLaggedSlaveMode = false;
+		$this->mErrorConnection = false;
+		$this->mAllowLag = false;
+
+		foreach( $servers as $i => $server ) {
+			$this->mLoads[$i] = $server['load'];
+			if ( isset( $server['groupLoads'] ) ) {
+				foreach ( $server['groupLoads'] as $group => $ratio ) {
+					if ( !isset( $this->mGroupLoads[$group] ) ) {
+						$this->mGroupLoads[$group] = array();
+					}
+					$this->mGroupLoads[$group][$i] = $ratio;
+				}
+			}
+		}
+		if ( $waitForMasterNow ) {
+			$this->loadMasterPos();
+		}
+	}
+
+	static function newFromParams( $servers, $failFunction = false, $waitTimeout = 10 )
+	{
+		return new LoadBalancer( $servers, $failFunction, $waitTimeout );
+	}
+
+	/**
+	 * Given an array of non-normalised probabilities, this function will select
+	 * an element and return the appropriate key
+	 */
+	function pickRandom( $weights )
+	{
+		if ( !is_array( $weights ) || count( $weights ) == 0 ) {
+			return false;
+		}
+
+		$sum = array_sum( $weights );
+		if ( $sum == 0 ) {
+			# No loads on any of them
+			# In previous versions, this triggered an unweighted random selection,
+			# but this feature has been removed as of April 2006 to allow for strict 
+			# separation of query groups. 
+			return false;
+		}
+		$max = mt_getrandmax();
+		$rand = mt_rand(0, $max) / $max * $sum;
+
+		$sum = 0;
+		foreach ( $weights as $i => $w ) {
+			$sum += $w;
+			if ( $sum >= $rand ) {
+				break;
+			}
+		}
+		return $i;
+	}
+
+	function getRandomNonLagged( $loads ) {
+		# Unset excessively lagged servers
+		$lags = $this->getLagTimes();
+		foreach ( $lags as $i => $lag ) {
+			if ( $i != 0 && isset( $this->mServers[$i]['max lag'] ) && 
+				( $lag === false || $lag > $this->mServers[$i]['max lag'] ) ) 
+			{
+				unset( $loads[$i] );
+			}
+		}
+
+		# Find out if all the slaves with non-zero load are lagged
+		$sum = 0;
+		foreach ( $loads as $load ) {
+			$sum += $load;
+		}
+		if ( $sum == 0 ) {
+			# No appropriate DB servers except maybe the master and some slaves with zero load
+			# Do NOT use the master
+			# Instead, this function will return false, triggering read-only mode,
+			# and a lagged slave will be used instead.
+			return false;
+		}
+
+		if ( count( $loads ) == 0 ) {
+			return false;
+		}
+
+		#wfDebugLog( 'connect', var_export( $loads, true ) );
+
+		# Return a random representative of the remainder
+		return $this->pickRandom( $loads );
+	}
+
+	/**
+	 * Get the index of the reader connection, which may be a slave
+	 * This takes into account load ratios and lag times. It should
+	 * always return a consistent index during a given invocation
+	 *
+	 * Side effect: opens connections to databases
+	 */
+	function getReaderIndex() {
+		global $wgReadOnly, $wgDBClusterTimeout;
+
+		$fname = 'LoadBalancer::getReaderIndex';
+		wfProfileIn( $fname );
+
+		$i = false;
+		if ( $this->mForce >= 0 ) {
+			$i = $this->mForce;
+		} elseif ( count( $this->mServers ) == 1 )  {
+			# Skip the load balancing if there's only one server
+			$i = 0;
+		} else {
+			if ( $this->mReadIndex >= 0 ) {
+				$i = $this->mReadIndex;
+			} else {
+				# $loads is $this->mLoads except with elements knocked out if they
+				# don't work
+				$loads = $this->mLoads;
+				$done = false;
+				$totalElapsed = 0;
+				do {
+					if ( $wgReadOnly or $this->mAllowLagged ) {
+						$i = $this->pickRandom( $loads );
+					} else {
+						$i = $this->getRandomNonLagged( $loads );
+						if ( $i === false && count( $loads ) != 0 )  {
+							# All slaves lagged. Switch to read-only mode
+							$wgReadOnly = wfMsgNoDBForContent( 'readonly_lag' );
+							$i = $this->pickRandom( $loads );
+						}
+					}
+					$serverIndex = $i;
+					if ( $i !== false ) {
+						wfDebugLog( 'connect', "$fname: Using reader #$i: {$this->mServers[$i]['host']}...\n" );
+						$this->openConnection( $i );
+
+						if ( !$this->isOpen( $i ) ) {
+							wfDebug( "$fname: Failed\n" );
+							unset( $loads[$i] );
+							$sleepTime = 0;
+						} else {
+							if ( isset( $this->mServers[$i]['max threads'] ) ) {
+							    $status = $this->mConnections[$i]->getStatus("Thread%");
+							    if ( $status['Threads_running'] > $this->mServers[$i]['max threads'] ) {
+								# Too much load, back off and wait for a while.
+								# The sleep time is scaled by the number of threads connected,
+								# to produce a roughly constant global poll rate.
+								$sleepTime = self::AVG_STATUS_POLL * $status['Threads_connected'];
+
+								# If we reach the timeout and exit the loop, don't use it
+								$i = false;
+							    } else {
+								$done = true;
+								$sleepTime = 0;
+							    }
+							} else {
+							    $done = true;
+							    $sleepTime = 0;
+							}
+						}
+					} else {
+						$sleepTime = 500000;
+					}
+					if ( $sleepTime ) {
+							$totalElapsed += $sleepTime;
+							$x = "{$this->mServers[$serverIndex]['host']} [$serverIndex]";
+							wfProfileIn( "$fname-sleep $x" );
+							usleep( $sleepTime );
+							wfProfileOut( "$fname-sleep $x" );
+					}
+				} while ( count( $loads ) && !$done && $totalElapsed / 1e6 < $wgDBClusterTimeout );
+
+				if ( $totalElapsed / 1e6 >= $wgDBClusterTimeout ) {
+					$this->mErrorConnection = false;
+					$this->mLastError = 'All servers busy';
+				}
+
+				if ( $i !== false && $this->isOpen( $i ) ) {
+					# Wait for the session master pos for a short time
+					if ( $this->mWaitForFile ) {
+						if ( !$this->doWait( $i ) ) {
+							$this->mServers[$i]['slave pos'] = $this->mConnections[$i]->getSlavePos();
+						}
+					}
+					if ( $i !== false ) {
+						$this->mReadIndex = $i;
+					}
+				} else {
+					$i = false;
+				}
+			}
+		}
+		wfProfileOut( $fname );
+		return $i;
+	}
+
+	/**
+	 * Get a random server to use in a query group
+	 */
+	function getGroupIndex( $group ) {
+		if ( isset( $this->mGroupLoads[$group] ) ) {
+			$i = $this->pickRandom( $this->mGroupLoads[$group] );
+		} else {
+			$i = false;
+		}
+		wfDebug( "Query group $group => $i\n" );
+		return $i;
+	}
+
+	/**
+	 * Set the master wait position
+	 * If a DB_SLAVE connection has been opened already, waits
+	 * Otherwise sets a variable telling it to wait if such a connection is opened
+	 */
+	function waitFor( $file, $pos ) {
+		$fname = 'LoadBalancer::waitFor';
+		wfProfileIn( $fname );
+
+		wfDebug( "User master pos: $file $pos\n" );
+		$this->mWaitForFile = false;
+		$this->mWaitForPos = false;
+
+		if ( count( $this->mServers ) > 1 ) {
+			$this->mWaitForFile = $file;
+			$this->mWaitForPos = $pos;
+			$i = $this->mReadIndex;
+
+			if ( $i > 0 ) {
+				if ( !$this->doWait( $i ) ) {
+					$this->mServers[$i]['slave pos'] = $this->mConnections[$i]->getSlavePos();
+					$this->mLaggedSlaveMode = true;
+				}
+			}
+		}
+		wfProfileOut( $fname );
+	}
+
+	/**
+	 * Wait for a given slave to catch up to the master pos stored in $this
+	 */
+	function doWait( $index ) {
+		global $wgMemc;
+
+		$retVal = false;
+
+		# Debugging hacks
+		if ( isset( $this->mServers[$index]['lagged slave'] ) ) {
+			return false;
+		} elseif ( isset( $this->mServers[$index]['fake slave'] ) ) {
+			return true;
+		}
+
+		$key = 'masterpos:' . $index;
+		$memcPos = $wgMemc->get( $key );
+		if ( $memcPos ) {
+			list( $file, $pos ) = explode( ' ', $memcPos );
+			# If the saved position is later than the requested position, return now
+			if ( $file == $this->mWaitForFile && $this->mWaitForPos <= $pos ) {
+				$retVal = true;
+			}
+		}
+
+		if ( !$retVal && $this->isOpen( $index ) ) {
+			$conn =& $this->mConnections[$index];
+			wfDebug( "Waiting for slave #$index to catch up...\n" );
+			$result = $conn->masterPosWait( $this->mWaitForFile, $this->mWaitForPos, $this->mWaitTimeout );
+
+			if ( $result == -1 || is_null( $result ) ) {
+				# Timed out waiting for slave, use master instead
+				wfDebug( "Timed out waiting for slave #$index pos {$this->mWaitForFile} {$this->mWaitForPos}\n" );
+				$retVal = false;
+			} else {
+				$retVal = true;
+				wfDebug( "Done\n" );
+			}
+		}
+		return $retVal;
+	}
+
+	/**
+	 * Get a connection by index
+	 */
+	function &getConnection( $i, $fail = true, $groups = array() )
+	{
+		global $wgDBtype;
+		$fname = 'LoadBalancer::getConnection';
+		wfProfileIn( $fname );
+
+
+		# Query groups
+		if ( !is_array( $groups ) ) {
+			$groupIndex = $this->getGroupIndex( $groups, $i );
+			if ( $groupIndex !== false ) {
+				$i = $groupIndex;
+			}
+		} else {
+			foreach ( $groups as $group ) {
+				$groupIndex = $this->getGroupIndex( $group, $i );
+				if ( $groupIndex !== false ) {
+					$i = $groupIndex;
+					break;
+				}
+			}
+		}
+
+		# For now, only go through all this for mysql databases
+		if ($wgDBtype != 'mysql') {
+			$i = $this->getWriterIndex();
+		}
+		# Operation-based index
+		elseif ( $i == DB_SLAVE ) {
+			$i = $this->getReaderIndex();
+		} elseif ( $i == DB_MASTER ) {
+			$i = $this->getWriterIndex();
+		} elseif ( $i == DB_LAST ) {
+			# Just use $this->mLastIndex, which should already be set
+			$i = $this->mLastIndex;
+			if ( $i === -1 ) {
+				# Oh dear, not set, best to use the writer for safety
+				wfDebug( "Warning: DB_LAST used when there was no previous index\n" );
+				$i = $this->getWriterIndex();
+			}
+		}
+		# Couldn't find a working server in getReaderIndex()?
+		if ( $i === false ) {
+			$this->reportConnectionError( $this->mErrorConnection );
+		}
+		# Now we have an explicit index into the servers array
+		$this->openConnection( $i, $fail );
+
+		wfProfileOut( $fname );
+		return $this->mConnections[$i];
+	}
+
+	/**
+	 * Open a connection to the server given by the specified index
+	 * Index must be an actual index into the array
+	 * Returns success
+	 * @access private
+	 */
+	function openConnection( $i, $fail = false ) {
+		$fname = 'LoadBalancer::openConnection';
+		wfProfileIn( $fname );
+		$success = true;
+
+		if ( !$this->isOpen( $i ) ) {
+			$this->mConnections[$i] = $this->reallyOpenConnection( $this->mServers[$i] );
+		}
+
+		if ( !$this->isOpen( $i ) ) {
+			wfDebug( "Failed to connect to database $i at {$this->mServers[$i]['host']}\n" );
+			if ( $fail ) {
+				$this->reportConnectionError( $this->mConnections[$i] );
+			}
+			$this->mErrorConnection = $this->mConnections[$i];
+			$this->mConnections[$i] = false;
+			$success = false;
+		}
+		$this->mLastIndex = $i;
+		wfProfileOut( $fname );
+		return $success;
+	}
+
+	/**
+	 * Test if the specified index represents an open connection
+	 * @access private
+	 */
+	function isOpen( $index ) {
+		if( !is_integer( $index ) ) {
+			return false;
+		}
+		if ( array_key_exists( $index, $this->mConnections ) && is_object( $this->mConnections[$index] ) &&
+		  $this->mConnections[$index]->isOpen() )
+		{
+			return true;
+		} else {
+			return false;
+		}
+	}
+
+	/**
+	 * Really opens a connection
+	 * @access private
+	 */
+	function reallyOpenConnection( &$server ) {
+		if( !is_array( $server ) ) {
+			throw new MWException( 'You must update your load-balancing configuration. See DefaultSettings.php entry for $wgDBservers.' );
+		}
+
+		extract( $server );
+		# Get class for this database type
+		$class = 'Database' . ucfirst( $type );
+
+		# Create object
+		$db = new $class( $host, $user, $password, $dbname, 1, $flags );
+		$db->setLBInfo( $server );
+		return $db;
+	}
+
+	function reportConnectionError( &$conn )
+	{
+		$fname = 'LoadBalancer::reportConnectionError';
+		wfProfileIn( $fname );
+		# Prevent infinite recursion
+
+		static $reporting = false;
+		if ( !$reporting ) {
+			$reporting = true;
+			if ( !is_object( $conn ) ) {
+				// No last connection, probably due to all servers being too busy
+				$conn = new Database;
+				if ( $this->mFailFunction ) {
+					$conn->failFunction( $this->mFailFunction );
+					$conn->reportConnectionError( $this->mLastError );
+				} else {
+					// If all servers were busy, mLastError will contain something sensible
+					throw new DBConnectionError( $conn, $this->mLastError );
+				}
+			} else {
+				if ( $this->mFailFunction ) {
+					$conn->failFunction( $this->mFailFunction );
+				} else {
+					$conn->failFunction( false );
+				}
+				$server = $conn->getProperty( 'mServer' );
+				$conn->reportConnectionError( "{$this->mLastError} ({$server})" );
+			}
+			$reporting = false;
+		}
+		wfProfileOut( $fname );
+	}
+
+	function getWriterIndex() {
+		return 0;
+	}
+
+	/**
+	 * Force subsequent calls to getConnection(DB_SLAVE) to return the 
+	 * given index. Set to -1 to restore the original load balancing
+	 * behaviour. I thought this was a good idea when I originally 
+	 * wrote this class, but it has never been used.
+	 */
+	function force( $i ) {
+		$this->mForce = $i;
+	}
+
+	/**
+	 * Returns true if the specified index is a valid server index
+	 */
+	function haveIndex( $i ) {
+		return array_key_exists( $i, $this->mServers );
+	}
+
+	/**
+	 * Returns true if the specified index is valid and has non-zero load
+	 */
+	function isNonZeroLoad( $i ) {
+		return array_key_exists( $i, $this->mServers ) && $this->mLoads[$i] != 0;
+	}
+
+	/**
+	 * Get the number of defined servers (not the number of open connections)
+	 */
+	function getServerCount() {
+		return count( $this->mServers );
+	}
+
+	/**
+	 * Save master pos to the session and to memcached, if the session exists
+	 */
+	function saveMasterPos() {
+		if ( session_id() != '' && count( $this->mServers ) > 1 ) {
+			# If this entire request was served from a slave without opening a connection to the
+			# master (however unlikely that may be), then we can fetch the position from the slave.
+			if ( empty( $this->mConnections[0] ) ) {
+				$conn =& $this->getConnection( DB_SLAVE );
+				list( $file, $pos ) = $conn->getSlavePos();
+				wfDebug( "Saving master pos fetched from slave: $file $pos\n" );
+			} else {
+				$conn =& $this->getConnection( 0 );
+				list( $file, $pos ) = $conn->getMasterPos();
+				wfDebug( "Saving master pos: $file $pos\n" );
+			}
+			if ( $file !== false ) {
+				$_SESSION['master_log_file'] = $file;
+				$_SESSION['master_pos'] = $pos;
+			}
+		}
+	}
+
+	/**
+	 * Loads the master pos from the session, waits for it if necessary
+	 */
+	function loadMasterPos() {
+		if ( isset( $_SESSION['master_log_file'] ) && isset( $_SESSION['master_pos'] ) ) {
+			$this->waitFor( $_SESSION['master_log_file'], $_SESSION['master_pos'] );
+		}
+	}
+
+	/**
+	 * Close all open connections
+	 */
+	function closeAll() {
+		foreach( $this->mConnections as $i => $conn ) {
+			if ( $this->isOpen( $i ) ) {
+				// Need to use this syntax because $conn is a copy not a reference
+				$this->mConnections[$i]->close();
+			}
+		}
+	}
+
+	function commitAll() {
+		foreach( $this->mConnections as $i => $conn ) {
+			if ( $this->isOpen( $i ) ) {
+				// Need to use this syntax because $conn is a copy not a reference
+				$this->mConnections[$i]->immediateCommit();
+			}
+		}
+	}
+
+	function waitTimeout( $value = NULL ) {
+		return wfSetVar( $this->mWaitTimeout, $value );
+	}
+
+	function getLaggedSlaveMode() {
+		return $this->mLaggedSlaveMode;
+	}
+
+	/* Disables/enables lag checks */
+	function allowLagged($mode=null) {
+		if ($mode===null)
+			return $this->mAllowLagged;
+		$this->mAllowLagged=$mode;
+	}
+
+	function pingAll() {
+		$success = true;
+		foreach ( $this->mConnections as $i => $conn ) {
+			if ( $this->isOpen( $i ) ) {
+				if ( !$this->mConnections[$i]->ping() ) {
+					$success = false;
+				}
+			}
+		}
+		return $success;
+	}
+
+	/**
+	 * Get the hostname and lag time of the most-lagged slave
+	 * This is useful for maintenance scripts that need to throttle their updates
+	 */
+	function getMaxLag() {
+		$maxLag = -1;
+		$host = '';
+		foreach ( $this->mServers as $i => $conn ) {
+			if ( $this->openConnection( $i ) ) {
+				$lag = $this->mConnections[$i]->getLag();
+				if ( $lag > $maxLag ) {
+					$maxLag = $lag;
+					$host = $this->mServers[$i]['host'];
+				}
+			}
+		}
+		return array( $host, $maxLag );
+	}
+
+	/**
+	 * Get lag time for each DB
+	 * Results are cached for a short time in memcached
+	 */
+	function getLagTimes() {
+		wfProfileIn( __METHOD__ );
+		$expiry = 5;
+		$requestRate = 10;
+
+		global $wgMemc;
+		$times = $wgMemc->get( wfMemcKey( 'lag_times' ) );
+		if ( $times ) {
+			# Randomly recache with probability rising over $expiry
+			$elapsed = time() - $times['timestamp'];
+			$chance = max( 0, ( $expiry - $elapsed ) * $requestRate );
+			if ( mt_rand( 0, $chance ) != 0 ) {
+				unset( $times['timestamp'] );
+				wfProfileOut( __METHOD__ );
+				return $times;
+			}
+			wfIncrStats( 'lag_cache_miss_expired' );
+		} else {
+			wfIncrStats( 'lag_cache_miss_absent' );
+		}
+
+		# Cache key missing or expired
+
+		$times = array();
+		foreach ( $this->mServers as $i => $conn ) {
+			if ($i==0) { # Master
+				$times[$i] = 0;
+			} elseif ( $this->openConnection( $i ) ) {
+				$times[$i] = $this->mConnections[$i]->getLag();
+			}
+		}
+
+		# Add a timestamp key so we know when it was cached
+		$times['timestamp'] = time();
+		$wgMemc->set( wfMemcKey( 'lag_times' ), $times, $expiry );
+
+		# But don't give the timestamp to the caller
+		unset($times['timestamp']);
+		wfProfileOut( __METHOD__ );
+		return $times;
+	}
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/LogPage.php
===================================================================
--- /MediaWiki/branches/1.11/includes/LogPage.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/LogPage.php	(revision 1280)
@@ -0,0 +1,288 @@
+<?php
+#
+# Copyright (C) 2002, 2004 Brion Vibber <brion@pobox.com>
+# http://www.mediawiki.org/
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+# http://www.gnu.org/copyleft/gpl.html
+
+/**
+ * Contain log classes
+ *
+ */
+
+/**
+ * Class to simplify the use of log pages.
+ * The logs are now kept in a table which is easier to manage and trim
+ * than ever-growing wiki pages.
+ *
+ */
+class LogPage {
+	/* @access private */
+	var $type, $action, $comment, $params, $target;
+	/* @acess public */
+	var $updateRecentChanges;
+
+	/**
+	  * Constructor
+	  *
+	  * @param string $type One of '', 'block', 'protect', 'rights', 'delete',
+	  *               'upload', 'move'
+	  * @param bool $rc Whether to update recent changes as well as the logging table
+	  */
+	function __construct( $type, $rc = true ) {
+		$this->type = $type;
+		$this->updateRecentChanges = $rc;
+	}
+
+	function saveContent() {
+		if( wfReadOnly() ) return false;
+
+		global $wgUser;
+		$fname = 'LogPage::saveContent';
+
+		$dbw = wfGetDB( DB_MASTER );
+		$uid = $wgUser->getID();
+
+		$this->timestamp = $now = wfTimestampNow();
+		$dbw->insert( 'logging',
+			array(
+				'log_type' => $this->type,
+				'log_action' => $this->action,
+				'log_timestamp' => $dbw->timestamp( $now ),
+				'log_user' => $uid,
+				'log_namespace' => $this->target->getNamespace(),
+				'log_title' => $this->target->getDBkey(),
+				'log_comment' => $this->comment,
+				'log_params' => $this->params
+			), $fname
+		);
+
+		# And update recentchanges
+		if ( $this->updateRecentChanges ) {
+			$titleObj = SpecialPage::getTitleFor( 'Log', $this->type );
+			$rcComment = $this->actionText;
+			if( '' != $this->comment ) {
+				if ($rcComment == '')
+					$rcComment = $this->comment;
+				else
+					$rcComment .= ': ' . $this->comment;
+			}
+
+			RecentChange::notifyLog( $now, $titleObj, $wgUser, $rcComment, '',
+				$this->type, $this->action, $this->target, $this->comment, $this->params );
+		}
+		return true;
+	}
+
+	/**
+	 * @static
+	 */
+	function validTypes() {
+		global $wgLogTypes;
+		return $wgLogTypes;
+	}
+
+	/**
+	 * @static
+	 */
+	function isLogType( $type ) {
+		return in_array( $type, LogPage::validTypes() );
+	}
+
+	/**
+	 * @static
+	 */
+	public static function logName( $type ) {
+		global $wgLogNames;
+
+		if( isset( $wgLogNames[$type] ) ) {
+			return str_replace( '_', ' ', wfMsg( $wgLogNames[$type] ) );
+		} else {
+			// Bogus log types? Perhaps an extension was removed.
+			return $type;
+		}
+	}
+
+	/**
+	 * @todo handle missing log types
+	 * @static
+	 */
+	function logHeader( $type ) {
+		global $wgLogHeaders;
+		return wfMsg( $wgLogHeaders[$type] );
+	}
+
+	/**
+	 * @static
+	 */
+	function actionText( $type, $action, $title = NULL, $skin = NULL, $params = array(), $filterWikilinks=false, $translate=false ) {
+		global $wgLang, $wgContLang, $wgLogActions;
+
+		$key = "$type/$action";
+		
+		if( $key == 'patrol/patrol' )
+			return PatrolLog::makeActionText( $title, $params, $skin );
+		
+		if( isset( $wgLogActions[$key] ) ) {
+			if( is_null( $title ) ) {
+				$rv=wfMsg( $wgLogActions[$key] );
+			} else {
+				if( $skin ) {
+
+					switch( $type ) {
+						case 'move':
+							$titleLink = $skin->makeLinkObj( $title, $title->getPrefixedText(), 'redirect=no' );
+							$params[0] = $skin->makeLinkObj( Title::newFromText( $params[0] ), $params[0] );
+							break;
+						case 'block':
+							if( substr( $title->getText(), 0, 1 ) == '#' ) {
+								$titleLink = $title->getText();
+							} else {
+								$titleLink = $skin->makeLinkObj( $title, $title->getText() );
+								$titleLink .= ' (' . $skin->makeKnownLinkObj( SpecialPage::getTitleFor( 'Contributions', $title->getDBkey() ), wfMsg( 'contribslink' ) ) . ')';
+							}
+							break;
+						case 'rights':
+							$text = $wgContLang->ucfirst( $title->getText() );
+							$titleLink = $skin->makeLinkObj( Title::makeTitle( NS_USER, $text ) );
+							break;
+						default:
+							$titleLink = $skin->makeLinkObj( $title );
+					}
+
+				} else {
+					$titleLink = $title->getPrefixedText();
+				}
+				if( $key == 'rights/rights' ) {
+					if ($skin) {
+						$rightsnone = wfMsg( 'rightsnone' );
+					} else {
+						$rightsnone = wfMsgForContent( 'rightsnone' );
+					}
+					if( !isset( $params[0] ) || trim( $params[0] ) == '' )
+						$params[0] = $rightsnone;
+					if( !isset( $params[1] ) || trim( $params[1] ) == '' )
+						$params[1] = $rightsnone;
+				}
+				if( count( $params ) == 0 ) {
+					if ( $skin ) {
+						$rv = wfMsg( $wgLogActions[$key], $titleLink );
+					} else {
+						$rv = wfMsgForContent( $wgLogActions[$key], $titleLink );
+					}
+				} else {
+					array_unshift( $params, $titleLink );
+					if ( $key == 'block/block' ) {
+						if ( $translate ) {
+							$params[1] = $wgLang->translateBlockExpiry( $params[1] );
+						}
+						$params[2] = isset( $params[2] )
+										? self::formatBlockFlags( $params[2] )
+										: '';
+					}
+					$rv = wfMsgReal( $wgLogActions[$key], $params, true, !$skin );
+				}
+			}
+		} else {
+			wfDebug( "LogPage::actionText - unknown action $key\n" );
+			$rv = "$action";
+		}
+		if( $filterWikilinks ) {
+			$rv = str_replace( "[[", "", $rv );
+			$rv = str_replace( "]]", "", $rv );
+		}
+		return $rv;
+	}
+
+	/**
+	 * Add a log entry
+	 * @param string $action one of '', 'block', 'protect', 'rights', 'delete', 'upload', 'move', 'move_redir'
+	 * @param object &$target A title object.
+	 * @param string $comment Description associated
+	 * @param array $params Parameters passed later to wfMsg.* functions
+	 */
+	function addEntry( $action, $target, $comment, $params = array() ) {
+		if ( !is_array( $params ) ) {
+			$params = array( $params );
+		}
+
+		$this->action = $action;
+		$this->target = $target;
+		$this->comment = $comment;
+		$this->params = LogPage::makeParamBlob( $params );
+
+		$this->actionText = LogPage::actionText( $this->type, $action, $target, NULL, $params );
+
+		return $this->saveContent();
+	}
+
+	/**
+	 * Create a blob from a parameter array
+	 * @static
+	 */
+	function makeParamBlob( $params ) {
+		return implode( "\n", $params );
+	}
+
+	/**
+	 * Extract a parameter array from a blob
+	 * @static
+	 */
+	function extractParams( $blob ) {
+		if ( $blob === '' ) {
+			return array();
+		} else {
+			return explode( "\n", $blob );
+		}
+	}
+	
+	/**
+	 * Convert a comma-delimited list of block log flags
+	 * into a more readable (and translated) form
+	 *
+	 * @param $flags Flags to format
+	 * @return string
+	 */
+	public static function formatBlockFlags( $flags ) {
+		$flags = explode( ',', trim( $flags ) );
+		if( count( $flags ) > 0 ) {
+			for( $i = 0; $i < count( $flags ); $i++ )
+				$flags[$i] = self::formatBlockFlag( $flags[$i] );
+			return '(' . implode( ', ', $flags ) . ')';
+		} else {
+			return '';
+		}
+	}
+	
+	/**
+	 * Translate a block log flag if possible
+	 *
+	 * @param $flag Flag to translate
+	 * @return string
+	 */
+	public static function formatBlockFlag( $flag ) {
+		static $messages = array();
+		if( !isset( $messages[$flag] ) ) {
+			$k = 'block-log-flags-' . $flag;
+			$msg = wfMsg( $k );
+			$messages[$flag] = htmlspecialchars( wfEmptyMsg( $k, $msg ) ? $flag : $msg );
+		}
+		return $messages[$flag];
+	}
+	
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/MacBinary.php
===================================================================
--- /MediaWiki/branches/1.11/includes/MacBinary.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/MacBinary.php	(revision 1280)
@@ -0,0 +1,271 @@
+<?php
+/**
+ * MacBinary signature checker and data fork extractor, for files
+ * uploaded from Internet Explorer for Mac.
+ *
+ * Copyright (C) 2005 Brion Vibber <brion@pobox.com>
+ * Portions based on Convert::BinHex by Eryq et al
+ * http://www.mediawiki.org/
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @addtogroup SpecialPage
+ */
+
+class MacBinary {
+	function __construct( $filename ) {
+		$this->open( $filename );
+		$this->loadHeader();
+	}
+
+	/**
+	 * The file must be seekable, such as local filesystem.
+	 * Remote URLs probably won't work.
+	 *
+	 * @param string $filename
+	 */
+	function open( $filename ) {
+		$this->valid = false;
+		$this->version = 0;
+		$this->filename = '';
+		$this->dataLength = 0;
+		$this->resourceLength = 0;
+		$this->handle = fopen( $filename, 'rb' );
+	}
+
+	/**
+	 * Does this appear to be a valid MacBinary archive?
+	 * @return bool
+	 */
+	function isValid() {
+		return $this->valid;
+	}
+
+	/**
+	 * Get length of data fork
+	 * @return int
+	 */
+	function dataForkLength() {
+		return $this->dataLength;
+	}
+
+	/**
+	 * Copy the data fork to an external file or resource.
+	 * @param resource $destination
+	 * @return bool
+	 */
+	function extractData( $destination ) {
+		if( !$this->isValid() ) {
+			return false;
+		}
+
+		// Data fork appears immediately after header
+		fseek( $this->handle, 128 );
+		return $this->copyBytesTo( $destination, $this->dataLength );
+	}
+
+	/**
+	 *
+	 */
+	function close() {
+		fclose( $this->handle );
+	}
+
+	// --------------------------------------------------------------
+
+	/**
+	 * Check if the given file appears to be MacBinary-encoded,
+	 * as Internet Explorer on Mac OS may provide for unknown types.
+	 * http://www.lazerware.com/formats/macbinary/macbinary_iii.html
+	 * If ok, load header data.
+	 *
+	 * @return bool
+	 * @access private
+	 */
+	function loadHeader() {
+		$fname = 'MacBinary::loadHeader';
+
+		fseek( $this->handle, 0 );
+		$head = fread( $this->handle, 128 );
+		$this->hexdump( $head );
+
+		if( strlen( $head ) < 128 ) {
+			wfDebug( "$fname: couldn't read full MacBinary header\n" );
+			return false;
+		}
+
+		if( $head{0} != "\x00" || $head{74} != "\x00" ) {
+			wfDebug( "$fname: header bytes 0 and 74 not null\n" );
+			return false;
+		}
+
+		$signature = substr( $head, 102, 4 );
+		$a = unpack( "ncrc", substr( $head, 124, 2 ) );
+		$storedCRC = $a['crc'];
+		$calculatedCRC = $this->calcCRC( substr( $head, 0, 124 ) );
+		if( $storedCRC == $calculatedCRC ) {
+			if( $signature == 'mBIN' ) {
+				$this->version = 3;
+			} else {
+				$this->version = 2;
+			}
+		} else {
+			$crc = sprintf( "%x != %x", $storedCRC, $calculatedCRC );
+			if( $storedCRC == 0 && $head{82} == "\x00" &&
+				substr( $head, 101, 24 ) == str_repeat( "\x00", 24 ) ) {
+				wfDebug( "$fname: no CRC, looks like MacBinary I\n" );
+				$this->version = 1;
+			} elseif( $signature == 'mBIN' && $storedCRC == 0x185 ) {
+				// Mac IE 5.0 seems to insert this value in the CRC field.
+				// 5.2.3 works correctly; don't know about other versions.
+				wfDebug( "$fname: CRC doesn't match ($crc), looks like Mac IE 5.0\n" );
+				$this->version = 3;
+			} else {
+				wfDebug( "$fname: CRC doesn't match ($crc) and not MacBinary I\n" );
+				return false;
+			}
+		}
+
+		$nameLength = ord( $head{1} );
+		if( $nameLength < 1 || $nameLength > 63 ) {
+			wfDebug( "$fname: invalid filename size $nameLength\n" );
+			return false;
+		}
+		$this->filename = substr( $head, 2, $nameLength );
+
+		$forks = unpack( "Ndata/Nresource", substr( $head, 83, 8 ) );
+		$this->dataLength = $forks['data'];
+		$this->resourceLength = $forks['resource'];
+		$maxForkLength = 0x7fffff;
+
+		if( $this->dataLength < 0 || $this->dataLength > $maxForkLength ) {
+			wfDebug( "$fname: invalid data fork length $this->dataLength\n" );
+			return false;
+		}
+
+		if( $this->resourceLength < 0 || $this->resourceLength > $maxForkLength ) {
+			wfDebug( "$fname: invalid resource fork size $this->resourceLength\n" );
+			return false;
+		}
+
+		wfDebug( "$fname: appears to be MacBinary $this->version, data length $this->dataLength\n" );
+		$this->valid = true;
+		return true;
+	}
+
+	/**
+	 * Calculate a 16-bit CRC value as for MacBinary headers.
+	 * Adapted from perl5 Convert::BinHex by Eryq,
+	 * based on the mcvert utility (Doug Moore, April '87),
+	 * with magic array thingy by Jim Van Verth.
+	 * http://search.cpan.org/~eryq/Convert-BinHex-1.119/lib/Convert/BinHex.pm
+	 *
+	 * @param string $data
+	 * @param int $seed
+	 * @return int
+	 * @access private
+	 */
+	function calcCRC( $data, $seed = 0 ) {
+		# An array useful for CRC calculations that use 0x1021 as the "seed":
+		$MAGIC = array(
+			0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,
+			0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,
+			0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,
+			0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,
+			0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485,
+			0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,
+			0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4,
+			0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc,
+			0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,
+			0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b,
+			0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,
+			0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,
+			0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41,
+			0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49,
+			0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,
+			0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78,
+			0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f,
+			0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,
+			0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e,
+			0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256,
+			0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,
+			0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,
+			0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c,
+			0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,
+			0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab,
+			0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3,
+			0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,
+			0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92,
+			0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9,
+			0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,
+			0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8,
+			0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0
+		);
+		$len = strlen( $data );
+		$crc = $seed;
+		for( $i = 0; $i < $len; $i++ ) {
+			$crc ^= ord( $data{$i} ) << 8;
+			$crc &= 0xFFFF;
+			$crc = ($crc << 8) ^ $MAGIC[$crc >> 8];
+			$crc &= 0xFFFF;
+		}
+		return $crc;
+	}
+
+	/**
+	 * @param resource $destination
+	 * @param int $bytesToCopy
+	 * @return bool
+	 * @access private
+	 */
+	function copyBytesTo( $destination, $bytesToCopy ) {
+		$bufferSize = 65536;
+		for( $remaining = $bytesToCopy; $remaining > 0; $remaining -= $bufferSize ) {
+			$thisChunkSize = min( $remaining, $bufferSize );
+			$buffer = fread( $this->handle, $thisChunkSize );
+			fwrite( $destination, $buffer );
+		}
+	}
+
+	/**
+	 * Hex dump of the header for debugging
+	 * @access private
+	 */
+	function hexdump( $data ) {
+		global $wgDebugLogFile;
+		if( !$wgDebugLogFile ) return;
+
+		$width = 16;
+		$at = 0;
+		for( $remaining = strlen( $data ); $remaining > 0; $remaining -= $width ) {
+			$line = sprintf( "%04x:", $at );
+			$printable = '';
+			for( $i = 0; $i < $width && $remaining - $i > 0; $i++ ) {
+				$byte = ord( $data{$at++} );
+				$line .= sprintf( " %02x", $byte );
+				$printable .= ($byte >= 32 && $byte <= 126 )
+					? chr( $byte )
+					: '.';
+			}
+			if( $i < $width ) {
+				$line .= str_repeat( '   ', $width - $i );
+			}
+			wfDebug( "MacBinary: $line $printable\n" );
+		}
+	}
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/MagicWord.php
===================================================================
--- /MediaWiki/branches/1.11/includes/MagicWord.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/MagicWord.php	(revision 1280)
@@ -0,0 +1,392 @@
+<?php
+/**
+ * File for magic words
+ * @addtogroup Parser
+ */
+
+/**
+ * This class encapsulates "magic words" such as #redirect, __NOTOC__, etc.
+ * Usage:
+ *     if (MagicWord::get( 'redirect' )->match( $text ) )
+ *
+ * Possible future improvements:
+ *   * Simultaneous searching for a number of magic words
+ *   * MagicWord::$mObjects in shared memory
+ *
+ * Please avoid reading the data out of one of these objects and then writing
+ * special case code. If possible, add another match()-like function here.
+ *
+ * To add magic words in an extension, use the LanguageGetMagic hook. For 
+ * magic words which are also Parser variables, add a MagicWordwgVariableIDs
+ * hook. Use string keys.
+ *
+ */
+class MagicWord {
+	/**#@+
+	 * @private
+	 */
+	var $mId, $mSynonyms, $mCaseSensitive, $mRegex;
+	var $mRegexStart, $mBaseRegex, $mVariableRegex;
+	var $mModified, $mFound;
+
+	static public $mVariableIDsInitialised = false;
+	static public $mVariableIDs = array(
+		'currentmonth',
+		'currentmonthname',
+		'currentmonthnamegen',
+		'currentmonthabbrev',
+		'currentday',
+		'currentday2',
+		'currentdayname',
+		'currentyear',
+		'currenttime',
+		'currenthour',
+		'localmonth',
+		'localmonthname',
+		'localmonthnamegen',
+		'localmonthabbrev',
+		'localday',
+		'localday2',
+		'localdayname',
+		'localyear',
+		'localtime',
+		'localhour',
+		'numberofarticles',
+		'numberoffiles',
+		'numberofedits',
+		'sitename',
+		'server',
+		'servername',
+		'scriptpath',
+		'pagename',
+		'pagenamee',
+		'fullpagename',
+		'fullpagenamee',
+		'namespace',
+		'namespacee',
+		'currentweek',
+		'currentdow',
+		'localweek',
+		'localdow',
+		'revisionid',
+		'revisionday',
+		'revisionday2',
+		'revisionmonth',
+		'revisionyear',
+		'revisiontimestamp',
+		'subpagename',
+		'subpagenamee',
+		'displaytitle',
+		'talkspace',
+		'talkspacee',
+		'subjectspace',
+		'subjectspacee',
+		'talkpagename',
+		'talkpagenamee',
+		'subjectpagename',
+		'subjectpagenamee',
+		'numberofusers',
+		'rawsuffix',
+		'newsectionlink',
+		'numberofpages',
+		'currentversion',
+		'basepagename',
+		'basepagenamee',
+		'urlencode',
+		'currenttimestamp',
+		'localtimestamp',
+		'directionmark',
+		'language',
+		'contentlanguage',
+		'pagesinnamespace',
+		'numberofadmins',
+		'defaultsort',
+	);
+
+	static public $mObjects = array();
+
+	/**#@-*/
+
+	function __construct($id = 0, $syn = '', $cs = false) {
+		$this->mId = $id;
+		$this->mSynonyms = (array)$syn;
+		$this->mCaseSensitive = $cs;
+		$this->mRegex = '';
+		$this->mRegexStart = '';
+		$this->mVariableRegex = '';
+		$this->mVariableStartToEndRegex = '';
+		$this->mModified = false;
+	}
+
+	/**
+	 * Factory: creates an object representing an ID
+	 * @static
+	 */
+	static function &get( $id ) {
+		if (!array_key_exists( $id, self::$mObjects ) ) {
+			$mw = new MagicWord();
+			$mw->load( $id );
+			self::$mObjects[$id] = $mw;
+		}
+		return self::$mObjects[$id];
+	}
+
+	/**
+	 * Get an array of parser variable IDs
+	 */
+	static function getVariableIDs() {
+		if ( !self::$mVariableIDsInitialised ) {
+			# Deprecated constant definition hook, available for extensions that need it
+			$magicWords = array();
+			wfRunHooks( 'MagicWordMagicWords', array( &$magicWords ) );
+			foreach ( $magicWords as $word ) {
+				define( $word, $word );
+			}
+
+			# Get variable IDs
+			wfRunHooks( 'MagicWordwgVariableIDs', array( &self::$mVariableIDs ) );
+			self::$mVariableIDsInitialised = true;
+		}
+		return self::$mVariableIDs;
+	}
+
+	# Initialises this object with an ID
+	function load( $id ) {
+		global $wgContLang;
+		$this->mId = $id;
+		$wgContLang->getMagic( $this );
+		if ( !$this->mSynonyms ) {
+			$this->mSynonyms = array( 'dkjsagfjsgashfajsh' );
+			#throw new MWException( "Error: invalid magic word '$id'" );
+			wfDebugLog( 'exception', "Error: invalid magic word '$id'\n" );
+		}
+	}
+
+	/**
+	 * Preliminary initialisation
+	 * @private
+	 */
+	function initRegex() {
+		#$variableClass = Title::legalChars();
+		# This was used for matching "$1" variables, but different uses of the feature will have
+		# different restrictions, which should be checked *after* the MagicWord has been matched,
+		# not here. - IMSoP
+		
+		$escSyn = array();
+		foreach ( $this->mSynonyms as $synonym )
+			// In case a magic word contains /, like that's going to happen;)
+			$escSyn[] = preg_quote( $synonym, '/' );
+		$this->mBaseRegex = implode( '|', $escSyn );
+		
+		$case = $this->mCaseSensitive ? '' : 'iu';
+		$this->mRegex = "/{$this->mBaseRegex}/{$case}";
+		$this->mRegexStart = "/^(?:{$this->mBaseRegex})/{$case}";
+		$this->mVariableRegex = str_replace( "\\$1", "(.*?)", $this->mRegex );
+		$this->mVariableStartToEndRegex = str_replace( "\\$1", "(.*?)",
+			"/^(?:{$this->mBaseRegex})$/{$case}" );
+	}
+
+	/**
+	 * Gets a regex representing matching the word
+	 */
+	function getRegex() {
+		if ($this->mRegex == '' ) {
+			$this->initRegex();
+		}
+		return $this->mRegex;
+	}
+
+	/**
+	 * Gets the regexp case modifier to use, i.e. i or nothing, to be used if
+	 * one is using MagicWord::getBaseRegex(), otherwise it'll be included in
+	 * the complete expression
+	 */
+	function getRegexCase() {
+		if ( $this->mRegex === '' )
+			$this->initRegex();
+
+		return $this->mCaseSensitive ? '' : 'iu';
+	}
+
+	/**
+	 * Gets a regex matching the word, if it is at the string start
+	 */
+	function getRegexStart() {
+		if ($this->mRegex == '' ) {
+			$this->initRegex();
+		}
+		return $this->mRegexStart;
+	}
+
+	/**
+	 * regex without the slashes and what not
+	 */
+	function getBaseRegex() {
+		if ($this->mRegex == '') {
+			$this->initRegex();
+		}
+		return $this->mBaseRegex;
+	}
+
+	/**
+	 * Returns true if the text contains the word
+	 * @return bool
+	 */
+	function match( $text ) {
+		return preg_match( $this->getRegex(), $text );
+	}
+
+	/**
+	 * Returns true if the text starts with the word
+	 * @return bool
+	 */
+	function matchStart( $text ) {
+		return preg_match( $this->getRegexStart(), $text );
+	}
+
+	/**
+	 * Returns NULL if there's no match, the value of $1 otherwise
+	 * The return code is the matched string, if there's no variable
+	 * part in the regex and the matched variable part ($1) if there
+	 * is one.
+	 */
+	function matchVariableStartToEnd( $text ) {
+		$matches = array();
+		$matchcount = preg_match( $this->getVariableStartToEndRegex(), $text, $matches );
+		if ( $matchcount == 0 ) {
+			return NULL;
+		} else {
+			# multiple matched parts (variable match); some will be empty because of
+			# synonyms. The variable will be the second non-empty one so remove any
+			# blank elements and re-sort the indices.
+			# See also bug 6526
+
+			$matches = array_values(array_filter($matches));
+
+			if ( count($matches) == 1 ) { return $matches[0]; }
+			else { return $matches[1]; }
+		}
+	}
+
+
+	/**
+	 * Returns true if the text matches the word, and alters the
+	 * input string, removing all instances of the word
+	 */
+	function matchAndRemove( &$text ) {
+		$this->mFound = false;
+		$text = preg_replace_callback( $this->getRegex(), array( &$this, 'pregRemoveAndRecord' ), $text );
+		return $this->mFound;
+	}
+
+	function matchStartAndRemove( &$text ) {
+		$this->mFound = false;
+		$text = preg_replace_callback( $this->getRegexStart(), array( &$this, 'pregRemoveAndRecord' ), $text );
+		return $this->mFound;
+	}
+
+	/**
+	 * Used in matchAndRemove()
+	 * @private
+	 **/
+	function pregRemoveAndRecord( ) {
+		$this->mFound = true;
+		return '';
+	}
+
+	/**
+	 * Replaces the word with something else
+	 */
+	function replace( $replacement, $subject, $limit=-1 ) {
+		$res = preg_replace( $this->getRegex(), StringUtils::escapeRegexReplacement( $replacement ), $subject, $limit );
+		$this->mModified = !($res === $subject);
+		return $res;
+	}
+
+	/**
+	 * Variable handling: {{SUBST:xxx}} style words
+	 * Calls back a function to determine what to replace xxx with
+	 * Input word must contain $1
+	 */
+	function substituteCallback( $text, $callback ) {
+		$res = preg_replace_callback( $this->getVariableRegex(), $callback, $text );
+		$this->mModified = !($res === $text);
+		return $res;
+	}
+
+	/**
+	 * Matches the word, where $1 is a wildcard
+	 */
+	function getVariableRegex()	{
+		if ( $this->mVariableRegex == '' ) {
+			$this->initRegex();
+		}
+		return $this->mVariableRegex;
+	}
+
+	/**
+	 * Matches the entire string, where $1 is a wildcard
+	 */
+	function getVariableStartToEndRegex() {
+		if ( $this->mVariableStartToEndRegex == '' ) {
+			$this->initRegex();
+		}
+		return $this->mVariableStartToEndRegex;
+	}
+
+	/**
+	 * Accesses the synonym list directly
+	 */
+	function getSynonym( $i ) {
+		return $this->mSynonyms[$i];
+	}
+
+	function getSynonyms() {
+		return $this->mSynonyms;
+	}
+
+	/**
+	 * Returns true if the last call to replace() or substituteCallback()
+	 * returned a modified text, otherwise false.
+	 */
+	function getWasModified(){
+		return $this->mModified;
+	}
+
+	/**
+	 * $magicarr is an associative array of (magic word ID => replacement)
+	 * This method uses the php feature to do several replacements at the same time,
+	 * thereby gaining some efficiency. The result is placed in the out variable
+	 * $result. The return value is true if something was replaced.
+	 * @static
+	 **/
+	function replaceMultiple( $magicarr, $subject, &$result ){
+		$search = array();
+		$replace = array();
+		foreach( $magicarr as $id => $replacement ){
+			$mw = MagicWord::get( $id );
+			$search[] = $mw->getRegex();
+			$replace[] = $replacement;
+		}
+
+		$result = preg_replace( $search, $replace, $subject );
+		return !($result === $subject);
+	}
+
+	/**
+	 * Adds all the synonyms of this MagicWord to an array, to allow quick
+	 * lookup in a list of magic words
+	 */
+	function addToArray( &$array, $value ) {
+		global $wgContLang;
+		foreach ( $this->mSynonyms as $syn ) {
+			$array[$wgContLang->lc($syn)] = $value;
+		}
+	}
+
+	function isCaseSensitive() {
+		return $this->mCaseSensitive;
+	}
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/Math.php
===================================================================
--- /MediaWiki/branches/1.11/includes/Math.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/Math.php	(revision 1280)
@@ -0,0 +1,272 @@
+<?php
+/**
+ * Contain everything related to <math> </math> parsing
+ */
+
+/**
+ * Takes LaTeX fragments, sends them to a helper program (texvc) for rendering
+ * to rasterized PNG and HTML and MathML approximations. An appropriate
+ * rendering form is picked and returned.
+ *
+ * by Tomasz Wegrzanowski, with additions by Brion Vibber (2003, 2004)
+ *
+ */
+class MathRenderer {
+	var $mode = MW_MATH_MODERN;
+	var $tex = '';
+	var $inputhash = '';
+	var $hash = '';
+	var $html = '';
+	var $mathml = '';
+	var $conservativeness = 0;
+
+	function __construct( $tex ) {
+		$this->tex = $tex;
+ 	}
+
+	function setOutputMode( $mode ) {
+		$this->mode = $mode;
+	}
+
+	function render() {
+		global $wgTmpDirectory, $wgInputEncoding;
+		global $wgTexvc;
+		$fname = 'MathRenderer::render';
+
+		if( $this->mode == MW_MATH_SOURCE ) {
+			# No need to render or parse anything more!
+			return ('$ '.htmlspecialchars( $this->tex ).' $');
+		}
+		if( $this->tex == '' ) {
+			return; # bug 8372
+		}
+
+		if( !$this->_recall() ) {
+			# Ensure that the temp and output directories are available before continuing...
+			if( !file_exists( $wgTmpDirectory ) ) {
+				if( !@mkdir( $wgTmpDirectory ) ) {
+					return $this->_error( 'math_bad_tmpdir' );
+				}
+			} elseif( !is_dir( $wgTmpDirectory ) || !is_writable( $wgTmpDirectory ) ) {
+				return $this->_error( 'math_bad_tmpdir' );
+			}
+
+			if( function_exists( 'is_executable' ) && !is_executable( $wgTexvc ) ) {
+				return $this->_error( 'math_notexvc' );
+			}
+			$cmd = $wgTexvc . ' ' .
+					escapeshellarg( $wgTmpDirectory ).' '.
+					escapeshellarg( $wgTmpDirectory ).' '.
+					escapeshellarg( $this->tex ).' '.
+					escapeshellarg( $wgInputEncoding );
+
+			if ( wfIsWindows() ) {
+				# Invoke it within cygwin sh, because texvc expects sh features in its default shell
+				$cmd = 'sh -c ' . wfEscapeShellArg( $cmd );
+			}
+
+			wfDebug( "TeX: $cmd\n" );
+			$contents = `$cmd`;
+			wfDebug( "TeX output:\n $contents\n---\n" );
+
+			if (strlen($contents) == 0) {
+				return $this->_error( 'math_unknown_error' );
+			}
+
+			$retval = substr ($contents, 0, 1);
+			$errmsg = '';
+			if (($retval == 'C') || ($retval == 'M') || ($retval == 'L')) {
+				if ($retval == 'C') {
+					$this->conservativeness = 2;
+				} else if ($retval == 'M') {
+					$this->conservativeness = 1;
+				} else {
+					$this->conservativeness = 0;
+				}
+				$outdata = substr ($contents, 33);
+
+				$i = strpos($outdata, "\000");
+
+				$this->html = substr($outdata, 0, $i);
+				$this->mathml = substr($outdata, $i+1);
+			} else if (($retval == 'c') || ($retval == 'm') || ($retval == 'l'))  {
+				$this->html = substr ($contents, 33);
+				if ($retval == 'c') {
+					$this->conservativeness = 2;
+				} else if ($retval == 'm') {
+					$this->conservativeness = 1;
+				} else {
+					$this->conservativeness = 0;
+				}
+				$this->mathml = NULL;
+			} else if ($retval == 'X') {
+				$this->html = NULL;
+				$this->mathml = substr ($contents, 33);
+				$this->conservativeness = 0;
+			} else if ($retval == '+') {
+				$this->html = NULL;
+				$this->mathml = NULL;
+				$this->conservativeness = 0;
+			} else {
+				$errbit = htmlspecialchars( substr($contents, 1) );
+				switch( $retval ) {
+					case 'E': $errmsg = $this->_error( 'math_lexing_error', $errbit );
+					case 'S': $errmsg = $this->_error( 'math_syntax_error', $errbit );
+					case 'F': $errmsg = $this->_error( 'math_unknown_function', $errbit );
+					default:  $errmsg = $this->_error( 'math_unknown_error', $errbit );
+				}
+			}
+
+			if ( !$errmsg ) {
+				 $this->hash = substr ($contents, 1, 32);
+			}
+
+			wfRunHooks( 'MathAfterTexvc', array( &$this, &$errmsg ) );
+
+			if ( $errmsg ) {
+				 return $errmsg;
+			}
+
+			if (!preg_match("/^[a-f0-9]{32}$/", $this->hash)) {
+				return $this->_error( 'math_unknown_error' );
+			}
+
+			if( !file_exists( "$wgTmpDirectory/{$this->hash}.png" ) ) {
+				return $this->_error( 'math_image_error' );
+			}
+
+			$hashpath = $this->_getHashPath();
+			if( !file_exists( $hashpath ) ) {
+				if( !@wfMkdirParents( $hashpath, 0755 ) ) {
+					return $this->_error( 'math_bad_output' );
+				}
+			} elseif( !is_dir( $hashpath ) || !is_writable( $hashpath ) ) {
+				return $this->_error( 'math_bad_output' );
+			}
+
+			if( !rename( "$wgTmpDirectory/{$this->hash}.png", "$hashpath/{$this->hash}.png" ) ) {
+				return $this->_error( 'math_output_error' );
+			}
+
+			# Now save it back to the DB:
+			if ( !wfReadOnly() ) {
+				$outmd5_sql = pack('H32', $this->hash);
+
+				$md5_sql = pack('H32', $this->md5); # Binary packed, not hex
+
+				$dbw = wfGetDB( DB_MASTER );
+				$dbw->replace( 'math', array( 'math_inputhash' ),
+				  array(
+					'math_inputhash' => $md5_sql,
+					'math_outputhash' => $outmd5_sql,
+					'math_html_conservativeness' => $this->conservativeness,
+					'math_html' => $this->html,
+					'math_mathml' => $this->mathml,
+				  ), $fname, array( 'IGNORE' )
+				);
+			}
+
+		}
+
+		return $this->_doRender();
+	}
+
+	function _error( $msg, $append = '' ) {
+		$mf   = htmlspecialchars( wfMsg( 'math_failure' ) );
+		$errmsg = htmlspecialchars( wfMsg( $msg ) );
+		$source = htmlspecialchars( str_replace( "\n", ' ', $this->tex ) );
+		return "<strong class='error'>$mf ($errmsg$append): $source</strong>\n";
+	}
+
+	function _recall() {
+		global $wgMathDirectory;
+		$fname = 'MathRenderer::_recall';
+
+		$this->md5 = md5( $this->tex );
+		$dbr = wfGetDB( DB_SLAVE );
+		$rpage = $dbr->selectRow( 'math',
+			array( 'math_outputhash','math_html_conservativeness','math_html','math_mathml' ),
+			array( 'math_inputhash' => pack("H32", $this->md5)), # Binary packed, not hex
+			$fname
+		);
+
+		if( $rpage !== false ) {
+			# Tailing 0x20s can get dropped by the database, add it back on if necessary:
+			$xhash = unpack( 'H32md5', $rpage->math_outputhash . "                " );
+			$this->hash = $xhash ['md5'];
+
+			$this->conservativeness = $rpage->math_html_conservativeness;
+			$this->html = $rpage->math_html;
+			$this->mathml = $rpage->math_mathml;
+
+			if( file_exists( $this->_getHashPath() . "/{$this->hash}.png" ) ) {
+				return true;
+			}
+
+			if( file_exists( $wgMathDirectory . "/{$this->hash}.png" ) ) {
+				$hashpath = $this->_getHashPath();
+
+				if( !file_exists( $hashpath ) ) {
+					if( !@wfMkdirParents( $hashpath, 0755 ) ) {
+						return false;
+					}
+				} elseif( !is_dir( $hashpath ) || !is_writable( $hashpath ) ) {
+					return false;
+				}
+				if ( function_exists( "link" ) ) {
+					return link ( $wgMathDirectory . "/{$this->hash}.png",
+							$hashpath . "/{$this->hash}.png" );
+				} else {
+					return rename ( $wgMathDirectory . "/{$this->hash}.png",
+							$hashpath . "/{$this->hash}.png" );
+				}
+			}
+
+		}
+
+		# Missing from the database and/or the render cache
+		return false;
+	}
+
+	/**
+	 * Select among PNG, HTML, or MathML output depending on
+	 */
+	function _doRender() {
+		if( $this->mode == MW_MATH_MATHML && $this->mathml != '' ) {
+			return "<math xmlns='http://www.w3.org/1998/Math/MathML'>{$this->mathml}</math>";
+		}
+		if (($this->mode == MW_MATH_PNG) || ($this->html == '') ||
+		   (($this->mode == MW_MATH_SIMPLE) && ($this->conservativeness != 2)) ||
+		   (($this->mode == MW_MATH_MODERN || $this->mode == MW_MATH_MATHML) && ($this->conservativeness == 0))) {
+			return $this->_linkToMathImage();
+		} else {
+			return '<span class="texhtml">'.$this->html.'</span>';
+		}
+	}
+
+	function _linkToMathImage() {
+		global $wgMathPath;
+		$url = htmlspecialchars( "$wgMathPath/" . substr($this->hash, 0, 1)
+					.'/'. substr($this->hash, 1, 1) .'/'. substr($this->hash, 2, 1)
+					. "/{$this->hash}.png" );
+		$alt = trim(str_replace("\n", ' ', htmlspecialchars( $this->tex )));
+		return "<img class='tex' src=\"$url\" alt=\"$alt\" />";
+	}
+
+	function _getHashPath() {
+		global $wgMathDirectory;
+		$path = $wgMathDirectory .'/'. substr($this->hash, 0, 1)
+					.'/'. substr($this->hash, 1, 1)
+					.'/'. substr($this->hash, 2, 1);
+		wfDebug( "TeX: getHashPath, hash is: $this->hash, path is: $path\n" );
+		return $path;
+	}
+
+	public static function renderMath( $tex ) {
+		global $wgUser;
+		$math = new MathRenderer( $tex );
+		$math->setOutputMode( $wgUser->getOption('math'));
+		return $math->render();
+	}
+}
+?>
Index: /MediaWiki/branches/1.11/includes/MediaTransformOutput.php
===================================================================
--- /MediaWiki/branches/1.11/includes/MediaTransformOutput.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/MediaTransformOutput.php	(revision 1280)
@@ -0,0 +1,166 @@
+<?php
+
+/**
+ * Base class for the output of MediaHandler::doTransform() and Image::transform().
+ *
+ * @addtogroup Media
+ */
+abstract class MediaTransformOutput {
+	/**
+	 * Get the width of the output box
+	 */
+	function getWidth() {
+		return $this->width;
+	} 
+
+	/**
+	 * Get the height of the output box
+	 */
+	function getHeight() {
+		return $this->height;
+	}
+
+	/**
+	 * @return string The thumbnail URL
+	 */
+	function getUrl() {
+		return $this->url;
+	}
+
+	/**
+	 * @return string Destination file path (local filesystem)
+	 */
+	function getPath() {
+		return $this->path;
+	}
+
+	/**
+	 * Fetch HTML for this transform output
+	 * @param array $attribs Advisory associative array of HTML attributes supplied 
+	 *    by the linker. These can be incorporated into the output in any way.
+	 * @param array $linkAttribs Attributes of a suggested enclosing <a> tag. 
+	 *    May be ignored.
+	 */
+	abstract function toHtml( $attribs = array() , $linkAttribs = false );
+
+	/**
+	 * This will be overridden to return true in error classes
+	 */
+	function isError() {
+		return false;
+	}
+
+	/**
+	 * Wrap some XHTML text in an anchor tag with the given attributes
+	 */
+	protected function linkWrap( $linkAttribs, $contents ) {
+		if ( $linkAttribs ) {
+			return Xml::tags( 'a', $linkAttribs, $contents );
+		} else {
+			return $contents;
+		}
+	}
+}
+
+
+/**
+ * Media transform output for images
+ *
+ * @addtogroup Media
+ */
+class ThumbnailImage extends MediaTransformOutput {
+	/**
+	 * @param string $path Filesystem path to the thumb
+	 * @param string $url URL path to the thumb
+	 * @private
+	 */
+	function ThumbnailImage( $url, $width, $height, $path = false ) {
+		$this->url = $url;
+		# These should be integers when they get here.
+		# If not, there's a bug somewhere.  But let's at
+		# least produce valid HTML code regardless.
+		$this->width = round( $width );
+		$this->height = round( $height );
+		$this->path = $path;
+	}
+
+	/**
+	 * Return HTML <img ... /> tag for the thumbnail, will include
+	 * width and height attributes and a blank alt text (as required).
+	 *
+	 * You can set or override additional attributes by passing an
+	 * associative array of name => data pairs. The data will be escaped
+	 * for HTML output, so should be in plaintext.
+	 *
+	 * If $linkAttribs is given, the image will be enclosed in an <a> tag.
+	 *
+	 * @param array $attribs
+	 * @param array $linkAttribs
+	 * @return string
+	 * @public
+	 */
+	function toHtml( $attribs = array(), $linkAttribs = false ) {
+		$attribs['src'] = $this->url;
+		$attribs['width'] = $this->width;
+		$attribs['height'] = $this->height;
+		if( !isset( $attribs['alt'] ) ) $attribs['alt'] = '';
+		return $this->linkWrap( $linkAttribs, Xml::element( 'img', $attribs ) );
+	}
+
+}
+
+/**
+ * Basic media transform error class
+ *
+ * @addtogroup Media
+ */
+class MediaTransformError extends MediaTransformOutput {
+	var $htmlMsg, $textMsg, $width, $height, $url, $path;
+
+	function __construct( $msg, $width, $height /*, ... */ ) {
+		$args = array_slice( func_get_args(), 3 );
+		$htmlArgs = array_map( 'htmlspecialchars', $args );
+		$htmlArgs = array_map( 'nl2br', $htmlArgs );
+
+		$this->htmlMsg = wfMsgReplaceArgs( htmlspecialchars( wfMsgGetKey( $msg, true ) ), $htmlArgs );
+		$this->textMsg = wfMsgReal( $msg, $args );
+		$this->width = intval( $width );
+		$this->height = intval( $height );
+		$this->url = false;
+		$this->path = false;
+	}
+
+	function toHtml( $attribs = array(), $linkAttribs = false ) {
+		return "<table class=\"MediaTransformError\" style=\"" .
+			"width: {$this->width}px; height: {$this->height}px;\"><tr><td>" .
+			$this->htmlMsg .
+			"</td></tr></table>";
+	}
+
+	function toText() {
+		return $this->textMsg;
+	}
+
+	function getHtmlMsg() {
+		return $this->htmlMsg;
+	}
+
+	function isError() {
+		return true;
+	}
+}
+
+/**
+ * Shortcut class for parameter validation errors
+ *
+ * @addtogroup Media
+ */
+class TransformParameterError extends MediaTransformError {
+	function __construct( $params ) {
+		parent::__construct( 'thumbnail_error', 
+			max( @$params['width'], 180 ), max( @$params['height'], 180 ), 
+			wfMsg( 'thumbnail_invalid_params' ) );
+	}
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/MemcachedSessions.php
===================================================================
--- /MediaWiki/branches/1.11/includes/MemcachedSessions.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/MemcachedSessions.php	(revision 1280)
@@ -0,0 +1,72 @@
+<?php
+/**
+ * This file gets included if $wgSessionsInMemcache is set in the config.
+ * It redirects session handling functions to store their data in memcached
+ * instead of the local filesystem. Depending on circumstances, it may also
+ * be necessary to change the cookie settings to work across hostnames.
+ * See: http://www.php.net/manual/en/function.session-set-save-handler.php
+ *
+ */
+
+/**
+ * @todo document
+ */
+function memsess_key( $id ) {
+	return wfMemcKey( 'session', $id );
+}
+
+/**
+ * @todo document
+ */
+function memsess_open( $save_path, $session_name ) {
+	# NOP, $wgMemc should be set up already
+	return true;
+}
+
+/**
+ * @todo document
+ */
+function memsess_close() {
+	# NOP
+	return true;
+}
+
+/**
+ * @todo document
+ */
+function memsess_read( $id ) {
+	global $wgMemc;
+	$data = $wgMemc->get( memsess_key( $id ) );
+	if( ! $data ) return '';
+	return $data;
+}
+
+/**
+ * @todo document
+ */
+function memsess_write( $id, $data ) {
+	global $wgMemc;
+	$wgMemc->set( memsess_key( $id ), $data, 3600 );
+	return true;
+}
+
+/**
+ * @todo document
+ */
+function memsess_destroy( $id ) {
+	global $wgMemc;
+	$wgMemc->delete( memsess_key( $id ) );
+	return true;
+}
+
+/**
+ * @todo document
+ */
+function memsess_gc( $maxlifetime ) {
+	# NOP: Memcached performs garbage collection.
+	return true;
+}
+
+session_set_save_handler( 'memsess_open', 'memsess_close', 'memsess_read', 'memsess_write', 'memsess_destroy', 'memsess_gc' );
+
+?>
Index: /MediaWiki/branches/1.11/includes/MessageCache.php
===================================================================
--- /MediaWiki/branches/1.11/includes/MessageCache.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/MessageCache.php	(revision 1280)
@@ -0,0 +1,681 @@
+<?php
+/**
+ *
+ * @addtogroup Cache
+ */
+
+/**
+ *
+ */
+define( 'MSG_LOAD_TIMEOUT', 60);
+define( 'MSG_LOCK_TIMEOUT', 10);
+define( 'MSG_WAIT_TIMEOUT', 10);
+define( 'MSG_CACHE_VERSION', 1 );
+
+/**
+ * Message cache
+ * Performs various MediaWiki namespace-related functions
+ *
+ */
+class MessageCache {
+	var $mCache, $mUseCache, $mDisable, $mExpiry;
+	var $mMemcKey, $mKeys, $mParserOptions, $mParser;
+	var $mExtensionMessages = array();
+	var $mInitialised = false;
+	var $mDeferred = true;
+
+	function __construct( &$memCached, $useDB, $expiry, $memcPrefix) {
+		wfProfileIn( __METHOD__ );
+
+		$this->mUseCache = !is_null( $memCached );
+		$this->mMemc = &$memCached;
+		$this->mDisable = !$useDB;
+		$this->mExpiry = $expiry;
+		$this->mDisableTransform = false;
+		$this->mMemcKey = $memcPrefix.':messages';
+		$this->mKeys = false; # initialised on demand
+		$this->mInitialised = true;
+		$this->mParser = null;
+
+		# When we first get asked for a message,
+		# then we'll fill up the cache. If we
+		# can return a cache hit, this saves
+		# some extra milliseconds
+		$this->mDeferred = true;
+
+		wfProfileOut( __METHOD__ );
+	}
+
+	function getParserOptions() {
+		if ( !$this->mParserOptions ) {
+			$this->mParserOptions = new ParserOptions;
+		}
+		return $this->mParserOptions;
+	}
+
+	/**
+	 * Try to load the cache from a local file
+	 */
+	function loadFromLocal( $hash ) {
+		global $wgLocalMessageCache;
+
+		$this->mCache = false;
+		if ( $wgLocalMessageCache === false ) {
+			return;
+		}
+
+		$filename = "$wgLocalMessageCache/messages-" . wfWikiID();
+
+		wfSuppressWarnings();
+		$file = fopen( $filename, 'r' );
+		wfRestoreWarnings();
+		if ( !$file ) {
+			return;
+		}
+
+		// Check to see if the file has the hash specified
+		$localHash = fread( $file, 32 );
+		if ( $hash == $localHash ) {
+			// All good, get the rest of it
+			$serialized = fread( $file, 10000000 );
+			$this->setCache( unserialize( $serialized ) );
+		}
+		fclose( $file );
+	}
+
+	/**
+	 * Save the cache to a local file
+	 */
+	function saveToLocal( $serialized, $hash ) {
+		global $wgLocalMessageCache;
+
+		if ( $wgLocalMessageCache === false ) {
+			return;
+		}
+
+		$filename = "$wgLocalMessageCache/messages-" . wfWikiID();
+		$oldUmask = umask( 0 );
+		wfMkdirParents( $wgLocalMessageCache, 0777 );
+		umask( $oldUmask );
+
+		$file = fopen( $filename, 'w' );
+		if ( !$file ) {
+			wfDebug( "Unable to open local cache file for writing\n" );
+			return;
+		}
+
+		fwrite( $file, $hash . $serialized );
+		fclose( $file );
+		@chmod( $filename, 0666 );
+	}
+
+	function loadFromScript( $hash ) {
+		global $wgLocalMessageCache;
+		if ( $wgLocalMessageCache === false ) {
+			return;
+		}
+		
+		$filename = "$wgLocalMessageCache/messages-" . wfWikiID();
+		
+		wfSuppressWarnings();
+		$file = fopen( $filename, 'r' );
+		wfRestoreWarnings();
+		if ( !$file ) {
+			return;
+		}
+		$localHash=substr(fread($file,40),8);
+		fclose($file);
+		if ($hash!=$localHash) {
+			return;
+		}
+		require("$wgLocalMessageCache/messages-" . wfWikiID());
+		$this->setCache( $this->mCache);
+	}
+	
+	function saveToScript($array, $hash) {
+		global $wgLocalMessageCache;
+		if ( $wgLocalMessageCache === false ) {
+			return;
+		}
+
+		$filename = "$wgLocalMessageCache/messages-" . wfWikiID();
+		$oldUmask = umask( 0 );
+		wfMkdirParents( $wgLocalMessageCache, 0777 );
+		umask( $oldUmask );
+		$file = fopen( $filename.'.tmp', 'w');
+		fwrite($file,"<?php\n//$hash\n\n \$this->mCache = array(");
+		
+		foreach ($array as $key => $message) {
+			fwrite($file, "'". $this->escapeForScript($key).
+				"' => '" . $this->escapeForScript($message). 
+				"',\n");
+		}
+		fwrite($file,");\n?>");
+		fclose($file);
+		rename($filename.'.tmp',$filename);
+	}
+
+	function escapeForScript($string) {
+		$string = str_replace( '\\', '\\\\', $string );
+		$string = str_replace( '\'', '\\\'', $string );
+		return $string;
+	}
+
+	/**
+	 * Set the cache to $cache, if it is valid. Otherwise set the cache to false.
+	 */
+	function setCache( $cache ) {
+		if ( isset( $cache['VERSION'] ) && $cache['VERSION'] == MSG_CACHE_VERSION ) {
+			$this->mCache = $cache;
+		} else {
+			$this->mCache = false;
+		}
+	}
+
+	/**
+	 * Loads messages either from memcached or the database, if not disabled
+	 * On error, quietly switches to a fallback mode
+	 * Returns false for a reportable error, true otherwise
+	 */
+	function load() {
+		global $wgLocalMessageCache, $wgLocalMessageCacheSerialized;
+
+		if ( $this->mDisable ) {
+			static $shownDisabled = false;
+			if ( !$shownDisabled ) {
+				wfDebug( "MessageCache::load(): disabled\n" );
+				$shownDisabled = true;
+			}
+			return true;
+		}
+		if ( !$this->mUseCache ) {
+			$this->mDeferred = false;
+			return true;
+		}
+
+		$fname = 'MessageCache::load';
+		wfProfileIn( $fname );
+		$success = true;
+
+		$this->mCache = false;
+
+		# Try local cache
+		wfProfileIn( $fname.'-fromlocal' );
+		$hash = $this->mMemc->get( "{$this->mMemcKey}-hash" );
+		if ( $hash ) {
+			if ($wgLocalMessageCacheSerialized) {
+				$this->loadFromLocal( $hash );
+			} else {
+				$this->loadFromScript( $hash );
+			}
+			if ( $this->mCache ) {
+				wfDebug( "MessageCache::load(): got from local cache\n" );
+			}
+		}
+		wfProfileOut( $fname.'-fromlocal' );
+
+		# Try memcached
+		if ( !$this->mCache ) {
+			wfProfileIn( $fname.'-fromcache' );
+			$this->setCache( $this->mMemc->get( $this->mMemcKey ) );
+			if ( $this->mCache ) {
+				wfDebug( "MessageCache::load(): got from global cache\n" );
+				# Save to local cache
+				if ( $wgLocalMessageCache !== false ) {
+					$serialized = serialize( $this->mCache );
+					if ( !$hash ) {
+						$hash = md5( $serialized );
+						$this->mMemc->set( "{$this->mMemcKey}-hash", $hash, $this->mExpiry );
+					}
+					if ($wgLocalMessageCacheSerialized) {
+						$this->saveToLocal( $serialized,$hash );
+					} else {
+						$this->saveToScript( $this->mCache, $hash );
+					}
+				}
+			}
+			wfProfileOut( $fname.'-fromcache' );
+		}
+
+
+		# If there's nothing in memcached, load all the messages from the database
+		if ( !$this->mCache ) {
+			wfDebug( "MessageCache::load(): cache is empty\n" );
+			$this->lock();
+			# Other threads don't need to load the messages if another thread is doing it.
+			$success = $this->mMemc->add( $this->mMemcKey.'-status', "loading", MSG_LOAD_TIMEOUT );
+			if ( $success ) {
+				wfProfileIn( $fname.'-load' );
+				wfDebug( "MessageCache::load(): loading all messages from DB\n" );
+				$this->loadFromDB();
+				wfProfileOut( $fname.'-load' );
+
+				# Save in memcached
+				# Keep trying if it fails, this is kind of important
+				wfProfileIn( $fname.'-save' );
+				for ($i=0; $i<20 &&
+						   !$this->mMemc->set( $this->mMemcKey, $this->mCache, $this->mExpiry );
+					 $i++ ) {
+					usleep(mt_rand(500000,1500000));
+				}
+
+				# Save to local cache
+				if ( $wgLocalMessageCache !== false ) {
+					$serialized = serialize( $this->mCache );
+					$hash = md5( $serialized );
+					$this->mMemc->set( "{$this->mMemcKey}-hash", $hash, $this->mExpiry );
+					if ($wgLocalMessageCacheSerialized) {
+						$this->saveToLocal( $serialized,$hash );
+					} else {
+						$this->saveToScript( $this->mCache, $hash );
+					}
+				}
+
+				wfProfileOut( $fname.'-save' );
+				if ( $i == 20 ) {
+					$this->mMemc->set( $this->mMemcKey.'-status', 'error', 60*5 );
+					wfDebug( "MemCached set error in MessageCache: restart memcached server!\n" );
+				} else {
+					$this->mMemc->delete( $this->mMemcKey.'-status' );
+				}
+			}
+			$this->unlock();
+		}
+
+		if ( !is_array( $this->mCache ) ) {
+			wfDebug( "MessageCache::load(): unable to load cache, disabled\n" );
+			$this->mDisable = true;
+			$this->mCache = false;
+		}
+		wfProfileOut( $fname );
+		$this->mDeferred = false;
+		return $success;
+	}
+
+	/**
+	 * Loads all or main part of cacheable messages from the database
+	 */
+	function loadFromDB() {
+		global $wgMaxMsgCacheEntrySize;
+
+		wfProfileIn( __METHOD__ );
+		$dbr = wfGetDB( DB_SLAVE );
+		$this->mCache = array();
+
+		# Load titles for all oversized pages in the MediaWiki namespace
+		$res = $dbr->select( 'page', 'page_title',
+			array( 
+				'page_len > ' . intval( $wgMaxMsgCacheEntrySize ),
+				'page_is_redirect' => 0,
+				'page_namespace' => NS_MEDIAWIKI,
+			), 
+			__METHOD__ );
+		while ( $row = $dbr->fetchObject( $res ) ) {
+			$this->mCache[$row->page_title] = '!TOO BIG';
+		}
+		$dbr->freeResult( $res );
+
+		# Load text for the remaining pages
+		$res = $dbr->select( array( 'page', 'revision', 'text' ),
+			array( 'page_title', 'old_text', 'old_flags' ),
+			array( 
+				'page_is_redirect' => 0,
+				'page_namespace' => NS_MEDIAWIKI,
+				'page_latest=rev_id',
+				'rev_text_id=old_id',
+				'page_len <= ' . intval( $wgMaxMsgCacheEntrySize ) ), 
+			__METHOD__ );
+
+		for ( $row = $dbr->fetchObject( $res ); $row; $row = $dbr->fetchObject( $res ) ) {
+			$this->mCache[$row->page_title] = ' ' . Revision::getRevisionText( $row );
+		}
+		$this->mCache['VERSION'] = MSG_CACHE_VERSION;
+		$dbr->freeResult( $res );
+		wfProfileOut( __METHOD__ );
+	}
+
+	/**
+	 * Not really needed anymore
+	 */
+	function getKeys() {
+		global $wgContLang;
+		if ( !$this->mKeys ) {
+			$this->mKeys = array();
+			$allMessages = Language::getMessagesFor( 'en' );
+			foreach ( $allMessages as $key => $unused ) {
+				$title = $wgContLang->ucfirst( $key );
+				array_push( $this->mKeys, $title );
+			}
+		}
+		return $this->mKeys;
+	}
+
+	function replace( $title, $text ) {
+		global $wgLocalMessageCache, $wgLocalMessageCacheSerialized, $parserMemc;
+		global $wgMaxMsgCacheEntrySize;
+
+		wfProfileIn( __METHOD__ );
+		$this->lock();
+		$this->load();
+		$parserMemc->delete(wfMemcKey('sidebar'));
+		if ( is_array( $this->mCache ) ) {
+			if ( $text === false ) {
+				# Article was deleted
+				unset( $this->mCache[$title] );
+				$this->mMemc->delete( "$this->mMemcKey:{$title}" );
+			} elseif ( strlen( $text ) > $wgMaxMsgCacheEntrySize ) {
+				$this->mCache[$title] = '!TOO BIG';
+				$this->mMemc->set( "$this->mMemcKey:{$title}", ' '.$text, $this->mExpiry );
+			} else {
+				$this->mCache[$title] = ' ' . $text;
+				$this->mMemc->delete( "$this->mMemcKey:{$title}" );
+			}
+			$this->mMemc->set( $this->mMemcKey, $this->mCache, $this->mExpiry );
+
+			# Save to local cache
+			if ( $wgLocalMessageCache !== false ) {
+				$serialized = serialize( $this->mCache );
+				$hash = md5( $serialized );
+				$this->mMemc->set( "{$this->mMemcKey}-hash", $hash, $this->mExpiry );
+				if ($wgLocalMessageCacheSerialized) {
+					$this->saveToLocal( $serialized,$hash );
+				} else {
+					$this->saveToScript( $this->mCache, $hash );
+				}
+			}
+		}
+		$this->unlock();
+		wfProfileOut( __METHOD__ );
+	}
+
+	/**
+	 * Returns success
+	 * Represents a write lock on the messages key
+	 */
+	function lock() {
+		if ( !$this->mUseCache ) {
+			return true;
+		}
+
+		$lockKey = $this->mMemcKey . 'lock';
+		for ($i=0; $i < MSG_WAIT_TIMEOUT && !$this->mMemc->add( $lockKey, 1, MSG_LOCK_TIMEOUT ); $i++ ) {
+			sleep(1);
+		}
+
+		return $i >= MSG_WAIT_TIMEOUT;
+	}
+
+	function unlock() {
+		if ( !$this->mUseCache ) {
+			return;
+		}
+
+		$lockKey = $this->mMemcKey . 'lock';
+		$this->mMemc->delete( $lockKey );
+	}
+
+	/**
+	 * Get a message from either the content language or the user language.
+	 *
+	 * @param string $key The message cache key
+	 * @param bool $useDB Get the message from the DB, false to use only the localisation
+	 * @param bool $forContent Get the message from the content language rather than the 
+	 *                         user language
+	 * @param bool $isFullKey Specifies whether $key is a two part key "lang/msg".
+	 */
+	function get( $key, $useDB = true, $forContent = true, $isFullKey = false ) {
+		global $wgContLanguageCode, $wgContLang, $wgLang;
+		if( $forContent ) {
+			$lang =& $wgContLang;
+		} else {
+			$lang =& $wgLang;
+		}
+		$langcode = $lang->getCode();
+		# If uninitialised, someone is trying to call this halfway through Setup.php
+		if( !$this->mInitialised ) {
+			return '&lt;' . htmlspecialchars($key) . '&gt;';
+		}
+		# If cache initialization was deferred, start it now.
+		if( $this->mDeferred && !$this->mDisable && $useDB ) {
+			$this->load();
+		}
+
+		$message = false;
+
+		# Normalise title-case input
+		$lckey = $wgContLang->lcfirst( $key );
+		$lckey = str_replace( ' ', '_', $lckey );
+
+		# Try the MediaWiki namespace
+		if( !$this->mDisable && $useDB ) {
+			$title = $wgContLang->ucfirst( $lckey );
+			if(!$isFullKey && ($langcode != $wgContLanguageCode) ) {
+				$title .= '/' . $langcode;
+			}
+			$message = $this->getMsgFromNamespace( $title );
+		}
+		# Try the extension array
+		if( $message === false && isset( $this->mExtensionMessages[$langcode][$lckey] ) ) {
+			$message = $this->mExtensionMessages[$langcode][$lckey];
+		}
+		if ( $message === false && isset( $this->mExtensionMessages['en'][$lckey] ) ) {
+			$message = $this->mExtensionMessages['en'][$lckey];
+		}
+
+		# Try the array in the language object
+		if( $message === false ) {
+			#wfDebug( "Trying language object for message $key\n" );
+			wfSuppressWarnings();
+			$message = $lang->getMessage( $lckey );
+			wfRestoreWarnings();
+			if ( is_null( $message ) ) {
+				$message = false;
+			}
+		}
+
+		# Try the array of another language
+		if( $message === false && strpos( $lckey, '/' ) ) {
+			$message = explode( '/', $lckey );
+			if ( $message[1] ) {
+				wfSuppressWarnings();
+				$message = Language::getMessageFor( $message[0], $message[1] );
+				wfRestoreWarnings();
+				if ( is_null( $message ) ) {
+					$message = false;
+				}
+			} else {
+				$message = false;
+			}
+		}
+
+		# Is this a custom message? Try the default language in the db...
+		if( ($message === false || $message === '-' ) &&
+			!$this->mDisable && $useDB &&
+			!$isFullKey && ($langcode != $wgContLanguageCode) ) {
+			$message = $this->getMsgFromNamespace( $wgContLang->ucfirst( $lckey ) );
+		}
+
+		# Final fallback
+		if( $message === false ) {
+			return '&lt;' . htmlspecialchars($key) . '&gt;';
+		}
+
+		# Replace brace tags
+		$message = $this->transform( $message );
+		return $message;
+	}
+
+	/**
+	 * Get a message from the MediaWiki namespace, with caching. The key must 
+	 * first be converted to two-part lang/msg form if necessary.
+	 *
+	 * @param string $title Message cache key with initial uppercase letter
+	 */
+	function getMsgFromNamespace( $title ) {
+		$message = false;
+		$type = false;
+
+		# Try the cache
+		if( $this->mUseCache && isset( $this->mCache[$title] ) ) {
+			$entry = $this->mCache[$title];
+			$type = substr( $entry, 0, 1 );
+			if ( $type == ' ' ) {
+				return substr( $entry, 1 );
+			}
+		}
+
+		# Call message hooks, in case they are defined
+		wfRunHooks('MessagesPreLoad', array( $title, &$message ) );
+		if ( $message !== false ) {
+			return $message;
+		}
+
+		# If there is no cache entry and no placeholder, it doesn't exist
+		if ( $type != '!' && $message === false ) {
+			return false;
+		}
+
+		$memcKey = $this->mMemcKey . ':' . $title;
+
+		# Try the individual message cache
+		if ( $this->mUseCache ) {
+			$entry = $this->mMemc->get( $memcKey );
+			if ( $entry ) {
+				$type = substr( $entry, 0, 1 );
+
+				if ( $type == ' ' ) {
+					$message = substr( $entry, 1 );
+					$this->mCache[$title] = $entry;
+					return $message;
+				} elseif ( $entry == '!NONEXISTENT' ) {
+					return false;
+				} else {
+					# Corrupt/obsolete entry, delete it
+					$this->mMemc->delete( $memcKey );
+				}
+
+			}
+		}
+
+		# Try loading it from the DB
+		$revision = Revision::newFromTitle( Title::makeTitle( NS_MEDIAWIKI, $title ) );
+		if( $revision ) {
+			$message = $revision->getText();
+			if ($this->mUseCache) {
+				$this->mCache[$title] = ' ' . $message;
+				$this->mMemc->set( $memcKey, $message, $this->mExpiry );
+			}
+		} else {
+			# Negative caching
+			# Use some special text instead of false, because false gets converted to '' somewhere
+			$this->mMemc->set( $memcKey, '!NONEXISTENT', $this->mExpiry );
+			$this->mCache[$title] = false;
+		}
+
+		return $message;
+	}
+
+	function transform( $message ) {
+		global $wgParser;
+		if ( !$this->mParser && isset( $wgParser ) ) {
+			# Do some initialisation so that we don't have to do it twice
+			$wgParser->firstCallInit();
+			# Clone it and store it
+			$this->mParser = clone $wgParser;
+		}
+		if ( !$this->mDisableTransform && $this->mParser ) {
+			if( strpos( $message, '{{' ) !== false ) {
+				$message = $this->mParser->transformMsg( $message, $this->getParserOptions() );
+			}
+		}
+		return $message;
+	}
+
+	function disable() { $this->mDisable = true; }
+	function enable() { $this->mDisable = false; }
+	function disableTransform() { $this->mDisableTransform = true; }
+	function enableTransform() { $this->mDisableTransform = false; }
+	function setTransform( $x ) { $this->mDisableTransform = $x; }
+	function getTransform() { return $this->mDisableTransform; }
+
+	/**
+	 * Add a message to the cache
+	 *
+	 * @param mixed $key
+	 * @param mixed $value
+	 * @param string $lang The messages language, English by default
+	 */
+	function addMessage( $key, $value, $lang = 'en' ) {
+		$this->mExtensionMessages[$lang][$key] = $value;
+	}
+
+	/**
+	 * Add an associative array of message to the cache
+	 *
+	 * @param array $messages An associative array of key => values to be added
+	 * @param string $lang The messages language, English by default
+	 */
+	function addMessages( $messages, $lang = 'en' ) {
+		wfProfileIn( __METHOD__ );
+		if ( isset( $this->mExtensionMessages[$lang] ) ) {
+			$this->mExtensionMessages[$lang] = $messages + $this->mExtensionMessages[$lang];
+		} else {
+			$this->mExtensionMessages[$lang] = $messages;
+		}
+		wfProfileOut( __METHOD__ );
+	}
+
+	/**
+	 * Add a 2-D array of messages by lang. Useful for extensions.
+	 * Introduced in 1.9. Please do not use it for now, for backwards compatibility.
+	 *
+	 * @param array $messages The array to be added
+	 */
+	function addMessagesByLang( $messages ) {
+		wfProfileIn( __METHOD__ );
+		foreach ( $messages as $key => $value ) {
+			$this->addMessages( $value, $key );
+		}
+		wfProfileOut( __METHOD__ );
+	}
+
+	/**
+	 * Get the extension messages for a specific language
+	 *
+	 * @param string $lang The messages language, English by default
+	 */
+	function getExtensionMessagesFor( $lang = 'en' ) {
+		wfProfileIn( __METHOD__ );
+		$messages = array();
+		if ( isset( $this->mExtensionMessages[$lang] ) ) {
+			$messages = $this->mExtensionMessages[$lang];
+		}
+		if ( $lang != 'en' ) {
+			$messages = $messages + $this->mExtensionMessages['en'];
+		}
+		wfProfileOut( __METHOD__ );
+		return $messages;
+	}
+
+	/**
+	 * Clear all stored messages. Mainly used after a mass rebuild.
+	 */
+	function clear() {
+		global $wgLocalMessageCache;
+		if( $this->mUseCache ) {
+			# Global cache
+			$this->mMemc->delete( $this->mMemcKey );
+			# Invalidate all local caches
+			$this->mMemc->delete( "{$this->mMemcKey}-hash" );
+		}
+	}
+
+	static function loadAllMessages() {
+		# Some extensions will load their messages when you load their class file
+		wfLoadAllExtensions();
+		# Others will respond to this hook
+		wfRunHooks( 'LoadAllMessages' );
+		# Still others will respond to neither, they are EVIL. We sometimes need to know!
+	}
+}
+?>
Index: /MediaWiki/branches/1.11/includes/Metadata.php
===================================================================
--- /MediaWiki/branches/1.11/includes/Metadata.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/Metadata.php	(revision 1280)
@@ -0,0 +1,368 @@
+<?php
+/**
+ * Metadata.php -- provides DublinCore and CreativeCommons metadata
+ * Copyright 2004, Evan Prodromou <evan@wikitravel.org>.
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ *
+ * @author Evan Prodromou <evan@wikitravel.org>
+ */
+
+/**
+ * TODO: Perhaps make this file into a Metadata class, with static methods (declared 
+ * as private where indicated), to move these functions out of the global namespace?
+ */
+define('RDF_TYPE_PREFS', "application/rdf+xml,text/xml;q=0.7,application/xml;q=0.5,text/rdf;q=0.1");
+
+function wfDublinCoreRdf($article) {
+
+	$url = dcReallyFullUrl($article->mTitle);
+
+	if (rdfSetup()) {
+		dcPrologue($url);
+		dcBasics($article);
+		dcEpilogue();
+	}
+}
+
+function wfCreativeCommonsRdf($article) {
+
+	if (rdfSetup()) {
+		global $wgRightsUrl;
+
+		$url = dcReallyFullUrl($article->mTitle);
+
+		ccPrologue();
+		ccSubPrologue('Work', $url);
+		dcBasics($article);
+		if (isset($wgRightsUrl)) {
+			$url = htmlspecialchars( $wgRightsUrl );
+			print "    <cc:license rdf:resource=\"$url\" />\n";
+		}
+
+		ccSubEpilogue('Work');
+
+		if (isset($wgRightsUrl)) {
+			$terms = ccGetTerms($wgRightsUrl);
+			if ($terms) {
+				ccSubPrologue('License', $wgRightsUrl);
+				ccLicense($terms);
+				ccSubEpilogue('License');
+			}
+		}
+	}
+
+	ccEpilogue();
+}
+
+/**
+ * @private
+ */
+function rdfSetup() {
+	global $wgOut, $_SERVER;
+
+	$httpaccept = isset($_SERVER['HTTP_ACCEPT']) ? $_SERVER['HTTP_ACCEPT'] : null;
+
+	$rdftype = wfNegotiateType(wfAcceptToPrefs($httpaccept), wfAcceptToPrefs(RDF_TYPE_PREFS));
+
+	if (!$rdftype) {
+		wfHttpError(406, "Not Acceptable", wfMsg("notacceptable"));
+		return false;
+	} else {
+		$wgOut->disable();
+		header( "Content-type: {$rdftype}; charset=utf-8" );
+		$wgOut->sendCacheControl();
+		return true;
+	}
+}
+
+/**
+ * @private
+ */
+function dcPrologue($url) {
+	global $wgOutputEncoding;
+
+	$url = htmlspecialchars( $url );
+	print "<" . "?xml version=\"1.0\" encoding=\"{$wgOutputEncoding}\" ?" . ">
+
+																			  <!DOCTYPE rdf:RDF PUBLIC \"-//DUBLIN CORE//DCMES DTD 2002/07/31//EN\" \"http://dublincore.org/documents/2002/07/31/dcmes-xml/dcmes-xml-dtd.dtd\">
+
+																			  <rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\"
+																			  xmlns:dc=\"http://purl.org/dc/elements/1.1/\">
+																			  <rdf:Description rdf:about=\"$url\">
+																			  ";
+}
+
+/**
+ * @private
+ */
+function dcEpilogue() {
+	print "
+			</rdf:Description>
+			</rdf:RDF>
+			";
+}
+
+/**
+ * @private
+ */
+function dcBasics($article) {
+	global $wgContLanguageCode, $wgSitename;
+
+	dcElement('title', $article->mTitle->getText());
+	dcPageOrString('publisher', wfMsg('aboutpage'), $wgSitename);
+	dcElement('language', $wgContLanguageCode);
+	dcElement('type', 'Text');
+	dcElement('format', 'text/html');
+	dcElement('identifier', dcReallyFullUrl($article->mTitle));
+	dcElement('date', dcDate($article->getTimestamp()));
+
+	$last_editor = $article->getUser();
+
+	if ($last_editor == 0) {
+		dcPerson('creator', 0);
+	} else {
+		dcPerson('creator', $last_editor, $article->getUserText(),
+				 User::whoIsReal($last_editor));
+	}
+
+	$contributors = $article->getContributors();
+
+	foreach ($contributors as $user_parts) {
+		dcPerson('contributor', $user_parts[0], $user_parts[1], $user_parts[2]);
+	}
+
+	dcRights();
+}
+
+/**
+ * @private
+ */
+function ccPrologue() {
+	global $wgOutputEncoding;
+
+	echo "<" . "?xml version='1.0'  encoding='{$wgOutputEncoding}' ?" . ">
+
+																		  <rdf:RDF xmlns:cc=\"http://web.resource.org/cc/\"
+																		  xmlns:dc=\"http://purl.org/dc/elements/1.1/\"
+																		  xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">
+																		  ";
+}
+
+/**
+ * @private
+ */
+function ccSubPrologue($type, $url) {
+	$url = htmlspecialchars( $url );
+	echo "  <cc:{$type} rdf:about=\"{$url}\">\n";
+}
+
+/**
+ * @private
+ */
+function ccSubEpilogue($type) {
+	echo "  </cc:{$type}>\n";
+}
+
+/**
+ * @private
+ */
+function ccLicense($terms) {
+
+	foreach ($terms as $term) {
+		switch ($term) {
+		 case 're':
+			ccTerm('permits', 'Reproduction'); break;
+		 case 'di':
+			ccTerm('permits', 'Distribution'); break;
+		 case 'de':
+			ccTerm('permits', 'DerivativeWorks'); break;
+		 case 'nc':
+			ccTerm('prohibits', 'CommercialUse'); break;
+		 case 'no':
+			ccTerm('requires', 'Notice'); break;
+		 case 'by':
+			ccTerm('requires', 'Attribution'); break;
+		 case 'sa':
+			ccTerm('requires', 'ShareAlike'); break;
+		 case 'sc':
+			ccTerm('requires', 'SourceCode'); break;
+		}
+	}
+}
+
+/**
+ * @private
+ */
+function ccTerm($term, $name) {
+	print "    <cc:{$term} rdf:resource=\"http://web.resource.org/cc/{$name}\" />\n";
+}
+
+/**
+ * @private
+ */
+function ccEpilogue() {
+	echo "</rdf:RDF>\n";
+}
+
+/**
+ * @private
+ */
+function dcElement($name, $value) {
+	$value = htmlspecialchars( $value );
+	print "    <dc:{$name}>{$value}</dc:{$name}>\n";
+}
+
+/**
+ * @private
+ */
+function dcDate($timestamp) {
+	return substr($timestamp, 0, 4) . '-'
+	  . substr($timestamp, 4, 2) . '-'
+	  . substr($timestamp, 6, 2);
+}
+
+/**
+ * @private
+ */
+function dcReallyFullUrl($title) {
+	return $title->getFullURL();
+}
+
+/**
+ * @private
+ */
+function dcPageOrString($name, $page, $str) {
+	$nt = Title::newFromText($page);
+
+	if (!$nt || $nt->getArticleID() == 0) {
+		dcElement($name, $str);
+	} else {
+		dcPage($name, $nt);
+	}
+}
+
+/**
+ * @private
+ */
+function dcPage($name, $title) {
+	dcUrl($name, dcReallyFullUrl($title));
+}
+
+/**
+ * @private
+ */
+function dcUrl($name, $url) {
+	$url = htmlspecialchars( $url );
+	print "    <dc:{$name} rdf:resource=\"{$url}\" />\n";
+}
+
+/**
+ * @private
+ */
+function dcPerson($name, $id, $user_name='', $user_real_name='') {
+	global $wgContLang;
+
+	if ($id == 0) {
+		dcElement($name, wfMsg('anonymous'));
+	} else if ( !empty($user_real_name) ) {
+		dcElement($name, $user_real_name);
+	} else {
+		# XXX: This shouldn't happen.
+		if( empty( $user_name ) ) {
+			$user_name = User::whoIs($id);
+		}
+		dcPageOrString($name, $wgContLang->getNsText(NS_USER) . ':' . $user_name, wfMsg('siteuser', $user_name));
+	}
+}
+
+/**
+ * Takes an arg, for future enhancement with different rights for
+ * different pages.
+ * @private
+ */
+function dcRights() {
+
+	global $wgRightsPage, $wgRightsUrl, $wgRightsText;
+
+	if (isset($wgRightsPage) &&
+		($nt = Title::newFromText($wgRightsPage))
+		&& ($nt->getArticleID() != 0)) {
+		dcPage('rights', $nt);
+	} else if (isset($wgRightsUrl)) {
+		dcUrl('rights', $wgRightsUrl);
+	} else if (isset($wgRightsText)) {
+		dcElement('rights', $wgRightsText);
+	}
+}
+
+/**
+ * @private
+ */
+function ccGetTerms($url) {
+	global $wgLicenseTerms;
+
+	if (isset($wgLicenseTerms)) {
+		return $wgLicenseTerms;
+	} else {
+		$known = getKnownLicenses();
+		if( isset( $known[$url] ) ) {
+			return $known[$url];
+		} else {
+			return array();
+		}
+	}
+}
+
+/**
+ * @private
+ */
+function getKnownLicenses() {
+
+	$ccLicenses = array('by', 'by-nd', 'by-nd-nc', 'by-nc',
+						'by-nc-sa', 'by-sa');
+	$ccVersions = array('1.0', '2.0');
+	$knownLicenses = array();
+
+	foreach ($ccVersions as $version) {
+		foreach ($ccLicenses as $license) {
+			if( $version == '2.0' && substr( $license, 0, 2) != 'by' ) {
+				# 2.0 dropped the non-attribs licenses
+				continue;
+			}
+			$lurl = "http://creativecommons.org/licenses/{$license}/{$version}/";
+			$knownLicenses[$lurl] = explode('-', $license);
+			$knownLicenses[$lurl][] = 're';
+			$knownLicenses[$lurl][] = 'di';
+			$knownLicenses[$lurl][] = 'no';
+			if (!in_array('nd', $knownLicenses[$lurl])) {
+				$knownLicenses[$lurl][] = 'de';
+			}
+		}
+	}
+
+	/* Handle the GPL and LGPL, too. */
+
+	$knownLicenses['http://creativecommons.org/licenses/GPL/2.0/'] =
+	  array('de', 're', 'di', 'no', 'sa', 'sc');
+	$knownLicenses['http://creativecommons.org/licenses/LGPL/2.1/'] =
+	  array('de', 're', 'di', 'no', 'sa', 'sc');
+	$knownLicenses['http://www.gnu.org/copyleft/fdl.html'] =
+	  array('de', 're', 'di', 'no', 'sa', 'sc');
+
+	return $knownLicenses;
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/MimeMagic.php
===================================================================
--- /MediaWiki/branches/1.11/includes/MimeMagic.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/MimeMagic.php	(revision 1280)
@@ -0,0 +1,718 @@
+<?php
+/** Module defining helper functions for detecting and dealing with mime types.
+ *
+ */
+
+ /** Defines a set of well known mime types
+ * This is used as a fallback to mime.types files.
+ * An extensive list of well known mime types is provided by
+ * the file mime.types in the includes directory.
+ */
+define('MM_WELL_KNOWN_MIME_TYPES',<<<END_STRING
+application/ogg ogg ogm
+application/pdf pdf
+application/x-javascript js
+application/x-shockwave-flash swf
+audio/midi mid midi kar
+audio/mpeg mpga mpa mp2 mp3
+audio/x-aiff aif aiff aifc
+audio/x-wav wav
+audio/ogg ogg
+image/x-bmp bmp
+image/gif gif
+image/jpeg jpeg jpg jpe
+image/png png
+image/svg+xml image/svg svg
+image/tiff tiff tif
+image/vnd.djvu djvu
+image/x-portable-pixmap ppm
+text/plain txt
+text/html html htm
+video/ogg ogm ogg
+video/mpeg mpg mpeg
+END_STRING
+);
+
+ /** Defines a set of well known mime info entries
+ * This is used as a fallback to mime.info files.
+ * An extensive list of well known mime types is provided by
+ * the file mime.info in the includes directory.
+ */
+define('MM_WELL_KNOWN_MIME_INFO', <<<END_STRING
+application/pdf [OFFICE]
+text/javascript application/x-javascript [EXECUTABLE]
+application/x-shockwave-flash [MULTIMEDIA]
+audio/midi [AUDIO]
+audio/x-aiff [AUDIO]
+audio/x-wav [AUDIO]
+audio/mp3 audio/mpeg [AUDIO]
+application/ogg audio/ogg video/ogg [MULTIMEDIA]
+image/x-bmp image/bmp [BITMAP]
+image/gif [BITMAP]
+image/jpeg [BITMAP]
+image/png [BITMAP]
+image/svg+xml [DRAWING]
+image/tiff [BITMAP]
+image/vnd.djvu [BITMAP]
+image/x-portable-pixmap [BITMAP]
+text/plain [TEXT]
+text/html [TEXT]
+video/ogg [VIDEO]
+video/mpeg [VIDEO]
+unknown/unknown application/octet-stream application/x-empty [UNKNOWN]
+END_STRING
+);
+
+#note: because this file is possibly included by a function,
+#we need to access the global scope explicitely!
+global $wgLoadFileinfoExtension;
+
+if ($wgLoadFileinfoExtension) {
+	if(!extension_loaded('fileinfo')) dl('fileinfo.' . PHP_SHLIB_SUFFIX);
+}
+
+/** 
+ * Implements functions related to mime types such as detection and mapping to
+ * file extension.
+ *
+ * Instances of this class are stateles, there only needs to be one global instance
+ * of MimeMagic. Please use MimeMagic::singleton() to get that instance.
+ */
+class MimeMagic {
+
+	/**
+	* Mapping of media types to arrays of mime types.
+	* This is used by findMediaType and getMediaType, respectively
+	*/
+	var $mMediaTypes= NULL;
+
+	/** Map of mime type aliases
+	*/
+	var $mMimeTypeAliases= NULL;
+
+	/** map of mime types to file extensions (as a space seprarated list)
+	*/
+	var $mMimeToExt= NULL;
+
+	/** map of file extensions types to mime types (as a space seprarated list)
+	*/
+	var $mExtToMime= NULL;
+
+	/** The singleton instance
+	 */
+	private static $instance;
+
+	/** Initializes the MimeMagic object. This is called by MimeMagic::singleton().
+	*
+	* This constructor parses the mime.types and mime.info files and build internal mappings.
+	*/
+	function __construct() {
+		/*
+		*   --- load mime.types ---
+		*/
+
+		global $wgMimeTypeFile;
+
+		$types= MM_WELL_KNOWN_MIME_TYPES;
+
+		if ($wgMimeTypeFile) {
+			if (is_file($wgMimeTypeFile) and is_readable($wgMimeTypeFile)) {
+				wfDebug("MimeMagic::MimeMagic: loading mime types from $wgMimeTypeFile\n");
+
+				$types.= "\n";
+				$types.= file_get_contents($wgMimeTypeFile);
+			}
+			else wfDebug("MimeMagic::MimeMagic: can't load mime types from $wgMimeTypeFile\n");
+		}
+		else wfDebug("MimeMagic::MimeMagic: no mime types file defined, using build-ins only.\n");
+
+		$types= str_replace(array("\r\n","\n\r","\n\n","\r\r","\r"),"\n",$types);
+		$types= str_replace("\t"," ",$types);
+
+		$this->mMimeToExt= array();
+		$this->mToMime= array();
+
+		$lines= explode("\n",$types);
+		foreach ($lines as $s) {
+			$s= trim($s);
+			if (empty($s)) continue;
+			if (strpos($s,'#')===0) continue;
+
+			$s= strtolower($s);
+			$i= strpos($s,' ');
+
+			if ($i===false) continue;
+
+			#print "processing MIME line $s<br>";
+
+			$mime= substr($s,0,$i);
+			$ext= trim(substr($s,$i+1));
+
+			if (empty($ext)) continue;
+
+			if ( !empty($this->mMimeToExt[$mime])) $this->mMimeToExt[$mime] .= ' '.$ext;
+			else $this->mMimeToExt[$mime]= $ext;
+
+			$extensions= explode(' ',$ext);
+
+			foreach ($extensions as $e) {
+				$e= trim($e);
+				if (empty($e)) continue;
+
+				if ( !empty($this->mExtToMime[$e])) $this->mExtToMime[$e] .= ' '.$mime;
+				else $this->mExtToMime[$e]= $mime;
+			}
+		}
+
+		/*
+		*   --- load mime.info ---
+		*/
+
+		global $wgMimeInfoFile;
+
+		$info= MM_WELL_KNOWN_MIME_INFO;
+
+		if ($wgMimeInfoFile) {
+			if (is_file($wgMimeInfoFile) and is_readable($wgMimeInfoFile)) {
+				wfDebug("MimeMagic::MimeMagic: loading mime info from $wgMimeInfoFile\n");
+
+				$info.= "\n";
+				$info.= file_get_contents($wgMimeInfoFile);
+			}
+			else wfDebug("MimeMagic::MimeMagic: can't load mime info from $wgMimeInfoFile\n");
+		}
+		else wfDebug("MimeMagic::MimeMagic: no mime info file defined, using build-ins only.\n");
+
+		$info= str_replace(array("\r\n","\n\r","\n\n","\r\r","\r"),"\n",$info);
+		$info= str_replace("\t"," ",$info);
+
+		$this->mMimeTypeAliases= array();
+		$this->mMediaTypes= array();
+
+		$lines= explode("\n",$info);
+		foreach ($lines as $s) {
+			$s= trim($s);
+			if (empty($s)) continue;
+			if (strpos($s,'#')===0) continue;
+
+			$s= strtolower($s);
+			$i= strpos($s,' ');
+
+			if ($i===false) continue;
+
+			#print "processing MIME INFO line $s<br>";
+
+			$match= array();
+			if (preg_match('!\[\s*(\w+)\s*\]!',$s,$match)) {
+				$s= preg_replace('!\[\s*(\w+)\s*\]!','',$s);
+				$mtype= trim(strtoupper($match[1]));
+			}
+			else $mtype= MEDIATYPE_UNKNOWN;
+
+			$m= explode(' ',$s);
+
+			if (!isset($this->mMediaTypes[$mtype])) $this->mMediaTypes[$mtype]= array();
+
+			foreach ($m as $mime) {
+				$mime= trim($mime);
+				if (empty($mime)) continue;
+
+				$this->mMediaTypes[$mtype][]= $mime;
+			}
+
+			if (sizeof($m)>1) {
+				$main= $m[0];
+				for ($i=1; $i<sizeof($m); $i+= 1) {
+					$mime= $m[$i];
+					$this->mMimeTypeAliases[$mime]= $main;
+				}
+			}
+		}
+
+	}
+
+	/**
+	 * Get an instance of this class
+	 */
+	static function &singleton() {
+		if ( !isset( self::$instance ) ) {
+			self::$instance = new MimeMagic;
+		}
+		return self::$instance;
+	}
+
+	/** returns a list of file extensions for a given mime type
+	* as a space separated string.
+	*/
+	function getExtensionsForType($mime) {
+		$mime= strtolower($mime);
+
+		$r= @$this->mMimeToExt[$mime];
+
+		if (@!$r and isset($this->mMimeTypeAliases[$mime])) {
+			$mime= $this->mMimeTypeAliases[$mime];
+			$r= @$this->mMimeToExt[$mime];
+		}
+
+		return $r;
+	}
+
+	/** returns a list of mime types for a given file extension
+	* as a space separated string.
+	*/
+	function getTypesForExtension($ext) {
+		$ext= strtolower($ext);
+
+		$r= isset( $this->mExtToMime[$ext] ) ? $this->mExtToMime[$ext] : null;
+		return $r;
+	}
+
+	/** returns a single mime type for a given file extension.
+	* This is always the first type from the list returned by getTypesForExtension($ext).
+	*/
+	function guessTypesForExtension($ext) {
+		$m= $this->getTypesForExtension( $ext );
+		if( is_null($m) ) return NULL;
+
+		$m= trim( $m );
+		$m= preg_replace('/\s.*$/','',$m);
+
+		return $m;
+	}
+
+
+	/** tests if the extension matches the given mime type.
+	* returns true if a match was found, NULL if the mime type is unknown,
+	* and false if the mime type is known but no matches where found.
+	*/
+	function isMatchingExtension($extension,$mime) {
+		$ext= $this->getExtensionsForType($mime);
+
+		if (!$ext) {
+			return NULL;  //unknown
+		}
+
+		$ext= explode(' ',$ext);
+
+		$extension= strtolower($extension);
+ 		if (in_array($extension,$ext)) {
+			return true;
+		}
+
+		return false;
+	}
+
+	/** returns true if the mime type is known to represent
+	* an image format supported by the PHP GD library.
+	*/
+	function isPHPImageType( $mime ) {
+		#as defined by imagegetsize and image_type_to_mime
+		static $types = array(
+			'image/gif', 'image/jpeg', 'image/png',
+			'image/x-bmp', 'image/xbm', 'image/tiff',
+			'image/jp2', 'image/jpeg2000', 'image/iff',
+			'image/xbm', 'image/x-xbitmap',
+			'image/vnd.wap.wbmp', 'image/vnd.xiff',
+			'image/x-photoshop',
+			'application/x-shockwave-flash',
+		);
+
+		return in_array( $mime, $types );
+	}
+
+	/**
+	 * Returns true if the extension represents a type which can
+	 * be reliably detected from its content. Use this to determine
+	 * whether strict content checks should be applied to reject
+	 * invalid uploads; if we can't identify the type we won't
+	 * be able to say if it's invalid.
+	 *
+	 * @todo Be more accurate when using fancy mime detector plugins;
+	 *       right now this is the bare minimum getimagesize() list.
+	 * @return bool
+	 */
+	function isRecognizableExtension( $extension ) {
+		static $types = array(
+			'gif', 'jpeg', 'jpg', 'png', 'swf', 'psd',
+			'bmp', 'tiff', 'tif', 'jpc', 'jp2',
+			'jpx', 'jb2', 'swc', 'iff', 'wbmp',
+			'xbm', 'djvu'
+		);
+		return in_array( strtolower( $extension ), $types );
+	}
+
+
+	/** mime type detection. This uses detectMimeType to detect the mime type of the file,
+	* but applies additional checks to determine some well known file formats that may be missed
+	* or misinterpreter by the default mime detection (namely xml based formats like XHTML or SVG).
+	*
+	* @param string $file The file to check
+	* @param bool $useExt switch for allowing to use the file extension to guess the mime type. true by default.
+	*
+	* @return string the mime type of $file
+	*/
+	function guessMimeType( $file, $useExt=true ) {
+		$fname = 'MimeMagic::guessMimeType';
+		$mime= $this->detectMimeType($file,$useExt);
+
+		// Read a chunk of the file
+		$f = fopen( $file, "rt" );
+		if( !$f ) return "unknown/unknown";
+		$head = fread( $f, 1024 );
+		fclose( $f );
+
+		$sub4 =  substr( $head, 0, 4 );
+		if ( $sub4 == "\x01\x00\x09\x00" || $sub4 == "\xd7\xcd\xc6\x9a" ) {
+			// WMF kill kill kill
+			// Note that WMF may have a bare header, no magic number.
+			// The former of the above two checks is theoretically prone to false positives
+			$mime = "application/x-msmetafile";
+		}
+
+		if (strpos($mime,"text/")===0 || $mime==="application/xml") {
+
+			$xml_type= NULL;
+			$script_type= NULL;
+
+			/*
+			* look for XML formats (XHTML and SVG)
+			*/
+			if ($mime==="text/sgml" ||
+			    $mime==="text/plain" ||
+			    $mime==="text/html" ||
+			    $mime==="text/xml" ||
+		            $mime==="application/xml") {
+
+				if (substr($head,0,5)=="<?xml") $xml_type= "ASCII";
+				elseif (substr($head,0,8)=="\xef\xbb\xbf<?xml") $xml_type= "UTF-8";
+				elseif (substr($head,0,10)=="\xfe\xff\x00<\x00?\x00x\x00m\x00l") $xml_type= "UTF-16BE";
+				elseif (substr($head,0,10)=="\xff\xfe<\x00?\x00x\x00m\x00l\x00") $xml_type= "UTF-16LE";
+
+				if ($xml_type) {
+					if ($xml_type!=="UTF-8" && $xml_type!=="ASCII") $head= iconv($xml_type,"ASCII//IGNORE",$head);
+
+					$match= array();
+					$doctype= "";
+					$tag= "";
+
+					if (preg_match('%<!DOCTYPE\s+[\w-]+\s+PUBLIC\s+["'."'".'"](.*?)["'."'".'"].*>%sim',$head,$match)) $doctype= $match[1];
+					if (preg_match('%<(\w+).*>%sim',$head,$match)) $tag= $match[1];
+
+					#print "<br>ANALYSING $file ($mime): doctype= $doctype; tag= $tag<br>";
+
+					if (strpos($doctype,"-//W3C//DTD SVG")===0) $mime= "image/svg+xml";
+					elseif ($tag==="svg") $mime= "image/svg+xml";
+					elseif (strpos($doctype,"-//W3C//DTD XHTML")===0) $mime= "text/html";
+					elseif ($tag==="html") $mime= "text/html";
+				}
+			}
+
+			/*
+			* look for shell scripts
+			*/
+			if (!$xml_type) {
+				$script_type= NULL;
+
+				#detect by shebang
+				if (substr($head,0,2)=="#!") $script_type= "ASCII";
+				elseif (substr($head,0,5)=="\xef\xbb\xbf#!") $script_type= "UTF-8";
+				elseif (substr($head,0,7)=="\xfe\xff\x00#\x00!") $script_type= "UTF-16BE";
+				elseif (substr($head,0,7)=="\xff\xfe#\x00!") $script_type= "UTF-16LE";
+
+				if ($script_type) {
+					if ($script_type!=="UTF-8" && $script_type!=="ASCII") $head= iconv($script_type,"ASCII//IGNORE",$head);
+
+					$match= array();
+					$prog= "";
+
+					if (preg_match('%/?([^\s]+/)(w+)%sim',$head,$match)) {
+						$script= $match[2]; // FIXME: $script variable not used; should this be "$prog = $match[2];" instead?
+					}
+
+					$mime= "application/x-$prog";
+				}
+			}
+
+			/*
+			* look for PHP
+			*/
+			if( !$xml_type && !$script_type ) {
+
+				if( ( strpos( $head, '<?php' ) !== false ) ||
+				    ( strpos( $head, '<? ' ) !== false ) ||
+				    ( strpos( $head, "<?\n" ) !== false ) ||
+				    ( strpos( $head, "<?\t" ) !== false ) ||
+				    ( strpos( $head, "<?=" ) !== false ) ||
+
+				    ( strpos( $head, "<\x00?\x00p\x00h\x00p" ) !== false ) ||
+				    ( strpos( $head, "<\x00?\x00 " ) !== false ) ||
+				    ( strpos( $head, "<\x00?\x00\n" ) !== false ) ||
+				    ( strpos( $head, "<\x00?\x00\t" ) !== false ) ||
+				    ( strpos( $head, "<\x00?\x00=" ) !== false ) ) {
+
+					$mime= "application/x-php";
+				}
+			}
+
+		}
+
+		if (isset($this->mMimeTypeAliases[$mime])) $mime= $this->mMimeTypeAliases[$mime];
+
+		wfDebug("$fname: final mime type of $file: $mime\n");
+		return $mime;
+	}
+
+	/** Internal mime type detection, please use guessMimeType() for application code instead.
+	* Detection is done using an external program, if $wgMimeDetectorCommand is set.
+	* Otherwise, the fileinfo extension and mime_content_type are tried (in this order), if they are available.
+	* If the dections fails and $useExt is true, the mime type is guessed from the file extension, using guessTypesForExtension.
+	* If the mime type is still unknown, getimagesize is used to detect the mime type if the file is an image.
+	* If no mime type can be determined, this function returns "unknown/unknown".
+	*
+	* @param string $file The file to check
+	* @param bool $useExt switch for allowing to use the file extension to guess the mime type. true by default.
+	*
+	* @return string the mime type of $file
+	* @access private
+	*/
+	function detectMimeType( $file, $useExt=true ) {
+		$fname = 'MimeMagic::detectMimeType';
+
+		global $wgMimeDetectorCommand;
+
+		$m= NULL;
+		if ($wgMimeDetectorCommand) {
+			$fn= wfEscapeShellArg($file);
+			$m= `$wgMimeDetectorCommand $fn`;
+		}
+		else if (function_exists("finfo_open") && function_exists("finfo_file")) {
+
+			# This required the fileinfo extension by PECL,
+			# see http://pecl.php.net/package/fileinfo
+			# This must be compiled into PHP
+			#
+			# finfo is the official replacement for the deprecated
+			# mime_content_type function, see below.
+			#
+			# If you may need to load the fileinfo extension at runtime, set
+			# $wgLoadFileinfoExtension in LocalSettings.php
+
+			$mime_magic_resource = finfo_open(FILEINFO_MIME); /* return mime type ala mimetype extension */
+
+			if ($mime_magic_resource) {
+				$m= finfo_file($mime_magic_resource, $file);
+
+				finfo_close($mime_magic_resource);
+			}
+			else wfDebug("$fname: finfo_open failed on ".FILEINFO_MIME."!\n");
+		}
+		else if (function_exists("mime_content_type")) {
+
+			# NOTE: this function is available since PHP 4.3.0, but only if
+			# PHP was compiled with --with-mime-magic or, before 4.3.2, with --enable-mime-magic.
+			#
+			# On Windows, you must set mime_magic.magicfile in php.ini to point to the mime.magic file bundeled with PHP;
+			# sometimes, this may even be needed under linus/unix.
+			#
+			# Also note that this has been DEPRECATED in favor of the fileinfo extension by PECL, see above.
+			# see http://www.php.net/manual/en/ref.mime-magic.php for details.
+
+			$m= mime_content_type($file);
+
+			if ( $m == 'text/plain' ) {
+				// mime_content_type sometimes considers DJVU files to be text/plain.
+				$deja = new DjVuImage( $file );
+				if( $deja->isValid() ) {
+					wfDebug("$fname: (re)detected $file as image/vnd.djvu\n");
+					$m = 'image/vnd.djvu';
+				}
+			}
+		}
+		else wfDebug("$fname: no magic mime detector found!\n");
+
+		if ($m) {
+			#normalize
+			$m= preg_replace('![;, ].*$!','',$m); #strip charset, etc
+			$m= trim($m);
+			$m= strtolower($m);
+
+			if (strpos($m,'unknown')!==false) $m= NULL;
+			else {
+				wfDebug("$fname: magic mime type of $file: $m\n");
+				return $m;
+			}
+		}
+
+		#if still not known, use getimagesize to find out the type of image
+		#TODO: skip things that do not have a well-known image extension? Would that be safe?
+		wfSuppressWarnings();
+		$gis = getimagesize( $file );
+		wfRestoreWarnings();
+
+		$notAnImage= false;
+
+		if ($gis && is_array($gis) && $gis[2]) {
+			switch ($gis[2]) {
+				case IMAGETYPE_GIF: $m= "image/gif"; break;
+				case IMAGETYPE_JPEG: $m= "image/jpeg"; break;
+				case IMAGETYPE_PNG: $m= "image/png"; break;
+				case IMAGETYPE_SWF: $m= "application/x-shockwave-flash"; break;
+				case IMAGETYPE_PSD: $m= "application/photoshop"; break;
+				case IMAGETYPE_BMP: $m= "image/bmp"; break;
+				case IMAGETYPE_TIFF_II: $m= "image/tiff"; break;
+				case IMAGETYPE_TIFF_MM: $m= "image/tiff"; break;
+				case IMAGETYPE_JPC: $m= "image"; break;
+				case IMAGETYPE_JP2: $m= "image/jpeg2000"; break;
+				case IMAGETYPE_JPX: $m= "image/jpeg2000"; break;
+				case IMAGETYPE_JB2: $m= "image"; break;
+				case IMAGETYPE_SWC: $m= "application/x-shockwave-flash"; break;
+				case IMAGETYPE_IFF: $m= "image/vnd.xiff"; break;
+				case IMAGETYPE_WBMP: $m= "image/vnd.wap.wbmp"; break;
+				case IMAGETYPE_XBM: $m= "image/x-xbitmap"; break;
+			}
+
+			if ($m) {
+				wfDebug("$fname: image mime type of $file: $m\n");
+				return $m;
+			}
+			else $notAnImage= true;
+		} else {
+			// Also test DjVu
+			$deja = new DjVuImage( $file );
+			if( $deja->isValid() ) {
+				wfDebug("$fname: detected $file as image/vnd.djvu\n");
+				return 'image/vnd.djvu';
+			}
+		}
+
+		#if desired, look at extension as a fallback.
+		if ($useExt) {
+			$i = strrpos( $file, '.' );
+			$e= strtolower( $i ? substr( $file, $i + 1 ) : '' );
+
+			$m= $this->guessTypesForExtension($e);
+
+			#TODO: if $notAnImage is set, do not trust the file extension if
+			# the results is one of the image types that should have been recognized
+			# by getimagesize
+
+			if ($m) {
+				wfDebug("$fname: extension mime type of $file: $m\n");
+				return $m;
+			}
+		}
+
+		#unknown type
+		wfDebug("$fname: failed to guess mime type for $file!\n");
+		return "unknown/unknown";
+	}
+
+	/**
+	* Determine the media type code for a file, using its mime type, name and possibly
+	* its contents.
+	*
+	* This function relies on the findMediaType(), mapping extensions and mime
+	* types to media types.
+	*
+	* @todo analyse file if need be
+	* @todo look at multiple extension, separately and together.
+	*
+	* @param string $path full path to the image file, in case we have to look at the contents
+	*        (if null, only the mime type is used to determine the media type code).
+	* @param string $mime mime type. If null it will be guessed using guessMimeType.
+	*
+	* @return (int?string?) a value to be used with the MEDIATYPE_xxx constants.
+	*/
+	function getMediaType($path=NULL,$mime=NULL) {
+		if( !$mime && !$path ) return MEDIATYPE_UNKNOWN;
+
+		#if mime type is unknown, guess it
+		if( !$mime ) $mime= $this->guessMimeType($path,false);
+
+		#special code for ogg - detect if it's video (theora),
+		#else label it as sound.
+		if( $mime=="application/ogg" && file_exists($path) ) {
+
+			// Read a chunk of the file
+			$f = fopen( $path, "rt" );
+			if( !$f ) return MEDIATYPE_UNKNOWN;
+			$head = fread( $f, 256 );
+			fclose( $f );
+
+			$head= strtolower( $head );
+
+			#This is an UGLY HACK, file should be parsed correctly
+			if( strpos($head,'theora')!==false ) return MEDIATYPE_VIDEO;
+			elseif( strpos($head,'vorbis')!==false ) return MEDIATYPE_AUDIO;
+			elseif( strpos($head,'flac')!==false ) return MEDIATYPE_AUDIO;
+			elseif( strpos($head,'speex')!==false ) return MEDIATYPE_AUDIO;
+			else return MEDIATYPE_MULTIMEDIA;
+		}
+
+		#check for entry for full mime type
+		if( $mime ) {
+			$type= $this->findMediaType($mime);
+			if( $type!==MEDIATYPE_UNKNOWN ) return $type;
+		}
+
+		#check for entry for file extension
+		$e= NULL;
+		if( $path ) {
+			$i = strrpos( $path, '.' );
+			$e= strtolower( $i ? substr( $path, $i + 1 ) : '' );
+
+			#TODO: look at multi-extension if this fails, parse from full path
+
+			$type= $this->findMediaType('.'.$e);
+			if( $type!==MEDIATYPE_UNKNOWN ) return $type;
+		}
+
+		#check major mime type
+		if( $mime ) {
+			$i= strpos($mime,'/');
+			if( $i !== false ) {
+				$major= substr($mime,0,$i);
+				$type= $this->findMediaType($major);
+				if( $type!==MEDIATYPE_UNKNOWN ) return $type;
+			}
+		}
+
+		if( !$type ) $type= MEDIATYPE_UNKNOWN;
+
+		return $type;
+	}
+
+	/** returns a media code matching the given mime type or file extension.
+	* File extensions are represented by a string starting with a dot (.) to
+	* distinguish them from mime types.
+	*
+	* This funktion relies on the mapping defined by $this->mMediaTypes
+	* @access private
+	*/
+	function findMediaType($extMime) {
+
+		if (strpos($extMime,'.')===0) { #if it's an extension, look up the mime types
+			$m= $this->getTypesForExtension(substr($extMime,1));
+			if (!$m) return MEDIATYPE_UNKNOWN;
+
+			$m= explode(' ',$m);
+		}
+		else { #normalize mime type
+			if (isset($this->mMimeTypeAliases[$extMime])) {
+				$extMime= $this->mMimeTypeAliases[$extMime];
+			}
+
+			$m= array($extMime);
+		}
+
+		foreach ($m as $mime) {
+			foreach ($this->mMediaTypes as $type => $codes) {
+				if (in_array($mime,$codes,true)) return $type;
+			}
+		}
+
+		return MEDIATYPE_UNKNOWN;
+	}
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/Namespace.php
===================================================================
--- /MediaWiki/branches/1.11/includes/Namespace.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/Namespace.php	(revision 1280)
@@ -0,0 +1,141 @@
+<?php
+/**
+ * Provide things related to namespaces
+ */
+
+/**
+ * Definitions of the NS_ constants are in Defines.php
+ * @private
+ */
+$wgCanonicalNamespaceNames = array(
+	NS_MEDIA            => 'Media',
+	NS_SPECIAL          => 'Special',
+	NS_TALK             => 'Talk',
+	NS_USER             => 'User',
+	NS_USER_TALK        => 'User_talk',
+	NS_PROJECT          => 'Project',
+	NS_PROJECT_TALK     => 'Project_talk',
+	NS_IMAGE            => 'Image',
+	NS_IMAGE_TALK       => 'Image_talk',
+	NS_MEDIAWIKI        => 'MediaWiki',
+	NS_MEDIAWIKI_TALK   => 'MediaWiki_talk',
+	NS_TEMPLATE         => 'Template',
+	NS_TEMPLATE_TALK    => 'Template_talk',
+	NS_HELP             => 'Help',
+	NS_HELP_TALK        => 'Help_talk',
+	NS_CATEGORY         => 'Category',
+	NS_CATEGORY_TALK    => 'Category_talk',
+);
+
+if( is_array( $wgExtraNamespaces ) ) {
+	$wgCanonicalNamespaceNames = $wgCanonicalNamespaceNames + $wgExtraNamespaces;
+}
+
+/**
+ * This is a utility class with only static functions
+ * for dealing with namespaces that encodes all the
+ * "magic" behaviors of them based on index.  The textual
+ * names of the namespaces are handled by Language.php.
+ *
+ * These are synonyms for the names given in the language file
+ * Users and translators should not change them
+ *
+ */
+class Namespace {
+
+	/**
+	 * Check if the given namespace might be moved
+	 * @return bool
+	 */
+	static function isMovable( $index ) {
+		return !( $index < NS_MAIN || $index == NS_IMAGE  || $index == NS_CATEGORY );
+	}
+
+	/**
+	 * Check if the given namespace is not a talk page
+	 * @return bool
+	 */
+	static function isMain( $index ) {
+		return ! Namespace::isTalk( $index );
+	}
+
+	/**
+	 * Check if the give namespace is a talk page
+	 * @return bool
+	 */
+	static function isTalk( $index ) {
+		return ($index > NS_MAIN)  // Special namespaces are negative
+			&& ($index % 2); // Talk namespaces are odd-numbered
+	}
+
+	/**
+	 * Get the talk namespace corresponding to the given index
+	 */
+	static function getTalk( $index ) {
+		if ( Namespace::isTalk( $index ) ) {
+			return $index;
+		} else {
+			# FIXME
+			return $index + 1;
+		}
+	}
+
+	static function getSubject( $index ) {
+		if ( Namespace::isTalk( $index ) ) {
+			return $index - 1;
+		} else {
+			return $index;
+		}
+	}
+
+	/**
+	 * Returns the canonical (English Wikipedia) name for a given index
+	 */
+	static function getCanonicalName( $index ) {
+		global $wgCanonicalNamespaceNames;
+		return $wgCanonicalNamespaceNames[$index];
+	}
+
+	/**
+	 * Returns the index for a given canonical name, or NULL
+	 * The input *must* be converted to lower case first
+	 */
+	static function getCanonicalIndex( $name ) {
+		global $wgCanonicalNamespaceNames;
+		static $xNamespaces = false;
+		if ( $xNamespaces === false ) {
+			$xNamespaces = array();
+			foreach ( $wgCanonicalNamespaceNames as $i => $text ) {
+				$xNamespaces[strtolower($text)] = $i;
+			}
+		}
+		if ( array_key_exists( $name, $xNamespaces ) ) {
+			return $xNamespaces[$name];
+		} else {
+			return NULL;
+		}
+	}
+	
+	/**
+	 * Can this namespace ever have a talk namespace?
+	 * @param $index Namespace index
+	 */
+	 static function canTalk( $index ) {
+	 	return( $index >= NS_MAIN );
+	 }
+	 
+	/**
+	 * Does this namespace contain content, for the purposes
+	 * of calculating statistics, etc?
+	 *
+	 * @param $index Index to check
+	 * @return bool
+	 */
+	public static function isContent( $index ) {
+		global $wgContentNamespaces;
+		return $index == NS_MAIN || in_array( $index, $wgContentNamespaces );
+	}	 
+	 
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/ObjectCache.php
===================================================================
--- /MediaWiki/branches/1.11/includes/ObjectCache.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/ObjectCache.php	(revision 1280)
@@ -0,0 +1,124 @@
+<?php
+/**
+ * @addtogroup Cache
+ */
+
+/**
+ * FakeMemCachedClient imitates the API of memcached-client v. 0.1.2.
+ * It acts as a memcached server with no RAM, that is, all objects are
+ * cleared the moment they are set. All set operations succeed and all
+ * get operations return null.
+ * @addtogroup Cache
+ */
+class FakeMemCachedClient {
+	function add ($key, $val, $exp = 0) { return true; }
+	function decr ($key, $amt=1) { return null; }
+	function delete ($key, $time = 0) { return false; }
+	function disconnect_all () { }
+	function enable_compress ($enable) { }
+	function forget_dead_hosts () { }
+	function get ($key) { return null; }
+	function get_multi ($keys) { return array_pad(array(), count($keys), null); }
+	function incr ($key, $amt=1) { return null; }
+	function replace ($key, $value, $exp=0) { return false; }
+	function run_command ($sock, $cmd) { return null; }
+	function set ($key, $value, $exp=0){ return true; }
+	function set_compress_threshold ($thresh){ }
+	function set_debug ($dbg) { }
+	function set_servers ($list) { }
+}
+
+global $wgCaches;
+$wgCaches = array();
+
+/** @todo document */
+function &wfGetCache( $inputType ) {
+	global $wgCaches, $wgMemCachedServers, $wgMemCachedDebug, $wgMemCachedPersistent;
+	$cache = false;
+
+	if ( $inputType == CACHE_ANYTHING ) {
+		reset( $wgCaches );
+		$type = key( $wgCaches );
+		if ( $type === false || $type === CACHE_NONE ) {
+			$type = CACHE_DB;
+		}
+	} else {
+		$type = $inputType;
+	}
+
+	if ( $type == CACHE_MEMCACHED ) {
+		if ( !array_key_exists( CACHE_MEMCACHED, $wgCaches ) ){
+			require_once( 'memcached-client.php' );
+
+			if (!class_exists("MemcachedClientforWiki")) {
+				class MemCachedClientforWiki extends memcached {
+					function _debugprint( $text ) {
+						wfDebug( "memcached: $text\n" );
+					}
+				}
+			}
+
+			$wgCaches[CACHE_DB] = new MemCachedClientforWiki(
+				array('persistant' => $wgMemCachedPersistent, 'compress_threshold' => 1500 ) );
+			$cache =& $wgCaches[CACHE_DB];
+			$cache->set_servers( $wgMemCachedServers );
+			$cache->set_debug( $wgMemCachedDebug );
+		}
+	} elseif ( $type == CACHE_ACCEL ) {
+		if ( !array_key_exists( CACHE_ACCEL, $wgCaches ) ) {
+			if ( function_exists( 'eaccelerator_get' ) ) {
+				$wgCaches[CACHE_ACCEL] = new eAccelBagOStuff;
+			} elseif ( function_exists( 'apc_fetch') ) {
+				$wgCaches[CACHE_ACCEL] = new APCBagOStuff;
+			} elseif ( function_exists( 'mmcache_get' ) ) {
+				$wgCaches[CACHE_ACCEL] = new TurckBagOStuff;
+			} else {
+				$wgCaches[CACHE_ACCEL] = false;
+			}
+		}
+		if ( $wgCaches[CACHE_ACCEL] !== false ) {
+			$cache =& $wgCaches[CACHE_ACCEL];
+		}
+	} elseif ( $type == CACHE_DBA ) {
+		if ( !array_key_exists( CACHE_DBA, $wgCaches ) ) {
+			$wgCaches[CACHE_DBA] = new DBABagOStuff;
+		}
+		$cache =& $wgCaches[CACHE_DBA];
+	}
+	
+	if ( $type == CACHE_DB || ( $inputType == CACHE_ANYTHING && $cache === false ) ) {
+		if ( !array_key_exists( CACHE_DB, $wgCaches ) ) {
+			$wgCaches[CACHE_DB] = new MediaWikiBagOStuff('objectcache');
+		}
+		$cache =& $wgCaches[CACHE_DB];
+	}
+
+	if ( $cache === false ) {
+		if ( !array_key_exists( CACHE_NONE, $wgCaches ) ) {
+			$wgCaches[CACHE_NONE] = new FakeMemCachedClient;
+		}
+		$cache =& $wgCaches[CACHE_NONE];
+	}
+
+	return $cache;
+}
+
+function &wfGetMainCache() {
+	global $wgMainCacheType;
+	$ret =& wfGetCache( $wgMainCacheType );
+	return $ret;
+}
+
+function &wfGetMessageCacheStorage() {
+	global $wgMessageCacheType;
+	$ret =& wfGetCache( $wgMessageCacheType );
+	return $ret;
+}
+
+function &wfGetParserCacheStorage() {
+	global $wgParserCacheType;
+	$ret =& wfGetCache( $wgParserCacheType );
+	return $ret;
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/OutputHandler.php
===================================================================
--- /MediaWiki/branches/1.11/includes/OutputHandler.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/OutputHandler.php	(revision 1280)
@@ -0,0 +1,64 @@
+<?php
+
+/**
+ * Standard output handler for use with ob_start
+ */
+function wfOutputHandler( $s ) {
+	global $wgDisableOutputCompression;
+	$s = wfMangleFlashPolicy( $s );
+	if ( !$wgDisableOutputCompression && !ini_get( 'zlib.output_compression' ) ) {
+		if ( !defined( 'MW_NO_OUTPUT_COMPRESSION' ) ) {
+			$s = wfGzipHandler( $s );
+		}
+		if ( !ini_get( 'output_handler' ) ) {
+			wfDoContentLength( strlen( $s ) );
+		}
+	}
+	return $s;
+}
+
+/**
+ * Handler that compresses data with gzip if allowed by the Accept header.
+ * Unlike ob_gzhandler, it works for HEAD requests too.
+ */
+function wfGzipHandler( $s ) {
+	if ( function_exists( 'gzencode' ) && !headers_sent() ) {
+		$tokens = preg_split( '/[,; ]/', $_SERVER['HTTP_ACCEPT_ENCODING'] );
+		if ( in_array( 'gzip', $tokens ) ) {
+			header( 'Content-Encoding: gzip' );
+			$s = gzencode( $s, 3 );
+
+			# Set vary header if it hasn't been set already
+			$headers = headers_list();
+			$foundVary = false;
+			foreach ( $headers as $header ) {
+				if ( substr( $header, 0, 5 ) == 'Vary:' ) {
+					$foundVary = true;
+					break;
+				}
+			}
+			if ( !$foundVary ) {
+				header( 'Vary: Accept-Encoding' );
+			}
+		}
+	}
+	return $s;
+}
+
+/**
+ * Mangle flash policy tags which open up the site to XSS attacks.
+ */
+function wfMangleFlashPolicy( $s ) {
+	return preg_replace( '/\<\s*cross-domain-policy\s*\>/i', '<NOT-cross-domain-policy>', $s );
+}
+
+/**
+ * Add a Content-Length header if possible. This makes it cooperate with squid better.
+ */
+function wfDoContentLength( $length ) {
+	if ( !headers_sent() && $_SERVER['SERVER_PROTOCOL'] == 'HTTP/1.0' ) {
+		header( "Content-Length: $length" );
+	}
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/OutputPage.php
===================================================================
--- /MediaWiki/branches/1.11/includes/OutputPage.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/OutputPage.php	(revision 1280)
@@ -0,0 +1,1200 @@
+<?php
+if ( ! defined( 'MEDIAWIKI' ) )
+	die( 1 );
+/**
+ */
+
+/**
+ * @todo document
+ */
+class OutputPage {
+	var $mMetatags, $mKeywords;
+	var $mLinktags, $mPagetitle, $mBodytext, $mDebugtext;
+	var $mHTMLtitle, $mRobotpolicy, $mIsarticle, $mPrintable;
+	var $mSubtitle, $mRedirect, $mStatusCode;
+	var $mLastModified, $mETag, $mCategoryLinks;
+	var $mScripts, $mLinkColours, $mPageLinkTitle;
+
+	var $mSuppressQuickbar;
+	var $mOnloadHandler;
+	var $mDoNothing;
+	var $mContainsOldMagic, $mContainsNewMagic;
+	var $mIsArticleRelated;
+	protected $mParserOptions; // lazy initialised, use parserOptions()
+	var $mShowFeedLinks = false;
+	var $mEnableClientCache = true;
+	var $mArticleBodyOnly = false;
+	
+	var $mNewSectionLink = false;
+	var $mNoGallery = false;
+
+	/**
+	 * Constructor
+	 * Initialise private variables
+	 */
+	function __construct() {
+		$this->mMetatags = $this->mKeywords = $this->mLinktags = array();
+		$this->mHTMLtitle = $this->mPagetitle = $this->mBodytext =
+		$this->mRedirect = $this->mLastModified =
+		$this->mSubtitle = $this->mDebugtext = $this->mRobotpolicy =
+		$this->mOnloadHandler = $this->mPageLinkTitle = '';
+		$this->mIsArticleRelated = $this->mIsarticle = $this->mPrintable = true;
+		$this->mSuppressQuickbar = $this->mPrintable = false;
+		$this->mLanguageLinks = array();
+		$this->mCategoryLinks = array();
+		$this->mDoNothing = false;
+		$this->mContainsOldMagic = $this->mContainsNewMagic = 0;
+		$this->mParserOptions = null;
+		$this->mSquidMaxage = 0;
+		$this->mScripts = '';
+		$this->mHeadItems = array();
+		$this->mETag = false;
+		$this->mRevisionId = null;
+		$this->mNewSectionLink = false;
+	}
+	
+	public function redirect( $url, $responsecode = '302' ) {
+		# Strip newlines as a paranoia check for header injection in PHP<5.1.2
+		$this->mRedirect = str_replace( "\n", '', $url );
+		$this->mRedirectCode = $responsecode;
+	}
+
+	/**
+	 * Set the HTTP status code to send with the output.
+	 *
+	 * @param int $statusCode
+	 * @return nothing
+	 */
+	function setStatusCode( $statusCode ) { $this->mStatusCode = $statusCode; }
+
+	# To add an http-equiv meta tag, precede the name with "http:"
+	function addMeta( $name, $val ) { array_push( $this->mMetatags, array( $name, $val ) ); }
+	function addKeyword( $text ) { array_push( $this->mKeywords, $text ); }
+	function addScript( $script ) { $this->mScripts .= "\t\t".$script; }
+
+	/**
+	 * Add a self-contained script tag with the given contents
+	 * @param string $script JavaScript text, no <script> tags
+	 */
+	function addInlineScript( $script ) {
+		global $wgJsMimeType;
+		$this->mScripts .= "<script type=\"$wgJsMimeType\">/*<![CDATA[*/\n$script\n/*]]>*/</script>";
+	}
+
+	function getScript() { 
+		return $this->mScripts . $this->getHeadItems(); 
+	}
+
+	function getHeadItems() {
+		$s = '';
+		foreach ( $this->mHeadItems as $item ) {
+			$s .= $item;
+		}
+		return $s;
+	}
+
+	function addHeadItem( $name, $value ) {
+		$this->mHeadItems[$name] = $value;
+	}
+
+	function setETag($tag) { $this->mETag = $tag; }
+	function setArticleBodyOnly($only) { $this->mArticleBodyOnly = $only; }
+	function getArticleBodyOnly($only) { return $this->mArticleBodyOnly; }
+
+	function addLink( $linkarr ) {
+		# $linkarr should be an associative array of attributes. We'll escape on output.
+		array_push( $this->mLinktags, $linkarr );
+	}
+
+	function addMetadataLink( $linkarr ) {
+		# note: buggy CC software only reads first "meta" link
+		static $haveMeta = false;
+		$linkarr['rel'] = ($haveMeta) ? 'alternate meta' : 'meta';
+		$this->addLink( $linkarr );
+		$haveMeta = true;
+	}
+
+	/**
+	 * checkLastModified tells the client to use the client-cached page if
+	 * possible. If sucessful, the OutputPage is disabled so that
+	 * any future call to OutputPage->output() have no effect.
+	 *
+	 * @return bool True iff cache-ok headers was sent.
+	 */
+	function checkLastModified ( $timestamp ) {
+		global $wgCachePages, $wgCacheEpoch, $wgUser, $wgRequest;
+		$fname = 'OutputPage::checkLastModified';
+
+		if ( !$timestamp || $timestamp == '19700101000000' ) {
+			wfDebug( "$fname: CACHE DISABLED, NO TIMESTAMP\n" );
+			return;
+		}
+		if( !$wgCachePages ) {
+			wfDebug( "$fname: CACHE DISABLED\n", false );
+			return;
+		}
+		if( $wgUser->getOption( 'nocache' ) ) {
+			wfDebug( "$fname: USER DISABLED CACHE\n", false );
+			return;
+		}
+
+		$timestamp=wfTimestamp(TS_MW,$timestamp);
+		$lastmod = wfTimestamp( TS_RFC2822, max( $timestamp, $wgUser->mTouched, $wgCacheEpoch ) );
+
+		if( !empty( $_SERVER['HTTP_IF_MODIFIED_SINCE'] ) ) {
+			# IE sends sizes after the date like this:
+			# Wed, 20 Aug 2003 06:51:19 GMT; length=5202
+			# this breaks strtotime().
+			$modsince = preg_replace( '/;.*$/', '', $_SERVER["HTTP_IF_MODIFIED_SINCE"] );
+			$modsinceTime = strtotime( $modsince );
+			$ismodsince = wfTimestamp( TS_MW, $modsinceTime ? $modsinceTime : 1 );
+			wfDebug( "$fname: -- client send If-Modified-Since: " . $modsince . "\n", false );
+			wfDebug( "$fname: --  we might send Last-Modified : $lastmod\n", false );
+			if( ($ismodsince >= $timestamp ) && $wgUser->validateCache( $ismodsince ) && $ismodsince >= $wgCacheEpoch ) {
+				# Make sure you're in a place you can leave when you call us!
+				$wgRequest->response()->header( "HTTP/1.0 304 Not Modified" );
+				$this->mLastModified = $lastmod;
+				$this->sendCacheControl();
+				wfDebug( "$fname: CACHED client: $ismodsince ; user: $wgUser->mTouched ; page: $timestamp ; site $wgCacheEpoch\n", false );
+				$this->disable();
+				
+				// Don't output a compressed blob when using ob_gzhandler;
+				// it's technically against HTTP spec and seems to confuse
+				// Firefox when the response gets split over two packets.
+				wfClearOutputBuffers();
+				
+				return true;
+			} else {
+				wfDebug( "$fname: READY  client: $ismodsince ; user: $wgUser->mTouched ; page: $timestamp ; site $wgCacheEpoch\n", false );
+				$this->mLastModified = $lastmod;
+			}
+		} else {
+			wfDebug( "$fname: client did not send If-Modified-Since header\n", false );
+			$this->mLastModified = $lastmod;
+		}
+	}
+
+	function getPageTitleActionText () {
+		global $action;
+		switch($action) {
+			case 'edit':
+			case 'delete':
+			case 'protect':
+			case 'unprotect':
+			case 'watch':
+			case 'unwatch':
+				// Display title is already customized
+				return '';
+			case 'history':
+				return wfMsg('history_short');
+			case 'submit':
+				// FIXME: bug 2735; not correct for special pages etc
+				return wfMsg('preview');
+			case 'info':
+				return wfMsg('info_short');
+			default:
+				return '';
+		}
+	}
+
+	public function setRobotpolicy( $str ) { $this->mRobotpolicy = $str; }
+	public function setHTMLTitle( $name ) {$this->mHTMLtitle = $name; }
+	public function setPageTitle( $name ) {
+		global $action, $wgContLang;
+		$name = $wgContLang->convert($name, true);
+		$this->mPagetitle = $name;
+		if(!empty($action)) {
+			$taction =  $this->getPageTitleActionText();
+			if( !empty( $taction ) ) {
+				$name .= ' - '.$taction;
+			}
+		}
+
+		$this->setHTMLTitle( wfMsg( 'pagetitle', $name ) );
+	}
+	public function getHTMLTitle() { return $this->mHTMLtitle; }
+	public function getPageTitle() { return $this->mPagetitle; }
+	public function setSubtitle( $str ) { $this->mSubtitle = /*$this->parse(*/$str/*)*/; } // @bug 2514
+	public function getSubtitle() { return $this->mSubtitle; }
+	public function isArticle() { return $this->mIsarticle; }
+	public function setPrintable() { $this->mPrintable = true; }
+	public function isPrintable() { return $this->mPrintable; }
+	public function setSyndicated( $show = true ) { $this->mShowFeedLinks = $show; }
+	public function isSyndicated() { return $this->mShowFeedLinks; }
+	public function setOnloadHandler( $js ) { $this->mOnloadHandler = $js; }
+	public function getOnloadHandler() { return $this->mOnloadHandler; }
+	public function disable() { $this->mDoNothing = true; }
+
+	public function setArticleRelated( $v ) {
+		$this->mIsArticleRelated = $v;
+		if ( !$v ) {
+			$this->mIsarticle = false;
+		}
+	}
+	public function setArticleFlag( $v ) {
+		$this->mIsarticle = $v;
+		if ( $v ) {
+			$this->mIsArticleRelated = $v;
+		}
+	}
+
+	public function isArticleRelated() { return $this->mIsArticleRelated; }
+
+	public function getLanguageLinks() { return $this->mLanguageLinks; }
+	public function addLanguageLinks($newLinkArray) {
+		$this->mLanguageLinks += $newLinkArray;
+	}
+	public function setLanguageLinks($newLinkArray) {
+		$this->mLanguageLinks = $newLinkArray;
+	}
+
+	public function getCategoryLinks() {
+		return $this->mCategoryLinks;
+	}
+
+	/**
+	 * Add an array of categories, with names in the keys
+	 */
+	public function addCategoryLinks($categories) {
+		global $wgUser, $wgContLang;
+
+		if ( !is_array( $categories ) ) {
+			return;
+		}
+		# Add the links to the link cache in a batch
+		$arr = array( NS_CATEGORY => $categories );
+		$lb = new LinkBatch;
+		$lb->setArray( $arr );
+		$lb->execute();
+
+		$sk = $wgUser->getSkin();
+		foreach ( $categories as $category => $unused ) {
+			$title = Title::makeTitleSafe( NS_CATEGORY, $category );
+			$text = $wgContLang->convertHtml( $title->getText() );
+			$this->mCategoryLinks[] = $sk->makeLinkObj( $title, $text );
+		}
+	}
+
+	public function setCategoryLinks($categories) {
+		$this->mCategoryLinks = array();
+		$this->addCategoryLinks($categories);
+	}
+
+	public function suppressQuickbar() { $this->mSuppressQuickbar = true; }
+	public function isQuickbarSuppressed() { return $this->mSuppressQuickbar; }
+
+	public function addHTML( $text ) { $this->mBodytext .= $text; }
+	public function clearHTML() { $this->mBodytext = ''; }
+	public function getHTML() { return $this->mBodytext; }
+	public function debug( $text ) { $this->mDebugtext .= $text; }
+
+	/* @deprecated */
+	public function setParserOptions( $options ) {
+		return $this->parserOptions( $options );
+	}
+
+	public function parserOptions( $options = null ) {
+		if ( !$this->mParserOptions ) {
+			$this->mParserOptions = new ParserOptions;
+		}
+		return wfSetVar( $this->mParserOptions, $options );
+	}
+
+	/**
+	 * Set the revision ID which will be seen by the wiki text parser
+	 * for things such as embedded {{REVISIONID}} variable use.
+	 * @param mixed $revid an integer, or NULL
+	 * @return mixed previous value
+	 */
+	public function setRevisionId( $revid ) {
+		$val = is_null( $revid ) ? null : intval( $revid );
+		return wfSetVar( $this->mRevisionId, $val );
+	}
+
+	/**
+	 * Convert wikitext to HTML and add it to the buffer
+	 * Default assumes that the current page title will
+	 * be used.
+	 *
+	 * @param string $text
+	 * @param bool   $linestart
+	 */
+	public function addWikiText( $text, $linestart = true ) {
+		global $wgTitle;
+		$this->addWikiTextTitle($text, $wgTitle, $linestart);
+	}
+
+	public function addWikiTextWithTitle($text, &$title, $linestart = true) {
+		$this->addWikiTextTitle($text, $title, $linestart);
+	}
+
+	function addWikiTextTitleTidy($text, &$title, $linestart = true) {
+		$this->addWikiTextTitle( $text, $title, $linestart, true );
+	}
+
+	public function addWikiTextTitle($text, &$title, $linestart, $tidy = false) {
+		global $wgParser;
+
+		$fname = 'OutputPage:addWikiTextTitle';
+		wfProfileIn($fname);
+
+		wfIncrStats('pcache_not_possible');
+
+		$popts = $this->parserOptions();
+		$popts->setTidy($tidy);
+
+		$parserOutput = $wgParser->parse( $text, $title, $popts,
+			$linestart, true, $this->mRevisionId );
+
+		$this->addParserOutput( $parserOutput );
+
+		wfProfileOut($fname);
+	}
+
+	/**
+	 * @todo document
+	 * @param ParserOutput object &$parserOutput
+	 */
+	public function addParserOutputNoText( &$parserOutput ) {
+		$this->mLanguageLinks += $parserOutput->getLanguageLinks();
+		$this->addCategoryLinks( $parserOutput->getCategories() );
+		$this->mNewSectionLink = $parserOutput->getNewSection();
+		$this->addKeywords( $parserOutput );
+		if ( $parserOutput->getCacheTime() == -1 ) {
+			$this->enableClientCache( false );
+		}
+		if ( $parserOutput->mHTMLtitle != "" ) {
+			$this->mPagetitle = $parserOutput->mHTMLtitle ;
+		}
+		if ( $parserOutput->mSubtitle != '' ) {
+			$this->mSubtitle .= $parserOutput->mSubtitle ;
+		}
+		$this->mNoGallery = $parserOutput->getNoGallery();
+		$this->mHeadItems = array_merge( $this->mHeadItems, (array)$parserOutput->mHeadItems );
+		wfRunHooks( 'OutputPageParserOutput', array( &$this, $parserOutput ) );
+	}
+
+	/**
+	 * @todo document
+	 * @param ParserOutput &$parserOutput
+	 */
+	function addParserOutput( &$parserOutput ) {
+		$this->addParserOutputNoText( $parserOutput );
+		$text =	$parserOutput->getText();
+		wfRunHooks( 'OutputPageBeforeHTML',array( &$this, &$text ) );
+		$this->addHTML( $text );
+	}
+
+	/**
+	 * Add wikitext to the buffer, assuming that this is the primary text for a page view
+	 * Saves the text into the parser cache if possible.
+	 *
+	 * @param string  $text
+	 * @param Article $article
+	 * @param bool    $cache
+	 * @deprecated Use Article::outputWikitext
+	 */
+	public function addPrimaryWikiText( $text, $article, $cache = true ) {
+		global $wgParser, $wgUser;
+
+		$popts = $this->parserOptions();
+		$popts->setTidy(true);
+		$parserOutput = $wgParser->parse( $text, $article->mTitle,
+			$popts, true, true, $this->mRevisionId );
+		$popts->setTidy(false);
+		if ( $cache && $article && $parserOutput->getCacheTime() != -1 ) {
+			$parserCache =& ParserCache::singleton();
+			$parserCache->save( $parserOutput, $article, $wgUser );
+		}
+
+		$this->addParserOutput( $parserOutput );
+	}
+
+	/**
+	 * @deprecated use addWikiTextTidy()
+	 */
+	public function addSecondaryWikiText( $text, $linestart = true ) {
+		global $wgTitle;
+		$this->addWikiTextTitleTidy($text, $wgTitle, $linestart);
+	}
+
+	/**
+	 * Add wikitext with tidy enabled
+	 */
+	public function addWikiTextTidy(  $text, $linestart = true ) {
+		global $wgTitle;
+		$this->addWikiTextTitleTidy($text, $wgTitle, $linestart);
+	}
+
+
+	/**
+	 * Add the output of a QuickTemplate to the output buffer
+	 *
+	 * @param QuickTemplate $template
+	 */
+	public function addTemplate( &$template ) {
+		ob_start();
+		$template->execute();
+		$this->addHTML( ob_get_contents() );
+		ob_end_clean();
+	}
+
+	/**
+	 * Parse wikitext and return the HTML.
+	 *
+	 * @param string $text
+	 * @param bool   $linestart Is this the start of a line?
+	 * @param bool   $interface ??
+	 */
+	public function parse( $text, $linestart = true, $interface = false ) {
+		global $wgParser, $wgTitle;
+		$popts = $this->parserOptions();
+		if ( $interface) { $popts->setInterfaceMessage(true); }
+		$parserOutput = $wgParser->parse( $text, $wgTitle, $popts,
+			$linestart, true, $this->mRevisionId );
+		if ( $interface) { $popts->setInterfaceMessage(false); }
+		return $parserOutput->getText();
+	}
+
+	/**
+	 * @param Article $article
+	 * @param User    $user
+	 *
+	 * @return bool True if successful, else false.
+	 */
+	public function tryParserCache( &$article, $user ) {
+		$parserCache =& ParserCache::singleton();
+		$parserOutput = $parserCache->get( $article, $user );
+		if ( $parserOutput !== false ) {
+			$this->addParserOutput( $parserOutput );
+			return true;
+		} else {
+			return false;
+		}
+	}
+
+	/**
+	 * @param int $maxage Maximum cache time on the Squid, in seconds.
+	 */
+	public function setSquidMaxage( $maxage ) {
+		$this->mSquidMaxage = $maxage;
+	}
+
+	/**
+	 * Use enableClientCache(false) to force it to send nocache headers
+	 * @param $state ??
+	 */
+	public function enableClientCache( $state ) {
+		return wfSetVar( $this->mEnableClientCache, $state );
+	}
+
+	function uncacheableBecauseRequestvars() {
+		global $wgRequest;
+		return	$wgRequest->getText('useskin', false) === false
+			&& $wgRequest->getText('uselang', false) === false;
+	}
+
+	public function sendCacheControl() {
+		global $wgUseSquid, $wgUseESI, $wgUseETag, $wgSquidMaxage, $wgRequest;
+		$fname = 'OutputPage::sendCacheControl';
+
+		if ($wgUseETag && $this->mETag)
+			$wgRequest->response()->header("ETag: $this->mETag");
+
+		# don't serve compressed data to clients who can't handle it
+		# maintain different caches for logged-in users and non-logged in ones
+		$wgRequest->response()->header( 'Vary: Accept-Encoding, Cookie' );
+		if( !$this->uncacheableBecauseRequestvars() && $this->mEnableClientCache ) {
+			if( $wgUseSquid && session_id() == '' &&
+			  ! $this->isPrintable() && $this->mSquidMaxage != 0 )
+			{
+				if ( $wgUseESI ) {
+					# We'll purge the proxy cache explicitly, but require end user agents
+					# to revalidate against the proxy on each visit.
+					# Surrogate-Control controls our Squid, Cache-Control downstream caches
+					wfDebug( "$fname: proxy caching with ESI; {$this->mLastModified} **\n", false );
+					# start with a shorter timeout for initial testing
+					# header( 'Surrogate-Control: max-age=2678400+2678400, content="ESI/1.0"');
+					$wgRequest->response()->header( 'Surrogate-Control: max-age='.$wgSquidMaxage.'+'.$this->mSquidMaxage.', content="ESI/1.0"');
+					$wgRequest->response()->header( 'Cache-Control: s-maxage=0, must-revalidate, max-age=0' );
+				} else {
+					# We'll purge the proxy cache for anons explicitly, but require end user agents
+					# to revalidate against the proxy on each visit.
+					# IMPORTANT! The Squid needs to replace the Cache-Control header with
+					# Cache-Control: s-maxage=0, must-revalidate, max-age=0
+					wfDebug( "$fname: local proxy caching; {$this->mLastModified} **\n", false );
+					# start with a shorter timeout for initial testing
+					# header( "Cache-Control: s-maxage=2678400, must-revalidate, max-age=0" );
+					$wgRequest->response()->header( 'Cache-Control: s-maxage='.$this->mSquidMaxage.', must-revalidate, max-age=0' );
+				}
+			} else {
+				# We do want clients to cache if they can, but they *must* check for updates
+				# on revisiting the page.
+				wfDebug( "$fname: private caching; {$this->mLastModified} **\n", false );
+				$wgRequest->response()->header( 'Expires: ' . gmdate( 'D, d M Y H:i:s', 0 ) . ' GMT' );
+				$wgRequest->response()->header( "Cache-Control: private, must-revalidate, max-age=0" );
+			}
+			if($this->mLastModified) $wgRequest->response()->header( "Last-modified: {$this->mLastModified}" );
+		} else {
+			wfDebug( "$fname: no caching **\n", false );
+
+			# In general, the absence of a last modified header should be enough to prevent
+			# the client from using its cache. We send a few other things just to make sure.
+			$wgRequest->response()->header( 'Expires: ' . gmdate( 'D, d M Y H:i:s', 0 ) . ' GMT' );
+			$wgRequest->response()->header( 'Cache-Control: no-cache, no-store, max-age=0, must-revalidate' );
+			$wgRequest->response()->header( 'Pragma: no-cache' );
+		}
+	}
+
+	/**
+	 * Finally, all the text has been munged and accumulated into
+	 * the object, let's actually output it:
+	 */
+	public function output() {
+		global $wgUser, $wgOutputEncoding, $wgRequest;
+		global $wgContLanguageCode, $wgDebugRedirects, $wgMimeType;
+		global $wgJsMimeType, $wgStylePath, $wgUseAjax, $wgAjaxSearch, $wgAjaxWatch;
+		global $wgServer, $wgStyleVersion;
+
+		if( $this->mDoNothing ){
+			return;
+		}
+		$fname = 'OutputPage::output';
+		wfProfileIn( $fname );
+		$sk = $wgUser->getSkin();
+
+		if ( $wgUseAjax ) {
+			$this->addScript( "<script type=\"{$wgJsMimeType}\" src=\"{$wgStylePath}/common/ajax.js?$wgStyleVersion\"></script>\n" );
+
+			wfRunHooks( 'AjaxAddScript', array( &$this ) );
+
+			if( $wgAjaxSearch ) {
+				$this->addScript( "<script type=\"{$wgJsMimeType}\" src=\"{$wgStylePath}/common/ajaxsearch.js?$wgStyleVersion\"></script>\n" );
+				$this->addScript( "<script type=\"{$wgJsMimeType}\">hookEvent(\"load\", sajax_onload);</script>\n" );
+			}
+
+			if( $wgAjaxWatch && $wgUser->isLoggedIn() ) {
+				$this->addScript( "<script type=\"{$wgJsMimeType}\" src=\"{$wgStylePath}/common/ajaxwatch.js?$wgStyleVersion\"></script>\n" );
+			}
+		}
+
+		if ( '' != $this->mRedirect ) {
+			if( substr( $this->mRedirect, 0, 4 ) != 'http' ) {
+				# Standards require redirect URLs to be absolute
+				global $wgServer;
+				$this->mRedirect = $wgServer . $this->mRedirect;
+			}
+			if( $this->mRedirectCode == '301') {
+				if( !$wgDebugRedirects ) {
+					$wgRequest->response()->header("HTTP/1.1 {$this->mRedirectCode} Moved Permanently");
+				}
+				$this->mLastModified = wfTimestamp( TS_RFC2822 );
+			}
+
+			$this->sendCacheControl();
+
+			$wgRequest->response()->header("Content-Type: text/html; charset=utf-8");
+			if( $wgDebugRedirects ) {
+				$url = htmlspecialchars( $this->mRedirect );
+				print "<html>\n<head>\n<title>Redirect</title>\n</head>\n<body>\n";
+				print "<p>Location: <a href=\"$url\">$url</a></p>\n";
+				print "</body>\n</html>\n";
+			} else {
+				$wgRequest->response()->header( 'Location: '.$this->mRedirect );
+			}
+			wfProfileOut( $fname );
+			return;
+		}
+		elseif ( $this->mStatusCode )
+		{
+			$statusMessage = array(
+				100 => 'Continue',
+				101 => 'Switching Protocols',
+				102 => 'Processing',
+				200 => 'OK',
+				201 => 'Created',
+				202 => 'Accepted',
+				203 => 'Non-Authoritative Information',
+				204 => 'No Content',
+				205 => 'Reset Content',
+				206 => 'Partial Content',
+				207 => 'Multi-Status',
+				300 => 'Multiple Choices',
+				301 => 'Moved Permanently',
+				302 => 'Found',
+				303 => 'See Other',
+				304 => 'Not Modified',
+				305 => 'Use Proxy',
+				307 => 'Temporary Redirect',
+				400 => 'Bad Request',
+				401 => 'Unauthorized',
+				402 => 'Payment Required',
+				403 => 'Forbidden',
+				404 => 'Not Found',
+				405 => 'Method Not Allowed',
+				406 => 'Not Acceptable',
+				407 => 'Proxy Authentication Required',
+				408 => 'Request Timeout',
+				409 => 'Conflict',
+				410 => 'Gone',
+				411 => 'Length Required',
+				412 => 'Precondition Failed',
+				413 => 'Request Entity Too Large',
+				414 => 'Request-URI Too Large',
+				415 => 'Unsupported Media Type',
+				416 => 'Request Range Not Satisfiable',
+				417 => 'Expectation Failed',
+				422 => 'Unprocessable Entity',
+				423 => 'Locked',
+				424 => 'Failed Dependency',
+				500 => 'Internal Server Error',
+				501 => 'Not Implemented',
+				502 => 'Bad Gateway',
+				503 => 'Service Unavailable',
+				504 => 'Gateway Timeout',
+				505 => 'HTTP Version Not Supported',
+				507 => 'Insufficient Storage'
+			);
+
+			if ( $statusMessage[$this->mStatusCode] )
+				$wgRequest->response()->header( 'HTTP/1.1 ' . $this->mStatusCode . ' ' . $statusMessage[$this->mStatusCode] );
+		}
+
+		# Buffer output; final headers may depend on later processing
+		ob_start();
+
+		# Disable temporary placeholders, so that the skin produces HTML
+		$sk->postParseLinkColour( false );
+
+		$wgRequest->response()->header( "Content-type: $wgMimeType; charset={$wgOutputEncoding}" );
+		$wgRequest->response()->header( 'Content-language: '.$wgContLanguageCode );
+
+		if ($this->mArticleBodyOnly) {
+			$this->out($this->mBodytext);
+		} else {
+			wfProfileIn( 'Output-skin' );
+			$sk->outputPage( $this );
+			wfProfileOut( 'Output-skin' );
+		}
+
+		$this->sendCacheControl();
+		ob_end_flush();
+		wfProfileOut( $fname );
+	}
+
+	/**
+	 * @todo document
+	 * @param string $ins
+	 */
+	public function out( $ins ) {
+		global $wgInputEncoding, $wgOutputEncoding, $wgContLang;
+		if ( 0 == strcmp( $wgInputEncoding, $wgOutputEncoding ) ) {
+			$outs = $ins;
+		} else {
+			$outs = $wgContLang->iconv( $wgInputEncoding, $wgOutputEncoding, $ins );
+			if ( false === $outs ) { $outs = $ins; }
+		}
+		print $outs;
+	}
+
+	/**
+	 * @todo document
+	 */
+	public static function setEncodings() {
+		global $wgInputEncoding, $wgOutputEncoding;
+		global $wgUser, $wgContLang;
+
+		$wgInputEncoding = strtolower( $wgInputEncoding );
+
+		if ( empty( $_SERVER['HTTP_ACCEPT_CHARSET'] ) ) {
+			$wgOutputEncoding = strtolower( $wgOutputEncoding );
+			return;
+		}
+		$wgOutputEncoding = $wgInputEncoding;
+	}
+
+	/**
+	 * Deprecated, use wfReportTime() instead.
+	 * @return string
+	 * @deprecated
+	 */
+	public function reportTime() {
+		$time = wfReportTime();
+		return $time;
+	}
+
+	/**
+	 * Produce a "user is blocked" page.
+	 *
+	 * @param bool $return Whether to have a "return to $wgTitle" message or not.
+	 * @return nothing
+	 */
+	function blockedPage( $return = true ) {
+		global $wgUser, $wgContLang, $wgTitle;
+
+		$this->setPageTitle( wfMsg( 'blockedtitle' ) );
+		$this->setRobotpolicy( 'noindex,nofollow' );
+		$this->setArticleRelated( false );
+
+		$id = $wgUser->blockedBy();
+		$reason = $wgUser->blockedFor();
+		$ip = wfGetIP();
+
+		if ( is_numeric( $id ) ) {
+			$name = User::whoIs( $id );
+		} else {
+			$name = $id;
+		}
+		$link = '[[' . $wgContLang->getNsText( NS_USER ) . ":{$name}|{$name}]]";
+
+		$blockid = $wgUser->mBlock->mId;
+
+		$this->addWikiText( wfMsg( 'blockedtext', $link, $reason, $ip, $name, $blockid ) );
+		
+		# Don't auto-return to special pages
+		if( $return ) {
+			$return = $wgTitle->getNamespace() > -1 ? $wgTitle->getPrefixedText() : NULL;
+			$this->returnToMain( false, $return );
+		}
+	}
+
+	/**
+	 * Outputs a pretty page to explain why the request exploded.
+	 *
+	 * @param string $title Message key for page title.
+	 * @param string $msg   Message key for page text.
+	 * @return nothing
+	 */
+	public function showErrorPage( $title, $msg ) {
+		global $wgTitle;
+
+		$this->mDebugtext .= 'Original title: ' .
+		  $wgTitle->getPrefixedText() . "\n";
+		$this->setPageTitle( wfMsg( $title ) );
+		$this->setHTMLTitle( wfMsg( 'errorpagetitle' ) );
+		$this->setRobotpolicy( 'noindex,nofollow' );
+		$this->setArticleRelated( false );
+		$this->enableClientCache( false );
+		$this->mRedirect = '';
+
+		$this->mBodytext = '';
+		$this->addWikiText( wfMsg( $msg ) );
+		$this->returnToMain( false );
+	}
+
+	/** @deprecated */
+	public function errorpage( $title, $msg ) {
+		throw new ErrorPageError( $title, $msg );
+	}
+		
+	/**
+	 * Display an error page indicating that a given version of MediaWiki is
+	 * required to use it
+	 *
+	 * @param mixed $version The version of MediaWiki needed to use the page
+	 */
+	public function versionRequired( $version ) {
+		$this->setPageTitle( wfMsg( 'versionrequired', $version ) );
+		$this->setHTMLTitle( wfMsg( 'versionrequired', $version ) );
+		$this->setRobotpolicy( 'noindex,nofollow' );
+		$this->setArticleRelated( false );
+		$this->mBodytext = '';
+
+		$this->addWikiText( wfMsg( 'versionrequiredtext', $version ) );
+		$this->returnToMain();
+	}
+
+	/**
+	 * Display an error page noting that a given permission bit is required.
+	 *
+	 * @param string $permission key required
+	 */
+	public function permissionRequired( $permission ) {
+		global $wgGroupPermissions, $wgUser;
+
+		$this->setPageTitle( wfMsg( 'badaccess' ) );
+		$this->setHTMLTitle( wfMsg( 'errorpagetitle' ) );
+		$this->setRobotpolicy( 'noindex,nofollow' );
+		$this->setArticleRelated( false );
+		$this->mBodytext = '';
+
+		$groups = array();
+		foreach( $wgGroupPermissions as $key => $value ) {
+			if( isset( $value[$permission] ) && $value[$permission] == true ) {
+				$groupName = User::getGroupName( $key );
+				$groupPage = User::getGroupPage( $key );
+				if( $groupPage ) {
+					$skin = $wgUser->getSkin();
+					$groups[] = $skin->makeLinkObj( $groupPage, $groupName );
+				} else {
+					$groups[] = $groupName;
+				}
+			}
+		}
+		$n = count( $groups );
+		$groups = implode( ', ', $groups );
+		switch( $n ) {
+			case 0:
+			case 1:
+			case 2:
+				$message = wfMsgHtml( "badaccess-group$n", $groups );
+				break;
+			default:
+				$message = wfMsgHtml( 'badaccess-groups', $groups );
+		}
+		$this->addHtml( $message );
+		$this->returnToMain( false );
+	}
+
+	/**
+	 * Use permissionRequired.
+	 * @deprecated
+	 */
+	public function sysopRequired() {
+		throw new MWException( "Call to deprecated OutputPage::sysopRequired() method\n" );
+	}
+
+	/**
+	 * Use permissionRequired.
+	 * @deprecated
+	 */
+	public function developerRequired() {
+		throw new MWException( "Call to deprecated OutputPage::developerRequired() method\n" );
+	}
+
+	/**
+	 * Produce the stock "please login to use the wiki" page
+	 */
+	public function loginToUse() {
+		global $wgUser, $wgTitle, $wgContLang;
+
+		if( $wgUser->isLoggedIn() ) {
+			$this->permissionRequired( 'read' );
+			return;
+		}
+
+		$skin = $wgUser->getSkin();
+		
+		$this->setPageTitle( wfMsg( 'loginreqtitle' ) );
+		$this->setHtmlTitle( wfMsg( 'errorpagetitle' ) );
+		$this->setRobotPolicy( 'noindex,nofollow' );
+		$this->setArticleFlag( false );
+		
+		$loginTitle = SpecialPage::getTitleFor( 'Userlogin' );
+		$loginLink = $skin->makeKnownLinkObj( $loginTitle, wfMsgHtml( 'loginreqlink' ), 'returnto=' . $wgTitle->getPrefixedUrl() );
+		$this->addHtml( wfMsgWikiHtml( 'loginreqpagetext', $loginLink ) );
+		$this->addHtml( "\n<!--" . $wgTitle->getPrefixedUrl() . "-->" );
+		
+		# Don't return to the main page if the user can't read it
+		# otherwise we'll end up in a pointless loop
+		$mainPage = Title::newMainPage();
+		if( $mainPage->userCanRead() )
+			$this->returnToMain( true, $mainPage );
+	}
+
+	/** @deprecated */
+	public function databaseError( $fname, $sql, $error, $errno ) {
+		throw new MWException( "OutputPage::databaseError is obsolete\n" );
+	}
+
+	/**
+	 * @todo document
+	 * @param bool  $protected Is the reason the page can't be reached because it's protected?
+	 * @param mixed $source
+	 */
+	public function readOnlyPage( $source = null, $protected = false ) {
+		global $wgUser, $wgReadOnlyFile, $wgReadOnly, $wgTitle;
+		$skin = $wgUser->getSkin();
+
+		$this->setRobotpolicy( 'noindex,nofollow' );
+		$this->setArticleRelated( false );
+
+		if( $protected ) {
+			$this->setPageTitle( wfMsg( 'viewsource' ) );
+			$this->setSubtitle( wfMsg( 'viewsourcefor', $skin->makeKnownLinkObj( $wgTitle ) ) );
+
+			list( $cascadeSources, $restrictions ) = $wgTitle->getCascadeProtectionSources();
+
+			# Determine if protection is due to the page being a system message
+			# and show an appropriate explanation
+			if( $wgTitle->getNamespace() == NS_MEDIAWIKI ) {
+				$this->addWikiText( wfMsg( 'protectedinterface' ) );
+			} if ( $cascadeSources && count($cascadeSources) > 0 ) {
+				$titles = '';
+	
+				foreach ( $cascadeSources as $title ) {
+					$titles .= '* [[:' . $title->getPrefixedText() . "]]\n";
+				}
+
+				$notice = wfMsgExt( 'cascadeprotected', array('parsemag'), count($cascadeSources) ) . "\n$titles";
+
+				$this->addWikiText( $notice );
+			} else {
+				$this->addWikiText( wfMsg( 'protectedpagetext' ) );
+			}
+		} else {
+			$this->setPageTitle( wfMsg( 'readonly' ) );
+			if ( $wgReadOnly ) {
+				$reason = $wgReadOnly;
+			} else {
+				$reason = file_get_contents( $wgReadOnlyFile );
+			}
+			$this->addWikiText( wfMsg( 'readonlytext', $reason ) );
+		}
+
+		if( is_string( $source ) ) {
+			$this->addWikiText( wfMsg( 'viewsourcetext' ) );
+			$rows = $wgUser->getIntOption( 'rows' );
+			$cols = $wgUser->getIntOption( 'cols' );
+			$text = "\n<textarea name='wpTextbox1' id='wpTextbox1' cols='$cols' rows='$rows' readonly='readonly'>" .
+				htmlspecialchars( $source ) . "\n</textarea>";
+			$this->addHTML( $text );
+		}
+		$article = new Article($wgTitle);
+		$this->addHTML( $skin->formatTemplates($article->getUsedTemplates()) );
+
+		$this->returnToMain( false );
+	}
+
+	/** @deprecated */
+	public function fatalError( $message ) {
+		throw new FatalError( $message ); 
+	}
+	
+	/** @deprecated */
+	public function unexpectedValueError( $name, $val ) {
+		throw new FatalError( wfMsg( 'unexpected', $name, $val ) );
+	}
+
+	/** @deprecated */
+	public function fileCopyError( $old, $new ) {
+		throw new FatalError( wfMsg( 'filecopyerror', $old, $new ) );
+	}
+
+	/** @deprecated */
+	public function fileRenameError( $old, $new ) {
+		throw new FatalError( wfMsg( 'filerenameerror', $old, $new ) );
+	}
+
+	/** @deprecated */
+	public function fileDeleteError( $name ) {
+		throw new FatalError( wfMsg( 'filedeleteerror', $name ) );
+	}
+
+	/** @deprecated */
+	public function fileNotFoundError( $name ) {
+		throw new FatalError( wfMsg( 'filenotfound', $name ) );
+	}
+
+	public function showFatalError( $message ) {
+		$this->setPageTitle( wfMsg( "internalerror" ) );
+		$this->setRobotpolicy( "noindex,nofollow" );
+		$this->setArticleRelated( false );
+		$this->enableClientCache( false );
+		$this->mRedirect = '';
+		$this->mBodytext = $message;
+	}
+
+	public function showUnexpectedValueError( $name, $val ) {
+		$this->showFatalError( wfMsg( 'unexpected', $name, $val ) );
+	}
+
+	public function showFileCopyError( $old, $new ) {
+		$this->showFatalError( wfMsg( 'filecopyerror', $old, $new ) );
+	}
+
+	public function showFileRenameError( $old, $new ) {
+		$this->showFatalError( wfMsg( 'filerenameerror', $old, $new ) );
+	}
+
+	public function showFileDeleteError( $name ) {
+		$this->showFatalError( wfMsg( 'filedeleteerror', $name ) );
+	}
+
+	public function showFileNotFoundError( $name ) {
+		$this->showFatalError( wfMsg( 'filenotfound', $name ) );
+	}
+
+	/**
+	 * return from error messages or notes
+	 * @param $auto automatically redirect the user after 10 seconds
+	 * @param $returnto page title to return to. Default is Main Page.
+	 */
+	public function returnToMain( $auto = true, $returnto = NULL ) {
+		global $wgUser, $wgOut, $wgRequest;
+		
+		if ( $returnto == NULL ) {
+			$returnto = $wgRequest->getText( 'returnto' );
+		}
+		
+		if ( '' === $returnto ) {
+			$returnto = Title::newMainPage();
+		}
+
+		if ( is_object( $returnto ) ) {
+			$titleObj = $returnto;
+		} else {
+			$titleObj = Title::newFromText( $returnto );
+		}
+		if ( !is_object( $titleObj ) ) {
+			$titleObj = Title::newMainPage();
+		}
+
+		$sk = $wgUser->getSkin();
+		$link = $sk->makeLinkObj( $titleObj, '' );
+
+		$r = wfMsg( 'returnto', $link );
+		if ( $auto ) {
+			$wgOut->addMeta( 'http:Refresh', '10;url=' . $titleObj->escapeFullURL() );
+		}
+		$wgOut->addHTML( "\n<p>$r</p>\n" );
+	}
+
+	/**
+	 * This function takes the title (first item of mGoodLinks), categories, existing and broken links for the page
+	 * and uses the first 10 of them for META keywords
+	 *
+	 * @param ParserOutput &$parserOutput
+	 */
+	private function addKeywords( &$parserOutput ) {
+		global $wgTitle;
+		$this->addKeyword( $wgTitle->getPrefixedText() );
+		$count = 1;
+		$links2d =& $parserOutput->getLinks();
+		if ( !is_array( $links2d ) ) {
+			return;
+		}
+		foreach ( $links2d as $dbkeys ) {
+			foreach( $dbkeys as $dbkey => $unused ) {
+				$this->addKeyword( $dbkey );
+				if ( ++$count > 10 ) {
+					break 2;
+				}
+			}
+		}
+	}
+
+	/**
+	 * @return string The doctype, opening <html>, and head element.
+	 */
+	public function headElement() {
+		global $wgDocType, $wgDTD, $wgContLanguageCode, $wgOutputEncoding, $wgMimeType;
+		global $wgXhtmlDefaultNamespace, $wgXhtmlNamespaces;
+		global $wgUser, $wgContLang, $wgUseTrackbacks, $wgTitle, $wgStyleVersion;
+
+		if( $wgMimeType == 'text/xml' || $wgMimeType == 'application/xhtml+xml' || $wgMimeType == 'application/xml' ) {
+			$ret = "<?xml version=\"1.0\" encoding=\"$wgOutputEncoding\" ?>\n";
+		} else {
+			$ret = '';
+		}
+
+		$ret .= "<!DOCTYPE html PUBLIC \"$wgDocType\"\n        \"$wgDTD\">\n";
+
+		if ( '' == $this->getHTMLTitle() ) {
+			$this->setHTMLTitle(  wfMsg( 'pagetitle', $this->getPageTitle() ));
+		}
+
+		$rtl = $wgContLang->isRTL() ? " dir='RTL'" : '';
+		$ret .= "<html xmlns=\"{$wgXhtmlDefaultNamespace}\" ";
+		foreach($wgXhtmlNamespaces as $tag => $ns) {
+			$ret .= "xmlns:{$tag}=\"{$ns}\" ";
+		}
+		$ret .= "xml:lang=\"$wgContLanguageCode\" lang=\"$wgContLanguageCode\" $rtl>\n";
+		$ret .= "<head>\n<title>" . htmlspecialchars( $this->getHTMLTitle() ) . "</title>\n";
+		array_push( $this->mMetatags, array( "http:Content-type", "$wgMimeType; charset={$wgOutputEncoding}" ) );
+
+		$ret .= $this->getHeadLinks();
+		global $wgStylePath;
+		if( $this->isPrintable() ) {
+			$media = '';
+		} else {
+			$media = "media='print'";
+		}
+		$printsheet = htmlspecialchars( "$wgStylePath/common/wikiprintable.css?$wgStyleVersion" );
+		$ret .= "<link rel='stylesheet' type='text/css' $media href='$printsheet' />\n";
+
+		$sk = $wgUser->getSkin();
+		$ret .= $sk->getHeadScripts();
+		$ret .= $this->mScripts;
+		$ret .= $sk->getUserStyles();
+		$ret .= $this->getHeadItems();
+
+		if ($wgUseTrackbacks && $this->isArticleRelated())
+			$ret .= $wgTitle->trackbackRDF();
+
+		$ret .= "</head>\n";
+		return $ret;
+	}
+
+	/**
+	 * @return string HTML tag links to be put in the header.
+	 */
+	public function getHeadLinks() {
+		global $wgRequest;
+		$ret = '';
+		foreach ( $this->mMetatags as $tag ) {
+			if ( 0 == strcasecmp( 'http:', substr( $tag[0], 0, 5 ) ) ) {
+				$a = 'http-equiv';
+				$tag[0] = substr( $tag[0], 5 );
+			} else {
+				$a = 'name';
+			}
+			$ret .= "<meta $a=\"{$tag[0]}\" content=\"{$tag[1]}\" />\n";
+		}
+
+		$p = $this->mRobotpolicy;
+		if( $p !== '' && $p != 'index,follow' ) {
+			// http://www.robotstxt.org/wc/meta-user.html
+			// Only show if it's different from the default robots policy
+			$ret .= "<meta name=\"robots\" content=\"$p\" />\n";
+		}
+
+		if ( count( $this->mKeywords ) > 0 ) {
+			$strip = array(
+				"/<.*?>/" => '',
+				"/_/" => ' '
+			);
+			$ret .= "\t\t<meta name=\"keywords\" content=\"" .
+			  htmlspecialchars(preg_replace(array_keys($strip), array_values($strip),implode( ",", $this->mKeywords ))) . "\" />\n";
+		}
+		foreach ( $this->mLinktags as $tag ) {
+			$ret .= "\t\t<link";
+			foreach( $tag as $attr => $val ) {
+				$ret .= " $attr=\"" . htmlspecialchars( $val ) . "\"";
+			}
+			$ret .= " />\n";
+		}
+		if( $this->isSyndicated() ) {
+			# FIXME: centralize the mime-type and name information in Feed.php
+			$link = $wgRequest->escapeAppendQuery( 'feed=rss' );
+			$ret .= "<link rel='alternate' type='application/rss+xml' title='RSS 2.0' href='$link' />\n";
+			$link = $wgRequest->escapeAppendQuery( 'feed=atom' );
+			$ret .= "<link rel='alternate' type='application/atom+xml' title='Atom 1.0' href='$link' />\n";
+		}
+
+		return $ret;
+	}
+
+	/**
+	 * Turn off regular page output and return an error reponse
+	 * for when rate limiting has triggered.
+	 * @todo i18n
+	 */
+	public function rateLimited() {
+		global $wgOut;
+		$wgOut->disable();
+		wfHttpError( 500, 'Internal Server Error',
+			'Sorry, the server has encountered an internal error. ' .
+			'Please wait a moment and hit "refresh" to submit the request again.' );
+	}
+	
+	/**
+	 * Show an "add new section" link?
+	 *
+	 * @return bool True if the parser output instructs us to add one
+	 */
+	public function showNewSectionLink() {
+		return $this->mNewSectionLink;
+	}
+}
+?>
Index: /MediaWiki/branches/1.11/includes/PageHistory.php
===================================================================
--- /MediaWiki/branches/1.11/includes/PageHistory.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/PageHistory.php	(revision 1280)
@@ -0,0 +1,592 @@
+<?php
+/**
+ * Page history
+ *
+ * Split off from Article.php and Skin.php, 2003-12-22
+ */
+
+/**
+ * This class handles printing the history page for an article.  In order to
+ * be efficient, it uses timestamps rather than offsets for paging, to avoid
+ * costly LIMIT,offset queries.
+ *
+ * Construct it by passing in an Article, and call $h->history() to print the
+ * history.
+ *
+ */
+class PageHistory {
+	const DIR_PREV = 0;
+	const DIR_NEXT = 1;
+	
+	var $mArticle, $mTitle, $mSkin;
+	var $lastdate;
+	var $linesonpage;
+	var $mNotificationTimestamp;
+	var $mLatestId = null;
+
+	/**
+	 * Construct a new PageHistory.
+	 *
+	 * @param Article $article
+	 * @returns nothing
+	 */
+	function __construct($article) {
+		global $wgUser;
+
+		$this->mArticle =& $article;
+		$this->mTitle =& $article->mTitle;
+		$this->mNotificationTimestamp = NULL;
+		$this->mSkin = $wgUser->getSkin();
+	}
+
+	/**
+	 * Print the history page for an article.
+	 *
+	 * @returns nothing
+	 */
+	function history() {
+		global $wgOut, $wgRequest, $wgTitle;
+
+		/*
+		 * Allow client caching.
+		 */
+
+		if( $wgOut->checkLastModified( $this->mArticle->getTimestamp() ) )
+			/* Client cache fresh and headers sent, nothing more to do. */
+			return;
+
+		$fname = 'PageHistory::history';
+		wfProfileIn( $fname );
+
+		/*
+		 * Setup page variables.
+		 */
+		$wgOut->setPageTitle( $this->mTitle->getPrefixedText() );
+		$wgOut->setArticleFlag( false );
+		$wgOut->setArticleRelated( true );
+		$wgOut->setRobotpolicy( 'noindex,nofollow' );
+		$wgOut->setSyndicated( true );
+
+		$logPage = SpecialPage::getTitleFor( 'Log' );
+		$logLink = $this->mSkin->makeKnownLinkObj( $logPage, wfMsgHtml( 'viewpagelogs' ), 'page=' . $this->mTitle->getPrefixedUrl() );
+
+		$subtitle = wfMsgHtml( 'revhistory' ) . '<br />' . $logLink;
+		$wgOut->setSubtitle( $subtitle );
+
+		$feedType = $wgRequest->getVal( 'feed' );
+		if( $feedType ) {
+			wfProfileOut( $fname );
+			return $this->feed( $feedType );
+		}
+
+		/*
+		 * Fail if article doesn't exist.
+		 */
+		if( !$this->mTitle->exists() ) {
+			$wgOut->addWikiText( wfMsg( 'nohistory' ) );
+			wfProfileOut( $fname );
+			return;
+		}
+
+		
+		/*
+		 * "go=first" means to jump to the last (earliest) history page.
+		 * This is deprecated, it no longer appears in the user interface
+		 */
+		if ( $wgRequest->getText("go") == 'first' ) {
+			$limit = $wgRequest->getInt( 'limit', 50 );
+			$wgOut->redirect( $wgTitle->getLocalURL( "action=history&limit={$limit}&dir=prev" ) );
+			return;
+		}
+		
+		wfRunHooks( 'PageHistoryBeforeList', array( &$this->mArticle ) );
+
+		/** 
+		 * Do the list
+		 */
+		$pager = new PageHistoryPager( $this );
+		$this->linesonpage = $pager->getNumRows();
+		$wgOut->addHTML(
+			$pager->getNavigationBar() . 
+			$this->beginHistoryList() . 
+			$pager->getBody() .
+			$this->endHistoryList() .
+			$pager->getNavigationBar()
+		);
+		wfProfileOut( $fname );
+	}
+
+	/** @todo document */
+	function beginHistoryList() {
+		global $wgTitle;
+		$this->lastdate = '';
+		$s = wfMsgExt( 'histlegend', array( 'parse') );
+		$s .= '<form action="' . $wgTitle->escapeLocalURL( '-' ) . '" method="get">';
+		$prefixedkey = htmlspecialchars($wgTitle->getPrefixedDbKey());
+
+		// The following line is SUPPOSED to have double-quotes around the
+		// $prefixedkey variable, because htmlspecialchars() doesn't escape
+		// single-quotes.
+		//
+		// On at least two occasions people have changed it to single-quotes,
+		// which creates invalid HTML and incorrect display of the resulting
+		// link.
+		//
+		// Please do not break this a third time. Thank you for your kind
+		// consideration and cooperation.
+		//
+		$s .= "<input type='hidden' name='title' value=\"{$prefixedkey}\" />\n";
+
+		$s .= $this->submitButton();
+		$s .= '<ul id="pagehistory">' . "\n";
+		return $s;
+	}
+
+	/** @todo document */
+	function endHistoryList() {
+		$s = '</ul>';
+		$s .= $this->submitButton( array( 'id' => 'historysubmit' ) );
+		$s .= '</form>';
+		return $s;
+	}
+
+	/** @todo document */
+	function submitButton( $bits = array() ) {
+		return ( $this->linesonpage > 0 )
+			? wfElement( 'input', array_merge( $bits,
+				array(
+					'class'     => 'historysubmit',
+					'type'      => 'submit',
+					'accesskey' => wfMsg( 'accesskey-compareselectedversions' ),
+					'title'     => wfMsg( 'tooltip-compareselectedversions' ).' ['.wfMsg( 'accesskey-compareselectedversions' ).']',
+					'value'     => wfMsg( 'compareselectedversions' ),
+				) ) )
+			: '';
+	}
+
+	/**
+	 * Returns a row from the history printout.
+	 *
+	 * @todo document some more, and maybe clean up the code (some params redundant?)
+	 *
+	 * @param object $row The database row corresponding to the line (or is it the previous line?).
+	 * @param object $next The database row corresponding to the next line (or is it this one?).
+	 * @param int $counter Apparently a counter of what row number we're at, counted from the top row = 1.
+	 * @param $notificationtimestamp
+	 * @param bool $latest Whether this row corresponds to the page's latest revision.
+	 * @param bool $firstInList Whether this row corresponds to the first displayed on this history page.
+	 * @return string HTML output for the row
+	 */
+	function historyLine( $row, $next, $counter = '', $notificationtimestamp = false, $latest = false, $firstInList = false ) {
+		global $wgUser, $wgLang;
+		$rev = new Revision( $row );
+		$rev->setTitle( $this->mTitle );
+
+		$s = '<li>';
+		$curlink = $this->curLink( $rev, $latest );
+		$lastlink = $this->lastLink( $rev, $next, $counter );
+		$arbitrary = $this->diffButtons( $rev, $firstInList, $counter );
+		$link = $this->revLink( $rev );
+		
+		$user = $this->mSkin->userLink( $rev->getUser(), $rev->getUserText() )
+				. $this->mSkin->userToolLinks( $rev->getUser(), $rev->getUserText() );
+		
+		$s .= "($curlink) ($lastlink) $arbitrary";
+		
+		if( $wgUser->isAllowed( 'deleterevision' ) ) {
+			$revdel = SpecialPage::getTitleFor( 'Revisiondelete' );
+			if( $firstInList ) {
+				// We don't currently handle well changing the top revision's settings
+				$del = wfMsgHtml( 'rev-delundel' );
+			} else if( !$rev->userCan( Revision::DELETED_RESTRICTED ) ) {
+			// If revision was hidden from sysops
+				$del = wfMsgHtml( 'rev-delundel' );			
+			} else {
+				$del = $this->mSkin->makeKnownLinkObj( $revdel,
+					wfMsg( 'rev-delundel' ),
+					'target=' . urlencode( $this->mTitle->getPrefixedDbkey() ) .
+					'&oldid=' . urlencode( $rev->getId() ) );
+			}
+			$s .= " (<small>$del</small>) ";
+		}
+		
+		$s .= " $link";
+		#getUser is safe, but this avoids making the invalid untargeted contribs links
+		if( $row->rev_deleted & Revision::DELETED_USER ) {
+			$user = '<span class="history-deleted">' . wfMsg('rev-deleted-user') . '</span>';
+		}
+		$s .= " <span class='history-user'>$user</span>";
+
+		if( $row->rev_minor_edit ) {
+			$s .= ' ' . wfElement( 'span', array( 'class' => 'minor' ), wfMsg( 'minoreditletter') );
+		}
+
+		if (!is_null($size = $rev->getSize())) {
+			if ($size == 0)
+				$stxt = wfMsgHtml('historyempty');
+			else
+				$stxt = wfMsgHtml('historysize', $wgLang->formatNum( $size ) );
+			$s .= " <span class=\"history-size\">$stxt</span>";
+		}
+
+		#getComment is safe, but this is better formatted
+		if( $rev->isDeleted( Revision::DELETED_COMMENT ) ) {
+			$s .= " <span class=\"history-deleted\"><span class=\"comment\">" .
+			wfMsgHtml( 'rev-deleted-comment' ) . "</span></span>";
+		} else {
+			$s .= $this->mSkin->revComment( $rev );
+		}
+		
+		if ($notificationtimestamp && ($row->rev_timestamp >= $notificationtimestamp)) {
+			$s .= ' <span class="updatedmarker">' .  wfMsgHtml( 'updatedmarker' ) . '</span>';
+		}
+		#add blurb about text having been deleted
+		if( $row->rev_deleted & Revision::DELETED_TEXT ) {
+			$s .= ' ' . wfMsgHtml( 'deletedrev' );
+		}
+		if( $wgUser->isAllowed( 'rollback' ) && $latest ) {
+			$s .= ' '.$this->mSkin->generateRollback( $rev );
+		}
+		
+		wfRunHooks( 'PageHistoryLineEnding', array( &$row , &$s ) );
+		
+		$s .= "</li>\n";
+
+		return $s;
+	}
+	
+	/** @todo document */
+	function revLink( $rev ) {
+		global $wgLang;
+		$date = $wgLang->timeanddate( wfTimestamp(TS_MW, $rev->getTimestamp()), true );
+		if( $rev->userCan( Revision::DELETED_TEXT ) ) {
+			$link = $this->mSkin->makeKnownLinkObj(
+				$this->mTitle, $date, "oldid=" . $rev->getId() );
+		} else {
+			$link = $date;
+		}
+		if( $rev->isDeleted( Revision::DELETED_TEXT ) ) {
+			return '<span class="history-deleted">' . $link . '</span>';
+		}
+		return $link;
+	}
+
+	/** @todo document */
+	function curLink( $rev, $latest ) {
+		$cur = wfMsgExt( 'cur', array( 'escape') );
+		if( $latest || !$rev->userCan( Revision::DELETED_TEXT ) ) {
+			return $cur;
+		} else {
+			return $this->mSkin->makeKnownLinkObj(
+				$this->mTitle, $cur,
+				'diff=' . $this->getLatestID() .
+				"&oldid=" . $rev->getId() );
+		}
+	}
+
+	/** @todo document */
+	function lastLink( $rev, $next, $counter ) {
+		$last = wfMsgExt( 'last', array( 'escape' ) );
+		if ( is_null( $next ) ) {
+			# Probably no next row
+			return $last;
+		} elseif ( $next === 'unknown' ) {
+			# Next row probably exists but is unknown, use an oldid=prev link
+			return $this->mSkin->makeKnownLinkObj(
+				$this->mTitle,
+				$last,
+				"diff=" . $rev->getId() . "&oldid=prev" );
+		} elseif( !$rev->userCan( Revision::DELETED_TEXT ) ) {
+			return $last;
+		} else {
+			return $this->mSkin->makeKnownLinkObj(
+				$this->mTitle,
+				$last,
+				"diff=" . $rev->getId() . "&oldid={$next->rev_id}"
+				/*,
+				'',
+				'',
+				"tabindex={$counter}"*/ );
+		}
+	}
+
+	/** @todo document */
+	function diffButtons( $rev, $firstInList, $counter ) {
+		if( $this->linesonpage > 1) {
+			$radio = array(
+				'type'  => 'radio',
+				'value' => $rev->getId(),
+# do we really need to flood this on every item?
+#				'title' => wfMsgHtml( 'selectolderversionfordiff' )
+			);
+
+			if( !$rev->userCan( Revision::DELETED_TEXT ) ) {
+				$radio['disabled'] = 'disabled';
+			}
+
+			/** @todo: move title texts to javascript */
+			if ( $firstInList ) {
+				$first = wfElement( 'input', array_merge(
+					$radio,
+					array(
+						'style' => 'visibility:hidden',
+						'name'  => 'oldid' ) ) );
+				$checkmark = array( 'checked' => 'checked' );
+			} else {
+				if( $counter == 2 ) {
+					$checkmark = array( 'checked' => 'checked' );
+				} else {
+					$checkmark = array();
+				}
+				$first = wfElement( 'input', array_merge(
+					$radio,
+					$checkmark,
+					array( 'name'  => 'oldid' ) ) );
+				$checkmark = array();
+			}
+			$second = wfElement( 'input', array_merge(
+				$radio,
+				$checkmark,
+				array( 'name'  => 'diff' ) ) );
+			return $first . $second;
+		} else {
+			return '';
+		}
+	}
+
+	/** @todo document */
+	function getLatestId() {
+		if( is_null( $this->mLatestId ) ) {
+			$id = $this->mTitle->getArticleID();
+			$db = wfGetDB(DB_SLAVE);
+			$this->mLatestId = $db->selectField( 'page',
+				"page_latest",
+				array( 'page_id' => $id ),
+				'PageHistory::getLatestID' );
+		}
+		return $this->mLatestId;
+	}
+
+	/**
+	 * Fetch an array of revisions, specified by a given limit, offset and
+	 * direction. This is now only used by the feeds. It was previously 
+	 * used by the main UI but that's now handled by the pager.
+	 */
+	function fetchRevisions($limit, $offset, $direction) {
+		$fname = 'PageHistory::fetchRevisions';
+
+		$dbr = wfGetDB( DB_SLAVE );
+
+		if ($direction == PageHistory::DIR_PREV)
+			list($dirs, $oper) = array("ASC", ">=");
+		else /* $direction == PageHistory::DIR_NEXT */
+			list($dirs, $oper) = array("DESC", "<=");
+
+		if ($offset)
+			$offsets = array("rev_timestamp $oper '$offset'");
+		else
+			$offsets = array();
+
+		$page_id = $this->mTitle->getArticleID();
+
+		$res = $dbr->select(
+			'revision',
+			Revision::selectFields(),
+			array_merge(array("rev_page=$page_id"), $offsets),
+			$fname,
+			array('ORDER BY' => "rev_timestamp $dirs",
+				'USE INDEX' => 'page_timestamp', 'LIMIT' => $limit)
+			);
+
+		$result = array();
+		while (($obj = $dbr->fetchObject($res)) != NULL)
+			$result[] = $obj;
+
+		return $result;
+	}
+
+	/** @todo document */
+	function getNotificationTimestamp() {
+		global $wgUser, $wgShowUpdatedMarker;
+		$fname = 'PageHistory::getNotficationTimestamp';
+
+		if ($this->mNotificationTimestamp !== NULL)
+			return $this->mNotificationTimestamp;
+
+		if ($wgUser->isAnon() || !$wgShowUpdatedMarker)
+			return $this->mNotificationTimestamp = false;
+
+		$dbr = wfGetDB(DB_SLAVE);
+
+		$this->mNotificationTimestamp = $dbr->selectField(
+			'watchlist',
+			'wl_notificationtimestamp',
+			array(	'wl_namespace' => $this->mTitle->getNamespace(),
+				'wl_title' => $this->mTitle->getDBkey(),
+				'wl_user' => $wgUser->getID()
+			),
+			$fname);
+		
+		// Don't use the special value reserved for telling whether the field is filled
+		if ( is_null( $this->mNotificationTimestamp ) ) {
+			$this->mNotificationTimestamp = false;
+		}
+
+		return $this->mNotificationTimestamp;
+	}
+	
+	/**
+	 * Output a subscription feed listing recent edits to this page.
+	 * @param string $type
+	 */
+	function feed( $type ) {
+		require_once 'SpecialRecentchanges.php';
+		
+		global $wgFeedClasses;
+		if( !isset( $wgFeedClasses[$type] ) ) {
+			global $wgOut;
+			$wgOut->addWikiText( wfMsg( 'feed-invalid' ) );
+			return;
+		}
+		
+		$feed = new $wgFeedClasses[$type](
+			$this->mTitle->getPrefixedText() . ' - ' .
+				wfMsgForContent( 'history-feed-title' ),
+			wfMsgForContent( 'history-feed-description' ),
+			$this->mTitle->getFullUrl( 'action=history' ) );
+
+		$items = $this->fetchRevisions(10, 0, PageHistory::DIR_NEXT);
+		$feed->outHeader();
+		if( $items ) {
+			foreach( $items as $row ) {
+				$feed->outItem( $this->feedItem( $row ) );
+			}
+		} else {
+			$feed->outItem( $this->feedEmpty() );
+		}
+		$feed->outFooter();
+	}
+	
+	function feedEmpty() {
+		global $wgOut;
+		return new FeedItem(
+			wfMsgForContent( 'nohistory' ),
+			$wgOut->parse( wfMsgForContent( 'history-feed-empty' ) ),
+			$this->mTitle->getFullUrl(),
+			wfTimestamp( TS_MW ),
+			'',
+			$this->mTitle->getTalkPage()->getFullUrl() );
+	}
+	
+	/**
+	 * Generate a FeedItem object from a given revision table row
+	 * Borrows Recent Changes' feed generation functions for formatting;
+	 * includes a diff to the previous revision (if any).
+	 *
+	 * @param $row
+	 * @return FeedItem
+	 */
+	function feedItem( $row ) {
+		$rev = new Revision( $row );
+		$rev->setTitle( $this->mTitle );
+		$text = rcFormatDiffRow( $this->mTitle,
+			$this->mTitle->getPreviousRevisionID( $rev->getId() ),
+			$rev->getId(),
+			$rev->getTimestamp(),
+			$rev->getComment() );
+		
+		if( $rev->getComment() == '' ) {
+			global $wgContLang;
+			$title = wfMsgForContent( 'history-feed-item-nocomment',
+				$rev->getUserText(),
+				$wgContLang->timeanddate( $rev->getTimestamp() ) );
+		} else {
+			$title = $rev->getUserText() . ": " . $this->stripComment( $rev->getComment() );
+		}
+
+		return new FeedItem(
+			$title,
+			$text,
+			$this->mTitle->getFullUrl( 'diff=' . $rev->getId() . '&oldid=prev' ),
+			$rev->getTimestamp(),
+			$rev->getUserText(),
+			$this->mTitle->getTalkPage()->getFullUrl() );
+	}
+	
+	/**
+	 * Quickie hack... strip out wikilinks to more legible form from the comment.
+	 */
+	function stripComment( $text ) {
+		return preg_replace( '/\[\[([^]]*\|)?([^]]+)\]\]/', '\2', $text );
+	}
+}
+
+
+/**
+ * @addtogroup Pager
+ */
+class PageHistoryPager extends ReverseChronologicalPager {
+	public $mLastRow = false, $mPageHistory;
+	
+	function __construct( $pageHistory ) {
+		parent::__construct();
+		$this->mPageHistory = $pageHistory;
+	}
+
+	function getQueryInfo() {
+		return array(
+			'tables' => 'revision',
+			'fields' => Revision::selectFields(),
+			'conds' => array('rev_page' => $this->mPageHistory->mTitle->getArticleID() ),
+			'options' => array( 'USE INDEX' => 'page_timestamp' )
+		);
+	}
+
+	function getIndexField() {
+		return 'rev_timestamp';
+	}
+
+	function formatRow( $row ) {
+		if ( $this->mLastRow ) {
+			$latest = $this->mCounter == 1 && $this->mOffset == '';
+			$firstInList = $this->mCounter == 1;
+			$s = $this->mPageHistory->historyLine( $this->mLastRow, $row, $this->mCounter++, 
+				$this->mPageHistory->getNotificationTimestamp(), $latest, $firstInList );
+		} else {
+			$s = '';
+		}
+		$this->mLastRow = $row;
+		return $s;
+	}
+	
+	function getStartBody() {
+		$this->mLastRow = false;
+		$this->mCounter = 1;
+		return '';
+	}
+
+	function getEndBody() {
+		if ( $this->mLastRow ) {
+			$latest = $this->mCounter == 1 && $this->mOffset == 0;
+			$firstInList = $this->mCounter == 1;
+			if ( $this->mIsBackwards ) {
+				# Next row is unknown, but for UI reasons, probably exists if an offset has been specified
+				if ( $this->mOffset == '' ) {
+					$next = null;
+				} else {
+					$next = 'unknown';
+				}
+			} else {
+				# The next row is the past-the-end row
+				$next = $this->mPastTheEndRow;
+			}
+			$s = $this->mPageHistory->historyLine( $this->mLastRow, $next, $this->mCounter++, 
+				$this->mPageHistory->getNotificationTimestamp(), $latest, $firstInList );
+		} else {
+			$s = '';
+		}
+		return $s;
+	}
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/PageQueryPage.php
===================================================================
--- /MediaWiki/branches/1.11/includes/PageQueryPage.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/PageQueryPage.php	(revision 1280)
@@ -0,0 +1,26 @@
+<?php
+
+/**
+ * Variant of QueryPage which formats the result as a simple link to the page
+ *
+ * @package MediaWiki
+ * @addtogroup SpecialPage
+ */
+class PageQueryPage extends QueryPage {
+
+	/**
+	 * Format the result as a simple link to the page
+	 *
+	 * @param Skin $skin
+	 * @param object $row Result row
+	 * @return string
+	 */
+	public function formatResult( $skin, $row ) {
+		global $wgContLang;
+		$title = Title::makeTitleSafe( $row->namespace, $row->title );
+		return $skin->makeKnownLinkObj( $title,
+			htmlspecialchars( $wgContLang->convert( $title->getPrefixedText() ) ) );
+	}
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/Pager.php
===================================================================
--- /MediaWiki/branches/1.11/includes/Pager.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/Pager.php	(revision 1280)
@@ -0,0 +1,699 @@
+<?php
+
+/**
+ * Basic pager interface.
+ * @addtogroup Pager
+ */
+interface Pager {
+	function getNavigationBar();
+	function getBody();
+}
+
+/**
+ * IndexPager is an efficient pager which uses a (roughly unique) index in the 
+ * data set to implement paging, rather than a "LIMIT offset,limit" clause. 
+ * In MySQL, such a limit/offset clause requires counting through the specified number
+ * of offset rows to find the desired data, which can be expensive for large offsets.
+ * 
+ * ReverseChronologicalPager is a child class of the abstract IndexPager, and contains 
+ * some formatting and display code which is specific to the use of timestamps as 
+ * indexes. Here is a synopsis of its operation:
+ * 
+ *    * The query is specified by the offset, limit and direction (dir) parameters, in 
+ *      addition to any subclass-specific parameters. 
+ *
+ *    * The offset is the non-inclusive start of the DB query. A row with an index value 
+ *      equal to the offset will never be shown.
+ *
+ *    * The query may either be done backwards, where the rows are returned by the database
+ *      in the opposite order to which they are displayed to the user, or forwards. This is
+ *      specified by the "dir" parameter, dir=prev means backwards, anything else means 
+ *      forwards. The offset value specifies the start of the database result set, which 
+ *      may be either the start or end of the displayed data set. This allows "previous" 
+ *      links to be implemented without knowledge of the index value at the start of the 
+ *      previous page. 
+ *
+ *    * An additional row beyond the user-specified limit is always requested. This allows
+ *      us to tell whether we should display a "next" link in the case of forwards mode,
+ *      or a "previous" link in the case of backwards mode. Determining whether to 
+ *      display the other link (the one for the page before the start of the database
+ *      result set) can be done heuristically by examining the offset. 
+ *
+ *    * An empty offset indicates that the offset condition should be omitted from the query.
+ *      This naturally produces either the first page or the last page depending on the 
+ *      dir parameter. 
+ *
+ *  Subclassing the pager to implement concrete functionality should be fairly simple, 
+ *  please see the examples in PageHistory.php and SpecialIpblocklist.php. You just need 
+ *  to override formatRow(), getQueryInfo() and getIndexField(). Don't forget to call the 
+ *  parent constructor if you override it.
+ *
+ * @addtogroup Pager
+ */
+abstract class IndexPager implements Pager {
+	public $mRequest;
+	public $mLimitsShown = array( 20, 50, 100, 250, 500 );
+	public $mDefaultLimit = 50;
+	public $mOffset, $mLimit;
+	public $mQueryDone = false;
+	public $mDb;
+	public $mPastTheEndRow;
+
+	protected $mIndexField;
+
+	/**
+	 * Default query direction. false for ascending, true for descending
+	 */
+	public $mDefaultDirection = false;
+
+	/**
+	 * Result object for the query. Warning: seek before use.
+	 */
+	public $mResult;
+
+	function __construct() {
+		global $wgRequest, $wgUser;
+		$this->mRequest = $wgRequest;
+		
+		# NB: the offset is quoted, not validated. It is treated as an arbitrary string
+		# to support the widest variety of index types. Be careful outputting it into 
+		# HTML!
+		$this->mOffset = $this->mRequest->getText( 'offset' );
+		
+		# Use consistent behavior for the limit options
+		$this->mDefaultLimit = intval( $wgUser->getOption( 'rclimit' ) );
+		list( $this->mLimit, /* $offset */ ) = $this->mRequest->getLimitOffset();
+		
+		$this->mIsBackwards = ( $this->mRequest->getVal( 'dir' ) == 'prev' );
+		$this->mIndexField = $this->getIndexField();
+		$this->mDb = wfGetDB( DB_SLAVE );
+	}
+
+	/**
+	 * Do the query, using information from the object context. This function 
+	 * has been kept minimal to make it overridable if necessary, to allow for 
+	 * result sets formed from multiple DB queries.
+	 */
+	function doQuery() {
+		# Use the child class name for profiling
+		$fname = __METHOD__ . ' (' . get_class( $this ) . ')';
+		wfProfileIn( $fname );
+
+		$descending = ( $this->mIsBackwards == $this->mDefaultDirection );
+		# Plus an extra row so that we can tell the "next" link should be shown
+		$queryLimit = $this->mLimit + 1;
+
+		$this->mResult = $this->reallyDoQuery( $this->mOffset, $queryLimit, $descending );
+		$this->extractResultInfo( $this->mOffset, $queryLimit, $this->mResult );
+		$this->mQueryDone = true;
+
+		wfProfileOut( $fname );
+	}
+
+	/**
+	 * Extract some useful data from the result object for use by 
+	 * the navigation bar, put it into $this
+	 */
+	function extractResultInfo( $offset, $limit, ResultWrapper $res ) {
+		$numRows = $res->numRows();
+		if ( $numRows ) {
+			$row = $res->fetchRow();
+			$firstIndex = $row[$this->mIndexField];
+
+			# Discard the extra result row if there is one
+			if ( $numRows > $this->mLimit && $numRows > 1 ) {
+				$res->seek( $numRows - 1 );
+				$this->mPastTheEndRow = $res->fetchObject();
+				$indexField = $this->mIndexField;
+				$this->mPastTheEndIndex = $this->mPastTheEndRow->$indexField;
+				$res->seek( $numRows - 2 );
+				$row = $res->fetchRow();
+				$lastIndex = $row[$this->mIndexField];
+			} else {
+				$this->mPastTheEndRow = null;
+				# Setting indexes to an empty string means that they will be omitted
+				# if they would otherwise appear in URLs. It just so happens that this 
+				# is the right thing to do in the standard UI, in all the relevant cases.
+				$this->mPastTheEndIndex = '';
+				$res->seek( $numRows - 1 );
+				$row = $res->fetchRow();
+				$lastIndex = $row[$this->mIndexField];
+			}
+		} else {
+			$firstIndex = '';
+			$lastIndex = '';
+			$this->mPastTheEndRow = null;
+			$this->mPastTheEndIndex = '';
+		}
+
+		if ( $this->mIsBackwards ) {
+			$this->mIsFirst = ( $numRows < $limit );
+			$this->mIsLast = ( $offset == '' );
+			$this->mLastShown = $firstIndex;
+			$this->mFirstShown = $lastIndex;
+		} else {
+			$this->mIsFirst = ( $offset == '' );
+			$this->mIsLast = ( $numRows < $limit );
+			$this->mLastShown = $lastIndex;
+			$this->mFirstShown = $firstIndex;
+		}
+	}
+
+	/**
+	 * Do a query with specified parameters, rather than using the object context
+	 *
+	 * @param string $offset Index offset, inclusive
+	 * @param integer $limit Exact query limit
+	 * @param boolean $descending Query direction, false for ascending, true for descending
+	 * @return ResultWrapper
+	 */
+	function reallyDoQuery( $offset, $limit, $ascending ) {
+		$fname = __METHOD__ . ' (' . get_class( $this ) . ')';
+		$info = $this->getQueryInfo();
+		$tables = $info['tables'];
+		$fields = $info['fields'];
+		$conds = isset( $info['conds'] ) ? $info['conds'] : array();
+		$options = isset( $info['options'] ) ? $info['options'] : array();
+		if ( $ascending ) {
+			$options['ORDER BY'] = $this->mIndexField;
+			$operator = '>';
+		} else {
+			$options['ORDER BY'] = $this->mIndexField . ' DESC';
+			$operator = '<';
+		}
+		if ( $offset != '' ) {
+			$conds[] = $this->mIndexField . $operator . $this->mDb->addQuotes( $offset );
+		}
+		$options['LIMIT'] = intval( $limit );
+		$res = $this->mDb->select( $tables, $fields, $conds, $fname, $options );
+		return new ResultWrapper( $this->mDb, $res );
+	}
+
+	/**
+	 * Get the formatted result list. Calls getStartBody(), formatRow() and 
+	 * getEndBody(), concatenates the results and returns them.
+	 */
+	function getBody() {
+		if ( !$this->mQueryDone ) {
+			$this->doQuery();
+		}
+		# Don't use any extra rows returned by the query
+		$numRows = min( $this->mResult->numRows(), $this->mLimit );
+
+		$s = $this->getStartBody();
+		if ( $numRows ) {
+			if ( $this->mIsBackwards ) {
+				for ( $i = $numRows - 1; $i >= 0; $i-- ) {
+					$this->mResult->seek( $i );
+					$row = $this->mResult->fetchObject();
+					$s .= $this->formatRow( $row );
+				}
+			} else {
+				$this->mResult->seek( 0 );
+				for ( $i = 0; $i < $numRows; $i++ ) {
+					$row = $this->mResult->fetchObject();
+					$s .= $this->formatRow( $row );
+				}
+			}
+		} else {
+			$s .= $this->getEmptyBody();
+		}
+		$s .= $this->getEndBody();
+		return $s;
+	}
+
+	/**
+	 * Make a self-link
+	 */
+	function makeLink($text, $query = NULL) {
+		if ( $query === null ) {
+			return $text;
+		} else {
+			return $this->getSkin()->makeKnownLinkObj( $this->getTitle(), $text,
+				wfArrayToCGI( $query, $this->getDefaultQuery() ) );
+		}
+	}
+
+	/**
+	 * Hook into getBody(), allows text to be inserted at the start. This 
+	 * will be called even if there are no rows in the result set.
+	 */
+	function getStartBody() {
+		return '';
+	}
+
+	/**
+	 * Hook into getBody() for the end of the list
+	 */
+	function getEndBody() {
+		return '';
+	}
+
+	/**
+	 * Hook into getBody(), for the bit between the start and the 
+	 * end when there are no rows
+	 */
+	function getEmptyBody() {
+		return '';
+	}
+	
+	/**
+	 * Title used for self-links. Override this if you want to be able to 
+	 * use a title other than $wgTitle
+	 */
+	function getTitle() {
+		return $GLOBALS['wgTitle'];
+	}
+
+	/**
+	 * Get the current skin. This can be overridden if necessary.
+	 */
+	function getSkin() {
+		if ( !isset( $this->mSkin ) ) {
+			global $wgUser;
+			$this->mSkin = $wgUser->getSkin();
+		}
+		return $this->mSkin;
+	}
+
+	/**
+	 * Get an array of query parameters that should be put into self-links. 
+	 * By default, all parameters passed in the URL are used, except for a 
+	 * short blacklist.
+	 */
+	function getDefaultQuery() {
+		if ( !isset( $this->mDefaultQuery ) ) {
+			$this->mDefaultQuery = $_GET;
+			unset( $this->mDefaultQuery['title'] );
+			unset( $this->mDefaultQuery['dir'] );
+			unset( $this->mDefaultQuery['offset'] );
+			unset( $this->mDefaultQuery['limit'] );
+		}
+		return $this->mDefaultQuery;
+	}
+
+	/**
+	 * Get the number of rows in the result set
+	 */
+	function getNumRows() {
+		if ( !$this->mQueryDone ) {
+			$this->doQuery();
+		}
+		return $this->mResult->numRows();
+	}
+
+	/**
+	 * Get a query array for the prev, next, first and last links.
+	 */
+	function getPagingQueries() {
+		if ( !$this->mQueryDone ) {
+			$this->doQuery();
+		}
+		
+		# Don't announce the limit everywhere if it's the default
+		$urlLimit = $this->mLimit == $this->mDefaultLimit ? '' : $this->mLimit;
+		
+		if ( $this->mIsFirst ) {
+			$prev = false;
+			$first = false;
+		} else {
+			$prev = array( 'dir' => 'prev', 'offset' => $this->mFirstShown, 'limit' => $urlLimit );
+			$first = array( 'limit' => $urlLimit );
+		}
+		if ( $this->mIsLast ) {
+			$next = false;
+			$last = false;
+		} else {
+			$next = array( 'offset' => $this->mLastShown, 'limit' => $urlLimit );
+			$last = array( 'dir' => 'prev', 'limit' => $urlLimit );
+		}
+		return array( 'prev' => $prev, 'next' => $next, 'first' => $first, 'last' => $last );
+	}
+
+	/**
+	 * Get paging links. If a link is disabled, the item from $disabledTexts will 
+	 * be used. If there is no such item, the unlinked text from $linkTexts will 
+	 * be used. Both $linkTexts and $disabledTexts are arrays of HTML.
+	 */
+	function getPagingLinks( $linkTexts, $disabledTexts = array() ) {
+		$queries = $this->getPagingQueries();
+		$links = array();
+		foreach ( $queries as $type => $query ) {
+			if ( $query !== false ) {
+				$links[$type] = $this->makeLink( $linkTexts[$type], $queries[$type] );
+			} elseif ( isset( $disabledTexts[$type] ) ) {
+				$links[$type] = $disabledTexts[$type];
+			} else {
+				$links[$type] = $linkTexts[$type];
+			}
+		}
+		return $links;
+	}
+
+	function getLimitLinks() {
+		global $wgLang;
+		$links = array();
+		if ( $this->mIsBackwards ) {
+			$offset = $this->mPastTheEndIndex;
+		} else {
+			$offset = $this->mOffset;
+		}
+		foreach ( $this->mLimitsShown as $limit ) {
+			$links[] = $this->makeLink( $wgLang->formatNum( $limit ),
+				array( 'offset' => $offset, 'limit' => $limit ) );
+		}
+		return $links;
+	}
+
+	/**
+	 * Abstract formatting function. This should return an HTML string 
+	 * representing the result row $row. Rows will be concatenated and
+	 * returned by getBody()
+	 */
+	abstract function formatRow( $row );
+
+	/**
+	 * This function should be overridden to provide all parameters 
+	 * needed for the main paged query. It returns an associative 
+	 * array with the following elements:
+	 *    tables => Table(s) for passing to Database::select()
+	 *    fields => Field(s) for passing to Database::select(), may be *
+	 *    conds => WHERE conditions
+	 *    options => option array
+	 */
+	abstract function getQueryInfo();
+
+	/**
+	 * This function should be overridden to return the name of the 
+	 * index field.
+	 */
+	abstract function getIndexField();
+}
+
+
+/**
+ * IndexPager with an alphabetic list and a formatted navigation bar
+ * @addtogroup Pager
+ */
+abstract class AlphabeticPager extends IndexPager {
+	public $mDefaultDirection = false;
+	
+	function __construct() {
+		parent::__construct();
+	}
+	
+	/** 
+	 * Shamelessly stolen bits from ReverseChronologicalPager, d
+	 * didn't want to do class magic as may be still revamped 
+	 */
+	function getNavigationBar() {
+		global $wgLang;
+		
+		$linkTexts = array(
+			'prev' => wfMsgHtml( "prevn", $this->mLimit ),
+			'next' => wfMsgHtml( 'nextn', $this->mLimit ),
+			'first' => wfMsgHtml('page_first'), /* Introduced the message */
+			'last' => wfMsgHtml( 'page_last' )  /* Introduced the message */
+		);
+		
+		$pagingLinks = $this->getPagingLinks( $linkTexts );
+		$limitLinks = $this->getLimitLinks();
+		$limits = implode( ' | ', $limitLinks );
+		
+		$this->mNavigationBar = "({$pagingLinks['first']} | {$pagingLinks['last']}) " . wfMsgHtml("viewprevnext", $pagingLinks['prev'], $pagingLinks['next'], $limits);
+		return $this->mNavigationBar;
+		
+	}
+}
+
+/**
+ * IndexPager with a formatted navigation bar
+ * @addtogroup Pager
+ */
+abstract class ReverseChronologicalPager extends IndexPager {
+	public $mDefaultDirection = true;
+
+	function __construct() {
+		parent::__construct();
+	}
+
+	function getNavigationBar() {
+		global $wgLang;
+
+		if ( isset( $this->mNavigationBar ) ) {
+			return $this->mNavigationBar;
+		}
+		$linkTexts = array(
+			'prev' => wfMsgHtml( "prevn", $this->mLimit ),
+			'next' => wfMsgHtml( 'nextn', $this->mLimit ),
+			'first' => wfMsgHtml('histlast'),
+			'last' => wfMsgHtml( 'histfirst' )
+		);
+
+		$pagingLinks = $this->getPagingLinks( $linkTexts );
+		$limitLinks = $this->getLimitLinks();
+		$limits = implode( ' | ', $limitLinks );
+		
+		$this->mNavigationBar = "({$pagingLinks['first']} | {$pagingLinks['last']}) " . 
+			wfMsgHtml("viewprevnext", $pagingLinks['prev'], $pagingLinks['next'], $limits);
+		return $this->mNavigationBar;
+	}
+}
+
+/**
+ * Table-based display with a user-selectable sort order
+ * @addtogroup Pager
+ */
+abstract class TablePager extends IndexPager {
+	var $mSort;
+	var $mCurrentRow;
+
+	function __construct() {
+		global $wgRequest;
+		$this->mSort = $wgRequest->getText( 'sort' );
+		if ( !array_key_exists( $this->mSort, $this->getFieldNames() ) ) {
+			$this->mSort = $this->getDefaultSort();
+		}
+		if ( $wgRequest->getBool( 'asc' ) ) {
+			$this->mDefaultDirection = false;
+		} elseif ( $wgRequest->getBool( 'desc' ) ) {
+			$this->mDefaultDirection = true;
+		} /* Else leave it at whatever the class default is */
+
+		parent::__construct();
+	}
+
+	function getStartBody() {
+		global $wgStylePath;
+		$tableClass = htmlspecialchars( $this->getTableClass() );
+		$sortClass = htmlspecialchars( $this->getSortHeaderClass() );
+		
+		$s = "<table border='1' class=\"$tableClass\"><thead><tr>\n";
+		$fields = $this->getFieldNames();
+
+		# Make table header
+		foreach ( $fields as $field => $name ) {
+			if ( strval( $name ) == '' ) {
+				$s .= "<th>&nbsp;</th>\n";
+			} elseif ( $this->isFieldSortable( $field ) ) {
+				$query = array( 'sort' => $field, 'limit' => $this->mLimit );
+				if ( $field == $this->mSort ) {
+					# This is the sorted column
+					# Prepare a link that goes in the other sort order
+					if ( $this->mDefaultDirection ) {
+						# Descending
+						$image = 'Arr_u.png';
+						$query['asc'] = '1';
+						$query['desc'] = '';
+						$alt = htmlspecialchars( wfMsg( 'descending_abbrev' ) );
+					} else {
+						# Ascending
+						$image = 'Arr_d.png';
+						$query['asc'] = '';
+						$query['desc'] = '1';
+						$alt = htmlspecialchars( wfMsg( 'ascending_abbrev' ) );
+					}
+					$image = htmlspecialchars( "$wgStylePath/common/images/$image" );
+					$link = $this->makeLink( 
+						"<img width=\"12\" height=\"12\" alt=\"$alt\" src=\"$image\" />" .
+						htmlspecialchars( $name ), $query );
+					$s .= "<th class=\"$sortClass\">$link</th>\n";
+				} else {
+					$s .= '<th>' . $this->makeLink( htmlspecialchars( $name ), $query ) . "</th>\n";
+				}
+			} else {
+				$s .= '<th>' . htmlspecialchars( $name ) . "</th>\n";
+			}
+		}
+		$s .= "</tr></thead><tbody>\n";
+		return $s;	
+	}
+
+	function getEndBody() {
+		return "</tbody></table>\n";
+	}
+
+	function getEmptyBody() {
+		$colspan = count( $this->getFieldNames() );
+		$msgEmpty = wfMsgHtml( 'table_pager_empty' );
+		return "<tr><td colspan=\"$colspan\">$msgEmpty</td></tr>\n";
+	}
+
+	function formatRow( $row ) {
+		$s = "<tr>\n";
+		$fieldNames = $this->getFieldNames();
+		$this->mCurrentRow = $row;  # In case formatValue needs to know
+		foreach ( $fieldNames as $field => $name ) {
+			$value = isset( $row->$field ) ? $row->$field : null;
+			$formatted = strval( $this->formatValue( $field, $value ) );
+			if ( $formatted == '' ) {
+				$formatted = '&nbsp;';
+			}
+			$class = 'TablePager_col_' . htmlspecialchars( $field );
+			$s .= "<td class=\"$class\">$formatted</td>\n";
+		}
+		$s .= "</tr>\n";
+		return $s;
+	}
+
+	function getIndexField() {
+		return $this->mSort;
+	}
+
+	function getTableClass() {
+		return 'TablePager';
+	}
+
+	function getNavClass() {
+		return 'TablePager_nav';
+	}
+
+	function getSortHeaderClass() {
+		return 'TablePager_sort';
+	}
+
+	/**
+	 * A navigation bar with images
+	 */
+	function getNavigationBar() {
+		global $wgStylePath, $wgContLang;
+		$path = "$wgStylePath/common/images";
+		$labels = array(
+			'first' => 'table_pager_first',
+			'prev' => 'table_pager_prev',
+			'next' => 'table_pager_next',
+			'last' => 'table_pager_last',
+		);
+		$images = array(
+			'first' => $wgContLang->isRTL() ? 'arrow_last_25.png' : 'arrow_first_25.png',
+			'prev' =>  $wgContLang->isRTL() ? 'arrow_right_25.png' : 'arrow_left_25.png',
+			'next' =>  $wgContLang->isRTL() ? 'arrow_left_25.png' : 'arrow_right_25.png',
+			'last' =>  $wgContLang->isRTL() ? 'arrow_first_25.png' : 'arrow_last_25.png',
+		);
+		$disabledImages = array(
+			'first' => $wgContLang->isRTL() ? 'arrow_disabled_last_25.png' : 'arrow_disabled_first_25.png',
+			'prev' =>  $wgContLang->isRTL() ? 'arrow_disabled_right_25.png' : 'arrow_disabled_left_25.png',
+			'next' =>  $wgContLang->isRTL() ? 'arrow_disabled_left_25.png' : 'arrow_disabled_right_25.png',
+			'last' =>  $wgContLang->isRTL() ? 'arrow_disabled_first_25.png' : 'arrow_disabled_last_25.png',
+		);
+
+		$linkTexts = array();
+		$disabledTexts = array();
+		foreach ( $labels as $type => $label ) {
+			$msgLabel = wfMsgHtml( $label );
+			$linkTexts[$type] = "<img src=\"$path/{$images[$type]}\" alt=\"$msgLabel\"/><br/>$msgLabel";
+			$disabledTexts[$type] = "<img src=\"$path/{$disabledImages[$type]}\" alt=\"$msgLabel\"/><br/>$msgLabel";
+		}
+		$links = $this->getPagingLinks( $linkTexts, $disabledTexts );
+
+		$navClass = htmlspecialchars( $this->getNavClass() );
+		$s = "<table class=\"$navClass\" align=\"center\" cellpadding=\"3\"><tr>\n";
+		$cellAttrs = 'valign="top" align="center" width="' . 100 / count( $links ) . '%"';
+		foreach ( $labels as $type => $label ) {
+			$s .= "<td $cellAttrs>{$links[$type]}</td>\n";
+		}
+		$s .= "</tr></table>\n";
+		return $s;
+	}
+
+	/**
+	 * Get a <select> element which has options for each of the allowed limits
+	 */
+	function getLimitSelect() {
+		global $wgLang;
+		$s = "<select name=\"limit\">";
+		foreach ( $this->mLimitsShown as $limit ) {
+			$selected = $limit == $this->mLimit ? 'selected="selected"' : '';
+			$formattedLimit = $wgLang->formatNum( $limit );
+			$s .= "<option value=\"$limit\" $selected>$formattedLimit</option>\n";
+		}
+		$s .= "</select>";
+		return $s;
+	}
+
+	/**
+	 * Get <input type="hidden"> elements for use in a method="get" form. 
+	 * Resubmits all defined elements of the $_GET array, except for a 
+	 * blacklist, passed in the $blacklist parameter.
+	 */
+	function getHiddenFields( $blacklist = array() ) {
+		$blacklist = (array)$blacklist;
+		$query = $_GET;
+		foreach ( $blacklist as $name ) {
+			unset( $query[$name] );
+		}
+		$s = '';
+		foreach ( $query as $name => $value ) {
+			$encName = htmlspecialchars( $name );
+			$encValue = htmlspecialchars( $value );
+			$s .= "<input type=\"hidden\" name=\"$encName\" value=\"$encValue\"/>\n";
+		}
+		return $s;
+	}
+
+	/**
+	 * Get a form containing a limit selection dropdown
+	 */
+	function getLimitForm() {
+		# Make the select with some explanatory text
+		$url = $this->getTitle()->escapeLocalURL();
+		$msgSubmit = wfMsgHtml( 'table_pager_limit_submit' );
+		return
+			"<form method=\"get\" action=\"$url\">" . 
+			wfMsgHtml( 'table_pager_limit', $this->getLimitSelect() ) . 
+			"\n<input type=\"submit\" value=\"$msgSubmit\"/>\n" .
+			$this->getHiddenFields( 'limit' ) . 
+			"</form>\n";
+	}
+
+	/**
+	 * Return true if the named field should be sortable by the UI, false otherwise
+	 * @param string $field
+	 */
+	abstract function isFieldSortable( $field );
+
+	/**
+	 * Format a table cell. The return value should be HTML, but use an empty string
+	 * not &nbsp; for empty cells. Do not include the <td> and </td>. 
+	 *
+	 * @param string $name The database field name
+	 * @param string $value The value retrieved from the database
+	 *
+	 * The current result row is available as $this->mCurrentRow, in case you need 
+	 * more context.
+	 */
+	abstract function formatValue( $name, $value );
+
+	/**
+	 * The database field name used as a default sort order
+	 */
+	abstract function getDefaultSort();
+
+	/**
+	 * An array mapping database field names to a textual description of the field 
+	 * name, for use in the table header. The description should be plain text, it 
+	 * will be HTML-escaped later.
+	 */
+	abstract function getFieldNames();
+}
+?>
Index: /MediaWiki/branches/1.11/includes/Parser.php
===================================================================
--- /MediaWiki/branches/1.11/includes/Parser.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/Parser.php	(revision 1280)
@@ -0,0 +1,4774 @@
+<?php
+/**
+ * File for Parser and related classes
+ *
+ * @addtogroup Parser
+ */
+
+/**
+ * Update this version number when the ParserOutput format
+ * changes in an incompatible way, so the parser cache
+ * can automatically discard old data.
+ */
+define( 'MW_PARSER_VERSION', '1.6.1' );
+
+define( 'RLH_FOR_UPDATE', 1 );
+
+# Allowed values for $mOutputType
+define( 'OT_HTML', 1 );
+define( 'OT_WIKI', 2 );
+define( 'OT_MSG' , 3 );
+define( 'OT_PREPROCESS', 4 );
+
+# Flags for setFunctionHook
+define( 'SFH_NO_HASH', 1 );
+
+# string parameter for extractTags which will cause it
+# to strip HTML comments in addition to regular
+# <XML>-style tags. This should not be anything we
+# may want to use in wikisyntax
+define( 'STRIP_COMMENTS', 'HTMLCommentStrip' );
+
+# Constants needed for external link processing
+define( 'HTTP_PROTOCOLS', 'http:\/\/|https:\/\/' );
+# Everything except bracket, space, or control characters
+define( 'EXT_LINK_URL_CLASS', '[^][<>"\\x00-\\x20\\x7F]' );
+# Including space, but excluding newlines
+define( 'EXT_LINK_TEXT_CLASS', '[^\]\\x0a\\x0d]' );
+define( 'EXT_IMAGE_FNAME_CLASS', '[A-Za-z0-9_.,~%\\-+&;#*?!=()@\\x80-\\xFF]' );
+define( 'EXT_IMAGE_EXTENSIONS', 'gif|png|jpg|jpeg' );
+define( 'EXT_LINK_BRACKETED',  '/\[(\b(' . wfUrlProtocols() . ')'.
+	EXT_LINK_URL_CLASS.'+) *('.EXT_LINK_TEXT_CLASS.'*?)\]/S' );
+define( 'EXT_IMAGE_REGEX',
+	'/^('.HTTP_PROTOCOLS.')'.  # Protocol
+	'('.EXT_LINK_URL_CLASS.'+)\\/'.  # Hostname and path
+	'('.EXT_IMAGE_FNAME_CLASS.'+)\\.((?i)'.EXT_IMAGE_EXTENSIONS.')$/S' # Filename
+);
+
+// State constants for the definition list colon extraction
+define( 'MW_COLON_STATE_TEXT', 0 );
+define( 'MW_COLON_STATE_TAG', 1 );
+define( 'MW_COLON_STATE_TAGSTART', 2 );
+define( 'MW_COLON_STATE_CLOSETAG', 3 );
+define( 'MW_COLON_STATE_TAGSLASH', 4 );
+define( 'MW_COLON_STATE_COMMENT', 5 );
+define( 'MW_COLON_STATE_COMMENTDASH', 6 );
+define( 'MW_COLON_STATE_COMMENTDASHDASH', 7 );
+
+/**
+ * PHP Parser - Processes wiki markup (which uses a more user-friendly 
+ * syntax, such as "[[link]]" for making links), and provides a one-way
+ * transformation of that wiki markup it into XHTML output / markup
+ * (which in turn the browser understands, and can display).
+ *
+ * <pre>
+ * There are four main entry points into the Parser class:
+ * parse()
+ *   produces HTML output
+ * preSaveTransform().
+ *   produces altered wiki markup.
+ * transformMsg()
+ *   performs brace substitution on MediaWiki messages
+ * preprocess()
+ *   removes HTML comments and expands templates
+ *
+ * Globals used:
+ *    objects:   $wgLang, $wgContLang
+ *
+ * NOT $wgArticle, $wgUser or $wgTitle. Keep them away!
+ *
+ * settings:
+ *  $wgUseTex*, $wgUseDynamicDates*, $wgInterwikiMagic*,
+ *  $wgNamespacesWithSubpages, $wgAllowExternalImages*,
+ *  $wgLocaltimezone, $wgAllowSpecialInclusion*,
+ *  $wgMaxArticleSize*
+ *
+ *  * only within ParserOptions
+ * </pre>
+ *
+ * @addtogroup Parser
+ */
+class Parser
+{
+	const VERSION = MW_PARSER_VERSION;
+	/**#@+
+	 * @private
+	 */
+	# Persistent:
+	var $mTagHooks, $mFunctionHooks, $mFunctionSynonyms, $mVariables;
+
+	# Cleared with clearState():
+	var $mOutput, $mAutonumber, $mDTopen, $mStripState;
+	var $mIncludeCount, $mArgStack, $mLastSection, $mInPre;
+	var $mInterwikiLinkHolders, $mLinkHolders, $mUniqPrefix;
+	var $mIncludeSizes, $mDefaultSort;
+	var $mTemplates,	// cache of already loaded templates, avoids
+		                // multiple SQL queries for the same string
+	    $mTemplatePath;	// stores an unsorted hash of all the templates already loaded
+		                // in this path. Used for loop detection.
+
+	# Temporary
+	# These are variables reset at least once per parse regardless of $clearState
+	var $mOptions,      // ParserOptions object
+		$mTitle,        // Title context, used for self-link rendering and similar things
+		$mOutputType,   // Output type, one of the OT_xxx constants
+		$ot,            // Shortcut alias, see setOutputType()
+		$mRevisionId,   // ID to display in {{REVISIONID}} tags
+		$mRevisionTimestamp, // The timestamp of the specified revision ID
+		$mRevIdForTs;   // The revision ID which was used to fetch the timestamp
+
+	/**#@-*/
+
+	/**
+	 * Constructor
+	 *
+	 * @public
+	 */
+	function Parser() {
+		$this->mTagHooks = array();
+		$this->mFunctionHooks = array();
+		$this->mFunctionSynonyms = array( 0 => array(), 1 => array() );
+		$this->mFirstCall = true;
+	}
+
+	/**
+	 * Do various kinds of initialisation on the first call of the parser
+	 */
+	function firstCallInit() {
+		if ( !$this->mFirstCall ) {
+			return;
+		}
+
+		wfProfileIn( __METHOD__ );
+		global $wgAllowDisplayTitle, $wgAllowSlowParserFunctions;
+
+		$this->setHook( 'pre', array( $this, 'renderPreTag' ) );
+
+		$this->setFunctionHook( 'int', array( 'CoreParserFunctions', 'intFunction' ), SFH_NO_HASH );
+		$this->setFunctionHook( 'ns', array( 'CoreParserFunctions', 'ns' ), SFH_NO_HASH );
+		$this->setFunctionHook( 'urlencode', array( 'CoreParserFunctions', 'urlencode' ), SFH_NO_HASH );
+		$this->setFunctionHook( 'lcfirst', array( 'CoreParserFunctions', 'lcfirst' ), SFH_NO_HASH );
+		$this->setFunctionHook( 'ucfirst', array( 'CoreParserFunctions', 'ucfirst' ), SFH_NO_HASH );
+		$this->setFunctionHook( 'lc', array( 'CoreParserFunctions', 'lc' ), SFH_NO_HASH );
+		$this->setFunctionHook( 'uc', array( 'CoreParserFunctions', 'uc' ), SFH_NO_HASH );
+		$this->setFunctionHook( 'localurl', array( 'CoreParserFunctions', 'localurl' ), SFH_NO_HASH );
+		$this->setFunctionHook( 'localurle', array( 'CoreParserFunctions', 'localurle' ), SFH_NO_HASH );
+		$this->setFunctionHook( 'fullurl', array( 'CoreParserFunctions', 'fullurl' ), SFH_NO_HASH );
+		$this->setFunctionHook( 'fullurle', array( 'CoreParserFunctions', 'fullurle' ), SFH_NO_HASH );
+		$this->setFunctionHook( 'formatnum', array( 'CoreParserFunctions', 'formatnum' ), SFH_NO_HASH );
+		$this->setFunctionHook( 'grammar', array( 'CoreParserFunctions', 'grammar' ), SFH_NO_HASH );
+		$this->setFunctionHook( 'plural', array( 'CoreParserFunctions', 'plural' ), SFH_NO_HASH );
+		$this->setFunctionHook( 'numberofpages', array( 'CoreParserFunctions', 'numberofpages' ), SFH_NO_HASH );
+		$this->setFunctionHook( 'numberofusers', array( 'CoreParserFunctions', 'numberofusers' ), SFH_NO_HASH );
+		$this->setFunctionHook( 'numberofarticles', array( 'CoreParserFunctions', 'numberofarticles' ), SFH_NO_HASH );
+		$this->setFunctionHook( 'numberoffiles', array( 'CoreParserFunctions', 'numberoffiles' ), SFH_NO_HASH );
+		$this->setFunctionHook( 'numberofadmins', array( 'CoreParserFunctions', 'numberofadmins' ), SFH_NO_HASH );
+		$this->setFunctionHook( 'numberofedits', array( 'CoreParserFunctions', 'numberofedits' ), SFH_NO_HASH );
+		$this->setFunctionHook( 'language', array( 'CoreParserFunctions', 'language' ), SFH_NO_HASH );
+		$this->setFunctionHook( 'padleft', array( 'CoreParserFunctions', 'padleft' ), SFH_NO_HASH );
+		$this->setFunctionHook( 'padright', array( 'CoreParserFunctions', 'padright' ), SFH_NO_HASH );
+		$this->setFunctionHook( 'anchorencode', array( 'CoreParserFunctions', 'anchorencode' ), SFH_NO_HASH );
+		$this->setFunctionHook( 'special', array( 'CoreParserFunctions', 'special' ) );
+		$this->setFunctionHook( 'defaultsort', array( 'CoreParserFunctions', 'defaultsort' ), SFH_NO_HASH );
+
+		if ( $wgAllowDisplayTitle ) {
+			$this->setFunctionHook( 'displaytitle', array( 'CoreParserFunctions', 'displaytitle' ), SFH_NO_HASH );
+		}
+		if ( $wgAllowSlowParserFunctions ) {
+			$this->setFunctionHook( 'pagesinnamespace', array( 'CoreParserFunctions', 'pagesinnamespace' ), SFH_NO_HASH );
+		}
+
+		$this->initialiseVariables();
+		$this->mFirstCall = false;
+		wfProfileOut( __METHOD__ );
+	}
+
+	/**
+	 * Clear Parser state
+	 *
+	 * @private
+	 */
+	function clearState() {
+		wfProfileIn( __METHOD__ );
+		if ( $this->mFirstCall ) {
+			$this->firstCallInit();
+		}
+		$this->mOutput = new ParserOutput;
+		$this->mAutonumber = 0;
+		$this->mLastSection = '';
+		$this->mDTopen = false;
+		$this->mIncludeCount = array();
+		$this->mStripState = new StripState;
+		$this->mArgStack = array();
+		$this->mInPre = false;
+		$this->mInterwikiLinkHolders = array(
+			'texts' => array(),
+			'titles' => array()
+		);
+		$this->mLinkHolders = array(
+			'namespaces' => array(),
+			'dbkeys' => array(),
+			'queries' => array(),
+			'texts' => array(),
+			'titles' => array()
+		);
+		$this->mRevisionTimestamp = $this->mRevisionId = null;
+
+		/**
+		 * Prefix for temporary replacement strings for the multipass parser.
+		 * \x07 should never appear in input as it's disallowed in XML.
+		 * Using it at the front also gives us a little extra robustness
+		 * since it shouldn't match when butted up against identifier-like
+		 * string constructs.
+		 */
+		$this->mUniqPrefix = "\x07UNIQ" . Parser::getRandomString();
+
+		# Clear these on every parse, bug 4549
+ 		$this->mTemplates = array();
+ 		$this->mTemplatePath = array();
+
+		$this->mShowToc = true;
+		$this->mForceTocPosition = false;
+		$this->mIncludeSizes = array(
+			'pre-expand' => 0,
+			'post-expand' => 0,
+			'arg' => 0
+		);
+		$this->mDefaultSort = false;
+
+		wfRunHooks( 'ParserClearState', array( &$this ) );
+		wfProfileOut( __METHOD__ );
+	}
+
+	function setOutputType( $ot ) {
+		$this->mOutputType = $ot;
+		// Shortcut alias
+		$this->ot = array(
+			'html' => $ot == OT_HTML,
+			'wiki' => $ot == OT_WIKI,
+			'msg' => $ot == OT_MSG,
+			'pre' => $ot == OT_PREPROCESS,
+		);
+	}
+
+	/**
+	 * Accessor for mUniqPrefix.
+	 *
+	 * @public
+	 */
+	function uniqPrefix() {
+		return $this->mUniqPrefix;
+	}
+
+	/**
+	 * Convert wikitext to HTML
+	 * Do not call this function recursively.
+	 *
+	 * @param string $text Text we want to parse
+	 * @param Title &$title A title object
+	 * @param array $options
+	 * @param boolean $linestart
+	 * @param boolean $clearState
+	 * @param int $revid number to pass in {{REVISIONID}}
+	 * @return ParserOutput a ParserOutput
+	 */
+	public function parse( $text, &$title, $options, $linestart = true, $clearState = true, $revid = null ) {
+		/**
+		 * First pass--just handle <nowiki> sections, pass the rest off
+		 * to internalParse() which does all the real work.
+		 */
+
+		global $wgUseTidy, $wgAlwaysUseTidy, $wgContLang;
+		$fname = 'Parser::parse-' . wfGetCaller();
+		wfProfileIn( __METHOD__ );
+		wfProfileIn( $fname );
+
+		if ( $clearState ) {
+			$this->clearState();
+		}
+
+		$this->mOptions = $options;
+		$this->mTitle =& $title;
+		$oldRevisionId = $this->mRevisionId;
+		$oldRevisionTimestamp = $this->mRevisionTimestamp;
+		if( $revid !== null ) {
+			$this->mRevisionId = $revid;
+			$this->mRevisionTimestamp = null;
+		}
+		$this->setOutputType( OT_HTML );
+		wfRunHooks( 'ParserBeforeStrip', array( &$this, &$text, &$this->mStripState ) );
+		$text = $this->strip( $text, $this->mStripState );
+		wfRunHooks( 'ParserAfterStrip', array( &$this, &$text, &$this->mStripState ) );
+		$text = $this->internalParse( $text );
+		$text = $this->mStripState->unstripGeneral( $text );
+
+		# Clean up special characters, only run once, next-to-last before doBlockLevels
+		$fixtags = array(
+			# french spaces, last one Guillemet-left
+			# only if there is something before the space
+			'/(.) (?=\\?|:|;|!|\\302\\273)/' => '\\1&nbsp;\\2',
+			# french spaces, Guillemet-right
+			'/(\\302\\253) /' => '\\1&nbsp;',
+		);
+		$text = preg_replace( array_keys($fixtags), array_values($fixtags), $text );
+
+		# only once and last
+		$text = $this->doBlockLevels( $text, $linestart );
+
+		$this->replaceLinkHolders( $text );
+
+		# the position of the parserConvert() call should not be changed. it
+		# assumes that the links are all replaced and the only thing left
+		# is the <nowiki> mark.
+		# Side-effects: this calls $this->mOutput->setTitleText()
+		$text = $wgContLang->parserConvert( $text, $this );
+
+		$text = $this->mStripState->unstripNoWiki( $text );
+
+		wfRunHooks( 'ParserBeforeTidy', array( &$this, &$text ) );
+
+		$text = Sanitizer::normalizeCharReferences( $text );
+
+		if (($wgUseTidy and $this->mOptions->mTidy) or $wgAlwaysUseTidy) {
+			$text = Parser::tidy($text);
+		} else {
+			# attempt to sanitize at least some nesting problems
+			# (bug #2702 and quite a few others)
+			$tidyregs = array(
+				# ''Something [http://www.cool.com cool''] -->
+				# <i>Something</i><a href="http://www.cool.com"..><i>cool></i></a>
+				'/(<([bi])>)(<([bi])>)?([^<]*)(<\/?a[^<]*>)([^<]*)(<\/\\4>)?(<\/\\2>)/' =>
+				'\\1\\3\\5\\8\\9\\6\\1\\3\\7\\8\\9',
+				# fix up an anchor inside another anchor, only
+				# at least for a single single nested link (bug 3695)
+				'/(<a[^>]+>)([^<]*)(<a[^>]+>[^<]*)<\/a>(.*)<\/a>/' =>
+				'\\1\\2</a>\\3</a>\\1\\4</a>',
+				# fix div inside inline elements- doBlockLevels won't wrap a line which
+				# contains a div, so fix it up here; replace
+				# div with escaped text
+				'/(<([aib]) [^>]+>)([^<]*)(<div([^>]*)>)(.*)(<\/div>)([^<]*)(<\/\\2>)/' =>
+				'\\1\\3&lt;div\\5&gt;\\6&lt;/div&gt;\\8\\9',
+				# remove empty italic or bold tag pairs, some
+				# introduced by rules above
+				'/<([bi])><\/\\1>/' => '',
+			);
+
+			$text = preg_replace(
+				array_keys( $tidyregs ),
+				array_values( $tidyregs ),
+				$text );
+		}
+
+		wfRunHooks( 'ParserAfterTidy', array( &$this, &$text ) );
+
+		# Information on include size limits, for the benefit of users who try to skirt them
+		if ( max( $this->mIncludeSizes ) > 1000 ) {
+			$max = $this->mOptions->getMaxIncludeSize();
+			$text .= "<!-- \n" .
+				"Pre-expand include size: {$this->mIncludeSizes['pre-expand']} bytes\n" .
+				"Post-expand include size: {$this->mIncludeSizes['post-expand']} bytes\n" .
+				"Template argument size: {$this->mIncludeSizes['arg']} bytes\n" .
+				"Maximum: $max bytes\n" .
+				"-->\n";
+		}
+		$this->mOutput->setText( $text );
+		$this->mRevisionId = $oldRevisionId;
+		$this->mRevisionTimestamp = $oldRevisionTimestamp;
+		wfProfileOut( $fname );
+		wfProfileOut( __METHOD__ );
+
+		return $this->mOutput;
+	}
+
+	/**
+	 * Recursive parser entry point that can be called from an extension tag
+	 * hook.
+	 */
+	function recursiveTagParse( $text ) {
+		wfProfileIn( __METHOD__ );
+		wfRunHooks( 'ParserBeforeStrip', array( &$this, &$text, &$this->mStripState ) );
+		$text = $this->strip( $text, $this->mStripState );
+		wfRunHooks( 'ParserAfterStrip', array( &$this, &$text, &$this->mStripState ) );
+		$text = $this->internalParse( $text );
+		wfProfileOut( __METHOD__ );
+		return $text;
+	}
+
+	/**
+	 * Expand templates and variables in the text, producing valid, static wikitext.
+	 * Also removes comments.
+	 */
+	function preprocess( $text, $title, $options ) {
+		wfProfileIn( __METHOD__ );
+		$this->clearState();
+		$this->setOutputType( OT_PREPROCESS );
+		$this->mOptions = $options;
+		$this->mTitle = $title;
+		wfRunHooks( 'ParserBeforeStrip', array( &$this, &$text, &$this->mStripState ) );
+		$text = $this->strip( $text, $this->mStripState );
+		wfRunHooks( 'ParserAfterStrip', array( &$this, &$text, &$this->mStripState ) );
+		if ( $this->mOptions->getRemoveComments() ) {
+			$text = Sanitizer::removeHTMLcomments( $text );
+		}
+		$text = $this->replaceVariables( $text );
+		$text = $this->mStripState->unstripBoth( $text );
+		wfProfileOut( __METHOD__ );
+		return $text;
+	}
+
+	/**
+	 * Get a random string
+	 *
+	 * @private
+	 * @static
+	 */
+	function getRandomString() {
+		return dechex(mt_rand(0, 0x7fffffff)) . dechex(mt_rand(0, 0x7fffffff));
+	}
+
+	function &getTitle() { return $this->mTitle; }
+	function getOptions() { return $this->mOptions; }
+
+	function getFunctionLang() {
+		global $wgLang, $wgContLang;
+		return $this->mOptions->getInterfaceMessage() ? $wgLang : $wgContLang;
+	}
+
+	/**
+	 * Replaces all occurrences of HTML-style comments and the given tags
+	 * in the text with a random marker and returns teh next text. The output
+	 * parameter $matches will be an associative array filled with data in
+	 * the form:
+	 *   'UNIQ-xxxxx' => array(
+	 *     'element',
+	 *     'tag content',
+	 *     array( 'param' => 'x' ),
+	 *     '<element param="x">tag content</element>' ) )
+	 *
+	 * @param $elements list of element names. Comments are always extracted.
+	 * @param $text Source text string.
+	 * @param $uniq_prefix
+	 *
+	 * @private
+	 * @static
+	 */
+	function extractTagsAndParams($elements, $text, &$matches, $uniq_prefix = ''){
+		static $n = 1;
+		$stripped = '';
+		$matches = array();
+
+		$taglist = implode( '|', $elements );
+		$start = "/<($taglist)(\\s+[^>]*?|\\s*?)(\/?>)|<(!--)/i";
+
+		while ( '' != $text ) {
+			$p = preg_split( $start, $text, 2, PREG_SPLIT_DELIM_CAPTURE );
+			$stripped .= $p[0];
+			if( count( $p ) < 5 ) {
+				break;
+			}
+			if( count( $p ) > 5 ) {
+				// comment
+				$element    = $p[4];
+				$attributes = '';
+				$close      = '';
+				$inside     = $p[5];
+			} else {
+				// tag
+				$element    = $p[1];
+				$attributes = $p[2];
+				$close      = $p[3];
+				$inside     = $p[4];
+			}
+
+			$marker = "$uniq_prefix-$element-" . sprintf('%08X', $n++) . '-QINU';
+			$stripped .= $marker;
+
+			if ( $close === '/>' ) {
+				// Empty element tag, <tag />
+				$content = null;
+				$text = $inside;
+				$tail = null;
+			} else {
+				if( $element == '!--' ) {
+					$end = '/(-->)/';
+				} else {
+					$end = "/(<\\/$element\\s*>)/i";
+				}
+				$q = preg_split( $end, $inside, 2, PREG_SPLIT_DELIM_CAPTURE );
+				$content = $q[0];
+				if( count( $q ) < 3 ) {
+					# No end tag -- let it run out to the end of the text.
+					$tail = '';
+					$text = '';
+				} else {
+					$tail = $q[1];
+					$text = $q[2];
+				}
+			}
+
+			$matches[$marker] = array( $element,
+				$content,
+				Sanitizer::decodeTagAttributes( $attributes ),
+				"<$element$attributes$close$content$tail" );
+		}
+		return $stripped;
+	}
+
+	/**
+	 * Strips and renders nowiki, pre, math, hiero
+	 * If $render is set, performs necessary rendering operations on plugins
+	 * Returns the text, and fills an array with data needed in unstrip()
+	 *
+	 * @param StripState $state
+	 *
+	 * @param bool $stripcomments when set, HTML comments <!-- like this -->
+	 *  will be stripped in addition to other tags. This is important
+	 *  for section editing, where these comments cause confusion when
+	 *  counting the sections in the wikisource
+	 *
+	 * @param array dontstrip contains tags which should not be stripped;
+	 *  used to prevent stipping of <gallery> when saving (fixes bug 2700)
+	 *
+	 * @private
+	 */
+	function strip( $text, $state, $stripcomments = false , $dontstrip = array () ) {
+		global $wgContLang;
+		wfProfileIn( __METHOD__ );
+		$render = ($this->mOutputType == OT_HTML);
+
+		$uniq_prefix = $this->mUniqPrefix;
+		$commentState = new ReplacementArray;
+		$nowikiItems = array();
+		$generalItems = array();
+
+		$elements = array_merge(
+			array( 'nowiki', 'gallery' ),
+			array_keys( $this->mTagHooks ) );
+		global $wgRawHtml;
+		if( $wgRawHtml ) {
+			$elements[] = 'html';
+		}
+		if( $this->mOptions->getUseTeX() ) {
+			$elements[] = 'math';
+		}
+
+		# Removing $dontstrip tags from $elements list (currently only 'gallery', fixing bug 2700)
+		foreach ( $elements AS $k => $v ) {
+			if ( !in_array ( $v , $dontstrip ) ) continue;
+			unset ( $elements[$k] );
+		}
+
+		$matches = array();
+		$text = Parser::extractTagsAndParams( $elements, $text, $matches, $uniq_prefix );
+
+		foreach( $matches as $marker => $data ) {
+			list( $element, $content, $params, $tag ) = $data;
+			if( $render ) {
+				$tagName = strtolower( $element );
+				wfProfileIn( __METHOD__."-render-$tagName" );
+				switch( $tagName ) {
+				case '!--':
+					// Comment
+					if( substr( $tag, -3 ) == '-->' ) {
+						$output = $tag;
+					} else {
+						// Unclosed comment in input.
+						// Close it so later stripping can remove it
+						$output = "$tag-->";
+					}
+					break;
+				case 'html':
+					if( $wgRawHtml ) {
+						$output = $content;
+						break;
+					}
+					// Shouldn't happen otherwise. :)
+				case 'nowiki':
+					$output = Xml::escapeTagsOnly( $content );
+					break;
+				case 'math':
+					$output = $wgContLang->armourMath( MathRenderer::renderMath( $content ) );
+					break;
+				case 'gallery':
+					$output = $this->renderImageGallery( $content, $params );
+					break;
+				default:
+					if( isset( $this->mTagHooks[$tagName] ) ) {
+						$output = call_user_func_array( $this->mTagHooks[$tagName],
+							array( $content, $params, $this ) );
+					} else {
+						throw new MWException( "Invalid call hook $element" );
+					}
+				}
+				wfProfileOut( __METHOD__."-render-$tagName" );
+			} else {
+				// Just stripping tags; keep the source
+				$output = $tag;
+			}
+
+			// Unstrip the output, to support recursive strip() calls
+			$output = $state->unstripBoth( $output );
+
+			if( !$stripcomments && $element == '!--' ) {
+				$commentState->setPair( $marker, $output );
+			} elseif ( $element == 'html' || $element == 'nowiki' ) {
+				$nowikiItems[$marker] = $output;
+			} else {
+				$generalItems[$marker] = $output;
+			}
+		}
+		# Add the new items to the state
+		# We do this after the loop instead of during it to avoid slowing 
+		# down the recursive unstrip
+		$state->nowiki->mergeArray( $nowikiItems );
+		$state->general->mergeArray( $generalItems );
+
+		# Unstrip comments unless explicitly told otherwise.
+		# (The comments are always stripped prior to this point, so as to
+		# not invoke any extension tags / parser hooks contained within
+		# a comment.)
+		if ( !$stripcomments ) {
+			// Put them all back and forget them
+			$text = $commentState->replace( $text );
+		}
+
+		wfProfileOut( __METHOD__ );
+		return $text;
+	}
+
+	/**
+	 * Restores pre, math, and other extensions removed by strip()
+	 *
+	 * always call unstripNoWiki() after this one
+	 * @private
+	 * @deprecated use $this->mStripState->unstrip()
+	 */
+	function unstrip( $text, $state ) {
+		return $state->unstripGeneral( $text );
+	}
+
+	/**
+	 * Always call this after unstrip() to preserve the order
+	 *
+	 * @private
+	 * @deprecated use $this->mStripState->unstrip()
+	 */
+	function unstripNoWiki( $text, $state ) {
+		return $state->unstripNoWiki( $text );
+	}
+
+	/**
+	 * @deprecated use $this->mStripState->unstripBoth()
+	 */
+	function unstripForHTML( $text ) {
+		return $this->mStripState->unstripBoth( $text );
+	}
+
+	/**
+	 * Add an item to the strip state
+	 * Returns the unique tag which must be inserted into the stripped text
+	 * The tag will be replaced with the original text in unstrip()
+	 *
+	 * @private
+	 */
+	function insertStripItem( $text, &$state ) {
+		$rnd = $this->mUniqPrefix . '-item' . Parser::getRandomString();
+		$state->general->setPair( $rnd, $text );
+		return $rnd;
+	}
+
+	/**
+	 * Interface with html tidy, used if $wgUseTidy = true.
+	 * If tidy isn't able to correct the markup, the original will be
+	 * returned in all its glory with a warning comment appended.
+	 *
+	 * Either the external tidy program or the in-process tidy extension
+	 * will be used depending on availability. Override the default
+	 * $wgTidyInternal setting to disable the internal if it's not working.
+	 *
+	 * @param string $text Hideous HTML input
+	 * @return string Corrected HTML output
+	 * @public
+	 * @static
+	 */
+	function tidy( $text ) {
+		global $wgTidyInternal;
+		$wrappedtext = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"'.
+' "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html>'.
+'<head><title>test</title></head><body>'.$text.'</body></html>';
+		if( $wgTidyInternal ) {
+			$correctedtext = Parser::internalTidy( $wrappedtext );
+		} else {
+			$correctedtext = Parser::externalTidy( $wrappedtext );
+		}
+		if( is_null( $correctedtext ) ) {
+			wfDebug( "Tidy error detected!\n" );
+			return $text . "\n<!-- Tidy found serious XHTML errors -->\n";
+		}
+		return $correctedtext;
+	}
+
+	/**
+	 * Spawn an external HTML tidy process and get corrected markup back from it.
+	 *
+	 * @private
+	 * @static
+	 */
+	function externalTidy( $text ) {
+		global $wgTidyConf, $wgTidyBin, $wgTidyOpts;
+		$fname = 'Parser::externalTidy';
+		wfProfileIn( $fname );
+
+		$cleansource = '';
+		$opts = ' -utf8';
+
+		$descriptorspec = array(
+			0 => array('pipe', 'r'),
+			1 => array('pipe', 'w'),
+			2 => array('file', '/dev/null', 'a')  // FIXME: this line in UNIX-specific, it generates a warning on Windows, because /dev/null is not a valid Windows file.
+		);
+		$pipes = array();
+		$process = proc_open("$wgTidyBin -config $wgTidyConf $wgTidyOpts$opts", $descriptorspec, $pipes);
+		if (is_resource($process)) {
+			// Theoretically, this style of communication could cause a deadlock
+			// here. If the stdout buffer fills up, then writes to stdin could
+			// block. This doesn't appear to happen with tidy, because tidy only
+			// writes to stdout after it's finished reading from stdin. Search
+			// for tidyParseStdin and tidySaveStdout in console/tidy.c
+			fwrite($pipes[0], $text);
+			fclose($pipes[0]);
+			while (!feof($pipes[1])) {
+				$cleansource .= fgets($pipes[1], 1024);
+			}
+			fclose($pipes[1]);
+			proc_close($process);
+		}
+
+		wfProfileOut( $fname );
+
+		if( $cleansource == '' && $text != '') {
+			// Some kind of error happened, so we couldn't get the corrected text.
+			// Just give up; we'll use the source text and append a warning.
+			return null;
+		} else {
+			return $cleansource;
+		}
+	}
+
+	/**
+	 * Use the HTML tidy PECL extension to use the tidy library in-process,
+	 * saving the overhead of spawning a new process. Currently written to
+	 * the PHP 4.3.x version of the extension, may not work on PHP 5.
+	 *
+	 * 'pear install tidy' should be able to compile the extension module.
+	 *
+	 * @private
+	 * @static
+	 */
+	function internalTidy( $text ) {
+		global $wgTidyConf;
+		$fname = 'Parser::internalTidy';
+		wfProfileIn( $fname );
+
+		tidy_load_config( $wgTidyConf );
+		tidy_set_encoding( 'utf8' );
+		tidy_parse_string( $text );
+		tidy_clean_repair();
+		if( tidy_get_status() == 2 ) {
+			// 2 is magic number for fatal error
+			// http://www.php.net/manual/en/function.tidy-get-status.php
+			$cleansource = null;
+		} else {
+			$cleansource = tidy_get_output();
+		}
+		wfProfileOut( $fname );
+		return $cleansource;
+	}
+
+	/**
+	 * parse the wiki syntax used to render tables
+	 *
+	 * @private
+	 */
+	function doTableStuff ( $text ) {
+		$fname = 'Parser::doTableStuff';
+		wfProfileIn( $fname );
+
+		$lines = explode ( "\n" , $text );
+		$td_history = array (); // Is currently a td tag open?
+		$last_tag_history = array (); // Save history of last lag activated (td, th or caption)
+		$tr_history = array (); // Is currently a tr tag open?
+		$tr_attributes = array (); // history of tr attributes
+		$has_opened_tr = array(); // Did this table open a <tr> element?
+		$indent_level = 0; // indent level of the table
+		foreach ( $lines as $key => $line )
+		{
+			$line = trim ( $line );
+
+			if( $line == '' ) { // empty line, go to next line
+				continue;
+			}
+			$first_character = $line{0};
+			$matches = array();
+
+			if ( preg_match( '/^(:*)\{\|(.*)$/' , $line , $matches ) ) {
+				// First check if we are starting a new table
+				$indent_level = strlen( $matches[1] );
+
+				$attributes = $this->mStripState->unstripBoth( $matches[2] );
+				$attributes = Sanitizer::fixTagAttributes ( $attributes , 'table' );
+
+				$lines[$key] = str_repeat( '<dl><dd>' , $indent_level ) . "<table{$attributes}>";
+				array_push ( $td_history , false );
+				array_push ( $last_tag_history , '' );
+				array_push ( $tr_history , false );
+				array_push ( $tr_attributes , '' );
+				array_push ( $has_opened_tr , false );
+			} else if ( count ( $td_history ) == 0 ) {
+				// Don't do any of the following
+				continue;
+			} else if ( substr ( $line , 0 , 2 ) == '|}' ) { 
+				// We are ending a table
+				$line = '</table>' . substr ( $line , 2 );
+				$last_tag = array_pop ( $last_tag_history );
+
+				if ( !array_pop ( $has_opened_tr ) ) {
+					$line = "<tr><td></td></tr>{$line}";
+				}
+
+				if ( array_pop ( $tr_history ) ) {
+					$line = "</tr>{$line}";
+				}
+
+				if ( array_pop ( $td_history ) ) {
+					$line = "</{$last_tag}>{$line}";
+				}
+				array_pop ( $tr_attributes );
+				$lines[$key] = $line . str_repeat( '</dd></dl>' , $indent_level );
+			} else if ( substr ( $line , 0 , 2 ) == '|-' ) {
+				// Now we have a table row
+				$line = preg_replace( '#^\|-+#', '', $line );
+
+				// Whats after the tag is now only attributes
+				$attributes = $this->mStripState->unstripBoth( $line );
+				$attributes = Sanitizer::fixTagAttributes ( $attributes , 'tr' );
+				array_pop ( $tr_attributes );
+				array_push ( $tr_attributes , $attributes );
+
+				$line = '';
+				$last_tag = array_pop ( $last_tag_history );
+				array_pop ( $has_opened_tr );
+				array_push ( $has_opened_tr , true );
+
+				if ( array_pop ( $tr_history ) ) {
+					$line = '</tr>';
+				}
+
+				if ( array_pop ( $td_history ) ) {
+					$line = "</{$last_tag}>{$line}";
+				}
+
+				$lines[$key] = $line;
+				array_push ( $tr_history , false );
+				array_push ( $td_history , false );
+				array_push ( $last_tag_history , '' );
+			}
+			else if ( $first_character == '|' || $first_character == '!' || substr ( $line , 0 , 2 )  == '|+' ) {
+				// This might be cell elements, td, th or captions
+				if ( substr ( $line , 0 , 2 ) == '|+' ) {
+					$first_character = '+';
+					$line = substr ( $line , 1 );
+				}
+
+				$line = substr ( $line , 1 );
+
+				if ( $first_character == '!' ) {
+					$line = str_replace ( '!!' , '||' , $line );
+				}
+
+				// Split up multiple cells on the same line.
+				// FIXME : This can result in improper nesting of tags processed
+				// by earlier parser steps, but should avoid splitting up eg
+				// attribute values containing literal "||".
+				$cells = StringUtils::explodeMarkup( '||' , $line );
+
+				$lines[$key] = '';
+
+				// Loop through each table cell
+				foreach ( $cells as $cell )
+				{
+					$previous = '';
+					if ( $first_character != '+' )
+					{
+						$tr_after = array_pop ( $tr_attributes );
+						if ( !array_pop ( $tr_history ) ) {
+							$previous = "<tr{$tr_after}>\n";
+						}
+						array_push ( $tr_history , true );
+						array_push ( $tr_attributes , '' );
+						array_pop ( $has_opened_tr );
+						array_push ( $has_opened_tr , true );
+					}
+
+					$last_tag = array_pop ( $last_tag_history );
+
+					if ( array_pop ( $td_history ) ) {
+						$previous = "</{$last_tag}>{$previous}";
+					}
+
+					if ( $first_character == '|' ) {
+						$last_tag = 'td';
+					} else if ( $first_character == '!' ) {
+						$last_tag = 'th';
+					} else if ( $first_character == '+' ) {
+						$last_tag = 'caption';
+					} else {
+						$last_tag = '';
+					}
+
+					array_push ( $last_tag_history , $last_tag );
+
+					// A cell could contain both parameters and data
+					$cell_data = explode ( '|' , $cell , 2 );
+
+					// Bug 553: Note that a '|' inside an invalid link should not
+					// be mistaken as delimiting cell parameters
+					if ( strpos( $cell_data[0], '[[' ) !== false ) {
+						$cell = "{$previous}<{$last_tag}>{$cell}";
+					} else if ( count ( $cell_data ) == 1 )
+						$cell = "{$previous}<{$last_tag}>{$cell_data[0]}";
+					else {
+						$attributes = $this->mStripState->unstripBoth( $cell_data[0] );
+						$attributes = Sanitizer::fixTagAttributes( $attributes , $last_tag );
+						$cell = "{$previous}<{$last_tag}{$attributes}>{$cell_data[1]}";
+					}
+
+					$lines[$key] .= $cell;
+					array_push ( $td_history , true );
+				}
+			}
+		}
+
+		// Closing open td, tr && table
+		while ( count ( $td_history ) > 0 )
+		{
+			if ( array_pop ( $td_history ) ) {
+				$lines[] = '</td>' ;
+			}
+			if ( array_pop ( $tr_history ) ) {
+				$lines[] = '</tr>' ;
+			}
+			if ( !array_pop ( $has_opened_tr ) ) {
+				$lines[] = "<tr><td></td></tr>" ;
+			}
+
+			$lines[] = '</table>' ;
+		}
+
+		$output = implode ( "\n" , $lines ) ;
+
+		// special case: don't return empty table
+		if( $output == "<table>\n<tr><td></td></tr>\n</table>" ) {
+			$output = '';
+		}
+
+		wfProfileOut( $fname );
+
+		return $output;
+	}
+
+	/**
+	 * Helper function for parse() that transforms wiki markup into
+	 * HTML. Only called for $mOutputType == OT_HTML.
+	 *
+	 * @private
+	 */
+	function internalParse( $text ) {
+		$args = array();
+		$isMain = true;
+		$fname = 'Parser::internalParse';
+		wfProfileIn( $fname );
+
+		# Hook to suspend the parser in this state
+		if ( !wfRunHooks( 'ParserBeforeInternalParse', array( &$this, &$text, &$this->mStripState ) ) ) {
+			wfProfileOut( $fname );
+			return $text ;
+		}
+
+		# Remove <noinclude> tags and <includeonly> sections
+		$text = strtr( $text, array( '<onlyinclude>' => '' , '</onlyinclude>' => '' ) );
+		$text = strtr( $text, array( '<noinclude>' => '', '</noinclude>' => '') );
+		$text = StringUtils::delimiterReplace( '<includeonly>', '</includeonly>', '', $text );
+
+		$text = Sanitizer::removeHTMLtags( $text, array( &$this, 'attributeStripCallback' ) );
+
+		$text = $this->replaceVariables( $text, $args );
+		wfRunHooks( 'InternalParseBeforeLinks', array( &$this, &$text, &$this->mStripState ) );
+
+		// Tables need to come after variable replacement for things to work
+		// properly; putting them before other transformations should keep
+		// exciting things like link expansions from showing up in surprising
+		// places.
+		$text = $this->doTableStuff( $text );
+
+		$text = preg_replace( '/(^|\n)-----*/', '\\1<hr />', $text );
+
+		$text = $this->stripToc( $text );
+		$this->stripNoGallery( $text );
+		$text = $this->doHeadings( $text );
+		if($this->mOptions->getUseDynamicDates()) {
+			$df =& DateFormatter::getInstance();
+			$text = $df->reformat( $this->mOptions->getDateFormat(), $text );
+		}
+		$text = $this->doAllQuotes( $text );
+		$text = $this->replaceInternalLinks( $text );
+		$text = $this->replaceExternalLinks( $text );
+
+		# replaceInternalLinks may sometimes leave behind
+		# absolute URLs, which have to be masked to hide them from replaceExternalLinks
+		$text = str_replace($this->mUniqPrefix."NOPARSE", "", $text);
+
+		$text = $this->doMagicLinks( $text );
+		$text = $this->formatHeadings( $text, $isMain );
+
+		wfProfileOut( $fname );
+		return $text;
+	}
+
+	/**
+	 * Replace special strings like "ISBN xxx" and "RFC xxx" with
+	 * magic external links.
+	 *
+	 * @private
+	 */
+	function &doMagicLinks( &$text ) {
+		wfProfileIn( __METHOD__ );
+		$text = preg_replace_callback(
+			'!(?:                           # Start cases
+			    <a.*?</a> |                 # Skip link text
+			    <.*?> |                     # Skip stuff inside HTML elements
+			    (?:RFC|PMID)\s+([0-9]+) |   # RFC or PMID, capture number as m[1]
+			    ISBN\s+(\b                  # ISBN, capture number as m[2]
+                                     (?: 97[89] [\ \-]? )?   # optional 13-digit ISBN prefix
+                                     (?: [0-9]  [\ \-]? ){9} # 9 digits with opt. delimiters
+                                     [0-9Xx]                 # check digit
+                                   \b)
+			)!x', array( &$this, 'magicLinkCallback' ), $text );
+		wfProfileOut( __METHOD__ );
+		return $text;
+	}
+
+	function magicLinkCallback( $m ) {
+		if ( substr( $m[0], 0, 1 ) == '<' ) {
+			# Skip HTML element
+			return $m[0];
+		} elseif ( substr( $m[0], 0, 4 ) == 'ISBN' ) {
+			$isbn = $m[2];
+			$num = strtr( $isbn, array(
+				'-' => '',
+				' ' => '',
+				'x' => 'X',
+			));
+			$titleObj = SpecialPage::getTitleFor( 'Booksources' );
+			$text = '<a href="' .
+				$titleObj->escapeLocalUrl( "isbn=$num" ) .
+				"\" class=\"internal\">ISBN $isbn</a>";
+		} else {
+			if ( substr( $m[0], 0, 3 ) == 'RFC' ) {
+				$keyword = 'RFC';
+				$urlmsg = 'rfcurl';
+				$id = $m[1];
+			} elseif ( substr( $m[0], 0, 4 ) == 'PMID' ) {
+				$keyword = 'PMID';
+				$urlmsg = 'pubmedurl';
+				$id = $m[1];
+			} else {
+				throw new MWException( __METHOD__.': unrecognised match type "' .
+					substr($m[0], 0, 20 ) . '"' );
+			}
+
+			$url = wfMsg( $urlmsg, $id);
+			$sk = $this->mOptions->getSkin();
+			$la = $sk->getExternalLinkAttributes( $url, $keyword.$id );
+			$text = "<a href=\"{$url}\"{$la}>{$keyword} {$id}</a>";
+		}
+		return $text;
+	}
+
+	/**
+	 * Parse headers and return html
+	 *
+	 * @private
+	 */
+	function doHeadings( $text ) {
+		$fname = 'Parser::doHeadings';
+		wfProfileIn( $fname );
+		for ( $i = 6; $i >= 1; --$i ) {
+			$h = str_repeat( '=', $i );
+			$text = preg_replace( "/^{$h}(.+){$h}\\s*$/m",
+			  "<h{$i}>\\1</h{$i}>\\2", $text );
+		}
+		wfProfileOut( $fname );
+		return $text;
+	}
+
+	/**
+	 * Replace single quotes with HTML markup
+	 * @private
+	 * @return string the altered text
+	 */
+	function doAllQuotes( $text ) {
+		$fname = 'Parser::doAllQuotes';
+		wfProfileIn( $fname );
+		$outtext = '';
+		$lines = explode( "\n", $text );
+		foreach ( $lines as $line ) {
+			$outtext .= $this->doQuotes ( $line ) . "\n";
+		}
+		$outtext = substr($outtext, 0,-1);
+		wfProfileOut( $fname );
+		return $outtext;
+	}
+
+	/**
+	 * Helper function for doAllQuotes()
+	 * @private
+	 */
+	function doQuotes( $text ) {
+		$arr = preg_split( "/(''+)/", $text, -1, PREG_SPLIT_DELIM_CAPTURE );
+		if ( count( $arr ) == 1 )
+			return $text;
+		else
+		{
+			# First, do some preliminary work. This may shift some apostrophes from
+			# being mark-up to being text. It also counts the number of occurrences
+			# of bold and italics mark-ups.
+			$i = 0;
+			$numbold = 0;
+			$numitalics = 0;
+			foreach ( $arr as $r )
+			{
+				if ( ( $i % 2 ) == 1 )
+				{
+					# If there are ever four apostrophes, assume the first is supposed to
+					# be text, and the remaining three constitute mark-up for bold text.
+					if ( strlen( $arr[$i] ) == 4 )
+					{
+						$arr[$i-1] .= "'";
+						$arr[$i] = "'''";
+					}
+					# If there are more than 5 apostrophes in a row, assume they're all
+					# text except for the last 5.
+					else if ( strlen( $arr[$i] ) > 5 )
+					{
+						$arr[$i-1] .= str_repeat( "'", strlen( $arr[$i] ) - 5 );
+						$arr[$i] = "'''''";
+					}
+					# Count the number of occurrences of bold and italics mark-ups.
+					# We are not counting sequences of five apostrophes.
+					if ( strlen( $arr[$i] ) == 2 )      { $numitalics++;             }
+					else if ( strlen( $arr[$i] ) == 3 ) { $numbold++;                }
+					else if ( strlen( $arr[$i] ) == 5 ) { $numitalics++; $numbold++; }
+				}
+				$i++;
+			}
+
+			# If there is an odd number of both bold and italics, it is likely
+			# that one of the bold ones was meant to be an apostrophe followed
+			# by italics. Which one we cannot know for certain, but it is more
+			# likely to be one that has a single-letter word before it.
+			if ( ( $numbold % 2 == 1 ) && ( $numitalics % 2 == 1 ) )
+			{
+				$i = 0;
+				$firstsingleletterword = -1;
+				$firstmultiletterword = -1;
+				$firstspace = -1;
+				foreach ( $arr as $r )
+				{
+					if ( ( $i % 2 == 1 ) and ( strlen( $r ) == 3 ) )
+					{
+						$x1 = substr ($arr[$i-1], -1);
+						$x2 = substr ($arr[$i-1], -2, 1);
+						if ($x1 == ' ') {
+							if ($firstspace == -1) $firstspace = $i;
+						} else if ($x2 == ' ') {
+							if ($firstsingleletterword == -1) $firstsingleletterword = $i;
+						} else {
+							if ($firstmultiletterword == -1) $firstmultiletterword = $i;
+						}
+					}
+					$i++;
+				}
+
+				# If there is a single-letter word, use it!
+				if ($firstsingleletterword > -1)
+				{
+					$arr [ $firstsingleletterword ] = "''";
+					$arr [ $firstsingleletterword-1 ] .= "'";
+				}
+				# If not, but there's a multi-letter word, use that one.
+				else if ($firstmultiletterword > -1)
+				{
+					$arr [ $firstmultiletterword ] = "''";
+					$arr [ $firstmultiletterword-1 ] .= "'";
+				}
+				# ... otherwise use the first one that has neither.
+				# (notice that it is possible for all three to be -1 if, for example,
+				# there is only one pentuple-apostrophe in the line)
+				else if ($firstspace > -1)
+				{
+					$arr [ $firstspace ] = "''";
+					$arr [ $firstspace-1 ] .= "'";
+				}
+			}
+
+			# Now let's actually convert our apostrophic mush to HTML!
+			$output = '';
+			$buffer = '';
+			$state = '';
+			$i = 0;
+			foreach ($arr as $r)
+			{
+				if (($i % 2) == 0)
+				{
+					if ($state == 'both')
+						$buffer .= $r;
+					else
+						$output .= $r;
+				}
+				else
+				{
+					if (strlen ($r) == 2)
+					{
+						if ($state == 'i')
+						{ $output .= '</i>'; $state = ''; }
+						else if ($state == 'bi')
+						{ $output .= '</i>'; $state = 'b'; }
+						else if ($state == 'ib')
+						{ $output .= '</b></i><b>'; $state = 'b'; }
+						else if ($state == 'both')
+						{ $output .= '<b><i>'.$buffer.'</i>'; $state = 'b'; }
+						else # $state can be 'b' or ''
+						{ $output .= '<i>'; $state .= 'i'; }
+					}
+					else if (strlen ($r) == 3)
+					{
+						if ($state == 'b')
+						{ $output .= '</b>'; $state = ''; }
+						else if ($state == 'bi')
+						{ $output .= '</i></b><i>'; $state = 'i'; }
+						else if ($state == 'ib')
+						{ $output .= '</b>'; $state = 'i'; }
+						else if ($state == 'both')
+						{ $output .= '<i><b>'.$buffer.'</b>'; $state = 'i'; }
+						else # $state can be 'i' or ''
+						{ $output .= '<b>'; $state .= 'b'; }
+					}
+					else if (strlen ($r) == 5)
+					{
+						if ($state == 'b')
+						{ $output .= '</b><i>'; $state = 'i'; }
+						else if ($state == 'i')
+						{ $output .= '</i><b>'; $state = 'b'; }
+						else if ($state == 'bi')
+						{ $output .= '</i></b>'; $state = ''; }
+						else if ($state == 'ib')
+						{ $output .= '</b></i>'; $state = ''; }
+						else if ($state == 'both')
+						{ $output .= '<i><b>'.$buffer.'</b></i>'; $state = ''; }
+						else # ($state == '')
+						{ $buffer = ''; $state = 'both'; }
+					}
+				}
+				$i++;
+			}
+			# Now close all remaining tags.  Notice that the order is important.
+			if ($state == 'b' || $state == 'ib')
+				$output .= '</b>';
+			if ($state == 'i' || $state == 'bi' || $state == 'ib')
+				$output .= '</i>';
+			if ($state == 'bi')
+				$output .= '</b>';
+			# There might be lonely ''''', so make sure we have a buffer
+			if ($state == 'both' && $buffer)
+				$output .= '<b><i>'.$buffer.'</i></b>';
+			return $output;
+		}
+	}
+
+	/**
+	 * Replace external links
+	 *
+ 	 * Note: this is all very hackish and the order of execution matters a lot.
+	 * Make sure to run maintenance/parserTests.php if you change this code.
+	 *
+	 * @private
+	 */
+	function replaceExternalLinks( $text ) {
+		global $wgContLang;
+		$fname = 'Parser::replaceExternalLinks';
+		wfProfileIn( $fname );
+
+		$sk = $this->mOptions->getSkin();
+
+		$bits = preg_split( EXT_LINK_BRACKETED, $text, -1, PREG_SPLIT_DELIM_CAPTURE );
+
+		$s = $this->replaceFreeExternalLinks( array_shift( $bits ) );
+
+		$i = 0;
+		while ( $i<count( $bits ) ) {
+			$url = $bits[$i++];
+			$protocol = $bits[$i++];
+			$text = $bits[$i++];
+			$trail = $bits[$i++];
+
+			# The characters '<' and '>' (which were escaped by
+			# removeHTMLtags()) should not be included in
+			# URLs, per RFC 2396.
+			$m2 = array();
+			if (preg_match('/&(lt|gt);/', $url, $m2, PREG_OFFSET_CAPTURE)) {
+				$text = substr($url, $m2[0][1]) . ' ' . $text;
+				$url = substr($url, 0, $m2[0][1]);
+			}
+
+			# If the link text is an image URL, replace it with an <img> tag
+			# This happened by accident in the original parser, but some people used it extensively
+			$img = $this->maybeMakeExternalImage( $text );
+			if ( $img !== false ) {
+				$text = $img;
+			}
+
+			$dtrail = '';
+
+			# Set linktype for CSS - if URL==text, link is essentially free
+			$linktype = ($text == $url) ? 'free' : 'text';
+
+			# No link text, e.g. [http://domain.tld/some.link]
+			if ( $text == '' ) {
+				# Autonumber if allowed. See bug #5918
+				if ( strpos( wfUrlProtocols(), substr($protocol, 0, strpos($protocol, ':')) ) !== false ) {
+					$text = '[' . ++$this->mAutonumber . ']';
+					$linktype = 'autonumber';
+				} else {
+					# Otherwise just use the URL
+					$text = htmlspecialchars( $url );
+					$linktype = 'free';
+				}
+			} else {
+				# Have link text, e.g. [http://domain.tld/some.link text]s
+				# Check for trail
+				list( $dtrail, $trail ) = Linker::splitTrail( $trail );
+			}
+
+			$text = $wgContLang->markNoConversion($text);
+
+			$url = Sanitizer::cleanUrl( $url );
+
+			# Process the trail (i.e. everything after this link up until start of the next link),
+			# replacing any non-bracketed links
+			$trail = $this->replaceFreeExternalLinks( $trail );
+
+			# Use the encoded URL
+			# This means that users can paste URLs directly into the text
+			# Funny characters like &ouml; aren't valid in URLs anyway
+			# This was changed in August 2004
+			$s .= $sk->makeExternalLink( $url, $text, false, $linktype, $this->mTitle->getNamespace() ) . $dtrail . $trail;
+
+			# Register link in the output object.
+			# Replace unnecessary URL escape codes with the referenced character
+			# This prevents spammers from hiding links from the filters
+			$pasteurized = Parser::replaceUnusualEscapes( $url );
+			$this->mOutput->addExternalLink( $pasteurized );
+		}
+
+		wfProfileOut( $fname );
+		return $s;
+	}
+
+	/**
+	 * Replace anything that looks like a URL with a link
+	 * @private
+	 */
+	function replaceFreeExternalLinks( $text ) {
+		global $wgContLang;
+		$fname = 'Parser::replaceFreeExternalLinks';
+		wfProfileIn( $fname );
+
+		$bits = preg_split( '/(\b(?:' . wfUrlProtocols() . '))/S', $text, -1, PREG_SPLIT_DELIM_CAPTURE );
+		$s = array_shift( $bits );
+		$i = 0;
+
+		$sk = $this->mOptions->getSkin();
+
+		while ( $i < count( $bits ) ){
+			$protocol = $bits[$i++];
+			$remainder = $bits[$i++];
+
+			$m = array();
+			if ( preg_match( '/^('.EXT_LINK_URL_CLASS.'+)(.*)$/s', $remainder, $m ) ) {
+				# Found some characters after the protocol that look promising
+				$url = $protocol . $m[1];
+				$trail = $m[2];
+
+				# special case: handle urls as url args:
+				# http://www.example.com/foo?=http://www.example.com/bar
+				if(strlen($trail) == 0 &&
+					isset($bits[$i]) &&
+					preg_match('/^'. wfUrlProtocols() . '$/S', $bits[$i]) &&
+					preg_match( '/^('.EXT_LINK_URL_CLASS.'+)(.*)$/s', $bits[$i + 1], $m ))
+				{
+					# add protocol, arg
+					$url .= $bits[$i] . $m[1]; # protocol, url as arg to previous link
+					$i += 2;
+					$trail = $m[2];
+				}
+
+				# The characters '<' and '>' (which were escaped by
+				# removeHTMLtags()) should not be included in
+				# URLs, per RFC 2396.
+				$m2 = array();
+				if (preg_match('/&(lt|gt);/', $url, $m2, PREG_OFFSET_CAPTURE)) {
+					$trail = substr($url, $m2[0][1]) . $trail;
+					$url = substr($url, 0, $m2[0][1]);
+				}
+
+				# Move trailing punctuation to $trail
+				$sep = ',;\.:!?';
+				# If there is no left bracket, then consider right brackets fair game too
+				if ( strpos( $url, '(' ) === false ) {
+					$sep .= ')';
+				}
+
+				$numSepChars = strspn( strrev( $url ), $sep );
+				if ( $numSepChars ) {
+					$trail = substr( $url, -$numSepChars ) . $trail;
+					$url = substr( $url, 0, -$numSepChars );
+				}
+
+				$url = Sanitizer::cleanUrl( $url );
+
+				# Is this an external image?
+				$text = $this->maybeMakeExternalImage( $url );
+				if ( $text === false ) {
+					# Not an image, make a link
+					$text = $sk->makeExternalLink( $url, $wgContLang->markNoConversion($url), true, 'free', $this->mTitle->getNamespace() );
+					# Register it in the output object...
+					# Replace unnecessary URL escape codes with their equivalent characters
+					$pasteurized = Parser::replaceUnusualEscapes( $url );
+					$this->mOutput->addExternalLink( $pasteurized );
+				}
+				$s .= $text . $trail;
+			} else {
+				$s .= $protocol . $remainder;
+			}
+		}
+		wfProfileOut( $fname );
+		return $s;
+	}
+
+	/**
+	 * Replace unusual URL escape codes with their equivalent characters
+	 * @param string
+	 * @return string
+	 * @static
+	 * @todo  This can merge genuinely required bits in the path or query string,
+	 *        breaking legit URLs. A proper fix would treat the various parts of
+	 *        the URL differently; as a workaround, just use the output for
+	 *        statistical records, not for actual linking/output.
+	 */
+	static function replaceUnusualEscapes( $url ) {
+		return preg_replace_callback( '/%[0-9A-Fa-f]{2}/',
+			array( 'Parser', 'replaceUnusualEscapesCallback' ), $url );
+	}
+
+	/**
+	 * Callback function used in replaceUnusualEscapes().
+	 * Replaces unusual URL escape codes with their equivalent character
+	 * @static
+	 * @private
+	 */
+	private static function replaceUnusualEscapesCallback( $matches ) {
+		$char = urldecode( $matches[0] );
+		$ord = ord( $char );
+		// Is it an unsafe or HTTP reserved character according to RFC 1738?
+		if ( $ord > 32 && $ord < 127 && strpos( '<>"#{}|\^~[]`;/?', $char ) === false ) {
+			// No, shouldn't be escaped
+			return $char;
+		} else {
+			// Yes, leave it escaped
+			return $matches[0];
+		}
+	}
+
+	/**
+	 * make an image if it's allowed, either through the global
+	 * option or through the exception
+	 * @private
+	 */
+	function maybeMakeExternalImage( $url ) {
+		$sk = $this->mOptions->getSkin();
+		$imagesfrom = $this->mOptions->getAllowExternalImagesFrom();
+		$imagesexception = !empty($imagesfrom);
+		$text = false;
+		if ( $this->mOptions->getAllowExternalImages()
+		     || ( $imagesexception && strpos( $url, $imagesfrom ) === 0 ) ) {
+			if ( preg_match( EXT_IMAGE_REGEX, $url ) ) {
+				# Image found
+				$text = $sk->makeExternalImage( htmlspecialchars( $url ) );
+			}
+		}
+		return $text;
+	}
+
+	/**
+	 * Process [[ ]] wikilinks
+	 *
+	 * @private
+	 */
+	function replaceInternalLinks( $s ) {
+		global $wgContLang;
+		static $fname = 'Parser::replaceInternalLinks' ;
+
+		wfProfileIn( $fname );
+
+		wfProfileIn( $fname.'-setup' );
+		static $tc = FALSE;
+		# the % is needed to support urlencoded titles as well
+		if ( !$tc ) { $tc = Title::legalChars() . '#%'; }
+
+		$sk = $this->mOptions->getSkin();
+
+		#split the entire text string on occurences of [[
+		$a = explode( '[[', ' ' . $s );
+		#get the first element (all text up to first [[), and remove the space we added
+		$s = array_shift( $a );
+		$s = substr( $s, 1 );
+
+		# Match a link having the form [[namespace:link|alternate]]trail
+		static $e1 = FALSE;
+		if ( !$e1 ) { $e1 = "/^([{$tc}]+)(?:\\|(.+?))?]](.*)\$/sD"; }
+		# Match cases where there is no "]]", which might still be images
+		static $e1_img = FALSE;
+		if ( !$e1_img ) { $e1_img = "/^([{$tc}]+)\\|(.*)\$/sD"; }
+		# Match the end of a line for a word that's not followed by whitespace,
+		# e.g. in the case of 'The Arab al[[Razi]]', 'al' will be matched
+		$e2 = wfMsgForContent( 'linkprefix' );
+
+		$useLinkPrefixExtension = $wgContLang->linkPrefixExtension();
+		if( is_null( $this->mTitle ) ) {
+			throw new MWException( __METHOD__.": \$this->mTitle is null\n" );
+		}
+		$nottalk = !$this->mTitle->isTalkPage();
+
+		if ( $useLinkPrefixExtension ) {
+			$m = array();
+			if ( preg_match( $e2, $s, $m ) ) {
+				$first_prefix = $m[2];
+			} else {
+				$first_prefix = false;
+			}
+		} else {
+			$prefix = '';
+		}
+
+		if($wgContLang->hasVariants()) {
+			$selflink = $wgContLang->convertLinkToAllVariants($this->mTitle->getPrefixedText());
+		} else {
+			$selflink = array($this->mTitle->getPrefixedText());
+		}
+		$useSubpages = $this->areSubpagesAllowed();
+		wfProfileOut( $fname.'-setup' );
+
+		# Loop for each link
+		for ($k = 0; isset( $a[$k] ); $k++) {
+			$line = $a[$k];
+			if ( $useLinkPrefixExtension ) {
+				wfProfileIn( $fname.'-prefixhandling' );
+				if ( preg_match( $e2, $s, $m ) ) {
+					$prefix = $m[2];
+					$s = $m[1];
+				} else {
+					$prefix='';
+				}
+				# first link
+				if($first_prefix) {
+					$prefix = $first_prefix;
+					$first_prefix = false;
+				}
+				wfProfileOut( $fname.'-prefixhandling' );
+			}
+
+			$might_be_img = false;
+
+			wfProfileIn( "$fname-e1" );
+			if ( preg_match( $e1, $line, $m ) ) { # page with normal text or alt
+				$text = $m[2];
+				# If we get a ] at the beginning of $m[3] that means we have a link that's something like:
+				# [[Image:Foo.jpg|[http://example.com desc]]] <- having three ] in a row fucks up,
+				# the real problem is with the $e1 regex
+				# See bug 1300.
+				#
+				# Still some problems for cases where the ] is meant to be outside punctuation,
+				# and no image is in sight. See bug 2095.
+				#
+				if( $text !== '' &&
+					substr( $m[3], 0, 1 ) === ']' &&
+					strpos($text, '[') !== false
+				)
+				{
+					$text .= ']'; # so that replaceExternalLinks($text) works later
+					$m[3] = substr( $m[3], 1 );
+				}
+				# fix up urlencoded title texts
+				if( strpos( $m[1], '%' ) !== false ) {
+					# Should anchors '#' also be rejected?
+					$m[1] = str_replace( array('<', '>'), array('&lt;', '&gt;'), urldecode($m[1]) );
+				}
+				$trail = $m[3];
+			} elseif( preg_match($e1_img, $line, $m) ) { # Invalid, but might be an image with a link in its caption
+				$might_be_img = true;
+				$text = $m[2];
+				if ( strpos( $m[1], '%' ) !== false ) {
+					$m[1] = urldecode($m[1]);
+				}
+				$trail = "";
+			} else { # Invalid form; output directly
+				$s .= $prefix . '[[' . $line ;
+				wfProfileOut( "$fname-e1" );
+				continue;
+			}
+			wfProfileOut( "$fname-e1" );
+			wfProfileIn( "$fname-misc" );
+
+			# Don't allow internal links to pages containing
+			# PROTO: where PROTO is a valid URL protocol; these
+			# should be external links.
+			if (preg_match('/^\b(?:' . wfUrlProtocols() . ')/', $m[1])) {
+				$s .= $prefix . '[[' . $line ;
+				continue;
+			}
+
+			# Make subpage if necessary
+			if( $useSubpages ) {
+				$link = $this->maybeDoSubpageLink( $m[1], $text );
+			} else {
+				$link = $m[1];
+			}
+
+			$noforce = (substr($m[1], 0, 1) != ':');
+			if (!$noforce) {
+				# Strip off leading ':'
+				$link = substr($link, 1);
+			}
+
+			wfProfileOut( "$fname-misc" );
+			wfProfileIn( "$fname-title" );
+			$nt = Title::newFromText( $this->mStripState->unstripNoWiki($link) );
+			if( !$nt ) {
+				$s .= $prefix . '[[' . $line;
+				wfProfileOut( "$fname-title" );
+				continue;
+			}
+
+			$ns = $nt->getNamespace();
+			$iw = $nt->getInterWiki();
+			wfProfileOut( "$fname-title" );
+
+			if ($might_be_img) { # if this is actually an invalid link
+				wfProfileIn( "$fname-might_be_img" );
+				if ($ns == NS_IMAGE && $noforce) { #but might be an image
+					$found = false;
+					while (isset ($a[$k+1]) ) {
+						#look at the next 'line' to see if we can close it there
+						$spliced = array_splice( $a, $k + 1, 1 );
+						$next_line = array_shift( $spliced );
+						$m = explode( ']]', $next_line, 3 );
+						if ( count( $m ) == 3 ) {
+							# the first ]] closes the inner link, the second the image
+							$found = true;
+							$text .= "[[{$m[0]}]]{$m[1]}";
+							$trail = $m[2];
+							break;
+						} elseif ( count( $m ) == 2 ) {
+							#if there's exactly one ]] that's fine, we'll keep looking
+							$text .= "[[{$m[0]}]]{$m[1]}";
+						} else {
+							#if $next_line is invalid too, we need look no further
+							$text .= '[[' . $next_line;
+							break;
+						}
+					}
+					if ( !$found ) {
+						# we couldn't find the end of this imageLink, so output it raw
+						#but don't ignore what might be perfectly normal links in the text we've examined
+						$text = $this->replaceInternalLinks($text);
+						$s .= "{$prefix}[[$link|$text";
+						# note: no $trail, because without an end, there *is* no trail
+						wfProfileOut( "$fname-might_be_img" );
+						continue;
+					}
+				} else { #it's not an image, so output it raw
+					$s .= "{$prefix}[[$link|$text";
+					# note: no $trail, because without an end, there *is* no trail
+					wfProfileOut( "$fname-might_be_img" );
+					continue;
+				}
+				wfProfileOut( "$fname-might_be_img" );
+			}
+
+			$wasblank = ( '' == $text );
+			if( $wasblank ) $text = $link;
+
+			# Link not escaped by : , create the various objects
+			if( $noforce ) {
+
+				# Interwikis
+				wfProfileIn( "$fname-interwiki" );
+				if( $iw && $this->mOptions->getInterwikiMagic() && $nottalk && $wgContLang->getLanguageName( $iw ) ) {
+					$this->mOutput->addLanguageLink( $nt->getFullText() );
+					$s = rtrim($s . $prefix);
+					$s .= trim($trail, "\n") == '' ? '': $prefix . $trail;
+					wfProfileOut( "$fname-interwiki" );
+					continue;
+				}
+				wfProfileOut( "$fname-interwiki" );
+
+				if ( $ns == NS_IMAGE ) {
+					wfProfileIn( "$fname-image" );
+					if ( !wfIsBadImage( $nt->getDBkey(), $this->mTitle ) ) {
+						# recursively parse links inside the image caption
+						# actually, this will parse them in any other parameters, too,
+						# but it might be hard to fix that, and it doesn't matter ATM
+						$text = $this->replaceExternalLinks($text);
+						$text = $this->replaceInternalLinks($text);
+
+						# cloak any absolute URLs inside the image markup, so replaceExternalLinks() won't touch them
+						$s .= $prefix . $this->armorLinks( $this->makeImage( $nt, $text ) ) . $trail;
+						$this->mOutput->addImage( $nt->getDBkey() );
+
+						wfProfileOut( "$fname-image" );
+						continue;
+					} else {
+						# We still need to record the image's presence on the page
+						$this->mOutput->addImage( $nt->getDBkey() );
+					}
+					wfProfileOut( "$fname-image" );
+
+				}
+
+				if ( $ns == NS_CATEGORY ) {
+					wfProfileIn( "$fname-category" );
+					$s = rtrim($s . "\n"); # bug 87
+
+					if ( $wasblank ) {
+						$sortkey = $this->getDefaultSort();
+					} else {
+						$sortkey = $text;
+					}
+					$sortkey = Sanitizer::decodeCharReferences( $sortkey );
+					$sortkey = str_replace( "\n", '', $sortkey );
+					$sortkey = $wgContLang->convertCategoryKey( $sortkey );
+					$this->mOutput->addCategory( $nt->getDBkey(), $sortkey );
+
+					/**
+					 * Strip the whitespace Category links produce, see bug 87
+					 * @todo We might want to use trim($tmp, "\n") here.
+					 */
+					$s .= trim($prefix . $trail, "\n") == '' ? '': $prefix . $trail;
+
+					wfProfileOut( "$fname-category" );
+					continue;
+				}
+			}
+
+			# Self-link checking
+			if( $nt->getFragment() === '' ) {
+				if( in_array( $nt->getPrefixedText(), $selflink, true ) ) {
+					$s .= $prefix . $sk->makeSelfLinkObj( $nt, $text, '', $trail );
+					continue;
+				}
+			}
+
+			# Special and Media are pseudo-namespaces; no pages actually exist in them
+			if( $ns == NS_MEDIA ) {
+				$link = $sk->makeMediaLinkObj( $nt, $text );
+				# Cloak with NOPARSE to avoid replacement in replaceExternalLinks
+				$s .= $prefix . $this->armorLinks( $link ) . $trail;
+				$this->mOutput->addImage( $nt->getDBkey() );
+				continue;
+			} elseif( $ns == NS_SPECIAL ) {
+				$s .= $this->makeKnownLinkHolder( $nt, $text, '', $trail, $prefix );
+				continue;
+			} elseif( $ns == NS_IMAGE ) {
+				$img = new Image( $nt );
+				if( $img->exists() ) {
+					// Force a blue link if the file exists; may be a remote
+					// upload on the shared repository, and we want to see its
+					// auto-generated page.
+					$s .= $this->makeKnownLinkHolder( $nt, $text, '', $trail, $prefix );
+					$this->mOutput->addLink( $nt );
+					continue;
+				}
+			}
+			$s .= $this->makeLinkHolder( $nt, $text, '', $trail, $prefix );
+		}
+		wfProfileOut( $fname );
+		return $s;
+	}
+
+	/**
+	 * Make a link placeholder. The text returned can be later resolved to a real link with
+	 * replaceLinkHolders(). This is done for two reasons: firstly to avoid further
+	 * parsing of interwiki links, and secondly to allow all existence checks and
+	 * article length checks (for stub links) to be bundled into a single query.
+	 *
+	 */
+	function makeLinkHolder( &$nt, $text = '', $query = '', $trail = '', $prefix = '' ) {
+		wfProfileIn( __METHOD__ );
+		if ( ! is_object($nt) ) {
+			# Fail gracefully
+			$retVal = "<!-- ERROR -->{$prefix}{$text}{$trail}";
+		} else {
+			# Separate the link trail from the rest of the link
+			list( $inside, $trail ) = Linker::splitTrail( $trail );
+
+			if ( $nt->isExternal() ) {
+				$nr = array_push( $this->mInterwikiLinkHolders['texts'], $prefix.$text.$inside );
+				$this->mInterwikiLinkHolders['titles'][] = $nt;
+				$retVal = '<!--IWLINK '. ($nr-1) ."-->{$trail}";
+			} else {
+				$nr = array_push( $this->mLinkHolders['namespaces'], $nt->getNamespace() );
+				$this->mLinkHolders['dbkeys'][] = $nt->getDBkey();
+				$this->mLinkHolders['queries'][] = $query;
+				$this->mLinkHolders['texts'][] = $prefix.$text.$inside;
+				$this->mLinkHolders['titles'][] = $nt;
+
+				$retVal = '<!--LINK '. ($nr-1) ."-->{$trail}";
+			}
+		}
+		wfProfileOut( __METHOD__ );
+		return $retVal;
+	}
+
+	/**
+	 * Render a forced-blue link inline; protect against double expansion of
+	 * URLs if we're in a mode that prepends full URL prefixes to internal links.
+	 * Since this little disaster has to split off the trail text to avoid
+	 * breaking URLs in the following text without breaking trails on the
+	 * wiki links, it's been made into a horrible function.
+	 *
+	 * @param Title $nt
+	 * @param string $text
+	 * @param string $query
+	 * @param string $trail
+	 * @param string $prefix
+	 * @return string HTML-wikitext mix oh yuck
+	 */
+	function makeKnownLinkHolder( $nt, $text = '', $query = '', $trail = '', $prefix = '' ) {
+		list( $inside, $trail ) = Linker::splitTrail( $trail );
+		$sk = $this->mOptions->getSkin();
+		$link = $sk->makeKnownLinkObj( $nt, $text, $query, $inside, $prefix );
+		return $this->armorLinks( $link ) . $trail;
+	}
+
+	/**
+	 * Insert a NOPARSE hacky thing into any inline links in a chunk that's
+	 * going to go through further parsing steps before inline URL expansion.
+	 *
+	 * In particular this is important when using action=render, which causes
+	 * full URLs to be included.
+	 *
+	 * Oh man I hate our multi-layer parser!
+	 *
+	 * @param string more-or-less HTML
+	 * @return string less-or-more HTML with NOPARSE bits
+	 */
+	function armorLinks( $text ) {
+		return preg_replace( '/\b(' . wfUrlProtocols() . ')/',
+			"{$this->mUniqPrefix}NOPARSE$1", $text );
+	}
+
+	/**
+	 * Return true if subpage links should be expanded on this page.
+	 * @return bool
+	 */
+	function areSubpagesAllowed() {
+		# Some namespaces don't allow subpages
+		global $wgNamespacesWithSubpages;
+		return !empty($wgNamespacesWithSubpages[$this->mTitle->getNamespace()]);
+	}
+
+	/**
+	 * Handle link to subpage if necessary
+	 * @param string $target the source of the link
+	 * @param string &$text the link text, modified as necessary
+	 * @return string the full name of the link
+	 * @private
+	 */
+	function maybeDoSubpageLink($target, &$text) {
+		# Valid link forms:
+		# Foobar -- normal
+		# :Foobar -- override special treatment of prefix (images, language links)
+		# /Foobar -- convert to CurrentPage/Foobar
+		# /Foobar/ -- convert to CurrentPage/Foobar, strip the initial / from text
+		# ../ -- convert to CurrentPage, from CurrentPage/CurrentSubPage
+		# ../Foobar -- convert to CurrentPage/Foobar, from CurrentPage/CurrentSubPage
+
+		$fname = 'Parser::maybeDoSubpageLink';
+		wfProfileIn( $fname );
+		$ret = $target; # default return value is no change
+
+		# bug 7425
+		$target = trim( $target );
+
+		# Some namespaces don't allow subpages,
+		# so only perform processing if subpages are allowed
+		if( $this->areSubpagesAllowed() ) {
+			# Look at the first character
+			if( $target != '' && $target{0} == '/' ) {
+				# / at end means we don't want the slash to be shown
+				$trailingSlashes = preg_match_all( '%(/+)$%', $target, $m );
+				if( $trailingSlashes ) {
+					$noslash = $target = substr( $target, 1, -strlen($m[0][0]) );
+				} else {
+					$noslash = substr( $target, 1 );
+				}
+
+				$ret = $this->mTitle->getPrefixedText(). '/' . trim($noslash);
+				if( '' === $text ) {
+					$text = $target;
+				} # this might be changed for ugliness reasons
+			} else {
+				# check for .. subpage backlinks
+				$dotdotcount = 0;
+				$nodotdot = $target;
+				while( strncmp( $nodotdot, "../", 3 ) == 0 ) {
+					++$dotdotcount;
+					$nodotdot = substr( $nodotdot, 3 );
+				}
+				if($dotdotcount > 0) {
+					$exploded = explode( '/', $this->mTitle->GetPrefixedText() );
+					if( count( $exploded ) > $dotdotcount ) { # not allowed to go below top level page
+						$ret = implode( '/', array_slice( $exploded, 0, -$dotdotcount ) );
+						# / at the end means don't show full path
+						if( substr( $nodotdot, -1, 1 ) == '/' ) {
+							$nodotdot = substr( $nodotdot, 0, -1 );
+							if( '' === $text ) {
+								$text = $nodotdot;
+							}
+						}
+						$nodotdot = trim( $nodotdot );
+						if( $nodotdot != '' ) {
+							$ret .= '/' . $nodotdot;
+						}
+					}
+				}
+			}
+		}
+
+		wfProfileOut( $fname );
+		return $ret;
+	}
+
+	/**#@+
+	 * Used by doBlockLevels()
+	 * @private
+	 */
+	/* private */ function closeParagraph() {
+		$result = '';
+		if ( '' != $this->mLastSection ) {
+			$result = '</' . $this->mLastSection  . ">\n";
+		}
+		$this->mInPre = false;
+		$this->mLastSection = '';
+		return $result;
+	}
+	# getCommon() returns the length of the longest common substring
+	# of both arguments, starting at the beginning of both.
+	#
+	/* private */ function getCommon( $st1, $st2 ) {
+		$fl = strlen( $st1 );
+		$shorter = strlen( $st2 );
+		if ( $fl < $shorter ) { $shorter = $fl; }
+
+		for ( $i = 0; $i < $shorter; ++$i ) {
+			if ( $st1{$i} != $st2{$i} ) { break; }
+		}
+		return $i;
+	}
+	# These next three functions open, continue, and close the list
+	# element appropriate to the prefix character passed into them.
+	#
+	/* private */ function openList( $char ) {
+		$result = $this->closeParagraph();
+
+		if ( '*' == $char ) { $result .= '<ul><li>'; }
+		else if ( '#' == $char ) { $result .= '<ol><li>'; }
+		else if ( ':' == $char ) { $result .= '<dl><dd>'; }
+		else if ( ';' == $char ) {
+			$result .= '<dl><dt>';
+			$this->mDTopen = true;
+		}
+		else { $result = '<!-- ERR 1 -->'; }
+
+		return $result;
+	}
+
+	/* private */ function nextItem( $char ) {
+		if ( '*' == $char || '#' == $char ) { return '</li><li>'; }
+		else if ( ':' == $char || ';' == $char ) {
+			$close = '</dd>';
+			if ( $this->mDTopen ) { $close = '</dt>'; }
+			if ( ';' == $char ) {
+				$this->mDTopen = true;
+				return $close . '<dt>';
+			} else {
+				$this->mDTopen = false;
+				return $close . '<dd>';
+			}
+		}
+		return '<!-- ERR 2 -->';
+	}
+
+	/* private */ function closeList( $char ) {
+		if ( '*' == $char ) { $text = '</li></ul>'; }
+		else if ( '#' == $char ) { $text = '</li></ol>'; }
+		else if ( ':' == $char ) {
+			if ( $this->mDTopen ) {
+				$this->mDTopen = false;
+				$text = '</dt></dl>';
+			} else {
+				$text = '</dd></dl>';
+			}
+		}
+		else {	return '<!-- ERR 3 -->'; }
+		return $text."\n";
+	}
+	/**#@-*/
+
+	/**
+	 * Make lists from lines starting with ':', '*', '#', etc.
+	 *
+	 * @private
+	 * @return string the lists rendered as HTML
+	 */
+	function doBlockLevels( $text, $linestart ) {
+		$fname = 'Parser::doBlockLevels';
+		wfProfileIn( $fname );
+
+		# Parsing through the text line by line.  The main thing
+		# happening here is handling of block-level elements p, pre,
+		# and making lists from lines starting with * # : etc.
+		#
+		$textLines = explode( "\n", $text );
+
+		$lastPrefix = $output = '';
+		$this->mDTopen = $inBlockElem = false;
+		$prefixLength = 0;
+		$paragraphStack = false;
+
+		if ( !$linestart ) {
+			$output .= array_shift( $textLines );
+		}
+		foreach ( $textLines as $oLine ) {
+			$lastPrefixLength = strlen( $lastPrefix );
+			$preCloseMatch = preg_match('/<\\/pre/i', $oLine );
+			$preOpenMatch = preg_match('/<pre/i', $oLine );
+			if ( !$this->mInPre ) {
+				# Multiple prefixes may abut each other for nested lists.
+				$prefixLength = strspn( $oLine, '*#:;' );
+				$pref = substr( $oLine, 0, $prefixLength );
+
+				# eh?
+				$pref2 = str_replace( ';', ':', $pref );
+				$t = substr( $oLine, $prefixLength );
+				$this->mInPre = !empty($preOpenMatch);
+			} else {
+				# Don't interpret any other prefixes in preformatted text
+				$prefixLength = 0;
+				$pref = $pref2 = '';
+				$t = $oLine;
+			}
+
+			# List generation
+			if( $prefixLength && 0 == strcmp( $lastPrefix, $pref2 ) ) {
+				# Same as the last item, so no need to deal with nesting or opening stuff
+				$output .= $this->nextItem( substr( $pref, -1 ) );
+				$paragraphStack = false;
+
+				if ( substr( $pref, -1 ) == ';') {
+					# The one nasty exception: definition lists work like this:
+					# ; title : definition text
+					# So we check for : in the remainder text to split up the
+					# title and definition, without b0rking links.
+					$term = $t2 = '';
+					if ($this->findColonNoLinks($t, $term, $t2) !== false) {
+						$t = $t2;
+						$output .= $term . $this->nextItem( ':' );
+					}
+				}
+			} elseif( $prefixLength || $lastPrefixLength ) {
+				# Either open or close a level...
+				$commonPrefixLength = $this->getCommon( $pref, $lastPrefix );
+				$paragraphStack = false;
+
+				while( $commonPrefixLength < $lastPrefixLength ) {
+					$output .= $this->closeList( $lastPrefix{$lastPrefixLength-1} );
+					--$lastPrefixLength;
+				}
+				if ( $prefixLength <= $commonPrefixLength && $commonPrefixLength > 0 ) {
+					$output .= $this->nextItem( $pref{$commonPrefixLength-1} );
+				}
+				while ( $prefixLength > $commonPrefixLength ) {
+					$char = substr( $pref, $commonPrefixLength, 1 );
+					$output .= $this->openList( $char );
+
+					if ( ';' == $char ) {
+						# FIXME: This is dupe of code above
+						if ($this->findColonNoLinks($t, $term, $t2) !== false) {
+							$t = $t2;
+							$output .= $term . $this->nextItem( ':' );
+						}
+					}
+					++$commonPrefixLength;
+				}
+				$lastPrefix = $pref2;
+			}
+			if( 0 == $prefixLength ) {
+				wfProfileIn( "$fname-paragraph" );
+				# No prefix (not in list)--go to paragraph mode
+				// XXX: use a stack for nestable elements like span, table and div
+				$openmatch = preg_match('/(?:<table|<blockquote|<h1|<h2|<h3|<h4|<h5|<h6|<pre|<tr|<p|<ul|<ol|<li|<\\/tr|<\\/td|<\\/th)/iS', $t );
+				$closematch = preg_match(
+					'/(?:<\\/table|<\\/blockquote|<\\/h1|<\\/h2|<\\/h3|<\\/h4|<\\/h5|<\\/h6|'.
+					'<td|<th|<\\/?div|<hr|<\\/pre|<\\/p|'.$this->mUniqPrefix.'-pre|<\\/li|<\\/ul|<\\/ol|<\\/?center)/iS', $t );
+				if ( $openmatch or $closematch ) {
+					$paragraphStack = false;
+					# TODO bug 5718: paragraph closed
+					$output .= $this->closeParagraph();
+					if ( $preOpenMatch and !$preCloseMatch ) {
+						$this->mInPre = true;
+					}
+					if ( $closematch ) {
+						$inBlockElem = false;
+					} else {
+						$inBlockElem = true;
+					}
+				} else if ( !$inBlockElem && !$this->mInPre ) {
+					if ( ' ' == $t{0} and ( $this->mLastSection == 'pre' or trim($t) != '' ) ) {
+						// pre
+						if ($this->mLastSection != 'pre') {
+							$paragraphStack = false;
+							$output .= $this->closeParagraph().'<pre class="_fck_mw_lspace">';
+							$this->mLastSection = 'pre';
+						}
+						$t = substr( $t, 1 );
+					} else {
+						// paragraph
+						if ( '' == trim($t) ) {
+							if ( $paragraphStack ) {
+								$output .= $paragraphStack.'<br />';
+								$paragraphStack = false;
+								$this->mLastSection = 'p';
+							} else {
+								if ($this->mLastSection != 'p' ) {
+									$output .= $this->closeParagraph();
+									$this->mLastSection = '';
+									$paragraphStack = '<p>';
+								} else {
+									$paragraphStack = '</p><p>';
+								}
+							}
+						} else {
+							if ( $paragraphStack ) {
+								$output .= $paragraphStack;
+								$paragraphStack = false;
+								$this->mLastSection = 'p';
+							} else if ($this->mLastSection != 'p') {
+								$output .= $this->closeParagraph().'<p>';
+								$this->mLastSection = 'p';
+							}
+						}
+					}
+				}
+				wfProfileOut( "$fname-paragraph" );
+			}
+			// somewhere above we forget to get out of pre block (bug 785)
+			if($preCloseMatch && $this->mInPre) {
+				$this->mInPre = false;
+			}
+			if ($paragraphStack === false) {
+				$output .= $t."\n";
+			}
+		}
+		while ( $prefixLength ) {
+			$output .= $this->closeList( $pref2{$prefixLength-1} );
+			--$prefixLength;
+		}
+		if ( '' != $this->mLastSection ) {
+			$output .= '</' . $this->mLastSection . '>';
+			$this->mLastSection = '';
+		}
+
+		wfProfileOut( $fname );
+		return $output;
+	}
+
+	/**
+	 * Split up a string on ':', ignoring any occurences inside tags
+	 * to prevent illegal overlapping.
+	 * @param string $str the string to split
+	 * @param string &$before set to everything before the ':'
+	 * @param string &$after set to everything after the ':'
+	 * return string the position of the ':', or false if none found
+	 */
+	function findColonNoLinks($str, &$before, &$after) {
+		$fname = 'Parser::findColonNoLinks';
+		wfProfileIn( $fname );
+
+		$pos = strpos( $str, ':' );
+		if( $pos === false ) {
+			// Nothing to find!
+			wfProfileOut( $fname );
+			return false;
+		}
+
+		$lt = strpos( $str, '<' );
+		if( $lt === false || $lt > $pos ) {
+			// Easy; no tag nesting to worry about
+			$before = substr( $str, 0, $pos );
+			$after = substr( $str, $pos+1 );
+			wfProfileOut( $fname );
+			return $pos;
+		}
+
+		// Ugly state machine to walk through avoiding tags.
+		$state = MW_COLON_STATE_TEXT;
+		$stack = 0;
+		$len = strlen( $str );
+		for( $i = 0; $i < $len; $i++ ) {
+			$c = $str{$i};
+
+			switch( $state ) {
+			// (Using the number is a performance hack for common cases)
+			case 0: // MW_COLON_STATE_TEXT:
+				switch( $c ) {
+				case "<":
+					// Could be either a <start> tag or an </end> tag
+					$state = MW_COLON_STATE_TAGSTART;
+					break;
+				case ":":
+					if( $stack == 0 ) {
+						// We found it!
+						$before = substr( $str, 0, $i );
+						$after = substr( $str, $i + 1 );
+						wfProfileOut( $fname );
+						return $i;
+					}
+					// Embedded in a tag; don't break it.
+					break;
+				default:
+					// Skip ahead looking for something interesting
+					$colon = strpos( $str, ':', $i );
+					if( $colon === false ) {
+						// Nothing else interesting
+						wfProfileOut( $fname );
+						return false;
+					}
+					$lt = strpos( $str, '<', $i );
+					if( $stack === 0 ) {
+						if( $lt === false || $colon < $lt ) {
+							// We found it!
+							$before = substr( $str, 0, $colon );
+							$after = substr( $str, $colon + 1 );
+							wfProfileOut( $fname );
+							return $i;
+						}
+					}
+					if( $lt === false ) {
+						// Nothing else interesting to find; abort!
+						// We're nested, but there's no close tags left. Abort!
+						break 2;
+					}
+					// Skip ahead to next tag start
+					$i = $lt;
+					$state = MW_COLON_STATE_TAGSTART;
+				}
+				break;
+			case 1: // MW_COLON_STATE_TAG:
+				// In a <tag>
+				switch( $c ) {
+				case ">":
+					$stack++;
+					$state = MW_COLON_STATE_TEXT;
+					break;
+				case "/":
+					// Slash may be followed by >?
+					$state = MW_COLON_STATE_TAGSLASH;
+					break;
+				default:
+					// ignore
+				}
+				break;
+			case 2: // MW_COLON_STATE_TAGSTART:
+				switch( $c ) {
+				case "/":
+					$state = MW_COLON_STATE_CLOSETAG;
+					break;
+				case "!":
+					$state = MW_COLON_STATE_COMMENT;
+					break;
+				case ">":
+					// Illegal early close? This shouldn't happen D:
+					$state = MW_COLON_STATE_TEXT;
+					break;
+				default:
+					$state = MW_COLON_STATE_TAG;
+				}
+				break;
+			case 3: // MW_COLON_STATE_CLOSETAG:
+				// In a </tag>
+				if( $c == ">" ) {
+					$stack--;
+					if( $stack < 0 ) {
+						wfDebug( "Invalid input in $fname; too many close tags\n" );
+						wfProfileOut( $fname );
+						return false;
+					}
+					$state = MW_COLON_STATE_TEXT;
+				}
+				break;
+			case MW_COLON_STATE_TAGSLASH:
+				if( $c == ">" ) {
+					// Yes, a self-closed tag <blah/>
+					$state = MW_COLON_STATE_TEXT;
+				} else {
+					// Probably we're jumping the gun, and this is an attribute
+					$state = MW_COLON_STATE_TAG;
+				}
+				break;
+			case 5: // MW_COLON_STATE_COMMENT:
+				if( $c == "-" ) {
+					$state = MW_COLON_STATE_COMMENTDASH;
+				}
+				break;
+			case MW_COLON_STATE_COMMENTDASH:
+				if( $c == "-" ) {
+					$state = MW_COLON_STATE_COMMENTDASHDASH;
+				} else {
+					$state = MW_COLON_STATE_COMMENT;
+				}
+				break;
+			case MW_COLON_STATE_COMMENTDASHDASH:
+				if( $c == ">" ) {
+					$state = MW_COLON_STATE_TEXT;
+				} else {
+					$state = MW_COLON_STATE_COMMENT;
+				}
+				break;
+			default:
+				throw new MWException( "State machine error in $fname" );
+			}
+		}
+		if( $stack > 0 ) {
+			wfDebug( "Invalid input in $fname; not enough close tags (stack $stack, state $state)\n" );
+			return false;
+		}
+		wfProfileOut( $fname );
+		return false;
+	}
+
+	/**
+	 * Return value of a magic variable (like PAGENAME)
+	 *
+	 * @private
+	 */
+	function getVariableValue( $index ) {
+		global $wgContLang, $wgSitename, $wgServer, $wgServerName, $wgScriptPath;
+
+		/**
+		 * Some of these require message or data lookups and can be
+		 * expensive to check many times.
+		 */
+		static $varCache = array();
+		if ( wfRunHooks( 'ParserGetVariableValueVarCache', array( &$this, &$varCache ) ) ) {
+			if ( isset( $varCache[$index] ) ) {
+				return $varCache[$index];
+			}
+		}
+
+		$ts = time();
+		wfRunHooks( 'ParserGetVariableValueTs', array( &$this, &$ts ) );
+
+		# Use the time zone
+		global $wgLocaltimezone;
+		if ( isset( $wgLocaltimezone ) ) {
+			$oldtz = getenv( 'TZ' );
+			putenv( 'TZ='.$wgLocaltimezone );
+		}
+		$localTimestamp = date( 'YmdHis', $ts );
+		$localMonth = date( 'm', $ts );
+		$localMonthName = date( 'n', $ts );
+		$localDay = date( 'j', $ts );
+		$localDay2 = date( 'd', $ts );
+		$localDayOfWeek = date( 'w', $ts );
+		$localWeek = date( 'W', $ts );
+		$localYear = date( 'Y', $ts );
+		$localHour = date( 'H', $ts );
+		if ( isset( $wgLocaltimezone ) ) {
+			putenv( 'TZ='.$oldtz );
+		}
+
+		switch ( $index ) {
+			case 'currentmonth':
+				return $varCache[$index] = $wgContLang->formatNum( date( 'm', $ts ) );
+			case 'currentmonthname':
+				return $varCache[$index] = $wgContLang->getMonthName( date( 'n', $ts ) );
+			case 'currentmonthnamegen':
+				return $varCache[$index] = $wgContLang->getMonthNameGen( date( 'n', $ts ) );
+			case 'currentmonthabbrev':
+				return $varCache[$index] = $wgContLang->getMonthAbbreviation( date( 'n', $ts ) );
+			case 'currentday':
+				return $varCache[$index] = $wgContLang->formatNum( date( 'j', $ts ) );
+			case 'currentday2':
+				return $varCache[$index] = $wgContLang->formatNum( date( 'd', $ts ) );
+			case 'localmonth':
+				return $varCache[$index] = $wgContLang->formatNum( $localMonth );
+			case 'localmonthname':
+				return $varCache[$index] = $wgContLang->getMonthName( $localMonthName );
+			case 'localmonthnamegen':
+				return $varCache[$index] = $wgContLang->getMonthNameGen( $localMonthName );
+			case 'localmonthabbrev':
+				return $varCache[$index] = $wgContLang->getMonthAbbreviation( $localMonthName );
+			case 'localday':
+				return $varCache[$index] = $wgContLang->formatNum( $localDay );
+			case 'localday2':
+				return $varCache[$index] = $wgContLang->formatNum( $localDay2 );
+			case 'pagename':
+				return $this->mTitle->getText();
+			case 'pagenamee':
+				return $this->mTitle->getPartialURL();
+			case 'fullpagename':
+				return $this->mTitle->getPrefixedText();
+			case 'fullpagenamee':
+				return $this->mTitle->getPrefixedURL();
+			case 'subpagename':
+				return $this->mTitle->getSubpageText();
+			case 'subpagenamee':
+				return $this->mTitle->getSubpageUrlForm();
+			case 'basepagename':
+				return $this->mTitle->getBaseText();
+			case 'basepagenamee':
+				return wfUrlEncode( str_replace( ' ', '_', $this->mTitle->getBaseText() ) );
+			case 'talkpagename':
+				if( $this->mTitle->canTalk() ) {
+					$talkPage = $this->mTitle->getTalkPage();
+					return $talkPage->getPrefixedText();
+				} else {
+					return '';
+				}
+			case 'talkpagenamee':
+				if( $this->mTitle->canTalk() ) {
+					$talkPage = $this->mTitle->getTalkPage();
+					return $talkPage->getPrefixedUrl();
+				} else {
+					return '';
+				}
+			case 'subjectpagename':
+				$subjPage = $this->mTitle->getSubjectPage();
+				return $subjPage->getPrefixedText();
+			case 'subjectpagenamee':
+				$subjPage = $this->mTitle->getSubjectPage();
+				return $subjPage->getPrefixedUrl();
+			case 'revisionid':
+				return $this->mRevisionId;
+			case 'revisionday':
+				return intval( substr( $this->getRevisionTimestamp(), 6, 2 ) );
+			case 'revisionday2':
+				return substr( $this->getRevisionTimestamp(), 6, 2 );
+			case 'revisionmonth':
+				return intval( substr( $this->getRevisionTimestamp(), 4, 2 ) );
+			case 'revisionyear':
+				return substr( $this->getRevisionTimestamp(), 0, 4 );
+			case 'revisiontimestamp':
+				return $this->getRevisionTimestamp();
+			case 'namespace':
+				return str_replace('_',' ',$wgContLang->getNsText( $this->mTitle->getNamespace() ) );
+			case 'namespacee':
+				return wfUrlencode( $wgContLang->getNsText( $this->mTitle->getNamespace() ) );
+			case 'talkspace':
+				return $this->mTitle->canTalk() ? str_replace('_',' ',$this->mTitle->getTalkNsText()) : '';
+			case 'talkspacee':
+				return $this->mTitle->canTalk() ? wfUrlencode( $this->mTitle->getTalkNsText() ) : '';
+			case 'subjectspace':
+				return $this->mTitle->getSubjectNsText();
+			case 'subjectspacee':
+				return( wfUrlencode( $this->mTitle->getSubjectNsText() ) );
+			case 'currentdayname':
+				return $varCache[$index] = $wgContLang->getWeekdayName( date( 'w', $ts ) + 1 );
+			case 'currentyear':
+				return $varCache[$index] = $wgContLang->formatNum( date( 'Y', $ts ), true );
+			case 'currenttime':
+				return $varCache[$index] = $wgContLang->time( wfTimestamp( TS_MW, $ts ), false, false );
+			case 'currenthour':
+				return $varCache[$index] = $wgContLang->formatNum( date( 'H', $ts ), true );
+			case 'currentweek':
+				// @bug 4594 PHP5 has it zero padded, PHP4 does not, cast to
+				// int to remove the padding
+				return $varCache[$index] = $wgContLang->formatNum( (int)date( 'W', $ts ) );
+			case 'currentdow':
+				return $varCache[$index] = $wgContLang->formatNum( date( 'w', $ts ) );
+			case 'localdayname':
+				return $varCache[$index] = $wgContLang->getWeekdayName( $localDayOfWeek + 1 );
+			case 'localyear':
+				return $varCache[$index] = $wgContLang->formatNum( $localYear, true );
+			case 'localtime':
+				return $varCache[$index] = $wgContLang->time( $localTimestamp, false, false );
+			case 'localhour':
+				return $varCache[$index] = $wgContLang->formatNum( $localHour, true );
+			case 'localweek':
+				// @bug 4594 PHP5 has it zero padded, PHP4 does not, cast to
+				// int to remove the padding
+				return $varCache[$index] = $wgContLang->formatNum( (int)$localWeek );
+			case 'localdow':
+				return $varCache[$index] = $wgContLang->formatNum( $localDayOfWeek );
+			case 'numberofarticles':
+				return $varCache[$index] = $wgContLang->formatNum( SiteStats::articles() );
+			case 'numberoffiles':
+				return $varCache[$index] = $wgContLang->formatNum( SiteStats::images() );
+			case 'numberofusers':
+				return $varCache[$index] = $wgContLang->formatNum( SiteStats::users() );
+			case 'numberofpages':
+				return $varCache[$index] = $wgContLang->formatNum( SiteStats::pages() );
+			case 'numberofadmins':
+				return $varCache[$index]  = $wgContLang->formatNum( SiteStats::admins() );
+			case 'numberofedits':
+				return $varCache[$index]  = $wgContLang->formatNum( SiteStats::edits() );
+			case 'currenttimestamp':
+				return $varCache[$index] = wfTimestampNow();
+			case 'localtimestamp':
+				return $varCache[$index] = $localTimestamp;
+			case 'currentversion':
+				return $varCache[$index] = SpecialVersion::getVersion();
+			case 'sitename':
+				return $wgSitename;
+			case 'server':
+				return $wgServer;
+			case 'servername':
+				return $wgServerName;
+			case 'scriptpath':
+				return $wgScriptPath;
+			case 'directionmark':
+				return $wgContLang->getDirMark();
+			case 'contentlanguage':
+				global $wgContLanguageCode;
+				return $wgContLanguageCode;
+			default:
+				$ret = null;
+				if ( wfRunHooks( 'ParserGetVariableValueSwitch', array( &$this, &$varCache, &$index, &$ret ) ) )
+					return $ret;
+				else
+					return null;
+		}
+	}
+
+	/**
+	 * initialise the magic variables (like CURRENTMONTHNAME)
+	 *
+	 * @private
+	 */
+	function initialiseVariables() {
+		$fname = 'Parser::initialiseVariables';
+		wfProfileIn( $fname );
+		$variableIDs = MagicWord::getVariableIDs();
+
+		$this->mVariables = array();
+		foreach ( $variableIDs as $id ) {
+			$mw =& MagicWord::get( $id );
+			$mw->addToArray( $this->mVariables, $id );
+		}
+		wfProfileOut( $fname );
+	}
+
+	/**
+	 * parse any parentheses in format ((title|part|part))
+	 * and call callbacks to get a replacement text for any found piece
+	 *
+	 * @param string $text The text to parse
+	 * @param array $callbacks rules in form:
+	 *     '{' => array(				# opening parentheses
+	 *					'end' => '}',   # closing parentheses
+	 *					'cb' => array(2 => callback,	# replacement callback to call if {{..}} is found
+	 *								  3 => callback 	# replacement callback to call if {{{..}}} is found
+	 *								  )
+	 *					)
+	 * 					'min' => 2,     # Minimum parenthesis count in cb
+	 * 					'max' => 3,     # Maximum parenthesis count in cb
+	 * @private
+	 */
+	function replace_callback ($text, $callbacks) {
+		wfProfileIn( __METHOD__ );
+		$openingBraceStack = array();	# this array will hold a stack of parentheses which are not closed yet
+		$lastOpeningBrace = -1;			# last not closed parentheses
+
+		$validOpeningBraces = implode( '', array_keys( $callbacks ) );
+
+		$i = 0;
+		while ( $i < strlen( $text ) ) {
+			# Find next opening brace, closing brace or pipe
+			if ( $lastOpeningBrace == -1 ) {
+				$currentClosing = '';
+				$search = $validOpeningBraces;
+			} else {
+				$currentClosing = $openingBraceStack[$lastOpeningBrace]['braceEnd'];
+				$search = $validOpeningBraces . '|' . $currentClosing;
+			}
+			$rule = null;
+			$i += strcspn( $text, $search, $i );
+			if ( $i < strlen( $text ) ) {
+				if ( $text[$i] == '|' ) {
+					$found = 'pipe';
+				} elseif ( $text[$i] == $currentClosing ) {
+					$found = 'close';
+				} elseif ( isset( $callbacks[$text[$i]] ) ) {
+					$found = 'open';
+					$rule = $callbacks[$text[$i]];
+				} else {
+					# Some versions of PHP have a strcspn which stops on null characters
+					# Ignore and continue
+					++$i;
+					continue;
+				}
+			} else {
+				# All done
+				break;
+			}
+
+			if ( $found == 'open' ) {
+				# found opening brace, let's add it to parentheses stack
+				$piece = array('brace' => $text[$i],
+							   'braceEnd' => $rule['end'],
+							   'title' => '',
+							   'parts' => null);
+
+				# count opening brace characters
+				$piece['count'] = strspn( $text, $piece['brace'], $i );
+				$piece['startAt'] = $piece['partStart'] = $i + $piece['count'];
+				$i += $piece['count'];
+
+				# we need to add to stack only if opening brace count is enough for one of the rules
+				if ( $piece['count'] >= $rule['min'] ) {
+					$lastOpeningBrace ++;
+					$openingBraceStack[$lastOpeningBrace] = $piece;
+				}
+			} elseif ( $found == 'close' ) {
+				# lets check if it is enough characters for closing brace
+				$maxCount = $openingBraceStack[$lastOpeningBrace]['count'];
+				$count = strspn( $text, $text[$i], $i, $maxCount );
+
+				# check for maximum matching characters (if there are 5 closing
+				# characters, we will probably need only 3 - depending on the rules)
+				$matchingCount = 0;
+				$matchingCallback = null;
+				$cbType = $callbacks[$openingBraceStack[$lastOpeningBrace]['brace']];
+				if ( $count > $cbType['max'] ) {
+					# The specified maximum exists in the callback array, unless the caller
+					# has made an error
+					$matchingCount = $cbType['max'];
+				} else {
+					# Count is less than the maximum
+					# Skip any gaps in the callback array to find the true largest match
+					# Need to use array_key_exists not isset because the callback can be null
+					$matchingCount = $count;
+					while ( $matchingCount > 0 && !array_key_exists( $matchingCount, $cbType['cb'] ) ) {
+						--$matchingCount;
+					}
+				}
+
+				if ($matchingCount <= 0) {
+					$i += $count;
+					continue;
+				}
+				$matchingCallback = $cbType['cb'][$matchingCount];
+
+				# let's set a title or last part (if '|' was found)
+				if (null === $openingBraceStack[$lastOpeningBrace]['parts']) {
+					$openingBraceStack[$lastOpeningBrace]['title'] =
+						substr($text, $openingBraceStack[$lastOpeningBrace]['partStart'],
+						$i - $openingBraceStack[$lastOpeningBrace]['partStart']);
+				} else {
+					$openingBraceStack[$lastOpeningBrace]['parts'][] =
+						substr($text, $openingBraceStack[$lastOpeningBrace]['partStart'],
+						$i - $openingBraceStack[$lastOpeningBrace]['partStart']);
+				}
+
+				$pieceStart = $openingBraceStack[$lastOpeningBrace]['startAt'] - $matchingCount;
+				$pieceEnd = $i + $matchingCount;
+
+				if( is_callable( $matchingCallback ) ) {
+					$cbArgs = array (
+									 'text' => substr($text, $pieceStart, $pieceEnd - $pieceStart),
+									 'title' => trim($openingBraceStack[$lastOpeningBrace]['title']),
+									 'parts' => $openingBraceStack[$lastOpeningBrace]['parts'],
+									 'lineStart' => (($pieceStart > 0) && ($text[$pieceStart-1] == "\n")),
+									 );
+					# finally we can call a user callback and replace piece of text
+					$replaceWith = call_user_func( $matchingCallback, $cbArgs );
+					$text = substr($text, 0, $pieceStart) . $replaceWith . substr($text, $pieceEnd);
+					$i = $pieceStart + strlen($replaceWith);
+				} else {
+					# null value for callback means that parentheses should be parsed, but not replaced
+					$i += $matchingCount;
+				}
+
+				# reset last opening parentheses, but keep it in case there are unused characters
+				$piece = array('brace' => $openingBraceStack[$lastOpeningBrace]['brace'],
+							   'braceEnd' => $openingBraceStack[$lastOpeningBrace]['braceEnd'],
+							   'count' => $openingBraceStack[$lastOpeningBrace]['count'],
+							   'title' => '',
+							   'parts' => null,
+							   'startAt' => $openingBraceStack[$lastOpeningBrace]['startAt']);
+				$openingBraceStack[$lastOpeningBrace--] = null;
+
+				if ($matchingCount < $piece['count']) {
+					$piece['count'] -= $matchingCount;
+					$piece['startAt'] -= $matchingCount;
+					$piece['partStart'] = $piece['startAt'];
+					# do we still qualify for any callback with remaining count?
+					$currentCbList = $callbacks[$piece['brace']]['cb'];
+					while ( $piece['count'] ) {
+						if ( array_key_exists( $piece['count'], $currentCbList ) ) {
+							$lastOpeningBrace++;
+							$openingBraceStack[$lastOpeningBrace] = $piece;
+							break;
+						}
+						--$piece['count'];
+					}
+				}
+			} elseif ( $found == 'pipe' ) {
+				# lets set a title if it is a first separator, or next part otherwise
+				if (null === $openingBraceStack[$lastOpeningBrace]['parts']) {
+					$openingBraceStack[$lastOpeningBrace]['title'] =
+						substr($text, $openingBraceStack[$lastOpeningBrace]['partStart'],
+						$i - $openingBraceStack[$lastOpeningBrace]['partStart']);
+					$openingBraceStack[$lastOpeningBrace]['parts'] = array();
+				} else {
+					$openingBraceStack[$lastOpeningBrace]['parts'][] =
+						substr($text, $openingBraceStack[$lastOpeningBrace]['partStart'],
+						$i - $openingBraceStack[$lastOpeningBrace]['partStart']);
+				}
+				$openingBraceStack[$lastOpeningBrace]['partStart'] = ++$i;
+			}
+		}
+
+		wfProfileOut( __METHOD__ );
+		return $text;
+	}
+
+	/**
+	 * Replace magic variables, templates, and template arguments
+	 * with the appropriate text. Templates are substituted recursively,
+	 * taking care to avoid infinite loops.
+	 *
+	 * Note that the substitution depends on value of $mOutputType:
+	 *  OT_WIKI: only {{subst:}} templates
+	 *  OT_MSG: only magic variables
+	 *  OT_HTML: all templates and magic variables
+	 *
+	 * @param string $tex The text to transform
+	 * @param array $args Key-value pairs representing template parameters to substitute
+	 * @param bool $argsOnly Only do argument (triple-brace) expansion, not double-brace expansion
+	 * @private
+	 */
+	function replaceVariables( $text, $args = array(), $argsOnly = false ) {
+		# Prevent too big inclusions
+		if( strlen( $text ) > $this->mOptions->getMaxIncludeSize() ) {
+			return $text;
+		}
+
+		$fname = __METHOD__ /*. '-L' . count( $this->mArgStack )*/;
+		wfProfileIn( $fname );
+
+		# This function is called recursively. To keep track of arguments we need a stack:
+		array_push( $this->mArgStack, $args );
+
+		$braceCallbacks = array();
+		if ( !$argsOnly ) {
+			$braceCallbacks[2] = array( &$this, 'braceSubstitution' );
+		}
+		if ( $this->mOutputType != OT_MSG ) {
+			$braceCallbacks[3] = array( &$this, 'argSubstitution' );
+		}
+		if ( $braceCallbacks ) {
+			$callbacks = array(
+				'{' => array(
+					'end' => '}',
+					'cb' => $braceCallbacks,
+					'min' => $argsOnly ? 3 : 2,
+					'max' => isset( $braceCallbacks[3] ) ? 3 : 2,
+				),
+				'[' => array(
+					'end' => ']',
+					'cb' => array(2=>null),
+					'min' => 2,
+					'max' => 2,
+				)
+			);
+			$text = $this->replace_callback ($text, $callbacks);
+
+			array_pop( $this->mArgStack );
+		}
+		wfProfileOut( $fname );
+		return $text;
+	}
+
+	/**
+	 * Replace magic variables
+	 * @private
+	 */
+	function variableSubstitution( $matches ) {
+		global $wgContLang;
+		$fname = 'Parser::variableSubstitution';
+		$varname = $wgContLang->lc($matches[1]);
+		wfProfileIn( $fname );
+		$skip = false;
+		if ( $this->mOutputType == OT_WIKI ) {
+			# Do only magic variables prefixed by SUBST
+			$mwSubst =& MagicWord::get( 'subst' );
+			if (!$mwSubst->matchStartAndRemove( $varname ))
+				$skip = true;
+			# Note that if we don't substitute the variable below,
+			# we don't remove the {{subst:}} magic word, in case
+			# it is a template rather than a magic variable.
+		}
+		if ( !$skip && array_key_exists( $varname, $this->mVariables ) ) {
+			$id = $this->mVariables[$varname];
+			# Now check if we did really match, case sensitive or not
+			$mw =& MagicWord::get( $id );
+			if ($mw->match($matches[1])) {
+				$text = $this->getVariableValue( $id );
+				$this->mOutput->mContainsOldMagic = true;
+			} else {
+				$text = $matches[0];
+			}
+		} else {
+			$text = $matches[0];
+		}
+		wfProfileOut( $fname );
+		return $text;
+	}
+
+
+	/// Clean up argument array - refactored in 1.9 so parserfunctions can use it, too.
+	static function createAssocArgs( $args ) {
+		$assocArgs = array();
+		$index = 1;
+		foreach( $args as $arg ) {
+			$eqpos = strpos( $arg, '=' );
+			if ( $eqpos === false ) {
+				$assocArgs[$index++] = $arg;
+			} else {
+				$name = trim( substr( $arg, 0, $eqpos ) );
+				$value = trim( substr( $arg, $eqpos+1 ) );
+				if ( $value === false ) {
+					$value = '';
+				}
+				if ( $name !== false ) {
+					$assocArgs[$name] = $value;
+				}
+			}
+		}
+
+		return $assocArgs;
+	}
+
+	/**
+	 * Return the text of a template, after recursively
+	 * replacing any variables or templates within the template.
+	 *
+	 * @param array $piece The parts of the template
+	 *  $piece['text']: matched text
+	 *  $piece['title']: the title, i.e. the part before the |
+	 *  $piece['parts']: the parameter array
+	 * @return string the text of the template
+	 * @private
+	 */
+	function braceSubstitution( $piece ) {
+		global $wgContLang, $wgLang, $wgAllowDisplayTitle, $wgNonincludableNamespaces;
+		$fname = __METHOD__ /*. '-L' . count( $this->mArgStack )*/;
+		wfProfileIn( $fname );
+		wfProfileIn( __METHOD__.'-setup' );
+
+		# Flags
+		$found = false;             # $text has been filled
+		$nowiki = false;            # wiki markup in $text should be escaped
+		$noparse = false;           # Unsafe HTML tags should not be stripped, etc.
+		$noargs = false;            # Don't replace triple-brace arguments in $text
+		$replaceHeadings = false;   # Make the edit section links go to the template not the article
+                $headingOffset = 0;         # Skip headings when number, to account for those that weren't transcluded.
+		$isHTML = false;            # $text is HTML, armour it against wikitext transformation
+		$forceRawInterwiki = false; # Force interwiki transclusion to be done in raw mode not rendered
+
+		# Title object, where $text came from
+		$title = NULL;
+
+		$linestart = '';
+
+
+		# $part1 is the bit before the first |, and must contain only title characters
+		# $args is a list of arguments, starting from index 0, not including $part1
+
+		$titleText = $part1 = $piece['title'];
+		# If the third subpattern matched anything, it will start with |
+
+		if (null == $piece['parts']) {
+			$replaceWith = $this->variableSubstitution (array ($piece['text'], $piece['title']));
+			if ($replaceWith != $piece['text']) {
+				$text = $replaceWith;
+				$found = true;
+				$noparse = true;
+				$noargs = true;
+			}
+		}
+
+		$args = (null == $piece['parts']) ? array() : $piece['parts'];
+		wfProfileOut( __METHOD__.'-setup' );
+
+		# SUBST
+		wfProfileIn( __METHOD__.'-modifiers' );
+		if ( !$found ) {
+			$mwSubst =& MagicWord::get( 'subst' );
+			if ( $mwSubst->matchStartAndRemove( $part1 ) xor $this->ot['wiki'] ) {
+				# One of two possibilities is true:
+				# 1) Found SUBST but not in the PST phase
+				# 2) Didn't find SUBST and in the PST phase
+				# In either case, return without further processing
+				$text = $piece['text'];
+				$found = true;
+				$noparse = true;
+				$noargs = true;
+			}
+		}
+
+		# MSG, MSGNW and RAW
+		if ( !$found ) {
+			# Check for MSGNW:
+			$mwMsgnw =& MagicWord::get( 'msgnw' );
+			if ( $mwMsgnw->matchStartAndRemove( $part1 ) ) {
+				$nowiki = true;
+			} else {
+				# Remove obsolete MSG:
+				$mwMsg =& MagicWord::get( 'msg' );
+				$mwMsg->matchStartAndRemove( $part1 );
+			}
+
+			# Check for RAW:
+			$mwRaw =& MagicWord::get( 'raw' );
+			if ( $mwRaw->matchStartAndRemove( $part1 ) ) {
+				$forceRawInterwiki = true;
+			}
+		}
+		wfProfileOut( __METHOD__.'-modifiers' );
+
+		//save path level before recursing into functions & templates.
+		$lastPathLevel = $this->mTemplatePath;
+
+		# Parser functions
+		if ( !$found ) {
+			wfProfileIn( __METHOD__ . '-pfunc' );
+
+			$colonPos = strpos( $part1, ':' );
+			if ( $colonPos !== false ) {
+				# Case sensitive functions
+				$function = substr( $part1, 0, $colonPos );
+				if ( isset( $this->mFunctionSynonyms[1][$function] ) ) {
+					$function = $this->mFunctionSynonyms[1][$function];
+				} else {
+					# Case insensitive functions
+					$function = strtolower( $function );
+					if ( isset( $this->mFunctionSynonyms[0][$function] ) ) {
+						$function = $this->mFunctionSynonyms[0][$function];
+					} else {
+						$function = false;
+					}
+				}
+				if ( $function ) {
+					$funcArgs = array_map( 'trim', $args );
+					$funcArgs = array_merge( array( &$this, trim( substr( $part1, $colonPos + 1 ) ) ), $funcArgs );
+					$result = call_user_func_array( $this->mFunctionHooks[$function], $funcArgs );
+					$found = true;
+
+					// The text is usually already parsed, doesn't need triple-brace tags expanded, etc.
+					//$noargs = true;
+					//$noparse = true;
+
+					if ( is_array( $result ) ) {
+						if ( isset( $result[0] ) ) {
+							$text = $linestart . $result[0];
+							unset( $result[0] );
+						}
+
+						// Extract flags into the local scope
+						// This allows callers to set flags such as nowiki, noparse, found, etc.
+						extract( $result );
+					} else {
+						$text = $linestart . $result;
+					}
+				}
+			}
+			wfProfileOut( __METHOD__ . '-pfunc' );
+		}
+
+		# Template table test
+
+		# Did we encounter this template already? If yes, it is in the cache
+		# and we need to check for loops.
+		if ( !$found && isset( $this->mTemplates[$piece['title']] ) ) {
+			$found = true;
+
+			# Infinite loop test
+			if ( isset( $this->mTemplatePath[$part1] ) ) {
+				$noparse = true;
+				$noargs = true;
+				$found = true;
+				$text = $linestart .
+					"[[$part1]]<!-- WARNING: template loop detected -->";
+				wfDebug( __METHOD__.": template loop broken at '$part1'\n" );
+			} else {
+				# set $text to cached message.
+				$text = $linestart . $this->mTemplates[$piece['title']];
+				#treat title for cached page the same as others
+				$ns = NS_TEMPLATE;
+				$subpage = '';
+				$part1 = $this->maybeDoSubpageLink( $part1, $subpage );
+				if ($subpage !== '') {
+				  $ns = $this->mTitle->getNamespace();
+				}
+				$title = Title::newFromText( $part1, $ns );
+				//used by include size checking
+				$titleText = $title->getPrefixedText();
+				//used by edit section links
+				$replaceHeadings = true;
+				
+			}
+		}
+
+		# Load from database
+		if ( !$found ) {
+			wfProfileIn( __METHOD__ . '-loadtpl' );
+			$ns = NS_TEMPLATE;
+			# declaring $subpage directly in the function call
+			# does not work correctly with references and breaks
+			# {{/subpage}}-style inclusions
+			$subpage = '';
+			$part1 = $this->maybeDoSubpageLink( $part1, $subpage );
+			if ($subpage !== '') {
+				$ns = $this->mTitle->getNamespace();
+			}
+			$title = Title::newFromText( $part1, $ns );
+
+
+			if ( !is_null( $title ) ) {
+				$titleText = $title->getPrefixedText();
+				# Check for language variants if the template is not found
+				if($wgContLang->hasVariants() && $title->getArticleID() == 0){
+					$wgContLang->findVariantLink($part1, $title);
+				}
+
+				if ( !$title->isExternal() ) {
+					if ( $title->getNamespace() == NS_SPECIAL && $this->mOptions->getAllowSpecialInclusion() && $this->ot['html'] ) {
+						$text = SpecialPage::capturePath( $title );
+						if ( is_string( $text ) ) {
+							$found = true;
+							$noparse = true;
+							$noargs = true;
+							$isHTML = true;
+							$this->disableCache();
+						}
+					} else if ( $wgNonincludableNamespaces && in_array( $title->getNamespace(), $wgNonincludableNamespaces ) ) {
+						$found = false; //access denied
+						wfDebug( "$fname: template inclusion denied for " . $title->getPrefixedDBkey() );
+					} else {
+						$articleContent = $this->fetchTemplate( $title );
+						if ( $articleContent !== false ) {
+							$found = true;
+							$text = $articleContent;
+							$replaceHeadings = true;
+						}
+					}
+
+					# If the title is valid but undisplayable, make a link to it
+					if ( !$found && ( $this->ot['html'] || $this->ot['pre'] ) ) {
+						$text = "[[:$titleText]]";
+						$found = true;
+					}
+				} elseif ( $title->isTrans() ) {
+					// Interwiki transclusion
+					if ( $this->ot['html'] && !$forceRawInterwiki ) {
+						$text = $this->interwikiTransclude( $title, 'render' );
+						$isHTML = true;
+						$noparse = true;
+					} else {
+						$text = $this->interwikiTransclude( $title, 'raw' );
+						$replaceHeadings = true;
+					}
+					$found = true;
+				}
+
+				# Template cache array insertion
+				# Use the original $piece['title'] not the mangled $part1, so that
+				# modifiers such as RAW: produce separate cache entries
+				if( $found ) {
+					if( $isHTML ) {
+						// A special page; don't store it in the template cache.
+					} else {
+						$this->mTemplates[$piece['title']] = $text;
+					}
+					$text = $linestart . $text;
+				}
+			}
+			wfProfileOut( __METHOD__ . '-loadtpl' );
+		}
+
+		if ( $found && !$this->incrementIncludeSize( 'pre-expand', strlen( $text ) ) ) {
+			# Error, oversize inclusion
+			$text = $linestart .
+				"[[$titleText]]<!-- WARNING: template omitted, pre-expand include size too large -->";
+			$noparse = true;
+			$noargs = true;
+		}
+
+		# Recursive parsing, escaping and link table handling
+		# Only for HTML output
+		if ( $nowiki && $found && ( $this->ot['html'] || $this->ot['pre'] ) ) {
+			$text = wfEscapeWikiText( $text );
+		} elseif ( !$this->ot['msg'] && $found ) {
+			if ( $noargs ) {
+				$assocArgs = array();
+			} else {
+				# Clean up argument array
+				$assocArgs = self::createAssocArgs($args);
+				# Add a new element to the templace recursion path
+				$this->mTemplatePath[$part1] = 1;
+			}
+
+			if ( !$noparse ) {
+				# If there are any <onlyinclude> tags, only include them
+				if ( in_string( '<onlyinclude>', $text ) && in_string( '</onlyinclude>', $text ) ) {
+					$replacer = new OnlyIncludeReplacer;
+					StringUtils::delimiterReplaceCallback( '<onlyinclude>', '</onlyinclude>', 
+						array( &$replacer, 'replace' ), $text );
+					$text = $replacer->output;
+				}
+				# Remove <noinclude> sections and <includeonly> tags
+				$text = StringUtils::delimiterReplace( '<noinclude>', '</noinclude>', '', $text );
+				$text = strtr( $text, array( '<includeonly>' => '' , '</includeonly>' => '' ) );
+
+				if( $this->ot['html'] || $this->ot['pre'] ) {
+					# Strip <nowiki>, <pre>, etc.
+					$text = $this->strip( $text, $this->mStripState );
+					if ( $this->ot['html'] ) {
+						$text = Sanitizer::removeHTMLtags( $text, array( &$this, 'replaceVariables' ), $assocArgs );
+					} elseif ( $this->ot['pre'] && $this->mOptions->getRemoveComments() ) {
+						$text = Sanitizer::removeHTMLcomments( $text );
+					}
+				}
+				$text = $this->replaceVariables( $text, $assocArgs );
+
+				# If the template begins with a table or block-level
+				# element, it should be treated as beginning a new line.
+				if (!$piece['lineStart'] && preg_match('/^(?:{\\||:|;|#|\*)/', $text)) /*}*/{
+					$text = "\n" . $text;
+				}
+			} elseif ( !$noargs ) {
+				# $noparse and !$noargs
+				# Just replace the arguments, not any double-brace items
+				# This is used for rendered interwiki transclusion
+				$text = $this->replaceVariables( $text, $assocArgs, true );
+			}
+		}
+		# Prune lower levels off the recursion check path
+		$this->mTemplatePath = $lastPathLevel;
+
+		if ( $found && !$this->incrementIncludeSize( 'post-expand', strlen( $text ) ) ) {
+			# Error, oversize inclusion
+			$text = $linestart .
+				"[[$titleText]]<!-- WARNING: template omitted, post-expand include size too large -->";
+			$noparse = true;
+			$noargs = true;
+		}
+
+		if ( !$found ) {
+			wfProfileOut( $fname );
+			return $piece['text'];
+		} else {
+			wfProfileIn( __METHOD__ . '-placeholders' );
+			if ( $isHTML ) {
+				# Replace raw HTML by a placeholder
+				# Add a blank line preceding, to prevent it from mucking up
+				# immediately preceding headings
+				$text = "\n\n" . $this->insertStripItem( $text, $this->mStripState );
+			} else {
+				# replace ==section headers==
+				# XXX this needs to go away once we have a better parser.
+				if ( !$this->ot['wiki'] && !$this->ot['pre'] && $replaceHeadings ) {
+					if( !is_null( $title ) )
+						$encodedname = base64_encode($title->getPrefixedDBkey());
+					else
+						$encodedname = base64_encode("");
+					$m = preg_split('/(^={1,6}.*?={1,6}\s*?$)/m', $text, -1,
+						PREG_SPLIT_DELIM_CAPTURE);
+					$text = '';
+					$nsec = $headingOffset;
+					for( $i = 0; $i < count($m); $i += 2 ) {
+						$text .= $m[$i];
+						if (!isset($m[$i + 1]) || $m[$i + 1] == "") continue;
+						$hl = $m[$i + 1];
+						if( strstr($hl, "<!--MWTEMPLATESECTION") ) {
+							$text .= $hl;
+							continue;
+						}
+						$m2 = array();
+						preg_match('/^(={1,6})(.*?)(={1,6})\s*?$/m', $hl, $m2);
+						$text .= $m2[1] . $m2[2] . "<!--MWTEMPLATESECTION="
+							. $encodedname . "&" . base64_encode("$nsec") . "-->" . $m2[3];
+
+						$nsec++;
+					}
+				}
+			}
+			wfProfileOut( __METHOD__ . '-placeholders' );
+		}
+
+		# Prune lower levels off the recursion check path
+		$this->mTemplatePath = $lastPathLevel;
+
+		if ( !$found ) {
+			wfProfileOut( $fname );
+			return $piece['text'];
+		} else {
+			wfProfileOut( $fname );
+			return $text;
+		}
+	}
+
+	/**
+	 * Fetch the unparsed text of a template and register a reference to it.
+	 */
+	function fetchTemplate( $title ) {
+		$text = false;
+		// Loop to fetch the article, with up to 1 redirect
+		for ( $i = 0; $i < 2 && is_object( $title ); $i++ ) {
+			$rev = Revision::newFromTitle( $title );
+			$this->mOutput->addTemplate( $title, $title->getArticleID() );
+			if ( $rev ) {
+				$text = $rev->getText();
+			} elseif( $title->getNamespace() == NS_MEDIAWIKI ) {
+				global $wgLang;
+				$message = $wgLang->lcfirst( $title->getText() );
+				$text = wfMsgForContentNoTrans( $message );
+				if( wfEmptyMsg( $message, $text ) ) {
+					$text = false;
+					break;
+				}
+			} else {
+				break;
+			}
+			if ( $text === false ) {
+				break;
+			}
+			// Redirect?
+			$title = Title::newFromRedirect( $text );
+		}
+		return $text;
+	}
+
+	/**
+	 * Transclude an interwiki link.
+	 */
+	function interwikiTransclude( $title, $action ) {
+		global $wgEnableScaryTranscluding;
+
+		if (!$wgEnableScaryTranscluding)
+			return wfMsg('scarytranscludedisabled');
+
+		$url = $title->getFullUrl( "action=$action" );
+
+		if (strlen($url) > 255)
+			return wfMsg('scarytranscludetoolong');
+		return $this->fetchScaryTemplateMaybeFromCache($url);
+	}
+
+	function fetchScaryTemplateMaybeFromCache($url) {
+		global $wgTranscludeCacheExpiry;
+		$dbr = wfGetDB(DB_SLAVE);
+		$obj = $dbr->selectRow('transcache', array('tc_time', 'tc_contents'),
+				array('tc_url' => $url));
+		if ($obj) {
+			$time = $obj->tc_time;
+			$text = $obj->tc_contents;
+			if ($time && time() < $time + $wgTranscludeCacheExpiry ) {
+				return $text;
+			}
+		}
+
+		$text = Http::get($url);
+		if (!$text)
+			return wfMsg('scarytranscludefailed', $url);
+
+		$dbw = wfGetDB(DB_MASTER);
+		$dbw->replace('transcache', array('tc_url'), array(
+			'tc_url' => $url,
+			'tc_time' => time(),
+			'tc_contents' => $text));
+		return $text;
+	}
+
+
+	/**
+	 * Triple brace replacement -- used for template arguments
+	 * @private
+	 */
+	function argSubstitution( $matches ) {
+		$arg = trim( $matches['title'] );
+		$text = $matches['text'];
+		$inputArgs = end( $this->mArgStack );
+
+		if ( array_key_exists( $arg, $inputArgs ) ) {
+			$text = $inputArgs[$arg];
+		} else if (($this->mOutputType == OT_HTML || $this->mOutputType == OT_PREPROCESS ) &&
+		null != $matches['parts'] && count($matches['parts']) > 0) {
+			$text = $matches['parts'][0];
+		}
+		if ( !$this->incrementIncludeSize( 'arg', strlen( $text ) ) ) {
+			$text = $matches['text'] .
+				'<!-- WARNING: argument omitted, expansion size too large -->';
+		}
+
+		return $text;
+	}
+
+	/**
+	 * Increment an include size counter
+	 *
+	 * @param string $type The type of expansion
+	 * @param integer $size The size of the text
+	 * @return boolean False if this inclusion would take it over the maximum, true otherwise
+	 */
+	function incrementIncludeSize( $type, $size ) {
+		if ( $this->mIncludeSizes[$type] + $size > $this->mOptions->getMaxIncludeSize() ) {
+			return false;
+		} else {
+			$this->mIncludeSizes[$type] += $size;
+			return true;
+		}
+	}
+
+	/**
+	 * Detect __NOGALLERY__ magic word and set a placeholder
+	 */
+	function stripNoGallery( &$text ) {
+		# if the string __NOGALLERY__ (not case-sensitive) occurs in the HTML,
+		# do not add TOC
+		$mw = MagicWord::get( 'nogallery' );
+		$this->mOutput->mNoGallery = $mw->matchAndRemove( $text ) ;
+	}
+
+	/**
+	 * Detect __TOC__ magic word and set a placeholder
+	 */
+	function stripToc( $text ) {
+		# if the string __NOTOC__ (not case-sensitive) occurs in the HTML,
+		# do not add TOC
+		$mw = MagicWord::get( 'notoc' );
+		if( $mw->matchAndRemove( $text ) ) {
+			$this->mShowToc = false;
+		}
+
+		$mw = MagicWord::get( 'toc' );
+		if( $mw->match( $text ) ) {
+			$this->mShowToc = true;
+			$this->mForceTocPosition = true;
+
+			// Set a placeholder. At the end we'll fill it in with the TOC.
+			$text = $mw->replace( '<!--MWTOC-->', $text, 1 );
+
+			// Only keep the first one.
+			$text = $mw->replace( '', $text );
+		}
+		return $text;
+	}
+
+	/**
+	 * This function accomplishes several tasks:
+	 * 1) Auto-number headings if that option is enabled
+	 * 2) Add an [edit] link to sections for logged in users who have enabled the option
+	 * 3) Add a Table of contents on the top for users who have enabled the option
+	 * 4) Auto-anchor headings
+	 *
+	 * It loops through all headlines, collects the necessary data, then splits up the
+	 * string and re-inserts the newly formatted headlines.
+	 *
+	 * @param string $text
+	 * @param boolean $isMain
+	 * @private
+	 */
+	function formatHeadings( $text, $isMain=true ) {
+		global $wgMaxTocLevel, $wgContLang;
+
+		$doNumberHeadings = $this->mOptions->getNumberHeadings();
+		if( !$this->mTitle->quickUserCan( 'edit' ) ) {
+			$showEditLink = 0;
+		} else {
+			$showEditLink = $this->mOptions->getEditSection();
+		}
+
+		# Inhibit editsection links if requested in the page
+		$esw =& MagicWord::get( 'noeditsection' );
+		if( $esw->matchAndRemove( $text ) ) {
+			$showEditLink = 0;
+		}
+
+		# Get all headlines for numbering them and adding funky stuff like [edit]
+		# links - this is for later, but we need the number of headlines right now
+		$matches = array();
+		$numMatches = preg_match_all( '/<H(?P<level>[1-6])(?P<attrib>.*?'.'>)(?P<header>.*?)<\/H[1-6] *>/i', $text, $matches );
+
+		# if there are fewer than 4 headlines in the article, do not show TOC
+		# unless it's been explicitly enabled.
+		$enoughToc = $this->mShowToc &&
+			(($numMatches >= 4) || $this->mForceTocPosition);
+
+		# Allow user to stipulate that a page should have a "new section"
+		# link added via __NEWSECTIONLINK__
+		$mw =& MagicWord::get( 'newsectionlink' );
+		if( $mw->matchAndRemove( $text ) )
+			$this->mOutput->setNewSection( true );
+
+		# if the string __FORCETOC__ (not case-sensitive) occurs in the HTML,
+		# override above conditions and always show TOC above first header
+		$mw =& MagicWord::get( 'forcetoc' );
+		if ($mw->matchAndRemove( $text ) ) {
+			$this->mShowToc = true;
+			$enoughToc = true;
+		}
+
+		# Never ever show TOC if no headers
+		if( $numMatches < 1 ) {
+			$enoughToc = false;
+		}
+
+		# We need this to perform operations on the HTML
+		$sk = $this->mOptions->getSkin();
+
+		# headline counter
+		$headlineCount = 0;
+		$sectionCount = 0; # headlineCount excluding template sections
+
+		# Ugh .. the TOC should have neat indentation levels which can be
+		# passed to the skin functions. These are determined here
+		$toc = '';
+		$full = '';
+		$head = array();
+		$sublevelCount = array();
+		$levelCount = array();
+		$toclevel = 0;
+		$level = 0;
+		$prevlevel = 0;
+		$toclevel = 0;
+		$prevtoclevel = 0;
+
+		foreach( $matches[3] as $headline ) {
+			$istemplate = 0;
+			$templatetitle = '';
+			$templatesection = 0;
+			$numbering = '';
+			$mat = array();
+			if (preg_match("/<!--MWTEMPLATESECTION=([^&]+)&([^_]+)-->/", $headline, $mat)) {
+				$istemplate = 1;
+				$templatetitle = base64_decode($mat[1]);
+				$templatesection = 1 + (int)base64_decode($mat[2]);
+				$headline = preg_replace("/<!--MWTEMPLATESECTION=([^&]+)&([^_]+)-->/", "", $headline);
+			}
+
+			if( $toclevel ) {
+				$prevlevel = $level;
+				$prevtoclevel = $toclevel;
+			}
+			$level = $matches[1][$headlineCount];
+
+			if( $doNumberHeadings || $enoughToc ) {
+
+				if ( $level > $prevlevel ) {
+					# Increase TOC level
+					$toclevel++;
+					$sublevelCount[$toclevel] = 0;
+					if( $toclevel<$wgMaxTocLevel ) {
+						$toc .= $sk->tocIndent();
+					}
+				}
+				elseif ( $level < $prevlevel && $toclevel > 1 ) {
+					# Decrease TOC level, find level to jump to
+
+					if ( $toclevel == 2 && $level <= $levelCount[1] ) {
+						# Can only go down to level 1
+						$toclevel = 1;
+					} else {
+						for ($i = $toclevel; $i > 0; $i--) {
+							if ( $levelCount[$i] == $level ) {
+								# Found last matching level
+								$toclevel = $i;
+								break;
+							}
+							elseif ( $levelCount[$i] < $level ) {
+								# Found first matching level below current level
+								$toclevel = $i + 1;
+								break;
+							}
+						}
+					}
+					if( $toclevel<$wgMaxTocLevel ) {
+						$toc .= $sk->tocUnindent( $prevtoclevel - $toclevel );
+					}
+				}
+				else {
+					# No change in level, end TOC line
+					if( $toclevel<$wgMaxTocLevel ) {
+						$toc .= $sk->tocLineEnd();
+					}
+				}
+
+				$levelCount[$toclevel] = $level;
+
+				# count number of headlines for each level
+				@$sublevelCount[$toclevel]++;
+				$dot = 0;
+				for( $i = 1; $i <= $toclevel; $i++ ) {
+					if( !empty( $sublevelCount[$i] ) ) {
+						if( $dot ) {
+							$numbering .= '.';
+						}
+						$numbering .= $wgContLang->formatNum( $sublevelCount[$i] );
+						$dot = 1;
+					}
+				}
+			}
+
+			# The canonized header is a version of the header text safe to use for links
+			# Avoid insertion of weird stuff like <math> by expanding the relevant sections
+			$canonized_headline = $this->mStripState->unstripBoth( $headline );
+
+			# Remove link placeholders by the link text.
+			#     <!--LINK number-->
+			# turns into
+			#     link text with suffix
+			$canonized_headline = preg_replace( '/<!--LINK ([0-9]*)-->/e',
+							    "\$this->mLinkHolders['texts'][\$1]",
+							    $canonized_headline );
+			$canonized_headline = preg_replace( '/<!--IWLINK ([0-9]*)-->/e',
+							    "\$this->mInterwikiLinkHolders['texts'][\$1]",
+							    $canonized_headline );
+
+			# strip out HTML
+			$canonized_headline = preg_replace( '/<.*?' . '>/','',$canonized_headline );
+			$tocline = trim( $canonized_headline );
+			# Save headline for section edit hint before it's escaped
+			$headline_hint = trim( $canonized_headline );
+			$canonized_headline = Sanitizer::escapeId( $tocline );
+			$refers[$headlineCount] = $canonized_headline;
+
+			# count how many in assoc. array so we can track dupes in anchors
+			isset( $refers[$canonized_headline] ) ? $refers[$canonized_headline]++ : $refers[$canonized_headline] = 1;
+			$refcount[$headlineCount]=$refers[$canonized_headline];
+
+			# Don't number the heading if it is the only one (looks silly)
+			if( $doNumberHeadings && count( $matches[3] ) > 1) {
+				# the two are different if the line contains a link
+				$headline=$numbering . ' ' . $headline;
+			}
+
+			# Create the anchor for linking from the TOC to the section
+			$anchor = $canonized_headline;
+			if($refcount[$headlineCount] > 1 ) {
+				$anchor .= '_' . $refcount[$headlineCount];
+			}
+			if( $enoughToc && ( !isset($wgMaxTocLevel) || $toclevel<$wgMaxTocLevel ) ) {
+				$toc .= $sk->tocLine($anchor, $tocline, $numbering, $toclevel);
+			}
+			# give headline the correct <h#> tag
+			if( $showEditLink && ( !$istemplate || $templatetitle !== "" ) ) {
+				if( $istemplate )
+					$editlink = $sk->editSectionLinkForOther($templatetitle, $templatesection);
+				else
+					$editlink = $sk->editSectionLink($this->mTitle, $sectionCount+1, $headline_hint);
+			} else {
+				$editlink = '';
+			}
+			$head[$headlineCount] = $sk->makeHeadline( $level, $matches['attrib'][$headlineCount], $anchor, $headline, $editlink );
+
+			$headlineCount++;
+			if( !$istemplate )
+				$sectionCount++;
+		}
+
+		if( $enoughToc ) {
+			if( $toclevel<$wgMaxTocLevel ) {
+				$toc .= $sk->tocUnindent( $toclevel - 1 );
+			}
+			$toc = $sk->tocList( $toc );
+		}
+
+		# split up and insert constructed headlines
+
+		$blocks = preg_split( '/<H[1-6].*?' . '>.*?<\/H[1-6]>/i', $text );
+		$i = 0;
+
+		foreach( $blocks as $block ) {
+			if( $showEditLink && $headlineCount > 0 && $i == 0 && $block != "\n" ) {
+				# This is the [edit] link that appears for the top block of text when
+				# section editing is enabled
+
+				# Disabled because it broke block formatting
+				# For example, a bullet point in the top line
+				# $full .= $sk->editSectionLink(0);
+			}
+			$full .= $block;
+			if( $enoughToc && !$i && $isMain && !$this->mForceTocPosition ) {
+				# Top anchor now in skin
+				$full = $full.$toc;
+			}
+
+			if( !empty( $head[$i] ) ) {
+				$full .= $head[$i];
+			}
+			$i++;
+		}
+		if( $this->mForceTocPosition ) {
+			return str_replace( '<!--MWTOC-->', $toc, $full );
+		} else {
+			return $full;
+		}
+	}
+
+	/**
+	 * Transform wiki markup when saving a page by doing \r\n -> \n
+	 * conversion, substitting signatures, {{subst:}} templates, etc.
+	 *
+	 * @param string $text the text to transform
+	 * @param Title &$title the Title object for the current article
+	 * @param User &$user the User object describing the current user
+	 * @param ParserOptions $options parsing options
+	 * @param bool $clearState whether to clear the parser state first
+	 * @return string the altered wiki markup
+	 * @public
+	 */
+	function preSaveTransform( $text, &$title, $user, $options, $clearState = true ) {
+		$this->mOptions = $options;
+		$this->mTitle =& $title;
+		$this->setOutputType( OT_WIKI );
+
+		if ( $clearState ) {
+			$this->clearState();
+		}
+
+		$stripState = new StripState;
+		$pairs = array(
+			"\r\n" => "\n",
+		);
+		$text = str_replace( array_keys( $pairs ), array_values( $pairs ), $text );
+		$text = $this->strip( $text, $stripState, true, array( 'gallery' ) );
+		$text = $this->pstPass2( $text, $stripState, $user );
+		$text = $stripState->unstripBoth( $text );
+		return $text;
+	}
+
+	/**
+	 * Pre-save transform helper function
+	 * @private
+	 */
+	function pstPass2( $text, &$stripState, $user ) {
+		global $wgContLang, $wgLocaltimezone;
+
+		/* Note: This is the timestamp saved as hardcoded wikitext to
+		 * the database, we use $wgContLang here in order to give
+		 * everyone the same signature and use the default one rather
+		 * than the one selected in each user's preferences.
+		 */
+		if ( isset( $wgLocaltimezone ) ) {
+			$oldtz = getenv( 'TZ' );
+			putenv( 'TZ='.$wgLocaltimezone );
+		}
+		$d = $wgContLang->timeanddate( date( 'YmdHis' ), false, false) .
+		  ' (' . date( 'T' ) . ')';
+		if ( isset( $wgLocaltimezone ) ) {
+			putenv( 'TZ='.$oldtz );
+		}
+
+		# Variable replacement
+		# Because mOutputType is OT_WIKI, this will only process {{subst:xxx}} type tags
+		$text = $this->replaceVariables( $text );
+
+		# Strip out <nowiki> etc. added via replaceVariables
+		$text = $this->strip( $text, $stripState, false, array( 'gallery' ) );
+
+		# Signatures
+		$sigText = $this->getUserSig( $user );
+		$text = strtr( $text, array(
+			'~~~~~' => $d,
+			'~~~~' => "$sigText $d",
+			'~~~' => $sigText
+		) );
+
+		# Context links: [[|name]] and [[name (context)|]]
+		#
+		global $wgLegalTitleChars;
+		$tc = "[$wgLegalTitleChars]";
+		$nc = '[ _0-9A-Za-z\x80-\xff]'; # Namespaces can use non-ascii!
+
+		$p1 = "/\[\[(:?$nc+:|:|)($tc+?)( \\($tc+\\))\\|]]/";		# [[ns:page (context)|]]
+		$p3 = "/\[\[(:?$nc+:|:|)($tc+?)( \\($tc+\\)|)(, $tc+|)\\|]]/";	# [[ns:page (context), context|]]
+		$p2 = "/\[\[\\|($tc+)]]/";					# [[|page]]
+
+		# try $p1 first, to turn "[[A, B (C)|]]" into "[[A, B (C)|A, B]]"
+		$text = preg_replace( $p1, '[[\\1\\2\\3|\\2]]', $text );
+		$text = preg_replace( $p3, '[[\\1\\2\\3\\4|\\2]]', $text );
+
+		$t = $this->mTitle->getText();
+		$m = array();
+		if ( preg_match( "/^($nc+:|)$tc+?( \\($tc+\\))$/", $t, $m ) ) {
+			$text = preg_replace( $p2, "[[$m[1]\\1$m[2]|\\1]]", $text );
+		} elseif ( preg_match( "/^($nc+:|)$tc+?(, $tc+|)$/", $t, $m ) && '' != "$m[1]$m[2]" ) {
+			$text = preg_replace( $p2, "[[$m[1]\\1$m[2]|\\1]]", $text );
+		} else {
+			# if there's no context, don't bother duplicating the title
+			$text = preg_replace( $p2, '[[\\1]]', $text );
+		}
+
+		# Trim trailing whitespace
+		$text = rtrim( $text );
+
+		return $text;
+	}
+
+	/**
+	 * Fetch the user's signature text, if any, and normalize to
+	 * validated, ready-to-insert wikitext.
+	 *
+	 * @param User $user
+	 * @return string
+	 * @private
+	 */
+	function getUserSig( &$user ) {
+		$username = $user->getName();
+		$nickname = $user->getOption( 'nickname' );
+		$nickname = $nickname === '' ? $username : $nickname;
+
+		if( $user->getBoolOption( 'fancysig' ) !== false ) {
+			# Sig. might contain markup; validate this
+			if( $this->validateSig( $nickname ) !== false ) {
+				# Validated; clean up (if needed) and return it
+				return $this->cleanSig( $nickname, true );
+			} else {
+				# Failed to validate; fall back to the default
+				$nickname = $username;
+				wfDebug( "Parser::getUserSig: $username has bad XML tags in signature.\n" );
+			}
+		}
+
+		// Make sure nickname doesnt get a sig in a sig
+		$nickname = $this->cleanSigInSig( $nickname );
+
+		# If we're still here, make it a link to the user page
+		$userpage = $user->getUserPage();
+		return( '[[' . $userpage->getPrefixedText() . '|' . wfEscapeWikiText( $nickname ) . ']]' );
+	}
+
+	/**
+	 * Check that the user's signature contains no bad XML
+	 *
+	 * @param string $text
+	 * @return mixed An expanded string, or false if invalid.
+	 */
+	function validateSig( $text ) {
+		return( wfIsWellFormedXmlFragment( $text ) ? $text : false );
+	}
+
+	/**
+	 * Clean up signature text
+	 *
+	 * 1) Strip ~~~, ~~~~ and ~~~~~ out of signatures @see cleanSigInSig
+	 * 2) Substitute all transclusions
+	 *
+	 * @param string $text
+	 * @param $parsing Whether we're cleaning (preferences save) or parsing
+	 * @return string Signature text
+	 */
+	function cleanSig( $text, $parsing = false ) {
+		global $wgTitle;
+		$this->startExternalParse( $wgTitle, new ParserOptions(), $parsing ? OT_WIKI : OT_MSG );
+
+		$substWord = MagicWord::get( 'subst' );
+		$substRegex = '/\{\{(?!(?:' . $substWord->getBaseRegex() . '))/x' . $substWord->getRegexCase();
+		$substText = '{{' . $substWord->getSynonym( 0 );
+
+		$text = preg_replace( $substRegex, $substText, $text );
+		$text = $this->cleanSigInSig( $text );
+		$text = $this->replaceVariables( $text );
+
+		$this->clearState();
+		return $text;
+	}
+
+	/**
+	 * Strip ~~~, ~~~~ and ~~~~~ out of signatures
+	 * @param string $text
+	 * @return string Signature text with /~{3,5}/ removed
+	 */
+	function cleanSigInSig( $text ) {
+		$text = preg_replace( '/~{3,5}/', '', $text );
+		return $text;
+	}
+
+	/**
+	 * Set up some variables which are usually set up in parse()
+	 * so that an external function can call some class members with confidence
+	 * @public
+	 */
+	function startExternalParse( &$title, $options, $outputType, $clearState = true ) {
+		$this->mTitle =& $title;
+		$this->mOptions = $options;
+		$this->setOutputType( $outputType );
+		if ( $clearState ) {
+			$this->clearState();
+		}
+	}
+
+	/**
+	 * Transform a MediaWiki message by replacing magic variables.
+	 *
+	 * @param string $text the text to transform
+	 * @param ParserOptions $options  options
+	 * @return string the text with variables substituted
+	 * @public
+	 */
+	function transformMsg( $text, $options ) {
+		global $wgTitle;
+		static $executing = false;
+
+		$fname = "Parser::transformMsg";
+
+		# Guard against infinite recursion
+		if ( $executing ) {
+			return $text;
+		}
+		$executing = true;
+
+		wfProfileIn($fname);
+
+		if ( $wgTitle && !( $wgTitle instanceof FakeTitle ) ) {
+			$this->mTitle = $wgTitle;
+		} else {
+			$this->mTitle = Title::newFromText('msg');
+		}
+		$this->mOptions = $options;
+		$this->setOutputType( OT_MSG );
+		$this->clearState();
+		$text = $this->replaceVariables( $text );
+
+		$executing = false;
+		wfProfileOut($fname);
+		return $text;
+	}
+
+	/**
+	 * Create an HTML-style tag, e.g. <yourtag>special text</yourtag>
+	 * The callback should have the following form:
+	 *    function myParserHook( $text, $params, &$parser ) { ... }
+	 *
+	 * Transform and return $text. Use $parser for any required context, e.g. use
+	 * $parser->getTitle() and $parser->getOptions() not $wgTitle or $wgOut->mParserOptions
+	 *
+	 * @public
+	 *
+	 * @param mixed $tag The tag to use, e.g. 'hook' for <hook>
+	 * @param mixed $callback The callback function (and object) to use for the tag
+	 *
+	 * @return The old value of the mTagHooks array associated with the hook
+	 */
+	function setHook( $tag, $callback ) {
+		$tag = strtolower( $tag );
+		$oldVal = isset( $this->mTagHooks[$tag] ) ? $this->mTagHooks[$tag] : null;
+		$this->mTagHooks[$tag] = $callback;
+
+		return $oldVal;
+	}
+
+	/**
+	 * Create a function, e.g. {{sum:1|2|3}}
+	 * The callback function should have the form:
+	 *    function myParserFunction( &$parser, $arg1, $arg2, $arg3 ) { ... }
+	 *
+	 * The callback may either return the text result of the function, or an array with the text
+	 * in element 0, and a number of flags in the other elements. The names of the flags are
+	 * specified in the keys. Valid flags are:
+	 *   found                     The text returned is valid, stop processing the template. This
+	 *                             is on by default.
+	 *   nowiki                    Wiki markup in the return value should be escaped
+	 *   noparse                   Unsafe HTML tags should not be stripped, etc.
+	 *   noargs                    Don't replace triple-brace arguments in the return value
+	 *   isHTML                    The returned text is HTML, armour it against wikitext transformation
+	 *
+	 * @public
+	 *
+	 * @param string $id The magic word ID
+	 * @param mixed $callback The callback function (and object) to use
+	 * @param integer $flags a combination of the following flags:
+	 *                SFH_NO_HASH No leading hash, i.e. {{plural:...}} instead of {{#if:...}}
+	 *
+	 * @return The old callback function for this name, if any
+	 */
+	function setFunctionHook( $id, $callback, $flags = 0 ) {
+		$oldVal = isset( $this->mFunctionHooks[$id] ) ? $this->mFunctionHooks[$id] : null;
+		$this->mFunctionHooks[$id] = $callback;
+
+		# Add to function cache
+		$mw = MagicWord::get( $id );
+		if( !$mw )
+			throw new MWException( 'Parser::setFunctionHook() expecting a magic word identifier.' );
+
+		$synonyms = $mw->getSynonyms();
+		$sensitive = intval( $mw->isCaseSensitive() );
+
+		foreach ( $synonyms as $syn ) {
+			# Case
+			if ( !$sensitive ) {
+				$syn = strtolower( $syn );
+			}
+			# Add leading hash
+			if ( !( $flags & SFH_NO_HASH ) ) {
+				$syn = '#' . $syn;
+			}
+			# Remove trailing colon
+			if ( substr( $syn, -1, 1 ) == ':' ) {
+				$syn = substr( $syn, 0, -1 );
+			}
+			$this->mFunctionSynonyms[$sensitive][$syn] = $id;
+		}
+		return $oldVal;
+	}
+
+	/**
+	 * Get all registered function hook identifiers
+	 *
+	 * @return array
+	 */
+	function getFunctionHooks() {
+		return array_keys( $this->mFunctionHooks );
+	}
+
+	/**
+	 * Replace <!--LINK--> link placeholders with actual links, in the buffer
+	 * Placeholders created in Skin::makeLinkObj()
+	 * Returns an array of links found, indexed by PDBK:
+	 *  0 - broken
+	 *  1 - normal link
+	 *  2 - stub
+	 * $options is a bit field, RLH_FOR_UPDATE to select for update
+	 */
+	function replaceLinkHolders( &$text, $options = 0 ) {
+		global $wgUser;
+		global $wgContLang;
+
+		$fname = 'Parser::replaceLinkHolders';
+		wfProfileIn( $fname );
+
+		$pdbks = array();
+		$colours = array();
+		$sk = $this->mOptions->getSkin();
+		$linkCache =& LinkCache::singleton();
+
+		if ( !empty( $this->mLinkHolders['namespaces'] ) ) {
+			wfProfileIn( $fname.'-check' );
+			$dbr = wfGetDB( DB_SLAVE );
+			$page = $dbr->tableName( 'page' );
+			$threshold = $wgUser->getOption('stubthreshold');
+
+			# Sort by namespace
+			asort( $this->mLinkHolders['namespaces'] );
+
+			# Generate query
+			$query = false;
+			$current = null;
+			foreach ( $this->mLinkHolders['namespaces'] as $key => $ns ) {
+				# Make title object
+				$title = $this->mLinkHolders['titles'][$key];
+
+				# Skip invalid entries.
+				# Result will be ugly, but prevents crash.
+				if ( is_null( $title ) ) {
+					continue;
+				}
+				$pdbk = $pdbks[$key] = $title->getPrefixedDBkey();
+
+				# Check if it's a static known link, e.g. interwiki
+				if ( $title->isAlwaysKnown() ) {
+					$colours[$pdbk] = 1;
+				} elseif ( ( $id = $linkCache->getGoodLinkID( $pdbk ) ) != 0 ) {
+					$colours[$pdbk] = 1;
+					$this->mOutput->addLink( $title, $id );
+				} elseif ( $linkCache->isBadLink( $pdbk ) ) {
+					$colours[$pdbk] = 0;
+				} else {
+					# Not in the link cache, add it to the query
+					if ( !isset( $current ) ) {
+						$current = $ns;
+						$query =  "SELECT page_id, page_namespace, page_title";
+						if ( $threshold > 0 ) {
+							$query .= ', page_len, page_is_redirect';
+						}
+						$query .= " FROM $page WHERE (page_namespace=$ns AND page_title IN(";
+					} elseif ( $current != $ns ) {
+						$current = $ns;
+						$query .= ")) OR (page_namespace=$ns AND page_title IN(";
+					} else {
+						$query .= ', ';
+					}
+
+					$query .= $dbr->addQuotes( $this->mLinkHolders['dbkeys'][$key] );
+				}
+			}
+			if ( $query ) {
+				$query .= '))';
+				if ( $options & RLH_FOR_UPDATE ) {
+					$query .= ' FOR UPDATE';
+				}
+
+				$res = $dbr->query( $query, $fname );
+
+				# Fetch data and form into an associative array
+				# non-existent = broken
+				# 1 = known
+				# 2 = stub
+				while ( $s = $dbr->fetchObject($res) ) {
+					$title = Title::makeTitle( $s->page_namespace, $s->page_title );
+					$pdbk = $title->getPrefixedDBkey();
+					$linkCache->addGoodLinkObj( $s->page_id, $title );
+					$this->mOutput->addLink( $title, $s->page_id );
+
+					if ( $threshold >  0 ) {
+						$size = $s->page_len;
+						if ( $s->page_is_redirect || $s->page_namespace != 0 || $size >= $threshold ) {
+							$colours[$pdbk] = 1;
+						} else {
+							$colours[$pdbk] = 2;
+						}
+					} else {
+						$colours[$pdbk] = 1;
+					}
+				}
+			}
+			wfProfileOut( $fname.'-check' );
+
+			# Do a second query for different language variants of links and categories
+			if($wgContLang->hasVariants()){
+				$linkBatch = new LinkBatch();
+				$variantMap = array(); // maps $pdbkey_Variant => $keys (of link holders)
+				$categoryMap = array(); // maps $category_variant => $category (dbkeys)
+				$varCategories = array(); // category replacements oldDBkey => newDBkey
+
+				$categories = $this->mOutput->getCategoryLinks();
+
+				// Add variants of links to link batch
+				foreach ( $this->mLinkHolders['namespaces'] as $key => $ns ) {
+					$title = $this->mLinkHolders['titles'][$key];
+					if ( is_null( $title ) )
+						continue;
+
+					$pdbk = $title->getPrefixedDBkey();
+					$titleText = $title->getText();
+
+					// generate all variants of the link title text
+					$allTextVariants = $wgContLang->convertLinkToAllVariants($titleText);
+
+					// if link was not found (in first query), add all variants to query
+					if ( !isset($colours[$pdbk]) ){
+						foreach($allTextVariants as $textVariant){
+							if($textVariant != $titleText){
+								$variantTitle = Title::makeTitle( $ns, $textVariant );
+								if(is_null($variantTitle)) continue;
+								$linkBatch->addObj( $variantTitle );
+								$variantMap[$variantTitle->getPrefixedDBkey()][] = $key;
+							}
+						}
+					}
+				}
+
+				// process categories, check if a category exists in some variant
+				foreach( $categories as $category){
+					$variants = $wgContLang->convertLinkToAllVariants($category);
+					foreach($variants as $variant){
+						if($variant != $category){
+							$variantTitle = Title::newFromDBkey( Title::makeName(NS_CATEGORY,$variant) );
+							if(is_null($variantTitle)) continue;
+							$linkBatch->addObj( $variantTitle );
+							$categoryMap[$variant] = $category;
+						}
+					}
+				}
+
+
+				if(!$linkBatch->isEmpty()){
+					// construct query
+					$titleClause = $linkBatch->constructSet('page', $dbr);
+
+					$variantQuery =  "SELECT page_id, page_namespace, page_title";
+					if ( $threshold > 0 ) {
+						$variantQuery .= ', page_len, page_is_redirect';
+					}
+
+					$variantQuery .= " FROM $page WHERE $titleClause";
+					if ( $options & RLH_FOR_UPDATE ) {
+						$variantQuery .= ' FOR UPDATE';
+					}
+
+					$varRes = $dbr->query( $variantQuery, $fname );
+
+					// for each found variants, figure out link holders and replace
+					while ( $s = $dbr->fetchObject($varRes) ) {
+
+						$variantTitle = Title::makeTitle( $s->page_namespace, $s->page_title );
+						$varPdbk = $variantTitle->getPrefixedDBkey();
+						$vardbk = $variantTitle->getDBkey();
+
+						$holderKeys = array();
+						if(isset($variantMap[$varPdbk])){
+							$holderKeys = $variantMap[$varPdbk];
+							$linkCache->addGoodLinkObj( $s->page_id, $variantTitle );
+							$this->mOutput->addLink( $variantTitle, $s->page_id );
+						}
+
+						// loop over link holders
+						foreach($holderKeys as $key){
+							$title = $this->mLinkHolders['titles'][$key];
+							if ( is_null( $title ) ) continue;
+
+							$pdbk = $title->getPrefixedDBkey();
+
+							if(!isset($colours[$pdbk])){
+								// found link in some of the variants, replace the link holder data
+								$this->mLinkHolders['titles'][$key] = $variantTitle;
+								$this->mLinkHolders['dbkeys'][$key] = $variantTitle->getDBkey();
+
+								// set pdbk and colour
+								$pdbks[$key] = $varPdbk;
+								if ( $threshold >  0 ) {
+									$size = $s->page_len;
+									if ( $s->page_is_redirect || $s->page_namespace != 0 || $size >= $threshold ) {
+										$colours[$varPdbk] = 1;
+									} else {
+										$colours[$varPdbk] = 2;
+									}
+								}
+								else {
+									$colours[$varPdbk] = 1;
+								}
+							}
+						}
+
+						// check if the object is a variant of a category
+						if(isset($categoryMap[$vardbk])){
+							$oldkey = $categoryMap[$vardbk];
+							if($oldkey != $vardbk)
+								$varCategories[$oldkey]=$vardbk;
+						}
+					}
+
+					// rebuild the categories in original order (if there are replacements)
+					if(count($varCategories)>0){
+						$newCats = array();
+						$originalCats = $this->mOutput->getCategories();
+						foreach($originalCats as $cat => $sortkey){
+							// make the replacement
+							if( array_key_exists($cat,$varCategories) )
+								$newCats[$varCategories[$cat]] = $sortkey;
+							else $newCats[$cat] = $sortkey;
+						}
+						$this->mOutput->setCategoryLinks($newCats);
+					}
+				}
+			}
+
+			# Construct search and replace arrays
+			wfProfileIn( $fname.'-construct' );
+			$replacePairs = array();
+			foreach ( $this->mLinkHolders['namespaces'] as $key => $ns ) {
+				$pdbk = $pdbks[$key];
+				$searchkey = "<!--LINK $key-->";
+				$title = $this->mLinkHolders['titles'][$key];
+				if ( empty( $colours[$pdbk] ) ) {
+					$linkCache->addBadLinkObj( $title );
+					$colours[$pdbk] = 0;
+					$this->mOutput->addLink( $title, 0 );
+					$replacePairs[$searchkey] = $sk->makeBrokenLinkObj( $title,
+									$this->mLinkHolders['texts'][$key],
+									$this->mLinkHolders['queries'][$key] );
+				} elseif ( $colours[$pdbk] == 1 ) {
+					$replacePairs[$searchkey] = $sk->makeKnownLinkObj( $title,
+									$this->mLinkHolders['texts'][$key],
+									$this->mLinkHolders['queries'][$key] );
+				} elseif ( $colours[$pdbk] == 2 ) {
+					$replacePairs[$searchkey] = $sk->makeStubLinkObj( $title,
+									$this->mLinkHolders['texts'][$key],
+									$this->mLinkHolders['queries'][$key] );
+				}
+			}
+			$replacer = new HashtableReplacer( $replacePairs, 1 );
+			wfProfileOut( $fname.'-construct' );
+
+			# Do the thing
+			wfProfileIn( $fname.'-replace' );
+			$text = preg_replace_callback(
+				'/(<!--LINK .*?-->)/',
+				$replacer->cb(),
+				$text);
+
+			wfProfileOut( $fname.'-replace' );
+		}
+
+		# Now process interwiki link holders
+		# This is quite a bit simpler than internal links
+		if ( !empty( $this->mInterwikiLinkHolders['texts'] ) ) {
+			wfProfileIn( $fname.'-interwiki' );
+			# Make interwiki link HTML
+			$replacePairs = array();
+			foreach( $this->mInterwikiLinkHolders['texts'] as $key => $link ) {
+				$title = $this->mInterwikiLinkHolders['titles'][$key];
+				$replacePairs[$key] = $sk->makeLinkObj( $title, $link );
+			}
+			$replacer = new HashtableReplacer( $replacePairs, 1 );
+
+			$text = preg_replace_callback(
+				'/<!--IWLINK (.*?)-->/',
+				$replacer->cb(),
+				$text );
+			wfProfileOut( $fname.'-interwiki' );
+		}
+
+		wfProfileOut( $fname );
+		return $colours;
+	}
+
+	/**
+	 * Replace <!--LINK--> link placeholders with plain text of links
+	 * (not HTML-formatted).
+	 * @param string $text
+	 * @return string
+	 */
+	function replaceLinkHoldersText( $text ) {
+		$fname = 'Parser::replaceLinkHoldersText';
+		wfProfileIn( $fname );
+
+		$text = preg_replace_callback(
+			'/<!--(LINK|IWLINK) (.*?)-->/',
+			array( &$this, 'replaceLinkHoldersTextCallback' ),
+			$text );
+
+		wfProfileOut( $fname );
+		return $text;
+	}
+
+	/**
+	 * @param array $matches
+	 * @return string
+	 * @private
+	 */
+	function replaceLinkHoldersTextCallback( $matches ) {
+		$type = $matches[1];
+		$key  = $matches[2];
+		if( $type == 'LINK' ) {
+			if( isset( $this->mLinkHolders['texts'][$key] ) ) {
+				return $this->mLinkHolders['texts'][$key];
+			}
+		} elseif( $type == 'IWLINK' ) {
+			if( isset( $this->mInterwikiLinkHolders['texts'][$key] ) ) {
+				return $this->mInterwikiLinkHolders['texts'][$key];
+			}
+		}
+		return $matches[0];
+	}
+
+	/**
+	 * Tag hook handler for 'pre'.
+	 */
+	function renderPreTag( $text, $attribs ) {
+		// Backwards-compatibility hack
+		$content = StringUtils::delimiterReplace( '<nowiki>', '</nowiki>', '$1', $text, 'i' );
+
+		$attribs = Sanitizer::validateTagAttributes( $attribs, 'pre' );
+		return wfOpenElement( 'pre', $attribs ) .
+			Xml::escapeTagsOnly( $content ) .
+			'</pre>';
+	}
+
+	/**
+	 * Renders an image gallery from a text with one line per image.
+	 * text labels may be given by using |-style alternative text. E.g.
+	 *   Image:one.jpg|The number "1"
+	 *   Image:tree.jpg|A tree
+	 * given as text will return the HTML of a gallery with two images,
+	 * labeled 'The number "1"' and
+	 * 'A tree'.
+	 */
+	function renderImageGallery( $text, $params ) {
+		$ig = new ImageGallery();
+		$ig->setContextTitle( $this->mTitle );
+		$ig->setShowBytes( false );
+		$ig->setShowFilename( false );
+		$ig->setParsing();
+		$ig->useSkin( $this->mOptions->getSkin() );
+
+		if( isset( $params['caption'] ) ) {
+			$caption = $params['caption'];
+			$caption = htmlspecialchars( $caption );
+			$caption = $this->replaceInternalLinks( $caption );
+			$ig->setCaptionHtml( $caption );
+		}
+		if( isset( $params['perrow'] ) ) {
+			$ig->setPerRow( $params['perrow'] );
+		}
+		if( isset( $params['widths'] ) ) {
+			$ig->setWidths( $params['widths'] );
+		}
+		if( isset( $params['heights'] ) ) {
+			$ig->setHeights( $params['heights'] );
+		}
+
+		$lines = explode( "\n", $text );
+		foreach ( $lines as $line ) {
+			# match lines like these:
+			# Image:someimage.jpg|This is some image
+			$matches = array();
+			preg_match( "/^([^|]+)(\\|(.*))?$/", $line, $matches );
+			# Skip empty lines
+			if ( count( $matches ) == 0 ) {
+				continue;
+			}
+			$tp = Title::newFromText( $matches[1] );
+			$nt =& $tp;
+			if( is_null( $nt ) ) {
+				# Bogus title. Ignore these so we don't bomb out later.
+				continue;
+			}
+			if ( isset( $matches[3] ) ) {
+				$label = $matches[3];
+			} else {
+				$label = '';
+			}
+
+			$pout = $this->parse( $label,
+				$this->mTitle,
+				$this->mOptions,
+				false, // Strip whitespace...?
+				false  // Don't clear state!
+			);
+			$html = $pout->getText();
+
+			$ig->add( new Image( $nt ), $html );
+
+			# Only add real images (bug #5586)
+			if ( $nt->getNamespace() == NS_IMAGE ) {
+				$this->mOutput->addImage( $nt->getDBkey() );
+			}
+		}
+		return $ig->toHTML();
+	}
+
+	/**
+	 * Parse image options text and use it to make an image
+	 */
+	function makeImage( $nt, $options ) {
+		# @TODO: let the MediaHandler specify its transform parameters
+		#
+		# Check if the options text is of the form "options|alt text"
+		# Options are:
+		#  * thumbnail       	make a thumbnail with enlarge-icon and caption, alignment depends on lang
+		#  * left		no resizing, just left align. label is used for alt= only
+		#  * right		same, but right aligned
+		#  * none		same, but not aligned
+		#  * ___px		scale to ___ pixels width, no aligning. e.g. use in taxobox
+		#  * center		center the image
+		#  * framed		Keep original image size, no magnify-button.
+		# vertical-align values (no % or length right now):
+		#  * baseline
+		#  * sub
+		#  * super
+		#  * top
+		#  * text-top
+		#  * middle
+		#  * bottom
+		#  * text-bottom
+
+
+		$part = array_map( 'trim', explode( '|', $options) );
+
+		$mwAlign = array();
+		$alignments = array( 'left', 'right', 'center', 'none', 'baseline', 'sub', 'super', 'top', 'text-top', 'middle', 'bottom', 'text-bottom' );
+		foreach ( $alignments as $alignment ) {
+			$mwAlign[$alignment] =& MagicWord::get( 'img_'.$alignment );
+		}
+		$mwThumb  =& MagicWord::get( 'img_thumbnail' );
+		$mwManualThumb =& MagicWord::get( 'img_manualthumb' );
+		$mwWidth  =& MagicWord::get( 'img_width' );
+		$mwFramed =& MagicWord::get( 'img_framed' );
+		$mwPage   =& MagicWord::get( 'img_page' );
+		$caption = '';
+
+		$params = array();
+		$framed = $thumb = false;
+		$manual_thumb = '' ;
+		$align = $valign = '';
+		$sk = $this->mOptions->getSkin();
+
+		foreach( $part as $val ) {
+			if ( !is_null( $mwThumb->matchVariableStartToEnd($val) ) ) {
+				$thumb=true;
+			} elseif ( ! is_null( $match = $mwManualThumb->matchVariableStartToEnd($val) ) ) {
+				# use manually specified thumbnail
+				$thumb=true;
+				$manual_thumb = $match;
+			} else {
+				foreach( $alignments as $alignment ) {
+					if ( ! is_null( $mwAlign[$alignment]->matchVariableStartToEnd($val) ) ) {
+						switch ( $alignment ) {
+							case 'left': case 'right': case 'center': case 'none':
+								$align = $alignment; break;
+							default:
+								$valign = $alignment;
+						}
+						continue 2;
+					}
+				}
+				if ( ! is_null( $match = $mwPage->matchVariableStartToEnd($val) ) ) {
+					# Select a page in a multipage document
+					$params['page'] = $match;
+				} elseif ( !isset( $params['width'] ) && ! is_null( $match = $mwWidth->matchVariableStartToEnd($val) ) ) {
+					wfDebug( "img_width match: $match\n" );
+					# $match is the image width in pixels
+					$m = array();
+					if ( preg_match( '/^([0-9]*)x([0-9]*)$/', $match, $m ) ) {
+						 $params['width'] = intval( $m[1] );
+						 $params['height'] = intval( $m[2] );
+					} else {
+						$params['width'] = intval($match);
+					}
+				} elseif ( ! is_null( $mwFramed->matchVariableStartToEnd($val) ) ) {
+					$framed=true;
+				} else {
+					$caption = $val;
+				}
+			}
+		}
+		# Strip bad stuff out of the alt text
+		$alt = $this->replaceLinkHoldersText( $caption );
+
+		# make sure there are no placeholders in thumbnail attributes
+		# that are later expanded to html- so expand them now and
+		# remove the tags
+		$alt = $this->mStripState->unstripBoth( $alt );
+		$alt = Sanitizer::stripAllTags( $alt );
+
+		# Linker does the rest
+		return $sk->makeImageLinkObj( $nt, $caption, $alt, $align, $params, $framed, $thumb, $manual_thumb, $valign );
+	}
+
+	/**
+	 * Set a flag in the output object indicating that the content is dynamic and
+	 * shouldn't be cached.
+	 */
+	function disableCache() {
+		wfDebug( "Parser output marked as uncacheable.\n" );
+		$this->mOutput->mCacheTime = -1;
+	}
+
+	/**#@+
+	 * Callback from the Sanitizer for expanding items found in HTML attribute
+	 * values, so they can be safely tested and escaped.
+	 * @param string $text
+	 * @param array $args
+	 * @return string
+	 * @private
+	 */
+	function attributeStripCallback( &$text, $args ) {
+		$text = $this->replaceVariables( $text, $args );
+		$text = $this->mStripState->unstripBoth( $text );
+		return $text;
+	}
+
+	/**#@-*/
+
+	/**#@+
+	 * Accessor/mutator
+	 */
+	function Title( $x = NULL ) { return wfSetVar( $this->mTitle, $x ); }
+	function Options( $x = NULL ) { return wfSetVar( $this->mOptions, $x ); }
+	function OutputType( $x = NULL ) { return wfSetVar( $this->mOutputType, $x ); }
+	/**#@-*/
+
+	/**#@+
+	 * Accessor
+	 */
+	function getTags() { return array_keys( $this->mTagHooks ); }
+	/**#@-*/
+
+
+	/**
+	 * Break wikitext input into sections, and either pull or replace
+	 * some particular section's text.
+	 *
+	 * External callers should use the getSection and replaceSection methods.
+	 *
+	 * @param $text Page wikitext
+	 * @param $section Numbered section. 0 pulls the text before the first
+	 *                 heading; other numbers will pull the given section
+	 *                 along with its lower-level subsections.
+	 * @param $mode One of "get" or "replace"
+	 * @param $newtext Replacement text for section data.
+	 * @return string for "get", the extracted section text.
+	 *                for "replace", the whole page with the section replaced.
+	 */
+	private function extractSections( $text, $section, $mode, $newtext='' ) {
+		# strip NOWIKI etc. to avoid confusion (true-parameter causes HTML
+		# comments to be stripped as well)
+		$stripState = new StripState;
+
+		$oldOutputType = $this->mOutputType;
+		$oldOptions = $this->mOptions;
+		$this->mOptions = new ParserOptions();
+		$this->setOutputType( OT_WIKI );
+
+		$striptext = $this->strip( $text, $stripState, true );
+
+		$this->setOutputType( $oldOutputType );
+		$this->mOptions = $oldOptions;
+
+		# now that we can be sure that no pseudo-sections are in the source,
+		# split it up by section
+		$uniq = preg_quote( $this->uniqPrefix(), '/' );
+		$comment = "(?:$uniq-!--.*?QINU)";
+		$secs = preg_split(
+			"/
+			(
+				^
+				(?:$comment|<\/?noinclude>)* # Initial comments will be stripped
+				(=+) # Should this be limited to 6?
+				.+?  # Section title...
+				\\2  # Ending = count must match start
+				(?:$comment|<\/?noinclude>|[ \\t]+)* # Trailing whitespace ok
+				$
+			|
+				<h([1-6])\b.*?>
+				.*?
+				<\/h\\3\s*>
+			)
+			/mix",
+			$striptext, -1,
+			PREG_SPLIT_DELIM_CAPTURE);
+
+		if( $mode == "get" ) {
+			if( $section == 0 ) {
+				// "Section 0" returns the content before any other section.
+				$rv = $secs[0];
+			} else {
+			  	//track missing section, will replace if found.
+				$rv = $newtext;
+			}
+		} elseif( $mode == "replace" ) {
+			if( $section == 0 ) {
+				$rv = $newtext . "\n\n";
+				$remainder = true;
+			} else {
+				$rv = $secs[0];
+				$remainder = false;
+			}
+		}
+		$count = 0;
+		$sectionLevel = 0;
+		for( $index = 1; $index < count( $secs ); ) {
+			$headerLine = $secs[$index++];
+			if( $secs[$index] ) {
+				// A wiki header
+				$headerLevel = strlen( $secs[$index++] );
+			} else {
+				// An HTML header
+				$index++;
+				$headerLevel = intval( $secs[$index++] );
+			}
+			$content = $secs[$index++];
+
+			$count++;
+			if( $mode == "get" ) {
+				if( $count == $section ) {
+					$rv = $headerLine . $content;
+					$sectionLevel = $headerLevel;
+				} elseif( $count > $section ) {
+					if( $sectionLevel && $headerLevel > $sectionLevel ) {
+						$rv .= $headerLine . $content;
+					} else {
+						// Broke out to a higher-level section
+						break;
+					}
+				}
+			} elseif( $mode == "replace" ) {
+				if( $count < $section ) {
+					$rv .= $headerLine . $content;
+				} elseif( $count == $section ) {
+					$rv .= $newtext . "\n\n";
+					$sectionLevel = $headerLevel;
+				} elseif( $count > $section ) {
+					if( $headerLevel <= $sectionLevel ) {
+						// Passed the section's sub-parts.
+						$remainder = true;
+					}
+					if( $remainder ) {
+						$rv .= $headerLine . $content;
+					}
+				}
+			}
+		}
+		if (is_string($rv))
+			# reinsert stripped tags
+			$rv = trim( $stripState->unstripBoth( $rv ) );
+
+		return $rv;
+	}
+
+	/**
+	 * This function returns the text of a section, specified by a number ($section).
+	 * A section is text under a heading like == Heading == or \<h1\>Heading\</h1\>, or
+	 * the first section before any such heading (section 0).
+	 *
+	 * If a section contains subsections, these are also returned.
+	 *
+	 * @param $text String: text to look in
+	 * @param $section Integer: section number
+	 * @param $deftext: default to return if section is not found
+	 * @return string text of the requested section
+	 */
+	public function getSection( $text, $section, $deftext='' ) {
+		return $this->extractSections( $text, $section, "get", $deftext );
+	}
+
+	public function replaceSection( $oldtext, $section, $text ) {
+		return $this->extractSections( $oldtext, $section, "replace", $text );
+	}
+
+	/**
+	 * Get the timestamp associated with the current revision, adjusted for
+	 * the default server-local timestamp
+	 */
+	function getRevisionTimestamp() {
+		if ( is_null( $this->mRevisionTimestamp ) ) {
+			wfProfileIn( __METHOD__ );
+			global $wgContLang;
+			$dbr = wfGetDB( DB_SLAVE );
+			$timestamp = $dbr->selectField( 'revision', 'rev_timestamp',
+					array( 'rev_id' => $this->mRevisionId ), __METHOD__ );
+
+			// Normalize timestamp to internal MW format for timezone processing.
+			// This has the added side-effect of replacing a null value with
+			// the current time, which gives us more sensible behavior for
+			// previews.
+			$timestamp = wfTimestamp( TS_MW, $timestamp );
+
+			// The cryptic '' timezone parameter tells to use the site-default
+			// timezone offset instead of the user settings.
+			//
+			// Since this value will be saved into the parser cache, served
+			// to other users, and potentially even used inside links and such,
+			// it needs to be consistent for all visitors.
+			$this->mRevisionTimestamp = $wgContLang->userAdjust( $timestamp, '' );
+
+			wfProfileOut( __METHOD__ );
+		}
+		return $this->mRevisionTimestamp;
+	}
+
+	/**
+	 * Mutator for $mDefaultSort
+	 *
+	 * @param $sort New value
+	 */
+	public function setDefaultSort( $sort ) {
+		$this->mDefaultSort = $sort;
+	}
+
+	/**
+	 * Accessor for $mDefaultSort
+	 * Will use the title/prefixed title if none is set
+	 *
+	 * @return string
+	 */
+	public function getDefaultSort() {
+		if( $this->mDefaultSort !== false ) {
+			return $this->mDefaultSort;
+		} else {
+			return $this->mTitle->getNamespace() == NS_CATEGORY
+					? $this->mTitle->getText()
+					: $this->mTitle->getPrefixedText();
+		}
+	}
+
+}
+
+/**
+ * @todo document, briefly.
+ * @addtogroup Parser
+ */
+class OnlyIncludeReplacer {
+	var $output = '';
+
+	function replace( $matches ) { 
+		if ( substr( $matches[1], -1 ) == "\n" ) {
+			$this->output .= substr( $matches[1], 0, -1 );
+		} else {
+			$this->output .= $matches[1];
+		}
+	}
+}
+
+/**
+ * @todo document, briefly.
+ * @addtogroup Parser
+ */
+class StripState {
+	var $general, $nowiki;
+
+	function __construct() {
+		$this->general = new ReplacementArray;
+		$this->nowiki = new ReplacementArray;
+	}
+
+	function unstripGeneral( $text ) {
+		wfProfileIn( __METHOD__ );
+		$text = $this->general->replace( $text );
+		wfProfileOut( __METHOD__ );
+		return $text;
+	}
+
+	function unstripNoWiki( $text ) {
+		wfProfileIn( __METHOD__ );
+		$text = $this->nowiki->replace( $text );
+		wfProfileOut( __METHOD__ );
+		return $text;
+	}
+
+	function unstripBoth( $text ) {
+		wfProfileIn( __METHOD__ );
+		$text = $this->general->replace( $text );
+		$text = $this->nowiki->replace( $text );
+		wfProfileOut( __METHOD__ );
+		return $text;
+	}
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/ParserCache.php
===================================================================
--- /MediaWiki/branches/1.11/includes/ParserCache.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/ParserCache.php	(revision 1280)
@@ -0,0 +1,119 @@
+<?php
+/**
+ *
+ * @addtogroup Cache
+ * @todo document
+ */
+class ParserCache {
+	/**
+	 * Get an instance of this object
+	 */
+	public static function &singleton() {
+		static $instance;
+		if ( !isset( $instance ) ) {
+			global $parserMemc;
+			$instance = new ParserCache( $parserMemc );
+		}
+		return $instance;
+	}
+
+	/**
+	 * Setup a cache pathway with a given back-end storage mechanism.
+	 * May be a memcached client or a BagOStuff derivative.
+	 *
+	 * @param object $memCached
+	 */
+	function __construct( &$memCached ) {
+		$this->mMemc =& $memCached;
+	}
+
+	function getKey( &$article, &$user ) {
+		global $action;
+		$hash = $user->getPageRenderingHash();
+		if( !$article->mTitle->quickUserCan( 'edit' ) ) {
+			// section edit links are suppressed even if the user has them on
+			$edit = '!edit=0';
+		} else {
+			$edit = '';
+		}
+		$pageid = intval( $article->getID() );
+		$renderkey = (int)($action == 'render');
+		$key = wfMemcKey( 'pcache', 'idhash', "$pageid-$renderkey!$hash$edit" );
+		return $key;
+	}
+
+	function getETag( &$article, &$user ) {
+		return 'W/"' . $this->getKey($article, $user) . "--" . $article->mTouched. '"';
+	}
+
+	function get( &$article, &$user ) {
+		global $wgCacheEpoch;
+		$fname = 'ParserCache::get';
+		wfProfileIn( $fname );
+
+		$key = $this->getKey( $article, $user );
+
+		wfDebug( "Trying parser cache $key\n" );
+		$value = $this->mMemc->get( $key );
+		if ( is_object( $value ) ) {
+			wfDebug( "Found.\n" );
+			# Delete if article has changed since the cache was made
+			$canCache = $article->checkTouched();
+			$cacheTime = $value->getCacheTime();
+			$touched = $article->mTouched;
+			if ( !$canCache || $value->expired( $touched ) ) {
+				if ( !$canCache ) {
+					wfIncrStats( "pcache_miss_invalid" );
+					wfDebug( "Invalid cached redirect, touched $touched, epoch $wgCacheEpoch, cached $cacheTime\n" );
+				} else {
+					wfIncrStats( "pcache_miss_expired" );
+					wfDebug( "Key expired, touched $touched, epoch $wgCacheEpoch, cached $cacheTime\n" );
+				}
+				$this->mMemc->delete( $key );
+				$value = false;
+			} else {
+				if ( isset( $value->mTimestamp ) ) {
+					$article->mTimestamp = $value->mTimestamp;
+				}
+				wfIncrStats( "pcache_hit" );
+			}
+		} else {
+			wfDebug( "Parser cache miss.\n" );
+			wfIncrStats( "pcache_miss_absent" );
+			$value = false;
+		}
+
+		wfProfileOut( $fname );
+		return $value;
+	}
+
+	function save( $parserOutput, &$article, &$user ){
+		global $wgParserCacheExpireTime;
+		$key = $this->getKey( $article, $user );
+
+		if( $parserOutput->getCacheTime() != -1 ) {
+
+			$now = wfTimestampNow();
+			$parserOutput->setCacheTime( $now );
+
+			// Save the timestamp so that we don't have to load the revision row on view
+			$parserOutput->mTimestamp = $article->getTimestamp();
+
+			$parserOutput->mText .= "\n<!-- Saved in parser cache with key $key and timestamp $now -->\n";
+			wfDebug( "Saved in parser cache with key $key and timestamp $now\n" );
+
+			if( $parserOutput->containsOldMagic() ){
+				$expire = 3600; # 1 hour
+			} else {
+				$expire = $wgParserCacheExpireTime;
+			}
+			$this->mMemc->set( $key, $parserOutput, $expire );
+
+		} else {
+			wfDebug( "Parser output was marked as uncacheable and has not been saved.\n" );
+		}
+	}
+
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/ParserOptions.php
===================================================================
--- /MediaWiki/branches/1.11/includes/ParserOptions.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/ParserOptions.php	(revision 1280)
@@ -0,0 +1,119 @@
+<?php
+
+/**
+ * Set options of the Parser
+ * @todo document
+ * @addtogroup Parser
+ */
+class ParserOptions
+{
+	# All variables are supposed to be private in theory, although in practise this is not the case.
+	var $mUseTeX;                    # Use texvc to expand <math> tags
+	var $mUseDynamicDates;           # Use DateFormatter to format dates
+	var $mInterwikiMagic;            # Interlanguage links are removed and returned in an array
+	var $mAllowExternalImages;       # Allow external images inline
+	var $mAllowExternalImagesFrom;   # If not, any exception?
+	var $mSkin;                      # Reference to the preferred skin
+	var $mDateFormat;                # Date format index
+	var $mEditSection;               # Create "edit section" links
+	var $mNumberHeadings;            # Automatically number headings
+	var $mAllowSpecialInclusion;     # Allow inclusion of special pages
+	var $mTidy;                      # Ask for tidy cleanup
+	var $mInterfaceMessage;          # Which lang to call for PLURAL and GRAMMAR
+	var $mMaxIncludeSize;            # Maximum size of template expansions, in bytes
+	var $mRemoveComments;            # Remove HTML comments. ONLY APPLIES TO PREPROCESS OPERATIONS
+
+	var $mUser;                      # Stored user object, just used to initialise the skin
+
+	function getUseTeX()                        { return $this->mUseTeX; }
+	function getUseDynamicDates()               { return $this->mUseDynamicDates; }
+	function getInterwikiMagic()                { return $this->mInterwikiMagic; }
+	function getAllowExternalImages()           { return $this->mAllowExternalImages; }
+	function getAllowExternalImagesFrom()       { return $this->mAllowExternalImagesFrom; }
+	function getEditSection()                   { return $this->mEditSection; }
+	function getNumberHeadings()                { return $this->mNumberHeadings; }
+	function getAllowSpecialInclusion()         { return $this->mAllowSpecialInclusion; }
+	function getTidy()                          { return $this->mTidy; }
+	function getInterfaceMessage()              { return $this->mInterfaceMessage; }
+	function getMaxIncludeSize()                { return $this->mMaxIncludeSize; }
+	function getRemoveComments()                { return $this->mRemoveComments; }
+
+	function getSkin() {
+		if ( !isset( $this->mSkin ) ) {
+			$this->mSkin = $this->mUser->getSkin();
+		}
+		return $this->mSkin;
+	}
+
+	function getDateFormat() {
+		if ( !isset( $this->mDateFormat ) ) {
+			$this->mDateFormat = $this->mUser->getDatePreference();
+		}
+		return $this->mDateFormat;
+	}
+
+	function setUseTeX( $x )                    { return wfSetVar( $this->mUseTeX, $x ); }
+	function setUseDynamicDates( $x )           { return wfSetVar( $this->mUseDynamicDates, $x ); }
+	function setInterwikiMagic( $x )            { return wfSetVar( $this->mInterwikiMagic, $x ); }
+	function setAllowExternalImages( $x )       { return wfSetVar( $this->mAllowExternalImages, $x ); }
+	function setAllowExternalImagesFrom( $x )   { return wfSetVar( $this->mAllowExternalImagesFrom, $x ); }
+	function setDateFormat( $x )                { return wfSetVar( $this->mDateFormat, $x ); }
+	function setEditSection( $x )               { return wfSetVar( $this->mEditSection, $x ); }
+	function setNumberHeadings( $x )            { return wfSetVar( $this->mNumberHeadings, $x ); }
+	function setAllowSpecialInclusion( $x )     { return wfSetVar( $this->mAllowSpecialInclusion, $x ); }
+	function setTidy( $x )                      { return wfSetVar( $this->mTidy, $x); }
+	function setSkin( $x )                      { $this->mSkin = $x; }
+	function setInterfaceMessage( $x )          { return wfSetVar( $this->mInterfaceMessage, $x); }
+	function setMaxIncludeSize( $x )            { return wfSetVar( $this->mMaxIncludeSize, $x ); }
+	function setRemoveComments( $x )            { return wfSetVar( $this->mRemoveComments, $x ); }
+
+	function __construct( $user = null ) {
+		$this->initialiseFromUser( $user );
+	}
+
+	/**
+	 * Get parser options
+	 * @static
+	 */
+	static function newFromUser( $user ) {
+		return new ParserOptions( $user );
+	}
+
+	/** Get user options */
+	function initialiseFromUser( $userInput ) {
+		global $wgUseTeX, $wgUseDynamicDates, $wgInterwikiMagic, $wgAllowExternalImages;
+		global $wgAllowExternalImagesFrom, $wgAllowSpecialInclusion, $wgMaxArticleSize;
+		$fname = 'ParserOptions::initialiseFromUser';
+		wfProfileIn( $fname );
+		if ( !$userInput ) {
+			global $wgUser;
+			if ( isset( $wgUser ) ) {
+				$user = $wgUser;
+			} else {
+				$user = new User;
+			}
+		} else {
+			$user =& $userInput;
+		}
+
+		$this->mUser = $user;
+
+		$this->mUseTeX = $wgUseTeX;
+		$this->mUseDynamicDates = $wgUseDynamicDates;
+		$this->mInterwikiMagic = $wgInterwikiMagic;
+		$this->mAllowExternalImages = $wgAllowExternalImages;
+		$this->mAllowExternalImagesFrom = $wgAllowExternalImagesFrom;
+		$this->mSkin = null; # Deferred
+		$this->mDateFormat = null; # Deferred
+		$this->mEditSection = true;
+		$this->mNumberHeadings = $user->getOption( 'numberheadings' );
+		$this->mAllowSpecialInclusion = $wgAllowSpecialInclusion;
+		$this->mTidy = false;
+		$this->mInterfaceMessage = false;
+		$this->mMaxIncludeSize = $wgMaxArticleSize * 1024;
+		$this->mRemoveComments = true;
+		wfProfileOut( $fname );
+	}
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/ParserOutput.php
===================================================================
--- /MediaWiki/branches/1.11/includes/ParserOutput.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/ParserOutput.php	(revision 1280)
@@ -0,0 +1,133 @@
+<?php
+/**
+ * @todo document
+ * @addtogroup Parser
+ */
+class ParserOutput
+{
+	var $mText,             # The output text
+		$mLanguageLinks,    # List of the full text of language links, in the order they appear
+		$mCategories,       # Map of category names to sort keys
+		$mContainsOldMagic, # Boolean variable indicating if the input contained variables like {{CURRENTDAY}}
+		$mCacheTime,        # Time when this object was generated, or -1 for uncacheable. Used in ParserCache.
+		$mVersion,          # Compatibility check
+		$mTitleText,        # title text of the chosen language variant
+		$mLinks,            # 2-D map of NS/DBK to ID for the links in the document. ID=zero for broken.
+		$mTemplates,        # 2-D map of NS/DBK to ID for the template references. ID=zero for broken.
+		$mImages,           # DB keys of the images used, in the array key only
+		$mExternalLinks,    # External link URLs, in the key only
+		$mHTMLtitle,        # Display HTML title
+		$mSubtitle,         # Additional subtitle
+		$mNewSection,       # Show a new section link?
+		$mNoGallery,        # No gallery on category page? (__NOGALLERY__)
+		$mHeadItems;        # Items to put in the <head> section
+
+	function ParserOutput( $text = '', $languageLinks = array(), $categoryLinks = array(),
+		$containsOldMagic = false, $titletext = '' )
+	{
+		$this->mText = $text;
+		$this->mLanguageLinks = $languageLinks;
+		$this->mCategories = $categoryLinks;
+		$this->mContainsOldMagic = $containsOldMagic;
+		$this->mCacheTime = '';
+		$this->mVersion = Parser::VERSION;
+		$this->mTitleText = $titletext;
+		$this->mLinks = array();
+		$this->mTemplates = array();
+		$this->mImages = array();
+		$this->mExternalLinks = array();
+		$this->mHTMLtitle = "" ;
+		$this->mSubtitle = "" ;
+		$this->mNewSection = false;
+		$this->mNoGallery = false;
+		$this->mHeadItems = array();
+	}
+
+	function getText()                   { return $this->mText; }
+	function &getLanguageLinks()          { return $this->mLanguageLinks; }
+	function getCategoryLinks()          { return array_keys( $this->mCategories ); }
+	function &getCategories()            { return $this->mCategories; }
+	function getCacheTime()              { return $this->mCacheTime; }
+	function getTitleText()              { return $this->mTitleText; }
+	function &getLinks()                 { return $this->mLinks; }
+	function &getTemplates()             { return $this->mTemplates; }
+	function &getImages()                { return $this->mImages; }
+	function &getExternalLinks()         { return $this->mExternalLinks; }
+	function getNoGallery()              { return $this->mNoGallery; }
+	function getSubtitle()               { return $this->mSubtitle; }
+
+	function containsOldMagic()          { return $this->mContainsOldMagic; }
+	function setText( $text )            { return wfSetVar( $this->mText, $text ); }
+	function setLanguageLinks( $ll )     { return wfSetVar( $this->mLanguageLinks, $ll ); }
+	function setCategoryLinks( $cl )     { return wfSetVar( $this->mCategories, $cl ); }
+	function setContainsOldMagic( $com ) { return wfSetVar( $this->mContainsOldMagic, $com ); }
+	function setCacheTime( $t )          { return wfSetVar( $this->mCacheTime, $t ); }
+	function setTitleText( $t )          { return wfSetVar($this->mTitleText, $t); }
+	function setSubtitle( $st )          { return wfSetVar( $this->mSubtitle, $st ); }
+
+	function addCategory( $c, $sort )    { $this->mCategories[$c] = $sort; }
+	function addImage( $name )           { $this->mImages[$name] = 1; }
+	function addLanguageLink( $t )       { $this->mLanguageLinks[] = $t; }
+	function addExternalLink( $url )     { $this->mExternalLinks[$url] = 1; }
+
+	function setNewSection( $value ) {
+		$this->mNewSection = (bool)$value;
+	}
+	function getNewSection() {
+		return (bool)$this->mNewSection;
+	}
+
+	function addLink( $title, $id = null ) {
+		$ns = $title->getNamespace();
+		$dbk = $title->getDBkey();
+		if ( !isset( $this->mLinks[$ns] ) ) {
+			$this->mLinks[$ns] = array();
+		}
+		if ( is_null( $id ) ) {
+			$id = $title->getArticleID();
+		}
+		$this->mLinks[$ns][$dbk] = $id;
+	}
+
+	function addTemplate( $title, $id ) {
+		$ns = $title->getNamespace();
+		$dbk = $title->getDBkey();
+		if ( !isset( $this->mTemplates[$ns] ) ) {
+			$this->mTemplates[$ns] = array();
+		}
+		$this->mTemplates[$ns][$dbk] = $id;
+	}
+
+	/**
+	 * Return true if this cached output object predates the global or
+	 * per-article cache invalidation timestamps, or if it comes from
+	 * an incompatible older version.
+	 *
+	 * @param string $touched the affected article's last touched timestamp
+	 * @return bool
+	 * @public
+	 */
+	function expired( $touched ) {
+		global $wgCacheEpoch;
+		return $this->getCacheTime() == -1 || // parser says it's uncacheable
+		       $this->getCacheTime() < $touched ||
+		       $this->getCacheTime() <= $wgCacheEpoch ||
+		       !isset( $this->mVersion ) ||
+		       version_compare( $this->mVersion, Parser::VERSION, "lt" );
+	}
+
+	/**
+	 * Add some text to the <head>. 
+	 * If $tag is set, the section with that tag will only be included once 
+	 * in a given page.
+	 */
+	function addHeadItem( $section, $tag = false ) {
+		if ( $tag !== false ) {
+			$this->mHeadItems[$tag] = $section;
+		} else {
+			$this->mHeadItems[] = $section;
+		}
+	}
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/PatrolLog.php
===================================================================
--- /MediaWiki/branches/1.11/includes/PatrolLog.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/PatrolLog.php	(revision 1280)
@@ -0,0 +1,83 @@
+<?php
+
+/**
+ * Class containing static functions for working with
+ * logs of patrol events
+ *
+ * @author Rob Church <robchur@gmail.com>
+ */
+class PatrolLog {
+
+	/**
+	 * Record a log event for a change being patrolled
+	 *
+	 * @param mixed $change Change identifier or RecentChange object
+	 * @param bool $auto Was this patrol event automatic?
+	 */
+	public static function record( $change, $auto = false ) {
+		if( !( is_object( $change ) && $change instanceof RecentChange ) ) {
+			$change = RecentChange::newFromId( $change );
+			if( !is_object( $change ) )
+				return false;
+		}
+		$title = Title::makeTitleSafe( $change->getAttribute( 'rc_namespace' ),
+					$change->getAttribute( 'rc_title' ) );
+		if( is_object( $title ) ) {
+			$params = self::buildParams( $change, $auto );
+			$log = new LogPage( 'patrol', false ); # False suppresses RC entries
+			$log->addEntry( 'patrol', $title, '', $params );
+			return true;
+		} else {
+			return false;
+		}
+	}
+	
+	/**
+	 * Generate the log action text corresponding to a patrol log item
+	 *
+	 * @param Title $title Title of the page that was patrolled
+	 * @param array $params Log parameters (from logging.log_params)
+	 * @param Skin $skin Skin to use for building links, etc.
+	 * @return string
+	 */
+	public static function makeActionText( $title, $params, $skin ) {
+		# This is a bit of a hack, but...if $skin is not a Skin, then *do nothing*
+		# -- this is fine, because the action text we would be queried for under
+		# these conditions would have gone into recentchanges, which we aren't
+		# supposed to be updating
+		if( is_object( $skin ) ) {
+			list( $cur, $prev, $auto ) = $params;
+			# Standard link to the page in question
+			$link = $skin->makeLinkObj( $title );
+			# Generate a diff link
+			$bits[] = 'oldid=' . urlencode( $cur );
+			$bits[] = 'diff=prev';
+			$bits = implode( '&', $bits );
+			$diff = $skin->makeLinkObj( $title, htmlspecialchars( wfMsg( 'patrol-log-diff', $cur ) ), $bits );
+			# Indicate whether or not the patrolling was automatic
+			$auto = $auto ? wfMsgHtml( 'patrol-log-auto' ) : '';
+			# Put it all together
+			return wfMsgHtml( 'patrol-log-line', $diff, $link, $auto );
+		} else {
+			return '';
+		}
+	}
+	
+	/**
+	 * Prepare log parameters for a patrolled change
+	 *
+	 * @param RecentChange $change RecentChange to represent
+	 * @param bool $auto Whether the patrol event was automatic
+	 * @return array
+	 */
+	private static function buildParams( $change, $auto ) {
+		return array(
+			$change->getAttribute( 'rc_this_oldid' ),
+			$change->getAttribute( 'rc_last_oldid' ),
+			(int)$auto
+		);
+	}
+
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/Profiler.php
===================================================================
--- /MediaWiki/branches/1.11/includes/Profiler.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/Profiler.php	(revision 1280)
@@ -0,0 +1,364 @@
+<?php
+/**
+ * This file is only included if profiling is enabled
+ */
+
+$wgProfiling = true;
+
+/**
+ * @param $functioname name of the function we will profile
+ */
+function wfProfileIn($functionname) {
+	global $wgProfiler;
+	$wgProfiler->profileIn($functionname);
+}
+
+/**
+ * @param $functioname name of the function we have profiled
+ */
+function wfProfileOut($functionname = 'missing') {
+	global $wgProfiler;
+	$wgProfiler->profileOut($functionname);
+}
+
+function wfGetProfilingOutput($start, $elapsed) {
+	global $wgProfiler;
+	return $wgProfiler->getOutput($start, $elapsed);
+}
+
+function wfProfileClose() {
+	global $wgProfiler;
+	$wgProfiler->close();
+}
+
+if (!function_exists('memory_get_usage')) {
+	# Old PHP or --enable-memory-limit not compiled in
+	function memory_get_usage() {
+		return 0;
+	}
+}
+
+/**
+ * @todo document
+ * @addtogroup Profiler
+ */
+class Profiler {
+	var $mStack = array (), $mWorkStack = array (), $mCollated = array ();
+	var $mCalls = array (), $mTotals = array ();
+
+	function __construct() {
+		// Push an entry for the pre-profile setup time onto the stack
+		global $wgRequestTime;
+		if ( !empty( $wgRequestTime ) ) {
+			$this->mWorkStack[] = array( '-total', 0, $wgRequestTime, 0 );
+			$this->mStack[] = array( '-setup', 1, $wgRequestTime, 0, microtime(true), 0 );
+		} else {
+			$this->profileIn( '-total' );
+		}
+	}
+
+	function profileIn($functionname) {
+		global $wgDebugFunctionEntry;
+		if ($wgDebugFunctionEntry && function_exists('wfDebug')) {
+			wfDebug(str_repeat(' ', count($this->mWorkStack)).'Entering '.$functionname."\n");
+		}
+		$this->mWorkStack[] = array($functionname, count( $this->mWorkStack ), $this->getTime(), memory_get_usage());
+	}
+
+	function profileOut($functionname) {
+		$memory = memory_get_usage();
+		$time = $this->getTime();
+
+		global $wgDebugFunctionEntry;
+
+		if ($wgDebugFunctionEntry && function_exists('wfDebug')) {
+			wfDebug(str_repeat(' ', count($this->mWorkStack) - 1).'Exiting '.$functionname."\n");
+		}
+
+		$bit = array_pop($this->mWorkStack);
+
+		if (!$bit) {
+			wfDebug("Profiling error, !\$bit: $functionname\n");
+		} else {
+			//if ($wgDebugProfiling) {
+				if ($functionname == 'close') {
+					$message = "Profile section ended by close(): {$bit[0]}";
+					wfDebug( "$message\n" );
+					$this->mStack[] = array( $message, 0, '0 0', 0, '0 0', 0 );
+				}
+				elseif ($bit[0] != $functionname) {
+					$message = "Profiling error: in({$bit[0]}), out($functionname)";
+					wfDebug( "$message\n" );
+					$this->mStack[] = array( $message, 0, '0 0', 0, '0 0', 0 );
+				}
+			//}
+			$bit[] = $time;
+			$bit[] = $memory;
+			$this->mStack[] = $bit;
+		}
+	}
+
+	function close() {
+		while (count($this->mWorkStack)) {
+			$this->profileOut('close');
+		}
+	}
+
+	function getOutput() {
+		global $wgDebugFunctionEntry;
+		$wgDebugFunctionEntry = false;
+
+		if (!count($this->mStack) && !count($this->mCollated)) {
+			return "No profiling output\n";
+		}
+		$this->close();
+
+		global $wgProfileCallTree;
+		if ($wgProfileCallTree) {
+			return $this->getCallTree();
+		} else {
+			return $this->getFunctionReport();
+		}
+	}
+
+	function getCallTree($start = 0) {
+		return implode('', array_map(array (& $this, 'getCallTreeLine'), $this->remapCallTree($this->mStack)));
+	}
+
+	function remapCallTree($stack) {
+		if (count($stack) < 2) {
+			return $stack;
+		}
+		$outputs = array ();
+		for ($max = count($stack) - 1; $max > 0;) {
+			/* Find all items under this entry */
+			$level = $stack[$max][1];
+			$working = array ();
+			for ($i = $max -1; $i >= 0; $i --) {
+				if ($stack[$i][1] > $level) {
+					$working[] = $stack[$i];
+				} else {
+					break;
+				}
+			}
+			$working = $this->remapCallTree(array_reverse($working));
+			$output = array ();
+			foreach ($working as $item) {
+				array_push($output, $item);
+			}
+			array_unshift($output, $stack[$max]);
+			$max = $i;
+
+			array_unshift($outputs, $output);
+		}
+		$final = array ();
+		foreach ($outputs as $output) {
+			foreach ($output as $item) {
+				$final[] = $item;
+			}
+		}
+		return $final;
+	}
+
+	function getCallTreeLine($entry) {
+		list ($fname, $level, $start, /* $x */, $end) = $entry;
+		$delta = $end - $start;
+		$space = str_repeat(' ', $level);
+
+		# The ugly double sprintf is to work around a PHP bug,
+		# which has been fixed in recent releases.
+		return sprintf( "%10s %s %s\n",
+			trim( sprintf( "%7.3f", $delta * 1000.0 ) ),
+			$space, $fname );
+	}
+
+	function getTime() {
+		return microtime(true);
+		#return $this->getUserTime();
+	}
+
+	function getUserTime() {
+		$ru = getrusage();
+		return $ru['ru_utime.tv_sec'].' '.$ru['ru_utime.tv_usec'] / 1e6;
+	}
+
+	function getFunctionReport() {
+		$width = 140;
+		$nameWidth = $width - 65;
+		$format =      "%-{$nameWidth}s %6d %13.3f %13.3f %13.3f%% %9d  (%13.3f -%13.3f) [%d]\n";
+		$titleFormat = "%-{$nameWidth}s %6s %13s %13s %13s %9s\n";
+		$prof = "\nProfiling data\n";
+		$prof .= sprintf($titleFormat, 'Name', 'Calls', 'Total', 'Each', '%', 'Mem');
+		$this->mCollated = array ();
+		$this->mCalls = array ();
+		$this->mMemory = array ();
+
+		# Estimate profiling overhead
+		$profileCount = count($this->mStack);
+		wfProfileIn('-overhead-total');
+		for ($i = 0; $i < $profileCount; $i ++) {
+			wfProfileIn('-overhead-internal');
+			wfProfileOut('-overhead-internal');
+		}
+		wfProfileOut('-overhead-total');
+
+		# First, subtract the overhead!
+		foreach ($this->mStack as $entry) {
+			$fname = $entry[0];
+			$start = $entry[2];
+			$end = $entry[4];
+			$elapsed = $end - $start;
+			$memory = $entry[5] - $entry[3];
+
+			if ($fname == '-overhead-total') {
+				$overheadTotal[] = $elapsed;
+				$overheadMemory[] = $memory;
+			}
+			elseif ($fname == '-overhead-internal') {
+				$overheadInternal[] = $elapsed;
+			}
+		}
+		$overheadTotal = array_sum($overheadTotal) / count($overheadInternal);
+		$overheadMemory = array_sum($overheadMemory) / count($overheadInternal);
+		$overheadInternal = array_sum($overheadInternal) / count($overheadInternal);
+
+		# Collate
+		foreach ($this->mStack as $index => $entry) {
+			$fname = $entry[0];
+			$start = $entry[2];
+			$end = $entry[4];
+			$elapsed = $end - $start;
+
+			$memory = $entry[5] - $entry[3];
+			$subcalls = $this->calltreeCount($this->mStack, $index);
+
+			if (!preg_match('/^-overhead/', $fname)) {
+				# Adjust for profiling overhead (except special values with elapsed=0
+				if ( $elapsed ) {
+					$elapsed -= $overheadInternal;
+					$elapsed -= ($subcalls * $overheadTotal);
+					$memory -= ($subcalls * $overheadMemory);
+				}
+			}
+
+			if (!array_key_exists($fname, $this->mCollated)) {
+				$this->mCollated[$fname] = 0;
+				$this->mCalls[$fname] = 0;
+				$this->mMemory[$fname] = 0;
+				$this->mMin[$fname] = 1 << 24;
+				$this->mMax[$fname] = 0;
+				$this->mOverhead[$fname] = 0;
+			}
+
+			$this->mCollated[$fname] += $elapsed;
+			$this->mCalls[$fname]++;
+			$this->mMemory[$fname] += $memory;
+			$this->mMin[$fname] = min($this->mMin[$fname], $elapsed);
+			$this->mMax[$fname] = max($this->mMax[$fname], $elapsed);
+			$this->mOverhead[$fname] += $subcalls;
+		}
+
+		$total = @ $this->mCollated['-total'];
+		$this->mCalls['-overhead-total'] = $profileCount;
+
+		# Output
+		arsort($this->mCollated, SORT_NUMERIC);
+		foreach ($this->mCollated as $fname => $elapsed) {
+			$calls = $this->mCalls[$fname];
+			$percent = $total ? 100. * $elapsed / $total : 0;
+			$memory = $this->mMemory[$fname];
+			$prof .= sprintf($format, substr($fname, 0, $nameWidth), $calls, (float) ($elapsed * 1000), (float) ($elapsed * 1000) / $calls, $percent, $memory, ($this->mMin[$fname] * 1000.0), ($this->mMax[$fname] * 1000.0), $this->mOverhead[$fname]);
+
+			global $wgProfileToDatabase;
+			if ($wgProfileToDatabase) {
+				Profiler :: logToDB($fname, (float) ($elapsed * 1000), $calls);
+			}
+		}
+		$prof .= "\nTotal: $total\n\n";
+
+		return $prof;
+	}
+
+	/**
+	 * Counts the number of profiled function calls sitting under
+	 * the given point in the call graph. Not the most efficient algo.
+	 *
+	 * @param $stack Array:
+	 * @param $start Integer:
+	 * @return Integer
+	 * @private
+	 */
+	function calltreeCount($stack, $start) {
+		$level = $stack[$start][1];
+		$count = 0;
+		for ($i = $start -1; $i >= 0 && $stack[$i][1] > $level; $i --) {
+			$count ++;
+		}
+		return $count;
+	}
+
+	/**
+	 * @static
+	 */
+	function logToDB($name, $timeSum, $eventCount) {
+		# Warning: $wguname is a live patch, it should be moved to Setup.php
+		global $wguname, $wgProfilePerHost;
+
+		$fname = 'Profiler::logToDB';
+		$dbw = wfGetDB(DB_MASTER);
+		if (!is_object($dbw))
+			return false;
+		$errorState = $dbw->ignoreErrors( true );
+		$profiling = $dbw->tableName('profiling');
+
+		$name = substr($name, 0, 255);
+		$encname = $dbw->strencode($name);
+		
+		if ($wgProfilePerHost) {
+			$pfhost = $wguname['nodename'];
+		} else {
+			$pfhost = '';
+		}
+
+		$sql = "UPDATE $profiling "."SET pf_count=pf_count+{$eventCount}, "."pf_time=pf_time + {$timeSum} ".
+			"WHERE pf_name='{$encname}' AND pf_server='{$pfhost}'";
+		$dbw->query($sql);
+
+		$rc = $dbw->affectedRows();
+		if ($rc == 0) {
+			$dbw->insert('profiling', array ('pf_name' => $name, 'pf_count' => $eventCount,
+				'pf_time' => $timeSum, 'pf_server' => $pfhost ), $fname, array ('IGNORE'));
+		}
+		// When we upgrade to mysql 4.1, the insert+update
+		// can be merged into just a insert with this construct added:
+		//     "ON DUPLICATE KEY UPDATE ".
+		//     "pf_count=pf_count + VALUES(pf_count), ".
+		//     "pf_time=pf_time + VALUES(pf_time)";
+		$dbw->ignoreErrors( $errorState );
+	}
+
+	/**
+	 * Get the function name of the current profiling section
+	 */
+	function getCurrentSection() {
+		$elt = end($this->mWorkStack);
+		return $elt[0];
+	}
+	
+	static function getCaller( $level ) {
+		$backtrace = wfDebugBacktrace();
+		if ( isset( $backtrace[$level] ) ) {
+			if ( isset( $backtrace[$level]['class'] ) ) {
+				$caller = $backtrace[$level]['class'] . '::' . $backtrace[$level]['function'];
+			} else {
+				$caller = $backtrace[$level]['function'];
+			}
+		} else {
+			$caller = 'unknown';
+		}
+		return $caller;
+	}
+
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/ProfilerSimple.php
===================================================================
--- /MediaWiki/branches/1.11/includes/ProfilerSimple.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/ProfilerSimple.php	(revision 1280)
@@ -0,0 +1,125 @@
+<?php
+
+require_once(dirname(__FILE__).'/Profiler.php');
+
+/**
+ * Simple profiler base class.
+ * @todo document methods (?)
+ * @addtogroup Profiler
+ */
+class ProfilerSimple extends Profiler {
+	var $mMinimumTime = 0;
+	var $mProfileID = false;
+
+	function __construct() {
+		global $wgRequestTime,$wgRUstart;
+		if (!empty($wgRequestTime) && !empty($wgRUstart)) {
+			$this->mWorkStack[] = array( '-total', 0, $wgRequestTime,$this->getCpuTime($wgRUstart));
+
+			$elapsedcpu = $this->getCpuTime() - $this->getCpuTime($wgRUstart);
+			$elapsedreal = microtime(true) - $wgRequestTime;
+
+			$entry =& $this->mCollated["-setup"];
+			if (!is_array($entry)) {
+				$entry = array('cpu'=> 0.0, 'cpu_sq' => 0.0, 'real' => 0.0, 'real_sq' => 0.0, 'count' => 0);
+				$this->mCollated["-setup"] =& $entry;
+			}
+			$entry['cpu'] += $elapsedcpu;
+			$entry['cpu_sq'] += $elapsedcpu*$elapsedcpu;
+			$entry['real'] += $elapsedreal;
+			$entry['real_sq'] += $elapsedreal*$elapsedreal;
+			$entry['count']++;
+		}
+	}
+
+	function setMinimum( $min ) {
+		$this->mMinimumTime = $min;
+	}
+
+	function setProfileID( $id ) {
+		$this->mProfileID = $id;
+	}
+
+	function getProfileID() {
+		if ( $this->mProfileID === false ) {
+			return wfWikiID();
+		} else {
+			return $this->mProfileID;
+		}
+	}
+
+	function profileIn($functionname) {
+		global $wgDebugFunctionEntry;
+		if ($wgDebugFunctionEntry) {
+			$this->debug(str_repeat(' ', count($this->mWorkStack)).'Entering '.$functionname."\n");
+		}
+		$this->mWorkStack[] = array($functionname, count( $this->mWorkStack ), microtime(true), $this->getCpuTime());
+	}
+
+	function profileOut($functionname) {
+		global $wgDebugFunctionEntry;
+
+		if ($wgDebugFunctionEntry) {
+			$this->debug(str_repeat(' ', count($this->mWorkStack) - 1).'Exiting '.$functionname."\n");
+		}
+
+		list($ofname, /* $ocount */ ,$ortime,$octime) = array_pop($this->mWorkStack);
+
+		if (!$ofname) {
+			$this->debug("Profiling error: $functionname\n");
+		} else {
+			if ($functionname == 'close') {
+				$message = "Profile section ended by close(): {$ofname}";
+				$functionname = $ofname;
+				$this->debug( "$message\n" );
+			}
+			elseif ($ofname != $functionname) {
+				$message = "Profiling error: in({$ofname}), out($functionname)";
+				$this->debug( "$message\n" );
+			}
+			$entry =& $this->mCollated[$functionname];
+			$elapsedcpu = $this->getCpuTime() - $octime;
+			$elapsedreal = microtime(true) - $ortime;
+			if (!is_array($entry)) {
+				$entry = array('cpu'=> 0.0, 'cpu_sq' => 0.0, 'real' => 0.0, 'real_sq' => 0.0, 'count' => 0);
+				$this->mCollated[$functionname] =& $entry;
+			}
+			$entry['cpu'] += $elapsedcpu;
+			$entry['cpu_sq'] += $elapsedcpu*$elapsedcpu;
+			$entry['real'] += $elapsedreal;
+			$entry['real_sq'] += $elapsedreal*$elapsedreal;
+			$entry['count']++;
+
+		}
+	}
+
+	function getFunctionReport() {
+		/* Implement in output subclasses */
+	}
+
+	function getCpuTime($ru=null) {
+		if ( function_exists( 'getrusage' ) ) {
+			if ( $ru == null )
+				$ru = getrusage();
+			return ($ru['ru_utime.tv_sec'] + $ru['ru_stime.tv_sec'] + ($ru['ru_utime.tv_usec'] + 
+				$ru['ru_stime.tv_usec']) * 1e-6);
+		} else {
+			return 0;
+		}
+	}
+
+	/* If argument is passed, it assumes that it is dual-format time string, returns proper float time value */
+	function getTime($time=null) {
+		if ($time==null)
+			return microtime(true);
+		list($a,$b)=explode(" ",$time);
+		return (float)($a+$b);
+	}
+
+	function debug( $s ) {
+		if (function_exists( 'wfDebug' ) ) {
+			wfDebug( $s );
+		}
+	}
+}
+?>
Index: /MediaWiki/branches/1.11/includes/ProfilerSimpleUDP.php
===================================================================
--- /MediaWiki/branches/1.11/includes/ProfilerSimpleUDP.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/ProfilerSimpleUDP.php	(revision 1280)
@@ -0,0 +1,40 @@
+<?php
+
+require_once(dirname(__FILE__).'/Profiler.php');
+require_once(dirname(__FILE__).'/ProfilerSimple.php');
+
+/**
+ * ProfilerSimpleUDP class, that sends out messages for 'udpprofile' daemon
+ * (the one from mediawiki/trunk/udpprofile SVN )
+ * @addtogroup Profiler
+ */
+class ProfilerSimpleUDP extends ProfilerSimple {
+	function getFunctionReport() {
+		global $wgUDPProfilerHost;
+		global $wgUDPProfilerPort;
+
+		if ( $this->mCollated['-total']['real'] < $this->mMinimumTime ) {
+			# Less than minimum, ignore
+			return;
+		}
+
+		$sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
+		$plength=0;
+		$packet="";
+		foreach ($this->mCollated as $entry=>$pfdata) {
+			$pfline=sprintf ("%s %s %d %f %f %f %f %s\n", $this->getProfileID(),"-",$pfdata['count'],
+				$pfdata['cpu'],$pfdata['cpu_sq'],$pfdata['real'],$pfdata['real_sq'],$entry);
+			$length=strlen($pfline);
+			/* printf("<!-- $pfline -->"); */
+			if ($length+$plength>1400) {
+				socket_sendto($sock,$packet,$plength,0,$wgUDPProfilerHost,$wgUDPProfilerPort);
+				$packet="";
+				$plength=0;
+			}
+			$packet.=$pfline;
+			$plength+=$length;
+		}
+		socket_sendto($sock,$packet,$plength,0x100,$wgUDPProfilerHost,$wgUDPProfilerPort);
+	}
+}
+?>
Index: /MediaWiki/branches/1.11/includes/ProfilerStub.php
===================================================================
--- /MediaWiki/branches/1.11/includes/ProfilerStub.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/ProfilerStub.php	(revision 1280)
@@ -0,0 +1,26 @@
+<?php
+
+# Stub profiling functions
+
+$haveProctitle=function_exists("setproctitle");
+function wfProfileIn( $fn = '' ) {
+	global $hackwhere, $wgDBname, $haveProctitle;
+	if ($haveProctitle) {
+		$hackwhere[] = $fn;
+		setproctitle($fn . " [$wgDBname]");
+	}
+}
+function wfProfileOut( $fn = '' ) {
+	global $hackwhere, $wgDBname, $haveProctitle;
+	if (!$haveProctitle)
+		return;
+	if (count($hackwhere))
+		array_pop($hackwhere);
+	if (count($hackwhere))
+		setproctitle($hackwhere[count($hackwhere)-1] . " [$wgDBname]");
+}
+function wfGetProfilingOutput( $s, $e ) {}
+function wfProfileClose() {}
+$wgProfiling = false;
+
+?>
Index: /MediaWiki/branches/1.11/includes/ProtectionForm.php
===================================================================
--- /MediaWiki/branches/1.11/includes/ProtectionForm.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/ProtectionForm.php	(revision 1280)
@@ -0,0 +1,374 @@
+<?php
+/**
+ * Copyright (C) 2005 Brion Vibber <brion@pobox.com>
+ * http://www.mediawiki.org/
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ */
+
+/**
+ * @todo document, briefly.
+ * @addtogroup SpecialPage
+ */
+class ProtectionForm {
+	var $mRestrictions = array();
+	var $mReason = '';
+	var $mCascade = false;
+	var $mExpiry = null;
+
+	function __construct( &$article ) {
+		global $wgRequest, $wgUser;
+		global $wgRestrictionTypes, $wgRestrictionLevels;
+		$this->mArticle =& $article;
+		$this->mTitle =& $article->mTitle;
+
+		if( $this->mTitle ) {
+			$this->mTitle->loadRestrictions();
+
+			foreach( $wgRestrictionTypes as $action ) {
+				// Fixme: this form currently requires individual selections,
+				// but the db allows multiples separated by commas.
+				$this->mRestrictions[$action] = implode( '', $this->mTitle->getRestrictions( $action ) );
+			}
+
+			$this->mCascade = $this->mTitle->areRestrictionsCascading();
+
+			if ( $this->mTitle->mRestrictionsExpiry == 'infinity' ) {
+				$this->mExpiry = 'infinite';
+			} else if ( strlen($this->mTitle->mRestrictionsExpiry) == 0 ) {
+				$this->mExpiry = '';
+			} else {
+				$this->mExpiry = wfTimestamp( TS_RFC2822, $this->mTitle->mRestrictionsExpiry );
+			}
+		}
+
+		// The form will be available in read-only to show levels.
+		$this->disabled = !$wgUser->isAllowed( 'protect' ) || wfReadOnly() || $wgUser->isBlocked();
+		$this->disabledAttrib = $this->disabled
+			? array( 'disabled' => 'disabled' )
+			: array();
+
+		if( $wgRequest->wasPosted() ) {
+			$this->mReason = $wgRequest->getText( 'mwProtect-reason' );
+			$this->mCascade = $wgRequest->getBool( 'mwProtect-cascade' );
+			$this->mExpiry = $wgRequest->getText( 'mwProtect-expiry' );
+
+			foreach( $wgRestrictionTypes as $action ) {
+				$val = $wgRequest->getVal( "mwProtect-level-$action" );
+				if( isset( $val ) && in_array( $val, $wgRestrictionLevels ) ) {
+					$this->mRestrictions[$action] = $val;
+				}
+			}
+		}
+	}
+	
+	function execute() {
+		global $wgRequest;
+		if( $wgRequest->wasPosted() ) {
+			if( $this->save() ) {
+				global $wgOut;
+				$wgOut->redirect( $this->mTitle->getFullUrl() );
+			}
+		} else {
+			$this->show();
+		}
+	}
+
+	function show( $err = null ) {
+		global $wgOut, $wgUser;
+
+		$wgOut->setRobotpolicy( 'noindex,nofollow' );
+
+		if( is_null( $this->mTitle ) ||
+			!$this->mTitle->exists() ||
+			$this->mTitle->getNamespace() == NS_MEDIAWIKI ) {
+			$wgOut->showFatalError( wfMsg( 'badarticleerror' ) );
+			return;
+		}
+
+		list( $cascadeSources, $restrictions ) = $this->mTitle->getCascadeProtectionSources();
+
+		if ( "" != $err ) {
+			$wgOut->setSubtitle( wfMsgHtml( 'formerror' ) );
+			$wgOut->addHTML( "<p class='error'>{$err}</p>\n" );
+		}
+
+		if ( $cascadeSources && count($cascadeSources) > 0 ) {
+			$titles = '';
+
+			foreach ( $cascadeSources as $title ) {
+				$titles .= '* [[:' . $title->getPrefixedText() . "]]\n";
+			}
+
+			$notice = wfMsgExt( 'protect-cascadeon', array('parsemag'), count($cascadeSources) ) . "\r\n$titles";
+
+			$wgOut->addWikiText( $notice );
+		}
+
+		$wgOut->setPageTitle( wfMsg( 'confirmprotect' ) );
+		$wgOut->setSubtitle( wfMsg( 'protectsub', $this->mTitle->getPrefixedText() ) );
+
+		# Show an appropriate message if the user isn't allowed or able to change
+		# the protection settings at this time
+		if( $this->disabled ) {
+			if( $wgUser->isAllowed( 'protect' ) ) {
+				if( $wgUser->isBlocked() ) {
+					# Blocked
+					$message = 'protect-locked-blocked';
+				} else {
+					# Database lock
+					$message = 'protect-locked-dblock';
+				}
+			} else {
+				# Permission error
+				$message = 'protect-locked-access';
+			}
+		} else {
+			$message = 'protect-text';
+		}
+		$wgOut->addWikiText( wfMsg( $message, wfEscapeWikiText( $this->mTitle->getPrefixedText() ) ) );
+
+		$wgOut->addHTML( $this->buildForm() );
+
+		$this->showLogExtract( $wgOut );
+	}
+
+	function save() {
+		global $wgRequest, $wgUser, $wgOut;
+		
+		if( $this->disabled ) {
+			$this->show();
+			return false;
+		}
+
+		$token = $wgRequest->getVal( 'wpEditToken' );
+		if( !$wgUser->matchEditToken( $token ) ) {
+			$this->show( wfMsg( 'sessionfailure' ) );
+			return false;
+		}
+
+		if ( strlen( $this->mExpiry ) == 0 ) {
+			$this->mExpiry = 'infinite';
+		}
+
+		if ( $this->mExpiry == 'infinite' || $this->mExpiry == 'indefinite' ) {
+			$expiry = Block::infinity();
+		} else {
+			# Convert GNU-style date, on error returns -1 for PHP <5.1 and false for PHP >=5.1
+			$expiry = strtotime( $this->mExpiry );
+
+			if ( $expiry < 0 || $expiry === false ) {
+				$this->show( wfMsg( 'protect_expiry_invalid' ) );
+				return false;
+			}
+
+			$expiry = wfTimestamp( TS_MW, $expiry );
+
+			if ( $expiry < wfTimestampNow() ) {
+				$this->show( wfMsg( 'protect_expiry_old' ) );
+				return false;
+			}
+
+		}
+
+		$ok = $this->mArticle->updateRestrictions( $this->mRestrictions, $this->mReason, $this->mCascade, $expiry );
+		if( !$ok ) {
+			throw new FatalError( "Unknown error at restriction save time." );
+		}
+		return $ok;
+	}
+
+	function buildForm() {
+		global $wgUser;
+
+		$out = '';
+		if( !$this->disabled ) {
+			$out .= $this->buildScript();
+			// The submission needs to reenable the move permission selector
+			// if it's in locked mode, or some browsers won't submit the data.
+			$out .= wfOpenElement( 'form', array(
+				'id' => 'mw-Protect-Form',
+				'action' => $this->mTitle->getLocalUrl( 'action=protect' ),
+				'method' => 'post',
+				'onsubmit' => 'protectEnable(true)' ) );
+
+			$out .= wfElement( 'input', array(
+				'type' => 'hidden',
+				'name' => 'wpEditToken',
+				'value' => $wgUser->editToken() ) );
+		}
+
+		$out .= "<table id='mwProtectSet'>";
+		$out .= "<tbody>";
+		$out .= "<tr>\n";
+		foreach( $this->mRestrictions as $action => $required ) {
+			/* Not all languages have V_x <-> N_x relation */
+			$out .= "<th>" . wfMsgHtml( 'restriction-' . $action ) . "</th>\n";
+		}
+		$out .= "</tr>\n";
+		$out .= "<tr>\n";
+		foreach( $this->mRestrictions as $action => $selected ) {
+			$out .= "<td>\n";
+			$out .= $this->buildSelector( $action, $selected );
+			$out .= "</td>\n";
+		}
+		$out .= "</tr>\n";
+
+		// JavaScript will add another row with a value-chaining checkbox
+
+		$out .= "</tbody>\n";
+		$out .= "</table>\n";
+
+		global $wgEnableCascadingProtection;
+
+		if ($wgEnableCascadingProtection)
+			$out .= $this->buildCascadeInput();
+
+		$out .= "<table>\n";
+		$out .= "<tbody>\n";
+
+		$out .= $this->buildExpiryInput();
+
+		if( !$this->disabled ) {
+			$out .= "<tr><td>" . $this->buildReasonInput() . "</td></tr>\n";
+			$out .= "<tr><td></td><td>" . $this->buildSubmit() . "</td></tr>\n";
+		}
+
+		$out .= "</tbody>\n";
+		$out .= "</table>\n";
+
+		if ( !$this->disabled ) {
+			$out .= "</form>\n";
+			$out .= $this->buildCleanupScript();
+		}
+
+		return $out;
+	}
+
+	function buildSelector( $action, $selected ) {
+		global $wgRestrictionLevels;
+		$id = 'mwProtect-level-' . $action;
+		$attribs = array(
+			'id' => $id,
+			'name' => $id,
+			'size' => count( $wgRestrictionLevels ),
+			'onchange' => 'protectLevelsUpdate(this)',
+			) + $this->disabledAttrib;
+
+		$out = wfOpenElement( 'select', $attribs );
+		foreach( $wgRestrictionLevels as $key ) {
+			$out .= $this->buildOption( $key, $selected );
+		}
+		$out .= "</select>\n";
+		return $out;
+	}
+
+	function buildOption( $key, $selected ) {
+		$text = ( $key == '' )
+			? wfMsg( 'protect-default' )
+			: wfMsg( "protect-level-$key" );
+		$selectedAttrib = ($selected == $key)
+			? array( 'selected' => 'selected' )
+			: array();
+		return wfElement( 'option',
+			array( 'value' => $key ) + $selectedAttrib,
+			$text );
+	}
+
+	function buildReasonInput() {
+		$id = 'mwProtect-reason';
+		return wfElement( 'label', array(
+				'id' => "$id-label",
+				'for' => $id ),
+				wfMsg( 'protectcomment' ) ) .
+			'</td><td>' .
+			wfElement( 'input', array(
+				'size' => 60,
+				'name' => $id,
+				'id' => $id,
+				'value' => $this->mReason ) );
+	}
+
+	function buildCascadeInput() {
+		$id = 'mwProtect-cascade';
+		$ci = wfCheckLabel( wfMsg( 'protect-cascade' ), $id, $id, $this->mCascade, $this->disabledAttrib);
+		return $ci;
+	}
+
+	function buildExpiryInput() {
+		$id = 'mwProtect-expiry';
+
+		$ci = "<tr> <td align=\"right\">";
+		$ci .= wfElement( 'label', array (
+				'id' => "$id-label",
+				'for' => $id ),
+				wfMsg( 'protectexpiry' ) );
+		$ci .= "</td> <td align=\"left\">";
+		$ci .= wfElement( 'input', array(
+				'size' => 60,
+				'name' => $id,
+				'id' => $id,
+				'value' => $this->mExpiry ) + $this->disabledAttrib );
+		$ci .= "</td></tr>";
+
+		return $ci;
+	}
+
+	function buildSubmit() {
+		return wfElement( 'input', array(
+			'id' => 'mw-Protect-submit',
+			'type' => 'submit',
+			'value' => wfMsg( 'confirm' ) ) );
+	}
+
+	function buildScript() {
+		global $wgStylePath, $wgStyleVersion;
+		return '<script type="text/javascript" src="' .
+			htmlspecialchars( $wgStylePath . "/common/protect.js?$wgStyleVersion" ) .
+			'"></script>';
+	}
+
+	function buildCleanupScript() {
+		global $wgRestrictionLevels, $wgGroupPermissions;
+		$script = 'var wgCascadeableLevels=';
+		$CascadeableLevels = array();
+		foreach( $wgRestrictionLevels as $key ) {
+			if ( isset($wgGroupPermissions[$key]['protect']) && $wgGroupPermissions[$key]['protect'] ) {
+				$CascadeableLevels[]="'" . wfEscapeJsString($key) . "'";
+			}
+		}
+		$script .= "[" . implode(',',$CascadeableLevels) . "];\n";
+		$script .= 'protectInitialize("mwProtectSet","' . wfEscapeJsString( wfMsg( 'protect-unchain' ) ) . '")';
+		return '<script type="text/javascript">' . $script . '</script>';
+	}
+
+	/**
+	 * @param OutputPage $out
+	 * @access private
+	 */
+	function showLogExtract( &$out ) {
+		# Show relevant lines from the deletion log:
+		$out->addHTML( "<h2>" . htmlspecialchars( LogPage::logName( 'protect' ) ) . "</h2>\n" );
+		$logViewer = new LogViewer(
+			new LogReader(
+				new FauxRequest(
+					array( 'page' => $this->mTitle->getPrefixedText(),
+					       'type' => 'protect' ) ) ) );
+		$logViewer->showList( $out );
+	}
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/ProxyTools.php
===================================================================
--- /MediaWiki/branches/1.11/includes/ProxyTools.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/ProxyTools.php	(revision 1280)
@@ -0,0 +1,263 @@
+<?php
+/**
+ * Functions for dealing with proxies
+ */
+
+/**
+ * Extracts the XFF string from the request header
+ * Checks first for "X-Forwarded-For", then "Client-ip"
+ * Note: headers are spoofable
+ * @return string
+ */
+function wfGetForwardedFor() {
+	if( function_exists( 'apache_request_headers' ) ) {
+		// More reliable than $_SERVER due to case and -/_ folding
+		$set = apache_request_headers();
+		$index = 'X-Forwarded-For';
+		$index2 = 'Client-ip';
+	} else {
+		// Subject to spoofing with headers like X_Forwarded_For
+		$set = $_SERVER;
+		$index = 'HTTP_X_FORWARDED_FOR';
+		$index2 = 'CLIENT-IP';
+	}
+	#Try a couple of headers
+	if( isset( $set[$index] ) ) {
+		return $set[$index];
+	} else if( isset( $set[$index2] ) ) {
+		return $set[$index2];
+	} else {
+		return null;
+	}
+}
+
+/**
+ * Returns the browser/OS data from the request header
+ * Note: headers are spoofable
+ * @return string
+ */
+function wfGetAgent() {
+	if( function_exists( 'apache_request_headers' ) ) {
+		// More reliable than $_SERVER due to case and -/_ folding
+		$set = apache_request_headers();
+		$index = 'User-Agent';
+	} else {
+		// Subject to spoofing with headers like X_Forwarded_For
+		$set = $_SERVER;
+		$index = 'HTTP_USER_AGENT';
+	}
+	if( isset( $set[$index] ) ) {
+		return $set[$index];
+	} else {
+		return '';
+	}
+}
+
+/**
+ * Work out the IP address based on various globals
+ * For trusted proxies, use the XFF client IP (first of the chain)
+ * @return string
+ */
+function wfGetIP() {
+	global $wgIP;
+
+	# Return cached result
+	if ( !empty( $wgIP ) ) {
+		return $wgIP;
+	}
+
+	/* collect the originating ips */
+	# Client connecting to this webserver
+	if ( isset( $_SERVER['REMOTE_ADDR'] ) ) {
+		$ipchain = array( IP::canonicalize( $_SERVER['REMOTE_ADDR'] ) );
+	} else {
+		# Running on CLI?
+		$ipchain = array( '127.0.0.1' );
+	}
+	$ip = $ipchain[0];
+
+	# Append XFF on to $ipchain
+	$forwardedFor = wfGetForwardedFor();
+	if ( isset( $forwardedFor ) ) {
+		$xff = array_map( 'trim', explode( ',', $forwardedFor ) );
+		$xff = array_reverse( $xff );
+		$ipchain = array_merge( $ipchain, $xff );
+	}
+	
+	# Step through XFF list and find the last address in the list which is a trusted server
+	# Set $ip to the IP address given by that trusted server, unless the address is not sensible (e.g. private)
+	foreach ( $ipchain as $i => $curIP ) {
+		$curIP = IP::canonicalize( $curIP );
+		if ( wfIsTrustedProxy( $curIP ) ) {
+			if ( isset( $ipchain[$i + 1] ) && IP::isPublic( $ipchain[$i + 1] ) ) {
+				$ip = $ipchain[$i + 1];
+			}
+		} else {
+			break;
+		}
+	}
+
+	wfDebug( "IP: $ip\n" );
+	$wgIP = $ip;
+	return $ip;
+}
+
+/**
+ * Checks if an IP is a trusted proxy providor
+ * Useful to tell if X-Fowarded-For data is possibly bogus
+ * Squid cache servers for the site and AOL are whitelisted
+ * @param string $ip
+ * @return bool
+ */
+function wfIsTrustedProxy( $ip ) {
+	global $wgSquidServers, $wgSquidServersNoPurge;
+
+	if ( in_array( $ip, $wgSquidServers ) || 
+		in_array( $ip, $wgSquidServersNoPurge ) || 
+		wfIsAOLProxy( $ip ) 
+	) {
+		$trusted = true;
+	} else {
+		$trusted = false;
+	}
+	wfRunHooks( 'IsTrustedProxy', array( &$ip, &$trusted ) );
+	return $trusted;
+}
+
+/**
+ * Forks processes to scan the originating IP for an open proxy server
+ * MemCached can be used to skip IPs that have already been scanned
+ */
+function wfProxyCheck() {
+	global $wgBlockOpenProxies, $wgProxyPorts, $wgProxyScriptPath;
+	global $wgUseMemCached, $wgMemc, $wgProxyMemcExpiry;
+	global $wgProxyKey;
+
+	if ( !$wgBlockOpenProxies ) {
+		return;
+	}
+
+	$ip = wfGetIP();
+
+	# Get MemCached key
+	$skip = false;
+	if ( $wgUseMemCached ) {
+		$mcKey = wfMemcKey( 'proxy', 'ip', $ip );
+		$mcValue = $wgMemc->get( $mcKey );
+		if ( $mcValue ) {
+			$skip = true;
+		}
+	}
+
+	# Fork the processes
+	if ( !$skip ) {
+		$title = SpecialPage::getTitleFor( 'Blockme' );
+		$iphash = md5( $ip . $wgProxyKey );
+		$url = $title->getFullURL( 'ip='.$iphash );
+
+		foreach ( $wgProxyPorts as $port ) {
+			$params = implode( ' ', array(
+						escapeshellarg( $wgProxyScriptPath ),
+						escapeshellarg( $ip ),
+						escapeshellarg( $port ),
+						escapeshellarg( $url )
+						));
+			exec( "php $params &>/dev/null &" );
+		}
+		# Set MemCached key
+		if ( $wgUseMemCached ) {
+			$wgMemc->set( $mcKey, 1, $wgProxyMemcExpiry );
+		}
+	}
+}
+
+/**
+ * Convert a network specification in CIDR notation to an integer network and a number of bits
+ * @return array(string, int)
+ */
+function wfParseCIDR( $range ) {
+	return IP::parseCIDR( $range );
+}
+
+/**
+ * Check if an IP address is in the local proxy list
+ * @return bool
+ */
+function wfIsLocallyBlockedProxy( $ip ) {
+	global $wgProxyList;
+	$fname = 'wfIsLocallyBlockedProxy';
+
+	if ( !$wgProxyList ) {
+		return false;
+	}
+	wfProfileIn( $fname );
+
+	if ( !is_array( $wgProxyList ) ) {
+		# Load from the specified file
+		$wgProxyList = array_map( 'trim', file( $wgProxyList ) );
+	}
+
+	if ( !is_array( $wgProxyList ) ) {
+		$ret = false;
+	} elseif ( array_search( $ip, $wgProxyList ) !== false ) {
+		$ret = true;
+	} elseif ( array_key_exists( $ip, $wgProxyList ) ) {
+		# Old-style flipped proxy list
+		$ret = true;
+	} else {
+		$ret = false;
+	}
+	wfProfileOut( $fname );
+	return $ret;
+}
+
+/**
+ * TODO: move this list to the database in a global IP info table incorporating
+ * trusted ISP proxies, blocked IP addresses and open proxies.
+ * @return bool
+ */
+function wfIsAOLProxy( $ip ) {
+	$ranges = array(
+		'64.12.96.0/19',
+		'149.174.160.0/20',
+		'152.163.240.0/21',
+		'152.163.248.0/22',
+		'152.163.252.0/23',
+		'152.163.96.0/22',
+		'152.163.100.0/23',
+		'195.93.32.0/22',
+		'195.93.48.0/22',
+		'195.93.64.0/19',
+		'195.93.96.0/19',
+		'195.93.16.0/20',
+		'198.81.0.0/22',
+		'198.81.16.0/20',
+		'198.81.8.0/23',
+		'202.67.64.128/25',
+		'205.188.192.0/20',
+		'205.188.208.0/23',
+		'205.188.112.0/20',
+		'205.188.146.144/30',
+		'207.200.112.0/21',
+	);
+
+	static $parsedRanges;
+	if ( is_null( $parsedRanges ) ) {
+		$parsedRanges = array();
+		foreach ( $ranges as $range ) {
+			$parsedRanges[] =  IP::parseRange( $range );
+		}
+	}
+
+	$hex = IP::toHex( $ip );
+	foreach ( $parsedRanges as $range ) {
+		if ( $hex >= $range[0] && $hex <= $range[1] ) {
+			return true;
+		}
+	}
+	return false;
+}
+
+
+
+?>
Index: /MediaWiki/branches/1.11/includes/QueryPage.php
===================================================================
--- /MediaWiki/branches/1.11/includes/QueryPage.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/QueryPage.php	(revision 1280)
@@ -0,0 +1,528 @@
+<?php
+/**
+ * Contain a class for special pages
+ */
+
+/**
+ * List of query page classes and their associated special pages, 
+ * for periodic updates.
+ *
+ * DO NOT CHANGE THIS LIST without testing that 
+ * maintenance/updateSpecialPages.php still works.
+ */
+global $wgQueryPages; // not redundant
+$wgQueryPages = array(
+//         QueryPage subclass           Special page name         Limit (false for none, none for the default)
+//----------------------------------------------------------------------------
+	array( 'AncientPagesPage',              'Ancientpages'                  ),
+	array( 'BrokenRedirectsPage',           'BrokenRedirects'               ),
+	array( 'DeadendPagesPage',              'Deadendpages'                  ),
+	array( 'DisambiguationsPage',           'Disambiguations'               ),
+	array( 'DoubleRedirectsPage',           'DoubleRedirects'               ),
+	array( 'ListredirectsPage',             'Listredirects'					),
+	array( 'LonelyPagesPage',               'Lonelypages'                   ),
+	array( 'LongPagesPage',                 'Longpages'                     ),
+	array( 'MostcategoriesPage',            'Mostcategories'                ),
+	array( 'MostimagesPage',                'Mostimages'                    ),
+	array( 'MostlinkedCategoriesPage',      'Mostlinkedcategories'          ),
+	array( 'MostlinkedPage',                'Mostlinked'                    ),
+	array( 'MostrevisionsPage',             'Mostrevisions'                 ),
+	array( 'FewestrevisionsPage',           'Fewestrevisions'               ),
+	array( 'NewPagesPage',                  'Newpages'                      ),
+	array( 'ShortPagesPage',                'Shortpages'                    ),
+	array( 'UncategorizedCategoriesPage',   'Uncategorizedcategories'       ),
+	array( 'UncategorizedPagesPage',        'Uncategorizedpages'            ),
+	array( 'UncategorizedImagesPage',       'Uncategorizedimages' 			),
+	array( 'UnusedCategoriesPage',          'Unusedcategories'              ),
+	array( 'UnusedimagesPage',              'Unusedimages'                  ),
+	array( 'WantedCategoriesPage',          'Wantedcategories'              ),
+	array( 'WantedPagesPage',               'Wantedpages'                   ),
+	array( 'UnwatchedPagesPage',            'Unwatchedpages'                ),
+	array( 'UnusedtemplatesPage',           'Unusedtemplates' 				),
+	array( 'WithoutInterwikiPage',			'Withoutinterwiki'				),
+);
+wfRunHooks( 'wgQueryPages', array( &$wgQueryPages ) );
+
+global $wgDisableCounters;
+if ( !$wgDisableCounters )
+	$wgQueryPages[] = array( 'PopularPagesPage',		'Popularpages'		);
+
+
+/**
+ * This is a class for doing query pages; since they're almost all the same,
+ * we factor out some of the functionality into a superclass, and let
+ * subclasses derive from it.
+ * @addtogroup SpecialPage
+ */
+class QueryPage {
+	/**
+	 * Whether or not we want plain listoutput rather than an ordered list
+	 *
+	 * @var bool
+	 */
+	var $listoutput = false;
+
+	/**
+	 * The offset and limit in use, as passed to the query() function
+	 *
+	 * @var integer
+	 */
+	var $offset = 0;
+	var $limit = 0;
+
+	/**
+	 * A mutator for $this->listoutput;
+	 *
+	 * @param bool $bool
+	 */
+	function setListoutput( $bool ) {
+		$this->listoutput = $bool;
+	}
+
+	/**
+	 * Subclasses return their name here. Make sure the name is also
+	 * specified in SpecialPage.php and in Language.php as a language message
+	 * param.
+	 */
+	function getName() {
+		return '';
+	}
+
+	/**
+	 * Return title object representing this page
+	 *
+	 * @return Title
+	 */
+	function getTitle() {
+		return SpecialPage::getTitleFor( $this->getName() );
+	}
+
+	/**
+	 * Subclasses return an SQL query here.
+	 *
+	 * Note that the query itself should return the following four columns:
+	 * 'type' (your special page's name), 'namespace', 'title', and 'value'
+	 * *in that order*. 'value' is used for sorting.
+	 *
+	 * These may be stored in the querycache table for expensive queries,
+	 * and that cached data will be returned sometimes, so the presence of
+	 * extra fields can't be relied upon. The cached 'value' column will be
+	 * an integer; non-numeric values are useful only for sorting the initial
+	 * query.
+	 *
+	 * Don't include an ORDER or LIMIT clause, this will be added.
+	 */
+	function getSQL() {
+		return "SELECT 'sample' as type, 0 as namespace, 'Sample result' as title, 42 as value";
+	}
+
+	/**
+	 * Override to sort by increasing values
+	 */
+	function sortDescending() {
+		return true;
+	}
+
+	function getOrder() {
+		return ' ORDER BY value ' .
+			($this->sortDescending() ? 'DESC' : '');
+	}
+
+	/**
+	 * Is this query expensive (for some definition of expensive)? Then we
+	 * don't let it run in miser mode. $wgDisableQueryPages causes all query
+	 * pages to be declared expensive. Some query pages are always expensive.
+	 */
+	function isExpensive( ) {
+		global $wgDisableQueryPages;
+		return $wgDisableQueryPages;
+	}
+
+	/**
+	 * Whether or not the output of the page in question is retrived from
+	 * the database cache.
+	 *
+	 * @return bool
+	 */
+	function isCached() {
+		global $wgMiserMode;
+
+		return $this->isExpensive() && $wgMiserMode;
+	}
+
+	/**
+	 * Sometime we dont want to build rss / atom feeds.
+	 */
+	function isSyndicated() {
+		return true;
+	}
+
+	/**
+	 * Formats the results of the query for display. The skin is the current
+	 * skin; you can use it for making links. The result is a single row of
+	 * result data. You should be able to grab SQL results off of it.
+	 * If the function return "false", the line output will be skipped.
+	 */
+	function formatResult( $skin, $result ) {
+		return '';
+	}
+
+	/**
+	 * The content returned by this function will be output before any result
+	 */
+	function getPageHeader( ) {
+		return '';
+	}
+
+	/**
+	 * If using extra form wheely-dealies, return a set of parameters here
+	 * as an associative array. They will be encoded and added to the paging
+	 * links (prev/next/lengths).
+	 * @return array
+	 */
+	function linkParameters() {
+		return array();
+	}
+
+	/**
+	 * Some special pages (for example SpecialListusers) might not return the
+	 * current object formatted, but return the previous one instead.
+	 * Setting this to return true, will call one more time wfFormatResult to
+	 * be sure that the very last result is formatted and shown.
+	 */
+	function tryLastResult( ) {
+		return false;
+	}
+
+	/**
+	 * Clear the cache and save new results
+	 */
+	function recache( $limit, $ignoreErrors = true ) {
+		$fname = get_class($this) . '::recache';
+		$dbw = wfGetDB( DB_MASTER );
+		$dbr = wfGetDB( DB_SLAVE, array( $this->getName(), 'QueryPage::recache', 'vslow' ) );
+		if ( !$dbw || !$dbr ) {
+			return false;
+		}
+
+		$querycache = $dbr->tableName( 'querycache' );
+
+		if ( $ignoreErrors ) {
+			$ignoreW = $dbw->ignoreErrors( true );
+			$ignoreR = $dbr->ignoreErrors( true );
+		}
+
+		# Clear out any old cached data
+		$dbw->delete( 'querycache', array( 'qc_type' => $this->getName() ), $fname );
+		# Do query
+		$sql = $this->getSQL() . $this->getOrder();
+		if ($limit !== false)
+			$sql = $dbr->limitResult($sql, $limit, 0);
+		$res = $dbr->query($sql, $fname);
+		$num = false;
+		if ( $res ) {
+			$num = $dbr->numRows( $res );
+			# Fetch results
+			$insertSql = "INSERT INTO $querycache (qc_type,qc_namespace,qc_title,qc_value) VALUES ";
+			$first = true;
+			while ( $res && $row = $dbr->fetchObject( $res ) ) {
+				if ( $first ) {
+					$first = false;
+				} else {
+					$insertSql .= ',';
+				}
+				if ( isset( $row->value ) ) {
+					$value = $row->value;
+				} else {
+					$value = '';
+				}
+
+				$insertSql .= '(' .
+					$dbw->addQuotes( $row->type ) . ',' .
+					$dbw->addQuotes( $row->namespace ) . ',' .
+					$dbw->addQuotes( $row->title ) . ',' .
+					$dbw->addQuotes( $value ) . ')';
+			}
+
+			# Save results into the querycache table on the master
+			if ( !$first ) {
+				if ( !$dbw->query( $insertSql, $fname ) ) {
+					// Set result to false to indicate error
+					$dbr->freeResult( $res );
+					$res = false;
+				}
+			}
+			if ( $res ) {
+				$dbr->freeResult( $res );
+			}
+			if ( $ignoreErrors ) {
+				$dbw->ignoreErrors( $ignoreW );
+				$dbr->ignoreErrors( $ignoreR );
+			}
+
+			# Update the querycache_info record for the page
+			$dbw->delete( 'querycache_info', array( 'qci_type' => $this->getName() ), $fname );
+			$dbw->insert( 'querycache_info', array( 'qci_type' => $this->getName(), 'qci_timestamp' => $dbw->timestamp() ), $fname );
+
+		}
+		return $num;
+	}
+
+	/**
+	 * This is the actual workhorse. It does everything needed to make a
+	 * real, honest-to-gosh query page.
+	 *
+	 * @param $offset database query offset
+	 * @param $limit database query limit
+	 * @param $shownavigation show navigation like "next 200"?
+	 */
+	function doQuery( $offset, $limit, $shownavigation=true ) {
+		global $wgUser, $wgOut, $wgLang, $wgContLang;
+
+		$this->offset = $offset;
+		$this->limit = $limit;
+
+		$sname = $this->getName();
+		$fname = get_class($this) . '::doQuery';
+		$dbr = wfGetDB( DB_SLAVE );
+
+		$wgOut->setSyndicated( $this->isSyndicated() );
+
+		if ( !$this->isCached() ) {
+			$sql = $this->getSQL();
+		} else {
+			# Get the cached result
+			$querycache = $dbr->tableName( 'querycache' );
+			$type = $dbr->strencode( $sname );
+			$sql =
+				"SELECT qc_type as type, qc_namespace as namespace,qc_title as title, qc_value as value
+				 FROM $querycache WHERE qc_type='$type'";
+
+			if( !$this->listoutput ) {
+
+				# Fetch the timestamp of this update
+				$tRes = $dbr->select( 'querycache_info', array( 'qci_timestamp' ), array( 'qci_type' => $type ), $fname );
+				$tRow = $dbr->fetchObject( $tRes );
+				
+				if( $tRow ) {
+					$updated = $wgLang->timeAndDate( $tRow->qci_timestamp, true, true );
+					$cacheNotice = wfMsg( 'perfcachedts', $updated );
+					$wgOut->addMeta( 'Data-Cache-Time', $tRow->qci_timestamp );
+					$wgOut->addInlineScript( "var dataCacheTime = '{$tRow->qci_timestamp}';" );
+				} else {
+					$cacheNotice = wfMsg( 'perfcached' );
+				}
+	
+				$wgOut->addWikiText( $cacheNotice );
+				
+				# If updates on this page have been disabled, let the user know
+				# that the data set won't be refreshed for now
+				global $wgDisableQueryPageUpdate;
+				if( is_array( $wgDisableQueryPageUpdate ) && in_array( $this->getName(), $wgDisableQueryPageUpdate ) ) {
+					$wgOut->addWikiText( wfMsg( 'querypage-no-updates' ) );
+				}
+				
+			}
+
+		}
+
+		$sql .= $this->getOrder();
+		$sql = $dbr->limitResult($sql, $limit, $offset);
+		$res = $dbr->query( $sql );
+		$num = $dbr->numRows($res);
+
+		$this->preprocessResults( $dbr, $res );
+		$sk = $wgUser->getSkin();
+		
+		# Top header and navigation
+		if( $shownavigation ) {
+			$wgOut->addHtml( $this->getPageHeader() );
+			if( $num > 0 ) {
+				$wgOut->addHtml( '<p>' . wfShowingResults( $offset, $num ) . '</p>' );
+				# Disable the "next" link when we reach the end
+				$paging = wfViewPrevNext( $offset, $limit, $wgContLang->specialPage( $sname ),
+					wfArrayToCGI( $this->linkParameters() ), ( $num < $limit ) );
+				$wgOut->addHtml( '<p>' . $paging . '</p>' );
+			} else {
+				# No results to show, so don't bother with "showing X of Y" etc.
+				# -- just let the user know and give up now
+				$wgOut->addHtml( '<p>' . wfMsgHtml( 'specialpage-empty' ) . '</p>' );
+				return;
+			}
+		}
+		
+		# The actual results; specialist subclasses will want to handle this
+		# with more than a straight list, so we hand them the info, plus
+		# an OutputPage, and let them get on with it
+		$this->outputResults( $wgOut,
+			$wgUser->getSkin(),
+			$dbr, # Should use a ResultWrapper for this
+			$res,
+			$dbr->numRows( $res ),
+			$offset );
+
+		# Repeat the paging links at the bottom
+		if( $shownavigation ) {
+			$wgOut->addHtml( '<p>' . $paging . '</p>' );
+		}
+		
+		return $num;
+	}
+	
+	/**
+	 * Format and output report results using the given information plus
+	 * OutputPage
+	 *
+	 * @param OutputPage $out OutputPage to print to
+	 * @param Skin $skin User skin to use
+	 * @param Database $dbr Database (read) connection to use
+	 * @param int $res Result pointer
+	 * @param int $num Number of available result rows
+	 * @param int $offset Paging offset
+	 */
+	protected function outputResults( $out, $skin, $dbr, $res, $num, $offset ) {
+		global $wgContLang;
+	
+		if( $num > 0 ) {
+			$html = array();
+			if( !$this->listoutput )
+				$html[] = $this->openList( $offset );
+			
+			# $res might contain the whole 1,000 rows, so we read up to
+			# $num [should update this to use a Pager]
+			for( $i = 0; $i < $num && $row = $dbr->fetchObject( $res ); $i++ ) {
+				$line = $this->formatResult( $skin, $row );
+				if( $line ) {
+					$attr = ( isset( $row->usepatrol ) && $row->usepatrol && $row->patrolled == 0 )
+						? ' class="not-patrolled"'
+						: '';
+					$html[] = $this->listoutput
+						? $format
+						: "<li{$attr}>{$line}</li>\n";
+				}
+			}
+			
+			# Flush the final result
+			if( $this->tryLastResult() ) {
+				$row = null;
+				$line = $this->formatResult( $skin, $row );
+				if( $line ) {
+					$attr = ( isset( $row->usepatrol ) && $row->usepatrol && $row->patrolled == 0 )
+						? ' class="not-patrolled"'
+						: '';
+					$html[] = $this->listoutput
+						? $format
+						: "<li{$attr}>{$line}</li>\n";
+				}
+			}
+			
+			if( !$this->listoutput )
+				$html[] = $this->closeList();
+			
+			$html = $this->listoutput
+				? $wgContLang->listToText( $html )
+				: implode( '', $html );
+			
+			$out->addHtml( $html );
+		}
+	}
+	
+	function openList( $offset ) {
+		return "<ol start='" . ( $offset + 1 ) . "' class='special'>";
+	}
+	
+	function closeList() {
+		return '</ol>';
+	}
+
+	/**
+	 * Do any necessary preprocessing of the result object.
+	 * You should pass this by reference: &$db , &$res  [although probably no longer necessary in PHP5]
+	 */
+	function preprocessResults( &$db, &$res ) {}
+
+	/**
+	 * Similar to above, but packaging in a syndicated feed instead of a web page
+	 */
+	function doFeed( $class = '', $limit = 50 ) {
+		global $wgFeedClasses;
+
+		if( isset($wgFeedClasses[$class]) ) {
+			$feed = new $wgFeedClasses[$class](
+				$this->feedTitle(),
+				$this->feedDesc(),
+				$this->feedUrl() );
+			$feed->outHeader();
+
+			$dbr = wfGetDB( DB_SLAVE );
+			$sql = $this->getSQL() . $this->getOrder();
+			$sql = $dbr->limitResult( $sql, $limit, 0 );
+			$res = $dbr->query( $sql, 'QueryPage::doFeed' );
+			while( $obj = $dbr->fetchObject( $res ) ) {
+				$item = $this->feedResult( $obj );
+				if( $item ) $feed->outItem( $item );
+			}
+			$dbr->freeResult( $res );
+
+			$feed->outFooter();
+			return true;
+		} else {
+			return false;
+		}
+	}
+
+	/**
+	 * Override for custom handling. If the titles/links are ok, just do
+	 * feedItemDesc()
+	 */
+	function feedResult( $row ) {
+		if( !isset( $row->title ) ) {
+			return NULL;
+		}
+		$title = Title::MakeTitle( intval( $row->namespace ), $row->title );
+		if( $title ) {
+			$date = isset( $row->timestamp ) ? $row->timestamp : '';
+			$comments = '';
+			if( $title ) {
+				$talkpage = $title->getTalkPage();
+				$comments = $talkpage->getFullURL();
+			}
+
+			return new FeedItem(
+				$title->getPrefixedText(),
+				$this->feedItemDesc( $row ),
+				$title->getFullURL(),
+				$date,
+				$this->feedItemAuthor( $row ),
+				$comments);
+		} else {
+			return NULL;
+		}
+	}
+
+	function feedItemDesc( $row ) {
+		return isset( $row->comment ) ? htmlspecialchars( $row->comment ) : '';
+	}
+
+	function feedItemAuthor( $row ) {
+		return isset( $row->user_text ) ? $row->user_text : '';
+	}
+
+	function feedTitle() {
+		global $wgContLanguageCode, $wgSitename;
+		$page = SpecialPage::getPage( $this->getName() );
+		$desc = $page->getDescription();
+		return "$wgSitename - $desc [$wgContLanguageCode]";
+	}
+
+	function feedDesc() {
+		return wfMsg( 'tagline' );
+	}
+
+	function feedUrl() {
+		$title = SpecialPage::getTitleFor( $this->getName() );
+		return $title->getFullURL();
+	}
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/RawPage.php
===================================================================
--- /MediaWiki/branches/1.11/includes/RawPage.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/RawPage.php	(revision 1280)
@@ -0,0 +1,223 @@
+<?php
+/**
+ * Copyright (C) 2004 Gabriel Wicke <wicke@wikidev.net>
+ * http://wikidev.net/
+ * Based on PageHistory and SpecialExport
+ *
+ * License: GPL (http://www.gnu.org/copyleft/gpl.html)
+ *
+ * @author Gabriel Wicke <wicke@wikidev.net>
+ */
+
+/**
+ * A simple method to retrieve the plain source of an article,
+ * using "action=raw" in the GET request string.
+ */
+class RawPage {
+	var $mArticle, $mTitle, $mRequest;
+	var $mOldId, $mGen, $mCharset;
+	var $mSmaxage, $mMaxage;
+	var $mContentType, $mExpandTemplates;
+
+	function __construct( &$article, $request = false ) {
+		global $wgRequest, $wgInputEncoding, $wgSquidMaxage, $wgJsMimeType;
+
+		$allowedCTypes = array('text/x-wiki', $wgJsMimeType, 'text/css', 'application/x-zope-edit');
+		$this->mArticle =& $article;
+		$this->mTitle =& $article->mTitle;
+
+		if ( $request === false ) {
+			$this->mRequest =& $wgRequest;
+		} else {
+			$this->mRequest = $request;
+		}
+
+		$ctype = $this->mRequest->getVal( 'ctype' );
+		$smaxage = $this->mRequest->getIntOrNull( 'smaxage', $wgSquidMaxage );
+		$maxage = $this->mRequest->getInt( 'maxage', $wgSquidMaxage );
+		$this->mExpandTemplates = $this->mRequest->getVal( 'templates' ) === 'expand';
+		$this->mUseMessageCache = $this->mRequest->getBool( 'usemsgcache' );
+
+		$oldid = $this->mRequest->getInt( 'oldid' );
+		switch ( $wgRequest->getText( 'direction' ) ) {
+			case 'next':
+				# output next revision, or nothing if there isn't one
+				if ( $oldid ) {
+					$oldid = $this->mTitle->getNextRevisionId( $oldid );
+				}
+				$oldid = $oldid ? $oldid : -1;
+				break;
+			case 'prev':
+				# output previous revision, or nothing if there isn't one
+				if ( ! $oldid ) {
+					# get the current revision so we can get the penultimate one
+					$this->mArticle->getTouched();
+					$oldid = $this->mArticle->mLatest;
+				}
+				$prev = $this->mTitle->getPreviousRevisionId( $oldid );
+				$oldid = $prev ? $prev : -1 ;
+				break;
+			case 'cur':
+				$oldid = 0;
+				break;
+		}
+		$this->mOldId = $oldid;
+		
+		# special case for 'generated' raw things: user css/js
+		$gen = $this->mRequest->getVal( 'gen' );
+
+		if($gen == 'css') {
+			$this->mGen = $gen;
+			if( is_null( $smaxage ) ) $smaxage = $wgSquidMaxage;
+			if($ctype == '') $ctype = 'text/css';
+		} elseif ($gen == 'js') {
+			$this->mGen = $gen;
+			if( is_null( $smaxage ) ) $smaxage = $wgSquidMaxage;
+			if($ctype == '') $ctype = $wgJsMimeType;
+		} else {
+			$this->mGen = false;
+		}
+		$this->mCharset = $wgInputEncoding;
+		$this->mSmaxage = intval( $smaxage );
+		$this->mMaxage = $maxage;
+		
+		// Output may contain user-specific data; vary for open sessions
+		$this->mPrivateCache = ( $this->mSmaxage == 0 ) ||
+			( session_id() != '' );
+		
+		if ( $ctype == '' or ! in_array( $ctype, $allowedCTypes ) ) {
+			$this->mContentType = 'text/x-wiki';
+		} else {
+			$this->mContentType = $ctype;
+		}
+	}
+
+	function view() {
+		global $wgOut, $wgScript;
+
+		if( isset( $_SERVER['SCRIPT_URL'] ) ) {
+			# Normally we use PHP_SELF to get the URL to the script
+			# as it was called, minus the query string.
+			#
+			# Some sites use Apache rewrite rules to handle subdomains,
+			# and have PHP set up in a weird way that causes PHP_SELF
+			# to contain the rewritten URL instead of the one that the
+			# outside world sees.
+			#
+			# If in this mode, use SCRIPT_URL instead, which mod_rewrite
+			# provides containing the "before" URL.
+			$url = $_SERVER['SCRIPT_URL'];
+		} else {
+			$url = $_SERVER['PHP_SELF'];
+		}
+		
+		$ua = @$_SERVER['HTTP_USER_AGENT'];
+		if( strcmp( $wgScript, $url ) && strpos( $ua, 'MSIE' ) !== false ) {
+			# Internet Explorer will ignore the Content-Type header if it
+			# thinks it sees a file extension it recognizes. Make sure that
+			# all raw requests are done through the script node, which will
+			# have eg '.php' and should remain safe.
+			#
+			# We used to redirect to a canonical-form URL as a general
+			# backwards-compatibility / good-citizen nice thing. However
+			# a lot of servers are set up in buggy ways, resulting in
+			# redirect loops which hang the browser until the CSS load
+			# times out.
+			#
+			# Just return a 403 Forbidden and get it over with.
+			wfHttpError( 403, 'Forbidden',
+				'Raw pages must be accessed through the primary script entry point.' );
+			return;
+		}
+
+		header( "Content-type: ".$this->mContentType.'; charset='.$this->mCharset );
+		# allow the client to cache this for 24 hours
+		$mode = $this->mPrivateCache ? 'private' : 'public';
+		header( 'Cache-Control: '.$mode.', s-maxage='.$this->mSmaxage.', max-age='.$this->mMaxage );
+		$text = $this->getRawText();
+
+		if( !wfRunHooks( 'RawPageViewBeforeOutput', array( &$this, &$text ) ) ) {
+			wfDebug( __METHOD__ . ': RawPageViewBeforeOutput hook broke raw page output.' );
+		}
+
+		echo $text;
+		$wgOut->disable();
+	}
+
+	function getRawText() {
+		global $wgUser, $wgOut, $wgRequest;
+		if($this->mGen) {
+			$sk = $wgUser->getSkin();
+			$sk->initPage($wgOut);
+			if($this->mGen == 'css') {
+				return $sk->getUserStylesheet();
+			} else if($this->mGen == 'js') {
+				return $sk->getUserJs();
+			}
+		} else {
+			return $this->getArticleText();
+		}
+	}
+
+	function getArticleText() {
+		$found = false;
+		$text = '';
+		if( $this->mTitle ) {
+			// If it's a MediaWiki message we can just hit the message cache
+			if ( $this->mUseMessageCache && $this->mTitle->getNamespace() == NS_MEDIAWIKI ) {
+				$key = $this->mTitle->getDBkey();
+				$text = wfMsgForContentNoTrans( $key );
+				# If the message doesn't exist, return a blank
+				if( wfEmptyMsg( $key, $text ) )
+					$text = '';
+				$found = true;
+			} else {
+				// Get it from the DB
+				$rev = Revision::newFromTitle( $this->mTitle, $this->mOldId );
+				if ( $rev ) {
+					$lastmod = wfTimestamp( TS_RFC2822, $rev->getTimestamp() );
+					header( "Last-modified: $lastmod" );
+					$text = $rev->getText();
+					$found = true;
+				}
+			}
+		}
+
+		# Bad title or page does not exist
+		if( !$found && $this->mContentType == 'text/x-wiki' ) {
+			# Don't return a 404 response for CSS or JavaScript;
+			# 404s aren't generally cached and it would create
+			# extra hits when user CSS/JS are on and the user doesn't
+			# have the pages.
+			header( "HTTP/1.0 404 Not Found" );
+		}
+		
+		// Special-case for empty CSS/JS
+		//
+		// Internet Explorer for Mac handles empty files badly;
+		// particularly so when keep-alive is active. It can lead
+		// to long timeouts as it seems to sit there waiting for
+		// more data that never comes.
+		//
+		// Give it a comment...
+		if( strlen( $text ) == 0 &&
+			($this->mContentType == 'text/css' ||
+				$this->mContentType == 'text/javascript' ) ) {
+			return "/* Empty */";
+		}
+		
+		return $this->parseArticleText( $text );
+	}
+
+	function parseArticleText( $text ) {
+		if ( $text === '' )
+			return '';
+		else
+			if ( $this->mExpandTemplates ) {
+				global $wgParser;
+				return $wgParser->preprocess( $text, $this->mTitle, new ParserOptions() );
+			} else
+				return $text;
+	}
+}
+?>
Index: /MediaWiki/branches/1.11/includes/RecentChange.php
===================================================================
--- /MediaWiki/branches/1.11/includes/RecentChange.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/RecentChange.php	(revision 1280)
@@ -0,0 +1,598 @@
+<?php
+/**
+ *
+ */
+
+/**
+ * Utility class for creating new RC entries
+ * mAttribs:
+ * 	rc_id           id of the row in the recentchanges table
+ * 	rc_timestamp    time the entry was made
+ * 	rc_cur_time     timestamp on the cur row
+ * 	rc_namespace    namespace #
+ * 	rc_title        non-prefixed db key
+ * 	rc_type         is new entry, used to determine whether updating is necessary
+ * 	rc_minor        is minor
+ * 	rc_cur_id       page_id of associated page entry
+ * 	rc_user	        user id who made the entry
+ * 	rc_user_text    user name who made the entry
+ * 	rc_comment      edit summary
+ * 	rc_this_oldid   rev_id associated with this entry (or zero)
+ * 	rc_last_oldid   rev_id associated with the entry before this one (or zero)
+ * 	rc_bot          is bot, hidden
+ * 	rc_ip           IP address of the user in dotted quad notation
+ * 	rc_new          obsolete, use rc_type==RC_NEW
+ * 	rc_patrolled    boolean whether or not someone has marked this edit as patrolled
+ * 	rc_old_len	integer byte length of the text before the edit
+ * 	rc_new_len	the same after the edit
+ *
+ * mExtra:
+ * 	prefixedDBkey   prefixed db key, used by external app via msg queue
+ * 	lastTimestamp   timestamp of previous entry, used in WHERE clause during update
+ * 	lang            the interwiki prefix, automatically set in save()
+ *  oldSize         text size before the change
+ *  newSize         text size after the change
+ *
+ * temporary:		not stored in the database
+ *      notificationtimestamp
+ *      numberofWatchingusers
+ *
+ * @todo document functions and variables
+ */
+class RecentChange
+{
+	var $mAttribs = array(), $mExtra = array();
+	var $mTitle = false, $mMovedToTitle = false;
+	var $numberofWatchingusers = 0 ; # Dummy to prevent error message in SpecialRecentchangeslinked
+
+	# Factory methods
+
+	public static function newFromRow( $row )
+	{
+		$rc = new RecentChange;
+		$rc->loadFromRow( $row );
+		return $rc;
+	}
+
+	public static function newFromCurRow( $row, $rc_this_oldid = 0 )
+	{
+		$rc = new RecentChange;
+		$rc->loadFromCurRow( $row, $rc_this_oldid );
+		$rc->notificationtimestamp = false;
+		$rc->numberofWatchingusers = false;
+		return $rc;
+	}
+	
+	/**
+	 * Obtain the recent change with a given rc_id value
+	 *
+	 * @param $rcid rc_id value to retrieve
+	 * @return RecentChange
+	 */
+	public static function newFromId( $rcid ) {
+		$dbr = wfGetDB( DB_SLAVE );
+		$res = $dbr->select( 'recentchanges', '*', array( 'rc_id' => $rcid ), __METHOD__ );
+		if( $res && $dbr->numRows( $res ) > 0 ) {
+			$row = $dbr->fetchObject( $res );
+			$dbr->freeResult( $res );
+			return self::newFromRow( $row );
+		} else {
+			return NULL;
+		}
+	}
+
+	# Accessors
+
+	function setAttribs( $attribs )
+	{
+		$this->mAttribs = $attribs;
+	}
+
+	function setExtra( $extra )
+	{
+		$this->mExtra = $extra;
+	}
+
+	function &getTitle()
+	{
+		if ( $this->mTitle === false ) {
+			$this->mTitle = Title::makeTitle( $this->mAttribs['rc_namespace'], $this->mAttribs['rc_title'] );
+		}
+		return $this->mTitle;
+	}
+
+	function getMovedToTitle()
+	{
+		if ( $this->mMovedToTitle === false ) {
+			$this->mMovedToTitle = Title::makeTitle( $this->mAttribs['rc_moved_to_ns'],
+				$this->mAttribs['rc_moved_to_title'] );
+		}
+		return $this->mMovedToTitle;
+	}
+
+	# Writes the data in this object to the database
+	function save()
+	{
+		global $wgLocalInterwiki, $wgPutIPinRC, $wgRC2UDPAddress, $wgRC2UDPPort, $wgRC2UDPPrefix;
+		$fname = 'RecentChange::save';
+
+		$dbw = wfGetDB( DB_MASTER );
+		if ( !is_array($this->mExtra) ) {
+			$this->mExtra = array();
+		}
+		$this->mExtra['lang'] = $wgLocalInterwiki;
+
+		if ( !$wgPutIPinRC ) {
+			$this->mAttribs['rc_ip'] = '';
+		}
+
+		## If our database is strict about IP addresses, use NULL instead of an empty string
+		if ( $dbw->strictIPs() and $this->mAttribs['rc_ip'] == '' ) {
+			unset( $this->mAttribs['rc_ip'] );
+		}
+
+		# Fixup database timestamps
+		$this->mAttribs['rc_timestamp'] = $dbw->timestamp($this->mAttribs['rc_timestamp']);
+		$this->mAttribs['rc_cur_time'] = $dbw->timestamp($this->mAttribs['rc_cur_time']);
+		$this->mAttribs['rc_id'] = $dbw->nextSequenceValue( 'rc_rc_id_seq' );
+
+		## If we are using foreign keys, an entry of 0 for the page_id will fail, so use NULL
+		if ( $dbw->cascadingDeletes() and $this->mAttribs['rc_cur_id']==0 ) {
+			unset ( $this->mAttribs['rc_cur_id'] );
+		}
+
+		# Insert new row
+		$dbw->insert( 'recentchanges', $this->mAttribs, $fname );
+
+		# Set the ID
+		$this->mAttribs['rc_id'] = $dbw->insertId();
+
+		# Update old rows, if necessary
+		if ( $this->mAttribs['rc_type'] == RC_EDIT ) {
+			$lastTime = $this->mExtra['lastTimestamp'];
+			#$now = $this->mAttribs['rc_timestamp'];
+			#$curId = $this->mAttribs['rc_cur_id'];
+
+			# Don't bother looking for entries that have probably
+			# been purged, it just locks up the indexes needlessly.
+			global $wgRCMaxAge;
+			$age = time() - wfTimestamp( TS_UNIX, $lastTime );
+			if( $age < $wgRCMaxAge ) {
+				# live hack, will commit once tested - kate
+				# Update rc_this_oldid for the entries which were current
+				#
+				#$oldid = $this->mAttribs['rc_last_oldid'];
+				#$ns = $this->mAttribs['rc_namespace'];
+				#$title = $this->mAttribs['rc_title'];
+				#
+				#$dbw->update( 'recentchanges',
+				#	array( /* SET */
+				#		'rc_this_oldid' => $oldid
+				#	), array( /* WHERE */
+				#		'rc_namespace' => $ns,
+				#		'rc_title' => $title,
+				#		'rc_timestamp' => $dbw->timestamp( $lastTime )
+				#	), $fname
+				#);
+			}
+
+			# Update rc_cur_time
+			#$dbw->update( 'recentchanges', array( 'rc_cur_time' => $now ),
+			#	array( 'rc_cur_id' => $curId ), $fname );
+		}
+
+		# Notify external application via UDP
+		if ( $wgRC2UDPAddress ) {
+			$conn = socket_create( AF_INET, SOCK_DGRAM, SOL_UDP );
+			if ( $conn ) {
+				$line = $wgRC2UDPPrefix . $this->getIRCLine();
+				socket_sendto( $conn, $line, strlen($line), 0, $wgRC2UDPAddress, $wgRC2UDPPort );
+				socket_close( $conn );
+			}
+		}
+
+		# E-mail notifications
+		global $wgUseEnotif;
+		if( $wgUseEnotif ) {
+			# this would be better as an extension hook
+			include_once( "UserMailer.php" );
+			$enotif = new EmailNotification();
+			$title = Title::makeTitle( $this->mAttribs['rc_namespace'], $this->mAttribs['rc_title'] );
+			$enotif->notifyOnPageChange( $title,
+				$this->mAttribs['rc_timestamp'],
+				$this->mAttribs['rc_comment'],
+				$this->mAttribs['rc_minor'],
+				$this->mAttribs['rc_last_oldid'] );
+		}
+
+		# Notify extensions
+		wfRunHooks( 'RecentChange_save', array( &$this ) );
+	}
+
+	# Marks a certain row as patrolled
+	function markPatrolled( $rcid )
+	{
+		$fname = 'RecentChange::markPatrolled';
+
+		$dbw = wfGetDB( DB_MASTER );
+
+		$dbw->update( 'recentchanges',
+			array( /* SET */
+				'rc_patrolled' => 1
+			), array( /* WHERE */
+				'rc_id' => $rcid
+			), $fname
+		);
+	}
+
+	# Makes an entry in the database corresponding to an edit
+	/*static*/ function notifyEdit( $timestamp, &$title, $minor, &$user, $comment,
+		$oldId, $lastTimestamp, $bot = "default", $ip = '', $oldSize = 0, $newSize = 0,
+		$newId = 0)
+	{
+
+		if ( $bot === 'default' ) {
+			$bot = $user->isAllowed( 'bot' );
+		}
+
+		if ( !$ip ) {
+			$ip = wfGetIP();
+			if ( !$ip ) {
+				$ip = '';
+			}
+		}
+
+		$rc = new RecentChange;
+		$rc->mAttribs = array(
+			'rc_timestamp'	=> $timestamp,
+			'rc_cur_time'	=> $timestamp,
+			'rc_namespace'	=> $title->getNamespace(),
+			'rc_title'	=> $title->getDBkey(),
+			'rc_type'	=> RC_EDIT,
+			'rc_minor'	=> $minor ? 1 : 0,
+			'rc_cur_id'	=> $title->getArticleID(),
+			'rc_user'	=> $user->getID(),
+			'rc_user_text'	=> $user->getName(),
+			'rc_comment'	=> $comment,
+			'rc_this_oldid'	=> $newId,
+			'rc_last_oldid'	=> $oldId,
+			'rc_bot'	=> $bot ? 1 : 0,
+			'rc_moved_to_ns'	=> 0,
+			'rc_moved_to_title'	=> '',
+			'rc_ip'		=> $ip,
+			'rc_patrolled'	=> 0,
+			'rc_new'	=> 0,  # obsolete
+			'rc_old_len'	=> $oldSize,
+			'rc_new_len'	=> $newSize
+		);
+
+		$rc->mExtra =  array(
+			'prefixedDBkey'	=> $title->getPrefixedDBkey(),
+			'lastTimestamp' => $lastTimestamp,
+			'oldSize'       => $oldSize,
+			'newSize'       => $newSize,
+		);
+		$rc->save();
+		return( $rc->mAttribs['rc_id'] );
+	}
+
+	/**
+	 * Makes an entry in the database corresponding to page creation
+	 * Note: the title object must be loaded with the new id using resetArticleID()
+	 * @todo Document parameters and return
+	 * @public
+	 * @static
+	 */
+	public static function notifyNew( $timestamp, &$title, $minor, &$user, $comment, $bot = "default",
+	  $ip='', $size = 0, $newId = 0 )
+	{
+		if ( !$ip ) {
+			$ip = wfGetIP();
+			if ( !$ip ) {
+				$ip = '';
+			}
+		}
+		if ( $bot == 'default' ) {
+			$bot = $user->isAllowed( 'bot' );
+		}
+
+		$rc = new RecentChange;
+		$rc->mAttribs = array(
+			'rc_timestamp'      => $timestamp,
+			'rc_cur_time'       => $timestamp,
+			'rc_namespace'      => $title->getNamespace(),
+			'rc_title'          => $title->getDBkey(),
+			'rc_type'           => RC_NEW,
+			'rc_minor'          => $minor ? 1 : 0,
+			'rc_cur_id'         => $title->getArticleID(),
+			'rc_user'           => $user->getID(),
+			'rc_user_text'      => $user->getName(),
+			'rc_comment'        => $comment,
+			'rc_this_oldid'     => $newId,
+			'rc_last_oldid'     => 0,
+			'rc_bot'            => $bot ? 1 : 0,
+			'rc_moved_to_ns'    => 0,
+			'rc_moved_to_title' => '',
+			'rc_ip'             => $ip,
+			'rc_patrolled'      => 0,
+			'rc_new'	    => 1, # obsolete
+			'rc_old_len'        => 0,
+			'rc_new_len'	    => $size
+		);
+
+		$rc->mExtra =  array(
+			'prefixedDBkey'	=> $title->getPrefixedDBkey(),
+			'lastTimestamp' => 0,
+			'oldSize' => 0,
+			'newSize' => $size
+		);
+		$rc->save();
+		return( $rc->mAttribs['rc_id'] );
+	}
+
+	# Makes an entry in the database corresponding to a rename
+	/*static*/ function notifyMove( $timestamp, &$oldTitle, &$newTitle, &$user, $comment, $ip='', $overRedir = false )
+	{
+		if ( !$ip ) {
+			$ip = wfGetIP();
+			if ( !$ip ) {
+				$ip = '';
+			}
+		}
+
+		$rc = new RecentChange;
+		$rc->mAttribs = array(
+			'rc_timestamp'	=> $timestamp,
+			'rc_cur_time'	=> $timestamp,
+			'rc_namespace'	=> $oldTitle->getNamespace(),
+			'rc_title'	=> $oldTitle->getDBkey(),
+			'rc_type'	=> $overRedir ? RC_MOVE_OVER_REDIRECT : RC_MOVE,
+			'rc_minor'	=> 0,
+			'rc_cur_id'	=> $oldTitle->getArticleID(),
+			'rc_user'	=> $user->getID(),
+			'rc_user_text'	=> $user->getName(),
+			'rc_comment'	=> $comment,
+			'rc_this_oldid'	=> 0,
+			'rc_last_oldid'	=> 0,
+			'rc_bot'	=> $user->isAllowed( 'bot' ) ? 1 : 0,
+			'rc_moved_to_ns'	=> $newTitle->getNamespace(),
+			'rc_moved_to_title'	=> $newTitle->getDBkey(),
+			'rc_ip'		=> $ip,
+			'rc_new'	=> 0, # obsolete
+			'rc_patrolled'	=> 1,
+			'rc_old_len'	=> NULL,
+			'rc_new_len'	=> NULL,
+		);
+
+		$rc->mExtra = array(
+			'prefixedDBkey'	=> $oldTitle->getPrefixedDBkey(),
+			'lastTimestamp' => 0,
+			'prefixedMoveTo'	=> $newTitle->getPrefixedDBkey()
+		);
+		$rc->save();
+	}
+
+	/* static */ function notifyMoveToNew( $timestamp, &$oldTitle, &$newTitle, &$user, $comment, $ip='' ) {
+		RecentChange::notifyMove( $timestamp, $oldTitle, $newTitle, $user, $comment, $ip, false );
+	}
+
+	/* static */ function notifyMoveOverRedirect( $timestamp, &$oldTitle, &$newTitle, &$user, $comment, $ip='' ) {
+		RecentChange::notifyMove( $timestamp, $oldTitle, $newTitle, $user, $comment, $ip, true );
+	}
+
+	# A log entry is different to an edit in that previous revisions are
+	# not kept
+	/*static*/ function notifyLog( $timestamp, &$title, &$user, $comment, $ip='',
+	   $type, $action, $target, $logComment, $params )
+	{
+		if ( !$ip ) {
+			$ip = wfGetIP();
+			if ( !$ip ) {
+				$ip = '';
+			}
+		}
+
+		$rc = new RecentChange;
+		$rc->mAttribs = array(
+			'rc_timestamp'	=> $timestamp,
+			'rc_cur_time'	=> $timestamp,
+			'rc_namespace'	=> $title->getNamespace(),
+			'rc_title'	=> $title->getDBkey(),
+			'rc_type'	=> RC_LOG,
+			'rc_minor'	=> 0,
+			'rc_cur_id'	=> $title->getArticleID(),
+			'rc_user'	=> $user->getID(),
+			'rc_user_text'	=> $user->getName(),
+			'rc_comment'	=> $comment,
+			'rc_this_oldid'	=> 0,
+			'rc_last_oldid'	=> 0,
+			'rc_bot'	=> $user->isAllowed( 'bot' ) ? 1 : 0,
+			'rc_moved_to_ns'	=> 0,
+			'rc_moved_to_title'	=> '',
+			'rc_ip'	=> $ip,
+			'rc_patrolled' => 1,
+			'rc_new'	=> 0, # obsolete
+			'rc_old_len'	=> NULL,
+			'rc_new_len'	=> NULL,
+		);
+		$rc->mExtra =  array(
+			'prefixedDBkey'	=> $title->getPrefixedDBkey(),
+			'lastTimestamp' => 0,
+			'logType' => $type,
+			'logAction' => $action,
+			'logComment' => $logComment,
+			'logTarget' => $target,
+			'logParams' => $params
+		);
+		$rc->save();
+	}
+
+	# Initialises the members of this object from a mysql row object
+	function loadFromRow( $row )
+	{
+		$this->mAttribs = get_object_vars( $row );
+		$this->mAttribs["rc_timestamp"] = wfTimestamp(TS_MW, $this->mAttribs["rc_timestamp"]);
+		$this->mExtra = array();
+	}
+
+	# Makes a pseudo-RC entry from a cur row
+	function loadFromCurRow( $row )
+	{
+		$this->mAttribs = array(
+			'rc_timestamp' => wfTimestamp(TS_MW, $row->rev_timestamp),
+			'rc_cur_time' => $row->rev_timestamp,
+			'rc_user' => $row->rev_user,
+			'rc_user_text' => $row->rev_user_text,
+			'rc_namespace' => $row->page_namespace,
+			'rc_title' => $row->page_title,
+			'rc_comment' => $row->rev_comment,
+			'rc_minor' => $row->rev_minor_edit ? 1 : 0,
+			'rc_type' => $row->page_is_new ? RC_NEW : RC_EDIT,
+			'rc_cur_id' => $row->page_id,
+			'rc_this_oldid'	=> $row->rev_id,
+			'rc_last_oldid'	=> isset($row->rc_last_oldid) ? $row->rc_last_oldid : 0,
+			'rc_bot'	=> 0,
+			'rc_moved_to_ns'	=> 0,
+			'rc_moved_to_title'	=> '',
+			'rc_ip' => '',
+			'rc_id' => $row->rc_id,
+			'rc_patrolled' => $row->rc_patrolled,
+			'rc_new' => $row->page_is_new, # obsolete
+			'rc_old_len' => $row->rc_old_len,
+			'rc_new_len' => $row->rc_new_len,
+		);
+
+		$this->mExtra = array();
+	}
+
+	/**
+	 * Get an attribute value
+	 *
+	 * @param $name Attribute name
+	 * @return mixed
+	 */
+	public function getAttribute( $name ) {
+		return isset( $this->mAttribs[$name] ) ? $this->mAttribs[$name] : NULL;
+	}
+
+	/**
+	 * Gets the end part of the diff URL associated with this object
+	 * Blank if no diff link should be displayed
+	 */
+	function diffLinkTrail( $forceCur )
+	{
+		if ( $this->mAttribs['rc_type'] == RC_EDIT ) {
+			$trail = "curid=" . (int)($this->mAttribs['rc_cur_id']) .
+				"&oldid=" . (int)($this->mAttribs['rc_last_oldid']);
+			if ( $forceCur ) {
+				$trail .= '&diff=0' ;
+			} else {
+				$trail .= '&diff=' . (int)($this->mAttribs['rc_this_oldid']);
+			}
+		} else {
+			$trail = '';
+		}
+		return $trail;
+	}
+
+	function cleanupForIRC( $text ) {
+		return str_replace(array("\n", "\r"), array("", ""), $text);
+	}
+
+	function getIRCLine() {
+		global $wgUseRCPatrol;
+
+		// FIXME: Would be good to replace these 2 extract() calls with something more explicit
+		// e.g. list ($rc_type, $rc_id) = array_values ($this->mAttribs); [or something like that]
+		extract($this->mAttribs);
+		extract($this->mExtra);
+
+		$titleObj =& $this->getTitle();
+		if ( $rc_type == RC_LOG ) {
+			$title = Namespace::getCanonicalName( $titleObj->getNamespace() ) . $titleObj->getText();
+		} else {
+			$title = $titleObj->getPrefixedText();
+		}
+		$title = $this->cleanupForIRC( $title );
+
+		$bad = array("\n", "\r");
+		$empty = array("", "");
+		$title = $titleObj->getPrefixedText();
+		$title = str_replace($bad, $empty, $title);
+
+		// FIXME: *HACK* these should be getFullURL(), hacked for SSL madness --brion 2005-12-26
+		if ( $rc_type == RC_LOG ) {
+			$url = '';
+		} elseif ( $rc_new && $wgUseRCPatrol ) {
+			$url = $titleObj->getInternalURL("rcid=$rc_id");
+		} else if ( $rc_new ) {
+			$url = $titleObj->getInternalURL();
+		} else if ( $wgUseRCPatrol ) {
+			$url = $titleObj->getInternalURL("diff=$rc_this_oldid&oldid=$rc_last_oldid&rcid=$rc_id");
+		} else {
+			$url = $titleObj->getInternalURL("diff=$rc_this_oldid&oldid=$rc_last_oldid");
+		}
+
+		if ( isset( $oldSize ) && isset( $newSize ) ) {
+			$szdiff = $newSize - $oldSize;
+			if ($szdiff < -500) {
+				$szdiff = "\002$szdiff\002";
+			} elseif ($szdiff >= 0) {
+				$szdiff = '+' . $szdiff ;
+			}
+			$szdiff = '(' . $szdiff . ')' ;
+		} else {
+			$szdiff = '';
+		}
+
+		$user = $this->cleanupForIRC( $rc_user_text );
+
+		if ( $rc_type == RC_LOG ) {
+			$logTargetText = $logTarget->getPrefixedText();
+			$comment = $this->cleanupForIRC( str_replace( $logTargetText, "\00302$logTargetText\00310", $rc_comment ) );
+			$flag = $logAction;
+		} else {
+			$comment = $this->cleanupForIRC( $rc_comment );
+			$flag = ($rc_minor ? "M" : "") . ($rc_new ? "N" : "");
+		}
+		# see http://www.irssi.org/documentation/formats for some colour codes. prefix is \003,
+		# no colour (\003) switches back to the term default
+		$fullString = "\00314[[\00307$title\00314]]\0034 $flag\00310 " .
+		              "\00302$url\003 \0035*\003 \00303$user\003 \0035*\003 $szdiff \00310$comment\003\n";
+		return $fullString;
+	}
+
+	/**
+	 * Returns the change size (HTML).
+	 * The lengths can be given optionally.
+	 */
+	function getCharacterDifference( $old = 0, $new = 0 ) {
+		global $wgRCChangedSizeThreshold, $wgLang;
+
+		if( $old === 0 ) {
+			$old = $this->mAttribs['rc_old_len'];
+		}
+		if( $new === 0 ) {
+			$new = $this->mAttribs['rc_new_len'];
+		}
+
+		if( $old === NULL || $new === NULL ) {
+			return '';
+		}
+
+		$szdiff = $new - $old;
+		$formatedSize = wfMsgExt( 'rc-change-size', array( 'parsemag', 'escape'),
+			$wgLang->formatNum($szdiff) );
+
+		if( $szdiff < $wgRCChangedSizeThreshold ) {
+			return '<strong class=\'mw-plusminus-neg\'>(' . $formatedSize . ')</strong>';
+		} elseif( $szdiff === 0 ) {
+			return '<span class=\'mw-plusminus-null\'>(' . $formatedSize . ')</span>';
+		} elseif( $szdiff > 0 ) {
+			return '<span class=\'mw-plusminus-pos\'>(+' . $formatedSize . ')</span>';
+		} else {
+			return '<span class=\'mw-plusminus-neg\'>(' . $formatedSize . ')</span>';
+		}
+	}
+}
+?>
Index: /MediaWiki/branches/1.11/includes/Revision.php
===================================================================
--- /MediaWiki/branches/1.11/includes/Revision.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/Revision.php	(revision 1280)
@@ -0,0 +1,891 @@
+<?php
+/**
+ * @todo document
+ */
+
+/**
+ * @todo document
+ */
+class Revision {
+	const DELETED_TEXT = 1;
+	const DELETED_COMMENT = 2;
+	const DELETED_USER = 4;
+	const DELETED_RESTRICTED = 8;
+
+	/**
+	 * Load a page revision from a given revision ID number.
+	 * Returns null if no such revision can be found.
+	 *
+	 * @param int $id
+	 * @access public
+	 * @static
+	 */
+	public static function newFromId( $id ) {
+		return Revision::newFromConds(
+			array( 'page_id=rev_page',
+			       'rev_id' => intval( $id ) ) );
+	}
+
+	/**
+	 * Load either the current, or a specified, revision
+	 * that's attached to a given title. If not attached
+	 * to that title, will return null.
+	 *
+	 * @param Title $title
+	 * @param int $id
+	 * @return Revision
+	 * @access public
+	 * @static
+	 */
+	public static function newFromTitle( &$title, $id = 0 ) {
+		if( $id ) {
+			$matchId = intval( $id );
+		} else {
+			$matchId = 'page_latest';
+		}
+		return Revision::newFromConds(
+			array( "rev_id=$matchId",
+			       'page_id=rev_page',
+			       'page_namespace' => $title->getNamespace(),
+			       'page_title'     => $title->getDbkey() ) );
+	}
+
+	/**
+	 * Load a page revision from a given revision ID number.
+	 * Returns null if no such revision can be found.
+	 *
+	 * @param Database $db
+	 * @param int $id
+	 * @access public
+	 * @static
+	 */
+	public static function loadFromId( &$db, $id ) {
+		return Revision::loadFromConds( $db,
+			array( 'page_id=rev_page',
+			       'rev_id' => intval( $id ) ) );
+	}
+
+	/**
+	 * Load either the current, or a specified, revision
+	 * that's attached to a given page. If not attached
+	 * to that page, will return null.
+	 *
+	 * @param Database $db
+	 * @param int $pageid
+	 * @param int $id
+	 * @return Revision
+	 * @access public
+	 * @static
+	 */
+	public static function loadFromPageId( $db, $pageid, $id = 0 ) {
+		$conds=array('page_id=rev_page','rev_page'=>intval( $pageid ), 'page_id'=>intval( $pageid ));
+		if( $id ) {
+			$conds['rev_id']=intval($id);
+		} else {
+			$conds[]='rev_id=page_latest';
+		}
+		return Revision::loadFromConds( $db, $conds );
+	}
+
+	/**
+	 * Load either the current, or a specified, revision
+	 * that's attached to a given page. If not attached
+	 * to that page, will return null.
+	 *
+	 * @param Database $db
+	 * @param Title $title
+	 * @param int $id
+	 * @return Revision
+	 * @access public
+	 * @static
+	 */
+	public static function loadFromTitle( &$db, $title, $id = 0 ) {
+		if( $id ) {
+			$matchId = intval( $id );
+		} else {
+			$matchId = 'page_latest';
+		}
+		return Revision::loadFromConds(
+			$db,
+			array( "rev_id=$matchId",
+			       'page_id=rev_page',
+			       'page_namespace' => $title->getNamespace(),
+			       'page_title'     => $title->getDbkey() ) );
+	}
+
+	/**
+	 * Load the revision for the given title with the given timestamp.
+	 * WARNING: Timestamps may in some circumstances not be unique,
+	 * so this isn't the best key to use.
+	 *
+	 * @param Database $db
+	 * @param Title $title
+	 * @param string $timestamp
+	 * @return Revision
+	 * @access public
+	 * @static
+	 */
+	public static function loadFromTimestamp( &$db, &$title, $timestamp ) {
+		return Revision::loadFromConds(
+			$db,
+			array( 'rev_timestamp'  => $db->timestamp( $timestamp ),
+			       'page_id=rev_page',
+			       'page_namespace' => $title->getNamespace(),
+			       'page_title'     => $title->getDbkey() ) );
+	}
+
+	/**
+	 * Given a set of conditions, fetch a revision.
+	 *
+	 * @param array $conditions
+	 * @return Revision
+	 * @access private
+	 * @static
+	 */
+	private static function newFromConds( $conditions ) {
+		$db = wfGetDB( DB_SLAVE );
+		$row = Revision::loadFromConds( $db, $conditions );
+		if( is_null( $row ) ) {
+			$dbw = wfGetDB( DB_MASTER );
+			$row = Revision::loadFromConds( $dbw, $conditions );
+		}
+		return $row;
+	}
+
+	/**
+	 * Given a set of conditions, fetch a revision from
+	 * the given database connection.
+	 *
+	 * @param Database $db
+	 * @param array $conditions
+	 * @return Revision
+	 * @access private
+	 * @static
+	 */
+	private static function loadFromConds( $db, $conditions ) {
+		$res = Revision::fetchFromConds( $db, $conditions );
+		if( $res ) {
+			$row = $res->fetchObject();
+			$res->free();
+			if( $row ) {
+				$ret = new Revision( $row );
+				return $ret;
+			}
+		}
+		$ret = null;
+		return $ret;
+	}
+
+	/**
+	 * Return a wrapper for a series of database rows to
+	 * fetch all of a given page's revisions in turn.
+	 * Each row can be fed to the constructor to get objects.
+	 *
+	 * @param Title $title
+	 * @return ResultWrapper
+	 * @access public
+	 * @static
+	 */
+	public static function fetchAllRevisions( &$title ) {
+		return Revision::fetchFromConds(
+			wfGetDB( DB_SLAVE ),
+			array( 'page_namespace' => $title->getNamespace(),
+			       'page_title'     => $title->getDbkey(),
+			       'page_id=rev_page' ) );
+	}
+
+	/**
+	 * Return a wrapper for a series of database rows to
+	 * fetch all of a given page's revisions in turn.
+	 * Each row can be fed to the constructor to get objects.
+	 *
+	 * @param Title $title
+	 * @return ResultWrapper
+	 * @access public
+	 * @static
+	 */
+	public static function fetchRevision( &$title ) {
+		return Revision::fetchFromConds(
+			wfGetDB( DB_SLAVE ),
+			array( 'rev_id=page_latest',
+			       'page_namespace' => $title->getNamespace(),
+			       'page_title'     => $title->getDbkey(),
+			       'page_id=rev_page' ) );
+	}
+
+	/**
+	 * Given a set of conditions, return a ResultWrapper
+	 * which will return matching database rows with the
+	 * fields necessary to build Revision objects.
+	 *
+	 * @param Database $db
+	 * @param array $conditions
+	 * @return ResultWrapper
+	 * @access private
+	 * @static
+	 */
+	private static function fetchFromConds( $db, $conditions ) {
+		$res = $db->select(
+			array( 'page', 'revision' ),
+			array( 'page_namespace',
+			       'page_title',
+			       'page_latest',
+			       'rev_id',
+			       'rev_page',
+			       'rev_text_id',
+			       'rev_comment',
+			       'rev_user_text',
+			       'rev_user',
+			       'rev_minor_edit',
+			       'rev_timestamp',
+			       'rev_deleted',
+			       'rev_len' ),
+			$conditions,
+			'Revision::fetchRow',
+			array( 'LIMIT' => 1 ) );
+		$ret = $db->resultObject( $res );
+		return $ret;
+	}
+
+	/**
+	 * Return the list of revision fields that should be selected to create 
+	 * a new revision.
+	 */
+	static function selectFields() {
+		return array( 
+			'rev_id',
+			'rev_page',
+			'rev_text_id',
+			'rev_timestamp',
+			'rev_comment',
+			'rev_minor_edit',
+			'rev_user',
+			'rev_user_text,'.
+			'rev_deleted',
+			'rev_len'
+		);
+	}
+
+	/**
+	 * @param object $row
+	 * @access private
+	 */
+	function Revision( $row ) {
+		if( is_object( $row ) ) {
+			$this->mId        = intval( $row->rev_id );
+			$this->mPage      = intval( $row->rev_page );
+			$this->mTextId    = intval( $row->rev_text_id );
+			$this->mComment   =         $row->rev_comment;
+			$this->mUserText  =         $row->rev_user_text;
+			$this->mUser      = intval( $row->rev_user );
+			$this->mMinorEdit = intval( $row->rev_minor_edit );
+			$this->mTimestamp =         $row->rev_timestamp;
+			$this->mDeleted   = intval( $row->rev_deleted );
+			
+			if( !isset( $row->rev_len ) || is_null( $row->rev_len ) )
+				$this->mSize = null;
+			else
+				$this->mSize = intval( $row->rev_len ); 
+
+			if( isset( $row->page_latest ) ) {
+				$this->mCurrent   = ( $row->rev_id == $row->page_latest );
+				$this->mTitle     = Title::makeTitle( $row->page_namespace,
+				                                      $row->page_title );
+			} else {
+				$this->mCurrent = false;
+				$this->mTitle = null;
+			}
+
+			// Lazy extraction...
+			$this->mText      = null;
+			if( isset( $row->old_text ) ) {
+				$this->mTextRow = $row;
+			} else {
+				// 'text' table row entry will be lazy-loaded
+				$this->mTextRow = null;
+			}
+		} elseif( is_array( $row ) ) {
+			// Build a new revision to be saved...
+			global $wgUser;
+
+			$this->mId        = isset( $row['id']         ) ? intval( $row['id']         ) : null;
+			$this->mPage      = isset( $row['page']       ) ? intval( $row['page']       ) : null;
+			$this->mTextId    = isset( $row['text_id']    ) ? intval( $row['text_id']    ) : null;
+			$this->mUserText  = isset( $row['user_text']  ) ? strval( $row['user_text']  ) : $wgUser->getName();
+			$this->mUser      = isset( $row['user']       ) ? intval( $row['user']       ) : $wgUser->getId();
+			$this->mMinorEdit = isset( $row['minor_edit'] ) ? intval( $row['minor_edit'] ) : 0;
+			$this->mTimestamp = isset( $row['timestamp']  ) ? strval( $row['timestamp']  ) : wfTimestamp( TS_MW );
+			$this->mDeleted   = isset( $row['deleted']    ) ? intval( $row['deleted']    ) : 0;
+			$this->mSize      = isset( $row['len']        ) ? intval( $row['len']        ) : null;
+			
+			// Enforce spacing trimming on supplied text
+			$this->mComment   = isset( $row['comment']    ) ?  trim( strval( $row['comment'] ) ) : null;
+			$this->mText      = isset( $row['text']       ) ? rtrim( strval( $row['text']    ) ) : null;
+			$this->mTextRow   = null;
+
+			$this->mTitle     = null; # Load on demand if needed
+			$this->mCurrent   = false;
+			# If we still have no len_size, see it we have the text to figure it out
+			if ( !$this->mSize )
+				$this->mSize      = is_null($this->mText) ? null : strlen($this->mText);
+		} else {
+			throw new MWException( 'Revision constructor passed invalid row format.' );
+		}
+	}
+
+	/**#@+
+	 * @access public
+	 */
+
+	/**
+	 * @return int
+	 */
+	function getId() {
+		return $this->mId;
+	}
+
+	/**
+	 * @return int
+	 */
+	function getTextId() {
+		return $this->mTextId;
+	}
+
+	/**
+	 * Returns the length of the text in this revision, or null if unknown.
+	 */
+	function getSize() {
+		return $this->mSize;
+	}
+
+	/**
+	 * Returns the title of the page associated with this entry.
+	 * @return Title
+	 */
+	function getTitle() {
+		if( isset( $this->mTitle ) ) {
+			return $this->mTitle;
+		}
+		$dbr = wfGetDB( DB_SLAVE );
+		$row = $dbr->selectRow(
+			array( 'page', 'revision' ),
+			array( 'page_namespace', 'page_title' ),
+			array( 'page_id=rev_page',
+			       'rev_id' => $this->mId ),
+			'Revision::getTitle' );
+		if( $row ) {
+			$this->mTitle = Title::makeTitle( $row->page_namespace,
+			                                   $row->page_title );
+		}
+		return $this->mTitle;
+	}
+
+	/**
+	 * Set the title of the revision
+	 * @param Title $title
+	 */
+	function setTitle( $title ) {
+		$this->mTitle = $title;
+	}
+
+	/**
+	 * @return int
+	 */
+	function getPage() {
+		return $this->mPage;
+	}
+
+	/**
+	 * Fetch revision's user id if it's available to all users
+	 * @return int
+	 */
+	function getUser() {
+		if( $this->isDeleted( self::DELETED_USER ) ) {
+			return 0;
+		} else {
+			return $this->mUser;
+		}
+	}
+
+	/**
+	 * Fetch revision's user id without regard for the current user's permissions
+	 * @return string
+	 */
+	function getRawUser() {
+		return $this->mUser;
+	}
+
+	/**
+	 * Fetch revision's username if it's available to all users
+	 * @return string
+	 */
+	function getUserText() {
+		if( $this->isDeleted( self::DELETED_USER ) ) {
+			return "";
+		} else {
+			return $this->mUserText;
+		}
+	}
+
+	/**
+	 * Fetch revision's username without regard for view restrictions
+	 * @return string
+	 */
+	function getRawUserText() {
+		return $this->mUserText;
+	}
+	
+	/**
+	 * Fetch revision comment if it's available to all users
+	 * @return string
+	 */
+	function getComment() {
+		if( $this->isDeleted( self::DELETED_COMMENT ) ) {
+			return "";
+		} else {
+			return $this->mComment;
+		}
+	}
+
+	/**
+	 * Fetch revision comment without regard for the current user's permissions
+	 * @return string
+	 */
+	function getRawComment() {
+		return $this->mComment;
+	}
+
+	/**
+	 * @return bool
+	 */
+	function isMinor() {
+		return (bool)$this->mMinorEdit;
+	}
+
+	/**
+	 * int $field one of DELETED_* bitfield constants
+	 * @return bool
+	 */
+	function isDeleted( $field ) {
+		return ($this->mDeleted & $field) == $field;
+	}
+
+	/**
+	 * Fetch revision text if it's available to all users
+	 * @return string
+	 */
+	function getText() {
+		if( $this->isDeleted( self::DELETED_TEXT ) ) {
+			return "";
+		} else {
+			return $this->getRawText();
+		}
+	}
+	
+	/**
+	 * Fetch revision text without regard for view restrictions
+	 * @return string
+	 */
+	function getRawText() {
+		if( is_null( $this->mText ) ) {
+			// Revision text is immutable. Load on demand:
+			$this->mText = $this->loadText();
+		}
+		return $this->mText;
+	}
+	
+	/**
+	 * Fetch revision text if it's available to THIS user
+	 * @return string
+	 */
+	function revText() {
+		if( !$this->userCan( self::DELETED_TEXT ) ) {
+			return "";
+		} else {
+			return $this->getRawText();
+		}
+	}
+
+	/**
+	 * @return string
+	 */
+	function getTimestamp() {
+		return wfTimestamp(TS_MW, $this->mTimestamp);
+	}
+
+	/**
+	 * @return bool
+	 */
+	function isCurrent() {
+		return $this->mCurrent;
+	}
+
+	/**
+	 * @return Revision
+	 */
+	function getPrevious() {
+		$prev = $this->mTitle->getPreviousRevisionID( $this->mId );
+		if ( $prev ) {
+			return Revision::newFromTitle( $this->mTitle, $prev );
+		} else {
+			return null;
+		}
+	}
+
+	/**
+	 * @return Revision
+	 */
+	function getNext() {
+		$next = $this->mTitle->getNextRevisionID( $this->mId );
+		if ( $next ) {
+			return Revision::newFromTitle( $this->mTitle, $next );
+		} else {
+			return null;
+		}
+	}
+	/**#@-*/
+
+	/**
+	  * Get revision text associated with an old or archive row
+	  * $row is usually an object from wfFetchRow(), both the flags and the text
+	  * field must be included
+	  * @static
+	  * @param integer $row Id of a row
+	  * @param string $prefix table prefix (default 'old_')
+	  * @return string $text|false the text requested
+	  */
+	public static function getRevisionText( $row, $prefix = 'old_' ) {
+		$fname = 'Revision::getRevisionText';
+		wfProfileIn( $fname );
+
+		# Get data
+		$textField = $prefix . 'text';
+		$flagsField = $prefix . 'flags';
+
+		if( isset( $row->$flagsField ) ) {
+			$flags = explode( ',', $row->$flagsField );
+		} else {
+			$flags = array();
+		}
+
+		if( isset( $row->$textField ) ) {
+			$text = $row->$textField;
+		} else {
+			wfProfileOut( $fname );
+			return false;
+		}
+
+		# Use external methods for external objects, text in table is URL-only then
+		if ( in_array( 'external', $flags ) ) {
+			$url=$text;
+			@list(/* $proto */,$path)=explode('://',$url,2);
+			if ($path=="") {
+				wfProfileOut( $fname );
+				return false;
+			}
+			$text=ExternalStore::fetchFromURL($url);
+		}
+
+		// If the text was fetched without an error, convert it
+		if ( $text !== false ) {
+			if( in_array( 'gzip', $flags ) ) {
+				# Deal with optional compression of archived pages.
+				# This can be done periodically via maintenance/compressOld.php, and
+				# as pages are saved if $wgCompressRevisions is set.
+				$text = gzinflate( $text );
+			}
+
+			if( in_array( 'object', $flags ) ) {
+				# Generic compressed storage
+				$obj = unserialize( $text );
+				if ( !is_object( $obj ) ) {
+					// Invalid object
+					wfProfileOut( $fname );
+					return false;
+				}
+				$text = $obj->getText();
+			}
+
+			global $wgLegacyEncoding;
+			if( $wgLegacyEncoding && !in_array( 'utf-8', $flags ) ) {
+				# Old revisions kept around in a legacy encoding?
+				# Upconvert on demand.
+				global $wgInputEncoding, $wgContLang;
+				$text = $wgContLang->iconv( $wgLegacyEncoding, $wgInputEncoding, $text );
+			}
+		}
+		wfProfileOut( $fname );
+		return $text;
+	}
+
+	/**
+	 * If $wgCompressRevisions is enabled, we will compress data.
+	 * The input string is modified in place.
+	 * Return value is the flags field: contains 'gzip' if the
+	 * data is compressed, and 'utf-8' if we're saving in UTF-8
+	 * mode.
+	 *
+	 * @static
+	 * @param mixed $text reference to a text
+	 * @return string
+	 */
+	function compressRevisionText( &$text ) {
+		global $wgCompressRevisions;
+		$flags = array();
+
+		# Revisions not marked this way will be converted
+		# on load if $wgLegacyCharset is set in the future.
+		$flags[] = 'utf-8';
+
+		if( $wgCompressRevisions ) {
+			if( function_exists( 'gzdeflate' ) ) {
+				$text = gzdeflate( $text );
+				$flags[] = 'gzip';
+			} else {
+				wfDebug( "Revision::compressRevisionText() -- no zlib support, not compressing\n" );
+			}
+		}
+		return implode( ',', $flags );
+	}
+
+	/**
+	 * Insert a new revision into the database, returning the new revision ID
+	 * number on success and dies horribly on failure.
+	 *
+	 * @param Database $dbw
+	 * @return int
+	 */
+	function insertOn( &$dbw ) {
+		global $wgDefaultExternalStore;
+		
+		$fname = 'Revision::insertOn';
+		wfProfileIn( $fname );
+
+		$data = $this->mText;
+		$flags = Revision::compressRevisionText( $data );
+
+		# Write to external storage if required
+		if ( $wgDefaultExternalStore ) {
+			if ( is_array( $wgDefaultExternalStore ) ) {
+				// Distribute storage across multiple clusters
+				$store = $wgDefaultExternalStore[mt_rand(0, count( $wgDefaultExternalStore ) - 1)];
+			} else {
+				$store = $wgDefaultExternalStore;
+			}
+			// Store and get the URL
+			$data = ExternalStore::insert( $store, $data );
+			if ( !$data ) {
+				# This should only happen in the case of a configuration error, where the external store is not valid
+				throw new MWException( "Unable to store text to external storage $store" );
+			}
+			if ( $flags ) {
+				$flags .= ',';
+			}
+			$flags .= 'external';
+		}
+
+		# Record the text (or external storage URL) to the text table
+		if( !isset( $this->mTextId ) ) {
+			$old_id = $dbw->nextSequenceValue( 'text_old_id_val' );
+			$dbw->insert( 'text',
+				array(
+					'old_id'    => $old_id,
+					'old_text'  => $data,
+					'old_flags' => $flags,
+				), $fname
+			);
+			$this->mTextId = $dbw->insertId();
+		}
+
+		# Record the edit in revisions
+		$rev_id = isset( $this->mId )
+			? $this->mId
+			: $dbw->nextSequenceValue( 'rev_rev_id_val' );
+		$dbw->insert( 'revision',
+			array(
+				'rev_id'         => $rev_id,
+				'rev_page'       => $this->mPage,
+				'rev_text_id'    => $this->mTextId,
+				'rev_comment'    => $this->mComment,
+				'rev_minor_edit' => $this->mMinorEdit ? 1 : 0,
+				'rev_user'       => $this->mUser,
+				'rev_user_text'  => $this->mUserText,
+				'rev_timestamp'  => $dbw->timestamp( $this->mTimestamp ),
+				'rev_deleted'    => $this->mDeleted,
+				'rev_len'	     => $this->mSize,
+			), $fname
+		);
+
+		$this->mId = !is_null($rev_id) ? $rev_id : $dbw->insertId();
+		wfProfileOut( $fname );
+		return $this->mId;
+	}
+
+	/**
+	 * Lazy-load the revision's text.
+	 * Currently hardcoded to the 'text' table storage engine.
+	 *
+	 * @return string
+	 * @access private
+	 */
+	function loadText() {
+		$fname = 'Revision::loadText';
+		wfProfileIn( $fname );
+		
+		// Caching may be beneficial for massive use of external storage
+		global $wgRevisionCacheExpiry, $wgMemc;
+		$key = wfMemcKey( 'revisiontext', 'textid', $this->getTextId() );
+		if( $wgRevisionCacheExpiry ) {
+			$text = $wgMemc->get( $key );
+			if( is_string( $text ) ) {
+				wfProfileOut( $fname );
+				return $text;
+			}
+		}
+		
+		// If we kept data for lazy extraction, use it now...
+		if ( isset( $this->mTextRow ) ) {
+			$row = $this->mTextRow;
+			$this->mTextRow = null;
+		} else {
+			$row = null;
+		}
+		
+		if( !$row ) {
+			// Text data is immutable; check slaves first.
+			$dbr = wfGetDB( DB_SLAVE );
+			$row = $dbr->selectRow( 'text',
+				array( 'old_text', 'old_flags' ),
+				array( 'old_id' => $this->getTextId() ),
+				$fname);
+		}
+
+		if( !$row ) {
+			// Possible slave lag!
+			$dbw = wfGetDB( DB_MASTER );
+			$row = $dbw->selectRow( 'text',
+				array( 'old_text', 'old_flags' ),
+				array( 'old_id' => $this->getTextId() ),
+				$fname);
+		}
+
+		$text = Revision::getRevisionText( $row );
+		
+		if( $wgRevisionCacheExpiry ) {
+			$wgMemc->set( $key, $text, $wgRevisionCacheExpiry );
+		}
+		
+		wfProfileOut( $fname );
+
+		return $text;
+	}
+
+	/**
+	 * Create a new null-revision for insertion into a page's
+	 * history. This will not re-save the text, but simply refer
+	 * to the text from the previous version.
+	 *
+	 * Such revisions can for instance identify page rename
+	 * operations and other such meta-modifications.
+	 *
+	 * @param Database $dbw
+	 * @param int      $pageId ID number of the page to read from
+	 * @param string   $summary
+	 * @param bool     $minor
+	 * @return Revision
+	 */
+	function newNullRevision( &$dbw, $pageId, $summary, $minor ) {
+		$fname = 'Revision::newNullRevision';
+		wfProfileIn( $fname );
+
+		$current = $dbw->selectRow(
+			array( 'page', 'revision' ),
+			array( 'page_latest', 'rev_text_id' ),
+			array(
+				'page_id' => $pageId,
+				'page_latest=rev_id',
+				),
+			$fname );
+
+		if( $current ) {
+			$revision = new Revision( array(
+				'page'       => $pageId,
+				'comment'    => $summary,
+				'minor_edit' => $minor,
+				'text_id'    => $current->rev_text_id,
+				) );
+		} else {
+			$revision = null;
+		}
+
+		wfProfileOut( $fname );
+		return $revision;
+	}
+	
+	/**
+	 * Determine if the current user is allowed to view a particular
+	 * field of this revision, if it's marked as deleted.
+	 * @param int $field one of self::DELETED_TEXT,
+	 *                          self::DELETED_COMMENT,
+	 *                          self::DELETED_USER
+	 * @return bool
+	 */
+	function userCan( $field ) {
+		if( ( $this->mDeleted & $field ) == $field ) {
+			global $wgUser;
+			$permission = ( $this->mDeleted & self::DELETED_RESTRICTED ) == self::DELETED_RESTRICTED
+				? 'hiderevision'
+				: 'deleterevision';
+			wfDebug( "Checking for $permission due to $field match on $this->mDeleted\n" );
+			return $wgUser->isAllowed( $permission );
+		} else {
+			return true;
+		}
+	}
+
+
+	/**
+	 * Get rev_timestamp from rev_id, without loading the rest of the row
+	 * @param integer $id
+	 */
+	static function getTimestampFromID( $id ) {
+		$dbr = wfGetDB( DB_SLAVE );
+		$timestamp = $dbr->selectField( 'revision', 'rev_timestamp', 
+			array( 'rev_id' => $id ), __METHOD__ );
+		if ( $timestamp === false ) {
+			# Not in slave, try master
+			$dbw = wfGetDB( DB_MASTER );
+			$timestamp = $dbw->selectField( 'revision', 'rev_timestamp', 
+				array( 'rev_id' => $id ), __METHOD__ );
+		}
+		return $timestamp;
+	}
+	
+	static function countByPageId( $db, $id ) {
+		$row = $db->selectRow( 'revision', 'COUNT(*) AS revCount',
+			array( 'rev_page' => $id ), __METHOD__ );
+		if( $row ) {
+			return $row->revCount;
+		}
+		return 0;
+	}
+	
+	static function countByTitle( $db, $title ) {
+		$id = $title->getArticleId();
+		if( $id ) {
+			return Revision::countByPageId( $db, $id );
+		}
+		return 0;
+	}
+}
+
+/**
+ * Aliases for backwards compatibility with 1.6
+ */
+define( 'MW_REV_DELETED_TEXT', Revision::DELETED_TEXT );
+define( 'MW_REV_DELETED_COMMENT', Revision::DELETED_COMMENT );
+define( 'MW_REV_DELETED_USER', Revision::DELETED_USER );
+define( 'MW_REV_DELETED_RESTRICTED', Revision::DELETED_RESTRICTED );
+
+
+?>
Index: /MediaWiki/branches/1.11/includes/Sanitizer.php
===================================================================
--- /MediaWiki/branches/1.11/includes/Sanitizer.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/Sanitizer.php	(revision 1280)
@@ -0,0 +1,1277 @@
+<?php
+/**
+ * XHTML sanitizer for MediaWiki
+ *
+ * Copyright (C) 2002-2005 Brion Vibber <brion@pobox.com> et al
+ * http://www.mediawiki.org/
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @addtogroup Parser
+ */
+
+/**
+ * Regular expression to match various types of character references in
+ * Sanitizer::normalizeCharReferences and Sanitizer::decodeCharReferences
+ */
+define( 'MW_CHAR_REFS_REGEX',
+	'/&([A-Za-z0-9\x80-\xff]+);
+	 |&\#([0-9]+);
+	 |&\#x([0-9A-Za-z]+);
+	 |&\#X([0-9A-Za-z]+);
+	 |(&)/x' );
+
+/**
+ * Regular expression to match HTML/XML attribute pairs within a tag.
+ * Allows some... latitude.
+ * Used in Sanitizer::fixTagAttributes and Sanitizer::decodeTagAttributes
+ */
+$attrib = '[A-Za-z0-9]';
+$space = '[\x09\x0a\x0d\x20]';
+define( 'MW_ATTRIBS_REGEX',
+	"/(?:^|$space)($attrib+)
+	  ($space*=$space*
+		(?:
+		 # The attribute value: quoted or alone
+		  \"([^<\"]*)\"
+		 | '([^<']*)'
+		 |  ([a-zA-Z0-9!#$%&()*,\\-.\\/:;<>?@[\\]^_`{|}~]+)
+		 |  (\#[0-9a-fA-F]+) # Technically wrong, but lots of
+							 # colors are specified like this.
+							 # We'll be normalizing it.
+		)
+	   )?(?=$space|\$)/sx" );
+
+/**
+ * List of all named character entities defined in HTML 4.01
+ * http://www.w3.org/TR/html4/sgml/entities.html
+ * @private
+ */
+global $wgHtmlEntities;
+$wgHtmlEntities = array(
+	'Aacute'   => 193,
+	'aacute'   => 225,
+	'Acirc'    => 194,
+	'acirc'    => 226,
+	'acute'    => 180,
+	'AElig'    => 198,
+	'aelig'    => 230,
+	'Agrave'   => 192,
+	'agrave'   => 224,
+	'alefsym'  => 8501,
+	'Alpha'    => 913,
+	'alpha'    => 945,
+	'amp'      => 38,
+	'and'      => 8743,
+	'ang'      => 8736,
+	'Aring'    => 197,
+	'aring'    => 229,
+	'asymp'    => 8776,
+	'Atilde'   => 195,
+	'atilde'   => 227,
+	'Auml'     => 196,
+	'auml'     => 228,
+	'bdquo'    => 8222,
+	'Beta'     => 914,
+	'beta'     => 946,
+	'brvbar'   => 166,
+	'bull'     => 8226,
+	'cap'      => 8745,
+	'Ccedil'   => 199,
+	'ccedil'   => 231,
+	'cedil'    => 184,
+	'cent'     => 162,
+	'Chi'      => 935,
+	'chi'      => 967,
+	'circ'     => 710,
+	'clubs'    => 9827,
+	'cong'     => 8773,
+	'copy'     => 169,
+	'crarr'    => 8629,
+	'cup'      => 8746,
+	'curren'   => 164,
+	'dagger'   => 8224,
+	'Dagger'   => 8225,
+	'darr'     => 8595,
+	'dArr'     => 8659,
+	'deg'      => 176,
+	'Delta'    => 916,
+	'delta'    => 948,
+	'diams'    => 9830,
+	'divide'   => 247,
+	'Eacute'   => 201,
+	'eacute'   => 233,
+	'Ecirc'    => 202,
+	'ecirc'    => 234,
+	'Egrave'   => 200,
+	'egrave'   => 232,
+	'empty'    => 8709,
+	'emsp'     => 8195,
+	'ensp'     => 8194,
+	'Epsilon'  => 917,
+	'epsilon'  => 949,
+	'equiv'    => 8801,
+	'Eta'      => 919,
+	'eta'      => 951,
+	'ETH'      => 208,
+	'eth'      => 240,
+	'Euml'     => 203,
+	'euml'     => 235,
+	'euro'     => 8364,
+	'exist'    => 8707,
+	'fnof'     => 402,
+	'forall'   => 8704,
+	'frac12'   => 189,
+	'frac14'   => 188,
+	'frac34'   => 190,
+	'frasl'    => 8260,
+	'Gamma'    => 915,
+	'gamma'    => 947,
+	'ge'       => 8805,
+	'gt'       => 62,
+	'harr'     => 8596,
+	'hArr'     => 8660,
+	'hearts'   => 9829,
+	'hellip'   => 8230,
+	'Iacute'   => 205,
+	'iacute'   => 237,
+	'Icirc'    => 206,
+	'icirc'    => 238,
+	'iexcl'    => 161,
+	'Igrave'   => 204,
+	'igrave'   => 236,
+	'image'    => 8465,
+	'infin'    => 8734,
+	'int'      => 8747,
+	'Iota'     => 921,
+	'iota'     => 953,
+	'iquest'   => 191,
+	'isin'     => 8712,
+	'Iuml'     => 207,
+	'iuml'     => 239,
+	'Kappa'    => 922,
+	'kappa'    => 954,
+	'Lambda'   => 923,
+	'lambda'   => 955,
+	'lang'     => 9001,
+	'laquo'    => 171,
+	'larr'     => 8592,
+	'lArr'     => 8656,
+	'lceil'    => 8968,
+	'ldquo'    => 8220,
+	'le'       => 8804,
+	'lfloor'   => 8970,
+	'lowast'   => 8727,
+	'loz'      => 9674,
+	'lrm'      => 8206,
+	'lsaquo'   => 8249,
+	'lsquo'    => 8216,
+	'lt'       => 60,
+	'macr'     => 175,
+	'mdash'    => 8212,
+	'micro'    => 181,
+	'middot'   => 183,
+	'minus'    => 8722,
+	'Mu'       => 924,
+	'mu'       => 956,
+	'nabla'    => 8711,
+	'nbsp'     => 160,
+	'ndash'    => 8211,
+	'ne'       => 8800,
+	'ni'       => 8715,
+	'not'      => 172,
+	'notin'    => 8713,
+	'nsub'     => 8836,
+	'Ntilde'   => 209,
+	'ntilde'   => 241,
+	'Nu'       => 925,
+	'nu'       => 957,
+	'Oacute'   => 211,
+	'oacute'   => 243,
+	'Ocirc'    => 212,
+	'ocirc'    => 244,
+	'OElig'    => 338,
+	'oelig'    => 339,
+	'Ograve'   => 210,
+	'ograve'   => 242,
+	'oline'    => 8254,
+	'Omega'    => 937,
+	'omega'    => 969,
+	'Omicron'  => 927,
+	'omicron'  => 959,
+	'oplus'    => 8853,
+	'or'       => 8744,
+	'ordf'     => 170,
+	'ordm'     => 186,
+	'Oslash'   => 216,
+	'oslash'   => 248,
+	'Otilde'   => 213,
+	'otilde'   => 245,
+	'otimes'   => 8855,
+	'Ouml'     => 214,
+	'ouml'     => 246,
+	'para'     => 182,
+	'part'     => 8706,
+	'permil'   => 8240,
+	'perp'     => 8869,
+	'Phi'      => 934,
+	'phi'      => 966,
+	'Pi'       => 928,
+	'pi'       => 960,
+	'piv'      => 982,
+	'plusmn'   => 177,
+	'pound'    => 163,
+	'prime'    => 8242,
+	'Prime'    => 8243,
+	'prod'     => 8719,
+	'prop'     => 8733,
+	'Psi'      => 936,
+	'psi'      => 968,
+	'quot'     => 34,
+	'radic'    => 8730,
+	'rang'     => 9002,
+	'raquo'    => 187,
+	'rarr'     => 8594,
+	'rArr'     => 8658,
+	'rceil'    => 8969,
+	'rdquo'    => 8221,
+	'real'     => 8476,
+	'reg'      => 174,
+	'rfloor'   => 8971,
+	'Rho'      => 929,
+	'rho'      => 961,
+	'rlm'      => 8207,
+	'rsaquo'   => 8250,
+	'rsquo'    => 8217,
+	'sbquo'    => 8218,
+	'Scaron'   => 352,
+	'scaron'   => 353,
+	'sdot'     => 8901,
+	'sect'     => 167,
+	'shy'      => 173,
+	'Sigma'    => 931,
+	'sigma'    => 963,
+	'sigmaf'   => 962,
+	'sim'      => 8764,
+	'spades'   => 9824,
+	'sub'      => 8834,
+	'sube'     => 8838,
+	'sum'      => 8721,
+	'sup'      => 8835,
+	'sup1'     => 185,
+	'sup2'     => 178,
+	'sup3'     => 179,
+	'supe'     => 8839,
+	'szlig'    => 223,
+	'Tau'      => 932,
+	'tau'      => 964,
+	'there4'   => 8756,
+	'Theta'    => 920,
+	'theta'    => 952,
+	'thetasym' => 977,
+	'thinsp'   => 8201,
+	'THORN'    => 222,
+	'thorn'    => 254,
+	'tilde'    => 732,
+	'times'    => 215,
+	'trade'    => 8482,
+	'Uacute'   => 218,
+	'uacute'   => 250,
+	'uarr'     => 8593,
+	'uArr'     => 8657,
+	'Ucirc'    => 219,
+	'ucirc'    => 251,
+	'Ugrave'   => 217,
+	'ugrave'   => 249,
+	'uml'      => 168,
+	'upsih'    => 978,
+	'Upsilon'  => 933,
+	'upsilon'  => 965,
+	'Uuml'     => 220,
+	'uuml'     => 252,
+	'weierp'   => 8472,
+	'Xi'       => 926,
+	'xi'       => 958,
+	'Yacute'   => 221,
+	'yacute'   => 253,
+	'yen'      => 165,
+	'Yuml'     => 376,
+	'yuml'     => 255,
+	'Zeta'     => 918,
+	'zeta'     => 950,
+	'zwj'      => 8205,
+	'zwnj'     => 8204 );
+
+/**
+ * Character entity aliases accepted by MediaWiki
+ */
+global $wgHtmlEntityAliases;
+$wgHtmlEntityAliases = array(
+	'רלמ' => 'rlm',
+	'رلم' => 'rlm',
+);
+
+
+/**
+ * XHTML sanitizer for MediaWiki
+ * @addtogroup Parser
+ */
+class Sanitizer {
+	/**
+	 * Cleans up HTML, removes dangerous tags and attributes, and
+	 * removes HTML comments
+	 * @private
+	 * @param string $text
+	 * @param callback $processCallback to do any variable or parameter replacements in HTML attribute values
+	 * @param array $args for the processing callback
+	 * @return string
+	 */
+	static function removeHTMLtags( $text, $processCallback = null, $args = array() ) {
+		global $wgUseTidy;
+
+		static $htmlpairs, $htmlsingle, $htmlsingleonly, $htmlnest, $tabletags,
+			$htmllist, $listtags, $htmlsingleallowed, $htmlelements, $staticInitialised;
+
+		wfProfileIn( __METHOD__ );
+
+		if ( !$staticInitialised ) {
+
+			$htmlpairs = array( # Tags that must be closed
+				'b', 'del', 'i', 'ins', 'u', 'font', 'big', 'small', 'sub', 'sup', 'h1',
+				'h2', 'h3', 'h4', 'h5', 'h6', 'cite', 'code', 'em', 's',
+				'strike', 'strong', 'tt', 'var', 'div', 'center',
+				'blockquote', 'ol', 'ul', 'dl', 'table', 'caption', 'pre',
+				'ruby', 'rt' , 'rb' , 'rp', 'p', 'span', 'u'
+			);
+			$htmlsingle = array(
+				'br', 'hr', 'li', 'dt', 'dd'
+			);
+			$htmlsingleonly = array( # Elements that cannot have close tags
+				'br', 'hr'
+			);
+			$htmlnest = array( # Tags that can be nested--??
+				'table', 'tr', 'td', 'th', 'div', 'blockquote', 'ol', 'ul',
+				'dl', 'font', 'big', 'small', 'sub', 'sup', 'span'
+			);
+			$tabletags = array( # Can only appear inside table, we will close them
+				'td', 'th', 'tr',
+			);
+			$htmllist = array( # Tags used by list
+				'ul','ol',
+			);
+			$listtags = array( # Tags that can appear in a list
+				'li',
+			);
+
+			$htmlsingleallowed = array_merge( $htmlsingle, $tabletags );
+			$htmlelements = array_merge( $htmlsingle, $htmlpairs, $htmlnest );
+
+			# Convert them all to hashtables for faster lookup
+			$vars = array( 'htmlpairs', 'htmlsingle', 'htmlsingleonly', 'htmlnest', 'tabletags', 
+				'htmllist', 'listtags', 'htmlsingleallowed', 'htmlelements' );
+			foreach ( $vars as $var ) {
+				$$var = array_flip( $$var );
+			}
+			$staticInitialised = true;
+		}
+
+		# Remove HTML comments
+		$text = Sanitizer::removeHTMLcomments( $text );
+		$bits = explode( '<', $text );
+		$text = str_replace( '>', '&gt;', array_shift( $bits ) );
+		if(!$wgUseTidy) {
+			$tagstack = $tablestack = array();
+			foreach ( $bits as $x ) {
+				$regs = array();
+				if( preg_match( '!^(/?)(\\w+)([^>]*?)(/{0,1}>)([^<]*)$!', $x, $regs ) ) {
+					list( /* $qbar */, $slash, $t, $params, $brace, $rest ) = $regs;
+				} else {
+					$slash = $t = $params = $brace = $rest = null;
+				}
+
+				$badtag = 0 ;
+				if ( isset( $htmlelements[$t = strtolower( $t )] ) ) {
+					# Check our stack
+					if ( $slash ) {
+						# Closing a tag...
+						if( isset( $htmlsingleonly[$t] ) ) {
+							$badtag = 1;
+						} elseif ( ( $ot = @array_pop( $tagstack ) ) != $t ) {
+							if ( isset( $htmlsingleallowed[$ot] ) ) {
+								# Pop all elements with an optional close tag
+								# and see if we find a match below them
+								$optstack = array();
+								array_push ($optstack, $ot);
+								while ( ( ( $ot = @array_pop( $tagstack ) ) != $t ) &&
+										isset( $htmlsingleallowed[$ot] ) ) 
+								{
+									array_push ($optstack, $ot);
+								}
+								if ( $t != $ot ) {
+									# No match. Push the optinal elements back again
+									$badtag = 1;
+									while ( $ot = @array_pop( $optstack ) ) {
+										array_push( $tagstack, $ot );
+									}
+								}
+							} else {
+								@array_push( $tagstack, $ot );
+								# <li> can be nested in <ul> or <ol>, skip those cases:
+								if(!(isset( $htmllist[$ot] ) && isset( $listtags[$t] ) )) {
+									$badtag = 1;
+								}
+							}
+						} else {
+							if ( $t == 'table' ) {
+								$tagstack = array_pop( $tablestack );
+							}
+						}
+						$newparams = '';
+					} else {
+						# Keep track for later
+						if ( isset( $tabletags[$t] ) &&
+						! in_array( 'table', $tagstack ) ) {
+							$badtag = 1;
+						} else if ( in_array( $t, $tagstack ) &&
+						! isset( $htmlnest [$t ] ) ) {
+							$badtag = 1 ;
+						# Is it a self closed htmlpair ? (bug 5487)
+						} else if( $brace == '/>' &&
+						isset( $htmlpairs[$t] ) ) {
+							$badtag = 1;
+						} elseif( isset( $htmlsingleonly[$t] ) ) {
+							# Hack to force empty tag for uncloseable elements
+							$brace = '/>';
+						} else if( isset( $htmlsingle[$t] ) ) {
+							# Hack to not close $htmlsingle tags
+							$brace = NULL;
+						} else if( isset( $tabletags[$t] )
+						&&  in_array($t ,$tagstack) ) {
+							// New table tag but forgot to close the previous one
+							$text .= "</$t>";
+						} else {
+							if ( $t == 'table' ) {
+								array_push( $tablestack, $tagstack );
+								$tagstack = array();
+							}
+							array_push( $tagstack, $t );
+						}
+
+						# Replace any variables or template parameters with
+						# plaintext results.
+						if( is_callable( $processCallback ) ) {
+							call_user_func_array( $processCallback, array( &$params, $args ) );
+						}
+
+						# Strip non-approved attributes from the tag
+						$newparams = Sanitizer::fixTagAttributes( $params, $t );
+					}
+					if ( ! $badtag ) {
+						$rest = str_replace( '>', '&gt;', $rest );
+						$close = ( $brace == '/>' && !$slash ) ? ' /' : '';
+						$text .= "<$slash$t$newparams$close>$rest";
+						continue;
+					}
+				}
+				$text .= '&lt;' . str_replace( '>', '&gt;', $x);
+			}
+			# Close off any remaining tags
+			while ( is_array( $tagstack ) && ($t = array_pop( $tagstack )) ) {
+				$text .= "</$t>\n";
+				if ( $t == 'table' ) { $tagstack = array_pop( $tablestack ); }
+			}
+		} else {
+			# this might be possible using tidy itself
+			foreach ( $bits as $x ) {
+				preg_match( '/^(\\/?)(\\w+)([^>]*?)(\\/{0,1}>)([^<]*)$/',
+				$x, $regs );
+				@list( /* $qbar */, $slash, $t, $params, $brace, $rest ) = $regs;
+				if ( isset( $htmlelements[$t = strtolower( $t )] ) ) {
+					if( is_callable( $processCallback ) ) {
+						call_user_func_array( $processCallback, array( &$params, $args ) );
+					}
+					$newparams = Sanitizer::fixTagAttributes( $params, $t );
+					$rest = str_replace( '>', '&gt;', $rest );
+					$text .= "<$slash$t$newparams$brace$rest";
+				} else {
+					$text .= '&lt;' . str_replace( '>', '&gt;', $x);
+				}
+			}
+		}
+		wfProfileOut( __METHOD__ );
+		return $text;
+	}
+
+	/**
+	 * Remove '<!--', '-->', and everything between.
+	 * To avoid leaving blank lines, when a comment is both preceded
+	 * and followed by a newline (ignoring spaces), trim leading and
+	 * trailing spaces and one of the newlines.
+	 *
+	 * @private
+	 * @param string $text
+	 * @return string
+	 */
+	static function removeHTMLcomments( $text ) {
+		wfProfileIn( __METHOD__ );
+		while (($start = strpos($text, '<!--')) !== false) {
+			$end = strpos($text, '-->', $start + 4);
+			if ($end === false) {
+				# Unterminated comment; bail out
+				break;
+			}
+
+			$end += 3;
+
+			# Trim space and newline if the comment is both
+			# preceded and followed by a newline
+			$spaceStart = max($start - 1, 0);
+			$spaceLen = $end - $spaceStart;
+			while (substr($text, $spaceStart, 1) === ' ' && $spaceStart > 0) {
+				$spaceStart--;
+				$spaceLen++;
+			}
+			while (substr($text, $spaceStart + $spaceLen, 1) === ' ')
+				$spaceLen++;
+			if (substr($text, $spaceStart, 1) === "\n" and substr($text, $spaceStart + $spaceLen, 1) === "\n") {
+				# Remove the comment, leading and trailing
+				# spaces, and leave only one newline.
+				$text = substr_replace($text, "\n", $spaceStart, $spaceLen + 1);
+			}
+			else {
+				# Remove just the comment.
+				$text = substr_replace($text, '', $start, $end - $start);
+			}
+		}
+		wfProfileOut( __METHOD__ );
+		return $text;
+	}
+
+	/**
+	 * Take an array of attribute names and values and normalize or discard
+	 * illegal values for the given element type.
+	 *
+	 * - Discards attributes not on a whitelist for the given element
+	 * - Unsafe style attributes are discarded
+	 *
+	 * @param array $attribs
+	 * @param string $element
+	 * @return array
+	 *
+	 * @todo Check for legal values where the DTD limits things.
+	 * @todo Check for unique id attribute :P
+	 */
+	static function validateTagAttributes( $attribs, $element ) {
+		$whitelist = array_flip( Sanitizer::attributeWhitelist( $element ) );
+		$out = array();
+		foreach( $attribs as $attribute => $value ) {
+			if( !isset( $whitelist[$attribute] ) ) {
+				continue;
+			}
+			# Strip javascript "expression" from stylesheets.
+			# http://msdn.microsoft.com/workshop/author/dhtml/overview/recalc.asp
+			if( $attribute == 'style' ) {
+				$value = Sanitizer::checkCss( $value );
+				if( $value === false ) {
+					# haxx0r
+					continue;
+				}
+			}
+
+			if ( $attribute === 'id' )
+				$value = Sanitizer::escapeId( $value );
+
+			// If this attribute was previously set, override it.
+			// Output should only have one attribute of each name.
+			$out[$attribute] = $value;
+		}
+		return $out;
+	}
+	
+	/**
+	 * Pick apart some CSS and check it for forbidden or unsafe structures.
+	 * Returns a sanitized string, or false if it was just too evil.
+	 *
+	 * Currently URL references, 'expression', 'tps' are forbidden.
+	 *
+	 * @param string $value
+	 * @return mixed
+	 */
+	static function checkCss( $value ) {
+		$stripped = Sanitizer::decodeCharReferences( $value );
+
+		// Remove any comments; IE gets token splitting wrong
+		$stripped = StringUtils::delimiterReplace( '/*', '*/', ' ', $stripped );
+		
+		$value = $stripped;
+
+		// ... and continue checks
+		$stripped = preg_replace( '!\\\\([0-9A-Fa-f]{1,6})[ \\n\\r\\t\\f]?!e',
+			'codepointToUtf8(hexdec("$1"))', $stripped );
+		$stripped = str_replace( '\\', '', $stripped );
+		if( preg_match( '/(?:expression|tps*:\/\/|url\\s*\().*/is',
+				$stripped ) ) {
+			# haxx0r
+			return false;
+		}
+		
+		return $value;
+	}
+
+	/**
+	 * Take a tag soup fragment listing an HTML element's attributes
+	 * and normalize it to well-formed XML, discarding unwanted attributes.
+	 * Output is safe for further wikitext processing, with escaping of
+	 * values that could trigger problems.
+	 *
+	 * - Normalizes attribute names to lowercase
+	 * - Discards attributes not on a whitelist for the given element
+	 * - Turns broken or invalid entities into plaintext
+	 * - Double-quotes all attribute values
+	 * - Attributes without values are given the name as attribute
+	 * - Double attributes are discarded
+	 * - Unsafe style attributes are discarded
+	 * - Prepends space if there are attributes.
+	 *
+	 * @param string $text
+	 * @param string $element
+	 * @return string
+	 */
+	static function fixTagAttributes( $text, $element ) {
+		if( trim( $text ) == '' ) {
+			return '';
+		}
+
+		$stripped = Sanitizer::validateTagAttributes(
+			Sanitizer::decodeTagAttributes( $text ), $element );
+
+		$attribs = array();
+		foreach( $stripped as $attribute => $value ) {
+			$encAttribute = htmlspecialchars( $attribute );
+			$encValue = Sanitizer::safeEncodeAttribute( $value );
+
+			$attribs[] = "$encAttribute=\"$encValue\"";
+		}
+		return count( $attribs ) ? ' ' . implode( ' ', $attribs ) : '';
+	}
+
+	/**
+	 * Encode an attribute value for HTML output.
+	 * @param $text
+	 * @return HTML-encoded text fragment
+	 */
+	static function encodeAttribute( $text ) {
+		$encValue = htmlspecialchars( $text );
+
+		// Whitespace is normalized during attribute decoding,
+		// so if we've been passed non-spaces we must encode them
+		// ahead of time or they won't be preserved.
+		$encValue = strtr( $encValue, array(
+			"\n" => '&#10;',
+			"\r" => '&#13;',
+			"\t" => '&#9;',
+		) );
+
+		return $encValue;
+	}
+
+	/**
+	 * Encode an attribute value for HTML tags, with extra armoring
+	 * against further wiki processing.
+	 * @param $text
+	 * @return HTML-encoded text fragment
+	 */
+	static function safeEncodeAttribute( $text ) {
+		$encValue = Sanitizer::encodeAttribute( $text );
+
+		# Templates and links may be expanded in later parsing,
+		# creating invalid or dangerous output. Suppress this.
+		$encValue = strtr( $encValue, array(
+			'<'    => '&lt;',   // This should never happen,
+			'>'    => '&gt;',   // we've received invalid input
+			'"'    => '&quot;', // which should have been escaped.
+			'{'    => '&#123;',
+			'['    => '&#91;',
+			"''"   => '&#39;&#39;',
+			'ISBN' => '&#73;SBN',
+			'RFC'  => '&#82;FC',
+			'PMID' => '&#80;MID',
+			'|'    => '&#124;',
+			'__'   => '&#95;_',
+		) );
+
+		# Stupid hack
+		$encValue = preg_replace_callback(
+			'/(' . wfUrlProtocols() . ')/',
+			array( 'Sanitizer', 'armorLinksCallback' ),
+			$encValue );
+		return $encValue;
+	}
+
+	/**
+	 * Given a value escape it so that it can be used in an id attribute and
+	 * return it, this does not validate the value however (see first link)
+	 *
+	 * @see http://www.w3.org/TR/html401/types.html#type-name Valid characters
+	 *                                                          in the id and
+	 *                                                          name attributes
+	 * @see http://www.w3.org/TR/html401/struct/links.html#h-12.2.3 Anchors with the id attribute
+	 *
+	 * @static
+	 *
+	 * @param string $id
+	 * @return string
+	 */
+	static function escapeId( $id ) {
+		static $replace = array(
+			'%3A' => ':',
+			'%' => '.'
+		);
+
+		$id = urlencode( Sanitizer::decodeCharReferences( strtr( $id, ' ', '_' ) ) );
+
+		return str_replace( array_keys( $replace ), array_values( $replace ), $id );
+	}
+
+	/**
+	 * Given a value, escape it so that it can be used as a CSS class and
+	 * return it.
+	 *
+	 * @todo For extra validity, input should be validated UTF-8.
+	 *
+	 * @see http://www.w3.org/TR/CSS21/syndata.html Valid characters/format
+	 *
+	 * @param string $class
+	 * @return string
+	 */
+	static function escapeClass( $class ) {
+		// Convert ugly stuff to underscores and kill underscores in ugly places
+		return rtrim(preg_replace(
+			array('/(^[0-9\\-])|[\\x00-\\x20!"#$%&\'()*+,.\\/:;<=>?@[\\]^`{|}~]|\\xC2\\xA0/','/_+/'),
+			'_',
+			$class ), '_');
+	}
+
+	/**
+	 * Regex replace callback for armoring links against further processing.
+	 * @param array $matches
+	 * @return string
+	 * @private
+	 */
+	private static function armorLinksCallback( $matches ) {
+		return str_replace( ':', '&#58;', $matches[1] );
+	}
+
+	/**
+	 * Return an associative array of attribute names and values from
+	 * a partial tag string. Attribute names are forces to lowercase,
+	 * character references are decoded to UTF-8 text.
+	 *
+	 * @param string
+	 * @return array
+	 */
+	static function decodeTagAttributes( $text ) {
+		$attribs = array();
+
+		if( trim( $text ) == '' ) {
+			return $attribs;
+		}
+
+		$pairs = array();
+		if( !preg_match_all(
+			MW_ATTRIBS_REGEX,
+			$text,
+			$pairs,
+			PREG_SET_ORDER ) ) {
+			return $attribs;
+		}
+
+		foreach( $pairs as $set ) {
+			$attribute = strtolower( $set[1] );
+			$value = Sanitizer::getTagAttributeCallback( $set );
+
+			// Normalize whitespace
+			$value = preg_replace( '/[\t\r\n ]+/', ' ', $value );
+			$value = trim( $value );
+
+			// Decode character references
+			$attribs[$attribute] = Sanitizer::decodeCharReferences( $value );
+		}
+		return $attribs;
+	}
+
+	/**
+	 * Pick the appropriate attribute value from a match set from the
+	 * MW_ATTRIBS_REGEX matches.
+	 *
+	 * @param array $set
+	 * @return string
+	 * @private
+	 */
+	private static function getTagAttributeCallback( $set ) {
+		if( isset( $set[6] ) ) {
+			# Illegal #XXXXXX color with no quotes.
+			return $set[6];
+		} elseif( isset( $set[5] ) ) {
+			# No quotes.
+			return $set[5];
+		} elseif( isset( $set[4] ) ) {
+			# Single-quoted
+			return $set[4];
+		} elseif( isset( $set[3] ) ) {
+			# Double-quoted
+			return $set[3];
+		} elseif( !isset( $set[2] ) ) {
+			# In XHTML, attributes must have a value.
+			# For 'reduced' form, return explicitly the attribute name here.
+			return $set[1];
+		} else {
+			throw new MWException( "Tag conditions not met. This should never happen and is a bug." );
+		}
+	}
+
+	/**
+	 * Normalize whitespace and character references in an XML source-
+	 * encoded text for an attribute value.
+	 *
+	 * See http://www.w3.org/TR/REC-xml/#AVNormalize for background,
+	 * but note that we're not returning the value, but are returning
+	 * XML source fragments that will be slapped into output.
+	 *
+	 * @param string $text
+	 * @return string
+	 * @private
+	 */
+	private static function normalizeAttributeValue( $text ) {
+		return str_replace( '"', '&quot;',
+			self::normalizeWhitespace(
+				Sanitizer::normalizeCharReferences( $text ) ) );
+	}
+	
+	private static function normalizeWhitespace( $text ) {
+		return preg_replace(
+			'/\r\n|[\x20\x0d\x0a\x09]/',
+			' ',
+			$text );
+	}
+
+	/**
+	 * Ensure that any entities and character references are legal
+	 * for XML and XHTML specifically. Any stray bits will be
+	 * &amp;-escaped to result in a valid text fragment.
+	 *
+	 * a. any named char refs must be known in XHTML
+	 * b. any numeric char refs must be legal chars, not invalid or forbidden
+	 * c. use &#x, not &#X
+	 * d. fix or reject non-valid attributes
+	 *
+	 * @param string $text
+	 * @return string
+	 * @private
+	 */
+	static function normalizeCharReferences( $text ) {
+		return preg_replace_callback(
+			MW_CHAR_REFS_REGEX,
+			array( 'Sanitizer', 'normalizeCharReferencesCallback' ),
+			$text );
+	}
+	/**
+	 * @param string $matches
+	 * @return string
+	 */
+	static function normalizeCharReferencesCallback( $matches ) {
+		$ret = null;
+		if( $matches[1] != '' ) {
+			$ret = Sanitizer::normalizeEntity( $matches[1] );
+		} elseif( $matches[2] != '' ) {
+			$ret = Sanitizer::decCharReference( $matches[2] );
+		} elseif( $matches[3] != ''  ) {
+			$ret = Sanitizer::hexCharReference( $matches[3] );
+		} elseif( $matches[4] != '' ) {
+			$ret = Sanitizer::hexCharReference( $matches[4] );
+		}
+		if( is_null( $ret ) ) {
+			return htmlspecialchars( $matches[0] );
+		} else {
+			return $ret;
+		}
+	}
+
+	/**
+	 * If the named entity is defined in the HTML 4.0/XHTML 1.0 DTD,
+	 * return the named entity reference as is. If the entity is a 
+	 * MediaWiki-specific alias, returns the HTML equivalent. Otherwise, 
+	 * returns HTML-escaped text of pseudo-entity source (eg &amp;foo;)
+	 *
+	 * @param string $name
+	 * @return string
+	 * @static
+	 */
+	static function normalizeEntity( $name ) {
+		global $wgHtmlEntities, $wgHtmlEntityAliases;
+		if ( isset( $wgHtmlEntityAliases[$name] ) ) {
+			return "&{$wgHtmlEntityAliases[$name]};";
+		} elseif( isset( $wgHtmlEntities[$name] ) ) {
+			return "&$name;";
+		} else {
+			return "&amp;$name;";
+		}
+	}
+
+	static function decCharReference( $codepoint ) {
+		$point = intval( $codepoint );
+		if( Sanitizer::validateCodepoint( $point ) ) {
+			return sprintf( '&#%d;', $point );
+		} else {
+			return null;
+		}
+	}
+
+	static function hexCharReference( $codepoint ) {
+		$point = hexdec( $codepoint );
+		if( Sanitizer::validateCodepoint( $point ) ) {
+			return sprintf( '&#x%x;', $point );
+		} else {
+			return null;
+		}
+	}
+
+	/**
+	 * Returns true if a given Unicode codepoint is a valid character in XML.
+	 * @param int $codepoint
+	 * @return bool
+	 */
+	private static function validateCodepoint( $codepoint ) {
+		return ($codepoint ==    0x09)
+			|| ($codepoint ==    0x0a)
+			|| ($codepoint ==    0x0d)
+			|| ($codepoint >=    0x20 && $codepoint <=   0xd7ff)
+			|| ($codepoint >=  0xe000 && $codepoint <=   0xfffd)
+			|| ($codepoint >= 0x10000 && $codepoint <= 0x10ffff);
+	}
+
+	/**
+	 * Decode any character references, numeric or named entities,
+	 * in the text and return a UTF-8 string.
+	 *
+	 * @param string $text
+	 * @return string
+	 * @public
+	 * @static
+	 */
+	public static function decodeCharReferences( $text ) {
+		return preg_replace_callback(
+			MW_CHAR_REFS_REGEX,
+			array( 'Sanitizer', 'decodeCharReferencesCallback' ),
+			$text );
+	}
+
+	/**
+	 * @param string $matches
+	 * @return string
+	 */
+	static function decodeCharReferencesCallback( $matches ) {
+		if( $matches[1] != '' ) {
+			return Sanitizer::decodeEntity( $matches[1] );
+		} elseif( $matches[2] != '' ) {
+			return  Sanitizer::decodeChar( intval( $matches[2] ) );
+		} elseif( $matches[3] != ''  ) {
+			return  Sanitizer::decodeChar( hexdec( $matches[3] ) );
+		} elseif( $matches[4] != '' ) {
+			return  Sanitizer::decodeChar( hexdec( $matches[4] ) );
+		}
+		# Last case should be an ampersand by itself
+		return $matches[0];
+	}
+
+	/**
+	 * Return UTF-8 string for a codepoint if that is a valid
+	 * character reference, otherwise U+FFFD REPLACEMENT CHARACTER.
+	 * @param int $codepoint
+	 * @return string
+	 * @private
+	 */
+	static function decodeChar( $codepoint ) {
+		if( Sanitizer::validateCodepoint( $codepoint ) ) {
+			return codepointToUtf8( $codepoint );
+		} else {
+			return UTF8_REPLACEMENT;
+		}
+	}
+
+	/**
+	 * If the named entity is defined in the HTML 4.0/XHTML 1.0 DTD,
+	 * return the UTF-8 encoding of that character. Otherwise, returns
+	 * pseudo-entity source (eg &foo;)
+	 *
+	 * @param string $name
+	 * @return string
+	 */
+	static function decodeEntity( $name ) {
+		global $wgHtmlEntities, $wgHtmlEntityAliases;
+		if ( isset( $wgHtmlEntityAliases[$name] ) ) {
+			$name = $wgHtmlEntityAliases[$name];
+		}
+		if( isset( $wgHtmlEntities[$name] ) ) {
+			return codepointToUtf8( $wgHtmlEntities[$name] );
+		} else {
+			return "&$name;";
+		}
+	}
+
+	/**
+	 * Fetch the whitelist of acceptable attributes for a given
+	 * element name.
+	 *
+	 * @param string $element
+	 * @return array
+	 */
+	static function attributeWhitelist( $element ) {
+		static $list;
+		if( !isset( $list ) ) {
+			$list = Sanitizer::setupAttributeWhitelist();
+		}
+		return isset( $list[$element] )
+			? $list[$element]
+			: array();
+	}
+
+	/**
+	 * @todo Document it a bit
+	 * @return array
+	 */
+	static function setupAttributeWhitelist() {
+		$common = array( 'id', 'class', 'lang', 'dir', 'title', 'style' );
+		$block = array_merge( $common, array( 'align' ) );
+		$tablealign = array( 'align', 'char', 'charoff', 'valign' );
+		$tablecell = array( 'abbr',
+		                    'axis',
+		                    'headers',
+		                    'scope',
+		                    'rowspan',
+		                    'colspan',
+		                    'nowrap', # deprecated
+		                    'width',  # deprecated
+		                    'height', # deprecated
+		                    'bgcolor' # deprecated
+		                    );
+
+		# Numbers refer to sections in HTML 4.01 standard describing the element.
+		# See: http://www.w3.org/TR/html4/
+		$whitelist = array (
+			# 7.5.4
+			'div'        => $block,
+			'center'     => $common, # deprecated
+			'span'       => $block, # ??
+
+			# 7.5.5
+			'h1'         => $block,
+			'h2'         => $block,
+			'h3'         => $block,
+			'h4'         => $block,
+			'h5'         => $block,
+			'h6'         => $block,
+
+			# 7.5.6
+			# address
+
+			# 8.2.4
+			# bdo
+
+			# 9.2.1
+			'em'         => $common,
+			'strong'     => $common,
+			'cite'       => $common,
+			# dfn
+			'code'       => $common,
+			# samp
+			# kbd
+			'var'        => $common,
+			# abbr
+			# acronym
+
+			# 9.2.2
+			'blockquote' => array_merge( $common, array( 'cite' ) ),
+			# q
+
+			# 9.2.3
+			'sub'        => $common,
+			'sup'        => $common,
+
+			# 9.3.1
+			'p'          => $block,
+
+			# 9.3.2
+			'br'         => array( 'id', 'class', 'title', 'style', 'clear' ),
+
+			# 9.3.4
+			'pre'        => array_merge( $common, array( 'width' ) ),
+
+			# 9.4
+			'ins'        => array_merge( $common, array( 'cite', 'datetime' ) ),
+			'del'        => array_merge( $common, array( 'cite', 'datetime' ) ),
+
+			# 10.2
+			'ul'         => array_merge( $common, array( 'type' ) ),
+			'ol'         => array_merge( $common, array( 'type', 'start' ) ),
+			'li'         => array_merge( $common, array( 'type', 'value' ) ),
+
+			# 10.3
+			'dl'         => $common,
+			'dd'         => $common,
+			'dt'         => $common,
+
+			# 11.2.1
+			'table'      => array_merge( $common,
+								array( 'summary', 'width', 'border', 'frame',
+										'rules', 'cellspacing', 'cellpadding',
+										'align', 'bgcolor',
+								) ),
+
+			# 11.2.2
+			'caption'    => array_merge( $common, array( 'align' ) ),
+
+			# 11.2.3
+			'thead'      => array_merge( $common, $tablealign ),
+			'tfoot'      => array_merge( $common, $tablealign ),
+			'tbody'      => array_merge( $common, $tablealign ),
+
+			# 11.2.4
+			'colgroup'   => array_merge( $common, array( 'span', 'width' ), $tablealign ),
+			'col'        => array_merge( $common, array( 'span', 'width' ), $tablealign ),
+
+			# 11.2.5
+			'tr'         => array_merge( $common, array( 'bgcolor' ), $tablealign ),
+
+			# 11.2.6
+			'td'         => array_merge( $common, $tablecell, $tablealign ),
+			'th'         => array_merge( $common, $tablecell, $tablealign ),
+
+			# 15.2.1
+			'tt'         => $common,
+			'b'          => $common,
+			'i'          => $common,
+			'big'        => $common,
+			'small'      => $common,
+			'strike'     => $common,
+			's'          => $common,
+			'u'          => $common,
+
+			# 15.2.2
+			'font'       => array_merge( $common, array( 'size', 'color', 'face' ) ),
+			# basefont
+
+			# 15.3
+			'hr'         => array_merge( $common, array( 'noshade', 'size', 'width' ) ),
+
+			# XHTML Ruby annotation text module, simple ruby only.
+			# http://www.w3c.org/TR/ruby/
+			'ruby'       => $common,
+			# rbc
+			# rtc
+			'rb'         => $common,
+			'rt'         => $common, #array_merge( $common, array( 'rbspan' ) ),
+			'rp'         => $common,
+			);
+		return $whitelist;
+	}
+
+	/**
+	 * Take a fragment of (potentially invalid) HTML and return
+	 * a version with any tags removed, encoded as plain text.
+	 *
+	 * Warning: this return value must be further escaped for literal
+	 * inclusion in HTML output as of 1.10!
+	 *
+	 * @param string $text HTML fragment
+	 * @return string
+	 */
+	static function stripAllTags( $text ) {
+		# Actual <tags>
+		$text = StringUtils::delimiterReplace( '<', '>', '', $text );
+
+		# Normalize &entities and whitespace
+		$text = self::decodeCharReferences( $text );
+		$text = self::normalizeWhitespace( $text );
+
+		return $text;
+	}
+
+	/**
+	 * Hack up a private DOCTYPE with HTML's standard entity declarations.
+	 * PHP 4 seemed to know these if you gave it an HTML doctype, but
+	 * PHP 5.1 doesn't.
+	 *
+	 * Use for passing XHTML fragments to PHP's XML parsing functions
+	 *
+	 * @return string
+	 * @static
+	 */
+	static function hackDocType() {
+		global $wgHtmlEntities;
+		$out = "<!DOCTYPE html [\n";
+		foreach( $wgHtmlEntities as $entity => $codepoint ) {
+			$out .= "<!ENTITY $entity \"&#$codepoint;\">";
+		}
+		$out .= "]>\n";
+		return $out;
+	}
+
+	static function cleanUrl( $url, $hostname=true ) {
+		# Normalize any HTML entities in input. They will be
+		# re-escaped by makeExternalLink().
+		$url = Sanitizer::decodeCharReferences( $url );
+
+		# Escape any control characters introduced by the above step
+		$url = preg_replace( '/[\][<>"\\x00-\\x20\\x7F]/e', "urlencode('\\0')", $url );
+
+		# Validate hostname portion
+		$matches = array();
+		if( preg_match( '!^([^:]+:)(//[^/]+)?(.*)$!iD', $url, $matches ) ) {
+			list( /* $whole */, $protocol, $host, $rest ) = $matches;
+
+			// Characters that will be ignored in IDNs.
+			// http://tools.ietf.org/html/3454#section-3.1
+			// Strip them before further processing so blacklists and such work.
+			$strip = "/
+				\\s|          # general whitespace
+				\xc2\xad|     # 00ad SOFT HYPHEN
+				\xe1\xa0\x86| # 1806 MONGOLIAN TODO SOFT HYPHEN
+				\xe2\x80\x8b| # 200b ZERO WIDTH SPACE
+				\xe2\x81\xa0| # 2060 WORD JOINER
+				\xef\xbb\xbf| # feff ZERO WIDTH NO-BREAK SPACE
+				\xcd\x8f|     # 034f COMBINING GRAPHEME JOINER
+				\xe1\xa0\x8b| # 180b MONGOLIAN FREE VARIATION SELECTOR ONE
+				\xe1\xa0\x8c| # 180c MONGOLIAN FREE VARIATION SELECTOR TWO
+				\xe1\xa0\x8d| # 180d MONGOLIAN FREE VARIATION SELECTOR THREE
+				\xe2\x80\x8c| # 200c ZERO WIDTH NON-JOINER
+				\xe2\x80\x8d| # 200d ZERO WIDTH JOINER
+				[\xef\xb8\x80-\xef\xb8\x8f] # fe00-fe00f VARIATION SELECTOR-1-16
+				/xuD";
+
+			$host = preg_replace( $strip, '', $host );
+
+			// @fixme: validate hostnames here
+
+			return $protocol . $host . $rest;
+		} else {
+			return $url;
+		}
+	}
+
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/SearchEngine.php
===================================================================
--- /MediaWiki/branches/1.11/includes/SearchEngine.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/SearchEngine.php	(revision 1280)
@@ -0,0 +1,369 @@
+<?php
+/**
+ * Contain a class for special pages
+ * @addtogroup Search
+ */
+class SearchEngine {
+	var $limit = 10;
+	var $offset = 0;
+	var $searchTerms = array();
+	var $namespaces = array( NS_MAIN );
+	var $showRedirects = false;
+
+	/**
+	 * Perform a full text search query and return a result set.
+	 * If title searches are not supported or disabled, return null.
+	 *
+	 * @param string $term - Raw search term
+	 * @return SearchResultSet
+	 * @access public
+	 * @abstract
+	 */
+	function searchText( $term ) {
+		return null;
+	}
+
+	/**
+	 * Perform a title-only search query and return a result set.
+	 * If title searches are not supported or disabled, return null.
+	 *
+	 * @param string $term - Raw search term
+	 * @return SearchResultSet
+	 * @access public
+	 * @abstract
+	 */
+	function searchTitle( $term ) {
+		return null;
+	}
+
+	/**
+	 * If an exact title match can be find, or a very slightly close match,
+	 * return the title. If no match, returns NULL.
+	 *
+	 * @static
+	 * @param string $term
+	 * @return Title
+	 * @private
+	 */
+	function getNearMatch( $searchterm ) {
+		global $wgContLang;
+
+		$allSearchTerms = array($searchterm);
+
+		if($wgContLang->hasVariants()){
+			$allSearchTerms = array_merge($allSearchTerms,$wgContLang->convertLinkToAllVariants($searchterm));
+		}
+
+		foreach($allSearchTerms as $term){
+
+			# Exact match? No need to look further.
+			$title = Title::newFromText( $term );
+			if (is_null($title))
+				return NULL;
+
+			if ( $title->getNamespace() == NS_SPECIAL || $title->exists() ) {
+				return $title;
+			}
+
+			# Now try all lower case (i.e. first letter capitalized)
+			#
+			$title = Title::newFromText( $wgContLang->lc( $term ) );
+			if ( $title->exists() ) {
+				return $title;
+			}
+
+			# Now try capitalized string
+			#
+			$title = Title::newFromText( $wgContLang->ucwords( $term ) );
+			if ( $title->exists() ) {
+				return $title;
+			}
+
+			# Now try all upper case
+			#
+			$title = Title::newFromText( $wgContLang->uc( $term ) );
+			if ( $title->exists() ) {
+				return $title;
+			}
+
+			# Now try Word-Caps-Breaking-At-Word-Breaks, for hyphenated names etc
+			$title = Title::newFromText( $wgContLang->ucwordbreaks($term) );
+			if ( $title->exists() ) {
+				return $title;
+			}
+
+			global $wgCapitalLinks, $wgContLang;
+			if( !$wgCapitalLinks ) {
+				// Catch differs-by-first-letter-case-only
+				$title = Title::newFromText( $wgContLang->ucfirst( $term ) );
+				if ( $title->exists() ) {
+					return $title;
+				}
+				$title = Title::newFromText( $wgContLang->lcfirst( $term ) );
+				if ( $title->exists() ) {
+					return $title;
+				}
+			}
+		}
+
+		$title = Title::newFromText( $searchterm );
+
+		# Entering an IP address goes to the contributions page
+		if ( ( $title->getNamespace() == NS_USER && User::isIP($title->getText() ) )
+			|| User::isIP( trim( $searchterm ) ) ) {
+			return SpecialPage::getTitleFor( 'Contributions', $title->getDbkey() );
+		}
+
+
+		# Entering a user goes to the user page whether it's there or not
+		if ( $title->getNamespace() == NS_USER ) {
+			return $title;
+		}
+		
+		# Go to images that exist even if there's no local page.
+		# There may have been a funny upload, or it may be on a shared
+		# file repository such as Wikimedia Commons.
+		if( $title->getNamespace() == NS_IMAGE ) {
+			$image = new Image( $title );
+			if( $image->exists() ) {
+				return $title;
+			}
+		}
+
+		# MediaWiki namespace? Page may be "implied" if not customized.
+		# Just return it, with caps forced as the message system likes it.
+		if( $title->getNamespace() == NS_MEDIAWIKI ) {
+			return Title::makeTitle( NS_MEDIAWIKI, $wgContLang->ucfirst( $title->getText() ) );
+		}
+
+		# Quoted term? Try without the quotes...
+		$matches = array();
+		if( preg_match( '/^"([^"]+)"$/', $searchterm, $matches ) ) {
+			return SearchEngine::getNearMatch( $matches[1] );
+		}
+		
+		return NULL;
+	}
+
+	public static function legalSearchChars() {
+		return "A-Za-z_'0-9\\x80-\\xFF\\-";
+	}
+
+	/**
+	 * Set the maximum number of results to return
+	 * and how many to skip before returning the first.
+	 *
+	 * @param int $limit
+	 * @param int $offset
+	 * @access public
+	 */
+	function setLimitOffset( $limit, $offset = 0 ) {
+		$this->limit = intval( $limit );
+		$this->offset = intval( $offset );
+	}
+
+	/**
+	 * Set which namespaces the search should include.
+	 * Give an array of namespace index numbers.
+	 *
+	 * @param array $namespaces
+	 * @access public
+	 */
+	function setNamespaces( $namespaces ) {
+		$this->namespaces = $namespaces;
+	}
+
+	/**
+	 * Make a list of searchable namespaces and their canonical names.
+	 * @return array
+	 * @access public
+	 */
+	function searchableNamespaces() {
+		global $wgContLang;
+		$arr = array();
+		foreach( $wgContLang->getNamespaces() as $ns => $name ) {
+			if( $ns >= NS_MAIN ) {
+				$arr[$ns] = $name;
+			}
+		}
+		return $arr;
+	}
+
+	/**
+	 * Return a 'cleaned up' search string
+	 *
+	 * @return string
+	 * @access public
+	 */
+	function filter( $text ) {
+		$lc = $this->legalSearchChars();
+		return trim( preg_replace( "/[^{$lc}]/", " ", $text ) );
+	}
+	/**
+	 * Load up the appropriate search engine class for the currently
+	 * active database backend, and return a configured instance.
+	 *
+	 * @return SearchEngine
+	 */
+	public static function create() {
+		global $wgDBtype, $wgSearchType;
+		if( $wgSearchType ) {
+			$class = $wgSearchType;
+		} elseif( $wgDBtype == 'mysql' ) {
+			$class = 'SearchMySQL4';
+		} else if ( $wgDBtype == 'postgres' ) {
+			$class = 'SearchPostgres';
+		} else if ( $wgDBtype == 'oracle' ) {
+			$class = 'SearchOracle';
+		} else {
+			$class = 'SearchEngineDummy';
+		}
+		$search = new $class( wfGetDB( DB_SLAVE ) );
+		$search->setLimitOffset(0,0);
+		return $search;
+	}
+
+	/**
+	 * Create or update the search index record for the given page.
+	 * Title and text should be pre-processed.
+	 *
+	 * @param int $id
+	 * @param string $title
+	 * @param string $text
+	 * @abstract
+	 */
+	function update( $id, $title, $text ) {
+		// no-op
+	}
+
+	/**
+	 * Update a search index record's title only.
+	 * Title should be pre-processed.
+	 *
+	 * @param int $id
+	 * @param string $title
+	 * @abstract
+	 */
+	function updateTitle( $id, $title ) {
+		// no-op
+	}
+}
+
+
+/**
+ * @addtogroup Search
+ */
+class SearchResultSet {
+	/**
+	 * Fetch an array of regular expression fragments for matching
+	 * the search terms as parsed by this engine in a text extract.
+	 *
+	 * @return array
+	 * @access public
+	 * @abstract
+	 */
+	function termMatches() {
+		return array();
+	}
+
+	function numRows() {
+		return 0;
+	}
+
+	/**
+	 * Return true if results are included in this result set.
+	 * @return bool
+	 * @abstract
+	 */
+	function hasResults() {
+		return false;
+	}
+
+	/**
+	 * Some search modes return a total hit count for the query
+	 * in the entire article database. This may include pages
+	 * in namespaces that would not be matched on the given
+	 * settings.
+	 *
+	 * Return null if no total hits number is supported.
+	 *
+	 * @return int
+	 * @access public
+	 */
+	function getTotalHits() {
+		return null;
+	}
+
+	/**
+	 * Some search modes return a suggested alternate term if there are
+	 * no exact hits. Returns true if there is one on this set.
+	 *
+	 * @return bool
+	 * @access public
+	 */
+	function hasSuggestion() {
+		return false;
+	}
+
+	/**
+	 * Some search modes return a suggested alternate term if there are
+	 * no exact hits. Check hasSuggestion() first.
+	 *
+	 * @return string
+	 * @access public
+	 */
+	function getSuggestion() {
+		return '';
+	}
+
+	/**
+	 * Fetches next search result, or false.
+	 * @return SearchResult
+	 * @access public
+	 * @abstract
+	 */
+	function next() {
+		return false;
+	}
+}
+
+
+/**
+ * @addtogroup Search
+ */
+class SearchResult {
+	function SearchResult( $row ) {
+		$this->mTitle = Title::makeTitle( $row->page_namespace, $row->page_title );
+	}
+
+	/**
+	 * @return Title
+	 * @access public
+	 */
+	function getTitle() {
+		return $this->mTitle;
+	}
+
+	/**
+	 * @return double or null if not supported
+	 */
+	function getScore() {
+		return null;
+	}
+}
+
+/**
+ * @addtogroup Search
+ */
+class SearchEngineDummy {
+	function search( $term ) {
+		return null;
+	}
+	function setLimitOffset($l, $o) {}
+	function legalSearchChars() {}
+	function update() {}
+	function setnamespaces() {}
+	function searchtitle() {}
+	function searchtext() {}
+}
+?>
Index: /MediaWiki/branches/1.11/includes/SearchMySQL.php
===================================================================
--- /MediaWiki/branches/1.11/includes/SearchMySQL.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/SearchMySQL.php	(revision 1280)
@@ -0,0 +1,205 @@
+<?php
+# Copyright (C) 2004 Brion Vibber <brion@pobox.com>
+# http://www.mediawiki.org/
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+# http://www.gnu.org/copyleft/gpl.html
+
+/**
+ * Search engine hook base class for MySQL.
+ * Specific bits for MySQL 3 and 4 variants are in child classes.
+ * @addtogroup Search
+ */
+class SearchMySQL extends SearchEngine {
+	/**
+	 * Perform a full text search query and return a result set.
+	 *
+	 * @param string $term - Raw search term
+	 * @return MySQLSearchResultSet
+	 * @access public
+	 */
+	function searchText( $term ) {
+		$resultSet = $this->db->resultObject( $this->db->query( $this->getQuery( $this->filter( $term ), true ) ) );
+		return new MySQLSearchResultSet( $resultSet, $this->searchTerms );
+	}
+
+	/**
+	 * Perform a title-only search query and return a result set.
+	 *
+	 * @param string $term - Raw search term
+	 * @return MySQLSearchResultSet
+	 * @access public
+	 */
+	function searchTitle( $term ) {
+		$resultSet = $this->db->resultObject( $this->db->query( $this->getQuery( $this->filter( $term ), false ) ) );
+		return new MySQLSearchResultSet( $resultSet, $this->searchTerms );
+	}
+
+
+	/**
+	 * Return a partial WHERE clause to exclude redirects, if so set
+	 * @return string
+	 * @private
+	 */
+	function queryRedirect() {
+		if( $this->showRedirects ) {
+			return '';
+		} else {
+			return 'AND page_is_redirect=0';
+		}
+	}
+
+	/**
+	 * Return a partial WHERE clause to limit the search to the given namespaces
+	 * @return string
+	 * @private
+	 */
+	function queryNamespaces() {
+		$namespaces = implode( ',', $this->namespaces );
+		if ($namespaces == '') {
+			$namespaces = '0';
+		}
+		return 'AND page_namespace IN (' . $namespaces . ')';
+	}
+
+	/**
+	 * Return a LIMIT clause to limit results on the query.
+	 * @return string
+	 * @private
+	 */
+	function queryLimit() {
+		return $this->db->limitResult( '', $this->limit, $this->offset );
+	}
+
+	/**
+	 * Does not do anything for generic search engine
+	 * subclasses may define this though
+	 * @return string
+	 * @private
+	 */
+	function queryRanking( $filteredTerm, $fulltext ) {
+		return '';
+	}
+
+	/**
+	 * Construct the full SQL query to do the search.
+	 * The guts shoulds be constructed in queryMain()
+	 * @param string $filteredTerm
+	 * @param bool $fulltext
+	 * @private
+	 */
+	function getQuery( $filteredTerm, $fulltext ) {
+		return $this->queryMain( $filteredTerm, $fulltext ) . ' ' .
+			$this->queryRedirect() . ' ' .
+			$this->queryNamespaces() . ' ' .
+			$this->queryRanking( $filteredTerm, $fulltext ) . ' ' .
+			$this->queryLimit();
+	}
+
+
+	/**
+	 * Picks which field to index on, depending on what type of query.
+	 * @param bool $fulltext
+	 * @return string
+	 */
+	function getIndexField( $fulltext ) {
+		return $fulltext ? 'si_text' : 'si_title';
+	}
+
+	/**
+	 * Get the base part of the search query.
+	 * The actual match syntax will depend on the server
+	 * version; MySQL 3 and MySQL 4 have different capabilities
+	 * in their fulltext search indexes.
+	 *
+	 * @param string $filteredTerm
+	 * @param bool $fulltext
+	 * @return string
+	 * @private
+	 */
+	function queryMain( $filteredTerm, $fulltext ) {
+		$match = $this->parseQuery( $filteredTerm, $fulltext );
+		$page        = $this->db->tableName( 'page' );
+		$searchindex = $this->db->tableName( 'searchindex' );
+		return 'SELECT page_id, page_namespace, page_title ' .
+			"FROM $page,$searchindex " .
+			'WHERE page_id=si_page AND ' . $match;
+	}
+
+	/**
+	 * Create or update the search index record for the given page.
+	 * Title and text should be pre-processed.
+	 *
+	 * @param int $id
+	 * @param string $title
+	 * @param string $text
+	 */
+	function update( $id, $title, $text ) {
+		$dbw = wfGetDB( DB_MASTER );
+		$dbw->replace( 'searchindex',
+			array( 'si_page' ),
+			array(
+				'si_page' => $id,
+				'si_title' => $title,
+				'si_text' => $text
+			), 'SearchMySQL4::update' );
+	}
+
+	/**
+	 * Update a search index record's title only.
+	 * Title should be pre-processed.
+	 *
+	 * @param int $id
+	 * @param string $title
+	 */
+    function updateTitle( $id, $title ) {
+		$dbw = wfGetDB( DB_MASTER );
+
+		$dbw->update( 'searchindex',
+			array( 'si_title' => $title ),
+			array( 'si_page'  => $id ),
+			'SearchMySQL4::updateTitle',
+			array( $dbw->lowPriorityOption() ) );
+	}
+}
+
+/**
+ * @addtogroup Search
+ */
+class MySQLSearchResultSet extends SearchResultSet {
+	function MySQLSearchResultSet( $resultSet, $terms ) {
+		$this->mResultSet = $resultSet;
+		$this->mTerms = $terms;
+	}
+
+	function termMatches() {
+		return $this->mTerms;
+	}
+
+	function numRows() {
+		return $this->mResultSet->numRows();
+	}
+
+	function next() {
+		$row = $this->mResultSet->fetchObject();
+		if( $row === false ) {
+			return false;
+		} else {
+			return new SearchResult( $row );
+		}
+	}
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/SearchMySQL4.php
===================================================================
--- /MediaWiki/branches/1.11/includes/SearchMySQL4.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/SearchMySQL4.php	(revision 1280)
@@ -0,0 +1,68 @@
+<?php
+# Copyright (C) 2004 Brion Vibber <brion@pobox.com>
+# http://www.mediawiki.org/
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+# http://www.gnu.org/copyleft/gpl.html
+
+/**
+ * Search engine hook for MySQL 4+
+ * @addtogroup Search
+ */
+class SearchMySQL4 extends SearchMySQL {
+	var $strictMatching = true;
+
+	/** @todo document */
+	function SearchMySQL4( $db ) {
+		$this->db = $db;
+	}
+
+	/** @todo document */
+	function parseQuery( $filteredText, $fulltext ) {
+		global $wgContLang;
+		$lc = SearchEngine::legalSearchChars();
+		$searchon = '';
+		$this->searchTerms = array();
+
+		# FIXME: This doesn't handle parenthetical expressions.
+		$m = array();
+		if( preg_match_all( '/([-+<>~]?)(([' . $lc . ']+)(\*?)|"[^"]*")/',
+			  $filteredText, $m, PREG_SET_ORDER ) ) {
+			foreach( $m as $terms ) {
+				if( $searchon !== '' ) $searchon .= ' ';
+				if( $this->strictMatching && ($terms[1] == '') ) {
+					$terms[1] = '+';
+				}
+				$searchon .= $terms[1] . $wgContLang->stripForSearch( $terms[2] );
+				if( !empty( $terms[3] ) ) {
+					$regexp = preg_quote( $terms[3], '/' );
+					if( $terms[4] ) $regexp .= "[0-9A-Za-z_]+";
+				} else {
+					$regexp = preg_quote( str_replace( '"', '', $terms[2] ), '/' );
+				}
+				$this->searchTerms[] = $regexp;
+			}
+			wfDebug( "Would search with '$searchon'\n" );
+			wfDebug( 'Match with /\b' . implode( '\b|\b', $this->searchTerms ) . "\b/\n" );
+		} else {
+			wfDebug( "Can't understand search query '{$filteredText}'\n" );
+		}
+
+		$searchon = $this->db->strencode( $searchon );
+		$field = $this->getIndexField( $fulltext );
+		return " MATCH($field) AGAINST('$searchon' IN BOOLEAN MODE) ";
+	}
+}
+?>
Index: /MediaWiki/branches/1.11/includes/SearchOracle.php
===================================================================
--- /MediaWiki/branches/1.11/includes/SearchOracle.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/SearchOracle.php	(revision 1280)
@@ -0,0 +1,235 @@
+<?php
+# Copyright (C) 2004 Brion Vibber <brion@pobox.com>
+# http://www.mediawiki.org/
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+# http://www.gnu.org/copyleft/gpl.html
+
+/**
+ * Search engine hook base class for Oracle (ConText).
+ * @addtogroup Search
+ */
+class SearchOracle extends SearchEngine {
+	function __construct($db) {
+		$this->db = $db;
+	}
+
+	/**
+	 * Perform a full text search query and return a result set.
+	 *
+	 * @param string $term - Raw search term
+	 * @return OracleSearchResultSet
+	 * @access public
+	 */
+	function searchText( $term ) {
+		$resultSet = $this->db->resultObject($this->db->query($this->getQuery($this->filter($term), true)));
+		return new OracleSearchResultSet($resultSet, $this->searchTerms);
+	}
+
+	/**
+	 * Perform a title-only search query and return a result set.
+	 *
+	 * @param string $term - Raw search term
+	 * @return ORacleSearchResultSet
+	 * @access public
+	 */
+	function searchTitle($term) {
+		$resultSet = $this->db->resultObject($this->db->query($this->getQuery($this->filter($term), false)));
+		return new MySQLSearchResultSet($resultSet, $this->searchTerms);
+	}
+
+
+	/**
+	 * Return a partial WHERE clause to exclude redirects, if so set
+	 * @return string
+	 * @private
+	 */
+	function queryRedirect() {
+		if ($this->showRedirects) {
+			return '';
+		} else {
+			return 'AND page_is_redirect=0';
+		}
+	}
+
+	/**
+	 * Return a partial WHERE clause to limit the search to the given namespaces
+	 * @return string
+	 * @private
+	 */
+	function queryNamespaces() {
+		$namespaces = implode(',', $this->namespaces);
+		if ($namespaces == '') {
+			$namespaces = '0';
+		}
+		return 'AND page_namespace IN (' . $namespaces . ')';
+	}
+
+	/**
+	 * Return a LIMIT clause to limit results on the query.
+	 * @return string
+	 * @private
+	 */
+	function queryLimit($sql) {
+		return $this->db->limitResult($sql, $this->limit, $this->offset);
+	}
+
+	/**
+	 * Does not do anything for generic search engine
+	 * subclasses may define this though
+	 * @return string
+	 * @private
+	 */
+	function queryRanking($filteredTerm, $fulltext) {
+		return ' ORDER BY score(1)';
+	}
+
+	/**
+	 * Construct the full SQL query to do the search.
+	 * The guts shoulds be constructed in queryMain()
+	 * @param string $filteredTerm
+	 * @param bool $fulltext
+	 * @private
+	 */
+	function getQuery( $filteredTerm, $fulltext ) {
+		return $this->queryLimit($this->queryMain($filteredTerm, $fulltext) . ' ' .
+			$this->queryRedirect() . ' ' .
+			$this->queryNamespaces() . ' ' .
+			$this->queryRanking( $filteredTerm, $fulltext ) . ' ');
+	}
+
+
+	/**
+	 * Picks which field to index on, depending on what type of query.
+	 * @param bool $fulltext
+	 * @return string
+	 */
+	function getIndexField($fulltext) {
+		return $fulltext ? 'si_text' : 'si_title';
+	}
+
+	/**
+	 * Get the base part of the search query.
+	 *
+	 * @param string $filteredTerm
+	 * @param bool $fulltext
+	 * @return string
+	 * @private
+	 */
+	function queryMain( $filteredTerm, $fulltext ) {
+		$match = $this->parseQuery($filteredTerm, $fulltext);
+		$page        = $this->db->tableName('page');
+		$searchindex = $this->db->tableName('searchindex');
+		return 'SELECT page_id, page_namespace, page_title ' .
+			"FROM $page,$searchindex " .
+			'WHERE page_id=si_page AND ' . $match;
+	}
+
+	/** @todo document */
+	function parseQuery($filteredText, $fulltext) {
+		global $wgContLang;
+		$lc = SearchEngine::legalSearchChars();
+		$this->searchTerms = array();
+
+		# FIXME: This doesn't handle parenthetical expressions.
+		$m = array();
+		$q = array();
+
+		if (preg_match_all('/([-+<>~]?)(([' . $lc . ']+)(\*?)|"[^"]*")/',
+			  $filteredText, $m, PREG_SET_ORDER)) {
+			foreach($m as $terms) {
+				$q[] = $terms[1] . $wgContLang->stripForSearch($terms[2]);
+
+				if (!empty($terms[3])) {
+					$regexp = preg_quote( $terms[3], '/' );
+					if ($terms[4])
+						$regexp .= "[0-9A-Za-z_]+";
+				} else {
+					$regexp = preg_quote(str_replace('"', '', $terms[2]), '/');
+				}
+				$this->searchTerms[] = $regexp;
+			}
+		}
+
+		$searchon = $this->db->strencode(join(',', $q));
+		$field = $this->getIndexField($fulltext);
+		return " CONTAINS($field, '$searchon', 1) > 0 ";
+	}
+
+	/**
+	 * Create or update the search index record for the given page.
+	 * Title and text should be pre-processed.
+	 *
+	 * @param int $id
+	 * @param string $title
+	 * @param string $text
+	 */
+	function update($id, $title, $text) {
+		$dbw = wfGetDB(DB_MASTER);
+		$dbw->replace('searchindex',
+			array('si_page'),
+			array(
+				'si_page' => $id,
+				'si_title' => $title,
+				'si_text' => $text
+			), 'SearchOracle::update' );
+		$dbw->query("CALL ctx_ddl.sync_index('si_text_idx')");
+		$dbw->query("CALL ctx_ddl.sync_index('si_title_idx')");
+	}
+
+	/**
+	 * Update a search index record's title only.
+	 * Title should be pre-processed.
+	 *
+	 * @param int $id
+	 * @param string $title
+	 */
+	function updateTitle($id, $title) {
+		$dbw = wfGetDB(DB_MASTER);
+
+		$dbw->update('searchindex',
+			array('si_title' => $title),
+			array('si_page'  => $id),
+			'SearchOracle::updateTitle',
+			array());
+	}
+}
+
+/**
+ * @addtogroup Search
+ */
+class OracleSearchResultSet extends SearchResultSet {
+	function __construct($resultSet, $terms) {
+		$this->mResultSet = $resultSet;
+		$this->mTerms = $terms;
+	}
+
+	function termMatches() {
+		return $this->mTerms;
+	}
+
+	function numRows() {
+		return $this->mResultSet->numRows();
+	}
+
+	function next() {
+		$row = $this->mResultSet->fetchObject();
+		if ($row === false)
+			return false;
+		return new SearchResult($row);
+	}
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/SearchPostgres.php
===================================================================
--- /MediaWiki/branches/1.11/includes/SearchPostgres.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/SearchPostgres.php	(revision 1280)
@@ -0,0 +1,235 @@
+<?php
+# Copyright (C) 2006-2007 Greg Sabino Mullane <greg@turnstep.com>
+# http://www.mediawiki.org/
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+# http://www.gnu.org/copyleft/gpl.html
+
+/**
+ * Search engine hook base class for Postgres
+ * @addtogroup Search
+ */
+class SearchPostgres extends SearchEngine {
+
+	function SearchPostgres( $db ) {
+		$this->db = $db;
+	}
+
+	/**
+	 * Perform a full text search query via tsearch2 and return a result set.
+	 * Currently searches a page's current title (page.page_title) and 
+	 * latest revision article text (pagecontent.old_text)
+	 *
+	 * @param string $term - Raw search term
+	 * @return PostgresSearchResultSet
+	 * @access public
+	 */
+	function searchTitle( $term ) {
+		$resultSet = $this->db->resultObject( $this->db->query( $this->searchQuery( $term , 'titlevector', 'page_title' )));
+		return new PostgresSearchResultSet( $resultSet, $this->searchTerms );
+	}
+	function searchText( $term ) {
+		$resultSet = $this->db->resultObject( $this->db->query( $this->searchQuery( $term, 'textvector', 'old_text' )));
+		return new PostgresSearchResultSet( $resultSet, $this->searchTerms );
+	}
+
+
+	/*
+	 * Transform the user's search string into a better form for tsearch2
+	*/
+	function parseQuery( $term ) {
+
+		wfDebug( "parseQuery received: $term" );
+
+		## No backslashes allowed
+		$term = preg_replace('/\\\/', '', $term);
+
+		## Collapse parens into nearby words:
+		$term = preg_replace('/\s*\(\s*/', ' (', $term);
+		$term = preg_replace('/\s*\)\s*/', ') ', $term);
+
+		## Treat colons as word separators:
+		$term = preg_replace('/:/', ' ', $term);
+
+		$searchstring = '';
+		if( preg_match_all('/([-!]?)(\S+)\s*/', $term, $m, PREG_SET_ORDER ) ) {
+			foreach( $m as $terms ) {
+				if (strlen($terms[1])) {
+					$searchstring .= ' & !';
+				}
+				if (strtolower($terms[2]) === 'and') {
+					$searchstring .= ' & ';
+				}
+				else if (strtolower($terms[2]) === 'or' or $terms[2] === '|') {
+					$searchstring .= ' | ';
+				}
+				else if (strtolower($terms[2]) === 'not') {
+					$searchstring .= ' & !';
+				}
+				else {
+					$searchstring .= " & $terms[2]";
+				}
+			}
+		}
+
+		## Strip out leading junk
+		$searchstring = preg_replace('/^[\s\&\|]+/', '', $searchstring);
+
+		## Remove any doubled-up operators
+		$searchstring = preg_replace('/([\!\&\|]) +(?:[\&\|] +)+/', "$1 ", $searchstring);
+
+		## Remove any non-spaced operators (e.g. "Zounds!")
+		$searchstring = preg_replace('/([^ ])[\!\&\|]/', "$1", $searchstring);
+
+		## Remove any trailing whitespace or operators
+		$searchstring = preg_replace('/[\s\!\&\|]+$/', '', $searchstring);
+
+		## Remove unnecessary quotes around everything
+		$searchstring = preg_replace('/^[\'"](.*)[\'"]$/', "$1", $searchstring);
+
+		## Quote the whole thing
+		$searchstring = $this->db->addQuotes($searchstring);
+
+		wfDebug( "parseQuery returned: $searchstring" );
+
+		return $searchstring;
+
+	}
+
+	/**
+	 * Construct the full SQL query to do the search.
+	 * @param string $filteredTerm
+	 * @param string $fulltext
+	 * @private
+	 */
+	function searchQuery( $term, $fulltext, $colname ) {
+		global $wgDBversion;
+
+		if ( !isset( $wgDBversion ) ) {
+			$this->db->getServerVersion();
+			$wgDBversion = $this->db->numeric_version;
+		}
+
+		$searchstring = $this->parseQuery( $term );
+
+		## We need a separate query here so gin does not complain about empty searches
+		$SQL = "SELECT to_tsquery('default',$searchstring)";
+		$res = $this->db->doQuery($SQL);
+		if (!$res) {
+			## TODO: Better output (example to catch: one 'two)
+			die ("Sorry, that was not a valid search string. Please go back and try again");
+		}
+		$top = pg_fetch_result($res,0,0);
+
+		if ($top === "") { ## e.g. if only stopwords are used XXX return something better
+			$query = "SELECT page_id, page_namespace, page_title, 0 AS score ".
+				"FROM page p, revision r, pagecontent c WHERE p.page_latest = r.rev_id " .
+				"AND r.rev_text_id = c.old_id AND 1=0";
+		}
+		else {
+			$m = array();
+			if( preg_match_all("/'([^']+)'/", $top, $m, PREG_SET_ORDER ) ) {
+				foreach( $m as $terms ) {
+					$this->searchTerms[$terms[1]] = $terms[1];
+				}
+			}
+
+			$rankscore = $wgDBversion > 8.2 ? 5 : 1;
+			$query = "SELECT page_id, page_namespace, page_title, ".
+			"rank($fulltext, to_tsquery('default',$searchstring), $rankscore) AS score ".
+			"FROM page p, revision r, pagecontent c WHERE p.page_latest = r.rev_id " .
+			"AND r.rev_text_id = c.old_id AND $fulltext @@ to_tsquery('default',$searchstring)";
+		}
+
+		## Redirects
+		if (! $this->showRedirects)
+			$query .= ' AND page_is_redirect = 0'; ## IS FALSE
+
+		## Namespaces - defaults to 0
+		if ( count($this->namespaces) < 1)
+			$query .= ' AND page_namespace = 0';
+		else {
+			$namespaces = implode( ',', $this->namespaces );
+			$query .= " AND page_namespace IN ($namespaces)";
+		}
+
+		$query .= " ORDER BY score DESC, page_id DESC";
+
+		$query .= $this->db->limitResult( '', $this->limit, $this->offset );
+
+		wfDebug( "searchQuery returned: $query" );
+
+		return $query;
+	}
+
+	## Most of the work of these two functions are done automatically via triggers
+
+	function update( $pageid, $title, $text ) {
+		## We don't want to index older revisions
+		$SQL = "UPDATE pagecontent SET textvector = NULL WHERE old_id = ".
+				"(SELECT rev_text_id FROM revision WHERE rev_page = $pageid ".
+				"ORDER BY rev_text_id DESC LIMIT 1 OFFSET 1)";
+		$this->db->doQuery($SQL);
+		return true;
+	}
+
+	function updateTitle( $id, $title ) {
+		return true;
+	}
+
+} ## end of the SearchPostgres class
+
+/**
+ * @addtogroup Search
+ */
+class PostgresSearchResult extends SearchResult {
+	function PostgresSearchResult( $row ) {
+		$this->mTitle = Title::makeTitle( $row->page_namespace, $row->page_title );
+		$this->score = $row->score;
+	}
+	function getScore() {
+		return $this->score;
+	}
+}
+
+/**
+ * @addtogroup Search
+ */
+class PostgresSearchResultSet extends SearchResultSet {
+	function PostgresSearchResultSet( $resultSet, $terms ) {
+		$this->mResultSet = $resultSet;
+		$this->mTerms = $terms;
+	}
+
+	function termMatches() {
+		return $this->mTerms;
+	}
+
+	function numRows() {
+		return $this->mResultSet->numRows();
+	}
+
+	function next() {
+		$row = $this->mResultSet->fetchObject();
+		if( $row === false ) {
+			return false;
+		} else {
+			return new PostgresSearchResult( $row );
+		}
+	}
+}
+
+
+?>
Index: /MediaWiki/branches/1.11/includes/SearchTsearch2.php
===================================================================
--- /MediaWiki/branches/1.11/includes/SearchTsearch2.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/SearchTsearch2.php	(revision 1280)
@@ -0,0 +1,122 @@
+<?php
+# Copyright (C) 2004 Brion Vibber <brion@pobox.com>, Domas Mituzas <domas.mituzas@gmail.com>
+# http://www.mediawiki.org/
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+# http://www.gnu.org/copyleft/gpl.html
+
+/**
+ * Search engine hook for PostgreSQL / Tsearch2
+ * @addtogroup Search
+ */
+
+/**
+ * @todo document
+ * @addtogroup Search
+ */
+class SearchTsearch2 extends SearchEngine {
+	var $strictMatching = false;
+
+	function SearchTsearch2( &$db ) {
+		$this->db =& $db;
+		$this->mRanking = true;
+	}
+
+	function getIndexField( $fulltext ) {
+		return $fulltext ? 'si_text' : 'si_title';
+	}
+
+	function parseQuery( $filteredText, $fulltext ) {
+		global $wgContLang;
+		$lc = SearchEngine::legalSearchChars();
+		$searchon = '';
+		$this->searchTerms = array();
+
+		# FIXME: This doesn't handle parenthetical expressions.
+		$m = array();
+		if( preg_match_all( '/([-+<>~]?)(([' . $lc . ']+)(\*?)|"[^"]*")/',
+			  $filteredText, $m, PREG_SET_ORDER ) ) {
+			foreach( $m as $terms ) {
+				if( $searchon !== '' ) $searchon .= ' ';
+				if( $this->strictMatching && ($terms[1] == '') ) {
+					$terms[1] = '+';
+				}
+				$searchon .= $terms[1] . $wgContLang->stripForSearch( $terms[2] );
+				if( !empty( $terms[3] ) ) {
+					$regexp = preg_quote( $terms[3], '/' );
+					if( $terms[4] ) $regexp .= "[0-9A-Za-z_]+";
+				} else {
+					$regexp = preg_quote( str_replace( '"', '', $terms[2] ), '/' );
+				}
+				$this->searchTerms[] = $regexp;
+			}
+			wfDebug( "Would search with '$searchon'\n" );
+			wfDebug( 'Match with /\b' . implode( '\b|\b', $this->searchTerms ) . "\b/\n" );
+		} else {
+			wfDebug( "Can't understand search query '{$this->filteredText}'\n" );
+		}
+
+		$searchon = preg_replace('/(\s+)/','&',$searchon);
+		$searchon = $this->db->strencode( $searchon );
+		return $searchon;
+	}
+
+	function queryRanking($filteredTerm, $fulltext) {
+		$field = $this->getIndexField( $fulltext );
+		$searchon = $this->parseQuery($filteredTerm,$fulltext);
+		if ($this->mRanking)
+			return " ORDER BY rank($field,to_tsquery('$searchon')) DESC";
+		else
+			return "";
+	}
+
+
+	function queryMain( $filteredTerm, $fulltext ) {
+		$match = $this->parseQuery( $filteredTerm, $fulltext );
+		$field = $this->getIndexField( $fulltext );
+		$cur = $this->db->tableName( 'cur' );
+		$searchindex = $this->db->tableName( 'searchindex' );
+		return 'SELECT cur_id, cur_namespace, cur_title, cur_text ' .
+			"FROM $cur,$searchindex " .
+			'WHERE cur_id=si_page AND ' .
+			" $field @@ to_tsquery ('$match') " ;
+	}
+
+	function update( $id, $title, $text ) {
+		$dbw = wfGetDB(DB_MASTER);
+		$searchindex = $dbw->tableName( 'searchindex' );
+		$sql = "DELETE FROM $searchindex WHERE si_page={$id}";
+		$dbw->query($sql,"SearchTsearch2:update");
+		$sql = "INSERT INTO $searchindex (si_page,si_title,si_text) ".
+			" VALUES ( $id, to_tsvector('".
+				$dbw->strencode($title).
+				"'),to_tsvector('".
+				$dbw->strencode( $text)."')) ";
+		$dbw->query($sql,"SearchTsearch2:update");
+	}
+
+	function updateTitle($id,$title) {
+		$dbw = wfGetDB(DB_MASTER);
+		$searchindex = $dbw->tableName( 'searchindex' );
+		$sql = "UPDATE $searchindex SET si_title=to_tsvector('" .
+				$dbw->strencode( $title ) .
+				"') WHERE si_page={$id}";
+
+		$dbw->query( $sql, "SearchMySQL4::updateTitle" );
+	}
+
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/SearchUpdate.php
===================================================================
--- /MediaWiki/branches/1.11/includes/SearchUpdate.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/SearchUpdate.php	(revision 1280)
@@ -0,0 +1,115 @@
+<?php
+/**
+ * See deferred.txt
+ * @addtogroup Search
+ */
+class SearchUpdate {
+
+	/* private */ var $mId = 0, $mNamespace, $mTitle, $mText;
+	/* private */ var $mTitleWords;
+
+	function SearchUpdate( $id, $title, $text = false ) {
+		$nt = Title::newFromText( $title );
+		if( $nt ) {
+			$this->mId = $id;
+			$this->mText = $text;
+
+			$this->mNamespace = $nt->getNamespace();
+			$this->mTitle = $nt->getText(); # Discard namespace
+
+			$this->mTitleWords = $this->mTextWords = array();
+		} else {
+			wfDebug( "SearchUpdate object created with invalid title '$title'\n" );
+		}
+	}
+
+	function doUpdate() {
+		global $wgContLang, $wgDisableSearchUpdate;
+
+		if( $wgDisableSearchUpdate || !$this->mId ) {
+			return false;
+		}
+		$fname = 'SearchUpdate::doUpdate';
+		wfProfileIn( $fname );
+
+		$search = SearchEngine::create();
+		$lc = SearchEngine::legalSearchChars() . '&#;';
+
+		if( $this->mText === false ) {
+			$search->updateTitle($this->mId,
+				Title::indexTitle( $this->mNamespace, $this->mTitle ));
+			wfProfileOut( $fname );
+			return;
+		}
+
+		# Language-specific strip/conversion
+		$text = $wgContLang->stripForSearch( $this->mText );
+
+		wfProfileIn( $fname.'-regexps' );
+		$text = preg_replace( "/<\\/?\\s*[A-Za-z][A-Za-z0-9]*\\s*([^>]*?)>/",
+		  ' ', strtolower( " " . $text /*$this->mText*/ . " " ) ); # Strip HTML markup
+		$text = preg_replace( "/(^|\\n)==\\s*([^\\n]+)\\s*==(\\s)/sD",
+		  "\\1\\2 \\2 \\2\\3", $text ); # Emphasize headings
+
+		# Strip external URLs
+		$uc = "A-Za-z0-9_\\/:.,~%\\-+&;#?!=()@\\xA0-\\xFF";
+		$protos = "http|https|ftp|mailto|news|gopher";
+		$pat = "/(^|[^\\[])({$protos}):[{$uc}]+([^{$uc}]|$)/";
+		$text = preg_replace( $pat, "\\1 \\3", $text );
+
+		$p1 = "/([^\\[])\\[({$protos}):[{$uc}]+]/";
+		$p2 = "/([^\\[])\\[({$protos}):[{$uc}]+\\s+([^\\]]+)]/";
+		$text = preg_replace( $p1, "\\1 ", $text );
+		$text = preg_replace( $p2, "\\1 \\3 ", $text );
+
+		# Internal image links
+		$pat2 = "/\\[\\[image:([{$uc}]+)\\.(gif|png|jpg|jpeg)([^{$uc}])/i";
+		$text = preg_replace( $pat2, " \\1 \\3", $text );
+
+		$text = preg_replace( "/([^{$lc}])([{$lc}]+)]]([a-z]+)/",
+		  "\\1\\2 \\2\\3", $text ); # Handle [[game]]s
+
+		# Strip all remaining non-search characters
+		$text = preg_replace( "/[^{$lc}]+/", " ", $text );
+
+		# Handle 's, s'
+		#
+		#   $text = preg_replace( "/([{$lc}]+)'s /", "\\1 \\1's ", $text );
+		#   $text = preg_replace( "/([{$lc}]+)s' /", "\\1s ", $text );
+		#
+		# These tail-anchored regexps are insanely slow. The worst case comes
+		# when Japanese or Chinese text (ie, no word spacing) is written on
+		# a wiki configured for Western UTF-8 mode. The Unicode characters are
+		# expanded to hex codes and the "words" are very long paragraph-length
+		# monstrosities. On a large page the above regexps may take over 20
+		# seconds *each* on a 1GHz-level processor.
+		#
+		# Following are reversed versions which are consistently fast
+		# (about 3 milliseconds on 1GHz-level processor).
+		#
+		$text = strrev( preg_replace( "/ s'([{$lc}]+)/", " s'\\1 \\1", strrev( $text ) ) );
+		$text = strrev( preg_replace( "/ 's([{$lc}]+)/", " s\\1", strrev( $text ) ) );
+
+		# Strip wiki '' and '''
+		$text = preg_replace( "/''[']*/", " ", $text );
+		wfProfileOut( "$fname-regexps" );
+
+		wfRunHooks( 'SearchUpdate', array( $this->mId, $this->mNamespace, $this->mTitle, &$text ) );
+		
+		# Perform the actual update
+		$search->update($this->mId, Title::indexTitle( $this->mNamespace, $this->mTitle ),
+				$text);
+		
+		wfProfileOut( $fname );
+	}
+}
+
+/**
+ * Placeholder class
+ * @addtogroup Search
+ */
+class SearchUpdateMyISAM extends SearchUpdate {
+	# Inherits everything
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/Setup.php
===================================================================
--- /MediaWiki/branches/1.11/includes/Setup.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/Setup.php	(revision 1280)
@@ -0,0 +1,235 @@
+<?php
+/**
+ * Include most things that's need to customize the site
+ */
+
+/**
+ * This file is not a valid entry point, perform no further processing unless
+ * MEDIAWIKI is defined
+ */
+if( !defined( 'MEDIAWIKI' ) ) {
+	echo "This file is part of MediaWiki, it is not a valid entry point.\n";
+	exit( 1 );
+}	
+
+# The main wiki script and things like database
+# conversion and maintenance scripts all share a
+# common setup of including lots of classes and
+# setting up a few globals.
+#
+
+$fname = 'Setup.php';
+wfProfileIn( $fname );
+
+// Check to see if we are at the file scope
+if ( !isset( $wgVersion ) ) {
+	echo "Error, Setup.php must be included from the file scope, after DefaultSettings.php\n";
+	die( 1 );
+}
+
+// Set various default paths sensibly...
+if( $wgScript === false ) $wgScript = "$wgScriptPath/index.php";
+if( $wgRedirectScript === false ) $wgRedirectScript = "$wgScriptPath/redirect.php";
+
+if( $wgArticlePath === false ) {
+	if( $wgUsePathInfo ) {
+		$wgArticlePath      = "$wgScript/$1";
+	} else {
+		$wgArticlePath      = "$wgScript?title=$1";
+	}
+}
+
+if( $wgStylePath === false ) $wgStylePath = "$wgScriptPath/skins";
+if( $wgStyleDirectory === false) $wgStyleDirectory   = "$IP/skins";
+
+if( $wgLogo === false ) $wgLogo = "$wgStylePath/common/images/wiki.png";
+
+if( $wgUploadPath === false ) $wgUploadPath = "$wgScriptPath/images";
+if( $wgUploadDirectory === false ) $wgUploadDirectory = "$IP/images";
+
+if( $wgMathPath === false ) $wgMathPath = "{$wgUploadPath}/math";
+if( $wgMathDirectory === false ) $wgMathDirectory = "{$wgUploadDirectory}/math";
+if( $wgTmpDirectory === false ) $wgTmpDirectory = "{$wgUploadDirectory}/tmp";
+
+if( $wgReadOnlyFile === false ) $wgReadOnlyFile = "{$wgUploadDirectory}/lock_yBgMBwiR";
+if( $wgFileCacheDirectory === false ) $wgFileCacheDirectory = "{$wgUploadDirectory}/cache";
+
+require_once( "$IP/includes/AutoLoader.php" );
+
+wfProfileIn( $fname.'-exception' );
+require_once( "$IP/includes/Exception.php" );
+wfInstallExceptionHandler();
+wfProfileOut( $fname.'-exception' );
+
+wfProfileIn( $fname.'-includes' );
+require_once( "$IP/includes/GlobalFunctions.php" );
+require_once( "$IP/includes/Hooks.php" );
+require_once( "$IP/includes/Namespace.php" );
+require_once( "$IP/includes/ProxyTools.php" );
+require_once( "$IP/includes/ObjectCache.php" );
+require_once( "$IP/includes/ImageFunctions.php" );
+require_once( "$IP/includes/StubObject.php" );
+wfProfileOut( $fname.'-includes' );
+wfProfileIn( $fname.'-misc1' );
+
+
+$wgIP = false; # Load on demand
+# Can't stub this one, it sets up $_GET and $_REQUEST in its constructor
+$wgRequest = new WebRequest;
+if ( function_exists( 'posix_uname' ) ) {
+	$wguname = posix_uname();
+	$wgNodeName = $wguname['nodename'];
+} else {
+	$wgNodeName = '';
+}
+
+# Useful debug output
+if ( $wgCommandLineMode ) {
+	wfDebug( "\n\nStart command line script $self\n" );
+} elseif ( function_exists( 'getallheaders' ) ) {
+	wfDebug( "\n\nStart request\n" );
+	wfDebug( $_SERVER['REQUEST_METHOD'] . ' ' . $_SERVER['REQUEST_URI'] . "\n" );
+	$headers = getallheaders();
+	foreach ($headers as $name => $value) {
+		wfDebug( "$name: $value\n" );
+	}
+	wfDebug( "\n" );
+} elseif( isset( $_SERVER['REQUEST_URI'] ) ) {
+	wfDebug( $_SERVER['REQUEST_METHOD'] . ' ' . $_SERVER['REQUEST_URI'] . "\n" );
+}
+
+if ( $wgSkipSkin ) {
+	$wgSkipSkins[] = $wgSkipSkin;
+}
+
+$wgUseEnotif = $wgEnotifUserTalk || $wgEnotifWatchlist;
+
+if($wgMetaNamespace === FALSE) {
+	$wgMetaNamespace = str_replace( ' ', '_', $wgSitename );
+}
+
+# These are now the same, always
+# To determine the user language, use $wgLang->getCode()
+$wgContLanguageCode = $wgLanguageCode;
+
+wfProfileOut( $fname.'-misc1' );
+wfProfileIn( $fname.'-memcached' );
+
+$wgMemc =& wfGetMainCache();
+$messageMemc =& wfGetMessageCacheStorage();
+$parserMemc =& wfGetParserCacheStorage();
+
+wfDebug( 'Main cache: ' . get_class( $wgMemc ) .
+       "\nMessage cache: " . get_class( $messageMemc ) .
+	   "\nParser cache: " . get_class( $parserMemc ) . "\n" );
+
+wfProfileOut( $fname.'-memcached' );
+wfProfileIn( $fname.'-SetupSession' );
+
+if ( $wgDBprefix ) {
+	$wgCookiePrefix = $wgDBname . '_' . $wgDBprefix;
+} elseif ( $wgSharedDB ) {
+	$wgCookiePrefix = $wgSharedDB;
+} else {
+	$wgCookiePrefix = $wgDBname;
+}
+$wgCookiePrefix = strtr($wgCookiePrefix, "=,; +.\"'\\[", "__________");
+
+# If session.auto_start is there, we can't touch session name
+#
+if( !ini_get( 'session.auto_start' ) )
+	session_name( $wgSessionName ? $wgSessionName : $wgCookiePrefix . '_session' );
+
+if( !$wgCommandLineMode && ( $wgRequest->checkSessionCookie() || isset( $_COOKIE[$wgCookiePrefix.'Token'] ) ) ) {
+	wfIncrStats( 'request_with_session' );
+	wfSetupSession();
+	$wgSessionStarted = true;
+} else {
+	wfIncrStats( 'request_without_session' );
+	$wgSessionStarted = false;
+}
+
+wfProfileOut( $fname.'-SetupSession' );
+wfProfileIn( $fname.'-globals' );
+
+if ( !$wgDBservers ) {
+	$wgDBservers = array(array(
+		'host' => $wgDBserver,
+		'user' => $wgDBuser,
+		'password' => $wgDBpassword,
+		'dbname' => $wgDBname,
+		'type' => $wgDBtype,
+		'load' => 1,
+		'flags' => ($wgDebugDumpSql ? DBO_DEBUG : 0) | DBO_DEFAULT
+	));
+}
+
+$wgLoadBalancer = new StubObject( 'wgLoadBalancer', 'LoadBalancer', 
+	array( $wgDBservers, false, $wgMasterWaitTimeout, true ) );
+$wgContLang = new StubContLang;
+$wgUser = new StubUser;
+$wgLang = new StubUserLang;
+$wgOut = new StubObject( 'wgOut', 'OutputPage' );
+$wgParser = new StubObject( 'wgParser', 'Parser' );
+$wgMessageCache = new StubObject( 'wgMessageCache', 'MessageCache', 
+	array( $parserMemc, $wgUseDatabaseMessages, $wgMsgCacheExpiry, wfWikiID() ) );
+
+wfProfileOut( $fname.'-globals' );
+wfProfileIn( $fname.'-User' );
+
+# Skin setup functions
+# Entries can be added to this variable during the inclusion
+# of the extension file. Skins can then perform any necessary initialisation.
+# 
+foreach ( $wgSkinExtensionFunctions as $func ) {
+	call_user_func( $func );
+}
+
+if( !is_object( $wgAuth ) ) {
+	$wgAuth = new StubObject( 'wgAuth', 'AuthPlugin' );
+	wfRunHooks( 'AuthPluginSetup', array( &$wgAuth ) );
+}
+
+wfProfileOut( $fname.'-User' );
+
+wfProfileIn( $fname.'-misc2' );
+
+$wgDeferredUpdateList = array();
+$wgPostCommitUpdateList = array();
+
+if ( $wgAjaxSearch ) $wgAjaxExportList[] = 'wfSajaxSearch';
+if ( $wgAjaxWatch ) $wgAjaxExportList[] = 'wfAjaxWatch';
+
+wfSeedRandom();
+
+# Placeholders in case of DB error
+$wgTitle = null;
+$wgArticle = null;
+
+wfProfileOut( $fname.'-misc2' );
+wfProfileIn( $fname.'-extensions' );
+
+# Extension setup functions for extensions other than skins
+# Entries should be added to this variable during the inclusion
+# of the extension file. This allows the extension to perform
+# any necessary initialisation in the fully initialised environment
+foreach ( $wgExtensionFunctions as $func ) {
+	$profName = $fname.'-extensions-'.strval( $func );
+	wfProfileIn( $profName );
+	call_user_func( $func );
+	wfProfileOut( $profName );
+}
+
+// For compatibility
+wfRunHooks( 'LogPageValidTypes', array( &$wgLogTypes ) );
+wfRunHooks( 'LogPageLogName', array( &$wgLogNames ) );
+wfRunHooks( 'LogPageLogHeader', array( &$wgLogHeaders ) );
+wfRunHooks( 'LogPageActionText', array( &$wgLogActions ) );
+
+
+wfDebug( "Fully initialised\n" );
+$wgFullyInitialised = true;
+wfProfileOut( $fname.'-extensions' );
+wfProfileOut( $fname );
+
+?>
Index: /MediaWiki/branches/1.11/includes/SiteConfiguration.php
===================================================================
--- /MediaWiki/branches/1.11/includes/SiteConfiguration.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/SiteConfiguration.php	(revision 1280)
@@ -0,0 +1,119 @@
+<?php
+
+/**
+ * The include paths change after this file is included from commandLine.inc,
+ * meaning that require_once() fails to detect that it is including the same
+ * file again. We use DIY C-style protection as a workaround.
+ */
+if (!defined('SITE_CONFIGURATION')) {
+define('SITE_CONFIGURATION', 1);
+
+/**
+ * This is a class used to hold configuration settings, particularly for multi-wiki sites.
+ *
+ */
+class SiteConfiguration {
+	var $suffixes = array();
+	var $wikis = array();
+	var $settings = array();
+	var $localVHosts = array();
+
+	/** */
+	function get( $setting, $wiki, $suffix, $params = array() ) {
+		if ( array_key_exists( $setting, $this->settings ) ) {
+			if ( array_key_exists( $wiki, $this->settings[$setting] ) ) {
+				$retval = $this->settings[$setting][$wiki];
+			} elseif ( array_key_exists( $suffix, $this->settings[$setting] ) ) {
+				$retval = $this->settings[$setting][$suffix];
+			} elseif ( array_key_exists( 'default', $this->settings[$setting] ) ) {
+				$retval = $this->settings[$setting]['default'];
+			} else {
+				$retval = NULL;
+			}
+		} else {
+			$retval = NULL;
+		}
+
+		if ( !is_null( $retval ) && count( $params ) ) {
+			foreach ( $params as $key => $value ) {
+				$retval = str_replace( '$' . $key, $value, $retval );
+			}
+		}
+		return $retval;
+	}
+
+	/** */
+	function getAll( $wiki, $suffix, $params ) {
+		$localSettings = array();
+		foreach ( $this->settings as $varname => $stuff ) {
+			$value = $this->get( $varname, $wiki, $suffix, $params );
+			if ( !is_null( $value ) ) {
+				$localSettings[$varname] = $value;
+			}
+		}
+		return $localSettings;
+	}
+
+	/** */
+	function getBool( $setting, $wiki, $suffix ) {
+		return (bool)($this->get( $setting, $wiki, $suffix ));
+	}
+
+	/** */
+	function &getLocalDatabases() {
+		return $this->wikis;
+	}
+
+	/** */
+	function initialise() {
+	}
+
+	/** */
+	function extractVar( $setting, $wiki, $suffix, &$var, $params ) {
+		$value = $this->get( $setting, $wiki, $suffix, $params );
+		if ( !is_null( $value ) ) {
+			$var = $value;
+		}
+	}
+
+	/** */
+	function extractGlobal( $setting, $wiki, $suffix, $params ) {
+		$value = $this->get( $setting, $wiki, $suffix, $params );
+		if ( !is_null( $value ) ) {
+			$GLOBALS[$setting] = $value;
+		}
+	}
+
+	/** */
+	function extractAllGlobals( $wiki, $suffix, $params ) {
+		foreach ( $this->settings as $varName => $setting ) {
+			$this->extractGlobal( $varName, $wiki, $suffix, $params );
+		}
+	}
+
+	/**
+	 * Work out the site and language name from a database name
+	 * @param $db
+	 */
+	function siteFromDB( $db ) {
+		$site = NULL;
+		$lang = NULL;
+		foreach ( $this->suffixes as $suffix ) {
+			if ( substr( $db, -strlen( $suffix ) ) == $suffix ) {
+				$site = $suffix == 'wiki' ? 'wikipedia' : $suffix;
+				$lang = substr( $db, 0, strlen( $db ) - strlen( $suffix ) );
+				break;
+			}
+		}
+		$lang = str_replace( '_', '-', $lang );
+		return array( $site, $lang );
+	}
+
+	/** */
+	function isLocalVHost( $vhost ) {
+		return in_array( $vhost, $this->localVHosts );
+	}
+}
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/SiteStats.php
===================================================================
--- /MediaWiki/branches/1.11/includes/SiteStats.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/SiteStats.php	(revision 1280)
@@ -0,0 +1,203 @@
+<?php
+
+/**
+ * Static accessor class for site_stats and related things
+ */
+class SiteStats {
+	static $row, $loaded = false;
+	static $admins;
+	static $pageCount = array();
+
+	static function recache() {
+		self::load( true );
+	}
+
+	static function load( $recache = false ) {
+		if ( self::$loaded && !$recache ) {
+			return;
+		}
+
+		self::$row = self::loadAndLazyInit();
+
+		# This code is somewhat schema-agnostic, because I'm changing it in a minor release -- TS
+		if ( !isset( self::$row->ss_total_pages ) && self::$row->ss_total_pages == -1 ) {
+			# Update schema
+			$u = new SiteStatsUpdate( 0, 0, 0 );
+			$u->doUpdate();
+			$dbr = wfGetDB( DB_SLAVE );
+			self::$row = $dbr->selectRow( 'site_stats', '*', false, __METHOD__ );
+		}
+	}
+	
+	static function loadAndLazyInit() {
+		wfDebug( __METHOD__ . ": reading site_stats from slave\n" );
+		$row = self::doLoad( wfGetDB( DB_SLAVE ) );
+		
+		if( $row === false ) {
+			// Might have just been initialzed during this request?
+			wfDebug( __METHOD__ . ": site_stats missing on slave\n" );
+			$row = self::doLoad( wfGetDB( DB_MASTER ) );
+		}
+		
+		if( $row === false ) {
+			// Normally the site_stats table is initialized at install time.
+			// Some manual construction scenarios may leave the table empty,
+			// however, for instance when importing from a dump into a clean
+			// schema with mwdumper.
+			wfDebug( __METHOD__ . ": initializing empty site_stats\n" );
+			
+			global $IP;
+			require_once "$IP/maintenance/initStats.inc";
+			
+			ob_start();
+			wfInitStats();
+			ob_end_clean();
+			
+			$row = self::doLoad( wfGetDB( DB_MASTER ) );
+		}
+		
+		if( $row === false ) {
+			wfDebug( __METHOD__ . ": init of site_stats failed o_O\n" );
+		}
+		return $row;
+	}
+
+	static function doLoad( $db ) {
+		return $db->selectRow( 'site_stats', '*', false, __METHOD__ );
+	}
+
+	static function views() {
+		self::load();
+		return self::$row->ss_total_views;
+	}
+
+	static function edits() {
+		self::load();
+		return self::$row->ss_total_edits;
+	}
+
+	static function articles() {
+		self::load();
+		return self::$row->ss_good_articles;
+	}
+
+	static function pages() {
+		self::load();
+		return self::$row->ss_total_pages;
+	}
+
+	static function users() {
+		self::load();
+		return self::$row->ss_users;
+	}
+	
+	static function images() {
+		self::load();
+		return self::$row->ss_images;
+	}
+
+	static function admins() {
+		if ( !isset( self::$admins ) ) {
+			$dbr = wfGetDB( DB_SLAVE );
+			self::$admins = $dbr->selectField( 'user_groups', 'COUNT(*)', array( 'ug_group' => 'sysop' ), __METHOD__ );
+		}
+		return self::$admins;
+	}
+
+	static function pagesInNs( $ns ) {
+		wfProfileIn( __METHOD__ );
+		if( !isset( self::$pageCount[$ns] ) ) {
+			$dbr = wfGetDB( DB_SLAVE );
+			$pageCount[$ns] = (int)$dbr->selectField( 'page', 'COUNT(*)', array( 'page_namespace' => $ns ), __METHOD__ );
+		}
+		wfProfileOut( __METHOD__ );
+		return $pageCount[$ns];
+	}
+
+}
+
+
+/**
+ *
+ */
+class SiteStatsUpdate {
+
+	var $mViews, $mEdits, $mGood, $mPages, $mUsers;
+
+	function __construct( $views, $edits, $good, $pages = 0, $users = 0 ) {
+		$this->mViews = $views;
+		$this->mEdits = $edits;
+		$this->mGood = $good;
+		$this->mPages = $pages;
+		$this->mUsers = $users;
+	}
+
+	function appendUpdate( &$sql, $field, $delta ) {
+		if ( $delta ) {
+			if ( $sql ) {
+				$sql .= ',';
+			}
+			if ( $delta < 0 ) {
+				$sql .= "$field=$field-1";
+			} else {
+				$sql .= "$field=$field+1";
+			}
+		}
+	}
+
+	function doUpdate() {
+		$fname = 'SiteStatsUpdate::doUpdate';
+		$dbw = wfGetDB( DB_MASTER );
+
+		# First retrieve the row just to find out which schema we're in
+		$row = $dbw->selectRow( 'site_stats', '*', false, $fname );
+
+		$updates = '';
+
+		$this->appendUpdate( $updates, 'ss_total_views', $this->mViews );
+		$this->appendUpdate( $updates, 'ss_total_edits', $this->mEdits );
+		$this->appendUpdate( $updates, 'ss_good_articles', $this->mGood );
+
+		if ( isset( $row->ss_total_pages ) ) {
+			# Update schema if required
+			if ( $row->ss_total_pages == -1 && !$this->mViews ) {
+				$dbr = wfGetDB( DB_SLAVE, array( 'SpecialStatistics', 'vslow') );
+				list( $page, $user ) = $dbr->tableNamesN( 'page', 'user' );
+
+				$sql = "SELECT COUNT(page_namespace) AS total FROM $page";
+				$res = $dbr->query( $sql, $fname );
+				$pageRow = $dbr->fetchObject( $res );
+				$pages = $pageRow->total + $this->mPages;
+
+				$sql = "SELECT COUNT(user_id) AS total FROM $user";
+				$res = $dbr->query( $sql, $fname );
+				$userRow = $dbr->fetchObject( $res );
+				$users = $userRow->total + $this->mUsers;
+
+				if ( $updates ) {
+					$updates .= ',';
+				}
+				$updates .= "ss_total_pages=$pages, ss_users=$users";
+			} else {
+				$this->appendUpdate( $updates, 'ss_total_pages', $this->mPages );
+				$this->appendUpdate( $updates, 'ss_users', $this->mUsers );
+			}
+		}
+		if ( $updates ) {
+			$site_stats = $dbw->tableName( 'site_stats' );
+			$sql = $dbw->limitResultForUpdate("UPDATE $site_stats SET $updates", 1);
+			$dbw->begin();
+			$dbw->query( $sql, $fname );
+			$dbw->commit();
+		}
+
+		/*
+		global $wgDBname, $wgTitle;
+		if ( $this->mGood && $wgDBname == 'enwiki' ) {
+			$good = $dbw->selectField( 'site_stats', 'ss_good_articles', '', $fname );
+			error_log( $good . ' ' . $wgTitle->getPrefixedDBkey() . "\n", 3, '/home/wikipedia/logs/million.log' );
+		}
+		*/
+	}
+}
+?>
Index: /MediaWiki/branches/1.11/includes/Skin.php
===================================================================
--- /MediaWiki/branches/1.11/includes/Skin.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/Skin.php	(revision 1280)
@@ -0,0 +1,1672 @@
+<?php
+if ( ! defined( 'MEDIAWIKI' ) )
+	die( 1 );
+
+# See skin.txt
+
+/**
+ * The main skin class that provide methods and properties for all other skins.
+ * This base class is also the "Standard" skin.
+ *
+ * See docs/skin.txt for more information.
+ *
+ * @addtogroup Skins
+ */
+class Skin extends Linker {
+	/**#@+
+	 * @private
+	 */
+	var $lastdate, $lastline;
+	var $rc_cache ; # Cache for Enhanced Recent Changes
+	var $rcCacheIndex ; # Recent Changes Cache Counter for visibility toggle
+	var $rcMoveIndex;
+	var $mWatchLinkNum = 0; // Appended to end of watch link id's
+	/**#@-*/
+	protected $skinname = 'standard' ;
+
+	/** Constructor, call parent constructor */
+	function Skin() { parent::__construct(); }
+
+	/**
+	 * Fetch the set of available skins.
+	 * @return array of strings
+	 * @static
+	 */
+	static function getSkinNames() {
+		global $wgValidSkinNames;
+		static $skinsInitialised = false;
+		if ( !$skinsInitialised ) {
+			# Get a list of available skins
+			# Build using the regular expression '^(.*).php$'
+			# Array keys are all lower case, array value keep the case used by filename
+			#
+			wfProfileIn( __METHOD__ . '-init' );
+			global $wgStyleDirectory;
+			$skinDir = dir( $wgStyleDirectory );
+
+			# while code from www.php.net
+			while (false !== ($file = $skinDir->read())) {
+				// Skip non-PHP files, hidden files, and '.dep' includes
+				$matches = array();
+				if(preg_match('/^([^.]*)\.php$/',$file, $matches)) {
+					$aSkin = $matches[1];
+					$wgValidSkinNames[strtolower($aSkin)] = $aSkin;
+				}
+			}
+			$skinDir->close();
+			$skinsInitialised = true;
+			wfProfileOut( __METHOD__ . '-init' );
+		}
+		return $wgValidSkinNames;
+	}
+
+	/**
+	 * Normalize a skin preference value to a form that can be loaded.
+	 * If a skin can't be found, it will fall back to the configured
+	 * default (or the old 'Classic' skin if that's broken).
+	 * @param string $key
+	 * @return string
+	 * @static
+	 */
+	static function normalizeKey( $key ) {
+		global $wgDefaultSkin;
+		$skinNames = Skin::getSkinNames();
+
+		if( $key == '' ) {
+			// Don't return the default immediately;
+			// in a misconfiguration we need to fall back.
+			$key = $wgDefaultSkin;
+		}
+
+		if( isset( $skinNames[$key] ) ) {
+			return $key;
+		}
+
+		// Older versions of the software used a numeric setting
+		// in the user preferences.
+		$fallback = array(
+			0 => $wgDefaultSkin,
+			1 => 'nostalgia',
+			2 => 'cologneblue' );
+
+		if( isset( $fallback[$key] ) ){
+			$key = $fallback[$key];
+		}
+
+		if( isset( $skinNames[$key] ) ) {
+			return $key;
+		} else {
+			// The old built-in skin
+			return 'standard';
+		}
+	}
+
+	/**
+	 * Factory method for loading a skin of a given type
+	 * @param string $key 'monobook', 'standard', etc
+	 * @return Skin
+	 * @static
+	 */
+	static function &newFromKey( $key ) {
+		global $wgStyleDirectory;
+		
+		$key = Skin::normalizeKey( $key );
+
+		$skinNames = Skin::getSkinNames();
+		$skinName = $skinNames[$key];
+
+		# Grab the skin class and initialise it.
+		// Preload base classes to work around APC/PHP5 bug
+		$deps = "{$wgStyleDirectory}/{$skinName}.deps.php";
+		if( file_exists( $deps ) ) include_once( $deps );
+		require_once( "{$wgStyleDirectory}/{$skinName}.php" );
+
+		# Check if we got if not failback to default skin
+		$className = 'Skin'.$skinName;
+		if( !class_exists( $className ) ) {
+			# DO NOT die if the class isn't found. This breaks maintenance
+			# scripts and can cause a user account to be unrecoverable
+			# except by SQL manipulation if a previously valid skin name
+			# is no longer valid.
+			wfDebug( "Skin class does not exist: $className\n" );
+			$className = 'SkinStandard';
+			require_once( "{$wgStyleDirectory}/Standard.php" );
+		}
+		$skin = new $className;
+		return $skin;
+	}
+
+	/** @return string path to the skin stylesheet */
+	function getStylesheet() {
+		return 'common/wikistandard.css';
+	}
+
+	/** @return string skin name */
+	public function getSkinName() {
+		return $this->skinname;
+	}
+
+	function qbSetting() {
+		global $wgOut, $wgUser;
+
+		if ( $wgOut->isQuickbarSuppressed() ) { return 0; }
+		$q = $wgUser->getOption( 'quickbar', 0 );
+		return $q;
+	}
+
+	function initPage( &$out ) {
+		global $wgFavicon, $wgScriptPath, $wgSitename, $wgLanguageCode, $wgLanguageNames;
+
+		$fname = 'Skin::initPage';
+		wfProfileIn( $fname );
+
+		if( false !== $wgFavicon ) {
+			$out->addLink( array( 'rel' => 'shortcut icon', 'href' => $wgFavicon ) );
+		}
+
+		# OpenSearch description link
+		$out->addLink( array( 
+			'rel' => 'search', 
+			'type' => 'application/opensearchdescription+xml',
+			'href' => "$wgScriptPath/opensearch_desc.php",
+			'title' => "$wgSitename ({$wgLanguageNames[$wgLanguageCode]})",
+		));
+
+		$this->addMetadataLinks($out);
+
+		$this->mRevisionId = $out->mRevisionId;
+		
+		$this->preloadExistence();
+
+		wfProfileOut( $fname );
+	}
+
+	/**
+	 * Preload the existence of three commonly-requested pages in a single query
+	 */
+	function preloadExistence() {
+		global $wgUser, $wgTitle;
+
+		// User/talk link
+		$titles = array( $wgUser->getUserPage(), $wgUser->getTalkPage() );
+
+		// Other tab link
+		if ( $wgTitle->getNamespace() == NS_SPECIAL ) {
+			// nothing
+		} elseif ( $wgTitle->isTalkPage() ) {
+			$titles[] = $wgTitle->getSubjectPage();
+		} else {
+			$titles[] = $wgTitle->getTalkPage();
+		}
+
+		$lb = new LinkBatch( $titles );
+		$lb->execute();
+	}
+	
+	function addMetadataLinks( &$out ) {
+		global $wgTitle, $wgEnableDublinCoreRdf, $wgEnableCreativeCommonsRdf;
+		global $wgRightsPage, $wgRightsUrl;
+
+		if( $out->isArticleRelated() ) {
+			# note: buggy CC software only reads first "meta" link
+			if( $wgEnableCreativeCommonsRdf ) {
+				$out->addMetadataLink( array(
+					'title' => 'Creative Commons',
+					'type' => 'application/rdf+xml',
+					'href' => $wgTitle->getLocalURL( 'action=creativecommons') ) );
+			}
+			if( $wgEnableDublinCoreRdf ) {
+				$out->addMetadataLink( array(
+					'title' => 'Dublin Core',
+					'type' => 'application/rdf+xml',
+					'href' => $wgTitle->getLocalURL( 'action=dublincore' ) ) );
+			}
+		}
+		$copyright = '';
+		if( $wgRightsPage ) {
+			$copy = Title::newFromText( $wgRightsPage );
+			if( $copy ) {
+				$copyright = $copy->getLocalURL();
+			}
+		}
+		if( !$copyright && $wgRightsUrl ) {
+			$copyright = $wgRightsUrl;
+		}
+		if( $copyright ) {
+			$out->addLink( array(
+				'rel' => 'copyright',
+				'href' => $copyright ) );
+		}
+	}
+
+	function outputPage( &$out ) {
+		global $wgDebugComments;
+
+		wfProfileIn( __METHOD__ );
+		$this->initPage( $out );
+
+		$out->out( $out->headElement() );
+
+		$out->out( "\n<body" );
+		$ops = $this->getBodyOptions();
+		foreach ( $ops as $name => $val ) {
+			$out->out( " $name='$val'" );
+		}
+		$out->out( ">\n" );
+		if ( $wgDebugComments ) {
+			$out->out( "<!-- Wiki debugging output:\n" .
+			  $out->mDebugtext . "-->\n" );
+		}
+
+		$out->out( $this->beforeContent() );
+
+		$out->out( $out->mBodytext . "\n" );
+
+		$out->out( $this->afterContent() );
+
+		$out->out( $this->bottomScripts() );
+
+		$out->out( $out->reportTime() );
+
+		$out->out( "\n</body></html>" );
+		wfProfileOut( __METHOD__ );
+	}
+
+	static function makeVariablesScript( $data ) {
+		global $wgJsMimeType;
+
+		$r = "<script type= \"$wgJsMimeType\">/*<![CDATA[*/\n";
+		foreach ( $data as $name => $value ) {
+			$encValue = Xml::encodeJsVar( $value );
+			$r .= "var $name = $encValue;\n";
+		}
+		$r .= "/*]]>*/</script>\n";
+
+		return $r;
+	}
+
+	/**
+	 * Make a <script> tag containing global variables
+	 * @param array $data Associative array containing one element:
+	 *     skinname => the skin name
+	 * The odd calling convention is for backwards compatibility
+	 */
+	static function makeGlobalVariablesScript( $data ) {
+		global $wgStylePath, $wgUser;
+		global $wgArticlePath, $wgScriptPath, $wgServer, $wgContLang, $wgLang;
+		global $wgTitle, $wgCanonicalNamespaceNames, $wgOut, $wgArticle;
+		global $wgBreakFrames, $wgRequest;
+
+		$ns = $wgTitle->getNamespace();
+		$nsname = isset( $wgCanonicalNamespaceNames[ $ns ] ) ? $wgCanonicalNamespaceNames[ $ns ] : $wgTitle->getNsText();
+		
+		$vars = array( 
+			'skin' => $data['skinname'],
+			'stylepath' => $wgStylePath,
+			'wgArticlePath' => $wgArticlePath,
+			'wgScriptPath' => $wgScriptPath,
+			'wgServer' => $wgServer,
+			'wgCanonicalNamespace' => $nsname,
+			'wgCanonicalSpecialPageName' => SpecialPage::resolveAlias( $wgTitle->getDBKey() ),
+			'wgNamespaceNumber' => $wgTitle->getNamespace(),
+			'wgPageName' => $wgTitle->getPrefixedDBKey(),
+			'wgTitle' => $wgTitle->getText(),
+			'wgAction' => $wgRequest->getText( 'action', 'view' ),
+			'wgArticleId' => $wgTitle->getArticleId(),
+			'wgIsArticle' => $wgOut->isArticle(),
+			'wgUserName' => $wgUser->isAnon() ? NULL : $wgUser->getName(),
+			'wgUserGroups' => $wgUser->isAnon() ? NULL : $wgUser->getEffectiveGroups(),
+			'wgUserLanguage' => $wgLang->getCode(),
+			'wgContentLanguage' => $wgContLang->getCode(),
+			'wgBreakFrames' => $wgBreakFrames,
+			'wgCurRevisionId' => isset( $wgArticle ) ? $wgArticle->getLatest() : 0,
+		);
+
+		global $wgLivePreview;
+		if ( $wgLivePreview && $wgUser->getOption( 'uselivepreview' ) ) {
+			$vars['wgLivepreviewMessageLoading'] = wfMsg( 'livepreview-loading' );
+			$vars['wgLivepreviewMessageReady']   = wfMsg( 'livepreview-ready' );
+			$vars['wgLivepreviewMessageFailed']  = wfMsg( 'livepreview-failed' );
+			$vars['wgLivepreviewMessageError']   = wfMsg( 'livepreview-error' );
+		}
+
+		return self::makeVariablesScript( $vars );
+	}
+
+	function getHeadScripts() {
+		global $wgStylePath, $wgUser, $wgAllowUserJs, $wgJsMimeType, $wgStyleVersion;
+
+		$r = self::makeGlobalVariablesScript( array( 'skinname' => $this->getSkinName() ) );
+
+		$r .= "<script type=\"{$wgJsMimeType}\" src=\"{$wgStylePath}/common/wikibits.js?$wgStyleVersion\"></script>\n";
+		global $wgUseSiteJs;
+		if ($wgUseSiteJs) {
+			if ($wgUser->isLoggedIn()) {
+				$r .= "<script type=\"$wgJsMimeType\" src=\"".htmlspecialchars(self::makeUrl('-','action=raw&smaxage=0&gen=js'))."\"><!-- site js --></script>\n";
+			} else {
+				$r .= "<script type=\"$wgJsMimeType\" src=\"".htmlspecialchars(self::makeUrl('-','action=raw&gen=js'))."\"><!-- site js --></script>\n";
+			}
+		}
+		if( $wgAllowUserJs && $wgUser->isLoggedIn() ) {
+			$userpage = $wgUser->getUserPage();
+			$userjs = htmlspecialchars( self::makeUrl(
+				$userpage->getPrefixedText().'/'.$this->getSkinName().'.js',
+				'action=raw&ctype='.$wgJsMimeType));
+			$r .= '<script type="'.$wgJsMimeType.'" src="'.$userjs."\"></script>\n";
+		}
+		return $r;
+	}
+
+	/**
+	 * To make it harder for someone to slip a user a fake
+	 * user-JavaScript or user-CSS preview, a random token
+	 * is associated with the login session. If it's not
+	 * passed back with the preview request, we won't render
+	 * the code.
+	 *
+	 * @param string $action
+	 * @return bool
+	 * @private
+	 */
+	function userCanPreview( $action ) {
+		global $wgTitle, $wgRequest, $wgUser;
+
+		if( $action != 'submit' )
+			return false;
+		if( !$wgRequest->wasPosted() )
+			return false;
+		if( !$wgTitle->userCanEditCssJsSubpage() )
+			return false;
+		return $wgUser->matchEditToken(
+			$wgRequest->getVal( 'wpEditToken' ) );
+	}
+
+	# get the user/site-specific stylesheet, SkinTemplate loads via RawPage.php (settings are cached that way)
+	function getUserStylesheet() {
+		global $wgStylePath, $wgRequest, $wgContLang, $wgSquidMaxage, $wgStyleVersion;
+		$sheet = $this->getStylesheet();
+		$s = "@import \"$wgStylePath/common/common.css?$wgStyleVersion\";\n";
+		$s .= "@import \"$wgStylePath/$sheet?$wgStyleVersion\";\n";
+		if($wgContLang->isRTL()) $s .= "@import \"$wgStylePath/common/common_rtl.css?$wgStyleVersion\";\n";
+
+		$query = "usemsgcache=yes&action=raw&ctype=text/css&smaxage=$wgSquidMaxage";
+		$s .= '@import "' . self::makeNSUrl( 'Common.css', $query, NS_MEDIAWIKI ) . "\";\n" .
+			'@import "' . self::makeNSUrl( ucfirst( $this->getSkinName() . '.css' ), $query, NS_MEDIAWIKI ) . "\";\n";
+
+		$s .= $this->doGetUserStyles();
+		return $s."\n";
+	}
+
+	/**
+	 * This returns MediaWiki:Common.js.  For some bizarre reason, it does
+	 * *not* return any custom user JS from user subpages.  Huh?
+	 *
+	 * @return string
+	 */
+	function getUserJs() {
+		wfProfileIn( __METHOD__ );
+
+		global $wgStylePath;
+		$s = "/* generated javascript */\n";
+		$s .= "var skin = '{$this->skinname}';\nvar stylepath = '{$wgStylePath}';";
+		$s .= "\n\n/* MediaWiki:Common.js */\n";
+		$commonJs = wfMsgForContent('common.js');
+		if ( !wfEmptyMsg ( 'common.js', $commonJs ) ) {
+			$s .= $commonJs;
+		}
+
+		global $wgUseAjax, $wgAjaxWatch;
+		if($wgUseAjax && $wgAjaxWatch) {
+			$s .= "
+
+/* AJAX (un)watch (see /skins/common/ajaxwatch.js) */
+var wgAjaxWatch = {
+	watchMsg: '".       str_replace( array("'", "\n"), array("\\'", ' '), wfMsgExt( 'watch', array() ) )."',
+	unwatchMsg: '".     str_replace( array("'", "\n"), array("\\'", ' '), wfMsgExt( 'unwatch', array() ) )."',
+	watchingMsg: '".    str_replace( array("'", "\n"), array("\\'", ' '), wfMsgExt( 'watching', array() ) )."',
+	unwatchingMsg: '".  str_replace( array("'", "\n"), array("\\'", ' '), wfMsgExt( 'unwatching', array() ) )."'
+};";
+		}
+
+		wfProfileOut( __METHOD__ );
+		return $s;
+	}
+
+	/**
+	 * Return html code that include User stylesheets
+	 */
+	function getUserStyles() {
+		$s = "<style type='text/css'>\n";
+		$s .= "/*/*/ /*<![CDATA[*/\n"; # <-- Hide the styles from Netscape 4 without hiding them from IE/Mac
+		$s .= $this->getUserStylesheet();
+		$s .= "/*]]>*/ /* */\n";
+		$s .= "</style>\n";
+		return $s;
+	}
+
+	/**
+	 * Some styles that are set by user through the user settings interface.
+	 */
+	function doGetUserStyles() {
+		global $wgUser, $wgUser, $wgRequest, $wgTitle, $wgAllowUserCss;
+
+		$s = '';
+
+		if( $wgAllowUserCss && $wgUser->isLoggedIn() ) { # logged in
+			if($wgTitle->isCssSubpage() && $this->userCanPreview( $wgRequest->getText( 'action' ) ) ) {
+				$s .= $wgRequest->getText('wpTextbox1');
+			} else {
+				$userpage = $wgUser->getUserPage();
+				$s.= '@import "'.self::makeUrl(
+					$userpage->getPrefixedText().'/'.$this->getSkinName().'.css',
+					'action=raw&ctype=text/css').'";'."\n";
+			}
+		}
+
+		return $s . $this->reallyDoGetUserStyles();
+	}
+
+	function reallyDoGetUserStyles() {
+		global $wgUser;
+		$s = '';
+		if (($undopt = $wgUser->getOption("underline")) != 2) {
+			$underline = $undopt ? 'underline' : 'none';
+			$s .= "a { text-decoration: $underline; }\n";
+		}
+		if( $wgUser->getOption( 'highlightbroken' ) ) {
+			$s .= "a.new, #quickbar a.new { color: #CC2200; }\n";
+		} else {
+			$s .= <<<END
+a.new, #quickbar a.new,
+a.stub, #quickbar a.stub {
+	color: inherit;
+	text-decoration: inherit;
+}
+a.new:after, #quickbar a.new:after {
+	content: "?";
+	color: #CC2200;
+	text-decoration: $underline;
+}
+a.stub:after, #quickbar a.stub:after {
+	content: "!";
+	color: #772233;
+	text-decoration: $underline;
+}
+END;
+		}
+		if( $wgUser->getOption( 'justify' ) ) {
+			$s .= "#article, #bodyContent { text-align: justify; }\n";
+		}
+		if( !$wgUser->getOption( 'showtoc' ) ) {
+			$s .= "#toc { display: none; }\n";
+		}
+		if( !$wgUser->getOption( 'editsection' ) ) {
+			$s .= ".editsection { display: none; }\n";
+		}
+		return $s;
+	}
+
+	function getBodyOptions() {
+		global $wgUser, $wgTitle, $wgOut, $wgRequest, $wgContLang;
+
+		extract( $wgRequest->getValues( 'oldid', 'redirect', 'diff' ) );
+
+		if ( 0 != $wgTitle->getNamespace() ) {
+			$a = array( 'bgcolor' => '#ffffec' );
+		}
+		else $a = array( 'bgcolor' => '#FFFFFF' );
+		if($wgOut->isArticle() && $wgUser->getOption('editondblclick') &&
+		  $wgTitle->userCan( 'edit' ) ) {
+			$s = $wgTitle->getFullURL( $this->editUrlOptions() );
+			$s = 'document.location = "' .wfEscapeJSString( $s ) .'";';
+			$a += array ('ondblclick' => $s);
+
+		}
+		$a['onload'] = $wgOut->getOnloadHandler();
+		if( $wgUser->getOption( 'editsectiononrightclick' ) ) {
+			if( $a['onload'] != '' ) {
+				$a['onload'] .= ';';
+			}
+			$a['onload'] .= 'setupRightClickEdit()';
+		}
+		$a['class'] = 'ns-'.$wgTitle->getNamespace().' '.($wgContLang->isRTL() ? "rtl" : "ltr").
+		' '.Sanitizer::escapeClass( 'page-'.$wgTitle->getPrefixedText() );
+		return $a;
+	}
+
+	/**
+	 * URL to the logo
+	 */
+	function getLogo() {
+		global $wgLogo;
+		return $wgLogo;
+	}
+
+	/**
+	 * This will be called immediately after the <body> tag.  Split into
+	 * two functions to make it easier to subclass.
+	 */
+	function beforeContent() {
+		return $this->doBeforeContent();
+	}
+
+	function doBeforeContent() {
+		global $wgContLang;
+		$fname = 'Skin::doBeforeContent';
+		wfProfileIn( $fname );
+
+		$s = '';
+		$qb = $this->qbSetting();
+
+		if( $langlinks = $this->otherLanguages() ) {
+			$rows = 2;
+			$borderhack = '';
+		} else {
+			$rows = 1;
+			$langlinks = false;
+			$borderhack = 'class="top"';
+		}
+
+		$s .= "\n<div id='content'>\n<div id='topbar'>\n" .
+		  "<table border='0' cellspacing='0' width='98%'>\n<tr>\n";
+
+		$shove = ($qb != 0);
+		$left = ($qb == 1 || $qb == 3);
+		if($wgContLang->isRTL()) $left = !$left;
+
+		if ( !$shove ) {
+			$s .= "<td class='top' align='left' valign='top' rowspan='{$rows}'>\n" .
+			  $this->logoText() . '</td>';
+		} elseif( $left ) {
+			$s .= $this->getQuickbarCompensator( $rows );
+		}
+		$l = $wgContLang->isRTL() ? 'right' : 'left';
+		$s .= "<td {$borderhack} align='$l' valign='top'>\n";
+
+		$s .= $this->topLinks() ;
+		$s .= "<p class='subtitle'>" . $this->pageTitleLinks() . "</p>\n";
+
+		$r = $wgContLang->isRTL() ? "left" : "right";
+		$s .= "</td>\n<td {$borderhack} valign='top' align='$r' nowrap='nowrap'>";
+		$s .= $this->nameAndLogin();
+		$s .= "\n<br />" . $this->searchForm() . "</td>";
+
+		if ( $langlinks ) {
+			$s .= "</tr>\n<tr>\n<td class='top' colspan=\"2\">$langlinks</td>\n";
+		}
+
+		if ( $shove && !$left ) { # Right
+			$s .= $this->getQuickbarCompensator( $rows );
+		}
+		$s .= "</tr>\n</table>\n</div>\n";
+		$s .= "\n<div id='article'>\n";
+
+		$notice = wfGetSiteNotice();
+		if( $notice ) {
+			$s .= "\n<div id='siteNotice'>$notice</div>\n";
+		}
+		$s .= $this->pageTitle();
+		$s .= $this->pageSubtitle() ;
+		$s .= $this->getCategories();
+		wfProfileOut( $fname );
+		return $s;
+	}
+
+
+	function getCategoryLinks () {
+		global $wgOut, $wgTitle, $wgUseCategoryBrowser;
+		global $wgContLang;
+
+		if( count( $wgOut->mCategoryLinks ) == 0 ) return '';
+
+		# Separator
+		$sep = wfMsgHtml( 'catseparator' );
+
+		// Use Unicode bidi embedding override characters,
+		// to make sure links don't smash each other up in ugly ways.
+		$dir = $wgContLang->isRTL() ? 'rtl' : 'ltr';
+		$embed = "<span dir='$dir'>";
+		$pop = '</span>';
+		$t = $embed . implode ( "{$pop} {$sep} {$embed}" , $wgOut->mCategoryLinks ) . $pop;
+
+		$msg = wfMsgExt( 'pagecategories', array( 'parsemag', 'escape' ), count( $wgOut->mCategoryLinks ) );
+		$s = $this->makeLinkObj( Title::newFromText( wfMsgForContent('pagecategorieslink') ), $msg )
+			. ': ' . $t;
+
+		# optional 'dmoz-like' category browser. Will be shown under the list
+		# of categories an article belong to
+		if($wgUseCategoryBrowser) {
+			$s .= '<br /><hr />';
+
+			# get a big array of the parents tree
+			$parenttree = $wgTitle->getParentCategoryTree();
+			# Skin object passed by reference cause it can not be
+			# accessed under the method subfunction drawCategoryBrowser
+			$tempout = explode("\n", Skin::drawCategoryBrowser($parenttree, $this) );
+			# Clean out bogus first entry and sort them
+			unset($tempout[0]);
+			asort($tempout);
+			# Output one per line
+			$s .= implode("<br />\n", $tempout);
+		}
+
+		return $s;
+	}
+
+	/** Render the array as a serie of links.
+	 * @param $tree Array: categories tree returned by Title::getParentCategoryTree
+	 * @param &skin Object: skin passed by reference
+	 * @return String separated by &gt;, terminate with "\n"
+	 */
+	function drawCategoryBrowser($tree, &$skin) {
+		$return = '';
+		foreach ($tree as $element => $parent) {
+			if (empty($parent)) {
+				# element start a new list
+				$return .= "\n";
+			} else {
+				# grab the others elements
+				$return .= Skin::drawCategoryBrowser($parent, $skin) . ' &gt; ';
+			}
+			# add our current element to the list
+			$eltitle = Title::NewFromText($element);
+			$return .=  $skin->makeLinkObj( $eltitle, $eltitle->getText() ) ;
+		}
+		return $return;
+	}
+
+	function getCategories() {
+		$catlinks=$this->getCategoryLinks();
+		if(!empty($catlinks)) {
+			return "<p class='catlinks'>{$catlinks}</p>";
+		}
+	}
+
+	function getQuickbarCompensator( $rows = 1 ) {
+		return "<td width='152' rowspan='{$rows}'>&nbsp;</td>";
+	}
+
+	/**
+	 * This gets called shortly before the \</body\> tag.
+	 * @return String HTML to be put before \</body\> 
+	 */
+	function afterContent() {
+		$printfooter = "<div class=\"printfooter\">\n" . $this->printFooter() . "</div>\n";
+		return $printfooter . $this->doAfterContent();
+	}
+
+	/**
+	 * This gets called shortly before the \</body\> tag.
+	 * @return String HTML-wrapped JS code to be put before \</body\> 
+	 */
+	function bottomScripts() {
+		global $wgJsMimeType;
+		return "\n\t\t<script type=\"$wgJsMimeType\">if (window.runOnloadHook) runOnloadHook();</script>\n";
+	}
+
+	/** @return string Retrievied from HTML text */
+	function printSource() {
+		global $wgTitle;
+		$url = htmlspecialchars( $wgTitle->getFullURL() );
+		return wfMsg( 'retrievedfrom', '<a href="'.$url.'">'.$url.'</a>' );
+	}
+
+	function printFooter() {
+		return "<p>" .  $this->printSource() .
+			"</p>\n\n<p>" . $this->pageStats() . "</p>\n";
+	}
+
+	/** overloaded by derived classes */
+	function doAfterContent() { }
+
+	function pageTitleLinks() {
+		global $wgOut, $wgTitle, $wgUser, $wgRequest;
+
+		$oldid = $wgRequest->getVal( 'oldid' );
+		$diff = $wgRequest->getVal( 'diff' );
+		$action = $wgRequest->getText( 'action' );
+
+		$s = $this->printableLink();
+		$disclaimer = $this->disclaimerLink(); # may be empty
+		if( $disclaimer ) {
+			$s .= ' | ' . $disclaimer;
+		}
+		$privacy = $this->privacyLink(); # may be empty too
+		if( $privacy ) {
+			$s .= ' | ' . $privacy;
+		}
+
+		if ( $wgOut->isArticleRelated() ) {
+			if ( $wgTitle->getNamespace() == NS_IMAGE ) {
+				$name = $wgTitle->getDBkey();
+				$image = new Image( $wgTitle );
+				if( $image->exists() ) {
+					$link = htmlspecialchars( $image->getURL() );
+					$style = $this->getInternalLinkAttributes( $link, $name );
+					$s .= " | <a href=\"{$link}\"{$style}>{$name}</a>";
+				}
+			}
+		}
+		if ( 'history' == $action || isset( $diff ) || isset( $oldid ) ) {
+			$s .= ' | ' . $this->makeKnownLinkObj( $wgTitle,
+					wfMsg( 'currentrev' ) );
+		}
+
+		if ( $wgUser->getNewtalk() ) {
+			# do not show "You have new messages" text when we are viewing our
+			# own talk page
+			if( !$wgTitle->equals( $wgUser->getTalkPage() ) ) {
+				$tl = $this->makeKnownLinkObj( $wgUser->getTalkPage(), wfMsgHtml( 'newmessageslink' ), 'redirect=no' );
+				$dl = $this->makeKnownLinkObj( $wgUser->getTalkPage(), wfMsgHtml( 'newmessagesdifflink' ), 'diff=cur' );
+				$s.= ' | <strong>'. wfMsg( 'youhavenewmessages', $tl, $dl ) . '</strong>';
+				# disable caching
+				$wgOut->setSquidMaxage(0);
+				$wgOut->enableClientCache(false);
+			}
+		}
+
+		$undelete = $this->getUndeleteLink();
+		if( !empty( $undelete ) ) {
+			$s .= ' | '.$undelete;
+		}
+		return $s;
+	}
+
+	function getUndeleteLink() {
+		global $wgUser, $wgTitle, $wgContLang, $action;
+		if(	$wgUser->isAllowed( 'deletedhistory' ) &&
+			(($wgTitle->getArticleId() == 0) || ($action == "history")) &&
+			($n = $wgTitle->isDeleted() ) )
+		{
+			if ( $wgUser->isAllowed( 'delete' ) ) {
+				$msg = 'thisisdeleted';
+			} else {
+				$msg = 'viewdeleted';
+			}
+			return wfMsg( $msg,
+				$this->makeKnownLinkObj(
+					SpecialPage::getTitleFor( 'Undelete', $wgTitle->getPrefixedDBkey() ),
+					wfMsgExt( 'restorelink', array( 'parsemag', 'escape' ), $n ) ) );
+		}
+		return '';
+	}
+
+	function printableLink() {
+		global $wgOut, $wgFeedClasses, $wgRequest;
+
+		$printurl = $wgRequest->escapeAppendQuery( 'printable=yes' );
+
+		$s = "<a href=\"$printurl\">" . wfMsg( 'printableversion' ) . '</a>';
+		if( $wgOut->isSyndicated() ) {
+			foreach( $wgFeedClasses as $format => $class ) {
+				$feedurl = $wgRequest->escapeAppendQuery( "feed=$format" );
+				$s .= " | <a href=\"$feedurl\">{$format}</a>";
+			}
+		}
+		return $s;
+	}
+
+	function pageTitle() {
+		global $wgOut;
+		$s = '<h1 class="pagetitle">' . htmlspecialchars( $wgOut->getPageTitle() ) . '</h1>';
+		return $s;
+	}
+
+	function pageSubtitle() {
+		global $wgOut;
+
+		$sub = $wgOut->getSubtitle();
+		if ( '' == $sub ) {
+			global $wgExtraSubtitle;
+			$sub = wfMsg( 'tagline' ) . $wgExtraSubtitle;
+		}
+		$subpages = $this->subPageSubtitle();
+		$sub .= !empty($subpages)?"</p><p class='subpages'>$subpages":'';
+		$s = "<p class='subtitle'>{$sub}</p>\n";
+		return $s;
+	}
+
+	function subPageSubtitle() {
+		global $wgOut,$wgTitle,$wgNamespacesWithSubpages;
+		$subpages = '';
+		if($wgOut->isArticle() && !empty($wgNamespacesWithSubpages[$wgTitle->getNamespace()])) {
+			$ptext=$wgTitle->getPrefixedText();
+			if(preg_match('/\//',$ptext)) {
+				$links = explode('/',$ptext);
+				$c = 0;
+				$growinglink = '';
+				foreach($links as $link) {
+					$c++;
+					if ($c<count($links)) {
+						$growinglink .= $link;
+						$getlink = $this->makeLink( $growinglink, htmlspecialchars( $link ) );
+						if(preg_match('/class="new"/i',$getlink)) { break; } # this is a hack, but it saves time
+						if ($c>1) {
+							$subpages .= ' | ';
+						} else  {
+							$subpages .= '&lt; ';
+						}
+						$subpages .= $getlink;
+						$growinglink .= '/';
+					}
+				}
+			}
+		}
+		return $subpages;
+	}
+
+	/**
+	 * Returns true if the IP should be shown in the header
+	 */
+	function showIPinHeader() {
+		global $wgShowIPinHeader;
+		return $wgShowIPinHeader && session_id() != '';
+	}
+
+	function nameAndLogin() {
+		global $wgUser, $wgTitle, $wgLang, $wgContLang;
+
+		$lo = $wgContLang->specialPage( 'Userlogout' );
+
+		$s = '';
+		if ( $wgUser->isAnon() ) {
+			if( $this->showIPinHeader() ) {
+				$n = wfGetIP();
+
+				$tl = $this->makeKnownLinkObj( $wgUser->getTalkPage(),
+				  $wgLang->getNsText( NS_TALK ) );
+
+				$s .= $n . ' ('.$tl.')';
+			} else {
+				$s .= wfMsg('notloggedin');
+			}
+
+			$rt = $wgTitle->getPrefixedURL();
+			if ( 0 == strcasecmp( urlencode( $lo ), $rt ) ) {
+				$q = '';
+			} else { $q = "returnto={$rt}"; }
+
+			$s .= "\n<br />" . $this->makeKnownLinkObj(
+				SpecialPage::getTitleFor( 'Userlogin' ),
+				wfMsg( 'login' ), $q );
+		} else {
+			$n = $wgUser->getName();
+			$rt = $wgTitle->getPrefixedURL();
+			$tl = $this->makeKnownLinkObj( $wgUser->getTalkPage(),
+			  $wgLang->getNsText( NS_TALK ) );
+
+			$tl = " ({$tl})";
+
+			$s .= $this->makeKnownLinkObj( $wgUser->getUserPage(),
+			  $n ) . "{$tl}<br />" .
+			  $this->makeKnownLinkObj( SpecialPage::getTitleFor( 'Userlogout' ), wfMsg( 'logout' ),
+			  "returnto={$rt}" ) . ' | ' .
+			  $this->specialLink( 'preferences' );
+		}
+		$s .= ' | ' . $this->makeKnownLink( wfMsgForContent( 'helppage' ),
+		  wfMsg( 'help' ) );
+
+		return $s;
+	}
+
+	function getSearchLink() {
+		$searchPage = SpecialPage::getTitleFor( 'Search' );
+		return $searchPage->getLocalURL();
+	}
+
+	function escapeSearchLink() {
+		return htmlspecialchars( $this->getSearchLink() );
+	}
+
+	function searchForm() {
+		global $wgRequest;
+		$search = $wgRequest->getText( 'search' );
+
+		$s = '<form name="search" class="inline" method="post" action="'
+		  . $this->escapeSearchLink() . "\">\n"
+		  . '<input type="text" name="search" size="19" value="'
+		  . htmlspecialchars(substr($search,0,256)) . "\" />\n"
+		  . '<input type="submit" name="go" value="' . wfMsg ('searcharticle') . '" />&nbsp;'
+		  . '<input type="submit" name="fulltext" value="' . wfMsg ('searchbutton') . "\" />\n</form>";
+
+		return $s;
+	}
+
+	function topLinks() {
+		global $wgOut;
+		$sep = " |\n";
+
+		$s = $this->mainPageLink() . $sep
+		  . $this->specialLink( 'recentchanges' );
+
+		if ( $wgOut->isArticleRelated() ) {
+			$s .=  $sep . $this->editThisPage()
+			  . $sep . $this->historyLink();
+		}
+		# Many people don't like this dropdown box
+		#$s .= $sep . $this->specialPagesList();
+		
+		$s .= $this->variantLinks();
+		
+		$s .= $this->extensionTabLinks();
+
+		return $s;
+	}
+	
+	/**
+	 * Compatibility for extensions adding functionality through tabs.
+	 * Eventually these old skins should be replaced with SkinTemplate-based
+	 * versions, sigh...
+	 * @return string
+	 */
+	function extensionTabLinks() {
+		$tabs = array();
+		$s = '';
+		wfRunHooks( 'SkinTemplateTabs', array( $this, &$tabs ) );
+		foreach( $tabs as $tab ) {
+			$s .= ' | ' . Xml::element( 'a',
+				array( 'href' => $tab['href'] ),
+				$tab['text'] );
+		}
+		return $s;
+	}
+	
+	/**
+	 * Language/charset variant links for classic-style skins
+	 * @return string
+	 */
+	function variantLinks() {
+		$s = '';
+		/* show links to different language variants */
+		global $wgDisableLangConversion, $wgContLang, $wgTitle;
+		$variants = $wgContLang->getVariants();
+		if( !$wgDisableLangConversion && sizeof( $variants ) > 1 ) {
+			foreach( $variants as $code ) {
+				$varname = $wgContLang->getVariantname( $code );
+				if( $varname == 'disable' )
+					continue;
+				$s .= ' | <a href="' . $wgTitle->escapeLocalUrl( 'variant=' . $code ) . '">' . htmlspecialchars( $varname ) . '</a>';
+			}
+		}
+		return $s;
+	}
+
+	function bottomLinks() {
+		global $wgOut, $wgUser, $wgTitle, $wgUseTrackbacks;
+		$sep = " |\n";
+
+		$s = '';
+		if ( $wgOut->isArticleRelated() ) {
+			$s .= '<strong>' . $this->editThisPage() . '</strong>';
+			if ( $wgUser->isLoggedIn() ) {
+				$s .= $sep . $this->watchThisPage();
+			}
+			$s .= $sep . $this->talkLink()
+			  . $sep . $this->historyLink()
+			  . $sep . $this->whatLinksHere()
+			  . $sep . $this->watchPageLinksLink();
+
+			if ($wgUseTrackbacks)
+				$s .= $sep . $this->trackbackLink();
+
+			if ( $wgTitle->getNamespace() == NS_USER
+			    || $wgTitle->getNamespace() == NS_USER_TALK )
+
+			{
+				$id=User::idFromName($wgTitle->getText());
+				$ip=User::isIP($wgTitle->getText());
+
+				if($id || $ip) { # both anons and non-anons have contri list
+					$s .= $sep . $this->userContribsLink();
+				}
+				if( $this->showEmailUser( $id ) ) {
+					$s .= $sep . $this->emailUserLink();
+				}
+			}
+			if ( $wgTitle->getArticleId() ) {
+				$s .= "\n<br />";
+				if($wgUser->isAllowed('delete')) { $s .= $this->deleteThisPage(); }
+				if($wgUser->isAllowed('protect')) { $s .= $sep . $this->protectThisPage(); }
+				if($wgUser->isAllowed('move')) { $s .= $sep . $this->moveThisPage(); }
+			}
+			$s .= "<br />\n" . $this->otherLanguages();
+		}
+		return $s;
+	}
+
+	function pageStats() {
+		global $wgOut, $wgLang, $wgArticle, $wgRequest, $wgUser;
+		global $wgDisableCounters, $wgMaxCredits, $wgShowCreditsIfMax, $wgTitle, $wgPageShowWatchingUsers;
+
+		$oldid = $wgRequest->getVal( 'oldid' );
+		$diff = $wgRequest->getVal( 'diff' );
+		if ( ! $wgOut->isArticle() ) { return ''; }
+		if ( isset( $oldid ) || isset( $diff ) ) { return ''; }
+		if ( 0 == $wgArticle->getID() ) { return ''; }
+
+		$s = '';
+		if ( !$wgDisableCounters ) {
+			$count = $wgLang->formatNum( $wgArticle->getCount() );
+			if ( $count ) {
+				$s = wfMsgExt( 'viewcount', array( 'parseinline' ), $count );
+			}
+		}
+
+	        if (isset($wgMaxCredits) && $wgMaxCredits != 0) {
+		    require_once('Credits.php');
+		    $s .= ' ' . getCredits($wgArticle, $wgMaxCredits, $wgShowCreditsIfMax);
+		} else {
+		    $s .= $this->lastModified();
+		}
+
+		if ($wgPageShowWatchingUsers && $wgUser->getOption( 'shownumberswatching' )) {
+			$dbr = wfGetDB( DB_SLAVE );
+			$watchlist = $dbr->tableName( 'watchlist' );
+			$sql = "SELECT COUNT(*) AS n FROM $watchlist
+				WHERE wl_title='" . $dbr->strencode($wgTitle->getDBKey()) .
+				"' AND  wl_namespace=" . $wgTitle->getNamespace() ;
+			$res = $dbr->query( $sql, 'Skin::pageStats');
+			$x = $dbr->fetchObject( $res );
+			$s .= ' ' . wfMsg('number_of_watching_users_pageview', $x->n );
+		}
+
+		return $s . ' ' .  $this->getCopyright();
+	}
+
+	function getCopyright( $type = 'detect' ) {
+		global $wgRightsPage, $wgRightsUrl, $wgRightsText, $wgRequest;
+
+		if ( $type == 'detect' ) {
+			$oldid = $wgRequest->getVal( 'oldid' );
+			$diff = $wgRequest->getVal( 'diff' );
+
+			if ( !is_null( $oldid ) && is_null( $diff ) && wfMsgForContent( 'history_copyright' ) !== '-' ) {
+				$type = 'history';
+			} else {
+				$type = 'normal';
+			}
+		}
+
+		if ( $type == 'history' ) {
+			$msg = 'history_copyright';
+		} else {
+			$msg = 'copyright';
+		}
+
+		$out = '';
+		if( $wgRightsPage ) {
+			$link = $this->makeKnownLink( $wgRightsPage, $wgRightsText );
+		} elseif( $wgRightsUrl ) {
+			$link = $this->makeExternalLink( $wgRightsUrl, $wgRightsText );
+		} else {
+			# Give up now
+			return $out;
+		}
+		$out .= wfMsgForContent( $msg, $link );
+		return $out;
+	}
+
+	function getCopyrightIcon() {
+		global $wgRightsUrl, $wgRightsText, $wgRightsIcon, $wgCopyrightIcon;
+		$out = '';
+		if ( isset( $wgCopyrightIcon ) && $wgCopyrightIcon ) {
+			$out = $wgCopyrightIcon;
+		} else if ( $wgRightsIcon ) {
+			$icon = htmlspecialchars( $wgRightsIcon );
+			if ( $wgRightsUrl ) {
+				$url = htmlspecialchars( $wgRightsUrl );
+				$out .= '<a href="'.$url.'">';
+			}
+			$text = htmlspecialchars( $wgRightsText );
+			$out .= "<img src=\"$icon\" alt='$text' />";
+			if ( $wgRightsUrl ) {
+				$out .= '</a>';
+			}
+		}
+		return $out;
+	}
+
+	function getPoweredBy() {
+		global $wgStylePath;
+		$url = htmlspecialchars( "$wgStylePath/common/images/poweredby_mediawiki_88x31.png" );
+		$img = '<a href="http://www.mediawiki.org/"><img src="'.$url.'" alt="Powered by MediaWiki" /></a>';
+		return $img;
+	}
+
+	function lastModified() {
+		global $wgLang, $wgArticle, $wgLoadBalancer;
+
+		$timestamp = $wgArticle->getTimestamp();
+		if ( $timestamp ) {
+			$d = $wgLang->date( $timestamp, true );
+			$t = $wgLang->time( $timestamp, true );
+			$s = ' ' . wfMsg( 'lastmodifiedat', $d, $t );
+		} else {
+			$s = '';
+		}
+		if ( $wgLoadBalancer->getLaggedSlaveMode() ) {
+			$s .= ' <strong>' . wfMsg( 'laggedslavemode' ) . '</strong>';
+		}
+		return $s;
+	}
+
+	function logoText( $align = '' ) {
+		if ( '' != $align ) { $a = " align='{$align}'"; }
+		else { $a = ''; }
+
+		$mp = wfMsg( 'mainpage' );
+		$mptitle = Title::newMainPage();
+		$url = ( is_object($mptitle) ? $mptitle->escapeLocalURL() : '' );
+
+		$logourl = $this->getLogo();
+		$s = "<a href='{$url}'><img{$a} src='{$logourl}' alt='[{$mp}]' /></a>";
+		return $s;
+	}
+
+	/**
+	 * show a drop-down box of special pages
+	 */
+	function specialPagesList() {
+		global $wgUser, $wgContLang, $wgServer, $wgRedirectScript;
+		$pages = array_merge( SpecialPage::getRegularPages(), SpecialPage::getRestrictedPages() );
+		foreach ( $pages as $name => $page ) {
+			$pages[$name] = $page->getDescription();
+		}
+
+		$go = wfMsg( 'go' );
+		$sp = wfMsg( 'specialpages' );
+		$spp = $wgContLang->specialPage( 'Specialpages' );
+
+		$s = '<form id="specialpages" method="get" class="inline" ' .
+		  'action="' . htmlspecialchars( "{$wgServer}{$wgRedirectScript}" ) . "\">\n";
+		$s .= "<select name=\"wpDropdown\">\n";
+		$s .= "<option value=\"{$spp}\">{$sp}</option>\n";
+
+
+		foreach ( $pages as $name => $desc ) {
+			$p = $wgContLang->specialPage( $name );
+			$s .= "<option value=\"{$p}\">{$desc}</option>\n";
+		}
+		$s .= "</select>\n";
+		$s .= "<input type='submit' value=\"{$go}\" name='redirect' />\n";
+		$s .= "</form>\n";
+		return $s;
+	}
+
+	function mainPageLink() {
+		$s = $this->makeKnownLinkObj( Title::newMainPage(), wfMsg( 'mainpage' ) );
+		return $s;
+	}
+
+	function copyrightLink() {
+		$s = $this->makeKnownLink( wfMsgForContent( 'copyrightpage' ),
+		  wfMsg( 'copyrightpagename' ) );
+		return $s;
+	}
+
+	private function footerLink ( $desc, $page ) {
+		// if the link description has been set to "-" in the default language,
+		if ( wfMsgForContent( $desc )  == '-') {
+			// then it is disabled, for all languages.
+			return '';
+		} else {
+			// Otherwise, we display the link for the user, described in their
+			// language (which may or may not be the same as the default language),
+			// but we make the link target be the one site-wide page.
+			return $this->makeKnownLink( wfMsgForContent( $page ), wfMsg( $desc ) );
+		}
+	}
+
+	function privacyLink() {
+		return $this->footerLink( 'privacy', 'privacypage' );
+	}
+
+	function aboutLink() {
+		return $this->footerLink( 'aboutsite', 'aboutpage' );
+	}
+
+	function disclaimerLink() {
+		return $this->footerLink( 'disclaimers', 'disclaimerpage' );
+	}
+
+	function editThisPage() {
+		global $wgOut, $wgTitle;
+
+		if ( ! $wgOut->isArticleRelated() ) {
+			$s = wfMsg( 'protectedpage' );
+		} else {
+			if ( $wgTitle->userCan( 'edit' ) ) {
+				$t = wfMsg( 'editthispage' );
+			} else {
+				$t = wfMsg( 'viewsource' );
+			}
+
+			$s = $this->makeKnownLinkObj( $wgTitle, $t, $this->editUrlOptions() );
+		}
+		return $s;
+	}
+
+	/**
+	 * Return URL options for the 'edit page' link.
+	 * This may include an 'oldid' specifier, if the current page view is such.
+	 *
+	 * @return string
+	 * @private
+	 */
+	function editUrlOptions() {
+		global $wgArticle;
+
+		if( $this->mRevisionId && ! $wgArticle->isCurrent() ) {
+			return "action=edit&oldid=" . intval( $this->mRevisionId );
+		} else {
+			return "action=edit";
+		}
+	}
+
+	function deleteThisPage() {
+		global $wgUser, $wgTitle, $wgRequest;
+
+		$diff = $wgRequest->getVal( 'diff' );
+		if ( $wgTitle->getArticleId() && ( ! $diff ) && $wgUser->isAllowed('delete') ) {
+			$t = wfMsg( 'deletethispage' );
+
+			$s = $this->makeKnownLinkObj( $wgTitle, $t, 'action=delete' );
+		} else {
+			$s = '';
+		}
+		return $s;
+	}
+
+	function protectThisPage() {
+		global $wgUser, $wgTitle, $wgRequest;
+
+		$diff = $wgRequest->getVal( 'diff' );
+		if ( $wgTitle->getArticleId() && ( ! $diff ) && $wgUser->isAllowed('protect') ) {
+			if ( $wgTitle->isProtected() ) {
+				$t = wfMsg( 'unprotectthispage' );
+				$q = 'action=unprotect';
+			} else {
+				$t = wfMsg( 'protectthispage' );
+				$q = 'action=protect';
+			}
+			$s = $this->makeKnownLinkObj( $wgTitle, $t, $q );
+		} else {
+			$s = '';
+		}
+		return $s;
+	}
+
+	function watchThisPage() {
+		global $wgOut, $wgTitle;
+		++$this->mWatchLinkNum;
+
+		if ( $wgOut->isArticleRelated() ) {
+			if ( $wgTitle->userIsWatching() ) {
+				$t = wfMsg( 'unwatchthispage' );
+				$q = 'action=unwatch';
+				$id = "mw-unwatch-link".$this->mWatchLinkNum;
+			} else {
+				$t = wfMsg( 'watchthispage' );
+				$q = 'action=watch';
+				$id = 'mw-watch-link'.$this->mWatchLinkNum;
+			}
+			$s = $this->makeKnownLinkObj( $wgTitle, $t, $q, '', '', " id=\"$id\"" );
+		} else {
+			$s = wfMsg( 'notanarticle' );
+		}
+		return $s;
+	}
+
+	function moveThisPage() {
+		global $wgTitle;
+
+		if ( $wgTitle->userCan( 'move' ) ) {
+			return $this->makeKnownLinkObj( SpecialPage::getTitleFor( 'Movepage' ),
+			  wfMsg( 'movethispage' ), 'target=' . $wgTitle->getPrefixedURL() );
+		} else {
+			// no message if page is protected - would be redundant
+			return '';
+		}
+	}
+
+	function historyLink() {
+		global $wgTitle;
+
+		return $this->makeKnownLinkObj( $wgTitle,
+		  wfMsg( 'history' ), 'action=history' );
+	}
+
+	function whatLinksHere() {
+		global $wgTitle;
+
+		return $this->makeKnownLinkObj( 
+			SpecialPage::getTitleFor( 'Whatlinkshere', $wgTitle->getPrefixedDBkey() ), 
+			wfMsg( 'whatlinkshere' ) );
+	}
+
+	function userContribsLink() {
+		global $wgTitle;
+
+		return $this->makeKnownLinkObj( 
+			SpecialPage::getTitleFor( 'Contributions', $wgTitle->getDBkey() ),
+			wfMsg( 'contributions' ) );
+	}
+
+	function showEmailUser( $id ) {
+		global $wgEnableEmail, $wgEnableUserEmail, $wgUser;
+		return $wgEnableEmail &&
+		       $wgEnableUserEmail &&
+		       $wgUser->isLoggedIn() && # show only to signed in users
+		       0 != $id; # we can only email to non-anons ..
+#		       '' != $id->getEmail() && # who must have an email address stored ..
+#		       0 != $id->getEmailauthenticationtimestamp() && # .. which is authenticated
+#		       1 != $wgUser->getOption('disablemail'); # and not disabled
+	}
+
+	function emailUserLink() {
+		global $wgTitle;
+
+		return $this->makeKnownLinkObj( 
+			SpecialPage::getTitleFor( 'Emailuser', $wgTitle->getDBkey() ),
+			wfMsg( 'emailuser' ) );
+	}
+
+	function watchPageLinksLink() {
+		global $wgOut, $wgTitle;
+
+		if ( ! $wgOut->isArticleRelated() ) {
+			return '(' . wfMsg( 'notanarticle' ) . ')';
+		} else {
+			return $this->makeKnownLinkObj( 
+				SpecialPage::getTitleFor( 'Recentchangeslinked', $wgTitle->getPrefixedDBkey() ), 
+				wfMsg( 'recentchangeslinked' ) );
+		}
+	}
+
+	function trackbackLink() {
+		global $wgTitle;
+
+		return "<a href=\"" . $wgTitle->trackbackURL() . "\">"
+			. wfMsg('trackbacklink') . "</a>";
+	}
+
+	function otherLanguages() {
+		global $wgOut, $wgContLang, $wgHideInterlanguageLinks;
+
+		if ( $wgHideInterlanguageLinks ) {
+			return '';
+		}
+
+		$a = $wgOut->getLanguageLinks();
+		if ( 0 == count( $a ) ) {
+			return '';
+		}
+
+		$s = wfMsg( 'otherlanguages' ) . ': ';
+		$first = true;
+		if($wgContLang->isRTL()) $s .= '<span dir="LTR">';
+		foreach( $a as $l ) {
+			if ( ! $first ) { $s .= ' | '; }
+			$first = false;
+
+			$nt = Title::newFromText( $l );
+			$url = $nt->escapeFullURL();
+			$text = $wgContLang->getLanguageName( $nt->getInterwiki() );
+
+			if ( '' == $text ) { $text = $l; }
+			$style = $this->getExternalLinkAttributes( $l, $text );
+			$s .= "<a href=\"{$url}\"{$style}>{$text}</a>";
+		}
+		if($wgContLang->isRTL()) $s .= '</span>';
+		return $s;
+	}
+
+	function bugReportsLink() {
+		$s = $this->makeKnownLink( wfMsgForContent( 'bugreportspage' ),
+		  wfMsg( 'bugreports' ) );
+		return $s;
+	}
+
+	function dateLink() {
+		$t1 = Title::newFromText( gmdate( 'F j' ) );
+		$t2 = Title::newFromText( gmdate( 'Y' ) );
+
+		$id = $t1->getArticleID();
+
+		if ( 0 == $id ) {
+			$s = $this->makeBrokenLink( $t1->getText() );
+		} else {
+			$s = $this->makeKnownLink( $t1->getText() );
+		}
+		$s .= ', ';
+
+		$id = $t2->getArticleID();
+
+		if ( 0 == $id ) {
+			$s .= $this->makeBrokenLink( $t2->getText() );
+		} else {
+			$s .= $this->makeKnownLink( $t2->getText() );
+		}
+		return $s;
+	}
+
+	function talkLink() {
+		global $wgTitle;
+
+		if ( NS_SPECIAL == $wgTitle->getNamespace() ) {
+			# No discussion links for special pages
+			return '';
+		}
+
+		if( $wgTitle->isTalkPage() ) {
+			$link = $wgTitle->getSubjectPage();
+			switch( $link->getNamespace() ) {
+				case NS_MAIN:
+					$text = wfMsg( 'articlepage' );
+					break;
+				case NS_USER:
+					$text = wfMsg( 'userpage' );
+					break;
+				case NS_PROJECT:
+					$text = wfMsg( 'projectpage' );
+					break;
+				case NS_IMAGE:
+					$text = wfMsg( 'imagepage' );
+					break;
+				case NS_MEDIAWIKI:
+					$text = wfMsg( 'mediawikipage' );
+					break;
+				case NS_TEMPLATE:
+					$text = wfMsg( 'templatepage' );
+					break;
+				case NS_HELP:
+					$text = wfMsg( 'viewhelppage' );
+					break;
+				case NS_CATEGORY:
+					$text = wfMsg( 'categorypage' );
+					break;
+				default:
+					$text = wfMsg( 'articlepage' );
+			}
+		} else {
+			$link = $wgTitle->getTalkPage();
+			$text = wfMsg( 'talkpage' );
+		}
+
+		$s = $this->makeLinkObj( $link, $text );
+
+		return $s;
+	}
+
+	function commentLink() {
+		global $wgTitle, $wgOut;
+
+		if ( $wgTitle->getNamespace() == NS_SPECIAL ) {
+			return '';
+		}
+		
+		# __NEWSECTIONLINK___ changes behaviour here
+		# If it's present, the link points to this page, otherwise
+		# it points to the talk page
+		if( $wgTitle->isTalkPage() ) {
+			$title =& $wgTitle;
+		} elseif( $wgOut->showNewSectionLink() ) {
+			$title =& $wgTitle;
+		} else {
+			$title =& $wgTitle->getTalkPage();
+		}
+		
+		return $this->makeKnownLinkObj( $title, wfMsg( 'postcomment' ), 'action=edit&section=new' );
+	}
+
+	/* these are used extensively in SkinTemplate, but also some other places */
+	static function makeMainPageUrl( $urlaction = '' ) {
+		$title = Title::newMainPage();
+		self::checkTitle( $title, '' );
+		return $title->getLocalURL( $urlaction );
+	}
+
+	static function makeSpecialUrl( $name, $urlaction = '' ) {
+		$title = SpecialPage::getTitleFor( $name );
+		return $title->getLocalURL( $urlaction );
+	}
+
+	static function makeSpecialUrlSubpage( $name, $subpage, $urlaction = '' ) {
+		$title = SpecialPage::getSafeTitleFor( $name, $subpage );
+		return $title->getLocalURL( $urlaction );
+	}
+
+	static function makeI18nUrl( $name, $urlaction = '' ) {
+		$title = Title::newFromText( wfMsgForContent( $name ) );
+		self::checkTitle( $title, $name );
+		return $title->getLocalURL( $urlaction );
+	}
+
+	static function makeUrl( $name, $urlaction = '' ) {
+		$title = Title::newFromText( $name );
+		self::checkTitle( $title, $name );
+		return $title->getLocalURL( $urlaction );
+	}
+
+	# If url string starts with http, consider as external URL, else
+	# internal
+	static function makeInternalOrExternalUrl( $name ) {
+		if ( preg_match( '/^(?:' . wfUrlProtocols() . ')/', $name ) ) {
+			return $name;
+		} else {
+			return self::makeUrl( $name );
+		}
+	}
+
+	# this can be passed the NS number as defined in Language.php
+	static function makeNSUrl( $name, $urlaction = '', $namespace = NS_MAIN ) {
+		$title = Title::makeTitleSafe( $namespace, $name );
+		self::checkTitle( $title, $name );
+		return $title->getLocalURL( $urlaction );
+	}
+
+	/* these return an array with the 'href' and boolean 'exists' */
+	static function makeUrlDetails( $name, $urlaction = '' ) {
+		$title = Title::newFromText( $name );
+		self::checkTitle( $title, $name );
+		return array(
+			'href' => $title->getLocalURL( $urlaction ),
+			'exists' => $title->getArticleID() != 0 ? true : false
+		);
+	}
+
+	/**
+	 * Make URL details where the article exists (or at least it's convenient to think so)
+	 */
+	static function makeKnownUrlDetails( $name, $urlaction = '' ) {
+		$title = Title::newFromText( $name );
+		self::checkTitle( $title, $name );
+		return array(
+			'href' => $title->getLocalURL( $urlaction ),
+			'exists' => true
+		);
+	}
+
+	# make sure we have some title to operate on
+	static function checkTitle( &$title, $name ) {
+		if( !is_object( $title ) ) {
+			$title = Title::newFromText( $name );
+			if( !is_object( $title ) ) {
+				$title = Title::newFromText( '--error: link target missing--' );
+			}
+		}
+	}
+
+	/**
+	 * Build an array that represents the sidebar(s), the navigation bar among them
+	 *
+	 * @return array
+	 * @private
+	 */
+	function buildSidebar() {
+		global $parserMemc, $wgEnableSidebarCache;
+		global $wgLang, $wgContLang;
+
+		$fname = 'SkinTemplate::buildSidebar';
+
+		wfProfileIn( $fname );
+
+		$key = wfMemcKey( 'sidebar' );
+		$cacheSidebar = $wgEnableSidebarCache &&
+			($wgLang->getCode() == $wgContLang->getCode());
+		
+		if ($cacheSidebar) {
+			$cachedsidebar = $parserMemc->get( $key );
+			if ($cachedsidebar!="") {
+				wfProfileOut($fname);
+				return $cachedsidebar;
+			}
+		}
+
+		$bar = array();
+		$lines = explode( "\n", wfMsgForContent( 'sidebar' ) );
+		foreach ($lines as $line) {
+			if (strpos($line, '*') !== 0)
+				continue;
+			if (strpos($line, '**') !== 0) {
+				$line = trim($line, '* ');
+				$heading = $line;
+			} else {
+				if (strpos($line, '|') !== false) { // sanity check
+					$line = explode( '|' , trim($line, '* '), 2 );
+					$link = wfMsgForContent( $line[0] );
+					if ($link == '-')
+						continue;
+					if (wfEmptyMsg($line[1], $text = wfMsg($line[1])))
+						$text = $line[1];
+					if (wfEmptyMsg($line[0], $link))
+						$link = $line[0];
+
+					if ( preg_match( '/^(?:' . wfUrlProtocols() . ')/', $link ) ) {
+						$href = $link;
+					} else {
+						$title = Title::newFromText( $link );
+						if ( $title ) {
+							$title = $title->fixSpecialName();
+							$href = $title->getLocalURL();
+						} else {
+							$href = 'INVALID-TITLE';
+						}
+					}
+
+					$bar[$heading][] = array(
+						'text' => $text,
+						'href' => $href,
+						'id' => 'n-' . strtr($line[1], ' ', '-'),
+						'active' => false
+					);
+				} else { continue; }
+			}
+		}
+		if ($cacheSidebar)
+			$parserMemc->set( $key, $bar, 86400 );
+		wfProfileOut( $fname );
+		return $bar;
+	}
+}
+?>
Index: /MediaWiki/branches/1.11/includes/SkinTemplate.php
===================================================================
--- /MediaWiki/branches/1.11/includes/SkinTemplate.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/SkinTemplate.php	(revision 1280)
@@ -0,0 +1,1180 @@
+<?php
+if ( ! defined( 'MEDIAWIKI' ) )
+	die( 1 );
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+# http://www.gnu.org/copyleft/gpl.html
+
+/**
+ * Wrapper object for MediaWiki's localization functions,
+ * to be passed to the template engine.
+ *
+ * @private
+ * @addtogroup Skins
+ */
+class MediaWiki_I18N {
+	var $_context = array();
+
+	function set($varName, $value) {
+		$this->_context[$varName] = $value;
+	}
+
+	function translate($value) {
+		$fname = 'SkinTemplate-translate';
+		wfProfileIn( $fname );
+
+		// Hack for i18n:attributes in PHPTAL 1.0.0 dev version as of 2004-10-23
+		$value = preg_replace( '/^string:/', '', $value );
+
+		$value = wfMsg( $value );
+		// interpolate variables
+		$m = array();
+		while (preg_match('/\$([0-9]*?)/sm', $value, $m)) {
+			list($src, $var) = $m;
+			wfSuppressWarnings();
+			$varValue = $this->_context[$var];
+			wfRestoreWarnings();
+			$value = str_replace($src, $varValue, $value);
+		}
+		wfProfileOut( $fname );
+		return $value;
+	}
+}
+
+/**
+ * Template-filler skin base class
+ * Formerly generic PHPTal (http://phptal.sourceforge.net/) skin
+ * Based on Brion's smarty skin
+ * @copyright Copyright © Gabriel Wicke -- http://www.aulinx.de/
+ *
+ * @todo Needs some serious refactoring into functions that correspond
+ * to the computations individual esi snippets need. Most importantly no body
+ * parsing for most of those of course.
+ *
+ * @addtogroup Skins
+ */
+class SkinTemplate extends Skin {
+	/**#@+
+	 * @private
+	 */
+
+	/**
+	 * Name of our skin, set in initPage()
+	 * It probably need to be all lower case.
+	 */
+	var $skinname;
+
+	/**
+	 * Stylesheets set to use
+	 * Sub directory in ./skins/ where various stylesheets are located
+	 */
+	var $stylename;
+
+	/**
+	 * For QuickTemplate, the name of the subclass which
+	 * will actually fill the template.
+	 */
+	var $template;
+
+	/**#@-*/
+
+	/**
+	 * Setup the base parameters...
+	 * Child classes should override this to set the name,
+	 * style subdirectory, and template filler callback.
+	 *
+	 * @param OutputPage $out
+	 */
+	function initPage( &$out ) {
+		parent::initPage( $out );
+		$this->skinname  = 'monobook';
+		$this->stylename = 'monobook';
+		$this->template  = 'QuickTemplate';
+	}
+
+	/**
+	 * Create the template engine object; we feed it a bunch of data
+	 * and eventually it spits out some HTML. Should have interface
+	 * roughly equivalent to PHPTAL 0.7.
+	 *
+	 * @param string $callback (or file)
+	 * @param string $repository subdirectory where we keep template files
+	 * @param string $cache_dir
+	 * @return object
+	 * @private
+	 */
+	function setupTemplate( $classname, $repository=false, $cache_dir=false ) {
+		return new $classname();
+	}
+
+	/**
+	 * initialize various variables and generate the template
+	 *
+	 * @param OutputPage $out
+	 * @public
+	 */
+	function outputPage( &$out ) {
+		global $wgTitle, $wgArticle, $wgUser, $wgLang, $wgContLang, $wgOut;
+		global $wgScript, $wgStylePath, $wgContLanguageCode;
+		global $wgMimeType, $wgJsMimeType, $wgOutputEncoding, $wgRequest;
+		global $wgXhtmlDefaultNamespace, $wgXhtmlNamespaces;
+		global $wgDisableCounters, $wgLogo, $action, $wgFeedClasses, $wgHideInterlanguageLinks;
+		global $wgMaxCredits, $wgShowCreditsIfMax;
+		global $wgPageShowWatchingUsers;
+		global $wgUseTrackbacks;
+		global $wgArticlePath, $wgScriptPath, $wgServer, $wgLang, $wgCanonicalNamespaceNames;
+
+		$fname = 'SkinTemplate::outputPage';
+		wfProfileIn( $fname );
+
+		// Hook that allows last minute changes to the output page, e.g.
+		// adding of CSS or Javascript by extensions.
+		wfRunHooks( 'BeforePageDisplay', array( &$out ) );
+
+		$oldid = $wgRequest->getVal( 'oldid' );
+		$diff = $wgRequest->getVal( 'diff' );
+
+		wfProfileIn( "$fname-init" );
+		$this->initPage( $out );
+
+		$this->mTitle =& $wgTitle;
+		$this->mUser =& $wgUser;
+
+		$tpl = $this->setupTemplate( $this->template, 'skins' );
+
+		#if ( $wgUseDatabaseMessages ) { // uncomment this to fall back to GetText
+		$tpl->setTranslator(new MediaWiki_I18N());
+		#}
+		wfProfileOut( "$fname-init" );
+
+		wfProfileIn( "$fname-stuff" );
+		$this->thispage = $this->mTitle->getPrefixedDbKey();
+		$this->thisurl = $this->mTitle->getPrefixedURL();
+		$this->loggedin = $wgUser->isLoggedIn();
+		$this->iscontent = ($this->mTitle->getNamespace() != NS_SPECIAL );
+		$this->iseditable = ($this->iscontent and !($action == 'edit' or $action == 'submit'));
+		$this->username = $wgUser->getName();
+		$userPage = $wgUser->getUserPage();
+		$this->userpage = $userPage->getPrefixedText();
+
+		if ( $wgUser->isLoggedIn() || $this->showIPinHeader() ) {
+			$this->userpageUrlDetails = self::makeUrlDetails( $this->userpage );
+		} else {
+			# This won't be used in the standard skins, but we define it to preserve the interface
+			# To save time, we check for existence
+			$this->userpageUrlDetails = self::makeKnownUrlDetails( $this->userpage );
+		}
+
+		$this->usercss =  $this->userjs = $this->userjsprev = false;
+		$this->setupUserCss();
+		$this->setupUserJs();
+		$this->titletxt = $this->mTitle->getPrefixedText();
+		wfProfileOut( "$fname-stuff" );
+
+		wfProfileIn( "$fname-stuff2" );
+		$tpl->set( 'title', $wgOut->getPageTitle() );
+		$tpl->set( 'pagetitle', $wgOut->getHTMLTitle() );
+		$tpl->set( 'displaytitle', $wgOut->mPageLinkTitle );
+		$tpl->set( 'pageclass', Sanitizer::escapeClass( 'page-'.$this->mTitle->getPrefixedText() ) );
+
+		$nsname = isset( $wgCanonicalNamespaceNames[ $this->mTitle->getNamespace() ] ) ?
+		          $wgCanonicalNamespaceNames[ $this->mTitle->getNamespace() ] :
+		          $this->mTitle->getNsText();
+
+		$tpl->set( 'nscanonical', $nsname );
+		$tpl->set( 'nsnumber', $this->mTitle->getNamespace() );
+		$tpl->set( 'titleprefixeddbkey', $this->mTitle->getPrefixedDBKey() );
+		$tpl->set( 'titletext', $this->mTitle->getText() );
+		$tpl->set( 'articleid', $this->mTitle->getArticleId() );
+		$tpl->set( 'currevisionid', isset( $wgArticle ) ? $wgArticle->getLatest() : 0 );
+
+		$tpl->set( 'isarticle', $wgOut->isArticle() );
+
+		$tpl->setRef( "thispage", $this->thispage );
+		$subpagestr = $this->subPageSubtitle();
+		$tpl->set(
+			'subtitle',  !empty($subpagestr)?
+			'<span class="subpages">'.$subpagestr.'</span>'.$out->getSubtitle():
+			$out->getSubtitle()
+		);
+		$undelete = $this->getUndeleteLink();
+		$tpl->set(
+			"undelete", !empty($undelete)?
+			'<span class="subpages">'.$undelete.'</span>':
+			''
+		);
+
+		$tpl->set( 'catlinks', $this->getCategories());
+		if( $wgOut->isSyndicated() ) {
+			$feeds = array();
+			foreach( $wgFeedClasses as $format => $class ) {
+				$linktext = $format;
+				if ( $format == "atom" ) {
+					$linktext = wfMsg( 'feed-atom' );
+				} else if ( $format == "rss" ) {
+					$linktext = wfMsg( 'feed-rss' );
+				}
+				$feeds[$format] = array(
+					'text' => $linktext,
+					'href' => $wgRequest->appendQuery( "feed=$format" )
+				);
+			}
+			$tpl->setRef( 'feeds', $feeds );
+		} else {
+			$tpl->set( 'feeds', false );
+		}
+		if ($wgUseTrackbacks && $out->isArticleRelated()) {
+			$tpl->set( 'trackbackhtml', $wgTitle->trackbackRDF() );
+		} else {
+			$tpl->set( 'trackbackhtml', null );
+		}
+
+		$tpl->setRef( 'xhtmldefaultnamespace', $wgXhtmlDefaultNamespace );
+		$tpl->set( 'xhtmlnamespaces', $wgXhtmlNamespaces );
+		$tpl->setRef( 'mimetype', $wgMimeType );
+		$tpl->setRef( 'jsmimetype', $wgJsMimeType );
+		$tpl->setRef( 'charset', $wgOutputEncoding );
+		$tpl->set( 'headlinks', $out->getHeadLinks() );
+		$tpl->set('headscripts', $out->getScript() );
+		$tpl->setRef( 'wgScript', $wgScript );
+		$tpl->setRef( 'skinname', $this->skinname );
+		$tpl->set( 'skinclass', get_class( $this ) );
+		$tpl->setRef( 'stylename', $this->stylename );
+		$tpl->set( 'printable', $wgRequest->getBool( 'printable' ) );
+		$tpl->setRef( 'loggedin', $this->loggedin );
+		$tpl->set('nsclass', 'ns-'.$this->mTitle->getNamespace());
+		$tpl->set('notspecialpage', $this->mTitle->getNamespace() != NS_SPECIAL);
+		/* XXX currently unused, might get useful later
+		$tpl->set( "editable", ($this->mTitle->getNamespace() != NS_SPECIAL ) );
+		$tpl->set( "exists", $this->mTitle->getArticleID() != 0 );
+		$tpl->set( "watch", $this->mTitle->userIsWatching() ? "unwatch" : "watch" );
+		$tpl->set( "protect", count($this->mTitle->isProtected()) ? "unprotect" : "protect" );
+		$tpl->set( "helppage", wfMsg('helppage'));
+		*/
+		$tpl->set( 'searchaction', $this->escapeSearchLink() );
+		$tpl->set( 'search', trim( $wgRequest->getVal( 'search' ) ) );
+		$tpl->setRef( 'stylepath', $wgStylePath );
+		$tpl->setRef( 'articlepath', $wgArticlePath );
+		$tpl->setRef( 'scriptpath', $wgScriptPath );
+		$tpl->setRef( 'serverurl', $wgServer );
+		$tpl->setRef( 'logopath', $wgLogo );
+		$tpl->setRef( "lang", $wgContLanguageCode );
+		$tpl->set( 'dir', $wgContLang->isRTL() ? "rtl" : "ltr" );
+		$tpl->set( 'rtl', $wgContLang->isRTL() );
+		$tpl->set( 'langname', $wgContLang->getLanguageName( $wgContLanguageCode ) );
+		$tpl->set( 'showjumplinks', $wgUser->getOption( 'showjumplinks' ) );
+		$tpl->set( 'username', $wgUser->isAnon() ? NULL : $this->username );
+		$tpl->setRef( 'userpage', $this->userpage);
+		$tpl->setRef( 'userpageurl', $this->userpageUrlDetails['href']);
+		$tpl->set( 'userlang', $wgLang->getCode() );
+		$tpl->set( 'pagecss', $this->setupPageCss() );
+		$tpl->setRef( 'usercss', $this->usercss);
+		$tpl->setRef( 'userjs', $this->userjs);
+		$tpl->setRef( 'userjsprev', $this->userjsprev);
+		global $wgUseSiteJs;
+		if ($wgUseSiteJs) {
+			if($this->loggedin) {
+				$tpl->set( 'jsvarurl', self::makeUrl('-','action=raw&smaxage=0&gen=js') );
+			} else {
+				$tpl->set( 'jsvarurl', self::makeUrl('-','action=raw&gen=js') );
+			}
+		} else {
+			$tpl->set('jsvarurl', false);
+		}
+		$newtalks = $wgUser->getNewMessageLinks();
+
+		if (count($newtalks) == 1 && $newtalks[0]["wiki"] === wfWikiID() ) {
+			$usertitle = $this->mUser->getUserPage();
+			$usertalktitle = $usertitle->getTalkPage();
+			if( !$usertalktitle->equals( $this->mTitle ) ) {
+				$ntl = wfMsg( 'youhavenewmessages',
+					$this->makeKnownLinkObj(
+						$usertalktitle,
+						wfMsgHtml( 'newmessageslink' ),
+						'redirect=no'
+					),
+					$this->makeKnownLinkObj(
+						$usertalktitle,
+						wfMsgHtml( 'newmessagesdifflink' ),
+						'diff=cur'
+					)
+				);
+				# Disable Cache
+				$wgOut->setSquidMaxage(0);
+			}
+		} else if (count($newtalks)) {
+			$sep = str_replace("_", " ", wfMsgHtml("newtalkseperator"));
+			$msgs = array();
+			foreach ($newtalks as $newtalk) {
+				$msgs[] = wfElement("a",
+					array('href' => $newtalk["link"]), $newtalk["wiki"]);
+			}
+			$parts = implode($sep, $msgs);
+			$ntl = wfMsgHtml('youhavenewmessagesmulti', $parts);
+			$wgOut->setSquidMaxage(0);
+		} else {
+			$ntl = '';
+		}
+		wfProfileOut( "$fname-stuff2" );
+
+		wfProfileIn( "$fname-stuff3" );
+		$tpl->setRef( 'newtalk', $ntl );
+		$tpl->setRef( 'skin', $this);
+		$tpl->set( 'logo', $this->logoText() );
+		if ( $wgOut->isArticle() and (!isset( $oldid ) or isset( $diff )) and
+			$wgArticle and 0 != $wgArticle->getID() )
+		{
+			if ( !$wgDisableCounters ) {
+				$viewcount = $wgLang->formatNum( $wgArticle->getCount() );
+				if ( $viewcount ) {
+					$tpl->set('viewcount', wfMsgExt( 'viewcount', array( 'parseinline' ), $viewcount ) );
+				} else {
+					$tpl->set('viewcount', false);
+				}
+			} else {
+				$tpl->set('viewcount', false);
+			}
+
+			if ($wgPageShowWatchingUsers) {
+				$dbr = wfGetDB( DB_SLAVE );
+				$watchlist = $dbr->tableName( 'watchlist' );
+				$sql = "SELECT COUNT(*) AS n FROM $watchlist
+					WHERE wl_title='" . $dbr->strencode($this->mTitle->getDBKey()) .
+					"' AND  wl_namespace=" . $this->mTitle->getNamespace() ;
+				$res = $dbr->query( $sql, 'SkinTemplate::outputPage');
+				$x = $dbr->fetchObject( $res );
+				$numberofwatchingusers = $x->n;
+				if ($numberofwatchingusers > 0) {
+					$tpl->set('numberofwatchingusers', wfMsg('number_of_watching_users_pageview', $numberofwatchingusers));
+				} else {
+					$tpl->set('numberofwatchingusers', false);
+				}
+			} else {
+				$tpl->set('numberofwatchingusers', false);
+			}
+
+			$tpl->set('copyright',$this->getCopyright());
+
+			$this->credits = false;
+
+			if (isset($wgMaxCredits) && $wgMaxCredits != 0) {
+				require_once("Credits.php");
+				$this->credits = getCredits($wgArticle, $wgMaxCredits, $wgShowCreditsIfMax);
+			} else {
+				$tpl->set('lastmod', $this->lastModified());
+			}
+
+			$tpl->setRef( 'credits', $this->credits );
+
+		} elseif ( isset( $oldid ) && !isset( $diff ) ) {
+			$tpl->set('copyright', $this->getCopyright());
+			$tpl->set('viewcount', false);
+			$tpl->set('lastmod', false);
+			$tpl->set('credits', false);
+			$tpl->set('numberofwatchingusers', false);
+		} else {
+			$tpl->set('copyright', false);
+			$tpl->set('viewcount', false);
+			$tpl->set('lastmod', false);
+			$tpl->set('credits', false);
+			$tpl->set('numberofwatchingusers', false);
+		}
+		wfProfileOut( "$fname-stuff3" );
+
+		wfProfileIn( "$fname-stuff4" );
+		$tpl->set( 'copyrightico', $this->getCopyrightIcon() );
+		$tpl->set( 'poweredbyico', $this->getPoweredBy() );
+		$tpl->set( 'disclaimer', $this->disclaimerLink() );
+		$tpl->set( 'privacy', $this->privacyLink() );
+		$tpl->set( 'about', $this->aboutLink() );
+
+		$tpl->setRef( 'debug', $out->mDebugtext );
+		$tpl->set( 'reporttime', $out->reportTime() );
+		$tpl->set( 'sitenotice', wfGetSiteNotice() );
+		$tpl->set( 'bottomscripts', $this->bottomScripts() );
+
+		$printfooter = "<div class=\"printfooter\">\n" . $this->printSource() . "</div>\n";
+		$out->mBodytext .= $printfooter ;
+		$tpl->setRef( 'bodytext', $out->mBodytext );
+
+		# Language links
+		$language_urls = array();
+
+		if ( !$wgHideInterlanguageLinks ) {
+			foreach( $wgOut->getLanguageLinks() as $l ) {
+				$tmp = explode( ':', $l, 2 );
+				$class = 'interwiki-' . $tmp[0];
+				unset($tmp);
+				$nt = Title::newFromText( $l );
+				$language_urls[] = array(
+					'href' => $nt->getFullURL(),
+					'text' => ($wgContLang->getLanguageName( $nt->getInterwiki()) != ''?$wgContLang->getLanguageName( $nt->getInterwiki()) : $l),
+					'class' => $class
+				);
+			}
+		}
+		if(count($language_urls)) {
+			$tpl->setRef( 'language_urls', $language_urls);
+		} else {
+			$tpl->set('language_urls', false);
+		}
+		wfProfileOut( "$fname-stuff4" );
+
+		# Personal toolbar
+		$tpl->set('personal_urls', $this->buildPersonalUrls());
+		$content_actions = $this->buildContentActionUrls();
+		$tpl->setRef('content_actions', $content_actions);
+
+		// XXX: attach this from javascript, same with section editing
+		if($this->iseditable &&	$wgUser->getOption("editondblclick") )
+		{
+			$tpl->set('body_ondblclick', 'document.location = "' .$content_actions['edit']['href'] .'";');
+		} else {
+			$tpl->set('body_ondblclick', false);
+		}
+		if( $this->iseditable && $wgUser->getOption( 'editsectiononrightclick' ) ) {
+			$tpl->set( 'body_onload', 'setupRightClickEdit()' );
+		} else {
+			$tpl->set( 'body_onload', false );
+		}
+		$tpl->set( 'sidebar', $this->buildSidebar() );
+		$tpl->set( 'nav_urls', $this->buildNavUrls() );
+
+		// original version by hansm
+		if( !wfRunHooks( 'SkinTemplateOutputPageBeforeExec', array( &$this, &$tpl ) ) ) {
+			wfDebug( __METHOD__ . ': Hook SkinTemplateOutputPageBeforeExec broke outputPage execution!' );
+		}
+
+		// execute template
+		wfProfileIn( "$fname-execute" );
+		$res = $tpl->execute();
+		wfProfileOut( "$fname-execute" );
+
+		// result may be an error
+		$this->printOrError( $res );
+		wfProfileOut( $fname );
+	}
+
+	/**
+	 * Output the string, or print error message if it's
+	 * an error object of the appropriate type.
+	 * For the base class, assume strings all around.
+	 *
+	 * @param mixed $str
+	 * @private
+	 */
+	function printOrError( $str ) {
+		echo $str;
+	}
+
+	/**
+	 * build array of urls for personal toolbar
+	 * @return array
+	 * @private
+	 */
+	function buildPersonalUrls() {
+		global $wgTitle, $wgRequest;
+
+		$fname = 'SkinTemplate::buildPersonalUrls';
+		$pageurl = $wgTitle->getLocalURL();
+		wfProfileIn( $fname );
+
+		/* set up the default links for the personal toolbar */
+		$personal_urls = array();
+		if ($this->loggedin) {
+			$personal_urls['userpage'] = array(
+				'text' => $this->username,
+				'href' => &$this->userpageUrlDetails['href'],
+				'class' => $this->userpageUrlDetails['exists']?false:'new',
+				'active' => ( $this->userpageUrlDetails['href'] == $pageurl )
+			);
+			$usertalkUrlDetails = $this->makeTalkUrlDetails($this->userpage);
+			$personal_urls['mytalk'] = array(
+				'text' => wfMsg('mytalk'),
+				'href' => &$usertalkUrlDetails['href'],
+				'class' => $usertalkUrlDetails['exists']?false:'new',
+				'active' => ( $usertalkUrlDetails['href'] == $pageurl )
+			);
+			$href = self::makeSpecialUrl( 'Preferences' );
+			$personal_urls['preferences'] = array(
+				'text' => wfMsg( 'mypreferences' ),
+				'href' => $href,
+				'active' => ( $href == $pageurl )
+			);
+			$href = self::makeSpecialUrl( 'Watchlist' );
+			$personal_urls['watchlist'] = array(
+				'text' => wfMsg( 'mywatchlist' ),
+				'href' => $href,
+				'active' => ( $href == $pageurl )
+			);
+			
+			# We need to do an explicit check for Special:Contributions, as we
+			# have to match both the title, and the target (which could come
+			# from request values or be specified in "sub page" form. The plot
+			# thickens, because $wgTitle is altered for special pages, so doesn't
+			# contain the original alias-with-subpage.
+			$title = Title::newFromText( $wgRequest->getText( 'title' ) );
+			if( $title instanceof Title && $title->getNamespace() == NS_SPECIAL ) {			
+				list( $spName, $spPar ) =
+					SpecialPage::resolveAliasWithSubpage( $title->getText() );
+				$active = $spName == 'Contributions'
+					&& ( ( $spPar && $spPar == $this->username )
+						|| $wgRequest->getText( 'target' ) == $this->username );
+			} else {
+				$active = false;
+			}
+			
+			$href = self::makeSpecialUrlSubpage( 'Contributions', $this->username );
+			$personal_urls['mycontris'] = array(
+				'text' => wfMsg( 'mycontris' ),
+				'href' => $href,
+				'active' => $active
+			);
+			$personal_urls['logout'] = array(
+				'text' => wfMsg( 'userlogout' ),
+				'href' => self::makeSpecialUrl( 'Userlogout',
+					$wgTitle->isSpecial( 'Preferences' ) ? '' : "returnto={$this->thisurl}"
+				),
+				'active' => false
+			);
+		} else {
+			if( $this->showIPinHeader() ) {
+				$href = &$this->userpageUrlDetails['href'];
+				$personal_urls['anonuserpage'] = array(
+					'text' => $this->username,
+					'href' => $href,
+					'class' => $this->userpageUrlDetails['exists']?false:'new',
+					'active' => ( $pageurl == $href )
+				);
+				$usertalkUrlDetails = $this->makeTalkUrlDetails($this->userpage);
+				$href = &$usertalkUrlDetails['href'];
+				$personal_urls['anontalk'] = array(
+					'text' => wfMsg('anontalk'),
+					'href' => $href,
+					'class' => $usertalkUrlDetails['exists']?false:'new',
+					'active' => ( $pageurl == $href )
+				);
+				$personal_urls['anonlogin'] = array(
+					'text' => wfMsg('userlogin'),
+					'href' => self::makeSpecialUrl( 'Userlogin', 'returnto=' . $this->thisurl ),
+					'active' => $wgTitle->isSpecial( 'Userlogin' )
+				);
+			} else {
+
+				$personal_urls['login'] = array(
+					'text' => wfMsg('userlogin'),
+					'href' => self::makeSpecialUrl( 'Userlogin', 'returnto=' . $this->thisurl ),
+					'active' => $wgTitle->isSpecial( 'Userlogin' )
+				);
+			}
+		}
+
+		wfRunHooks( 'PersonalUrls', array( &$personal_urls, &$wgTitle ) );
+		wfProfileOut( $fname );
+		return $personal_urls;
+	}
+
+	function tabAction( $title, $message, $selected, $query='', $checkEdit=false ) {
+		$classes = array();
+		if( $selected ) {
+			$classes[] = 'selected';
+		}
+		if( $checkEdit && $title->getArticleId() == 0 ) {
+			$classes[] = 'new';
+			$query = 'action=edit';
+		}
+
+		$text = wfMsg( $message );
+		if ( wfEmptyMsg( $message, $text ) ) {
+			global $wgContLang;
+			$text = $wgContLang->getFormattedNsText( Namespace::getSubject( $title->getNamespace() ) );
+		}
+
+		return array(
+			'class' => implode( ' ', $classes ),
+			'text' => $text,
+			'href' => $title->getLocalUrl( $query ) );
+	}
+
+	function makeTalkUrlDetails( $name, $urlaction = '' ) {
+		$title = Title::newFromText( $name );
+		if( !is_object($title) ) {
+			throw new MWException( __METHOD__." given invalid pagename $name" );
+		}
+		$title = $title->getTalkPage();
+		self::checkTitle( $title, $name );
+		return array(
+			'href' => $title->getLocalURL( $urlaction ),
+			'exists' => $title->getArticleID() != 0 ? true : false
+		);
+	}
+
+	function makeArticleUrlDetails( $name, $urlaction = '' ) {
+		$title = Title::newFromText( $name );
+		$title= $title->getSubjectPage();
+		self::checkTitle( $title, $name );
+		return array(
+			'href' => $title->getLocalURL( $urlaction ),
+			'exists' => $title->getArticleID() != 0 ? true : false
+		);
+	}
+
+	/**
+	 * an array of edit links by default used for the tabs
+	 * @return array
+	 * @private
+	 */
+	function buildContentActionUrls () {
+		global $wgContLang, $wgOut;
+		$fname = 'SkinTemplate::buildContentActionUrls';
+		wfProfileIn( $fname );
+
+		global $wgUser, $wgRequest;
+		$action = $wgRequest->getText( 'action' );
+		$section = $wgRequest->getText( 'section' );
+		$content_actions = array();
+
+		$prevent_active_tabs = false ;
+		wfRunHooks( 'SkinTemplatePreventOtherActiveTabs', array( &$this , &$prevent_active_tabs ) )	;
+
+		if( $this->iscontent ) {
+			$subjpage = $this->mTitle->getSubjectPage();
+			$talkpage = $this->mTitle->getTalkPage();
+
+			$nskey = $this->mTitle->getNamespaceKey();
+			$content_actions[$nskey] = $this->tabAction(
+				$subjpage,
+				$nskey,
+				!$this->mTitle->isTalkPage() && !$prevent_active_tabs,
+				'', true);
+
+			$content_actions['talk'] = $this->tabAction(
+				$talkpage,
+				'talk',
+				$this->mTitle->isTalkPage() && !$prevent_active_tabs,
+				'',
+				true);
+
+			wfProfileIn( "$fname-edit" );
+			if ( $this->mTitle->quickUserCan( 'edit' ) && ( $this->mTitle->exists() || $this->mTitle->quickUserCan( 'create' ) ) ) {
+				$istalk = $this->mTitle->isTalkPage();
+				$istalkclass = $istalk?' istalk':'';
+				$content_actions['edit'] = array(
+					'class' => ((($action == 'edit' or $action == 'submit') and $section != 'new') ? 'selected' : '').$istalkclass,
+					'text' => wfMsg('edit'),
+					'href' => $this->mTitle->getLocalUrl( $this->editUrlOptions() )
+				);
+
+				if ( $istalk || $wgOut->showNewSectionLink() ) {
+					$content_actions['addsection'] = array(
+						'class' => $section == 'new'?'selected':false,
+						'text' => wfMsg('addsection'),
+						'href' => $this->mTitle->getLocalUrl( 'action=edit&section=new' )
+					);
+				}
+			} else {
+				$content_actions['viewsource'] = array(
+					'class' => ($action == 'edit') ? 'selected' : false,
+					'text' => wfMsg('viewsource'),
+					'href' => $this->mTitle->getLocalUrl( $this->editUrlOptions() )
+				);
+			}
+			wfProfileOut( "$fname-edit" );
+
+			wfProfileIn( "$fname-live" );
+			if ( $this->mTitle->getArticleId() ) {
+
+				$content_actions['history'] = array(
+					'class' => ($action == 'history') ? 'selected' : false,
+					'text' => wfMsg('history_short'),
+					'href' => $this->mTitle->getLocalUrl( 'action=history')
+				);
+
+				if ( $this->mTitle->getNamespace() !== NS_MEDIAWIKI && $wgUser->isAllowed( 'protect' ) ) {
+					if(!$this->mTitle->isProtected()){
+						$content_actions['protect'] = array(
+							'class' => ($action == 'protect') ? 'selected' : false,
+							'text' => wfMsg('protect'),
+							'href' => $this->mTitle->getLocalUrl( 'action=protect' )
+						);
+
+					} else {
+						$content_actions['unprotect'] = array(
+							'class' => ($action == 'unprotect') ? 'selected' : false,
+							'text' => wfMsg('unprotect'),
+							'href' => $this->mTitle->getLocalUrl( 'action=unprotect' )
+						);
+					}
+				}
+				if($wgUser->isAllowed('delete')){
+					$content_actions['delete'] = array(
+						'class' => ($action == 'delete') ? 'selected' : false,
+						'text' => wfMsg('delete'),
+						'href' => $this->mTitle->getLocalUrl( 'action=delete' )
+					);
+				}
+				if ( $this->mTitle->quickUserCan( 'move' ) ) {
+					$moveTitle = SpecialPage::getTitleFor( 'Movepage', $this->thispage );
+					$content_actions['move'] = array(
+						'class' => $this->mTitle->isSpecial( 'Movepage' ) ? 'selected' : false,
+						'text' => wfMsg('move'),
+						'href' => $moveTitle->getLocalUrl()
+					);
+				}
+			} else {
+				//article doesn't exist or is deleted
+				if( $wgUser->isAllowed( 'delete' ) ) {
+					if( $n = $this->mTitle->isDeleted() ) {
+						$undelTitle = SpecialPage::getTitleFor( 'Undelete' );
+						$content_actions['undelete'] = array(
+							'class' => false,
+							'text' => wfMsgExt( 'undelete_short', array( 'parsemag' ), $n ),
+							'href' => $undelTitle->getLocalUrl( 'target=' . urlencode( $this->thispage ) )
+							#'href' => self::makeSpecialUrl( "Undelete/$this->thispage" )
+						);
+					}
+				}
+			}
+			wfProfileOut( "$fname-live" );
+
+			if( $this->loggedin ) {
+				if( !$this->mTitle->userIsWatching()) {
+					$content_actions['watch'] = array(
+						'class' => ($action == 'watch' or $action == 'unwatch') ? 'selected' : false,
+						'text' => wfMsg('watch'),
+						'href' => $this->mTitle->getLocalUrl( 'action=watch' )
+					);
+				} else {
+					$content_actions['unwatch'] = array(
+						'class' => ($action == 'unwatch' or $action == 'watch') ? 'selected' : false,
+						'text' => wfMsg('unwatch'),
+						'href' => $this->mTitle->getLocalUrl( 'action=unwatch' )
+					);
+				}
+			}
+			
+
+			wfRunHooks( 'SkinTemplateTabs', array( &$this , &$content_actions ) )	;
+		} else {
+			/* show special page tab */
+
+			$content_actions[$this->mTitle->getNamespaceKey()] = array(
+				'class' => 'selected',
+				'text' => wfMsg('nstab-special'),
+				'href' => $wgRequest->getRequestURL(), // @bug 2457, 2510
+			);
+
+			wfRunHooks( 'SkinTemplateBuildContentActionUrlsAfterSpecialPage', array( &$this, &$content_actions ) );
+		}
+
+		/* show links to different language variants */
+		global $wgDisableLangConversion;
+		$variants = $wgContLang->getVariants();
+		if( !$wgDisableLangConversion && sizeof( $variants ) > 1 ) {
+			$preferred = $wgContLang->getPreferredVariant();
+			$vcount=0;
+			foreach( $variants as $code ) {
+				$varname = $wgContLang->getVariantname( $code );
+				if( $varname == 'disable' )
+					continue;
+				$selected = ( $code == $preferred )? 'selected' : false;
+				$content_actions['varlang-' . $vcount] = array(
+						'class' => $selected,
+						'text' => $varname,
+						'href' => $this->mTitle->getLocalURL('',$code)
+					);
+				$vcount ++;
+			}
+		}
+
+		wfRunHooks( 'SkinTemplateContentActions', array( &$content_actions ) );
+
+		wfProfileOut( $fname );
+		return $content_actions;
+	}
+
+
+
+	/**
+	 * build array of common navigation links
+	 * @return array
+	 * @private
+	 */
+	function buildNavUrls () {
+		global $wgUseTrackbacks, $wgTitle, $wgArticle;
+
+		$fname = 'SkinTemplate::buildNavUrls';
+		wfProfileIn( $fname );
+
+		global $wgUser, $wgRequest;
+		global $wgEnableUploads, $wgUploadNavigationUrl;
+
+		$action = $wgRequest->getText( 'action' );
+		$oldid = $wgRequest->getVal( 'oldid' );
+
+		$nav_urls = array();
+		$nav_urls['mainpage'] = array( 'href' => self::makeMainPageUrl() );
+		if( $wgEnableUploads ) {
+			if ($wgUploadNavigationUrl) {
+				$nav_urls['upload'] = array( 'href' => $wgUploadNavigationUrl );
+			} else {
+				$nav_urls['upload'] = array( 'href' => self::makeSpecialUrl( 'Upload' ) );
+			}
+		} else {
+			if ($wgUploadNavigationUrl)
+				$nav_urls['upload'] = array( 'href' => $wgUploadNavigationUrl );
+			else
+				$nav_urls['upload'] = false;
+		}
+		$nav_urls['specialpages'] = array( 'href' => self::makeSpecialUrl( 'Specialpages' ) );
+
+		// default permalink to being off, will override it as required below.
+		$nav_urls['permalink'] = false;
+
+		// A print stylesheet is attached to all pages, but nobody ever
+		// figures that out. :)  Add a link...
+		if( $this->iscontent && ($action == '' || $action == 'view' || $action == 'purge' ) ) {
+			$nav_urls['print'] = array(
+				'text' => wfMsg( 'printableversion' ),
+				'href' => $wgRequest->appendQuery( 'printable=yes' )
+			);
+
+			// Also add a "permalink" while we're at it
+			if ( (int)$oldid ) {
+				$nav_urls['permalink'] = array(
+					'text' => wfMsg( 'permalink' ),
+					'href' => ''
+				);
+			} else {
+				$revid = $wgArticle ? $wgArticle->getLatest() : 0;
+				if ( !( $revid == 0 )  )
+					$nav_urls['permalink'] = array(
+						'text' => wfMsg( 'permalink' ),
+						'href' => $wgTitle->getLocalURL( "oldid=$revid" )
+					);
+			}
+
+			wfRunHooks( 'SkinTemplateBuildNavUrlsNav_urlsAfterPermalink', array( &$this, &$nav_urls, &$oldid, &$revid ) );
+		}
+
+		if( $this->mTitle->getNamespace() != NS_SPECIAL ) {
+			$wlhTitle = SpecialPage::getTitleFor( 'Whatlinkshere', $this->thispage );
+			$nav_urls['whatlinkshere'] = array(
+				'href' => $wlhTitle->getLocalUrl()
+			);
+			if( $this->mTitle->getArticleId() ) {
+				$rclTitle = SpecialPage::getTitleFor( 'Recentchangeslinked', $this->thispage );
+				$nav_urls['recentchangeslinked'] = array(
+					'href' => $rclTitle->getLocalUrl()
+				);
+			} else {
+				$nav_urls['recentchangeslinked'] = false;
+			}
+			if ($wgUseTrackbacks)
+				$nav_urls['trackbacklink'] = array(
+					'href' => $wgTitle->trackbackURL()
+				);
+		}
+
+		if( $this->mTitle->getNamespace() == NS_USER || $this->mTitle->getNamespace() == NS_USER_TALK ) {
+			$id = User::idFromName($this->mTitle->getText());
+			$ip = User::isIP($this->mTitle->getText());
+		} else {
+			$id = 0;
+			$ip = false;
+		}
+
+		if($id || $ip) { # both anons and non-anons have contri list
+			$nav_urls['contributions'] = array(
+				'href' => self::makeSpecialUrlSubpage( 'Contributions', $this->mTitle->getText() )
+			);
+			if ( $wgUser->isAllowed( 'block' ) ) {
+				$nav_urls['blockip'] = array(
+					'href' => self::makeSpecialUrlSubpage( 'Blockip', $this->mTitle->getText() )
+				);
+			} else {
+				$nav_urls['blockip'] = false;
+			}
+		} else {
+			$nav_urls['contributions'] = false;
+			$nav_urls['blockip'] = false;
+		}
+		$nav_urls['emailuser'] = false;
+		if( $this->showEmailUser( $id ) ) {
+			$nav_urls['emailuser'] = array(
+				'href' => self::makeSpecialUrlSubpage( 'Emailuser', $this->mTitle->getText() )
+			);
+		}
+		wfProfileOut( $fname );
+		return $nav_urls;
+	}
+
+	/**
+	 * Generate strings used for xml 'id' names
+	 * @return string
+	 * @private
+	 */
+	function getNameSpaceKey () {
+		return $this->mTitle->getNamespaceKey();
+	}
+
+	/**
+	 * @private
+	 */
+	function setupUserCss() {
+		$fname = 'SkinTemplate::setupUserCss';
+		wfProfileIn( $fname );
+
+		global $wgRequest, $wgAllowUserCss, $wgUseSiteCss, $wgContLang, $wgSquidMaxage, $wgStylePath, $wgUser;
+
+		$sitecss = '';
+		$usercss = '';
+		$siteargs = '&maxage=' . $wgSquidMaxage;
+		if( $this->loggedin ) {
+			// Ensure that logged-in users' generated CSS isn't clobbered
+			// by anons' publicly cacheable generated CSS.
+			$siteargs .= '&smaxage=0';
+		}
+
+		# Add user-specific code if this is a user and we allow that kind of thing
+
+		if ( $wgAllowUserCss && $this->loggedin ) {
+			$action = $wgRequest->getText('action');
+
+			# if we're previewing the CSS page, use it
+			if( $this->mTitle->isCssSubpage() and $this->userCanPreview( $action ) ) {
+				$siteargs = "&smaxage=0&maxage=0";
+				$usercss = $wgRequest->getText('wpTextbox1');
+			} else {
+				$usercss = '@import "' .
+				  self::makeUrl($this->userpage . '/'.$this->skinname.'.css',
+								 'action=raw&ctype=text/css') . '";' ."\n";
+			}
+
+			$siteargs .= '&ts=' . $wgUser->mTouched;
+		}
+
+		if( $wgContLang->isRTL() ) {
+			global $wgStyleVersion;
+			$sitecss .= "@import \"$wgStylePath/$this->stylename/rtl.css?$wgStyleVersion\";\n";
+		}
+
+		# If we use the site's dynamic CSS, throw that in, too
+		if ( $wgUseSiteCss ) {
+			$query = "usemsgcache=yes&action=raw&ctype=text/css&smaxage=$wgSquidMaxage";
+			$sitecss .= '@import "' . self::makeNSUrl( 'Common.css', $query, NS_MEDIAWIKI) . '";' . "\n";
+			$sitecss .= '@import "' . self::makeNSUrl( ucfirst( $this->skinname ) . '.css', $query, NS_MEDIAWIKI ) . '";' . "\n";
+			$sitecss .= '@import "' . self::makeUrl( '-', 'action=raw&gen=css' . $siteargs ) . '";' . "\n";
+		}
+
+		# If we use any dynamic CSS, make a little CDATA block out of it.
+
+		if ( !empty($sitecss) || !empty($usercss) ) {
+			$this->usercss = "/*<![CDATA[*/\n" . $sitecss . $usercss . '/*]]>*/';
+		}
+		wfProfileOut( $fname );
+	}
+
+	/**
+	 * @private
+	 */
+	function setupUserJs() {
+		$fname = 'SkinTemplate::setupUserJs';
+		wfProfileIn( $fname );
+
+		global $wgRequest, $wgAllowUserJs, $wgJsMimeType;
+		$action = $wgRequest->getText('action');
+
+		if( $wgAllowUserJs && $this->loggedin ) {
+			if( $this->mTitle->isJsSubpage() and $this->userCanPreview( $action ) ) {
+				# XXX: additional security check/prompt?
+				$this->userjsprev = '/*<![CDATA[*/ ' . $wgRequest->getText('wpTextbox1') . ' /*]]>*/';
+			} else {
+				$this->userjs = self::makeUrl($this->userpage.'/'.$this->skinname.'.js', 'action=raw&ctype='.$wgJsMimeType.'&dontcountme=s');
+			}
+		}
+		wfProfileOut( $fname );
+	}
+
+	/**
+	 * Code for extensions to hook into to provide per-page CSS, see
+	 * extensions/PageCSS/PageCSS.php for an implementation of this.
+	 *
+	 * @private
+	 */
+	function setupPageCss() {
+		$fname = 'SkinTemplate::setupPageCss';
+		wfProfileIn( $fname );
+		$out = false;
+		wfRunHooks( 'SkinTemplateSetupPageCss', array( &$out ) );
+
+		wfProfileOut( $fname );
+		return $out;
+	}
+
+	/**
+	 * returns css with user-specific options
+	 * @public
+	 */
+
+	function getUserStylesheet() {
+		$fname = 'SkinTemplate::getUserStylesheet';
+		wfProfileIn( $fname );
+
+		$s = "/* generated user stylesheet */\n";
+		$s .= $this->reallyDoGetUserStyles();
+		wfProfileOut( $fname );
+		return $s;
+	}
+
+	/**
+	 * This returns MediaWiki:Common.js and MediaWiki:[Skinname].js concate-
+	 * nated together.  For some bizarre reason, it does *not* return any
+	 * custom user JS from subpages.  Huh?
+	 *
+	 * There's absolutely no reason to have separate Monobook/Common JSes.
+	 * Any JS that cares can just check the skin variable generated at the
+	 * top.  For now Monobook.js will be maintained, but it should be consi-
+	 * dered deprecated.
+	 *
+	 * @return string
+	 */
+	public function getUserJs() {
+		$fname = 'SkinTemplate::getUserJs';
+		wfProfileIn( $fname );
+
+		$s = parent::getUserJs();
+		$s .= "\n\n/* MediaWiki:".ucfirst($this->skinname).".js (deprecated; migrate to Common.js!) */\n";
+
+		// avoid inclusion of non defined user JavaScript (with custom skins only)
+		// by checking for default message content
+		$msgKey = ucfirst($this->skinname).'.js';
+		$userJS = wfMsgForContent($msgKey);
+		if ( !wfEmptyMsg( $msgKey, $userJS ) ) {
+			$s .= $userJS;
+		}
+
+		wfProfileOut( $fname );
+		return $s;
+	}
+}
+
+/**
+ * Generic wrapper for template functions, with interface
+ * compatible with what we use of PHPTAL 0.7.
+ * @addtogroup Skins
+ */
+class QuickTemplate {
+	/**
+	 * @public
+	 */
+	function QuickTemplate() {
+		$this->data = array();
+		$this->translator = new MediaWiki_I18N();
+	}
+
+	/**
+	 * @public
+	 */
+	function set( $name, $value ) {
+		$this->data[$name] = $value;
+	}
+
+	/**
+	 * @public
+	 */
+	function setRef($name, &$value) {
+		$this->data[$name] =& $value;
+	}
+
+	/**
+	 * @public
+	 */
+	function setTranslator( &$t ) {
+		$this->translator = &$t;
+	}
+
+	/**
+	 * @public
+	 */
+	function execute() {
+		echo "Override this function.";
+	}
+
+
+	/**
+	 * @private
+	 */
+	function text( $str ) {
+		echo htmlspecialchars( $this->data[$str] );
+	}
+
+	/**
+	 * @private
+	 */
+	function jstext( $str ) {
+		echo Xml::escapeJsString( $this->data[$str] );
+	}
+
+	/**
+	 * @private
+	 */
+	function html( $str ) {
+		echo $this->data[$str];
+	}
+
+	/**
+	 * @private
+	 */
+	function msg( $str ) {
+		echo htmlspecialchars( $this->translator->translate( $str ) );
+	}
+
+	/**
+	 * @private
+	 */
+	function msgHtml( $str ) {
+		echo $this->translator->translate( $str );
+	}
+
+	/**
+	 * An ugly, ugly hack.
+	 * @private
+	 */
+	function msgWiki( $str ) {
+		global $wgParser, $wgTitle, $wgOut;
+
+		$text = $this->translator->translate( $str );
+		$parserOutput = $wgParser->parse( $text, $wgTitle,
+			$wgOut->parserOptions(), true );
+		echo $parserOutput->getText();
+	}
+
+	/**
+	 * @private
+	 */
+	function haveData( $str ) {
+		return isset( $this->data[$str] );
+	}
+
+	/**
+	 * @private
+	 */
+	function haveMsg( $str ) {
+		$msg = $this->translator->translate( $str );
+		return ($msg != '-') && ($msg != ''); # ????
+	}
+}
+?>
Index: /MediaWiki/branches/1.11/includes/SpecialAllmessages.php
===================================================================
--- /MediaWiki/branches/1.11/includes/SpecialAllmessages.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/SpecialAllmessages.php	(revision 1280)
@@ -0,0 +1,199 @@
+<?php
+/**
+ * Use this special page to get a list of the MediaWiki system messages.
+ * @addtogroup SpecialPage
+ */
+
+/**
+ * Constructor.
+ */
+function wfSpecialAllmessages() {
+	global $wgOut, $wgRequest, $wgMessageCache, $wgTitle;
+	global $wgUseDatabaseMessages;
+
+	# The page isn't much use if the MediaWiki namespace is not being used
+	if( !$wgUseDatabaseMessages ) {
+		$wgOut->addWikiText( wfMsg( 'allmessagesnotsupportedDB' ) );
+		return;
+	}
+
+	wfProfileIn( __METHOD__ );
+
+	wfProfileIn( __METHOD__ . '-setup' );
+	$ot = $wgRequest->getText( 'ot' );
+
+	$navText = wfMsg( 'allmessagestext' );
+
+	# Make sure all extension messages are available
+	MessageCache::loadAllMessages();
+
+	$sortedArray = array_merge( Language::getMessagesFor( 'en' ), $wgMessageCache->getExtensionMessagesFor( 'en' ) );
+	ksort( $sortedArray );
+	$messages = array();
+	$wgMessageCache->disableTransform();
+
+	foreach ( $sortedArray as $key => $value ) {
+		$messages[$key]['enmsg'] = $value;
+		$messages[$key]['statmsg'] = wfMsgNoDb( $key );
+		$messages[$key]['msg'] = wfMsg ( $key );
+	}
+
+	$wgMessageCache->enableTransform();
+	wfProfileOut( __METHOD__ . '-setup' );
+
+	wfProfileIn( __METHOD__ . '-output' );
+	if ( $ot == 'php' ) {
+		$navText .= makePhp( $messages );
+		$wgOut->addHTML( 'PHP | <a href="' . $wgTitle->escapeLocalUrl( 'ot=html' ) . '">HTML</a><pre>' . htmlspecialchars( $navText ) . '</pre>' );
+	} else {
+		$wgOut->addHTML( '<a href="' . $wgTitle->escapeLocalUrl( 'ot=php' ) . '">PHP</a> | HTML' );
+		$wgOut->addWikiText( $navText );
+		$wgOut->addHTML( makeHTMLText( $messages ) );
+	}
+	wfProfileOut( __METHOD__ . '-output' );
+
+	wfProfileOut( __METHOD__ );
+}
+
+/**
+ * Create the messages array, formatted in PHP to copy to language files.
+ * @param $messages Messages array.
+ * @return The PHP messages array.
+ * @todo Make suitable for language files.
+ */
+function makePhp( $messages ) {
+	global $wgLang;
+	$txt = "\n\n\$messages = array(\n";
+	foreach( $messages as $key => $m ) {
+		if( $wgLang->getCode() != 'en' && $m['msg'] == $m['enmsg'] ) {
+			continue;
+		} else if ( wfEmptyMsg( $key, $m['msg'] ) ) {
+			$m['msg'] = '';
+			$comment = ' #empty';
+		} else {
+			$comment = '';
+		}
+		$txt .= "'$key' => '" . preg_replace( '/(?<!\\\\)\'/', "\'", $m['msg']) . "',$comment\n";
+	}
+	$txt .= ');';
+	return $txt;
+}
+
+/**
+ * Create a list of messages, formatted in HTML as a list of messages and values and showing differences between the default language file message and the message in MediaWiki: namespace.
+ * @param $messages Messages array.
+ * @return The HTML list of messages.
+ */
+function makeHTMLText( $messages ) {
+	global $wgLang, $wgContLang, $wgUser;
+	wfProfileIn( __METHOD__ );
+
+	$sk = $wgUser->getSkin();
+	$talk = wfMsg( 'talkpagelinktext' );
+
+	$input = wfElement( 'input', array(
+		'type'    => 'text',
+		'id'      => 'allmessagesinput',
+		'onkeyup' => 'allmessagesfilter()'
+	), '' );
+	$checkbox = wfElement( 'input', array(
+		'type'    => 'button',
+		'value'   => wfMsgHtml( 'allmessagesmodified' ),
+		'id'      => 'allmessagescheckbox',
+		'onclick' => 'allmessagesmodified()'
+	), '' );
+
+	$txt = '<span id="allmessagesfilter" style="display: none;">' . wfMsgHtml( 'allmessagesfilter' ) . " {$input}{$checkbox} " . '</span>';
+
+	$txt .= '
+<table border="1" cellspacing="0" width="100%" id="allmessagestable">
+	<tr>
+		<th rowspan="2">' . wfMsgHtml( 'allmessagesname' ) . '</th>
+		<th>' . wfMsgHtml( 'allmessagesdefault' ) . '</th>
+	</tr>
+	<tr>
+		<th>' . wfMsgHtml( 'allmessagescurrent' ) . '</th>
+	</tr>';
+
+	wfProfileIn( __METHOD__ . "-check" );
+
+	# This is a nasty hack to avoid doing independent existence checks
+	# without sending the links and table through the slow wiki parser.
+	$pageExists = array(
+		NS_MEDIAWIKI => array(),
+		NS_MEDIAWIKI_TALK => array()
+	);
+	$dbr = wfGetDB( DB_SLAVE );
+	$page = $dbr->tableName( 'page' );
+	$sql = "SELECT page_namespace,page_title FROM $page WHERE page_namespace IN (" . NS_MEDIAWIKI . ", " . NS_MEDIAWIKI_TALK . ")";
+	$res = $dbr->query( $sql );
+	while( $s = $dbr->fetchObject( $res ) ) {
+		$pageExists[$s->page_namespace][$s->page_title] = true;
+	}
+	$dbr->freeResult( $res );
+	wfProfileOut( __METHOD__ . "-check" );
+
+	wfProfileIn( __METHOD__ . "-output" );
+
+	$i = 0;
+
+	foreach( $messages as $key => $m ) {
+		$title = $wgLang->ucfirst( $key );
+		if( $wgLang->getCode() != $wgContLang->getCode() ) {
+			$title .= '/' . $wgLang->getCode();
+		}
+
+		$titleObj =& Title::makeTitle( NS_MEDIAWIKI, $title );
+		$talkPage =& Title::makeTitle( NS_MEDIAWIKI_TALK, $title );
+
+		$changed = ( $m['statmsg'] != $m['msg'] );
+		$message = htmlspecialchars( $m['statmsg'] );
+		$mw = htmlspecialchars( $m['msg'] );
+
+		if( isset( $pageExists[NS_MEDIAWIKI][$title] ) ) {
+			$pageLink = $sk->makeKnownLinkObj( $titleObj, "<span id=\"sp-allmessages-i-$i\">" .  htmlspecialchars( $key ) . '</span>' );
+		} else {
+			$pageLink = $sk->makeBrokenLinkObj( $titleObj, "<span id=\"sp-allmessages-i-$i\">" .  htmlspecialchars( $key ) . '</span>' );
+		}
+		if( isset( $pageExists[NS_MEDIAWIKI_TALK][$title] ) ) {
+			$talkLink = $sk->makeKnownLinkObj( $talkPage, htmlspecialchars( $talk ) );
+		} else {
+			$talkLink = $sk->makeBrokenLinkObj( $talkPage, htmlspecialchars( $talk ) );
+		}
+		
+		$anchor = 'msg_' . htmlspecialchars( strtolower( $title ) );
+		$anchor = "<a id=\"$anchor\" name=\"$anchor\"></a>";
+
+		if( $changed ) {
+			$txt .= "
+	<tr class=\"orig\" id=\"sp-allmessages-r1-$i\">
+		<td rowspan=\"2\">
+			$anchor$pageLink<br />$talkLink
+		</td><td>
+$message
+		</td>
+	</tr><tr class=\"new\" id=\"sp-allmessages-r2-$i\">
+		<td>
+$mw
+		</td>
+	</tr>";
+		} else {
+			$txt .= "
+	<tr class=\"def\" id=\"sp-allmessages-r1-$i\">
+		<td>
+			$anchor$pageLink<br />$talkLink
+		</td><td>
+$mw
+		</td>
+	</tr>";
+		}
+		$i++;
+	}
+	$txt .= '</table>';
+	wfProfileOut( __METHOD__ . '-output' );
+
+	wfProfileOut( __METHOD__ );
+	return $txt;
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/SpecialAllpages.php
===================================================================
--- /MediaWiki/branches/1.11/includes/SpecialAllpages.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/SpecialAllpages.php	(revision 1280)
@@ -0,0 +1,367 @@
+<?php
+/**
+ * @addtogroup SpecialPage
+ */
+
+/**
+ * Entry point : initialise variables and call subfunctions.
+ * @param $par String: becomes "FOO" when called like Special:Allpages/FOO (default NULL)
+ * @param $specialPage See the SpecialPage object.
+ */
+function wfSpecialAllpages( $par=NULL, $specialPage ) {
+	global $wgRequest, $wgOut, $wgContLang;
+
+	# GET values
+	$from = $wgRequest->getVal( 'from' );
+	$namespace = $wgRequest->getInt( 'namespace' );
+
+	$namespaces = $wgContLang->getNamespaces();
+
+	$indexPage = new SpecialAllpages();
+
+	if( !in_array($namespace, array_keys($namespaces)) )
+		$namespace = 0;
+
+	$wgOut->setPagetitle( $namespace > 0 ?
+		wfMsg( 'allinnamespace', str_replace( '_', ' ', $namespaces[$namespace] ) ) :
+		wfMsg( 'allarticles' )
+		);
+
+	if ( isset($par) ) {
+		$indexPage->showChunk( $namespace, $par, $specialPage->including() );
+	} elseif ( isset($from) ) {
+		$indexPage->showChunk( $namespace, $from, $specialPage->including() );
+	} else {
+		$indexPage->showToplevel ( $namespace, $specialPage->including() );
+	}
+}
+
+/**
+ * Implements Special:Allpages
+ * @addtogroup SpecialPage
+ */
+class SpecialAllpages {
+	var $maxPerPage=960;
+	var $topLevelMax=50;
+	var $name='Allpages';
+	# Determines, which message describes the input field 'nsfrom' (->SpecialPrefixindex.php)
+	var $nsfromMsg='allpagesfrom';
+
+/**
+ * HTML for the top form
+ * @param integer $namespace A namespace constant (default NS_MAIN).
+ * @param string $from Article name we are starting listing at.
+ */
+function namespaceForm ( $namespace = NS_MAIN, $from = '' ) {
+	global $wgScript;
+	$t = SpecialPage::getTitleFor( $this->name );
+
+	$namespaceselect = HTMLnamespaceselector($namespace, null);
+
+	$frombox = "<input type='text' size='20' name='from' id='nsfrom' value=\""
+	            . htmlspecialchars ( $from ) . '"/>';
+	$submitbutton = '<input type="submit" value="' . wfMsgHtml( 'allpagessubmit' ) . '" />';
+
+	$out = "<div class='namespaceoptions'><form method='get' action='{$wgScript}'>";
+	$out .= '<input type="hidden" name="title" value="'.$t->getPrefixedText().'" />';
+	$out .= "
+<table id='nsselect' class='allpages'>
+	<tr>
+		<td align='right'>" . wfMsgHtml($this->nsfromMsg) . "</td>
+		<td align='left'><label for='nsfrom'>$frombox</label></td>
+	</tr>
+	<tr>
+		<td align='right'><label for='namespace'>" . wfMsgHtml('namespace') . "</label></td>
+		<td align='left'>
+			$namespaceselect $submitbutton
+		</td>
+	</tr>
+</table>
+";
+	$out .= '</form></div>';
+		return $out;
+}
+
+/**
+ * @param integer $namespace (default NS_MAIN)
+ */
+function showToplevel ( $namespace = NS_MAIN, $including = false ) {
+	global $wgOut;
+	$fname = "indexShowToplevel";
+
+	# TODO: Either make this *much* faster or cache the title index points
+	# in the querycache table.
+
+	$dbr = wfGetDB( DB_SLAVE );
+	$out = "";
+	$where = array( 'page_namespace' => $namespace );
+
+	global $wgMemc;
+	$key = wfMemcKey( 'allpages', 'ns', $namespace );
+	$lines = $wgMemc->get( $key );
+
+	if( !is_array( $lines ) ) {
+		$firstTitle = $dbr->selectField( 'page', 'page_title', $where, $fname, array( 'LIMIT' => 1 ) );
+		$lastTitle = $firstTitle;
+
+		# This array is going to hold the page_titles in order.
+		$lines = array( $firstTitle );
+
+		# If we are going to show n rows, we need n+1 queries to find the relevant titles.
+		$done = false;
+		for( $i = 0; !$done; ++$i ) {
+			// Fetch the last title of this chunk and the first of the next
+			$chunk = is_null( $lastTitle )
+				? ''
+				: 'page_title >= ' . $dbr->addQuotes( $lastTitle );
+			$res = $dbr->select(
+				'page', /* FROM */
+				'page_title', /* WHAT */
+				$where + array( $chunk),
+				$fname,
+				array ('LIMIT' => 2, 'OFFSET' => $this->maxPerPage - 1, 'ORDER BY' => 'page_title') );
+
+			if ( $s = $dbr->fetchObject( $res ) ) {
+				array_push( $lines, $s->page_title );
+			} else {
+				// Final chunk, but ended prematurely. Go back and find the end.
+				$endTitle = $dbr->selectField( 'page', 'MAX(page_title)',
+					array(
+						'page_namespace' => $namespace,
+						$chunk
+					), $fname );
+				array_push( $lines, $endTitle );
+				$done = true;
+			}
+			if( $s = $dbr->fetchObject( $res ) ) {
+				array_push( $lines, $s->page_title );
+				$lastTitle = $s->page_title;
+			} else {
+				// This was a final chunk and ended exactly at the limit.
+				// Rare but convenient!
+				$done = true;
+			}
+			$dbr->freeResult( $res );
+		}
+		$wgMemc->add( $key, $lines, 3600 );
+	}
+
+	// If there are only two or less sections, don't even display them.
+	// Instead, display the first section directly.
+	if( count( $lines ) <= 2 ) {
+		$this->showChunk( $namespace, '', $including );
+		return;
+	}
+
+	# At this point, $lines should contain an even number of elements.
+	$out .= "<table class='allpageslist' style='background: inherit;'>";
+	while ( count ( $lines ) > 0 ) {
+		$inpoint = array_shift ( $lines );
+		$outpoint = array_shift ( $lines );
+		$out .= $this->showline ( $inpoint, $outpoint, $namespace, false );
+	}
+	$out .= '</table>';
+	$nsForm = $this->namespaceForm ( $namespace, '', false );
+
+	# Is there more?
+	if ( $including ) {
+		$out2 = '';
+	} else {
+		$morelinks = '';
+		if ( $morelinks != '' ) {
+			$out2 = '<table style="background: inherit;" width="100%" cellpadding="0" cellspacing="0" border="0">';
+			$out2 .= '<tr valign="top"><td align="left">' . $nsForm;
+			$out2 .= '</td><td align="right" style="font-size: smaller; margin-bottom: 1em;">';
+			$out2 .= $morelinks . '</td></tr></table><hr />';
+		} else {
+			$out2 = $nsForm . '<hr />';
+		}
+	}
+
+	$wgOut->addHtml( $out2 . $out );
+}
+
+/**
+ * @todo Document
+ * @param string $from
+ * @param integer $namespace (Default NS_MAIN)
+ */
+function showline( $inpoint, $outpoint, $namespace = NS_MAIN ) {
+	$inpointf = htmlspecialchars( str_replace( '_', ' ', $inpoint ) );
+	$outpointf = htmlspecialchars( str_replace( '_', ' ', $outpoint ) );
+	$queryparams = ($namespace ? "namespace=$namespace" : '');
+	$special = SpecialPage::getTitleFor( $this->name, $inpoint );
+	$link = $special->escapeLocalUrl( $queryparams );
+
+	$out = wfMsgHtml(
+		'alphaindexline',
+		"<a href=\"$link\">$inpointf</a></td><td><a href=\"$link\">",
+		"</a></td><td align=\"left\"><a href=\"$link\">$outpointf</a>"
+	);
+	return '<tr><td align="right">'.$out.'</td></tr>';
+}
+
+/**
+ * @param integer $namespace (Default NS_MAIN)
+ * @param string $from list all pages from this name (default FALSE)
+ */
+function showChunk( $namespace = NS_MAIN, $from, $including = false ) {
+	global $wgOut, $wgUser, $wgContLang;
+
+	$fname = 'indexShowChunk';
+
+	$sk = $wgUser->getSkin();
+
+	$fromList = $this->getNamespaceKeyAndText($namespace, $from);
+	$n = 0;
+        
+	if ( !$fromList ) {
+		$out = wfMsgWikiHtml( 'allpagesbadtitle' );
+	} else {
+		list( $namespace, $fromKey, $from ) = $fromList;
+
+		$dbr = wfGetDB( DB_SLAVE );
+		$res = $dbr->select( 'page',
+			array( 'page_namespace', 'page_title', 'page_is_redirect' ),
+			array(
+				'page_namespace' => $namespace,
+				'page_title >= ' . $dbr->addQuotes( $fromKey )
+			),
+			$fname,
+			array(
+				'ORDER BY'  => 'page_title',
+				'LIMIT'     => $this->maxPerPage + 1,
+				'USE INDEX' => 'name_title',
+			)
+		);
+
+		$out = '<table style="background: inherit;" border="0" width="100%">';
+
+		while( ($n < $this->maxPerPage) && ($s = $dbr->fetchObject( $res )) ) {
+			$t = Title::makeTitle( $s->page_namespace, $s->page_title );
+			if( $t ) {
+				$link = ($s->page_is_redirect ? '<div class="allpagesredirect">' : '' ) .
+					$sk->makeKnownLinkObj( $t, htmlspecialchars( $t->getText() ), false, false ) .
+					($s->page_is_redirect ? '</div>' : '' );
+			} else {
+				$link = '[[' . htmlspecialchars( $s->page_title ) . ']]';
+			}
+			if( $n % 3 == 0 ) {
+				$out .= '<tr>';
+			}
+			$out .= "<td>$link</td>";
+			$n++;
+			if( $n % 3 == 0 ) {
+				$out .= '</tr>';
+			}
+		}
+		if( ($n % 3) != 0 ) {
+			$out .= '</tr>';
+		}
+		$out .= '</table>';
+	}
+
+	if ( $including ) {
+		$out2 = '';
+	} else {
+		if( $from == '' ) {
+			// First chunk; no previous link.
+			$prevTitle = null;
+		} else {
+			# Get the last title from previous chunk
+			$dbr = wfGetDB( DB_SLAVE );
+			$res_prev = $dbr->select(
+				'page',
+				'page_title',
+				array( 'page_namespace' => $namespace, 'page_title < '.$dbr->addQuotes($from) ),
+				$fname,
+				array( 'ORDER BY' => 'page_title DESC', 'LIMIT' => $this->maxPerPage, 'OFFSET' => ($this->maxPerPage - 1 ) )
+			);
+
+			# Get first title of previous complete chunk
+			if( $dbr->numrows( $res_prev ) >= $this->maxPerPage ) {
+				$pt = $dbr->fetchObject( $res_prev );
+				$prevTitle = Title::makeTitle( $namespace, $pt->page_title );
+			} else {
+				# The previous chunk is not complete, need to link to the very first title
+				# available in the database
+				$reallyFirstPage_title = $dbr->selectField( 'page', 'page_title', array( 'page_namespace' => $namespace ), $fname, array( 'LIMIT' => 1) );
+
+				# Show the previous link if it s not the current requested chunk
+				if( $from != $reallyFirstPage_title ) {
+					$prevTitle =  Title::makeTitle( $namespace, $reallyFirstPage_title );
+				} else {
+					$prevTitle = null;
+				}
+			}
+		}
+
+		$nsForm = $this->namespaceForm ( $namespace, $from );
+		$out2 = '<table style="background: inherit;" width="100%" cellpadding="0" cellspacing="0" border="0">';
+		$out2 .= '<tr valign="top"><td align="left">' . $nsForm;
+		$out2 .= '</td><td align="right" style="font-size: smaller; margin-bottom: 1em;">' .
+				$sk->makeKnownLink( $wgContLang->specialPage( "Allpages" ),
+					wfMsgHtml ( 'allpages' ) );
+
+		$self = SpecialPage::getTitleFor( 'Allpages' );
+
+		# Do we put a previous link ?
+		if( isset( $prevTitle ) &&  $pt = $prevTitle->getText() ) {
+			$q = 'from=' . $prevTitle->getPartialUrl() . ( $namespace ? '&namespace=' . $namespace : '' );
+			$prevLink = $sk->makeKnownLinkObj( $self, wfMsgHTML( 'prevpage', $pt ), $q );
+			$out2 .= ' | ' . $prevLink;
+		}
+
+		if( $n == $this->maxPerPage && $s = $dbr->fetchObject($res) ) {
+			# $s is the first link of the next chunk
+			$t = Title::MakeTitle($namespace, $s->page_title);
+			$q = 'from=' . $t->getPartialUrl() . ( $namespace ? '&namespace=' . $namespace : '' );
+			$nextLink = $sk->makeKnownLinkObj( $self, wfMsgHtml( 'nextpage', $t->getText() ), $q );
+			$out2 .= ' | ' . $nextLink;
+		}
+		$out2 .= "</td></tr></table><hr />";
+	}
+
+	$wgOut->addHtml( $out2 . $out );
+	if( isset($prevLink) or isset($nextLink) ) {
+		$wgOut->addHtml( '<hr/><p style="font-size: smaller; float: right;">' );
+		if( isset( $prevLink ) )
+			$wgOut->addHTML( $prevLink . ' | ');
+		if( isset( $nextLink ) )
+			$wgOut->addHTML( $nextLink );
+		$wgOut->addHTML( '</p>' );
+
+	}
+	
+}
+	
+/**
+ * @param int $ns the namespace of the article
+ * @param string $text the name of the article
+ * @return array( int namespace, string dbkey, string pagename ) or NULL on error
+ * @static (sort of)
+ * @access private
+ */
+function getNamespaceKeyAndText ($ns, $text) {
+	if ( $text == '' )
+		return array( $ns, '', '' ); # shortcut for common case
+
+	$t = Title::makeTitleSafe($ns, $text);
+	if ( $t && $t->isLocal() ) {
+		return array( $t->getNamespace(), $t->getDBkey(), $t->getText() );
+	} else if ( $t ) {
+		return NULL;
+	}
+
+	# try again, in case the problem was an empty pagename
+	$text = preg_replace('/(#|$)/', 'X$1', $text);
+	$t = Title::makeTitleSafe($ns, $text);
+	if ( $t && $t->isLocal() ) {
+		return array( $t->getNamespace(), '', '' );
+	} else {
+		return NULL;
+	}
+}
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/SpecialAncientpages.php
===================================================================
--- /MediaWiki/branches/1.11/includes/SpecialAncientpages.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/SpecialAncientpages.php	(revision 1280)
@@ -0,0 +1,63 @@
+<?php
+/**
+ *
+ * @addtogroup SpecialPage
+ */
+
+/**
+ * Implements Special:Ancientpages
+ * @addtogroup SpecialPage
+ */
+class AncientPagesPage extends QueryPage {
+
+	function getName() {
+		return "Ancientpages";
+	}
+
+	function isExpensive() {
+		return true;
+	}
+
+	function isSyndicated() { return false; }
+
+	function getSQL() {
+		global $wgDBtype;
+		$db = wfGetDB( DB_SLAVE );
+		$page = $db->tableName( 'page' );
+		$revision = $db->tableName( 'revision' );
+		#$use_index = $db->useIndexClause( 'cur_timestamp' ); # FIXME! this is gone
+		$epoch = $wgDBtype == 'mysql' ? 'UNIX_TIMESTAMP(rev_timestamp)' :
+			'EXTRACT(epoch FROM rev_timestamp)';
+		return
+			"SELECT 'Ancientpages' as type,
+					page_namespace as namespace,
+			        page_title as title,
+			        $epoch as value
+			FROM $page, $revision
+			WHERE page_namespace=".NS_MAIN." AND page_is_redirect=0
+			  AND page_latest=rev_id";
+	}
+
+	function sortDescending() {
+		return false;
+	}
+
+	function formatResult( $skin, $result ) {
+		global $wgLang, $wgContLang;
+
+		$d = $wgLang->timeanddate( wfTimestamp( TS_MW, $result->value ), true );
+		$title = Title::makeTitle( $result->namespace, $result->title );
+		$link = $skin->makeKnownLinkObj( $title, htmlspecialchars( $wgContLang->convert( $title->getPrefixedText() ) ) );
+		return wfSpecialList($link, $d);
+	}
+}
+
+function wfSpecialAncientpages() {
+	list( $limit, $offset ) = wfCheckLimits();
+
+	$app = new AncientPagesPage();
+
+	$app->doQuery( $offset, $limit );
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/SpecialBlockip.php
===================================================================
--- /MediaWiki/branches/1.11/includes/SpecialBlockip.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/SpecialBlockip.php	(revision 1280)
@@ -0,0 +1,474 @@
+<?php
+/**
+ * Constructor for Special:Blockip page
+ *
+ * @addtogroup SpecialPage
+ */
+
+/**
+ * Constructor
+ */
+function wfSpecialBlockip( $par ) {
+	global $wgUser, $wgOut, $wgRequest;
+
+	# Can't block when the database is locked
+	if( wfReadOnly() ) {
+		$wgOut->readOnlyPage();
+		return;
+	}
+
+	# Permission check
+	if( !$wgUser->isAllowed( 'block' ) ) {
+		$wgOut->permissionRequired( 'block' );
+		return;
+	}
+
+	$ipb = new IPBlockForm( $par );
+
+	$action = $wgRequest->getVal( 'action' );
+	if ( 'success' == $action ) {
+		$ipb->showSuccess();
+	} else if ( $wgRequest->wasPosted() && 'submit' == $action &&
+		$wgUser->matchEditToken( $wgRequest->getVal( 'wpEditToken' ) ) ) {
+		$ipb->doSubmit();
+	} else {
+		$ipb->showForm( '' );
+	}
+}
+
+/**
+ * Form object for the Special:Blockip page.
+ *
+ * @addtogroup SpecialPage
+ */
+class IPBlockForm {
+	var $BlockAddress, $BlockExpiry, $BlockReason;
+
+	function IPBlockForm( $par ) {
+		global $wgRequest, $wgUser;
+
+		$this->BlockAddress = $wgRequest->getVal( 'wpBlockAddress', $wgRequest->getVal( 'ip', $par ) );
+		$this->BlockAddress = strtr( $this->BlockAddress, '_', ' ' );
+		$this->BlockReason = $wgRequest->getText( 'wpBlockReason' );
+		$this->BlockReasonList = $wgRequest->getText( 'wpBlockReasonList' );
+		$this->BlockExpiry = $wgRequest->getVal( 'wpBlockExpiry', wfMsg('ipbotheroption') );
+		$this->BlockOther = $wgRequest->getVal( 'wpBlockOther', '' );
+
+		# Unchecked checkboxes are not included in the form data at all, so having one
+		# that is true by default is a bit tricky
+		$byDefault = !$wgRequest->wasPosted();
+		$this->BlockAnonOnly = $wgRequest->getBool( 'wpAnonOnly', $byDefault );
+		$this->BlockCreateAccount = $wgRequest->getBool( 'wpCreateAccount', $byDefault );
+		$this->BlockEnableAutoblock = $wgRequest->getBool( 'wpEnableAutoblock', $byDefault );
+		# Re-check user's rights to hide names, very serious, defaults to 0
+		$this->BlockHideName = $wgRequest->getBool( 'wpHideName', 0 ) && $wgUser->isAllowed( 'hideuser' );
+	}
+
+	function showForm( $err ) {
+		global $wgOut, $wgUser, $wgSysopUserBans;
+
+		$wgOut->setPagetitle( wfMsg( 'blockip' ) );
+		$wgOut->addWikiText( wfMsg( 'blockiptext' ) );
+
+		if($wgSysopUserBans) {
+			$mIpaddress = Xml::label( wfMsg( 'ipadressorusername' ), 'mw-bi-target' );
+		} else {
+			$mIpaddress = Xml::label( wfMsg( 'ipadress' ), 'mw-bi-target' );
+		}
+		$mIpbexpiry = Xml::label( wfMsg( 'ipbexpiry' ), 'wpBlockExpiry' );
+		$mIpbother = Xml::label( wfMsg( 'ipbother' ), 'mw-bi-other' );
+		$mIpbothertime = wfMsgHtml( 'ipbotheroption' );
+		$mIpbreasonother = Xml::label( wfMsg( 'ipbreason' ), 'wpBlockReasonList' );
+		$mIpbreason = Xml::label( wfMsg( 'ipbotherreason' ), 'mw-bi-reason' );
+		$mIpbreasonotherlist = wfMsgHtml( 'ipbreasonotherlist' );
+
+		$titleObj = SpecialPage::getTitleFor( 'Blockip' );
+		$action = $titleObj->escapeLocalURL( "action=submit" );
+
+		if ( "" != $err ) {
+			$wgOut->setSubtitle( wfMsgHtml( 'formerror' ) );
+			$wgOut->addHTML( "<p class='error'>{$err}</p>\n" );
+		}
+
+		$scBlockExpiryOptions = wfMsgForContent( 'ipboptions' );
+
+		$showblockoptions = $scBlockExpiryOptions != '-';
+		if (!$showblockoptions)
+			$mIpbother = $mIpbexpiry;
+
+		$blockExpiryFormOptions = "<option value=\"other\">$mIpbothertime</option>";
+		foreach (explode(',', $scBlockExpiryOptions) as $option) {
+			if ( strpos($option, ":") === false ) $option = "$option:$option";
+			list($show, $value) = explode(":", $option);
+			$show = htmlspecialchars($show);
+			$value = htmlspecialchars($value);
+			$selected = "";
+			if ($this->BlockExpiry === $value)
+				$selected = ' selected="selected"';
+			$blockExpiryFormOptions .= "<option value=\"$value\"$selected>$show</option>";
+		}
+
+		$scBlockReasonList = wfMsgForContent( 'ipbreason-dropdown' );
+		$blockReasonList = '';
+		if ( $scBlockReasonList != '' && $scBlockReasonList != '-' ) { 
+			$blockReasonList = "<option value=\"other\">$mIpbreasonotherlist</option>";
+			$optgroup = "";
+			foreach ( explode( "\n", $scBlockReasonList ) as $option) {
+				$value = trim( htmlspecialchars($option) );
+				if ( $value == '' ) {
+					continue;
+				} elseif ( substr( $value, 0, 1) == '*' && substr( $value, 1, 1) != '*' ) {
+					// A new group is starting ...
+					$value = trim( substr( $value, 1 ) );
+					$blockReasonList .= "$optgroup<optgroup label=\"$value\">";
+					$optgroup = "</optgroup>";
+				} elseif ( substr( $value, 0, 2) == '**' ) {
+					// groupmember
+					$selected = "";
+					$value = trim( substr( $value, 2 ) );
+					if ( $this->BlockReasonList === $value)
+						$selected = ' selected="selected"';
+					$blockReasonList .= "<option value=\"$value\"$selected>$value</option>";
+				} else {
+					// groupless block reason
+					$selected = "";
+					if ( $this->BlockReasonList === $value)
+						$selected = ' selected="selected"';
+					$blockReasonList .= "$optgroup<option value=\"$value\"$selected>$value</option>";
+					$optgroup = "";
+				}
+			}
+			$blockReasonList .= $optgroup;
+		}
+
+		$token = htmlspecialchars( $wgUser->editToken() );
+
+		global $wgStylePath, $wgStyleVersion;
+		$wgOut->addHTML( "
+<script type=\"text/javascript\" src=\"$wgStylePath/common/block.js?$wgStyleVersion\">
+</script>
+<form id=\"blockip\" method=\"post\" action=\"{$action}\">
+	<table border='0'>
+		<tr>
+			<td align=\"right\">{$mIpaddress}:</td>
+			<td align=\"left\">
+				" . Xml::input( 'wpBlockAddress', 45, $this->BlockAddress,
+					array(
+						'tabindex' => '1',
+						'id' => 'mw-bi-target',
+						'onchange' => 'updateBlockOptions()' ) ) . "
+			</td>
+		</tr>
+		<tr>");
+		if ($showblockoptions) {
+			$wgOut->addHTML("
+			<td align=\"right\">{$mIpbexpiry}:</td>
+			<td align=\"left\">
+				<select tabindex='2' id='wpBlockExpiry' name=\"wpBlockExpiry\" onchange=\"considerChangingExpiryFocus()\">
+					$blockExpiryFormOptions
+				</select>
+			</td>
+			");
+		}
+		$wgOut->addHTML("
+		</tr>
+		<tr id='wpBlockOther'>
+			<td align=\"right\">{$mIpbother}:</td>
+			<td align=\"left\">
+				" . Xml::input( 'wpBlockOther', 45, $this->BlockOther,
+					array( 'tabindex' => '3', 'id' => 'mw-bi-other' ) ) . "
+			</td>
+		</tr>");
+		if ( $blockReasonList != '' ) {
+			$wgOut->addHTML("
+			<tr>
+				<td align=\"right\">{$mIpbreasonother}:</td>
+				<td align=\"left\">
+					<select tabindex='4' id=\"wpBlockReasonList\" name=\"wpBlockReasonList\">
+						$blockReasonList
+						</select>
+				</td>
+			</tr>");
+		}
+		$wgOut->addHTML("
+		<tr id=\"wpBlockReason\">
+			<td align=\"right\">{$mIpbreason}:</td>
+			<td align=\"left\">
+				" . Xml::input( 'wpBlockReason', 45, $this->BlockReason,
+					array( 'tabindex' => '5', 'id' => 'mw-bi-reason' ) ) . "
+			</td>
+		</tr>
+		<tr id='wpAnonOnlyRow'>
+			<td>&nbsp;</td>
+			<td align=\"left\">
+				" . wfCheckLabel( wfMsgHtml( 'ipbanononly' ),
+					'wpAnonOnly', 'wpAnonOnly', $this->BlockAnonOnly,
+					array( 'tabindex' => '6' ) ) . "
+			</td>
+		</tr>
+		<tr id='wpCreateAccountRow'>
+			<td>&nbsp;</td>
+			<td align=\"left\">
+				" . wfCheckLabel( wfMsgHtml( 'ipbcreateaccount' ),
+					'wpCreateAccount', 'wpCreateAccount', $this->BlockCreateAccount,
+					array( 'tabindex' => '7' ) ) . "
+			</td>
+		</tr>
+		<tr id='wpEnableAutoblockRow'>
+			<td>&nbsp;</td>
+			<td align=\"left\">
+				" . wfCheckLabel( wfMsgHtml( 'ipbenableautoblock' ),
+						'wpEnableAutoblock', 'wpEnableAutoblock', $this->BlockEnableAutoblock,
+							array( 'tabindex' => '8' ) ) . "
+			</td>
+		</tr>
+		");
+		// Allow some users to hide name from block log, blocklist and listusers
+		if ( $wgUser->isAllowed( 'hideuser' ) ) {
+			$wgOut->addHTML("
+			<tr>
+			<td>&nbsp;</td>
+				<td align=\"left\">
+					" . wfCheckLabel( wfMsgHtml( 'ipbhidename' ),
+							'wpHideName', 'wpHideName', $this->BlockHideName,
+								array( 'tabindex' => '9' ) ) . "
+				</td>
+			</tr>
+			");
+		}
+		$wgOut->addHTML("
+		<tr>
+			<td style='padding-top: 1em'>&nbsp;</td>
+			<td style='padding-top: 1em' align=\"left\">
+				" . Xml::submitButton( wfMsgHtml( 'ipbsubmit' ),
+							array( 'name' => 'wpBlock', 'tabindex' => '10' ) ) . "
+			</td>
+		</tr>
+	</table>" .
+	Xml::hidden( 'wpEditToken', $token ) .
+"</form>
+<script type=\"text/javascript\">updateBlockOptions()</script>
+\n" );
+
+		$wgOut->addHtml( $this->getConvenienceLinks() );
+
+		$user = User::newFromName( $this->BlockAddress );
+		if( is_object( $user ) ) {
+			$this->showLogFragment( $wgOut, $user->getUserPage() );
+		} elseif( preg_match( '/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/', $this->BlockAddress ) ) {
+			$this->showLogFragment( $wgOut, Title::makeTitle( NS_USER, $this->BlockAddress ) );
+		} elseif( preg_match( '/^\w{1,4}:\w{1,4}:\w{1,4}:\w{1,4}:\w{1,4}:\w{1,4}:\w{1,4}:\w{1,4}/', $this->BlockAddress ) ) {
+			$this->showLogFragment( $wgOut, Title::makeTitle( NS_USER, $this->BlockAddress ) );
+		}
+	}
+
+	function doSubmit() {
+		global $wgOut, $wgUser, $wgSysopUserBans, $wgSysopRangeBans;
+
+		$userId = 0;
+		# Expand valid IPv6 addresses, usernames are left as is
+		$this->BlockAddress = IP::sanitizeIP( $this->BlockAddress );
+		# isIPv4() and IPv6() are used for final validation
+		$rxIP4 = '\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}';
+		$rxIP6 = '\w{1,4}:\w{1,4}:\w{1,4}:\w{1,4}:\w{1,4}:\w{1,4}:\w{1,4}:\w{1,4}';
+		$rxIP = "($rxIP4|$rxIP6)";
+		
+		# Check for invalid specifications
+		if ( !preg_match( "/^$rxIP$/", $this->BlockAddress ) ) {
+			$matches = array();
+		  	if ( preg_match( "/^($rxIP4)\\/(\\d{1,2})$/", $this->BlockAddress, $matches ) ) {
+		  		# IPv4
+				if ( $wgSysopRangeBans ) {
+					if ( !IP::isIPv4( $this->BlockAddress ) || $matches[2] < 16 || $matches[2] > 32 ) {
+						$this->showForm( wfMsg( 'ip_range_invalid' ) );
+						return;
+					}
+					$this->BlockAddress = Block::normaliseRange( $this->BlockAddress );
+				} else {
+					# Range block illegal
+					$this->showForm( wfMsg( 'range_block_disabled' ) );
+					return;
+				}
+			} else if ( preg_match( "/^($rxIP6)\\/(\\d{1,3})$/", $this->BlockAddress, $matches ) ) {
+		  		# IPv6
+				if ( $wgSysopRangeBans ) {
+					if ( !IP::isIPv6( $this->BlockAddress ) || $matches[2] < 64 || $matches[2] > 128 ) {
+						$this->showForm( wfMsg( 'ip_range_invalid' ) );
+						return;
+					}
+					$this->BlockAddress = Block::normaliseRange( $this->BlockAddress );
+				} else {
+					# Range block illegal
+					$this->showForm( wfMsg( 'range_block_disabled' ) );
+					return;
+				}
+			} else {
+				# Username block
+				if ( $wgSysopUserBans ) {
+					$user = User::newFromName( $this->BlockAddress );
+					if( !is_null( $user ) && $user->getID() ) {
+						# Use canonical name
+						$this->BlockAddress = $user->getName();
+						$userId = $user->getID();
+					} else {
+						$this->showForm( wfMsg( 'nosuchusershort', htmlspecialchars( $this->BlockAddress ) ) );
+						return;
+					}
+				} else {
+					$this->showForm( wfMsg( 'badipaddress' ) );
+					return;
+				}
+			}
+		}
+
+		$reasonstr = $this->BlockReasonList;
+		if ( $reasonstr != 'other' && $this->BlockReason != '') {
+			// Entry from drop down menu + additional comment
+			$reasonstr .= ': ' . $this->BlockReason;
+		} elseif ( $reasonstr == 'other' ) {
+			$reasonstr = $this->BlockReason;
+		}
+
+		$expirestr = $this->BlockExpiry;
+		if( $expirestr == 'other' )
+			$expirestr = $this->BlockOther;
+
+		if (strlen($expirestr) == 0) {
+			$this->showForm( wfMsg( 'ipb_expiry_invalid' ) );
+			return;
+		}
+
+		if ( $expirestr == 'infinite' || $expirestr == 'indefinite' ) {
+			$expiry = Block::infinity();
+		} else {
+			# Convert GNU-style date, on error returns -1 for PHP <5.1 and false for PHP >=5.1
+			$expiry = strtotime( $expirestr );
+
+			if ( $expiry < 0 || $expiry === false ) {
+				$this->showForm( wfMsg( 'ipb_expiry_invalid' ) );
+				return;
+			}
+
+			$expiry = wfTimestamp( TS_MW, $expiry );
+		}
+
+		# Create block
+		# Note: for a user block, ipb_address is only for display purposes
+
+		$block = new Block( $this->BlockAddress, $userId, $wgUser->getID(),
+			$reasonstr, wfTimestampNow(), 0, $expiry, $this->BlockAnonOnly,
+			$this->BlockCreateAccount, $this->BlockEnableAutoblock, $this->BlockHideName);
+
+		if (wfRunHooks('BlockIp', array(&$block, &$wgUser))) {
+
+			if ( !$block->insert() ) {
+				$this->showForm( wfMsg( 'ipb_already_blocked',
+					htmlspecialchars( $this->BlockAddress ) ) );
+				return;
+			}
+
+			wfRunHooks('BlockIpComplete', array($block, $wgUser));
+
+			# Prepare log parameters
+			$logParams = array();
+			$logParams[] = $expirestr;
+			$logParams[] = $this->blockLogFlags();
+
+			# Make log entry, if the name is hidden, put it in the oversight log
+			$log_type = ($this->BlockHideName) ? 'oversight' : 'block';
+			$log = new LogPage( $log_type );
+			$log->addEntry( 'block', Title::makeTitle( NS_USER, $this->BlockAddress ),
+			  $reasonstr, $logParams );
+
+			# Report to the user
+			$titleObj = SpecialPage::getTitleFor( 'Blockip' );
+			$wgOut->redirect( $titleObj->getFullURL( 'action=success&ip=' .
+				urlencode( $this->BlockAddress ) ) );
+		}
+	}
+
+	function showSuccess() {
+		global $wgOut;
+
+		$wgOut->setPagetitle( wfMsg( 'blockip' ) );
+		$wgOut->setSubtitle( wfMsg( 'blockipsuccesssub' ) );
+		$text = wfMsg( 'blockipsuccesstext', $this->BlockAddress );
+		$wgOut->addWikiText( $text );
+	}
+
+	function showLogFragment( $out, $title ) {
+		$out->addHtml( wfElement( 'h2', NULL, LogPage::logName( 'block' ) ) );
+		$request = new FauxRequest( array( 'page' => $title->getPrefixedText(), 'type' => 'block' ) );
+		$viewer = new LogViewer( new LogReader( $request ) );
+		$viewer->showList( $out );
+	}
+
+	/**
+	 * Return a comma-delimited list of "flags" to be passed to the log
+	 * reader for this block, to provide more information in the logs
+	 *
+	 * @return array
+	 */
+	private function blockLogFlags() {
+		$flags = array();
+		if( $this->BlockAnonOnly && IP::isIPAddress( $this->BlockAddress ) )
+					// when blocking a user the option 'anononly' is not available/has no effect -> do not write this into log
+			$flags[] = 'anononly';
+		if( $this->BlockCreateAccount )
+			$flags[] = 'nocreate';
+		if( !$this->BlockEnableAutoblock )
+			$flags[] = 'noautoblock';
+		return implode( ',', $flags );
+	}
+
+	/**
+	 * Builds unblock and block list links
+	 *
+	 * @return string
+	 */
+	private function getConvenienceLinks() {
+		global $wgUser;
+		$skin = $wgUser->getSkin();
+		$links[] = $skin->makeLink ( 'MediaWiki:ipbreason-dropdown', wfMsgHtml( 'ipb-edit-dropdown' ) );
+		$links[] = $this->getUnblockLink( $skin );
+		$links[] = $this->getBlockListLink( $skin );
+		return '<p class="mw-ipb-conveniencelinks">' . implode( ' | ', $links ) . '</p>';
+	}
+
+	/**
+	 * Build a convenient link to unblock the given username or IP
+	 * address, if available; otherwise link to a blank unblock
+	 * form
+	 *
+	 * @param $skin Skin to use
+	 * @return string
+	 */
+	private function getUnblockLink( $skin ) {
+		$list = SpecialPage::getTitleFor( 'Ipblocklist' );
+		if( $this->BlockAddress ) {
+			$addr = htmlspecialchars( strtr( $this->BlockAddress, '_', ' ' ) );
+			return $skin->makeKnownLinkObj( $list, wfMsgHtml( 'ipb-unblock-addr', $addr ),
+				'action=unblock&ip=' . urlencode( $this->BlockAddress ) );
+		} else {
+			return $skin->makeKnownLinkObj( $list, wfMsgHtml( 'ipb-unblock' ),	'action=unblock' );
+		}
+	}
+
+	/**
+	 * Build a convenience link to the block list
+	 *
+	 * @param $skin Skin to use
+	 * @return string
+	 */
+	private function getBlockListLink( $skin ) {
+		$list = SpecialPage::getTitleFor( 'Ipblocklist' );
+		if( $this->BlockAddress ) {
+			$addr = htmlspecialchars( strtr( $this->BlockAddress, '_', ' ' ) );
+			return $skin->makeKnownLinkObj( $list, wfMsgHtml( 'ipb-blocklist-addr', $addr ),
+				'ip=' . urlencode( $this->BlockAddress ) );
+		} else {
+			return $skin->makeKnownLinkObj( $list, wfMsgHtml( 'ipb-blocklist' ) );
+		}
+	}
+}
+?>
Index: /MediaWiki/branches/1.11/includes/SpecialBlockme.php
===================================================================
--- /MediaWiki/branches/1.11/includes/SpecialBlockme.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/SpecialBlockme.php	(revision 1280)
@@ -0,0 +1,39 @@
+<?php
+/**
+ *
+ * @addtogroup SpecialPage
+ */
+
+/**
+ *
+ */
+function wfSpecialBlockme() {
+	global $wgRequest, $wgBlockOpenProxies, $wgOut, $wgProxyKey;
+
+	$ip = wfGetIP();
+	
+	if( !$wgBlockOpenProxies || $wgRequest->getText( 'ip' ) != md5( $ip . $wgProxyKey ) ) {
+		$wgOut->addWikiText( wfMsg( 'disabled' ) );
+		return;
+	}
+
+	$blockerName = wfMsg( "proxyblocker" );
+	$reason = wfMsg( "proxyblockreason" );
+	$success = wfMsg( "proxyblocksuccess" );
+
+	$u = User::newFromName( $blockerName );
+	$id = $u->idForName();
+	if ( !$id ) {
+		$u = User::newFromName( $blockerName );
+		$u->addToDatabase();
+		$u->setPassword( bin2hex( mt_rand(0, 0x7fffffff ) ) );
+		$u->saveSettings();
+		$id = $u->getID();
+	}
+
+	$block = new Block( $ip, 0, $id, $reason, wfTimestampNow() );
+	$block->insert();
+
+	$wgOut->addWikiText( $success );
+}
+?>
Index: /MediaWiki/branches/1.11/includes/SpecialBooksources.php
===================================================================
--- /MediaWiki/branches/1.11/includes/SpecialBooksources.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/SpecialBooksources.php	(revision 1280)
@@ -0,0 +1,113 @@
+<?php
+
+/**
+ * Special page outputs information on sourcing a book with a particular ISBN
+ * The parser creates links to this page when dealing with ISBNs in wikitext
+ *
+ * @addtogroup SpecialPage
+ * @author Rob Church <robchur@gmail.com>
+ * @todo Validate ISBNs using the standard check-digit method
+ */
+class SpecialBookSources extends SpecialPage {
+
+	/**
+	 * ISBN passed to the page, if any
+	 */
+	private $isbn = '';
+	
+	/**
+	 * Constructor
+	 */
+	public function __construct() {
+		parent::__construct( 'Booksources' );
+	}
+	
+	/**
+	 * Show the special page
+	 *
+	 * @param $isbn ISBN passed as a subpage parameter
+	 */
+	public function execute( $isbn = false ) {
+		global $wgOut, $wgRequest;
+		$this->setHeaders();
+		$this->isbn = $this->cleanIsbn( $isbn ? $isbn : $wgRequest->getText( 'isbn' ) );
+		$wgOut->addWikiText( wfMsgNoTrans( 'booksources-summary' ) );
+		$wgOut->addHtml( $this->makeForm() );
+		if( strlen( $this->isbn ) > 0 )
+			$this->showList();
+	}
+	
+	/**
+	 * Trim ISBN and remove characters which aren't required
+	 *
+	 * @param $isbn Unclean ISBN
+	 * @return string
+	 */
+	private function cleanIsbn( $isbn ) {
+		return trim( preg_replace( '![^0-9X]!', '', $isbn ) );
+	}
+	
+	/**
+	 * Generate a form to allow users to enter an ISBN
+	 *
+	 * @return string
+	 */
+	private function makeForm() {
+		global $wgScript;
+		$title = self::getTitleFor( 'Booksources' );
+		$form  = '<fieldset><legend>' . wfMsgHtml( 'booksources-search-legend' ) . '</legend>';
+		$form .= Xml::openElement( 'form', array( 'method' => 'get', 'action' => $wgScript ) );
+		$form .= Xml::hidden( 'title', $title->getPrefixedText() );
+		$form .= '<p>' . Xml::inputLabel( wfMsg( 'booksources-isbn' ), 'isbn', 'isbn', 20, $this->isbn );
+		$form .= '&nbsp;' . Xml::submitButton( wfMsg( 'booksources-go' ) ) . '</p>';
+		$form .= Xml::closeElement( 'form' );
+		$form .= '</fieldset>';
+		return $form;
+	}
+	
+	/**
+	 * Determine where to get the list of book sources from,
+	 * format and output them
+	 *
+	 * @return string
+	 */
+	private function showList() {
+		global $wgOut, $wgContLang;
+		
+		# Hook to allow extensions to insert additional HTML,
+		# e.g. for API-interacting plugins and so on
+		wfRunHooks( 'BookInformation', array( $this->isbn, &$wgOut ) );
+		
+		# Check for a local page such as Project:Book_sources and use that if available
+		$title = Title::makeTitleSafe( NS_PROJECT, wfMsg( 'booksources' ) ); # Should this be wfMsgForContent()? -- RC
+		if( is_object( $title ) && $title->exists() ) {
+			$rev = Revision::newFromTitle( $title );
+			$wgOut->addWikiText( str_replace( 'MAGICNUMBER', $this->isbn, $rev->getText() ) );
+			return true;
+		}
+		
+		# Fall back to the defaults given in the language file
+		$wgOut->addWikiText( wfMsgNoTrans( 'booksources-text' ) );
+		$wgOut->addHtml( '<ul>' );
+		$items = $wgContLang->getBookstoreList();
+		foreach( $items as $label => $url )
+			$wgOut->addHtml( $this->makeListItem( $label, $url ) );
+		$wgOut->addHtml( '</ul>' );
+		return true;
+	}
+	
+	/**
+	 * Format a book source list item
+	 *
+	 * @param $label Book source label
+	 * @param $url Book source URL
+	 * @return string
+	 */
+	private function makeListItem( $label, $url ) {
+		$url = str_replace( '$1', $this->isbn, $url );
+		return '<li><a href="' . htmlspecialchars( $url ) . '">' . htmlspecialchars( $label ) . '</a></li>';
+	}
+
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/SpecialBrokenRedirects.php
===================================================================
--- /MediaWiki/branches/1.11/includes/SpecialBrokenRedirects.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/SpecialBrokenRedirects.php	(revision 1280)
@@ -0,0 +1,95 @@
+<?php
+/**
+ *
+ * @addtogroup SpecialPage
+ */
+
+/**
+ * A special page listing redirects to non existent page. Those should be
+ * fixed to point to an existing page.
+ * @addtogroup SpecialPage
+ */
+class BrokenRedirectsPage extends PageQueryPage {
+	var $targets = array();
+
+	function getName() {
+		return 'BrokenRedirects';
+	}
+
+	function isExpensive( ) { return true; }
+	function isSyndicated() { return false; }
+
+	function getPageHeader( ) {
+		global $wgOut;
+		return $wgOut->parse( wfMsg( 'brokenredirectstext' ) );
+	}
+
+	function getSQL() {
+		$dbr = wfGetDB( DB_SLAVE );
+		list( $page, $redirect ) = $dbr->tableNamesN( 'page', 'redirect' );
+
+		$sql = "SELECT 'BrokenRedirects'  AS type,
+		                p1.page_namespace AS namespace,
+		                p1.page_title     AS title,
+		                rd_namespace,
+		                rd_title
+		           FROM $redirect AS rd
+                   JOIN $page p1 ON (rd.rd_from=p1.page_id)
+		      LEFT JOIN $page AS p2 ON (rd_namespace=p2.page_namespace AND rd_title=p2.page_title )
+    		                WHERE p2.page_namespace IS NULL";
+		return $sql;
+	}
+
+	function getOrder() {
+		return '';
+	}
+
+	function formatResult( $skin, $result ) {
+		global $wgUser, $wgContLang;
+		
+		$fromObj = Title::makeTitle( $result->namespace, $result->title );
+		if ( isset( $result->rd_title ) ) {
+			$toObj = Title::makeTitle( $result->rd_namespace, $result->rd_title );
+		} else {
+			$blinks = $fromObj->getBrokenLinksFrom();
+			if ( $blinks ) {
+				$toObj = $blinks[0];
+			} else {
+				$toObj = false;
+			}
+		}
+
+		// $toObj may very easily be false if the $result list is cached
+		if ( !is_object( $toObj ) ) {
+			return '<s>' . $skin->makeLinkObj( $fromObj ) . '</s>';
+		}
+
+		$from = $skin->makeKnownLinkObj( $fromObj ,'', 'redirect=no' );
+		$edit = $skin->makeKnownLinkObj( $fromObj, wfMsgHtml( 'brokenredirects-edit' ), 'action=edit' );
+		$to   = $skin->makeBrokenLinkObj( $toObj );
+		$arr = $wgContLang->getArrow();
+		
+		$out = "{$from} {$edit}";
+		
+		if( $wgUser->isAllowed( 'delete' ) ) {
+			$delete = $skin->makeKnownLinkObj( $fromObj, wfMsgHtml( 'brokenredirects-delete' ), 'action=delete' );
+			$out .= " {$delete}";
+		}
+		
+		$out .= " {$arr} {$to}";
+		return $out;
+	}
+}
+
+/**
+ * constructor
+ */
+function wfSpecialBrokenRedirects() {
+	list( $limit, $offset ) = wfCheckLimits();
+
+	$sbr = new BrokenRedirectsPage();
+
+	return $sbr->doQuery( $offset, $limit );
+
+}
+?>
Index: /MediaWiki/branches/1.11/includes/SpecialCategories.php
===================================================================
--- /MediaWiki/branches/1.11/includes/SpecialCategories.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/SpecialCategories.php	(revision 1280)
@@ -0,0 +1,66 @@
+<?php
+/**
+ *
+ * @addtogroup SpecialPage
+ */
+
+function wfSpecialCategories() {
+	global $wgOut;
+
+	$cap = new CategoryPager();
+	$wgOut->addHTML( 
+		wfMsgWikiHtml( 'categoriespagetext' ) .
+		$cap->getNavigationBar()
+		. '<ul>' . $cap->getBody() . '</ul>' .
+		$cap->getNavigationBar()
+		);
+}
+
+/**
+ * @addtogroup SpecialPage
+ * @addtogroup Pager
+ */
+class CategoryPager extends AlphabeticPager {
+	function getQueryInfo() {
+		return array(
+			'tables' => array('categorylinks'),
+			'fields' => array('cl_to','count(*) AS count'),
+			'options' => array('GROUP BY' => 'cl_to')
+			);
+	}
+	
+	function getIndexField() {
+		return "cl_to";
+	}
+	
+	/* Override getBody to apply LinksBatch on resultset before actually outputting anything. */
+	function getBody() {
+		if (!$this->mQueryDone) {
+			$this->doQuery();
+		}
+		$batch = new LinkBatch;
+	
+		$this->mResult->rewind();
+		
+		while ( $row = $this->mResult->fetchObject() ) {
+			$batch->addObj( Title::makeTitleSafe( NS_CATEGORY, $row->cl_to ) );
+		}
+		$batch->execute();
+		$this->mResult->rewind();
+		return parent::getBody();
+	}
+	
+	function formatRow($result) {
+		global $wgLang;
+		$title = Title::makeTitle( NS_CATEGORY, $result->cl_to );
+		return ( 
+			'<li>' .
+			$this->getSkin()->makeLinkObj( $title, $title->getText() )
+			. ' ' .
+			wfMsgExt( 'nmembers', array( 'parsemag', 'escape'),
+				$wgLang->formatNum( $result->count ) )
+			. "</li>\n" );
+	}
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/SpecialConfirmemail.php
===================================================================
--- /MediaWiki/branches/1.11/includes/SpecialConfirmemail.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/SpecialConfirmemail.php	(revision 1280)
@@ -0,0 +1,105 @@
+<?php
+
+/**
+ * Main execution point
+ *
+ * @param $par Parameters passed to the page
+ */
+function wfSpecialConfirmemail( $par ) {
+	$form = new EmailConfirmation();
+	$form->execute( $par );
+}
+
+/**
+ * Special page allows users to request email confirmation message, and handles
+ * processing of the confirmation code when the link in the email is followed
+ *
+ * @addtogroup SpecialPage
+ * @author Rob Church <robchur@gmail.com>
+ */
+class EmailConfirmation extends SpecialPage {
+	
+	/**
+	 * Main execution point
+	 *
+	 * @param $code Confirmation code passed to the page
+	 */
+	function execute( $code ) {
+		global $wgUser, $wgOut;
+		if( empty( $code ) ) {
+			if( $wgUser->isLoggedIn() ) {
+				if( User::isValidEmailAddr( $wgUser->getEmail() ) ) {
+					$this->showRequestForm();
+				} else {
+					$wgOut->addWikiText( wfMsg( 'confirmemail_noemail' ) );
+				}
+			} else {
+				$title = SpecialPage::getTitleFor( 'Userlogin' );
+				$self = SpecialPage::getTitleFor( 'Confirmemail' );
+				$skin = $wgUser->getSkin();
+				$llink = $skin->makeKnownLinkObj( $title, wfMsgHtml( 'loginreqlink' ), 'returnto=' . $self->getPrefixedUrl() );
+				$wgOut->addHtml( wfMsgWikiHtml( 'confirmemail_needlogin', $llink ) );
+			}
+		} else {
+			$this->attemptConfirm( $code );
+		}
+	}
+	
+	/**
+	 * Show a nice form for the user to request a confirmation mail
+	 */
+	function showRequestForm() {
+		global $wgOut, $wgUser, $wgLang, $wgRequest;
+		if( $wgRequest->wasPosted() && $wgUser->matchEditToken( $wgRequest->getText( 'token' ) ) ) {
+			$ok = $wgUser->sendConfirmationMail();
+			if ( WikiError::isError( $ok ) ) {
+				$wgOut->addWikiText( wfMsg( 'confirmemail_sendfailed', $ok->toString() ) );
+			} else {
+				$wgOut->addWikiText( wfMsg( 'confirmemail_sent' ) );
+			}
+		} else {
+			if( $wgUser->isEmailConfirmed() ) {
+				$time = $wgLang->timeAndDate( $wgUser->mEmailAuthenticated, true );
+				$wgOut->addWikiText( wfMsg( 'emailauthenticated', $time ) );
+			}
+			if( $wgUser->isEmailConfirmationPending() ) {
+				$wgOut->addWikiText( wfMsg( 'confirmemail_pending' ) );
+			}
+			$wgOut->addWikiText( wfMsg( 'confirmemail_text' ) );
+			$self = SpecialPage::getTitleFor( 'Confirmemail' );		
+			$form  = wfOpenElement( 'form', array( 'method' => 'post', 'action' => $self->getLocalUrl() ) );
+			$form .= wfHidden( 'token', $wgUser->editToken() );
+			$form .= wfSubmitButton( wfMsgHtml( 'confirmemail_send' ) );
+			$form .= wfCloseElement( 'form' );
+			$wgOut->addHtml( $form );
+		}				
+	}
+	
+	/**
+	 * Attempt to confirm the user's email address and show success or failure
+	 * as needed; if successful, take the user to log in
+	 *
+	 * @param $code Confirmation code
+	 */
+	function attemptConfirm( $code ) {
+		global $wgUser, $wgOut;
+		$user = User::newFromConfirmationCode( $code );
+		if( is_object( $user ) ) {
+			if( $user->confirmEmail() ) {
+				$message = $wgUser->isLoggedIn() ? 'confirmemail_loggedin' : 'confirmemail_success';
+				$wgOut->addWikiText( wfMsg( $message ) );
+				if( !$wgUser->isLoggedIn() ) {
+					$title = SpecialPage::getTitleFor( 'Userlogin' );
+					$wgOut->returnToMain( true, $title->getPrefixedText() );
+				}
+			} else {
+				$wgOut->addWikiText( wfMsg( 'confirmemail_error' ) );
+			}
+		} else {
+			$wgOut->addWikiText( wfMsg( 'confirmemail_invalid' ) );
+		}
+	}
+	
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/SpecialContributions.php
===================================================================
--- /MediaWiki/branches/1.11/includes/SpecialContributions.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/SpecialContributions.php	(revision 1280)
@@ -0,0 +1,345 @@
+<?php
+/**
+ * Special:Contributions, show user contributions in a paged list
+ * @addtogroup SpecialPage
+ */
+
+class ContribsPager extends IndexPager {
+	public $mDefaultDirection = true;
+	var $messages, $target;
+	var $namespace = '', $mDb;
+
+	function __construct( $target, $namespace = false ) {
+		global $wgUser;
+
+		parent::__construct();
+		foreach( explode( ' ', 'uctop diff newarticle rollbacklink diff hist minoreditletter' ) as $msg ) {
+			$this->messages[$msg] = wfMsgExt( $msg, array( 'escape') );
+		}
+		$this->target = $target;
+		$this->namespace = $namespace;
+		$this->mDb = wfGetDB( DB_SLAVE, 'contributions' );
+	}
+
+	function getDefaultQuery() {
+		$query = parent::getDefaultQuery();
+		$query['target'] = $this->target;
+		return $query;
+	}
+
+	function getQueryInfo() {
+		list( $index, $userCond ) = $this->getUserCond();
+		$conds = array_merge( array( 'page_id=rev_page' ), $userCond, $this->getNamespaceCond() );
+
+		return array(
+			'tables' => array( 'page', 'revision' ),
+			'fields' => array( 
+				'page_namespace', 'page_title', 'page_is_new', 'page_latest', 'rev_id', 'rev_page', 
+				'rev_text_id', 'rev_timestamp', 'rev_comment', 'rev_minor_edit', 'rev_user', 
+				'rev_user_text', 'rev_deleted'
+			),
+			'conds' => $conds,
+			'options' => array( 'FORCE INDEX' => $index )
+		);
+	}
+
+	function getUserCond() {
+		$condition = array();
+
+		if ( $this->target == 'newbies' ) {
+			$max = $this->mDb->selectField( 'user', 'max(user_id)', false, __METHOD__ );
+			$condition[] = 'rev_user >' . (int)($max - $max / 100);
+			$index = 'user_timestamp';
+		} else {
+			$condition['rev_user_text'] = $this->target;
+			$index = 'usertext_timestamp';
+		}
+		return array( $index, $condition );
+	}
+
+	function getNamespaceCond() {
+		if ( $this->namespace !== '' ) {
+			return array( 'page_namespace' => (int)$this->namespace );
+		} else {
+			return array();
+		}
+	}
+
+	function getIndexField() {
+		return 'rev_timestamp';
+	}
+
+	function getStartBody() {
+		return "<ul>\n";
+	}
+
+	function getEndBody() {
+		return "</ul>\n";
+	}
+
+	function getNavigationBar() {
+		if ( isset( $this->mNavigationBar ) ) {
+			return $this->mNavigationBar;
+		}
+		$linkTexts = array(
+			'prev' => wfMsgHtml( "sp-contributions-newer", $this->mLimit ),
+			'next' => wfMsgHtml( 'sp-contributions-older', $this->mLimit ),
+			'first' => wfMsgHtml('sp-contributions-newest'),
+			'last' => wfMsgHtml( 'sp-contributions-oldest' )
+		);
+
+		$pagingLinks = $this->getPagingLinks( $linkTexts );
+		$limitLinks = $this->getLimitLinks();
+		$limits = implode( ' | ', $limitLinks );
+		
+		$this->mNavigationBar = "({$pagingLinks['first']} | {$pagingLinks['last']}) " . 
+			wfMsgHtml("viewprevnext", $pagingLinks['prev'], $pagingLinks['next'], $limits);
+		return $this->mNavigationBar;
+	}
+
+	/**
+	 * Generates each row in the contributions list.
+	 *
+	 * Contributions which are marked "top" are currently on top of the history.
+	 * For these contributions, a [rollback] link is shown for users with sysop
+	 * privileges. The rollback link restores the most recent version that was not
+	 * written by the target user.
+	 *
+	 * @todo This would probably look a lot nicer in a table.
+	 */
+	function formatRow( $row ) {
+		wfProfileIn( __METHOD__ );
+
+		global $wgLang, $wgUser;
+
+		$sk = $this->getSkin();
+		$rev = new Revision( $row );
+
+		$page = Title::makeTitle( $row->page_namespace, $row->page_title );
+		$link = $sk->makeKnownLinkObj( $page );
+		$difftext = $topmarktext = '';
+		if( $row->rev_id == $row->page_latest ) {
+			$topmarktext .= '<strong>' . $this->messages['uctop'] . '</strong>';
+			if( !$row->page_is_new ) {
+				$difftext .= '(' . $sk->makeKnownLinkObj( $page, $this->messages['diff'], 'diff=0' ) . ')';
+			} else {
+				$difftext .= $this->messages['newarticle'];
+			}
+
+			if( $wgUser->isAllowed( 'rollback' ) ) {
+				$topmarktext .= ' '.$sk->generateRollback( $rev );
+			}
+
+		}
+		if( $rev->userCan( Revision::DELETED_TEXT ) ) {
+			$difftext = '(' . $sk->makeKnownLinkObj( $page, $this->messages['diff'], 'diff=prev&oldid='.$row->rev_id ) . ')';
+		} else {
+			$difftext = '(' . $this->messages['diff'] . ')';
+		}
+		$histlink='('.$sk->makeKnownLinkObj( $page, $this->messages['hist'], 'action=history' ) . ')';
+
+		$comment = $sk->revComment( $rev );
+		$d = $wgLang->timeanddate( wfTimestamp( TS_MW, $row->rev_timestamp ), true );
+
+		if( $rev->isDeleted( Revision::DELETED_TEXT ) ) {
+			$d = '<span class="history-deleted">' . $d . '</span>';
+		}
+
+		if( $row->rev_minor_edit ) {
+			$mflag = '<span class="minor">' . $this->messages['minoreditletter'] . '</span> ';
+		} else {
+			$mflag = '';
+		}
+
+		$ret = "{$d} {$histlink} {$difftext} {$mflag} {$link} {$comment} {$topmarktext}";
+		if( $rev->isDeleted( Revision::DELETED_TEXT ) ) {
+			$ret .= ' ' . wfMsgHtml( 'deletedrev' );
+		}
+		$ret = "<li>$ret</li>\n";
+		wfProfileOut( __METHOD__ );
+		return $ret;
+	}
+}
+
+/**
+ * Special page "user contributions".
+ * Shows a list of the contributions of a user.
+ *
+ * @return	none
+ * @param	$par	String: (optional) user name of the user for which to show the contributions
+ */
+function wfSpecialContributions( $par = null ) {
+	global $wgUser, $wgOut, $wgLang, $wgRequest;
+
+	$options = array();
+	
+	if ( isset( $par ) && $par == 'newbies' ) {
+		$target = 'newbies';
+		$options['contribs'] = 'newbie';
+	} elseif ( isset( $par ) ) {
+		$target = $par;
+	} else {
+		$target = $wgRequest->getVal( 'target' );
+	}
+
+	// check for radiobox
+	if ( $wgRequest->getVal( 'contribs' ) == 'newbie' ) {
+		$target = 'newbies';
+		$options['contribs'] = 'newbie';
+	}
+
+	if ( !strlen( $target ) ) {
+		$wgOut->addHTML( contributionsForm( '' ) );
+		return;
+	}
+
+	$options['limit'] = $wgRequest->getInt( 'limit', 50 );
+	$options['target'] = $target;
+
+	$nt = Title::makeTitleSafe( NS_USER, $target );
+	if ( !$nt ) {
+		$wgOut->addHTML( contributionsForm( '' ) );
+		return;
+	}
+	$id = User::idFromName( $nt->getText() );
+
+	if ( $target != 'newbies' ) {
+		$target = $nt->getText();
+		$wgOut->setSubtitle( contributionsSub( $nt, $id ) );
+	} else {
+		$wgOut->setSubtitle( wfMsgHtml( 'sp-contributions-newbies-sub') );
+	}
+	
+	if ( ( $ns = $wgRequest->getVal( 'namespace', null ) ) !== null && $ns !== '' ) {
+		$options['namespace'] = intval( $ns );
+	} else {
+		$options['namespace'] = '';
+	}
+	if ( $wgUser->isAllowed( 'rollback' ) && $wgRequest->getBool( 'bot' ) ) {
+		$options['bot'] = '1';
+	}
+
+	wfRunHooks( 'SpecialContributionsBeforeMainOutput', $id );
+
+	$wgOut->addHTML( contributionsForm( $options ) );
+
+	$pager = new ContribsPager( $target, $options['namespace'] );
+	if ( !$pager->getNumRows() ) {
+		$wgOut->addWikiText( wfMsg( 'nocontribs' ) );
+		return;
+	}
+	$wgOut->addHTML( 
+		'<p>' . $pager->getNavigationBar() . '</p>' .
+		$pager->getBody() .
+		'<p>' . $pager->getNavigationBar() . '</p>' );
+	
+	# If there were contributions, and it was a valid user or IP, show
+	# the appropriate "footer" message - WHOIS tools, etc.
+	if( $target != 'newbies' ) {
+		$message = IP::isIPAddress( $target )      
+			? 'sp-contributions-footer-anon'
+			: 'sp-contributions-footer';
+
+
+		$text = wfMsg( $message, $target );
+		if( !wfEmptyMsg( $message, $text ) && $text != '-' ) {
+			$wgOut->addHtml( '<div class="mw-contributions-footer">' );
+			$wgOut->addWikiText( $text );
+			$wgOut->addHtml( '</div>' );
+		}
+	}
+}
+
+/**
+ * Generates the subheading with links
+ * @param Title $nt Title object for the target
+ * @param integer $id User ID for the target
+ * @return String: appropriately-escaped HTML to be output literally
+ */
+function contributionsSub( $nt, $id ) {
+	global $wgSysopUserBans, $wgLang, $wgUser;
+
+	$sk = $wgUser->getSkin();
+
+	if ( 0 == $id ) {
+		$user = $nt->getText();
+	} else {
+		$user = $sk->makeLinkObj( $nt, htmlspecialchars( $nt->getText() ) );
+	}
+	$talk = $nt->getTalkPage();
+	if( $talk ) {
+		# Talk page link
+		$tools[] = $sk->makeLinkObj( $talk, wfMsgHtml( 'talkpagelinktext' ) );
+		if( ( $id != 0 && $wgSysopUserBans ) || ( $id == 0 && User::isIP( $nt->getText() ) ) ) {
+			# Block link
+			if( $wgUser->isAllowed( 'block' ) )
+				$tools[] = $sk->makeKnownLinkObj( SpecialPage::getTitleFor( 'Blockip', $nt->getDBkey() ), wfMsgHtml( 'blocklink' ) );
+			# Block log link
+			$tools[] = $sk->makeKnownLinkObj( SpecialPage::getTitleFor( 'Log' ), wfMsgHtml( 'sp-contributions-blocklog' ), 'type=block&page=' . $nt->getPrefixedUrl() );
+		}
+		# Other logs link
+		$tools[] = $sk->makeKnownLinkObj( SpecialPage::getTitleFor( 'Log' ), wfMsgHtml( 'log' ), 'user=' . $nt->getPartialUrl() );
+		$links = implode( ' | ', $tools );
+	}
+
+	// Old message 'contribsub' had one parameter, but that doesn't work for
+	// languages that want to put the "for" bit right after $user but before
+	// $links.  If 'contribsub' is around, use it for reverse compatibility,
+	// otherwise use 'contribsub2'.
+	if( wfEmptyMsg( 'contribsub', wfMsg( 'contribsub' ) ) ) {
+		return wfMsgHtml( 'contribsub2', $user, $links );
+	} else {
+		return wfMsgHtml( 'contribsub', "$user ($links)" );
+	}
+}
+
+/**
+ * Generates the namespace selector form with hidden attributes.
+ * @param $options Array: the options to be included.
+ */
+function contributionsForm( $options ) {
+	global $wgScript, $wgTitle, $wgRequest;
+
+	$options['title'] = $wgTitle->getPrefixedText();
+	if ( !isset( $options['target'] ) ) {
+		$options['target'] = '';
+	} else {
+		$options['target'] = str_replace( '_' , ' ' , $options['target'] );
+	}
+
+	if ( !isset( $options['namespace'] ) ) {
+		$options['namespace'] = '';
+	}
+
+	if ( !isset( $options['contribs'] ) ) {
+		$options['contribs'] = 'user';
+	}
+
+	if ( $options['contribs'] == 'newbie' ) {
+		$options['target'] = '';
+	}
+
+	$f = Xml::openElement( 'form', array( 'method' => 'get', 'action' => $wgScript ) );
+
+	foreach ( $options as $name => $value ) {
+		if ( in_array( $name, array( 'namespace', 'target', 'contribs' ) ) ) {
+			continue;
+		}
+		$f .= "\t" . Xml::hidden( $name, $value ) . "\n";
+	}
+
+	$f .= '<fieldset>' .
+		Xml::element( 'legend', array(), wfMsg( 'sp-contributions-search' ) ) .
+		Xml::radioLabel( wfMsgExt( 'sp-contributions-newbies', array( 'parseinline' ) ), 'contribs' , 'newbie' , 'newbie', $options['contribs'] == 'newbie' ? true : false ) . '<br />' .
+		Xml::radioLabel( wfMsgExt( 'sp-contributions-username', array( 'parseinline' ) ), 'contribs' , 'user', 'user', $options['contribs'] == 'user' ? true : false ) . ' ' .
+		Xml::input( 'target', 20, $options['target']) . ' '.
+		Xml::label( wfMsg( 'namespace' ), 'namespace' ) .
+		Xml::namespaceSelector( $options['namespace'], '' ) .
+		Xml::submitButton( wfMsg( 'sp-contributions-submit' ) ) .
+		'</fieldset>' .
+		Xml::closeElement( 'form' );
+	return $f;
+}
+
+
+?>
Index: /MediaWiki/branches/1.11/includes/SpecialDeadendpages.php
===================================================================
--- /MediaWiki/branches/1.11/includes/SpecialDeadendpages.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/SpecialDeadendpages.php	(revision 1280)
@@ -0,0 +1,65 @@
+<?php
+/**
+ *
+ * @addtogroup SpecialPage
+ */
+
+/**
+ *
+ * @addtogroup SpecialPage
+ */
+class DeadendPagesPage extends PageQueryPage {
+
+	function getName( ) {
+		return "Deadendpages";
+	}
+
+	function getPageHeader() {
+		return '<p>' . wfMsg('deadendpagestext') . '</p>';
+	}
+
+	/**
+	 * LEFT JOIN is expensive
+	 *
+	 * @return true
+	 */
+	function isExpensive( ) {
+		return 1;
+	}
+
+	function isSyndicated() { return false; }
+
+	/**
+	 * @return false
+	 */
+	function sortDescending() {
+		return false;
+	}
+
+	/**
+	 * @return string an sqlquery
+	 */
+	function getSQL() {
+		$dbr = wfGetDB( DB_SLAVE );
+		list( $page, $pagelinks ) = $dbr->tableNamesN( 'page', 'pagelinks' );
+		return "SELECT 'Deadendpages' as type, page_namespace AS namespace, page_title as title, page_title AS value " .
+	"FROM $page LEFT JOIN $pagelinks ON page_id = pl_from " .
+	"WHERE pl_from IS NULL " .
+	"AND page_namespace = 0 " .
+	"AND page_is_redirect = 0";
+	}
+}
+
+/**
+ * Constructor
+ */
+function wfSpecialDeadendpages() {
+
+	list( $limit, $offset ) = wfCheckLimits();
+
+	$depp = new DeadendPagesPage();
+
+	return $depp->doQuery( $offset, $limit );
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/SpecialDisambiguations.php
===================================================================
--- /MediaWiki/branches/1.11/includes/SpecialDisambiguations.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/SpecialDisambiguations.php	(revision 1280)
@@ -0,0 +1,108 @@
+<?php
+/**
+ *
+ * @addtogroup SpecialPage
+ */
+
+class DisambiguationsPage extends PageQueryPage {
+
+	function getName() {
+		return 'Disambiguations';
+	}
+
+	function isExpensive( ) { return true; }
+	function isSyndicated() { return false; }
+
+
+	function getPageHeader( ) {
+		global $wgOut;
+		return $wgOut->parse( wfMsg( 'disambiguations-text' ) );
+	}
+
+	function getSQL() {
+		$dbr = wfGetDB( DB_SLAVE );
+
+		$dMsgText = wfMsgForContent('disambiguationspage');
+
+		$linkBatch = new LinkBatch;
+
+		# If the text can be treated as a title, use it verbatim.
+		# Otherwise, pull the titles from the links table
+		$dp = Title::newFromText($dMsgText);
+		if( $dp ) {
+			if($dp->getNamespace() != NS_TEMPLATE) {
+				# FIXME we assume the disambiguation message is a template but
+				# the page can potentially be from another namespace :/
+				wfDebug("Mediawiki:disambiguationspage message does not refer to a template!\n");
+			}
+			$linkBatch->addObj( $dp );
+		} else {
+				# Get all the templates linked from the Mediawiki:Disambiguationspage
+				$disPageObj = Title::makeTitleSafe( NS_MEDIAWIKI, 'disambiguationspage' );
+				$res = $dbr->select(
+					array('pagelinks', 'page'),
+					'pl_title',
+					array('page_id = pl_from', 'pl_namespace' => NS_TEMPLATE,
+						'page_namespace' => $disPageObj->getNamespace(), 'page_title' => $disPageObj->getDBkey()),
+					__METHOD__ );
+
+				while ( $row = $dbr->fetchObject( $res ) ) {
+					$linkBatch->addObj( Title::makeTitle( NS_TEMPLATE, $row->pl_title ));
+				}
+
+				$dbr->freeResult( $res );
+		}
+
+		$set = $linkBatch->constructSet( 'lb.tl', $dbr );
+		if( $set === false ) {
+			# We must always return a valid sql query, but this way DB will always quicly return an empty result
+			$set = 'FALSE';
+			wfDebug("Mediawiki:disambiguationspage message does not link to any templates!\n");
+		}
+
+		list( $page, $pagelinks, $templatelinks) = $dbr->tableNamesN( 'page', 'pagelinks', 'templatelinks' );
+
+		$sql = "SELECT 'Disambiguations' AS \"type\", pb.page_namespace AS namespace,"
+			." pb.page_title AS title, la.pl_from AS value"
+			." FROM {$templatelinks} AS lb, {$page} AS pb, {$pagelinks} AS la, {$page} AS pa"
+			." WHERE $set"  # disambiguation template(s)
+			.' AND pa.page_id = la.pl_from'
+			.' AND pa.page_namespace = ' . NS_MAIN  # Limit to just articles in the main namespace
+			.' AND pb.page_id = lb.tl_from'
+			.' AND pb.page_namespace = la.pl_namespace'
+			.' AND pb.page_title = la.pl_title'
+			.' ORDER BY lb.tl_namespace, lb.tl_title';
+
+		return $sql;
+	}
+
+	function getOrder() {
+		return '';
+	}
+
+	function formatResult( $skin, $result ) {
+		global $wgContLang;
+		$title = Title::newFromId( $result->value );
+		$dp = Title::makeTitle( $result->namespace, $result->title );
+
+		$from = $skin->makeKnownLinkObj( $title, '' );
+		$edit = $skin->makeKnownLinkObj( $title, "(".wfMsgHtml("qbedit").")" , 'redirect=no&action=edit' );
+		$arr  = $wgContLang->getArrow();
+		$to   = $skin->makeKnownLinkObj( $dp, '' );
+
+		return "$from $edit $arr $to";
+	}
+}
+
+/**
+ * Constructor
+ */
+function wfSpecialDisambiguations() {
+	list( $limit, $offset ) = wfCheckLimits();
+
+	$sd = new DisambiguationsPage();
+
+	return $sd->doQuery( $offset, $limit );
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/SpecialDoubleRedirects.php
===================================================================
--- /MediaWiki/branches/1.11/includes/SpecialDoubleRedirects.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/SpecialDoubleRedirects.php	(revision 1280)
@@ -0,0 +1,105 @@
+<?php
+/**
+ *
+ * @addtogroup SpecialPage
+ */
+
+/**
+ * A special page listing redirects to redirecting page.
+ * The software will automatically not follow double redirects, to prevent loops.
+ * @addtogroup SpecialPage
+ */
+class DoubleRedirectsPage extends PageQueryPage {
+
+	function getName() {
+		return 'DoubleRedirects';
+	}
+
+	function isExpensive( ) { return true; }
+	function isSyndicated() { return false; }
+
+	function getPageHeader( ) {
+		#FIXME : probably need to add a backlink to the maintenance page.
+		return '<p>'.wfMsg("doubleredirectstext")."</p><br />\n";
+	}
+
+	function getSQLText( &$dbr, $namespace = null, $title = null ) {
+		
+		list( $page, $redirect ) = $dbr->tableNamesN( 'page', 'redirect' );
+
+		$limitToTitle = !( $namespace === null && $title === null );
+		$sql = $limitToTitle ? "SELECT" : "SELECT 'DoubleRedirects' as type," ;
+		$sql .=
+			 " pa.page_namespace as namespace, pa.page_title as title," .
+			 " pb.page_namespace as nsb, pb.page_title as tb," .
+			 " pc.page_namespace as nsc, pc.page_title as tc" .
+		   " FROM $redirect AS ra, $redirect AS rb, $page AS pa, $page AS pb, $page AS pc" .
+		   " WHERE ra.rd_from=pa.page_id" .
+			 " AND ra.rd_namespace=pb.page_namespace" .
+			 " AND ra.rd_title=pb.page_title" .
+			 " AND rb.rd_from=pb.page_id" .
+			 " AND rb.rd_namespace=pc.page_namespace" .
+			 " AND rb.rd_title=pc.page_title";
+
+		if( $limitToTitle ) {
+			$encTitle = $dbr->addQuotes( $title );
+			$sql .= " AND pa.page_namespace=$namespace" .
+					" AND pa.page_title=$encTitle";
+		}
+
+		return $sql;
+	}
+	
+	function getSQL() {
+		$dbr = wfGetDB( DB_SLAVE );
+		return $this->getSQLText( $dbr );
+	}
+
+	function getOrder() {
+		return '';
+	}
+
+	function formatResult( $skin, $result ) {
+		global $wgContLang;
+	
+		$fname = 'DoubleRedirectsPage::formatResult';
+		$titleA = Title::makeTitle( $result->namespace, $result->title );
+
+		if ( $result && !isset( $result->nsb ) ) {
+			$dbr = wfGetDB( DB_SLAVE );
+			$sql = $this->getSQLText( $dbr, $result->namespace, $result->title );
+			$res = $dbr->query( $sql, $fname );
+			if ( $res ) {
+				$result = $dbr->fetchObject( $res );
+				$dbr->freeResult( $res );
+			}
+		}
+		if ( !$result ) {
+			return '';
+		}
+
+		$titleB = Title::makeTitle( $result->nsb, $result->tb );
+		$titleC = Title::makeTitle( $result->nsc, $result->tc );
+
+		$linkA = $skin->makeKnownLinkObj( $titleA,'', 'redirect=no' );
+		$edit = $skin->makeBrokenLinkObj( $titleA, "(".wfMsg("qbedit").")" , 'redirect=no');
+		$linkB = $skin->makeKnownLinkObj( $titleB, '', 'redirect=no' );
+		$linkC = $skin->makeKnownLinkObj( $titleC );
+		$arr = $wgContLang->getArrow() . $wgContLang->getDirMark();
+
+		return( "{$linkA} {$edit} {$arr} {$linkB} {$arr} {$linkC}" );
+	}
+}
+
+/**
+ * constructor
+ */
+function wfSpecialDoubleRedirects() {
+	list( $limit, $offset ) = wfCheckLimits();
+
+	$sdr = new DoubleRedirectsPage();
+
+	return $sdr->doQuery( $offset, $limit );
+
+}
+?>
Index: /MediaWiki/branches/1.11/includes/SpecialEmailuser.php
===================================================================
--- /MediaWiki/branches/1.11/includes/SpecialEmailuser.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/SpecialEmailuser.php	(revision 1280)
@@ -0,0 +1,188 @@
+<?php
+/**
+ *
+ * @addtogroup SpecialPage
+ */
+
+require_once('UserMailer.php');
+
+/**
+ * @todo document
+ */
+function wfSpecialEmailuser( $par ) {
+	global $wgUser, $wgOut, $wgRequest, $wgEnableEmail, $wgEnableUserEmail;
+
+	if( !( $wgEnableEmail && $wgEnableUserEmail ) ) {
+		$wgOut->showErrorPage( "nosuchspecialpage", "nospecialpagetext" );
+		return;
+	}
+
+	if( !$wgUser->canSendEmail() ) {
+		wfDebug( "User can't send.\n" );
+		$wgOut->showErrorPage( "mailnologin", "mailnologintext" );
+		return;
+	}
+
+	$action = $wgRequest->getVal( 'action' );
+	$target = isset($par) ? $par : $wgRequest->getVal( 'target' );
+	if ( "" == $target ) {
+		wfDebug( "Target is empty.\n" );
+		$wgOut->showErrorPage( "notargettitle", "notargettext" );
+		return;
+	}
+
+	$nt = Title::newFromURL( $target );
+	if ( is_null( $nt ) ) {
+		wfDebug( "Target is invalid title.\n" );
+		$wgOut->showErrorPage( "notargettitle", "notargettext" );
+		return;
+	}
+
+	$nu = User::newFromName( $nt->getText() );
+	if( is_null( $nu ) || !$nu->canReceiveEmail() ) {
+		wfDebug( "Target is invalid user or can't receive.\n" );
+		$wgOut->showErrorPage( "noemailtitle", "noemailtext" );
+		return;
+	}
+
+	$f = new EmailUserForm( $nu );
+
+	if ( "success" == $action ) {
+		$f->showSuccess( $nu );
+	} else if ( "submit" == $action && $wgRequest->wasPosted() &&
+				$wgUser->matchEditToken( $wgRequest->getVal( 'wpEditToken' ) ) ) 
+	{
+		# Check against the rate limiter
+		if( $wgUser->pingLimiter( 'emailuser' ) ) {
+			$wgOut->rateLimited();
+			return;
+		}
+
+		$f->doSubmit();
+	} else {
+		$f->showForm();
+	}
+}
+
+/**
+ * Implements the Special:Emailuser web interface, and invokes userMailer for sending the email message.
+ * @addtogroup SpecialPage
+ */
+class EmailUserForm {
+
+	var $target;
+	var $text, $subject;
+	var $cc_me;     // Whether user requested to be sent a separate copy of their email.
+
+	/**
+	 * @param User $target
+	 */
+	function EmailUserForm( $target ) {
+		global $wgRequest;
+		$this->target = $target;
+		$this->text = $wgRequest->getText( 'wpText' );
+		$this->subject = $wgRequest->getText( 'wpSubject' );
+		$this->cc_me = $wgRequest->getBool( 'wpCCMe' );
+	}
+
+	function showForm() {
+		global $wgOut, $wgUser;
+
+		$wgOut->setPagetitle( wfMsg( "emailpage" ) );
+		$wgOut->addWikiText( wfMsg( "emailpagetext" ) );
+
+		if ( $this->subject === "" ) {
+			$this->subject = wfMsg( "defemailsubject" );
+		}
+
+		$emf = wfMsg( "emailfrom" );
+		$sender = $wgUser->getName();
+		$emt = wfMsg( "emailto" );
+		$rcpt = $this->target->getName();
+		$emr = wfMsg( "emailsubject" );
+		$emm = wfMsg( "emailmessage" );
+		$ems = wfMsg( "emailsend" );
+		$emc = wfMsg( "emailccme" );
+		$encSubject = htmlspecialchars( $this->subject );
+
+		$titleObj = SpecialPage::getTitleFor( "Emailuser" );
+		$action = $titleObj->escapeLocalURL( "target=" .
+			urlencode( $this->target->getName() ) . "&action=submit" );
+		$token = $wgUser->editToken();
+
+		$wgOut->addHTML( "
+<form id=\"emailuser\" method=\"post\" action=\"{$action}\">
+<table border='0' id='mailheader'><tr>
+<td align='right'>{$emf}:</td>
+<td align='left'><strong>" . htmlspecialchars( $sender ) . "</strong></td>
+</tr><tr>
+<td align='right'>{$emt}:</td>
+<td align='left'><strong>" . htmlspecialchars( $rcpt ) . "</strong></td>
+</tr><tr>
+<td align='right'>{$emr}:</td>
+<td align='left'>
+<input type='text' size='60' maxlength='200' name=\"wpSubject\" value=\"{$encSubject}\" />
+</td>
+</tr>
+</table>
+<span id='wpTextLabel'><label for=\"wpText\">{$emm}:</label><br /></span>
+<textarea name=\"wpText\" rows='20' cols='80' wrap='virtual' style=\"width: 100%;\">" . htmlspecialchars( $this->text ) .
+"</textarea>
+" . wfCheckLabel( $emc, 'wpCCMe', 'wpCCMe', $wgUser->getBoolOption( 'ccmeonemails' ) ) . "<br />
+<input type='submit' name=\"wpSend\" value=\"{$ems}\" />
+<input type='hidden' name='wpEditToken' value=\"$token\" />
+</form>\n" );
+
+	}
+
+	function doSubmit() {
+		global $wgOut, $wgUser;
+
+		$to = new MailAddress( $this->target );
+		$from = new MailAddress( $wgUser );
+		$subject = $this->subject;
+
+		if( wfRunHooks( 'EmailUser', array( &$to, &$from, &$subject, &$this->text ) ) ) {
+
+			$mailResult = userMailer( $to, $from, $subject, $this->text );
+
+			if( WikiError::isError( $mailResult ) ) {
+				$wgOut->addHTML( wfMsg( "usermailererror" ) . $mailResult);
+			} else {
+				
+				// if the user requested a copy of this mail, do this now,
+				// unless they are emailing themselves, in which case one copy of the message is sufficient.
+				if ($this->cc_me && $to != $from) {
+					$cc_subject = wfMsg('emailccsubject', $this->target->getName(), $subject);
+					if( wfRunHooks( 'EmailUser', array( &$from, &$from, &$cc_subject, &$this->text ) ) ) {
+						$ccResult = userMailer( $from, $from, $cc_subject, $this->text );
+						if( WikiError::isError( $ccResult ) ) {
+							// At this stage, the user's CC mail has failed, but their 
+							// original mail has succeeded. It's unlikely, but still, what to do?
+							// We can either show them an error, or we can say everything was fine,
+							// or we can say we sort of failed AND sort of succeeded. Of these options, 
+							// simply saying there was an error is probably best.
+							$wgOut->addHTML( wfMsg( "usermailererror" ) . $ccResult);
+							return;
+						}
+					}
+				}
+				
+				$titleObj = SpecialPage::getTitleFor( "Emailuser" );
+				$encTarget = wfUrlencode( $this->target->getName() );
+				$wgOut->redirect( $titleObj->getFullURL( "target={$encTarget}&action=success" ) );
+				wfRunHooks( 'EmailUserComplete', array( $to, $from, $subject, $this->text ) );
+			}
+		}
+	}
+
+	function showSuccess( &$user ) {
+		global $wgOut;
+
+		$wgOut->setPagetitle( wfMsg( "emailsent" ) );
+		$wgOut->addHTML( wfMsg( "emailsenttext" ) );
+
+		$wgOut->returnToMain( false, $user->getUserPage() );
+	}
+}
+?>
Index: /MediaWiki/branches/1.11/includes/SpecialExport.php
===================================================================
--- /MediaWiki/branches/1.11/includes/SpecialExport.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/SpecialExport.php	(revision 1280)
@@ -0,0 +1,188 @@
+<?php
+# Copyright (C) 2003 Brion Vibber <brion@pobox.com>
+# http://www.mediawiki.org/
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+# http://www.gnu.org/copyleft/gpl.html
+/**
+ *
+ * @addtogroup SpecialPage
+ */
+
+function wfExportGetPagesFromCategory( $title ) {
+	global $wgContLang;
+
+	$name = $title->getDBKey();
+
+	$dbr = wfGetDB( DB_SLAVE );
+
+	list( $page, $categorylinks ) = $dbr->tableNamesN( 'page', 'categorylinks' );
+	$sql = "SELECT page_namespace, page_title FROM $page " .
+		"JOIN $categorylinks ON cl_from = page_id " .
+		"WHERE cl_to = " . $dbr->addQuotes( $name );
+
+	$pages = array();
+	$res = $dbr->query( $sql, 'wfExportGetPagesFromCategory' );
+	while ( $row = $dbr->fetchObject( $res ) ) {
+		$n = $row->page_title;
+		if ($row->page_namespace) {
+			$ns = $wgContLang->getNsText( $row->page_namespace );
+			$n = $ns . ':' . $n;
+		}
+
+		$pages[] = $n;
+	}
+	$dbr->freeResult($res);
+
+	return $pages;
+}
+
+/**
+ *
+ */
+function wfSpecialExport( $page = '' ) {
+	global $wgOut, $wgRequest, $wgExportAllowListContributors;
+	global $wgExportAllowHistory, $wgExportMaxHistory;
+
+	$curonly = true;
+	$doexport = false;
+
+	if ( $wgRequest->getCheck( 'addcat' ) ) {
+		$page = $wgRequest->getText( 'pages' );
+		$catname = $wgRequest->getText( 'catname' );
+		
+		if ( $catname !== '' && $catname !== NULL && $catname !== false ) {
+			$t = Title::makeTitleSafe( NS_CATEGORY, $catname );
+			if ( $t ) {
+				$catpages = wfExportGetPagesFromCategory( $t );
+				if ( $catpages ) $page .= "\n" . implode( "\n", $catpages );
+			}
+		}
+	}
+	else if( $wgRequest->wasPosted() ) {
+		$page = $wgRequest->getText( 'pages' );
+		$curonly = $wgRequest->getCheck( 'curonly' );
+		$rawOffset = $wgRequest->getVal( 'offset' );
+		if( $rawOffset ) {
+			$offset = wfTimestamp( TS_MW, $rawOffset );
+		} else {
+			$offset = null;
+		}
+		$limit = $wgRequest->getInt( 'limit' );
+		$dir = $wgRequest->getVal( 'dir' );
+		$history = array(
+			'dir' => 'asc',
+			'offset' => false,
+			'limit' => $wgExportMaxHistory,
+		);
+		$historyCheck = $wgRequest->getCheck( 'history' );
+		if ( $curonly ) {
+			$history = WikiExporter::CURRENT;
+		} elseif ( !$historyCheck ) {
+			if ( $limit > 0 && $limit < $wgExportMaxHistory ) {
+				$history['limit'] = $limit;
+			}
+			if ( !is_null( $offset ) ) {
+				$history['offset'] = $offset;
+			}
+			if ( strtolower( $dir ) == 'desc' ) {
+				$history['dir'] = 'desc';
+			}
+		}
+		
+		if( $page != '' ) $doexport = true;
+	} else {
+		// Default to current-only for GET requests
+		$page = $wgRequest->getText( 'pages', $page );
+		$historyCheck = $wgRequest->getCheck( 'history' );
+		if( $historyCheck ) {
+			$history = WikiExporter::FULL;
+		} else {
+			$history = WikiExporter::CURRENT;
+		}
+		
+		if( $page != '' ) $doexport = true;
+	}
+
+	if( !$wgExportAllowHistory ) {
+		// Override
+		$history = WikiExporter::CURRENT;
+	}
+	
+	$list_authors = $wgRequest->getCheck( 'listauthors' );
+	if ( !$curonly || !$wgExportAllowListContributors ) $list_authors = false ;
+
+	if ( $doexport ) {
+		$wgOut->disable();
+		
+		// Cancel output buffering and gzipping if set
+		// This should provide safer streaming for pages with history
+		wfResetOutputBuffers();
+		header( "Content-type: application/xml; charset=utf-8" );
+		$pages = explode( "\n", $page );
+
+		$db = wfGetDB( DB_SLAVE );
+		$exporter = new WikiExporter( $db, $history );
+		$exporter->list_authors = $list_authors ;
+		$exporter->openStream();
+		
+		foreach( $pages as $page ) {
+			/*
+			if( $wgExportMaxHistory && !$curonly ) {
+				$title = Title::newFromText( $page );
+				if( $title ) {
+					$count = Revision::countByTitle( $db, $title );
+					if( $count > $wgExportMaxHistory ) {
+						wfDebug( __FUNCTION__ .
+							": Skipped $page, $count revisions too big\n" );
+						continue;
+					}
+				}
+			}*/
+
+			#Bug 8824: Only export pages the user can read
+			$title = Title::newFromText( $page );
+			if( is_null( $title ) ) continue; #TODO: perhaps output an <error> tag or something.
+			if( !$title->userCan( 'read' ) ) continue; #TODO: perhaps output an <error> tag or something.
+
+			$exporter->pageByTitle( $title );
+		}
+		
+		$exporter->closeStream();
+		return;
+	}
+
+	$wgOut->addWikiText( wfMsg( "exporttext" ) );
+	$titleObj = SpecialPage::getTitleFor( "Export" );
+	
+	$form = wfOpenElement( 'form', array( 'method' => 'post', 'action' => $titleObj->getLocalUrl() ) );
+
+	$form .= wfInputLabel( wfMsg( 'export-addcattext' ), 'catname', 'catname', 40 ) . ' ';
+	$form .= wfSubmitButton( wfMsg( 'export-addcat' ), array( 'name' => 'addcat' ) ) . '<br />';
+
+	$form .= wfOpenElement( 'textarea', array( 'name' => 'pages', 'cols' => 40, 'rows' => 10 ) ) . htmlspecialchars($page). '</textarea><br />';
+
+	if( $wgExportAllowHistory ) {
+		$form .= wfCheck( 'curonly', true, array( 'value' => 'true', 'id' => 'curonly' ) );
+		$form .= wfLabel( wfMsg( 'exportcuronly' ), 'curonly' ) . '<br />';
+	} else {
+		$wgOut->addWikiText( wfMsg( 'exportnohistory' ) );
+	}
+	$form .= wfHidden( 'action', 'submit' );
+	$form .= wfSubmitButton( wfMsg( 'export-submit' ) ) . '</form>';
+	$wgOut->addHtml( $form );
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/SpecialFewestrevisions.php
===================================================================
--- /MediaWiki/branches/1.11/includes/SpecialFewestrevisions.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/SpecialFewestrevisions.php	(revision 1280)
@@ -0,0 +1,65 @@
+<?php
+
+/**
+ * Special page for listing the articles with the fewest revisions.
+ *
+ * @package MediaWiki
+ * @addtogroup SpecialPage
+ * @author Martin Drashkov
+ */
+class FewestrevisionsPage extends QueryPage {
+
+	function getName() {
+		return 'Fewestrevisions';
+	}
+
+	function isExpensive() {
+		return true;
+	}
+
+	function isSyndicated() {
+		return false;
+	}
+
+	function getSql() {
+		$dbr = wfGetDB( DB_SLAVE );
+		list( $revision, $page ) = $dbr->tableNamesN( 'revision', 'page' );
+
+		return "SELECT 'Fewestrevisions' as type,
+				page_namespace as namespace,
+				page_title as title,
+				COUNT(*) as value
+			FROM $revision
+			JOIN $page ON page_id = rev_page
+			WHERE page_namespace = " . NS_MAIN . "
+			GROUP BY 1,2,3
+			HAVING COUNT(*) > 1";
+	}
+
+	function sortDescending() {
+		return false;
+	}
+
+	function formatResult( $skin, $result ) {
+		global $wgLang, $wgContLang;
+
+		$nt = Title::makeTitleSafe( $result->namespace, $result->title );
+		$text = $wgContLang->convert( $nt->getPrefixedText() );
+
+		$plink = $skin->makeKnownLinkObj( $nt, $text );
+
+		$nl = wfMsgExt( 'nrevisions', array( 'parsemag', 'escape'),
+			$wgLang->formatNum( $result->value ) );
+		$nlink = $skin->makeKnownLinkObj( $nt, $nl, 'action=history' );
+
+		return wfSpecialList( $plink, $nlink );
+	}
+}
+
+function wfSpecialFewestrevisions() {
+	list( $limit, $offset ) = wfCheckLimits();
+	$frp = new FewestrevisionsPage();
+	$frp->doQuery( $offset, $limit );
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/SpecialImagelist.php
===================================================================
--- /MediaWiki/branches/1.11/includes/SpecialImagelist.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/SpecialImagelist.php	(revision 1280)
@@ -0,0 +1,170 @@
+<?php
+/**
+ *
+ * @addtogroup SpecialPage
+ */
+
+/**
+ *
+ */
+function wfSpecialImagelist() {
+	global $wgOut;
+
+	$pager = new ImageListPager;
+
+	$limit = $pager->getForm();
+	$body = $pager->getBody();
+	$nav = $pager->getNavigationBar();
+	$wgOut->addHTML(
+		$limit
+		. '<br/>'
+		. $body
+		. '<br/>'
+		. $nav );
+}
+
+/**
+ * @addtogroup SpecialPage
+ * @addtogroup Pager
+ */
+class ImageListPager extends TablePager {
+	var $mFieldNames = null;
+	var $mMessages = array();
+	var $mQueryConds = array();
+
+	function __construct() {
+		global $wgRequest, $wgMiserMode;
+		if ( $wgRequest->getText( 'sort', 'img_date' ) == 'img_date' ) {
+			$this->mDefaultDirection = true;
+		} else {
+			$this->mDefaultDirection = false;
+		}
+		$search = $wgRequest->getText( 'ilsearch' );
+		if ( $search != '' && !$wgMiserMode ) {
+			$nt = Title::newFromUrl( $search );
+			if( $nt ) {
+				$dbr = wfGetDB( DB_SLAVE );
+				$m = $dbr->strencode( strtolower( $nt->getDBkey() ) );
+				$m = str_replace( "%", "\\%", $m );
+				$m = str_replace( "_", "\\_", $m );
+				$this->mQueryConds = array( "LOWER(img_name) LIKE '%{$m}%'" );
+			}
+		}
+
+		parent::__construct();
+	}
+
+	function getFieldNames() {
+		if ( !$this->mFieldNames ) {
+			$this->mFieldNames = array(
+				'links' => '',
+				'img_timestamp' => wfMsg( 'imagelist_date' ),
+				'img_name' => wfMsg( 'imagelist_name' ),
+				'img_user_text' => wfMsg( 'imagelist_user' ),
+				'img_size' => wfMsg( 'imagelist_size' ),
+				'img_description' => wfMsg( 'imagelist_description' ),
+			);
+		}
+		return $this->mFieldNames;
+	}
+
+	function isFieldSortable( $field ) {
+		static $sortable = array( 'img_timestamp', 'img_name', 'img_size' );
+		return in_array( $field, $sortable );
+	}
+
+	function getQueryInfo() {
+		$fields = $this->getFieldNames();
+		unset( $fields['links'] );
+		$fields = array_keys( $fields );
+		$fields[] = 'img_user';
+		return array(
+			'tables' => 'image',
+			'fields' => $fields,
+			'conds' => $this->mQueryConds
+		);
+	}
+
+	function getDefaultSort() {
+		return 'img_timestamp';
+	}
+
+	function getStartBody() {
+		# Do a link batch query for user pages
+		if ( $this->mResult->numRows() ) {
+			$lb = new LinkBatch;
+			$this->mResult->seek( 0 );
+			while ( $row = $this->mResult->fetchObject() ) {
+				if ( $row->img_user ) {
+					$lb->add( NS_USER, str_replace( ' ', '_', $row->img_user_text ) );
+				}
+			}
+			$lb->execute();
+		}
+
+		# Cache messages used in each row
+		$this->mMessages['imgdesc'] = wfMsgHtml( 'imgdesc' );
+		$this->mMessages['imgfile'] = wfMsgHtml( 'imgfile' );
+		
+		return parent::getStartBody();
+	}
+
+	function formatValue( $field, $value ) {
+		global $wgLang;
+		switch ( $field ) {
+			case 'links':
+				$name = $this->mCurrentRow->img_name;
+				$ilink = "<a href=\"" . htmlspecialchars( Image::imageUrl( $name ) ) .
+				  "\">" . $this->mMessages['imgfile'] . "</a>";
+				$desc = $this->getSkin()->makeKnownLinkObj( Title::makeTitle( NS_IMAGE, $name ),
+					$this->mMessages['imgdesc'] );
+				return "$desc | $ilink";
+			case 'img_timestamp':
+				return $wgLang->timeanddate( $value, true );
+			case 'img_name':
+				return htmlspecialchars( $value );
+			case 'img_user_text':
+				if ( $this->mCurrentRow->img_user ) {
+					$link = $this->getSkin()->makeLinkObj( Title::makeTitle( NS_USER, $value ), 
+						htmlspecialchars( $value ) );
+				} else {
+					$link = htmlspecialchars( $value );
+				}
+				return $link;
+			case 'img_size':
+				return $wgLang->formatNum( $value );
+			case 'img_description':
+				return $this->getSkin()->commentBlock( $value );
+		}
+	}
+
+	function getForm() {
+		global $wgRequest, $wgMiserMode;
+		$url = $this->getTitle()->escapeLocalURL();
+		$search = $wgRequest->getText( 'ilsearch' );
+		$s = "<form method=\"get\" action=\"$url\">\n" .
+			wfMsgHtml( 'table_pager_limit', $this->getLimitSelect() );
+		if ( !$wgMiserMode ) {
+			$s .= "<br/>\n" .
+			Xml::inputLabel( wfMsg( 'imagelist_search_for' ), 'ilsearch', 'mw-ilsearch', 20, $search );
+		}
+		$s .= " " . Xml::submitButton( wfMsg( 'table_pager_limit_submit' ) ) ." \n" .
+			$this->getHiddenFields( array( 'limit', 'ilsearch' ) ) .
+			"</form>\n";
+		return $s;
+	}
+
+	function getTableClass() {
+		return 'imagelist ' . parent::getTableClass();
+	}
+
+	function getNavClass() {
+		return 'imagelist_nav ' . parent::getNavClass();
+	}
+
+	function getSortHeaderClass() {
+		return 'imagelist_sort ' . parent::getSortHeaderClass();
+	}
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/SpecialImport.php
===================================================================
--- /MediaWiki/branches/1.11/includes/SpecialImport.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/SpecialImport.php	(revision 1280)
@@ -0,0 +1,882 @@
+<?php
+/**
+ * MediaWiki page data importer
+ * Copyright (C) 2003,2005 Brion Vibber <brion@pobox.com>
+ * http://www.mediawiki.org/
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @addtogroup SpecialPage
+ */
+
+/**
+ * Constructor
+ */
+function wfSpecialImport( $page = '' ) {
+	global $wgUser, $wgOut, $wgRequest, $wgTitle, $wgImportSources;
+	global $wgImportTargetNamespace;
+
+	$interwiki = false;
+	$namespace = $wgImportTargetNamespace;
+	$frompage = '';
+	$history = true;
+
+	if( $wgRequest->wasPosted() && $wgRequest->getVal( 'action' ) == 'submit') {
+		$isUpload = false;
+		$namespace = $wgRequest->getIntOrNull( 'namespace' );
+
+		switch( $wgRequest->getVal( "source" ) ) {
+		case "upload":
+			$isUpload = true;
+			if( $wgUser->isAllowed( 'importupload' ) ) {
+				$source = ImportStreamSource::newFromUpload( "xmlimport" );
+			} else {
+				return $wgOut->permissionRequired( 'importupload' );
+			}
+			break;
+		case "interwiki":
+			$interwiki = $wgRequest->getVal( 'interwiki' );
+			$history = $wgRequest->getCheck( 'interwikiHistory' );
+			$frompage = $wgRequest->getText( "frompage" );
+			$source = ImportStreamSource::newFromInterwiki(
+				$interwiki,
+				$frompage,
+				$history );
+			break;
+		default:
+			$source = new WikiErrorMsg( "importunknownsource" );
+		}
+
+		if( WikiError::isError( $source ) ) {
+			$wgOut->addWikiText( wfEscapeWikiText( $source->getMessage() ) );
+		} else {
+			$wgOut->addWikiText( wfMsg( "importstart" ) );
+
+			$importer = new WikiImporter( $source );
+			if( !is_null( $namespace ) ) {
+				$importer->setTargetNamespace( $namespace );
+			}
+			$reporter = new ImportReporter( $importer, $isUpload, $interwiki );
+
+			$reporter->open();
+			$result = $importer->doImport();
+			$reporter->close();
+
+			if( WikiError::isError( $result ) ) {
+				$wgOut->addWikiText( wfMsg( "importfailed",
+					wfEscapeWikiText( $result->getMessage() ) ) );
+			} else {
+				# Success!
+				$wgOut->addWikiText( wfMsg( "importsuccess" ) );
+			}
+		}
+	}
+
+	$action = $wgTitle->escapeLocalUrl( 'action=submit' );
+
+	if( $wgUser->isAllowed( 'importupload' ) ) {
+		$wgOut->addWikiText( wfMsg( "importtext" ) );
+		$wgOut->addHTML( "
+<fieldset>
+	<legend>" . wfMsgHtml('upload') . "</legend>
+	<form enctype='multipart/form-data' method='post' action=\"$action\">
+		<input type='hidden' name='action' value='submit' />
+		<input type='hidden' name='source' value='upload' />
+		<input type='hidden' name='MAX_FILE_SIZE' value='2000000' />
+		<input type='file' name='xmlimport' value='' size='30' />
+		<input type='submit' value=\"" . wfMsgHtml( "uploadbtn" ) . "\" />
+	</form>
+</fieldset>
+" );
+	} else {
+		if( empty( $wgImportSources ) ) {
+			$wgOut->addWikiText( wfMsg( 'importnosources' ) );
+		}
+	}
+
+	if( !empty( $wgImportSources ) ) {
+		$wgOut->addHTML( "
+<fieldset>
+	<legend>" . wfMsgHtml('importinterwiki') . "</legend>
+	<form method='post' action=\"$action\">" .
+		$wgOut->parse( wfMsg( 'import-interwiki-text' ) ) . "
+		<input type='hidden' name='action' value='submit' />
+		<input type='hidden' name='source' value='interwiki' />
+		<table>
+			<tr>
+				<td>
+					<select name='interwiki'>" );
+		foreach( $wgImportSources as $prefix ) {
+			$iw = htmlspecialchars( $prefix );
+			$selected = ($interwiki === $prefix) ? ' selected="selected"' : '';
+			$wgOut->addHTML( "<option value=\"$iw\"$selected>$iw</option>\n" );
+		}
+		$wgOut->addHTML( "
+					</select>
+				</td>
+				<td>" .
+					wfInput( 'frompage', 50, $frompage ) .
+				"</td>
+			</tr>
+			<tr>
+				<td></td>
+				<td>" .
+					wfCheckLabel( wfMsg( 'import-interwiki-history' ),
+						'interwikiHistory', 'interwikiHistory', $history ) .
+				"</td>
+			</tr>
+			<tr>
+				<td></td>
+				<td>
+					" . wfMsgHtml( 'import-interwiki-namespace' ) . " " .
+						HTMLnamespaceselector( $namespace, '' ) . "
+				</td>
+			</tr>
+			<tr>
+				<td></td>
+				<td>" .
+					wfSubmitButton( wfMsg( 'import-interwiki-submit' ) ) .
+				"</td>
+			</tr>
+		</table>
+	</form>
+</fieldset>
+" );
+	}
+}
+
+/**
+ * Reporting callback
+ * @addtogroup SpecialPage
+ */
+class ImportReporter {
+	function __construct( $importer, $upload, $interwiki ) {
+		$importer->setPageOutCallback( array( $this, 'reportPage' ) );
+		$this->mPageCount = 0;
+		$this->mIsUpload = $upload;
+		$this->mInterwiki = $interwiki;
+	}
+
+	function open() {
+		global $wgOut;
+		$wgOut->addHtml( "<ul>\n" );
+	}
+
+	function reportPage( $title, $origTitle, $revisionCount, $successCount ) {
+		global $wgOut, $wgUser, $wgLang, $wgContLang;
+
+		$skin = $wgUser->getSkin();
+
+		$this->mPageCount++;
+
+		$localCount = $wgLang->formatNum( $successCount );
+		$contentCount = $wgContLang->formatNum( $successCount );
+
+		$wgOut->addHtml( "<li>" . $skin->makeKnownLinkObj( $title ) .
+			" " .
+			wfMsgExt( 'import-revision-count', array( 'parsemag', 'escape' ), $localCount ) .
+			"</li>\n" );
+
+		if( $successCount > 0 ) {
+			$log = new LogPage( 'import' );
+			if( $this->mIsUpload ) {
+				$detail = wfMsgForContent( 'import-logentry-upload-detail',
+					$contentCount );
+				$log->addEntry( 'upload', $title, $detail );
+			} else {
+				$interwiki = '[[:' . $this->mInterwiki . ':' .
+					$origTitle->getPrefixedText() . ']]';
+				$detail = wfMsgForContent( 'import-logentry-interwiki-detail',
+					$contentCount, $interwiki );
+				$log->addEntry( 'interwiki', $title, $detail );
+			}
+
+			$comment = $detail; // quick
+			$dbw = wfGetDB( DB_MASTER );
+			$nullRevision = Revision::newNullRevision(
+				$dbw, $title->getArticleId(), $comment, true );
+			$nullRevision->insertOn( $dbw );
+		}
+	}
+
+	function close() {
+		global $wgOut;
+		if( $this->mPageCount == 0 ) {
+			$wgOut->addHtml( "<li>" . wfMsgHtml( 'importnopages' ) . "</li>\n" );
+		}
+		$wgOut->addHtml( "</ul>\n" );
+	}
+}
+
+/**
+ *
+ * @addtogroup SpecialPage
+ */
+class WikiRevision {
+	var $title = null;
+	var $id = 0;
+	var $timestamp = "20010115000000";
+	var $user = 0;
+	var $user_text = "";
+	var $text = "";
+	var $comment = "";
+	var $minor = false;
+
+	function setTitle( $title ) {
+		if( is_object( $title ) ) {
+			$this->title = $title;
+		} elseif( is_null( $title ) ) {
+			throw new MWException( "WikiRevision given a null title in import. You may need to adjust \$wgLegalTitleChars." );
+		} else {
+			throw new MWException( "WikiRevision given non-object title in import." );
+		}
+	}
+
+	function setID( $id ) {
+		$this->id = $id;
+	}
+
+	function setTimestamp( $ts ) {
+		# 2003-08-05T18:30:02Z
+		$this->timestamp = wfTimestamp( TS_MW, $ts );
+	}
+
+	function setUsername( $user ) {
+		$this->user_text = $user;
+	}
+
+	function setUserIP( $ip ) {
+		$this->user_text = $ip;
+	}
+
+	function setText( $text ) {
+		$this->text = $text;
+	}
+
+	function setComment( $text ) {
+		$this->comment = $text;
+	}
+
+	function setMinor( $minor ) {
+		$this->minor = (bool)$minor;
+	}
+
+	function getTitle() {
+		return $this->title;
+	}
+
+	function getID() {
+		return $this->id;
+	}
+
+	function getTimestamp() {
+		return $this->timestamp;
+	}
+
+	function getUser() {
+		return $this->user_text;
+	}
+
+	function getText() {
+		return $this->text;
+	}
+
+	function getComment() {
+		return $this->comment;
+	}
+
+	function getMinor() {
+		return $this->minor;
+	}
+
+	function importOldRevision() {
+		$dbw = wfGetDB( DB_MASTER );
+
+		# Sneak a single revision into place
+		$user = User::newFromName( $this->getUser() );
+		if( $user ) {
+			$userId = intval( $user->getId() );
+			$userText = $user->getName();
+		} else {
+			$userId = 0;
+			$userText = $this->getUser();
+		}
+
+		// avoid memory leak...?
+		$linkCache =& LinkCache::singleton();
+		$linkCache->clear();
+
+		$article = new Article( $this->title );
+		$pageId = $article->getId();
+		if( $pageId == 0 ) {
+			# must create the page...
+			$pageId = $article->insertOn( $dbw );
+			$created = true;
+		} else {
+			$created = false;
+
+			$prior = Revision::loadFromTimestamp( $dbw, $this->title, $this->timestamp );
+			if( !is_null( $prior ) ) {
+				// FIXME: this could fail slightly for multiple matches :P
+				wfDebug( __METHOD__ . ": skipping existing revision for [[" .
+					$this->title->getPrefixedText() . "]], timestamp " .
+					$this->timestamp . "\n" );
+				return false;
+			}
+		}
+
+		# FIXME: Use original rev_id optionally
+		# FIXME: blah blah blah
+
+		#if( $numrows > 0 ) {
+		#	return wfMsg( "importhistoryconflict" );
+		#}
+
+		# Insert the row
+		$revision = new Revision( array(
+			'page'       => $pageId,
+			'text'       => $this->getText(),
+			'comment'    => $this->getComment(),
+			'user'       => $userId,
+			'user_text'  => $userText,
+			'timestamp'  => $this->timestamp,
+			'minor_edit' => $this->minor,
+			) );
+		$revId = $revision->insertOn( $dbw );
+		$changed = $article->updateIfNewerOn( $dbw, $revision );
+
+		if( $created ) {
+			wfDebug( __METHOD__ . ": running onArticleCreate\n" );
+			Article::onArticleCreate( $this->title );
+
+			wfDebug( __METHOD__ . ": running create updates\n" );
+			$article->createUpdates( $revision );
+
+		} elseif( $changed ) {
+			wfDebug( __METHOD__ . ": running onArticleEdit\n" );
+			Article::onArticleEdit( $this->title );
+
+			wfDebug( __METHOD__ . ": running edit updates\n" );
+			$article->editUpdates(
+				$this->getText(),
+				$this->getComment(),
+				$this->minor,
+				$this->timestamp,
+				$revId );
+		}
+
+		return true;
+	}
+
+}
+
+/**
+ * implements Special:Import
+ * @addtogroup SpecialPage
+ */
+class WikiImporter {
+	var $mSource = null;
+	var $mPageCallback = null;
+	var $mPageOutCallback = null;
+	var $mRevisionCallback = null;
+	var $mTargetNamespace = null;
+	var $lastfield;
+
+	function WikiImporter( $source ) {
+		$this->setRevisionCallback( array( &$this, "importRevision" ) );
+		$this->mSource = $source;
+	}
+
+	function throwXmlError( $err ) {
+		$this->debug( "FAILURE: $err" );
+		wfDebug( "WikiImporter XML error: $err\n" );
+	}
+
+	# --------------
+
+	function doImport() {
+		if( empty( $this->mSource ) ) {
+			return new WikiErrorMsg( "importnotext" );
+		}
+
+		$parser = xml_parser_create( "UTF-8" );
+
+		# case folding violates XML standard, turn it off
+		xml_parser_set_option( $parser, XML_OPTION_CASE_FOLDING, false );
+
+		xml_set_object( $parser, $this );
+		xml_set_element_handler( $parser, "in_start", "" );
+
+		$offset = 0; // for context extraction on error reporting
+		do {
+			$chunk = $this->mSource->readChunk();
+			if( !xml_parse( $parser, $chunk, $this->mSource->atEnd() ) ) {
+				wfDebug( "WikiImporter::doImport encountered XML parsing error\n" );
+				return new WikiXmlError( $parser, 'XML import parse failure', $chunk, $offset );
+			}
+			$offset += strlen( $chunk );
+		} while( $chunk !== false && !$this->mSource->atEnd() );
+		xml_parser_free( $parser );
+
+		return true;
+	}
+
+	function debug( $data ) {
+		#wfDebug( "IMPORT: $data\n" );
+	}
+
+	function notice( $data ) {
+		global $wgCommandLineMode;
+		if( $wgCommandLineMode ) {
+			print "$data\n";
+		} else {
+			global $wgOut;
+			$wgOut->addHTML( "<li>" . htmlspecialchars( $data ) . "</li>\n" );
+		}
+	}
+
+	/**
+	 * Sets the action to perform as each new page in the stream is reached.
+	 * @param callable $callback
+	 * @return callable
+	 */
+	function setPageCallback( $callback ) {
+		$previous = $this->mPageCallback;
+		$this->mPageCallback = $callback;
+		return $previous;
+	}
+
+	/**
+	 * Sets the action to perform as each page in the stream is completed.
+	 * Callback accepts the page title (as a Title object), a second object
+	 * with the original title form (in case it's been overridden into a
+	 * local namespace), and a count of revisions.
+	 *
+	 * @param callable $callback
+	 * @return callable
+	 */
+	function setPageOutCallback( $callback ) {
+		$previous = $this->mPageOutCallback;
+		$this->mPageOutCallback = $callback;
+		return $previous;
+	}
+
+	/**
+	 * Sets the action to perform as each page revision is reached.
+	 * @param callable $callback
+	 * @return callable
+	 */
+	function setRevisionCallback( $callback ) {
+		$previous = $this->mRevisionCallback;
+		$this->mRevisionCallback = $callback;
+		return $previous;
+	}
+
+	/**
+	 * Set a target namespace to override the defaults
+	 */
+	function setTargetNamespace( $namespace ) {
+		if( is_null( $namespace ) ) {
+			// Don't override namespaces
+			$this->mTargetNamespace = null;
+		} elseif( $namespace >= 0 ) {
+			// FIXME: Check for validity
+			$this->mTargetNamespace = intval( $namespace );
+		} else {
+			return false;
+		}
+	}
+
+	/**
+	 * Default per-revision callback, performs the import.
+	 * @param WikiRevision $revision
+	 * @private
+	 */
+	function importRevision( &$revision ) {
+		$dbw = wfGetDB( DB_MASTER );
+		return $dbw->deadlockLoop( array( &$revision, 'importOldRevision' ) );
+	}
+
+	/**
+	 * Alternate per-revision callback, for debugging.
+	 * @param WikiRevision $revision
+	 * @private
+	 */
+	function debugRevisionHandler( &$revision ) {
+		$this->debug( "Got revision:" );
+		if( is_object( $revision->title ) ) {
+			$this->debug( "-- Title: " . $revision->title->getPrefixedText() );
+		} else {
+			$this->debug( "-- Title: <invalid>" );
+		}
+		$this->debug( "-- User: " . $revision->user_text );
+		$this->debug( "-- Timestamp: " . $revision->timestamp );
+		$this->debug( "-- Comment: " . $revision->comment );
+		$this->debug( "-- Text: " . $revision->text );
+	}
+
+	/**
+	 * Notify the callback function when a new <page> is reached.
+	 * @param Title $title
+	 * @private
+	 */
+	function pageCallback( $title ) {
+		if( is_callable( $this->mPageCallback ) ) {
+			call_user_func( $this->mPageCallback, $title );
+		}
+	}
+
+	/**
+	 * Notify the callback function when a </page> is closed.
+	 * @param Title $title
+	 * @param Title $origTitle
+	 * @param int $revisionCount
+	 * @param int $successCount number of revisions for which callback returned true
+	 * @private
+	 */
+	function pageOutCallback( $title, $origTitle, $revisionCount, $successCount ) {
+		if( is_callable( $this->mPageOutCallback ) ) {
+			call_user_func( $this->mPageOutCallback, $title, $origTitle,
+				$revisionCount, $successCount );
+		}
+	}
+
+
+	# XML parser callbacks from here out -- beware!
+	function donothing( $parser, $x, $y="" ) {
+		#$this->debug( "donothing" );
+	}
+
+	function in_start( $parser, $name, $attribs ) {
+		$this->debug( "in_start $name" );
+		if( $name != "mediawiki" ) {
+			return $this->throwXMLerror( "Expected <mediawiki>, got <$name>" );
+		}
+		xml_set_element_handler( $parser, "in_mediawiki", "out_mediawiki" );
+	}
+
+	function in_mediawiki( $parser, $name, $attribs ) {
+		$this->debug( "in_mediawiki $name" );
+		if( $name == 'siteinfo' ) {
+			xml_set_element_handler( $parser, "in_siteinfo", "out_siteinfo" );
+		} elseif( $name == 'page' ) {
+			$this->workRevisionCount = 0;
+			$this->workSuccessCount = 0;
+			xml_set_element_handler( $parser, "in_page", "out_page" );
+		} else {
+			return $this->throwXMLerror( "Expected <page>, got <$name>" );
+		}
+	}
+	function out_mediawiki( $parser, $name ) {
+		$this->debug( "out_mediawiki $name" );
+		if( $name != "mediawiki" ) {
+			return $this->throwXMLerror( "Expected </mediawiki>, got </$name>" );
+		}
+		xml_set_element_handler( $parser, "donothing", "donothing" );
+	}
+
+
+	function in_siteinfo( $parser, $name, $attribs ) {
+		// no-ops for now
+		$this->debug( "in_siteinfo $name" );
+		switch( $name ) {
+		case "sitename":
+		case "base":
+		case "generator":
+		case "case":
+		case "namespaces":
+		case "namespace":
+			break;
+		default:
+			return $this->throwXMLerror( "Element <$name> not allowed in <siteinfo>." );
+		}
+	}
+
+	function out_siteinfo( $parser, $name ) {
+		if( $name == "siteinfo" ) {
+			xml_set_element_handler( $parser, "in_mediawiki", "out_mediawiki" );
+		}
+	}
+
+
+	function in_page( $parser, $name, $attribs ) {
+		$this->debug( "in_page $name" );
+		switch( $name ) {
+		case "id":
+		case "title":
+		case "restrictions":
+			$this->appendfield = $name;
+			$this->appenddata = "";
+			$this->parenttag = "page";
+			xml_set_element_handler( $parser, "in_nothing", "out_append" );
+			xml_set_character_data_handler( $parser, "char_append" );
+			break;
+		case "revision":
+			if( is_object( $this->pageTitle ) ) {
+				$this->workRevision = new WikiRevision;
+				$this->workRevision->setTitle( $this->pageTitle );
+				$this->workRevisionCount++;
+			} else {
+				// Skipping items due to invalid page title
+				$this->workRevision = null;
+			}
+			xml_set_element_handler( $parser, "in_revision", "out_revision" );
+			break;
+		default:
+			return $this->throwXMLerror( "Element <$name> not allowed in a <page>." );
+		}
+	}
+
+	function out_page( $parser, $name ) {
+		$this->debug( "out_page $name" );
+		if( $name != "page" ) {
+			return $this->throwXMLerror( "Expected </page>, got </$name>" );
+		}
+		xml_set_element_handler( $parser, "in_mediawiki", "out_mediawiki" );
+
+		$this->pageOutCallback( $this->pageTitle, $this->origTitle,
+			$this->workRevisionCount, $this->workSuccessCount );
+
+		$this->workTitle = null;
+		$this->workRevision = null;
+		$this->workRevisionCount = 0;
+		$this->workSuccessCount = 0;
+		$this->pageTitle = null;
+		$this->origTitle = null;
+	}
+
+	function in_nothing( $parser, $name, $attribs ) {
+		$this->debug( "in_nothing $name" );
+		return $this->throwXMLerror( "No child elements allowed here; got <$name>" );
+	}
+	function char_append( $parser, $data ) {
+		$this->debug( "char_append '$data'" );
+		$this->appenddata .= $data;
+	}
+	function out_append( $parser, $name ) {
+		$this->debug( "out_append $name" );
+		if( $name != $this->appendfield ) {
+			return $this->throwXMLerror( "Expected </{$this->appendfield}>, got </$name>" );
+		}
+		xml_set_element_handler( $parser, "in_$this->parenttag", "out_$this->parenttag" );
+		xml_set_character_data_handler( $parser, "donothing" );
+
+		switch( $this->appendfield ) {
+		case "title":
+			$this->workTitle = $this->appenddata;
+			$this->origTitle = Title::newFromText( $this->workTitle );
+			if( !is_null( $this->mTargetNamespace ) && !is_null( $this->origTitle ) ) {
+				$this->pageTitle = Title::makeTitle( $this->mTargetNamespace,
+					$this->origTitle->getDbKey() );
+			} else {
+				$this->pageTitle = Title::newFromText( $this->workTitle );
+			}
+			if( is_null( $this->pageTitle ) ) {
+				// Invalid page title? Ignore the page
+				$this->notice( "Skipping invalid page title '$this->workTitle'" );
+			} else {
+				$this->pageCallback( $this->workTitle );
+			}
+			break;
+		case "id":
+			if ( $this->parenttag == 'revision' ) {
+				if( $this->workRevision )
+					$this->workRevision->setID( $this->appenddata );
+			}
+			break;
+		case "text":
+			if( $this->workRevision )
+				$this->workRevision->setText( $this->appenddata );
+			break;
+		case "username":
+			if( $this->workRevision )
+				$this->workRevision->setUsername( $this->appenddata );
+			break;
+		case "ip":
+			if( $this->workRevision )
+				$this->workRevision->setUserIP( $this->appenddata );
+			break;
+		case "timestamp":
+			if( $this->workRevision )
+				$this->workRevision->setTimestamp( $this->appenddata );
+			break;
+		case "comment":
+			if( $this->workRevision )
+				$this->workRevision->setComment( $this->appenddata );
+			break;
+		case "minor":
+			if( $this->workRevision )
+				$this->workRevision->setMinor( true );
+			break;
+		default:
+			$this->debug( "Bad append: {$this->appendfield}" );
+		}
+		$this->appendfield = "";
+		$this->appenddata = "";
+	}
+
+	function in_revision( $parser, $name, $attribs ) {
+		$this->debug( "in_revision $name" );
+		switch( $name ) {
+		case "id":
+		case "timestamp":
+		case "comment":
+		case "minor":
+		case "text":
+			$this->parenttag = "revision";
+			$this->appendfield = $name;
+			xml_set_element_handler( $parser, "in_nothing", "out_append" );
+			xml_set_character_data_handler( $parser, "char_append" );
+			break;
+		case "contributor":
+			xml_set_element_handler( $parser, "in_contributor", "out_contributor" );
+			break;
+		default:
+			return $this->throwXMLerror( "Element <$name> not allowed in a <revision>." );
+		}
+	}
+
+	function out_revision( $parser, $name ) {
+		$this->debug( "out_revision $name" );
+		if( $name != "revision" ) {
+			return $this->throwXMLerror( "Expected </revision>, got </$name>" );
+		}
+		xml_set_element_handler( $parser, "in_page", "out_page" );
+
+		if( $this->workRevision ) {
+			$ok = call_user_func_array( $this->mRevisionCallback,
+				array( &$this->workRevision, &$this ) );
+			if( $ok ) {
+				$this->workSuccessCount++;
+			}
+		}
+	}
+
+	function in_contributor( $parser, $name, $attribs ) {
+		$this->debug( "in_contributor $name" );
+		switch( $name ) {
+		case "username":
+		case "ip":
+		case "id":
+			$this->parenttag = "contributor";
+			$this->appendfield = $name;
+			xml_set_element_handler( $parser, "in_nothing", "out_append" );
+			xml_set_character_data_handler( $parser, "char_append" );
+			break;
+		default:
+			$this->throwXMLerror( "Invalid tag <$name> in <contributor>" );
+		}
+	}
+
+	function out_contributor( $parser, $name ) {
+		$this->debug( "out_contributor $name" );
+		if( $name != "contributor" ) {
+			return $this->throwXMLerror( "Expected </contributor>, got </$name>" );
+		}
+		xml_set_element_handler( $parser, "in_revision", "out_revision" );
+	}
+
+}
+
+/**
+ * @todo document (e.g. one-sentence class description).
+ * @addtogroup SpecialPage
+ */
+class ImportStringSource {
+	function ImportStringSource( $string ) {
+		$this->mString = $string;
+		$this->mRead = false;
+	}
+
+	function atEnd() {
+		return $this->mRead;
+	}
+
+	function readChunk() {
+		if( $this->atEnd() ) {
+			return false;
+		} else {
+			$this->mRead = true;
+			return $this->mString;
+		}
+	}
+}
+
+/**
+ * @todo document (e.g. one-sentence class description).
+ * @addtogroup SpecialPage
+ */
+class ImportStreamSource {
+	function ImportStreamSource( $handle ) {
+		$this->mHandle = $handle;
+	}
+
+	function atEnd() {
+		return feof( $this->mHandle );
+	}
+
+	function readChunk() {
+		return fread( $this->mHandle, 32768 );
+	}
+
+	static function newFromFile( $filename ) {
+		$file = @fopen( $filename, 'rt' );
+		if( !$file ) {
+			return new WikiErrorMsg( "importcantopen" );
+		}
+		return new ImportStreamSource( $file );
+	}
+
+	static function newFromUpload( $fieldname = "xmlimport" ) {
+		$upload =& $_FILES[$fieldname];
+
+		if( !isset( $upload ) || !$upload['name'] ) {
+			return new WikiErrorMsg( 'importnofile' );
+		}
+		if( !empty( $upload['error'] ) ) {
+			return new WikiErrorMsg( 'importuploaderror', $upload['error'] );
+		}
+		$fname = $upload['tmp_name'];
+		if( is_uploaded_file( $fname ) ) {
+			return ImportStreamSource::newFromFile( $fname );
+		} else {
+			return new WikiErrorMsg( 'importnofile' );
+		}
+	}
+
+	function newFromURL( $url ) {
+		wfDebug( __METHOD__ . ": opening $url\n" );
+		# fopen-wrappers are normally turned off for security.
+		ini_set( "allow_url_fopen", true );
+		$ret = ImportStreamSource::newFromFile( $url );
+		ini_set( "allow_url_fopen", false );
+		return $ret;
+	}
+
+	public static function newFromInterwiki( $interwiki, $page, $history=false ) {
+		$link = Title::newFromText( "$interwiki:Special:Export/$page" );
+		if( is_null( $link ) || $link->getInterwiki() == '' ) {
+			return new WikiErrorMsg( 'importbadinterwiki' );
+		} else {
+			$params = $history ? 'history=1' : '';
+			$url = $link->getFullUrl( $params );
+			return ImportStreamSource::newFromURL( $url );
+		}
+	}
+}
+
+
+?>
Index: /MediaWiki/branches/1.11/includes/SpecialIpblocklist.php
===================================================================
--- /MediaWiki/branches/1.11/includes/SpecialIpblocklist.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/SpecialIpblocklist.php	(revision 1280)
@@ -0,0 +1,386 @@
+<?php
+/**
+ *
+ * @addtogroup SpecialPage
+ */
+
+/**
+ * @todo document
+ */
+function wfSpecialIpblocklist() {
+	global $wgUser, $wgOut, $wgRequest;
+	
+	$ip = $wgRequest->getVal( 'wpUnblockAddress', $wgRequest->getVal( 'ip' ) );
+	$id = $wgRequest->getVal( 'id' );
+	$reason = $wgRequest->getText( 'wpUnblockReason' );
+	$action = $wgRequest->getText( 'action' );
+	$successip = $wgRequest->getVal( 'successip' );
+
+	$ipu = new IPUnblockForm( $ip, $id, $reason );
+
+	if ( "success" == $action ) {
+		$ipu->showList( $wgOut->parse( wfMsg( 'unblocked', $successip ) ) );
+	} else if ( "submit" == $action && $wgRequest->wasPosted() &&
+		$wgUser->matchEditToken( $wgRequest->getVal( 'wpEditToken' ) ) ) {
+		if ( ! $wgUser->isAllowed('block') ) {
+			$wgOut->permissionRequired( 'block' );
+			return;
+		}
+		# Can't unblock when the database is locked
+		if( wfReadOnly() ) {
+			$wgOut->readOnlyPage();
+			return;
+		}
+		$ipu->doSubmit();
+	} else if ( "unblock" == $action ) {
+		# Can't unblock when the database is locked
+		if( wfReadOnly() ) {
+			$wgOut->readOnlyPage();
+			return;
+		}
+		$ipu->showForm( "" );
+	} else {
+		$ipu->showList( "" );
+	}
+}
+
+/**
+ * implements Special:ipblocklist GUI
+ * @addtogroup SpecialPage
+ */
+class IPUnblockForm {
+	var $ip, $reason, $id;
+
+	function IPUnblockForm( $ip, $id, $reason ) {
+		$this->ip = strtr( $ip, '_', ' ' );
+		$this->id = $id;
+		$this->reason = $reason;
+	}
+
+	function showForm( $err ) {
+		global $wgOut, $wgUser, $wgSysopUserBans;
+
+		$wgOut->setPagetitle( wfMsg( 'unblockip' ) );
+		$wgOut->addWikiText( wfMsg( 'unblockiptext' ) );
+
+		$ipa = wfMsgHtml( $wgSysopUserBans ? 'ipadressorusername' : 'ipaddress' );
+		$ipr = wfMsgHtml( 'ipbreason' );
+		$ipus = wfMsgHtml( 'ipusubmit' );
+		$titleObj = SpecialPage::getTitleFor( "Ipblocklist" );
+		$action = $titleObj->escapeLocalURL( "action=submit" );
+
+		if ( "" != $err ) {
+			$wgOut->setSubtitle( wfMsg( "formerror" ) );
+			$wgOut->addWikitext( "<span class='error'>{$err}</span>\n" );
+		}
+		$token = htmlspecialchars( $wgUser->editToken() );
+
+		$addressPart = false;
+		if ( $this->id ) {
+			$block = Block::newFromID( $this->id );
+			if ( $block ) {
+				$encName = htmlspecialchars( $block->getRedactedName() );
+				$encId = htmlspecialchars( $this->id );
+				$addressPart = $encName . "<input type='hidden' name=\"id\" value=\"$encId\" />";
+			}
+		}
+		if ( !$addressPart ) {
+			$addressPart = "<input tabindex='1' type='text' size='20' " .
+				"name=\"wpUnblockAddress\" value=\"" . htmlspecialchars( $this->ip ) . "\" />";
+		}
+
+		$wgOut->addHTML( "
+<form id=\"unblockip\" method=\"post\" action=\"{$action}\">
+	<table border='0'>
+		<tr>
+			<td align='right'>{$ipa}:</td>
+			<td align='left'>
+				{$addressPart}
+			</td>
+		</tr>
+		<tr>
+			<td align='right'>{$ipr}:</td>
+			<td align='left'>
+				<input tabindex='1' type='text' size='40' name=\"wpUnblockReason\" value=\"" . htmlspecialchars( $this->reason ) . "\" />
+			</td>
+		</tr>
+		<tr>
+			<td>&nbsp;</td>
+			<td align='left'>
+				<input tabindex='2' type='submit' name=\"wpBlock\" value=\"{$ipus}\" />
+			</td>
+		</tr>
+	</table>
+	<input type='hidden' name='wpEditToken' value=\"{$token}\" />
+</form>\n" );
+
+	}
+
+	function doSubmit() {
+		global $wgOut;
+
+		if ( $this->id ) {
+			$block = Block::newFromID( $this->id );
+			if ( $block ) {
+				$this->ip = $block->getRedactedName();
+			}
+		} else {
+			$block = new Block();
+			$this->ip = trim( $this->ip );
+			if ( substr( $this->ip, 0, 1 ) == "#" ) {
+				$id = substr( $this->ip, 1 );
+				$block = Block::newFromID( $id );
+			} else {
+				$block = Block::newFromDB( $this->ip );
+				if ( !$block ) { 
+					$block = null;
+				}
+			}
+		}
+		$success = false;
+		if ( $block ) {
+			# Delete block
+			if ( $block->delete() ) {
+				# Make log entry
+				$log = new LogPage( 'block' );
+				$log->addEntry( 'unblock', Title::makeTitle( NS_USER, $this->ip ), $this->reason );
+				$success = true;
+			}
+		}
+
+		if ( $success ) {
+			# Report to the user
+			$titleObj = SpecialPage::getTitleFor( "Ipblocklist" );
+			$success = $titleObj->getFullURL( "action=success&successip=" . urlencode( $this->ip ) );
+			$wgOut->redirect( $success );
+		} else {
+			if ( !$this->ip && $this->id ) {
+				$this->ip = '#' . $this->id;
+			}
+			$this->showForm( wfMsg( 'ipb_cant_unblock', htmlspecialchars( $this->id ) ) );
+		}
+	}
+
+	function showList( $msg ) {
+		global $wgOut, $wgUser;
+
+		$wgOut->setPagetitle( wfMsg( "ipblocklist" ) );
+		if ( "" != $msg ) {
+			$wgOut->setSubtitle( $msg );
+		}
+
+		// Purge expired entries on one in every 10 queries
+		if ( !mt_rand( 0, 10 ) ) {
+			Block::purgeExpired();
+		}
+
+		$conds = array();
+		$matches = array();
+		// Is user allowed to see all the blocks?
+		if ( !$wgUser->isAllowed( 'oversight' ) )
+			$conds['ipb_deleted'] = 0;
+		if ( $this->ip == '' ) {
+			// No extra conditions
+		} elseif ( substr( $this->ip, 0, 1 ) == '#' ) {
+			$conds['ipb_id'] = substr( $this->ip, 1 );
+		} elseif ( IP::toUnsigned( $this->ip ) !== false ) {
+			$conds['ipb_address'] = $this->ip;
+			$conds['ipb_auto'] = 0;
+		} elseif( preg_match( '/^(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\\/(\\d{1,2})$/', $this->ip, $matches ) ) {
+			$conds['ipb_address'] = Block::normaliseRange( $this->ip );
+			$conds['ipb_auto'] = 0;
+		} else {
+			$user = User::newFromName( $this->ip );
+			if ( $user && ( $id = $user->getID() ) != 0 ) {
+				$conds['ipb_user'] = $id;
+			} else {
+				// Uh...?
+				$conds['ipb_address'] = $this->ip;
+				$conds['ipb_auto'] = 0;
+			}
+		}
+
+                # TODO: difference message between
+		#       a) an real empty list and
+		#       b) requested ip/username not on list
+		$pager = new IPBlocklistPager( $this, $conds );
+		if ( $pager->getNumRows() ) {
+			$s = $this->searchForm() .
+				$pager->getNavigationBar();
+			$s .= "<ul>" . 
+				$pager->getBody() .
+				"</ul>";
+			$s .= $pager->getNavigationBar();
+		} else {
+			$s = $this->searchForm() .
+				'<p>' . wfMsgHTML( 'ipblocklistempty' ) . '</p>';
+		}
+		$wgOut->addHTML( $s );
+	}
+
+	function searchForm() {
+		global $wgTitle, $wgScript, $wgRequest;
+		return
+			wfElement( 'form', array(
+				'action' => $wgScript ),
+				null ) .
+			wfHidden( 'title', $wgTitle->getPrefixedDbKey() ) .
+			wfElement( 'input', array(
+				'type' => 'hidden',
+				'name' => 'action',
+				'value' => 'search' ) ).
+			wfElement( 'input', array(
+				'type' => 'hidden',
+				'name' => 'limit',
+				'value' => $wgRequest->getText( 'limit' ) ) ) .
+			wfElement( 'input', array(
+				'name' => 'ip',
+				'value' => $this->ip ) ) .
+			wfElement( 'input', array(
+				'type' => 'submit',
+				'value' => wfMsg( 'ipblocklist-submit' ) ) ) .
+			'</form>';
+	}
+
+	/**
+	 * Callback function to output a block
+	 */
+	function formatRow( $block ) {
+		global $wgUser, $wgLang;
+
+		wfProfileIn( __METHOD__ );
+
+		static $sk=null, $msg=null;
+
+		if( is_null( $sk ) )
+			$sk = $wgUser->getSkin();
+		if( is_null( $msg ) ) {
+			$msg = array();
+			$keys = array( 'infiniteblock', 'expiringblock', 'contribslink', 'unblocklink', 
+				'anononlyblock', 'createaccountblock', 'noautoblockblock' );
+			foreach( $keys as $key ) {
+				$msg[$key] = wfMsgHtml( $key );
+			}
+			$msg['blocklistline'] = wfMsg( 'blocklistline' );
+			$msg['contribslink'] = wfMsg( 'contribslink' );
+		}
+
+		# Prepare links to the blocker's user and talk pages
+		$blocker_id = $block->getBy();
+		$blocker_name = $block->getByName();
+		$blocker = $sk->userLink( $blocker_id, $blocker_name );
+		$blocker .= $sk->userToolLinks( $blocker_id, $blocker_name );
+
+		# Prepare links to the block target's user and contribs. pages (as applicable, don't do it for autoblocks)
+		if( $block->mAuto ) {
+			$target = $block->getRedactedName(); # Hide the IP addresses of auto-blocks; privacy
+		} else {
+			$target = $sk->makeLinkObj( Title::makeTitle( NS_USER, $block->mAddress ), $block->mAddress );
+			$target .= ' (' . $sk->makeKnownLinkObj( SpecialPage::getSafeTitleFor( 'Contributions', $block->mAddress ), $msg['contribslink'] ) . ')';
+		}
+		
+		$formattedTime = $wgLang->timeanddate( $block->mTimestamp, true );
+
+		$properties = array();
+		if ( $block->mExpiry === "" || $block->mExpiry === Block::infinity() ) {
+			$properties[] = $msg['infiniteblock'];
+		} else {
+			$properties[] = wfMsgReplaceArgs( $msg['expiringblock'],
+				array( $wgLang->timeanddate( $block->mExpiry, true ) ) );
+		}
+		if ( $block->mAnonOnly ) {
+			$properties[] = $msg['anononlyblock'];
+		}
+		if ( $block->mCreateAccount ) {
+			$properties[] = $msg['createaccountblock'];
+		}
+		if (!$block->mEnableAutoblock && $block->mUser ) {
+			$properties[] = $msg['noautoblockblock'];
+		}
+
+		$properties = implode( ', ', $properties );
+
+		$line = wfMsgReplaceArgs( $msg['blocklistline'], array( $formattedTime, $blocker, $target, $properties ) );
+
+		$unblocklink = '';
+		if ( $wgUser->isAllowed('block') ) {
+			$titleObj = SpecialPage::getTitleFor( "Ipblocklist" );
+			$unblocklink = ' (' . $sk->makeKnownLinkObj($titleObj, $msg['unblocklink'], 'action=unblock&id=' . urlencode( $block->mId ) ) . ')';
+		}
+		
+		$comment = $sk->commentBlock( $block->mReason );
+		
+		$s = "{$line} $comment";	
+		if ( $block->mHideName )
+			$s = '<span class="history-deleted">' . $s . '</span>';
+				
+		wfProfileOut( __METHOD__ );
+		return "<li>$s $unblocklink</li>\n";
+	}
+}
+
+/**
+ * @todo document
+ * @addtogroup Pager
+ */
+class IPBlocklistPager extends ReverseChronologicalPager {
+	public $mForm, $mConds;
+
+	function __construct( $form, $conds = array() ) {
+		$this->mForm = $form;
+		$this->mConds = $conds;
+		parent::__construct();
+	}
+
+	function getStartBody() {
+		wfProfileIn( __METHOD__ );
+		# Do a link batch query
+		$this->mResult->seek( 0 );
+		$lb = new LinkBatch;
+
+		/*
+		while ( $row = $this->mResult->fetchObject() ) {
+			$lb->addObj( Title::makeTitleSafe( NS_USER, $row->user_name ) );
+			$lb->addObj( Title::makeTitleSafe( NS_USER_TALK, $row->user_name ) );
+			$lb->addObj( Title::makeTitleSafe( NS_USER, $row->ipb_address ) );
+			$lb->addObj( Title::makeTitleSafe( NS_USER_TALK, $row->ipb_address ) );
+		}*/
+		# Faster way
+		# Usernames and titles are in fact related by a simple substitution of space -> underscore
+		# The last few lines of Title::secureAndSplit() tell the story.
+		while ( $row = $this->mResult->fetchObject() ) {
+			$name = str_replace( ' ', '_', $row->user_name );
+			$lb->add( NS_USER, $name );
+			$lb->add( NS_USER_TALK, $name );
+			$name = str_replace( ' ', '_', $row->ipb_address );
+			$lb->add( NS_USER, $name );
+			$lb->add( NS_USER_TALK, $name );
+		}
+		$lb->execute();
+		wfProfileOut( __METHOD__ );
+		return '';
+	}
+	
+	function formatRow( $row ) {
+		$block = new Block;
+		$block->initFromRow( $row );
+		return $this->mForm->formatRow( $block );
+	}
+
+	function getQueryInfo() {
+		$conds = $this->mConds;
+		$conds[] = 'ipb_expiry>' . $this->mDb->addQuotes( $this->mDb->timestamp() );
+		$conds[] = 'ipb_by=user_id';
+		return array(
+			'tables' => array( 'ipblocks', 'user' ),
+			'fields' => $this->mDb->tableName( 'ipblocks' ) . '.*,user_name',
+			'conds' => $conds,
+		);
+	}
+
+	function getIndexField() {
+		return 'ipb_timestamp';
+	}
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/SpecialListredirects.php
===================================================================
--- /MediaWiki/branches/1.11/includes/SpecialListredirects.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/SpecialListredirects.php	(revision 1280)
@@ -0,0 +1,65 @@
+<?php
+/**
+ * @addtogroup SpecialPage
+ *
+ * @author Rob Church <robchur@gmail.com>
+ * @copyright © 2006 Rob Church
+ * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
+ */
+
+/**
+ * Special:Listredirects - Lists all the redirects on the wiki.
+ * @addtogroup SpecialPage
+ */
+class ListredirectsPage extends QueryPage {
+
+	function getName() { return( 'Listredirects' ); }
+	function isExpensive() { return( true ); }
+	function isSyndicated() { return( false ); }
+	function sortDescending() { return( false ); }
+
+	function getSQL() {
+		$dbr = wfGetDB( DB_SLAVE );
+		$page = $dbr->tableName( 'page' );
+		$sql = "SELECT 'Listredirects' AS type, page_title AS title, page_namespace AS namespace, 0 AS value FROM $page WHERE page_is_redirect = 1";
+		return( $sql );
+	}
+
+	function formatResult( $skin, $result ) {
+		global $wgContLang;
+	
+		# Make a link to the redirect itself
+		$rd_title = Title::makeTitle( $result->namespace, $result->title );
+		$arr = $wgContLang->getArrow() . $wgContLang->getDirMark();
+		$rd_link = $skin->makeKnownLinkObj( $rd_title, '', 'redirect=no' );
+
+		# Find out where the redirect leads
+		$revision = Revision::newFromTitle( $rd_title );
+		if( $revision ) {
+			# Make a link to the destination page
+			$target = Title::newFromRedirect( $revision->getText() );
+			if( $target ) {
+				$targetLink = $skin->makeLinkObj( $target );
+			} else {
+				/** @todo Put in some decent error display here */
+				$targetLink = '*';
+			}
+		} else {
+			/** @todo Put in some decent error display here */
+			$targetLink = '*';
+		}
+
+		# Format the whole thing and return it
+		return "$rd_link $arr $targetLink";
+
+	}
+
+}
+
+function wfSpecialListredirects() {
+	list( $limit, $offset ) = wfCheckLimits();
+	$lrp = new ListredirectsPage();
+	$lrp->doQuery( $offset, $limit );
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/SpecialListusers.php
===================================================================
--- /MediaWiki/branches/1.11/includes/SpecialListusers.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/SpecialListusers.php	(revision 1280)
@@ -0,0 +1,227 @@
+<?php
+
+# Copyright (C) 2004 Brion Vibber, lcrocker, Tim Starling,
+# Domas Mituzas, Ashar Voultoiz, Jens Frank, Zhengzhu.
+#
+# © 2006 Rob Church <robchur@gmail.com>
+#
+# http://www.mediawiki.org/
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+# http://www.gnu.org/copyleft/gpl.html
+/**
+ *
+ * @addtogroup SpecialPage
+ */
+
+/**
+ * This class is used to get a list of user. The ones with specials
+ * rights (sysop, bureaucrat, developer) will have them displayed
+ * next to their names.
+ *
+ * @addtogroup SpecialPage
+ */
+
+class UsersPager extends AlphabeticPager {
+
+	function __construct($group=null) {
+		global $wgRequest;
+		$this->requestedGroup = $group != "" ? $group : $wgRequest->getVal( 'group' );
+		$un = $wgRequest->getText( 'username' );
+		$this->requestedUser = '';
+		if ( $un != '' ) {
+			$username = Title::makeTitleSafe( NS_USER, $un );
+			if( ! is_null( $username ) ) {
+				$this->requestedUser = $username->getText();
+			}
+		}
+		parent::__construct();
+	}
+
+
+	function getIndexField() {
+		return 'user_name';
+	}
+
+	function getQueryInfo() {
+		$conds=array();
+		// don't show hidden names
+		$conds[]='ipb_deleted IS NULL OR ipb_deleted = 0';
+		if ($this->requestedGroup != "") {
+			$conds['ug_group'] = $this->requestedGroup;
+		}
+		if ($this->requestedUser != "") {
+			$conds[] = 'user_name >= ' . wfGetDB()->addQuotes( $this->requestedUser );
+		}
+
+		list ($user,$user_groups,$ipblocks) = wfGetDB()->tableNamesN('user','user_groups','ipblocks');
+
+		return array(
+			'tables' => " $user LEFT JOIN $user_groups ON user_id=ug_user LEFT JOIN $ipblocks ON user_id=ipb_user AND ipb_auto=0 ",
+			'fields' => array('user_name',
+				'MAX(user_id) AS user_id',
+				'COUNT(ug_group) AS numgroups', 
+				'MAX(ug_group) AS singlegroup'),
+			'options' => array('GROUP BY' => 'user_name'), 
+			'conds' => $conds
+		);
+
+	}
+
+	function formatRow( $row ) {
+		$userPage = Title::makeTitle( NS_USER, $row->user_name );
+		$name = $this->getSkin()->makeLinkObj( $userPage, htmlspecialchars( $userPage->getText() ) );
+
+		if( $row->numgroups > 1 || ( $this->requestedGroup && $row->numgroups == 1 ) ) {
+			$list = array();
+			foreach( self::getGroups( $row->user_id ) as $group )
+				$list[] = self::buildGroupLink( $group );
+			$groups = implode( ', ', $list );
+		} elseif( $row->numgroups == 1 ) {
+			$groups = self::buildGroupLink( $row->singlegroup );
+		} else {
+			$groups = '';
+		}
+
+		return '<li>' . wfSpecialList( $name, $groups ) . '</li>';
+	}
+
+	function getBody() {
+		if (!$this->mQueryDone) {
+			$this->doQuery();
+		}
+		$batch = new LinkBatch;
+		$db = $this->mDb;
+
+		$this->mResult->rewind();
+
+		while ( $row = $this->mResult->fetchObject() ) {
+			$batch->addObj( Title::makeTitleSafe( NS_USER, $row->user_name ) );
+		}
+		$batch->execute();
+		$this->mResult->rewind();
+		return parent::getBody();
+	}
+
+	function getPageHeader( ) {
+		global $wgRequest;
+		$self = $this->getTitle();
+
+		# Form tag
+		$out  = Xml::openElement( 'form', array( 'method' => 'get', 'action' => $self->getLocalUrl() ) ) .
+			'<fieldset>' .
+			Xml::element( 'legend', array(), wfMsg( 'listusers' ) );
+
+		# Username field
+		$out .= Xml::label( wfMsg( 'listusersfrom' ), 'offset' ) . ' ' .
+			Xml::input( 'username', 20, $this->requestedUser, array( 'id' => 'offset' ) ) . ' ';
+
+		if( $this->mLimit )
+			$out .= Xml::hidden( 'limit', $this->mLimit );
+
+		# Group drop-down list
+		$out .= Xml::label( wfMsg( 'group' ), 'group' ) . ' ' .
+			Xml::openElement('select',  array( 'name' => 'group', 'id' => 'group' ) ) .
+			Xml::option( wfMsg( 'group-all' ), '' );  # Item for "all groups"
+
+		$groups = User::getAllGroups();
+		foreach( $groups as $group ) {
+			$attribs = array( 'value' => $group );
+			$attribs['selected'] = ( $group == $this->requestedGroup ) ? 'selected' : '';
+			$out .= Xml::option( User::getGroupName( $group ), $attribs['value'], $attribs['selected'] );
+		}
+		$out .= Xml::closeElement( 'select' ) . ' ';
+
+		# Submit button and form bottom
+		$out .= Xml::submitButton( wfMsg( 'allpagessubmit' ) ) .
+			'</fieldset>' .
+			Xml::closeElement( 'form' );
+
+		return $out;
+	}
+
+	/**
+	 * Preserve group and username offset parameters when paging
+	 * @return array
+	 */
+	function getDefaultQuery() {
+		$query = parent::getDefaultQuery();
+		if( $this->requestedGroup != '' )
+			$query['group'] = $this->requestedGroup;
+		if( $this->requestedUser != '' )
+			$query['username'] = $this->requestedUser;
+		return $query;
+	}
+
+	/**
+	 * Get a list of groups the specified user belongs to
+	 *
+	 * @param int $uid
+	 * @return array
+	 */
+	private static function getGroups( $uid ) {
+		$dbr = wfGetDB( DB_SLAVE );
+		$groups = array();
+		$res = $dbr->select( 'user_groups', 'ug_group', array( 'ug_user' => $uid ), __METHOD__ );
+		if( $res && $dbr->numRows( $res ) > 0 ) {
+			while( $row = $dbr->fetchObject( $res ) )
+				$groups[] = $row->ug_group;
+			$dbr->freeResult( $res );
+		}
+		return $groups;
+	}
+
+	/**
+	 * Format a link to a group description page
+	 *
+	 * @param string $group
+	 * @return string
+	 */
+	private static function buildGroupLink( $group ) {
+		static $cache = array();
+		if( !isset( $cache[$group] ) )
+			$cache[$group] = User::makeGroupLinkHtml( $group, User::getGroupMember( $group ) );
+		return $cache[$group];
+	}
+}
+
+/**
+ * constructor
+ * $par string (optional) A group to list users from
+ */
+function wfSpecialListusers( $par = null ) {
+	global $wgRequest, $wgOut;
+
+	list( $limit, $offset ) = wfCheckLimits();
+
+	$groupTarget = isset($par) ? $par : $wgRequest->getVal( 'group' );
+
+	$up = new UsersPager($par);
+
+	# getBody() first to check, if empty
+	$usersbody = $up->getBody();
+	$s = $up->getPageHeader();
+	if( $usersbody ) {
+		$s .=	$up->getNavigationBar();
+		$s .=	'<ul>' . $usersbody . '</ul>';
+		$s .=	$up->getNavigationBar() ;
+	} else {
+		$s .=	'<p>' . wfMsgHTML('listusers-noresult') . '</p>';
+	};
+
+	$wgOut->addHTML( $s );
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/SpecialLockdb.php
===================================================================
--- /MediaWiki/branches/1.11/includes/SpecialLockdb.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/SpecialLockdb.php	(revision 1280)
@@ -0,0 +1,134 @@
+<?php
+/**
+ *
+ * @addtogroup SpecialPage
+ */
+
+/**
+ * Constructor
+ */
+function wfSpecialLockdb() {
+	global $wgUser, $wgOut, $wgRequest;
+
+	if( !$wgUser->isAllowed( 'siteadmin' ) ) {
+		$wgOut->permissionRequired( 'siteadmin' );
+		return;
+	}
+	
+	# If the lock file isn't writable, we can do sweet bugger all
+	global $wgReadOnlyFile;
+	if( !is_writable( dirname( $wgReadOnlyFile ) ) ) {
+		DBLockForm::notWritable();
+		return;
+	}
+
+	$action = $wgRequest->getVal( 'action' );
+	$f = new DBLockForm();
+
+	if ( 'success' == $action ) {
+		$f->showSuccess();
+	} else if ( 'submit' == $action && $wgRequest->wasPosted() &&
+		$wgUser->matchEditToken( $wgRequest->getVal( 'wpEditToken' ) ) ) {
+		$f->doSubmit();
+	} else {
+		$f->showForm( '' );
+	}
+}
+
+/**
+ * A form to make the database readonly (eg for maintenance purposes).
+ * @addtogroup SpecialPage
+ */
+class DBLockForm {
+	var $reason = '';
+
+	function DBLockForm() {
+		global $wgRequest;
+		$this->reason = $wgRequest->getText( 'wpLockReason' );
+	}
+
+	function showForm( $err ) {
+		global $wgOut, $wgUser;
+
+		$wgOut->setPagetitle( wfMsg( 'lockdb' ) );
+		$wgOut->addWikiText( wfMsg( 'lockdbtext' ) );
+
+		if ( "" != $err ) {
+			$wgOut->setSubtitle( wfMsg( 'formerror' ) );
+			$wgOut->addHTML( '<p class="error">' . htmlspecialchars( $err ) . "</p>\n" );
+		}
+		$lc = htmlspecialchars( wfMsg( 'lockconfirm' ) );
+		$lb = htmlspecialchars( wfMsg( 'lockbtn' ) );
+		$elr = htmlspecialchars( wfMsg( 'enterlockreason' ) );
+		$titleObj = SpecialPage::getTitleFor( 'Lockdb' );
+		$action = $titleObj->escapeLocalURL( 'action=submit' );
+		$reason = htmlspecialchars( $this->reason );
+		$token = htmlspecialchars( $wgUser->editToken() );
+
+		$wgOut->addHTML( <<<END
+<form id="lockdb" method="post" action="{$action}">
+{$elr}:
+<textarea name="wpLockReason" rows="10" cols="60" wrap="virtual">{$reason}</textarea>
+<table border="0">
+	<tr>
+		<td align="right">
+			<input type="checkbox" name="wpLockConfirm" />
+		</td>
+		<td align="left">{$lc}</td>
+	</tr>
+	<tr>
+		<td>&nbsp;</td>
+		<td align="left">
+			<input type="submit" name="wpLock" value="{$lb}" />
+		</td>
+	</tr>
+</table>
+<input type="hidden" name="wpEditToken" value="{$token}" />
+</form>
+END
+);
+
+	}
+
+	function doSubmit() {
+		global $wgOut, $wgUser, $wgLang, $wgRequest;
+		global $wgReadOnlyFile;
+
+		if ( ! $wgRequest->getCheck( 'wpLockConfirm' ) ) {
+			$this->showForm( wfMsg( 'locknoconfirm' ) );
+			return;
+		}
+		$fp = @fopen( $wgReadOnlyFile, 'w' );
+
+		if ( false === $fp ) {
+			# This used to show a file not found error, but the likeliest reason for fopen()
+			# to fail at this point is insufficient permission to write to the file...good old
+			# is_writable() is plain wrong in some cases, it seems...
+			$this->notWritable();
+			return;
+		}
+		fwrite( $fp, $this->reason );
+		fwrite( $fp, "\n<p>(by " . $wgUser->getName() . " at " .
+		  $wgLang->timeanddate( wfTimestampNow() ) . ")\n" );
+		fclose( $fp );
+
+		$titleObj = SpecialPage::getTitleFor( 'Lockdb' );
+		$wgOut->redirect( $titleObj->getFullURL( 'action=success' ) );
+	}
+
+	function showSuccess() {
+		global $wgOut;
+
+		$wgOut->setPagetitle( wfMsg( 'lockdb' ) );
+		$wgOut->setSubtitle( wfMsg( 'lockdbsuccesssub' ) );
+		$wgOut->addWikiText( wfMsg( 'lockdbsuccesstext' ) );
+	}
+	
+	public static function notWritable() {
+		global $wgOut;
+		$wgOut->errorPage( 'lockdb', 'lockfilenotwritable' );
+	}
+	
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/SpecialLog.php
===================================================================
--- /MediaWiki/branches/1.11/includes/SpecialLog.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/SpecialLog.php	(revision 1280)
@@ -0,0 +1,500 @@
+<?php
+# Copyright (C) 2004 Brion Vibber <brion@pobox.com>
+# http://www.mediawiki.org/
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+# http://www.gnu.org/copyleft/gpl.html
+
+/**
+ *
+ * @addtogroup SpecialPage
+ */
+
+/**
+ * constructor
+ */
+function wfSpecialLog( $par = '' ) {
+	global $wgRequest;
+	$logReader = new LogReader( $wgRequest );
+	if( $wgRequest->getVal( 'type' ) == '' && $par != '' ) {
+		$logReader->limitType( $par );
+	}
+	$logViewer = new LogViewer( $logReader );
+	$logViewer->show();
+}
+
+/**
+ *
+ * @addtogroup SpecialPage
+ */
+class LogReader {
+	var $db, $joinClauses, $whereClauses;
+	var $type = '', $user = '', $title = null, $pattern = false;
+
+	/**
+	 * @param WebRequest $request For internal use use a FauxRequest object to pass arbitrary parameters.
+	 */
+	function LogReader( $request ) {
+		$this->db = wfGetDB( DB_SLAVE );
+		$this->setupQuery( $request );
+	}
+
+	/**
+	 * Basic setup and applies the limiting factors from the WebRequest object.
+	 * @param WebRequest $request
+	 * @private
+	 */
+	function setupQuery( $request ) {
+		$page = $this->db->tableName( 'page' );
+		$user = $this->db->tableName( 'user' );
+		$this->joinClauses = array( 
+			"LEFT OUTER JOIN $page ON log_namespace=page_namespace AND log_title=page_title",
+			"INNER JOIN $user ON user_id=log_user" );
+		$this->whereClauses = array();
+
+		$this->limitType( $request->getVal( 'type' ) );
+		$this->limitUser( $request->getText( 'user' ) );
+		$this->limitTitle( $request->getText( 'page' ) , $request->getBool( 'pattern' ) );
+		$this->limitTime( $request->getVal( 'from' ), '>=' );
+		$this->limitTime( $request->getVal( 'until' ), '<=' );
+
+		list( $this->limit, $this->offset ) = $request->getLimitOffset();
+		
+		// XXX This all needs to use Pager, ugly hack for now.
+		global $wgMiserMode;
+		if ($wgMiserMode && ($this->offset >10000)) $this->offset=10000;
+	}
+
+	/**
+	 * Set the log reader to return only entries of the given type.
+	 * @param string $type A log type ('upload', 'delete', etc)
+	 * @private
+	 */
+	function limitType( $type ) {
+		if( empty( $type ) ) {
+			return false;
+		}
+		$this->type = $type;
+		$safetype = $this->db->strencode( $type );
+		$this->whereClauses[] = "log_type='$safetype'";
+	}
+
+	/**
+	 * Set the log reader to return only entries by the given user.
+	 * @param string $name (In)valid user name
+	 * @private
+	 */
+	function limitUser( $name ) {
+		if ( $name == '' )
+			return false;
+		$usertitle = Title::makeTitleSafe( NS_USER, $name );
+		if ( is_null( $usertitle ) )
+			return false;
+		$this->user = $usertitle->getText();
+		
+		/* Fetch userid at first, if known, provides awesome query plan afterwards */
+		$userid = $this->db->selectField('user','user_id',array('user_name'=>$this->user));
+		if (!$userid)
+			/* It should be nicer to abort query at all, 
+			   but for now it won't pass anywhere behind the optimizer */
+			$this->whereClauses[] = "NULL";
+		else
+			$this->whereClauses[] = "log_user=$userid";
+	}
+
+	/**
+	 * Set the log reader to return only entries affecting the given page.
+	 * (For the block and rights logs, this is a user page.)
+	 * @param string $page Title name as text
+	 * @private
+	 */
+	function limitTitle( $page , $pattern ) {
+		global $wgMiserMode;
+		$title = Title::newFromText( $page );
+		if( empty( $page ) || is_null( $title )  ) {
+			return false;
+		}
+		$this->title =& $title;
+		$this->pattern = $pattern;
+		$ns = $title->getNamespace();
+		if ( $pattern && !$wgMiserMode ) {
+			$safetitle = $this->db->escapeLike( $title->getDBkey() ); // use escapeLike to avoid expensive search patterns like 't%st%'
+			$this->whereClauses[] = "log_namespace=$ns AND log_title LIKE '$safetitle%'";
+		} else {
+			$safetitle = $this->db->strencode( $title->getDBkey() );
+			$this->whereClauses[] = "log_namespace=$ns AND log_title = '$safetitle'";
+		}
+	}
+
+	/**
+	 * Set the log reader to return only entries in a given time range.
+	 * @param string $time Timestamp of one endpoint
+	 * @param string $direction either ">=" or "<=" operators
+	 * @private
+	 */
+	function limitTime( $time, $direction ) {
+		# Direction should be a comparison operator
+		if( empty( $time ) ) {
+			return false;
+		}
+		$safetime = $this->db->strencode( wfTimestamp( TS_MW, $time ) );
+		$this->whereClauses[] = "log_timestamp $direction '$safetime'";
+	}
+
+	/**
+	 * Build an SQL query from all the set parameters.
+	 * @return string the SQL query
+	 * @private
+	 */
+	function getQuery() {
+		$logging = $this->db->tableName( "logging" );
+		$sql = "SELECT /*! STRAIGHT_JOIN */ log_type, log_action, log_timestamp,
+			log_user, user_name,
+			log_namespace, log_title, page_id,
+			log_comment, log_params FROM $logging ";
+		if( !empty( $this->joinClauses ) ) {
+			$sql .= implode( ' ', $this->joinClauses );
+		}
+		if( !empty( $this->whereClauses ) ) {
+			$sql .= " WHERE " . implode( ' AND ', $this->whereClauses );
+		}
+		$sql .= " ORDER BY log_timestamp DESC ";
+		$sql = $this->db->limitResult($sql, $this->limit, $this->offset );
+		return $sql;
+	}
+
+	/**
+	 * Execute the query and start returning results.
+	 * @return ResultWrapper result object to return the relevant rows
+	 */
+	function getRows() {
+		$res = $this->db->query( $this->getQuery(), 'LogReader::getRows' );
+		return $this->db->resultObject( $res );
+	}
+
+	/**
+	 * @return string The query type that this LogReader has been limited to.
+	 */
+	function queryType() {
+		return $this->type;
+	}
+
+	/**
+	 * @return string The username type that this LogReader has been limited to, if any.
+	 */
+	function queryUser() {
+		return $this->user;
+	}
+
+	/**
+	 * @return boolean The checkbox, if titles should be searched by a pattern too
+	 */
+	function queryPattern() {
+		return $this->pattern;
+	}
+
+	/**
+	 * @return string The text of the title that this LogReader has been limited to.
+	 */
+	function queryTitle() {
+		if( is_null( $this->title ) ) {
+			return '';
+		} else {
+			return $this->title->getPrefixedText();
+		}
+	}
+}
+
+/**
+ *
+ * @addtogroup SpecialPage
+ */
+class LogViewer {
+	/**
+	 * @var LogReader $reader
+	 */
+	var $reader;
+	var $numResults = 0;
+
+	/**
+	 * @param LogReader &$reader where to get our data from
+	 */
+	function LogViewer( &$reader ) {
+		global $wgUser;
+		$this->skin = $wgUser->getSkin();
+		$this->reader =& $reader;
+	}
+
+	/**
+	 * Take over the whole output page in $wgOut with the log display.
+	 */
+	function show() {
+		global $wgOut;
+		$this->showHeader( $wgOut );
+		$this->showOptions( $wgOut );
+		$result = $this->getLogRows();
+		if ( $this->numResults > 0 ) {
+			$this->showPrevNext( $wgOut );
+			$this->doShowList( $wgOut, $result );
+			$this->showPrevNext( $wgOut );
+		} else {
+			$this->showError( $wgOut );
+		}
+	}
+
+	/**
+	 * Load the data from the linked LogReader
+	 * Preload the link cache
+	 * Initialise numResults
+	 *
+	 * Must be called before calling showPrevNext
+	 *
+	 * @return object database result set
+	 */
+	function getLogRows() {
+		$result = $this->reader->getRows();
+		$this->numResults = 0;
+
+		// Fetch results and form a batch link existence query
+		$batch = new LinkBatch;
+		while ( $s = $result->fetchObject() ) {
+			// User link
+			$batch->addObj( Title::makeTitleSafe( NS_USER, $s->user_name ) );
+			$batch->addObj( Title::makeTitleSafe( NS_USER_TALK, $s->user_name ) );
+
+			// Move destination link
+			if ( $s->log_type == 'move' ) {
+				$paramArray = LogPage::extractParams( $s->log_params );
+				$title = Title::newFromText( $paramArray[0] );
+				$batch->addObj( $title );
+			}
+			++$this->numResults;
+		}
+		$batch->execute();
+
+		return $result;
+	}
+
+
+	/**
+	 * Output just the list of entries given by the linked LogReader,
+	 * with extraneous UI elements. Use for displaying log fragments in
+	 * another page (eg at Special:Undelete)
+	 * @param OutputPage $out where to send output
+	 */
+	function showList( &$out ) {
+		$result = $this->getLogRows();
+		if ( $this->numResults > 0 ) {
+			$this->doShowList( $out, $result );
+		} else {
+			$this->showError( $out );
+		}
+	}
+
+	function doShowList( &$out, $result ) {
+		// Rewind result pointer and go through it again, making the HTML
+		$html = "\n<ul>\n";
+		$result->seek( 0 );
+		while( $s = $result->fetchObject() ) {
+			$html .= $this->logLine( $s );
+		}
+		$html .= "\n</ul>\n";
+		$out->addHTML( $html );
+		$result->free();
+	}
+
+	function showError( &$out ) {
+		$out->addWikiText( wfMsg( 'logempty' ) );
+	}
+
+	/**
+	 * @param Object $s a single row from the result set
+	 * @return string Formatted HTML list item
+	 * @private
+	 */
+	function logLine( $s ) {
+		global $wgLang, $wgUser;;
+		$skin = $wgUser->getSkin();
+		$title = Title::makeTitle( $s->log_namespace, $s->log_title );
+		$time = $wgLang->timeanddate( wfTimestamp(TS_MW, $s->log_timestamp), true );
+
+		// Enter the existence or non-existence of this page into the link cache,
+		// for faster makeLinkObj() in LogPage::actionText()
+		$linkCache =& LinkCache::singleton();
+		if( $s->page_id ) {
+			$linkCache->addGoodLinkObj( $s->page_id, $title );
+		} else {
+			$linkCache->addBadLinkObj( $title );
+		}
+
+		$userLink = $this->skin->userLink( $s->log_user, $s->user_name ) . $this->skin->userToolLinksRedContribs( $s->log_user, $s->user_name );
+		$comment = $this->skin->commentBlock( $s->log_comment );
+		$paramArray = LogPage::extractParams( $s->log_params );
+		$revert = '';
+		// show revertmove link
+		if ( $s->log_type == 'move' && isset( $paramArray[0] ) ) {
+			$destTitle = Title::newFromText( $paramArray[0] );
+			if ( $destTitle ) {
+				$revert = '(' . $this->skin->makeKnownLinkObj( SpecialPage::getTitleFor( 'Movepage' ),
+					wfMsg( 'revertmove' ),
+					'wpOldTitle=' . urlencode( $destTitle->getPrefixedDBkey() ) .
+					'&wpNewTitle=' . urlencode( $title->getPrefixedDBkey() ) .
+					'&wpReason=' . urlencode( wfMsgForContent( 'revertmove' ) ) .
+					'&wpMovetalk=0' ) . ')';
+			}
+		// show undelete link
+		} elseif ( $s->log_action == 'delete' && $wgUser->isAllowed( 'delete' ) ) {
+			$revert = '(' . $this->skin->makeKnownLinkObj( SpecialPage::getTitleFor( 'Undelete' ),
+				wfMsg( 'undeletebtn' ) ,
+				'target='. urlencode( $title->getPrefixedDBkey() ) ) . ')';
+		
+		// show unblock link
+		} elseif ( $s->log_action == 'block' && $wgUser->isAllowed( 'block' ) ) {
+			$revert = '(' .  $skin->makeKnownLinkObj( SpecialPage::getTitleFor( 'Ipblocklist' ),
+				wfMsg( 'unblocklink' ),
+				'action=unblock&ip=' . urlencode( $s->log_title ) ) . ')';
+		// show change protection link
+		} elseif ( $s->log_action == 'protect' && $wgUser->isAllowed( 'protect' ) ) {
+			$revert = '(' .  $skin->makeKnownLink( $title->getPrefixedDBkey() ,
+				wfMsg( 'protect_change' ),
+				'action=unprotect' ) . ')';
+		// show user tool links for self created users
+		} elseif ( $s->log_action == 'create2' ) {
+			$revert = $this->skin->userToolLinksRedContribs( $s->log_user, $s->log_title );
+			// do not show $comment for self created accounts. It includes wrong user tool links:
+			// 'blockip' for users w/o block allowance and broken links for very long usernames (bug 4756)
+			$comment = '';
+		}
+
+		$action = LogPage::actionText( $s->log_type, $s->log_action, $title, $this->skin, $paramArray, true, true );
+		$out = "<li>$time $userLink $action $comment $revert</li>\n";
+		return $out;
+	}
+
+	/**
+	 * @param OutputPage &$out where to send output
+	 * @private
+	 */
+	function showHeader( &$out ) {
+		$type = $this->reader->queryType();
+		if( LogPage::isLogType( $type ) ) {
+			$out->setPageTitle( LogPage::logName( $type ) );
+			$out->addWikiText( LogPage::logHeader( $type ) );
+		}
+	}
+
+	/**
+	 * @param OutputPage &$out where to send output
+	 * @private
+	 */
+	function showOptions( &$out ) {
+		global $wgScript, $wgMiserMode;
+		$action = htmlspecialchars( $wgScript );
+		$title = SpecialPage::getTitleFor( 'Log' );
+		$special = htmlspecialchars( $title->getPrefixedDBkey() );
+		$out->addHTML( "<form action=\"$action\" method=\"get\">\n" .
+			'<fieldset>' .
+			Xml::element( 'legend', array(), wfMsg( 'log' ) ) .
+			Xml::hidden( 'title', $special ) . "\n" .
+			$this->getTypeMenu() . "\n" .
+			$this->getUserInput() . "\n" .
+			$this->getTitleInput() . "\n" .
+			(!$wgMiserMode?($this->getTitlePattern()."\n"):"") .
+			Xml::submitButton( wfMsg( 'allpagessubmit' ) ) . "\n" .
+			"</fieldset></form>" );
+	}
+
+	/**
+	 * @return string Formatted HTML
+	 * @private
+	 */
+	function getTypeMenu() {
+		$out = "<select name='type'>\n";
+
+		$validTypes = LogPage::validTypes();
+		$m = array(); // Temporary array
+
+		// First pass to load the log names
+		foreach( $validTypes as $type ) {
+			$text = LogPage::logName( $type );
+			$m[$text] = $type;
+		}
+
+		// Second pass to sort by name
+		ksort($m);
+
+		// Third pass generates sorted XHTML content
+		foreach( $m as $text => $type ) {
+			$selected = ($type == $this->reader->queryType());
+			$out .= Xml::option( $text, $type, $selected ) . "\n";
+		}
+
+		$out .= '</select>';
+		return $out;
+	}
+
+	/**
+	 * @return string Formatted HTML
+	 * @private
+	 */
+	function getUserInput() {
+		$user =  $this->reader->queryUser();
+		return Xml::inputLabel( wfMsg( 'specialloguserlabel' ), 'user', 'user', 12, $user );
+	}
+
+	/**
+	 * @return string Formatted HTML
+	 * @private
+	 */
+	function getTitleInput() {
+		$title = $this->reader->queryTitle();
+		return Xml::inputLabel( wfMsg( 'speciallogtitlelabel' ), 'page', 'page', 20, $title );
+	}
+
+	/**
+	 * @return boolean Checkbox
+	 * @private
+	 */
+	function getTitlePattern() {
+		$pattern = $this->reader->queryPattern();
+		return Xml::checkLabel( wfMsg( 'log-title-wildcard' ), 'pattern', 'pattern', $pattern );
+	}
+
+	/**
+	 * @param OutputPage &$out where to send output
+	 * @private
+	 */
+	function showPrevNext( &$out ) {
+		global $wgContLang,$wgRequest;
+		$pieces = array();
+		$pieces[] = 'type=' . urlencode( $this->reader->queryType() );
+		$pieces[] = 'user=' . urlencode( $this->reader->queryUser() );
+		$pieces[] = 'page=' . urlencode( $this->reader->queryTitle() );
+		$pieces[] = 'pattern=' . urlencode( $this->reader->queryPattern() );
+		$bits = implode( '&', $pieces );
+		list( $limit, $offset ) = $wgRequest->getLimitOffset();
+
+		# TODO: use timestamps instead of offsets to make it more natural
+		# to go huge distances in time
+		$html = wfViewPrevNext( $offset, $limit,
+			$wgContLang->specialpage( 'Log' ),
+			$bits,
+			$this->numResults < $limit);
+		$out->addHTML( '<p>' . $html . '</p>' );
+	}
+}
+
+
+?>
Index: /MediaWiki/branches/1.11/includes/SpecialLonelypages.php
===================================================================
--- /MediaWiki/branches/1.11/includes/SpecialLonelypages.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/SpecialLonelypages.php	(revision 1280)
@@ -0,0 +1,60 @@
+<?php
+/**
+ *
+ * @addtogroup SpecialPage
+ */
+
+/**
+ * A special page looking for articles with no article linking to them,
+ * thus being lonely.
+ * @addtogroup SpecialPage
+ */
+class LonelyPagesPage extends PageQueryPage {
+
+	function getName() {
+		return "Lonelypages";
+	}
+	function getPageHeader() {
+		return '<p>' . wfMsg('lonelypagestext') . '</p>';
+	}
+
+	function sortDescending() {
+		return false;
+	}
+
+	function isExpensive() {
+		return true;
+	}
+	function isSyndicated() { return false; }
+
+	function getSQL() {
+		$dbr = wfGetDB( DB_SLAVE );
+		list( $page, $pagelinks ) = $dbr->tableNamesN( 'page', 'pagelinks' );
+
+		return
+		  "SELECT 'Lonelypages'  AS type,
+		          page_namespace AS namespace,
+		          page_title     AS title,
+		          page_title     AS value
+		     FROM $page
+		LEFT JOIN $pagelinks
+		       ON page_namespace=pl_namespace AND page_title=pl_title
+		    WHERE pl_namespace IS NULL
+		      AND page_namespace=".NS_MAIN."
+		      AND page_is_redirect=0";
+
+	}
+}
+
+/**
+ * Constructor
+ */
+function wfSpecialLonelypages() {
+	list( $limit, $offset ) = wfCheckLimits();
+
+	$lpp = new LonelyPagesPage();
+
+	return $lpp->doQuery( $offset, $limit );
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/SpecialLongpages.php
===================================================================
--- /MediaWiki/branches/1.11/includes/SpecialLongpages.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/SpecialLongpages.php	(revision 1280)
@@ -0,0 +1,33 @@
+<?php
+/**
+ *
+ * @addtogroup SpecialPage
+ */
+
+/**
+ *
+ * @addtogroup SpecialPage
+ */
+class LongPagesPage extends ShortPagesPage {
+
+	function getName() {
+		return "Longpages";
+	}
+
+	function sortDescending() {
+		return true;
+	}
+}
+
+/**
+ * constructor
+ */
+function wfSpecialLongpages() {
+	list( $limit, $offset ) = wfCheckLimits();
+
+	$lpp = new LongPagesPage();
+
+	$lpp->doQuery( $offset, $limit );
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/SpecialMIMEsearch.php
===================================================================
--- /MediaWiki/branches/1.11/includes/SpecialMIMEsearch.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/SpecialMIMEsearch.php	(revision 1280)
@@ -0,0 +1,158 @@
+<?php
+/**
+ * A special page to search for files by MIME type as defined in the
+ * img_major_mime and img_minor_mime fields in the image table
+ *
+ * @addtogroup SpecialPage
+ *
+ * @author Ævar Arnfjörð Bjarmason <avarab@gmail.com>
+ * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
+ */
+
+/**
+ * Searches the database for files of the requested MIME type, comparing this with the
+ * 'img_major_mime' and 'img_minor_mime' fields in the image table.
+ * @addtogroup SpecialPage
+ */
+class MIMEsearchPage extends QueryPage {
+	var $major, $minor;
+
+	function MIMEsearchPage( $major, $minor ) {
+		$this->major = $major;
+		$this->minor = $minor;
+	}
+
+	function getName() { return 'MIMEsearch'; }
+
+	/**
+	 * Due to this page relying upon extra fields being passed in the SELECT it
+	 * will fail if it's set as expensive and misermode is on
+	 */
+	function isExpensive() { return true; }
+	function isSyndicated() { return false; }
+
+	function linkParameters() {
+		$arr = array( $this->major, $this->minor );
+		$mime = implode( '/', $arr );
+		return array( 'mime' => $mime );
+	}
+
+	function getSQL() {
+		$dbr = wfGetDB( DB_SLAVE );
+		$image = $dbr->tableName( 'image' );
+		$major = $dbr->addQuotes( $this->major );
+		$minor = $dbr->addQuotes( $this->minor );
+
+		return
+			"SELECT 'MIMEsearch' AS type,
+				" . NS_IMAGE . " AS namespace,
+				img_name AS title,
+				img_major_mime AS value,
+
+				img_size,
+				img_width,
+				img_height,
+				img_user_text,
+				img_timestamp
+			FROM $image
+			WHERE img_major_mime = $major AND img_minor_mime = $minor
+			";
+	}
+
+	function formatResult( $skin, $result ) {
+		global $wgContLang, $wgLang;
+
+		$nt = Title::makeTitle( $result->namespace, $result->title );
+		$text = $wgContLang->convert( $nt->getText() );
+		$plink = $skin->makeLink( $nt->getPrefixedText(), $text );
+
+		$download = $skin->makeMediaLink( $nt->getText(), 'fuck me!', wfMsgHtml( 'download' ) );
+		$bytes = wfMsgExt( 'nbytes', array( 'parsemag', 'escape'),
+			$wgLang->formatNum( $result->img_size ) );
+		$dimensions = wfMsgHtml( 'widthheight', $wgLang->formatNum( $result->img_width ),
+			$wgLang->formatNum( $result->img_height ) );
+		$user = $skin->makeLinkObj( Title::makeTitle( NS_USER, $result->img_user_text ), $result->img_user_text );
+		$time = $wgLang->timeanddate( $result->img_timestamp );
+
+		return "($download) $plink . . $dimensions . . $bytes . . $user . . $time";
+	}
+}
+
+/**
+ * Output the HTML search form, and constructs the MIMEsearchPage object.
+ */
+function wfSpecialMIMEsearch( $par = null ) {
+	global $wgRequest, $wgTitle, $wgOut;
+
+	$mime = isset( $par ) ? $par : $wgRequest->getText( 'mime' );
+
+	$wgOut->addHTML(
+		wfElement( 'form',
+			array(
+				'id' => 'specialmimesearch',
+				'method' => 'get',
+				'action' => $wgTitle->escapeLocalUrl()
+			),
+			null
+		) .
+			wfOpenElement( 'label' ) .
+				wfMsgHtml( 'mimetype' ) .
+				wfElement( 'input', array(
+						'type' => 'text',
+						'size' => 20,
+						'name' => 'mime',
+						'value' => $mime
+					),
+					''
+				) .
+				' ' .
+				wfElement( 'input', array(
+						'type' => 'submit',
+						'value' => wfMsg( 'ilsubmit' )
+					),
+					''
+				) .
+			wfCloseElement( 'label' ) .
+		wfCloseElement( 'form' )
+	);
+
+	list( $major, $minor ) = wfSpecialMIMEsearchParse( $mime );
+	if ( $major == '' or $minor == '' or !wfSpecialMIMEsearchValidType( $major ) )
+		return;
+	$wpp = new MIMEsearchPage( $major, $minor );
+
+	list( $limit, $offset ) = wfCheckLimits();
+	$wpp->doQuery( $offset, $limit );
+}
+
+function wfSpecialMIMEsearchParse( $str ) {
+	// searched for an invalid MIME type.
+	if( strpos( $str, '/' ) === false) {
+		return array ('', '');
+	}
+	
+	list( $major, $minor ) = explode( '/', $str, 2 );
+
+	return array(
+		ltrim( $major, ' ' ),
+		rtrim( $minor, ' ' )
+	);
+}
+
+function wfSpecialMIMEsearchValidType( $type ) {
+	// From maintenance/tables.sql => img_major_mime
+	$types = array(
+		'unknown',
+		'application',
+		'audio',
+		'image',
+		'text',
+		'video',
+		'message',
+		'model',
+		'multipart'
+	);
+
+	return in_array( $type, $types );
+}
+?>
Index: /MediaWiki/branches/1.11/includes/SpecialMostcategories.php
===================================================================
--- /MediaWiki/branches/1.11/includes/SpecialMostcategories.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/SpecialMostcategories.php	(revision 1280)
@@ -0,0 +1,58 @@
+<?php
+/**
+ * @addtogroup SpecialPage
+ *
+ * @author Ævar Arnfjörð Bjarmason <avarab@gmail.com>
+ * @copyright Copyright © 2005, Ævar Arnfjörð Bjarmason
+ * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
+ */
+
+/**
+ * implements Special:Mostcategories
+ * @addtogroup SpecialPage
+ */
+class MostcategoriesPage extends QueryPage {
+
+	function getName() { return 'Mostcategories'; }
+	function isExpensive() { return true; }
+	function isSyndicated() { return false; }
+
+	function getSQL() {
+		$dbr = wfGetDB( DB_SLAVE );
+		list( $categorylinks, $page) = $dbr->tableNamesN( 'categorylinks', 'page' );
+		return
+			"
+			SELECT
+			 	'Mostcategories' as type,
+				page_namespace as namespace,
+				page_title as title,
+				COUNT(*) as value
+			FROM $categorylinks
+			LEFT JOIN $page ON cl_from = page_id
+			WHERE page_namespace = " . NS_MAIN . "
+			GROUP BY 1,2,3
+			HAVING COUNT(*) > 1
+			";
+	}
+
+	function formatResult( $skin, $result ) {
+		global $wgLang;
+		$title = Title::makeTitleSafe( $result->namespace, $result->title );
+		$count = wfMsgExt( 'ncategories', array( 'parsemag', 'escape' ), $wgLang->formatNum( $result->value ) );
+		$link = $skin->makeKnownLinkObj( $title, $title->getText() );
+		return wfSpecialList( $link, $count );
+	}
+}
+
+/**
+ * constructor
+ */
+function wfSpecialMostcategories() {
+	list( $limit, $offset ) = wfCheckLimits();
+
+	$wpp = new MostcategoriesPage();
+
+	$wpp->doQuery( $offset, $limit );
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/SpecialMostimages.php
===================================================================
--- /MediaWiki/branches/1.11/includes/SpecialMostimages.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/SpecialMostimages.php	(revision 1280)
@@ -0,0 +1,55 @@
+<?php
+/**
+ * @addtogroup SpecialPage
+ *
+ * @author Ævar Arnfjörð Bjarmason <avarab@gmail.com>
+ * @copyright Copyright © 2005, Ævar Arnfjörð Bjarmason
+ * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
+ */
+
+/**
+ * implements Special:Mostimages
+ * @addtogroup SpecialPage
+ */
+class MostimagesPage extends ImageQueryPage {
+
+	function getName() { return 'Mostimages'; }
+	function isExpensive() { return true; }
+	function isSyndicated() { return false; }
+
+	function getSQL() {
+		$dbr = wfGetDB( DB_SLAVE );
+		$imagelinks = $dbr->tableName( 'imagelinks' );
+		return
+			"
+			SELECT
+				'Mostimages' as type,
+				" . NS_IMAGE . " as namespace,
+				il_to as title,
+				COUNT(*) as value
+			FROM $imagelinks
+			GROUP BY 1,2,3
+			HAVING COUNT(*) > 1
+			";
+	}
+
+	function getCellHtml( $row ) {
+		global $wgLang;
+		return wfMsgExt( 'nlinks',  array( 'parsemag', 'escape' ), 
+			$wgLang->formatNum( $row->value ) ) . '<br />';
+	}
+
+}
+
+/**
+ * Constructor
+ */
+function wfSpecialMostimages() {
+	list( $limit, $offset ) = wfCheckLimits();
+
+	$wpp = new MostimagesPage();
+
+	$wpp->doQuery( $offset, $limit );
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/SpecialMostlinked.php
===================================================================
--- /MediaWiki/branches/1.11/includes/SpecialMostlinked.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/SpecialMostlinked.php	(revision 1280)
@@ -0,0 +1,93 @@
+<?php
+
+/**
+ * A special page to show pages ordered by the number of pages linking to them.
+ * Implements Special:Mostlinked
+ *
+ * @addtogroup SpecialPage
+ *
+ * @author Ævar Arnfjörð Bjarmason <avarab@gmail.com>
+ * @author Rob Church <robchur@gmail.com>
+ * @copyright Copyright © 2005, Ævar Arnfjörð Bjarmason
+ * @copyright © 2006 Rob Church
+ * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
+ */
+class MostlinkedPage extends QueryPage {
+
+	function getName() { return 'Mostlinked'; }
+	function isExpensive() { return true; }
+	function isSyndicated() { return false; }
+
+	/**
+	 * Note: Getting page_namespace only works if $this->isCached() is false
+	 */
+	function getSQL() {
+		$dbr = wfGetDB( DB_SLAVE );
+		list( $pagelinks, $page ) = $dbr->tableNamesN( 'pagelinks', 'page' );
+		return
+			"SELECT 'Mostlinked' AS type,
+				pl_namespace AS namespace,
+				pl_title AS title,
+				COUNT(*) AS value,
+				page_namespace
+			FROM $pagelinks
+			LEFT JOIN $page ON pl_namespace=page_namespace AND pl_title=page_title
+			GROUP BY 1,2,3,5
+			HAVING COUNT(*) > 1";
+	}
+
+	/**
+	 * Pre-fill the link cache
+	 */
+	function preprocessResults( &$db, &$res ) {
+		if( $db->numRows( $res ) > 0 ) {
+			$linkBatch = new LinkBatch();
+			while( $row = $db->fetchObject( $res ) )
+				$linkBatch->addObj( Title::makeTitleSafe( $row->namespace, $row->title ) );
+			$db->dataSeek( $res, 0 );
+			$linkBatch->execute();
+		}
+	}
+
+	/**
+	 * Make a link to "what links here" for the specified title
+	 *
+	 * @param $title Title being queried
+	 * @param $skin Skin to use
+	 * @return string
+	 */
+	function makeWlhLink( &$title, $caption, &$skin ) {
+		$wlh = SpecialPage::getTitleFor( 'Whatlinkshere', $title->getPrefixedDBkey() );
+		return $skin->makeKnownLinkObj( $wlh, $caption );
+	}
+
+	/**
+	 * Make links to the page corresponding to the item, and the "what links here" page for it
+	 *
+	 * @param $skin Skin to be used
+	 * @param $result Result row
+	 * @return string
+	 */
+	function formatResult( $skin, $result ) {
+		global $wgLang;
+		$title = Title::makeTitleSafe( $result->namespace, $result->title );
+		$link = $skin->makeLinkObj( $title );
+		$wlh = $this->makeWlhLink( $title,
+			wfMsgExt( 'nlinks', array( 'parsemag', 'escape'),
+				$wgLang->formatNum( $result->value ) ), $skin );
+		return wfSpecialList( $link, $wlh );
+	}
+}
+
+/**
+ * constructor
+ */
+function wfSpecialMostlinked() {
+	list( $limit, $offset ) = wfCheckLimits();
+
+	$wpp = new MostlinkedPage();
+
+	$wpp->doQuery( $offset, $limit );
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/SpecialMostlinkedcategories.php
===================================================================
--- /MediaWiki/branches/1.11/includes/SpecialMostlinkedcategories.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/SpecialMostlinkedcategories.php	(revision 1280)
@@ -0,0 +1,75 @@
+<?php
+/**
+ * A querypage to show categories ordered in descending order by the pages  in them
+ *
+ * @addtogroup SpecialPage
+ *
+ * @author Ævar Arnfjörð Bjarmason <avarab@gmail.com>
+ * @copyright Copyright © 2005, Ævar Arnfjörð Bjarmason
+ * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
+ */
+class MostlinkedCategoriesPage extends QueryPage {
+
+	function getName() { return 'Mostlinkedcategories'; }
+	function isExpensive() { return true; }
+	function isSyndicated() { return false; }
+
+	function getSQL() {
+		$dbr = wfGetDB( DB_SLAVE );
+		$categorylinks = $dbr->tableName( 'categorylinks' );
+		$name = $dbr->addQuotes( $this->getName() );
+		return
+			"
+			SELECT
+				$name as type,
+				" . NS_CATEGORY . " as namespace,
+				cl_to as title,
+				COUNT(*) as value
+			FROM $categorylinks
+			GROUP BY 1,2,3
+			";
+	}
+
+	function sortDescending() { return true; }
+
+	/**
+	 * Fetch user page links and cache their existence
+	 */
+	function preprocessResults( &$db, &$res ) {
+		$batch = new LinkBatch;
+		while ( $row = $db->fetchObject( $res ) )
+			$batch->addObj( Title::makeTitleSafe( $row->namespace, $row->title ) );
+		$batch->execute();
+
+		// Back to start for display
+		if ( $db->numRows( $res ) > 0 )
+			// If there are no rows we get an error seeking.
+			$db->dataSeek( $res, 0 );
+	}
+
+	function formatResult( $skin, $result ) {
+		global $wgLang, $wgContLang;
+
+		$nt = Title::makeTitle( $result->namespace, $result->title );
+		$text = $wgContLang->convert( $nt->getText() );
+
+		$plink = $skin->makeLinkObj( $nt, htmlspecialchars( $text ) );
+
+		$nlinks = wfMsgExt( 'nmembers', array( 'parsemag', 'escape'),
+			$wgLang->formatNum( $result->value ) );
+		return wfSpecialList($plink, $nlinks);
+	}
+}
+
+/**
+ * constructor
+ */
+function wfSpecialMostlinkedCategories() {
+	list( $limit, $offset ) = wfCheckLimits();
+
+	$wpp = new MostlinkedCategoriesPage();
+
+	$wpp->doQuery( $offset, $limit );
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/SpecialMostrevisions.php
===================================================================
--- /MediaWiki/branches/1.11/includes/SpecialMostrevisions.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/SpecialMostrevisions.php	(revision 1280)
@@ -0,0 +1,66 @@
+<?php
+/**
+ * A special page to show pages in the
+ *
+ * @addtogroup SpecialPage
+ *
+ * @author Ævar Arnfjörð Bjarmason <avarab@gmail.com>
+ * @copyright Copyright © 2005, Ævar Arnfjörð Bjarmason
+ * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
+ */
+
+/**
+ * @addtogroup SpecialPage
+ */
+class MostrevisionsPage extends QueryPage {
+
+	function getName() { return 'Mostrevisions'; }
+	function isExpensive() { return true; }
+	function isSyndicated() { return false; }
+
+	function getSQL() {
+		$dbr = wfGetDB( DB_SLAVE );
+		list( $revision, $page ) = $dbr->tableNamesN( 'revision', 'page' );
+		return
+			"
+			SELECT
+				'Mostrevisions' as type,
+				page_namespace as namespace,
+				page_title as title,
+				COUNT(*) as value
+			FROM $revision
+			JOIN $page ON page_id = rev_page
+			WHERE page_namespace = " . NS_MAIN . "
+			GROUP BY 1,2,3
+			HAVING COUNT(*) > 1
+			";
+	}
+
+	function formatResult( $skin, $result ) {
+		global $wgLang, $wgContLang;
+
+		$nt = Title::makeTitle( $result->namespace, $result->title );
+		$text = $wgContLang->convert( $nt->getPrefixedText() );
+
+		$plink = $skin->makeKnownLinkObj( $nt, $text );
+
+		$nl = wfMsgExt( 'nrevisions', array( 'parsemag', 'escape'),
+			$wgLang->formatNum( $result->value ) );
+		$nlink = $skin->makeKnownLinkObj( $nt, $nl, 'action=history' );
+
+		return wfSpecialList($plink, $nlink);
+	}
+}
+
+/**
+ * constructor
+ */
+function wfSpecialMostrevisions() {
+	list( $limit, $offset ) = wfCheckLimits();
+
+	$wpp = new MostrevisionsPage();
+
+	$wpp->doQuery( $offset, $limit );
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/SpecialMovepage.php
===================================================================
--- /MediaWiki/branches/1.11/includes/SpecialMovepage.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/SpecialMovepage.php	(revision 1280)
@@ -0,0 +1,314 @@
+<?php
+/**
+ *
+ * @addtogroup SpecialPage
+ */
+
+/**
+ * Constructor
+ */
+function wfSpecialMovepage( $par = null ) {
+	global $wgUser, $wgOut, $wgRequest, $action;
+
+	# Check rights
+	if ( !$wgUser->isAllowed( 'move' ) ) {
+		$wgOut->showErrorPage( 'movenologin', 'movenologintext' );
+		return;
+	}
+
+	# Don't allow blocked users to move pages
+	if ( $wgUser->isBlocked() ) {
+		$wgOut->blockedPage();
+		return;
+	}
+
+	# Check for database lock
+	if ( wfReadOnly() ) {
+		$wgOut->readOnlyPage();
+		return;
+	}
+
+	$f = new MovePageForm( $par );
+
+	if ( 'success' == $action ) {
+		$f->showSuccess();
+	} else if ( 'submit' == $action && $wgRequest->wasPosted()
+		&& $wgUser->matchEditToken( $wgRequest->getVal( 'wpEditToken' ) ) ) {
+		$f->doSubmit();
+	} else {
+		$f->showForm( '' );
+	}
+}
+
+/**
+ * HTML form for Special:Movepage
+ * @addtogroup SpecialPage
+ */
+class MovePageForm {
+	var $oldTitle, $newTitle, $reason; # Text input
+	var $moveTalk, $deleteAndMove;
+	
+	private $watch = false;
+
+	function MovePageForm( $par ) {
+		global $wgRequest;
+		$target = isset($par) ? $par : $wgRequest->getVal( 'target' );
+		$this->oldTitle = $wgRequest->getText( 'wpOldTitle', $target );
+		$this->newTitle = $wgRequest->getText( 'wpNewTitle' );
+		$this->reason = $wgRequest->getText( 'wpReason' );
+		if ( $wgRequest->wasPosted() ) {
+			$this->moveTalk = $wgRequest->getBool( 'wpMovetalk', false );
+		} else {
+			$this->moveTalk = $wgRequest->getBool( 'wpMovetalk', true );
+		}
+		$this->deleteAndMove = $wgRequest->getBool( 'wpDeleteAndMove' ) && $wgRequest->getBool( 'wpConfirm' );
+		$this->watch = $wgRequest->getCheck( 'wpWatch' );
+	}
+
+	function showForm( $err ) {
+		global $wgOut, $wgUser, $wgContLang;
+		
+		$start = $wgContLang->isRTL() ? 'right' : 'left';
+		$end = $wgContLang->isRTL() ? 'left' : 'right';
+
+		$wgOut->setPagetitle( wfMsg( 'movepage' ) );
+
+		$ot = Title::newFromURL( $this->oldTitle );
+		if( is_null( $ot ) ) {
+			$wgOut->showErrorPage( 'notargettitle', 'notargettext' );
+			return;
+		}
+		$oldTitle = $ot->getPrefixedText();
+
+		$encOldTitle = htmlspecialchars( $oldTitle );
+		if( $this->newTitle == '' ) {
+			# Show the current title as a default
+			# when the form is first opened.
+			$encNewTitle = $encOldTitle;
+		} else {
+			if( $err == '' ) {
+				$nt = Title::newFromURL( $this->newTitle );
+				if( $nt ) {
+					# If a title was supplied, probably from the move log revert
+					# link, check for validity. We can then show some diagnostic
+					# information and save a click.
+					$newerr = $ot->isValidMoveOperation( $nt );
+					if( is_string( $newerr ) ) {
+						$err = $newerr;
+					}
+				}
+			}
+			$encNewTitle = htmlspecialchars( $this->newTitle );
+		}
+		$encReason = htmlspecialchars( $this->reason );
+
+		if ( $err == 'articleexists' && $wgUser->isAllowed( 'delete' ) ) {
+			$wgOut->addWikiText( wfMsg( 'delete_and_move_text', $encNewTitle ) );
+			$movepagebtn = wfMsgHtml( 'delete_and_move' );
+			$confirmText = wfMsgHtml( 'delete_and_move_confirm' );
+			$submitVar = 'wpDeleteAndMove';
+			$confirm = "
+				<tr>
+					<td align='$end'>
+						<input type='checkbox' name='wpConfirm' id='wpConfirm' value=\"true\" />
+					</td>
+					<td align='$start'><label for='wpConfirm'>{$confirmText}</label></td>
+				</tr>";
+			$err = '';
+		} else {
+			$wgOut->addWikiText( wfMsg( 'movepagetext' ) );
+			$movepagebtn = wfMsgHtml( 'movepagebtn' );
+			$submitVar = 'wpMove';
+			$confirm = false;
+		}
+
+		$oldTalk = $ot->getTalkPage();
+		$considerTalk = ( !$ot->isTalkPage() && $oldTalk->exists() );
+
+		if ( $considerTalk ) {
+			$wgOut->addWikiText( wfMsg( 'movepagetalktext' ) );
+		}
+
+		$movearticle = wfMsgHtml( 'movearticle' );
+		$newtitle = wfMsgHtml( 'newtitle' );
+		$movetalk = wfMsgHtml( 'movetalk' );
+		$movereason = wfMsgHtml( 'movereason' );
+
+		$titleObj = SpecialPage::getTitleFor( 'Movepage' );
+		$action = $titleObj->escapeLocalURL( 'action=submit' );
+		$token = htmlspecialchars( $wgUser->editToken() );
+
+		if ( $err != '' ) {
+			$wgOut->setSubtitle( wfMsg( 'formerror' ) );
+			$wgOut->addWikiText( '<p class="error">' . wfMsg($err) . "</p>\n" );
+		}
+
+		$moveTalkChecked = $this->moveTalk ? ' checked="checked"' : '';
+
+		$wgOut->addHTML( "
+<form id=\"movepage\" method=\"post\" action=\"{$action}\">
+	<table border='0'>
+		<tr>
+			<td align='$end'>{$movearticle}:</td>
+			<td align='$start'><strong>{$oldTitle}</strong></td>
+		</tr>
+		<tr>
+			<td align='$end'><label for='wpNewTitle'>{$newtitle}:</label></td>
+			<td align='$start'>
+				<input type='text' size='40' name='wpNewTitle' id='wpNewTitle' value=\"{$encNewTitle}\" />
+				<input type='hidden' name=\"wpOldTitle\" value=\"{$encOldTitle}\" />
+			</td>
+		</tr>
+		<tr>
+			<td align='$end' valign='top'><br /><label for='wpReason'>{$movereason}:</label></td>
+			<td align='$start' valign='top'><br />
+				<textarea cols='60' rows='2' name='wpReason' id='wpReason'>{$encReason}</textarea>
+			</td>
+		</tr>" );
+
+		if ( $considerTalk ) {
+			$wgOut->addHTML( "
+		<tr>
+			<td align='$end'>
+				<input type='checkbox' id=\"wpMovetalk\" name=\"wpMovetalk\"{$moveTalkChecked} value=\"1\" />
+			</td>
+			<td><label for=\"wpMovetalk\">{$movetalk}</label></td>
+		</tr>" );
+		}
+		
+		$watchChecked = $this->watch || $wgUser->getBoolOption( 'watchmoves' ) || $ot->userIsWatching();
+		$watch  = '<tr>';
+		$watch .= "<td align=\"$end\">" . Xml::check( 'wpWatch', $watchChecked, array( 'id' => 'watch' ) ) . '</td>';
+		$watch .= '<td>' . Xml::label( wfMsg( 'move-watch' ), 'watch' ) . '</td>';
+		$watch .= '</tr>';
+		$wgOut->addHtml( $watch );
+		
+		$wgOut->addHTML( "
+		{$confirm}
+		<tr>
+			<td>&nbsp;</td>
+			<td align='$start'>
+				<input type='submit' name=\"{$submitVar}\" value=\"{$movepagebtn}\" />
+			</td>
+		</tr>
+	</table>
+	<input type='hidden' name='wpEditToken' value=\"{$token}\" />
+</form>\n" );
+
+	$this->showLogFragment( $ot, $wgOut );
+
+	}
+
+	function doSubmit() {
+		global $wgOut, $wgUser, $wgRequest;
+
+		if ( $wgUser->pingLimiter( 'move' ) ) {
+			$wgOut->rateLimited();
+			return;
+		}
+
+		# Variables beginning with 'o' for old article 'n' for new article
+
+		$ot = Title::newFromText( $this->oldTitle );
+		$nt = Title::newFromText( $this->newTitle );
+
+		# Delete to make way if requested
+		if ( $wgUser->isAllowed( 'delete' ) && $this->deleteAndMove ) {
+			$article = new Article( $nt );
+			// This may output an error message and exit
+			$article->doDelete( wfMsgForContent( 'delete_and_move_reason' ) );
+		}
+
+		# don't allow moving to pages with # in
+		if ( !$nt || $nt->getFragment() != '' ) {
+			$this->showForm( 'badtitletext' );
+			return;
+		}
+
+		$error = $ot->moveTo( $nt, true, $this->reason );
+		if ( $error !== true ) {
+			$this->showForm( $error );
+			return;
+		}
+
+		wfRunHooks( 'SpecialMovepageAfterMove', array( &$this , &$ot , &$nt ) )	;
+
+		# Move the talk page if relevant, if it exists, and if we've been told to
+		$ott = $ot->getTalkPage();
+		if( $ott->exists() ) {
+			if( $this->moveTalk && !$ot->isTalkPage() && !$nt->isTalkPage() ) {
+				$ntt = $nt->getTalkPage();
+	
+				# Attempt the move
+				$error = $ott->moveTo( $ntt, true, $this->reason );
+				if ( $error === true ) {
+					$talkmoved = 1;
+					wfRunHooks( 'SpecialMovepageAfterMove', array( &$this , &$ott , &$ntt ) )	;
+				} else {
+					$talkmoved = $error;
+				}
+			} else {
+				# Stay silent on the subject of talk.
+				$talkmoved = '';
+			}
+		} else {
+			$talkmoved = 'notalkpage';
+		}
+		
+		# Deal with watches
+		if( $this->watch ) {
+			$wgUser->addWatch( $ot );
+			$wgUser->addWatch( $nt );
+		} else {
+			$wgUser->removeWatch( $ot );
+			$wgUser->removeWatch( $nt );
+		}
+
+		# Give back result to user.
+		$titleObj = SpecialPage::getTitleFor( 'Movepage' );
+		$success = $titleObj->getFullURL(
+		  'action=success&oldtitle=' . wfUrlencode( $ot->getPrefixedText() ) .
+		  '&newtitle=' . wfUrlencode( $nt->getPrefixedText() ) .
+		  '&talkmoved='.$talkmoved );
+
+		$wgOut->redirect( $success );
+	}
+
+	function showSuccess() {
+		global $wgOut, $wgRequest, $wgRawHtml;
+		
+		$wgOut->setPagetitle( wfMsg( 'movepage' ) );
+		$wgOut->setSubtitle( wfMsg( 'pagemovedsub' ) );
+
+		$oldText = wfEscapeWikiText( $wgRequest->getVal('oldtitle') );
+		$newText = wfEscapeWikiText( $wgRequest->getVal('newtitle') );
+		$talkmoved = $wgRequest->getVal('talkmoved');
+
+		$text = wfMsg( 'pagemovedtext', $oldText, $newText );
+		
+		$allowHTML = $wgRawHtml;
+		$wgRawHtml = false;
+		$wgOut->addWikiText( $text );
+		$wgRawHtml = $allowHTML;
+
+		if ( $talkmoved == 1 ) {
+			$wgOut->addWikiText( wfMsg( 'talkpagemoved' ) );
+		} elseif( 'articleexists' == $talkmoved ) {
+			$wgOut->addWikiText( wfMsg( 'talkexists' ) );
+		} else {
+			$oldTitle = Title::newFromText( $oldText );
+			if ( isset( $oldTitle ) && !$oldTitle->isTalkPage() && $talkmoved != 'notalkpage' ) {
+				$wgOut->addWikiText( wfMsg( 'talkpagenotmoved', wfMsg( $talkmoved ) ) );
+			}
+		}
+	}
+	
+	function showLogFragment( $title, &$out ) {
+		$out->addHtml( wfElement( 'h2', NULL, LogPage::logName( 'move' ) ) );
+		$request = new FauxRequest( array( 'page' => $title->getPrefixedText(), 'type' => 'move' ) );
+		$viewer = new LogViewer( new LogReader( $request ) );
+		$viewer->showList( $out );
+	}
+	
+}
+?>
Index: /MediaWiki/branches/1.11/includes/SpecialNewimages.php
===================================================================
--- /MediaWiki/branches/1.11/includes/SpecialNewimages.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/SpecialNewimages.php	(revision 1280)
@@ -0,0 +1,208 @@
+<?php
+/**
+ *
+ * @addtogroup SpecialPage
+ */
+
+/**
+ *
+ */
+function wfSpecialNewimages( $par, $specialPage ) {
+	global $wgUser, $wgOut, $wgLang, $wgRequest, $wgGroupPermissions, $wgMiserMode;
+
+	$wpIlMatch = $wgRequest->getText( 'wpIlMatch' );
+	$dbr = wfGetDB( DB_SLAVE );
+	$sk = $wgUser->getSkin();
+	$shownav = !$specialPage->including();
+	$hidebots = $wgRequest->getBool('hidebots',1);
+
+	$hidebotsql = '';
+	if ($hidebots) {
+
+		/** Make a list of group names which have the 'bot' flag
+		    set.
+		*/
+		$botconds=array();
+		foreach ($wgGroupPermissions as $groupname=>$perms) {
+			if(array_key_exists('bot',$perms) && $perms['bot']) {
+				$botconds[]="ug_group='$groupname'";
+			}
+		}
+
+		/* If not bot groups, do not set $hidebotsql */
+		if ($botconds) {
+			$isbotmember=$dbr->makeList($botconds, LIST_OR);
+
+			/** This join, in conjunction with WHERE ug_group
+			    IS NULL, returns only those rows from IMAGE
+		    	where the uploading user is not a member of
+		    	a group which has the 'bot' permission set.
+			*/
+			$ug = $dbr->tableName('user_groups');
+			$hidebotsql = " LEFT OUTER JOIN $ug ON img_user=ug_user AND ($isbotmember)";
+		}
+	}
+
+	$image = $dbr->tableName('image');
+
+	$sql="SELECT img_timestamp from $image";
+	if ($hidebotsql) {
+		$sql .= "$hidebotsql WHERE ug_group IS NULL";
+	}
+	$sql.=' ORDER BY img_timestamp DESC LIMIT 1';
+	$res = $dbr->query($sql, 'wfSpecialNewImages');
+	$row = $dbr->fetchRow($res);
+	if($row!==false) {
+		$ts=$row[0];
+	} else {
+		$ts=false;
+	}
+	$dbr->freeResult($res);
+	$sql='';
+
+	/** If we were clever, we'd use this to cache. */
+	$latestTimestamp = wfTimestamp( TS_MW, $ts);
+
+	/** Hardcode this for now. */
+	$limit = 48;
+
+	if ( $parval = intval( $par ) ) {
+		if ( $parval <= $limit && $parval > 0 ) {
+			$limit = $parval;
+		}
+	}
+
+	$where = array();
+	$searchpar = '';
+	if ( $wpIlMatch != '' && !$wgMiserMode) {
+		$nt = Title::newFromUrl( $wpIlMatch );
+		if($nt ) {
+			$m = $dbr->strencode( strtolower( $nt->getDBkey() ) );
+			$m = str_replace( '%', "\\%", $m );
+			$m = str_replace( '_', "\\_", $m );
+			$where[] = "LOWER(img_name) LIKE '%{$m}%'";
+			$searchpar = '&wpIlMatch=' . urlencode( $wpIlMatch );
+		}
+	}
+
+	$invertSort = false;
+	if( $until = $wgRequest->getVal( 'until' ) ) {
+		$where[] = "img_timestamp < '" . $dbr->timestamp( $until ) . "'";
+	}
+	if( $from = $wgRequest->getVal( 'from' ) ) {
+		$where[] = "img_timestamp >= '" . $dbr->timestamp( $from ) . "'";
+		$invertSort = true;
+	}
+	$sql='SELECT img_size, img_name, img_user, img_user_text,'.
+	     "img_description,img_timestamp FROM $image";
+
+	if($hidebotsql) {
+		$sql .= $hidebotsql;
+		$where[]='ug_group IS NULL';
+	}
+	if(count($where)) {
+		$sql.=' WHERE '.$dbr->makeList($where, LIST_AND);
+	}
+	$sql.=' ORDER BY img_timestamp '. ( $invertSort ? '' : ' DESC' );
+	$sql.=' LIMIT '.($limit+1);
+	$res = $dbr->query($sql, 'wfSpecialNewImages');
+
+	/**
+	 * We have to flip things around to get the last N after a certain date
+	 */
+	$images = array();
+	while ( $s = $dbr->fetchObject( $res ) ) {
+		if( $invertSort ) {
+			array_unshift( $images, $s );
+		} else {
+			array_push( $images, $s );
+		}
+	}
+	$dbr->freeResult( $res );
+
+	$gallery = new ImageGallery();
+	$firstTimestamp = null;
+	$lastTimestamp = null;
+	$shownImages = 0;
+	foreach( $images as $s ) {
+		if( ++$shownImages > $limit ) {
+			# One extra just to test for whether to show a page link;
+			# don't actually show it.
+			break;
+		}
+
+		$name = $s->img_name;
+		$ut = $s->img_user_text;
+
+		$nt = Title::newFromText( $name, NS_IMAGE );
+		$img = new Image( $nt );
+		$ul = $sk->makeLinkObj( Title::makeTitle( NS_USER, $ut ), $ut );
+
+		$gallery->add( $img, "$ul<br />\n<i>".$wgLang->timeanddate( $s->img_timestamp, true )."</i><br />\n" );
+
+		$timestamp = wfTimestamp( TS_MW, $s->img_timestamp );
+		if( empty( $firstTimestamp ) ) {
+			$firstTimestamp = $timestamp;
+		}
+		$lastTimestamp = $timestamp;
+	}
+
+	$bydate = wfMsg( 'bydate' );
+	$lt = $wgLang->formatNum( min( $shownImages, $limit ) );
+	if ($shownav) {
+		$text = wfMsgExt( 'imagelisttext', array('parse'), $lt, $bydate );
+		$wgOut->addHTML( $text . "\n" );
+	}
+
+	$sub = wfMsg( 'ilsubmit' );
+	$titleObj = SpecialPage::getTitleFor( 'Newimages' );
+	$action = $titleObj->escapeLocalURL( $hidebots ? '' : 'hidebots=0' );
+	if ($shownav && !$wgMiserMode) {
+		$wgOut->addHTML( "<form id=\"imagesearch\" method=\"post\" action=\"" .
+		  "{$action}\">" .
+			Xml::input( 'wpIlMatch', 20, $wpIlMatch ) . ' ' .
+		  Xml::submitButton( $sub, array( 'name' => 'wpIlSubmit' ) ) .
+		  "</form>" );
+	}
+
+	/**
+	 * Paging controls...
+	 */
+
+	# If we change bot visibility, this needs to be carried along.
+	if(!$hidebots) {
+		$botpar='&hidebots=0';
+	} else {
+		$botpar='';
+	}
+	$now = wfTimestampNow();
+	$date = $wgLang->timeanddate( $now, true );
+	$dateLink = $sk->makeKnownLinkObj( $titleObj, wfMsgHtml( 'sp-newimages-showfrom', $date ), 'from='.$now.$botpar.$searchpar );
+
+	$botLink = $sk->makeKnownLinkObj($titleObj, wfMsgHtml( 'showhidebots', ($hidebots ? wfMsgHtml('show') : wfMsgHtml('hide'))),'hidebots='.($hidebots ? '0' : '1').$searchpar);
+
+	$prevLink = wfMsgHtml( 'prevn', $wgLang->formatNum( $limit ) );
+	if( $firstTimestamp && $firstTimestamp != $latestTimestamp ) {
+		$prevLink = $sk->makeKnownLinkObj( $titleObj, $prevLink, 'from=' . $firstTimestamp . $botpar . $searchpar );
+	}
+
+	$nextLink = wfMsgHtml( 'nextn', $wgLang->formatNum( $limit ) );
+	if( $shownImages > $limit && $lastTimestamp ) {
+		$nextLink = $sk->makeKnownLinkObj( $titleObj, $nextLink, 'until=' . $lastTimestamp.$botpar.$searchpar );
+	}
+
+	$prevnext = '<p>' . $botLink . ' '. wfMsgHtml( 'viewprevnext', $prevLink, $nextLink, $dateLink ) .'</p>';
+
+	if ($shownav)
+		$wgOut->addHTML( $prevnext );
+
+	if( count( $images ) ) {
+		$wgOut->addHTML( $gallery->toHTML() );
+		if ($shownav)
+			$wgOut->addHTML( $prevnext );
+	} else {
+		$wgOut->addWikiText( wfMsg( 'noimages' ) );
+	}
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/SpecialNewpages.php
===================================================================
--- /MediaWiki/branches/1.11/includes/SpecialNewpages.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/SpecialNewpages.php	(revision 1280)
@@ -0,0 +1,204 @@
+<?php
+/**
+ *
+ * @addtogroup SpecialPage
+ */
+
+/**
+ * implements Special:Newpages
+ * @addtogroup SpecialPage
+ */
+class NewPagesPage extends QueryPage {
+
+	var $namespace;
+	var $username = '';
+
+	function NewPagesPage( $namespace = NS_MAIN, $username = '' ) {
+		$this->namespace = $namespace;
+		$this->username = $username;
+	}
+
+	function getName() {
+		return 'Newpages';
+	}
+
+	function isExpensive() {
+		# Indexed on RC, and will *not* work with querycache yet.
+		return false;
+	}
+
+	function makeUserWhere( &$dbo ) {
+		$title = Title::makeTitleSafe( NS_USER, $this->username );
+		if( $title ) {
+			return ' AND rc_user_text = ' . $dbo->addQuotes( $title->getText() );
+		} else {
+			return '';
+		}
+	}
+
+	function getSQL() {
+		global $wgUser, $wgUseRCPatrol;
+		$usepatrol = ( $wgUseRCPatrol && $wgUser->isAllowed( 'patrol' ) ) ? 1 : 0;
+		$dbr = wfGetDB( DB_SLAVE );
+		list( $recentchanges, $page ) = $dbr->tableNamesN( 'recentchanges', 'page' );
+
+		$uwhere = $this->makeUserWhere( $dbr );
+
+		# FIXME: text will break with compression
+		return
+			"SELECT 'Newpages' as type,
+				rc_namespace AS namespace,
+				rc_title AS title,
+				rc_cur_id AS cur_id,
+				rc_user AS \"user\",
+				rc_user_text AS user_text,
+				rc_comment as \"comment\",
+				rc_timestamp AS timestamp,
+				rc_timestamp AS value,
+				'{$usepatrol}' as usepatrol,
+				rc_patrolled AS patrolled,
+				rc_id AS rcid,
+				page_len as length,
+				page_latest as rev_id
+			FROM $recentchanges,$page
+			WHERE rc_cur_id=page_id AND rc_new=1
+			AND rc_namespace=" . $this->namespace . " AND page_is_redirect=0
+			{$uwhere}";
+	}
+	
+	function preprocessResults( &$dbo, &$res ) {
+		# Do a batch existence check on the user and talk pages
+		$linkBatch = new LinkBatch();
+		while( $row = $dbo->fetchObject( $res ) ) {
+			$linkBatch->addObj( Title::makeTitleSafe( NS_USER, $row->user_text ) );
+			$linkBatch->addObj( Title::makeTitleSafe( NS_USER_TALK, $row->user_text ) );
+		}
+		$linkBatch->execute();
+		# Seek to start
+		if( $dbo->numRows( $res ) > 0 )
+			$dbo->dataSeek( $res, 0 );
+	}
+
+	/**
+	 * Format a row, providing the timestamp, links to the page/history, size, user links, and a comment
+	 *
+	 * @param $skin Skin to use
+	 * @param $result Result row
+	 * @return string
+	 */
+	function formatResult( $skin, $result ) {
+		global $wgLang, $wgContLang;
+		$dm = $wgContLang->getDirMark();
+
+		$title = Title::makeTitleSafe( $result->namespace, $result->title );
+		$time = $wgLang->timeAndDate( $result->timestamp, true );
+		$plink = $skin->makeKnownLinkObj( $title, '', $this->patrollable( $result ) ? 'rcid=' . $result->rcid : '' );
+		$hist = $skin->makeKnownLinkObj( $title, wfMsgHtml( 'hist' ), 'action=history' );
+		$length = wfMsgExt( 'nbytes', array( 'parsemag', 'escape' ), $wgLang->formatNum( htmlspecialchars( $result->length ) ) );
+		$ulink = $skin->userLink( $result->user, $result->user_text ) . ' ' . $skin->userToolLinks( $result->user, $result->user_text );
+		$comment = $skin->commentBlock( $result->comment );
+
+		return "{$time} {$dm}{$plink} ({$hist}) {$dm}[{$length}] {$dm}{$ulink} {$comment}";
+	}
+
+	/**
+	 * Should a specific result row provide "patrollable" links?
+	 *
+	 * @param $result Result row
+	 * @return bool
+	 */
+	function patrollable( $result ) {
+		global $wgUser, $wgUseRCPatrol;
+		return $wgUseRCPatrol && $wgUser->isAllowed( 'patrol' ) && !$result->patrolled;
+	}
+
+	function feedItemDesc( $row ) {
+		if( isset( $row->rev_id ) ) {
+			$revision = Revision::newFromId( $row->rev_id );
+			if( $revision ) {
+				return '<p>' . htmlspecialchars( wfMsg( 'summary' ) ) . ': ' .
+					htmlspecialchars( $revision->getComment() ) . "</p>\n<hr />\n<div>" .
+					nl2br( htmlspecialchars( $revision->getText() ) ) . "</div>";
+			}
+		}
+		return parent::feedItemDesc( $row );
+	}
+	
+	/**
+	 * Show a form for filtering namespace and username
+	 *
+	 * @return string
+	 */	
+	function getPageHeader() {
+		$self = SpecialPage::getTitleFor( $this->getName() );
+		$form = Xml::openElement( 'form', array( 'method' => 'post', 'action' => $self->getLocalUrl() ) );
+		# Namespace selector
+		$form .= '<table><tr><td align="right">' . Xml::label( wfMsg( 'namespace' ), 'namespace' ) . '</td>';
+		$form .= '<td>' . Xml::namespaceSelector( $this->namespace ) . '</td></tr>';
+		# Username filter
+		$form .= '<tr><td align="right">' . Xml::label( wfMsg( 'newpages-username' ), 'mw-np-username' ) . '</td>';
+		$form .= '<td>' . Xml::input( 'username', 30, $this->username, array( 'id' => 'mw-np-username' ) ) . '</td></tr>';
+		
+		$form .= '<tr><td></td><td>' . Xml::submitButton( wfMsg( 'allpagessubmit' ) ) . '</td></tr></table>';
+		$form .= Xml::hidden( 'offset', $this->offset ) . Xml::hidden( 'limit', $this->limit ) . '</form>';
+		return $form;
+	}
+	
+	/**
+	 * Link parameters
+	 *
+	 * @return array
+	 */
+	function linkParameters() {
+		return( array( 'namespace' => $this->namespace, 'username' => $this->username ) );
+	}
+	
+}
+
+/**
+ * constructor
+ */
+function wfSpecialNewpages($par, $specialPage) {
+	global $wgRequest, $wgContLang;
+
+	list( $limit, $offset ) = wfCheckLimits();
+	$namespace = NS_MAIN;
+	$username = '';
+
+	if ( $par ) {
+		$bits = preg_split( '/\s*,\s*/', trim( $par ) );
+		foreach ( $bits as $bit ) {
+			if ( 'shownav' == $bit )
+				$shownavigation = true;
+			if ( is_numeric( $bit ) )
+				$limit = $bit;
+
+			$m = array();
+			if ( preg_match( '/^limit=(\d+)$/', $bit, $m ) )
+				$limit = intval($m[1]);
+			if ( preg_match( '/^offset=(\d+)$/', $bit, $m ) )
+				$offset = intval($m[1]);
+			if ( preg_match( '/^namespace=(.*)$/', $bit, $m ) ) {
+				$ns = $wgContLang->getNsIndex( $m[1] );
+				if( $ns !== false ) {
+					$namespace = $ns;
+				}
+			}
+		}
+	} else {
+		if( $ns = $wgRequest->getInt( 'namespace', 0 ) )
+			$namespace = $ns;
+		if( $un = $wgRequest->getText( 'username' ) )
+			$username = $un;
+	}
+	
+	if ( ! isset( $shownavigation ) )
+		$shownavigation = ! $specialPage->including();
+
+	$npp = new NewPagesPage( $namespace, $username );
+
+	if ( ! $npp->doFeed( $wgRequest->getVal( 'feed' ), $limit ) )
+		$npp->doQuery( $offset, $limit, $shownavigation );
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/SpecialPage.php
===================================================================
--- /MediaWiki/branches/1.11/includes/SpecialPage.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/SpecialPage.php	(revision 1280)
@@ -0,0 +1,801 @@
+<?php
+/**
+ * SpecialPage: handling special pages and lists thereof.
+ *
+ * To add a special page in an extension, add to $wgSpecialPages either 
+ * an object instance or an array containing the name and constructor 
+ * parameters. The latter is preferred for performance reasons. 
+ *
+ * The object instantiated must be either an instance of SpecialPage or a 
+ * sub-class thereof. It must have an execute() method, which sends the HTML 
+ * for the special page to $wgOut. The parent class has an execute() method 
+ * which distributes the call to the historical global functions. Additionally, 
+ * execute() also checks if the user has the necessary access privileges 
+ * and bails out if not.
+ *
+ * To add a core special page, use the similar static list in 
+ * SpecialPage::$mList. To remove a core static special page at runtime, use
+ * a SpecialPage_initList hook.
+ *
+ * @addtogroup SpecialPage
+ */
+
+/**
+ * @access private
+ */
+
+/**
+ * Parent special page class, also static functions for handling the special
+ * page list.
+ * @addtogroup SpecialPage
+ */
+class SpecialPage
+{
+	/**#@+
+	 * @access private
+	 */
+	/**
+	 * The canonical name of this special page
+	 * Also used for the default <h1> heading, @see getDescription()
+	 */
+	var $mName;
+	/**
+	 * The local name of this special page
+	 */
+	var $mLocalName;
+	/**
+	 * Minimum user level required to access this page, or "" for anyone.
+	 * Also used to categorise the pages in Special:Specialpages
+	 */
+	var $mRestriction;
+	/**
+	 * Listed in Special:Specialpages?
+	 */
+	var $mListed;
+	/**
+	 * Function name called by the default execute()
+	 */
+	var $mFunction;
+	/**
+	 * File which needs to be included before the function above can be called
+	 */
+	var $mFile;
+	/**
+	 * Whether or not this special page is being included from an article
+	 */
+	var $mIncluding;
+	/**
+	 * Whether the special page can be included in an article
+	 */
+	var $mIncludable;
+	/**
+	 * Query parameters that can be passed through redirects
+	 */
+	var $mAllowedRedirectParams = array();
+
+	static public $mList = array(
+		'DoubleRedirects'           => array( 'SpecialPage', 'DoubleRedirects' ),
+		'BrokenRedirects'           => array( 'SpecialPage', 'BrokenRedirects' ),
+		'Disambiguations'           => array( 'SpecialPage', 'Disambiguations' ),
+
+		'Userlogin'                 => array( 'SpecialPage', 'Userlogin' ),
+		'Userlogout'                => array( 'UnlistedSpecialPage', 'Userlogout' ),
+		'Preferences'               => array( 'SpecialPage', 'Preferences' ),
+		'Watchlist'                 => array( 'SpecialPage', 'Watchlist' ),
+
+		'Recentchanges'             => array( 'IncludableSpecialPage', 'Recentchanges' ),
+		'Upload'                    => array( 'SpecialPage', 'Upload' ),
+		'Imagelist'                 => array( 'SpecialPage', 'Imagelist' ),
+		'Newimages'                 => array( 'IncludableSpecialPage', 'Newimages' ),
+		'Listusers'                 => array( 'SpecialPage', 'Listusers' ),
+		'Statistics'                => array( 'SpecialPage', 'Statistics' ),
+		'Randompage'                => array( 'SpecialPage', 'Randompage' ),
+		'Lonelypages'               => array( 'SpecialPage', 'Lonelypages' ),
+		'Uncategorizedpages'        => array( 'SpecialPage', 'Uncategorizedpages' ),
+		'Uncategorizedcategories'   => array( 'SpecialPage', 'Uncategorizedcategories' ),
+		'Uncategorizedimages'       => array( 'SpecialPage', 'Uncategorizedimages' ),
+		'Unusedcategories'          => array( 'SpecialPage', 'Unusedcategories' ),
+		'Unusedimages'              => array( 'SpecialPage', 'Unusedimages' ),
+		'Wantedpages'               => array( 'IncludableSpecialPage', 'Wantedpages' ),
+		'Wantedcategories'          => array( 'SpecialPage', 'Wantedcategories' ),
+		'Mostlinked'                => array( 'SpecialPage', 'Mostlinked' ),
+		'Mostlinkedcategories'      => array( 'SpecialPage', 'Mostlinkedcategories' ),
+		'Mostcategories'            => array( 'SpecialPage', 'Mostcategories' ),
+		'Mostimages'                => array( 'SpecialPage', 'Mostimages' ),
+		'Mostrevisions'             => array( 'SpecialPage', 'Mostrevisions' ),
+		'Fewestrevisions'             => array( 'SpecialPage', 'Fewestrevisions' ),
+		'Shortpages'                => array( 'SpecialPage', 'Shortpages' ),
+		'Longpages'                 => array( 'SpecialPage', 'Longpages' ),
+		'Newpages'                  => array( 'IncludableSpecialPage', 'Newpages' ),
+		'Ancientpages'              => array( 'SpecialPage', 'Ancientpages' ),
+		'Deadendpages'              => array( 'SpecialPage', 'Deadendpages' ),
+		'Protectedpages'            => array( 'SpecialPage', 'Protectedpages' ),
+		'Allpages'                  => array( 'IncludableSpecialPage', 'Allpages' ),
+		'Prefixindex'               => array( 'IncludableSpecialPage', 'Prefixindex' ) ,
+		'Ipblocklist'               => array( 'SpecialPage', 'Ipblocklist' ),
+		'Specialpages'              => array( 'UnlistedSpecialPage', 'Specialpages' ),
+		'Contributions'             => array( 'SpecialPage', 'Contributions' ),
+		'Emailuser'                 => array( 'UnlistedSpecialPage', 'Emailuser' ),
+		'Whatlinkshere'             => array( 'UnlistedSpecialPage', 'Whatlinkshere' ),
+		'Recentchangeslinked'       => array( 'UnlistedSpecialPage', 'Recentchangeslinked' ),
+		'Movepage'                  => array( 'UnlistedSpecialPage', 'Movepage' ),
+		'Blockme'                   => array( 'UnlistedSpecialPage', 'Blockme' ),
+		'Resetpass'                 => array( 'UnlistedSpecialPage', 'Resetpass' ),
+		'Booksources'               => 'SpecialBookSources',
+		'Categories'                => array( 'SpecialPage', 'Categories' ),
+		'Export'                    => array( 'SpecialPage', 'Export' ),
+		'Version'                   => array( 'SpecialPage', 'Version' ),
+		'Allmessages'               => array( 'SpecialPage', 'Allmessages' ),
+		'Log'                       => array( 'SpecialPage', 'Log' ),
+		'Blockip'                   => array( 'SpecialPage', 'Blockip', 'block' ),
+		'Undelete'                  => array( 'SpecialPage', 'Undelete', 'deletedhistory' ),
+		'Import'                    => array( 'SpecialPage', "Import", 'import' ),
+		'Lockdb'                    => array( 'SpecialPage', 'Lockdb', 'siteadmin' ),
+		'Unlockdb'                  => array( 'SpecialPage', 'Unlockdb', 'siteadmin' ),
+		'Userrights'                => array( 'SpecialPage', 'Userrights', 'userrights' ),
+		'MIMEsearch'                => array( 'SpecialPage', 'MIMEsearch' ),
+		'Unwatchedpages'            => array( 'SpecialPage', 'Unwatchedpages', 'unwatchedpages' ),
+		'Listredirects'             => array( 'SpecialPage', 'Listredirects' ),
+		'Revisiondelete'            => array( 'SpecialPage', 'Revisiondelete', 'deleterevision' ),
+		'Unusedtemplates'           => array( 'SpecialPage', 'Unusedtemplates' ),
+		'Randomredirect'            => array( 'SpecialPage', 'Randomredirect' ),
+		'Withoutinterwiki'			=> array( 'SpecialPage', 'Withoutinterwiki' ),
+
+		'Mypage'                    => array( 'SpecialMypage' ),
+		'Mytalk'                    => array( 'SpecialMytalk' ),
+		'Mycontributions'           => array( 'SpecialMycontributions' ),
+		'Listadmins'                => array( 'SpecialRedirectToSpecial', 'Listadmins', 'Listusers', 'sysop' ),
+	);
+
+	static public $mAliases;
+	static public $mListInitialised = false;
+
+	/**#@-*/
+
+	/**
+	 * Initialise the special page list
+	 * This must be called before accessing SpecialPage::$mList
+	 */
+	static function initList() {
+		global $wgSpecialPages;
+		global $wgDisableCounters, $wgDisableInternalSearch, $wgEmailAuthentication;
+
+		if ( self::$mListInitialised ) {
+			return;
+		}
+		wfProfileIn( __METHOD__ );
+		
+		# Better to set this now, to avoid infinite recursion in carelessly written hooks
+		self::$mListInitialised = true;
+
+		if( !$wgDisableCounters ) {
+			self::$mList['Popularpages'] = array( 'SpecialPage', 'Popularpages' );
+		}
+
+		if( !$wgDisableInternalSearch ) {
+			self::$mList['Search'] = array( 'SpecialPage', 'Search' );
+		}
+
+		if( $wgEmailAuthentication ) {
+			self::$mList['Confirmemail'] = array( 'UnlistedSpecialPage', 'Confirmemail' );
+		}
+
+		# Add extension special pages
+		self::$mList = array_merge( self::$mList, $wgSpecialPages );
+
+		# Run hooks
+		# This hook can be used to remove undesired built-in special pages
+		wfRunHooks( 'SpecialPage_initList', array( &self::$mList ) );
+		wfProfileOut( __METHOD__ );
+	}
+
+	static function initAliasList() {
+		if ( !is_null( self::$mAliases ) ) {
+			return;
+		}
+
+		global $wgContLang;
+		$aliases = $wgContLang->getSpecialPageAliases();
+		$missingPages = self::$mList;
+		self::$mAliases = array();
+		foreach ( $aliases as $realName => $aliasList ) {
+			foreach ( $aliasList as $alias ) {
+				self::$mAliases[$wgContLang->caseFold( $alias )] = $realName;
+			}
+			unset( $missingPages[$realName] );
+		}
+		foreach ( $missingPages as $name => $stuff ) {
+			self::$mAliases[$wgContLang->caseFold( $name )] = $name;
+		}
+	}
+
+	/**
+	 * Given a special page alias, return the special page name.
+	 * Returns false if there is no such alias.
+	 */
+	static function resolveAlias( $alias ) {
+		global $wgContLang;
+
+		if ( !self::$mListInitialised ) self::initList();
+		if ( is_null( self::$mAliases ) ) self::initAliasList();
+		$caseFoldedAlias = $wgContLang->caseFold( $alias );
+		if ( isset( self::$mAliases[$caseFoldedAlias] ) ) {
+			return self::$mAliases[$caseFoldedAlias];
+		} else {
+			return false;
+		}
+	}
+
+	/**
+	 * Given a special page name with a possible subpage, return an array 
+	 * where the first element is the special page name and the second is the
+	 * subpage.
+	 */
+	static function resolveAliasWithSubpage( $alias ) {
+		$bits = explode( '/', $alias, 2 );
+		$name = self::resolveAlias( $bits[0] );
+		if( !isset( $bits[1] ) ) { // bug 2087
+			$par = NULL;
+		} else {
+			$par = $bits[1];
+		}
+		return array( $name, $par );
+	}
+
+	/**
+	 * Add a page to the list of valid special pages. This used to be the preferred 
+	 * method for adding special pages in extensions. It's now suggested that you add 
+	 * an associative record to $wgSpecialPages. This avoids autoloading SpecialPage.
+	 *
+	 * @param mixed $page Must either be an array specifying a class name and 
+	 *                    constructor parameters, or an object. The object,
+	 *                    when constructed, must have an execute() method which
+	 *                    sends HTML to $wgOut.
+	 * @static
+	 */
+	static function addPage( &$page ) {
+		if ( !self::$mListInitialised ) {
+			self::initList();
+		}
+		self::$mList[$page->mName] = $page;
+	}
+
+	/**
+	 * Remove a special page from the list
+	 * Formerly used to disable expensive or dangerous special pages. The 
+	 * preferred method is now to add a SpecialPage_initList hook.
+	 * 
+	 * @static
+	 */
+	static function removePage( $name ) {
+		if ( !self::$mListInitialised ) {
+			self::initList();
+		}
+		unset( self::$mList[$name] );
+	}
+
+	/**
+	 * Find the object with a given name and return it (or NULL)
+	 * @static
+	 * @param string $name
+	 */
+	static function getPage( $name ) {
+		if ( !self::$mListInitialised ) {
+			self::initList();
+		}
+		if ( array_key_exists( $name, self::$mList ) ) {
+			$rec = self::$mList[$name];
+			if ( is_string( $rec ) ) {
+				$className = $rec;
+				self::$mList[$name] = new $className;
+			} elseif ( is_array( $rec ) ) {
+				$className = array_shift( $rec );
+				self::$mList[$name] = wfCreateObject( $className, $rec );
+			}
+			return self::$mList[$name];
+		} else {
+			return NULL;
+		}
+	}
+
+	/**
+	 * Get a special page with a given localised name, or NULL if there
+	 * is no such special page.
+	 */
+	static function getPageByAlias( $alias ) {
+		$realName = self::resolveAlias( $alias );
+		if ( $realName ) {
+			return self::getPage( $realName );
+		} else {
+			return NULL;
+		}
+	}
+
+	/**
+	 * Return categorised listable special pages for all users
+	 * @static
+	 */
+	static function getRegularPages() {
+		if ( !self::$mListInitialised ) {
+			self::initList();
+		}
+		$pages = array();
+
+		foreach ( self::$mList as $name => $rec ) {
+			$page = self::getPage( $name );
+			if ( $page->isListed() && $page->getRestriction() == '' ) {
+				$pages[$name] = $page;
+			}
+		}
+		return $pages;
+	}
+
+	/**
+	 * Return categorised listable special pages which are available
+	 * for the current user, but not for everyone
+	 * @static
+	 */
+	static function getRestrictedPages() {
+		global $wgUser;
+		if ( !self::$mListInitialised ) {
+			self::initList();
+		}
+		$pages = array();
+
+		foreach ( self::$mList as $name => $rec ) {
+			$page = self::getPage( $name );
+			if ( $page->isListed() ) {
+				$restriction = $page->getRestriction();
+				if ( $restriction != '' && $wgUser->isAllowed( $restriction ) ) {
+					$pages[$name] = $page;
+				}
+			}
+		}
+		return $pages;
+	}
+
+	/**
+	 * Execute a special page path.
+	 * The path	may contain parameters, e.g. Special:Name/Params
+	 * Extracts the special page name and call the execute method, passing the parameters
+	 *
+	 * Returns a title object if the page is redirected, false if there was no such special
+	 * page, and true if it was successful.
+	 *
+	 * @param $title          a title object
+	 * @param $including      output is being captured for use in {{special:whatever}}
+	 */
+	static function executePath( &$title, $including = false ) {
+		global $wgOut, $wgTitle, $wgRequest;
+		wfProfileIn( __METHOD__ );
+
+		# FIXME: redirects broken due to this call
+		$bits = explode( '/', $title->getDBkey(), 2 );
+		$name = $bits[0];
+		if( !isset( $bits[1] ) ) { // bug 2087
+			$par = NULL;
+		} else {
+			$par = $bits[1];
+		}
+		$page = SpecialPage::getPageByAlias( $name );
+
+		# Nonexistent?
+		if ( !$page ) {
+			if ( !$including ) {
+				$wgOut->setArticleRelated( false );
+				$wgOut->setRobotpolicy( 'noindex,nofollow' );
+				$wgOut->setStatusCode( 404 );
+				$wgOut->showErrorPage( 'nosuchspecialpage', 'nospecialpagetext' );
+			}
+			wfProfileOut( __METHOD__ );
+			return false;
+		}
+
+		# Check for redirect
+		if ( !$including ) {
+			$redirect = $page->getRedirect( $par );
+			if ( $redirect ) {
+				$query = $page->getRedirectQuery();
+				$url = $redirect->getFullUrl( $query );
+				$wgOut->redirect( $url );
+				wfProfileOut( __METHOD__ );
+				return $redirect;
+			}
+		}
+
+		# Redirect to canonical alias for GET commands
+		# Not for POST, we'd lose the post data, so it's best to just distribute 
+		# the request. Such POST requests are possible for old extensions that 
+		# generate self-links without being aware that their default name has 
+		# changed.
+		if ( !$including && $name != $page->getLocalName() && !$wgRequest->wasPosted() ) {
+			$query = $_GET;
+			unset( $query['title'] );
+			$query = wfArrayToCGI( $query );
+			$title = $page->getTitle( $par );
+			$url = $title->getFullUrl( $query );
+			$wgOut->redirect( $url );
+			wfProfileOut( __METHOD__ );
+			return $redirect;
+		}
+
+		if ( $including && !$page->includable() ) {
+			wfProfileOut( __METHOD__ );
+			return false;
+		} elseif ( !$including ) {
+			$wgTitle = $page->getTitle();
+		}
+		$page->including( $including );
+
+		// Execute special page
+		$profName = 'Special:' . $page->getName();
+		wfProfileIn( $profName );
+		$page->execute( $par );
+		wfProfileOut( $profName );
+		wfProfileOut( __METHOD__ );
+		return true;
+	}
+
+	/**
+	 * Just like executePath() except it returns the HTML instead of outputting it
+	 * Returns false if there was no such special page, or a title object if it was
+	 * a redirect.
+	 * @static
+	 */
+	static function capturePath( &$title ) {
+		global $wgOut, $wgTitle;
+
+		$oldTitle = $wgTitle;
+		$oldOut = $wgOut;
+		$wgOut = new OutputPage;
+
+		$ret = SpecialPage::executePath( $title, true );
+		if ( $ret === true ) {
+			$ret = $wgOut->getHTML();
+		}
+		$wgTitle = $oldTitle;
+		$wgOut = $oldOut;
+		return $ret;
+	}
+
+	/**
+	 * Get the local name for a specified canonical name
+	 */
+	static function getLocalNameFor( $name, $subpage = false ) {
+		global $wgContLang;
+		$aliases = $wgContLang->getSpecialPageAliases();
+		if ( isset( $aliases[$name][0] ) ) {
+			$name = $aliases[$name][0];
+		}
+		if ( $subpage !== false && !is_null( $subpage ) ) {
+			$name = "$name/$subpage";
+		}
+		return $name;
+	}
+
+	/**
+	 * Get a localised Title object for a specified special page name
+	 */
+	static function getTitleFor( $name, $subpage = false ) {
+		$name = self::getLocalNameFor( $name, $subpage );
+		if ( $name ) {
+			return Title::makeTitle( NS_SPECIAL, $name );
+		} else {
+			throw new MWException( "Invalid special page name \"$name\"" );
+		}
+	}
+
+	/**
+	 * Get a localised Title object for a page name with a possibly unvalidated subpage
+	 */
+	static function getSafeTitleFor( $name, $subpage = false ) {
+		$name = self::getLocalNameFor( $name, $subpage );
+		if ( $name ) {
+			return Title::makeTitleSafe( NS_SPECIAL, $name );
+		} else {
+			return null;
+		}
+	}
+
+	/**
+	 * Get a title for a given alias
+	 * @return Title or null if there is no such alias
+	 */
+	static function getTitleForAlias( $alias ) {
+		$name = self::resolveAlias( $alias );
+		if ( $name ) {
+			return self::getTitleFor( $name );
+		} else {
+			return null;
+		}
+	}
+
+	/**
+	 * Default constructor for special pages
+	 * Derivative classes should call this from their constructor
+	 *     Note that if the user does not have the required level, an error message will
+	 *     be displayed by the default execute() method, without the global function ever
+	 *     being called.
+	 *
+	 *     If you override execute(), you can recover the default behaviour with userCanExecute()
+	 *     and displayRestrictionError()
+	 *
+	 * @param string $name Name of the special page, as seen in links and URLs
+	 * @param string $restriction User right required, e.g. "block" or "delete"
+	 * @param boolean $listed Whether the page is listed in Special:Specialpages
+	 * @param string $function Function called by execute(). By default it is constructed from $name
+	 * @param string $file File which is included by execute(). It is also constructed from $name by default
+	 */
+	function SpecialPage( $name = '', $restriction = '', $listed = true, $function = false, $file = 'default', $includable = false ) {
+		$this->mName = $name;
+		$this->mRestriction = $restriction;
+		$this->mListed = $listed;
+		$this->mIncludable = $includable;
+		if ( $function == false ) {
+			$this->mFunction = 'wfSpecial'.$name;
+		} else {
+			$this->mFunction = $function;
+		}
+		if ( $file === 'default' ) {
+			$this->mFile = dirname(__FILE__) . "/Special{$name}.php";
+		} else {
+			$this->mFile = $file;
+		}
+	}
+
+	/**#@+
+	  * Accessor
+	  *
+	  * @deprecated
+	  */
+	function getName() { return $this->mName; }
+	function getRestriction() { return $this->mRestriction; }
+	function getFile() { return $this->mFile; }
+	function isListed() { return $this->mListed; }
+	/**#@-*/
+
+	/**#@+
+	  * Accessor and mutator
+	  */
+	function name( $x = NULL ) { return wfSetVar( $this->mName, $x ); }
+	function restrictions( $x = NULL) { return wfSetVar( $this->mRestrictions, $x ); }
+	function listed( $x = NULL) { return wfSetVar( $this->mListed, $x ); }
+	function func( $x = NULL) { return wfSetVar( $this->mFunction, $x ); }
+	function file( $x = NULL) { return wfSetVar( $this->mFile, $x ); }
+	function includable( $x = NULL ) { return wfSetVar( $this->mIncludable, $x ); }
+	function including( $x = NULL ) { return wfSetVar( $this->mIncluding, $x ); }
+	/**#@-*/
+
+	/**
+	 * Get the localised name of the special page
+	 */
+	function getLocalName() {
+		if ( !isset( $this->mLocalName ) ) {
+			$this->mLocalName = self::getLocalNameFor( $this->mName );
+		}
+		return $this->mLocalName;
+	}
+
+	/**
+	 * Checks if the given user (identified by an object) can execute this
+	 * special page (as defined by $mRestriction)
+	 */
+	function userCanExecute( &$user ) {
+		return $user->isAllowed( $this->mRestriction );
+	}
+
+	/**
+	 * Output an error message telling the user what access level they have to have
+	 */
+	function displayRestrictionError() {
+		global $wgOut;
+		$wgOut->permissionRequired( $this->mRestriction );
+	}
+
+	/**
+	 * Sets headers - this should be called from the execute() method of all derived classes!
+	 */
+	function setHeaders() {
+		global $wgOut;
+		$wgOut->setArticleRelated( false );
+		$wgOut->setRobotPolicy( "noindex,nofollow" );
+		$wgOut->setPageTitle( $this->getDescription() );
+	}
+
+	/**
+	 * Default execute method
+	 * Checks user permissions, calls the function given in mFunction
+	 *
+	 * This may be overridden by subclasses. 
+	 */
+	function execute( $par ) {
+		global $wgUser;
+
+		$this->setHeaders();
+
+		if ( $this->userCanExecute( $wgUser ) ) {
+			$func = $this->mFunction;
+			// only load file if the function does not exist
+			if(!function_exists($func) and $this->mFile) {
+				require_once( $this->mFile );
+			}
+			# FIXME: these hooks are broken for extensions and anything else that subclasses SpecialPage. 
+			if ( wfRunHooks( 'SpecialPageExecuteBeforeHeader', array( &$this, &$par, &$func ) ) )
+				$this->outputHeader();
+			if ( ! wfRunHooks( 'SpecialPageExecuteBeforePage', array( &$this, &$par, &$func ) ) )
+				return;
+			$func( $par, $this );
+			if ( ! wfRunHooks( 'SpecialPageExecuteAfterPage', array( &$this, &$par, &$func ) ) )
+				return;
+		} else {
+			$this->displayRestrictionError();
+		}
+	}
+
+	function outputHeader() {
+		global $wgOut, $wgContLang;
+
+		$msg = $wgContLang->lc( $this->name() ) . '-summary';
+		$out = wfMsg( $msg );
+		if ( ! wfEmptyMsg( $msg, $out ) and  $out !== '' and ! $this->including() )
+			$wgOut->addWikiText( $out );
+
+	}
+
+	# Returns the name that goes in the <h1> in the special page itself, and also the name that
+	# will be listed in Special:Specialpages
+	#
+	# Derived classes can override this, but usually it is easier to keep the default behaviour.
+	# Messages can be added at run-time, see MessageCache.php
+	function getDescription() {
+		return wfMsg( strtolower( $this->mName ) );
+	}
+
+	/**
+	 * Get a self-referential title object
+	 */
+	function getTitle( $subpage = false) {
+		return self::getTitleFor( $this->mName, $subpage );
+	}
+
+	/**
+	 * Set whether this page is listed in Special:Specialpages, at run-time
+	 */
+	function setListed( $listed ) {
+		return wfSetVar( $this->mListed, $listed );
+	}
+
+	/**
+	 * If the special page is a redirect, then get the Title object it redirects to. 
+	 * False otherwise.
+	 */
+	function getRedirect( $subpage ) {
+		return false;
+	}
+
+	/**
+	 * Return part of the request string for a special redirect page
+	 * This allows passing, e.g. action=history to Special:Mypage, etc.
+	 *
+	 * @return string
+	 */
+	function getRedirectQuery() {
+		global $wgRequest;
+		$params = array();
+		foreach( $this->mAllowedRedirectParams as $arg ) {
+			if( $val = $wgRequest->getVal( $arg, false ) )
+				$params[] = $arg . '=' . $val;
+		}
+		
+		return count( $params ) ? implode( '&', $params ) : false;
+	}
+}
+
+/**
+ * Shortcut to construct a special page which is unlisted by default
+ * @addtogroup SpecialPage
+ */
+class UnlistedSpecialPage extends SpecialPage
+{
+	function UnlistedSpecialPage( $name, $restriction = '', $function = false, $file = 'default' ) {
+		SpecialPage::SpecialPage( $name, $restriction, false, $function, $file );
+	}
+}
+
+/**
+ * Shortcut to construct an includable special  page
+ * @addtogroup SpecialPage
+ */
+class IncludableSpecialPage extends SpecialPage
+{
+	function IncludableSpecialPage( $name, $restriction = '', $listed = true, $function = false, $file = 'default' ) {
+		SpecialPage::SpecialPage( $name, $restriction, $listed, $function, $file, true );
+	}
+}
+
+/**
+ * Shortcut to construct a special page alias.
+ * @addtogroup SpecialPage
+ */
+class SpecialRedirectToSpecial extends UnlistedSpecialPage {
+	var $redirName, $redirSubpage;
+
+	function __construct( $name, $redirName, $redirSubpage = false, $redirectParams = array() ) {
+		parent::__construct( $name );
+		$this->redirName = $redirName;
+		$this->redirSubpage = $redirSubpage;
+		$this->mAllowedRedirectParams = $redirectParams;
+	}
+
+	function getRedirect( $subpage ) {
+		if ( $this->redirSubpage === false ) {
+			return SpecialPage::getTitleFor( $this->redirName, $subpage );
+		} else {
+			return SpecialPage::getTitleFor( $this->redirName, $this->redirSubpage );
+		}
+	}
+}
+
+/** SpecialMypage, SpecialMytalk and SpecialMycontributions special pages
+ * are used to get user independant links pointing to the user page, talk
+ * page and list of contributions.
+ * This can let us cache a single copy of any generated content for all
+ * users.
+ */
+
+/**
+ * Shortcut to construct a special page pointing to current user user's page.
+ * @addtogroup SpecialPage
+ */
+class SpecialMypage extends UnlistedSpecialPage {
+	function __construct() {
+		parent::__construct( 'Mypage' );
+		$this->mAllowedRedirectParams = array( 'action' );
+	}
+
+	function getRedirect( $subpage ) {
+		global $wgUser;
+		if ( strval( $subpage ) !== '' ) {
+			return Title::makeTitle( NS_USER, $wgUser->getName() . '/' . $subpage );
+		} else {
+			return Title::makeTitle( NS_USER, $wgUser->getName() );
+		}
+	}
+}
+
+/**
+ * Shortcut to construct a special page pointing to current user talk page.
+ * @addtogroup SpecialPage
+ */
+class SpecialMytalk extends UnlistedSpecialPage {
+	function __construct() {
+		parent::__construct( 'Mytalk' );
+		$this->mAllowedRedirectParams = array( 'action' );
+	}
+
+	function getRedirect( $subpage ) {
+		global $wgUser;
+		if ( strval( $subpage ) !== '' ) {
+			return Title::makeTitle( NS_USER_TALK, $wgUser->getName() . '/' . $subpage );
+		} else {
+			return Title::makeTitle( NS_USER_TALK, $wgUser->getName() );
+		}
+	}
+}
+
+/**
+ * Shortcut to construct a special page pointing to current user contributions.
+ * @addtogroup SpecialPage
+ */
+class SpecialMycontributions extends UnlistedSpecialPage {
+	function __construct() {
+		parent::__construct(  'Mycontributions' );
+	}
+
+	function getRedirect( $subpage ) {
+		global $wgUser;
+		return SpecialPage::getTitleFor( 'Contributions', $wgUser->getName() );
+	}
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/SpecialPopularpages.php
===================================================================
--- /MediaWiki/branches/1.11/includes/SpecialPopularpages.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/SpecialPopularpages.php	(revision 1280)
@@ -0,0 +1,69 @@
+<?php
+/**
+ *
+ * @addtogroup SpecialPage
+ */
+
+/**
+ * implements Special:Popularpages
+ * @addtogroup SpecialPage
+ */
+class PopularPagesPage extends QueryPage {
+
+	function getName() {
+		return "Popularpages";
+	}
+
+	function isExpensive() {
+		# page_counter is not indexed
+		return true;
+	}
+	function isSyndicated() { return false; }
+
+	function getSQL() {
+		$dbr = wfGetDB( DB_SLAVE );
+		$page = $dbr->tableName( 'page' );
+
+		$query = 
+			"SELECT 'Popularpages' as type,
+			        page_namespace as namespace,
+			        page_title as title,
+			        page_counter as value
+			FROM $page ";
+		$where =
+			"WHERE page_is_redirect=0 AND page_namespace";
+
+		global $wgContentNamespaces;
+		if( empty( $wgContentNamespaces ) ) {
+			$where .= '='.NS_MAIN;
+		} else if( count( $wgContentNamespaces ) > 1 ) {
+			$where .= ' in (' . implode( ', ', $wgContentNamespaces ) . ')';
+		} else {
+			$where .= '='.$wgContentNamespaces[0];
+		}
+
+		return $query . $where;
+	}
+
+	function formatResult( $skin, $result ) {
+		global $wgLang, $wgContLang;
+		$title = Title::makeTitle( $result->namespace, $result->title );
+		$link = $skin->makeKnownLinkObj( $title, htmlspecialchars( $wgContLang->convert( $title->getPrefixedText() ) ) );
+		$nv = wfMsgExt( 'nviews', array( 'parsemag', 'escape'),
+			$wgLang->formatNum( $result->value ) );
+		return wfSpecialList($link, $nv);
+	}
+}
+
+/**
+ * Constructor
+ */
+function wfSpecialPopularpages() {
+	list( $limit, $offset ) = wfCheckLimits();
+
+	$ppp = new PopularPagesPage();
+
+	return $ppp->doQuery( $offset, $limit );
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/SpecialPreferences.php
===================================================================
--- /MediaWiki/branches/1.11/includes/SpecialPreferences.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/SpecialPreferences.php	(revision 1280)
@@ -0,0 +1,983 @@
+<?php
+/**
+ * Hold things related to displaying and saving user preferences.
+ * @addtogroup SpecialPage
+ */
+
+/**
+ * Entry point that create the "Preferences" object
+ */
+function wfSpecialPreferences() {
+	global $wgRequest;
+
+	$form = new PreferencesForm( $wgRequest );
+	$form->execute();
+}
+
+/**
+ * Preferences form handling
+ * This object will show the preferences form and can save it as well.
+ * @addtogroup SpecialPage
+ */
+class PreferencesForm {
+	var $mQuickbar, $mOldpass, $mNewpass, $mRetypePass, $mStubs;
+	var $mRows, $mCols, $mSkin, $mMath, $mDate, $mUserEmail, $mEmailFlag, $mNick;
+	var $mUserLanguage, $mUserVariant;
+	var $mSearch, $mRecent, $mRecentDays, $mHourDiff, $mSearchLines, $mSearchChars, $mAction;
+	var $mReset, $mPosted, $mToggles, $mSearchNs, $mRealName, $mImageSize;
+	var $mUnderline, $mWatchlistEdits;
+
+	/**
+	 * Constructor
+	 * Load some values
+	 */
+	function PreferencesForm( &$request ) {
+		global $wgContLang, $wgUser, $wgAllowRealName;
+
+		$this->mQuickbar = $request->getVal( 'wpQuickbar' );
+		$this->mOldpass = $request->getVal( 'wpOldpass' );
+		$this->mNewpass = $request->getVal( 'wpNewpass' );
+		$this->mRetypePass =$request->getVal( 'wpRetypePass' );
+		$this->mStubs = $request->getVal( 'wpStubs' );
+		$this->mRows = $request->getVal( 'wpRows' );
+		$this->mCols = $request->getVal( 'wpCols' );
+		$this->mSkin = $request->getVal( 'wpSkin' );
+		$this->mMath = $request->getVal( 'wpMath' );
+		$this->mDate = $request->getVal( 'wpDate' );
+		$this->mUserEmail = $request->getVal( 'wpUserEmail' );
+		$this->mRealName = $wgAllowRealName ? $request->getVal( 'wpRealName' ) : '';
+		$this->mEmailFlag = $request->getCheck( 'wpEmailFlag' ) ? 0 : 1;
+		$this->mNick = $request->getVal( 'wpNick' );
+		$this->mUserLanguage = $request->getVal( 'wpUserLanguage' );
+		$this->mUserVariant = $request->getVal( 'wpUserVariant' );
+		$this->mSearch = $request->getVal( 'wpSearch' );
+		$this->mRecent = $request->getVal( 'wpRecent' );
+		$this->mRecentDays = $request->getVal( 'wpRecentDays' );
+		$this->mHourDiff = $request->getVal( 'wpHourDiff' );
+		$this->mSearchLines = $request->getVal( 'wpSearchLines' );
+		$this->mSearchChars = $request->getVal( 'wpSearchChars' );
+		$this->mImageSize = $request->getVal( 'wpImageSize' );
+		$this->mThumbSize = $request->getInt( 'wpThumbSize' );
+		$this->mUnderline = $request->getInt( 'wpOpunderline' );
+		$this->mAction = $request->getVal( 'action' );
+		$this->mReset = $request->getCheck( 'wpReset' );
+		$this->mPosted = $request->wasPosted();
+		$this->mSuccess = $request->getCheck( 'success' );
+		$this->mWatchlistDays = $request->getVal( 'wpWatchlistDays' );
+		$this->mWatchlistEdits = $request->getVal( 'wpWatchlistEdits' );
+
+		$this->mSaveprefs = $request->getCheck( 'wpSaveprefs' ) &&
+			$this->mPosted &&
+			$wgUser->matchEditToken( $request->getVal( 'wpEditToken' ) );
+
+		# User toggles  (the big ugly unsorted list of checkboxes)
+		$this->mToggles = array();
+		if ( $this->mPosted ) {
+			$togs = User::getToggles();
+			foreach ( $togs as $tname ) {
+				$this->mToggles[$tname] = $request->getCheck( "wpOp$tname" ) ? 1 : 0;
+			}
+		}
+
+		$this->mUsedToggles = array();
+
+		# Search namespace options
+		# Note: namespaces don't necessarily have consecutive keys
+		$this->mSearchNs = array();
+		if ( $this->mPosted ) {
+			$namespaces = $wgContLang->getNamespaces();
+			foreach ( $namespaces as $i => $namespace ) {
+				if ( $i >= 0 ) {
+					$this->mSearchNs[$i] = $request->getCheck( "wpNs$i" ) ? 1 : 0;
+				}
+			}
+		}
+
+		# Validate language
+		if ( !preg_match( '/^[a-z\-]*$/', $this->mUserLanguage ) ) {
+			$this->mUserLanguage = 'nolanguage';
+		}
+	}
+
+	function execute() {
+		global $wgUser, $wgOut;
+
+		if ( $wgUser->isAnon() ) {
+			$wgOut->showErrorPage( 'prefsnologin', 'prefsnologintext' );
+			return;
+		}
+		if ( wfReadOnly() ) {
+			$wgOut->readOnlyPage();
+			return;
+		}
+		if ( $this->mReset ) {
+			$this->resetPrefs();
+			$this->mainPrefsForm( 'reset', wfMsg( 'prefsreset' ) );
+		} else if ( $this->mSaveprefs ) {
+			$this->savePreferences();
+		} else {
+			$this->resetPrefs();
+			$this->mainPrefsForm( '' );
+		}
+	}
+	/**
+	 * @access private
+	 */
+	function validateInt( &$val, $min=0, $max=0x7fffffff ) {
+		$val = intval($val);
+		$val = min($val, $max);
+		$val = max($val, $min);
+		return $val;
+	}
+
+	/**
+	 * @access private
+	 */
+	function validateFloat( &$val, $min, $max=0x7fffffff ) {
+		$val = floatval( $val );
+		$val = min( $val, $max );
+		$val = max( $val, $min );
+		return( $val );
+	}
+
+	/**
+	 * @access private
+	 */
+	function validateIntOrNull( &$val, $min=0, $max=0x7fffffff ) {
+		$val = trim($val);
+		if($val === '') {
+			return $val;
+		} else {
+			return $this->validateInt( $val, $min, $max );
+		}
+	}
+
+	/**
+	 * @access private
+	 */
+	function validateDate( $val ) {
+		global $wgLang, $wgContLang;
+		if ( $val !== false && (
+			in_array( $val, (array)$wgLang->getDatePreferences() ) ||
+			in_array( $val, (array)$wgContLang->getDatePreferences() ) ) ) 
+		{
+			return $val;
+		} else {
+			return $wgLang->getDefaultDateFormat();
+		}
+	}
+
+	/**
+	 * Used to validate the user inputed timezone before saving it as
+	 * 'timecorrection', will return '00:00' if fed bogus data.
+	 * Note: It's not a 100% correct implementation timezone-wise, it will
+	 * accept stuff like '14:30',
+	 * @access private
+	 * @param string $s the user input
+	 * @return string
+	 */
+	function validateTimeZone( $s ) {
+		if ( $s !== '' ) {
+			if ( strpos( $s, ':' ) ) {
+				# HH:MM
+				$array = explode( ':' , $s );
+				$hour = intval( $array[0] );
+				$minute = intval( $array[1] );
+			} else {
+				$minute = intval( $s * 60 );
+				$hour = intval( $minute / 60 );
+				$minute = abs( $minute ) % 60;
+			}
+			# Max is +14:00 and min is -12:00, see:
+			# http://en.wikipedia.org/wiki/Timezone
+			$hour = min( $hour, 14 );
+			$hour = max( $hour, -12 );
+			$minute = min( $minute, 59 );
+			$minute = max( $minute, 0 );
+			$s = sprintf( "%02d:%02d", $hour, $minute );
+		}
+		return $s;
+	}
+
+	/**
+	 * @access private
+	 */
+	function savePreferences() {
+		global $wgUser, $wgOut, $wgParser;
+		global $wgEnableUserEmail, $wgEnableEmail;
+		global $wgEmailAuthentication;
+		global $wgAuth;
+
+
+		if ( '' != $this->mNewpass && $wgAuth->allowPasswordChange() ) {
+			if ( $this->mNewpass != $this->mRetypePass ) {
+				$this->mainPrefsForm( 'error', wfMsg( 'badretype' ) );
+				return;
+			}
+
+			if (!$wgUser->checkPassword( $this->mOldpass )) {
+				$this->mainPrefsForm( 'error', wfMsg( 'wrongpassword' ) );
+				return;
+			}
+			
+			try {
+				$wgUser->setPassword( $this->mNewpass );
+				$this->mNewpass = $this->mOldpass = $this->mRetypePass = '';
+			} catch( PasswordError $e ) {
+				$this->mainPrefsForm( 'error', $e->getMessage() );
+				return;
+			}
+		}
+		$wgUser->setRealName( $this->mRealName );
+
+		if( $wgUser->getOption( 'language' ) !== $this->mUserLanguage ) {
+			$needRedirect = true;
+		} else {
+			$needRedirect = false;
+		}
+
+		# Validate the signature and clean it up as needed
+		if( $this->mToggles['fancysig'] ) {
+			if( Parser::validateSig( $this->mNick ) !== false ) {
+				$this->mNick = $wgParser->cleanSig( $this->mNick );
+			} else {
+				$this->mainPrefsForm( 'error', wfMsg( 'badsig' ) );
+			}
+		} else {
+			// When no fancy sig used, make sure ~{3,5} get removed.
+			$this->mNick = $wgParser->cleanSigInSig( $this->mNick );
+		}
+
+		$wgUser->setOption( 'language', $this->mUserLanguage );
+		$wgUser->setOption( 'variant', $this->mUserVariant );
+		$wgUser->setOption( 'nickname', $this->mNick );
+		$wgUser->setOption( 'quickbar', $this->mQuickbar );
+		$wgUser->setOption( 'skin', $this->mSkin );
+		global $wgUseTeX;
+		if( $wgUseTeX ) {
+			$wgUser->setOption( 'math', $this->mMath );
+		}
+		$wgUser->setOption( 'date', $this->validateDate( $this->mDate ) );
+		$wgUser->setOption( 'searchlimit', $this->validateIntOrNull( $this->mSearch ) );
+		$wgUser->setOption( 'contextlines', $this->validateIntOrNull( $this->mSearchLines ) );
+		$wgUser->setOption( 'contextchars', $this->validateIntOrNull( $this->mSearchChars ) );
+		$wgUser->setOption( 'rclimit', $this->validateIntOrNull( $this->mRecent ) );
+		$wgUser->setOption( 'rcdays', $this->validateInt( $this->mRecentDays, 1, 7 ) );
+		$wgUser->setOption( 'wllimit', $this->validateIntOrNull( $this->mWatchlistEdits, 0, 1000 ) );
+		$wgUser->setOption( 'rows', $this->validateInt( $this->mRows, 4, 1000 ) );
+		$wgUser->setOption( 'cols', $this->validateInt( $this->mCols, 4, 1000 ) );
+		$wgUser->setOption( 'stubthreshold', $this->validateIntOrNull( $this->mStubs ) );
+		$wgUser->setOption( 'timecorrection', $this->validateTimeZone( $this->mHourDiff, -12, 14 ) );
+		$wgUser->setOption( 'imagesize', $this->mImageSize );
+		$wgUser->setOption( 'thumbsize', $this->mThumbSize );
+		$wgUser->setOption( 'underline', $this->validateInt($this->mUnderline, 0, 2) );
+		$wgUser->setOption( 'watchlistdays', $this->validateFloat( $this->mWatchlistDays, 0, 7 ) );
+
+		# Set search namespace options
+		foreach( $this->mSearchNs as $i => $value ) {
+			$wgUser->setOption( "searchNs{$i}", $value );
+		}
+
+		if( $wgEnableEmail && $wgEnableUserEmail ) {
+			$wgUser->setOption( 'disablemail', $this->mEmailFlag );
+		}
+
+		# Set user toggles
+		foreach ( $this->mToggles as $tname => $tvalue ) {
+			$wgUser->setOption( $tname, $tvalue );
+		}
+		if (!$wgAuth->updateExternalDB($wgUser)) {
+			$this->mainPrefsForm( wfMsg( 'externaldberror' ) );
+			return;
+		}
+		$wgUser->setCookies();
+		$wgUser->saveSettings();
+
+		$error = false;
+		if( $wgEnableEmail ) {
+			$newadr = $this->mUserEmail;
+			$oldadr = $wgUser->getEmail();
+			if( ($newadr != '') && ($newadr != $oldadr) ) {
+				# the user has supplied a new email address on the login page
+				if( $wgUser->isValidEmailAddr( $newadr ) ) {
+					$wgUser->mEmail = $newadr; # new behaviour: set this new emailaddr from login-page into user database record
+					$wgUser->mEmailAuthenticated = null; # but flag as "dirty" = unauthenticated
+					$wgUser->saveSettings();
+					if ($wgEmailAuthentication) {
+						# Mail a temporary password to the dirty address.
+						# User can come back through the confirmation URL to re-enable email.
+						$result = $wgUser->sendConfirmationMail();
+						if( WikiError::isError( $result ) ) {
+							$error = wfMsg( 'mailerror', htmlspecialchars( $result->getMessage() ) );
+						} else {
+							$error = wfMsg( 'eauthentsent', $wgUser->getName() );
+						}
+					}
+				} else {
+					$error = wfMsg( 'invalidemailaddress' );
+				}
+			} else {
+				$wgUser->setEmail( $this->mUserEmail );
+				$wgUser->setCookies();
+				$wgUser->saveSettings();
+			}
+		}
+
+		if( $needRedirect && $error === false ) {
+			$title =& SpecialPage::getTitleFor( "Preferences" );
+			$wgOut->redirect($title->getFullURL('success'));
+			return;
+		}
+
+		$wgOut->setParserOptions( ParserOptions::newFromUser( $wgUser ) );
+		$this->mainPrefsForm( $error === false ? 'success' : 'error', $error);
+	}
+
+	/**
+	 * @access private
+	 */
+	function resetPrefs() {
+		global $wgUser, $wgLang, $wgContLang, $wgContLanguageCode, $wgAllowRealName;
+
+		$this->mOldpass = $this->mNewpass = $this->mRetypePass = '';
+		$this->mUserEmail = $wgUser->getEmail();
+		$this->mUserEmailAuthenticationtimestamp = $wgUser->getEmailAuthenticationtimestamp();
+		$this->mRealName = ($wgAllowRealName) ? $wgUser->getRealName() : '';
+
+		# language value might be blank, default to content language
+		$this->mUserLanguage = $wgUser->getOption( 'language', $wgContLanguageCode );
+
+		$this->mUserVariant = $wgUser->getOption( 'variant');
+		$this->mEmailFlag = $wgUser->getOption( 'disablemail' ) == 1 ? 1 : 0;
+		$this->mNick = $wgUser->getOption( 'nickname' );
+
+		$this->mQuickbar = $wgUser->getOption( 'quickbar' );
+		$this->mSkin = Skin::normalizeKey( $wgUser->getOption( 'skin' ) );
+		$this->mMath = $wgUser->getOption( 'math' );
+		$this->mDate = $wgUser->getDatePreference();
+		$this->mRows = $wgUser->getOption( 'rows' );
+		$this->mCols = $wgUser->getOption( 'cols' );
+		$this->mStubs = $wgUser->getOption( 'stubthreshold' );
+		$this->mHourDiff = $wgUser->getOption( 'timecorrection' );
+		$this->mSearch = $wgUser->getOption( 'searchlimit' );
+		$this->mSearchLines = $wgUser->getOption( 'contextlines' );
+		$this->mSearchChars = $wgUser->getOption( 'contextchars' );
+		$this->mImageSize = $wgUser->getOption( 'imagesize' );
+		$this->mThumbSize = $wgUser->getOption( 'thumbsize' );
+		$this->mRecent = $wgUser->getOption( 'rclimit' );
+		$this->mRecentDays = $wgUser->getOption( 'rcdays' );
+		$this->mWatchlistEdits = $wgUser->getOption( 'wllimit' );
+		$this->mUnderline = $wgUser->getOption( 'underline' );
+		$this->mWatchlistDays = $wgUser->getOption( 'watchlistdays' );
+
+		$togs = User::getToggles();
+		foreach ( $togs as $tname ) {
+			$this->mToggles[$tname] = $wgUser->getOption( $tname );
+		}
+
+		$namespaces = $wgContLang->getNamespaces();
+		foreach ( $namespaces as $i => $namespace ) {
+			if ( $i >= NS_MAIN ) {
+				$this->mSearchNs[$i] = $wgUser->getOption( 'searchNs'.$i );
+			}
+		}
+	}
+
+	/**
+	 * @access private
+	 */
+	function namespacesCheckboxes() {
+		global $wgContLang;
+
+		# Determine namespace checkboxes
+		$namespaces = $wgContLang->getNamespaces();
+		$r1 = null;
+
+		foreach ( $namespaces as $i => $name ) {
+			if ($i < 0)
+				continue;
+			$checked = $this->mSearchNs[$i] ? "checked='checked'" : '';
+			$name = str_replace( '_', ' ', $namespaces[$i] );
+
+			if ( empty($name) )
+				$name = wfMsg( 'blanknamespace' );
+
+			$r1 .= "<input type='checkbox' value='1' name='wpNs$i' id='wpNs$i' {$checked}/> <label for='wpNs$i'>{$name}</label><br />\n";
+		}
+		return $r1;
+	}
+
+
+	function getToggle( $tname, $trailer = false, $disabled = false ) {
+		global $wgUser, $wgLang;
+
+		$this->mUsedToggles[$tname] = true;
+		$ttext = $wgLang->getUserToggle( $tname );
+
+		$checked = $wgUser->getOption( $tname ) == 1 ? ' checked="checked"' : '';
+		$disabled = $disabled ? ' disabled="disabled"' : '';
+		$trailer = $trailer ? $trailer : '';
+		return "<div class='toggle'><input type='checkbox' value='1' id=\"$tname\" name=\"wpOp$tname\"$checked$disabled />" .
+			" <span class='toggletext'><label for=\"$tname\">$ttext</label>$trailer</span></div>\n";
+	}
+
+	function getToggles( $items ) {
+		$out = "";
+		foreach( $items as $item ) {
+			if( $item === false )
+				continue;
+			if( is_array( $item ) ) {
+				list( $key, $trailer ) = $item;
+			} else {
+				$key = $item;
+				$trailer = false;
+			}
+			$out .= $this->getToggle( $key, $trailer );
+		}
+		return $out;
+	}
+
+	function addRow($td1, $td2) {
+		return "<tr><td align='right'>$td1</td><td align='left'>$td2</td></tr>";
+	}
+
+	/**
+	 * @access private
+	 */
+	function mainPrefsForm( $status , $message = '' ) {
+		global $wgUser, $wgOut, $wgLang, $wgContLang;
+		global $wgAllowRealName, $wgImageLimits, $wgThumbLimits;
+		global $wgDisableLangConversion;
+		global $wgEnotifWatchlist, $wgEnotifUserTalk,$wgEnotifMinorEdits;
+		global $wgRCShowWatchingUsers, $wgEnotifRevealEditorAddress;
+		global $wgEnableEmail, $wgEnableUserEmail, $wgEmailAuthentication;
+		global $wgContLanguageCode, $wgDefaultSkin, $wgSkipSkins, $wgAuth;
+
+		$wgOut->setPageTitle( wfMsg( 'preferences' ) );
+		$wgOut->setArticleRelated( false );
+		$wgOut->setRobotpolicy( 'noindex,nofollow' );
+
+		if ( $this->mSuccess || 'success' == $status ) {
+			$wgOut->addWikitext( '<div class="successbox"><strong>'. wfMsg( 'savedprefs' ) . '</strong></div>' );
+		} else	if ( 'error' == $status ) {
+			$wgOut->addWikitext( '<div class="errorbox"><strong>' . $message  . '</strong></div>' );
+		} else if ( '' != $status ) {
+			$wgOut->addWikitext( $message . "\n----" );
+		}
+
+		$qbs = $wgLang->getQuickbarSettings();
+		$skinNames = $wgLang->getSkinNames();
+		$mathopts = $wgLang->getMathNames();
+		$dateopts = $wgLang->getDatePreferences();
+		$togs = User::getToggles();
+
+		$titleObj = SpecialPage::getTitleFor( 'Preferences' );
+		$action = $titleObj->escapeLocalURL();
+
+		# Pre-expire some toggles so they won't show if disabled
+		$this->mUsedToggles[ 'shownumberswatching' ] = true;
+		$this->mUsedToggles[ 'showupdated' ] = true;
+		$this->mUsedToggles[ 'enotifwatchlistpages' ] = true;
+		$this->mUsedToggles[ 'enotifusertalkpages' ] = true;
+		$this->mUsedToggles[ 'enotifminoredits' ] = true;
+		$this->mUsedToggles[ 'enotifrevealaddr' ] = true;
+		$this->mUsedToggles[ 'ccmeonemails' ] = true;
+		$this->mUsedToggles[ 'uselivepreview' ] = true;
+
+		# Enotif
+		# <FIXME>
+		$this->mUserEmail = htmlspecialchars( $this->mUserEmail );
+		$this->mRealName = htmlspecialchars( $this->mRealName );
+		$rawNick = $this->mNick;
+		$this->mNick = htmlspecialchars( $this->mNick );
+		if ( !$this->mEmailFlag ) { $emfc = 'checked="checked"'; }
+		else { $emfc = ''; }
+
+
+		if ($wgEmailAuthentication && ($this->mUserEmail != '') ) {
+			if( $wgUser->getEmailAuthenticationTimestamp() ) {
+				$emailauthenticated = wfMsg('emailauthenticated',$wgLang->timeanddate($wgUser->getEmailAuthenticationTimestamp(), true ) ).'<br />';
+				$disableEmailPrefs = false;
+			} else {
+				$disableEmailPrefs = true;
+				$skin = $wgUser->getSkin();
+				$emailauthenticated = wfMsg('emailnotauthenticated').'<br />' .
+					$skin->makeKnownLinkObj( SpecialPage::getTitleFor( 'Confirmemail' ),
+						wfMsg( 'emailconfirmlink' ) );
+			}
+		} else {
+			$emailauthenticated = '';
+			$disableEmailPrefs = false;
+		}
+
+		if ($this->mUserEmail == '') {
+			$emailauthenticated = wfMsg( 'noemailprefs' );
+		}
+
+		$ps = $this->namespacesCheckboxes();
+
+		$enotifwatchlistpages = ($wgEnotifWatchlist) ? $this->getToggle( 'enotifwatchlistpages', false, $disableEmailPrefs ) : '';
+		$enotifusertalkpages = ($wgEnotifUserTalk) ? $this->getToggle( 'enotifusertalkpages', false, $disableEmailPrefs ) : '';
+		$enotifminoredits = ($wgEnotifWatchlist && $wgEnotifMinorEdits) ? $this->getToggle( 'enotifminoredits', false, $disableEmailPrefs ) : '';
+		$enotifrevealaddr = (($wgEnotifWatchlist || $wgEnotifUserTalk) && $wgEnotifRevealEditorAddress) ? $this->getToggle( 'enotifrevealaddr', false, $disableEmailPrefs ) : '';
+
+		# </FIXME>
+
+		$wgOut->addHTML( "<form action=\"$action\" method='post'>" );
+		$wgOut->addHTML( "<div id='preferences'>" );
+
+		# User data
+		#
+
+		$wgOut->addHTML( "<fieldset>\n<legend>" . wfMsg('prefs-personal') . "</legend>\n<table>\n");
+
+		$userInformationHtml =
+			$this->addRow(
+				wfMsg( 'username'),
+				$wgUser->getName()
+			) .
+			$this->addRow(
+				wfMsg( 'uid' ),
+				$wgUser->getID()
+			);
+		
+		if( wfRunHooks( 'PreferencesUserInformationPanel', array( $this, &$userInformationHtml ) ) ) {
+			$wgOut->addHtml( $userInformationHtml );
+		}
+
+
+		if ($wgAllowRealName) {
+			$wgOut->addHTML(
+				$this->addRow(
+					'<label for="wpRealName">' . wfMsg('yourrealname') . '</label>',
+					"<input type='text' name='wpRealName' id='wpRealName' value=\"{$this->mRealName}\" size='25' />"
+				)
+			);
+		}
+		if ($wgEnableEmail) {
+			$wgOut->addHTML(
+				$this->addRow(
+					'<label for="wpUserEmail">' . wfMsg( 'youremail' ) . '</label>',
+					"<input type='text' name='wpUserEmail' id='wpUserEmail' value=\"{$this->mUserEmail}\" size='25' />"
+				)
+			);
+		}
+
+		global $wgParser;
+		if( !empty( $this->mToggles['fancysig'] ) &&
+			false === $wgParser->validateSig( $rawNick ) ) {
+			$invalidSig = $this->addRow(
+				'&nbsp;',
+				'<span class="error">' . wfMsgHtml( 'badsig' ) . '<span>'
+			);
+		} else {
+			$invalidSig = '';
+		}
+
+		$wgOut->addHTML(
+			$this->addRow(
+				'<label for="wpNick">' . wfMsg( 'yournick' ) . '</label>',
+				"<input type='text' name='wpNick' id='wpNick' value=\"{$this->mNick}\" size='25' />"
+			) .
+			$invalidSig .
+			# FIXME: The <input> part should be where the &nbsp; is, getToggle() needs
+			# to be changed to out return its output in two parts. -ævar
+			$this->addRow(
+				'&nbsp;',
+				$this->getToggle( 'fancysig' )
+			)
+		);
+
+		/**
+		 * Make sure the site language is in the list; a custom language code
+		 * might not have a defined name...
+		 */
+		$languages = Language::getLanguageNames( true );
+		if( !array_key_exists( $wgContLanguageCode, $languages ) ) {
+			$languages[$wgContLanguageCode] = $wgContLanguageCode;
+		}
+		ksort( $languages );
+
+		/**
+		 * If a bogus value is set, default to the content language.
+		 * Otherwise, no default is selected and the user ends up
+		 * with an Afrikaans interface since it's first in the list.
+		 */
+		$selectedLang = isset( $languages[$this->mUserLanguage] ) ? $this->mUserLanguage : $wgContLanguageCode;
+		$options = "\n";
+		foreach( $languages as $code => $name ) {
+			$selected = ($code == $selectedLang);
+			$options .= Xml::option( "$code - $name", $code, $selected ) . "\n";
+		}
+		$wgOut->addHTML(
+			$this->addRow(
+				'<label for="wpUserLanguage">' . wfMsg('yourlanguage') . '</label>',
+				"<select name='wpUserLanguage' id='wpUserLanguage'>$options</select>"
+			)
+		);
+
+		/* see if there are multiple language variants to choose from*/
+		if(!$wgDisableLangConversion) {
+			$variants = $wgContLang->getVariants();
+			$variantArray = array();
+
+			foreach($variants as $v) {
+				$v = str_replace( '_', '-', strtolower($v));
+				if( array_key_exists( $v, $languages ) ) {
+					// If it doesn't have a name, we'll pretend it doesn't exist
+					$variantArray[$v] = $languages[$v];
+				}
+			}
+
+			$options = "\n";
+			foreach( $variantArray as $code => $name ) {
+				$selected = ($code == $this->mUserVariant);
+				$options .= Xml::option( "$code - $name", $code, $selected ) . "\n";
+			}
+
+			if(count($variantArray) > 1) {
+				$wgOut->addHtml(
+					$this->addRow( wfMsg( 'yourvariant' ),
+						"<select name='wpUserVariant'>$options</select>" )
+				);
+			}
+		}
+		$wgOut->addHTML('</table>');
+
+		# Password
+		if( $wgAuth->allowPasswordChange() ) {
+			$this->mOldpass = htmlspecialchars( $this->mOldpass );
+			$this->mNewpass = htmlspecialchars( $this->mNewpass );
+			$this->mRetypePass = htmlspecialchars( $this->mRetypePass );
+	
+			$wgOut->addHTML( '<fieldset><legend>' . wfMsg( 'changepassword' ) . '</legend><table>');
+			$wgOut->addHTML(
+				$this->addRow(
+					'<label for="wpOldpass">' . wfMsg( 'oldpassword' ) . '</label>',
+					"<input type='password' name='wpOldpass' id='wpOldpass' value=\"{$this->mOldpass}\" size='20' />"
+				) .
+				$this->addRow(
+					'<label for="wpNewpass">' . wfMsg( 'newpassword' ) . '</label>',
+					"<input type='password' name='wpNewpass' id='wpNewpass' value=\"{$this->mNewpass}\" size='20' />"
+				) .
+				$this->addRow(
+					'<label for="wpRetypePass">' . wfMsg( 'retypenew' ) . '</label>',
+					"<input type='password' name='wpRetypePass' id='wpRetypePass' value=\"{$this->mRetypePass}\" size='20' />"
+				) .
+				"</table>\n" .
+				$this->getToggle( "rememberpassword" ) . "</fieldset>\n\n" );
+		}
+
+		# <FIXME>
+		# Enotif
+		if ($wgEnableEmail) {
+			$wgOut->addHTML( '<fieldset><legend>' . wfMsg( 'email' ) . '</legend>' );
+			$wgOut->addHTML(
+					$emailauthenticated.
+					$enotifrevealaddr.
+					$enotifwatchlistpages.
+					$enotifusertalkpages.
+					$enotifminoredits );
+			if ($wgEnableUserEmail) {
+			$emf = wfMsg( 'allowemail' );
+				$disabled = $disableEmailPrefs ? ' disabled="disabled"' : '';
+				$wgOut->addHTML(
+				"<div><input type='checkbox' $emfc $disabled value='1' name='wpEmailFlag' id='wpEmailFlag' /> <label for='wpEmailFlag'>$emf</label></div>" );
+			}
+			$wgOut->addHtml( $this->getToggle( 'ccmeonemails' ) );
+
+			$wgOut->addHTML( '</fieldset>' );
+		}
+		# </FIXME>
+
+		# Show little "help" tips for the real name and email address options
+		if( $wgAllowRealName || $wgEnableEmail ) {
+			if( $wgAllowRealName )
+				$tips[] = wfMsg( 'prefs-help-realname' );
+			if( $wgEnableEmail )
+				$tips[] = wfMsg( 'prefs-help-email' );
+			$wgOut->addHtml( '<div class="prefsectiontip">' . implode( '<br />', $tips ) . '</div>' );
+		}		
+
+		$wgOut->addHTML( '</fieldset>' );
+
+		# Quickbar
+		#
+		if ($this->mSkin == 'cologneblue' || $this->mSkin == 'standard') {
+			$wgOut->addHtml( "<fieldset>\n<legend>" . wfMsg( 'qbsettings' ) . "</legend>\n" );
+			for ( $i = 0; $i < count( $qbs ); ++$i ) {
+				if ( $i == $this->mQuickbar ) { $checked = ' checked="checked"'; }
+				else { $checked = ""; }
+				$wgOut->addHTML( "<div><label><input type='radio' name='wpQuickbar' value=\"$i\"$checked />{$qbs[$i]}</label></div>\n" );
+			}
+			$wgOut->addHtml( "</fieldset>\n\n" );
+		} else {
+			# Need to output a hidden option even if the relevant skin is not in use,
+			# otherwise the preference will get reset to 0 on submit
+			$wgOut->addHtml( wfHidden( 'wpQuickbar', $this->mQuickbar ) );
+		}
+
+		# Skin
+		#
+		$wgOut->addHTML( "<fieldset>\n<legend>\n" . wfMsg('skin') . "</legend>\n" );
+		$mptitle = Title::newMainPage();
+		$previewtext = wfMsg('skinpreview');
+		# Only show members of Skin::getSkinNames() rather than
+		# $skinNames (skins is all skin names from Language.php)
+		$validSkinNames = Skin::getSkinNames();
+		# Sort by UI skin name. First though need to update validSkinNames as sometimes
+		# the skinkey & UI skinname differ (e.g. "standard" skinkey is "Classic" in the UI).
+		foreach ($validSkinNames as $skinkey => & $skinname ) {
+			if ( isset( $skinNames[$skinkey] ) )  {
+				$skinname = $skinNames[$skinkey];
+			}
+		}
+		asort($validSkinNames);
+		foreach ($validSkinNames as $skinkey => $sn ) {
+			if ( in_array( $skinkey, $wgSkipSkins ) ) {
+				continue;
+			}
+			$checked = $skinkey == $this->mSkin ? ' checked="checked"' : '';
+
+			$mplink = htmlspecialchars($mptitle->getLocalURL("useskin=$skinkey"));
+			$previewlink = "<a target='_blank' href=\"$mplink\">$previewtext</a>";
+			if( $skinkey == $wgDefaultSkin )
+				$sn .= ' (' . wfMsg( 'default' ) . ')';
+			$wgOut->addHTML( "<input type='radio' name='wpSkin' id=\"wpSkin$skinkey\" value=\"$skinkey\"$checked /> <label for=\"wpSkin$skinkey\">{$sn}</label> $previewlink<br />\n" );
+		}
+		$wgOut->addHTML( "</fieldset>\n\n" );
+
+		# Math
+		#
+		global $wgUseTeX;
+		if( $wgUseTeX ) {
+			$wgOut->addHTML( "<fieldset>\n<legend>" . wfMsg('math') . '</legend>' );
+			foreach ( $mathopts as $k => $v ) {
+				$checked = $k == $this->mMath ? ' checked="checked"' : '';
+				$wgOut->addHTML( "<div><label><input type='radio' name='wpMath' value=\"$k\"$checked /> ".wfMsg($v)."</label></div>\n" );
+			}
+			$wgOut->addHTML( "</fieldset>\n\n" );
+		}
+
+		# Files
+		#
+		$wgOut->addHTML(
+			"<fieldset>\n" . Xml::element( 'legend', null, wfMsg( 'files' ) ) . "\n"
+		);
+
+		$imageLimitOptions = null;
+		foreach ( $wgImageLimits as $index => $limits ) {
+			$selected = ($index == $this->mImageSize);
+			$imageLimitOptions .= Xml::option( "{$limits[0]}×{$limits[1]}" .
+				wfMsg('unit-pixel'), $index, $selected );
+		}
+
+		$imageSizeId = 'wpImageSize';
+		$wgOut->addHTML(
+			"<div>" . Xml::label( wfMsg('imagemaxsize'), $imageSizeId ) . " " .
+			Xml::openElement( 'select', array( 'name' => $imageSizeId, 'id' => $imageSizeId ) ) .
+				$imageLimitOptions .
+			Xml::closeElement( 'select' ) . "</div>\n"
+		);
+
+		$imageThumbOptions = null;
+		foreach ( $wgThumbLimits as $index => $size ) {
+			$selected = ($index == $this->mThumbSize);
+			$imageThumbOptions .= Xml::option($size . wfMsg('unit-pixel'), $index,
+				$selected);
+		}
+
+		$thumbSizeId = 'wpThumbSize';
+		$wgOut->addHTML(
+			"<div>" . Xml::label( wfMsg('thumbsize'), $thumbSizeId ) . " " .
+			Xml::openElement( 'select', array( 'name' => $thumbSizeId, 'id' => $thumbSizeId ) ) .
+				$imageThumbOptions .
+			Xml::closeElement( 'select' ) . "</div>\n"
+		);
+
+		$wgOut->addHTML( "</fieldset>\n\n" );
+
+		# Date format
+		#
+		# Date/Time
+		#
+
+		$wgOut->addHTML( "<fieldset>\n<legend>" . wfMsg( 'datetime' ) . "</legend>\n" );
+
+		if ($dateopts) {
+			$wgOut->addHTML( "<fieldset>\n<legend>" . wfMsg( 'dateformat' ) . "</legend>\n" );
+			$idCnt = 0;
+			$epoch = '20010115161234'; # Wikipedia day
+			foreach( $dateopts as $key ) {
+				if( $key == 'default' ) {
+					$formatted = wfMsgHtml( 'datedefault' );
+				} else {
+					$formatted = htmlspecialchars( $wgLang->timeanddate( $epoch, false, $key ) );
+				}
+				($key == $this->mDate) ? $checked = ' checked="checked"' : $checked = '';
+				$wgOut->addHTML( "<div><input type='radio' name=\"wpDate\" id=\"wpDate$idCnt\" ".
+					"value=\"$key\"$checked /> <label for=\"wpDate$idCnt\">$formatted</label></div>\n" );
+				$idCnt++;
+			}
+			$wgOut->addHTML( "</fieldset>\n" );
+		}
+
+		$nowlocal = $wgLang->time( $now = wfTimestampNow(), true );
+		$nowserver = $wgLang->time( $now, false );
+
+		$wgOut->addHTML( '<fieldset><legend>' . wfMsg( 'timezonelegend' ). '</legend><table>' .
+		 	$this->addRow( wfMsg( 'servertime' ), $nowserver ) .
+			$this->addRow( wfMsg( 'localtime' ), $nowlocal ) .
+			$this->addRow(
+				'<label for="wpHourDiff">' . wfMsg( 'timezoneoffset' ) . '</label>',
+				"<input type='text' name='wpHourDiff' id='wpHourDiff' value=\"" . htmlspecialchars( $this->mHourDiff ) . "\" size='6' />"
+			) . "<tr><td colspan='2'>
+				<input type='button' value=\"" . wfMsg( 'guesstimezone' ) ."\"
+				onclick='javascript:guessTimezone()' id='guesstimezonebutton' style='display:none;' />
+				</td></tr></table><div class='prefsectiontip'>¹" .  wfMsg( 'timezonetext' ) . "</div></fieldset>
+		</fieldset>\n\n" );
+
+		# Editing
+		#
+		global $wgLivePreview;
+		$wgOut->addHTML( '<fieldset><legend>' . wfMsg( 'textboxsize' ) . '</legend>
+			<div>' .
+				wfInputLabel( wfMsg( 'rows' ), 'wpRows', 'wpRows', 3, $this->mRows ) .
+				' ' .
+				wfInputLabel( wfMsg( 'columns' ), 'wpCols', 'wpCols', 3, $this->mCols ) .
+			"</div>" .
+			$this->getToggles( array(
+				'editsection',
+				'editsectiononrightclick',
+				'editondblclick',
+				'editwidth',
+				'showtoolbar',
+				'riched_disable',
+				'previewonfirst',
+				'previewontop',
+				'minordefault',
+				'externaleditor',
+				'externaldiff',
+				$wgLivePreview ? 'uselivepreview' : false,
+				'forceeditsummary',
+			) ) . '</fieldset>'
+		);
+
+		# FCKeditor
+		#
+		if (!$wgUser->getOption( 'riched_disable' )) {
+		  $wgOut->addHTML( '<fieldset><legend>' . wfMsg( 'textrichditor' ) . '</legend>' .			 			
+			 $this->getToggles( FCKeditor_Mediawiki::$nsToggles ) . '</fieldset>'
+		  );
+		}
+
+		# Recent changes
+		$wgOut->addHtml( '<fieldset><legend>' . wfMsgHtml( 'prefs-rc' ) . '</legend>' );
+		
+		$rc  = '<table><tr>';
+		$rc .= '<td>' . Xml::label( wfMsg( 'recentchangesdays' ), 'wpRecentDays' ) . '</td>';
+		$rc .= '<td>' . Xml::input( 'wpRecentDays', 3, $this->mRecentDays, array( 'id' => 'wpRecentDays' ) ) . '</td>';		
+		$rc .= '</tr><tr>';
+		$rc .= '<td>' . Xml::label( wfMsg( 'recentchangescount' ), 'wpRecent' ) . '</td>';
+		$rc .= '<td>' . Xml::input( 'wpRecent', 3, $this->mRecent, array( 'id' => 'wpRecent' ) ) . '</td>';
+		$rc .= '</tr></table>';
+		$wgOut->addHtml( $rc );
+		
+		$wgOut->addHtml( '<br />' );
+		
+		$toggles[] = 'hideminor';
+		if( $wgRCShowWatchingUsers )
+			$toggles[] = 'shownumberswatching';
+		$toggles[] = 'usenewrc';
+		$wgOut->addHtml( $this->getToggles( $toggles ) );
+
+		$wgOut->addHtml( '</fieldset>' );
+
+		# Watchlist
+		$wgOut->addHtml( '<fieldset><legend>' . wfMsgHtml( 'prefs-watchlist' ) . '</legend>' );
+		
+		$wgOut->addHtml( wfInputLabel( wfMsg( 'prefs-watchlist-days' ), 'wpWatchlistDays', 'wpWatchlistDays', 3, $this->mWatchlistDays ) );
+		$wgOut->addHtml( '<br /><br />' );
+
+		$wgOut->addHtml( $this->getToggle( 'extendwatchlist' ) );
+		$wgOut->addHtml( wfInputLabel( wfMsg( 'prefs-watchlist-edits' ), 'wpWatchlistEdits', 'wpWatchlistEdits', 3, $this->mWatchlistEdits ) );
+		$wgOut->addHtml( '<br /><br />' );
+
+		$wgOut->addHtml( $this->getToggles( array( 'watchlisthideown', 'watchlisthidebots', 'watchlisthideminor' ) ) );
+		
+		if( $wgUser->isAllowed( 'createpage' ) || $wgUser->isAllowed( 'createtalk' ) )
+			$wgOut->addHtml( $this->getToggle( 'watchcreations' ) );
+		foreach( array( 'edit' => 'watchdefault', 'move' => 'watchmoves', 'delete' => 'watchdeletion' ) as $action => $toggle ) {
+			if( $wgUser->isAllowed( $action ) )
+				$wgOut->addHtml( $this->getToggle( $toggle ) );
+		}
+		$this->mUsedToggles['watchcreations'] = true;
+		$this->mUsedToggles['watchdefault'] = true;
+		$this->mUsedToggles['watchmoves'] = true;
+		$this->mUsedToggles['watchdeletion'] = true;
+		
+		$wgOut->addHtml( '</fieldset>' );
+
+		# Search
+		$wgOut->addHTML( '<fieldset><legend>' . wfMsg( 'searchresultshead' ) . '</legend><table>' .
+			$this->addRow(
+				wfLabel( wfMsg( 'resultsperpage' ), 'wpSearch' ),
+				wfInput( 'wpSearch', 4, $this->mSearch, array( 'id' => 'wpSearch' ) )
+			) .
+			$this->addRow(
+				wfLabel( wfMsg( 'contextlines' ), 'wpSearchLines' ),
+				wfInput( 'wpSearchLines', 4, $this->mSearchLines, array( 'id' => 'wpSearchLines' ) )
+			) .
+			$this->addRow(
+				wfLabel( wfMsg( 'contextchars' ), 'wpSearchChars' ),
+				wfInput( 'wpSearchChars', 4, $this->mSearchChars, array( 'id' => 'wpSearchChars' ) )
+			) .
+		"</table><fieldset><legend>" . wfMsg( 'defaultns' ) . "</legend>$ps</fieldset></fieldset>" );
+
+		# Misc
+		#
+		$wgOut->addHTML('<fieldset><legend>' . wfMsg('prefs-misc') . '</legend>');
+		$wgOut->addHTML( wfInputLabel( wfMsg( 'stubthreshold' ),
+			'wpStubs', 'wpStubs', 6, $this->mStubs ) );
+		$msgUnderline = htmlspecialchars( wfMsg ( 'tog-underline' ) );
+		$msgUnderlinenever = htmlspecialchars( wfMsg ( 'underline-never' ) );
+		$msgUnderlinealways = htmlspecialchars( wfMsg ( 'underline-always' ) );
+		$msgUnderlinedefault = htmlspecialchars( wfMsg ( 'underline-default' ) );
+		$uopt = $wgUser->getOption("underline");
+		$s0 = $uopt == 0 ? ' selected="selected"' : '';
+		$s1 = $uopt == 1 ? ' selected="selected"' : '';
+		$s2 = $uopt == 2 ? ' selected="selected"' : '';
+		$wgOut->addHTML("
+<div class='toggle'><p><label for='wpOpunderline'>$msgUnderline</label>
+<select name='wpOpunderline' id='wpOpunderline'>
+<option value=\"0\"$s0>$msgUnderlinenever</option>
+<option value=\"1\"$s1>$msgUnderlinealways</option>
+<option value=\"2\"$s2>$msgUnderlinedefault</option>
+</select></p></div>");
+
+		foreach ( $togs as $tname ) {
+			if( !array_key_exists( $tname, $this->mUsedToggles ) ) {
+				$wgOut->addHTML( $this->getToggle( $tname ) );
+			}
+		}
+		$wgOut->addHTML( '</fieldset>' );
+
+		$token = $wgUser->editToken();
+		$skin = $wgUser->getSkin();
+		$wgOut->addHTML( "
+	<div id='prefsubmit'>
+	<div>
+		<input type='submit' name='wpSaveprefs' class='btnSavePrefs' value=\"" . wfMsgHtml( 'saveprefs' ) . '"'.$skin->tooltipAndAccesskey('save')." />
+		<input type='submit' name='wpReset' value=\"" . wfMsgHtml( 'resetprefs' ) . "\" />
+	</div>
+
+	</div>
+
+	<input type='hidden' name='wpEditToken' value='{$token}' />
+	</div></form>\n" );
+
+		$wgOut->addWikiText( '<div class="prefcache">' . wfMsg('clearyourcache') . '</div>' );
+
+	}
+}
+?>
Index: /MediaWiki/branches/1.11/includes/SpecialPrefixindex.php
===================================================================
--- /MediaWiki/branches/1.11/includes/SpecialPrefixindex.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/SpecialPrefixindex.php	(revision 1280)
@@ -0,0 +1,149 @@
+<?php
+/**
+ * @addtogroup SpecialPage
+ */
+
+/**
+ * Entry point : initialise variables and call subfunctions.
+ * @param $par String: becomes "FOO" when called like Special:Prefixindex/FOO (default NULL)
+ * @param $specialPage SpecialPage object.
+ */
+function wfSpecialPrefixIndex( $par=NULL, $specialPage ) {
+	global $wgRequest, $wgOut, $wgContLang;
+
+	# GET values
+	$from = $wgRequest->getVal( 'from' );
+	$prefix = $wgRequest->getVal( 'prefix' );
+	$namespace = $wgRequest->getInt( 'namespace' );
+
+	$namespaces = $wgContLang->getNamespaces();
+
+	$indexPage = new SpecialPrefixIndex();
+
+	if( !in_array($namespace, array_keys($namespaces)) )
+		$namespace = 0;
+
+	$wgOut->setPagetitle( $namespace > 0 ?
+		wfMsg( 'allinnamespace', str_replace( '_', ' ', $namespaces[$namespace] ) ) :
+		wfMsg( 'allarticles' )
+		);
+
+
+
+	if ( isset($par) ) {
+		$indexPage->showChunk( $namespace, $par, $specialPage->including(), $from );
+	} elseif ( isset($prefix) ) {
+		$indexPage->showChunk( $namespace, $prefix, $specialPage->including(), $from );
+	} elseif ( isset($from) ) {
+		$indexPage->showChunk( $namespace, $from, $specialPage->including(), $from );
+	} else {
+		$wgOut->addHtml($indexPage->namespaceForm ( $namespace, null ));
+	}
+}
+
+/**
+ * implements Special:Prefixindex 
+ * @addtogroup SpecialPage
+ */
+class SpecialPrefixindex extends SpecialAllpages {
+	var $maxPerPage=960;
+	var $topLevelMax=50;
+	var $name='Prefixindex';
+	# Determines, which message describes the input field 'nsfrom', used in function namespaceForm (see superclass SpecialAllpages)
+	var $nsfromMsg='allpagesprefix';
+
+/**
+ * @param integer $namespace (Default NS_MAIN)
+ * @param string $from list all pages from this name (default FALSE)
+ */
+function showChunk( $namespace = NS_MAIN, $prefix, $including = false, $from = null ) {
+	global $wgOut, $wgUser, $wgContLang;
+
+	$fname = 'indexShowChunk';
+
+	$sk = $wgUser->getSkin();
+
+	if (!isset($from)) $from = $prefix;
+
+	$fromList = $this->getNamespaceKeyAndText($namespace, $from);
+	$prefixList = $this->getNamespaceKeyAndText($namespace, $prefix);
+
+	if ( !$prefixList || !$fromList ) {
+		$out = wfMsgWikiHtml( 'allpagesbadtitle' );
+	} else {
+		list( $namespace, $prefixKey, $prefix ) = $prefixList;
+		list( /* $fromNs */, $fromKey, $from ) = $fromList;
+
+		### FIXME: should complain if $fromNs != $namespace
+
+		$dbr = wfGetDB( DB_SLAVE );
+
+		$res = $dbr->select( 'page',
+			array( 'page_namespace', 'page_title', 'page_is_redirect' ),
+			array(
+				'page_namespace' => $namespace,
+				'page_title LIKE \'' . $dbr->escapeLike( $prefixKey ) .'%\'',
+				'page_title >= ' . $dbr->addQuotes( $fromKey ),
+			),
+			$fname,
+			array(
+				'ORDER BY'  => 'page_title',
+				'LIMIT'     => $this->maxPerPage + 1,
+				'USE INDEX' => 'name_title',
+			)
+		);
+
+		### FIXME: side link to previous
+
+		$n = 0;
+		$out = '<table style="background: inherit;" border="0" width="100%">';
+
+		while( ($n < $this->maxPerPage) && ($s = $dbr->fetchObject( $res )) ) {
+			$t = Title::makeTitle( $s->page_namespace, $s->page_title );
+			if( $t ) {
+				$link = ($s->page_is_redirect ? '<div class="allpagesredirect">' : '' ) .
+					$sk->makeKnownLinkObj( $t, htmlspecialchars( $t->getText() ), false, false ) .
+					($s->page_is_redirect ? '</div>' : '' );
+			} else {
+				$link = '[[' . htmlspecialchars( $s->page_title ) . ']]';
+			}
+			if( $n % 3 == 0 ) {
+				$out .= '<tr>';
+			}
+			$out .= "<td>$link</td>";
+			$n++;
+			if( $n % 3 == 0 ) {
+				$out .= '</tr>';
+			}
+		}
+		if( ($n % 3) != 0 ) {
+			$out .= '</tr>';
+		}
+		$out .= '</table>';
+	}
+
+	if ( $including ) {
+		$out2 = '';
+	} else {
+		$nsForm = $this->namespaceForm ( $namespace, $prefix );
+		$out2 = '<table style="background: inherit;" width="100%" cellpadding="0" cellspacing="0" border="0">';
+		$out2 .= '<tr valign="top"><td align="left">' . $nsForm;
+		$out2 .= '</td><td align="right" style="font-size: smaller; margin-bottom: 1em;">' .
+				$sk->makeKnownLink( $wgContLang->specialPage( $this->name ),
+					wfMsg ( 'allpages' ) );
+		if ( isset($dbr) && $dbr && ($n == $this->maxPerPage) && ($s = $dbr->fetchObject( $res )) ) {
+			$namespaceparam = $namespace ? "&namespace=$namespace" : "";
+			$out2 .= " | " . $sk->makeKnownLink(
+				$wgContLang->specialPage( $this->name ),
+				wfMsg ( 'nextpage', $s->page_title ),
+				"from=" . wfUrlEncode ( $s->page_title ) .
+				"&prefix=" . wfUrlEncode ( $prefix ) . $namespaceparam );
+		}
+		$out2 .= "</td></tr></table><hr />";
+	}
+
+	$wgOut->addHtml( $out2 . $out );
+}
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/SpecialProtectedpages.php
===================================================================
--- /MediaWiki/branches/1.11/includes/SpecialProtectedpages.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/SpecialProtectedpages.php	(revision 1280)
@@ -0,0 +1,260 @@
+<?php
+/**
+ *
+ * @addtogroup SpecialPage
+ */
+
+/**
+ * @todo document
+ * @addtogroup SpecialPage
+ */
+class ProtectedPagesForm {
+	function showList( $msg = '' ) {
+		global $wgOut, $wgRequest;
+
+		$wgOut->setPagetitle( wfMsg( "protectedpages" ) );
+		if ( "" != $msg ) {
+			$wgOut->setSubtitle( $msg );
+		}
+
+		// Purge expired entries on one in every 10 queries
+		if ( !mt_rand( 0, 10 ) ) {
+			Title::purgeExpiredRestrictions();
+		}
+
+		$type = $wgRequest->getVal( 'type' );
+		$level = $wgRequest->getVal( 'level' );
+		$minsize = $wgRequest->getIntOrNull( 'minsize' );
+		$NS = $wgRequest->getIntOrNull( 'namespace' );
+
+		$pager = new ProtectedPagesPager( $this, array(), $type, $level, $NS, $minsize );	
+
+		$wgOut->addHTML( $this->showOptions( $NS, $type, $level, $minsize ) );
+
+		if ( $pager->getNumRows() ) {
+			$s = $pager->getNavigationBar();
+			$s .= "<ul>" . 
+				$pager->getBody() .
+				"</ul>";
+			$s .= $pager->getNavigationBar();
+		} else {
+			$s = '<p>' . wfMsgHTML( 'protectedpagesempty' ) . '</p>';
+		}
+		$wgOut->addHTML( $s );
+	}
+
+	/**
+	 * Callback function to output a restriction
+	 */
+	function formatRow( $row ) {
+		global $wgUser, $wgLang;
+
+		wfProfileIn( __METHOD__ );
+
+		static $skin=null;
+
+		if( is_null( $skin ) )
+			$skin = $wgUser->getSkin();
+		
+		$title = Title::makeTitleSafe( $row->page_namespace, $row->page_title );
+		$link = $skin->makeLinkObj( $title );
+
+		$description_items = array ();
+
+		$protType = wfMsgHtml( 'restriction-level-' . $row->pr_level );
+
+		$description_items[] = $protType;
+
+		$expiry_description = ''; $stxt = '';
+
+		if ( $row->pr_expiry != 'infinity' && strlen($row->pr_expiry) ) {
+			$expiry = Block::decodeExpiry( $row->pr_expiry );
+	
+			$expiry_description = wfMsgForContent( 'protect-expiring', $wgLang->timeanddate( $expiry ) );
+
+			$description_items[] = $expiry_description;
+		}
+		
+		if (!is_null($size = $row->page_len)) {
+			if ($size == 0)
+				$stxt = ' <small>' . wfMsgHtml('historyempty') . '</small>';
+			else
+				$stxt = ' <small>' . wfMsgHtml('historysize', $wgLang->formatNum( $size ) ) . '</small>';
+		}
+		wfProfileOut( __METHOD__ );
+
+		return '<li>' . wfSpecialList( $link . $stxt, implode( $description_items, ', ' ) ) . "</li>\n";
+	}
+	
+	/**
+	 * @param $namespace int
+	 * @param $type string
+	 * @param $level string
+	 * @param $minsize int
+	 * @private
+	 */
+	function showOptions( $namespace, $type='edit', $level, $minsize ) {
+		global $wgScript;
+		$action = htmlspecialchars( $wgScript );
+		$title = SpecialPage::getTitleFor( 'ProtectedPages' );
+		$special = htmlspecialchars( $title->getPrefixedDBkey() );
+		return "<form action=\"$action\" method=\"get\">\n" .
+			'<fieldset>' .
+			Xml::element( 'legend', array(), wfMsg( 'protectedpages' ) ) .
+			Xml::hidden( 'title', $special ) . "\n" .
+			$this->getNamespaceMenu( $namespace ) . "\n" .
+			$this->getTypeMenu( $type ) . "\n" .
+			$this->getLevelMenu( $level ) . "<br/>\n" .
+			$this->getSizeLimit( $minsize ) . "\n" .
+			Xml::submitButton( wfMsg( 'allpagessubmit' ) ) . "\n" .
+			"</fieldset></form>";
+	}
+	
+	function getNamespaceMenu( $namespace=NULL ) {
+		return "<label for='namespace'>" . wfMsgHtml('namespace') . "</label>" . HTMLnamespaceselector($namespace, '');
+	}
+
+	/**
+	 * @return string Formatted HTML
+	 * @private
+	 */
+	function getSizeLimit( $minsize=0 ) {	
+		$out = Xml::input('minsize', 9, $minsize, array( 'id' => 'minsize' ) );
+		return "<label for='minsize'>" . wfMsgHtml('minimum-size') . "</label>: " . $out;
+	}
+		
+	/**
+	 * @return string Formatted HTML
+	 * @private
+	 */
+	function getTypeMenu( $pr_type ) {
+		global $wgRestrictionTypes, $wgUser;
+	
+		$out = "<select name='type'>\n";
+		$m = array(); // Temporary array
+
+		// First pass to load the log names
+		foreach( $wgRestrictionTypes as $type ) {
+			$text = wfMsgHtml("restriction-$type");
+			$m[$text] = $type;
+		}
+
+		// Second pass to sort by name
+		ksort($m);
+
+		// Third pass generates sorted XHTML content
+		foreach( $m as $text => $type ) {
+			$selected = ($type == $pr_type );
+			$out .= Xml::option( $text, $type, $selected ) . "\n";
+		}
+
+		$out .= '</select>';
+		return "<label for='type'>" . wfMsgHtml('restriction-type') . "</label>: " . $out;
+	}
+
+	/**
+	 * @return string Formatted HTML
+	 * @private
+	 */	
+	function getLevelMenu( $pr_level ) {
+		global $wgRestrictionLevels, $wgUser;
+	
+		$out = "<select name='level'>\n";
+		$m = array( wfMsgHtml('restriction-level-all') => 0 ); // Temporary array
+
+		// First pass to load the log names
+		foreach( $wgRestrictionLevels as $type ) {
+			if ( $type !='' && $type !='*') {
+				$text = wfMsgHtml("restriction-level-$type");
+				$m[$text] = $type;
+			}
+		}
+
+		// Second pass to sort by name
+		ksort($m);
+
+		// Third pass generates sorted XHTML content
+		foreach( $m as $text => $type ) {
+			$selected = ($type == $pr_level );
+			$out .= Xml::option( $text, $type, $selected ) . "\n";
+		}
+
+		$out .= '</select>';
+		return "<label for='level'>" . wfMsgHtml('restriction-level') . "</label>: " . $out;
+	}
+}
+
+/**
+ * @todo document
+ * @addtogroup Pager
+ */
+class ProtectedPagesPager extends ReverseChronologicalPager {
+	public $mForm, $mConds;
+
+	function __construct( $form, $conds = array(), $type, $level, $namespace, $minsize ) {
+		$this->mForm = $form;
+		$this->mConds = $conds;
+		$this->type = ( $type ) ? $type : 'edit';
+		$this->level = $level;
+		$this->namespace = $namespace;
+		$this->minsize = intval($minsize);
+		parent::__construct();
+	}
+
+	function getStartBody() {
+		wfProfileIn( __METHOD__ );
+		# Do a link batch query
+		$this->mResult->seek( 0 );
+		$lb = new LinkBatch;
+
+		while ( $row = $this->mResult->fetchObject() ) {
+			$name = str_replace( ' ', '_', $row->page_title );
+			$lb->add( $row->page_namespace, $name );
+		}
+
+		$lb->execute();
+		wfProfileOut( __METHOD__ );
+		return '';
+	}
+	
+	function formatRow( $row ) {
+		$block = new Block;
+		return $this->mForm->formatRow( $row );
+	}
+
+	function getQueryInfo() {
+		$conds = $this->mConds;
+		$conds[] = 'pr_expiry>' . $this->mDb->addQuotes( $this->mDb->timestamp() );
+		$conds[] = 'page_id=pr_page';
+		$conds[] = 'page_len>=' . $this->minsize;
+		$conds[] = 'pr_type=' . $this->mDb->addQuotes( $this->type );
+		if ( $this->level )
+			$conds[] = 'pr_level=' . $this->mDb->addQuotes( $this->level );
+		if ( !is_null($this->namespace) )
+			$conds[] = 'page_namespace=' . $this->mDb->addQuotes( $this->namespace );
+		return array(
+			'tables' => array( 'page_restrictions', 'page' ),
+			'fields' => 'max(pr_id) AS pr_id,page_namespace,page_title,page_len,pr_type,pr_level,pr_expiry',
+			'conds' => $conds,
+			'options' => array( 'GROUP BY' => 'page_namespace,page_title,pr_level,pr_expiry,page_len,pr_type' ),
+		);
+	}
+
+	function getIndexField() {
+		return 'pr_id';
+	}
+}
+
+/**
+ * Constructor
+ */
+function wfSpecialProtectedpages() {
+
+	list( $limit, $offset ) = wfCheckLimits();
+
+	$ppForm = new ProtectedPagesForm();
+
+	$ppForm->showList();
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/SpecialRandompage.php
===================================================================
--- /MediaWiki/branches/1.11/includes/SpecialRandompage.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/SpecialRandompage.php	(revision 1280)
@@ -0,0 +1,108 @@
+<?php
+
+/**
+ * Special page to direct the user to a random page
+ *
+ * @addtogroup SpecialPage
+ * @author Rob Church <robchur@gmail.com>, Ilmari Karonen
+ * @license GNU General Public Licence 2.0 or later
+ */
+
+/**
+ * Main execution point
+ * @param $par Namespace to select the page from
+ */
+function wfSpecialRandompage( $par = null ) {
+	global $wgOut, $wgContLang;
+
+	$rnd = new RandomPage();
+	$rnd->setNamespace( $wgContLang->getNsIndex( $par ) );
+	$rnd->setRedirect( false );
+
+	$title = $rnd->getRandomTitle();
+
+	if( is_null( $title ) ) {
+		$wgOut->addWikiText( wfMsg( 'randompage-nopages' ) );
+		return;
+	}
+
+	$wgOut->reportTime();
+	$wgOut->redirect( $title->getFullUrl() );
+}
+
+
+/**
+ * Special page to direct the user to a random page
+ *
+ * @addtogroup SpecialPage
+ */
+class RandomPage {
+	private $namespace = NS_MAIN;  // namespace to select pages from
+	private $redirect = false;     // select redirects instead of normal pages?
+
+	public function getNamespace ( ) {
+		return $this->namespace;
+	}
+	public function setNamespace ( $ns ) {
+		if( $ns < NS_MAIN ) $ns = NS_MAIN;
+		$this->namespace = $ns;
+	}
+	public function getRedirect ( ) {
+		return $this->redirect;
+	}
+	public function setRedirect ( $redirect ) {
+		$this->redirect = $redirect;
+	}
+
+	/**
+	 * Choose a random title.
+	 * @return Title object (or null if nothing to choose from)
+	 */
+	public function getRandomTitle ( ) {
+		$randstr = wfRandom();
+		$row = $this->selectRandomPageFromDB( $randstr );
+
+		/* If we picked a value that was higher than any in
+		 * the DB, wrap around and select the page with the
+		 * lowest value instead!  One might think this would
+		 * skew the distribution, but in fact it won't cause
+		 * any more bias than what the page_random scheme
+		 * causes anyway.  Trust me, I'm a mathematician. :)
+		 */
+		if( !$row )
+			$row = $this->selectRandomPageFromDB( "0" );
+
+		if( $row )
+			return Title::makeTitleSafe( $this->namespace, $row->page_title );
+		else
+			return null;
+	}
+
+	private function selectRandomPageFromDB ( $randstr ) {
+		global $wgExtraRandompageSQL;
+		$fname = 'RandomPage::selectRandomPageFromDB';
+
+		$dbr = wfGetDB( DB_SLAVE );
+
+		$use_index = $dbr->useIndexClause( 'page_random' );
+		$page = $dbr->tableName( 'page' );
+
+		$ns = (int) $this->namespace;
+		$redirect = $this->redirect ? 1 : 0;
+
+		$extra = $wgExtraRandompageSQL ? "AND ($wgExtraRandompageSQL)" : "";
+		$sql = "SELECT page_title
+			FROM $page $use_index
+			WHERE page_namespace = $ns
+			AND page_is_redirect = $redirect
+			AND page_random >= $randstr
+			$extra
+			ORDER BY page_random";
+
+		$sql = $dbr->limitResult( $sql, 1, 0 );
+		$res = $dbr->query( $sql, $fname );
+		return $dbr->fetchObject( $res );
+	}
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/SpecialRandomredirect.php
===================================================================
--- /MediaWiki/branches/1.11/includes/SpecialRandomredirect.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/SpecialRandomredirect.php	(revision 1280)
@@ -0,0 +1,33 @@
+<?php
+
+/**
+ * Special page to direct the user to a random redirect page (minus the second redirect)
+ *
+ * @addtogroup SpecialPage
+ * @author Rob Church <robchur@gmail.com>, Ilmari Karonen
+ * @license GNU General Public Licence 2.0 or later
+ */
+
+/**
+ * Main execution point
+ * @param $par Namespace to select the redirect from
+ */
+function wfSpecialRandomredirect( $par = null ) {
+	global $wgOut, $wgContLang;
+
+	$rnd = new RandomPage();
+	$rnd->setNamespace( $wgContLang->getNsIndex( $par ) );
+	$rnd->setRedirect( true );
+
+	$title = $rnd->getRandomTitle();
+
+	if( is_null( $title ) ) {
+		$wgOut->addWikiText( wfMsg( 'randomredirect-nopages' ) );
+		return;
+	}
+
+	$wgOut->reportTime();
+	$wgOut->redirect( $title->getFullUrl( 'redirect=no' ) );
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/SpecialRecentchanges.php
===================================================================
--- /MediaWiki/branches/1.11/includes/SpecialRecentchanges.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/SpecialRecentchanges.php	(revision 1280)
@@ -0,0 +1,705 @@
+<?php
+/**
+ *
+ * @addtogroup SpecialPage
+ */
+
+/**
+ *
+ */
+require_once( dirname(__FILE__) . '/ChangesList.php' );
+
+/**
+ * Constructor
+ */
+function wfSpecialRecentchanges( $par, $specialPage ) {
+	global $wgUser, $wgOut, $wgRequest, $wgUseRCPatrol;
+	global $wgRCShowWatchingUsers, $wgShowUpdatedMarker;
+	global $wgAllowCategorizedRecentChanges ;
+	$fname = 'wfSpecialRecentchanges';
+
+	# Get query parameters
+	$feedFormat = $wgRequest->getVal( 'feed' );
+
+	/* Checkbox values can't be true by default, because
+	 * we cannot differentiate between unset and not set at all
+	 */
+	$defaults = array(
+	/* int  */ 'days' => $wgUser->getDefaultOption('rcdays'),
+	/* int  */ 'limit' => $wgUser->getDefaultOption('rclimit'),
+	/* bool */ 'hideminor' => false,
+	/* bool */ 'hidebots' => true,
+	/* bool */ 'hideanons' => false,
+	/* bool */ 'hideliu' => false,
+	/* bool */ 'hidepatrolled' => false,
+	/* bool */ 'hidemyself' => false,
+	/* text */ 'from' => '',
+	/* text */ 'namespace' => null,
+	/* bool */ 'invert' => false,
+	/* bool */ 'categories_any' => false,
+	);
+
+	extract($defaults);
+
+
+	$days = $wgUser->getOption( 'rcdays', $defaults['days']);
+	$days = $wgRequest->getInt( 'days', $days );
+
+	$limit = $wgUser->getOption( 'rclimit', $defaults['limit'] );
+
+	#	list( $limit, $offset ) = wfCheckLimits( 100, 'rclimit' );
+	$limit = $wgRequest->getInt( 'limit', $limit );
+
+	/* order of selection: url > preferences > default */
+	$hideminor = $wgRequest->getBool( 'hideminor', $wgUser->getOption( 'hideminor') ? true : $defaults['hideminor'] );
+	
+	# As a feed, use limited settings only
+	if( $feedFormat ) {
+		global $wgFeedLimit;
+		if( $limit > $wgFeedLimit ) {
+			$limit = $wgFeedLimit;
+		}
+
+	} else {
+
+		$namespace = $wgRequest->getIntOrNull( 'namespace' );
+		$invert = $wgRequest->getBool( 'invert', $defaults['invert'] );
+		$hidebots = $wgRequest->getBool( 'hidebots', $defaults['hidebots'] );
+		$hideanons = $wgRequest->getBool( 'hideanons', $defaults['hideanons'] );
+		$hideliu = $wgRequest->getBool( 'hideliu', $defaults['hideliu'] );
+		$hidepatrolled = $wgRequest->getBool( 'hidepatrolled', $defaults['hidepatrolled'] );
+		$hidemyself = $wgRequest->getBool ( 'hidemyself', $defaults['hidemyself'] );
+		$from = $wgRequest->getVal( 'from', $defaults['from'] );
+
+		# Get query parameters from path
+		if( $par ) {
+			$bits = preg_split( '/\s*,\s*/', trim( $par ) );
+			foreach ( $bits as $bit ) {
+				if ( 'hidebots' == $bit ) $hidebots = 1;
+				if ( 'bots' == $bit ) $hidebots = 0;
+				if ( 'hideminor' == $bit ) $hideminor = 1;
+				if ( 'minor' == $bit ) $hideminor = 0;
+				if ( 'hideliu' == $bit ) $hideliu = 1;
+				if ( 'hidepatrolled' == $bit ) $hidepatrolled = 1;
+				if ( 'hideanons' == $bit ) $hideanons = 1;
+				if ( 'hidemyself' == $bit ) $hidemyself = 1;
+
+				if ( is_numeric( $bit ) ) {
+					$limit = $bit;
+				}
+				
+				$m = array();
+				if ( preg_match( '/^limit=(\d+)$/', $bit, $m ) ) {
+					$limit = $m[1];
+				}
+
+				if ( preg_match( '/^days=(\d+)$/', $bit, $m ) ) {
+					$days = $m[1];
+				}
+			}
+		}
+	}
+
+	if ( $limit < 0 || $limit > 5000 ) $limit = $defaults['limit'];
+
+
+	# Database connection and caching
+	$dbr = wfGetDB( DB_SLAVE );
+	list( $recentchanges, $watchlist ) = $dbr->tableNamesN( 'recentchanges', 'watchlist' );
+
+
+	$cutoff_unixtime = time() - ( $days * 86400 );
+	$cutoff_unixtime = $cutoff_unixtime - ($cutoff_unixtime % 86400);
+	$cutoff = $dbr->timestamp( $cutoff_unixtime );
+	if(preg_match('/^[0-9]{14}$/', $from) and $from > wfTimestamp(TS_MW,$cutoff)) {
+		$cutoff = $dbr->timestamp($from);
+	} else {
+		$from = $defaults['from'];
+	}
+
+	# 10 seconds server-side caching max
+	$wgOut->setSquidMaxage( 10 );
+
+	# Get last modified date, for client caching
+	# Don't use this if we are using the patrol feature, patrol changes don't update the timestamp
+	$lastmod = $dbr->selectField( 'recentchanges', 'MAX(rc_timestamp)', false, $fname );
+	if ( $feedFormat || !$wgUseRCPatrol ) {
+		if( $lastmod && $wgOut->checkLastModified( $lastmod ) ){
+			# Client cache fresh and headers sent, nothing more to do.
+			return;
+		}
+	}
+
+	# It makes no sense to hide both anons and logged-in users
+	# Where this occurs, force anons to be shown
+	if( $hideanons && $hideliu )
+		$hideanons = false;
+
+	# Form WHERE fragments for all the options
+	$hidem  = $hideminor ? 'AND rc_minor = 0' : '';
+	$hidem .= $hidebots ? ' AND rc_bot = 0' : '';
+	$hidem .= $hideliu ? ' AND rc_user = 0' : '';
+	$hidem .= ( $wgUseRCPatrol && $hidepatrolled ) ? ' AND rc_patrolled = 0' : '';
+	$hidem .= $hideanons ? ' AND rc_user != 0' : '';
+	
+	if( $hidemyself ) {
+		if( $wgUser->getID() ) {
+			$hidem .= ' AND rc_user != ' . $wgUser->getID();
+		} else {
+			$hidem .= ' AND rc_user_text != ' . $dbr->addQuotes( $wgUser->getName() );
+		}
+	}
+
+	# Namespace filtering
+	$hidem .= is_null( $namespace ) ?  '' : ' AND rc_namespace' . ($invert ? '!=' : '=') . $namespace;
+
+	// This is the big thing!
+
+	$uid = $wgUser->getID();
+
+	// Perform query
+	$forceclause = $dbr->useIndexClause("rc_timestamp");
+	$sql2 = "SELECT * FROM $recentchanges $forceclause".
+	  ($uid ? "LEFT OUTER JOIN $watchlist ON wl_user={$uid} AND wl_title=rc_title AND wl_namespace=rc_namespace " : "") .
+	  "WHERE rc_timestamp >= '{$cutoff}' {$hidem} " .
+	  "ORDER BY rc_timestamp DESC";
+	$sql2 = $dbr->limitResult($sql2, $limit, 0);
+	$res = $dbr->query( $sql2, $fname );
+
+	// Fetch results, prepare a batch link existence check query
+	$rows = array();
+	$batch = new LinkBatch;
+	while( $row = $dbr->fetchObject( $res ) ){
+		$rows[] = $row;
+		if ( !$feedFormat ) {
+			// User page link
+			$title = Title::makeTitleSafe( NS_USER, $row->rc_user_text );
+			$batch->addObj( $title );
+
+			// User talk
+			$title = Title::makeTitleSafe( NS_USER_TALK, $row->rc_user_text );
+			$batch->addObj( $title );
+		}
+
+	}
+	$dbr->freeResult( $res );
+
+	if( $feedFormat ) {
+		rcOutputFeed( $rows, $feedFormat, $limit, $hideminor, $lastmod );
+	} else {
+
+		# Web output...
+
+		// Run existence checks
+		$batch->execute();
+		$any = $wgRequest->getBool( 'categories_any', $defaults['categories_any']);
+
+		// Output header
+		if ( !$specialPage->including() ) {
+			$wgOut->addWikiText( wfMsgForContentNoTrans( "recentchangestext" ) );
+
+			// Dump everything here
+			$nondefaults = array();
+
+			wfAppendToArrayIfNotDefault( 'days', $days, $defaults, $nondefaults);
+			wfAppendToArrayIfNotDefault( 'limit', $limit , $defaults, $nondefaults);
+			wfAppendToArrayIfNotDefault( 'hideminor', $hideminor, $defaults, $nondefaults);
+			wfAppendToArrayIfNotDefault( 'hidebots', $hidebots, $defaults, $nondefaults);
+			wfAppendToArrayIfNotDefault( 'hideanons', $hideanons, $defaults, $nondefaults );
+			wfAppendToArrayIfNotDefault( 'hideliu', $hideliu, $defaults, $nondefaults);
+			wfAppendToArrayIfNotDefault( 'hidepatrolled', $hidepatrolled, $defaults, $nondefaults);
+			wfAppendToArrayIfNotDefault( 'hidemyself', $hidemyself, $defaults, $nondefaults);
+			wfAppendToArrayIfNotDefault( 'from', $from, $defaults, $nondefaults);
+			wfAppendToArrayIfNotDefault( 'namespace', $namespace, $defaults, $nondefaults);
+			wfAppendToArrayIfNotDefault( 'invert', $invert, $defaults, $nondefaults);
+			wfAppendToArrayIfNotDefault( 'categories_any', $any, $defaults, $nondefaults);
+
+			// Add end of the texts
+			$wgOut->addHTML( '<div class="rcoptions">' . rcOptionsPanel( $defaults, $nondefaults ) . "\n" );
+			$wgOut->addHTML( rcNamespaceForm( $namespace, $invert, $nondefaults, $any ) . '</div>'."\n");
+		}
+
+		// And now for the content
+		$wgOut->setSyndicated( true );
+
+		$list = ChangesList::newFromUser( $wgUser );
+		
+		if ( $wgAllowCategorizedRecentChanges ) {
+			$categories = trim ( $wgRequest->getVal ( 'categories' , "" ) ) ;
+			$categories = str_replace ( "|" , "\n" , $categories ) ;
+			$categories = explode ( "\n" , $categories ) ;
+			rcFilterByCategories ( $rows , $categories , $any ) ;
+		}
+
+		$s = $list->beginRecentChangesList();
+		$counter = 1;
+		foreach( $rows as $obj ){
+			if( $limit == 0) {
+				break;
+			}
+
+			if ( ! ( $hideminor     && $obj->rc_minor     ) &&
+			     ! ( $hidepatrolled && $obj->rc_patrolled ) ) {
+				$rc = RecentChange::newFromRow( $obj );
+				$rc->counter = $counter++;
+
+				if ($wgShowUpdatedMarker
+					&& !empty( $obj->wl_notificationtimestamp )
+					&& ($obj->rc_timestamp >= $obj->wl_notificationtimestamp)) {
+						$rc->notificationtimestamp = true;
+				} else {
+					$rc->notificationtimestamp = false;
+				}
+
+				if ($wgRCShowWatchingUsers && $wgUser->getOption( 'shownumberswatching' )) {
+					$sql3 = "SELECT COUNT(*) AS n FROM $watchlist WHERE wl_title='" . $dbr->strencode($obj->rc_title) ."' AND wl_namespace=$obj->rc_namespace" ;
+					$res3 = $dbr->query( $sql3, 'wfSpecialRecentChanges');
+					$x = $dbr->fetchObject( $res3 );
+					$rc->numberofWatchingusers = $x->n;
+				} else {
+					$rc->numberofWatchingusers = 0;
+				}
+				$s .= $list->recentChangesLine( $rc, !empty( $obj->wl_user ) );
+				--$limit;
+			}
+		}
+		$s .= $list->endRecentChangesList();
+		$wgOut->addHTML( $s );
+	}
+}
+
+function rcFilterByCategories ( &$rows , $categories , $any ) {
+	require_once ( 'Categoryfinder.php' ) ;
+	
+	# Filter categories
+	$cats = array () ;
+	foreach ( $categories AS $cat ) {
+		$cat = trim ( $cat ) ;
+		if ( $cat == "" ) continue ;
+		$cats[] = $cat ;
+	}
+	
+	# Filter articles
+	$articles = array () ;
+	$a2r = array () ;
+	foreach ( $rows AS $k => $r ) {
+		$nt = Title::newFromText ( $r->rc_title , $r->rc_namespace ) ;
+		$id = $nt->getArticleID() ;
+		if ( $id == 0 ) continue ; # Page might have been deleted...
+		if ( !in_array ( $id , $articles ) ) {
+			$articles[] = $id ;
+		}
+		if ( !isset ( $a2r[$id] ) ) {
+			$a2r[$id] = array() ;
+		}
+		$a2r[$id][] = $k ;
+	}
+	
+	# Shortcut?
+	if ( count ( $articles ) == 0 OR count ( $cats ) == 0 )
+		return ;
+	
+	# Look up
+	$c = new Categoryfinder ;
+	$c->seed ( $articles , $cats , $any ? "OR" : "AND" ) ;
+	$match = $c->run () ;
+	
+	# Filter
+	$newrows = array () ;
+	foreach ( $match AS $id ) {
+		foreach ( $a2r[$id] AS $rev ) {
+			$k = $rev ;
+			$newrows[$k] = $rows[$k] ;
+		}
+	}
+	$rows = $newrows ;
+}
+
+function rcOutputFeed( $rows, $feedFormat, $limit, $hideminor, $lastmod ) {
+	global $messageMemc, $wgFeedCacheTimeout;
+	global $wgFeedClasses, $wgTitle, $wgSitename, $wgContLanguageCode;
+
+	if( !isset( $wgFeedClasses[$feedFormat] ) ) {
+		wfHttpError( 500, "Internal Server Error", "Unsupported feed type." );
+		return false;
+	}
+
+	$timekey = wfMemcKey( 'rcfeed', $feedFormat, 'timestamp' );
+	$key = wfMemcKey( 'rcfeed', $feedFormat, 'limit', $limit, 'minor', $hideminor );
+
+	$feedTitle = $wgSitename . ' - ' . wfMsgForContent( 'recentchanges' ) .
+		' [' . $wgContLanguageCode . ']';
+	$feed = new $wgFeedClasses[$feedFormat](
+		$feedTitle,
+		htmlspecialchars( wfMsgForContent( 'recentchanges-feed-description' ) ),
+		$wgTitle->getFullUrl() );
+
+	/**
+	 * Bumping around loading up diffs can be pretty slow, so where
+	 * possible we want to cache the feed output so the next visitor
+	 * gets it quick too.
+	 */
+	$cachedFeed = false;
+	if( ( $wgFeedCacheTimeout > 0 ) && ( $feedLastmod = $messageMemc->get( $timekey ) ) ) {
+		/**
+		 * If the cached feed was rendered very recently, we may
+		 * go ahead and use it even if there have been edits made
+		 * since it was rendered. This keeps a swarm of requests
+		 * from being too bad on a super-frequently edited wiki.
+		 */
+		if( time() - wfTimestamp( TS_UNIX, $feedLastmod )
+				< $wgFeedCacheTimeout
+			|| wfTimestamp( TS_UNIX, $feedLastmod )
+				> wfTimestamp( TS_UNIX, $lastmod ) ) {
+			wfDebug( "RC: loading feed from cache ($key; $feedLastmod; $lastmod)...\n" );
+			$cachedFeed = $messageMemc->get( $key );
+		} else {
+			wfDebug( "RC: cached feed timestamp check failed ($feedLastmod; $lastmod)\n" );
+		}
+	}
+	if( is_string( $cachedFeed ) ) {
+		wfDebug( "RC: Outputting cached feed\n" );
+		$feed->httpHeaders();
+		echo $cachedFeed;
+	} else {
+		wfDebug( "RC: rendering new feed and caching it\n" );
+		ob_start();
+		rcDoOutputFeed( $rows, $feed );
+		$cachedFeed = ob_get_contents();
+		ob_end_flush();
+
+		$expire = 3600 * 24; # One day
+		$messageMemc->set( $key, $cachedFeed );
+		$messageMemc->set( $timekey, wfTimestamp( TS_MW ), $expire );
+	}
+	return true;
+}
+
+function rcDoOutputFeed( $rows, &$feed ) {
+	$fname = 'rcDoOutputFeed';
+	wfProfileIn( $fname );
+
+	$feed->outHeader();
+
+	# Merge adjacent edits by one user
+	$sorted = array();
+	$n = 0;
+	foreach( $rows as $obj ) {
+		if( $n > 0 &&
+			$obj->rc_namespace >= 0 &&
+			$obj->rc_cur_id == $sorted[$n-1]->rc_cur_id &&
+			$obj->rc_user_text == $sorted[$n-1]->rc_user_text ) {
+			$sorted[$n-1]->rc_last_oldid = $obj->rc_last_oldid;
+		} else {
+			$sorted[$n] = $obj;
+			$n++;
+		}
+	}
+
+	foreach( $sorted as $obj ) {
+		$title = Title::makeTitle( $obj->rc_namespace, $obj->rc_title );
+		$talkpage = $title->getTalkPage();
+		$item = new FeedItem(
+			$title->getPrefixedText(),
+			rcFormatDiff( $obj ),
+			$title->getFullURL(),
+			$obj->rc_timestamp,
+			$obj->rc_user_text,
+			$talkpage->getFullURL()
+			);
+		$feed->outItem( $item );
+	}
+	$feed->outFooter();
+	wfProfileOut( $fname );
+}
+
+/**
+ *
+ */
+function rcCountLink( $lim, $d, $page='Recentchanges', $more='' ) {
+	global $wgUser, $wgLang, $wgContLang;
+	$sk = $wgUser->getSkin();
+	$s = $sk->makeKnownLink( $wgContLang->specialPage( $page ),
+	  ($lim ? $wgLang->formatNum( "{$lim}" ) : wfMsg( 'recentchangesall' ) ), "{$more}" .
+	  ($d ? "days={$d}&" : '') . 'limit='.$lim );
+	return $s;
+}
+
+/**
+ *
+ */
+function rcDaysLink( $lim, $d, $page='Recentchanges', $more='' ) {
+	global $wgUser, $wgLang, $wgContLang;
+	$sk = $wgUser->getSkin();
+	$s = $sk->makeKnownLink( $wgContLang->specialPage( $page ),
+	  ($d ? $wgLang->formatNum( "{$d}" ) : wfMsg( 'recentchangesall' ) ), $more.'days='.$d .
+	  ($lim ? '&limit='.$lim : '') );
+	return $s;
+}
+
+/**
+ * Used by Recentchangeslinked
+ */
+function rcDayLimitLinks( $days, $limit, $page='Recentchanges', $more='', $doall = false, $minorLink = '',
+	$botLink = '', $liuLink = '', $patrLink = '', $myselfLink = '' ) {
+	if ($more != '') $more .= '&';
+	$cl = rcCountLink( 50, $days, $page, $more ) . ' | ' .
+	  rcCountLink( 100, $days, $page, $more  ) . ' | ' .
+	  rcCountLink( 250, $days, $page, $more  ) . ' | ' .
+	  rcCountLink( 500, $days, $page, $more  ) .
+	  ( $doall ? ( ' | ' . rcCountLink( 0, $days, $page, $more ) ) : '' );
+	$dl = rcDaysLink( $limit, 1, $page, $more  ) . ' | ' .
+	  rcDaysLink( $limit, 3, $page, $more  ) . ' | ' .
+	  rcDaysLink( $limit, 7, $page, $more  ) . ' | ' .
+	  rcDaysLink( $limit, 14, $page, $more  ) . ' | ' .
+	  rcDaysLink( $limit, 30, $page, $more  ) .
+	  ( $doall ? ( ' | ' . rcDaysLink( $limit, 0, $page, $more ) ) : '' );
+	
+	$linkParts = array( 'minorLink' => 'minor', 'botLink' => 'bots', 'liuLink' => 'liu', 'patrLink' => 'patr', 'myselfLink' => 'mine' );
+	foreach( $linkParts as $linkVar => $linkMsg ) {
+		if( $$linkVar != '' )
+			$links[] = wfMsgHtml( 'rcshowhide' . $linkMsg, $$linkVar );
+	}
+	
+	$shm = implode( ' | ', $links );
+	$note = wfMsg( 'rclinks', $cl, $dl, $shm );
+	return $note;
+}
+
+
+/**
+ * Makes change an option link which carries all the other options
+ * @param $title see Title
+ * @param $override
+ * @param $options
+ */
+function makeOptionsLink( $title, $override, $options ) {
+	global $wgUser, $wgContLang;
+	$sk = $wgUser->getSkin();
+	return $sk->makeKnownLink( $wgContLang->specialPage( 'Recentchanges' ),
+		htmlspecialchars( $title ), wfArrayToCGI( $override, $options ) );
+}
+
+/**
+ * Creates the options panel.
+ * @param $defaults
+ * @param $nondefaults
+ */
+function rcOptionsPanel( $defaults, $nondefaults ) {
+	global $wgLang, $wgUseRCPatrol;
+
+	$options = $nondefaults + $defaults;
+
+	if( $options['from'] )
+		$note = wfMsgExt( 'rcnotefrom', array( 'parseinline' ),
+			$wgLang->formatNum( $options['limit'] ),
+			$wgLang->timeanddate( $options['from'], true ) );
+	else
+		$note = wfMsgExt( 'rcnote', array( 'parseinline' ),
+			$wgLang->formatNum( $options['limit'] ),
+			$wgLang->formatNum( $options['days'] ),
+			$wgLang->timeAndDate( wfTimestampNow(), true ) );
+
+	// limit links
+	$options_limit = array(50, 100, 250, 500);
+	foreach( $options_limit as $value ) {
+		$cl[] = makeOptionsLink( $wgLang->formatNum( $value ),
+			array( 'limit' => $value ), $nondefaults) ;
+	}
+	$cl = implode( ' | ', $cl);
+
+	// day links, reset 'from' to none
+	$options_days = array(1, 3, 7, 14, 30);
+	foreach( $options_days as $value ) {
+		$dl[] = makeOptionsLink( $wgLang->formatNum( $value ),
+			array( 'days' => $value, 'from' => ''  ), $nondefaults) ;
+	}
+	$dl = implode( ' | ', $dl);
+
+
+	// show/hide links
+	$showhide = array( wfMsg( 'show' ), wfMsg( 'hide' ));
+	$minorLink = makeOptionsLink( $showhide[1-$options['hideminor']],
+		array( 'hideminor' => 1-$options['hideminor'] ), $nondefaults);
+	$botLink = makeOptionsLink( $showhide[1-$options['hidebots']],
+		array( 'hidebots' => 1-$options['hidebots'] ), $nondefaults);
+	$anonsLink = makeOptionsLink( $showhide[ 1 - $options['hideanons'] ],
+		array( 'hideanons' => 1 - $options['hideanons'] ), $nondefaults );
+	$liuLink   = makeOptionsLink( $showhide[1-$options['hideliu']],
+		array( 'hideliu' => 1-$options['hideliu'] ), $nondefaults);
+	$patrLink  = makeOptionsLink( $showhide[1-$options['hidepatrolled']],
+		array( 'hidepatrolled' => 1-$options['hidepatrolled'] ), $nondefaults);
+	$myselfLink = makeOptionsLink( $showhide[1-$options['hidemyself']],
+		array( 'hidemyself' => 1-$options['hidemyself'] ), $nondefaults);
+		
+	$links[] = wfMsgHtml( 'rcshowhideminor', $minorLink );
+	$links[] = wfMsgHtml( 'rcshowhidebots', $botLink );
+	$links[] = wfMsgHtml( 'rcshowhideanons', $anonsLink );
+	$links[] = wfMsgHtml( 'rcshowhideliu', $liuLink );
+	if( $wgUseRCPatrol )
+		$links[] = wfMsgHtml( 'rcshowhidepatr', $patrLink );
+	$links[] = wfMsgHtml( 'rcshowhidemine', $myselfLink );
+	$hl = implode( ' | ', $links );
+		
+	// show from this onward link
+	$now = $wgLang->timeanddate( wfTimestampNow(), true );
+	$tl =  makeOptionsLink( $now, array( 'from' => wfTimestampNow()), $nondefaults );
+
+	$rclinks = wfMsgExt( 'rclinks', array( 'parseinline', 'replaceafter'),
+		$cl, $dl, $hl );
+	$rclistfrom = wfMsgExt( 'rclistfrom', array( 'parseinline', 'replaceafter'), $tl );
+	return "$note<br />$rclinks<br />$rclistfrom";
+
+}
+
+/**
+ * Creates the choose namespace selection
+ *
+ * @private
+ *
+ * @param $namespace Mixed: the key of the currently selected namespace, empty string
+ *              if there is none
+ * @param $invert Bool: whether to invert the namespace selection
+ * @param $nondefaults Array: an array of non default options to be remembered
+ * @param $categories_any Bool: Default value for the checkbox
+ *
+ * @return string
+ */
+function rcNamespaceForm( $namespace, $invert, $nondefaults, $categories_any ) {
+	global $wgScript, $wgAllowCategorizedRecentChanges, $wgRequest;
+	$t = SpecialPage::getTitleFor( 'Recentchanges' );
+
+	$namespaceselect = HTMLnamespaceselector($namespace, '');
+	$submitbutton = '<input type="submit" value="' . wfMsgHtml( 'allpagessubmit' ) . "\" />\n";
+	$invertbox = "<input type='checkbox' name='invert' value='1' id='nsinvert'" . ( $invert ? ' checked="checked"' : '' ) . ' />';
+	
+	if ( $wgAllowCategorizedRecentChanges ) {
+		$categories = trim ( $wgRequest->getVal ( 'categories' , "" ) ) ;
+		$cb_arr = array( 'type' => 'checkbox', 'name' => 'categories_any', 'value' => "1" ) ;
+		if ( $categories_any ) $cb_arr['checked'] = "checked" ;
+		$catbox = "<br />" ;
+		$catbox .= wfMsgExt('rc_categories', array('parseinline')) . " ";
+		$catbox .= wfElement('input', array( 'type' => 'text', 'name' => 'categories', 'value' => $categories));
+		$catbox .= " &nbsp;" ;
+		$catbox .= wfElement('input', $cb_arr );
+		$catbox .= wfMsgExt('rc_categories_any', array('parseinline'));
+	} else {
+		$catbox = "" ;
+	}
+	
+	$out = "<div class='namespacesettings'><form method='get' action='{$wgScript}'>\n";
+
+	foreach ( $nondefaults as $key => $value ) {
+		if ($key != 'namespace' && $key != 'invert')
+			$out .= wfElement('input', array( 'type' => 'hidden', 'name' => $key, 'value' => $value));
+	}
+
+	$out .= '<input type="hidden" name="title" value="'.$t->getPrefixedText().'" />';
+	$out .= "
+<div id='nsselect' class='recentchanges'>
+	<label for='namespace'>" . wfMsgHtml('namespace') . "</label>
+	{$namespaceselect}{$submitbutton}{$invertbox} <label for='nsinvert'>" . wfMsgHtml('invert') . "</label>{$catbox}\n</div>";
+	$out .= '</form></div>';
+	return $out;
+}
+
+
+/**
+ * Format a diff for the newsfeed
+ */
+function rcFormatDiff( $row ) {
+	$titleObj = Title::makeTitle( $row->rc_namespace, $row->rc_title );
+	$timestamp = wfTimestamp( TS_MW, $row->rc_timestamp );
+	return rcFormatDiffRow( $titleObj,
+		$row->rc_last_oldid, $row->rc_this_oldid,
+		$timestamp,
+		$row->rc_comment );
+}
+
+function rcFormatDiffRow( $title, $oldid, $newid, $timestamp, $comment ) {
+	global $wgFeedDiffCutoff, $wgContLang, $wgUser;
+	$fname = 'rcFormatDiff';
+	wfProfileIn( $fname );
+
+	$skin = $wgUser->getSkin();
+	$completeText = '<p>' . $skin->formatComment( $comment ) . "</p>\n";
+
+	if( $title->getNamespace() >= 0 && $title->userCan( 'read' ) ) {
+		if( $oldid ) {
+			wfProfileIn( "$fname-dodiff" );
+
+			$de = new DifferenceEngine( $title, $oldid, $newid );
+			#$diffText = $de->getDiff( wfMsg( 'revisionasof',
+			#	$wgContLang->timeanddate( $timestamp ) ),
+			#	wfMsg( 'currentrev' ) );
+			$diffText = $de->getDiff(
+				wfMsg( 'previousrevision' ), // hack
+				wfMsg( 'revisionasof',
+					$wgContLang->timeanddate( $timestamp ) ) );
+				
+
+			if ( strlen( $diffText ) > $wgFeedDiffCutoff ) {
+				// Omit large diffs
+				$diffLink = $title->escapeFullUrl(
+					'diff=' . $newid .
+					'&oldid=' . $oldid );
+				$diffText = '<a href="' .
+					$diffLink .
+					'">' .
+					htmlspecialchars( wfMsgForContent( 'difference' ) ) .
+					'</a>';
+			} elseif ( $diffText === false ) {
+				// Error in diff engine, probably a missing revision
+				$diffText = "<p>Can't load revision $newid</p>";
+			} else {
+				// Diff output fine, clean up any illegal UTF-8
+				$diffText = UtfNormal::cleanUp( $diffText );
+				$diffText = rcApplyDiffStyle( $diffText );
+			}
+			wfProfileOut( "$fname-dodiff" );
+		} else {
+			$rev = Revision::newFromId( $newid );
+			if( is_null( $rev ) ) {
+				$newtext = '';
+			} else {
+				$newtext = $rev->getText();
+			}
+			$diffText = '<p><b>' . wfMsg( 'newpage' ) . '</b></p>' .
+				'<div>' . nl2br( htmlspecialchars( $newtext ) ) . '</div>';
+		}
+		$completeText .= $diffText;
+	}
+
+	wfProfileOut( $fname );
+	return $completeText;
+}
+
+/**
+ * Hacky application of diff styles for the feeds.
+ * Might be 'cleaner' to use DOM or XSLT or something,
+ * but *gack* it's a pain in the ass.
+ *
+ * @param $text String:
+ * @return string
+ * @private
+ */
+function rcApplyDiffStyle( $text ) {
+	$styles = array(
+		'diff'             => 'background-color: white;',
+		'diff-otitle'      => 'background-color: white;',
+		'diff-ntitle'      => 'background-color: white;',
+		'diff-addedline'   => 'background: #cfc; font-size: smaller;',
+		'diff-deletedline' => 'background: #ffa; font-size: smaller;',
+		'diff-context'     => 'background: #eee; font-size: smaller;',
+		'diffchange'       => 'color: red; font-weight: bold; text-decoration: none;',
+	);
+	
+	foreach( $styles as $class => $style ) {
+		$text = preg_replace( "/(<[^>]+)class=(['\"])$class\\2([^>]*>)/",
+			"\\1style=\"$style\"\\3", $text );
+	}
+	
+	return $text;
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/SpecialRecentchangeslinked.php
===================================================================
--- /MediaWiki/branches/1.11/includes/SpecialRecentchangeslinked.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/SpecialRecentchangeslinked.php	(revision 1280)
@@ -0,0 +1,174 @@
+<?php
+/**
+ * This is to display changes made to all articles linked in an article.
+ * @addtogroup SpecialPage
+ */
+
+/**
+ *
+ */
+require_once( 'SpecialRecentchanges.php' );
+
+/**
+ * Entrypoint
+ * @param string $par parent page we will look at
+ */
+function wfSpecialRecentchangeslinked( $par = NULL ) {
+	global $wgUser, $wgOut, $wgLang, $wgContLang, $wgRequest;
+	$fname = 'wfSpecialRecentchangeslinked';
+
+	$days = $wgRequest->getInt( 'days' );
+	$target = isset($par) ? $par : $wgRequest->getText( 'target' );
+	$hideminor = $wgRequest->getBool( 'hideminor' ) ? 1 : 0;
+
+	$wgOut->setPagetitle( wfMsg( 'recentchangeslinked' ) );
+	$sk = $wgUser->getSkin();
+
+	if (is_null($target)) {
+		$wgOut->errorpage( 'notargettitle', 'notargettext' );
+		return;
+	}
+	$nt = Title::newFromURL( $target );
+	if( !$nt ) {
+		$wgOut->errorpage( 'notargettitle', 'notargettext' );
+		return;
+	}
+	$id = $nt->getArticleId();
+
+	$wgOut->setSubtitle( htmlspecialchars( wfMsg( 'rclsub', $nt->getPrefixedText() ) ) );
+
+	if ( ! $days ) {
+		$days = (int)$wgUser->getOption( 'rcdays', 7 );
+	}
+	list( $limit, /* offset */ ) = wfCheckLimits( 100, 'rclimit' );
+
+	$dbr = wfGetDB( DB_SLAVE,'recentchangeslinked' );
+	$cutoff = $dbr->timestamp( time() - ( $days * 86400 ) );
+
+	$hideminor = ($hideminor ? 1 : 0);
+	if ( $hideminor ) {
+		$mlink = $sk->makeKnownLink( $wgContLang->specialPage( 'Recentchangeslinked' ),
+	  	  wfMsg( 'show' ), 'target=' . htmlspecialchars( $nt->getPrefixedURL() ) .
+		  "&days={$days}&limit={$limit}&hideminor=0" );
+	} else {
+		$mlink = $sk->makeKnownLink( $wgContLang->specialPage( "Recentchangeslinked" ),
+	  	  wfMsg( "hide" ), "target=" . htmlspecialchars( $nt->getPrefixedURL() ) .
+		  "&days={$days}&limit={$limit}&hideminor=1" );
+	}
+	if ( $hideminor ) {
+		$cmq = 'AND rc_minor=0';
+	} else { $cmq = ''; }
+
+	list($recentchanges, $categorylinks, $pagelinks, $watchlist) = 
+	    $dbr->tableNamesN( 'recentchanges', 'categorylinks', 'pagelinks', "watchlist" );
+
+	$uid = $wgUser->getID();
+
+	$GROUPBY = "
+	GROUP BY rc_cur_id,rc_namespace,rc_title,
+		rc_user,rc_comment,rc_user_text,rc_timestamp,rc_minor,rc_deleted,
+		rc_new, rc_id, rc_this_oldid, rc_last_oldid, rc_bot, rc_patrolled, rc_type, rc_old_len, rc_new_len
+" . ($uid ? ",wl_user" : "") . "
+		ORDER BY rc_timestamp DESC
+	LIMIT {$limit}";
+
+	// If target is a Category, use categorylinks and invert from and to
+	if( $nt->getNamespace() == NS_CATEGORY ) {
+		$catkey = $dbr->addQuotes( $nt->getDBKey() );
+		$sql = "SELECT /* wfSpecialRecentchangeslinked */
+				rc_id,
+				rc_cur_id,
+				rc_namespace,
+				rc_title,
+				rc_this_oldid,
+				rc_last_oldid,
+				rc_user,
+				rc_comment,
+				rc_user_text,
+				rc_timestamp,
+				rc_minor,
+				rc_bot,
+				rc_new,
+				rc_patrolled,
+				rc_type,
+				rc_old_len,
+				rc_new_len,
+				rc_deleted
+" . ($uid ? ",wl_user" : "") . "
+	    FROM $categorylinks, $recentchanges
+" . ($uid ? "LEFT OUTER JOIN $watchlist ON wl_user={$uid} AND wl_title=rc_title AND wl_namespace=rc_namespace " : "") . "
+	   WHERE rc_timestamp > '{$cutoff}'
+	     {$cmq}
+	     AND cl_from=rc_cur_id
+	     AND cl_to=$catkey
+$GROUPBY
+ ";
+	} else {
+		$sql =
+"SELECT /* wfSpecialRecentchangeslinked */
+			rc_id,
+			rc_cur_id,
+			rc_namespace,
+			rc_title,
+			rc_user,
+			rc_comment,
+			rc_user_text,
+			rc_this_oldid,
+			rc_last_oldid,
+			rc_timestamp,
+			rc_minor,
+			rc_bot,
+			rc_new,
+			rc_patrolled,
+			rc_type,
+			rc_old_len,
+			rc_new_len,
+			rc_deleted
+" . ($uid ? ",wl_user" : "") . "
+   FROM $pagelinks, $recentchanges
+" . ($uid ? " LEFT OUTER JOIN $watchlist ON wl_user={$uid} AND wl_title=rc_title AND wl_namespace=rc_namespace " : "") . "
+   WHERE rc_timestamp > '{$cutoff}'
+	{$cmq}
+     AND pl_namespace=rc_namespace
+     AND pl_title=rc_title
+     AND pl_from=$id
+$GROUPBY
+";
+	}
+	$res = $dbr->query( $sql, $fname );
+
+	$wgOut->addHTML("&lt; ".$sk->makeLinkObj($nt, "", "redirect=no" )."<br />\n");
+	$note = wfMsgExt( "rcnote", array ( 'parseinline' ), $limit, $days, $wgLang->timeAndDate( wfTimestampNow(), true ) );
+	$wgOut->addHTML( "<hr />\n{$note}\n<br />" );
+
+	$note = rcDayLimitlinks( $days, $limit, "Recentchangeslinked",
+				 "target=" . $nt->getPrefixedURL() . "&hideminor={$hideminor}",
+				 false, $mlink );
+
+	$wgOut->addHTML( $note."\n" );
+
+	$list = ChangesList::newFromUser( $wgUser );
+	$s = $list->beginRecentChangesList();
+	$count = $dbr->numRows( $res );
+
+	if ( $count ) {
+		$counter = 1;
+		while ( $limit ) {
+			if ( 0 == $count ) { break; }
+			$obj = $dbr->fetchObject( $res );
+			--$count;
+			$rc = RecentChange::newFromRow( $obj );
+			$rc->counter = $counter++;
+			$s .= $list->recentChangesLine( $rc , !empty( $obj->wl_user) );
+			--$limit;
+		}
+	} else {
+		$wgOut->addWikiText( wfMsg('recentchangeslinked-noresult') );
+	}
+	$s .= $list->endRecentChangesList();
+
+	$dbr->freeResult( $res );
+	$wgOut->addHTML( $s );
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/SpecialResetpass.php
===================================================================
--- /MediaWiki/branches/1.11/includes/SpecialResetpass.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/SpecialResetpass.php	(revision 1280)
@@ -0,0 +1,163 @@
+<?php
+
+/** Constructor */
+function wfSpecialResetpass( $par ) {
+	$form = new PasswordResetForm();
+	$form->execute( $par );
+}
+
+/**
+ * Let users recover their password.
+ * @addtogroup SpecialPage
+ */
+class PasswordResetForm extends SpecialPage {
+	function __construct( $name=null, $reset=null ) {
+		if( $name !== null ) {
+			$this->mName = $name;
+			$this->mTemporaryPassword = $reset;
+		} else {
+			global $wgRequest;
+			$this->mName = $wgRequest->getVal( 'wpName' );
+			$this->mTemporaryPassword = $wgRequest->getVal( 'wpPassword' );
+		}
+	}
+	
+	/**
+	 * Main execution point
+	 */
+	function execute( $par='' ) {
+		global $wgUser, $wgAuth, $wgOut, $wgRequest;
+		
+		if( !$wgAuth->allowPasswordChange() ) {
+			$this->error( wfMsg( 'resetpass_forbidden' ) );
+			return;
+		}
+		
+		if( $this->mName === null && !$wgRequest->wasPosted() ) {
+			$this->error( wfMsg( 'resetpass_missing' ) );
+			return;
+		}
+
+		if( $wgRequest->wasPosted() && $wgUser->matchEditToken( $wgRequest->getVal( 'token' ) ) ) {
+			$newpass = $wgRequest->getVal( 'wpNewPassword' );
+			$retype = $wgRequest->getVal( 'wpRetype' );
+			try {
+				$this->attemptReset( $newpass, $retype );
+				$wgOut->addWikiText( wfMsg( 'resetpass_success' ) );
+				
+				$data = array(
+					'action' => 'submitlogin',
+					'wpName' => $this->mName,
+					'wpPassword' => $newpass,
+					'returnto' => $wgRequest->getVal( 'returnto' ),
+				);
+				if( $wgRequest->getCheck( 'wpRemember' ) ) {
+					$data['wpRemember'] = 1;
+				}
+				$login = new LoginForm( new FauxRequest( $data, true ) );
+				$login->execute();
+				
+				return;
+			} catch( PasswordError $e ) {
+				$this->error( $e->getMessage() );
+			}
+		}
+		$this->showForm();
+	}
+	
+	function error( $msg ) {
+		global $wgOut;
+		$wgOut->addHtml( '<div class="errorbox">' .
+			htmlspecialchars( $msg ) .
+			'</div>' );
+	}
+	
+	function showForm() {
+		global $wgOut, $wgUser, $wgRequest;
+		
+		$self = SpecialPage::getTitleFor( 'Resetpass' );		
+		$form  =
+			'<div id="userloginForm">' .
+			wfOpenElement( 'form',
+				array(
+					'method' => 'post',
+					'action' => $self->getLocalUrl() ) ) .
+			'<h2>' . wfMsgHtml( 'resetpass_header' ) . '</h2>' .
+			'<div id="userloginprompt">' .
+			wfMsgExt( 'resetpass_text', array( 'parse' ) ) .
+			'</div>' .
+			'<table>' .
+			wfHidden( 'token', $wgUser->editToken() ) .
+			wfHidden( 'wpName', $this->mName ) .
+			wfHidden( 'wpPassword', $this->mTemporaryPassword ) .
+			wfHidden( 'returnto', $wgRequest->getVal( 'returnto' ) ) .
+			$this->pretty( array(
+				array( 'wpName', 'username', 'text', $this->mName ),
+				array( 'wpNewPassword', 'newpassword', 'password', '' ),
+				array( 'wpRetype', 'yourpasswordagain', 'password', '' ),
+			) ) .
+			'<tr>' .
+				'<td></td>' .
+				'<td>' .
+					Xml::checkLabel( wfMsg( 'remembermypassword' ),
+						'wpRemember', 'wpRemember',
+						$wgRequest->getCheck( 'wpRemember' ) ) .
+				'</td>' .
+			'</tr>' .
+			'<tr>' .
+				'<td></td>' .
+				'<td>' .
+					wfSubmitButton( wfMsgHtml( 'resetpass_submit' ) ) .
+				'</td>' .
+			'</tr>' .
+			'</table>' .
+			wfCloseElement( 'form' ) .
+			'</div>';
+		$wgOut->addHtml( $form );
+	}
+	
+	function pretty( $fields ) {
+		$out = '';
+		foreach( $fields as $list ) {
+			list( $name, $label, $type, $value ) = $list;
+			if( $type == 'text' ) {
+				$field = '<tt>' . htmlspecialchars( $value ) . '</tt>';
+			} else {
+				$field = Xml::input( $name, 20, $value,
+					array( 'id' => $name, 'type' => $type ) );
+			}
+			$out .= '<tr>';
+			$out .= '<td align="right">';
+			$out .= Xml::label( wfMsg( $label ), $name );
+			$out .= '</td>';
+			$out .= '<td>';
+			$out .= $field;
+			$out .= '</td>';
+			$out .= '</tr>';
+		}
+		return $out;
+	}
+	
+	/**
+	 * @throws PasswordError when cannot set the new password because requirements not met.
+	 */
+	function attemptReset( $newpass, $retype ) {
+		$user = User::newFromName( $this->mName );
+		if( $user->isAnon() ) {
+			throw new PasswordError( 'no such user' );
+		}
+		
+		if( !$user->checkTemporaryPassword( $this->mTemporaryPassword ) ) {
+			throw new PasswordError( wfMsg( 'resetpass_bad_temporary' ) );
+		}
+		
+		if( $newpass !== $retype ) {
+			throw new PasswordError( wfMsg( 'badretype' ) );
+		}
+		
+		$user->setPassword( $newpass );
+		$user->saveSettings();
+	}
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/SpecialRevisiondelete.php
===================================================================
--- /MediaWiki/branches/1.11/includes/SpecialRevisiondelete.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/SpecialRevisiondelete.php	(revision 1280)
@@ -0,0 +1,275 @@
+<?php
+
+/**
+ * Not quite ready for production use yet; need to fix up the restricted mode,
+ * and provide for preservation across delete/undelete of the page.
+ *
+ * To try this out, set up extra permissions something like:
+ * $wgGroupPermissions['sysop']['deleterevision'] = true;
+ * $wgGroupPermissions['bureaucrat']['hiderevision'] = true;
+ */
+
+function wfSpecialRevisiondelete( $par = null ) {
+	global $wgOut, $wgRequest;
+	
+	$target = $wgRequest->getVal( 'target' );
+	$oldid = $wgRequest->getIntArray( 'oldid' );
+	
+	$page = Title::newFromUrl( $target );
+	
+	if( is_null( $page ) ) {
+		$wgOut->showErrorPage( 'notargettitle', 'notargettext' );
+		return;
+	}
+	
+	if( is_null( $oldid ) ) {
+		$wgOut->showErrorPage( 'revdelete-nooldid-title', 'revdelete-nooldid-text' );
+		return;
+	}
+	
+	$form = new RevisionDeleteForm( $wgRequest );
+	if( $wgRequest->wasPosted() ) {
+		$form->submit( $wgRequest );
+	} else {
+		$form->show( $wgRequest );
+	}
+}
+
+/**
+ * Implements the GUI for Revision Deletion.
+ * @addtogroup SpecialPage
+ */
+class RevisionDeleteForm {
+	/**
+	 * @param Title $page
+	 * @param int $oldid
+	 */
+	function __construct( $request ) {
+		global $wgUser;
+		
+		$target = $request->getVal( 'target' );
+		$this->page = Title::newFromUrl( $target );
+		
+		$this->revisions = $request->getIntArray( 'oldid', array() );
+		
+		$this->skin = $wgUser->getSkin();
+		$this->checks = array(
+			array( 'revdelete-hide-text', 'wpHideText', Revision::DELETED_TEXT ),
+			array( 'revdelete-hide-comment', 'wpHideComment', Revision::DELETED_COMMENT ),
+			array( 'revdelete-hide-user', 'wpHideUser', Revision::DELETED_USER ),
+			array( 'revdelete-hide-restricted', 'wpHideRestricted', Revision::DELETED_RESTRICTED ) );
+	}
+	
+	/**
+	 * @param WebRequest $request
+	 */
+	function show( $request ) {
+		global $wgOut, $wgUser;
+
+		$wgOut->addWikiText( wfMsg( 'revdelete-selected', $this->page->getPrefixedText() ) );
+		
+		$wgOut->addHtml( "<ul>" );
+		foreach( $this->revisions as $revid ) {
+			$rev = Revision::newFromTitle( $this->page, $revid );
+			if( !isset( $rev ) ) {
+				$wgOut->showErrorPage( 'revdelete-nooldid-title', 'revdelete-nooldid-text' );
+				return;
+			}
+			$wgOut->addHtml( $this->historyLine( $rev ) );
+			$bitfields[] = $rev->mDeleted; // FIXME
+		}
+		$wgOut->addHtml( "</ul>" );
+	
+		$wgOut->addWikiText( wfMsg( 'revdelete-text' ) );
+		
+		$items = array(
+			wfInputLabel( wfMsg( 'revdelete-log' ), 'wpReason', 'wpReason', 60 ),
+			wfSubmitButton( wfMsg( 'revdelete-submit' ) ) );
+		$hidden = array(
+			wfHidden( 'wpEditToken', $wgUser->editToken() ),
+			wfHidden( 'target', $this->page->getPrefixedText() ) );
+		foreach( $this->revisions as $revid ) {
+			$hidden[] = wfHidden( 'oldid[]', $revid );
+		}
+		
+		$special = SpecialPage::getTitleFor( 'Revisiondelete' );
+		$wgOut->addHtml( wfElement( 'form', array(
+			'method' => 'post',
+			'action' => $special->getLocalUrl( 'action=submit' ) ),
+			null ) );
+		
+		$wgOut->addHtml( '<fieldset><legend>' . wfMsgHtml( 'revdelete-legend' ) . '</legend>' );
+		foreach( $this->checks as $item ) {
+			list( $message, $name, $field ) = $item;
+			$wgOut->addHtml( '<div>' .
+				wfCheckLabel( wfMsg( $message), $name, $name, $rev->isDeleted( $field ) ) .
+				'</div>' );
+		}
+		$wgOut->addHtml( '</fieldset>' );
+		foreach( $items as $item ) {
+			$wgOut->addHtml( '<p>' . $item . '</p>' );
+		}
+		foreach( $hidden as $item ) {
+			$wgOut->addHtml( $item );
+		}
+		
+		$wgOut->addHtml( '</form>' );
+	}
+	
+	/**
+	 * @param Revision $rev
+	 * @returns string
+	 */
+	function historyLine( $rev ) {
+		global $wgContLang;
+		$date = $wgContLang->timeanddate( $rev->getTimestamp() );
+		return
+			"<li>" .
+			$this->skin->makeLinkObj( $this->page, $date, 'oldid=' . $rev->getId() ) .
+			" " .
+			$this->skin->revUserLink( $rev ) .
+			" " .
+			$this->skin->revComment( $rev ) .
+			"</li>";
+	}
+	
+	/**
+	 * @param WebRequest $request
+	 */
+	function submit( $request ) {
+		$bitfield = $this->extractBitfield( $request );
+		$comment = $request->getText( 'wpReason' );
+		if( $this->save( $bitfield, $comment ) ) {
+			return $this->success( $request );
+		} else {
+			return $this->show( $request );
+		}
+	}
+	
+	function success( $request ) {
+		global $wgOut;
+		$wgOut->addWikiText( 'woo' );
+	}
+	
+	/**
+	 * Put together a rev_deleted bitfield from the submitted checkboxes
+	 * @param WebRequest $request
+	 * @return int
+	 */
+	function extractBitfield( $request ) {
+		$bitfield = 0;
+		foreach( $this->checks as $item ) {
+			list( /* message */ , $name, $field ) = $item;
+			if( $request->getCheck( $name ) ) {
+				$bitfield |= $field;
+			}
+		}
+		return $bitfield;
+	}
+	
+	function save( $bitfield, $reason ) {
+		$dbw = wfGetDB( DB_MASTER );
+		$deleter = new RevisionDeleter( $dbw );
+		$deleter->setVisibility( $this->revisions, $bitfield, $reason );
+	}
+}
+
+/**
+ * Implements the actions for Revision Deletion.
+ * @addtogroup SpecialPage
+ */
+class RevisionDeleter {
+	function __construct( $db ) {
+		$this->db = $db;
+	}
+	
+	/**
+	 * @param array $items list of revision ID numbers
+	 * @param int $bitfield new rev_deleted value
+	 * @param string $comment Comment for log records
+	 */
+	function setVisibility( $items, $bitfield, $comment ) {
+		$pages = array();
+		
+		// To work!
+		foreach( $items as $revid ) {
+			$rev = Revision::newFromId( $revid );
+			if( !isset( $rev ) ) {
+				return false;
+			}
+			$this->updateRevision( $rev, $bitfield );
+			$this->updateRecentChanges( $rev, $bitfield );
+			
+			// For logging, maintain a count of revisions per page
+			$pageid = $rev->getPage();
+			if( isset( $pages[$pageid] ) ) {
+				$pages[$pageid]++;
+			} else {
+				$pages[$pageid] = 1;
+			}
+		}
+		
+		// Clear caches...
+		foreach( $pages as $pageid => $count ) {
+			$title = Title::newFromId( $pageid );
+			$this->updatePage( $title );
+			$this->updateLog( $title, $count, $bitfield, $comment );
+		}
+		
+		return true;
+	}
+	
+	/**
+	 * Update the revision's rev_deleted field
+	 * @param Revision $rev
+	 * @param int $bitfield new rev_deleted bitfield value
+	 */
+	function updateRevision( $rev, $bitfield ) {
+		$this->db->update( 'revision',
+			array( 'rev_deleted' => $bitfield ),
+			array( 'rev_id' => $rev->getId() ),
+			'RevisionDeleter::updateRevision' );
+	}
+	
+	/**
+	 * Update the revision's recentchanges record if fields have been hidden
+	 * @param Revision $rev
+	 * @param int $bitfield new rev_deleted bitfield value
+	 */
+	function updateRecentChanges( $rev, $bitfield ) {
+		$this->db->update( 'recentchanges',
+			array(
+				'rc_user' => ($bitfield & Revision::DELETED_USER) ? 0 : $rev->getUser(),
+				'rc_user_text' => ($bitfield & Revision::DELETED_USER) ? wfMsg( 'rev-deleted-user' ) : $rev->getUserText(),
+				'rc_comment' => ($bitfield & Revision::DELETED_COMMENT) ? wfMsg( 'rev-deleted-comment' ) : $rev->getComment() ),
+			array(
+				'rc_this_oldid' => $rev->getId() ),
+			'RevisionDeleter::updateRecentChanges' );
+	}
+	
+	/**
+	 * Touch the page's cache invalidation timestamp; this forces cached
+	 * history views to refresh, so any newly hidden or shown fields will
+	 * update properly.
+	 * @param Title $title
+	 */
+	function updatePage( $title ) {
+		$title->invalidateCache();
+	}
+	
+	/**
+	 * Record a log entry on the action
+	 * @param Title $title
+	 * @param int $count the number of revisions altered for this page
+	 * @param int $bitfield the new rev_deleted value
+	 * @param string $comment
+	 */
+	function updateLog( $title, $count, $bitfield, $comment ) {
+		$log = new LogPage( 'delete' );
+		$reason = "changed $count revisions to $bitfield";
+		$reason .= ": $comment";
+		$log->addEntry( 'revision', $title, $reason );
+	}
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/SpecialSearch.php
===================================================================
--- /MediaWiki/branches/1.11/includes/SpecialSearch.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/SpecialSearch.php	(revision 1280)
@@ -0,0 +1,406 @@
+<?php
+# Copyright (C) 2004 Brion Vibber <brion@pobox.com>
+# http://www.mediawiki.org/
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+# http://www.gnu.org/copyleft/gpl.html
+
+/**
+ * Run text & title search and display the output
+ * @addtogroup SpecialPage
+ */
+
+/**
+ * Entry point
+ *
+ * @param $par String: (default '')
+ */
+function wfSpecialSearch( $par = '' ) {
+	global $wgRequest, $wgUser;
+
+	$search = $wgRequest->getText( 'search', $par );
+	$searchPage = new SpecialSearch( $wgRequest, $wgUser );
+	if( $wgRequest->getVal( 'fulltext' ) ||
+		!is_null( $wgRequest->getVal( 'offset' ) ) ||
+		!is_null ($wgRequest->getVal( 'searchx' ) ) ) {
+		$searchPage->showResults( $search );
+	} else {
+		$searchPage->goResult( $search );
+	}
+}
+
+/**
+ * implements Special:Search - Run text & title search and display the output
+ * @addtogroup SpecialPage
+ */
+class SpecialSearch {
+
+	/**
+	 * Set up basic search parameters from the request and user settings.
+	 * Typically you'll pass $wgRequest and $wgUser.
+	 *
+	 * @param WebRequest $request
+	 * @param User $user
+	 * @public
+	 */
+	function SpecialSearch( &$request, &$user ) {
+		list( $this->limit, $this->offset ) = $request->getLimitOffset( 20, 'searchlimit' );
+
+		if( $request->getCheck( 'searchx' ) ) {
+			$this->namespaces = $this->powerSearch( $request );
+		} else {
+			$this->namespaces = $this->userNamespaces( $user );
+		}
+
+		$this->searchRedirects = $request->getcheck( 'redirs' ) ? true : false;
+	}
+
+	/**
+	 * If an exact title match can be found, jump straight ahead to it.
+	 * @param string $term
+	 * @public
+	 */
+	function goResult( $term ) {
+		global $wgOut;
+		global $wgGoToEdit;
+
+		$this->setupPage( $term );
+
+		# Try to go to page as entered.
+		$t = Title::newFromText( $term );
+
+		# If the string cannot be used to create a title
+		if( is_null( $t ) ){
+			return $this->showResults( $term );
+		}
+
+		# If there's an exact or very near match, jump right there.
+		$t = SearchEngine::getNearMatch( $term );
+		if( !is_null( $t ) ) {
+			$wgOut->redirect( $t->getFullURL() );
+			return;
+		}
+
+		# No match, generate an edit URL
+		$t = Title::newFromText( $term );
+		if( ! is_null( $t ) ) {
+			wfRunHooks( 'SpecialSearchNogomatch', array( &$t ) );
+			# If the feature is enabled, go straight to the edit page
+			if ( $wgGoToEdit ) {
+				$wgOut->redirect( $t->getFullURL( 'action=edit' ) );
+				return;
+			} 
+		}
+		$wgOut->addWikiText( wfMsg( 'noexactmatch', wfEscapeWikiText( $term ) ) );
+
+		return $this->showResults( $term );
+	}
+
+	/**
+	 * @param string $term
+	 * @public
+	 */
+	function showResults( $term ) {
+		$fname = 'SpecialSearch::showResults';
+		wfProfileIn( $fname );
+
+		$this->setupPage( $term );
+
+		global $wgOut;
+		$wgOut->addWikiText( wfMsg( 'searchresulttext' ) );
+
+		#if ( !$this->parseQuery() ) {
+		if( '' === trim( $term ) ) {
+			$wgOut->setSubtitle( '' );
+			$wgOut->addHTML( $this->powerSearchBox( $term ) );
+			wfProfileOut( $fname );
+			return;
+		}
+
+		global $wgDisableTextSearch;
+		if ( $wgDisableTextSearch ) {
+			global $wgForwardSearchUrl;
+			if( $wgForwardSearchUrl ) {
+				$url = str_replace( '$1', urlencode( $term ), $wgForwardSearchUrl );
+				$wgOut->redirect( $url );
+				return;
+			}
+			global $wgInputEncoding;
+			$wgOut->addHTML( wfMsg( 'searchdisabled' ) );
+			$wgOut->addHTML(
+				wfMsg( 'googlesearch',
+					htmlspecialchars( $term ),
+					htmlspecialchars( $wgInputEncoding ),
+					htmlspecialchars( wfMsg( 'searchbutton' ) )
+				)
+			);
+			wfProfileOut( $fname );
+			return;
+		}
+
+		$search = SearchEngine::create();
+		$search->setLimitOffset( $this->limit, $this->offset );
+		$search->setNamespaces( $this->namespaces );
+		$search->showRedirects = $this->searchRedirects;
+		$titleMatches = $search->searchTitle( $term );
+		$textMatches = $search->searchText( $term );
+
+		$num = ( $titleMatches ? $titleMatches->numRows() : 0 )
+			+ ( $textMatches ? $textMatches->numRows() : 0);
+		if ( $num > 0 ) {
+			if ( $num >= $this->limit ) {
+				$top = wfShowingResults( $this->offset, $this->limit );
+			} else {
+				$top = wfShowingResultsNum( $this->offset, $this->limit, $num );
+			}
+			$wgOut->addHTML( "<p>{$top}</p>\n" );
+		}
+
+		if( $num || $this->offset ) {
+			$prevnext = wfViewPrevNext( $this->offset, $this->limit,
+				SpecialPage::getTitleFor( 'Search' ),
+				wfArrayToCGI(
+					$this->powerSearchOptions(),
+					array( 'search' => $term ) ) );
+			$wgOut->addHTML( "<br />{$prevnext}\n" );
+		}
+
+		if( $titleMatches ) {
+			if( $titleMatches->numRows() ) {
+				$wgOut->addWikiText( '==' . wfMsg( 'titlematches' ) . "==\n" );
+				$wgOut->addHTML( $this->showMatches( $titleMatches ) );
+			} else {
+				$wgOut->addWikiText( '==' . wfMsg( 'notitlematches' ) . "==\n" );
+			}
+		}
+
+		if( $textMatches ) {
+			if( $textMatches->numRows() ) {
+				$wgOut->addWikiText( '==' . wfMsg( 'textmatches' ) . "==\n" );
+				$wgOut->addHTML( $this->showMatches( $textMatches ) );
+			} elseif( $num == 0 ) {
+				# Don't show the 'no text matches' if we received title matches
+				$wgOut->addWikiText( '==' . wfMsg( 'notextmatches' ) . "==\n" );
+			}
+		}
+
+		if ( $num == 0 ) {
+			$wgOut->addWikiText( wfMsg( 'nonefound' ) );
+		}
+		if( $num || $this->offset ) {
+			$wgOut->addHTML( "<p>{$prevnext}</p>\n" );
+		}
+		$wgOut->addHTML( $this->powerSearchBox( $term ) );
+		wfProfileOut( $fname );
+	}
+
+	#------------------------------------------------------------------
+	# Private methods below this line
+
+	/**
+	 *
+	 */
+	function setupPage( $term ) {
+		global $wgOut;
+		$wgOut->setPageTitle( wfMsg( 'searchresults' ) );
+		$subtitlemsg = ( Title::newFromText($term) ? 'searchsubtitle' : 'searchsubtitleinvalid' );
+		$wgOut->setSubtitle( $wgOut->parse( wfMsg( $subtitlemsg, wfEscapeWikiText($term) ) ) );
+		$wgOut->setArticleRelated( false );
+		$wgOut->setRobotpolicy( 'noindex,nofollow' );
+	}
+
+	/**
+	 * Extract default namespaces to search from the given user's
+	 * settings, returning a list of index numbers.
+	 *
+	 * @param User $user
+	 * @return array
+	 * @private
+	 */
+	function userNamespaces( &$user ) {
+		$arr = array();
+		foreach( SearchEngine::searchableNamespaces() as $ns => $name ) {
+			if( $user->getOption( 'searchNs' . $ns ) ) {
+				$arr[] = $ns;
+			}
+		}
+		return $arr;
+	}
+
+	/**
+	 * Extract "power search" namespace settings from the request object,
+	 * returning a list of index numbers to search.
+	 *
+	 * @param WebRequest $request
+	 * @return array
+	 * @private
+	 */
+	function powerSearch( &$request ) {
+		$arr = array();
+		foreach( SearchEngine::searchableNamespaces() as $ns => $name ) {
+			if( $request->getCheck( 'ns' . $ns ) ) {
+				$arr[] = $ns;
+			}
+		}
+		return $arr;
+	}
+
+	/**
+	 * Reconstruct the 'power search' options for links
+	 * @return array
+	 * @private
+	 */
+	function powerSearchOptions() {
+		$opt = array();
+		foreach( $this->namespaces as $n ) {
+			$opt['ns' . $n] = 1;
+		}
+		$opt['redirs'] = $this->searchRedirects ? 1 : 0;
+		$opt['searchx'] = 1;
+		return $opt;
+	}
+
+	/**
+	 * @param SearchResultSet $matches
+	 * @param string $terms partial regexp for highlighting terms
+	 */
+	function showMatches( &$matches ) {
+		$fname = 'SpecialSearch::showMatches';
+		wfProfileIn( $fname );
+
+		global $wgContLang;
+		$tm = $wgContLang->convertForSearchResult( $matches->termMatches() );
+		$terms = implode( '|', $tm );
+
+		$off = $this->offset + 1;
+		$out = "<ol start='{$off}'>\n";
+
+		while( $result = $matches->next() ) {
+			$out .= $this->showHit( $result, $terms );
+		}
+		$out .= "</ol>\n";
+
+		// convert the whole thing to desired language variant
+		global $wgContLang;
+		$out = $wgContLang->convert( $out );
+		wfProfileOut( $fname );
+		return $out;
+	}
+
+	/**
+	 * Format a single hit result
+	 * @param SearchResult $result
+	 * @param string $terms partial regexp for highlighting terms
+	 */
+	function showHit( $result, $terms ) {
+		$fname = 'SpecialSearch::showHit';
+		wfProfileIn( $fname );
+		global $wgUser, $wgContLang, $wgLang;
+
+		$t = $result->getTitle();
+		if( is_null( $t ) ) {
+			wfProfileOut( $fname );
+			return "<!-- Broken link in search result -->\n";
+		}
+		$sk = $wgUser->getSkin();
+
+		$contextlines = $wgUser->getOption( 'contextlines',  5 );
+		$contextchars = $wgUser->getOption( 'contextchars', 50 );
+
+		$link = $sk->makeKnownLinkObj( $t );
+		$revision = Revision::newFromTitle( $t );
+		$text = $revision->getText();
+		$size = wfMsgExt( 'nbytes', array( 'parsemag', 'escape'),
+			$wgLang->formatNum( strlen( $text ) ) );
+
+		$lines = explode( "\n", $text );
+
+		$max = intval( $contextchars ) + 1;
+		$pat1 = "/(.*)($terms)(.{0,$max})/i";
+
+		$lineno = 0;
+
+		$extract = '';
+		wfProfileIn( "$fname-extract" );
+		foreach ( $lines as $line ) {
+			if ( 0 == $contextlines ) {
+				break;
+			}
+			++$lineno;
+			$m = array();
+			if ( ! preg_match( $pat1, $line, $m ) ) {
+				continue;
+			}
+			--$contextlines;
+			$pre = $wgContLang->truncate( $m[1], -$contextchars, '...' );
+
+			if ( count( $m ) < 3 ) {
+				$post = '';
+			} else {
+				$post = $wgContLang->truncate( $m[3], $contextchars, '...' );
+			}
+
+			$found = $m[2];
+
+			$line = htmlspecialchars( $pre . $found . $post );
+			$pat2 = '/(' . $terms . ")/i";
+			$line = preg_replace( $pat2,
+			  "<span class='searchmatch'>\\1</span>", $line );
+
+			$extract .= "<br /><small>{$lineno}: {$line}</small>\n";
+		}
+		wfProfileOut( "$fname-extract" );
+		wfProfileOut( $fname );
+		return "<li>{$link} ({$size}){$extract}</li>\n";
+	}
+
+	function powerSearchBox( $term ) {
+		$namespaces = '';
+		foreach( SearchEngine::searchableNamespaces() as $ns => $name ) {
+			$checked = in_array( $ns, $this->namespaces )
+				? ' checked="checked"'
+				: '';
+			$name = str_replace( '_', ' ', $name );
+			if( '' == $name ) {
+				$name = wfMsg( 'blanknamespace' );
+			}
+			$namespaces .= " <label><input type='checkbox' value=\"1\" name=\"" .
+			  "ns{$ns}\"{$checked} />{$name}</label>\n";
+		}
+
+		$checked = $this->searchRedirects
+			? ' checked="checked"'
+			: '';
+		$redirect = "<input type='checkbox' value='1' name=\"redirs\"{$checked} />\n";
+
+		$searchField = '<input type="text" name="search" value="' .
+			htmlspecialchars( $term ) ."\" size=\"16\" />\n";
+
+		$searchButton = '<input type="submit" name="searchx" value="' .
+		  htmlspecialchars( wfMsg('powersearch') ) . "\" />\n";
+
+		$ret = wfMsg( 'powersearchtext',
+			$namespaces, $redirect, $searchField,
+			'', '', '', '', '', # Dummy placeholders
+			$searchButton );
+
+		$title = SpecialPage::getTitleFor( 'Search' );
+		$action = $title->escapeLocalURL();
+		return "<br /><br />\n<form id=\"powersearch\" method=\"get\" " .
+		  "action=\"$action\">\n{$ret}\n</form>\n";
+	}
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/SpecialShortpages.php
===================================================================
--- /MediaWiki/branches/1.11/includes/SpecialShortpages.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/SpecialShortpages.php	(revision 1280)
@@ -0,0 +1,92 @@
+<?php
+/**
+ *
+ * @addtogroup SpecialPage
+ */
+
+/**
+ * SpecialShortpages extends QueryPage. It is used to return the shortest
+ * pages in the database.
+ * @addtogroup SpecialPage
+ */
+class ShortPagesPage extends QueryPage {
+
+	function getName() {
+		return "Shortpages";
+	}
+
+	/**
+	 * This query is indexed as of 1.5
+	 */
+	function isExpensive() {
+		return true;
+	}
+
+	function isSyndicated() {
+		return false;
+	}
+
+	function getSQL() {
+		$dbr = wfGetDB( DB_SLAVE );
+		$page = $dbr->tableName( 'page' );
+		$name = $dbr->addQuotes( $this->getName() );
+
+		$forceindex = $dbr->useIndexClause("page_len");
+		return
+			"SELECT $name as type,
+				page_namespace as namespace,
+			        page_title as title,
+			        page_len AS value
+			FROM $page $forceindex
+			WHERE page_namespace=".NS_MAIN." AND page_is_redirect=0";
+	}
+
+	function preprocessResults( &$db, &$res ) {
+		# There's no point doing a batch check if we aren't caching results;
+		# the page must exist for it to have been pulled out of the table
+		if( $this->isCached() ) {
+			$batch = new LinkBatch();
+			while( $row = $db->fetchObject( $res ) )
+				$batch->addObj( Title::makeTitleSafe( $row->namespace, $row->title ) );
+			$batch->execute();
+			if( $db->numRows( $res ) > 0 )
+				$db->dataSeek( $res, 0 );
+		}
+	}
+
+	function sortDescending() {
+		return false;
+	}
+
+	function formatResult( $skin, $result ) {
+		global $wgLang, $wgContLang;
+		$dm = $wgContLang->getDirMark();
+		
+		$title = Title::makeTitleSafe( $result->namespace, $result->title );
+		if ( !$title ) {
+			return '<!-- Invalid title ' .  htmlspecialchars( "{$result->namespace}:{$result->title}" ). '-->';
+		}
+		$hlink = $skin->makeKnownLinkObj( $title, wfMsgHtml( 'hist' ), 'action=history' );
+		$plink = $this->isCached()
+					? $skin->makeLinkObj( $title )
+					: $skin->makeKnownLinkObj( $title );
+		$size = wfMsgExt( 'nbytes', array( 'parsemag', 'escape' ), $wgLang->formatNum( htmlspecialchars( $result->value ) ) );
+		
+		return $title->exists()
+				? "({$hlink}) {$dm}{$plink} {$dm}[{$size}]"
+				: "<s>({$hlink}) {$dm}{$plink} {$dm}[{$size}]</s>";
+	}
+}
+
+/**
+ * constructor
+ */
+function wfSpecialShortpages() {
+	list( $limit, $offset ) = wfCheckLimits();
+
+	$spp = new ShortPagesPage();
+
+	return $spp->doQuery( $offset, $limit );
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/SpecialSpecialpages.php
===================================================================
--- /MediaWiki/branches/1.11/includes/SpecialSpecialpages.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/SpecialSpecialpages.php	(revision 1280)
@@ -0,0 +1,59 @@
+<?php
+/**
+ *
+ * @addtogroup SpecialPage
+ */
+
+/**
+ *
+ */
+function wfSpecialSpecialpages() {
+	global $wgOut, $wgUser;
+
+	$wgOut->setRobotpolicy( 'index,nofollow' );
+	$sk = $wgUser->getSkin();
+
+	/** Pages available to all */
+	wfSpecialSpecialpages_gen( SpecialPage::getRegularPages(), 'spheading', $sk );
+
+	/** Restricted special pages */
+	wfSpecialSpecialpages_gen( SpecialPage::getRestrictedPages(), 'restrictedpheading', $sk );
+}
+
+/**
+ * sub function generating the list of pages
+ * @param $pages the list of pages
+ * @param $heading header to be used
+ * @param $sk skin object ???
+ */
+function wfSpecialSpecialpages_gen($pages,$heading,$sk) {
+	global $wgOut, $wgSortSpecialPages;
+
+	if( count( $pages ) == 0 ) {
+		# Yeah, that was pointless. Thanks for coming.
+		return;
+	}
+
+	/** Put them into a sortable array */
+	$sortedPages = array();
+	foreach ( $pages as $page ) {
+		if ( $page->isListed() ) {
+			$sortedPages[$page->getDescription()] = $page->getTitle();
+		}
+	}
+
+	/** Sort */
+	if ( $wgSortSpecialPages ) {
+		ksort( $sortedPages );
+	}
+
+	/** Now output the HTML */
+	$wgOut->addHTML( '<h2>' . wfMsgHtml( $heading ) . "</h2>\n<ul>" );
+	foreach ( $sortedPages as $desc => $title ) {
+		$link = $sk->makeKnownLinkObj( $title , htmlspecialchars( $desc ) );
+		$wgOut->addHTML( "<li>{$link}</li>\n" );
+	}
+	$wgOut->addHTML( "</ul>\n" );
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/SpecialStatistics.php
===================================================================
--- /MediaWiki/branches/1.11/includes/SpecialStatistics.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/SpecialStatistics.php	(revision 1280)
@@ -0,0 +1,84 @@
+<?php
+/**
+*
+* @addtogroup SpecialPage
+*/
+
+/**
+* constructor
+*/
+function wfSpecialStatistics() {
+	global $wgOut, $wgLang, $wgRequest;
+	$fname = 'wfSpecialStatistics';
+
+	$action = $wgRequest->getVal( 'action' );
+
+	$dbr = wfGetDB( DB_SLAVE );
+
+	$views = SiteStats::views();
+	$edits = SiteStats::edits();
+	$good = SiteStats::articles();
+	$images = SiteStats::images();
+	$total = SiteStats::pages();
+	$users = SiteStats::users();
+
+	$admins = $dbr->selectField( 'user_groups', 'COUNT(*)', array( 'ug_group' => 'sysop' ), $fname );
+	$numJobs = $dbr->estimateRowCount('job');
+
+	if ($action == 'raw') {
+		$wgOut->disable();
+		header( 'Pragma: nocache' );
+		echo "total=$total;good=$good;views=$views;edits=$edits;users=$users;admins=$admins;images=$images;jobs=$numJobs\n";
+		return;
+	} else {
+		$text = '==' . wfMsg( 'sitestats' ) . "==\n" ;
+		$text .= wfMsgExt( 'sitestatstext', array ( 'parsemag' ),
+			$wgLang->formatNum( $total ),
+			$wgLang->formatNum( $good ),
+			$wgLang->formatNum( $views ),
+			$wgLang->formatNum( $edits ),
+			$wgLang->formatNum( sprintf( '%.2f', $total ? $edits / $total : 0 ) ),
+			$wgLang->formatNum( sprintf( '%.2f', $edits ? $views / $edits : 0 ) ),
+			$wgLang->formatNum( $numJobs ),
+			$wgLang->formatNum( $images )
+	   	);
+
+		$text .= "\n==" . wfMsg( 'userstats' ) . "==\n";
+
+		$text .= wfMsgExt( 'userstatstext', array ( 'parsemag' ),
+			$wgLang->formatNum( $users ),
+			$wgLang->formatNum( $admins ),
+			'[[' . wfMsgForContent( 'grouppage-sysop' ) . ']]', # TODO somehow remove, kept for backwards compatibility
+			$wgLang->formatNum( sprintf( '%.2f', $admins / $users * 100 ) ),
+			User::makeGroupLinkWiki( 'sysop' )
+		);
+
+		$wgOut->addWikiText( $text );
+
+		global $wgDisableCounters, $wgMiserMode, $wgUser, $wgLang, $wgContLang;
+		if( !$wgDisableCounters && !$wgMiserMode ) {
+			$page = $dbr->tableName( 'page' );
+			$sql = "SELECT page_namespace, page_title, page_counter FROM {$page} WHERE page_is_redirect = 0 AND page_counter > 0 ORDER BY page_counter DESC";
+			$sql = $dbr->limitResult($sql, 10, 0);
+			$res = $dbr->query( $sql, $fname );
+			if( $res ) {
+				$wgOut->addHtml( '<h2>' . wfMsgHtml( 'statistics-mostpopular' ) . '</h2>' );
+				$skin = $wgUser->getSkin();
+				$wgOut->addHtml( '<ol>' );
+				while( $row = $dbr->fetchObject( $res ) ) {
+					$link = $skin->makeKnownLinkObj( Title::makeTitleSafe( $row->page_namespace, $row->page_title ) );
+					$dirmark = $wgContLang->getDirMark();
+					$wgOut->addHtml( '<li>' . $link . $dirmark . ' [' . $wgLang->formatNum( $row->page_counter ) . ']</li>' );
+				}
+				$wgOut->addHtml( '</ol>' );
+				$dbr->freeResult( $res );
+			}
+		}
+		
+		$footer = wfMsg( 'statistics-footer' );
+		if( !wfEmptyMsg( 'statistics-footer', $footer ) && $footer != '' )
+			$wgOut->addWikiText( $footer );
+		
+	}
+}
+?>
Index: /MediaWiki/branches/1.11/includes/SpecialUncategorizedcategories.php
===================================================================
--- /MediaWiki/branches/1.11/includes/SpecialUncategorizedcategories.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/SpecialUncategorizedcategories.php	(revision 1280)
@@ -0,0 +1,37 @@
+<?php
+/**
+ *
+ * @addtogroup SpecialPage
+ */
+
+/**
+ *
+ */
+require_once( "SpecialUncategorizedpages.php" );
+
+/**
+ * implements Special:Uncategorizedcategories
+ * @addtogroup SpecialPage
+ */
+class UncategorizedCategoriesPage extends UncategorizedPagesPage {
+	function UncategorizedCategoriesPage() {
+		$this->requestedNamespace = NS_CATEGORY;
+	}
+
+	function getName() {
+		return "Uncategorizedcategories";
+	}
+}
+
+/**
+ * constructor
+ */
+function wfSpecialUncategorizedcategories() {
+	list( $limit, $offset ) = wfCheckLimits();
+
+	$lpp = new UncategorizedCategoriesPage();
+
+	return $lpp->doQuery( $offset, $limit );
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/SpecialUncategorizedimages.php
===================================================================
--- /MediaWiki/branches/1.11/includes/SpecialUncategorizedimages.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/SpecialUncategorizedimages.php	(revision 1280)
@@ -0,0 +1,47 @@
+<?php
+
+/**
+ * Special page lists images which haven't been categorised
+ *
+ * @addtogroup SpecialPage
+ * @author Rob Church <robchur@gmail.com>
+ */
+
+class UncategorizedImagesPage extends ImageQueryPage {
+
+	function getName() {
+		return 'Uncategorizedimages';
+	}
+
+	function sortDescending() {
+		return false;
+	}
+
+	function isExpensive() {
+		return true;
+	}
+
+	function isSyndicated() {
+		return false;
+	}
+
+	function getSQL() {
+		$dbr = wfGetDB( DB_SLAVE );
+		list( $page, $categorylinks ) = $dbr->tableNamesN( 'page', 'categorylinks' );
+		$ns = NS_IMAGE;
+
+		return "SELECT 'Uncategorizedimages' AS type, page_namespace AS namespace,
+				page_title AS title, page_title AS value
+				FROM {$page} LEFT JOIN {$categorylinks} ON page_id = cl_from
+				WHERE cl_from IS NULL AND page_namespace = {$ns} AND page_is_redirect = 0";
+	}
+
+}
+
+function wfSpecialUncategorizedimages() {
+	$uip = new UncategorizedImagesPage();
+	list( $limit, $offset ) = wfCheckLimits();
+	return $uip->doQuery( $offset, $limit );
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/SpecialUncategorizedpages.php
===================================================================
--- /MediaWiki/branches/1.11/includes/SpecialUncategorizedpages.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/SpecialUncategorizedpages.php	(revision 1280)
@@ -0,0 +1,57 @@
+<?php
+/**
+ *
+ * @addtogroup SpecialPage
+ */
+
+/**
+ * A special page looking for page without any category.
+ * @addtogroup SpecialPage
+ */
+class UncategorizedPagesPage extends PageQueryPage {
+	var $requestedNamespace = NS_MAIN;
+
+	function getName() {
+		return "Uncategorizedpages";
+	}
+
+	function sortDescending() {
+		return false;
+	}
+
+	function isExpensive() {
+		return true;
+	}
+	function isSyndicated() { return false; }
+
+	function getSQL() {
+		$dbr = wfGetDB( DB_SLAVE );
+		list( $page, $categorylinks ) = $dbr->tableNamesN( 'page', 'categorylinks' );
+		$name = $dbr->addQuotes( $this->getName() );
+
+		return
+			"
+			SELECT
+				$name as type,
+				page_namespace AS namespace,
+				page_title AS title,
+				page_title AS value
+			FROM $page
+			LEFT JOIN $categorylinks ON page_id=cl_from
+			WHERE cl_from IS NULL AND page_namespace={$this->requestedNamespace} AND page_is_redirect=0
+			";
+	}
+}
+
+/**
+ * constructor
+ */
+function wfSpecialUncategorizedpages() {
+	list( $limit, $offset ) = wfCheckLimits();
+
+	$lpp = new UncategorizedPagesPage();
+
+	return $lpp->doQuery( $offset, $limit );
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/SpecialUndelete.php
===================================================================
--- /MediaWiki/branches/1.11/includes/SpecialUndelete.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/SpecialUndelete.php	(revision 1280)
@@ -0,0 +1,857 @@
+<?php
+
+/**
+ * Special page allowing users with the appropriate permissions to view
+ * and restore deleted content
+ *
+ * @addtogroup SpecialPage
+ */
+
+/**
+ * Constructor
+ */
+function wfSpecialUndelete( $par ) {
+	global $wgRequest;
+
+	$form = new UndeleteForm( $wgRequest, $par );
+	$form->execute();
+}
+
+/**
+ * Used to show archived pages and eventually restore them.
+ * @addtogroup SpecialPage
+ */
+class PageArchive {
+	protected $title;
+
+	function __construct( $title ) {
+		if( is_null( $title ) ) {
+			throw new MWException( 'Archiver() given a null title.');
+		}
+		$this->title = $title;
+	}
+
+	/**
+	 * List all deleted pages recorded in the archive table. Returns result
+	 * wrapper with (ar_namespace, ar_title, count) fields, ordered by page
+	 * namespace/title.
+	 *
+	 * @return ResultWrapper
+	 */
+	public static function listAllPages() {
+		$dbr = wfGetDB( DB_SLAVE );
+		return self::listPages( $dbr, '' );
+	}
+	
+	/**
+	 * List deleted pages recorded in the archive table matching the
+	 * given title prefix.
+	 * Returns result wrapper with (ar_namespace, ar_title, count) fields.
+	 *
+	 * @return ResultWrapper
+	 */
+	public static function listPagesByPrefix( $prefix ) {
+		$dbr = wfGetDB( DB_SLAVE );
+		
+		$title = Title::newFromText( $prefix );
+		if( $title ) {
+			$ns = $title->getNamespace();
+			$encPrefix = $dbr->escapeLike( $title->getDbKey() );
+		} else {
+			// Prolly won't work too good
+			// @todo handle bare namespace names cleanly?
+			$ns = 0;
+			$encPrefix = $dbr->escapeLike( $prefix );
+		}
+		$conds = array(
+			'ar_namespace' => $ns,
+			"ar_title LIKE '$encPrefix%'",
+		);
+		return self::listPages( $dbr, $conds );
+	}
+
+	protected static function listPages( $dbr, $condition ) {
+		return $dbr->resultObject(
+			$dbr->select(
+				array( 'archive' ),
+				array(
+					'ar_namespace',
+					'ar_title',
+					'COUNT(*) AS count',
+				),
+				$condition,
+				__METHOD__,
+				array(
+					'GROUP BY' => 'ar_namespace,ar_title',
+					'ORDER BY' => 'ar_namespace,ar_title',
+					'LIMIT' => 100,
+				)
+			)
+		);
+	}
+	
+	/**
+	 * List the revisions of the given page. Returns result wrapper with
+	 * (ar_minor_edit, ar_timestamp, ar_user, ar_user_text, ar_comment) fields.
+	 *
+	 * @return ResultWrapper
+	 */
+	function listRevisions() {
+		$dbr = wfGetDB( DB_SLAVE );
+		$res = $dbr->select( 'archive',
+			array( 'ar_minor_edit', 'ar_timestamp', 'ar_user', 'ar_user_text', 'ar_comment', 'ar_len' ),
+			array( 'ar_namespace' => $this->title->getNamespace(),
+			       'ar_title' => $this->title->getDBkey() ),
+			'PageArchive::listRevisions',
+			array( 'ORDER BY' => 'ar_timestamp DESC' ) );
+		$ret = $dbr->resultObject( $res );
+		return $ret;
+	}
+	
+	/**
+	 * List the deleted file revisions for this page, if it's a file page.
+	 * Returns a result wrapper with various filearchive fields, or null
+	 * if not a file page.
+	 *
+	 * @return ResultWrapper
+	 * @todo Does this belong in Image for fuller encapsulation?
+	 */
+	function listFiles() {
+		if( $this->title->getNamespace() == NS_IMAGE ) {
+			$dbr = wfGetDB( DB_SLAVE );
+			$res = $dbr->select( 'filearchive',
+				array(
+					'fa_id',
+					'fa_name',
+					'fa_storage_key',
+					'fa_size',
+					'fa_width',
+					'fa_height',
+					'fa_description',
+					'fa_user',
+					'fa_user_text',
+					'fa_timestamp' ),
+				array( 'fa_name' => $this->title->getDbKey() ),
+				__METHOD__,
+				array( 'ORDER BY' => 'fa_timestamp DESC' ) );
+			$ret = $dbr->resultObject( $res );
+			return $ret;
+		}
+		return null;
+	}
+
+	/**
+	 * Fetch (and decompress if necessary) the stored text for the deleted
+	 * revision of the page with the given timestamp.
+	 *
+	 * @return string
+	 * @deprecated Use getRevision() for more flexible information
+	 */
+	function getRevisionText( $timestamp ) {
+		$rev = $this->getRevision( $timestamp );
+		return $rev ? $rev->getText() : null;
+	}
+
+	/**
+	 * Return a Revision object containing data for the deleted revision.
+	 * Note that the result *may* or *may not* have a null page ID.
+	 * @param string $timestamp
+	 * @return Revision
+	 */
+	function getRevision( $timestamp ) {
+		$dbr = wfGetDB( DB_SLAVE );
+		$row = $dbr->selectRow( 'archive',
+			array(
+				'ar_rev_id',
+				'ar_text',
+				'ar_comment',
+				'ar_user',
+				'ar_user_text',
+				'ar_timestamp',
+				'ar_minor_edit',
+				'ar_flags',
+				'ar_text_id',
+				'ar_len' ),
+			array( 'ar_namespace' => $this->title->getNamespace(),
+			       'ar_title' => $this->title->getDbkey(),
+			       'ar_timestamp' => $dbr->timestamp( $timestamp ) ),
+			__METHOD__ );
+		if( $row ) {
+			return new Revision( array(
+				'page'       => $this->title->getArticleId(),
+				'id'         => $row->ar_rev_id,
+				'text'       => ($row->ar_text_id
+					? null
+					: Revision::getRevisionText( $row, 'ar_' ) ),
+				'comment'    => $row->ar_comment,
+				'user'       => $row->ar_user,
+				'user_text'  => $row->ar_user_text,
+				'timestamp'  => $row->ar_timestamp,
+				'minor_edit' => $row->ar_minor_edit,
+				'text_id'    => $row->ar_text_id ) );
+		} else {
+			return null;
+		}
+	}
+
+	/**
+	 * Get the text from an archive row containing ar_text, ar_flags and ar_text_id
+	 */
+	function getTextFromRow( $row ) {
+		if( is_null( $row->ar_text_id ) ) {
+			// An old row from MediaWiki 1.4 or previous.
+			// Text is embedded in this row in classic compression format.
+			return Revision::getRevisionText( $row, "ar_" );
+		} else {
+			// New-style: keyed to the text storage backend.
+			$dbr = wfGetDB( DB_SLAVE );
+			$text = $dbr->selectRow( 'text',
+				array( 'old_text', 'old_flags' ),
+				array( 'old_id' => $row->ar_text_id ),
+				__METHOD__ );
+			return Revision::getRevisionText( $text );
+		}
+	}
+
+
+	/**
+	 * Fetch (and decompress if necessary) the stored text of the most
+	 * recently edited deleted revision of the page.
+	 *
+	 * If there are no archived revisions for the page, returns NULL.
+	 *
+	 * @return string
+	 */
+	function getLastRevisionText() {
+		$dbr = wfGetDB( DB_SLAVE );
+		$row = $dbr->selectRow( 'archive',
+			array( 'ar_text', 'ar_flags', 'ar_text_id' ),
+			array( 'ar_namespace' => $this->title->getNamespace(),
+			       'ar_title' => $this->title->getDBkey() ),
+			'PageArchive::getLastRevisionText',
+			array( 'ORDER BY' => 'ar_timestamp DESC' ) );
+		if( $row ) {
+			return $this->getTextFromRow( $row );
+		} else {
+			return NULL;
+		}
+	}
+
+	/**
+	 * Quick check if any archived revisions are present for the page.
+	 * @return bool
+	 */
+	function isDeleted() {
+		$dbr = wfGetDB( DB_SLAVE );
+		$n = $dbr->selectField( 'archive', 'COUNT(ar_title)',
+			array( 'ar_namespace' => $this->title->getNamespace(),
+			       'ar_title' => $this->title->getDBkey() ) );
+		return ($n > 0);
+	}
+
+	/**
+	 * Restore the given (or all) text and file revisions for the page.
+	 * Once restored, the items will be removed from the archive tables.
+	 * The deletion log will be updated with an undeletion notice.
+	 *
+	 * @param array $timestamps Pass an empty array to restore all revisions, otherwise list the ones to undelete.
+	 * @param string $comment
+	 * @param array $fileVersions
+	 *
+	 * @return true on success.
+	 */
+	function undelete( $timestamps, $comment = '', $fileVersions = array() ) {
+		// If both the set of text revisions and file revisions are empty,
+		// restore everything. Otherwise, just restore the requested items.
+		$restoreAll = empty( $timestamps ) && empty( $fileVersions );
+		
+		$restoreText = $restoreAll || !empty( $timestamps );
+		$restoreFiles = $restoreAll || !empty( $fileVersions );
+		
+		if( $restoreFiles && $this->title->getNamespace() == NS_IMAGE ) {
+			$img = new Image( $this->title );
+			$filesRestored = $img->restore( $fileVersions );
+		} else {
+			$filesRestored = 0;
+		}
+		
+		if( $restoreText ) {
+			$textRestored = $this->undeleteRevisions( $timestamps );
+		} else {
+			$textRestored = 0;
+		}
+		
+		// Touch the log!
+		global $wgContLang;
+		$log = new LogPage( 'delete' );
+		
+		if( $textRestored && $filesRestored ) {
+			$reason = wfMsgForContent( 'undeletedrevisions-files',
+				$wgContLang->formatNum( $textRestored ),
+				$wgContLang->formatNum( $filesRestored ) );
+		} elseif( $textRestored ) {
+			$reason = wfMsgForContent( 'undeletedrevisions',
+				$wgContLang->formatNum( $textRestored ) );
+		} elseif( $filesRestored ) {
+			$reason = wfMsgForContent( 'undeletedfiles',
+				$wgContLang->formatNum( $filesRestored ) );
+		} else {
+			wfDebug( "Undelete: nothing undeleted...\n" );
+			return false;
+		}
+		
+		if( trim( $comment ) != '' )
+			$reason .= ": {$comment}";
+		$log->addEntry( 'restore', $this->title, $reason );
+		
+		return true;
+	}
+	
+	/**
+	 * This is the meaty bit -- restores archived revisions of the given page
+	 * to the cur/old tables. If the page currently exists, all revisions will
+	 * be stuffed into old, otherwise the most recent will go into cur.
+	 *
+	 * @param array $timestamps Pass an empty array to restore all revisions, otherwise list the ones to undelete.
+	 * @param string $comment
+	 * @param array $fileVersions
+	 *
+	 * @return int number of revisions restored
+	 */
+	private function undeleteRevisions( $timestamps ) {
+		global $wgDBtype;
+
+		$restoreAll = empty( $timestamps );
+		
+		$dbw = wfGetDB( DB_MASTER );
+		$page = $dbw->tableName( 'archive' );
+
+		# Does this page already exist? We'll have to update it...
+		$article = new Article( $this->title );
+		$options = ( $wgDBtype == 'postgres' )
+			? '' // pg doesn't support this?
+			: 'FOR UPDATE';
+		$page = $dbw->selectRow( 'page',
+			array( 'page_id', 'page_latest' ),
+			array( 'page_namespace' => $this->title->getNamespace(),
+			       'page_title'     => $this->title->getDBkey() ),
+			__METHOD__,
+			$options );
+		if( $page ) {
+			# Page already exists. Import the history, and if necessary
+			# we'll update the latest revision field in the record.
+			$newid             = 0;
+			$pageId            = $page->page_id;
+			$previousRevId     = $page->page_latest;
+		} else {
+			# Have to create a new article...
+			$newid  = $article->insertOn( $dbw );
+			$pageId = $newid;
+			$previousRevId = 0;
+		}
+
+		if( $restoreAll ) {
+			$oldones = '1 = 1'; # All revisions...
+		} else {
+			$oldts = implode( ',',
+				array_map( array( &$dbw, 'addQuotes' ),
+					array_map( array( &$dbw, 'timestamp' ),
+						$timestamps ) ) );
+
+			$oldones = "ar_timestamp IN ( {$oldts} )";
+		}
+
+		/**
+		 * Restore each revision...
+		 */
+		$result = $dbw->select( 'archive',
+			/* fields */ array(
+				'ar_rev_id',
+				'ar_text',
+				'ar_comment',
+				'ar_user',
+				'ar_user_text',
+				'ar_timestamp',
+				'ar_minor_edit',
+				'ar_flags',
+				'ar_text_id',
+				'ar_len' ),
+			/* WHERE */ array(
+				'ar_namespace' => $this->title->getNamespace(),
+				'ar_title'     => $this->title->getDBkey(),
+				$oldones ),
+			__METHOD__,
+			/* options */ array(
+				'ORDER BY' => 'ar_timestamp' )
+			);
+		if( $dbw->numRows( $result ) < count( $timestamps ) ) {
+			wfDebug( __METHOD__.": couldn't find all requested rows\n" );
+			return false;
+		}
+		
+		$revision = null;
+		$restored = 0;
+
+		while( $row = $dbw->fetchObject( $result ) ) {
+			if( $row->ar_text_id ) {
+				// Revision was deleted in 1.5+; text is in
+				// the regular text table, use the reference.
+				// Specify null here so the so the text is
+				// dereferenced for page length info if needed.
+				$revText = null;
+			} else {
+				// Revision was deleted in 1.4 or earlier.
+				// Text is squashed into the archive row, and
+				// a new text table entry will be created for it.
+				$revText = Revision::getRevisionText( $row, 'ar_' );
+			}
+			$revision = new Revision( array(
+				'page'       => $pageId,
+				'id'         => $row->ar_rev_id,
+				'text'       => $revText,
+				'comment'    => $row->ar_comment,
+				'user'       => $row->ar_user,
+				'user_text'  => $row->ar_user_text,
+				'timestamp'  => $row->ar_timestamp,
+				'minor_edit' => $row->ar_minor_edit,
+				'text_id'    => $row->ar_text_id,
+				'len'		 => $row->ar_len
+				) );
+			$revision->insertOn( $dbw );
+			$restored++;
+		}
+
+		if( $revision ) {
+			# FIXME: Update latest if newer as well...
+			if( $newid ) {
+				// Attach the latest revision to the page...
+				$article->updateRevisionOn( $dbw, $revision, $previousRevId );
+				
+				// Update site stats, link tables, etc
+				$article->createUpdates( $revision );
+			}
+
+			if( $newid ) {
+				wfRunHooks( 'ArticleUndelete', array( &$this->title, true ) );
+				Article::onArticleCreate( $this->title );
+			} else {
+				wfRunHooks( 'ArticleUndelete', array( &$this->title, false ) );
+				Article::onArticleEdit( $this->title );
+			}
+		} else {
+			# Something went terribly wrong!
+		}
+
+		# Now that it's safely stored, take it out of the archive
+		$dbw->delete( 'archive',
+			/* WHERE */ array(
+				'ar_namespace' => $this->title->getNamespace(),
+				'ar_title' => $this->title->getDBkey(),
+				$oldones ),
+			__METHOD__ );
+
+		return $restored;
+	}
+
+}
+
+/**
+ * The HTML form for Special:Undelete, which allows users with the appropriate
+ * permissions to view and restore deleted content.
+ * @addtogroup SpecialPage
+ */
+class UndeleteForm {
+	var $mAction, $mTarget, $mTimestamp, $mRestore, $mTargetObj;
+	var $mTargetTimestamp, $mAllowed, $mComment;
+
+	function UndeleteForm( $request, $par = "" ) {
+		global $wgUser;
+		$this->mAction = $request->getVal( 'action' );
+		$this->mTarget = $request->getVal( 'target' );
+		$this->mSearchPrefix = $request->getText( 'prefix' );
+		$time = $request->getVal( 'timestamp' );
+		$this->mTimestamp = $time ? wfTimestamp( TS_MW, $time ) : '';
+		$this->mFile = $request->getVal( 'file' );
+		
+		$posted = $request->wasPosted() &&
+			$wgUser->matchEditToken( $request->getVal( 'wpEditToken' ) );
+		$this->mRestore = $request->getCheck( 'restore' ) && $posted;
+		$this->mPreview = $request->getCheck( 'preview' ) && $posted;
+		$this->mComment = $request->getText( 'wpComment' );
+		
+		if( $par != "" ) {
+			$this->mTarget = $par;
+		}
+		if ( $wgUser->isAllowed( 'delete' ) && !$wgUser->isBlocked() ) {
+			$this->mAllowed = true;
+		} else {
+			$this->mAllowed = false;
+			$this->mTimestamp = '';
+			$this->mRestore = false;
+		}
+		if ( $this->mTarget !== "" ) {
+			$this->mTargetObj = Title::newFromURL( $this->mTarget );
+		} else {
+			$this->mTargetObj = NULL;
+		}
+		if( $this->mRestore ) {
+			$timestamps = array();
+			$this->mFileVersions = array();
+			foreach( $_REQUEST as $key => $val ) {
+				$matches = array();
+				if( preg_match( '/^ts(\d{14})$/', $key, $matches ) ) {
+					array_push( $timestamps, $matches[1] );
+				}
+				
+				if( preg_match( '/^fileid(\d+)$/', $key, $matches ) ) {
+					$this->mFileVersions[] = intval( $matches[1] );
+				}
+			}
+			rsort( $timestamps );
+			$this->mTargetTimestamp = $timestamps;
+		}
+	}
+
+	function execute() {
+		global $wgOut;
+		if ( $this->mAllowed ) {
+			$wgOut->setPagetitle( wfMsg( "undeletepage" ) );
+		} else {
+			$wgOut->setPagetitle( wfMsg( "viewdeletedpage" ) );
+		}
+		
+		if( is_null( $this->mTargetObj ) ) {
+			$this->showSearchForm();
+
+			# List undeletable articles
+			if( $this->mSearchPrefix ) {
+				$result = PageArchive::listPagesByPrefix(
+					$this->mSearchPrefix );
+				$this->showList( $result );
+			}
+			return;
+		}
+		if( $this->mTimestamp !== '' ) {
+			return $this->showRevision( $this->mTimestamp );
+		}
+		if( $this->mFile !== null ) {
+			return $this->showFile( $this->mFile );
+		}
+		if( $this->mRestore && $this->mAction == "submit" ) {
+			return $this->undelete();
+		}
+		return $this->showHistory();
+	}
+
+	function showSearchForm() {
+		global $wgOut, $wgScript;
+		$wgOut->addWikiText( wfMsg( 'undelete-header' ) );
+		
+		$wgOut->addHtml(
+			Xml::openElement( 'form', array(
+				'method' => 'get',
+				'action' => $wgScript ) ) .
+			'<fieldset>' .
+			Xml::element( 'legend', array(),
+				wfMsg( 'undelete-search-box' ) ) .
+			Xml::hidden( 'title',
+				SpecialPage::getTitleFor( 'Undelete' )->getPrefixedDbKey() ) .
+			Xml::inputLabel( wfMsg( 'undelete-search-prefix' ),
+				'prefix', 'prefix', 20,
+				$this->mSearchPrefix ) .
+			Xml::submitButton( wfMsg( 'undelete-search-submit' ) ) .
+			'</fieldset>' .
+			'</form>' );
+	}
+
+	/* private */ function showList( $result ) {
+		global $wgLang, $wgContLang, $wgUser, $wgOut;
+		
+		if( $result->numRows() == 0 ) {
+			$wgOut->addWikiText( wfMsg( 'undelete-no-results' ) );
+			return;
+		}
+
+		$wgOut->addWikiText( wfMsg( "undeletepagetext" ) );
+
+		$sk = $wgUser->getSkin();
+		$undelete = SpecialPage::getTitleFor( 'Undelete' );
+		$wgOut->addHTML( "<ul>\n" );
+		while( $row = $result->fetchObject() ) {
+			$title = Title::makeTitleSafe( $row->ar_namespace, $row->ar_title );
+			$link = $sk->makeKnownLinkObj( $undelete, htmlspecialchars( $title->getPrefixedText() ), 'target=' . $title->getPrefixedUrl() );
+			#$revs = wfMsgHtml( 'undeleterevisions', $wgLang->formatNum( $row->count ) );
+			$revs = wfMsgExt( 'undeleterevisions',
+				array( 'parseinline' ),
+				$wgLang->formatNum( $row->count ) );
+			$wgOut->addHtml( "<li>{$link} ({$revs})</li>\n" );
+		}
+		$result->free();
+		$wgOut->addHTML( "</ul>\n" );
+
+		return true;
+	}
+
+	/* private */ function showRevision( $timestamp ) {
+		global $wgLang, $wgUser, $wgOut;
+		$self = SpecialPage::getTitleFor( 'Undelete' );
+		$skin = $wgUser->getSkin();
+
+		if(!preg_match("/[0-9]{14}/",$timestamp)) return 0;
+
+		$archive = new PageArchive( $this->mTargetObj );
+		$rev = $archive->getRevision( $timestamp );
+		
+		$wgOut->setPageTitle( wfMsg( 'undeletepage' ) );
+		$link = $skin->makeKnownLinkObj( $self, htmlspecialchars( $this->mTargetObj->getPrefixedText() ),
+					'target=' . $this->mTargetObj->getPrefixedUrl() );
+		$wgOut->addHtml( '<p>' . wfMsgHtml( 'undelete-revision', $link,
+			htmlspecialchars( $wgLang->timeAndDate( $timestamp ) ) ) . '</p>' ); 
+		
+		if( !$rev ) {
+			$wgOut->addWikiText( wfMsg( 'undeleterevision-missing' ) );
+			return;
+		}
+		
+		wfRunHooks( 'UndeleteShowRevision', array( $this->mTargetObj, $rev ) );
+		
+		if( $this->mPreview ) {
+			$wgOut->addHtml( "<hr />\n" );
+			$wgOut->addWikiTextTitleTidy( $rev->getText(), $this->mTargetObj, false );
+		}
+
+		$wgOut->addHtml(
+			wfElement( 'textarea', array(
+					'readonly' => true,
+					'cols' => intval( $wgUser->getOption( 'cols' ) ),
+					'rows' => intval( $wgUser->getOption( 'rows' ) ) ),
+				$rev->getText() . "\n" ) .
+			wfOpenElement( 'div' ) .
+			wfOpenElement( 'form', array(
+				'method' => 'post',
+				'action' => $self->getLocalURL( "action=submit" ) ) ) .
+			wfElement( 'input', array(
+				'type' => 'hidden',
+				'name' => 'target',
+				'value' => $this->mTargetObj->getPrefixedDbKey() ) ) .
+			wfElement( 'input', array(
+				'type' => 'hidden',
+				'name' => 'timestamp',
+				'value' => $timestamp ) ) .
+			wfElement( 'input', array(
+				'type' => 'hidden',
+				'name' => 'wpEditToken',
+				'value' => $wgUser->editToken() ) ) .
+			wfElement( 'input', array(
+				'type' => 'hidden',
+				'name' => 'preview',
+				'value' => '1' ) ) .
+			wfElement( 'input', array(
+				'type' => 'submit',
+				'value' => wfMsg( 'showpreview' ) ) ) .
+			wfCloseElement( 'form' ) .
+			wfCloseElement( 'div' ) );
+	}
+	
+	/**
+	 * Show a deleted file version requested by the visitor.
+	 */
+	function showFile( $key ) {
+		global $wgOut, $wgRequest;
+		$wgOut->disable();
+		
+		# We mustn't allow the output to be Squid cached, otherwise
+		# if an admin previews a deleted image, and it's cached, then
+		# a user without appropriate permissions can toddle off and
+		# nab the image, and Squid will serve it
+		$wgRequest->response()->header( 'Expires: ' . gmdate( 'D, d M Y H:i:s', 0 ) . ' GMT' );
+		$wgRequest->response()->header( 'Cache-Control: no-cache, no-store, max-age=0, must-revalidate' );
+		$wgRequest->response()->header( 'Pragma: no-cache' );
+		
+		$store = FileStore::get( 'deleted' );
+		$store->stream( $key );
+	}
+
+	/* private */ function showHistory() {
+		global $wgLang, $wgUser, $wgOut;
+
+		$sk = $wgUser->getSkin();
+		if ( $this->mAllowed ) {
+			$wgOut->setPagetitle( wfMsg( "undeletepage" ) );
+		} else {
+			$wgOut->setPagetitle( wfMsg( 'viewdeletedpage' ) );
+		}
+
+		$archive = new PageArchive( $this->mTargetObj );
+		/*
+		$text = $archive->getLastRevisionText();
+		if( is_null( $text ) ) {
+			$wgOut->addWikiText( wfMsg( "nohistory" ) );
+			return;
+		}
+		*/
+		if ( $this->mAllowed ) {
+			$wgOut->addWikiText( wfMsg( "undeletehistory" ) );
+		} else {
+			$wgOut->addWikiText( wfMsg( "undeletehistorynoadmin" ) );
+		}
+
+		# List all stored revisions
+		$revisions = $archive->listRevisions();
+		$files = $archive->listFiles();
+		
+		$haveRevisions = $revisions && $revisions->numRows() > 0;
+		$haveFiles = $files && $files->numRows() > 0;
+		
+		# Batch existence check on user and talk pages
+		if( $haveRevisions ) {
+			$batch = new LinkBatch();
+			while( $row = $revisions->fetchObject() ) {
+				$batch->addObj( Title::makeTitleSafe( NS_USER, $row->ar_user_text ) );
+				$batch->addObj( Title::makeTitleSafe( NS_USER_TALK, $row->ar_user_text ) );
+			}
+			$batch->execute();
+			$revisions->seek( 0 );
+		}
+		if( $haveFiles ) {
+			$batch = new LinkBatch();
+			while( $row = $files->fetchObject() ) {
+				$batch->addObj( Title::makeTitleSafe( NS_USER, $row->fa_user_text ) );
+				$batch->addObj( Title::makeTitleSafe( NS_USER_TALK, $row->fa_user_text ) );
+			}
+			$batch->execute();
+			$files->seek( 0 );
+		}
+
+		if ( $this->mAllowed ) {
+			$titleObj = SpecialPage::getTitleFor( "Undelete" );
+			$action = $titleObj->getLocalURL( "action=submit" );
+			# Start the form here
+			$top = wfOpenElement( 'form', array( 'method' => 'post', 'action' => $action, 'id' => 'undelete' ) );
+			$wgOut->addHtml( $top );
+		}
+
+		# Show relevant lines from the deletion log:
+		$wgOut->addHTML( "<h2>" . htmlspecialchars( LogPage::logName( 'delete' ) ) . "</h2>\n" );
+		$logViewer = new LogViewer(
+			new LogReader(
+				new FauxRequest(
+					array( 'page' => $this->mTargetObj->getPrefixedText(),
+						   'type' => 'delete' ) ) ) );
+		$logViewer->showList( $wgOut );
+		
+		if( $this->mAllowed && ( $haveRevisions || $haveFiles ) ) {
+			# Format the user-visible controls (comment field, submission button)
+			# in a nice little table
+			$table = '<fieldset><table><tr>';
+			$table .= '<td colspan="2">' . wfMsgWikiHtml( 'undeleteextrahelp' ) . '</td></tr><tr>';
+			$table .= '<td align="right"><strong>' . wfMsgHtml( 'undeletecomment' ) . '</strong></td>';
+			$table .= '<td>' . wfInput( 'wpComment', 50, $this->mComment ) . '</td>';
+			$table .= '</tr><tr><td>&nbsp;</td><td>';
+			$table .= wfSubmitButton( wfMsg( 'undeletebtn' ), array( 'name' => 'restore' ) );
+			$table .= wfElement( 'input', array( 'type' => 'reset', 'value' => wfMsg( 'undeletereset' ) ) );
+			$table .= '</td></tr></table></fieldset>';
+			$wgOut->addHtml( $table );
+		}
+	
+		$wgOut->addHTML( "<h2>" . htmlspecialchars( wfMsg( "history" ) ) . "</h2>\n" );
+
+		if( $haveRevisions ) {
+			# The page's stored (deleted) history:
+			$wgOut->addHTML("<ul>");
+			$target = urlencode( $this->mTarget );
+			while( $row = $revisions->fetchObject() ) {
+				$ts = wfTimestamp( TS_MW, $row->ar_timestamp );
+				if ( $this->mAllowed ) {
+					$checkBox = wfCheck( "ts$ts" );
+					$pageLink = $sk->makeKnownLinkObj( $titleObj,
+						$wgLang->timeanddate( $ts, true ),
+						"target=$target&timestamp=$ts" );
+				} else {
+					$checkBox = '';
+					$pageLink = $wgLang->timeanddate( $ts, true );
+				}
+				$userLink = $sk->userLink( $row->ar_user, $row->ar_user_text ) . $sk->userToolLinks( $row->ar_user, $row->ar_user_text );
+				$stxt = '';
+				if (!is_null($size = $row->ar_len)) {
+					if ($size == 0) {
+						$stxt = wfMsgHtml('historyempty');
+					} else {
+						$stxt = wfMsgHtml('historysize', $wgLang->formatNum( $size ) );
+					}
+				}
+				$comment = $sk->commentBlock( $row->ar_comment );
+				$wgOut->addHTML( "<li>$checkBox $pageLink . . $userLink $stxt $comment</li>\n" );
+	
+			}
+			$revisions->free();
+			$wgOut->addHTML("</ul>");
+		} else {
+			$wgOut->addWikiText( wfMsg( "nohistory" ) );
+		}
+
+		
+		if( $haveFiles ) {
+			$wgOut->addHtml( "<h2>" . wfMsgHtml( 'imghistory' ) . "</h2>\n" );
+			$wgOut->addHtml( "<ul>" );
+			while( $row = $files->fetchObject() ) {
+				$ts = wfTimestamp( TS_MW, $row->fa_timestamp );
+				if ( $this->mAllowed && $row->fa_storage_key ) {
+					$checkBox = wfCheck( "fileid" . $row->fa_id );
+					$key = urlencode( $row->fa_storage_key );
+					$target = urlencode( $this->mTarget );
+					$pageLink = $sk->makeKnownLinkObj( $titleObj,
+						$wgLang->timeanddate( $ts, true ),
+						"target=$target&file=$key" );
+				} else {
+					$checkBox = '';
+					$pageLink = $wgLang->timeanddate( $ts, true );
+				}
+ 				$userLink = $sk->userLink( $row->fa_user, $row->fa_user_text ) . $sk->userToolLinks( $row->fa_user, $row->fa_user_text );
+				$data =
+					wfMsgHtml( 'widthheight',
+						$wgLang->formatNum( $row->fa_width ),
+						$wgLang->formatNum( $row->fa_height ) ) .
+					' (' .
+					wfMsgHtml( 'nbytes', $wgLang->formatNum( $row->fa_size ) ) .
+					')';
+				$comment = $sk->commentBlock( $row->fa_description );
+				$wgOut->addHTML( "<li>$checkBox $pageLink . . $userLink $data $comment</li>\n" );
+			}
+			$files->free();
+			$wgOut->addHTML( "</ul>" );
+		}
+		
+		if ( $this->mAllowed ) {
+			# Slip in the hidden controls here
+			$misc  = wfHidden( 'target', $this->mTarget );
+			$misc .= wfHidden( 'wpEditToken', $wgUser->editToken() );
+			$wgOut->addHtml( $misc . '</form>' );
+		}
+
+		return true;
+	}
+
+	function undelete() {
+		global $wgOut, $wgUser;
+		if( !is_null( $this->mTargetObj ) ) {
+			$archive = new PageArchive( $this->mTargetObj );
+			
+			$ok = $archive->undelete(
+				$this->mTargetTimestamp,
+				$this->mComment,
+				$this->mFileVersions );
+			
+			if( $ok ) {
+				$skin = $wgUser->getSkin();
+				$link = $skin->makeKnownLinkObj( $this->mTargetObj );
+				$wgOut->addHtml( wfMsgWikiHtml( 'undeletedpage', $link ) );
+				return true;
+			}
+		}
+		$wgOut->showFatalError( wfMsg( "cannotundelete" ) );
+		return false;
+	}
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/SpecialUnlockdb.php
===================================================================
--- /MediaWiki/branches/1.11/includes/SpecialUnlockdb.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/SpecialUnlockdb.php	(revision 1280)
@@ -0,0 +1,110 @@
+<?php
+/**
+ *
+ * @addtogroup SpecialPage
+ */
+
+/**
+ *
+ */
+function wfSpecialUnlockdb() {
+	global $wgUser, $wgOut, $wgRequest;
+
+	if( !$wgUser->isAllowed( 'siteadmin' ) ) {
+		$wgOut->permissionRequired( 'siteadmin' );
+		return;
+	}
+
+	$action = $wgRequest->getVal( 'action' );
+	$f = new DBUnlockForm();
+
+	if ( "success" == $action ) {
+		$f->showSuccess();
+	} else if ( "submit" == $action && $wgRequest->wasPosted() &&
+		$wgUser->matchEditToken( $wgRequest->getVal( 'wpEditToken' ) ) ) {
+		$f->doSubmit();
+	} else {
+		$f->showForm( "" );
+	}
+}
+
+/**
+ *
+ * @addtogroup SpecialPage
+ */
+class DBUnlockForm {
+	function showForm( $err )
+	{
+		global $wgOut, $wgUser;
+
+		global $wgReadOnlyFile;
+		if( !file_exists( $wgReadOnlyFile ) ) {
+			$wgOut->addWikiText( wfMsg( 'databasenotlocked' ) );
+			return;
+		}
+
+		$wgOut->setPagetitle( wfMsg( "unlockdb" ) );
+		$wgOut->addWikiText( wfMsg( "unlockdbtext" ) );
+
+		if ( "" != $err ) {
+			$wgOut->setSubtitle( wfMsg( "formerror" ) );
+			$wgOut->addHTML( '<p class="error">' . htmlspecialchars( $err ) . "</p>\n" );
+		}
+		$lc = htmlspecialchars( wfMsg( "unlockconfirm" ) );
+		$lb = htmlspecialchars( wfMsg( "unlockbtn" ) );
+		$titleObj = SpecialPage::getTitleFor( "Unlockdb" );
+		$action = $titleObj->escapeLocalURL( "action=submit" );
+		$token = htmlspecialchars( $wgUser->editToken() );
+
+		$wgOut->addHTML( <<<END
+
+<form id="unlockdb" method="post" action="{$action}">
+<table border="0">
+	<tr>
+		<td align="right">
+			<input type="checkbox" name="wpLockConfirm" />
+		</td>
+		<td align="left">{$lc}</td>
+	</tr>
+	<tr>
+		<td>&nbsp;</td>
+		<td align="left">
+			<input type="submit" name="wpLock" value="{$lb}" />
+		</td>
+	</tr>
+</table>
+<input type="hidden" name="wpEditToken" value="{$token}" />
+</form>
+END
+);
+
+	}
+
+	function doSubmit() {
+		global $wgOut, $wgRequest, $wgReadOnlyFile;
+
+		$wpLockConfirm = $wgRequest->getCheck( 'wpLockConfirm' );
+		if ( ! $wpLockConfirm ) {
+			$this->showForm( wfMsg( "locknoconfirm" ) );
+			return;
+		}
+		if ( @! unlink( $wgReadOnlyFile ) ) {
+			$wgOut->showFileDeleteError( $wgReadOnlyFile );
+			return;
+		}
+		$titleObj = SpecialPage::getTitleFor( "Unlockdb" );
+		$success = $titleObj->getFullURL( "action=success" );
+		$wgOut->redirect( $success );
+	}
+
+	function showSuccess() {
+		global $wgOut;
+		global $ip;
+
+		$wgOut->setPagetitle( wfMsg( "unlockdb" ) );
+		$wgOut->setSubtitle( wfMsg( "unlockdbsuccesssub" ) );
+		$wgOut->addWikiText( wfMsg( "unlockdbsuccesstext", $ip ) );
+	}
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/SpecialUnusedcategories.php
===================================================================
--- /MediaWiki/branches/1.11/includes/SpecialUnusedcategories.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/SpecialUnusedcategories.php	(revision 1280)
@@ -0,0 +1,46 @@
+<?php
+/**
+ *
+ * @addtogroup SpecialPage
+ */
+
+/**
+ *
+ * @addtogroup SpecialPage
+ */
+class UnusedCategoriesPage extends QueryPage {
+
+	function getName() {
+		return 'Unusedcategories';
+	}
+
+	function getPageHeader() {
+		return '<p>' . wfMsg('unusedcategoriestext') . '</p>';
+	}
+
+	function getSQL() {
+		$NScat = NS_CATEGORY;
+		$dbr = wfGetDB( DB_SLAVE );
+		list( $categorylinks, $page ) = $dbr->tableNamesN( 'categorylinks', 'page' );
+		return "SELECT 'Unusedcategories' as type,
+				{$NScat} as namespace, page_title as title, page_title as value
+				FROM $page
+				LEFT JOIN $categorylinks ON page_title=cl_to
+				WHERE cl_from IS NULL
+				AND page_namespace = {$NScat}
+				AND page_is_redirect = 0";
+	}
+
+	function formatResult( $skin, $result ) {
+		$title = Title::makeTitle( NS_CATEGORY, $result->title );
+		return $skin->makeLinkObj( $title, $title->getText() );
+	}
+}
+
+/** constructor */
+function wfSpecialUnusedCategories() {
+	list( $limit, $offset ) = wfCheckLimits();
+	$uc = new UnusedCategoriesPage();
+	return $uc->doQuery( $offset, $limit );
+}
+?>
Index: /MediaWiki/branches/1.11/includes/SpecialUnusedimages.php
===================================================================
--- /MediaWiki/branches/1.11/includes/SpecialUnusedimages.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/SpecialUnusedimages.php	(revision 1280)
@@ -0,0 +1,57 @@
+<?php
+/**
+ *
+ * @addtogroup SpecialPage
+ */
+
+/**
+ * implements Special:Unusedimages
+ * @addtogroup SpecialPage
+ */
+class UnusedimagesPage extends ImageQueryPage {
+
+	function getName() {
+		return 'Unusedimages';
+	}
+
+	function sortDescending() {
+		return false;
+	}
+	function isSyndicated() { return false; }
+
+	function getSQL() {
+		global $wgCountCategorizedImagesAsUsed;
+		$dbr = wfGetDB( DB_SLAVE );
+
+		if ( $wgCountCategorizedImagesAsUsed ) {
+			list( $page, $image, $imagelinks, $categorylinks ) = $dbr->tableNamesN( 'page', 'image', 'imagelinks', 'categorylinks' );
+
+			return 'SELECT img_name as title, img_user, img_user_text, img_timestamp as value, img_description
+					FROM ((('.$page.' AS I LEFT JOIN '.$categorylinks.' AS L ON I.page_id = L.cl_from)
+						LEFT JOIN '.$imagelinks.' AS P ON I.page_title = P.il_to)
+						INNER JOIN '.$image.' AS G ON I.page_title = G.img_name)
+					WHERE I.page_namespace = '.NS_IMAGE.' AND L.cl_from IS NULL AND P.il_to IS NULL';
+		} else {
+			list( $image, $imagelinks ) = $dbr->tableNamesN( 'image','imagelinks' );
+
+			return 'SELECT img_name as title, img_user, img_user_text, img_timestamp as value, img_description' .
+			' FROM '.$image.' LEFT JOIN '.$imagelinks.' ON img_name=il_to WHERE il_to IS NULL ';
+		}
+	}
+
+	function getPageHeader() {
+		return wfMsg( "unusedimagestext" );
+	}
+
+}
+
+/**
+ * Entry point
+ */
+function wfSpecialUnusedimages() {
+	list( $limit, $offset ) = wfCheckLimits();
+	$uip = new UnusedimagesPage();
+
+	return $uip->doQuery( $offset, $limit );
+}
+?>
Index: /MediaWiki/branches/1.11/includes/SpecialUnusedtemplates.php
===================================================================
--- /MediaWiki/branches/1.11/includes/SpecialUnusedtemplates.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/SpecialUnusedtemplates.php	(revision 1280)
@@ -0,0 +1,52 @@
+<?php
+
+/**
+ * implements Special:Unusedtemplates
+ * @author Rob Church <robchur@gmail.com>
+ * @copyright © 2006 Rob Church
+ * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
+ * @addtogroup SpecialPage
+ */
+class UnusedtemplatesPage extends QueryPage {
+
+	function getName() { return( 'Unusedtemplates' ); }
+	function isExpensive() { return true; }
+	function isSyndicated() { return false; }
+	function sortDescending() { return false; }
+
+	function getSQL() {
+		$dbr = wfGetDB( DB_SLAVE );
+		list( $page, $templatelinks) = $dbr->tableNamesN( 'page', 'templatelinks' );
+		$sql = "SELECT 'Unusedtemplates' AS type, page_title AS title,
+			page_namespace AS namespace, 0 AS value
+			FROM $page
+			LEFT JOIN $templatelinks
+			ON page_namespace = tl_namespace AND page_title = tl_title
+			WHERE page_namespace = 10 AND tl_from IS NULL";
+		return $sql;
+	}
+
+	function formatResult( $skin, $result ) {
+		$title = Title::makeTitle( NS_TEMPLATE, $result->title );
+		$pageLink = $skin->makeKnownLinkObj( $title, '', 'redirect=no' );
+		$wlhLink = $skin->makeKnownLinkObj(
+			SpecialPage::getTitleFor( 'Whatlinkshere' ),
+			wfMsgHtml( 'unusedtemplateswlh' ),
+			'target=' . $title->getPrefixedUrl() );
+		return wfSpecialList( $pageLink, $wlhLink );
+	}
+
+	function getPageHeader() {
+		global $wgOut;
+		return $wgOut->parse( wfMsg( 'unusedtemplatestext' ) );
+	}
+
+}
+
+function wfSpecialUnusedtemplates() {
+	list( $limit, $offset ) = wfCheckLimits();
+	$utp = new UnusedtemplatesPage();
+	$utp->doQuery( $offset, $limit );
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/SpecialUnwatchedpages.php
===================================================================
--- /MediaWiki/branches/1.11/includes/SpecialUnwatchedpages.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/SpecialUnwatchedpages.php	(revision 1280)
@@ -0,0 +1,65 @@
+<?php
+/**
+ * A special page that displays a list of pages that are not on anyones watchlist.
+ * Implements Special:Unwatchedpages
+ *
+ * @addtogroup SpecialPage
+ * @author Ævar Arnfjörð Bjarmason <avarab@gmail.com>
+ * @copyright Copyright © 2005, Ævar Arnfjörð Bjarmason
+ * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
+ */
+class UnwatchedpagesPage extends QueryPage {
+
+	function getName() { return 'Unwatchedpages'; }
+	function isExpensive() { return true; }
+	function isSyndicated() { return false; }
+
+	function getSQL() {
+		$dbr = wfGetDB( DB_SLAVE );
+		list( $page, $watchlist ) = $dbr->tableNamesN( 'page', 'watchlist' );
+		$mwns = NS_MEDIAWIKI;
+		return
+			"
+			SELECT
+				'Unwatchedpages' as type,
+				page_namespace as namespace,
+				page_title as title,
+				page_namespace as value
+			FROM $page
+			LEFT JOIN $watchlist ON wl_namespace = page_namespace AND page_title = wl_title
+			WHERE wl_title IS NULL AND page_is_redirect = 0 AND page_namespace<>$mwns
+			";
+	}
+
+	function sortDescending() { return false; }
+
+	function formatResult( $skin, $result ) {
+		global $wgContLang;
+
+		$nt = Title::makeTitle( $result->namespace, $result->title );
+		$text = $wgContLang->convert( $nt->getPrefixedText() );
+
+		$plink = $skin->makeKnownLinkObj( $nt, htmlspecialchars( $text ) );
+		$wlink = $skin->makeKnownLinkObj( $nt, wfMsgHtml( 'watch' ), 'action=watch' );
+
+		return wfSpecialList( $plink, $wlink );
+	}
+}
+
+/**
+ * constructor
+ */
+function wfSpecialUnwatchedpages() {
+	global $wgUser, $wgOut;
+
+	if ( ! $wgUser->isAllowed( 'unwatchedpages' ) )
+		return $wgOut->permissionRequired( 'unwatchedpages' );
+
+	list( $limit, $offset ) = wfCheckLimits();
+
+	$wpp = new UnwatchedpagesPage();
+
+	$wpp->doQuery( $offset, $limit );
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/SpecialUpload.php
===================================================================
--- /MediaWiki/branches/1.11/includes/SpecialUpload.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/SpecialUpload.php	(revision 1280)
@@ -0,0 +1,1309 @@
+<?php
+/**
+ *
+ * @addtogroup SpecialPage
+ */
+
+
+/**
+ * Entry point
+ */
+function wfSpecialUpload() {
+	global $wgRequest;
+	$form = new UploadForm( $wgRequest );
+	$form->execute();
+}
+
+/**
+ * implements Special:Upload
+ * @addtogroup SpecialPage
+ */
+class UploadForm {
+	/**#@+
+	 * @access private
+	 */
+	var $mUploadFile, $mUploadDescription, $mLicense ,$mIgnoreWarning, $mUploadError;
+	var $mUploadSaveName, $mUploadTempName, $mUploadSize, $mUploadOldVersion;
+	var $mUploadCopyStatus, $mUploadSource, $mReUpload, $mAction, $mUpload;
+	var $mOname, $mSessionKey, $mStashed, $mDestFile, $mRemoveTempFile, $mSourceType;
+	var $mUploadTempFileSize = 0;
+
+	# Placeholders for text injection by hooks (must be HTML)
+	# extensions should take care to _append_ to the present value
+	var $uploadFormTextTop;
+	var $uploadFormTextAfterSummary;
+
+	/**#@-*/
+
+	/**
+	 * Constructor : initialise object
+	 * Get data POSTed through the form and assign them to the object
+	 * @param $request Data posted.
+	 */
+	function UploadForm( &$request ) {
+		global $wgAllowCopyUploads;
+		$this->mDestFile          = $request->getText( 'wpDestFile' );
+
+		if( !$request->wasPosted() ) {
+			# GET requests just give the main form; no data except wpDestfile.
+			return;
+		}
+
+		# Placeholders for text injection by hooks (empty per default)
+		$this->uploadFormTextTop = "";
+		$this->uploadFormTextAfterSummary = "";
+
+		$this->mIgnoreWarning     = $request->getCheck( 'wpIgnoreWarning' );
+		$this->mReUpload          = $request->getCheck( 'wpReUpload' );
+		$this->mUpload            = $request->getCheck( 'wpUpload' );
+
+		$this->mUploadDescription = $request->getText( 'wpUploadDescription' );
+		$this->mLicense           = $request->getText( 'wpLicense' );
+		$this->mUploadCopyStatus  = $request->getText( 'wpUploadCopyStatus' );
+		$this->mUploadSource      = $request->getText( 'wpUploadSource' );
+		$this->mWatchthis         = $request->getBool( 'wpWatchthis' );
+		$this->mSourceType         = $request->getText( 'wpSourceType' );
+		wfDebug( "UploadForm: watchthis is: '$this->mWatchthis'\n" );
+
+		$this->mAction            = $request->getVal( 'action' );
+
+		$this->mSessionKey        = $request->getInt( 'wpSessionKey' );
+		if( !empty( $this->mSessionKey ) &&
+			isset( $_SESSION['wsUploadData'][$this->mSessionKey] ) ) {
+			/**
+			 * Confirming a temporarily stashed upload.
+			 * We don't want path names to be forged, so we keep
+			 * them in the session on the server and just give
+			 * an opaque key to the user agent.
+			 */
+			$data = $_SESSION['wsUploadData'][$this->mSessionKey];
+			$this->mUploadTempName   = $data['mUploadTempName'];
+			$this->mUploadSize       = $data['mUploadSize'];
+			$this->mOname            = $data['mOname'];
+			$this->mUploadError      = 0/*UPLOAD_ERR_OK*/;
+			$this->mStashed          = true;
+			$this->mRemoveTempFile   = false;
+		} else {
+			/**
+			 *Check for a newly uploaded file.
+			 */
+			if( $wgAllowCopyUploads && $this->mSourceType == 'web' ) {
+				$this->initializeFromUrl( $request );
+			} else {
+				$this->initializeFromUpload( $request );
+			}
+		}
+	}
+
+	/**
+	 * Initialize the uploaded file from PHP data
+	 * @access private
+	 */
+	function initializeFromUpload( $request ) {
+		$this->mUploadTempName = $request->getFileTempName( 'wpUploadFile' );
+		$this->mUploadSize     = $request->getFileSize( 'wpUploadFile' );
+		$this->mOname          = $request->getFileName( 'wpUploadFile' );
+		$this->mUploadError    = $request->getUploadError( 'wpUploadFile' );
+		$this->mSessionKey     = false;
+		$this->mStashed        = false;
+		$this->mRemoveTempFile = false; // PHP will handle this
+	}
+
+	/**
+	 * Copy a web file to a temporary file
+	 * @access private
+	 */
+	function initializeFromUrl( $request ) {
+		global $wgTmpDirectory;
+		$url = $request->getText( 'wpUploadFileURL' );
+		$local_file = tempnam( $wgTmpDirectory, 'WEBUPLOAD' );
+
+		$this->mUploadTempName = $local_file;
+		$this->mUploadError    = $this->curlCopy( $url, $local_file );
+		$this->mUploadSize     = $this->mUploadTempFileSize;
+		$this->mOname          = array_pop( explode( '/', $url ) );
+		$this->mSessionKey     = false;
+		$this->mStashed        = false;
+
+		// PHP won't auto-cleanup the file
+		$this->mRemoveTempFile = file_exists( $local_file );
+	}
+
+	/**
+	 * Safe copy from URL
+	 * Returns true if there was an error, false otherwise
+	 */
+	private function curlCopy( $url, $dest ) {
+		global $wgUser, $wgOut;
+
+		if( !$wgUser->isAllowed( 'upload_by_url' ) ) {
+			$wgOut->permissionRequired( 'upload_by_url' );
+			return true;
+		}
+
+		# Maybe remove some pasting blanks :-)
+		$url =  trim( $url );
+		if( stripos($url, 'http://') !== 0 && stripos($url, 'ftp://') !== 0 ) {
+			# Only HTTP or FTP URLs
+			$wgOut->errorPage( 'upload-proto-error', 'upload-proto-error-text' );
+			return true;
+		}
+
+		# Open temporary file
+		$this->mUploadTempFile = @fopen( $this->mUploadTempName, "wb" );
+		if( $this->mUploadTempFile === false ) {
+			# Could not open temporary file to write in
+			$wgOut->errorPage( 'upload-file-error', 'upload-file-error-text');
+			return true;
+		}
+
+		$ch = curl_init();
+		curl_setopt( $ch, CURLOPT_HTTP_VERSION, 1.0); # Probably not needed, but apparently can work around some bug
+		curl_setopt( $ch, CURLOPT_TIMEOUT, 10); # 10 seconds timeout
+		curl_setopt( $ch, CURLOPT_LOW_SPEED_LIMIT, 512); # 0.5KB per second minimum transfer speed
+		curl_setopt( $ch, CURLOPT_URL, $url);
+		curl_setopt( $ch, CURLOPT_WRITEFUNCTION, array( $this, 'uploadCurlCallback' ) );
+		curl_exec( $ch );
+		$error = curl_errno( $ch ) ? true : false;
+		$errornum =  curl_errno( $ch );
+		// if ( $error ) print curl_error ( $ch ) ; # Debugging output
+		curl_close( $ch );
+
+		fclose( $this->mUploadTempFile );
+		unset( $this->mUploadTempFile );
+		if( $error ) {
+			unlink( $dest );
+			if( wfEmptyMsg( "upload-curl-error$errornum", wfMsg("upload-curl-error$errornum") ) )
+				$wgOut->errorPage( 'upload-misc-error', 'upload-misc-error-text' );
+			else
+				$wgOut->errorPage( "upload-curl-error$errornum", "upload-curl-error$errornum-text" );
+		}
+
+		return $error;
+	}
+
+	/**
+	 * Callback function for CURL-based web transfer
+	 * Write data to file unless we've passed the length limit;
+	 * if so, abort immediately.
+	 * @access private
+	 */
+	function uploadCurlCallback( $ch, $data ) {
+		global $wgMaxUploadSize;
+		$length = strlen( $data );
+		$this->mUploadTempFileSize += $length;
+		if( $this->mUploadTempFileSize > $wgMaxUploadSize ) {
+			return 0;
+		}
+		fwrite( $this->mUploadTempFile, $data );
+		return $length;
+	}
+
+	/**
+	 * Start doing stuff
+	 * @access public
+	 */
+	function execute() {
+		global $wgUser, $wgOut;
+		global $wgEnableUploads, $wgUploadDirectory;
+
+		# Check uploading enabled
+		if( !$wgEnableUploads ) {
+			$wgOut->showErrorPage( 'uploaddisabled', 'uploaddisabledtext' );
+			return;
+		}
+
+		# Check permissions
+		if( !$wgUser->isAllowed( 'upload' ) ) {
+			if( !$wgUser->isLoggedIn() ) {
+				$wgOut->showErrorPage( 'uploadnologin', 'uploadnologintext' );
+			} else {
+				$wgOut->permissionRequired( 'upload' );
+			}
+			return;
+		}
+
+		# Check blocks
+		if( $wgUser->isBlocked() ) {
+			$wgOut->blockedPage();
+			return;
+		}
+
+		if( wfReadOnly() ) {
+			$wgOut->readOnlyPage();
+			return;
+		}
+
+		/** Check if the image directory is writeable, this is a common mistake */
+		if( !is_writeable( $wgUploadDirectory ) ) {
+			$wgOut->addWikiText( wfMsg( 'upload_directory_read_only', $wgUploadDirectory ) );
+			return;
+		}
+
+		if( $this->mReUpload ) {
+			if( !$this->unsaveUploadedFile() ) {
+				return;
+			}
+			$this->mainUploadForm();
+		} else if( 'submit' == $this->mAction || $this->mUpload ) {
+			$this->processUpload();
+		} else {
+			$this->mainUploadForm();
+		}
+
+		$this->cleanupTempFile();
+	}
+
+	/* -------------------------------------------------------------- */
+
+	/**
+	 * Really do the upload
+	 * Checks are made in SpecialUpload::execute()
+	 * @access private
+	 */
+	function processUpload() {
+		global $wgUser, $wgOut;
+
+		if( !wfRunHooks( 'UploadForm:BeforeProcessing', array( &$this ) ) )
+		{
+			wfDebug( "Hook 'UploadForm:BeforeProcessing' broke processing the file." );
+			return false;
+		}
+
+		/* Check for PHP error if any, requires php 4.2 or newer */
+		if( $this->mUploadError == 1/*UPLOAD_ERR_INI_SIZE*/ ) {
+			$this->mainUploadForm( wfMsgHtml( 'largefileserver' ) );
+			return;
+		}
+
+		/**
+		 * If there was no filename or a zero size given, give up quick.
+		 */
+		if( trim( $this->mOname ) == '' || empty( $this->mUploadSize ) ) {
+			$this->mainUploadForm( wfMsgHtml( 'emptyfile' ) );
+			return;
+		}
+
+		# Chop off any directories in the given filename
+		if( $this->mDestFile ) {
+			$basename = wfBaseName( $this->mDestFile );
+		} else {
+			$basename = wfBaseName( $this->mOname );
+		}
+
+		/**
+		 * We'll want to blacklist against *any* 'extension', and use
+		 * only the final one for the whitelist.
+		 */
+		list( $partname, $ext ) = $this->splitExtensions( $basename );
+
+		if( count( $ext ) ) {
+			$finalExt = $ext[count( $ext ) - 1];
+		} else {
+			$finalExt = '';
+		}
+
+		# If there was more than one "extension", reassemble the base
+		# filename to prevent bogus complaints about length
+		if( count( $ext ) > 1 ) {
+			for( $i = 0; $i < count( $ext ) - 1; $i++ )
+				$partname .= '.' . $ext[$i];
+		}
+
+		if( strlen( $partname ) < 3 ) {
+			$this->mainUploadForm( wfMsgHtml( 'minlength' ) );
+			return;
+		}
+
+		/**
+		 * Filter out illegal characters, and try to make a legible name
+		 * out of it. We'll strip some silently that Title would die on.
+		 */
+		$filtered = preg_replace ( "/[^".Title::legalChars()."]|:/", '-', $basename );
+		$nt = Title::newFromText( $filtered );
+		if( is_null( $nt ) ) {
+			$this->uploadError( wfMsgWikiHtml( 'illegalfilename', htmlspecialchars( $filtered ) ) );
+			return;
+		}
+		$nt =& Title::makeTitle( NS_IMAGE, $nt->getDBkey() );
+		$this->mUploadSaveName = $nt->getDBkey();
+
+		/**
+		 * If the image is protected, non-sysop users won't be able
+		 * to modify it by uploading a new revision.
+		 */
+		if( !$nt->userCan( 'edit' ) ) {
+			return $this->uploadError( wfMsgWikiHtml( 'protectedpage' ) );
+		}
+
+		/**
+		 * In some cases we may forbid overwriting of existing files.
+		 */
+		$overwrite = $this->checkOverwrite( $this->mUploadSaveName );
+		if( WikiError::isError( $overwrite ) ) {
+			return $this->uploadError( $overwrite->toString() );
+		}
+
+		/* Don't allow users to override the blacklist (check file extension) */
+		global $wgStrictFileExtensions;
+		global $wgFileExtensions, $wgFileBlacklist;
+		if ($finalExt == '') {
+			return $this->uploadError( wfMsgExt( 'filetype-missing', array ( 'parseinline' ) ) );
+		} elseif ( $this->checkFileExtensionList( $ext, $wgFileBlacklist ) ||
+				($wgStrictFileExtensions &&
+					!$this->checkFileExtension( $finalExt, $wgFileExtensions ) ) ) {
+			return $this->uploadError( wfMsgExt( 'filetype-badtype', array ( 'parseinline' ), htmlspecialchars( $finalExt ), implode ( ', ', $wgFileExtensions ) ) );
+		}
+
+		/**
+		 * Look at the contents of the file; if we can recognize the
+		 * type but it's corrupt or data of the wrong type, we should
+		 * probably not accept it.
+		 */
+		if( !$this->mStashed ) {
+			$this->checkMacBinary();
+			$veri = $this->verify( $this->mUploadTempName, $finalExt );
+
+			if( $veri !== true ) { //it's a wiki error...
+				return $this->uploadError( $veri->toString() );
+			}
+		}
+
+		/**
+		 * Provide an opportunity for extensions to add futher checks
+		 */
+		$error = '';
+		if( !wfRunHooks( 'UploadVerification',
+				array( $this->mUploadSaveName, $this->mUploadTempName, &$error ) ) ) {
+			return $this->uploadError( $error );
+		}
+
+		/**
+		 * Check for non-fatal conditions
+		 */
+		if ( ! $this->mIgnoreWarning ) {
+			$warning = '';
+
+			global $wgCapitalLinks;
+			if( $wgCapitalLinks ) {
+				$filtered = ucfirst( $filtered );
+			}
+			if( $this->mUploadSaveName != $filtered ) {
+				$warning .=  '<li>'.wfMsgHtml( 'badfilename', htmlspecialchars( $this->mUploadSaveName ) ).'</li>';
+			}
+
+			global $wgCheckFileExtensions;
+			if ( $wgCheckFileExtensions ) {
+				if ( ! $this->checkFileExtension( $finalExt, $wgFileExtensions ) ) {
+					$warning .= '<li>'.wfMsgExt( 'filetype-badtype', array ( 'parseinline' ), htmlspecialchars( $finalExt ), implode ( ', ', $wgFileExtensions ) ).'</li>';
+				}
+			}
+
+			global $wgUploadSizeWarning;
+			if ( $wgUploadSizeWarning && ( $this->mUploadSize > $wgUploadSizeWarning ) ) {
+				$skin = $wgUser->getSkin();
+				$wsize = $skin->formatSize( $wgUploadSizeWarning );
+				$asize = $skin->formatSize( $this->mUploadSize );
+				$warning .= '<li>' . wfMsgHtml( 'large-file', $wsize, $asize ) . '</li>';
+			}
+			if ( $this->mUploadSize == 0 ) {
+				$warning .= '<li>'.wfMsgHtml( 'emptyfile' ).'</li>';
+			}
+
+			global $wgUser;
+			$sk = $wgUser->getSkin();
+			$image = new Image( $nt );
+
+			// Check for uppercase extension. We allow these filenames but check if an image
+			// with lowercase extension exists already
+			if ( $finalExt != strtolower( $finalExt ) ) {
+				$nt_lc = Title::newFromText( $partname . '.' . strtolower( $finalExt ) );
+				$image_lc = new Image( $nt_lc );
+			}
+
+			if( $image->exists() ) {
+				$dlink = $sk->makeKnownLinkObj( $nt );
+				if ( $image->allowInlineDisplay() ) {
+					$dlink2 = $sk->makeImageLinkObj( $nt, wfMsgExt( 'fileexists-thumb', 'parseinline', $dlink ), $nt->getText(), 'right', array(), false, true );
+				} elseif ( !$image->allowInlineDisplay() && $image->isSafeFile() ) {
+					$icon = $image->iconThumb();
+					$dlink2 = '<div style="float:right" id="mw-media-icon"><a href="' . $image->getURL() . '">' . $icon->toHtml() . '</a><br />' . $dlink . '</div>';
+				} else {
+					$dlink2 = '';
+				}
+
+				$warning .= '<li>' . wfMsgExt( 'fileexists', 'parseline', $dlink ) . '</li>' . $dlink2;
+
+			} elseif ( isset( $image_lc) && $image_lc->exists() ) {
+				# Check if image with lowercase extension exists.
+				# It's not forbidden but in 99% it makes no sense to upload the same filename with uppercase extension
+				$dlink = $sk->makeKnownLinkObj( $nt_lc );
+				if ( $image_lc->allowInlineDisplay() ) {
+					$dlink2 = $sk->makeImageLinkObj( $nt_lc, wfMsgExt( 'fileexists-thumb', 'parseinline', $dlink ), $nt_lc->getText(), 'right', array(), false, true );
+				} elseif ( !$image_lc->allowInlineDisplay() && $image_lc->isSafeFile() ) {
+					$icon = $image_lc->iconThumb();
+					$dlink2 = '<div style="float:right" id="mw-media-icon"><a href="' . $image_lc->getURL() . '">' . $icon->toHtml() . '</a><br />' . $dlink . '</div>';
+				} else {
+					$dlink2 = '';
+				}
+
+				$warning .= '<li>' . wfMsgExt( 'fileexists-extension', 'parsemag' , $partname . '.' . $finalExt , $dlink ) . '</li>' . $dlink2;				
+
+			} elseif ( ( substr( $partname , 3, 3 ) == 'px-' || substr( $partname , 2, 3 ) == 'px-' ) && ereg( "[0-9]{2}" , substr( $partname , 0, 2) ) ) {
+				# Check for filenames like 50px- or 180px-, these are mostly thumbnails
+				$nt_thb = Title::newFromText( substr( $partname , strpos( $partname , '-' ) +1 ) . '.' . $finalExt );
+				$image_thb = new Image( $nt_thb );
+				if ($image_thb->exists() ) {
+					# Check if an image without leading '180px-' (or similiar) exists
+					$dlink = $sk->makeKnownLinkObj( $nt_thb);
+					if ( $image_thb->allowInlineDisplay() ) {
+						$dlink2 = $sk->makeImageLinkObj( $nt_thb, wfMsgExt( 'fileexists-thumb', 'parseinline', $dlink ), $nt_thb->getText(), 'right', array(), false, true );
+					} elseif ( !$image_thb->allowInlineDisplay() && $image_thb->isSafeFile() ) {
+						$icon = $image_thb->iconThumb();
+						$dlink2 = '<div style="float:right" id="mw-media-icon"><a href="' . $image_thb->getURL() . '">' . $icon->toHtml() . '</a><br />' . $dlink . '</div>';
+					} else {
+						$dlink2 = '';
+					}
+
+					$warning .= '<li>' . wfMsgExt( 'fileexists-thumbnail-yes', 'parsemag', $dlink ) . '</li>' . $dlink2;	
+				} else {
+					# Image w/o '180px-' does not exists, but we do not like these filenames
+					$warning .= '<li>' . wfMsgExt( 'file-thumbnail-no', 'parseinline' , substr( $partname , 0, strpos( $partname , '-' ) +1 ) ) . '</li>';
+				}
+			}
+			if ( $image->wasDeleted() ) {
+				# If the file existed before and was deleted, warn the user of this
+				# Don't bother doing so if the image exists now, however
+				$ltitle = SpecialPage::getTitleFor( 'Log' );
+				$llink = $sk->makeKnownLinkObj( $ltitle, wfMsgHtml( 'deletionlog' ), 'type=delete&page=' . $nt->getPrefixedUrl() );
+				$warning .= wfOpenElement( 'li' ) . wfMsgWikiHtml( 'filewasdeleted', $llink ) . wfCloseElement( 'li' );
+			}
+
+			if( $warning != '' ) {
+				/**
+				 * Stash the file in a temporary location; the user can choose
+				 * to let it through and we'll complete the upload then.
+				 */
+				return $this->uploadWarning( $warning );
+			}
+		}
+
+		/**
+		 * Try actually saving the thing...
+		 * It will show an error form on failure.
+		 */
+		$hasBeenMunged = !empty( $this->mSessionKey ) || $this->mRemoveTempFile;
+		if( $this->saveUploadedFile( $this->mUploadSaveName,
+		                             $this->mUploadTempName,
+		                             $hasBeenMunged ) ) {
+			/**
+			 * Update the upload log and create the description page
+			 * if it's a new file.
+			 */
+			$img = Image::newFromName( $this->mUploadSaveName );
+			$success = $img->recordUpload( $this->mUploadOldVersion,
+			                                $this->mUploadDescription,
+			                                $this->mLicense,
+			                                $this->mUploadCopyStatus,
+			                                $this->mUploadSource,
+			                                $this->mWatchthis );
+
+			if ( $success ) {
+				$this->showSuccess();
+				wfRunHooks( 'UploadComplete', array( &$img ) );
+			} else {
+				// Image::recordUpload() fails if the image went missing, which is
+				// unlikely, hence the lack of a specialised message
+				$wgOut->showFileNotFoundError( $this->mUploadSaveName );
+			}
+		}
+	}
+
+	/**
+	 * Move the uploaded file from its temporary location to the final
+	 * destination. If a previous version of the file exists, move
+	 * it into the archive subdirectory.
+	 *
+	 * @todo If the later save fails, we may have disappeared the original file.
+	 *
+	 * @param string $saveName
+	 * @param string $tempName full path to the temporary file
+	 * @param bool $useRename if true, doesn't check that the source file
+	 *                        is a PHP-managed upload temporary
+	 */
+	function saveUploadedFile( $saveName, $tempName, $useRename = false ) {
+		global $wgOut, $wgAllowCopyUploads;
+
+		if ( !$useRename AND $wgAllowCopyUploads AND $this->mSourceType == 'web' ) $useRename = true;
+
+		$fname= "SpecialUpload::saveUploadedFile";
+
+		$dest = wfImageDir( $saveName );
+		$archive = wfImageArchiveDir( $saveName );
+		if ( !is_dir( $dest ) ) wfMkdirParents( $dest );
+		if ( !is_dir( $archive ) ) wfMkdirParents( $archive );
+
+		$this->mSavedFile = "{$dest}/{$saveName}";
+
+		if( is_file( $this->mSavedFile ) ) {
+			$this->mUploadOldVersion = gmdate( 'YmdHis' ) . "!{$saveName}";
+			wfSuppressWarnings();
+			$success = rename( $this->mSavedFile, "${archive}/{$this->mUploadOldVersion}" );
+			wfRestoreWarnings();
+
+			if( ! $success ) {
+				$wgOut->showFileRenameError( $this->mSavedFile,
+				  "${archive}/{$this->mUploadOldVersion}" );
+				return false;
+			}
+			else wfDebug("$fname: moved file ".$this->mSavedFile." to ${archive}/{$this->mUploadOldVersion}\n");
+		}
+		else {
+			$this->mUploadOldVersion = '';
+		}
+
+		wfSuppressWarnings();
+		$success = $useRename
+			? rename( $tempName, $this->mSavedFile )
+			: move_uploaded_file( $tempName, $this->mSavedFile );
+		wfRestoreWarnings();
+
+		if( ! $success ) {
+			$wgOut->showFileCopyError( $tempName, $this->mSavedFile );
+			return false;
+		} else {
+			wfDebug("$fname: wrote tempfile $tempName to ".$this->mSavedFile."\n");
+		}
+
+		chmod( $this->mSavedFile, 0644 );
+		return true;
+	}
+
+	/**
+	 * Stash a file in a temporary directory for later processing
+	 * after the user has confirmed it.
+	 *
+	 * If the user doesn't explicitly cancel or accept, these files
+	 * can accumulate in the temp directory.
+	 *
+	 * @param string $saveName - the destination filename
+	 * @param string $tempName - the source temporary file to save
+	 * @return string - full path the stashed file, or false on failure
+	 * @access private
+	 */
+	function saveTempUploadedFile( $saveName, $tempName ) {
+		global $wgOut;
+		$archive = wfImageArchiveDir( $saveName, 'temp' );
+		if ( !is_dir ( $archive ) ) wfMkdirParents( $archive );
+		$stash = $archive . '/' . gmdate( "YmdHis" ) . '!' . $saveName;
+
+		$success = $this->mRemoveTempFile
+			? rename( $tempName, $stash )
+			: move_uploaded_file( $tempName, $stash );
+		if ( !$success ) {
+			$wgOut->showFileCopyError( $tempName, $stash );
+			return false;
+		}
+
+		return $stash;
+	}
+
+	/**
+	 * Stash a file in a temporary directory for later processing,
+	 * and save the necessary descriptive info into the session.
+	 * Returns a key value which will be passed through a form
+	 * to pick up the path info on a later invocation.
+	 *
+	 * @return int
+	 * @access private
+	 */
+	function stashSession() {
+		$stash = $this->saveTempUploadedFile(
+			$this->mUploadSaveName, $this->mUploadTempName );
+
+		if( !$stash ) {
+			# Couldn't save the file.
+			return false;
+		}
+
+		$key = mt_rand( 0, 0x7fffffff );
+		$_SESSION['wsUploadData'][$key] = array(
+			'mUploadTempName' => $stash,
+			'mUploadSize'     => $this->mUploadSize,
+			'mOname'          => $this->mOname );
+		return $key;
+	}
+
+	/**
+	 * Remove a temporarily kept file stashed by saveTempUploadedFile().
+	 * @access private
+	 * @return success
+	 */
+	function unsaveUploadedFile() {
+		global $wgOut;
+		wfSuppressWarnings();
+		$success = unlink( $this->mUploadTempName );
+		wfRestoreWarnings();
+		if ( ! $success ) {
+			$wgOut->showFileDeleteError( $this->mUploadTempName );
+			return false;
+		} else {
+			return true;
+		}
+	}
+
+	/* -------------------------------------------------------------- */
+
+	/**
+	 * Show some text and linkage on successful upload.
+	 * @access private
+	 */
+	function showSuccess() {
+		global $wgUser, $wgOut, $wgContLang;
+
+		$sk = $wgUser->getSkin();
+		$ilink = $sk->makeMediaLink( $this->mUploadSaveName, Image::imageUrl( $this->mUploadSaveName ) );
+		$dname = $wgContLang->getNsText( NS_IMAGE ) . ':'.$this->mUploadSaveName;
+		$dlink = $sk->makeKnownLink( $dname, $dname );
+
+		$wgOut->addHTML( '<h2>' . wfMsgHtml( 'successfulupload' ) . "</h2>\n" );
+		$text = wfMsgWikiHtml( 'fileuploaded', $ilink, $dlink );
+		$wgOut->addHTML( $text );
+		$wgOut->returnToMain( false );
+	}
+
+	/**
+	 * @param string $error as HTML
+	 * @access private
+	 */
+	function uploadError( $error ) {
+		global $wgOut;
+		$wgOut->addHTML( "<h2>" . wfMsgHtml( 'uploadwarning' ) . "</h2>\n" );
+		$wgOut->addHTML( "<span class='error'>{$error}</span>\n" );
+	}
+
+	/**
+	 * There's something wrong with this file, not enough to reject it
+	 * totally but we require manual intervention to save it for real.
+	 * Stash it away, then present a form asking to confirm or cancel.
+	 *
+	 * @param string $warning as HTML
+	 * @access private
+	 */
+	function uploadWarning( $warning ) {
+		global $wgOut;
+		global $wgUseCopyrightUpload;
+
+		$this->mSessionKey = $this->stashSession();
+		if( !$this->mSessionKey ) {
+			# Couldn't save file; an error has been displayed so let's go.
+			return;
+		}
+
+		$wgOut->addHTML( "<h2>" . wfMsgHtml( 'uploadwarning' ) . "</h2>\n" );
+		$wgOut->addHTML( "<ul class='warning'>{$warning}</ul><br />\n" );
+
+		$save = wfMsgHtml( 'savefile' );
+		$reupload = wfMsgHtml( 'reupload' );
+		$iw = wfMsgWikiHtml( 'ignorewarning' );
+		$reup = wfMsgWikiHtml( 'reuploaddesc' );
+		$titleObj = SpecialPage::getTitleFor( 'Upload' );
+		$action = $titleObj->escapeLocalURL( 'action=submit' );
+
+		if ( $wgUseCopyrightUpload )
+		{
+			$copyright =  "
+	<input type='hidden' name='wpUploadCopyStatus' value=\"" . htmlspecialchars( $this->mUploadCopyStatus ) . "\" />
+	<input type='hidden' name='wpUploadSource' value=\"" . htmlspecialchars( $this->mUploadSource ) . "\" />
+	";
+		} else {
+			$copyright = "";
+		}
+
+		$wgOut->addHTML( "
+	<form id='uploadwarning' method='post' enctype='multipart/form-data' action='$action'>
+		<input type='hidden' name='wpIgnoreWarning' value='1' />
+		<input type='hidden' name='wpSessionKey' value=\"" . htmlspecialchars( $this->mSessionKey ) . "\" />
+		<input type='hidden' name='wpUploadDescription' value=\"" . htmlspecialchars( $this->mUploadDescription ) . "\" />
+		<input type='hidden' name='wpLicense' value=\"" . htmlspecialchars( $this->mLicense ) . "\" />
+		<input type='hidden' name='wpDestFile' value=\"" . htmlspecialchars( $this->mDestFile ) . "\" />
+		<input type='hidden' name='wpWatchthis' value=\"" . htmlspecialchars( intval( $this->mWatchthis ) ) . "\" />
+	{$copyright}
+	<table border='0'>
+		<tr>
+			<tr>
+				<td align='right'>
+					<input tabindex='2' type='submit' name='wpUpload' value=\"$save\" />
+				</td>
+				<td align='left'>$iw</td>
+			</tr>
+			<tr>
+				<td align='right'>
+					<input tabindex='2' type='submit' name='wpReUpload' value=\"{$reupload}\" />
+				</td>
+				<td align='left'>$reup</td>
+			</tr>
+		</tr>
+	</table></form>\n" );
+	}
+
+	/**
+	 * Displays the main upload form, optionally with a highlighted
+	 * error message up at the top.
+	 *
+	 * @param string $msg as HTML
+	 * @access private
+	 */
+	function mainUploadForm( $msg='' ) {
+		global $wgOut, $wgUser;
+		global $wgUseCopyrightUpload;
+		global $wgRequest, $wgAllowCopyUploads;
+
+		if( !wfRunHooks( 'UploadForm:initial', array( &$this ) ) )
+		{
+			wfDebug( "Hook 'UploadForm:initial' broke output of the upload form" );
+			return false;
+		}
+
+		$cols = intval($wgUser->getOption( 'cols' ));
+		$ew = $wgUser->getOption( 'editwidth' );
+		if ( $ew ) $ew = " style=\"width:100%\"";
+		else $ew = '';
+
+		if ( '' != $msg ) {
+			$sub = wfMsgHtml( 'uploaderror' );
+			$wgOut->addHTML( "<h2>{$sub}</h2>\n" .
+			  "<span class='error'>{$msg}</span>\n" );
+		}
+		$wgOut->addHTML( '<div id="uploadtext">' );
+		$wgOut->addWikiText( wfMsgNoTrans( 'uploadtext', $this->mDestFile ) );
+		$wgOut->addHTML( '</div>' );
+
+		$sourcefilename = wfMsgHtml( 'sourcefilename' );
+		$destfilename = wfMsgHtml( 'destfilename' );
+		$summary = wfMsgWikiHtml( 'fileuploadsummary' );
+
+		$licenses = new Licenses();
+		$license = wfMsgHtml( 'license' );
+		$nolicense = wfMsgHtml( 'nolicense' );
+		$licenseshtml = $licenses->getHtml();
+
+		$ulb = wfMsgHtml( 'uploadbtn' );
+
+
+		$titleObj = SpecialPage::getTitleFor( 'Upload' );
+		$action = $titleObj->escapeLocalURL();
+
+		$encDestFile = htmlspecialchars( $this->mDestFile );
+
+		$watchChecked =
+			( $wgUser->getOption( 'watchdefault' ) ||
+				( $wgUser->getOption( 'watchcreations' ) && $this->mDestFile == '' ) )
+			? 'checked="checked"'
+			: '';
+
+		// Prepare form for upload or upload/copy
+		if( $wgAllowCopyUploads && $wgUser->isAllowed( 'upload_by_url' ) ) {
+			$filename_form =
+				"<input type='radio' id='wpSourceTypeFile' name='wpSourceType' value='file' onchange='toggle_element_activation(\"wpUploadFileURL\",\"wpUploadFile\")' checked />" .
+				"<input tabindex='1' type='file' name='wpUploadFile' id='wpUploadFile' onfocus='toggle_element_activation(\"wpUploadFileURL\",\"wpUploadFile\");toggle_element_check(\"wpSourceTypeFile\",\"wpSourceTypeURL\")'" .
+				($this->mDestFile?"":"onchange='fillDestFilename(\"wpUploadFile\")' ") . "size='40' />" .
+				wfMsgHTML( 'upload_source_file' ) . "<br/>" .
+				"<input type='radio' id='wpSourceTypeURL' name='wpSourceType' value='web' onchange='toggle_element_activation(\"wpUploadFile\",\"wpUploadFileURL\")' />" .
+				"<input tabindex='1' type='text' name='wpUploadFileURL' id='wpUploadFileURL' onfocus='toggle_element_activation(\"wpUploadFile\",\"wpUploadFileURL\");toggle_element_check(\"wpSourceTypeURL\",\"wpSourceTypeFile\")'" .
+				($this->mDestFile?"":"onchange='fillDestFilename(\"wpUploadFileURL\")' ") . "size='40' DISABLED />" .
+				wfMsgHtml( 'upload_source_url' ) ;
+		} else {
+			$filename_form =
+				"<input tabindex='1' type='file' name='wpUploadFile' id='wpUploadFile' " .
+				($this->mDestFile?"":"onchange='fillDestFilename(\"wpUploadFile\")' ") .
+				"size='40' />" .
+				"<input type='hidden' name='wpSourceType' value='file' />" ;
+		}
+
+		$wgOut->addHTML( "
+	<form id='upload' method='post' enctype='multipart/form-data' action=\"$action\">
+		<table border='0'>
+		<tr>
+	  {$this->uploadFormTextTop}
+			<td align='right' valign='top'><label for='wpUploadFile'>{$sourcefilename}:</label></td>
+			<td align='left'>
+				{$filename_form}
+			</td>
+		</tr>
+		<tr>
+			<td align='right'><label for='wpDestFile'>{$destfilename}:</label></td>
+			<td align='left'>
+				<input tabindex='2' type='text' name='wpDestFile' id='wpDestFile' size='40' value=\"$encDestFile\" />
+			</td>
+		</tr>
+		<tr>
+			<td align='right'><label for='wpUploadDescription'>{$summary}</label></td>
+			<td align='left'>
+				<textarea tabindex='3' name='wpUploadDescription' id='wpUploadDescription' rows='6' cols='{$cols}'{$ew}>" . htmlspecialchars( $this->mUploadDescription ) . "</textarea>
+	   {$this->uploadFormTextAfterSummary}
+			</td>
+		</tr>
+		<tr>" );
+
+		if ( $licenseshtml != '' ) {
+			global $wgStylePath;
+			$wgOut->addHTML( "
+			<td align='right'><label for='wpLicense'>$license:</label></td>
+			<td align='left'>
+				<script type='text/javascript' src=\"$wgStylePath/common/upload.js\"></script>
+				<select name='wpLicense' id='wpLicense' tabindex='4'
+					onchange='licenseSelectorCheck()'>
+					<option value=''>$nolicense</option>
+					$licenseshtml
+				</select>
+			</td>
+			</tr>
+			<tr>
+		");
+		}
+
+		if ( $wgUseCopyrightUpload ) {
+			$filestatus = wfMsgHtml ( 'filestatus' );
+			$copystatus =  htmlspecialchars( $this->mUploadCopyStatus );
+			$filesource = wfMsgHtml ( 'filesource' );
+			$uploadsource = htmlspecialchars( $this->mUploadSource );
+
+			$wgOut->addHTML( "
+			        <td align='right' nowrap='nowrap'><label for='wpUploadCopyStatus'>$filestatus:</label></td>
+			        <td><input tabindex='5' type='text' name='wpUploadCopyStatus' id='wpUploadCopyStatus' value=\"$copystatus\" size='40' /></td>
+		        </tr>
+			<tr>
+		        	<td align='right'><label for='wpUploadCopyStatus'>$filesource:</label></td>
+			        <td><input tabindex='6' type='text' name='wpUploadSource' id='wpUploadCopyStatus' value=\"$uploadsource\" size='40' /></td>
+			</tr>
+			<tr>
+		");
+		}
+
+
+		$wgOut->addHtml( "
+		<td></td>
+		<td>
+			<input tabindex='7' type='checkbox' name='wpWatchthis' id='wpWatchthis' $watchChecked value='true' />
+			<label for='wpWatchthis'>" . wfMsgHtml( 'watchthisupload' ) . "</label>
+			<input tabindex='8' type='checkbox' name='wpIgnoreWarning' id='wpIgnoreWarning' value='true' />
+			<label for='wpIgnoreWarning'>" . wfMsgHtml( 'ignorewarnings' ) . "</label>
+		</td>
+	</tr>
+	<tr>
+		<td></td>
+		<td align='left'><input tabindex='9' type='submit' name='wpUpload' value=\"{$ulb}\" /></td>
+	</tr>
+
+	<tr>
+		<td></td>
+		<td align='left'>
+		" );
+		$wgOut->addWikiText( wfMsgForContent( 'edittools' ) );
+		$wgOut->addHTML( "
+		</td>
+	</tr>
+
+	</table>
+	</form>" );
+	}
+
+	/* -------------------------------------------------------------- */
+
+	/**
+	 * Split a file into a base name and all dot-delimited 'extensions'
+	 * on the end. Some web server configurations will fall back to
+	 * earlier pseudo-'extensions' to determine type and execute
+	 * scripts, so the blacklist needs to check them all.
+	 *
+	 * @return array
+	 */
+	function splitExtensions( $filename ) {
+		$bits = explode( '.', $filename );
+		$basename = array_shift( $bits );
+		return array( $basename, $bits );
+	}
+
+	/**
+	 * Perform case-insensitive match against a list of file extensions.
+	 * Returns true if the extension is in the list.
+	 *
+	 * @param string $ext
+	 * @param array $list
+	 * @return bool
+	 */
+	function checkFileExtension( $ext, $list ) {
+		return in_array( strtolower( $ext ), $list );
+	}
+
+	/**
+	 * Perform case-insensitive match against a list of file extensions.
+	 * Returns true if any of the extensions are in the list.
+	 *
+	 * @param array $ext
+	 * @param array $list
+	 * @return bool
+	 */
+	function checkFileExtensionList( $ext, $list ) {
+		foreach( $ext as $e ) {
+			if( in_array( strtolower( $e ), $list ) ) {
+				return true;
+			}
+		}
+		return false;
+	}
+
+	/**
+	 * Verifies that it's ok to include the uploaded file
+	 *
+	 * @param string $tmpfile the full path of the temporary file to verify
+	 * @param string $extension The filename extension that the file is to be served with
+	 * @return mixed true of the file is verified, a WikiError object otherwise.
+	 */
+	function verify( $tmpfile, $extension ) {
+		#magically determine mime type
+		$magic=& MimeMagic::singleton();
+		$mime= $magic->guessMimeType($tmpfile,false);
+
+		$fname= "SpecialUpload::verify";
+
+		#check mime type, if desired
+		global $wgVerifyMimeType;
+		if ($wgVerifyMimeType) {
+
+			#check mime type against file extension
+			if( !$this->verifyExtension( $mime, $extension ) ) {
+				return new WikiErrorMsg( 'uploadcorrupt' );
+			}
+
+			#check mime type blacklist
+			global $wgMimeTypeBlacklist;
+			if( isset($wgMimeTypeBlacklist) && !is_null($wgMimeTypeBlacklist)
+				&& $this->checkFileExtension( $mime, $wgMimeTypeBlacklist ) ) {
+				return new WikiErrorMsg( 'filetype-badmime', htmlspecialchars( $mime ) );
+			}
+		}
+
+		#check for htmlish code and javascript
+		if( $this->detectScript ( $tmpfile, $mime, $extension ) ) {
+			return new WikiErrorMsg( 'uploadscripted' );
+		}
+
+		/**
+		* Scan the uploaded file for viruses
+		*/
+		$virus= $this->detectVirus($tmpfile);
+		if ( $virus ) {
+			return new WikiErrorMsg( 'uploadvirus', htmlspecialchars($virus) );
+		}
+
+		wfDebug( "$fname: all clear; passing.\n" );
+		return true;
+	}
+
+	/**
+	 * Checks if the mime type of the uploaded file matches the file extension.
+	 *
+	 * @param string $mime the mime type of the uploaded file
+	 * @param string $extension The filename extension that the file is to be served with
+	 * @return bool
+	 */
+	function verifyExtension( $mime, $extension ) {
+		$fname = 'SpecialUpload::verifyExtension';
+
+		$magic =& MimeMagic::singleton();
+
+		if ( ! $mime || $mime == 'unknown' || $mime == 'unknown/unknown' )
+			if ( ! $magic->isRecognizableExtension( $extension ) ) {
+				wfDebug( "$fname: passing file with unknown detected mime type; unrecognized extension '$extension', can't verify\n" );
+				return true;
+			} else {
+				wfDebug( "$fname: rejecting file with unknown detected mime type; recognized extension '$extension', so probably invalid file\n" );
+				return false;
+			}
+
+		$match= $magic->isMatchingExtension($extension,$mime);
+
+		if ($match===NULL) {
+			wfDebug( "$fname: no file extension known for mime type $mime, passing file\n" );
+			return true;
+		} elseif ($match===true) {
+			wfDebug( "$fname: mime type $mime matches extension $extension, passing file\n" );
+
+			#TODO: if it's a bitmap, make sure PHP or ImageMagic resp. can handle it!
+			return true;
+
+		} else {
+			wfDebug( "$fname: mime type $mime mismatches file extension $extension, rejecting file\n" );
+			return false;
+		}
+	}
+
+	/** Heuristig for detecting files that *could* contain JavaScript instructions or
+	* things that may look like HTML to a browser and are thus
+	* potentially harmful. The present implementation will produce false positives in some situations.
+	*
+	* @param string $file Pathname to the temporary upload file
+	* @param string $mime The mime type of the file
+	* @param string $extension The extension of the file
+	* @return bool true if the file contains something looking like embedded scripts
+	*/
+	function detectScript($file, $mime, $extension) {
+		global $wgAllowTitlesInSVG;
+
+		#ugly hack: for text files, always look at the entire file.
+		#For binarie field, just check the first K.
+
+		if (strpos($mime,'text/')===0) $chunk = file_get_contents( $file );
+		else {
+			$fp = fopen( $file, 'rb' );
+			$chunk = fread( $fp, 1024 );
+			fclose( $fp );
+		}
+
+		$chunk= strtolower( $chunk );
+
+		if (!$chunk) return false;
+
+		#decode from UTF-16 if needed (could be used for obfuscation).
+		if (substr($chunk,0,2)=="\xfe\xff") $enc= "UTF-16BE";
+		elseif (substr($chunk,0,2)=="\xff\xfe") $enc= "UTF-16LE";
+		else $enc= NULL;
+
+		if ($enc) $chunk= iconv($enc,"ASCII//IGNORE",$chunk);
+
+		$chunk= trim($chunk);
+
+		#FIXME: convert from UTF-16 if necessarry!
+
+		wfDebug("SpecialUpload::detectScript: checking for embedded scripts and HTML stuff\n");
+
+		#check for HTML doctype
+		if (eregi("<!DOCTYPE *X?HTML",$chunk)) return true;
+
+		/**
+		* Internet Explorer for Windows performs some really stupid file type
+		* autodetection which can cause it to interpret valid image files as HTML
+		* and potentially execute JavaScript, creating a cross-site scripting
+		* attack vectors.
+		*
+		* Apple's Safari browser also performs some unsafe file type autodetection
+		* which can cause legitimate files to be interpreted as HTML if the
+		* web server is not correctly configured to send the right content-type
+		* (or if you're really uploading plain text and octet streams!)
+		*
+		* Returns true if IE is likely to mistake the given file for HTML.
+		* Also returns true if Safari would mistake the given file for HTML
+		* when served with a generic content-type.
+		*/
+
+		$tags = array(
+			'<body',
+			'<head',
+			'<html',   #also in safari
+			'<img',
+			'<pre',
+			'<script', #also in safari
+			'<table'
+			);
+		if( ! $wgAllowTitlesInSVG && $extension !== 'svg' && $mime !== 'image/svg' ) {
+			$tags[] = '<title';
+		}
+
+		foreach( $tags as $tag ) {
+			if( false !== strpos( $chunk, $tag ) ) {
+				return true;
+			}
+		}
+
+		/*
+		* look for javascript
+		*/
+
+		#resolve entity-refs to look at attributes. may be harsh on big files... cache result?
+		$chunk = Sanitizer::decodeCharReferences( $chunk );
+
+		#look for script-types
+		if (preg_match('!type\s*=\s*[\'"]?\s*(?:\w*/)?(?:ecma|java)!sim',$chunk)) return true;
+
+		#look for html-style script-urls
+		if (preg_match('!(?:href|src|data)\s*=\s*[\'"]?\s*(?:ecma|java)script:!sim',$chunk)) return true;
+
+		#look for css-style script-urls
+		if (preg_match('!url\s*\(\s*[\'"]?\s*(?:ecma|java)script:!sim',$chunk)) return true;
+
+		wfDebug("SpecialUpload::detectScript: no scripts found\n");
+		return false;
+	}
+
+	/** Generic wrapper function for a virus scanner program.
+	* This relies on the $wgAntivirus and $wgAntivirusSetup variables.
+	* $wgAntivirusRequired may be used to deny upload if the scan fails.
+	*
+	* @param string $file Pathname to the temporary upload file
+	* @return mixed false if not virus is found, NULL if the scan fails or is disabled,
+	*         or a string containing feedback from the virus scanner if a virus was found.
+	*         If textual feedback is missing but a virus was found, this function returns true.
+	*/
+	function detectVirus($file) {
+		global $wgAntivirus, $wgAntivirusSetup, $wgAntivirusRequired, $wgOut;
+
+		$fname= "SpecialUpload::detectVirus";
+
+		if (!$wgAntivirus) { #disabled?
+			wfDebug("$fname: virus scanner disabled\n");
+
+			return NULL;
+		}
+
+		if (!$wgAntivirusSetup[$wgAntivirus]) {
+			wfDebug("$fname: unknown virus scanner: $wgAntivirus\n");
+
+			$wgOut->addHTML( "<div class='error'>Bad configuration: unknown virus scanner: <i>$wgAntivirus</i></div>\n" ); #LOCALIZE
+
+			return "unknown antivirus: $wgAntivirus";
+		}
+
+		#look up scanner configuration
+		$virus_scanner= $wgAntivirusSetup[$wgAntivirus]["command"]; #command pattern
+		$virus_scanner_codes= $wgAntivirusSetup[$wgAntivirus]["codemap"]; #exit-code map
+		$msg_pattern= $wgAntivirusSetup[$wgAntivirus]["messagepattern"]; #message pattern
+
+		$scanner= $virus_scanner; #copy, so we can resolve the pattern
+
+		if (strpos($scanner,"%f")===false) $scanner.= " ".wfEscapeShellArg($file); #simple pattern: append file to scan
+		else $scanner= str_replace("%f",wfEscapeShellArg($file),$scanner); #complex pattern: replace "%f" with file to scan
+
+		wfDebug("$fname: running virus scan: $scanner \n");
+
+		#execute virus scanner
+		$code= false;
+
+		#NOTE: there's a 50 line workaround to make stderr redirection work on windows, too.
+		#      that does not seem to be worth the pain.
+		#      Ask me (Duesentrieb) about it if it's ever needed.
+		$output = array();
+		if (wfIsWindows()) exec("$scanner",$output,$code);
+		else exec("$scanner 2>&1",$output,$code);
+
+		$exit_code= $code; #remember for user feedback
+
+		if ($virus_scanner_codes) { #map exit code to AV_xxx constants.
+			if (isset($virus_scanner_codes[$code])) {
+				$code= $virus_scanner_codes[$code]; # explicit mapping
+			} else if (isset($virus_scanner_codes["*"])) {
+				$code= $virus_scanner_codes["*"];   # fallback mapping
+			}
+		}
+
+		if ($code===AV_SCAN_FAILED) { #scan failed (code was mapped to false by $virus_scanner_codes)
+			wfDebug("$fname: failed to scan $file (code $exit_code).\n");
+
+			if ($wgAntivirusRequired) { return "scan failed (code $exit_code)"; }
+			else { return NULL; }
+		}
+		else if ($code===AV_SCAN_ABORTED) { #scan failed because filetype is unknown (probably imune)
+			wfDebug("$fname: unsupported file type $file (code $exit_code).\n");
+			return NULL;
+		}
+		else if ($code===AV_NO_VIRUS) {
+			wfDebug("$fname: file passed virus scan.\n");
+			return false; #no virus found
+		}
+		else {
+			$output= join("\n",$output);
+			$output= trim($output);
+
+			if (!$output) $output= true; #if there's no output, return true
+			else if ($msg_pattern) {
+				$groups= array();
+				if (preg_match($msg_pattern,$output,$groups)) {
+					if ($groups[1]) $output= $groups[1];
+				}
+			}
+
+			wfDebug("$fname: FOUND VIRUS! scanner feedback: $output");
+			return $output;
+		}
+	}
+
+	/**
+	 * Check if the temporary file is MacBinary-encoded, as some uploads
+	 * from Internet Explorer on Mac OS Classic and Mac OS X will be.
+	 * If so, the data fork will be extracted to a second temporary file,
+	 * which will then be checked for validity and either kept or discarded.
+	 *
+	 * @access private
+	 */
+	function checkMacBinary() {
+		$macbin = new MacBinary( $this->mUploadTempName );
+		if( $macbin->isValid() ) {
+			$dataFile = tempnam( wfTempDir(), "WikiMacBinary" );
+			$dataHandle = fopen( $dataFile, 'wb' );
+
+			wfDebug( "SpecialUpload::checkMacBinary: Extracting MacBinary data fork to $dataFile\n" );
+			$macbin->extractData( $dataHandle );
+
+			$this->mUploadTempName = $dataFile;
+			$this->mUploadSize = $macbin->dataForkLength();
+
+			// We'll have to manually remove the new file if it's not kept.
+			$this->mRemoveTempFile = true;
+		}
+		$macbin->close();
+	}
+
+	/**
+	 * If we've modified the upload file we need to manually remove it
+	 * on exit to clean up.
+	 * @access private
+	 */
+	function cleanupTempFile() {
+		if( $this->mRemoveTempFile && file_exists( $this->mUploadTempName ) ) {
+			wfDebug( "SpecialUpload::cleanupTempFile: Removing temporary file $this->mUploadTempName\n" );
+			unlink( $this->mUploadTempName );
+		}
+	}
+
+	/**
+	 * Check if there's an overwrite conflict and, if so, if restrictions
+	 * forbid this user from performing the upload.
+	 *
+	 * @return mixed true on success, WikiError on failure
+	 * @access private
+	 */
+	function checkOverwrite( $name ) {
+		$img = Image::newFromName( $name );
+		if( is_null( $img ) ) {
+			// Uh... this shouldn't happen ;)
+			// But if it does, fall through to previous behavior
+			return false;
+		}
+
+		$error = '';
+		if( $img->exists() ) {
+			global $wgUser, $wgOut;
+			if( $img->isLocal() ) {
+				if( !$wgUser->isAllowed( 'reupload' ) ) {
+					$error = 'fileexists-forbidden';
+				}
+			} else {
+				if( !$wgUser->isAllowed( 'reupload' ) ||
+				    !$wgUser->isAllowed( 'reupload-shared' ) ) {
+					$error = "fileexists-shared-forbidden";
+				}
+			}
+		}
+
+		if( $error ) {
+			$errorText = wfMsg( $error, wfEscapeWikiText( $img->getName() ) );
+			return new WikiError( $wgOut->parse( $errorText ) );
+		}
+
+		// Rockin', go ahead and upload
+		return true;
+	}
+
+}
+?>
Index: /MediaWiki/branches/1.11/includes/SpecialUploadMogile.php
===================================================================
--- /MediaWiki/branches/1.11/includes/SpecialUploadMogile.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/SpecialUploadMogile.php	(revision 1280)
@@ -0,0 +1,136 @@
+<?php
+/**
+ *
+ * @addtogroup SpecialPage
+ */
+
+/**
+ * You will need the extension MogileClient to use this special page.
+ */
+require_once( 'MogileFS.php' );
+
+/**
+ * Entry point
+ */
+function wfSpecialUploadMogile() {
+	global $wgRequest;
+	$form = new UploadFormMogile( $wgRequest );
+	$form->execute();
+}
+
+/**
+ * Extends Special:Upload with MogileFS.
+ * @addtogroup SpecialPage
+ */
+class UploadFormMogile extends UploadForm {
+	/**
+	 * Move the uploaded file from its temporary location to the final
+	 * destination. If a previous version of the file exists, move
+	 * it into the archive subdirectory.
+	 *
+	 * @todo If the later save fails, we may have disappeared the original file.
+	 *
+	 * @param string $saveName
+	 * @param string $tempName full path to the temporary file
+	 * @param bool $useRename  Not used in this implementation
+	 */
+	function saveUploadedFile( $saveName, $tempName, $useRename = false ) {
+		global $wgOut;
+		$mfs = MogileFS::NewMogileFS();
+
+		$this->mSavedFile = "image!{$saveName}";
+
+		if( $mfs->getPaths( $this->mSavedFile )) {
+			$this->mUploadOldVersion = gmdate( 'YmdHis' ) . "!{$saveName}";
+			if( !$mfs->rename( $this->mSavedFile, "archive!{$this->mUploadOldVersion}" ) ) {
+				$wgOut->showFileRenameError( $this->mSavedFile,
+				  "archive!{$this->mUploadOldVersion}" );
+				return false;
+			}
+		} else {
+			$this->mUploadOldVersion = '';
+		}
+
+		if ( $this->mStashed ) {
+			if (!$mfs->rename($tempName,$this->mSavedFile)) {
+				$wgOut->showFileRenameError($tempName, $this->mSavedFile );
+				return false;
+			}
+		} else {
+			if ( !$mfs->saveFile($this->mSavedFile,'normal',$tempName )) {
+				$wgOut->showFileCopyError( $tempName, $this->mSavedFile );
+				return false;
+			}
+			unlink($tempName);
+		}
+		return true;
+	}
+
+	/**
+	 * Stash a file in a temporary directory for later processing
+	 * after the user has confirmed it.
+	 *
+	 * If the user doesn't explicitly cancel or accept, these files
+	 * can accumulate in the temp directory.
+	 *
+	 * @param string $saveName - the destination filename
+	 * @param string $tempName - the source temporary file to save
+	 * @return string - full path the stashed file, or false on failure
+	 * @access private
+	 */
+	function saveTempUploadedFile( $saveName, $tempName ) {
+		global $wgOut;
+
+		$stash = 'stash!' . gmdate( "YmdHis" ) . '!' . $saveName;
+		$mfs = MogileFS::NewMogileFS();
+		if ( !$mfs->saveFile( $stash, 'normal', $tempName ) ) {
+			$wgOut->showFileCopyError( $tempName, $stash );
+			return false;
+		}
+		unlink($tempName);
+		return $stash;
+	}
+
+	/**
+	 * Stash a file in a temporary directory for later processing,
+	 * and save the necessary descriptive info into the session.
+	 * Returns a key value which will be passed through a form
+	 * to pick up the path info on a later invocation.
+	 *
+	 * @return int
+	 * @access private
+	 */
+	function stashSession() {
+		$stash = $this->saveTempUploadedFile(
+			$this->mUploadSaveName, $this->mUploadTempName );
+
+		if( !$stash ) {
+			# Couldn't save the file.
+			return false;
+		}
+
+		$key = mt_rand( 0, 0x7fffffff );
+		$_SESSION['wsUploadData'][$key] = array(
+			'mUploadTempName' => $stash,
+			'mUploadSize'     => $this->mUploadSize,
+			'mOname'          => $this->mOname );
+		return $key;
+	}
+
+	/**
+	 * Remove a temporarily kept file stashed by saveTempUploadedFile().
+	 * @access private
+	 * @return success
+	 */
+	function unsaveUploadedFile() {
+		global $wgOut;
+		$mfs = MogileFS::NewMogileFS();
+		if ( ! $mfs->delete( $this->mUploadTempName ) ) {
+			$wgOut->showFileDeleteError( $this->mUploadTempName );
+			return false;
+		} else {
+			return true;
+		}
+	}
+}
+?>
Index: /MediaWiki/branches/1.11/includes/SpecialUserlogin.php
===================================================================
--- /MediaWiki/branches/1.11/includes/SpecialUserlogin.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/SpecialUserlogin.php	(revision 1280)
@@ -0,0 +1,811 @@
+<?php
+/**
+ *
+ * @addtogroup SpecialPage
+ */
+
+/**
+ * constructor
+ */
+function wfSpecialUserlogin() {
+	global $wgCommandLineMode;
+	global $wgRequest;
+	if( session_id() == '' ) {
+		wfSetupSession();
+	}
+
+	$form = new LoginForm( $wgRequest );
+	$form->execute();
+}
+
+/**
+ * implements Special:Login
+ * @addtogroup SpecialPage
+ */
+class LoginForm {
+
+	const SUCCESS = 0;
+	const NO_NAME = 1;
+	const ILLEGAL = 2;
+	const WRONG_PLUGIN_PASS = 3;
+	const NOT_EXISTS = 4;
+	const WRONG_PASS = 5;
+	const EMPTY_PASS = 6;
+	const RESET_PASS = 7;
+
+	var $mName, $mPassword, $mRetype, $mReturnTo, $mCookieCheck, $mPosted;
+	var $mAction, $mCreateaccount, $mCreateaccountMail, $mMailmypassword;
+	var $mLoginattempt, $mRemember, $mEmail, $mDomain, $mLanguage;
+
+	/**
+	 * Constructor
+	 * @param WebRequest $request A WebRequest object passed by reference
+	 */
+	function LoginForm( &$request ) {
+		global $wgLang, $wgAllowRealName, $wgEnableEmail;
+		global $wgAuth;
+
+		$this->mType = $request->getText( 'type' );
+		$this->mName = $request->getText( 'wpName' );
+		$this->mPassword = $request->getText( 'wpPassword' );
+		$this->mRetype = $request->getText( 'wpRetype' );
+		$this->mDomain = $request->getText( 'wpDomain' );
+		$this->mReturnTo = $request->getVal( 'returnto' );
+		$this->mCookieCheck = $request->getVal( 'wpCookieCheck' );
+		$this->mPosted = $request->wasPosted();
+		$this->mCreateaccount = $request->getCheck( 'wpCreateaccount' );
+		$this->mCreateaccountMail = $request->getCheck( 'wpCreateaccountMail' )
+		                            && $wgEnableEmail;
+		$this->mMailmypassword = $request->getCheck( 'wpMailmypassword' )
+		                         && $wgEnableEmail;
+		$this->mLoginattempt = $request->getCheck( 'wpLoginattempt' );
+		$this->mAction = $request->getVal( 'action' );
+		$this->mRemember = $request->getCheck( 'wpRemember' );
+		$this->mLanguage = $request->getText( 'uselang' );
+
+		if( $wgEnableEmail ) {
+			$this->mEmail = $request->getText( 'wpEmail' );
+		} else {
+			$this->mEmail = '';
+		}
+		if( $wgAllowRealName ) {
+		    $this->mRealName = $request->getText( 'wpRealName' );
+		} else {
+		    $this->mRealName = '';
+		}
+
+		if( !$wgAuth->validDomain( $this->mDomain ) ) {
+			$this->mDomain = 'invaliddomain';
+		}
+		$wgAuth->setDomain( $this->mDomain );
+
+		# When switching accounts, it sucks to get automatically logged out
+		if( $this->mReturnTo == $wgLang->specialPage( 'Userlogout' ) ) {
+			$this->mReturnTo = '';
+		}
+	}
+
+	function execute() {
+		if ( !is_null( $this->mCookieCheck ) ) {
+			$this->onCookieRedirectCheck( $this->mCookieCheck );
+			return;
+		} else if( $this->mPosted ) {
+			if( $this->mCreateaccount ) {
+				return $this->addNewAccount();
+			} else if ( $this->mCreateaccountMail ) {
+				return $this->addNewAccountMailPassword();
+			} else if ( $this->mMailmypassword ) {
+				return $this->mailPassword();
+			} else if ( ( 'submitlogin' == $this->mAction ) || $this->mLoginattempt ) {
+				return $this->processLogin();
+			}
+		}
+		$this->mainLoginForm( '' );
+	}
+
+	/**
+	 * @private
+	 */
+	function addNewAccountMailPassword() {
+		global $wgOut;
+
+		if ('' == $this->mEmail) {
+			$this->mainLoginForm( wfMsg( 'noemail', htmlspecialchars( $this->mName ) ) );
+			return;
+		}
+
+		$u = $this->addNewaccountInternal();
+
+		if ($u == NULL) {
+			return;
+		}
+
+		// Wipe the initial password and mail a temporary one
+		$u->setPassword( null );
+		$u->saveSettings();
+		$result = $this->mailPasswordInternal( $u, false );
+
+		wfRunHooks( 'AddNewAccount', array( $u ) );
+
+		$wgOut->setPageTitle( wfMsg( 'accmailtitle' ) );
+		$wgOut->setRobotpolicy( 'noindex,nofollow' );
+		$wgOut->setArticleRelated( false );
+
+		if( WikiError::isError( $result ) ) {
+			$this->mainLoginForm( wfMsg( 'mailerror', $result->getMessage() ) );
+		} else {
+			$wgOut->addWikiText( wfMsg( 'accmailtext', $u->getName(), $u->getEmail() ) );
+			$wgOut->returnToMain( false );
+		}
+		$u = 0;
+	}
+
+
+	/**
+	 * @private
+	 */
+	function addNewAccount() {
+		global $wgUser, $wgEmailAuthentication;
+
+		# Create the account and abort if there's a problem doing so
+		$u = $this->addNewAccountInternal();
+		if( $u == NULL )
+			return;
+
+		# If we showed up language selection links, and one was in use, be
+		# smart (and sensible) and save that language as the user's preference
+		global $wgLoginLanguageSelector;
+		if( $wgLoginLanguageSelector && $this->mLanguage )
+			$u->setOption( 'language', $this->mLanguage );
+
+		# Save user settings and send out an email authentication message if needed
+		$u->saveSettings();
+		if( $wgEmailAuthentication && User::isValidEmailAddr( $u->getEmail() ) ) {
+			global $wgOut;
+			$error = $u->sendConfirmationMail();
+			if( WikiError::isError( $error ) ) {
+				$wgOut->addWikiText( wfMsg( 'confirmemail_sendfailed', $error->getMessage() ) );
+			} else {
+				$wgOut->addWikiText( wfMsg( 'confirmemail_oncreate' ) );
+			}
+		}
+
+		# If not logged in, assume the new account as the current one and set session cookies
+		# then show a "welcome" message or a "need cookies" message as needed
+		if( $wgUser->isAnon() ) {
+			$wgUser = $u;
+			$wgUser->setCookies();
+			wfRunHooks( 'AddNewAccount', array( $wgUser ) );
+			if( $this->hasSessionCookie() ) {
+				return $this->successfulLogin( wfMsg( 'welcomecreation', $wgUser->getName() ), false );
+			} else {
+				return $this->cookieRedirectCheck( 'new' );
+			}
+		} else {
+			# Confirm that the account was created
+			global $wgOut;
+			$self = SpecialPage::getTitleFor( 'Userlogin' );
+			$wgOut->setPageTitle( wfMsgHtml( 'accountcreated' ) );
+			$wgOut->setArticleRelated( false );
+			$wgOut->setRobotPolicy( 'noindex,nofollow' );
+			$wgOut->addHtml( wfMsgWikiHtml( 'accountcreatedtext', $u->getName() ) );
+			$wgOut->returnToMain( $self->getPrefixedText() );
+			wfRunHooks( 'AddNewAccount', array( $u ) );
+			return true;
+		}
+	}
+
+	/**
+	 * @private
+	 */
+	function addNewAccountInternal() {
+		global $wgUser, $wgOut;
+		global $wgEnableSorbs, $wgProxyWhitelist;
+		global $wgMemc, $wgAccountCreationThrottle;
+		global $wgAuth, $wgMinimalPasswordLength;
+
+		// If the user passes an invalid domain, something is fishy
+		if( !$wgAuth->validDomain( $this->mDomain ) ) {
+			$this->mainLoginForm( wfMsg( 'wrongpassword' ) );
+			return false;
+		}
+
+		// If we are not allowing users to login locally, we should
+		// be checking to see if the user is actually able to
+		// authenticate to the authentication server before they
+		// create an account (otherwise, they can create a local account
+		// and login as any domain user). We only need to check this for
+		// domains that aren't local.
+		if( 'local' != $this->mDomain && '' != $this->mDomain ) {
+			if( !$wgAuth->canCreateAccounts() && ( !$wgAuth->userExists( $this->mName ) || !$wgAuth->authenticate( $this->mName, $this->mPassword ) ) ) {
+				$this->mainLoginForm( wfMsg( 'wrongpassword' ) );
+				return false;
+			}
+		}
+
+		if ( wfReadOnly() ) {
+			$wgOut->readOnlyPage();
+			return false;
+		}
+
+		# Check anonymous user ($wgUser) limitations :
+		if (!$wgUser->isAllowedToCreateAccount()) {
+			$this->userNotPrivilegedMessage();
+			return false;
+		}
+
+		$ip = wfGetIP();
+		if ( $wgEnableSorbs && !in_array( $ip, $wgProxyWhitelist ) &&
+		  $wgUser->inSorbsBlacklist( $ip ) )
+		{
+			$this->mainLoginForm( wfMsg( 'sorbs_create_account_reason' ) . ' (' . htmlspecialchars( $ip ) . ')' );
+			return;
+		}
+
+		# Now create a dummy user ($u) and check if it is valid
+		$name = trim( $this->mName );
+		$u = User::newFromName( $name, 'creatable' );
+		if ( is_null( $u ) ) {
+			$this->mainLoginForm( wfMsg( 'noname' ) );
+			return false;
+		}
+
+		if ( 0 != $u->idForName() ) {
+			$this->mainLoginForm( wfMsg( 'userexists' ) );
+			return false;
+		}
+
+		if ( 0 != strcmp( $this->mPassword, $this->mRetype ) ) {
+			$this->mainLoginForm( wfMsg( 'badretype' ) );
+			return false;
+		}
+
+		if ( !$u->isValidPassword( $this->mPassword ) ) {
+			$this->mainLoginForm( wfMsg( 'passwordtooshort', $wgMinimalPasswordLength ) );
+			return false;
+		}
+
+		$abortError = '';
+		if( !wfRunHooks( 'AbortNewAccount', array( $u, &$abortError ) ) ) {
+			// Hook point to add extra creation throttles and blocks
+			wfDebug( "LoginForm::addNewAccountInternal: a hook blocked creation\n" );
+			$this->mainLoginForm( $abortError );
+			return false;
+		}
+
+		if ( $wgAccountCreationThrottle && $wgUser->isPingLimitable() ) {
+			$key = wfMemcKey( 'acctcreate', 'ip', $ip );
+			$value = $wgMemc->incr( $key );
+			if ( !$value ) {
+				$wgMemc->set( $key, 1, 86400 );
+			}
+			if ( $value > $wgAccountCreationThrottle ) {
+				$this->throttleHit( $wgAccountCreationThrottle );
+				return false;
+			}
+		}
+
+		if( !$wgAuth->addUser( $u, $this->mPassword, $this->mEmail, $this->mRealName ) ) {
+			$this->mainLoginForm( wfMsg( 'externaldberror' ) );
+			return false;
+		}
+
+		return $this->initUser( $u );
+	}
+
+	/**
+	 * Actually add a user to the database.
+	 * Give it a User object that has been initialised with a name.
+	 *
+	 * @param $u User object.
+	 * @return User object.
+	 * @private
+	 */
+	function initUser( $u ) {
+		global $wgAuth;
+
+		$u->addToDatabase();
+
+		if ( $wgAuth->allowPasswordChange() ) {
+			$u->setPassword( $this->mPassword );
+		}
+
+		$u->setEmail( $this->mEmail );
+		$u->setRealName( $this->mRealName );
+		$u->setToken();
+
+		$wgAuth->initUser( $u );
+
+		$u->setOption( 'rememberpassword', $this->mRemember ? 1 : 0 );
+		$u->saveSettings();
+
+		# Update user count
+		$ssUpdate = new SiteStatsUpdate( 0, 0, 0, 0, 1 );
+		$ssUpdate->doUpdate();
+
+		return $u;
+	}
+
+	/**
+	 * Internally authenticate the login request.
+	 *
+	 * This may create a local account as a side effect if the
+	 * authentication plugin allows transparent local account
+	 * creation.
+	 *
+	 * @public
+	 */
+	function authenticateUserData() {
+		global $wgUser, $wgAuth;
+		if ( '' == $this->mName ) {
+			return self::NO_NAME;
+		}
+		$u = User::newFromName( $this->mName );
+		if( is_null( $u ) || !User::isUsableName( $u->getName() ) ) {
+			return self::ILLEGAL;
+		}
+		if ( 0 == $u->getID() ) {
+			global $wgAuth;
+			/**
+			 * If the external authentication plugin allows it,
+			 * automatically create a new account for users that
+			 * are externally defined but have not yet logged in.
+			 */
+			if ( $wgAuth->autoCreate() && $wgAuth->userExists( $u->getName() ) ) {
+				if ( $wgAuth->authenticate( $u->getName(), $this->mPassword ) ) {
+					$u = $this->initUser( $u );
+				} else {
+					return self::WRONG_PLUGIN_PASS;
+				}
+			} else {
+				return self::NOT_EXISTS;
+			}
+		} else {
+			$u->load();
+		}
+
+		if (!$u->checkPassword( $this->mPassword )) {
+			if( $u->checkTemporaryPassword( $this->mPassword ) ) {
+				// The e-mailed temporary password should not be used
+				// for actual logins; that's a very sloppy habit,
+				// and insecure if an attacker has a few seconds to
+				// click "search" on someone's open mail reader.
+				//
+				// Allow it to be used only to reset the password
+				// a single time to a new value, which won't be in
+				// the user's e-mail archives.
+				//
+				// For backwards compatibility, we'll still recognize
+				// it at the login form to minimize surprises for
+				// people who have been logging in with a temporary
+				// password for some time.
+				//
+				// As a side-effect, we can authenticate the user's
+				// e-mail address if it's not already done, since
+				// the temporary password was sent via e-mail.
+				//
+				if( !$u->isEmailConfirmed() ) {
+					$u->confirmEmail();
+				}
+
+				// At this point we just return an appropriate code
+				// indicating that the UI should show a password
+				// reset form; bot interfaces etc will probably just
+				// fail cleanly here.
+				//
+				return self::RESET_PASS;
+			} else {
+				return '' == $this->mPassword ? self::EMPTY_PASS : self::WRONG_PASS;
+			}
+		} else {
+			$wgAuth->updateUser( $u );
+			$wgUser = $u;
+
+			return self::SUCCESS;
+		}
+	}
+
+	function processLogin() {
+		global $wgUser, $wgAuth;
+
+		switch ($this->authenticateUserData())
+		{
+			case self::SUCCESS:
+				# We've verified now, update the real record
+				if( (bool)$this->mRemember != (bool)$wgUser->getOption( 'rememberpassword' ) ) {
+					$wgUser->setOption( 'rememberpassword', $this->mRemember ? 1 : 0 );
+					$wgUser->saveSettings();
+				} else {
+					$wgUser->invalidateCache();
+				}
+				$wgUser->setCookies();
+
+				if( $this->hasSessionCookie() ) {
+					return $this->successfulLogin( wfMsg( 'loginsuccess', $wgUser->getName() ) );
+				} else {
+					return $this->cookieRedirectCheck( 'login' );
+				}
+				break;
+
+			case self::NO_NAME:
+			case self::ILLEGAL:
+				$this->mainLoginForm( wfMsg( 'noname' ) );
+				break;
+			case self::WRONG_PLUGIN_PASS:
+				$this->mainLoginForm( wfMsg( 'wrongpassword' ) );
+				break;
+			case self::NOT_EXISTS:
+				$this->mainLoginForm( wfMsg( 'nosuchuser', htmlspecialchars( $this->mName ) ) );
+				break;
+			case self::WRONG_PASS:
+				$this->mainLoginForm( wfMsg( 'wrongpassword' ) );
+				break;
+			case self::EMPTY_PASS:
+				$this->mainLoginForm( wfMsg( 'wrongpasswordempty' ) );
+				break;
+			case self::RESET_PASS:
+				$this->resetLoginForm( wfMsg( 'resetpass_announce' ) );
+				break;
+			default:
+				wfDebugDieBacktrace( "Unhandled case value" );
+		}
+	}
+
+	function resetLoginForm( $error ) {
+		global $wgOut;
+		$wgOut->addWikiText( "<div class=\"errorbox\">$error</div>" );
+		$reset = new PasswordResetForm( $this->mName, $this->mPassword );
+		$reset->execute();
+	}
+
+	/**
+	 * @private
+	 */
+	function mailPassword() {
+		global $wgUser, $wgOut, $wgAuth;
+
+		if( !$wgAuth->allowPasswordChange() ) {
+			$this->mainLoginForm( wfMsg( 'resetpass_forbidden' ) );
+			return;
+		}
+
+		# Check against blocked IPs
+		# fixme -- should we not?
+		if( $wgUser->isBlocked() ) {
+			$this->mainLoginForm( wfMsg( 'blocked-mailpassword' ) );
+			return;
+		}
+
+		# Check against the rate limiter
+		if( $wgUser->pingLimiter( 'mailpassword' ) ) {
+			$wgOut->rateLimited();
+			return;
+		}
+
+		if ( '' == $this->mName ) {
+			$this->mainLoginForm( wfMsg( 'noname' ) );
+			return;
+		}
+		$u = User::newFromName( $this->mName );
+		if( is_null( $u ) ) {
+			$this->mainLoginForm( wfMsg( 'noname' ) );
+			return;
+		}
+		if ( 0 == $u->getID() ) {
+			$this->mainLoginForm( wfMsg( 'nosuchuser', $u->getName() ) );
+			return;
+		}
+
+		# Check against password throttle
+		if ( $u->isPasswordReminderThrottled() ) {
+			global $wgPasswordReminderResendTime;
+			# Round the time in hours to 3 d.p., in case someone is specifying minutes or seconds.
+			$this->mainLoginForm( wfMsg( 'throttled-mailpassword',
+				round( $wgPasswordReminderResendTime, 3 ) ) );
+			return;
+		}
+
+		$result = $this->mailPasswordInternal( $u, true );
+		if( WikiError::isError( $result ) ) {
+			$this->mainLoginForm( wfMsg( 'mailerror', $result->getMessage() ) );
+		} else {
+			$this->mainLoginForm( wfMsg( 'passwordsent', $u->getName() ), 'success' );
+		}
+	}
+
+
+	/**
+	 * @return mixed true on success, WikiError on failure
+	 * @private
+	 */
+	function mailPasswordInternal( $u, $throttle = true ) {
+		global $wgCookiePath, $wgCookieDomain, $wgCookiePrefix, $wgCookieSecure;
+		global $wgServer, $wgScript;
+
+		if ( '' == $u->getEmail() ) {
+			return new WikiError( wfMsg( 'noemail', $u->getName() ) );
+		}
+
+		$np = $u->randomPassword();
+		$u->setNewpassword( $np, $throttle );
+
+		setcookie( "{$wgCookiePrefix}Token", '', time() - 3600, $wgCookiePath, $wgCookieDomain, $wgCookieSecure );
+
+		$u->saveSettings();
+
+		$ip = wfGetIP();
+		if ( '' == $ip ) { $ip = '(Unknown)'; }
+
+		$m = wfMsg( 'passwordremindertext', $ip, $u->getName(), $np, $wgServer . $wgScript );
+
+		$result = $u->sendMail( wfMsg( 'passwordremindertitle' ), $m );
+		return $result;
+	}
+
+
+	/**
+	 * @param string $msg Message that will be shown on success
+	 * @param bool $auto Toggle auto-redirect to main page; default true
+	 * @private
+	 */
+	function successfulLogin( $msg, $auto = true ) {
+		global $wgUser;
+		global $wgOut;
+
+		# Run any hooks; ignore results
+
+		wfRunHooks('UserLoginComplete', array(&$wgUser));
+
+		$wgOut->setPageTitle( wfMsg( 'loginsuccesstitle' ) );
+		$wgOut->setRobotpolicy( 'noindex,nofollow' );
+		$wgOut->setArticleRelated( false );
+		$wgOut->addWikiText( $msg );
+		if ( !empty( $this->mReturnTo ) ) {
+			$wgOut->returnToMain( $auto, $this->mReturnTo );
+		} else {
+			$wgOut->returnToMain( $auto );
+		}
+	}
+
+	/** */
+	function userNotPrivilegedMessage() {
+		global $wgOut;
+
+		$wgOut->setPageTitle( wfMsg( 'whitelistacctitle' ) );
+		$wgOut->setRobotpolicy( 'noindex,nofollow' );
+		$wgOut->setArticleRelated( false );
+
+		$wgOut->addWikiText( wfMsg( 'whitelistacctext' ) );
+
+		$wgOut->returnToMain( false );
+	}
+
+	/** */
+	function userBlockedMessage() {
+		global $wgOut;
+
+		# Let's be nice about this, it's likely that this feature will be used
+		# for blocking large numbers of innocent people, e.g. range blocks on 
+		# schools. Don't blame it on the user. There's a small chance that it 
+		# really is the user's fault, i.e. the username is blocked and they 
+		# haven't bothered to log out before trying to create an account to 
+		# evade it, but we'll leave that to their guilty conscience to figure
+		# out.
+
+		$wgOut->setPageTitle( wfMsg( 'cantcreateaccounttitle' ) );
+		$wgOut->setRobotpolicy( 'noindex,nofollow' );
+		$wgOut->setArticleRelated( false );
+
+		$ip = wfGetIP();
+		$wgOut->addWikiText( wfMsg( 'cantcreateaccounttext', $ip ) );
+		$wgOut->returnToMain( false );
+	}
+
+	/**
+	 * @private
+	 */
+	function mainLoginForm( $msg, $msgtype = 'error' ) {
+		global $wgUser, $wgOut, $wgAllowRealName, $wgEnableEmail;
+		global $wgCookiePrefix, $wgAuth, $wgLoginLanguageSelector;
+		global $wgAuth;
+
+		if ( $this->mType == 'signup' ) {
+			if ( !$wgUser->isAllowed( 'createaccount' ) ) {
+				$this->userNotPrivilegedMessage();
+				return;
+			} elseif ( $wgUser->isBlockedFromCreateAccount() ) {
+				$this->userBlockedMessage();
+				return;
+			}
+		}
+
+		if ( '' == $this->mName ) {
+			if ( $wgUser->isLoggedIn() ) {
+				$this->mName = $wgUser->getName();
+			} else {
+				$this->mName = isset( $_COOKIE[$wgCookiePrefix.'UserName'] ) ? $_COOKIE[$wgCookiePrefix.'UserName'] : null;
+			}
+		}
+
+		$titleObj = SpecialPage::getTitleFor( 'Userlogin' );
+
+		if ( $this->mType == 'signup' ) {
+			$template = new UsercreateTemplate();
+			$q = 'action=submitlogin&type=signup';
+			$linkq = 'type=login';
+			$linkmsg = 'gotaccount';
+		} else {
+			$template = new UserloginTemplate();
+			$q = 'action=submitlogin&type=login';
+			$linkq = 'type=signup';
+			$linkmsg = 'nologin';
+		}
+
+		if ( !empty( $this->mReturnTo ) ) {
+			$returnto = '&returnto=' . wfUrlencode( $this->mReturnTo );
+			$q .= $returnto;
+			$linkq .= $returnto;
+		}
+
+		# Pass any language selection on to the mode switch link
+		if( $wgLoginLanguageSelector && $this->mLanguage )
+			$linkq .= '&uselang=' . $this->mLanguage;
+
+		$link = '<a href="' . htmlspecialchars ( $titleObj->getLocalUrl( $linkq ) ) . '">';
+		$link .= wfMsgHtml( $linkmsg . 'link' );
+		$link .= '</a>';
+
+		# Don't show a "create account" link if the user can't
+		if( $this->showCreateOrLoginLink( $wgUser ) )
+			$template->set( 'link', wfMsgHtml( $linkmsg, $link ) );
+		else
+			$template->set( 'link', '' );
+
+		$template->set( 'header', '' );
+		$template->set( 'name', $this->mName );
+		$template->set( 'password', $this->mPassword );
+		$template->set( 'retype', $this->mRetype );
+		$template->set( 'email', $this->mEmail );
+		$template->set( 'realname', $this->mRealName );
+		$template->set( 'domain', $this->mDomain );
+
+		$template->set( 'action', $titleObj->getLocalUrl( $q ) );
+		$template->set( 'message', $msg );
+		$template->set( 'messagetype', $msgtype );
+		$template->set( 'createemail', $wgEnableEmail && $wgUser->isLoggedIn() );
+		$template->set( 'userealname', $wgAllowRealName );
+		$template->set( 'useemail', $wgEnableEmail );
+		$template->set( 'canreset', $wgAuth->allowPasswordChange() );
+		$template->set( 'remember', $wgUser->getOption( 'rememberpassword' ) or $this->mRemember  );
+
+		# Prepare language selection links as needed
+		if( $wgLoginLanguageSelector ) {
+			$template->set( 'languages', $this->makeLanguageSelector() );
+			if( $this->mLanguage )
+				$template->set( 'uselang', $this->mLanguage );
+		}
+
+		// Give authentication and captcha plugins a chance to modify the form
+		$wgAuth->modifyUITemplate( $template );
+		if ( $this->mType == 'signup' ) {
+			wfRunHooks( 'UserCreateForm', array( &$template ) );
+		} else {
+			wfRunHooks( 'UserLoginForm', array( &$template ) );
+		}
+
+		$wgOut->setPageTitle( wfMsg( 'userlogin' ) );
+		$wgOut->setRobotpolicy( 'noindex,nofollow' );
+		$wgOut->setArticleRelated( false );
+		$wgOut->addTemplate( $template );
+	}
+
+	/**
+	 * @private
+	 */
+	function showCreateOrLoginLink( &$user ) {
+		if( $this->mType == 'signup' ) {
+			return( true );
+		} elseif( $user->isAllowed( 'createaccount' ) ) {
+			return( true );
+		} else {
+			return( false );
+		}
+	}
+
+	/**
+	 * Check if a session cookie is present.
+	 *
+	 * This will not pick up a cookie set during _this_ request, but is
+	 * meant to ensure that the client is returning the cookie which was
+	 * set on a previous pass through the system.
+	 *
+	 * @private
+	 */
+	function hasSessionCookie() {
+		global $wgDisableCookieCheck, $wgRequest;
+		return $wgDisableCookieCheck ? true : $wgRequest->checkSessionCookie();
+	}
+
+	/**
+	 * @private
+	 */
+	function cookieRedirectCheck( $type ) {
+		global $wgOut;
+
+		$titleObj = SpecialPage::getTitleFor( 'Userlogin' );
+		$check = $titleObj->getFullURL( 'wpCookieCheck='.$type );
+
+		return $wgOut->redirect( $check );
+	}
+
+	/**
+	 * @private
+	 */
+	function onCookieRedirectCheck( $type ) {
+		global $wgUser;
+
+		if ( !$this->hasSessionCookie() ) {
+			if ( $type == 'new' ) {
+				return $this->mainLoginForm( wfMsg( 'nocookiesnew' ) );
+			} else if ( $type == 'login' ) {
+				return $this->mainLoginForm( wfMsg( 'nocookieslogin' ) );
+			} else {
+				# shouldn't happen
+				return $this->mainLoginForm( wfMsg( 'error' ) );
+			}
+		} else {
+			return $this->successfulLogin( wfMsg( 'loginsuccess', $wgUser->getName() ) );
+		}
+	}
+
+	/**
+	 * @private
+	 */
+	function throttleHit( $limit ) {
+		global $wgOut;
+
+		$wgOut->addWikiText( wfMsg( 'acct_creation_throttle_hit', $limit ) );
+	}
+
+	/**
+	 * Produce a bar of links which allow the user to select another language
+	 * during login/registration but retain "returnto"
+	 *
+	 * @return string
+	 */
+	function makeLanguageSelector() {
+		$msg = wfMsgForContent( 'loginlanguagelinks' );
+		if( $msg != '' && !wfEmptyMsg( 'loginlanguagelinks', $msg ) ) {
+			$langs = explode( "\n", $msg );
+			$links = array();
+			foreach( $langs as $lang ) {
+				$lang = trim( $lang, '* ' );
+				$parts = explode( '|', $lang );
+				$links[] = $this->makeLanguageSelectorLink( $parts[0], $parts[1] );
+			}
+			return count( $links ) > 0 ? wfMsgHtml( 'loginlanguagelabel', implode( ' | ', $links ) ) : '';
+		} else {
+			return '';
+		}
+	}
+
+	/**
+	 * Create a language selector link for a particular language
+	 * Links back to this page preserving type and returnto
+	 *
+	 * @param $text Link text
+	 * @param $lang Language code
+	 */
+	function makeLanguageSelectorLink( $text, $lang ) {
+		global $wgUser;
+		$self = SpecialPage::getTitleFor( 'Userlogin' );
+		$attr[] = 'uselang=' . $lang;
+		if( $this->mType == 'signup' )
+			$attr[] = 'type=signup';
+		if( $this->mReturnTo )
+			$attr[] = 'returnto=' . $this->mReturnTo;
+		$skin = $wgUser->getSkin();
+		return $skin->makeKnownLinkObj( $self, htmlspecialchars( $text ), implode( '&', $attr ) );
+	}
+}
+?>
Index: /MediaWiki/branches/1.11/includes/SpecialUserlogout.php
===================================================================
--- /MediaWiki/branches/1.11/includes/SpecialUserlogout.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/SpecialUserlogout.php	(revision 1280)
@@ -0,0 +1,26 @@
+<?php
+/**
+ *
+ * @addtogroup SpecialPage
+ */
+
+/**
+ * constructor
+ */
+function wfSpecialUserlogout() {
+	global $wgUser, $wgOut;
+
+	if (wfRunHooks('UserLogout', array(&$wgUser))) {
+
+		$wgUser->logout();
+
+		wfRunHooks('UserLogoutComplete', array(&$wgUser));
+
+		$wgOut->setRobotpolicy( 'noindex,nofollow' );
+		$wgOut->addHTML( wfMsgExt( 'logouttext', array( 'parse' ) ) );
+		$wgOut->returnToMain();
+
+	}
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/SpecialUserrights.php
===================================================================
--- /MediaWiki/branches/1.11/includes/SpecialUserrights.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/SpecialUserrights.php	(revision 1280)
@@ -0,0 +1,201 @@
+<?php
+
+/**
+ * Special page to allow managing user group membership
+ *
+ * @addtogroup SpecialPage
+ * @todo This code is disgusting and needs a total rewrite
+ */
+
+/** */
+require_once( dirname(__FILE__) . '/HTMLForm.php');
+
+/** Entry point */
+function wfSpecialUserrights() {
+	global $wgRequest;
+	$form = new UserrightsForm($wgRequest);
+	$form->execute();
+}
+
+/**
+ * A class to manage user levels rights.
+ * @addtogroup SpecialPage
+ */
+class UserrightsForm extends HTMLForm {
+	var $mPosted, $mRequest, $mSaveprefs;
+	/** Escaped local url name*/
+	var $action;
+
+	/** Constructor*/
+	function UserrightsForm ( &$request ) {
+		$this->mPosted = $request->wasPosted();
+		$this->mRequest =& $request;
+		$this->mName = 'userrights';
+
+		$titleObj = SpecialPage::getTitleFor( 'Userrights' );
+		$this->action = $titleObj->escapeLocalURL();
+	}
+
+	/**
+	 * Manage forms to be shown according to posted data.
+	 * Depending on the submit button used, call a form or a save function.
+	 */
+	function execute() {
+		// show the general form
+		$this->switchForm();
+		if( $this->mPosted ) {
+			// show some more forms
+			if( $this->mRequest->getCheck( 'ssearchuser' ) ) {
+				$this->editUserGroupsForm( $this->mRequest->getVal( 'user-editname' ) );
+			}
+
+			// save settings
+			if( $this->mRequest->getCheck( 'saveusergroups' ) ) {
+				global $wgUser;
+				$username = $this->mRequest->getVal( 'user-editname' );
+				$reason = $this->mRequest->getVal( 'user-reason' );
+				if( $wgUser->matchEditToken( $this->mRequest->getVal( 'wpEditToken' ), $username ) ) {
+					$this->saveUserGroups( $username,
+						$this->mRequest->getArray( 'member' ),
+						$this->mRequest->getArray( 'available' ),
+						$reason );
+				}
+			}
+		}
+	}
+
+	/**
+	 * Save user groups changes in the database.
+	 * Data comes from the editUserGroupsForm() form function
+	 *
+	 * @param string $username Username to apply changes to.
+	 * @param array $removegroup id of groups to be removed.
+	 * @param array $addgroup id of groups to be added.
+	 * @param string $reason Reason for group change
+	 *
+	 */
+	function saveUserGroups( $username, $removegroup, $addgroup, $reason ) {
+		global $wgOut;
+		$u = User::newFromName($username);
+
+		if(is_null($u)) {
+			$wgOut->addWikiText( wfMsg( 'nosuchusershort', htmlspecialchars( $username ) ) );
+			return;
+		}
+
+		if($u->getID() == 0) {
+			$wgOut->addWikiText( wfMsg( 'nosuchusershort', htmlspecialchars( $username ) ) );
+			return;
+		}
+
+		$oldGroups = $u->getGroups();
+		$newGroups = $oldGroups;
+		// remove then add groups
+		if(isset($removegroup)) {
+			$newGroups = array_diff($newGroups, $removegroup);
+			foreach( $removegroup as $group ) {
+				$u->removeGroup( $group );
+			}
+		}
+		if(isset($addgroup)) {
+			$newGroups = array_merge($newGroups, $addgroup);
+			foreach( $addgroup as $group ) {
+				$u->addGroup( $group );
+			}
+		}
+		$newGroups = array_unique( $newGroups );
+
+		wfDebug( 'oldGroups: ' . print_r( $oldGroups, true ) );
+		wfDebug( 'newGroups: ' . print_r( $newGroups, true ) );
+
+		wfRunHooks( 'UserRights', array( &$u, $addgroup, $removegroup ) );	
+		$log = new LogPage( 'rights' );
+		$log->addEntry( 'rights', Title::makeTitle( NS_USER, $u->getName() ), $reason, array( $this->makeGroupNameList( $oldGroups ),
+			$this->makeGroupNameList( $newGroups ) ) );
+	}
+
+	function makeGroupNameList( $ids ) {
+		return implode( ', ', $ids );
+	}
+
+	/**
+	 * Output a form to allow searching for a user
+	 */
+	function switchForm() {
+		global $wgOut, $wgRequest;
+		$username = $wgRequest->getText( 'user-editname' );
+		$form  = Xml::openElement( 'form', array( 'method' => 'post', 'action' => $this->action, 'name' => 'uluser' ) );
+		$form .= '<fieldset><legend>' . wfMsgHtml( 'userrights-lookup-user' ) . '</legend>';
+		$form .= '<p>' . Xml::inputLabel( wfMsg( 'userrights-user-editname' ), 'user-editname', 'username', 30, $username ) . '</p>';
+		$form .= '<p>' . Xml::submitButton( wfMsg( 'editusergroup' ), array( 'name' => 'ssearchuser' ) ) . '</p>';
+		$form .= '</fieldset>';
+		$form .= '</form>';
+		$wgOut->addHTML( $form );
+	}
+
+	/**
+	 * Edit user groups membership
+	 * @param string $username Name of the user.
+	 */
+	function editUserGroupsForm($username) {
+		global $wgOut;
+
+		$user = User::newFromName($username);
+		if( is_null( $user ) ) {
+			$wgOut->addWikiText( wfMsg( 'nouserspecified' ) );
+			return;
+		} elseif( $user->getID() == 0 ) {
+			$wgOut->addWikiText( wfMsg( 'nosuchusershort', wfEscapeWikiText( $username ) ) );
+			return;
+		}
+
+		$groups = $user->getGroups();
+		$this->showEditUserGroupsForm( $username, $groups );
+	}
+	
+	function showEditUserGroupsForm( $username, $groups ) {
+		global $wgOut, $wgUser;
+		$wgOut->addHTML(
+			Xml::openElement( 'form', array( 'method' => 'post', 'action' => $this->action, 'name' => 'editGroup' ) ) .
+			Xml::hidden( 'user-editname', $username ) .
+			Xml::hidden( 'wpEditToken', $wgUser->editToken( $username ) ) .
+			Xml::openElement( 'fieldset' ) .
+			Xml::element( 'legend', array(), wfMsg( 'userrights-editusergroup' ) ) .
+			$wgOut->parse( wfMsg( 'editinguser', $username ) ) .
+			"<table border='0'>
+			<tr>
+				<td></td>
+				<td>
+				<table width='400'>
+					<tr>
+						<td width='50%'>" . HTMLSelectGroups( 'member', $this->mName.'-groupsmember', $groups, true, 6 ) . "</td>
+						<td width='50%'>" . HTMLSelectGroups( 'available', $this->mName.'-groupsavailable', $groups, true, 6, true) . "</td>
+					</tr>
+				</table>
+			</tr>
+			<tr>
+				<td colspan='2'>" .
+					$wgOut->parse( wfMsg('userrights-groupshelp') ) .
+				"</td>
+			</tr>
+			<tr>
+				<td>" .
+					Xml::label( wfMsg( 'userrights-reason' ), 'wpReason' ) .
+				"</td>
+				<td>" .
+					Xml::input( 'user-reason', 60, false, array( 'id' => 'wpReason' ) ) .
+				"</td>
+			</tr>
+			<tr>
+				<td></td>
+				<td>" .
+				Xml::submitButton( wfMsg( 'saveusergroups' ), array( 'name' => 'saveusergroups' ) ) .
+				"</td>
+			</tr>
+			</table>\n" .
+			Xml::closeElement( 'fieldset' ) .
+			Xml::closeElement( 'form' ) . "\n"
+		);
+	}
+} // end class UserrightsForm
+?>
Index: /MediaWiki/branches/1.11/includes/SpecialVersion.php
===================================================================
--- /MediaWiki/branches/1.11/includes/SpecialVersion.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/SpecialVersion.php	(revision 1280)
@@ -0,0 +1,311 @@
+<?php
+/**#@+
+ * Give information about the version of MediaWiki, PHP, the DB and extensions
+ *
+ * @addtogroup SpecialPage
+ *
+ * @author Ævar Arnfjörð Bjarmason <avarab@gmail.com>
+ * @copyright Copyright © 2005, Ævar Arnfjörð Bjarmason
+ * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
+ */
+
+/**
+ * constructor
+ */
+function wfSpecialVersion() {
+	$version = new SpecialVersion;
+	$version->execute();
+}
+
+class SpecialVersion {
+	private $firstExtOpened = true;
+
+	/**
+	 * main()
+	 */
+	function execute() {
+		global $wgOut;
+
+		$wgOut->addHTML( '<div dir="ltr">' );
+		$wgOut->addWikiText(
+			$this->MediaWikiCredits() .
+			$this->extensionCredits() .
+			$this->wgHooks()
+		);
+		$wgOut->addHTML( $this->IPInfo() );
+		$wgOut->addHTML( '</div>' );
+	}
+
+	/**#@+
+	 * @private
+	 */
+
+	/**
+	 * Return wiki text showing the licence information and third party
+	 * software versions (apache, php, mysql).
+	 * @static
+	 */
+	function MediaWikiCredits() {
+		$version = self::getVersion();
+		$dbr = wfGetDB( DB_SLAVE );
+
+		$ret =
+		"__NOTOC__
+		This wiki is powered by '''[http://www.mediawiki.org/ MediaWiki]''',
+		copyright (C) 2001-2007 Magnus Manske, Brion Vibber, Lee Daniel Crocker,
+		Tim Starling, Erik Möller, Gabriel Wicke, Ævar Arnfjörð Bjarmason,
+		Niklas Laxström, Domas Mituzas, Rob Church and others.
+
+		MediaWiki is free software; you can redistribute it and/or modify
+		it under the terms of the GNU General Public License as published by
+		the Free Software Foundation; either version 2 of the License, or
+		(at your option) any later version.
+
+		MediaWiki is distributed in the hope that it will be useful,
+		but WITHOUT ANY WARRANTY; without even the implied warranty of
+		MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+		GNU General Public License for more details.
+
+		You should have received [{{SERVER}}{{SCRIPTPATH}}/COPYING a copy of the GNU General Public License]
+		along with this program; if not, write to the Free Software
+		Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+		or [http://www.gnu.org/copyleft/gpl.html read it online]
+
+		* [http://www.mediawiki.org/ MediaWiki]: $version
+		* [http://www.php.net/ PHP]: " . phpversion() . " (" . php_sapi_name() . ")
+		* " . $dbr->getSoftwareLink() . ": " . $dbr->getServerVersion();
+
+		return str_replace( "\t\t", '', $ret ) . "\n";
+	}
+
+	/** Return a string of the MediaWiki version with SVN revision if available */
+	public static function getVersion() {
+		global $wgVersion, $IP;
+		$svn = self::getSvnRevision( $IP );
+		return $svn ? "$wgVersion (r$svn)" : $wgVersion;
+	}
+
+	/** Generate wikitext showing extensions name, URL, author and description */
+	function extensionCredits() {
+		global $wgExtensionCredits, $wgExtensionFunctions, $wgParser, $wgSkinExtensionFunction;
+
+		if ( ! count( $wgExtensionCredits ) && ! count( $wgExtensionFunctions ) && ! count( $wgSkinExtensionFunction ) )
+			return '';
+
+		$extensionTypes = array(
+			'specialpage' => 'Special pages',
+			'parserhook' => 'Parser hooks',
+			'variable' => 'Variables',
+			'other' => 'Other',
+		);
+		wfRunHooks( 'SpecialVersionExtensionTypes', array( &$this, &$extensionTypes ) );
+
+		$out = "<h2>Extensions</h2>\n";
+		$out .= wfOpenElement('table', array('id' => 'sv-ext') );
+
+		foreach ( $extensionTypes as $type => $text ) {
+			if ( isset ( $wgExtensionCredits[$type] ) && count ( $wgExtensionCredits[$type] ) ) {
+				$out .= $this->openExtType( $text );
+
+				usort( $wgExtensionCredits[$type], array( $this, 'compare' ) );
+
+				foreach ( $wgExtensionCredits[$type] as $extension ) {
+					$out .= $this->formatCredits(
+						isset ( $extension['name'] )        ? $extension['name']        : '',
+						isset ( $extension['version'] )     ? $extension['version']     : null,
+						isset ( $extension['author'] )      ? $extension['author']      : '',
+						isset ( $extension['url'] )         ? $extension['url']         : null,
+						isset ( $extension['description'] ) ? $extension['description'] : ''
+					);
+				}
+			}
+		}
+
+		if ( count( $wgExtensionFunctions ) ) {
+			$out .= $this->openExtType('Extension functions');
+			$out .= '<tr><td colspan="3">' . $this->listToText( $wgExtensionFunctions ) . "</td></tr>\n";
+		}
+
+		if ( $cnt = count( $tags = $wgParser->getTags() ) ) {
+			for ( $i = 0; $i < $cnt; ++$i )
+				$tags[$i] = "&lt;{$tags[$i]}&gt;";
+			$out .= $this->openExtType('Parser extension tags');
+			$out .= '<tr><td colspan="3">' . $this->listToText( $tags ). "</td></tr>\n";
+		}
+
+		if( $cnt = count( $fhooks = $wgParser->getFunctionHooks() ) ) {
+			$out .= $this->openExtType('Parser function hooks');
+			$out .= '<tr><td colspan="3">' . $this->listToText( $fhooks ) . "</td></tr>\n";
+		}
+
+		if ( count( $wgSkinExtensionFunction ) ) {
+			$out .= $this->openExtType('Skin extension functions');
+			$out .= '<tr><td colspan="3">' . $this->listToText( $wgSkinExtensionFunction ) . "</td></tr>\n";
+		}
+		$out .= wfCloseElement( 'table' );
+		return $out;
+	}
+
+	/** Callback to sort extensions by type */
+	function compare( $a, $b ) {
+		if ( $a['name'] === $b['name'] )
+			return 0;
+		else
+			return Language::lc( $a['name'] ) > Language::lc( $b['name'] ) ? 1 : -1;
+	}
+
+	function formatCredits( $name, $version = null, $author = null, $url = null, $description = null) {
+		$ret = '<tr><td>';
+		if ( isset( $url ) )
+			$ret .= "[$url ";
+		$ret .= "''$name";
+		if ( isset( $version ) )
+			$ret .= " (version $version)";
+		$ret .= "''";
+		if ( isset( $url ) )
+			$ret .= ']';
+		$ret .= '</td>';
+		$ret .= "<td>$description</td>";
+		$ret .= "<td>" . $this->listToText( (array)$author ) . "</td>";
+		$ret .= '</tr>';
+		return "$ret\n";
+	}
+
+	/**
+	 * @return string
+	 */
+	function wgHooks() {
+		global $wgHooks;
+
+		if ( count( $wgHooks ) ) {
+			$myWgHooks = $wgHooks;
+			ksort( $myWgHooks );
+
+			$ret = "<h2>Hooks</h2>\n"
+				. wfOpenElement('table', array('id' => 'sv-hooks') )
+				. "<tr><th>Hook name</th><th>Subscribed by</th></tr>\n";
+
+			foreach ($myWgHooks as $hook => $hooks)
+				$ret .= "<tr><td>$hook</td><td>" . $this->listToText( $hooks ) . "</td></tr>\n";
+
+			$ret .= '</table>';
+			return $ret;
+		} else
+			return '';
+	}
+
+	private function openExtType($text, $name = null) {
+		$opt = array( 'colspan' => 3 );
+		$out = '';
+
+		if(!$this->firstExtOpened) {
+			// Insert a spacing line
+			$out .= '<tr class="sv-space">' . wfElement( 'td', $opt ) . "</tr>\n";
+		}
+		$this->firstExtOpened = false;
+
+		if($name) { $opt['id'] = "sv-$name"; }
+
+		$out .= "<tr>" . wfElement( 'th', $opt, $text) . "</tr>\n";
+		return $out;
+	}
+
+	/**
+	 * @static
+	 *
+	 * @return string
+	 */
+	function IPInfo() {
+		$ip =  str_replace( '--', ' - ', htmlspecialchars( wfGetIP() ) );
+		return "<!-- visited from $ip -->\n" .
+			"<span style='display:none'>visited from $ip</span>";
+	}
+
+	/**
+	 * @param array $list
+	 * @return string
+	 */
+	function listToText( $list ) {
+		$cnt = count( $list );
+
+	    if ( $cnt == 1 ) {
+			// Enforce always returning a string
+			return (string)$this->arrayToString( $list[0] );
+	    } elseif ( $cnt == 0 ) {
+			return '';
+		} else {
+			$t = array_slice( $list, 0, $cnt - 1 );
+			$one = array_map( array( &$this, 'arrayToString' ), $t );
+			$two = $this->arrayToString( $list[$cnt - 1] );
+
+			return implode( ', ', $one ) . " and $two";
+	    }
+	}
+
+	/**
+	 * @static
+	 *
+	 * @param mixed $list Will convert an array to string if given and return
+	 *                    the paramater unaltered otherwise
+	 * @return mixed
+	 */
+	function arrayToString( $list ) {
+		if ( ! is_array( $list ) ) {
+			return $list;
+		} else {
+			$class = get_class( $list[0] );
+			return "($class, {$list[1]})";
+		}
+	}
+
+	/**
+	 * Retrieve the revision number of a Subversion working directory.
+	 *
+	 * @param string $dir
+	 * @return mixed revision number as int, or false if not a SVN checkout
+	 */
+	public static function getSvnRevision( $dir ) {
+		// http://svnbook.red-bean.com/nightly/en/svn.developer.insidewc.html
+		$entries = $dir . '/.svn/entries';
+
+		if( !file_exists( $entries ) ) {
+			return false;
+		}
+
+		$content = file( $entries );
+
+		// check if file is xml (subversion release <= 1.3) or not (subversion release = 1.4)
+		if( preg_match( '/^<\?xml/', $content[0] ) ) {
+			// subversion is release <= 1.3
+			if( !function_exists( 'simplexml_load_file' ) ) {
+				// We could fall back to expat... YUCK
+				return false;
+			}
+
+			// SimpleXml whines about the xmlns...
+			wfSuppressWarnings();
+			$xml = simplexml_load_file( $entries );
+			wfRestoreWarnings();
+
+			if( $xml ) {
+				foreach( $xml->entry as $entry ) {
+					if( $xml->entry[0]['name'] == '' ) {
+						// The directory entry should always have a revision marker.
+						if( $entry['revision'] ) {
+							return intval( $entry['revision'] );
+						}
+					}
+				}
+			}
+			return false;
+		} else {
+			// subversion is release 1.4
+			return intval( $content[3] );
+		}
+	}
+
+	/**#@-*/
+}
+
+/**#@-*/
+?>
Index: /MediaWiki/branches/1.11/includes/SpecialWantedcategories.php
===================================================================
--- /MediaWiki/branches/1.11/includes/SpecialWantedcategories.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/SpecialWantedcategories.php	(revision 1280)
@@ -0,0 +1,79 @@
+<?php
+/**
+ * A querypage to list the most wanted categories - implements Special:Wantedcategories
+ *
+ * @addtogroup SpecialPage
+ *
+ * @author Ævar Arnfjörð Bjarmason <avarab@gmail.com>
+ * @copyright Copyright © 2005, Ævar Arnfjörð Bjarmason
+ * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
+ */
+class WantedCategoriesPage extends QueryPage {
+
+	function getName() { return 'Wantedcategories'; }
+	function isExpensive() { return true; }
+	function isSyndicated() { return false; }
+
+	function getSQL() {
+		$dbr = wfGetDB( DB_SLAVE );
+		list( $categorylinks, $page ) = $dbr->tableNamesN( 'categorylinks', 'page' );
+		$name = $dbr->addQuotes( $this->getName() );
+		return
+			"
+			SELECT
+				$name as type,
+				" . NS_CATEGORY . " as namespace,
+				cl_to as title,
+				COUNT(*) as value
+			FROM $categorylinks
+			LEFT JOIN $page ON cl_to = page_title AND page_namespace = ". NS_CATEGORY ."
+			WHERE page_title IS NULL
+			GROUP BY 1,2,3
+			";
+	}
+
+	function sortDescending() { return true; }
+
+	/**
+	 * Fetch user page links and cache their existence
+	 */
+	function preprocessResults( &$db, &$res ) {
+		$batch = new LinkBatch;
+		while ( $row = $db->fetchObject( $res ) )
+			$batch->addObj( Title::makeTitleSafe( $row->namespace, $row->title ) );
+		$batch->execute();
+
+		// Back to start for display
+		if ( $db->numRows( $res ) > 0 )
+			// If there are no rows we get an error seeking.
+			$db->dataSeek( $res, 0 );
+	}
+
+	function formatResult( $skin, $result ) {
+		global $wgLang, $wgContLang;
+
+		$nt = Title::makeTitle( $result->namespace, $result->title );
+		$text = $wgContLang->convert( $nt->getText() );
+
+		$plink = $this->isCached() ?
+			$skin->makeLinkObj( $nt, htmlspecialchars( $text ) ) :
+			$skin->makeBrokenLinkObj( $nt, htmlspecialchars( $text ) );
+
+		$nlinks = wfMsgExt( 'nmembers', array( 'parsemag', 'escape'),
+			$wgLang->formatNum( $result->value ) );
+		return wfSpecialList($plink, $nlinks);
+	}
+}
+
+/**
+ * constructor
+ */
+function wfSpecialWantedCategories() {
+	list( $limit, $offset ) = wfCheckLimits();
+
+	$wpp = new WantedCategoriesPage();
+
+	$wpp->doQuery( $offset, $limit );
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/SpecialWantedpages.php
===================================================================
--- /MediaWiki/branches/1.11/includes/SpecialWantedpages.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/SpecialWantedpages.php	(revision 1280)
@@ -0,0 +1,131 @@
+<?php
+/**
+ *
+ * @addtogroup SpecialPage
+ */
+
+/**
+ * implements Special:Wantedpages
+ * @addtogroup SpecialPage
+ */
+class WantedPagesPage extends QueryPage {
+	var $nlinks;
+
+	function WantedPagesPage( $inc = false, $nlinks = true ) {
+		$this->setListoutput( $inc );
+		$this->nlinks = $nlinks;
+	}
+
+	function getName() {
+		return 'Wantedpages';
+	}
+
+	function isExpensive() {
+		return true;
+	}
+	function isSyndicated() { return false; }
+
+	function getSQL() {
+		global $wgWantedPagesThreshold;
+		$count = $wgWantedPagesThreshold - 1;
+		$dbr = wfGetDB( DB_SLAVE );
+		$pagelinks = $dbr->tableName( 'pagelinks' );
+		$page      = $dbr->tableName( 'page' );
+		return
+			"SELECT 'Wantedpages' AS type,
+			        pl_namespace AS namespace,
+			        pl_title AS title,
+			        COUNT(*) AS value
+			 FROM $pagelinks
+			 LEFT JOIN $page AS pg1
+			 ON pl_namespace = pg1.page_namespace AND pl_title = pg1.page_title
+			 LEFT JOIN $page AS pg2
+			 ON pl_from = pg2.page_id
+			 WHERE pg1.page_namespace IS NULL
+			 AND pl_namespace NOT IN ( 2, 3 )
+			 AND pg2.page_namespace != 8
+			 GROUP BY 1,2,3
+			 HAVING COUNT(*) > $count";
+	}
+
+	/**
+	 * Cache page existence for performance
+	 */
+	function preprocessResults( &$db, &$res ) {
+		$batch = new LinkBatch;
+		while ( $row = $db->fetchObject( $res ) )
+			$batch->addObj( Title::makeTitleSafe( $row->namespace, $row->title ) );
+		$batch->execute();
+
+		// Back to start for display
+		if ( $db->numRows( $res ) > 0 )
+			// If there are no rows we get an error seeking.
+			$db->dataSeek( $res, 0 );
+	}
+
+
+	function formatResult( $skin, $result ) {
+		global $wgLang;
+
+		$title = Title::makeTitleSafe( $result->namespace, $result->title );
+
+		if( $this->isCached() ) {
+			# Check existence; which is stored in the link cache
+			if( !$title->exists() ) {
+				# Make a redlink
+				$pageLink = $skin->makeBrokenLinkObj( $title );
+			} else {
+				# Make a a struck-out normal link
+				$pageLink = "<s>" . $skin->makeLinkObj( $title ) . "</s>";
+			}		
+		} else {
+			# Not cached? Don't bother checking existence; it can't
+			$pageLink = $skin->makeBrokenLinkObj( $title );
+		}
+		
+		# Make a link to "what links here" if it's required
+		$wlhLink = $this->nlinks
+					? $this->makeWlhLink( $title, $skin,
+							wfMsgExt( 'nlinks', array( 'parsemag', 'escape'),
+								$wgLang->formatNum( $result->value ) ) )
+					: null;
+					
+		return wfSpecialList($pageLink, $wlhLink);
+	}
+	
+	/**
+	 * Make a "what links here" link for a specified title
+	 * @param $title Title to make the link for
+	 * @param $skin Skin to use
+	 * @param $text Link text
+	 * @return string
+	 */
+	function makeWlhLink( &$title, &$skin, $text ) {
+		$wlhTitle = SpecialPage::getTitleFor( 'Whatlinkshere' );
+		return $skin->makeKnownLinkObj( $wlhTitle, $text, 'target=' . $title->getPrefixedUrl() );
+	}
+	
+}
+
+/**
+ * constructor
+ */
+function wfSpecialWantedpages( $par = null, $specialPage ) {
+	$inc = $specialPage->including();
+
+	if ( $inc ) {
+		@list( $limit, $nlinks ) = explode( '/', $par, 2 );
+		$limit = (int)$limit;
+		$nlinks = $nlinks === 'nlinks';
+		$offset = 0;
+	} else {
+		list( $limit, $offset ) = wfCheckLimits();
+		$nlinks = true;
+	}
+
+	$wpp = new WantedPagesPage( $inc, $nlinks );
+
+	$wpp->doQuery( $offset, $limit, !$inc );
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/SpecialWatchlist.php
===================================================================
--- /MediaWiki/branches/1.11/includes/SpecialWatchlist.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/SpecialWatchlist.php	(revision 1280)
@@ -0,0 +1,513 @@
+<?php
+/**
+ *
+ * @addtogroup SpecialPage
+ */
+
+/**
+ *
+ */
+require_once( dirname(__FILE__) . '/SpecialRecentchanges.php' );
+
+/**
+ * Constructor
+ *
+ * @param $par Parameter passed to the page
+ */
+function wfSpecialWatchlist( $par ) {
+	global $wgUser, $wgOut, $wgLang, $wgRequest, $wgContLang;
+	global $wgRCShowWatchingUsers, $wgEnotifWatchlist, $wgShowUpdatedMarker;
+	global $wgEnotifWatchlist;
+	$fname = 'wfSpecialWatchlist';
+
+	$skin = $wgUser->getSkin();
+	$specialTitle = SpecialPage::getTitleFor( 'Watchlist' );
+	$wgOut->setRobotPolicy( 'noindex,nofollow' );
+
+	# Anons don't get a watchlist
+	if( $wgUser->isAnon() ) {
+		$wgOut->setPageTitle( wfMsg( 'watchnologin' ) );
+		$llink = $skin->makeKnownLinkObj( SpecialPage::getTitleFor( 'Userlogin' ), wfMsgHtml( 'loginreqlink' ), 'returnto=' . $specialTitle->getPrefixedUrl() );
+		$wgOut->addHtml( wfMsgWikiHtml( 'watchlistanontext', $llink ) );
+		return;
+	} else {
+		$wgOut->setPageTitle( wfMsg( 'watchlist' ) );
+		$wgOut->setSubtitle( wfMsgWikiHtml( 'watchlistfor', htmlspecialchars( $wgUser->getName() ) ) );
+	}
+
+	if( wlHandleClear( $wgOut, $wgRequest, $par ) ) {
+		return;
+	}
+
+	$defaults = array(
+	/* float */ 'days' => floatval( $wgUser->getOption( 'watchlistdays' ) ), /* 3.0 or 0.5, watch further below */
+	/* bool  */ 'hideOwn' => (int)$wgUser->getBoolOption( 'watchlisthideown' ),
+	/* bool  */ 'hideBots' => (int)$wgUser->getBoolOption( 'watchlisthidebots' ),
+	/* bool */ 'hideMinor' => (int)$wgUser->getBoolOption( 'watchlisthideminor' ),
+	/* ?     */ 'namespace' => 'all',
+	);
+
+	extract($defaults);
+
+	# Extract variables from the request, falling back to user preferences or
+	# other default values if these don't exist
+	$prefs['days'    ] = floatval( $wgUser->getOption( 'watchlistdays' ) );
+	$prefs['hideown' ] = $wgUser->getBoolOption( 'watchlisthideown' );
+	$prefs['hidebots'] = $wgUser->getBoolOption( 'watchlisthidebots' );
+	$prefs['hideminor'] = $wgUser->getBoolOption( 'watchlisthideminor' );
+
+	# Get query variables
+	$days     = $wgRequest->getVal(  'days', $prefs['days'] );
+	$hideOwn  = $wgRequest->getBool( 'hideOwn', $prefs['hideown'] );
+	$hideBots = $wgRequest->getBool( 'hideBots', $prefs['hidebots'] );
+	$hideMinor = $wgRequest->getBool( 'hideMinor', $prefs['hideminor'] );
+
+	# Get namespace value, if supplied, and prepare a WHERE fragment
+	$nameSpace = $wgRequest->getIntOrNull( 'namespace' );
+	if( !is_null( $nameSpace ) ) {
+		$nameSpace = intval( $nameSpace );
+		$nameSpaceClause = " AND rc_namespace = $nameSpace";
+	} else {
+		$nameSpace = '';
+		$nameSpaceClause = '';
+	}
+
+	# Watchlist editing
+	$action = $wgRequest->getVal( 'action' );
+	$remove = $wgRequest->getVal( 'remove' );
+	$id     = $wgRequest->getArray( 'id' );
+
+	$uid = $wgUser->getID();
+	if( $wgEnotifWatchlist && $wgRequest->getVal( 'reset' ) && $wgRequest->wasPosted() ) {
+		$wgUser->clearAllNotifications( $uid );
+	}
+
+	 # Deleting items from watchlist
+	if(($action == 'submit') && isset($remove) && is_array($id)) {
+		$wgOut->addWikiText( wfMsg( 'removingchecked' ) );
+		$wgOut->addHTML( "<ul id=\"mw-unwatch-list\">\n" );
+		foreach($id as $one) {
+			$t = Title::newFromURL( $one );
+			if( !is_null( $t ) ) {
+				$wl = WatchedItem::fromUserTitle( $wgUser, $t );
+				if( $wl->removeWatch() === false ) {
+					$wgOut->addHTML( '<li class="mw-unwatch-failure">' . wfMsg( 'couldntremove', htmlspecialchars($one) ) . "</li>\n" );
+				} else {
+					wfRunHooks('UnwatchArticle', array(&$wgUser, new Article($t)));
+					$wgOut->addHTML( '<li class="mw-unwatch-success">[[' . htmlspecialchars($one) . "]]</li>\n" );
+				}
+			} else {
+				$wgOut->addHTML( '<li class="mw-unwatch-invalid">' . wfMsg( 'iteminvalidname', htmlspecialchars($one) ) . "</li>\n" );
+			}
+		}
+		$wgOut->addHTML( "</ul>\n<p>" . wfMsg( 'wldone' ) . "</p>\n" );
+	}
+
+	$dbr = wfGetDB( DB_SLAVE, 'watchlist' );
+	list( $page, $watchlist, $recentchanges ) = $dbr->tableNamesN( 'page', 'watchlist', 'recentchanges' );
+
+	$sql = "SELECT COUNT(*) AS n FROM $watchlist WHERE wl_user=$uid";
+	$res = $dbr->query( $sql, $fname );
+	$s = $dbr->fetchObject( $res );
+
+#	Patch *** A1 *** (see A2 below)
+#	adjust for page X, talk:page X, which are both stored separately, but treated together
+	$nitems = floor($s->n / 2);
+#	$nitems = $s->n;
+
+	if($nitems == 0) {
+		$wgOut->addWikiText( wfMsg( 'nowatchlist' ) );
+		return;
+	}
+
+	if( is_null($days) || !is_numeric($days) ) {
+		$big = 1000; /* The magical big */
+		if($nitems > $big) {
+			# Set default cutoff shorter
+			$days = $defaults['days'] = (12.0 / 24.0); # 12 hours...
+		} else {
+			$days = $defaults['days']; # default cutoff for shortlisters
+		}
+	} else {
+		$days = floatval($days);
+	}
+
+	// Dump everything here
+	$nondefaults = array();
+
+	wfAppendToArrayIfNotDefault('days'     , $days         , $defaults, $nondefaults);
+	wfAppendToArrayIfNotDefault('hideOwn'  , (int)$hideOwn , $defaults, $nondefaults);
+	wfAppendToArrayIfNotDefault('hideBots' , (int)$hideBots, $defaults, $nondefaults);
+	wfAppendToArrayIfNotDefault( 'hideMinor', (int)$hideMinor, $defaults, $nondefaults );
+	wfAppendToArrayIfNotDefault('namespace', $nameSpace    , $defaults, $nondefaults);
+
+	if ( $days <= 0 ) {
+		$andcutoff = '';
+		$npages = wfMsg( 'watchlistall1' );
+	} else {
+		$andcutoff = "AND rc_timestamp > '".$dbr->timestamp( time() - intval( $days * 86400 ) )."'";
+		/*
+		$sql = "SELECT COUNT(*) AS n FROM $page, $revision  WHERE rev_timestamp>'$cutoff' AND page_id=rev_page";
+		$res = $dbr->query( $sql, $fname );
+		$s = $dbr->fetchObject( $res );
+		$npages = $s->n;
+		*/
+		$npages = 40000 * $days;
+	}
+
+	/* Edit watchlist form */
+	if($wgRequest->getBool('edit') || $par == 'edit' ) {
+		$wgOut->addWikiText( wfMsgExt( 'watchlistcontains', array( 'parseinline' ), $wgLang->formatNum( $nitems ) ) .
+			"\n\n" . wfMsg( 'watcheditlist' ) );
+
+		$wgOut->addHTML( '<form action=\'' .
+			$specialTitle->escapeLocalUrl( 'action=submit' ) .
+			"' method='post'>\n" );
+
+#		Patch A2
+#		The following was proposed by KTurner 07.11.2004 to T.Gries
+#		$sql = "SELECT distinct (wl_namespace & ~1),wl_title FROM $watchlist WHERE wl_user=$uid";
+		$sql = "SELECT wl_namespace, wl_title, page_is_redirect FROM $watchlist LEFT JOIN $page ON wl_namespace = page_namespace AND wl_title = page_title WHERE wl_user=$uid";
+
+		$res = $dbr->query( $sql, $fname );
+
+		# Batch existence check
+		$linkBatch = new LinkBatch();
+		while( $row = $dbr->fetchObject( $res ) )
+			$linkBatch->addObj( Title::makeTitleSafe( $row->wl_namespace, $row->wl_title ) );
+		$linkBatch->execute();
+
+		if( $dbr->numRows( $res ) > 0 )
+			$dbr->dataSeek( $res, 0 ); # Let's do the time warp again!
+
+		$sk = $wgUser->getSkin();
+
+		$list = array();
+		while( $s = $dbr->fetchObject( $res ) ) {
+			$list[$s->wl_namespace][$s->wl_title] = $s->page_is_redirect;
+		}
+
+		// TODO: Display a TOC
+		foreach($list as $ns => $titles) {
+			if (Namespace::isTalk($ns))
+				continue;
+			if ($ns != NS_MAIN)
+				$wgOut->addHTML( '<h2>' . $wgContLang->getFormattedNsText( $ns ) . '</h2>' );
+			$wgOut->addHTML( '<ul>' );
+			foreach( $titles as $title => $redir ) {
+				$titleObj = Title::makeTitle( $ns, $title );
+				if( is_null( $titleObj ) ) {
+					$wgOut->addHTML(
+						'<!-- bad title "' .
+						htmlspecialchars( $s->wl_title ) . '" in namespace ' . $s->wl_namespace . " -->\n"
+					);
+				} else {
+					global $wgContLang;
+					$toolLinks = array();
+					$pageLink = $sk->makeLinkObj( $titleObj );
+					$toolLinks[] = $sk->makeLinkObj( $titleObj->getTalkPage(), $wgLang->getNsText( NS_TALK ) );
+					if( $titleObj->exists() )
+						$toolLinks[] = $sk->makeKnownLinkObj( $titleObj, wfMsgHtml( 'history_short' ), 'action=history' );
+					$toolLinks = '(' . implode( ' | ', $toolLinks ) . ')';
+					$checkbox = '<input type="checkbox" name="id[]" value="' . htmlspecialchars( $titleObj->getPrefixedText() ) . '" /> ' . ( $wgContLang->isRTL() ? '&rlm;' : '&lrm;' );
+					if( $redir ) {
+						$spanopen = '<span class="watchlistredir">';
+						$spanclosed = '</span>';
+					} else {
+						$spanopen = $spanclosed = '';
+					}
+
+					$wgOut->addHTML( "<li>{$checkbox}{$spanopen}{$pageLink}{$spanclosed} {$toolLinks}</li>\n" );
+				}
+			}
+			$wgOut->addHTML( '</ul>' );
+		}
+		$wgOut->addHTML(
+			wfSubmitButton( wfMsg('removechecked'), array('name' => 'remove') ) .
+			"\n</form>\n"
+		);
+
+		return;
+	}
+
+	# If the watchlist is relatively short, it's simplest to zip
+	# down its entirety and then sort the results.
+
+	# If it's relatively long, it may be worth our while to zip
+	# through the time-sorted page list checking for watched items.
+
+	# Up estimate of watched items by 15% to compensate for talk pages...
+
+	# Toggles
+	$andHideOwn = $hideOwn ? "AND (rc_user <> $uid)" : '';
+	$andHideBots = $hideBots ? "AND (rc_bot = 0)" : '';
+	$andHideMinor = $hideMinor ? 'AND rc_minor = 0' : '';
+
+	# Show watchlist header
+	$header = '';
+	if( $wgUser->getOption( 'enotifwatchlistpages' ) && $wgEnotifWatchlist) {
+		$header .= wfMsg( 'wlheader-enotif' ) . "\n";
+	}
+	if ( $wgEnotifWatchlist && $wgShowUpdatedMarker ) {
+		$header .= wfMsg( 'wlheader-showupdated' ) . "\n";
+	}
+
+  # Toggle watchlist content (all recent edits or just the latest)
+	if( $wgUser->getOption( 'extendwatchlist' )) {
+		$andLatest='';
+ 		$limitWatchlist = 'LIMIT ' . intval( $wgUser->getOption( 'wllimit' ) );
+	} else {
+	# Top log Ids for a page are not stored
+		$andLatest= 'AND (rc_this_oldid=page_latest OR rc_type=' . RC_LOG . ') ';
+		$limitWatchlist = '';
+	}
+
+	# TODO: Consider removing the third parameter
+	$header .= wfMsgExt( 'watchdetails', array( 'parsemag' ), $wgLang->formatNum( $nitems ),
+		$wgLang->formatNum( $npages ), '',
+		$specialTitle->getFullUrl( 'edit=yes' ) );
+	$wgOut->addWikiText( $header );
+
+	if ( $wgEnotifWatchlist && $wgShowUpdatedMarker ) {
+		$wgOut->addHTML( '<form action="' .
+			$specialTitle->escapeLocalUrl() .
+			'" method="post"><input type="submit" name="dummy" value="' .
+			htmlspecialchars( wfMsg( 'enotif_reset' ) ) .
+			'" /><input type="hidden" name="reset" value="all" /></form>' .
+			"\n\n" );
+	}
+
+	$sql = "SELECT *
+	  FROM $watchlist,$recentchanges,$page
+	  WHERE wl_user=$uid
+	  AND wl_namespace=rc_namespace
+	  AND wl_title=rc_title
+	  AND rc_cur_id=page_id
+	  $andcutoff
+	  $andLatest
+	  $andHideOwn
+	  $andHideBots
+	  $andHideMinor
+	  $nameSpaceClause
+	  ORDER BY rc_timestamp DESC
+	  $limitWatchlist";
+
+	$res = $dbr->query( $sql, $fname );
+	$numRows = $dbr->numRows( $res );
+
+	/* Start bottom header */
+	$wgOut->addHTML( "<hr />\n" );
+
+	if($days >= 1) {
+		$wgOut->addWikiText( wfMsgExt( 'rcnote', array( 'parseinline' ), $wgLang->formatNum( $numRows ),
+			$wgLang->formatNum( $days ), $wgLang->timeAndDate( wfTimestampNow(), true ) ) . '<br />' , false );
+	} elseif($days > 0) {
+		$wgOut->addWikiText( wfMsgExt( 'wlnote', array( 'parseinline' ), $wgLang->formatNum( $numRows ),
+			$wgLang->formatNum( round($days*24) ) ) . '<br />' , false );
+	}
+
+	$wgOut->addHTML( "\n" . wlCutoffLinks( $days, 'Watchlist', $nondefaults ) . "<br />\n" );
+
+	# Spit out some control panel links
+	$thisTitle = SpecialPage::getTitleFor( 'Watchlist' );
+	$skin = $wgUser->getSkin();
+
+	# Hide/show bot edits
+	$label = $hideBots ? wfMsgHtml( 'watchlist-show-bots' ) : wfMsgHtml( 'watchlist-hide-bots' );
+	$linkBits = wfArrayToCGI( array( 'hideBots' => 1 - (int)$hideBots ), $nondefaults );
+	$links[] = $skin->makeKnownLinkObj( $thisTitle, $label, $linkBits );
+	
+	# Hide/show own edits
+	$label = $hideOwn ? wfMsgHtml( 'watchlist-show-own' ) : wfMsgHtml( 'watchlist-hide-own' );
+	$linkBits = wfArrayToCGI( array( 'hideOwn' => 1 - (int)$hideOwn ), $nondefaults );
+	$links[] = $skin->makeKnownLinkObj( $thisTitle, $label, $linkBits );
+
+	# Hide/show minor edits
+	$label = $hideMinor ? wfMsgHtml( 'watchlist-show-minor' ) : wfMsgHtml( 'watchlist-hide-minor' );
+	$linkBits = wfArrayToCGI( array( 'hideMinor' => 1 - (int)$hideMinor ), $nondefaults );
+	$links[] = $skin->makeKnownLinkObj( $thisTitle, $label, $linkBits );
+
+	$wgOut->addHTML( implode( ' | ', $links ) );
+
+	# Form for namespace filtering
+	$form  = Xml::openElement( 'form', array( 'method' => 'post', 'action' => $thisTitle->getLocalUrl() ) );
+	$form .= '<p>';
+	$form .= Xml::label( wfMsg( 'namespace' ), 'namespace' ) . '&nbsp;';
+	$form .= Xml::namespaceSelector( $nameSpace, '' ) . '&nbsp;';
+	$form .= Xml::submitButton( wfMsg( 'allpagessubmit' ) ) . '</p>';
+	$form .= Xml::hidden( 'days', $days );
+	if( $hideOwn )
+		$form .= Xml::hidden( 'hideOwn', 1 );
+	if( $hideBots )
+		$form .= Xml::hidden( 'hideBots', 1 );
+	if( $hideMinor )
+		$form .= Xml::hidden( 'hideMinor', 1 );
+	$form .= Xml::closeElement( 'form' );
+	$wgOut->addHtml( $form );
+
+	# If there's nothing to show, stop here
+	if( $numRows == 0 ) {
+		$wgOut->addWikiText( wfMsgNoTrans( 'watchnochange' ) );
+		return;
+	}
+
+	/* End bottom header */
+
+	/* Do link batch query */
+	$linkBatch = new LinkBatch;
+	while ( $row = $dbr->fetchObject( $res ) ) {
+		$userNameUnderscored = str_replace( ' ', '_', $row->rc_user_text );
+		if ( $row->rc_user != 0 ) {
+			$linkBatch->add( NS_USER, $userNameUnderscored );
+		}
+		$linkBatch->add( NS_USER_TALK, $userNameUnderscored );
+	}
+	$linkBatch->execute();
+	$dbr->dataSeek( $res, 0 );
+
+	$list = ChangesList::newFromUser( $wgUser );
+
+	$s = $list->beginRecentChangesList();
+	$counter = 1;
+	while ( $obj = $dbr->fetchObject( $res ) ) {
+		# Make RC entry
+		$rc = RecentChange::newFromRow( $obj );
+		$rc->counter = $counter++;
+
+		if ( $wgShowUpdatedMarker ) {
+			$updated = $obj->wl_notificationtimestamp;
+		} else {
+			// Same visual appearance as MW 1.4
+			$updated = true;
+		}
+
+		if ($wgRCShowWatchingUsers && $wgUser->getOption( 'shownumberswatching' )) {
+			$sql3 = "SELECT COUNT(*) AS n FROM $watchlist WHERE wl_title='" .$dbr->strencode($obj->page_title). "' AND wl_namespace='{$obj->page_namespace}'" ;
+			$res3 = $dbr->query( $sql3, $fname );
+			$x = $dbr->fetchObject( $res3 );
+			$rc->numberofWatchingusers = $x->n;
+		} else {
+			$rc->numberofWatchingusers = 0;
+		}
+
+		$s .= $list->recentChangesLine( $rc, $updated );
+	}
+	$s .= $list->endRecentChangesList();
+
+	$dbr->freeResult( $res );
+	$wgOut->addHTML( $s );
+
+}
+
+function wlHoursLink( $h, $page, $options = array() ) {
+	global $wgUser, $wgLang, $wgContLang;
+	$sk = $wgUser->getSkin();
+	$s = $sk->makeKnownLink(
+	  $wgContLang->specialPage( $page ),
+	  $wgLang->formatNum( $h ),
+	  wfArrayToCGI( array('days' => ($h / 24.0)), $options ) );
+	return $s;
+}
+
+function wlDaysLink( $d, $page, $options = array() ) {
+	global $wgUser, $wgLang, $wgContLang;
+	$sk = $wgUser->getSkin();
+	$s = $sk->makeKnownLink(
+	  $wgContLang->specialPage( $page ),
+	  ($d ? $wgLang->formatNum( $d ) : wfMsgHtml( 'watchlistall2' ) ),
+	  wfArrayToCGI( array('days' => $d), $options ) );
+	return $s;
+}
+
+/**
+ * Returns html
+ */
+function wlCutoffLinks( $days, $page = 'Watchlist', $options = array() ) {
+	$hours = array( 1, 2, 6, 12 );
+	$days = array( 1, 3, 7 );
+	$i = 0;
+	foreach( $hours as $h ) {
+		$hours[$i++] = wlHoursLink( $h, $page, $options );
+	}
+	$i = 0;
+	foreach( $days as $d ) {
+		$days[$i++] = wlDaysLink( $d, $page, $options );
+	}
+	return wfMsgExt('wlshowlast',
+		array('parseinline', 'replaceafter'),
+		implode(' | ', $hours),
+		implode(' | ', $days),
+		wlDaysLink( 0, $page, $options ) );
+}
+
+/**
+ * Count the number of items on a user's watchlist
+ *
+ * @param $talk Include talk pages
+ * @return integer
+ */
+function wlCountItems( &$user, $talk = true ) {
+	$dbr = wfGetDB( DB_SLAVE, 'watchlist' );
+
+	# Fetch the raw count
+	$res = $dbr->select( 'watchlist', 'COUNT(*) AS count', array( 'wl_user' => $user->mId ), 'wlCountItems' );
+	$row = $dbr->fetchObject( $res );
+	$count = $row->count;
+	$dbr->freeResult( $res );
+
+	# Halve to remove talk pages if needed
+	if( !$talk )
+		$count = floor( $count / 2 );
+
+	return( $count );
+}
+
+/**
+ * Allow the user to clear their watchlist
+ *
+ * @param $out Output object
+ * @param $request Request object
+ * @param $par Parameters passed to the watchlist page
+ * @return bool True if it's been taken care of; false indicates the watchlist
+ * 				code needs to do something further
+ */
+function wlHandleClear( &$out, &$request, $par ) {
+	global $wgLang;
+
+	# Check this function has something to do
+	if( $request->getText( 'action' ) == 'clear' || $par == 'clear' ) {
+		global $wgUser;
+		$out->setPageTitle( wfMsgHtml( 'clearwatchlist' ) );
+		$count = wlCountItems( $wgUser );
+		if( $count > 0 ) {
+			# See if we're clearing or confirming
+			if( $request->wasPosted() && $wgUser->matchEditToken( $request->getText( 'token' ), 'clearwatchlist' ) ) {
+				# Clearing, so do it and report the result
+				$dbw = wfGetDB( DB_MASTER );
+				$dbw->delete( 'watchlist', array( 'wl_user' => $wgUser->mId ), 'wlHandleClear' );
+				$out->addWikiText( wfMsgExt( 'watchlistcleardone', array( 'parsemag', 'escape'), $wgLang->formatNum( $count ) ) );
+				$out->returnToMain();
+			} else {
+				# Confirming, so show a form
+				$wlTitle = SpecialPage::getTitleFor( 'Watchlist' );
+				$out->addHTML( wfElement( 'form', array( 'method' => 'post', 'action' => $wlTitle->getLocalUrl( 'action=clear' ) ), NULL ) );
+				$out->addWikiText( wfMsgExt( 'watchlistcount', array( 'parsemag', 'escape'), $wgLang->formatNum( $count ) ) );
+				$out->addWikiText( wfMsg( 'watchlistcleartext' ) );
+				$out->addHTML(
+					wfHidden( 'token', $wgUser->editToken( 'clearwatchlist' ) ) .
+					wfElement( 'input', array( 'type' => 'submit', 'name' => 'submit', 'value' => wfMsgHtml( 'watchlistclearbutton' ) ), '' ) .
+					wfCloseElement( 'form' )
+				);
+			}
+			return( true );
+		} else {
+			# Nothing on the watchlist; nothing to do here
+			$out->addWikiText( wfMsg( 'nowatchlist' ) );
+			$out->returnToMain();
+			return( true );
+		}
+	} else {
+		return( false );
+	}
+}
+?>
Index: /MediaWiki/branches/1.11/includes/SpecialWhatlinkshere.php
===================================================================
--- /MediaWiki/branches/1.11/includes/SpecialWhatlinkshere.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/SpecialWhatlinkshere.php	(revision 1280)
@@ -0,0 +1,315 @@
+<?php
+/**
+ *
+ * @addtogroup SpecialPage
+ */
+
+/**
+ * Entry point
+ * @param string $par An article name ??
+ */
+function wfSpecialWhatlinkshere($par = NULL) {
+	global $wgRequest;
+	$page = new WhatLinksHerePage( $wgRequest, $par );
+	$page->execute();
+}
+
+/**
+ * implements Special:Whatlinkshere
+ * @addtogroup SpecialPage
+ */
+class WhatLinksHerePage {
+	var $request, $par;
+	var $limit, $from, $back, $target;
+	var $selfTitle, $skin;
+
+	private $namespace;
+
+	function WhatLinksHerePage( &$request, $par = null ) {
+		global $wgUser;
+		$this->request =& $request;
+		$this->skin = $wgUser->getSkin();
+		$this->par = $par;
+	}
+
+	function execute() {
+		global $wgOut;
+
+		$this->limit = min( $this->request->getInt( 'limit', 50 ), 5000 );
+		if ( $this->limit <= 0 ) {
+			$this->limit = 50;
+		}
+		$this->from = $this->request->getInt( 'from' );
+		$this->back = $this->request->getInt( 'back' );
+
+		$targetString = isset($this->par) ? $this->par : $this->request->getVal( 'target' );
+
+		if (is_null($targetString)) {
+			$wgOut->showErrorPage( 'notargettitle', 'notargettext' );
+			return;
+		}
+
+		$this->target = Title::newFromURL( $targetString );
+		if( !$this->target ) {
+			$wgOut->showErrorPage( 'notargettitle', 'notargettext' );
+			return;
+		}
+		$this->selfTitle = Title::makeTitleSafe( NS_SPECIAL,
+			'Whatlinkshere/' . $this->target->getPrefixedDBkey() );
+		$wgOut->setPagetitle( $this->target->getPrefixedText() );
+		$wgOut->setSubtitle( wfMsg( 'linklistsub' ) );
+
+		$wgOut->addHTML( wfMsg( 'whatlinkshere-barrow' ) . ' '  .$this->skin->makeLinkObj($this->target, '', 'redirect=no' )."<br />\n");
+
+		$this->showIndirectLinks( 0, $this->target, $this->limit, $this->from, $this->back );
+	}
+
+	/**
+	 * @param int       $level      Recursion level
+	 * @param Title     $target     Target title
+	 * @param int       $limit      Number of entries to display
+	 * @param Title     $from       Display from this article ID
+	 * @param Title     $back       Display from this article ID at backwards scrolling
+	 * @private
+	 */
+	function showIndirectLinks( $level, $target, $limit, $from = 0, $back = 0 ) {
+		global $wgOut;
+		$fname = 'WhatLinksHerePage::showIndirectLinks';
+		$dbr = wfGetDB( DB_READ );
+		$options = array();
+
+		$ns = $this->request->getIntOrNull( 'namespace' );
+		if ( isset( $ns ) ) {
+			$options['namespace'] = $ns;
+			$this->setNamespace( $options['namespace'] );
+		} else {
+			$options['namespace'] = '';
+		}
+
+		// Make the query
+		$plConds = array(
+			'page_id=pl_from',
+			'pl_namespace' => $target->getNamespace(),
+			'pl_title' => $target->getDBkey(),
+		);
+
+		$tlConds = array(
+			'page_id=tl_from',
+			'tl_namespace' => $target->getNamespace(),
+			'tl_title' => $target->getDBkey(),
+		);
+
+		if ( $this->namespace !== null ){
+			$plConds['page_namespace'] = (int)$this->namespace;
+			$tlConds['page_namespace'] = (int)$this->namespace;
+		}
+
+		if ( $from ) {
+			$offsetCond = "page_id >= $from";
+		} else {
+			$offsetCond = false;
+		}
+		$options['ORDER BY'] = 'page_id';
+
+		// Read an extra row as an at-end check
+		$queryLimit = $limit + 1;
+		$options['LIMIT'] = $queryLimit;
+		if ( $offsetCond ) {
+			$tlConds[] = $offsetCond;
+			$plConds[] = $offsetCond;
+		}
+		$fields = array( 'page_id', 'page_namespace', 'page_title', 'page_is_redirect' );
+
+		$plRes = $dbr->select( array( 'pagelinks', 'page' ), $fields,
+			$plConds, $fname, $options );
+		$tlRes = $dbr->select( array( 'templatelinks', 'page' ), $fields,
+			$tlConds, $fname, $options );
+		if ( !$dbr->numRows( $plRes ) && !$dbr->numRows( $tlRes ) ) {
+			if ( 0 == $level && !isset( $this->namespace ) ) {
+				// really no links to here
+				$wgOut->addWikiText( wfMsg( 'nolinkshere', $this->target->getPrefixedText() ) );
+			} elseif ( 0 == $level && isset( $this->namespace ) ) {
+				// no links from requested namespace to here
+				$options = array(); // reinitialize for a further namespace search
+				$options['namespace'] = $this->namespace;
+				$options['target'] = $this->target->getPrefixedText();
+				list( $options['limit'], $options['offset']) = wfCheckLimits();
+				$wgOut->addHTML( $this->whatlinkshereForm( $options ) );
+				$wgOut->addWikiText( wfMsg( 'nolinkshere-ns', $this->target->getPrefixedText() ) );
+			}
+			return;
+		}
+
+		$options = array();
+		list( $options['limit'], $options['offset']) = wfCheckLimits();
+		if ( ( $ns = $this->request->getVal( 'namespace', null ) ) !== null && $ns !== '' && ctype_digit($ns) ) {
+			$options['namespace'] = intval( $ns );
+			$this->setNamespace( $options['namespace'] );
+		} else {
+			$options['namespace'] = '';
+			$this->setNamespace( null );
+		}
+		$options['offset'] = $this->request->getVal( 'offset' );
+		/* Offset must be an integral. */
+		if ( !strlen( $options['offset'] ) || !preg_match( '/^[0-9]+$/', $options['offset'] ) )
+		$options['offset'] = '';
+		$options['target'] = $this->target->getPrefixedDBkey();
+
+		// Read the rows into an array and remove duplicates
+		// templatelinks comes second so that the templatelinks row overwrites the
+		// pagelinks row, so we get (inclusion) rather than nothing
+		while ( $row = $dbr->fetchObject( $plRes ) ) {
+			$row->is_template = 0;
+			$rows[$row->page_id] = $row;
+		}
+		$dbr->freeResult( $plRes );
+		while ( $row = $dbr->fetchObject( $tlRes ) ) {
+			$row->is_template = 1;
+			$rows[$row->page_id] = $row;
+		}
+		$dbr->freeResult( $tlRes );
+
+		// Sort by key and then change the keys to 0-based indices
+		ksort( $rows );
+		$rows = array_values( $rows );
+
+		$numRows = count( $rows );
+
+		// Work out the start and end IDs, for prev/next links
+		if ( $numRows > $limit ) {
+			// More rows available after these ones
+			// Get the ID from the last row in the result set
+			$nextId = $rows[$limit]->page_id;
+			// Remove undisplayed rows
+			$rows = array_slice( $rows, 0, $limit );
+		} else {
+			// No more rows after
+			$nextId = false;
+		}
+		$prevId = $from;
+
+		if ( $level == 0 ) {
+			$wgOut->addHTML( $this->whatlinkshereForm( $options ) );
+			$wgOut->addWikiText( wfMsg( 'linkshere', $this->target->getPrefixedText() ) );
+		}
+		$isredir = wfMsg( 'isredirect' );
+		$istemplate = wfMsg( 'istemplate' );
+
+		if( $level == 0 ) {
+			$prevnext = $this->getPrevNext( $limit, $prevId, $nextId, $options['namespace'] );
+			$wgOut->addHTML( $prevnext );
+		}
+
+		$wgOut->addHTML( '<ul>' );
+		foreach ( $rows as $row ) {
+			$nt = Title::makeTitle( $row->page_namespace, $row->page_title );
+
+			if ( $row->page_is_redirect ) {
+				$extra = 'redirect=no';
+			} else {
+				$extra = '';
+			}
+
+			$link = $this->skin->makeKnownLinkObj( $nt, '', $extra );
+			$wgOut->addHTML( '<li>'.$link );
+
+			// Display properties (redirect or template)
+			$props = array();
+			if ( $row->page_is_redirect ) {
+				$props[] = $isredir;
+			}
+			if ( $row->is_template ) {
+				$props[] = $istemplate;
+			}
+			if ( count( $props ) ) {
+				// FIXME? Cultural assumption, hard-coded punctuation
+				$wgOut->addHTML( ' (' . implode( ', ', $props ) . ') ' );
+			}
+
+			if ( $row->page_is_redirect ) {
+				if ( $level < 2 ) {
+					$this->showIndirectLinks( $level + 1, $nt, 500 );
+				}
+			}
+			$wgOut->addHTML( "</li>\n" );
+		}
+		$wgOut->addHTML( "</ul>\n" );
+
+		if( $level == 0 ) {
+			$wgOut->addHTML( $prevnext );
+		}
+	}
+
+	function makeSelfLink( $text, $query ) {
+		return $this->skin->makeKnownLinkObj( $this->selfTitle, $text, $query );
+	}
+
+	function getPrevNext( $limit, $prevId, $nextId ) {
+		global $wgLang;
+		$fmtLimit = $wgLang->formatNum( $limit );
+		$prev = wfMsgExt( 'whatlinkshere-prev', array( 'parsemag', 'escape' ), $fmtLimit );
+		$next = wfMsgExt( 'whatlinkshere-next', array( 'parsemag', 'escape' ), $fmtLimit );
+
+		$nsText = '';
+		if( is_int($this->namespace) ) {
+			$nsText = "&namespace={$this->namespace}";
+		}
+
+		if ( 0 != $prevId ) {
+			$prevLink = $this->makeSelfLink( $prev, "limit={$limit}&from={$this->back}{$nsText}" );
+		} else {
+			$prevLink = $prev;
+		}
+		if ( 0 != $nextId ) {
+			$nextLink = $this->makeSelfLink( $next, "limit={$limit}&from={$nextId}&back={$prevId}{$nsText}" );
+		} else {
+			$nextLink = $next;
+		}
+		$nums = $this->numLink( 20, $prevId ) . ' | ' .
+		  $this->numLink( 50, $prevId ) . ' | ' .
+		  $this->numLink( 100, $prevId ) . ' | ' .
+		  $this->numLink( 250, $prevId ) . ' | ' .
+		  $this->numLink( 500, $prevId );
+
+		return wfMsg( 'viewprevnext', $prevLink, $nextLink, $nums );
+	}
+
+	function numLink( $limit, $from, $ns = null ) {
+		global $wgLang;
+		$query = "limit={$limit}&from={$from}";
+		if( is_int($this->namespace) ) { $query .= "&namespace={$this->namespace}";}
+		$fmtLimit = $wgLang->formatNum( $limit );
+		return $this->makeSelfLink( $fmtLimit, $query );
+	}
+
+	function whatlinkshereForm( $options ) {
+		global $wgScript, $wgTitle;
+
+		$options['title'] = $wgTitle->getPrefixedText();
+
+		$f = Xml::openElement( 'form', array( 'method' => 'get', 'action' => "$wgScript" ) ) .
+			'<fieldset>' .
+			Xml::element( 'legend', array(), wfMsg( 'whatlinkshere' ) );
+
+		foreach ( $options as $name => $value ) {
+			if( $name === 'namespace') continue;
+			$f .= "\t" . Xml::hidden( $name, $value ). "\n";
+		}
+
+		$f .= Xml::label( wfMsg( 'namespace' ), 'namespace' ) . ' ' .
+			Xml::namespaceSelector( $options['namespace'], '' ) .
+			Xml::submitButton( wfMsg( 'allpagessubmit' ) ) .
+			'</fieldset>' .
+			Xml::closeElement( 'form' ) . "\n";
+
+		return $f;
+	}
+
+	/** Set the namespace we are filtering on */
+	private function setNamespace( $ns ) {
+		$this->namespace = $ns;
+	}
+
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/SpecialWithoutinterwiki.php
===================================================================
--- /MediaWiki/branches/1.11/includes/SpecialWithoutinterwiki.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/SpecialWithoutinterwiki.php	(revision 1280)
@@ -0,0 +1,56 @@
+<?php
+
+/**
+ * Special page lists pages without language links
+ *
+ * @package MediaWiki
+ * @addtogroup SpecialPage
+ * @author Rob Church <robchur@gmail.com>
+ */
+class WithoutInterwikiPage extends PageQueryPage {
+
+	function getName() {
+		return 'Withoutinterwiki';
+	}
+	
+	function getPageHeader() {
+		return '<p>' . wfMsgHtml( 'withoutinterwiki-header' ) . '</p>';
+	}
+
+	function sortDescending() {
+		return false;
+	}
+
+	function isExpensive() {
+		return true;
+	}
+	
+	function isSyndicated() {
+		return false;
+	}
+
+	function getSQL() {
+		$dbr = wfGetDB( DB_SLAVE );
+		list( $page, $langlinks ) = $dbr->tableNamesN( 'page', 'langlinks' );
+		return
+		  "SELECT 'Withoutinterwiki'  AS type,
+		          page_namespace AS namespace,
+		          page_title     AS title,
+		          page_title     AS value
+		     FROM $page
+		LEFT JOIN $langlinks
+		       ON ll_from = page_id
+		    WHERE ll_title IS NULL
+		      AND page_namespace=" . NS_MAIN . "
+		      AND page_is_redirect = 0";
+	}
+	
+}
+
+function wfSpecialWithoutinterwiki() {
+	list( $limit, $offset ) = wfCheckLimits();
+	$wip = new WithoutInterwikiPage();
+	$wip->doQuery( $offset, $limit );
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/SquidUpdate.php
===================================================================
--- /MediaWiki/branches/1.11/includes/SquidUpdate.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/SquidUpdate.php	(revision 1280)
@@ -0,0 +1,280 @@
+<?php
+/**
+ * See deferred.txt
+ */
+
+/**
+ *
+ */
+class SquidUpdate {
+	var $urlArr, $mMaxTitles;
+
+	function __construct( $urlArr = Array(), $maxTitles = false ) {
+		global $wgMaxSquidPurgeTitles;
+		if ( $maxTitles === false ) {
+			$this->mMaxTitles = $wgMaxSquidPurgeTitles;
+		} else {
+			$this->mMaxTitles = $maxTitles;
+		}
+		if ( count( $urlArr ) > $this->mMaxTitles ) {
+			$urlArr = array_slice( $urlArr, 0, $this->mMaxTitles );
+		}
+		$this->urlArr = $urlArr;
+	}
+
+	/* static */ function newFromLinksTo( &$title ) {
+		$fname = 'SquidUpdate::newFromLinksTo';
+		wfProfileIn( $fname );
+
+		# Get a list of URLs linking to this page
+		$dbr = wfGetDB( DB_SLAVE );
+		$res = $dbr->select( array( 'links', 'page' ),
+			array( 'page_namespace', 'page_title' ),
+			array(
+				'pl_namespace' => $title->getNamespace(),
+				'pl_title'     => $title->getDbKey(),
+				'pl_from=page_id' ),
+			$fname );
+		$blurlArr = $title->getSquidURLs();
+		if ( $dbr->numRows( $res ) <= $this->mMaxTitles ) {
+			while ( $BL = $dbr->fetchObject ( $res ) )
+			{
+				$tobj = Title::makeTitle( $BL->page_namespace, $BL->page_title ) ;
+				$blurlArr[] = $tobj->getInternalURL();
+			}
+		}
+		$dbr->freeResult ( $res ) ;
+
+		wfProfileOut( $fname );
+		return new SquidUpdate( $blurlArr );
+	}
+
+	/* static */ function newFromTitles( &$titles, $urlArr = array() ) {
+		global $wgMaxSquidPurgeTitles;
+		if ( count( $titles ) > $wgMaxSquidPurgeTitles ) {
+			$titles = array_slice( $titles, 0, $wgMaxSquidPurgeTitles );
+		}
+		foreach ( $titles as $title ) {
+			$urlArr[] = $title->getInternalURL();
+		}
+		return new SquidUpdate( $urlArr );
+	}
+
+	/* static */ function newSimplePurge( &$title ) {
+		$urlArr = $title->getSquidURLs();
+		return new SquidUpdate( $urlArr );
+	}
+
+	function doUpdate() {
+		SquidUpdate::purge( $this->urlArr );
+	}
+
+	/* Purges a list of Squids defined in $wgSquidServers.
+	$urlArr should contain the full URLs to purge as values
+	(example: $urlArr[] = 'http://my.host/something')
+	XXX report broken Squids per mail or log */
+
+	/* static */ function purge( $urlArr ) {
+		global $wgSquidServers, $wgHTCPMulticastAddress, $wgHTCPPort;
+
+		/*if ( (@$wgSquidServers[0]) == 'echo' ) {
+			echo implode("<br />\n", $urlArr) . "<br />\n";
+			return;
+		}*/
+
+		if ( $wgHTCPMulticastAddress && $wgHTCPPort )
+			SquidUpdate::HTCPPurge( $urlArr );
+
+		$fname = 'SquidUpdate::purge';
+		wfProfileIn( $fname );
+
+		$maxsocketspersquid = 8; //  socket cap per Squid
+		$urlspersocket = 400; // 400 seems to be a good tradeoff, opening a socket takes a while
+		$firsturl = SquidUpdate::expand( $urlArr[0] );
+		unset($urlArr[0]);
+		$urlArr = array_values($urlArr);
+		$sockspersq =  max(ceil(count($urlArr) / $urlspersocket ),1);
+		if ($sockspersq == 1) {
+			/* the most common case */
+			$urlspersocket = count($urlArr);
+		} else if ($sockspersq > $maxsocketspersquid ) {
+			$urlspersocket = ceil(count($urlArr) / $maxsocketspersquid);
+			$sockspersq = $maxsocketspersquid;
+		}
+		$totalsockets = count($wgSquidServers) * $sockspersq;
+		$sockets = Array();
+
+		/* this sets up the sockets and tests the first socket for each server. */
+		for ($ss=0;$ss < count($wgSquidServers);$ss++) {
+			$failed = false;
+			$so = 0;
+			while ($so < $sockspersq && !$failed) {
+				if ($so == 0) {
+					/* first socket for this server, do the tests */
+					@list($server, $port) = explode(':', $wgSquidServers[$ss]);
+					if(!isset($port)) $port = 80;
+					#$this->debug("Opening socket to $server:$port");
+					$error = $errstr = false;
+					$socket = @fsockopen($server, $port, $error, $errstr, 3);
+					#$this->debug("\n");
+					if (!$socket) {
+						$failed = true;
+						$totalsockets -= $sockspersq;
+					} else {
+						$msg = 'PURGE ' . $firsturl . " HTTP/1.0\r\n".
+						"Connection: Keep-Alive\r\n\r\n";
+						#$this->debug($msg);
+						@fputs($socket,$msg);
+						#$this->debug("...");
+						$res = @fread($socket,512);
+						#$this->debug("\n");
+						/* Squid only returns http headers with 200 or 404 status,
+						if there's more returned something's wrong */
+						if (strlen($res) > 250) {
+							fclose($socket);
+							$failed = true;
+							$totalsockets -= $sockspersq;
+						} else {
+							@stream_set_blocking($socket,false);
+							$sockets[] = $socket;
+						}
+					}
+				} else {
+					/* open the remaining sockets for this server */
+					list($server, $port) = explode(':', $wgSquidServers[$ss]);
+					if(!isset($port)) $port = 80;
+					$sockets[$so+1] = @fsockopen($server, $port, $error, $errstr, 2);
+					@stream_set_blocking($sockets[$so+1],false);
+				}
+				$so++;
+			}
+		}
+
+		if ($urlspersocket > 0) {
+			/* now do the heavy lifting. The fread() relies on Squid returning only the headers */
+			for ($r=0;$r < $urlspersocket;$r++) {
+				for ($s=0;$s < $totalsockets;$s++) {
+					if($r != 0) {
+						$res = '';
+						$esc = 0;
+						while (strlen($res) < 100 && $esc < 200  ) {
+							$res .= @fread($sockets[$s],512);
+							$esc++;
+							usleep(20);
+						}
+					}
+					$urindex = $r + $urlspersocket * ($s - $sockspersq * floor($s / $sockspersq));
+					$url = SquidUpdate::expand( $urlArr[$urindex] );
+					$msg = 'PURGE ' . $url . " HTTP/1.0\r\n".
+					"Connection: Keep-Alive\r\n\r\n";
+					#$this->debug($msg);
+					@fputs($sockets[$s],$msg);
+					#$this->debug("\n");
+				}
+			}
+		}
+		#$this->debug("Reading response...");
+		foreach ($sockets as $socket) {
+			$res = '';
+			$esc = 0;
+			while (strlen($res) < 100 && $esc < 200  ) {
+				$res .= @fread($socket,1024);
+				$esc++;
+				usleep(20);
+			}
+
+			@fclose($socket);
+		}
+		#$this->debug("\n");
+		wfProfileOut( $fname );
+	}
+
+	/* static */ function HTCPPurge( $urlArr ) {
+		global $wgHTCPMulticastAddress, $wgHTCPMulticastTTL, $wgHTCPPort;
+		$fname = 'SquidUpdate::HTCPPurge';
+		wfProfileIn( $fname );
+
+		$htcpOpCLR = 4;                 // HTCP CLR
+
+		// FIXME PHP doesn't support these socket constants (include/linux/in.h)
+		if( !defined( "IPPROTO_IP" ) ) {
+			define( "IPPROTO_IP", 0 );
+			define( "IP_MULTICAST_LOOP", 34 );
+			define( "IP_MULTICAST_TTL", 33 );
+		}
+
+		// pfsockopen doesn't work because we need set_sock_opt
+	        $conn = socket_create( AF_INET, SOCK_DGRAM, SOL_UDP );
+		if ( $conn ) {
+			// Set socket options
+			socket_set_option( $conn, IPPROTO_IP, IP_MULTICAST_LOOP, 0 );
+			if ( $wgHTCPMulticastTTL != 1 )
+				socket_set_option( $conn, IPPROTO_IP, IP_MULTICAST_TTL,
+					$wgHTCPMulticastTTL );
+
+			foreach ( $urlArr as $url ) {
+				if( !is_string( $url ) ) {
+					wfDebugDieBacktrace( 'Bad purge URL' );
+				}
+				$url = SquidUpdate::expand( $url );
+				
+				// Construct a minimal HTCP request diagram
+				// as per RFC 2756
+				// Opcode 'CLR', no response desired, no auth
+				$htcpTransID = rand();
+
+				$htcpSpecifier = pack( 'na4na*na8n',
+					4, 'HEAD', strlen( $url ), $url,
+					8, 'HTTP/1.0', 0 );
+
+				$htcpDataLen = 8 + 2 + strlen( $htcpSpecifier );
+				$htcpLen = 4 + $htcpDataLen + 2;
+
+				// Note! Squid gets the bit order of the first
+				// word wrong, wrt the RFC. Apparently no other
+				// implementation exists, so adapt to Squid
+				$htcpPacket = pack( 'nxxnCxNxxa*n',
+					$htcpLen, $htcpDataLen, $htcpOpCLR,
+					$htcpTransID, $htcpSpecifier, 2);
+
+				// Send out
+				wfDebug( "Purging URL $url via HTCP\n" );
+				socket_sendto( $conn, $htcpPacket, $htcpLen, 0,
+					$wgHTCPMulticastAddress, $wgHTCPPort );
+			}
+		} else {
+			$errstr = socket_strerror( socket_last_error() );
+			wfDebug( "SquidUpdate::HTCPPurge(): Error opening UDP socket: $errstr\n" );
+		}
+		wfProfileOut( $fname );
+	}
+
+	function debug( $text ) {
+		global $wgDebugSquid;
+		if ( $wgDebugSquid ) {
+			wfDebug( $text );
+		}
+	}
+	
+	/**
+	 * Expand local URLs to fully-qualified URLs using the internal protocol
+	 * and host defined in $wgInternalServer. Input that's already fully-
+	 * qualified will be passed through unchanged.
+	 *
+	 * This is used to generate purge URLs that may be either local to the
+	 * main wiki or include a non-native host, such as images hosted on a
+	 * second internal server.
+	 *
+	 * Client functions should not need to call this.
+	 *
+	 * @return string
+	 */
+	static function expand( $url ) {
+		global $wgInternalServer;
+		if( $url != '' && $url{0} == '/' ) {
+			return $wgInternalServer . $url;
+		}
+		return $url;
+	}
+}
+?>
Index: /MediaWiki/branches/1.11/includes/StreamFile.php
===================================================================
--- /MediaWiki/branches/1.11/includes/StreamFile.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/StreamFile.php	(revision 1280)
@@ -0,0 +1,72 @@
+<?php
+/** */
+
+/** */
+function wfStreamFile( $fname ) {
+	$stat = @stat( $fname );
+	if ( !$stat ) {
+		header( 'HTTP/1.0 404 Not Found' );
+		header( 'Cache-Control: no-cache' );
+		header( 'Content-Type: text/html; charset=utf-8' );
+		$encFile = htmlspecialchars( $fname );
+		$encScript = htmlspecialchars( $_SERVER['SCRIPT_NAME'] );
+		echo "<html><body>
+<h1>File not found</h1>
+<p>Although this PHP script ($encScript) exists, the file requested for output 
+($encFile) does not.</p>
+</body></html>
+";
+		return;
+	}
+
+	header( 'Last-Modified: ' . gmdate( 'D, d M Y H:i:s', $stat['mtime'] ) . ' GMT' );
+
+	// Cancel output buffering and gzipping if set
+	wfResetOutputBuffers();
+	
+	$type = wfGetType( $fname );
+	if ( $type and $type!="unknown/unknown") {
+		header("Content-type: $type");
+	} else {
+		header('Content-type: application/x-wiki');
+	}
+
+	if ( !empty( $_SERVER['HTTP_IF_MODIFIED_SINCE'] ) ) {
+		$modsince = preg_replace( '/;.*$/', '', $_SERVER['HTTP_IF_MODIFIED_SINCE'] );
+		$sinceTime = strtotime( $modsince );
+		if ( $stat['mtime'] <= $sinceTime ) {
+			header( "HTTP/1.0 304 Not Modified" );
+			return;
+		}
+	}
+
+	header( 'Content-Length: ' . $stat['size'] );
+
+	readfile( $fname );
+}
+
+/** */
+function wfGetType( $filename ) {
+	global $wgTrivialMimeDetection;
+
+	# trivial detection by file extension,
+	# used for thumbnails (thumb.php)
+	if ($wgTrivialMimeDetection) {
+		$ext= strtolower(strrchr($filename, '.'));
+
+		switch ($ext) {
+			case '.gif': return 'image/gif';
+			case '.png': return 'image/png';
+			case '.jpg': return 'image/jpeg';
+			case '.jpeg': return 'image/jpeg';
+		}
+
+		return 'unknown/unknown';
+	}
+	else {
+		$magic=& MimeMagic::singleton();
+		return $magic->guessMimeType($filename); //full fancy mime detection
+	}
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/StringUtils.php
===================================================================
--- /MediaWiki/branches/1.11/includes/StringUtils.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/StringUtils.php	(revision 1280)
@@ -0,0 +1,303 @@
+<?php
+/**
+ * A collection of static methods to play with strings.
+ */
+class StringUtils {
+	/**
+	 * Perform an operation equivalent to 
+	 *
+	 *     preg_replace( "!$startDelim(.*?)$endDelim!", $replace, $subject );
+	 *
+	 * except that it's worst-case O(N) instead of O(N^2)
+	 *
+	 * Compared to delimiterReplace(), this implementation is fast but memory-
+	 * hungry and inflexible. The memory requirements are such that I don't 
+	 * recommend using it on anything but guaranteed small chunks of text.
+	 */
+	static function hungryDelimiterReplace( $startDelim, $endDelim, $replace, $subject ) {
+		$segments = explode( $startDelim, $subject );
+		$output = array_shift( $segments );
+		foreach ( $segments as $s ) {
+			$endDelimPos = strpos( $s, $endDelim );
+			if ( $endDelimPos === false ) {
+				$output .= $startDelim . $s;
+			} else {
+				$output .= $replace . substr( $s, $endDelimPos + strlen( $endDelim ) );
+			}
+		}
+		return $output;
+	}
+	
+	/**
+	 * Perform an operation equivalent to 
+	 *
+	 *   preg_replace_callback( "!$startDelim(.*)$endDelim!s$flags", $callback, $subject )
+	 *
+	 * This implementation is slower than hungryDelimiterReplace but uses far less
+	 * memory. The delimiters are literal strings, not regular expressions.
+	 *
+	 * @param string $flags Regular expression flags
+	 */
+	# If the start delimiter ends with an initial substring of the end delimiter,
+	# e.g. in the case of C-style comments, the behaviour differs from the model
+	# regex. In this implementation, the end must share no characters with the 
+	# start, so e.g. /*/ is not considered to be both the start and end of a 
+	# comment. /*/xy/*/ is considered to be a single comment with contents /xy/. 
+	static function delimiterReplaceCallback( $startDelim, $endDelim, $callback, $subject, $flags = '' ) {
+		$inputPos = 0;
+		$outputPos = 0;
+		$output = '';
+		$foundStart = false;
+		$encStart = preg_quote( $startDelim, '!' );
+		$encEnd = preg_quote( $endDelim, '!' );
+		$strcmp = strpos( $flags, 'i' ) === false ? 'strcmp' : 'strcasecmp';
+		$endLength = strlen( $endDelim );
+		$m = array();
+		
+		while ( $inputPos < strlen( $subject ) && 
+		  preg_match( "!($encStart)|($encEnd)!S$flags", $subject, $m, PREG_OFFSET_CAPTURE, $inputPos ) ) 
+		{
+			$tokenOffset = $m[0][1];
+			if ( $m[1][0] != '' ) {
+				if ( $foundStart && 
+				  $strcmp( $endDelim, substr( $subject, $tokenOffset, $endLength ) ) == 0 )
+				{
+					# An end match is present at the same location
+					$tokenType = 'end';
+					$tokenLength = $endLength;
+				} else {
+					$tokenType = 'start';
+					$tokenLength = strlen( $m[0][0] );
+				}
+			} elseif ( $m[2][0] != '' ) {
+				$tokenType = 'end';
+				$tokenLength = strlen( $m[0][0] );
+			} else {
+				throw new MWException( 'Invalid delimiter given to ' . __METHOD__ );
+			}
+
+			if ( $tokenType == 'start' ) {
+				$inputPos = $tokenOffset + $tokenLength;
+				# Only move the start position if we haven't already found a start
+				# This means that START START END matches outer pair
+				if ( !$foundStart ) {
+					# Found start
+					# Write out the non-matching section
+					$output .= substr( $subject, $outputPos, $tokenOffset - $outputPos );
+					$outputPos = $tokenOffset;
+					$contentPos = $inputPos;
+					$foundStart = true;
+				}
+			} elseif ( $tokenType == 'end' ) {
+				if ( $foundStart ) {
+					# Found match
+					$output .= call_user_func( $callback, array(
+						substr( $subject, $outputPos, $tokenOffset + $tokenLength - $outputPos ),
+						substr( $subject, $contentPos, $tokenOffset - $contentPos )
+					));
+					$foundStart = false;
+				} else {
+					# Non-matching end, write it out
+					$output .= substr( $subject, $inputPos, $tokenOffset + $tokenLength - $outputPos );
+				}
+				$inputPos = $outputPos = $tokenOffset + $tokenLength;
+			} else {
+				throw new MWException( 'Invalid delimiter given to ' . __METHOD__ );
+			}
+		}
+		if ( $outputPos < strlen( $subject ) ) {
+			$output .= substr( $subject, $outputPos );
+		}
+		return $output;
+	}
+
+	/*
+	 * Perform an operation equivalent to 
+	 *
+	 *   preg_replace( "!$startDelim(.*)$endDelim!$flags", $replace, $subject )
+	 *
+	 * @param string $startDelim Start delimiter regular expression
+	 * @param string $endDelim End delimiter regular expression
+	 * @param string $replace Replacement string. May contain $1, which will be 
+	 *               replaced by the text between the delimiters
+	 * @param string $subject String to search
+	 * @return string The string with the matches replaced
+	 */
+	static function delimiterReplace( $startDelim, $endDelim, $replace, $subject, $flags = '' ) {
+		$replacer = new RegexlikeReplacer( $replace );
+		return self::delimiterReplaceCallback( $startDelim, $endDelim,
+			$replacer->cb(), $subject, $flags );
+	}
+
+	/**
+	 * More or less "markup-safe" explode()
+	 * Ignores any instances of the separator inside <...>
+	 * @param string $separator
+	 * @param string $text
+	 * @return array
+	 */
+	static function explodeMarkup( $separator, $text ) {
+		$placeholder = "\x00";
+		
+		// Remove placeholder instances
+		$text = str_replace( $placeholder, '', $text );
+		
+		// Replace instances of the separator inside HTML-like tags with the placeholder
+		$replacer = new DoubleReplacer( $separator, $placeholder );
+		$cleaned = StringUtils::delimiterReplaceCallback( '<', '>', $replacer->cb(), $text );
+
+		// Explode, then put the replaced separators back in
+		$items = explode( $separator, $cleaned );
+		foreach( $items as $i => $str ) {
+			$items[$i] = str_replace( $placeholder, $separator, $str );
+		}
+		
+		return $items;
+	}
+
+	/**
+	 * Escape a string to make it suitable for inclusion in a preg_replace()
+	 * replacement parameter.
+	 *
+	 * @param string $string
+	 * @return string
+	 */
+	static function escapeRegexReplacement( $string ) {
+		$string = str_replace( '\\', '\\\\', $string );
+		$string = str_replace( '$', '\\$', $string );
+		return $string;
+	}
+}
+
+/**
+ * Base class for "replacers", objects used in preg_replace_callback() and 
+ * StringUtils::delimiterReplaceCallback()
+ */
+class Replacer {
+	function cb() {
+		return array( &$this, 'replace' );
+	}
+}
+
+/**
+ * Class to replace regex matches with a string similar to that used in preg_replace()
+ */
+class RegexlikeReplacer extends Replacer {
+	var $r;
+	function __construct( $r ) {
+		$this->r = $r;
+	}
+
+	function replace( $matches ) {
+		$pairs = array();
+		foreach ( $matches as $i => $match ) {
+			$pairs["\$$i"] = $match;
+		}
+		return strtr( $this->r, $pairs );
+	}
+
+}
+
+/**
+ * Class to perform secondary replacement within each replacement string
+ */
+class DoubleReplacer extends Replacer {
+	function __construct( $from, $to, $index = 0 ) {
+		$this->from = $from;
+		$this->to = $to;
+		$this->index = $index;
+	}
+	
+	function replace( $matches ) {
+		return str_replace( $this->from, $this->to, $matches[$this->index] );
+	}
+}
+
+/**
+ * Class to perform replacement based on a simple hashtable lookup
+ */
+class HashtableReplacer extends Replacer {
+	var $table, $index;
+
+	function __construct( $table, $index = 0 ) {
+		$this->table = $table;
+		$this->index = $index;
+	}
+
+	function replace( $matches ) {
+		return $this->table[$matches[$this->index]];
+	}
+}
+
+/**
+ * Replacement array for FSS with fallback to strtr()
+ * Supports lazy initialisation of FSS resource
+ */
+class ReplacementArray {
+	/*mostly private*/ var $data = false;
+	/*mostly private*/ var $fss = false;
+
+	/**
+	 * Create an object with the specified replacement array
+	 * The array should have the same form as the replacement array for strtr()
+	 */
+	function __construct( $data = array() ) {
+		$this->data = $data;
+	}
+
+	function __sleep() {
+		return array( 'data' );
+	}
+
+	function __wakeup() {
+		$this->fss = false;
+	}
+
+	/**
+	 * Set the whole replacement array at once
+	 */
+	function setArray( $data ) {
+		$this->data = $data;
+		$this->fss = false;
+	}
+
+	function getArray() {
+		return $this->data;
+	}
+
+	/**
+	 * Set an element of the replacement array
+	 */
+	function setPair( $from, $to ) {
+		$this->data[$from] = $to;
+		$this->fss = false;
+	}
+
+	function mergeArray( $data ) {
+		$this->data = array_merge( $this->data, $data );
+		$this->fss = false;
+	}
+
+	function merge( $other ) {
+		$this->data = array_merge( $this->data, $other->data );
+		$this->fss = false;
+	}
+
+	function replace( $subject ) {
+		if ( function_exists( 'fss_prep_replace' ) ) {
+			wfProfileIn( __METHOD__.'-fss' );
+			if ( $this->fss === false ) {
+				$this->fss = fss_prep_replace( $this->data );
+			}
+			$result = fss_exec_replace( $this->fss, $subject );
+			wfProfileOut( __METHOD__.'-fss' );
+		} else {
+			wfProfileIn( __METHOD__.'-strtr' );
+			$result = strtr( $subject, $this->data );
+			wfProfileOut( __METHOD__.'-strtr' );
+		}
+		return $result;
+	}
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/StubObject.php
===================================================================
--- /MediaWiki/branches/1.11/includes/StubObject.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/StubObject.php	(revision 1280)
@@ -0,0 +1,137 @@
+<?php
+
+/**
+ * Class to implement stub globals, which are globals that delay loading the
+ * their associated module code by deferring initialisation until the first 
+ * method call. 
+ *
+ * Note on unstub loops: 
+ *
+ * Unstub loops (infinite recursion) sometimes occur when a constructor calls 
+ * another function, and the other function calls some method of the stub. The 
+ * best way to avoid this is to make constructors as lightweight as possible,
+ * deferring any initialisation which depends on other modules. As a last 
+ * resort, you can use StubObject::isRealObject() to break the loop, but as a 
+ * general rule, the stub object mechanism should be transparent, and code 
+ * which refers to it should be kept to a minimum.
+ */
+class StubObject {
+	var $mGlobal, $mClass, $mParams;
+	function __construct( $global = null, $class = null, $params = array() ) {
+		$this->mGlobal = $global;
+		$this->mClass = $class;
+		$this->mParams = $params;
+	}
+
+	static function isRealObject( $obj ) {
+		return is_object( $obj ) && !($obj instanceof StubObject);
+	}
+
+	function _call( $name, $args ) {
+		$this->_unstub( $name, 5 );
+		return call_user_func_array( array( $GLOBALS[$this->mGlobal], $name ), $args );
+	}
+
+	function _newObject() {
+		return wfCreateObject( $this->mClass, $this->mParams );
+	}
+
+	function __call( $name, $args ) {
+		return $this->_call( $name, $args );
+	}
+
+	/**
+	 * This is public, for the convenience of external callers wishing to access 
+	 * properties, e.g. eval.php
+	 */
+	function _unstub( $name = '_unstub', $level = 2 ) {
+		static $recursionLevel = 0;
+		if ( get_class( $GLOBALS[$this->mGlobal] ) != $this->mClass ) {
+			$fname = __METHOD__.'-'.$this->mGlobal;
+			wfProfileIn( $fname );
+			$caller = wfGetCaller( $level );
+			if ( ++$recursionLevel > 2 ) {
+				throw new MWException( "Unstub loop detected on call of \${$this->mGlobal}->$name from $caller\n" );
+			}
+			wfDebug( "Unstubbing \${$this->mGlobal} on call of \${$this->mGlobal}->$name from $caller\n" );
+			$GLOBALS[$this->mGlobal] = $this->_newObject();
+			--$recursionLevel;
+			wfProfileOut( $fname );
+		}
+	}
+}
+
+class StubContLang extends StubObject {
+	function __construct() {
+		parent::__construct( 'wgContLang' );
+	}
+
+	function __call( $name, $args ) {
+		return StubObject::_call( $name, $args );
+	}
+
+	function _newObject() {
+		global $wgContLanguageCode;
+		$obj = Language::factory( $wgContLanguageCode );
+		$obj->initEncoding();
+		$obj->initContLang();
+		return $obj;
+	}
+}
+class StubUserLang extends StubObject {
+	function __construct() {
+		parent::__construct( 'wgLang' );
+	}
+
+	function __call( $name, $args ) {
+		return $this->_call( $name, $args );
+	}
+
+	function _newObject() {
+		global $wgContLanguageCode, $wgRequest, $wgUser, $wgContLang;
+		$code = $wgRequest->getVal('uselang', $wgUser->getOption('language') );
+
+		// if variant is explicitely selected, use it instead the one from wgUser
+		// see bug #7605
+		if($wgContLang->hasVariants()){
+			$variant = $wgContLang->getPreferredVariant();
+			if($variant != $wgContLanguageCode)
+				$code = $variant;
+		}	 
+
+		# Validate $code
+		if( empty( $code ) || !preg_match( '/^[a-z-]+$/', $code ) ) {
+			wfDebug( "Invalid user language code\n" );
+			$code = $wgContLanguageCode;
+		}
+
+		if( $code == $wgContLanguageCode ) {
+			return $wgContLang;
+		} else {
+			$obj = Language::factory( $code );
+			return $obj;
+		}
+	}
+}
+class StubUser extends StubObject {
+	function __construct() {
+		parent::__construct( 'wgUser' );
+	}
+
+	function __call( $name, $args ) {
+		return $this->_call( $name, $args );
+	}
+	
+	function _newObject() {
+		global $wgCommandLineMode;
+		if( $wgCommandLineMode ) {
+			$user = new User;
+		} else {
+			$user = User::newFromSession();
+			wfRunHooks('AutoAuthenticate',array(&$user));
+		}
+		return $user;
+	}
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/Title.php
===================================================================
--- /MediaWiki/branches/1.11/includes/Title.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/Title.php	(revision 1280)
@@ -0,0 +1,2554 @@
+<?php
+/**
+ * See title.txt
+ *
+ */
+
+/** */
+if ( !class_exists( 'UtfNormal' ) ) {
+	require_once( dirname(__FILE__) . '/normal/UtfNormal.php' );
+}
+
+define ( 'GAID_FOR_UPDATE', 1 );
+
+# Title::newFromTitle maintains a cache to avoid
+# expensive re-normalization of commonly used titles.
+# On a batch operation this can become a memory leak
+# if not bounded. After hitting this many titles,
+# reset the cache.
+define( 'MW_TITLECACHE_MAX', 1000 );
+
+# Constants for pr_cascade bitfield
+define( 'CASCADE', 1 );
+
+/**
+ * Title class
+ * - Represents a title, which may contain an interwiki designation or namespace
+ * - Can fetch various kinds of data from the database, albeit inefficiently.
+ *
+ */
+class Title {
+	/**
+	 * Static cache variables
+	 */
+	static private $titleCache=array();
+	static private $interwikiCache=array();
+	
+	
+	/**
+	 * All member variables should be considered private
+	 * Please use the accessor functions
+	 */
+
+	 /**#@+
+	 * @private
+	 */
+
+	var $mTextform;           	# Text form (spaces not underscores) of the main part
+	var $mUrlform;            	# URL-encoded form of the main part
+	var $mDbkeyform;          	# Main part with underscores
+	var $mNamespace;          	# Namespace index, i.e. one of the NS_xxxx constants
+	var $mInterwiki;          	# Interwiki prefix (or null string)
+	var $mFragment;           	# Title fragment (i.e. the bit after the #)
+	var $mArticleID;          	# Article ID, fetched from the link cache on demand
+	var $mLatestID;         	# ID of most recent revision
+	var $mRestrictions;       	# Array of groups allowed to edit this article
+	var $mCascadeRestriction;	# Cascade restrictions on this page to included templates and images?
+	var $mRestrictionsExpiry;	# When do the restrictions on this page expire?
+	var $mHasCascadingRestrictions;	# Are cascading restrictions in effect on this page?
+	var $mCascadeRestrictionSources;# Where are the cascading restrictions coming from on this page?
+	var $mRestrictionsLoaded; 	# Boolean for initialisation on demand
+	var $mPrefixedText;       	# Text form including namespace/interwiki, initialised on demand
+	var $mDefaultNamespace;   	# Namespace index when there is no namespace
+	                    		# Zero except in {{transclusion}} tags
+	var $mWatched;      		# Is $wgUser watching this page? NULL if unfilled, accessed through userIsWatching()
+	/**#@-*/
+
+
+	/**
+	 * Constructor
+	 * @private
+	 */
+	/* private */ function __construct() {
+		$this->mInterwiki = $this->mUrlform =
+		$this->mTextform = $this->mDbkeyform = '';
+		$this->mArticleID = -1;
+		$this->mNamespace = NS_MAIN;
+		$this->mRestrictionsLoaded = false;
+		$this->mRestrictions = array();
+		# Dont change the following, NS_MAIN is hardcoded in several place
+		# See bug #696
+		$this->mDefaultNamespace = NS_MAIN;
+		$this->mWatched = NULL;
+		$this->mLatestID = false;
+		$this->mOldRestrictions = false;
+	}
+
+	/**
+	 * Create a new Title from a prefixed DB key
+	 * @param string $key The database key, which has underscores
+	 *	instead of spaces, possibly including namespace and
+	 *	interwiki prefixes
+	 * @return Title the new object, or NULL on an error
+	 */
+	public static function newFromDBkey( $key ) {
+		$t = new Title();
+		$t->mDbkeyform = $key;
+		if( $t->secureAndSplit() )
+			return $t;
+		else
+			return NULL;
+	}
+
+	/**
+	 * Create a new Title from text, such as what one would
+	 * find in a link. Decodes any HTML entities in the text.
+	 *
+	 * @param string $text the link text; spaces, prefixes,
+	 *	and an initial ':' indicating the main namespace
+	 *	are accepted
+	 * @param int $defaultNamespace the namespace to use if
+	 * 	none is specified by a prefix
+	 * @return Title the new object, or NULL on an error
+	 */
+	public static function newFromText( $text, $defaultNamespace = NS_MAIN ) {
+		if( is_object( $text ) ) {
+			throw new MWException( 'Title::newFromText given an object' );
+		}
+
+		/**
+		 * Wiki pages often contain multiple links to the same page.
+		 * Title normalization and parsing can become expensive on
+		 * pages with many links, so we can save a little time by
+		 * caching them.
+		 *
+		 * In theory these are value objects and won't get changed...
+		 */
+		if( $defaultNamespace == NS_MAIN && isset( Title::$titleCache[$text] ) ) {
+			return Title::$titleCache[$text];
+		}
+
+		/**
+		 * Convert things like &eacute; &#257; or &#x3017; into real text...
+		 */
+		$filteredText = Sanitizer::decodeCharReferences( $text );
+
+		$t = new Title();
+		$t->mDbkeyform = str_replace( ' ', '_', $filteredText );
+		$t->mDefaultNamespace = $defaultNamespace;
+
+		static $cachedcount = 0 ;
+		if( $t->secureAndSplit() ) {
+			if( $defaultNamespace == NS_MAIN ) {
+				if( $cachedcount >= MW_TITLECACHE_MAX ) {
+					# Avoid memory leaks on mass operations...
+					Title::$titleCache = array();
+					$cachedcount=0;
+				}
+				$cachedcount++;
+				Title::$titleCache[$text] =& $t;
+			}
+			return $t;
+		} else {
+			$ret = NULL;
+			return $ret;
+		}
+	}
+
+	/**
+	 * Create a new Title from URL-encoded text. Ensures that
+	 * the given title's length does not exceed the maximum.
+	 * @param string $url the title, as might be taken from a URL
+	 * @return Title the new object, or NULL on an error
+	 */
+	public static function newFromURL( $url ) {
+		global $wgLegalTitleChars;
+		$t = new Title();
+
+		# For compatibility with old buggy URLs. "+" is usually not valid in titles,
+		# but some URLs used it as a space replacement and they still come
+		# from some external search tools.
+		if ( strpos( $wgLegalTitleChars, '+' ) === false ) {
+			$url = str_replace( '+', ' ', $url );
+		}
+
+		$t->mDbkeyform = str_replace( ' ', '_', $url );
+		if( $t->secureAndSplit() ) {
+			return $t;
+		} else {
+			return NULL;
+		}
+	}
+
+	/**
+	 * Create a new Title from an article ID
+	 *
+	 * @todo This is inefficiently implemented, the page row is requested
+	 *       but not used for anything else
+	 *
+	 * @param int $id the page_id corresponding to the Title to create
+	 * @return Title the new object, or NULL on an error
+	 */
+	public static function newFromID( $id ) {
+		$fname = 'Title::newFromID';
+		$dbr = wfGetDB( DB_SLAVE );
+		$row = $dbr->selectRow( 'page', array( 'page_namespace', 'page_title' ),
+			array( 'page_id' => $id ), $fname );
+		if ( $row !== false ) {
+			$title = Title::makeTitle( $row->page_namespace, $row->page_title );
+		} else {
+			$title = NULL;
+		}
+		return $title;
+	}
+
+	/**
+	 * Make an array of titles from an array of IDs 
+	 */
+	public static function newFromIDs( $ids ) {
+		$dbr = wfGetDB( DB_SLAVE );
+		$res = $dbr->select( 'page', array( 'page_namespace', 'page_title' ),
+			'page_id IN (' . $dbr->makeList( $ids ) . ')', __METHOD__ );
+
+		$titles = array();
+		while ( $row = $dbr->fetchObject( $res ) ) {
+			$titles[] = Title::makeTitle( $row->page_namespace, $row->page_title );
+		}
+		return $titles;
+	}
+
+	/**
+	 * Create a new Title from a namespace index and a DB key.
+	 * It's assumed that $ns and $title are *valid*, for instance when
+	 * they came directly from the database or a special page name.
+	 * For convenience, spaces are converted to underscores so that
+	 * eg user_text fields can be used directly.
+	 *
+	 * @param int $ns the namespace of the article
+	 * @param string $title the unprefixed database key form
+	 * @return Title the new object
+	 */
+	public static function &makeTitle( $ns, $title ) {
+		$t = new Title();
+		$t->mInterwiki = '';
+		$t->mFragment = '';
+		$t->mNamespace = intval( $ns );
+		$t->mDbkeyform = str_replace( ' ', '_', $title );
+		$t->mArticleID = ( $ns >= 0 ) ? -1 : 0;
+		$t->mUrlform = wfUrlencode( $t->mDbkeyform );
+		$t->mTextform = str_replace( '_', ' ', $title );
+		return $t;
+	}
+
+	/**
+	 * Create a new Title from a namespace index and a DB key.
+	 * The parameters will be checked for validity, which is a bit slower
+	 * than makeTitle() but safer for user-provided data.
+	 *
+	 * @param int $ns the namespace of the article
+	 * @param string $title the database key form
+	 * @return Title the new object, or NULL on an error
+	 */
+	public static function makeTitleSafe( $ns, $title ) {
+		$t = new Title();
+		$t->mDbkeyform = Title::makeName( $ns, $title );
+		if( $t->secureAndSplit() ) {
+			return $t;
+		} else {
+			return NULL;
+		}
+ 	}
+
+	/**
+	 * Create a new Title for the Main Page
+	 * @return Title the new object
+	 */
+	public static function newMainPage() {
+		return Title::newFromText( wfMsgForContent( 'mainpage' ) );
+	}
+
+	/**
+	 * Create a new Title for a redirect
+	 * @param string $text the redirect title text
+	 * @return Title the new object, or NULL if the text is not a
+	 *	valid redirect
+	 */
+	public static function newFromRedirect( $text ) {
+		$mwRedir = MagicWord::get( 'redirect' );
+		$rt = NULL;
+		if ( $mwRedir->matchStart( $text ) ) {
+			$m = array();
+			if ( preg_match( '/\[{2}(.*?)(?:\||\]{2})/', $text, $m ) ) {
+				# categories are escaped using : for example one can enter:
+				# #REDIRECT [[:Category:Music]]. Need to remove it.
+				if ( substr($m[1],0,1) == ':') {
+					# We don't want to keep the ':'
+					$m[1] = substr( $m[1], 1 );
+				}
+
+				$rt = Title::newFromText( $m[1] );
+				# Disallow redirects to Special:Userlogout
+				if ( !is_null($rt) && $rt->isSpecial( 'Userlogout' ) ) {
+					$rt = NULL;
+				}
+			}
+		}
+		return $rt;
+	}
+
+#----------------------------------------------------------------------------
+#	Static functions
+#----------------------------------------------------------------------------
+
+	/**
+	 * Get the prefixed DB key associated with an ID
+	 * @param int $id the page_id of the article
+	 * @return Title an object representing the article, or NULL
+	 * 	if no such article was found
+	 * @static
+	 * @access public
+	 */
+	function nameOf( $id ) {
+		$fname = 'Title::nameOf';
+		$dbr = wfGetDB( DB_SLAVE );
+
+		$s = $dbr->selectRow( 'page', array( 'page_namespace','page_title' ),  array( 'page_id' => $id ), $fname );
+		if ( $s === false ) { return NULL; }
+
+		$n = Title::makeName( $s->page_namespace, $s->page_title );
+		return $n;
+	}
+
+	/**
+	 * Get a regex character class describing the legal characters in a link
+	 * @return string the list of characters, not delimited
+	 */
+	public static function legalChars() {
+		global $wgLegalTitleChars;
+		return $wgLegalTitleChars;
+	}
+
+	/**
+	 * Get a string representation of a title suitable for
+	 * including in a search index
+	 *
+	 * @param int $ns a namespace index
+	 * @param string $title text-form main part
+	 * @return string a stripped-down title string ready for the
+	 * 	search index
+	 */
+	public static function indexTitle( $ns, $title ) {
+		global $wgContLang;
+
+		$lc = SearchEngine::legalSearchChars() . '&#;';
+		$t = $wgContLang->stripForSearch( $title );
+		$t = preg_replace( "/[^{$lc}]+/", ' ', $t );
+		$t = $wgContLang->lc( $t );
+
+		# Handle 's, s'
+		$t = preg_replace( "/([{$lc}]+)'s( |$)/", "\\1 \\1's ", $t );
+		$t = preg_replace( "/([{$lc}]+)s'( |$)/", "\\1s ", $t );
+
+		$t = preg_replace( "/\\s+/", ' ', $t );
+
+		if ( $ns == NS_IMAGE ) {
+			$t = preg_replace( "/ (png|gif|jpg|jpeg|ogg)$/", "", $t );
+		}
+		return trim( $t );
+	}
+
+	/*
+	 * Make a prefixed DB key from a DB key and a namespace index
+	 * @param int $ns numerical representation of the namespace
+	 * @param string $title the DB key form the title
+	 * @return string the prefixed form of the title
+	 */
+	public static function makeName( $ns, $title ) {
+		global $wgContLang;
+
+		$n = $wgContLang->getNsText( $ns );
+		return $n == '' ? $title : "$n:$title";
+	}
+
+	/**
+	 * Returns the URL associated with an interwiki prefix
+	 * @param string $key the interwiki prefix (e.g. "MeatBall")
+	 * @return the associated URL, containing "$1", which should be
+	 * 	replaced by an article title
+	 * @static (arguably)
+	 */
+	public function getInterwikiLink( $key )  {
+		global $wgMemc, $wgInterwikiExpiry;
+		global $wgInterwikiCache, $wgContLang;
+		$fname = 'Title::getInterwikiLink';
+
+		$key = $wgContLang->lc( $key );
+
+		$k = wfMemcKey( 'interwiki', $key );
+		if( array_key_exists( $k, Title::$interwikiCache ) ) {
+			return Title::$interwikiCache[$k]->iw_url;
+		}
+
+		if ($wgInterwikiCache) {
+			return Title::getInterwikiCached( $key );
+		}
+
+		$s = $wgMemc->get( $k );
+		# Ignore old keys with no iw_local
+		if( $s && isset( $s->iw_local ) && isset($s->iw_trans)) {
+			Title::$interwikiCache[$k] = $s;
+			return $s->iw_url;
+		}
+
+		$dbr = wfGetDB( DB_SLAVE );
+		$res = $dbr->select( 'interwiki',
+			array( 'iw_url', 'iw_local', 'iw_trans' ),
+			array( 'iw_prefix' => $key ), $fname );
+		if( !$res ) {
+			return '';
+		}
+
+		$s = $dbr->fetchObject( $res );
+		if( !$s ) {
+			# Cache non-existence: create a blank object and save it to memcached
+			$s = (object)false;
+			$s->iw_url = '';
+			$s->iw_local = 0;
+			$s->iw_trans = 0;
+		}
+		$wgMemc->set( $k, $s, $wgInterwikiExpiry );
+		Title::$interwikiCache[$k] = $s;
+
+		return $s->iw_url;
+	}
+	
+	/**
+	 * Fetch interwiki prefix data from local cache in constant database
+	 *
+	 * More logic is explained in DefaultSettings
+	 *
+	 * @return string URL of interwiki site
+	 */
+	public static function getInterwikiCached( $key ) {
+		global $wgInterwikiCache, $wgInterwikiScopes, $wgInterwikiFallbackSite;
+		static $db, $site;
+
+		if (!$db)
+			$db=dba_open($wgInterwikiCache,'r','cdb');
+		/* Resolve site name */
+		if ($wgInterwikiScopes>=3 and !$site) {
+			$site = dba_fetch('__sites:' . wfWikiID(), $db);
+			if ($site=="")
+				$site = $wgInterwikiFallbackSite;
+		}
+		$value = dba_fetch( wfMemcKey( $key ), $db);
+		if ($value=='' and $wgInterwikiScopes>=3) {
+			/* try site-level */
+			$value = dba_fetch("_{$site}:{$key}", $db);
+		}
+		if ($value=='' and $wgInterwikiScopes>=2) {
+			/* try globals */
+			$value = dba_fetch("__global:{$key}", $db);
+		}
+		if ($value=='undef')
+			$value='';
+		$s = (object)false;
+		$s->iw_url = '';
+		$s->iw_local = 0;
+		$s->iw_trans = 0;
+		if ($value!='') {
+			list($local,$url)=explode(' ',$value,2);
+			$s->iw_url=$url;
+			$s->iw_local=(int)$local;
+		}
+		Title::$interwikiCache[wfMemcKey( 'interwiki', $key )] = $s;
+		return $s->iw_url;
+	}
+	/**
+	 * Determine whether the object refers to a page within
+	 * this project.
+	 *
+	 * @return bool TRUE if this is an in-project interwiki link
+	 *	or a wikilink, FALSE otherwise
+	 */
+	public function isLocal() {
+		if ( $this->mInterwiki != '' ) {
+			# Make sure key is loaded into cache
+			$this->getInterwikiLink( $this->mInterwiki );
+			$k = wfMemcKey( 'interwiki', $this->mInterwiki );
+			return (bool)(Title::$interwikiCache[$k]->iw_local);
+		} else {
+			return true;
+		}
+	}
+
+	/**
+	 * Determine whether the object refers to a page within
+	 * this project and is transcludable.
+	 *
+	 * @return bool TRUE if this is transcludable
+	 */
+	public function isTrans() {
+		if ($this->mInterwiki == '')
+			return false;
+		# Make sure key is loaded into cache
+		$this->getInterwikiLink( $this->mInterwiki );
+		$k = wfMemcKey( 'interwiki', $this->mInterwiki );
+		return (bool)(Title::$interwikiCache[$k]->iw_trans);
+	}
+
+	/**
+	 * Escape a text fragment, say from a link, for a URL
+	 */
+	static function escapeFragmentForURL( $fragment ) {
+		$fragment = str_replace( ' ', '_', $fragment );
+		$fragment = urlencode( Sanitizer::decodeCharReferences( $fragment ) );
+		$replaceArray = array(
+			'%3A' => ':',
+			'%' => '.'
+		);
+		return strtr( $fragment, $replaceArray );
+	}
+
+#----------------------------------------------------------------------------
+#	Other stuff
+#----------------------------------------------------------------------------
+
+	/** Simple accessors */
+	/**
+	 * Get the text form (spaces not underscores) of the main part
+	 * @return string
+	 */
+	public function getText() { return $this->mTextform; }
+	/**
+	 * Get the URL-encoded form of the main part
+	 * @return string
+	 */
+	public function getPartialURL() { return $this->mUrlform; }
+	/**
+	 * Get the main part with underscores
+	 * @return string
+	 */
+	public function getDBkey() { return $this->mDbkeyform; }
+	/**
+	 * Get the namespace index, i.e. one of the NS_xxxx constants
+	 * @return int
+	 */
+	public function getNamespace() { return $this->mNamespace; }
+	/**
+	 * Get the namespace text
+	 * @return string
+	 */
+	public function getNsText() {
+		global $wgContLang, $wgCanonicalNamespaceNames;
+
+		if ( '' != $this->mInterwiki ) {
+			// This probably shouldn't even happen. ohh man, oh yuck.
+			// But for interwiki transclusion it sometimes does.
+			// Shit. Shit shit shit.
+			//
+			// Use the canonical namespaces if possible to try to
+			// resolve a foreign namespace.
+			if( isset( $wgCanonicalNamespaceNames[$this->mNamespace] ) ) {
+				return $wgCanonicalNamespaceNames[$this->mNamespace];
+			}
+		}
+		return $wgContLang->getNsText( $this->mNamespace );
+	}
+	/**
+	 * Get the namespace text of the subject (rather than talk) page
+	 * @return string
+	 */
+	public function getSubjectNsText() {
+		global $wgContLang;
+		return $wgContLang->getNsText( Namespace::getSubject( $this->mNamespace ) );
+	}
+
+	/**
+	 * Get the namespace text of the talk page
+	 * @return string
+	 */
+	public function getTalkNsText() {
+		global $wgContLang;
+		return( $wgContLang->getNsText( Namespace::getTalk( $this->mNamespace ) ) );
+	}
+
+	/**
+	 * Could this title have a corresponding talk page?
+	 * @return bool
+	 */
+	public function canTalk() {
+		return( Namespace::canTalk( $this->mNamespace ) );
+	}
+
+	/**
+	 * Get the interwiki prefix (or null string)
+	 * @return string
+	 */
+	public function getInterwiki() { return $this->mInterwiki; }
+	/**
+	 * Get the Title fragment (i.e. the bit after the #) in text form
+	 * @return string
+	 */
+	public function getFragment() { return $this->mFragment; }
+	/**
+	 * Get the fragment in URL form, including the "#" character if there is one
+	 * @return string
+	 */
+	public function getFragmentForURL() {
+		if ( $this->mFragment == '' ) {
+			return '';
+		} else {
+			return '#' . Title::escapeFragmentForURL( $this->mFragment );
+		}
+	}
+	/**
+	 * Get the default namespace index, for when there is no namespace
+	 * @return int
+	 */
+	public function getDefaultNamespace() { return $this->mDefaultNamespace; }
+
+	/**
+	 * Get title for search index
+	 * @return string a stripped-down title string ready for the
+	 * 	search index
+	 */
+	public function getIndexTitle() {
+		return Title::indexTitle( $this->mNamespace, $this->mTextform );
+	}
+
+	/**
+	 * Get the prefixed database key form
+	 * @return string the prefixed title, with underscores and
+	 * 	any interwiki and namespace prefixes
+	 */
+	public function getPrefixedDBkey() {
+		$s = $this->prefix( $this->mDbkeyform );
+		$s = str_replace( ' ', '_', $s );
+		return $s;
+	}
+
+	/**
+	 * Get the prefixed title with spaces.
+	 * This is the form usually used for display
+	 * @return string the prefixed title, with spaces
+	 */
+	public function getPrefixedText() {
+		if ( empty( $this->mPrefixedText ) ) { // FIXME: bad usage of empty() ?
+			$s = $this->prefix( $this->mTextform );
+			$s = str_replace( '_', ' ', $s );
+			$this->mPrefixedText = $s;
+		}
+		return $this->mPrefixedText;
+	}
+
+	/**
+	 * Get the prefixed title with spaces, plus any fragment
+	 * (part beginning with '#')
+	 * @return string the prefixed title, with spaces and
+	 * 	the fragment, including '#'
+	 */
+	public function getFullText() {
+		$text = $this->getPrefixedText();
+		if( '' != $this->mFragment ) {
+			$text .= '#' . $this->mFragment;
+		}
+		return $text;
+	}
+
+	/**
+	 * Get the base name, i.e. the leftmost parts before the /
+	 * @return string Base name
+	 */
+	public function getBaseText() {
+		global $wgNamespacesWithSubpages;
+		if( isset( $wgNamespacesWithSubpages[ $this->mNamespace ] ) && $wgNamespacesWithSubpages[ $this->mNamespace ] ) {
+			$parts = explode( '/', $this->getText() );
+			# Don't discard the real title if there's no subpage involved
+			if( count( $parts ) > 1 )
+				unset( $parts[ count( $parts ) - 1 ] );
+			return implode( '/', $parts );
+		} else {
+			return $this->getText();
+		}
+	}
+
+	/**
+	 * Get the lowest-level subpage name, i.e. the rightmost part after /
+	 * @return string Subpage name
+	 */
+	public function getSubpageText() {
+		global $wgNamespacesWithSubpages;
+		if( isset( $wgNamespacesWithSubpages[ $this->mNamespace ] ) && $wgNamespacesWithSubpages[ $this->mNamespace ] ) {
+			$parts = explode( '/', $this->mTextform );
+			return( $parts[ count( $parts ) - 1 ] );
+		} else {
+			return( $this->mTextform );
+		}
+	}
+
+	/**
+	 * Get a URL-encoded form of the subpage text
+	 * @return string URL-encoded subpage name
+	 */
+	public function getSubpageUrlForm() {
+		$text = $this->getSubpageText();
+		$text = wfUrlencode( str_replace( ' ', '_', $text ) );
+		$text = str_replace( '%28', '(', str_replace( '%29', ')', $text ) ); # Clean up the URL; per below, this might not be safe
+		return( $text );
+	}
+
+	/**
+	 * Get a URL-encoded title (not an actual URL) including interwiki
+	 * @return string the URL-encoded form
+	 */
+	public function getPrefixedURL() {
+		$s = $this->prefix( $this->mDbkeyform );
+		$s = str_replace( ' ', '_', $s );
+
+		$s = wfUrlencode ( $s ) ;
+
+		# Cleaning up URL to make it look nice -- is this safe?
+		$s = str_replace( '%28', '(', $s );
+		$s = str_replace( '%29', ')', $s );
+
+		return $s;
+	}
+
+	/**
+	 * Get a real URL referring to this title, with interwiki link and
+	 * fragment
+	 *
+	 * @param string $query an optional query string, not used
+	 * 	for interwiki links
+	 * @param string $variant language variant of url (for sr, zh..)
+	 * @return string the URL
+	 */
+	public function getFullURL( $query = '', $variant = false ) {
+		global $wgContLang, $wgServer, $wgRequest;
+
+		if ( '' == $this->mInterwiki ) {
+			$url = $this->getLocalUrl( $query, $variant );
+
+			// Ugly quick hack to avoid duplicate prefixes (bug 4571 etc)
+			// Correct fix would be to move the prepending elsewhere.
+			if ($wgRequest->getVal('action') != 'render') {
+				$url = $wgServer . $url;
+			}
+		} else {
+			$baseUrl = $this->getInterwikiLink( $this->mInterwiki );
+
+			$namespace = wfUrlencode( $this->getNsText() );
+			if ( '' != $namespace ) {
+				# Can this actually happen? Interwikis shouldn't be parsed.
+				# Yes! It can in interwiki transclusion. But... it probably shouldn't.
+				$namespace .= ':';
+			}
+			$url = str_replace( '$1', $namespace . $this->mUrlform, $baseUrl );
+			$url = wfAppendQuery( $url, $query );
+		}
+
+		# Finally, add the fragment.
+		$url .= $this->getFragmentForURL();
+
+		wfRunHooks( 'GetFullURL', array( &$this, &$url, $query ) );
+		return $url;
+	}
+
+	/**
+	 * Get a URL with no fragment or server name.  If this page is generated
+	 * with action=render, $wgServer is prepended.
+	 * @param string $query an optional query string; if not specified,
+	 * 	$wgArticlePath will be used.
+	 * @param string $variant language variant of url (for sr, zh..)
+	 * @return string the URL
+	 */
+	public function getLocalURL( $query = '', $variant = false ) {
+		global $wgArticlePath, $wgScript, $wgServer, $wgRequest;
+		global $wgVariantArticlePath, $wgContLang, $wgUser;
+
+		// internal links should point to same variant as current page (only anonymous users)
+		if($variant == false && $wgContLang->hasVariants() && !$wgUser->isLoggedIn()){
+			$pref = $wgContLang->getPreferredVariant(false);
+			if($pref != $wgContLang->getCode())
+				$variant = $pref;
+		}
+
+		if ( $this->isExternal() ) {
+			$url = $this->getFullURL();
+			if ( $query ) {
+				// This is currently only used for edit section links in the
+				// context of interwiki transclusion. In theory we should
+				// append the query to the end of any existing query string,
+				// but interwiki transclusion is already broken in that case.
+				$url .= "?$query";
+			}
+		} else {
+			$dbkey = wfUrlencode( $this->getPrefixedDBkey() );
+			if ( $query == '' ) {
+				if($variant!=false && $wgContLang->hasVariants()){
+					if($wgVariantArticlePath==false) {
+						$variantArticlePath =  "$wgScript?title=$1&variant=$2"; // default
+					} else {
+						$variantArticlePath = $wgVariantArticlePath;
+					}
+					$url = str_replace( '$2', urlencode( $variant ), $variantArticlePath );
+					$url = str_replace( '$1', $dbkey, $url  );
+				}
+				else {
+					$url = str_replace( '$1', $dbkey, $wgArticlePath );
+				}
+			} else {
+				global $wgActionPaths;
+				$url = false;
+				$matches = array();
+				if( !empty( $wgActionPaths ) &&
+					preg_match( '/^(.*&|)action=([^&]*)(&(.*)|)$/', $query, $matches ) )
+				{
+					$action = urldecode( $matches[2] );
+					if( isset( $wgActionPaths[$action] ) ) {
+						$query = $matches[1];
+						if( isset( $matches[4] ) ) $query .= $matches[4];
+						$url = str_replace( '$1', $dbkey, $wgActionPaths[$action] );
+						if( $query != '' ) $url .= '?' . $query;
+					}
+				}
+				if ( $url === false ) {
+					if ( $query == '-' ) {
+						$query = '';
+					}
+					$url = "{$wgScript}?title={$dbkey}&{$query}";
+				}
+			}
+			
+			// FIXME: this causes breakage in various places when we
+			// actually expected a local URL and end up with dupe prefixes.
+			if ($wgRequest->getVal('action') == 'render') {
+				$url = $wgServer . $url;
+			}
+		}
+		wfRunHooks( 'GetLocalURL', array( &$this, &$url, $query ) );
+		return $url;
+	}
+
+	/**
+	 * Get an HTML-escaped version of the URL form, suitable for
+	 * using in a link, without a server name or fragment
+	 * @param string $query an optional query string
+	 * @return string the URL
+	 */
+	public function escapeLocalURL( $query = '' ) {
+		return htmlspecialchars( $this->getLocalURL( $query ) );
+	}
+
+	/**
+	 * Get an HTML-escaped version of the URL form, suitable for
+	 * using in a link, including the server name and fragment
+	 *
+	 * @return string the URL
+	 * @param string $query an optional query string
+	 */
+	public function escapeFullURL( $query = '' ) {
+		return htmlspecialchars( $this->getFullURL( $query ) );
+	}
+
+	/**
+	 * Get the URL form for an internal link.
+	 * - Used in various Squid-related code, in case we have a different
+	 * internal hostname for the server from the exposed one.
+	 *
+	 * @param string $query an optional query string
+	 * @param string $variant language variant of url (for sr, zh..)
+	 * @return string the URL
+	 */
+	public function getInternalURL( $query = '', $variant = false ) {
+		global $wgInternalServer;
+		$url = $wgInternalServer . $this->getLocalURL( $query, $variant );
+		wfRunHooks( 'GetInternalURL', array( &$this, &$url, $query ) );
+		return $url;
+	}
+
+	/**
+	 * Get the edit URL for this Title
+	 * @return string the URL, or a null string if this is an
+	 * 	interwiki link
+	 */
+	public function getEditURL() {
+		if ( '' != $this->mInterwiki ) { return ''; }
+		$s = $this->getLocalURL( 'action=edit' );
+
+		return $s;
+	}
+
+	/**
+	 * Get the HTML-escaped displayable text form.
+	 * Used for the title field in <a> tags.
+	 * @return string the text, including any prefixes
+	 */
+	public function getEscapedText() {
+		return htmlspecialchars( $this->getPrefixedText() );
+	}
+
+	/**
+	 * Is this Title interwiki?
+	 * @return boolean
+	 */
+	public function isExternal() { return ( '' != $this->mInterwiki ); }
+
+	/**
+	 * Is this page "semi-protected" - the *only* protection is autoconfirm?
+	 *
+	 * @param string Action to check (default: edit)
+	 * @return bool
+	 */
+	public function isSemiProtected( $action = 'edit' ) {
+		if( $this->exists() ) {
+			$restrictions = $this->getRestrictions( $action );
+			if( count( $restrictions ) > 0 ) {
+				foreach( $restrictions as $restriction ) {
+					if( strtolower( $restriction ) != 'autoconfirmed' )
+						return false;
+				}
+			} else {
+				# Not protected
+				return false;
+			}
+			return true;
+		} else {
+			# If it doesn't exist, it can't be protected
+			return false;
+		}
+	}
+
+	/**
+	 * Does the title correspond to a protected article?
+	 * @param string $what the action the page is protected from,
+	 *	by default checks move and edit
+	 * @return boolean
+	 */
+	public function isProtected( $action = '' ) {
+		global $wgRestrictionLevels;
+
+		# Special pages have inherent protection
+		if( $this->getNamespace() == NS_SPECIAL )
+			return true;
+
+		# Check regular protection levels				
+		if( $action == 'edit' || $action == '' ) {
+			$r = $this->getRestrictions( 'edit' );
+			foreach( $wgRestrictionLevels as $level ) {
+				if( in_array( $level, $r ) && $level != '' ) {
+					return( true );
+				}
+			}
+		}
+		
+		if( $action == 'move' || $action == '' ) {
+			$r = $this->getRestrictions( 'move' );
+			foreach( $wgRestrictionLevels as $level ) {
+				if( in_array( $level, $r ) && $level != '' ) {
+					return( true );
+				}
+			}
+		}
+
+		return false;
+	}
+
+	/**
+	 * Is $wgUser is watching this page?
+	 * @return boolean
+	 */
+	public function userIsWatching() {
+		global $wgUser;
+
+		if ( is_null( $this->mWatched ) ) {
+			if ( NS_SPECIAL == $this->mNamespace || !$wgUser->isLoggedIn()) {
+				$this->mWatched = false;
+			} else {
+				$this->mWatched = $wgUser->isWatched( $this );
+			}
+		}
+		return $this->mWatched;
+	}
+
+ 	/**
+	 * Can $wgUser perform $action on this page?
+	 * This skips potentially expensive cascading permission checks.
+	 *
+	 * Suitable for use for nonessential UI controls in common cases, but
+	 * _not_ for functional access control.
+	 *
+	 * May provide false positives, but should never provide a false negative.
+	 *
+	 * @param string $action action that permission needs to be checked for
+	 * @return boolean
+ 	 */
+	public function quickUserCan( $action ) {
+		return $this->userCan( $action, false );
+	}
+
+ 	/**
+	 * Can $wgUser perform $action on this page?
+	 * @param string $action action that permission needs to be checked for
+	 * @param bool $doExpensiveQueries Set this to false to avoid doing unnecessary queries.
+	 * @return boolean
+ 	 */
+	public function userCan( $action, $doExpensiveQueries = true ) {
+		$fname = 'Title::userCan';
+		wfProfileIn( $fname );
+
+		global $wgUser, $wgNamespaceProtection;
+
+		$result = null;
+		wfRunHooks( 'userCan', array( &$this, &$wgUser, $action, &$result ) );
+		if ( $result !== null ) {
+			wfProfileOut( $fname );
+			return $result;
+		}
+
+		if( NS_SPECIAL == $this->mNamespace ) {
+			wfProfileOut( $fname );
+			return false;
+		}
+		
+		if ( array_key_exists( $this->mNamespace, $wgNamespaceProtection ) ) {
+			$nsProt = $wgNamespaceProtection[ $this->mNamespace ];
+			if ( !is_array($nsProt) ) $nsProt = array($nsProt);
+			foreach( $nsProt as $right ) {
+				if( '' != $right && !$wgUser->isAllowed( $right ) ) {
+					wfProfileOut( $fname );
+					return false;
+				}
+			}
+		}
+
+		if( $this->mDbkeyform == '_' ) {
+			# FIXME: Is this necessary? Shouldn't be allowed anyway...
+			wfProfileOut( $fname );
+			return false;
+		}
+
+		# protect css/js subpages of user pages
+		# XXX: this might be better using restrictions
+		# XXX: Find a way to work around the php bug that prevents using $this->userCanEditCssJsSubpage() from working
+		if( $this->isCssJsSubpage()
+			&& !$wgUser->isAllowed('editinterface')
+			&& !preg_match('/^'.preg_quote($wgUser->getName(), '/').'\//', $this->mTextform) ) {
+			wfProfileOut( $fname );
+			return false;
+		}
+		
+		if ( $doExpensiveQueries && !$this->isCssJsSubpage() ) {
+			# We /could/ use the protection level on the source page, but it's fairly ugly
+			#  as we have to establish a precedence hierarchy for pages included by multiple
+			#  cascade-protected pages. So just restrict it to people with 'protect' permission,
+			#  as they could remove the protection anyway.
+			list( $cascadingSources, $restrictions ) = $this->getCascadeProtectionSources();
+			# Cascading protection depends on more than this page...
+			# Several cascading protected pages may include this page...
+			# Check each cascading level
+			# This is only for protection restrictions, not for all actions
+			if( $cascadingSources > 0 && isset($restrictions[$action]) ) {
+				foreach( $restrictions[$action] as $right ) {
+					$right = ( $right == 'sysop' ) ? 'protect' : $right;
+					if( '' != $right && !$wgUser->isAllowed( $right ) ) {
+						wfProfileOut( $fname );
+						return false;
+					}
+				}
+			}
+		}
+		
+		foreach( $this->getRestrictions($action) as $right ) {
+			// Backwards compatibility, rewrite sysop -> protect
+			if ( $right == 'sysop' ) {
+				$right = 'protect';
+			}
+			if( '' != $right && !$wgUser->isAllowed( $right ) ) {
+				wfProfileOut( $fname );
+				return false;
+			}
+		}
+
+		if( $action == 'move' &&
+			!( $this->isMovable() && $wgUser->isAllowed( 'move' ) ) ) {
+			wfProfileOut( $fname );
+			return false;
+		}
+
+		if( $action == 'create' ) {
+			if( (  $this->isTalkPage() && !$wgUser->isAllowed( 'createtalk' ) ) ||
+				( !$this->isTalkPage() && !$wgUser->isAllowed( 'createpage' ) ) ) {
+				wfProfileOut( $fname );
+				return false;
+			}
+		}
+
+		wfProfileOut( $fname );
+		return true;
+	}
+
+	/**
+	 * Can $wgUser edit this page?
+	 * @return boolean
+	 * @deprecated use userCan('edit')
+	 */
+	public function userCanEdit( $doExpensiveQueries = true ) {
+		return $this->userCan( 'edit', $doExpensiveQueries );
+	}
+
+	/**
+	 * Can $wgUser create this page?
+	 * @return boolean
+	 * @deprecated use userCan('create')
+	 */
+	public function userCanCreate( $doExpensiveQueries = true ) {
+		return $this->userCan( 'create', $doExpensiveQueries );
+	}
+
+	/**
+	 * Can $wgUser move this page?
+	 * @return boolean
+	 * @deprecated use userCan('move')
+	 */
+	public function userCanMove( $doExpensiveQueries = true ) {
+		return $this->userCan( 'move', $doExpensiveQueries );
+	}
+
+	/**
+	 * Would anybody with sufficient privileges be able to move this page?
+	 * Some pages just aren't movable.
+	 *
+	 * @return boolean
+	 */
+	public function isMovable() {
+		return Namespace::isMovable( $this->getNamespace() )
+			&& $this->getInterwiki() == '';
+	}
+
+	/**
+	 * Can $wgUser read this page?
+	 * @return boolean
+	 * @todo fold these checks into userCan()
+	 */
+	public function userCanRead() {
+		global $wgUser;
+
+		$result = null;
+		wfRunHooks( 'userCan', array( &$this, &$wgUser, 'read', &$result ) );
+		if ( $result !== null ) {
+			return $result;
+		}
+
+		if( $wgUser->isAllowed('read') ) {
+			return true;
+		} else {
+			global $wgWhitelistRead;
+
+			/** 
+			 * Always grant access to the login page.
+			 * Even anons need to be able to log in.
+			*/
+			if( $this->isSpecial( 'Userlogin' ) || $this->isSpecial( 'Resetpass' ) ) {
+				return true;
+			}
+
+			/** some pages are explicitly allowed */
+			$name = $this->getPrefixedText();
+			if( $wgWhitelistRead && in_array( $name, $wgWhitelistRead ) ) {
+				return true;
+			}
+
+			# Compatibility with old settings
+			if( $wgWhitelistRead && $this->getNamespace() == NS_MAIN ) {
+				if( in_array( ':' . $name, $wgWhitelistRead ) ) {
+					return true;
+				}
+			}
+		}
+		return false;
+	}
+
+	/**
+	 * Is this a talk page of some sort?
+	 * @return bool
+	 */
+	public function isTalkPage() {
+		return Namespace::isTalk( $this->getNamespace() );
+	}
+
+	/**
+	 * Is this a subpage?
+	 * @return bool
+	 */
+	public function isSubpage() {
+		global $wgNamespacesWithSubpages;
+		
+		if( isset( $wgNamespacesWithSubpages[ $this->mNamespace ] ) ) {
+			return ( strpos( $this->getText(), '/' ) !== false && $wgNamespacesWithSubpages[ $this->mNamespace ] == true );
+		} else {
+			return false;
+		}
+	}
+
+	/**
+	 * Is this a .css or .js subpage of a user page?
+	 * @return bool
+	 */
+	public function isCssJsSubpage() {
+		return ( NS_USER == $this->mNamespace and preg_match("/\\/.*\\.(?:css|js)$/", $this->mTextform ) );
+	}
+	/**
+	 * Is this a *valid* .css or .js subpage of a user page?
+	 * Check that the corresponding skin exists
+	 */
+	public function isValidCssJsSubpage() {
+		if ( $this->isCssJsSubpage() ) {
+			$skinNames = Skin::getSkinNames();
+			return array_key_exists( $this->getSkinFromCssJsSubpage(), $skinNames );
+		} else {
+			return false;
+		}
+	}
+	/**
+	 * Trim down a .css or .js subpage title to get the corresponding skin name
+	 */
+	public function getSkinFromCssJsSubpage() {
+		$subpage = explode( '/', $this->mTextform );
+		$subpage = $subpage[ count( $subpage ) - 1 ];
+		return( str_replace( array( '.css', '.js' ), array( '', '' ), $subpage ) );
+	}
+	/**
+	 * Is this a .css subpage of a user page?
+	 * @return bool
+	 */
+	public function isCssSubpage() {
+		return ( NS_USER == $this->mNamespace and preg_match("/\\/.*\\.css$/", $this->mTextform ) );
+	}
+	/**
+	 * Is this a .js subpage of a user page?
+	 * @return bool
+	 */
+	public function isJsSubpage() {
+		return ( NS_USER == $this->mNamespace and preg_match("/\\/.*\\.js$/", $this->mTextform ) );
+	}
+	/**
+	 * Protect css/js subpages of user pages: can $wgUser edit
+	 * this page?
+	 *
+	 * @return boolean
+	 * @todo XXX: this might be better using restrictions
+	 */
+	public function userCanEditCssJsSubpage() {
+		global $wgUser;
+		return ( $wgUser->isAllowed('editinterface') or preg_match('/^'.preg_quote($wgUser->getName(), '/').'\//', $this->mTextform) );
+	}
+
+	/**
+	 * Cascading protection: Return true if cascading restrictions apply to this page, false if not.
+	 *
+	 * @return bool If the page is subject to cascading restrictions.
+	 */
+	public function isCascadeProtected() {
+		list( $sources, $restrictions ) = $this->getCascadeProtectionSources( false );
+		return ( $sources > 0 );
+	}
+
+	/**
+	 * Cascading protection: Get the source of any cascading restrictions on this page.
+	 *
+	 * @param $get_pages bool Whether or not to retrieve the actual pages that the restrictions have come from.
+	 * @return array( mixed title array, restriction array)
+	 * Array of the Title objects of the pages from which cascading restrictions have come, false for none, or true if such restrictions exist, but $get_pages was not set.
+	 * The restriction array is an array of each type, each of which contains an array of unique groups
+	 */
+	public function getCascadeProtectionSources( $get_pages = true ) {
+		global $wgEnableCascadingProtection, $wgRestrictionTypes;
+
+		# Define our dimension of restrictions types
+		$pagerestrictions = array();
+		foreach( $wgRestrictionTypes as $action )
+			$pagerestrictions[$action] = array();
+
+		if (!$wgEnableCascadingProtection)
+			return array( false, $pagerestrictions );
+
+		if ( isset( $this->mCascadeSources ) && $get_pages ) {
+			return array( $this->mCascadeSources, $this->mCascadingRestrictions );
+		} else if ( isset( $this->mHasCascadingRestrictions ) && !$get_pages ) {
+			return array( $this->mHasCascadingRestrictions, $pagerestrictions );
+		}
+
+		wfProfileIn( __METHOD__ );
+
+		$dbr = wfGetDb( DB_SLAVE );
+
+		if ( $this->getNamespace() == NS_IMAGE ) {
+			$tables = array ('imagelinks', 'page_restrictions');
+			$where_clauses = array(
+				'il_to' => $this->getDBkey(),
+				'il_from=pr_page',
+				'pr_cascade' => 1 );
+		} else {
+			$tables = array ('templatelinks', 'page_restrictions');
+			$where_clauses = array(
+				'tl_namespace' => $this->getNamespace(),
+				'tl_title' => $this->getDBkey(),
+				'tl_from=pr_page',
+				'pr_cascade' => 1 );
+		}
+
+		if ( $get_pages ) {
+			$cols = array('pr_page', 'page_namespace', 'page_title', 'pr_expiry', 'pr_type', 'pr_level' );
+			$where_clauses[] = 'page_id=pr_page';
+			$tables[] = 'page';
+		} else {
+			$cols = array( 'pr_expiry' );
+		}
+
+		$res = $dbr->select( $tables, $cols, $where_clauses, __METHOD__ );
+
+		$sources = $get_pages ? array() : false;
+		$now = wfTimestampNow();
+		$purgeExpired = false;
+		
+		while( $row = $dbr->fetchObject( $res ) ) {
+			$expiry = Block::decodeExpiry( $row->pr_expiry );
+			if( $expiry > $now ) {
+				if ($get_pages) {
+					$page_id = $row->pr_page;
+					$page_ns = $row->page_namespace;
+					$page_title = $row->page_title;
+					$sources[$page_id] = Title::makeTitle($page_ns, $page_title);
+					# Add groups needed for each restriction type if its not already there
+					# Make sure this restriction type still exists
+					if ( isset($pagerestrictions[$row->pr_type]) && !in_array($row->pr_level, $pagerestrictions[$row->pr_type]) ) {
+						$pagerestrictions[$row->pr_type][]=$row->pr_level;
+					}
+				} else {
+					$sources = true;
+				}
+			} else {
+				// Trigger lazy purge of expired restrictions from the db
+				$purgeExpired = true;
+			}
+		}
+		if( $purgeExpired ) {
+			Title::purgeExpiredRestrictions();
+		}
+
+		wfProfileOut( __METHOD__ );
+
+		if ( $get_pages ) {
+			$this->mCascadeSources = $sources;
+			$this->mCascadingRestrictions = $pagerestrictions;
+		} else {
+			$this->mHasCascadingRestrictions = $sources;
+		}
+
+		return array( $sources, $pagerestrictions );
+	}
+
+	function areRestrictionsCascading() {
+		if (!$this->mRestrictionsLoaded) {
+			$this->loadRestrictions();
+		}
+
+		return $this->mCascadeRestriction;
+	}
+
+	/**
+	 * Loads a string into mRestrictions array
+	 * @param resource $res restrictions as an SQL result.
+	 */
+	private function loadRestrictionsFromRow( $res, $oldFashionedRestrictions = NULL ) {
+		$dbr = wfGetDb( DB_SLAVE );
+
+		$this->mRestrictions['edit'] = array();
+		$this->mRestrictions['move'] = array();
+
+		# Backwards-compatibility: also load the restrictions from the page record (old format).
+
+		if ( $oldFashionedRestrictions == NULL ) {
+			$oldFashionedRestrictions = $dbr->selectField( 'page', 'page_restrictions', array( 'page_id' => $this->getArticleId() ), __METHOD__ );
+		}
+
+		if ($oldFashionedRestrictions != '') {
+
+			foreach( explode( ':', trim( $oldFashionedRestrictions ) ) as $restrict ) {
+				$temp = explode( '=', trim( $restrict ) );
+				if(count($temp) == 1) {
+					// old old format should be treated as edit/move restriction
+					$this->mRestrictions["edit"] = explode( ',', trim( $temp[0] ) );
+					$this->mRestrictions["move"] = explode( ',', trim( $temp[0] ) );
+				} else {
+					$this->mRestrictions[$temp[0]] = explode( ',', trim( $temp[1] ) );
+				}
+			}
+
+			$this->mOldRestrictions = true;
+			$this->mCascadeRestriction = false;
+			$this->mRestrictionsExpiry = Block::decodeExpiry('');
+
+		}
+
+		if( $dbr->numRows( $res ) ) {
+			# Current system - load second to make them override.
+			$now = wfTimestampNow();
+			$purgeExpired = false;
+
+			while ($row = $dbr->fetchObject( $res ) ) {
+				# Cycle through all the restrictions.
+
+				// This code should be refactored, now that it's being used more generally,
+				// But I don't really see any harm in leaving it in Block for now -werdna
+				$expiry = Block::decodeExpiry( $row->pr_expiry );
+
+				// Only apply the restrictions if they haven't expired!
+				if ( !$expiry || $expiry > $now ) {
+					$this->mRestrictionsExpiry = $expiry;
+					$this->mRestrictions[$row->pr_type] = explode( ',', trim( $row->pr_level ) );
+
+					$this->mCascadeRestriction |= $row->pr_cascade;
+				} else {
+					// Trigger a lazy purge of expired restrictions
+					$purgeExpired = true;
+				}
+			}
+
+			if( $purgeExpired ) {
+				Title::purgeExpiredRestrictions();
+			}
+		}
+
+		$this->mRestrictionsLoaded = true;
+	}
+
+	public function loadRestrictions( $oldFashionedRestrictions = NULL ) {
+		if( !$this->mRestrictionsLoaded ) {
+			$dbr = wfGetDB( DB_SLAVE );
+
+			$res = $dbr->select( 'page_restrictions', '*',
+				array ( 'pr_page' => $this->getArticleId() ), __METHOD__ );
+
+			$this->loadRestrictionsFromRow( $res, $oldFashionedRestrictions );
+		}
+	}
+
+	/**
+	 * Purge expired restrictions from the page_restrictions table
+	 */
+	static function purgeExpiredRestrictions() {
+		$dbw = wfGetDB( DB_MASTER );
+		$dbw->delete( 'page_restrictions',
+			array( 'pr_expiry < ' . $dbw->addQuotes( $dbw->timestamp() ) ),
+			__METHOD__ );
+	}
+
+	/**
+	 * Accessor/initialisation for mRestrictions
+	 *
+	 * @param string $action action that permission needs to be checked for
+	 * @return array the array of groups allowed to edit this article
+	 */
+	public function getRestrictions( $action ) {
+		if( $this->exists() ) {
+			if( !$this->mRestrictionsLoaded ) {
+				$this->loadRestrictions();
+			}
+			return isset( $this->mRestrictions[$action] )
+					? $this->mRestrictions[$action]
+					: array();
+		} else {
+			return array();
+		}
+	}
+
+	/**
+	 * Is there a version of this page in the deletion archive?
+	 * @return int the number of archived revisions
+	 */
+	public function isDeleted() {
+		$fname = 'Title::isDeleted';
+		if ( $this->getNamespace() < 0 ) {
+			$n = 0;
+		} else {
+			$dbr = wfGetDB( DB_SLAVE );
+			$n = $dbr->selectField( 'archive', 'COUNT(*)', array( 'ar_namespace' => $this->getNamespace(),
+				'ar_title' => $this->getDBkey() ), $fname );
+			if( $this->getNamespace() == NS_IMAGE ) {
+				$n += $dbr->selectField( 'filearchive', 'COUNT(*)',
+					array( 'fa_name' => $this->getDBkey() ), $fname );
+			}
+		}
+		return (int)$n;
+	}
+
+	/**
+	 * Get the article ID for this Title from the link cache,
+	 * adding it if necessary
+	 * @param int $flags a bit field; may be GAID_FOR_UPDATE to select
+	 * 	for update
+	 * @return int the ID
+	 */
+	public function getArticleID( $flags = 0 ) {
+		$linkCache =& LinkCache::singleton();
+		if ( $flags & GAID_FOR_UPDATE ) {
+			$oldUpdate = $linkCache->forUpdate( true );
+			$this->mArticleID = $linkCache->addLinkObj( $this );
+			$linkCache->forUpdate( $oldUpdate );
+		} else {
+			if ( -1 == $this->mArticleID ) {
+				$this->mArticleID = $linkCache->addLinkObj( $this );
+			}
+		}
+		return $this->mArticleID;
+	}
+
+	public function getLatestRevID() {
+		if ($this->mLatestID !== false)
+			return $this->mLatestID;
+
+		$db = wfGetDB(DB_SLAVE);
+		return $this->mLatestID = $db->selectField( 'revision',
+			"max(rev_id)",
+			array('rev_page' => $this->getArticleID()),
+			'Title::getLatestRevID' );
+	}
+
+	/**
+	 * This clears some fields in this object, and clears any associated
+	 * keys in the "bad links" section of the link cache.
+	 *
+	 * - This is called from Article::insertNewArticle() to allow
+	 * loading of the new page_id. It's also called from
+	 * Article::doDeleteArticle()
+	 *
+	 * @param int $newid the new Article ID
+	 */
+	public function resetArticleID( $newid ) {
+		$linkCache =& LinkCache::singleton();
+		$linkCache->clearBadLink( $this->getPrefixedDBkey() );
+
+		if ( 0 == $newid ) { $this->mArticleID = -1; }
+		else { $this->mArticleID = $newid; }
+		$this->mRestrictionsLoaded = false;
+		$this->mRestrictions = array();
+	}
+
+	/**
+	 * Updates page_touched for this page; called from LinksUpdate.php
+	 * @return bool true if the update succeded
+	 */
+	public function invalidateCache() {
+		global $wgUseFileCache;
+
+		if ( wfReadOnly() ) {
+			return;
+		}
+
+		$dbw = wfGetDB( DB_MASTER );
+		$success = $dbw->update( 'page',
+			array( /* SET */
+				'page_touched' => $dbw->timestamp()
+			), array( /* WHERE */
+				'page_namespace' => $this->getNamespace() ,
+				'page_title' => $this->getDBkey()
+			), 'Title::invalidateCache'
+		);
+
+		if ($wgUseFileCache) {
+			$cache = new HTMLFileCache($this);
+			@unlink($cache->fileCacheName());
+		}
+
+		return $success;
+	}
+
+	/**
+	 * Prefix some arbitrary text with the namespace or interwiki prefix
+	 * of this object
+	 *
+	 * @param string $name the text
+	 * @return string the prefixed text
+	 * @private
+	 */
+	/* private */ function prefix( $name ) {
+		$p = '';
+		if ( '' != $this->mInterwiki ) {
+			$p = $this->mInterwiki . ':';
+		}
+		if ( 0 != $this->mNamespace ) {
+			$p .= $this->getNsText() . ':';
+		}
+		return $p . $name;
+	}
+
+	/**
+	 * Secure and split - main initialisation function for this object
+	 *
+	 * Assumes that mDbkeyform has been set, and is urldecoded
+	 * and uses underscores, but not otherwise munged.  This function
+	 * removes illegal characters, splits off the interwiki and
+	 * namespace prefixes, sets the other forms, and canonicalizes
+	 * everything.
+	 * @return bool true on success
+	 */
+	private function secureAndSplit() {
+		global $wgContLang, $wgLocalInterwiki, $wgCapitalLinks;
+
+		# Initialisation
+		static $rxTc = false;
+		if( !$rxTc ) {
+			# % is needed as well
+			$rxTc = '/[^' . Title::legalChars() . ']|%[0-9A-Fa-f]{2}/S';
+		}
+
+		$this->mInterwiki = $this->mFragment = '';
+		$this->mNamespace = $this->mDefaultNamespace; # Usually NS_MAIN
+		
+		$dbkey = $this->mDbkeyform;
+
+		# Strip Unicode bidi override characters.
+		# Sometimes they slip into cut-n-pasted page titles, where the
+		# override chars get included in list displays.
+		$dbkey = str_replace( "\xE2\x80\x8E", '', $dbkey ); // 200E LEFT-TO-RIGHT MARK
+		$dbkey = str_replace( "\xE2\x80\x8F", '', $dbkey ); // 200F RIGHT-TO-LEFT MARK
+		
+		# Clean up whitespace
+		#
+		$dbkey = preg_replace( '/[ _]+/', '_', $dbkey );
+		$dbkey = trim( $dbkey, '_' );
+
+		if ( '' == $dbkey ) {
+			return false;
+		}
+
+		if( false !== strpos( $dbkey, UTF8_REPLACEMENT ) ) {
+			# Contained illegal UTF-8 sequences or forbidden Unicode chars.
+			return false;
+		}
+
+		$this->mDbkeyform = $dbkey;
+
+		# Initial colon indicates main namespace rather than specified default
+		# but should not create invalid {ns,title} pairs such as {0,Project:Foo}
+		if ( ':' == $dbkey{0} ) {
+			$this->mNamespace = NS_MAIN;
+			$dbkey = substr( $dbkey, 1 ); # remove the colon but continue processing
+			$dbkey = trim( $dbkey, '_' ); # remove any subsequent whitespace
+		}
+
+		# Namespace or interwiki prefix
+		$firstPass = true;
+		do {
+			$m = array();
+			if ( preg_match( "/^(.+?)_*:_*(.*)$/S", $dbkey, $m ) ) {
+				$p = $m[1];
+				if ( $ns = $wgContLang->getNsIndex( $p )) {
+					# Ordinary namespace
+					$dbkey = $m[2];
+					$this->mNamespace = $ns;
+				} elseif( $this->getInterwikiLink( $p ) ) {
+					if( !$firstPass ) {
+						# Can't make a local interwiki link to an interwiki link.
+						# That's just crazy!
+						return false;
+					}
+
+					# Interwiki link
+					$dbkey = $m[2];
+					$this->mInterwiki = $wgContLang->lc( $p );
+
+					# Redundant interwiki prefix to the local wiki
+					if ( 0 == strcasecmp( $this->mInterwiki, $wgLocalInterwiki ) ) {
+						if( $dbkey == '' ) {
+							# Can't have an empty self-link
+							return false;
+						}
+						$this->mInterwiki = '';
+						$firstPass = false;
+						# Do another namespace split...
+						continue;
+					}
+
+					# If there's an initial colon after the interwiki, that also
+					# resets the default namespace
+					if ( $dbkey !== '' && $dbkey[0] == ':' ) {
+						$this->mNamespace = NS_MAIN;
+						$dbkey = substr( $dbkey, 1 );
+					}
+				}
+				# If there's no recognized interwiki or namespace,
+				# then let the colon expression be part of the title.
+			}
+			break;
+		} while( true );
+
+		# We already know that some pages won't be in the database!
+		#
+		if ( '' != $this->mInterwiki || NS_SPECIAL == $this->mNamespace ) {
+			$this->mArticleID = 0;
+		}
+		$fragment = strstr( $dbkey, '#' );
+		if ( false !== $fragment ) {
+			$this->setFragment( $fragment );
+			$dbkey = substr( $dbkey, 0, strlen( $dbkey ) - strlen( $fragment ) );
+			# remove whitespace again: prevents "Foo_bar_#"
+			# becoming "Foo_bar_"
+			$dbkey = preg_replace( '/_*$/', '', $dbkey );
+		}
+
+		# Reject illegal characters.
+		#
+		if( preg_match( $rxTc, $dbkey ) ) {
+			return false;
+		}
+
+		/**
+		 * Pages with "/./" or "/../" appearing in the URLs will
+		 * often be unreachable due to the way web browsers deal
+		 * with 'relative' URLs. Forbid them explicitly.
+		 */
+		if ( strpos( $dbkey, '.' ) !== false &&
+		     ( $dbkey === '.' || $dbkey === '..' ||
+		       strpos( $dbkey, './' ) === 0  ||
+		       strpos( $dbkey, '../' ) === 0 ||
+		       strpos( $dbkey, '/./' ) !== false ||
+		       strpos( $dbkey, '/../' ) !== false ) )
+		{
+			return false;
+		}
+		
+		/**
+		 * Magic tilde sequences? Nu-uh!
+		 */
+		if( strpos( $dbkey, '~~~' ) !== false ) {
+			return false;
+		}
+
+		/**
+		 * Limit the size of titles to 255 bytes.
+		 * This is typically the size of the underlying database field.
+		 * We make an exception for special pages, which don't need to be stored
+		 * in the database, and may edge over 255 bytes due to subpage syntax 
+		 * for long titles, e.g. [[Special:Block/Long name]]
+		 */
+		if ( ( $this->mNamespace != NS_SPECIAL && strlen( $dbkey ) > 255 ) ||
+		  strlen( $dbkey ) > 512 ) 
+		{
+			return false;
+		}
+
+		/**
+		 * Normally, all wiki links are forced to have
+		 * an initial capital letter so [[foo]] and [[Foo]]
+		 * point to the same place.
+		 *
+		 * Don't force it for interwikis, since the other
+		 * site might be case-sensitive.
+		 */
+		if( $wgCapitalLinks && $this->mInterwiki == '') {
+			$dbkey = $wgContLang->ucfirst( $dbkey );
+		}
+
+		/**
+		 * Can't make a link to a namespace alone...
+		 * "empty" local links can only be self-links
+		 * with a fragment identifier.
+		 */
+		if( $dbkey == '' &&
+			$this->mInterwiki == '' &&
+			$this->mNamespace != NS_MAIN ) {
+			return false;
+		}
+
+		// Any remaining initial :s are illegal.
+		if ( $dbkey !== '' && ':' == $dbkey{0} ) {
+			return false;
+		}
+		
+		# Fill fields
+		$this->mDbkeyform = $dbkey;
+		$this->mUrlform = wfUrlencode( $dbkey );
+
+		$this->mTextform = str_replace( '_', ' ', $dbkey );
+
+		return true;
+	}
+
+	/**
+	 * Set the fragment for this title
+	 * This is kind of bad, since except for this rarely-used function, Title objects
+	 * are immutable. The reason this is here is because it's better than setting the 
+	 * members directly, which is what Linker::formatComment was doing previously.
+	 *
+	 * @param string $fragment text
+	 * @todo clarify whether access is supposed to be public (was marked as "kind of public")
+	 */
+	public function setFragment( $fragment ) {
+		$this->mFragment = str_replace( '_', ' ', substr( $fragment, 1 ) );
+	}
+
+	/**
+	 * Get a Title object associated with the talk page of this article
+	 * @return Title the object for the talk page
+	 */
+	public function getTalkPage() {
+		return Title::makeTitle( Namespace::getTalk( $this->getNamespace() ), $this->getDBkey() );
+	}
+
+	/**
+	 * Get a title object associated with the subject page of this
+	 * talk page
+	 *
+	 * @return Title the object for the subject page
+	 */
+	public function getSubjectPage() {
+		return Title::makeTitle( Namespace::getSubject( $this->getNamespace() ), $this->getDBkey() );
+	}
+
+	/**
+	 * Get an array of Title objects linking to this Title
+	 * Also stores the IDs in the link cache.
+	 *
+	 * WARNING: do not use this function on arbitrary user-supplied titles!
+	 * On heavily-used templates it will max out the memory.
+	 *
+	 * @param string $options may be FOR UPDATE
+	 * @return array the Title objects linking here
+	 */
+	public function getLinksTo( $options = '', $table = 'pagelinks', $prefix = 'pl' ) {
+		$linkCache =& LinkCache::singleton();
+
+		if ( $options ) {
+			$db = wfGetDB( DB_MASTER );
+		} else {
+			$db = wfGetDB( DB_SLAVE );
+		}
+
+		$res = $db->select( array( 'page', $table ),
+			array( 'page_namespace', 'page_title', 'page_id' ),
+			array(
+				"{$prefix}_from=page_id",
+				"{$prefix}_namespace" => $this->getNamespace(),
+				"{$prefix}_title"     => $this->getDbKey() ),
+			'Title::getLinksTo',
+			$options );
+
+		$retVal = array();
+		if ( $db->numRows( $res ) ) {
+			while ( $row = $db->fetchObject( $res ) ) {
+				if ( $titleObj = Title::makeTitle( $row->page_namespace, $row->page_title ) ) {
+					$linkCache->addGoodLinkObj( $row->page_id, $titleObj );
+					$retVal[] = $titleObj;
+				}
+			}
+		}
+		$db->freeResult( $res );
+		return $retVal;
+	}
+
+	/**
+	 * Get an array of Title objects using this Title as a template
+	 * Also stores the IDs in the link cache.
+	 *
+	 * WARNING: do not use this function on arbitrary user-supplied titles!
+	 * On heavily-used templates it will max out the memory.
+	 *
+	 * @param string $options may be FOR UPDATE
+	 * @return array the Title objects linking here
+	 */
+	public function getTemplateLinksTo( $options = '' ) {
+		return $this->getLinksTo( $options, 'templatelinks', 'tl' );
+	}
+
+	/**
+	 * Get an array of Title objects referring to non-existent articles linked from this page
+	 *
+	 * @param string $options may be FOR UPDATE
+	 * @return array the Title objects
+	 */
+	public function getBrokenLinksFrom( $options = '' ) {
+		if ( $options ) {
+			$db = wfGetDB( DB_MASTER );
+		} else {
+			$db = wfGetDB( DB_SLAVE );
+		}
+
+		$res = $db->safeQuery(
+			  "SELECT pl_namespace, pl_title
+			     FROM !
+			LEFT JOIN !
+			       ON pl_namespace=page_namespace
+			      AND pl_title=page_title
+			    WHERE pl_from=?
+			      AND page_namespace IS NULL
+				  !",
+			$db->tableName( 'pagelinks' ),
+			$db->tableName( 'page' ),
+			$this->getArticleId(),
+			$options );
+
+		$retVal = array();
+		if ( $db->numRows( $res ) ) {
+			while ( $row = $db->fetchObject( $res ) ) {
+				$retVal[] = Title::makeTitle( $row->pl_namespace, $row->pl_title );
+			}
+		}
+		$db->freeResult( $res );
+		return $retVal;
+	}
+
+
+	/**
+	 * Get a list of URLs to purge from the Squid cache when this
+	 * page changes
+	 *
+	 * @return array the URLs
+	 */
+	public function getSquidURLs() {
+		global $wgContLang;
+
+		$urls = array(
+			$this->getInternalURL(),
+			$this->getInternalURL( 'action=history' )
+		);
+
+		// purge variant urls as well
+		if($wgContLang->hasVariants()){
+			$variants = $wgContLang->getVariants();
+			foreach($variants as $vCode){
+				if($vCode==$wgContLang->getCode()) continue; // we don't want default variant
+				$urls[] = $this->getInternalURL('',$vCode);
+			}
+		}
+
+		return $urls;
+	}
+
+	public function purgeSquid() {
+		global $wgUseSquid;
+		if ( $wgUseSquid ) {
+			$urls = $this->getSquidURLs();
+			$u = new SquidUpdate( $urls );
+			$u->doUpdate();
+		}
+	}
+
+	/**
+	 * Move this page without authentication
+	 * @param Title &$nt the new page Title
+	 */
+	public function moveNoAuth( &$nt ) {
+		return $this->moveTo( $nt, false );
+	}
+
+	/**
+	 * Check whether a given move operation would be valid.
+	 * Returns true if ok, or a message key string for an error message
+	 * if invalid. (Scarrrrry ugly interface this.)
+	 * @param Title &$nt the new title
+	 * @param bool $auth indicates whether $wgUser's permissions
+	 * 	should be checked
+	 * @return mixed true on success, message name on failure
+	 */
+	public function isValidMoveOperation( &$nt, $auth = true ) {
+		if( !$this or !$nt ) {
+			return 'badtitletext';
+		}
+		if( $this->equals( $nt ) ) {
+			return 'selfmove';
+		}
+		if( !$this->isMovable() || !$nt->isMovable() ) {
+			return 'immobile_namespace';
+		}
+
+		$oldid = $this->getArticleID();
+		$newid = $nt->getArticleID();
+
+		if ( strlen( $nt->getDBkey() ) < 1 ) {
+			return 'articleexists';
+		}
+		if ( ( '' == $this->getDBkey() ) ||
+			 ( !$oldid ) ||
+		     ( '' == $nt->getDBkey() ) ) {
+			return 'badarticleerror';
+		}
+
+		if ( $auth && (
+				!$this->userCan( 'edit' ) || !$nt->userCan( 'edit' ) ||
+				!$this->userCan( 'move' ) || !$nt->userCan( 'move' ) ) ) {
+			return 'protectedpage';
+		}
+
+		# The move is allowed only if (1) the target doesn't exist, or
+		# (2) the target is a redirect to the source, and has no history
+		# (so we can undo bad moves right after they're done).
+
+		if ( 0 != $newid ) { # Target exists; check for validity
+			if ( ! $this->isValidMoveTarget( $nt ) ) {
+				return 'articleexists';
+			}
+		}
+		return true;
+	}
+
+	/**
+	 * Move a title to a new location
+	 * @param Title &$nt the new title
+	 * @param bool $auth indicates whether $wgUser's permissions
+	 * 	should be checked
+	 * @return mixed true on success, message name on failure
+	 */
+	public function moveTo( &$nt, $auth = true, $reason = '' ) {
+		$err = $this->isValidMoveOperation( $nt, $auth );
+		if( is_string( $err ) ) {
+			return $err;
+		}
+
+		$pageid = $this->getArticleID();
+		if( $nt->exists() ) {
+			$this->moveOverExistingRedirect( $nt, $reason );
+			$pageCountChange = 0;
+		} else { # Target didn't exist, do normal move.
+			$this->moveToNewTitle( $nt, $reason );
+			$pageCountChange = 1;
+		}
+		$redirid = $this->getArticleID();
+
+		# Fixing category links (those without piped 'alternate' names) to be sorted under the new title
+		$dbw = wfGetDB( DB_MASTER );
+		$categorylinks = $dbw->tableName( 'categorylinks' );
+		$sql = "UPDATE $categorylinks SET cl_sortkey=" . $dbw->addQuotes( $nt->getPrefixedText() ) .
+			" WHERE cl_from=" . $dbw->addQuotes( $pageid ) .
+			" AND cl_sortkey=" . $dbw->addQuotes( $this->getPrefixedText() );
+		$dbw->query( $sql, 'SpecialMovepage::doSubmit' );
+
+		# Update watchlists
+
+		$oldnamespace = $this->getNamespace() & ~1;
+		$newnamespace = $nt->getNamespace() & ~1;
+		$oldtitle = $this->getDBkey();
+		$newtitle = $nt->getDBkey();
+
+		if( $oldnamespace != $newnamespace || $oldtitle != $newtitle ) {
+			WatchedItem::duplicateEntries( $this, $nt );
+		}
+
+		# Update search engine
+		$u = new SearchUpdate( $pageid, $nt->getPrefixedDBkey() );
+		$u->doUpdate();
+		$u = new SearchUpdate( $redirid, $this->getPrefixedDBkey(), '' );
+		$u->doUpdate();
+
+		# Update site_stats
+		if( $this->isContentPage() && !$nt->isContentPage() ) {
+			# No longer a content page
+			# Not viewed, edited, removing
+			$u = new SiteStatsUpdate( 0, 1, -1, $pageCountChange );
+		} elseif( !$this->isContentPage() && $nt->isContentPage() ) {
+			# Now a content page
+			# Not viewed, edited, adding
+			$u = new SiteStatsUpdate( 0, 1, +1, $pageCountChange );
+		} elseif( $pageCountChange ) {
+			# Redirect added
+			$u = new SiteStatsUpdate( 0, 0, 0, 1 );
+		} else {
+			# Nothing special
+			$u = false;
+		}
+		if( $u )
+			$u->doUpdate();
+		
+		global $wgUser;
+		wfRunHooks( 'TitleMoveComplete', array( &$this, &$nt, &$wgUser, $pageid, $redirid ) );
+		return true;
+	}
+
+	/**
+	 * Move page to a title which is at present a redirect to the
+	 * source page
+	 *
+	 * @param Title &$nt the page to move to, which should currently
+	 * 	be a redirect
+	 */
+	private function moveOverExistingRedirect( &$nt, $reason = '' ) {
+		global $wgUseSquid;
+		$fname = 'Title::moveOverExistingRedirect';
+		$comment = wfMsgForContent( '1movedto2_redir', $this->getPrefixedText(), $nt->getPrefixedText() );
+
+		if ( $reason ) {
+			$comment .= ": $reason";
+		}
+
+		$now = wfTimestampNow();
+		$newid = $nt->getArticleID();
+		$oldid = $this->getArticleID();
+		$dbw = wfGetDB( DB_MASTER );
+		$linkCache =& LinkCache::singleton();
+
+		# Delete the old redirect. We don't save it to history since
+		# by definition if we've got here it's rather uninteresting.
+		# We have to remove it so that the next step doesn't trigger
+		# a conflict on the unique namespace+title index...
+		$dbw->delete( 'page', array( 'page_id' => $newid ), $fname );
+
+		# Save a null revision in the page's history notifying of the move
+		$nullRevision = Revision::newNullRevision( $dbw, $oldid, $comment, true );
+		$nullRevId = $nullRevision->insertOn( $dbw );
+
+		# Change the name of the target page:
+		$dbw->update( 'page',
+			/* SET */ array(
+				'page_touched'   => $dbw->timestamp($now),
+				'page_namespace' => $nt->getNamespace(),
+				'page_title'     => $nt->getDBkey(),
+				'page_latest'    => $nullRevId,
+			),
+			/* WHERE */ array( 'page_id' => $oldid ),
+			$fname
+		);
+		$linkCache->clearLink( $nt->getPrefixedDBkey() );
+
+		# Recreate the redirect, this time in the other direction.
+		$mwRedir = MagicWord::get( 'redirect' );
+		$redirectText = $mwRedir->getSynonym( 0 ) . ' [[' . $nt->getPrefixedText() . "]]\n";
+		$redirectArticle = new Article( $this );
+		$newid = $redirectArticle->insertOn( $dbw );
+		$redirectRevision = new Revision( array(
+			'page'    => $newid,
+			'comment' => $comment,
+			'text'    => $redirectText ) );
+		$redirectRevision->insertOn( $dbw );
+		$redirectArticle->updateRevisionOn( $dbw, $redirectRevision, 0 );
+		$linkCache->clearLink( $this->getPrefixedDBkey() );
+
+		# Log the move
+		$log = new LogPage( 'move' );
+		$log->addEntry( 'move_redir', $this, $reason, array( 1 => $nt->getPrefixedText() ) );
+
+		# Now, we record the link from the redirect to the new title.
+		# It should have no other outgoing links...
+		$dbw->delete( 'pagelinks', array( 'pl_from' => $newid ), $fname );
+		$dbw->insert( 'pagelinks',
+			array(
+				'pl_from'      => $newid,
+				'pl_namespace' => $nt->getNamespace(),
+				'pl_title'     => $nt->getDbKey() ),
+			$fname );
+
+		# Purge squid
+		if ( $wgUseSquid ) {
+			$urls = array_merge( $nt->getSquidURLs(), $this->getSquidURLs() );
+			$u = new SquidUpdate( $urls );
+			$u->doUpdate();
+		}
+	}
+
+	/**
+	 * Move page to non-existing title.
+	 * @param Title &$nt the new Title
+	 */
+	private function moveToNewTitle( &$nt, $reason = '' ) {
+		global $wgUseSquid;
+		$fname = 'MovePageForm::moveToNewTitle';
+		$comment = wfMsgForContent( '1movedto2', $this->getPrefixedText(), $nt->getPrefixedText() );
+		if ( $reason ) {
+			$comment .= ": $reason";
+		}
+
+		$newid = $nt->getArticleID();
+		$oldid = $this->getArticleID();
+		$dbw = wfGetDB( DB_MASTER );
+		$now = $dbw->timestamp();
+		$linkCache =& LinkCache::singleton();
+
+		# Save a null revision in the page's history notifying of the move
+		$nullRevision = Revision::newNullRevision( $dbw, $oldid, $comment, true );
+		$nullRevId = $nullRevision->insertOn( $dbw );
+
+		# Rename cur entry
+		$dbw->update( 'page',
+			/* SET */ array(
+				'page_touched'   => $now,
+				'page_namespace' => $nt->getNamespace(),
+				'page_title'     => $nt->getDBkey(),
+				'page_latest'    => $nullRevId,
+			),
+			/* WHERE */ array( 'page_id' => $oldid ),
+			$fname
+		);
+
+		$linkCache->clearLink( $nt->getPrefixedDBkey() );
+
+		# Insert redirect
+		$mwRedir = MagicWord::get( 'redirect' );
+		$redirectText = $mwRedir->getSynonym( 0 ) . ' [[' . $nt->getPrefixedText() . "]]\n";
+		$redirectArticle = new Article( $this );
+		$newid = $redirectArticle->insertOn( $dbw );
+		$redirectRevision = new Revision( array(
+			'page'    => $newid,
+			'comment' => $comment,
+			'text'    => $redirectText ) );
+		$redirectRevision->insertOn( $dbw );
+		$redirectArticle->updateRevisionOn( $dbw, $redirectRevision, 0 );
+		$linkCache->clearLink( $this->getPrefixedDBkey() );
+
+		# Log the move
+		$log = new LogPage( 'move' );
+		$log->addEntry( 'move', $this, $reason, array( 1 => $nt->getPrefixedText()) );
+
+		# Purge caches as per article creation
+		Article::onArticleCreate( $nt );
+
+		# Record the just-created redirect's linking to the page
+		$dbw->insert( 'pagelinks',
+			array(
+				'pl_from'      => $newid,
+				'pl_namespace' => $nt->getNamespace(),
+				'pl_title'     => $nt->getDBkey() ),
+			$fname );
+
+		# Purge old title from squid
+		# The new title, and links to the new title, are purged in Article::onArticleCreate()
+		$this->purgeSquid();
+	}
+
+	/**
+	 * Checks if $this can be moved to a given Title
+	 * - Selects for update, so don't call it unless you mean business
+	 *
+	 * @param Title &$nt the new title to check
+	 */
+	public function isValidMoveTarget( $nt ) {
+
+		$fname = 'Title::isValidMoveTarget';
+		$dbw = wfGetDB( DB_MASTER );
+
+		# Is it a redirect?
+		$id  = $nt->getArticleID();
+		$obj = $dbw->selectRow( array( 'page', 'revision', 'text'),
+			array( 'page_is_redirect','old_text','old_flags' ),
+			array( 'page_id' => $id, 'page_latest=rev_id', 'rev_text_id=old_id' ),
+			$fname, 'FOR UPDATE' );
+
+		if ( !$obj || 0 == $obj->page_is_redirect ) {
+			# Not a redirect
+			wfDebug( __METHOD__ . ": not a redirect\n" );
+			return false;
+		}
+		$text = Revision::getRevisionText( $obj );
+
+		# Does the redirect point to the source?
+		# Or is it a broken self-redirect, usually caused by namespace collisions?
+		$m = array();
+		if ( preg_match( "/\\[\\[\\s*([^\\]\\|]*)]]/", $text, $m ) ) {
+			$redirTitle = Title::newFromText( $m[1] );
+			if( !is_object( $redirTitle ) ||
+				( $redirTitle->getPrefixedDBkey() != $this->getPrefixedDBkey() &&
+				$redirTitle->getPrefixedDBkey() != $nt->getPrefixedDBkey() ) ) {
+				wfDebug( __METHOD__ . ": redirect points to other page\n" );
+				return false;
+			}
+		} else {
+			# Fail safe
+			wfDebug( __METHOD__ . ": failsafe\n" );
+			return false;
+		}
+
+		# Does the article have a history?
+		$row = $dbw->selectRow( array( 'page', 'revision'),
+			array( 'rev_id' ),
+			array( 'page_namespace' => $nt->getNamespace(),
+				'page_title' => $nt->getDBkey(),
+				'page_id=rev_page AND page_latest != rev_id'
+			), $fname, 'FOR UPDATE'
+		);
+
+		# Return true if there was no history
+		return $row === false;
+	}
+
+	/**
+	 * Get categories to which this Title belongs and return an array of
+	 * categories' names.
+	 *
+	 * @return array an array of parents in the form:
+	 *	$parent => $currentarticle
+	 */
+	public function getParentCategories() {
+		global $wgContLang;
+
+		$titlekey = $this->getArticleId();
+		$dbr = wfGetDB( DB_SLAVE );
+		$categorylinks = $dbr->tableName( 'categorylinks' );
+
+		# NEW SQL
+		$sql = "SELECT * FROM $categorylinks"
+		     ." WHERE cl_from='$titlekey'"
+			 ." AND cl_from <> '0'"
+			 ." ORDER BY cl_sortkey";
+
+		$res = $dbr->query ( $sql ) ;
+
+		if($dbr->numRows($res) > 0) {
+			while ( $x = $dbr->fetchObject ( $res ) )
+				//$data[] = Title::newFromText($wgContLang->getNSText ( NS_CATEGORY ).':'.$x->cl_to);
+				$data[$wgContLang->getNSText ( NS_CATEGORY ).':'.$x->cl_to] = $this->getFullText();
+			$dbr->freeResult ( $res ) ;
+		} else {
+			$data = '';
+		}
+		return $data;
+	}
+
+	/**
+	 * Get a tree of parent categories
+	 * @param array $children an array with the children in the keys, to check for circular refs
+	 * @return array
+	 */
+	public function getParentCategoryTree( $children = array() ) {
+		$parents = $this->getParentCategories();
+
+		if($parents != '') {
+			foreach($parents as $parent => $current) {
+				if ( array_key_exists( $parent, $children ) ) {
+					# Circular reference
+					$stack[$parent] = array();
+				} else {
+					$nt = Title::newFromText($parent);
+					if ( $nt ) {
+						$stack[$parent] = $nt->getParentCategoryTree( $children + array($parent => 1) );
+					}
+				}
+			}
+			return $stack;
+		} else {
+			return array();
+		}
+	}
+
+
+	/**
+	 * Get an associative array for selecting this title from
+	 * the "page" table
+	 *
+	 * @return array
+	 */
+	public function pageCond() {
+		return array( 'page_namespace' => $this->mNamespace, 'page_title' => $this->mDbkeyform );
+	}
+
+	/**
+	 * Get the revision ID of the previous revision
+	 *
+	 * @param integer $revision  Revision ID. Get the revision that was before this one.
+	 * @return integer $oldrevision|false
+	 */
+	public function getPreviousRevisionID( $revision ) {
+		$dbr = wfGetDB( DB_SLAVE );
+		return $dbr->selectField( 'revision', 'rev_id',
+			'rev_page=' . intval( $this->getArticleId() ) .
+			' AND rev_id<' . intval( $revision ) . ' ORDER BY rev_id DESC' );
+	}
+
+	/**
+	 * Get the revision ID of the next revision
+	 *
+	 * @param integer $revision  Revision ID. Get the revision that was after this one.
+	 * @return integer $oldrevision|false
+	 */
+	public function getNextRevisionID( $revision ) {
+		$dbr = wfGetDB( DB_SLAVE );
+		return $dbr->selectField( 'revision', 'rev_id',
+			'rev_page=' . intval( $this->getArticleId() ) .
+			' AND rev_id>' . intval( $revision ) . ' ORDER BY rev_id' );
+	}
+
+	/**
+	 * Get the number of revisions between the given revision IDs.
+	 *
+	 * @param integer $old  Revision ID.
+	 * @param integer $new  Revision ID.
+	 * @return integer  Number of revisions between these IDs.
+	 */
+	public function countRevisionsBetween( $old, $new ) {
+		$dbr = wfGetDB( DB_SLAVE );
+		return $dbr->selectField( 'revision', 'count(*)',
+			'rev_page = ' . intval( $this->getArticleId() ) .
+			' AND rev_id > ' . intval( $old ) .
+			' AND rev_id < ' . intval( $new ) );
+	}
+
+	/**
+	 * Compare with another title.
+	 *
+	 * @param Title $title
+	 * @return bool
+	 */
+	public function equals( $title ) {
+		// Note: === is necessary for proper matching of number-like titles.
+		return $this->getInterwiki() === $title->getInterwiki()
+			&& $this->getNamespace() == $title->getNamespace()
+			&& $this->getDbkey() === $title->getDbkey();
+	}
+
+	/**
+	 * Check if page exists
+	 * @return bool
+	 */
+	public function exists() {
+		return $this->getArticleId() != 0;
+	}
+
+	/**
+	 * Should a link should be displayed as a known link, just based on its title?
+	 *
+	 * Currently, a self-link with a fragment and special pages are in
+	 * this category. Special pages never exist in the database.
+	 */
+	public function isAlwaysKnown() {
+		return  $this->isExternal() || ( 0 == $this->mNamespace && "" == $this->mDbkeyform )
+		  || NS_SPECIAL == $this->mNamespace;
+	}
+
+	/**
+	 * Update page_touched timestamps and send squid purge messages for
+	 * pages linking to this title.	May be sent to the job queue depending 
+	 * on the number of links. Typically called on create and delete.
+	 */
+	public function touchLinks() {
+		$u = new HTMLCacheUpdate( $this, 'pagelinks' );
+		$u->doUpdate();
+
+		if ( $this->getNamespace() == NS_CATEGORY ) {
+			$u = new HTMLCacheUpdate( $this, 'categorylinks' );
+			$u->doUpdate();
+		}
+	}
+
+	/**
+	 * Get the last touched timestamp
+	 */
+	public function getTouched() {
+		$dbr = wfGetDB( DB_SLAVE );
+		$touched = $dbr->selectField( 'page', 'page_touched',
+			array( 
+				'page_namespace' => $this->getNamespace(),
+				'page_title' => $this->getDBkey()
+			), __METHOD__
+		);
+		return $touched;
+	}
+
+	public function trackbackURL() {
+		global $wgTitle, $wgScriptPath, $wgServer;
+
+		return "$wgServer$wgScriptPath/trackback.php?article="
+			. htmlspecialchars(urlencode($wgTitle->getPrefixedDBkey()));
+	}
+
+	public function trackbackRDF() {
+		$url = htmlspecialchars($this->getFullURL());
+		$title = htmlspecialchars($this->getText());
+		$tburl = $this->trackbackURL();
+
+		return "
+<rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\"
+         xmlns:dc=\"http://purl.org/dc/elements/1.1/\"
+         xmlns:trackback=\"http://madskills.com/public/xml/rss/module/trackback/\">
+<rdf:Description
+   rdf:about=\"$url\"
+   dc:identifier=\"$url\"
+   dc:title=\"$title\"
+   trackback:ping=\"$tburl\" />
+</rdf:RDF>";
+	}
+
+	/**
+	 * Generate strings used for xml 'id' names in monobook tabs
+	 * @return string
+	 */
+	public function getNamespaceKey() {
+		global $wgContLang;
+		switch ($this->getNamespace()) {
+			case NS_MAIN:
+			case NS_TALK:
+				return 'nstab-main';
+			case NS_USER:
+			case NS_USER_TALK:
+				return 'nstab-user';
+			case NS_MEDIA:
+				return 'nstab-media';
+			case NS_SPECIAL:
+				return 'nstab-special';
+			case NS_PROJECT:
+			case NS_PROJECT_TALK:
+				return 'nstab-project';
+			case NS_IMAGE:
+			case NS_IMAGE_TALK:
+				return 'nstab-image';
+			case NS_MEDIAWIKI:
+			case NS_MEDIAWIKI_TALK:
+				return 'nstab-mediawiki';
+			case NS_TEMPLATE:
+			case NS_TEMPLATE_TALK:
+				return 'nstab-template';
+			case NS_HELP:
+			case NS_HELP_TALK:
+				return 'nstab-help';
+			case NS_CATEGORY:
+			case NS_CATEGORY_TALK:
+				return 'nstab-category';
+			default:
+				return 'nstab-' . $wgContLang->lc( $this->getSubjectNsText() );
+		}
+	}
+
+	/**
+	 * Returns true if this title resolves to the named special page
+	 * @param string $name The special page name
+	 */
+	public function isSpecial( $name ) {
+		if ( $this->getNamespace() == NS_SPECIAL ) {
+			list( $thisName, /* $subpage */ ) = SpecialPage::resolveAliasWithSubpage( $this->getDBkey() );
+			if ( $name == $thisName ) {
+				return true;
+			}
+		}
+		return false;
+	}
+
+	/**
+	 * If the Title refers to a special page alias which is not the local default, 
+	 * returns a new Title which points to the local default. Otherwise, returns $this.
+	 */
+	public function fixSpecialName() {
+		if ( $this->getNamespace() == NS_SPECIAL ) {
+			$canonicalName = SpecialPage::resolveAlias( $this->mDbkeyform );
+			if ( $canonicalName ) {
+				$localName = SpecialPage::getLocalNameFor( $canonicalName );
+				if ( $localName != $this->mDbkeyform ) {
+					return Title::makeTitle( NS_SPECIAL, $localName );
+				}
+			}
+		}
+		return $this;
+	}
+
+	/**
+	 * Is this Title in a namespace which contains content?
+	 * In other words, is this a content page, for the purposes of calculating
+	 * statistics, etc?
+	 *
+	 * @return bool
+	 */
+	public function isContentPage() {
+		return Namespace::isContent( $this->getNamespace() );
+	}
+	
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/User.php
===================================================================
--- /MediaWiki/branches/1.11/includes/User.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/User.php	(revision 1280)
@@ -0,0 +1,2612 @@
+<?php
+/**
+ * See user.txt
+ *
+ */
+
+# Number of characters in user_token field
+define( 'USER_TOKEN_LENGTH', 32 );
+
+# Serialized record version
+define( 'MW_USER_VERSION', 5 );
+
+# Some punctuation to prevent editing from broken text-mangling proxies.
+# FIXME: this is embedded unescaped into HTML attributes in various
+# places, so we can't safely include ' or " even though we really should.
+define( 'EDIT_TOKEN_SUFFIX', '\\' );
+
+/**
+ * Thrown by User::setPassword() on error
+ * @addtogroup Exception
+ */
+class PasswordError extends MWException {
+	// NOP
+}
+
+/**
+ * The User object encapsulates all of the user-specific settings (user_id,
+ * name, rights, password, email address, options, last login time). Client
+ * classes use the getXXX() functions to access these fields. These functions
+ * do all the work of determining whether the user is logged in,
+ * whether the requested option can be satisfied from cookies or
+ * whether a database query is needed. Most of the settings needed
+ * for rendering normal pages are set in the cookie to minimize use
+ * of the database.
+ */
+class User {
+
+	/**
+	 * A list of default user toggles, i.e. boolean user preferences that are 
+	 * displayed by Special:Preferences as checkboxes. This list can be 
+	 * extended via the UserToggles hook or $wgContLang->getExtraUserToggles().
+	 */
+	static public $mToggles = array(
+		'highlightbroken',
+		'justify',
+		'hideminor',
+		'extendwatchlist',
+		'usenewrc',
+		'numberheadings',
+		'showtoolbar',
+		'editondblclick',
+		'editsection',
+		'editsectiononrightclick',
+		'showtoc',
+		'rememberpassword',
+		'editwidth',
+		'watchcreations',
+		'watchdefault',
+		'watchmoves',
+		'watchdeletion',
+		'minordefault',
+		'previewontop',
+		'previewonfirst',
+		'nocache',
+		'enotifwatchlistpages',
+		'enotifusertalkpages',
+		'enotifminoredits',
+		'enotifrevealaddr',
+		'shownumberswatching',
+		'fancysig',
+		'externaleditor',
+		'externaldiff',
+		'showjumplinks',
+		'uselivepreview',
+		'forceeditsummary',
+		'watchlisthideown',
+		'watchlisthidebots',
+		'watchlisthideminor',
+		'ccmeonemails',
+		'diffonly',
+	);
+
+	/**
+	 * List of member variables which are saved to the shared cache (memcached).
+	 * Any operation which changes the corresponding database fields must 
+	 * call a cache-clearing function.
+	 */
+	static $mCacheVars = array(
+		# user table
+		'mId',
+		'mName',
+		'mRealName',
+		'mPassword',
+		'mNewpassword',
+		'mNewpassTime',
+		'mEmail',
+		'mOptions',
+		'mTouched',
+		'mToken',
+		'mEmailAuthenticated',
+		'mEmailToken',
+		'mEmailTokenExpires',
+		'mRegistration',
+		'mEditCount',
+		# user_group table
+		'mGroups',
+	);
+
+	/**
+	 * The cache variable declarations
+	 */
+	var $mId, $mName, $mRealName, $mPassword, $mNewpassword, $mNewpassTime, 
+		$mEmail, $mOptions, $mTouched, $mToken, $mEmailAuthenticated, 
+		$mEmailToken, $mEmailTokenExpires, $mRegistration, $mGroups;
+
+	/**
+	 * Whether the cache variables have been loaded
+	 */
+	var $mDataLoaded;
+
+	/**
+	 * Initialisation data source if mDataLoaded==false. May be one of:
+	 *    defaults      anonymous user initialised from class defaults
+	 *    name          initialise from mName
+	 *    id            initialise from mId
+	 *    session       log in from cookies or session if possible
+	 *
+	 * Use the User::newFrom*() family of functions to set this.
+	 */
+	var $mFrom;
+
+	/**
+	 * Lazy-initialised variables, invalidated with clearInstanceCache
+	 */
+	var $mNewtalk, $mDatePreference, $mBlockedby, $mHash, $mSkin, $mRights,
+		$mBlockreason, $mBlock, $mEffectiveGroups;
+
+	/** 
+	 * Lightweight constructor for anonymous user
+	 * Use the User::newFrom* factory functions for other kinds of users
+	 */
+	function User() {
+		$this->clearInstanceCache( 'defaults' );
+	}
+
+	/**
+	 * Load the user table data for this object from the source given by mFrom
+	 */
+	function load() {
+		if ( $this->mDataLoaded ) {
+			return;
+		}
+		wfProfileIn( __METHOD__ );
+
+		# Set it now to avoid infinite recursion in accessors
+		$this->mDataLoaded = true;
+
+		switch ( $this->mFrom ) {
+			case 'defaults':
+				$this->loadDefaults();
+				break;
+			case 'name':
+				$this->mId = self::idFromName( $this->mName );
+				if ( !$this->mId ) {
+					# Nonexistent user placeholder object
+					$this->loadDefaults( $this->mName );
+				} else {
+					$this->loadFromId();
+				}
+				break;
+			case 'id':
+				$this->loadFromId();
+				break;
+			case 'session':
+				$this->loadFromSession();
+				break;
+			default:
+				throw new MWException( "Unrecognised value for User->mFrom: \"{$this->mFrom}\"" );
+		}
+		wfProfileOut( __METHOD__ );
+	}
+
+	/**
+	 * Load user table data given mId
+	 * @return false if the ID does not exist, true otherwise
+	 * @private
+	 */
+	function loadFromId() {
+		global $wgMemc;
+		if ( $this->mId == 0 ) {
+			$this->loadDefaults();
+			return false;
+		} 
+
+		# Try cache
+		$key = wfMemcKey( 'user', 'id', $this->mId );
+		$data = $wgMemc->get( $key );
+		if ( !is_array( $data ) || $data['mVersion'] < MW_USER_VERSION ) {
+			# Object is expired, load from DB
+			$data = false;
+		}
+		
+		if ( !$data ) {
+			wfDebug( "Cache miss for user {$this->mId}\n" );
+			# Load from DB
+			if ( !$this->loadFromDatabase() ) {
+				# Can't load from ID, user is anonymous
+				return false;
+			}
+
+			# Save to cache
+			$data = array();
+			foreach ( self::$mCacheVars as $name ) {
+				$data[$name] = $this->$name;
+			}
+			$data['mVersion'] = MW_USER_VERSION;
+			$wgMemc->set( $key, $data );
+		} else {
+			wfDebug( "Got user {$this->mId} from cache\n" );
+			# Restore from cache
+			foreach ( self::$mCacheVars as $name ) {
+				$this->$name = $data[$name];
+			}
+		}
+		return true;
+	}
+
+	/**
+	 * Static factory method for creation from username.
+	 *
+	 * This is slightly less efficient than newFromId(), so use newFromId() if
+	 * you have both an ID and a name handy. 
+	 *
+	 * @param string $name Username, validated by Title:newFromText()
+	 * @param mixed $validate Validate username. Takes the same parameters as 
+	 *    User::getCanonicalName(), except that true is accepted as an alias 
+	 *    for 'valid', for BC.
+	 * 
+	 * @return User object, or null if the username is invalid. If the username 
+	 *    is not present in the database, the result will be a user object with
+	 *    a name, zero user ID and default settings. 
+	 * @static
+	 */
+	static function newFromName( $name, $validate = 'valid' ) {
+		if ( $validate === true ) {
+			$validate = 'valid';
+		}
+		$name = self::getCanonicalName( $name, $validate );
+		if ( $name === false ) {
+			return null;
+		} else {
+			# Create unloaded user object
+			$u = new User;
+			$u->mName = $name;
+			$u->mFrom = 'name';
+			return $u;
+		}
+	}
+
+	static function newFromId( $id ) {
+		$u = new User;
+		$u->mId = $id;
+		$u->mFrom = 'id';
+		return $u;
+	}
+
+	/**
+	 * Factory method to fetch whichever user has a given email confirmation code.
+	 * This code is generated when an account is created or its e-mail address
+	 * has changed.
+	 *
+	 * If the code is invalid or has expired, returns NULL.
+	 *
+	 * @param string $code
+	 * @return User
+	 * @static
+	 */
+	static function newFromConfirmationCode( $code ) {
+		$dbr = wfGetDB( DB_SLAVE );
+		$id = $dbr->selectField( 'user', 'user_id', array(
+			'user_email_token' => md5( $code ),
+			'user_email_token_expires > ' . $dbr->addQuotes( $dbr->timestamp() ),
+			) );
+		if( $id !== false ) {
+			return User::newFromId( $id );
+		} else {
+			return null;
+		}
+	}
+	
+	/**
+	 * Create a new user object using data from session or cookies. If the
+	 * login credentials are invalid, the result is an anonymous user.
+	 *
+	 * @return User
+	 * @static
+	 */
+	static function newFromSession() {
+		$user = new User;
+		$user->mFrom = 'session';
+		return $user;
+	}
+
+	/**
+	 * Get username given an id.
+	 * @param integer $id Database user id
+	 * @return string Nickname of a user
+	 * @static
+	 */
+	static function whoIs( $id ) {
+		$dbr = wfGetDB( DB_SLAVE );
+		return $dbr->selectField( 'user', 'user_name', array( 'user_id' => $id ), 'User::whoIs' );
+	}
+
+	/**
+	 * Get real username given an id.
+	 * @param integer $id Database user id
+	 * @return string Realname of a user
+	 * @static
+	 */
+	static function whoIsReal( $id ) {
+		$dbr = wfGetDB( DB_SLAVE );
+		return $dbr->selectField( 'user', 'user_real_name', array( 'user_id' => $id ), 'User::whoIsReal' );
+	}
+
+	/**
+	 * Get database id given a user name
+	 * @param string $name Nickname of a user
+	 * @return integer|null Database user id (null: if non existent
+	 * @static
+	 */
+	static function idFromName( $name ) {
+		$nt = Title::newFromText( $name );
+		if( is_null( $nt ) ) {
+			# Illegal name
+			return null;
+		}
+		$dbr = wfGetDB( DB_SLAVE );
+		$s = $dbr->selectRow( 'user', array( 'user_id' ), array( 'user_name' => $nt->getText() ), __METHOD__ );
+
+		if ( $s === false ) {
+			return 0;
+		} else {
+			return $s->user_id;
+		}
+	}
+
+	/**
+	 * Does the string match an anonymous IPv4 address?
+	 *
+	 * This function exists for username validation, in order to reject
+	 * usernames which are similar in form to IP addresses. Strings such
+	 * as 300.300.300.300 will return true because it looks like an IP 
+	 * address, despite not being strictly valid.
+	 * 
+	 * We match \d{1,3}\.\d{1,3}\.\d{1,3}\.xxx as an anonymous IP
+	 * address because the usemod software would "cloak" anonymous IP
+	 * addresses like this, if we allowed accounts like this to be created
+	 * new users could get the old edits of these anonymous users.
+	 *
+	 * @static
+	 * @param string $name Nickname of a user
+	 * @return bool
+	 */
+	static function isIP( $name ) {
+		return preg_match('/^\d{1,3}\.\d{1,3}\.\d{1,3}\.(?:xxx|\d{1,3})$/',$name) || User::isIPv6($name);
+		/*return preg_match("/^
+			(?:[01]?\d{1,2}|2(:?[0-4]\d|5[0-5]))\.
+			(?:[01]?\d{1,2}|2(:?[0-4]\d|5[0-5]))\.
+			(?:[01]?\d{1,2}|2(:?[0-4]\d|5[0-5]))\.
+			(?:[01]?\d{1,2}|2(:?[0-4]\d|5[0-5]))
+		$/x", $name);*/
+	}
+
+	/**
+	 * Check if $name is an IPv6 IP.
+	 */
+	static function isIPv6($name) {
+		/* 
+		 * if it has any non-valid characters, it can't be a valid IPv6  
+		 * address.
+		 */
+		if (preg_match("/[^:a-fA-F0-9]/", $name))
+			return false;
+
+		$parts = explode(":", $name);
+		if (count($parts) < 3)
+			return false;
+		foreach ($parts as $part) {
+			if (!preg_match("/^[0-9a-fA-F]{0,4}$/", $part))
+				return false;
+		}
+		return true;
+	}
+
+	/**
+	 * Is the input a valid username?
+	 *
+	 * Checks if the input is a valid username, we don't want an empty string,
+	 * an IP address, anything that containins slashes (would mess up subpages),
+	 * is longer than the maximum allowed username size or doesn't begin with
+	 * a capital letter.
+	 *
+	 * @param string $name
+	 * @return bool
+	 * @static
+	 */
+	static function isValidUserName( $name ) {
+		global $wgContLang, $wgMaxNameChars;
+
+		if ( $name == ''
+		|| User::isIP( $name )
+		|| strpos( $name, '/' ) !== false
+		|| strlen( $name ) > $wgMaxNameChars
+		|| $name != $wgContLang->ucfirst( $name ) )
+			return false;
+
+		// Ensure that the name can't be misresolved as a different title,
+		// such as with extra namespace keys at the start.
+		$parsed = Title::newFromText( $name );
+		if( is_null( $parsed )
+			|| $parsed->getNamespace()
+			|| strcmp( $name, $parsed->getPrefixedText() ) )
+			return false;
+		
+		// Check an additional blacklist of troublemaker characters.
+		// Should these be merged into the title char list?
+		$unicodeBlacklist = '/[' .
+			'\x{0080}-\x{009f}' . # iso-8859-1 control chars
+			'\x{00a0}' .          # non-breaking space
+			'\x{2000}-\x{200f}' . # various whitespace
+			'\x{2028}-\x{202f}' . # breaks and control chars
+			'\x{3000}' .          # ideographic space
+			'\x{e000}-\x{f8ff}' . # private use
+			']/u';
+		if( preg_match( $unicodeBlacklist, $name ) ) {
+			return false;
+		}
+		
+		return true;
+	}
+	
+	/**
+	 * Usernames which fail to pass this function will be blocked
+	 * from user login and new account registrations, but may be used
+	 * internally by batch processes.
+	 *
+	 * If an account already exists in this form, login will be blocked
+	 * by a failure to pass this function.
+	 *
+	 * @param string $name
+	 * @return bool
+	 */
+	static function isUsableName( $name ) {
+		global $wgReservedUsernames;
+		return
+			// Must be a usable username, obviously ;)
+			self::isValidUserName( $name ) &&
+			
+			// Certain names may be reserved for batch processes.
+			!in_array( $name, $wgReservedUsernames );
+	}
+	
+	/**
+	 * Usernames which fail to pass this function will be blocked
+	 * from new account registrations, but may be used internally
+	 * either by batch processes or by user accounts which have
+	 * already been created.
+	 *
+	 * Additional character blacklisting may be added here
+	 * rather than in isValidUserName() to avoid disrupting
+	 * existing accounts.
+	 *
+	 * @param string $name
+	 * @return bool
+	 */
+	static function isCreatableName( $name ) {
+		return
+			self::isUsableName( $name ) &&
+			
+			// Registration-time character blacklisting...
+			strpos( $name, '@' ) === false;
+	}
+
+	/**
+	 * Is the input a valid password?
+	 *
+	 * @param string $password
+	 * @return bool
+	 */
+	function isValidPassword( $password ) {
+		global $wgMinimalPasswordLength, $wgContLang;
+
+		$result = null;
+		if( !wfRunHooks( 'isValidPassword', array( $password, &$result ) ) ) return $result;
+		if ($result === false) return false;
+		return (strlen( $password ) >= $wgMinimalPasswordLength) &&
+			($wgContLang->lc( $password ) !== $wgContLang->lc( $this->mName ));
+	}
+
+	/**
+	 * Does the string match roughly an email address ?
+	 *
+	 * There used to be a regular expression here, it got removed because it
+	 * rejected valid addresses. Actually just check if there is '@' somewhere
+	 * in the given address.
+	 *
+	 * @todo Check for RFC 2822 compilance (bug 959)
+	 *
+	 * @param string $addr email address
+	 * @static
+	 * @return bool
+	 */
+	static function isValidEmailAddr ( $addr ) {
+		return ( trim( $addr ) != '' ) &&
+			(false !== strpos( $addr, '@' ) );
+	}
+
+	/**
+	 * Given unvalidated user input, return a canonical username, or false if 
+	 * the username is invalid.
+	 * @param string $name
+	 * @param mixed $validate Type of validation to use:
+	 *                         false        No validation
+	 *                         'valid'      Valid for batch processes
+	 *                         'usable'     Valid for batch processes and login
+	 *                         'creatable'  Valid for batch processes, login and account creation
+	 */
+	static function getCanonicalName( $name, $validate = 'valid' ) {
+		# Force usernames to capital
+		global $wgContLang;
+		$name = $wgContLang->ucfirst( $name );
+
+		# Clean up name according to title rules
+		$t = Title::newFromText( $name );
+		if( is_null( $t ) ) {
+			return false;
+		}
+
+		# Reject various classes of invalid names
+		$name = $t->getText();
+		global $wgAuth;
+		$name = $wgAuth->getCanonicalName( $t->getText() );
+
+		switch ( $validate ) {
+			case false:
+				break;
+			case 'valid':
+				if ( !User::isValidUserName( $name ) ) {
+					$name = false;
+				}
+				break;
+			case 'usable':
+				if ( !User::isUsableName( $name ) ) {
+					$name = false;
+				}
+				break;
+			case 'creatable':
+				if ( !User::isCreatableName( $name ) ) {
+					$name = false;
+				}
+				break;
+			default:
+				throw new MWException( 'Invalid parameter value for $validate in '.__METHOD__ );
+		}
+		return $name;
+	}
+
+	/**
+	 * Count the number of edits of a user
+	 *
+	 * It should not be static and some day should be merged as proper member function / deprecated -- domas
+	 * 
+	 * @param int $uid The user ID to check
+	 * @return int
+	 * @static
+	 */
+	static function edits( $uid ) {
+		wfProfileIn( __METHOD__ );
+		$dbr = wfGetDB( DB_SLAVE );
+		// check if the user_editcount field has been initialized
+		$field = $dbr->selectField(
+			'user', 'user_editcount',
+			array( 'user_id' => $uid ),
+			__METHOD__
+		);
+
+		if( $field === null ) { // it has not been initialized. do so.
+			$dbw = wfGetDb( DB_MASTER );
+			$count = $dbr->selectField(
+				'revision', 'count(*)',
+				array( 'rev_user' => $uid ),
+				__METHOD__
+			);
+			$dbw->update(
+				'user',
+				array( 'user_editcount' => $count ),
+				array( 'user_id' => $uid ),
+				__METHOD__
+			);
+		} else {
+			$count = $field;
+		}
+		wfProfileOut( __METHOD__ );
+		return $count;
+	}
+
+	/**
+	 * Return a random password. Sourced from mt_rand, so it's not particularly secure.
+	 * @todo hash random numbers to improve security, like generateToken()
+	 *
+	 * @return string
+	 * @static
+	 */
+	static function randomPassword() {
+		global $wgMinimalPasswordLength;
+		$pwchars = 'ABCDEFGHJKLMNPQRSTUVWXYZabcdefghjkmnpqrstuvwxyz';
+		$l = strlen( $pwchars ) - 1;
+
+		$pwlength = max( 7, $wgMinimalPasswordLength );
+		$digit = mt_rand(0, $pwlength - 1);
+		$np = '';
+		for ( $i = 0; $i < $pwlength; $i++ ) {
+			$np .= $i == $digit ? chr( mt_rand(48, 57) ) : $pwchars{ mt_rand(0, $l)};
+		}
+		return $np;
+	}
+
+	/**
+	 * Set cached properties to default. Note: this no longer clears 
+	 * uncached lazy-initialised properties. The constructor does that instead.
+	 *
+	 * @private
+	 */
+	function loadDefaults( $name = false ) {
+		wfProfileIn( __METHOD__ );
+
+		global $wgCookiePrefix;
+
+		$this->mId = 0;
+		$this->mName = $name;
+		$this->mRealName = '';
+		$this->mPassword = $this->mNewpassword = '';
+		$this->mNewpassTime = null;
+		$this->mEmail = '';
+		$this->mOptions = null; # Defer init
+
+		if ( isset( $_COOKIE[$wgCookiePrefix.'LoggedOut'] ) ) {
+			$this->mTouched = wfTimestamp( TS_MW, $_COOKIE[$wgCookiePrefix.'LoggedOut'] );
+		} else {
+			$this->mTouched = '0'; # Allow any pages to be cached
+		}
+
+		$this->setToken(); # Random
+		$this->mEmailAuthenticated = null;
+		$this->mEmailToken = '';
+		$this->mEmailTokenExpires = null;
+		$this->mRegistration = wfTimestamp( TS_MW );
+		$this->mGroups = array();
+
+		wfProfileOut( __METHOD__ );
+	}
+	
+	/**
+	 * Initialise php session
+	 * @deprecated use wfSetupSession()
+	 */
+	function SetupSession() {
+		wfSetupSession();
+	}
+
+	/**
+	 * Load user data from the session or login cookie. If there are no valid
+	 * credentials, initialises the user as an anon.
+	 * @return true if the user is logged in, false otherwise
+	 */
+	private function loadFromSession() {
+		global $wgMemc, $wgCookiePrefix;
+
+		if ( isset( $_SESSION['wsUserID'] ) ) {
+			if ( 0 != $_SESSION['wsUserID'] ) {
+				$sId = $_SESSION['wsUserID'];
+			} else {
+				$this->loadDefaults();
+				return false;
+			}
+		} else if ( isset( $_COOKIE["{$wgCookiePrefix}UserID"] ) ) {
+			$sId = intval( $_COOKIE["{$wgCookiePrefix}UserID"] );
+			$_SESSION['wsUserID'] = $sId;
+		} else {
+			$this->loadDefaults();
+			return false;
+		}
+		if ( isset( $_SESSION['wsUserName'] ) ) {
+			$sName = $_SESSION['wsUserName'];
+		} else if ( isset( $_COOKIE["{$wgCookiePrefix}UserName"] ) ) {
+			$sName = $_COOKIE["{$wgCookiePrefix}UserName"];
+			$_SESSION['wsUserName'] = $sName;
+		} else {
+			$this->loadDefaults();
+			return false;
+		}
+
+		$passwordCorrect = FALSE;
+		$this->mId = $sId;
+		if ( !$this->loadFromId() ) {
+			# Not a valid ID, loadFromId has switched the object to anon for us
+			return false;
+		}
+		
+		if ( isset( $_SESSION['wsToken'] ) ) {
+			$passwordCorrect = $_SESSION['wsToken'] == $this->mToken;
+			$from = 'session';
+		} else if ( isset( $_COOKIE["{$wgCookiePrefix}Token"] ) ) {
+			$passwordCorrect = $this->mToken == $_COOKIE["{$wgCookiePrefix}Token"];
+			$from = 'cookie';
+		} else {
+			# No session or persistent login cookie
+			$this->loadDefaults();
+			return false;
+		}
+
+		if ( ( $sName == $this->mName ) && $passwordCorrect ) {
+			wfDebug( "Logged in from $from\n" );
+			return true;
+		} else {
+			# Invalid credentials
+			wfDebug( "Can't log in from $from, invalid credentials\n" );
+			$this->loadDefaults();
+			return false;
+		}
+	}
+	
+	/**
+	 * Load user and user_group data from the database
+	 * $this->mId must be set, this is how the user is identified.
+	 * 
+	 * @return true if the user exists, false if the user is anonymous
+	 * @private
+	 */
+	function loadFromDatabase() {
+		# Paranoia
+		$this->mId = intval( $this->mId );
+
+		/** Anonymous user */
+		if( !$this->mId ) {
+			$this->loadDefaults();
+			return false;
+		}
+
+		$dbr = wfGetDB( DB_MASTER );
+		$s = $dbr->selectRow( 'user', '*', array( 'user_id' => $this->mId ), __METHOD__ );
+
+		if ( $s !== false ) {
+			# Initialise user table data
+			$this->mName = $s->user_name;
+			$this->mRealName = $s->user_real_name;
+			$this->mPassword = $s->user_password;
+			$this->mNewpassword = $s->user_newpassword;
+			$this->mNewpassTime = wfTimestampOrNull( TS_MW, $s->user_newpass_time );
+			$this->mEmail = $s->user_email;
+			$this->decodeOptions( $s->user_options );
+			$this->mTouched = wfTimestamp(TS_MW,$s->user_touched);
+			$this->mToken = $s->user_token;
+			$this->mEmailAuthenticated = wfTimestampOrNull( TS_MW, $s->user_email_authenticated );
+			$this->mEmailToken = $s->user_email_token;
+			$this->mEmailTokenExpires = wfTimestampOrNull( TS_MW, $s->user_email_token_expires );
+			$this->mRegistration = wfTimestampOrNull( TS_MW, $s->user_registration );
+			$this->mEditCount = $s->user_editcount; 
+			$this->getEditCount(); // revalidation for nulls
+
+			# Load group data
+			$res = $dbr->select( 'user_groups',
+				array( 'ug_group' ),
+				array( 'ug_user' => $this->mId ),
+				__METHOD__ );
+			$this->mGroups = array();
+			while( $row = $dbr->fetchObject( $res ) ) {
+				$this->mGroups[] = $row->ug_group;
+			}
+			return true;
+		} else {
+			# Invalid user_id
+			$this->mId = 0;
+			$this->loadDefaults();
+			return false;
+		}
+	}
+
+	/**
+	 * Clear various cached data stored in this object. 
+	 * @param string $reloadFrom Reload user and user_groups table data from a 
+	 *   given source. May be "name", "id", "defaults", "session" or false for 
+	 *   no reload.
+	 */
+	function clearInstanceCache( $reloadFrom = false ) {
+		$this->mNewtalk = -1;
+		$this->mDatePreference = null;
+		$this->mBlockedby = -1; # Unset
+		$this->mHash = false;
+		$this->mSkin = null;
+		$this->mRights = null;
+		$this->mEffectiveGroups = null;
+
+		if ( $reloadFrom ) {
+			$this->mDataLoaded = false;
+			$this->mFrom = $reloadFrom;
+		}
+	}
+
+	/**
+	 * Combine the language default options with any site-specific options
+	 * and add the default language variants.
+	 * Not really private cause it's called by Language class
+	 * @return array
+	 * @static
+	 * @private
+	 */
+	static function getDefaultOptions() {
+		global $wgNamespacesToBeSearchedDefault;
+		/**
+		 * Site defaults will override the global/language defaults
+		 */
+		global $wgDefaultUserOptions, $wgContLang;
+		$defOpt = $wgDefaultUserOptions + $wgContLang->getDefaultUserOptionOverrides();
+
+		/**
+		 * default language setting
+		 */
+		$variant = $wgContLang->getPreferredVariant( false );
+		$defOpt['variant'] = $variant;
+		$defOpt['language'] = $variant;
+
+		foreach( $wgNamespacesToBeSearchedDefault as $nsnum => $val ) {
+			$defOpt['searchNs'.$nsnum] = $val;
+		}
+		return $defOpt;
+	}
+
+	/**
+	 * Get a given default option value.
+	 *
+	 * @param string $opt
+	 * @return string
+	 * @static
+	 * @public
+	 */
+	function getDefaultOption( $opt ) {
+		$defOpts = User::getDefaultOptions();
+		if( isset( $defOpts[$opt] ) ) {
+			return $defOpts[$opt];
+		} else {
+			return '';
+		}
+	}
+
+	/**
+	 * Get a list of user toggle names
+	 * @return array
+	 */
+	static function getToggles() {
+		global $wgContLang;
+		$extraToggles = array();
+		wfRunHooks( 'UserToggles', array( &$extraToggles ) );
+		return array_merge( self::$mToggles, $extraToggles, $wgContLang->getExtraUserToggles() );
+	}
+
+
+	/**
+	 * Get blocking information
+	 * @private
+	 * @param bool $bFromSlave Specify whether to check slave or master. To improve performance,
+	 *  non-critical checks are done against slaves. Check when actually saving should be done against
+	 *  master.
+	 */
+	function getBlockedStatus( $bFromSlave = true ) {
+		global $wgEnableSorbs, $wgProxyWhitelist;
+
+		if ( -1 != $this->mBlockedby ) {
+			wfDebug( "User::getBlockedStatus: already loaded.\n" );
+			return;
+		}
+
+		wfProfileIn( __METHOD__ );
+		wfDebug( __METHOD__.": checking...\n" );
+
+		$this->mBlockedby = 0; 
+		$this->mHideName = 0;
+		$ip = wfGetIP();
+
+		if ($this->isAllowed( 'ipblock-exempt' ) ) {
+			# Exempt from all types of IP-block
+			$ip = '';
+		}
+
+		# User/IP blocking
+		$this->mBlock = new Block();
+		$this->mBlock->fromMaster( !$bFromSlave );
+		if ( $this->mBlock->load( $ip , $this->mId ) ) {
+			wfDebug( __METHOD__.": Found block.\n" );
+			$this->mBlockedby = $this->mBlock->mBy;
+			$this->mBlockreason = $this->mBlock->mReason;
+			$this->mHideName = $this->mBlock->mHideName;
+			if ( $this->isLoggedIn() ) {
+				$this->spreadBlock();
+			}
+		} else {
+			$this->mBlock = null;
+			wfDebug( __METHOD__.": No block.\n" );
+		}
+
+		# Proxy blocking
+		if ( !$this->isAllowed('proxyunbannable') && !in_array( $ip, $wgProxyWhitelist ) ) {
+
+			# Local list
+			if ( wfIsLocallyBlockedProxy( $ip ) ) {
+				$this->mBlockedby = wfMsg( 'proxyblocker' );
+				$this->mBlockreason = wfMsg( 'proxyblockreason' );
+			}
+
+			# DNSBL
+			if ( !$this->mBlockedby && $wgEnableSorbs && !$this->getID() ) {
+				if ( $this->inSorbsBlacklist( $ip ) ) {
+					$this->mBlockedby = wfMsg( 'sorbs' );
+					$this->mBlockreason = wfMsg( 'sorbsreason' );
+				}
+			}
+		}
+
+		# Extensions
+		wfRunHooks( 'GetBlockedStatus', array( &$this ) );
+
+		wfProfileOut( __METHOD__ );
+	}
+
+	function inSorbsBlacklist( $ip ) {
+		global $wgEnableSorbs, $wgSorbsUrl;
+
+		return $wgEnableSorbs &&
+			$this->inDnsBlacklist( $ip, $wgSorbsUrl );
+	}
+
+	function inDnsBlacklist( $ip, $base ) {
+		wfProfileIn( __METHOD__ );
+
+		$found = false;
+		$host = '';
+
+		$m = array();
+		if ( preg_match( '/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/', $ip, $m ) ) {
+			# Make hostname
+			for ( $i=4; $i>=1; $i-- ) {
+				$host .= $m[$i] . '.';
+			}
+			$host .= $base;
+
+			# Send query
+			$ipList = gethostbynamel( $host );
+
+			if ( $ipList ) {
+				wfDebug( "Hostname $host is {$ipList[0]}, it's a proxy says $base!\n" );
+				$found = true;
+			} else {
+				wfDebug( "Requested $host, not found in $base.\n" );
+			}
+		}
+
+		wfProfileOut( __METHOD__ );
+		return $found;
+	}
+
+	/**
+	 * Is this user subject to rate limiting?
+	 *
+	 * @return bool
+	 */
+	public function isPingLimitable() {
+		global $wgRateLimitsExcludedGroups;
+		return array_intersect($this->getEffectiveGroups(), $wgRateLimitsExcludedGroups) == array();
+	}
+
+	/**
+	 * Primitive rate limits: enforce maximum actions per time period
+	 * to put a brake on flooding.
+	 *
+	 * Note: when using a shared cache like memcached, IP-address
+	 * last-hit counters will be shared across wikis.
+	 *
+	 * @return bool true if a rate limiter was tripped
+	 * @public
+	 */
+	function pingLimiter( $action='edit' ) {
+
+		# Call the 'PingLimiter' hook
+		$result = false;
+		if( !wfRunHooks( 'PingLimiter', array( &$this, $action, $result ) ) ) {
+			return $result;
+		}
+
+		global $wgRateLimits, $wgRateLimitsExcludedGroups;
+		if( !isset( $wgRateLimits[$action] ) ) {
+			return false;
+		}
+
+		# Some groups shouldn't trigger the ping limiter, ever
+		if( !$this->isPingLimitable() )
+			return false;
+
+		global $wgMemc, $wgRateLimitLog;
+		wfProfileIn( __METHOD__ );
+
+		$limits = $wgRateLimits[$action];
+		$keys = array();
+		$id = $this->getId();
+		$ip = wfGetIP();
+
+		if( isset( $limits['anon'] ) && $id == 0 ) {
+			$keys[wfMemcKey( 'limiter', $action, 'anon' )] = $limits['anon'];
+		}
+
+		if( isset( $limits['user'] ) && $id != 0 ) {
+			$keys[wfMemcKey( 'limiter', $action, 'user', $id )] = $limits['user'];
+		}
+		if( $this->isNewbie() ) {
+			if( isset( $limits['newbie'] ) && $id != 0 ) {
+				$keys[wfMemcKey( 'limiter', $action, 'user', $id )] = $limits['newbie'];
+			}
+			if( isset( $limits['ip'] ) ) {
+				$keys["mediawiki:limiter:$action:ip:$ip"] = $limits['ip'];
+			}
+			$matches = array();
+			if( isset( $limits['subnet'] ) && preg_match( '/^(\d+\.\d+\.\d+)\.\d+$/', $ip, $matches ) ) {
+				$subnet = $matches[1];
+				$keys["mediawiki:limiter:$action:subnet:$subnet"] = $limits['subnet'];
+			}
+		}
+
+		$triggered = false;
+		foreach( $keys as $key => $limit ) {
+			list( $max, $period ) = $limit;
+			$summary = "(limit $max in {$period}s)";
+			$count = $wgMemc->get( $key );
+			if( $count ) {
+				if( $count > $max ) {
+					wfDebug( __METHOD__.": tripped! $key at $count $summary\n" );
+					if( $wgRateLimitLog ) {
+						@error_log( wfTimestamp( TS_MW ) . ' ' . wfWikiID() . ': ' . $this->getName() . " tripped $key at $count $summary\n", 3, $wgRateLimitLog );
+					}
+					$triggered = true;
+				} else {
+					wfDebug( __METHOD__.": ok. $key at $count $summary\n" );
+				}
+			} else {
+				wfDebug( __METHOD__.": adding record for $key $summary\n" );
+				$wgMemc->add( $key, 1, intval( $period ) );
+			}
+			$wgMemc->incr( $key );
+		}
+
+		wfProfileOut( __METHOD__ );
+		return $triggered;
+	}
+
+	/**
+	 * Check if user is blocked
+	 * @return bool True if blocked, false otherwise
+	 */
+	function isBlocked( $bFromSlave = true ) { // hacked from false due to horrible probs on site
+		wfDebug( "User::isBlocked: enter\n" );
+		$this->getBlockedStatus( $bFromSlave );
+		return $this->mBlockedby !== 0;
+	}
+
+	/**
+	 * Check if user is blocked from editing a particular article
+	 */
+	function isBlockedFrom( $title, $bFromSlave = false ) {
+		global $wgBlockAllowsUTEdit;
+		wfProfileIn( __METHOD__ );
+		wfDebug( __METHOD__.": enter\n" );
+
+		wfDebug( __METHOD__.": asking isBlocked()\n" );
+		$blocked = $this->isBlocked( $bFromSlave );
+		# If a user's name is suppressed, they cannot make edits anywhere
+		if ( !$this->mHideName && $wgBlockAllowsUTEdit && $title->getText() === $this->getName() &&
+		  $title->getNamespace() == NS_USER_TALK ) {
+			$blocked = false;
+			wfDebug( __METHOD__.": self-talk page, ignoring any blocks\n" );
+		}
+		wfProfileOut( __METHOD__ );
+		return $blocked;
+	}
+
+	/**
+	 * Get name of blocker
+	 * @return string name of blocker
+	 */
+	function blockedBy() {
+		$this->getBlockedStatus();
+		return $this->mBlockedby;
+	}
+
+	/**
+	 * Get blocking reason
+	 * @return string Blocking reason
+	 */
+	function blockedFor() {
+		$this->getBlockedStatus();
+		return $this->mBlockreason;
+	}
+
+	/**
+	 * Get the user ID. Returns 0 if the user is anonymous or nonexistent.
+	 */
+	function getID() { 
+		$this->load();
+		return $this->mId; 
+	}
+
+	/**
+	 * Set the user and reload all fields according to that ID
+	 * @deprecated use User::newFromId()
+	 */
+	function setID( $v ) {
+		$this->mId = $v;
+		$this->clearInstanceCache( 'id' );
+	}
+
+	/**
+	 * Get the user name, or the IP for anons
+	 */
+	function getName() {
+		if ( !$this->mDataLoaded && $this->mFrom == 'name' ) {
+			# Special case optimisation
+			return $this->mName;
+		} else {
+			$this->load();
+			if ( $this->mName === false ) {
+				# Clean up IPs
+				$this->mName = IP::sanitizeIP( wfGetIP() );
+			}
+			return $this->mName;
+		}
+	}
+
+	/**
+	 * Set the user name. 
+	 *
+	 * This does not reload fields from the database according to the given 
+	 * name. Rather, it is used to create a temporary "nonexistent user" for
+	 * later addition to the database. It can also be used to set the IP 
+	 * address for an anonymous user to something other than the current 
+	 * remote IP.
+	 *
+	 * User::newFromName() has rougly the same function, when the named user
+	 * does not exist.
+	 */
+	function setName( $str ) {
+		$this->load();
+		$this->mName = $str;
+	}
+
+	/**
+	 * Return the title dbkey form of the name, for eg user pages.
+	 * @return string
+	 * @public
+	 */
+	function getTitleKey() {
+		return str_replace( ' ', '_', $this->getName() );
+	}
+
+	function getNewtalk() {
+		$this->load();
+
+		# Load the newtalk status if it is unloaded (mNewtalk=-1)
+		if( $this->mNewtalk === -1 ) {
+			$this->mNewtalk = false; # reset talk page status
+
+			# Check memcached separately for anons, who have no
+			# entire User object stored in there.
+			if( !$this->mId ) {
+				global $wgMemc;
+				$key = wfMemcKey( 'newtalk', 'ip', $this->getName() );
+				$newtalk = $wgMemc->get( $key );
+				if( $newtalk != "" ) {
+					$this->mNewtalk = (bool)$newtalk;
+				} else {
+					$this->mNewtalk = $this->checkNewtalk( 'user_ip', $this->getName() );
+					$wgMemc->set( $key, (int)$this->mNewtalk, time() + 1800 );
+				}
+			} else {
+				$this->mNewtalk = $this->checkNewtalk( 'user_id', $this->mId );
+			}
+		}
+
+		return (bool)$this->mNewtalk;
+	}
+
+	/**
+	 * Return the talk page(s) this user has new messages on.
+	 */
+	function getNewMessageLinks() {
+		$talks = array();
+		if (!wfRunHooks('UserRetrieveNewTalks', array(&$this, &$talks)))
+			return $talks;
+
+		if (!$this->getNewtalk())
+			return array();
+		$up = $this->getUserPage();
+		$utp = $up->getTalkPage();
+		return array(array("wiki" => wfWikiID(), "link" => $utp->getLocalURL()));
+	}
+
+		
+	/**
+	 * Perform a user_newtalk check on current slaves; if the memcached data
+	 * is funky we don't want newtalk state to get stuck on save, as that's
+	 * damn annoying.
+	 *
+	 * @param string $field
+	 * @param mixed $id
+	 * @return bool
+	 * @private
+	 */
+	function checkNewtalk( $field, $id ) {
+		$dbr = wfGetDB( DB_SLAVE );
+		$ok = $dbr->selectField( 'user_newtalk', $field,
+			array( $field => $id ), __METHOD__ );
+		return $ok !== false;
+	}
+
+	/**
+	 * Add or update the
+	 * @param string $field
+	 * @param mixed $id
+	 * @private
+	 */
+	function updateNewtalk( $field, $id ) {
+		if( $this->checkNewtalk( $field, $id ) ) {
+			wfDebug( __METHOD__." already set ($field, $id), ignoring\n" );
+			return false;
+		}
+		$dbw = wfGetDB( DB_MASTER );
+		$dbw->insert( 'user_newtalk',
+			array( $field => $id ),
+			__METHOD__,
+			'IGNORE' );
+		wfDebug( __METHOD__.": set on ($field, $id)\n" );
+		return true;
+	}
+
+	/**
+	 * Clear the new messages flag for the given user
+	 * @param string $field
+	 * @param mixed $id
+	 * @private
+	 */
+	function deleteNewtalk( $field, $id ) {
+		if( !$this->checkNewtalk( $field, $id ) ) {
+			wfDebug( __METHOD__.": already gone ($field, $id), ignoring\n" );
+			return false;
+		}
+		$dbw = wfGetDB( DB_MASTER );
+		$dbw->delete( 'user_newtalk',
+			array( $field => $id ),
+			__METHOD__ );
+		wfDebug( __METHOD__.": killed on ($field, $id)\n" );
+		return true;
+	}
+
+	/**
+	 * Update the 'You have new messages!' status.
+	 * @param bool $val
+	 */
+	function setNewtalk( $val ) {
+		if( wfReadOnly() ) {
+			return;
+		}
+
+		$this->load();
+		$this->mNewtalk = $val;
+
+		if( $this->isAnon() ) {
+			$field = 'user_ip';
+			$id = $this->getName();
+		} else {
+			$field = 'user_id';
+			$id = $this->getId();
+		}
+
+		if( $val ) {
+			$changed = $this->updateNewtalk( $field, $id );
+		} else {
+			$changed = $this->deleteNewtalk( $field, $id );
+		}
+
+		if( $changed ) {
+			if( $this->isAnon() ) {
+				// Anons have a separate memcached space, since
+				// user records aren't kept for them.
+				global $wgMemc;
+				$key = wfMemcKey( 'newtalk', 'ip', $val );
+				$wgMemc->set( $key, $val ? 1 : 0 );
+			} else {
+				if( $val ) {
+					// Make sure the user page is watched, so a notification
+					// will be sent out if enabled.
+					$this->addWatch( $this->getTalkPage() );
+				}
+			}
+			$this->invalidateCache();
+		}
+	}
+	
+	/**
+	 * Generate a current or new-future timestamp to be stored in the
+	 * user_touched field when we update things.
+	 */
+	private static function newTouchedTimestamp() {
+		global $wgClockSkewFudge;
+		return wfTimestamp( TS_MW, time() + $wgClockSkewFudge );
+	}
+	
+	/**
+	 * Clear user data from memcached.
+	 * Use after applying fun updates to the database; caller's
+	 * responsibility to update user_touched if appropriate.
+	 *
+	 * Called implicitly from invalidateCache() and saveSettings().
+	 */
+	private function clearSharedCache() {
+		if( $this->mId ) {
+			global $wgMemc;
+			$wgMemc->delete( wfMemcKey( 'user', 'id', $this->mId ) );
+		}
+	}
+
+	/**
+	 * Immediately touch the user data cache for this account.
+	 * Updates user_touched field, and removes account data from memcached
+	 * for reload on the next hit.
+	 */
+	function invalidateCache() {
+		$this->load();
+		if( $this->mId ) {
+			$this->mTouched = self::newTouchedTimestamp();
+			
+			$dbw = wfGetDB( DB_MASTER );
+			$dbw->update( 'user',
+				array( 'user_touched' => $dbw->timestamp( $this->mTouched ) ),
+				array( 'user_id' => $this->mId ),
+				__METHOD__ );
+			
+			$this->clearSharedCache();
+		}
+	}
+
+	function validateCache( $timestamp ) {
+		$this->load();
+		return ($timestamp >= $this->mTouched);
+	}
+
+	/**
+	 * Encrypt a password.
+	 * It can eventuall salt a password @see User::addSalt()
+	 * @param string $p clear Password.
+	 * @return string Encrypted password.
+	 */
+	function encryptPassword( $p ) {
+		$this->load();
+		return wfEncryptPassword( $this->mId, $p );
+	}
+
+	/**
+	 * Set the password and reset the random token
+	 * Calls through to authentication plugin if necessary;
+	 * will have no effect if the auth plugin refuses to
+	 * pass the change through or if the legal password
+	 * checks fail.
+	 *
+	 * As a special case, setting the password to null
+	 * wipes it, so the account cannot be logged in until
+	 * a new password is set, for instance via e-mail.
+	 *
+	 * @param string $str
+	 * @throws PasswordError on failure
+	 */
+	function setPassword( $str ) {
+		global $wgAuth;
+		
+		if( $str !== null ) {
+			if( !$wgAuth->allowPasswordChange() ) {
+				throw new PasswordError( wfMsg( 'password-change-forbidden' ) );
+			}
+		
+			if( !$this->isValidPassword( $str ) ) {
+				global $wgMinimalPasswordLength;
+				throw new PasswordError( wfMsg( 'passwordtooshort',
+					$wgMinimalPasswordLength ) );
+			}
+		}
+
+		if( !$wgAuth->setPassword( $this, $str ) ) {
+			throw new PasswordError( wfMsg( 'externaldberror' ) );
+		}
+		
+		$this->setInternalPassword( $str );
+
+		return true;
+	}
+
+	/**
+	 * Set the password and reset the random token no matter
+	 * what.
+	 *
+	 * @param string $str
+	 */
+	function setInternalPassword( $str ) {
+		$this->load();
+		$this->setToken();
+		
+		if( $str === null ) {
+			// Save an invalid hash...
+			$this->mPassword = '';
+		} else {
+			$this->mPassword = $this->encryptPassword( $str );
+		}
+		$this->mNewpassword = '';
+		$this->mNewpassTime = null;
+	}
+	/**
+	 * Set the random token (used for persistent authentication)
+	 * Called from loadDefaults() among other places.
+	 * @private
+	 */
+	function setToken( $token = false ) {
+		global $wgSecretKey, $wgProxyKey;
+		$this->load();
+		if ( !$token ) {
+			if ( $wgSecretKey ) {
+				$key = $wgSecretKey;
+			} elseif ( $wgProxyKey ) {
+				$key = $wgProxyKey;
+			} else {
+				$key = microtime();
+			}
+			$this->mToken = md5( $key . mt_rand( 0, 0x7fffffff ) . wfWikiID() . $this->mId );
+		} else {
+			$this->mToken = $token;
+		}
+	}
+
+	function setCookiePassword( $str ) {
+		$this->load();
+		$this->mCookiePassword = md5( $str );
+	}
+
+	/**
+	 * Set the password for a password reminder or new account email
+	 * Sets the user_newpass_time field if $throttle is true
+	 */
+	function setNewpassword( $str, $throttle = true ) {
+		$this->load();
+		$this->mNewpassword = $this->encryptPassword( $str );
+		if ( $throttle ) {
+			$this->mNewpassTime = wfTimestampNow();
+		}
+	}
+
+	/**
+	 * Returns true if a password reminder email has already been sent within
+	 * the last $wgPasswordReminderResendTime hours
+	 */
+	function isPasswordReminderThrottled() {
+		global $wgPasswordReminderResendTime;
+		$this->load();
+		if ( !$this->mNewpassTime || !$wgPasswordReminderResendTime ) {
+			return false;
+		}
+		$expiry = wfTimestamp( TS_UNIX, $this->mNewpassTime ) + $wgPasswordReminderResendTime * 3600;
+		return time() < $expiry;
+	}
+	
+	function getEmail() {
+		$this->load();
+		return $this->mEmail;
+	}
+
+	function getEmailAuthenticationTimestamp() {
+		$this->load();
+		return $this->mEmailAuthenticated;
+	}
+
+	function setEmail( $str ) {
+		$this->load();
+		$this->mEmail = $str;
+	}
+
+	function getRealName() {
+		$this->load();
+		return $this->mRealName;
+	}
+
+	function setRealName( $str ) {
+		$this->load();
+		$this->mRealName = $str;
+	}
+
+	/**
+	 * @param string $oname The option to check
+	 * @param string $defaultOverride A default value returned if the option does not exist
+	 * @return string
+	 */
+	function getOption( $oname, $defaultOverride = '' ) {
+		$this->load();
+
+		if ( is_null( $this->mOptions ) ) {
+			if($defaultOverride != '') {
+				return $defaultOverride;
+			}
+			$this->mOptions = User::getDefaultOptions();
+		}
+
+		if ( array_key_exists( $oname, $this->mOptions ) ) {
+			return trim( $this->mOptions[$oname] );
+		} else {
+			return $defaultOverride;
+		}
+	}
+
+	/**
+	 * Get the user's date preference, including some important migration for 
+	 * old user rows.
+	 */
+	function getDatePreference() {
+		if ( is_null( $this->mDatePreference ) ) {
+			global $wgLang;
+			$value = $this->getOption( 'date' );
+			$map = $wgLang->getDatePreferenceMigrationMap();
+			if ( isset( $map[$value] ) ) {
+				$value = $map[$value];
+			}
+			$this->mDatePreference = $value;
+		}
+		return $this->mDatePreference;
+	}
+
+	/**
+	 * @param string $oname The option to check
+	 * @return bool False if the option is not selected, true if it is
+	 */
+	function getBoolOption( $oname ) {
+		return (bool)$this->getOption( $oname );
+	}
+	
+	/**
+	 * Get an option as an integer value from the source string.
+	 * @param string $oname The option to check
+	 * @param int $default Optional value to return if option is unset/blank.
+	 * @return int
+	 */
+	function getIntOption( $oname, $default=0 ) {
+		$val = $this->getOption( $oname );
+		if( $val == '' ) {
+			$val = $default;
+		}
+		return intval( $val );
+	}
+
+	function setOption( $oname, $val ) {
+		$this->load();
+		if ( is_null( $this->mOptions ) ) {
+			$this->mOptions = User::getDefaultOptions();
+		}
+		if ( $oname == 'skin' ) {
+			# Clear cached skin, so the new one displays immediately in Special:Preferences
+			unset( $this->mSkin );
+		}
+		// Filter out any newlines that may have passed through input validation.
+		// Newlines are used to separate items in the options blob.
+		$val = str_replace( "\r\n", "\n", $val );
+		$val = str_replace( "\r", "\n", $val );
+		$val = str_replace( "\n", " ", $val );
+		$this->mOptions[$oname] = $val;
+	}
+
+	function getRights() {
+		if ( is_null( $this->mRights ) ) {
+			$this->mRights = self::getGroupPermissions( $this->getEffectiveGroups() );
+		}
+		return $this->mRights;
+	}
+
+	/**
+	 * Get the list of explicit group memberships this user has.
+	 * The implicit * and user groups are not included.
+	 * @return array of strings
+	 */
+	function getGroups() {
+		$this->load();
+		return $this->mGroups;
+	}
+
+	/**
+	 * Get the list of implicit group memberships this user has.
+	 * This includes all explicit groups, plus 'user' if logged in
+	 * and '*' for all accounts.
+	 * @param boolean $recache Don't use the cache
+	 * @return array of strings
+	 */
+	function getEffectiveGroups( $recache = false ) {
+		if ( $recache || is_null( $this->mEffectiveGroups ) ) {
+			$this->load();
+			$this->mEffectiveGroups = $this->mGroups;
+			$this->mEffectiveGroups[] = '*';
+			if( $this->mId ) {
+				$this->mEffectiveGroups[] = 'user';
+				
+				global $wgAutoConfirmAge, $wgAutoConfirmCount;
+
+				$accountAge = time() - wfTimestampOrNull( TS_UNIX, $this->mRegistration );
+				if( $accountAge >= $wgAutoConfirmAge && $this->getEditCount() >= $wgAutoConfirmCount ) {
+					$this->mEffectiveGroups[] = 'autoconfirmed';
+				}
+				# Implicit group for users whose email addresses are confirmed
+				global $wgEmailAuthentication;
+				if( self::isValidEmailAddr( $this->mEmail ) ) {
+					if( $wgEmailAuthentication ) {
+						if( $this->mEmailAuthenticated )
+							$this->mEffectiveGroups[] = 'emailconfirmed';
+					} else {
+						$this->mEffectiveGroups[] = 'emailconfirmed';
+					}
+				}
+			}
+		}
+		return $this->mEffectiveGroups;
+	}
+	
+	/* Return the edit count for the user. This is where User::edits should have been */
+	function getEditCount() {
+		if ($this->mId) {
+			if ( !isset( $this->mEditCount ) ) {
+				/* Populate the count, if it has not been populated yet */
+				$this->mEditCount = User::edits($this->mId);
+			} 
+			return $this->mEditCount;
+		} else {
+			/* nil */
+			return null;
+		}
+	}
+	
+	/**
+	 * Add the user to the given group.
+	 * This takes immediate effect.
+	 * @param string $group
+	 */
+	function addGroup( $group ) {
+		$this->load();
+		$dbw = wfGetDB( DB_MASTER );
+		if( $this->getId() ) {
+			$dbw->insert( 'user_groups',
+				array(
+					'ug_user'  => $this->getID(),
+					'ug_group' => $group,
+				),
+				'User::addGroup',
+				array( 'IGNORE' ) );
+		}
+
+		$this->mGroups[] = $group;
+		$this->mRights = User::getGroupPermissions( $this->getEffectiveGroups( true ) );
+
+		$this->invalidateCache();
+	}
+
+	/**
+	 * Remove the user from the given group.
+	 * This takes immediate effect.
+	 * @param string $group
+	 */
+	function removeGroup( $group ) {
+		$this->load();
+		$dbw = wfGetDB( DB_MASTER );
+		$dbw->delete( 'user_groups',
+			array(
+				'ug_user'  => $this->getID(),
+				'ug_group' => $group,
+			),
+			'User::removeGroup' );
+
+		$this->mGroups = array_diff( $this->mGroups, array( $group ) );
+		$this->mRights = User::getGroupPermissions( $this->getEffectiveGroups( true ) );
+
+		$this->invalidateCache();
+	}
+
+
+	/**
+	 * A more legible check for non-anonymousness.
+	 * Returns true if the user is not an anonymous visitor.
+	 *
+	 * @return bool
+	 */
+	function isLoggedIn() {
+		return( $this->getID() != 0 );
+	}
+
+	/**
+	 * A more legible check for anonymousness.
+	 * Returns true if the user is an anonymous visitor.
+	 *
+	 * @return bool
+	 */
+	function isAnon() {
+		return !$this->isLoggedIn();
+	}
+
+	/**
+	 * Whether the user is a bot
+	 * @deprecated
+	 */
+	function isBot() {
+		return $this->isAllowed( 'bot' );
+	}
+
+	/**
+	 * Check if user is allowed to access a feature / make an action
+	 * @param string $action Action to be checked
+	 * @return boolean True: action is allowed, False: action should not be allowed
+	 */
+	function isAllowed($action='') {
+		if ( $action === '' )
+			// In the spirit of DWIM
+			return true;
+
+		return in_array( $action, $this->getRights() );
+	}
+
+	/**
+	 * Load a skin if it doesn't exist or return it
+	 * @todo FIXME : need to check the old failback system [AV]
+	 */
+	function &getSkin() {
+		global $wgRequest;
+		if ( ! isset( $this->mSkin ) ) {
+			wfProfileIn( __METHOD__ );
+
+			# get the user skin
+			$userSkin = $this->getOption( 'skin' );
+			$userSkin = $wgRequest->getVal('useskin', $userSkin);
+
+			$this->mSkin =& Skin::newFromKey( $userSkin );
+			wfProfileOut( __METHOD__ );
+		}
+		return $this->mSkin;
+	}
+
+	/**#@+
+	 * @param string $title Article title to look at
+	 */
+
+	/**
+	 * Check watched status of an article
+	 * @return bool True if article is watched
+	 */
+	function isWatched( $title ) {
+		$wl = WatchedItem::fromUserTitle( $this, $title );
+		return $wl->isWatched();
+	}
+
+	/**
+	 * Watch an article
+	 */
+	function addWatch( $title ) {
+		$wl = WatchedItem::fromUserTitle( $this, $title );
+		$wl->addWatch();
+		$this->invalidateCache();
+	}
+
+	/**
+	 * Stop watching an article
+	 */
+	function removeWatch( $title ) {
+		$wl = WatchedItem::fromUserTitle( $this, $title );
+		$wl->removeWatch();
+		$this->invalidateCache();
+	}
+
+	/**
+	 * Clear the user's notification timestamp for the given title.
+	 * If e-notif e-mails are on, they will receive notification mails on
+	 * the next change of the page if it's watched etc.
+	 */
+	function clearNotification( &$title ) {
+		global $wgUser, $wgUseEnotif;
+
+		# Do nothing if the database is locked to writes
+		if( wfReadOnly() ) {
+			return;
+		}
+
+		if ($title->getNamespace() == NS_USER_TALK &&
+			$title->getText() == $this->getName() ) {
+			if (!wfRunHooks('UserClearNewTalkNotification', array(&$this)))
+				return;
+			$this->setNewtalk( false );
+		}
+
+		if( !$wgUseEnotif ) {
+			return;
+		}
+
+		if( $this->isAnon() ) {
+			// Nothing else to do...
+			return;
+		}
+
+		// Only update the timestamp if the page is being watched.
+		// The query to find out if it is watched is cached both in memcached and per-invocation,
+		// and when it does have to be executed, it can be on a slave
+		// If this is the user's newtalk page, we always update the timestamp
+		if ($title->getNamespace() == NS_USER_TALK &&
+			$title->getText() == $wgUser->getName())
+		{
+			$watched = true;
+		} elseif ( $this->getID() == $wgUser->getID() ) {
+			$watched = $title->userIsWatching();
+		} else {
+			$watched = true;
+		}
+
+		// If the page is watched by the user (or may be watched), update the timestamp on any
+		// any matching rows
+		if ( $watched ) {
+			$dbw = wfGetDB( DB_MASTER );
+			$dbw->update( 'watchlist',
+					array( /* SET */
+						'wl_notificationtimestamp' => NULL
+					), array( /* WHERE */
+						'wl_title' => $title->getDBkey(),
+						'wl_namespace' => $title->getNamespace(),
+						'wl_user' => $this->getID()
+					), 'User::clearLastVisited'
+			);
+		}
+	}
+
+	/**#@-*/
+
+	/**
+	 * Resets all of the given user's page-change notification timestamps.
+	 * If e-notif e-mails are on, they will receive notification mails on
+	 * the next change of any watched page.
+	 *
+	 * @param int $currentUser user ID number
+	 * @public
+	 */
+	function clearAllNotifications( $currentUser ) {
+		global $wgUseEnotif;
+		if ( !$wgUseEnotif ) {
+			$this->setNewtalk( false );
+			return;
+		}
+		if( $currentUser != 0 )  {
+
+			$dbw = wfGetDB( DB_MASTER );
+			$dbw->update( 'watchlist',
+				array( /* SET */
+					'wl_notificationtimestamp' => NULL
+				), array( /* WHERE */
+					'wl_user' => $currentUser
+				), 'UserMailer::clearAll'
+			);
+
+		# 	we also need to clear here the "you have new message" notification for the own user_talk page
+		#	This is cleared one page view later in Article::viewUpdates();
+		}
+	}
+
+	/**
+	 * @private
+	 * @return string Encoding options
+	 */
+	function encodeOptions() {
+		$this->load();
+		if ( is_null( $this->mOptions ) ) {
+			$this->mOptions = User::getDefaultOptions();
+		}
+		$a = array();
+		foreach ( $this->mOptions as $oname => $oval ) {
+			array_push( $a, $oname.'='.$oval );
+		}
+		$s = implode( "\n", $a );
+		return $s;
+	}
+
+	/**
+	 * @private
+	 */
+	function decodeOptions( $str ) {
+		$this->mOptions = array();
+		$a = explode( "\n", $str );
+		foreach ( $a as $s ) {
+			$m = array();
+			if ( preg_match( "/^(.[^=]*)=(.*)$/", $s, $m ) ) {
+				$this->mOptions[$m[1]] = $m[2];
+			}
+		}
+	}
+
+	function setCookies() {
+		global $wgCookieExpiration, $wgCookiePath, $wgCookieDomain, $wgCookieSecure, $wgCookiePrefix;
+		$this->load();
+		if ( 0 == $this->mId ) return;
+		$exp = time() + $wgCookieExpiration;
+
+		$_SESSION['wsUserID'] = $this->mId;
+		setcookie( $wgCookiePrefix.'UserID', $this->mId, $exp, $wgCookiePath, $wgCookieDomain, $wgCookieSecure );
+
+		$_SESSION['wsUserName'] = $this->getName();
+		setcookie( $wgCookiePrefix.'UserName', $this->getName(), $exp, $wgCookiePath, $wgCookieDomain, $wgCookieSecure );
+
+		$_SESSION['wsToken'] = $this->mToken;
+		if ( 1 == $this->getOption( 'rememberpassword' ) ) {
+			setcookie( $wgCookiePrefix.'Token', $this->mToken, $exp, $wgCookiePath, $wgCookieDomain, $wgCookieSecure );
+		} else {
+			setcookie( $wgCookiePrefix.'Token', '', time() - 3600 );
+		}
+	}
+
+	/**
+	 * Logout user
+	 * Clears the cookies and session, resets the instance cache
+	 */
+	function logout() {
+		global $wgCookiePath, $wgCookieDomain, $wgCookieSecure, $wgCookiePrefix;
+		$this->clearInstanceCache( 'defaults' );
+
+		$_SESSION['wsUserID'] = 0;
+
+		setcookie( $wgCookiePrefix.'UserID', '', time() - 3600, $wgCookiePath, $wgCookieDomain, $wgCookieSecure );
+		setcookie( $wgCookiePrefix.'Token', '', time() - 3600, $wgCookiePath, $wgCookieDomain, $wgCookieSecure );
+
+		# Remember when user logged out, to prevent seeing cached pages
+		setcookie( $wgCookiePrefix.'LoggedOut', wfTimestampNow(), time() + 86400, $wgCookiePath, $wgCookieDomain, $wgCookieSecure );
+	}
+
+	/**
+	 * Save object settings into database
+	 * @todo Only rarely do all these fields need to be set!
+	 */
+	function saveSettings() {
+		$this->load();
+		if ( wfReadOnly() ) { return; }
+		if ( 0 == $this->mId ) { return; }
+		
+		$this->mTouched = self::newTouchedTimestamp();
+
+		$dbw = wfGetDB( DB_MASTER );
+		$dbw->update( 'user',
+			array( /* SET */
+				'user_name' => $this->mName,
+				'user_password' => $this->mPassword,
+				'user_newpassword' => $this->mNewpassword,
+				'user_newpass_time' => $dbw->timestampOrNull( $this->mNewpassTime ),
+				'user_real_name' => $this->mRealName,
+		 		'user_email' => $this->mEmail,
+		 		'user_email_authenticated' => $dbw->timestampOrNull( $this->mEmailAuthenticated ),
+				'user_options' => $this->encodeOptions(),
+				'user_touched' => $dbw->timestamp($this->mTouched),
+				'user_token' => $this->mToken
+			), array( /* WHERE */
+				'user_id' => $this->mId
+			), __METHOD__
+		);
+		$this->clearSharedCache();
+	}
+
+
+	/**
+	 * Checks if a user with the given name exists, returns the ID
+	 */
+	function idForName() {
+		$s = trim( $this->getName() );
+		if ( 0 == strcmp( '', $s ) ) return 0;
+
+		$dbr = wfGetDB( DB_SLAVE );
+		$id = $dbr->selectField( 'user', 'user_id', array( 'user_name' => $s ), __METHOD__ );
+		if ( $id === false ) {
+			$id = 0;
+		}
+		return $id;
+	}
+
+	/**
+	 * Add a user to the database, return the user object
+	 *
+	 * @param string $name The user's name
+	 * @param array $params Associative array of non-default parameters to save to the database:
+	 *     password             The user's password. Password logins will be disabled if this is omitted.
+	 *     newpassword          A temporary password mailed to the user
+	 *     email                The user's email address
+	 *     email_authenticated  The email authentication timestamp
+	 *     real_name            The user's real name
+	 *     options              An associative array of non-default options
+	 *     token                Random authentication token. Do not set.
+	 *     registration         Registration timestamp. Do not set.
+	 *
+	 * @return User object, or null if the username already exists
+	 */
+	static function createNew( $name, $params = array() ) {
+		$user = new User;
+		$user->load();
+		if ( isset( $params['options'] ) ) {
+			$user->mOptions = $params['options'] + $user->mOptions;
+			unset( $params['options'] );
+		}
+		$dbw = wfGetDB( DB_MASTER );
+		$seqVal = $dbw->nextSequenceValue( 'user_user_id_seq' );
+		$fields = array(
+			'user_id' => $seqVal,
+			'user_name' => $name,
+			'user_password' => $user->mPassword,
+			'user_newpassword' => $user->mNewpassword,
+			'user_newpass_time' => $dbw->timestamp( $user->mNewpassTime ),
+			'user_email' => $user->mEmail,
+			'user_email_authenticated' => $dbw->timestampOrNull( $user->mEmailAuthenticated ),
+			'user_real_name' => $user->mRealName,
+			'user_options' => $user->encodeOptions(),
+			'user_token' => $user->mToken,
+			'user_registration' => $dbw->timestamp( $user->mRegistration ),
+			'user_editcount' => 0,
+		);
+		foreach ( $params as $name => $value ) {
+			$fields["user_$name"] = $value;
+		}
+		$dbw->insert( 'user', $fields, __METHOD__, array( 'IGNORE' ) );
+		if ( $dbw->affectedRows() ) {
+			$newUser = User::newFromId( $dbw->insertId() );
+		} else {
+			$newUser = null;
+		}
+		return $newUser;
+	}
+	
+	/**
+	 * Add an existing user object to the database
+	 */
+	function addToDatabase() {
+		$this->load();
+		$dbw = wfGetDB( DB_MASTER );
+		$seqVal = $dbw->nextSequenceValue( 'user_user_id_seq' );
+		$dbw->insert( 'user',
+			array(
+				'user_id' => $seqVal,
+				'user_name' => $this->mName,
+				'user_password' => $this->mPassword,
+				'user_newpassword' => $this->mNewpassword,
+				'user_newpass_time' => $dbw->timestamp( $this->mNewpassTime ),
+				'user_email' => $this->mEmail,
+				'user_email_authenticated' => $dbw->timestampOrNull( $this->mEmailAuthenticated ),
+				'user_real_name' => $this->mRealName,
+				'user_options' => $this->encodeOptions(),
+				'user_token' => $this->mToken,
+				'user_registration' => $dbw->timestamp( $this->mRegistration ),
+				'user_editcount' => 0,
+			), __METHOD__
+		);
+		$this->mId = $dbw->insertId();
+
+		# Clear instance cache other than user table data, which is already accurate
+		$this->clearInstanceCache();
+	}
+
+	/**
+	 * If the (non-anonymous) user is blocked, this function will block any IP address
+	 * that they successfully log on from.
+	 */
+	function spreadBlock() {
+		wfDebug( __METHOD__."()\n" );
+		$this->load();
+		if ( $this->mId == 0 ) {
+			return;
+		}
+
+		$userblock = Block::newFromDB( '', $this->mId );
+		if ( !$userblock ) {
+			return;
+		}
+
+		$userblock->doAutoblock( wfGetIp() );
+
+	}
+
+	/**
+	 * Generate a string which will be different for any combination of
+	 * user options which would produce different parser output.
+	 * This will be used as part of the hash key for the parser cache,
+	 * so users will the same options can share the same cached data
+	 * safely.
+	 *
+	 * Extensions which require it should install 'PageRenderingHash' hook,
+	 * which will give them a chance to modify this key based on their own
+	 * settings.
+	 *
+	 * @return string
+	 */
+	function getPageRenderingHash() {
+		global $wgContLang, $wgUseDynamicDates, $wgLang;
+		if( $this->mHash ){
+			return $this->mHash;
+		}
+
+		// stubthreshold is only included below for completeness,
+		// it will always be 0 when this function is called by parsercache.
+
+		$confstr =        $this->getOption( 'math' );
+		$confstr .= '!' . $this->getOption( 'stubthreshold' );
+		if ( $wgUseDynamicDates ) {
+			$confstr .= '!' . $this->getDatePreference();
+		}
+		$confstr .= '!' . ($this->getOption( 'numberheadings' ) ? '1' : '');
+		$confstr .= '!' . $wgLang->getCode();
+		$confstr .= '!' . $this->getOption( 'thumbsize' );
+		// add in language specific options, if any
+		$extra = $wgContLang->getExtraHashOptions();
+		$confstr .= $extra;
+
+		// Give a chance for extensions to modify the hash, if they have
+		// extra options or other effects on the parser cache.
+		wfRunHooks( 'PageRenderingHash', array( &$confstr ) );
+
+		$this->mHash = $confstr;
+		return $confstr;
+	}
+
+	function isBlockedFromCreateAccount() {
+		$this->getBlockedStatus();
+		return $this->mBlock && $this->mBlock->mCreateAccount;
+	}
+
+	function isAllowedToCreateAccount() {
+		return $this->isAllowed( 'createaccount' ) && !$this->isBlockedFromCreateAccount();
+	}
+
+	/**
+	 * @deprecated
+	 */
+	function setLoaded( $loaded ) {}
+
+	/**
+	 * Get this user's personal page title.
+	 *
+	 * @return Title
+	 * @public
+	 */
+	function getUserPage() {
+		return Title::makeTitle( NS_USER, $this->getName() );
+	}
+
+	/**
+	 * Get this user's talk page title.
+	 *
+	 * @return Title
+	 * @public
+	 */
+	function getTalkPage() {
+		$title = $this->getUserPage();
+		return $title->getTalkPage();
+	}
+
+	/**
+	 * @static
+	 */
+	function getMaxID() {
+		static $res; // cache
+
+		if ( isset( $res ) )
+			return $res;
+		else {
+			$dbr = wfGetDB( DB_SLAVE );
+			return $res = $dbr->selectField( 'user', 'max(user_id)', false, 'User::getMaxID' );
+		}
+	}
+
+	/**
+	 * Determine whether the user is a newbie. Newbies are either
+	 * anonymous IPs, or the most recently created accounts.
+	 * @return bool True if it is a newbie.
+	 */
+	function isNewbie() {
+		return !$this->isAllowed( 'autoconfirmed' );
+	}
+
+	/**
+	 * Check to see if the given clear-text password is one of the accepted passwords
+	 * @param string $password User password.
+	 * @return bool True if the given password is correct otherwise False.
+	 */
+	function checkPassword( $password ) {
+		global $wgAuth;
+		$this->load();
+
+		// Even though we stop people from creating passwords that
+		// are shorter than this, doesn't mean people wont be able
+		// to. Certain authentication plugins do NOT want to save
+		// domain passwords in a mysql database, so we should
+		// check this (incase $wgAuth->strict() is false).
+		if( !$this->isValidPassword( $password ) ) {
+			return false;
+		}
+
+		if( $wgAuth->authenticate( $this->getName(), $password ) ) {
+			return true;
+		} elseif( $wgAuth->strict() ) {
+			/* Auth plugin doesn't allow local authentication */
+			return false;
+		}
+		$ep = $this->encryptPassword( $password );
+		if ( 0 == strcmp( $ep, $this->mPassword ) ) {
+			return true;
+		} elseif ( function_exists( 'iconv' ) ) {
+			# Some wikis were converted from ISO 8859-1 to UTF-8, the passwords can't be converted
+			# Check for this with iconv
+			$cp1252hash = $this->encryptPassword( iconv( 'UTF-8', 'WINDOWS-1252//TRANSLIT', $password ) );
+			if ( 0 == strcmp( $cp1252hash, $this->mPassword ) ) {
+				return true;
+			}
+		}
+		return false;
+	}
+	
+	/**
+	 * Check if the given clear-text password matches the temporary password
+	 * sent by e-mail for password reset operations.
+	 * @return bool
+	 */
+	function checkTemporaryPassword( $plaintext ) {
+		$hash = $this->encryptPassword( $plaintext );
+		return $hash === $this->mNewpassword;
+	}
+
+	/**
+	 * Initialize (if necessary) and return a session token value
+	 * which can be used in edit forms to show that the user's
+	 * login credentials aren't being hijacked with a foreign form
+	 * submission.
+	 *
+	 * @param mixed $salt - Optional function-specific data for hash.
+	 *                      Use a string or an array of strings.
+	 * @return string
+	 * @public
+	 */
+	function editToken( $salt = '' ) {
+		if( !isset( $_SESSION['wsEditToken'] ) ) {
+			$token = $this->generateToken();
+			$_SESSION['wsEditToken'] = $token;
+		} else {
+			$token = $_SESSION['wsEditToken'];
+		}
+		if( is_array( $salt ) ) {
+			$salt = implode( '|', $salt );
+		}
+		return md5( $token . $salt ) . EDIT_TOKEN_SUFFIX;
+	}
+
+	/**
+	 * Generate a hex-y looking random token for various uses.
+	 * Could be made more cryptographically sure if someone cares.
+	 * @return string
+	 */
+	function generateToken( $salt = '' ) {
+		$token = dechex( mt_rand() ) . dechex( mt_rand() );
+		return md5( $token . $salt );
+	}
+
+	/**
+	 * Check given value against the token value stored in the session.
+	 * A match should confirm that the form was submitted from the
+	 * user's own login session, not a form submission from a third-party
+	 * site.
+	 *
+	 * @param string $val - the input value to compare
+	 * @param string $salt - Optional function-specific data for hash
+	 * @return bool
+	 * @public
+	 */
+	function matchEditToken( $val, $salt = '' ) {
+		global $wgMemc;
+		$sessionToken = $this->editToken( $salt );
+		if ( $val != $sessionToken ) {
+			wfDebug( "User::matchEditToken: broken session data\n" );
+		}
+		return $val == $sessionToken;
+	}
+
+	/**
+	 * Generate a new e-mail confirmation token and send a confirmation
+	 * mail to the user's given address.
+	 *
+	 * @return mixed True on success, a WikiError object on failure.
+	 */
+	function sendConfirmationMail() {
+		global $wgContLang;
+		$expiration = null; // gets passed-by-ref and defined in next line.
+		$url = $this->confirmationTokenUrl( $expiration );
+		return $this->sendMail( wfMsg( 'confirmemail_subject' ),
+			wfMsg( 'confirmemail_body',
+				wfGetIP(),
+				$this->getName(),
+				$url,
+				$wgContLang->timeanddate( $expiration, false ) ) );
+	}
+
+	/**
+	 * Send an e-mail to this user's account. Does not check for
+	 * confirmed status or validity.
+	 *
+	 * @param string $subject
+	 * @param string $body
+	 * @param strong $from Optional from address; default $wgPasswordSender will be used otherwise.
+	 * @return mixed True on success, a WikiError object on failure.
+	 */
+	function sendMail( $subject, $body, $from = null ) {
+		if( is_null( $from ) ) {
+			global $wgPasswordSender;
+			$from = $wgPasswordSender;
+		}
+
+		require_once( 'UserMailer.php' );
+		$to = new MailAddress( $this );
+		$sender = new MailAddress( $from );
+		$error = userMailer( $to, $sender, $subject, $body );
+
+		if( $error == '' ) {
+			return true;
+		} else {
+			return new WikiError( $error );
+		}
+	}
+
+	/**
+	 * Generate, store, and return a new e-mail confirmation code.
+	 * A hash (unsalted since it's used as a key) is stored.
+	 * @param &$expiration mixed output: accepts the expiration time
+	 * @return string
+	 * @private
+	 */
+	function confirmationToken( &$expiration ) {
+		$now = time();
+		$expires = $now + 7 * 24 * 60 * 60;
+		$expiration = wfTimestamp( TS_MW, $expires );
+
+		$token = $this->generateToken( $this->mId . $this->mEmail . $expires );
+		$hash = md5( $token );
+
+		$dbw = wfGetDB( DB_MASTER );
+		$dbw->update( 'user',
+			array( 'user_email_token'         => $hash,
+			       'user_email_token_expires' => $dbw->timestamp( $expires ) ),
+			array( 'user_id'                  => $this->mId ),
+			__METHOD__ );
+
+		return $token;
+	}
+
+	/**
+	 * Generate and store a new e-mail confirmation token, and return
+	 * the URL the user can use to confirm.
+	 * @param &$expiration mixed output: accepts the expiration time
+	 * @return string
+	 * @private
+	 */
+	function confirmationTokenUrl( &$expiration ) {
+		$token = $this->confirmationToken( $expiration );
+		$title = SpecialPage::getTitleFor( 'Confirmemail', $token );
+		return $title->getFullUrl();
+	}
+
+	/**
+	 * Mark the e-mail address confirmed and save.
+	 */
+	function confirmEmail() {
+		$this->load();
+		$this->mEmailAuthenticated = wfTimestampNow();
+		$this->saveSettings();
+		return true;
+	}
+
+	/**
+	 * Is this user allowed to send e-mails within limits of current
+	 * site configuration?
+	 * @return bool
+	 */
+	function canSendEmail() {
+		return $this->isEmailConfirmed();
+	}
+
+	/**
+	 * Is this user allowed to receive e-mails within limits of current
+	 * site configuration?
+	 * @return bool
+	 */
+	function canReceiveEmail() {
+		return $this->canSendEmail() && !$this->getOption( 'disablemail' );
+	}
+
+	/**
+	 * Is this user's e-mail address valid-looking and confirmed within
+	 * limits of the current site configuration?
+	 *
+	 * If $wgEmailAuthentication is on, this may require the user to have
+	 * confirmed their address by returning a code or using a password
+	 * sent to the address from the wiki.
+	 *
+	 * @return bool
+	 */
+	function isEmailConfirmed() {
+		global $wgEmailAuthentication;
+		$this->load();
+		$confirmed = true;
+		if( wfRunHooks( 'EmailConfirmed', array( &$this, &$confirmed ) ) ) {
+			if( $this->isAnon() )
+				return false;
+			if( !self::isValidEmailAddr( $this->mEmail ) )
+				return false;
+			if( $wgEmailAuthentication && !$this->getEmailAuthenticationTimestamp() )
+				return false;
+			return true;
+		} else {
+			return $confirmed;
+		}
+	}
+	
+	/**
+	 * Return true if there is an outstanding request for e-mail confirmation.
+	 * @return bool
+	 */
+	function isEmailConfirmationPending() {
+		global $wgEmailAuthentication;
+		return $wgEmailAuthentication &&
+			!$this->isEmailConfirmed() &&
+			$this->mEmailToken &&
+			$this->mEmailTokenExpires > wfTimestamp();
+	}
+
+	/**
+	 * @param array $groups list of groups
+	 * @return array list of permission key names for given groups combined
+	 * @static
+	 */
+	static function getGroupPermissions( $groups ) {
+		global $wgGroupPermissions;
+		$rights = array();
+		foreach( $groups as $group ) {
+			if( isset( $wgGroupPermissions[$group] ) ) {
+				$rights = array_merge( $rights,
+					array_keys( array_filter( $wgGroupPermissions[$group] ) ) );
+			}
+		}
+		return $rights;
+	}
+
+	/**
+	 * @param string $group key name
+	 * @return string localized descriptive name for group, if provided
+	 * @static
+	 */
+	static function getGroupName( $group ) {
+		MessageCache::loadAllMessages();
+		$key = "group-$group";
+		$name = wfMsg( $key );
+		return $name == '' || wfEmptyMsg( $key, $name )
+			? $group
+			: $name;
+	}
+
+	/**
+	 * @param string $group key name
+	 * @return string localized descriptive name for member of a group, if provided
+	 * @static
+	 */
+	static function getGroupMember( $group ) {
+		MessageCache::loadAllMessages();
+		$key = "group-$group-member";
+		$name = wfMsg( $key );
+		return $name == '' || wfEmptyMsg( $key, $name )
+			? $group
+			: $name;
+	}
+
+	/**
+	 * Return the set of defined explicit groups.
+	 * The *, 'user', 'autoconfirmed' and 'emailconfirmed'
+	 * groups are not included, as they are defined
+	 * automatically, not in the database.
+	 * @return array
+	 * @static
+	 */
+	static function getAllGroups() {
+		global $wgGroupPermissions;
+		return array_diff(
+			array_keys( $wgGroupPermissions ),
+			array( '*', 'user', 'autoconfirmed', 'emailconfirmed' ) );
+	}
+
+	/**
+	 * Get the title of a page describing a particular group
+	 *
+	 * @param $group Name of the group
+	 * @return mixed
+	 */
+	static function getGroupPage( $group ) {
+		MessageCache::loadAllMessages();
+		$page = wfMsgForContent( 'grouppage-' . $group );
+		if( !wfEmptyMsg( 'grouppage-' . $group, $page ) ) {
+			$title = Title::newFromText( $page );
+			if( is_object( $title ) )
+				return $title;
+		}
+		return false;
+	}
+
+	/**
+	 * Create a link to the group in HTML, if available
+	 *
+	 * @param $group Name of the group
+	 * @param $text The text of the link
+	 * @return mixed
+	 */
+	static function makeGroupLinkHTML( $group, $text = '' ) {
+		if( $text == '' ) {
+			$text = self::getGroupName( $group );
+		}
+		$title = self::getGroupPage( $group );
+		if( $title ) {
+			global $wgUser;
+			$sk = $wgUser->getSkin();
+			return $sk->makeLinkObj( $title, htmlspecialchars( $text ) );
+		} else {
+			return $text;
+		}
+	}
+
+	/**
+	 * Create a link to the group in Wikitext, if available
+	 *
+	 * @param $group Name of the group
+	 * @param $text The text of the link (by default, the name of the group)
+	 * @return mixed
+	 */
+	static function makeGroupLinkWiki( $group, $text = '' ) {
+		if( $text == '' ) {
+			$text = self::getGroupName( $group );
+		}
+		$title = self::getGroupPage( $group );
+		if( $title ) {
+			$page = $title->getPrefixedText();
+			return "[[$page|$text]]";
+		} else {
+			return $text;
+		}
+	}
+	
+	/**
+	 * Increment the user's edit-count field.
+	 * Will have no effect for anonymous users.
+	 */
+	function incEditCount() {
+		if( !$this->isAnon() ) {
+			$dbw = wfGetDB( DB_MASTER );
+			$dbw->update( 'user',
+				array( 'user_editcount=user_editcount+1' ),
+				array( 'user_id' => $this->getId() ),
+				__METHOD__ );
+			
+			// Lazy initialization check...
+			if( $dbw->affectedRows() == 0 ) {
+				// Pull from a slave to be less cruel to servers
+				// Accuracy isn't the point anyway here
+				$dbr = wfGetDB( DB_SLAVE );
+				$count = $dbr->selectField( 'revision',
+					'COUNT(rev_user)',
+					array( 'rev_user' => $this->getId() ),
+					__METHOD__ );
+				
+				// Now here's a goddamn hack...
+				if( $dbr !== $dbw ) {
+					// If we actually have a slave server, the count is
+					// at least one behind because the current transaction
+					// has not been committed and replicated.
+					$count++;
+				} else {
+					// But if DB_SLAVE is selecting the master, then the
+					// count we just read includes the revision that was
+					// just added in the working transaction.
+				}
+				
+				$dbw->update( 'user',
+					array( 'user_editcount' => $count ),
+					array( 'user_id' => $this->getId() ),
+					__METHOD__ );
+			}
+		}
+		// edit count in user cache too
+		$this->invalidateCache();
+	}
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/UserMailer.php
===================================================================
--- /MediaWiki/branches/1.11/includes/UserMailer.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/UserMailer.php	(revision 1280)
@@ -0,0 +1,443 @@
+<?php
+/**
+ * UserMailer.php
+ *  Copyright (C) 2004 Thomas Gries <mail@tgries.de>
+ * http://www.mediawiki.org/
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @author <brion@pobox.com>
+ * @author <mail@tgries.de>
+ *
+ */
+
+/**
+ * Converts a string into a valid RFC 822 "phrase", such as is used for the sender name
+ */
+function wfRFC822Phrase( $phrase ) {
+	$phrase = strtr( $phrase, array( "\r" => '', "\n" => '', '"' => '' ) );
+	return '"' . $phrase . '"';
+}
+
+/**
+ * Stores a single person's name and email address.
+ * These are passed in via the constructor, and will be returned in SMTP
+ * header format when requested.
+ */
+class MailAddress {
+	/**
+	 * @param mixed $address String with an email address, or a User object
+	 * @param string $name Human-readable name if a string address is given
+	 */
+	function __construct( $address, $name=null ) {
+		if( is_object( $address ) && $address instanceof User ) {
+			$this->address = $address->getEmail();
+			$this->name = $address->getName();
+		} else {
+			$this->address = strval( $address );
+			$this->name = strval( $name );
+		}
+	}
+
+	/**
+	 * Return formatted and quoted address to insert into SMTP headers
+	 * @return string
+	 */
+	function toString() {
+		# PHP's mail() implementation under Windows is somewhat shite, and
+		# can't handle "Joe Bloggs <joe@bloggs.com>" format email addresses,
+		# so don't bother generating them
+		if( $this->name != '' && !wfIsWindows() ) {
+			$quoted = wfQuotedPrintable( $this->name );
+			if( strpos( $quoted, '.' ) !== false ) {
+				$quoted = '"' . $quoted . '"';
+			}
+			return "$quoted <{$this->address}>";
+		} else {
+			return $this->address;
+		}
+	}
+}
+
+/**
+ * This function will perform a direct (authenticated) login to
+ * a SMTP Server to use for mail relaying if 'wgSMTP' specifies an
+ * array of parameters. It requires PEAR:Mail to do that.
+ * Otherwise it just uses the standard PHP 'mail' function.
+ *
+ * @param $to MailAddress: recipient's email
+ * @param $from MailAddress: sender's email
+ * @param $subject String: email's subject.
+ * @param $body String: email's text.
+ * @param $replyto String: optional reply-to email (default: null).
+ */
+function userMailer( $to, $from, $subject, $body, $replyto=null ) {
+	global $wgUser, $wgSMTP, $wgOutputEncoding, $wgErrorString;
+
+	if (is_array( $wgSMTP )) {
+		require_once( 'Mail.php' );
+
+		$timestamp = time();
+		$dest = $to->address;
+
+		$headers['From'] = $from->toString();
+		$headers['To'] = $to->toString();
+		if ( $replyto ) {
+			$headers['Reply-To'] = $replyto->toString();
+		}
+		$headers['Subject'] = wfQuotedPrintable( $subject );
+		$headers['Date'] = date( 'r' );
+		$headers['MIME-Version'] = '1.0';
+		$headers['Content-type'] = 'text/plain; charset='.$wgOutputEncoding;
+		$headers['Content-transfer-encoding'] = '8bit';
+		$headers['Message-ID'] = "<{$timestamp}" . $wgUser->getName() . '@' . $wgSMTP['IDHost'] . '>'; // FIXME
+		$headers['X-Mailer'] = 'MediaWiki mailer';
+
+		// Create the mail object using the Mail::factory method
+		$mail_object =& Mail::factory('smtp', $wgSMTP);
+		if( PEAR::isError( $mail_object ) ) {
+			wfDebug( "PEAR::Mail factory failed: " . $mail_object->getMessage() . "\n" );
+			return $mail_object->getMessage();
+		}
+
+		wfDebug( "Sending mail via PEAR::Mail to $dest\n" );
+		$mailResult =& $mail_object->send($dest, $headers, $body);
+
+		# Based on the result return an error string,
+		if ($mailResult === true) {
+			return '';
+		} elseif (is_object($mailResult)) {
+			wfDebug( "PEAR::Mail failed: " . $mailResult->getMessage() . "\n" );
+			return $mailResult->getMessage();
+		} else {
+			wfDebug( "PEAR::Mail failed, unknown error result\n" );
+			return 'Mail object return unknown error.';
+		}
+	} else	{
+		# In the following $headers = expression we removed "Reply-To: {$from}\r\n" , because it is treated differently
+		# (fifth parameter of the PHP mail function, see some lines below)
+
+		# Line endings need to be different on Unix and Windows due to 
+		# the bug described at http://trac.wordpress.org/ticket/2603
+		if ( wfIsWindows() ) {
+			$body = str_replace( "\n", "\r\n", $body );
+			$endl = "\r\n";
+		} else {
+			$endl = "\n";
+		}
+		$headers =
+			"MIME-Version: 1.0$endl" .
+			"Content-type: text/plain; charset={$wgOutputEncoding}$endl" .
+			"Content-Transfer-Encoding: 8bit$endl" .
+			"X-Mailer: MediaWiki mailer$endl".
+			'From: ' . $from->toString();
+		if ($replyto) {
+			$headers .= "{$endl}Reply-To: " . $replyto->toString();
+		}
+
+		$dest = $to->toString();
+
+		$wgErrorString = '';
+		set_error_handler( 'mailErrorHandler' );
+		wfDebug( "Sending mail via internal mail() function to $dest\n" );
+		mail( $dest, wfQuotedPrintable( $subject ), $body, $headers );
+		restore_error_handler();
+
+		if ( $wgErrorString ) {
+			wfDebug( "Error sending mail: $wgErrorString\n" );
+		}
+		return $wgErrorString;
+	}
+}
+
+/**
+ * Get the mail error message in global $wgErrorString
+ *
+ * @param $code Integer: error number
+ * @param $string String: error message
+ */
+function mailErrorHandler( $code, $string ) {
+	global $wgErrorString;
+	$wgErrorString = preg_replace( '/^mail\(\)(\s*\[.*?\])?: /', '', $string );
+}
+
+
+/**
+ * This module processes the email notifications when the current page is
+ * changed. It looks up the table watchlist to find out which users are watching
+ * that page.
+ *
+ * The current implementation sends independent emails to each watching user for
+ * the following reason:
+ *
+ * - Each watching user will be notified about the page edit time expressed in
+ * his/her local time (UTC is shown additionally). To achieve this, we need to
+ * find the individual timeoffset of each watching user from the preferences..
+ *
+ * Suggested improvement to slack down the number of sent emails: We could think
+ * of sending out bulk mails (bcc:user1,user2...) for all these users having the
+ * same timeoffset in their preferences.
+ *
+ * Visit the documentation pages under http://meta.wikipedia.com/Enotif
+ *
+ *
+ */
+class EmailNotification {
+	/**@{{
+	 * @private
+	 */
+	var $to, $subject, $body, $replyto, $from;
+	var $user, $title, $timestamp, $summary, $minorEdit, $oldid;
+
+	/**@}}*/
+
+	/**
+	 * @todo document
+	 * @param $title Title object
+	 * @param $timestamp
+	 * @param $summary
+	 * @param $minorEdit
+	 * @param $oldid (default: false)
+	 */
+	function notifyOnPageChange(&$title, $timestamp, $summary, $minorEdit, $oldid=false) {
+
+		# we use $wgEmergencyContact as sender's address
+		global $wgUser, $wgEnotifWatchlist;
+		global $wgEnotifMinorEdits, $wgEnotifUserTalk, $wgShowUpdatedMarker;
+
+		$fname = 'UserMailer::notifyOnPageChange';
+		wfProfileIn( $fname );
+
+		# The following code is only run, if several conditions are met:
+		# 1. EmailNotification for pages (other than user_talk pages) must be enabled
+		# 2. minor edits (changes) are only regarded if the global flag indicates so
+
+		$isUserTalkPage = ($title->getNamespace() == NS_USER_TALK);
+		$enotifusertalkpage = ($isUserTalkPage && $wgEnotifUserTalk);
+		$enotifwatchlistpage = $wgEnotifWatchlist;
+
+		$this->title =& $title;
+		$this->timestamp = $timestamp;
+		$this->summary = $summary;
+		$this->minorEdit = $minorEdit;
+		$this->oldid = $oldid;
+		$this->composeCommonMailtext();
+
+		if ( (!$minorEdit || $wgEnotifMinorEdits) ) {
+			if( $wgEnotifWatchlist ) {
+				// Send updates to watchers other than the current editor
+				$userCondition = 'wl_user <> ' . intval( $wgUser->getId() );
+			} elseif( $wgEnotifUserTalk && $title->getNamespace() == NS_USER_TALK ) {
+				$targetUser = User::newFromName( $title->getText() );
+				if( is_null( $targetUser ) ) {
+					wfDebug( "$fname: user-talk-only mode; no such user\n" );
+					$userCondition = false;
+				} elseif( $targetUser->getId() == $wgUser->getId() ) {
+					wfDebug( "$fname: user-talk-only mode; editor is target user\n" );
+					$userCondition = false;
+				} else {
+					// Don't notify anyone other than the owner of the talk page
+					$userCondition = 'wl_user = ' . intval( $targetUser->getId() );
+				}
+			} else {
+				// Notifications disabled
+				$userCondition = false;
+			}
+			if( $userCondition ) {
+				$dbr = wfGetDB( DB_MASTER );
+
+				$res = $dbr->select( 'watchlist', array( 'wl_user' ),
+					array(
+						'wl_title' => $title->getDBkey(),
+						'wl_namespace' => $title->getNamespace(),
+						$userCondition,
+						'wl_notificationtimestamp IS NULL',
+					), $fname );
+
+				# if anyone is watching ... set up the email message text which is
+				# common for all receipients ...
+				if ( $dbr->numRows( $res ) > 0 ) {
+
+					$watchingUser = new User();
+
+					# ... now do for all watching users ... if the options fit
+					for ($i = 1; $i <= $dbr->numRows( $res ); $i++) {
+
+						$wuser = $dbr->fetchObject( $res );
+						$watchingUser->setID($wuser->wl_user);
+						
+						if ( ( $enotifwatchlistpage && $watchingUser->getOption('enotifwatchlistpages') ) ||
+							( $enotifusertalkpage
+								&& $watchingUser->getOption('enotifusertalkpages')
+								&& $title->equals( $watchingUser->getTalkPage() ) )
+						&& (!$minorEdit || ($wgEnotifMinorEdits && $watchingUser->getOption('enotifminoredits') ) )
+						&& ($watchingUser->isEmailConfirmed() ) ) {
+							# ... adjust remaining text and page edit time placeholders
+							# which needs to be personalized for each user
+							$this->composeAndSendPersonalisedMail( $watchingUser );
+
+						} # if the watching user has an email address in the preferences
+					}
+				}
+			} # if anyone is watching
+		} # if $wgEnotifWatchlist = true
+
+		global $wgUsersNotifedOnAllChanges;
+		foreach ( $wgUsersNotifedOnAllChanges as $name ) {
+			$user = User::newFromName( $name );
+			$this->composeAndSendPersonalisedMail( $user );
+		}
+
+		if ( $wgShowUpdatedMarker || $wgEnotifWatchlist ) {
+			# mark the changed watch-listed page with a timestamp, so that the page is
+			# listed with an "updated since your last visit" icon in the watch list, ...
+			$dbw = wfGetDB( DB_MASTER );
+			$success = $dbw->update( 'watchlist',
+				array( /* SET */
+					'wl_notificationtimestamp' => $dbw->timestamp($timestamp)
+				), array( /* WHERE */
+					'wl_title' => $title->getDBkey(),
+					'wl_namespace' => $title->getNamespace(),
+				), 'UserMailer::NotifyOnChange'
+			);
+			# FIXME what do we do on failure ?
+		}
+		wfProfileOut( $fname );
+	} # function NotifyOnChange
+
+	/**
+	 * @private
+	 */
+	function composeCommonMailtext() {
+		global $wgUser, $wgEmergencyContact, $wgNoReplyAddress;
+		global $wgEnotifFromEditor, $wgEnotifRevealEditorAddress;
+
+		$summary = ($this->summary == '') ? ' - ' : $this->summary;
+		$medit   = ($this->minorEdit) ? wfMsg( 'minoredit' ) : '';
+
+		# You as the WikiAdmin and Sysops can make use of plenty of
+		# named variables when composing your notification emails while
+		# simply editing the Meta pages
+
+		$subject = wfMsgForContent( 'enotif_subject' );
+		$body    = wfMsgForContent( 'enotif_body' );
+		$from    = ''; /* fail safe */
+		$replyto = ''; /* fail safe */
+		$keys    = array();
+
+		# regarding the use of oldid as an indicator for the last visited version, see also
+		# http://bugzilla.wikipeda.org/show_bug.cgi?id=603 "Delete + undelete cycle doesn't preserve old_id"
+		# However, in the case of a new page which is already watched, we have no previous version to compare
+		if( $this->oldid ) {
+			$difflink = $this->title->getFullUrl( 'diff=0&oldid=' . $this->oldid );
+			$keys['$NEWPAGE'] = wfMsgForContent( 'enotif_lastvisited', $difflink );
+			$keys['$OLDID']   = $this->oldid;
+			$keys['$CHANGEDORCREATED'] = wfMsgForContent( 'changed' );
+		} else {
+			$keys['$NEWPAGE'] = wfMsgForContent( 'enotif_newpagetext' );
+			# clear $OLDID placeholder in the message template
+			$keys['$OLDID']   = '';
+			$keys['$CHANGEDORCREATED'] = wfMsgForContent( 'created' );
+		}
+
+		$body = strtr( $body, $keys );
+		$pagetitle = $this->title->getPrefixedText();
+		$keys['$PAGETITLE']          = $pagetitle;
+		$keys['$PAGETITLE_URL']      = $this->title->getFullUrl();
+
+		$keys['$PAGEMINOREDIT']      = $medit;
+		$keys['$PAGESUMMARY']        = $summary;
+
+		$subject = strtr( $subject, $keys );
+
+		# Reveal the page editor's address as REPLY-TO address only if
+		# the user has not opted-out and the option is enabled at the
+		# global configuration level.
+		$name    = $wgUser->getName();
+		$adminAddress = new MailAddress( $wgEmergencyContact, 'WikiAdmin' );
+		$editorAddress = new MailAddress( $wgUser );
+		if( $wgEnotifRevealEditorAddress
+		    && ( $wgUser->getEmail() != '' )
+		    && $wgUser->getOption( 'enotifrevealaddr' ) ) {
+			if( $wgEnotifFromEditor ) {
+				$from    = $editorAddress;
+			} else {
+				$from    = $adminAddress;
+				$replyto = $editorAddress;
+			}
+		} else {
+			$from    = $adminAddress;
+			$replyto = new MailAddress( $wgNoReplyAddress );
+		}
+
+		if( $wgUser->isIP( $name ) ) {
+			#real anon (user:xxx.xxx.xxx.xxx)
+			$subject = str_replace('$PAGEEDITOR', 'anonymous user '. $name, $subject);
+			$keys['$PAGEEDITOR']       = 'anonymous user ' . $name;
+			$keys['$PAGEEDITOR_EMAIL'] = wfMsgForContent( 'noemailtitle' );
+		} else {
+			$subject = str_replace('$PAGEEDITOR', $name, $subject);
+			$keys['$PAGEEDITOR']          = $name;
+			$emailPage = SpecialPage::getSafeTitleFor( 'Emailuser', $name );
+			$keys['$PAGEEDITOR_EMAIL'] = $emailPage->getFullUrl();
+		}
+		$userPage = $wgUser->getUserPage();
+		$keys['$PAGEEDITOR_WIKI'] = $userPage->getFullUrl();
+		$body = strtr( $body, $keys );
+		$body = wordwrap( $body, 72 );
+
+		# now save this as the constant user-independent part of the message
+		$this->from    = $from;
+		$this->replyto = $replyto;
+		$this->subject = $subject;
+		$this->body    = $body;
+	}
+
+
+
+	/**
+	 * Does the per-user customizations to a notification e-mail (name,
+	 * timestamp in proper timezone, etc) and sends it out.
+	 * Returns true if the mail was sent successfully.
+	 *
+	 * @param User $watchingUser
+	 * @param object $mail
+	 * @return bool
+	 * @private
+	 */
+	function composeAndSendPersonalisedMail( $watchingUser ) {
+		global $wgLang;
+		// From the PHP manual:
+		//     Note:  The to parameter cannot be an address in the form of "Something <someone@example.com>".
+		//     The mail command will not parse this properly while talking with the MTA.
+		$to = new MailAddress( $watchingUser );
+		$body = str_replace( '$WATCHINGUSERNAME', $watchingUser->getName() , $this->body );
+
+		$timecorrection = $watchingUser->getOption( 'timecorrection' );
+
+		# $PAGEEDITDATE is the time and date of the page change
+		# expressed in terms of individual local time of the notification
+		# recipient, i.e. watching user
+		$body = str_replace('$PAGEEDITDATE',
+			$wgLang->timeanddate( $this->timestamp, true, false, $timecorrection ),
+			$body);
+
+		$error = userMailer( $to, $this->from, $this->subject, $body, $this->replyto );
+		return ($error == '');
+	}
+
+} # end of class EmailNotification
+?>
Index: /MediaWiki/branches/1.11/includes/Utf8Case.php
===================================================================
--- /MediaWiki/branches/1.11/includes/Utf8Case.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/Utf8Case.php	(revision 1280)
@@ -0,0 +1,1505 @@
+<?php
+/**
+ * Simple 1:1 upper/lowercase switching arrays for utf-8 text
+ * Won't get context-sensitive things yet
+ *
+ * Hack for bugs in ucfirst() and company
+ *
+ * These are pulled from memcached if possible, as this is faster than filling
+ * up a big array manually.
+ * @addtogroup Language
+ */
+
+/*
+ * Translation array to get upper case character
+ */
+$wikiUpperChars = array(
+	"a" => "A",
+	"b" => "B",
+	"c" => "C",
+	"d" => "D",
+	"e" => "E",
+	"f" => "F",
+	"g" => "G",
+	"h" => "H",
+	"i" => "I",
+	"j" => "J",
+	"k" => "K",
+	"l" => "L",
+	"m" => "M",
+	"n" => "N",
+	"o" => "O",
+	"p" => "P",
+	"q" => "Q",
+	"r" => "R",
+	"s" => "S",
+	"t" => "T",
+	"u" => "U",
+	"v" => "V",
+	"w" => "W",
+	"x" => "X",
+	"y" => "Y",
+	"z" => "Z",
+	"\xc2\xb5" => "\xce\x9c",
+	"\xc3\xa0" => "\xc3\x80",
+	"\xc3\xa1" => "\xc3\x81",
+	"\xc3\xa2" => "\xc3\x82",
+	"\xc3\xa3" => "\xc3\x83",
+	"\xc3\xa4" => "\xc3\x84",
+	"\xc3\xa5" => "\xc3\x85",
+	"\xc3\xa6" => "\xc3\x86",
+	"\xc3\xa7" => "\xc3\x87",
+	"\xc3\xa8" => "\xc3\x88",
+	"\xc3\xa9" => "\xc3\x89",
+	"\xc3\xaa" => "\xc3\x8a",
+	"\xc3\xab" => "\xc3\x8b",
+	"\xc3\xac" => "\xc3\x8c",
+	"\xc3\xad" => "\xc3\x8d",
+	"\xc3\xae" => "\xc3\x8e",
+	"\xc3\xaf" => "\xc3\x8f",
+	"\xc3\xb0" => "\xc3\x90",
+	"\xc3\xb1" => "\xc3\x91",
+	"\xc3\xb2" => "\xc3\x92",
+	"\xc3\xb3" => "\xc3\x93",
+	"\xc3\xb4" => "\xc3\x94",
+	"\xc3\xb5" => "\xc3\x95",
+	"\xc3\xb6" => "\xc3\x96",
+	"\xc3\xb8" => "\xc3\x98",
+	"\xc3\xb9" => "\xc3\x99",
+	"\xc3\xba" => "\xc3\x9a",
+	"\xc3\xbb" => "\xc3\x9b",
+	"\xc3\xbc" => "\xc3\x9c",
+	"\xc3\xbd" => "\xc3\x9d",
+	"\xc3\xbe" => "\xc3\x9e",
+	"\xc3\xbf" => "\xc5\xb8",
+	"\xc4\x81" => "\xc4\x80",
+	"\xc4\x83" => "\xc4\x82",
+	"\xc4\x85" => "\xc4\x84",
+	"\xc4\x87" => "\xc4\x86",
+	"\xc4\x89" => "\xc4\x88",
+	"\xc4\x8b" => "\xc4\x8a",
+	"\xc4\x8d" => "\xc4\x8c",
+	"\xc4\x8f" => "\xc4\x8e",
+	"\xc4\x91" => "\xc4\x90",
+	"\xc4\x93" => "\xc4\x92",
+	"\xc4\x95" => "\xc4\x94",
+	"\xc4\x97" => "\xc4\x96",
+	"\xc4\x99" => "\xc4\x98",
+	"\xc4\x9b" => "\xc4\x9a",
+	"\xc4\x9d" => "\xc4\x9c",
+	"\xc4\x9f" => "\xc4\x9e",
+	"\xc4\xa1" => "\xc4\xa0",
+	"\xc4\xa3" => "\xc4\xa2",
+	"\xc4\xa5" => "\xc4\xa4",
+	"\xc4\xa7" => "\xc4\xa6",
+	"\xc4\xa9" => "\xc4\xa8",
+	"\xc4\xab" => "\xc4\xaa",
+	"\xc4\xad" => "\xc4\xac",
+	"\xc4\xaf" => "\xc4\xae",
+	"\xc4\xb1" => "I",
+	"\xc4\xb3" => "\xc4\xb2",
+	"\xc4\xb5" => "\xc4\xb4",
+	"\xc4\xb7" => "\xc4\xb6",
+	"\xc4\xba" => "\xc4\xb9",
+	"\xc4\xbc" => "\xc4\xbb",
+	"\xc4\xbe" => "\xc4\xbd",
+	"\xc5\x80" => "\xc4\xbf",
+	"\xc5\x82" => "\xc5\x81",
+	"\xc5\x84" => "\xc5\x83",
+	"\xc5\x86" => "\xc5\x85",
+	"\xc5\x88" => "\xc5\x87",
+	"\xc5\x8b" => "\xc5\x8a",
+	"\xc5\x8d" => "\xc5\x8c",
+	"\xc5\x8f" => "\xc5\x8e",
+	"\xc5\x91" => "\xc5\x90",
+	"\xc5\x93" => "\xc5\x92",
+	"\xc5\x95" => "\xc5\x94",
+	"\xc5\x97" => "\xc5\x96",
+	"\xc5\x99" => "\xc5\x98",
+	"\xc5\x9b" => "\xc5\x9a",
+	"\xc5\x9d" => "\xc5\x9c",
+	"\xc5\x9f" => "\xc5\x9e",
+	"\xc5\xa1" => "\xc5\xa0",
+	"\xc5\xa3" => "\xc5\xa2",
+	"\xc5\xa5" => "\xc5\xa4",
+	"\xc5\xa7" => "\xc5\xa6",
+	"\xc5\xa9" => "\xc5\xa8",
+	"\xc5\xab" => "\xc5\xaa",
+	"\xc5\xad" => "\xc5\xac",
+	"\xc5\xaf" => "\xc5\xae",
+	"\xc5\xb1" => "\xc5\xb0",
+	"\xc5\xb3" => "\xc5\xb2",
+	"\xc5\xb5" => "\xc5\xb4",
+	"\xc5\xb7" => "\xc5\xb6",
+	"\xc5\xba" => "\xc5\xb9",
+	"\xc5\xbc" => "\xc5\xbb",
+	"\xc5\xbe" => "\xc5\xbd",
+	"\xc5\xbf" => "S",
+	"\xc6\x83" => "\xc6\x82",
+	"\xc6\x85" => "\xc6\x84",
+	"\xc6\x88" => "\xc6\x87",
+	"\xc6\x8c" => "\xc6\x8b",
+	"\xc6\x92" => "\xc6\x91",
+	"\xc6\x95" => "\xc7\xb6",
+	"\xc6\x99" => "\xc6\x98",
+	"\xc6\xa1" => "\xc6\xa0",
+	"\xc6\xa3" => "\xc6\xa2",
+	"\xc6\xa5" => "\xc6\xa4",
+	"\xc6\xa8" => "\xc6\xa7",
+	"\xc6\xad" => "\xc6\xac",
+	"\xc6\xb0" => "\xc6\xaf",
+	"\xc6\xb4" => "\xc6\xb3",
+	"\xc6\xb6" => "\xc6\xb5",
+	"\xc6\xb9" => "\xc6\xb8",
+	"\xc6\xbd" => "\xc6\xbc",
+	"\xc6\xbf" => "\xc7\xb7",
+	"\xc7\x85" => "\xc7\x84",
+	"\xc7\x86" => "\xc7\x84",
+	"\xc7\x88" => "\xc7\x87",
+	"\xc7\x89" => "\xc7\x87",
+	"\xc7\x8b" => "\xc7\x8a",
+	"\xc7\x8c" => "\xc7\x8a",
+	"\xc7\x8e" => "\xc7\x8d",
+	"\xc7\x90" => "\xc7\x8f",
+	"\xc7\x92" => "\xc7\x91",
+	"\xc7\x94" => "\xc7\x93",
+	"\xc7\x96" => "\xc7\x95",
+	"\xc7\x98" => "\xc7\x97",
+	"\xc7\x9a" => "\xc7\x99",
+	"\xc7\x9c" => "\xc7\x9b",
+	"\xc7\x9d" => "\xc6\x8e",
+	"\xc7\x9f" => "\xc7\x9e",
+	"\xc7\xa1" => "\xc7\xa0",
+	"\xc7\xa3" => "\xc7\xa2",
+	"\xc7\xa5" => "\xc7\xa4",
+	"\xc7\xa7" => "\xc7\xa6",
+	"\xc7\xa9" => "\xc7\xa8",
+	"\xc7\xab" => "\xc7\xaa",
+	"\xc7\xad" => "\xc7\xac",
+	"\xc7\xaf" => "\xc7\xae",
+	"\xc7\xb2" => "\xc7\xb1",
+	"\xc7\xb3" => "\xc7\xb1",
+	"\xc7\xb5" => "\xc7\xb4",
+	"\xc7\xb9" => "\xc7\xb8",
+	"\xc7\xbb" => "\xc7\xba",
+	"\xc7\xbd" => "\xc7\xbc",
+	"\xc7\xbf" => "\xc7\xbe",
+	"\xc8\x81" => "\xc8\x80",
+	"\xc8\x83" => "\xc8\x82",
+	"\xc8\x85" => "\xc8\x84",
+	"\xc8\x87" => "\xc8\x86",
+	"\xc8\x89" => "\xc8\x88",
+	"\xc8\x8b" => "\xc8\x8a",
+	"\xc8\x8d" => "\xc8\x8c",
+	"\xc8\x8f" => "\xc8\x8e",
+	"\xc8\x91" => "\xc8\x90",
+	"\xc8\x93" => "\xc8\x92",
+	"\xc8\x95" => "\xc8\x94",
+	"\xc8\x97" => "\xc8\x96",
+	"\xc8\x99" => "\xc8\x98",
+	"\xc8\x9b" => "\xc8\x9a",
+	"\xc8\x9d" => "\xc8\x9c",
+	"\xc8\x9f" => "\xc8\x9e",
+	"\xc8\xa3" => "\xc8\xa2",
+	"\xc8\xa5" => "\xc8\xa4",
+	"\xc8\xa7" => "\xc8\xa6",
+	"\xc8\xa9" => "\xc8\xa8",
+	"\xc8\xab" => "\xc8\xaa",
+	"\xc8\xad" => "\xc8\xac",
+	"\xc8\xaf" => "\xc8\xae",
+	"\xc8\xb1" => "\xc8\xb0",
+	"\xc8\xb3" => "\xc8\xb2",
+	"\xc9\x93" => "\xc6\x81",
+	"\xc9\x94" => "\xc6\x86",
+	"\xc9\x96" => "\xc6\x89",
+	"\xc9\x97" => "\xc6\x8a",
+	"\xc9\x99" => "\xc6\x8f",
+	"\xc9\x9b" => "\xc6\x90",
+	"\xc9\xa0" => "\xc6\x93",
+	"\xc9\xa3" => "\xc6\x94",
+	"\xc9\xa8" => "\xc6\x97",
+	"\xc9\xa9" => "\xc6\x96",
+	"\xc9\xaf" => "\xc6\x9c",
+	"\xc9\xb2" => "\xc6\x9d",
+	"\xc9\xb5" => "\xc6\x9f",
+	"\xca\x80" => "\xc6\xa6",
+	"\xca\x83" => "\xc6\xa9",
+	"\xca\x88" => "\xc6\xae",
+	"\xca\x8a" => "\xc6\xb1",
+	"\xca\x8b" => "\xc6\xb2",
+	"\xca\x92" => "\xc6\xb7",
+	"\xcd\x85" => "\xce\x99",
+	"\xce\xac" => "\xce\x86",
+	"\xce\xad" => "\xce\x88",
+	"\xce\xae" => "\xce\x89",
+	"\xce\xaf" => "\xce\x8a",
+	"\xce\xb1" => "\xce\x91",
+	"\xce\xb2" => "\xce\x92",
+	"\xce\xb3" => "\xce\x93",
+	"\xce\xb4" => "\xce\x94",
+	"\xce\xb5" => "\xce\x95",
+	"\xce\xb6" => "\xce\x96",
+	"\xce\xb7" => "\xce\x97",
+	"\xce\xb8" => "\xce\x98",
+	"\xce\xb9" => "\xce\x99",
+	"\xce\xba" => "\xce\x9a",
+	"\xce\xbb" => "\xce\x9b",
+	"\xce\xbc" => "\xce\x9c",
+	"\xce\xbd" => "\xce\x9d",
+	"\xce\xbe" => "\xce\x9e",
+	"\xce\xbf" => "\xce\x9f",
+	"\xcf\x80" => "\xce\xa0",
+	"\xcf\x81" => "\xce\xa1",
+	"\xcf\x82" => "\xce\xa3",
+	"\xcf\x83" => "\xce\xa3",
+	"\xcf\x84" => "\xce\xa4",
+	"\xcf\x85" => "\xce\xa5",
+	"\xcf\x86" => "\xce\xa6",
+	"\xcf\x87" => "\xce\xa7",
+	"\xcf\x88" => "\xce\xa8",
+	"\xcf\x89" => "\xce\xa9",
+	"\xcf\x8a" => "\xce\xaa",
+	"\xcf\x8b" => "\xce\xab",
+	"\xcf\x8c" => "\xce\x8c",
+	"\xcf\x8d" => "\xce\x8e",
+	"\xcf\x8e" => "\xce\x8f",
+	"\xcf\x90" => "\xce\x92",
+	"\xcf\x91" => "\xce\x98",
+	"\xcf\x95" => "\xce\xa6",
+	"\xcf\x96" => "\xce\xa0",
+	"\xcf\x9b" => "\xcf\x9a",
+	"\xcf\x9d" => "\xcf\x9c",
+	"\xcf\x9f" => "\xcf\x9e",
+	"\xcf\xa1" => "\xcf\xa0",
+	"\xcf\xa3" => "\xcf\xa2",
+	"\xcf\xa5" => "\xcf\xa4",
+	"\xcf\xa7" => "\xcf\xa6",
+	"\xcf\xa9" => "\xcf\xa8",
+	"\xcf\xab" => "\xcf\xaa",
+	"\xcf\xad" => "\xcf\xac",
+	"\xcf\xaf" => "\xcf\xae",
+	"\xcf\xb0" => "\xce\x9a",
+	"\xcf\xb1" => "\xce\xa1",
+	"\xcf\xb2" => "\xce\xa3",
+	"\xcf\xb5" => "\xce\x95",
+	"\xd0\xb0" => "\xd0\x90",
+	"\xd0\xb1" => "\xd0\x91",
+	"\xd0\xb2" => "\xd0\x92",
+	"\xd0\xb3" => "\xd0\x93",
+	"\xd0\xb4" => "\xd0\x94",
+	"\xd0\xb5" => "\xd0\x95",
+	"\xd0\xb6" => "\xd0\x96",
+	"\xd0\xb7" => "\xd0\x97",
+	"\xd0\xb8" => "\xd0\x98",
+	"\xd0\xb9" => "\xd0\x99",
+	"\xd0\xba" => "\xd0\x9a",
+	"\xd0\xbb" => "\xd0\x9b",
+	"\xd0\xbc" => "\xd0\x9c",
+	"\xd0\xbd" => "\xd0\x9d",
+	"\xd0\xbe" => "\xd0\x9e",
+	"\xd0\xbf" => "\xd0\x9f",
+	"\xd1\x80" => "\xd0\xa0",
+	"\xd1\x81" => "\xd0\xa1",
+	"\xd1\x82" => "\xd0\xa2",
+	"\xd1\x83" => "\xd0\xa3",
+	"\xd1\x84" => "\xd0\xa4",
+	"\xd1\x85" => "\xd0\xa5",
+	"\xd1\x86" => "\xd0\xa6",
+	"\xd1\x87" => "\xd0\xa7",
+	"\xd1\x88" => "\xd0\xa8",
+	"\xd1\x89" => "\xd0\xa9",
+	"\xd1\x8a" => "\xd0\xaa",
+	"\xd1\x8b" => "\xd0\xab",
+	"\xd1\x8c" => "\xd0\xac",
+	"\xd1\x8d" => "\xd0\xad",
+	"\xd1\x8e" => "\xd0\xae",
+	"\xd1\x8f" => "\xd0\xaf",
+	"\xd1\x90" => "\xd0\x80",
+	"\xd1\x91" => "\xd0\x81",
+	"\xd1\x92" => "\xd0\x82",
+	"\xd1\x93" => "\xd0\x83",
+	"\xd1\x94" => "\xd0\x84",
+	"\xd1\x95" => "\xd0\x85",
+	"\xd1\x96" => "\xd0\x86",
+	"\xd1\x97" => "\xd0\x87",
+	"\xd1\x98" => "\xd0\x88",
+	"\xd1\x99" => "\xd0\x89",
+	"\xd1\x9a" => "\xd0\x8a",
+	"\xd1\x9b" => "\xd0\x8b",
+	"\xd1\x9c" => "\xd0\x8c",
+	"\xd1\x9d" => "\xd0\x8d",
+	"\xd1\x9e" => "\xd0\x8e",
+	"\xd1\x9f" => "\xd0\x8f",
+	"\xd1\xa1" => "\xd1\xa0",
+	"\xd1\xa3" => "\xd1\xa2",
+	"\xd1\xa5" => "\xd1\xa4",
+	"\xd1\xa7" => "\xd1\xa6",
+	"\xd1\xa9" => "\xd1\xa8",
+	"\xd1\xab" => "\xd1\xaa",
+	"\xd1\xad" => "\xd1\xac",
+	"\xd1\xaf" => "\xd1\xae",
+	"\xd1\xb1" => "\xd1\xb0",
+	"\xd1\xb3" => "\xd1\xb2",
+	"\xd1\xb5" => "\xd1\xb4",
+	"\xd1\xb7" => "\xd1\xb6",
+	"\xd1\xb9" => "\xd1\xb8",
+	"\xd1\xbb" => "\xd1\xba",
+	"\xd1\xbd" => "\xd1\xbc",
+	"\xd1\xbf" => "\xd1\xbe",
+	"\xd2\x81" => "\xd2\x80",
+	"\xd2\x8d" => "\xd2\x8c",
+	"\xd2\x8f" => "\xd2\x8e",
+	"\xd2\x91" => "\xd2\x90",
+	"\xd2\x93" => "\xd2\x92",
+	"\xd2\x95" => "\xd2\x94",
+	"\xd2\x97" => "\xd2\x96",
+	"\xd2\x99" => "\xd2\x98",
+	"\xd2\x9b" => "\xd2\x9a",
+	"\xd2\x9d" => "\xd2\x9c",
+	"\xd2\x9f" => "\xd2\x9e",
+	"\xd2\xa1" => "\xd2\xa0",
+	"\xd2\xa3" => "\xd2\xa2",
+	"\xd2\xa5" => "\xd2\xa4",
+	"\xd2\xa7" => "\xd2\xa6",
+	"\xd2\xa9" => "\xd2\xa8",
+	"\xd2\xab" => "\xd2\xaa",
+	"\xd2\xad" => "\xd2\xac",
+	"\xd2\xaf" => "\xd2\xae",
+	"\xd2\xb1" => "\xd2\xb0",
+	"\xd2\xb3" => "\xd2\xb2",
+	"\xd2\xb5" => "\xd2\xb4",
+	"\xd2\xb7" => "\xd2\xb6",
+	"\xd2\xb9" => "\xd2\xb8",
+	"\xd2\xbb" => "\xd2\xba",
+	"\xd2\xbd" => "\xd2\xbc",
+	"\xd2\xbf" => "\xd2\xbe",
+	"\xd3\x82" => "\xd3\x81",
+	"\xd3\x84" => "\xd3\x83",
+	"\xd3\x88" => "\xd3\x87",
+	"\xd3\x8c" => "\xd3\x8b",
+	"\xd3\x91" => "\xd3\x90",
+	"\xd3\x93" => "\xd3\x92",
+	"\xd3\x95" => "\xd3\x94",
+	"\xd3\x97" => "\xd3\x96",
+	"\xd3\x99" => "\xd3\x98",
+	"\xd3\x9b" => "\xd3\x9a",
+	"\xd3\x9d" => "\xd3\x9c",
+	"\xd3\x9f" => "\xd3\x9e",
+	"\xd3\xa1" => "\xd3\xa0",
+	"\xd3\xa3" => "\xd3\xa2",
+	"\xd3\xa5" => "\xd3\xa4",
+	"\xd3\xa7" => "\xd3\xa6",
+	"\xd3\xa9" => "\xd3\xa8",
+	"\xd3\xab" => "\xd3\xaa",
+	"\xd3\xad" => "\xd3\xac",
+	"\xd3\xaf" => "\xd3\xae",
+	"\xd3\xb1" => "\xd3\xb0",
+	"\xd3\xb3" => "\xd3\xb2",
+	"\xd3\xb5" => "\xd3\xb4",
+	"\xd3\xb9" => "\xd3\xb8",
+	"\xd5\xa1" => "\xd4\xb1",
+	"\xd5\xa2" => "\xd4\xb2",
+	"\xd5\xa3" => "\xd4\xb3",
+	"\xd5\xa4" => "\xd4\xb4",
+	"\xd5\xa5" => "\xd4\xb5",
+	"\xd5\xa6" => "\xd4\xb6",
+	"\xd5\xa7" => "\xd4\xb7",
+	"\xd5\xa8" => "\xd4\xb8",
+	"\xd5\xa9" => "\xd4\xb9",
+	"\xd5\xaa" => "\xd4\xba",
+	"\xd5\xab" => "\xd4\xbb",
+	"\xd5\xac" => "\xd4\xbc",
+	"\xd5\xad" => "\xd4\xbd",
+	"\xd5\xae" => "\xd4\xbe",
+	"\xd5\xaf" => "\xd4\xbf",
+	"\xd5\xb0" => "\xd5\x80",
+	"\xd5\xb1" => "\xd5\x81",
+	"\xd5\xb2" => "\xd5\x82",
+	"\xd5\xb3" => "\xd5\x83",
+	"\xd5\xb4" => "\xd5\x84",
+	"\xd5\xb5" => "\xd5\x85",
+	"\xd5\xb6" => "\xd5\x86",
+	"\xd5\xb7" => "\xd5\x87",
+	"\xd5\xb8" => "\xd5\x88",
+	"\xd5\xb9" => "\xd5\x89",
+	"\xd5\xba" => "\xd5\x8a",
+	"\xd5\xbb" => "\xd5\x8b",
+	"\xd5\xbc" => "\xd5\x8c",
+	"\xd5\xbd" => "\xd5\x8d",
+	"\xd5\xbe" => "\xd5\x8e",
+	"\xd5\xbf" => "\xd5\x8f",
+	"\xd6\x80" => "\xd5\x90",
+	"\xd6\x81" => "\xd5\x91",
+	"\xd6\x82" => "\xd5\x92",
+	"\xd6\x83" => "\xd5\x93",
+	"\xd6\x84" => "\xd5\x94",
+	"\xd6\x85" => "\xd5\x95",
+	"\xd6\x86" => "\xd5\x96",
+	"\xe1\xb8\x81" => "\xe1\xb8\x80",
+	"\xe1\xb8\x83" => "\xe1\xb8\x82",
+	"\xe1\xb8\x85" => "\xe1\xb8\x84",
+	"\xe1\xb8\x87" => "\xe1\xb8\x86",
+	"\xe1\xb8\x89" => "\xe1\xb8\x88",
+	"\xe1\xb8\x8b" => "\xe1\xb8\x8a",
+	"\xe1\xb8\x8d" => "\xe1\xb8\x8c",
+	"\xe1\xb8\x8f" => "\xe1\xb8\x8e",
+	"\xe1\xb8\x91" => "\xe1\xb8\x90",
+	"\xe1\xb8\x93" => "\xe1\xb8\x92",
+	"\xe1\xb8\x95" => "\xe1\xb8\x94",
+	"\xe1\xb8\x97" => "\xe1\xb8\x96",
+	"\xe1\xb8\x99" => "\xe1\xb8\x98",
+	"\xe1\xb8\x9b" => "\xe1\xb8\x9a",
+	"\xe1\xb8\x9d" => "\xe1\xb8\x9c",
+	"\xe1\xb8\x9f" => "\xe1\xb8\x9e",
+	"\xe1\xb8\xa1" => "\xe1\xb8\xa0",
+	"\xe1\xb8\xa3" => "\xe1\xb8\xa2",
+	"\xe1\xb8\xa5" => "\xe1\xb8\xa4",
+	"\xe1\xb8\xa7" => "\xe1\xb8\xa6",
+	"\xe1\xb8\xa9" => "\xe1\xb8\xa8",
+	"\xe1\xb8\xab" => "\xe1\xb8\xaa",
+	"\xe1\xb8\xad" => "\xe1\xb8\xac",
+	"\xe1\xb8\xaf" => "\xe1\xb8\xae",
+	"\xe1\xb8\xb1" => "\xe1\xb8\xb0",
+	"\xe1\xb8\xb3" => "\xe1\xb8\xb2",
+	"\xe1\xb8\xb5" => "\xe1\xb8\xb4",
+	"\xe1\xb8\xb7" => "\xe1\xb8\xb6",
+	"\xe1\xb8\xb9" => "\xe1\xb8\xb8",
+	"\xe1\xb8\xbb" => "\xe1\xb8\xba",
+	"\xe1\xb8\xbd" => "\xe1\xb8\xbc",
+	"\xe1\xb8\xbf" => "\xe1\xb8\xbe",
+	"\xe1\xb9\x81" => "\xe1\xb9\x80",
+	"\xe1\xb9\x83" => "\xe1\xb9\x82",
+	"\xe1\xb9\x85" => "\xe1\xb9\x84",
+	"\xe1\xb9\x87" => "\xe1\xb9\x86",
+	"\xe1\xb9\x89" => "\xe1\xb9\x88",
+	"\xe1\xb9\x8b" => "\xe1\xb9\x8a",
+	"\xe1\xb9\x8d" => "\xe1\xb9\x8c",
+	"\xe1\xb9\x8f" => "\xe1\xb9\x8e",
+	"\xe1\xb9\x91" => "\xe1\xb9\x90",
+	"\xe1\xb9\x93" => "\xe1\xb9\x92",
+	"\xe1\xb9\x95" => "\xe1\xb9\x94",
+	"\xe1\xb9\x97" => "\xe1\xb9\x96",
+	"\xe1\xb9\x99" => "\xe1\xb9\x98",
+	"\xe1\xb9\x9b" => "\xe1\xb9\x9a",
+	"\xe1\xb9\x9d" => "\xe1\xb9\x9c",
+	"\xe1\xb9\x9f" => "\xe1\xb9\x9e",
+	"\xe1\xb9\xa1" => "\xe1\xb9\xa0",
+	"\xe1\xb9\xa3" => "\xe1\xb9\xa2",
+	"\xe1\xb9\xa5" => "\xe1\xb9\xa4",
+	"\xe1\xb9\xa7" => "\xe1\xb9\xa6",
+	"\xe1\xb9\xa9" => "\xe1\xb9\xa8",
+	"\xe1\xb9\xab" => "\xe1\xb9\xaa",
+	"\xe1\xb9\xad" => "\xe1\xb9\xac",
+	"\xe1\xb9\xaf" => "\xe1\xb9\xae",
+	"\xe1\xb9\xb1" => "\xe1\xb9\xb0",
+	"\xe1\xb9\xb3" => "\xe1\xb9\xb2",
+	"\xe1\xb9\xb5" => "\xe1\xb9\xb4",
+	"\xe1\xb9\xb7" => "\xe1\xb9\xb6",
+	"\xe1\xb9\xb9" => "\xe1\xb9\xb8",
+	"\xe1\xb9\xbb" => "\xe1\xb9\xba",
+	"\xe1\xb9\xbd" => "\xe1\xb9\xbc",
+	"\xe1\xb9\xbf" => "\xe1\xb9\xbe",
+	"\xe1\xba\x81" => "\xe1\xba\x80",
+	"\xe1\xba\x83" => "\xe1\xba\x82",
+	"\xe1\xba\x85" => "\xe1\xba\x84",
+	"\xe1\xba\x87" => "\xe1\xba\x86",
+	"\xe1\xba\x89" => "\xe1\xba\x88",
+	"\xe1\xba\x8b" => "\xe1\xba\x8a",
+	"\xe1\xba\x8d" => "\xe1\xba\x8c",
+	"\xe1\xba\x8f" => "\xe1\xba\x8e",
+	"\xe1\xba\x91" => "\xe1\xba\x90",
+	"\xe1\xba\x93" => "\xe1\xba\x92",
+	"\xe1\xba\x95" => "\xe1\xba\x94",
+	"\xe1\xba\x9b" => "\xe1\xb9\xa0",
+	"\xe1\xba\xa1" => "\xe1\xba\xa0",
+	"\xe1\xba\xa3" => "\xe1\xba\xa2",
+	"\xe1\xba\xa5" => "\xe1\xba\xa4",
+	"\xe1\xba\xa7" => "\xe1\xba\xa6",
+	"\xe1\xba\xa9" => "\xe1\xba\xa8",
+	"\xe1\xba\xab" => "\xe1\xba\xaa",
+	"\xe1\xba\xad" => "\xe1\xba\xac",
+	"\xe1\xba\xaf" => "\xe1\xba\xae",
+	"\xe1\xba\xb1" => "\xe1\xba\xb0",
+	"\xe1\xba\xb3" => "\xe1\xba\xb2",
+	"\xe1\xba\xb5" => "\xe1\xba\xb4",
+	"\xe1\xba\xb7" => "\xe1\xba\xb6",
+	"\xe1\xba\xb9" => "\xe1\xba\xb8",
+	"\xe1\xba\xbb" => "\xe1\xba\xba",
+	"\xe1\xba\xbd" => "\xe1\xba\xbc",
+	"\xe1\xba\xbf" => "\xe1\xba\xbe",
+	"\xe1\xbb\x81" => "\xe1\xbb\x80",
+	"\xe1\xbb\x83" => "\xe1\xbb\x82",
+	"\xe1\xbb\x85" => "\xe1\xbb\x84",
+	"\xe1\xbb\x87" => "\xe1\xbb\x86",
+	"\xe1\xbb\x89" => "\xe1\xbb\x88",
+	"\xe1\xbb\x8b" => "\xe1\xbb\x8a",
+	"\xe1\xbb\x8d" => "\xe1\xbb\x8c",
+	"\xe1\xbb\x8f" => "\xe1\xbb\x8e",
+	"\xe1\xbb\x91" => "\xe1\xbb\x90",
+	"\xe1\xbb\x93" => "\xe1\xbb\x92",
+	"\xe1\xbb\x95" => "\xe1\xbb\x94",
+	"\xe1\xbb\x97" => "\xe1\xbb\x96",
+	"\xe1\xbb\x99" => "\xe1\xbb\x98",
+	"\xe1\xbb\x9b" => "\xe1\xbb\x9a",
+	"\xe1\xbb\x9d" => "\xe1\xbb\x9c",
+	"\xe1\xbb\x9f" => "\xe1\xbb\x9e",
+	"\xe1\xbb\xa1" => "\xe1\xbb\xa0",
+	"\xe1\xbb\xa3" => "\xe1\xbb\xa2",
+	"\xe1\xbb\xa5" => "\xe1\xbb\xa4",
+	"\xe1\xbb\xa7" => "\xe1\xbb\xa6",
+	"\xe1\xbb\xa9" => "\xe1\xbb\xa8",
+	"\xe1\xbb\xab" => "\xe1\xbb\xaa",
+	"\xe1\xbb\xad" => "\xe1\xbb\xac",
+	"\xe1\xbb\xaf" => "\xe1\xbb\xae",
+	"\xe1\xbb\xb1" => "\xe1\xbb\xb0",
+	"\xe1\xbb\xb3" => "\xe1\xbb\xb2",
+	"\xe1\xbb\xb5" => "\xe1\xbb\xb4",
+	"\xe1\xbb\xb7" => "\xe1\xbb\xb6",
+	"\xe1\xbb\xb9" => "\xe1\xbb\xb8",
+	"\xe1\xbc\x80" => "\xe1\xbc\x88",
+	"\xe1\xbc\x81" => "\xe1\xbc\x89",
+	"\xe1\xbc\x82" => "\xe1\xbc\x8a",
+	"\xe1\xbc\x83" => "\xe1\xbc\x8b",
+	"\xe1\xbc\x84" => "\xe1\xbc\x8c",
+	"\xe1\xbc\x85" => "\xe1\xbc\x8d",
+	"\xe1\xbc\x86" => "\xe1\xbc\x8e",
+	"\xe1\xbc\x87" => "\xe1\xbc\x8f",
+	"\xe1\xbc\x90" => "\xe1\xbc\x98",
+	"\xe1\xbc\x91" => "\xe1\xbc\x99",
+	"\xe1\xbc\x92" => "\xe1\xbc\x9a",
+	"\xe1\xbc\x93" => "\xe1\xbc\x9b",
+	"\xe1\xbc\x94" => "\xe1\xbc\x9c",
+	"\xe1\xbc\x95" => "\xe1\xbc\x9d",
+	"\xe1\xbc\xa0" => "\xe1\xbc\xa8",
+	"\xe1\xbc\xa1" => "\xe1\xbc\xa9",
+	"\xe1\xbc\xa2" => "\xe1\xbc\xaa",
+	"\xe1\xbc\xa3" => "\xe1\xbc\xab",
+	"\xe1\xbc\xa4" => "\xe1\xbc\xac",
+	"\xe1\xbc\xa5" => "\xe1\xbc\xad",
+	"\xe1\xbc\xa6" => "\xe1\xbc\xae",
+	"\xe1\xbc\xa7" => "\xe1\xbc\xaf",
+	"\xe1\xbc\xb0" => "\xe1\xbc\xb8",
+	"\xe1\xbc\xb1" => "\xe1\xbc\xb9",
+	"\xe1\xbc\xb2" => "\xe1\xbc\xba",
+	"\xe1\xbc\xb3" => "\xe1\xbc\xbb",
+	"\xe1\xbc\xb4" => "\xe1\xbc\xbc",
+	"\xe1\xbc\xb5" => "\xe1\xbc\xbd",
+	"\xe1\xbc\xb6" => "\xe1\xbc\xbe",
+	"\xe1\xbc\xb7" => "\xe1\xbc\xbf",
+	"\xe1\xbd\x80" => "\xe1\xbd\x88",
+	"\xe1\xbd\x81" => "\xe1\xbd\x89",
+	"\xe1\xbd\x82" => "\xe1\xbd\x8a",
+	"\xe1\xbd\x83" => "\xe1\xbd\x8b",
+	"\xe1\xbd\x84" => "\xe1\xbd\x8c",
+	"\xe1\xbd\x85" => "\xe1\xbd\x8d",
+	"\xe1\xbd\x91" => "\xe1\xbd\x99",
+	"\xe1\xbd\x93" => "\xe1\xbd\x9b",
+	"\xe1\xbd\x95" => "\xe1\xbd\x9d",
+	"\xe1\xbd\x97" => "\xe1\xbd\x9f",
+	"\xe1\xbd\xa0" => "\xe1\xbd\xa8",
+	"\xe1\xbd\xa1" => "\xe1\xbd\xa9",
+	"\xe1\xbd\xa2" => "\xe1\xbd\xaa",
+	"\xe1\xbd\xa3" => "\xe1\xbd\xab",
+	"\xe1\xbd\xa4" => "\xe1\xbd\xac",
+	"\xe1\xbd\xa5" => "\xe1\xbd\xad",
+	"\xe1\xbd\xa6" => "\xe1\xbd\xae",
+	"\xe1\xbd\xa7" => "\xe1\xbd\xaf",
+	"\xe1\xbd\xb0" => "\xe1\xbe\xba",
+	"\xe1\xbd\xb1" => "\xe1\xbe\xbb",
+	"\xe1\xbd\xb2" => "\xe1\xbf\x88",
+	"\xe1\xbd\xb3" => "\xe1\xbf\x89",
+	"\xe1\xbd\xb4" => "\xe1\xbf\x8a",
+	"\xe1\xbd\xb5" => "\xe1\xbf\x8b",
+	"\xe1\xbd\xb6" => "\xe1\xbf\x9a",
+	"\xe1\xbd\xb7" => "\xe1\xbf\x9b",
+	"\xe1\xbd\xb8" => "\xe1\xbf\xb8",
+	"\xe1\xbd\xb9" => "\xe1\xbf\xb9",
+	"\xe1\xbd\xba" => "\xe1\xbf\xaa",
+	"\xe1\xbd\xbb" => "\xe1\xbf\xab",
+	"\xe1\xbd\xbc" => "\xe1\xbf\xba",
+	"\xe1\xbd\xbd" => "\xe1\xbf\xbb",
+	"\xe1\xbe\x80" => "\xe1\xbe\x88",
+	"\xe1\xbe\x81" => "\xe1\xbe\x89",
+	"\xe1\xbe\x82" => "\xe1\xbe\x8a",
+	"\xe1\xbe\x83" => "\xe1\xbe\x8b",
+	"\xe1\xbe\x84" => "\xe1\xbe\x8c",
+	"\xe1\xbe\x85" => "\xe1\xbe\x8d",
+	"\xe1\xbe\x86" => "\xe1\xbe\x8e",
+	"\xe1\xbe\x87" => "\xe1\xbe\x8f",
+	"\xe1\xbe\x90" => "\xe1\xbe\x98",
+	"\xe1\xbe\x91" => "\xe1\xbe\x99",
+	"\xe1\xbe\x92" => "\xe1\xbe\x9a",
+	"\xe1\xbe\x93" => "\xe1\xbe\x9b",
+	"\xe1\xbe\x94" => "\xe1\xbe\x9c",
+	"\xe1\xbe\x95" => "\xe1\xbe\x9d",
+	"\xe1\xbe\x96" => "\xe1\xbe\x9e",
+	"\xe1\xbe\x97" => "\xe1\xbe\x9f",
+	"\xe1\xbe\xa0" => "\xe1\xbe\xa8",
+	"\xe1\xbe\xa1" => "\xe1\xbe\xa9",
+	"\xe1\xbe\xa2" => "\xe1\xbe\xaa",
+	"\xe1\xbe\xa3" => "\xe1\xbe\xab",
+	"\xe1\xbe\xa4" => "\xe1\xbe\xac",
+	"\xe1\xbe\xa5" => "\xe1\xbe\xad",
+	"\xe1\xbe\xa6" => "\xe1\xbe\xae",
+	"\xe1\xbe\xa7" => "\xe1\xbe\xaf",
+	"\xe1\xbe\xb0" => "\xe1\xbe\xb8",
+	"\xe1\xbe\xb1" => "\xe1\xbe\xb9",
+	"\xe1\xbe\xb3" => "\xe1\xbe\xbc",
+	"\xe1\xbe\xbe" => "\xce\x99",
+	"\xe1\xbf\x83" => "\xe1\xbf\x8c",
+	"\xe1\xbf\x90" => "\xe1\xbf\x98",
+	"\xe1\xbf\x91" => "\xe1\xbf\x99",
+	"\xe1\xbf\xa0" => "\xe1\xbf\xa8",
+	"\xe1\xbf\xa1" => "\xe1\xbf\xa9",
+	"\xe1\xbf\xa5" => "\xe1\xbf\xac",
+	"\xe1\xbf\xb3" => "\xe1\xbf\xbc",
+	"\xe2\x85\xb0" => "\xe2\x85\xa0",
+	"\xe2\x85\xb1" => "\xe2\x85\xa1",
+	"\xe2\x85\xb2" => "\xe2\x85\xa2",
+	"\xe2\x85\xb3" => "\xe2\x85\xa3",
+	"\xe2\x85\xb4" => "\xe2\x85\xa4",
+	"\xe2\x85\xb5" => "\xe2\x85\xa5",
+	"\xe2\x85\xb6" => "\xe2\x85\xa6",
+	"\xe2\x85\xb7" => "\xe2\x85\xa7",
+	"\xe2\x85\xb8" => "\xe2\x85\xa8",
+	"\xe2\x85\xb9" => "\xe2\x85\xa9",
+	"\xe2\x85\xba" => "\xe2\x85\xaa",
+	"\xe2\x85\xbb" => "\xe2\x85\xab",
+	"\xe2\x85\xbc" => "\xe2\x85\xac",
+	"\xe2\x85\xbd" => "\xe2\x85\xad",
+	"\xe2\x85\xbe" => "\xe2\x85\xae",
+	"\xe2\x85\xbf" => "\xe2\x85\xaf",
+	"\xe2\x93\x90" => "\xe2\x92\xb6",
+	"\xe2\x93\x91" => "\xe2\x92\xb7",
+	"\xe2\x93\x92" => "\xe2\x92\xb8",
+	"\xe2\x93\x93" => "\xe2\x92\xb9",
+	"\xe2\x93\x94" => "\xe2\x92\xba",
+	"\xe2\x93\x95" => "\xe2\x92\xbb",
+	"\xe2\x93\x96" => "\xe2\x92\xbc",
+	"\xe2\x93\x97" => "\xe2\x92\xbd",
+	"\xe2\x93\x98" => "\xe2\x92\xbe",
+	"\xe2\x93\x99" => "\xe2\x92\xbf",
+	"\xe2\x93\x9a" => "\xe2\x93\x80",
+	"\xe2\x93\x9b" => "\xe2\x93\x81",
+	"\xe2\x93\x9c" => "\xe2\x93\x82",
+	"\xe2\x93\x9d" => "\xe2\x93\x83",
+	"\xe2\x93\x9e" => "\xe2\x93\x84",
+	"\xe2\x93\x9f" => "\xe2\x93\x85",
+	"\xe2\x93\xa0" => "\xe2\x93\x86",
+	"\xe2\x93\xa1" => "\xe2\x93\x87",
+	"\xe2\x93\xa2" => "\xe2\x93\x88",
+	"\xe2\x93\xa3" => "\xe2\x93\x89",
+	"\xe2\x93\xa4" => "\xe2\x93\x8a",
+	"\xe2\x93\xa5" => "\xe2\x93\x8b",
+	"\xe2\x93\xa6" => "\xe2\x93\x8c",
+	"\xe2\x93\xa7" => "\xe2\x93\x8d",
+	"\xe2\x93\xa8" => "\xe2\x93\x8e",
+	"\xe2\x93\xa9" => "\xe2\x93\x8f",
+	"\xef\xbd\x81" => "\xef\xbc\xa1",
+	"\xef\xbd\x82" => "\xef\xbc\xa2",
+	"\xef\xbd\x83" => "\xef\xbc\xa3",
+	"\xef\xbd\x84" => "\xef\xbc\xa4",
+	"\xef\xbd\x85" => "\xef\xbc\xa5",
+	"\xef\xbd\x86" => "\xef\xbc\xa6",
+	"\xef\xbd\x87" => "\xef\xbc\xa7",
+	"\xef\xbd\x88" => "\xef\xbc\xa8",
+	"\xef\xbd\x89" => "\xef\xbc\xa9",
+	"\xef\xbd\x8a" => "\xef\xbc\xaa",
+	"\xef\xbd\x8b" => "\xef\xbc\xab",
+	"\xef\xbd\x8c" => "\xef\xbc\xac",
+	"\xef\xbd\x8d" => "\xef\xbc\xad",
+	"\xef\xbd\x8e" => "\xef\xbc\xae",
+	"\xef\xbd\x8f" => "\xef\xbc\xaf",
+	"\xef\xbd\x90" => "\xef\xbc\xb0",
+	"\xef\xbd\x91" => "\xef\xbc\xb1",
+	"\xef\xbd\x92" => "\xef\xbc\xb2",
+	"\xef\xbd\x93" => "\xef\xbc\xb3",
+	"\xef\xbd\x94" => "\xef\xbc\xb4",
+	"\xef\xbd\x95" => "\xef\xbc\xb5",
+	"\xef\xbd\x96" => "\xef\xbc\xb6",
+	"\xef\xbd\x97" => "\xef\xbc\xb7",
+	"\xef\xbd\x98" => "\xef\xbc\xb8",
+	"\xef\xbd\x99" => "\xef\xbc\xb9",
+	"\xef\xbd\x9a" => "\xef\xbc\xba",
+	"\xf0\x90\x90\xa8" => "\xf0\x90\x90\x80",
+	"\xf0\x90\x90\xa9" => "\xf0\x90\x90\x81",
+	"\xf0\x90\x90\xaa" => "\xf0\x90\x90\x82",
+	"\xf0\x90\x90\xab" => "\xf0\x90\x90\x83",
+	"\xf0\x90\x90\xac" => "\xf0\x90\x90\x84",
+	"\xf0\x90\x90\xad" => "\xf0\x90\x90\x85",
+	"\xf0\x90\x90\xae" => "\xf0\x90\x90\x86",
+	"\xf0\x90\x90\xaf" => "\xf0\x90\x90\x87",
+	"\xf0\x90\x90\xb0" => "\xf0\x90\x90\x88",
+	"\xf0\x90\x90\xb1" => "\xf0\x90\x90\x89",
+	"\xf0\x90\x90\xb2" => "\xf0\x90\x90\x8a",
+	"\xf0\x90\x90\xb3" => "\xf0\x90\x90\x8b",
+	"\xf0\x90\x90\xb4" => "\xf0\x90\x90\x8c",
+	"\xf0\x90\x90\xb5" => "\xf0\x90\x90\x8d",
+	"\xf0\x90\x90\xb6" => "\xf0\x90\x90\x8e",
+	"\xf0\x90\x90\xb7" => "\xf0\x90\x90\x8f",
+	"\xf0\x90\x90\xb8" => "\xf0\x90\x90\x90",
+	"\xf0\x90\x90\xb9" => "\xf0\x90\x90\x91",
+	"\xf0\x90\x90\xba" => "\xf0\x90\x90\x92",
+	"\xf0\x90\x90\xbb" => "\xf0\x90\x90\x93",
+	"\xf0\x90\x90\xbc" => "\xf0\x90\x90\x94",
+	"\xf0\x90\x90\xbd" => "\xf0\x90\x90\x95",
+	"\xf0\x90\x90\xbe" => "\xf0\x90\x90\x96",
+	"\xf0\x90\x90\xbf" => "\xf0\x90\x90\x97",
+	"\xf0\x90\x91\x80" => "\xf0\x90\x90\x98",
+	"\xf0\x90\x91\x81" => "\xf0\x90\x90\x99",
+	"\xf0\x90\x91\x82" => "\xf0\x90\x90\x9a",
+	"\xf0\x90\x91\x83" => "\xf0\x90\x90\x9b",
+	"\xf0\x90\x91\x84" => "\xf0\x90\x90\x9c",
+	"\xf0\x90\x91\x85" => "\xf0\x90\x90\x9d",
+	"\xf0\x90\x91\x86" => "\xf0\x90\x90\x9e",
+	"\xf0\x90\x91\x87" => "\xf0\x90\x90\x9f",
+	"\xf0\x90\x91\x88" => "\xf0\x90\x90\xa0",
+	"\xf0\x90\x91\x89" => "\xf0\x90\x90\xa1",
+	"\xf0\x90\x91\x8a" => "\xf0\x90\x90\xa2",
+	"\xf0\x90\x91\x8b" => "\xf0\x90\x90\xa3",
+	"\xf0\x90\x91\x8c" => "\xf0\x90\x90\xa4",
+	"\xf0\x90\x91\x8d" => "\xf0\x90\x90\xa5"
+);
+
+/*
+ * Translation array to get lower case character
+ */
+$wikiLowerChars = array (
+	"A" => "a",
+	"B" => "b",
+	"C" => "c",
+	"D" => "d",
+	"E" => "e",
+	"F" => "f",
+	"G" => "g",
+	"H" => "h",
+	"I" => "i",
+	"J" => "j",
+	"K" => "k",
+	"L" => "l",
+	"M" => "m",
+	"N" => "n",
+	"O" => "o",
+	"P" => "p",
+	"Q" => "q",
+	"R" => "r",
+	"S" => "s",
+	"T" => "t",
+	"U" => "u",
+	"V" => "v",
+	"W" => "w",
+	"X" => "x",
+	"Y" => "y",
+	"Z" => "z",
+	"\xc3\x80" => "\xc3\xa0",
+	"\xc3\x81" => "\xc3\xa1",
+	"\xc3\x82" => "\xc3\xa2",
+	"\xc3\x83" => "\xc3\xa3",
+	"\xc3\x84" => "\xc3\xa4",
+	"\xc3\x85" => "\xc3\xa5",
+	"\xc3\x86" => "\xc3\xa6",
+	"\xc3\x87" => "\xc3\xa7",
+	"\xc3\x88" => "\xc3\xa8",
+	"\xc3\x89" => "\xc3\xa9",
+	"\xc3\x8a" => "\xc3\xaa",
+	"\xc3\x8b" => "\xc3\xab",
+	"\xc3\x8c" => "\xc3\xac",
+	"\xc3\x8d" => "\xc3\xad",
+	"\xc3\x8e" => "\xc3\xae",
+	"\xc3\x8f" => "\xc3\xaf",
+	"\xc3\x90" => "\xc3\xb0",
+	"\xc3\x91" => "\xc3\xb1",
+	"\xc3\x92" => "\xc3\xb2",
+	"\xc3\x93" => "\xc3\xb3",
+	"\xc3\x94" => "\xc3\xb4",
+	"\xc3\x95" => "\xc3\xb5",
+	"\xc3\x96" => "\xc3\xb6",
+	"\xc3\x98" => "\xc3\xb8",
+	"\xc3\x99" => "\xc3\xb9",
+	"\xc3\x9a" => "\xc3\xba",
+	"\xc3\x9b" => "\xc3\xbb",
+	"\xc3\x9c" => "\xc3\xbc",
+	"\xc3\x9d" => "\xc3\xbd",
+	"\xc3\x9e" => "\xc3\xbe",
+	"\xc4\x80" => "\xc4\x81",
+	"\xc4\x82" => "\xc4\x83",
+	"\xc4\x84" => "\xc4\x85",
+	"\xc4\x86" => "\xc4\x87",
+	"\xc4\x88" => "\xc4\x89",
+	"\xc4\x8a" => "\xc4\x8b",
+	"\xc4\x8c" => "\xc4\x8d",
+	"\xc4\x8e" => "\xc4\x8f",
+	"\xc4\x90" => "\xc4\x91",
+	"\xc4\x92" => "\xc4\x93",
+	"\xc4\x94" => "\xc4\x95",
+	"\xc4\x96" => "\xc4\x97",
+	"\xc4\x98" => "\xc4\x99",
+	"\xc4\x9a" => "\xc4\x9b",
+	"\xc4\x9c" => "\xc4\x9d",
+	"\xc4\x9e" => "\xc4\x9f",
+	"\xc4\xa0" => "\xc4\xa1",
+	"\xc4\xa2" => "\xc4\xa3",
+	"\xc4\xa4" => "\xc4\xa5",
+	"\xc4\xa6" => "\xc4\xa7",
+	"\xc4\xa8" => "\xc4\xa9",
+	"\xc4\xaa" => "\xc4\xab",
+	"\xc4\xac" => "\xc4\xad",
+	"\xc4\xae" => "\xc4\xaf",
+	"\xc4\xb0" => "i",
+	"\xc4\xb2" => "\xc4\xb3",
+	"\xc4\xb4" => "\xc4\xb5",
+	"\xc4\xb6" => "\xc4\xb7",
+	"\xc4\xb9" => "\xc4\xba",
+	"\xc4\xbb" => "\xc4\xbc",
+	"\xc4\xbd" => "\xc4\xbe",
+	"\xc4\xbf" => "\xc5\x80",
+	"\xc5\x81" => "\xc5\x82",
+	"\xc5\x83" => "\xc5\x84",
+	"\xc5\x85" => "\xc5\x86",
+	"\xc5\x87" => "\xc5\x88",
+	"\xc5\x8a" => "\xc5\x8b",
+	"\xc5\x8c" => "\xc5\x8d",
+	"\xc5\x8e" => "\xc5\x8f",
+	"\xc5\x90" => "\xc5\x91",
+	"\xc5\x92" => "\xc5\x93",
+	"\xc5\x94" => "\xc5\x95",
+	"\xc5\x96" => "\xc5\x97",
+	"\xc5\x98" => "\xc5\x99",
+	"\xc5\x9a" => "\xc5\x9b",
+	"\xc5\x9c" => "\xc5\x9d",
+	"\xc5\x9e" => "\xc5\x9f",
+	"\xc5\xa0" => "\xc5\xa1",
+	"\xc5\xa2" => "\xc5\xa3",
+	"\xc5\xa4" => "\xc5\xa5",
+	"\xc5\xa6" => "\xc5\xa7",
+	"\xc5\xa8" => "\xc5\xa9",
+	"\xc5\xaa" => "\xc5\xab",
+	"\xc5\xac" => "\xc5\xad",
+	"\xc5\xae" => "\xc5\xaf",
+	"\xc5\xb0" => "\xc5\xb1",
+	"\xc5\xb2" => "\xc5\xb3",
+	"\xc5\xb4" => "\xc5\xb5",
+	"\xc5\xb6" => "\xc5\xb7",
+	"\xc5\xb8" => "\xc3\xbf",
+	"\xc5\xb9" => "\xc5\xba",
+	"\xc5\xbb" => "\xc5\xbc",
+	"\xc5\xbd" => "\xc5\xbe",
+	"\xc6\x81" => "\xc9\x93",
+	"\xc6\x82" => "\xc6\x83",
+	"\xc6\x84" => "\xc6\x85",
+	"\xc6\x86" => "\xc9\x94",
+	"\xc6\x87" => "\xc6\x88",
+	"\xc6\x89" => "\xc9\x96",
+	"\xc6\x8a" => "\xc9\x97",
+	"\xc6\x8b" => "\xc6\x8c",
+	"\xc6\x8e" => "\xc7\x9d",
+	"\xc6\x8f" => "\xc9\x99",
+	"\xc6\x90" => "\xc9\x9b",
+	"\xc6\x91" => "\xc6\x92",
+	"\xc6\x93" => "\xc9\xa0",
+	"\xc6\x94" => "\xc9\xa3",
+	"\xc6\x96" => "\xc9\xa9",
+	"\xc6\x97" => "\xc9\xa8",
+	"\xc6\x98" => "\xc6\x99",
+	"\xc6\x9c" => "\xc9\xaf",
+	"\xc6\x9d" => "\xc9\xb2",
+	"\xc6\x9f" => "\xc9\xb5",
+	"\xc6\xa0" => "\xc6\xa1",
+	"\xc6\xa2" => "\xc6\xa3",
+	"\xc6\xa4" => "\xc6\xa5",
+	"\xc6\xa6" => "\xca\x80",
+	"\xc6\xa7" => "\xc6\xa8",
+	"\xc6\xa9" => "\xca\x83",
+	"\xc6\xac" => "\xc6\xad",
+	"\xc6\xae" => "\xca\x88",
+	"\xc6\xaf" => "\xc6\xb0",
+	"\xc6\xb1" => "\xca\x8a",
+	"\xc6\xb2" => "\xca\x8b",
+	"\xc6\xb3" => "\xc6\xb4",
+	"\xc6\xb5" => "\xc6\xb6",
+	"\xc6\xb7" => "\xca\x92",
+	"\xc6\xb8" => "\xc6\xb9",
+	"\xc6\xbc" => "\xc6\xbd",
+	"\xc7\x84" => "\xc7\x86",
+	"\xc7\x85" => "\xc7\x86",
+	"\xc7\x87" => "\xc7\x89",
+	"\xc7\x88" => "\xc7\x89",
+	"\xc7\x8a" => "\xc7\x8c",
+	"\xc7\x8b" => "\xc7\x8c",
+	"\xc7\x8d" => "\xc7\x8e",
+	"\xc7\x8f" => "\xc7\x90",
+	"\xc7\x91" => "\xc7\x92",
+	"\xc7\x93" => "\xc7\x94",
+	"\xc7\x95" => "\xc7\x96",
+	"\xc7\x97" => "\xc7\x98",
+	"\xc7\x99" => "\xc7\x9a",
+	"\xc7\x9b" => "\xc7\x9c",
+	"\xc7\x9e" => "\xc7\x9f",
+	"\xc7\xa0" => "\xc7\xa1",
+	"\xc7\xa2" => "\xc7\xa3",
+	"\xc7\xa4" => "\xc7\xa5",
+	"\xc7\xa6" => "\xc7\xa7",
+	"\xc7\xa8" => "\xc7\xa9",
+	"\xc7\xaa" => "\xc7\xab",
+	"\xc7\xac" => "\xc7\xad",
+	"\xc7\xae" => "\xc7\xaf",
+	"\xc7\xb1" => "\xc7\xb3",
+	"\xc7\xb2" => "\xc7\xb3",
+	"\xc7\xb4" => "\xc7\xb5",
+	"\xc7\xb6" => "\xc6\x95",
+	"\xc7\xb7" => "\xc6\xbf",
+	"\xc7\xb8" => "\xc7\xb9",
+	"\xc7\xba" => "\xc7\xbb",
+	"\xc7\xbc" => "\xc7\xbd",
+	"\xc7\xbe" => "\xc7\xbf",
+	"\xc8\x80" => "\xc8\x81",
+	"\xc8\x82" => "\xc8\x83",
+	"\xc8\x84" => "\xc8\x85",
+	"\xc8\x86" => "\xc8\x87",
+	"\xc8\x88" => "\xc8\x89",
+	"\xc8\x8a" => "\xc8\x8b",
+	"\xc8\x8c" => "\xc8\x8d",
+	"\xc8\x8e" => "\xc8\x8f",
+	"\xc8\x90" => "\xc8\x91",
+	"\xc8\x92" => "\xc8\x93",
+	"\xc8\x94" => "\xc8\x95",
+	"\xc8\x96" => "\xc8\x97",
+	"\xc8\x98" => "\xc8\x99",
+	"\xc8\x9a" => "\xc8\x9b",
+	"\xc8\x9c" => "\xc8\x9d",
+	"\xc8\x9e" => "\xc8\x9f",
+	"\xc8\xa2" => "\xc8\xa3",
+	"\xc8\xa4" => "\xc8\xa5",
+	"\xc8\xa6" => "\xc8\xa7",
+	"\xc8\xa8" => "\xc8\xa9",
+	"\xc8\xaa" => "\xc8\xab",
+	"\xc8\xac" => "\xc8\xad",
+	"\xc8\xae" => "\xc8\xaf",
+	"\xc8\xb0" => "\xc8\xb1",
+	"\xc8\xb2" => "\xc8\xb3",
+	"\xce\x86" => "\xce\xac",
+	"\xce\x88" => "\xce\xad",
+	"\xce\x89" => "\xce\xae",
+	"\xce\x8a" => "\xce\xaf",
+	"\xce\x8c" => "\xcf\x8c",
+	"\xce\x8e" => "\xcf\x8d",
+	"\xce\x8f" => "\xcf\x8e",
+	"\xce\x91" => "\xce\xb1",
+	"\xce\x92" => "\xce\xb2",
+	"\xce\x93" => "\xce\xb3",
+	"\xce\x94" => "\xce\xb4",
+	"\xce\x95" => "\xce\xb5",
+	"\xce\x96" => "\xce\xb6",
+	"\xce\x97" => "\xce\xb7",
+	"\xce\x98" => "\xce\xb8",
+	"\xce\x99" => "\xce\xb9",
+	"\xce\x9a" => "\xce\xba",
+	"\xce\x9b" => "\xce\xbb",
+	"\xce\x9c" => "\xce\xbc",
+	"\xce\x9d" => "\xce\xbd",
+	"\xce\x9e" => "\xce\xbe",
+	"\xce\x9f" => "\xce\xbf",
+	"\xce\xa0" => "\xcf\x80",
+	"\xce\xa1" => "\xcf\x81",
+	"\xce\xa3" => "\xcf\x83",
+	"\xce\xa4" => "\xcf\x84",
+	"\xce\xa5" => "\xcf\x85",
+	"\xce\xa6" => "\xcf\x86",
+	"\xce\xa7" => "\xcf\x87",
+	"\xce\xa8" => "\xcf\x88",
+	"\xce\xa9" => "\xcf\x89",
+	"\xce\xaa" => "\xcf\x8a",
+	"\xce\xab" => "\xcf\x8b",
+	"\xcf\x9a" => "\xcf\x9b",
+	"\xcf\x9c" => "\xcf\x9d",
+	"\xcf\x9e" => "\xcf\x9f",
+	"\xcf\xa0" => "\xcf\xa1",
+	"\xcf\xa2" => "\xcf\xa3",
+	"\xcf\xa4" => "\xcf\xa5",
+	"\xcf\xa6" => "\xcf\xa7",
+	"\xcf\xa8" => "\xcf\xa9",
+	"\xcf\xaa" => "\xcf\xab",
+	"\xcf\xac" => "\xcf\xad",
+	"\xcf\xae" => "\xcf\xaf",
+	"\xcf\xb4" => "\xce\xb8",
+	"\xd0\x80" => "\xd1\x90",
+	"\xd0\x81" => "\xd1\x91",
+	"\xd0\x82" => "\xd1\x92",
+	"\xd0\x83" => "\xd1\x93",
+	"\xd0\x84" => "\xd1\x94",
+	"\xd0\x85" => "\xd1\x95",
+	"\xd0\x86" => "\xd1\x96",
+	"\xd0\x87" => "\xd1\x97",
+	"\xd0\x88" => "\xd1\x98",
+	"\xd0\x89" => "\xd1\x99",
+	"\xd0\x8a" => "\xd1\x9a",
+	"\xd0\x8b" => "\xd1\x9b",
+	"\xd0\x8c" => "\xd1\x9c",
+	"\xd0\x8d" => "\xd1\x9d",
+	"\xd0\x8e" => "\xd1\x9e",
+	"\xd0\x8f" => "\xd1\x9f",
+	"\xd0\x90" => "\xd0\xb0",
+	"\xd0\x91" => "\xd0\xb1",
+	"\xd0\x92" => "\xd0\xb2",
+	"\xd0\x93" => "\xd0\xb3",
+	"\xd0\x94" => "\xd0\xb4",
+	"\xd0\x95" => "\xd0\xb5",
+	"\xd0\x96" => "\xd0\xb6",
+	"\xd0\x97" => "\xd0\xb7",
+	"\xd0\x98" => "\xd0\xb8",
+	"\xd0\x99" => "\xd0\xb9",
+	"\xd0\x9a" => "\xd0\xba",
+	"\xd0\x9b" => "\xd0\xbb",
+	"\xd0\x9c" => "\xd0\xbc",
+	"\xd0\x9d" => "\xd0\xbd",
+	"\xd0\x9e" => "\xd0\xbe",
+	"\xd0\x9f" => "\xd0\xbf",
+	"\xd0\xa0" => "\xd1\x80",
+	"\xd0\xa1" => "\xd1\x81",
+	"\xd0\xa2" => "\xd1\x82",
+	"\xd0\xa3" => "\xd1\x83",
+	"\xd0\xa4" => "\xd1\x84",
+	"\xd0\xa5" => "\xd1\x85",
+	"\xd0\xa6" => "\xd1\x86",
+	"\xd0\xa7" => "\xd1\x87",
+	"\xd0\xa8" => "\xd1\x88",
+	"\xd0\xa9" => "\xd1\x89",
+	"\xd0\xaa" => "\xd1\x8a",
+	"\xd0\xab" => "\xd1\x8b",
+	"\xd0\xac" => "\xd1\x8c",
+	"\xd0\xad" => "\xd1\x8d",
+	"\xd0\xae" => "\xd1\x8e",
+	"\xd0\xaf" => "\xd1\x8f",
+	"\xd1\xa0" => "\xd1\xa1",
+	"\xd1\xa2" => "\xd1\xa3",
+	"\xd1\xa4" => "\xd1\xa5",
+	"\xd1\xa6" => "\xd1\xa7",
+	"\xd1\xa8" => "\xd1\xa9",
+	"\xd1\xaa" => "\xd1\xab",
+	"\xd1\xac" => "\xd1\xad",
+	"\xd1\xae" => "\xd1\xaf",
+	"\xd1\xb0" => "\xd1\xb1",
+	"\xd1\xb2" => "\xd1\xb3",
+	"\xd1\xb4" => "\xd1\xb5",
+	"\xd1\xb6" => "\xd1\xb7",
+	"\xd1\xb8" => "\xd1\xb9",
+	"\xd1\xba" => "\xd1\xbb",
+	"\xd1\xbc" => "\xd1\xbd",
+	"\xd1\xbe" => "\xd1\xbf",
+	"\xd2\x80" => "\xd2\x81",
+	"\xd2\x8c" => "\xd2\x8d",
+	"\xd2\x8e" => "\xd2\x8f",
+	"\xd2\x90" => "\xd2\x91",
+	"\xd2\x92" => "\xd2\x93",
+	"\xd2\x94" => "\xd2\x95",
+	"\xd2\x96" => "\xd2\x97",
+	"\xd2\x98" => "\xd2\x99",
+	"\xd2\x9a" => "\xd2\x9b",
+	"\xd2\x9c" => "\xd2\x9d",
+	"\xd2\x9e" => "\xd2\x9f",
+	"\xd2\xa0" => "\xd2\xa1",
+	"\xd2\xa2" => "\xd2\xa3",
+	"\xd2\xa4" => "\xd2\xa5",
+	"\xd2\xa6" => "\xd2\xa7",
+	"\xd2\xa8" => "\xd2\xa9",
+	"\xd2\xaa" => "\xd2\xab",
+	"\xd2\xac" => "\xd2\xad",
+	"\xd2\xae" => "\xd2\xaf",
+	"\xd2\xb0" => "\xd2\xb1",
+	"\xd2\xb2" => "\xd2\xb3",
+	"\xd2\xb4" => "\xd2\xb5",
+	"\xd2\xb6" => "\xd2\xb7",
+	"\xd2\xb8" => "\xd2\xb9",
+	"\xd2\xba" => "\xd2\xbb",
+	"\xd2\xbc" => "\xd2\xbd",
+	"\xd2\xbe" => "\xd2\xbf",
+	"\xd3\x81" => "\xd3\x82",
+	"\xd3\x83" => "\xd3\x84",
+	"\xd3\x87" => "\xd3\x88",
+	"\xd3\x8b" => "\xd3\x8c",
+	"\xd3\x90" => "\xd3\x91",
+	"\xd3\x92" => "\xd3\x93",
+	"\xd3\x94" => "\xd3\x95",
+	"\xd3\x96" => "\xd3\x97",
+	"\xd3\x98" => "\xd3\x99",
+	"\xd3\x9a" => "\xd3\x9b",
+	"\xd3\x9c" => "\xd3\x9d",
+	"\xd3\x9e" => "\xd3\x9f",
+	"\xd3\xa0" => "\xd3\xa1",
+	"\xd3\xa2" => "\xd3\xa3",
+	"\xd3\xa4" => "\xd3\xa5",
+	"\xd3\xa6" => "\xd3\xa7",
+	"\xd3\xa8" => "\xd3\xa9",
+	"\xd3\xaa" => "\xd3\xab",
+	"\xd3\xac" => "\xd3\xad",
+	"\xd3\xae" => "\xd3\xaf",
+	"\xd3\xb0" => "\xd3\xb1",
+	"\xd3\xb2" => "\xd3\xb3",
+	"\xd3\xb4" => "\xd3\xb5",
+	"\xd3\xb8" => "\xd3\xb9",
+	"\xd4\xb1" => "\xd5\xa1",
+	"\xd4\xb2" => "\xd5\xa2",
+	"\xd4\xb3" => "\xd5\xa3",
+	"\xd4\xb4" => "\xd5\xa4",
+	"\xd4\xb5" => "\xd5\xa5",
+	"\xd4\xb6" => "\xd5\xa6",
+	"\xd4\xb7" => "\xd5\xa7",
+	"\xd4\xb8" => "\xd5\xa8",
+	"\xd4\xb9" => "\xd5\xa9",
+	"\xd4\xba" => "\xd5\xaa",
+	"\xd4\xbb" => "\xd5\xab",
+	"\xd4\xbc" => "\xd5\xac",
+	"\xd4\xbd" => "\xd5\xad",
+	"\xd4\xbe" => "\xd5\xae",
+	"\xd4\xbf" => "\xd5\xaf",
+	"\xd5\x80" => "\xd5\xb0",
+	"\xd5\x81" => "\xd5\xb1",
+	"\xd5\x82" => "\xd5\xb2",
+	"\xd5\x83" => "\xd5\xb3",
+	"\xd5\x84" => "\xd5\xb4",
+	"\xd5\x85" => "\xd5\xb5",
+	"\xd5\x86" => "\xd5\xb6",
+	"\xd5\x87" => "\xd5\xb7",
+	"\xd5\x88" => "\xd5\xb8",
+	"\xd5\x89" => "\xd5\xb9",
+	"\xd5\x8a" => "\xd5\xba",
+	"\xd5\x8b" => "\xd5\xbb",
+	"\xd5\x8c" => "\xd5\xbc",
+	"\xd5\x8d" => "\xd5\xbd",
+	"\xd5\x8e" => "\xd5\xbe",
+	"\xd5\x8f" => "\xd5\xbf",
+	"\xd5\x90" => "\xd6\x80",
+	"\xd5\x91" => "\xd6\x81",
+	"\xd5\x92" => "\xd6\x82",
+	"\xd5\x93" => "\xd6\x83",
+	"\xd5\x94" => "\xd6\x84",
+	"\xd5\x95" => "\xd6\x85",
+	"\xd5\x96" => "\xd6\x86",
+	"\xe1\xb8\x80" => "\xe1\xb8\x81",
+	"\xe1\xb8\x82" => "\xe1\xb8\x83",
+	"\xe1\xb8\x84" => "\xe1\xb8\x85",
+	"\xe1\xb8\x86" => "\xe1\xb8\x87",
+	"\xe1\xb8\x88" => "\xe1\xb8\x89",
+	"\xe1\xb8\x8a" => "\xe1\xb8\x8b",
+	"\xe1\xb8\x8c" => "\xe1\xb8\x8d",
+	"\xe1\xb8\x8e" => "\xe1\xb8\x8f",
+	"\xe1\xb8\x90" => "\xe1\xb8\x91",
+	"\xe1\xb8\x92" => "\xe1\xb8\x93",
+	"\xe1\xb8\x94" => "\xe1\xb8\x95",
+	"\xe1\xb8\x96" => "\xe1\xb8\x97",
+	"\xe1\xb8\x98" => "\xe1\xb8\x99",
+	"\xe1\xb8\x9a" => "\xe1\xb8\x9b",
+	"\xe1\xb8\x9c" => "\xe1\xb8\x9d",
+	"\xe1\xb8\x9e" => "\xe1\xb8\x9f",
+	"\xe1\xb8\xa0" => "\xe1\xb8\xa1",
+	"\xe1\xb8\xa2" => "\xe1\xb8\xa3",
+	"\xe1\xb8\xa4" => "\xe1\xb8\xa5",
+	"\xe1\xb8\xa6" => "\xe1\xb8\xa7",
+	"\xe1\xb8\xa8" => "\xe1\xb8\xa9",
+	"\xe1\xb8\xaa" => "\xe1\xb8\xab",
+	"\xe1\xb8\xac" => "\xe1\xb8\xad",
+	"\xe1\xb8\xae" => "\xe1\xb8\xaf",
+	"\xe1\xb8\xb0" => "\xe1\xb8\xb1",
+	"\xe1\xb8\xb2" => "\xe1\xb8\xb3",
+	"\xe1\xb8\xb4" => "\xe1\xb8\xb5",
+	"\xe1\xb8\xb6" => "\xe1\xb8\xb7",
+	"\xe1\xb8\xb8" => "\xe1\xb8\xb9",
+	"\xe1\xb8\xba" => "\xe1\xb8\xbb",
+	"\xe1\xb8\xbc" => "\xe1\xb8\xbd",
+	"\xe1\xb8\xbe" => "\xe1\xb8\xbf",
+	"\xe1\xb9\x80" => "\xe1\xb9\x81",
+	"\xe1\xb9\x82" => "\xe1\xb9\x83",
+	"\xe1\xb9\x84" => "\xe1\xb9\x85",
+	"\xe1\xb9\x86" => "\xe1\xb9\x87",
+	"\xe1\xb9\x88" => "\xe1\xb9\x89",
+	"\xe1\xb9\x8a" => "\xe1\xb9\x8b",
+	"\xe1\xb9\x8c" => "\xe1\xb9\x8d",
+	"\xe1\xb9\x8e" => "\xe1\xb9\x8f",
+	"\xe1\xb9\x90" => "\xe1\xb9\x91",
+	"\xe1\xb9\x92" => "\xe1\xb9\x93",
+	"\xe1\xb9\x94" => "\xe1\xb9\x95",
+	"\xe1\xb9\x96" => "\xe1\xb9\x97",
+	"\xe1\xb9\x98" => "\xe1\xb9\x99",
+	"\xe1\xb9\x9a" => "\xe1\xb9\x9b",
+	"\xe1\xb9\x9c" => "\xe1\xb9\x9d",
+	"\xe1\xb9\x9e" => "\xe1\xb9\x9f",
+	"\xe1\xb9\xa0" => "\xe1\xb9\xa1",
+	"\xe1\xb9\xa2" => "\xe1\xb9\xa3",
+	"\xe1\xb9\xa4" => "\xe1\xb9\xa5",
+	"\xe1\xb9\xa6" => "\xe1\xb9\xa7",
+	"\xe1\xb9\xa8" => "\xe1\xb9\xa9",
+	"\xe1\xb9\xaa" => "\xe1\xb9\xab",
+	"\xe1\xb9\xac" => "\xe1\xb9\xad",
+	"\xe1\xb9\xae" => "\xe1\xb9\xaf",
+	"\xe1\xb9\xb0" => "\xe1\xb9\xb1",
+	"\xe1\xb9\xb2" => "\xe1\xb9\xb3",
+	"\xe1\xb9\xb4" => "\xe1\xb9\xb5",
+	"\xe1\xb9\xb6" => "\xe1\xb9\xb7",
+	"\xe1\xb9\xb8" => "\xe1\xb9\xb9",
+	"\xe1\xb9\xba" => "\xe1\xb9\xbb",
+	"\xe1\xb9\xbc" => "\xe1\xb9\xbd",
+	"\xe1\xb9\xbe" => "\xe1\xb9\xbf",
+	"\xe1\xba\x80" => "\xe1\xba\x81",
+	"\xe1\xba\x82" => "\xe1\xba\x83",
+	"\xe1\xba\x84" => "\xe1\xba\x85",
+	"\xe1\xba\x86" => "\xe1\xba\x87",
+	"\xe1\xba\x88" => "\xe1\xba\x89",
+	"\xe1\xba\x8a" => "\xe1\xba\x8b",
+	"\xe1\xba\x8c" => "\xe1\xba\x8d",
+	"\xe1\xba\x8e" => "\xe1\xba\x8f",
+	"\xe1\xba\x90" => "\xe1\xba\x91",
+	"\xe1\xba\x92" => "\xe1\xba\x93",
+	"\xe1\xba\x94" => "\xe1\xba\x95",
+	"\xe1\xba\xa0" => "\xe1\xba\xa1",
+	"\xe1\xba\xa2" => "\xe1\xba\xa3",
+	"\xe1\xba\xa4" => "\xe1\xba\xa5",
+	"\xe1\xba\xa6" => "\xe1\xba\xa7",
+	"\xe1\xba\xa8" => "\xe1\xba\xa9",
+	"\xe1\xba\xaa" => "\xe1\xba\xab",
+	"\xe1\xba\xac" => "\xe1\xba\xad",
+	"\xe1\xba\xae" => "\xe1\xba\xaf",
+	"\xe1\xba\xb0" => "\xe1\xba\xb1",
+	"\xe1\xba\xb2" => "\xe1\xba\xb3",
+	"\xe1\xba\xb4" => "\xe1\xba\xb5",
+	"\xe1\xba\xb6" => "\xe1\xba\xb7",
+	"\xe1\xba\xb8" => "\xe1\xba\xb9",
+	"\xe1\xba\xba" => "\xe1\xba\xbb",
+	"\xe1\xba\xbc" => "\xe1\xba\xbd",
+	"\xe1\xba\xbe" => "\xe1\xba\xbf",
+	"\xe1\xbb\x80" => "\xe1\xbb\x81",
+	"\xe1\xbb\x82" => "\xe1\xbb\x83",
+	"\xe1\xbb\x84" => "\xe1\xbb\x85",
+	"\xe1\xbb\x86" => "\xe1\xbb\x87",
+	"\xe1\xbb\x88" => "\xe1\xbb\x89",
+	"\xe1\xbb\x8a" => "\xe1\xbb\x8b",
+	"\xe1\xbb\x8c" => "\xe1\xbb\x8d",
+	"\xe1\xbb\x8e" => "\xe1\xbb\x8f",
+	"\xe1\xbb\x90" => "\xe1\xbb\x91",
+	"\xe1\xbb\x92" => "\xe1\xbb\x93",
+	"\xe1\xbb\x94" => "\xe1\xbb\x95",
+	"\xe1\xbb\x96" => "\xe1\xbb\x97",
+	"\xe1\xbb\x98" => "\xe1\xbb\x99",
+	"\xe1\xbb\x9a" => "\xe1\xbb\x9b",
+	"\xe1\xbb\x9c" => "\xe1\xbb\x9d",
+	"\xe1\xbb\x9e" => "\xe1\xbb\x9f",
+	"\xe1\xbb\xa0" => "\xe1\xbb\xa1",
+	"\xe1\xbb\xa2" => "\xe1\xbb\xa3",
+	"\xe1\xbb\xa4" => "\xe1\xbb\xa5",
+	"\xe1\xbb\xa6" => "\xe1\xbb\xa7",
+	"\xe1\xbb\xa8" => "\xe1\xbb\xa9",
+	"\xe1\xbb\xaa" => "\xe1\xbb\xab",
+	"\xe1\xbb\xac" => "\xe1\xbb\xad",
+	"\xe1\xbb\xae" => "\xe1\xbb\xaf",
+	"\xe1\xbb\xb0" => "\xe1\xbb\xb1",
+	"\xe1\xbb\xb2" => "\xe1\xbb\xb3",
+	"\xe1\xbb\xb4" => "\xe1\xbb\xb5",
+	"\xe1\xbb\xb6" => "\xe1\xbb\xb7",
+	"\xe1\xbb\xb8" => "\xe1\xbb\xb9",
+	"\xe1\xbc\x88" => "\xe1\xbc\x80",
+	"\xe1\xbc\x89" => "\xe1\xbc\x81",
+	"\xe1\xbc\x8a" => "\xe1\xbc\x82",
+	"\xe1\xbc\x8b" => "\xe1\xbc\x83",
+	"\xe1\xbc\x8c" => "\xe1\xbc\x84",
+	"\xe1\xbc\x8d" => "\xe1\xbc\x85",
+	"\xe1\xbc\x8e" => "\xe1\xbc\x86",
+	"\xe1\xbc\x8f" => "\xe1\xbc\x87",
+	"\xe1\xbc\x98" => "\xe1\xbc\x90",
+	"\xe1\xbc\x99" => "\xe1\xbc\x91",
+	"\xe1\xbc\x9a" => "\xe1\xbc\x92",
+	"\xe1\xbc\x9b" => "\xe1\xbc\x93",
+	"\xe1\xbc\x9c" => "\xe1\xbc\x94",
+	"\xe1\xbc\x9d" => "\xe1\xbc\x95",
+	"\xe1\xbc\xa8" => "\xe1\xbc\xa0",
+	"\xe1\xbc\xa9" => "\xe1\xbc\xa1",
+	"\xe1\xbc\xaa" => "\xe1\xbc\xa2",
+	"\xe1\xbc\xab" => "\xe1\xbc\xa3",
+	"\xe1\xbc\xac" => "\xe1\xbc\xa4",
+	"\xe1\xbc\xad" => "\xe1\xbc\xa5",
+	"\xe1\xbc\xae" => "\xe1\xbc\xa6",
+	"\xe1\xbc\xaf" => "\xe1\xbc\xa7",
+	"\xe1\xbc\xb8" => "\xe1\xbc\xb0",
+	"\xe1\xbc\xb9" => "\xe1\xbc\xb1",
+	"\xe1\xbc\xba" => "\xe1\xbc\xb2",
+	"\xe1\xbc\xbb" => "\xe1\xbc\xb3",
+	"\xe1\xbc\xbc" => "\xe1\xbc\xb4",
+	"\xe1\xbc\xbd" => "\xe1\xbc\xb5",
+	"\xe1\xbc\xbe" => "\xe1\xbc\xb6",
+	"\xe1\xbc\xbf" => "\xe1\xbc\xb7",
+	"\xe1\xbd\x88" => "\xe1\xbd\x80",
+	"\xe1\xbd\x89" => "\xe1\xbd\x81",
+	"\xe1\xbd\x8a" => "\xe1\xbd\x82",
+	"\xe1\xbd\x8b" => "\xe1\xbd\x83",
+	"\xe1\xbd\x8c" => "\xe1\xbd\x84",
+	"\xe1\xbd\x8d" => "\xe1\xbd\x85",
+	"\xe1\xbd\x99" => "\xe1\xbd\x91",
+	"\xe1\xbd\x9b" => "\xe1\xbd\x93",
+	"\xe1\xbd\x9d" => "\xe1\xbd\x95",
+	"\xe1\xbd\x9f" => "\xe1\xbd\x97",
+	"\xe1\xbd\xa8" => "\xe1\xbd\xa0",
+	"\xe1\xbd\xa9" => "\xe1\xbd\xa1",
+	"\xe1\xbd\xaa" => "\xe1\xbd\xa2",
+	"\xe1\xbd\xab" => "\xe1\xbd\xa3",
+	"\xe1\xbd\xac" => "\xe1\xbd\xa4",
+	"\xe1\xbd\xad" => "\xe1\xbd\xa5",
+	"\xe1\xbd\xae" => "\xe1\xbd\xa6",
+	"\xe1\xbd\xaf" => "\xe1\xbd\xa7",
+	"\xe1\xbe\x88" => "\xe1\xbe\x80",
+	"\xe1\xbe\x89" => "\xe1\xbe\x81",
+	"\xe1\xbe\x8a" => "\xe1\xbe\x82",
+	"\xe1\xbe\x8b" => "\xe1\xbe\x83",
+	"\xe1\xbe\x8c" => "\xe1\xbe\x84",
+	"\xe1\xbe\x8d" => "\xe1\xbe\x85",
+	"\xe1\xbe\x8e" => "\xe1\xbe\x86",
+	"\xe1\xbe\x8f" => "\xe1\xbe\x87",
+	"\xe1\xbe\x98" => "\xe1\xbe\x90",
+	"\xe1\xbe\x99" => "\xe1\xbe\x91",
+	"\xe1\xbe\x9a" => "\xe1\xbe\x92",
+	"\xe1\xbe\x9b" => "\xe1\xbe\x93",
+	"\xe1\xbe\x9c" => "\xe1\xbe\x94",
+	"\xe1\xbe\x9d" => "\xe1\xbe\x95",
+	"\xe1\xbe\x9e" => "\xe1\xbe\x96",
+	"\xe1\xbe\x9f" => "\xe1\xbe\x97",
+	"\xe1\xbe\xa8" => "\xe1\xbe\xa0",
+	"\xe1\xbe\xa9" => "\xe1\xbe\xa1",
+	"\xe1\xbe\xaa" => "\xe1\xbe\xa2",
+	"\xe1\xbe\xab" => "\xe1\xbe\xa3",
+	"\xe1\xbe\xac" => "\xe1\xbe\xa4",
+	"\xe1\xbe\xad" => "\xe1\xbe\xa5",
+	"\xe1\xbe\xae" => "\xe1\xbe\xa6",
+	"\xe1\xbe\xaf" => "\xe1\xbe\xa7",
+	"\xe1\xbe\xb8" => "\xe1\xbe\xb0",
+	"\xe1\xbe\xb9" => "\xe1\xbe\xb1",
+	"\xe1\xbe\xba" => "\xe1\xbd\xb0",
+	"\xe1\xbe\xbb" => "\xe1\xbd\xb1",
+	"\xe1\xbe\xbc" => "\xe1\xbe\xb3",
+	"\xe1\xbf\x88" => "\xe1\xbd\xb2",
+	"\xe1\xbf\x89" => "\xe1\xbd\xb3",
+	"\xe1\xbf\x8a" => "\xe1\xbd\xb4",
+	"\xe1\xbf\x8b" => "\xe1\xbd\xb5",
+	"\xe1\xbf\x8c" => "\xe1\xbf\x83",
+	"\xe1\xbf\x98" => "\xe1\xbf\x90",
+	"\xe1\xbf\x99" => "\xe1\xbf\x91",
+	"\xe1\xbf\x9a" => "\xe1\xbd\xb6",
+	"\xe1\xbf\x9b" => "\xe1\xbd\xb7",
+	"\xe1\xbf\xa8" => "\xe1\xbf\xa0",
+	"\xe1\xbf\xa9" => "\xe1\xbf\xa1",
+	"\xe1\xbf\xaa" => "\xe1\xbd\xba",
+	"\xe1\xbf\xab" => "\xe1\xbd\xbb",
+	"\xe1\xbf\xac" => "\xe1\xbf\xa5",
+	"\xe1\xbf\xb8" => "\xe1\xbd\xb8",
+	"\xe1\xbf\xb9" => "\xe1\xbd\xb9",
+	"\xe1\xbf\xba" => "\xe1\xbd\xbc",
+	"\xe1\xbf\xbb" => "\xe1\xbd\xbd",
+	"\xe1\xbf\xbc" => "\xe1\xbf\xb3",
+	"\xe2\x84\xa6" => "\xcf\x89",
+	"\xe2\x84\xaa" => "k",
+	"\xe2\x84\xab" => "\xc3\xa5",
+	"\xe2\x85\xa0" => "\xe2\x85\xb0",
+	"\xe2\x85\xa1" => "\xe2\x85\xb1",
+	"\xe2\x85\xa2" => "\xe2\x85\xb2",
+	"\xe2\x85\xa3" => "\xe2\x85\xb3",
+	"\xe2\x85\xa4" => "\xe2\x85\xb4",
+	"\xe2\x85\xa5" => "\xe2\x85\xb5",
+	"\xe2\x85\xa6" => "\xe2\x85\xb6",
+	"\xe2\x85\xa7" => "\xe2\x85\xb7",
+	"\xe2\x85\xa8" => "\xe2\x85\xb8",
+	"\xe2\x85\xa9" => "\xe2\x85\xb9",
+	"\xe2\x85\xaa" => "\xe2\x85\xba",
+	"\xe2\x85\xab" => "\xe2\x85\xbb",
+	"\xe2\x85\xac" => "\xe2\x85\xbc",
+	"\xe2\x85\xad" => "\xe2\x85\xbd",
+	"\xe2\x85\xae" => "\xe2\x85\xbe",
+	"\xe2\x85\xaf" => "\xe2\x85\xbf",
+	"\xe2\x92\xb6" => "\xe2\x93\x90",
+	"\xe2\x92\xb7" => "\xe2\x93\x91",
+	"\xe2\x92\xb8" => "\xe2\x93\x92",
+	"\xe2\x92\xb9" => "\xe2\x93\x93",
+	"\xe2\x92\xba" => "\xe2\x93\x94",
+	"\xe2\x92\xbb" => "\xe2\x93\x95",
+	"\xe2\x92\xbc" => "\xe2\x93\x96",
+	"\xe2\x92\xbd" => "\xe2\x93\x97",
+	"\xe2\x92\xbe" => "\xe2\x93\x98",
+	"\xe2\x92\xbf" => "\xe2\x93\x99",
+	"\xe2\x93\x80" => "\xe2\x93\x9a",
+	"\xe2\x93\x81" => "\xe2\x93\x9b",
+	"\xe2\x93\x82" => "\xe2\x93\x9c",
+	"\xe2\x93\x83" => "\xe2\x93\x9d",
+	"\xe2\x93\x84" => "\xe2\x93\x9e",
+	"\xe2\x93\x85" => "\xe2\x93\x9f",
+	"\xe2\x93\x86" => "\xe2\x93\xa0",
+	"\xe2\x93\x87" => "\xe2\x93\xa1",
+	"\xe2\x93\x88" => "\xe2\x93\xa2",
+	"\xe2\x93\x89" => "\xe2\x93\xa3",
+	"\xe2\x93\x8a" => "\xe2\x93\xa4",
+	"\xe2\x93\x8b" => "\xe2\x93\xa5",
+	"\xe2\x93\x8c" => "\xe2\x93\xa6",
+	"\xe2\x93\x8d" => "\xe2\x93\xa7",
+	"\xe2\x93\x8e" => "\xe2\x93\xa8",
+	"\xe2\x93\x8f" => "\xe2\x93\xa9",
+	"\xef\xbc\xa1" => "\xef\xbd\x81",
+	"\xef\xbc\xa2" => "\xef\xbd\x82",
+	"\xef\xbc\xa3" => "\xef\xbd\x83",
+	"\xef\xbc\xa4" => "\xef\xbd\x84",
+	"\xef\xbc\xa5" => "\xef\xbd\x85",
+	"\xef\xbc\xa6" => "\xef\xbd\x86",
+	"\xef\xbc\xa7" => "\xef\xbd\x87",
+	"\xef\xbc\xa8" => "\xef\xbd\x88",
+	"\xef\xbc\xa9" => "\xef\xbd\x89",
+	"\xef\xbc\xaa" => "\xef\xbd\x8a",
+	"\xef\xbc\xab" => "\xef\xbd\x8b",
+	"\xef\xbc\xac" => "\xef\xbd\x8c",
+	"\xef\xbc\xad" => "\xef\xbd\x8d",
+	"\xef\xbc\xae" => "\xef\xbd\x8e",
+	"\xef\xbc\xaf" => "\xef\xbd\x8f",
+	"\xef\xbc\xb0" => "\xef\xbd\x90",
+	"\xef\xbc\xb1" => "\xef\xbd\x91",
+	"\xef\xbc\xb2" => "\xef\xbd\x92",
+	"\xef\xbc\xb3" => "\xef\xbd\x93",
+	"\xef\xbc\xb4" => "\xef\xbd\x94",
+	"\xef\xbc\xb5" => "\xef\xbd\x95",
+	"\xef\xbc\xb6" => "\xef\xbd\x96",
+	"\xef\xbc\xb7" => "\xef\xbd\x97",
+	"\xef\xbc\xb8" => "\xef\xbd\x98",
+	"\xef\xbc\xb9" => "\xef\xbd\x99",
+	"\xef\xbc\xba" => "\xef\xbd\x9a",
+	"\xf0\x90\x90\x80" => "\xf0\x90\x90\xa8",
+	"\xf0\x90\x90\x81" => "\xf0\x90\x90\xa9",
+	"\xf0\x90\x90\x82" => "\xf0\x90\x90\xaa",
+	"\xf0\x90\x90\x83" => "\xf0\x90\x90\xab",
+	"\xf0\x90\x90\x84" => "\xf0\x90\x90\xac",
+	"\xf0\x90\x90\x85" => "\xf0\x90\x90\xad",
+	"\xf0\x90\x90\x86" => "\xf0\x90\x90\xae",
+	"\xf0\x90\x90\x87" => "\xf0\x90\x90\xaf",
+	"\xf0\x90\x90\x88" => "\xf0\x90\x90\xb0",
+	"\xf0\x90\x90\x89" => "\xf0\x90\x90\xb1",
+	"\xf0\x90\x90\x8a" => "\xf0\x90\x90\xb2",
+	"\xf0\x90\x90\x8b" => "\xf0\x90\x90\xb3",
+	"\xf0\x90\x90\x8c" => "\xf0\x90\x90\xb4",
+	"\xf0\x90\x90\x8d" => "\xf0\x90\x90\xb5",
+	"\xf0\x90\x90\x8e" => "\xf0\x90\x90\xb6",
+	"\xf0\x90\x90\x8f" => "\xf0\x90\x90\xb7",
+	"\xf0\x90\x90\x90" => "\xf0\x90\x90\xb8",
+	"\xf0\x90\x90\x91" => "\xf0\x90\x90\xb9",
+	"\xf0\x90\x90\x92" => "\xf0\x90\x90\xba",
+	"\xf0\x90\x90\x93" => "\xf0\x90\x90\xbb",
+	"\xf0\x90\x90\x94" => "\xf0\x90\x90\xbc",
+	"\xf0\x90\x90\x95" => "\xf0\x90\x90\xbd",
+	"\xf0\x90\x90\x96" => "\xf0\x90\x90\xbe",
+	"\xf0\x90\x90\x97" => "\xf0\x90\x90\xbf",
+	"\xf0\x90\x90\x98" => "\xf0\x90\x91\x80",
+	"\xf0\x90\x90\x99" => "\xf0\x90\x91\x81",
+	"\xf0\x90\x90\x9a" => "\xf0\x90\x91\x82",
+	"\xf0\x90\x90\x9b" => "\xf0\x90\x91\x83",
+	"\xf0\x90\x90\x9c" => "\xf0\x90\x91\x84",
+	"\xf0\x90\x90\x9d" => "\xf0\x90\x91\x85",
+	"\xf0\x90\x90\x9e" => "\xf0\x90\x91\x86",
+	"\xf0\x90\x90\x9f" => "\xf0\x90\x91\x87",
+	"\xf0\x90\x90\xa0" => "\xf0\x90\x91\x88",
+	"\xf0\x90\x90\xa1" => "\xf0\x90\x91\x89",
+	"\xf0\x90\x90\xa2" => "\xf0\x90\x91\x8a",
+	"\xf0\x90\x90\xa3" => "\xf0\x90\x91\x8b",
+	"\xf0\x90\x90\xa4" => "\xf0\x90\x91\x8c",
+	"\xf0\x90\x90\xa5" => "\xf0\x90\x91\x8d"
+);
+
+?>
Index: /MediaWiki/branches/1.11/includes/WatchedItem.php
===================================================================
--- /MediaWiki/branches/1.11/includes/WatchedItem.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/WatchedItem.php	(revision 1280)
@@ -0,0 +1,168 @@
+<?php
+/**
+ *
+ */
+
+/**
+ *
+ */
+class WatchedItem {
+	var $mTitle, $mUser;
+
+	/**
+	 * Create a WatchedItem object with the given user and title
+	 * @todo document
+	 * @access private
+	 */
+	function &fromUserTitle( &$user, &$title ) {
+		$wl = new WatchedItem;
+		$wl->mUser =& $user;
+		$wl->mTitle =& $title;
+		$wl->id = $user->getId();
+# Patch (also) for email notification on page changes T.Gries/M.Arndt 11.09.2004
+# TG patch: here we do not consider pages and their talk pages equivalent - why should we ?
+# The change results in talk-pages not automatically included in watchlists, when their parent page is included
+#		$wl->ns = $title->getNamespace() & ~1;
+		$wl->ns = $title->getNamespace();
+
+		$wl->ti = $title->getDBkey();
+		return $wl;
+	}
+
+	/**
+	 * Is mTitle being watched by mUser?
+	 */
+	function isWatched() {
+		# Pages and their talk pages are considered equivalent for watching;
+		# remember that talk namespaces are numbered as page namespace+1.
+		$fname = 'WatchedItem::isWatched';
+
+		$dbr = wfGetDB( DB_SLAVE );
+		$res = $dbr->select( 'watchlist', 1, array( 'wl_user' => $this->id, 'wl_namespace' => $this->ns,
+			'wl_title' => $this->ti ), $fname );
+		$iswatched = ($dbr->numRows( $res ) > 0) ? 1 : 0;
+		return $iswatched;
+	}
+
+	/**
+	 * @todo document
+	 */
+	function addWatch() {
+		$fname = 'WatchedItem::addWatch';
+		wfProfileIn( $fname );
+
+		// Use INSERT IGNORE to avoid overwriting the notification timestamp
+		// if there's already an entry for this page
+		$dbw = wfGetDB( DB_MASTER );
+		$dbw->insert( 'watchlist',
+		  array(
+		    'wl_user' => $this->id,
+			'wl_namespace' => ($this->ns & ~1),
+			'wl_title' => $this->ti,
+			'wl_notificationtimestamp' => NULL
+		  ), $fname, 'IGNORE' );
+
+		// Every single watched page needs now to be listed in watchlist;
+		// namespace:page and namespace_talk:page need separate entries:
+		$dbw->insert( 'watchlist',
+		  array(
+			'wl_user' => $this->id,
+			'wl_namespace' => ($this->ns | 1 ),
+			'wl_title' => $this->ti,
+			'wl_notificationtimestamp' => NULL
+		  ), $fname, 'IGNORE' );
+
+		wfProfileOut( $fname );
+		return true;
+	}
+
+	function removeWatch() {
+		$fname = 'WatchedItem::removeWatch';
+
+		$success = false;
+		$dbw = wfGetDB( DB_MASTER );
+		$dbw->delete( 'watchlist',
+			array(
+				'wl_user' => $this->id,
+				'wl_namespace' => ($this->ns & ~1),
+				'wl_title' => $this->ti
+			), $fname
+		);
+		if ( $dbw->affectedRows() ) {
+			$success = true;
+		}
+
+		# the following code compensates the new behaviour, introduced by the
+		# enotif patch, that every single watched page needs now to be listed
+		# in watchlist namespace:page and namespace_talk:page had separate
+		# entries: clear them
+		$dbw->delete( 'watchlist',
+			array(
+				'wl_user' => $this->id,
+				'wl_namespace' => ($this->ns | 1),
+				'wl_title' => $this->ti
+			), $fname
+		);
+
+		if ( $dbw->affectedRows() ) {
+			$success = true;
+		}
+		return $success;
+	}
+
+	/**
+	 * Check if the given title already is watched by the user, and if so
+	 * add watches on a new title. To be used for page renames and such.
+	 *
+	 * @param Title $ot Page title to duplicate entries from, if present
+	 * @param Title $nt Page title to add watches on
+	 * @static
+	 */
+	function duplicateEntries( $ot, $nt ) {
+		WatchedItem::doDuplicateEntries( $ot->getSubjectPage(), $nt->getSubjectPage() );
+		WatchedItem::doDuplicateEntries( $ot->getTalkPage(), $nt->getTalkPage() );
+	}
+
+	/**
+	 * @static
+	 * @access private
+	 */
+	function doDuplicateEntries( $ot, $nt ) {
+		$fname = "WatchedItem::duplicateEntries";
+		$oldnamespace = $ot->getNamespace();
+		$newnamespace = $nt->getNamespace();
+		$oldtitle = $ot->getDBkey();
+		$newtitle = $nt->getDBkey();
+
+		$dbw = wfGetDB( DB_MASTER );
+		$res = $dbw->select( 'watchlist', 'wl_user',
+			array( 'wl_namespace' => $oldnamespace, 'wl_title' => $oldtitle ),
+			$fname, 'FOR UPDATE'
+		);
+		# Construct array to replace into the watchlist
+		$values = array();
+		while ( $s = $dbw->fetchObject( $res ) ) {
+			$values[] = array(
+				'wl_user' => $s->wl_user,
+				'wl_namespace' => $newnamespace,
+				'wl_title' => $newtitle
+			);
+		}
+		$dbw->freeResult( $res );
+
+		if( empty( $values ) ) {
+			// Nothing to do
+			return true;
+		}
+
+		# Perform replace
+		# Note that multi-row replace is very efficient for MySQL but may be inefficient for
+		# some other DBMSes, mostly due to poor simulation by us
+		$dbw->replace( 'watchlist', array(array( 'wl_user', 'wl_namespace', 'wl_title')), $values, $fname );
+		return true;
+	}
+
+
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/WebRequest.php
===================================================================
--- /MediaWiki/branches/1.11/includes/WebRequest.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/WebRequest.php	(revision 1280)
@@ -0,0 +1,546 @@
+<?php
+/**
+ * Deal with importing all those nasssty globals and things
+ */
+
+# Copyright (C) 2003 Brion Vibber <brion@pobox.com>
+# http://www.mediawiki.org/
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+# http://www.gnu.org/copyleft/gpl.html
+
+
+/**
+ * Some entry points may use this file without first enabling the 
+ * autoloader.
+ */
+if ( !function_exists( '__autoload' ) ) {
+	require_once( dirname(__FILE__) . '/normal/UtfNormal.php' );
+}
+
+/**
+ * The WebRequest class encapsulates getting at data passed in the
+ * URL or via a POSTed form, handling remove of "magic quotes" slashes,
+ * stripping illegal input characters and normalizing Unicode sequences.
+ *
+ * Usually this is used via a global singleton, $wgRequest. You should
+ * not create a second WebRequest object; make a FauxRequest object if
+ * you want to pass arbitrary data to some function in place of the web
+ * input.
+ *
+ */
+class WebRequest {
+	function __construct() {
+		$this->checkMagicQuotes();
+		global $wgUsePathInfo;
+		if ( $wgUsePathInfo ) {
+			if ( isset( $_SERVER['ORIG_PATH_INFO'] ) && $_SERVER['ORIG_PATH_INFO'] != '' ) {
+				# Mangled PATH_INFO
+				# http://bugs.php.net/bug.php?id=31892
+				# Also reported when ini_get('cgi.fix_pathinfo')==false
+				$_GET['title'] = $_REQUEST['title'] = substr( $_SERVER['ORIG_PATH_INFO'], 1 );
+			} elseif ( isset( $_SERVER['PATH_INFO'] ) && ($_SERVER['PATH_INFO'] != '') && $wgUsePathInfo ) {
+				$_GET['title'] = $_REQUEST['title'] = substr( $_SERVER['PATH_INFO'], 1 );
+			}
+		}
+	}
+	
+	private $_response;
+
+	/**
+	 * Recursively strips slashes from the given array;
+	 * used for undoing the evil that is magic_quotes_gpc.
+	 * @param array &$arr will be modified
+	 * @return array the original array
+	 * @private
+	 */
+	function &fix_magic_quotes( &$arr ) {
+		foreach( $arr as $key => $val ) {
+			if( is_array( $val ) ) {
+				$this->fix_magic_quotes( $arr[$key] );
+			} else {
+				$arr[$key] = stripslashes( $val );
+			}
+		}
+		return $arr;
+	}
+
+	/**
+	 * If magic_quotes_gpc option is on, run the global arrays
+	 * through fix_magic_quotes to strip out the stupid slashes.
+	 * WARNING: This should only be done once! Running a second
+	 * time could damage the values.
+	 * @private
+	 */
+	function checkMagicQuotes() {
+		if ( get_magic_quotes_gpc() ) {
+			$this->fix_magic_quotes( $_COOKIE );
+			$this->fix_magic_quotes( $_ENV );
+			$this->fix_magic_quotes( $_GET );
+			$this->fix_magic_quotes( $_POST );
+			$this->fix_magic_quotes( $_REQUEST );
+			$this->fix_magic_quotes( $_SERVER );
+		}
+	}
+
+	/**
+	 * Recursively normalizes UTF-8 strings in the given array.
+	 * @param array $data string or array
+	 * @return cleaned-up version of the given
+	 * @private
+	 */
+	function normalizeUnicode( $data ) {
+		if( is_array( $data ) ) {
+			foreach( $data as $key => $val ) {
+				$data[$key] = $this->normalizeUnicode( $val );
+			}
+		} else {
+			$data = UtfNormal::cleanUp( $data );
+		}
+		return $data;
+	}
+
+	/**
+	 * Fetch a value from the given array or return $default if it's not set.
+	 *
+	 * @param array $arr
+	 * @param string $name
+	 * @param mixed $default
+	 * @return mixed
+	 * @private
+	 */
+	function getGPCVal( $arr, $name, $default ) {
+		if( isset( $arr[$name] ) ) {
+			global $wgContLang;
+			$data = $arr[$name];
+			if( isset( $_GET[$name] ) && !is_array( $data ) ) {
+				# Check for alternate/legacy character encoding.
+				if( isset( $wgContLang ) ) {
+					$data = $wgContLang->checkTitleEncoding( $data );
+				}
+			}
+			$data = $this->normalizeUnicode( $data );
+			return $data;
+		} else {
+			return $default;
+		}
+	}
+
+	/**
+	 * Fetch a scalar from the input or return $default if it's not set.
+	 * Returns a string. Arrays are discarded. Useful for 
+	 * non-freeform text inputs (e.g. predefined internal text keys 
+	 * selected by a drop-down menu). For freeform input, see getText().
+	 *
+	 * @param string $name
+	 * @param string $default optional default (or NULL)
+	 * @return string
+	 */
+	function getVal( $name, $default = NULL ) {
+		$val = $this->getGPCVal( $_REQUEST, $name, $default );
+		if( is_array( $val ) ) {
+			$val = $default;
+		}
+		if( is_null( $val ) ) {
+			return null;
+		} else {
+			return (string)$val;
+		}
+	}
+
+	/**
+	 * Fetch an array from the input or return $default if it's not set.
+	 * If source was scalar, will return an array with a single element.
+	 * If no source and no default, returns NULL.
+	 *
+	 * @param string $name
+	 * @param array $default optional default (or NULL)
+	 * @return array
+	 */
+	function getArray( $name, $default = NULL ) {
+		$val = $this->getGPCVal( $_REQUEST, $name, $default );
+		if( is_null( $val ) ) {
+			return null;
+		} else {
+			return (array)$val;
+		}
+	}
+	
+	/**
+	 * Fetch an array of integers, or return $default if it's not set.
+	 * If source was scalar, will return an array with a single element.
+	 * If no source and no default, returns NULL.
+	 * If an array is returned, contents are guaranteed to be integers.
+	 *
+	 * @param string $name
+	 * @param array $default option default (or NULL)
+	 * @return array of ints
+	 */
+	function getIntArray( $name, $default = NULL ) {
+		$val = $this->getArray( $name, $default );
+		if( is_array( $val ) ) {
+			$val = array_map( 'intval', $val );
+		}
+		return $val;
+	}
+
+	/**
+	 * Fetch an integer value from the input or return $default if not set.
+	 * Guaranteed to return an integer; non-numeric input will typically
+	 * return 0.
+	 * @param string $name
+	 * @param int $default
+	 * @return int
+	 */
+	function getInt( $name, $default = 0 ) {
+		return intval( $this->getVal( $name, $default ) );
+	}
+
+	/**
+	 * Fetch an integer value from the input or return null if empty.
+	 * Guaranteed to return an integer or null; non-numeric input will
+	 * typically return null.
+	 * @param string $name
+	 * @return int
+	 */
+	function getIntOrNull( $name ) {
+		$val = $this->getVal( $name );
+		return is_numeric( $val )
+			? intval( $val )
+			: null;
+	}
+
+	/**
+	 * Fetch a boolean value from the input or return $default if not set.
+	 * Guaranteed to return true or false, with normal PHP semantics for
+	 * boolean interpretation of strings.
+	 * @param string $name
+	 * @param bool $default
+	 * @return bool
+	 */
+	function getBool( $name, $default = false ) {
+		return $this->getVal( $name, $default ) ? true : false;
+	}
+
+	/**
+	 * Return true if the named value is set in the input, whatever that
+	 * value is (even "0"). Return false if the named value is not set.
+	 * Example use is checking for the presence of check boxes in forms.
+	 * @param string $name
+	 * @return bool
+	 */
+	function getCheck( $name ) {
+		# Checkboxes and buttons are only present when clicked
+		# Presence connotes truth, abscense false
+		$val = $this->getVal( $name, NULL );
+		return isset( $val );
+	}
+
+	/**
+	 * Fetch a text string from the given array or return $default if it's not
+	 * set. \r is stripped from the text, and with some language modules there
+	 * is an input transliteration applied. This should generally be used for
+	 * form <textarea> and <input> fields. Used for user-supplied freeform text
+	 * input (for which input transformations may be required - e.g. Esperanto 
+	 * x-coding).
+	 *
+	 * @param string $name
+	 * @param string $default optional
+	 * @return string
+	 */
+	function getText( $name, $default = '' ) {
+		global $wgContLang;
+		$val = $this->getVal( $name, $default );
+		return str_replace( "\r\n", "\n",
+			$wgContLang->recodeInput( $val ) );
+	}
+
+	/**
+	 * Extracts the given named values into an array.
+	 * If no arguments are given, returns all input values.
+	 * No transformation is performed on the values.
+	 */
+	function getValues() {
+		$names = func_get_args();
+		if ( count( $names ) == 0 ) {
+			$names = array_keys( $_REQUEST );
+		}
+
+		$retVal = array();
+		foreach ( $names as $name ) {
+			$value = $this->getVal( $name );
+			if ( !is_null( $value ) ) {
+				$retVal[$name] = $value;
+			}
+		}
+		return $retVal;
+	}
+
+	/**
+	 * Returns true if the present request was reached by a POST operation,
+	 * false otherwise (GET, HEAD, or command-line).
+	 *
+	 * Note that values retrieved by the object may come from the
+	 * GET URL etc even on a POST request.
+	 *
+	 * @return bool
+	 */
+	function wasPosted() {
+		return $_SERVER['REQUEST_METHOD'] == 'POST';
+	}
+
+	/**
+	 * Returns true if there is a session cookie set.
+	 * This does not necessarily mean that the user is logged in!
+	 *
+	 * If you want to check for an open session, use session_id()
+	 * instead; that will also tell you if the session was opened
+	 * during the current request (in which case the cookie will
+	 * be sent back to the client at the end of the script run).
+	 *
+	 * @return bool
+	 */
+	function checkSessionCookie() {
+		return isset( $_COOKIE[session_name()] );
+	}
+
+	/**
+	 * Return the path portion of the request URI.
+	 * @return string
+	 */
+	function getRequestURL() {
+		if( isset( $_SERVER['REQUEST_URI'] ) ) {
+			$base = $_SERVER['REQUEST_URI'];
+		} elseif( isset( $_SERVER['SCRIPT_NAME'] ) ) {
+			// Probably IIS; doesn't set REQUEST_URI
+			$base = $_SERVER['SCRIPT_NAME'];
+			if( isset( $_SERVER['QUERY_STRING'] ) && $_SERVER['QUERY_STRING'] != '' ) {
+				$base .= '?' . $_SERVER['QUERY_STRING'];
+			}
+		} else {
+			// This shouldn't happen!
+			throw new MWException( "Web server doesn't provide either " .
+				"REQUEST_URI or SCRIPT_NAME. Report details of your " .
+				"web server configuration to http://bugzilla.wikimedia.org/" );
+		}
+		// User-agents should not send a fragment with the URI, but
+		// if they do, and the web server passes it on to us, we
+		// need to strip it or we get false-positive redirect loops
+		// or weird output URLs
+		$hash = strpos( $base, '#' );
+		if( $hash !== false ) {
+			$base = substr( $base, 0, $hash );
+		}
+		if( $base{0} == '/' ) {
+			return $base;
+		} else {
+			// We may get paths with a host prepended; strip it.
+			return preg_replace( '!^[^:]+://[^/]+/!', '/', $base );
+		}
+	}
+
+	/**
+	 * Return the request URI with the canonical service and hostname.
+	 * @return string
+	 */
+	function getFullRequestURL() {
+		global $wgServer;
+		return $wgServer . $this->getRequestURL();
+	}
+
+	/**
+	 * Take an arbitrary query and rewrite the present URL to include it
+	 * @param $query String: query string fragment; do not include initial '?'
+	 * @return string
+	 */
+	function appendQuery( $query ) {
+		global $wgTitle;
+		$basequery = '';
+		foreach( $_GET as $var => $val ) {
+			if ( $var == 'title' )
+				continue;
+			if ( is_array( $val ) )
+				/* This will happen given a request like
+				 * http://en.wikipedia.org/w/index.php?title[]=Special:Userlogin&returnto[]=Main_Page
+				 */
+				continue;
+			$basequery .= '&' . urlencode( $var ) . '=' . urlencode( $val );
+		}
+		$basequery .= '&' . $query;
+
+		# Trim the extra &
+		$basequery = substr( $basequery, 1 );
+		return $wgTitle->getLocalURL( $basequery );
+	}
+
+	/**
+	 * HTML-safe version of appendQuery().
+	 * @param $query String: query string fragment; do not include initial '?'
+	 * @return string
+	 */
+	function escapeAppendQuery( $query ) {
+		return htmlspecialchars( $this->appendQuery( $query ) );
+	}
+
+	/**
+	 * Check for limit and offset parameters on the input, and return sensible
+	 * defaults if not given. The limit must be positive and is capped at 5000.
+	 * Offset must be positive but is not capped.
+	 *
+	 * @param $deflimit Integer: limit to use if no input and the user hasn't set the option.
+	 * @param $optionname String: to specify an option other than rclimit to pull from.
+	 * @return array first element is limit, second is offset
+	 */
+	function getLimitOffset( $deflimit = 50, $optionname = 'rclimit' ) {
+		global $wgUser;
+
+		$limit = $this->getInt( 'limit', 0 );
+		if( $limit < 0 ) $limit = 0;
+		if( ( $limit == 0 ) && ( $optionname != '' ) ) {
+			$limit = (int)$wgUser->getOption( $optionname );
+		}
+		if( $limit <= 0 ) $limit = $deflimit;
+		if( $limit > 5000 ) $limit = 5000; # We have *some* limits...
+
+		$offset = $this->getInt( 'offset', 0 );
+		if( $offset < 0 ) $offset = 0;
+
+		return array( $limit, $offset );
+	}
+
+	/**
+	 * Return the path to the temporary file where PHP has stored the upload.
+	 * @param $key String:
+	 * @return string or NULL if no such file.
+	 */
+	function getFileTempname( $key ) {
+		if( !isset( $_FILES[$key] ) ) {
+			return NULL;
+		}
+		return $_FILES[$key]['tmp_name'];
+	}
+
+	/**
+	 * Return the size of the upload, or 0.
+	 * @param $key String:
+	 * @return integer
+	 */
+	function getFileSize( $key ) {
+		if( !isset( $_FILES[$key] ) ) {
+			return 0;
+		}
+		return $_FILES[$key]['size'];
+	}
+
+	/**
+	 * Return the upload error or 0
+	 * @param $key String:
+	 * @return integer
+	 */
+	function getUploadError( $key ) {
+		if( !isset( $_FILES[$key] ) || !isset( $_FILES[$key]['error'] ) ) {
+			return 0/*UPLOAD_ERR_OK*/;
+		}
+		return $_FILES[$key]['error'];
+	}
+
+	/**
+	 * Return the original filename of the uploaded file, as reported by
+	 * the submitting user agent. HTML-style character entities are
+	 * interpreted and normalized to Unicode normalization form C, in part
+	 * to deal with weird input from Safari with non-ASCII filenames.
+	 *
+	 * Other than this the name is not verified for being a safe filename.
+	 *
+	 * @param $key String: 
+	 * @return string or NULL if no such file.
+	 */
+	function getFileName( $key ) {
+		if( !isset( $_FILES[$key] ) ) {
+			return NULL;
+		}
+		$name = $_FILES[$key]['name'];
+
+		# Safari sends filenames in HTML-encoded Unicode form D...
+		# Horrid and evil! Let's try to make some kind of sense of it.
+		$name = Sanitizer::decodeCharReferences( $name );
+		$name = UtfNormal::cleanUp( $name );
+		wfDebug( "WebRequest::getFileName() '" . $_FILES[$key]['name'] . "' normalized to '$name'\n" );
+		return $name;
+	}
+	
+	/**
+	 * Return a handle to WebResponse style object, for setting cookies, 
+	 * headers and other stuff, for Request being worked on.
+	 */
+	function response() {
+		/* Lazy initialization of response object for this request */
+		if (!is_object($this->_response)) {
+			$this->_response = new WebResponse;
+		} 
+		return $this->_response;
+	}
+	
+}
+
+/**
+ * WebRequest clone which takes values from a provided array.
+ *
+ */
+class FauxRequest extends WebRequest {
+	var $data = null;
+	var $wasPosted = false;
+
+	function FauxRequest( $data, $wasPosted = false ) {
+		if( is_array( $data ) ) {
+			$this->data = $data;
+		} else {
+			throw new MWException( "FauxRequest() got bogus data" );
+		}
+		$this->wasPosted = $wasPosted;
+	}
+
+	function getVal( $name, $default = NULL ) {
+		return $this->getGPCVal( $this->data, $name, $default );
+	}
+
+	function getText( $name, $default = '' ) {
+		# Override; don't recode since we're using internal data
+		return $this->getVal( $name, $default );
+	}
+
+	function getValues() {
+		return $this->data;
+	}
+
+	function wasPosted() {
+		return $this->wasPosted;
+	}
+
+	function checkSessionCookie() {
+		return false;
+	}
+
+	function getRequestURL() {
+		throw new MWException( 'FauxRequest::getRequestURL() not implemented' );
+	}
+
+	function appendQuery( $query ) {
+		throw new MWException( 'FauxRequest::appendQuery() not implemented' );
+	}
+
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/WebResponse.php
===================================================================
--- /MediaWiki/branches/1.11/includes/WebResponse.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/WebResponse.php	(revision 1280)
@@ -0,0 +1,20 @@
+<?php
+/**
+ * Allow programs to request this object from WebRequest::response()
+ * and handle all outputting (or lack of outputting) via it.
+ */
+class WebResponse {
+
+	/** Output a HTTP header */
+	function header($string, $replace=true) {
+		header($string,$replace);
+	}
+
+	/** Set the browser cookie */
+	function setcookie($name, $value, $expire) {
+		global $wgCookiePath, $wgCookieDomain, $wgCookieSecure;
+		setcookie($name,$value,$expire, $wgCookiePath, $wgCookieDomain, $wgCookieSecure);
+	}
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/WebStart.php
===================================================================
--- /MediaWiki/branches/1.11/includes/WebStart.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/WebStart.php	(revision 1280)
@@ -0,0 +1,104 @@
+<?php
+
+# This does the initial setup for a web request. It does some security checks, 
+# starts the profiler and loads the configuration, and optionally loads 
+# Setup.php depending on whether MW_NO_SETUP is defined.
+
+# Test for PHP bug which breaks PHP 5.0.x on 64-bit...
+# As of 1.8 this breaks lots of common operations instead
+# of just some rare ones like export.
+$borked = str_replace( 'a', 'b', array( -1 => -1 ) );
+if( !isset( $borked[-1] ) ) {
+	echo "PHP 5.0.x is buggy on your 64-bit system; you must upgrade to PHP 5.1.x\n" .
+	     "or higher. ABORTING. (http://bugs.php.net/bug.php?id=34879 for details)\n";
+	die( -1 );
+}
+
+# Protect against register_globals
+# This must be done before any globals are set by the code
+if ( ini_get( 'register_globals' ) ) {
+	if ( isset( $_REQUEST['GLOBALS'] ) ) {
+		die( '<a href="http://www.hardened-php.net/index.76.html">$GLOBALS overwrite vulnerability</a>');
+	}
+	$verboten = array(
+		'GLOBALS',
+		'_SERVER',
+		'HTTP_SERVER_VARS',
+		'_GET',
+		'HTTP_GET_VARS',
+		'_POST',
+		'HTTP_POST_VARS',
+		'_COOKIE',
+		'HTTP_COOKIE_VARS',
+		'_FILES',
+		'HTTP_POST_FILES',
+		'_ENV',
+		'HTTP_ENV_VARS',
+		'_REQUEST',
+		'_SESSION',
+		'HTTP_SESSION_VARS'
+	);
+	foreach ( $_REQUEST as $name => $value ) {
+		if( in_array( $name, $verboten ) ) {
+			header( "HTTP/1.x 500 Internal Server Error" );
+			echo "register_globals security paranoia: trying to overwrite superglobals, aborting.";
+			die( -1 );
+		}
+		unset( $GLOBALS[$name] );
+	}
+}
+
+$wgRequestTime = microtime(true);
+# getrusage() does not exist on the Microsoft Windows platforms, catching this
+if ( function_exists ( 'getrusage' ) ) {
+	$wgRUstart = getrusage();
+} else {
+	$wgRUstart = array();
+}
+unset( $IP );
+@ini_set( 'allow_url_fopen', 0 ); # For security
+
+# Valid web server entry point, enable includes.
+# Please don't move this line to includes/Defines.php. This line essentially
+# defines a valid entry point. If you put it in includes/Defines.php, then
+# any script that includes it becomes an entry point, thereby defeating
+# its purpose.
+define( 'MEDIAWIKI', true );
+
+# Start profiler
+require_once( './StartProfiler.php' );
+wfProfileIn( 'WebStart.php-conf' );
+
+# Load up some global defines.
+require_once( './includes/Defines.php' );
+
+# LocalSettings.php is the per site customization file. If it does not exit
+# the wiki installer need to be launched or the generated file moved from
+# ./config/ to ./
+if( !file_exists( './LocalSettings.php' ) ) {
+	$IP = '.';
+	require_once( './includes/DefaultSettings.php' ); # used for printing the version
+	require_once( './includes/templates/NoLocalSettings.php' );
+	die();
+}
+
+# Include this site setttings
+require_once( './LocalSettings.php' );
+wfProfileOut( 'WebStart.php-conf' );
+wfProfileIn( 'WebStart.php-ob_start' );
+
+# Initialise output buffering
+if ( ob_get_level() ) {
+	# Someone's been mixing configuration data with code!
+	# How annoying.
+} elseif ( !defined( 'MW_NO_OUTPUT_BUFFER' ) ) {
+	require_once( './includes/OutputHandler.php' );
+	ob_start( 'wfOutputHandler' );
+}
+
+wfProfileOut( 'WebStart.php-ob_start' );
+
+if ( !defined( 'MW_NO_SETUP' ) ) {
+	require_once( './includes/Setup.php' );
+}
+?>
Index: /MediaWiki/branches/1.11/includes/Wiki.php
===================================================================
--- /MediaWiki/branches/1.11/includes/Wiki.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/Wiki.php	(revision 1280)
@@ -0,0 +1,463 @@
+<?php
+/**
+ * MediaWiki is the to-be base class for this whole project
+ */
+
+class MediaWiki {
+
+	var $GET; /* Stores the $_GET variables at time of creation, can be changed */
+	var $params = array();
+
+	/** Constructor. It just save the $_GET variable */
+	function __construct() {
+		$this->GET = $_GET;
+	}
+
+	/**
+	 * Stores key/value pairs to circumvent global variables
+	 * Note that keys are case-insensitive!
+	 */
+	function setVal( $key, &$value ) {
+		$key = strtolower( $key );
+		$this->params[$key] =& $value;
+	}
+
+	/**
+	 * Retrieves key/value pairs to circumvent global variables
+	 * Note that keys are case-insensitive!
+	 */
+	function getVal( $key, $default = '' ) {
+		$key = strtolower( $key );
+		if( isset( $this->params[$key] ) ) {
+			return $this->params[$key];
+		}
+		return $default;
+	}
+
+	/**
+	 * Initialization of ... everything
+	 @return Article either the object to become $wgArticle, or NULL
+	 */
+	function initialize ( &$title, &$output, &$user, $request) {
+		wfProfileIn( 'MediaWiki::initialize' );
+		$this->preliminaryChecks ( $title, $output, $request ) ;
+		$article = NULL;
+		if ( !$this->initializeSpecialCases( $title, $output, $request ) ) {
+			$article = $this->initializeArticle( $title, $request );
+			if( is_object( $article ) ) {
+				$this->performAction( $output, $article, $title, $user, $request );
+			} elseif( is_string( $article ) ) {
+				$output->redirect( $article );
+			} else {
+				throw new MWException( "Shouldn't happen: MediaWiki::initializeArticle() returned neither an object nor a URL" );
+			}
+		}
+		wfProfileOut( 'MediaWiki::initialize' );
+		return $article;
+	}
+
+	function checkMaxLag( $maxLag ) {
+		global $wgLoadBalancer;
+		list( $host, $lag ) = $wgLoadBalancer->getMaxLag();
+		if ( $lag > $maxLag ) {
+			header( 'HTTP/1.1 503 Service Unavailable' );
+			header( 'Retry-After: ' . max( intval( $maxLag ), 5 ) );
+			header( 'X-Database-Lag: ' . intval( $lag ) );
+			header( 'Content-Type: text/plain' );
+			echo "Waiting for $host: $lag seconds lagged\n";
+			return false;
+		} else {
+			return true;
+		}
+	}
+
+
+	/**
+	 * Checks some initial queries
+	 * Note that $title here is *not* a Title object, but a string!
+	 */
+	function checkInitialQueries( $title,$action,&$output,$request, $lang) {
+		if ($request->getVal( 'printable' ) == 'yes') {
+			$output->setPrintable();
+		}
+
+		$ret = NULL ;
+
+
+		if ( '' == $title && 'delete' != $action ) {
+			$ret = Title::newMainPage();
+		} elseif ( $curid = $request->getInt( 'curid' ) ) {
+			# URLs like this are generated by RC, because rc_title isn't always accurate
+			$ret = Title::newFromID( $curid );
+		} else {
+			$ret = Title::newFromURL( $title );
+			/* check variant links so that interwiki links don't have to worry about
+			   the possible different language variants
+			*/
+			if( count($lang->getVariants()) > 1 && !is_null($ret) && $ret->getArticleID() == 0 )
+				$lang->findVariantLink( $title, $ret );
+
+		}
+		return $ret ;
+	}
+
+	/**
+	 * Checks for search query and anon-cannot-read case
+	 */
+	function preliminaryChecks ( &$title, &$output, $request ) {
+
+		# Debug statement for user levels
+		// print_r($wgUser);
+
+		$search = $request->getText( 'search' );
+		if( !is_null( $search ) && $search !== '' ) {
+			// Compatibility with old search URLs which didn't use Special:Search
+			// Do this above the read whitelist check for security...
+			$title = SpecialPage::getTitleFor( 'Search' );
+		}
+		$this->setVal( 'Search', $search );
+
+		# If the user is not logged in, the Namespace:title of the article must be in
+		# the Read array in order for the user to see it. (We have to check here to
+		# catch special pages etc. We check again in Article::view())
+		if ( !is_null( $title ) && !$title->userCanRead() ) {
+			$output->loginToUse();
+			$output->output();
+			exit;
+		}
+
+	}
+
+	/**
+	 * Initialize the object to be known as $wgArticle for special cases
+	 */
+	function initializeSpecialCases ( &$title, &$output, $request ) {
+		global $wgRequest;
+		wfProfileIn( 'MediaWiki::initializeSpecialCases' );
+
+		$search = $this->getVal('Search');
+		$action = $this->getVal('Action');
+		if( !$this->getVal('DisableInternalSearch') && !is_null( $search ) && $search !== '' ) {
+			require_once( 'includes/SpecialSearch.php' );
+			$title = SpecialPage::getTitleFor( 'Search' );
+			wfSpecialSearch();
+		} else if( !$title or $title->getDBkey() == '' ) {
+			$title = SpecialPage::getTitleFor( 'Badtitle' );
+			# Die now before we mess up $wgArticle and the skin stops working
+			throw new ErrorPageError( 'badtitle', 'badtitletext' );
+		} else if ( $title->getInterwiki() != '' ) {
+			if( $rdfrom = $request->getVal( 'rdfrom' ) ) {
+				$url = $title->getFullURL( 'rdfrom=' . urlencode( $rdfrom ) );
+			} else {
+				$url = $title->getFullURL();
+			}
+			/* Check for a redirect loop */
+			if ( !preg_match( '/^' . preg_quote( $this->getVal('Server'), '/' ) . '/', $url ) && $title->isLocal() ) {
+				$output->redirect( $url );
+			} else {
+				$title = SpecialPage::getTitleFor( 'Badtitle' );
+				throw new ErrorPageError( 'badtitle', 'badtitletext' );
+			}
+		} else if ( ( $action == 'view' ) &&
+			(!isset( $this->GET['title'] ) || $title->getPrefixedDBKey() != $this->GET['title'] ) &&
+			!count( array_diff( array_keys( $this->GET ), array( 'action', 'title' ) ) ) )
+		{
+			$targetUrl = $title->getFullURL();
+			// Redirect to canonical url, make it a 301 to allow caching
+			global $wgUsePathInfo;
+			if( $targetUrl == $wgRequest->getFullRequestURL() ) {
+				$message = "Redirect loop detected!\n\n" .
+					"This means the wiki got confused about what page was " .
+					"requested; this sometimes happens when moving a wiki " .
+					"to a new server or changing the server configuration.\n\n";
+
+				if( $wgUsePathInfo ) {
+					$message .= "The wiki is trying to interpret the page " .
+						"title from the URL path portion (PATH_INFO), which " .
+						"sometimes fails depending on the web server. Try " .
+						"setting \"\$wgUsePathInfo = false;\" in your " .
+						"LocalSettings.php, or check that \$wgArticlePath " .
+						"is correct.";
+				} else {
+					$message .= "Your web server was detected as possibly not " .
+						"supporting URL path components (PATH_INFO) correctly; " .
+						"check your LocalSettings.php for a customized " .
+						"\$wgArticlePath setting and/or toggle \$wgUsePathInfo " .
+						"to true.";
+				}
+				wfHttpError( 500, "Internal error", $message );
+				return false;
+			} else {
+				$output->setSquidMaxage( 1200 );
+				$output->redirect( $targetUrl, '301');
+			}
+		} else if ( NS_SPECIAL == $title->getNamespace() ) {
+			/* actions that need to be made when we have a special pages */
+			SpecialPage::executePath( $title );
+		} else {
+			/* No match to special cases */
+			wfProfileOut( 'MediaWiki::initializeSpecialCases' );
+			return false;
+		}
+		/* Did match a special case */
+		wfProfileOut( 'MediaWiki::initializeSpecialCases' );
+		return true;
+	}
+
+	/**
+	 * Create an Article object of the appropriate class for the given page.
+	 * @param Title $title
+	 * @return Article
+	 */
+	function articleFromTitle( $title ) {
+		$article = null;
+		wfRunHooks('ArticleFromTitle', array( &$title, &$article ) );
+		if ( $article ) {
+			return $article;
+		}
+
+		if( NS_MEDIA == $title->getNamespace() ) {
+			// FIXME: where should this go?
+			$title = Title::makeTitle( NS_IMAGE, $title->getDBkey() );
+		}
+
+		switch( $title->getNamespace() ) {
+		case NS_IMAGE:
+			return new ImagePage( $title );
+		case NS_CATEGORY:
+			return new CategoryPage( $title );
+		default:
+			return new Article( $title );
+		}
+	}
+
+	/**
+	 * Initialize the object to be known as $wgArticle for "standard" actions
+	 * Create an Article object for the page, following redirects if needed.
+	 * @param Title $title
+	 * @param Request $request
+	 * @param string $action
+	 * @return mixed an Article, or a string to redirect to another URL
+	 */
+	function initializeArticle( $title, $request ) {
+		global $wgTitle;
+		wfProfileIn( 'MediaWiki::initializeArticle' );
+
+		$action = $this->getVal('Action');
+		$article = $this->articleFromTitle( $title );
+
+		// Namespace might change when using redirects
+		if( $action == 'view' && !$request->getVal( 'oldid' ) &&
+						$request->getVal( 'redirect' ) != 'no' ) {
+
+			$dbr = wfGetDB(DB_SLAVE);
+			$article->loadPageData($article->pageDataFromTitle($dbr, $title));
+
+			/* Follow redirects only for... redirects */
+			if ($article->mIsRedirect) {
+				$target = $article->followRedirect();
+				if( is_string( $target ) ) {
+					global $wgDisableHardRedirects;
+					if( !$wgDisableHardRedirects ) {
+						// we'll need to redirect
+						return $target;
+					}
+				}
+				if( is_object( $target ) ) {
+					/* Rewrite environment to redirected article */
+					$rarticle = $this->articleFromTitle($target);
+					$rarticle->loadPageData($rarticle->pageDataFromTitle($dbr,$target));
+					if ($rarticle->mTitle->mArticleID) {
+						$article = $rarticle;
+						$wgTitle = $target;
+						$article->setRedirectedFrom( $title );
+					} else {
+						$wgTitle = $title;
+					}
+				}
+			} else {
+				$wgTitle = $article->mTitle;
+			}
+		}
+		wfProfileOut( 'MediaWiki::initializeArticle' );
+		return $article;
+	}
+
+	/**
+	 * Cleaning up by doing deferred updates, calling loadbalancer and doing the output
+	 */
+	function finalCleanup ( &$deferredUpdates, &$loadBalancer, &$output ) {
+		wfProfileIn( 'MediaWiki::finalCleanup' );
+		$this->doUpdates( $deferredUpdates );
+		$this->doJobs();
+		$loadBalancer->saveMasterPos();
+		# Now commit any transactions, so that unreported errors after output() don't roll back the whole thing
+		$loadBalancer->commitAll();
+		$output->output();
+		wfProfileOut( 'MediaWiki::finalCleanup' );
+	}
+
+	/**
+	 * Deferred updates aren't really deferred anymore. It's important to report errors to the
+	 * user, and that means doing this before OutputPage::output(). Note that for page saves,
+	 * the client will wait until the script exits anyway before following the redirect.
+	 */
+	function doUpdates ( &$updates ) {
+		wfProfileIn( 'MediaWiki::doUpdates' );
+		$dbw = wfGetDB( DB_MASTER );
+		foreach( $updates as $up ) {
+			$up->doUpdate();
+
+			# Commit after every update to prevent lock contention
+			if ( $dbw->trxLevel() ) {
+				$dbw->commit();
+			}
+		}
+		wfProfileOut( 'MediaWiki::doUpdates' );
+	}
+
+	/**
+	 * Do a job from the job queue
+	 */
+	function doJobs() {
+		global $wgJobRunRate;
+
+		if ( $wgJobRunRate <= 0 || wfReadOnly() ) {
+			return;
+		}
+		if ( $wgJobRunRate < 1 ) {
+			$max = mt_getrandmax();
+			if ( mt_rand( 0, $max ) > $max * $wgJobRunRate ) {
+				return;
+			}
+			$n = 1;
+		} else {
+			$n = intval( $wgJobRunRate );
+		}
+
+		while ( $n-- && false != ($job = Job::pop())) {
+			$output = $job->toString() . "\n";
+			$t = -wfTime();
+			$success = $job->run();
+			$t += wfTime();
+			$t = round( $t*1000 );
+			if ( !$success ) {
+				$output .= "Error: " . $job->getLastError() . ", Time: $t ms\n";
+			} else {
+				$output .= "Success, Time: $t ms\n";
+			}
+			wfDebugLog( 'jobqueue', $output );
+		}
+	}
+
+	/**
+	 * Ends this task peacefully
+	 */
+	function restInPeace ( &$loadBalancer ) {
+		wfLogProfilingData();
+		$loadBalancer->closeAll();
+		wfDebug( "Request ended normally\n" );
+	}
+
+	/**
+	 * Perform one of the "standard" actions
+	 */
+	function performAction( &$output, &$article, &$title, &$user, &$request ) {
+
+		wfProfileIn( 'MediaWiki::performAction' );
+
+		$action = $this->getVal('Action');
+		if( in_array( $action, $this->getVal('DisabledActions',array()) ) ) {
+			/* No such action; this will switch to the default case */
+			$action = 'nosuchaction';
+		}
+
+		switch( $action ) {
+			case 'view':
+				$output->setSquidMaxage( $this->getVal( 'SquidMaxage' ) );
+				$article->view();
+				break;
+			case 'watch':
+			case 'unwatch':
+			case 'delete':
+			case 'revert':
+			case 'rollback':
+			case 'protect':
+			case 'unprotect':
+			case 'info':
+			case 'markpatrolled':
+			case 'render':
+			case 'deletetrackback':
+			case 'purge':
+				$article->$action();
+				break;
+			case 'print':
+				$article->view();
+				break;
+			case 'dublincore':
+				if( !$this->getVal( 'EnableDublinCoreRdf' ) ) {
+					wfHttpError( 403, 'Forbidden', wfMsg( 'nodublincore' ) );
+				} else {
+					require_once( 'includes/Metadata.php' );
+					wfDublinCoreRdf( $article );
+				}
+				break;
+			case 'creativecommons':
+				if( !$this->getVal( 'EnableCreativeCommonsRdf' ) ) {
+					wfHttpError( 403, 'Forbidden', wfMsg( 'nocreativecommons' ) );
+				} else {
+					require_once( 'includes/Metadata.php' );
+					wfCreativeCommonsRdf( $article );
+				}
+				break;
+			case 'credits':
+				require_once( 'includes/Credits.php' );
+				showCreditsPage( $article );
+				break;
+			case 'submit':
+				if( session_id() == '' ) {
+					/* Send a cookie so anons get talk message notifications */
+					wfSetupSession();
+				}
+				/* Continue... */
+			case 'edit':
+				if( wfRunHooks( 'CustomEditor', array( $article, $user ) ) ) {
+					$internal = $request->getVal( 'internaledit' );
+					$external = $request->getVal( 'externaledit' );
+					$section = $request->getVal( 'section' );
+					$oldid = $request->getVal( 'oldid' );
+					if( !$this->getVal( 'UseExternalEditor' ) || $action=='submit' || $internal ||
+					   $section || $oldid || ( !$user->getOption( 'externaleditor' ) && !$external ) ) {
+						$editor = new EditPage( $article );
+						$editor->submit();
+					} elseif( $this->getVal( 'UseExternalEditor' ) && ( $external || $user->getOption( 'externaleditor' ) ) ) {
+						$mode = $request->getVal( 'mode' );
+						$extedit = new ExternalEdit( $article, $mode );
+						$extedit->edit();
+					}
+				}
+				break;
+			case 'history':
+				global $wgRequest;
+				if( $wgRequest->getFullRequestURL() == $title->getInternalURL( 'action=history' ) ) {
+					$output->setSquidMaxage( $this->getVal( 'SquidMaxage' ) );
+				}
+				$history = new PageHistory( $article );
+				$history->history();
+				break;
+			case 'raw':
+				$raw = new RawPage( $article );
+				$raw->view();
+				break;
+			default:
+				if( wfRunHooks( 'UnknownAction', array( $action, $article ) ) ) {
+					$output->showErrorPage( 'nosuchaction', 'nosuchactiontext' );
+				}
+		}
+		wfProfileOut( 'MediaWiki::performAction' );
+
+	}
+
+}; /* End of class MediaWiki */
+
+?>
Index: /MediaWiki/branches/1.11/includes/WikiError.php
===================================================================
--- /MediaWiki/branches/1.11/includes/WikiError.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/WikiError.php	(revision 1280)
@@ -0,0 +1,124 @@
+<?php
+/**
+ * MediaWiki error classes
+ * Copyright (C) 2005 Brion Vibber <brion@pobox.com>
+ * http://www.mediawiki.org/
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ */
+
+/**
+ * Since PHP4 doesn't have exceptions, here's some error objects
+ * loosely modeled on the standard PEAR_Error model...
+ * @addtogroup Exception
+ */
+class WikiError {
+	/**
+	 * @param string $message
+	 */
+	function __construct( $message ) {
+		$this->mMessage = $message;
+	}
+
+	/**
+	 * @return string Plaintext error message to display
+	 */
+	function getMessage() {
+		return $this->mMessage;
+	}
+
+	/**
+	 * In following PEAR_Error model this could be formatted differently,
+	 * but so far it's not.
+	 * @return string
+	 */
+	function toString() {
+		return $this->getMessage();
+	}
+
+	/**
+	 * Returns true if the given object is a WikiError-descended
+	 * error object, false otherwise.
+	 *
+	 * @param mixed $object
+	 * @return bool
+	 * @static
+	 */
+	public static function isError( $object ) {
+		return $object instanceof WikiError;
+	}
+}
+
+/**
+ * Localized error message object
+ * @addtogroup Exception
+ */
+class WikiErrorMsg extends WikiError {
+	/**
+	 * @param string $message Wiki message name
+	 * @param ... parameters to pass to wfMsg()
+	 */
+	function WikiErrorMsg( $message/*, ... */ ) {
+		$args = func_get_args();
+		array_shift( $args );
+		$this->mMessage = wfMsgReal( $message, $args, true );
+	}
+}
+
+/**
+ * @todo document
+ * @addtogroup Exception
+ */
+class WikiXmlError extends WikiError {
+	/**
+	 * @param resource $parser
+	 * @param string $message
+	 */
+	function WikiXmlError( $parser, $message = 'XML parsing error', $context = null, $offset = 0 ) {
+		$this->mXmlError = xml_get_error_code( $parser );
+		$this->mColumn = xml_get_current_column_number( $parser );
+		$this->mLine = xml_get_current_line_number( $parser );
+		$this->mByte = xml_get_current_byte_index( $parser );
+		$this->mContext = $this->_extractContext( $context, $offset );
+		$this->mMessage = $message;
+		xml_parser_free( $parser );
+		wfDebug( "WikiXmlError: " . $this->getMessage() . "\n" );
+	}
+
+	/** @return string */
+	function getMessage() {
+		return sprintf( '%s at line %d, col %d (byte %d%s): %s',
+			$this->mMessage,
+			$this->mLine,
+			$this->mColumn,
+			$this->mByte,
+			$this->mContext,
+			xml_error_string( $this->mXmlError ) );
+	}
+
+	function _extractContext( $context, $offset ) {
+		if( is_null( $context ) ) {
+			return null;
+		} else {
+			// Hopefully integer overflow will be handled transparently here
+			$inlineOffset = $this->mByte - $offset;
+			return '; "' . substr( $context, $inlineOffset, 16 ) . '"';
+		}
+	}
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/Xml.php
===================================================================
--- /MediaWiki/branches/1.11/includes/Xml.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/Xml.php	(revision 1280)
@@ -0,0 +1,355 @@
+<?php
+
+/**
+ * Module of static functions for generating XML
+ */
+
+class Xml {
+	/**
+	 * Format an XML element with given attributes and, optionally, text content.
+	 * Element and attribute names are assumed to be ready for literal inclusion.
+	 * Strings are assumed to not contain XML-illegal characters; special
+	 * characters (<, >, &) are escaped but illegals are not touched.
+	 *
+	 * @param $element String:
+	 * @param $attribs Array: Name=>value pairs. Values will be escaped.
+	 * @param $contents String: NULL to make an open tag only; '' for a contentless closed tag (default)
+	 * @return string
+	 */
+	public static function element( $element, $attribs = null, $contents = '') {
+		$out = '<' . $element;
+		if( !is_null( $attribs ) ) {
+			foreach( $attribs as $name => $val ) {
+				$out .= ' ' . $name . '="' . Sanitizer::encodeAttribute( $val ) . '"';
+			}
+		}
+		if( is_null( $contents ) ) {
+			$out .= '>';
+		} else {
+			if( $contents === '' ) {
+				$out .= ' />';
+			} else {
+				$out .= '>' . htmlspecialchars( $contents ) . "</$element>";
+			}
+		}
+		return $out;
+	}
+
+	/**
+	 * Format an XML element as with self::element(), but run text through the
+	 * UtfNormal::cleanUp() validator first to ensure that no invalid UTF-8
+	 * is passed.
+	 *
+	 * @param $element String:
+	 * @param $attribs Array: Name=>value pairs. Values will be escaped.
+	 * @param $contents String: NULL to make an open tag only; '' for a contentless closed tag (default)
+	 * @return string
+	 */
+	public static function elementClean( $element, $attribs = array(), $contents = '') {
+		if( $attribs ) {
+			$attribs = array_map( array( 'UtfNormal', 'cleanUp' ), $attribs );
+		}
+		if( $contents ) {
+			wfProfileIn( __METHOD__ . '-norm' );
+			$contents = UtfNormal::cleanUp( $contents );
+			wfProfileOut( __METHOD__ . '-norm' );
+		}
+		return self::element( $element, $attribs, $contents );
+	}
+
+	// Shortcuts
+	public static function openElement( $element, $attribs = null ) { return self::element( $element, $attribs, null ); }
+	public static function closeElement( $element ) { return "</$element>"; }
+
+	/**
+	 * Same as <link>element</link>, but does not escape contents. Handy when the
+	 * content you have is already valid xml.
+	 */
+	public static function tags( $element, $attribs = null, $contents ) {
+		return self::element( $element, $attribs, null ) . $contents . "</$element>";
+	}
+
+	/**
+	 * Create a namespace selector
+	 *
+	 * @param $selected Mixed: the namespace which should be selected, default ''
+	 * @param $allnamespaces String: value of a special item denoting all namespaces. Null to not include (default)
+	 * @param $includehidden Bool: include hidden namespaces?
+	 * @return String: Html string containing the namespace selector
+	 */
+	public static function namespaceSelector($selected = '', $allnamespaces = null, $includehidden=false) {
+		global $wgContLang;
+		if( $selected !== '' ) {
+			if( is_null( $selected ) ) {
+				// No namespace selected; let exact match work without hitting Main
+				$selected = '';
+			} else {
+				// Let input be numeric strings without breaking the empty match.
+				$selected = intval( $selected );
+			}
+		}
+		$s = "\n<select id='namespace' name='namespace' class='namespaceselector'>\n";
+		$arr = $wgContLang->getFormattedNamespaces();
+		if( !is_null($allnamespaces) ) {
+			$arr = array($allnamespaces => wfMsg('namespacesall')) + $arr;
+		}
+		foreach ($arr as $index => $name) {
+			if ($index < NS_MAIN) continue;
+
+			$name = $index !== 0 ? $name : wfMsg('blanknamespace');
+
+			if ($index === $selected) {
+				$s .= "\t" . self::element("option",
+						array("value" => $index, "selected" => "selected"),
+						$name) . "\n";
+			} else {
+				$s .= "\t" . self::element("option", array("value" => $index), $name) . "\n";
+			}
+		}
+		$s .= "</select>\n";
+		return $s;
+	}
+
+	public static function span( $text, $class, $attribs=array() ) {
+		return self::element( 'span', array( 'class' => $class ) + $attribs, $text );
+	}
+
+	/**
+	 * Convenience function to build an HTML text input field
+	 * @return string HTML
+	 */
+	public static function input( $name, $size=false, $value=false, $attribs=array() ) {
+		return self::element( 'input', array(
+			'name' => $name,
+			'size' => $size,
+			'value' => $value ) + $attribs );
+	}
+
+	/**
+	 * Internal function for use in checkboxes and radio buttons and such.
+	 * @return array
+	 */
+	public static function attrib( $name, $present = true ) {
+		return $present ? array( $name => $name ) : array();
+	}
+
+	/**
+	 * Convenience function to build an HTML checkbox
+	 * @return string HTML
+	 */
+	public static function check( $name, $checked=false, $attribs=array() ) {
+		return self::element( 'input', array_merge(
+			array(
+				'name' => $name,
+				'type' => 'checkbox',
+				'value' => 1 ),
+			self::attrib( 'checked', $checked ),
+			$attribs ) );
+	}
+
+	/**
+	 * Convenience function to build an HTML radio button
+	 * @return string HTML
+	 */
+	public static function radio( $name, $value, $checked=false, $attribs=array() ) {
+		return self::element( 'input', array(
+			'name' => $name,
+			'type' => 'radio',
+			'value' => $value ) + self::attrib( 'checked', $checked ) + $attribs );
+	}
+
+	/**
+	 * Convenience function to build an HTML form label
+	 * @return string HTML
+	 */
+	public static function label( $label, $id ) {
+		return self::element( 'label', array( 'for' => $id ), $label );
+	}
+
+	/**
+	 * Convenience function to build an HTML text input field with a label
+	 * @return string HTML
+	 */
+	public static function inputLabel( $label, $name, $id, $size=false, $value=false, $attribs=array() ) {
+		return Xml::label( $label, $id ) .
+			'&nbsp;' .
+			self::input( $name, $size, $value, array( 'id' => $id ) + $attribs );
+	}
+
+	/**
+	 * Convenience function to build an HTML checkbox with a label
+	 * @return string HTML
+	 */
+	public static function checkLabel( $label, $name, $id, $checked=false, $attribs=array() ) {
+		return self::check( $name, $checked, array( 'id' => $id ) + $attribs ) .
+			'&nbsp;' .
+			self::label( $label, $id );
+	}
+
+	/**
+	 * Convenience function to build an HTML radio button with a label
+	 * @return string HTML
+	 */
+	public static function radioLabel( $label, $name, $value, $id, $checked=false, $attribs=array() ) {
+		return self::radio( $name, $value, $checked, array( 'id' => $id ) + $attribs ) .
+			'&nbsp;' .
+			self::label( $label, $id );
+	}
+
+	/**
+	 * Convenience function to build an HTML submit button
+	 * @param $value String: label text for the button
+	 * @param $attribs Array: optional custom attributes
+	 * @return string HTML
+	 */
+	public static function submitButton( $value, $attribs=array() ) {
+		return self::element( 'input', array( 'type' => 'submit', 'value' => $value ) + $attribs );
+	}
+
+	/**
+	 * Convenience function to build an HTML hidden form field.
+	 * @todo Document $name parameter.
+	 * @param $name FIXME
+	 * @param $value String: label text for the button
+	 * @param $attribs Array: optional custom attributes
+	 * @return string HTML
+	 */
+	public static function hidden( $name, $value, $attribs=array() ) {
+		return self::element( 'input', array(
+			'name' => $name,
+			'type' => 'hidden',
+			'value' => $value ) + $attribs );
+	}
+	
+	/**
+	 * Convenience function to build an HTML drop-down list item.
+	 * @param $text String: text for this item
+	 * @param $value String: form submission value; if empty, use text
+	 * @param $selected boolean: if true, will be the default selected item
+	 * @param $attribs array: optional additional HTML attributes
+	 * @return string HTML
+	 */
+	public static function option( $text, $value=null, $selected=false,
+			$attribs=array() ) {
+		if( !is_null( $value ) ) {
+			$attribs['value'] = $value;
+		}
+		if( $selected ) {
+			$attribs['selected'] = 'selected';
+		}
+		return self::element( 'option', $attribs, $text );
+	}
+
+	/**
+	 * Returns an escaped string suitable for inclusion in a string literal
+	 * for JavaScript source code.
+	 * Illegal control characters are assumed not to be present.
+	 *
+	 * @param string $string
+	 * @return string
+	 */
+	public static function escapeJsString( $string ) {
+		// See ECMA 262 section 7.8.4 for string literal format
+		$pairs = array(
+			"\\" => "\\\\",
+			"\"" => "\\\"",
+			'\'' => '\\\'',
+			"\n" => "\\n",
+			"\r" => "\\r",
+
+			# To avoid closing the element or CDATA section
+			"<" => "\\x3c",
+			">" => "\\x3e",
+
+			# To avoid any complaints about bad entity refs                        
+			"&" => "\\x26",
+		);
+		return strtr( $string, $pairs );
+	}
+
+	/**
+	 * Encode a variable of unknown type to JavaScript.
+	 * Doesn't support hashtables just yet.
+	 */
+	public static function encodeJsVar( $value ) {
+		if ( is_bool( $value ) ) {
+			$s = $value ? 'true' : 'false';
+		} elseif ( is_null( $value ) ) {
+			$s = 'null';
+		} elseif ( is_int( $value ) ) {
+			$s = $value;
+		} elseif ( is_array( $value ) ) {
+			$s = '[';
+			foreach ( $value as $name => $elt ) {
+				if ( $s != '[' ) {
+					$s .= ', ';
+				}
+				$s .= self::encodeJsVar( $elt );
+			}
+			$s .= ']';
+		} else {
+			$s = '"' . self::escapeJsString( $value ) . '"';
+		}
+		return $s;
+	}
+	
+
+	/**
+	 * Check if a string is well-formed XML.
+	 * Must include the surrounding tag.
+	 *
+	 * @param $text String: string to test.
+	 * @return bool
+	 *
+	 * @todo Error position reporting return
+	 */
+	public static function isWellFormed( $text ) {
+		$parser = xml_parser_create( "UTF-8" );
+
+		# case folding violates XML standard, turn it off
+		xml_parser_set_option( $parser, XML_OPTION_CASE_FOLDING, false );
+
+		if( !xml_parse( $parser, $text, true ) ) {
+			//$err = xml_error_string( xml_get_error_code( $parser ) );
+			//$position = xml_get_current_byte_index( $parser );
+			//$fragment = $this->extractFragment( $html, $position );
+			//$this->mXmlError = "$err at byte $position:\n$fragment";
+			xml_parser_free( $parser );
+			return false;
+		}
+		xml_parser_free( $parser );
+		return true;
+	}
+
+	/**
+	 * Check if a string is a well-formed XML fragment.
+	 * Wraps fragment in an \<html\> bit and doctype, so it can be a fragment
+	 * and can use HTML named entities.
+	 *
+	 * @param $text String:
+	 * @return bool
+	 */
+	public static function isWellFormedXmlFragment( $text ) {
+		$html =
+			Sanitizer::hackDocType() .
+			'<html>' .
+			$text .
+			'</html>';
+		return Xml::isWellFormed( $html );
+	}
+
+	/**
+	 * Replace " > and < with their respective HTML entities ( &quot;,
+	 * &gt;, &lt;)
+	 *
+	 * @param $in String: text that might contain HTML tags.
+	 * @return string Escaped string
+	 */
+	public static function escapeTagsOnly( $in ) {
+		return str_replace(
+			array( '"', '>', '<' ),
+			array( '&quot;', '&gt;', '&lt;' ),
+			$in );
+	}
+}
+?>
Index: /MediaWiki/branches/1.11/includes/XmlFunctions.php
===================================================================
--- /MediaWiki/branches/1.11/includes/XmlFunctions.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/XmlFunctions.php	(revision 1280)
@@ -0,0 +1,65 @@
+<?php
+/**
+ * Aliases for functions in the Xml module
+ * Look at the Xml class (Xml.php) for the implementations.
+ */
+function wfElement( $element, $attribs = null, $contents = '') {
+	return Xml::element( $element, $attribs, $contents );
+}
+function wfElementClean( $element, $attribs = array(), $contents = '') {
+	return Xml::elementClean( $element, $attribs, $contents );
+}
+function wfOpenElement( $element, $attribs = null ) {
+	return Xml::openElement( $element, $attribs );
+}
+function wfCloseElement( $element ) {
+	return "</$element>";
+}
+function HTMLnamespaceselector($selected = '', $allnamespaces = null, $includehidden=false) {
+	return Xml::namespaceSelector( $selected, $allnamespaces, $includehidden );
+}
+function wfSpan( $text, $class, $attribs=array() ) {
+	return Xml::span( $text, $class, $attribs );
+}
+function wfInput( $name, $size=false, $value=false, $attribs=array() ) {
+	return Xml::input( $name, $size, $value, $attribs );
+}
+function wfAttrib( $name, $present = true ) {
+	return Xml::attrib( $name, $present );
+}
+function wfCheck( $name, $checked=false, $attribs=array() ) {
+	return Xml::check( $name, $checked, $attribs );
+}
+function wfRadio( $name, $value, $checked=false, $attribs=array() ) {
+	return Xml::radio( $name, $value, $checked, $attribs );
+}
+function wfLabel( $label, $id ) {
+	return Xml::label( $label, $id );
+}
+function wfInputLabel( $label, $name, $id, $size=false, $value=false, $attribs=array() ) {
+	return Xml::inputLabel( $label, $name, $id, $size, $value, $attribs );
+}
+function wfCheckLabel( $label, $name, $id, $checked=false, $attribs=array() ) {
+	return Xml::checkLabel( $label, $name, $id, $checked, $attribs );
+}
+function wfRadioLabel( $label, $name, $value, $id, $checked=false, $attribs=array() ) {
+	return Xml::radioLabel( $label, $name, $value, $id, $checked, $attribs );
+}
+function wfSubmitButton( $value, $attribs=array() ) {
+	return Xml::submitButton( $value, $attribs );
+}
+function wfHidden( $name, $value, $attribs=array() ) {
+	return Xml::hidden( $name, $value, $attribs );
+}
+function wfEscapeJsString( $string ) {
+	return Xml::escapeJsString( $string );
+}
+function wfIsWellFormedXml( $text ) {
+	return Xml::isWellFormed( $text );
+}
+function wfIsWellFormedXmlFragment( $text ) {
+	return Xml::isWellFormedXmlFragment( $text );
+}
+
+
+?>
Index: /MediaWiki/branches/1.11/includes/ZhClient.php
===================================================================
--- /MediaWiki/branches/1.11/includes/ZhClient.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/ZhClient.php	(revision 1280)
@@ -0,0 +1,147 @@
+<?php
+/**
+ */
+
+/**
+ * Client for querying zhdaemon
+ *
+ */
+class ZhClient {
+	var $mHost, $mPort, $mFP, $mConnected;
+
+	/**
+	 * Constructor
+	 *
+	 * @access private
+	 */
+	function ZhClient($host, $port) {
+		$this->mHost = $host;
+		$this->mPort = $port;
+		$this->mConnected = $this->connect();
+	}
+
+	/**
+	 * Check if connection to zhdaemon is successful
+	 *
+	 * @access public
+	 */
+	function isconnected() {
+		return $this->mConnected;
+	}
+
+	/**
+	 * Establish conncetion
+	 *
+	 * @access private
+	 */
+	function connect() {
+		wfSuppressWarnings();
+		$errno = $errstr = '';
+		$this->mFP = fsockopen($this->mHost, $this->mPort, $errno, $errstr, 30);
+		wfRestoreWarnings();
+		if(!$this->mFP) {
+			return false;
+		}
+		return true;
+	}
+
+	/**
+	 * Query the daemon and return the result
+	 *
+	 * @access private
+	 */
+	function query($request) {
+		if(!$this->mConnected)
+			return false;
+
+		fwrite($this->mFP, $request);
+
+		$result=fgets($this->mFP, 1024);
+
+		list($status, $len) = explode(" ", $result);
+		if($status == 'ERROR') {
+			//$len is actually the error code...
+			print "zhdaemon error $len<br />\n";
+			return false;
+		}
+		$bytesread=0;
+		$data='';
+		while(!feof($this->mFP) && $bytesread<$len) {
+			$str= fread($this->mFP, $len-$bytesread);
+			$bytesread += strlen($str);
+			$data .= $str;
+		}
+		//data should be of length $len. otherwise something is wrong
+		if(strlen($data) != $len)
+			return false;
+		return $data;
+	}
+
+	/**
+	 * Convert the input to a different language variant
+	 *
+	 * @param string $text input text
+	 * @param string $tolang language variant
+	 * @return string the converted text
+	 * @access public
+	 */
+	function convert($text, $tolang) {
+		$len = strlen($text);
+		$q = "CONV $tolang $len\n$text";
+		$result = $this->query($q);
+		if(!$result)
+			$result = $text;
+		return $result;
+	}
+
+	/**
+	 * Convert the input to all possible variants
+	 *
+	 * @param string $text input text
+	 * @return array langcode => converted_string
+	 * @access public
+	 */
+	function convertToAllVariants($text) {
+		$len = strlen($text);
+		$q = "CONV ALL $len\n$text";
+		$result = $this->query($q);
+		if(!$result)
+			return false;
+		list($infoline, $data) = explode('|', $result, 2);
+		$info = explode(";", $infoline);
+		$ret = array();
+		$i=0;
+		foreach($info as $variant) {
+			list($code, $len) = explode(' ', $variant);
+			$ret[strtolower($code)] = substr($data, $i, $len);
+			$i+=$len;
+		}
+		return $ret;
+	}
+	/**
+	 * Perform word segmentation
+	 *
+	 * @param string $text input text
+	 * @return string segmented text
+	 * @access public
+	 */
+	function segment($text) {
+		$len = strlen($text);
+		$q = "SEG $len\n$text";
+		$result = $this->query($q);
+		if(!$result) {// fallback to character based segmentation
+			$result = ZhClientFake::segment($text);
+		}
+		return $result;
+	}
+
+	/**
+	 * Close the connection
+	 *
+	 * @access public
+	 */
+	function close() {
+		fclose($this->mFP);
+	}
+}
+?>
Index: /MediaWiki/branches/1.11/includes/ZhConversion.php
===================================================================
--- /MediaWiki/branches/1.11/includes/ZhConversion.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/ZhConversion.php	(revision 1280)
@@ -0,0 +1,8456 @@
+<?php
+/**
+ * Simplified/Traditional Chinese conversion tables
+ *
+ * Automatically generated using code and data in includes/zhtable/
+ * Do not modify directly!
+ *
+*/
+
+$zh2TW=array(
+"画"=>"畫",
+"板"=>"板",
+"表"=>"表",
+"才"=>"才",
+"丑"=>"醜",
+"出"=>"出",
+"淀"=>"澱",
+"冬"=>"冬",
+"范"=>"範",
+"丰"=>"豐",
+"刮"=>"刮",
+"后"=>"後",
+"胡"=>"胡",
+"回"=>"回",
+"伙"=>"夥",
+"姜"=>"薑",
+"借"=>"借",
+"克"=>"克",
+"困"=>"困",
+"漓"=>"漓",
+"里"=>"里",
+"帘"=>"簾",
+"霉"=>"霉",
+"面"=>"面",
+"蔑"=>"蔑",
+"千"=>"千",
+"秋"=>"秋",
+"松"=>"松",
+"咸"=>"咸",
+"向"=>"向",
+"余"=>"餘",
+"郁"=>"鬱",
+"御"=>"御",
+"愿"=>"願",
+"云"=>"雲",
+"芸"=>"芸",
+"沄"=>"沄",
+"致"=>"致",
+"制"=>"制",
+"朱"=>"朱",
+"筑"=>"築",
+"准"=>"準",
+"厂"=>"廠",
+"广"=>"廣",
+"辟"=>"闢",
+"别"=>"別",
+"卜"=>"卜",
+"沈"=>"沈",
+"冲"=>"沖",
+"种"=>"種",
+"虫"=>"蟲",
+"担"=>"擔",
+"党"=>"黨",
+"斗"=>"鬥",
+"儿"=>"兒",
+"干"=>"乾",
+"谷"=>"谷",
+"柜"=>"櫃",
+"合"=>"合",
+"划"=>"劃",
+"坏"=>"壞",
+"几"=>"幾",
+"系"=>"系",
+"家"=>"家",
+"价"=>"價",
+"据"=>"據",
+"卷"=>"捲",
+"适"=>"適",
+"蜡"=>"蠟",
+"腊"=>"臘",
+"了"=>"了",
+"累"=>"累",
+"么"=>"麽",
+"蒙"=>"蒙",
+"万"=>"萬",
+"宁"=>"寧",
+"朴"=>"樸",
+"苹"=>"蘋",
+"仆"=>"僕",
+"曲"=>"曲",
+"确"=>"確",
+"舍"=>"舍",
+"胜"=>"勝",
+"术"=>"術",
+"台"=>"台",
+"体"=>"體",
+"涂"=>"塗",
+"叶"=>"葉",
+"吁"=>"吁",
+"旋"=>"旋",
+"佣"=>"傭",
+"与"=>"與",
+"折"=>"折",
+"征"=>"徵",
+"症"=>"症",
+"恶"=>"惡",
+"发"=>"發",
+"复"=>"復",
+"汇"=>"匯",
+"获"=>"獲",
+"饥"=>"飢",
+"尽"=>"盡",
+"历"=>"歷",
+"卤"=>"滷",
+"弥"=>"彌",
+"签"=>"簽",
+"纤"=>"纖",
+"苏"=>"蘇",
+"坛"=>"壇",
+"团"=>"團",
+"须"=>"須",
+"脏"=>"臟",
+"只"=>"只",
+"钟"=>"鐘",
+"药"=>"藥",
+"同"=>"同",
+"志"=>"志",
+"杯"=>"杯",
+"岳"=>"岳",
+"布"=>"布",
+"当"=>"當",
+"吊"=>"弔",
+"仇"=>"仇",
+"蕴"=>"蘊",
+"线"=>"線",
+"为"=>"為",
+"产"=>"產",
+"众"=>"眾",
+"伪"=>"偽",
+"凫"=>"鳧",
+"厕"=>"廁",
+"启"=>"啟",
+"墙"=>"牆",
+"壳"=>"殼",
+"奖"=>"獎",
+"妫"=>"媯",
+"并"=>"並",
+"录"=>"錄",
+"悫"=>"愨",
+"极"=>"極",
+"沩"=>"溈",
+"瘘"=>"瘺",
+"硷"=>"鹼",
+"竖"=>"豎",
+"绝"=>"絕",
+"绣"=>"繡",
+"绦"=>"絛",
+"绱"=>"緔",
+"绷"=>"綳",
+"绿"=>"綠",
+"缰"=>"韁",
+"苧"=>"苎",
+"莼"=>"蒓",
+"说"=>"說",
+"谣"=>"謠",
+"谫"=>"譾",
+"赃"=>"贓",
+"赍"=>"齎",
+"赝"=>"贗",
+"酝"=>"醞",
+"采"=>"採",
+"钩"=>"鉤",
+"钵"=>"缽",
+"锈"=>"銹",
+"锐"=>"銳",
+"锨"=>"杴",
+"镌"=>"鐫",
+"镢"=>"钁",
+"阅"=>"閱",
+"颓"=>"頹",
+"颜"=>"顏",
+"骂"=>"罵",
+"鲇"=>"鯰",
+"鲞"=>"鯗",
+"鳄"=>"鱷",
+"鸡"=>"雞",
+"鹚"=>"鶿",
+"䌶"=>"䊷",
+"䜥"=>"𧩙",
+"专"=>"專",
+"业"=>"業",
+"丛"=>"叢",
+"东"=>"東",
+"丝"=>"絲",
+"丢"=>"丟",
+"两"=>"兩",
+"严"=>"嚴",
+"丧"=>"喪",
+"个"=>"個",
+"临"=>"臨",
+"丽"=>"麗",
+"举"=>"舉",
+"义"=>"義",
+"乌"=>"烏",
+"乐"=>"樂",
+"乔"=>"喬",
+"习"=>"習",
+"乡"=>"鄉",
+"书"=>"書",
+"买"=>"買",
+"乱"=>"亂",
+"争"=>"爭",
+"于"=>"於",
+"亏"=>"虧",
+"亚"=>"亞",
+"亩"=>"畝",
+"亲"=>"親",
+"亵"=>"褻",
+"亸"=>"嚲",
+"亿"=>"億",
+"仅"=>"僅",
+"从"=>"從",
+"仑"=>"侖",
+"仓"=>"倉",
+"仪"=>"儀",
+"们"=>"們",
+"优"=>"優",
+"会"=>"會",
+"伛"=>"傴",
+"伞"=>"傘",
+"伟"=>"偉",
+"传"=>"傳",
+"伣"=>"俔",
+"伤"=>"傷",
+"伥"=>"倀",
+"伦"=>"倫",
+"伧"=>"傖",
+"伫"=>"佇",
+"佥"=>"僉",
+"侠"=>"俠",
+"侣"=>"侶",
+"侥"=>"僥",
+"侦"=>"偵",
+"侧"=>"側",
+"侨"=>"僑",
+"侩"=>"儈",
+"侪"=>"儕",
+"侬"=>"儂",
+"俣"=>"俁",
+"俦"=>"儔",
+"俨"=>"儼",
+"俩"=>"倆",
+"俪"=>"儷",
+"俫"=>"倈",
+"俭"=>"儉",
+"债"=>"債",
+"倾"=>"傾",
+"偬"=>"傯",
+"偻"=>"僂",
+"偾"=>"僨",
+"偿"=>"償",
+"傥"=>"儻",
+"傧"=>"儐",
+"储"=>"儲",
+"傩"=>"儺",
+"兑"=>"兌",
+"兖"=>"兗",
+"兰"=>"蘭",
+"关"=>"關",
+"兴"=>"興",
+"兹"=>"茲",
+"养"=>"養",
+"兽"=>"獸",
+"冁"=>"囅",
+"内"=>"內",
+"冈"=>"岡",
+"册"=>"冊",
+"写"=>"寫",
+"军"=>"軍",
+"农"=>"農",
+"冯"=>"馮",
+"决"=>"決",
+"况"=>"況",
+"冻"=>"凍",
+"净"=>"凈",
+"凉"=>"涼",
+"减"=>"減",
+"凑"=>"湊",
+"凛"=>"凜",
+"凤"=>"鳳",
+"凭"=>"憑",
+"凯"=>"凱",
+"击"=>"擊",
+"凿"=>"鑿",
+"刍"=>"芻",
+"刘"=>"劉",
+"则"=>"則",
+"刚"=>"剛",
+"创"=>"創",
+"删"=>"刪",
+"刬"=>"剗",
+"刭"=>"剄",
+"刹"=>"剎",
+"刽"=>"劊",
+"刿"=>"劌",
+"剀"=>"剴",
+"剂"=>"劑",
+"剐"=>"剮",
+"剑"=>"劍",
+"剥"=>"剝",
+"剧"=>"劇",
+"劝"=>"勸",
+"办"=>"辦",
+"务"=>"務",
+"劢"=>"勱",
+"动"=>"動",
+"励"=>"勵",
+"劲"=>"勁",
+"劳"=>"勞",
+"势"=>"勢",
+"勋"=>"勛",
+"勚"=>"勩",
+"匀"=>"勻",
+"匦"=>"匭",
+"匮"=>"匱",
+"区"=>"區",
+"医"=>"醫",
+"华"=>"華",
+"协"=>"協",
+"单"=>"單",
+"卖"=>"賣",
+"卢"=>"盧",
+"卫"=>"衛",
+"却"=>"卻",
+"厅"=>"廳",
+"厉"=>"厲",
+"压"=>"壓",
+"厌"=>"厭",
+"厍"=>"厙",
+"厐"=>"龎",
+"厘"=>"釐",
+"厢"=>"廂",
+"厣"=>"厴",
+"厦"=>"廈",
+"厨"=>"廚",
+"厩"=>"廄",
+"厮"=>"廝",
+"县"=>"縣",
+"叁"=>"叄",
+"参"=>"參",
+"双"=>"雙",
+"变"=>"變",
+"叙"=>"敘",
+"叠"=>"疊",
+"号"=>"號",
+"叹"=>"嘆",
+"叽"=>"嘰",
+"吓"=>"嚇",
+"吕"=>"呂",
+"吗"=>"嗎",
+"吣"=>"唚",
+"吨"=>"噸",
+"听"=>"聽",
+"吴"=>"吳",
+"呐"=>"吶",
+"呒"=>"嘸",
+"呓"=>"囈",
+"呕"=>"嘔",
+"呖"=>"嚦",
+"呗"=>"唄",
+"员"=>"員",
+"呙"=>"咼",
+"呛"=>"嗆",
+"呜"=>"嗚",
+"咏"=>"詠",
+"咙"=>"嚨",
+"咛"=>"嚀",
+"咝"=>"噝",
+"咤"=>"吒",
+"响"=>"響",
+"哑"=>"啞",
+"哒"=>"噠",
+"哓"=>"嘵",
+"哔"=>"嗶",
+"哕"=>"噦",
+"哗"=>"嘩",
+"哙"=>"噲",
+"哜"=>"嚌",
+"哝"=>"噥",
+"哟"=>"喲",
+"唛"=>"嘜",
+"唝"=>"嗊",
+"唠"=>"嘮",
+"唡"=>"啢",
+"唢"=>"嗩",
+"唤"=>"喚",
+"啧"=>"嘖",
+"啬"=>"嗇",
+"啭"=>"囀",
+"啮"=>"嚙",
+"啴"=>"嘽",
+"啸"=>"嘯",
+"㖞"=>"喎",
+"喷"=>"噴",
+"喽"=>"嘍",
+"喾"=>"嚳",
+"嗫"=>"囁",
+"嗳"=>"噯",
+"嘘"=>"噓",
+"嘤"=>"嚶",
+"嘱"=>"囑",
+"噜"=>"嚕",
+"嚣"=>"囂",
+"园"=>"園",
+"囱"=>"囪",
+"围"=>"圍",
+"囵"=>"圇",
+"国"=>"國",
+"图"=>"圖",
+"圆"=>"圓",
+"圣"=>"聖",
+"圹"=>"壙",
+"场"=>"場",
+"坂"=>"阪",
+"块"=>"塊",
+"坚"=>"堅",
+"坜"=>"壢",
+"坝"=>"壩",
+"坞"=>"塢",
+"坟"=>"墳",
+"坠"=>"墜",
+"垄"=>"壟",
+"垅"=>"壠",
+"垆"=>"壚",
+"垒"=>"壘",
+"垦"=>"墾",
+"垩"=>"堊",
+"垫"=>"墊",
+"垭"=>"埡",
+"垱"=>"壋",
+"垲"=>"塏",
+"垴"=>"堖",
+"埘"=>"塒",
+"埙"=>"塤",
+"埚"=>"堝",
+"埯"=>"垵",
+"堑"=>"塹",
+"堕"=>"墮",
+"𡒄"=>"壈",
+"壮"=>"壯",
+"声"=>"聲",
+"壶"=>"壺",
+"壸"=>"壼",
+"处"=>"處",
+"备"=>"備",
+"够"=>"夠",
+"头"=>"頭",
+"夸"=>"誇",
+"夹"=>"夾",
+"夺"=>"奪",
+"奁"=>"奩",
+"奂"=>"奐",
+"奋"=>"奮",
+"奥"=>"奧",
+"奸"=>"姦",
+"妆"=>"妝",
+"妇"=>"婦",
+"妈"=>"媽",
+"妩"=>"嫵",
+"妪"=>"嫗",
+"姗"=>"姍",
+"姹"=>"奼",
+"娄"=>"婁",
+"娅"=>"婭",
+"娆"=>"嬈",
+"娇"=>"嬌",
+"娈"=>"孌",
+"娱"=>"娛",
+"娲"=>"媧",
+"娴"=>"嫻",
+"婳"=>"嫿",
+"婴"=>"嬰",
+"婵"=>"嬋",
+"婶"=>"嬸",
+"媪"=>"媼",
+"嫒"=>"嬡",
+"嫔"=>"嬪",
+"嫱"=>"嬙",
+"嬷"=>"嬤",
+"孙"=>"孫",
+"学"=>"學",
+"孪"=>"孿",
+"宝"=>"寶",
+"实"=>"實",
+"宠"=>"寵",
+"审"=>"審",
+"宪"=>"憲",
+"宫"=>"宮",
+"宽"=>"寬",
+"宾"=>"賓",
+"寝"=>"寢",
+"对"=>"對",
+"寻"=>"尋",
+"导"=>"導",
+"寿"=>"壽",
+"将"=>"將",
+"尔"=>"爾",
+"尘"=>"塵",
+"尝"=>"嘗",
+"尧"=>"堯",
+"尴"=>"尷",
+"尸"=>"屍",
+"层"=>"層",
+"屃"=>"屓",
+"屉"=>"屜",
+"届"=>"屆",
+"属"=>"屬",
+"屡"=>"屢",
+"屦"=>"屨",
+"屿"=>"嶼",
+"岁"=>"歲",
+"岂"=>"豈",
+"岖"=>"嶇",
+"岗"=>"崗",
+"岘"=>"峴",
+"岙"=>"嶴",
+"岚"=>"嵐",
+"岛"=>"島",
+"岭"=>"嶺",
+"岽"=>"崬",
+"岿"=>"巋",
+"峄"=>"嶧",
+"峡"=>"峽",
+"峣"=>"嶢",
+"峤"=>"嶠",
+"峥"=>"崢",
+"峦"=>"巒",
+"崂"=>"嶗",
+"崃"=>"崍",
+"崄"=>"嶮",
+"崭"=>"嶄",
+"嵘"=>"嶸",
+"嵚"=>"嶔",
+"嵝"=>"嶁",
+"巅"=>"巔",
+"巩"=>"鞏",
+"巯"=>"巰",
+"币"=>"幣",
+"帅"=>"帥",
+"师"=>"師",
+"帏"=>"幃",
+"帐"=>"帳",
+"帜"=>"幟",
+"带"=>"帶",
+"帧"=>"幀",
+"帮"=>"幫",
+"帱"=>"幬",
+"帻"=>"幘",
+"帼"=>"幗",
+"幂"=>"冪",
+"幺"=>"么",
+"庄"=>"莊",
+"庆"=>"慶",
+"庐"=>"廬",
+"庑"=>"廡",
+"库"=>"庫",
+"应"=>"應",
+"庙"=>"廟",
+"庞"=>"龐",
+"废"=>"廢",
+"廪"=>"廩",
+"开"=>"開",
+"异"=>"異",
+"弃"=>"棄",
+"弑"=>"弒",
+"张"=>"張",
+"弪"=>"弳",
+"弯"=>"彎",
+"弹"=>"彈",
+"强"=>"強",
+"归"=>"歸",
+"彝"=>"彞",
+"彦"=>"彥",
+"彻"=>"徹",
+"径"=>"徑",
+"徕"=>"徠",
+"忆"=>"憶",
+"忏"=>"懺",
+"忧"=>"憂",
+"忾"=>"愾",
+"怀"=>"懷",
+"态"=>"態",
+"怂"=>"慫",
+"怃"=>"憮",
+"怄"=>"慪",
+"怅"=>"悵",
+"怆"=>"愴",
+"怜"=>"憐",
+"总"=>"總",
+"怼"=>"懟",
+"怿"=>"懌",
+"恋"=>"戀",
+"恒"=>"恆",
+"恳"=>"懇",
+"恸"=>"慟",
+"恹"=>"懨",
+"恺"=>"愷",
+"恻"=>"惻",
+"恼"=>"惱",
+"恽"=>"惲",
+"悦"=>"悅",
+"悬"=>"懸",
+"悭"=>"慳",
+"悮"=>"悞",
+"悯"=>"憫",
+"惊"=>"驚",
+"惧"=>"懼",
+"惨"=>"慘",
+"惩"=>"懲",
+"惫"=>"憊",
+"惬"=>"愜",
+"惭"=>"慚",
+"惮"=>"憚",
+"惯"=>"慣",
+"愠"=>"慍",
+"愤"=>"憤",
+"愦"=>"憒",
+"慑"=>"懾",
+"懑"=>"懣",
+"懒"=>"懶",
+"懔"=>"懍",
+"戆"=>"戇",
+"戋"=>"戔",
+"戏"=>"戲",
+"戗"=>"戧",
+"战"=>"戰",
+"戬"=>"戩",
+"戯"=>"戱",
+"户"=>"戶",
+"扑"=>"撲",
+"执"=>"執",
+"扩"=>"擴",
+"扪"=>"捫",
+"扫"=>"掃",
+"扬"=>"揚",
+"扰"=>"擾",
+"抚"=>"撫",
+"抛"=>"拋",
+"抟"=>"摶",
+"抠"=>"摳",
+"抡"=>"掄",
+"抢"=>"搶",
+"护"=>"護",
+"报"=>"報",
+"拟"=>"擬",
+"拢"=>"攏",
+"拣"=>"揀",
+"拥"=>"擁",
+"拦"=>"攔",
+"拧"=>"擰",
+"拨"=>"撥",
+"择"=>"擇",
+"挂"=>"掛",
+"挚"=>"摯",
+"挛"=>"攣",
+"挜"=>"掗",
+"挝"=>"撾",
+"挞"=>"撻",
+"挟"=>"挾",
+"挠"=>"撓",
+"挡"=>"擋",
+"挢"=>"撟",
+"挣"=>"掙",
+"挤"=>"擠",
+"挥"=>"揮",
+"挦"=>"撏",
+"挽"=>"輓",
+"捝"=>"挩",
+"捞"=>"撈",
+"损"=>"損",
+"捡"=>"撿",
+"换"=>"換",
+"捣"=>"搗",
+"掳"=>"擄",
+"掴"=>"摑",
+"掷"=>"擲",
+"掸"=>"撣",
+"掺"=>"摻",
+"掼"=>"摜",
+"揽"=>"攬",
+"揾"=>"搵",
+"揿"=>"撳",
+"搀"=>"攙",
+"搁"=>"擱",
+"搂"=>"摟",
+"搅"=>"攪",
+"携"=>"攜",
+"摄"=>"攝",
+"摅"=>"攄",
+"摆"=>"擺",
+"摇"=>"搖",
+"摈"=>"擯",
+"摊"=>"攤",
+"撄"=>"攖",
+"撑"=>"撐",
+"㧑"=>"撝",
+"撵"=>"攆",
+"撷"=>"擷",
+"撸"=>"擼",
+"撺"=>"攛",
+"㧟"=>"擓",
+"擞"=>"擻",
+"攒"=>"攢",
+"敌"=>"敵",
+"敛"=>"斂",
+"数"=>"數",
+"斋"=>"齋",
+"斓"=>"斕",
+"斩"=>"斬",
+"断"=>"斷",
+"无"=>"無",
+"旧"=>"舊",
+"时"=>"時",
+"旷"=>"曠",
+"旸"=>"暘",
+"昙"=>"曇",
+"昼"=>"晝",
+"昽"=>"曨",
+"显"=>"顯",
+"晋"=>"晉",
+"晒"=>"曬",
+"晓"=>"曉",
+"晔"=>"曄",
+"晕"=>"暈",
+"晖"=>"暉",
+"暂"=>"暫",
+"暧"=>"曖",
+"机"=>"機",
+"杀"=>"殺",
+"杂"=>"雜",
+"权"=>"權",
+"杆"=>"桿",
+"条"=>"條",
+"来"=>"來",
+"杨"=>"楊",
+"杩"=>"榪",
+"杰"=>"傑",
+"构"=>"構",
+"枞"=>"樅",
+"枢"=>"樞",
+"枣"=>"棗",
+"枥"=>"櫪",
+"枧"=>"梘",
+"枨"=>"棖",
+"枪"=>"槍",
+"枫"=>"楓",
+"枭"=>"梟",
+"柠"=>"檸",
+"柽"=>"檉",
+"栀"=>"梔",
+"栅"=>"柵",
+"标"=>"標",
+"栈"=>"棧",
+"栉"=>"櫛",
+"栊"=>"櫳",
+"栋"=>"棟",
+"栌"=>"櫨",
+"栎"=>"櫟",
+"栏"=>"欄",
+"树"=>"樹",
+"栖"=>"棲",
+"栗"=>"慄",
+"样"=>"樣",
+"栾"=>"欒",
+"桠"=>"椏",
+"桡"=>"橈",
+"桢"=>"楨",
+"档"=>"檔",
+"桤"=>"榿",
+"桥"=>"橋",
+"桦"=>"樺",
+"桧"=>"檜",
+"桨"=>"槳",
+"桩"=>"樁",
+"梦"=>"夢",
+"梼"=>"檮",
+"梾"=>"棶",
+"梿"=>"槤",
+"检"=>"檢",
+"棁"=>"梲",
+"棂"=>"欞",
+"椁"=>"槨",
+"椟"=>"櫝",
+"椠"=>"槧",
+"椤"=>"欏",
+"椭"=>"橢",
+"楼"=>"樓",
+"榄"=>"欖",
+"榅"=>"榲",
+"榇"=>"櫬",
+"榈"=>"櫚",
+"榉"=>"櫸",
+"槚"=>"檟",
+"槛"=>"檻",
+"槟"=>"檳",
+"槠"=>"櫧",
+"横"=>"橫",
+"樯"=>"檣",
+"樱"=>"櫻",
+"橥"=>"櫫",
+"橱"=>"櫥",
+"橹"=>"櫓",
+"橼"=>"櫞",
+"檩"=>"檁",
+"欢"=>"歡",
+"欤"=>"歟",
+"欧"=>"歐",
+"歼"=>"殲",
+"殁"=>"歿",
+"殇"=>"殤",
+"残"=>"殘",
+"殒"=>"殞",
+"殓"=>"殮",
+"殚"=>"殫",
+"殡"=>"殯",
+"㱮"=>"殨",
+"殴"=>"毆",
+"毁"=>"毀",
+"毂"=>"轂",
+"毕"=>"畢",
+"毙"=>"斃",
+"毡"=>"氈",
+"毵"=>"毿",
+"氇"=>"氌",
+"气"=>"氣",
+"氢"=>"氫",
+"氩"=>"氬",
+"氲"=>"氳",
+"汉"=>"漢",
+"汤"=>"湯",
+"汹"=>"洶",
+"沟"=>"溝",
+"没"=>"沒",
+"沣"=>"灃",
+"沤"=>"漚",
+"沥"=>"瀝",
+"沦"=>"淪",
+"沧"=>"滄",
+"沪"=>"滬",
+"泞"=>"濘",
+"注"=>"註",
+"泪"=>"淚",
+"泶"=>"澩",
+"泷"=>"瀧",
+"泸"=>"瀘",
+"泺"=>"濼",
+"泻"=>"瀉",
+"泼"=>"潑",
+"泽"=>"澤",
+"泾"=>"涇",
+"洁"=>"潔",
+"洒"=>"灑",
+"洼"=>"窪",
+"浃"=>"浹",
+"浅"=>"淺",
+"浆"=>"漿",
+"浇"=>"澆",
+"浈"=>"湞",
+"浊"=>"濁",
+"测"=>"測",
+"浍"=>"澮",
+"济"=>"濟",
+"浏"=>"瀏",
+"浐"=>"滻",
+"浑"=>"渾",
+"浒"=>"滸",
+"浓"=>"濃",
+"浔"=>"潯",
+"涛"=>"濤",
+"涝"=>"澇",
+"涞"=>"淶",
+"涟"=>"漣",
+"涠"=>"潿",
+"涡"=>"渦",
+"涣"=>"渙",
+"涤"=>"滌",
+"润"=>"潤",
+"涧"=>"澗",
+"涨"=>"漲",
+"涩"=>"澀",
+"渊"=>"淵",
+"渌"=>"淥",
+"渍"=>"漬",
+"渎"=>"瀆",
+"渐"=>"漸",
+"渑"=>"澠",
+"渔"=>"漁",
+"渖"=>"瀋",
+"渗"=>"滲",
+"温"=>"溫",
+"湾"=>"灣",
+"湿"=>"濕",
+"溃"=>"潰",
+"溅"=>"濺",
+"溆"=>"漵",
+"滗"=>"潷",
+"滚"=>"滾",
+"滞"=>"滯",
+"滟"=>"灧",
+"滠"=>"灄",
+"满"=>"滿",
+"滢"=>"瀅",
+"滤"=>"濾",
+"滥"=>"濫",
+"滦"=>"灤",
+"滨"=>"濱",
+"滩"=>"灘",
+"滪"=>"澦",
+"漤"=>"灠",
+"潆"=>"瀠",
+"潇"=>"瀟",
+"潋"=>"瀲",
+"潍"=>"濰",
+"潜"=>"潛",
+"潴"=>"瀦",
+"澜"=>"瀾",
+"濑"=>"瀨",
+"濒"=>"瀕",
+"灏"=>"灝",
+"灭"=>"滅",
+"灯"=>"燈",
+"灵"=>"靈",
+"灶"=>"竈",
+"灾"=>"災",
+"灿"=>"燦",
+"炀"=>"煬",
+"炉"=>"爐",
+"炖"=>"燉",
+"炜"=>"煒",
+"炝"=>"熗",
+"点"=>"點",
+"炼"=>"煉",
+"炽"=>"熾",
+"烁"=>"爍",
+"烂"=>"爛",
+"烃"=>"烴",
+"烛"=>"燭",
+"烟"=>"煙",
+"烦"=>"煩",
+"烧"=>"燒",
+"烨"=>"燁",
+"烩"=>"燴",
+"烫"=>"燙",
+"烬"=>"燼",
+"热"=>"熱",
+"焕"=>"煥",
+"焖"=>"燜",
+"焘"=>"燾",
+"煴"=>"熅",
+"爱"=>"愛",
+"爷"=>"爺",
+"牍"=>"牘",
+"牦"=>"氂",
+"牵"=>"牽",
+"牺"=>"犧",
+"犊"=>"犢",
+"状"=>"狀",
+"犷"=>"獷",
+"犸"=>"獁",
+"犹"=>"猶",
+"狈"=>"狽",
+"狝"=>"獮",
+"狞"=>"獰",
+"独"=>"獨",
+"狭"=>"狹",
+"狮"=>"獅",
+"狯"=>"獪",
+"狰"=>"猙",
+"狱"=>"獄",
+"狲"=>"猻",
+"猃"=>"獫",
+"猎"=>"獵",
+"猕"=>"獼",
+"猡"=>"玀",
+"猪"=>"豬",
+"猫"=>"貓",
+"猬"=>"蝟",
+"献"=>"獻",
+"獭"=>"獺",
+"玑"=>"璣",
+"玚"=>"瑒",
+"玛"=>"瑪",
+"玮"=>"瑋",
+"环"=>"環",
+"现"=>"現",
+"玱"=>"瑲",
+"玺"=>"璽",
+"珐"=>"琺",
+"珑"=>"瓏",
+"珰"=>"璫",
+"珲"=>"琿",
+"琏"=>"璉",
+"琐"=>"瑣",
+"琼"=>"瓊",
+"瑶"=>"瑤",
+"瑷"=>"璦",
+"璎"=>"瓔",
+"瓒"=>"瓚",
+"瓯"=>"甌",
+"电"=>"電",
+"画"=>"畫",
+"畅"=>"暢",
+"畴"=>"疇",
+"疖"=>"癤",
+"疗"=>"療",
+"疟"=>"瘧",
+"疠"=>"癘",
+"疡"=>"瘍",
+"疬"=>"癧",
+"疭"=>"瘲",
+"疮"=>"瘡",
+"疯"=>"瘋",
+"疱"=>"皰",
+"疴"=>"痾",
+"痈"=>"癰",
+"痉"=>"痙",
+"痒"=>"癢",
+"痖"=>"瘂",
+"痨"=>"癆",
+"痪"=>"瘓",
+"痫"=>"癇",
+"瘅"=>"癉",
+"瘆"=>"瘮",
+"瘗"=>"瘞",
+"瘪"=>"癟",
+"瘫"=>"癱",
+"瘾"=>"癮",
+"瘿"=>"癭",
+"癞"=>"癩",
+"癣"=>"癬",
+"癫"=>"癲",
+"皑"=>"皚",
+"皱"=>"皺",
+"皲"=>"皸",
+"盏"=>"盞",
+"盐"=>"鹽",
+"监"=>"監",
+"盖"=>"蓋",
+"盗"=>"盜",
+"盘"=>"盤",
+"眍"=>"瞘",
+"眦"=>"眥",
+"眬"=>"矓",
+"着"=>"著",
+"睁"=>"睜",
+"睐"=>"睞",
+"睑"=>"瞼",
+"瞆"=>"瞶",
+"瞒"=>"瞞",
+"䁖"=>"瞜",
+"瞩"=>"矚",
+"矫"=>"矯",
+"矶"=>"磯",
+"矾"=>"礬",
+"矿"=>"礦",
+"砀"=>"碭",
+"码"=>"碼",
+"砖"=>"磚",
+"砗"=>"硨",
+"砚"=>"硯",
+"砜"=>"碸",
+"砺"=>"礪",
+"砻"=>"礱",
+"砾"=>"礫",
+"础"=>"礎",
+"硁"=>"硜",
+"硕"=>"碩",
+"硖"=>"硤",
+"硗"=>"磽",
+"硙"=>"磑",
+"碍"=>"礙",
+"碛"=>"磧",
+"碜"=>"磣",
+"碱"=>"鹼",
+"礼"=>"禮",
+"祃"=>"禡",
+"祎"=>"禕",
+"祢"=>"禰",
+"祯"=>"禎",
+"祷"=>"禱",
+"祸"=>"禍",
+"禀"=>"稟",
+"禄"=>"祿",
+"禅"=>"禪",
+"离"=>"離",
+"秃"=>"禿",
+"秆"=>"稈",
+"积"=>"積",
+"称"=>"稱",
+"秽"=>"穢",
+"秾"=>"穠",
+"稆"=>"穭",
+"税"=>"稅",
+"稣"=>"穌",
+"稳"=>"穩",
+"穑"=>"穡",
+"穷"=>"窮",
+"窃"=>"竊",
+"窍"=>"竅",
+"窎"=>"窵",
+"窑"=>"窯",
+"窜"=>"竄",
+"窝"=>"窩",
+"窥"=>"窺",
+"窦"=>"竇",
+"窭"=>"窶",
+"竞"=>"競",
+"笃"=>"篤",
+"笋"=>"筍",
+"笔"=>"筆",
+"笕"=>"筧",
+"笺"=>"箋",
+"笼"=>"籠",
+"笾"=>"籩",
+"筚"=>"篳",
+"筛"=>"篩",
+"筜"=>"簹",
+"筝"=>"箏",
+"䇲"=>"筴",
+"筹"=>"籌",
+"筼"=>"篔",
+"简"=>"簡",
+"箓"=>"籙",
+"箦"=>"簀",
+"箧"=>"篋",
+"箨"=>"籜",
+"箩"=>"籮",
+"箪"=>"簞",
+"箫"=>"簫",
+"篑"=>"簣",
+"篓"=>"簍",
+"篮"=>"籃",
+"篱"=>"籬",
+"簖"=>"籪",
+"籁"=>"籟",
+"籴"=>"糴",
+"类"=>"類",
+"籼"=>"秈",
+"粜"=>"糶",
+"粝"=>"糲",
+"粤"=>"粵",
+"粪"=>"糞",
+"粮"=>"糧",
+"糁"=>"糝",
+"糇"=>"餱",
+"紧"=>"緊",
+"䌷"=>"紬",
+"䌹"=>"絅",
+"絷"=>"縶",
+"䌸"=>"縳",
+"䍁"=>"繸",
+"纟"=>"糹",
+"纠"=>"糾",
+"纡"=>"紆",
+"红"=>"紅",
+"纣"=>"紂",
+"纥"=>"紇",
+"约"=>"約",
+"级"=>"級",
+"纨"=>"紈",
+"纩"=>"纊",
+"纪"=>"紀",
+"纫"=>"紉",
+"纬"=>"緯",
+"纭"=>"紜",
+"纮"=>"紘",
+"纯"=>"純",
+"纰"=>"紕",
+"纱"=>"紗",
+"纲"=>"綱",
+"纳"=>"納",
+"纴"=>"紝",
+"纵"=>"縱",
+"纶"=>"綸",
+"纷"=>"紛",
+"纸"=>"紙",
+"纹"=>"紋",
+"纺"=>"紡",
+"纻"=>"紵",
+"纼"=>"紖",
+"纽"=>"紐",
+"纾"=>"紓",
+"绀"=>"紺",
+"绁"=>"紲",
+"绂"=>"紱",
+"练"=>"練",
+"组"=>"組",
+"绅"=>"紳",
+"细"=>"細",
+"织"=>"織",
+"终"=>"終",
+"绉"=>"縐",
+"绊"=>"絆",
+"绋"=>"紼",
+"绌"=>"絀",
+"绍"=>"紹",
+"绎"=>"繹",
+"经"=>"經",
+"绐"=>"紿",
+"绑"=>"綁",
+"绒"=>"絨",
+"结"=>"結",
+"绔"=>"絝",
+"绕"=>"繞",
+"绖"=>"絰",
+"绗"=>"絎",
+"绘"=>"繪",
+"给"=>"給",
+"绚"=>"絢",
+"绛"=>"絳",
+"络"=>"絡",
+"绞"=>"絞",
+"统"=>"統",
+"绠"=>"綆",
+"绡"=>"綃",
+"绢"=>"絹",
+"绤"=>"綌",
+"绥"=>"綏",
+"继"=>"繼",
+"绨"=>"綈",
+"绩"=>"績",
+"绪"=>"緒",
+"绫"=>"綾",
+"绬"=>"緓",
+"续"=>"續",
+"绮"=>"綺",
+"绯"=>"緋",
+"绰"=>"綽",
+"绲"=>"緄",
+"绳"=>"繩",
+"维"=>"維",
+"绵"=>"綿",
+"绶"=>"綬",
+"绸"=>"綢",
+"绹"=>"綯",
+"绺"=>"綹",
+"绻"=>"綣",
+"综"=>"綜",
+"绽"=>"綻",
+"绾"=>"綰",
+"缀"=>"綴",
+"缁"=>"緇",
+"缂"=>"緙",
+"缃"=>"緗",
+"缄"=>"緘",
+"缅"=>"緬",
+"缆"=>"纜",
+"缇"=>"緹",
+"缈"=>"緲",
+"缉"=>"緝",
+"缊"=>"縕",
+"缋"=>"繢",
+"缌"=>"緦",
+"缍"=>"綞",
+"缎"=>"緞",
+"缏"=>"緶",
+"缑"=>"緱",
+"缒"=>"縋",
+"缓"=>"緩",
+"缔"=>"締",
+"缕"=>"縷",
+"编"=>"編",
+"缗"=>"緡",
+"缘"=>"緣",
+"缙"=>"縉",
+"缚"=>"縛",
+"缛"=>"縟",
+"缜"=>"縝",
+"缝"=>"縫",
+"缞"=>"縗",
+"缟"=>"縞",
+"缠"=>"纏",
+"缡"=>"縭",
+"缢"=>"縊",
+"缣"=>"縑",
+"缤"=>"繽",
+"缥"=>"縹",
+"缦"=>"縵",
+"缧"=>"縲",
+"缨"=>"纓",
+"缩"=>"縮",
+"缪"=>"繆",
+"缫"=>"繅",
+"缬"=>"纈",
+"缭"=>"繚",
+"缮"=>"繕",
+"缯"=>"繒",
+"缱"=>"繾",
+"缲"=>"繰",
+"缳"=>"繯",
+"缴"=>"繳",
+"缵"=>"纘",
+"罂"=>"罌",
+"网"=>"網",
+"罗"=>"羅",
+"罚"=>"罰",
+"罢"=>"罷",
+"罴"=>"羆",
+"羁"=>"羈",
+"羟"=>"羥",
+"翘"=>"翹",
+"耢"=>"耮",
+"耧"=>"耬",
+"耸"=>"聳",
+"耻"=>"恥",
+"聂"=>"聶",
+"聋"=>"聾",
+"职"=>"職",
+"聍"=>"聹",
+"联"=>"聯",
+"聩"=>"聵",
+"聪"=>"聰",
+"肃"=>"肅",
+"肠"=>"腸",
+"肤"=>"膚",
+"肮"=>"骯",
+"肴"=>"餚",
+"肾"=>"腎",
+"肿"=>"腫",
+"胀"=>"脹",
+"胁"=>"脅",
+"胆"=>"膽",
+"胧"=>"朧",
+"胨"=>"腖",
+"胪"=>"臚",
+"胫"=>"脛",
+"胶"=>"膠",
+"脉"=>"脈",
+"脍"=>"膾",
+"脐"=>"臍",
+"脑"=>"腦",
+"脓"=>"膿",
+"脔"=>"臠",
+"脚"=>"腳",
+"脱"=>"脫",
+"脶"=>"腡",
+"脸"=>"臉",
+"腭"=>"齶",
+"腻"=>"膩",
+"腼"=>"靦",
+"腽"=>"膃",
+"腾"=>"騰",
+"膑"=>"臏",
+"臜"=>"臢",
+"舆"=>"輿",
+"舣"=>"艤",
+"舰"=>"艦",
+"舱"=>"艙",
+"舻"=>"艫",
+"艰"=>"艱",
+"艳"=>"艷",
+"艺"=>"藝",
+"节"=>"節",
+"芈"=>"羋",
+"芗"=>"薌",
+"芜"=>"蕪",
+"芦"=>"蘆",
+"苁"=>"蓯",
+"苇"=>"葦",
+"苈"=>"藶",
+"苋"=>"莧",
+"苌"=>"萇",
+"苍"=>"蒼",
+"苎"=>"苧",
+"茎"=>"莖",
+"茏"=>"蘢",
+"茑"=>"蔦",
+"茔"=>"塋",
+"茕"=>"煢",
+"茧"=>"繭",
+"荆"=>"荊",
+"荐"=>"薦",
+"荙"=>"薘",
+"荚"=>"莢",
+"荛"=>"蕘",
+"荜"=>"蓽",
+"荞"=>"蕎",
+"荟"=>"薈",
+"荠"=>"薺",
+"荡"=>"蕩",
+"荣"=>"榮",
+"荤"=>"葷",
+"荥"=>"滎",
+"荦"=>"犖",
+"荧"=>"熒",
+"荨"=>"蕁",
+"荩"=>"藎",
+"荪"=>"蓀",
+"荫"=>"蔭",
+"荬"=>"蕒",
+"荭"=>"葒",
+"荮"=>"葤",
+"莅"=>"蒞",
+"莱"=>"萊",
+"莲"=>"蓮",
+"莳"=>"蒔",
+"莴"=>"萵",
+"莶"=>"薟",
+"莸"=>"蕕",
+"莹"=>"瑩",
+"莺"=>"鶯",
+"萝"=>"蘿",
+"萤"=>"螢",
+"营"=>"營",
+"萦"=>"縈",
+"萧"=>"蕭",
+"萨"=>"薩",
+"葱"=>"蔥",
+"蒇"=>"蕆",
+"蒉"=>"蕢",
+"蒋"=>"蔣",
+"蒌"=>"蔞",
+"蓝"=>"藍",
+"蓟"=>"薊",
+"蓠"=>"蘺",
+"蓣"=>"蕷",
+"蓥"=>"鎣",
+"蓦"=>"驀",
+"蔂"=>"虆",
+"蔷"=>"薔",
+"蔹"=>"蘞",
+"蔺"=>"藺",
+"蔼"=>"藹",
+"蕰"=>"薀",
+"蕲"=>"蘄",
+"薮"=>"藪",
+"藓"=>"蘚",
+"蘖"=>"櫱",
+"虏"=>"虜",
+"虑"=>"慮",
+"虚"=>"虛",
+"虬"=>"虯",
+"虮"=>"蟣",
+"虽"=>"雖",
+"虾"=>"蝦",
+"虿"=>"蠆",
+"蚀"=>"蝕",
+"蚁"=>"蟻",
+"蚂"=>"螞",
+"蚕"=>"蠶",
+"蚬"=>"蜆",
+"蛊"=>"蠱",
+"蛎"=>"蠣",
+"蛏"=>"蟶",
+"蛮"=>"蠻",
+"蛰"=>"蟄",
+"蛱"=>"蛺",
+"蛲"=>"蟯",
+"蛳"=>"螄",
+"蛴"=>"蠐",
+"蜕"=>"蛻",
+"蜗"=>"蝸",
+"蝇"=>"蠅",
+"蝈"=>"蟈",
+"蝉"=>"蟬",
+"蝼"=>"螻",
+"蝾"=>"蠑",
+"螀"=>"螿",
+"螨"=>"蟎",
+"蟏"=>"蠨",
+"衅"=>"釁",
+"衔"=>"銜",
+"补"=>"補",
+"衬"=>"襯",
+"衮"=>"袞",
+"袄"=>"襖",
+"袅"=>"裊",
+"袆"=>"褘",
+"袜"=>"襪",
+"袭"=>"襲",
+"袯"=>"襏",
+"装"=>"裝",
+"裆"=>"襠",
+"裈"=>"褌",
+"裢"=>"褳",
+"裣"=>"襝",
+"裤"=>"褲",
+"裥"=>"襇",
+"褛"=>"褸",
+"褴"=>"襤",
+"见"=>"見",
+"观"=>"觀",
+"觃"=>"覎",
+"规"=>"規",
+"觅"=>"覓",
+"视"=>"視",
+"觇"=>"覘",
+"览"=>"覽",
+"觉"=>"覺",
+"觊"=>"覬",
+"觋"=>"覡",
+"觌"=>"覿",
+"觍"=>"覥",
+"觎"=>"覦",
+"觏"=>"覯",
+"觐"=>"覲",
+"觑"=>"覷",
+"觞"=>"觴",
+"触"=>"觸",
+"觯"=>"觶",
+"訚"=>"誾",
+"䜣"=>"訢",
+"誉"=>"譽",
+"誊"=>"謄",
+"讠"=>"訁",
+"计"=>"計",
+"订"=>"訂",
+"讣"=>"訃",
+"认"=>"認",
+"讥"=>"譏",
+"讦"=>"訐",
+"讧"=>"訌",
+"讨"=>"討",
+"让"=>"讓",
+"讪"=>"訕",
+"讫"=>"訖",
+"讬"=>"託",
+"训"=>"訓",
+"议"=>"議",
+"讯"=>"訊",
+"记"=>"記",
+"讱"=>"訒",
+"讲"=>"講",
+"讳"=>"諱",
+"讴"=>"謳",
+"讵"=>"詎",
+"讶"=>"訝",
+"讷"=>"訥",
+"许"=>"許",
+"讹"=>"訛",
+"论"=>"論",
+"讻"=>"訩",
+"讼"=>"訟",
+"讽"=>"諷",
+"设"=>"設",
+"访"=>"訪",
+"诀"=>"訣",
+"证"=>"證",
+"诂"=>"詁",
+"诃"=>"訶",
+"评"=>"評",
+"诅"=>"詛",
+"识"=>"識",
+"诇"=>"詗",
+"诈"=>"詐",
+"诉"=>"訴",
+"诊"=>"診",
+"诋"=>"詆",
+"诌"=>"謅",
+"词"=>"詞",
+"诎"=>"詘",
+"诏"=>"詔",
+"诐"=>"詖",
+"译"=>"譯",
+"诒"=>"詒",
+"诓"=>"誆",
+"诔"=>"誄",
+"试"=>"試",
+"诖"=>"詿",
+"诗"=>"詩",
+"诘"=>"詰",
+"诙"=>"詼",
+"诚"=>"誠",
+"诛"=>"誅",
+"诜"=>"詵",
+"话"=>"話",
+"诞"=>"誕",
+"诟"=>"詬",
+"诠"=>"詮",
+"诡"=>"詭",
+"询"=>"詢",
+"诣"=>"詣",
+"诤"=>"諍",
+"该"=>"該",
+"详"=>"詳",
+"诧"=>"詫",
+"诨"=>"諢",
+"诩"=>"詡",
+"诪"=>"譸",
+"诫"=>"誡",
+"诬"=>"誣",
+"语"=>"語",
+"诮"=>"誚",
+"误"=>"誤",
+"诰"=>"誥",
+"诱"=>"誘",
+"诲"=>"誨",
+"诳"=>"誑",
+"诵"=>"誦",
+"诶"=>"誒",
+"请"=>"請",
+"诸"=>"諸",
+"诹"=>"諏",
+"诺"=>"諾",
+"读"=>"讀",
+"诼"=>"諑",
+"诽"=>"誹",
+"课"=>"課",
+"诿"=>"諉",
+"谀"=>"諛",
+"谁"=>"誰",
+"谂"=>"諗",
+"调"=>"調",
+"谄"=>"諂",
+"谅"=>"諒",
+"谆"=>"諄",
+"谇"=>"誶",
+"谈"=>"談",
+"谊"=>"誼",
+"谋"=>"謀",
+"谌"=>"諶",
+"谍"=>"諜",
+"谎"=>"謊",
+"谏"=>"諫",
+"谐"=>"諧",
+"谑"=>"謔",
+"谒"=>"謁",
+"谓"=>"謂",
+"谔"=>"諤",
+"谕"=>"諭",
+"谖"=>"諼",
+"谗"=>"讒",
+"谘"=>"諮",
+"谙"=>"諳",
+"谚"=>"諺",
+"谛"=>"諦",
+"谜"=>"謎",
+"谝"=>"諞",
+"谞"=>"諝",
+"谟"=>"謨",
+"谠"=>"讜",
+"谡"=>"謖",
+"谢"=>"謝",
+"谤"=>"謗",
+"谥"=>"謚",
+"谦"=>"謙",
+"谧"=>"謐",
+"谨"=>"謹",
+"谩"=>"謾",
+"谪"=>"謫",
+"谬"=>"謬",
+"谭"=>"譚",
+"谮"=>"譖",
+"谯"=>"譙",
+"谰"=>"讕",
+"谱"=>"譜",
+"谲"=>"譎",
+"谳"=>"讞",
+"谴"=>"譴",
+"谵"=>"譫",
+"谶"=>"讖",
+"豮"=>"豶",
+"贝"=>"貝",
+"贞"=>"貞",
+"负"=>"負",
+"贠"=>"貟",
+"贡"=>"貢",
+"财"=>"財",
+"责"=>"責",
+"贤"=>"賢",
+"败"=>"敗",
+"账"=>"賬",
+"货"=>"貨",
+"质"=>"質",
+"贩"=>"販",
+"贪"=>"貪",
+"贫"=>"貧",
+"贬"=>"貶",
+"购"=>"購",
+"贮"=>"貯",
+"贯"=>"貫",
+"贰"=>"貳",
+"贱"=>"賤",
+"贲"=>"賁",
+"贳"=>"貰",
+"贴"=>"貼",
+"贵"=>"貴",
+"贶"=>"貺",
+"贷"=>"貸",
+"贸"=>"貿",
+"费"=>"費",
+"贺"=>"賀",
+"贻"=>"貽",
+"贼"=>"賊",
+"贽"=>"贄",
+"贾"=>"賈",
+"贿"=>"賄",
+"赀"=>"貲",
+"赁"=>"賃",
+"赂"=>"賂",
+"资"=>"資",
+"赅"=>"賅",
+"赆"=>"贐",
+"赇"=>"賕",
+"赈"=>"賑",
+"赉"=>"賚",
+"赊"=>"賒",
+"赋"=>"賦",
+"赌"=>"賭",
+"赎"=>"贖",
+"赏"=>"賞",
+"赐"=>"賜",
+"赑"=>"贔",
+"赒"=>"賙",
+"赓"=>"賡",
+"赔"=>"賠",
+"赕"=>"賧",
+"赖"=>"賴",
+"赗"=>"賵",
+"赘"=>"贅",
+"赙"=>"賻",
+"赚"=>"賺",
+"赛"=>"賽",
+"赜"=>"賾",
+"赞"=>"贊",
+"赟"=>"贇",
+"赠"=>"贈",
+"赡"=>"贍",
+"赢"=>"贏",
+"赣"=>"贛",
+"赪"=>"赬",
+"赵"=>"趙",
+"赶"=>"趕",
+"趋"=>"趨",
+"趱"=>"趲",
+"趸"=>"躉",
+"跃"=>"躍",
+"跄"=>"蹌",
+"跞"=>"躒",
+"践"=>"踐",
+"跶"=>"躂",
+"跷"=>"蹺",
+"跸"=>"蹕",
+"跹"=>"躚",
+"跻"=>"躋",
+"踊"=>"踴",
+"踌"=>"躊",
+"踪"=>"蹤",
+"踬"=>"躓",
+"踯"=>"躑",
+"蹑"=>"躡",
+"蹒"=>"蹣",
+"蹰"=>"躕",
+"蹿"=>"躥",
+"躏"=>"躪",
+"躜"=>"躦",
+"躯"=>"軀",
+"车"=>"車",
+"轧"=>"軋",
+"轨"=>"軌",
+"轩"=>"軒",
+"轪"=>"軑",
+"轫"=>"軔",
+"转"=>"轉",
+"轭"=>"軛",
+"轮"=>"輪",
+"软"=>"軟",
+"轰"=>"轟",
+"轱"=>"軲",
+"轲"=>"軻",
+"轳"=>"轤",
+"轴"=>"軸",
+"轵"=>"軹",
+"轶"=>"軼",
+"轷"=>"軤",
+"轸"=>"軫",
+"轹"=>"轢",
+"轺"=>"軺",
+"轻"=>"輕",
+"轼"=>"軾",
+"载"=>"載",
+"轾"=>"輊",
+"轿"=>"轎",
+"辀"=>"輈",
+"辁"=>"輇",
+"辂"=>"輅",
+"较"=>"較",
+"辄"=>"輒",
+"辅"=>"輔",
+"辆"=>"輛",
+"辇"=>"輦",
+"辈"=>"輩",
+"辉"=>"輝",
+"辊"=>"輥",
+"辋"=>"輞",
+"辌"=>"輬",
+"辍"=>"輟",
+"辎"=>"輜",
+"辏"=>"輳",
+"辐"=>"輻",
+"辑"=>"輯",
+"辒"=>"轀",
+"输"=>"輸",
+"辔"=>"轡",
+"辕"=>"轅",
+"辖"=>"轄",
+"辗"=>"輾",
+"辘"=>"轆",
+"辙"=>"轍",
+"辚"=>"轔",
+"辞"=>"辭",
+"辩"=>"辯",
+"辫"=>"辮",
+"边"=>"邊",
+"辽"=>"遼",
+"达"=>"達",
+"迁"=>"遷",
+"过"=>"過",
+"迈"=>"邁",
+"运"=>"運",
+"还"=>"還",
+"这"=>"這",
+"进"=>"進",
+"远"=>"遠",
+"违"=>"違",
+"连"=>"連",
+"迟"=>"遲",
+"迩"=>"邇",
+"迳"=>"逕",
+"迹"=>"跡",
+"选"=>"選",
+"逊"=>"遜",
+"递"=>"遞",
+"逦"=>"邐",
+"逻"=>"邏",
+"遗"=>"遺",
+"遥"=>"遙",
+"邓"=>"鄧",
+"邝"=>"鄺",
+"邬"=>"鄔",
+"邮"=>"郵",
+"邹"=>"鄒",
+"邺"=>"鄴",
+"邻"=>"鄰",
+"郏"=>"郟",
+"郐"=>"鄶",
+"郑"=>"鄭",
+"郓"=>"鄆",
+"郦"=>"酈",
+"郧"=>"鄖",
+"郸"=>"鄲",
+"酂"=>"酇",
+"酦"=>"醱",
+"酱"=>"醬",
+"酽"=>"釅",
+"酾"=>"釃",
+"酿"=>"釀",
+"释"=>"釋",
+"鉴"=>"鑒",
+"銮"=>"鑾",
+"錾"=>"鏨",
+"钅"=>"釒",
+"钆"=>"釓",
+"钇"=>"釔",
+"针"=>"針",
+"钉"=>"釘",
+"钊"=>"釗",
+"钋"=>"釙",
+"钌"=>"釕",
+"钍"=>"釷",
+"钎"=>"釺",
+"钏"=>"釧",
+"钐"=>"釤",
+"钑"=>"鈒",
+"钒"=>"釩",
+"钓"=>"釣",
+"钔"=>"鍆",
+"钕"=>"釹",
+"钖"=>"鍚",
+"钗"=>"釵",
+"钘"=>"鈃",
+"钙"=>"鈣",
+"钚"=>"鈈",
+"钛"=>"鈦",
+"钜"=>"鉅",
+"钝"=>"鈍",
+"钞"=>"鈔",
+"钠"=>"鈉",
+"钡"=>"鋇",
+"钢"=>"鋼",
+"钣"=>"鈑",
+"钤"=>"鈐",
+"钥"=>"鑰",
+"钦"=>"欽",
+"钧"=>"鈞",
+"钨"=>"鎢",
+"钪"=>"鈧",
+"钫"=>"鈁",
+"钬"=>"鈥",
+"钭"=>"鈄",
+"钮"=>"鈕",
+"钯"=>"鈀",
+"钰"=>"鈺",
+"钱"=>"錢",
+"钲"=>"鉦",
+"钳"=>"鉗",
+"钴"=>"鈷",
+"钶"=>"鈳",
+"钷"=>"鉕",
+"钸"=>"鈽",
+"钹"=>"鈸",
+"钺"=>"鉞",
+"钻"=>"鑽",
+"钼"=>"鉬",
+"钽"=>"鉭",
+"钾"=>"鉀",
+"钿"=>"鈿",
+"铀"=>"鈾",
+"铁"=>"鐵",
+"铂"=>"鉑",
+"铃"=>"鈴",
+"铄"=>"鑠",
+"铅"=>"鉛",
+"铆"=>"鉚",
+"铇"=>"鉋",
+"铈"=>"鈰",
+"铉"=>"鉉",
+"铊"=>"鉈",
+"铋"=>"鉍",
+"铌"=>"鈮",
+"铍"=>"鈹",
+"铎"=>"鐸",
+"铏"=>"鉶",
+"铐"=>"銬",
+"铑"=>"銠",
+"铒"=>"鉺",
+"铓"=>"鋩",
+"铔"=>"錏",
+"铕"=>"銪",
+"铖"=>"鋮",
+"铗"=>"鋏",
+"铘"=>"鋣",
+"铙"=>"鐃",
+"铚"=>"銍",
+"铛"=>"鐺",
+"铜"=>"銅",
+"铝"=>"鋁",
+"铞"=>"銱",
+"铟"=>"銦",
+"铠"=>"鎧",
+"铡"=>"鍘",
+"铢"=>"銖",
+"铣"=>"銑",
+"铤"=>"鋌",
+"铥"=>"銩",
+"铦"=>"銛",
+"铧"=>"鏵",
+"铨"=>"銓",
+"铩"=>"鎩",
+"铪"=>"鉿",
+"铫"=>"銚",
+"铬"=>"鉻",
+"铭"=>"銘",
+"铮"=>"錚",
+"铯"=>"銫",
+"铰"=>"鉸",
+"铱"=>"銥",
+"铲"=>"鏟",
+"铳"=>"銃",
+"铴"=>"鐋",
+"铵"=>"銨",
+"银"=>"銀",
+"铷"=>"銣",
+"铸"=>"鑄",
+"铹"=>"鐒",
+"铺"=>"鋪",
+"铻"=>"鋙",
+"铼"=>"錸",
+"铽"=>"鋱",
+"链"=>"鏈",
+"铿"=>"鏗",
+"销"=>"銷",
+"锁"=>"鎖",
+"锂"=>"鋰",
+"锃"=>"鋥",
+"锄"=>"鋤",
+"锅"=>"鍋",
+"锆"=>"鋯",
+"锇"=>"鋨",
+"锉"=>"銼",
+"锊"=>"鋝",
+"锋"=>"鋒",
+"锌"=>"鋅",
+"锍"=>"鋶",
+"锎"=>"鐦",
+"锏"=>"鐧",
+"锑"=>"銻",
+"锒"=>"鋃",
+"锓"=>"鋟",
+"锔"=>"鋦",
+"锕"=>"錒",
+"锖"=>"錆",
+"锗"=>"鍺",
+"锘"=>"鍩",
+"错"=>"錯",
+"锚"=>"錨",
+"锛"=>"錛",
+"锜"=>"錡",
+"锝"=>"鍀",
+"锞"=>"錁",
+"锟"=>"錕",
+"锠"=>"錩",
+"锡"=>"錫",
+"锢"=>"錮",
+"锣"=>"鑼",
+"锤"=>"錘",
+"锥"=>"錐",
+"锦"=>"錦",
+"锧"=>"鑕",
+"锩"=>"錈",
+"锪"=>"鍃",
+"锫"=>"錇",
+"锬"=>"錟",
+"锭"=>"錠",
+"键"=>"鍵",
+"锯"=>"鋸",
+"锰"=>"錳",
+"锱"=>"錙",
+"锲"=>"鍥",
+"锳"=>"鍈",
+"锴"=>"鍇",
+"锵"=>"鏘",
+"锶"=>"鍶",
+"锷"=>"鍔",
+"锸"=>"鍤",
+"锹"=>"鍬",
+"锺"=>"鍾",
+"锻"=>"鍛",
+"锼"=>"鎪",
+"锽"=>"鍠",
+"锾"=>"鍰",
+"锿"=>"鎄",
+"镀"=>"鍍",
+"镁"=>"鎂",
+"镂"=>"鏤",
+"镃"=>"鎡",
+"镄"=>"鐨",
+"镅"=>"鎇",
+"镆"=>"鏌",
+"镇"=>"鎮",
+"镈"=>"鎛",
+"镉"=>"鎘",
+"镊"=>"鑷",
+"镋"=>"鎲",
+"镍"=>"鎳",
+"镎"=>"鎿",
+"镏"=>"鎦",
+"镐"=>"鎬",
+"镑"=>"鎊",
+"镒"=>"鎰",
+"镓"=>"鎵",
+"镔"=>"鑌",
+"镕"=>"鎔",
+"镖"=>"鏢",
+"镗"=>"鏜",
+"镘"=>"鏝",
+"镙"=>"鏍",
+"镚"=>"鏰",
+"镛"=>"鏞",
+"镜"=>"鏡",
+"镝"=>"鏑",
+"镞"=>"鏃",
+"镟"=>"鏇",
+"镠"=>"鏐",
+"镡"=>"鐔",
+"镣"=>"鐐",
+"镤"=>"鏷",
+"镥"=>"鑥",
+"镦"=>"鐓",
+"镧"=>"鑭",
+"镨"=>"鐠",
+"镩"=>"鑹",
+"镪"=>"鏹",
+"镫"=>"鐙",
+"镬"=>"鑊",
+"镭"=>"鐳",
+"镮"=>"鐶",
+"镯"=>"鐲",
+"镰"=>"鐮",
+"镱"=>"鐿",
+"镲"=>"鑔",
+"镳"=>"鑣",
+"镴"=>"鑞",
+"镵"=>"鑱",
+"镶"=>"鑲",
+"长"=>"長",
+"门"=>"門",
+"闩"=>"閂",
+"闪"=>"閃",
+"闫"=>"閆",
+"闬"=>"閈",
+"闭"=>"閉",
+"问"=>"問",
+"闯"=>"闖",
+"闰"=>"閏",
+"闱"=>"闈",
+"闲"=>"閑",
+"闳"=>"閎",
+"间"=>"間",
+"闵"=>"閔",
+"闶"=>"閌",
+"闷"=>"悶",
+"闸"=>"閘",
+"闹"=>"鬧",
+"闺"=>"閨",
+"闻"=>"聞",
+"闼"=>"闥",
+"闽"=>"閩",
+"闾"=>"閭",
+"闿"=>"闓",
+"阀"=>"閥",
+"阁"=>"閣",
+"阂"=>"閡",
+"阃"=>"閫",
+"阄"=>"鬮",
+"阆"=>"閬",
+"阇"=>"闍",
+"阈"=>"閾",
+"阉"=>"閹",
+"阊"=>"閶",
+"阋"=>"鬩",
+"阌"=>"閿",
+"阍"=>"閽",
+"阎"=>"閻",
+"阏"=>"閼",
+"阐"=>"闡",
+"阑"=>"闌",
+"阒"=>"闃",
+"阓"=>"闠",
+"阔"=>"闊",
+"阕"=>"闋",
+"阖"=>"闔",
+"阗"=>"闐",
+"阘"=>"闒",
+"阙"=>"闕",
+"阚"=>"闞",
+"阛"=>"闤",
+"队"=>"隊",
+"阳"=>"陽",
+"阴"=>"陰",
+"阵"=>"陣",
+"阶"=>"階",
+"际"=>"際",
+"陆"=>"陸",
+"陇"=>"隴",
+"陈"=>"陳",
+"陉"=>"陘",
+"陕"=>"陝",
+"陧"=>"隉",
+"陨"=>"隕",
+"险"=>"險",
+"随"=>"隨",
+"隐"=>"隱",
+"隶"=>"隸",
+"隽"=>"雋",
+"难"=>"難",
+"雏"=>"雛",
+"雠"=>"讎",
+"雳"=>"靂",
+"雾"=>"霧",
+"霁"=>"霽",
+"霡"=>"霢",
+"霭"=>"靄",
+"靓"=>"靚",
+"静"=>"靜",
+"靥"=>"靨",
+"鞑"=>"韃",
+"鞒"=>"鞽",
+"鞯"=>"韉",
+"韦"=>"韋",
+"韧"=>"韌",
+"韨"=>"韍",
+"韩"=>"韓",
+"韪"=>"韙",
+"韫"=>"韞",
+"韬"=>"韜",
+"韵"=>"韻",
+"页"=>"頁",
+"顶"=>"頂",
+"顷"=>"頃",
+"顸"=>"頇",
+"项"=>"項",
+"顺"=>"順",
+"顼"=>"頊",
+"顽"=>"頑",
+"顾"=>"顧",
+"顿"=>"頓",
+"颀"=>"頎",
+"颁"=>"頒",
+"颂"=>"頌",
+"颃"=>"頏",
+"预"=>"預",
+"颅"=>"顱",
+"领"=>"領",
+"颇"=>"頗",
+"颈"=>"頸",
+"颉"=>"頡",
+"颊"=>"頰",
+"颋"=>"頲",
+"颌"=>"頜",
+"颍"=>"潁",
+"颎"=>"熲",
+"颏"=>"頦",
+"颐"=>"頤",
+"频"=>"頻",
+"颒"=>"頮",
+"颔"=>"頷",
+"颕"=>"頴",
+"颖"=>"穎",
+"颗"=>"顆",
+"题"=>"題",
+"颙"=>"顒",
+"颚"=>"顎",
+"颛"=>"顓",
+"额"=>"額",
+"颞"=>"顳",
+"颟"=>"顢",
+"颠"=>"顛",
+"颡"=>"顙",
+"颢"=>"顥",
+"颤"=>"顫",
+"颥"=>"顬",
+"颦"=>"顰",
+"颧"=>"顴",
+"风"=>"風",
+"飏"=>"颺",
+"飐"=>"颭",
+"飑"=>"颮",
+"飒"=>"颯",
+"飓"=>"颶",
+"飔"=>"颸",
+"飕"=>"颼",
+"飖"=>"颻",
+"飗"=>"飀",
+"飘"=>"飄",
+"飙"=>"飆",
+"飚"=>"飈",
+"飞"=>"飛",
+"飨"=>"饗",
+"餍"=>"饜",
+"饣"=>"飠",
+"饤"=>"飣",
+"饦"=>"飥",
+"饧"=>"餳",
+"饨"=>"飩",
+"饩"=>"餼",
+"饪"=>"飪",
+"饫"=>"飫",
+"饬"=>"飭",
+"饭"=>"飯",
+"饮"=>"飲",
+"饯"=>"餞",
+"饰"=>"飾",
+"饱"=>"飽",
+"饲"=>"飼",
+"饳"=>"飿",
+"饴"=>"飴",
+"饵"=>"餌",
+"饶"=>"饒",
+"饷"=>"餉",
+"饸"=>"餄",
+"饹"=>"餎",
+"饺"=>"餃",
+"饻"=>"餏",
+"饼"=>"餅",
+"饽"=>"餑",
+"饾"=>"餖",
+"饿"=>"餓",
+"馀"=>"餘",
+"馁"=>"餒",
+"馂"=>"餕",
+"馃"=>"餜",
+"馄"=>"餛",
+"馅"=>"餡",
+"馆"=>"館",
+"馇"=>"餷",
+"馈"=>"饋",
+"馉"=>"餶",
+"馊"=>"餿",
+"馋"=>"饞",
+"馌"=>"饁",
+"馍"=>"饃",
+"馎"=>"餺",
+"馏"=>"餾",
+"馐"=>"饈",
+"馑"=>"饉",
+"馒"=>"饅",
+"馓"=>"饊",
+"馔"=>"饌",
+"馕"=>"饢",
+"马"=>"馬",
+"驭"=>"馭",
+"驮"=>"馱",
+"驯"=>"馴",
+"驰"=>"馳",
+"驱"=>"驅",
+"驲"=>"馹",
+"驳"=>"駁",
+"驴"=>"驢",
+"驵"=>"駔",
+"驶"=>"駛",
+"驷"=>"駟",
+"驸"=>"駙",
+"驹"=>"駒",
+"驺"=>"騶",
+"驻"=>"駐",
+"驼"=>"駝",
+"驽"=>"駑",
+"驾"=>"駕",
+"驿"=>"驛",
+"骀"=>"駘",
+"骁"=>"驍",
+"骃"=>"駰",
+"骄"=>"驕",
+"骅"=>"驊",
+"骆"=>"駱",
+"骇"=>"駭",
+"骈"=>"駢",
+"骉"=>"驫",
+"骊"=>"驪",
+"骋"=>"騁",
+"验"=>"驗",
+"骍"=>"騂",
+"骎"=>"駸",
+"骏"=>"駿",
+"骐"=>"騏",
+"骑"=>"騎",
+"骒"=>"騍",
+"骓"=>"騅",
+"骔"=>"騌",
+"骕"=>"驌",
+"骖"=>"驂",
+"骗"=>"騙",
+"骘"=>"騭",
+"骙"=>"騤",
+"骚"=>"騷",
+"骛"=>"騖",
+"骜"=>"驁",
+"骝"=>"騮",
+"骞"=>"騫",
+"骟"=>"騸",
+"骠"=>"驃",
+"骡"=>"騾",
+"骢"=>"驄",
+"骣"=>"驏",
+"骤"=>"驟",
+"骥"=>"驥",
+"骦"=>"驦",
+"骧"=>"驤",
+"髅"=>"髏",
+"髋"=>"髖",
+"髌"=>"髕",
+"鬓"=>"鬢",
+"魇"=>"魘",
+"魉"=>"魎",
+"鱼"=>"魚",
+"鱽"=>"魛",
+"鱾"=>"魢",
+"鱿"=>"魷",
+"鲀"=>"魨",
+"鲁"=>"魯",
+"鲂"=>"魴",
+"鲃"=>"䰾",
+"鲄"=>"魺",
+"鲅"=>"鮁",
+"鲆"=>"鮃",
+"鲈"=>"鱸",
+"鲉"=>"鮋",
+"鲊"=>"鮓",
+"鲋"=>"鮒",
+"鲌"=>"鮊",
+"鲍"=>"鮑",
+"鲎"=>"鱟",
+"鲏"=>"鮍",
+"鲐"=>"鮐",
+"鲑"=>"鮭",
+"鲒"=>"鮚",
+"鲓"=>"鮳",
+"鲔"=>"鮪",
+"鲕"=>"鮞",
+"鲖"=>"鮦",
+"鲗"=>"鰂",
+"鲘"=>"鮜",
+"鲙"=>"鱠",
+"鲚"=>"鱭",
+"鲛"=>"鮫",
+"鲜"=>"鮮",
+"鲝"=>"鮺",
+"鲟"=>"鱘",
+"鲠"=>"鯁",
+"鲡"=>"鱺",
+"鲢"=>"鰱",
+"鲣"=>"鰹",
+"鲤"=>"鯉",
+"鲥"=>"鰣",
+"鲦"=>"鰷",
+"鲧"=>"鯀",
+"鲨"=>"鯊",
+"鲩"=>"鯇",
+"鲪"=>"鮶",
+"鲫"=>"鯽",
+"鲬"=>"鯒",
+"鲭"=>"鯖",
+"鲮"=>"鯪",
+"鲯"=>"鯕",
+"鲰"=>"鯫",
+"鲱"=>"鯡",
+"鲲"=>"鯤",
+"鲳"=>"鯧",
+"鲴"=>"鯝",
+"鲵"=>"鯢",
+"鲶"=>"鯰",
+"鲷"=>"鯛",
+"鲸"=>"鯨",
+"鲹"=>"鰺",
+"鲺"=>"鯴",
+"鲻"=>"鯔",
+"鲼"=>"鱝",
+"鲽"=>"鰈",
+"鲾"=>"鰏",
+"鲿"=>"鱨",
+"鳀"=>"鯷",
+"鳁"=>"鰮",
+"鳂"=>"鰃",
+"鳃"=>"鰓",
+"鳅"=>"鰍",
+"鳆"=>"鰒",
+"鳇"=>"鰉",
+"鳈"=>"鰁",
+"鳉"=>"鱂",
+"鳊"=>"鯿",
+"鳋"=>"鰠",
+"鳌"=>"鰲",
+"鳍"=>"鰭",
+"鳎"=>"鰨",
+"鳏"=>"鰥",
+"鳐"=>"鰩",
+"鳑"=>"鰟",
+"鳒"=>"鰜",
+"鳓"=>"鰳",
+"鳔"=>"鰾",
+"鳕"=>"鱈",
+"鳖"=>"鱉",
+"鳗"=>"鰻",
+"鳘"=>"鰵",
+"鳙"=>"鱅",
+"鳚"=>"䲁",
+"鳛"=>"鰼",
+"鳜"=>"鱖",
+"鳝"=>"鱔",
+"鳞"=>"鱗",
+"鳟"=>"鱒",
+"鳠"=>"鱯",
+"鳡"=>"鱤",
+"鳢"=>"鱧",
+"鳣"=>"鱣",
+"䴓"=>"鳾",
+"䴕"=>"鴷",
+"䴔"=>"鵁",
+"䴖"=>"鶄",
+"䴗"=>"鶪",
+"䴘"=>"鷈",
+"䴙"=>"鷿",
+"鸟"=>"鳥",
+"鸠"=>"鳩",
+"鸢"=>"鳶",
+"鸣"=>"鳴",
+"鸤"=>"鳲",
+"鸥"=>"鷗",
+"鸦"=>"鴉",
+"鸧"=>"鶬",
+"鸨"=>"鴇",
+"鸩"=>"鴆",
+"鸪"=>"鴣",
+"鸫"=>"鶇",
+"鸬"=>"鸕",
+"鸭"=>"鴨",
+"鸮"=>"鴞",
+"鸯"=>"鴦",
+"鸰"=>"鴒",
+"鸱"=>"鴟",
+"鸲"=>"鴝",
+"鸳"=>"鴛",
+"鸴"=>"鷽",
+"鸵"=>"鴕",
+"鸶"=>"鷥",
+"鸷"=>"鷙",
+"鸸"=>"鴯",
+"鸹"=>"鴰",
+"鸺"=>"鵂",
+"鸻"=>"鴴",
+"鸼"=>"鵃",
+"鸽"=>"鴿",
+"鸾"=>"鸞",
+"鸿"=>"鴻",
+"鹀"=>"鵐",
+"鹁"=>"鵓",
+"鹂"=>"鸝",
+"鹃"=>"鵑",
+"鹄"=>"鵠",
+"鹅"=>"鵝",
+"鹆"=>"鵒",
+"鹇"=>"鷳",
+"鹈"=>"鵜",
+"鹉"=>"鵡",
+"鹊"=>"鵲",
+"鹋"=>"鶓",
+"鹌"=>"鵪",
+"鹍"=>"鵾",
+"鹎"=>"鵯",
+"鹏"=>"鵬",
+"鹐"=>"鵮",
+"鹑"=>"鶉",
+"鹒"=>"鶊",
+"鹓"=>"鵷",
+"鹔"=>"鷫",
+"鹕"=>"鶘",
+"鹖"=>"鶡",
+"鹗"=>"鶚",
+"鹘"=>"鶻",
+"鹙"=>"鶖",
+"鹛"=>"鶥",
+"鹜"=>"鶩",
+"鹝"=>"鷊",
+"鹞"=>"鷂",
+"鹟"=>"鶲",
+"鹠"=>"鶹",
+"鹡"=>"鶺",
+"鹢"=>"鷁",
+"鹣"=>"鶼",
+"鹤"=>"鶴",
+"鹥"=>"鷖",
+"鹦"=>"鸚",
+"鹧"=>"鷓",
+"鹨"=>"鷚",
+"鹩"=>"鷯",
+"鹪"=>"鷦",
+"鹫"=>"鷲",
+"鹬"=>"鷸",
+"鹭"=>"鷺",
+"鹯"=>"鸇",
+"鹰"=>"鷹",
+"鹱"=>"鸌",
+"鹲"=>"鸏",
+"鹳"=>"鸛",
+"鹴"=>"鸘",
+"鹾"=>"鹺",
+"麦"=>"麥",
+"麸"=>"麩",
+"麽"=>"麼",
+"黄"=>"黃",
+"黉"=>"黌",
+"黡"=>"黶",
+"黩"=>"黷",
+"黪"=>"黲",
+"黾"=>"黽",
+"鼋"=>"黿",
+"鼍"=>"鼉",
+"鼗"=>"鞀",
+"鼹"=>"鼴",
+"齐"=>"齊",
+"齑"=>"齏",
+"齿"=>"齒",
+"龀"=>"齔",
+"龁"=>"齕",
+"龂"=>"齗",
+"龃"=>"齟",
+"龄"=>"齡",
+"龅"=>"齙",
+"龆"=>"齠",
+"龇"=>"齜",
+"龈"=>"齦",
+"龉"=>"齬",
+"龊"=>"齪",
+"龋"=>"齲",
+"龌"=>"齷",
+"龙"=>"龍",
+"龚"=>"龔",
+"龛"=>"龕",
+"龟"=>"龜",
+
+"BIG-" => 	"BIG-",
+".PRG" => 	".PRG",
+"一伙" => 	"一伙",
+"一并" => 	"一併",
+"一准" => 	"一准",
+"一划" => 	"一划",
+"一地里" => 	"一地裡",
+"一干" => 	"一干",
+"一树百获" => 	"一樹百穫",
+"一台" => 	"一臺",
+"一冲" => 	"一衝",
+"一只" => 	"一隻",
+"一发千钧" => 	"一髮千鈞",
+"一出" => 	"一齣",
+"七只" => 	"七隻",
+"三元里" => 	"三元裡",
+"三国志" => 	"三國誌",
+"三复" => 	"三複",
+"三只" => 	"三隻",
+"上吊" => 	"上吊",
+"上台" => 	"上臺",
+"下不了台" => 	"下不了臺",
+"下台" => 	"下臺",
+"下面" => 	"下麵",
+"不准" => 	"不准",
+"不吊" => 	"不吊",
+"不干" => 	"不幹",
+"不舍" => 	"不捨",
+"不知所云" => 	"不知所云",
+"不识台举" => 	"不識檯舉",
+"不锈钢" => 	"不鏽鋼",
+"丑剧" => 	"丑劇",
+"丑旦" => 	"丑旦",
+"丑角" => 	"丑角",
+"世界杯" => 	"世界盃",
+"并存着" => 	"並存著",
+"中岳" => 	"中嶽",
+"中台路" => 	"中臺路",
+"中台医专" => 	"中臺醫專",
+"丰南" => 	"丰南",
+"丰台" => 	"丰台",
+"丰姿" => 	"丰姿",
+"丰神俊朗" => 	"丰神俊朗",
+"丰采" => 	"丰采",
+"丰韵" => 	"丰韻",
+"主干" => 	"主幹",
+"九世之雠" => 	"九世之讎",
+"九只" => 	"九隻",
+"干丝" => 	"乾絲",
+"干着急" => 	"乾著急",
+"干面" => 	"乾麵",
+"乱发" => 	"亂髮",
+"云云" => 	"云云",
+"云何" => 	"云何",
+"云尔" => 	"云爾",
+"五岳" => 	"五嶽",
+"五斗柜" => 	"五斗櫃",
+"五斗橱" => 	"五斗櫥",
+"五斗米" => 	"五斗米",
+"五谷" => 	"五穀",
+"五行生克" => 	"五行生剋",
+"五只" => 	"五隻",
+"五出" => 	"五齣",
+"井里" => 	"井裡",
+"交卷" => 	"交卷",
+"人云亦云" => 	"人云亦云",
+"人物志" => 	"人物誌",
+"什锦面" => 	"什錦麵",
+"什么" => 	"什麼",
+"仆倒" => 	"仆倒",
+"仇雠" => 	"仇讎",
+"介系词" => 	"介係詞",
+"介系词" => 	"介繫詞",
+"仿制" => 	"仿製",
+"伙伕" => 	"伙伕",
+"伙伴" => 	"伙伴",
+"伙同" => 	"伙同",
+"伙夫" => 	"伙夫",
+"伙房" => 	"伙房",
+"伙计" => 	"伙計",
+"伙食" => 	"伙食",
+"布下" => 	"佈下",
+"布告" => 	"佈告",
+"布哨" => 	"佈哨",
+"布局" => 	"佈局",
+"布岗" => 	"佈崗",
+"布施" => 	"佈施",
+"布景" => 	"佈景",
+"布有" => 	"佈有",
+"布满" => 	"佈滿",
+"布线" => 	"佈線",
+"布置" => 	"佈置",
+"布署" => 	"佈署",
+"布道" => 	"佈道",
+"布达" => 	"佈達",
+"布防" => 	"佈防",
+"布阵" => 	"佈陣",
+"布雷" => 	"佈雷",
+"体育锻鍊" => 	"体育鍛鍊",
+"何干" => 	"何干",
+"作准" => 	"作准",
+"佣人" => 	"佣人",
+"佣工" => 	"佣工",
+"佣金" => 	"佣金",
+"并入" => 	"併入",
+"并列" => 	"併列",
+"并到" => 	"併到",
+"并合" => 	"併合",
+"并吞" => 	"併吞",
+"并在" => 	"併在",
+"并成" => 	"併成",
+"并排" => 	"併排",
+"并拢" => 	"併攏",
+"并案" => 	"併案",
+"并为" => 	"併為",
+"并发" => 	"併發",
+"并科" => 	"併科",
+"并购" => 	"併購",
+"并进" => 	"併進",
+"来复" => 	"來複",
+"供制" => 	"供製",
+"侵并" => 	"侵併",
+"便辟" => 	"便辟",
+"系数" => 	"係數",
+"系为" => 	"係為",
+"保险柜" => 	"保險柜",
+"信号台" => 	"信號臺",
+"修复" => 	"修複",
+"修胡刀" => 	"修鬍刀",
+"俯冲" => 	"俯衝",
+"个里" => 	"個裡",
+"倒绷孩儿" => 	"倒繃孩兒",
+"借着" => 	"借著",
+"偃仆" => 	"偃仆",
+"假发" => 	"假髮",
+"停制" => 	"停製",
+"偷鸡不着" => 	"偷雞不著",
+"家伙" => 	"傢伙",
+"家俱" => 	"傢俱",
+"家具" => 	"傢具",
+"传布" => 	"傳佈",
+"债台高筑" => 	"債臺高築",
+"傻里傻气" => 	"傻裡傻氣",
+"倾复" => 	"傾複",
+"倾复" => 	"傾覆",
+"僱佣" => 	"僱佣",
+"仪表" => 	"儀錶",
+"亿只" => 	"億隻",
+"尽尽" => 	"儘儘",
+"尽先" => 	"儘先",
+"尽其所有" => 	"儘其所有",
+"尽力" => 	"儘力",
+"尽可能" => 	"儘可能",
+"尽快" => 	"儘快",
+"尽早" => 	"儘早",
+"尽是" => 	"儘是",
+"尽管" => 	"儘管",
+"尽速" => 	"儘速",
+"尽量" => 	"儘量",
+"允准" => 	"允准",
+"兄台" => 	"兄臺",
+"充饥" => 	"充饑",
+"光采" => 	"光采",
+"克里" => 	"克裡",
+"克复" => 	"克複",
+"入伙" => 	"入伙",
+"内制" => 	"內製",
+"两只" => 	"兩隻",
+"八字胡" => 	"八字鬍",
+"八只" => 	"八隻",
+"公布" => 	"公佈",
+"公干" => 	"公幹",
+"公斗" => 	"公斗",
+"公历" => 	"公曆",
+"公里" => 	"公裡",
+"六谷" => 	"六穀",
+"六只" => 	"六隻",
+"六出" => 	"六齣",
+"兼并" => 	"兼併",
+"册卷" => 	"冊卷",
+"冤雠" => 	"冤讎",
+"准予" => 	"准予",
+"准假" => 	"准假",
+"准定" => 	"准定",
+"准将" => 	"准將",
+"准尉" => 	"准尉",
+"准此" => 	"准此",
+"准考证" => 	"准考證",
+"准许" => 	"准許",
+"几几" => 	"几几",
+"几杖" => 	"几杖",
+"几案" => 	"几案",
+"几筵" => 	"几筵",
+"几丝" => 	"几絲",
+"凹洞里" => 	"凹洞裡",
+"出征" => 	"出征",
+"函复" => 	"函覆",
+"刀削面" => 	"刀削麵",
+"刁斗" => 	"刁斗",
+"分布" => 	"分佈",
+"切面" => 	"切麵",
+"刊布" => 	"刊佈",
+"划上" => 	"划上",
+"划下" => 	"划下",
+"划不来" => 	"划不來",
+"划了" => 	"划了",
+"划具" => 	"划具",
+"划出" => 	"划出",
+"划到" => 	"划到",
+"划动" => 	"划動",
+"划去" => 	"划去",
+"划子" => 	"划子",
+"划得来" => 	"划得來",
+"划拳" => 	"划拳",
+"划桨" => 	"划槳",
+"划水" => 	"划水",
+"划算" => 	"划算",
+"划船" => 	"划船",
+"划艇" => 	"划艇",
+"划着" => 	"划著",
+"划着走" => 	"划著走",
+"划行" => 	"划行",
+"划走" => 	"划走",
+"划起" => 	"划起",
+"划进" => 	"划進",
+"划过" => 	"划過",
+"初征" => 	"初征",
+"别致" => 	"別緻",
+"别着" => 	"別著",
+"别只" => 	"別隻",
+"利比里亚" => 	"利比裡亞",
+"刮着" => 	"刮著",
+"刮胡刀" => 	"刮鬍刀",
+"剃发" => 	"剃髮",
+"剃须" => 	"剃鬚",
+"削发" => 	"削髮",
+"克制" => 	"剋制",
+"克扣" => 	"剋扣",
+"克日" => 	"剋日",
+"克星" => 	"剋星",
+"克服" => 	"剋服",
+"克期" => 	"剋期",
+"克死" => 	"剋死",
+"克薄" => 	"剋薄",
+"前仆后仰" => 	"前仆後仰",
+"前仆后继" => 	"前仆後繼",
+"前台" => 	"前臺",
+"前车之复" => 	"前車之覆",
+"刚才" => 	"剛纔",
+"剥制" => 	"剝製",
+"剪发" => 	"剪髮",
+"割舍" => 	"割捨",
+"创获" => 	"創穫",
+"创制" => 	"創製",
+"加里宁" => 	"加裡寧",
+"劳力士表" => 	"勞力士錶",
+"包准" => 	"包准",
+"包谷" => 	"包穀",
+"匏系" => 	"匏繫",
+"北岳" => 	"北嶽",
+"北斗" => 	"北斗",
+"北回" => 	"北迴",
+"匡复" => 	"匡複",
+"匪干" => 	"匪幹",
+"十卷" => 	"十卷",
+"十干" => 	"十干",
+"十台" => 	"十臺",
+"十只" => 	"十隻",
+"十出" => 	"十齣",
+"千百只" => 	"千百隻",
+"千丝万缕" => 	"千絲萬縷",
+"千回百折" => 	"千迴百折",
+"千回百转" => 	"千迴百轉",
+"千钧一发" => 	"千鈞一髮",
+"千只" => 	"千隻",
+"升斗小民" => 	"升斗小民",
+"半只" => 	"半隻",
+"南岳" => 	"南嶽",
+"南征" => 	"南征",
+"南斗" => 	"南斗",
+"南台" => 	"南臺",
+"南回" => 	"南迴",
+"卡里" => 	"卡裡",
+"印制" => 	"印製",
+"卷入" => 	"卷入",
+"卷取" => 	"卷取",
+"卷土重来" => 	"卷土重來",
+"卷子" => 	"卷子",
+"卷宗" => 	"卷宗",
+"卷尺" => 	"卷尺",
+"卷层云" => 	"卷層雲",
+"卷帙" => 	"卷帙",
+"卷扬机" => 	"卷揚機",
+"卷曲" => 	"卷曲",
+"卷染" => 	"卷染",
+"卷烟" => 	"卷煙",
+"卷筒" => 	"卷筒",
+"卷纬" => 	"卷緯",
+"卷绕" => 	"卷繞",
+"卷舌" => 	"卷舌",
+"卷装" => 	"卷裝",
+"卷轴" => 	"卷軸",
+"卷云" => 	"卷雲",
+"卷领" => 	"卷領",
+"卷发" => 	"卷髮",
+"卷须" => 	"卷鬚",
+"厚朴" => 	"厚朴",
+"参与" => 	"參与",
+"参与者" => 	"參与者",
+"参合" => 	"參合",
+"参考价值" => 	"參考價值",
+"参与" => 	"參與",
+"参与人员" => 	"參與人員",
+"参与制" => 	"參與制",
+"参与感" => 	"參與感",
+"参与者" => 	"參與者",
+"参观团" => 	"參觀團",
+"参观团体" => 	"參觀團體",
+"参阅" => 	"參閱",
+"反冲" => 	"反衝",
+"反复" => 	"反複",
+"反复" => 	"反覆",
+"取舍" => 	"取捨",
+"口里" => 	"口裡",
+"古柯咸" => 	"古柯鹹",
+"只准" => 	"只准",
+"只冲" => 	"只衝",
+"叮当" => 	"叮噹",
+"可怜虫" => 	"可憐虫",
+"可紧可松" => 	"可緊可鬆",
+"台制" => 	"台製",
+"司令台" => 	"司令臺",
+"吃着不尽" => 	"吃著不盡",
+"吃里扒外" => 	"吃裡扒外",
+"吃里爬外" => 	"吃裡爬外",
+"各吊" => 	"各吊",
+"合伙" => 	"合伙",
+"合并" => 	"合併",
+"合着" => 	"合著",
+"合着者" => 	"合著者",
+"吊上" => 	"吊上",
+"吊下" => 	"吊下",
+"吊了" => 	"吊了",
+"吊个" => 	"吊個",
+"吊儿郎当" => 	"吊兒郎當",
+"吊到" => 	"吊到",
+"吊去" => 	"吊去",
+"吊取" => 	"吊取",
+"吊吊" => 	"吊吊",
+"吊嗓" => 	"吊嗓",
+"吊好" => 	"吊好",
+"吊子" => 	"吊子",
+"吊带" => 	"吊帶",
+"吊带裤" => 	"吊帶褲",
+"吊床" => 	"吊床",
+"吊得" => 	"吊得",
+"吊挂" => 	"吊掛",
+"吊挂着" => 	"吊掛著",
+"吊杆" => 	"吊杆",
+"吊架" => 	"吊架",
+"吊桶" => 	"吊桶",
+"吊杆" => 	"吊桿",
+"吊桥" => 	"吊橋",
+"吊死" => 	"吊死",
+"吊灯" => 	"吊燈",
+"吊环" => 	"吊環",
+"吊盘" => 	"吊盤",
+"吊索" => 	"吊索",
+"吊着" => 	"吊著",
+"吊装" => 	"吊裝",
+"吊裤" => 	"吊褲",
+"吊裤带" => 	"吊褲帶",
+"吊袜" => 	"吊襪",
+"吊走" => 	"吊走",
+"吊起" => 	"吊起",
+"吊车" => 	"吊車",
+"吊钩" => 	"吊鉤",
+"吊销" => 	"吊銷",
+"吊钟" => 	"吊鐘",
+"同伙" => 	"同伙",
+"名表" => 	"名錶",
+"後冠" => 	"后冠",
+"後北街" => 	"后北街",
+"後土" => 	"后土",
+"後妃" => 	"后妃",
+"後安路" => 	"后安路",
+"後平路" => 	"后平路",
+"後座" => 	"后座",
+"後稷" => 	"后稷",
+"後羿" => 	"后羿",
+"後街" => 	"后街",
+"後里" => 	"后里",
+"向着" => 	"向著",
+"吞并" => 	"吞併",
+"吹发" => 	"吹髮",
+"吕後" => 	"呂后",
+"呆里呆气" => 	"呆裡呆氣",
+"呈准" => 	"呈准",
+"周而复始" => 	"周而複始",
+"呼吁" => 	"呼籲",
+"和面" => 	"和麵",
+"哪里" => 	"哪裡",
+"哭脏" => 	"哭髒",
+"问卷" => 	"問卷",
+"喝采" => 	"喝采",
+"乔岳" => 	"喬嶽",
+"单干" => 	"單干",
+"单只" => 	"單隻",
+"嘴里" => 	"嘴裏",
+"嘴里" => 	"嘴裡",
+"恶心" => 	"噁心",
+"当啷" => 	"噹啷",
+"当当" => 	"噹噹",
+"噜苏" => 	"嚕囌",
+"向导" => 	"嚮導",
+"向往" => 	"嚮往",
+"向应" => 	"嚮應",
+"向日" => 	"嚮日",
+"向迩" => 	"嚮邇",
+"严丝合缝" => 	"嚴絲合縫",
+"严复" => 	"嚴複",
+"囉苏" => 	"囉囌",
+"四舍五入" => 	"四捨五入",
+"四只" => 	"四隻",
+"四出" => 	"四齣",
+"回历新年" => 	"回曆新年",
+"回丝" => 	"回絲",
+"回着" => 	"回著",
+"回复" => 	"回覆",
+"回采" => 	"回采",
+"圈子里" => 	"圈子裡",
+"圈里" => 	"圈裡",
+"国历" => 	"國曆",
+"国雠" => 	"國讎",
+"园里" => 	"園裡",
+"圆台" => 	"圓臺",
+"图里" => 	"圖裡",
+"土里" => 	"土裡",
+"土制" => 	"土製",
+"地志" => 	"地誌",
+"坍台" => 	"坍臺",
+"坑里" => 	"坑裡",
+"垂发" => 	"垂髮",
+"垮台" => 	"垮臺",
+"埃及豔後" => 	"埃及豔后",
+"埃荣冲" => 	"埃榮衝",
+"埋布" => 	"埋佈",
+"城里" => 	"城裡",
+"基干" => 	"基幹",
+"报复" => 	"報複",
+"塌台" => 	"塌臺",
+"塔台" => 	"塔臺",
+"涂着" => 	"塗著",
+"墓志" => 	"墓誌",
+"墨斗" => 	"墨斗",
+"墨索里尼" => 	"墨索裡尼",
+"垦复" => 	"墾複",
+"压卷" => 	"壓卷",
+"垄断价格" => 	"壟斷價格",
+"垄断资产" => 	"壟斷資產",
+"垄断集团" => 	"壟斷集團",
+"壶里" => 	"壺裡",
+"寿面" => 	"壽麵",
+"夏天里" => 	"夏天裡",
+"夏历" => 	"夏曆",
+"外制" => 	"外製",
+"多冲" => 	"多衝",
+"多采多姿" => 	"多采多姿",
+"多么" => 	"多麼",
+"夜光表" => 	"夜光錶",
+"夜里" => 	"夜裡",
+"梦里" => 	"夢裡",
+"大伙" => 	"大伙",
+"大卷" => 	"大卷",
+"大干" => 	"大干",
+"大干" => 	"大幹",
+"大辟" => 	"大辟",
+"大只" => 	"大隻",
+"天後" => 	"天后",
+"天干" => 	"天干",
+"天文台" => 	"天文臺",
+"天翻地复" => 	"天翻地覆",
+"太後" => 	"太后",
+"奏折" => 	"奏摺",
+"女丑" => 	"女丑",
+"女佣" => 	"女佣",
+"好家夥" => 	"好傢夥",
+"好戏连台" => 	"好戲連臺",
+"好困" => 	"好睏",
+"如饥似渴" => 	"如饑似渴",
+"妆台" => 	"妝臺",
+"姜太公" => 	"姜太公",
+"姜子牙" => 	"姜子牙",
+"姜丝" => 	"姜絲",
+"字汇" => 	"字彙",
+"字里行间" => 	"字裡行間",
+"存折" => 	"存摺",
+"孟姜女" => 	"孟姜女",
+"宇宙志" => 	"宇宙誌",
+"宋皇台道" => 	"宋皇臺道",
+"定准" => 	"定准",
+"定制" => 	"定製",
+"宣布" => 	"宣佈",
+"宫里" => 	"宮裡",
+"家伙" => 	"家伙",
+"家里" => 	"家裏",
+"家里" => 	"家裡",
+"密布" => 	"密佈",
+"密致" => 	"密緻",
+"寇雠" => 	"寇讎",
+"富台街" => 	"富臺街",
+"寓禁于征" => 	"寓禁於征",
+"实干" => 	"實幹",
+"写字台" => 	"寫字檯",
+"写字台" => 	"寫字臺",
+"宽松" => 	"寬鬆",
+"宝卷" => 	"寶卷",
+"宝里宝气" => 	"寶裡寶氣",
+"封後" => 	"封后",
+"封面里" => 	"封面裡",
+"射干" => 	"射干",
+"对表" => 	"對錶",
+"小丑" => 	"小丑",
+"小伙" => 	"小伙",
+"小只" => 	"小隻",
+"少吊" => 	"少吊",
+"就里" => 	"就裡",
+"尺布斗粟" => 	"尺布斗粟",
+"尼克松" => 	"尼克鬆",
+"尼采" => 	"尼采",
+"尿斗" => 	"尿斗",
+"局里" => 	"局裡",
+"居里" => 	"居裡",
+"屋子里" => 	"屋子裡",
+"屋里" => 	"屋裡",
+"展布" => 	"展佈",
+"展卷" => 	"展卷",
+"屡仆屡起" => 	"屢仆屢起",
+"屯里" => 	"屯裡",
+"山岳" => 	"山嶽",
+"山斗" => 	"山斗",
+"山里" => 	"山裡",
+"山重水复" => 	"山重水複",
+"岱岳" => 	"岱嶽",
+"峰回" => 	"峰迴",
+"岳岳" => 	"嶽嶽",
+"巅复" => 	"巔覆",
+"巡回" => 	"巡迴",
+"巧干" => 	"巧幹",
+"巴尔干" => 	"巴爾幹",
+"巴里" => 	"巴裡",
+"巷里" => 	"巷裡",
+"市里" => 	"市裡",
+"布谷" => 	"布穀",
+"希腊" => 	"希腊",
+"帘子" => 	"帘子",
+"帘布" => 	"帘布",
+"席卷" => 	"席卷",
+"带团参加" => 	"帶團參加",
+"带发修行" => 	"帶髮修行",
+"干世" => 	"干世",
+"干休" => 	"干休",
+"干系" => 	"干係",
+"干冒" => 	"干冒",
+"干卿何事" => 	"干卿何事",
+"干卿底事" => 	"干卿底事",
+"干城" => 	"干城",
+"干将" => 	"干將",
+"干德道" => 	"干德道",
+"干戈" => 	"干戈",
+"干挠" => 	"干撓",
+"干扰" => 	"干擾",
+"干支" => 	"干支",
+"干政" => 	"干政",
+"干时" => 	"干時",
+"干没" => 	"干沒",
+"干涉" => 	"干涉",
+"干犯" => 	"干犯",
+"干禄" => 	"干祿",
+"干与" => 	"干與",
+"干着急" => 	"干著急",
+"干诺道中" => 	"干諾道中",
+"干诺道西" => 	"干諾道西",
+"干谒" => 	"干謁",
+"干证" => 	"干證",
+"干誉" => 	"干譽",
+"干贝" => 	"干貝",
+"干连" => 	"干連",
+"干云蔽日" => 	"干雲蔽日",
+"干预" => 	"干預",
+"平台" => 	"平臺",
+"年历" => 	"年曆",
+"年里" => 	"年裡",
+"干上" => 	"幹上",
+"干下去" => 	"幹下去",
+"干不了" => 	"幹不了",
+"干不成" => 	"幹不成",
+"干了" => 	"幹了",
+"干事" => 	"幹事",
+"干些" => 	"幹些",
+"干个" => 	"幹個",
+"干劲" => 	"幹勁",
+"干员" => 	"幹員",
+"干啥" => 	"幹啥",
+"干吗" => 	"幹嗎",
+"干嘛" => 	"幹嘛",
+"干坏事" => 	"幹壞事",
+"干完" => 	"幹完",
+"干将" => 	"幹將",
+"干得" => 	"幹得",
+"干性油" => 	"幹性油",
+"干才" => 	"幹才",
+"干掉" => 	"幹掉",
+"干校" => 	"幹校",
+"干活" => 	"幹活",
+"干流" => 	"幹流",
+"干球温度" => 	"幹球溫度",
+"干略" => 	"幹略",
+"干线" => 	"幹線",
+"干练" => 	"幹練",
+"干警" => 	"幹警",
+"干起来" => 	"幹起來",
+"干路" => 	"幹路",
+"干办" => 	"幹辦",
+"干这一行" => 	"幹這一行",
+"干这种事" => 	"幹這種事",
+"干道" => 	"幹道",
+"干部" => 	"幹部",
+"干么" => 	"幹麼",
+"几丝" => 	"幾絲",
+"几只" => 	"幾隻",
+"几出" => 	"幾齣",
+"底里" => 	"底裡",
+"店里" => 	"店裡",
+"康采恩" => 	"康采恩",
+"庙里" => 	"廟裡",
+"建台" => 	"建臺",
+"弄脏" => 	"弄髒",
+"弔卷" => 	"弔卷",
+"弘历" => 	"弘曆",
+"强干弱枝" => 	"強幹弱枝",
+"别扭" => 	"彆扭",
+"别拗" => 	"彆拗",
+"别气" => 	"彆氣",
+"别脚" => 	"彆腳",
+"别着" => 	"彆著",
+"弹子台" => 	"彈子檯",
+"弹珠台" => 	"彈珠檯",
+"弹药" => 	"彈葯",
+"汇刊" => 	"彙刊",
+"汇报" => 	"彙報",
+"汇整" => 	"彙整",
+"汇算" => 	"彙算",
+"汇编" => 	"彙編",
+"汇总" => 	"彙總",
+"汇纂" => 	"彙纂",
+"汇辑" => 	"彙輯",
+"汇集" => 	"彙集",
+"形单影只" => 	"形單影隻",
+"影後" => 	"影后",
+"往里" => 	"往裡",
+"往复" => 	"往複",
+"征伐" => 	"征伐",
+"征兵" => 	"征兵",
+"征利" => 	"征利",
+"征尘" => 	"征塵",
+"征夫" => 	"征夫",
+"征属" => 	"征屬",
+"征帆" => 	"征帆",
+"征戌" => 	"征戌",
+"征战" => 	"征戰",
+"征收" => 	"征收",
+"征服" => 	"征服",
+"征求" => 	"征求",
+"征发" => 	"征發",
+"征衣" => 	"征衣",
+"征讨" => 	"征討",
+"征途" => 	"征途",
+"后台" => 	"後臺",
+"从里到外" => 	"從裡到外",
+"从里向外" => 	"從裡向外",
+"复雠" => 	"復讎",
+"复辟" => 	"復辟",
+"德干高原" => 	"德干高原",
+"心愿" => 	"心愿",
+"心里" => 	"心裏",
+"心里" => 	"心裡",
+"忙里" => 	"忙裡",
+"快干" => 	"快幹",
+"快冲" => 	"快衝",
+"怎么" => 	"怎麼",
+"怎么着" => 	"怎麼著",
+"急冲而下" => 	"急衝而下",
+"怪里怪气" => 	"怪裡怪氣",
+"恩准" => 	"恩准",
+"情有所钟" => 	"情有所鍾",
+"情有独钟" => 	"情有獨鍾",
+"意面" => 	"意麵",
+"慌里慌张" => 	"慌裡慌張",
+"慰借" => 	"慰藉",
+"忧郁" => 	"憂郁",
+"凭吊" => 	"憑吊",
+"凭借" => 	"憑藉",
+"凭借着" => 	"憑藉著",
+"蒙懂" => 	"懞懂",
+"怀里" => 	"懷裡",
+"怀表" => 	"懷錶",
+"悬吊" => 	"懸吊",
+"悬心吊胆" => 	"懸心吊膽",
+"戏台" => 	"戲臺",
+"戴表" => 	"戴錶",
+"戽斗" => 	"戽斗",
+"房里" => 	"房裡",
+"手不释卷" => 	"手不釋卷",
+"手卷" => 	"手卷",
+"手折" => 	"手摺",
+"手里" => 	"手裏",
+"手里" => 	"手裡",
+"手表" => 	"手錶",
+"手松" => 	"手鬆",
+"才干" => 	"才幹",
+"才高八斗" => 	"才高八斗",
+"打谷" => 	"打穀",
+"扞御" => 	"扞禦",
+"批准" => 	"批准",
+"批复" => 	"批複",
+"批复" => 	"批覆",
+"承制" => 	"承製",
+"抗御" => 	"抗禦",
+"折冲" => 	"折衝",
+"披复" => 	"披覆",
+"披发" => 	"披髮",
+"抱朴" => 	"抱朴",
+"抵御" => 	"抵禦",
+"拆伙" => 	"拆伙",
+"拆台" => 	"拆臺",
+"拈须" => 	"拈鬚",
+"拉纤" => 	"拉縴",
+"拉面" => 	"拉麵",
+"拖吊" => 	"拖吊",
+"拗别" => 	"拗彆",
+"拮据" => 	"拮据",
+"捍御" => 	"捍禦",
+"舍不得" => 	"捨不得",
+"舍出" => 	"捨出",
+"舍去" => 	"捨去",
+"舍命" => 	"捨命",
+"舍己从人" => 	"捨己從人",
+"舍己救人" => 	"捨己救人",
+"舍己为人" => 	"捨己為人",
+"舍己为公" => 	"捨己為公",
+"舍己为国" => 	"捨己為國",
+"舍得" => 	"捨得",
+"舍我其谁" => 	"捨我其誰",
+"舍本逐末" => 	"捨本逐末",
+"舍弃" => 	"捨棄",
+"舍死忘生" => 	"捨死忘生",
+"舍生" => 	"捨生",
+"舍短取长" => 	"捨短取長",
+"舍身" => 	"捨身",
+"舍车保帅" => 	"捨車保帥",
+"舍近求远" => 	"捨近求遠",
+"捲发" => 	"捲髮",
+"捵面" => 	"捵麵",
+"掌柜" => 	"掌柜",
+"排骨面" => 	"排骨麵",
+"挂帘" => 	"掛帘",
+"挂面" => 	"掛麵",
+"接着说" => 	"接著說",
+"掩卷" => 	"掩卷",
+"提心吊胆" => 	"提心吊膽",
+"插图卷" => 	"插圖卷",
+"换吊" => 	"換吊",
+"换只" => 	"換隻",
+"换发" => 	"換髮",
+"握发" => 	"握髮",
+"搭伙" => 	"搭伙",
+"折合" => 	"摺合",
+"折奏" => 	"摺奏",
+"折子" => 	"摺子",
+"折尺" => 	"摺尺",
+"折扇" => 	"摺扇",
+"折梯" => 	"摺梯",
+"折椅" => 	"摺椅",
+"折叠" => 	"摺疊",
+"折痕" => 	"摺痕",
+"折篷" => 	"摺篷",
+"折纸" => 	"摺紙",
+"折裙" => 	"摺裙",
+"撒布" => 	"撒佈",
+"撚须" => 	"撚鬚",
+"撞球台" => 	"撞球檯",
+"擂台" => 	"擂臺",
+"担仔面" => 	"擔仔麵",
+"担担面" => 	"擔擔麵",
+"担着" => 	"擔著",
+"担负着" => 	"擔負著",
+"据云" => 	"據云",
+"擢发难数" => 	"擢髮難數",
+"拟准" => 	"擬准",
+"摆布" => 	"擺佈",
+"摄制" => 	"攝製",
+"支干" => 	"支幹",
+"收获" => 	"收穫",
+"改制" => 	"改製",
+"攻克" => 	"攻剋",
+"放松" => 	"放鬆",
+"故布疑阵" => 	"故佈疑陣",
+"叙说着" => 	"敘說著",
+"散伙" => 	"散伙",
+"散布" => 	"散佈",
+"散发" => 	"散髮",
+"整只" => 	"整隻",
+"整出" => 	"整齣",
+"敌忾同雠" => 	"敵愾同讎",
+"文借" => 	"文藉",
+"文采" => 	"文采",
+"斗亚兰路" => 	"斗亞蘭路",
+"斗六" => 	"斗六",
+"斗南" => 	"斗南",
+"斗大" => 	"斗大",
+"斗子" => 	"斗子",
+"斗室" => 	"斗室",
+"斗宿" => 	"斗宿",
+"斗方" => 	"斗方",
+"斗栱" => 	"斗栱",
+"斗笠" => 	"斗笠",
+"斗筲" => 	"斗筲",
+"斗箕" => 	"斗箕",
+"斗篷" => 	"斗篷",
+"斗胆" => 	"斗膽",
+"斗蓬" => 	"斗蓬",
+"斗转参横" => 	"斗轉參橫",
+"斗量" => 	"斗量",
+"斗门" => 	"斗門",
+"料斗" => 	"料斗",
+"斤斗" => 	"斤斗",
+"斯里兰卡" => 	"斯裡蘭卡",
+"新历" => 	"新曆",
+"断头台" => 	"斷頭臺",
+"断发文身" => 	"斷髮文身",
+"方才" => 	"方纔",
+"方志" => 	"方誌",
+"施舍" => 	"施捨",
+"旋绕着" => 	"旋繞著",
+"旋回" => 	"旋迴",
+"族里" => 	"族裡",
+"日历" => 	"日曆",
+"日志" => 	"日誌",
+"日进斗金" => 	"日進斗金",
+"明了" => 	"明瞭",
+"明窗净几" => 	"明窗淨几",
+"明里" => 	"明裡",
+"星斗" => 	"星斗",
+"星历" => 	"星曆",
+"星移斗换" => 	"星移斗換",
+"星移斗转" => 	"星移斗轉",
+"星罗棋布" => 	"星羅棋佈",
+"星辰表" => 	"星辰錶",
+"春假里" => 	"春假裡",
+"春天里" => 	"春天裡",
+"景致" => 	"景緻",
+"暗地里" => 	"暗地裡",
+"暗沟里" => 	"暗溝裡",
+"暗里" => 	"暗裡",
+"暴敛横征" => 	"暴斂橫征",
+"历数" => 	"曆數",
+"历书" => 	"曆書",
+"历法" => 	"曆法",
+"历象" => 	"曆象",
+"书卷" => 	"書卷",
+"会干" => 	"會幹",
+"会里" => 	"會裡",
+"月历" => 	"月曆",
+"月台" => 	"月臺",
+"有只" => 	"有隻",
+"木制" => 	"木製",
+"本台" => 	"本臺",
+"朴子" => 	"朴子",
+"朴实" => 	"朴實",
+"朴忠" => 	"朴忠",
+"朴直" => 	"朴直",
+"朴硝" => 	"朴硝",
+"朴素" => 	"朴素",
+"朴茂" => 	"朴茂",
+"朴资茅斯" => 	"朴資茅斯",
+"朴钝" => 	"朴鈍",
+"材干" => 	"材幹",
+"村里" => 	"村裡",
+"杜老志道" => 	"杜老誌道",
+"束发" => 	"束髮",
+"杯面" => 	"杯麵",
+"东岳" => 	"東嶽",
+"东征" => 	"東征",
+"松赞干布" => 	"松贊干布",
+"板着脸" => 	"板著臉",
+"枕借" => 	"枕藉",
+"林宏岳" => 	"林宏嶽",
+"枝干" => 	"枝幹",
+"枯干" => 	"枯幹",
+"某只" => 	"某隻",
+"染发" => 	"染髮",
+"柜上" => 	"柜上",
+"柜台" => 	"柜台",
+"柜子" => 	"柜子",
+"柜柳" => 	"柜柳",
+"查卷" => 	"查卷",
+"查号台" => 	"查號臺",
+"校雠学" => 	"校讎學",
+"核准" => 	"核准",
+"核复" => 	"核覆",
+"格里" => 	"格裡",
+"案准" => 	"案准",
+"案卷" => 	"案卷",
+"条干" => 	"條幹",
+"梯冲" => 	"梯衝",
+"械系" => 	"械繫",
+"棉卷" => 	"棉卷",
+"棉制" => 	"棉製",
+"植发" => 	"植髮",
+"楼台" => 	"樓臺",
+"标志着" => 	"標志著",
+"标致" => 	"標緻",
+"标志" => 	"標誌",
+"模制" => 	"模製",
+"树干" => 	"樹幹",
+"横征暴敛" => 	"橫征暴斂",
+"横冲" => 	"橫衝",
+"档卷" => 	"檔卷",
+"检复" => 	"檢覆",
+"台子" => 	"檯子",
+"台布" => 	"檯布",
+"台灯" => 	"檯燈",
+"台球" => 	"檯球",
+"台面" => 	"檯面",
+"柜台" => 	"櫃檯",
+"柜台" => 	"櫃臺",
+"栏干" => 	"欄干",
+"欺蒙" => 	"欺矇",
+"歌後" => 	"歌后",
+"歌台舞榭" => 	"歌臺舞榭",
+"欧几里得" => 	"歐幾裡得",
+"正当着" => 	"正當著",
+"此仆彼起" => 	"此仆彼起",
+"武後" => 	"武后",
+"武松" => 	"武鬆",
+"归并" => 	"歸併",
+"死里求生" => 	"死裡求生",
+"死里逃生" => 	"死裡逃生",
+"残卷" => 	"殘卷",
+"杀虫药" => 	"殺虫藥",
+"壳里" => 	"殼裡",
+"母後" => 	"母后",
+"每只" => 	"每隻",
+"比干" => 	"比干",
+"毛卷" => 	"毛卷",
+"毛坏" => 	"毛坏",
+"毛发" => 	"毛髮",
+"毫发" => 	"毫髮",
+"气冲斗牛" => 	"氣沖斗牛",
+"气冲牛斗" => 	"氣沖牛斗",
+"气象台" => 	"氣象臺",
+"水斗" => 	"水斗",
+"水里" => 	"水裡",
+"水表" => 	"水錶",
+"永历" => 	"永曆",
+"永志不忘" => 	"永誌不忘",
+"污蔑" => 	"汙衊",
+"江干" => 	"江干",
+"池里" => 	"池裡",
+"污蔑" => 	"污衊",
+"沈着" => 	"沈著",
+"没事干" => 	"沒事幹",
+"没精打采" => 	"沒精打采",
+"冲着" => 	"沖著",
+"沙里淘金" => 	"沙裡淘金",
+"河岳" => 	"河嶽",
+"河里" => 	"河裡",
+"油面" => 	"油麵",
+"泡制" => 	"泡製",
+"泡面" => 	"泡麵",
+"泰斗" => 	"泰斗",
+"洗发" => 	"洗髮",
+"派团参加" => 	"派團參加",
+"浪琴表" => 	"浪琴錶",
+"浮吊" => 	"浮吊",
+"海里" => 	"海裡",
+"涂着" => 	"涂著",
+"液晶表" => 	"液晶錶",
+"凉面" => 	"涼麵",
+"淡朱" => 	"淡硃",
+"渊淳岳峙" => 	"淵淳嶽峙",
+"渠冲" => 	"渠衝",
+"测验卷" => 	"測驗卷",
+"港制" => 	"港製",
+"凑合着" => 	"湊合著",
+"湖里" => 	"湖裡",
+"汤团" => 	"湯糰",
+"汤面" => 	"湯麵",
+"温郁" => 	"溫郁",
+"卤制" => 	"滷製",
+"卤面" => 	"滷麵",
+"满布" => 	"滿佈",
+"漏斗" => 	"漏斗",
+"演奏台" => 	"演奏臺",
+"潜意识里" => 	"潛意識裡",
+"潭里" => 	"潭裡",
+"浓郁" => 	"濃郁",
+"浓发" => 	"濃髮",
+"湿地松" => 	"濕地鬆",
+"蒙蒙" => 	"濛濛",
+"蒙雾" => 	"濛霧",
+"蒙鸿" => 	"濛鴻",
+"瀛台" => 	"瀛臺",
+"弥漫" => 	"瀰漫",
+"弥漫着" => 	"瀰漫著",
+"漓江" => 	"灕江",
+"火并" => 	"火併",
+"灰蒙" => 	"灰濛",
+"炒面" => 	"炒麵",
+"炮制" => 	"炮製",
+"炸药" => 	"炸葯",
+"炸酱面" => 	"炸醬麵",
+"为着" => 	"為著",
+"乌干达" => 	"烏干達",
+"乌苏里江" => 	"烏蘇裡江",
+"乌发" => 	"烏髮",
+"乌龙面" => 	"烏龍麵",
+"烘制" => 	"烘製",
+"烽火台" => 	"烽火臺",
+"无干" => 	"無干",
+"无精打采" => 	"無精打采",
+"炼制" => 	"煉製",
+"烟卷儿" => 	"煙卷兒",
+"烟斗" => 	"煙斗",
+"烟斗丝" => 	"煙斗絲",
+"烟台" => 	"煙臺",
+"照准" => 	"照准",
+"熨斗" => 	"熨斗",
+"灯台" => 	"燈臺",
+"燎发" => 	"燎髮",
+"烫发" => 	"燙髮",
+"烫面" => 	"燙麵",
+"烛台" => 	"燭臺",
+"炉台" => 	"爐臺",
+"墙里" => 	"牆裡",
+"片言只语" => 	"片言隻語",
+"牛肉面" => 	"牛肉麵",
+"牛只" => 	"牛隻",
+"特准" => 	"特准",
+"特征" => 	"特征",
+"特里" => 	"特裡",
+"特制" => 	"特製",
+"牵系" => 	"牽繫",
+"狼借" => 	"狼藉",
+"猛冲" => 	"猛衝",
+"奖杯" => 	"獎盃",
+"获准" => 	"獲准",
+"率团参加" => 	"率團參加",
+"王侯後" => 	"王侯后",
+"王後" => 	"王后",
+"班里" => 	"班裡",
+"理发" => 	"理髮",
+"瑶台" => 	"瑤臺",
+"甚么" => 	"甚麼",
+"甜面酱" => 	"甜麵醬",
+"生力面" => 	"生力麵",
+"生锈" => 	"生鏽",
+"生发" => 	"生髮",
+"田里" => 	"田裡",
+"由馀" => 	"由余",
+"由表及里" => 	"由表及裡",
+"男佣" => 	"男佣",
+"男用表" => 	"男用錶",
+"留发" => 	"留髮",
+"畚斗" => 	"畚斗",
+"当着" => 	"當著",
+"疏松" => 	"疏鬆",
+"疑系" => 	"疑係",
+"疲困" => 	"疲睏",
+"病症" => 	"病癥",
+"症候" => 	"癥候",
+"症状" => 	"癥狀",
+"症结" => 	"癥結",
+"登台" => 	"登臺",
+"发布" => 	"發佈",
+"发蒙" => 	"發矇",
+"发着" => 	"發著",
+"发面" => 	"發麵",
+"发霉" => 	"發黴",
+"白卷" => 	"白卷",
+"白干儿" => 	"白干兒",
+"白里透红" => 	"白裡透紅",
+"白发" => 	"白髮",
+"白面" => 	"白麵",
+"百谷" => 	"百穀",
+"百里" => 	"百裡",
+"百只" => 	"百隻",
+"皇後" => 	"皇后",
+"皇历" => 	"皇曆",
+"皓发" => 	"皓髮",
+"皮里阳秋" => 	"皮裏陽秋",
+"皮里春秋" => 	"皮裡春秋",
+"皮制" => 	"皮製",
+"皱折" => 	"皺摺",
+"盒里" => 	"盒裡",
+"监制" => 	"監製",
+"盘里" => 	"盤裡",
+"盘回" => 	"盤迴",
+"直接参与" => 	"直接參与",
+"直冲" => 	"直衝",
+"相克" => 	"相剋",
+"相干" => 	"相干",
+"相冲" => 	"相衝",
+"看台" => 	"看臺",
+"眼帘" => 	"眼帘",
+"眼眶里" => 	"眼眶裡",
+"眼里" => 	"眼裡",
+"困乏" => 	"睏乏",
+"困倦" => 	"睏倦",
+"睡着了" => 	"睡著了",
+"了如" => 	"瞭如",
+"了望" => 	"瞭望",
+"了然" => 	"瞭然",
+"了若指掌" => 	"瞭若指掌",
+"了解" => 	"瞭解",
+"瞳蒙" => 	"瞳矇",
+"蒙住" => 	"矇住",
+"蒙昧无知" => 	"矇昧無知",
+"蒙混" => 	"矇混",
+"蒙蒙" => 	"矇矇",
+"蒙眬" => 	"矇矓",
+"蒙蔽" => 	"矇蔽",
+"蒙骗" => 	"矇騙",
+"短发" => 	"短髮",
+"矮几" => 	"矮几",
+"石英表" => 	"石英錶",
+"石莼" => 	"石蓴",
+"研制" => 	"研製",
+"砰当" => 	"砰噹",
+"砲台" => 	"砲臺",
+"朱唇皓齿" => 	"硃唇皓齒",
+"朱批" => 	"硃批",
+"朱砂" => 	"硃砂",
+"朱笔" => 	"硃筆",
+"朱红色" => 	"硃紅色",
+"朱色" => 	"硃色",
+"朱谕" => 	"硃諭",
+"硬干" => 	"硬幹",
+"砚台" => 	"硯臺",
+"碑志" => 	"碑誌",
+"磁制" => 	"磁製",
+"磨制" => 	"磨製",
+"示复" => 	"示覆",
+"社里" => 	"社裡",
+"神采" => 	"神采",
+"御侮" => 	"禦侮",
+"御寇" => 	"禦寇",
+"御寒" => 	"禦寒",
+"御敌" => 	"禦敵",
+"礼义干橹" => 	"禮義干櫓",
+"秃发" => 	"禿髮",
+"秀斗" => 	"秀斗",
+"秀发" => 	"秀髮",
+"私下里" => 	"私下裡",
+"秋天里" => 	"秋天裡",
+"秋裤" => 	"秋褲",
+"秒表" => 	"秒錶",
+"稀松" => 	"稀鬆",
+"禀复" => 	"稟覆",
+"稻谷" => 	"稻穀",
+"稽征" => 	"稽征",
+"谷人" => 	"穀人",
+"谷保家商" => 	"穀保家商",
+"谷仓" => 	"穀倉",
+"谷场" => 	"穀場",
+"谷子" => 	"穀子",
+"谷梁" => 	"穀梁",
+"谷壳" => 	"穀殼",
+"谷物" => 	"穀物",
+"谷皮" => 	"穀皮",
+"谷神" => 	"穀神",
+"谷谷" => 	"穀穀",
+"谷粒" => 	"穀粒",
+"谷舱" => 	"穀艙",
+"谷苗" => 	"穀苗",
+"谷草" => 	"穀草",
+"谷贱伤农" => 	"穀賤傷農",
+"谷道" => 	"穀道",
+"谷雨" => 	"穀雨",
+"谷类" => 	"穀類",
+"谷风" => 	"穀風",
+"积极参与" => 	"積极參与",
+"积极参加" => 	"積极參加",
+"积谷防饥" => 	"積穀防饑",
+"空蒙" => 	"空濛",
+"窗帘" => 	"窗帘",
+"窗明几净" => 	"窗明几淨",
+"窗台" => 	"窗檯",
+"窗台" => 	"窗臺",
+"窝里" => 	"窩裡",
+"窝阔台" => 	"窩闊臺",
+"穷发" => 	"窮髮",
+"站台" => 	"站臺",
+"笆斗" => 	"笆斗",
+"笑里藏刀" => 	"笑裡藏刀",
+"第一卷" => 	"第一卷",
+"筋斗" => 	"筋斗",
+"答卷" => 	"答卷",
+"答复" => 	"答複",
+"答复" => 	"答覆",
+"筵几" => 	"筵几",
+"箕斗" => 	"箕斗",
+"算历" => 	"算曆",
+"签着" => 	"簽著",
+"吁求" => 	"籲求",
+"吁请" => 	"籲請",
+"粗制" => 	"粗製",
+"粗卤" => 	"粗鹵",
+"精干" => 	"精幹",
+"精明强干" => 	"精明強幹",
+"精致" => 	"精緻",
+"精制" => 	"精製",
+"精辟" => 	"精辟",
+"精采" => 	"精采",
+"糊里糊涂" => 	"糊裡糊塗",
+"团子" => 	"糰子",
+"系着" => 	"系著",
+"系里" => 	"系裡",
+"纪历" => 	"紀曆",
+"红绳系足" => 	"紅繩繫足",
+"红发" => 	"紅髮",
+"纡回" => 	"紆迴",
+"纳采" => 	"納采",
+"素食面" => 	"素食麵",
+"素发" => 	"素髮",
+"素面" => 	"素麵",
+"紫微斗数" => 	"紫微斗數",
+"细致" => 	"細緻",
+"组里" => 	"組裡",
+"结发" => 	"結髮",
+"绝对参照" => 	"絕對參照",
+"丝来线去" => 	"絲來線去",
+"丝布" => 	"絲布",
+"丝板" => 	"絲板",
+"丝瓜布" => 	"絲瓜布",
+"丝绒布" => 	"絲絨布",
+"丝线" => 	"絲線",
+"丝织厂" => 	"絲織廠",
+"丝虫" => 	"絲蟲",
+"綑吊" => 	"綑吊",
+"经卷" => 	"經卷",
+"维系" => 	"維繫",
+"绾发" => 	"綰髮",
+"网里" => 	"網裡",
+"紧绷" => 	"緊繃",
+"紧绷着" => 	"緊繃著",
+"编制" => 	"編製",
+"编发" => 	"編髮",
+"缓冲" => 	"緩衝",
+"致密" => 	"緻密",
+"萦回" => 	"縈迴",
+"县里" => 	"縣裡",
+"县志" => 	"縣誌",
+"缝里" => 	"縫裡",
+"缝制" => 	"縫製",
+"纤夫" => 	"縴夫",
+"纤手" => 	"縴手",
+"繁复" => 	"繁複",
+"绷住" => 	"繃住",
+"绷子" => 	"繃子",
+"绷带" => 	"繃帶",
+"绷紧" => 	"繃緊",
+"绷脸" => 	"繃臉",
+"绷着" => 	"繃著",
+"绷着脸" => 	"繃著臉",
+"绷着脸儿" => 	"繃著臉兒",
+"绷开" => 	"繃開",
+"绘制" => 	"繪製",
+"系上" => 	"繫上",
+"系世" => 	"繫世",
+"系到" => 	"繫到",
+"系囚" => 	"繫囚",
+"系心" => 	"繫心",
+"系念" => 	"繫念",
+"系怀" => 	"繫懷",
+"系恋" => 	"繫戀",
+"系数" => 	"繫數",
+"系于" => 	"繫於",
+"系系" => 	"繫系",
+"系结" => 	"繫結",
+"系紧" => 	"繫緊",
+"系绳" => 	"繫繩",
+"系累" => 	"繫纍",
+"系着" => 	"繫著",
+"系辞" => 	"繫辭",
+"系风捕影" => 	"繫風捕影",
+"缴卷" => 	"繳卷",
+"累囚" => 	"纍囚",
+"累累" => 	"纍纍",
+"坛子" => 	"罈子",
+"坛坛罐罐" => 	"罈罈罐罐",
+"骂着" => 	"罵著",
+"羁系" => 	"羈繫",
+"美制" => 	"美製",
+"美发" => 	"美髮",
+"翻来复去" => 	"翻來覆去",
+"翻天复地" => 	"翻天覆地",
+"翻复" => 	"翻覆",
+"翻云复雨" => 	"翻雲覆雨",
+"老么" => 	"老么",
+"老板" => 	"老闆",
+"考卷" => 	"考卷",
+"耕获" => 	"耕穫",
+"聊斋志异" => 	"聊齋誌異",
+"联系" => 	"聯係",
+"联系" => 	"聯繫",
+"肉丝面" => 	"肉絲麵",
+"肉羹面" => 	"肉羹麵",
+"肉松" => 	"肉鬆",
+"肚里" => 	"肚裏",
+"肚里" => 	"肚裡",
+"肢体" => 	"肢体",
+"胃里" => 	"胃裡",
+"背向着" => 	"背向著",
+"背地里" => 	"背地裡",
+"胡里胡涂" => 	"胡裡胡塗",
+"能干" => 	"能幹",
+"脉冲" => 	"脈衝",
+"脱发" => 	"脫髮",
+"腊味" => 	"腊味",
+"腊笔" => 	"腊筆",
+"腊肉" => 	"腊肉",
+"脑子里" => 	"腦子裡",
+"腰里" => 	"腰裡",
+"胶卷" => 	"膠卷",
+"膨松" => 	"膨鬆",
+"自制" => 	"自製",
+"自觉自愿" => 	"自覺自愿",
+"台上" => 	"臺上",
+"台下" => 	"臺下",
+"台中" => 	"臺中",
+"台儿庄" => 	"臺兒莊",
+"台北" => 	"臺北",
+"台南" => 	"臺南",
+"台地" => 	"臺地",
+"台塑" => 	"臺塑",
+"台大" => 	"臺大",
+"台币" => 	"臺幣",
+"台座" => 	"臺座",
+"台东" => 	"臺東",
+"台柱" => 	"臺柱",
+"台榭" => 	"臺榭",
+"台机路" => 	"臺機路",
+"台步" => 	"臺步",
+"台汽" => 	"臺汽",
+"台海" => 	"臺海",
+"台澎金马" => 	"臺澎金馬",
+"台湾" => 	"臺灣",
+"台灯" => 	"臺燈",
+"台球" => 	"臺球",
+"台省" => 	"臺省",
+"台端" => 	"臺端",
+"台糖" => 	"臺糖",
+"台肥" => 	"臺肥",
+"台航" => 	"臺航",
+"台西" => 	"臺西",
+"台视" => 	"臺視",
+"台词" => 	"臺詞",
+"台车" => 	"臺車",
+"台铁" => 	"臺鐵",
+"台阶" => 	"臺階",
+"台电" => 	"臺電",
+"台面" => 	"臺面",
+"舂谷" => 	"舂穀",
+"兴致" => 	"興緻",
+"兴高采烈" => 	"興高采烈",
+"旧历" => 	"舊曆",
+"舒卷" => 	"舒卷",
+"舞榭歌台" => 	"舞榭歌臺",
+"舞台" => 	"舞臺",
+"航海历" => 	"航海曆",
+"船只" => 	"船隻",
+"舰只" => 	"艦隻",
+"芬郁" => 	"芬郁",
+"花卷" => 	"花卷",
+"花盆里" => 	"花盆裡",
+"花采" => 	"花采",
+"苑里" => 	"苑裡",
+"若干" => 	"若干",
+"若干" => 	"若幹",
+"苦干" => 	"苦幹",
+"苦里" => 	"苦裏",
+"苦卤" => 	"苦鹵",
+"范仲淹" => 	"范仲淹",
+"范蠡" => 	"范蠡",
+"范阳" => 	"范陽",
+"茅台" => 	"茅臺",
+"茶几" => 	"茶几",
+"草丛里" => 	"草叢裡",
+"庄里" => 	"莊裡",
+"茎干" => 	"莖幹",
+"菌丝体" => 	"菌絲体",
+"菌丝体" => 	"菌絲體",
+"华里" => 	"華裡",
+"华发" => 	"華髮",
+"万卷" => 	"萬卷",
+"万历" => 	"萬曆",
+"万只" => 	"萬隻",
+"落发" => 	"落髮",
+"着儿" => 	"著兒",
+"着书立说" => 	"著書立說",
+"着色软体" => 	"著色軟體",
+"着重指出" => 	"著重指出",
+"着录" => 	"著錄",
+"着录规则" => 	"著錄規則",
+"蓄发" => 	"蓄髮",
+"蓄须" => 	"蓄鬚",
+"蓬发" => 	"蓬髮",
+"蓬松" => 	"蓬鬆",
+"莲台" => 	"蓮臺",
+"薑丝" => 	"薑絲",
+"薙发" => 	"薙髮",
+"借以" => 	"藉以",
+"借助" => 	"藉助",
+"借口" => 	"藉口",
+"借故" => 	"藉故",
+"借机" => 	"藉機",
+"借此" => 	"藉此",
+"借由" => 	"藉由",
+"借端" => 	"藉端",
+"借着" => 	"藉著",
+"借借" => 	"藉藉",
+"借词" => 	"藉詞",
+"借资" => 	"藉資",
+"借酒浇愁" => 	"藉酒澆愁",
+"藤制" => 	"藤製",
+"蕴含着" => 	"蘊含著",
+"蕴涵着" => 	"蘊涵著",
+"蕴借" => 	"蘊藉",
+"萝卜" => 	"蘿蔔",
+"虎须" => 	"虎鬚",
+"号志" => 	"號誌",
+"蜂後" => 	"蜂后",
+"蜜里调油" => 	"蜜裡調油",
+"蠁干" => 	"蠁幹",
+"蛮干" => 	"蠻幹",
+"行事历" => 	"行事曆",
+"胡同" => 	"衚衕",
+"冲上" => 	"衝上",
+"冲下" => 	"衝下",
+"冲来" => 	"衝來",
+"冲倒" => 	"衝倒",
+"冲冠" => 	"衝冠",
+"冲出" => 	"衝出",
+"冲到" => 	"衝到",
+"冲刺" => 	"衝刺",
+"冲克" => 	"衝剋",
+"冲力" => 	"衝力",
+"冲劲" => 	"衝勁",
+"冲动" => 	"衝動",
+"冲去" => 	"衝去",
+"冲口" => 	"衝口",
+"冲垮" => 	"衝垮",
+"冲堂" => 	"衝堂",
+"冲压" => 	"衝壓",
+"冲天" => 	"衝天",
+"冲掉" => 	"衝掉",
+"冲撞" => 	"衝撞",
+"冲击" => 	"衝擊",
+"冲散" => 	"衝散",
+"冲决" => 	"衝決",
+"冲浪" => 	"衝浪",
+"冲激" => 	"衝激",
+"冲破" => 	"衝破",
+"冲程" => 	"衝程",
+"冲突" => 	"衝突",
+"冲线" => 	"衝線",
+"冲着" => 	"衝著",
+"冲冲" => 	"衝衝",
+"冲要" => 	"衝要",
+"冲起" => 	"衝起",
+"冲进" => 	"衝進",
+"冲过" => 	"衝過",
+"冲锋" => 	"衝鋒",
+"表里" => 	"表裡",
+"袋里" => 	"袋裡",
+"袖里" => 	"袖裡",
+"被里" => 	"被裡",
+"被复" => 	"被複",
+"被复" => 	"被覆",
+"被复着" => 	"被覆著",
+"被发" => 	"被髮",
+"裁并" => 	"裁併",
+"裁制" => 	"裁製",
+"里面" => 	"裏面",
+"里人" => 	"裡人",
+"里加" => 	"裡加",
+"里外" => 	"裡外",
+"里子" => 	"裡子",
+"里屋" => 	"裡屋",
+"里层" => 	"裡層",
+"里布" => 	"裡布",
+"里带" => 	"裡帶",
+"里弦" => 	"裡弦",
+"里应外合" => 	"裡應外合",
+"里拉" => 	"裡拉",
+"里斯" => 	"裡斯",
+"里海" => 	"裡海",
+"里脊" => 	"裡脊",
+"里衣" => 	"裡衣",
+"里里" => 	"裡裡",
+"里通外国" => 	"裡通外國",
+"里通外敌" => 	"裡通外敵",
+"里边" => 	"裡邊",
+"里间" => 	"裡間",
+"里面" => 	"裡面",
+"里头" => 	"裡頭",
+"制件" => 	"製件",
+"制作" => 	"製作",
+"制做" => 	"製做",
+"制备" => 	"製備",
+"制冰" => 	"製冰",
+"制冷" => 	"製冷",
+"制剂" => 	"製劑",
+"制品" => 	"製品",
+"制图" => 	"製圖",
+"制成" => 	"製成",
+"制法" => 	"製法",
+"制为" => 	"製為",
+"制片" => 	"製片",
+"制版" => 	"製版",
+"制程" => 	"製程",
+"制糖" => 	"製糖",
+"制纸" => 	"製紙",
+"制药" => 	"製藥",
+"制表" => 	"製表",
+"制裁" => 	"製裁",
+"制造" => 	"製造",
+"制革" => 	"製革",
+"制鞋" => 	"製鞋",
+"制盐" => 	"製鹽",
+"复仞年如" => 	"複仞年如",
+"复以百万" => 	"複以百萬",
+"复位" => 	"複位",
+"复信" => 	"複信",
+"复分数" => 	"複分數",
+"复列" => 	"複列",
+"复利" => 	"複利",
+"复印" => 	"複印",
+"复原" => 	"複原",
+"复句" => 	"複句",
+"复合" => 	"複合",
+"复名" => 	"複名",
+"复员" => 	"複員",
+"复壁" => 	"複壁",
+"复壮" => 	"複壯",
+"复姓" => 	"複姓",
+"复字键" => 	"複字鍵",
+"复审" => 	"複審",
+"复写" => 	"複寫",
+"复式" => 	"複式",
+"复复" => 	"複復",
+"复数" => 	"複數",
+"复本" => 	"複本",
+"复查" => 	"複查",
+"复核" => 	"複核",
+"复检" => 	"複檢",
+"复次" => 	"複次",
+"复比" => 	"複比",
+"复决" => 	"複決",
+"复活" => 	"複活",
+"复测" => 	"複測",
+"复亩珍" => 	"複畝珍",
+"复发" => 	"複發",
+"复目" => 	"複目",
+"复眼" => 	"複眼",
+"复种" => 	"複種",
+"复线" => 	"複線",
+"复习" => 	"複習",
+"复兴社" => 	"複興社",
+"复旧" => 	"複舊",
+"复色" => 	"複色",
+"复叶" => 	"複葉",
+"复盖" => 	"複蓋",
+"复苏" => 	"複蘇",
+"复制" => 	"複製",
+"复诊" => 	"複診",
+"复评" => 	"複評",
+"复词" => 	"複詞",
+"复试" => 	"複試",
+"复课" => 	"複課",
+"复议" => 	"複議",
+"复变函数" => 	"複變函數",
+"复赛" => 	"複賽",
+"复述" => 	"複述",
+"复选" => 	"複選",
+"复钱" => 	"複錢",
+"复阅" => 	"複閱",
+"复杂" => 	"複雜",
+"复电" => 	"複電",
+"复音" => 	"複音",
+"复韵" => 	"複韻",
+"衬里" => 	"襯裡",
+"西岳" => 	"西嶽",
+"西征" => 	"西征",
+"西历" => 	"西曆",
+"要冲" => 	"要衝",
+"要么" => 	"要麼",
+"复上" => 	"覆上",
+"复亡" => 	"覆亡",
+"复住" => 	"覆住",
+"复信" => 	"覆信",
+"复冒" => 	"覆冒",
+"复判" => 	"覆判",
+"复命" => 	"覆命",
+"复在" => 	"覆在",
+"复审" => 	"覆審",
+"复写" => 	"覆寫",
+"复巢" => 	"覆巢",
+"复成" => 	"覆成",
+"复败" => 	"覆敗",
+"复文" => 	"覆文",
+"复校" => 	"覆校",
+"复核" => 	"覆核",
+"复水难收" => 	"覆水難收",
+"复没" => 	"覆沒",
+"复灭" => 	"覆滅",
+"复叠" => 	"覆疊",
+"复盆" => 	"覆盆",
+"复舟" => 	"覆舟",
+"复着" => 	"覆著",
+"复盖" => 	"覆蓋",
+"复盖着" => 	"覆蓋著",
+"复试" => 	"覆試",
+"复诵" => 	"覆誦",
+"复议" => 	"覆議",
+"复车" => 	"覆車",
+"复载" => 	"覆載",
+"复辙" => 	"覆轍",
+"复述" => 	"覆述",
+"复选" => 	"覆選",
+"复电" => 	"覆電",
+"复鼎金" => 	"覆鼎金",
+"见复" => 	"見覆",
+"亲征" => 	"親征",
+"观众台" => 	"觀眾臺",
+"观台" => 	"觀臺",
+"观象台" => 	"觀象臺",
+"角落里" => 	"角落裡",
+"觔斗" => 	"觔斗",
+"触须" => 	"觸鬚",
+"订制" => 	"訂製",
+"诉说着" => 	"訴說著",
+"词汇" => 	"詞彙",
+"词采" => 	"詞采",
+"试卷" => 	"試卷",
+"试制" => 	"試製",
+"诗卷" => 	"詩卷",
+"话里有话" => 	"話裡有話",
+"志哀" => 	"誌哀",
+"志喜" => 	"誌喜",
+"志庆" => 	"誌慶",
+"语云" => 	"語云",
+"语汇" => 	"語彙",
+"诬蔑" => 	"誣衊",
+"诵经台" => 	"誦經臺",
+"说着" => 	"說著",
+"课征" => 	"課征",
+"调制" => 	"調製",
+"调频台" => 	"調頻臺",
+"请参阅" => 	"請參閱",
+"讲台" => 	"講臺",
+"谢绝参观" => 	"謝絕參觀",
+"护发" => 	"護髮",
+"雠正" => 	"讎正",
+"雠隙" => 	"讎隙",
+"豆腐干" => 	"豆腐干",
+"竖着" => 	"豎著",
+"丰富多采" => 	"豐富多采",
+"丰滨" => 	"豐濱",
+"丰滨乡" => 	"豐濱鄉",
+"丰采" => 	"豐采",
+"象征着" => 	"象徵著",
+"贵干" => 	"貴幹",
+"贾後" => 	"賈后",
+"赈饥" => 	"賑饑",
+"赐复" => 	"賜覆",
+"贤後" => 	"賢后",
+"质朴" => 	"質朴",
+"赌台" => 	"賭檯",
+"购并" => 	"購併",
+"赤绳系足" => 	"赤繩繫足",
+"赤松" => 	"赤鬆",
+"起吊" => 	"起吊",
+"起复" => 	"起複",
+"超级杯" => 	"超級盃",
+"赶制" => 	"趕製",
+"跟斗" => 	"跟斗",
+"跳表" => 	"跳錶",
+"蹈借" => 	"蹈藉",
+"踬仆" => 	"躓仆",
+"躯干" => 	"軀幹",
+"车库里" => 	"車庫裡",
+"车站里" => 	"車站裡",
+"车里" => 	"車裡",
+"轻松" => 	"輕鬆",
+"轮回" => 	"輪迴",
+"转台" => 	"轉檯",
+"辛丑" => 	"辛丑",
+"辟易" => 	"辟易",
+"辟邪" => 	"辟邪",
+"办伙" => 	"辦伙",
+"办公台" => 	"辦公檯",
+"辞汇" => 	"辭彙",
+"农历" => 	"農曆",
+"迂回" => 	"迂迴",
+"近日里" => 	"近日裡",
+"迥然回异" => 	"迥然迴異",
+"回光返照" => 	"迴光返照",
+"回向" => 	"迴向",
+"回圈" => 	"迴圈",
+"回廊" => 	"迴廊",
+"回形夹" => 	"迴形夾",
+"回文" => 	"迴文",
+"回旋" => 	"迴旋",
+"回流" => 	"迴流",
+"回环" => 	"迴環",
+"回盪" => 	"迴盪",
+"回纹针" => 	"迴紋針",
+"回绕" => 	"迴繞",
+"回翔" => 	"迴翔",
+"回肠" => 	"迴腸",
+"回荡" => 	"迴蕩",
+"回诵" => 	"迴誦",
+"回路" => 	"迴路",
+"回转" => 	"迴轉",
+"回递性" => 	"迴遞性",
+"回避" => 	"迴避",
+"回銮" => 	"迴鑾",
+"回音" => 	"迴音",
+"回响" => 	"迴響",
+"回风" => 	"迴風",
+"回首" => 	"迴首",
+"迷蒙" => 	"迷濛",
+"退伙" => 	"退伙",
+"这么着" => 	"這么著",
+"这里" => 	"這裏",
+"这里" => 	"這裡",
+"这只" => 	"這隻",
+"这么" => 	"這麼",
+"这么着" => 	"這麼著",
+"通心面" => 	"通心麵",
+"速食面" => 	"速食麵",
+"连系" => 	"連繫",
+"连台好戏" => 	"連臺好戲",
+"遍布" => 	"遍佈",
+"递回" => 	"遞迴",
+"远征" => 	"遠征",
+"适才" => 	"適纔",
+"遮复" => 	"遮覆",
+"还冲" => 	"還衝",
+"邋里邋遢" => 	"邋裡邋遢",
+"那里" => 	"那裏",
+"那里" => 	"那裡",
+"那只" => 	"那隻",
+"那么" => 	"那麼",
+"那么着" => 	"那麼著",
+"邪辟" => 	"邪辟",
+"郁烈" => 	"郁烈",
+"郁穆" => 	"郁穆",
+"郁郁" => 	"郁郁",
+"郁闭" => 	"郁閉",
+"郁馥" => 	"郁馥",
+"乡愿" => 	"鄉愿",
+"乡里" => 	"鄉裡",
+"邻里" => 	"鄰裡",
+"配合着" => 	"配合著",
+"配制" => 	"配製",
+"酒杯" => 	"酒盃",
+"酒坛" => 	"酒罈",
+"酥松" => 	"酥鬆",
+"醋坛" => 	"醋罈",
+"酝借" => 	"醞藉",
+"酝酿着" => 	"醞釀著",
+"医药" => 	"醫葯",
+"醲郁" => 	"醲郁",
+"酿制" => 	"釀製",
+"采地" => 	"采地",
+"采女" => 	"采女",
+"采声" => 	"采聲",
+"采色" => 	"采色",
+"采薇" => 	"采薇",
+"采薪之忧" => 	"采薪之憂",
+"采兰赠药" => 	"采蘭贈藥",
+"采邑" => 	"采邑",
+"采采" => 	"采采",
+"采风" => 	"采風",
+"里程表" => 	"里程錶",
+"重折" => 	"重摺",
+"重制" => 	"重製",
+"重复" => 	"重複",
+"重复" => 	"重覆",
+"野台戏" => 	"野臺戲",
+"金斗" => 	"金斗",
+"金装玉里" => 	"金裝玉裡",
+"金表" => 	"金錶",
+"金发" => 	"金髮",
+"银朱" => 	"銀硃",
+"银发" => 	"銀髮",
+"铜制" => 	"銅製",
+"铝制" => 	"鋁製",
+"钢制" => 	"鋼製",
+"录着" => 	"錄著",
+"录制" => 	"錄製",
+"表带" => 	"錶帶",
+"表店" => 	"錶店",
+"表厂" => 	"錶廠",
+"表壳" => 	"錶殼",
+"表链" => 	"錶鏈",
+"表面" => 	"錶面",
+"锅台" => 	"鍋臺",
+"锻鍊出" => 	"鍛鍊出",
+"锻鍊身体" => 	"鍛鍊身体",
+"镜台" => 	"鏡臺",
+"锈病" => 	"鏽病",
+"锈菌" => 	"鏽菌",
+"锈蚀" => 	"鏽蝕",
+"钟表" => 	"鐘錶",
+"铁锈" => 	"鐵鏽",
+"长征" => 	"長征",
+"长发" => 	"長髮",
+"长须鲸" => 	"長鬚鯨",
+"门帘" => 	"門帘",
+"门斗" => 	"門斗",
+"门里" => 	"門裡",
+"开伙" => 	"開伙",
+"开卷" => 	"開卷",
+"开诚布公" => 	"開誠佈公",
+"开采" => 	"開采",
+"閒情逸致" => 	"閒情逸緻",
+"间不容发" => 	"間不容髮",
+"闵采尔" => 	"閔采爾",
+"阅卷" => 	"閱卷",
+"阑干" => 	"闌干",
+"关系" => 	"關係",
+"关系着" => 	"關係著",
+"防御" => 	"防禦",
+"防锈" => 	"防鏽",
+"防台" => 	"防颱",
+"阿斗" => 	"阿斗",
+"阿里" => 	"阿裡",
+"除旧布新" => 	"除舊佈新",
+"阴干" => 	"陰干",
+"阴历" => 	"陰曆",
+"阴郁" => 	"陰郁",
+"陆征祥" => 	"陸征祥",
+"阳春面" => 	"陽春麵",
+"阳历" => 	"陽曆",
+"阳台" => 	"陽臺",
+"只字" => 	"隻字",
+"只影" => 	"隻影",
+"只手遮天" => 	"隻手遮天",
+"只眼" => 	"隻眼",
+"只言片语" => 	"隻言片語",
+"只身" => 	"隻身",
+"雅致" => 	"雅緻",
+"雇佣" => 	"雇佣",
+"双折" => 	"雙摺",
+"杂志" => 	"雜誌",
+"鸡丝" => 	"雞絲",
+"鸡丝面" => 	"雞絲麵",
+"鸡腿面" => 	"雞腿麵",
+"鸡只" => 	"雞隻",
+"难舍" => 	"難捨",
+"雨花台" => 	"雨花臺",
+"雪里" => 	"雪裡",
+"云须" => 	"雲鬚",
+"电子表" => 	"電子錶",
+"电台" => 	"電臺",
+"电冲" => 	"電衝",
+"电复" => 	"電覆",
+"电视台" => 	"電視臺",
+"电表" => 	"電錶",
+"雾台" => 	"霧臺",
+"雾里" => 	"霧裡",
+"露台" => 	"露臺",
+"灵台" => 	"靈臺",
+"青瓦台" => 	"青瓦臺",
+"青霉" => 	"青黴",
+"面朝着" => 	"面朝著",
+"面临着" => 	"面臨著",
+"鞋里" => 	"鞋裡",
+"鞣制" => 	"鞣製",
+"秋千" => 	"鞦韆",
+"鞭辟入里" => 	"鞭辟入裡",
+"韩国制" => 	"韓國製",
+"韩制" => 	"韓製",
+"颂系" => 	"頌繫",
+"预制" => 	"預製",
+"颁布" => 	"頒佈",
+"头里" => 	"頭裡",
+"头发" => 	"頭髮",
+"颊须" => 	"頰鬚",
+"颠仆" => 	"顛仆",
+"颠复" => 	"顛複",
+"颠复" => 	"顛覆",
+"显着标志" => 	"顯著標志",
+"风土志" => 	"風土誌",
+"风斗" => 	"風斗",
+"风物志" => 	"風物誌",
+"风里" => 	"風裡",
+"风采" => 	"風采",
+"台风" => 	"颱風",
+"刮了" => 	"颳了",
+"刮倒" => 	"颳倒",
+"刮去" => 	"颳去",
+"刮得" => 	"颳得",
+"刮着" => 	"颳著",
+"刮走" => 	"颳走",
+"刮起" => 	"颳起",
+"刮风" => 	"颳風",
+"饭团" => 	"飯糰",
+"饼干" => 	"餅干",
+"馄饨面" => 	"餛飩麵",
+"饥不择食" => 	"饑不擇食",
+"饥寒" => 	"饑寒",
+"饥民" => 	"饑民",
+"饥渴" => 	"饑渴",
+"饥溺" => 	"饑溺",
+"饥荒" => 	"饑荒",
+"饥饱" => 	"饑飽",
+"饥饿" => 	"饑餓",
+"饥馑" => 	"饑饉",
+"首当其冲" => 	"首當其衝",
+"香郁" => 	"香郁",
+"馥郁" => 	"馥郁",
+"马里" => 	"馬裡",
+"马表" => 	"馬錶",
+"腾冲" => 	"騰衝",
+"骨子里" => 	"骨子裡",
+"骨干" => 	"骨幹",
+"骨灰坛" => 	"骨灰罈",
+"肮脏" => 	"骯髒",
+"脏乱" => 	"髒亂",
+"脏了" => 	"髒了",
+"脏兮兮" => 	"髒兮兮",
+"脏字" => 	"髒字",
+"脏得" => 	"髒得",
+"脏东西" => 	"髒東西",
+"脏水" => 	"髒水",
+"脏的" => 	"髒的",
+"脏话" => 	"髒話",
+"脏钱" => 	"髒錢",
+"高干" => 	"高幹",
+"高台" => 	"高臺",
+"髭须" => 	"髭鬚",
+"发型" => 	"髮型",
+"发夹" => 	"髮夾",
+"发妻" => 	"髮妻",
+"发姐" => 	"髮姐",
+"发带" => 	"髮帶",
+"发廊" => 	"髮廊",
+"发式" => 	"髮式",
+"发指" => 	"髮指",
+"发捲" => 	"髮捲",
+"发根" => 	"髮根",
+"发毛" => 	"髮毛",
+"发油" => 	"髮油",
+"发状" => 	"髮狀",
+"发短心长" => 	"髮短心長",
+"发端" => 	"髮端",
+"发结" => 	"髮結",
+"发丝" => 	"髮絲",
+"发网" => 	"髮網",
+"发肤" => 	"髮膚",
+"发胶" => 	"髮膠",
+"发菜" => 	"髮菜",
+"发蜡" => 	"髮蠟",
+"发辫" => 	"髮辮",
+"发针" => 	"髮針",
+"发长" => 	"髮長",
+"发际" => 	"髮際",
+"发雕" => 	"髮雕",
+"发霜" => 	"髮霜",
+"发髻" => 	"髮髻",
+"发鬓" => 	"髮鬢",
+"鬅松" => 	"鬅鬆",
+"松了" => 	"鬆了",
+"松些" => 	"鬆些",
+"松劲" => 	"鬆勁",
+"松动" => 	"鬆動",
+"松口" => 	"鬆口",
+"松土" => 	"鬆土",
+"松弛" => 	"鬆弛",
+"松快" => 	"鬆快",
+"松懈" => 	"鬆懈",
+"松手" => 	"鬆手",
+"松掉" => 	"鬆掉",
+"松散" => 	"鬆散",
+"松林" => 	"鬆林",
+"松柔" => 	"鬆柔",
+"松毛虫" => 	"鬆毛蟲",
+"松浮" => 	"鬆浮",
+"松涛" => 	"鬆濤",
+"松科" => 	"鬆科",
+"松节油" => 	"鬆節油",
+"松绑" => 	"鬆綁",
+"松紧" => 	"鬆緊",
+"松缓" => 	"鬆緩",
+"松脆" => 	"鬆脆",
+"松脱" => 	"鬆脫",
+"松起" => 	"鬆起",
+"松软" => 	"鬆軟",
+"松通" => 	"鬆通",
+"松开" => 	"鬆開",
+"松饼" => 	"鬆餅",
+"松松" => 	"鬆鬆",
+"鬈发" => 	"鬈髮",
+"胡子" => 	"鬍子",
+"胡梢" => 	"鬍梢",
+"胡渣" => 	"鬍渣",
+"胡髭" => 	"鬍髭",
+"胡须" => 	"鬍鬚",
+"须根" => 	"鬚根",
+"须毛" => 	"鬚毛",
+"须生" => 	"鬚生",
+"须眉" => 	"鬚眉",
+"须发" => 	"鬚髮",
+"须须" => 	"鬚鬚",
+"鬓发" => 	"鬢髮",
+"斗着" => 	"鬥著",
+"闹着玩儿" => 	"鬧著玩儿",
+"闹着玩儿" => 	"鬧著玩兒",
+"郁郁" => 	"鬱郁",
+"魂牵梦系" => 	"魂牽夢繫",
+"鱼松" => 	"魚鬆",
+"鲸须" => 	"鯨鬚",
+"鲇鱼" => 	"鯰魚",
+"鸿篇巨制" => 	"鴻篇巨製",
+"鹤发" => 	"鶴髮",
+"卤化" => 	"鹵化",
+"卤味" => 	"鹵味",
+"卤族" => 	"鹵族",
+"卤水" => 	"鹵水",
+"卤汁" => 	"鹵汁",
+"卤簿" => 	"鹵簿",
+"卤素" => 	"鹵素",
+"卤莽" => 	"鹵莽",
+"卤钝" => 	"鹵鈍",
+"咸味" => 	"鹹味",
+"咸土" => 	"鹹土",
+"咸度" => 	"鹹度",
+"咸得" => 	"鹹得",
+"咸水" => 	"鹹水",
+"咸海" => 	"鹹海",
+"咸淡" => 	"鹹淡",
+"咸湖" => 	"鹹湖",
+"咸汤" => 	"鹹湯",
+"咸的" => 	"鹹的",
+"咸肉" => 	"鹹肉",
+"咸菜" => 	"鹹菜",
+"咸蛋" => 	"鹹蛋",
+"咸猪肉" => 	"鹹豬肉",
+"咸类" => 	"鹹類",
+"咸鱼" => 	"鹹魚",
+"咸鸭蛋" => 	"鹹鴨蛋",
+"咸卤" => 	"鹹鹵",
+"咸咸" => 	"鹹鹹",
+"盐卤" => 	"鹽鹵",
+"面价" => 	"麵價",
+"面包" => 	"麵包",
+"面团" => 	"麵團",
+"面店" => 	"麵店",
+"面厂" => 	"麵廠",
+"面摊" => 	"麵攤",
+"面杖" => 	"麵杖",
+"面条" => 	"麵條",
+"面灰" => 	"麵灰",
+"面皮" => 	"麵皮",
+"面筋" => 	"麵筋",
+"面粉" => 	"麵粉",
+"面糊" => 	"麵糊",
+"面线" => 	"麵線",
+"面茶" => 	"麵茶",
+"面食" => 	"麵食",
+"面饺" => 	"麵餃",
+"面饼" => 	"麵餅",
+"麻酱面" => 	"麻醬麵",
+"黄卷" => 	"黃卷",
+"黄历" => 	"黃曆",
+"黄发" => 	"黃髮",
+"黑发" => 	"黑髮",
+"黑松" => 	"黑鬆",
+"霉毒" => 	"黴毒",
+"霉素" => 	"黴素",
+"霉菌" => 	"黴菌",
+"鼓里" => 	"鼓裡",
+"冬冬" => 	"鼕鼕",
+"龙卷" => 	"龍卷",
+"龙须" => 	"龍鬚",
+"内存"=>"記憶體",
+"默认"=>"預設",
+"缺省"=>"預設",
+"串行"=>"串列",
+"以太网"=>"乙太網",
+"位图"=>"點陣圖",
+"例程"=>"常式",
+"信道"=>"通道",
+"光标"=>"游標",
+"光盘"=>"光碟",
+"光驱"=>"光碟機",
+"全角"=>"全形",
+"共享"=>"共用",
+"兼容"=>"相容",
+"前缀"=>"首碼",
+"后缀"=>"尾碼",
+"加载"=>"載入",
+"半角"=>"半形",
+"变量"=>"變數",
+"噪声"=>"雜訊",
+"因子"=>"因數",
+"在线"=>"線上",
+"脱机"=>"離線",
+"域名"=>"功能變數名稱",
+"声卡"=>"音效卡",
+"字号"=>"字型大小",
+"字库"=>"字型檔",
+"字段"=>"欄位",
+"字符"=>"字元",
+"存盘"=>"存檔",
+"寻址"=>"定址",
+"尾注"=>"章節附註",
+"异步"=>"非同步",
+"总线"=>"匯流排",
+"括号"=>"括弧",
+"接口"=>"介面",
+"控件"=>"控制項",
+"权限"=>"許可權",
+"盘片"=>"碟片",
+"硅片"=>"矽片",
+"硅谷"=>"矽谷",
+"硬盘"=>"硬碟",
+"磁盘"=>"磁碟",
+"磁道"=>"磁軌",
+"程控"=>"程式控制",
+"端口"=>"埠",
+"算子"=>"運算元",
+"算法"=>"演算法",
+"芯片"=>"晶片",
+"芯片"=>"晶元",
+"词组"=>"片語",
+"译码"=>"解碼",
+"软驱"=>"軟碟機",
+"闪存"=>"快閃記憶體",
+"鼠标"=>"滑鼠",
+"进制"=>"進位",
+"交互式"=>"互動式",
+"仿真"=>"模擬",
+"优先级"=>"優先順序",
+"传感"=>"感測",
+"便携式"=>"攜帶型",
+"信息论"=>"資訊理論",
+"循环"=>"迴圈",
+"写保护"=>"防寫",
+"分布式"=>"分散式",
+"分辨率"=>"解析度",
+"程序"=>"程式",
+"服务器"=>"伺服器",
+"等于"=>"等於",
+"局域网"=>"區域網",
+"上载"=>"上傳",
+"计算机"=>"電腦",
+"宏"=>"巨集",
+"扫瞄仪"=>"掃瞄器",
+"宽带"=>"寬頻",
+"窗口"=>"視窗",
+"数据库"=>"資料庫",
+"公历"=>"西曆",
+"奶酪"=>"乳酪",
+"巨商"=>"鉅賈",
+"手电"=>"手電筒",
+"万历"=>"萬曆",
+"永历"=>"永曆",
+"词汇"=>"辭彙",
+"保安"=>"保全",
+"习用"=>"慣用",
+"元音"=>"母音",
+"任意球"=>"自由球",
+"头球"=>"頭槌",
+"入球"=>"進球",
+"粒入球"=>"顆進球",
+"打门"=>"射門",
+"火锅盖帽"=>"蓋火鍋",
+"打印机"=>"印表機",
+"打印機"=>"印表機",
+"字节"=>"位元組",
+"字節"=>"位元組",
+"打印"=>"列印",
+"打印"=>"列印",
+"硬件"=>"硬體",
+"硬件"=>"硬體",
+"二极管"=>"二極體",
+"二極管"=>"二極體",
+"三极管"=>"三極體",
+"三極管"=>"三極體",
+"数码"=>"數位",
+"數碼"=>"數位",
+"软件"=>"軟體",
+"軟件"=>"軟體",
+"网络"=>"網路",
+"網絡"=>"網路",
+"人工智能"=>"人工智慧",
+"航天飞机"=>"太空梭",
+"穿梭機"=>"太空梭",
+"因特网"=>"網際網路",
+"互聯網"=>"網際網路",
+"机器人"=>"機器人",
+"機械人"=>"機器人",
+"移动电话"=>"行動電話",
+"流動電話"=>"行動電話",
+"调制解调器"=>"數據機",
+"調制解調器"=>"數據機",
+"短信"=>"簡訊",
+"短訊"=>"簡訊",
+"乌兹别克斯坦"=>"烏茲別克",
+"乍得"=>"查德",
+"乍得"=>"查德",
+"也门"=>"葉門",
+"也門"=>"葉門",
+"伯利兹"=>"貝里斯",
+"伯利茲"=>"貝里斯",
+"佛得角"=>"維德角",
+"佛得角"=>"維德角",
+"克罗地亚"=>"克羅埃西亞",
+"克羅地亞"=>"克羅埃西亞",
+"冈比亚"=>"甘比亞",
+"岡比亞"=>"甘比亞",
+"几内亚比绍"=>"幾內亞比索",
+"幾內亞比紹"=>"幾內亞比索",
+"列支敦士登"=>"列支敦斯登",
+"列支敦士登"=>"列支敦斯登",
+"利比里亚"=>"賴比瑞亞",
+"利比里亞"=>"賴比瑞亞",
+"加纳"=>"迦納",
+"加納"=>"迦納",
+"加蓬"=>"加彭",
+"加蓬"=>"加彭",
+"博茨瓦纳"=>"波札那",
+"博茨瓦納"=>"波札那",
+"卡塔尔"=>"卡達",
+"卡塔爾"=>"卡達",
+"卢旺达"=>"盧安達",
+"盧旺達"=>"盧安達",
+"危地马拉"=>"瓜地馬拉",
+"危地馬拉"=>"瓜地馬拉",
+"厄瓜多尔"=>"厄瓜多",
+"厄瓜多爾"=>"厄瓜多",
+"厄立特里亚"=>"厄利垂亞",
+"厄立特里亞"=>"厄利垂亞",
+"吉布提"=>"吉布地",
+"吉布堤"=>"吉布地",
+"哈萨克斯坦"=>"哈薩克",
+"哥斯达黎加"=>"哥斯大黎加",
+"哥斯達黎加"=>"哥斯大黎加",
+"图瓦卢"=>"吐瓦魯",
+"圖瓦盧"=>"吐瓦魯",
+"土库曼斯坦"=>"土庫曼",
+"圣卢西亚"=>"聖露西亞",
+"聖盧西亞"=>"聖露西亞",
+"圣基茨和尼维斯"=>"聖克里斯多福及尼維斯",
+"聖吉斯納域斯"=>"聖克里斯多福及尼維斯",
+"圣文森特和格林纳丁斯"=>"聖文森及格瑞那丁",
+"聖文森特和格林納丁斯"=>"聖文森及格瑞那丁",
+"圣马力诺"=>"聖馬利諾",
+"聖馬力諾"=>"聖馬利諾",
+"圭亚那"=>"蓋亞那",
+"圭亞那"=>"蓋亞那",
+"坦桑尼亚"=>"坦尚尼亞",
+"坦桑尼亞"=>"坦尚尼亞",
+"埃塞俄比亚"=>"衣索比亞",
+"埃塞俄比亞"=>"衣索比亞",
+"基里巴斯"=>"吉里巴斯",
+"基里巴斯"=>"吉里巴斯",
+"塔吉克斯坦"=>"塔吉克",
+"塞拉利昂"=>"獅子山",
+"塞拉利昂"=>"獅子山",
+"塞浦路斯"=>"塞普勒斯",
+"塞浦路斯"=>"塞普勒斯",
+"塞舌尔"=>"塞席爾",
+"塞舌爾"=>"塞席爾",
+"多米尼加"=>"多明尼加",
+"多明尼加共和國"=>"多明尼加",
+"多米尼加联邦"=>"多米尼克",
+"多明尼加聯邦"=>"多米尼克",
+"安提瓜和巴布达"=>"安地卡及巴布達",
+"安提瓜和巴布達"=>"安地卡及巴布達",
+"尼日利亚"=>"奈及利亞",
+"尼日利亞"=>"奈及利亞",
+"尼日尔"=>"尼日",
+"尼日爾"=>"尼日",
+"巴巴多斯"=>"巴貝多",
+"巴巴多斯"=>"巴貝多",
+"巴布亚新几内亚"=>"巴布亞紐幾內亞",
+"巴布亞新畿內亞"=>"巴布亞紐幾內亞",
+"布基纳法索"=>"布吉納法索",
+"布基納法索"=>"布吉納法索",
+"布隆迪"=>"蒲隆地",
+"布隆迪"=>"蒲隆地",
+"希腊"=>"希臘",
+"帕劳"=>"帛琉",
+"意大利"=>"義大利",
+"意大利"=>"義大利",
+"所罗门群岛"=>"索羅門群島",
+"所羅門群島"=>"索羅門群島",
+"文莱"=>"汶萊",
+"斯威士兰"=>"史瓦濟蘭",
+"斯威士蘭"=>"史瓦濟蘭",
+"斯洛文尼亚"=>"斯洛維尼亞",
+"斯洛文尼亞"=>"斯洛維尼亞",
+"新西兰"=>"紐西蘭",
+"新西蘭"=>"紐西蘭",
+"朝鲜"=>"北韓",
+"格林纳达"=>"格瑞那達",
+"格林納達"=>"格瑞那達",
+"格鲁吉亚"=>"喬治亞",
+"格魯吉亞"=>"喬治亞",
+"梵蒂冈"=>"教廷",
+"梵蒂岡"=>"教廷",
+"毛里塔尼亚"=>"茅利塔尼亞",
+"毛里塔尼亞"=>"茅利塔尼亞",
+"毛里求斯"=>"模里西斯",
+"毛里裘斯"=>"模里西斯",
+"沙特阿拉伯"=>"沙烏地阿拉伯",
+"沙地阿拉伯"=>"沙烏地阿拉伯",
+"波斯尼亚和黑塞哥维那"=>"波士尼亞赫塞哥維納",
+"波斯尼亞黑塞哥維那"=>"波士尼亞赫塞哥維納",
+"津巴布韦"=>"辛巴威",
+"津巴布韋"=>"辛巴威",
+"洪都拉斯"=>"宏都拉斯",
+"洪都拉斯"=>"宏都拉斯",
+"特立尼达和托巴哥"=>"千里達托貝哥",
+"特立尼達和多巴哥"=>"千里達托貝哥",
+"瑙鲁"=>"諾魯",
+"瑙魯"=>"諾魯",
+"瓦努阿图"=>"萬那杜",
+"瓦努阿圖"=>"萬那杜",
+"溫納圖萬"=>"那杜",
+"科摩罗"=>"葛摩",
+"科摩羅"=>"葛摩",
+"科特迪瓦"=>"象牙海岸",
+"突尼斯"=>"突尼西亞",
+"索马里"=>"索馬利亞",
+"索馬里"=>"索馬利亞",
+"老挝"=>"寮國",
+"老撾"=>"寮國",
+"肯尼亚"=>"肯亞",
+"肯雅"=>"肯亞",
+"苏里南"=>"蘇利南",
+"莫桑比克"=>"莫三比克",
+"莱索托"=>"賴索托",
+"萊索托"=>"賴索托",
+"贝宁"=>"貝南",
+"貝寧"=>"貝南",
+"赞比亚"=>"尚比亞",
+"贊比亞"=>"尚比亞",
+"阿塞拜疆"=>"亞塞拜然",
+"阿塞拜疆"=>"亞塞拜然",
+"阿拉伯联合酋长国"=>"阿拉伯聯合大公國",
+"阿拉伯聯合酋長國"=>"阿拉伯聯合大公國",
+"韩国"=>"南韓",
+"马尔代夫"=>"馬爾地夫",
+"馬爾代夫"=>"馬爾地夫",
+"马耳他"=>"馬爾他",
+"马里"=>"馬利",
+"馬里"=>"馬利",
+"方便面"=>"速食麵",
+"快速面"=>"速食麵",
+"即食麵"=>"速食麵",
+"薯仔"=>"土豆",
+"蹦极跳"=>"笨豬跳",
+"绑紧跳"=>"笨豬跳",
+"冷菜"=>"冷盤",
+"凉菜"=>"冷盤",
+"的士"=>"計程車",
+"出租车"=>"計程車",
+"巴士"=>"公車",
+"公共汽车"=>"公車",
+"台球"=>"撞球",
+"桌球"=>"撞球",
+"雪糕"=>"冰淇淋",
+"卫生"=>"衛生",
+"衞生"=>"衛生",
+"平治"=>"賓士",
+"奔驰"=>"賓士",
+"積架"=>"捷豹",
+"福士"=>"福斯",
+"雪铁龙"=>"雪鐵龍",
+"马自达"=>"馬自達",
+"萬事得"=>"馬自達",
+"布什"=>"布希",
+"布殊"=>"布希",
+"克林顿"=>"柯林頓",
+"克林頓"=>"柯林頓",
+"萨达姆"=>"海珊",
+"薩達姆"=>"海珊",
+"凡高"=>"梵谷",
+"狄安娜"=>"黛安娜",
+"戴安娜"=>"黛安娜",
+"赫拉"=>"希拉",
+);
+
+
+$zh2CN=array(
+"么"=>"么",
+"瀋"=>"沈",
+"畫"=>"划",
+"鍾"=>"钟",
+"餘"=>"余",
+"鯰"=>"鲇",
+"鹼"=>"硷",
+"麼"=>"么",
+"䊷"=>"䌶",
+"𧩙"=>"䜥",
+"万"=>"万",
+"与"=>"与",
+"丑"=>"丑",
+"丟"=>"丢",
+"並"=>"并",
+"丰"=>"丰",
+"么"=>"么",
+"乾"=>"干",
+"亂"=>"乱",
+"云"=>"云",
+"亙"=>"亘",
+"亞"=>"亚",
+"仆"=>"仆",
+"价"=>"价",
+"伙"=>"伙",
+"佇"=>"伫",
+"佈"=>"布",
+"体"=>"体",
+"余"=>"余",
+"余"=>"馀",
+"佣"=>"佣",
+"併"=>"并",
+"來"=>"来",
+"侖"=>"仑",
+"侶"=>"侣",
+"俁"=>"俣",
+"係"=>"系",
+"俔"=>"伣",
+"俠"=>"侠",
+"倀"=>"伥",
+"倆"=>"俩",
+"倈"=>"俫",
+"倉"=>"仓",
+"個"=>"个",
+"們"=>"们",
+"倫"=>"伦",
+"偉"=>"伟",
+"側"=>"侧",
+"偵"=>"侦",
+"偽"=>"伪",
+"傑"=>"杰",
+"傖"=>"伧",
+"傘"=>"伞",
+"備"=>"备",
+"傢"=>"家",
+"傭"=>"佣",
+"傯"=>"偬",
+"傳"=>"传",
+"傴"=>"伛",
+"債"=>"债",
+"傷"=>"伤",
+"傾"=>"倾",
+"僂"=>"偻",
+"僅"=>"仅",
+"僉"=>"佥",
+"僑"=>"侨",
+"僕"=>"仆",
+"僞"=>"伪",
+"僥"=>"侥",
+"僨"=>"偾",
+"價"=>"价",
+"儀"=>"仪",
+"儂"=>"侬",
+"億"=>"亿",
+"儈"=>"侩",
+"儉"=>"俭",
+"儐"=>"傧",
+"儔"=>"俦",
+"儕"=>"侪",
+"儘"=>"尽",
+"償"=>"偿",
+"優"=>"优",
+"儲"=>"储",
+"儷"=>"俪",
+"儺"=>"傩",
+"儻"=>"傥",
+"儼"=>"俨",
+"儿"=>"儿",
+"兇"=>"凶",
+"兌"=>"兑",
+"兒"=>"儿",
+"兗"=>"兖",
+"党"=>"党",
+"內"=>"内",
+"兩"=>"两",
+"冊"=>"册",
+"冪"=>"幂",
+"准"=>"准",
+"凈"=>"净",
+"凍"=>"冻",
+"凜"=>"凛",
+"几"=>"几",
+"凱"=>"凯",
+"划"=>"划",
+"別"=>"别",
+"刪"=>"删",
+"剄"=>"刭",
+"則"=>"则",
+"剋"=>"克",
+"剎"=>"刹",
+"剗"=>"刬",
+"剛"=>"刚",
+"剝"=>"剥",
+"剮"=>"剐",
+"剴"=>"剀",
+"創"=>"创",
+"劃"=>"划",
+"劇"=>"剧",
+"劉"=>"刘",
+"劊"=>"刽",
+"劌"=>"刿",
+"劍"=>"剑",
+"劑"=>"剂",
+"勁"=>"劲",
+"動"=>"动",
+"務"=>"务",
+"勛"=>"勋",
+"勝"=>"胜",
+"勞"=>"劳",
+"勢"=>"势",
+"勩"=>"勚",
+"勱"=>"劢",
+"勵"=>"励",
+"勸"=>"劝",
+"勻"=>"匀",
+"匭"=>"匦",
+"匯"=>"汇",
+"匱"=>"匮",
+"區"=>"区",
+"協"=>"协",
+"卷"=>"卷",
+"卻"=>"却",
+"厂"=>"厂",
+"厙"=>"厍",
+"厠"=>"厕",
+"厭"=>"厌",
+"厲"=>"厉",
+"厴"=>"厣",
+"參"=>"参",
+"叄"=>"叁",
+"叢"=>"丛",
+"台"=>"台",
+"叶"=>"叶",
+"吊"=>"吊",
+"后"=>"后",
+"后"=>"後",
+"吒"=>"咤",
+"吳"=>"吴",
+"吶"=>"呐",
+"呂"=>"吕",
+"咼"=>"呙",
+"員"=>"员",
+"唄"=>"呗",
+"唚"=>"吣",
+"問"=>"问",
+"啓"=>"启",
+"啞"=>"哑",
+"啟"=>"启",
+"啢"=>"唡",
+"喎"=>"㖞",
+"喚"=>"唤",
+"喪"=>"丧",
+"喬"=>"乔",
+"單"=>"单",
+"喲"=>"哟",
+"嗆"=>"呛",
+"嗇"=>"啬",
+"嗊"=>"唝",
+"嗎"=>"吗",
+"嗚"=>"呜",
+"嗩"=>"唢",
+"嗶"=>"哔",
+"嘆"=>"叹",
+"嘍"=>"喽",
+"嘔"=>"呕",
+"嘖"=>"啧",
+"嘗"=>"尝",
+"嘜"=>"唛",
+"嘩"=>"哗",
+"嘮"=>"唠",
+"嘯"=>"啸",
+"嘰"=>"叽",
+"嘵"=>"哓",
+"嘸"=>"呒",
+"嘽"=>"啴",
+"噁"=>"恶",
+"噓"=>"嘘",
+"噝"=>"咝",
+"噠"=>"哒",
+"噥"=>"哝",
+"噦"=>"哕",
+"噯"=>"嗳",
+"噲"=>"哙",
+"噴"=>"喷",
+"噸"=>"吨",
+"噹"=>"当",
+"嚀"=>"咛",
+"嚇"=>"吓",
+"嚌"=>"哜",
+"嚕"=>"噜",
+"嚙"=>"啮",
+"嚥"=>"咽",
+"嚦"=>"呖",
+"嚨"=>"咙",
+"嚮"=>"向",
+"嚲"=>"亸",
+"嚳"=>"喾",
+"嚴"=>"严",
+"嚶"=>"嘤",
+"囀"=>"啭",
+"囁"=>"嗫",
+"囂"=>"嚣",
+"囅"=>"冁",
+"囈"=>"呓",
+"囌"=>"苏",
+"囑"=>"嘱",
+"囪"=>"囱",
+"圇"=>"囵",
+"國"=>"国",
+"圍"=>"围",
+"園"=>"园",
+"圓"=>"圆",
+"圖"=>"图",
+"團"=>"团",
+"坏"=>"坏",
+"垵"=>"埯",
+"埡"=>"垭",
+"埰"=>"采",
+"執"=>"执",
+"堅"=>"坚",
+"堊"=>"垩",
+"堖"=>"垴",
+"堝"=>"埚",
+"堯"=>"尧",
+"報"=>"报",
+"場"=>"场",
+"塊"=>"块",
+"塋"=>"茔",
+"塏"=>"垲",
+"塒"=>"埘",
+"塗"=>"涂",
+"塚"=>"冢",
+"塢"=>"坞",
+"塤"=>"埙",
+"塵"=>"尘",
+"塹"=>"堑",
+"墊"=>"垫",
+"墜"=>"坠",
+"墮"=>"堕",
+"墳"=>"坟",
+"墻"=>"墙",
+"墾"=>"垦",
+"壇"=>"坛",
+"壈"=>"𡒄",
+"壋"=>"垱",
+"壓"=>"压",
+"壘"=>"垒",
+"壙"=>"圹",
+"壚"=>"垆",
+"壞"=>"坏",
+"壟"=>"垄",
+"壠"=>"垅",
+"壢"=>"坜",
+"壩"=>"坝",
+"壯"=>"壮",
+"壺"=>"壶",
+"壼"=>"壸",
+"壽"=>"寿",
+"夠"=>"够",
+"夢"=>"梦",
+"夾"=>"夹",
+"奐"=>"奂",
+"奧"=>"奥",
+"奩"=>"奁",
+"奪"=>"夺",
+"奬"=>"奖",
+"奮"=>"奋",
+"奼"=>"姹",
+"妝"=>"妆",
+"姍"=>"姗",
+"姜"=>"姜",
+"姦"=>"奸",
+"娛"=>"娱",
+"婁"=>"娄",
+"婦"=>"妇",
+"婭"=>"娅",
+"媧"=>"娲",
+"媯"=>"妫",
+"媼"=>"媪",
+"媽"=>"妈",
+"嫗"=>"妪",
+"嫵"=>"妩",
+"嫻"=>"娴",
+"嫿"=>"婳",
+"嬀"=>"妫",
+"嬈"=>"娆",
+"嬋"=>"婵",
+"嬌"=>"娇",
+"嬙"=>"嫱",
+"嬡"=>"嫒",
+"嬤"=>"嬷",
+"嬪"=>"嫔",
+"嬰"=>"婴",
+"嬸"=>"婶",
+"孌"=>"娈",
+"孫"=>"孙",
+"學"=>"学",
+"孿"=>"孪",
+"宁"=>"宁",
+"宮"=>"宫",
+"寢"=>"寝",
+"實"=>"实",
+"寧"=>"宁",
+"審"=>"审",
+"寫"=>"写",
+"寬"=>"宽",
+"寵"=>"宠",
+"寶"=>"宝",
+"將"=>"将",
+"專"=>"专",
+"尋"=>"寻",
+"對"=>"对",
+"導"=>"导",
+"尷"=>"尴",
+"屆"=>"届",
+"屍"=>"尸",
+"屓"=>"屃",
+"屜"=>"屉",
+"屢"=>"屡",
+"層"=>"层",
+"屨"=>"屦",
+"屬"=>"属",
+"岡"=>"冈",
+"峴"=>"岘",
+"島"=>"岛",
+"峽"=>"峡",
+"崍"=>"崃",
+"崗"=>"岗",
+"崢"=>"峥",
+"崬"=>"岽",
+"嵐"=>"岚",
+"嶁"=>"嵝",
+"嶄"=>"崭",
+"嶇"=>"岖",
+"嶔"=>"嵚",
+"嶗"=>"崂",
+"嶠"=>"峤",
+"嶢"=>"峣",
+"嶧"=>"峄",
+"嶮"=>"崄",
+"嶴"=>"岙",
+"嶸"=>"嵘",
+"嶺"=>"岭",
+"嶼"=>"屿",
+"嶽"=>"岳",
+"巋"=>"岿",
+"巒"=>"峦",
+"巔"=>"巅",
+"巰"=>"巯",
+"帘"=>"帘",
+"帥"=>"帅",
+"師"=>"师",
+"帳"=>"帐",
+"帶"=>"带",
+"幀"=>"帧",
+"幃"=>"帏",
+"幗"=>"帼",
+"幘"=>"帻",
+"幟"=>"帜",
+"幣"=>"币",
+"幫"=>"帮",
+"幬"=>"帱",
+"幹"=>"干",
+"幺"=>"么",
+"幾"=>"几",
+"广"=>"广",
+"庫"=>"库",
+"廁"=>"厕",
+"廂"=>"厢",
+"廄"=>"厩",
+"廈"=>"厦",
+"廚"=>"厨",
+"廝"=>"厮",
+"廟"=>"庙",
+"廠"=>"厂",
+"廡"=>"庑",
+"廢"=>"废",
+"廣"=>"广",
+"廩"=>"廪",
+"廬"=>"庐",
+"廳"=>"厅",
+"弒"=>"弑",
+"弳"=>"弪",
+"張"=>"张",
+"強"=>"强",
+"彆"=>"别",
+"彈"=>"弹",
+"彌"=>"弥",
+"彎"=>"弯",
+"彙"=>"汇",
+"彞"=>"彝",
+"彥"=>"彦",
+"征"=>"征",
+"後"=>"后",
+"徑"=>"径",
+"從"=>"从",
+"徠"=>"徕",
+"復"=>"复",
+"徵"=>"征",
+"徹"=>"彻",
+"恆"=>"恒",
+"恥"=>"耻",
+"悅"=>"悦",
+"悞"=>"悮",
+"悵"=>"怅",
+"悶"=>"闷",
+"惡"=>"恶",
+"惱"=>"恼",
+"惲"=>"恽",
+"惻"=>"恻",
+"愛"=>"爱",
+"愜"=>"惬",
+"愨"=>"悫",
+"愴"=>"怆",
+"愷"=>"恺",
+"愾"=>"忾",
+"愿"=>"愿",
+"慄"=>"栗",
+"態"=>"态",
+"慍"=>"愠",
+"慘"=>"惨",
+"慚"=>"惭",
+"慟"=>"恸",
+"慣"=>"惯",
+"慤"=>"悫",
+"慪"=>"怄",
+"慫"=>"怂",
+"慮"=>"虑",
+"慳"=>"悭",
+"慶"=>"庆",
+"憂"=>"忧",
+"憊"=>"惫",
+"憐"=>"怜",
+"憑"=>"凭",
+"憒"=>"愦",
+"憚"=>"惮",
+"憤"=>"愤",
+"憫"=>"悯",
+"憮"=>"怃",
+"憲"=>"宪",
+"憶"=>"忆",
+"懇"=>"恳",
+"應"=>"应",
+"懌"=>"怿",
+"懍"=>"懔",
+"懞"=>"蒙",
+"懟"=>"怼",
+"懣"=>"懑",
+"懨"=>"恹",
+"懲"=>"惩",
+"懶"=>"懒",
+"懷"=>"怀",
+"懸"=>"悬",
+"懺"=>"忏",
+"懼"=>"惧",
+"懾"=>"慑",
+"戀"=>"恋",
+"戇"=>"戆",
+"戔"=>"戋",
+"戧"=>"戗",
+"戩"=>"戬",
+"戰"=>"战",
+"戱"=>"戯",
+"戲"=>"戏",
+"戶"=>"户",
+"担"=>"担",
+"拋"=>"抛",
+"拾"=>"十",
+"挩"=>"捝",
+"挾"=>"挟",
+"捨"=>"舍",
+"捫"=>"扪",
+"据"=>"据",
+"掃"=>"扫",
+"掄"=>"抡",
+"掗"=>"挜",
+"掙"=>"挣",
+"掛"=>"挂",
+"採"=>"采",
+"揀"=>"拣",
+"揚"=>"扬",
+"換"=>"换",
+"揮"=>"挥",
+"損"=>"损",
+"搖"=>"摇",
+"搗"=>"捣",
+"搵"=>"揾",
+"搶"=>"抢",
+"摑"=>"掴",
+"摜"=>"掼",
+"摟"=>"搂",
+"摯"=>"挚",
+"摳"=>"抠",
+"摶"=>"抟",
+"摺"=>"折",
+"摻"=>"掺",
+"撈"=>"捞",
+"撏"=>"挦",
+"撐"=>"撑",
+"撓"=>"挠",
+"撝"=>"㧑",
+"撟"=>"挢",
+"撣"=>"掸",
+"撥"=>"拨",
+"撫"=>"抚",
+"撲"=>"扑",
+"撳"=>"揿",
+"撻"=>"挞",
+"撾"=>"挝",
+"撿"=>"捡",
+"擁"=>"拥",
+"擄"=>"掳",
+"擇"=>"择",
+"擊"=>"击",
+"擋"=>"挡",
+"擓"=>"㧟",
+"擔"=>"担",
+"據"=>"据",
+"擠"=>"挤",
+"擬"=>"拟",
+"擯"=>"摈",
+"擰"=>"拧",
+"擱"=>"搁",
+"擲"=>"掷",
+"擴"=>"扩",
+"擷"=>"撷",
+"擺"=>"摆",
+"擻"=>"擞",
+"擼"=>"撸",
+"擾"=>"扰",
+"攄"=>"摅",
+"攆"=>"撵",
+"攏"=>"拢",
+"攔"=>"拦",
+"攖"=>"撄",
+"攙"=>"搀",
+"攛"=>"撺",
+"攜"=>"携",
+"攝"=>"摄",
+"攢"=>"攒",
+"攣"=>"挛",
+"攤"=>"摊",
+"攪"=>"搅",
+"攬"=>"揽",
+"敗"=>"败",
+"敘"=>"叙",
+"敵"=>"敌",
+"數"=>"数",
+"斂"=>"敛",
+"斃"=>"毙",
+"斕"=>"斓",
+"斗"=>"斗",
+"斬"=>"斩",
+"斷"=>"断",
+"於"=>"于",
+"時"=>"时",
+"晉"=>"晋",
+"晝"=>"昼",
+"暈"=>"晕",
+"暉"=>"晖",
+"暘"=>"旸",
+"暢"=>"畅",
+"暫"=>"暂",
+"曄"=>"晔",
+"曆"=>"历",
+"曇"=>"昙",
+"曉"=>"晓",
+"曏"=>"向",
+"曖"=>"暧",
+"曠"=>"旷",
+"曨"=>"昽",
+"曬"=>"晒",
+"書"=>"书",
+"會"=>"会",
+"朧"=>"胧",
+"朮"=>"术",
+"术"=>"术",
+"朴"=>"朴",
+"東"=>"东",
+"杴"=>"锨",
+"极"=>"极",
+"柜"=>"柜",
+"柵"=>"栅",
+"桿"=>"杆",
+"梔"=>"栀",
+"梘"=>"枧",
+"條"=>"条",
+"梟"=>"枭",
+"梲"=>"棁",
+"棄"=>"弃",
+"棖"=>"枨",
+"棗"=>"枣",
+"棟"=>"栋",
+"棧"=>"栈",
+"棲"=>"栖",
+"棶"=>"梾",
+"椏"=>"桠",
+"楊"=>"杨",
+"楓"=>"枫",
+"楨"=>"桢",
+"業"=>"业",
+"極"=>"极",
+"榪"=>"杩",
+"榮"=>"荣",
+"榲"=>"榅",
+"榿"=>"桤",
+"構"=>"构",
+"槍"=>"枪",
+"槤"=>"梿",
+"槧"=>"椠",
+"槨"=>"椁",
+"槳"=>"桨",
+"樁"=>"桩",
+"樂"=>"乐",
+"樅"=>"枞",
+"樓"=>"楼",
+"標"=>"标",
+"樞"=>"枢",
+"樣"=>"样",
+"樸"=>"朴",
+"樹"=>"树",
+"樺"=>"桦",
+"橈"=>"桡",
+"橋"=>"桥",
+"機"=>"机",
+"橢"=>"椭",
+"橫"=>"横",
+"檁"=>"檩",
+"檉"=>"柽",
+"檔"=>"档",
+"檜"=>"桧",
+"檟"=>"槚",
+"檢"=>"检",
+"檣"=>"樯",
+"檮"=>"梼",
+"檯"=>"台",
+"檳"=>"槟",
+"檸"=>"柠",
+"檻"=>"槛",
+"櫃"=>"柜",
+"櫓"=>"橹",
+"櫚"=>"榈",
+"櫛"=>"栉",
+"櫝"=>"椟",
+"櫞"=>"橼",
+"櫟"=>"栎",
+"櫥"=>"橱",
+"櫧"=>"槠",
+"櫨"=>"栌",
+"櫪"=>"枥",
+"櫫"=>"橥",
+"櫬"=>"榇",
+"櫱"=>"蘖",
+"櫳"=>"栊",
+"櫸"=>"榉",
+"櫻"=>"樱",
+"欄"=>"栏",
+"權"=>"权",
+"欏"=>"椤",
+"欒"=>"栾",
+"欖"=>"榄",
+"欞"=>"棂",
+"欽"=>"钦",
+"歐"=>"欧",
+"歟"=>"欤",
+"歡"=>"欢",
+"歲"=>"岁",
+"歷"=>"历",
+"歸"=>"归",
+"歿"=>"殁",
+"殘"=>"残",
+"殞"=>"殒",
+"殤"=>"殇",
+"殨"=>"㱮",
+"殫"=>"殚",
+"殮"=>"殓",
+"殯"=>"殡",
+"殲"=>"歼",
+"殺"=>"杀",
+"殻"=>"壳",
+"殼"=>"壳",
+"毀"=>"毁",
+"毆"=>"殴",
+"毿"=>"毵",
+"氂"=>"牦",
+"氈"=>"毡",
+"氌"=>"氇",
+"氣"=>"气",
+"氫"=>"氢",
+"氬"=>"氩",
+"氳"=>"氲",
+"汙"=>"污",
+"決"=>"决",
+"沒"=>"没",
+"沖"=>"冲",
+"況"=>"况",
+"洶"=>"汹",
+"浹"=>"浃",
+"涂"=>"涂",
+"涇"=>"泾",
+"涼"=>"凉",
+"淀"=>"淀",
+"淒"=>"凄",
+"淚"=>"泪",
+"淥"=>"渌",
+"淨"=>"净",
+"淩"=>"凌",
+"淪"=>"沦",
+"淵"=>"渊",
+"淶"=>"涞",
+"淺"=>"浅",
+"渙"=>"涣",
+"減"=>"减",
+"渦"=>"涡",
+"測"=>"测",
+"渾"=>"浑",
+"湊"=>"凑",
+"湞"=>"浈",
+"湯"=>"汤",
+"溈"=>"沩",
+"準"=>"准",
+"溝"=>"沟",
+"溫"=>"温",
+"滄"=>"沧",
+"滅"=>"灭",
+"滌"=>"涤",
+"滎"=>"荥",
+"滬"=>"沪",
+"滯"=>"滞",
+"滲"=>"渗",
+"滷"=>"卤",
+"滸"=>"浒",
+"滻"=>"浐",
+"滾"=>"滚",
+"滿"=>"满",
+"漁"=>"渔",
+"漚"=>"沤",
+"漢"=>"汉",
+"漣"=>"涟",
+"漬"=>"渍",
+"漲"=>"涨",
+"漵"=>"溆",
+"漸"=>"渐",
+"漿"=>"浆",
+"潁"=>"颍",
+"潑"=>"泼",
+"潔"=>"洁",
+"潙"=>"沩",
+"潛"=>"潜",
+"潤"=>"润",
+"潯"=>"浔",
+"潰"=>"溃",
+"潷"=>"滗",
+"潿"=>"涠",
+"澀"=>"涩",
+"澆"=>"浇",
+"澇"=>"涝",
+"澐"=>"沄",
+"澗"=>"涧",
+"澠"=>"渑",
+"澤"=>"泽",
+"澦"=>"滪",
+"澩"=>"泶",
+"澮"=>"浍",
+"澱"=>"淀",
+"濁"=>"浊",
+"濃"=>"浓",
+"濕"=>"湿",
+"濘"=>"泞",
+"濛"=>"蒙",
+"濟"=>"济",
+"濤"=>"涛",
+"濫"=>"滥",
+"濰"=>"潍",
+"濱"=>"滨",
+"濺"=>"溅",
+"濼"=>"泺",
+"濾"=>"滤",
+"瀅"=>"滢",
+"瀆"=>"渎",
+"瀉"=>"泻",
+"瀋"=>"沈",
+"瀏"=>"浏",
+"瀕"=>"濒",
+"瀘"=>"泸",
+"瀝"=>"沥",
+"瀟"=>"潇",
+"瀠"=>"潆",
+"瀦"=>"潴",
+"瀧"=>"泷",
+"瀨"=>"濑",
+"瀰"=>"弥",
+"瀲"=>"潋",
+"瀾"=>"澜",
+"灃"=>"沣",
+"灄"=>"滠",
+"灑"=>"洒",
+"灕"=>"漓",
+"灘"=>"滩",
+"灝"=>"灏",
+"灠"=>"漤",
+"灣"=>"湾",
+"灤"=>"滦",
+"灧"=>"滟",
+"災"=>"灾",
+"為"=>"为",
+"烏"=>"乌",
+"烴"=>"烃",
+"無"=>"无",
+"煉"=>"炼",
+"煒"=>"炜",
+"煙"=>"烟",
+"煢"=>"茕",
+"煥"=>"焕",
+"煩"=>"烦",
+"煬"=>"炀",
+"熅"=>"煴",
+"熒"=>"荧",
+"熗"=>"炝",
+"熱"=>"热",
+"熲"=>"颎",
+"熾"=>"炽",
+"燁"=>"烨",
+"燈"=>"灯",
+"燉"=>"炖",
+"燒"=>"烧",
+"燙"=>"烫",
+"燜"=>"焖",
+"營"=>"营",
+"燦"=>"灿",
+"燭"=>"烛",
+"燴"=>"烩",
+"燼"=>"烬",
+"燾"=>"焘",
+"爍"=>"烁",
+"爐"=>"炉",
+"爛"=>"烂",
+"爭"=>"争",
+"爲"=>"为",
+"爺"=>"爷",
+"爾"=>"尔",
+"牆"=>"墙",
+"牘"=>"牍",
+"牽"=>"牵",
+"犖"=>"荦",
+"犢"=>"犊",
+"犧"=>"牺",
+"狀"=>"状",
+"狹"=>"狭",
+"狽"=>"狈",
+"猙"=>"狰",
+"猶"=>"犹",
+"猻"=>"狲",
+"獁"=>"犸",
+"獄"=>"狱",
+"獅"=>"狮",
+"獎"=>"奖",
+"獨"=>"独",
+"獪"=>"狯",
+"獫"=>"猃",
+"獮"=>"狝",
+"獰"=>"狞",
+"獲"=>"获",
+"獵"=>"猎",
+"獷"=>"犷",
+"獸"=>"兽",
+"獺"=>"獭",
+"獻"=>"献",
+"獼"=>"猕",
+"玀"=>"猡",
+"現"=>"现",
+"琺"=>"珐",
+"琿"=>"珲",
+"瑋"=>"玮",
+"瑒"=>"玚",
+"瑣"=>"琐",
+"瑤"=>"瑶",
+"瑩"=>"莹",
+"瑪"=>"玛",
+"瑲"=>"玱",
+"璉"=>"琏",
+"璣"=>"玑",
+"璦"=>"瑷",
+"璫"=>"珰",
+"環"=>"环",
+"璽"=>"玺",
+"瓊"=>"琼",
+"瓏"=>"珑",
+"瓔"=>"璎",
+"瓚"=>"瓒",
+"甌"=>"瓯",
+"產"=>"产",
+"産"=>"产",
+"畝"=>"亩",
+"畢"=>"毕",
+"異"=>"异",
+"畵"=>"画",
+"當"=>"当",
+"疇"=>"畴",
+"疊"=>"叠",
+"痙"=>"痉",
+"痾"=>"疴",
+"瘂"=>"痖",
+"瘋"=>"疯",
+"瘍"=>"疡",
+"瘓"=>"痪",
+"瘞"=>"瘗",
+"瘡"=>"疮",
+"瘧"=>"疟",
+"瘮"=>"瘆",
+"瘲"=>"疭",
+"瘺"=>"瘘",
+"瘻"=>"瘘",
+"療"=>"疗",
+"癆"=>"痨",
+"癇"=>"痫",
+"癉"=>"瘅",
+"癘"=>"疠",
+"癟"=>"瘪",
+"癢"=>"痒",
+"癤"=>"疖",
+"癥"=>"症",
+"癧"=>"疬",
+"癩"=>"癞",
+"癬"=>"癣",
+"癭"=>"瘿",
+"癮"=>"瘾",
+"癰"=>"痈",
+"癱"=>"瘫",
+"癲"=>"癫",
+"發"=>"发",
+"皚"=>"皑",
+"皰"=>"疱",
+"皸"=>"皲",
+"皺"=>"皱",
+"盃"=>"杯",
+"盜"=>"盗",
+"盞"=>"盏",
+"盡"=>"尽",
+"監"=>"监",
+"盤"=>"盘",
+"盧"=>"卢",
+"眥"=>"眦",
+"眾"=>"众",
+"睏"=>"困",
+"睜"=>"睁",
+"睞"=>"睐",
+"瞘"=>"眍",
+"瞜"=>"䁖",
+"瞞"=>"瞒",
+"瞭"=>"了",
+"瞶"=>"瞆",
+"瞼"=>"睑",
+"矇"=>"蒙",
+"矓"=>"眬",
+"矚"=>"瞩",
+"矯"=>"矫",
+"硃"=>"朱",
+"硜"=>"硁",
+"硤"=>"硖",
+"硨"=>"砗",
+"确"=>"确",
+"硯"=>"砚",
+"碩"=>"硕",
+"碭"=>"砀",
+"碸"=>"砜",
+"確"=>"确",
+"碼"=>"码",
+"磑"=>"硙",
+"磚"=>"砖",
+"磣"=>"碜",
+"磧"=>"碛",
+"磯"=>"矶",
+"磽"=>"硗",
+"礆"=>"硷",
+"礎"=>"础",
+"礙"=>"碍",
+"礦"=>"矿",
+"礪"=>"砺",
+"礫"=>"砾",
+"礬"=>"矾",
+"礱"=>"砻",
+"祿"=>"禄",
+"禍"=>"祸",
+"禎"=>"祯",
+"禕"=>"祎",
+"禡"=>"祃",
+"禦"=>"御",
+"禪"=>"禅",
+"禮"=>"礼",
+"禰"=>"祢",
+"禱"=>"祷",
+"禿"=>"秃",
+"秈"=>"籼",
+"种"=>"种",
+"稅"=>"税",
+"稈"=>"秆",
+"稟"=>"禀",
+"種"=>"种",
+"稱"=>"称",
+"穀"=>"谷",
+"穌"=>"稣",
+"積"=>"积",
+"穎"=>"颖",
+"穠"=>"秾",
+"穡"=>"穑",
+"穢"=>"秽",
+"穩"=>"稳",
+"穫"=>"获",
+"穭"=>"稆",
+"窩"=>"窝",
+"窪"=>"洼",
+"窮"=>"穷",
+"窯"=>"窑",
+"窵"=>"窎",
+"窶"=>"窭",
+"窺"=>"窥",
+"竄"=>"窜",
+"竅"=>"窍",
+"竇"=>"窦",
+"竈"=>"灶",
+"竊"=>"窃",
+"竪"=>"竖",
+"競"=>"竞",
+"筆"=>"笔",
+"筍"=>"笋",
+"筑"=>"筑",
+"筧"=>"笕",
+"筴"=>"䇲",
+"箋"=>"笺",
+"箏"=>"筝",
+"節"=>"节",
+"範"=>"范",
+"築"=>"筑",
+"篋"=>"箧",
+"篔"=>"筼",
+"篤"=>"笃",
+"篩"=>"筛",
+"篳"=>"筚",
+"簀"=>"箦",
+"簍"=>"篓",
+"簞"=>"箪",
+"簡"=>"简",
+"簣"=>"篑",
+"簫"=>"箫",
+"簹"=>"筜",
+"簽"=>"签",
+"簾"=>"帘",
+"籃"=>"篮",
+"籌"=>"筹",
+"籖"=>"签",
+"籙"=>"箓",
+"籜"=>"箨",
+"籟"=>"籁",
+"籠"=>"笼",
+"籩"=>"笾",
+"籪"=>"簖",
+"籬"=>"篱",
+"籮"=>"箩",
+"籲"=>"吁",
+"粵"=>"粤",
+"糝"=>"糁",
+"糞"=>"粪",
+"糧"=>"粮",
+"糰"=>"团",
+"糲"=>"粝",
+"糴"=>"籴",
+"糶"=>"粜",
+"糹"=>"纟",
+"糾"=>"纠",
+"紀"=>"纪",
+"紂"=>"纣",
+"約"=>"约",
+"紅"=>"红",
+"紆"=>"纡",
+"紇"=>"纥",
+"紈"=>"纨",
+"紉"=>"纫",
+"紋"=>"纹",
+"納"=>"纳",
+"紐"=>"纽",
+"紓"=>"纾",
+"純"=>"纯",
+"紕"=>"纰",
+"紖"=>"纼",
+"紗"=>"纱",
+"紘"=>"纮",
+"紙"=>"纸",
+"級"=>"级",
+"紛"=>"纷",
+"紜"=>"纭",
+"紝"=>"纴",
+"紡"=>"纺",
+"紬"=>"䌷",
+"細"=>"细",
+"紱"=>"绂",
+"紲"=>"绁",
+"紳"=>"绅",
+"紵"=>"纻",
+"紹"=>"绍",
+"紺"=>"绀",
+"紼"=>"绋",
+"紿"=>"绐",
+"絀"=>"绌",
+"終"=>"终",
+"組"=>"组",
+"絅"=>"䌹",
+"絆"=>"绊",
+"絎"=>"绗",
+"結"=>"结",
+"絕"=>"绝",
+"絛"=>"绦",
+"絝"=>"绔",
+"絞"=>"绞",
+"絡"=>"络",
+"絢"=>"绚",
+"給"=>"给",
+"絨"=>"绒",
+"絰"=>"绖",
+"統"=>"统",
+"絲"=>"丝",
+"絳"=>"绛",
+"絶"=>"绝",
+"絹"=>"绢",
+"綁"=>"绑",
+"綃"=>"绡",
+"綆"=>"绠",
+"綈"=>"绨",
+"綉"=>"绣",
+"綌"=>"绤",
+"綏"=>"绥",
+"經"=>"经",
+"綜"=>"综",
+"綞"=>"缍",
+"綠"=>"绿",
+"綢"=>"绸",
+"綣"=>"绻",
+"綫"=>"线",
+"綬"=>"绶",
+"維"=>"维",
+"綯"=>"绹",
+"綰"=>"绾",
+"綱"=>"纲",
+"網"=>"网",
+"綳"=>"绷",
+"綴"=>"缀",
+"綸"=>"纶",
+"綹"=>"绺",
+"綺"=>"绮",
+"綻"=>"绽",
+"綽"=>"绰",
+"綾"=>"绫",
+"綿"=>"绵",
+"緄"=>"绲",
+"緇"=>"缁",
+"緊"=>"紧",
+"緋"=>"绯",
+"緑"=>"绿",
+"緒"=>"绪",
+"緓"=>"绬",
+"緔"=>"绱",
+"緗"=>"缃",
+"緘"=>"缄",
+"緙"=>"缂",
+"線"=>"线",
+"緝"=>"缉",
+"緞"=>"缎",
+"締"=>"缔",
+"緡"=>"缗",
+"緣"=>"缘",
+"緦"=>"缌",
+"編"=>"编",
+"緩"=>"缓",
+"緬"=>"缅",
+"緯"=>"纬",
+"緱"=>"缑",
+"緲"=>"缈",
+"練"=>"练",
+"緶"=>"缏",
+"緹"=>"缇",
+"緻"=>"致",
+"縈"=>"萦",
+"縉"=>"缙",
+"縊"=>"缢",
+"縋"=>"缒",
+"縐"=>"绉",
+"縑"=>"缣",
+"縕"=>"缊",
+"縗"=>"缞",
+"縛"=>"缚",
+"縝"=>"缜",
+"縞"=>"缟",
+"縟"=>"缛",
+"縣"=>"县",
+"縧"=>"绦",
+"縫"=>"缝",
+"縭"=>"缡",
+"縮"=>"缩",
+"縱"=>"纵",
+"縲"=>"缧",
+"縳"=>"䌸",
+"縴"=>"纤",
+"縵"=>"缦",
+"縶"=>"絷",
+"縷"=>"缕",
+"縹"=>"缥",
+"總"=>"总",
+"績"=>"绩",
+"繃"=>"绷",
+"繅"=>"缫",
+"繆"=>"缪",
+"繒"=>"缯",
+"織"=>"织",
+"繕"=>"缮",
+"繚"=>"缭",
+"繞"=>"绕",
+"繡"=>"绣",
+"繢"=>"缋",
+"繩"=>"绳",
+"繪"=>"绘",
+"繫"=>"系",
+"繭"=>"茧",
+"繮"=>"缰",
+"繯"=>"缳",
+"繰"=>"缲",
+"繳"=>"缴",
+"繸"=>"䍁",
+"繹"=>"绎",
+"繼"=>"继",
+"繽"=>"缤",
+"繾"=>"缱",
+"纈"=>"缬",
+"纊"=>"纩",
+"續"=>"续",
+"纍"=>"累",
+"纏"=>"缠",
+"纓"=>"缨",
+"纔"=>"才",
+"纖"=>"纤",
+"纘"=>"缵",
+"纜"=>"缆",
+"缽"=>"钵",
+"罈"=>"坛",
+"罌"=>"罂",
+"罰"=>"罚",
+"罵"=>"骂",
+"罷"=>"罢",
+"羅"=>"罗",
+"羆"=>"罴",
+"羈"=>"羁",
+"羋"=>"芈",
+"羥"=>"羟",
+"義"=>"义",
+"習"=>"习",
+"翹"=>"翘",
+"耬"=>"耧",
+"耮"=>"耢",
+"聖"=>"圣",
+"聞"=>"闻",
+"聯"=>"联",
+"聰"=>"聪",
+"聲"=>"声",
+"聳"=>"耸",
+"聵"=>"聩",
+"聶"=>"聂",
+"職"=>"职",
+"聹"=>"聍",
+"聽"=>"听",
+"聾"=>"聋",
+"肅"=>"肃",
+"胜"=>"胜",
+"脅"=>"胁",
+"脈"=>"脉",
+"脛"=>"胫",
+"脫"=>"脱",
+"脹"=>"胀",
+"腊"=>"腊",
+"腎"=>"肾",
+"腖"=>"胨",
+"腡"=>"脶",
+"腦"=>"脑",
+"腫"=>"肿",
+"腳"=>"脚",
+"腸"=>"肠",
+"膃"=>"腽",
+"膚"=>"肤",
+"膠"=>"胶",
+"膩"=>"腻",
+"膽"=>"胆",
+"膾"=>"脍",
+"膿"=>"脓",
+"臉"=>"脸",
+"臍"=>"脐",
+"臏"=>"膑",
+"臘"=>"腊",
+"臚"=>"胪",
+"臟"=>"脏",
+"臠"=>"脔",
+"臢"=>"臜",
+"臥"=>"卧",
+"臨"=>"临",
+"臺"=>"台",
+"與"=>"与",
+"興"=>"兴",
+"舉"=>"举",
+"舊"=>"旧",
+"艙"=>"舱",
+"艤"=>"舣",
+"艦"=>"舰",
+"艫"=>"舻",
+"艱"=>"艰",
+"艷"=>"艳",
+"芻"=>"刍",
+"苎"=>"苧",
+"苧"=>"苎",
+"苹"=>"苹",
+"范"=>"范",
+"茲"=>"兹",
+"荊"=>"荆",
+"莊"=>"庄",
+"莖"=>"茎",
+"莢"=>"荚",
+"莧"=>"苋",
+"華"=>"华",
+"萇"=>"苌",
+"萊"=>"莱",
+"萬"=>"万",
+"萵"=>"莴",
+"葉"=>"叶",
+"葒"=>"荭",
+"著"=>"着",
+"葤"=>"荮",
+"葦"=>"苇",
+"葯"=>"药",
+"葷"=>"荤",
+"蒓"=>"莼",
+"蒔"=>"莳",
+"蒞"=>"莅",
+"蒼"=>"苍",
+"蓀"=>"荪",
+"蓋"=>"盖",
+"蓮"=>"莲",
+"蓯"=>"苁",
+"蓴"=>"莼",
+"蓽"=>"荜",
+"蔔"=>"卜",
+"蔞"=>"蒌",
+"蔣"=>"蒋",
+"蔥"=>"葱",
+"蔦"=>"茑",
+"蔭"=>"荫",
+"蕁"=>"荨",
+"蕆"=>"蒇",
+"蕎"=>"荞",
+"蕒"=>"荬",
+"蕓"=>"芸",
+"蕕"=>"莸",
+"蕘"=>"荛",
+"蕢"=>"蒉",
+"蕩"=>"荡",
+"蕪"=>"芜",
+"蕭"=>"萧",
+"蕷"=>"蓣",
+"薀"=>"蕰",
+"薈"=>"荟",
+"薊"=>"蓟",
+"薌"=>"芗",
+"薔"=>"蔷",
+"薘"=>"荙",
+"薟"=>"莶",
+"薦"=>"荐",
+"薩"=>"萨",
+"薴"=>"苧",
+"薺"=>"荠",
+"藉"=>"借",
+"藍"=>"蓝",
+"藎"=>"荩",
+"藝"=>"艺",
+"藥"=>"药",
+"藪"=>"薮",
+"藴"=>"蕴",
+"藶"=>"苈",
+"藹"=>"蔼",
+"藺"=>"蔺",
+"蘄"=>"蕲",
+"蘆"=>"芦",
+"蘇"=>"苏",
+"蘊"=>"蕴",
+"蘋"=>"苹",
+"蘚"=>"藓",
+"蘞"=>"蔹",
+"蘢"=>"茏",
+"蘭"=>"兰",
+"蘺"=>"蓠",
+"蘿"=>"萝",
+"虆"=>"蔂",
+"處"=>"处",
+"虛"=>"虚",
+"虜"=>"虏",
+"號"=>"号",
+"虧"=>"亏",
+"虫"=>"虫",
+"虯"=>"虬",
+"蛺"=>"蛱",
+"蛻"=>"蜕",
+"蜆"=>"蚬",
+"蜡"=>"蜡",
+"蝕"=>"蚀",
+"蝟"=>"猬",
+"蝦"=>"虾",
+"蝸"=>"蜗",
+"螄"=>"蛳",
+"螞"=>"蚂",
+"螢"=>"萤",
+"螻"=>"蝼",
+"螿"=>"螀",
+"蟄"=>"蛰",
+"蟈"=>"蝈",
+"蟎"=>"螨",
+"蟣"=>"虮",
+"蟬"=>"蝉",
+"蟯"=>"蛲",
+"蟲"=>"虫",
+"蟶"=>"蛏",
+"蟻"=>"蚁",
+"蠅"=>"蝇",
+"蠆"=>"虿",
+"蠐"=>"蛴",
+"蠑"=>"蝾",
+"蠟"=>"蜡",
+"蠣"=>"蛎",
+"蠨"=>"蟏",
+"蠱"=>"蛊",
+"蠶"=>"蚕",
+"蠻"=>"蛮",
+"衆"=>"众",
+"衊"=>"蔑",
+"術"=>"术",
+"衕"=>"同",
+"衚"=>"胡",
+"衛"=>"卫",
+"衝"=>"冲",
+"衹"=>"只",
+"袞"=>"衮",
+"裊"=>"袅",
+"裏"=>"里",
+"補"=>"补",
+"裝"=>"装",
+"裡"=>"里",
+"製"=>"制",
+"複"=>"复",
+"褌"=>"裈",
+"褘"=>"袆",
+"褲"=>"裤",
+"褳"=>"裢",
+"褸"=>"褛",
+"褻"=>"亵",
+"襇"=>"裥",
+"襏"=>"袯",
+"襖"=>"袄",
+"襝"=>"裣",
+"襠"=>"裆",
+"襤"=>"褴",
+"襪"=>"袜",
+"襯"=>"衬",
+"襲"=>"袭",
+"覆"=>"复",
+"見"=>"见",
+"覎"=>"觃",
+"規"=>"规",
+"覓"=>"觅",
+"視"=>"视",
+"覘"=>"觇",
+"覡"=>"觋",
+"覥"=>"觍",
+"覦"=>"觎",
+"親"=>"亲",
+"覬"=>"觊",
+"覯"=>"觏",
+"覲"=>"觐",
+"覷"=>"觑",
+"覺"=>"觉",
+"覽"=>"览",
+"覿"=>"觌",
+"觀"=>"观",
+"觴"=>"觞",
+"觶"=>"觯",
+"觸"=>"触",
+"訁"=>"讠",
+"訂"=>"订",
+"訃"=>"讣",
+"計"=>"计",
+"訊"=>"讯",
+"訌"=>"讧",
+"討"=>"讨",
+"訐"=>"讦",
+"訒"=>"讱",
+"訓"=>"训",
+"訕"=>"讪",
+"訖"=>"讫",
+"託"=>"讬",
+"記"=>"记",
+"訛"=>"讹",
+"訝"=>"讶",
+"訟"=>"讼",
+"訢"=>"䜣",
+"訣"=>"诀",
+"訥"=>"讷",
+"訩"=>"讻",
+"訪"=>"访",
+"設"=>"设",
+"許"=>"许",
+"訴"=>"诉",
+"訶"=>"诃",
+"診"=>"诊",
+"註"=>"注",
+"詁"=>"诂",
+"詆"=>"诋",
+"詎"=>"讵",
+"詐"=>"诈",
+"詒"=>"诒",
+"詔"=>"诏",
+"評"=>"评",
+"詖"=>"诐",
+"詗"=>"诇",
+"詘"=>"诎",
+"詛"=>"诅",
+"詞"=>"词",
+"詠"=>"咏",
+"詡"=>"诩",
+"詢"=>"询",
+"詣"=>"诣",
+"試"=>"试",
+"詩"=>"诗",
+"詫"=>"诧",
+"詬"=>"诟",
+"詭"=>"诡",
+"詮"=>"诠",
+"詰"=>"诘",
+"話"=>"话",
+"該"=>"该",
+"詳"=>"详",
+"詵"=>"诜",
+"詼"=>"诙",
+"詿"=>"诖",
+"誄"=>"诔",
+"誅"=>"诛",
+"誆"=>"诓",
+"誇"=>"夸",
+"誌"=>"志",
+"認"=>"认",
+"誑"=>"诳",
+"誒"=>"诶",
+"誕"=>"诞",
+"誘"=>"诱",
+"誚"=>"诮",
+"語"=>"语",
+"誠"=>"诚",
+"誡"=>"诫",
+"誣"=>"诬",
+"誤"=>"误",
+"誥"=>"诰",
+"誦"=>"诵",
+"誨"=>"诲",
+"說"=>"说",
+"説"=>"说",
+"誰"=>"谁",
+"課"=>"课",
+"誶"=>"谇",
+"誹"=>"诽",
+"誼"=>"谊",
+"誾"=>"訚",
+"調"=>"调",
+"諂"=>"谄",
+"諄"=>"谆",
+"談"=>"谈",
+"諉"=>"诿",
+"請"=>"请",
+"諍"=>"诤",
+"諏"=>"诹",
+"諑"=>"诼",
+"諒"=>"谅",
+"論"=>"论",
+"諗"=>"谂",
+"諛"=>"谀",
+"諜"=>"谍",
+"諝"=>"谞",
+"諞"=>"谝",
+"諢"=>"诨",
+"諤"=>"谔",
+"諦"=>"谛",
+"諧"=>"谐",
+"諫"=>"谏",
+"諭"=>"谕",
+"諮"=>"谘",
+"諱"=>"讳",
+"諳"=>"谙",
+"諶"=>"谌",
+"諷"=>"讽",
+"諸"=>"诸",
+"諺"=>"谚",
+"諼"=>"谖",
+"諾"=>"诺",
+"謀"=>"谋",
+"謁"=>"谒",
+"謂"=>"谓",
+"謄"=>"誊",
+"謅"=>"诌",
+"謊"=>"谎",
+"謎"=>"谜",
+"謐"=>"谧",
+"謔"=>"谑",
+"謖"=>"谡",
+"謗"=>"谤",
+"謙"=>"谦",
+"謚"=>"谥",
+"講"=>"讲",
+"謝"=>"谢",
+"謠"=>"谣",
+"謡"=>"谣",
+"謨"=>"谟",
+"謫"=>"谪",
+"謬"=>"谬",
+"謭"=>"谫",
+"謳"=>"讴",
+"謹"=>"谨",
+"謾"=>"谩",
+"證"=>"证",
+"譎"=>"谲",
+"譏"=>"讥",
+"譖"=>"谮",
+"識"=>"识",
+"譙"=>"谯",
+"譚"=>"谭",
+"譜"=>"谱",
+"譫"=>"谵",
+"譯"=>"译",
+"議"=>"议",
+"譴"=>"谴",
+"護"=>"护",
+"譸"=>"诪",
+"譽"=>"誉",
+"譾"=>"谫",
+"讀"=>"读",
+"變"=>"变",
+"讎"=>"仇",
+"讎"=>"雠",
+"讒"=>"谗",
+"讓"=>"让",
+"讕"=>"谰",
+"讖"=>"谶",
+"讜"=>"谠",
+"讞"=>"谳",
+"豈"=>"岂",
+"豎"=>"竖",
+"豐"=>"丰",
+"豬"=>"猪",
+"豶"=>"豮",
+"貓"=>"猫",
+"貝"=>"贝",
+"貞"=>"贞",
+"貟"=>"贠",
+"負"=>"负",
+"財"=>"财",
+"貢"=>"贡",
+"貧"=>"贫",
+"貨"=>"货",
+"販"=>"贩",
+"貪"=>"贪",
+"貫"=>"贯",
+"責"=>"责",
+"貯"=>"贮",
+"貰"=>"贳",
+"貲"=>"赀",
+"貳"=>"贰",
+"貴"=>"贵",
+"貶"=>"贬",
+"買"=>"买",
+"貸"=>"贷",
+"貺"=>"贶",
+"費"=>"费",
+"貼"=>"贴",
+"貽"=>"贻",
+"貿"=>"贸",
+"賀"=>"贺",
+"賁"=>"贲",
+"賂"=>"赂",
+"賃"=>"赁",
+"賄"=>"贿",
+"賅"=>"赅",
+"資"=>"资",
+"賈"=>"贾",
+"賊"=>"贼",
+"賑"=>"赈",
+"賒"=>"赊",
+"賓"=>"宾",
+"賕"=>"赇",
+"賙"=>"赒",
+"賚"=>"赉",
+"賜"=>"赐",
+"賞"=>"赏",
+"賠"=>"赔",
+"賡"=>"赓",
+"賢"=>"贤",
+"賣"=>"卖",
+"賤"=>"贱",
+"賦"=>"赋",
+"賧"=>"赕",
+"質"=>"质",
+"賫"=>"赍",
+"賬"=>"账",
+"賭"=>"赌",
+"賴"=>"赖",
+"賵"=>"赗",
+"賺"=>"赚",
+"賻"=>"赙",
+"購"=>"购",
+"賽"=>"赛",
+"賾"=>"赜",
+"贄"=>"贽",
+"贅"=>"赘",
+"贇"=>"赟",
+"贈"=>"赠",
+"贊"=>"赞",
+"贋"=>"赝",
+"贍"=>"赡",
+"贏"=>"赢",
+"贐"=>"赆",
+"贓"=>"赃",
+"贔"=>"赑",
+"贖"=>"赎",
+"贗"=>"赝",
+"贛"=>"赣",
+"贜"=>"赃",
+"赬"=>"赪",
+"趕"=>"赶",
+"趙"=>"赵",
+"趨"=>"趋",
+"趲"=>"趱",
+"跡"=>"迹",
+"踐"=>"践",
+"踴"=>"踊",
+"蹌"=>"跄",
+"蹕"=>"跸",
+"蹣"=>"蹒",
+"蹤"=>"踪",
+"蹺"=>"跷",
+"躂"=>"跶",
+"躉"=>"趸",
+"躊"=>"踌",
+"躋"=>"跻",
+"躍"=>"跃",
+"躑"=>"踯",
+"躒"=>"跞",
+"躓"=>"踬",
+"躕"=>"蹰",
+"躚"=>"跹",
+"躡"=>"蹑",
+"躥"=>"蹿",
+"躦"=>"躜",
+"躪"=>"躏",
+"軀"=>"躯",
+"車"=>"车",
+"軋"=>"轧",
+"軌"=>"轨",
+"軍"=>"军",
+"軑"=>"轪",
+"軒"=>"轩",
+"軔"=>"轫",
+"軛"=>"轭",
+"軟"=>"软",
+"軤"=>"轷",
+"軫"=>"轸",
+"軲"=>"轱",
+"軸"=>"轴",
+"軹"=>"轵",
+"軺"=>"轺",
+"軻"=>"轲",
+"軼"=>"轶",
+"軾"=>"轼",
+"較"=>"较",
+"輅"=>"辂",
+"輇"=>"辁",
+"輈"=>"辀",
+"載"=>"载",
+"輊"=>"轾",
+"輒"=>"辄",
+"輓"=>"挽",
+"輔"=>"辅",
+"輕"=>"轻",
+"輛"=>"辆",
+"輜"=>"辎",
+"輝"=>"辉",
+"輞"=>"辋",
+"輟"=>"辍",
+"輥"=>"辊",
+"輦"=>"辇",
+"輩"=>"辈",
+"輪"=>"轮",
+"輬"=>"辌",
+"輯"=>"辑",
+"輳"=>"辏",
+"輸"=>"输",
+"輻"=>"辐",
+"輾"=>"辗",
+"輿"=>"舆",
+"轀"=>"辒",
+"轂"=>"毂",
+"轄"=>"辖",
+"轅"=>"辕",
+"轆"=>"辘",
+"轉"=>"转",
+"轍"=>"辙",
+"轎"=>"轿",
+"轔"=>"辚",
+"轟"=>"轰",
+"轡"=>"辔",
+"轢"=>"轹",
+"轤"=>"轳",
+"辟"=>"辟",
+"辦"=>"办",
+"辭"=>"辞",
+"辮"=>"辫",
+"辯"=>"辩",
+"農"=>"农",
+"迴"=>"回",
+"适"=>"适",
+"逕"=>"迳",
+"這"=>"这",
+"連"=>"连",
+"週"=>"周",
+"進"=>"进",
+"遊"=>"游",
+"運"=>"运",
+"過"=>"过",
+"達"=>"达",
+"違"=>"违",
+"遙"=>"遥",
+"遜"=>"逊",
+"遞"=>"递",
+"遠"=>"远",
+"適"=>"适",
+"遲"=>"迟",
+"遷"=>"迁",
+"選"=>"选",
+"遺"=>"遗",
+"遼"=>"辽",
+"邁"=>"迈",
+"還"=>"还",
+"邇"=>"迩",
+"邊"=>"边",
+"邏"=>"逻",
+"邐"=>"逦",
+"郁"=>"郁",
+"郟"=>"郏",
+"郵"=>"邮",
+"鄆"=>"郓",
+"鄉"=>"乡",
+"鄒"=>"邹",
+"鄔"=>"邬",
+"鄖"=>"郧",
+"鄧"=>"邓",
+"鄭"=>"郑",
+"鄰"=>"邻",
+"鄲"=>"郸",
+"鄴"=>"邺",
+"鄶"=>"郐",
+"鄺"=>"邝",
+"酇"=>"酂",
+"酈"=>"郦",
+"醖"=>"酝",
+"醜"=>"丑",
+"醞"=>"酝",
+"醫"=>"医",
+"醬"=>"酱",
+"醱"=>"酦",
+"釀"=>"酿",
+"釁"=>"衅",
+"釃"=>"酾",
+"釅"=>"酽",
+"采"=>"采",
+"釋"=>"释",
+"釐"=>"厘",
+"釒"=>"钅",
+"釓"=>"钆",
+"釔"=>"钇",
+"釕"=>"钌",
+"釗"=>"钊",
+"釘"=>"钉",
+"釙"=>"钋",
+"針"=>"针",
+"釣"=>"钓",
+"釤"=>"钐",
+"釧"=>"钏",
+"釩"=>"钒",
+"釵"=>"钗",
+"釷"=>"钍",
+"釹"=>"钕",
+"釺"=>"钎",
+"鈀"=>"钯",
+"鈁"=>"钫",
+"鈃"=>"钘",
+"鈄"=>"钭",
+"鈈"=>"钚",
+"鈉"=>"钠",
+"鈍"=>"钝",
+"鈎"=>"钩",
+"鈐"=>"钤",
+"鈑"=>"钣",
+"鈒"=>"钑",
+"鈔"=>"钞",
+"鈕"=>"钮",
+"鈞"=>"钧",
+"鈣"=>"钙",
+"鈥"=>"钬",
+"鈦"=>"钛",
+"鈧"=>"钪",
+"鈮"=>"铌",
+"鈰"=>"铈",
+"鈳"=>"钶",
+"鈴"=>"铃",
+"鈷"=>"钴",
+"鈸"=>"钹",
+"鈹"=>"铍",
+"鈺"=>"钰",
+"鈽"=>"钸",
+"鈾"=>"铀",
+"鈿"=>"钿",
+"鉀"=>"钾",
+"鉅"=>"钜",
+"鉈"=>"铊",
+"鉉"=>"铉",
+"鉋"=>"铇",
+"鉍"=>"铋",
+"鉑"=>"铂",
+"鉕"=>"钷",
+"鉗"=>"钳",
+"鉚"=>"铆",
+"鉛"=>"铅",
+"鉞"=>"钺",
+"鉢"=>"钵",
+"鉤"=>"钩",
+"鉦"=>"钲",
+"鉬"=>"钼",
+"鉭"=>"钽",
+"鉶"=>"铏",
+"鉸"=>"铰",
+"鉺"=>"铒",
+"鉻"=>"铬",
+"鉿"=>"铪",
+"銀"=>"银",
+"銃"=>"铳",
+"銅"=>"铜",
+"銍"=>"铚",
+"銑"=>"铣",
+"銓"=>"铨",
+"銖"=>"铢",
+"銘"=>"铭",
+"銚"=>"铫",
+"銛"=>"铦",
+"銜"=>"衔",
+"銠"=>"铑",
+"銣"=>"铷",
+"銥"=>"铱",
+"銦"=>"铟",
+"銨"=>"铵",
+"銩"=>"铥",
+"銪"=>"铕",
+"銫"=>"铯",
+"銬"=>"铐",
+"銱"=>"铞",
+"銳"=>"锐",
+"銷"=>"销",
+"銹"=>"锈",
+"銻"=>"锑",
+"銼"=>"锉",
+"鋁"=>"铝",
+"鋃"=>"锒",
+"鋅"=>"锌",
+"鋇"=>"钡",
+"鋌"=>"铤",
+"鋏"=>"铗",
+"鋒"=>"锋",
+"鋙"=>"铻",
+"鋝"=>"锊",
+"鋟"=>"锓",
+"鋣"=>"铘",
+"鋤"=>"锄",
+"鋥"=>"锃",
+"鋦"=>"锔",
+"鋨"=>"锇",
+"鋩"=>"铓",
+"鋪"=>"铺",
+"鋭"=>"锐",
+"鋮"=>"铖",
+"鋯"=>"锆",
+"鋰"=>"锂",
+"鋱"=>"铽",
+"鋶"=>"锍",
+"鋸"=>"锯",
+"鋼"=>"钢",
+"錁"=>"锞",
+"錄"=>"录",
+"錆"=>"锖",
+"錇"=>"锫",
+"錈"=>"锩",
+"錏"=>"铔",
+"錐"=>"锥",
+"錒"=>"锕",
+"錕"=>"锟",
+"錘"=>"锤",
+"錙"=>"锱",
+"錚"=>"铮",
+"錛"=>"锛",
+"錟"=>"锬",
+"錠"=>"锭",
+"錡"=>"锜",
+"錢"=>"钱",
+"錦"=>"锦",
+"錨"=>"锚",
+"錩"=>"锠",
+"錫"=>"锡",
+"錮"=>"锢",
+"錯"=>"错",
+"録"=>"录",
+"錳"=>"锰",
+"錶"=>"表",
+"錸"=>"铼",
+"鍀"=>"锝",
+"鍁"=>"锨",
+"鍃"=>"锪",
+"鍆"=>"钔",
+"鍇"=>"锴",
+"鍈"=>"锳",
+"鍋"=>"锅",
+"鍍"=>"镀",
+"鍔"=>"锷",
+"鍘"=>"铡",
+"鍚"=>"钖",
+"鍛"=>"锻",
+"鍠"=>"锽",
+"鍤"=>"锸",
+"鍥"=>"锲",
+"鍩"=>"锘",
+"鍬"=>"锹",
+"鍰"=>"锾",
+"鍵"=>"键",
+"鍶"=>"锶",
+"鍺"=>"锗",
+"鍾"=>"钟",
+"鎂"=>"镁",
+"鎄"=>"锿",
+"鎇"=>"镅",
+"鎊"=>"镑",
+"鎔"=>"镕",
+"鎖"=>"锁",
+"鎘"=>"镉",
+"鎛"=>"镈",
+"鎡"=>"镃",
+"鎢"=>"钨",
+"鎣"=>"蓥",
+"鎦"=>"镏",
+"鎧"=>"铠",
+"鎩"=>"铩",
+"鎪"=>"锼",
+"鎬"=>"镐",
+"鎮"=>"镇",
+"鎰"=>"镒",
+"鎲"=>"镋",
+"鎳"=>"镍",
+"鎵"=>"镓",
+"鎸"=>"镌",
+"鎿"=>"镎",
+"鏃"=>"镞",
+"鏇"=>"镟",
+"鏈"=>"链",
+"鏌"=>"镆",
+"鏍"=>"镙",
+"鏐"=>"镠",
+"鏑"=>"镝",
+"鏗"=>"铿",
+"鏘"=>"锵",
+"鏜"=>"镗",
+"鏝"=>"镘",
+"鏞"=>"镛",
+"鏟"=>"铲",
+"鏡"=>"镜",
+"鏢"=>"镖",
+"鏤"=>"镂",
+"鏨"=>"錾",
+"鏰"=>"镚",
+"鏵"=>"铧",
+"鏷"=>"镤",
+"鏹"=>"镪",
+"鏽"=>"锈",
+"鐃"=>"铙",
+"鐋"=>"铴",
+"鐐"=>"镣",
+"鐒"=>"铹",
+"鐓"=>"镦",
+"鐔"=>"镡",
+"鐘"=>"钟",
+"鐙"=>"镫",
+"鐝"=>"镢",
+"鐠"=>"镨",
+"鐦"=>"锎",
+"鐧"=>"锏",
+"鐨"=>"镄",
+"鐫"=>"镌",
+"鐮"=>"镰",
+"鐲"=>"镯",
+"鐳"=>"镭",
+"鐵"=>"铁",
+"鐶"=>"镮",
+"鐸"=>"铎",
+"鐺"=>"铛",
+"鐿"=>"镱",
+"鑄"=>"铸",
+"鑊"=>"镬",
+"鑌"=>"镔",
+"鑒"=>"鉴",
+"鑔"=>"镲",
+"鑕"=>"锧",
+"鑞"=>"镴",
+"鑠"=>"铄",
+"鑣"=>"镳",
+"鑥"=>"镥",
+"鑭"=>"镧",
+"鑰"=>"钥",
+"鑱"=>"镵",
+"鑲"=>"镶",
+"鑷"=>"镊",
+"鑹"=>"镩",
+"鑼"=>"锣",
+"鑽"=>"钻",
+"鑾"=>"銮",
+"鑿"=>"凿",
+"钁"=>"镢",
+"镟"=>"旋",
+"長"=>"长",
+"門"=>"门",
+"閂"=>"闩",
+"閃"=>"闪",
+"閆"=>"闫",
+"閈"=>"闬",
+"閉"=>"闭",
+"開"=>"开",
+"閌"=>"闶",
+"閎"=>"闳",
+"閏"=>"闰",
+"閑"=>"闲",
+"間"=>"间",
+"閔"=>"闵",
+"閘"=>"闸",
+"閡"=>"阂",
+"閣"=>"阁",
+"閤"=>"合",
+"閥"=>"阀",
+"閨"=>"闺",
+"閩"=>"闽",
+"閫"=>"阃",
+"閬"=>"阆",
+"閭"=>"闾",
+"閱"=>"阅",
+"閲"=>"阅",
+"閶"=>"阊",
+"閹"=>"阉",
+"閻"=>"阎",
+"閼"=>"阏",
+"閽"=>"阍",
+"閾"=>"阈",
+"閿"=>"阌",
+"闃"=>"阒",
+"闆"=>"板",
+"闈"=>"闱",
+"闊"=>"阔",
+"闋"=>"阕",
+"闌"=>"阑",
+"闍"=>"阇",
+"闐"=>"阗",
+"闒"=>"阘",
+"闓"=>"闿",
+"闔"=>"阖",
+"闕"=>"阙",
+"闖"=>"闯",
+"關"=>"关",
+"闞"=>"阚",
+"闠"=>"阓",
+"闡"=>"阐",
+"闤"=>"阛",
+"闥"=>"闼",
+"阪"=>"坂",
+"陘"=>"陉",
+"陝"=>"陕",
+"陣"=>"阵",
+"陰"=>"阴",
+"陳"=>"陈",
+"陸"=>"陆",
+"陽"=>"阳",
+"隉"=>"陧",
+"隊"=>"队",
+"階"=>"阶",
+"隕"=>"陨",
+"際"=>"际",
+"隨"=>"随",
+"險"=>"险",
+"隱"=>"隐",
+"隴"=>"陇",
+"隸"=>"隶",
+"隻"=>"只",
+"雋"=>"隽",
+"雖"=>"虽",
+"雙"=>"双",
+"雛"=>"雏",
+"雜"=>"杂",
+"雞"=>"鸡",
+"離"=>"离",
+"難"=>"难",
+"雲"=>"云",
+"電"=>"电",
+"霢"=>"霡",
+"霧"=>"雾",
+"霽"=>"霁",
+"靂"=>"雳",
+"靄"=>"霭",
+"靈"=>"灵",
+"靚"=>"靓",
+"靜"=>"静",
+"靦"=>"腼",
+"靨"=>"靥",
+"鞀"=>"鼗",
+"鞏"=>"巩",
+"鞝"=>"绱",
+"鞦"=>"秋",
+"鞽"=>"鞒",
+"韁"=>"缰",
+"韃"=>"鞑",
+"韆"=>"千",
+"韉"=>"鞯",
+"韋"=>"韦",
+"韌"=>"韧",
+"韍"=>"韨",
+"韓"=>"韩",
+"韙"=>"韪",
+"韜"=>"韬",
+"韞"=>"韫",
+"韻"=>"韵",
+"響"=>"响",
+"頁"=>"页",
+"頂"=>"顶",
+"頃"=>"顷",
+"項"=>"项",
+"順"=>"顺",
+"頇"=>"顸",
+"須"=>"须",
+"頊"=>"顼",
+"頌"=>"颂",
+"頎"=>"颀",
+"頏"=>"颃",
+"預"=>"预",
+"頑"=>"顽",
+"頒"=>"颁",
+"頓"=>"顿",
+"頗"=>"颇",
+"領"=>"领",
+"頜"=>"颌",
+"頡"=>"颉",
+"頤"=>"颐",
+"頦"=>"颏",
+"頭"=>"头",
+"頮"=>"颒",
+"頰"=>"颊",
+"頲"=>"颋",
+"頴"=>"颕",
+"頷"=>"颔",
+"頸"=>"颈",
+"頹"=>"颓",
+"頻"=>"频",
+"頽"=>"颓",
+"顆"=>"颗",
+"題"=>"题",
+"額"=>"额",
+"顎"=>"颚",
+"顏"=>"颜",
+"顒"=>"颙",
+"顓"=>"颛",
+"顔"=>"颜",
+"願"=>"愿",
+"顙"=>"颡",
+"顛"=>"颠",
+"類"=>"类",
+"顢"=>"颟",
+"顥"=>"颢",
+"顧"=>"顾",
+"顫"=>"颤",
+"顬"=>"颥",
+"顯"=>"显",
+"顰"=>"颦",
+"顱"=>"颅",
+"顳"=>"颞",
+"顴"=>"颧",
+"風"=>"风",
+"颭"=>"飐",
+"颮"=>"飑",
+"颯"=>"飒",
+"颱"=>"台",
+"颳"=>"刮",
+"颶"=>"飓",
+"颸"=>"飔",
+"颺"=>"飏",
+"颻"=>"飖",
+"颼"=>"飕",
+"飀"=>"飗",
+"飄"=>"飘",
+"飆"=>"飙",
+"飈"=>"飚",
+"飛"=>"飞",
+"飠"=>"饣",
+"飢"=>"饥",
+"飣"=>"饤",
+"飥"=>"饦",
+"飩"=>"饨",
+"飪"=>"饪",
+"飫"=>"饫",
+"飭"=>"饬",
+"飯"=>"饭",
+"飲"=>"饮",
+"飴"=>"饴",
+"飼"=>"饲",
+"飽"=>"饱",
+"飾"=>"饰",
+"飿"=>"饳",
+"餃"=>"饺",
+"餄"=>"饸",
+"餅"=>"饼",
+"餉"=>"饷",
+"養"=>"养",
+"餌"=>"饵",
+"餎"=>"饹",
+"餏"=>"饻",
+"餑"=>"饽",
+"餒"=>"馁",
+"餓"=>"饿",
+"餕"=>"馂",
+"餖"=>"饾",
+"餚"=>"肴",
+"餛"=>"馄",
+"餜"=>"馃",
+"餞"=>"饯",
+"餡"=>"馅",
+"館"=>"馆",
+"餱"=>"糇",
+"餳"=>"饧",
+"餶"=>"馉",
+"餷"=>"馇",
+"餺"=>"馎",
+"餼"=>"饩",
+"餾"=>"馏",
+"餿"=>"馊",
+"饁"=>"馌",
+"饃"=>"馍",
+"饅"=>"馒",
+"饈"=>"馐",
+"饉"=>"馑",
+"饊"=>"馓",
+"饋"=>"馈",
+"饌"=>"馔",
+"饑"=>"饥",
+"饒"=>"饶",
+"饗"=>"飨",
+"饜"=>"餍",
+"饞"=>"馋",
+"饢"=>"馕",
+"馬"=>"马",
+"馭"=>"驭",
+"馮"=>"冯",
+"馱"=>"驮",
+"馳"=>"驰",
+"馴"=>"驯",
+"馹"=>"驲",
+"駁"=>"驳",
+"駐"=>"驻",
+"駑"=>"驽",
+"駒"=>"驹",
+"駔"=>"驵",
+"駕"=>"驾",
+"駘"=>"骀",
+"駙"=>"驸",
+"駛"=>"驶",
+"駝"=>"驼",
+"駟"=>"驷",
+"駡"=>"骂",
+"駢"=>"骈",
+"駭"=>"骇",
+"駰"=>"骃",
+"駱"=>"骆",
+"駸"=>"骎",
+"駿"=>"骏",
+"騁"=>"骋",
+"騂"=>"骍",
+"騅"=>"骓",
+"騌"=>"骔",
+"騍"=>"骒",
+"騎"=>"骑",
+"騏"=>"骐",
+"騖"=>"骛",
+"騙"=>"骗",
+"騤"=>"骙",
+"騫"=>"骞",
+"騭"=>"骘",
+"騮"=>"骝",
+"騰"=>"腾",
+"騶"=>"驺",
+"騷"=>"骚",
+"騸"=>"骟",
+"騾"=>"骡",
+"驀"=>"蓦",
+"驁"=>"骜",
+"驂"=>"骖",
+"驃"=>"骠",
+"驄"=>"骢",
+"驅"=>"驱",
+"驊"=>"骅",
+"驌"=>"骕",
+"驍"=>"骁",
+"驏"=>"骣",
+"驕"=>"骄",
+"驗"=>"验",
+"驚"=>"惊",
+"驛"=>"驿",
+"驟"=>"骤",
+"驢"=>"驴",
+"驤"=>"骧",
+"驥"=>"骥",
+"驦"=>"骦",
+"驪"=>"骊",
+"驫"=>"骉",
+"骯"=>"肮",
+"髏"=>"髅",
+"髒"=>"脏",
+"體"=>"体",
+"髕"=>"髌",
+"髖"=>"髋",
+"髮"=>"发",
+"鬆"=>"松",
+"鬍"=>"胡",
+"鬚"=>"须",
+"鬢"=>"鬓",
+"鬥"=>"斗",
+"鬧"=>"闹",
+"鬩"=>"阋",
+"鬮"=>"阄",
+"鬱"=>"郁",
+"魎"=>"魉",
+"魘"=>"魇",
+"魚"=>"鱼",
+"魛"=>"鱽",
+"魢"=>"鱾",
+"魨"=>"鲀",
+"魯"=>"鲁",
+"魴"=>"鲂",
+"魷"=>"鱿",
+"魺"=>"鲄",
+"鮁"=>"鲅",
+"鮃"=>"鲆",
+"鮊"=>"鲌",
+"鮋"=>"鲉",
+"鮍"=>"鲏",
+"鮎"=>"鲇",
+"鮐"=>"鲐",
+"鮑"=>"鲍",
+"鮒"=>"鲋",
+"鮓"=>"鲊",
+"鮚"=>"鲒",
+"鮜"=>"鲘",
+"鮝"=>"鲞",
+"鮞"=>"鲕",
+"鮦"=>"鲖",
+"鮪"=>"鲔",
+"鮫"=>"鲛",
+"鮭"=>"鲑",
+"鮮"=>"鲜",
+"鮳"=>"鲓",
+"鮶"=>"鲪",
+"鮺"=>"鲝",
+"鯀"=>"鲧",
+"鯁"=>"鲠",
+"鯇"=>"鲩",
+"鯉"=>"鲤",
+"鯊"=>"鲨",
+"鯒"=>"鲬",
+"鯔"=>"鲻",
+"鯕"=>"鲯",
+"鯖"=>"鲭",
+"鯗"=>"鲞",
+"鯛"=>"鲷",
+"鯝"=>"鲴",
+"鯡"=>"鲱",
+"鯢"=>"鲵",
+"鯤"=>"鲲",
+"鯧"=>"鲳",
+"鯨"=>"鲸",
+"鯪"=>"鲮",
+"鯫"=>"鲰",
+"鯴"=>"鲺",
+"鯷"=>"鳀",
+"鯽"=>"鲫",
+"鯿"=>"鳊",
+"鰁"=>"鳈",
+"鰂"=>"鲗",
+"鰃"=>"鳂",
+"鰈"=>"鲽",
+"鰉"=>"鳇",
+"鰍"=>"鳅",
+"鰏"=>"鲾",
+"鰐"=>"鳄",
+"鰒"=>"鳆",
+"鰓"=>"鳃",
+"鰜"=>"鳒",
+"鰟"=>"鳑",
+"鰠"=>"鳋",
+"鰣"=>"鲥",
+"鰥"=>"鳏",
+"鰨"=>"鳎",
+"鰩"=>"鳐",
+"鰭"=>"鳍",
+"鰮"=>"鳁",
+"鰱"=>"鲢",
+"鰲"=>"鳌",
+"鰳"=>"鳓",
+"鰵"=>"鳘",
+"鰷"=>"鲦",
+"鰹"=>"鲣",
+"鰺"=>"鲹",
+"鰻"=>"鳗",
+"鰼"=>"鳛",
+"鰾"=>"鳔",
+"鱂"=>"鳉",
+"鱅"=>"鳙",
+"鱈"=>"鳕",
+"鱉"=>"鳖",
+"鱒"=>"鳟",
+"鱔"=>"鳝",
+"鱖"=>"鳜",
+"鱗"=>"鳞",
+"鱘"=>"鲟",
+"鱝"=>"鲼",
+"鱟"=>"鲎",
+"鱠"=>"鲙",
+"鱣"=>"鳣",
+"鱤"=>"鳡",
+"鱧"=>"鳢",
+"鱨"=>"鲿",
+"鱭"=>"鲚",
+"鱯"=>"鳠",
+"鱷"=>"鳄",
+"鱸"=>"鲈",
+"鱺"=>"鲡",
+"䰾"=>"鲃",
+"䲁"=>"鳚",
+"鳥"=>"鸟",
+"鳧"=>"凫",
+"鳩"=>"鸠",
+"鳬"=>"凫",
+"鳲"=>"鸤",
+"鳳"=>"凤",
+"鳴"=>"鸣",
+"鳶"=>"鸢",
+"鳾"=>"䴓",
+"鴆"=>"鸩",
+"鴇"=>"鸨",
+"鴉"=>"鸦",
+"鴒"=>"鸰",
+"鴕"=>"鸵",
+"鴛"=>"鸳",
+"鴝"=>"鸲",
+"鴞"=>"鸮",
+"鴟"=>"鸱",
+"鴣"=>"鸪",
+"鴦"=>"鸯",
+"鴨"=>"鸭",
+"鴯"=>"鸸",
+"鴰"=>"鸹",
+"鴴"=>"鸻",
+"鴷"=>"䴕",
+"鴻"=>"鸿",
+"鴿"=>"鸽",
+"鵁"=>"䴔",
+"鵂"=>"鸺",
+"鵃"=>"鸼",
+"鵐"=>"鹀",
+"鵑"=>"鹃",
+"鵒"=>"鹆",
+"鵓"=>"鹁",
+"鵜"=>"鹈",
+"鵝"=>"鹅",
+"鵠"=>"鹄",
+"鵡"=>"鹉",
+"鵪"=>"鹌",
+"鵬"=>"鹏",
+"鵮"=>"鹐",
+"鵯"=>"鹎",
+"鵲"=>"鹊",
+"鵷"=>"鹓",
+"鵾"=>"鹍",
+"鶄"=>"䴖",
+"鶇"=>"鸫",
+"鶉"=>"鹑",
+"鶊"=>"鹒",
+"鶓"=>"鹋",
+"鶖"=>"鹙",
+"鶘"=>"鹕",
+"鶚"=>"鹗",
+"鶡"=>"鹖",
+"鶥"=>"鹛",
+"鶩"=>"鹜",
+"鶪"=>"䴗",
+"鶬"=>"鸧",
+"鶯"=>"莺",
+"鶲"=>"鹟",
+"鶴"=>"鹤",
+"鶹"=>"鹠",
+"鶺"=>"鹡",
+"鶻"=>"鹘",
+"鶼"=>"鹣",
+"鶿"=>"鹚",
+"鷀"=>"鹚",
+"鷁"=>"鹢",
+"鷂"=>"鹞",
+"鷄"=>"鸡",
+"鷈"=>"䴘",
+"鷊"=>"鹝",
+"鷓"=>"鹧",
+"鷖"=>"鹥",
+"鷗"=>"鸥",
+"鷙"=>"鸷",
+"鷚"=>"鹨",
+"鷥"=>"鸶",
+"鷦"=>"鹪",
+"鷫"=>"鹔",
+"鷯"=>"鹩",
+"鷲"=>"鹫",
+"鷳"=>"鹇",
+"鷸"=>"鹬",
+"鷹"=>"鹰",
+"鷺"=>"鹭",
+"鷽"=>"鸴",
+"鷿"=>"䴙",
+"鸇"=>"鹯",
+"鸌"=>"鹱",
+"鸏"=>"鹲",
+"鸕"=>"鸬",
+"鸘"=>"鹴",
+"鸚"=>"鹦",
+"鸛"=>"鹳",
+"鸝"=>"鹂",
+"鸞"=>"鸾",
+"鹵"=>"卤",
+"鹹"=>"咸",
+"鹺"=>"鹾",
+"鹽"=>"盐",
+"麗"=>"丽",
+"麥"=>"麦",
+"麩"=>"麸",
+"麯"=>"曲",
+"麵"=>"面",
+"麼"=>"么",
+"麽"=>"么",
+"黃"=>"黄",
+"黌"=>"黉",
+"點"=>"点",
+"黨"=>"党",
+"黲"=>"黪",
+"黴"=>"霉",
+"黶"=>"黡",
+"黷"=>"黩",
+"黽"=>"黾",
+"黿"=>"鼋",
+"鼉"=>"鼍",
+"鼕"=>"冬",
+"鼴"=>"鼹",
+"齊"=>"齐",
+"齋"=>"斋",
+"齎"=>"赍",
+"齏"=>"齑",
+"齒"=>"齿",
+"齔"=>"龀",
+"齕"=>"龁",
+"齗"=>"龂",
+"齙"=>"龅",
+"齜"=>"龇",
+"齟"=>"龃",
+"齠"=>"龆",
+"齡"=>"龄",
+"齣"=>"出",
+"齦"=>"龈",
+"齪"=>"龊",
+"齬"=>"龉",
+"齲"=>"龋",
+"齶"=>"腭",
+"齷"=>"龌",
+"龍"=>"龙",
+"龎"=>"厐",
+"龐"=>"庞",
+"龔"=>"龚",
+"龕"=>"龛",
+"龜"=>"龟",
+
+"幾畫" => 	"几画",
+"賣畫" => 	"卖画",
+"滷鹼" => 	"卤碱",
+"原畫" => 	"原画",
+"口鹼" => 	"口碱",
+"古畫" => 	"古画",
+"名畫" => 	"名画",
+"奇畫" => 	"奇画",
+"如畫" => 	"如画",
+"么 " => 	"幺 ",
+"么廝" => 	"幺厮",
+"么爹" => 	"幺爹",
+"弱鹼" => 	"弱碱",
+"彩畫" => 	"彩画",
+"所畫" => 	"所画",
+"扉畫" => 	"扉画",
+"教畫" => 	"教画",
+"楊么" => 	"杨幺",
+"水鹼" => 	"水碱",
+"洋鹼" => 	"洋碱",
+"炭畫" => 	"炭画",
+"畫一" => 	"画一",
+"畫上" => 	"画上",
+"畫下" => 	"画下",
+"畫中" => 	"画中",
+"畫供" => 	"画供",
+"畫兒" => 	"画儿",
+"畫具" => 	"画具",
+"畫出" => 	"画出",
+"畫史" => 	"画史",
+"畫品" => 	"画品",
+"畫商" => 	"画商",
+"畫圈" => 	"画圈",
+"畫境" => 	"画境",
+"畫工" => 	"画工",
+"畫帖" => 	"画帖",
+"畫幅" => 	"画幅",
+"畫意" => 	"画意",
+"畫成" => 	"画成",
+"畫景" => 	"画景",
+"畫本" => 	"画本",
+"畫架" => 	"画架",
+"畫框" => 	"画框",
+"畫法" => 	"画法",
+"畫王" => 	"画王",
+"畫界" => 	"画界",
+"畫符" => 	"画符",
+"畫紙" => 	"画纸",
+"畫線" => 	"画线",
+"畫航" => 	"画航",
+"畫舫" => 	"画舫",
+"畫虎" => 	"画虎",
+"畫論" => 	"画论",
+"畫譜" => 	"画谱",
+"畫象" => 	"画象",
+"畫質" => 	"画质",
+"畫貼" => 	"画贴",
+"畫軸" => 	"画轴",
+"畫頁" => 	"画页",
+"鹽鹼" => 	"盐碱",
+"鹼 " => 	"碱 ",
+"鹼基" => 	"碱基",
+"鹼度" => 	"碱度",
+"鹼水" => 	"碱水",
+"鹼熔" => 	"碱熔",
+"磁畫" => 	"磁画",
+"策畫" => 	"策画",
+"組畫" => 	"组画",
+"絹畫" => 	"绢画",
+"老么" => 	"老幺",
+"耐鹼" => 	"耐碱",
+"肉鹼" => 	"肉碱",
+"膠畫" => 	"胶画",
+"茶鹼" => 	"茶碱",
+"西畫" => 	"西画",
+"貼畫" => 	"贴画",
+"返鹼" => 	"返碱",
+"那麼" => 	"那麽",
+"鍾鍛" => 	"锺锻",
+"鍛鍾" => 	"锻锺",
+"雕畫" => 	"雕画",
+"鯰 " => 	"鲶 ",
+"麼 " => 	"麽 ",
+"三聯畫" => 	"三联画",
+"中國畫" => 	"中国画",
+"書畫 " => 	"书画 ",
+"書畫社" => 	"书画社",
+"五筆畫" => 	"五笔画",
+"作畫 " => 	"作画 ",
+"入畫 " => 	"入画 ",
+"寫生畫" => 	"写生画",
+"刻畫 " => 	"刻画 ",
+"動畫 " => 	"动画 ",
+"勾畫 " => 	"勾画 ",
+"單色畫" => 	"单色画",
+"卡通畫" => 	"卡通画",
+"國畫 " => 	"国画 ",
+"圖畫 " => 	"图画 ",
+"壁畫 " => 	"壁画 ",
+"字畫 " => 	"字画 ",
+"宣傳畫" => 	"宣传画",
+"工筆畫" => 	"工笔画",
+"年畫 " => 	"年画 ",
+"幽默畫" => 	"幽默画",
+"指畫 " => 	"指画 ",
+"描畫 " => 	"描画 ",
+"插畫 " => 	"插画 ",
+"擘畫 " => 	"擘画 ",
+"春畫 " => 	"春画 ",
+"木刻畫" => 	"木刻画",
+"機械畫" => 	"机械画",
+"比畫 " => 	"比画 ",
+"毛筆畫" => 	"毛笔画",
+"水粉畫" => 	"水粉画",
+"油畫 " => 	"油画 ",
+"海景畫" => 	"海景画",
+"漫畫 " => 	"漫画 ",
+"點畫 " => 	"点画 ",
+"版畫 " => 	"版画 ",
+"畫  " => 	"画  ",
+"畫像 " => 	"画像 ",
+"畫冊 " => 	"画册 ",
+"畫刊 " => 	"画刊 ",
+"畫匠 " => 	"画匠 ",
+"畫捲 " => 	"画卷 ",
+"畫圖 " => 	"画图 ",
+"畫壇 " => 	"画坛 ",
+"畫室 " => 	"画室 ",
+"畫家 " => 	"画家 ",
+"畫屏 " => 	"画屏 ",
+"畫展 " => 	"画展 ",
+"畫布 " => 	"画布 ",
+"畫師 " => 	"画师 ",
+"畫廊 " => 	"画廊 ",
+"畫報 " => 	"画报 ",
+"畫押 " => 	"画押 ",
+"畫板 " => 	"画板 ",
+"畫片 " => 	"画片 ",
+"畫畫 " => 	"画画 ",
+"畫皮 " => 	"画皮 ",
+"畫眉鳥" => 	"画眉鸟",
+"畫稿 " => 	"画稿 ",
+"畫筆 " => 	"画笔 ",
+"畫院 " => 	"画院 ",
+"畫集 " => 	"画集 ",
+"畫面 " => 	"画面 ",
+"筆畫 " => 	"笔画 ",
+"細密畫" => 	"细密画",
+"繪畫 " => 	"绘画 ",
+"自畫像" => 	"自画像",
+"蠟筆畫" => 	"蜡笔画",
+"裸體畫" => 	"裸体画",
+"西洋畫" => 	"西洋画",
+"透視畫" => 	"透视画",
+"銅版畫" => 	"铜版画",
+"鍾  " => 	"锺  ",
+"靜物畫" => 	"静物画",
+"餘  " => 	"馀  ",
+"記憶體"=>"内存",
+"預設"=>"默认",
+"預設"=>"缺省",
+"串列"=>"串行",
+"乙太網"=>"以太网",
+"點陣圖"=>"位图",
+"常式"=>"例程",
+"通道"=>"信道",
+"游標"=>"光标",
+"光碟"=>"光盘",
+"光碟機"=>"光驱",
+"全形"=>"全角",
+"共用"=>"共享",
+"相容"=>"兼容",
+"首碼"=>"前缀",
+"尾碼"=>"后缀",
+"載入"=>"加载",
+"半形"=>"半角",
+"變數"=>"变量",
+"雜訊"=>"噪声",
+"因數"=>"因子",
+"線上"=>"在线",
+"離線"=>"脱机",
+"功能變數名稱"=>"域名",
+"音效卡"=>"声卡",
+"字型大小"=>"字号",
+"字型檔"=>"字库",
+"欄位"=>"字段",
+"字元"=>"字符",
+"存檔"=>"存盘",
+"定址"=>"寻址",
+"章節附註"=>"尾注",
+"非同步"=>"异步",
+"匯流排"=>"总线",
+"括弧"=>"括号",
+"介面"=>"接口",
+"控制項"=>"控件",
+"許可權"=>"权限",
+"碟片"=>"盘片",
+"矽片"=>"硅片",
+"矽谷"=>"硅谷",
+"硬碟"=>"硬盘",
+"磁碟"=>"磁盘",
+"磁軌"=>"磁道",
+"程式控制"=>"程控",
+"埠"=>"端口",
+"運算元"=>"算子",
+"演算法"=>"算法",
+"晶片"=>"芯片",
+"晶元"=>"芯片",
+"片語"=>"词组",
+"解碼"=>"译码",
+"軟碟機"=>"软驱",
+"快閃記憶體"=>"闪存",
+"滑鼠"=>"鼠标",
+"進位"=>"进制",
+"互動式"=>"交互式",
+"模擬"=>"仿真",
+"優先順序"=>"优先级",
+"感測"=>"传感",
+"攜帶型"=>"便携式",
+"資訊理論"=>"信息论",
+"迴圈"=>"循环",
+"防寫"=>"写保护",
+"分散式"=>"分布式",
+"解析度"=>"分辨率",
+"程式"=>"程序",
+"伺服器"=>"服务器",
+"等於"=>"等于",
+"區域網"=>"局域网",
+"上傳"=>"上载",
+"電腦"=>"计算机",
+"巨集"=>"宏",
+"掃瞄器"=>"扫瞄仪",
+"寬頻"=>"宽带",
+"視窗"=>"窗口",
+"資料庫"=>"数据库",
+"西曆"=>"公历",
+"乳酪"=>"奶酪",
+"鉅賈"=>"巨商",
+"手電筒"=>"手电",
+"萬曆"=>"万历",
+"永曆"=>"永历",
+"辭彙"=>"词汇",
+"保全"=>"保安",
+"慣用"=>"习用",
+"母音"=>"元音",
+"自由球"=>"任意球",
+"頭槌"=>"头球",
+"進球"=>"入球",
+"顆進球"=>"粒入球",
+"射門"=>"打门",
+"蓋火鍋"=>"火锅盖帽",
+"印表機"=>"打印机",
+"打印機"=>"打印机",
+"位元組"=>"字节",
+"字節"=>"字节",
+"列印"=>"打印",
+"打印"=>"打印",
+"硬體"=>"硬件",
+"二極體"=>"二极管",
+"二極管"=>"二极管",
+"三極體"=>"三极管",
+"三極管"=>"三极管",
+"數位"=>"数码",
+"數碼"=>"数码",
+"軟體"=>"软件",
+"軟件"=>"软件",
+"網路"=>"网络",
+"網絡"=>"网络",
+"人工智慧"=>"人工智能",
+"太空梭"=>"航天飞机",
+"穿梭機"=>"航天飞机",
+"網際網路"=>"因特网",
+"互聯網"=>"因特网",
+"機械人"=>"机器人",
+"機器人"=>"机器人",
+"行動電話"=>"移动电话",
+"流動電話"=>"移动电话",
+"調制解調器"=>"调制解调器",
+"數據機"=>"调制解调器",
+"短訊"=>"短信",
+"簡訊"=>"短信",
+"烏茲別克"=>"乌兹别克斯坦",
+"查德"=>"乍得",
+"乍得"=>"乍得",
+"也門"=>"",
+"葉門"=>"也门",
+"伯利茲"=>"伯利兹",
+"貝里斯"=>"伯利兹",
+"維德角"=>"佛得角",
+"佛得角"=>"佛得角",
+"克羅地亞"=>"克罗地亚",
+"克羅埃西亞"=>"克罗地亚",
+"岡比亞"=>"冈比亚",
+"甘比亞"=>"冈比亚",
+"幾內亞比紹"=>"几内亚比绍",
+"幾內亞比索"=>"几内亚比绍",
+"列支敦斯登"=>"列支敦士登",
+"列支敦士登"=>"列支敦士登",
+"利比里亞"=>"利比里亚",
+"賴比瑞亞"=>"利比里亚",
+"加納"=>"加纳",
+"迦納"=>"加纳",
+"加彭"=>"加蓬",
+"加蓬"=>"加蓬",
+"博茨瓦納"=>"博茨瓦纳",
+"波札那"=>"博茨瓦纳",
+"卡塔爾"=>"卡塔尔",
+"卡達"=>"卡塔尔",
+"盧旺達"=>"卢旺达",
+"盧安達"=>"卢旺达",
+"危地馬拉"=>"危地马拉",
+"瓜地馬拉"=>"危地马拉",
+"厄瓜多爾"=>"厄瓜多尔",
+"厄瓜多"=>"厄瓜多尔",
+"厄立特里亞"=>"厄立特里亚",
+"厄利垂亞"=>"厄立特里亚",
+"吉布堤"=>"吉布提",
+"吉布地"=>"吉布提",
+"哈薩克"=>"哈萨克斯坦",
+"哥斯達黎加"=>"哥斯达黎加",
+"哥斯大黎加"=>"哥斯达黎加",
+"圖瓦盧"=>"图瓦卢",
+"吐瓦魯"=>"图瓦卢",
+"土庫曼"=>"土库曼斯坦",
+"聖盧西亞"=>"圣卢西亚",
+"聖露西亞"=>"圣卢西亚",
+"聖吉斯納域斯"=>"圣基茨和尼维斯",
+"聖克里斯多福及尼維斯"=>"圣基茨和尼维斯",
+"聖文森特和格林納丁斯"=>"圣文森特和格林纳丁斯",
+"聖文森及格瑞那丁"=>"圣文森特和格林纳丁斯",
+"聖馬力諾"=>"圣马力诺",
+"聖馬利諾"=>"圣马力诺",
+"圭亞那"=>"圭亚那",
+"蓋亞那"=>"圭亚那",
+"坦桑尼亞"=>"坦桑尼亚",
+"坦尚尼亞"=>"坦桑尼亚",
+"埃塞俄比亞"=>"埃塞俄比亚",
+"衣索比亞"=>"埃塞俄比亚",
+"吉里巴斯"=>"基里巴斯",
+"基里巴斯"=>"基里巴斯",
+"塔吉克"=>"塔吉克斯坦",
+"獅子山"=>"塞拉利昂",
+"塞拉利昂"=>"塞拉利昂",
+"塞普勒斯"=>"塞浦路斯",
+"塞浦路斯"=>"塞浦路斯",
+"塞舌爾"=>"塞舌尔",
+"塞席爾"=>"塞舌尔",
+"多明尼加共和國"=>"多米尼加",
+"多明尼加"=>"多米尼加",
+"多明尼加聯邦"=>"多米尼加联邦",
+"多米尼克"=>"多米尼加联邦",
+"安提瓜和巴布達"=>"安提瓜和巴布达",
+"安地卡及巴布達"=>"安提瓜和巴布达",
+"尼日利亞"=>"尼日利亚",
+"奈及利亞"=>"尼日利亚",
+"尼日爾"=>"尼日尔",
+"尼日"=>"尼日尔",
+"巴貝多"=>"巴巴多斯",
+"巴巴多斯"=>"巴巴多斯",
+"巴布亞新畿內亞"=>"巴布亚新几内亚",
+"巴布亞紐幾內亞"=>"巴布亚新几内亚",
+"布基納法索"=>"布基纳法索",
+"布吉納法索"=>"布基纳法索",
+"蒲隆地"=>"布隆迪",
+"布隆迪"=>"布隆迪",
+"希臘"=>"希腊",
+"帛琉"=>"帕劳",
+"義大利"=>"意大利",
+"意大利"=>"意大利",
+"所羅門群島"=>"所罗门群岛",
+"索羅門群島"=>"所罗门群岛",
+"汶萊"=>"文莱",
+"斯威士蘭"=>"斯威士兰",
+"史瓦濟蘭"=>"斯威士兰",
+"斯洛文尼亞"=>"斯洛文尼亚",
+"斯洛維尼亞"=>"斯洛文尼亚",
+"新西蘭"=>"新西兰",
+"紐西蘭"=>"新西兰",
+"北韓"=>"朝鲜",
+"格林納達"=>"格林纳达",
+"格瑞那達"=>"格林纳达",
+"格魯吉亞"=>"格鲁吉亚",
+"喬治亞"=>"格鲁吉亚",
+"梵蒂岡"=>"梵蒂冈",
+"教廷"=>"梵蒂冈",
+"毛里塔尼亞"=>"毛里塔尼亚",
+"茅利塔尼亞"=>"毛里塔尼亚",
+"毛里裘斯"=>"毛里求斯",
+"模里西斯"=>"毛里求斯",
+"沙地阿拉伯"=>"沙特阿拉伯",
+"沙烏地阿拉伯"=>"沙特阿拉伯",
+"波斯尼亞黑塞哥維那"=>"波斯尼亚和黑塞哥维那",
+"波士尼亞赫塞哥維納"=>"波斯尼亚和黑塞哥维那",
+"津巴布韋"=>"津巴布韦",
+"辛巴威"=>"津巴布韦",
+"宏都拉斯"=>"洪都拉斯",
+"洪都拉斯"=>"洪都拉斯",
+"特立尼達和多巴哥"=>"特立尼达和托巴哥",
+"千里達托貝哥"=>"特立尼达和托巴哥",
+"瑙魯"=>"瑙鲁",
+"諾魯"=>"瑙鲁",
+"瓦努阿圖"=>"瓦努阿图",
+"萬那杜"=>"瓦努阿图",
+"溫納圖"=>"瓦努阿图",
+"科摩羅"=>"科摩罗",
+"葛摩"=>"科摩罗",
+"象牙海岸"=>"科特迪瓦",
+"突尼西亞"=>"突尼斯",
+"索馬里"=>"索马里",
+"索馬利亞"=>"索马里",
+"老撾"=>"老挝",
+"寮國"=>"老挝",
+"肯雅"=>"肯尼亚",
+"肯亞"=>"肯尼亚",
+"蘇利南"=>"苏里南",
+"莫三比克"=>"莫桑比克",
+"莫桑比克"=>"莫桑比克",
+"萊索托"=>"莱索托",
+"賴索托"=>"莱索托",
+"貝寧"=>"贝宁",
+"貝南"=>"贝宁",
+"贊比亞"=>"赞比亚",
+"尚比亞"=>"赞比亚",
+"亞塞拜然"=>"阿塞拜疆",
+"阿塞拜疆"=>"阿塞拜疆",
+"阿拉伯聯合酋長國"=>"阿拉伯联合酋长国",
+"阿拉伯聯合大公國"=>"阿拉伯联合酋长国",
+"南韓"=>"韩国",
+"馬爾代夫"=>"马尔代夫",
+"馬爾地夫"=>"马尔代夫",
+"馬爾他"=>"马耳他",
+"馬里"=>"马里",
+"馬利"=>"马里",
+"即食麵"=>"方便面",
+"快速面"=>"方便面",
+"速食麵"=>"方便面",
+"泡麵"=>"方便面",
+"笨豬跳"=>"蹦极跳",
+"绑紧跳"=>"蹦极跳",
+"冷盤　　"=>"凉菜",
+"冷菜"=>"凉菜",
+"散钱"=>"零钱",
+"谐星"=>"笑星　　　　",
+"夜学"=>"夜校",
+"华乐"=>"民乐",
+"中樂"=>"民乐",
+"住屋"=>"住房",
+"屋价"=>"房价",
+"的士"=>"出租车",
+"計程車"=>"出租车",
+"巴士"=>"公共汽车",
+"公車"=>"公共汽车",
+"單車"=>"自行车",
+"節慶"=>"节日",
+"芝士"=>"乾酪",
+"狗隻"=>"犬只",
+"士多啤梨"=>"草莓",
+"忌廉"=>"奶油",
+"桌球"=>"台球",
+"撞球"=>"台球",
+"雪糕"=>"冰淇淋",
+"衞生"=>"卫生",
+"衛生"=>"卫生",
+"賓士"=>"奔驰",
+"平治"=>"奔驰",
+"捷豹"=>"美洲虎",
+"積架"=>"美洲虎",
+"福斯"=>"大众",
+"福士"=>"大众",
+"雪鐵龍"=>"雪铁龙",
+"萬事得"=>"马自达",
+"馬自達"=>"马自达",
+"寶獅"=>"标志",
+"布殊"=>"布什",
+"布希"=>"布什",
+"柯林頓"=>"克林顿",
+"克林頓"=>"克林顿",
+"薩達姆"=>"萨达姆",
+"海珊"=>"萨达姆",
+"梵谷"=>"凡高",
+"大衛碧咸"=>"大卫·贝克汉姆",
+"米高奧雲"=>"迈克尔·欧文",
+"卡佩雅蒂"=>"珍妮弗·卡普里亚蒂",
+"沙芬"=>"马拉特·萨芬",
+"舒麥加"=>"迈克尔·舒马赫",
+"希特拉"=>"希特勒",
+"戴安娜"=>"狄安娜",
+"黛安娜"=>"狄安娜",
+"希拉"=>"赫拉",
+);
+
+$zh2HK=array(
+"打印机" => "打印機",
+"印表機" => "打印機",
+"字节" => "字節",
+"位元組" => "字節",
+"打印" => "打印",
+"列印" => "打印",
+"硬件" => "硬件",
+"硬體" => "硬件",
+"二极管" => "二極管",
+"二極體" => "二極管",
+"三极管" => "三極管",
+"三極體" => "三極管",
+"数码" => "數碼",
+"數位" => "數碼",
+"软件" => "軟件",
+"軟體" => "軟件",
+"网络" => "網絡",
+"網路" => "網絡",
+"人工智能" => "人工智能",
+"人工智慧" => "人工智能",
+"航天飞机" => "穿梭機",
+"太空梭" => "穿梭機",
+"因特网" => "互聯網",
+"網際網路" => "互聯網",
+"机器人" => "機械人",
+"機器人" => "機械人",
+"移动电话" => "流動電話",
+"行動電話" => "流動電話",
+"调制解调器" => "調制解調器",
+"數據機" => "調制解調器",
+"短信" => "短訊",
+"簡訊" => "短訊",
+"乍得" => "乍得",
+"查德" => "乍得",
+"也门" => "也門",
+"葉門" => "也門",
+"伯利兹" => "伯利茲",
+"貝里斯" => "伯利茲",
+"佛得角" => "佛得角",
+"維德角" => "佛得角",
+"克罗地亚" => "克羅地亞",
+"克羅埃西亞" => "克羅地亞",
+"冈比亚" => "岡比亞",
+"甘比亞" => "岡比亞",
+"几内亚比绍" => "幾內亞比紹",
+"幾內亞比索" => "幾內亞比紹",
+"列支敦士登" => "列支敦士登",
+"列支敦斯登" => "列支敦士登",
+"利比里亚" => "利比里亞",
+"賴比瑞亞" => "利比里亞",
+"加纳" => "加納",
+"迦納" => "加納",
+"加蓬" => "加蓬",
+"加彭" => "加蓬",
+"博茨瓦纳" => "博茨瓦納",
+"波札那" => "博茨瓦納",
+"卡塔尔" => "卡塔爾",
+"卡達" => "卡塔爾",
+"卢旺达" => "盧旺達",
+"盧安達" => "盧旺達",
+"危地马拉" => "危地馬拉",
+"瓜地馬拉" => "危地馬拉",
+"厄瓜多尔" => "厄瓜多爾",
+"厄瓜多" => "厄瓜多爾",
+"厄立特里亚" => "厄立特里亞",
+"厄利垂亞" => "厄立特里亞",
+"吉布提" => "吉布堤",
+"吉布地" => "吉布堤",
+"哥斯达黎加" => "哥斯達黎加",
+"哥斯大黎加" => "哥斯達黎加",
+"图瓦卢" => "圖瓦盧",
+"吐瓦魯" => "圖瓦盧",
+"圣卢西亚" => "聖盧西亞",
+"聖露西亞" => "聖盧西亞",
+"圣基茨和尼维斯" => "聖吉斯納域斯",
+"聖克里斯多福及尼維斯" => "聖吉斯納域斯",
+"圣文森特和格林纳丁斯" => "聖文森特和格林納丁斯",
+"聖文森及格瑞那丁" => "聖文森特和格林納丁斯",
+"圣马力诺" => "聖馬力諾",
+"聖馬利諾" => "聖馬力諾",
+"圭亚那" => "圭亞那",
+"蓋亞那" => "圭亞那",
+"坦桑尼亚" => "坦桑尼亞",
+"坦尚尼亞" => "坦桑尼亞",
+"埃塞俄比亚" => "埃塞俄比亞",
+"衣索比亞" => "埃塞俄比亞",
+"基里巴斯" => "基里巴斯",
+"吉里巴斯" => "基里巴斯",
+"獅子山" => "塞拉利昂",
+"塞普勒斯" => "塞浦路斯",
+"塞舌尔" => "塞舌爾",
+"塞席爾" => "塞舌爾",
+"多米尼加" => "多明尼加共和國",
+"多明尼加" => "多明尼加共和國",
+"多米尼加联邦" => "多明尼加聯邦",
+"多米尼克" => "多明尼加聯邦",
+"安提瓜和巴布达" => "安提瓜和巴布達",
+"安地卡及巴布達" => "安提瓜和巴布達",
+"尼日利亚" => "尼日利亞",
+"奈及利亞" => "尼日利亞",
+"尼日尔" => "尼日爾",
+"尼日" => "尼日爾",
+"巴巴多斯" => "巴巴多斯",
+"巴貝多" => "巴巴多斯",
+"巴布亚新几内亚" => "巴布亞新畿內亞",
+"巴布亞紐幾內亞" => "巴布亞新畿內亞",
+"布基纳法索" => "布基納法索",
+"布吉納法索" => "布基納法索",
+"布隆迪" => "布隆迪",
+"蒲隆地" => "布隆迪",
+"義大利" => "意大利",
+"所罗门群岛" => "所羅門群島",
+"索羅門群島" => "所羅門群島",
+"斯威士兰" => "斯威士蘭",
+"史瓦濟蘭" => "斯威士蘭",
+"斯洛文尼亚" => "斯洛文尼亞",
+"斯洛維尼亞" => "斯洛文尼亞",
+"新西兰" => "新西蘭",
+"紐西蘭" => "新西蘭",
+"格林纳达" => "格林納達",
+"格瑞那達" => "格林納達",
+"格鲁吉亚" => "格魯吉亞",
+"喬治亞" => "格魯吉亞",
+"梵蒂冈" => "梵蒂岡",
+"教廷" => "梵蒂岡",
+"毛里塔尼亚" => "毛里塔尼亞",
+"茅利塔尼亞" => "毛里塔尼亞",
+"毛里求斯" => "毛里裘斯",
+"模里西斯" => "毛里裘斯",
+"沙特阿拉伯" => "沙地阿拉伯",
+"沙烏地阿拉伯" => "沙地阿拉伯",
+"波斯尼亚和黑塞哥维那" => "波斯尼亞黑塞哥維那",
+"波士尼亞赫塞哥維納" => "波斯尼亞黑塞哥維那",
+"津巴布韦" => "津巴布韋",
+"辛巴威" => "津巴布韋",
+"洪都拉斯" => "洪都拉斯",
+"宏都拉斯" => "洪都拉斯",
+"特立尼达和托巴哥" => "特立尼達和多巴哥",
+"千里達托貝哥" => "特立尼達和多巴哥",
+"瑙鲁" => "瑙魯",
+"諾魯" => "瑙魯",
+"瓦努阿图" => "瓦努阿圖",
+"萬那杜" => "瓦努阿圖",
+"科摩罗" => "科摩羅",
+"葛摩" => "科摩羅",
+"索马里" => "索馬里",
+"索馬利亞" => "索馬里",
+"老挝" => "老撾",
+"寮國" => "老撾",
+"肯尼亚" => "肯雅",
+"肯亞" => "肯雅",
+"莫桑比克" => "莫桑比克",
+"莫三比克" => "莫桑比克",
+"莱索托" => "萊索托",
+"賴索托" => "萊索托",
+"贝宁" => "貝寧",
+"貝南" => "貝寧",
+"赞比亚" => "贊比亞",
+"尚比亞" => "贊比亞",
+"阿塞拜疆" => "阿塞拜疆",
+"亞塞拜然" => "阿塞拜疆",
+"阿拉伯联合酋长国" => "阿拉伯聯合酋長國",
+"阿拉伯聯合大公國" => "阿拉伯聯合酋長國",
+"马尔代夫" => "馬爾代夫",
+"馬爾地夫" => "馬爾代夫",
+"马里" => "馬里",
+"馬利" => "馬里",
+"方便面" => "即食麵",
+"快速面" => "即食麵",
+"速食麵" => "即食麵",
+"泡麵" => "即食麵",
+"土豆" => "薯仔",
+"华乐" => "中樂",
+"民乐" => "中樂",
+"計程車	" => "的士",
+"出租车" => "的士",
+"公車" => "巴士",
+"公共汽车" => "巴士",
+"自行车" => "單車",
+"节日" => "節慶",
+"犬只" => "狗隻",
+"台球" => "桌球",
+"撞球" => "桌球",
+"冰淇淋" => "雪糕",
+"冰淇淋" => "雪糕",
+"卫生" => "衞生",
+"衛生" => "衞生",
+"老人" => "長者",
+"賓士" => "平治",
+"捷豹" => "積架",
+"福斯" => "福士",
+"雪铁龙" => "先進",
+"雪鐵龍" => "先進",
+"沃尓沃" => "富豪",
+"马自达" => "萬事得",
+"馬自達" => "萬事得",
+"寶獅" => "標致",
+"布什" => "布殊",
+"布希" => "布殊",
+"克林顿" => "克林頓",
+"柯林頓" => "克林頓",
+"萨达姆" => "薩達姆",
+"海珊" => "薩達姆",
+"大卫·贝克汉姆" => "大衛碧咸",
+"迈克尔·欧文" => "米高奧雲",
+"珍妮弗·卡普里亚蒂" => "卡佩雅蒂",
+"马拉特·萨芬" => "沙芬",
+"迈克尔·舒马赫" => "舒麥加",
+"希特勒" => "希特拉",
+"狄安娜" => "戴安娜",
+"黛安娜" => "戴安娜",
+);
+
+$zh2SG=array(
+"方便面" => "快速面",
+"速食麵" => "快速面",
+"即食麵" => "快速面",
+"蹦极跳" => "绑紧跳",
+"笨豬跳" => "绑紧跳",
+"凉菜" => "冷菜",
+"冷盤" => "冷菜",
+"零钱" => "散钱",
+"散紙" => "散钱",
+"笑星" => "谐星",
+"夜校" => "夜学",
+"民乐" => "华乐",
+"住房" => "住屋",
+"房价" => "屋价",
+"泡麵" => "快速面",
+);
+?>
Index: /MediaWiki/branches/1.11/includes/api/ApiBase.php
===================================================================
--- /MediaWiki/branches/1.11/includes/api/ApiBase.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/api/ApiBase.php	(revision 1280)
@@ -0,0 +1,536 @@
+<?php
+
+/*
+ * Created on Sep 5, 2006
+ *
+ * API for MediaWiki 1.8+
+ *
+ * Copyright (C) 2006 Yuri Astrakhan <FirstnameLastname@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ */
+
+/**
+ * @todo Document - e.g. Provide top-level description of this class.
+ * @addtogroup API
+ */
+abstract class ApiBase {
+
+	// These constants allow modules to specify exactly how to treat incomming parameters.
+
+	const PARAM_DFLT = 0;
+	const PARAM_ISMULTI = 1;
+	const PARAM_TYPE = 2;
+	const PARAM_MAX1 = 3;
+	const PARAM_MAX2 = 4;
+	const PARAM_MIN = 5;
+
+	const LIMIT_BIG1 = 500; // Fast query, user's limit
+	const LIMIT_BIG2 = 5000; // Fast query, bot's limit
+	const LIMIT_SML1 = 50; // Slow query, user's limit
+	const LIMIT_SML2 = 500; // Slow query, bot's limit
+
+	private $mMainModule, $mModuleName, $mParamPrefix;
+
+	/**
+	* Constructor
+	*/
+	public function __construct($mainModule, $moduleName, $paramPrefix = '') {
+		$this->mMainModule = $mainModule;
+		$this->mModuleName = $moduleName;
+		$this->mParamPrefix = $paramPrefix;
+	}
+
+	/**
+	 * Executes this module
+	 */
+	public abstract function execute();
+
+	/**
+	 * Get the name of the module being executed by this instance 
+	 */
+	public function getModuleName() {
+		return $this->mModuleName;
+	}
+
+	/**
+	 * Get the name of the module as shown in the profiler log 
+	 */
+	public function getModuleProfileName($db = false) {
+		if ($db)
+			return 'API:' . $this->mModuleName . '-DB';
+		else
+			return 'API:' . $this->mModuleName;
+	}
+
+	/**
+	 * Get main module
+	 */
+	public function getMain() {
+		return $this->mMainModule;
+	}
+
+	/**
+	 * If this module's $this is the same as $this->mMainModule, its the root, otherwise no
+	 */
+	public function isMain() {
+		return $this === $this->mMainModule;
+	}
+
+	/**
+	 * Get result object
+	 */
+	public function getResult() {
+		// Main module has getResult() method overriden
+		// Safety - avoid infinite loop:
+		if ($this->isMain())
+			ApiBase :: dieDebug(__METHOD__, 'base method was called on main module. ');
+		return $this->getMain()->getResult();
+	}
+
+	/**
+	 * Get the result data array
+	 */
+	public function & getResultData() {
+		return $this->getResult()->getData();
+	}
+
+	/**
+	 * If the module may only be used with a certain format module,
+	 * it should override this method to return an instance of that formatter.
+	 * A value of null means the default format will be used.  
+	 */
+	public function getCustomPrinter() {
+		return null;
+	}
+
+	/**
+	 * Generates help message for this module, or false if there is no description
+	 */
+	public function makeHelpMsg() {
+
+		static $lnPrfx = "\n  ";
+
+		$msg = $this->getDescription();
+
+		if ($msg !== false) {
+
+			if (!is_array($msg))
+				$msg = array (
+					$msg
+				);
+			$msg = $lnPrfx . implode($lnPrfx, $msg) . "\n";
+
+			// Parameters
+			$paramsMsg = $this->makeHelpMsgParameters();
+			if ($paramsMsg !== false) {
+				$msg .= "Parameters:\n$paramsMsg";
+			}
+
+			// Examples
+			$examples = $this->getExamples();
+			if ($examples !== false) {
+				if (!is_array($examples))
+					$examples = array (
+						$examples
+					);
+				$msg .= 'Example' . (count($examples) > 1 ? 's' : '') . ":\n  ";
+				$msg .= implode($lnPrfx, $examples) . "\n";
+			}
+
+			if ($this->getMain()->getShowVersions()) {
+				$versions = $this->getVersion();
+				$pattern = '(\$.*) ([0-9a-z_]+\.php) (.*\$)';
+				$replacement = '\\0' . "\n    " . 'http://svn.wikimedia.org/viewvc/mediawiki/trunk/phase3/includes/api/\\2';
+				
+				if (is_array($versions)) {
+					foreach ($versions as &$v)
+						$v = eregi_replace($pattern, $replacement, $v);
+					$versions = implode("\n  ", $versions);
+				}
+				else
+					$versions = eregi_replace($pattern, $replacement, $versions);
+
+				$msg .= "Version:\n  $versions\n";
+			}
+		}
+
+		return $msg;
+	}
+
+	public function makeHelpMsgParameters() {
+		$params = $this->getAllowedParams();
+		if ($params !== false) {
+
+			$paramsDescription = $this->getParamDescription();
+			$msg = '';
+			$paramPrefix = "\n" . str_repeat(' ', 19);
+			foreach ($params as $paramName => $paramSettings) {
+				$desc = isset ($paramsDescription[$paramName]) ? $paramsDescription[$paramName] : '';
+				if (is_array($desc))
+					$desc = implode($paramPrefix, $desc);
+
+				@ $type = $paramSettings[self :: PARAM_TYPE];
+				if (isset ($type)) {
+					if (isset ($paramSettings[self :: PARAM_ISMULTI]))
+						$prompt = 'Values (separate with \'|\'): ';
+					else
+						$prompt = 'One value: ';
+
+					if (is_array($type)) {
+						$desc .= $paramPrefix . $prompt . implode(', ', $type);
+					}
+					elseif ($type == 'namespace') {
+						// Special handling because namespaces are type-limited, yet they are not given
+						$desc .= $paramPrefix . $prompt . implode(', ', ApiBase :: getValidNamespaces());
+					}
+				}
+
+				$default = is_array($paramSettings) ? (isset ($paramSettings[self :: PARAM_DFLT]) ? $paramSettings[self :: PARAM_DFLT] : null) : $paramSettings;
+				if (!is_null($default) && $default !== false)
+					$desc .= $paramPrefix . "Default: $default";
+
+				$msg .= sprintf("  %-14s - %s\n", $this->encodeParamName($paramName), $desc);
+			}
+			return $msg;
+
+		} else
+			return false;
+	}
+
+	/**
+	 * Returns the description string for this module
+	 */
+	protected function getDescription() {
+		return false;
+	}
+
+	/**
+	 * Returns usage examples for this module. Return null if no examples are available.
+	 */
+	protected function getExamples() {
+		return false;
+	}
+
+	/**
+	 * Returns an array of allowed parameters (keys) => default value for that parameter
+	 */
+	protected function getAllowedParams() {
+		return false;
+	}
+
+	/**
+	 * Returns the description string for the given parameter.
+	 */
+	protected function getParamDescription() {
+		return false;
+	}
+
+	/**
+	 * This method mangles parameter name based on the prefix supplied to the constructor.
+	 * Override this method to change parameter name during runtime 
+	 */
+	public function encodeParamName($paramName) {
+		return $this->mParamPrefix . $paramName;
+	}
+
+	/**
+	* Using getAllowedParams(), makes an array of the values provided by the user,
+	* with key being the name of the variable, and value - validated value from user or default.
+	* This method can be used to generate local variables using extract().
+	*/
+	public function extractRequestParams() {
+		$params = $this->getAllowedParams();
+		$results = array ();
+
+		foreach ($params as $paramName => $paramSettings)
+			$results[$paramName] = $this->getParameterFromSettings($paramName, $paramSettings);
+
+		return $results;
+	}
+
+	/**
+	 * Get a value for the given parameter 
+	 */
+	protected function getParameter($paramName) {
+		$params = $this->getAllowedParams();
+		$paramSettings = $params[$paramName];
+		return $this->getParameterFromSettings($paramName, $paramSettings);
+	}
+
+	public static function getValidNamespaces() {
+		static $mValidNamespaces = null;
+		if (is_null($mValidNamespaces)) {
+
+			global $wgContLang;
+			$mValidNamespaces = array ();
+			foreach (array_keys($wgContLang->getNamespaces()) as $ns) {
+				if ($ns >= 0)
+					$mValidNamespaces[] = $ns;
+			}
+		}
+		return $mValidNamespaces;
+	}
+
+	/**
+	 * Using the settings determine the value for the given parameter
+	 * @param $paramName String: parameter name
+	 * @param $paramSettings Mixed: default value or an array of settings using PARAM_* constants.
+	 */
+	protected function getParameterFromSettings($paramName, $paramSettings) {
+
+		// Some classes may decide to change parameter names
+		$paramName = $this->encodeParamName($paramName);
+
+		if (!is_array($paramSettings)) {
+			$default = $paramSettings;
+			$multi = false;
+			$type = gettype($paramSettings);
+		} else {
+			$default = isset ($paramSettings[self :: PARAM_DFLT]) ? $paramSettings[self :: PARAM_DFLT] : null;
+			$multi = isset ($paramSettings[self :: PARAM_ISMULTI]) ? $paramSettings[self :: PARAM_ISMULTI] : false;
+			$type = isset ($paramSettings[self :: PARAM_TYPE]) ? $paramSettings[self :: PARAM_TYPE] : null;
+
+			// When type is not given, and no choices, the type is the same as $default
+			if (!isset ($type)) {
+				if (isset ($default))
+					$type = gettype($default);
+				else
+					$type = 'NULL'; // allow everything
+			}
+		}
+
+		if ($type == 'boolean') {
+			if (isset ($default) && $default !== false) {
+				// Having a default value of anything other than 'false' is pointless
+				ApiBase :: dieDebug(__METHOD__, "Boolean param $paramName's default is set to '$default'");
+			}
+
+			$value = $this->getMain()->getRequest()->getCheck($paramName);
+		} else {
+			$value = $this->getMain()->getRequest()->getVal($paramName, $default);
+
+			if (isset ($value) && $type == 'namespace')
+				$type = ApiBase :: getValidNamespaces();
+		}
+
+		if (isset ($value) && ($multi || is_array($type)))
+			$value = $this->parseMultiValue($paramName, $value, $multi, is_array($type) ? $type : null);
+
+		// More validation only when choices were not given
+		// choices were validated in parseMultiValue()
+		if (isset ($value)) {
+			if (!is_array($type)) {
+				switch ($type) {
+					case 'NULL' : // nothing to do
+						break;
+					case 'string' : // nothing to do
+						break;
+					case 'integer' : // Force everything using intval()
+						$value = is_array($value) ? array_map('intval', $value) : intval($value);
+						break;
+					case 'limit' :
+						if (!isset ($paramSettings[self :: PARAM_MAX1]) || !isset ($paramSettings[self :: PARAM_MAX2]))
+							ApiBase :: dieDebug(__METHOD__, "MAX1 or MAX2 are not defined for the limit $paramName");
+						if ($multi)
+							ApiBase :: dieDebug(__METHOD__, "Multi-values not supported for $paramName");
+						$min = isset ($paramSettings[self :: PARAM_MIN]) ? $paramSettings[self :: PARAM_MIN] : 0;
+						$value = intval($value);
+						$this->validateLimit($paramName, $value, $min, $paramSettings[self :: PARAM_MAX1], $paramSettings[self :: PARAM_MAX2]);
+						break;
+					case 'boolean' :
+						if ($multi)
+							ApiBase :: dieDebug(__METHOD__, "Multi-values not supported for $paramName");
+						break;
+					case 'timestamp' :
+						if ($multi)
+							ApiBase :: dieDebug(__METHOD__, "Multi-values not supported for $paramName");
+						$value = wfTimestamp(TS_UNIX, $value);
+						if ($value === 0)
+							$this->dieUsage("Invalid value '$value' for timestamp parameter $paramName", "badtimestamp_{$paramName}");
+						$value = wfTimestamp(TS_MW, $value);
+						break;
+					default :
+						ApiBase :: dieDebug(__METHOD__, "Param $paramName's type is unknown - $type");
+				}
+			}
+
+			// There should never be any duplicate values in a list
+			if (is_array($value))
+				$value = array_unique($value);
+		}
+
+		return $value;
+	}
+
+	/**
+	* Return an array of values that were given in a 'a|b|c' notation,
+	* after it optionally validates them against the list allowed values.
+	* 
+	* @param valueName - The name of the parameter (for error reporting)
+	* @param value - The value being parsed
+	* @param allowMultiple - Can $value contain more than one value separated by '|'?
+	* @param allowedValues - An array of values to check against. If null, all values are accepted.
+	* @return (allowMultiple ? an_array_of_values : a_single_value) 
+	*/
+	protected function parseMultiValue($valueName, $value, $allowMultiple, $allowedValues) {
+		$valuesList = explode('|', $value);
+		if (!$allowMultiple && count($valuesList) != 1) {
+			$possibleValues = is_array($allowedValues) ? "of '" . implode("', '", $allowedValues) . "'" : '';
+			$this->dieUsage("Only one $possibleValues is allowed for parameter '$valueName'", "multival_$valueName");
+		}
+		if (is_array($allowedValues)) {
+			$unknownValues = array_diff($valuesList, $allowedValues);
+			if ($unknownValues) {
+				$this->dieUsage('Unrecognised value' . (count($unknownValues) > 1 ? "s" : "") . " for parameter '$valueName'", "unknown_$valueName");
+			}
+		}
+
+		return $allowMultiple ? $valuesList : $valuesList[0];
+	}
+
+	/**
+	* Validate the value against the minimum and user/bot maximum limits. Prints usage info on failure.
+	*/
+	function validateLimit($varname, $value, $min, $max, $botMax) {
+		if ($value < $min) {
+			$this->dieUsage("$varname may not be less than $min (set to $value)", $varname);
+		}
+
+		if ($this->getMain()->isBot()) {
+			if ($value > $botMax) {
+				$this->dieUsage("$varname may not be over $botMax (set to $value) for bots", $varname);
+			}
+		}
+		elseif ($value > $max) {
+			$this->dieUsage("$varname may not be over $max (set to $value) for users", $varname);
+		}
+	}
+
+	/**
+	 * Call main module's error handler 
+	 */
+	public function dieUsage($description, $errorCode, $httpRespCode = 0) {
+		throw new UsageException($description, $this->encodeParamName($errorCode), $httpRespCode);
+	}
+
+	/**
+	 * Internal code errors should be reported with this method
+	 */
+	protected static function dieDebug($method, $message) {
+		wfDebugDieBacktrace("Internal error in $method: $message");
+	}
+
+	/**
+	 * Profiling: total module execution time
+	 */
+	private $mTimeIn = 0, $mModuleTime = 0;
+
+	/**
+	 * Start module profiling
+	 */
+	public function profileIn() {
+		if ($this->mTimeIn !== 0)
+			ApiBase :: dieDebug(__METHOD__, 'called twice without calling profileOut()');
+		$this->mTimeIn = microtime(true);
+		wfProfileIn($this->getModuleProfileName());
+	}
+
+	/**
+	 * End module profiling
+	 */
+	public function profileOut() {
+		if ($this->mTimeIn === 0)
+			ApiBase :: dieDebug(__METHOD__, 'called without calling profileIn() first');
+		if ($this->mDBTimeIn !== 0)
+			ApiBase :: dieDebug(__METHOD__, 'must be called after database profiling is done with profileDBOut()');
+
+		$this->mModuleTime += microtime(true) - $this->mTimeIn;
+		$this->mTimeIn = 0;
+		wfProfileOut($this->getModuleProfileName());
+	}
+
+	/**
+	 * When modules crash, sometimes it is needed to do a profileOut() regardless
+	 * of the profiling state the module was in. This method does such cleanup. 
+	 */
+	public function safeProfileOut() {
+		if ($this->mTimeIn !== 0) {
+			if ($this->mDBTimeIn !== 0)
+				$this->profileDBOut();
+			$this->profileOut();
+		}
+	}
+
+	/**
+	 * Total time the module was executed
+	 */
+	public function getProfileTime() {
+		if ($this->mTimeIn !== 0)
+			ApiBase :: dieDebug(__METHOD__, 'called without calling profileOut() first');
+		return $this->mModuleTime;
+	}
+
+	/**
+	 * Profiling: database execution time
+	 */
+	private $mDBTimeIn = 0, $mDBTime = 0;
+
+	/**
+	 * Start module profiling
+	 */
+	public function profileDBIn() {
+		if ($this->mTimeIn === 0)
+			ApiBase :: dieDebug(__METHOD__, 'must be called while profiling the entire module with profileIn()');
+		if ($this->mDBTimeIn !== 0)
+			ApiBase :: dieDebug(__METHOD__, 'called twice without calling profileDBOut()');
+		$this->mDBTimeIn = microtime(true);
+		wfProfileIn($this->getModuleProfileName(true));
+	}
+
+	/**
+	 * End database profiling
+	 */
+	public function profileDBOut() {
+		if ($this->mTimeIn === 0)
+			ApiBase :: dieDebug(__METHOD__, 'must be called while profiling the entire module with profileIn()');
+		if ($this->mDBTimeIn === 0)
+			ApiBase :: dieDebug(__METHOD__, 'called without calling profileDBIn() first');
+
+		$time = microtime(true) - $this->mDBTimeIn;
+		$this->mDBTimeIn = 0;
+
+		$this->mDBTime += $time;
+		$this->getMain()->mDBTime += $time;
+		wfProfileOut($this->getModuleProfileName(true));
+	}
+
+	/**
+	 * Total time the module used the database
+	 */
+	public function getProfileDBTime() {
+		if ($this->mDBTimeIn !== 0)
+			ApiBase :: dieDebug(__METHOD__, 'called without calling profileDBOut() first');
+		return $this->mDBTime;
+	}
+
+	public abstract function getVersion();
+
+	public static function getBaseVersion() {
+		return __CLASS__ . ': $Id: ApiBase.php 21402 2007-04-20 08:55:14Z nickj $';
+	}
+}
+?>
Index: /MediaWiki/branches/1.11/includes/api/ApiFeedWatchlist.php
===================================================================
--- /MediaWiki/branches/1.11/includes/api/ApiFeedWatchlist.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/api/ApiFeedWatchlist.php	(revision 1280)
@@ -0,0 +1,127 @@
+<?php
+
+/*
+ * Created on Oct 13, 2006
+ *
+ * API for MediaWiki 1.8+
+ *
+ * Copyright (C) 2006 Yuri Astrakhan <FirstnameLastname@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ */
+
+if (!defined('MEDIAWIKI')) {
+	// Eclipse helper - will be ignored in production
+	require_once ("ApiBase.php");
+}
+
+/**
+ * @addtogroup API
+ */
+class ApiFeedWatchlist extends ApiBase {
+
+	public function __construct($main, $action) {
+		parent :: __construct($main, $action);
+	}
+
+	public function getCustomPrinter() {
+		return new ApiFormatFeedWrapper($this->getMain());
+	}
+
+	public function execute() {
+		$feedformat = null;
+		extract($this->extractRequestParams());
+
+		// limit to 1 day
+		$startTime = wfTimestamp(TS_MW, time() - intval(1 * 86400));
+
+		// Prepare nested request
+		$params = new FauxRequest(array (
+			'action' => 'query',
+			'meta' => 'siteinfo',
+			'siprop' => 'general',
+			'list' => 'watchlist',
+			'wlprop' => 'user|comment|timestamp',
+			'wlstart' => $startTime,
+			'wllimit' => 50
+		));
+
+		// Execute
+		$module = new ApiMain($params);
+		$module->execute();
+
+		// Get data array
+		$data = $module->getResultData();
+
+		$feedItems = array ();
+		foreach ($data['query']['watchlist'] as $info) {
+			$feedItems[] = $this->createFeedItem($info);
+		}
+
+		global $wgFeedClasses, $wgSitename, $wgContLanguageCode;
+		$feedTitle = $wgSitename . ' - ' . wfMsgForContent('watchlist') . ' [' . $wgContLanguageCode . ']';
+		$feedUrl = SpecialPage::getTitleFor( 'Watchlist' )->getFullUrl();
+
+		$feed = new $wgFeedClasses[$feedformat] ($feedTitle, htmlspecialchars(wfMsgForContent('watchlist')), $feedUrl);
+
+		ApiFormatFeedWrapper :: setResult($this->getResult(), $feed, $feedItems);
+	}
+
+	private function createFeedItem($info) {
+		$titleStr = $info['title'];
+		$title = Title :: newFromText($titleStr);
+		$titleUrl = $title->getFullUrl();
+		$comment = isset( $info['comment'] ) ? $info['comment'] : null;
+		$timestamp = $info['timestamp'];
+		$user = $info['user'];
+
+		$completeText = "$comment ($user)";
+
+		return new FeedItem($titleStr, $completeText, $titleUrl, $timestamp, $user);
+	}
+
+	protected function getAllowedParams() {
+		global $wgFeedClasses;
+		$feedFormatNames = array_keys($wgFeedClasses);
+		return array (
+			'feedformat' => array (
+				ApiBase :: PARAM_DFLT => 'rss',
+				ApiBase :: PARAM_TYPE => $feedFormatNames
+			)
+		);
+	}
+
+	protected function getParamDescription() {
+		return array (
+			'feedformat' => 'The format of the feed'
+		);
+	}
+
+	protected function getDescription() {
+		return 'This module returns a watchlist feed';
+	}
+
+	protected function getExamples() {
+		return array (
+			'api.php?action=feedwatchlist'
+		);
+	}
+
+	public function getVersion() {
+		return __CLASS__ . ': $Id: ApiFeedWatchlist.php 21402 2007-04-20 08:55:14Z nickj $';
+	}
+}
+?>
Index: /MediaWiki/branches/1.11/includes/api/ApiFormatBase.php
===================================================================
--- /MediaWiki/branches/1.11/includes/api/ApiFormatBase.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/api/ApiFormatBase.php	(revision 1280)
@@ -0,0 +1,235 @@
+<?php
+
+/*
+ * Created on Sep 19, 2006
+ *
+ * API for MediaWiki 1.8+
+ *
+ * Copyright (C) 2006 Yuri Astrakhan <FirstnameLastname@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ */
+
+if (!defined('MEDIAWIKI')) {
+	// Eclipse helper - will be ignored in production
+	require_once ('ApiBase.php');
+}
+
+/**
+ * @addtogroup API
+ */
+abstract class ApiFormatBase extends ApiBase {
+
+	private $mIsHtml, $mFormat;
+
+	/**
+	* Constructor
+	*/
+	public function __construct($main, $format) {
+		parent :: __construct($main, $format);
+
+		$this->mIsHtml = (substr($format, -2, 2) === 'fm'); // ends with 'fm'
+		if ($this->mIsHtml)
+			$this->mFormat = substr($format, 0, -2); // remove ending 'fm'
+		else
+			$this->mFormat = $format;
+		$this->mFormat = strtoupper($this->mFormat);
+	}
+
+	/**
+	 * Overriding class returns the mime type that should be sent to the client.
+	 * This method is not called if getIsHtml() returns true.
+	 * @return string
+	 */
+	public abstract function getMimeType();
+
+	public function getNeedsRawData() {
+		return false;
+	}
+
+	/**
+	 * Returns true when an HTML filtering printer should be used.
+	 * The default implementation assumes that formats ending with 'fm' 
+	 * should be formatted in HTML. 
+	 */
+	public function getIsHtml() {
+		return $this->mIsHtml;
+	}
+
+	/**
+	 * Initialize the printer function and prepares the output headers, etc.
+	 * This method must be the first outputing method during execution.
+	 * A help screen's header is printed for the HTML-based output
+	 */
+	function initPrinter($isError) {
+		$isHtml = $this->getIsHtml();
+		$mime = $isHtml ? 'text/html' : $this->getMimeType();
+
+		// Some printers (ex. Feed) do their own header settings,
+		// in which case $mime will be set to null
+		if (is_null($mime))
+			return; // skip any initialization
+
+		header("Content-Type: $mime; charset=utf-8");
+
+		if ($isHtml) {
+?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+	<title>MediaWiki API</title>
+</head>
+<body>
+<?php
+
+
+			if (!$isError) {
+?>
+<br/>
+<small>
+You are looking at the HTML representation of the <?=$this->mFormat?> format.<br/>
+HTML is good for debugging, but probably is not suitable for your application.<br/>
+Please see "format" parameter documentation at the <a href='api.php'>API help</a>
+for more information.
+</small>
+<?php
+
+
+			}
+?>
+<pre>
+<?php
+
+
+		}
+	}
+
+	/**
+	 * Finish printing. Closes HTML tags.
+	 */
+	public function closePrinter() {
+		if ($this->getIsHtml()) {
+?>
+
+</pre>
+</body>
+</html>
+<?php
+
+
+		}
+	}
+
+	public function printText($text) {
+		if ($this->getIsHtml())
+			echo $this->formatHTML($text);
+		else
+			echo $text;
+	}
+
+	/**
+	* Prety-print various elements in HTML format, such as xml tags and URLs.
+	* This method also replaces any '<' with &lt;
+	*/
+	protected function formatHTML($text) {
+		// encode all tags as safe blue strings
+		$text = ereg_replace('\<([^>]+)\>', '<span style="color:blue;">&lt;\1&gt;</span>', $text);
+		// identify URLs
+		$protos = "http|https|ftp|gopher";
+		$text = ereg_replace("($protos)://[^ '\"()<\n]+", '<a href="\\0">\\0</a>', $text);
+		// identify requests to api.php
+		$text = ereg_replace("api\\.php\\?[^ ()<\n\t]+", '<a href="\\0">\\0</a>', $text);
+		// make strings inside * bold
+		$text = ereg_replace("\\*[^<>\n]+\\*", '<b>\\0</b>', $text);
+		// make strings inside $ italic
+		$text = ereg_replace("\\$[^<>\n]+\\$", '<b><i>\\0</i></b>', $text);
+
+		return $text;
+	}
+
+	/**
+	 * Returns usage examples for this format.
+	 */
+	protected function getExamples() {
+		return 'api.php?action=query&meta=siteinfo&siprop=namespaces&format=' . $this->getModuleName();
+	}
+
+	protected function getDescription() {
+		return $this->getIsHtml() ? ' (pretty-print in HTML)' : '';
+	}
+
+	public static function getBaseVersion() {
+		return __CLASS__ . ': $Id: ApiFormatBase.php 21402 2007-04-20 08:55:14Z nickj $';
+	}
+}
+
+/**
+ * This printer is used to wrap an instance of the Feed class 
+ * @addtogroup API
+ */
+class ApiFormatFeedWrapper extends ApiFormatBase {
+
+	public function __construct($main) {
+		parent :: __construct($main, 'feed');
+	}
+
+	/**
+	 * Call this method to initialize output data
+	 */
+	public static function setResult($result, $feed, $feedItems) {
+		// Store output in the Result data.
+		// This way we can check during execution if any error has occured
+		$data = & $result->getData();
+		$data['_feed'] = $feed;
+		$data['_feeditems'] = $feedItems;
+	}
+
+	/**
+	 * Feed does its own headers
+	 */
+	public function getMimeType() {
+		return null;
+	}
+
+	/**
+	 * Optimization - no need to sanitize data that will not be needed
+	 */
+	public function getNeedsRawData() {
+		return true;
+	}
+
+	public function execute() {
+		$data = $this->getResultData();
+		if (isset ($data['_feed']) && isset ($data['_feeditems'])) {
+			$feed = $data['_feed'];
+			$items = $data['_feeditems'];
+
+			$feed->outHeader();
+			foreach ($items as & $item)
+				$feed->outItem($item);
+			$feed->outFooter();
+		} else {
+			// Error has occured, print something usefull
+			// TODO: make this error more informative using ApiBase :: dieDebug() or similar
+			wfHttpError(500, 'Internal Server Error', '');
+		}
+	}
+	
+	public function getVersion() {
+		return __CLASS__ . ': $Id: ApiFormatBase.php 21402 2007-04-20 08:55:14Z nickj $';
+	}
+}
+?>
Index: /MediaWiki/branches/1.11/includes/api/ApiFormatJson.php
===================================================================
--- /MediaWiki/branches/1.11/includes/api/ApiFormatJson.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/api/ApiFormatJson.php	(revision 1280)
@@ -0,0 +1,71 @@
+<?php
+
+/*
+ * Created on Sep 19, 2006
+ *
+ * API for MediaWiki 1.8+
+ *
+ * Copyright (C) 2006 Yuri Astrakhan <FirstnameLastname@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ */
+
+if (!defined('MEDIAWIKI')) {
+	// Eclipse helper - will be ignored in production
+	require_once ('ApiFormatBase.php');
+}
+
+/**
+ * @addtogroup API
+ */
+class ApiFormatJson extends ApiFormatBase {
+
+	private $mIsRaw;
+
+	public function __construct($main, $format) {
+		parent :: __construct($main, $format);
+		$this->mIsRaw = ($format === 'rawfm');
+	}
+
+	public function getMimeType() {
+		return 'application/json';
+	}
+
+	public function getNeedsRawData() {
+		return $this->mIsRaw;
+	}
+
+	public function execute() {
+		if (!function_exists('json_encode') || $this->getIsHtml()) {
+			$json = new Services_JSON();
+			$this->printText($json->encode($this->getResultData(), $this->getIsHtml()));
+		} else {
+			$this->printText(json_encode($this->getResultData()));
+		}
+	}
+
+	protected function getDescription() {
+		if ($this->mIsRaw)
+			return 'Output data with the debuging elements in JSON format' . parent :: getDescription();
+		else
+			return 'Output data in JSON format' . parent :: getDescription();
+	}
+
+	public function getVersion() {
+		return __CLASS__ . ': $Id: ApiFormatJson.php 21402 2007-04-20 08:55:14Z nickj $';
+	}
+}
+?>
Index: /MediaWiki/branches/1.11/includes/api/ApiFormatJson_json.php
===================================================================
--- /MediaWiki/branches/1.11/includes/api/ApiFormatJson_json.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/api/ApiFormatJson_json.php	(revision 1280)
@@ -0,0 +1,846 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+* Converts to and from JSON format.
+*
+* JSON (JavaScript Object Notation) is a lightweight data-interchange
+* format. It is easy for humans to read and write. It is easy for machines
+* to parse and generate. It is based on a subset of the JavaScript
+* Programming Language, Standard ECMA-262 3rd Edition - December 1999.
+* This feature can also be found in  Python. JSON is a text format that is
+* completely language independent but uses conventions that are familiar
+* to programmers of the C-family of languages, including C, C++, C#, Java,
+* JavaScript, Perl, TCL, and many others. These properties make JSON an
+* ideal data-interchange language.
+*
+* This package provides a simple encoder and decoder for JSON notation. It
+* is intended for use with client-side Javascript applications that make
+* use of HTTPRequest to perform server communication functions - data can
+* be encoded into JSON notation for use in a client-side javascript, or
+* decoded from incoming Javascript requests. JSON format is native to
+* Javascript, and can be directly eval()'ed with no further parsing
+* overhead
+*
+* All strings should be in ASCII or UTF-8 format!
+*
+* LICENSE: Redistribution and use in source and binary forms, with or
+* without modification, are permitted provided that the following
+* conditions are met: Redistributions of source code must retain the
+* above copyright notice, this list of conditions and the following
+* disclaimer. Redistributions in binary form must reproduce the above
+* copyright notice, this list of conditions and the following disclaimer
+* in the documentation and/or other materials provided with the
+* distribution.
+*
+* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
+* NO EVENT SHALL CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
+* TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+* DAMAGE.
+*
+* @addtogroup  API
+* @author      Michal Migurski <mike-json@teczno.com>
+* @author      Matt Knapp <mdknapp[at]gmail[dot]com>
+* @author      Brett Stimmerman <brettstimmerman[at]gmail[dot]com>
+* @copyright   2005 Michal Migurski
+* @version     CVS: $Id: JSON.php,v 1.30 2006/03/08 16:10:20 migurski Exp $
+* @license     http://www.opensource.org/licenses/bsd-license.php
+* @see         http://pear.php.net/pepr/pepr-proposal-show.php?id=198
+*/
+
+/**
+* Marker constant for Services_JSON::decode(), used to flag stack state
+*/
+define('SERVICES_JSON_SLICE',   1);
+
+/**
+* Marker constant for Services_JSON::decode(), used to flag stack state
+*/
+define('SERVICES_JSON_IN_STR',  2);
+
+/**
+* Marker constant for Services_JSON::decode(), used to flag stack state
+*/
+define('SERVICES_JSON_IN_ARR',  3);
+
+/**
+* Marker constant for Services_JSON::decode(), used to flag stack state
+*/
+define('SERVICES_JSON_IN_OBJ',  4);
+
+/**
+* Marker constant for Services_JSON::decode(), used to flag stack state
+*/
+define('SERVICES_JSON_IN_CMT', 5);
+
+/**
+* Behavior switch for Services_JSON::decode()
+*/
+define('SERVICES_JSON_LOOSE_TYPE', 16);
+
+/**
+* Behavior switch for Services_JSON::decode()
+*/
+define('SERVICES_JSON_SUPPRESS_ERRORS', 32);
+
+/**
+ * Converts to and from JSON format.
+ *
+ * Brief example of use:
+ *
+ * <code>
+ * // create a new instance of Services_JSON
+ * $json = new Services_JSON();
+ *
+ * // convert a complexe value to JSON notation, and send it to the browser
+ * $value = array('foo', 'bar', array(1, 2, 'baz'), array(3, array(4)));
+ * $output = $json->encode($value);
+ *
+ * print($output);
+ * // prints: ["foo","bar",[1,2,"baz"],[3,[4]]]
+ *
+ * // accept incoming POST data, assumed to be in JSON notation
+ * $input = file_get_contents('php://input', 1000000);
+ * $value = $json->decode($input);
+ * </code>
+ *
+ * @addtogroup API
+ */
+class Services_JSON
+{
+   /**
+    * constructs a new JSON instance
+    *
+    * @param    int     $use    object behavior flags; combine with boolean-OR
+    *
+    *                           possible values:
+    *                           - SERVICES_JSON_LOOSE_TYPE:  loose typing.
+    *                                   "{...}" syntax creates associative arrays
+    *                                   instead of objects in decode().
+    *                           - SERVICES_JSON_SUPPRESS_ERRORS:  error suppression.
+    *                                   Values which can't be encoded (e.g. resources)
+    *                                   appear as NULL instead of throwing errors.
+    *                                   By default, a deeply-nested resource will
+    *                                   bubble up with an error, so all return values
+    *                                   from encode() should be checked with isError()
+    */
+    function Services_JSON($use = 0)
+    {
+        $this->use = $use;
+    }
+
+   /**
+    * convert a string from one UTF-16 char to one UTF-8 char
+    *
+    * Normally should be handled by mb_convert_encoding, but
+    * provides a slower PHP-only method for installations
+    * that lack the multibye string extension.
+    *
+    * @param    string  $utf16  UTF-16 character
+    * @return   string  UTF-8 character
+    * @access   private
+    */
+    function utf162utf8($utf16)
+    {
+        // oh please oh please oh please oh please oh please
+        if(function_exists('mb_convert_encoding')) {
+            return mb_convert_encoding($utf16, 'UTF-8', 'UTF-16');
+        }
+
+        $bytes = (ord($utf16{0}) << 8) | ord($utf16{1});
+
+        switch(true) {
+            case ((0x7F & $bytes) == $bytes):
+                // this case should never be reached, because we are in ASCII range
+                // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+                return chr(0x7F & $bytes);
+
+            case (0x07FF & $bytes) == $bytes:
+                // return a 2-byte UTF-8 character
+                // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+                return chr(0xC0 | (($bytes >> 6) & 0x1F))
+                     . chr(0x80 | ($bytes & 0x3F));
+
+            case (0xFFFF & $bytes) == $bytes:
+                // return a 3-byte UTF-8 character
+                // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+                return chr(0xE0 | (($bytes >> 12) & 0x0F))
+                     . chr(0x80 | (($bytes >> 6) & 0x3F))
+                     . chr(0x80 | ($bytes & 0x3F));
+        }
+
+        // ignoring UTF-32 for now, sorry
+        return '';
+    }
+
+   /**
+    * convert a string from one UTF-8 char to one UTF-16 char
+    *
+    * Normally should be handled by mb_convert_encoding, but
+    * provides a slower PHP-only method for installations
+    * that lack the multibye string extension.
+    *
+    * @param    string  $utf8   UTF-8 character
+    * @return   string  UTF-16 character
+    * @access   private
+    */
+    function utf82utf16($utf8)
+    {
+        // oh please oh please oh please oh please oh please
+        if(function_exists('mb_convert_encoding')) {
+            return mb_convert_encoding($utf8, 'UTF-16', 'UTF-8');
+        }
+
+        switch(strlen($utf8)) {
+            case 1:
+                // this case should never be reached, because we are in ASCII range
+                // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+                return $utf8;
+
+            case 2:
+                // return a UTF-16 character from a 2-byte UTF-8 char
+                // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+                return chr(0x07 & (ord($utf8{0}) >> 2))
+                     . chr((0xC0 & (ord($utf8{0}) << 6))
+                         | (0x3F & ord($utf8{1})));
+
+            case 3:
+                // return a UTF-16 character from a 3-byte UTF-8 char
+                // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+                return chr((0xF0 & (ord($utf8{0}) << 4))
+                         | (0x0F & (ord($utf8{1}) >> 2)))
+                     . chr((0xC0 & (ord($utf8{1}) << 6))
+                         | (0x7F & ord($utf8{2})));
+        }
+
+        // ignoring UTF-32 for now, sorry
+        return '';
+    }
+
+   /**
+    * encodes an arbitrary variable into JSON format
+    *
+    * @param    mixed   $var    any number, boolean, string, array, or object to be encoded.
+    *                           see argument 1 to Services_JSON() above for array-parsing behavior.
+    *                           if var is a strng, note that encode() always expects it
+    *                           to be in ASCII or UTF-8 format!
+    * @param    bool    $pretty    pretty-print output with indents and newlines
+    *
+    * @return   mixed   JSON string representation of input var or an error if a problem occurs
+    * @access   public
+    */
+    function encode($var, $pretty=false)
+    {
+        $this->indent = 0;
+        $this->pretty = $pretty;
+        $this->nameValSeparator = $pretty ? ': ' : ':';
+        return $this->encode2($var);
+    }
+
+   /**
+    * encodes an arbitrary variable into JSON format
+    *
+    * @param    mixed   $var    any number, boolean, string, array, or object to be encoded.
+    *                           see argument 1 to Services_JSON() above for array-parsing behavior.
+    *                           if var is a strng, note that encode() always expects it
+    *                           to be in ASCII or UTF-8 format!
+    *
+    * @return   mixed   JSON string representation of input var or an error if a problem occurs
+    * @access   private
+    */
+    function encode2($var)
+    {
+        if ($this->pretty) { 
+            $close = "\n" . str_repeat("\t", $this->indent);
+            $open = $close . "\t";
+            $mid = ',' . $open;
+        }
+        else {
+            $open = $close = '';
+            $mid = ',';
+        }
+
+        switch (gettype($var)) {
+            case 'boolean':
+                return $var ? 'true' : 'false';
+
+            case 'NULL':
+                return 'null';
+
+            case 'integer':
+                return (int) $var;
+
+            case 'double':
+            case 'float':
+                return (float) $var;
+
+            case 'string':
+                // STRINGS ARE EXPECTED TO BE IN ASCII OR UTF-8 FORMAT
+                $ascii = '';
+                $strlen_var = strlen($var);
+
+               /*
+                * Iterate over every character in the string,
+                * escaping with a slash or encoding to UTF-8 where necessary
+                */
+                for ($c = 0; $c < $strlen_var; ++$c) {
+
+                    $ord_var_c = ord($var{$c});
+
+                    switch (true) {
+                        case $ord_var_c == 0x08:
+                            $ascii .= '\b';
+                            break;
+                        case $ord_var_c == 0x09:
+                            $ascii .= '\t';
+                            break;
+                        case $ord_var_c == 0x0A:
+                            $ascii .= '\n';
+                            break;
+                        case $ord_var_c == 0x0C:
+                            $ascii .= '\f';
+                            break;
+                        case $ord_var_c == 0x0D:
+                            $ascii .= '\r';
+                            break;
+
+                        case $ord_var_c == 0x22:
+                        case $ord_var_c == 0x2F:
+                        case $ord_var_c == 0x5C:
+                            // double quote, slash, slosh
+                            $ascii .= '\\'.$var{$c};
+                            break;
+
+                        case (($ord_var_c >= 0x20) && ($ord_var_c <= 0x7F)):
+                            // characters U-00000000 - U-0000007F (same as ASCII)
+                            $ascii .= $var{$c};
+                            break;
+
+                        case (($ord_var_c & 0xE0) == 0xC0):
+                            // characters U-00000080 - U-000007FF, mask 110XXXXX
+                            // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+                            $char = pack('C*', $ord_var_c, ord($var{$c + 1}));
+                            $c += 1;
+                            $utf16 = $this->utf82utf16($char);
+                            $ascii .= sprintf('\u%04s', bin2hex($utf16));
+                            break;
+
+                        case (($ord_var_c & 0xF0) == 0xE0):
+                            // characters U-00000800 - U-0000FFFF, mask 1110XXXX
+                            // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+                            $char = pack('C*', $ord_var_c,
+                                         ord($var{$c + 1}),
+                                         ord($var{$c + 2}));
+                            $c += 2;
+                            $utf16 = $this->utf82utf16($char);
+                            $ascii .= sprintf('\u%04s', bin2hex($utf16));
+                            break;
+
+                        case (($ord_var_c & 0xF8) == 0xF0):
+                            // characters U-00010000 - U-001FFFFF, mask 11110XXX
+                            // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+                            $char = pack('C*', $ord_var_c,
+                                         ord($var{$c + 1}),
+                                         ord($var{$c + 2}),
+                                         ord($var{$c + 3}));
+                            $c += 3;
+                            $utf16 = $this->utf82utf16($char);
+                            $ascii .= sprintf('\u%04s', bin2hex($utf16));
+                            break;
+
+                        case (($ord_var_c & 0xFC) == 0xF8):
+                            // characters U-00200000 - U-03FFFFFF, mask 111110XX
+                            // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+                            $char = pack('C*', $ord_var_c,
+                                         ord($var{$c + 1}),
+                                         ord($var{$c + 2}),
+                                         ord($var{$c + 3}),
+                                         ord($var{$c + 4}));
+                            $c += 4;
+                            $utf16 = $this->utf82utf16($char);
+                            $ascii .= sprintf('\u%04s', bin2hex($utf16));
+                            break;
+
+                        case (($ord_var_c & 0xFE) == 0xFC):
+                            // characters U-04000000 - U-7FFFFFFF, mask 1111110X
+                            // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+                            $char = pack('C*', $ord_var_c,
+                                         ord($var{$c + 1}),
+                                         ord($var{$c + 2}),
+                                         ord($var{$c + 3}),
+                                         ord($var{$c + 4}),
+                                         ord($var{$c + 5}));
+                            $c += 5;
+                            $utf16 = $this->utf82utf16($char);
+                            $ascii .= sprintf('\u%04s', bin2hex($utf16));
+                            break;
+                    }
+                }
+
+                return '"'.$ascii.'"';
+
+            case 'array':
+               /*
+                * As per JSON spec if any array key is not an integer
+                * we must treat the the whole array as an object. We
+                * also try to catch a sparsely populated associative
+                * array with numeric keys here because some JS engines
+                * will create an array with empty indexes up to
+                * max_index which can cause memory issues and because
+                * the keys, which may be relevant, will be remapped
+                * otherwise.
+                *
+                * As per the ECMA and JSON specification an object may
+                * have any string as a property. Unfortunately due to
+                * a hole in the ECMA specification if the key is a
+                * ECMA reserved word or starts with a digit the
+                * parameter is only accessible using ECMAScript's
+                * bracket notation.
+                */
+
+                // treat as a JSON object
+                if (is_array($var) && count($var) && (array_keys($var) !== range(0, sizeof($var) - 1))) {
+                    $this->indent++;
+                    $properties = array_map(array($this, 'name_value'),
+                                            array_keys($var),
+                                            array_values($var));
+                    $this->indent--;
+
+                    foreach($properties as $property) {
+                        if(Services_JSON::isError($property)) {
+                            return $property;
+                        }
+                    }
+
+                    return '{' . $open . join($mid, $properties) . $close . '}';
+                }
+
+                // treat it like a regular array
+                $this->indent++;
+                $elements = array_map(array($this, 'encode2'), $var);
+                $this->indent--;
+                
+                foreach($elements as $element) {
+                    if(Services_JSON::isError($element)) {
+                        return $element;
+                    }
+                }
+
+                return '[' . $open . join($mid, $elements) . $close . ']';
+
+            case 'object':
+                $vars = get_object_vars($var);
+
+                $this->indent++;
+                $properties = array_map(array($this, 'name_value'),
+                                        array_keys($vars),
+                                        array_values($vars));
+                $this->indent--;
+
+                foreach($properties as $property) {
+                    if(Services_JSON::isError($property)) {
+                        return $property;
+                    }
+                }
+
+                return '{' . $open . join($mid, $properties) . $close . '}';
+
+            default:
+                return ($this->use & SERVICES_JSON_SUPPRESS_ERRORS)
+                    ? 'null'
+                    : new Services_JSON_Error(gettype($var)." can not be encoded as JSON string");
+        }
+    }
+
+   /**
+    * array-walking function for use in generating JSON-formatted name-value pairs
+    *
+    * @param    string  $name   name of key to use
+    * @param    mixed   $value  reference to an array element to be encoded
+    *
+    * @return   string  JSON-formatted name-value pair, like '"name":value'
+    * @access   private
+    */
+    function name_value($name, $value)
+    {
+        $encoded_value = $this->encode2($value);
+
+        if(Services_JSON::isError($encoded_value)) {
+            return $encoded_value;
+        }
+
+        return $this->encode2(strval($name)) . $this->nameValSeparator . $encoded_value;
+    }
+
+   /**
+    * reduce a string by removing leading and trailing comments and whitespace
+    *
+    * @param    $str    string      string value to strip of comments and whitespace
+    *
+    * @return   string  string value stripped of comments and whitespace
+    * @access   private
+    */
+    function reduce_string($str)
+    {
+        $str = preg_replace(array(
+
+                // eliminate single line comments in '// ...' form
+                '#^\s*//(.+)$#m',
+
+                // eliminate multi-line comments in '/* ... */' form, at start of string
+                '#^\s*/\*(.+)\*/#Us',
+
+                // eliminate multi-line comments in '/* ... */' form, at end of string
+                '#/\*(.+)\*/\s*$#Us'
+
+            ), '', $str);
+
+        // eliminate extraneous space
+        return trim($str);
+    }
+
+   /**
+    * decodes a JSON string into appropriate variable
+    *
+    * @param    string  $str    JSON-formatted string
+    *
+    * @return   mixed   number, boolean, string, array, or object
+    *                   corresponding to given JSON input string.
+    *                   See argument 1 to Services_JSON() above for object-output behavior.
+    *                   Note that decode() always returns strings
+    *                   in ASCII or UTF-8 format!
+    * @access   public
+    */
+    function decode($str)
+    {
+        $str = $this->reduce_string($str);
+
+        switch (strtolower($str)) {
+            case 'true':
+                return true;
+
+            case 'false':
+                return false;
+
+            case 'null':
+                return null;
+
+            default:
+                $m = array();
+
+                if (is_numeric($str)) {
+                    // Lookie-loo, it's a number
+
+                    // This would work on its own, but I'm trying to be
+                    // good about returning integers where appropriate:
+                    // return (float)$str;
+
+                    // Return float or int, as appropriate
+                    return ((float)$str == (integer)$str)
+                        ? (integer)$str
+                        : (float)$str;
+
+                } elseif (preg_match('/^("|\').*(\1)$/s', $str, $m) && $m[1] == $m[2]) {
+                    // STRINGS RETURNED IN UTF-8 FORMAT
+                    $delim = substr($str, 0, 1);
+                    $chrs = substr($str, 1, -1);
+                    $utf8 = '';
+                    $strlen_chrs = strlen($chrs);
+
+                    for ($c = 0; $c < $strlen_chrs; ++$c) {
+
+                        $substr_chrs_c_2 = substr($chrs, $c, 2);
+                        $ord_chrs_c = ord($chrs{$c});
+
+                        switch (true) {
+                            case $substr_chrs_c_2 == '\b':
+                                $utf8 .= chr(0x08);
+                                ++$c;
+                                break;
+                            case $substr_chrs_c_2 == '\t':
+                                $utf8 .= chr(0x09);
+                                ++$c;
+                                break;
+                            case $substr_chrs_c_2 == '\n':
+                                $utf8 .= chr(0x0A);
+                                ++$c;
+                                break;
+                            case $substr_chrs_c_2 == '\f':
+                                $utf8 .= chr(0x0C);
+                                ++$c;
+                                break;
+                            case $substr_chrs_c_2 == '\r':
+                                $utf8 .= chr(0x0D);
+                                ++$c;
+                                break;
+
+                            case $substr_chrs_c_2 == '\\"':
+                            case $substr_chrs_c_2 == '\\\'':
+                            case $substr_chrs_c_2 == '\\\\':
+                            case $substr_chrs_c_2 == '\\/':
+                                if (($delim == '"' && $substr_chrs_c_2 != '\\\'') ||
+                                   ($delim == "'" && $substr_chrs_c_2 != '\\"')) {
+                                    $utf8 .= $chrs{++$c};
+                                }
+                                break;
+
+                            case preg_match('/\\\u[0-9A-F]{4}/i', substr($chrs, $c, 6)):
+                                // single, escaped unicode character
+                                $utf16 = chr(hexdec(substr($chrs, ($c + 2), 2)))
+                                       . chr(hexdec(substr($chrs, ($c + 4), 2)));
+                                $utf8 .= $this->utf162utf8($utf16);
+                                $c += 5;
+                                break;
+
+                            case ($ord_chrs_c >= 0x20) && ($ord_chrs_c <= 0x7F):
+                                $utf8 .= $chrs{$c};
+                                break;
+
+                            case ($ord_chrs_c & 0xE0) == 0xC0:
+                                // characters U-00000080 - U-000007FF, mask 110XXXXX
+                                //see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+                                $utf8 .= substr($chrs, $c, 2);
+                                ++$c;
+                                break;
+
+                            case ($ord_chrs_c & 0xF0) == 0xE0:
+                                // characters U-00000800 - U-0000FFFF, mask 1110XXXX
+                                // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+                                $utf8 .= substr($chrs, $c, 3);
+                                $c += 2;
+                                break;
+
+                            case ($ord_chrs_c & 0xF8) == 0xF0:
+                                // characters U-00010000 - U-001FFFFF, mask 11110XXX
+                                // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+                                $utf8 .= substr($chrs, $c, 4);
+                                $c += 3;
+                                break;
+
+                            case ($ord_chrs_c & 0xFC) == 0xF8:
+                                // characters U-00200000 - U-03FFFFFF, mask 111110XX
+                                // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+                                $utf8 .= substr($chrs, $c, 5);
+                                $c += 4;
+                                break;
+
+                            case ($ord_chrs_c & 0xFE) == 0xFC:
+                                // characters U-04000000 - U-7FFFFFFF, mask 1111110X
+                                // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+                                $utf8 .= substr($chrs, $c, 6);
+                                $c += 5;
+                                break;
+
+                        }
+
+                    }
+
+                    return $utf8;
+
+                } elseif (preg_match('/^\[.*\]$/s', $str) || preg_match('/^\{.*\}$/s', $str)) {
+                    // array, or object notation
+
+                    if ($str{0} == '[') {
+                        $stk = array(SERVICES_JSON_IN_ARR);
+                        $arr = array();
+                    } else {
+                        if ($this->use & SERVICES_JSON_LOOSE_TYPE) {
+                            $stk = array(SERVICES_JSON_IN_OBJ);
+                            $obj = array();
+                        } else {
+                            $stk = array(SERVICES_JSON_IN_OBJ);
+                            $obj = new stdClass();
+                        }
+                    }
+
+                    array_push($stk, array('what'  => SERVICES_JSON_SLICE,
+                                           'where' => 0,
+                                           'delim' => false));
+
+                    $chrs = substr($str, 1, -1);
+                    $chrs = $this->reduce_string($chrs);
+
+                    if ($chrs == '') {
+                        if (reset($stk) == SERVICES_JSON_IN_ARR) {
+                            return $arr;
+
+                        } else {
+                            return $obj;
+
+                        }
+                    }
+
+                    //print("\nparsing {$chrs}\n");
+
+                    $strlen_chrs = strlen($chrs);
+
+                    for ($c = 0; $c <= $strlen_chrs; ++$c) {
+
+                        $top = end($stk);
+                        $substr_chrs_c_2 = substr($chrs, $c, 2);
+
+                        if (($c == $strlen_chrs) || (($chrs{$c} == ',') && ($top['what'] == SERVICES_JSON_SLICE))) {
+                            // found a comma that is not inside a string, array, etc.,
+                            // OR we've reached the end of the character list
+                            $slice = substr($chrs, $top['where'], ($c - $top['where']));
+                            array_push($stk, array('what' => SERVICES_JSON_SLICE, 'where' => ($c + 1), 'delim' => false));
+                            //print("Found split at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n");
+
+                            if (reset($stk) == SERVICES_JSON_IN_ARR) {
+                                // we are in an array, so just push an element onto the stack
+                                array_push($arr, $this->decode($slice));
+
+                            } elseif (reset($stk) == SERVICES_JSON_IN_OBJ) {
+                                // we are in an object, so figure
+                                // out the property name and set an
+                                // element in an associative array,
+                                // for now
+                                $parts = array();
+                                
+                                if (preg_match('/^\s*(["\'].*[^\\\]["\'])\s*:\s*(\S.*),?$/Uis', $slice, $parts)) {
+                                    // "name":value pair
+                                    $key = $this->decode($parts[1]);
+                                    $val = $this->decode($parts[2]);
+
+                                    if ($this->use & SERVICES_JSON_LOOSE_TYPE) {
+                                        $obj[$key] = $val;
+                                    } else {
+                                        $obj->$key = $val;
+                                    }
+                                } elseif (preg_match('/^\s*(\w+)\s*:\s*(\S.*),?$/Uis', $slice, $parts)) {
+                                    // name:value pair, where name is unquoted
+                                    $key = $parts[1];
+                                    $val = $this->decode($parts[2]);
+
+                                    if ($this->use & SERVICES_JSON_LOOSE_TYPE) {
+                                        $obj[$key] = $val;
+                                    } else {
+                                        $obj->$key = $val;
+                                    }
+                                }
+
+                            }
+
+                        } elseif ((($chrs{$c} == '"') || ($chrs{$c} == "'")) && ($top['what'] != SERVICES_JSON_IN_STR)) {
+                            // found a quote, and we are not inside a string
+                            array_push($stk, array('what' => SERVICES_JSON_IN_STR, 'where' => $c, 'delim' => $chrs{$c}));
+                            //print("Found start of string at {$c}\n");
+
+                        } elseif (($chrs{$c} == $top['delim']) &&
+                                 ($top['what'] == SERVICES_JSON_IN_STR) &&
+                                 (($chrs{$c - 1} != '\\') ||
+                                 ($chrs{$c - 1} == '\\' && $chrs{$c - 2} == '\\'))) {
+                            // found a quote, we're in a string, and it's not escaped
+                            array_pop($stk);
+                            //print("Found end of string at {$c}: ".substr($chrs, $top['where'], (1 + 1 + $c - $top['where']))."\n");
+
+                        } elseif (($chrs{$c} == '[') &&
+                                 in_array($top['what'], array(SERVICES_JSON_SLICE, SERVICES_JSON_IN_ARR, SERVICES_JSON_IN_OBJ))) {
+                            // found a left-bracket, and we are in an array, object, or slice
+                            array_push($stk, array('what' => SERVICES_JSON_IN_ARR, 'where' => $c, 'delim' => false));
+                            //print("Found start of array at {$c}\n");
+
+                        } elseif (($chrs{$c} == ']') && ($top['what'] == SERVICES_JSON_IN_ARR)) {
+                            // found a right-bracket, and we're in an array
+                            array_pop($stk);
+                            //print("Found end of array at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n");
+
+                        } elseif (($chrs{$c} == '{') &&
+                                 in_array($top['what'], array(SERVICES_JSON_SLICE, SERVICES_JSON_IN_ARR, SERVICES_JSON_IN_OBJ))) {
+                            // found a left-brace, and we are in an array, object, or slice
+                            array_push($stk, array('what' => SERVICES_JSON_IN_OBJ, 'where' => $c, 'delim' => false));
+                            //print("Found start of object at {$c}\n");
+
+                        } elseif (($chrs{$c} == '}') && ($top['what'] == SERVICES_JSON_IN_OBJ)) {
+                            // found a right-brace, and we're in an object
+                            array_pop($stk);
+                            //print("Found end of object at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n");
+
+                        } elseif (($substr_chrs_c_2 == '/*') &&
+                                 in_array($top['what'], array(SERVICES_JSON_SLICE, SERVICES_JSON_IN_ARR, SERVICES_JSON_IN_OBJ))) {
+                            // found a comment start, and we are in an array, object, or slice
+                            array_push($stk, array('what' => SERVICES_JSON_IN_CMT, 'where' => $c, 'delim' => false));
+                            $c++;
+                            //print("Found start of comment at {$c}\n");
+
+                        } elseif (($substr_chrs_c_2 == '*/') && ($top['what'] == SERVICES_JSON_IN_CMT)) {
+                            // found a comment end, and we're in one now
+                            array_pop($stk);
+                            $c++;
+
+                            for ($i = $top['where']; $i <= $c; ++$i)
+                                $chrs = substr_replace($chrs, ' ', $i, 1);
+
+                            //print("Found end of comment at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n");
+
+                        }
+
+                    }
+
+                    if (reset($stk) == SERVICES_JSON_IN_ARR) {
+                        return $arr;
+
+                    } elseif (reset($stk) == SERVICES_JSON_IN_OBJ) {
+                        return $obj;
+
+                    }
+
+                }
+        }
+    }
+
+    /**
+     * @todo Ultimately, this should just call PEAR::isError()
+     */
+    function isError($data, $code = null)
+    {
+        if (class_exists('pear')) {
+            return PEAR::isError($data, $code);
+        } elseif (is_object($data) && (get_class($data) == 'services_json_error' ||
+                                 is_subclass_of($data, 'services_json_error'))) {
+            return true;
+        }
+
+        return false;
+    }
+}
+
+if (class_exists('PEAR_Error')) {
+
+    /**
+     * @addtogroup API
+     */
+    class Services_JSON_Error extends PEAR_Error
+    {
+        function Services_JSON_Error($message = 'unknown error', $code = null,
+                                     $mode = null, $options = null, $userinfo = null)
+        {
+            parent::PEAR_Error($message, $code, $mode, $options, $userinfo);
+        }
+    }
+
+} else {
+
+    /**
+     * @todo Ultimately, this class shall be descended from PEAR_Error
+     * @addtogroup API
+     */
+    class Services_JSON_Error
+    {
+        function Services_JSON_Error($message = 'unknown error', $code = null,
+                                     $mode = null, $options = null, $userinfo = null)
+        {
+
+        }
+    }
+
+}
+    
+?>
Index: /MediaWiki/branches/1.11/includes/api/ApiFormatPhp.php
===================================================================
--- /MediaWiki/branches/1.11/includes/api/ApiFormatPhp.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/api/ApiFormatPhp.php	(revision 1280)
@@ -0,0 +1,56 @@
+<?php
+
+/*
+ * Created on Oct 22, 2006
+ *
+ * API for MediaWiki 1.8+
+ *
+ * Copyright (C) 2006 Yuri Astrakhan <FirstnameLastname@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ */
+
+if (!defined('MEDIAWIKI')) {
+	// Eclipse helper - will be ignored in production
+	require_once ('ApiFormatBase.php');
+}
+
+/**
+ * @addtogroup API
+ */
+class ApiFormatPhp extends ApiFormatBase {
+
+	public function __construct($main, $format) {
+		parent :: __construct($main, $format);
+	}
+
+	public function getMimeType() {
+		return 'application/vnd.php.serialized';
+	}
+
+	public function execute() {
+		$this->printText(serialize($this->getResultData()));
+	}
+
+	protected function getDescription() {
+		return 'Output data in serialized PHP format' . parent :: getDescription();
+	}
+
+	public function getVersion() {
+		return __CLASS__ . ': $Id: ApiFormatPhp.php 21402 2007-04-20 08:55:14Z nickj $';
+	}
+}
+?>
Index: /MediaWiki/branches/1.11/includes/api/ApiFormatWddx.php
===================================================================
--- /MediaWiki/branches/1.11/includes/api/ApiFormatWddx.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/api/ApiFormatWddx.php	(revision 1280)
@@ -0,0 +1,91 @@
+<?php
+
+/*
+ * Created on Oct 22, 2006
+ *
+ * API for MediaWiki 1.8+
+ *
+ * Copyright (C) 2006 Yuri Astrakhan <FirstnameLastname@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ */
+
+if (!defined('MEDIAWIKI')) {
+	// Eclipse helper - will be ignored in production
+	require_once ('ApiFormatBase.php');
+}
+
+/**
+ * @addtogroup API
+ */
+class ApiFormatWddx extends ApiFormatBase {
+
+	public function __construct($main, $format) {
+		parent :: __construct($main, $format);
+	}
+
+	public function getMimeType() {
+		return 'text/xml';
+	}
+
+	public function execute() {
+		if (function_exists('wddx_serialize_value')) {
+			$this->printText(wddx_serialize_value($this->getResultData()));
+		} else {
+			$this->printText('<?xml version="1.0" encoding="utf-8"?>');
+			$this->printText('<wddxPacket version="1.0"><header/><data>');
+			$this->slowWddxPrinter($this->getResultData());
+			$this->printText('</data></wddxPacket>');
+		}
+	}
+
+	/**
+	* Recursivelly go through the object and output its data in WDDX format.
+	*/
+	function slowWddxPrinter($elemValue) {
+		switch (gettype($elemValue)) {
+			case 'array' :
+				$this->printText('<struct>');
+				foreach ($elemValue as $subElemName => $subElemValue) {
+					$this->printText(wfElement('var', array (
+						'name' => $subElemName
+					), null));
+					$this->slowWddxPrinter($subElemValue);
+					$this->printText('</var>');
+				}
+				$this->printText('</struct>');
+				break;
+			case 'integer' :
+			case 'double' :
+				$this->printText(wfElement('number', null, $elemValue));
+				break;
+			case 'string' :
+				$this->printText(wfElement('string', null, $elemValue));
+				break;
+			default :
+				ApiBase :: dieDebug(__METHOD__, 'Unknown type ' . gettype($elemValue));
+		}
+	}
+
+	protected function getDescription() {
+		return 'Output data in WDDX format' . parent :: getDescription();
+	}
+
+	public function getVersion() {
+		return __CLASS__ . ': $Id: ApiFormatWddx.php 21402 2007-04-20 08:55:14Z nickj $';
+	}
+}
+?>
Index: /MediaWiki/branches/1.11/includes/api/ApiFormatXml.php
===================================================================
--- /MediaWiki/branches/1.11/includes/api/ApiFormatXml.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/api/ApiFormatXml.php	(revision 1280)
@@ -0,0 +1,147 @@
+<?php
+
+/*
+ * Created on Sep 19, 2006
+ *
+ * API for MediaWiki 1.8+
+ *
+ * Copyright (C) 2006 Yuri Astrakhan <FirstnameLastname@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ */
+
+if (!defined('MEDIAWIKI')) {
+	// Eclipse helper - will be ignored in production
+	require_once ('ApiFormatBase.php');
+}
+
+/**
+ * @addtogroup API
+ */
+class ApiFormatXml extends ApiFormatBase {
+
+	private $mRootElemName = 'api';
+
+	public function __construct($main, $format) {
+		parent :: __construct($main, $format);
+	}
+
+	public function getMimeType() {
+		return 'text/xml';
+	}
+
+	public function getNeedsRawData() {
+		return true;
+	}
+	
+	public function setRootElement($rootElemName) {
+		$this->mRootElemName = $rootElemName;
+	}
+
+	public function execute() {
+		$this->printText('<?xml version="1.0" encoding="utf-8"?>');
+		$this->recXmlPrint($this->mRootElemName, $this->getResultData(), $this->getIsHtml() ? -2 : null);
+	}
+
+	/**
+	* This method takes an array and converts it into an xml.
+	* There are several noteworthy cases:
+	*
+	*  If array contains a key '_element', then the code assumes that ALL other keys are not important and replaces them with the value['_element'].
+	*	Example:	name='root',  value = array( '_element'=>'page', 'x', 'y', 'z') creates <root>  <page>x</page>  <page>y</page>  <page>z</page> </root>
+	*
+	*  If any of the array's element key is '*', then the code treats all other key->value pairs as attributes, and the value['*'] as the element's content.
+	*	Example:	name='root',  value = array( '*'=>'text', 'lang'=>'en', 'id'=>10)   creates  <root lang='en' id='10'>text</root>
+	*
+	* If neither key is found, all keys become element names, and values become element content.
+	* The method is recursive, so the same rules apply to any sub-arrays.
+	*/
+	function recXmlPrint($elemName, $elemValue, $indent) {
+		if (!is_null($indent)) {
+			$indent += 2;
+			$indstr = "\n" . str_repeat(" ", $indent);
+		} else {
+			$indstr = '';
+		}
+
+		switch (gettype($elemValue)) {
+			case 'array' :
+
+				if (isset ($elemValue['*'])) {
+					$subElemContent = $elemValue['*'];
+					unset ($elemValue['*']);
+				} else {
+					$subElemContent = null;
+				}
+
+				if (isset ($elemValue['_element'])) {
+					$subElemIndName = $elemValue['_element'];
+					unset ($elemValue['_element']);
+				} else {
+					$subElemIndName = null;
+				}
+
+				$indElements = array ();
+				$subElements = array ();
+				foreach ($elemValue as $subElemId => & $subElemValue) {
+					if (gettype($subElemId) === 'integer') {
+						$indElements[] = $subElemValue;
+						unset ($elemValue[$subElemId]);
+					} elseif (is_array($subElemValue)) {
+						$subElements[$subElemId] = $subElemValue;
+						unset ($elemValue[$subElemId]);
+					}
+				}
+
+				if (is_null($subElemIndName) && !empty ($indElements))
+					ApiBase :: dieDebug(__METHOD__, "($elemName, ...) has integer keys without _element value. Use ApiResult::setIndexedTagName().");
+
+				if (!empty ($subElements) && !empty ($indElements) && !is_null($subElemContent))
+					ApiBase :: dieDebug(__METHOD__, "($elemName, ...) has content and subelements");
+
+				if (!is_null($subElemContent)) {
+					$this->printText($indstr . wfElement($elemName, $elemValue, $subElemContent));
+				} elseif (empty ($indElements) && empty ($subElements)) {
+						$this->printText($indstr . wfElement($elemName, $elemValue));
+				} else {
+					$this->printText($indstr . wfElement($elemName, $elemValue, null));
+
+					foreach ($subElements as $subElemId => & $subElemValue)
+						$this->recXmlPrint($subElemId, $subElemValue, $indent);
+
+					foreach ($indElements as $subElemId => & $subElemValue)
+						$this->recXmlPrint($subElemIndName, $subElemValue, $indent);
+
+					$this->printText($indstr . wfCloseElement($elemName));
+				}
+				break;
+			case 'object' :
+				// ignore
+				break;
+			default :
+				$this->printText($indstr . wfElement($elemName, null, $elemValue));
+				break;
+		}
+	}
+	protected function getDescription() {
+		return 'Output data in XML format' . parent :: getDescription();
+	}
+
+	public function getVersion() {
+		return __CLASS__ . ': $Id: ApiFormatXml.php 21402 2007-04-20 08:55:14Z nickj $';
+	}
+}
+?>
Index: /MediaWiki/branches/1.11/includes/api/ApiFormatYaml.php
===================================================================
--- /MediaWiki/branches/1.11/includes/api/ApiFormatYaml.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/api/ApiFormatYaml.php	(revision 1280)
@@ -0,0 +1,56 @@
+<?php
+
+/*
+ * Created on Sep 19, 2006
+ *
+ * API for MediaWiki 1.8+
+ *
+ * Copyright (C) 2006 Yuri Astrakhan <FirstnameLastname@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ */
+
+if (!defined('MEDIAWIKI')) {
+	// Eclipse helper - will be ignored in production
+	require_once ('ApiFormatBase.php');
+}
+
+/**
+ * @addtogroup API
+ */
+class ApiFormatYaml extends ApiFormatBase {
+
+	public function __construct($main, $format) {
+		parent :: __construct($main, $format);
+	}
+
+	public function getMimeType() {
+		return 'application/yaml';
+	}
+
+	public function execute() {
+		$this->printText(Spyc :: YAMLDump($this->getResultData()));
+	}
+
+	protected function getDescription() {
+		return 'Output data in YAML format' . parent :: getDescription();
+	}
+
+	public function getVersion() {
+		return __CLASS__ . ': $Id: ApiFormatYaml.php 21402 2007-04-20 08:55:14Z nickj $';
+	}
+}
+?>
Index: /MediaWiki/branches/1.11/includes/api/ApiFormatYaml_spyc.php
===================================================================
--- /MediaWiki/branches/1.11/includes/api/ApiFormatYaml_spyc.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/api/ApiFormatYaml_spyc.php	(revision 1280)
@@ -0,0 +1,860 @@
+<?php
+  /** 
+   * Spyc -- A Simple PHP YAML Class
+   * @version 0.2.3 -- 2006-02-04
+   * @author Chris Wanstrath <chris@ozmm.org>
+   * @see http://spyc.sourceforge.net/
+   * @copyright Copyright 2005-2006 Chris Wanstrath
+   * @license http://www.opensource.org/licenses/mit-license.php MIT License
+   */
+
+  /** 
+   * A node, used by Spyc for parsing YAML.
+   * @addtogroup API
+   */
+  class YAMLNode {
+    /**#@+
+     * @access public
+     * @var string
+     */ 
+    var $parent;
+    var $id;
+    /**#@-*/
+    /** 
+     * @access public
+     * @var mixed
+     */
+    var $data;
+    /** 
+     * @access public
+     * @var int
+     */
+    var $indent;
+    /** 
+     * @access public
+     * @var bool
+     */
+    var $children = false;
+
+    /**
+     * The constructor assigns the node a unique ID.
+     * @access public
+     * @return void
+     */
+    function YAMLNode() {
+      $this->id = uniqid('');
+    }
+  }
+
+  /**
+   * The Simple PHP YAML Class.
+   *
+   * This class can be used to read a YAML file and convert its contents
+   * into a PHP array.  It currently supports a very limited subsection of
+   * the YAML spec.
+   *
+   * Usage:
+   * <code>
+   *   $parser = new Spyc;
+   *   $array  = $parser->load($file);
+   * </code>
+   * @addtogroup API
+   */
+  class Spyc {
+    
+    /**
+     * Load YAML into a PHP array statically
+     *
+     * The load method, when supplied with a YAML stream (string or file), 
+     * will do its best to convert YAML in a file into a PHP array.  Pretty 
+     * simple.
+     *  Usage: 
+     *  <code>
+     *   $array = Spyc::YAMLLoad('lucky.yml');
+     *   print_r($array);
+     *  </code>
+     * @access public
+     * @return array
+     * @param string $input Path of YAML file or string containing YAML
+     */
+    function YAMLLoad($input) {
+      $spyc = new Spyc;
+      return $spyc->load($input);
+    }
+    
+    /**
+     * Dump YAML from PHP array statically
+     *
+     * The dump method, when supplied with an array, will do its best
+     * to convert the array into friendly YAML.  Pretty simple.  Feel free to
+     * save the returned string as nothing.yml and pass it around.
+     *
+     * Oh, and you can decide how big the indent is and what the wordwrap
+     * for folding is.  Pretty cool -- just pass in 'false' for either if 
+     * you want to use the default.
+     *
+     * Indent's default is 2 spaces, wordwrap's default is 40 characters.  And
+     * you can turn off wordwrap by passing in 0.
+     *
+     * @access public
+     * @static
+     * @return string
+     * @param array $array PHP array
+     * @param int $indent Pass in false to use the default, which is 2 
+     * @param int $wordwrap Pass in 0 for no wordwrap, false for default (40)
+     */
+    public static function YAMLDump($array,$indent = false,$wordwrap = false) {
+      $spyc = new Spyc;
+      return $spyc->dump($array,$indent,$wordwrap);
+    }
+  
+    /**
+     * Load YAML into a PHP array from an instantiated object
+     *
+     * The load method, when supplied with a YAML stream (string or file path), 
+     * will do its best to convert the YAML into a PHP array.  Pretty simple.
+     *  Usage: 
+     *  <code>
+     *   $parser = new Spyc;
+     *   $array  = $parser->load('lucky.yml');
+     *   print_r($array);
+     *  </code>
+     * @access public
+     * @return array
+     * @param string $input Path of YAML file or string containing YAML
+     */
+    function load($input) {
+      // See what type of input we're talking about
+      // If it's not a file, assume it's a string
+      if (!empty($input) && (strpos($input, "\n") === false) 
+          && file_exists($input)) {
+        $yaml = file($input);
+      } else {
+        $yaml = explode("\n",$input);
+      }
+      // Initiate some objects and values
+      $base              = new YAMLNode;
+      $base->indent      = 0;
+      $this->_lastIndent = 0;
+      $this->_lastNode   = $base->id;
+      $this->_inBlock    = false;
+      $this->_isInline   = false;
+  
+      foreach ($yaml as $linenum => $line) {
+        $ifchk = trim($line);
+
+        // If the line starts with a tab (instead of a space), throw a fit.
+        if (preg_match('/^(\t)+(\w+)/', $line)) {
+          $err = 'ERROR: Line '. ($linenum + 1) .' in your input YAML begins'.
+                 ' with a tab.  YAML only recognizes spaces.  Please reformat.';
+          die($err);
+        }
+        
+        if ($this->_inBlock === false && empty($ifchk)) {
+          continue;
+        } elseif ($this->_inBlock == true && empty($ifchk)) {
+          $last =& $this->_allNodes[$this->_lastNode];
+          $last->data[key($last->data)] .= "\n";
+        } elseif ($ifchk{0} != '#' && substr($ifchk,0,3) != '---') {
+          // Create a new node and get its indent
+          $node         = new YAMLNode;
+          $node->indent = $this->_getIndent($line);
+          
+          // Check where the node lies in the hierarchy
+          if ($this->_lastIndent == $node->indent) {
+            // If we're in a block, add the text to the parent's data
+            if ($this->_inBlock === true) {
+              $parent =& $this->_allNodes[$this->_lastNode];
+              $parent->data[key($parent->data)] .= trim($line).$this->_blockEnd;
+            } else {
+              // The current node's parent is the same as the previous node's
+              if (isset($this->_allNodes[$this->_lastNode])) {
+                $node->parent = $this->_allNodes[$this->_lastNode]->parent;
+              }
+            }
+          } elseif ($this->_lastIndent < $node->indent) {            
+            if ($this->_inBlock === true) {
+              $parent =& $this->_allNodes[$this->_lastNode];
+              $parent->data[key($parent->data)] .= trim($line).$this->_blockEnd;
+            } elseif ($this->_inBlock === false) {
+              // The current node's parent is the previous node
+              $node->parent = $this->_lastNode;
+              
+              // If the value of the last node's data was > or | we need to 
+              // start blocking i.e. taking in all lines as a text value until 
+              // we drop our indent.
+              $parent =& $this->_allNodes[$node->parent];
+              $this->_allNodes[$node->parent]->children = true;
+              if (is_array($parent->data)) {
+                $chk = $parent->data[key($parent->data)];
+                if ($chk === '>') {
+                  $this->_inBlock  = true;
+                  $this->_blockEnd = ' ';
+                  $parent->data[key($parent->data)] = 
+                        str_replace('>','',$parent->data[key($parent->data)]);
+                  $parent->data[key($parent->data)] .= trim($line).' ';
+                  $this->_allNodes[$node->parent]->children = false;
+                  $this->_lastIndent = $node->indent;
+                } elseif ($chk === '|') {
+                  $this->_inBlock  = true;
+                  $this->_blockEnd = "\n";
+                  $parent->data[key($parent->data)] =               
+                        str_replace('|','',$parent->data[key($parent->data)]);
+                  $parent->data[key($parent->data)] .= trim($line)."\n";
+                  $this->_allNodes[$node->parent]->children = false;
+                  $this->_lastIndent = $node->indent;
+                }
+              }
+            }
+          } elseif ($this->_lastIndent > $node->indent) {
+            // Any block we had going is dead now
+            if ($this->_inBlock === true) {
+              $this->_inBlock = false;
+              if ($this->_blockEnd = "\n") {
+                $last =& $this->_allNodes[$this->_lastNode];
+                $last->data[key($last->data)] = 
+                      trim($last->data[key($last->data)]);
+              }
+            }
+            
+            // We don't know the parent of the node so we have to find it
+            // foreach ($this->_allNodes as $n) {
+            foreach ($this->_indentSort[$node->indent] as $n) {
+              if ($n->indent == $node->indent) {
+                $node->parent = $n->parent;
+              }
+            }
+          }
+        
+          if ($this->_inBlock === false) {
+            // Set these properties with information from our current node
+            $this->_lastIndent = $node->indent;
+            // Set the last node
+            $this->_lastNode = $node->id;
+            // Parse the YAML line and return its data
+            $node->data = $this->_parseLine($line);
+            // Add the node to the master list
+            $this->_allNodes[$node->id] = $node;
+            // Add a reference to the node in an indent array
+            $this->_indentSort[$node->indent][] =& $this->_allNodes[$node->id];
+            // Add a reference to the node in a References array if this node
+            // has a YAML reference in it.
+            if ( 
+              ( (is_array($node->data)) &&
+                isset($node->data[key($node->data)]) &&
+                (!is_array($node->data[key($node->data)])) )
+              &&
+              ( (preg_match('/^&([^ ]+)/',$node->data[key($node->data)])) 
+                || 
+                (preg_match('/^\*([^ ]+)/',$node->data[key($node->data)])) )
+            ) {
+                $this->_haveRefs[] =& $this->_allNodes[$node->id];
+            } elseif (
+              ( (is_array($node->data)) &&
+                isset($node->data[key($node->data)]) &&
+                 (is_array($node->data[key($node->data)])) )
+            ) {
+              // Incomplete reference making code.  Ugly, needs cleaned up.
+              foreach ($node->data[key($node->data)] as $d) {
+                if ( !is_array($d) && 
+                  ( (preg_match('/^&([^ ]+)/',$d)) 
+                    || 
+                    (preg_match('/^\*([^ ]+)/',$d)) )
+                  ) {
+                    $this->_haveRefs[] =& $this->_allNodes[$node->id];
+                }
+              }
+            }
+          }
+        }
+      }
+      unset($node);
+      
+      // Here we travel through node-space and pick out references (& and *)
+      $this->_linkReferences();
+      
+      // Build the PHP array out of node-space
+      $trunk = $this->_buildArray();
+      return $trunk;
+    }
+  
+    /**
+     * Dump PHP array to YAML
+     *
+     * The dump method, when supplied with an array, will do its best
+     * to convert the array into friendly YAML.  Pretty simple.  Feel free to
+     * save the returned string as tasteful.yml and pass it around.
+     *
+     * Oh, and you can decide how big the indent is and what the wordwrap
+     * for folding is.  Pretty cool -- just pass in 'false' for either if 
+     * you want to use the default.
+     *
+     * Indent's default is 2 spaces, wordwrap's default is 40 characters.  And
+     * you can turn off wordwrap by passing in 0.
+     *
+     * @access public
+     * @return string
+     * @param array $array PHP array
+     * @param int $indent Pass in false to use the default, which is 2 
+     * @param int $wordwrap Pass in 0 for no wordwrap, false for default (40)
+     */
+    function dump($array,$indent = false,$wordwrap = false) {
+      // Dumps to some very clean YAML.  We'll have to add some more features
+      // and options soon.  And better support for folding.
+
+      // New features and options.
+      if ($indent === false or !is_numeric($indent)) {
+        $this->_dumpIndent = 2;
+      } else {
+        $this->_dumpIndent = $indent;
+      }
+      
+      if ($wordwrap === false or !is_numeric($wordwrap)) {
+        $this->_dumpWordWrap = 40;
+      } else {
+        $this->_dumpWordWrap = $wordwrap;
+      }
+      
+      // New YAML document
+      $string = "---\n";
+      
+      // Start at the base of the array and move through it.
+      foreach ($array as $key => $value) {
+        $string .= $this->_yamlize($key,$value,0);
+      }
+      return $string;
+    }
+  
+    /**** Private Properties ****/
+    
+    /**#@+
+     * @access private
+     * @var mixed
+     */ 
+    var $_haveRefs;
+    var $_allNodes;
+    var $_lastIndent;
+    var $_lastNode;
+    var $_inBlock;
+    var $_isInline;
+    var $_dumpIndent;
+    var $_dumpWordWrap;
+    /**#@-*/
+
+    /**** Private Methods ****/
+    
+    /**
+     * Attempts to convert a key / value array item to YAML
+     * @access private
+     * @return string
+     * @param $key The name of the key
+     * @param $value The value of the item
+     * @param $indent The indent of the current node
+     */    
+    function _yamlize($key,$value,$indent) {
+      if (is_array($value)) {
+        // It has children.  What to do?
+        // Make it the right kind of item
+        $string = $this->_dumpNode($key,NULL,$indent);
+        // Add the indent
+        $indent += $this->_dumpIndent;
+        // Yamlize the array
+        $string .= $this->_yamlizeArray($value,$indent);
+      } elseif (!is_array($value)) {
+        // It doesn't have children.  Yip.
+        $string = $this->_dumpNode($key,$value,$indent);
+      }
+      return $string;
+    }
+    
+    /**
+     * Attempts to convert an array to YAML
+     * @access private
+     * @return string
+     * @param $array The array you want to convert
+     * @param $indent The indent of the current level
+     */ 
+    function _yamlizeArray($array,$indent) {
+      if (is_array($array)) {
+        $string = '';
+        foreach ($array as $key => $value) {
+          $string .= $this->_yamlize($key,$value,$indent);
+        }
+        return $string;
+      } else {
+        return false;
+      }
+    }
+  
+    /**
+     * Returns YAML from a key and a value
+     * @access private
+     * @return string
+     * @param $key The name of the key
+     * @param $value The value of the item
+     * @param $indent The indent of the current node
+     */ 
+    function _dumpNode($key,$value,$indent) {
+      // do some folding here, for blocks
+      if (strpos($value,"\n")) {
+        $value = $this->_doLiteralBlock($value,$indent);
+      } else {  
+        $value  = $this->_doFolding($value,$indent);
+      }
+      
+      $spaces = str_repeat(' ',$indent);
+
+      if (is_int($key)) {
+        // It's a sequence
+        $string = $spaces.'- '.$value."\n";
+      } else {
+        // It's mapped
+        $string = $spaces.$key.': '.$value."\n";
+      }
+      return $string;
+    }
+
+    /**
+     * Creates a literal block for dumping
+     * @access private
+     * @return string
+     * @param $value 
+     * @param $indent int The value of the indent
+     */ 
+    function _doLiteralBlock($value,$indent) {
+      $exploded = explode("\n",$value);
+      $newValue = '|';
+      $indent  += $this->_dumpIndent;
+      $spaces   = str_repeat(' ',$indent);
+      foreach ($exploded as $line) {
+        $newValue .= "\n" . $spaces . trim($line);
+      }
+      return $newValue;
+    }
+    
+    /**
+     * Folds a string of text, if necessary
+     * @access private
+     * @return string
+     * @param $value The string you wish to fold
+     */
+    function _doFolding($value,$indent) {
+      // Don't do anything if wordwrap is set to 0
+      if ($this->_dumpWordWrap === 0) {
+        return $value;
+      }
+      
+      if (strlen($value) > $this->_dumpWordWrap) {
+        $indent += $this->_dumpIndent;
+        $indent = str_repeat(' ',$indent);
+        $wrapped = wordwrap($value,$this->_dumpWordWrap,"\n$indent");
+        $value   = ">\n".$indent.$wrapped;
+      }
+      return $value;
+    }
+  
+    /* Methods used in loading */
+    
+    /**
+     * Finds and returns the indentation of a YAML line
+     * @access private
+     * @return int
+     * @param string $line A line from the YAML file
+     */
+    function _getIndent($line) {
+      $match = array();
+      preg_match('/^\s{1,}/',$line,$match);
+      if (!empty($match[0])) {
+        $indent = substr_count($match[0],' ');
+      } else {
+        $indent = 0;
+      }
+      return $indent;
+    }
+
+    /**
+     * Parses YAML code and returns an array for a node
+     * @access private
+     * @return array
+     * @param string $line A line from the YAML file
+     */
+    function _parseLine($line) {
+      $line = trim($line);  
+
+      $array = array();
+
+      if (preg_match('/^-(.*):$/',$line)) {
+        // It's a mapped sequence
+        $key         = trim(substr(substr($line,1),0,-1));
+        $array[$key] = '';
+      } elseif ($line[0] == '-' && substr($line,0,3) != '---') {
+        // It's a list item but not a new stream
+        if (strlen($line) > 1) {
+          $value   = trim(substr($line,1));
+          // Set the type of the value.  Int, string, etc
+          $value   = $this->_toType($value);
+          $array[] = $value;
+        } else {
+          $array[] = array();
+        }
+      } elseif (preg_match('/^(.+):/',$line,$key)) {
+        // It's a key/value pair most likely
+        // If the key is in double quotes pull it out
+        $matches = array();
+        if (preg_match('/^(["\'](.*)["\'](\s)*:)/',$line,$matches)) {
+          $value = trim(str_replace($matches[1],'',$line));
+          $key   = $matches[2];
+        } else {
+          // Do some guesswork as to the key and the value
+          $explode = explode(':',$line);
+          $key     = trim($explode[0]);
+          array_shift($explode);
+          $value   = trim(implode(':',$explode));
+        }
+
+        // Set the type of the value.  Int, string, etc
+        $value = $this->_toType($value);
+        if (empty($key)) {
+          $array[]     = $value;
+        } else {
+          $array[$key] = $value;
+        }
+      }
+      return $array;
+    }
+    
+    /**
+     * Finds the type of the passed value, returns the value as the new type.
+     * @access private
+     * @param string $value
+     * @return mixed
+     */
+    function _toType($value) {
+      $matches = array();
+      if (preg_match('/^("(.*)"|\'(.*)\')/',$value,$matches)) {        
+       $value = (string)preg_replace('/(\'\'|\\\\\')/',"'",end($matches));
+       $value = preg_replace('/\\\\"/','"',$value);
+      } elseif (preg_match('/^\\[(.+)\\]$/',$value,$matches)) {
+        // Inline Sequence
+
+        // Take out strings sequences and mappings
+        $explode = $this->_inlineEscape($matches[1]);
+        
+        // Propogate value array
+        $value  = array();
+        foreach ($explode as $v) {
+          $value[] = $this->_toType($v);
+        }
+      } elseif (strpos($value,': ')!==false && !preg_match('/^{(.+)/',$value)) {
+          // It's a map
+          $array = explode(': ',$value);
+          $key   = trim($array[0]);
+          array_shift($array);
+          $value = trim(implode(': ',$array));
+          $value = $this->_toType($value);
+          $value = array($key => $value);
+      } elseif (preg_match("/{(.+)}$/",$value,$matches)) {
+        // Inline Mapping
+
+        // Take out strings sequences and mappings
+        $explode = $this->_inlineEscape($matches[1]);
+
+        // Propogate value array
+        $array = array();
+        foreach ($explode as $v) {
+          $array = $array + $this->_toType($v);
+        }
+        $value = $array;
+      } elseif (strtolower($value) == 'null' or $value == '' or $value == '~') {
+        $value = NULL;
+      } elseif (ctype_digit($value)) {
+        $value = (int)$value;
+      } elseif (in_array(strtolower($value), 
+                  array('true', 'on', '+', 'yes', 'y'))) {
+        $value = TRUE;
+      } elseif (in_array(strtolower($value), 
+                  array('false', 'off', '-', 'no', 'n'))) {
+        $value = FALSE;
+      } elseif (is_numeric($value)) {
+        $value = (float)$value;
+      } else {
+        // Just a normal string, right?
+        $value = trim(preg_replace('/#(.+)$/','',$value));
+      }
+      
+      return $value;
+    }
+    
+    /**
+     * Used in inlines to check for more inlines or quoted strings
+     * @access private
+     * @return array
+     */
+    function _inlineEscape($inline) {
+      // There's gotta be a cleaner way to do this...
+      // While pure sequences seem to be nesting just fine,
+      // pure mappings and mappings with sequences inside can't go very
+      // deep.  This needs to be fixed.
+      
+      // Check for strings      
+      $regex = '/(?:(")|(?:\'))((?(1)[^"]+|[^\']+))(?(1)"|\')/';
+      $strings = array();
+      if (preg_match_all($regex,$inline,$strings)) {
+        $saved_strings[] = $strings[0][0];
+        $inline  = preg_replace($regex,'YAMLString',$inline); 
+      }
+      unset($regex);
+
+      // Check for sequences
+      $seqs = array();
+      if (preg_match_all('/\[(.+)\]/U',$inline,$seqs)) {
+        $inline = preg_replace('/\[(.+)\]/U','YAMLSeq',$inline);
+        $seqs   = $seqs[0];
+      }
+      
+      // Check for mappings
+      $maps = array();
+      if (preg_match_all('/{(.+)}/U',$inline,$maps)) {
+        $inline = preg_replace('/{(.+)}/U','YAMLMap',$inline);
+        $maps   = $maps[0];
+      }
+      
+      $explode = explode(', ',$inline);
+
+      // Re-add the strings
+      if (!empty($saved_strings)) {
+        $i = 0;
+        foreach ($explode as $key => $value) {
+          if (strpos($value,'YAMLString')) {
+            $explode[$key] = str_replace('YAMLString',$saved_strings[$i],$value);
+            ++$i;
+          }
+        }
+      }
+
+      // Re-add the sequences
+      if (!empty($seqs)) {
+        $i = 0;
+        foreach ($explode as $key => $value) {
+          if (strpos($value,'YAMLSeq') !== false) {
+            $explode[$key] = str_replace('YAMLSeq',$seqs[$i],$value);
+            ++$i;
+          }
+        }
+      }
+      
+      // Re-add the mappings
+      if (!empty($maps)) {
+        $i = 0;
+        foreach ($explode as $key => $value) {
+          if (strpos($value,'YAMLMap') !== false) {
+            $explode[$key] = str_replace('YAMLMap',$maps[$i],$value);
+            ++$i;
+          }
+        }
+      }
+
+      return $explode;
+    }
+  
+    /**
+     * Builds the PHP array from all the YAML nodes we've gathered
+     * @access private
+     * @return array
+     */
+    function _buildArray() {
+      $trunk = array();
+
+      if (!isset($this->_indentSort[0])) {
+        return $trunk;
+      }
+
+      foreach ($this->_indentSort[0] as $n) {
+        if (empty($n->parent)) {
+          $this->_nodeArrayizeData($n);
+          // Check for references and copy the needed data to complete them.
+          $this->_makeReferences($n);
+          // Merge our data with the big array we're building
+          $trunk = $this->_array_kmerge($trunk,$n->data);
+        }
+      }
+      
+      return $trunk;
+    }
+  
+    /**
+     * Traverses node-space and sets references (& and *) accordingly
+     * @access private
+     * @return bool
+     */
+    function _linkReferences() {
+      if (is_array($this->_haveRefs)) {
+        foreach ($this->_haveRefs as $node) {
+          if (!empty($node->data)) {
+            $key = key($node->data);
+            // If it's an array, don't check.
+            if (is_array($node->data[$key])) {  
+              foreach ($node->data[$key] as $k => $v) {
+                $this->_linkRef($node,$key,$k,$v);
+              }
+            } else {
+              $this->_linkRef($node,$key);
+            }
+          }
+        } 
+      }
+      return true;
+    }
+    
+    function _linkRef(&$n,$key,$k = NULL,$v = NULL) {
+      if (empty($k) && empty($v)) {
+        // Look for &refs
+        $matches = array();
+        if (preg_match('/^&([^ ]+)/',$n->data[$key],$matches)) {
+          // Flag the node so we know it's a reference
+          $this->_allNodes[$n->id]->ref = substr($matches[0],1);
+          $this->_allNodes[$n->id]->data[$key] = 
+                   substr($n->data[$key],strlen($matches[0])+1);
+        // Look for *refs
+        } elseif (preg_match('/^\*([^ ]+)/',$n->data[$key],$matches)) {
+          $ref = substr($matches[0],1);
+          // Flag the node as having a reference
+          $this->_allNodes[$n->id]->refKey =  $ref;
+        }
+      } elseif (!empty($k) && !empty($v)) {
+        if (preg_match('/^&([^ ]+)/',$v,$matches)) {
+          // Flag the node so we know it's a reference
+          $this->_allNodes[$n->id]->ref = substr($matches[0],1);
+          $this->_allNodes[$n->id]->data[$key][$k] = 
+                              substr($v,strlen($matches[0])+1);
+        // Look for *refs
+        } elseif (preg_match('/^\*([^ ]+)/',$v,$matches)) {
+          $ref = substr($matches[0],1);
+          // Flag the node as having a reference
+          $this->_allNodes[$n->id]->refKey =  $ref;
+        }
+      }
+    }
+  
+    /**
+     * Finds the children of a node and aids in the building of the PHP array
+     * @access private
+     * @param int $nid The id of the node whose children we're gathering
+     * @return array
+     */
+    function _gatherChildren($nid) {
+      $return = array();
+      $node   =& $this->_allNodes[$nid];
+      foreach ($this->_allNodes as $z) {
+        if ($z->parent == $node->id) {
+          // We found a child
+          $this->_nodeArrayizeData($z);
+          // Check for references
+          $this->_makeReferences($z);
+          // Merge with the big array we're returning
+          // The big array being all the data of the children of our parent node
+          $return = $this->_array_kmerge($return,$z->data);
+        }
+      }
+      return $return;
+    }
+  
+    /**
+     * Turns a node's data and its children's data into a PHP array
+     *
+     * @access private
+     * @param array $node The node which you want to arrayize
+     * @return boolean
+     */
+    function _nodeArrayizeData(&$node) {
+      if (is_array($node->data) && $node->children == true) {
+        // This node has children, so we need to find them
+        $childs = $this->_gatherChildren($node->id);
+        // We've gathered all our children's data and are ready to use it
+        $key = key($node->data);
+        $key = empty($key) ? 0 : $key;
+        // If it's an array, add to it of course
+        if (is_array($node->data[$key])) {
+          $node->data[$key] = $this->_array_kmerge($node->data[$key],$childs);
+        } else {
+          $node->data[$key] = $childs;
+        }
+      } elseif (!is_array($node->data) && $node->children == true) {
+        // Same as above, find the children of this node
+        $childs       = $this->_gatherChildren($node->id);
+        $node->data   = array();
+        $node->data[] = $childs;
+      }
+
+      // We edited $node by reference, so just return true
+      return true;
+    }
+
+    /**
+     * Traverses node-space and copies references to / from this object.
+     * @access private
+     * @param object $z A node whose references we wish to make real
+     * @return bool
+     */
+    function _makeReferences(&$z) {
+      // It is a reference
+      if (isset($z->ref)) {
+        $key                = key($z->data);
+        // Copy the data to this object for easy retrieval later
+        $this->ref[$z->ref] =& $z->data[$key];
+      // It has a reference
+      } elseif (isset($z->refKey)) {
+        if (isset($this->ref[$z->refKey])) {
+          $key           = key($z->data);
+          // Copy the data from this object to make the node a real reference
+          $z->data[$key] =& $this->ref[$z->refKey];
+        }
+      }
+      return true;
+    }
+  
+
+    /**
+     * Merges arrays and maintains numeric keys.
+     *
+     * An ever-so-slightly modified version of the array_kmerge() function posted
+     * to php.net by mail at nospam dot iaindooley dot com on 2004-04-08.
+     *
+     * http://us3.php.net/manual/en/function.array-merge.php#41394
+     *
+     * @access private
+     * @param array $arr1
+     * @param array $arr2
+     * @return array
+     */
+    function _array_kmerge($arr1,$arr2) { 
+      if(!is_array($arr1)) 
+        $arr1 = array(); 
+
+      if(!is_array($arr2))
+        $arr2 = array(); 
+    
+      $keys1 = array_keys($arr1); 
+      $keys2 = array_keys($arr2); 
+      $keys  = array_merge($keys1,$keys2); 
+      $vals1 = array_values($arr1); 
+      $vals2 = array_values($arr2); 
+      $vals  = array_merge($vals1,$vals2); 
+      $ret   = array(); 
+
+      foreach($keys as $key) { 
+        list( /* unused */ ,$val) = each($vals);
+        // This is the good part!  If a key already exists, but it's part of a
+        // sequence (an int), just keep addin numbers until we find a fresh one.
+        if (isset($ret[$key]) and is_int($key)) {
+          while (array_key_exists($key, $ret)) {
+            $key++;
+          }
+        }  
+        $ret[$key] = $val; 
+      } 
+
+      return $ret; 
+    }
+  }
+?>
Index: /MediaWiki/branches/1.11/includes/api/ApiHelp.php
===================================================================
--- /MediaWiki/branches/1.11/includes/api/ApiHelp.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/api/ApiHelp.php	(revision 1280)
@@ -0,0 +1,57 @@
+<?php
+
+/*
+ * Created on Sep 6, 2006
+ *
+ * API for MediaWiki 1.8+
+ *
+ * Copyright (C) 2006 Yuri Astrakhan <FirstnameLastname@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ */
+
+if (!defined('MEDIAWIKI')) {
+	// Eclipse helper - will be ignored in production
+	require_once ('ApiBase.php');
+}
+
+/**
+ * @addtogroup API
+ */
+class ApiHelp extends ApiBase {
+
+	public function __construct($main, $action) {
+		parent :: __construct($main, $action);
+	}
+
+	/**
+	 * Stub module for displaying help when no parameters are given
+	 */
+	public function execute() {
+		$this->dieUsage('', 'help');
+	}
+
+	protected function getDescription() {
+		return array (
+			'Display this help screen.'
+		);
+	}
+
+	public function getVersion() {
+		return __CLASS__ . ': $Id: ApiHelp.php 21402 2007-04-20 08:55:14Z nickj $';
+	}
+}
+?>
Index: /MediaWiki/branches/1.11/includes/api/ApiLogin.php
===================================================================
--- /MediaWiki/branches/1.11/includes/api/ApiLogin.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/api/ApiLogin.php	(revision 1280)
@@ -0,0 +1,124 @@
+<?php
+
+/*
+ * Created on Sep 19, 2006
+ *
+ * API for MediaWiki 1.8+
+ *
+ * Copyright (C) 2006 Yuri Astrakhan <FirstnameLastname@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ */
+
+if (!defined('MEDIAWIKI')) {
+	// Eclipse helper - will be ignored in production
+	require_once ('ApiBase.php');
+}
+
+/**
+ * @addtogroup API
+ */
+class ApiLogin extends ApiBase {
+
+	public function __construct($main, $action) {
+		parent :: __construct($main, $action, 'lg');
+	}
+
+	public function execute() {
+		$name = $password = $domain = null;
+		extract($this->extractRequestParams());
+
+		$params = new FauxRequest(array (
+			'wpName' => $name,
+			'wpPassword' => $password,
+			'wpDomain' => $domain,
+			'wpRemember' => ''
+		));
+
+		$result = array ();
+
+		$loginForm = new LoginForm($params);
+		switch ($loginForm->authenticateUserData()) {
+			case LoginForm :: SUCCESS :
+				global $wgUser;
+
+				$wgUser->setOption('rememberpassword', 1);
+				$wgUser->setCookies();
+
+				$result['result'] = 'Success';
+				$result['lguserid'] = $_SESSION['wsUserID'];
+				$result['lgusername'] = $_SESSION['wsUserName'];
+				$result['lgtoken'] = $_SESSION['wsToken'];
+				break;
+
+			case LoginForm :: NO_NAME :
+				$result['result'] = 'NoName';
+				break;
+			case LoginForm :: ILLEGAL :
+				$result['result'] = 'Illegal';
+				break;
+			case LoginForm :: WRONG_PLUGIN_PASS :
+				$result['result'] = 'WrongPluginPass';
+				break;
+			case LoginForm :: NOT_EXISTS :
+				$result['result'] = 'NotExists';
+				break;
+			case LoginForm :: WRONG_PASS :
+				$result['result'] = 'WrongPass';
+				break;
+			case LoginForm :: EMPTY_PASS :
+				$result['result'] = 'EmptyPass';
+				break;
+			default :
+				ApiBase :: dieDebug(__METHOD__, 'Unhandled case value');
+		}
+
+		$this->getResult()->addValue(null, 'login', $result);
+	}
+
+	protected function getAllowedParams() {
+		return array (
+			'name' => null,
+			'password' => null,
+			'domain' => null
+		);
+	}
+
+	protected function getParamDescription() {
+		return array (
+			'name' => 'User Name',
+			'password' => 'Password',
+			'domain' => 'Domain (optional)'
+		);
+	}
+
+	protected function getDescription() {
+		return array (
+			'This module is used to login and get the authentication tokens.'
+		);
+	}
+	
+	protected function getExamples() {
+		return array(
+			'api.php?action=login&lgname=user&lgpassword=password'
+		);
+	}
+
+	public function getVersion() {
+		return __CLASS__ . ': $Id: ApiLogin.php 21402 2007-04-20 08:55:14Z nickj $';
+	}
+}
+?>
Index: /MediaWiki/branches/1.11/includes/api/ApiMain.php
===================================================================
--- /MediaWiki/branches/1.11/includes/api/ApiMain.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/api/ApiMain.php	(revision 1280)
@@ -0,0 +1,367 @@
+<?php
+
+/*
+ * Created on Sep 4, 2006
+ *
+ * API for MediaWiki 1.8+
+ *
+ * Copyright (C) 2006 Yuri Astrakhan <FirstnameLastname@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ */
+
+if (!defined('MEDIAWIKI')) {
+	// Eclipse helper - will be ignored in production
+	require_once ('ApiBase.php');
+}
+
+/**
+ * This is the main API class, used for both external and internal processing. 
+ * @addtogroup API
+ */
+class ApiMain extends ApiBase {
+
+	/**
+	 * When no format parameter is given, this format will be used
+	 */
+	const API_DEFAULT_FORMAT = 'xmlfm';
+
+	/**
+	 * List of available modules: action name => module class
+	 */
+	private static $Modules = array (
+		'help' => 'ApiHelp',
+		'login' => 'ApiLogin',
+		'opensearch' => 'ApiOpenSearch',
+		'feedwatchlist' => 'ApiFeedWatchlist',
+		'query' => 'ApiQuery'
+	);
+
+	/**
+	 * List of available formats: format name => format class
+	 */
+	private static $Formats = array (
+		'json' => 'ApiFormatJson',
+		'jsonfm' => 'ApiFormatJson',
+		'php' => 'ApiFormatPhp',
+		'phpfm' => 'ApiFormatPhp',
+		'wddx' => 'ApiFormatWddx',
+		'wddxfm' => 'ApiFormatWddx',
+		'xml' => 'ApiFormatXml',
+		'xmlfm' => 'ApiFormatXml',
+		'yaml' => 'ApiFormatYaml',
+		'yamlfm' => 'ApiFormatYaml',
+		'rawfm' => 'ApiFormatJson'
+	);
+
+	private $mPrinter, $mModules, $mModuleNames, $mFormats, $mFormatNames;
+	private $mResult, $mShowVersions, $mEnableWrite, $mRequest, $mInternalMode, $mSquidMaxage;
+
+	/**
+	* Constructor
+	* @param $request object - if this is an instance of FauxRequest, errors are thrown and no printing occurs
+	* @param $enableWrite bool should be set to true if the api may modify data
+	*/
+	public function __construct($request, $enableWrite = false) {
+
+		$this->mInternalMode = ($request instanceof FauxRequest);
+
+		// Special handling for the main module: $parent === $this
+		parent :: __construct($this, $this->mInternalMode ? 'main_int' : 'main');
+
+		$this->mModules = self :: $Modules;
+		$this->mModuleNames = array_keys($this->mModules); // todo: optimize
+		$this->mFormats = self :: $Formats;
+		$this->mFormatNames = array_keys($this->mFormats); // todo: optimize
+
+		$this->mResult = new ApiResult($this);
+		$this->mShowVersions = false;
+		$this->mEnableWrite = $enableWrite;
+
+		$this->mRequest = & $request;
+
+		$this->mSquidMaxage = 0;
+	}
+
+	public function & getRequest() {
+		return $this->mRequest;
+	}
+
+	public function getResult() {
+		return $this->mResult;
+	}
+
+	public function requestWriteMode() {
+		if (!$this->mEnableWrite)
+			$this->dieUsage('Editing of this site is disabled. Make sure the $wgEnableWriteAPI=true; ' .
+			'statement is included in the site\'s LocalSettings.php file', 'readonly');
+	}
+
+	public function setCacheMaxAge($maxage) {
+		$this->mSquidMaxage = $maxage;
+	}
+
+	public function createPrinterByName($format) {
+		return new $this->mFormats[$format] ($this, $format);
+	}
+
+	public function execute() {
+		$this->profileIn();
+		if ($this->mInternalMode)
+			$this->executeAction();
+		else
+			$this->executeActionWithErrorHandling();
+		$this->profileOut();
+	}
+
+	protected function executeActionWithErrorHandling() {
+
+		// In case an error occurs during data output,
+		// this clear the output buffer and print just the error information
+		ob_start();
+
+		try {
+			$this->executeAction();
+		} catch (Exception $e) {
+			//
+			// Handle any kind of exception by outputing properly formatted error message.
+			// If this fails, an unhandled exception should be thrown so that global error
+			// handler will process and log it.
+			//
+
+			// Error results should not be cached
+			$this->setCacheMaxAge(0);
+
+			// Printer may not be initialized if the extractRequestParams() fails for the main module
+			if (!isset ($this->mPrinter)) {
+				$this->mPrinter = $this->createPrinterByName(self :: API_DEFAULT_FORMAT);
+				if ($this->mPrinter->getNeedsRawData())
+					$this->getResult()->setRawMode();
+			}
+
+			if ($e instanceof UsageException) {
+				//
+				// User entered incorrect parameters - print usage screen
+				//
+				$errMessage = array (
+				'code' => $e->getCodeString(), 'info' => $e->getMessage());
+				ApiResult :: setContent($errMessage, $this->makeHelpMsg());
+
+			} else {
+				//
+				// Something is seriously wrong
+				//
+				$errMessage = array (
+					'code' => 'internal_api_error',
+					'info' => "Exception Caught: {$e->getMessage()}"
+				);
+				ApiResult :: setContent($errMessage, "\n\n{$e->getTraceAsString()}\n\n");
+			}
+
+			$headerStr = 'MediaWiki-API-Error: ' . $errMessage['code'];
+			if ($e->getCode() === 0)
+				header($headerStr, true);
+			else
+				header($headerStr, true, $e->getCode());
+
+			// Reset and print just the error message
+			ob_clean();
+			$this->getResult()->reset();
+			$this->getResult()->addValue(null, 'error', $errMessage);
+
+			// If the error occured during printing, do a printer->profileOut()
+			$this->mPrinter->safeProfileOut();
+			$this->printResult(true);
+		}
+
+		// Set the cache expiration at the last moment, as any errors may change the expiration.
+		// if $this->mSquidMaxage == 0, the expiry time is set to the first second of unix epoch
+		$expires = $this->mSquidMaxage == 0 ? 1 : time() + $this->mSquidMaxage;
+		header('Expires: ' . wfTimestamp(TS_RFC2822, $expires));
+		header('Cache-Control: s-maxage=' . $this->mSquidMaxage . ', must-revalidate, max-age=0');
+
+		ob_end_flush();
+	}
+
+	/**
+	 * Execute the actual module, without any error handling
+	 */
+	protected function executeAction() {
+		$action = $format = $version = null;
+		extract($this->extractRequestParams());
+		$this->mShowVersions = $version;
+
+		// Instantiate the module requested by the user
+		$module = new $this->mModules[$action] ($this, $action);
+
+		if (!$this->mInternalMode) {
+
+			// See if custom printer is used
+			$this->mPrinter = $module->getCustomPrinter();
+			if (is_null($this->mPrinter)) {
+				// Create an appropriate printer
+				$this->mPrinter = $this->createPrinterByName($format);
+			}
+
+			if ($this->mPrinter->getNeedsRawData())
+				$this->getResult()->setRawMode();
+		}
+
+		// Execute
+		$module->profileIn();
+		$module->execute();
+		$module->profileOut();
+
+		if (!$this->mInternalMode) {
+			// Print result data
+			$this->printResult(false);
+		}
+	}
+
+	/**
+	 * Internal printer
+	 */
+	protected function printResult($isError) {
+		$printer = $this->mPrinter;
+		$printer->profileIn();
+		$printer->initPrinter($isError);
+		$printer->execute();
+		$printer->closePrinter();
+		$printer->profileOut();
+	}
+
+	protected function getAllowedParams() {
+		return array (
+			'format' => array (
+				ApiBase :: PARAM_DFLT => ApiMain :: API_DEFAULT_FORMAT,
+				ApiBase :: PARAM_TYPE => $this->mFormatNames
+			),
+			'action' => array (
+				ApiBase :: PARAM_DFLT => 'help',
+				ApiBase :: PARAM_TYPE => $this->mModuleNames
+			),
+			'version' => false
+		);
+	}
+
+	protected function getParamDescription() {
+		return array (
+			'format' => 'The format of the output',
+			'action' => 'What action you would like to perform',
+			'version' => 'When showing help, include version for each module'
+		);
+	}
+
+	protected function getDescription() {
+		return array (
+			'',
+			'This API allows programs to access various functions of MediaWiki software.',
+			'For more details see API Home Page @ http://meta.wikimedia.org/wiki/API',
+			'',
+			'Status: ALPHA -- all features shown on this page should be working,',
+			'                 but the API is still in active development, and  may change at any time.',
+			'                 Make sure you monitor changes to this page, wikitech-l mailing list,',
+			'                 or the source code in the includes/api directory for any changes.',
+			''
+		);
+	}
+	
+	protected function getCredits() {
+		return array(
+			'This API is being implemented by Yuri Astrakhan [[User:Yurik]] / FirstnameLastname@gmail.com',
+			'Please leave your comments and suggestions at http://meta.wikimedia.org/wiki/API'
+		);
+	}
+
+	/**
+	 * Override the parent to generate help messages for all available modules.
+	 */
+	public function makeHelpMsg() {
+
+		// Use parent to make default message for the main module
+		$msg = parent :: makeHelpMsg();
+
+		$astriks = str_repeat('*** ', 10);
+		$msg .= "\n\n$astriks Modules  $astriks\n\n";
+		foreach( $this->mModules as $moduleName => $unused ) {
+			$msg .= "* action=$moduleName *";
+			$module = new $this->mModules[$moduleName] ($this, $moduleName);
+			$msg2 = $module->makeHelpMsg();
+			if ($msg2 !== false)
+				$msg .= $msg2;
+			$msg .= "\n";
+		}
+
+		$msg .= "\n$astriks Formats  $astriks\n\n";
+		foreach( $this->mFormats as $formatName => $unused ) {
+			$msg .= "* format=$formatName *";
+			$module = $this->createPrinterByName($formatName);
+			$msg2 = $module->makeHelpMsg();
+			if ($msg2 !== false)
+				$msg .= $msg2;
+			$msg .= "\n";
+		}
+		
+		$msg .= "\n*** Credits: ***\n   " . implode("\n   ", $this->getCredits()) . "\n";
+		
+
+		return $msg;
+	}
+
+	private $mIsBot = null;
+	public function isBot() {
+		if (!isset ($this->mIsBot)) {
+			global $wgUser;
+			$this->mIsBot = $wgUser->isAllowed('bot');
+		}
+		return $this->mIsBot;
+	}
+
+	public function getShowVersions() {
+		return $this->mShowVersions;
+	}
+
+	public function getVersion() {
+		$vers = array ();
+		$vers[] = __CLASS__ . ': $Id: ApiMain.php 21402 2007-04-20 08:55:14Z nickj $';
+		$vers[] = ApiBase :: getBaseVersion();
+		$vers[] = ApiFormatBase :: getBaseVersion();
+		$vers[] = ApiQueryBase :: getBaseVersion();
+		$vers[] = ApiFormatFeedWrapper :: getVersion(); // not accessible with format=xxx
+		return $vers;
+	}
+}
+
+/**
+ * This exception will be thrown when dieUsage is called to stop module execution.
+ * @addtogroup API
+ */
+class UsageException extends Exception {
+
+	private $mCodestr;
+
+	public function __construct($message, $codestr, $code = 0) {
+		parent :: __construct($message, $code);
+		$this->mCodestr = $codestr;
+	}
+	public function getCodeString() {
+		return $this->mCodestr;
+	}
+	public function __toString() {
+		return "{$this->getCodeString()}: {$this->getMessage()}";
+	}
+}
+?>
Index: /MediaWiki/branches/1.11/includes/api/ApiOpenSearch.php
===================================================================
--- /MediaWiki/branches/1.11/includes/api/ApiOpenSearch.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/api/ApiOpenSearch.php	(revision 1280)
@@ -0,0 +1,111 @@
+<?php
+
+/*
+ * Created on Oct 13, 2006
+ *
+ * API for MediaWiki 1.8+
+ *
+ * Copyright (C) 2006 Yuri Astrakhan <FirstnameLastname@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ */
+
+if (!defined('MEDIAWIKI')) {
+	// Eclipse helper - will be ignored in production
+	require_once ("ApiBase.php");
+}
+
+/**
+ * @addtogroup API
+ */
+class ApiOpenSearch extends ApiBase {
+
+	public function __construct($main, $action) {
+		parent :: __construct($main, $action);
+	}
+
+	public function getCustomPrinter() {
+		return $this->getMain()->createPrinterByName('json');
+	}
+
+	public function execute() {
+		$search = null;
+		extract($this->ExtractRequestParams());
+
+		// Open search results may be stored for a very long time
+		$this->getMain()->setCacheMaxAge(1200);
+
+		$title = Title :: newFromText($search);
+		if(!$title)
+			return; // Return empty result
+			
+		// Prepare nested request
+		$params = new FauxRequest(array (
+			'action' => 'query',
+			'list' => 'allpages',
+			'apnamespace' => $title->getNamespace(),
+			'aplimit' => 10,
+			'apprefix' => $title->getDBkey()
+		));
+
+		// Execute
+		$module = new ApiMain($params);
+		$module->execute();
+
+		// Get resulting data
+		$data = $module->getResultData();
+
+		// Reformat useful data for future printing by JSON engine
+		$srchres = array ();
+		foreach ($data['query']['allpages'] as & $pageinfo) {
+			// Note: this data will no be printable by the xml engine
+			// because it does not support lists of unnamed items
+			$srchres[] = $pageinfo['title'];
+		}
+
+		// Set top level elements
+		$result = $this->getResult();
+		$result->addValue(null, 0, $search);
+		$result->addValue(null, 1, $srchres);
+	}
+
+	protected function getAllowedParams() {
+		return array (
+			'search' => null
+		);
+	}
+
+	protected function getParamDescription() {
+		return array (
+			'search' => 'Search string'
+		);
+	}
+
+	protected function getDescription() {
+		return 'This module implements OpenSearch protocol';
+	}
+
+	protected function getExamples() {
+		return array (
+			'api.php?action=opensearch&search=Te'
+		);
+	}
+
+	public function getVersion() {
+		return __CLASS__ . ': $Id: ApiOpenSearch.php 21402 2007-04-20 08:55:14Z nickj $';
+	}
+}
+?>
Index: /MediaWiki/branches/1.11/includes/api/ApiPageSet.php
===================================================================
--- /MediaWiki/branches/1.11/includes/api/ApiPageSet.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/api/ApiPageSet.php	(revision 1280)
@@ -0,0 +1,600 @@
+<?php
+
+/*
+ * Created on Sep 24, 2006
+ *
+ * API for MediaWiki 1.8+
+ *
+ * Copyright (C) 2006 Yuri Astrakhan <FirstnameLastname@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ */
+
+if (!defined('MEDIAWIKI')) {
+	// Eclipse helper - will be ignored in production
+	require_once ('ApiQueryBase.php');
+}
+
+/**
+ * @addtogroup API
+ */
+class ApiPageSet extends ApiQueryBase {
+
+	private $mAllPages; // [ns][dbkey] => page_id or 0 when missing
+	private $mTitles, $mGoodTitles, $mMissingTitles, $mMissingPageIDs, $mRedirectTitles, $mNormalizedTitles;
+	private $mResolveRedirects, $mPendingRedirectIDs;
+	private $mGoodRevIDs, $mMissingRevIDs;
+
+	private $mRequestedPageFields;
+
+	public function __construct($query, $resolveRedirects = false) {
+		parent :: __construct($query, __CLASS__);
+
+		$this->mAllPages = array ();
+		$this->mTitles = array();
+		$this->mGoodTitles = array ();
+		$this->mMissingTitles = array ();
+		$this->mMissingPageIDs = array ();
+		$this->mRedirectTitles = array ();
+		$this->mNormalizedTitles = array ();
+		$this->mGoodRevIDs = array();
+		$this->mMissingRevIDs = array();
+
+		$this->mRequestedPageFields = array ();
+		$this->mResolveRedirects = $resolveRedirects;
+		if($resolveRedirects)
+			$this->mPendingRedirectIDs = array();
+	}
+
+	public function isResolvingRedirects() {
+		return $this->mResolveRedirects;
+	}
+
+	public function requestField($fieldName) {
+		$this->mRequestedPageFields[$fieldName] = null;
+	}
+
+	public function getCustomField($fieldName) {
+		return $this->mRequestedPageFields[$fieldName];
+	}
+
+	/**
+	 * Get fields that modules have requested from the page table
+	 */
+	public function getPageTableFields() {
+		// Ensure we get minimum required fields
+		$pageFlds = array (
+			'page_id' => null,
+			'page_namespace' => null,
+			'page_title' => null
+		);
+
+		// only store non-default fields
+		$this->mRequestedPageFields = array_diff_key($this->mRequestedPageFields, $pageFlds);
+
+		if ($this->mResolveRedirects)
+			$pageFlds['page_is_redirect'] = null;
+
+		return array_keys(array_merge($pageFlds, $this->mRequestedPageFields));
+	}
+
+	/**
+	 * All Title objects provided.
+	 * @return array of Title objects
+	 */
+	public function getTitles() {
+		return $this->mTitles;
+	}
+
+	/**
+	 * Returns the number of unique pages (not revisions) in the set.
+	 */
+	public function getTitleCount() {
+		return count($this->mTitles);
+	}
+
+	/**
+	 * Title objects that were found in the database.
+	 * @return array page_id (int) => Title (obj)
+	 */
+	public function getGoodTitles() {
+		return $this->mGoodTitles;
+	}
+
+	/**
+	 * Returns the number of found unique pages (not revisions) in the set.
+	 */
+	public function getGoodTitleCount() {
+		return count($this->mGoodTitles);
+	}
+
+	/**
+	 * Title objects that were NOT found in the database.
+	 * @return array of Title objects
+	 */
+	public function getMissingTitles() {
+		return $this->mMissingTitles;
+	}
+
+	/**
+	 * Page IDs that were not found in the database
+	 * @return array of page IDs
+	 */
+	public function getMissingPageIDs() {
+		return $this->mMissingPageIDs;
+	}
+
+	/**
+	 * Get a list of redirects when doing redirect resolution
+	 * @return array prefixed_title (string) => prefixed_title (string)
+	 */
+	public function getRedirectTitles() {
+		return $this->mRedirectTitles;
+	}
+
+	/**
+	 * Get a list of title normalizations - maps the title given 
+	 * with its normalized version.
+	 * @return array raw_prefixed_title (string) => prefixed_title (string) 
+	 */
+	public function getNormalizedTitles() {
+		return $this->mNormalizedTitles;
+	}
+
+	/**
+	 * Get the list of revision IDs (requested with revids= parameter)
+	 * @return array revID (int) => pageID (int)
+	 */
+	public function getRevisionIDs() {
+		return $this->mGoodRevIDs;
+	}
+
+	/**
+	 * Revision IDs that were not found in the database
+	 * @return array of revision IDs
+	 */
+	public function getMissingRevisionIDs() {
+		return $this->mMissingRevIDs;
+	}
+
+	/**
+	 * Returns the number of revisions (requested with revids= parameter)
+	 */
+	public function getRevisionCount() {
+		return count($this->getRevisionIDs());
+	}
+
+	/**
+	 * Populate from the request parameters
+	 */
+	public function execute() {
+		$this->profileIn();
+		$titles = $pageids = $revids = null;
+		extract($this->extractRequestParams());
+
+		// Only one of the titles/pageids/revids is allowed at the same time
+		$dataSource = null;
+		if (isset ($titles))
+			$dataSource = 'titles';
+		if (isset ($pageids)) {
+			if (isset ($dataSource))
+				$this->dieUsage("Cannot use 'pageids' at the same time as '$dataSource'", 'multisource');
+			$dataSource = 'pageids';
+		}
+		if (isset ($revids)) {
+			if (isset ($dataSource))
+				$this->dieUsage("Cannot use 'revids' at the same time as '$dataSource'", 'multisource');
+			$dataSource = 'revids';
+		}
+
+		switch ($dataSource) {
+			case 'titles' :
+				$this->initFromTitles($titles);
+				break;
+			case 'pageids' :
+				$this->initFromPageIds($pageids);
+				break;
+			case 'revids' :
+				if($this->mResolveRedirects)
+					$this->dieUsage('revids may not be used with redirect resolution', 'params');
+				$this->initFromRevIDs($revids);
+				break;
+			default :
+				// Do nothing - some queries do not need any of the data sources.
+				break;
+		}
+		$this->profileOut();
+	}
+
+	/**
+	 * Initialize PageSet from a list of Titles
+	 */
+	public function populateFromTitles($titles) {
+		$this->profileIn();
+		$this->initFromTitles($titles);
+		$this->profileOut();
+	}
+
+	/**
+	 * Initialize PageSet from a list of Page IDs
+	 */
+	public function populateFromPageIDs($pageIDs) {
+		$this->profileIn();
+		$pageIDs = array_map('intval', $pageIDs); // paranoia
+		$this->initFromPageIds($pageIDs);
+		$this->profileOut();
+	}
+
+	/**
+	 * Initialize PageSet from a rowset returned from the database
+	 */
+	public function populateFromQueryResult($db, $queryResult) {
+		$this->profileIn();
+		$this->initFromQueryResult($db, $queryResult);
+		$this->profileOut();
+	}
+
+	/**
+	 * Initialize PageSet from a list of Revision IDs
+	 */
+	public function populateFromRevisionIDs($revIDs) {
+		$this->profileIn();
+		$revIDs = array_map('intval', $revIDs); // paranoia
+		$this->initFromRevIDs($revIDs);
+		$this->profileOut();
+	}
+
+	/**
+	 * Extract all requested fields from the row received from the database
+	 */
+	public function processDbRow($row) {
+	
+		// Store Title object in various data structures
+		$title = Title :: makeTitle($row->page_namespace, $row->page_title);
+	
+		// skip any pages that user has no rights to read
+		if ($title->userCanRead()) {
+
+			$pageId = intval($row->page_id);	
+			$this->mAllPages[$row->page_namespace][$row->page_title] = $pageId;
+			$this->mTitles[] = $title;
+	
+			if ($this->mResolveRedirects && $row->page_is_redirect == '1') {
+				$this->mPendingRedirectIDs[$pageId] = $title;
+			} else {
+				$this->mGoodTitles[$pageId] = $title;
+			}
+	
+			foreach ($this->mRequestedPageFields as $fieldName => & $fieldValues)
+				$fieldValues[$pageId] = $row-> $fieldName;
+		}
+	}
+	
+	public function finishPageSetGeneration() {
+		$this->profileIn();
+		$this->resolvePendingRedirects();
+		$this->profileOut();
+	}
+	
+	/**
+	 * This method populates internal variables with page information
+	 * based on the given array of title strings.
+	 * 
+	 * Steps:
+	 * #1 For each title, get data from `page` table
+	 * #2 If page was not found in the DB, store it as missing
+	 * 
+	 * Additionally, when resolving redirects:
+	 * #3 If no more redirects left, stop.
+	 * #4 For each redirect, get its links from `pagelinks` table.
+	 * #5 Substitute the original LinkBatch object with the new list
+	 * #6 Repeat from step #1     
+	 */
+	private function initFromTitles($titles) {
+
+		// Get validated and normalized title objects
+		$linkBatch = $this->processTitlesStrArray($titles);
+		if($linkBatch->isEmpty())
+			return;
+			
+		$db = $this->getDB();
+		$set = $linkBatch->constructSet('page', $db);
+
+		// Get pageIDs data from the `page` table
+		$this->profileDBIn();
+		$res = $db->select('page', $this->getPageTableFields(), $set, __METHOD__);
+		$this->profileDBOut();
+
+		// Hack: get the ns:titles stored in array(ns => array(titles)) format
+		$this->initFromQueryResult($db, $res, $linkBatch->data, true);	// process Titles
+
+		// Resolve any found redirects
+		$this->resolvePendingRedirects();
+	}
+
+	private function initFromPageIds($pageids) {
+		if(empty($pageids))
+			return;
+			
+		$set = array (
+			'page_id' => $pageids
+		);
+
+		$db = $this->getDB();
+
+		// Get pageIDs data from the `page` table
+		$this->profileDBIn();
+		$res = $db->select('page', $this->getPageTableFields(), $set, __METHOD__);
+		$this->profileDBOut();
+		
+		$this->initFromQueryResult($db, $res, array_flip($pageids), false);	// process PageIDs
+
+		// Resolve any found redirects
+		$this->resolvePendingRedirects();
+	}
+	
+	/**
+	 * Iterate through the result of the query on 'page' table,
+	 * and for each row create and store title object and save any extra fields requested.
+	 * @param $db Database
+	 * @param $res DB Query result
+	 * @param $remaining Array of either pageID or ns/title elements (optional).
+	 *        If given, any missing items will go to $mMissingPageIDs and $mMissingTitles
+	 * @param $processTitles bool Must be provided together with $remaining.
+	 *        If true, treat $remaining as an array of [ns][title]
+	 *        If false, treat it as an array of [pageIDs]
+	 * @return Array of redirect IDs (only when resolving redirects)
+	 */
+	private function initFromQueryResult($db, $res, &$remaining = null, $processTitles = null) {
+		if (!is_null($remaining) && is_null($processTitles))
+			ApiBase :: dieDebug(__METHOD__, 'Missing $processTitles parameter when $remaining is provided');
+			
+		while ($row = $db->fetchObject($res)) {
+
+			$pageId = intval($row->page_id);
+
+			// Remove found page from the list of remaining items
+			if (isset($remaining)) {
+				if ($processTitles)
+					unset ($remaining[$row->page_namespace][$row->page_title]);
+				else
+					unset ($remaining[$pageId]);
+			}
+			
+			// Store any extra fields requested by modules
+			$this->processDbRow($row);
+		}
+		$db->freeResult($res);
+		
+		if(isset($remaining)) {
+			// Any items left in the $remaining list are added as missing
+			if($processTitles) {
+				// The remaining titles in $remaining are non-existant pages
+				foreach ($remaining as $ns => $dbkeys) {
+					foreach ( $dbkeys as $dbkey => $unused ) {
+						$title = Title :: makeTitle($ns, $dbkey);
+						$this->mMissingTitles[] = $title;
+						$this->mAllPages[$ns][$dbkey] = 0;
+						$this->mTitles[] = $title;
+					}
+				}
+			}
+			else
+			{
+				// The remaining pageids do not exist
+				if(empty($this->mMissingPageIDs))
+					$this->mMissingPageIDs = array_keys($remaining);
+				else
+					$this->mMissingPageIDs = array_merge($this->mMissingPageIDs, array_keys($remaining));
+			}
+		}
+	}
+
+	private function initFromRevIDs($revids) {
+
+		if(empty($revids))
+			return;
+			
+		$db = $this->getDB();
+		$pageids = array();
+		$remaining = array_flip($revids);
+		
+		$tables = array('revision');
+		$fields = array('rev_id','rev_page');
+		$where = array('rev_deleted' => 0, 'rev_id' => $revids);
+		
+		// Get pageIDs data from the `page` table
+		$this->profileDBIn();
+		$res = $db->select( $tables, $fields, $where,  __METHOD__ );
+		while ( $row = $db->fetchObject( $res ) ) {
+			$revid = intval($row->rev_id);
+			$pageid = intval($row->rev_page);
+			$this->mGoodRevIDs[$revid] = $pageid;
+			$pageids[$pageid] = '';
+			unset($remaining[$revid]);
+		}
+		$db->freeResult( $res );
+		$this->profileDBOut();
+
+		$this->mMissingRevIDs = array_keys($remaining);
+
+		// Populate all the page information
+		if($this->mResolveRedirects)
+			ApiBase :: dieDebug(__METHOD__, 'revids may not be used with redirect resolution');
+		$this->initFromPageIds(array_keys($pageids));
+	}
+
+	private function resolvePendingRedirects() {
+
+		if($this->mResolveRedirects) {
+			$db = $this->getDB();
+			$pageFlds = $this->getPageTableFields();
+	
+			// Repeat until all redirects have been resolved
+			// The infinite loop is prevented by keeping all known pages in $this->mAllPages
+			while (!empty ($this->mPendingRedirectIDs)) {			
+	
+				// Resolve redirects by querying the pagelinks table, and repeat the process
+				// Create a new linkBatch object for the next pass
+				$linkBatch = $this->getRedirectTargets();
+	
+				if ($linkBatch->isEmpty())
+					break;
+					
+				$set = $linkBatch->constructSet('page', $db);
+				if(false === $set)
+					break;
+		
+				// Get pageIDs data from the `page` table
+				$this->profileDBIn();
+				$res = $db->select('page', $pageFlds, $set, __METHOD__);
+				$this->profileDBOut();
+			
+				// Hack: get the ns:titles stored in array(ns => array(titles)) format
+				$this->initFromQueryResult($db, $res, $linkBatch->data, true);
+			}
+		}
+	}
+
+	private function getRedirectTargets() {
+
+		$linkBatch = new LinkBatch();
+		$db = $this->getDB();
+
+		// find redirect targets for all redirect pages
+		$this->profileDBIn();
+		$res = $db->select('pagelinks', array (
+			'pl_from',
+			'pl_namespace',
+			'pl_title'
+		), array (
+			'pl_from' => array_keys($this->mPendingRedirectIDs
+		)), __METHOD__);
+		$this->profileDBOut();
+
+		while ($row = $db->fetchObject($res)) {
+
+			$plfrom = intval($row->pl_from);
+
+			// Bug 7304 workaround 
+			// ( http://bugzilla.wikipedia.org/show_bug.cgi?id=7304 )
+			// A redirect page may have more than one link.
+			// This code will only use the first link returned. 
+			if (isset ($this->mPendingRedirectIDs[$plfrom])) { // remove line when bug 7304 is fixed 
+
+				$titleStrFrom = $this->mPendingRedirectIDs[$plfrom]->getPrefixedText();
+				$titleStrTo = Title :: makeTitle($row->pl_namespace, $row->pl_title)->getPrefixedText();
+				unset ($this->mPendingRedirectIDs[$plfrom]); // remove line when bug 7304 is fixed
+
+				// Avoid an infinite loop by checking if we have already processed this target
+				if (!isset ($this->mAllPages[$row->pl_namespace][$row->pl_title])) {
+					$linkBatch->add($row->pl_namespace, $row->pl_title);
+				}
+			} else {
+				// This redirect page has more than one link.
+				// This is very slow, but safer until bug 7304 is resolved
+				$title = Title :: newFromID($plfrom);
+				$titleStrFrom = $title->getPrefixedText();
+
+				$article = new Article($title);
+				$text = $article->getContent();
+				$titleTo = Title :: newFromRedirect($text);
+				$titleStrTo = $titleTo->getPrefixedText();
+
+				if (is_null($titleStrTo))
+					ApiBase :: dieDebug(__METHOD__, 'Bug7304 workaround: redir target from {$title->getPrefixedText()} not found');
+
+				// Avoid an infinite loop by checking if we have already processed this target
+				if (!isset ($this->mAllPages[$titleTo->getNamespace()][$titleTo->getDBkey()])) {
+					$linkBatch->addObj($titleTo);
+				}
+			}
+
+			$this->mRedirectTitles[$titleStrFrom] = $titleStrTo;
+		}
+		$db->freeResult($res);
+
+		// All IDs must exist in the page table
+		if (!empty($this->mPendingRedirectIDs[$plfrom]))
+			ApiBase :: dieDebug(__METHOD__, 'Invalid redirect IDs were found');
+
+		return $linkBatch;
+	}
+
+	/**
+	 * Given an array of title strings, convert them into Title objects.
+	 * This method validates access rights for the title, 
+	 * and appends normalization values to the output.
+	 * 
+	 * @return LinkBatch of title objects.
+	 */
+	private function processTitlesStrArray($titles) {
+
+		$linkBatch = new LinkBatch();
+
+		foreach ($titles as $titleString) {
+			$titleObj = Title :: newFromText($titleString);
+
+			// Validation
+			if (!$titleObj)
+				$this->dieUsage("bad title $titleString", 'invalidtitle');
+			if ($titleObj->getNamespace() < 0)
+				$this->dieUsage("No support for special page $titleString has been implemented", 'unsupportednamespace');
+			if (!$titleObj->userCanRead())
+				$this->dieUsage("No read permission for $titleString", 'titleaccessdenied');
+
+			$linkBatch->addObj($titleObj);
+
+			// Make sure we remember the original title that was given to us
+			// This way the caller can correlate new titles with the originally requested,
+			// i.e. namespace is localized or capitalization is different
+			if ($titleString !== $titleObj->getPrefixedText()) {
+				$this->mNormalizedTitles[$titleString] = $titleObj->getPrefixedText();
+			}
+		}
+
+		return $linkBatch;
+	}
+
+	protected function getAllowedParams() {
+		return array (
+			'titles' => array (
+				ApiBase :: PARAM_ISMULTI => true
+			),
+			'pageids' => array (
+				ApiBase :: PARAM_TYPE => 'integer',
+				ApiBase :: PARAM_ISMULTI => true
+			),
+			'revids' => array (
+				ApiBase :: PARAM_TYPE => 'integer',
+				ApiBase :: PARAM_ISMULTI => true
+			)
+		);
+	}
+
+	protected function getParamDescription() {
+		return array (
+			'titles' => 'A list of titles to work on',
+			'pageids' => 'A list of page IDs to work on',
+			'revids' => 'A list of revision IDs to work on'
+		);
+	}
+
+	public function getVersion() {
+		return __CLASS__ . ': $Id: ApiPageSet.php 21402 2007-04-20 08:55:14Z nickj $';
+	}
+}
+?>
Index: /MediaWiki/branches/1.11/includes/api/ApiQuery.php
===================================================================
--- /MediaWiki/branches/1.11/includes/api/ApiQuery.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/api/ApiQuery.php	(revision 1280)
@@ -0,0 +1,380 @@
+<?php
+
+/*
+ * Created on Sep 7, 2006
+ *
+ * API for MediaWiki 1.8+
+ *
+ * Copyright (C) 2006 Yuri Astrakhan <FirstnameLastname@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ */
+
+if (!defined('MEDIAWIKI')) {
+	// Eclipse helper - will be ignored in production
+	require_once ('ApiBase.php');
+}
+
+/**
+ * @addtogroup API
+ */
+class ApiQuery extends ApiBase {
+
+	private $mPropModuleNames, $mListModuleNames, $mMetaModuleNames;
+	private $mPageSet;
+
+	private $mQueryPropModules = array (
+		'info' => 'ApiQueryInfo',
+		'revisions' => 'ApiQueryRevisions'
+	);
+	//	'categories' => 'ApiQueryCategories',
+	//	'imageinfo' => 'ApiQueryImageinfo',
+	//	'langlinks' => 'ApiQueryLanglinks',
+	//	'links' => 'ApiQueryLinks',
+	//	'templates' => 'ApiQueryTemplates',
+
+	private $mQueryListModules = array (
+		'allpages' => 'ApiQueryAllpages',
+		'logevents' => 'ApiQueryLogEvents',
+		'watchlist' => 'ApiQueryWatchlist',
+		'recentchanges' => 'ApiQueryRecentChanges',
+		'backlinks' => 'ApiQueryBacklinks',
+		'embeddedin' => 'ApiQueryBacklinks',
+		'imagelinks' => 'ApiQueryBacklinks',
+		'usercontribs' => 'ApiQueryContributions'
+	);
+	//	'categorymembers' => 'ApiQueryCategorymembers',
+	//	'embeddedin' => 'ApiQueryEmbeddedin',
+	//	'imagelinks' => 'ApiQueryImagelinks',
+	//	'recentchanges' => 'ApiQueryRecentchanges',
+	//	'users' => 'ApiQueryUsers',
+	//	'watchlist' => 'ApiQueryWatchlist',
+
+	private $mQueryMetaModules = array (
+		'siteinfo' => 'ApiQuerySiteinfo'
+	);
+	//	'userinfo' => 'ApiQueryUserinfo',
+
+	private $mSlaveDB = null;
+
+	public function __construct($main, $action) {
+		parent :: __construct($main, $action);
+		$this->mPropModuleNames = array_keys($this->mQueryPropModules);
+		$this->mListModuleNames = array_keys($this->mQueryListModules);
+		$this->mMetaModuleNames = array_keys($this->mQueryMetaModules);
+
+		// Allow the entire list of modules at first,
+		// but during module instantiation check if it can be used as a generator.
+		$this->mAllowedGenerators = array_merge($this->mListModuleNames, $this->mPropModuleNames);
+	}
+
+	public function getDB() {
+		if (!isset ($this->mSlaveDB)) {
+			$this->profileDBIn();
+			$this->mSlaveDB = wfGetDB(DB_SLAVE);
+			$this->profileDBOut();
+		}
+		return $this->mSlaveDB;
+	}
+
+	public function getPageSet() {
+		return $this->mPageSet;
+	}
+
+	/**
+	 * Query execution happens in the following steps:
+	 * #1 Create a PageSet object with any pages requested by the user
+	 * #2 If using generator, execute it to get a new PageSet object
+	 * #3 Instantiate all requested modules. 
+	 *    This way the PageSet object will know what shared data is required,
+	 *    and minimize DB calls. 
+	 * #4 Output all normalization and redirect resolution information
+	 * #5 Execute all requested modules
+	 */
+	public function execute() {
+		$prop = $list = $meta = $generator = $redirects = null;
+		extract($this->extractRequestParams());
+
+		//
+		// Create PageSet
+		//
+		$this->mPageSet = new ApiPageSet($this, $redirects);
+
+		// Instantiate required modules
+		$modules = array ();
+		if (isset ($prop))
+			foreach ($prop as $moduleName)
+				$modules[] = new $this->mQueryPropModules[$moduleName] ($this, $moduleName);
+		if (isset ($list))
+			foreach ($list as $moduleName)
+				$modules[] = new $this->mQueryListModules[$moduleName] ($this, $moduleName);
+		if (isset ($meta))
+			foreach ($meta as $moduleName)
+				$modules[] = new $this->mQueryMetaModules[$moduleName] ($this, $moduleName);
+
+		// Modules may optimize data requests through the $this->getPageSet() object 
+		// Execute all requested modules.
+		foreach ($modules as $module) {
+			$module->requestExtraData();
+		}
+
+		//
+		// If given, execute generator to substitute user supplied data with generated data.  
+		//
+		if (isset ($generator))
+			$this->executeGeneratorModule($generator, $redirects);
+
+		//
+		// Populate page information for the given pageSet
+		//
+		$this->mPageSet->execute();
+
+		//
+		// Record page information (title, namespace, if exists, etc)
+		//
+		$this->outputGeneralPageInfo();
+
+		//
+		// Execute all requested modules.
+		//
+		foreach ($modules as $module) {
+			$module->profileIn();
+			$module->execute();
+			$module->profileOut();
+		}
+	}
+
+	private function outputGeneralPageInfo() {
+
+		$pageSet = $this->getPageSet();
+		$result = $this->getResult();
+
+		// Title normalizations
+		$normValues = array ();
+		foreach ($pageSet->getNormalizedTitles() as $rawTitleStr => $titleStr) {
+			$normValues[] = array (
+				'from' => $rawTitleStr,
+				'to' => $titleStr
+			);
+		}
+
+		if (!empty ($normValues)) {
+			$result->setIndexedTagName($normValues, 'n');
+			$result->addValue('query', 'normalized', $normValues);
+		}
+
+		// Show redirect information
+		$redirValues = array ();
+		foreach ($pageSet->getRedirectTitles() as $titleStrFrom => $titleStrTo) {
+			$redirValues[] = array (
+				'from' => $titleStrFrom,
+				'to' => $titleStrTo
+			);
+		}
+
+		if (!empty ($redirValues)) {
+			$result->setIndexedTagName($redirValues, 'r');
+			$result->addValue('query', 'redirects', $redirValues);
+		}
+
+		//
+		// Missing revision elements
+		//
+		$missingRevIDs = $pageSet->getMissingRevisionIDs();
+		if (!empty ($missingRevIDs)) {
+			$revids = array ();
+			foreach ($missingRevIDs as $revid) {
+				$revids[$revid] = array (
+					'revid' => $revid
+				);
+			}
+			$result->setIndexedTagName($revids, 'rev');
+			$result->addValue('query', 'badrevids', $revids);
+		}
+
+		//
+		// Page elements
+		//
+		$pages = array ();
+
+		// Report any missing titles
+		$fakepageid = -1;
+		foreach ($pageSet->getMissingTitles() as $title) {
+			$pages[$fakepageid--] = array (
+			'ns' => $title->getNamespace(), 'title' => $title->getPrefixedText(), 'missing' => '');
+		}
+
+		// Report any missing page ids
+		foreach ($pageSet->getMissingPageIDs() as $pageid) {
+			$pages[$pageid] = array (
+				'pageid' => $pageid,
+				'missing' => ''
+			);
+		}
+
+		// Output general page information for found titles
+		foreach ($pageSet->getGoodTitles() as $pageid => $title) {
+			$pages[$pageid] = array (
+				'pageid' => $pageid,
+			'ns' => $title->getNamespace(), 'title' => $title->getPrefixedText());
+		}
+
+		if (!empty ($pages)) {
+			$result->setIndexedTagName($pages, 'page');
+			$result->addValue('query', 'pages', $pages);
+		}
+	}
+
+	protected function executeGeneratorModule($generatorName, $redirects) {
+
+		// Find class that implements requested generator
+		if (isset ($this->mQueryListModules[$generatorName])) {
+			$className = $this->mQueryListModules[$generatorName];
+		}
+		elseif (isset ($this->mQueryPropModules[$generatorName])) {
+			$className = $this->mQueryPropModules[$generatorName];
+		} else {
+			ApiBase :: dieDebug(__METHOD__, "Unknown generator=$generatorName");
+		}
+
+		// Use current pageset as the result, and create a new one just for the generator 
+		$resultPageSet = $this->mPageSet;
+		$this->mPageSet = new ApiPageSet($this, $redirects);
+
+		// Create and execute the generator
+		$generator = new $className ($this, $generatorName);
+		if (!$generator instanceof ApiQueryGeneratorBase)
+			$this->dieUsage("Module $generatorName cannot be used as a generator", "badgenerator");
+
+		$generator->setGeneratorMode();
+		$generator->requestExtraData();
+
+		// execute current pageSet to get the data for the generator module
+		$this->mPageSet->execute();
+
+		// populate resultPageSet with the generator output
+		$generator->profileIn();
+		$generator->executeGenerator($resultPageSet);
+		$resultPageSet->finishPageSetGeneration();
+		$generator->profileOut();
+
+		// Swap the resulting pageset back in
+		$this->mPageSet = $resultPageSet;
+	}
+
+	protected function getAllowedParams() {
+		return array (
+			'prop' => array (
+				ApiBase :: PARAM_ISMULTI => true,
+				ApiBase :: PARAM_TYPE => $this->mPropModuleNames
+			),
+			'list' => array (
+				ApiBase :: PARAM_ISMULTI => true,
+				ApiBase :: PARAM_TYPE => $this->mListModuleNames
+			),
+			'meta' => array (
+				ApiBase :: PARAM_ISMULTI => true,
+				ApiBase :: PARAM_TYPE => $this->mMetaModuleNames
+			),
+			'generator' => array (
+				ApiBase :: PARAM_TYPE => $this->mAllowedGenerators
+			),
+			'redirects' => false
+		);
+	}
+
+	/**
+	 * Override the parent to generate help messages for all available query modules.
+	 */
+	public function makeHelpMsg() {
+
+		// Use parent to make default message for the query module
+		$msg = parent :: makeHelpMsg();
+
+		// Make sure the internal object is empty
+		// (just in case a sub-module decides to optimize during instantiation)
+		$this->mPageSet = null;
+
+		$astriks = str_repeat('--- ', 8);
+		$msg .= "\n$astriks Query: Prop  $astriks\n\n";
+		$msg .= $this->makeHelpMsgHelper($this->mQueryPropModules, 'prop');
+		$msg .= "\n$astriks Query: List  $astriks\n\n";
+		$msg .= $this->makeHelpMsgHelper($this->mQueryListModules, 'list');
+		$msg .= "\n$astriks Query: Meta  $astriks\n\n";
+		$msg .= $this->makeHelpMsgHelper($this->mQueryMetaModules, 'meta');
+
+		return $msg;
+	}
+
+	private function makeHelpMsgHelper($moduleList, $paramName) {
+
+		$moduleDscriptions = array ();
+
+		foreach ($moduleList as $moduleName => $moduleClass) {
+			$msg = "* $paramName=$moduleName *";
+			$module = new $moduleClass ($this, $moduleName, null);
+			$msg2 = $module->makeHelpMsg();
+			if ($msg2 !== false)
+				$msg .= $msg2;
+			if ($module instanceof ApiQueryGeneratorBase)
+				$msg .= "Generator:\n  This module may be used as a generator\n";
+			$moduleDscriptions[] = $msg;
+		}
+
+		return implode("\n", $moduleDscriptions);
+	}
+
+	/**
+	 * Override to add extra parameters from PageSet
+	 */
+	public function makeHelpMsgParameters() {
+		$psModule = new ApiPageSet($this);
+		return $psModule->makeHelpMsgParameters() . parent :: makeHelpMsgParameters();
+	}
+
+	protected function getParamDescription() {
+		return array (
+			'prop' => 'Which properties to get for the titles/revisions/pageids',
+			'list' => 'Which lists to get',
+			'meta' => 'Which meta data to get about the site',
+			'generator' => 'Use the output of a list as the input for other prop/list/meta items',
+			'redirects' => 'Automatically resolve redirects'
+		);
+	}
+
+	protected function getDescription() {
+		return array (
+			'Query API module allows applications to get needed pieces of data from the MediaWiki databases,',
+			'and is loosely based on the Query API interface currently available on all MediaWiki servers.',
+			'All data modifications will first have to use query to acquire a token to prevent abuse from malicious sites.'
+		);
+	}
+
+	protected function getExamples() {
+		return array (
+			'api.php?action=query&prop=revisions&meta=siteinfo&titles=Main%20Page&rvprop=user|comment'
+		);
+	}
+
+	public function getVersion() {
+		$psModule = new ApiPageSet($this);
+		$vers = array ();
+		$vers[] = __CLASS__ . ': $Id: ApiQuery.php 21402 2007-04-20 08:55:14Z nickj $';
+		$vers[] = $psModule->getVersion();
+		return $vers;
+	}
+}
+?>
Index: /MediaWiki/branches/1.11/includes/api/ApiQueryAllpages.php
===================================================================
--- /MediaWiki/branches/1.11/includes/api/ApiQueryAllpages.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/api/ApiQueryAllpages.php	(revision 1280)
@@ -0,0 +1,175 @@
+<?php
+
+/*
+ * Created on Sep 25, 2006
+ *
+ * API for MediaWiki 1.8+
+ *
+ * Copyright (C) 2006 Yuri Astrakhan <FirstnameLastname@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ */
+
+if (!defined('MEDIAWIKI')) {
+	// Eclipse helper - will be ignored in production
+	require_once ('ApiQueryBase.php');
+}
+
+/**
+ * @addtogroup API
+ */
+class ApiQueryAllpages extends ApiQueryGeneratorBase {
+
+	public function __construct($query, $moduleName) {
+		parent :: __construct($query, $moduleName, 'ap');
+	}
+
+	public function execute() {
+		$this->run();
+	}
+
+	public function executeGenerator($resultPageSet) {
+		if ($resultPageSet->isResolvingRedirects())
+			$this->dieUsage('Use "gapfilterredir=nonredirects" option instead of "redirects" when using allpages as a generator', 'params');
+
+		$this->run($resultPageSet);
+	}
+
+	private function run($resultPageSet = null) {
+
+		wfProfileIn($this->getModuleProfileName() . '-getDB');
+		$db = $this->getDB();
+		wfProfileOut($this->getModuleProfileName() . '-getDB');
+
+		wfProfileIn($this->getModuleProfileName() . '-parseParams');
+		$limit = $from = $namespace = $filterredir = $prefix = null;
+		extract($this->extractRequestParams());
+
+		$this->addTables('page');
+		if (!$this->addWhereIf('page_is_redirect = 1', $filterredir === 'redirects'))
+			$this->addWhereIf('page_is_redirect = 0', $filterredir === 'nonredirects');
+		$this->addWhereFld('page_namespace', $namespace);
+		if (isset ($from))
+			$this->addWhere('page_title>=' . $db->addQuotes(ApiQueryBase :: titleToKey($from)));
+		if (isset ($prefix))
+			$this->addWhere("page_title LIKE '{$db->strencode(ApiQueryBase :: titleToKey($prefix))}%'");
+
+		if (is_null($resultPageSet)) {
+			$this->addFields(array (
+				'page_id',
+				'page_namespace',
+				'page_title'
+			));
+		} else {
+			$this->addFields($resultPageSet->getPageTableFields());
+		}
+
+		$this->addOption('USE INDEX', 'name_title');
+		$this->addOption('LIMIT', $limit +1);
+		$this->addOption('ORDER BY', 'page_namespace, page_title');
+
+		wfProfileOut($this->getModuleProfileName() . '-parseParams');
+
+		$res = $this->select(__METHOD__);
+
+		wfProfileIn($this->getModuleProfileName() . '-saveResults');
+
+		$data = array ();
+		$count = 0;
+		while ($row = $db->fetchObject($res)) {
+			if (++ $count > $limit) {
+				// We've reached the one extra which shows that there are additional pages to be had. Stop here...
+				$this->setContinueEnumParameter('from', ApiQueryBase :: keyToTitle($row->page_title));
+				break;
+			}
+
+			if (is_null($resultPageSet)) {
+				$vals = $this->addRowInfo('page', $row);
+				if ($vals)
+					$data[intval($row->page_id)] = $vals;
+			} else {
+				$resultPageSet->processDbRow($row);
+			}
+		}
+		$db->freeResult($res);
+
+		if (is_null($resultPageSet)) {
+			$result = $this->getResult();
+			$result->setIndexedTagName($data, 'p');
+			$result->addValue('query', $this->getModuleName(), $data);
+		}
+
+		wfProfileOut($this->getModuleProfileName() . '-saveResults');
+	}
+
+	protected function getAllowedParams() {
+		return array (
+			'from' => null,
+			'prefix' => null,
+			'namespace' => array (
+				ApiBase :: PARAM_DFLT => 0,
+				ApiBase :: PARAM_TYPE => 'namespace'
+			),
+			'filterredir' => array (
+				ApiBase :: PARAM_DFLT => 'all',
+				ApiBase :: PARAM_TYPE => array (
+					'all',
+					'redirects',
+					'nonredirects'
+				)
+			),
+			'limit' => array (
+				ApiBase :: PARAM_DFLT => 10,
+				ApiBase :: PARAM_TYPE => 'limit',
+				ApiBase :: PARAM_MIN => 1,
+				ApiBase :: PARAM_MAX1 => ApiBase :: LIMIT_BIG1,
+				ApiBase :: PARAM_MAX2 => ApiBase :: LIMIT_BIG2
+			)
+		);
+	}
+
+	protected function getParamDescription() {
+		return array (
+			'from' => 'The page title to start enumerating from.',
+			'prefix' => 'Search for all page titles that begin with this value.',
+			'namespace' => 'The namespace to enumerate.',
+			'filterredir' => 'Which pages to list.',
+			'limit' => 'How many total pages to return.'
+		);
+	}
+
+	protected function getDescription() {
+		return 'Enumerate all pages sequentially in a given namespace';
+	}
+
+	protected function getExamples() {
+		return array (
+			'Simple Use',
+			' Show a list of pages starting at the letter "B"',
+			'  api.php?action=query&list=allpages&apfrom=B',
+			'Using as Generator',
+			' Show info about 4 pages starting at the letter "T"',
+			'  api.php?action=query&generator=allpages&gaplimit=4&gapfrom=T&prop=info',
+			' Show content of first 2 non-redirect pages begining at "Re"',
+			'  api.php?action=query&generator=allpages&gaplimit=2&gapfilterredir=nonredirects&gapfrom=Re&prop=revisions&rvprop=content'
+		);
+	}
+
+	public function getVersion() {
+		return __CLASS__ . ': $Id: ApiQueryAllpages.php 21402 2007-04-20 08:55:14Z nickj $';
+	}
+}
+?>
Index: /MediaWiki/branches/1.11/includes/api/ApiQueryBacklinks.php
===================================================================
--- /MediaWiki/branches/1.11/includes/api/ApiQueryBacklinks.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/api/ApiQueryBacklinks.php	(revision 1280)
@@ -0,0 +1,360 @@
+<?php
+
+/*
+ * Created on Oct 16, 2006
+ *
+ * API for MediaWiki 1.8+
+ *
+ * Copyright (C) 2006 Yuri Astrakhan <FirstnameLastname@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ */
+
+if (!defined('MEDIAWIKI')) {
+	// Eclipse helper - will be ignored in production
+	require_once ("ApiQueryBase.php");
+}
+
+/**
+ * @addtogroup API
+ */
+class ApiQueryBacklinks extends ApiQueryGeneratorBase {
+
+	private $rootTitle, $contRedirs, $contLevel, $contTitle, $contID;
+
+	// output element name, database column field prefix, database table 
+	private $backlinksSettings = array (
+		'backlinks' => array (
+			'code' => 'bl',
+			'prefix' => 'pl',
+			'linktbl' => 'pagelinks'
+		),
+		'embeddedin' => array (
+			'code' => 'ei',
+			'prefix' => 'tl',
+			'linktbl' => 'templatelinks'
+		),
+		'imagelinks' => array (
+			'code' => 'il',
+			'prefix' => 'il',
+			'linktbl' => 'imagelinks'
+		)
+	);
+
+	public function __construct($query, $moduleName) {
+		$code = $prefix = $linktbl = null;
+		extract($this->backlinksSettings[$moduleName]);
+
+		parent :: __construct($query, $moduleName, $code);
+		$this->bl_ns = $prefix . '_namespace';
+		$this->bl_from = $prefix . '_from';
+		$this->bl_tables = array (
+			$linktbl,
+			'page'
+		);
+		$this->bl_code = $code;
+
+		$this->hasNS = $moduleName !== 'imagelinks';
+		if ($this->hasNS) {
+			$this->bl_title = $prefix . '_title';
+			$this->bl_sort = "{$this->bl_ns}, {$this->bl_title}, {$this->bl_from}";
+			$this->bl_fields = array (
+				$this->bl_ns,
+				$this->bl_title
+			);
+		} else {
+			$this->bl_title = $prefix . '_to';
+			$this->bl_sort = "{$this->bl_title}, {$this->bl_from}";
+			$this->bl_fields = array (
+				$this->bl_title
+			);
+		}
+	}
+
+	public function execute() {
+		$this->run();
+	}
+
+	public function executeGenerator($resultPageSet) {
+		$this->run($resultPageSet);
+	}
+
+	private function run($resultPageSet = null) {
+		$continue = $namespace = $redirect = $limit = null;
+		extract($this->extractRequestParams());
+
+		if ($redirect)
+			ApiBase :: dieDebug(__METHOD__, 'Redirect is not yet been implemented', 'notimplemented');
+
+		$this->processContinue($continue, $redirect);
+
+		$this->addFields($this->bl_fields);
+		if (is_null($resultPageSet))
+			$this->addFields(array (
+				'page_id',
+				'page_namespace',
+				'page_title'
+			));
+		else
+			$this->addFields($resultPageSet->getPageTableFields()); // will include page_id
+
+		$this->addTables($this->bl_tables);
+		$this->addWhere($this->bl_from . '=page_id');
+
+		if ($this->hasNS)
+			$this->addWhereFld($this->bl_ns, $this->rootTitle->getNamespace());
+		$this->addWhereFld($this->bl_title, $this->rootTitle->getDBkey());
+		$this->addWhereFld('page_namespace', $namespace);
+		$this->addOption('LIMIT', $limit +1);
+		$this->addOption('ORDER BY', $this->bl_sort);
+
+		if ($redirect)
+			$this->addWhereFld('page_is_redirect', 0);
+
+		$db = $this->getDB();
+		if (!is_null($continue)) {
+			$plfrm = intval($this->contID);
+			if ($this->contLevel == 0) {
+				// For the first level, there is only one target title, so no need for complex filtering
+				$this->addWhere($this->bl_from . '>=' . $plfrm);
+			} else {
+				$ns = $this->contTitle->getNamespace();
+				$t = $db->addQuotes($this->contTitle->getDBkey());
+				$whereWithoutNS = "{$this->bl_title}>$t OR ({$this->bl_title}=$t AND {$this->bl_from}>=$plfrm))";
+
+				if ($this->hasNS)
+					$this->addWhere("{$this->bl_ns}>$ns OR ({$this->bl_ns}=$ns AND ($whereWithoutNS)");
+				else
+					$this->addWhere($whereWithoutNS);
+			}
+		}
+
+		$res = $this->select(__METHOD__);
+
+		$count = 0;
+		$data = array ();
+		while ($row = $db->fetchObject($res)) {
+			if (++ $count > $limit) {
+				// We've reached the one extra which shows that there are additional pages to be had. Stop here...
+				if ($redirect) {
+					$ns = $row-> {
+						$this->bl_ns };
+					$t = $row-> {
+						$this->bl_title };
+					$continue = $this->getContinueRedirStr(false, 0, $ns, $t, $row->page_id);
+				} else
+					$continue = $this->getContinueStr($row->page_id);
+				$this->setContinueEnumParameter('continue', $continue);
+				break;
+			}
+
+			if (is_null($resultPageSet)) {
+				$vals = $this->addRowInfo('page', $row);
+				if ($vals)
+					$data[intval($row->page_id)] = $vals;
+			} else {
+				$resultPageSet->processDbRow($row);
+			}
+		}
+		$db->freeResult($res);
+
+		if (is_null($resultPageSet)) {
+			$result = $this->getResult();
+			$result->setIndexedTagName($data, $this->bl_code);
+			$result->addValue('query', $this->getModuleName(), $data);
+		}
+	}
+
+	protected function processContinue($continue, $redirect) {
+		$pageSet = $this->getPageSet();
+		$count = $pageSet->getTitleCount();
+		if (!is_null($continue)) {
+			if ($count !== 0)
+				$this->dieUsage("When continuing the {$this->getModuleName()} query, no other titles may be provided", 'titles_on_continue');
+			$this->parseContinueParam($continue, $redirect);
+
+			// Skip all completed links
+
+		} else {
+			if ($count !== 1)
+				$this->dieUsage("The {$this->getModuleName()} query requires one title to start", 'bad_title_count');
+			$this->rootTitle = current($pageSet->getTitles()); // only one title there
+		}
+
+		// only image titles are allowed for the root 
+		if (!$this->hasNS && $this->rootTitle->getNamespace() !== NS_IMAGE)
+			$this->dieUsage("The title for {$this->getModuleName()} query must be an image", 'bad_image_title');
+	}
+
+	protected function parseContinueParam($continue, $redirect) {
+		$continueList = explode('|', $continue);
+		if ($redirect) {
+			//
+			// expected redirect-mode parameter:
+			// ns|db_key|step|level|ns|db_key|id
+			// ns+db_key -- the root title
+			// step = 1 or 2 - which step to continue from - 1-titles, 2-redirects
+			// level -- how many levels to follow before starting enumerating.
+			// if level > 0 -- ns+title to continue from, otherwise skip these 
+			// id = last page_id to continue from
+			//
+			if (count($continueList) > 4) {
+				$rootNs = intval($continueList[0]);
+				if (($rootNs !== 0 || $continueList[0] === '0') && !empty ($continueList[1])) {
+					$this->rootTitle = Title :: makeTitleSafe($rootNs, $continueList[1]);
+					if ($this->rootTitle && $this->rootTitle->userCanRead()) {
+
+						$step = intval($continueList[2]);
+						if ($step === 1 || $step === 2) {
+							$this->contRedirs = ($step === 2);
+
+							$level = intval($continueList[3]);
+							if ($level !== 0 || $continueList[3] === '0') {
+								$this->contLevel = $level;
+
+								if ($level === 0) {
+									if (count($continueList) === 5) {
+										$contID = intval($continueList[4]);
+										if ($contID !== 0 || $continueList[4] === '0') {
+											$this->contID = $contID;
+											return; // done
+										}
+									}
+								} else {
+									if (count($continueList) === 7) {
+										$contNs = intval($continueList[4]);
+										if (($contNs !== 0 || $continueList[4] === '0') && !empty ($continueList[5])) {
+											$this->contTitle = Title :: makeTitleSafe($contNs, $continueList[5]);
+
+											$contID = intval($continueList[6]);
+											if ($contID !== 0 || $continueList[6] === '0') {
+												$this->contID = $contID;
+												return; // done
+											}
+										}
+									}
+								}
+							}
+						}
+					}
+				}
+			}
+		} else {
+			//
+			// expected non-redirect-mode parameter:
+			// ns|db_key|id
+			// ns+db_key -- the root title
+			// id = last page_id to continue from
+			//
+			if (count($continueList) === 3) {
+				$rootNs = intval($continueList[0]);
+				if (($rootNs !== 0 || $continueList[0] === '0') && !empty ($continueList[1])) {
+					$this->rootTitle = Title :: makeTitleSafe($rootNs, $continueList[1]);
+					if ($this->rootTitle && $this->rootTitle->userCanRead()) {
+
+						$contID = intval($continueList[2]);
+						if ($contID !== 0) {
+							$this->contID = $contID;
+							return; // done
+						}
+					}
+				}
+			}
+		}
+
+		$this->dieUsage("Invalid continue param. You should pass the original value returned by the previous query", "_badcontinue");
+	}
+
+	protected function getContinueStr($lastPageID) {
+		return $this->rootTitle->getNamespace() .
+		'|' . $this->rootTitle->getDBkey() .
+		'|' . $lastPageID;
+	}
+
+	protected function getContinueRedirStr($isRedirPhase, $level, $ns, $title, $lastPageID) {
+		return $this->rootTitle->getNamespace() .
+		'|' . $this->rootTitle->getDBkey() .
+		'|' . ($isRedirPhase ? 1 : 2) .
+		'|' . $level .
+		 ($level > 0 ? ('|' . $ns . '|' . $title) : '') .
+		'|' . $lastPageID;
+	}
+
+	protected function getAllowedParams() {
+
+		return array (
+			'continue' => null,
+			'namespace' => array (
+				ApiBase :: PARAM_ISMULTI => true,
+				ApiBase :: PARAM_TYPE => 'namespace'
+			),
+			'redirect' => false,
+			'limit' => array (
+				ApiBase :: PARAM_DFLT => 10,
+				ApiBase :: PARAM_TYPE => 'limit',
+				ApiBase :: PARAM_MIN => 1,
+				ApiBase :: PARAM_MAX1 => ApiBase :: LIMIT_BIG1,
+				ApiBase :: PARAM_MAX2 => ApiBase :: LIMIT_BIG2
+			)
+		);
+	}
+
+	protected function getParamDescription() {
+		return array (
+			'continue' => 'When more results are available, use this to continue.',
+			'namespace' => 'The namespace to enumerate.',
+			'redirect' => 'If linking page is a redirect, find all pages that link to that redirect (not implemented)',
+			'limit' => 'How many total pages to return.'
+		);
+	}
+
+	protected function getDescription() {
+		switch ($this->getModuleName()) {
+			case 'backlinks' :
+				return 'Find all pages that link to the given page';
+			case 'embeddedin' :
+				return 'Find all pages that embed (transclude) the given title';
+			case 'imagelinks' :
+				return 'Find all pages that use the given image title.';
+			default :
+				ApiBase :: dieDebug(__METHOD__, 'Unknown module name');
+		}
+	}
+
+	protected function getExamples() {
+		static $examples = array (
+			'backlinks' => array (
+				"api.php?action=query&list=backlinks&titles=Main%20Page",
+				"api.php?action=query&generator=backlinks&titles=Main%20Page&prop=info"
+			),
+			'embeddedin' => array (
+				"api.php?action=query&list=embeddedin&titles=Template:Stub",
+				"api.php?action=query&generator=embeddedin&titles=Template:Stub&prop=info"
+			),
+			'imagelinks' => array (
+				"api.php?action=query&list=imagelinks&titles=Image:Albert%20Einstein%20Head.jpg",
+				"api.php?action=query&generator=imagelinks&titles=Image:Albert%20Einstein%20Head.jpg&prop=info"
+			)
+		);
+
+		return $examples[$this->getModuleName()];
+	}
+
+	public function getVersion() {
+		return __CLASS__ . ': $Id: ApiQueryBacklinks.php 21402 2007-04-20 08:55:14Z nickj $';
+	}
+}
+?>
Index: /MediaWiki/branches/1.11/includes/api/ApiQueryBase.php
===================================================================
--- /MediaWiki/branches/1.11/includes/api/ApiQueryBase.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/api/ApiQueryBase.php	(revision 1280)
@@ -0,0 +1,378 @@
+<?php
+
+/*
+ * Created on Sep 7, 2006
+ *
+ * API for MediaWiki 1.8+
+ *
+ * Copyright (C) 2006 Yuri Astrakhan <FirstnameLastname@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ */
+
+if (!defined('MEDIAWIKI')) {
+	// Eclipse helper - will be ignored in production
+	require_once ('ApiBase.php');
+}
+
+/**
+ * @addtogroup API
+ */
+abstract class ApiQueryBase extends ApiBase {
+
+	private $mQueryModule, $tables, $where, $fields, $options;
+
+	public function __construct($query, $moduleName, $paramPrefix = '') {
+		parent :: __construct($query->getMain(), $moduleName, $paramPrefix);
+		$this->mQueryModule = $query;
+		$this->resetQueryParams();
+	}
+
+	protected function resetQueryParams() {
+		$this->tables = array ();
+		$this->where = array ();
+		$this->fields = array ();
+		$this->options = array ();
+	}
+
+	protected function addTables($value) {
+		if (is_array($value))
+			$this->tables = array_merge($this->tables, $value);
+		else
+			$this->tables[] = $value;
+	}
+
+	protected function addFields($value) {
+		if (is_array($value))
+			$this->fields = array_merge($this->fields, $value);
+		else
+			$this->fields[] = $value;
+	}
+
+	protected function addFieldsIf($value, $condition) {
+		if ($condition) {
+			$this->addFields($value);
+			return true;
+		}
+		return false;
+	}
+
+	protected function addWhere($value) {
+		if (is_array($value))
+			$this->where = array_merge($this->where, $value);
+		else
+			$this->where[] = $value;
+	}
+
+	protected function addWhereIf($value, $condition) {
+		if ($condition) {
+			$this->addWhere($value);
+			return true;
+		}
+		return false;
+	}
+
+	protected function addWhereFld($field, $value) {
+		if (!is_null($value))
+			$this->where[$field] = $value;
+	}
+
+	protected function addWhereRange($field, $dir, $start, $end) {
+		$isDirNewer = ($dir === 'newer');
+		$after = ($isDirNewer ? '>=' : '<=');
+		$before = ($isDirNewer ? '<=' : '>=');
+		$db = $this->getDB();
+
+		if (!is_null($start))
+			$this->addWhere($field . $after . $db->addQuotes($start));
+
+		if (!is_null($end))
+			$this->addWhere($field . $before . $db->addQuotes($end));
+
+		$this->addOption('ORDER BY', $field . ($isDirNewer ? '' : ' DESC'));
+	}
+
+	protected function addOption($name, $value = null) {
+		if (is_null($value))
+			$this->options[] = $name;
+		else
+			$this->options[$name] = $value;
+	}
+
+	protected function select($method) {
+
+		// getDB has its own profileDBIn/Out calls
+		$db = $this->getDB();
+
+		$this->profileDBIn();
+		$res = $db->select($this->tables, $this->fields, $this->where, $method, $this->options);
+		$this->profileDBOut();
+
+		return $res;
+	}
+
+	protected function addRowInfo($prefix, $row) {
+
+		$vals = array ();
+
+		// ID
+		if ( isset( $row-> { $prefix . '_id' } ) )
+			$vals[$prefix . 'id'] = intval( $row-> { $prefix . '_id' } );
+
+		// Title
+		$title = ApiQueryBase :: addRowInfo_title($row, $prefix . '_namespace', $prefix . '_title');
+		if ($title) {
+			if (!$title->userCanRead())
+				return false;
+			$vals['ns'] = $title->getNamespace();
+			$vals['title'] = $title->getPrefixedText();
+		}
+
+		switch ($prefix) {
+
+			case 'page' :
+				// page_is_redirect
+				@ $tmp = $row->page_is_redirect;
+				if ($tmp)
+					$vals['redirect'] = '';
+
+				break;
+
+			case 'rc' :
+				// PageId
+				@ $tmp = $row->rc_cur_id;
+				if (!is_null($tmp))
+					$vals['pageid'] = intval($tmp);
+
+				@ $tmp = $row->rc_this_oldid;
+				if (!is_null($tmp))
+					$vals['revid'] = intval($tmp);
+
+				if ( isset( $row->rc_last_oldid ) )
+					$vals['old_revid'] = intval( $row->rc_last_oldid );
+
+				$title = ApiQueryBase :: addRowInfo_title($row, 'rc_moved_to_ns', 'rc_moved_to_title');
+				if ($title) {
+					if (!$title->userCanRead())
+						return false;
+					$vals['new_ns'] = $title->getNamespace();
+					$vals['new_title'] = $title->getPrefixedText();
+				}
+
+				if ( isset( $row->rc_patrolled ) )
+					$vals['patrolled'] = '';
+
+				break;
+
+			case 'log' :
+				// PageId
+				@ $tmp = $row->page_id;
+				if (!is_null($tmp))
+					$vals['pageid'] = intval($tmp);
+
+				if ($row->log_params !== '') {
+					$params = explode("\n", $row->log_params);
+					if ($row->log_type == 'move' && isset ($params[0])) {
+						$newTitle = Title :: newFromText($params[0]);
+						if ($newTitle) {
+							$vals['new_ns'] = $newTitle->getNamespace();
+							$vals['new_title'] = $newTitle->getPrefixedText();
+							$params = null;
+						}
+					}
+
+					if (!empty ($params)) {
+						$this->getResult()->setIndexedTagName($params, 'param');
+						$vals = array_merge($vals, $params);
+					}
+				}
+
+				break;
+
+			case 'rev' :
+				// PageID
+				@ $tmp = $row->rev_page;
+				if (!is_null($tmp))
+					$vals['pageid'] = intval($tmp);
+		}
+
+		// Type
+		@ $tmp = $row-> {
+			$prefix . '_type' };
+		if (!is_null($tmp))
+			$vals['type'] = $tmp;
+
+		// Action
+		@ $tmp = $row-> {
+			$prefix . '_action' };
+		if (!is_null($tmp))
+			$vals['action'] = $tmp;
+
+		// Old ID
+		@ $tmp = $row-> {
+			$prefix . '_text_id' };
+		if (!is_null($tmp))
+			$vals['oldid'] = intval($tmp);
+
+		// User Name / Anon IP
+		@ $tmp = $row-> {
+			$prefix . '_user_text' };
+		if (is_null($tmp))
+			@ $tmp = $row->user_name;
+		if (!is_null($tmp)) {
+			$vals['user'] = $tmp;
+			@ $tmp = !$row-> {
+				$prefix . '_user' };
+			if (!is_null($tmp) && $tmp)
+				$vals['anon'] = '';
+		}
+
+		// Bot Edit
+		@ $tmp = $row-> {
+			$prefix . '_bot' };
+		if (!is_null($tmp) && $tmp)
+			$vals['bot'] = '';
+
+		// New Edit
+		@ $tmp = $row-> {
+			$prefix . '_new' };
+		if (is_null($tmp))
+			@ $tmp = $row-> {
+			$prefix . '_is_new' };
+		if (!is_null($tmp) && $tmp)
+			$vals['new'] = '';
+
+		// Minor Edit
+		@ $tmp = $row-> {
+			$prefix . '_minor_edit' };
+		if (is_null($tmp))
+			@ $tmp = $row-> {
+			$prefix . '_minor' };
+		if (!is_null($tmp) && $tmp)
+			$vals['minor'] = '';
+
+		// Timestamp
+		@ $tmp = $row-> {
+			$prefix . '_timestamp' };
+		if (!is_null($tmp))
+			$vals['timestamp'] = wfTimestamp(TS_ISO_8601, $tmp);
+
+		// Comment
+		@ $tmp = $row-> {
+			$prefix . '_comment' };
+		if (!empty ($tmp)) // optimize bandwidth
+			$vals['comment'] = $tmp;
+
+		return $vals;
+	}
+
+	private static function addRowInfo_title($row, $nsfld, $titlefld) {
+		if ( isset( $row-> $nsfld ) ) {
+			$ns = $row-> $nsfld;
+			@ $title = $row-> $titlefld;
+			if (!empty ($title))
+				return Title :: makeTitle($ns, $title);
+		}
+		return false;
+	}
+
+	/**
+	 * Override this method to request extra fields from the pageSet
+	 * using $this->getPageSet()->requestField('fieldName')
+	 */
+	public function requestExtraData() {
+	}
+
+	/**
+	 * Get the main Query module
+	 */
+	public function getQuery() {
+		return $this->mQueryModule;
+	}
+
+	protected function setContinueEnumParameter($paramName, $paramValue) {
+		$msg = array (
+			$this->encodeParamName($paramName
+		) => $paramValue);
+		$this->getResult()->addValue('query-continue', $this->getModuleName(), $msg);
+	}
+
+	/**
+	 * Get the Query database connection (readonly)
+	 */
+	protected function getDB() {
+		return $this->getQuery()->getDB();
+	}
+
+	/**
+	 * Get the PageSet object to work on
+	 * @return ApiPageSet data
+	 */
+	protected function getPageSet() {
+		return $this->mQueryModule->getPageSet();
+	}
+
+	/**
+	 * This is a very simplistic utility function
+	 * to convert a non-namespaced title string to a db key.
+	 * It will replace all ' ' with '_'
+	 */
+	public static function titleToKey($title) {
+		return str_replace(' ', '_', $title);
+	}
+
+	public static function keyToTitle($key) {
+		return str_replace('_', ' ', $key);
+	}
+
+	public static function getBaseVersion() {
+		return __CLASS__ . ': $Id: ApiQueryBase.php 21402 2007-04-20 08:55:14Z nickj $';
+	}
+}
+
+/**
+ * @addtogroup API
+ */
+abstract class ApiQueryGeneratorBase extends ApiQueryBase {
+
+	private $mIsGenerator;
+
+	public function __construct($query, $moduleName, $paramPrefix = '') {
+		parent :: __construct($query, $moduleName, $paramPrefix);
+		$this->mIsGenerator = false;
+	}
+
+	public function setGeneratorMode() {
+		$this->mIsGenerator = true;
+	}
+
+	/**
+	 * Overrides base class to prepend 'g' to every generator parameter
+	 */
+	public function encodeParamName($paramName) {
+		if ($this->mIsGenerator)
+			return 'g' . parent :: encodeParamName($paramName);
+		else
+			return parent :: encodeParamName($paramName);
+	}
+
+	/**
+	 * Execute this module as a generator
+	 * @param $resultPageSet PageSet: All output should be appended to this object
+	 */
+	public abstract function executeGenerator($resultPageSet);
+}
+?>
Index: /MediaWiki/branches/1.11/includes/api/ApiQueryInfo.php
===================================================================
--- /MediaWiki/branches/1.11/includes/api/ApiQueryInfo.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/api/ApiQueryInfo.php	(revision 1280)
@@ -0,0 +1,87 @@
+<?php
+
+/*
+ * Created on Sep 25, 2006
+ *
+ * API for MediaWiki 1.8+
+ *
+ * Copyright (C) 2006 Yuri Astrakhan <FirstnameLastname@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ */
+
+if (!defined('MEDIAWIKI')) {
+	// Eclipse helper - will be ignored in production
+	require_once ('ApiQueryBase.php');
+}
+
+/**
+ * @addtogroup API
+ */
+class ApiQueryInfo extends ApiQueryBase {
+
+	public function __construct($query, $moduleName) {
+		parent :: __construct($query, $moduleName);
+	}
+
+	public function requestExtraData() {
+		$pageSet = $this->getPageSet();
+		$pageSet->requestField('page_is_redirect');
+		$pageSet->requestField('page_touched');
+		$pageSet->requestField('page_latest');
+	}
+
+	public function execute() {
+
+		$pageSet = $this->getPageSet();
+		$titles = $pageSet->getGoodTitles();
+		$result = $this->getResult();
+
+		$pageIsRedir = $pageSet->getCustomField('page_is_redirect');
+		$pageTouched = $pageSet->getCustomField('page_touched');
+		$pageLatest = $pageSet->getCustomField('page_latest');
+
+		foreach ( $titles as $pageid => $unused ) {
+			$pageInfo = array (
+				'touched' => wfTimestamp(TS_ISO_8601, $pageTouched[$pageid]),
+				'lastrevid' => intval($pageLatest[$pageid])
+			);
+
+			if ($pageIsRedir[$pageid])
+				$pageInfo['redirect'] = '';
+
+			$result->addValue(array (
+				'query',
+				'pages'
+			), $pageid, $pageInfo);
+		}
+	}
+
+	protected function getDescription() {
+		return 'Get basic page information such as namespace, title, last touched date, ...';
+	}
+
+	protected function getExamples() {
+		return array (
+			'api.php?action=query&prop=info&titles=Main%20Page'
+		);
+	}
+
+	public function getVersion() {
+		return __CLASS__ . ': $Id: ApiQueryInfo.php 21402 2007-04-20 08:55:14Z nickj $';
+	}
+}
+?>
Index: /MediaWiki/branches/1.11/includes/api/ApiQueryLogEvents.php
===================================================================
--- /MediaWiki/branches/1.11/includes/api/ApiQueryLogEvents.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/api/ApiQueryLogEvents.php	(revision 1280)
@@ -0,0 +1,175 @@
+<?php
+
+/*
+ * Created on Oct 16, 2006
+ *
+ * API for MediaWiki 1.8+
+ *
+ * Copyright (C) 2006 Yuri Astrakhan <FirstnameLastname@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ */
+
+if (!defined('MEDIAWIKI')) {
+	// Eclipse helper - will be ignored in production
+	require_once ('ApiQueryBase.php');
+}
+
+/**
+ * @addtogroup API
+ */
+class ApiQueryLogEvents extends ApiQueryBase {
+
+	public function __construct($query, $moduleName) {
+		parent :: __construct($query, $moduleName, 'le');
+	}
+
+	public function execute() {
+		$limit = $type = $start = $end = $dir = $user = $title = null;
+		extract($this->extractRequestParams());
+
+		$db = $this->getDB();
+
+		list($tbl_logging, $tbl_page, $tbl_user) = $db->tableNamesN('logging', 'page', 'user');
+
+		$this->addOption('STRAIGHT_JOIN');
+		$this->addTables("$tbl_logging LEFT OUTER JOIN $tbl_page ON " .
+		"log_namespace=page_namespace AND log_title=page_title " .
+		"INNER JOIN $tbl_user ON user_id=log_user");
+
+		$this->addFields(array (
+			'log_type',
+			'log_action',
+			'log_timestamp',
+			'log_user',
+			'user_name',
+			'log_namespace',
+			'log_title',
+			'page_id',
+			'log_comment',
+			'log_params'
+		));
+
+		$this->addWhereFld('log_type', $type);
+		$this->addWhereRange('log_timestamp', $dir, $start, $end);
+		$this->addOption('LIMIT', $limit +1);
+
+		if (!is_null($user)) {
+			$userid = $db->selectField('user', 'user_id', array (
+				'user_name' => $user
+			));
+			if (!$userid)
+				$this->dieUsage("User name $user not found", 'param_user');
+			$this->addWhereFld('log_user', $userid);
+		}
+
+		if (!is_null($title)) {
+			$titleObj = Title :: newFromText($title);
+			if (is_null($titleObj))
+				$this->dieUsage("Bad title value '$title'", 'param_title');
+			$this->addWhereFld('log_namespace', $titleObj->getNamespace());
+			$this->addWhereFld('log_title', $titleObj->getDBkey());
+		}
+
+		$data = array ();
+		$count = 0;
+		$res = $this->select(__METHOD__);
+		while ($row = $db->fetchObject($res)) {
+			if (++ $count > $limit) {
+				// We've reached the one extra which shows that there are additional pages to be had. Stop here...
+				$this->setContinueEnumParameter('start', $row->log_timestamp);
+				break;
+			}
+
+			$vals = $this->addRowInfo('log', $row);
+			if($vals)
+				$data[] = $vals;
+		}
+		$db->freeResult($res);
+
+		$this->getResult()->setIndexedTagName($data, 'item');
+		$this->getResult()->addValue('query', $this->getModuleName(), $data);
+	}
+
+	protected function getAllowedParams() {
+		return array (
+			'type' => array (
+				ApiBase :: PARAM_ISMULTI => true,
+				ApiBase :: PARAM_TYPE => array (
+					'block',
+					'protect',
+					'rights',
+					'delete',
+					'upload',
+					'move',
+					'import',
+					'renameuser',
+					'newusers',
+					'makebot'
+				)
+			),
+			'start' => array (
+				ApiBase :: PARAM_TYPE => 'timestamp'
+			),
+			'end' => array (
+				ApiBase :: PARAM_TYPE => 'timestamp'
+			),
+			'dir' => array (
+				ApiBase :: PARAM_DFLT => 'older',
+				ApiBase :: PARAM_TYPE => array (
+					'newer',
+					'older'
+				)
+			),
+			'user' => null,
+			'title' => null,
+			'limit' => array (
+				ApiBase :: PARAM_DFLT => 10,
+				ApiBase :: PARAM_TYPE => 'limit',
+				ApiBase :: PARAM_MIN => 1,
+				ApiBase :: PARAM_MAX1 => ApiBase :: LIMIT_BIG1,
+				ApiBase :: PARAM_MAX2 => ApiBase :: LIMIT_BIG2
+			)
+		);
+	}
+
+	protected function getParamDescription() {
+		return array (
+			'type' => 'Filter log entries to only this type(s)',
+			'start' => 'The timestamp to start enumerating from.',
+			'end' => 'The timestamp to end enumerating.',
+			'dir' => 'In which direction to enumerate.',
+			'user' => 'Filter entries to those made by the given user.',
+			'title' => 'Filter entries to those related to a page.',
+			'limit' => 'How many total event entries to return.'
+		);
+	}
+
+	protected function getDescription() {
+		return 'Get events from logs.';
+	}
+
+	protected function getExamples() {
+		return array (
+			'api.php?action=query&list=logevents'
+		);
+	}
+
+	public function getVersion() {
+		return __CLASS__ . ': $Id: ApiQueryLogEvents.php 21402 2007-04-20 08:55:14Z nickj $';
+	}
+}
+?>
Index: /MediaWiki/branches/1.11/includes/api/ApiQueryRecentChanges.php
===================================================================
--- /MediaWiki/branches/1.11/includes/api/ApiQueryRecentChanges.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/api/ApiQueryRecentChanges.php	(revision 1280)
@@ -0,0 +1,189 @@
+<?php
+
+/*
+ * Created on Oct 19, 2006
+ *
+ * API for MediaWiki 1.8+
+ *
+ * Copyright (C) 2006 Yuri Astrakhan <FirstnameLastname@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ */
+
+if (!defined('MEDIAWIKI')) {
+	// Eclipse helper - will be ignored in production
+	require_once ('ApiQueryBase.php');
+}
+
+/**
+ * @addtogroup API
+ */
+class ApiQueryRecentChanges extends ApiQueryBase {
+
+	public function __construct($query, $moduleName) {
+		parent :: __construct($query, $moduleName, 'rc');
+	}
+
+	public function execute() {
+		$limit = $prop = $namespace = $show = $dir = $start = $end = null;
+		extract($this->extractRequestParams());
+
+		$this->addTables('recentchanges');
+		$this->addWhereRange('rc_timestamp', $dir, $start, $end);
+		$this->addWhereFld('rc_namespace', $namespace);
+
+		if (!is_null($show)) {
+			$show = array_flip($show);
+			if ((isset ($show['minor']) && isset ($show['!minor'])) || (isset ($show['bot']) && isset ($show['!bot'])) || (isset ($show['anon']) && isset ($show['!anon'])))
+				$this->dieUsage("Incorrect parameter - mutually exclusive values may not be supplied", 'show');
+
+			$this->addWhereIf('rc_minor = 0', isset ($show['!minor']));
+			$this->addWhereIf('rc_minor != 0', isset ($show['minor']));
+			$this->addWhereIf('rc_bot = 0', isset ($show['!bot']));
+			$this->addWhereIf('rc_bot != 0', isset ($show['bot']));
+			$this->addWhereIf('rc_user = 0', isset ($show['anon']));
+			$this->addWhereIf('rc_user != 0', isset ($show['!anon']));
+		}
+
+		$this->addFields(array (
+			'rc_timestamp',
+			'rc_namespace',
+			'rc_title',
+			'rc_cur_id',
+			'rc_this_oldid',
+			'rc_last_oldid',
+			'rc_type',
+			'rc_moved_to_ns',
+			'rc_moved_to_title'
+		));
+
+		if (!is_null($prop)) {
+			$prop = array_flip($prop);
+			$this->addFieldsIf('rc_comment', isset ($prop['comment']));
+			if (isset ($prop['user'])) {
+				$this->addFields('rc_user');
+				$this->addFields('rc_user_text');
+			}
+			if (isset ($prop['flags'])) {
+				$this->addFields('rc_minor');
+				$this->addFields('rc_bot');
+				$this->addFields('rc_new');
+			}
+		}
+
+		$this->addOption('LIMIT', $limit +1);
+		$this->addOption('USE INDEX', 'rc_timestamp');
+
+		$data = array ();
+		$count = 0;
+		$db = $this->getDB();
+		$res = $this->select(__METHOD__);
+		while ($row = $db->fetchObject($res)) {
+			if (++ $count > $limit) {
+				// We've reached the one extra which shows that there are additional pages to be had. Stop here...
+				$this->setContinueEnumParameter('start', $row->rc_timestamp);
+				break;
+			}
+
+			$vals = $this->addRowInfo('rc', $row);
+			if ($vals)
+				$data[] = $vals;
+		}
+		$db->freeResult($res);
+
+		$result = $this->getResult();
+		$result->setIndexedTagName($data, 'rc');
+		$result->addValue('query', $this->getModuleName(), $data);
+	}
+
+	protected function getAllowedParams() {
+		return array (
+			'start' => array (
+				ApiBase :: PARAM_TYPE => 'timestamp'
+			),
+			'end' => array (
+				ApiBase :: PARAM_TYPE => 'timestamp'
+			),
+			'dir' => array (
+				ApiBase :: PARAM_DFLT => 'older',
+				ApiBase :: PARAM_TYPE => array (
+					'newer',
+					'older'
+				)
+			),
+			'namespace' => array (
+				ApiBase :: PARAM_ISMULTI => true,
+				ApiBase :: PARAM_TYPE => 'namespace'
+			),
+			'prop' => array (
+				ApiBase :: PARAM_ISMULTI => true,
+				ApiBase :: PARAM_TYPE => array (
+					'user',
+					'comment',
+					'flags'
+				)
+			),
+			'show' => array (
+				ApiBase :: PARAM_ISMULTI => true,
+				ApiBase :: PARAM_TYPE => array (
+					'minor',
+					'!minor',
+					'bot',
+					'!bot',
+					'anon',
+					'!anon'
+				)
+			),
+			'limit' => array (
+				ApiBase :: PARAM_DFLT => 10,
+				ApiBase :: PARAM_TYPE => 'limit',
+				ApiBase :: PARAM_MIN => 1,
+				ApiBase :: PARAM_MAX1 => ApiBase :: LIMIT_BIG1,
+				ApiBase :: PARAM_MAX2 => ApiBase :: LIMIT_BIG2
+			)
+		);
+	}
+
+	protected function getParamDescription() {
+		return array (
+			'start' => 'The timestamp to start enumerating from.',
+			'end' => 'The timestamp to end enumerating.',
+			'dir' => 'In which direction to enumerate.',
+			'namespace' => 'Filter log entries to only this namespace(s)',
+			'prop' => 'Include additional pieces of information',
+			'show' => array (
+				'Show only items that meet this criteria.',
+				'For example, to see only minor edits done by logged-in users, set show=minor|!anon'
+			),
+			'limit' => 'How many total pages to return.'
+		);
+	}
+
+	protected function getDescription() {
+		return 'Enumerate recent changes';
+	}
+
+	protected function getExamples() {
+		return array (
+			'api.php?action=query&list=recentchanges'
+		);
+	}
+
+	public function getVersion() {
+		return __CLASS__ . ': $Id: ApiQueryRecentChanges.php 21402 2007-04-20 08:55:14Z nickj $';
+	}
+}
+?>
Index: /MediaWiki/branches/1.11/includes/api/ApiQueryRevisions.php
===================================================================
--- /MediaWiki/branches/1.11/includes/api/ApiQueryRevisions.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/api/ApiQueryRevisions.php	(revision 1280)
@@ -0,0 +1,270 @@
+<?php
+
+/*
+ * Created on Sep 7, 2006
+ *
+ * API for MediaWiki 1.8+
+ *
+ * Copyright (C) 2006 Yuri Astrakhan <FirstnameLastname@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ */
+
+if (!defined('MEDIAWIKI')) {
+	// Eclipse helper - will be ignored in production
+	require_once ('ApiQueryBase.php');
+}
+
+/**
+ * @addtogroup API
+ */
+class ApiQueryRevisions extends ApiQueryBase {
+
+	public function __construct($query, $moduleName) {
+		parent :: __construct($query, $moduleName, 'rv');
+	}
+
+	public function execute() {
+		$limit = $startid = $endid = $start = $end = $dir = $prop = null;
+		extract($this->extractRequestParams());
+
+		// If any of those parameters are used, work in 'enumeration' mode.
+		// Enum mode can only be used when exactly one page is provided.
+		// Enumerating revisions on multiple pages make it extremelly 
+		// difficult to manage continuations and require additional sql indexes  
+		$enumRevMode = (!is_null($limit) || !is_null($startid) || !is_null($endid) || $dir === 'newer' || !is_null($start) || !is_null($end));
+
+		$pageSet = $this->getPageSet();
+		$pageCount = $pageSet->getGoodTitleCount();
+		$revCount = $pageSet->getRevisionCount();
+
+		// Optimization -- nothing to do
+		if ($revCount === 0 && $pageCount === 0)
+			return;
+
+		if ($revCount > 0 && $enumRevMode)
+			$this->dieUsage('The revids= parameter may not be used with the list options (limit, startid, endid, dirNewer, start, end).', 'revids');
+
+		if ($pageCount > 1 && $enumRevMode)
+			$this->dieUsage('titles, pageids or a generator was used to supply multiple pages, but the limit, startid, endid, dirNewer, start, and end parameters may only be used on a single page.', 'multpages');
+
+		$this->addTables('revision');
+		$this->addFields(array (
+			'rev_id',
+			'rev_page',
+			'rev_text_id',
+			'rev_minor_edit'
+		));
+		$this->addWhere('rev_deleted=0');
+
+		$showContent = false;
+
+		if (!is_null($prop)) {
+			$prop = array_flip($prop);
+			$this->addFieldsIf('rev_timestamp', isset ($prop['timestamp']));
+			$this->addFieldsIf('rev_comment', isset ($prop['comment']));
+			if (isset ($prop['user'])) {
+				$this->addFields('rev_user');
+				$this->addFields('rev_user_text');
+			}
+			if (isset ($prop['content'])) {
+				$this->addTables('text');
+				$this->addWhere('rev_text_id=old_id');
+				$this->addFields('old_id');
+				$this->addFields('old_text');
+				$this->addFields('old_flags');
+				$showContent = true;
+			}
+		}
+
+		$userMax = ($showContent ? 50 : 500);
+		$botMax = ($showContent ? 200 : 10000);
+
+		if ($enumRevMode) {
+
+			// This is mostly to prevent parameter errors (and optimize sql?)
+			if (!is_null($startid) && !is_null($start))
+				$this->dieUsage('start and startid cannot be used together', 'badparams');
+
+			if (!is_null($endid) && !is_null($end))
+				$this->dieUsage('end and endid cannot be used together', 'badparams');
+
+			// This code makes an assumption that sorting by rev_id and rev_timestamp produces
+			// the same result. This way users may request revisions starting at a given time,
+			// but to page through results use the rev_id returned after each page.
+			// Switching to rev_id removes the potential problem of having more than 
+			// one row with the same timestamp for the same page. 
+			// The order needs to be the same as start parameter to avoid SQL filesort.
+
+			if (is_null($startid))
+				$this->addWhereRange('rev_timestamp', $dir, $start, $end);
+			else
+				$this->addWhereRange('rev_id', $dir, $startid, $endid);
+
+			// must manually initialize unset limit
+			if (is_null($limit))
+				$limit = 10;
+			$this->validateLimit($this->encodeParamName('limit'), $limit, 1, $userMax, $botMax);
+
+			// There is only one ID, use it
+			$this->addWhereFld('rev_page', current(array_keys($pageSet->getGoodTitles())));
+		}
+		elseif ($pageCount > 0) {
+			// When working in multi-page non-enumeration mode,
+			// limit to the latest revision only
+			$this->addTables('page');
+			$this->addWhere('page_id=rev_page');
+			$this->addWhere('page_latest=rev_id');
+			$this->validateLimit('page_count', $pageCount, 1, $userMax, $botMax);
+
+			// Get all page IDs
+			$this->addWhereFld('page_id', array_keys($pageSet->getGoodTitles()));
+
+			$limit = $pageCount; // assumption testing -- we should never get more then $pageCount rows.
+		}
+		elseif ($revCount > 0) {
+			$this->validateLimit('rev_count', $revCount, 1, $userMax, $botMax);
+
+			// Get all revision IDs
+			$this->addWhereFld('rev_id', array_keys($pageSet->getRevisionIDs()));
+
+			$limit = $revCount; // assumption testing -- we should never get more then $revCount rows.
+		} else
+			ApiBase :: dieDebug(__METHOD__, 'param validation?');
+
+		$this->addOption('LIMIT', $limit +1);
+
+		$data = array ();
+		$count = 0;
+		$res = $this->select(__METHOD__);
+
+		$db = $this->getDB();
+		while ($row = $db->fetchObject($res)) {
+
+			if (++ $count > $limit) {
+				// We've reached the one extra which shows that there are additional pages to be had. Stop here...
+				if (!$enumRevMode)
+					ApiBase :: dieDebug(__METHOD__, 'Got more rows then expected'); // bug report
+				$this->setContinueEnumParameter('startid', $row->rev_id);
+				break;
+			}
+
+			$vals = $this->addRowInfo('rev', $row);
+			if ($vals) {
+				if ($showContent)
+					ApiResult :: setContent($vals, Revision :: getRevisionText($row));
+
+				$this->getResult()->addValue(array (
+					'query',
+					'pages',
+					intval($row->rev_page
+				), 'revisions'), intval($row->rev_id), $vals);
+			}
+		}
+		$db->freeResult($res);
+
+		// Ensure that all revisions are shown as '<rev>' elements
+		$result = $this->getResult();
+		if ($result->getIsRawMode()) {
+			$data =& $result->getData();
+			foreach ($data['query']['pages'] as & $page) {
+				if (is_array($page) && array_key_exists('revisions', $page)) {
+					$result->setIndexedTagName($page['revisions'], 'rev');
+				}
+			}
+		}
+	}
+
+	protected function getAllowedParams() {
+		return array (
+			'prop' => array (
+				ApiBase :: PARAM_ISMULTI => true,
+				ApiBase :: PARAM_TYPE => array (
+					'timestamp',
+					'user',
+					'comment',
+					'content'
+				)
+			),
+			'limit' => array (
+				ApiBase :: PARAM_TYPE => 'limit',
+				ApiBase :: PARAM_MIN => 1,
+				ApiBase :: PARAM_MAX1 => ApiBase :: LIMIT_SML1,
+				ApiBase :: PARAM_MAX2 => ApiBase :: LIMIT_SML2
+			),
+			'startid' => array (
+				ApiBase :: PARAM_TYPE => 'integer'
+			),
+			'endid' => array (
+				ApiBase :: PARAM_TYPE => 'integer'
+			),
+			'start' => array (
+				ApiBase :: PARAM_TYPE => 'timestamp'
+			),
+			'end' => array (
+				ApiBase :: PARAM_TYPE => 'timestamp'
+			),
+			'dir' => array (
+				ApiBase :: PARAM_DFLT => 'older',
+				ApiBase :: PARAM_TYPE => array (
+					'newer',
+					'older'
+				)
+			)
+		);
+	}
+
+	protected function getParamDescription() {
+		return array (
+			'prop' => 'Which properties to get for each revision.',
+			'limit' => 'limit how many revisions will be returned (enum)',
+			'startid' => 'from which revision id to start enumeration (enum)',
+			'endid' => 'stop revision enumeration on this revid (enum)',
+			'start' => 'from which revision timestamp to start enumeration (enum)',
+			'end' => 'enumerate up to this timestamp (enum)',
+			'dir' => 'direction of enumeration - towards "newer" or "older" revisions (enum)'
+		);
+	}
+
+	protected function getDescription() {
+		return array (
+			'Get revision information.',
+			'This module may be used in several ways:',
+			' 1) Get data about a set of pages (last revision), by setting titles or pageids parameter.',
+			' 2) Get revisions for one given page, by using titles/pageids with start/end/limit params.',
+			' 3) Get data about a set of revisions by setting their IDs with revids parameter.',
+			'All parameters marked as (enum) may only be used with a single page (#2).'
+		);
+	}
+
+	protected function getExamples() {
+		return array (
+			'Get data with content for the last revision of titles "API" and "Main Page":',
+			'  api.php?action=query&prop=revisions&titles=API|Main%20Page&rvprop=timestamp|user|comment|content',
+			'Get last 5 revisions of the "Main Page":',
+			'  api.php?action=query&prop=revisions&titles=Main%20Page&rvlimit=5&rvprop=timestamp|user|comment',
+			'Get first 5 revisions of the "Main Page":',
+			'  api.php?action=query&prop=revisions&titles=Main%20Page&rvlimit=5&rvprop=timestamp|user|comment&rvdir=newer',
+			'Get first 5 revisions of the "Main Page" made after 2006-05-01:',
+			'  api.php?action=query&prop=revisions&titles=Main%20Page&rvlimit=5&rvprop=timestamp|user|comment&rvdir=newer&rvstart=20060501000000'
+		);
+	}
+
+	public function getVersion() {
+		return __CLASS__ . ': $Id: ApiQueryRevisions.php 21402 2007-04-20 08:55:14Z nickj $';
+	}
+}
+?>
Index: /MediaWiki/branches/1.11/includes/api/ApiQuerySiteinfo.php
===================================================================
--- /MediaWiki/branches/1.11/includes/api/ApiQuerySiteinfo.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/api/ApiQuerySiteinfo.php	(revision 1280)
@@ -0,0 +1,118 @@
+<?php
+
+/*
+ * Created on Sep 25, 2006
+ *
+ * API for MediaWiki 1.8+
+ *
+ * Copyright (C) 2006 Yuri Astrakhan <FirstnameLastname@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ */
+
+if (!defined('MEDIAWIKI')) {
+	// Eclipse helper - will be ignored in production
+	require_once ('ApiQueryBase.php');
+}
+
+/**
+ * @addtogroup API
+ */
+class ApiQuerySiteinfo extends ApiQueryBase {
+
+	public function __construct($query, $moduleName) {
+		parent :: __construct($query, $moduleName, 'si');
+	}
+
+	public function execute() {
+		$prop = null;
+		extract($this->extractRequestParams());
+
+		foreach ($prop as $p) {
+			switch ($p) {
+
+				case 'general' :
+
+					global $wgSitename, $wgVersion, $wgCapitalLinks, $wgRightsCode, $wgRightsText;
+					$data = array ();
+					$mainPage = Title :: newFromText(wfMsgForContent('mainpage'));
+					$data['mainpage'] = $mainPage->getText();
+					$data['base'] = $mainPage->getFullUrl();
+					$data['sitename'] = $wgSitename;
+					$data['generator'] = "MediaWiki $wgVersion";
+					$data['case'] = $wgCapitalLinks ? 'first-letter' : 'case-sensitive'; // 'case-insensitive' option is reserved for future
+					if (isset($wgRightsCode))
+						$data['rightscode'] = $wgRightsCode;
+					$data['rights'] = $wgRightsText;
+					$this->getResult()->addValue('query', $p, $data);
+					break;
+
+				case 'namespaces' :
+
+					global $wgContLang;
+					$data = array ();
+					foreach ($wgContLang->getFormattedNamespaces() as $ns => $title) {
+						$data[$ns] = array (
+							'id' => $ns
+						);
+						ApiResult :: setContent($data[$ns], $title);
+					}
+					$this->getResult()->setIndexedTagName($data, 'ns');
+					$this->getResult()->addValue('query', $p, $data);
+					break;
+					
+				default :
+					ApiBase :: dieDebug(__METHOD__, "Unknown prop=$p");
+			}
+		}
+	}
+
+	protected function getAllowedParams() {
+		return array (
+			'prop' => array (
+				ApiBase :: PARAM_DFLT => 'general',
+				ApiBase :: PARAM_ISMULTI => true,
+				ApiBase :: PARAM_TYPE => array (
+					'general',
+					'namespaces'
+				)
+			)
+		);
+	}
+
+	protected function getParamDescription() {
+		return array (
+			'prop' => array (
+				'Which sysinfo properties to get:',
+				' "general"    - Overall system information',
+				' "namespaces" - List of registered namespaces (localized)'
+			)
+		);
+	}
+
+	protected function getDescription() {
+		return 'Return general information about the site.';
+	}
+
+	protected function getExamples() {
+		return 'api.php?action=query&meta=siteinfo&siprop=general|namespaces';
+	}
+
+	public function getVersion() {
+		return __CLASS__ . ': $Id: ApiQuerySiteinfo.php 21402 2007-04-20 08:55:14Z nickj $';
+	}
+}
+?>
Index: /MediaWiki/branches/1.11/includes/api/ApiQueryUserContributions.php
===================================================================
--- /MediaWiki/branches/1.11/includes/api/ApiQueryUserContributions.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/api/ApiQueryUserContributions.php	(revision 1280)
@@ -0,0 +1,177 @@
+<?php
+
+/*
+ * Created on Oct 16, 2006
+ *
+ * API for MediaWiki 1.8+
+ *
+ * Copyright (C) 2006 Yuri Astrakhan <FirstnameLastname@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ */
+
+if (!defined('MEDIAWIKI')) {
+	// Eclipse helper - will be ignored in production
+	require_once ('ApiQueryBase.php');
+}
+
+/**
+ * @addtogroup API
+ */
+class ApiQueryContributions extends ApiQueryBase {
+
+	public function __construct($query, $moduleName) {
+		parent :: __construct($query, $moduleName, 'uc');
+	}
+
+	public function execute() {
+
+		//Blank all our variables
+		$limit = $user = $start = $end = $dir = null;
+
+		//Get our parameters out
+		extract($this->extractRequestParams());
+
+		//Get a database instance
+		$db = $this->getDB();
+
+		if (is_null($user))
+			$this->dieUsage("User parameter may not be empty", 'param_user');
+		$userid = $db->selectField('user', 'user_id', array (
+			'user_name' => $user
+		));
+		if (!$userid)
+			$this->dieUsage("User name $user not found", 'param_user');
+
+		//Get the table names
+		list ($tbl_page, $tbl_revision) = $db->tableNamesN('page', 'revision');
+
+		//We're after the revision table, and the corresponding page row for
+		//anything we retrieve.
+		$this->addTables("$tbl_revision LEFT OUTER JOIN $tbl_page ON " .
+			"page_id=rev_page");
+
+		//We want to know the namespace, title, new-ness, and ID of a page,
+		// and the id, text-id, timestamp, minor-status, summary and page
+		// of a revision.
+		$this->addFields(array('page_namespace', 'page_title', 'page_is_new',
+			'rev_id', 'rev_text_id', 'rev_timestamp', 'rev_minor_edit',
+				'rev_comment', 'rev_page'));
+
+		// We only want pages by the specified user.
+		$this->addWhereFld('rev_user_text', $user);
+		// ... and in the specified timeframe.
+		$this->addWhereRange('rev_timestamp', $dir, $start, $end );
+
+		$this->addOption('LIMIT', $limit + 1);
+
+		//Initialise some variables
+		$data = array ();
+		$count = 0;
+
+		//Do the actual query.
+		$res = $this->select( __METHOD__ );
+
+		//Fetch each row
+		while ( $row = $db->fetchObject( $res ) ) {
+			if (++ $count > $limit) {
+				// We've reached the one extra which shows that there are additional pages to be had. Stop here...
+				$this->setContinueEnumParameter('start', $row->rev_timestamp);
+				break;
+			}
+
+			//There's a fancy function in ApiQueryBase that does
+			// most of the work for us. Use that for the page
+			// and revision.
+			$revvals = $this->addRowInfo('rev', $row);
+			$pagevals = $this->addRowInfo('page', $row);
+
+			//If we got data on the revision only, use only
+			// that data.
+			if($revvals && !$pagevals) {
+				$data[] = $revvals;
+			}
+			//If we got data on the page only, use only
+			// that data.
+			else if($pagevals && !$revvals) {
+				$data[] = $pagevals;
+			}
+			//... and if we got data on both the revision and
+			// the page, merge the data and send it out.
+			else if($pagevals && $revvals) {
+				$data[] = array_merge($revvals, $pagevals);
+			}
+		}
+
+		//Free the database record so the connection can get on with other stuff
+		$db->freeResult($res);
+
+		//And send the whole shebang out as output.
+		$this->getResult()->setIndexedTagName($data, 'item');
+		$this->getResult()->addValue('query', $this->getModuleName(), $data);
+	}
+
+	protected function getAllowedParams() {
+		return array (
+			'limit' => array (
+				ApiBase :: PARAM_DFLT => 10,
+				ApiBase :: PARAM_TYPE => 'limit',
+				ApiBase :: PARAM_MIN => 1,
+				ApiBase :: PARAM_MAX1 => ApiBase :: LIMIT_BIG1,
+				ApiBase :: PARAM_MAX2 => ApiBase :: LIMIT_BIG2
+			),
+			'start' => array (
+				ApiBase :: PARAM_TYPE => 'timestamp'
+			),
+			'end' => array (
+				ApiBase :: PARAM_TYPE => 'timestamp'
+			),
+			'user' => null,
+			'dir' => array (
+				ApiBase :: PARAM_DFLT => 'older',
+				ApiBase :: PARAM_TYPE => array (
+					'newer',
+					'older'
+				)
+			)
+		);
+	}
+
+	protected function getParamDescription() {
+		return array (
+			'limit' => 'The maximum number of contributions to return.',
+			'start' => 'The start timestamp to return from.',
+			'end' => 'The end timestamp to return to.',
+			'user' => 'The user to retrieve contributions for.',
+			'dir' => 'The direction to search (older or newer).'
+		);
+	}
+
+	protected function getDescription() {
+		return 'Get edits by a user..';
+	}
+
+	protected function getExamples() {
+		return array (
+			'api.php?action=query&list=usercontribs&ucuser=YurikBot'
+		);
+	}
+
+	public function getVersion() {
+		return __CLASS__ . ': $Id: ApiQueryUserContributions.php 21402 2007-04-20 08:55:14Z nickj $';
+	}
+}
+?>
Index: /MediaWiki/branches/1.11/includes/api/ApiQueryWatchlist.php
===================================================================
--- /MediaWiki/branches/1.11/includes/api/ApiQueryWatchlist.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/api/ApiQueryWatchlist.php	(revision 1280)
@@ -0,0 +1,236 @@
+<?php
+
+/*
+ * Created on Sep 25, 2006
+ *
+ * API for MediaWiki 1.8+
+ *
+ * Copyright (C) 2006 Yuri Astrakhan <FirstnameLastname@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ */
+
+if (!defined('MEDIAWIKI')) {
+	// Eclipse helper - will be ignored in production
+	require_once ('ApiQueryBase.php');
+}
+
+/**
+ * @addtogroup API
+ */
+class ApiQueryWatchlist extends ApiQueryGeneratorBase {
+
+	public function __construct($query, $moduleName) {
+		parent :: __construct($query, $moduleName, 'wl');
+	}
+
+	public function execute() {
+		$this->run();
+	}
+
+	public function executeGenerator($resultPageSet) {
+		$this->run($resultPageSet);
+	}
+
+	private function run($resultPageSet = null) {
+		global $wgUser;
+
+		if (!$wgUser->isLoggedIn())
+			$this->dieUsage('You must be logged-in to have a watchlist', 'notloggedin');
+
+		$allrev = $start = $end = $namespace = $dir = $limit = $prop = null;
+		extract($this->extractRequestParams());
+
+		$patrol = $timestamp = $user = $comment = false;
+		if (!is_null($prop)) {
+			if (!is_null($resultPageSet))
+				$this->dieUsage('prop parameter may not be used in a generator', 'params');
+
+			$user = (false !== array_search('user', $prop));
+			$comment = (false !== array_search('comment', $prop));
+			$timestamp = (false !== array_search('timestamp', $prop)); // TODO: $timestamp not currently being used.
+			$patrol = (false !== array_search('patrol', $prop));
+
+			if ($patrol) {
+				global $wgUseRCPatrol, $wgUser;
+				if (!$wgUseRCPatrol || !$wgUser->isAllowed('patrol'))
+					$this->dieUsage('patrol property is not available', 'patrol');
+			}
+		}
+
+		if (is_null($resultPageSet)) {
+			$this->addFields(array (
+				'rc_cur_id',
+				'rc_this_oldid',
+				'rc_namespace',
+				'rc_title',
+				'rc_new',
+				'rc_minor',
+				'rc_timestamp'
+			));
+
+			$this->addFieldsIf('rc_user', $user);
+			$this->addFieldsIf('rc_user_text', $user);
+			$this->addFieldsIf('rc_comment', $comment);
+			$this->addFieldsIf('rc_patrolled', $patrol);
+		}
+		elseif ($allrev) {
+			$this->addFields(array (
+				'rc_this_oldid',
+				'rc_namespace',
+				'rc_title',
+				'rc_timestamp'
+			));
+		} else {
+			$this->addFields(array (
+				'rc_cur_id',
+				'rc_namespace',
+				'rc_title',
+				'rc_timestamp'
+			));
+		}
+
+		$this->addTables(array (
+			'watchlist',
+			'page',
+			'recentchanges'
+		));
+
+		$userId = $wgUser->getID();
+		$this->addWhere(array (
+			'wl_namespace = rc_namespace',
+			'wl_title = rc_title',
+			'rc_cur_id = page_id',
+			'wl_user' => $userId
+		));
+		$this->addWhereRange('rc_timestamp', $dir, $start, $end);
+		$this->addWhereFld('wl_namespace', $namespace);
+		$this->addWhereIf('rc_this_oldid=page_latest', !$allrev);
+		$this->addWhereIf("rc_timestamp > ''", !isset ($start) && !isset ($end));
+
+		$this->addOption('LIMIT', $limit +1);
+
+		$data = array ();
+		$count = 0;
+		$res = $this->select(__METHOD__);
+
+		$db = $this->getDB();
+		while ($row = $db->fetchObject($res)) {
+			if (++ $count > $limit) {
+				// We've reached the one extra which shows that there are additional pages to be had. Stop here...
+				$this->setContinueEnumParameter('start', $row->rc_timestamp);
+				break;
+			}
+
+			if (is_null($resultPageSet)) {
+				$vals = $this->addRowInfo('rc', $row);
+				if($vals)
+					$data[] = $vals;
+			} else {
+				$title = Title :: makeTitle($row->rc_namespace, $row->rc_title);
+				// skip any pages that user has no rights to read
+				if ($title->userCanRead()) {
+					if ($allrev) {
+						$data[] = intval($row->rc_this_oldid);
+					} else {
+						$data[] = intval($row->rc_cur_id);
+					}
+				}
+			}
+		}
+
+		$db->freeResult($res);
+
+		if (is_null($resultPageSet)) {
+			$this->getResult()->setIndexedTagName($data, 'item');
+			$this->getResult()->addValue('query', $this->getModuleName(), $data);
+		}
+		elseif ($allrev) {
+			$resultPageSet->populateFromRevisionIDs($data);
+		} else {
+			$resultPageSet->populateFromPageIDs($data);
+		}
+	}
+
+	protected function getAllowedParams() {
+		return array (
+			'allrev' => false,
+			'start' => array (
+				ApiBase :: PARAM_TYPE => 'timestamp'
+			),
+			'end' => array (
+				ApiBase :: PARAM_TYPE => 'timestamp'
+			),
+			'namespace' => array (
+				ApiBase :: PARAM_ISMULTI => true,
+				ApiBase :: PARAM_TYPE => 'namespace'
+			),
+			'dir' => array (
+				ApiBase :: PARAM_DFLT => 'older',
+				ApiBase :: PARAM_TYPE => array (
+					'newer',
+					'older'
+				)
+			),
+			'limit' => array (
+				ApiBase :: PARAM_DFLT => 10,
+				ApiBase :: PARAM_TYPE => 'limit',
+				ApiBase :: PARAM_MIN => 1,
+				ApiBase :: PARAM_MAX1 => ApiBase :: LIMIT_BIG1,
+				ApiBase :: PARAM_MAX2 => ApiBase :: LIMIT_BIG2
+			),
+			'prop' => array (
+				APIBase :: PARAM_ISMULTI => true,
+				APIBase :: PARAM_TYPE => array (
+					'user',
+					'comment',
+					'timestamp',
+					'patrol'
+				)
+			)
+		);
+	}
+
+	protected function getParamDescription() {
+		return array (
+			'allrev' => 'Include multiple revisions of the same page within given timeframe.',
+			'start' => 'The timestamp to start enumerating from.',
+			'end' => 'The timestamp to end enumerating.',
+			'namespace' => 'Filter changes to only the given namespace(s).',
+			'dir' => 'In which direction to enumerate pages.',
+			'limit' => 'How many total pages to return per request.',
+			'prop' => 'Which additional items to get (non-generator mode only).'
+		);
+	}
+
+	protected function getDescription() {
+		return '';
+	}
+
+	protected function getExamples() {
+		return array (
+			'api.php?action=query&list=watchlist',
+			'api.php?action=query&list=watchlist&wlallrev',
+			'api.php?action=query&generator=watchlist&prop=info',
+			'api.php?action=query&generator=watchlist&gwlallrev&prop=revisions&rvprop=timestamp|user'
+		);
+	}
+
+	public function getVersion() {
+		return __CLASS__ . ': $Id: ApiQueryWatchlist.php 21402 2007-04-20 08:55:14Z nickj $';
+	}
+}
+?>
Index: /MediaWiki/branches/1.11/includes/api/ApiResult.php
===================================================================
--- /MediaWiki/branches/1.11/includes/api/ApiResult.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/api/ApiResult.php	(revision 1280)
@@ -0,0 +1,159 @@
+<?php
+
+/*
+ * Created on Sep 4, 2006
+ *
+ * API for MediaWiki 1.8+
+ *
+ * Copyright (C) 2006 Yuri Astrakhan <FirstnameLastname@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ */
+
+if (!defined('MEDIAWIKI')) {
+	// Eclipse helper - will be ignored in production
+	require_once ('ApiBase.php');
+}
+
+/**
+ * @addtogroup API
+ */
+class ApiResult extends ApiBase {
+
+	private $mData, $mIsRawMode;
+
+	/**
+	* Constructor
+	*/
+	public function __construct($main) {
+		parent :: __construct($main, 'result');
+		$this->mIsRawMode = false;
+		$this->reset();
+	}
+
+	public function reset() {
+		$this->mData = array ();
+	}
+	
+	/**
+	 * Call this function when special elements such as '_element' 
+	 * are needed by the formatter, for example in XML printing. 
+	 */
+	public function setRawMode() {
+		$this->mIsRawMode = true;
+	}
+	
+	public function getIsRawMode() {
+		return $this->mIsRawMode;
+	}
+
+	public function & getData() {
+		return $this->mData;
+	}
+
+	/**
+	 * Add an output value to the array by name.
+	 * Verifies that value with the same name has not been added before.
+	 */
+	public static function setElement(& $arr, $name, $value) {
+		if ($arr === null || $name === null || $value === null || !is_array($arr) || is_array($name))
+			ApiBase :: dieDebug(__METHOD__, 'Bad parameter');
+
+		if (!isset ($arr[$name])) {
+			$arr[$name] = $value;
+		}
+		elseif (is_array($arr[$name]) && is_array($value)) {
+			$merged = array_intersect_key($arr[$name], $value);
+			if (empty ($merged))
+				$arr[$name] += $value;
+			else
+				ApiBase :: dieDebug(__METHOD__, "Attempting to merge element $name");
+		} else
+			ApiBase :: dieDebug(__METHOD__, "Attempting to add element $name=$value, existing value is {$arr[$name]}");
+	}
+
+	/**
+	 * Adds the content element to the array.
+	 * Use this function instead of hardcoding the '*' element.
+	 * @param string $subElemName when present, content element is created as a sub item of the arr.
+	 *  Use this parameter to create elements in format <elem>text</elem> without attributes
+	 */
+	public static function setContent(& $arr, $value, $subElemName = null) {
+		if (is_array($value))
+			ApiBase :: dieDebug(__METHOD__, 'Bad parameter');
+		if (is_null($subElemName)) {
+			ApiResult :: setElement($arr, '*', $value);
+		} else {
+			if (!isset ($arr[$subElemName]))
+				$arr[$subElemName] = array ();
+			ApiResult :: setElement($arr[$subElemName], '*', $value);
+		}
+	}
+
+	//	public static function makeContentElement($tag, $value) {
+	//		$result = array();
+	//		ApiResult::setContent($result, )
+	//	}
+	//
+	/**
+	 * In case the array contains indexed values (in addition to named),
+	 * all indexed values will have the given tag name.
+	 */
+	public function setIndexedTagName(& $arr, $tag) {
+		// In raw mode, add the '_element', otherwise just ignore
+		if (!$this->getIsRawMode())
+			return;
+		if ($arr === null || $tag === null || !is_array($arr) || is_array($tag))
+			ApiBase :: dieDebug(__METHOD__, 'Bad parameter');
+		// Do not use setElement() as it is ok to call this more than once
+		$arr['_element'] = $tag;
+	}
+
+	/**
+	 * Add value to the output data at the given path.
+	 * Path is an indexed array, each element specifing the branch at which to add the new value
+	 * Setting $path to array('a','b','c') is equivalent to data['a']['b']['c'] = $value  
+	 */
+	public function addValue($path, $name, $value) {
+
+		$data = & $this->getData();
+
+		if (!is_null($path)) {
+			if (is_array($path)) {
+				foreach ($path as $p) {
+					if (!isset ($data[$p]))
+						$data[$p] = array ();
+					$data = & $data[$p];
+				}
+			} else {
+				if (!isset ($data[$path]))
+					$data[$path] = array ();
+				$data = & $data[$path];
+			}
+		}
+
+		ApiResult :: setElement($data, $name, $value);
+	}
+
+	public function execute() {
+		ApiBase :: dieDebug(__METHOD__, 'execute() is not supported on Result object');
+	}
+
+	public function getVersion() {
+		return __CLASS__ . ': $Id: ApiResult.php 21402 2007-04-20 08:55:14Z nickj $';
+	}
+}
+?>
Index: /MediaWiki/branches/1.11/includes/cbt/CBTCompiler.php
===================================================================
--- /MediaWiki/branches/1.11/includes/cbt/CBTCompiler.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/cbt/CBTCompiler.php	(revision 1280)
@@ -0,0 +1,367 @@
+<?php
+
+/**
+ * This file contains functions to convert callback templates to other languages.
+ * The template should first be pre-processed with CBTProcessor to remove static
+ * sections.
+ */
+
+
+require_once( dirname( __FILE__ ) . '/CBTProcessor.php' );
+
+/** 
+ * Push a value onto the stack 
+ * Argument 1: value
+ */
+define( 'CBT_PUSH', 1 );
+
+/**
+ * Pop, concatenate argument, push
+ * Argument 1: value
+ */
+define( 'CBT_CAT', 2 );
+
+/**
+ * Concatenate where the argument is on the stack, instead of immediate
+ */
+define( 'CBT_CATS', 3 );
+
+/**
+ * Call a function, push the return value onto the stack and put it in the cache
+ * Argument 1: argument count
+ *
+ * The arguments to the function are on the stack
+ */
+define( 'CBT_CALL', 4 );
+
+/**
+ * Pop, htmlspecialchars, push
+ */
+define( 'CBT_HX', 5 );
+
+class CBTOp {
+	var $opcode;
+	var $arg1;
+	var $arg2;
+
+	function CBTOp( $opcode, $arg1, $arg2 ) {
+		$this->opcode = $opcode;
+		$this->arg1 = $arg1;
+		$this->arg2 = $arg2;
+	}
+
+	function name() {
+		$opcodeNames = array( 
+			CBT_PUSH => 'PUSH',
+			CBT_CAT => 'CAT',
+			CBT_CATS => 'CATS',
+			CBT_CALL => 'CALL',
+			CBT_HX => 'HX',
+		);
+		return $opcodeNames[$this->opcode];
+	}
+};
+
+class CBTCompiler {
+	var $mOps = array();
+	var $mCode;
+
+	function CBTCompiler( $text ) {
+		$this->mText = $text;
+	}
+
+	/**
+	 * Compile the text.
+	 * Returns true on success, error message on failure
+	 */
+	function compile() {
+		$this->mLastError = false;
+		$this->mOps = array();
+
+		$this->doText( 0, strlen( $this->mText ) );
+
+		if ( $this->mLastError !== false ) {
+			$pos = $this->mErrorPos;
+
+			// Find the line number at which the error occurred
+			$startLine = 0;
+			$endLine = 0;
+			$line = 0;
+			do {
+				if ( $endLine ) {
+					$startLine = $endLine + 1;
+				}
+				$endLine = strpos( $this->mText, "\n", $startLine );
+				++$line;
+			} while ( $endLine !== false && $endLine < $pos );
+
+			$text = "Template error at line $line: $this->mLastError\n<pre>\n";
+
+			$context = rtrim( str_replace( "\t", " ", substr( $this->mText, $startLine, $endLine - $startLine ) ) );
+			$text .= htmlspecialchars( $context ) . "\n" . str_repeat( ' ', $pos - $startLine ) . "^\n</pre>\n";
+		} else {
+			$text = true;
+		}
+		
+		return $text;
+	}
+
+	/** Shortcut for doOpenText( $start, $end, false */
+	function doText( $start, $end ) {
+		return $this->doOpenText( $start, $end, false );
+	}
+
+	function phpQuote( $text ) {
+		return "'" . strtr( $text, array( "\\" => "\\\\", "'" => "\\'" ) ) . "'";
+	}
+
+	function op( $opcode, $arg1 = null, $arg2 = null) {
+		return new CBTOp( $opcode, $arg1, $arg2 );
+	}
+
+	/**
+	 * Recursive workhorse for text mode.
+	 * 
+	 * Processes text mode starting from offset $p, until either $end is 
+	 * reached or a closing brace is found. If $needClosing is false, a 
+	 * closing brace will flag an error, if $needClosing is true, the lack
+	 * of a closing brace will flag an error. 
+	 *
+	 * The parameter $p is advanced to the position after the closing brace, 
+	 * or after the end. A CBTValue is returned.
+	 *
+	 * @private
+	 */
+	function doOpenText( &$p, $end, $needClosing = true ) {
+		$in =& $this->mText;
+		$start = $p;
+		$atStart = true;
+		
+		$foundClosing = false;
+		while ( $p < $end ) {
+			$matchLength = strcspn( $in, CBT_BRACE, $p, $end - $p );
+			$pToken = $p + $matchLength;
+
+			if ( $pToken >= $end ) {
+				// No more braces, output remainder
+				if ( $atStart ) {
+					$this->mOps[] = $this->op( CBT_PUSH, substr( $in, $p ) );
+					$atStart = false;
+				} else {
+					$this->mOps[] = $this->op( CBT_CAT, substr( $in, $p ) );
+				}
+				$p = $end;
+				break;
+			}
+
+			// Output the text before the brace
+			if ( $atStart ) {
+				$this->mOps[] = $this->op( CBT_PUSH, substr( $in, $p, $matchLength ) );
+				$atStart = false;
+			} else {
+				$this->mOps[] = $this->op( CBT_CAT, substr( $in, $p, $matchLength ) );
+			}
+
+			// Advance the pointer 
+			$p = $pToken + 1;
+			
+			// Check for closing brace
+			if ( $in[$pToken] == '}' ) {
+				$foundClosing = true;
+				break;
+			}
+
+			// Handle the "{fn}" special case
+			if ( $pToken > 0 && $in[$pToken-1] == '"' ) {
+				$this->doOpenFunction( $p, $end );
+				if ( $p < $end && $in[$p] == '"' ) {
+					$this->mOps[] = $this->op( CBT_HX );
+				}
+			} else {
+				$this->doOpenFunction( $p, $end );
+			}
+			if ( $atStart ) {
+				$atStart = false;
+			} else {
+				$this->mOps[] = $this->op( CBT_CATS );
+			} 
+		}
+		if ( $foundClosing && !$needClosing ) {
+			$this->error( 'Errant closing brace', $p );
+		} elseif ( !$foundClosing && $needClosing ) {
+			$this->error( 'Unclosed text section', $start );
+		} else {
+			if ( $atStart ) {
+				$this->mOps[] = $this->op( CBT_PUSH, '' );
+			}
+		}
+	}
+
+	/**
+	 * Recursive workhorse for function mode.
+	 *
+	 * Processes function mode starting from offset $p, until either $end is 
+	 * reached or a closing brace is found. If $needClosing is false, a 
+	 * closing brace will flag an error, if $needClosing is true, the lack
+	 * of a closing brace will flag an error. 
+	 *
+	 * The parameter $p is advanced to the position after the closing brace, 
+	 * or after the end. A CBTValue is returned.
+	 *
+	 * @private
+	 */
+	function doOpenFunction( &$p, $end, $needClosing = true ) {
+		$in =& $this->mText;
+		$start = $p;
+		$argCount = 0;
+
+		$foundClosing = false;
+		while ( $p < $end ) {
+			$char = $in[$p];
+			if ( $char == '{' ) {
+				// Switch to text mode
+				++$p;
+				$this->doOpenText( $p, $end );
+				++$argCount;
+			} elseif ( $char == '}' ) {
+				// Block end
+				++$p;
+				$foundClosing = true;
+				break;
+			} elseif ( false !== strpos( CBT_WHITE, $char ) ) {
+				// Whitespace
+				// Consume the rest of the whitespace
+				$p += strspn( $in, CBT_WHITE, $p, $end - $p );
+			} else {
+				// Token, find the end of it
+				$tokenLength = strcspn( $in, CBT_DELIM, $p, $end - $p );
+				$this->mOps[] = $this->op( CBT_PUSH, substr( $in, $p, $tokenLength ) );
+
+				// Execute the token as a function if it's not the function name
+				if ( $argCount ) {
+					$this->mOps[] = $this->op( CBT_CALL, 1 );
+				}
+
+				$p += $tokenLength;
+				++$argCount;
+			}
+		}
+		if ( !$foundClosing && $needClosing ) {
+			$this->error( 'Unclosed function', $start );
+			return '';
+		}
+
+		$this->mOps[] = $this->op( CBT_CALL, $argCount );
+	}
+
+	/**
+	 * Set a flag indicating that an error has been found.
+	 */
+	function error( $text, $pos = false ) {
+		$this->mLastError = $text;
+		if ( $pos === false ) {
+			$this->mErrorPos = $this->mCurrentPos;
+		} else {
+			$this->mErrorPos = $pos;
+		}
+	}
+
+	function getLastError() {
+		return $this->mLastError;
+	}
+
+	function opsToString() {
+		$s = '';
+		foreach( $this->mOps as $op ) {
+			$s .= $op->name();
+			if ( !is_null( $op->arg1 ) ) {
+				$s .= ' ' . var_export( $op->arg1, true );
+			}
+			if ( !is_null( $op->arg2 ) ) {
+				$s .= ' ' . var_export( $op->arg2, true );
+			}
+			$s .= "\n";
+		}
+		return $s;
+	}
+
+	function generatePHP( $functionObj ) {
+		$fname = 'CBTCompiler::generatePHP';
+		wfProfileIn( $fname );
+		$stack = array();
+
+		foreach( $this->mOps as $op ) {
+			switch( $op->opcode ) {
+				case CBT_PUSH:
+					$stack[] = $this->phpQuote( $op->arg1 );
+					break;
+				case CBT_CAT:
+					$val = array_pop( $stack );
+					array_push( $stack, "$val . " . $this->phpQuote( $op->arg1 ) );
+					break;
+				case CBT_CATS:
+					$right = array_pop( $stack );
+					$left = array_pop( $stack );
+					array_push( $stack, "$left . $right" );
+					break;
+				case CBT_CALL:
+					$args = array_slice( $stack, count( $stack ) - $op->arg1, $op->arg1 );
+					$stack = array_slice( $stack, 0, count( $stack ) - $op->arg1 );
+
+					// Some special optimised expansions
+					if ( $op->arg1 == 0 ) {
+						$result = '';
+					} else {
+						$func = array_shift( $args );
+						if ( substr( $func, 0, 1 ) == "'" &&  substr( $func, -1 ) == "'" ) {
+							$func = substr( $func, 1, strlen( $func ) - 2 );
+							if ( $func == "if" ) {
+								if ( $op->arg1 < 3 ) {
+									// This should have been caught during processing
+									return "Not enough arguments to if";
+								} elseif ( $op->arg1 == 3 ) {
+									$result = "(({$args[0]} != '') ? ({$args[1]}) : '')";
+								} else {
+									$result = "(({$args[0]} != '') ? ({$args[1]}) : ({$args[2]}))";
+								}
+							} elseif ( $func == "true" ) {
+								$result = "true";
+							} elseif( $func == "lbrace" || $func == "{" ) {
+								$result = "{";
+							} elseif( $func == "rbrace" || $func == "}" ) {
+								$result = "}";
+							} elseif ( $func == "escape" || $func == "~" ) {
+								$result = "htmlspecialchars({$args[0]})";
+							} else {
+								// Known function name
+								$result = "{$functionObj}->{$func}(" . implode( ', ', $args ) . ')';
+							}
+						} else {
+							// Unknown function name
+							$result = "call_user_func(array($functionObj, $func), " . implode( ', ', $args ) . ' )';
+						}
+					}
+					array_push( $stack, $result );
+					break;
+				case CBT_HX:
+					$val = array_pop( $stack );
+					array_push( $stack, "htmlspecialchars( $val )" );
+					break;
+				default:
+					return "Unknown opcode {$op->opcode}\n";
+			}
+		}
+		wfProfileOut( $fname );
+		if ( count( $stack ) !== 1 ) {
+			return "Error, stack count incorrect\n";
+		}
+		return '
+			global $cbtExecutingGenerated;
+			++$cbtExecutingGenerated;
+			$output = ' . $stack[0] . ';
+			--$cbtExecutingGenerated;
+			return $output;
+			';
+	}
+}
+?>
Index: /MediaWiki/branches/1.11/includes/cbt/CBTProcessor.php
===================================================================
--- /MediaWiki/branches/1.11/includes/cbt/CBTProcessor.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/cbt/CBTProcessor.php	(revision 1280)
@@ -0,0 +1,540 @@
+<?php
+
+/**
+ * PHP version of the callback template processor
+ * This is currently used as a test rig and is likely to be used for 
+ * compatibility purposes later, where the C++ extension is not available.
+ */
+
+define( 'CBT_WHITE', " \t\r\n" );
+define( 'CBT_BRACE', '{}' );
+define( 'CBT_DELIM', CBT_WHITE . CBT_BRACE );
+define( 'CBT_DEBUG', 0 );
+
+$GLOBALS['cbtExecutingGenerated'] = 0;
+
+/**
+ * Attempting to be a MediaWiki-independent module
+ */
+if ( !function_exists( 'wfProfileIn' ) ) {
+	function wfProfileIn() {}
+}
+if ( !function_exists( 'wfProfileOut' ) ) {
+	function wfProfileOut() {}
+}
+
+/**
+ * Escape text for inclusion in template
+ */
+function cbt_escape( $text ) {
+	return strtr( $text, array( '{' => '{[}', '}' => '{]}' ) );
+}
+
+/**
+ * Create a CBTValue
+ */
+function cbt_value( $text = '', $deps = array(), $isTemplate = false ) {
+	global $cbtExecutingGenerated;
+	if ( $cbtExecutingGenerated ) {
+		return $text;
+	} else {
+		return new CBTValue( $text, $deps, $isTemplate );
+	}
+}
+
+/**
+ * A dependency-tracking value class
+ * Callback functions should return one of these, unless they have 
+ * no dependencies in which case they can return a string.
+ */ 
+class CBTValue {
+	var $mText, $mDeps, $mIsTemplate;
+
+	/**
+	 * Create a new value
+	 * @param $text String: , default ''.
+	 * @param $deps Array: what this value depends on
+	 * @param $isTemplate Bool: whether the result needs compilation/execution, default 'false'.
+	 */
+	function CBTValue( $text = '', $deps = array(), $isTemplate = false ) {
+		$this->mText = $text;
+		if ( !is_array( $deps ) ) {
+			$this->mDeps = array( $deps ) ;
+		} else {
+			$this->mDeps = $deps;
+		}
+		$this->mIsTemplate = $isTemplate;
+	}
+
+	/** Concatenate two values, merging their dependencies */
+	function cat( $val ) {
+		if ( is_object( $val ) ) {
+			$this->addDeps( $val );
+			$this->mText .= $val->mText;
+		} else {
+			$this->mText .= $val;
+		}
+	}
+
+	/** Add the dependencies of another value to this one */
+	function addDeps( $values ) {
+		if ( !is_array( $values ) ) {
+			$this->mDeps = array_merge( $this->mDeps, $values->mDeps );
+		} else {
+			foreach ( $values as $val ) {
+				if ( !is_object( $val ) ) {
+					var_dump( debug_backtrace() );
+					exit;
+				}
+				$this->mDeps = array_merge( $this->mDeps, $val->mDeps );
+			}
+		}
+	}
+
+	/** Remove a list of dependencies */
+	function removeDeps( $deps ) {
+		$this->mDeps = array_diff( $this->mDeps, $deps );
+	}
+
+	function setText( $text ) {
+		$this->mText = $text;
+	}
+
+	function getText() {
+		return $this->mText;
+	}
+
+	function getDeps() {
+		return $this->mDeps;
+	}
+
+	/** If the value is a template, execute it */
+	function execute( &$processor ) {
+		if ( $this->mIsTemplate ) {
+			$myProcessor = new CBTProcessor( $this->mText,  $processor->mFunctionObj, $processor->mIgnorableDeps );
+			$myProcessor->mCompiling = $processor->mCompiling;
+			$val = $myProcessor->doText( 0, strlen( $this->mText ) );
+			if ( $myProcessor->getLastError() ) {
+				$processor->error( $myProcessor->getLastError() );
+				$this->mText = '';
+			} else {
+				$this->mText = $val->mText;
+				$this->addDeps( $val );
+			}
+			if ( !$processor->mCompiling ) {
+				$this->mIsTemplate = false;
+			}
+		}
+	}
+
+	/** If the value is plain text, escape it for inclusion in a template */
+	function templateEscape() {
+		if ( !$this->mIsTemplate ) {
+			$this->mText = cbt_escape( $this->mText );
+		}
+	}
+
+	/** Return true if the value has no dependencies */
+	function isStatic() {
+		return count( $this->mDeps ) == 0;
+	}
+}
+
+/**
+ * Template processor, for compilation and execution
+ */
+class CBTProcessor {
+	var $mText,                     # The text being processed
+		$mFunctionObj,              # The object containing callback functions
+		$mCompiling = false,        # True if compiling to a template, false if executing to text
+		$mIgnorableDeps = array(),  # Dependency names which should be treated as static
+		$mFunctionCache = array(),  # A cache of function results keyed by argument hash
+		$mLastError = false,        # Last error message or false for no error
+		$mErrorPos = 0,             # Last error position
+
+		/** Built-in functions */
+		$mBuiltins = array(
+		'if'       => 'bi_if',
+		'true'     => 'bi_true',
+		'['        => 'bi_lbrace',
+		'lbrace'   => 'bi_lbrace',
+		']'        => 'bi_rbrace',
+		'rbrace'   => 'bi_rbrace',
+		'escape'   => 'bi_escape',
+		'~'        => 'bi_escape',
+	);
+
+	/**
+	 * Create a template processor for a given text, callback object and static dependency list
+	 */
+	function CBTProcessor( $text, $functionObj, $ignorableDeps = array() ) {
+		$this->mText = $text;
+		$this->mFunctionObj = $functionObj;
+		$this->mIgnorableDeps = $ignorableDeps;
+	}
+
+	/**
+	 * Execute the template.
+	 * If $compile is true, produces an optimised template where functions with static 
+	 * dependencies have been replaced by their return values.
+	 */
+	function execute( $compile = false ) {
+		$fname = 'CBTProcessor::execute';
+		wfProfileIn( $fname );
+		$this->mCompiling = $compile;
+		$this->mLastError = false;
+		$val = $this->doText( 0, strlen( $this->mText ) );
+		$text = $val->getText();
+		if ( $this->mLastError !== false ) {
+			$pos = $this->mErrorPos;
+
+			// Find the line number at which the error occurred
+			$startLine = 0;
+			$endLine = 0;
+			$line = 0;
+			do {
+				if ( $endLine ) {
+					$startLine = $endLine + 1;
+				}
+				$endLine = strpos( $this->mText, "\n", $startLine );
+				++$line;
+			} while ( $endLine !== false && $endLine < $pos );
+
+			$text = "Template error at line $line: $this->mLastError\n<pre>\n";
+
+			$context = rtrim( str_replace( "\t", " ", substr( $this->mText, $startLine, $endLine - $startLine ) ) );
+			$text .= htmlspecialchars( $context ) . "\n" . str_repeat( ' ', $pos - $startLine ) . "^\n</pre>\n";
+		} 
+		wfProfileOut( $fname );
+		return $text;
+	}
+
+	/** Shortcut for execute(true) */
+	function compile() {
+		$fname = 'CBTProcessor::compile';
+		wfProfileIn( $fname );
+		$s = $this->execute( true );
+		wfProfileOut( $fname );
+		return $s;
+	}
+
+	/** Shortcut for doOpenText( $start, $end, false */
+	function doText( $start, $end ) {
+		return $this->doOpenText( $start, $end, false );
+	}
+
+	/** 
+	 * Escape text for a template if we are producing a template. Do nothing
+	 * if we are producing plain text.
+	 */
+	 function templateEscape( $text ) {
+		if ( $this->mCompiling ) {
+			return cbt_escape( $text );
+		} else {
+			return $text;
+		}
+	}
+
+	/**
+	 * Recursive workhorse for text mode.
+	 * 
+	 * Processes text mode starting from offset $p, until either $end is 
+	 * reached or a closing brace is found. If $needClosing is false, a 
+	 * closing brace will flag an error, if $needClosing is true, the lack
+	 * of a closing brace will flag an error. 
+	 *
+	 * The parameter $p is advanced to the position after the closing brace, 
+	 * or after the end. A CBTValue is returned.
+	 *
+	 * @private
+	 */
+	function doOpenText( &$p, $end, $needClosing = true ) {
+		$fname = 'CBTProcessor::doOpenText';
+		wfProfileIn( $fname );
+		$in =& $this->mText;
+		$start = $p;
+		$ret = new CBTValue( '', array(), $this->mCompiling );
+		
+		$foundClosing = false;
+		while ( $p < $end ) {
+			$matchLength = strcspn( $in, CBT_BRACE, $p, $end - $p );
+			$pToken = $p + $matchLength;
+
+			if ( $pToken >= $end ) {
+				// No more braces, output remainder
+				$ret->cat( substr( $in, $p ) );
+				$p = $end;
+				break;
+			}
+
+			// Output the text before the brace
+			$ret->cat( substr( $in, $p, $matchLength ) );
+
+			// Advance the pointer 
+			$p = $pToken + 1;
+			
+			// Check for closing brace
+			if ( $in[$pToken] == '}' ) {
+				$foundClosing = true;
+				break;
+			}
+			
+			// Handle the "{fn}" special case
+			if ( $pToken > 0 && $in[$pToken-1] == '"' ) {
+				wfProfileOut( $fname );
+				$val = $this->doOpenFunction( $p, $end );
+				wfProfileIn( $fname );
+				if ( $p < $end && $in[$p] == '"' ) {
+					$val->setText( htmlspecialchars( $val->getText() ) );
+				}
+				$ret->cat( $val );
+			} else {
+				// Process the function mode component
+				wfProfileOut( $fname );				
+				$ret->cat( $this->doOpenFunction( $p, $end ) );
+				wfProfileIn( $fname );
+			}
+		}
+		if ( $foundClosing && !$needClosing ) {
+			$this->error( 'Errant closing brace', $p );
+		} elseif ( !$foundClosing && $needClosing ) {
+			$this->error( 'Unclosed text section', $start );
+		}
+		wfProfileOut( $fname );				
+		return $ret;
+	}
+
+	/**
+	 * Recursive workhorse for function mode.
+	 *
+	 * Processes function mode starting from offset $p, until either $end is 
+	 * reached or a closing brace is found. If $needClosing is false, a 
+	 * closing brace will flag an error, if $needClosing is true, the lack
+	 * of a closing brace will flag an error. 
+	 *
+	 * The parameter $p is advanced to the position after the closing brace, 
+	 * or after the end. A CBTValue is returned.
+	 *
+	 * @private
+	 */
+	function doOpenFunction( &$p, $end, $needClosing = true ) {
+		$in =& $this->mText;
+		$start = $p;
+		$tokens = array();
+		$unexecutedTokens = array();
+
+		$foundClosing = false;
+		while ( $p < $end ) {
+			$char = $in[$p];
+			if ( $char == '{' ) {
+				// Switch to text mode
+				++$p;
+				$tokenStart = $p;
+				$token = $this->doOpenText( $p, $end );
+				$tokens[] = $token;
+				$unexecutedTokens[] = '{' . substr( $in, $tokenStart, $p - $tokenStart - 1 ) . '}';
+			} elseif ( $char == '}' ) {
+				// Block end
+				++$p;
+				$foundClosing = true;
+				break;
+			} elseif ( false !== strpos( CBT_WHITE, $char ) ) {
+				// Whitespace
+				// Consume the rest of the whitespace
+				$p += strspn( $in, CBT_WHITE, $p, $end - $p );
+			} else {
+				// Token, find the end of it
+				$tokenLength = strcspn( $in, CBT_DELIM, $p, $end - $p );
+				$token = new CBTValue( substr( $in, $p, $tokenLength ) );
+				// Execute the token as a function if it's not the function name
+				if ( count( $tokens ) ) {
+					$tokens[] = $this->doFunction( array( $token ), $p );
+				} else {
+					$tokens[] = $token;
+				}
+				$unexecutedTokens[] = $token->getText();
+
+				$p += $tokenLength;
+			}
+		}
+		if ( !$foundClosing && $needClosing ) {
+			$this->error( 'Unclosed function', $start );
+			return '';
+		}
+
+		$val = $this->doFunction( $tokens, $start );
+		if ( $this->mCompiling && !$val->isStatic() ) {
+			$compiled = '';
+			$first = true;
+			foreach( $tokens as $i => $token ) {
+				if ( $first ) {
+					$first = false;
+				} else {
+					$compiled .= ' ';
+				}
+				if ( $token->isStatic() ) {
+					if ( $i !== 0 ) {
+						$compiled .= '{' . $token->getText() . '}';
+					} else {
+						$compiled .= $token->getText();
+					}
+				} else {
+					$compiled .= $unexecutedTokens[$i];
+				}
+			}
+
+			// The dynamic parts of the string are still represented as functions, and 
+			// function invocations have no dependencies. Thus the compiled result has 
+			// no dependencies.
+			$val = new CBTValue( "{{$compiled}}", array(), true );
+		}
+		return $val;
+	}
+
+	/**
+	 * Execute a function, caching and returning the result value.
+	 * $tokens is an array of CBTValue objects. $tokens[0] is the function 
+	 * name, the others are arguments. $p is the string position, and is used
+	 * for error messages only.
+	 */
+	function doFunction( $tokens, $p ) {
+		if ( count( $tokens ) == 0 ) {
+			return new CBTValue;
+		}
+		$fname = 'CBTProcessor::doFunction';
+		wfProfileIn( $fname );
+		
+		$ret = new CBTValue;
+		
+		// All functions implicitly depend on their arguments, and the function name
+		// While this is not strictly necessary for all functions, it's true almost 
+		// all the time and so convenient to do automatically. 
+		$ret->addDeps( $tokens );
+
+		$this->mCurrentPos = $p;
+		$func = array_shift( $tokens );
+		$func = $func->getText();
+
+		// Extract the text component from all the tokens
+		// And convert any templates to plain text
+		$textArgs = array();
+		foreach ( $tokens as $token ) {
+			$token->execute( $this );
+			$textArgs[] = $token->getText();
+		}
+
+		// Try the local cache
+		$cacheKey = $func . "\n" . implode( "\n", $textArgs );
+		if ( isset( $this->mFunctionCache[$cacheKey] ) ) {
+			$val = $this->mFunctionCache[$cacheKey];
+		} elseif ( isset( $this->mBuiltins[$func] ) ) {
+			$func = $this->mBuiltins[$func];
+			$val = call_user_func_array( array( &$this, $func ), $tokens );
+			$this->mFunctionCache[$cacheKey] = $val;
+		} elseif ( method_exists( $this->mFunctionObj, $func ) ) {
+			$profName = get_class( $this->mFunctionObj ) . '::' . $func;
+			wfProfileIn( "$fname-callback" );
+			wfProfileIn( $profName );
+			$val = call_user_func_array( array( &$this->mFunctionObj, $func ), $textArgs );
+			wfProfileOut( $profName );
+			wfProfileOut( "$fname-callback" );
+			$this->mFunctionCache[$cacheKey] = $val;
+		} else {
+			$this->error( "Call of undefined function \"$func\"", $p );
+			$val = new CBTValue;
+		}
+		if ( !is_object( $val ) ) {
+			$val = new CBTValue((string)$val);
+		}
+
+		if ( CBT_DEBUG ) {
+			$unexpanded = $val;
+		}
+
+		// If the output was a template, execute it
+		$val->execute( $this );
+		
+		if ( $this->mCompiling ) {
+			// Escape any braces so that the output will be a valid template
+			$val->templateEscape();
+		} 
+		$val->removeDeps( $this->mIgnorableDeps );
+		$ret->addDeps( $val );
+		$ret->setText( $val->getText() );
+
+		if ( CBT_DEBUG ) {
+			wfDebug( "doFunction $func args = " 
+				. var_export( $tokens, true ) 
+				. "unexpanded return = " 
+				. var_export( $unexpanded, true )
+				. "expanded return = " 
+				. var_export( $ret, true ) 
+			);
+		}
+		
+		wfProfileOut( $fname );
+		return $ret;
+	}
+
+	/**
+	 * Set a flag indicating that an error has been found.
+	 */
+	function error( $text, $pos = false ) {
+		$this->mLastError = $text;
+		if ( $pos === false ) {
+			$this->mErrorPos = $this->mCurrentPos;
+		} else {
+			$this->mErrorPos = $pos;
+		}
+	}
+
+	function getLastError() {
+		return $this->mLastError;
+	}
+
+	/** 'if' built-in function */
+	function bi_if( $condition, $trueBlock, $falseBlock = null ) {
+		if ( is_null( $condition ) ) {
+			$this->error( "Missing condition in if" );
+			return '';
+		}
+
+		if ( $condition->getText() != '' ) {
+			return new CBTValue( $trueBlock->getText(), 
+				array_merge( $condition->getDeps(), $trueBlock->getDeps() ),
+				$trueBlock->mIsTemplate );
+		} else {
+			if ( !is_null( $falseBlock ) ) {
+				return new CBTValue( $falseBlock->getText(), 
+					array_merge( $condition->getDeps(), $falseBlock->getDeps() ),
+		   			$falseBlock->mIsTemplate );
+			} else {
+				return new CBTValue( '', $condition->getDeps() );
+			}
+		}
+	}
+
+	/** 'true' built-in function */
+	function bi_true() {
+		return "true";
+	}
+
+	/** left brace built-in */
+	function bi_lbrace() {
+		return '{';
+	}
+
+	/** right brace built-in */
+	function bi_rbrace() {
+		return '}';
+	}
+
+	/** 
+	 * escape built-in.
+	 * Escape text for inclusion in an HTML attribute 
+	 */
+	function bi_escape( $val ) {
+		return new CBTValue( htmlspecialchars( $val->getText() ), $val->getDeps() );
+	}
+}
+?>
Index: /MediaWiki/branches/1.11/includes/cbt/README
===================================================================
--- /MediaWiki/branches/1.11/includes/cbt/README	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/cbt/README	(revision 1280)
@@ -0,0 +1,108 @@
+Overview
+--------
+
+CBT (callback-based templates) is an experimental system for improving skin 
+rendering time in MediaWiki and similar applications. The fundamental concept is
+a template language which contains tags which pull text from PHP callbacks.
+These PHP callbacks do not simply return text, they also return a description of
+the dependencies -- the global data upon which the returned text depends. This
+allows a compiler to produce a template optimised for a certain context. For
+example, a user-dependent template can be produced, with the username replaced
+by static text, as well as all user preference dependent text.
+
+This was an experimental project to prove the concept -- to explore possible
+efficiency gains and techniques. TemplateProcessor was the first element of this
+experiment. It is a class written in PHP which parses a template, and produces
+either an optimised template with dependencies removed, or the output text
+itself. I found that even with a heavily optimised template, this processor was
+not fast enough to match the speed of the original MonoBook. 
+
+To improve the efficiency, I wrote TemplateCompiler, which takes a template,
+preferably pre-optimised by TemplateProcessor, and generates PHP code from it.
+The generated code is a single expression, concatenating static text and
+callback results. This approach turned out to be very efficient, making 
+significant time savings compared to the original MonoBook. 
+
+Despite this success, the code has been shelved for the time being. There were 
+a number of unresolved implementation problems, and I felt that there were more
+pressing priorities for MediaWiki development than solving them and bringing
+this module to completion. I also believe that more research is needed into 
+other possible template architectures. There is nothing fundamentally wrong with
+the CBT concept, and I would encourage others to continue its development.
+
+The problems I saw were:
+
+* Extensibility. Can non-Wikimedia installations easily extend and modify CBT 
+  skins? Patching seems to be necessary, is this acceptable? MediaWiki
+  extensions are another problem. Unless the interfaces allow them to return
+  dependencies, any hooks will have to be marked dynamic and thus inefficient.
+
+* Cache invalidation. This is a simple implementation issue, although it would
+  require extensive modification to the MediaWiki core.
+
+* Syntax. The syntax is minimalistic and easy to parse, but can be quite ugly.
+  Will generations of MediaWiki users curse my name?
+
+* Security. The code produced by TemplateCompiler is best stored in memcached
+  and executed with eval(). This allows anyone with access to the memcached port
+  to run code as the apache user.
+
+
+Template syntax
+---------------
+
+There are two modes: text mode and function mode. The brace characters "{" 
+and "}" are the only reserved characters. Either one of them will switch from
+text mode to function mode wherever they appear, no exceptions. 
+
+In text mode, all characters are passed through to the output. In function
+mode, text is split into tokens, delimited either by whitespace or by 
+matching pairs of braces. The first token is taken to be a function name. The
+other tokens are first processed in function mode themselves, then they are 
+passed to the named function as parameters. The return value of the function
+is passed through to the output.
+
+Example:
+   {escape {"hello"}}
+
+First brace switches to function mode. The function name is escape, the first
+and only parameter is {"hello"}. This parameter is executed. The braces around
+the parameter cause the parser to switch to text mode, thus the string "hello",
+including the quotes, is passed back and used as an argument to the escape 
+function. 
+
+Example:
+   {if title {<h1>{title}</h1>}}
+
+The function name is "if". The first parameter is the result of calling the 
+function "title". The second parameter is a level 1 HTML heading containing
+the result of the function "title". "if" is a built-in function which will 
+return the second parameter only if the first is non-blank, so the effect of
+this is to return a heading element only if a title exists.
+
+As a shortcut for generation of HTML attributes, if a function mode segment is
+surrounded by double quotes, quote characters in the return value will be 
+escaped. This only applies if the quote character immediately precedes the 
+opening brace, and immediately follows the closing brace, with no whitespace.
+
+User callback functions are defined by passing a function object to the 
+template processor. Function names appearing in the text are first checked
+against built-in function names, then against the method names in the function
+object. The function object forms a sandbox for execution of the template, so 
+security-conscious users may wish to avoid including functions that allow
+arbitrary filesystem access or code execution.
+
+The callback function will receive its parameters as strings. If the 
+result of the function depends only on the arguments, and certain things 
+understood to be "static", such as the source code, then the callback function
+should return a string. If the result depends on other things, then the function
+should call cbt_value() to get a return value:
+
+   return cbt_value( $text, $deps );
+
+where $deps is an array of string tokens, each one naming a dependency. As a 
+shortcut, if there is only one dependency, $deps may be a string.
+
+
+---------------------
+Tim Starling 2006
Index: /MediaWiki/branches/1.11/includes/media/BMP.php
===================================================================
--- /MediaWiki/branches/1.11/includes/media/BMP.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/media/BMP.php	(revision 1280)
@@ -0,0 +1,31 @@
+<?php
+/**
+ * Handler for Microsoft bitmap format (bmp). It inherits most of the methods
+ * from ImageHandler, some of them had to be overriden cause gd does not
+ * support this format.
+ *
+ * @addtogroup Media
+ */
+class BmpHandler extends BitmapHandler {
+
+	/*
+	 * Get width and height from the bmp header.
+	 */
+	function getImageSize( $image, $filename ) {
+		$f = fopen( $filename, 'r' );
+		if(!$f) return false;
+		$header = fread( $f, 54 );
+		fclose($f);
+
+		// Extract binary form of width and height from the header
+		$w = substr( $header, 18, 4);
+		$h = substr( $header, 22, 4);
+
+		// Convert the unsigned long 32 bits (little endian):
+		$w = unpack( 'V' , $w );
+		$h = unpack( 'V' , $h );
+		return array( $w[1], $h[1] );
+	}
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/media/Bitmap.php
===================================================================
--- /MediaWiki/branches/1.11/includes/media/Bitmap.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/media/Bitmap.php	(revision 1280)
@@ -0,0 +1,236 @@
+<?php
+
+/**
+ * @addtogroup Media
+ */
+class BitmapHandler extends ImageHandler {
+	function normaliseParams( $image, &$params ) {
+		global $wgMaxImageArea;
+		if ( !parent::normaliseParams( $image, $params ) ) {
+			return false;
+		}
+
+		$mimeType = $image->getMimeType();
+		$srcWidth = $image->getWidth( $params['page'] );
+		$srcHeight = $image->getHeight( $params['page'] );
+
+		# Don't thumbnail an image so big that it will fill hard drives and send servers into swap
+		# JPEG has the handy property of allowing thumbnailing without full decompression, so we make
+		# an exception for it.
+		if ( $mimeType !== 'image/jpeg' &&
+			$srcWidth * $srcHeight > $wgMaxImageArea )
+		{
+			return false;
+		}
+
+		# Don't make an image bigger than the source
+		$params['physicalWidth'] = $params['width'];
+		$params['physicalHeight'] = $params['height'];
+		
+		if ( $params['physicalWidth'] >= $srcWidth ) {
+			$params['physicalWidth'] = $srcWidth;
+			$params['physicalHeight'] = $srcHeight;
+			return true;
+		}
+
+		return true;
+	}
+	
+	function doTransform( $image, $dstPath, $dstUrl, $params, $flags = 0 ) {
+		global $wgUseImageMagick, $wgImageMagickConvertCommand;
+		global $wgCustomConvertCommand;
+		global $wgSharpenParameter, $wgSharpenReductionThreshold;
+
+		if ( !$this->normaliseParams( $image, $params ) ) {
+			return new TransformParameterError( $params );
+		}
+		$physicalWidth = $params['physicalWidth'];
+		$physicalHeight = $params['physicalHeight'];
+		$clientWidth = $params['width'];
+		$clientHeight = $params['height'];
+		$srcWidth = $image->getWidth();
+		$srcHeight = $image->getHeight();
+		$mimeType = $image->getMimeType();
+		$srcPath = $image->getImagePath();
+		$retval = 0;
+		wfDebug( __METHOD__.": creating {$physicalWidth}x{$physicalHeight} thumbnail at $dstPath\n" );
+
+		if ( $physicalWidth == $srcWidth && $physicalHeight == $srcHeight ) {
+			# normaliseParams (or the user) wants us to return the unscaled image
+			wfDebug( __METHOD__.": returning unscaled image\n" );
+			return new ThumbnailImage( $image->getURL(), $clientWidth, $clientHeight, $srcPath );
+		}
+
+		if ( $wgUseImageMagick ) {
+			$scaler = 'im';
+		} elseif ( $wgCustomConvertCommand ) {
+			$scaler = 'custom';
+		} elseif ( function_exists( 'imagecreatetruecolor' ) ) {
+			$scaler = 'gd';
+		} else {
+			$scaler = 'client';
+		}
+
+		if ( $scaler == 'client' ) {
+			# Client-side image scaling, use the source URL
+			# Using the destination URL in a TRANSFORM_LATER request would be incorrect
+			return new ThumbnailImage( $image->getURL(), $clientWidth, $clientHeight, $srcPath );
+		}
+
+		if ( $flags & self::TRANSFORM_LATER ) {
+			return new ThumbnailImage( $dstUrl, $clientWidth, $clientHeight, $dstPath );
+		}
+
+		if ( !wfMkdirParents( dirname( $dstPath ) ) ) {
+			return new MediaTransformError( 'thumbnail_error', $clientWidth, $clientHeight, 
+				wfMsg( 'thumbnail_dest_directory' ) );
+		}
+
+		if ( $scaler == 'im' ) {
+			# use ImageMagick
+
+			$sharpen = '';
+			if ( $mimeType == 'image/jpeg' ) {
+				$quality = "-quality 80"; // 80%
+				# Sharpening, see bug 6193
+				if ( ( $physicalWidth + $physicalHeight ) / ( $srcWidth + $srcHeight ) < $wgSharpenReductionThreshold ) {
+					$sharpen = "-sharpen " . wfEscapeShellArg( $wgSharpenParameter );
+				}
+			} elseif ( $mimeType == 'image/png' ) {
+				$quality = "-quality 95"; // zlib 9, adaptive filtering
+			} else {
+				$quality = ''; // default
+			}
+
+			# Specify white background color, will be used for transparent images
+			# in Internet Explorer/Windows instead of default black.
+
+			# Note, we specify "-size {$physicalWidth}" and NOT "-size {$physicalWidth}x{$physicalHeight}".
+			# It seems that ImageMagick has a bug wherein it produces thumbnails of
+			# the wrong size in the second case.
+
+			$cmd  =  wfEscapeShellArg($wgImageMagickConvertCommand) .
+				" {$quality} -background white -size {$physicalWidth} ".
+				wfEscapeShellArg($srcPath) .
+				// Coalesce is needed to scale animated GIFs properly (bug 1017).
+				' -coalesce ' .
+				// For the -resize option a "!" is needed to force exact size,
+				// or ImageMagick may decide your ratio is wrong and slice off
+				// a pixel.
+				" -thumbnail " . wfEscapeShellArg( "{$physicalWidth}x{$physicalHeight}!" ) .
+				" -depth 8 $sharpen " .
+				wfEscapeShellArg($dstPath) . " 2>&1";
+			wfDebug( __METHOD__.": running ImageMagick: $cmd\n");
+			wfProfileIn( 'convert' );
+			$err = wfShellExec( $cmd, $retval );
+			wfProfileOut( 'convert' );
+		} elseif( $scaler == 'custom' ) {
+			# Use a custom convert command
+			# Variables: %s %d %w %h
+			$src = wfEscapeShellArg( $srcPath );
+			$dst = wfEscapeShellArg( $dstPath );
+			$cmd = $wgCustomConvertCommand;
+			$cmd = str_replace( '%s', $src, str_replace( '%d', $dst, $cmd ) ); # Filenames
+			$cmd = str_replace( '%h', $physicalHeight, str_replace( '%w', $physicalWidth, $cmd ) ); # Size
+			wfDebug( __METHOD__.": Running custom convert command $cmd\n" );
+			wfProfileIn( 'convert' );
+			$err = wfShellExec( $cmd, $retval );
+			wfProfileOut( 'convert' );
+		} else /* $scaler == 'gd' */ {
+			# Use PHP's builtin GD library functions.
+			#
+			# First find out what kind of file this is, and select the correct
+			# input routine for this.
+
+			$typemap = array(
+				'image/gif'          => array( 'imagecreatefromgif',  'palette',   'imagegif'  ),
+				'image/jpeg'         => array( 'imagecreatefromjpeg', 'truecolor', array( __CLASS__, 'imageJpegWrapper' ) ),
+				'image/png'          => array( 'imagecreatefrompng',  'bits',      'imagepng'  ),
+				'image/vnd.wap.wbmp' => array( 'imagecreatefromwbmp', 'palette',   'imagewbmp'  ),
+				'image/xbm'          => array( 'imagecreatefromxbm',  'palette',   'imagexbm'  ),
+			);
+			if( !isset( $typemap[$mimeType] ) ) {
+				$err = 'Image type not supported';
+				wfDebug( "$err\n" );
+				return new MediaTransformError( 'thumbnail_error', $clientWidth, $clientHeight, $err );
+			}
+			list( $loader, $colorStyle, $saveType ) = $typemap[$mimeType];
+
+			if( !function_exists( $loader ) ) {
+				$err = "Incomplete GD library configuration: missing function $loader";
+				wfDebug( "$err\n" );
+				return new MediaTransformError( 'thumbnail_error', $clientWidth, $clientHeight, $err );
+			}
+
+			$src_image = call_user_func( $loader, $srcPath );
+			$dst_image = imagecreatetruecolor( $physicalWidth, $physicalHeight );
+			imagecopyresampled( $dst_image, $src_image,
+						0,0,0,0,
+						$physicalWidth, $physicalHeight, imagesx( $src_image ), imagesy( $src_image ) );
+			call_user_func( $saveType, $dst_image, $dstPath );
+			imagedestroy( $dst_image );
+			imagedestroy( $src_image );
+			$retval = 0;
+		}
+
+		$removed = $this->removeBadFile( $dstPath, $retval );
+		if ( $retval != 0 || $removed ) {
+			wfDebugLog( 'thumbnail',
+				sprintf( 'thumbnail failed on %s: error %d "%s" from "%s"',
+					wfHostname(), $retval, trim($err), $cmd ) );
+			return new MediaTransformError( 'thumbnail_error', $clientWidth, $clientHeight, $err );
+		} else {
+			return new ThumbnailImage( $dstUrl, $clientWidth, $clientHeight, $dstPath );
+		}
+	}
+
+	static function imageJpegWrapper( $dst_image, $thumbPath ) {
+		imageinterlace( $dst_image );
+		imagejpeg( $dst_image, $thumbPath, 95 );
+	}
+
+
+	function getMetadata( $image, $filename ) {
+		global $wgShowEXIF;
+		if( $wgShowEXIF && file_exists( $filename ) ) {
+			$exif = new Exif( $filename );
+			$data = $exif->getFilteredData();
+			if ( $data ) {
+				$data['MEDIAWIKI_EXIF_VERSION'] = Exif::version();
+				return serialize( $data );
+			} else {
+				return '0';
+			}
+		} else {
+			return '';
+		}
+	}
+
+	function getMetadataType( $image ) {
+		return 'exif';
+	}
+
+	function isMetadataValid( $image, $metadata ) {
+		global $wgShowEXIF;
+		if ( !$wgShowEXIF ) {
+			# Metadata disabled and so an empty field is expected
+			return true;
+		}
+		if ( $metadata === '0' ) {
+			# Special value indicating that there is no EXIF data in the file
+			return true;
+		}
+		$exif = @unserialize( $metadata );
+		if ( !isset( $exif['MEDIAWIKI_EXIF_VERSION'] ) ||
+			$exif['MEDIAWIKI_EXIF_VERSION'] != Exif::version() )
+		{
+			# Wrong version
+			wfDebug( __METHOD__.": wrong version\n" );
+			return false;
+		}
+		return true;
+	}
+
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/media/DjVu.php
===================================================================
--- /MediaWiki/branches/1.11/includes/media/DjVu.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/media/DjVu.php	(revision 1280)
@@ -0,0 +1,206 @@
+<?php
+
+/**
+ * @addtogroup Media
+ */
+class DjVuHandler extends ImageHandler {
+	function isEnabled() {
+		global $wgDjvuRenderer, $wgDjvuDump, $wgDjvuToXML;
+		if ( !$wgDjvuRenderer || ( !$wgDjvuDump && !$wgDjvuToXML ) ) {
+			wfDebug( "DjVu is disabled, please set \$wgDjvuRenderer and \$wgDjvuDump\n" );
+			return false;
+		} else {
+			return true;
+		}
+	}
+
+	function mustRender() { return true; }
+	function isMultiPage() { return true; }
+
+	function validateParam( $name, $value ) {
+		if ( in_array( $name, array( 'width', 'height', 'page' ) ) ) {
+			if ( $value <= 0 ) {
+				return false;
+			} else {
+				return true;
+			}
+		} else {
+			return false;
+		}
+	}
+
+	function makeParamString( $params ) {
+		$page = isset( $params['page'] ) ? $params['page'] : 1;
+		if ( !isset( $params['width'] ) ) {
+			return false;
+		}
+		return "page{$page}-{$params['width']}px";
+	}
+
+	function parseParamString( $str ) {
+		$m = false;
+		if ( preg_match( '/^page(\d+)-(\d+)px$/', $str, $m ) ) {
+			return array( 'width' => $m[2], 'page' => $m[1] );
+		} else {
+			return false;
+		}
+	}
+
+	function getScriptParams( $params ) {
+		return array(
+			'width' => $params['width'],
+			'page' => $params['page'],
+		);
+	}
+
+	function doTransform( $image, $dstPath, $dstUrl, $params, $flags = 0 ) {
+		global $wgDjvuRenderer, $wgDjvuPostProcessor;
+
+		// Fetch XML and check it, to give a more informative error message than the one which 
+		// normaliseParams will inevitably give.
+		$xml = $image->getMetadata();
+		if ( !$xml ) {
+			return new MediaTransformError( 'thumbnail_error', @$params['width'], @$params['height'], 
+				wfMsg( 'djvu_no_xml' ) );
+		}
+		
+		if ( !$this->normaliseParams( $image, $params ) ) {
+			return new TransformParameterError( $params );
+		}
+		$width = $params['width'];
+		$height = $params['height'];
+		$srcPath = $image->getImagePath();
+		$page = $params['page'];
+		$pageCount = $this->pageCount( $image );
+		if ( $page > $this->pageCount( $image ) ) {
+			return new MediaTransformError( 'thumbnail_error', $width, $height, wfMsg( 'djvu_page_error' ) );
+		}
+		
+		if ( $flags & self::TRANSFORM_LATER ) {
+			return new ThumbnailImage( $dstUrl, $width, $height, $dstPath );
+		}
+
+		if ( !wfMkdirParents( dirname( $dstPath ) ) ) {
+			return new MediaTransformError( 'thumbnail_error', $width, $height, wfMsg( 'thumbnail_dest_directory' ) );
+		}
+
+		# Use a subshell (brackets) to aggregate stderr from both pipeline commands 
+		# before redirecting it to the overall stdout. This works in both Linux and Windows XP.
+		$cmd = '(' . wfEscapeShellArg( $wgDjvuRenderer ) . " -format=ppm -page={$page} -size={$width}x{$height} " .
+			wfEscapeShellArg( $srcPath );
+		if ( $wgDjvuPostProcessor ) {
+			$cmd .= " | {$wgDjvuPostProcessor}";
+		}
+		$cmd .= ' > ' . wfEscapeShellArg($dstPath) . ') 2>&1';
+		wfProfileIn( 'ddjvu' );
+		wfDebug( __METHOD__.": $cmd\n" );
+		$err = wfShellExec( $cmd, $retval );
+		wfProfileOut( 'ddjvu' );
+
+		$removed = $this->removeBadFile( $dstPath, $retval );
+		if ( $retval != 0 || $removed ) {
+			wfDebugLog( 'thumbnail',
+				sprintf( 'thumbnail failed on %s: error %d "%s" from "%s"',
+					wfHostname(), $retval, trim($err), $cmd ) );
+			return new MediaTransformError( 'thumbnail_error', $width, $height, $err );
+		} else {
+			return new ThumbnailImage( $dstUrl, $width, $height, $dstPath );
+		}
+	}
+
+	/**
+	 * Cache an instance of DjVuImage in an Image object, return that instance
+	 */
+	function getDjVuImage( $image, $path ) {
+		if ( !$image ) {
+			$deja = new DjVuImage( $path );
+		} elseif ( !isset( $image->dejaImage ) ) {
+			$deja = $image->dejaImage = new DjVuImage( $path );
+		} else {
+			$deja = $image->dejaImage;
+		}
+		return $deja;
+	}
+
+	/**
+	 * Cache a document tree for the DjVu XML metadata
+	 */
+	function getMetaTree( $image ) {
+		if ( isset( $image->dejaMetaTree ) ) {
+			return $image->dejaMetaTree;
+		}
+
+		$metadata = $image->getMetadata();
+		if ( !$this->isMetadataValid( $image, $metadata ) ) {
+			wfDebug( "DjVu XML metadata is invalid or missing, should have been fixed in upgradeRow\n" );
+			return false;
+		}
+		wfProfileIn( __METHOD__ );
+
+		wfSuppressWarnings();
+		try {
+			$image->dejaMetaTree = new SimpleXMLElement( $metadata );
+		} catch( Exception $e ) {
+			wfDebug( "Bogus multipage XML metadata on '$image->name'\n" );
+			// Set to false rather than null to avoid further attempts
+			$image->dejaMetaTree = false;
+		}
+		wfRestoreWarnings();
+		wfProfileOut( __METHOD__ );
+		return $image->dejaMetaTree;
+	}
+
+	function getImageSize( $image, $path ) {
+		return $this->getDjVuImage( $image, $path )->getImageSize();
+	}
+
+	function getThumbType( $ext, $mime ) {
+		global $wgDjvuOutputExtension;
+		static $mime;
+		if ( !isset( $mime ) ) {
+			$magic = MimeMagic::singleton();
+			$mime = $magic->guessTypesForExtension( $wgDjvuOutputExtension );
+		}
+		return array( $wgDjvuOutputExtension, $mime );
+	}
+
+	function getMetadata( $image, $path ) {
+		wfDebug( "Getting DjVu metadata for $path\n" );
+		return $this->getDjVuImage( $image, $path )->retrieveMetaData();
+	}
+
+	function getMetadataType( $image ) {
+		return 'djvuxml';
+	}
+
+	function isMetadataValid( $image, $metadata ) {
+		return !empty( $metadata ) && $metadata != serialize(array());
+	}
+
+	function pageCount( $image ) {
+		$tree = $this->getMetaTree( $image );
+		if ( !$tree ) {
+			return false;
+		}
+		return count( $tree->xpath( '//OBJECT' ) );
+	}
+
+	function getPageDimensions( $image, $page ) {
+		$tree = $this->getMetaTree( $image );
+		if ( !$tree ) {
+			return false;
+		}
+
+		$o = $tree->BODY[0]->OBJECT[$page-1];
+		if ( $o ) {
+			return array(
+				'width' => intval( $o['width'] ),
+				'height' => intval( $o['height'] )
+			);
+		} else {
+			return false;
+		}
+	}
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/media/Generic.php
===================================================================
--- /MediaWiki/branches/1.11/includes/media/Generic.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/media/Generic.php	(revision 1280)
@@ -0,0 +1,298 @@
+<?php
+
+/**
+ * Media-handling base classes and generic functionality
+ */
+
+/**
+ * Base media handler class
+ *
+ * @addtogroup Media
+ */
+abstract class MediaHandler {
+	const TRANSFORM_LATER = 1;
+
+	/**
+	 * Instance cache
+	 */
+	static $handlers = array();
+
+	/**
+	 * Get a MediaHandler for a given MIME type from the instance cache
+	 */
+	static function getHandler( $type ) {
+		global $wgMediaHandlers;
+		if ( !isset( $wgMediaHandlers[$type] ) ) {
+			wfDebug( __METHOD__ . ": no handler found for $type.\n");
+			return false;
+		}
+		$class = $wgMediaHandlers[$type];
+		if ( !isset( self::$handlers[$class] ) ) {
+			self::$handlers[$class] = new $class;
+			if ( !self::$handlers[$class]->isEnabled() ) {
+				self::$handlers[$class] = false;
+			}
+		}
+		return self::$handlers[$class];
+	}
+
+	/*
+	 * Validate a thumbnail parameter at parse time. 
+	 * Return true to accept the parameter, and false to reject it.
+	 * If you return false, the parser will do something quiet and forgiving.
+	 */
+	abstract function validateParam( $name, $value );
+
+	/**
+	 * Merge a parameter array into a string appropriate for inclusion in filenames
+	 */
+	abstract function makeParamString( $params );
+
+	/**
+	 * Parse a param string made with makeParamString back into an array
+	 */
+	abstract function parseParamString( $str );
+
+	/**
+	 * Changes the parameter array as necessary, ready for transformation. 
+	 * Should be idempotent.
+	 * Returns false if the parameters are unacceptable and the transform should fail
+	 */
+	abstract function normaliseParams( $image, &$params );
+
+	/**
+	 * Get an image size array like that returned by getimagesize(), or false if it 
+	 * can't be determined.
+	 *
+	 * @param Image $image The image object, or false if there isn't one
+	 * @param string $fileName The filename
+	 * @return array
+	 */
+	abstract function getImageSize( $image, $path );
+
+	/**
+	 * Get handler-specific metadata which will be saved in the img_metadata field.
+	 *
+	 * @param Image $image The image object, or false if there isn't one
+	 * @param string $fileName The filename
+	 * @return string
+	 */
+	function getMetadata( $image, $path ) { return ''; }
+
+	/**
+	 * Get a string describing the type of metadata, for display purposes.
+	 */
+	function getMetadataType( $image ) { return false; }
+
+	/**
+	 * Check if the metadata string is valid for this handler.
+	 * If it returns false, Image will reload the metadata from the file and update the database
+	 */
+	function isMetadataValid( $image, $metadata ) { return true; }
+
+	/**
+	 * Get a MediaTransformOutput object representing the transformed output. Does not 
+	 * actually do the transform.
+	 *
+	 * @param Image $image The image object
+	 * @param string $dstPath Filesystem destination path
+	 * @param string $dstUrl Destination URL to use in output HTML
+	 * @param array $params Arbitrary set of parameters validated by $this->validateParam()
+	 */
+	function getTransform( $image, $dstPath, $dstUrl, $params ) {
+		return $this->doTransform( $image, $dstPath, $dstUrl, $params, self::TRANSFORM_LATER );
+	}
+
+	/**
+	 * Get a MediaTransformOutput object representing the transformed output. Does the 
+	 * transform unless $flags contains self::TRANSFORM_LATER.
+	 *
+	 * @param Image $image The image object
+	 * @param string $dstPath Filesystem destination path
+	 * @param string $dstUrl Destination URL to use in output HTML
+	 * @param array $params Arbitrary set of parameters validated by $this->validateParam()
+	 * @param integer $flags A bitfield, may contain self::TRANSFORM_LATER
+	 */
+	abstract function doTransform( $image, $dstPath, $dstUrl, $params, $flags = 0 );
+
+	/**
+	 * Get the thumbnail extension and MIME type for a given source MIME type
+	 * @return array thumbnail extension and MIME type
+	 */
+	function getThumbType( $ext, $mime ) {
+		return array( $ext, $mime );
+	}	
+
+	/**
+	 * True if the handled types can be transformed
+	 */
+	function canRender() { return true; }
+	/**
+	 * True if handled types cannot be displayed directly in a browser 
+	 * but can be rendered
+	 */
+	function mustRender() { return false; }
+	/**
+	 * True if the type has multi-page capabilities
+	 */
+	function isMultiPage() { return false; }
+	/**
+	 * Page count for a multi-page document, false if unsupported or unknown
+	 */
+	function pageCount() { return false; }
+	/**
+	 * False if the handler is disabled for all files
+	 */
+	function isEnabled() { return true; }
+
+	/**
+	 * Get an associative array of page dimensions
+	 * Currently "width" and "height" are understood, but this might be 
+	 * expanded in the future.
+	 * Returns false if unknown or if the document is not multi-page.
+	 */
+	function getPageDimensions( $image, $page ) {
+		$gis = $this->getImageSize( $image, $image->getImagePath() );
+		return array(
+			'width' => $gis[0],
+			'height' => $gis[1]
+		);
+	}
+}
+
+/**
+ * Media handler abstract base class for images
+ *
+ * @addtogroup Media
+ */
+abstract class ImageHandler extends MediaHandler {
+	function validateParam( $name, $value ) {
+		if ( in_array( $name, array( 'width', 'height' ) ) ) {
+			if ( $value <= 0 ) {
+				return false;
+			} else {
+				return true;
+			}
+		} else {
+			return false;
+		}
+	}
+
+	function makeParamString( $params ) {
+		if ( isset( $params['physicalWidth'] ) ) {
+			$width = $params['physicalWidth'];
+		} else {
+			$width = $params['width'];
+		}
+		# Removed for ProofreadPage
+		#$width = intval( $width );
+		return "{$width}px";
+	}
+
+	function parseParamString( $str ) {
+		$m = false;
+		if ( preg_match( '/^(\d+)px$/', $str, $m ) ) {
+			return array( 'width' => $m[1] );
+		} else {
+			return false;
+		}
+	}
+
+	function getScriptParams( $params ) {
+		return array( 'width' => $params['width'] );
+	}
+
+	function normaliseParams( $image, &$params ) {
+		$mimeType = $image->getMimeType();
+
+		if ( !isset( $params['width'] ) ) {
+			return false;
+		}
+		if ( !isset( $params['page'] ) ) {
+			$params['page'] = 1;
+		}
+		$srcWidth = $image->getWidth( $params['page'] );
+		$srcHeight = $image->getHeight( $params['page'] );
+		if ( isset( $params['height'] ) && $params['height'] != -1 ) {
+			if ( $params['width'] * $srcHeight > $params['height'] * $srcWidth ) {
+				$params['width'] = wfFitBoxWidth( $srcWidth, $srcHeight, $params['height'] );
+			}
+		}
+		$params['height'] = Image::scaleHeight( $srcWidth, $srcHeight, $params['width'] );
+		if ( !$this->validateThumbParams( $params['width'], $params['height'], $srcWidth, $srcHeight, $mimeType ) ) {
+			return false;
+		}
+		return true;
+	}
+
+	/**
+	 * Get a transform output object without actually doing the transform
+	 */
+	function getTransform( $image, $dstPath, $dstUrl, $params ) {
+		return $this->doTransform( $image, $dstPath, $dstUrl, $params, self::TRANSFORM_LATER );
+	}
+	
+	/**
+	 * Validate thumbnail parameters and fill in the correct height
+	 *
+	 * @param integer &$width Specified width (input/output)
+	 * @param integer &$height Height (output only)
+	 * @return false to indicate that an error should be returned to the user. 
+	 */
+	function validateThumbParams( &$width, &$height, $srcWidth, $srcHeight, $mimeType ) {
+		$width = intval( $width );
+
+		# Sanity check $width
+		if( $width <= 0) {
+			wfDebug( __METHOD__.": Invalid destination width: $width\n" );
+			return false;
+		}
+		if ( $srcWidth <= 0 ) {
+			wfDebug( __METHOD__.": Invalid source width: $srcWidth\n" );
+			return false;
+		}
+
+		$height = Image::scaleHeight( $srcWidth, $srcHeight, $width );
+		return true;
+	}
+
+	function getScriptedTransform( $image, $script, $params ) {
+		if ( !$this->normaliseParams( $image, $params ) ) {
+			return false;
+		}
+		$url = $script . '&' . wfArrayToCGI( $this->getScriptParams( $params ) );
+		return new ThumbnailImage( $url, $params['width'], $params['height'] );
+	}
+
+	/**
+	 * Check for zero-sized thumbnails. These can be generated when
+	 * no disk space is available or some other error occurs
+	 *
+	 * @param $dstPath The location of the suspect file
+	 * @param $retval Return value of some shell process, file will be deleted if this is non-zero
+	 * @return true if removed, false otherwise
+	 */
+	function removeBadFile( $dstPath, $retval = 0 ) {
+		$removed = false;
+		if( file_exists( $dstPath ) ) {
+			$thumbstat = stat( $dstPath );
+			if( $thumbstat['size'] == 0 || $retval != 0 ) {
+				wfDebugLog( 'thumbnail',
+					sprintf( 'Removing bad %d-byte thumbnail "%s"',
+						$thumbstat['size'], $dstPath ) );
+				unlink( $dstPath );
+				return true;
+			}
+		}
+		return false;
+	}
+
+	function getImageSize( $image, $path ) {
+		wfSuppressWarnings();
+		$gis = getimagesize( $path );
+		wfRestoreWarnings();
+		return $gis;
+	}
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/media/SVG.php
===================================================================
--- /MediaWiki/branches/1.11/includes/media/SVG.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/media/SVG.php	(revision 1280)
@@ -0,0 +1,97 @@
+<?php
+
+/**
+ * @addtogroup Media
+ */
+class SvgHandler extends ImageHandler {
+	function isEnabled() {
+		global $wgSVGConverters, $wgSVGConverter;
+		if ( !isset( $wgSVGConverters[$wgSVGConverter] ) ) {
+			wfDebug( "\$wgSVGConverter is invalid, disabling SVG rendering.\n" );
+			return false;
+		} else {
+			return true;
+		}
+	}
+
+	function mustRender() {
+		return true;
+	}
+
+	function normaliseParams( $image, &$params ) {
+		global $wgSVGMaxSize;
+		if ( !parent::normaliseParams( $image, $params ) ) {
+			return false;
+		}
+
+		# Don't make an image bigger than wgMaxSVGSize
+		$params['physicalWidth'] = $params['width'];
+		$params['physicalHeight'] = $params['height'];
+		if ( $params['physicalWidth'] > $wgSVGMaxSize ) {
+			$srcWidth = $image->getWidth( $params['page'] );
+			$srcHeight = $image->getHeight( $params['page'] );
+			$params['physicalWidth'] = $wgSVGMaxSize;
+			$params['physicalHeight'] = Image::scaleHeight( $srcWidth, $srcHeight, $wgSVGMaxSize );
+		}
+		return true;
+	}
+	
+	function doTransform( $image, $dstPath, $dstUrl, $params, $flags = 0 ) {
+		global $wgSVGConverters, $wgSVGConverter, $wgSVGConverterPath;
+		
+		if ( !$this->normaliseParams( $image, $params ) ) {
+			return new TransformParameterError( $params );
+		}
+		$clientWidth = $params['width'];
+		$clientHeight = $params['height'];
+		$physicalWidth = $params['physicalWidth'];
+		$physicalHeight = $params['physicalHeight'];
+		$srcWidth = $image->getWidth();
+		$srcHeight = $image->getHeight();
+		$srcPath = $image->getImagePath();
+
+		if ( $flags & self::TRANSFORM_LATER ) {
+			return new ThumbnailImage( $dstUrl, $clientWidth, $clientHeight, $dstPath );
+		}
+
+		if ( !wfMkdirParents( dirname( $dstPath ) ) ) {
+			return new MediaTransformError( 'thumbnail_error', $clientWidth, $clientHeight, 
+				wfMsg( 'thumbnail_dest_directory' ) );
+		}
+
+		$err = false;
+		if( isset( $wgSVGConverters[$wgSVGConverter] ) ) {
+			$cmd = str_replace(
+				array( '$path/', '$width', '$height', '$input', '$output' ),
+				array( $wgSVGConverterPath ? wfEscapeShellArg( "$wgSVGConverterPath/" ) : "",
+					   intval( $physicalWidth ),
+					   intval( $physicalHeight ),
+					   wfEscapeShellArg( $srcPath ),
+					   wfEscapeShellArg( $dstPath ) ),
+				$wgSVGConverters[$wgSVGConverter] ) . " 2>&1";
+			wfProfileIn( 'rsvg' );
+			wfDebug( __METHOD__.": $cmd\n" );
+			$err = wfShellExec( $cmd, $retval );
+			wfProfileOut( 'rsvg' );
+		}
+
+		$removed = $this->removeBadFile( $dstPath, $retval );
+		if ( $retval != 0 || $removed ) {
+			wfDebugLog( 'thumbnail',
+				sprintf( 'thumbnail failed on %s: error %d "%s" from "%s"',
+					wfHostname(), $retval, trim($err), $cmd ) );
+			return new MediaTransformError( 'thumbnail_error', $clientWidth, $clientHeight, $err );
+		} else {
+			return new ThumbnailImage( $dstUrl, $clientWidth, $clientHeight, $dstPath );
+		}
+	}
+
+	function getImageSize( $image, $path ) {
+		return wfGetSVGsize( $path );
+	}
+
+	function getThumbType( $ext, $mime ) {
+		return array( 'png', 'image/png' );
+	}
+}
+?>
Index: /MediaWiki/branches/1.11/includes/memcached-client.php
===================================================================
--- /MediaWiki/branches/1.11/includes/memcached-client.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/memcached-client.php	(revision 1280)
@@ -0,0 +1,1088 @@
+<?php
+//
+// +---------------------------------------------------------------------------+
+// | memcached client, PHP                                                     |
+// +---------------------------------------------------------------------------+
+// | Copyright (c) 2003 Ryan T. Dean <rtdean@cytherianage.net>                 |
+// | All rights reserved.                                                      |
+// |                                                                           |
+// | Redistribution and use in source and binary forms, with or without        |
+// | modification, are permitted provided that the following conditions        |
+// | are met:                                                                  |
+// |                                                                           |
+// | 1. Redistributions of source code must retain the above copyright         |
+// |    notice, this list of conditions and the following disclaimer.          |
+// | 2. Redistributions in binary form must reproduce the above copyright      |
+// |    notice, this list of conditions and the following disclaimer in the    |
+// |    documentation and/or other materials provided with the distribution.   |
+// |                                                                           |
+// | THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR      |
+// | IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
+// | OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.   |
+// | IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,          |
+// | INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT  |
+// | NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
+// | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY     |
+// | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT       |
+// | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF  |
+// | THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.         |
+// +---------------------------------------------------------------------------+
+// | Author: Ryan T. Dean <rtdean@cytherianage.net>                            |
+// | Heavily influenced by the Perl memcached client by Brad Fitzpatrick.      |
+// |   Permission granted by Brad Fitzpatrick for relicense of ported Perl     |
+// |   client logic under 2-clause BSD license.                                |
+// +---------------------------------------------------------------------------+
+//
+// $TCAnet$
+//
+
+/**
+ * This is the PHP client for memcached - a distributed memory cache daemon.
+ * More information is available at http://www.danga.com/memcached/
+ *
+ * Usage example:
+ *
+ * require_once 'memcached.php';
+ *
+ * $mc = new memcached(array(
+ *              'servers' => array('127.0.0.1:10000',
+ *                                 array('192.0.0.1:10010', 2),
+ *                                 '127.0.0.1:10020'),
+ *              'debug'   => false,
+ *              'compress_threshold' => 10240,
+ *              'persistant' => true));
+ *
+ * $mc->add('key', array('some', 'array'));
+ * $mc->replace('key', 'some random string');
+ * $val = $mc->get('key');
+ *
+ * @author  Ryan T. Dean <rtdean@cytherianage.net>
+ * @package memcached-client
+ * @version 0.1.2
+ */
+
+// {{{ requirements
+// }}}
+
+// {{{ constants
+// {{{ flags
+
+/**
+ * Flag: indicates data is serialized
+ */
+define("MEMCACHE_SERIALIZED", 1<<0);
+
+/**
+ * Flag: indicates data is compressed
+ */
+define("MEMCACHE_COMPRESSED", 1<<1);
+
+// }}}
+
+/**
+ * Minimum savings to store data compressed
+ */
+define("COMPRESSION_SAVINGS", 0.20);
+
+// }}}
+
+// {{{ class memcached
+/**
+ * memcached client class implemented using (p)fsockopen()
+ *
+ * @author  Ryan T. Dean <rtdean@cytherianage.net>
+ * @addtogroup Cache
+ */
+class memcached
+{
+   // {{{ properties
+   // {{{ public
+
+   /**
+    * Command statistics
+    *
+    * @var     array
+    * @access  public
+    */
+   var $stats;
+
+   // }}}
+   // {{{ private
+
+   /**
+    * Cached Sockets that are connected
+    *
+    * @var     array
+    * @access  private
+    */
+   var $_cache_sock;
+
+   /**
+    * Current debug status; 0 - none to 9 - profiling
+    *
+    * @var     boolean
+    * @access  private
+    */
+   var $_debug;
+
+   /**
+    * Dead hosts, assoc array, 'host'=>'unixtime when ok to check again'
+    *
+    * @var     array
+    * @access  private
+    */
+   var $_host_dead;
+
+   /**
+    * Is compression available?
+    *
+    * @var     boolean
+    * @access  private
+    */
+   var $_have_zlib;
+
+   /**
+    * Do we want to use compression?
+    *
+    * @var     boolean
+    * @access  private
+    */
+   var $_compress_enable;
+
+   /**
+    * At how many bytes should we compress?
+    *
+    * @var     interger
+    * @access  private
+    */
+   var $_compress_threshold;
+
+   /**
+    * Are we using persistant links?
+    *
+    * @var     boolean
+    * @access  private
+    */
+   var $_persistant;
+
+   /**
+    * If only using one server; contains ip:port to connect to
+    *
+    * @var     string
+    * @access  private
+    */
+   var $_single_sock;
+
+   /**
+    * Array containing ip:port or array(ip:port, weight)
+    *
+    * @var     array
+    * @access  private
+    */
+   var $_servers;
+
+   /**
+    * Our bit buckets
+    *
+    * @var     array
+    * @access  private
+    */
+   var $_buckets;
+
+   /**
+    * Total # of bit buckets we have
+    *
+    * @var     interger
+    * @access  private
+    */
+   var $_bucketcount;
+
+   /**
+    * # of total servers we have
+    *
+    * @var     interger
+    * @access  private
+    */
+   var $_active;
+
+   /**
+    * Stream timeout in seconds. Applies for example to fread()
+    *
+    * @var     integer
+    * @access  private
+    */
+   var $_timeout_seconds;
+
+   /**
+    * Stream timeout in microseconds
+    *
+    * @var     integer
+    * @access  private
+    */
+   var $_timeout_microseconds;
+
+   /**
+    * Connect timeout in seconds
+    */
+   var $_connect_timeout;
+
+   /**
+    * Number of connection attempts for each server
+    */
+   var $_connect_attempts;
+
+   // }}}
+   // }}}
+   // {{{ methods
+   // {{{ public functions
+   // {{{ memcached()
+
+   /**
+    * Memcache initializer
+    *
+    * @param   array    $args    Associative array of settings
+    *
+    * @return  mixed
+    * @access  public
+    */
+   function memcached ($args)
+   {
+      $this->set_servers(@$args['servers']);
+      $this->_debug = @$args['debug'];
+      $this->stats = array();
+      $this->_compress_threshold = @$args['compress_threshold'];
+      $this->_persistant = array_key_exists('persistant', $args) ? (@$args['persistant']) : false;
+      $this->_compress_enable = true;
+      $this->_have_zlib = function_exists("gzcompress");
+
+      $this->_cache_sock = array();
+      $this->_host_dead = array();
+
+      $this->_timeout_seconds = 1;
+      $this->_timeout_microseconds = 0;
+
+      $this->_connect_timeout = 0.01;
+      $this->_connect_attempts = 3;
+   }
+
+   // }}}
+   // {{{ add()
+
+   /**
+    * Adds a key/value to the memcache server if one isn't already set with
+    * that key
+    *
+    * @param   string   $key     Key to set with data
+    * @param   mixed    $val     Value to store
+    * @param   interger $exp     (optional) Time to expire data at
+    *
+    * @return  boolean
+    * @access  public
+    */
+   function add ($key, $val, $exp = 0)
+   {
+      return $this->_set('add', $key, $val, $exp);
+   }
+
+   // }}}
+   // {{{ decr()
+
+   /**
+    * Decriment a value stored on the memcache server
+    *
+    * @param   string   $key     Key to decriment
+    * @param   interger $amt     (optional) Amount to decriment
+    *
+    * @return  mixed    FALSE on failure, value on success
+    * @access  public
+    */
+   function decr ($key, $amt=1)
+   {
+      return $this->_incrdecr('decr', $key, $amt);
+   }
+
+   // }}}
+   // {{{ delete()
+
+   /**
+    * Deletes a key from the server, optionally after $time
+    *
+    * @param   string   $key     Key to delete
+    * @param   interger $time    (optional) How long to wait before deleting
+    *
+    * @return  boolean  TRUE on success, FALSE on failure
+    * @access  public
+    */
+   function delete ($key, $time = 0)
+   {
+      if (!$this->_active)
+         return false;
+
+      $sock = $this->get_sock($key);
+      if (!is_resource($sock))
+         return false;
+
+      $key = is_array($key) ? $key[1] : $key;
+
+      @$this->stats['delete']++;
+      $cmd = "delete $key $time\r\n";
+      if(!$this->_safe_fwrite($sock, $cmd, strlen($cmd)))
+      {
+         $this->_dead_sock($sock);
+         return false;
+      }
+      $res = trim(fgets($sock));
+
+      if ($this->_debug)
+         $this->_debugprint(sprintf("MemCache: delete %s (%s)\n", $key, $res));
+
+      if ($res == "DELETED")
+         return true;
+      return false;
+   }
+
+   // }}}
+   // {{{ disconnect_all()
+
+   /**
+    * Disconnects all connected sockets
+    *
+    * @access  public
+    */
+   function disconnect_all ()
+   {
+      foreach ($this->_cache_sock as $sock)
+         fclose($sock);
+
+      $this->_cache_sock = array();
+   }
+
+   // }}}
+   // {{{ enable_compress()
+
+   /**
+    * Enable / Disable compression
+    *
+    * @param   boolean  $enable  TRUE to enable, FALSE to disable
+    *
+    * @access  public
+    */
+   function enable_compress ($enable)
+   {
+      $this->_compress_enable = $enable;
+   }
+
+   // }}}
+   // {{{ forget_dead_hosts()
+
+   /**
+    * Forget about all of the dead hosts
+    *
+    * @access  public
+    */
+   function forget_dead_hosts ()
+   {
+      $this->_host_dead = array();
+   }
+
+   // }}}
+   // {{{ get()
+
+   /**
+    * Retrieves the value associated with the key from the memcache server
+    *
+    * @param  string   $key     Key to retrieve
+    *
+    * @return  mixed
+    * @access  public
+    */
+   function get ($key)
+   {
+      $fname = 'memcached::get';
+      wfProfileIn( $fname );
+
+      if (!$this->_active) {
+	 wfProfileOut( $fname );
+         return false;
+      }
+
+      $sock = $this->get_sock($key);
+
+      if (!is_resource($sock)) {
+	 wfProfileOut( $fname );
+         return false;
+      }
+
+      @$this->stats['get']++;
+
+      $cmd = "get $key\r\n";
+      if (!$this->_safe_fwrite($sock, $cmd, strlen($cmd)))
+      {
+         $this->_dead_sock($sock);
+	 wfProfileOut( $fname );
+         return false;
+      }
+
+      $val = array();
+      $this->_load_items($sock, $val);
+
+      if ($this->_debug)
+         foreach ($val as $k => $v)
+            $this->_debugprint(@sprintf("MemCache: sock %s got %s => %s\r\n", serialize($sock), $k, $v));
+
+      wfProfileOut( $fname );
+      return @$val[$key];
+   }
+
+   // }}}
+   // {{{ get_multi()
+
+   /**
+    * Get multiple keys from the server(s)
+    *
+    * @param   array    $keys    Keys to retrieve
+    *
+    * @return  array
+    * @access  public
+    */
+   function get_multi ($keys)
+   {
+      if (!$this->_active)
+         return false;
+
+      $this->stats['get_multi']++;
+      $sock_keys = array();
+      
+      foreach ($keys as $key)
+      {
+         $sock = $this->get_sock($key);
+         if (!is_resource($sock)) continue;
+         $key = is_array($key) ? $key[1] : $key;
+         if (!isset($sock_keys[$sock]))
+         {
+            $sock_keys[$sock] = array();
+            $socks[] = $sock;
+         }
+         $sock_keys[$sock][] = $key;
+      }
+
+      // Send out the requests
+      foreach ($socks as $sock)
+      {
+         $cmd = "get";
+         foreach ($sock_keys[$sock] as $key)
+         {
+            $cmd .= " ". $key;
+         }
+         $cmd .= "\r\n";
+
+         if ($this->_safe_fwrite($sock, $cmd, strlen($cmd)))
+         {
+            $gather[] = $sock;
+         } else
+         {
+            $this->_dead_sock($sock);
+         }
+      }
+
+      // Parse responses
+      $val = array();
+      foreach ($gather as $sock)
+      {
+         $this->_load_items($sock, $val);
+      }
+
+      if ($this->_debug)
+         foreach ($val as $k => $v)
+            $this->_debugprint(sprintf("MemCache: got %s => %s\r\n", $k, $v));
+
+      return $val;
+   }
+
+   // }}}
+   // {{{ incr()
+
+   /**
+    * Increments $key (optionally) by $amt
+    *
+    * @param   string   $key     Key to increment
+    * @param   interger $amt     (optional) amount to increment
+    *
+    * @return  interger New key value?
+    * @access  public
+    */
+   function incr ($key, $amt=1)
+   {
+      return $this->_incrdecr('incr', $key, $amt);
+   }
+
+   // }}}
+   // {{{ replace()
+
+   /**
+    * Overwrites an existing value for key; only works if key is already set
+    *
+    * @param   string   $key     Key to set value as
+    * @param   mixed    $value   Value to store
+    * @param   interger $exp     (optional) Experiation time
+    *
+    * @return  boolean
+    * @access  public
+    */
+   function replace ($key, $value, $exp=0)
+   {
+      return $this->_set('replace', $key, $value, $exp);
+   }
+
+   // }}}
+   // {{{ run_command()
+
+   /**
+    * Passes through $cmd to the memcache server connected by $sock; returns
+    * output as an array (null array if no output)
+    *
+    * NOTE: due to a possible bug in how PHP reads while using fgets(), each
+    *       line may not be terminated by a \r\n.  More specifically, my testing
+    *       has shown that, on FreeBSD at least, each line is terminated only
+    *       with a \n.  This is with the PHP flag auto_detect_line_endings set
+    *       to falase (the default).
+    *
+    * @param   resource $sock    Socket to send command on
+    * @param   string   $cmd     Command to run
+    *
+    * @return  array    Output array
+    * @access  public
+    */
+   function run_command ($sock, $cmd)
+   {
+      if (!is_resource($sock))
+         return array();
+
+      if (!$this->_safe_fwrite($sock, $cmd, strlen($cmd)))
+         return array();
+
+      while (true)
+      {
+         $res = fgets($sock);
+         $ret[] = $res;
+         if (preg_match('/^END/', $res))
+            break;
+         if (strlen($res) == 0)
+            break;
+      }
+      return $ret;
+   }
+
+   // }}}
+   // {{{ set()
+
+   /**
+    * Unconditionally sets a key to a given value in the memcache.  Returns true
+    * if set successfully.
+    *
+    * @param   string   $key     Key to set value as
+    * @param   mixed    $value   Value to set
+    * @param   interger $exp     (optional) Experiation time
+    *
+    * @return  boolean  TRUE on success
+    * @access  public
+    */
+   function set ($key, $value, $exp=0)
+   {
+      return $this->_set('set', $key, $value, $exp);
+   }
+
+   // }}}
+   // {{{ set_compress_threshold()
+
+   /**
+    * Sets the compression threshold
+    *
+    * @param   interger $thresh  Threshold to compress if larger than
+    *
+    * @access  public
+    */
+   function set_compress_threshold ($thresh)
+   {
+      $this->_compress_threshold = $thresh;
+   }
+
+   // }}}
+   // {{{ set_debug()
+
+   /**
+    * Sets the debug flag
+    *
+    * @param   boolean  $dbg     TRUE for debugging, FALSE otherwise
+    *
+    * @access  public
+    *
+    * @see     memcahced::memcached
+    */
+   function set_debug ($dbg)
+   {
+      $this->_debug = $dbg;
+   }
+
+   // }}}
+   // {{{ set_servers()
+
+   /**
+    * Sets the server list to distribute key gets and puts between
+    *
+    * @param   array    $list    Array of servers to connect to
+    *
+    * @access  public
+    *
+    * @see     memcached::memcached()
+    */
+   function set_servers ($list)
+   {
+      $this->_servers = $list;
+      $this->_active = count($list);
+      $this->_buckets = null;
+      $this->_bucketcount = 0;
+
+      $this->_single_sock = null;
+      if ($this->_active == 1)
+         $this->_single_sock = $this->_servers[0];
+   }
+
+   /**
+    * Sets the timeout for new connections
+    *
+    * @param   integer  $seconds Number of seconds
+    * @param   integer  $microseconds  Number of microseconds
+    *
+    * @access  public
+    */
+   function set_timeout ($seconds, $microseconds)
+   {
+      $this->_timeout_seconds = $seconds;
+      $this->_timeout_microseconds = $microseconds;
+   }
+
+   // }}}
+   // }}}
+   // {{{ private methods
+   // {{{ _close_sock()
+
+   /**
+    * Close the specified socket
+    *
+    * @param   string   $sock    Socket to close
+    *
+    * @access  private
+    */
+   function _close_sock ($sock)
+   {
+      $host = array_search($sock, $this->_cache_sock);
+      fclose($this->_cache_sock[$host]);
+      unset($this->_cache_sock[$host]);
+   }
+
+   // }}}
+   // {{{ _connect_sock()
+
+   /**
+    * Connects $sock to $host, timing out after $timeout
+    *
+    * @param   interger $sock    Socket to connect
+    * @param   string   $host    Host:IP to connect to
+    *
+    * @return  boolean
+    * @access  private
+    */
+   function _connect_sock (&$sock, $host)
+   {
+      list ($ip, $port) = explode(":", $host);
+      $sock = false;
+      $timeout = $this->_connect_timeout;
+      $errno = $errstr = null;
+      for ($i = 0; !$sock && $i < $this->_connect_attempts; $i++) {
+         if ($i > 0) {
+            # Sleep until the timeout, in case it failed fast
+            $elapsed = microtime(true) - $t;
+            if ( $elapsed < $timeout ) {
+               usleep(($timeout - $elapsed) * 1e6);
+            }
+            $timeout *= 2;
+         }
+         $t = microtime(true);
+         if ($this->_persistant == 1)
+         {
+            $sock = @pfsockopen($ip, $port, $errno, $errstr, $timeout);
+         } else
+         {
+            $sock = @fsockopen($ip, $port, $errno, $errstr, $timeout);
+         }
+      }
+      if (!$sock) {
+         if ($this->_debug)
+            $this->_debugprint( "Error connecting to $host: $errstr\n" );
+         return false;
+      }
+
+      // Initialise timeout
+      stream_set_timeout($sock, $this->_timeout_seconds, $this->_timeout_microseconds);
+
+      return true;
+   }
+
+   // }}}
+   // {{{ _dead_sock()
+
+   /**
+    * Marks a host as dead until 30-40 seconds in the future
+    *
+    * @param   string   $sock    Socket to mark as dead
+    *
+    * @access  private
+    */
+   function _dead_sock ($sock)
+   {
+      $host = array_search($sock, $this->_cache_sock);
+      @list ($ip, /* $port */) = explode(":", $host);
+      $this->_host_dead[$ip] = time() + 30 + intval(rand(0, 10));
+      $this->_host_dead[$host] = $this->_host_dead[$ip];
+      unset($this->_cache_sock[$host]);
+   }
+
+   // }}}
+   // {{{ get_sock()
+
+   /**
+    * get_sock
+    *
+    * @param   string   $key     Key to retrieve value for;
+    *
+    * @return  mixed    resource on success, false on failure
+    * @access  private
+    */
+   function get_sock ($key)
+   {
+      if (!$this->_active)
+         return false;
+
+      if ($this->_single_sock !== null) {
+         $this->_flush_read_buffer($this->_single_sock);
+         return $this->sock_to_host($this->_single_sock);
+      }
+
+      $hv = is_array($key) ? intval($key[0]) : $this->_hashfunc($key);
+
+      if ($this->_buckets === null)
+      {
+         foreach ($this->_servers as $v)
+         {
+            if (is_array($v))
+            {
+               for ($i=0; $i<$v[1]; $i++)
+                  $bu[] = $v[0];
+            } else
+            {
+               $bu[] = $v;
+            }
+         }
+         $this->_buckets = $bu;
+         $this->_bucketcount = count($bu);
+      }
+
+      $realkey = is_array($key) ? $key[1] : $key;
+      for ($tries = 0; $tries<20; $tries++)
+      {
+         $host = $this->_buckets[$hv % $this->_bucketcount];
+         $sock = $this->sock_to_host($host);
+         if (is_resource($sock)) {
+            $this->_flush_read_buffer($sock);
+            return $sock;
+         }
+         $hv += $this->_hashfunc($tries . $realkey);
+      }
+
+      return false;
+   }
+
+   // }}}
+   // {{{ _hashfunc()
+
+   /**
+    * Creates a hash interger based on the $key
+    *
+    * @param   string   $key     Key to hash
+    *
+    * @return  interger Hash value
+    * @access  private
+    */
+   function _hashfunc ($key)
+   {
+      # Hash function must on [0,0x7ffffff]
+      # We take the first 31 bits of the MD5 hash, which unlike the hash
+      # function used in a previous version of this client, works
+      return hexdec(substr(md5($key),0,8)) & 0x7fffffff;
+   }
+
+   // }}}
+   // {{{ _incrdecr()
+
+   /**
+    * Perform increment/decriment on $key
+    *
+    * @param   string   $cmd     Command to perform
+    * @param   string   $key     Key to perform it on
+    * @param   interger $amt     Amount to adjust
+    *
+    * @return  interger    New value of $key
+    * @access  private
+    */
+   function _incrdecr ($cmd, $key, $amt=1)
+   {
+      if (!$this->_active)
+         return null;
+
+      $sock = $this->get_sock($key);
+      if (!is_resource($sock))
+         return null;
+
+      $key = is_array($key) ? $key[1] : $key;
+      @$this->stats[$cmd]++;
+      if (!$this->_safe_fwrite($sock, "$cmd $key $amt\r\n"))
+         return $this->_dead_sock($sock);
+
+      stream_set_timeout($sock, 1, 0);
+      $line = fgets($sock);
+      $match = array();
+      if (!preg_match('/^(\d+)/', $line, $match))
+         return null;
+      return $match[1];
+   }
+
+   // }}}
+   // {{{ _load_items()
+
+   /**
+    * Load items into $ret from $sock
+    *
+    * @param   resource $sock    Socket to read from
+    * @param   array    $ret     Returned values
+    *
+    * @access  private
+    */
+   function _load_items ($sock, &$ret)
+   {
+      while (1)
+      {
+         $decl = fgets($sock);
+         if ($decl == "END\r\n")
+         {
+            return true;
+         } elseif (preg_match('/^VALUE (\S+) (\d+) (\d+)\r\n$/', $decl, $match))
+         {
+            list($rkey, $flags, $len) = array($match[1], $match[2], $match[3]);
+            $bneed = $len+2;
+            $offset = 0;
+
+            while ($bneed > 0)
+            {
+               $data = fread($sock, $bneed);
+               $n = strlen($data);
+               if ($n == 0)
+                  break;
+               $offset += $n;
+               $bneed -= $n;
+               @$ret[$rkey] .= $data;
+            }
+
+            if ($offset != $len+2)
+            {
+               // Something is borked!
+               if ($this->_debug)
+                  $this->_debugprint(sprintf("Something is borked!  key %s expecting %d got %d length\n", $rkey, $len+2, $offset));
+
+               unset($ret[$rkey]);
+               $this->_close_sock($sock);
+               return false;
+            }
+
+            if ($this->_have_zlib && $flags & MEMCACHE_COMPRESSED)
+               $ret[$rkey] = gzuncompress($ret[$rkey]);
+
+            $ret[$rkey] = rtrim($ret[$rkey]);
+
+            if ($flags & MEMCACHE_SERIALIZED)
+               $ret[$rkey] = unserialize($ret[$rkey]);
+
+         } else
+         {
+            $this->_debugprint("Error parsing memcached response\n");
+            return 0;
+         }
+      }
+   }
+
+   // }}}
+   // {{{ _set()
+
+   /**
+    * Performs the requested storage operation to the memcache server
+    *
+    * @param   string   $cmd     Command to perform
+    * @param   string   $key     Key to act on
+    * @param   mixed    $val     What we need to store
+    * @param   interger $exp     When it should expire
+    *
+    * @return  boolean
+    * @access  private
+    */
+   function _set ($cmd, $key, $val, $exp)
+   {
+      if (!$this->_active)
+         return false;
+
+      $sock = $this->get_sock($key);
+      if (!is_resource($sock))
+         return false;
+
+      @$this->stats[$cmd]++;
+
+      $flags = 0;
+
+      if (!is_scalar($val))
+      {
+         $val = serialize($val);
+         $flags |= MEMCACHE_SERIALIZED;
+         if ($this->_debug)
+            $this->_debugprint(sprintf("client: serializing data as it is not scalar\n"));
+      }
+
+      $len = strlen($val);
+
+      if ($this->_have_zlib && $this->_compress_enable &&
+          $this->_compress_threshold && $len >= $this->_compress_threshold)
+      {
+         $c_val = gzcompress($val, 9);
+         $c_len = strlen($c_val);
+
+         if ($c_len < $len*(1 - COMPRESSION_SAVINGS))
+         {
+            if ($this->_debug)
+               $this->_debugprint(sprintf("client: compressing data; was %d bytes is now %d bytes\n", $len, $c_len));
+            $val = $c_val;
+            $len = $c_len;
+            $flags |= MEMCACHE_COMPRESSED;
+         }
+      }
+      if (!$this->_safe_fwrite($sock, "$cmd $key $flags $exp $len\r\n$val\r\n"))
+         return $this->_dead_sock($sock);
+
+      $line = trim(fgets($sock));
+
+      if ($this->_debug)
+      {
+         if ($flags & MEMCACHE_COMPRESSED)
+            $val = 'compressed data';
+         $this->_debugprint(sprintf("MemCache: %s %s => %s (%s)\n", $cmd, $key, $val, $line));
+      }
+      if ($line == "STORED")
+         return true;
+      return false;
+   }
+
+   // }}}
+   // {{{ sock_to_host()
+
+   /**
+    * Returns the socket for the host
+    *
+    * @param   string   $host    Host:IP to get socket for
+    *
+    * @return  mixed    IO Stream or false
+    * @access  private
+    */
+   function sock_to_host ($host)
+   {
+      if (isset($this->_cache_sock[$host]))
+         return $this->_cache_sock[$host];
+
+      $sock = null;
+      $now = time();
+      list ($ip, /* $port */) = explode (":", $host);
+      if (isset($this->_host_dead[$host]) && $this->_host_dead[$host] > $now ||
+          isset($this->_host_dead[$ip]) && $this->_host_dead[$ip] > $now)
+         return null;
+
+      if (!$this->_connect_sock($sock, $host))
+         return $this->_dead_sock($host);
+
+      // Do not buffer writes
+      stream_set_write_buffer($sock, 0);
+
+      $this->_cache_sock[$host] = $sock;
+
+      return $this->_cache_sock[$host];
+   }
+
+   function _debugprint($str){
+      print($str);
+   }
+
+   /**
+    * Write to a stream, timing out after the correct amount of time
+    *
+    * @return bool false on failure, true on success
+    */
+    /*
+   function _safe_fwrite($f, $buf, $len = false) {
+      stream_set_blocking($f, 0);
+
+      if ($len === false) {
+         wfDebug("Writing " . strlen( $buf ) . " bytes\n");
+         $bytesWritten = fwrite($f, $buf);
+      } else {
+         wfDebug("Writing $len bytes\n");
+         $bytesWritten = fwrite($f, $buf, $len);
+      }
+      $n = stream_select($r=NULL, $w = array($f), $e = NULL, 10, 0);
+      #   $this->_timeout_seconds, $this->_timeout_microseconds);
+
+      wfDebug("stream_select returned $n\n");
+      stream_set_blocking($f, 1);
+      return $n == 1;
+      return $bytesWritten;
+   }*/
+
+   /**
+    * Original behaviour
+    */
+   function _safe_fwrite($f, $buf, $len = false) {
+      if ($len === false) {
+         $bytesWritten = fwrite($f, $buf);
+      } else {
+         $bytesWritten = fwrite($f, $buf, $len);
+      }
+      return $bytesWritten;
+   }
+
+   /**
+    * Flush the read buffer of a stream
+    */
+   function _flush_read_buffer($f) {
+      if (!is_resource($f)) {
+         return;
+      }
+      $n = stream_select($r=array($f), $w = NULL, $e = NULL, 0, 0);
+      while ($n == 1 && !feof($f)) {
+         fread($f, 1024);
+         $n = stream_select($r=array($f), $w = NULL, $e = NULL, 0, 0);
+      }
+   }
+
+   // }}}
+   // }}}
+   // }}}
+}
+
+// vim: sts=3 sw=3 et
+
+// }}}
+?>
Index: /MediaWiki/branches/1.11/includes/mime.info
===================================================================
--- /MediaWiki/branches/1.11/includes/mime.info	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/mime.info	(revision 1280)
@@ -0,0 +1,77 @@
+#Mime type info file.
+#the first mime type in each line is the "main" mime type,
+#the others are aliases for this type
+#the media type is given in upper case and square brackets, 
+#like [BITMAP], and must indicate a media type as defined by
+#the MEDIATYPE_xxx constants in Defines.php
+
+
+image/gif	[BITMAP]
+image/png image/x-png	[BITMAP]
+image/ief	[BITMAP]
+image/jpeg	[BITMAP]
+image/xbm	[BITMAP]
+image/tiff	[BITMAP]
+image/x-icon	[BITMAP]
+image/x-rgb	[BITMAP]
+image/x-portable-pixmap		[BITMAP]
+image/x-portable-graymap image/x-portable-greymap	[BITMAP]
+image/x-bmp image/bmp application/x-bmp application/bmp	[BITMAP]
+image/x-photoshop image/psd image/x-psd image/photoshop	[BITMAP]
+ 
+image/svg+xml application/svg+xml application/svg image/svg	[DRAWING]
+application/postscript	[DRAWING]
+application/x-latex	[DRAWING]
+application/x-tex	[DRAWING]
+
+
+audio/mp3 audio/mpeg3 audio/mpeg	[AUDIO]
+audio/wav audio/x-wav audio/wave	[AUDIO]
+audio/midi audio/mid	[AUDIO]
+audio/basic		[AUDIO]
+audio/x-aiff		[AUDIO]
+audio/x-pn-realaudio	[AUDIO]
+audio/x-realaudio	[AUDIO]
+
+video/mpeg application/mpeg	[VIDEO]
+video/ogg			[VIDEO]
+video/x-sgi-video		[VIDEO]
+video/x-flv			[VIDEO]
+
+application/ogg application/x-ogg audio/ogg audio/x-ogg video/ogg video/x-ogg		[MULTIMEDIA]
+
+application/x-shockwave-flash	[MULTIMEDIA]
+audio/x-pn-realaudio-plugin	[MULTIMEDIA]
+model/iges	[MULTIMEDIA]
+model/mesh	[MULTIMEDIA]
+model/vrml	[MULTIMEDIA]
+video/quicktime	[MULTIMEDIA]
+video/x-msvideo	[MULTIMEDIA]
+
+text/plain	[TEXT]
+text/html application/xhtml+xml	[TEXT]
+application/xml text/xml	[TEXT]
+text	[TEXT]
+
+application/zip application/x-zip	[ARCHIVE]
+application/x-gzip	[ARCHIVE]
+application/x-bzip	[ARCHIVE]
+application/x-tar	[ARCHIVE]
+application/x-stuffit	[ARCHIVE]
+
+
+text/javascript application/x-javascript application/x-ecmascript text/ecmascript	[EXECUTABLE]
+application/x-bash	[EXECUTABLE]
+application/x-sh	[EXECUTABLE]
+application/x-csh	[EXECUTABLE]
+application/x-tcsh	[EXECUTABLE]
+application/x-tcl	[EXECUTABLE]
+application/x-perl	[EXECUTABLE]
+application/x-python	[EXECUTABLE]
+
+application/pdf application/acrobat	[OFFICE]
+application/msword		[OFFICE]
+application/vnd.ms-excel	[OFFICE]
+application/vnd.ms-powerpoint	[OFFICE]
+application/x-director		[OFFICE]
+text/rtf			[OFFICE]
Index: /MediaWiki/branches/1.11/includes/mime.types
===================================================================
--- /MediaWiki/branches/1.11/includes/mime.types	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/mime.types	(revision 1280)
@@ -0,0 +1,118 @@
+application/andrew-inset ez
+application/mac-binhex40 hqx
+application/mac-compactpro cpt
+application/mathml+xml mathml
+application/msword doc
+application/octet-stream bin dms lha lzh exe class so dll
+application/oda oda
+application/ogg ogg ogm
+application/pdf pdf
+application/postscript ai eps ps
+application/rdf+xml rdf
+application/smil smi smil
+application/srgs gram
+application/srgs+xml grxml
+application/vnd.mif mif
+application/vnd.ms-excel xls
+application/vnd.ms-powerpoint ppt
+application/vnd.wap.wbxml wbxml
+application/vnd.wap.wmlc wmlc
+application/vnd.wap.wmlscriptc wmlsc
+application/voicexml+xml vxml
+application/x-bcpio bcpio
+application/x-bzip gz bz2
+application/x-cdlink vcd
+application/x-chess-pgn pgn
+application/x-cpio cpio
+application/x-csh csh
+application/x-director dcr dir dxr
+application/x-dvi dvi
+application/x-futuresplash spl
+application/x-gtar gtar tar
+application/x-gzip gz
+application/x-hdf hdf
+application/x-jar jar
+application/x-javascript js
+application/x-koan skp skd skt skm
+application/x-latex latex
+application/x-netcdf nc cdf
+application/x-sh sh
+application/x-shar shar
+application/x-shockwave-flash swf
+application/x-stuffit sit
+application/x-sv4cpio sv4cpio
+application/x-sv4crc sv4crc
+application/x-tar tar
+application/x-tcl tcl
+application/x-tex tex
+application/x-texinfo texinfo texi
+application/x-troff t tr roff
+application/x-troff-man man
+application/x-troff-me me
+application/x-troff-ms ms
+application/x-ustar ustar
+application/x-wais-source src
+application/x-xpinstall xpi
+application/xhtml+xml xhtml xht
+application/xslt+xml xslt
+application/xml xml xsl
+application/xml-dtd dtd
+application/zip zip jar xpi  sxc stc  sxd std   sxi sti   sxm stm   sxw stw  
+audio/basic au snd
+audio/midi mid midi kar
+audio/mpeg mpga mp2 mp3
+audio/ogg ogg 
+audio/x-aiff aif aiff aifc
+audio/x-mpegurl m3u
+audio/x-ogg ogg 
+audio/x-pn-realaudio ram rm
+audio/x-pn-realaudio-plugin rpm
+audio/x-realaudio ra
+audio/x-wav wav
+chemical/x-pdb pdb
+chemical/x-xyz xyz
+image/bmp bmp
+image/cgm cgm
+image/gif gif
+image/ief ief
+image/jpeg jpeg jpg jpe
+image/png png
+image/svg+xml svg
+image/tiff tiff tif
+image/vnd.djvu djvu djv
+image/vnd.wap.wbmp wbmp
+image/x-cmu-raster ras
+image/x-icon ico
+image/x-portable-anymap pnm
+image/x-portable-bitmap pbm
+image/x-portable-graymap pgm
+image/x-portable-pixmap ppm
+image/x-rgb rgb
+image/x-photoshop psd
+image/x-xbitmap xbm
+image/x-xpixmap xpm
+image/x-xwindowdump xwd
+model/iges igs iges
+model/mesh msh mesh silo
+model/vrml wrl vrml
+text/calendar ics ifb
+text/css css
+text/html html htm
+text/plain txt
+text/richtext rtx
+text/rtf rtf
+text/sgml sgml sgm
+text/tab-separated-values tsv
+text/vnd.wap.wml wml
+text/vnd.wap.wmlscript wmls
+text/xml xml xsl xslt rss rdf
+text/x-setext etx
+video/mpeg mpeg mpg mpe
+video/ogg ogm ogg
+video/quicktime qt mov
+video/vnd.mpegurl mxu
+video/x-flv flv
+video/x-msvideo avi
+video/x-ogg ogm ogg
+video/x-sgi-movie movie
+x-conference/x-cooltalk ice
Index: /MediaWiki/branches/1.11/includes/normal/CleanUpTest.php
===================================================================
--- /MediaWiki/branches/1.11/includes/normal/CleanUpTest.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/normal/CleanUpTest.php	(revision 1280)
@@ -0,0 +1,413 @@
+<?php
+# Copyright (C) 2004 Brion Vibber <brion@pobox.com>
+# http://www.mediawiki.org/
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+# http://www.gnu.org/copyleft/gpl.html
+
+
+if( php_sapi_name() != 'cli' ) {
+	die( "Run me from the command line please.\n" );
+}
+
+/** */
+if( isset( $_SERVER['argv'] ) && in_array( '--icu', $_SERVER['argv'] ) ) {
+	dl( 'php_utfnormal.so' );
+}
+
+#ini_set( 'memory_limit', '40M' );
+
+require_once 'PHPUnit/Framework.php';
+require_once 'PHPUnit/TextUI/TestRunner.php';
+
+require_once 'UtfNormal.php';
+
+/**
+ * Additional tests for UtfNormal::cleanUp() function, inclusion
+ * regression checks for known problems.
+ * Requires PHPUnit.
+ *
+ * @addtogroup UtfNormal
+ * @private
+ */
+class CleanUpTest extends PHPUnit_Framework_TestCase {
+	/** @todo document */
+	function setUp() {
+	}
+
+	/** @todo document */
+	function tearDown() {
+	}
+
+	/** @todo document */
+	function testAscii() {
+		$text = 'This is plain ASCII text.';
+		$this->assertEquals( $text, UtfNormal::cleanUp( $text ) );
+	}
+
+	/** @todo document */
+	function testNull() {
+		$text = "a \x00 null";
+		$expect = "a \xef\xbf\xbd null";
+		$this->assertEquals(
+			bin2hex( $expect ),
+			bin2hex( UtfNormal::cleanUp( $text ) ) );
+	}
+
+	/** @todo document */
+	function testLatin() {
+		$text = "L'\xc3\xa9cole";
+		$this->assertEquals( $text, UtfNormal::cleanUp( $text ) );
+	}
+
+	/** @todo document */
+	function testLatinNormal() {
+		$text = "L'e\xcc\x81cole";
+		$expect = "L'\xc3\xa9cole";
+		$this->assertEquals( $expect, UtfNormal::cleanUp( $text ) );
+	}
+
+	/**
+	 * This test is *very* expensive!
+	 * @todo document
+	 */
+	function XtestAllChars() {
+		$rep = UTF8_REPLACEMENT;
+		global $utfCanonicalComp, $utfCanonicalDecomp;
+		for( $i = 0x0; $i < UNICODE_MAX; $i++ ) {
+			$char = codepointToUtf8( $i );
+			$clean = UtfNormal::cleanUp( $char );
+			$x = sprintf( "%04X", $i );
+			if( $i % 0x1000 == 0 ) echo "U+$x\n";
+			if( $i == 0x0009 ||
+			    $i == 0x000a ||
+			    $i == 0x000d ||
+			    ($i > 0x001f && $i < UNICODE_SURROGATE_FIRST) ||
+			    ($i > UNICODE_SURROGATE_LAST && $i < 0xfffe ) ||
+			    ($i > 0xffff && $i <= UNICODE_MAX ) ) {
+				if( isset( $utfCanonicalComp[$char] ) || isset( $utfCanonicalDecomp[$char] ) ) {
+				    $comp = UtfNormal::NFC( $char );
+					$this->assertEquals(
+						bin2hex( $comp ),
+						bin2hex( $clean ),
+						"U+$x should be decomposed" );
+				} else {
+					$this->assertEquals(
+						bin2hex( $char ),
+						bin2hex( $clean ),
+						"U+$x should be intact" );
+				}
+			} else {
+				$this->assertEquals( bin2hex( $rep ), bin2hex( $clean ), $x );
+			}
+		}
+	}
+
+	/** @todo document */
+	function testAllBytes() {
+		$this->doTestBytes( '', '' );
+		$this->doTestBytes( 'x', '' );
+		$this->doTestBytes( '', 'x' );
+		$this->doTestBytes( 'x', 'x' );
+	}
+
+	/** @todo document */
+	function doTestBytes( $head, $tail ) {
+		for( $i = 0x0; $i < 256; $i++ ) {
+			$char = $head . chr( $i ) . $tail;
+			$clean = UtfNormal::cleanUp( $char );
+			$x = sprintf( "%02X", $i );
+			if( $i == 0x0009 ||
+			    $i == 0x000a ||
+			    $i == 0x000d ||
+			    ($i > 0x001f && $i < 0x80) ) {
+				$this->assertEquals(
+					bin2hex( $char ),
+					bin2hex( $clean ),
+					"ASCII byte $x should be intact" );
+				if( $char != $clean ) return;
+			} else {
+				$norm = $head . UTF8_REPLACEMENT . $tail;
+				$this->assertEquals(
+					bin2hex( $norm ),
+					bin2hex( $clean ),
+					"Forbidden byte $x should be rejected" );
+				if( $norm != $clean ) return;
+			}
+		}
+	}
+
+	/** @todo document */
+	function testDoubleBytes() {
+		$this->doTestDoubleBytes( '', '' );
+		$this->doTestDoubleBytes( 'x', '' );
+		$this->doTestDoubleBytes( '', 'x' );
+		$this->doTestDoubleBytes( 'x', 'x' );
+	}
+
+	/**
+	 * @todo document
+	 */
+	function doTestDoubleBytes( $head, $tail ) {
+		for( $first = 0xc0; $first < 0x100; $first++ ) {
+			for( $second = 0x80; $second < 0x100; $second++ ) {
+				$char = $head . chr( $first ) . chr( $second ) . $tail;
+				$clean = UtfNormal::cleanUp( $char );
+				$x = sprintf( "%02X,%02X", $first, $second );
+				if( $first > 0xc1 &&
+				    $first < 0xe0 &&
+				    $second < 0xc0 ) {
+				    $norm = UtfNormal::NFC( $char );
+					$this->assertEquals(
+						bin2hex( $norm ),
+						bin2hex( $clean ),
+						"Pair $x should be intact" );
+				    if( $norm != $clean ) return;
+				} elseif( $first > 0xfd || $second > 0xbf ) {
+					# fe and ff are not legal head bytes -- expect two replacement chars
+					$norm = $head . UTF8_REPLACEMENT . UTF8_REPLACEMENT . $tail;
+					$this->assertEquals(
+						bin2hex( $norm ),
+						bin2hex( $clean ),
+						"Forbidden pair $x should be rejected" );
+					if( $norm != $clean ) return;
+				} else {
+					$norm = $head . UTF8_REPLACEMENT . $tail;
+					$this->assertEquals(
+						bin2hex( $norm ),
+						bin2hex( $clean ),
+						"Forbidden pair $x should be rejected" );
+					if( $norm != $clean ) return;
+				}
+			}
+		}
+	}
+
+	/** @todo document */
+	function testTripleBytes() {
+		$this->doTestTripleBytes( '', '' );
+		$this->doTestTripleBytes( 'x', '' );
+		$this->doTestTripleBytes( '', 'x' );
+		$this->doTestTripleBytes( 'x', 'x' );
+	}
+
+	/** @todo document */
+	function doTestTripleBytes( $head, $tail ) {
+		for( $first = 0xc0; $first < 0x100; $first++ ) {
+			for( $second = 0x80; $second < 0x100; $second++ ) {
+				#for( $third = 0x80; $third < 0x100; $third++ ) {
+				for( $third = 0x80; $third < 0x81; $third++ ) {
+					$char = $head . chr( $first ) . chr( $second ) . chr( $third ) . $tail;
+					$clean = UtfNormal::cleanUp( $char );
+					$x = sprintf( "%02X,%02X,%02X", $first, $second, $third );
+					if( $first >= 0xe0 &&
+						$first < 0xf0 &&
+						$second < 0xc0 &&
+						$third < 0xc0 ) {
+						if( $first == 0xe0 && $second < 0xa0 ) {
+							$this->assertEquals(
+								bin2hex( $head . UTF8_REPLACEMENT . $tail ),
+								bin2hex( $clean ),
+								"Overlong triplet $x should be rejected" );
+						} elseif( $first == 0xed &&
+							( chr( $first ) . chr( $second ) . chr( $third ))  >= UTF8_SURROGATE_FIRST ) {
+							$this->assertEquals(
+								bin2hex( $head . UTF8_REPLACEMENT . $tail ),
+								bin2hex( $clean ),
+								"Surrogate triplet $x should be rejected" );
+						} else {
+							$this->assertEquals(
+								bin2hex( UtfNormal::NFC( $char ) ),
+								bin2hex( $clean ),
+								"Triplet $x should be intact" );
+						}
+					} elseif( $first > 0xc1 && $first < 0xe0 && $second < 0xc0 ) {
+						$this->assertEquals(
+							bin2hex( UtfNormal::NFC( $head . chr( $first ) . chr( $second ) ) . UTF8_REPLACEMENT . $tail ),
+							bin2hex( $clean ),
+							"Valid 2-byte $x + broken tail" );
+					} elseif( $second > 0xc1 && $second < 0xe0 && $third < 0xc0 ) {
+						$this->assertEquals(
+							bin2hex( $head . UTF8_REPLACEMENT . UtfNormal::NFC( chr( $second ) . chr( $third ) . $tail ) ),
+							bin2hex( $clean ),
+							"Broken head + valid 2-byte $x" );
+					} elseif( ( $first > 0xfd || $second > 0xfd ) &&
+					            ( ( $second > 0xbf && $third > 0xbf ) ||
+					              ( $second < 0xc0 && $third < 0xc0 ) ||
+					              ( $second > 0xfd ) ||
+					              ( $third > 0xfd ) ) ) {
+						# fe and ff are not legal head bytes -- expect three replacement chars
+						$this->assertEquals(
+							bin2hex( $head . UTF8_REPLACEMENT . UTF8_REPLACEMENT . UTF8_REPLACEMENT . $tail ),
+							bin2hex( $clean ),
+							"Forbidden triplet $x should be rejected" );
+					} elseif( $first > 0xc2 && $second < 0xc0 && $third < 0xc0 ) {
+						$this->assertEquals(
+							bin2hex( $head . UTF8_REPLACEMENT . $tail ),
+							bin2hex( $clean ),
+							"Forbidden triplet $x should be rejected" );
+					} else {
+						$this->assertEquals(
+							bin2hex( $head . UTF8_REPLACEMENT . UTF8_REPLACEMENT . $tail ),
+							bin2hex( $clean ),
+							"Forbidden triplet $x should be rejected" );
+					}
+				}
+			}
+		}
+	}
+
+	/** @todo document */
+	function testChunkRegression() {
+		# Check for regression against a chunking bug
+		$text   = "\x46\x55\xb8" .
+		          "\xdc\x96" .
+		          "\xee" .
+		          "\xe7" .
+		          "\x44" .
+		          "\xaa" .
+		          "\x2f\x25";
+		$expect = "\x46\x55\xef\xbf\xbd" .
+		          "\xdc\x96" .
+		          "\xef\xbf\xbd" .
+		          "\xef\xbf\xbd" .
+		          "\x44" .
+		          "\xef\xbf\xbd" .
+		          "\x2f\x25";
+
+		$this->assertEquals(
+			bin2hex( $expect ),
+			bin2hex( UtfNormal::cleanUp( $text ) ) );
+	}
+
+	/** @todo document */
+	function testInterposeRegression() {
+		$text   = "\x4e\x30" .
+		          "\xb1" .		# bad tail
+		          "\x3a" .
+		          "\x92" .		# bad tail
+		          "\x62\x3a" .
+		          "\x84" .		# bad tail
+		          "\x43" .
+		          "\xc6" .		# bad head
+		          "\x3f" .
+		          "\x92" .		# bad tail
+		          "\xad" .		# bad tail
+		          "\x7d" .
+		          "\xd9\x95";
+
+		$expect = "\x4e\x30" .
+		          "\xef\xbf\xbd" .
+		          "\x3a" .
+		          "\xef\xbf\xbd" .
+		          "\x62\x3a" .
+		          "\xef\xbf\xbd" .
+		          "\x43" .
+		          "\xef\xbf\xbd" .
+		          "\x3f" .
+		          "\xef\xbf\xbd" .
+		          "\xef\xbf\xbd" .
+		          "\x7d" .
+		          "\xd9\x95";
+
+		$this->assertEquals(
+			bin2hex( $expect ),
+			bin2hex( UtfNormal::cleanUp( $text ) ) );
+	}
+
+	/** @todo document */
+	function testOverlongRegression() {
+		$text   = "\x67" .
+		          "\x1a" . # forbidden ascii
+		          "\xea" . # bad head
+		          "\xc1\xa6" . # overlong sequence
+		          "\xad" . # bad tail
+		          "\x1c" . # forbidden ascii
+		          "\xb0" . # bad tail
+		          "\x3c" .
+		          "\x9e";  # bad tail
+		$expect = "\x67" .
+		          "\xef\xbf\xbd" .
+		          "\xef\xbf\xbd" .
+		          "\xef\xbf\xbd" .
+		          "\xef\xbf\xbd" .
+		          "\xef\xbf\xbd" .
+		          "\xef\xbf\xbd" .
+		          "\x3c" .
+		          "\xef\xbf\xbd";
+		$this->assertEquals(
+			bin2hex( $expect ),
+			bin2hex( UtfNormal::cleanUp( $text ) ) );
+	}
+
+	/** @todo document */
+	function testSurrogateRegression() {
+		$text   = "\xed\xb4\x96" . # surrogate 0xDD16
+		          "\x83" . # bad tail
+		          "\xb4" . # bad tail
+		          "\xac";  # bad head
+		$expect = "\xef\xbf\xbd" .
+		          "\xef\xbf\xbd" .
+		          "\xef\xbf\xbd" .
+		          "\xef\xbf\xbd";
+		$this->assertEquals(
+			bin2hex( $expect ),
+			bin2hex( UtfNormal::cleanUp( $text ) ) );
+	}
+
+	/** @todo document */
+	function testBomRegression() {
+		$text   = "\xef\xbf\xbe" . # U+FFFE, illegal char
+		          "\xb2" . # bad tail
+		          "\xef" . # bad head
+		          "\x59";
+		$expect = "\xef\xbf\xbd" .
+		          "\xef\xbf\xbd" .
+		          "\xef\xbf\xbd" .
+		          "\x59";
+		$this->assertEquals(
+			bin2hex( $expect ),
+			bin2hex( UtfNormal::cleanUp( $text ) ) );
+	}
+
+	/** @todo document */
+	function testForbiddenRegression() {
+		$text   = "\xef\xbf\xbf"; # U+FFFF, illegal char
+		$expect = "\xef\xbf\xbd";
+		$this->assertEquals(
+			bin2hex( $expect ),
+			bin2hex( UtfNormal::cleanUp( $text ) ) );
+	}
+
+	/** @todo document */
+	function testHangulRegression() {
+		$text = "\xed\x9c\xaf" . # Hangul char
+				"\xe1\x87\x81";  # followed by another final jamo
+		$expect = $text;         # Should *not* change.
+		$this->assertEquals(
+			bin2hex( $expect ),
+			bin2hex( UtfNormal::cleanUp( $text ) ) );
+	}
+}
+
+
+$suite = new PHPUnit_Framework_TestSuite( 'CleanUpTest' );
+$result = PHPUnit_TextUI_TestRunner::run( $suite );
+
+if( !$result->wasSuccessful() ) {
+	exit( -1 );
+}
+exit( 0 );
+?>
Index: /MediaWiki/branches/1.11/includes/normal/Makefile
===================================================================
--- /MediaWiki/branches/1.11/includes/normal/Makefile	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/normal/Makefile	(revision 1280)
@@ -0,0 +1,82 @@
+.PHONY : all test testutf8 testclean icutest bench icubench clean distclean
+
+## Latest greatest version of Unicode
+## May cause confusion if running test suite from these files
+## when the data was generated from a previous version.
+#BASE=http://www.unicode.org/Public/UNIDATA
+
+# Explicitly using Unicode 5.0
+BASE=http://www.unicode.org/Public/5.0.0/ucd/
+
+# Can override to php-cli or php5 or whatevah
+PHP=php
+#PHP=php-cli
+
+# Some nice tool to grab URLs with
+FETCH=wget
+#FETCH=fetch
+
+all : UtfNormalData.inc
+
+UtfNormalData.inc : UtfNormalGenerate.php UtfNormalUtil.php UnicodeData.txt CompositionExclusions.txt NormalizationCorrections.txt DerivedNormalizationProps.txt
+	$(PHP) UtfNormalGenerate.php
+
+test : testutf8 testclean UtfNormalTest.php UtfNormalData.inc NormalizationTest.txt
+	$(PHP) UtfNormalTest.php
+
+testutf8 : Utf8Test.php UTF-8-test.txt
+	$(PHP) Utf8Test.php
+
+testclean : CleanUpTest.php
+	$(PHP) CleanUpTest.php
+
+bench : UtfNormalData.inc testdata/washington.txt testdata/berlin.txt testdata/tokyo.txt testdata/young.txt testdata/bulgakov.txt
+	$(PHP) UtfNormalBench.php
+
+icutest : UtfNormalData.inc NormalizationTest.txt
+	$(PHP) Utf8Test.php --icu
+	$(PHP) CleanUpTest.php --icu
+	$(PHP) UtfNormalTest.php --icu
+
+icubench : UtfNormalData.inc testdata/washington.txt testdata/berlin.txt testdata/tokyo.txt testdata/young.txt testdata/bulgakov.txt
+	$(PHP) UtfNormalBench.php --icu
+
+clean :
+	rm -f UtfNormalData.inc UtfNormalDataK.inc
+
+distclean : clean
+	rm -f CompositionExclusions.txt NormalizationTest.txt NormalizationCorrections.txt UnicodeData.txt DerivedNormalizationProps.txt UTF-8-test.txt
+
+# The Unicode data files...
+CompositionExclusions.txt :
+	$(FETCH) $(BASE)/CompositionExclusions.txt
+
+NormalizationTest.txt :
+	$(FETCH) $(BASE)/NormalizationTest.txt
+
+NormalizationCorrections.txt :
+	$(FETCH) $(BASE)/NormalizationCorrections.txt
+
+DerivedNormalizationProps.txt :
+	$(FETCH) $(BASE)/DerivedNormalizationProps.txt
+
+UnicodeData.txt :
+	$(FETCH) $(BASE)/UnicodeData.txt
+
+UTF-8-test.txt :
+	$(FETCH) http://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-test.txt
+
+testdata/berlin.txt :
+	mkdir -p testdata && wget -U MediaWiki/test -O testdata/berlin.txt "http://de.wikipedia.org/w/index.php?title=Berlin&oldid=2775712&action=raw"
+
+testdata/washington.txt :
+	mkdir -p testdata && wget -U MediaWiki/test -O testdata/washington.txt "http://en.wikipedia.org/w/index.php?title=Washington%2C_D.C.&oldid=6370218&action=raw"
+
+testdata/tokyo.txt :
+	mkdir -p testdata && wget -U MediaWiki/test -O testdata/tokyo.txt "http://ja.wikipedia.org/w/index.php?title=%E6%9D%B1%E4%BA%AC%E9%83%BD&oldid=940880&action=raw"
+
+testdata/young.txt :
+	mkdir -p testdata && wget -U MediaWiki/test -O testdata/young.txt "http://ko.wikipedia.org/w/index.php?title=%EC%9D%B4%EC%88%98%EC%98%81&oldid=627688&action=raw"
+
+testdata/bulgakov.txt :
+	mkdir -p testdata && wget -U MediaWiki/test -O testdata/bulgakov.txt "http://ru.wikipedia.org/w/index.php?title=%D0%91%D1%83%D0%BB%D0%B3%D0%B0%D0%BA%D0%BE%D0%B2%2C_%D0%A1%D0%B5%D1%80%D0%B3%D0%B5%D0%B9_%D0%9D%D0%B8%D0%BA%D0%BE%D0%BB%D0%B0%D0%B5%D0%B2%D0%B8%D1%87&oldid=17704&action=raw"
Index: /MediaWiki/branches/1.11/includes/normal/README
===================================================================
--- /MediaWiki/branches/1.11/includes/normal/README	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/normal/README	(revision 1280)
@@ -0,0 +1,59 @@
+This directory contains some Unicode normalization routines. These routines
+are meant to be reusable in other projects, so I'm not tying them to the
+MediaWiki utility functions.
+
+The main function to care about is UtfNormal::toNFC(); this will convert
+a given UTF-8 string to Normalization Form C if it's not already such.
+The function assumes that the input string is already valid UTF-8; if there
+are corrupt characters this may produce erroneous results.
+
+To also check for illegal characters, use UtfNormal::cleanUp(). This will
+strip illegal UTF-8 sequences and characters that are illegal in XML, and
+if necessary convert to normalization form C.
+
+Performance is kind of stinky in absolute terms, though it should be speedy
+on pure ASCII text. ;) On text that can be determined quickly to already be
+in NFC it's not too awful but it can quickly get uncomfortably slow,
+particularly for Korean text (the hangul decomposition/composition code is
+extra slow).
+
+
+== Regenerating data tables ==
+
+UtfNormalData.inc and UtfNormalDataK.inc are generated from the Unicode
+Character Database by the script UtfNormalGenerate.php. On a *nix system
+'make' should fetch the necessary files and regenerate it if the scripts
+have been changed or you remove it.
+
+
+== Testing ==
+
+'make test' will run the conformance test (UtfNormalTest.php), fetching the
+data from from the net if necessary. If it reports failure, something is
+going wrong!
+
+You may have to set up PHPUnit first.
+
+$ pear channel-discover pear.phpunit.de
+$ pear install phpunit/PHPUnit
+
+== Benchmarks ==
+
+Run 'make bench' to download some sample texts from Wikipedia and run some
+cheap benchmarks of some of the functions. Take all numbers with large
+grains of salt.
+
+
+== PHP module extension ==
+
+There's an experimental PHP extension module which wraps the ICU library's
+normalization functions. This is *MUCH* faster than doing this work in pure
+PHP code. This is in the 'normal' directory in MediaWiki's CVS extensions
+module. It is known to work with PHP 4.3.8 and 5.0.2 on Linux/x86 but hasn't
+been thoroughly tested on other configurations.
+
+If the php_normal.so module is loaded in php.ini, the normalization functions
+will automatically use it. If you can't (or don't want to) load it in php.ini,
+you may be able to load it using the dl() function before include()ing or
+require()ing UtfNormal.php, and it will be picked up.
+
Index: /MediaWiki/branches/1.11/includes/normal/RandomTest.php
===================================================================
--- /MediaWiki/branches/1.11/includes/normal/RandomTest.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/normal/RandomTest.php	(revision 1280)
@@ -0,0 +1,108 @@
+<?php
+# Copyright (C) 2004 Brion Vibber <brion@pobox.com>
+# http://www.mediawiki.org/
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+# http://www.gnu.org/copyleft/gpl.html
+
+/**
+ * Test feeds random 16-byte strings to both the pure PHP and ICU-based
+ * UtfNormal::cleanUp() code paths, and checks to see if there's a
+ * difference. Will run forever until it finds one or you kill it.
+ *
+ * @addtogroup UtfNormal
+ * @access private
+ */
+
+if( php_sapi_name() != 'cli' ) {
+	die( "Run me from the command line please.\n" );
+}
+
+/** */
+require_once( 'UtfNormal.php' );
+require_once( '../DifferenceEngine.php' );
+
+dl('php_utfnormal.so' );
+
+# mt_srand( 99999 );
+
+function randomString( $length, $nullOk, $ascii = false ) {
+	$out = '';
+	for( $i = 0; $i < $length; $i++ )
+		$out .= chr( mt_rand( $nullOk ? 0 : 1, $ascii ? 127 : 255 ) );
+	return $out;
+}
+
+/* Duplicate of the cleanUp() path for ICU usage */
+function donorm( $str ) {
+	# We exclude a few chars that ICU would not.
+	$str = preg_replace( '/[\x00-\x08\x0b\x0c\x0e-\x1f]/', UTF8_REPLACEMENT, $str );
+	$str = str_replace( UTF8_FFFE, UTF8_REPLACEMENT, $str );
+	$str = str_replace( UTF8_FFFF, UTF8_REPLACEMENT, $str );
+
+	# UnicodeString constructor fails if the string ends with a head byte.
+	# Add a junk char at the end, we'll strip it off
+	return rtrim( utf8_normalize( $str . "\x01", UNORM_NFC ), "\x01" );
+}
+
+function wfMsg($x) {
+	return $x;
+}
+
+function showDiffs( $a, $b ) {
+	$ota = explode( "\n", str_replace( "\r\n", "\n", $a ) );
+	$nta = explode( "\n", str_replace( "\r\n", "\n", $b ) );
+
+	$diffs = new Diff( $ota, $nta );
+	$formatter = new TableDiffFormatter();
+	$funky = $formatter->format( $diffs );
+	$matches = array();
+	preg_match_all( '/<(?:ins|del) class="diffchange">(.*?)<\/(?:ins|del)>/', $funky, $matches );
+	foreach( $matches[1] as $bit ) {
+		$hex = bin2hex( $bit );
+		echo "\t$hex\n";
+	}
+}
+
+$size = 16;
+$n = 0;
+while( true ) {
+	$n++;
+	echo "$n\n";
+
+	$str = randomString( $size, true);
+	$clean = UtfNormal::cleanUp( $str );
+	$norm = donorm( $str );
+
+	echo strlen( $clean ) . ", " . strlen( $norm );
+	if( $clean == $norm ) {
+		echo " (match)\n";
+	} else {
+		echo " (FAIL)\n";
+		echo "\traw: " . bin2hex( $str ) . "\n" .
+			 "\tphp: " . bin2hex( $clean ) . "\n" .
+			 "\ticu: " . bin2hex( $norm ) . "\n";
+		echo "\n\tdiffs:\n";
+		showDiffs( $clean, $norm );
+		die();
+	}
+
+
+	$str = '';
+	$clean = '';
+	$norm = '';
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/normal/Utf8Test.php
===================================================================
--- /MediaWiki/branches/1.11/includes/normal/Utf8Test.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/normal/Utf8Test.php	(revision 1280)
@@ -0,0 +1,153 @@
+<?php
+# Copyright (C) 2004 Brion Vibber <brion@pobox.com>
+# http://www.mediawiki.org/
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+# http://www.gnu.org/copyleft/gpl.html
+
+/**
+ * Runs the UTF-8 decoder test at:
+ * http://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-test.txt
+ *
+ * @addtogroup UtfNormal
+ * @access private
+ */
+
+/** */
+require_once 'UtfNormalUtil.php';
+require_once 'UtfNormal.php';
+mb_internal_encoding( "utf-8" );
+
+#$verbose = true;
+if( php_sapi_name() != 'cli' ) {
+	die( "Run me from the command line please.\n" );
+}
+
+$in = fopen( "UTF-8-test.txt", "rt" );
+if( !$in ) {
+	print "Couldn't open UTF-8-test.txt -- can't run tests.\n";
+	print "If necessary, manually download this file. It can be obtained at\n";
+	print "http://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-test.txt";
+	exit(-1);
+}
+
+$columns = 0;
+while( false !== ( $line = fgets( $in ) ) ) {
+	$matches = array();
+	if( preg_match( '/^(Here come the tests:\s*)\|$/', $line, $matches ) ) {
+		$columns = strpos( $line, '|' );
+		break;
+	}
+}
+
+if( !$columns ) {
+	print "Something seems to be wrong; couldn't extract line length.\n";
+	print "Check that UTF-8-test.txt was downloaded correctly from\n";
+	print "http://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-test.txt";
+	exit(-1);
+}
+
+# print "$columns\n";
+
+$ignore = array(
+	# These two lines actually seem to be corrupt
+	'2.1.1', '2.2.1' );
+
+$exceptions = array(
+	# Tests that should mark invalid characters due to using long
+	# sequences beyond what is now considered legal.
+	'2.1.5', '2.1.6', '2.2.4', '2.2.5', '2.2.6', '2.3.5',
+
+	# Literal 0xffff, which is illegal
+	'2.2.3' );
+
+$longTests = array(
+	# These tests span multiple lines
+	'3.1.9', '3.2.1', '3.2.2', '3.2.3', '3.2.4', '3.2.5',
+	'3.4' );
+
+# These tests are not in proper subsections
+$sectionTests = array( '3.4' );
+
+$section = NULL;
+$test = '';
+$failed = 0;
+$success = 0;
+$total = 0;
+while( false !== ( $line = fgets( $in ) ) ) {
+	$matches = array();
+	if( preg_match( '/^(\d+)\s+(.*?)\s*\|/', $line, $matches ) ) {
+		$section = $matches[1];
+		print $line;
+		continue;
+	}
+	if( preg_match( '/^(\d+\.\d+\.\d+)\s*/', $line, $matches ) ) {
+		$test = $matches[1];
+
+		if( in_array( $test, $ignore ) ) {
+			continue;
+		}
+		if( in_array( $test, $longTests ) ) {
+			$line = fgets( $in );
+			for( $line = fgets( $in ); !preg_match( '/^\s+\|/', $line ); $line = fgets( $in ) ) {
+				testLine( $test, $line, $total, $success, $failed );
+			}
+		} else {
+			testLine( $test, $line, $total, $success, $failed );
+		}
+	}
+}
+
+if( $failed ) {
+	echo "\nFailed $failed tests.\n";
+	echo "UTF-8 DECODER TEST FAILED\n";
+	exit (-1);
+}
+
+echo "UTF-8 DECODER TEST SUCCESS!\n";
+exit (0);
+
+
+function testLine( $test, $line, &$total, &$success, &$failed ) {
+	$stripped = $line;
+	UtfNormal::quickisNFCVerify( $stripped );
+
+	$same = ( $line == $stripped );
+	$len = mb_strlen( substr( $stripped, 0, strpos( $stripped, '|' ) ) );
+	if( $len == 0 ) {
+		$len = strlen( substr( $stripped, 0, strpos( $stripped, '|' ) ) );
+	}
+
+	global $columns;
+	$ok = $same ^ ($test >= 3 );
+
+	global $exceptions;
+	$ok ^= in_array( $test, $exceptions );
+
+	$ok &= ($columns == $len);
+
+	$total++;
+	if( $ok ) {
+		$success++;
+	} else {
+		$failed++;
+	}
+	global $verbose;
+	if( $verbose || !$ok ) {
+		print str_replace( "\n", "$len\n", $stripped );
+	}
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/normal/UtfNormal.php
===================================================================
--- /MediaWiki/branches/1.11/includes/normal/UtfNormal.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/normal/UtfNormal.php	(revision 1280)
@@ -0,0 +1,807 @@
+<?php
+# Copyright (C) 2004 Brion Vibber <brion@pobox.com>
+# http://www.mediawiki.org/
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+# http://www.gnu.org/copyleft/gpl.html
+
+/** */
+require_once dirname(__FILE__).'/UtfNormalUtil.php';
+
+global $utfCombiningClass, $utfCanonicalComp, $utfCanonicalDecomp;
+$utfCombiningClass = NULL;
+$utfCanonicalComp = NULL;
+$utfCanonicalDecomp = NULL;
+
+# Load compatibility decompositions on demand if they are needed.
+global $utfCompatibilityDecomp;
+$utfCompatibilityDecomp = NULL;
+
+define( 'UNICODE_HANGUL_FIRST', 0xac00 );
+define( 'UNICODE_HANGUL_LAST',  0xd7a3 );
+
+define( 'UNICODE_HANGUL_LBASE', 0x1100 );
+define( 'UNICODE_HANGUL_VBASE', 0x1161 );
+define( 'UNICODE_HANGUL_TBASE', 0x11a7 );
+
+define( 'UNICODE_HANGUL_LCOUNT', 19 );
+define( 'UNICODE_HANGUL_VCOUNT', 21 );
+define( 'UNICODE_HANGUL_TCOUNT', 28 );
+define( 'UNICODE_HANGUL_NCOUNT', UNICODE_HANGUL_VCOUNT * UNICODE_HANGUL_TCOUNT );
+
+define( 'UNICODE_HANGUL_LEND', UNICODE_HANGUL_LBASE + UNICODE_HANGUL_LCOUNT - 1 );
+define( 'UNICODE_HANGUL_VEND', UNICODE_HANGUL_VBASE + UNICODE_HANGUL_VCOUNT - 1 );
+define( 'UNICODE_HANGUL_TEND', UNICODE_HANGUL_TBASE + UNICODE_HANGUL_TCOUNT - 1 );
+
+define( 'UNICODE_SURROGATE_FIRST', 0xd800 );
+define( 'UNICODE_SURROGATE_LAST', 0xdfff );
+define( 'UNICODE_MAX', 0x10ffff );
+define( 'UNICODE_REPLACEMENT', 0xfffd );
+
+
+define( 'UTF8_HANGUL_FIRST', "\xea\xb0\x80" /*codepointToUtf8( UNICODE_HANGUL_FIRST )*/ );
+define( 'UTF8_HANGUL_LAST', "\xed\x9e\xa3" /*codepointToUtf8( UNICODE_HANGUL_LAST )*/ );
+
+define( 'UTF8_HANGUL_LBASE', "\xe1\x84\x80" /*codepointToUtf8( UNICODE_HANGUL_LBASE )*/ );
+define( 'UTF8_HANGUL_VBASE', "\xe1\x85\xa1" /*codepointToUtf8( UNICODE_HANGUL_VBASE )*/ );
+define( 'UTF8_HANGUL_TBASE', "\xe1\x86\xa7" /*codepointToUtf8( UNICODE_HANGUL_TBASE )*/ );
+
+define( 'UTF8_HANGUL_LEND', "\xe1\x84\x92" /*codepointToUtf8( UNICODE_HANGUL_LEND )*/ );
+define( 'UTF8_HANGUL_VEND', "\xe1\x85\xb5" /*codepointToUtf8( UNICODE_HANGUL_VEND )*/ );
+define( 'UTF8_HANGUL_TEND', "\xe1\x87\x82" /*codepointToUtf8( UNICODE_HANGUL_TEND )*/ );
+
+define( 'UTF8_SURROGATE_FIRST', "\xed\xa0\x80" /*codepointToUtf8( UNICODE_SURROGATE_FIRST )*/ );
+define( 'UTF8_SURROGATE_LAST', "\xed\xbf\xbf" /*codepointToUtf8( UNICODE_SURROGATE_LAST )*/ );
+define( 'UTF8_MAX', "\xf4\x8f\xbf\xbf" /*codepointToUtf8( UNICODE_MAX )*/ );
+define( 'UTF8_REPLACEMENT', "\xef\xbf\xbd" /*codepointToUtf8( UNICODE_REPLACEMENT )*/ );
+#define( 'UTF8_REPLACEMENT', '!' );
+
+define( 'UTF8_OVERLONG_A', "\xc1\xbf" );
+define( 'UTF8_OVERLONG_B', "\xe0\x9f\xbf" );
+define( 'UTF8_OVERLONG_C', "\xf0\x8f\xbf\xbf" );
+
+# These two ranges are illegal
+define( 'UTF8_FDD0', "\xef\xb7\x90" /*codepointToUtf8( 0xfdd0 )*/ );
+define( 'UTF8_FDEF', "\xef\xb7\xaf" /*codepointToUtf8( 0xfdef )*/ );
+define( 'UTF8_FFFE', "\xef\xbf\xbe" /*codepointToUtf8( 0xfffe )*/ );
+define( 'UTF8_FFFF', "\xef\xbf\xbf" /*codepointToUtf8( 0xffff )*/ );
+
+define( 'UTF8_HEAD', false );
+define( 'UTF8_TAIL', true );
+
+
+/**
+ * For using the ICU wrapper
+ */
+define( 'UNORM_NONE', 1 );
+define( 'UNORM_NFD',  2 );
+define( 'UNORM_NFKD', 3 );
+define( 'UNORM_NFC',  4 );
+define( 'UNORM_DEFAULT', UNORM_NFC );
+define( 'UNORM_NFKC', 5 );
+define( 'UNORM_FCD',  6 );
+
+define( 'NORMALIZE_ICU', function_exists( 'utf8_normalize' ) );
+
+/**
+ * Unicode normalization routines for working with UTF-8 strings.
+ * Currently assumes that input strings are valid UTF-8!
+ *
+ * Not as fast as I'd like, but should be usable for most purposes.
+ * UtfNormal::toNFC() will bail early if given ASCII text or text
+ * it can quickly deterimine is already normalized.
+ *
+ * All functions can be called static.
+ *
+ * See description of forms at http://www.unicode.org/reports/tr15/
+ *
+ * @addtogroup UtfNormal
+ */
+class UtfNormal {
+	/**
+	 * The ultimate convenience function! Clean up invalid UTF-8 sequences,
+	 * and convert to normal form C, canonical composition.
+	 *
+	 * Fast return for pure ASCII strings; some lesser optimizations for
+	 * strings containing only known-good characters. Not as fast as toNFC().
+	 *
+	 * @param string $string a UTF-8 string
+	 * @return string a clean, shiny, normalized UTF-8 string
+	 * @static
+	 */
+	static function cleanUp( $string ) {
+		if( NORMALIZE_ICU ) {
+			# We exclude a few chars that ICU would not.
+			$string = preg_replace(
+				'/[\x00-\x08\x0b\x0c\x0e-\x1f]/',
+				UTF8_REPLACEMENT,
+				$string );
+			$string = str_replace( UTF8_FFFE, UTF8_REPLACEMENT, $string );
+			$string = str_replace( UTF8_FFFF, UTF8_REPLACEMENT, $string );
+
+			# UnicodeString constructor fails if the string ends with a
+			# head byte. Add a junk char at the end, we'll strip it off.
+			return rtrim( utf8_normalize( $string . "\x01", UNORM_NFC ), "\x01" );
+		} elseif( UtfNormal::quickIsNFCVerify( $string ) ) {
+			# Side effect -- $string has had UTF-8 errors cleaned up.
+			return $string;
+		} else {
+			return UtfNormal::NFC( $string );
+		}
+	}
+
+	/**
+	 * Convert a UTF-8 string to normal form C, canonical composition.
+	 * Fast return for pure ASCII strings; some lesser optimizations for
+	 * strings containing only known-good characters.
+	 *
+	 * @param string $string a valid UTF-8 string. Input is not validated.
+	 * @return string a UTF-8 string in normal form C
+	 * @static
+	 */
+	static function toNFC( $string ) {
+		if( NORMALIZE_ICU )
+			return utf8_normalize( $string, UNORM_NFC );
+		elseif( UtfNormal::quickIsNFC( $string ) )
+			return $string;
+		else
+			return UtfNormal::NFC( $string );
+	}
+
+	/**
+	 * Convert a UTF-8 string to normal form D, canonical decomposition.
+	 * Fast return for pure ASCII strings.
+	 *
+	 * @param string $string a valid UTF-8 string. Input is not validated.
+	 * @return string a UTF-8 string in normal form D
+	 * @static
+	 */
+	static function toNFD( $string ) {
+		if( NORMALIZE_ICU )
+			return utf8_normalize( $string, UNORM_NFD );
+		elseif( preg_match( '/[\x80-\xff]/', $string ) )
+			return UtfNormal::NFD( $string );
+		else
+			return $string;
+	}
+
+	/**
+	 * Convert a UTF-8 string to normal form KC, compatibility composition.
+	 * This may cause irreversible information loss, use judiciously.
+	 * Fast return for pure ASCII strings.
+	 *
+	 * @param string $string a valid UTF-8 string. Input is not validated.
+	 * @return string a UTF-8 string in normal form KC
+	 * @static
+	 */
+	static function toNFKC( $string ) {
+		if( NORMALIZE_ICU )
+			return utf8_normalize( $string, UNORM_NFKC );
+		elseif( preg_match( '/[\x80-\xff]/', $string ) )
+			return UtfNormal::NFKC( $string );
+		else
+			return $string;
+	}
+
+	/**
+	 * Convert a UTF-8 string to normal form KD, compatibility decomposition.
+	 * This may cause irreversible information loss, use judiciously.
+	 * Fast return for pure ASCII strings.
+	 *
+	 * @param string $string a valid UTF-8 string. Input is not validated.
+	 * @return string a UTF-8 string in normal form KD
+	 * @static
+	 */
+	static function toNFKD( $string ) {
+		if( NORMALIZE_ICU )
+			return utf8_normalize( $string, UNORM_NFKD );
+		elseif( preg_match( '/[\x80-\xff]/', $string ) )
+			return UtfNormal::NFKD( $string );
+		else
+			return $string;
+	}
+
+	/**
+	 * Load the basic composition data if necessary
+	 * @private
+	 * @static
+	 */
+	static function loadData() {
+		global $utfCombiningClass;
+		if( !isset( $utfCombiningClass ) ) {
+			require_once( dirname(__FILE__) . '/UtfNormalData.inc' );
+		}
+	}
+
+	/**
+	 * Returns true if the string is _definitely_ in NFC.
+	 * Returns false if not or uncertain.
+	 * @param string $string a valid UTF-8 string. Input is not validated.
+	 * @return bool
+	 * @static
+	 */
+	static function quickIsNFC( $string ) {
+		# ASCII is always valid NFC!
+		# If it's pure ASCII, let it through.
+		if( !preg_match( '/[\x80-\xff]/', $string ) ) return true;
+
+		UtfNormal::loadData();
+		global $utfCheckNFC, $utfCombiningClass;
+		$len = strlen( $string );
+		for( $i = 0; $i < $len; $i++ ) {
+			$c = $string{$i};
+			$n = ord( $c );
+			if( $n < 0x80 ) {
+				continue;
+			} elseif( $n >= 0xf0 ) {
+				$c = substr( $string, $i, 4 );
+				$i += 3;
+			} elseif( $n >= 0xe0 ) {
+				$c = substr( $string, $i, 3 );
+				$i += 2;
+			} elseif( $n >= 0xc0 ) {
+				$c = substr( $string, $i, 2 );
+				$i++;
+			}
+			if( isset( $utfCheckNFC[$c] ) ) {
+				# If it's NO or MAYBE, bail and do the slow check.
+				return false;
+			}
+			if( isset( $utfCombiningClass[$c] ) ) {
+				# Combining character? We might have to do sorting, at least.
+				return false;
+			}
+		}
+		return true;
+	}
+
+	/**
+	 * Returns true if the string is _definitely_ in NFC.
+	 * Returns false if not or uncertain.
+	 * @param string $string a UTF-8 string, altered on output to be valid UTF-8 safe for XML.
+	 * @static
+	 */
+	static function quickIsNFCVerify( &$string ) {
+		# Screen out some characters that eg won't be allowed in XML
+		$string = preg_replace( '/[\x00-\x08\x0b\x0c\x0e-\x1f]/', UTF8_REPLACEMENT, $string );
+
+		# ASCII is always valid NFC!
+		# If we're only ever given plain ASCII, we can avoid the overhead
+		# of initializing the decomposition tables by skipping out early.
+		if( !preg_match( '/[\x80-\xff]/', $string ) ) return true;
+
+		static $checkit = null, $tailBytes = null, $utfCheckOrCombining = null;
+		if( !isset( $checkit ) ) {
+			# Load/build some scary lookup tables...
+			UtfNormal::loadData();
+			global $utfCheckNFC, $utfCombiningClass;
+
+			$utfCheckOrCombining = array_merge( $utfCheckNFC, $utfCombiningClass );
+
+			# Head bytes for sequences which we should do further validity checks
+			$checkit = array_flip( array_map( 'chr',
+					array( 0xc0, 0xc1, 0xe0, 0xed, 0xef,
+						   0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
+						   0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff ) ) );
+
+			# Each UTF-8 head byte is followed by a certain
+			# number of tail bytes.
+			$tailBytes = array();
+			for( $n = 0; $n < 256; $n++ ) {
+				if( $n < 0xc0 ) {
+					$remaining = 0;
+				} elseif( $n < 0xe0 ) {
+					$remaining = 1;
+				} elseif( $n < 0xf0 ) {
+					$remaining = 2;
+				} elseif( $n < 0xf8 ) {
+					$remaining = 3;
+				} elseif( $n < 0xfc ) {
+					$remaining = 4;
+				} elseif( $n < 0xfe ) {
+					$remaining = 5;
+				} else {
+					$remaining = 0;
+				}
+				$tailBytes[chr($n)] = $remaining;
+			}
+		}
+
+		# Chop the text into pure-ASCII and non-ASCII areas;
+		# large ASCII parts can be handled much more quickly.
+		# Don't chop up Unicode areas for punctuation, though,
+		# that wastes energy.
+		$matches = array();
+		preg_match_all(
+			'/([\x00-\x7f]+|[\x80-\xff][\x00-\x40\x5b-\x5f\x7b-\xff]*)/',
+			$string, $matches );
+
+		$looksNormal = true;
+		$base = 0;
+		$replace = array();
+		foreach( $matches[1] as $str ) {
+			$chunk = strlen( $str );
+
+			if( $str{0} < "\x80" ) {
+				# ASCII chunk: guaranteed to be valid UTF-8
+				# and in normal form C, so skip over it.
+				$base += $chunk;
+				continue;
+			}
+
+			# We'll have to examine the chunk byte by byte to ensure
+			# that it consists of valid UTF-8 sequences, and to see
+			# if any of them might not be normalized.
+			#
+			# Since PHP is not the fastest language on earth, some of
+			# this code is a little ugly with inner loop optimizations.
+
+			$head = '';
+			$len = $chunk + 1; # Counting down is faster. I'm *so* sorry.
+
+			for( $i = -1; --$len; ) {
+				if( $remaining = $tailBytes[$c = $str{++$i}] ) {
+					# UTF-8 head byte!
+					$sequence = $head = $c;
+					do {
+						# Look for the defined number of tail bytes...
+						if( --$len && ( $c = $str{++$i} ) >= "\x80" && $c < "\xc0" ) {
+							# Legal tail bytes are nice.
+							$sequence .= $c;
+						} else {
+							if( 0 == $len ) {
+								# Premature end of string!
+								# Drop a replacement character into output to
+								# represent the invalid UTF-8 sequence.
+								$replace[] = array( UTF8_REPLACEMENT,
+													$base + $i + 1 - strlen( $sequence ),
+													strlen( $sequence ) );
+								break 2;
+							} else {
+								# Illegal tail byte; abandon the sequence.
+								$replace[] = array( UTF8_REPLACEMENT,
+													$base + $i - strlen( $sequence ),
+													strlen( $sequence ) );
+								# Back up and reprocess this byte; it may itself
+								# be a legal ASCII or UTF-8 sequence head.
+								--$i;
+								++$len;
+								continue 2;
+							}
+						}
+					} while( --$remaining );
+
+					if( isset( $checkit[$head] ) ) {
+						# Do some more detailed validity checks, for
+						# invalid characters and illegal sequences.
+						if( $head == "\xed" ) {
+							# 0xed is relatively frequent in Korean, which
+							# abuts the surrogate area, so we're doing
+							# this check separately to speed things up.
+
+							if( $sequence >= UTF8_SURROGATE_FIRST ) {
+								# Surrogates are legal only in UTF-16 code.
+								# They are totally forbidden here in UTF-8
+								# utopia.
+								$replace[] = array( UTF8_REPLACEMENT,
+								             $base + $i + 1 - strlen( $sequence ),
+								             strlen( $sequence ) );
+								$head = '';
+								continue;
+							}
+						} else {
+							# Slower, but rarer checks...
+							$n = ord( $head );
+							if(
+								# "Overlong sequences" are those that are syntactically
+								# correct but use more UTF-8 bytes than are necessary to
+								# encode a character. Naïve string comparisons can be
+								# tricked into failing to see a match for an ASCII
+								# character, for instance, which can be a security hole
+								# if blacklist checks are being used.
+							       ($n  < 0xc2 && $sequence <= UTF8_OVERLONG_A)
+								|| ($n == 0xe0 && $sequence <= UTF8_OVERLONG_B)
+								|| ($n == 0xf0 && $sequence <= UTF8_OVERLONG_C)
+
+								# U+FFFE and U+FFFF are explicitly forbidden in Unicode.
+								|| ($n == 0xef &&
+									   ($sequence == UTF8_FFFE)
+									|| ($sequence == UTF8_FFFF) )
+
+								# Unicode has been limited to 21 bits; longer
+								# sequences are not allowed.
+								|| ($n >= 0xf0 && $sequence > UTF8_MAX) ) {
+
+								$replace[] = array( UTF8_REPLACEMENT,
+								                    $base + $i + 1 - strlen( $sequence ),
+								                    strlen( $sequence ) );
+								$head = '';
+								continue;
+							}
+						}
+					}
+
+					if( isset( $utfCheckOrCombining[$sequence] ) ) {
+						# If it's NO or MAYBE, we'll have to rip
+						# the string apart and put it back together.
+						# That's going to be mighty slow.
+						$looksNormal = false;
+					}
+
+					# The sequence is legal!
+					$head = '';
+				} elseif( $c < "\x80" ) {
+					# ASCII byte.
+					$head = '';
+				} elseif( $c < "\xc0" ) {
+					# Illegal tail bytes
+					if( $head == '' ) {
+						# Out of the blue!
+						$replace[] = array( UTF8_REPLACEMENT, $base + $i, 1 );
+					} else {
+						# Don't add if we're continuing a broken sequence;
+						# we already put a replacement character when we looked
+						# at the broken sequence.
+						$replace[] = array( '', $base + $i, 1 );
+					}
+				} else {
+					# Miscellaneous freaks.
+					$replace[] = array( UTF8_REPLACEMENT, $base + $i, 1 );
+					$head = '';
+				}
+			}
+			$base += $chunk;
+		}
+		if( count( $replace ) ) {
+			# There were illegal UTF-8 sequences we need to fix up.
+			$out = '';
+			$last = 0;
+			foreach( $replace as $rep ) {
+				list( $replacement, $start, $length ) = $rep;
+				if( $last < $start ) {
+					$out .= substr( $string, $last, $start - $last );
+				}
+				$out .= $replacement;
+				$last = $start + $length;
+			}
+			if( $last < strlen( $string ) ) {
+				$out .= substr( $string, $last );
+			}
+			$string = $out;
+		}
+		return $looksNormal;
+	}
+
+	# These take a string and run the normalization on them, without
+	# checking for validity or any optimization etc. Input must be
+	# VALID UTF-8!
+	/**
+	 * @param string $string
+	 * @return string
+	 * @private
+	 * @static
+	 */
+	static function NFC( $string ) {
+		return UtfNormal::fastCompose( UtfNormal::NFD( $string ) );
+	}
+
+	/**
+	 * @param string $string
+	 * @return string
+	 * @private
+	 * @static
+	 */
+	static function NFD( $string ) {
+		UtfNormal::loadData();
+		global $utfCanonicalDecomp;
+		return UtfNormal::fastCombiningSort(
+			UtfNormal::fastDecompose( $string, $utfCanonicalDecomp ) );
+	}
+
+	/**
+	 * @param string $string
+	 * @return string
+	 * @private
+	 * @static
+	 */
+	static function NFKC( $string ) {
+		return UtfNormal::fastCompose( UtfNormal::NFKD( $string ) );
+	}
+
+	/**
+	 * @param string $string
+	 * @return string
+	 * @private
+	 * @static
+	 */
+	static function NFKD( $string ) {
+		global $utfCompatibilityDecomp;
+		if( !isset( $utfCompatibilityDecomp ) ) {
+			require_once( 'UtfNormalDataK.inc' );
+		}
+		return UtfNormal::fastCombiningSort(
+			UtfNormal::fastDecompose( $string, $utfCompatibilityDecomp ) );
+	}
+
+
+	/**
+	 * Perform decomposition of a UTF-8 string into either D or KD form
+	 * (depending on which decomposition map is passed to us).
+	 * Input is assumed to be *valid* UTF-8. Invalid code will break.
+	 * @private
+	 * @param string $string Valid UTF-8 string
+	 * @param array $map hash of expanded decomposition map
+	 * @return string a UTF-8 string decomposed, not yet normalized (needs sorting)
+	 * @static
+	 */
+	static function fastDecompose( $string, $map ) {
+		UtfNormal::loadData();
+		$len = strlen( $string );
+		$out = '';
+		for( $i = 0; $i < $len; $i++ ) {
+			$c = $string{$i};
+			$n = ord( $c );
+			if( $n < 0x80 ) {
+				# ASCII chars never decompose
+				# THEY ARE IMMORTAL
+				$out .= $c;
+				continue;
+			} elseif( $n >= 0xf0 ) {
+				$c = substr( $string, $i, 4 );
+				$i += 3;
+			} elseif( $n >= 0xe0 ) {
+				$c = substr( $string, $i, 3 );
+				$i += 2;
+			} elseif( $n >= 0xc0 ) {
+				$c = substr( $string, $i, 2 );
+				$i++;
+			}
+			if( isset( $map[$c] ) ) {
+				$out .= $map[$c];
+				continue;
+			} else {
+				if( $c >= UTF8_HANGUL_FIRST && $c <= UTF8_HANGUL_LAST ) {
+					# Decompose a hangul syllable into jamo;
+					# hardcoded for three-byte UTF-8 sequence.
+					# A lookup table would be slightly faster,
+					# but adds a lot of memory & disk needs.
+					#
+					$index = ( (ord( $c{0} ) & 0x0f) << 12
+					         | (ord( $c{1} ) & 0x3f) <<  6
+					         | (ord( $c{2} ) & 0x3f) )
+					       - UNICODE_HANGUL_FIRST;
+					$l = intval( $index / UNICODE_HANGUL_NCOUNT );
+					$v = intval( ($index % UNICODE_HANGUL_NCOUNT) / UNICODE_HANGUL_TCOUNT);
+					$t = $index % UNICODE_HANGUL_TCOUNT;
+					$out .= "\xe1\x84" . chr( 0x80 + $l ) . "\xe1\x85" . chr( 0xa1 + $v );
+					if( $t >= 25 ) {
+						$out .= "\xe1\x87" . chr( 0x80 + $t - 25 );
+					} elseif( $t ) {
+						$out .= "\xe1\x86" . chr( 0xa7 + $t );
+					}
+					continue;
+				}
+			}
+			$out .= $c;
+		}
+		return $out;
+	}
+
+	/**
+	 * Sorts combining characters into canonical order. This is the
+	 * final step in creating decomposed normal forms D and KD.
+	 * @private
+	 * @param string $string a valid, decomposed UTF-8 string. Input is not validated.
+	 * @return string a UTF-8 string with combining characters sorted in canonical order
+	 * @static
+	 */
+	static function fastCombiningSort( $string ) {
+		UtfNormal::loadData();
+		global $utfCombiningClass;
+		$len = strlen( $string );
+		$out = '';
+		$combiners = array();
+		$lastClass = -1;
+		for( $i = 0; $i < $len; $i++ ) {
+			$c = $string{$i};
+			$n = ord( $c );
+			if( $n >= 0x80 ) {
+				if( $n >= 0xf0 ) {
+					$c = substr( $string, $i, 4 );
+					$i += 3;
+				} elseif( $n >= 0xe0 ) {
+					$c = substr( $string, $i, 3 );
+					$i += 2;
+				} elseif( $n >= 0xc0 ) {
+					$c = substr( $string, $i, 2 );
+					$i++;
+				}
+				if( isset( $utfCombiningClass[$c] ) ) {
+					$lastClass = $utfCombiningClass[$c];
+					if( isset( $combiners[$lastClass] ) ) {
+						$combiners[$lastClass] .= $c;
+					} else {
+						$combiners[$lastClass] = $c;
+					}
+					continue;
+				}
+			}
+			if( $lastClass ) {
+				ksort( $combiners );
+				$out .= implode( '', $combiners );
+				$combiners = array();
+			}
+			$out .= $c;
+			$lastClass = 0;
+		}
+		if( $lastClass ) {
+			ksort( $combiners );
+			$out .= implode( '', $combiners );
+		}
+		return $out;
+	}
+
+	/**
+	 * Produces canonically composed sequences, i.e. normal form C or KC.
+	 *
+	 * @private
+	 * @param string $string a valid UTF-8 string in sorted normal form D or KD. Input is not validated.
+	 * @return string a UTF-8 string with canonical precomposed characters used where possible
+	 * @static
+	 */
+	static function fastCompose( $string ) {
+		UtfNormal::loadData();
+		global $utfCanonicalComp, $utfCombiningClass;
+		$len = strlen( $string );
+		$out = '';
+		$lastClass = -1;
+		$lastHangul = 0;
+		$startChar = '';
+		$combining = '';
+		$x1 = ord(substr(UTF8_HANGUL_VBASE,0,1));
+		$x2 = ord(substr(UTF8_HANGUL_TEND,0,1));
+		for( $i = 0; $i < $len; $i++ ) {
+			$c = $string{$i};
+			$n = ord( $c );
+			if( $n < 0x80 ) {
+				# No combining characters here...
+				$out .= $startChar;
+				$out .= $combining;
+				$startChar = $c;
+				$combining = '';
+				$lastClass = 0;
+				continue;
+			} elseif( $n >= 0xf0 ) {
+				$c = substr( $string, $i, 4 );
+				$i += 3;
+			} elseif( $n >= 0xe0 ) {
+				$c = substr( $string, $i, 3 );
+				$i += 2;
+			} elseif( $n >= 0xc0 ) {
+				$c = substr( $string, $i, 2 );
+				$i++;
+			}
+			$pair = $startChar . $c;
+			if( $n > 0x80 ) {
+				if( isset( $utfCombiningClass[$c] ) ) {
+					# A combining char; see what we can do with it
+					$class = $utfCombiningClass[$c];
+					if( !empty( $startChar ) &&
+						$lastClass < $class &&
+						$class > 0 &&
+						isset( $utfCanonicalComp[$pair] ) ) {
+						$startChar = $utfCanonicalComp[$pair];
+						$class = 0;
+					} else {
+						$combining .= $c;
+					}
+					$lastClass = $class;
+					$lastHangul = 0;
+					continue;
+				}
+			}
+			# New start char
+			if( $lastClass == 0 ) {
+				if( isset( $utfCanonicalComp[$pair] ) ) {
+					$startChar = $utfCanonicalComp[$pair];
+					$lastHangul = 0;
+					continue;
+				}
+				if( $n >= $x1 && $n <= $x2 ) {
+					# WARNING: Hangul code is painfully slow.
+					# I apologize for this ugly, ugly code; however
+					# performance is even more teh suck if we call
+					# out to nice clean functions. Lookup tables are
+					# marginally faster, but require a lot of space.
+					#
+					if( $c >= UTF8_HANGUL_VBASE &&
+						$c <= UTF8_HANGUL_VEND &&
+						$startChar >= UTF8_HANGUL_LBASE &&
+						$startChar <= UTF8_HANGUL_LEND ) {
+						#
+						#$lIndex = utf8ToCodepoint( $startChar ) - UNICODE_HANGUL_LBASE;
+						#$vIndex = utf8ToCodepoint( $c ) - UNICODE_HANGUL_VBASE;
+						$lIndex = ord( $startChar{2} ) - 0x80;
+						$vIndex = ord( $c{2}         ) - 0xa1;
+
+						$hangulPoint = UNICODE_HANGUL_FIRST +
+							UNICODE_HANGUL_TCOUNT *
+							(UNICODE_HANGUL_VCOUNT * $lIndex + $vIndex);
+
+						# Hardcode the limited-range UTF-8 conversion:
+						$startChar = chr( $hangulPoint >> 12 & 0x0f | 0xe0 ) .
+									 chr( $hangulPoint >>  6 & 0x3f | 0x80 ) .
+									 chr( $hangulPoint       & 0x3f | 0x80 );
+						$lastHangul = 0;
+						continue;
+					} elseif( $c >= UTF8_HANGUL_TBASE &&
+							  $c <= UTF8_HANGUL_TEND &&
+							  $startChar >= UTF8_HANGUL_FIRST &&
+							  $startChar <= UTF8_HANGUL_LAST &&
+							  !$lastHangul ) {
+						# $tIndex = utf8ToCodepoint( $c ) - UNICODE_HANGUL_TBASE;
+						$tIndex = ord( $c{2} ) - 0xa7;
+						if( $tIndex < 0 ) $tIndex = ord( $c{2} ) - 0x80 + (0x11c0 - 0x11a7);
+
+						# Increment the code point by $tIndex, without
+						# the function overhead of decoding and recoding UTF-8
+						#
+						$tail = ord( $startChar{2} ) + $tIndex;
+						if( $tail > 0xbf ) {
+							$tail -= 0x40;
+							$mid = ord( $startChar{1} ) + 1;
+							if( $mid > 0xbf ) {
+								$startChar{0} = chr( ord( $startChar{0} ) + 1 );
+								$mid -= 0x40;
+							}
+							$startChar{1} = chr( $mid );
+						}
+						$startChar{2} = chr( $tail );
+
+						# If there's another jamo char after this, *don't* try to merge it.
+						$lastHangul = 1;
+						continue;
+					}
+				}
+			}
+			$out .= $startChar;
+			$out .= $combining;
+			$startChar = $c;
+			$combining = '';
+			$lastClass = 0;
+			$lastHangul = 0;
+		}
+		$out .= $startChar . $combining;
+		return $out;
+	}
+
+	/**
+	 * This is just used for the benchmark, comparing how long it takes to
+	 * interate through a string without really doing anything of substance.
+	 * @param string $string
+	 * @return string
+	 * @static
+	 */
+	static function placebo( $string ) {
+		$len = strlen( $string );
+		$out = '';
+		for( $i = 0; $i < $len; $i++ ) {
+			$out .= $string{$i};
+		}
+		return $out;
+	}
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/normal/UtfNormalBench.php
===================================================================
--- /MediaWiki/branches/1.11/includes/normal/UtfNormalBench.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/normal/UtfNormalBench.php	(revision 1280)
@@ -0,0 +1,111 @@
+<?php
+# Copyright (C) 2004 Brion Vibber <brion@pobox.com>
+# http://www.mediawiki.org/
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+# http://www.gnu.org/copyleft/gpl.html
+
+/**
+ * Approximate benchmark for some basic operations.
+ *
+ * @addtogroup UtfNormal
+ * @access private
+ */
+
+/** */
+if( isset( $_SERVER['argv'] ) && in_array( '--icu', $_SERVER['argv'] ) ) {
+	dl( 'php_utfnormal.so' );
+}
+
+require_once 'UtfNormalUtil.php';
+require_once 'UtfNormal.php';
+
+define( 'BENCH_CYCLES', 5 );
+
+if( php_sapi_name() != 'cli' ) {
+	die( "Run me from the command line please.\n" );
+}
+
+$testfiles = array(
+	'testdata/washington.txt' => 'English text',
+	'testdata/berlin.txt' => 'German text',
+	'testdata/bulgakov.txt' => 'Russian text',
+	'testdata/tokyo.txt' => 'Japanese text',
+	'testdata/young.txt' => 'Korean text'
+);
+$normalizer = new UtfNormal;
+UtfNormal::loadData();
+foreach( $testfiles as $file => $desc ) {
+	benchmarkTest( $normalizer, $file, $desc );
+}
+
+# -------
+
+function benchmarkTest( &$u, $filename, $desc ) {
+	print "Testing $filename ($desc)...\n";
+	$data = file_get_contents( $filename );
+	$forms = array(
+#		'placebo',
+		'cleanUp',
+		'toNFC',
+#		'toNFKC',
+#		'toNFD', 'toNFKD',
+		'NFC',
+#		'NFKC',
+#		'NFD', 'NFKD',
+		array( 'fastDecompose', 'fastCombiningSort', 'fastCompose' ),
+#		'quickIsNFC', 'quickIsNFCVerify',
+		);
+	foreach( $forms as $form ) {
+		if( is_array( $form ) ) {
+			$str = $data;
+			foreach( $form as $step ) {
+				$str = benchmarkForm( $u, $str, $step );
+			}
+		} else {
+			benchmarkForm( $u, $data, $form );
+		}
+	}
+}
+
+function benchTime(){
+	$st = explode( ' ', microtime() );
+	return (float)$st[0] + (float)$st[1];
+}
+
+function benchmarkForm( &$u, &$data, $form ) {
+	global $utfCanonicalDecomp;
+	#$start = benchTime();
+	for( $i = 0; $i < BENCH_CYCLES; $i++ ) {
+		$start = benchTime();
+		$out = $u->$form( $data, $utfCanonicalDecomp );
+		$deltas[] = (benchTime() - $start);
+	}
+	#$delta = (benchTime() - $start) / BENCH_CYCLES;
+	sort( $deltas );
+	$delta = $deltas[0]; # Take shortest time
+
+	$rate = intval( strlen( $data ) / $delta );
+	$same = (0 == strcmp( $data, $out ) );
+
+	printf( " %20s %6.1fms %12s bytes/s (%s)\n",
+		$form,
+		$delta*1000.0,
+		number_format( $rate ),
+		($same ? 'no change' : 'changed' ) );
+	return $out;
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/normal/UtfNormalData.inc
===================================================================
--- /MediaWiki/branches/1.11/includes/normal/UtfNormalData.inc	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/normal/UtfNormalData.inc	(revision 1280)
@@ -0,0 +1,12 @@
+<?php
+/**
+ * This file was automatically generated -- do not edit!
+ * Run UtfNormalGenerate.php to create this file again (make clean && make)
+ */
+/** */
+global $utfCombiningClass, $utfCanonicalComp, $utfCanonicalDecomp, $utfCheckNFC;
+$utfCombiningClass = unserialize( 'a:418:{s:2:"̀";i:230;s:2:"́";i:230;s:2:"̂";i:230;s:2:"̃";i:230;s:2:"̄";i:230;s:2:"̅";i:230;s:2:"̆";i:230;s:2:"̇";i:230;s:2:"̈";i:230;s:2:"̉";i:230;s:2:"̊";i:230;s:2:"̋";i:230;s:2:"̌";i:230;s:2:"̍";i:230;s:2:"̎";i:230;s:2:"̏";i:230;s:2:"̐";i:230;s:2:"̑";i:230;s:2:"̒";i:230;s:2:"̓";i:230;s:2:"̔";i:230;s:2:"̕";i:232;s:2:"̖";i:220;s:2:"̗";i:220;s:2:"̘";i:220;s:2:"̙";i:220;s:2:"̚";i:232;s:2:"̛";i:216;s:2:"̜";i:220;s:2:"̝";i:220;s:2:"̞";i:220;s:2:"̟";i:220;s:2:"̠";i:220;s:2:"̡";i:202;s:2:"̢";i:202;s:2:"̣";i:220;s:2:"̤";i:220;s:2:"̥";i:220;s:2:"̦";i:220;s:2:"̧";i:202;s:2:"̨";i:202;s:2:"̩";i:220;s:2:"̪";i:220;s:2:"̫";i:220;s:2:"̬";i:220;s:2:"̭";i:220;s:2:"̮";i:220;s:2:"̯";i:220;s:2:"̰";i:220;s:2:"̱";i:220;s:2:"̲";i:220;s:2:"̳";i:220;s:2:"̴";i:1;s:2:"̵";i:1;s:2:"̶";i:1;s:2:"̷";i:1;s:2:"̸";i:1;s:2:"̹";i:220;s:2:"̺";i:220;s:2:"̻";i:220;s:2:"̼";i:220;s:2:"̽";i:230;s:2:"̾";i:230;s:2:"̿";i:230;s:2:"̀";i:230;s:2:"́";i:230;s:2:"͂";i:230;s:2:"̓";i:230;s:2:"̈́";i:230;s:2:"ͅ";i:240;s:2:"͆";i:230;s:2:"͇";i:220;s:2:"͈";i:220;s:2:"͉";i:220;s:2:"͊";i:230;s:2:"͋";i:230;s:2:"͌";i:230;s:2:"͍";i:220;s:2:"͎";i:220;s:2:"͐";i:230;s:2:"͑";i:230;s:2:"͒";i:230;s:2:"͓";i:220;s:2:"͔";i:220;s:2:"͕";i:220;s:2:"͖";i:220;s:2:"͗";i:230;s:2:"͘";i:232;s:2:"͙";i:220;s:2:"͚";i:220;s:2:"͛";i:230;s:2:"͜";i:233;s:2:"͝";i:234;s:2:"͞";i:234;s:2:"͟";i:233;s:2:"͠";i:234;s:2:"͡";i:234;s:2:"͢";i:233;s:2:"ͣ";i:230;s:2:"ͤ";i:230;s:2:"ͥ";i:230;s:2:"ͦ";i:230;s:2:"ͧ";i:230;s:2:"ͨ";i:230;s:2:"ͩ";i:230;s:2:"ͪ";i:230;s:2:"ͫ";i:230;s:2:"ͬ";i:230;s:2:"ͭ";i:230;s:2:"ͮ";i:230;s:2:"ͯ";i:230;s:2:"҃";i:230;s:2:"҄";i:230;s:2:"҅";i:230;s:2:"҆";i:230;s:2:"֑";i:220;s:2:"֒";i:230;s:2:"֓";i:230;s:2:"֔";i:230;s:2:"֕";i:230;s:2:"֖";i:220;s:2:"֗";i:230;s:2:"֘";i:230;s:2:"֙";i:230;s:2:"֚";i:222;s:2:"֛";i:220;s:2:"֜";i:230;s:2:"֝";i:230;s:2:"֞";i:230;s:2:"֟";i:230;s:2:"֠";i:230;s:2:"֡";i:230;s:2:"֢";i:220;s:2:"֣";i:220;s:2:"֤";i:220;s:2:"֥";i:220;s:2:"֦";i:220;s:2:"֧";i:220;s:2:"֨";i:230;s:2:"֩";i:230;s:2:"֪";i:220;s:2:"֫";i:230;s:2:"֬";i:230;s:2:"֭";i:222;s:2:"֮";i:228;s:2:"֯";i:230;s:2:"ְ";i:10;s:2:"ֱ";i:11;s:2:"ֲ";i:12;s:2:"ֳ";i:13;s:2:"ִ";i:14;s:2:"ֵ";i:15;s:2:"ֶ";i:16;s:2:"ַ";i:17;s:2:"ָ";i:18;s:2:"ֹ";i:19;s:2:"ֺ";i:19;s:2:"ֻ";i:20;s:2:"ּ";i:21;s:2:"ֽ";i:22;s:2:"ֿ";i:23;s:2:"ׁ";i:24;s:2:"ׂ";i:25;s:2:"ׄ";i:230;s:2:"ׅ";i:220;s:2:"ׇ";i:18;s:2:"ؐ";i:230;s:2:"ؑ";i:230;s:2:"ؒ";i:230;s:2:"ؓ";i:230;s:2:"ؔ";i:230;s:2:"ؕ";i:230;s:2:"ً";i:27;s:2:"ٌ";i:28;s:2:"ٍ";i:29;s:2:"َ";i:30;s:2:"ُ";i:31;s:2:"ِ";i:32;s:2:"ّ";i:33;s:2:"ْ";i:34;s:2:"ٓ";i:230;s:2:"ٔ";i:230;s:2:"ٕ";i:220;s:2:"ٖ";i:220;s:2:"ٗ";i:230;s:2:"٘";i:230;s:2:"ٙ";i:230;s:2:"ٚ";i:230;s:2:"ٛ";i:230;s:2:"ٜ";i:220;s:2:"ٝ";i:230;s:2:"ٞ";i:230;s:2:"ٰ";i:35;s:2:"ۖ";i:230;s:2:"ۗ";i:230;s:2:"ۘ";i:230;s:2:"ۙ";i:230;s:2:"ۚ";i:230;s:2:"ۛ";i:230;s:2:"ۜ";i:230;s:2:"۟";i:230;s:2:"۠";i:230;s:2:"ۡ";i:230;s:2:"ۢ";i:230;s:2:"ۣ";i:220;s:2:"ۤ";i:230;s:2:"ۧ";i:230;s:2:"ۨ";i:230;s:2:"۪";i:220;s:2:"۫";i:230;s:2:"۬";i:230;s:2:"ۭ";i:220;s:2:"ܑ";i:36;s:2:"ܰ";i:230;s:2:"ܱ";i:220;s:2:"ܲ";i:230;s:2:"ܳ";i:230;s:2:"ܴ";i:220;s:2:"ܵ";i:230;s:2:"ܶ";i:230;s:2:"ܷ";i:220;s:2:"ܸ";i:220;s:2:"ܹ";i:220;s:2:"ܺ";i:230;s:2:"ܻ";i:220;s:2:"ܼ";i:220;s:2:"ܽ";i:230;s:2:"ܾ";i:220;s:2:"ܿ";i:230;s:2:"݀";i:230;s:2:"݁";i:230;s:2:"݂";i:220;s:2:"݃";i:230;s:2:"݄";i:220;s:2:"݅";i:230;s:2:"݆";i:220;s:2:"݇";i:230;s:2:"݈";i:220;s:2:"݉";i:230;s:2:"݊";i:230;s:2:"߫";i:230;s:2:"߬";i:230;s:2:"߭";i:230;s:2:"߮";i:230;s:2:"߯";i:230;s:2:"߰";i:230;s:2:"߱";i:230;s:2:"߲";i:220;s:2:"߳";i:230;s:3:"़";i:7;s:3:"्";i:9;s:3:"॑";i:230;s:3:"॒";i:220;s:3:"॓";i:230;s:3:"॔";i:230;s:3:"়";i:7;s:3:"্";i:9;s:3:"਼";i:7;s:3:"੍";i:9;s:3:"઼";i:7;s:3:"્";i:9;s:3:"଼";i:7;s:3:"୍";i:9;s:3:"்";i:9;s:3:"్";i:9;s:3:"ౕ";i:84;s:3:"ౖ";i:91;s:3:"಼";i:7;s:3:"್";i:9;s:3:"്";i:9;s:3:"්";i:9;s:3:"ุ";i:103;s:3:"ู";i:103;s:3:"ฺ";i:9;s:3:"่";i:107;s:3:"้";i:107;s:3:"๊";i:107;s:3:"๋";i:107;s:3:"ຸ";i:118;s:3:"ູ";i:118;s:3:"່";i:122;s:3:"້";i:122;s:3:"໊";i:122;s:3:"໋";i:122;s:3:"༘";i:220;s:3:"༙";i:220;s:3:"༵";i:220;s:3:"༷";i:220;s:3:"༹";i:216;s:3:"ཱ";i:129;s:3:"ི";i:130;s:3:"ུ";i:132;s:3:"ེ";i:130;s:3:"ཻ";i:130;s:3:"ོ";i:130;s:3:"ཽ";i:130;s:3:"ྀ";i:130;s:3:"ྂ";i:230;s:3:"ྃ";i:230;s:3:"྄";i:9;s:3:"྆";i:230;s:3:"྇";i:230;s:3:"࿆";i:220;s:3:"့";i:7;s:3:"္";i:9;s:3:"፟";i:230;s:3:"᜔";i:9;s:3:"᜴";i:9;s:3:"្";i:9;s:3:"៝";i:230;s:3:"ᢩ";i:228;s:3:"᤹";i:222;s:3:"᤺";i:230;s:3:"᤻";i:220;s:3:"ᨗ";i:230;s:3:"ᨘ";i:220;s:3:"᬴";i:7;s:3:"᭄";i:9;s:3:"᭫";i:230;s:3:"᭬";i:220;s:3:"᭭";i:230;s:3:"᭮";i:230;s:3:"᭯";i:230;s:3:"᭰";i:230;s:3:"᭱";i:230;s:3:"᭲";i:230;s:3:"᭳";i:230;s:3:"᷀";i:230;s:3:"᷁";i:230;s:3:"᷂";i:220;s:3:"᷃";i:230;s:3:"᷄";i:230;s:3:"᷅";i:230;s:3:"᷆";i:230;s:3:"᷇";i:230;s:3:"᷈";i:230;s:3:"᷉";i:230;s:3:"᷊";i:220;s:3:"᷾";i:230;s:3:"᷿";i:220;s:3:"⃐";i:230;s:3:"⃑";i:230;s:3:"⃒";i:1;s:3:"⃓";i:1;s:3:"⃔";i:230;s:3:"⃕";i:230;s:3:"⃖";i:230;s:3:"⃗";i:230;s:3:"⃘";i:1;s:3:"⃙";i:1;s:3:"⃚";i:1;s:3:"⃛";i:230;s:3:"⃜";i:230;s:3:"⃡";i:230;s:3:"⃥";i:1;s:3:"⃦";i:1;s:3:"⃧";i:230;s:3:"⃨";i:220;s:3:"⃩";i:230;s:3:"⃪";i:1;s:3:"⃫";i:1;s:3:"⃬";i:220;s:3:"⃭";i:220;s:3:"⃮";i:220;s:3:"⃯";i:220;s:3:"〪";i:218;s:3:"〫";i:228;s:3:"〬";i:232;s:3:"〭";i:222;s:3:"〮";i:224;s:3:"〯";i:224;s:3:"゙";i:8;s:3:"゚";i:8;s:3:"꠆";i:9;s:3:"ﬞ";i:26;s:3:"︠";i:230;s:3:"︡";i:230;s:3:"︢";i:230;s:3:"︣";i:230;s:4:"𐨍";i:220;s:4:"𐨏";i:230;s:4:"𐨸";i:230;s:4:"𐨹";i:1;s:4:"𐨺";i:220;s:4:"𐨿";i:9;s:4:"𝅥";i:216;s:4:"𝅦";i:216;s:4:"𝅧";i:1;s:4:"𝅨";i:1;s:4:"𝅩";i:1;s:4:"𝅭";i:226;s:4:"𝅮";i:216;s:4:"𝅯";i:216;s:4:"𝅰";i:216;s:4:"𝅱";i:216;s:4:"𝅲";i:216;s:4:"𝅻";i:220;s:4:"𝅼";i:220;s:4:"𝅽";i:220;s:4:"𝅾";i:220;s:4:"𝅿";i:220;s:4:"𝆀";i:220;s:4:"𝆁";i:220;s:4:"𝆂";i:220;s:4:"𝆅";i:230;s:4:"𝆆";i:230;s:4:"𝆇";i:230;s:4:"𝆈";i:230;s:4:"𝆉";i:230;s:4:"𝆊";i:220;s:4:"𝆋";i:220;s:4:"𝆪";i:230;s:4:"𝆫";i:230;s:4:"𝆬";i:230;s:4:"𝆭";i:230;s:4:"𝉂";i:230;s:4:"𝉃";i:230;s:4:"𝉄";i:230;}' );
+$utfCanonicalComp = unserialize( 'a:1862:{s:3:"À";s:2:"À";s:3:"Á";s:2:"Á";s:3:"Â";s:2:"Â";s:3:"Ã";s:2:"Ã";s:3:"Ä";s:2:"Ä";s:3:"Å";s:2:"Å";s:3:"Ç";s:2:"Ç";s:3:"È";s:2:"È";s:3:"É";s:2:"É";s:3:"Ê";s:2:"Ê";s:3:"Ë";s:2:"Ë";s:3:"Ì";s:2:"Ì";s:3:"Í";s:2:"Í";s:3:"Î";s:2:"Î";s:3:"Ï";s:2:"Ï";s:3:"Ñ";s:2:"Ñ";s:3:"Ò";s:2:"Ò";s:3:"Ó";s:2:"Ó";s:3:"Ô";s:2:"Ô";s:3:"Õ";s:2:"Õ";s:3:"Ö";s:2:"Ö";s:3:"Ù";s:2:"Ù";s:3:"Ú";s:2:"Ú";s:3:"Û";s:2:"Û";s:3:"Ü";s:2:"Ü";s:3:"Ý";s:2:"Ý";s:3:"à";s:2:"à";s:3:"á";s:2:"á";s:3:"â";s:2:"â";s:3:"ã";s:2:"ã";s:3:"ä";s:2:"ä";s:3:"å";s:2:"å";s:3:"ç";s:2:"ç";s:3:"è";s:2:"è";s:3:"é";s:2:"é";s:3:"ê";s:2:"ê";s:3:"ë";s:2:"ë";s:3:"ì";s:2:"ì";s:3:"í";s:2:"í";s:3:"î";s:2:"î";s:3:"ï";s:2:"ï";s:3:"ñ";s:2:"ñ";s:3:"ò";s:2:"ò";s:3:"ó";s:2:"ó";s:3:"ô";s:2:"ô";s:3:"õ";s:2:"õ";s:3:"ö";s:2:"ö";s:3:"ù";s:2:"ù";s:3:"ú";s:2:"ú";s:3:"û";s:2:"û";s:3:"ü";s:2:"ü";s:3:"ý";s:2:"ý";s:3:"ÿ";s:2:"ÿ";s:3:"Ā";s:2:"Ā";s:3:"ā";s:2:"ā";s:3:"Ă";s:2:"Ă";s:3:"ă";s:2:"ă";s:3:"Ą";s:2:"Ą";s:3:"ą";s:2:"ą";s:3:"Ć";s:2:"Ć";s:3:"ć";s:2:"ć";s:3:"Ĉ";s:2:"Ĉ";s:3:"ĉ";s:2:"ĉ";s:3:"Ċ";s:2:"Ċ";s:3:"ċ";s:2:"ċ";s:3:"Č";s:2:"Č";s:3:"č";s:2:"č";s:3:"Ď";s:2:"Ď";s:3:"ď";s:2:"ď";s:3:"Ē";s:2:"Ē";s:3:"ē";s:2:"ē";s:3:"Ĕ";s:2:"Ĕ";s:3:"ĕ";s:2:"ĕ";s:3:"Ė";s:2:"Ė";s:3:"ė";s:2:"ė";s:3:"Ę";s:2:"Ę";s:3:"ę";s:2:"ę";s:3:"Ě";s:2:"Ě";s:3:"ě";s:2:"ě";s:3:"Ĝ";s:2:"Ĝ";s:3:"ĝ";s:2:"ĝ";s:3:"Ğ";s:2:"Ğ";s:3:"ğ";s:2:"ğ";s:3:"Ġ";s:2:"Ġ";s:3:"ġ";s:2:"ġ";s:3:"Ģ";s:2:"Ģ";s:3:"ģ";s:2:"ģ";s:3:"Ĥ";s:2:"Ĥ";s:3:"ĥ";s:2:"ĥ";s:3:"Ĩ";s:2:"Ĩ";s:3:"ĩ";s:2:"ĩ";s:3:"Ī";s:2:"Ī";s:3:"ī";s:2:"ī";s:3:"Ĭ";s:2:"Ĭ";s:3:"ĭ";s:2:"ĭ";s:3:"Į";s:2:"Į";s:3:"į";s:2:"į";s:3:"İ";s:2:"İ";s:3:"Ĵ";s:2:"Ĵ";s:3:"ĵ";s:2:"ĵ";s:3:"Ķ";s:2:"Ķ";s:3:"ķ";s:2:"ķ";s:3:"Ĺ";s:2:"Ĺ";s:3:"ĺ";s:2:"ĺ";s:3:"Ļ";s:2:"Ļ";s:3:"ļ";s:2:"ļ";s:3:"Ľ";s:2:"Ľ";s:3:"ľ";s:2:"ľ";s:3:"Ń";s:2:"Ń";s:3:"ń";s:2:"ń";s:3:"Ņ";s:2:"Ņ";s:3:"ņ";s:2:"ņ";s:3:"Ň";s:2:"Ň";s:3:"ň";s:2:"ň";s:3:"Ō";s:2:"Ō";s:3:"ō";s:2:"ō";s:3:"Ŏ";s:2:"Ŏ";s:3:"ŏ";s:2:"ŏ";s:3:"Ő";s:2:"Ő";s:3:"ő";s:2:"ő";s:3:"Ŕ";s:2:"Ŕ";s:3:"ŕ";s:2:"ŕ";s:3:"Ŗ";s:2:"Ŗ";s:3:"ŗ";s:2:"ŗ";s:3:"Ř";s:2:"Ř";s:3:"ř";s:2:"ř";s:3:"Ś";s:2:"Ś";s:3:"ś";s:2:"ś";s:3:"Ŝ";s:2:"Ŝ";s:3:"ŝ";s:2:"ŝ";s:3:"Ş";s:2:"Ş";s:3:"ş";s:2:"ş";s:3:"Š";s:2:"Š";s:3:"š";s:2:"š";s:3:"Ţ";s:2:"Ţ";s:3:"ţ";s:2:"ţ";s:3:"Ť";s:2:"Ť";s:3:"ť";s:2:"ť";s:3:"Ũ";s:2:"Ũ";s:3:"ũ";s:2:"ũ";s:3:"Ū";s:2:"Ū";s:3:"ū";s:2:"ū";s:3:"Ŭ";s:2:"Ŭ";s:3:"ŭ";s:2:"ŭ";s:3:"Ů";s:2:"Ů";s:3:"ů";s:2:"ů";s:3:"Ű";s:2:"Ű";s:3:"ű";s:2:"ű";s:3:"Ų";s:2:"Ų";s:3:"ų";s:2:"ų";s:3:"Ŵ";s:2:"Ŵ";s:3:"ŵ";s:2:"ŵ";s:3:"Ŷ";s:2:"Ŷ";s:3:"ŷ";s:2:"ŷ";s:3:"Ÿ";s:2:"Ÿ";s:3:"Ź";s:2:"Ź";s:3:"ź";s:2:"ź";s:3:"Ż";s:2:"Ż";s:3:"ż";s:2:"ż";s:3:"Ž";s:2:"Ž";s:3:"ž";s:2:"ž";s:3:"Ơ";s:2:"Ơ";s:3:"ơ";s:2:"ơ";s:3:"Ư";s:2:"Ư";s:3:"ư";s:2:"ư";s:3:"Ǎ";s:2:"Ǎ";s:3:"ǎ";s:2:"ǎ";s:3:"Ǐ";s:2:"Ǐ";s:3:"ǐ";s:2:"ǐ";s:3:"Ǒ";s:2:"Ǒ";s:3:"ǒ";s:2:"ǒ";s:3:"Ǔ";s:2:"Ǔ";s:3:"ǔ";s:2:"ǔ";s:4:"Ǖ";s:2:"Ǖ";s:4:"ǖ";s:2:"ǖ";s:4:"Ǘ";s:2:"Ǘ";s:4:"ǘ";s:2:"ǘ";s:4:"Ǚ";s:2:"Ǚ";s:4:"ǚ";s:2:"ǚ";s:4:"Ǜ";s:2:"Ǜ";s:4:"ǜ";s:2:"ǜ";s:4:"Ǟ";s:2:"Ǟ";s:4:"ǟ";s:2:"ǟ";s:4:"Ǡ";s:2:"Ǡ";s:4:"ǡ";s:2:"ǡ";s:4:"Ǣ";s:2:"Ǣ";s:4:"ǣ";s:2:"ǣ";s:3:"Ǧ";s:2:"Ǧ";s:3:"ǧ";s:2:"ǧ";s:3:"Ǩ";s:2:"Ǩ";s:3:"ǩ";s:2:"ǩ";s:3:"Ǫ";s:2:"Ǫ";s:3:"ǫ";s:2:"ǫ";s:4:"Ǭ";s:2:"Ǭ";s:4:"ǭ";s:2:"ǭ";s:4:"Ǯ";s:2:"Ǯ";s:4:"ǯ";s:2:"ǯ";s:3:"ǰ";s:2:"ǰ";s:3:"Ǵ";s:2:"Ǵ";s:3:"ǵ";s:2:"ǵ";s:3:"Ǹ";s:2:"Ǹ";s:3:"ǹ";s:2:"ǹ";s:4:"Ǻ";s:2:"Ǻ";s:4:"ǻ";s:2:"ǻ";s:4:"Ǽ";s:2:"Ǽ";s:4:"ǽ";s:2:"ǽ";s:4:"Ǿ";s:2:"Ǿ";s:4:"ǿ";s:2:"ǿ";s:3:"Ȁ";s:2:"Ȁ";s:3:"ȁ";s:2:"ȁ";s:3:"Ȃ";s:2:"Ȃ";s:3:"ȃ";s:2:"ȃ";s:3:"Ȅ";s:2:"Ȅ";s:3:"ȅ";s:2:"ȅ";s:3:"Ȇ";s:2:"Ȇ";s:3:"ȇ";s:2:"ȇ";s:3:"Ȉ";s:2:"Ȉ";s:3:"ȉ";s:2:"ȉ";s:3:"Ȋ";s:2:"Ȋ";s:3:"ȋ";s:2:"ȋ";s:3:"Ȍ";s:2:"Ȍ";s:3:"ȍ";s:2:"ȍ";s:3:"Ȏ";s:2:"Ȏ";s:3:"ȏ";s:2:"ȏ";s:3:"Ȑ";s:2:"Ȑ";s:3:"ȑ";s:2:"ȑ";s:3:"Ȓ";s:2:"Ȓ";s:3:"ȓ";s:2:"ȓ";s:3:"Ȕ";s:2:"Ȕ";s:3:"ȕ";s:2:"ȕ";s:3:"Ȗ";s:2:"Ȗ";s:3:"ȗ";s:2:"ȗ";s:3:"Ș";s:2:"Ș";s:3:"ș";s:2:"ș";s:3:"Ț";s:2:"Ț";s:3:"ț";s:2:"ț";s:3:"Ȟ";s:2:"Ȟ";s:3:"ȟ";s:2:"ȟ";s:3:"Ȧ";s:2:"Ȧ";s:3:"ȧ";s:2:"ȧ";s:3:"Ȩ";s:2:"Ȩ";s:3:"ȩ";s:2:"ȩ";s:4:"Ȫ";s:2:"Ȫ";s:4:"ȫ";s:2:"ȫ";s:4:"Ȭ";s:2:"Ȭ";s:4:"ȭ";s:2:"ȭ";s:3:"Ȯ";s:2:"Ȯ";s:3:"ȯ";s:2:"ȯ";s:4:"Ȱ";s:2:"Ȱ";s:4:"ȱ";s:2:"ȱ";s:3:"Ȳ";s:2:"Ȳ";s:3:"ȳ";s:2:"ȳ";s:2:"̀";s:2:"̀";s:2:"́";s:2:"́";s:2:"̓";s:2:"̓";s:4:"̈́";s:2:"̈́";s:2:"ʹ";s:2:"ʹ";s:1:";";s:2:";";s:4:"΅";s:2:"΅";s:4:"Ά";s:2:"Ά";s:2:"·";s:2:"·";s:4:"Έ";s:2:"Έ";s:4:"Ή";s:2:"Ή";s:4:"Ί";s:2:"Ί";s:4:"Ό";s:2:"Ό";s:4:"Ύ";s:2:"Ύ";s:4:"Ώ";s:2:"Ώ";s:4:"ΐ";s:2:"ΐ";s:4:"Ϊ";s:2:"Ϊ";s:4:"Ϋ";s:2:"Ϋ";s:4:"ά";s:2:"ά";s:4:"έ";s:2:"έ";s:4:"ή";s:2:"ή";s:4:"ί";s:2:"ί";s:4:"ΰ";s:2:"ΰ";s:4:"ϊ";s:2:"ϊ";s:4:"ϋ";s:2:"ϋ";s:4:"ό";s:2:"ό";s:4:"ύ";s:2:"ύ";s:4:"ώ";s:2:"ώ";s:4:"ϓ";s:2:"ϓ";s:4:"ϔ";s:2:"ϔ";s:4:"Ѐ";s:2:"Ѐ";s:4:"Ё";s:2:"Ё";s:4:"Ѓ";s:2:"Ѓ";s:4:"Ї";s:2:"Ї";s:4:"Ќ";s:2:"Ќ";s:4:"Ѝ";s:2:"Ѝ";s:4:"Ў";s:2:"Ў";s:4:"Й";s:2:"Й";s:4:"й";s:2:"й";s:4:"ѐ";s:2:"ѐ";s:4:"ё";s:2:"ё";s:4:"ѓ";s:2:"ѓ";s:4:"ї";s:2:"ї";s:4:"ќ";s:2:"ќ";s:4:"ѝ";s:2:"ѝ";s:4:"ў";s:2:"ў";s:4:"Ѷ";s:2:"Ѷ";s:4:"ѷ";s:2:"ѷ";s:4:"Ӂ";s:2:"Ӂ";s:4:"ӂ";s:2:"ӂ";s:4:"Ӑ";s:2:"Ӑ";s:4:"ӑ";s:2:"ӑ";s:4:"Ӓ";s:2:"Ӓ";s:4:"ӓ";s:2:"ӓ";s:4:"Ӗ";s:2:"Ӗ";s:4:"ӗ";s:2:"ӗ";s:4:"Ӛ";s:2:"Ӛ";s:4:"ӛ";s:2:"ӛ";s:4:"Ӝ";s:2:"Ӝ";s:4:"ӝ";s:2:"ӝ";s:4:"Ӟ";s:2:"Ӟ";s:4:"ӟ";s:2:"ӟ";s:4:"Ӣ";s:2:"Ӣ";s:4:"ӣ";s:2:"ӣ";s:4:"Ӥ";s:2:"Ӥ";s:4:"ӥ";s:2:"ӥ";s:4:"Ӧ";s:2:"Ӧ";s:4:"ӧ";s:2:"ӧ";s:4:"Ӫ";s:2:"Ӫ";s:4:"ӫ";s:2:"ӫ";s:4:"Ӭ";s:2:"Ӭ";s:4:"ӭ";s:2:"ӭ";s:4:"Ӯ";s:2:"Ӯ";s:4:"ӯ";s:2:"ӯ";s:4:"Ӱ";s:2:"Ӱ";s:4:"ӱ";s:2:"ӱ";s:4:"Ӳ";s:2:"Ӳ";s:4:"ӳ";s:2:"ӳ";s:4:"Ӵ";s:2:"Ӵ";s:4:"ӵ";s:2:"ӵ";s:4:"Ӹ";s:2:"Ӹ";s:4:"ӹ";s:2:"ӹ";s:4:"آ";s:2:"آ";s:4:"أ";s:2:"أ";s:4:"ؤ";s:2:"ؤ";s:4:"إ";s:2:"إ";s:4:"ئ";s:2:"ئ";s:4:"ۀ";s:2:"ۀ";s:4:"ۂ";s:2:"ۂ";s:4:"ۓ";s:2:"ۓ";s:6:"ऩ";s:3:"ऩ";s:6:"ऱ";s:3:"ऱ";s:6:"ऴ";s:3:"ऴ";s:6:"ো";s:3:"ো";s:6:"ৌ";s:3:"ৌ";s:6:"ୈ";s:3:"ୈ";s:6:"ୋ";s:3:"ୋ";s:6:"ୌ";s:3:"ୌ";s:6:"ஔ";s:3:"ஔ";s:6:"ொ";s:3:"ொ";s:6:"ோ";s:3:"ோ";s:6:"ௌ";s:3:"ௌ";s:6:"ై";s:3:"ై";s:6:"ೀ";s:3:"ೀ";s:6:"ೇ";s:3:"ೇ";s:6:"ೈ";s:3:"ೈ";s:6:"ೊ";s:3:"ೊ";s:6:"ೋ";s:3:"ೋ";s:6:"ൊ";s:3:"ൊ";s:6:"ോ";s:3:"ോ";s:6:"ൌ";s:3:"ൌ";s:6:"ේ";s:3:"ේ";s:6:"ො";s:3:"ො";s:6:"ෝ";s:3:"ෝ";s:6:"ෞ";s:3:"ෞ";s:6:"ཱི";s:3:"ཱི";s:6:"ཱུ";s:3:"ཱུ";s:6:"ཱྀ";s:3:"ཱྀ";s:6:"ဦ";s:3:"ဦ";s:6:"ᬆ";s:3:"ᬆ";s:6:"ᬈ";s:3:"ᬈ";s:6:"ᬊ";s:3:"ᬊ";s:6:"ᬌ";s:3:"ᬌ";s:6:"ᬎ";s:3:"ᬎ";s:6:"ᬒ";s:3:"ᬒ";s:6:"ᬻ";s:3:"ᬻ";s:6:"ᬽ";s:3:"ᬽ";s:6:"ᭀ";s:3:"ᭀ";s:6:"ᭁ";s:3:"ᭁ";s:6:"ᭃ";s:3:"ᭃ";s:3:"Ḁ";s:3:"Ḁ";s:3:"ḁ";s:3:"ḁ";s:3:"Ḃ";s:3:"Ḃ";s:3:"ḃ";s:3:"ḃ";s:3:"Ḅ";s:3:"Ḅ";s:3:"ḅ";s:3:"ḅ";s:3:"Ḇ";s:3:"Ḇ";s:3:"ḇ";s:3:"ḇ";s:4:"Ḉ";s:3:"Ḉ";s:4:"ḉ";s:3:"ḉ";s:3:"Ḋ";s:3:"Ḋ";s:3:"ḋ";s:3:"ḋ";s:3:"Ḍ";s:3:"Ḍ";s:3:"ḍ";s:3:"ḍ";s:3:"Ḏ";s:3:"Ḏ";s:3:"ḏ";s:3:"ḏ";s:3:"Ḑ";s:3:"Ḑ";s:3:"ḑ";s:3:"ḑ";s:3:"Ḓ";s:3:"Ḓ";s:3:"ḓ";s:3:"ḓ";s:4:"Ḕ";s:3:"Ḕ";s:4:"ḕ";s:3:"ḕ";s:4:"Ḗ";s:3:"Ḗ";s:4:"ḗ";s:3:"ḗ";s:3:"Ḙ";s:3:"Ḙ";s:3:"ḙ";s:3:"ḙ";s:3:"Ḛ";s:3:"Ḛ";s:3:"ḛ";s:3:"ḛ";s:4:"Ḝ";s:3:"Ḝ";s:4:"ḝ";s:3:"ḝ";s:3:"Ḟ";s:3:"Ḟ";s:3:"ḟ";s:3:"ḟ";s:3:"Ḡ";s:3:"Ḡ";s:3:"ḡ";s:3:"ḡ";s:3:"Ḣ";s:3:"Ḣ";s:3:"ḣ";s:3:"ḣ";s:3:"Ḥ";s:3:"Ḥ";s:3:"ḥ";s:3:"ḥ";s:3:"Ḧ";s:3:"Ḧ";s:3:"ḧ";s:3:"ḧ";s:3:"Ḩ";s:3:"Ḩ";s:3:"ḩ";s:3:"ḩ";s:3:"Ḫ";s:3:"Ḫ";s:3:"ḫ";s:3:"ḫ";s:3:"Ḭ";s:3:"Ḭ";s:3:"ḭ";s:3:"ḭ";s:4:"Ḯ";s:3:"Ḯ";s:4:"ḯ";s:3:"ḯ";s:3:"Ḱ";s:3:"Ḱ";s:3:"ḱ";s:3:"ḱ";s:3:"Ḳ";s:3:"Ḳ";s:3:"ḳ";s:3:"ḳ";s:3:"Ḵ";s:3:"Ḵ";s:3:"ḵ";s:3:"ḵ";s:3:"Ḷ";s:3:"Ḷ";s:3:"ḷ";s:3:"ḷ";s:5:"Ḹ";s:3:"Ḹ";s:5:"ḹ";s:3:"ḹ";s:3:"Ḻ";s:3:"Ḻ";s:3:"ḻ";s:3:"ḻ";s:3:"Ḽ";s:3:"Ḽ";s:3:"ḽ";s:3:"ḽ";s:3:"Ḿ";s:3:"Ḿ";s:3:"ḿ";s:3:"ḿ";s:3:"Ṁ";s:3:"Ṁ";s:3:"ṁ";s:3:"ṁ";s:3:"Ṃ";s:3:"Ṃ";s:3:"ṃ";s:3:"ṃ";s:3:"Ṅ";s:3:"Ṅ";s:3:"ṅ";s:3:"ṅ";s:3:"Ṇ";s:3:"Ṇ";s:3:"ṇ";s:3:"ṇ";s:3:"Ṉ";s:3:"Ṉ";s:3:"ṉ";s:3:"ṉ";s:3:"Ṋ";s:3:"Ṋ";s:3:"ṋ";s:3:"ṋ";s:4:"Ṍ";s:3:"Ṍ";s:4:"ṍ";s:3:"ṍ";s:4:"Ṏ";s:3:"Ṏ";s:4:"ṏ";s:3:"ṏ";s:4:"Ṑ";s:3:"Ṑ";s:4:"ṑ";s:3:"ṑ";s:4:"Ṓ";s:3:"Ṓ";s:4:"ṓ";s:3:"ṓ";s:3:"Ṕ";s:3:"Ṕ";s:3:"ṕ";s:3:"ṕ";s:3:"Ṗ";s:3:"Ṗ";s:3:"ṗ";s:3:"ṗ";s:3:"Ṙ";s:3:"Ṙ";s:3:"ṙ";s:3:"ṙ";s:3:"Ṛ";s:3:"Ṛ";s:3:"ṛ";s:3:"ṛ";s:5:"Ṝ";s:3:"Ṝ";s:5:"ṝ";s:3:"ṝ";s:3:"Ṟ";s:3:"Ṟ";s:3:"ṟ";s:3:"ṟ";s:3:"Ṡ";s:3:"Ṡ";s:3:"ṡ";s:3:"ṡ";s:3:"Ṣ";s:3:"Ṣ";s:3:"ṣ";s:3:"ṣ";s:4:"Ṥ";s:3:"Ṥ";s:4:"ṥ";s:3:"ṥ";s:4:"Ṧ";s:3:"Ṧ";s:4:"ṧ";s:3:"ṧ";s:5:"Ṩ";s:3:"Ṩ";s:5:"ṩ";s:3:"ṩ";s:3:"Ṫ";s:3:"Ṫ";s:3:"ṫ";s:3:"ṫ";s:3:"Ṭ";s:3:"Ṭ";s:3:"ṭ";s:3:"ṭ";s:3:"Ṯ";s:3:"Ṯ";s:3:"ṯ";s:3:"ṯ";s:3:"Ṱ";s:3:"Ṱ";s:3:"ṱ";s:3:"ṱ";s:3:"Ṳ";s:3:"Ṳ";s:3:"ṳ";s:3:"ṳ";s:3:"Ṵ";s:3:"Ṵ";s:3:"ṵ";s:3:"ṵ";s:3:"Ṷ";s:3:"Ṷ";s:3:"ṷ";s:3:"ṷ";s:4:"Ṹ";s:3:"Ṹ";s:4:"ṹ";s:3:"ṹ";s:4:"Ṻ";s:3:"Ṻ";s:4:"ṻ";s:3:"ṻ";s:3:"Ṽ";s:3:"Ṽ";s:3:"ṽ";s:3:"ṽ";s:3:"Ṿ";s:3:"Ṿ";s:3:"ṿ";s:3:"ṿ";s:3:"Ẁ";s:3:"Ẁ";s:3:"ẁ";s:3:"ẁ";s:3:"Ẃ";s:3:"Ẃ";s:3:"ẃ";s:3:"ẃ";s:3:"Ẅ";s:3:"Ẅ";s:3:"ẅ";s:3:"ẅ";s:3:"Ẇ";s:3:"Ẇ";s:3:"ẇ";s:3:"ẇ";s:3:"Ẉ";s:3:"Ẉ";s:3:"ẉ";s:3:"ẉ";s:3:"Ẋ";s:3:"Ẋ";s:3:"ẋ";s:3:"ẋ";s:3:"Ẍ";s:3:"Ẍ";s:3:"ẍ";s:3:"ẍ";s:3:"Ẏ";s:3:"Ẏ";s:3:"ẏ";s:3:"ẏ";s:3:"Ẑ";s:3:"Ẑ";s:3:"ẑ";s:3:"ẑ";s:3:"Ẓ";s:3:"Ẓ";s:3:"ẓ";s:3:"ẓ";s:3:"Ẕ";s:3:"Ẕ";s:3:"ẕ";s:3:"ẕ";s:3:"ẖ";s:3:"ẖ";s:3:"ẗ";s:3:"ẗ";s:3:"ẘ";s:3:"ẘ";s:3:"ẙ";s:3:"ẙ";s:4:"ẛ";s:3:"ẛ";s:3:"Ạ";s:3:"Ạ";s:3:"ạ";s:3:"ạ";s:3:"Ả";s:3:"Ả";s:3:"ả";s:3:"ả";s:4:"Ấ";s:3:"Ấ";s:4:"ấ";s:3:"ấ";s:4:"Ầ";s:3:"Ầ";s:4:"ầ";s:3:"ầ";s:4:"Ẩ";s:3:"Ẩ";s:4:"ẩ";s:3:"ẩ";s:4:"Ẫ";s:3:"Ẫ";s:4:"ẫ";s:3:"ẫ";s:5:"Ậ";s:3:"Ậ";s:5:"ậ";s:3:"ậ";s:4:"Ắ";s:3:"Ắ";s:4:"ắ";s:3:"ắ";s:4:"Ằ";s:3:"Ằ";s:4:"ằ";s:3:"ằ";s:4:"Ẳ";s:3:"Ẳ";s:4:"ẳ";s:3:"ẳ";s:4:"Ẵ";s:3:"Ẵ";s:4:"ẵ";s:3:"ẵ";s:5:"Ặ";s:3:"Ặ";s:5:"ặ";s:3:"ặ";s:3:"Ẹ";s:3:"Ẹ";s:3:"ẹ";s:3:"ẹ";s:3:"Ẻ";s:3:"Ẻ";s:3:"ẻ";s:3:"ẻ";s:3:"Ẽ";s:3:"Ẽ";s:3:"ẽ";s:3:"ẽ";s:4:"Ế";s:3:"Ế";s:4:"ế";s:3:"ế";s:4:"Ề";s:3:"Ề";s:4:"ề";s:3:"ề";s:4:"Ể";s:3:"Ể";s:4:"ể";s:3:"ể";s:4:"Ễ";s:3:"Ễ";s:4:"ễ";s:3:"ễ";s:5:"Ệ";s:3:"Ệ";s:5:"ệ";s:3:"ệ";s:3:"Ỉ";s:3:"Ỉ";s:3:"ỉ";s:3:"ỉ";s:3:"Ị";s:3:"Ị";s:3:"ị";s:3:"ị";s:3:"Ọ";s:3:"Ọ";s:3:"ọ";s:3:"ọ";s:3:"Ỏ";s:3:"Ỏ";s:3:"ỏ";s:3:"ỏ";s:4:"Ố";s:3:"Ố";s:4:"ố";s:3:"ố";s:4:"Ồ";s:3:"Ồ";s:4:"ồ";s:3:"ồ";s:4:"Ổ";s:3:"Ổ";s:4:"ổ";s:3:"ổ";s:4:"Ỗ";s:3:"Ỗ";s:4:"ỗ";s:3:"ỗ";s:5:"Ộ";s:3:"Ộ";s:5:"ộ";s:3:"ộ";s:4:"Ớ";s:3:"Ớ";s:4:"ớ";s:3:"ớ";s:4:"Ờ";s:3:"Ờ";s:4:"ờ";s:3:"ờ";s:4:"Ở";s:3:"Ở";s:4:"ở";s:3:"ở";s:4:"Ỡ";s:3:"Ỡ";s:4:"ỡ";s:3:"ỡ";s:4:"Ợ";s:3:"Ợ";s:4:"ợ";s:3:"ợ";s:3:"Ụ";s:3:"Ụ";s:3:"ụ";s:3:"ụ";s:3:"Ủ";s:3:"Ủ";s:3:"ủ";s:3:"ủ";s:4:"Ứ";s:3:"Ứ";s:4:"ứ";s:3:"ứ";s:4:"Ừ";s:3:"Ừ";s:4:"ừ";s:3:"ừ";s:4:"Ử";s:3:"Ử";s:4:"ử";s:3:"ử";s:4:"Ữ";s:3:"Ữ";s:4:"ữ";s:3:"ữ";s:4:"Ự";s:3:"Ự";s:4:"ự";s:3:"ự";s:3:"Ỳ";s:3:"Ỳ";s:3:"ỳ";s:3:"ỳ";s:3:"Ỵ";s:3:"Ỵ";s:3:"ỵ";s:3:"ỵ";s:3:"Ỷ";s:3:"Ỷ";s:3:"ỷ";s:3:"ỷ";s:3:"Ỹ";s:3:"Ỹ";s:3:"ỹ";s:3:"ỹ";s:4:"ἀ";s:3:"ἀ";s:4:"ἁ";s:3:"ἁ";s:5:"ἂ";s:3:"ἂ";s:5:"ἃ";s:3:"ἃ";s:5:"ἄ";s:3:"ἄ";s:5:"ἅ";s:3:"ἅ";s:5:"ἆ";s:3:"ἆ";s:5:"ἇ";s:3:"ἇ";s:4:"Ἀ";s:3:"Ἀ";s:4:"Ἁ";s:3:"Ἁ";s:5:"Ἂ";s:3:"Ἂ";s:5:"Ἃ";s:3:"Ἃ";s:5:"Ἄ";s:3:"Ἄ";s:5:"Ἅ";s:3:"Ἅ";s:5:"Ἆ";s:3:"Ἆ";s:5:"Ἇ";s:3:"Ἇ";s:4:"ἐ";s:3:"ἐ";s:4:"ἑ";s:3:"ἑ";s:5:"ἒ";s:3:"ἒ";s:5:"ἓ";s:3:"ἓ";s:5:"ἔ";s:3:"ἔ";s:5:"ἕ";s:3:"ἕ";s:4:"Ἐ";s:3:"Ἐ";s:4:"Ἑ";s:3:"Ἑ";s:5:"Ἒ";s:3:"Ἒ";s:5:"Ἓ";s:3:"Ἓ";s:5:"Ἔ";s:3:"Ἔ";s:5:"Ἕ";s:3:"Ἕ";s:4:"ἠ";s:3:"ἠ";s:4:"ἡ";s:3:"ἡ";s:5:"ἢ";s:3:"ἢ";s:5:"ἣ";s:3:"ἣ";s:5:"ἤ";s:3:"ἤ";s:5:"ἥ";s:3:"ἥ";s:5:"ἦ";s:3:"ἦ";s:5:"ἧ";s:3:"ἧ";s:4:"Ἠ";s:3:"Ἠ";s:4:"Ἡ";s:3:"Ἡ";s:5:"Ἢ";s:3:"Ἢ";s:5:"Ἣ";s:3:"Ἣ";s:5:"Ἤ";s:3:"Ἤ";s:5:"Ἥ";s:3:"Ἥ";s:5:"Ἦ";s:3:"Ἦ";s:5:"Ἧ";s:3:"Ἧ";s:4:"ἰ";s:3:"ἰ";s:4:"ἱ";s:3:"ἱ";s:5:"ἲ";s:3:"ἲ";s:5:"ἳ";s:3:"ἳ";s:5:"ἴ";s:3:"ἴ";s:5:"ἵ";s:3:"ἵ";s:5:"ἶ";s:3:"ἶ";s:5:"ἷ";s:3:"ἷ";s:4:"Ἰ";s:3:"Ἰ";s:4:"Ἱ";s:3:"Ἱ";s:5:"Ἲ";s:3:"Ἲ";s:5:"Ἳ";s:3:"Ἳ";s:5:"Ἴ";s:3:"Ἴ";s:5:"Ἵ";s:3:"Ἵ";s:5:"Ἶ";s:3:"Ἶ";s:5:"Ἷ";s:3:"Ἷ";s:4:"ὀ";s:3:"ὀ";s:4:"ὁ";s:3:"ὁ";s:5:"ὂ";s:3:"ὂ";s:5:"ὃ";s:3:"ὃ";s:5:"ὄ";s:3:"ὄ";s:5:"ὅ";s:3:"ὅ";s:4:"Ὀ";s:3:"Ὀ";s:4:"Ὁ";s:3:"Ὁ";s:5:"Ὂ";s:3:"Ὂ";s:5:"Ὃ";s:3:"Ὃ";s:5:"Ὄ";s:3:"Ὄ";s:5:"Ὅ";s:3:"Ὅ";s:4:"ὐ";s:3:"ὐ";s:4:"ὑ";s:3:"ὑ";s:5:"ὒ";s:3:"ὒ";s:5:"ὓ";s:3:"ὓ";s:5:"ὔ";s:3:"ὔ";s:5:"ὕ";s:3:"ὕ";s:5:"ὖ";s:3:"ὖ";s:5:"ὗ";s:3:"ὗ";s:4:"Ὑ";s:3:"Ὑ";s:5:"Ὓ";s:3:"Ὓ";s:5:"Ὕ";s:3:"Ὕ";s:5:"Ὗ";s:3:"Ὗ";s:4:"ὠ";s:3:"ὠ";s:4:"ὡ";s:3:"ὡ";s:5:"ὢ";s:3:"ὢ";s:5:"ὣ";s:3:"ὣ";s:5:"ὤ";s:3:"ὤ";s:5:"ὥ";s:3:"ὥ";s:5:"ὦ";s:3:"ὦ";s:5:"ὧ";s:3:"ὧ";s:4:"Ὠ";s:3:"Ὠ";s:4:"Ὡ";s:3:"Ὡ";s:5:"Ὢ";s:3:"Ὢ";s:5:"Ὣ";s:3:"Ὣ";s:5:"Ὤ";s:3:"Ὤ";s:5:"Ὥ";s:3:"Ὥ";s:5:"Ὦ";s:3:"Ὦ";s:5:"Ὧ";s:3:"Ὧ";s:4:"ὰ";s:3:"ὰ";s:2:"ά";s:3:"ά";s:4:"ὲ";s:3:"ὲ";s:2:"έ";s:3:"έ";s:4:"ὴ";s:3:"ὴ";s:2:"ή";s:3:"ή";s:4:"ὶ";s:3:"ὶ";s:2:"ί";s:3:"ί";s:4:"ὸ";s:3:"ὸ";s:2:"ό";s:3:"ό";s:4:"ὺ";s:3:"ὺ";s:2:"ύ";s:3:"ύ";s:4:"ὼ";s:3:"ὼ";s:2:"ώ";s:3:"ώ";s:5:"ᾀ";s:3:"ᾀ";s:5:"ᾁ";s:3:"ᾁ";s:5:"ᾂ";s:3:"ᾂ";s:5:"ᾃ";s:3:"ᾃ";s:5:"ᾄ";s:3:"ᾄ";s:5:"ᾅ";s:3:"ᾅ";s:5:"ᾆ";s:3:"ᾆ";s:5:"ᾇ";s:3:"ᾇ";s:5:"ᾈ";s:3:"ᾈ";s:5:"ᾉ";s:3:"ᾉ";s:5:"ᾊ";s:3:"ᾊ";s:5:"ᾋ";s:3:"ᾋ";s:5:"ᾌ";s:3:"ᾌ";s:5:"ᾍ";s:3:"ᾍ";s:5:"ᾎ";s:3:"ᾎ";s:5:"ᾏ";s:3:"ᾏ";s:5:"ᾐ";s:3:"ᾐ";s:5:"ᾑ";s:3:"ᾑ";s:5:"ᾒ";s:3:"ᾒ";s:5:"ᾓ";s:3:"ᾓ";s:5:"ᾔ";s:3:"ᾔ";s:5:"ᾕ";s:3:"ᾕ";s:5:"ᾖ";s:3:"ᾖ";s:5:"ᾗ";s:3:"ᾗ";s:5:"ᾘ";s:3:"ᾘ";s:5:"ᾙ";s:3:"ᾙ";s:5:"ᾚ";s:3:"ᾚ";s:5:"ᾛ";s:3:"ᾛ";s:5:"ᾜ";s:3:"ᾜ";s:5:"ᾝ";s:3:"ᾝ";s:5:"ᾞ";s:3:"ᾞ";s:5:"ᾟ";s:3:"ᾟ";s:5:"ᾠ";s:3:"ᾠ";s:5:"ᾡ";s:3:"ᾡ";s:5:"ᾢ";s:3:"ᾢ";s:5:"ᾣ";s:3:"ᾣ";s:5:"ᾤ";s:3:"ᾤ";s:5:"ᾥ";s:3:"ᾥ";s:5:"ᾦ";s:3:"ᾦ";s:5:"ᾧ";s:3:"ᾧ";s:5:"ᾨ";s:3:"ᾨ";s:5:"ᾩ";s:3:"ᾩ";s:5:"ᾪ";s:3:"ᾪ";s:5:"ᾫ";s:3:"ᾫ";s:5:"ᾬ";s:3:"ᾬ";s:5:"ᾭ";s:3:"ᾭ";s:5:"ᾮ";s:3:"ᾮ";s:5:"ᾯ";s:3:"ᾯ";s:4:"ᾰ";s:3:"ᾰ";s:4:"ᾱ";s:3:"ᾱ";s:5:"ᾲ";s:3:"ᾲ";s:4:"ᾳ";s:3:"ᾳ";s:4:"ᾴ";s:3:"ᾴ";s:4:"ᾶ";s:3:"ᾶ";s:5:"ᾷ";s:3:"ᾷ";s:4:"Ᾰ";s:3:"Ᾰ";s:4:"Ᾱ";s:3:"Ᾱ";s:4:"Ὰ";s:3:"Ὰ";s:2:"Ά";s:3:"Ά";s:4:"ᾼ";s:3:"ᾼ";s:2:"ι";s:3:"ι";s:4:"῁";s:3:"῁";s:5:"ῂ";s:3:"ῂ";s:4:"ῃ";s:3:"ῃ";s:4:"ῄ";s:3:"ῄ";s:4:"ῆ";s:3:"ῆ";s:5:"ῇ";s:3:"ῇ";s:4:"Ὲ";s:3:"Ὲ";s:2:"Έ";s:3:"Έ";s:4:"Ὴ";s:3:"Ὴ";s:2:"Ή";s:3:"Ή";s:4:"ῌ";s:3:"ῌ";s:5:"῍";s:3:"῍";s:5:"῎";s:3:"῎";s:5:"῏";s:3:"῏";s:4:"ῐ";s:3:"ῐ";s:4:"ῑ";s:3:"ῑ";s:4:"ῒ";s:3:"ῒ";s:2:"ΐ";s:3:"ΐ";s:4:"ῖ";s:3:"ῖ";s:4:"ῗ";s:3:"ῗ";s:4:"Ῐ";s:3:"Ῐ";s:4:"Ῑ";s:3:"Ῑ";s:4:"Ὶ";s:3:"Ὶ";s:2:"Ί";s:3:"Ί";s:5:"῝";s:3:"῝";s:5:"῞";s:3:"῞";s:5:"῟";s:3:"῟";s:4:"ῠ";s:3:"ῠ";s:4:"ῡ";s:3:"ῡ";s:4:"ῢ";s:3:"ῢ";s:2:"ΰ";s:3:"ΰ";s:4:"ῤ";s:3:"ῤ";s:4:"ῥ";s:3:"ῥ";s:4:"ῦ";s:3:"ῦ";s:4:"ῧ";s:3:"ῧ";s:4:"Ῠ";s:3:"Ῠ";s:4:"Ῡ";s:3:"Ῡ";s:4:"Ὺ";s:3:"Ὺ";s:2:"Ύ";s:3:"Ύ";s:4:"Ῥ";s:3:"Ῥ";s:4:"῭";s:3:"῭";s:2:"΅";s:3:"΅";s:1:"`";s:3:"`";s:5:"ῲ";s:3:"ῲ";s:4:"ῳ";s:3:"ῳ";s:4:"ῴ";s:3:"ῴ";s:4:"ῶ";s:3:"ῶ";s:5:"ῷ";s:3:"ῷ";s:4:"Ὸ";s:3:"Ὸ";s:2:"Ό";s:3:"Ό";s:4:"Ὼ";s:3:"Ὼ";s:2:"Ώ";s:3:"Ώ";s:4:"ῼ";s:3:"ῼ";s:2:"´";s:3:"´";s:3:" ";s:3:" ";s:3:" ";s:3:" ";s:2:"Ω";s:3:"Ω";s:1:"K";s:3:"K";s:2:"Å";s:3:"Å";s:5:"↚";s:3:"↚";s:5:"↛";s:3:"↛";s:5:"↮";s:3:"↮";s:5:"⇍";s:3:"⇍";s:5:"⇎";s:3:"⇎";s:5:"⇏";s:3:"⇏";s:5:"∄";s:3:"∄";s:5:"∉";s:3:"∉";s:5:"∌";s:3:"∌";s:5:"∤";s:3:"∤";s:5:"∦";s:3:"∦";s:5:"≁";s:3:"≁";s:5:"≄";s:3:"≄";s:5:"≇";s:3:"≇";s:5:"≉";s:3:"≉";s:3:"≠";s:3:"≠";s:5:"≢";s:3:"≢";s:5:"≭";s:3:"≭";s:3:"≮";s:3:"≮";s:3:"≯";s:3:"≯";s:5:"≰";s:3:"≰";s:5:"≱";s:3:"≱";s:5:"≴";s:3:"≴";s:5:"≵";s:3:"≵";s:5:"≸";s:3:"≸";s:5:"≹";s:3:"≹";s:5:"⊀";s:3:"⊀";s:5:"⊁";s:3:"⊁";s:5:"⊄";s:3:"⊄";s:5:"⊅";s:3:"⊅";s:5:"⊈";s:3:"⊈";s:5:"⊉";s:3:"⊉";s:5:"⊬";s:3:"⊬";s:5:"⊭";s:3:"⊭";s:5:"⊮";s:3:"⊮";s:5:"⊯";s:3:"⊯";s:5:"⋠";s:3:"⋠";s:5:"⋡";s:3:"⋡";s:5:"⋢";s:3:"⋢";s:5:"⋣";s:3:"⋣";s:5:"⋪";s:3:"⋪";s:5:"⋫";s:3:"⋫";s:5:"⋬";s:3:"⋬";s:5:"⋭";s:3:"⋭";s:3:"〈";s:3:"〈";s:3:"〉";s:3:"〉";s:6:"が";s:3:"が";s:6:"ぎ";s:3:"ぎ";s:6:"ぐ";s:3:"ぐ";s:6:"げ";s:3:"げ";s:6:"ご";s:3:"ご";s:6:"ざ";s:3:"ざ";s:6:"じ";s:3:"じ";s:6:"ず";s:3:"ず";s:6:"ぜ";s:3:"ぜ";s:6:"ぞ";s:3:"ぞ";s:6:"だ";s:3:"だ";s:6:"ぢ";s:3:"ぢ";s:6:"づ";s:3:"づ";s:6:"で";s:3:"で";s:6:"ど";s:3:"ど";s:6:"ば";s:3:"ば";s:6:"ぱ";s:3:"ぱ";s:6:"び";s:3:"び";s:6:"ぴ";s:3:"ぴ";s:6:"ぶ";s:3:"ぶ";s:6:"ぷ";s:3:"ぷ";s:6:"べ";s:3:"べ";s:6:"ぺ";s:3:"ぺ";s:6:"ぼ";s:3:"ぼ";s:6:"ぽ";s:3:"ぽ";s:6:"ゔ";s:3:"ゔ";s:6:"ゞ";s:3:"ゞ";s:6:"ガ";s:3:"ガ";s:6:"ギ";s:3:"ギ";s:6:"グ";s:3:"グ";s:6:"ゲ";s:3:"ゲ";s:6:"ゴ";s:3:"ゴ";s:6:"ザ";s:3:"ザ";s:6:"ジ";s:3:"ジ";s:6:"ズ";s:3:"ズ";s:6:"ゼ";s:3:"ゼ";s:6:"ゾ";s:3:"ゾ";s:6:"ダ";s:3:"ダ";s:6:"ヂ";s:3:"ヂ";s:6:"ヅ";s:3:"ヅ";s:6:"デ";s:3:"デ";s:6:"ド";s:3:"ド";s:6:"バ";s:3:"バ";s:6:"パ";s:3:"パ";s:6:"ビ";s:3:"ビ";s:6:"ピ";s:3:"ピ";s:6:"ブ";s:3:"ブ";s:6:"プ";s:3:"プ";s:6:"ベ";s:3:"ベ";s:6:"ペ";s:3:"ペ";s:6:"ボ";s:3:"ボ";s:6:"ポ";s:3:"ポ";s:6:"ヴ";s:3:"ヴ";s:6:"ヷ";s:3:"ヷ";s:6:"ヸ";s:3:"ヸ";s:6:"ヹ";s:3:"ヹ";s:6:"ヺ";s:3:"ヺ";s:6:"ヾ";s:3:"ヾ";s:3:"豈";s:3:"豈";s:3:"更";s:3:"更";s:3:"車";s:3:"車";s:3:"賈";s:3:"賈";s:3:"滑";s:3:"滑";s:3:"串";s:3:"串";s:3:"句";s:3:"句";s:3:"龜";s:3:"龜";s:3:"契";s:3:"契";s:3:"金";s:3:"金";s:3:"喇";s:3:"喇";s:3:"奈";s:3:"奈";s:3:"懶";s:4:"懶";s:3:"癩";s:3:"癩";s:3:"羅";s:3:"羅";s:3:"蘿";s:3:"蘿";s:3:"螺";s:3:"螺";s:3:"裸";s:3:"裸";s:3:"邏";s:3:"邏";s:3:"樂";s:3:"樂";s:3:"洛";s:3:"洛";s:3:"烙";s:3:"烙";s:3:"珞";s:3:"珞";s:3:"落";s:3:"落";s:3:"酪";s:3:"酪";s:3:"駱";s:3:"駱";s:3:"亂";s:3:"亂";s:3:"卵";s:3:"卵";s:3:"欄";s:3:"欄";s:3:"爛";s:3:"爛";s:3:"蘭";s:3:"蘭";s:3:"鸞";s:3:"鸞";s:3:"嵐";s:3:"嵐";s:3:"濫";s:3:"濫";s:3:"藍";s:3:"藍";s:3:"襤";s:3:"襤";s:3:"拉";s:3:"拉";s:3:"臘";s:3:"臘";s:3:"蠟";s:3:"蠟";s:3:"廊";s:4:"廊";s:3:"朗";s:4:"朗";s:3:"浪";s:3:"浪";s:3:"狼";s:3:"狼";s:3:"郎";s:3:"郎";s:3:"來";s:3:"來";s:3:"冷";s:3:"冷";s:3:"勞";s:3:"勞";s:3:"擄";s:3:"擄";s:3:"櫓";s:3:"櫓";s:3:"爐";s:3:"爐";s:3:"盧";s:3:"盧";s:3:"老";s:3:"老";s:3:"蘆";s:3:"蘆";s:3:"虜";s:4:"虜";s:3:"路";s:3:"路";s:3:"露";s:3:"露";s:3:"魯";s:3:"魯";s:3:"鷺";s:3:"鷺";s:3:"碌";s:4:"碌";s:3:"祿";s:3:"祿";s:3:"綠";s:3:"綠";s:3:"菉";s:3:"菉";s:3:"錄";s:3:"錄";s:3:"鹿";s:3:"鹿";s:3:"論";s:3:"論";s:3:"壟";s:3:"壟";s:3:"弄";s:3:"弄";s:3:"籠";s:3:"籠";s:3:"聾";s:3:"聾";s:3:"牢";s:3:"牢";s:3:"磊";s:3:"磊";s:3:"賂";s:3:"賂";s:3:"雷";s:3:"雷";s:3:"壘";s:3:"壘";s:3:"屢";s:3:"屢";s:3:"樓";s:3:"樓";s:3:"淚";s:3:"淚";s:3:"漏";s:3:"漏";s:3:"累";s:3:"累";s:3:"縷";s:3:"縷";s:3:"陋";s:3:"陋";s:3:"勒";s:3:"勒";s:3:"肋";s:3:"肋";s:3:"凜";s:3:"凜";s:3:"凌";s:3:"凌";s:3:"稜";s:3:"稜";s:3:"綾";s:3:"綾";s:3:"菱";s:3:"菱";s:3:"陵";s:3:"陵";s:3:"讀";s:3:"讀";s:3:"拏";s:3:"拏";s:3:"諾";s:3:"諾";s:3:"丹";s:3:"丹";s:3:"寧";s:4:"寧";s:3:"怒";s:3:"怒";s:3:"率";s:3:"率";s:3:"異";s:4:"異";s:3:"北";s:4:"北";s:3:"磻";s:3:"磻";s:3:"便";s:3:"便";s:3:"復";s:3:"復";s:3:"不";s:3:"不";s:3:"泌";s:3:"泌";s:3:"數";s:3:"數";s:3:"索";s:3:"索";s:3:"參";s:3:"參";s:3:"塞";s:3:"塞";s:3:"省";s:3:"省";s:3:"葉";s:3:"葉";s:3:"說";s:3:"說";s:3:"殺";s:4:"殺";s:3:"辰";s:3:"辰";s:3:"沈";s:3:"沈";s:3:"拾";s:3:"拾";s:3:"若";s:4:"若";s:3:"掠";s:3:"掠";s:3:"略";s:3:"略";s:3:"亮";s:3:"亮";s:3:"兩";s:3:"兩";s:3:"凉";s:3:"凉";s:3:"梁";s:3:"梁";s:3:"糧";s:3:"糧";s:3:"良";s:3:"良";s:3:"諒";s:3:"諒";s:3:"量";s:3:"量";s:3:"勵";s:3:"勵";s:3:"呂";s:3:"呂";s:3:"女";s:3:"女";s:3:"廬";s:3:"廬";s:3:"旅";s:3:"旅";s:3:"濾";s:3:"濾";s:3:"礪";s:3:"礪";s:3:"閭";s:3:"閭";s:3:"驪";s:3:"驪";s:3:"麗";s:3:"麗";s:3:"黎";s:3:"黎";s:3:"力";s:3:"力";s:3:"曆";s:3:"曆";s:3:"歷";s:3:"歷";s:3:"轢";s:3:"轢";s:3:"年";s:3:"年";s:3:"憐";s:3:"憐";s:3:"戀";s:3:"戀";s:3:"撚";s:3:"撚";s:3:"漣";s:3:"漣";s:3:"煉";s:3:"煉";s:3:"璉";s:3:"璉";s:3:"秊";s:3:"秊";s:3:"練";s:3:"練";s:3:"聯";s:3:"聯";s:3:"輦";s:3:"輦";s:3:"蓮";s:3:"蓮";s:3:"連";s:3:"連";s:3:"鍊";s:3:"鍊";s:3:"列";s:3:"列";s:3:"劣";s:3:"劣";s:3:"咽";s:3:"咽";s:3:"烈";s:3:"烈";s:3:"裂";s:3:"裂";s:3:"廉";s:3:"廉";s:3:"念";s:3:"念";s:3:"捻";s:3:"捻";s:3:"殮";s:3:"殮";s:3:"簾";s:3:"簾";s:3:"獵";s:3:"獵";s:3:"令";s:3:"令";s:3:"囹";s:3:"囹";s:3:"嶺";s:3:"嶺";s:3:"怜";s:3:"怜";s:3:"玲";s:3:"玲";s:3:"瑩";s:3:"瑩";s:3:"羚";s:3:"羚";s:3:"聆";s:3:"聆";s:3:"鈴";s:3:"鈴";s:3:"零";s:3:"零";s:3:"靈";s:3:"靈";s:3:"領";s:3:"領";s:3:"例";s:3:"例";s:3:"禮";s:3:"禮";s:3:"醴";s:3:"醴";s:3:"隸";s:3:"隸";s:3:"惡";s:3:"惡";s:3:"了";s:3:"了";s:3:"僚";s:3:"僚";s:3:"寮";s:3:"寮";s:3:"尿";s:3:"尿";s:3:"料";s:3:"料";s:3:"燎";s:3:"燎";s:3:"療";s:3:"療";s:3:"蓼";s:3:"蓼";s:3:"遼";s:3:"遼";s:3:"龍";s:3:"龍";s:3:"暈";s:3:"暈";s:3:"阮";s:3:"阮";s:3:"劉";s:3:"劉";s:3:"杻";s:3:"杻";s:3:"柳";s:3:"柳";s:3:"流";s:4:"流";s:3:"溜";s:3:"溜";s:3:"琉";s:3:"琉";s:3:"留";s:3:"留";s:3:"硫";s:3:"硫";s:3:"紐";s:3:"紐";s:3:"類";s:3:"類";s:3:"六";s:3:"六";s:3:"戮";s:3:"戮";s:3:"陸";s:3:"陸";s:3:"倫";s:3:"倫";s:3:"崙";s:3:"崙";s:3:"淪";s:3:"淪";s:3:"輪";s:3:"輪";s:3:"律";s:3:"律";s:3:"慄";s:3:"慄";s:3:"栗";s:3:"栗";s:3:"隆";s:3:"隆";s:3:"利";s:3:"利";s:3:"吏";s:3:"吏";s:3:"履";s:3:"履";s:3:"易";s:3:"易";s:3:"李";s:3:"李";s:3:"梨";s:3:"梨";s:3:"泥";s:3:"泥";s:3:"理";s:3:"理";s:3:"痢";s:3:"痢";s:3:"罹";s:3:"罹";s:3:"裏";s:3:"裏";s:3:"裡";s:3:"裡";s:3:"里";s:3:"里";s:3:"離";s:3:"離";s:3:"匿";s:3:"匿";s:3:"溺";s:3:"溺";s:3:"吝";s:3:"吝";s:3:"燐";s:3:"燐";s:3:"璘";s:3:"璘";s:3:"藺";s:3:"藺";s:3:"隣";s:3:"隣";s:3:"鱗";s:3:"鱗";s:3:"麟";s:3:"麟";s:3:"林";s:3:"林";s:3:"淋";s:3:"淋";s:3:"臨";s:3:"臨";s:3:"立";s:3:"立";s:3:"笠";s:3:"笠";s:3:"粒";s:3:"粒";s:3:"狀";s:3:"狀";s:3:"炙";s:3:"炙";s:3:"識";s:3:"識";s:3:"什";s:3:"什";s:3:"茶";s:3:"茶";s:3:"刺";s:3:"刺";s:3:"切";s:4:"切";s:3:"度";s:3:"度";s:3:"拓";s:3:"拓";s:3:"糖";s:3:"糖";s:3:"宅";s:3:"宅";s:3:"洞";s:3:"洞";s:3:"暴";s:3:"暴";s:3:"輻";s:3:"輻";s:3:"行";s:3:"行";s:3:"降";s:3:"降";s:3:"見";s:3:"見";s:3:"廓";s:3:"廓";s:3:"兀";s:3:"兀";s:3:"嗀";s:3:"嗀";s:3:"塚";s:3:"塚";s:3:"晴";s:3:"晴";s:3:"凞";s:3:"凞";s:3:"猪";s:3:"猪";s:3:"益";s:3:"益";s:3:"礼";s:3:"礼";s:3:"神";s:3:"神";s:3:"祥";s:3:"祥";s:3:"福";s:4:"福";s:3:"靖";s:3:"靖";s:3:"精";s:3:"精";s:3:"羽";s:3:"羽";s:3:"蘒";s:3:"蘒";s:3:"諸";s:3:"諸";s:3:"逸";s:3:"逸";s:3:"都";s:3:"都";s:3:"飯";s:3:"飯";s:3:"飼";s:3:"飼";s:3:"館";s:3:"館";s:3:"鶴";s:3:"鶴";s:3:"侮";s:4:"侮";s:3:"僧";s:4:"僧";s:3:"免";s:4:"免";s:3:"勉";s:4:"勉";s:3:"勤";s:4:"勤";s:3:"卑";s:4:"卑";s:3:"喝";s:3:"喝";s:3:"嘆";s:4:"嘆";s:3:"器";s:3:"器";s:3:"塀";s:3:"塀";s:3:"墨";s:3:"墨";s:3:"層";s:3:"層";s:3:"屮";s:4:"屮";s:3:"悔";s:4:"悔";s:3:"慨";s:3:"慨";s:3:"憎";s:4:"憎";s:3:"懲";s:4:"懲";s:3:"敏";s:4:"敏";s:3:"既";s:3:"既";s:3:"暑";s:4:"暑";s:3:"梅";s:4:"梅";s:3:"海";s:4:"海";s:3:"渚";s:3:"渚";s:3:"漢";s:3:"漢";s:3:"煮";s:3:"煮";s:3:"爫";s:3:"爫";s:3:"琢";s:3:"琢";s:3:"碑";s:3:"碑";s:3:"社";s:3:"社";s:3:"祉";s:3:"祉";s:3:"祈";s:3:"祈";s:3:"祐";s:3:"祐";s:3:"祖";s:4:"祖";s:3:"祝";s:3:"祝";s:3:"禍";s:3:"禍";s:3:"禎";s:3:"禎";s:3:"穀";s:4:"穀";s:3:"突";s:3:"突";s:3:"節";s:3:"節";s:3:"縉";s:3:"縉";s:3:"繁";s:3:"繁";s:3:"署";s:3:"署";s:3:"者";s:4:"者";s:3:"臭";s:3:"臭";s:3:"艹";s:3:"艹";s:3:"著";s:4:"著";s:3:"褐";s:3:"褐";s:3:"視";s:3:"視";s:3:"謁";s:3:"謁";s:3:"謹";s:3:"謹";s:3:"賓";s:3:"賓";s:3:"贈";s:3:"贈";s:3:"辶";s:3:"辶";s:3:"難";s:3:"難";s:3:"響";s:3:"響";s:3:"頻";s:3:"頻";s:3:"並";s:3:"並";s:3:"况";s:4:"况";s:3:"全";s:3:"全";s:3:"侀";s:3:"侀";s:3:"充";s:3:"充";s:3:"冀";s:3:"冀";s:3:"勇";s:4:"勇";s:3:"勺";s:4:"勺";s:3:"啕";s:3:"啕";s:3:"喙";s:4:"喙";s:3:"嗢";s:3:"嗢";s:3:"墳";s:3:"墳";s:3:"奄";s:3:"奄";s:3:"奔";s:3:"奔";s:3:"婢";s:3:"婢";s:3:"嬨";s:3:"嬨";s:3:"廒";s:3:"廒";s:3:"廙";s:3:"廙";s:3:"彩";s:3:"彩";s:3:"徭";s:3:"徭";s:3:"惘";s:3:"惘";s:3:"慎";s:4:"慎";s:3:"愈";s:3:"愈";s:3:"慠";s:3:"慠";s:3:"戴";s:3:"戴";s:3:"揄";s:3:"揄";s:3:"搜";s:3:"搜";s:3:"摒";s:3:"摒";s:3:"敖";s:3:"敖";s:3:"望";s:4:"望";s:3:"杖";s:3:"杖";s:3:"歹";s:3:"歹";s:3:"滛";s:3:"滛";s:3:"滋";s:4:"滋";s:3:"瀞";s:4:"瀞";s:3:"瞧";s:3:"瞧";s:3:"爵";s:4:"爵";s:3:"犯";s:3:"犯";s:3:"瑱";s:4:"瑱";s:3:"甆";s:3:"甆";s:3:"画";s:3:"画";s:3:"瘝";s:3:"瘝";s:3:"瘟";s:3:"瘟";s:3:"盛";s:3:"盛";s:3:"直";s:4:"直";s:3:"睊";s:4:"睊";s:3:"着";s:3:"着";s:3:"磌";s:4:"磌";s:3:"窱";s:3:"窱";s:3:"类";s:3:"类";s:3:"絛";s:3:"絛";s:3:"缾";s:3:"缾";s:3:"荒";s:3:"荒";s:3:"華";s:3:"華";s:3:"蝹";s:4:"蝹";s:3:"襁";s:3:"襁";s:3:"覆";s:3:"覆";s:3:"調";s:3:"調";s:3:"請";s:3:"請";s:3:"諭";s:4:"諭";s:3:"變";s:4:"變";s:3:"輸";s:4:"輸";s:3:"遲";s:3:"遲";s:3:"醙";s:3:"醙";s:3:"鉶";s:3:"鉶";s:3:"陼";s:3:"陼";s:3:"韛";s:3:"韛";s:3:"頋";s:4:"頋";s:3:"鬒";s:4:"鬒";s:4:"𢡊";s:3:"𢡊";s:4:"𢡄";s:3:"𢡄";s:4:"𣏕";s:3:"𣏕";s:3:"㮝";s:4:"㮝";s:3:"䀘";s:3:"䀘";s:3:"䀹";s:4:"䀹";s:4:"𥉉";s:3:"𥉉";s:4:"𥳐";s:3:"𥳐";s:4:"𧻓";s:3:"𧻓";s:3:"齃";s:3:"齃";s:3:"龎";s:3:"龎";s:3:"丽";s:4:"丽";s:3:"丸";s:4:"丸";s:3:"乁";s:4:"乁";s:4:"𠄢";s:4:"𠄢";s:3:"你";s:4:"你";s:3:"侻";s:4:"侻";s:3:"倂";s:4:"倂";s:3:"偺";s:4:"偺";s:3:"備";s:4:"備";s:3:"像";s:4:"像";s:3:"㒞";s:4:"㒞";s:4:"𠘺";s:4:"𠘺";s:3:"兔";s:4:"兔";s:3:"兤";s:4:"兤";s:3:"具";s:4:"具";s:4:"𠔜";s:4:"𠔜";s:3:"㒹";s:4:"㒹";s:3:"內";s:4:"內";s:3:"再";s:4:"再";s:4:"𠕋";s:4:"𠕋";s:3:"冗";s:4:"冗";s:3:"冤";s:4:"冤";s:3:"仌";s:4:"仌";s:3:"冬";s:4:"冬";s:4:"𩇟";s:4:"𩇟";s:3:"凵";s:4:"凵";s:3:"刃";s:4:"刃";s:3:"㓟";s:4:"㓟";s:3:"刻";s:4:"刻";s:3:"剆";s:4:"剆";s:3:"割";s:4:"割";s:3:"剷";s:4:"剷";s:3:"㔕";s:4:"㔕";s:3:"包";s:4:"包";s:3:"匆";s:4:"匆";s:3:"卉";s:4:"卉";s:3:"博";s:4:"博";s:3:"即";s:4:"即";s:3:"卽";s:4:"卽";s:3:"卿";s:4:"卿";s:4:"𠨬";s:4:"𠨬";s:3:"灰";s:4:"灰";s:3:"及";s:4:"及";s:3:"叟";s:4:"叟";s:4:"𠭣";s:4:"𠭣";s:3:"叫";s:4:"叫";s:3:"叱";s:4:"叱";s:3:"吆";s:4:"吆";s:3:"咞";s:4:"咞";s:3:"吸";s:4:"吸";s:3:"呈";s:4:"呈";s:3:"周";s:4:"周";s:3:"咢";s:4:"咢";s:3:"哶";s:4:"哶";s:3:"唐";s:4:"唐";s:3:"啓";s:4:"啓";s:3:"啣";s:4:"啣";s:3:"善";s:4:"善";s:3:"喫";s:4:"喫";s:3:"喳";s:4:"喳";s:3:"嗂";s:4:"嗂";s:3:"圖";s:4:"圖";s:3:"圗";s:4:"圗";s:3:"噑";s:4:"噑";s:3:"噴";s:4:"噴";s:3:"壮";s:4:"壮";s:3:"城";s:4:"城";s:3:"埴";s:4:"埴";s:3:"堍";s:4:"堍";s:3:"型";s:4:"型";s:3:"堲";s:4:"堲";s:3:"報";s:4:"報";s:3:"墬";s:4:"墬";s:4:"𡓤";s:4:"𡓤";s:3:"売";s:4:"売";s:3:"壷";s:4:"壷";s:3:"夆";s:4:"夆";s:3:"多";s:4:"多";s:3:"夢";s:4:"夢";s:3:"奢";s:4:"奢";s:4:"𡚨";s:4:"𡚨";s:4:"𡛪";s:4:"𡛪";s:3:"姬";s:4:"姬";s:3:"娛";s:4:"娛";s:3:"娧";s:4:"娧";s:3:"姘";s:4:"姘";s:3:"婦";s:4:"婦";s:3:"㛮";s:4:"㛮";s:3:"㛼";s:4:"㛼";s:3:"嬈";s:4:"嬈";s:3:"嬾";s:4:"嬾";s:4:"𡧈";s:4:"𡧈";s:3:"寃";s:4:"寃";s:3:"寘";s:4:"寘";s:3:"寳";s:4:"寳";s:4:"𡬘";s:4:"𡬘";s:3:"寿";s:4:"寿";s:3:"将";s:4:"将";s:3:"当";s:4:"当";s:3:"尢";s:4:"尢";s:3:"㞁";s:4:"㞁";s:3:"屠";s:4:"屠";s:3:"峀";s:4:"峀";s:3:"岍";s:4:"岍";s:4:"𡷤";s:4:"𡷤";s:3:"嵃";s:4:"嵃";s:4:"𡷦";s:4:"𡷦";s:3:"嵮";s:4:"嵮";s:3:"嵫";s:4:"嵫";s:3:"嵼";s:4:"嵼";s:3:"巡";s:4:"巡";s:3:"巢";s:4:"巢";s:3:"㠯";s:4:"㠯";s:3:"巽";s:4:"巽";s:3:"帨";s:4:"帨";s:3:"帽";s:4:"帽";s:3:"幩";s:4:"幩";s:3:"㡢";s:4:"㡢";s:4:"𢆃";s:4:"𢆃";s:3:"㡼";s:4:"㡼";s:3:"庰";s:4:"庰";s:3:"庳";s:4:"庳";s:3:"庶";s:4:"庶";s:4:"𪎒";s:4:"𪎒";s:3:"廾";s:4:"廾";s:4:"𢌱";s:4:"𢌱";s:3:"舁";s:4:"舁";s:3:"弢";s:4:"弢";s:3:"㣇";s:4:"㣇";s:4:"𣊸";s:4:"𣊸";s:4:"𦇚";s:4:"𦇚";s:3:"形";s:4:"形";s:3:"彫";s:4:"彫";s:3:"㣣";s:4:"㣣";s:3:"徚";s:4:"徚";s:3:"忍";s:4:"忍";s:3:"志";s:4:"志";s:3:"忹";s:4:"忹";s:3:"悁";s:4:"悁";s:3:"㤺";s:4:"㤺";s:3:"㤜";s:4:"㤜";s:4:"𢛔";s:4:"𢛔";s:3:"惇";s:4:"惇";s:3:"慈";s:4:"慈";s:3:"慌";s:4:"慌";s:3:"慺";s:4:"慺";s:3:"憲";s:4:"憲";s:3:"憤";s:4:"憤";s:3:"憯";s:4:"憯";s:3:"懞";s:4:"懞";s:3:"成";s:4:"成";s:3:"戛";s:4:"戛";s:3:"扝";s:4:"扝";s:3:"抱";s:4:"抱";s:3:"拔";s:4:"拔";s:3:"捐";s:4:"捐";s:4:"𢬌";s:4:"𢬌";s:3:"挽";s:4:"挽";s:3:"拼";s:4:"拼";s:3:"捨";s:4:"捨";s:3:"掃";s:4:"掃";s:3:"揤";s:4:"揤";s:4:"𢯱";s:4:"𢯱";s:3:"搢";s:4:"搢";s:3:"揅";s:4:"揅";s:3:"掩";s:4:"掩";s:3:"㨮";s:4:"㨮";s:3:"摩";s:4:"摩";s:3:"摾";s:4:"摾";s:3:"撝";s:4:"撝";s:3:"摷";s:4:"摷";s:3:"㩬";s:4:"㩬";s:3:"敬";s:4:"敬";s:4:"𣀊";s:4:"𣀊";s:3:"旣";s:4:"旣";s:3:"書";s:4:"書";s:3:"晉";s:4:"晉";s:3:"㬙";s:4:"㬙";s:3:"㬈";s:4:"㬈";s:3:"㫤";s:4:"㫤";s:3:"冒";s:4:"冒";s:3:"冕";s:4:"冕";s:3:"最";s:4:"最";s:3:"暜";s:4:"暜";s:3:"肭";s:4:"肭";s:3:"䏙";s:4:"䏙";s:3:"朡";s:4:"朡";s:3:"杞";s:4:"杞";s:3:"杓";s:4:"杓";s:4:"𣏃";s:4:"𣏃";s:3:"㭉";s:4:"㭉";s:3:"柺";s:4:"柺";s:3:"枅";s:4:"枅";s:3:"桒";s:4:"桒";s:4:"𣑭";s:4:"𣑭";s:3:"梎";s:4:"梎";s:3:"栟";s:4:"栟";s:3:"椔";s:4:"椔";s:3:"楂";s:4:"楂";s:3:"榣";s:4:"榣";s:3:"槪";s:4:"槪";s:3:"檨";s:4:"檨";s:4:"𣚣";s:4:"𣚣";s:3:"櫛";s:4:"櫛";s:3:"㰘";s:4:"㰘";s:3:"次";s:4:"次";s:4:"𣢧";s:4:"𣢧";s:3:"歔";s:4:"歔";s:3:"㱎";s:4:"㱎";s:3:"歲";s:4:"歲";s:3:"殟";s:4:"殟";s:3:"殻";s:4:"殻";s:4:"𣪍";s:4:"𣪍";s:4:"𡴋";s:4:"𡴋";s:4:"𣫺";s:4:"𣫺";s:3:"汎";s:4:"汎";s:4:"𣲼";s:4:"𣲼";s:3:"沿";s:4:"沿";s:3:"泍";s:4:"泍";s:3:"汧";s:4:"汧";s:3:"洖";s:4:"洖";s:3:"派";s:4:"派";s:3:"浩";s:4:"浩";s:3:"浸";s:4:"浸";s:3:"涅";s:4:"涅";s:4:"𣴞";s:4:"𣴞";s:3:"洴";s:4:"洴";s:3:"港";s:4:"港";s:3:"湮";s:4:"湮";s:3:"㴳";s:4:"㴳";s:3:"滇";s:4:"滇";s:4:"𣻑";s:4:"𣻑";s:3:"淹";s:4:"淹";s:3:"潮";s:4:"潮";s:4:"𣽞";s:4:"𣽞";s:4:"𣾎";s:4:"𣾎";s:3:"濆";s:4:"濆";s:3:"瀹";s:4:"瀹";s:3:"瀛";s:4:"瀛";s:3:"㶖";s:4:"㶖";s:3:"灊";s:4:"灊";s:3:"災";s:4:"災";s:3:"灷";s:4:"灷";s:3:"炭";s:4:"炭";s:4:"𠔥";s:4:"𠔥";s:3:"煅";s:4:"煅";s:4:"𤉣";s:4:"𤉣";s:3:"熜";s:4:"熜";s:4:"𤎫";s:4:"𤎫";s:3:"爨";s:4:"爨";s:3:"牐";s:4:"牐";s:4:"𤘈";s:4:"𤘈";s:3:"犀";s:4:"犀";s:3:"犕";s:4:"犕";s:4:"𤜵";s:4:"𤜵";s:4:"𤠔";s:4:"𤠔";s:3:"獺";s:4:"獺";s:3:"王";s:4:"王";s:3:"㺬";s:4:"㺬";s:3:"玥";s:4:"玥";s:3:"㺸";s:4:"㺸";s:3:"瑇";s:4:"瑇";s:3:"瑜";s:4:"瑜";s:3:"璅";s:4:"璅";s:3:"瓊";s:4:"瓊";s:3:"㼛";s:4:"㼛";s:3:"甤";s:4:"甤";s:4:"𤰶";s:4:"𤰶";s:3:"甾";s:4:"甾";s:4:"𤲒";s:4:"𤲒";s:4:"𢆟";s:4:"𢆟";s:3:"瘐";s:4:"瘐";s:4:"𤾡";s:4:"𤾡";s:4:"𤾸";s:4:"𤾸";s:4:"𥁄";s:4:"𥁄";s:3:"㿼";s:4:"㿼";s:3:"䀈";s:4:"䀈";s:4:"𥃳";s:4:"𥃳";s:4:"𥃲";s:4:"𥃲";s:4:"𥄙";s:4:"𥄙";s:4:"𥄳";s:4:"𥄳";s:3:"眞";s:4:"眞";s:3:"真";s:4:"真";s:3:"瞋";s:4:"瞋";s:3:"䁆";s:4:"䁆";s:3:"䂖";s:4:"䂖";s:4:"𥐝";s:4:"𥐝";s:3:"硎";s:4:"硎";s:3:"䃣";s:4:"䃣";s:4:"𥘦";s:4:"𥘦";s:4:"𥚚";s:4:"𥚚";s:4:"𥛅";s:4:"𥛅";s:3:"秫";s:4:"秫";s:3:"䄯";s:4:"䄯";s:3:"穊";s:4:"穊";s:3:"穏";s:4:"穏";s:4:"𥥼";s:4:"𥥼";s:4:"𥪧";s:4:"𥪧";s:3:"竮";s:4:"竮";s:3:"䈂";s:4:"䈂";s:4:"𥮫";s:4:"𥮫";s:3:"篆";s:4:"篆";s:3:"築";s:4:"築";s:3:"䈧";s:4:"䈧";s:4:"𥲀";s:4:"𥲀";s:3:"糒";s:4:"糒";s:3:"䊠";s:4:"䊠";s:3:"糨";s:4:"糨";s:3:"糣";s:4:"糣";s:3:"紀";s:4:"紀";s:4:"𥾆";s:4:"𥾆";s:3:"絣";s:4:"絣";s:3:"䌁";s:4:"䌁";s:3:"緇";s:4:"緇";s:3:"縂";s:4:"縂";s:3:"繅";s:4:"繅";s:3:"䌴";s:4:"䌴";s:4:"𦈨";s:4:"𦈨";s:4:"𦉇";s:4:"𦉇";s:3:"䍙";s:4:"䍙";s:4:"𦋙";s:4:"𦋙";s:3:"罺";s:4:"罺";s:4:"𦌾";s:4:"𦌾";s:3:"羕";s:4:"羕";s:3:"翺";s:4:"翺";s:4:"𦓚";s:4:"𦓚";s:4:"𦔣";s:4:"𦔣";s:3:"聠";s:4:"聠";s:4:"𦖨";s:4:"𦖨";s:3:"聰";s:4:"聰";s:4:"𣍟";s:4:"𣍟";s:3:"䏕";s:4:"䏕";s:3:"育";s:4:"育";s:3:"脃";s:4:"脃";s:3:"䐋";s:4:"䐋";s:3:"脾";s:4:"脾";s:3:"媵";s:4:"媵";s:4:"𦞧";s:4:"𦞧";s:4:"𦞵";s:4:"𦞵";s:4:"𣎓";s:4:"𣎓";s:4:"𣎜";s:4:"𣎜";s:3:"舄";s:4:"舄";s:3:"辞";s:4:"辞";s:3:"䑫";s:4:"䑫";s:3:"芑";s:4:"芑";s:3:"芋";s:4:"芋";s:3:"芝";s:4:"芝";s:3:"劳";s:4:"劳";s:3:"花";s:4:"花";s:3:"芳";s:4:"芳";s:3:"芽";s:4:"芽";s:3:"苦";s:4:"苦";s:4:"𦬼";s:4:"𦬼";s:3:"茝";s:4:"茝";s:3:"荣";s:4:"荣";s:3:"莭";s:4:"莭";s:3:"茣";s:4:"茣";s:3:"莽";s:4:"莽";s:3:"菧";s:4:"菧";s:3:"荓";s:4:"荓";s:3:"菊";s:4:"菊";s:3:"菌";s:4:"菌";s:3:"菜";s:4:"菜";s:4:"𦰶";s:4:"𦰶";s:4:"𦵫";s:4:"𦵫";s:4:"𦳕";s:4:"𦳕";s:3:"䔫";s:4:"䔫";s:3:"蓱";s:4:"蓱";s:3:"蓳";s:4:"蓳";s:3:"蔖";s:4:"蔖";s:4:"𧏊";s:4:"𧏊";s:3:"蕤";s:4:"蕤";s:4:"𦼬";s:4:"𦼬";s:3:"䕝";s:4:"䕝";s:3:"䕡";s:4:"䕡";s:4:"𦾱";s:4:"𦾱";s:4:"𧃒";s:4:"𧃒";s:3:"䕫";s:4:"䕫";s:3:"虐";s:4:"虐";s:3:"虧";s:4:"虧";s:3:"虩";s:4:"虩";s:3:"蚩";s:4:"蚩";s:3:"蚈";s:4:"蚈";s:3:"蜎";s:4:"蜎";s:3:"蛢";s:4:"蛢";s:3:"蜨";s:4:"蜨";s:3:"蝫";s:4:"蝫";s:3:"螆";s:4:"螆";s:3:"䗗";s:4:"䗗";s:3:"蟡";s:4:"蟡";s:3:"蠁";s:4:"蠁";s:3:"䗹";s:4:"䗹";s:3:"衠";s:4:"衠";s:3:"衣";s:4:"衣";s:4:"𧙧";s:4:"𧙧";s:3:"裗";s:4:"裗";s:3:"裞";s:4:"裞";s:3:"䘵";s:4:"䘵";s:3:"裺";s:4:"裺";s:3:"㒻";s:4:"㒻";s:4:"𧢮";s:4:"𧢮";s:4:"𧥦";s:4:"𧥦";s:3:"䚾";s:4:"䚾";s:3:"䛇";s:4:"䛇";s:3:"誠";s:4:"誠";s:3:"豕";s:4:"豕";s:4:"𧲨";s:4:"𧲨";s:3:"貫";s:4:"貫";s:3:"賁";s:4:"賁";s:3:"贛";s:4:"贛";s:3:"起";s:4:"起";s:4:"𧼯";s:4:"𧼯";s:4:"𠠄";s:4:"𠠄";s:3:"跋";s:4:"跋";s:3:"趼";s:4:"趼";s:3:"跰";s:4:"跰";s:4:"𠣞";s:4:"𠣞";s:3:"軔";s:4:"軔";s:4:"𨗒";s:4:"𨗒";s:4:"𨗭";s:4:"𨗭";s:3:"邔";s:4:"邔";s:3:"郱";s:4:"郱";s:3:"鄑";s:4:"鄑";s:4:"𨜮";s:4:"𨜮";s:3:"鄛";s:4:"鄛";s:3:"鈸";s:4:"鈸";s:3:"鋗";s:4:"鋗";s:3:"鋘";s:4:"鋘";s:3:"鉼";s:4:"鉼";s:3:"鏹";s:4:"鏹";s:3:"鐕";s:4:"鐕";s:4:"𨯺";s:4:"𨯺";s:3:"開";s:4:"開";s:3:"䦕";s:4:"䦕";s:3:"閷";s:4:"閷";s:4:"𨵷";s:4:"𨵷";s:3:"䧦";s:4:"䧦";s:3:"雃";s:4:"雃";s:3:"嶲";s:4:"嶲";s:3:"霣";s:4:"霣";s:4:"𩅅";s:4:"𩅅";s:4:"𩈚";s:4:"𩈚";s:3:"䩮";s:4:"䩮";s:3:"䩶";s:4:"䩶";s:3:"韠";s:4:"韠";s:4:"𩐊";s:4:"𩐊";s:3:"䪲";s:4:"䪲";s:4:"𩒖";s:4:"𩒖";s:3:"頩";s:4:"頩";s:4:"𩖶";s:4:"𩖶";s:3:"飢";s:4:"飢";s:3:"䬳";s:4:"䬳";s:3:"餩";s:4:"餩";s:3:"馧";s:4:"馧";s:3:"駂";s:4:"駂";s:3:"駾";s:4:"駾";s:3:"䯎";s:4:"䯎";s:4:"𩬰";s:4:"𩬰";s:3:"鱀";s:4:"鱀";s:3:"鳽";s:4:"鳽";s:3:"䳎";s:4:"䳎";s:3:"䳭";s:4:"䳭";s:3:"鵧";s:4:"鵧";s:4:"𪃎";s:4:"𪃎";s:3:"䳸";s:4:"䳸";s:4:"𪄅";s:4:"𪄅";s:4:"𪈎";s:4:"𪈎";s:4:"𪊑";s:4:"𪊑";s:3:"麻";s:4:"麻";s:3:"䵖";s:4:"䵖";s:3:"黹";s:4:"黹";s:3:"黾";s:4:"黾";s:3:"鼅";s:4:"鼅";s:3:"鼏";s:4:"鼏";s:3:"鼖";s:4:"鼖";s:3:"鼻";s:4:"鼻";s:4:"𪘀";s:4:"𪘀";}' );
+$utfCanonicalDecomp = unserialize( 'a:2043:{s:2:"À";s:3:"À";s:2:"Á";s:3:"Á";s:2:"Â";s:3:"Â";s:2:"Ã";s:3:"Ã";s:2:"Ä";s:3:"Ä";s:2:"Å";s:3:"Å";s:2:"Ç";s:3:"Ç";s:2:"È";s:3:"È";s:2:"É";s:3:"É";s:2:"Ê";s:3:"Ê";s:2:"Ë";s:3:"Ë";s:2:"Ì";s:3:"Ì";s:2:"Í";s:3:"Í";s:2:"Î";s:3:"Î";s:2:"Ï";s:3:"Ï";s:2:"Ñ";s:3:"Ñ";s:2:"Ò";s:3:"Ò";s:2:"Ó";s:3:"Ó";s:2:"Ô";s:3:"Ô";s:2:"Õ";s:3:"Õ";s:2:"Ö";s:3:"Ö";s:2:"Ù";s:3:"Ù";s:2:"Ú";s:3:"Ú";s:2:"Û";s:3:"Û";s:2:"Ü";s:3:"Ü";s:2:"Ý";s:3:"Ý";s:2:"à";s:3:"à";s:2:"á";s:3:"á";s:2:"â";s:3:"â";s:2:"ã";s:3:"ã";s:2:"ä";s:3:"ä";s:2:"å";s:3:"å";s:2:"ç";s:3:"ç";s:2:"è";s:3:"è";s:2:"é";s:3:"é";s:2:"ê";s:3:"ê";s:2:"ë";s:3:"ë";s:2:"ì";s:3:"ì";s:2:"í";s:3:"í";s:2:"î";s:3:"î";s:2:"ï";s:3:"ï";s:2:"ñ";s:3:"ñ";s:2:"ò";s:3:"ò";s:2:"ó";s:3:"ó";s:2:"ô";s:3:"ô";s:2:"õ";s:3:"õ";s:2:"ö";s:3:"ö";s:2:"ù";s:3:"ù";s:2:"ú";s:3:"ú";s:2:"û";s:3:"û";s:2:"ü";s:3:"ü";s:2:"ý";s:3:"ý";s:2:"ÿ";s:3:"ÿ";s:2:"Ā";s:3:"Ā";s:2:"ā";s:3:"ā";s:2:"Ă";s:3:"Ă";s:2:"ă";s:3:"ă";s:2:"Ą";s:3:"Ą";s:2:"ą";s:3:"ą";s:2:"Ć";s:3:"Ć";s:2:"ć";s:3:"ć";s:2:"Ĉ";s:3:"Ĉ";s:2:"ĉ";s:3:"ĉ";s:2:"Ċ";s:3:"Ċ";s:2:"ċ";s:3:"ċ";s:2:"Č";s:3:"Č";s:2:"č";s:3:"č";s:2:"Ď";s:3:"Ď";s:2:"ď";s:3:"ď";s:2:"Ē";s:3:"Ē";s:2:"ē";s:3:"ē";s:2:"Ĕ";s:3:"Ĕ";s:2:"ĕ";s:3:"ĕ";s:2:"Ė";s:3:"Ė";s:2:"ė";s:3:"ė";s:2:"Ę";s:3:"Ę";s:2:"ę";s:3:"ę";s:2:"Ě";s:3:"Ě";s:2:"ě";s:3:"ě";s:2:"Ĝ";s:3:"Ĝ";s:2:"ĝ";s:3:"ĝ";s:2:"Ğ";s:3:"Ğ";s:2:"ğ";s:3:"ğ";s:2:"Ġ";s:3:"Ġ";s:2:"ġ";s:3:"ġ";s:2:"Ģ";s:3:"Ģ";s:2:"ģ";s:3:"ģ";s:2:"Ĥ";s:3:"Ĥ";s:2:"ĥ";s:3:"ĥ";s:2:"Ĩ";s:3:"Ĩ";s:2:"ĩ";s:3:"ĩ";s:2:"Ī";s:3:"Ī";s:2:"ī";s:3:"ī";s:2:"Ĭ";s:3:"Ĭ";s:2:"ĭ";s:3:"ĭ";s:2:"Į";s:3:"Į";s:2:"į";s:3:"į";s:2:"İ";s:3:"İ";s:2:"Ĵ";s:3:"Ĵ";s:2:"ĵ";s:3:"ĵ";s:2:"Ķ";s:3:"Ķ";s:2:"ķ";s:3:"ķ";s:2:"Ĺ";s:3:"Ĺ";s:2:"ĺ";s:3:"ĺ";s:2:"Ļ";s:3:"Ļ";s:2:"ļ";s:3:"ļ";s:2:"Ľ";s:3:"Ľ";s:2:"ľ";s:3:"ľ";s:2:"Ń";s:3:"Ń";s:2:"ń";s:3:"ń";s:2:"Ņ";s:3:"Ņ";s:2:"ņ";s:3:"ņ";s:2:"Ň";s:3:"Ň";s:2:"ň";s:3:"ň";s:2:"Ō";s:3:"Ō";s:2:"ō";s:3:"ō";s:2:"Ŏ";s:3:"Ŏ";s:2:"ŏ";s:3:"ŏ";s:2:"Ő";s:3:"Ő";s:2:"ő";s:3:"ő";s:2:"Ŕ";s:3:"Ŕ";s:2:"ŕ";s:3:"ŕ";s:2:"Ŗ";s:3:"Ŗ";s:2:"ŗ";s:3:"ŗ";s:2:"Ř";s:3:"Ř";s:2:"ř";s:3:"ř";s:2:"Ś";s:3:"Ś";s:2:"ś";s:3:"ś";s:2:"Ŝ";s:3:"Ŝ";s:2:"ŝ";s:3:"ŝ";s:2:"Ş";s:3:"Ş";s:2:"ş";s:3:"ş";s:2:"Š";s:3:"Š";s:2:"š";s:3:"š";s:2:"Ţ";s:3:"Ţ";s:2:"ţ";s:3:"ţ";s:2:"Ť";s:3:"Ť";s:2:"ť";s:3:"ť";s:2:"Ũ";s:3:"Ũ";s:2:"ũ";s:3:"ũ";s:2:"Ū";s:3:"Ū";s:2:"ū";s:3:"ū";s:2:"Ŭ";s:3:"Ŭ";s:2:"ŭ";s:3:"ŭ";s:2:"Ů";s:3:"Ů";s:2:"ů";s:3:"ů";s:2:"Ű";s:3:"Ű";s:2:"ű";s:3:"ű";s:2:"Ų";s:3:"Ų";s:2:"ų";s:3:"ų";s:2:"Ŵ";s:3:"Ŵ";s:2:"ŵ";s:3:"ŵ";s:2:"Ŷ";s:3:"Ŷ";s:2:"ŷ";s:3:"ŷ";s:2:"Ÿ";s:3:"Ÿ";s:2:"Ź";s:3:"Ź";s:2:"ź";s:3:"ź";s:2:"Ż";s:3:"Ż";s:2:"ż";s:3:"ż";s:2:"Ž";s:3:"Ž";s:2:"ž";s:3:"ž";s:2:"Ơ";s:3:"Ơ";s:2:"ơ";s:3:"ơ";s:2:"Ư";s:3:"Ư";s:2:"ư";s:3:"ư";s:2:"Ǎ";s:3:"Ǎ";s:2:"ǎ";s:3:"ǎ";s:2:"Ǐ";s:3:"Ǐ";s:2:"ǐ";s:3:"ǐ";s:2:"Ǒ";s:3:"Ǒ";s:2:"ǒ";s:3:"ǒ";s:2:"Ǔ";s:3:"Ǔ";s:2:"ǔ";s:3:"ǔ";s:2:"Ǖ";s:5:"Ǖ";s:2:"ǖ";s:5:"ǖ";s:2:"Ǘ";s:5:"Ǘ";s:2:"ǘ";s:5:"ǘ";s:2:"Ǚ";s:5:"Ǚ";s:2:"ǚ";s:5:"ǚ";s:2:"Ǜ";s:5:"Ǜ";s:2:"ǜ";s:5:"ǜ";s:2:"Ǟ";s:5:"Ǟ";s:2:"ǟ";s:5:"ǟ";s:2:"Ǡ";s:5:"Ǡ";s:2:"ǡ";s:5:"ǡ";s:2:"Ǣ";s:4:"Ǣ";s:2:"ǣ";s:4:"ǣ";s:2:"Ǧ";s:3:"Ǧ";s:2:"ǧ";s:3:"ǧ";s:2:"Ǩ";s:3:"Ǩ";s:2:"ǩ";s:3:"ǩ";s:2:"Ǫ";s:3:"Ǫ";s:2:"ǫ";s:3:"ǫ";s:2:"Ǭ";s:5:"Ǭ";s:2:"ǭ";s:5:"ǭ";s:2:"Ǯ";s:4:"Ǯ";s:2:"ǯ";s:4:"ǯ";s:2:"ǰ";s:3:"ǰ";s:2:"Ǵ";s:3:"Ǵ";s:2:"ǵ";s:3:"ǵ";s:2:"Ǹ";s:3:"Ǹ";s:2:"ǹ";s:3:"ǹ";s:2:"Ǻ";s:5:"Ǻ";s:2:"ǻ";s:5:"ǻ";s:2:"Ǽ";s:4:"Ǽ";s:2:"ǽ";s:4:"ǽ";s:2:"Ǿ";s:4:"Ǿ";s:2:"ǿ";s:4:"ǿ";s:2:"Ȁ";s:3:"Ȁ";s:2:"ȁ";s:3:"ȁ";s:2:"Ȃ";s:3:"Ȃ";s:2:"ȃ";s:3:"ȃ";s:2:"Ȅ";s:3:"Ȅ";s:2:"ȅ";s:3:"ȅ";s:2:"Ȇ";s:3:"Ȇ";s:2:"ȇ";s:3:"ȇ";s:2:"Ȉ";s:3:"Ȉ";s:2:"ȉ";s:3:"ȉ";s:2:"Ȋ";s:3:"Ȋ";s:2:"ȋ";s:3:"ȋ";s:2:"Ȍ";s:3:"Ȍ";s:2:"ȍ";s:3:"ȍ";s:2:"Ȏ";s:3:"Ȏ";s:2:"ȏ";s:3:"ȏ";s:2:"Ȑ";s:3:"Ȑ";s:2:"ȑ";s:3:"ȑ";s:2:"Ȓ";s:3:"Ȓ";s:2:"ȓ";s:3:"ȓ";s:2:"Ȕ";s:3:"Ȕ";s:2:"ȕ";s:3:"ȕ";s:2:"Ȗ";s:3:"Ȗ";s:2:"ȗ";s:3:"ȗ";s:2:"Ș";s:3:"Ș";s:2:"ș";s:3:"ș";s:2:"Ț";s:3:"Ț";s:2:"ț";s:3:"ț";s:2:"Ȟ";s:3:"Ȟ";s:2:"ȟ";s:3:"ȟ";s:2:"Ȧ";s:3:"Ȧ";s:2:"ȧ";s:3:"ȧ";s:2:"Ȩ";s:3:"Ȩ";s:2:"ȩ";s:3:"ȩ";s:2:"Ȫ";s:5:"Ȫ";s:2:"ȫ";s:5:"ȫ";s:2:"Ȭ";s:5:"Ȭ";s:2:"ȭ";s:5:"ȭ";s:2:"Ȯ";s:3:"Ȯ";s:2:"ȯ";s:3:"ȯ";s:2:"Ȱ";s:5:"Ȱ";s:2:"ȱ";s:5:"ȱ";s:2:"Ȳ";s:3:"Ȳ";s:2:"ȳ";s:3:"ȳ";s:2:"̀";s:2:"̀";s:2:"́";s:2:"́";s:2:"̓";s:2:"̓";s:2:"̈́";s:4:"̈́";s:2:"ʹ";s:2:"ʹ";s:2:";";s:1:";";s:2:"΅";s:4:"΅";s:2:"Ά";s:4:"Ά";s:2:"·";s:2:"·";s:2:"Έ";s:4:"Έ";s:2:"Ή";s:4:"Ή";s:2:"Ί";s:4:"Ί";s:2:"Ό";s:4:"Ό";s:2:"Ύ";s:4:"Ύ";s:2:"Ώ";s:4:"Ώ";s:2:"ΐ";s:6:"ΐ";s:2:"Ϊ";s:4:"Ϊ";s:2:"Ϋ";s:4:"Ϋ";s:2:"ά";s:4:"ά";s:2:"έ";s:4:"έ";s:2:"ή";s:4:"ή";s:2:"ί";s:4:"ί";s:2:"ΰ";s:6:"ΰ";s:2:"ϊ";s:4:"ϊ";s:2:"ϋ";s:4:"ϋ";s:2:"ό";s:4:"ό";s:2:"ύ";s:4:"ύ";s:2:"ώ";s:4:"ώ";s:2:"ϓ";s:4:"ϓ";s:2:"ϔ";s:4:"ϔ";s:2:"Ѐ";s:4:"Ѐ";s:2:"Ё";s:4:"Ё";s:2:"Ѓ";s:4:"Ѓ";s:2:"Ї";s:4:"Ї";s:2:"Ќ";s:4:"Ќ";s:2:"Ѝ";s:4:"Ѝ";s:2:"Ў";s:4:"Ў";s:2:"Й";s:4:"Й";s:2:"й";s:4:"й";s:2:"ѐ";s:4:"ѐ";s:2:"ё";s:4:"ё";s:2:"ѓ";s:4:"ѓ";s:2:"ї";s:4:"ї";s:2:"ќ";s:4:"ќ";s:2:"ѝ";s:4:"ѝ";s:2:"ў";s:4:"ў";s:2:"Ѷ";s:4:"Ѷ";s:2:"ѷ";s:4:"ѷ";s:2:"Ӂ";s:4:"Ӂ";s:2:"ӂ";s:4:"ӂ";s:2:"Ӑ";s:4:"Ӑ";s:2:"ӑ";s:4:"ӑ";s:2:"Ӓ";s:4:"Ӓ";s:2:"ӓ";s:4:"ӓ";s:2:"Ӗ";s:4:"Ӗ";s:2:"ӗ";s:4:"ӗ";s:2:"Ӛ";s:4:"Ӛ";s:2:"ӛ";s:4:"ӛ";s:2:"Ӝ";s:4:"Ӝ";s:2:"ӝ";s:4:"ӝ";s:2:"Ӟ";s:4:"Ӟ";s:2:"ӟ";s:4:"ӟ";s:2:"Ӣ";s:4:"Ӣ";s:2:"ӣ";s:4:"ӣ";s:2:"Ӥ";s:4:"Ӥ";s:2:"ӥ";s:4:"ӥ";s:2:"Ӧ";s:4:"Ӧ";s:2:"ӧ";s:4:"ӧ";s:2:"Ӫ";s:4:"Ӫ";s:2:"ӫ";s:4:"ӫ";s:2:"Ӭ";s:4:"Ӭ";s:2:"ӭ";s:4:"ӭ";s:2:"Ӯ";s:4:"Ӯ";s:2:"ӯ";s:4:"ӯ";s:2:"Ӱ";s:4:"Ӱ";s:2:"ӱ";s:4:"ӱ";s:2:"Ӳ";s:4:"Ӳ";s:2:"ӳ";s:4:"ӳ";s:2:"Ӵ";s:4:"Ӵ";s:2:"ӵ";s:4:"ӵ";s:2:"Ӹ";s:4:"Ӹ";s:2:"ӹ";s:4:"ӹ";s:2:"آ";s:4:"آ";s:2:"أ";s:4:"أ";s:2:"ؤ";s:4:"ؤ";s:2:"إ";s:4:"إ";s:2:"ئ";s:4:"ئ";s:2:"ۀ";s:4:"ۀ";s:2:"ۂ";s:4:"ۂ";s:2:"ۓ";s:4:"ۓ";s:3:"ऩ";s:6:"ऩ";s:3:"ऱ";s:6:"ऱ";s:3:"ऴ";s:6:"ऴ";s:3:"क़";s:6:"क़";s:3:"ख़";s:6:"ख़";s:3:"ग़";s:6:"ग़";s:3:"ज़";s:6:"ज़";s:3:"ड़";s:6:"ड़";s:3:"ढ़";s:6:"ढ़";s:3:"फ़";s:6:"फ़";s:3:"य़";s:6:"य़";s:3:"ো";s:6:"ো";s:3:"ৌ";s:6:"ৌ";s:3:"ড়";s:6:"ড়";s:3:"ঢ়";s:6:"ঢ়";s:3:"য়";s:6:"য়";s:3:"ਲ਼";s:6:"ਲ਼";s:3:"ਸ਼";s:6:"ਸ਼";s:3:"ਖ਼";s:6:"ਖ਼";s:3:"ਗ਼";s:6:"ਗ਼";s:3:"ਜ਼";s:6:"ਜ਼";s:3:"ਫ਼";s:6:"ਫ਼";s:3:"ୈ";s:6:"ୈ";s:3:"ୋ";s:6:"ୋ";s:3:"ୌ";s:6:"ୌ";s:3:"ଡ଼";s:6:"ଡ଼";s:3:"ଢ଼";s:6:"ଢ଼";s:3:"ஔ";s:6:"ஔ";s:3:"ொ";s:6:"ொ";s:3:"ோ";s:6:"ோ";s:3:"ௌ";s:6:"ௌ";s:3:"ై";s:6:"ై";s:3:"ೀ";s:6:"ೀ";s:3:"ೇ";s:6:"ೇ";s:3:"ೈ";s:6:"ೈ";s:3:"ೊ";s:6:"ೊ";s:3:"ೋ";s:9:"ೋ";s:3:"ൊ";s:6:"ൊ";s:3:"ോ";s:6:"ോ";s:3:"ൌ";s:6:"ൌ";s:3:"ේ";s:6:"ේ";s:3:"ො";s:6:"ො";s:3:"ෝ";s:9:"ෝ";s:3:"ෞ";s:6:"ෞ";s:3:"གྷ";s:6:"གྷ";s:3:"ཌྷ";s:6:"ཌྷ";s:3:"དྷ";s:6:"དྷ";s:3:"བྷ";s:6:"བྷ";s:3:"ཛྷ";s:6:"ཛྷ";s:3:"ཀྵ";s:6:"ཀྵ";s:3:"ཱི";s:6:"ཱི";s:3:"ཱུ";s:6:"ཱུ";s:3:"ྲྀ";s:6:"ྲྀ";s:3:"ླྀ";s:6:"ླྀ";s:3:"ཱྀ";s:6:"ཱྀ";s:3:"ྒྷ";s:6:"ྒྷ";s:3:"ྜྷ";s:6:"ྜྷ";s:3:"ྡྷ";s:6:"ྡྷ";s:3:"ྦྷ";s:6:"ྦྷ";s:3:"ྫྷ";s:6:"ྫྷ";s:3:"ྐྵ";s:6:"ྐྵ";s:3:"ဦ";s:6:"ဦ";s:3:"ᬆ";s:6:"ᬆ";s:3:"ᬈ";s:6:"ᬈ";s:3:"ᬊ";s:6:"ᬊ";s:3:"ᬌ";s:6:"ᬌ";s:3:"ᬎ";s:6:"ᬎ";s:3:"ᬒ";s:6:"ᬒ";s:3:"ᬻ";s:6:"ᬻ";s:3:"ᬽ";s:6:"ᬽ";s:3:"ᭀ";s:6:"ᭀ";s:3:"ᭁ";s:6:"ᭁ";s:3:"ᭃ";s:6:"ᭃ";s:3:"Ḁ";s:3:"Ḁ";s:3:"ḁ";s:3:"ḁ";s:3:"Ḃ";s:3:"Ḃ";s:3:"ḃ";s:3:"ḃ";s:3:"Ḅ";s:3:"Ḅ";s:3:"ḅ";s:3:"ḅ";s:3:"Ḇ";s:3:"Ḇ";s:3:"ḇ";s:3:"ḇ";s:3:"Ḉ";s:5:"Ḉ";s:3:"ḉ";s:5:"ḉ";s:3:"Ḋ";s:3:"Ḋ";s:3:"ḋ";s:3:"ḋ";s:3:"Ḍ";s:3:"Ḍ";s:3:"ḍ";s:3:"ḍ";s:3:"Ḏ";s:3:"Ḏ";s:3:"ḏ";s:3:"ḏ";s:3:"Ḑ";s:3:"Ḑ";s:3:"ḑ";s:3:"ḑ";s:3:"Ḓ";s:3:"Ḓ";s:3:"ḓ";s:3:"ḓ";s:3:"Ḕ";s:5:"Ḕ";s:3:"ḕ";s:5:"ḕ";s:3:"Ḗ";s:5:"Ḗ";s:3:"ḗ";s:5:"ḗ";s:3:"Ḙ";s:3:"Ḙ";s:3:"ḙ";s:3:"ḙ";s:3:"Ḛ";s:3:"Ḛ";s:3:"ḛ";s:3:"ḛ";s:3:"Ḝ";s:5:"Ḝ";s:3:"ḝ";s:5:"ḝ";s:3:"Ḟ";s:3:"Ḟ";s:3:"ḟ";s:3:"ḟ";s:3:"Ḡ";s:3:"Ḡ";s:3:"ḡ";s:3:"ḡ";s:3:"Ḣ";s:3:"Ḣ";s:3:"ḣ";s:3:"ḣ";s:3:"Ḥ";s:3:"Ḥ";s:3:"ḥ";s:3:"ḥ";s:3:"Ḧ";s:3:"Ḧ";s:3:"ḧ";s:3:"ḧ";s:3:"Ḩ";s:3:"Ḩ";s:3:"ḩ";s:3:"ḩ";s:3:"Ḫ";s:3:"Ḫ";s:3:"ḫ";s:3:"ḫ";s:3:"Ḭ";s:3:"Ḭ";s:3:"ḭ";s:3:"ḭ";s:3:"Ḯ";s:5:"Ḯ";s:3:"ḯ";s:5:"ḯ";s:3:"Ḱ";s:3:"Ḱ";s:3:"ḱ";s:3:"ḱ";s:3:"Ḳ";s:3:"Ḳ";s:3:"ḳ";s:3:"ḳ";s:3:"Ḵ";s:3:"Ḵ";s:3:"ḵ";s:3:"ḵ";s:3:"Ḷ";s:3:"Ḷ";s:3:"ḷ";s:3:"ḷ";s:3:"Ḹ";s:5:"Ḹ";s:3:"ḹ";s:5:"ḹ";s:3:"Ḻ";s:3:"Ḻ";s:3:"ḻ";s:3:"ḻ";s:3:"Ḽ";s:3:"Ḽ";s:3:"ḽ";s:3:"ḽ";s:3:"Ḿ";s:3:"Ḿ";s:3:"ḿ";s:3:"ḿ";s:3:"Ṁ";s:3:"Ṁ";s:3:"ṁ";s:3:"ṁ";s:3:"Ṃ";s:3:"Ṃ";s:3:"ṃ";s:3:"ṃ";s:3:"Ṅ";s:3:"Ṅ";s:3:"ṅ";s:3:"ṅ";s:3:"Ṇ";s:3:"Ṇ";s:3:"ṇ";s:3:"ṇ";s:3:"Ṉ";s:3:"Ṉ";s:3:"ṉ";s:3:"ṉ";s:3:"Ṋ";s:3:"Ṋ";s:3:"ṋ";s:3:"ṋ";s:3:"Ṍ";s:5:"Ṍ";s:3:"ṍ";s:5:"ṍ";s:3:"Ṏ";s:5:"Ṏ";s:3:"ṏ";s:5:"ṏ";s:3:"Ṑ";s:5:"Ṑ";s:3:"ṑ";s:5:"ṑ";s:3:"Ṓ";s:5:"Ṓ";s:3:"ṓ";s:5:"ṓ";s:3:"Ṕ";s:3:"Ṕ";s:3:"ṕ";s:3:"ṕ";s:3:"Ṗ";s:3:"Ṗ";s:3:"ṗ";s:3:"ṗ";s:3:"Ṙ";s:3:"Ṙ";s:3:"ṙ";s:3:"ṙ";s:3:"Ṛ";s:3:"Ṛ";s:3:"ṛ";s:3:"ṛ";s:3:"Ṝ";s:5:"Ṝ";s:3:"ṝ";s:5:"ṝ";s:3:"Ṟ";s:3:"Ṟ";s:3:"ṟ";s:3:"ṟ";s:3:"Ṡ";s:3:"Ṡ";s:3:"ṡ";s:3:"ṡ";s:3:"Ṣ";s:3:"Ṣ";s:3:"ṣ";s:3:"ṣ";s:3:"Ṥ";s:5:"Ṥ";s:3:"ṥ";s:5:"ṥ";s:3:"Ṧ";s:5:"Ṧ";s:3:"ṧ";s:5:"ṧ";s:3:"Ṩ";s:5:"Ṩ";s:3:"ṩ";s:5:"ṩ";s:3:"Ṫ";s:3:"Ṫ";s:3:"ṫ";s:3:"ṫ";s:3:"Ṭ";s:3:"Ṭ";s:3:"ṭ";s:3:"ṭ";s:3:"Ṯ";s:3:"Ṯ";s:3:"ṯ";s:3:"ṯ";s:3:"Ṱ";s:3:"Ṱ";s:3:"ṱ";s:3:"ṱ";s:3:"Ṳ";s:3:"Ṳ";s:3:"ṳ";s:3:"ṳ";s:3:"Ṵ";s:3:"Ṵ";s:3:"ṵ";s:3:"ṵ";s:3:"Ṷ";s:3:"Ṷ";s:3:"ṷ";s:3:"ṷ";s:3:"Ṹ";s:5:"Ṹ";s:3:"ṹ";s:5:"ṹ";s:3:"Ṻ";s:5:"Ṻ";s:3:"ṻ";s:5:"ṻ";s:3:"Ṽ";s:3:"Ṽ";s:3:"ṽ";s:3:"ṽ";s:3:"Ṿ";s:3:"Ṿ";s:3:"ṿ";s:3:"ṿ";s:3:"Ẁ";s:3:"Ẁ";s:3:"ẁ";s:3:"ẁ";s:3:"Ẃ";s:3:"Ẃ";s:3:"ẃ";s:3:"ẃ";s:3:"Ẅ";s:3:"Ẅ";s:3:"ẅ";s:3:"ẅ";s:3:"Ẇ";s:3:"Ẇ";s:3:"ẇ";s:3:"ẇ";s:3:"Ẉ";s:3:"Ẉ";s:3:"ẉ";s:3:"ẉ";s:3:"Ẋ";s:3:"Ẋ";s:3:"ẋ";s:3:"ẋ";s:3:"Ẍ";s:3:"Ẍ";s:3:"ẍ";s:3:"ẍ";s:3:"Ẏ";s:3:"Ẏ";s:3:"ẏ";s:3:"ẏ";s:3:"Ẑ";s:3:"Ẑ";s:3:"ẑ";s:3:"ẑ";s:3:"Ẓ";s:3:"Ẓ";s:3:"ẓ";s:3:"ẓ";s:3:"Ẕ";s:3:"Ẕ";s:3:"ẕ";s:3:"ẕ";s:3:"ẖ";s:3:"ẖ";s:3:"ẗ";s:3:"ẗ";s:3:"ẘ";s:3:"ẘ";s:3:"ẙ";s:3:"ẙ";s:3:"ẛ";s:4:"ẛ";s:3:"Ạ";s:3:"Ạ";s:3:"ạ";s:3:"ạ";s:3:"Ả";s:3:"Ả";s:3:"ả";s:3:"ả";s:3:"Ấ";s:5:"Ấ";s:3:"ấ";s:5:"ấ";s:3:"Ầ";s:5:"Ầ";s:3:"ầ";s:5:"ầ";s:3:"Ẩ";s:5:"Ẩ";s:3:"ẩ";s:5:"ẩ";s:3:"Ẫ";s:5:"Ẫ";s:3:"ẫ";s:5:"ẫ";s:3:"Ậ";s:5:"Ậ";s:3:"ậ";s:5:"ậ";s:3:"Ắ";s:5:"Ắ";s:3:"ắ";s:5:"ắ";s:3:"Ằ";s:5:"Ằ";s:3:"ằ";s:5:"ằ";s:3:"Ẳ";s:5:"Ẳ";s:3:"ẳ";s:5:"ẳ";s:3:"Ẵ";s:5:"Ẵ";s:3:"ẵ";s:5:"ẵ";s:3:"Ặ";s:5:"Ặ";s:3:"ặ";s:5:"ặ";s:3:"Ẹ";s:3:"Ẹ";s:3:"ẹ";s:3:"ẹ";s:3:"Ẻ";s:3:"Ẻ";s:3:"ẻ";s:3:"ẻ";s:3:"Ẽ";s:3:"Ẽ";s:3:"ẽ";s:3:"ẽ";s:3:"Ế";s:5:"Ế";s:3:"ế";s:5:"ế";s:3:"Ề";s:5:"Ề";s:3:"ề";s:5:"ề";s:3:"Ể";s:5:"Ể";s:3:"ể";s:5:"ể";s:3:"Ễ";s:5:"Ễ";s:3:"ễ";s:5:"ễ";s:3:"Ệ";s:5:"Ệ";s:3:"ệ";s:5:"ệ";s:3:"Ỉ";s:3:"Ỉ";s:3:"ỉ";s:3:"ỉ";s:3:"Ị";s:3:"Ị";s:3:"ị";s:3:"ị";s:3:"Ọ";s:3:"Ọ";s:3:"ọ";s:3:"ọ";s:3:"Ỏ";s:3:"Ỏ";s:3:"ỏ";s:3:"ỏ";s:3:"Ố";s:5:"Ố";s:3:"ố";s:5:"ố";s:3:"Ồ";s:5:"Ồ";s:3:"ồ";s:5:"ồ";s:3:"Ổ";s:5:"Ổ";s:3:"ổ";s:5:"ổ";s:3:"Ỗ";s:5:"Ỗ";s:3:"ỗ";s:5:"ỗ";s:3:"Ộ";s:5:"Ộ";s:3:"ộ";s:5:"ộ";s:3:"Ớ";s:5:"Ớ";s:3:"ớ";s:5:"ớ";s:3:"Ờ";s:5:"Ờ";s:3:"ờ";s:5:"ờ";s:3:"Ở";s:5:"Ở";s:3:"ở";s:5:"ở";s:3:"Ỡ";s:5:"Ỡ";s:3:"ỡ";s:5:"ỡ";s:3:"Ợ";s:5:"Ợ";s:3:"ợ";s:5:"ợ";s:3:"Ụ";s:3:"Ụ";s:3:"ụ";s:3:"ụ";s:3:"Ủ";s:3:"Ủ";s:3:"ủ";s:3:"ủ";s:3:"Ứ";s:5:"Ứ";s:3:"ứ";s:5:"ứ";s:3:"Ừ";s:5:"Ừ";s:3:"ừ";s:5:"ừ";s:3:"Ử";s:5:"Ử";s:3:"ử";s:5:"ử";s:3:"Ữ";s:5:"Ữ";s:3:"ữ";s:5:"ữ";s:3:"Ự";s:5:"Ự";s:3:"ự";s:5:"ự";s:3:"Ỳ";s:3:"Ỳ";s:3:"ỳ";s:3:"ỳ";s:3:"Ỵ";s:3:"Ỵ";s:3:"ỵ";s:3:"ỵ";s:3:"Ỷ";s:3:"Ỷ";s:3:"ỷ";s:3:"ỷ";s:3:"Ỹ";s:3:"Ỹ";s:3:"ỹ";s:3:"ỹ";s:3:"ἀ";s:4:"ἀ";s:3:"ἁ";s:4:"ἁ";s:3:"ἂ";s:6:"ἂ";s:3:"ἃ";s:6:"ἃ";s:3:"ἄ";s:6:"ἄ";s:3:"ἅ";s:6:"ἅ";s:3:"ἆ";s:6:"ἆ";s:3:"ἇ";s:6:"ἇ";s:3:"Ἀ";s:4:"Ἀ";s:3:"Ἁ";s:4:"Ἁ";s:3:"Ἂ";s:6:"Ἂ";s:3:"Ἃ";s:6:"Ἃ";s:3:"Ἄ";s:6:"Ἄ";s:3:"Ἅ";s:6:"Ἅ";s:3:"Ἆ";s:6:"Ἆ";s:3:"Ἇ";s:6:"Ἇ";s:3:"ἐ";s:4:"ἐ";s:3:"ἑ";s:4:"ἑ";s:3:"ἒ";s:6:"ἒ";s:3:"ἓ";s:6:"ἓ";s:3:"ἔ";s:6:"ἔ";s:3:"ἕ";s:6:"ἕ";s:3:"Ἐ";s:4:"Ἐ";s:3:"Ἑ";s:4:"Ἑ";s:3:"Ἒ";s:6:"Ἒ";s:3:"Ἓ";s:6:"Ἓ";s:3:"Ἔ";s:6:"Ἔ";s:3:"Ἕ";s:6:"Ἕ";s:3:"ἠ";s:4:"ἠ";s:3:"ἡ";s:4:"ἡ";s:3:"ἢ";s:6:"ἢ";s:3:"ἣ";s:6:"ἣ";s:3:"ἤ";s:6:"ἤ";s:3:"ἥ";s:6:"ἥ";s:3:"ἦ";s:6:"ἦ";s:3:"ἧ";s:6:"ἧ";s:3:"Ἠ";s:4:"Ἠ";s:3:"Ἡ";s:4:"Ἡ";s:3:"Ἢ";s:6:"Ἢ";s:3:"Ἣ";s:6:"Ἣ";s:3:"Ἤ";s:6:"Ἤ";s:3:"Ἥ";s:6:"Ἥ";s:3:"Ἦ";s:6:"Ἦ";s:3:"Ἧ";s:6:"Ἧ";s:3:"ἰ";s:4:"ἰ";s:3:"ἱ";s:4:"ἱ";s:3:"ἲ";s:6:"ἲ";s:3:"ἳ";s:6:"ἳ";s:3:"ἴ";s:6:"ἴ";s:3:"ἵ";s:6:"ἵ";s:3:"ἶ";s:6:"ἶ";s:3:"ἷ";s:6:"ἷ";s:3:"Ἰ";s:4:"Ἰ";s:3:"Ἱ";s:4:"Ἱ";s:3:"Ἲ";s:6:"Ἲ";s:3:"Ἳ";s:6:"Ἳ";s:3:"Ἴ";s:6:"Ἴ";s:3:"Ἵ";s:6:"Ἵ";s:3:"Ἶ";s:6:"Ἶ";s:3:"Ἷ";s:6:"Ἷ";s:3:"ὀ";s:4:"ὀ";s:3:"ὁ";s:4:"ὁ";s:3:"ὂ";s:6:"ὂ";s:3:"ὃ";s:6:"ὃ";s:3:"ὄ";s:6:"ὄ";s:3:"ὅ";s:6:"ὅ";s:3:"Ὀ";s:4:"Ὀ";s:3:"Ὁ";s:4:"Ὁ";s:3:"Ὂ";s:6:"Ὂ";s:3:"Ὃ";s:6:"Ὃ";s:3:"Ὄ";s:6:"Ὄ";s:3:"Ὅ";s:6:"Ὅ";s:3:"ὐ";s:4:"ὐ";s:3:"ὑ";s:4:"ὑ";s:3:"ὒ";s:6:"ὒ";s:3:"ὓ";s:6:"ὓ";s:3:"ὔ";s:6:"ὔ";s:3:"ὕ";s:6:"ὕ";s:3:"ὖ";s:6:"ὖ";s:3:"ὗ";s:6:"ὗ";s:3:"Ὑ";s:4:"Ὑ";s:3:"Ὓ";s:6:"Ὓ";s:3:"Ὕ";s:6:"Ὕ";s:3:"Ὗ";s:6:"Ὗ";s:3:"ὠ";s:4:"ὠ";s:3:"ὡ";s:4:"ὡ";s:3:"ὢ";s:6:"ὢ";s:3:"ὣ";s:6:"ὣ";s:3:"ὤ";s:6:"ὤ";s:3:"ὥ";s:6:"ὥ";s:3:"ὦ";s:6:"ὦ";s:3:"ὧ";s:6:"ὧ";s:3:"Ὠ";s:4:"Ὠ";s:3:"Ὡ";s:4:"Ὡ";s:3:"Ὢ";s:6:"Ὢ";s:3:"Ὣ";s:6:"Ὣ";s:3:"Ὤ";s:6:"Ὤ";s:3:"Ὥ";s:6:"Ὥ";s:3:"Ὦ";s:6:"Ὦ";s:3:"Ὧ";s:6:"Ὧ";s:3:"ὰ";s:4:"ὰ";s:3:"ά";s:4:"ά";s:3:"ὲ";s:4:"ὲ";s:3:"έ";s:4:"έ";s:3:"ὴ";s:4:"ὴ";s:3:"ή";s:4:"ή";s:3:"ὶ";s:4:"ὶ";s:3:"ί";s:4:"ί";s:3:"ὸ";s:4:"ὸ";s:3:"ό";s:4:"ό";s:3:"ὺ";s:4:"ὺ";s:3:"ύ";s:4:"ύ";s:3:"ὼ";s:4:"ὼ";s:3:"ώ";s:4:"ώ";s:3:"ᾀ";s:6:"ᾀ";s:3:"ᾁ";s:6:"ᾁ";s:3:"ᾂ";s:8:"ᾂ";s:3:"ᾃ";s:8:"ᾃ";s:3:"ᾄ";s:8:"ᾄ";s:3:"ᾅ";s:8:"ᾅ";s:3:"ᾆ";s:8:"ᾆ";s:3:"ᾇ";s:8:"ᾇ";s:3:"ᾈ";s:6:"ᾈ";s:3:"ᾉ";s:6:"ᾉ";s:3:"ᾊ";s:8:"ᾊ";s:3:"ᾋ";s:8:"ᾋ";s:3:"ᾌ";s:8:"ᾌ";s:3:"ᾍ";s:8:"ᾍ";s:3:"ᾎ";s:8:"ᾎ";s:3:"ᾏ";s:8:"ᾏ";s:3:"ᾐ";s:6:"ᾐ";s:3:"ᾑ";s:6:"ᾑ";s:3:"ᾒ";s:8:"ᾒ";s:3:"ᾓ";s:8:"ᾓ";s:3:"ᾔ";s:8:"ᾔ";s:3:"ᾕ";s:8:"ᾕ";s:3:"ᾖ";s:8:"ᾖ";s:3:"ᾗ";s:8:"ᾗ";s:3:"ᾘ";s:6:"ᾘ";s:3:"ᾙ";s:6:"ᾙ";s:3:"ᾚ";s:8:"ᾚ";s:3:"ᾛ";s:8:"ᾛ";s:3:"ᾜ";s:8:"ᾜ";s:3:"ᾝ";s:8:"ᾝ";s:3:"ᾞ";s:8:"ᾞ";s:3:"ᾟ";s:8:"ᾟ";s:3:"ᾠ";s:6:"ᾠ";s:3:"ᾡ";s:6:"ᾡ";s:3:"ᾢ";s:8:"ᾢ";s:3:"ᾣ";s:8:"ᾣ";s:3:"ᾤ";s:8:"ᾤ";s:3:"ᾥ";s:8:"ᾥ";s:3:"ᾦ";s:8:"ᾦ";s:3:"ᾧ";s:8:"ᾧ";s:3:"ᾨ";s:6:"ᾨ";s:3:"ᾩ";s:6:"ᾩ";s:3:"ᾪ";s:8:"ᾪ";s:3:"ᾫ";s:8:"ᾫ";s:3:"ᾬ";s:8:"ᾬ";s:3:"ᾭ";s:8:"ᾭ";s:3:"ᾮ";s:8:"ᾮ";s:3:"ᾯ";s:8:"ᾯ";s:3:"ᾰ";s:4:"ᾰ";s:3:"ᾱ";s:4:"ᾱ";s:3:"ᾲ";s:6:"ᾲ";s:3:"ᾳ";s:4:"ᾳ";s:3:"ᾴ";s:6:"ᾴ";s:3:"ᾶ";s:4:"ᾶ";s:3:"ᾷ";s:6:"ᾷ";s:3:"Ᾰ";s:4:"Ᾰ";s:3:"Ᾱ";s:4:"Ᾱ";s:3:"Ὰ";s:4:"Ὰ";s:3:"Ά";s:4:"Ά";s:3:"ᾼ";s:4:"ᾼ";s:3:"ι";s:2:"ι";s:3:"῁";s:4:"῁";s:3:"ῂ";s:6:"ῂ";s:3:"ῃ";s:4:"ῃ";s:3:"ῄ";s:6:"ῄ";s:3:"ῆ";s:4:"ῆ";s:3:"ῇ";s:6:"ῇ";s:3:"Ὲ";s:4:"Ὲ";s:3:"Έ";s:4:"Έ";s:3:"Ὴ";s:4:"Ὴ";s:3:"Ή";s:4:"Ή";s:3:"ῌ";s:4:"ῌ";s:3:"῍";s:5:"῍";s:3:"῎";s:5:"῎";s:3:"῏";s:5:"῏";s:3:"ῐ";s:4:"ῐ";s:3:"ῑ";s:4:"ῑ";s:3:"ῒ";s:6:"ῒ";s:3:"ΐ";s:6:"ΐ";s:3:"ῖ";s:4:"ῖ";s:3:"ῗ";s:6:"ῗ";s:3:"Ῐ";s:4:"Ῐ";s:3:"Ῑ";s:4:"Ῑ";s:3:"Ὶ";s:4:"Ὶ";s:3:"Ί";s:4:"Ί";s:3:"῝";s:5:"῝";s:3:"῞";s:5:"῞";s:3:"῟";s:5:"῟";s:3:"ῠ";s:4:"ῠ";s:3:"ῡ";s:4:"ῡ";s:3:"ῢ";s:6:"ῢ";s:3:"ΰ";s:6:"ΰ";s:3:"ῤ";s:4:"ῤ";s:3:"ῥ";s:4:"ῥ";s:3:"ῦ";s:4:"ῦ";s:3:"ῧ";s:6:"ῧ";s:3:"Ῠ";s:4:"Ῠ";s:3:"Ῡ";s:4:"Ῡ";s:3:"Ὺ";s:4:"Ὺ";s:3:"Ύ";s:4:"Ύ";s:3:"Ῥ";s:4:"Ῥ";s:3:"῭";s:4:"῭";s:3:"΅";s:4:"΅";s:3:"`";s:1:"`";s:3:"ῲ";s:6:"ῲ";s:3:"ῳ";s:4:"ῳ";s:3:"ῴ";s:6:"ῴ";s:3:"ῶ";s:4:"ῶ";s:3:"ῷ";s:6:"ῷ";s:3:"Ὸ";s:4:"Ὸ";s:3:"Ό";s:4:"Ό";s:3:"Ὼ";s:4:"Ὼ";s:3:"Ώ";s:4:"Ώ";s:3:"ῼ";s:4:"ῼ";s:3:"´";s:2:"´";s:3:" ";s:3:" ";s:3:" ";s:3:" ";s:3:"Ω";s:2:"Ω";s:3:"K";s:1:"K";s:3:"Å";s:3:"Å";s:3:"↚";s:5:"↚";s:3:"↛";s:5:"↛";s:3:"↮";s:5:"↮";s:3:"⇍";s:5:"⇍";s:3:"⇎";s:5:"⇎";s:3:"⇏";s:5:"⇏";s:3:"∄";s:5:"∄";s:3:"∉";s:5:"∉";s:3:"∌";s:5:"∌";s:3:"∤";s:5:"∤";s:3:"∦";s:5:"∦";s:3:"≁";s:5:"≁";s:3:"≄";s:5:"≄";s:3:"≇";s:5:"≇";s:3:"≉";s:5:"≉";s:3:"≠";s:3:"≠";s:3:"≢";s:5:"≢";s:3:"≭";s:5:"≭";s:3:"≮";s:3:"≮";s:3:"≯";s:3:"≯";s:3:"≰";s:5:"≰";s:3:"≱";s:5:"≱";s:3:"≴";s:5:"≴";s:3:"≵";s:5:"≵";s:3:"≸";s:5:"≸";s:3:"≹";s:5:"≹";s:3:"⊀";s:5:"⊀";s:3:"⊁";s:5:"⊁";s:3:"⊄";s:5:"⊄";s:3:"⊅";s:5:"⊅";s:3:"⊈";s:5:"⊈";s:3:"⊉";s:5:"⊉";s:3:"⊬";s:5:"⊬";s:3:"⊭";s:5:"⊭";s:3:"⊮";s:5:"⊮";s:3:"⊯";s:5:"⊯";s:3:"⋠";s:5:"⋠";s:3:"⋡";s:5:"⋡";s:3:"⋢";s:5:"⋢";s:3:"⋣";s:5:"⋣";s:3:"⋪";s:5:"⋪";s:3:"⋫";s:5:"⋫";s:3:"⋬";s:5:"⋬";s:3:"⋭";s:5:"⋭";s:3:"〈";s:3:"〈";s:3:"〉";s:3:"〉";s:3:"⫝̸";s:5:"⫝̸";s:3:"が";s:6:"が";s:3:"ぎ";s:6:"ぎ";s:3:"ぐ";s:6:"ぐ";s:3:"げ";s:6:"げ";s:3:"ご";s:6:"ご";s:3:"ざ";s:6:"ざ";s:3:"じ";s:6:"じ";s:3:"ず";s:6:"ず";s:3:"ぜ";s:6:"ぜ";s:3:"ぞ";s:6:"ぞ";s:3:"だ";s:6:"だ";s:3:"ぢ";s:6:"ぢ";s:3:"づ";s:6:"づ";s:3:"で";s:6:"で";s:3:"ど";s:6:"ど";s:3:"ば";s:6:"ば";s:3:"ぱ";s:6:"ぱ";s:3:"び";s:6:"び";s:3:"ぴ";s:6:"ぴ";s:3:"ぶ";s:6:"ぶ";s:3:"ぷ";s:6:"ぷ";s:3:"べ";s:6:"べ";s:3:"ぺ";s:6:"ぺ";s:3:"ぼ";s:6:"ぼ";s:3:"ぽ";s:6:"ぽ";s:3:"ゔ";s:6:"ゔ";s:3:"ゞ";s:6:"ゞ";s:3:"ガ";s:6:"ガ";s:3:"ギ";s:6:"ギ";s:3:"グ";s:6:"グ";s:3:"ゲ";s:6:"ゲ";s:3:"ゴ";s:6:"ゴ";s:3:"ザ";s:6:"ザ";s:3:"ジ";s:6:"ジ";s:3:"ズ";s:6:"ズ";s:3:"ゼ";s:6:"ゼ";s:3:"ゾ";s:6:"ゾ";s:3:"ダ";s:6:"ダ";s:3:"ヂ";s:6:"ヂ";s:3:"ヅ";s:6:"ヅ";s:3:"デ";s:6:"デ";s:3:"ド";s:6:"ド";s:3:"バ";s:6:"バ";s:3:"パ";s:6:"パ";s:3:"ビ";s:6:"ビ";s:3:"ピ";s:6:"ピ";s:3:"ブ";s:6:"ブ";s:3:"プ";s:6:"プ";s:3:"ベ";s:6:"ベ";s:3:"ペ";s:6:"ペ";s:3:"ボ";s:6:"ボ";s:3:"ポ";s:6:"ポ";s:3:"ヴ";s:6:"ヴ";s:3:"ヷ";s:6:"ヷ";s:3:"ヸ";s:6:"ヸ";s:3:"ヹ";s:6:"ヹ";s:3:"ヺ";s:6:"ヺ";s:3:"ヾ";s:6:"ヾ";s:3:"豈";s:3:"豈";s:3:"更";s:3:"更";s:3:"車";s:3:"車";s:3:"賈";s:3:"賈";s:3:"滑";s:3:"滑";s:3:"串";s:3:"串";s:3:"句";s:3:"句";s:3:"龜";s:3:"龜";s:3:"龜";s:3:"龜";s:3:"契";s:3:"契";s:3:"金";s:3:"金";s:3:"喇";s:3:"喇";s:3:"奈";s:3:"奈";s:3:"懶";s:3:"懶";s:3:"癩";s:3:"癩";s:3:"羅";s:3:"羅";s:3:"蘿";s:3:"蘿";s:3:"螺";s:3:"螺";s:3:"裸";s:3:"裸";s:3:"邏";s:3:"邏";s:3:"樂";s:3:"樂";s:3:"洛";s:3:"洛";s:3:"烙";s:3:"烙";s:3:"珞";s:3:"珞";s:3:"落";s:3:"落";s:3:"酪";s:3:"酪";s:3:"駱";s:3:"駱";s:3:"亂";s:3:"亂";s:3:"卵";s:3:"卵";s:3:"欄";s:3:"欄";s:3:"爛";s:3:"爛";s:3:"蘭";s:3:"蘭";s:3:"鸞";s:3:"鸞";s:3:"嵐";s:3:"嵐";s:3:"濫";s:3:"濫";s:3:"藍";s:3:"藍";s:3:"襤";s:3:"襤";s:3:"拉";s:3:"拉";s:3:"臘";s:3:"臘";s:3:"蠟";s:3:"蠟";s:3:"廊";s:3:"廊";s:3:"朗";s:3:"朗";s:3:"浪";s:3:"浪";s:3:"狼";s:3:"狼";s:3:"郎";s:3:"郎";s:3:"來";s:3:"來";s:3:"冷";s:3:"冷";s:3:"勞";s:3:"勞";s:3:"擄";s:3:"擄";s:3:"櫓";s:3:"櫓";s:3:"爐";s:3:"爐";s:3:"盧";s:3:"盧";s:3:"老";s:3:"老";s:3:"蘆";s:3:"蘆";s:3:"虜";s:3:"虜";s:3:"路";s:3:"路";s:3:"露";s:3:"露";s:3:"魯";s:3:"魯";s:3:"鷺";s:3:"鷺";s:3:"碌";s:3:"碌";s:3:"祿";s:3:"祿";s:3:"綠";s:3:"綠";s:3:"菉";s:3:"菉";s:3:"錄";s:3:"錄";s:3:"鹿";s:3:"鹿";s:3:"論";s:3:"論";s:3:"壟";s:3:"壟";s:3:"弄";s:3:"弄";s:3:"籠";s:3:"籠";s:3:"聾";s:3:"聾";s:3:"牢";s:3:"牢";s:3:"磊";s:3:"磊";s:3:"賂";s:3:"賂";s:3:"雷";s:3:"雷";s:3:"壘";s:3:"壘";s:3:"屢";s:3:"屢";s:3:"樓";s:3:"樓";s:3:"淚";s:3:"淚";s:3:"漏";s:3:"漏";s:3:"累";s:3:"累";s:3:"縷";s:3:"縷";s:3:"陋";s:3:"陋";s:3:"勒";s:3:"勒";s:3:"肋";s:3:"肋";s:3:"凜";s:3:"凜";s:3:"凌";s:3:"凌";s:3:"稜";s:3:"稜";s:3:"綾";s:3:"綾";s:3:"菱";s:3:"菱";s:3:"陵";s:3:"陵";s:3:"讀";s:3:"讀";s:3:"拏";s:3:"拏";s:3:"樂";s:3:"樂";s:3:"諾";s:3:"諾";s:3:"丹";s:3:"丹";s:3:"寧";s:3:"寧";s:3:"怒";s:3:"怒";s:3:"率";s:3:"率";s:3:"異";s:3:"異";s:3:"北";s:3:"北";s:3:"磻";s:3:"磻";s:3:"便";s:3:"便";s:3:"復";s:3:"復";s:3:"不";s:3:"不";s:3:"泌";s:3:"泌";s:3:"數";s:3:"數";s:3:"索";s:3:"索";s:3:"參";s:3:"參";s:3:"塞";s:3:"塞";s:3:"省";s:3:"省";s:3:"葉";s:3:"葉";s:3:"說";s:3:"說";s:3:"殺";s:3:"殺";s:3:"辰";s:3:"辰";s:3:"沈";s:3:"沈";s:3:"拾";s:3:"拾";s:3:"若";s:3:"若";s:3:"掠";s:3:"掠";s:3:"略";s:3:"略";s:3:"亮";s:3:"亮";s:3:"兩";s:3:"兩";s:3:"凉";s:3:"凉";s:3:"梁";s:3:"梁";s:3:"糧";s:3:"糧";s:3:"良";s:3:"良";s:3:"諒";s:3:"諒";s:3:"量";s:3:"量";s:3:"勵";s:3:"勵";s:3:"呂";s:3:"呂";s:3:"女";s:3:"女";s:3:"廬";s:3:"廬";s:3:"旅";s:3:"旅";s:3:"濾";s:3:"濾";s:3:"礪";s:3:"礪";s:3:"閭";s:3:"閭";s:3:"驪";s:3:"驪";s:3:"麗";s:3:"麗";s:3:"黎";s:3:"黎";s:3:"力";s:3:"力";s:3:"曆";s:3:"曆";s:3:"歷";s:3:"歷";s:3:"轢";s:3:"轢";s:3:"年";s:3:"年";s:3:"憐";s:3:"憐";s:3:"戀";s:3:"戀";s:3:"撚";s:3:"撚";s:3:"漣";s:3:"漣";s:3:"煉";s:3:"煉";s:3:"璉";s:3:"璉";s:3:"秊";s:3:"秊";s:3:"練";s:3:"練";s:3:"聯";s:3:"聯";s:3:"輦";s:3:"輦";s:3:"蓮";s:3:"蓮";s:3:"連";s:3:"連";s:3:"鍊";s:3:"鍊";s:3:"列";s:3:"列";s:3:"劣";s:3:"劣";s:3:"咽";s:3:"咽";s:3:"烈";s:3:"烈";s:3:"裂";s:3:"裂";s:3:"說";s:3:"說";s:3:"廉";s:3:"廉";s:3:"念";s:3:"念";s:3:"捻";s:3:"捻";s:3:"殮";s:3:"殮";s:3:"簾";s:3:"簾";s:3:"獵";s:3:"獵";s:3:"令";s:3:"令";s:3:"囹";s:3:"囹";s:3:"寧";s:3:"寧";s:3:"嶺";s:3:"嶺";s:3:"怜";s:3:"怜";s:3:"玲";s:3:"玲";s:3:"瑩";s:3:"瑩";s:3:"羚";s:3:"羚";s:3:"聆";s:3:"聆";s:3:"鈴";s:3:"鈴";s:3:"零";s:3:"零";s:3:"靈";s:3:"靈";s:3:"領";s:3:"領";s:3:"例";s:3:"例";s:3:"禮";s:3:"禮";s:3:"醴";s:3:"醴";s:3:"隸";s:3:"隸";s:3:"惡";s:3:"惡";s:3:"了";s:3:"了";s:3:"僚";s:3:"僚";s:3:"寮";s:3:"寮";s:3:"尿";s:3:"尿";s:3:"料";s:3:"料";s:3:"樂";s:3:"樂";s:3:"燎";s:3:"燎";s:3:"療";s:3:"療";s:3:"蓼";s:3:"蓼";s:3:"遼";s:3:"遼";s:3:"龍";s:3:"龍";s:3:"暈";s:3:"暈";s:3:"阮";s:3:"阮";s:3:"劉";s:3:"劉";s:3:"杻";s:3:"杻";s:3:"柳";s:3:"柳";s:3:"流";s:3:"流";s:3:"溜";s:3:"溜";s:3:"琉";s:3:"琉";s:3:"留";s:3:"留";s:3:"硫";s:3:"硫";s:3:"紐";s:3:"紐";s:3:"類";s:3:"類";s:3:"六";s:3:"六";s:3:"戮";s:3:"戮";s:3:"陸";s:3:"陸";s:3:"倫";s:3:"倫";s:3:"崙";s:3:"崙";s:3:"淪";s:3:"淪";s:3:"輪";s:3:"輪";s:3:"律";s:3:"律";s:3:"慄";s:3:"慄";s:3:"栗";s:3:"栗";s:3:"率";s:3:"率";s:3:"隆";s:3:"隆";s:3:"利";s:3:"利";s:3:"吏";s:3:"吏";s:3:"履";s:3:"履";s:3:"易";s:3:"易";s:3:"李";s:3:"李";s:3:"梨";s:3:"梨";s:3:"泥";s:3:"泥";s:3:"理";s:3:"理";s:3:"痢";s:3:"痢";s:3:"罹";s:3:"罹";s:3:"裏";s:3:"裏";s:3:"裡";s:3:"裡";s:3:"里";s:3:"里";s:3:"離";s:3:"離";s:3:"匿";s:3:"匿";s:3:"溺";s:3:"溺";s:3:"吝";s:3:"吝";s:3:"燐";s:3:"燐";s:3:"璘";s:3:"璘";s:3:"藺";s:3:"藺";s:3:"隣";s:3:"隣";s:3:"鱗";s:3:"鱗";s:3:"麟";s:3:"麟";s:3:"林";s:3:"林";s:3:"淋";s:3:"淋";s:3:"臨";s:3:"臨";s:3:"立";s:3:"立";s:3:"笠";s:3:"笠";s:3:"粒";s:3:"粒";s:3:"狀";s:3:"狀";s:3:"炙";s:3:"炙";s:3:"識";s:3:"識";s:3:"什";s:3:"什";s:3:"茶";s:3:"茶";s:3:"刺";s:3:"刺";s:3:"切";s:3:"切";s:3:"度";s:3:"度";s:3:"拓";s:3:"拓";s:3:"糖";s:3:"糖";s:3:"宅";s:3:"宅";s:3:"洞";s:3:"洞";s:3:"暴";s:3:"暴";s:3:"輻";s:3:"輻";s:3:"行";s:3:"行";s:3:"降";s:3:"降";s:3:"見";s:3:"見";s:3:"廓";s:3:"廓";s:3:"兀";s:3:"兀";s:3:"嗀";s:3:"嗀";s:3:"塚";s:3:"塚";s:3:"晴";s:3:"晴";s:3:"凞";s:3:"凞";s:3:"猪";s:3:"猪";s:3:"益";s:3:"益";s:3:"礼";s:3:"礼";s:3:"神";s:3:"神";s:3:"祥";s:3:"祥";s:3:"福";s:3:"福";s:3:"靖";s:3:"靖";s:3:"精";s:3:"精";s:3:"羽";s:3:"羽";s:3:"蘒";s:3:"蘒";s:3:"諸";s:3:"諸";s:3:"逸";s:3:"逸";s:3:"都";s:3:"都";s:3:"飯";s:3:"飯";s:3:"飼";s:3:"飼";s:3:"館";s:3:"館";s:3:"鶴";s:3:"鶴";s:3:"侮";s:3:"侮";s:3:"僧";s:3:"僧";s:3:"免";s:3:"免";s:3:"勉";s:3:"勉";s:3:"勤";s:3:"勤";s:3:"卑";s:3:"卑";s:3:"喝";s:3:"喝";s:3:"嘆";s:3:"嘆";s:3:"器";s:3:"器";s:3:"塀";s:3:"塀";s:3:"墨";s:3:"墨";s:3:"層";s:3:"層";s:3:"屮";s:3:"屮";s:3:"悔";s:3:"悔";s:3:"慨";s:3:"慨";s:3:"憎";s:3:"憎";s:3:"懲";s:3:"懲";s:3:"敏";s:3:"敏";s:3:"既";s:3:"既";s:3:"暑";s:3:"暑";s:3:"梅";s:3:"梅";s:3:"海";s:3:"海";s:3:"渚";s:3:"渚";s:3:"漢";s:3:"漢";s:3:"煮";s:3:"煮";s:3:"爫";s:3:"爫";s:3:"琢";s:3:"琢";s:3:"碑";s:3:"碑";s:3:"社";s:3:"社";s:3:"祉";s:3:"祉";s:3:"祈";s:3:"祈";s:3:"祐";s:3:"祐";s:3:"祖";s:3:"祖";s:3:"祝";s:3:"祝";s:3:"禍";s:3:"禍";s:3:"禎";s:3:"禎";s:3:"穀";s:3:"穀";s:3:"突";s:3:"突";s:3:"節";s:3:"節";s:3:"練";s:3:"練";s:3:"縉";s:3:"縉";s:3:"繁";s:3:"繁";s:3:"署";s:3:"署";s:3:"者";s:3:"者";s:3:"臭";s:3:"臭";s:3:"艹";s:3:"艹";s:3:"艹";s:3:"艹";s:3:"著";s:3:"著";s:3:"褐";s:3:"褐";s:3:"視";s:3:"視";s:3:"謁";s:3:"謁";s:3:"謹";s:3:"謹";s:3:"賓";s:3:"賓";s:3:"贈";s:3:"贈";s:3:"辶";s:3:"辶";s:3:"逸";s:3:"逸";s:3:"難";s:3:"難";s:3:"響";s:3:"響";s:3:"頻";s:3:"頻";s:3:"並";s:3:"並";s:3:"况";s:3:"况";s:3:"全";s:3:"全";s:3:"侀";s:3:"侀";s:3:"充";s:3:"充";s:3:"冀";s:3:"冀";s:3:"勇";s:3:"勇";s:3:"勺";s:3:"勺";s:3:"喝";s:3:"喝";s:3:"啕";s:3:"啕";s:3:"喙";s:3:"喙";s:3:"嗢";s:3:"嗢";s:3:"塚";s:3:"塚";s:3:"墳";s:3:"墳";s:3:"奄";s:3:"奄";s:3:"奔";s:3:"奔";s:3:"婢";s:3:"婢";s:3:"嬨";s:3:"嬨";s:3:"廒";s:3:"廒";s:3:"廙";s:3:"廙";s:3:"彩";s:3:"彩";s:3:"徭";s:3:"徭";s:3:"惘";s:3:"惘";s:3:"慎";s:3:"慎";s:3:"愈";s:3:"愈";s:3:"憎";s:3:"憎";s:3:"慠";s:3:"慠";s:3:"懲";s:3:"懲";s:3:"戴";s:3:"戴";s:3:"揄";s:3:"揄";s:3:"搜";s:3:"搜";s:3:"摒";s:3:"摒";s:3:"敖";s:3:"敖";s:3:"晴";s:3:"晴";s:3:"朗";s:3:"朗";s:3:"望";s:3:"望";s:3:"杖";s:3:"杖";s:3:"歹";s:3:"歹";s:3:"殺";s:3:"殺";s:3:"流";s:3:"流";s:3:"滛";s:3:"滛";s:3:"滋";s:3:"滋";s:3:"漢";s:3:"漢";s:3:"瀞";s:3:"瀞";s:3:"煮";s:3:"煮";s:3:"瞧";s:3:"瞧";s:3:"爵";s:3:"爵";s:3:"犯";s:3:"犯";s:3:"猪";s:3:"猪";s:3:"瑱";s:3:"瑱";s:3:"甆";s:3:"甆";s:3:"画";s:3:"画";s:3:"瘝";s:3:"瘝";s:3:"瘟";s:3:"瘟";s:3:"益";s:3:"益";s:3:"盛";s:3:"盛";s:3:"直";s:3:"直";s:3:"睊";s:3:"睊";s:3:"着";s:3:"着";s:3:"磌";s:3:"磌";s:3:"窱";s:3:"窱";s:3:"節";s:3:"節";s:3:"类";s:3:"类";s:3:"絛";s:3:"絛";s:3:"練";s:3:"練";s:3:"缾";s:3:"缾";s:3:"者";s:3:"者";s:3:"荒";s:3:"荒";s:3:"華";s:3:"華";s:3:"蝹";s:3:"蝹";s:3:"襁";s:3:"襁";s:3:"覆";s:3:"覆";s:3:"視";s:3:"視";s:3:"調";s:3:"調";s:3:"諸";s:3:"諸";s:3:"請";s:3:"請";s:3:"謁";s:3:"謁";s:3:"諾";s:3:"諾";s:3:"諭";s:3:"諭";s:3:"謹";s:3:"謹";s:3:"變";s:3:"變";s:3:"贈";s:3:"贈";s:3:"輸";s:3:"輸";s:3:"遲";s:3:"遲";s:3:"醙";s:3:"醙";s:3:"鉶";s:3:"鉶";s:3:"陼";s:3:"陼";s:3:"難";s:3:"難";s:3:"靖";s:3:"靖";s:3:"韛";s:3:"韛";s:3:"響";s:3:"響";s:3:"頋";s:3:"頋";s:3:"頻";s:3:"頻";s:3:"鬒";s:3:"鬒";s:3:"龜";s:3:"龜";s:3:"𢡊";s:4:"𢡊";s:3:"𢡄";s:4:"𢡄";s:3:"𣏕";s:4:"𣏕";s:3:"㮝";s:3:"㮝";s:3:"䀘";s:3:"䀘";s:3:"䀹";s:3:"䀹";s:3:"𥉉";s:4:"𥉉";s:3:"𥳐";s:4:"𥳐";s:3:"𧻓";s:4:"𧻓";s:3:"齃";s:3:"齃";s:3:"龎";s:3:"龎";s:3:"יִ";s:4:"יִ";s:3:"ײַ";s:4:"ײַ";s:3:"שׁ";s:4:"שׁ";s:3:"שׂ";s:4:"שׂ";s:3:"שּׁ";s:6:"שּׁ";s:3:"שּׂ";s:6:"שּׂ";s:3:"אַ";s:4:"אַ";s:3:"אָ";s:4:"אָ";s:3:"אּ";s:4:"אּ";s:3:"בּ";s:4:"בּ";s:3:"גּ";s:4:"גּ";s:3:"דּ";s:4:"דּ";s:3:"הּ";s:4:"הּ";s:3:"וּ";s:4:"וּ";s:3:"זּ";s:4:"זּ";s:3:"טּ";s:4:"טּ";s:3:"יּ";s:4:"יּ";s:3:"ךּ";s:4:"ךּ";s:3:"כּ";s:4:"כּ";s:3:"לּ";s:4:"לּ";s:3:"מּ";s:4:"מּ";s:3:"נּ";s:4:"נּ";s:3:"סּ";s:4:"סּ";s:3:"ףּ";s:4:"ףּ";s:3:"פּ";s:4:"פּ";s:3:"צּ";s:4:"צּ";s:3:"קּ";s:4:"קּ";s:3:"רּ";s:4:"רּ";s:3:"שּ";s:4:"שּ";s:3:"תּ";s:4:"תּ";s:3:"וֹ";s:4:"וֹ";s:3:"בֿ";s:4:"בֿ";s:3:"כֿ";s:4:"כֿ";s:3:"פֿ";s:4:"פֿ";s:4:"𝅗𝅥";s:8:"𝅗𝅥";s:4:"𝅘𝅥";s:8:"𝅘𝅥";s:4:"𝅘𝅥𝅮";s:12:"𝅘𝅥𝅮";s:4:"𝅘𝅥𝅯";s:12:"𝅘𝅥𝅯";s:4:"𝅘𝅥𝅰";s:12:"𝅘𝅥𝅰";s:4:"𝅘𝅥𝅱";s:12:"𝅘𝅥𝅱";s:4:"𝅘𝅥𝅲";s:12:"𝅘𝅥𝅲";s:4:"𝆹𝅥";s:8:"𝆹𝅥";s:4:"𝆺𝅥";s:8:"𝆺𝅥";s:4:"𝆹𝅥𝅮";s:12:"𝆹𝅥𝅮";s:4:"𝆺𝅥𝅮";s:12:"𝆺𝅥𝅮";s:4:"𝆹𝅥𝅯";s:12:"𝆹𝅥𝅯";s:4:"𝆺𝅥𝅯";s:12:"𝆺𝅥𝅯";s:4:"丽";s:3:"丽";s:4:"丸";s:3:"丸";s:4:"乁";s:3:"乁";s:4:"𠄢";s:4:"𠄢";s:4:"你";s:3:"你";s:4:"侮";s:3:"侮";s:4:"侻";s:3:"侻";s:4:"倂";s:3:"倂";s:4:"偺";s:3:"偺";s:4:"備";s:3:"備";s:4:"僧";s:3:"僧";s:4:"像";s:3:"像";s:4:"㒞";s:3:"㒞";s:4:"𠘺";s:4:"𠘺";s:4:"免";s:3:"免";s:4:"兔";s:3:"兔";s:4:"兤";s:3:"兤";s:4:"具";s:3:"具";s:4:"𠔜";s:4:"𠔜";s:4:"㒹";s:3:"㒹";s:4:"內";s:3:"內";s:4:"再";s:3:"再";s:4:"𠕋";s:4:"𠕋";s:4:"冗";s:3:"冗";s:4:"冤";s:3:"冤";s:4:"仌";s:3:"仌";s:4:"冬";s:3:"冬";s:4:"况";s:3:"况";s:4:"𩇟";s:4:"𩇟";s:4:"凵";s:3:"凵";s:4:"刃";s:3:"刃";s:4:"㓟";s:3:"㓟";s:4:"刻";s:3:"刻";s:4:"剆";s:3:"剆";s:4:"割";s:3:"割";s:4:"剷";s:3:"剷";s:4:"㔕";s:3:"㔕";s:4:"勇";s:3:"勇";s:4:"勉";s:3:"勉";s:4:"勤";s:3:"勤";s:4:"勺";s:3:"勺";s:4:"包";s:3:"包";s:4:"匆";s:3:"匆";s:4:"北";s:3:"北";s:4:"卉";s:3:"卉";s:4:"卑";s:3:"卑";s:4:"博";s:3:"博";s:4:"即";s:3:"即";s:4:"卽";s:3:"卽";s:4:"卿";s:3:"卿";s:4:"卿";s:3:"卿";s:4:"卿";s:3:"卿";s:4:"𠨬";s:4:"𠨬";s:4:"灰";s:3:"灰";s:4:"及";s:3:"及";s:4:"叟";s:3:"叟";s:4:"𠭣";s:4:"𠭣";s:4:"叫";s:3:"叫";s:4:"叱";s:3:"叱";s:4:"吆";s:3:"吆";s:4:"咞";s:3:"咞";s:4:"吸";s:3:"吸";s:4:"呈";s:3:"呈";s:4:"周";s:3:"周";s:4:"咢";s:3:"咢";s:4:"哶";s:3:"哶";s:4:"唐";s:3:"唐";s:4:"啓";s:3:"啓";s:4:"啣";s:3:"啣";s:4:"善";s:3:"善";s:4:"善";s:3:"善";s:4:"喙";s:3:"喙";s:4:"喫";s:3:"喫";s:4:"喳";s:3:"喳";s:4:"嗂";s:3:"嗂";s:4:"圖";s:3:"圖";s:4:"嘆";s:3:"嘆";s:4:"圗";s:3:"圗";s:4:"噑";s:3:"噑";s:4:"噴";s:3:"噴";s:4:"切";s:3:"切";s:4:"壮";s:3:"壮";s:4:"城";s:3:"城";s:4:"埴";s:3:"埴";s:4:"堍";s:3:"堍";s:4:"型";s:3:"型";s:4:"堲";s:3:"堲";s:4:"報";s:3:"報";s:4:"墬";s:3:"墬";s:4:"𡓤";s:4:"𡓤";s:4:"売";s:3:"売";s:4:"壷";s:3:"壷";s:4:"夆";s:3:"夆";s:4:"多";s:3:"多";s:4:"夢";s:3:"夢";s:4:"奢";s:3:"奢";s:4:"𡚨";s:4:"𡚨";s:4:"𡛪";s:4:"𡛪";s:4:"姬";s:3:"姬";s:4:"娛";s:3:"娛";s:4:"娧";s:3:"娧";s:4:"姘";s:3:"姘";s:4:"婦";s:3:"婦";s:4:"㛮";s:3:"㛮";s:4:"㛼";s:3:"㛼";s:4:"嬈";s:3:"嬈";s:4:"嬾";s:3:"嬾";s:4:"嬾";s:3:"嬾";s:4:"𡧈";s:4:"𡧈";s:4:"寃";s:3:"寃";s:4:"寘";s:3:"寘";s:4:"寧";s:3:"寧";s:4:"寳";s:3:"寳";s:4:"𡬘";s:4:"𡬘";s:4:"寿";s:3:"寿";s:4:"将";s:3:"将";s:4:"当";s:3:"当";s:4:"尢";s:3:"尢";s:4:"㞁";s:3:"㞁";s:4:"屠";s:3:"屠";s:4:"屮";s:3:"屮";s:4:"峀";s:3:"峀";s:4:"岍";s:3:"岍";s:4:"𡷤";s:4:"𡷤";s:4:"嵃";s:3:"嵃";s:4:"𡷦";s:4:"𡷦";s:4:"嵮";s:3:"嵮";s:4:"嵫";s:3:"嵫";s:4:"嵼";s:3:"嵼";s:4:"巡";s:3:"巡";s:4:"巢";s:3:"巢";s:4:"㠯";s:3:"㠯";s:4:"巽";s:3:"巽";s:4:"帨";s:3:"帨";s:4:"帽";s:3:"帽";s:4:"幩";s:3:"幩";s:4:"㡢";s:3:"㡢";s:4:"𢆃";s:4:"𢆃";s:4:"㡼";s:3:"㡼";s:4:"庰";s:3:"庰";s:4:"庳";s:3:"庳";s:4:"庶";s:3:"庶";s:4:"廊";s:3:"廊";s:4:"𪎒";s:4:"𪎒";s:4:"廾";s:3:"廾";s:4:"𢌱";s:4:"𢌱";s:4:"𢌱";s:4:"𢌱";s:4:"舁";s:3:"舁";s:4:"弢";s:3:"弢";s:4:"弢";s:3:"弢";s:4:"㣇";s:3:"㣇";s:4:"𣊸";s:4:"𣊸";s:4:"𦇚";s:4:"𦇚";s:4:"形";s:3:"形";s:4:"彫";s:3:"彫";s:4:"㣣";s:3:"㣣";s:4:"徚";s:3:"徚";s:4:"忍";s:3:"忍";s:4:"志";s:3:"志";s:4:"忹";s:3:"忹";s:4:"悁";s:3:"悁";s:4:"㤺";s:3:"㤺";s:4:"㤜";s:3:"㤜";s:4:"悔";s:3:"悔";s:4:"𢛔";s:4:"𢛔";s:4:"惇";s:3:"惇";s:4:"慈";s:3:"慈";s:4:"慌";s:3:"慌";s:4:"慎";s:3:"慎";s:4:"慌";s:3:"慌";s:4:"慺";s:3:"慺";s:4:"憎";s:3:"憎";s:4:"憲";s:3:"憲";s:4:"憤";s:3:"憤";s:4:"憯";s:3:"憯";s:4:"懞";s:3:"懞";s:4:"懲";s:3:"懲";s:4:"懶";s:3:"懶";s:4:"成";s:3:"成";s:4:"戛";s:3:"戛";s:4:"扝";s:3:"扝";s:4:"抱";s:3:"抱";s:4:"拔";s:3:"拔";s:4:"捐";s:3:"捐";s:4:"𢬌";s:4:"𢬌";s:4:"挽";s:3:"挽";s:4:"拼";s:3:"拼";s:4:"捨";s:3:"捨";s:4:"掃";s:3:"掃";s:4:"揤";s:3:"揤";s:4:"𢯱";s:4:"𢯱";s:4:"搢";s:3:"搢";s:4:"揅";s:3:"揅";s:4:"掩";s:3:"掩";s:4:"㨮";s:3:"㨮";s:4:"摩";s:3:"摩";s:4:"摾";s:3:"摾";s:4:"撝";s:3:"撝";s:4:"摷";s:3:"摷";s:4:"㩬";s:3:"㩬";s:4:"敏";s:3:"敏";s:4:"敬";s:3:"敬";s:4:"𣀊";s:4:"𣀊";s:4:"旣";s:3:"旣";s:4:"書";s:3:"書";s:4:"晉";s:3:"晉";s:4:"㬙";s:3:"㬙";s:4:"暑";s:3:"暑";s:4:"㬈";s:3:"㬈";s:4:"㫤";s:3:"㫤";s:4:"冒";s:3:"冒";s:4:"冕";s:3:"冕";s:4:"最";s:3:"最";s:4:"暜";s:3:"暜";s:4:"肭";s:3:"肭";s:4:"䏙";s:3:"䏙";s:4:"朗";s:3:"朗";s:4:"望";s:3:"望";s:4:"朡";s:3:"朡";s:4:"杞";s:3:"杞";s:4:"杓";s:3:"杓";s:4:"𣏃";s:4:"𣏃";s:4:"㭉";s:3:"㭉";s:4:"柺";s:3:"柺";s:4:"枅";s:3:"枅";s:4:"桒";s:3:"桒";s:4:"梅";s:3:"梅";s:4:"𣑭";s:4:"𣑭";s:4:"梎";s:3:"梎";s:4:"栟";s:3:"栟";s:4:"椔";s:3:"椔";s:4:"㮝";s:3:"㮝";s:4:"楂";s:3:"楂";s:4:"榣";s:3:"榣";s:4:"槪";s:3:"槪";s:4:"檨";s:3:"檨";s:4:"𣚣";s:4:"𣚣";s:4:"櫛";s:3:"櫛";s:4:"㰘";s:3:"㰘";s:4:"次";s:3:"次";s:4:"𣢧";s:4:"𣢧";s:4:"歔";s:3:"歔";s:4:"㱎";s:3:"㱎";s:4:"歲";s:3:"歲";s:4:"殟";s:3:"殟";s:4:"殺";s:3:"殺";s:4:"殻";s:3:"殻";s:4:"𣪍";s:4:"𣪍";s:4:"𡴋";s:4:"𡴋";s:4:"𣫺";s:4:"𣫺";s:4:"汎";s:3:"汎";s:4:"𣲼";s:4:"𣲼";s:4:"沿";s:3:"沿";s:4:"泍";s:3:"泍";s:4:"汧";s:3:"汧";s:4:"洖";s:3:"洖";s:4:"派";s:3:"派";s:4:"海";s:3:"海";s:4:"流";s:3:"流";s:4:"浩";s:3:"浩";s:4:"浸";s:3:"浸";s:4:"涅";s:3:"涅";s:4:"𣴞";s:4:"𣴞";s:4:"洴";s:3:"洴";s:4:"港";s:3:"港";s:4:"湮";s:3:"湮";s:4:"㴳";s:3:"㴳";s:4:"滋";s:3:"滋";s:4:"滇";s:3:"滇";s:4:"𣻑";s:4:"𣻑";s:4:"淹";s:3:"淹";s:4:"潮";s:3:"潮";s:4:"𣽞";s:4:"𣽞";s:4:"𣾎";s:4:"𣾎";s:4:"濆";s:3:"濆";s:4:"瀹";s:3:"瀹";s:4:"瀞";s:3:"瀞";s:4:"瀛";s:3:"瀛";s:4:"㶖";s:3:"㶖";s:4:"灊";s:3:"灊";s:4:"災";s:3:"災";s:4:"灷";s:3:"灷";s:4:"炭";s:3:"炭";s:4:"𠔥";s:4:"𠔥";s:4:"煅";s:3:"煅";s:4:"𤉣";s:4:"𤉣";s:4:"熜";s:3:"熜";s:4:"𤎫";s:4:"𤎫";s:4:"爨";s:3:"爨";s:4:"爵";s:3:"爵";s:4:"牐";s:3:"牐";s:4:"𤘈";s:4:"𤘈";s:4:"犀";s:3:"犀";s:4:"犕";s:3:"犕";s:4:"𤜵";s:4:"𤜵";s:4:"𤠔";s:4:"𤠔";s:4:"獺";s:3:"獺";s:4:"王";s:3:"王";s:4:"㺬";s:3:"㺬";s:4:"玥";s:3:"玥";s:4:"㺸";s:3:"㺸";s:4:"㺸";s:3:"㺸";s:4:"瑇";s:3:"瑇";s:4:"瑜";s:3:"瑜";s:4:"瑱";s:3:"瑱";s:4:"璅";s:3:"璅";s:4:"瓊";s:3:"瓊";s:4:"㼛";s:3:"㼛";s:4:"甤";s:3:"甤";s:4:"𤰶";s:4:"𤰶";s:4:"甾";s:3:"甾";s:4:"𤲒";s:4:"𤲒";s:4:"異";s:3:"異";s:4:"𢆟";s:4:"𢆟";s:4:"瘐";s:3:"瘐";s:4:"𤾡";s:4:"𤾡";s:4:"𤾸";s:4:"𤾸";s:4:"𥁄";s:4:"𥁄";s:4:"㿼";s:3:"㿼";s:4:"䀈";s:3:"䀈";s:4:"直";s:3:"直";s:4:"𥃳";s:4:"𥃳";s:4:"𥃲";s:4:"𥃲";s:4:"𥄙";s:4:"𥄙";s:4:"𥄳";s:4:"𥄳";s:4:"眞";s:3:"眞";s:4:"真";s:3:"真";s:4:"真";s:3:"真";s:4:"睊";s:3:"睊";s:4:"䀹";s:3:"䀹";s:4:"瞋";s:3:"瞋";s:4:"䁆";s:3:"䁆";s:4:"䂖";s:3:"䂖";s:4:"𥐝";s:4:"𥐝";s:4:"硎";s:3:"硎";s:4:"碌";s:3:"碌";s:4:"磌";s:3:"磌";s:4:"䃣";s:3:"䃣";s:4:"𥘦";s:4:"𥘦";s:4:"祖";s:3:"祖";s:4:"𥚚";s:4:"𥚚";s:4:"𥛅";s:4:"𥛅";s:4:"福";s:3:"福";s:4:"秫";s:3:"秫";s:4:"䄯";s:3:"䄯";s:4:"穀";s:3:"穀";s:4:"穊";s:3:"穊";s:4:"穏";s:3:"穏";s:4:"𥥼";s:4:"𥥼";s:4:"𥪧";s:4:"𥪧";s:4:"𥪧";s:4:"𥪧";s:4:"竮";s:3:"竮";s:4:"䈂";s:3:"䈂";s:4:"𥮫";s:4:"𥮫";s:4:"篆";s:3:"篆";s:4:"築";s:3:"築";s:4:"䈧";s:3:"䈧";s:4:"𥲀";s:4:"𥲀";s:4:"糒";s:3:"糒";s:4:"䊠";s:3:"䊠";s:4:"糨";s:3:"糨";s:4:"糣";s:3:"糣";s:4:"紀";s:3:"紀";s:4:"𥾆";s:4:"𥾆";s:4:"絣";s:3:"絣";s:4:"䌁";s:3:"䌁";s:4:"緇";s:3:"緇";s:4:"縂";s:3:"縂";s:4:"繅";s:3:"繅";s:4:"䌴";s:3:"䌴";s:4:"𦈨";s:4:"𦈨";s:4:"𦉇";s:4:"𦉇";s:4:"䍙";s:3:"䍙";s:4:"𦋙";s:4:"𦋙";s:4:"罺";s:3:"罺";s:4:"𦌾";s:4:"𦌾";s:4:"羕";s:3:"羕";s:4:"翺";s:3:"翺";s:4:"者";s:3:"者";s:4:"𦓚";s:4:"𦓚";s:4:"𦔣";s:4:"𦔣";s:4:"聠";s:3:"聠";s:4:"𦖨";s:4:"𦖨";s:4:"聰";s:3:"聰";s:4:"𣍟";s:4:"𣍟";s:4:"䏕";s:3:"䏕";s:4:"育";s:3:"育";s:4:"脃";s:3:"脃";s:4:"䐋";s:3:"䐋";s:4:"脾";s:3:"脾";s:4:"媵";s:3:"媵";s:4:"𦞧";s:4:"𦞧";s:4:"𦞵";s:4:"𦞵";s:4:"𣎓";s:4:"𣎓";s:4:"𣎜";s:4:"𣎜";s:4:"舁";s:3:"舁";s:4:"舄";s:3:"舄";s:4:"辞";s:3:"辞";s:4:"䑫";s:3:"䑫";s:4:"芑";s:3:"芑";s:4:"芋";s:3:"芋";s:4:"芝";s:3:"芝";s:4:"劳";s:3:"劳";s:4:"花";s:3:"花";s:4:"芳";s:3:"芳";s:4:"芽";s:3:"芽";s:4:"苦";s:3:"苦";s:4:"𦬼";s:4:"𦬼";s:4:"若";s:3:"若";s:4:"茝";s:3:"茝";s:4:"荣";s:3:"荣";s:4:"莭";s:3:"莭";s:4:"茣";s:3:"茣";s:4:"莽";s:3:"莽";s:4:"菧";s:3:"菧";s:4:"著";s:3:"著";s:4:"荓";s:3:"荓";s:4:"菊";s:3:"菊";s:4:"菌";s:3:"菌";s:4:"菜";s:3:"菜";s:4:"𦰶";s:4:"𦰶";s:4:"𦵫";s:4:"𦵫";s:4:"𦳕";s:4:"𦳕";s:4:"䔫";s:3:"䔫";s:4:"蓱";s:3:"蓱";s:4:"蓳";s:3:"蓳";s:4:"蔖";s:3:"蔖";s:4:"𧏊";s:4:"𧏊";s:4:"蕤";s:3:"蕤";s:4:"𦼬";s:4:"𦼬";s:4:"䕝";s:3:"䕝";s:4:"䕡";s:3:"䕡";s:4:"𦾱";s:4:"𦾱";s:4:"𧃒";s:4:"𧃒";s:4:"䕫";s:3:"䕫";s:4:"虐";s:3:"虐";s:4:"虜";s:3:"虜";s:4:"虧";s:3:"虧";s:4:"虩";s:3:"虩";s:4:"蚩";s:3:"蚩";s:4:"蚈";s:3:"蚈";s:4:"蜎";s:3:"蜎";s:4:"蛢";s:3:"蛢";s:4:"蝹";s:3:"蝹";s:4:"蜨";s:3:"蜨";s:4:"蝫";s:3:"蝫";s:4:"螆";s:3:"螆";s:4:"䗗";s:3:"䗗";s:4:"蟡";s:3:"蟡";s:4:"蠁";s:3:"蠁";s:4:"䗹";s:3:"䗹";s:4:"衠";s:3:"衠";s:4:"衣";s:3:"衣";s:4:"𧙧";s:4:"𧙧";s:4:"裗";s:3:"裗";s:4:"裞";s:3:"裞";s:4:"䘵";s:3:"䘵";s:4:"裺";s:3:"裺";s:4:"㒻";s:3:"㒻";s:4:"𧢮";s:4:"𧢮";s:4:"𧥦";s:4:"𧥦";s:4:"䚾";s:3:"䚾";s:4:"䛇";s:3:"䛇";s:4:"誠";s:3:"誠";s:4:"諭";s:3:"諭";s:4:"變";s:3:"變";s:4:"豕";s:3:"豕";s:4:"𧲨";s:4:"𧲨";s:4:"貫";s:3:"貫";s:4:"賁";s:3:"賁";s:4:"贛";s:3:"贛";s:4:"起";s:3:"起";s:4:"𧼯";s:4:"𧼯";s:4:"𠠄";s:4:"𠠄";s:4:"跋";s:3:"跋";s:4:"趼";s:3:"趼";s:4:"跰";s:3:"跰";s:4:"𠣞";s:4:"𠣞";s:4:"軔";s:3:"軔";s:4:"輸";s:3:"輸";s:4:"𨗒";s:4:"𨗒";s:4:"𨗭";s:4:"𨗭";s:4:"邔";s:3:"邔";s:4:"郱";s:3:"郱";s:4:"鄑";s:3:"鄑";s:4:"𨜮";s:4:"𨜮";s:4:"鄛";s:3:"鄛";s:4:"鈸";s:3:"鈸";s:4:"鋗";s:3:"鋗";s:4:"鋘";s:3:"鋘";s:4:"鉼";s:3:"鉼";s:4:"鏹";s:3:"鏹";s:4:"鐕";s:3:"鐕";s:4:"𨯺";s:4:"𨯺";s:4:"開";s:3:"開";s:4:"䦕";s:3:"䦕";s:4:"閷";s:3:"閷";s:4:"𨵷";s:4:"𨵷";s:4:"䧦";s:3:"䧦";s:4:"雃";s:3:"雃";s:4:"嶲";s:3:"嶲";s:4:"霣";s:3:"霣";s:4:"𩅅";s:4:"𩅅";s:4:"𩈚";s:4:"𩈚";s:4:"䩮";s:3:"䩮";s:4:"䩶";s:3:"䩶";s:4:"韠";s:3:"韠";s:4:"𩐊";s:4:"𩐊";s:4:"䪲";s:3:"䪲";s:4:"𩒖";s:4:"𩒖";s:4:"頋";s:3:"頋";s:4:"頋";s:3:"頋";s:4:"頩";s:3:"頩";s:4:"𩖶";s:4:"𩖶";s:4:"飢";s:3:"飢";s:4:"䬳";s:3:"䬳";s:4:"餩";s:3:"餩";s:4:"馧";s:3:"馧";s:4:"駂";s:3:"駂";s:4:"駾";s:3:"駾";s:4:"䯎";s:3:"䯎";s:4:"𩬰";s:4:"𩬰";s:4:"鬒";s:3:"鬒";s:4:"鱀";s:3:"鱀";s:4:"鳽";s:3:"鳽";s:4:"䳎";s:3:"䳎";s:4:"䳭";s:3:"䳭";s:4:"鵧";s:3:"鵧";s:4:"𪃎";s:4:"𪃎";s:4:"䳸";s:3:"䳸";s:4:"𪄅";s:4:"𪄅";s:4:"𪈎";s:4:"𪈎";s:4:"𪊑";s:4:"𪊑";s:4:"麻";s:3:"麻";s:4:"䵖";s:3:"䵖";s:4:"黹";s:3:"黹";s:4:"黾";s:3:"黾";s:4:"鼅";s:3:"鼅";s:4:"鼏";s:3:"鼏";s:4:"鼖";s:3:"鼖";s:4:"鼻";s:3:"鼻";s:4:"𪘀";s:4:"𪘀";}' );
+$utfCheckNFC = unserialize( 'a:1217:{s:2:"̀";s:1:"N";s:2:"́";s:1:"N";s:2:"̓";s:1:"N";s:2:"̈́";s:1:"N";s:2:"ʹ";s:1:"N";s:2:";";s:1:"N";s:2:"·";s:1:"N";s:3:"क़";s:1:"N";s:3:"ख़";s:1:"N";s:3:"ग़";s:1:"N";s:3:"ज़";s:1:"N";s:3:"ड़";s:1:"N";s:3:"ढ़";s:1:"N";s:3:"फ़";s:1:"N";s:3:"य़";s:1:"N";s:3:"ড়";s:1:"N";s:3:"ঢ়";s:1:"N";s:3:"য়";s:1:"N";s:3:"ਲ਼";s:1:"N";s:3:"ਸ਼";s:1:"N";s:3:"ਖ਼";s:1:"N";s:3:"ਗ਼";s:1:"N";s:3:"ਜ਼";s:1:"N";s:3:"ਫ਼";s:1:"N";s:3:"ଡ଼";s:1:"N";s:3:"ଢ଼";s:1:"N";s:3:"གྷ";s:1:"N";s:3:"ཌྷ";s:1:"N";s:3:"དྷ";s:1:"N";s:3:"བྷ";s:1:"N";s:3:"ཛྷ";s:1:"N";s:3:"ཀྵ";s:1:"N";s:3:"ཱི";s:1:"N";s:3:"ཱུ";s:1:"N";s:3:"ྲྀ";s:1:"N";s:3:"ླྀ";s:1:"N";s:3:"ཱྀ";s:1:"N";s:3:"ྒྷ";s:1:"N";s:3:"ྜྷ";s:1:"N";s:3:"ྡྷ";s:1:"N";s:3:"ྦྷ";s:1:"N";s:3:"ྫྷ";s:1:"N";s:3:"ྐྵ";s:1:"N";s:3:"ά";s:1:"N";s:3:"έ";s:1:"N";s:3:"ή";s:1:"N";s:3:"ί";s:1:"N";s:3:"ό";s:1:"N";s:3:"ύ";s:1:"N";s:3:"ώ";s:1:"N";s:3:"Ά";s:1:"N";s:3:"ι";s:1:"N";s:3:"Έ";s:1:"N";s:3:"Ή";s:1:"N";s:3:"ΐ";s:1:"N";s:3:"Ί";s:1:"N";s:3:"ΰ";s:1:"N";s:3:"Ύ";s:1:"N";s:3:"΅";s:1:"N";s:3:"`";s:1:"N";s:3:"Ό";s:1:"N";s:3:"Ώ";s:1:"N";s:3:"´";s:1:"N";s:3:" ";s:1:"N";s:3:" ";s:1:"N";s:3:"Ω";s:1:"N";s:3:"K";s:1:"N";s:3:"Å";s:1:"N";s:3:"〈";s:1:"N";s:3:"〉";s:1:"N";s:3:"⫝̸";s:1:"N";s:3:"豈";s:1:"N";s:3:"更";s:1:"N";s:3:"車";s:1:"N";s:3:"賈";s:1:"N";s:3:"滑";s:1:"N";s:3:"串";s:1:"N";s:3:"句";s:1:"N";s:3:"龜";s:1:"N";s:3:"龜";s:1:"N";s:3:"契";s:1:"N";s:3:"金";s:1:"N";s:3:"喇";s:1:"N";s:3:"奈";s:1:"N";s:3:"懶";s:1:"N";s:3:"癩";s:1:"N";s:3:"羅";s:1:"N";s:3:"蘿";s:1:"N";s:3:"螺";s:1:"N";s:3:"裸";s:1:"N";s:3:"邏";s:1:"N";s:3:"樂";s:1:"N";s:3:"洛";s:1:"N";s:3:"烙";s:1:"N";s:3:"珞";s:1:"N";s:3:"落";s:1:"N";s:3:"酪";s:1:"N";s:3:"駱";s:1:"N";s:3:"亂";s:1:"N";s:3:"卵";s:1:"N";s:3:"欄";s:1:"N";s:3:"爛";s:1:"N";s:3:"蘭";s:1:"N";s:3:"鸞";s:1:"N";s:3:"嵐";s:1:"N";s:3:"濫";s:1:"N";s:3:"藍";s:1:"N";s:3:"襤";s:1:"N";s:3:"拉";s:1:"N";s:3:"臘";s:1:"N";s:3:"蠟";s:1:"N";s:3:"廊";s:1:"N";s:3:"朗";s:1:"N";s:3:"浪";s:1:"N";s:3:"狼";s:1:"N";s:3:"郎";s:1:"N";s:3:"來";s:1:"N";s:3:"冷";s:1:"N";s:3:"勞";s:1:"N";s:3:"擄";s:1:"N";s:3:"櫓";s:1:"N";s:3:"爐";s:1:"N";s:3:"盧";s:1:"N";s:3:"老";s:1:"N";s:3:"蘆";s:1:"N";s:3:"虜";s:1:"N";s:3:"路";s:1:"N";s:3:"露";s:1:"N";s:3:"魯";s:1:"N";s:3:"鷺";s:1:"N";s:3:"碌";s:1:"N";s:3:"祿";s:1:"N";s:3:"綠";s:1:"N";s:3:"菉";s:1:"N";s:3:"錄";s:1:"N";s:3:"鹿";s:1:"N";s:3:"論";s:1:"N";s:3:"壟";s:1:"N";s:3:"弄";s:1:"N";s:3:"籠";s:1:"N";s:3:"聾";s:1:"N";s:3:"牢";s:1:"N";s:3:"磊";s:1:"N";s:3:"賂";s:1:"N";s:3:"雷";s:1:"N";s:3:"壘";s:1:"N";s:3:"屢";s:1:"N";s:3:"樓";s:1:"N";s:3:"淚";s:1:"N";s:3:"漏";s:1:"N";s:3:"累";s:1:"N";s:3:"縷";s:1:"N";s:3:"陋";s:1:"N";s:3:"勒";s:1:"N";s:3:"肋";s:1:"N";s:3:"凜";s:1:"N";s:3:"凌";s:1:"N";s:3:"稜";s:1:"N";s:3:"綾";s:1:"N";s:3:"菱";s:1:"N";s:3:"陵";s:1:"N";s:3:"讀";s:1:"N";s:3:"拏";s:1:"N";s:3:"樂";s:1:"N";s:3:"諾";s:1:"N";s:3:"丹";s:1:"N";s:3:"寧";s:1:"N";s:3:"怒";s:1:"N";s:3:"率";s:1:"N";s:3:"異";s:1:"N";s:3:"北";s:1:"N";s:3:"磻";s:1:"N";s:3:"便";s:1:"N";s:3:"復";s:1:"N";s:3:"不";s:1:"N";s:3:"泌";s:1:"N";s:3:"數";s:1:"N";s:3:"索";s:1:"N";s:3:"參";s:1:"N";s:3:"塞";s:1:"N";s:3:"省";s:1:"N";s:3:"葉";s:1:"N";s:3:"說";s:1:"N";s:3:"殺";s:1:"N";s:3:"辰";s:1:"N";s:3:"沈";s:1:"N";s:3:"拾";s:1:"N";s:3:"若";s:1:"N";s:3:"掠";s:1:"N";s:3:"略";s:1:"N";s:3:"亮";s:1:"N";s:3:"兩";s:1:"N";s:3:"凉";s:1:"N";s:3:"梁";s:1:"N";s:3:"糧";s:1:"N";s:3:"良";s:1:"N";s:3:"諒";s:1:"N";s:3:"量";s:1:"N";s:3:"勵";s:1:"N";s:3:"呂";s:1:"N";s:3:"女";s:1:"N";s:3:"廬";s:1:"N";s:3:"旅";s:1:"N";s:3:"濾";s:1:"N";s:3:"礪";s:1:"N";s:3:"閭";s:1:"N";s:3:"驪";s:1:"N";s:3:"麗";s:1:"N";s:3:"黎";s:1:"N";s:3:"力";s:1:"N";s:3:"曆";s:1:"N";s:3:"歷";s:1:"N";s:3:"轢";s:1:"N";s:3:"年";s:1:"N";s:3:"憐";s:1:"N";s:3:"戀";s:1:"N";s:3:"撚";s:1:"N";s:3:"漣";s:1:"N";s:3:"煉";s:1:"N";s:3:"璉";s:1:"N";s:3:"秊";s:1:"N";s:3:"練";s:1:"N";s:3:"聯";s:1:"N";s:3:"輦";s:1:"N";s:3:"蓮";s:1:"N";s:3:"連";s:1:"N";s:3:"鍊";s:1:"N";s:3:"列";s:1:"N";s:3:"劣";s:1:"N";s:3:"咽";s:1:"N";s:3:"烈";s:1:"N";s:3:"裂";s:1:"N";s:3:"說";s:1:"N";s:3:"廉";s:1:"N";s:3:"念";s:1:"N";s:3:"捻";s:1:"N";s:3:"殮";s:1:"N";s:3:"簾";s:1:"N";s:3:"獵";s:1:"N";s:3:"令";s:1:"N";s:3:"囹";s:1:"N";s:3:"寧";s:1:"N";s:3:"嶺";s:1:"N";s:3:"怜";s:1:"N";s:3:"玲";s:1:"N";s:3:"瑩";s:1:"N";s:3:"羚";s:1:"N";s:3:"聆";s:1:"N";s:3:"鈴";s:1:"N";s:3:"零";s:1:"N";s:3:"靈";s:1:"N";s:3:"領";s:1:"N";s:3:"例";s:1:"N";s:3:"禮";s:1:"N";s:3:"醴";s:1:"N";s:3:"隸";s:1:"N";s:3:"惡";s:1:"N";s:3:"了";s:1:"N";s:3:"僚";s:1:"N";s:3:"寮";s:1:"N";s:3:"尿";s:1:"N";s:3:"料";s:1:"N";s:3:"樂";s:1:"N";s:3:"燎";s:1:"N";s:3:"療";s:1:"N";s:3:"蓼";s:1:"N";s:3:"遼";s:1:"N";s:3:"龍";s:1:"N";s:3:"暈";s:1:"N";s:3:"阮";s:1:"N";s:3:"劉";s:1:"N";s:3:"杻";s:1:"N";s:3:"柳";s:1:"N";s:3:"流";s:1:"N";s:3:"溜";s:1:"N";s:3:"琉";s:1:"N";s:3:"留";s:1:"N";s:3:"硫";s:1:"N";s:3:"紐";s:1:"N";s:3:"類";s:1:"N";s:3:"六";s:1:"N";s:3:"戮";s:1:"N";s:3:"陸";s:1:"N";s:3:"倫";s:1:"N";s:3:"崙";s:1:"N";s:3:"淪";s:1:"N";s:3:"輪";s:1:"N";s:3:"律";s:1:"N";s:3:"慄";s:1:"N";s:3:"栗";s:1:"N";s:3:"率";s:1:"N";s:3:"隆";s:1:"N";s:3:"利";s:1:"N";s:3:"吏";s:1:"N";s:3:"履";s:1:"N";s:3:"易";s:1:"N";s:3:"李";s:1:"N";s:3:"梨";s:1:"N";s:3:"泥";s:1:"N";s:3:"理";s:1:"N";s:3:"痢";s:1:"N";s:3:"罹";s:1:"N";s:3:"裏";s:1:"N";s:3:"裡";s:1:"N";s:3:"里";s:1:"N";s:3:"離";s:1:"N";s:3:"匿";s:1:"N";s:3:"溺";s:1:"N";s:3:"吝";s:1:"N";s:3:"燐";s:1:"N";s:3:"璘";s:1:"N";s:3:"藺";s:1:"N";s:3:"隣";s:1:"N";s:3:"鱗";s:1:"N";s:3:"麟";s:1:"N";s:3:"林";s:1:"N";s:3:"淋";s:1:"N";s:3:"臨";s:1:"N";s:3:"立";s:1:"N";s:3:"笠";s:1:"N";s:3:"粒";s:1:"N";s:3:"狀";s:1:"N";s:3:"炙";s:1:"N";s:3:"識";s:1:"N";s:3:"什";s:1:"N";s:3:"茶";s:1:"N";s:3:"刺";s:1:"N";s:3:"切";s:1:"N";s:3:"度";s:1:"N";s:3:"拓";s:1:"N";s:3:"糖";s:1:"N";s:3:"宅";s:1:"N";s:3:"洞";s:1:"N";s:3:"暴";s:1:"N";s:3:"輻";s:1:"N";s:3:"行";s:1:"N";s:3:"降";s:1:"N";s:3:"見";s:1:"N";s:3:"廓";s:1:"N";s:3:"兀";s:1:"N";s:3:"嗀";s:1:"N";s:3:"塚";s:1:"N";s:3:"晴";s:1:"N";s:3:"凞";s:1:"N";s:3:"猪";s:1:"N";s:3:"益";s:1:"N";s:3:"礼";s:1:"N";s:3:"神";s:1:"N";s:3:"祥";s:1:"N";s:3:"福";s:1:"N";s:3:"靖";s:1:"N";s:3:"精";s:1:"N";s:3:"羽";s:1:"N";s:3:"蘒";s:1:"N";s:3:"諸";s:1:"N";s:3:"逸";s:1:"N";s:3:"都";s:1:"N";s:3:"飯";s:1:"N";s:3:"飼";s:1:"N";s:3:"館";s:1:"N";s:3:"鶴";s:1:"N";s:3:"侮";s:1:"N";s:3:"僧";s:1:"N";s:3:"免";s:1:"N";s:3:"勉";s:1:"N";s:3:"勤";s:1:"N";s:3:"卑";s:1:"N";s:3:"喝";s:1:"N";s:3:"嘆";s:1:"N";s:3:"器";s:1:"N";s:3:"塀";s:1:"N";s:3:"墨";s:1:"N";s:3:"層";s:1:"N";s:3:"屮";s:1:"N";s:3:"悔";s:1:"N";s:3:"慨";s:1:"N";s:3:"憎";s:1:"N";s:3:"懲";s:1:"N";s:3:"敏";s:1:"N";s:3:"既";s:1:"N";s:3:"暑";s:1:"N";s:3:"梅";s:1:"N";s:3:"海";s:1:"N";s:3:"渚";s:1:"N";s:3:"漢";s:1:"N";s:3:"煮";s:1:"N";s:3:"爫";s:1:"N";s:3:"琢";s:1:"N";s:3:"碑";s:1:"N";s:3:"社";s:1:"N";s:3:"祉";s:1:"N";s:3:"祈";s:1:"N";s:3:"祐";s:1:"N";s:3:"祖";s:1:"N";s:3:"祝";s:1:"N";s:3:"禍";s:1:"N";s:3:"禎";s:1:"N";s:3:"穀";s:1:"N";s:3:"突";s:1:"N";s:3:"節";s:1:"N";s:3:"練";s:1:"N";s:3:"縉";s:1:"N";s:3:"繁";s:1:"N";s:3:"署";s:1:"N";s:3:"者";s:1:"N";s:3:"臭";s:1:"N";s:3:"艹";s:1:"N";s:3:"艹";s:1:"N";s:3:"著";s:1:"N";s:3:"褐";s:1:"N";s:3:"視";s:1:"N";s:3:"謁";s:1:"N";s:3:"謹";s:1:"N";s:3:"賓";s:1:"N";s:3:"贈";s:1:"N";s:3:"辶";s:1:"N";s:3:"逸";s:1:"N";s:3:"難";s:1:"N";s:3:"響";s:1:"N";s:3:"頻";s:1:"N";s:3:"並";s:1:"N";s:3:"况";s:1:"N";s:3:"全";s:1:"N";s:3:"侀";s:1:"N";s:3:"充";s:1:"N";s:3:"冀";s:1:"N";s:3:"勇";s:1:"N";s:3:"勺";s:1:"N";s:3:"喝";s:1:"N";s:3:"啕";s:1:"N";s:3:"喙";s:1:"N";s:3:"嗢";s:1:"N";s:3:"塚";s:1:"N";s:3:"墳";s:1:"N";s:3:"奄";s:1:"N";s:3:"奔";s:1:"N";s:3:"婢";s:1:"N";s:3:"嬨";s:1:"N";s:3:"廒";s:1:"N";s:3:"廙";s:1:"N";s:3:"彩";s:1:"N";s:3:"徭";s:1:"N";s:3:"惘";s:1:"N";s:3:"慎";s:1:"N";s:3:"愈";s:1:"N";s:3:"憎";s:1:"N";s:3:"慠";s:1:"N";s:3:"懲";s:1:"N";s:3:"戴";s:1:"N";s:3:"揄";s:1:"N";s:3:"搜";s:1:"N";s:3:"摒";s:1:"N";s:3:"敖";s:1:"N";s:3:"晴";s:1:"N";s:3:"朗";s:1:"N";s:3:"望";s:1:"N";s:3:"杖";s:1:"N";s:3:"歹";s:1:"N";s:3:"殺";s:1:"N";s:3:"流";s:1:"N";s:3:"滛";s:1:"N";s:3:"滋";s:1:"N";s:3:"漢";s:1:"N";s:3:"瀞";s:1:"N";s:3:"煮";s:1:"N";s:3:"瞧";s:1:"N";s:3:"爵";s:1:"N";s:3:"犯";s:1:"N";s:3:"猪";s:1:"N";s:3:"瑱";s:1:"N";s:3:"甆";s:1:"N";s:3:"画";s:1:"N";s:3:"瘝";s:1:"N";s:3:"瘟";s:1:"N";s:3:"益";s:1:"N";s:3:"盛";s:1:"N";s:3:"直";s:1:"N";s:3:"睊";s:1:"N";s:3:"着";s:1:"N";s:3:"磌";s:1:"N";s:3:"窱";s:1:"N";s:3:"節";s:1:"N";s:3:"类";s:1:"N";s:3:"絛";s:1:"N";s:3:"練";s:1:"N";s:3:"缾";s:1:"N";s:3:"者";s:1:"N";s:3:"荒";s:1:"N";s:3:"華";s:1:"N";s:3:"蝹";s:1:"N";s:3:"襁";s:1:"N";s:3:"覆";s:1:"N";s:3:"視";s:1:"N";s:3:"調";s:1:"N";s:3:"諸";s:1:"N";s:3:"請";s:1:"N";s:3:"謁";s:1:"N";s:3:"諾";s:1:"N";s:3:"諭";s:1:"N";s:3:"謹";s:1:"N";s:3:"變";s:1:"N";s:3:"贈";s:1:"N";s:3:"輸";s:1:"N";s:3:"遲";s:1:"N";s:3:"醙";s:1:"N";s:3:"鉶";s:1:"N";s:3:"陼";s:1:"N";s:3:"難";s:1:"N";s:3:"靖";s:1:"N";s:3:"韛";s:1:"N";s:3:"響";s:1:"N";s:3:"頋";s:1:"N";s:3:"頻";s:1:"N";s:3:"鬒";s:1:"N";s:3:"龜";s:1:"N";s:3:"𢡊";s:1:"N";s:3:"𢡄";s:1:"N";s:3:"𣏕";s:1:"N";s:3:"㮝";s:1:"N";s:3:"䀘";s:1:"N";s:3:"䀹";s:1:"N";s:3:"𥉉";s:1:"N";s:3:"𥳐";s:1:"N";s:3:"𧻓";s:1:"N";s:3:"齃";s:1:"N";s:3:"龎";s:1:"N";s:3:"יִ";s:1:"N";s:3:"ײַ";s:1:"N";s:3:"שׁ";s:1:"N";s:3:"שׂ";s:1:"N";s:3:"שּׁ";s:1:"N";s:3:"שּׂ";s:1:"N";s:3:"אַ";s:1:"N";s:3:"אָ";s:1:"N";s:3:"אּ";s:1:"N";s:3:"בּ";s:1:"N";s:3:"גּ";s:1:"N";s:3:"דּ";s:1:"N";s:3:"הּ";s:1:"N";s:3:"וּ";s:1:"N";s:3:"זּ";s:1:"N";s:3:"טּ";s:1:"N";s:3:"יּ";s:1:"N";s:3:"ךּ";s:1:"N";s:3:"כּ";s:1:"N";s:3:"לּ";s:1:"N";s:3:"מּ";s:1:"N";s:3:"נּ";s:1:"N";s:3:"סּ";s:1:"N";s:3:"ףּ";s:1:"N";s:3:"פּ";s:1:"N";s:3:"צּ";s:1:"N";s:3:"קּ";s:1:"N";s:3:"רּ";s:1:"N";s:3:"שּ";s:1:"N";s:3:"תּ";s:1:"N";s:3:"וֹ";s:1:"N";s:3:"בֿ";s:1:"N";s:3:"כֿ";s:1:"N";s:3:"פֿ";s:1:"N";s:4:"𝅗𝅥";s:1:"N";s:4:"𝅘𝅥";s:1:"N";s:4:"𝅘𝅥𝅮";s:1:"N";s:4:"𝅘𝅥𝅯";s:1:"N";s:4:"𝅘𝅥𝅰";s:1:"N";s:4:"𝅘𝅥𝅱";s:1:"N";s:4:"𝅘𝅥𝅲";s:1:"N";s:4:"𝆹𝅥";s:1:"N";s:4:"𝆺𝅥";s:1:"N";s:4:"𝆹𝅥𝅮";s:1:"N";s:4:"𝆺𝅥𝅮";s:1:"N";s:4:"𝆹𝅥𝅯";s:1:"N";s:4:"𝆺𝅥𝅯";s:1:"N";s:4:"丽";s:1:"N";s:4:"丸";s:1:"N";s:4:"乁";s:1:"N";s:4:"𠄢";s:1:"N";s:4:"你";s:1:"N";s:4:"侮";s:1:"N";s:4:"侻";s:1:"N";s:4:"倂";s:1:"N";s:4:"偺";s:1:"N";s:4:"備";s:1:"N";s:4:"僧";s:1:"N";s:4:"像";s:1:"N";s:4:"㒞";s:1:"N";s:4:"𠘺";s:1:"N";s:4:"免";s:1:"N";s:4:"兔";s:1:"N";s:4:"兤";s:1:"N";s:4:"具";s:1:"N";s:4:"𠔜";s:1:"N";s:4:"㒹";s:1:"N";s:4:"內";s:1:"N";s:4:"再";s:1:"N";s:4:"𠕋";s:1:"N";s:4:"冗";s:1:"N";s:4:"冤";s:1:"N";s:4:"仌";s:1:"N";s:4:"冬";s:1:"N";s:4:"况";s:1:"N";s:4:"𩇟";s:1:"N";s:4:"凵";s:1:"N";s:4:"刃";s:1:"N";s:4:"㓟";s:1:"N";s:4:"刻";s:1:"N";s:4:"剆";s:1:"N";s:4:"割";s:1:"N";s:4:"剷";s:1:"N";s:4:"㔕";s:1:"N";s:4:"勇";s:1:"N";s:4:"勉";s:1:"N";s:4:"勤";s:1:"N";s:4:"勺";s:1:"N";s:4:"包";s:1:"N";s:4:"匆";s:1:"N";s:4:"北";s:1:"N";s:4:"卉";s:1:"N";s:4:"卑";s:1:"N";s:4:"博";s:1:"N";s:4:"即";s:1:"N";s:4:"卽";s:1:"N";s:4:"卿";s:1:"N";s:4:"卿";s:1:"N";s:4:"卿";s:1:"N";s:4:"𠨬";s:1:"N";s:4:"灰";s:1:"N";s:4:"及";s:1:"N";s:4:"叟";s:1:"N";s:4:"𠭣";s:1:"N";s:4:"叫";s:1:"N";s:4:"叱";s:1:"N";s:4:"吆";s:1:"N";s:4:"咞";s:1:"N";s:4:"吸";s:1:"N";s:4:"呈";s:1:"N";s:4:"周";s:1:"N";s:4:"咢";s:1:"N";s:4:"哶";s:1:"N";s:4:"唐";s:1:"N";s:4:"啓";s:1:"N";s:4:"啣";s:1:"N";s:4:"善";s:1:"N";s:4:"善";s:1:"N";s:4:"喙";s:1:"N";s:4:"喫";s:1:"N";s:4:"喳";s:1:"N";s:4:"嗂";s:1:"N";s:4:"圖";s:1:"N";s:4:"嘆";s:1:"N";s:4:"圗";s:1:"N";s:4:"噑";s:1:"N";s:4:"噴";s:1:"N";s:4:"切";s:1:"N";s:4:"壮";s:1:"N";s:4:"城";s:1:"N";s:4:"埴";s:1:"N";s:4:"堍";s:1:"N";s:4:"型";s:1:"N";s:4:"堲";s:1:"N";s:4:"報";s:1:"N";s:4:"墬";s:1:"N";s:4:"𡓤";s:1:"N";s:4:"売";s:1:"N";s:4:"壷";s:1:"N";s:4:"夆";s:1:"N";s:4:"多";s:1:"N";s:4:"夢";s:1:"N";s:4:"奢";s:1:"N";s:4:"𡚨";s:1:"N";s:4:"𡛪";s:1:"N";s:4:"姬";s:1:"N";s:4:"娛";s:1:"N";s:4:"娧";s:1:"N";s:4:"姘";s:1:"N";s:4:"婦";s:1:"N";s:4:"㛮";s:1:"N";s:4:"㛼";s:1:"N";s:4:"嬈";s:1:"N";s:4:"嬾";s:1:"N";s:4:"嬾";s:1:"N";s:4:"𡧈";s:1:"N";s:4:"寃";s:1:"N";s:4:"寘";s:1:"N";s:4:"寧";s:1:"N";s:4:"寳";s:1:"N";s:4:"𡬘";s:1:"N";s:4:"寿";s:1:"N";s:4:"将";s:1:"N";s:4:"当";s:1:"N";s:4:"尢";s:1:"N";s:4:"㞁";s:1:"N";s:4:"屠";s:1:"N";s:4:"屮";s:1:"N";s:4:"峀";s:1:"N";s:4:"岍";s:1:"N";s:4:"𡷤";s:1:"N";s:4:"嵃";s:1:"N";s:4:"𡷦";s:1:"N";s:4:"嵮";s:1:"N";s:4:"嵫";s:1:"N";s:4:"嵼";s:1:"N";s:4:"巡";s:1:"N";s:4:"巢";s:1:"N";s:4:"㠯";s:1:"N";s:4:"巽";s:1:"N";s:4:"帨";s:1:"N";s:4:"帽";s:1:"N";s:4:"幩";s:1:"N";s:4:"㡢";s:1:"N";s:4:"𢆃";s:1:"N";s:4:"㡼";s:1:"N";s:4:"庰";s:1:"N";s:4:"庳";s:1:"N";s:4:"庶";s:1:"N";s:4:"廊";s:1:"N";s:4:"𪎒";s:1:"N";s:4:"廾";s:1:"N";s:4:"𢌱";s:1:"N";s:4:"𢌱";s:1:"N";s:4:"舁";s:1:"N";s:4:"弢";s:1:"N";s:4:"弢";s:1:"N";s:4:"㣇";s:1:"N";s:4:"𣊸";s:1:"N";s:4:"𦇚";s:1:"N";s:4:"形";s:1:"N";s:4:"彫";s:1:"N";s:4:"㣣";s:1:"N";s:4:"徚";s:1:"N";s:4:"忍";s:1:"N";s:4:"志";s:1:"N";s:4:"忹";s:1:"N";s:4:"悁";s:1:"N";s:4:"㤺";s:1:"N";s:4:"㤜";s:1:"N";s:4:"悔";s:1:"N";s:4:"𢛔";s:1:"N";s:4:"惇";s:1:"N";s:4:"慈";s:1:"N";s:4:"慌";s:1:"N";s:4:"慎";s:1:"N";s:4:"慌";s:1:"N";s:4:"慺";s:1:"N";s:4:"憎";s:1:"N";s:4:"憲";s:1:"N";s:4:"憤";s:1:"N";s:4:"憯";s:1:"N";s:4:"懞";s:1:"N";s:4:"懲";s:1:"N";s:4:"懶";s:1:"N";s:4:"成";s:1:"N";s:4:"戛";s:1:"N";s:4:"扝";s:1:"N";s:4:"抱";s:1:"N";s:4:"拔";s:1:"N";s:4:"捐";s:1:"N";s:4:"𢬌";s:1:"N";s:4:"挽";s:1:"N";s:4:"拼";s:1:"N";s:4:"捨";s:1:"N";s:4:"掃";s:1:"N";s:4:"揤";s:1:"N";s:4:"𢯱";s:1:"N";s:4:"搢";s:1:"N";s:4:"揅";s:1:"N";s:4:"掩";s:1:"N";s:4:"㨮";s:1:"N";s:4:"摩";s:1:"N";s:4:"摾";s:1:"N";s:4:"撝";s:1:"N";s:4:"摷";s:1:"N";s:4:"㩬";s:1:"N";s:4:"敏";s:1:"N";s:4:"敬";s:1:"N";s:4:"𣀊";s:1:"N";s:4:"旣";s:1:"N";s:4:"書";s:1:"N";s:4:"晉";s:1:"N";s:4:"㬙";s:1:"N";s:4:"暑";s:1:"N";s:4:"㬈";s:1:"N";s:4:"㫤";s:1:"N";s:4:"冒";s:1:"N";s:4:"冕";s:1:"N";s:4:"最";s:1:"N";s:4:"暜";s:1:"N";s:4:"肭";s:1:"N";s:4:"䏙";s:1:"N";s:4:"朗";s:1:"N";s:4:"望";s:1:"N";s:4:"朡";s:1:"N";s:4:"杞";s:1:"N";s:4:"杓";s:1:"N";s:4:"𣏃";s:1:"N";s:4:"㭉";s:1:"N";s:4:"柺";s:1:"N";s:4:"枅";s:1:"N";s:4:"桒";s:1:"N";s:4:"梅";s:1:"N";s:4:"𣑭";s:1:"N";s:4:"梎";s:1:"N";s:4:"栟";s:1:"N";s:4:"椔";s:1:"N";s:4:"㮝";s:1:"N";s:4:"楂";s:1:"N";s:4:"榣";s:1:"N";s:4:"槪";s:1:"N";s:4:"檨";s:1:"N";s:4:"𣚣";s:1:"N";s:4:"櫛";s:1:"N";s:4:"㰘";s:1:"N";s:4:"次";s:1:"N";s:4:"𣢧";s:1:"N";s:4:"歔";s:1:"N";s:4:"㱎";s:1:"N";s:4:"歲";s:1:"N";s:4:"殟";s:1:"N";s:4:"殺";s:1:"N";s:4:"殻";s:1:"N";s:4:"𣪍";s:1:"N";s:4:"𡴋";s:1:"N";s:4:"𣫺";s:1:"N";s:4:"汎";s:1:"N";s:4:"𣲼";s:1:"N";s:4:"沿";s:1:"N";s:4:"泍";s:1:"N";s:4:"汧";s:1:"N";s:4:"洖";s:1:"N";s:4:"派";s:1:"N";s:4:"海";s:1:"N";s:4:"流";s:1:"N";s:4:"浩";s:1:"N";s:4:"浸";s:1:"N";s:4:"涅";s:1:"N";s:4:"𣴞";s:1:"N";s:4:"洴";s:1:"N";s:4:"港";s:1:"N";s:4:"湮";s:1:"N";s:4:"㴳";s:1:"N";s:4:"滋";s:1:"N";s:4:"滇";s:1:"N";s:4:"𣻑";s:1:"N";s:4:"淹";s:1:"N";s:4:"潮";s:1:"N";s:4:"𣽞";s:1:"N";s:4:"𣾎";s:1:"N";s:4:"濆";s:1:"N";s:4:"瀹";s:1:"N";s:4:"瀞";s:1:"N";s:4:"瀛";s:1:"N";s:4:"㶖";s:1:"N";s:4:"灊";s:1:"N";s:4:"災";s:1:"N";s:4:"灷";s:1:"N";s:4:"炭";s:1:"N";s:4:"𠔥";s:1:"N";s:4:"煅";s:1:"N";s:4:"𤉣";s:1:"N";s:4:"熜";s:1:"N";s:4:"𤎫";s:1:"N";s:4:"爨";s:1:"N";s:4:"爵";s:1:"N";s:4:"牐";s:1:"N";s:4:"𤘈";s:1:"N";s:4:"犀";s:1:"N";s:4:"犕";s:1:"N";s:4:"𤜵";s:1:"N";s:4:"𤠔";s:1:"N";s:4:"獺";s:1:"N";s:4:"王";s:1:"N";s:4:"㺬";s:1:"N";s:4:"玥";s:1:"N";s:4:"㺸";s:1:"N";s:4:"㺸";s:1:"N";s:4:"瑇";s:1:"N";s:4:"瑜";s:1:"N";s:4:"瑱";s:1:"N";s:4:"璅";s:1:"N";s:4:"瓊";s:1:"N";s:4:"㼛";s:1:"N";s:4:"甤";s:1:"N";s:4:"𤰶";s:1:"N";s:4:"甾";s:1:"N";s:4:"𤲒";s:1:"N";s:4:"異";s:1:"N";s:4:"𢆟";s:1:"N";s:4:"瘐";s:1:"N";s:4:"𤾡";s:1:"N";s:4:"𤾸";s:1:"N";s:4:"𥁄";s:1:"N";s:4:"㿼";s:1:"N";s:4:"䀈";s:1:"N";s:4:"直";s:1:"N";s:4:"𥃳";s:1:"N";s:4:"𥃲";s:1:"N";s:4:"𥄙";s:1:"N";s:4:"𥄳";s:1:"N";s:4:"眞";s:1:"N";s:4:"真";s:1:"N";s:4:"真";s:1:"N";s:4:"睊";s:1:"N";s:4:"䀹";s:1:"N";s:4:"瞋";s:1:"N";s:4:"䁆";s:1:"N";s:4:"䂖";s:1:"N";s:4:"𥐝";s:1:"N";s:4:"硎";s:1:"N";s:4:"碌";s:1:"N";s:4:"磌";s:1:"N";s:4:"䃣";s:1:"N";s:4:"𥘦";s:1:"N";s:4:"祖";s:1:"N";s:4:"𥚚";s:1:"N";s:4:"𥛅";s:1:"N";s:4:"福";s:1:"N";s:4:"秫";s:1:"N";s:4:"䄯";s:1:"N";s:4:"穀";s:1:"N";s:4:"穊";s:1:"N";s:4:"穏";s:1:"N";s:4:"𥥼";s:1:"N";s:4:"𥪧";s:1:"N";s:4:"𥪧";s:1:"N";s:4:"竮";s:1:"N";s:4:"䈂";s:1:"N";s:4:"𥮫";s:1:"N";s:4:"篆";s:1:"N";s:4:"築";s:1:"N";s:4:"䈧";s:1:"N";s:4:"𥲀";s:1:"N";s:4:"糒";s:1:"N";s:4:"䊠";s:1:"N";s:4:"糨";s:1:"N";s:4:"糣";s:1:"N";s:4:"紀";s:1:"N";s:4:"𥾆";s:1:"N";s:4:"絣";s:1:"N";s:4:"䌁";s:1:"N";s:4:"緇";s:1:"N";s:4:"縂";s:1:"N";s:4:"繅";s:1:"N";s:4:"䌴";s:1:"N";s:4:"𦈨";s:1:"N";s:4:"𦉇";s:1:"N";s:4:"䍙";s:1:"N";s:4:"𦋙";s:1:"N";s:4:"罺";s:1:"N";s:4:"𦌾";s:1:"N";s:4:"羕";s:1:"N";s:4:"翺";s:1:"N";s:4:"者";s:1:"N";s:4:"𦓚";s:1:"N";s:4:"𦔣";s:1:"N";s:4:"聠";s:1:"N";s:4:"𦖨";s:1:"N";s:4:"聰";s:1:"N";s:4:"𣍟";s:1:"N";s:4:"䏕";s:1:"N";s:4:"育";s:1:"N";s:4:"脃";s:1:"N";s:4:"䐋";s:1:"N";s:4:"脾";s:1:"N";s:4:"媵";s:1:"N";s:4:"𦞧";s:1:"N";s:4:"𦞵";s:1:"N";s:4:"𣎓";s:1:"N";s:4:"𣎜";s:1:"N";s:4:"舁";s:1:"N";s:4:"舄";s:1:"N";s:4:"辞";s:1:"N";s:4:"䑫";s:1:"N";s:4:"芑";s:1:"N";s:4:"芋";s:1:"N";s:4:"芝";s:1:"N";s:4:"劳";s:1:"N";s:4:"花";s:1:"N";s:4:"芳";s:1:"N";s:4:"芽";s:1:"N";s:4:"苦";s:1:"N";s:4:"𦬼";s:1:"N";s:4:"若";s:1:"N";s:4:"茝";s:1:"N";s:4:"荣";s:1:"N";s:4:"莭";s:1:"N";s:4:"茣";s:1:"N";s:4:"莽";s:1:"N";s:4:"菧";s:1:"N";s:4:"著";s:1:"N";s:4:"荓";s:1:"N";s:4:"菊";s:1:"N";s:4:"菌";s:1:"N";s:4:"菜";s:1:"N";s:4:"𦰶";s:1:"N";s:4:"𦵫";s:1:"N";s:4:"𦳕";s:1:"N";s:4:"䔫";s:1:"N";s:4:"蓱";s:1:"N";s:4:"蓳";s:1:"N";s:4:"蔖";s:1:"N";s:4:"𧏊";s:1:"N";s:4:"蕤";s:1:"N";s:4:"𦼬";s:1:"N";s:4:"䕝";s:1:"N";s:4:"䕡";s:1:"N";s:4:"𦾱";s:1:"N";s:4:"𧃒";s:1:"N";s:4:"䕫";s:1:"N";s:4:"虐";s:1:"N";s:4:"虜";s:1:"N";s:4:"虧";s:1:"N";s:4:"虩";s:1:"N";s:4:"蚩";s:1:"N";s:4:"蚈";s:1:"N";s:4:"蜎";s:1:"N";s:4:"蛢";s:1:"N";s:4:"蝹";s:1:"N";s:4:"蜨";s:1:"N";s:4:"蝫";s:1:"N";s:4:"螆";s:1:"N";s:4:"䗗";s:1:"N";s:4:"蟡";s:1:"N";s:4:"蠁";s:1:"N";s:4:"䗹";s:1:"N";s:4:"衠";s:1:"N";s:4:"衣";s:1:"N";s:4:"𧙧";s:1:"N";s:4:"裗";s:1:"N";s:4:"裞";s:1:"N";s:4:"䘵";s:1:"N";s:4:"裺";s:1:"N";s:4:"㒻";s:1:"N";s:4:"𧢮";s:1:"N";s:4:"𧥦";s:1:"N";s:4:"䚾";s:1:"N";s:4:"䛇";s:1:"N";s:4:"誠";s:1:"N";s:4:"諭";s:1:"N";s:4:"變";s:1:"N";s:4:"豕";s:1:"N";s:4:"𧲨";s:1:"N";s:4:"貫";s:1:"N";s:4:"賁";s:1:"N";s:4:"贛";s:1:"N";s:4:"起";s:1:"N";s:4:"𧼯";s:1:"N";s:4:"𠠄";s:1:"N";s:4:"跋";s:1:"N";s:4:"趼";s:1:"N";s:4:"跰";s:1:"N";s:4:"𠣞";s:1:"N";s:4:"軔";s:1:"N";s:4:"輸";s:1:"N";s:4:"𨗒";s:1:"N";s:4:"𨗭";s:1:"N";s:4:"邔";s:1:"N";s:4:"郱";s:1:"N";s:4:"鄑";s:1:"N";s:4:"𨜮";s:1:"N";s:4:"鄛";s:1:"N";s:4:"鈸";s:1:"N";s:4:"鋗";s:1:"N";s:4:"鋘";s:1:"N";s:4:"鉼";s:1:"N";s:4:"鏹";s:1:"N";s:4:"鐕";s:1:"N";s:4:"𨯺";s:1:"N";s:4:"開";s:1:"N";s:4:"䦕";s:1:"N";s:4:"閷";s:1:"N";s:4:"𨵷";s:1:"N";s:4:"䧦";s:1:"N";s:4:"雃";s:1:"N";s:4:"嶲";s:1:"N";s:4:"霣";s:1:"N";s:4:"𩅅";s:1:"N";s:4:"𩈚";s:1:"N";s:4:"䩮";s:1:"N";s:4:"䩶";s:1:"N";s:4:"韠";s:1:"N";s:4:"𩐊";s:1:"N";s:4:"䪲";s:1:"N";s:4:"𩒖";s:1:"N";s:4:"頋";s:1:"N";s:4:"頋";s:1:"N";s:4:"頩";s:1:"N";s:4:"𩖶";s:1:"N";s:4:"飢";s:1:"N";s:4:"䬳";s:1:"N";s:4:"餩";s:1:"N";s:4:"馧";s:1:"N";s:4:"駂";s:1:"N";s:4:"駾";s:1:"N";s:4:"䯎";s:1:"N";s:4:"𩬰";s:1:"N";s:4:"鬒";s:1:"N";s:4:"鱀";s:1:"N";s:4:"鳽";s:1:"N";s:4:"䳎";s:1:"N";s:4:"䳭";s:1:"N";s:4:"鵧";s:1:"N";s:4:"𪃎";s:1:"N";s:4:"䳸";s:1:"N";s:4:"𪄅";s:1:"N";s:4:"𪈎";s:1:"N";s:4:"𪊑";s:1:"N";s:4:"麻";s:1:"N";s:4:"䵖";s:1:"N";s:4:"黹";s:1:"N";s:4:"黾";s:1:"N";s:4:"鼅";s:1:"N";s:4:"鼏";s:1:"N";s:4:"鼖";s:1:"N";s:4:"鼻";s:1:"N";s:4:"𪘀";s:1:"N";s:2:"̀";s:1:"M";s:2:"́";s:1:"M";s:2:"̂";s:1:"M";s:2:"̃";s:1:"M";s:2:"̄";s:1:"M";s:2:"̆";s:1:"M";s:2:"̇";s:1:"M";s:2:"̈";s:1:"M";s:2:"̉";s:1:"M";s:2:"̊";s:1:"M";s:2:"̋";s:1:"M";s:2:"̌";s:1:"M";s:2:"̏";s:1:"M";s:2:"̑";s:1:"M";s:2:"̓";s:1:"M";s:2:"̔";s:1:"M";s:2:"̛";s:1:"M";s:2:"̣";s:1:"M";s:2:"̤";s:1:"M";s:2:"̥";s:1:"M";s:2:"̦";s:1:"M";s:2:"̧";s:1:"M";s:2:"̨";s:1:"M";s:2:"̭";s:1:"M";s:2:"̮";s:1:"M";s:2:"̰";s:1:"M";s:2:"̱";s:1:"M";s:2:"̸";s:1:"M";s:2:"͂";s:1:"M";s:2:"ͅ";s:1:"M";s:2:"ٓ";s:1:"M";s:2:"ٔ";s:1:"M";s:2:"ٕ";s:1:"M";s:3:"़";s:1:"M";s:3:"া";s:1:"M";s:3:"ৗ";s:1:"M";s:3:"ା";s:1:"M";s:3:"ୖ";s:1:"M";s:3:"ୗ";s:1:"M";s:3:"ா";s:1:"M";s:3:"ௗ";s:1:"M";s:3:"ౖ";s:1:"M";s:3:"ೂ";s:1:"M";s:3:"ೕ";s:1:"M";s:3:"ೖ";s:1:"M";s:3:"ാ";s:1:"M";s:3:"ൗ";s:1:"M";s:3:"්";s:1:"M";s:3:"ා";s:1:"M";s:3:"ෟ";s:1:"M";s:3:"ီ";s:1:"M";s:3:"ᅡ";s:1:"M";s:3:"ᅢ";s:1:"M";s:3:"ᅣ";s:1:"M";s:3:"ᅤ";s:1:"M";s:3:"ᅥ";s:1:"M";s:3:"ᅦ";s:1:"M";s:3:"ᅧ";s:1:"M";s:3:"ᅨ";s:1:"M";s:3:"ᅩ";s:1:"M";s:3:"ᅪ";s:1:"M";s:3:"ᅫ";s:1:"M";s:3:"ᅬ";s:1:"M";s:3:"ᅭ";s:1:"M";s:3:"ᅮ";s:1:"M";s:3:"ᅯ";s:1:"M";s:3:"ᅰ";s:1:"M";s:3:"ᅱ";s:1:"M";s:3:"ᅲ";s:1:"M";s:3:"ᅳ";s:1:"M";s:3:"ᅴ";s:1:"M";s:3:"ᅵ";s:1:"M";s:3:"ᆨ";s:1:"M";s:3:"ᆩ";s:1:"M";s:3:"ᆪ";s:1:"M";s:3:"ᆫ";s:1:"M";s:3:"ᆬ";s:1:"M";s:3:"ᆭ";s:1:"M";s:3:"ᆮ";s:1:"M";s:3:"ᆯ";s:1:"M";s:3:"ᆰ";s:1:"M";s:3:"ᆱ";s:1:"M";s:3:"ᆲ";s:1:"M";s:3:"ᆳ";s:1:"M";s:3:"ᆴ";s:1:"M";s:3:"ᆵ";s:1:"M";s:3:"ᆶ";s:1:"M";s:3:"ᆷ";s:1:"M";s:3:"ᆸ";s:1:"M";s:3:"ᆹ";s:1:"M";s:3:"ᆺ";s:1:"M";s:3:"ᆻ";s:1:"M";s:3:"ᆼ";s:1:"M";s:3:"ᆽ";s:1:"M";s:3:"ᆾ";s:1:"M";s:3:"ᆿ";s:1:"M";s:3:"ᇀ";s:1:"M";s:3:"ᇁ";s:1:"M";s:3:"ᇂ";s:1:"M";s:3:"ᬵ";s:1:"M";s:3:"゙";s:1:"M";s:3:"゚";s:1:"M";}' );
+?>
Index: /MediaWiki/branches/1.11/includes/normal/UtfNormalDataK.inc
===================================================================
--- /MediaWiki/branches/1.11/includes/normal/UtfNormalDataK.inc	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/normal/UtfNormalDataK.inc	(revision 1280)
@@ -0,0 +1,9 @@
+<?php
+/**
+ * This file was automatically generated -- do not edit!
+ * Run UtfNormalGenerate.php to create this file again (make clean && make)
+ */
+/** */
+global $utfCompatibilityDecomp;
+$utfCompatibilityDecomp = unserialize( 'a:5402:{s:2:" ";s:1:" ";s:2:"¨";s:3:" ̈";s:2:"ª";s:1:"a";s:2:"¯";s:3:" ̄";s:2:"²";s:1:"2";s:2:"³";s:1:"3";s:2:"´";s:3:" ́";s:2:"µ";s:2:"μ";s:2:"¸";s:3:" ̧";s:2:"¹";s:1:"1";s:2:"º";s:1:"o";s:2:"¼";s:5:"1⁄4";s:2:"½";s:5:"1⁄2";s:2:"¾";s:5:"3⁄4";s:2:"À";s:3:"À";s:2:"Á";s:3:"Á";s:2:"Â";s:3:"Â";s:2:"Ã";s:3:"Ã";s:2:"Ä";s:3:"Ä";s:2:"Å";s:3:"Å";s:2:"Ç";s:3:"Ç";s:2:"È";s:3:"È";s:2:"É";s:3:"É";s:2:"Ê";s:3:"Ê";s:2:"Ë";s:3:"Ë";s:2:"Ì";s:3:"Ì";s:2:"Í";s:3:"Í";s:2:"Î";s:3:"Î";s:2:"Ï";s:3:"Ï";s:2:"Ñ";s:3:"Ñ";s:2:"Ò";s:3:"Ò";s:2:"Ó";s:3:"Ó";s:2:"Ô";s:3:"Ô";s:2:"Õ";s:3:"Õ";s:2:"Ö";s:3:"Ö";s:2:"Ù";s:3:"Ù";s:2:"Ú";s:3:"Ú";s:2:"Û";s:3:"Û";s:2:"Ü";s:3:"Ü";s:2:"Ý";s:3:"Ý";s:2:"à";s:3:"à";s:2:"á";s:3:"á";s:2:"â";s:3:"â";s:2:"ã";s:3:"ã";s:2:"ä";s:3:"ä";s:2:"å";s:3:"å";s:2:"ç";s:3:"ç";s:2:"è";s:3:"è";s:2:"é";s:3:"é";s:2:"ê";s:3:"ê";s:2:"ë";s:3:"ë";s:2:"ì";s:3:"ì";s:2:"í";s:3:"í";s:2:"î";s:3:"î";s:2:"ï";s:3:"ï";s:2:"ñ";s:3:"ñ";s:2:"ò";s:3:"ò";s:2:"ó";s:3:"ó";s:2:"ô";s:3:"ô";s:2:"õ";s:3:"õ";s:2:"ö";s:3:"ö";s:2:"ù";s:3:"ù";s:2:"ú";s:3:"ú";s:2:"û";s:3:"û";s:2:"ü";s:3:"ü";s:2:"ý";s:3:"ý";s:2:"ÿ";s:3:"ÿ";s:2:"Ā";s:3:"Ā";s:2:"ā";s:3:"ā";s:2:"Ă";s:3:"Ă";s:2:"ă";s:3:"ă";s:2:"Ą";s:3:"Ą";s:2:"ą";s:3:"ą";s:2:"Ć";s:3:"Ć";s:2:"ć";s:3:"ć";s:2:"Ĉ";s:3:"Ĉ";s:2:"ĉ";s:3:"ĉ";s:2:"Ċ";s:3:"Ċ";s:2:"ċ";s:3:"ċ";s:2:"Č";s:3:"Č";s:2:"č";s:3:"č";s:2:"Ď";s:3:"Ď";s:2:"ď";s:3:"ď";s:2:"Ē";s:3:"Ē";s:2:"ē";s:3:"ē";s:2:"Ĕ";s:3:"Ĕ";s:2:"ĕ";s:3:"ĕ";s:2:"Ė";s:3:"Ė";s:2:"ė";s:3:"ė";s:2:"Ę";s:3:"Ę";s:2:"ę";s:3:"ę";s:2:"Ě";s:3:"Ě";s:2:"ě";s:3:"ě";s:2:"Ĝ";s:3:"Ĝ";s:2:"ĝ";s:3:"ĝ";s:2:"Ğ";s:3:"Ğ";s:2:"ğ";s:3:"ğ";s:2:"Ġ";s:3:"Ġ";s:2:"ġ";s:3:"ġ";s:2:"Ģ";s:3:"Ģ";s:2:"ģ";s:3:"ģ";s:2:"Ĥ";s:3:"Ĥ";s:2:"ĥ";s:3:"ĥ";s:2:"Ĩ";s:3:"Ĩ";s:2:"ĩ";s:3:"ĩ";s:2:"Ī";s:3:"Ī";s:2:"ī";s:3:"ī";s:2:"Ĭ";s:3:"Ĭ";s:2:"ĭ";s:3:"ĭ";s:2:"Į";s:3:"Į";s:2:"į";s:3:"į";s:2:"İ";s:3:"İ";s:2:"Ĳ";s:2:"IJ";s:2:"ĳ";s:2:"ij";s:2:"Ĵ";s:3:"Ĵ";s:2:"ĵ";s:3:"ĵ";s:2:"Ķ";s:3:"Ķ";s:2:"ķ";s:3:"ķ";s:2:"Ĺ";s:3:"Ĺ";s:2:"ĺ";s:3:"ĺ";s:2:"Ļ";s:3:"Ļ";s:2:"ļ";s:3:"ļ";s:2:"Ľ";s:3:"Ľ";s:2:"ľ";s:3:"ľ";s:2:"Ŀ";s:3:"L·";s:2:"ŀ";s:3:"l·";s:2:"Ń";s:3:"Ń";s:2:"ń";s:3:"ń";s:2:"Ņ";s:3:"Ņ";s:2:"ņ";s:3:"ņ";s:2:"Ň";s:3:"Ň";s:2:"ň";s:3:"ň";s:2:"ŉ";s:3:"ʼn";s:2:"Ō";s:3:"Ō";s:2:"ō";s:3:"ō";s:2:"Ŏ";s:3:"Ŏ";s:2:"ŏ";s:3:"ŏ";s:2:"Ő";s:3:"Ő";s:2:"ő";s:3:"ő";s:2:"Ŕ";s:3:"Ŕ";s:2:"ŕ";s:3:"ŕ";s:2:"Ŗ";s:3:"Ŗ";s:2:"ŗ";s:3:"ŗ";s:2:"Ř";s:3:"Ř";s:2:"ř";s:3:"ř";s:2:"Ś";s:3:"Ś";s:2:"ś";s:3:"ś";s:2:"Ŝ";s:3:"Ŝ";s:2:"ŝ";s:3:"ŝ";s:2:"Ş";s:3:"Ş";s:2:"ş";s:3:"ş";s:2:"Š";s:3:"Š";s:2:"š";s:3:"š";s:2:"Ţ";s:3:"Ţ";s:2:"ţ";s:3:"ţ";s:2:"Ť";s:3:"Ť";s:2:"ť";s:3:"ť";s:2:"Ũ";s:3:"Ũ";s:2:"ũ";s:3:"ũ";s:2:"Ū";s:3:"Ū";s:2:"ū";s:3:"ū";s:2:"Ŭ";s:3:"Ŭ";s:2:"ŭ";s:3:"ŭ";s:2:"Ů";s:3:"Ů";s:2:"ů";s:3:"ů";s:2:"Ű";s:3:"Ű";s:2:"ű";s:3:"ű";s:2:"Ų";s:3:"Ų";s:2:"ų";s:3:"ų";s:2:"Ŵ";s:3:"Ŵ";s:2:"ŵ";s:3:"ŵ";s:2:"Ŷ";s:3:"Ŷ";s:2:"ŷ";s:3:"ŷ";s:2:"Ÿ";s:3:"Ÿ";s:2:"Ź";s:3:"Ź";s:2:"ź";s:3:"ź";s:2:"Ż";s:3:"Ż";s:2:"ż";s:3:"ż";s:2:"Ž";s:3:"Ž";s:2:"ž";s:3:"ž";s:2:"ſ";s:1:"s";s:2:"Ơ";s:3:"Ơ";s:2:"ơ";s:3:"ơ";s:2:"Ư";s:3:"Ư";s:2:"ư";s:3:"ư";s:2:"Ǆ";s:4:"DŽ";s:2:"ǅ";s:4:"Dž";s:2:"ǆ";s:4:"dž";s:2:"Ǉ";s:2:"LJ";s:2:"ǈ";s:2:"Lj";s:2:"ǉ";s:2:"lj";s:2:"Ǌ";s:2:"NJ";s:2:"ǋ";s:2:"Nj";s:2:"ǌ";s:2:"nj";s:2:"Ǎ";s:3:"Ǎ";s:2:"ǎ";s:3:"ǎ";s:2:"Ǐ";s:3:"Ǐ";s:2:"ǐ";s:3:"ǐ";s:2:"Ǒ";s:3:"Ǒ";s:2:"ǒ";s:3:"ǒ";s:2:"Ǔ";s:3:"Ǔ";s:2:"ǔ";s:3:"ǔ";s:2:"Ǖ";s:5:"Ǖ";s:2:"ǖ";s:5:"ǖ";s:2:"Ǘ";s:5:"Ǘ";s:2:"ǘ";s:5:"ǘ";s:2:"Ǚ";s:5:"Ǚ";s:2:"ǚ";s:5:"ǚ";s:2:"Ǜ";s:5:"Ǜ";s:2:"ǜ";s:5:"ǜ";s:2:"Ǟ";s:5:"Ǟ";s:2:"ǟ";s:5:"ǟ";s:2:"Ǡ";s:5:"Ǡ";s:2:"ǡ";s:5:"ǡ";s:2:"Ǣ";s:4:"Ǣ";s:2:"ǣ";s:4:"ǣ";s:2:"Ǧ";s:3:"Ǧ";s:2:"ǧ";s:3:"ǧ";s:2:"Ǩ";s:3:"Ǩ";s:2:"ǩ";s:3:"ǩ";s:2:"Ǫ";s:3:"Ǫ";s:2:"ǫ";s:3:"ǫ";s:2:"Ǭ";s:5:"Ǭ";s:2:"ǭ";s:5:"ǭ";s:2:"Ǯ";s:4:"Ǯ";s:2:"ǯ";s:4:"ǯ";s:2:"ǰ";s:3:"ǰ";s:2:"Ǳ";s:2:"DZ";s:2:"ǲ";s:2:"Dz";s:2:"ǳ";s:2:"dz";s:2:"Ǵ";s:3:"Ǵ";s:2:"ǵ";s:3:"ǵ";s:2:"Ǹ";s:3:"Ǹ";s:2:"ǹ";s:3:"ǹ";s:2:"Ǻ";s:5:"Ǻ";s:2:"ǻ";s:5:"ǻ";s:2:"Ǽ";s:4:"Ǽ";s:2:"ǽ";s:4:"ǽ";s:2:"Ǿ";s:4:"Ǿ";s:2:"ǿ";s:4:"ǿ";s:2:"Ȁ";s:3:"Ȁ";s:2:"ȁ";s:3:"ȁ";s:2:"Ȃ";s:3:"Ȃ";s:2:"ȃ";s:3:"ȃ";s:2:"Ȅ";s:3:"Ȅ";s:2:"ȅ";s:3:"ȅ";s:2:"Ȇ";s:3:"Ȇ";s:2:"ȇ";s:3:"ȇ";s:2:"Ȉ";s:3:"Ȉ";s:2:"ȉ";s:3:"ȉ";s:2:"Ȋ";s:3:"Ȋ";s:2:"ȋ";s:3:"ȋ";s:2:"Ȍ";s:3:"Ȍ";s:2:"ȍ";s:3:"ȍ";s:2:"Ȏ";s:3:"Ȏ";s:2:"ȏ";s:3:"ȏ";s:2:"Ȑ";s:3:"Ȑ";s:2:"ȑ";s:3:"ȑ";s:2:"Ȓ";s:3:"Ȓ";s:2:"ȓ";s:3:"ȓ";s:2:"Ȕ";s:3:"Ȕ";s:2:"ȕ";s:3:"ȕ";s:2:"Ȗ";s:3:"Ȗ";s:2:"ȗ";s:3:"ȗ";s:2:"Ș";s:3:"Ș";s:2:"ș";s:3:"ș";s:2:"Ț";s:3:"Ț";s:2:"ț";s:3:"ț";s:2:"Ȟ";s:3:"Ȟ";s:2:"ȟ";s:3:"ȟ";s:2:"Ȧ";s:3:"Ȧ";s:2:"ȧ";s:3:"ȧ";s:2:"Ȩ";s:3:"Ȩ";s:2:"ȩ";s:3:"ȩ";s:2:"Ȫ";s:5:"Ȫ";s:2:"ȫ";s:5:"ȫ";s:2:"Ȭ";s:5:"Ȭ";s:2:"ȭ";s:5:"ȭ";s:2:"Ȯ";s:3:"Ȯ";s:2:"ȯ";s:3:"ȯ";s:2:"Ȱ";s:5:"Ȱ";s:2:"ȱ";s:5:"ȱ";s:2:"Ȳ";s:3:"Ȳ";s:2:"ȳ";s:3:"ȳ";s:2:"ʰ";s:1:"h";s:2:"ʱ";s:2:"ɦ";s:2:"ʲ";s:1:"j";s:2:"ʳ";s:1:"r";s:2:"ʴ";s:2:"ɹ";s:2:"ʵ";s:2:"ɻ";s:2:"ʶ";s:2:"ʁ";s:2:"ʷ";s:1:"w";s:2:"ʸ";s:1:"y";s:2:"˘";s:3:" ̆";s:2:"˙";s:3:" ̇";s:2:"˚";s:3:" ̊";s:2:"˛";s:3:" ̨";s:2:"˜";s:3:" ̃";s:2:"˝";s:3:" ̋";s:2:"ˠ";s:2:"ɣ";s:2:"ˡ";s:1:"l";s:2:"ˢ";s:1:"s";s:2:"ˣ";s:1:"x";s:2:"ˤ";s:2:"ʕ";s:2:"̀";s:2:"̀";s:2:"́";s:2:"́";s:2:"̓";s:2:"̓";s:2:"̈́";s:4:"̈́";s:2:"ʹ";s:2:"ʹ";s:2:"ͺ";s:3:" ͅ";s:2:";";s:1:";";s:2:"΄";s:3:" ́";s:2:"΅";s:5:" ̈́";s:2:"Ά";s:4:"Ά";s:2:"·";s:2:"·";s:2:"Έ";s:4:"Έ";s:2:"Ή";s:4:"Ή";s:2:"Ί";s:4:"Ί";s:2:"Ό";s:4:"Ό";s:2:"Ύ";s:4:"Ύ";s:2:"Ώ";s:4:"Ώ";s:2:"ΐ";s:6:"ΐ";s:2:"Ϊ";s:4:"Ϊ";s:2:"Ϋ";s:4:"Ϋ";s:2:"ά";s:4:"ά";s:2:"έ";s:4:"έ";s:2:"ή";s:4:"ή";s:2:"ί";s:4:"ί";s:2:"ΰ";s:6:"ΰ";s:2:"ϊ";s:4:"ϊ";s:2:"ϋ";s:4:"ϋ";s:2:"ό";s:4:"ό";s:2:"ύ";s:4:"ύ";s:2:"ώ";s:4:"ώ";s:2:"ϐ";s:2:"β";s:2:"ϑ";s:2:"θ";s:2:"ϒ";s:2:"Υ";s:2:"ϓ";s:4:"Ύ";s:2:"ϔ";s:4:"Ϋ";s:2:"ϕ";s:2:"φ";s:2:"ϖ";s:2:"π";s:2:"ϰ";s:2:"κ";s:2:"ϱ";s:2:"ρ";s:2:"ϲ";s:2:"ς";s:2:"ϴ";s:2:"Θ";s:2:"ϵ";s:2:"ε";s:2:"Ϲ";s:2:"Σ";s:2:"Ѐ";s:4:"Ѐ";s:2:"Ё";s:4:"Ё";s:2:"Ѓ";s:4:"Ѓ";s:2:"Ї";s:4:"Ї";s:2:"Ќ";s:4:"Ќ";s:2:"Ѝ";s:4:"Ѝ";s:2:"Ў";s:4:"Ў";s:2:"Й";s:4:"Й";s:2:"й";s:4:"й";s:2:"ѐ";s:4:"ѐ";s:2:"ё";s:4:"ё";s:2:"ѓ";s:4:"ѓ";s:2:"ї";s:4:"ї";s:2:"ќ";s:4:"ќ";s:2:"ѝ";s:4:"ѝ";s:2:"ў";s:4:"ў";s:2:"Ѷ";s:4:"Ѷ";s:2:"ѷ";s:4:"ѷ";s:2:"Ӂ";s:4:"Ӂ";s:2:"ӂ";s:4:"ӂ";s:2:"Ӑ";s:4:"Ӑ";s:2:"ӑ";s:4:"ӑ";s:2:"Ӓ";s:4:"Ӓ";s:2:"ӓ";s:4:"ӓ";s:2:"Ӗ";s:4:"Ӗ";s:2:"ӗ";s:4:"ӗ";s:2:"Ӛ";s:4:"Ӛ";s:2:"ӛ";s:4:"ӛ";s:2:"Ӝ";s:4:"Ӝ";s:2:"ӝ";s:4:"ӝ";s:2:"Ӟ";s:4:"Ӟ";s:2:"ӟ";s:4:"ӟ";s:2:"Ӣ";s:4:"Ӣ";s:2:"ӣ";s:4:"ӣ";s:2:"Ӥ";s:4:"Ӥ";s:2:"ӥ";s:4:"ӥ";s:2:"Ӧ";s:4:"Ӧ";s:2:"ӧ";s:4:"ӧ";s:2:"Ӫ";s:4:"Ӫ";s:2:"ӫ";s:4:"ӫ";s:2:"Ӭ";s:4:"Ӭ";s:2:"ӭ";s:4:"ӭ";s:2:"Ӯ";s:4:"Ӯ";s:2:"ӯ";s:4:"ӯ";s:2:"Ӱ";s:4:"Ӱ";s:2:"ӱ";s:4:"ӱ";s:2:"Ӳ";s:4:"Ӳ";s:2:"ӳ";s:4:"ӳ";s:2:"Ӵ";s:4:"Ӵ";s:2:"ӵ";s:4:"ӵ";s:2:"Ӹ";s:4:"Ӹ";s:2:"ӹ";s:4:"ӹ";s:2:"և";s:4:"եւ";s:2:"آ";s:4:"آ";s:2:"أ";s:4:"أ";s:2:"ؤ";s:4:"ؤ";s:2:"إ";s:4:"إ";s:2:"ئ";s:4:"ئ";s:2:"ٵ";s:4:"اٴ";s:2:"ٶ";s:4:"وٴ";s:2:"ٷ";s:4:"ۇٴ";s:2:"ٸ";s:4:"يٴ";s:2:"ۀ";s:4:"ۀ";s:2:"ۂ";s:4:"ۂ";s:2:"ۓ";s:4:"ۓ";s:3:"ऩ";s:6:"ऩ";s:3:"ऱ";s:6:"ऱ";s:3:"ऴ";s:6:"ऴ";s:3:"क़";s:6:"क़";s:3:"ख़";s:6:"ख़";s:3:"ग़";s:6:"ग़";s:3:"ज़";s:6:"ज़";s:3:"ड़";s:6:"ड़";s:3:"ढ़";s:6:"ढ़";s:3:"फ़";s:6:"फ़";s:3:"य़";s:6:"य़";s:3:"ো";s:6:"ো";s:3:"ৌ";s:6:"ৌ";s:3:"ড়";s:6:"ড়";s:3:"ঢ়";s:6:"ঢ়";s:3:"য়";s:6:"য়";s:3:"ਲ਼";s:6:"ਲ਼";s:3:"ਸ਼";s:6:"ਸ਼";s:3:"ਖ਼";s:6:"ਖ਼";s:3:"ਗ਼";s:6:"ਗ਼";s:3:"ਜ਼";s:6:"ਜ਼";s:3:"ਫ਼";s:6:"ਫ਼";s:3:"ୈ";s:6:"ୈ";s:3:"ୋ";s:6:"ୋ";s:3:"ୌ";s:6:"ୌ";s:3:"ଡ଼";s:6:"ଡ଼";s:3:"ଢ଼";s:6:"ଢ଼";s:3:"ஔ";s:6:"ஔ";s:3:"ொ";s:6:"ொ";s:3:"ோ";s:6:"ோ";s:3:"ௌ";s:6:"ௌ";s:3:"ై";s:6:"ై";s:3:"ೀ";s:6:"ೀ";s:3:"ೇ";s:6:"ೇ";s:3:"ೈ";s:6:"ೈ";s:3:"ೊ";s:6:"ೊ";s:3:"ೋ";s:9:"ೋ";s:3:"ൊ";s:6:"ൊ";s:3:"ോ";s:6:"ോ";s:3:"ൌ";s:6:"ൌ";s:3:"ේ";s:6:"ේ";s:3:"ො";s:6:"ො";s:3:"ෝ";s:9:"ෝ";s:3:"ෞ";s:6:"ෞ";s:3:"ำ";s:6:"ํา";s:3:"ຳ";s:6:"ໍາ";s:3:"ໜ";s:6:"ຫນ";s:3:"ໝ";s:6:"ຫມ";s:3:"༌";s:3:"་";s:3:"གྷ";s:6:"གྷ";s:3:"ཌྷ";s:6:"ཌྷ";s:3:"དྷ";s:6:"དྷ";s:3:"བྷ";s:6:"བྷ";s:3:"ཛྷ";s:6:"ཛྷ";s:3:"ཀྵ";s:6:"ཀྵ";s:3:"ཱི";s:6:"ཱི";s:3:"ཱུ";s:6:"ཱུ";s:3:"ྲྀ";s:6:"ྲྀ";s:3:"ཷ";s:9:"ྲཱྀ";s:3:"ླྀ";s:6:"ླྀ";s:3:"ཹ";s:9:"ླཱྀ";s:3:"ཱྀ";s:6:"ཱྀ";s:3:"ྒྷ";s:6:"ྒྷ";s:3:"ྜྷ";s:6:"ྜྷ";s:3:"ྡྷ";s:6:"ྡྷ";s:3:"ྦྷ";s:6:"ྦྷ";s:3:"ྫྷ";s:6:"ྫྷ";s:3:"ྐྵ";s:6:"ྐྵ";s:3:"ဦ";s:6:"ဦ";s:3:"ჼ";s:3:"ნ";s:3:"ᬆ";s:6:"ᬆ";s:3:"ᬈ";s:6:"ᬈ";s:3:"ᬊ";s:6:"ᬊ";s:3:"ᬌ";s:6:"ᬌ";s:3:"ᬎ";s:6:"ᬎ";s:3:"ᬒ";s:6:"ᬒ";s:3:"ᬻ";s:6:"ᬻ";s:3:"ᬽ";s:6:"ᬽ";s:3:"ᭀ";s:6:"ᭀ";s:3:"ᭁ";s:6:"ᭁ";s:3:"ᭃ";s:6:"ᭃ";s:3:"ᴬ";s:1:"A";s:3:"ᴭ";s:2:"Æ";s:3:"ᴮ";s:1:"B";s:3:"ᴰ";s:1:"D";s:3:"ᴱ";s:1:"E";s:3:"ᴲ";s:2:"Ǝ";s:3:"ᴳ";s:1:"G";s:3:"ᴴ";s:1:"H";s:3:"ᴵ";s:1:"I";s:3:"ᴶ";s:1:"J";s:3:"ᴷ";s:1:"K";s:3:"ᴸ";s:1:"L";s:3:"ᴹ";s:1:"M";s:3:"ᴺ";s:1:"N";s:3:"ᴼ";s:1:"O";s:3:"ᴽ";s:2:"Ȣ";s:3:"ᴾ";s:1:"P";s:3:"ᴿ";s:1:"R";s:3:"ᵀ";s:1:"T";s:3:"ᵁ";s:1:"U";s:3:"ᵂ";s:1:"W";s:3:"ᵃ";s:1:"a";s:3:"ᵄ";s:2:"ɐ";s:3:"ᵅ";s:2:"ɑ";s:3:"ᵆ";s:3:"ᴂ";s:3:"ᵇ";s:1:"b";s:3:"ᵈ";s:1:"d";s:3:"ᵉ";s:1:"e";s:3:"ᵊ";s:2:"ə";s:3:"ᵋ";s:2:"ɛ";s:3:"ᵌ";s:2:"ɜ";s:3:"ᵍ";s:1:"g";s:3:"ᵏ";s:1:"k";s:3:"ᵐ";s:1:"m";s:3:"ᵑ";s:2:"ŋ";s:3:"ᵒ";s:1:"o";s:3:"ᵓ";s:2:"ɔ";s:3:"ᵔ";s:3:"ᴖ";s:3:"ᵕ";s:3:"ᴗ";s:3:"ᵖ";s:1:"p";s:3:"ᵗ";s:1:"t";s:3:"ᵘ";s:1:"u";s:3:"ᵙ";s:3:"ᴝ";s:3:"ᵚ";s:2:"ɯ";s:3:"ᵛ";s:1:"v";s:3:"ᵜ";s:3:"ᴥ";s:3:"ᵝ";s:2:"β";s:3:"ᵞ";s:2:"γ";s:3:"ᵟ";s:2:"δ";s:3:"ᵠ";s:2:"φ";s:3:"ᵡ";s:2:"χ";s:3:"ᵢ";s:1:"i";s:3:"ᵣ";s:1:"r";s:3:"ᵤ";s:1:"u";s:3:"ᵥ";s:1:"v";s:3:"ᵦ";s:2:"β";s:3:"ᵧ";s:2:"γ";s:3:"ᵨ";s:2:"ρ";s:3:"ᵩ";s:2:"φ";s:3:"ᵪ";s:2:"χ";s:3:"ᵸ";s:2:"н";s:3:"ᶛ";s:2:"ɒ";s:3:"ᶜ";s:1:"c";s:3:"ᶝ";s:2:"ɕ";s:3:"ᶞ";s:2:"ð";s:3:"ᶟ";s:2:"ɜ";s:3:"ᶠ";s:1:"f";s:3:"ᶡ";s:2:"ɟ";s:3:"ᶢ";s:2:"ɡ";s:3:"ᶣ";s:2:"ɥ";s:3:"ᶤ";s:2:"ɨ";s:3:"ᶥ";s:2:"ɩ";s:3:"ᶦ";s:2:"ɪ";s:3:"ᶧ";s:3:"ᵻ";s:3:"ᶨ";s:2:"ʝ";s:3:"ᶩ";s:2:"ɭ";s:3:"ᶪ";s:3:"ᶅ";s:3:"ᶫ";s:2:"ʟ";s:3:"ᶬ";s:2:"ɱ";s:3:"ᶭ";s:2:"ɰ";s:3:"ᶮ";s:2:"ɲ";s:3:"ᶯ";s:2:"ɳ";s:3:"ᶰ";s:2:"ɴ";s:3:"ᶱ";s:2:"ɵ";s:3:"ᶲ";s:2:"ɸ";s:3:"ᶳ";s:2:"ʂ";s:3:"ᶴ";s:2:"ʃ";s:3:"ᶵ";s:2:"ƫ";s:3:"ᶶ";s:2:"ʉ";s:3:"ᶷ";s:2:"ʊ";s:3:"ᶸ";s:3:"ᴜ";s:3:"ᶹ";s:2:"ʋ";s:3:"ᶺ";s:2:"ʌ";s:3:"ᶻ";s:1:"z";s:3:"ᶼ";s:2:"ʐ";s:3:"ᶽ";s:2:"ʑ";s:3:"ᶾ";s:2:"ʒ";s:3:"ᶿ";s:2:"θ";s:3:"Ḁ";s:3:"Ḁ";s:3:"ḁ";s:3:"ḁ";s:3:"Ḃ";s:3:"Ḃ";s:3:"ḃ";s:3:"ḃ";s:3:"Ḅ";s:3:"Ḅ";s:3:"ḅ";s:3:"ḅ";s:3:"Ḇ";s:3:"Ḇ";s:3:"ḇ";s:3:"ḇ";s:3:"Ḉ";s:5:"Ḉ";s:3:"ḉ";s:5:"ḉ";s:3:"Ḋ";s:3:"Ḋ";s:3:"ḋ";s:3:"ḋ";s:3:"Ḍ";s:3:"Ḍ";s:3:"ḍ";s:3:"ḍ";s:3:"Ḏ";s:3:"Ḏ";s:3:"ḏ";s:3:"ḏ";s:3:"Ḑ";s:3:"Ḑ";s:3:"ḑ";s:3:"ḑ";s:3:"Ḓ";s:3:"Ḓ";s:3:"ḓ";s:3:"ḓ";s:3:"Ḕ";s:5:"Ḕ";s:3:"ḕ";s:5:"ḕ";s:3:"Ḗ";s:5:"Ḗ";s:3:"ḗ";s:5:"ḗ";s:3:"Ḙ";s:3:"Ḙ";s:3:"ḙ";s:3:"ḙ";s:3:"Ḛ";s:3:"Ḛ";s:3:"ḛ";s:3:"ḛ";s:3:"Ḝ";s:5:"Ḝ";s:3:"ḝ";s:5:"ḝ";s:3:"Ḟ";s:3:"Ḟ";s:3:"ḟ";s:3:"ḟ";s:3:"Ḡ";s:3:"Ḡ";s:3:"ḡ";s:3:"ḡ";s:3:"Ḣ";s:3:"Ḣ";s:3:"ḣ";s:3:"ḣ";s:3:"Ḥ";s:3:"Ḥ";s:3:"ḥ";s:3:"ḥ";s:3:"Ḧ";s:3:"Ḧ";s:3:"ḧ";s:3:"ḧ";s:3:"Ḩ";s:3:"Ḩ";s:3:"ḩ";s:3:"ḩ";s:3:"Ḫ";s:3:"Ḫ";s:3:"ḫ";s:3:"ḫ";s:3:"Ḭ";s:3:"Ḭ";s:3:"ḭ";s:3:"ḭ";s:3:"Ḯ";s:5:"Ḯ";s:3:"ḯ";s:5:"ḯ";s:3:"Ḱ";s:3:"Ḱ";s:3:"ḱ";s:3:"ḱ";s:3:"Ḳ";s:3:"Ḳ";s:3:"ḳ";s:3:"ḳ";s:3:"Ḵ";s:3:"Ḵ";s:3:"ḵ";s:3:"ḵ";s:3:"Ḷ";s:3:"Ḷ";s:3:"ḷ";s:3:"ḷ";s:3:"Ḹ";s:5:"Ḹ";s:3:"ḹ";s:5:"ḹ";s:3:"Ḻ";s:3:"Ḻ";s:3:"ḻ";s:3:"ḻ";s:3:"Ḽ";s:3:"Ḽ";s:3:"ḽ";s:3:"ḽ";s:3:"Ḿ";s:3:"Ḿ";s:3:"ḿ";s:3:"ḿ";s:3:"Ṁ";s:3:"Ṁ";s:3:"ṁ";s:3:"ṁ";s:3:"Ṃ";s:3:"Ṃ";s:3:"ṃ";s:3:"ṃ";s:3:"Ṅ";s:3:"Ṅ";s:3:"ṅ";s:3:"ṅ";s:3:"Ṇ";s:3:"Ṇ";s:3:"ṇ";s:3:"ṇ";s:3:"Ṉ";s:3:"Ṉ";s:3:"ṉ";s:3:"ṉ";s:3:"Ṋ";s:3:"Ṋ";s:3:"ṋ";s:3:"ṋ";s:3:"Ṍ";s:5:"Ṍ";s:3:"ṍ";s:5:"ṍ";s:3:"Ṏ";s:5:"Ṏ";s:3:"ṏ";s:5:"ṏ";s:3:"Ṑ";s:5:"Ṑ";s:3:"ṑ";s:5:"ṑ";s:3:"Ṓ";s:5:"Ṓ";s:3:"ṓ";s:5:"ṓ";s:3:"Ṕ";s:3:"Ṕ";s:3:"ṕ";s:3:"ṕ";s:3:"Ṗ";s:3:"Ṗ";s:3:"ṗ";s:3:"ṗ";s:3:"Ṙ";s:3:"Ṙ";s:3:"ṙ";s:3:"ṙ";s:3:"Ṛ";s:3:"Ṛ";s:3:"ṛ";s:3:"ṛ";s:3:"Ṝ";s:5:"Ṝ";s:3:"ṝ";s:5:"ṝ";s:3:"Ṟ";s:3:"Ṟ";s:3:"ṟ";s:3:"ṟ";s:3:"Ṡ";s:3:"Ṡ";s:3:"ṡ";s:3:"ṡ";s:3:"Ṣ";s:3:"Ṣ";s:3:"ṣ";s:3:"ṣ";s:3:"Ṥ";s:5:"Ṥ";s:3:"ṥ";s:5:"ṥ";s:3:"Ṧ";s:5:"Ṧ";s:3:"ṧ";s:5:"ṧ";s:3:"Ṩ";s:5:"Ṩ";s:3:"ṩ";s:5:"ṩ";s:3:"Ṫ";s:3:"Ṫ";s:3:"ṫ";s:3:"ṫ";s:3:"Ṭ";s:3:"Ṭ";s:3:"ṭ";s:3:"ṭ";s:3:"Ṯ";s:3:"Ṯ";s:3:"ṯ";s:3:"ṯ";s:3:"Ṱ";s:3:"Ṱ";s:3:"ṱ";s:3:"ṱ";s:3:"Ṳ";s:3:"Ṳ";s:3:"ṳ";s:3:"ṳ";s:3:"Ṵ";s:3:"Ṵ";s:3:"ṵ";s:3:"ṵ";s:3:"Ṷ";s:3:"Ṷ";s:3:"ṷ";s:3:"ṷ";s:3:"Ṹ";s:5:"Ṹ";s:3:"ṹ";s:5:"ṹ";s:3:"Ṻ";s:5:"Ṻ";s:3:"ṻ";s:5:"ṻ";s:3:"Ṽ";s:3:"Ṽ";s:3:"ṽ";s:3:"ṽ";s:3:"Ṿ";s:3:"Ṿ";s:3:"ṿ";s:3:"ṿ";s:3:"Ẁ";s:3:"Ẁ";s:3:"ẁ";s:3:"ẁ";s:3:"Ẃ";s:3:"Ẃ";s:3:"ẃ";s:3:"ẃ";s:3:"Ẅ";s:3:"Ẅ";s:3:"ẅ";s:3:"ẅ";s:3:"Ẇ";s:3:"Ẇ";s:3:"ẇ";s:3:"ẇ";s:3:"Ẉ";s:3:"Ẉ";s:3:"ẉ";s:3:"ẉ";s:3:"Ẋ";s:3:"Ẋ";s:3:"ẋ";s:3:"ẋ";s:3:"Ẍ";s:3:"Ẍ";s:3:"ẍ";s:3:"ẍ";s:3:"Ẏ";s:3:"Ẏ";s:3:"ẏ";s:3:"ẏ";s:3:"Ẑ";s:3:"Ẑ";s:3:"ẑ";s:3:"ẑ";s:3:"Ẓ";s:3:"Ẓ";s:3:"ẓ";s:3:"ẓ";s:3:"Ẕ";s:3:"Ẕ";s:3:"ẕ";s:3:"ẕ";s:3:"ẖ";s:3:"ẖ";s:3:"ẗ";s:3:"ẗ";s:3:"ẘ";s:3:"ẘ";s:3:"ẙ";s:3:"ẙ";s:3:"ẚ";s:3:"aʾ";s:3:"ẛ";s:3:"ṡ";s:3:"Ạ";s:3:"Ạ";s:3:"ạ";s:3:"ạ";s:3:"Ả";s:3:"Ả";s:3:"ả";s:3:"ả";s:3:"Ấ";s:5:"Ấ";s:3:"ấ";s:5:"ấ";s:3:"Ầ";s:5:"Ầ";s:3:"ầ";s:5:"ầ";s:3:"Ẩ";s:5:"Ẩ";s:3:"ẩ";s:5:"ẩ";s:3:"Ẫ";s:5:"Ẫ";s:3:"ẫ";s:5:"ẫ";s:3:"Ậ";s:5:"Ậ";s:3:"ậ";s:5:"ậ";s:3:"Ắ";s:5:"Ắ";s:3:"ắ";s:5:"ắ";s:3:"Ằ";s:5:"Ằ";s:3:"ằ";s:5:"ằ";s:3:"Ẳ";s:5:"Ẳ";s:3:"ẳ";s:5:"ẳ";s:3:"Ẵ";s:5:"Ẵ";s:3:"ẵ";s:5:"ẵ";s:3:"Ặ";s:5:"Ặ";s:3:"ặ";s:5:"ặ";s:3:"Ẹ";s:3:"Ẹ";s:3:"ẹ";s:3:"ẹ";s:3:"Ẻ";s:3:"Ẻ";s:3:"ẻ";s:3:"ẻ";s:3:"Ẽ";s:3:"Ẽ";s:3:"ẽ";s:3:"ẽ";s:3:"Ế";s:5:"Ế";s:3:"ế";s:5:"ế";s:3:"Ề";s:5:"Ề";s:3:"ề";s:5:"ề";s:3:"Ể";s:5:"Ể";s:3:"ể";s:5:"ể";s:3:"Ễ";s:5:"Ễ";s:3:"ễ";s:5:"ễ";s:3:"Ệ";s:5:"Ệ";s:3:"ệ";s:5:"ệ";s:3:"Ỉ";s:3:"Ỉ";s:3:"ỉ";s:3:"ỉ";s:3:"Ị";s:3:"Ị";s:3:"ị";s:3:"ị";s:3:"Ọ";s:3:"Ọ";s:3:"ọ";s:3:"ọ";s:3:"Ỏ";s:3:"Ỏ";s:3:"ỏ";s:3:"ỏ";s:3:"Ố";s:5:"Ố";s:3:"ố";s:5:"ố";s:3:"Ồ";s:5:"Ồ";s:3:"ồ";s:5:"ồ";s:3:"Ổ";s:5:"Ổ";s:3:"ổ";s:5:"ổ";s:3:"Ỗ";s:5:"Ỗ";s:3:"ỗ";s:5:"ỗ";s:3:"Ộ";s:5:"Ộ";s:3:"ộ";s:5:"ộ";s:3:"Ớ";s:5:"Ớ";s:3:"ớ";s:5:"ớ";s:3:"Ờ";s:5:"Ờ";s:3:"ờ";s:5:"ờ";s:3:"Ở";s:5:"Ở";s:3:"ở";s:5:"ở";s:3:"Ỡ";s:5:"Ỡ";s:3:"ỡ";s:5:"ỡ";s:3:"Ợ";s:5:"Ợ";s:3:"ợ";s:5:"ợ";s:3:"Ụ";s:3:"Ụ";s:3:"ụ";s:3:"ụ";s:3:"Ủ";s:3:"Ủ";s:3:"ủ";s:3:"ủ";s:3:"Ứ";s:5:"Ứ";s:3:"ứ";s:5:"ứ";s:3:"Ừ";s:5:"Ừ";s:3:"ừ";s:5:"ừ";s:3:"Ử";s:5:"Ử";s:3:"ử";s:5:"ử";s:3:"Ữ";s:5:"Ữ";s:3:"ữ";s:5:"ữ";s:3:"Ự";s:5:"Ự";s:3:"ự";s:5:"ự";s:3:"Ỳ";s:3:"Ỳ";s:3:"ỳ";s:3:"ỳ";s:3:"Ỵ";s:3:"Ỵ";s:3:"ỵ";s:3:"ỵ";s:3:"Ỷ";s:3:"Ỷ";s:3:"ỷ";s:3:"ỷ";s:3:"Ỹ";s:3:"Ỹ";s:3:"ỹ";s:3:"ỹ";s:3:"ἀ";s:4:"ἀ";s:3:"ἁ";s:4:"ἁ";s:3:"ἂ";s:6:"ἂ";s:3:"ἃ";s:6:"ἃ";s:3:"ἄ";s:6:"ἄ";s:3:"ἅ";s:6:"ἅ";s:3:"ἆ";s:6:"ἆ";s:3:"ἇ";s:6:"ἇ";s:3:"Ἀ";s:4:"Ἀ";s:3:"Ἁ";s:4:"Ἁ";s:3:"Ἂ";s:6:"Ἂ";s:3:"Ἃ";s:6:"Ἃ";s:3:"Ἄ";s:6:"Ἄ";s:3:"Ἅ";s:6:"Ἅ";s:3:"Ἆ";s:6:"Ἆ";s:3:"Ἇ";s:6:"Ἇ";s:3:"ἐ";s:4:"ἐ";s:3:"ἑ";s:4:"ἑ";s:3:"ἒ";s:6:"ἒ";s:3:"ἓ";s:6:"ἓ";s:3:"ἔ";s:6:"ἔ";s:3:"ἕ";s:6:"ἕ";s:3:"Ἐ";s:4:"Ἐ";s:3:"Ἑ";s:4:"Ἑ";s:3:"Ἒ";s:6:"Ἒ";s:3:"Ἓ";s:6:"Ἓ";s:3:"Ἔ";s:6:"Ἔ";s:3:"Ἕ";s:6:"Ἕ";s:3:"ἠ";s:4:"ἠ";s:3:"ἡ";s:4:"ἡ";s:3:"ἢ";s:6:"ἢ";s:3:"ἣ";s:6:"ἣ";s:3:"ἤ";s:6:"ἤ";s:3:"ἥ";s:6:"ἥ";s:3:"ἦ";s:6:"ἦ";s:3:"ἧ";s:6:"ἧ";s:3:"Ἠ";s:4:"Ἠ";s:3:"Ἡ";s:4:"Ἡ";s:3:"Ἢ";s:6:"Ἢ";s:3:"Ἣ";s:6:"Ἣ";s:3:"Ἤ";s:6:"Ἤ";s:3:"Ἥ";s:6:"Ἥ";s:3:"Ἦ";s:6:"Ἦ";s:3:"Ἧ";s:6:"Ἧ";s:3:"ἰ";s:4:"ἰ";s:3:"ἱ";s:4:"ἱ";s:3:"ἲ";s:6:"ἲ";s:3:"ἳ";s:6:"ἳ";s:3:"ἴ";s:6:"ἴ";s:3:"ἵ";s:6:"ἵ";s:3:"ἶ";s:6:"ἶ";s:3:"ἷ";s:6:"ἷ";s:3:"Ἰ";s:4:"Ἰ";s:3:"Ἱ";s:4:"Ἱ";s:3:"Ἲ";s:6:"Ἲ";s:3:"Ἳ";s:6:"Ἳ";s:3:"Ἴ";s:6:"Ἴ";s:3:"Ἵ";s:6:"Ἵ";s:3:"Ἶ";s:6:"Ἶ";s:3:"Ἷ";s:6:"Ἷ";s:3:"ὀ";s:4:"ὀ";s:3:"ὁ";s:4:"ὁ";s:3:"ὂ";s:6:"ὂ";s:3:"ὃ";s:6:"ὃ";s:3:"ὄ";s:6:"ὄ";s:3:"ὅ";s:6:"ὅ";s:3:"Ὀ";s:4:"Ὀ";s:3:"Ὁ";s:4:"Ὁ";s:3:"Ὂ";s:6:"Ὂ";s:3:"Ὃ";s:6:"Ὃ";s:3:"Ὄ";s:6:"Ὄ";s:3:"Ὅ";s:6:"Ὅ";s:3:"ὐ";s:4:"ὐ";s:3:"ὑ";s:4:"ὑ";s:3:"ὒ";s:6:"ὒ";s:3:"ὓ";s:6:"ὓ";s:3:"ὔ";s:6:"ὔ";s:3:"ὕ";s:6:"ὕ";s:3:"ὖ";s:6:"ὖ";s:3:"ὗ";s:6:"ὗ";s:3:"Ὑ";s:4:"Ὑ";s:3:"Ὓ";s:6:"Ὓ";s:3:"Ὕ";s:6:"Ὕ";s:3:"Ὗ";s:6:"Ὗ";s:3:"ὠ";s:4:"ὠ";s:3:"ὡ";s:4:"ὡ";s:3:"ὢ";s:6:"ὢ";s:3:"ὣ";s:6:"ὣ";s:3:"ὤ";s:6:"ὤ";s:3:"ὥ";s:6:"ὥ";s:3:"ὦ";s:6:"ὦ";s:3:"ὧ";s:6:"ὧ";s:3:"Ὠ";s:4:"Ὠ";s:3:"Ὡ";s:4:"Ὡ";s:3:"Ὢ";s:6:"Ὢ";s:3:"Ὣ";s:6:"Ὣ";s:3:"Ὤ";s:6:"Ὤ";s:3:"Ὥ";s:6:"Ὥ";s:3:"Ὦ";s:6:"Ὦ";s:3:"Ὧ";s:6:"Ὧ";s:3:"ὰ";s:4:"ὰ";s:3:"ά";s:4:"ά";s:3:"ὲ";s:4:"ὲ";s:3:"έ";s:4:"έ";s:3:"ὴ";s:4:"ὴ";s:3:"ή";s:4:"ή";s:3:"ὶ";s:4:"ὶ";s:3:"ί";s:4:"ί";s:3:"ὸ";s:4:"ὸ";s:3:"ό";s:4:"ό";s:3:"ὺ";s:4:"ὺ";s:3:"ύ";s:4:"ύ";s:3:"ὼ";s:4:"ὼ";s:3:"ώ";s:4:"ώ";s:3:"ᾀ";s:6:"ᾀ";s:3:"ᾁ";s:6:"ᾁ";s:3:"ᾂ";s:8:"ᾂ";s:3:"ᾃ";s:8:"ᾃ";s:3:"ᾄ";s:8:"ᾄ";s:3:"ᾅ";s:8:"ᾅ";s:3:"ᾆ";s:8:"ᾆ";s:3:"ᾇ";s:8:"ᾇ";s:3:"ᾈ";s:6:"ᾈ";s:3:"ᾉ";s:6:"ᾉ";s:3:"ᾊ";s:8:"ᾊ";s:3:"ᾋ";s:8:"ᾋ";s:3:"ᾌ";s:8:"ᾌ";s:3:"ᾍ";s:8:"ᾍ";s:3:"ᾎ";s:8:"ᾎ";s:3:"ᾏ";s:8:"ᾏ";s:3:"ᾐ";s:6:"ᾐ";s:3:"ᾑ";s:6:"ᾑ";s:3:"ᾒ";s:8:"ᾒ";s:3:"ᾓ";s:8:"ᾓ";s:3:"ᾔ";s:8:"ᾔ";s:3:"ᾕ";s:8:"ᾕ";s:3:"ᾖ";s:8:"ᾖ";s:3:"ᾗ";s:8:"ᾗ";s:3:"ᾘ";s:6:"ᾘ";s:3:"ᾙ";s:6:"ᾙ";s:3:"ᾚ";s:8:"ᾚ";s:3:"ᾛ";s:8:"ᾛ";s:3:"ᾜ";s:8:"ᾜ";s:3:"ᾝ";s:8:"ᾝ";s:3:"ᾞ";s:8:"ᾞ";s:3:"ᾟ";s:8:"ᾟ";s:3:"ᾠ";s:6:"ᾠ";s:3:"ᾡ";s:6:"ᾡ";s:3:"ᾢ";s:8:"ᾢ";s:3:"ᾣ";s:8:"ᾣ";s:3:"ᾤ";s:8:"ᾤ";s:3:"ᾥ";s:8:"ᾥ";s:3:"ᾦ";s:8:"ᾦ";s:3:"ᾧ";s:8:"ᾧ";s:3:"ᾨ";s:6:"ᾨ";s:3:"ᾩ";s:6:"ᾩ";s:3:"ᾪ";s:8:"ᾪ";s:3:"ᾫ";s:8:"ᾫ";s:3:"ᾬ";s:8:"ᾬ";s:3:"ᾭ";s:8:"ᾭ";s:3:"ᾮ";s:8:"ᾮ";s:3:"ᾯ";s:8:"ᾯ";s:3:"ᾰ";s:4:"ᾰ";s:3:"ᾱ";s:4:"ᾱ";s:3:"ᾲ";s:6:"ᾲ";s:3:"ᾳ";s:4:"ᾳ";s:3:"ᾴ";s:6:"ᾴ";s:3:"ᾶ";s:4:"ᾶ";s:3:"ᾷ";s:6:"ᾷ";s:3:"Ᾰ";s:4:"Ᾰ";s:3:"Ᾱ";s:4:"Ᾱ";s:3:"Ὰ";s:4:"Ὰ";s:3:"Ά";s:4:"Ά";s:3:"ᾼ";s:4:"ᾼ";s:3:"᾽";s:3:" ̓";s:3:"ι";s:2:"ι";s:3:"᾿";s:3:" ̓";s:3:"῀";s:3:" ͂";s:3:"῁";s:5:" ̈͂";s:3:"ῂ";s:6:"ῂ";s:3:"ῃ";s:4:"ῃ";s:3:"ῄ";s:6:"ῄ";s:3:"ῆ";s:4:"ῆ";s:3:"ῇ";s:6:"ῇ";s:3:"Ὲ";s:4:"Ὲ";s:3:"Έ";s:4:"Έ";s:3:"Ὴ";s:4:"Ὴ";s:3:"Ή";s:4:"Ή";s:3:"ῌ";s:4:"ῌ";s:3:"῍";s:5:" ̓̀";s:3:"῎";s:5:" ̓́";s:3:"῏";s:5:" ̓͂";s:3:"ῐ";s:4:"ῐ";s:3:"ῑ";s:4:"ῑ";s:3:"ῒ";s:6:"ῒ";s:3:"ΐ";s:6:"ΐ";s:3:"ῖ";s:4:"ῖ";s:3:"ῗ";s:6:"ῗ";s:3:"Ῐ";s:4:"Ῐ";s:3:"Ῑ";s:4:"Ῑ";s:3:"Ὶ";s:4:"Ὶ";s:3:"Ί";s:4:"Ί";s:3:"῝";s:5:" ̔̀";s:3:"῞";s:5:" ̔́";s:3:"῟";s:5:" ̔͂";s:3:"ῠ";s:4:"ῠ";s:3:"ῡ";s:4:"ῡ";s:3:"ῢ";s:6:"ῢ";s:3:"ΰ";s:6:"ΰ";s:3:"ῤ";s:4:"ῤ";s:3:"ῥ";s:4:"ῥ";s:3:"ῦ";s:4:"ῦ";s:3:"ῧ";s:6:"ῧ";s:3:"Ῠ";s:4:"Ῠ";s:3:"Ῡ";s:4:"Ῡ";s:3:"Ὺ";s:4:"Ὺ";s:3:"Ύ";s:4:"Ύ";s:3:"Ῥ";s:4:"Ῥ";s:3:"῭";s:5:" ̈̀";s:3:"΅";s:5:" ̈́";s:3:"`";s:1:"`";s:3:"ῲ";s:6:"ῲ";s:3:"ῳ";s:4:"ῳ";s:3:"ῴ";s:6:"ῴ";s:3:"ῶ";s:4:"ῶ";s:3:"ῷ";s:6:"ῷ";s:3:"Ὸ";s:4:"Ὸ";s:3:"Ό";s:4:"Ό";s:3:"Ὼ";s:4:"Ὼ";s:3:"Ώ";s:4:"Ώ";s:3:"ῼ";s:4:"ῼ";s:3:"´";s:3:" ́";s:3:"῾";s:3:" ̔";s:3:" ";s:1:" ";s:3:" ";s:1:" ";s:3:" ";s:1:" ";s:3:" ";s:1:" ";s:3:" ";s:1:" ";s:3:" ";s:1:" ";s:3:" ";s:1:" ";s:3:" ";s:1:" ";s:3:" ";s:1:" ";s:3:" ";s:1:" ";s:3:" ";s:1:" ";s:3:"‑";s:3:"‐";s:3:"‗";s:3:" ̳";s:3:"․";s:1:".";s:3:"‥";s:2:"..";s:3:"…";s:3:"...";s:3:" ";s:1:" ";s:3:"″";s:6:"′′";s:3:"‴";s:9:"′′′";s:3:"‶";s:6:"‵‵";s:3:"‷";s:9:"‵‵‵";s:3:"‼";s:2:"!!";s:3:"‾";s:3:" ̅";s:3:"⁇";s:2:"??";s:3:"⁈";s:2:"?!";s:3:"⁉";s:2:"!?";s:3:"⁗";s:12:"′′′′";s:3:" ";s:1:" ";s:3:"⁰";s:1:"0";s:3:"ⁱ";s:1:"i";s:3:"⁴";s:1:"4";s:3:"⁵";s:1:"5";s:3:"⁶";s:1:"6";s:3:"⁷";s:1:"7";s:3:"⁸";s:1:"8";s:3:"⁹";s:1:"9";s:3:"⁺";s:1:"+";s:3:"⁻";s:3:"−";s:3:"⁼";s:1:"=";s:3:"⁽";s:1:"(";s:3:"⁾";s:1:")";s:3:"ⁿ";s:1:"n";s:3:"₀";s:1:"0";s:3:"₁";s:1:"1";s:3:"₂";s:1:"2";s:3:"₃";s:1:"3";s:3:"₄";s:1:"4";s:3:"₅";s:1:"5";s:3:"₆";s:1:"6";s:3:"₇";s:1:"7";s:3:"₈";s:1:"8";s:3:"₉";s:1:"9";s:3:"₊";s:1:"+";s:3:"₋";s:3:"−";s:3:"₌";s:1:"=";s:3:"₍";s:1:"(";s:3:"₎";s:1:")";s:3:"ₐ";s:1:"a";s:3:"ₑ";s:1:"e";s:3:"ₒ";s:1:"o";s:3:"ₓ";s:1:"x";s:3:"ₔ";s:2:"ə";s:3:"₨";s:2:"Rs";s:3:"℀";s:3:"a/c";s:3:"℁";s:3:"a/s";s:3:"ℂ";s:1:"C";s:3:"℃";s:3:"°C";s:3:"℅";s:3:"c/o";s:3:"℆";s:3:"c/u";s:3:"ℇ";s:2:"Ɛ";s:3:"℉";s:3:"°F";s:3:"ℊ";s:1:"g";s:3:"ℋ";s:1:"H";s:3:"ℌ";s:1:"H";s:3:"ℍ";s:1:"H";s:3:"ℎ";s:1:"h";s:3:"ℏ";s:2:"ħ";s:3:"ℐ";s:1:"I";s:3:"ℑ";s:1:"I";s:3:"ℒ";s:1:"L";s:3:"ℓ";s:1:"l";s:3:"ℕ";s:1:"N";s:3:"№";s:2:"No";s:3:"ℙ";s:1:"P";s:3:"ℚ";s:1:"Q";s:3:"ℛ";s:1:"R";s:3:"ℜ";s:1:"R";s:3:"ℝ";s:1:"R";s:3:"℠";s:2:"SM";s:3:"℡";s:3:"TEL";s:3:"™";s:2:"TM";s:3:"ℤ";s:1:"Z";s:3:"Ω";s:2:"Ω";s:3:"ℨ";s:1:"Z";s:3:"K";s:1:"K";s:3:"Å";s:3:"Å";s:3:"ℬ";s:1:"B";s:3:"ℭ";s:1:"C";s:3:"ℯ";s:1:"e";s:3:"ℰ";s:1:"E";s:3:"ℱ";s:1:"F";s:3:"ℳ";s:1:"M";s:3:"ℴ";s:1:"o";s:3:"ℵ";s:2:"א";s:3:"ℶ";s:2:"ב";s:3:"ℷ";s:2:"ג";s:3:"ℸ";s:2:"ד";s:3:"ℹ";s:1:"i";s:3:"℻";s:3:"FAX";s:3:"ℼ";s:2:"π";s:3:"ℽ";s:2:"γ";s:3:"ℾ";s:2:"Γ";s:3:"ℿ";s:2:"Π";s:3:"⅀";s:3:"∑";s:3:"ⅅ";s:1:"D";s:3:"ⅆ";s:1:"d";s:3:"ⅇ";s:1:"e";s:3:"ⅈ";s:1:"i";s:3:"ⅉ";s:1:"j";s:3:"⅓";s:5:"1⁄3";s:3:"⅔";s:5:"2⁄3";s:3:"⅕";s:5:"1⁄5";s:3:"⅖";s:5:"2⁄5";s:3:"⅗";s:5:"3⁄5";s:3:"⅘";s:5:"4⁄5";s:3:"⅙";s:5:"1⁄6";s:3:"⅚";s:5:"5⁄6";s:3:"⅛";s:5:"1⁄8";s:3:"⅜";s:5:"3⁄8";s:3:"⅝";s:5:"5⁄8";s:3:"⅞";s:5:"7⁄8";s:3:"⅟";s:4:"1⁄";s:3:"Ⅰ";s:1:"I";s:3:"Ⅱ";s:2:"II";s:3:"Ⅲ";s:3:"III";s:3:"Ⅳ";s:2:"IV";s:3:"Ⅴ";s:1:"V";s:3:"Ⅵ";s:2:"VI";s:3:"Ⅶ";s:3:"VII";s:3:"Ⅷ";s:4:"VIII";s:3:"Ⅸ";s:2:"IX";s:3:"Ⅹ";s:1:"X";s:3:"Ⅺ";s:2:"XI";s:3:"Ⅻ";s:3:"XII";s:3:"Ⅼ";s:1:"L";s:3:"Ⅽ";s:1:"C";s:3:"Ⅾ";s:1:"D";s:3:"Ⅿ";s:1:"M";s:3:"ⅰ";s:1:"i";s:3:"ⅱ";s:2:"ii";s:3:"ⅲ";s:3:"iii";s:3:"ⅳ";s:2:"iv";s:3:"ⅴ";s:1:"v";s:3:"ⅵ";s:2:"vi";s:3:"ⅶ";s:3:"vii";s:3:"ⅷ";s:4:"viii";s:3:"ⅸ";s:2:"ix";s:3:"ⅹ";s:1:"x";s:3:"ⅺ";s:2:"xi";s:3:"ⅻ";s:3:"xii";s:3:"ⅼ";s:1:"l";s:3:"ⅽ";s:1:"c";s:3:"ⅾ";s:1:"d";s:3:"ⅿ";s:1:"m";s:3:"↚";s:5:"↚";s:3:"↛";s:5:"↛";s:3:"↮";s:5:"↮";s:3:"⇍";s:5:"⇍";s:3:"⇎";s:5:"⇎";s:3:"⇏";s:5:"⇏";s:3:"∄";s:5:"∄";s:3:"∉";s:5:"∉";s:3:"∌";s:5:"∌";s:3:"∤";s:5:"∤";s:3:"∦";s:5:"∦";s:3:"∬";s:6:"∫∫";s:3:"∭";s:9:"∫∫∫";s:3:"∯";s:6:"∮∮";s:3:"∰";s:9:"∮∮∮";s:3:"≁";s:5:"≁";s:3:"≄";s:5:"≄";s:3:"≇";s:5:"≇";s:3:"≉";s:5:"≉";s:3:"≠";s:3:"≠";s:3:"≢";s:5:"≢";s:3:"≭";s:5:"≭";s:3:"≮";s:3:"≮";s:3:"≯";s:3:"≯";s:3:"≰";s:5:"≰";s:3:"≱";s:5:"≱";s:3:"≴";s:5:"≴";s:3:"≵";s:5:"≵";s:3:"≸";s:5:"≸";s:3:"≹";s:5:"≹";s:3:"⊀";s:5:"⊀";s:3:"⊁";s:5:"⊁";s:3:"⊄";s:5:"⊄";s:3:"⊅";s:5:"⊅";s:3:"⊈";s:5:"⊈";s:3:"⊉";s:5:"⊉";s:3:"⊬";s:5:"⊬";s:3:"⊭";s:5:"⊭";s:3:"⊮";s:5:"⊮";s:3:"⊯";s:5:"⊯";s:3:"⋠";s:5:"⋠";s:3:"⋡";s:5:"⋡";s:3:"⋢";s:5:"⋢";s:3:"⋣";s:5:"⋣";s:3:"⋪";s:5:"⋪";s:3:"⋫";s:5:"⋫";s:3:"⋬";s:5:"⋬";s:3:"⋭";s:5:"⋭";s:3:"〈";s:3:"〈";s:3:"〉";s:3:"〉";s:3:"①";s:1:"1";s:3:"②";s:1:"2";s:3:"③";s:1:"3";s:3:"④";s:1:"4";s:3:"⑤";s:1:"5";s:3:"⑥";s:1:"6";s:3:"⑦";s:1:"7";s:3:"⑧";s:1:"8";s:3:"⑨";s:1:"9";s:3:"⑩";s:2:"10";s:3:"⑪";s:2:"11";s:3:"⑫";s:2:"12";s:3:"⑬";s:2:"13";s:3:"⑭";s:2:"14";s:3:"⑮";s:2:"15";s:3:"⑯";s:2:"16";s:3:"⑰";s:2:"17";s:3:"⑱";s:2:"18";s:3:"⑲";s:2:"19";s:3:"⑳";s:2:"20";s:3:"⑴";s:3:"(1)";s:3:"⑵";s:3:"(2)";s:3:"⑶";s:3:"(3)";s:3:"⑷";s:3:"(4)";s:3:"⑸";s:3:"(5)";s:3:"⑹";s:3:"(6)";s:3:"⑺";s:3:"(7)";s:3:"⑻";s:3:"(8)";s:3:"⑼";s:3:"(9)";s:3:"⑽";s:4:"(10)";s:3:"⑾";s:4:"(11)";s:3:"⑿";s:4:"(12)";s:3:"⒀";s:4:"(13)";s:3:"⒁";s:4:"(14)";s:3:"⒂";s:4:"(15)";s:3:"⒃";s:4:"(16)";s:3:"⒄";s:4:"(17)";s:3:"⒅";s:4:"(18)";s:3:"⒆";s:4:"(19)";s:3:"⒇";s:4:"(20)";s:3:"⒈";s:2:"1.";s:3:"⒉";s:2:"2.";s:3:"⒊";s:2:"3.";s:3:"⒋";s:2:"4.";s:3:"⒌";s:2:"5.";s:3:"⒍";s:2:"6.";s:3:"⒎";s:2:"7.";s:3:"⒏";s:2:"8.";s:3:"⒐";s:2:"9.";s:3:"⒑";s:3:"10.";s:3:"⒒";s:3:"11.";s:3:"⒓";s:3:"12.";s:3:"⒔";s:3:"13.";s:3:"⒕";s:3:"14.";s:3:"⒖";s:3:"15.";s:3:"⒗";s:3:"16.";s:3:"⒘";s:3:"17.";s:3:"⒙";s:3:"18.";s:3:"⒚";s:3:"19.";s:3:"⒛";s:3:"20.";s:3:"⒜";s:3:"(a)";s:3:"⒝";s:3:"(b)";s:3:"⒞";s:3:"(c)";s:3:"⒟";s:3:"(d)";s:3:"⒠";s:3:"(e)";s:3:"⒡";s:3:"(f)";s:3:"⒢";s:3:"(g)";s:3:"⒣";s:3:"(h)";s:3:"⒤";s:3:"(i)";s:3:"⒥";s:3:"(j)";s:3:"⒦";s:3:"(k)";s:3:"⒧";s:3:"(l)";s:3:"⒨";s:3:"(m)";s:3:"⒩";s:3:"(n)";s:3:"⒪";s:3:"(o)";s:3:"⒫";s:3:"(p)";s:3:"⒬";s:3:"(q)";s:3:"⒭";s:3:"(r)";s:3:"⒮";s:3:"(s)";s:3:"⒯";s:3:"(t)";s:3:"⒰";s:3:"(u)";s:3:"⒱";s:3:"(v)";s:3:"⒲";s:3:"(w)";s:3:"⒳";s:3:"(x)";s:3:"⒴";s:3:"(y)";s:3:"⒵";s:3:"(z)";s:3:"Ⓐ";s:1:"A";s:3:"Ⓑ";s:1:"B";s:3:"Ⓒ";s:1:"C";s:3:"Ⓓ";s:1:"D";s:3:"Ⓔ";s:1:"E";s:3:"Ⓕ";s:1:"F";s:3:"Ⓖ";s:1:"G";s:3:"Ⓗ";s:1:"H";s:3:"Ⓘ";s:1:"I";s:3:"Ⓙ";s:1:"J";s:3:"Ⓚ";s:1:"K";s:3:"Ⓛ";s:1:"L";s:3:"Ⓜ";s:1:"M";s:3:"Ⓝ";s:1:"N";s:3:"Ⓞ";s:1:"O";s:3:"Ⓟ";s:1:"P";s:3:"Ⓠ";s:1:"Q";s:3:"Ⓡ";s:1:"R";s:3:"Ⓢ";s:1:"S";s:3:"Ⓣ";s:1:"T";s:3:"Ⓤ";s:1:"U";s:3:"Ⓥ";s:1:"V";s:3:"Ⓦ";s:1:"W";s:3:"Ⓧ";s:1:"X";s:3:"Ⓨ";s:1:"Y";s:3:"Ⓩ";s:1:"Z";s:3:"ⓐ";s:1:"a";s:3:"ⓑ";s:1:"b";s:3:"ⓒ";s:1:"c";s:3:"ⓓ";s:1:"d";s:3:"ⓔ";s:1:"e";s:3:"ⓕ";s:1:"f";s:3:"ⓖ";s:1:"g";s:3:"ⓗ";s:1:"h";s:3:"ⓘ";s:1:"i";s:3:"ⓙ";s:1:"j";s:3:"ⓚ";s:1:"k";s:3:"ⓛ";s:1:"l";s:3:"ⓜ";s:1:"m";s:3:"ⓝ";s:1:"n";s:3:"ⓞ";s:1:"o";s:3:"ⓟ";s:1:"p";s:3:"ⓠ";s:1:"q";s:3:"ⓡ";s:1:"r";s:3:"ⓢ";s:1:"s";s:3:"ⓣ";s:1:"t";s:3:"ⓤ";s:1:"u";s:3:"ⓥ";s:1:"v";s:3:"ⓦ";s:1:"w";s:3:"ⓧ";s:1:"x";s:3:"ⓨ";s:1:"y";s:3:"ⓩ";s:1:"z";s:3:"⓪";s:1:"0";s:3:"⨌";s:12:"∫∫∫∫";s:3:"⩴";s:3:"::=";s:3:"⩵";s:2:"==";s:3:"⩶";s:3:"===";s:3:"⫝̸";s:5:"⫝̸";s:3:"ⵯ";s:3:"ⵡ";s:3:"⺟";s:3:"母";s:3:"⻳";s:3:"龟";s:3:"⼀";s:3:"一";s:3:"⼁";s:3:"丨";s:3:"⼂";s:3:"丶";s:3:"⼃";s:3:"丿";s:3:"⼄";s:3:"乙";s:3:"⼅";s:3:"亅";s:3:"⼆";s:3:"二";s:3:"⼇";s:3:"亠";s:3:"⼈";s:3:"人";s:3:"⼉";s:3:"儿";s:3:"⼊";s:3:"入";s:3:"⼋";s:3:"八";s:3:"⼌";s:3:"冂";s:3:"⼍";s:3:"冖";s:3:"⼎";s:3:"冫";s:3:"⼏";s:3:"几";s:3:"⼐";s:3:"凵";s:3:"⼑";s:3:"刀";s:3:"⼒";s:3:"力";s:3:"⼓";s:3:"勹";s:3:"⼔";s:3:"匕";s:3:"⼕";s:3:"匚";s:3:"⼖";s:3:"匸";s:3:"⼗";s:3:"十";s:3:"⼘";s:3:"卜";s:3:"⼙";s:3:"卩";s:3:"⼚";s:3:"厂";s:3:"⼛";s:3:"厶";s:3:"⼜";s:3:"又";s:3:"⼝";s:3:"口";s:3:"⼞";s:3:"囗";s:3:"⼟";s:3:"土";s:3:"⼠";s:3:"士";s:3:"⼡";s:3:"夂";s:3:"⼢";s:3:"夊";s:3:"⼣";s:3:"夕";s:3:"⼤";s:3:"大";s:3:"⼥";s:3:"女";s:3:"⼦";s:3:"子";s:3:"⼧";s:3:"宀";s:3:"⼨";s:3:"寸";s:3:"⼩";s:3:"小";s:3:"⼪";s:3:"尢";s:3:"⼫";s:3:"尸";s:3:"⼬";s:3:"屮";s:3:"⼭";s:3:"山";s:3:"⼮";s:3:"巛";s:3:"⼯";s:3:"工";s:3:"⼰";s:3:"己";s:3:"⼱";s:3:"巾";s:3:"⼲";s:3:"干";s:3:"⼳";s:3:"幺";s:3:"⼴";s:3:"广";s:3:"⼵";s:3:"廴";s:3:"⼶";s:3:"廾";s:3:"⼷";s:3:"弋";s:3:"⼸";s:3:"弓";s:3:"⼹";s:3:"彐";s:3:"⼺";s:3:"彡";s:3:"⼻";s:3:"彳";s:3:"⼼";s:3:"心";s:3:"⼽";s:3:"戈";s:3:"⼾";s:3:"戶";s:3:"⼿";s:3:"手";s:3:"⽀";s:3:"支";s:3:"⽁";s:3:"攴";s:3:"⽂";s:3:"文";s:3:"⽃";s:3:"斗";s:3:"⽄";s:3:"斤";s:3:"⽅";s:3:"方";s:3:"⽆";s:3:"无";s:3:"⽇";s:3:"日";s:3:"⽈";s:3:"曰";s:3:"⽉";s:3:"月";s:3:"⽊";s:3:"木";s:3:"⽋";s:3:"欠";s:3:"⽌";s:3:"止";s:3:"⽍";s:3:"歹";s:3:"⽎";s:3:"殳";s:3:"⽏";s:3:"毋";s:3:"⽐";s:3:"比";s:3:"⽑";s:3:"毛";s:3:"⽒";s:3:"氏";s:3:"⽓";s:3:"气";s:3:"⽔";s:3:"水";s:3:"⽕";s:3:"火";s:3:"⽖";s:3:"爪";s:3:"⽗";s:3:"父";s:3:"⽘";s:3:"爻";s:3:"⽙";s:3:"爿";s:3:"⽚";s:3:"片";s:3:"⽛";s:3:"牙";s:3:"⽜";s:3:"牛";s:3:"⽝";s:3:"犬";s:3:"⽞";s:3:"玄";s:3:"⽟";s:3:"玉";s:3:"⽠";s:3:"瓜";s:3:"⽡";s:3:"瓦";s:3:"⽢";s:3:"甘";s:3:"⽣";s:3:"生";s:3:"⽤";s:3:"用";s:3:"⽥";s:3:"田";s:3:"⽦";s:3:"疋";s:3:"⽧";s:3:"疒";s:3:"⽨";s:3:"癶";s:3:"⽩";s:3:"白";s:3:"⽪";s:3:"皮";s:3:"⽫";s:3:"皿";s:3:"⽬";s:3:"目";s:3:"⽭";s:3:"矛";s:3:"⽮";s:3:"矢";s:3:"⽯";s:3:"石";s:3:"⽰";s:3:"示";s:3:"⽱";s:3:"禸";s:3:"⽲";s:3:"禾";s:3:"⽳";s:3:"穴";s:3:"⽴";s:3:"立";s:3:"⽵";s:3:"竹";s:3:"⽶";s:3:"米";s:3:"⽷";s:3:"糸";s:3:"⽸";s:3:"缶";s:3:"⽹";s:3:"网";s:3:"⽺";s:3:"羊";s:3:"⽻";s:3:"羽";s:3:"⽼";s:3:"老";s:3:"⽽";s:3:"而";s:3:"⽾";s:3:"耒";s:3:"⽿";s:3:"耳";s:3:"⾀";s:3:"聿";s:3:"⾁";s:3:"肉";s:3:"⾂";s:3:"臣";s:3:"⾃";s:3:"自";s:3:"⾄";s:3:"至";s:3:"⾅";s:3:"臼";s:3:"⾆";s:3:"舌";s:3:"⾇";s:3:"舛";s:3:"⾈";s:3:"舟";s:3:"⾉";s:3:"艮";s:3:"⾊";s:3:"色";s:3:"⾋";s:3:"艸";s:3:"⾌";s:3:"虍";s:3:"⾍";s:3:"虫";s:3:"⾎";s:3:"血";s:3:"⾏";s:3:"行";s:3:"⾐";s:3:"衣";s:3:"⾑";s:3:"襾";s:3:"⾒";s:3:"見";s:3:"⾓";s:3:"角";s:3:"⾔";s:3:"言";s:3:"⾕";s:3:"谷";s:3:"⾖";s:3:"豆";s:3:"⾗";s:3:"豕";s:3:"⾘";s:3:"豸";s:3:"⾙";s:3:"貝";s:3:"⾚";s:3:"赤";s:3:"⾛";s:3:"走";s:3:"⾜";s:3:"足";s:3:"⾝";s:3:"身";s:3:"⾞";s:3:"車";s:3:"⾟";s:3:"辛";s:3:"⾠";s:3:"辰";s:3:"⾡";s:3:"辵";s:3:"⾢";s:3:"邑";s:3:"⾣";s:3:"酉";s:3:"⾤";s:3:"釆";s:3:"⾥";s:3:"里";s:3:"⾦";s:3:"金";s:3:"⾧";s:3:"長";s:3:"⾨";s:3:"門";s:3:"⾩";s:3:"阜";s:3:"⾪";s:3:"隶";s:3:"⾫";s:3:"隹";s:3:"⾬";s:3:"雨";s:3:"⾭";s:3:"靑";s:3:"⾮";s:3:"非";s:3:"⾯";s:3:"面";s:3:"⾰";s:3:"革";s:3:"⾱";s:3:"韋";s:3:"⾲";s:3:"韭";s:3:"⾳";s:3:"音";s:3:"⾴";s:3:"頁";s:3:"⾵";s:3:"風";s:3:"⾶";s:3:"飛";s:3:"⾷";s:3:"食";s:3:"⾸";s:3:"首";s:3:"⾹";s:3:"香";s:3:"⾺";s:3:"馬";s:3:"⾻";s:3:"骨";s:3:"⾼";s:3:"高";s:3:"⾽";s:3:"髟";s:3:"⾾";s:3:"鬥";s:3:"⾿";s:3:"鬯";s:3:"⿀";s:3:"鬲";s:3:"⿁";s:3:"鬼";s:3:"⿂";s:3:"魚";s:3:"⿃";s:3:"鳥";s:3:"⿄";s:3:"鹵";s:3:"⿅";s:3:"鹿";s:3:"⿆";s:3:"麥";s:3:"⿇";s:3:"麻";s:3:"⿈";s:3:"黃";s:3:"⿉";s:3:"黍";s:3:"⿊";s:3:"黑";s:3:"⿋";s:3:"黹";s:3:"⿌";s:3:"黽";s:3:"⿍";s:3:"鼎";s:3:"⿎";s:3:"鼓";s:3:"⿏";s:3:"鼠";s:3:"⿐";s:3:"鼻";s:3:"⿑";s:3:"齊";s:3:"⿒";s:3:"齒";s:3:"⿓";s:3:"龍";s:3:"⿔";s:3:"龜";s:3:"⿕";s:3:"龠";s:3:"　";s:1:" ";s:3:"〶";s:3:"〒";s:3:"〸";s:3:"十";s:3:"〹";s:3:"卄";s:3:"〺";s:3:"卅";s:3:"が";s:6:"が";s:3:"ぎ";s:6:"ぎ";s:3:"ぐ";s:6:"ぐ";s:3:"げ";s:6:"げ";s:3:"ご";s:6:"ご";s:3:"ざ";s:6:"ざ";s:3:"じ";s:6:"じ";s:3:"ず";s:6:"ず";s:3:"ぜ";s:6:"ぜ";s:3:"ぞ";s:6:"ぞ";s:3:"だ";s:6:"だ";s:3:"ぢ";s:6:"ぢ";s:3:"づ";s:6:"づ";s:3:"で";s:6:"で";s:3:"ど";s:6:"ど";s:3:"ば";s:6:"ば";s:3:"ぱ";s:6:"ぱ";s:3:"び";s:6:"び";s:3:"ぴ";s:6:"ぴ";s:3:"ぶ";s:6:"ぶ";s:3:"ぷ";s:6:"ぷ";s:3:"べ";s:6:"べ";s:3:"ぺ";s:6:"ぺ";s:3:"ぼ";s:6:"ぼ";s:3:"ぽ";s:6:"ぽ";s:3:"ゔ";s:6:"ゔ";s:3:"゛";s:4:" ゙";s:3:"゜";s:4:" ゚";s:3:"ゞ";s:6:"ゞ";s:3:"ゟ";s:6:"より";s:3:"ガ";s:6:"ガ";s:3:"ギ";s:6:"ギ";s:3:"グ";s:6:"グ";s:3:"ゲ";s:6:"ゲ";s:3:"ゴ";s:6:"ゴ";s:3:"ザ";s:6:"ザ";s:3:"ジ";s:6:"ジ";s:3:"ズ";s:6:"ズ";s:3:"ゼ";s:6:"ゼ";s:3:"ゾ";s:6:"ゾ";s:3:"ダ";s:6:"ダ";s:3:"ヂ";s:6:"ヂ";s:3:"ヅ";s:6:"ヅ";s:3:"デ";s:6:"デ";s:3:"ド";s:6:"ド";s:3:"バ";s:6:"バ";s:3:"パ";s:6:"パ";s:3:"ビ";s:6:"ビ";s:3:"ピ";s:6:"ピ";s:3:"ブ";s:6:"ブ";s:3:"プ";s:6:"プ";s:3:"ベ";s:6:"ベ";s:3:"ペ";s:6:"ペ";s:3:"ボ";s:6:"ボ";s:3:"ポ";s:6:"ポ";s:3:"ヴ";s:6:"ヴ";s:3:"ヷ";s:6:"ヷ";s:3:"ヸ";s:6:"ヸ";s:3:"ヹ";s:6:"ヹ";s:3:"ヺ";s:6:"ヺ";s:3:"ヾ";s:6:"ヾ";s:3:"ヿ";s:6:"コト";s:3:"ㄱ";s:3:"ᄀ";s:3:"ㄲ";s:3:"ᄁ";s:3:"ㄳ";s:3:"ᆪ";s:3:"ㄴ";s:3:"ᄂ";s:3:"ㄵ";s:3:"ᆬ";s:3:"ㄶ";s:3:"ᆭ";s:3:"ㄷ";s:3:"ᄃ";s:3:"ㄸ";s:3:"ᄄ";s:3:"ㄹ";s:3:"ᄅ";s:3:"ㄺ";s:3:"ᆰ";s:3:"ㄻ";s:3:"ᆱ";s:3:"ㄼ";s:3:"ᆲ";s:3:"ㄽ";s:3:"ᆳ";s:3:"ㄾ";s:3:"ᆴ";s:3:"ㄿ";s:3:"ᆵ";s:3:"ㅀ";s:3:"ᄚ";s:3:"ㅁ";s:3:"ᄆ";s:3:"ㅂ";s:3:"ᄇ";s:3:"ㅃ";s:3:"ᄈ";s:3:"ㅄ";s:3:"ᄡ";s:3:"ㅅ";s:3:"ᄉ";s:3:"ㅆ";s:3:"ᄊ";s:3:"ㅇ";s:3:"ᄋ";s:3:"ㅈ";s:3:"ᄌ";s:3:"ㅉ";s:3:"ᄍ";s:3:"ㅊ";s:3:"ᄎ";s:3:"ㅋ";s:3:"ᄏ";s:3:"ㅌ";s:3:"ᄐ";s:3:"ㅍ";s:3:"ᄑ";s:3:"ㅎ";s:3:"ᄒ";s:3:"ㅏ";s:3:"ᅡ";s:3:"ㅐ";s:3:"ᅢ";s:3:"ㅑ";s:3:"ᅣ";s:3:"ㅒ";s:3:"ᅤ";s:3:"ㅓ";s:3:"ᅥ";s:3:"ㅔ";s:3:"ᅦ";s:3:"ㅕ";s:3:"ᅧ";s:3:"ㅖ";s:3:"ᅨ";s:3:"ㅗ";s:3:"ᅩ";s:3:"ㅘ";s:3:"ᅪ";s:3:"ㅙ";s:3:"ᅫ";s:3:"ㅚ";s:3:"ᅬ";s:3:"ㅛ";s:3:"ᅭ";s:3:"ㅜ";s:3:"ᅮ";s:3:"ㅝ";s:3:"ᅯ";s:3:"ㅞ";s:3:"ᅰ";s:3:"ㅟ";s:3:"ᅱ";s:3:"ㅠ";s:3:"ᅲ";s:3:"ㅡ";s:3:"ᅳ";s:3:"ㅢ";s:3:"ᅴ";s:3:"ㅣ";s:3:"ᅵ";s:3:"ㅤ";s:3:"ᅠ";s:3:"ㅥ";s:3:"ᄔ";s:3:"ㅦ";s:3:"ᄕ";s:3:"ㅧ";s:3:"ᇇ";s:3:"ㅨ";s:3:"ᇈ";s:3:"ㅩ";s:3:"ᇌ";s:3:"ㅪ";s:3:"ᇎ";s:3:"ㅫ";s:3:"ᇓ";s:3:"ㅬ";s:3:"ᇗ";s:3:"ㅭ";s:3:"ᇙ";s:3:"ㅮ";s:3:"ᄜ";s:3:"ㅯ";s:3:"ᇝ";s:3:"ㅰ";s:3:"ᇟ";s:3:"ㅱ";s:3:"ᄝ";s:3:"ㅲ";s:3:"ᄞ";s:3:"ㅳ";s:3:"ᄠ";s:3:"ㅴ";s:3:"ᄢ";s:3:"ㅵ";s:3:"ᄣ";s:3:"ㅶ";s:3:"ᄧ";s:3:"ㅷ";s:3:"ᄩ";s:3:"ㅸ";s:3:"ᄫ";s:3:"ㅹ";s:3:"ᄬ";s:3:"ㅺ";s:3:"ᄭ";s:3:"ㅻ";s:3:"ᄮ";s:3:"ㅼ";s:3:"ᄯ";s:3:"ㅽ";s:3:"ᄲ";s:3:"ㅾ";s:3:"ᄶ";s:3:"ㅿ";s:3:"ᅀ";s:3:"ㆀ";s:3:"ᅇ";s:3:"ㆁ";s:3:"ᅌ";s:3:"ㆂ";s:3:"ᇱ";s:3:"ㆃ";s:3:"ᇲ";s:3:"ㆄ";s:3:"ᅗ";s:3:"ㆅ";s:3:"ᅘ";s:3:"ㆆ";s:3:"ᅙ";s:3:"ㆇ";s:3:"ᆄ";s:3:"ㆈ";s:3:"ᆅ";s:3:"ㆉ";s:3:"ᆈ";s:3:"ㆊ";s:3:"ᆑ";s:3:"ㆋ";s:3:"ᆒ";s:3:"ㆌ";s:3:"ᆔ";s:3:"ㆍ";s:3:"ᆞ";s:3:"ㆎ";s:3:"ᆡ";s:3:"㆒";s:3:"一";s:3:"㆓";s:3:"二";s:3:"㆔";s:3:"三";s:3:"㆕";s:3:"四";s:3:"㆖";s:3:"上";s:3:"㆗";s:3:"中";s:3:"㆘";s:3:"下";s:3:"㆙";s:3:"甲";s:3:"㆚";s:3:"乙";s:3:"㆛";s:3:"丙";s:3:"㆜";s:3:"丁";s:3:"㆝";s:3:"天";s:3:"㆞";s:3:"地";s:3:"㆟";s:3:"人";s:3:"㈀";s:5:"(ᄀ)";s:3:"㈁";s:5:"(ᄂ)";s:3:"㈂";s:5:"(ᄃ)";s:3:"㈃";s:5:"(ᄅ)";s:3:"㈄";s:5:"(ᄆ)";s:3:"㈅";s:5:"(ᄇ)";s:3:"㈆";s:5:"(ᄉ)";s:3:"㈇";s:5:"(ᄋ)";s:3:"㈈";s:5:"(ᄌ)";s:3:"㈉";s:5:"(ᄎ)";s:3:"㈊";s:5:"(ᄏ)";s:3:"㈋";s:5:"(ᄐ)";s:3:"㈌";s:5:"(ᄑ)";s:3:"㈍";s:5:"(ᄒ)";s:3:"㈎";s:8:"(가)";s:3:"㈏";s:8:"(나)";s:3:"㈐";s:8:"(다)";s:3:"㈑";s:8:"(라)";s:3:"㈒";s:8:"(마)";s:3:"㈓";s:8:"(바)";s:3:"㈔";s:8:"(사)";s:3:"㈕";s:8:"(아)";s:3:"㈖";s:8:"(자)";s:3:"㈗";s:8:"(차)";s:3:"㈘";s:8:"(카)";s:3:"㈙";s:8:"(타)";s:3:"㈚";s:8:"(파)";s:3:"㈛";s:8:"(하)";s:3:"㈜";s:8:"(주)";s:3:"㈝";s:17:"(오전)";s:3:"㈞";s:14:"(오후)";s:3:"㈠";s:5:"(一)";s:3:"㈡";s:5:"(二)";s:3:"㈢";s:5:"(三)";s:3:"㈣";s:5:"(四)";s:3:"㈤";s:5:"(五)";s:3:"㈥";s:5:"(六)";s:3:"㈦";s:5:"(七)";s:3:"㈧";s:5:"(八)";s:3:"㈨";s:5:"(九)";s:3:"㈩";s:5:"(十)";s:3:"㈪";s:5:"(月)";s:3:"㈫";s:5:"(火)";s:3:"㈬";s:5:"(水)";s:3:"㈭";s:5:"(木)";s:3:"㈮";s:5:"(金)";s:3:"㈯";s:5:"(土)";s:3:"㈰";s:5:"(日)";s:3:"㈱";s:5:"(株)";s:3:"㈲";s:5:"(有)";s:3:"㈳";s:5:"(社)";s:3:"㈴";s:5:"(名)";s:3:"㈵";s:5:"(特)";s:3:"㈶";s:5:"(財)";s:3:"㈷";s:5:"(祝)";s:3:"㈸";s:5:"(労)";s:3:"㈹";s:5:"(代)";s:3:"㈺";s:5:"(呼)";s:3:"㈻";s:5:"(学)";s:3:"㈼";s:5:"(監)";s:3:"㈽";s:5:"(企)";s:3:"㈾";s:5:"(資)";s:3:"㈿";s:5:"(協)";s:3:"㉀";s:5:"(祭)";s:3:"㉁";s:5:"(休)";s:3:"㉂";s:5:"(自)";s:3:"㉃";s:5:"(至)";s:3:"㉐";s:3:"PTE";s:3:"㉑";s:2:"21";s:3:"㉒";s:2:"22";s:3:"㉓";s:2:"23";s:3:"㉔";s:2:"24";s:3:"㉕";s:2:"25";s:3:"㉖";s:2:"26";s:3:"㉗";s:2:"27";s:3:"㉘";s:2:"28";s:3:"㉙";s:2:"29";s:3:"㉚";s:2:"30";s:3:"㉛";s:2:"31";s:3:"㉜";s:2:"32";s:3:"㉝";s:2:"33";s:3:"㉞";s:2:"34";s:3:"㉟";s:2:"35";s:3:"㉠";s:3:"ᄀ";s:3:"㉡";s:3:"ᄂ";s:3:"㉢";s:3:"ᄃ";s:3:"㉣";s:3:"ᄅ";s:3:"㉤";s:3:"ᄆ";s:3:"㉥";s:3:"ᄇ";s:3:"㉦";s:3:"ᄉ";s:3:"㉧";s:3:"ᄋ";s:3:"㉨";s:3:"ᄌ";s:3:"㉩";s:3:"ᄎ";s:3:"㉪";s:3:"ᄏ";s:3:"㉫";s:3:"ᄐ";s:3:"㉬";s:3:"ᄑ";s:3:"㉭";s:3:"ᄒ";s:3:"㉮";s:6:"가";s:3:"㉯";s:6:"나";s:3:"㉰";s:6:"다";s:3:"㉱";s:6:"라";s:3:"㉲";s:6:"마";s:3:"㉳";s:6:"바";s:3:"㉴";s:6:"사";s:3:"㉵";s:6:"아";s:3:"㉶";s:6:"자";s:3:"㉷";s:6:"차";s:3:"㉸";s:6:"카";s:3:"㉹";s:6:"타";s:3:"㉺";s:6:"파";s:3:"㉻";s:6:"하";s:3:"㉼";s:15:"참고";s:3:"㉽";s:12:"주의";s:3:"㉾";s:6:"우";s:3:"㊀";s:3:"一";s:3:"㊁";s:3:"二";s:3:"㊂";s:3:"三";s:3:"㊃";s:3:"四";s:3:"㊄";s:3:"五";s:3:"㊅";s:3:"六";s:3:"㊆";s:3:"七";s:3:"㊇";s:3:"八";s:3:"㊈";s:3:"九";s:3:"㊉";s:3:"十";s:3:"㊊";s:3:"月";s:3:"㊋";s:3:"火";s:3:"㊌";s:3:"水";s:3:"㊍";s:3:"木";s:3:"㊎";s:3:"金";s:3:"㊏";s:3:"土";s:3:"㊐";s:3:"日";s:3:"㊑";s:3:"株";s:3:"㊒";s:3:"有";s:3:"㊓";s:3:"社";s:3:"㊔";s:3:"名";s:3:"㊕";s:3:"特";s:3:"㊖";s:3:"財";s:3:"㊗";s:3:"祝";s:3:"㊘";s:3:"労";s:3:"㊙";s:3:"秘";s:3:"㊚";s:3:"男";s:3:"㊛";s:3:"女";s:3:"㊜";s:3:"適";s:3:"㊝";s:3:"優";s:3:"㊞";s:3:"印";s:3:"㊟";s:3:"注";s:3:"㊠";s:3:"項";s:3:"㊡";s:3:"休";s:3:"㊢";s:3:"写";s:3:"㊣";s:3:"正";s:3:"㊤";s:3:"上";s:3:"㊥";s:3:"中";s:3:"㊦";s:3:"下";s:3:"㊧";s:3:"左";s:3:"㊨";s:3:"右";s:3:"㊩";s:3:"医";s:3:"㊪";s:3:"宗";s:3:"㊫";s:3:"学";s:3:"㊬";s:3:"監";s:3:"㊭";s:3:"企";s:3:"㊮";s:3:"資";s:3:"㊯";s:3:"協";s:3:"㊰";s:3:"夜";s:3:"㊱";s:2:"36";s:3:"㊲";s:2:"37";s:3:"㊳";s:2:"38";s:3:"㊴";s:2:"39";s:3:"㊵";s:2:"40";s:3:"㊶";s:2:"41";s:3:"㊷";s:2:"42";s:3:"㊸";s:2:"43";s:3:"㊹";s:2:"44";s:3:"㊺";s:2:"45";s:3:"㊻";s:2:"46";s:3:"㊼";s:2:"47";s:3:"㊽";s:2:"48";s:3:"㊾";s:2:"49";s:3:"㊿";s:2:"50";s:3:"㋀";s:4:"1月";s:3:"㋁";s:4:"2月";s:3:"㋂";s:4:"3月";s:3:"㋃";s:4:"4月";s:3:"㋄";s:4:"5月";s:3:"㋅";s:4:"6月";s:3:"㋆";s:4:"7月";s:3:"㋇";s:4:"8月";s:3:"㋈";s:4:"9月";s:3:"㋉";s:5:"10月";s:3:"㋊";s:5:"11月";s:3:"㋋";s:5:"12月";s:3:"㋌";s:2:"Hg";s:3:"㋍";s:3:"erg";s:3:"㋎";s:2:"eV";s:3:"㋏";s:3:"LTD";s:3:"㋐";s:3:"ア";s:3:"㋑";s:3:"イ";s:3:"㋒";s:3:"ウ";s:3:"㋓";s:3:"エ";s:3:"㋔";s:3:"オ";s:3:"㋕";s:3:"カ";s:3:"㋖";s:3:"キ";s:3:"㋗";s:3:"ク";s:3:"㋘";s:3:"ケ";s:3:"㋙";s:3:"コ";s:3:"㋚";s:3:"サ";s:3:"㋛";s:3:"シ";s:3:"㋜";s:3:"ス";s:3:"㋝";s:3:"セ";s:3:"㋞";s:3:"ソ";s:3:"㋟";s:3:"タ";s:3:"㋠";s:3:"チ";s:3:"㋡";s:3:"ツ";s:3:"㋢";s:3:"テ";s:3:"㋣";s:3:"ト";s:3:"㋤";s:3:"ナ";s:3:"㋥";s:3:"ニ";s:3:"㋦";s:3:"ヌ";s:3:"㋧";s:3:"ネ";s:3:"㋨";s:3:"ノ";s:3:"㋩";s:3:"ハ";s:3:"㋪";s:3:"ヒ";s:3:"㋫";s:3:"フ";s:3:"㋬";s:3:"ヘ";s:3:"㋭";s:3:"ホ";s:3:"㋮";s:3:"マ";s:3:"㋯";s:3:"ミ";s:3:"㋰";s:3:"ム";s:3:"㋱";s:3:"メ";s:3:"㋲";s:3:"モ";s:3:"㋳";s:3:"ヤ";s:3:"㋴";s:3:"ユ";s:3:"㋵";s:3:"ヨ";s:3:"㋶";s:3:"ラ";s:3:"㋷";s:3:"リ";s:3:"㋸";s:3:"ル";s:3:"㋹";s:3:"レ";s:3:"㋺";s:3:"ロ";s:3:"㋻";s:3:"ワ";s:3:"㋼";s:3:"ヰ";s:3:"㋽";s:3:"ヱ";s:3:"㋾";s:3:"ヲ";s:3:"㌀";s:15:"アパート";s:3:"㌁";s:12:"アルファ";s:3:"㌂";s:15:"アンペア";s:3:"㌃";s:9:"アール";s:3:"㌄";s:15:"イニング";s:3:"㌅";s:9:"インチ";s:3:"㌆";s:9:"ウォン";s:3:"㌇";s:18:"エスクード";s:3:"㌈";s:12:"エーカー";s:3:"㌉";s:9:"オンス";s:3:"㌊";s:9:"オーム";s:3:"㌋";s:9:"カイリ";s:3:"㌌";s:12:"カラット";s:3:"㌍";s:12:"カロリー";s:3:"㌎";s:12:"ガロン";s:3:"㌏";s:12:"ガンマ";s:3:"㌐";s:12:"ギガ";s:3:"㌑";s:12:"ギニー";s:3:"㌒";s:12:"キュリー";s:3:"㌓";s:18:"ギルダー";s:3:"㌔";s:6:"キロ";s:3:"㌕";s:18:"キログラム";s:3:"㌖";s:18:"キロメートル";s:3:"㌗";s:15:"キロワット";s:3:"㌘";s:12:"グラム";s:3:"㌙";s:18:"グラムトン";s:3:"㌚";s:18:"クルゼイロ";s:3:"㌛";s:12:"クローネ";s:3:"㌜";s:9:"ケース";s:3:"㌝";s:9:"コルナ";s:3:"㌞";s:12:"コーポ";s:3:"㌟";s:12:"サイクル";s:3:"㌠";s:15:"サンチーム";s:3:"㌡";s:15:"シリング";s:3:"㌢";s:9:"センチ";s:3:"㌣";s:9:"セント";s:3:"㌤";s:12:"ダース";s:3:"㌥";s:9:"デシ";s:3:"㌦";s:9:"ドル";s:3:"㌧";s:6:"トン";s:3:"㌨";s:6:"ナノ";s:3:"㌩";s:9:"ノット";s:3:"㌪";s:9:"ハイツ";s:3:"㌫";s:18:"パーセント";s:3:"㌬";s:12:"パーツ";s:3:"㌭";s:15:"バーレル";s:3:"㌮";s:18:"ピアストル";s:3:"㌯";s:12:"ピクル";s:3:"㌰";s:9:"ピコ";s:3:"㌱";s:9:"ビル";s:3:"㌲";s:18:"ファラッド";s:3:"㌳";s:12:"フィート";s:3:"㌴";s:18:"ブッシェル";s:3:"㌵";s:9:"フラン";s:3:"㌶";s:15:"ヘクタール";s:3:"㌷";s:9:"ペソ";s:3:"㌸";s:12:"ペニヒ";s:3:"㌹";s:9:"ヘルツ";s:3:"㌺";s:12:"ペンス";s:3:"㌻";s:15:"ページ";s:3:"㌼";s:12:"ベータ";s:3:"㌽";s:15:"ポイント";s:3:"㌾";s:12:"ボルト";s:3:"㌿";s:6:"ホン";s:3:"㍀";s:15:"ポンド";s:3:"㍁";s:9:"ホール";s:3:"㍂";s:9:"ホーン";s:3:"㍃";s:12:"マイクロ";s:3:"㍄";s:9:"マイル";s:3:"㍅";s:9:"マッハ";s:3:"㍆";s:9:"マルク";s:3:"㍇";s:15:"マンション";s:3:"㍈";s:12:"ミクロン";s:3:"㍉";s:6:"ミリ";s:3:"㍊";s:18:"ミリバール";s:3:"㍋";s:9:"メガ";s:3:"㍌";s:15:"メガトン";s:3:"㍍";s:12:"メートル";s:3:"㍎";s:12:"ヤード";s:3:"㍏";s:9:"ヤール";s:3:"㍐";s:9:"ユアン";s:3:"㍑";s:12:"リットル";s:3:"㍒";s:6:"リラ";s:3:"㍓";s:12:"ルピー";s:3:"㍔";s:15:"ルーブル";s:3:"㍕";s:6:"レム";s:3:"㍖";s:18:"レントゲン";s:3:"㍗";s:9:"ワット";s:3:"㍘";s:4:"0点";s:3:"㍙";s:4:"1点";s:3:"㍚";s:4:"2点";s:3:"㍛";s:4:"3点";s:3:"㍜";s:4:"4点";s:3:"㍝";s:4:"5点";s:3:"㍞";s:4:"6点";s:3:"㍟";s:4:"7点";s:3:"㍠";s:4:"8点";s:3:"㍡";s:4:"9点";s:3:"㍢";s:5:"10点";s:3:"㍣";s:5:"11点";s:3:"㍤";s:5:"12点";s:3:"㍥";s:5:"13点";s:3:"㍦";s:5:"14点";s:3:"㍧";s:5:"15点";s:3:"㍨";s:5:"16点";s:3:"㍩";s:5:"17点";s:3:"㍪";s:5:"18点";s:3:"㍫";s:5:"19点";s:3:"㍬";s:5:"20点";s:3:"㍭";s:5:"21点";s:3:"㍮";s:5:"22点";s:3:"㍯";s:5:"23点";s:3:"㍰";s:5:"24点";s:3:"㍱";s:3:"hPa";s:3:"㍲";s:2:"da";s:3:"㍳";s:2:"AU";s:3:"㍴";s:3:"bar";s:3:"㍵";s:2:"oV";s:3:"㍶";s:2:"pc";s:3:"㍷";s:2:"dm";s:3:"㍸";s:3:"dm2";s:3:"㍹";s:3:"dm3";s:3:"㍺";s:2:"IU";s:3:"㍻";s:6:"平成";s:3:"㍼";s:6:"昭和";s:3:"㍽";s:6:"大正";s:3:"㍾";s:6:"明治";s:3:"㍿";s:12:"株式会社";s:3:"㎀";s:2:"pA";s:3:"㎁";s:2:"nA";s:3:"㎂";s:3:"μA";s:3:"㎃";s:2:"mA";s:3:"㎄";s:2:"kA";s:3:"㎅";s:2:"KB";s:3:"㎆";s:2:"MB";s:3:"㎇";s:2:"GB";s:3:"㎈";s:3:"cal";s:3:"㎉";s:4:"kcal";s:3:"㎊";s:2:"pF";s:3:"㎋";s:2:"nF";s:3:"㎌";s:3:"μF";s:3:"㎍";s:3:"μg";s:3:"㎎";s:2:"mg";s:3:"㎏";s:2:"kg";s:3:"㎐";s:2:"Hz";s:3:"㎑";s:3:"kHz";s:3:"㎒";s:3:"MHz";s:3:"㎓";s:3:"GHz";s:3:"㎔";s:3:"THz";s:3:"㎕";s:3:"μl";s:3:"㎖";s:2:"ml";s:3:"㎗";s:2:"dl";s:3:"㎘";s:2:"kl";s:3:"㎙";s:2:"fm";s:3:"㎚";s:2:"nm";s:3:"㎛";s:3:"μm";s:3:"㎜";s:2:"mm";s:3:"㎝";s:2:"cm";s:3:"㎞";s:2:"km";s:3:"㎟";s:3:"mm2";s:3:"㎠";s:3:"cm2";s:3:"㎡";s:2:"m2";s:3:"㎢";s:3:"km2";s:3:"㎣";s:3:"mm3";s:3:"㎤";s:3:"cm3";s:3:"㎥";s:2:"m3";s:3:"㎦";s:3:"km3";s:3:"㎧";s:5:"m∕s";s:3:"㎨";s:6:"m∕s2";s:3:"㎩";s:2:"Pa";s:3:"㎪";s:3:"kPa";s:3:"㎫";s:3:"MPa";s:3:"㎬";s:3:"GPa";s:3:"㎭";s:3:"rad";s:3:"㎮";s:7:"rad∕s";s:3:"㎯";s:8:"rad∕s2";s:3:"㎰";s:2:"ps";s:3:"㎱";s:2:"ns";s:3:"㎲";s:3:"μs";s:3:"㎳";s:2:"ms";s:3:"㎴";s:2:"pV";s:3:"㎵";s:2:"nV";s:3:"㎶";s:3:"μV";s:3:"㎷";s:2:"mV";s:3:"㎸";s:2:"kV";s:3:"㎹";s:2:"MV";s:3:"㎺";s:2:"pW";s:3:"㎻";s:2:"nW";s:3:"㎼";s:3:"μW";s:3:"㎽";s:2:"mW";s:3:"㎾";s:2:"kW";s:3:"㎿";s:2:"MW";s:3:"㏀";s:3:"kΩ";s:3:"㏁";s:3:"MΩ";s:3:"㏂";s:4:"a.m.";s:3:"㏃";s:2:"Bq";s:3:"㏄";s:2:"cc";s:3:"㏅";s:2:"cd";s:3:"㏆";s:6:"C∕kg";s:3:"㏇";s:3:"Co.";s:3:"㏈";s:2:"dB";s:3:"㏉";s:2:"Gy";s:3:"㏊";s:2:"ha";s:3:"㏋";s:2:"HP";s:3:"㏌";s:2:"in";s:3:"㏍";s:2:"KK";s:3:"㏎";s:2:"KM";s:3:"㏏";s:2:"kt";s:3:"㏐";s:2:"lm";s:3:"㏑";s:2:"ln";s:3:"㏒";s:3:"log";s:3:"㏓";s:2:"lx";s:3:"㏔";s:2:"mb";s:3:"㏕";s:3:"mil";s:3:"㏖";s:3:"mol";s:3:"㏗";s:2:"PH";s:3:"㏘";s:4:"p.m.";s:3:"㏙";s:3:"PPM";s:3:"㏚";s:2:"PR";s:3:"㏛";s:2:"sr";s:3:"㏜";s:2:"Sv";s:3:"㏝";s:2:"Wb";s:3:"㏞";s:5:"V∕m";s:3:"㏟";s:5:"A∕m";s:3:"㏠";s:4:"1日";s:3:"㏡";s:4:"2日";s:3:"㏢";s:4:"3日";s:3:"㏣";s:4:"4日";s:3:"㏤";s:4:"5日";s:3:"㏥";s:4:"6日";s:3:"㏦";s:4:"7日";s:3:"㏧";s:4:"8日";s:3:"㏨";s:4:"9日";s:3:"㏩";s:5:"10日";s:3:"㏪";s:5:"11日";s:3:"㏫";s:5:"12日";s:3:"㏬";s:5:"13日";s:3:"㏭";s:5:"14日";s:3:"㏮";s:5:"15日";s:3:"㏯";s:5:"16日";s:3:"㏰";s:5:"17日";s:3:"㏱";s:5:"18日";s:3:"㏲";s:5:"19日";s:3:"㏳";s:5:"20日";s:3:"㏴";s:5:"21日";s:3:"㏵";s:5:"22日";s:3:"㏶";s:5:"23日";s:3:"㏷";s:5:"24日";s:3:"㏸";s:5:"25日";s:3:"㏹";s:5:"26日";s:3:"㏺";s:5:"27日";s:3:"㏻";s:5:"28日";s:3:"㏼";s:5:"29日";s:3:"㏽";s:5:"30日";s:3:"㏾";s:5:"31日";s:3:"㏿";s:3:"gal";s:3:"豈";s:3:"豈";s:3:"更";s:3:"更";s:3:"車";s:3:"車";s:3:"賈";s:3:"賈";s:3:"滑";s:3:"滑";s:3:"串";s:3:"串";s:3:"句";s:3:"句";s:3:"龜";s:3:"龜";s:3:"龜";s:3:"龜";s:3:"契";s:3:"契";s:3:"金";s:3:"金";s:3:"喇";s:3:"喇";s:3:"奈";s:3:"奈";s:3:"懶";s:3:"懶";s:3:"癩";s:3:"癩";s:3:"羅";s:3:"羅";s:3:"蘿";s:3:"蘿";s:3:"螺";s:3:"螺";s:3:"裸";s:3:"裸";s:3:"邏";s:3:"邏";s:3:"樂";s:3:"樂";s:3:"洛";s:3:"洛";s:3:"烙";s:3:"烙";s:3:"珞";s:3:"珞";s:3:"落";s:3:"落";s:3:"酪";s:3:"酪";s:3:"駱";s:3:"駱";s:3:"亂";s:3:"亂";s:3:"卵";s:3:"卵";s:3:"欄";s:3:"欄";s:3:"爛";s:3:"爛";s:3:"蘭";s:3:"蘭";s:3:"鸞";s:3:"鸞";s:3:"嵐";s:3:"嵐";s:3:"濫";s:3:"濫";s:3:"藍";s:3:"藍";s:3:"襤";s:3:"襤";s:3:"拉";s:3:"拉";s:3:"臘";s:3:"臘";s:3:"蠟";s:3:"蠟";s:3:"廊";s:3:"廊";s:3:"朗";s:3:"朗";s:3:"浪";s:3:"浪";s:3:"狼";s:3:"狼";s:3:"郎";s:3:"郎";s:3:"來";s:3:"來";s:3:"冷";s:3:"冷";s:3:"勞";s:3:"勞";s:3:"擄";s:3:"擄";s:3:"櫓";s:3:"櫓";s:3:"爐";s:3:"爐";s:3:"盧";s:3:"盧";s:3:"老";s:3:"老";s:3:"蘆";s:3:"蘆";s:3:"虜";s:3:"虜";s:3:"路";s:3:"路";s:3:"露";s:3:"露";s:3:"魯";s:3:"魯";s:3:"鷺";s:3:"鷺";s:3:"碌";s:3:"碌";s:3:"祿";s:3:"祿";s:3:"綠";s:3:"綠";s:3:"菉";s:3:"菉";s:3:"錄";s:3:"錄";s:3:"鹿";s:3:"鹿";s:3:"論";s:3:"論";s:3:"壟";s:3:"壟";s:3:"弄";s:3:"弄";s:3:"籠";s:3:"籠";s:3:"聾";s:3:"聾";s:3:"牢";s:3:"牢";s:3:"磊";s:3:"磊";s:3:"賂";s:3:"賂";s:3:"雷";s:3:"雷";s:3:"壘";s:3:"壘";s:3:"屢";s:3:"屢";s:3:"樓";s:3:"樓";s:3:"淚";s:3:"淚";s:3:"漏";s:3:"漏";s:3:"累";s:3:"累";s:3:"縷";s:3:"縷";s:3:"陋";s:3:"陋";s:3:"勒";s:3:"勒";s:3:"肋";s:3:"肋";s:3:"凜";s:3:"凜";s:3:"凌";s:3:"凌";s:3:"稜";s:3:"稜";s:3:"綾";s:3:"綾";s:3:"菱";s:3:"菱";s:3:"陵";s:3:"陵";s:3:"讀";s:3:"讀";s:3:"拏";s:3:"拏";s:3:"樂";s:3:"樂";s:3:"諾";s:3:"諾";s:3:"丹";s:3:"丹";s:3:"寧";s:3:"寧";s:3:"怒";s:3:"怒";s:3:"率";s:3:"率";s:3:"異";s:3:"異";s:3:"北";s:3:"北";s:3:"磻";s:3:"磻";s:3:"便";s:3:"便";s:3:"復";s:3:"復";s:3:"不";s:3:"不";s:3:"泌";s:3:"泌";s:3:"數";s:3:"數";s:3:"索";s:3:"索";s:3:"參";s:3:"參";s:3:"塞";s:3:"塞";s:3:"省";s:3:"省";s:3:"葉";s:3:"葉";s:3:"說";s:3:"說";s:3:"殺";s:3:"殺";s:3:"辰";s:3:"辰";s:3:"沈";s:3:"沈";s:3:"拾";s:3:"拾";s:3:"若";s:3:"若";s:3:"掠";s:3:"掠";s:3:"略";s:3:"略";s:3:"亮";s:3:"亮";s:3:"兩";s:3:"兩";s:3:"凉";s:3:"凉";s:3:"梁";s:3:"梁";s:3:"糧";s:3:"糧";s:3:"良";s:3:"良";s:3:"諒";s:3:"諒";s:3:"量";s:3:"量";s:3:"勵";s:3:"勵";s:3:"呂";s:3:"呂";s:3:"女";s:3:"女";s:3:"廬";s:3:"廬";s:3:"旅";s:3:"旅";s:3:"濾";s:3:"濾";s:3:"礪";s:3:"礪";s:3:"閭";s:3:"閭";s:3:"驪";s:3:"驪";s:3:"麗";s:3:"麗";s:3:"黎";s:3:"黎";s:3:"力";s:3:"力";s:3:"曆";s:3:"曆";s:3:"歷";s:3:"歷";s:3:"轢";s:3:"轢";s:3:"年";s:3:"年";s:3:"憐";s:3:"憐";s:3:"戀";s:3:"戀";s:3:"撚";s:3:"撚";s:3:"漣";s:3:"漣";s:3:"煉";s:3:"煉";s:3:"璉";s:3:"璉";s:3:"秊";s:3:"秊";s:3:"練";s:3:"練";s:3:"聯";s:3:"聯";s:3:"輦";s:3:"輦";s:3:"蓮";s:3:"蓮";s:3:"連";s:3:"連";s:3:"鍊";s:3:"鍊";s:3:"列";s:3:"列";s:3:"劣";s:3:"劣";s:3:"咽";s:3:"咽";s:3:"烈";s:3:"烈";s:3:"裂";s:3:"裂";s:3:"說";s:3:"說";s:3:"廉";s:3:"廉";s:3:"念";s:3:"念";s:3:"捻";s:3:"捻";s:3:"殮";s:3:"殮";s:3:"簾";s:3:"簾";s:3:"獵";s:3:"獵";s:3:"令";s:3:"令";s:3:"囹";s:3:"囹";s:3:"寧";s:3:"寧";s:3:"嶺";s:3:"嶺";s:3:"怜";s:3:"怜";s:3:"玲";s:3:"玲";s:3:"瑩";s:3:"瑩";s:3:"羚";s:3:"羚";s:3:"聆";s:3:"聆";s:3:"鈴";s:3:"鈴";s:3:"零";s:3:"零";s:3:"靈";s:3:"靈";s:3:"領";s:3:"領";s:3:"例";s:3:"例";s:3:"禮";s:3:"禮";s:3:"醴";s:3:"醴";s:3:"隸";s:3:"隸";s:3:"惡";s:3:"惡";s:3:"了";s:3:"了";s:3:"僚";s:3:"僚";s:3:"寮";s:3:"寮";s:3:"尿";s:3:"尿";s:3:"料";s:3:"料";s:3:"樂";s:3:"樂";s:3:"燎";s:3:"燎";s:3:"療";s:3:"療";s:3:"蓼";s:3:"蓼";s:3:"遼";s:3:"遼";s:3:"龍";s:3:"龍";s:3:"暈";s:3:"暈";s:3:"阮";s:3:"阮";s:3:"劉";s:3:"劉";s:3:"杻";s:3:"杻";s:3:"柳";s:3:"柳";s:3:"流";s:3:"流";s:3:"溜";s:3:"溜";s:3:"琉";s:3:"琉";s:3:"留";s:3:"留";s:3:"硫";s:3:"硫";s:3:"紐";s:3:"紐";s:3:"類";s:3:"類";s:3:"六";s:3:"六";s:3:"戮";s:3:"戮";s:3:"陸";s:3:"陸";s:3:"倫";s:3:"倫";s:3:"崙";s:3:"崙";s:3:"淪";s:3:"淪";s:3:"輪";s:3:"輪";s:3:"律";s:3:"律";s:3:"慄";s:3:"慄";s:3:"栗";s:3:"栗";s:3:"率";s:3:"率";s:3:"隆";s:3:"隆";s:3:"利";s:3:"利";s:3:"吏";s:3:"吏";s:3:"履";s:3:"履";s:3:"易";s:3:"易";s:3:"李";s:3:"李";s:3:"梨";s:3:"梨";s:3:"泥";s:3:"泥";s:3:"理";s:3:"理";s:3:"痢";s:3:"痢";s:3:"罹";s:3:"罹";s:3:"裏";s:3:"裏";s:3:"裡";s:3:"裡";s:3:"里";s:3:"里";s:3:"離";s:3:"離";s:3:"匿";s:3:"匿";s:3:"溺";s:3:"溺";s:3:"吝";s:3:"吝";s:3:"燐";s:3:"燐";s:3:"璘";s:3:"璘";s:3:"藺";s:3:"藺";s:3:"隣";s:3:"隣";s:3:"鱗";s:3:"鱗";s:3:"麟";s:3:"麟";s:3:"林";s:3:"林";s:3:"淋";s:3:"淋";s:3:"臨";s:3:"臨";s:3:"立";s:3:"立";s:3:"笠";s:3:"笠";s:3:"粒";s:3:"粒";s:3:"狀";s:3:"狀";s:3:"炙";s:3:"炙";s:3:"識";s:3:"識";s:3:"什";s:3:"什";s:3:"茶";s:3:"茶";s:3:"刺";s:3:"刺";s:3:"切";s:3:"切";s:3:"度";s:3:"度";s:3:"拓";s:3:"拓";s:3:"糖";s:3:"糖";s:3:"宅";s:3:"宅";s:3:"洞";s:3:"洞";s:3:"暴";s:3:"暴";s:3:"輻";s:3:"輻";s:3:"行";s:3:"行";s:3:"降";s:3:"降";s:3:"見";s:3:"見";s:3:"廓";s:3:"廓";s:3:"兀";s:3:"兀";s:3:"嗀";s:3:"嗀";s:3:"塚";s:3:"塚";s:3:"晴";s:3:"晴";s:3:"凞";s:3:"凞";s:3:"猪";s:3:"猪";s:3:"益";s:3:"益";s:3:"礼";s:3:"礼";s:3:"神";s:3:"神";s:3:"祥";s:3:"祥";s:3:"福";s:3:"福";s:3:"靖";s:3:"靖";s:3:"精";s:3:"精";s:3:"羽";s:3:"羽";s:3:"蘒";s:3:"蘒";s:3:"諸";s:3:"諸";s:3:"逸";s:3:"逸";s:3:"都";s:3:"都";s:3:"飯";s:3:"飯";s:3:"飼";s:3:"飼";s:3:"館";s:3:"館";s:3:"鶴";s:3:"鶴";s:3:"侮";s:3:"侮";s:3:"僧";s:3:"僧";s:3:"免";s:3:"免";s:3:"勉";s:3:"勉";s:3:"勤";s:3:"勤";s:3:"卑";s:3:"卑";s:3:"喝";s:3:"喝";s:3:"嘆";s:3:"嘆";s:3:"器";s:3:"器";s:3:"塀";s:3:"塀";s:3:"墨";s:3:"墨";s:3:"層";s:3:"層";s:3:"屮";s:3:"屮";s:3:"悔";s:3:"悔";s:3:"慨";s:3:"慨";s:3:"憎";s:3:"憎";s:3:"懲";s:3:"懲";s:3:"敏";s:3:"敏";s:3:"既";s:3:"既";s:3:"暑";s:3:"暑";s:3:"梅";s:3:"梅";s:3:"海";s:3:"海";s:3:"渚";s:3:"渚";s:3:"漢";s:3:"漢";s:3:"煮";s:3:"煮";s:3:"爫";s:3:"爫";s:3:"琢";s:3:"琢";s:3:"碑";s:3:"碑";s:3:"社";s:3:"社";s:3:"祉";s:3:"祉";s:3:"祈";s:3:"祈";s:3:"祐";s:3:"祐";s:3:"祖";s:3:"祖";s:3:"祝";s:3:"祝";s:3:"禍";s:3:"禍";s:3:"禎";s:3:"禎";s:3:"穀";s:3:"穀";s:3:"突";s:3:"突";s:3:"節";s:3:"節";s:3:"練";s:3:"練";s:3:"縉";s:3:"縉";s:3:"繁";s:3:"繁";s:3:"署";s:3:"署";s:3:"者";s:3:"者";s:3:"臭";s:3:"臭";s:3:"艹";s:3:"艹";s:3:"艹";s:3:"艹";s:3:"著";s:3:"著";s:3:"褐";s:3:"褐";s:3:"視";s:3:"視";s:3:"謁";s:3:"謁";s:3:"謹";s:3:"謹";s:3:"賓";s:3:"賓";s:3:"贈";s:3:"贈";s:3:"辶";s:3:"辶";s:3:"逸";s:3:"逸";s:3:"難";s:3:"難";s:3:"響";s:3:"響";s:3:"頻";s:3:"頻";s:3:"並";s:3:"並";s:3:"况";s:3:"况";s:3:"全";s:3:"全";s:3:"侀";s:3:"侀";s:3:"充";s:3:"充";s:3:"冀";s:3:"冀";s:3:"勇";s:3:"勇";s:3:"勺";s:3:"勺";s:3:"喝";s:3:"喝";s:3:"啕";s:3:"啕";s:3:"喙";s:3:"喙";s:3:"嗢";s:3:"嗢";s:3:"塚";s:3:"塚";s:3:"墳";s:3:"墳";s:3:"奄";s:3:"奄";s:3:"奔";s:3:"奔";s:3:"婢";s:3:"婢";s:3:"嬨";s:3:"嬨";s:3:"廒";s:3:"廒";s:3:"廙";s:3:"廙";s:3:"彩";s:3:"彩";s:3:"徭";s:3:"徭";s:3:"惘";s:3:"惘";s:3:"慎";s:3:"慎";s:3:"愈";s:3:"愈";s:3:"憎";s:3:"憎";s:3:"慠";s:3:"慠";s:3:"懲";s:3:"懲";s:3:"戴";s:3:"戴";s:3:"揄";s:3:"揄";s:3:"搜";s:3:"搜";s:3:"摒";s:3:"摒";s:3:"敖";s:3:"敖";s:3:"晴";s:3:"晴";s:3:"朗";s:3:"朗";s:3:"望";s:3:"望";s:3:"杖";s:3:"杖";s:3:"歹";s:3:"歹";s:3:"殺";s:3:"殺";s:3:"流";s:3:"流";s:3:"滛";s:3:"滛";s:3:"滋";s:3:"滋";s:3:"漢";s:3:"漢";s:3:"瀞";s:3:"瀞";s:3:"煮";s:3:"煮";s:3:"瞧";s:3:"瞧";s:3:"爵";s:3:"爵";s:3:"犯";s:3:"犯";s:3:"猪";s:3:"猪";s:3:"瑱";s:3:"瑱";s:3:"甆";s:3:"甆";s:3:"画";s:3:"画";s:3:"瘝";s:3:"瘝";s:3:"瘟";s:3:"瘟";s:3:"益";s:3:"益";s:3:"盛";s:3:"盛";s:3:"直";s:3:"直";s:3:"睊";s:3:"睊";s:3:"着";s:3:"着";s:3:"磌";s:3:"磌";s:3:"窱";s:3:"窱";s:3:"節";s:3:"節";s:3:"类";s:3:"类";s:3:"絛";s:3:"絛";s:3:"練";s:3:"練";s:3:"缾";s:3:"缾";s:3:"者";s:3:"者";s:3:"荒";s:3:"荒";s:3:"華";s:3:"華";s:3:"蝹";s:3:"蝹";s:3:"襁";s:3:"襁";s:3:"覆";s:3:"覆";s:3:"視";s:3:"視";s:3:"調";s:3:"調";s:3:"諸";s:3:"諸";s:3:"請";s:3:"請";s:3:"謁";s:3:"謁";s:3:"諾";s:3:"諾";s:3:"諭";s:3:"諭";s:3:"謹";s:3:"謹";s:3:"變";s:3:"變";s:3:"贈";s:3:"贈";s:3:"輸";s:3:"輸";s:3:"遲";s:3:"遲";s:3:"醙";s:3:"醙";s:3:"鉶";s:3:"鉶";s:3:"陼";s:3:"陼";s:3:"難";s:3:"難";s:3:"靖";s:3:"靖";s:3:"韛";s:3:"韛";s:3:"響";s:3:"響";s:3:"頋";s:3:"頋";s:3:"頻";s:3:"頻";s:3:"鬒";s:3:"鬒";s:3:"龜";s:3:"龜";s:3:"𢡊";s:4:"𢡊";s:3:"𢡄";s:4:"𢡄";s:3:"𣏕";s:4:"𣏕";s:3:"㮝";s:3:"㮝";s:3:"䀘";s:3:"䀘";s:3:"䀹";s:3:"䀹";s:3:"𥉉";s:4:"𥉉";s:3:"𥳐";s:4:"𥳐";s:3:"𧻓";s:4:"𧻓";s:3:"齃";s:3:"齃";s:3:"龎";s:3:"龎";s:3:"ﬀ";s:2:"ff";s:3:"ﬁ";s:2:"fi";s:3:"ﬂ";s:2:"fl";s:3:"ﬃ";s:3:"ffi";s:3:"ﬄ";s:3:"ffl";s:3:"ﬅ";s:2:"st";s:3:"ﬆ";s:2:"st";s:3:"ﬓ";s:4:"մն";s:3:"ﬔ";s:4:"մե";s:3:"ﬕ";s:4:"մի";s:3:"ﬖ";s:4:"վն";s:3:"ﬗ";s:4:"մխ";s:3:"יִ";s:4:"יִ";s:3:"ײַ";s:4:"ײַ";s:3:"ﬠ";s:2:"ע";s:3:"ﬡ";s:2:"א";s:3:"ﬢ";s:2:"ד";s:3:"ﬣ";s:2:"ה";s:3:"ﬤ";s:2:"כ";s:3:"ﬥ";s:2:"ל";s:3:"ﬦ";s:2:"ם";s:3:"ﬧ";s:2:"ר";s:3:"ﬨ";s:2:"ת";s:3:"﬩";s:1:"+";s:3:"שׁ";s:4:"שׁ";s:3:"שׂ";s:4:"שׂ";s:3:"שּׁ";s:6:"שּׁ";s:3:"שּׂ";s:6:"שּׂ";s:3:"אַ";s:4:"אַ";s:3:"אָ";s:4:"אָ";s:3:"אּ";s:4:"אּ";s:3:"בּ";s:4:"בּ";s:3:"גּ";s:4:"גּ";s:3:"דּ";s:4:"דּ";s:3:"הּ";s:4:"הּ";s:3:"וּ";s:4:"וּ";s:3:"זּ";s:4:"זּ";s:3:"טּ";s:4:"טּ";s:3:"יּ";s:4:"יּ";s:3:"ךּ";s:4:"ךּ";s:3:"כּ";s:4:"כּ";s:3:"לּ";s:4:"לּ";s:3:"מּ";s:4:"מּ";s:3:"נּ";s:4:"נּ";s:3:"סּ";s:4:"סּ";s:3:"ףּ";s:4:"ףּ";s:3:"פּ";s:4:"פּ";s:3:"צּ";s:4:"צּ";s:3:"קּ";s:4:"קּ";s:3:"רּ";s:4:"רּ";s:3:"שּ";s:4:"שּ";s:3:"תּ";s:4:"תּ";s:3:"וֹ";s:4:"וֹ";s:3:"בֿ";s:4:"בֿ";s:3:"כֿ";s:4:"כֿ";s:3:"פֿ";s:4:"פֿ";s:3:"ﭏ";s:4:"אל";s:3:"ﭐ";s:2:"ٱ";s:3:"ﭑ";s:2:"ٱ";s:3:"ﭒ";s:2:"ٻ";s:3:"ﭓ";s:2:"ٻ";s:3:"ﭔ";s:2:"ٻ";s:3:"ﭕ";s:2:"ٻ";s:3:"ﭖ";s:2:"پ";s:3:"ﭗ";s:2:"پ";s:3:"ﭘ";s:2:"پ";s:3:"ﭙ";s:2:"پ";s:3:"ﭚ";s:2:"ڀ";s:3:"ﭛ";s:2:"ڀ";s:3:"ﭜ";s:2:"ڀ";s:3:"ﭝ";s:2:"ڀ";s:3:"ﭞ";s:2:"ٺ";s:3:"ﭟ";s:2:"ٺ";s:3:"ﭠ";s:2:"ٺ";s:3:"ﭡ";s:2:"ٺ";s:3:"ﭢ";s:2:"ٿ";s:3:"ﭣ";s:2:"ٿ";s:3:"ﭤ";s:2:"ٿ";s:3:"ﭥ";s:2:"ٿ";s:3:"ﭦ";s:2:"ٹ";s:3:"ﭧ";s:2:"ٹ";s:3:"ﭨ";s:2:"ٹ";s:3:"ﭩ";s:2:"ٹ";s:3:"ﭪ";s:2:"ڤ";s:3:"ﭫ";s:2:"ڤ";s:3:"ﭬ";s:2:"ڤ";s:3:"ﭭ";s:2:"ڤ";s:3:"ﭮ";s:2:"ڦ";s:3:"ﭯ";s:2:"ڦ";s:3:"ﭰ";s:2:"ڦ";s:3:"ﭱ";s:2:"ڦ";s:3:"ﭲ";s:2:"ڄ";s:3:"ﭳ";s:2:"ڄ";s:3:"ﭴ";s:2:"ڄ";s:3:"ﭵ";s:2:"ڄ";s:3:"ﭶ";s:2:"ڃ";s:3:"ﭷ";s:2:"ڃ";s:3:"ﭸ";s:2:"ڃ";s:3:"ﭹ";s:2:"ڃ";s:3:"ﭺ";s:2:"چ";s:3:"ﭻ";s:2:"چ";s:3:"ﭼ";s:2:"چ";s:3:"ﭽ";s:2:"چ";s:3:"ﭾ";s:2:"ڇ";s:3:"ﭿ";s:2:"ڇ";s:3:"ﮀ";s:2:"ڇ";s:3:"ﮁ";s:2:"ڇ";s:3:"ﮂ";s:2:"ڍ";s:3:"ﮃ";s:2:"ڍ";s:3:"ﮄ";s:2:"ڌ";s:3:"ﮅ";s:2:"ڌ";s:3:"ﮆ";s:2:"ڎ";s:3:"ﮇ";s:2:"ڎ";s:3:"ﮈ";s:2:"ڈ";s:3:"ﮉ";s:2:"ڈ";s:3:"ﮊ";s:2:"ژ";s:3:"ﮋ";s:2:"ژ";s:3:"ﮌ";s:2:"ڑ";s:3:"ﮍ";s:2:"ڑ";s:3:"ﮎ";s:2:"ک";s:3:"ﮏ";s:2:"ک";s:3:"ﮐ";s:2:"ک";s:3:"ﮑ";s:2:"ک";s:3:"ﮒ";s:2:"گ";s:3:"ﮓ";s:2:"گ";s:3:"ﮔ";s:2:"گ";s:3:"ﮕ";s:2:"گ";s:3:"ﮖ";s:2:"ڳ";s:3:"ﮗ";s:2:"ڳ";s:3:"ﮘ";s:2:"ڳ";s:3:"ﮙ";s:2:"ڳ";s:3:"ﮚ";s:2:"ڱ";s:3:"ﮛ";s:2:"ڱ";s:3:"ﮜ";s:2:"ڱ";s:3:"ﮝ";s:2:"ڱ";s:3:"ﮞ";s:2:"ں";s:3:"ﮟ";s:2:"ں";s:3:"ﮠ";s:2:"ڻ";s:3:"ﮡ";s:2:"ڻ";s:3:"ﮢ";s:2:"ڻ";s:3:"ﮣ";s:2:"ڻ";s:3:"ﮤ";s:4:"ۀ";s:3:"ﮥ";s:4:"ۀ";s:3:"ﮦ";s:2:"ہ";s:3:"ﮧ";s:2:"ہ";s:3:"ﮨ";s:2:"ہ";s:3:"ﮩ";s:2:"ہ";s:3:"ﮪ";s:2:"ھ";s:3:"ﮫ";s:2:"ھ";s:3:"ﮬ";s:2:"ھ";s:3:"ﮭ";s:2:"ھ";s:3:"ﮮ";s:2:"ے";s:3:"ﮯ";s:2:"ے";s:3:"ﮰ";s:4:"ۓ";s:3:"ﮱ";s:4:"ۓ";s:3:"ﯓ";s:2:"ڭ";s:3:"ﯔ";s:2:"ڭ";s:3:"ﯕ";s:2:"ڭ";s:3:"ﯖ";s:2:"ڭ";s:3:"ﯗ";s:2:"ۇ";s:3:"ﯘ";s:2:"ۇ";s:3:"ﯙ";s:2:"ۆ";s:3:"ﯚ";s:2:"ۆ";s:3:"ﯛ";s:2:"ۈ";s:3:"ﯜ";s:2:"ۈ";s:3:"ﯝ";s:4:"ۇٴ";s:3:"ﯞ";s:2:"ۋ";s:3:"ﯟ";s:2:"ۋ";s:3:"ﯠ";s:2:"ۅ";s:3:"ﯡ";s:2:"ۅ";s:3:"ﯢ";s:2:"ۉ";s:3:"ﯣ";s:2:"ۉ";s:3:"ﯤ";s:2:"ې";s:3:"ﯥ";s:2:"ې";s:3:"ﯦ";s:2:"ې";s:3:"ﯧ";s:2:"ې";s:3:"ﯨ";s:2:"ى";s:3:"ﯩ";s:2:"ى";s:3:"ﯪ";s:6:"ئا";s:3:"ﯫ";s:6:"ئا";s:3:"ﯬ";s:6:"ئە";s:3:"ﯭ";s:6:"ئە";s:3:"ﯮ";s:6:"ئو";s:3:"ﯯ";s:6:"ئو";s:3:"ﯰ";s:6:"ئۇ";s:3:"ﯱ";s:6:"ئۇ";s:3:"ﯲ";s:6:"ئۆ";s:3:"ﯳ";s:6:"ئۆ";s:3:"ﯴ";s:6:"ئۈ";s:3:"ﯵ";s:6:"ئۈ";s:3:"ﯶ";s:6:"ئې";s:3:"ﯷ";s:6:"ئې";s:3:"ﯸ";s:6:"ئې";s:3:"ﯹ";s:6:"ئى";s:3:"ﯺ";s:6:"ئى";s:3:"ﯻ";s:6:"ئى";s:3:"ﯼ";s:2:"ی";s:3:"ﯽ";s:2:"ی";s:3:"ﯾ";s:2:"ی";s:3:"ﯿ";s:2:"ی";s:3:"ﰀ";s:6:"ئج";s:3:"ﰁ";s:6:"ئح";s:3:"ﰂ";s:6:"ئم";s:3:"ﰃ";s:6:"ئى";s:3:"ﰄ";s:6:"ئي";s:3:"ﰅ";s:4:"بج";s:3:"ﰆ";s:4:"بح";s:3:"ﰇ";s:4:"بخ";s:3:"ﰈ";s:4:"بم";s:3:"ﰉ";s:4:"بى";s:3:"ﰊ";s:4:"بي";s:3:"ﰋ";s:4:"تج";s:3:"ﰌ";s:4:"تح";s:3:"ﰍ";s:4:"تخ";s:3:"ﰎ";s:4:"تم";s:3:"ﰏ";s:4:"تى";s:3:"ﰐ";s:4:"تي";s:3:"ﰑ";s:4:"ثج";s:3:"ﰒ";s:4:"ثم";s:3:"ﰓ";s:4:"ثى";s:3:"ﰔ";s:4:"ثي";s:3:"ﰕ";s:4:"جح";s:3:"ﰖ";s:4:"جم";s:3:"ﰗ";s:4:"حج";s:3:"ﰘ";s:4:"حم";s:3:"ﰙ";s:4:"خج";s:3:"ﰚ";s:4:"خح";s:3:"ﰛ";s:4:"خم";s:3:"ﰜ";s:4:"سج";s:3:"ﰝ";s:4:"سح";s:3:"ﰞ";s:4:"سخ";s:3:"ﰟ";s:4:"سم";s:3:"ﰠ";s:4:"صح";s:3:"ﰡ";s:4:"صم";s:3:"ﰢ";s:4:"ضج";s:3:"ﰣ";s:4:"ضح";s:3:"ﰤ";s:4:"ضخ";s:3:"ﰥ";s:4:"ضم";s:3:"ﰦ";s:4:"طح";s:3:"ﰧ";s:4:"طم";s:3:"ﰨ";s:4:"ظم";s:3:"ﰩ";s:4:"عج";s:3:"ﰪ";s:4:"عم";s:3:"ﰫ";s:4:"غج";s:3:"ﰬ";s:4:"غم";s:3:"ﰭ";s:4:"فج";s:3:"ﰮ";s:4:"فح";s:3:"ﰯ";s:4:"فخ";s:3:"ﰰ";s:4:"فم";s:3:"ﰱ";s:4:"فى";s:3:"ﰲ";s:4:"في";s:3:"ﰳ";s:4:"قح";s:3:"ﰴ";s:4:"قم";s:3:"ﰵ";s:4:"قى";s:3:"ﰶ";s:4:"قي";s:3:"ﰷ";s:4:"كا";s:3:"ﰸ";s:4:"كج";s:3:"ﰹ";s:4:"كح";s:3:"ﰺ";s:4:"كخ";s:3:"ﰻ";s:4:"كل";s:3:"ﰼ";s:4:"كم";s:3:"ﰽ";s:4:"كى";s:3:"ﰾ";s:4:"كي";s:3:"ﰿ";s:4:"لج";s:3:"ﱀ";s:4:"لح";s:3:"ﱁ";s:4:"لخ";s:3:"ﱂ";s:4:"لم";s:3:"ﱃ";s:4:"لى";s:3:"ﱄ";s:4:"لي";s:3:"ﱅ";s:4:"مج";s:3:"ﱆ";s:4:"مح";s:3:"ﱇ";s:4:"مخ";s:3:"ﱈ";s:4:"مم";s:3:"ﱉ";s:4:"مى";s:3:"ﱊ";s:4:"مي";s:3:"ﱋ";s:4:"نج";s:3:"ﱌ";s:4:"نح";s:3:"ﱍ";s:4:"نخ";s:3:"ﱎ";s:4:"نم";s:3:"ﱏ";s:4:"نى";s:3:"ﱐ";s:4:"ني";s:3:"ﱑ";s:4:"هج";s:3:"ﱒ";s:4:"هم";s:3:"ﱓ";s:4:"هى";s:3:"ﱔ";s:4:"هي";s:3:"ﱕ";s:4:"يج";s:3:"ﱖ";s:4:"يح";s:3:"ﱗ";s:4:"يخ";s:3:"ﱘ";s:4:"يم";s:3:"ﱙ";s:4:"يى";s:3:"ﱚ";s:4:"يي";s:3:"ﱛ";s:4:"ذٰ";s:3:"ﱜ";s:4:"رٰ";s:3:"ﱝ";s:4:"ىٰ";s:3:"ﱞ";s:5:" ٌّ";s:3:"ﱟ";s:5:" ٍّ";s:3:"ﱠ";s:5:" َّ";s:3:"ﱡ";s:5:" ُّ";s:3:"ﱢ";s:5:" ِّ";s:3:"ﱣ";s:5:" ّٰ";s:3:"ﱤ";s:6:"ئر";s:3:"ﱥ";s:6:"ئز";s:3:"ﱦ";s:6:"ئم";s:3:"ﱧ";s:6:"ئن";s:3:"ﱨ";s:6:"ئى";s:3:"ﱩ";s:6:"ئي";s:3:"ﱪ";s:4:"بر";s:3:"ﱫ";s:4:"بز";s:3:"ﱬ";s:4:"بم";s:3:"ﱭ";s:4:"بن";s:3:"ﱮ";s:4:"بى";s:3:"ﱯ";s:4:"بي";s:3:"ﱰ";s:4:"تر";s:3:"ﱱ";s:4:"تز";s:3:"ﱲ";s:4:"تم";s:3:"ﱳ";s:4:"تن";s:3:"ﱴ";s:4:"تى";s:3:"ﱵ";s:4:"تي";s:3:"ﱶ";s:4:"ثر";s:3:"ﱷ";s:4:"ثز";s:3:"ﱸ";s:4:"ثم";s:3:"ﱹ";s:4:"ثن";s:3:"ﱺ";s:4:"ثى";s:3:"ﱻ";s:4:"ثي";s:3:"ﱼ";s:4:"فى";s:3:"ﱽ";s:4:"في";s:3:"ﱾ";s:4:"قى";s:3:"ﱿ";s:4:"قي";s:3:"ﲀ";s:4:"كا";s:3:"ﲁ";s:4:"كل";s:3:"ﲂ";s:4:"كم";s:3:"ﲃ";s:4:"كى";s:3:"ﲄ";s:4:"كي";s:3:"ﲅ";s:4:"لم";s:3:"ﲆ";s:4:"لى";s:3:"ﲇ";s:4:"لي";s:3:"ﲈ";s:4:"ما";s:3:"ﲉ";s:4:"مم";s:3:"ﲊ";s:4:"نر";s:3:"ﲋ";s:4:"نز";s:3:"ﲌ";s:4:"نم";s:3:"ﲍ";s:4:"نن";s:3:"ﲎ";s:4:"نى";s:3:"ﲏ";s:4:"ني";s:3:"ﲐ";s:4:"ىٰ";s:3:"ﲑ";s:4:"ير";s:3:"ﲒ";s:4:"يز";s:3:"ﲓ";s:4:"يم";s:3:"ﲔ";s:4:"ين";s:3:"ﲕ";s:4:"يى";s:3:"ﲖ";s:4:"يي";s:3:"ﲗ";s:6:"ئج";s:3:"ﲘ";s:6:"ئح";s:3:"ﲙ";s:6:"ئخ";s:3:"ﲚ";s:6:"ئم";s:3:"ﲛ";s:6:"ئه";s:3:"ﲜ";s:4:"بج";s:3:"ﲝ";s:4:"بح";s:3:"ﲞ";s:4:"بخ";s:3:"ﲟ";s:4:"بم";s:3:"ﲠ";s:4:"به";s:3:"ﲡ";s:4:"تج";s:3:"ﲢ";s:4:"تح";s:3:"ﲣ";s:4:"تخ";s:3:"ﲤ";s:4:"تم";s:3:"ﲥ";s:4:"ته";s:3:"ﲦ";s:4:"ثم";s:3:"ﲧ";s:4:"جح";s:3:"ﲨ";s:4:"جم";s:3:"ﲩ";s:4:"حج";s:3:"ﲪ";s:4:"حم";s:3:"ﲫ";s:4:"خج";s:3:"ﲬ";s:4:"خم";s:3:"ﲭ";s:4:"سج";s:3:"ﲮ";s:4:"سح";s:3:"ﲯ";s:4:"سخ";s:3:"ﲰ";s:4:"سم";s:3:"ﲱ";s:4:"صح";s:3:"ﲲ";s:4:"صخ";s:3:"ﲳ";s:4:"صم";s:3:"ﲴ";s:4:"ضج";s:3:"ﲵ";s:4:"ضح";s:3:"ﲶ";s:4:"ضخ";s:3:"ﲷ";s:4:"ضم";s:3:"ﲸ";s:4:"طح";s:3:"ﲹ";s:4:"ظم";s:3:"ﲺ";s:4:"عج";s:3:"ﲻ";s:4:"عم";s:3:"ﲼ";s:4:"غج";s:3:"ﲽ";s:4:"غم";s:3:"ﲾ";s:4:"فج";s:3:"ﲿ";s:4:"فح";s:3:"ﳀ";s:4:"فخ";s:3:"ﳁ";s:4:"فم";s:3:"ﳂ";s:4:"قح";s:3:"ﳃ";s:4:"قم";s:3:"ﳄ";s:4:"كج";s:3:"ﳅ";s:4:"كح";s:3:"ﳆ";s:4:"كخ";s:3:"ﳇ";s:4:"كل";s:3:"ﳈ";s:4:"كم";s:3:"ﳉ";s:4:"لج";s:3:"ﳊ";s:4:"لح";s:3:"ﳋ";s:4:"لخ";s:3:"ﳌ";s:4:"لم";s:3:"ﳍ";s:4:"له";s:3:"ﳎ";s:4:"مج";s:3:"ﳏ";s:4:"مح";s:3:"ﳐ";s:4:"مخ";s:3:"ﳑ";s:4:"مم";s:3:"ﳒ";s:4:"نج";s:3:"ﳓ";s:4:"نح";s:3:"ﳔ";s:4:"نخ";s:3:"ﳕ";s:4:"نم";s:3:"ﳖ";s:4:"نه";s:3:"ﳗ";s:4:"هج";s:3:"ﳘ";s:4:"هم";s:3:"ﳙ";s:4:"هٰ";s:3:"ﳚ";s:4:"يج";s:3:"ﳛ";s:4:"يح";s:3:"ﳜ";s:4:"يخ";s:3:"ﳝ";s:4:"يم";s:3:"ﳞ";s:4:"يه";s:3:"ﳟ";s:6:"ئم";s:3:"ﳠ";s:6:"ئه";s:3:"ﳡ";s:4:"بم";s:3:"ﳢ";s:4:"به";s:3:"ﳣ";s:4:"تم";s:3:"ﳤ";s:4:"ته";s:3:"ﳥ";s:4:"ثم";s:3:"ﳦ";s:4:"ثه";s:3:"ﳧ";s:4:"سم";s:3:"ﳨ";s:4:"سه";s:3:"ﳩ";s:4:"شم";s:3:"ﳪ";s:4:"شه";s:3:"ﳫ";s:4:"كل";s:3:"ﳬ";s:4:"كم";s:3:"ﳭ";s:4:"لم";s:3:"ﳮ";s:4:"نم";s:3:"ﳯ";s:4:"نه";s:3:"ﳰ";s:4:"يم";s:3:"ﳱ";s:4:"يه";s:3:"ﳲ";s:6:"ـَّ";s:3:"ﳳ";s:6:"ـُّ";s:3:"ﳴ";s:6:"ـِّ";s:3:"ﳵ";s:4:"طى";s:3:"ﳶ";s:4:"طي";s:3:"ﳷ";s:4:"عى";s:3:"ﳸ";s:4:"عي";s:3:"ﳹ";s:4:"غى";s:3:"ﳺ";s:4:"غي";s:3:"ﳻ";s:4:"سى";s:3:"ﳼ";s:4:"سي";s:3:"ﳽ";s:4:"شى";s:3:"ﳾ";s:4:"شي";s:3:"ﳿ";s:4:"حى";s:3:"ﴀ";s:4:"حي";s:3:"ﴁ";s:4:"جى";s:3:"ﴂ";s:4:"جي";s:3:"ﴃ";s:4:"خى";s:3:"ﴄ";s:4:"خي";s:3:"ﴅ";s:4:"صى";s:3:"ﴆ";s:4:"صي";s:3:"ﴇ";s:4:"ضى";s:3:"ﴈ";s:4:"ضي";s:3:"ﴉ";s:4:"شج";s:3:"ﴊ";s:4:"شح";s:3:"ﴋ";s:4:"شخ";s:3:"ﴌ";s:4:"شم";s:3:"ﴍ";s:4:"شر";s:3:"ﴎ";s:4:"سر";s:3:"ﴏ";s:4:"صر";s:3:"ﴐ";s:4:"ضر";s:3:"ﴑ";s:4:"طى";s:3:"ﴒ";s:4:"طي";s:3:"ﴓ";s:4:"عى";s:3:"ﴔ";s:4:"عي";s:3:"ﴕ";s:4:"غى";s:3:"ﴖ";s:4:"غي";s:3:"ﴗ";s:4:"سى";s:3:"ﴘ";s:4:"سي";s:3:"ﴙ";s:4:"شى";s:3:"ﴚ";s:4:"شي";s:3:"ﴛ";s:4:"حى";s:3:"ﴜ";s:4:"حي";s:3:"ﴝ";s:4:"جى";s:3:"ﴞ";s:4:"جي";s:3:"ﴟ";s:4:"خى";s:3:"ﴠ";s:4:"خي";s:3:"ﴡ";s:4:"صى";s:3:"ﴢ";s:4:"صي";s:3:"ﴣ";s:4:"ضى";s:3:"ﴤ";s:4:"ضي";s:3:"ﴥ";s:4:"شج";s:3:"ﴦ";s:4:"شح";s:3:"ﴧ";s:4:"شخ";s:3:"ﴨ";s:4:"شم";s:3:"ﴩ";s:4:"شر";s:3:"ﴪ";s:4:"سر";s:3:"ﴫ";s:4:"صر";s:3:"ﴬ";s:4:"ضر";s:3:"ﴭ";s:4:"شج";s:3:"ﴮ";s:4:"شح";s:3:"ﴯ";s:4:"شخ";s:3:"ﴰ";s:4:"شم";s:3:"ﴱ";s:4:"سه";s:3:"ﴲ";s:4:"شه";s:3:"ﴳ";s:4:"طم";s:3:"ﴴ";s:4:"سج";s:3:"ﴵ";s:4:"سح";s:3:"ﴶ";s:4:"سخ";s:3:"ﴷ";s:4:"شج";s:3:"ﴸ";s:4:"شح";s:3:"ﴹ";s:4:"شخ";s:3:"ﴺ";s:4:"طم";s:3:"ﴻ";s:4:"ظم";s:3:"ﴼ";s:4:"اً";s:3:"ﴽ";s:4:"اً";s:3:"ﵐ";s:6:"تجم";s:3:"ﵑ";s:6:"تحج";s:3:"ﵒ";s:6:"تحج";s:3:"ﵓ";s:6:"تحم";s:3:"ﵔ";s:6:"تخم";s:3:"ﵕ";s:6:"تمج";s:3:"ﵖ";s:6:"تمح";s:3:"ﵗ";s:6:"تمخ";s:3:"ﵘ";s:6:"جمح";s:3:"ﵙ";s:6:"جمح";s:3:"ﵚ";s:6:"حمي";s:3:"ﵛ";s:6:"حمى";s:3:"ﵜ";s:6:"سحج";s:3:"ﵝ";s:6:"سجح";s:3:"ﵞ";s:6:"سجى";s:3:"ﵟ";s:6:"سمح";s:3:"ﵠ";s:6:"سمح";s:3:"ﵡ";s:6:"سمج";s:3:"ﵢ";s:6:"سمم";s:3:"ﵣ";s:6:"سمم";s:3:"ﵤ";s:6:"صحح";s:3:"ﵥ";s:6:"صحح";s:3:"ﵦ";s:6:"صمم";s:3:"ﵧ";s:6:"شحم";s:3:"ﵨ";s:6:"شحم";s:3:"ﵩ";s:6:"شجي";s:3:"ﵪ";s:6:"شمخ";s:3:"ﵫ";s:6:"شمخ";s:3:"ﵬ";s:6:"شمم";s:3:"ﵭ";s:6:"شمم";s:3:"ﵮ";s:6:"ضحى";s:3:"ﵯ";s:6:"ضخم";s:3:"ﵰ";s:6:"ضخم";s:3:"ﵱ";s:6:"طمح";s:3:"ﵲ";s:6:"طمح";s:3:"ﵳ";s:6:"طمم";s:3:"ﵴ";s:6:"طمي";s:3:"ﵵ";s:6:"عجم";s:3:"ﵶ";s:6:"عمم";s:3:"ﵷ";s:6:"عمم";s:3:"ﵸ";s:6:"عمى";s:3:"ﵹ";s:6:"غمم";s:3:"ﵺ";s:6:"غمي";s:3:"ﵻ";s:6:"غمى";s:3:"ﵼ";s:6:"فخم";s:3:"ﵽ";s:6:"فخم";s:3:"ﵾ";s:6:"قمح";s:3:"ﵿ";s:6:"قمم";s:3:"ﶀ";s:6:"لحم";s:3:"ﶁ";s:6:"لحي";s:3:"ﶂ";s:6:"لحى";s:3:"ﶃ";s:6:"لجج";s:3:"ﶄ";s:6:"لجج";s:3:"ﶅ";s:6:"لخم";s:3:"ﶆ";s:6:"لخم";s:3:"ﶇ";s:6:"لمح";s:3:"ﶈ";s:6:"لمح";s:3:"ﶉ";s:6:"محج";s:3:"ﶊ";s:6:"محم";s:3:"ﶋ";s:6:"محي";s:3:"ﶌ";s:6:"مجح";s:3:"ﶍ";s:6:"مجم";s:3:"ﶎ";s:6:"مخج";s:3:"ﶏ";s:6:"مخم";s:3:"ﶒ";s:6:"مجخ";s:3:"ﶓ";s:6:"همج";s:3:"ﶔ";s:6:"همم";s:3:"ﶕ";s:6:"نحم";s:3:"ﶖ";s:6:"نحى";s:3:"ﶗ";s:6:"نجم";s:3:"ﶘ";s:6:"نجم";s:3:"ﶙ";s:6:"نجى";s:3:"ﶚ";s:6:"نمي";s:3:"ﶛ";s:6:"نمى";s:3:"ﶜ";s:6:"يمم";s:3:"ﶝ";s:6:"يمم";s:3:"ﶞ";s:6:"بخي";s:3:"ﶟ";s:6:"تجي";s:3:"ﶠ";s:6:"تجى";s:3:"ﶡ";s:6:"تخي";s:3:"ﶢ";s:6:"تخى";s:3:"ﶣ";s:6:"تمي";s:3:"ﶤ";s:6:"تمى";s:3:"ﶥ";s:6:"جمي";s:3:"ﶦ";s:6:"جحى";s:3:"ﶧ";s:6:"جمى";s:3:"ﶨ";s:6:"سخى";s:3:"ﶩ";s:6:"صحي";s:3:"ﶪ";s:6:"شحي";s:3:"ﶫ";s:6:"ضحي";s:3:"ﶬ";s:6:"لجي";s:3:"ﶭ";s:6:"لمي";s:3:"ﶮ";s:6:"يحي";s:3:"ﶯ";s:6:"يجي";s:3:"ﶰ";s:6:"يمي";s:3:"ﶱ";s:6:"ممي";s:3:"ﶲ";s:6:"قمي";s:3:"ﶳ";s:6:"نحي";s:3:"ﶴ";s:6:"قمح";s:3:"ﶵ";s:6:"لحم";s:3:"ﶶ";s:6:"عمي";s:3:"ﶷ";s:6:"كمي";s:3:"ﶸ";s:6:"نجح";s:3:"ﶹ";s:6:"مخي";s:3:"ﶺ";s:6:"لجم";s:3:"ﶻ";s:6:"كمم";s:3:"ﶼ";s:6:"لجم";s:3:"ﶽ";s:6:"نجح";s:3:"ﶾ";s:6:"جحي";s:3:"ﶿ";s:6:"حجي";s:3:"ﷀ";s:6:"مجي";s:3:"ﷁ";s:6:"فمي";s:3:"ﷂ";s:6:"بحي";s:3:"ﷃ";s:6:"كمم";s:3:"ﷄ";s:6:"عجم";s:3:"ﷅ";s:6:"صمم";s:3:"ﷆ";s:6:"سخي";s:3:"ﷇ";s:6:"نجي";s:3:"ﷰ";s:6:"صلے";s:3:"ﷱ";s:6:"قلے";s:3:"ﷲ";s:8:"الله";s:3:"ﷳ";s:8:"اكبر";s:3:"ﷴ";s:8:"محمد";s:3:"ﷵ";s:8:"صلعم";s:3:"ﷶ";s:8:"رسول";s:3:"ﷷ";s:8:"عليه";s:3:"ﷸ";s:8:"وسلم";s:3:"ﷹ";s:6:"صلى";s:3:"ﷺ";s:33:"صلى الله عليه وسلم";s:3:"ﷻ";s:15:"جل جلاله";s:3:"﷼";s:8:"ریال";s:3:"︐";s:1:",";s:3:"︑";s:3:"、";s:3:"︒";s:3:"。";s:3:"︓";s:1:":";s:3:"︔";s:1:";";s:3:"︕";s:1:"!";s:3:"︖";s:1:"?";s:3:"︗";s:3:"〖";s:3:"︘";s:3:"〗";s:3:"︙";s:3:"...";s:3:"︰";s:2:"..";s:3:"︱";s:3:"—";s:3:"︲";s:3:"–";s:3:"︳";s:1:"_";s:3:"︴";s:1:"_";s:3:"︵";s:1:"(";s:3:"︶";s:1:")";s:3:"︷";s:1:"{";s:3:"︸";s:1:"}";s:3:"︹";s:3:"〔";s:3:"︺";s:3:"〕";s:3:"︻";s:3:"【";s:3:"︼";s:3:"】";s:3:"︽";s:3:"《";s:3:"︾";s:3:"》";s:3:"︿";s:3:"〈";s:3:"﹀";s:3:"〉";s:3:"﹁";s:3:"「";s:3:"﹂";s:3:"」";s:3:"﹃";s:3:"『";s:3:"﹄";s:3:"』";s:3:"﹇";s:1:"[";s:3:"﹈";s:1:"]";s:3:"﹉";s:3:" ̅";s:3:"﹊";s:3:" ̅";s:3:"﹋";s:3:" ̅";s:3:"﹌";s:3:" ̅";s:3:"﹍";s:1:"_";s:3:"﹎";s:1:"_";s:3:"﹏";s:1:"_";s:3:"﹐";s:1:",";s:3:"﹑";s:3:"、";s:3:"﹒";s:1:".";s:3:"﹔";s:1:";";s:3:"﹕";s:1:":";s:3:"﹖";s:1:"?";s:3:"﹗";s:1:"!";s:3:"﹘";s:3:"—";s:3:"﹙";s:1:"(";s:3:"﹚";s:1:")";s:3:"﹛";s:1:"{";s:3:"﹜";s:1:"}";s:3:"﹝";s:3:"〔";s:3:"﹞";s:3:"〕";s:3:"﹟";s:1:"#";s:3:"﹠";s:1:"&";s:3:"﹡";s:1:"*";s:3:"﹢";s:1:"+";s:3:"﹣";s:1:"-";s:3:"﹤";s:1:"<";s:3:"﹥";s:1:">";s:3:"﹦";s:1:"=";s:3:"﹨";s:1:"\\";s:3:"﹩";s:1:"$";s:3:"﹪";s:1:"%";s:3:"﹫";s:1:"@";s:3:"ﹰ";s:3:" ً";s:3:"ﹱ";s:4:"ـً";s:3:"ﹲ";s:3:" ٌ";s:3:"ﹴ";s:3:" ٍ";s:3:"ﹶ";s:3:" َ";s:3:"ﹷ";s:4:"ـَ";s:3:"ﹸ";s:3:" ُ";s:3:"ﹹ";s:4:"ـُ";s:3:"ﹺ";s:3:" ِ";s:3:"ﹻ";s:4:"ـِ";s:3:"ﹼ";s:3:" ّ";s:3:"ﹽ";s:4:"ـّ";s:3:"ﹾ";s:3:" ْ";s:3:"ﹿ";s:4:"ـْ";s:3:"ﺀ";s:2:"ء";s:3:"ﺁ";s:4:"آ";s:3:"ﺂ";s:4:"آ";s:3:"ﺃ";s:4:"أ";s:3:"ﺄ";s:4:"أ";s:3:"ﺅ";s:4:"ؤ";s:3:"ﺆ";s:4:"ؤ";s:3:"ﺇ";s:4:"إ";s:3:"ﺈ";s:4:"إ";s:3:"ﺉ";s:4:"ئ";s:3:"ﺊ";s:4:"ئ";s:3:"ﺋ";s:4:"ئ";s:3:"ﺌ";s:4:"ئ";s:3:"ﺍ";s:2:"ا";s:3:"ﺎ";s:2:"ا";s:3:"ﺏ";s:2:"ب";s:3:"ﺐ";s:2:"ب";s:3:"ﺑ";s:2:"ب";s:3:"ﺒ";s:2:"ب";s:3:"ﺓ";s:2:"ة";s:3:"ﺔ";s:2:"ة";s:3:"ﺕ";s:2:"ت";s:3:"ﺖ";s:2:"ت";s:3:"ﺗ";s:2:"ت";s:3:"ﺘ";s:2:"ت";s:3:"ﺙ";s:2:"ث";s:3:"ﺚ";s:2:"ث";s:3:"ﺛ";s:2:"ث";s:3:"ﺜ";s:2:"ث";s:3:"ﺝ";s:2:"ج";s:3:"ﺞ";s:2:"ج";s:3:"ﺟ";s:2:"ج";s:3:"ﺠ";s:2:"ج";s:3:"ﺡ";s:2:"ح";s:3:"ﺢ";s:2:"ح";s:3:"ﺣ";s:2:"ح";s:3:"ﺤ";s:2:"ح";s:3:"ﺥ";s:2:"خ";s:3:"ﺦ";s:2:"خ";s:3:"ﺧ";s:2:"خ";s:3:"ﺨ";s:2:"خ";s:3:"ﺩ";s:2:"د";s:3:"ﺪ";s:2:"د";s:3:"ﺫ";s:2:"ذ";s:3:"ﺬ";s:2:"ذ";s:3:"ﺭ";s:2:"ر";s:3:"ﺮ";s:2:"ر";s:3:"ﺯ";s:2:"ز";s:3:"ﺰ";s:2:"ز";s:3:"ﺱ";s:2:"س";s:3:"ﺲ";s:2:"س";s:3:"ﺳ";s:2:"س";s:3:"ﺴ";s:2:"س";s:3:"ﺵ";s:2:"ش";s:3:"ﺶ";s:2:"ش";s:3:"ﺷ";s:2:"ش";s:3:"ﺸ";s:2:"ش";s:3:"ﺹ";s:2:"ص";s:3:"ﺺ";s:2:"ص";s:3:"ﺻ";s:2:"ص";s:3:"ﺼ";s:2:"ص";s:3:"ﺽ";s:2:"ض";s:3:"ﺾ";s:2:"ض";s:3:"ﺿ";s:2:"ض";s:3:"ﻀ";s:2:"ض";s:3:"ﻁ";s:2:"ط";s:3:"ﻂ";s:2:"ط";s:3:"ﻃ";s:2:"ط";s:3:"ﻄ";s:2:"ط";s:3:"ﻅ";s:2:"ظ";s:3:"ﻆ";s:2:"ظ";s:3:"ﻇ";s:2:"ظ";s:3:"ﻈ";s:2:"ظ";s:3:"ﻉ";s:2:"ع";s:3:"ﻊ";s:2:"ع";s:3:"ﻋ";s:2:"ع";s:3:"ﻌ";s:2:"ع";s:3:"ﻍ";s:2:"غ";s:3:"ﻎ";s:2:"غ";s:3:"ﻏ";s:2:"غ";s:3:"ﻐ";s:2:"غ";s:3:"ﻑ";s:2:"ف";s:3:"ﻒ";s:2:"ف";s:3:"ﻓ";s:2:"ف";s:3:"ﻔ";s:2:"ف";s:3:"ﻕ";s:2:"ق";s:3:"ﻖ";s:2:"ق";s:3:"ﻗ";s:2:"ق";s:3:"ﻘ";s:2:"ق";s:3:"ﻙ";s:2:"ك";s:3:"ﻚ";s:2:"ك";s:3:"ﻛ";s:2:"ك";s:3:"ﻜ";s:2:"ك";s:3:"ﻝ";s:2:"ل";s:3:"ﻞ";s:2:"ل";s:3:"ﻟ";s:2:"ل";s:3:"ﻠ";s:2:"ل";s:3:"ﻡ";s:2:"م";s:3:"ﻢ";s:2:"م";s:3:"ﻣ";s:2:"م";s:3:"ﻤ";s:2:"م";s:3:"ﻥ";s:2:"ن";s:3:"ﻦ";s:2:"ن";s:3:"ﻧ";s:2:"ن";s:3:"ﻨ";s:2:"ن";s:3:"ﻩ";s:2:"ه";s:3:"ﻪ";s:2:"ه";s:3:"ﻫ";s:2:"ه";s:3:"ﻬ";s:2:"ه";s:3:"ﻭ";s:2:"و";s:3:"ﻮ";s:2:"و";s:3:"ﻯ";s:2:"ى";s:3:"ﻰ";s:2:"ى";s:3:"ﻱ";s:2:"ي";s:3:"ﻲ";s:2:"ي";s:3:"ﻳ";s:2:"ي";s:3:"ﻴ";s:2:"ي";s:3:"ﻵ";s:6:"لآ";s:3:"ﻶ";s:6:"لآ";s:3:"ﻷ";s:6:"لأ";s:3:"ﻸ";s:6:"لأ";s:3:"ﻹ";s:6:"لإ";s:3:"ﻺ";s:6:"لإ";s:3:"ﻻ";s:4:"لا";s:3:"ﻼ";s:4:"لا";s:3:"！";s:1:"!";s:3:"＂";s:1:""";s:3:"＃";s:1:"#";s:3:"＄";s:1:"$";s:3:"％";s:1:"%";s:3:"＆";s:1:"&";s:3:"＇";s:1:"\'";s:3:"（";s:1:"(";s:3:"）";s:1:")";s:3:"＊";s:1:"*";s:3:"＋";s:1:"+";s:3:"，";s:1:",";s:3:"－";s:1:"-";s:3:"．";s:1:".";s:3:"／";s:1:"/";s:3:"０";s:1:"0";s:3:"１";s:1:"1";s:3:"２";s:1:"2";s:3:"３";s:1:"3";s:3:"４";s:1:"4";s:3:"５";s:1:"5";s:3:"６";s:1:"6";s:3:"７";s:1:"7";s:3:"８";s:1:"8";s:3:"９";s:1:"9";s:3:"：";s:1:":";s:3:"；";s:1:";";s:3:"＜";s:1:"<";s:3:"＝";s:1:"=";s:3:"＞";s:1:">";s:3:"？";s:1:"?";s:3:"＠";s:1:"@";s:3:"Ａ";s:1:"A";s:3:"Ｂ";s:1:"B";s:3:"Ｃ";s:1:"C";s:3:"Ｄ";s:1:"D";s:3:"Ｅ";s:1:"E";s:3:"Ｆ";s:1:"F";s:3:"Ｇ";s:1:"G";s:3:"Ｈ";s:1:"H";s:3:"Ｉ";s:1:"I";s:3:"Ｊ";s:1:"J";s:3:"Ｋ";s:1:"K";s:3:"Ｌ";s:1:"L";s:3:"Ｍ";s:1:"M";s:3:"Ｎ";s:1:"N";s:3:"Ｏ";s:1:"O";s:3:"Ｐ";s:1:"P";s:3:"Ｑ";s:1:"Q";s:3:"Ｒ";s:1:"R";s:3:"Ｓ";s:1:"S";s:3:"Ｔ";s:1:"T";s:3:"Ｕ";s:1:"U";s:3:"Ｖ";s:1:"V";s:3:"Ｗ";s:1:"W";s:3:"Ｘ";s:1:"X";s:3:"Ｙ";s:1:"Y";s:3:"Ｚ";s:1:"Z";s:3:"［";s:1:"[";s:3:"＼";s:1:"\\";s:3:"］";s:1:"]";s:3:"＾";s:1:"^";s:3:"＿";s:1:"_";s:3:"｀";s:1:"`";s:3:"ａ";s:1:"a";s:3:"ｂ";s:1:"b";s:3:"ｃ";s:1:"c";s:3:"ｄ";s:1:"d";s:3:"ｅ";s:1:"e";s:3:"ｆ";s:1:"f";s:3:"ｇ";s:1:"g";s:3:"ｈ";s:1:"h";s:3:"ｉ";s:1:"i";s:3:"ｊ";s:1:"j";s:3:"ｋ";s:1:"k";s:3:"ｌ";s:1:"l";s:3:"ｍ";s:1:"m";s:3:"ｎ";s:1:"n";s:3:"ｏ";s:1:"o";s:3:"ｐ";s:1:"p";s:3:"ｑ";s:1:"q";s:3:"ｒ";s:1:"r";s:3:"ｓ";s:1:"s";s:3:"ｔ";s:1:"t";s:3:"ｕ";s:1:"u";s:3:"ｖ";s:1:"v";s:3:"ｗ";s:1:"w";s:3:"ｘ";s:1:"x";s:3:"ｙ";s:1:"y";s:3:"ｚ";s:1:"z";s:3:"｛";s:1:"{";s:3:"｜";s:1:"|";s:3:"｝";s:1:"}";s:3:"～";s:1:"~";s:3:"｟";s:3:"⦅";s:3:"｠";s:3:"⦆";s:3:"｡";s:3:"。";s:3:"｢";s:3:"「";s:3:"｣";s:3:"」";s:3:"､";s:3:"、";s:3:"･";s:3:"・";s:3:"ｦ";s:3:"ヲ";s:3:"ｧ";s:3:"ァ";s:3:"ｨ";s:3:"ィ";s:3:"ｩ";s:3:"ゥ";s:3:"ｪ";s:3:"ェ";s:3:"ｫ";s:3:"ォ";s:3:"ｬ";s:3:"ャ";s:3:"ｭ";s:3:"ュ";s:3:"ｮ";s:3:"ョ";s:3:"ｯ";s:3:"ッ";s:3:"ｰ";s:3:"ー";s:3:"ｱ";s:3:"ア";s:3:"ｲ";s:3:"イ";s:3:"ｳ";s:3:"ウ";s:3:"ｴ";s:3:"エ";s:3:"ｵ";s:3:"オ";s:3:"ｶ";s:3:"カ";s:3:"ｷ";s:3:"キ";s:3:"ｸ";s:3:"ク";s:3:"ｹ";s:3:"ケ";s:3:"ｺ";s:3:"コ";s:3:"ｻ";s:3:"サ";s:3:"ｼ";s:3:"シ";s:3:"ｽ";s:3:"ス";s:3:"ｾ";s:3:"セ";s:3:"ｿ";s:3:"ソ";s:3:"ﾀ";s:3:"タ";s:3:"ﾁ";s:3:"チ";s:3:"ﾂ";s:3:"ツ";s:3:"ﾃ";s:3:"テ";s:3:"ﾄ";s:3:"ト";s:3:"ﾅ";s:3:"ナ";s:3:"ﾆ";s:3:"ニ";s:3:"ﾇ";s:3:"ヌ";s:3:"ﾈ";s:3:"ネ";s:3:"ﾉ";s:3:"ノ";s:3:"ﾊ";s:3:"ハ";s:3:"ﾋ";s:3:"ヒ";s:3:"ﾌ";s:3:"フ";s:3:"ﾍ";s:3:"ヘ";s:3:"ﾎ";s:3:"ホ";s:3:"ﾏ";s:3:"マ";s:3:"ﾐ";s:3:"ミ";s:3:"ﾑ";s:3:"ム";s:3:"ﾒ";s:3:"メ";s:3:"ﾓ";s:3:"モ";s:3:"ﾔ";s:3:"ヤ";s:3:"ﾕ";s:3:"ユ";s:3:"ﾖ";s:3:"ヨ";s:3:"ﾗ";s:3:"ラ";s:3:"ﾘ";s:3:"リ";s:3:"ﾙ";s:3:"ル";s:3:"ﾚ";s:3:"レ";s:3:"ﾛ";s:3:"ロ";s:3:"ﾜ";s:3:"ワ";s:3:"ﾝ";s:3:"ン";s:3:"ﾞ";s:3:"゙";s:3:"ﾟ";s:3:"゚";s:3:"ﾠ";s:3:"ᅠ";s:3:"ﾡ";s:3:"ᄀ";s:3:"ﾢ";s:3:"ᄁ";s:3:"ﾣ";s:3:"ᆪ";s:3:"ﾤ";s:3:"ᄂ";s:3:"ﾥ";s:3:"ᆬ";s:3:"ﾦ";s:3:"ᆭ";s:3:"ﾧ";s:3:"ᄃ";s:3:"ﾨ";s:3:"ᄄ";s:3:"ﾩ";s:3:"ᄅ";s:3:"ﾪ";s:3:"ᆰ";s:3:"ﾫ";s:3:"ᆱ";s:3:"ﾬ";s:3:"ᆲ";s:3:"ﾭ";s:3:"ᆳ";s:3:"ﾮ";s:3:"ᆴ";s:3:"ﾯ";s:3:"ᆵ";s:3:"ﾰ";s:3:"ᄚ";s:3:"ﾱ";s:3:"ᄆ";s:3:"ﾲ";s:3:"ᄇ";s:3:"ﾳ";s:3:"ᄈ";s:3:"ﾴ";s:3:"ᄡ";s:3:"ﾵ";s:3:"ᄉ";s:3:"ﾶ";s:3:"ᄊ";s:3:"ﾷ";s:3:"ᄋ";s:3:"ﾸ";s:3:"ᄌ";s:3:"ﾹ";s:3:"ᄍ";s:3:"ﾺ";s:3:"ᄎ";s:3:"ﾻ";s:3:"ᄏ";s:3:"ﾼ";s:3:"ᄐ";s:3:"ﾽ";s:3:"ᄑ";s:3:"ﾾ";s:3:"ᄒ";s:3:"ￂ";s:3:"ᅡ";s:3:"ￃ";s:3:"ᅢ";s:3:"ￄ";s:3:"ᅣ";s:3:"ￅ";s:3:"ᅤ";s:3:"ￆ";s:3:"ᅥ";s:3:"ￇ";s:3:"ᅦ";s:3:"ￊ";s:3:"ᅧ";s:3:"ￋ";s:3:"ᅨ";s:3:"ￌ";s:3:"ᅩ";s:3:"ￍ";s:3:"ᅪ";s:3:"ￎ";s:3:"ᅫ";s:3:"ￏ";s:3:"ᅬ";s:3:"ￒ";s:3:"ᅭ";s:3:"ￓ";s:3:"ᅮ";s:3:"ￔ";s:3:"ᅯ";s:3:"ￕ";s:3:"ᅰ";s:3:"ￖ";s:3:"ᅱ";s:3:"ￗ";s:3:"ᅲ";s:3:"ￚ";s:3:"ᅳ";s:3:"ￛ";s:3:"ᅴ";s:3:"ￜ";s:3:"ᅵ";s:3:"￠";s:2:"¢";s:3:"￡";s:2:"£";s:3:"￢";s:2:"¬";s:3:"￣";s:3:" ̄";s:3:"￤";s:2:"¦";s:3:"￥";s:2:"¥";s:3:"￦";s:3:"₩";s:3:"￨";s:3:"│";s:3:"￩";s:3:"←";s:3:"￪";s:3:"↑";s:3:"￫";s:3:"→";s:3:"￬";s:3:"↓";s:3:"￭";s:3:"■";s:3:"￮";s:3:"○";s:4:"𝅗𝅥";s:8:"𝅗𝅥";s:4:"𝅘𝅥";s:8:"𝅘𝅥";s:4:"𝅘𝅥𝅮";s:12:"𝅘𝅥𝅮";s:4:"𝅘𝅥𝅯";s:12:"𝅘𝅥𝅯";s:4:"𝅘𝅥𝅰";s:12:"𝅘𝅥𝅰";s:4:"𝅘𝅥𝅱";s:12:"𝅘𝅥𝅱";s:4:"𝅘𝅥𝅲";s:12:"𝅘𝅥𝅲";s:4:"𝆹𝅥";s:8:"𝆹𝅥";s:4:"𝆺𝅥";s:8:"𝆺𝅥";s:4:"𝆹𝅥𝅮";s:12:"𝆹𝅥𝅮";s:4:"𝆺𝅥𝅮";s:12:"𝆺𝅥𝅮";s:4:"𝆹𝅥𝅯";s:12:"𝆹𝅥𝅯";s:4:"𝆺𝅥𝅯";s:12:"𝆺𝅥𝅯";s:4:"𝐀";s:1:"A";s:4:"𝐁";s:1:"B";s:4:"𝐂";s:1:"C";s:4:"𝐃";s:1:"D";s:4:"𝐄";s:1:"E";s:4:"𝐅";s:1:"F";s:4:"𝐆";s:1:"G";s:4:"𝐇";s:1:"H";s:4:"𝐈";s:1:"I";s:4:"𝐉";s:1:"J";s:4:"𝐊";s:1:"K";s:4:"𝐋";s:1:"L";s:4:"𝐌";s:1:"M";s:4:"𝐍";s:1:"N";s:4:"𝐎";s:1:"O";s:4:"𝐏";s:1:"P";s:4:"𝐐";s:1:"Q";s:4:"𝐑";s:1:"R";s:4:"𝐒";s:1:"S";s:4:"𝐓";s:1:"T";s:4:"𝐔";s:1:"U";s:4:"𝐕";s:1:"V";s:4:"𝐖";s:1:"W";s:4:"𝐗";s:1:"X";s:4:"𝐘";s:1:"Y";s:4:"𝐙";s:1:"Z";s:4:"𝐚";s:1:"a";s:4:"𝐛";s:1:"b";s:4:"𝐜";s:1:"c";s:4:"𝐝";s:1:"d";s:4:"𝐞";s:1:"e";s:4:"𝐟";s:1:"f";s:4:"𝐠";s:1:"g";s:4:"𝐡";s:1:"h";s:4:"𝐢";s:1:"i";s:4:"𝐣";s:1:"j";s:4:"𝐤";s:1:"k";s:4:"𝐥";s:1:"l";s:4:"𝐦";s:1:"m";s:4:"𝐧";s:1:"n";s:4:"𝐨";s:1:"o";s:4:"𝐩";s:1:"p";s:4:"𝐪";s:1:"q";s:4:"𝐫";s:1:"r";s:4:"𝐬";s:1:"s";s:4:"𝐭";s:1:"t";s:4:"𝐮";s:1:"u";s:4:"𝐯";s:1:"v";s:4:"𝐰";s:1:"w";s:4:"𝐱";s:1:"x";s:4:"𝐲";s:1:"y";s:4:"𝐳";s:1:"z";s:4:"𝐴";s:1:"A";s:4:"𝐵";s:1:"B";s:4:"𝐶";s:1:"C";s:4:"𝐷";s:1:"D";s:4:"𝐸";s:1:"E";s:4:"𝐹";s:1:"F";s:4:"𝐺";s:1:"G";s:4:"𝐻";s:1:"H";s:4:"𝐼";s:1:"I";s:4:"𝐽";s:1:"J";s:4:"𝐾";s:1:"K";s:4:"𝐿";s:1:"L";s:4:"𝑀";s:1:"M";s:4:"𝑁";s:1:"N";s:4:"𝑂";s:1:"O";s:4:"𝑃";s:1:"P";s:4:"𝑄";s:1:"Q";s:4:"𝑅";s:1:"R";s:4:"𝑆";s:1:"S";s:4:"𝑇";s:1:"T";s:4:"𝑈";s:1:"U";s:4:"𝑉";s:1:"V";s:4:"𝑊";s:1:"W";s:4:"𝑋";s:1:"X";s:4:"𝑌";s:1:"Y";s:4:"𝑍";s:1:"Z";s:4:"𝑎";s:1:"a";s:4:"𝑏";s:1:"b";s:4:"𝑐";s:1:"c";s:4:"𝑑";s:1:"d";s:4:"𝑒";s:1:"e";s:4:"𝑓";s:1:"f";s:4:"𝑔";s:1:"g";s:4:"𝑖";s:1:"i";s:4:"𝑗";s:1:"j";s:4:"𝑘";s:1:"k";s:4:"𝑙";s:1:"l";s:4:"𝑚";s:1:"m";s:4:"𝑛";s:1:"n";s:4:"𝑜";s:1:"o";s:4:"𝑝";s:1:"p";s:4:"𝑞";s:1:"q";s:4:"𝑟";s:1:"r";s:4:"𝑠";s:1:"s";s:4:"𝑡";s:1:"t";s:4:"𝑢";s:1:"u";s:4:"𝑣";s:1:"v";s:4:"𝑤";s:1:"w";s:4:"𝑥";s:1:"x";s:4:"𝑦";s:1:"y";s:4:"𝑧";s:1:"z";s:4:"𝑨";s:1:"A";s:4:"𝑩";s:1:"B";s:4:"𝑪";s:1:"C";s:4:"𝑫";s:1:"D";s:4:"𝑬";s:1:"E";s:4:"𝑭";s:1:"F";s:4:"𝑮";s:1:"G";s:4:"𝑯";s:1:"H";s:4:"𝑰";s:1:"I";s:4:"𝑱";s:1:"J";s:4:"𝑲";s:1:"K";s:4:"𝑳";s:1:"L";s:4:"𝑴";s:1:"M";s:4:"𝑵";s:1:"N";s:4:"𝑶";s:1:"O";s:4:"𝑷";s:1:"P";s:4:"𝑸";s:1:"Q";s:4:"𝑹";s:1:"R";s:4:"𝑺";s:1:"S";s:4:"𝑻";s:1:"T";s:4:"𝑼";s:1:"U";s:4:"𝑽";s:1:"V";s:4:"𝑾";s:1:"W";s:4:"𝑿";s:1:"X";s:4:"𝒀";s:1:"Y";s:4:"𝒁";s:1:"Z";s:4:"𝒂";s:1:"a";s:4:"𝒃";s:1:"b";s:4:"𝒄";s:1:"c";s:4:"𝒅";s:1:"d";s:4:"𝒆";s:1:"e";s:4:"𝒇";s:1:"f";s:4:"𝒈";s:1:"g";s:4:"𝒉";s:1:"h";s:4:"𝒊";s:1:"i";s:4:"𝒋";s:1:"j";s:4:"𝒌";s:1:"k";s:4:"𝒍";s:1:"l";s:4:"𝒎";s:1:"m";s:4:"𝒏";s:1:"n";s:4:"𝒐";s:1:"o";s:4:"𝒑";s:1:"p";s:4:"𝒒";s:1:"q";s:4:"𝒓";s:1:"r";s:4:"𝒔";s:1:"s";s:4:"𝒕";s:1:"t";s:4:"𝒖";s:1:"u";s:4:"𝒗";s:1:"v";s:4:"𝒘";s:1:"w";s:4:"𝒙";s:1:"x";s:4:"𝒚";s:1:"y";s:4:"𝒛";s:1:"z";s:4:"𝒜";s:1:"A";s:4:"𝒞";s:1:"C";s:4:"𝒟";s:1:"D";s:4:"𝒢";s:1:"G";s:4:"𝒥";s:1:"J";s:4:"𝒦";s:1:"K";s:4:"𝒩";s:1:"N";s:4:"𝒪";s:1:"O";s:4:"𝒫";s:1:"P";s:4:"𝒬";s:1:"Q";s:4:"𝒮";s:1:"S";s:4:"𝒯";s:1:"T";s:4:"𝒰";s:1:"U";s:4:"𝒱";s:1:"V";s:4:"𝒲";s:1:"W";s:4:"𝒳";s:1:"X";s:4:"𝒴";s:1:"Y";s:4:"𝒵";s:1:"Z";s:4:"𝒶";s:1:"a";s:4:"𝒷";s:1:"b";s:4:"𝒸";s:1:"c";s:4:"𝒹";s:1:"d";s:4:"𝒻";s:1:"f";s:4:"𝒽";s:1:"h";s:4:"𝒾";s:1:"i";s:4:"𝒿";s:1:"j";s:4:"𝓀";s:1:"k";s:4:"𝓁";s:1:"l";s:4:"𝓂";s:1:"m";s:4:"𝓃";s:1:"n";s:4:"𝓅";s:1:"p";s:4:"𝓆";s:1:"q";s:4:"𝓇";s:1:"r";s:4:"𝓈";s:1:"s";s:4:"𝓉";s:1:"t";s:4:"𝓊";s:1:"u";s:4:"𝓋";s:1:"v";s:4:"𝓌";s:1:"w";s:4:"𝓍";s:1:"x";s:4:"𝓎";s:1:"y";s:4:"𝓏";s:1:"z";s:4:"𝓐";s:1:"A";s:4:"𝓑";s:1:"B";s:4:"𝓒";s:1:"C";s:4:"𝓓";s:1:"D";s:4:"𝓔";s:1:"E";s:4:"𝓕";s:1:"F";s:4:"𝓖";s:1:"G";s:4:"𝓗";s:1:"H";s:4:"𝓘";s:1:"I";s:4:"𝓙";s:1:"J";s:4:"𝓚";s:1:"K";s:4:"𝓛";s:1:"L";s:4:"𝓜";s:1:"M";s:4:"𝓝";s:1:"N";s:4:"𝓞";s:1:"O";s:4:"𝓟";s:1:"P";s:4:"𝓠";s:1:"Q";s:4:"𝓡";s:1:"R";s:4:"𝓢";s:1:"S";s:4:"𝓣";s:1:"T";s:4:"𝓤";s:1:"U";s:4:"𝓥";s:1:"V";s:4:"𝓦";s:1:"W";s:4:"𝓧";s:1:"X";s:4:"𝓨";s:1:"Y";s:4:"𝓩";s:1:"Z";s:4:"𝓪";s:1:"a";s:4:"𝓫";s:1:"b";s:4:"𝓬";s:1:"c";s:4:"𝓭";s:1:"d";s:4:"𝓮";s:1:"e";s:4:"𝓯";s:1:"f";s:4:"𝓰";s:1:"g";s:4:"𝓱";s:1:"h";s:4:"𝓲";s:1:"i";s:4:"𝓳";s:1:"j";s:4:"𝓴";s:1:"k";s:4:"𝓵";s:1:"l";s:4:"𝓶";s:1:"m";s:4:"𝓷";s:1:"n";s:4:"𝓸";s:1:"o";s:4:"𝓹";s:1:"p";s:4:"𝓺";s:1:"q";s:4:"𝓻";s:1:"r";s:4:"𝓼";s:1:"s";s:4:"𝓽";s:1:"t";s:4:"𝓾";s:1:"u";s:4:"𝓿";s:1:"v";s:4:"𝔀";s:1:"w";s:4:"𝔁";s:1:"x";s:4:"𝔂";s:1:"y";s:4:"𝔃";s:1:"z";s:4:"𝔄";s:1:"A";s:4:"𝔅";s:1:"B";s:4:"𝔇";s:1:"D";s:4:"𝔈";s:1:"E";s:4:"𝔉";s:1:"F";s:4:"𝔊";s:1:"G";s:4:"𝔍";s:1:"J";s:4:"𝔎";s:1:"K";s:4:"𝔏";s:1:"L";s:4:"𝔐";s:1:"M";s:4:"𝔑";s:1:"N";s:4:"𝔒";s:1:"O";s:4:"𝔓";s:1:"P";s:4:"𝔔";s:1:"Q";s:4:"𝔖";s:1:"S";s:4:"𝔗";s:1:"T";s:4:"𝔘";s:1:"U";s:4:"𝔙";s:1:"V";s:4:"𝔚";s:1:"W";s:4:"𝔛";s:1:"X";s:4:"𝔜";s:1:"Y";s:4:"𝔞";s:1:"a";s:4:"𝔟";s:1:"b";s:4:"𝔠";s:1:"c";s:4:"𝔡";s:1:"d";s:4:"𝔢";s:1:"e";s:4:"𝔣";s:1:"f";s:4:"𝔤";s:1:"g";s:4:"𝔥";s:1:"h";s:4:"𝔦";s:1:"i";s:4:"𝔧";s:1:"j";s:4:"𝔨";s:1:"k";s:4:"𝔩";s:1:"l";s:4:"𝔪";s:1:"m";s:4:"𝔫";s:1:"n";s:4:"𝔬";s:1:"o";s:4:"𝔭";s:1:"p";s:4:"𝔮";s:1:"q";s:4:"𝔯";s:1:"r";s:4:"𝔰";s:1:"s";s:4:"𝔱";s:1:"t";s:4:"𝔲";s:1:"u";s:4:"𝔳";s:1:"v";s:4:"𝔴";s:1:"w";s:4:"𝔵";s:1:"x";s:4:"𝔶";s:1:"y";s:4:"𝔷";s:1:"z";s:4:"𝔸";s:1:"A";s:4:"𝔹";s:1:"B";s:4:"𝔻";s:1:"D";s:4:"𝔼";s:1:"E";s:4:"𝔽";s:1:"F";s:4:"𝔾";s:1:"G";s:4:"𝕀";s:1:"I";s:4:"𝕁";s:1:"J";s:4:"𝕂";s:1:"K";s:4:"𝕃";s:1:"L";s:4:"𝕄";s:1:"M";s:4:"𝕆";s:1:"O";s:4:"𝕊";s:1:"S";s:4:"𝕋";s:1:"T";s:4:"𝕌";s:1:"U";s:4:"𝕍";s:1:"V";s:4:"𝕎";s:1:"W";s:4:"𝕏";s:1:"X";s:4:"𝕐";s:1:"Y";s:4:"𝕒";s:1:"a";s:4:"𝕓";s:1:"b";s:4:"𝕔";s:1:"c";s:4:"𝕕";s:1:"d";s:4:"𝕖";s:1:"e";s:4:"𝕗";s:1:"f";s:4:"𝕘";s:1:"g";s:4:"𝕙";s:1:"h";s:4:"𝕚";s:1:"i";s:4:"𝕛";s:1:"j";s:4:"𝕜";s:1:"k";s:4:"𝕝";s:1:"l";s:4:"𝕞";s:1:"m";s:4:"𝕟";s:1:"n";s:4:"𝕠";s:1:"o";s:4:"𝕡";s:1:"p";s:4:"𝕢";s:1:"q";s:4:"𝕣";s:1:"r";s:4:"𝕤";s:1:"s";s:4:"𝕥";s:1:"t";s:4:"𝕦";s:1:"u";s:4:"𝕧";s:1:"v";s:4:"𝕨";s:1:"w";s:4:"𝕩";s:1:"x";s:4:"𝕪";s:1:"y";s:4:"𝕫";s:1:"z";s:4:"𝕬";s:1:"A";s:4:"𝕭";s:1:"B";s:4:"𝕮";s:1:"C";s:4:"𝕯";s:1:"D";s:4:"𝕰";s:1:"E";s:4:"𝕱";s:1:"F";s:4:"𝕲";s:1:"G";s:4:"𝕳";s:1:"H";s:4:"𝕴";s:1:"I";s:4:"𝕵";s:1:"J";s:4:"𝕶";s:1:"K";s:4:"𝕷";s:1:"L";s:4:"𝕸";s:1:"M";s:4:"𝕹";s:1:"N";s:4:"𝕺";s:1:"O";s:4:"𝕻";s:1:"P";s:4:"𝕼";s:1:"Q";s:4:"𝕽";s:1:"R";s:4:"𝕾";s:1:"S";s:4:"𝕿";s:1:"T";s:4:"𝖀";s:1:"U";s:4:"𝖁";s:1:"V";s:4:"𝖂";s:1:"W";s:4:"𝖃";s:1:"X";s:4:"𝖄";s:1:"Y";s:4:"𝖅";s:1:"Z";s:4:"𝖆";s:1:"a";s:4:"𝖇";s:1:"b";s:4:"𝖈";s:1:"c";s:4:"𝖉";s:1:"d";s:4:"𝖊";s:1:"e";s:4:"𝖋";s:1:"f";s:4:"𝖌";s:1:"g";s:4:"𝖍";s:1:"h";s:4:"𝖎";s:1:"i";s:4:"𝖏";s:1:"j";s:4:"𝖐";s:1:"k";s:4:"𝖑";s:1:"l";s:4:"𝖒";s:1:"m";s:4:"𝖓";s:1:"n";s:4:"𝖔";s:1:"o";s:4:"𝖕";s:1:"p";s:4:"𝖖";s:1:"q";s:4:"𝖗";s:1:"r";s:4:"𝖘";s:1:"s";s:4:"𝖙";s:1:"t";s:4:"𝖚";s:1:"u";s:4:"𝖛";s:1:"v";s:4:"𝖜";s:1:"w";s:4:"𝖝";s:1:"x";s:4:"𝖞";s:1:"y";s:4:"𝖟";s:1:"z";s:4:"𝖠";s:1:"A";s:4:"𝖡";s:1:"B";s:4:"𝖢";s:1:"C";s:4:"𝖣";s:1:"D";s:4:"𝖤";s:1:"E";s:4:"𝖥";s:1:"F";s:4:"𝖦";s:1:"G";s:4:"𝖧";s:1:"H";s:4:"𝖨";s:1:"I";s:4:"𝖩";s:1:"J";s:4:"𝖪";s:1:"K";s:4:"𝖫";s:1:"L";s:4:"𝖬";s:1:"M";s:4:"𝖭";s:1:"N";s:4:"𝖮";s:1:"O";s:4:"𝖯";s:1:"P";s:4:"𝖰";s:1:"Q";s:4:"𝖱";s:1:"R";s:4:"𝖲";s:1:"S";s:4:"𝖳";s:1:"T";s:4:"𝖴";s:1:"U";s:4:"𝖵";s:1:"V";s:4:"𝖶";s:1:"W";s:4:"𝖷";s:1:"X";s:4:"𝖸";s:1:"Y";s:4:"𝖹";s:1:"Z";s:4:"𝖺";s:1:"a";s:4:"𝖻";s:1:"b";s:4:"𝖼";s:1:"c";s:4:"𝖽";s:1:"d";s:4:"𝖾";s:1:"e";s:4:"𝖿";s:1:"f";s:4:"𝗀";s:1:"g";s:4:"𝗁";s:1:"h";s:4:"𝗂";s:1:"i";s:4:"𝗃";s:1:"j";s:4:"𝗄";s:1:"k";s:4:"𝗅";s:1:"l";s:4:"𝗆";s:1:"m";s:4:"𝗇";s:1:"n";s:4:"𝗈";s:1:"o";s:4:"𝗉";s:1:"p";s:4:"𝗊";s:1:"q";s:4:"𝗋";s:1:"r";s:4:"𝗌";s:1:"s";s:4:"𝗍";s:1:"t";s:4:"𝗎";s:1:"u";s:4:"𝗏";s:1:"v";s:4:"𝗐";s:1:"w";s:4:"𝗑";s:1:"x";s:4:"𝗒";s:1:"y";s:4:"𝗓";s:1:"z";s:4:"𝗔";s:1:"A";s:4:"𝗕";s:1:"B";s:4:"𝗖";s:1:"C";s:4:"𝗗";s:1:"D";s:4:"𝗘";s:1:"E";s:4:"𝗙";s:1:"F";s:4:"𝗚";s:1:"G";s:4:"𝗛";s:1:"H";s:4:"𝗜";s:1:"I";s:4:"𝗝";s:1:"J";s:4:"𝗞";s:1:"K";s:4:"𝗟";s:1:"L";s:4:"𝗠";s:1:"M";s:4:"𝗡";s:1:"N";s:4:"𝗢";s:1:"O";s:4:"𝗣";s:1:"P";s:4:"𝗤";s:1:"Q";s:4:"𝗥";s:1:"R";s:4:"𝗦";s:1:"S";s:4:"𝗧";s:1:"T";s:4:"𝗨";s:1:"U";s:4:"𝗩";s:1:"V";s:4:"𝗪";s:1:"W";s:4:"𝗫";s:1:"X";s:4:"𝗬";s:1:"Y";s:4:"𝗭";s:1:"Z";s:4:"𝗮";s:1:"a";s:4:"𝗯";s:1:"b";s:4:"𝗰";s:1:"c";s:4:"𝗱";s:1:"d";s:4:"𝗲";s:1:"e";s:4:"𝗳";s:1:"f";s:4:"𝗴";s:1:"g";s:4:"𝗵";s:1:"h";s:4:"𝗶";s:1:"i";s:4:"𝗷";s:1:"j";s:4:"𝗸";s:1:"k";s:4:"𝗹";s:1:"l";s:4:"𝗺";s:1:"m";s:4:"𝗻";s:1:"n";s:4:"𝗼";s:1:"o";s:4:"𝗽";s:1:"p";s:4:"𝗾";s:1:"q";s:4:"𝗿";s:1:"r";s:4:"𝘀";s:1:"s";s:4:"𝘁";s:1:"t";s:4:"𝘂";s:1:"u";s:4:"𝘃";s:1:"v";s:4:"𝘄";s:1:"w";s:4:"𝘅";s:1:"x";s:4:"𝘆";s:1:"y";s:4:"𝘇";s:1:"z";s:4:"𝘈";s:1:"A";s:4:"𝘉";s:1:"B";s:4:"𝘊";s:1:"C";s:4:"𝘋";s:1:"D";s:4:"𝘌";s:1:"E";s:4:"𝘍";s:1:"F";s:4:"𝘎";s:1:"G";s:4:"𝘏";s:1:"H";s:4:"𝘐";s:1:"I";s:4:"𝘑";s:1:"J";s:4:"𝘒";s:1:"K";s:4:"𝘓";s:1:"L";s:4:"𝘔";s:1:"M";s:4:"𝘕";s:1:"N";s:4:"𝘖";s:1:"O";s:4:"𝘗";s:1:"P";s:4:"𝘘";s:1:"Q";s:4:"𝘙";s:1:"R";s:4:"𝘚";s:1:"S";s:4:"𝘛";s:1:"T";s:4:"𝘜";s:1:"U";s:4:"𝘝";s:1:"V";s:4:"𝘞";s:1:"W";s:4:"𝘟";s:1:"X";s:4:"𝘠";s:1:"Y";s:4:"𝘡";s:1:"Z";s:4:"𝘢";s:1:"a";s:4:"𝘣";s:1:"b";s:4:"𝘤";s:1:"c";s:4:"𝘥";s:1:"d";s:4:"𝘦";s:1:"e";s:4:"𝘧";s:1:"f";s:4:"𝘨";s:1:"g";s:4:"𝘩";s:1:"h";s:4:"𝘪";s:1:"i";s:4:"𝘫";s:1:"j";s:4:"𝘬";s:1:"k";s:4:"𝘭";s:1:"l";s:4:"𝘮";s:1:"m";s:4:"𝘯";s:1:"n";s:4:"𝘰";s:1:"o";s:4:"𝘱";s:1:"p";s:4:"𝘲";s:1:"q";s:4:"𝘳";s:1:"r";s:4:"𝘴";s:1:"s";s:4:"𝘵";s:1:"t";s:4:"𝘶";s:1:"u";s:4:"𝘷";s:1:"v";s:4:"𝘸";s:1:"w";s:4:"𝘹";s:1:"x";s:4:"𝘺";s:1:"y";s:4:"𝘻";s:1:"z";s:4:"𝘼";s:1:"A";s:4:"𝘽";s:1:"B";s:4:"𝘾";s:1:"C";s:4:"𝘿";s:1:"D";s:4:"𝙀";s:1:"E";s:4:"𝙁";s:1:"F";s:4:"𝙂";s:1:"G";s:4:"𝙃";s:1:"H";s:4:"𝙄";s:1:"I";s:4:"𝙅";s:1:"J";s:4:"𝙆";s:1:"K";s:4:"𝙇";s:1:"L";s:4:"𝙈";s:1:"M";s:4:"𝙉";s:1:"N";s:4:"𝙊";s:1:"O";s:4:"𝙋";s:1:"P";s:4:"𝙌";s:1:"Q";s:4:"𝙍";s:1:"R";s:4:"𝙎";s:1:"S";s:4:"𝙏";s:1:"T";s:4:"𝙐";s:1:"U";s:4:"𝙑";s:1:"V";s:4:"𝙒";s:1:"W";s:4:"𝙓";s:1:"X";s:4:"𝙔";s:1:"Y";s:4:"𝙕";s:1:"Z";s:4:"𝙖";s:1:"a";s:4:"𝙗";s:1:"b";s:4:"𝙘";s:1:"c";s:4:"𝙙";s:1:"d";s:4:"𝙚";s:1:"e";s:4:"𝙛";s:1:"f";s:4:"𝙜";s:1:"g";s:4:"𝙝";s:1:"h";s:4:"𝙞";s:1:"i";s:4:"𝙟";s:1:"j";s:4:"𝙠";s:1:"k";s:4:"𝙡";s:1:"l";s:4:"𝙢";s:1:"m";s:4:"𝙣";s:1:"n";s:4:"𝙤";s:1:"o";s:4:"𝙥";s:1:"p";s:4:"𝙦";s:1:"q";s:4:"𝙧";s:1:"r";s:4:"𝙨";s:1:"s";s:4:"𝙩";s:1:"t";s:4:"𝙪";s:1:"u";s:4:"𝙫";s:1:"v";s:4:"𝙬";s:1:"w";s:4:"𝙭";s:1:"x";s:4:"𝙮";s:1:"y";s:4:"𝙯";s:1:"z";s:4:"𝙰";s:1:"A";s:4:"𝙱";s:1:"B";s:4:"𝙲";s:1:"C";s:4:"𝙳";s:1:"D";s:4:"𝙴";s:1:"E";s:4:"𝙵";s:1:"F";s:4:"𝙶";s:1:"G";s:4:"𝙷";s:1:"H";s:4:"𝙸";s:1:"I";s:4:"𝙹";s:1:"J";s:4:"𝙺";s:1:"K";s:4:"𝙻";s:1:"L";s:4:"𝙼";s:1:"M";s:4:"𝙽";s:1:"N";s:4:"𝙾";s:1:"O";s:4:"𝙿";s:1:"P";s:4:"𝚀";s:1:"Q";s:4:"𝚁";s:1:"R";s:4:"𝚂";s:1:"S";s:4:"𝚃";s:1:"T";s:4:"𝚄";s:1:"U";s:4:"𝚅";s:1:"V";s:4:"𝚆";s:1:"W";s:4:"𝚇";s:1:"X";s:4:"𝚈";s:1:"Y";s:4:"𝚉";s:1:"Z";s:4:"𝚊";s:1:"a";s:4:"𝚋";s:1:"b";s:4:"𝚌";s:1:"c";s:4:"𝚍";s:1:"d";s:4:"𝚎";s:1:"e";s:4:"𝚏";s:1:"f";s:4:"𝚐";s:1:"g";s:4:"𝚑";s:1:"h";s:4:"𝚒";s:1:"i";s:4:"𝚓";s:1:"j";s:4:"𝚔";s:1:"k";s:4:"𝚕";s:1:"l";s:4:"𝚖";s:1:"m";s:4:"𝚗";s:1:"n";s:4:"𝚘";s:1:"o";s:4:"𝚙";s:1:"p";s:4:"𝚚";s:1:"q";s:4:"𝚛";s:1:"r";s:4:"𝚜";s:1:"s";s:4:"𝚝";s:1:"t";s:4:"𝚞";s:1:"u";s:4:"𝚟";s:1:"v";s:4:"𝚠";s:1:"w";s:4:"𝚡";s:1:"x";s:4:"𝚢";s:1:"y";s:4:"𝚣";s:1:"z";s:4:"𝚤";s:2:"ı";s:4:"𝚥";s:2:"ȷ";s:4:"𝚨";s:2:"Α";s:4:"𝚩";s:2:"Β";s:4:"𝚪";s:2:"Γ";s:4:"𝚫";s:2:"Δ";s:4:"𝚬";s:2:"Ε";s:4:"𝚭";s:2:"Ζ";s:4:"𝚮";s:2:"Η";s:4:"𝚯";s:2:"Θ";s:4:"𝚰";s:2:"Ι";s:4:"𝚱";s:2:"Κ";s:4:"𝚲";s:2:"Λ";s:4:"𝚳";s:2:"Μ";s:4:"𝚴";s:2:"Ν";s:4:"𝚵";s:2:"Ξ";s:4:"𝚶";s:2:"Ο";s:4:"𝚷";s:2:"Π";s:4:"𝚸";s:2:"Ρ";s:4:"𝚹";s:2:"Θ";s:4:"𝚺";s:2:"Σ";s:4:"𝚻";s:2:"Τ";s:4:"𝚼";s:2:"Υ";s:4:"𝚽";s:2:"Φ";s:4:"𝚾";s:2:"Χ";s:4:"𝚿";s:2:"Ψ";s:4:"𝛀";s:2:"Ω";s:4:"𝛁";s:3:"∇";s:4:"𝛂";s:2:"α";s:4:"𝛃";s:2:"β";s:4:"𝛄";s:2:"γ";s:4:"𝛅";s:2:"δ";s:4:"𝛆";s:2:"ε";s:4:"𝛇";s:2:"ζ";s:4:"𝛈";s:2:"η";s:4:"𝛉";s:2:"θ";s:4:"𝛊";s:2:"ι";s:4:"𝛋";s:2:"κ";s:4:"𝛌";s:2:"λ";s:4:"𝛍";s:2:"μ";s:4:"𝛎";s:2:"ν";s:4:"𝛏";s:2:"ξ";s:4:"𝛐";s:2:"ο";s:4:"𝛑";s:2:"π";s:4:"𝛒";s:2:"ρ";s:4:"𝛓";s:2:"ς";s:4:"𝛔";s:2:"σ";s:4:"𝛕";s:2:"τ";s:4:"𝛖";s:2:"υ";s:4:"𝛗";s:2:"φ";s:4:"𝛘";s:2:"χ";s:4:"𝛙";s:2:"ψ";s:4:"𝛚";s:2:"ω";s:4:"𝛛";s:3:"∂";s:4:"𝛜";s:2:"ε";s:4:"𝛝";s:2:"θ";s:4:"𝛞";s:2:"κ";s:4:"𝛟";s:2:"φ";s:4:"𝛠";s:2:"ρ";s:4:"𝛡";s:2:"π";s:4:"𝛢";s:2:"Α";s:4:"𝛣";s:2:"Β";s:4:"𝛤";s:2:"Γ";s:4:"𝛥";s:2:"Δ";s:4:"𝛦";s:2:"Ε";s:4:"𝛧";s:2:"Ζ";s:4:"𝛨";s:2:"Η";s:4:"𝛩";s:2:"Θ";s:4:"𝛪";s:2:"Ι";s:4:"𝛫";s:2:"Κ";s:4:"𝛬";s:2:"Λ";s:4:"𝛭";s:2:"Μ";s:4:"𝛮";s:2:"Ν";s:4:"𝛯";s:2:"Ξ";s:4:"𝛰";s:2:"Ο";s:4:"𝛱";s:2:"Π";s:4:"𝛲";s:2:"Ρ";s:4:"𝛳";s:2:"Θ";s:4:"𝛴";s:2:"Σ";s:4:"𝛵";s:2:"Τ";s:4:"𝛶";s:2:"Υ";s:4:"𝛷";s:2:"Φ";s:4:"𝛸";s:2:"Χ";s:4:"𝛹";s:2:"Ψ";s:4:"𝛺";s:2:"Ω";s:4:"𝛻";s:3:"∇";s:4:"𝛼";s:2:"α";s:4:"𝛽";s:2:"β";s:4:"𝛾";s:2:"γ";s:4:"𝛿";s:2:"δ";s:4:"𝜀";s:2:"ε";s:4:"𝜁";s:2:"ζ";s:4:"𝜂";s:2:"η";s:4:"𝜃";s:2:"θ";s:4:"𝜄";s:2:"ι";s:4:"𝜅";s:2:"κ";s:4:"𝜆";s:2:"λ";s:4:"𝜇";s:2:"μ";s:4:"𝜈";s:2:"ν";s:4:"𝜉";s:2:"ξ";s:4:"𝜊";s:2:"ο";s:4:"𝜋";s:2:"π";s:4:"𝜌";s:2:"ρ";s:4:"𝜍";s:2:"ς";s:4:"𝜎";s:2:"σ";s:4:"𝜏";s:2:"τ";s:4:"𝜐";s:2:"υ";s:4:"𝜑";s:2:"φ";s:4:"𝜒";s:2:"χ";s:4:"𝜓";s:2:"ψ";s:4:"𝜔";s:2:"ω";s:4:"𝜕";s:3:"∂";s:4:"𝜖";s:2:"ε";s:4:"𝜗";s:2:"θ";s:4:"𝜘";s:2:"κ";s:4:"𝜙";s:2:"φ";s:4:"𝜚";s:2:"ρ";s:4:"𝜛";s:2:"π";s:4:"𝜜";s:2:"Α";s:4:"𝜝";s:2:"Β";s:4:"𝜞";s:2:"Γ";s:4:"𝜟";s:2:"Δ";s:4:"𝜠";s:2:"Ε";s:4:"𝜡";s:2:"Ζ";s:4:"𝜢";s:2:"Η";s:4:"𝜣";s:2:"Θ";s:4:"𝜤";s:2:"Ι";s:4:"𝜥";s:2:"Κ";s:4:"𝜦";s:2:"Λ";s:4:"𝜧";s:2:"Μ";s:4:"𝜨";s:2:"Ν";s:4:"𝜩";s:2:"Ξ";s:4:"𝜪";s:2:"Ο";s:4:"𝜫";s:2:"Π";s:4:"𝜬";s:2:"Ρ";s:4:"𝜭";s:2:"Θ";s:4:"𝜮";s:2:"Σ";s:4:"𝜯";s:2:"Τ";s:4:"𝜰";s:2:"Υ";s:4:"𝜱";s:2:"Φ";s:4:"𝜲";s:2:"Χ";s:4:"𝜳";s:2:"Ψ";s:4:"𝜴";s:2:"Ω";s:4:"𝜵";s:3:"∇";s:4:"𝜶";s:2:"α";s:4:"𝜷";s:2:"β";s:4:"𝜸";s:2:"γ";s:4:"𝜹";s:2:"δ";s:4:"𝜺";s:2:"ε";s:4:"𝜻";s:2:"ζ";s:4:"𝜼";s:2:"η";s:4:"𝜽";s:2:"θ";s:4:"𝜾";s:2:"ι";s:4:"𝜿";s:2:"κ";s:4:"𝝀";s:2:"λ";s:4:"𝝁";s:2:"μ";s:4:"𝝂";s:2:"ν";s:4:"𝝃";s:2:"ξ";s:4:"𝝄";s:2:"ο";s:4:"𝝅";s:2:"π";s:4:"𝝆";s:2:"ρ";s:4:"𝝇";s:2:"ς";s:4:"𝝈";s:2:"σ";s:4:"𝝉";s:2:"τ";s:4:"𝝊";s:2:"υ";s:4:"𝝋";s:2:"φ";s:4:"𝝌";s:2:"χ";s:4:"𝝍";s:2:"ψ";s:4:"𝝎";s:2:"ω";s:4:"𝝏";s:3:"∂";s:4:"𝝐";s:2:"ε";s:4:"𝝑";s:2:"θ";s:4:"𝝒";s:2:"κ";s:4:"𝝓";s:2:"φ";s:4:"𝝔";s:2:"ρ";s:4:"𝝕";s:2:"π";s:4:"𝝖";s:2:"Α";s:4:"𝝗";s:2:"Β";s:4:"𝝘";s:2:"Γ";s:4:"𝝙";s:2:"Δ";s:4:"𝝚";s:2:"Ε";s:4:"𝝛";s:2:"Ζ";s:4:"𝝜";s:2:"Η";s:4:"𝝝";s:2:"Θ";s:4:"𝝞";s:2:"Ι";s:4:"𝝟";s:2:"Κ";s:4:"𝝠";s:2:"Λ";s:4:"𝝡";s:2:"Μ";s:4:"𝝢";s:2:"Ν";s:4:"𝝣";s:2:"Ξ";s:4:"𝝤";s:2:"Ο";s:4:"𝝥";s:2:"Π";s:4:"𝝦";s:2:"Ρ";s:4:"𝝧";s:2:"Θ";s:4:"𝝨";s:2:"Σ";s:4:"𝝩";s:2:"Τ";s:4:"𝝪";s:2:"Υ";s:4:"𝝫";s:2:"Φ";s:4:"𝝬";s:2:"Χ";s:4:"𝝭";s:2:"Ψ";s:4:"𝝮";s:2:"Ω";s:4:"𝝯";s:3:"∇";s:4:"𝝰";s:2:"α";s:4:"𝝱";s:2:"β";s:4:"𝝲";s:2:"γ";s:4:"𝝳";s:2:"δ";s:4:"𝝴";s:2:"ε";s:4:"𝝵";s:2:"ζ";s:4:"𝝶";s:2:"η";s:4:"𝝷";s:2:"θ";s:4:"𝝸";s:2:"ι";s:4:"𝝹";s:2:"κ";s:4:"𝝺";s:2:"λ";s:4:"𝝻";s:2:"μ";s:4:"𝝼";s:2:"ν";s:4:"𝝽";s:2:"ξ";s:4:"𝝾";s:2:"ο";s:4:"𝝿";s:2:"π";s:4:"𝞀";s:2:"ρ";s:4:"𝞁";s:2:"ς";s:4:"𝞂";s:2:"σ";s:4:"𝞃";s:2:"τ";s:4:"𝞄";s:2:"υ";s:4:"𝞅";s:2:"φ";s:4:"𝞆";s:2:"χ";s:4:"𝞇";s:2:"ψ";s:4:"𝞈";s:2:"ω";s:4:"𝞉";s:3:"∂";s:4:"𝞊";s:2:"ε";s:4:"𝞋";s:2:"θ";s:4:"𝞌";s:2:"κ";s:4:"𝞍";s:2:"φ";s:4:"𝞎";s:2:"ρ";s:4:"𝞏";s:2:"π";s:4:"𝞐";s:2:"Α";s:4:"𝞑";s:2:"Β";s:4:"𝞒";s:2:"Γ";s:4:"𝞓";s:2:"Δ";s:4:"𝞔";s:2:"Ε";s:4:"𝞕";s:2:"Ζ";s:4:"𝞖";s:2:"Η";s:4:"𝞗";s:2:"Θ";s:4:"𝞘";s:2:"Ι";s:4:"𝞙";s:2:"Κ";s:4:"𝞚";s:2:"Λ";s:4:"𝞛";s:2:"Μ";s:4:"𝞜";s:2:"Ν";s:4:"𝞝";s:2:"Ξ";s:4:"𝞞";s:2:"Ο";s:4:"𝞟";s:2:"Π";s:4:"𝞠";s:2:"Ρ";s:4:"𝞡";s:2:"Θ";s:4:"𝞢";s:2:"Σ";s:4:"𝞣";s:2:"Τ";s:4:"𝞤";s:2:"Υ";s:4:"𝞥";s:2:"Φ";s:4:"𝞦";s:2:"Χ";s:4:"𝞧";s:2:"Ψ";s:4:"𝞨";s:2:"Ω";s:4:"𝞩";s:3:"∇";s:4:"𝞪";s:2:"α";s:4:"𝞫";s:2:"β";s:4:"𝞬";s:2:"γ";s:4:"𝞭";s:2:"δ";s:4:"𝞮";s:2:"ε";s:4:"𝞯";s:2:"ζ";s:4:"𝞰";s:2:"η";s:4:"𝞱";s:2:"θ";s:4:"𝞲";s:2:"ι";s:4:"𝞳";s:2:"κ";s:4:"𝞴";s:2:"λ";s:4:"𝞵";s:2:"μ";s:4:"𝞶";s:2:"ν";s:4:"𝞷";s:2:"ξ";s:4:"𝞸";s:2:"ο";s:4:"𝞹";s:2:"π";s:4:"𝞺";s:2:"ρ";s:4:"𝞻";s:2:"ς";s:4:"𝞼";s:2:"σ";s:4:"𝞽";s:2:"τ";s:4:"𝞾";s:2:"υ";s:4:"𝞿";s:2:"φ";s:4:"𝟀";s:2:"χ";s:4:"𝟁";s:2:"ψ";s:4:"𝟂";s:2:"ω";s:4:"𝟃";s:3:"∂";s:4:"𝟄";s:2:"ε";s:4:"𝟅";s:2:"θ";s:4:"𝟆";s:2:"κ";s:4:"𝟇";s:2:"φ";s:4:"𝟈";s:2:"ρ";s:4:"𝟉";s:2:"π";s:4:"𝟊";s:2:"Ϝ";s:4:"𝟋";s:2:"ϝ";s:4:"𝟎";s:1:"0";s:4:"𝟏";s:1:"1";s:4:"𝟐";s:1:"2";s:4:"𝟑";s:1:"3";s:4:"𝟒";s:1:"4";s:4:"𝟓";s:1:"5";s:4:"𝟔";s:1:"6";s:4:"𝟕";s:1:"7";s:4:"𝟖";s:1:"8";s:4:"𝟗";s:1:"9";s:4:"𝟘";s:1:"0";s:4:"𝟙";s:1:"1";s:4:"𝟚";s:1:"2";s:4:"𝟛";s:1:"3";s:4:"𝟜";s:1:"4";s:4:"𝟝";s:1:"5";s:4:"𝟞";s:1:"6";s:4:"𝟟";s:1:"7";s:4:"𝟠";s:1:"8";s:4:"𝟡";s:1:"9";s:4:"𝟢";s:1:"0";s:4:"𝟣";s:1:"1";s:4:"𝟤";s:1:"2";s:4:"𝟥";s:1:"3";s:4:"𝟦";s:1:"4";s:4:"𝟧";s:1:"5";s:4:"𝟨";s:1:"6";s:4:"𝟩";s:1:"7";s:4:"𝟪";s:1:"8";s:4:"𝟫";s:1:"9";s:4:"𝟬";s:1:"0";s:4:"𝟭";s:1:"1";s:4:"𝟮";s:1:"2";s:4:"𝟯";s:1:"3";s:4:"𝟰";s:1:"4";s:4:"𝟱";s:1:"5";s:4:"𝟲";s:1:"6";s:4:"𝟳";s:1:"7";s:4:"𝟴";s:1:"8";s:4:"𝟵";s:1:"9";s:4:"𝟶";s:1:"0";s:4:"𝟷";s:1:"1";s:4:"𝟸";s:1:"2";s:4:"𝟹";s:1:"3";s:4:"𝟺";s:1:"4";s:4:"𝟻";s:1:"5";s:4:"𝟼";s:1:"6";s:4:"𝟽";s:1:"7";s:4:"𝟾";s:1:"8";s:4:"𝟿";s:1:"9";s:4:"丽";s:3:"丽";s:4:"丸";s:3:"丸";s:4:"乁";s:3:"乁";s:4:"𠄢";s:4:"𠄢";s:4:"你";s:3:"你";s:4:"侮";s:3:"侮";s:4:"侻";s:3:"侻";s:4:"倂";s:3:"倂";s:4:"偺";s:3:"偺";s:4:"備";s:3:"備";s:4:"僧";s:3:"僧";s:4:"像";s:3:"像";s:4:"㒞";s:3:"㒞";s:4:"𠘺";s:4:"𠘺";s:4:"免";s:3:"免";s:4:"兔";s:3:"兔";s:4:"兤";s:3:"兤";s:4:"具";s:3:"具";s:4:"𠔜";s:4:"𠔜";s:4:"㒹";s:3:"㒹";s:4:"內";s:3:"內";s:4:"再";s:3:"再";s:4:"𠕋";s:4:"𠕋";s:4:"冗";s:3:"冗";s:4:"冤";s:3:"冤";s:4:"仌";s:3:"仌";s:4:"冬";s:3:"冬";s:4:"况";s:3:"况";s:4:"𩇟";s:4:"𩇟";s:4:"凵";s:3:"凵";s:4:"刃";s:3:"刃";s:4:"㓟";s:3:"㓟";s:4:"刻";s:3:"刻";s:4:"剆";s:3:"剆";s:4:"割";s:3:"割";s:4:"剷";s:3:"剷";s:4:"㔕";s:3:"㔕";s:4:"勇";s:3:"勇";s:4:"勉";s:3:"勉";s:4:"勤";s:3:"勤";s:4:"勺";s:3:"勺";s:4:"包";s:3:"包";s:4:"匆";s:3:"匆";s:4:"北";s:3:"北";s:4:"卉";s:3:"卉";s:4:"卑";s:3:"卑";s:4:"博";s:3:"博";s:4:"即";s:3:"即";s:4:"卽";s:3:"卽";s:4:"卿";s:3:"卿";s:4:"卿";s:3:"卿";s:4:"卿";s:3:"卿";s:4:"𠨬";s:4:"𠨬";s:4:"灰";s:3:"灰";s:4:"及";s:3:"及";s:4:"叟";s:3:"叟";s:4:"𠭣";s:4:"𠭣";s:4:"叫";s:3:"叫";s:4:"叱";s:3:"叱";s:4:"吆";s:3:"吆";s:4:"咞";s:3:"咞";s:4:"吸";s:3:"吸";s:4:"呈";s:3:"呈";s:4:"周";s:3:"周";s:4:"咢";s:3:"咢";s:4:"哶";s:3:"哶";s:4:"唐";s:3:"唐";s:4:"啓";s:3:"啓";s:4:"啣";s:3:"啣";s:4:"善";s:3:"善";s:4:"善";s:3:"善";s:4:"喙";s:3:"喙";s:4:"喫";s:3:"喫";s:4:"喳";s:3:"喳";s:4:"嗂";s:3:"嗂";s:4:"圖";s:3:"圖";s:4:"嘆";s:3:"嘆";s:4:"圗";s:3:"圗";s:4:"噑";s:3:"噑";s:4:"噴";s:3:"噴";s:4:"切";s:3:"切";s:4:"壮";s:3:"壮";s:4:"城";s:3:"城";s:4:"埴";s:3:"埴";s:4:"堍";s:3:"堍";s:4:"型";s:3:"型";s:4:"堲";s:3:"堲";s:4:"報";s:3:"報";s:4:"墬";s:3:"墬";s:4:"𡓤";s:4:"𡓤";s:4:"売";s:3:"売";s:4:"壷";s:3:"壷";s:4:"夆";s:3:"夆";s:4:"多";s:3:"多";s:4:"夢";s:3:"夢";s:4:"奢";s:3:"奢";s:4:"𡚨";s:4:"𡚨";s:4:"𡛪";s:4:"𡛪";s:4:"姬";s:3:"姬";s:4:"娛";s:3:"娛";s:4:"娧";s:3:"娧";s:4:"姘";s:3:"姘";s:4:"婦";s:3:"婦";s:4:"㛮";s:3:"㛮";s:4:"㛼";s:3:"㛼";s:4:"嬈";s:3:"嬈";s:4:"嬾";s:3:"嬾";s:4:"嬾";s:3:"嬾";s:4:"𡧈";s:4:"𡧈";s:4:"寃";s:3:"寃";s:4:"寘";s:3:"寘";s:4:"寧";s:3:"寧";s:4:"寳";s:3:"寳";s:4:"𡬘";s:4:"𡬘";s:4:"寿";s:3:"寿";s:4:"将";s:3:"将";s:4:"当";s:3:"当";s:4:"尢";s:3:"尢";s:4:"㞁";s:3:"㞁";s:4:"屠";s:3:"屠";s:4:"屮";s:3:"屮";s:4:"峀";s:3:"峀";s:4:"岍";s:3:"岍";s:4:"𡷤";s:4:"𡷤";s:4:"嵃";s:3:"嵃";s:4:"𡷦";s:4:"𡷦";s:4:"嵮";s:3:"嵮";s:4:"嵫";s:3:"嵫";s:4:"嵼";s:3:"嵼";s:4:"巡";s:3:"巡";s:4:"巢";s:3:"巢";s:4:"㠯";s:3:"㠯";s:4:"巽";s:3:"巽";s:4:"帨";s:3:"帨";s:4:"帽";s:3:"帽";s:4:"幩";s:3:"幩";s:4:"㡢";s:3:"㡢";s:4:"𢆃";s:4:"𢆃";s:4:"㡼";s:3:"㡼";s:4:"庰";s:3:"庰";s:4:"庳";s:3:"庳";s:4:"庶";s:3:"庶";s:4:"廊";s:3:"廊";s:4:"𪎒";s:4:"𪎒";s:4:"廾";s:3:"廾";s:4:"𢌱";s:4:"𢌱";s:4:"𢌱";s:4:"𢌱";s:4:"舁";s:3:"舁";s:4:"弢";s:3:"弢";s:4:"弢";s:3:"弢";s:4:"㣇";s:3:"㣇";s:4:"𣊸";s:4:"𣊸";s:4:"𦇚";s:4:"𦇚";s:4:"形";s:3:"形";s:4:"彫";s:3:"彫";s:4:"㣣";s:3:"㣣";s:4:"徚";s:3:"徚";s:4:"忍";s:3:"忍";s:4:"志";s:3:"志";s:4:"忹";s:3:"忹";s:4:"悁";s:3:"悁";s:4:"㤺";s:3:"㤺";s:4:"㤜";s:3:"㤜";s:4:"悔";s:3:"悔";s:4:"𢛔";s:4:"𢛔";s:4:"惇";s:3:"惇";s:4:"慈";s:3:"慈";s:4:"慌";s:3:"慌";s:4:"慎";s:3:"慎";s:4:"慌";s:3:"慌";s:4:"慺";s:3:"慺";s:4:"憎";s:3:"憎";s:4:"憲";s:3:"憲";s:4:"憤";s:3:"憤";s:4:"憯";s:3:"憯";s:4:"懞";s:3:"懞";s:4:"懲";s:3:"懲";s:4:"懶";s:3:"懶";s:4:"成";s:3:"成";s:4:"戛";s:3:"戛";s:4:"扝";s:3:"扝";s:4:"抱";s:3:"抱";s:4:"拔";s:3:"拔";s:4:"捐";s:3:"捐";s:4:"𢬌";s:4:"𢬌";s:4:"挽";s:3:"挽";s:4:"拼";s:3:"拼";s:4:"捨";s:3:"捨";s:4:"掃";s:3:"掃";s:4:"揤";s:3:"揤";s:4:"𢯱";s:4:"𢯱";s:4:"搢";s:3:"搢";s:4:"揅";s:3:"揅";s:4:"掩";s:3:"掩";s:4:"㨮";s:3:"㨮";s:4:"摩";s:3:"摩";s:4:"摾";s:3:"摾";s:4:"撝";s:3:"撝";s:4:"摷";s:3:"摷";s:4:"㩬";s:3:"㩬";s:4:"敏";s:3:"敏";s:4:"敬";s:3:"敬";s:4:"𣀊";s:4:"𣀊";s:4:"旣";s:3:"旣";s:4:"書";s:3:"書";s:4:"晉";s:3:"晉";s:4:"㬙";s:3:"㬙";s:4:"暑";s:3:"暑";s:4:"㬈";s:3:"㬈";s:4:"㫤";s:3:"㫤";s:4:"冒";s:3:"冒";s:4:"冕";s:3:"冕";s:4:"最";s:3:"最";s:4:"暜";s:3:"暜";s:4:"肭";s:3:"肭";s:4:"䏙";s:3:"䏙";s:4:"朗";s:3:"朗";s:4:"望";s:3:"望";s:4:"朡";s:3:"朡";s:4:"杞";s:3:"杞";s:4:"杓";s:3:"杓";s:4:"𣏃";s:4:"𣏃";s:4:"㭉";s:3:"㭉";s:4:"柺";s:3:"柺";s:4:"枅";s:3:"枅";s:4:"桒";s:3:"桒";s:4:"梅";s:3:"梅";s:4:"𣑭";s:4:"𣑭";s:4:"梎";s:3:"梎";s:4:"栟";s:3:"栟";s:4:"椔";s:3:"椔";s:4:"㮝";s:3:"㮝";s:4:"楂";s:3:"楂";s:4:"榣";s:3:"榣";s:4:"槪";s:3:"槪";s:4:"檨";s:3:"檨";s:4:"𣚣";s:4:"𣚣";s:4:"櫛";s:3:"櫛";s:4:"㰘";s:3:"㰘";s:4:"次";s:3:"次";s:4:"𣢧";s:4:"𣢧";s:4:"歔";s:3:"歔";s:4:"㱎";s:3:"㱎";s:4:"歲";s:3:"歲";s:4:"殟";s:3:"殟";s:4:"殺";s:3:"殺";s:4:"殻";s:3:"殻";s:4:"𣪍";s:4:"𣪍";s:4:"𡴋";s:4:"𡴋";s:4:"𣫺";s:4:"𣫺";s:4:"汎";s:3:"汎";s:4:"𣲼";s:4:"𣲼";s:4:"沿";s:3:"沿";s:4:"泍";s:3:"泍";s:4:"汧";s:3:"汧";s:4:"洖";s:3:"洖";s:4:"派";s:3:"派";s:4:"海";s:3:"海";s:4:"流";s:3:"流";s:4:"浩";s:3:"浩";s:4:"浸";s:3:"浸";s:4:"涅";s:3:"涅";s:4:"𣴞";s:4:"𣴞";s:4:"洴";s:3:"洴";s:4:"港";s:3:"港";s:4:"湮";s:3:"湮";s:4:"㴳";s:3:"㴳";s:4:"滋";s:3:"滋";s:4:"滇";s:3:"滇";s:4:"𣻑";s:4:"𣻑";s:4:"淹";s:3:"淹";s:4:"潮";s:3:"潮";s:4:"𣽞";s:4:"𣽞";s:4:"𣾎";s:4:"𣾎";s:4:"濆";s:3:"濆";s:4:"瀹";s:3:"瀹";s:4:"瀞";s:3:"瀞";s:4:"瀛";s:3:"瀛";s:4:"㶖";s:3:"㶖";s:4:"灊";s:3:"灊";s:4:"災";s:3:"災";s:4:"灷";s:3:"灷";s:4:"炭";s:3:"炭";s:4:"𠔥";s:4:"𠔥";s:4:"煅";s:3:"煅";s:4:"𤉣";s:4:"𤉣";s:4:"熜";s:3:"熜";s:4:"𤎫";s:4:"𤎫";s:4:"爨";s:3:"爨";s:4:"爵";s:3:"爵";s:4:"牐";s:3:"牐";s:4:"𤘈";s:4:"𤘈";s:4:"犀";s:3:"犀";s:4:"犕";s:3:"犕";s:4:"𤜵";s:4:"𤜵";s:4:"𤠔";s:4:"𤠔";s:4:"獺";s:3:"獺";s:4:"王";s:3:"王";s:4:"㺬";s:3:"㺬";s:4:"玥";s:3:"玥";s:4:"㺸";s:3:"㺸";s:4:"㺸";s:3:"㺸";s:4:"瑇";s:3:"瑇";s:4:"瑜";s:3:"瑜";s:4:"瑱";s:3:"瑱";s:4:"璅";s:3:"璅";s:4:"瓊";s:3:"瓊";s:4:"㼛";s:3:"㼛";s:4:"甤";s:3:"甤";s:4:"𤰶";s:4:"𤰶";s:4:"甾";s:3:"甾";s:4:"𤲒";s:4:"𤲒";s:4:"異";s:3:"異";s:4:"𢆟";s:4:"𢆟";s:4:"瘐";s:3:"瘐";s:4:"𤾡";s:4:"𤾡";s:4:"𤾸";s:4:"𤾸";s:4:"𥁄";s:4:"𥁄";s:4:"㿼";s:3:"㿼";s:4:"䀈";s:3:"䀈";s:4:"直";s:3:"直";s:4:"𥃳";s:4:"𥃳";s:4:"𥃲";s:4:"𥃲";s:4:"𥄙";s:4:"𥄙";s:4:"𥄳";s:4:"𥄳";s:4:"眞";s:3:"眞";s:4:"真";s:3:"真";s:4:"真";s:3:"真";s:4:"睊";s:3:"睊";s:4:"䀹";s:3:"䀹";s:4:"瞋";s:3:"瞋";s:4:"䁆";s:3:"䁆";s:4:"䂖";s:3:"䂖";s:4:"𥐝";s:4:"𥐝";s:4:"硎";s:3:"硎";s:4:"碌";s:3:"碌";s:4:"磌";s:3:"磌";s:4:"䃣";s:3:"䃣";s:4:"𥘦";s:4:"𥘦";s:4:"祖";s:3:"祖";s:4:"𥚚";s:4:"𥚚";s:4:"𥛅";s:4:"𥛅";s:4:"福";s:3:"福";s:4:"秫";s:3:"秫";s:4:"䄯";s:3:"䄯";s:4:"穀";s:3:"穀";s:4:"穊";s:3:"穊";s:4:"穏";s:3:"穏";s:4:"𥥼";s:4:"𥥼";s:4:"𥪧";s:4:"𥪧";s:4:"𥪧";s:4:"𥪧";s:4:"竮";s:3:"竮";s:4:"䈂";s:3:"䈂";s:4:"𥮫";s:4:"𥮫";s:4:"篆";s:3:"篆";s:4:"築";s:3:"築";s:4:"䈧";s:3:"䈧";s:4:"𥲀";s:4:"𥲀";s:4:"糒";s:3:"糒";s:4:"䊠";s:3:"䊠";s:4:"糨";s:3:"糨";s:4:"糣";s:3:"糣";s:4:"紀";s:3:"紀";s:4:"𥾆";s:4:"𥾆";s:4:"絣";s:3:"絣";s:4:"䌁";s:3:"䌁";s:4:"緇";s:3:"緇";s:4:"縂";s:3:"縂";s:4:"繅";s:3:"繅";s:4:"䌴";s:3:"䌴";s:4:"𦈨";s:4:"𦈨";s:4:"𦉇";s:4:"𦉇";s:4:"䍙";s:3:"䍙";s:4:"𦋙";s:4:"𦋙";s:4:"罺";s:3:"罺";s:4:"𦌾";s:4:"𦌾";s:4:"羕";s:3:"羕";s:4:"翺";s:3:"翺";s:4:"者";s:3:"者";s:4:"𦓚";s:4:"𦓚";s:4:"𦔣";s:4:"𦔣";s:4:"聠";s:3:"聠";s:4:"𦖨";s:4:"𦖨";s:4:"聰";s:3:"聰";s:4:"𣍟";s:4:"𣍟";s:4:"䏕";s:3:"䏕";s:4:"育";s:3:"育";s:4:"脃";s:3:"脃";s:4:"䐋";s:3:"䐋";s:4:"脾";s:3:"脾";s:4:"媵";s:3:"媵";s:4:"𦞧";s:4:"𦞧";s:4:"𦞵";s:4:"𦞵";s:4:"𣎓";s:4:"𣎓";s:4:"𣎜";s:4:"𣎜";s:4:"舁";s:3:"舁";s:4:"舄";s:3:"舄";s:4:"辞";s:3:"辞";s:4:"䑫";s:3:"䑫";s:4:"芑";s:3:"芑";s:4:"芋";s:3:"芋";s:4:"芝";s:3:"芝";s:4:"劳";s:3:"劳";s:4:"花";s:3:"花";s:4:"芳";s:3:"芳";s:4:"芽";s:3:"芽";s:4:"苦";s:3:"苦";s:4:"𦬼";s:4:"𦬼";s:4:"若";s:3:"若";s:4:"茝";s:3:"茝";s:4:"荣";s:3:"荣";s:4:"莭";s:3:"莭";s:4:"茣";s:3:"茣";s:4:"莽";s:3:"莽";s:4:"菧";s:3:"菧";s:4:"著";s:3:"著";s:4:"荓";s:3:"荓";s:4:"菊";s:3:"菊";s:4:"菌";s:3:"菌";s:4:"菜";s:3:"菜";s:4:"𦰶";s:4:"𦰶";s:4:"𦵫";s:4:"𦵫";s:4:"𦳕";s:4:"𦳕";s:4:"䔫";s:3:"䔫";s:4:"蓱";s:3:"蓱";s:4:"蓳";s:3:"蓳";s:4:"蔖";s:3:"蔖";s:4:"𧏊";s:4:"𧏊";s:4:"蕤";s:3:"蕤";s:4:"𦼬";s:4:"𦼬";s:4:"䕝";s:3:"䕝";s:4:"䕡";s:3:"䕡";s:4:"𦾱";s:4:"𦾱";s:4:"𧃒";s:4:"𧃒";s:4:"䕫";s:3:"䕫";s:4:"虐";s:3:"虐";s:4:"虜";s:3:"虜";s:4:"虧";s:3:"虧";s:4:"虩";s:3:"虩";s:4:"蚩";s:3:"蚩";s:4:"蚈";s:3:"蚈";s:4:"蜎";s:3:"蜎";s:4:"蛢";s:3:"蛢";s:4:"蝹";s:3:"蝹";s:4:"蜨";s:3:"蜨";s:4:"蝫";s:3:"蝫";s:4:"螆";s:3:"螆";s:4:"䗗";s:3:"䗗";s:4:"蟡";s:3:"蟡";s:4:"蠁";s:3:"蠁";s:4:"䗹";s:3:"䗹";s:4:"衠";s:3:"衠";s:4:"衣";s:3:"衣";s:4:"𧙧";s:4:"𧙧";s:4:"裗";s:3:"裗";s:4:"裞";s:3:"裞";s:4:"䘵";s:3:"䘵";s:4:"裺";s:3:"裺";s:4:"㒻";s:3:"㒻";s:4:"𧢮";s:4:"𧢮";s:4:"𧥦";s:4:"𧥦";s:4:"䚾";s:3:"䚾";s:4:"䛇";s:3:"䛇";s:4:"誠";s:3:"誠";s:4:"諭";s:3:"諭";s:4:"變";s:3:"變";s:4:"豕";s:3:"豕";s:4:"𧲨";s:4:"𧲨";s:4:"貫";s:3:"貫";s:4:"賁";s:3:"賁";s:4:"贛";s:3:"贛";s:4:"起";s:3:"起";s:4:"𧼯";s:4:"𧼯";s:4:"𠠄";s:4:"𠠄";s:4:"跋";s:3:"跋";s:4:"趼";s:3:"趼";s:4:"跰";s:3:"跰";s:4:"𠣞";s:4:"𠣞";s:4:"軔";s:3:"軔";s:4:"輸";s:3:"輸";s:4:"𨗒";s:4:"𨗒";s:4:"𨗭";s:4:"𨗭";s:4:"邔";s:3:"邔";s:4:"郱";s:3:"郱";s:4:"鄑";s:3:"鄑";s:4:"𨜮";s:4:"𨜮";s:4:"鄛";s:3:"鄛";s:4:"鈸";s:3:"鈸";s:4:"鋗";s:3:"鋗";s:4:"鋘";s:3:"鋘";s:4:"鉼";s:3:"鉼";s:4:"鏹";s:3:"鏹";s:4:"鐕";s:3:"鐕";s:4:"𨯺";s:4:"𨯺";s:4:"開";s:3:"開";s:4:"䦕";s:3:"䦕";s:4:"閷";s:3:"閷";s:4:"𨵷";s:4:"𨵷";s:4:"䧦";s:3:"䧦";s:4:"雃";s:3:"雃";s:4:"嶲";s:3:"嶲";s:4:"霣";s:3:"霣";s:4:"𩅅";s:4:"𩅅";s:4:"𩈚";s:4:"𩈚";s:4:"䩮";s:3:"䩮";s:4:"䩶";s:3:"䩶";s:4:"韠";s:3:"韠";s:4:"𩐊";s:4:"𩐊";s:4:"䪲";s:3:"䪲";s:4:"𩒖";s:4:"𩒖";s:4:"頋";s:3:"頋";s:4:"頋";s:3:"頋";s:4:"頩";s:3:"頩";s:4:"𩖶";s:4:"𩖶";s:4:"飢";s:3:"飢";s:4:"䬳";s:3:"䬳";s:4:"餩";s:3:"餩";s:4:"馧";s:3:"馧";s:4:"駂";s:3:"駂";s:4:"駾";s:3:"駾";s:4:"䯎";s:3:"䯎";s:4:"𩬰";s:4:"𩬰";s:4:"鬒";s:3:"鬒";s:4:"鱀";s:3:"鱀";s:4:"鳽";s:3:"鳽";s:4:"䳎";s:3:"䳎";s:4:"䳭";s:3:"䳭";s:4:"鵧";s:3:"鵧";s:4:"𪃎";s:4:"𪃎";s:4:"䳸";s:3:"䳸";s:4:"𪄅";s:4:"𪄅";s:4:"𪈎";s:4:"𪈎";s:4:"𪊑";s:4:"𪊑";s:4:"麻";s:3:"麻";s:4:"䵖";s:3:"䵖";s:4:"黹";s:3:"黹";s:4:"黾";s:3:"黾";s:4:"鼅";s:3:"鼅";s:4:"鼏";s:3:"鼏";s:4:"鼖";s:3:"鼖";s:4:"鼻";s:3:"鼻";s:4:"𪘀";s:4:"𪘀";}' );
+?>
Index: /MediaWiki/branches/1.11/includes/normal/UtfNormalGenerate.php
===================================================================
--- /MediaWiki/branches/1.11/includes/normal/UtfNormalGenerate.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/normal/UtfNormalGenerate.php	(revision 1280)
@@ -0,0 +1,234 @@
+<?php
+# Copyright (C) 2004 Brion Vibber <brion@pobox.com>
+# http://www.mediawiki.org/
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+# http://www.gnu.org/copyleft/gpl.html
+
+/**
+ * This script generates UniNormalData.inc from the Unicode Character Database
+ * and supplementary files.
+ *
+ * @addtogroup UtfNormal
+ * @access private
+ */
+
+/** */
+
+if( php_sapi_name() != 'cli' ) {
+	die( "Run me from the command line please.\n" );
+}
+
+require_once 'UtfNormalUtil.php';
+
+$in = fopen("DerivedNormalizationProps.txt", "rt" );
+if( !$in ) {
+	print "Can't open DerivedNormalizationProps.txt for reading.\n";
+	print "If necessary, fetch this file from the internet:\n";
+	print "http://www.unicode.org/Public/UNIDATA/CompositionExclusions.txt\n";
+	exit(-1);
+}
+print "Initializing normalization quick check tables...\n";
+$checkNFC = array();
+while( false !== ($line = fgets( $in ) ) ) {
+	$matches = array();
+	if( preg_match( '/^([0-9A-F]+)(?:..([0-9A-F]+))?\s*;\s*(NFC_QC)\s*;\s*([MN])/', $line, $matches ) ) {
+		list( $junk, $first, $last, $prop, $value ) = $matches;
+		#print "$first $last $prop $value\n";
+		if( !$last ) $last = $first;
+		for( $i = hexdec( $first ); $i <= hexdec( $last ); $i++) {
+			$char = codepointToUtf8( $i );
+			$checkNFC[$char] = $value;
+		}
+	}
+}
+fclose( $in );
+
+$in = fopen("CompositionExclusions.txt", "rt" );
+if( !$in ) {
+	print "Can't open CompositionExclusions.txt for reading.\n";
+	print "If necessary, fetch this file from the internet:\n";
+	print "http://www.unicode.org/Public/UNIDATA/CompositionExclusions.txt\n";
+	exit(-1);
+}
+$exclude = array();
+while( false !== ($line = fgets( $in ) ) ) {
+	if( preg_match( '/^([0-9A-F]+)/i', $line, $matches ) ) {
+		$codepoint = $matches[1];
+		$source = codepointToUtf8( hexdec( $codepoint ) );
+		$exclude[$source] = true;
+	}
+}
+fclose($in);
+
+$in = fopen("UnicodeData.txt", "rt" );
+if( !$in ) {
+	print "Can't open UnicodeData.txt for reading.\n";
+	print "If necessary, fetch this file from the internet:\n";
+	print "http://www.unicode.org/Public/UNIDATA/UnicodeData.txt\n";
+	exit(-1);
+}
+
+$compatibilityDecomp = array();
+$canonicalDecomp = array();
+$canonicalComp = array();
+$combiningClass = array();
+$total = 0;
+$compat = 0;
+$canon = 0;
+
+print "Reading character definitions...\n";
+while( false !== ($line = fgets( $in ) ) ) {
+	$columns = split(';', $line);
+	$codepoint = $columns[0];
+	$name = $columns[1];
+	$canonicalCombiningClass = $columns[3];
+	$decompositionMapping = $columns[5];
+
+	$source = codepointToUtf8( hexdec( $codepoint ) );
+
+	if( $canonicalCombiningClass != 0 ) {
+		$combiningClass[$source] = intval( $canonicalCombiningClass );
+	}
+
+	if( $decompositionMapping === '' ) continue;
+	if( preg_match( '/^<(.+)> (.*)$/', $decompositionMapping, $matches ) ) {
+		# Compatibility decomposition
+		$canonical = false;
+		$decompositionMapping = $matches[2];
+		$compat++;
+	} else {
+		$canonical = true;
+		$canon++;
+	}
+	$total++;
+	$dest = hexSequenceToUtf8( $decompositionMapping );
+
+	$compatibilityDecomp[$source] = $dest;
+	if( $canonical ) {
+		$canonicalDecomp[$source] = $dest;
+		if( empty( $exclude[$source] ) ) {
+			$canonicalComp[$dest] = $source;
+		}
+	}
+	#print "$codepoint | $canonicalCombiningClasses | $decompositionMapping\n";
+}
+fclose( $in );
+
+print "Recursively expanding canonical mappings...\n";
+$changed = 42;
+$pass = 1;
+while( $changed > 0 ) {
+	print "pass $pass\n";
+	$changed = 0;
+	foreach( $canonicalDecomp as $source => $dest ) {
+		$newDest = preg_replace_callback(
+			'/([\xc0-\xff][\x80-\xbf]+)/',
+			'callbackCanonical',
+			$dest);
+		if( $newDest === $dest ) continue;
+		$changed++;
+		$canonicalDecomp[$source] = $newDest;
+	}
+	$pass++;
+}
+
+print "Recursively expanding compatibility mappings...\n";
+$changed = 42;
+$pass = 1;
+while( $changed > 0 ) {
+	print "pass $pass\n";
+	$changed = 0;
+	foreach( $compatibilityDecomp as $source => $dest ) {
+		$newDest = preg_replace_callback(
+			'/([\xc0-\xff][\x80-\xbf]+)/',
+			'callbackCompat',
+			$dest);
+		if( $newDest === $dest ) continue;
+		$changed++;
+		$compatibilityDecomp[$source] = $newDest;
+	}
+	$pass++;
+}
+
+print "$total decomposition mappings ($canon canonical, $compat compatibility)\n";
+
+$out = fopen("UtfNormalData.inc", "wt");
+if( $out ) {
+	$serCombining = escapeSingleString( serialize( $combiningClass ) );
+	$serComp = escapeSingleString( serialize( $canonicalComp ) );
+	$serCanon = escapeSingleString( serialize( $canonicalDecomp ) );
+	$serCheckNFC = escapeSingleString( serialize( $checkNFC ) );
+	$outdata = "<" . "?php
+/**
+ * This file was automatically generated -- do not edit!
+ * Run UtfNormalGenerate.php to create this file again (make clean && make)
+ */
+/** */
+global \$utfCombiningClass, \$utfCanonicalComp, \$utfCanonicalDecomp, \$utfCheckNFC;
+\$utfCombiningClass = unserialize( '$serCombining' );
+\$utfCanonicalComp = unserialize( '$serComp' );
+\$utfCanonicalDecomp = unserialize( '$serCanon' );
+\$utfCheckNFC = unserialize( '$serCheckNFC' );
+?" . ">\n";
+	fputs( $out, $outdata );
+	fclose( $out );
+	print "Wrote out UtfNormalData.inc\n";
+} else {
+	print "Can't create file UtfNormalData.inc\n";
+	exit(-1);
+}
+
+
+$out = fopen("UtfNormalDataK.inc", "wt");
+if( $out ) {
+	$serCompat = escapeSingleString( serialize( $compatibilityDecomp ) );
+	$outdata = "<" . "?php
+/**
+ * This file was automatically generated -- do not edit!
+ * Run UtfNormalGenerate.php to create this file again (make clean && make)
+ */
+/** */
+global \$utfCompatibilityDecomp;
+\$utfCompatibilityDecomp = unserialize( '$serCompat' );
+?" . ">\n";
+	fputs( $out, $outdata );
+	fclose( $out );
+	print "Wrote out UtfNormalDataK.inc\n";
+	exit(0);
+} else {
+	print "Can't create file UtfNormalDataK.inc\n";
+	exit(-1);
+}
+
+# ---------------
+
+function callbackCanonical( $matches ) {
+	global $canonicalDecomp;
+	if( isset( $canonicalDecomp[$matches[1]] ) ) {
+		return $canonicalDecomp[$matches[1]];
+	}
+	return $matches[1];
+}
+
+function callbackCompat( $matches ) {
+	global $compatibilityDecomp;
+	if( isset( $compatibilityDecomp[$matches[1]] ) ) {
+		return $compatibilityDecomp[$matches[1]];
+	}
+	return $matches[1];
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/normal/UtfNormalTest.php
===================================================================
--- /MediaWiki/branches/1.11/includes/normal/UtfNormalTest.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/normal/UtfNormalTest.php	(revision 1280)
@@ -0,0 +1,249 @@
+<?php
+# Copyright (C) 2004 Brion Vibber <brion@pobox.com>
+# http://www.mediawiki.org/
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+# http://www.gnu.org/copyleft/gpl.html
+
+/**
+ * Implements the conformance test at:
+ * http://www.unicode.org/Public/UNIDATA/NormalizationTest.txt
+ * @addtogroup UtfNormal
+ */
+
+/** */
+$verbose = true;
+#define( 'PRETTY_UTF8', true );
+
+if( defined( 'PRETTY_UTF8' ) ) {
+	function pretty( $string ) {
+		return preg_replace( '/([\x00-\xff])/e',
+			'sprintf("%02X", ord("$1"))',
+			$string );
+	}
+} else {
+	/**
+	 * @ignore
+	 */
+	function pretty( $string ) {
+		return trim( preg_replace( '/(.)/use',
+			'sprintf("%04X ", utf8ToCodepoint("$1"))',
+			$string ) );
+	}
+}
+
+if( isset( $_SERVER['argv'] ) && in_array( '--icu', $_SERVER['argv'] ) ) {
+	dl( 'php_utfnormal.so' );
+}
+
+require_once 'UtfNormalUtil.php';
+require_once 'UtfNormal.php';
+
+if( php_sapi_name() != 'cli' ) {
+	die( "Run me from the command line please.\n" );
+}
+
+$in = fopen("NormalizationTest.txt", "rt");
+if( !$in ) {
+	print "Couldn't open NormalizationTest.txt -- can't run tests.\n";
+	print "If necessary, manually download this file. It can be obtained at\n";
+	print "http://www.unicode.org/Public/UNIDATA/NormalizationTest.txt";
+	exit(-1);
+}
+
+$normalizer = new UtfNormal;
+
+$total = 0;
+$success = 0;
+$failure = 0;
+$ok = true;
+$testedChars = array();
+while( false !== ( $line = fgets( $in ) ) ) {
+	list( $data, $comment ) = explode( '#', $line );
+	if( $data === '' ) continue;
+	$matches = array();
+	if( preg_match( '/@Part([\d])/', $data, $matches ) ) {
+		if( $matches[1] > 0 ) {
+			$ok = reportResults( $total, $success, $failure ) && $ok;
+		}
+		print "Part {$matches[1]}: $comment";
+		continue;
+	}
+
+	$columns = array_map( "hexSequenceToUtf8", explode( ";", $data ) );
+	array_unshift( $columns, '' );
+
+	$testedChars[$columns[1]] = true;
+	$total++;
+	if( testNormals( $normalizer, $columns, $comment ) ) {
+		$success++;
+	} else {
+		$failure++;
+		# print "FAILED: $comment";
+	}
+	if( $total % 100 == 0 ) print "$total ";
+}
+fclose( $in );
+
+$ok = reportResults( $total, $success, $failure ) && $ok;
+
+$in = fopen("UnicodeData.txt", "rt" );
+if( !$in ) {
+	print "Can't open UnicodeData.txt for reading.\n";
+	print "If necessary, fetch this file from the internet:\n";
+	print "http://www.unicode.org/Public/UNIDATA/UnicodeData.txt\n";
+	exit(-1);
+}
+print "Now testing invariants...\n";
+while( false !== ($line = fgets( $in ) ) ) {
+	$cols = explode( ';', $line );
+	$char = codepointToUtf8( hexdec( $cols[0] ) );
+	$desc = $cols[0] . ": " . $cols[1];
+	if( $char < "\x20" || $char >= UTF8_SURROGATE_FIRST && $char <= UTF8_SURROGATE_LAST ) {
+		# Can't check NULL with the ICU plugin, as null bytes fail in C land.
+		# Skip other control characters, as we strip them for XML safety.
+		# Surrogates are illegal on their own or in UTF-8, ignore.
+		continue;
+	}
+	if( empty( $testedChars[$char] ) ) {
+		$total++;
+		if( testInvariant( $normalizer, $char, $desc ) ) {
+			$success++;
+		} else {
+			$failure++;
+		}
+		if( $total % 100 == 0 ) print "$total ";
+	}
+}
+fclose( $in );
+
+$ok = reportResults( $total, $success, $failure ) && $ok;
+
+if( $ok ) {
+	print "TEST SUCCEEDED!\n";
+	exit(0);
+} else {
+	print "TEST FAILED!\n";
+	exit(-1);
+}
+
+## ------
+
+function reportResults( &$total, &$success, &$failure ) {
+	$percSucc = intval( $success * 100 / $total );
+	$percFail = intval( $failure * 100 / $total );
+	print "\n";
+	print "$success tests successful ($percSucc%)\n";
+	print "$failure tests failed ($percFail%)\n\n";
+	$ok = ($success > 0 && $failure == 0);
+	$total = 0;
+	$success = 0;
+	$failure = 0;
+	return $ok;
+}
+
+function testNormals( &$u, $c, $comment, $reportFailure = false ) {
+	$result = testNFC( $u, $c, $comment, $reportFailure );
+	$result = testNFD( $u, $c, $comment, $reportFailure ) && $result;
+	$result = testNFKC( $u, $c, $comment, $reportFailure ) && $result;
+	$result = testNFKD( $u, $c, $comment, $reportFailure ) && $result;
+	$result = testCleanUp( $u, $c, $comment, $reportFailure ) && $result;
+
+	global $verbose;
+	if( $verbose && !$result && !$reportFailure ) {
+		print $comment;
+		testNormals( $u, $c, $comment, true );
+	}
+	return $result;
+}
+
+function verbosify( $a, $b, $col, $form, $verbose ) {
+	#$result = ($a === $b);
+	$result = (strcmp( $a, $b ) == 0);
+	if( $verbose ) {
+		$aa = pretty( $a );
+		$bb = pretty( $b );
+		$ok = $result ? "succeed" : " failed";
+		$eq = $result ? "==" : "!=";
+		print "  $ok $form c$col '$aa' $eq '$bb'\n";
+	}
+	return $result;
+}
+
+function testNFC( &$u, $c, $comment, $verbose ) {
+	$result = verbosify( $c[2], $u->toNFC( $c[1] ), 1, 'NFC', $verbose );
+	$result = verbosify( $c[2], $u->toNFC( $c[2] ), 2, 'NFC', $verbose ) && $result;
+	$result = verbosify( $c[2], $u->toNFC( $c[3] ), 3, 'NFC', $verbose ) && $result;
+	$result = verbosify( $c[4], $u->toNFC( $c[4] ), 4, 'NFC', $verbose ) && $result;
+	$result = verbosify( $c[4], $u->toNFC( $c[5] ), 5, 'NFC', $verbose ) && $result;
+	return $result;
+}
+
+function testCleanUp( &$u, $c, $comment, $verbose ) {
+	$x = $c[1];
+	$result = verbosify( $c[2], $u->cleanUp( $x ), 1, 'cleanUp', $verbose );
+	$x = $c[2];
+	$result = verbosify( $c[2], $u->cleanUp( $x ), 2, 'cleanUp', $verbose ) && $result;
+	$x = $c[3];
+	$result = verbosify( $c[2], $u->cleanUp( $x ), 3, 'cleanUp', $verbose ) && $result;
+	$x = $c[4];
+	$result = verbosify( $c[4], $u->cleanUp( $x ), 4, 'cleanUp', $verbose ) && $result;
+	$x = $c[5];
+	$result = verbosify( $c[4], $u->cleanUp( $x ), 5, 'cleanUp', $verbose ) && $result;
+	return $result;
+}
+
+function testNFD( &$u, $c, $comment, $verbose ) {
+	$result = verbosify( $c[3], $u->toNFD( $c[1] ), 1, 'NFD', $verbose );
+	$result = verbosify( $c[3], $u->toNFD( $c[2] ), 2, 'NFD', $verbose ) && $result;
+	$result = verbosify( $c[3], $u->toNFD( $c[3] ), 3, 'NFD', $verbose ) && $result;
+	$result = verbosify( $c[5], $u->toNFD( $c[4] ), 4, 'NFD', $verbose ) && $result;
+	$result = verbosify( $c[5], $u->toNFD( $c[5] ), 5, 'NFD', $verbose ) && $result;
+	return $result;
+}
+
+function testNFKC( &$u, $c, $comment, $verbose ) {
+	$result = verbosify( $c[4], $u->toNFKC( $c[1] ), 1, 'NFKC', $verbose );
+	$result = verbosify( $c[4], $u->toNFKC( $c[2] ), 2, 'NFKC', $verbose ) && $result;
+	$result = verbosify( $c[4], $u->toNFKC( $c[3] ), 3, 'NFKC', $verbose ) && $result;
+	$result = verbosify( $c[4], $u->toNFKC( $c[4] ), 4, 'NFKC', $verbose ) && $result;
+	$result = verbosify( $c[4], $u->toNFKC( $c[5] ), 5, 'NFKC', $verbose ) && $result;
+	return $result;
+}
+
+function testNFKD( &$u, $c, $comment, $verbose ) {
+	$result = verbosify( $c[5], $u->toNFKD( $c[1] ), 1, 'NFKD', $verbose );
+	$result = verbosify( $c[5], $u->toNFKD( $c[2] ), 2, 'NFKD', $verbose ) && $result;
+	$result = verbosify( $c[5], $u->toNFKD( $c[3] ), 3, 'NFKD', $verbose ) && $result;
+	$result = verbosify( $c[5], $u->toNFKD( $c[4] ), 4, 'NFKD', $verbose ) && $result;
+	$result = verbosify( $c[5], $u->toNFKD( $c[5] ), 5, 'NFKD', $verbose ) && $result;
+	return $result;
+}
+
+function testInvariant( &$u, $char, $desc, $reportFailure = false ) {
+	$result = verbosify( $char, $u->toNFC( $char ), 1, 'NFC', $reportFailure );
+	$result = verbosify( $char, $u->toNFD( $char ), 1, 'NFD', $reportFailure ) && $result;
+	$result = verbosify( $char, $u->toNFKC( $char ), 1, 'NFKC', $reportFailure ) && $result;
+	$result = verbosify( $char, $u->toNFKD( $char ), 1, 'NFKD', $reportFailure ) && $result;
+	$result = verbosify( $char, $u->cleanUp( $char ), 1, 'cleanUp', $reportFailure ) && $result;
+	global $verbose;
+	if( $verbose && !$result && !$reportFailure ) {
+		print $desc;
+		testInvariant( $u, $char, $desc, true );
+	}
+	return $result;
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/normal/UtfNormalUtil.php
===================================================================
--- /MediaWiki/branches/1.11/includes/normal/UtfNormalUtil.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/normal/UtfNormalUtil.php	(revision 1280)
@@ -0,0 +1,142 @@
+<?php
+# Copyright (C) 2004 Brion Vibber <brion@pobox.com>
+# http://www.mediawiki.org/
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+# http://www.gnu.org/copyleft/gpl.html
+
+/**
+ * Some of these functions are adapted from places in MediaWiki.
+ * Should probably merge them for consistency.
+ *
+ * @addtogroup UtfNormal
+ * @public
+ */
+
+/** */
+
+/**
+ * Return UTF-8 sequence for a given Unicode code point.
+ * May die if fed out of range data.
+ *
+ * @param $codepoint Integer:
+ * @return String
+ * @public
+ */
+function codepointToUtf8( $codepoint ) {
+	if($codepoint <		0x80) return chr($codepoint);
+	if($codepoint <    0x800) return chr($codepoint >>	6 & 0x3f | 0xc0) .
+									 chr($codepoint		  & 0x3f | 0x80);
+	if($codepoint <  0x10000) return chr($codepoint >> 12 & 0x0f | 0xe0) .
+									 chr($codepoint >>	6 & 0x3f | 0x80) .
+									 chr($codepoint		  & 0x3f | 0x80);
+	if($codepoint < 0x110000) return chr($codepoint >> 18 & 0x07 | 0xf0) .
+									 chr($codepoint >> 12 & 0x3f | 0x80) .
+									 chr($codepoint >>	6 & 0x3f | 0x80) .
+									 chr($codepoint		  & 0x3f | 0x80);
+
+	echo "Asked for code outside of range ($codepoint)\n";
+	die( -1 );
+}
+
+/**
+ * Take a series of space-separated hexadecimal numbers representing
+ * Unicode code points and return a UTF-8 string composed of those
+ * characters. Used by UTF-8 data generation and testing routines.
+ *
+ * @param $sequence String
+ * @return String
+ * @private
+ */
+function hexSequenceToUtf8( $sequence ) {
+	$utf = '';
+	foreach( explode( ' ', $sequence ) as $hex ) {
+		$n = hexdec( $hex );
+		$utf .= codepointToUtf8( $n );
+	}
+	return $utf;
+}
+
+/**
+ * Take a UTF-8 string and return a space-separated series of hex
+ * numbers representing Unicode code points. For debugging.
+ *
+ * @param $str String: UTF-8 string.
+ * @return string
+ * @private
+ */
+function utf8ToHexSequence( $str ) {
+	return rtrim( preg_replace( '/(.)/uSe',
+	                            'sprintf("%04x ", utf8ToCodepoint("$1"))',
+	                            $str ) );
+}
+
+/**
+ * Determine the Unicode codepoint of a single-character UTF-8 sequence.
+ * Does not check for invalid input data.
+ *
+ * @param $char String
+ * @return Integer
+ * @public
+ */
+function utf8ToCodepoint( $char ) {
+	# Find the length
+	$z = ord( $char{0} );
+	if ( $z & 0x80 ) {
+		$length = 0;
+		while ( $z & 0x80 ) {
+			$length++;
+			$z <<= 1;
+		}
+	} else {
+		$length = 1;
+	}
+
+	if ( $length != strlen( $char ) ) {
+		return false;
+	}
+	if ( $length == 1 ) {
+		return ord( $char );
+	}
+
+	# Mask off the length-determining bits and shift back to the original location
+	$z &= 0xff;
+	$z >>= $length;
+
+	# Add in the free bits from subsequent bytes
+	for ( $i=1; $i<$length; $i++ ) {
+		$z <<= 6;
+		$z |= ord( $char{$i} ) & 0x3f;
+	}
+
+	return $z;
+}
+
+/**
+ * Escape a string for inclusion in a PHP single-quoted string literal.
+ *
+ * @param $string String: string to be escaped.
+ * @return String: escaped string.
+ * @public
+ */
+function escapeSingleString( $string ) {
+	return strtr( $string,
+		array(
+			'\\' => '\\\\',
+			'\'' => '\\\''
+		));
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/proxy_check.php
===================================================================
--- /MediaWiki/branches/1.11/includes/proxy_check.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/proxy_check.php	(revision 1280)
@@ -0,0 +1,54 @@
+<?php
+/**
+ * Command line script to check for an open proxy at a specified location
+ */
+
+if( php_sapi_name() != 'cli' ) {
+	die( 1 );
+}
+
+/**
+ *
+ */
+$output = '';
+
+/**
+ * Exit if there are not enough parameters, or if it's not command line mode
+ */
+if ( ( isset( $_REQUEST ) && array_key_exists( 'argv', $_REQUEST ) ) || count( $argv ) < 4 ) {
+	$output .= "Incorrect parameters\n";
+} else {
+	/**
+	 * Get parameters
+	 */
+	$ip = $argv[1];
+	$port = $argv[2];
+	$url = $argv[3];
+	$host = trim(`hostname`);
+	$output = "Connecting to $ip:$port, target $url, this hostname $host\n";
+
+	# Open socket
+	$sock = @fsockopen($ip, $port, $errno, $errstr, 5);
+	if ($errno == 0 ) {
+		$output .= "Connected\n";
+		# Send payload
+		$request = "GET $url HTTP/1.0\r\n";
+#		$request .= "Proxy-Connection: Keep-Alive\r\n";
+#		$request .= "Pragma: no-cache\r\n";
+#		$request .= "Host: ".$url."\r\n";
+#		$request .= "User-Agent: MediaWiki open proxy check\r\n";
+		$request .= "\r\n";
+		@fputs($sock, $request);
+		$response = fgets($sock, 65536);
+		$output .= $response;
+		@fclose($sock);
+	} else {
+		$output .= "No connection\n";
+	}
+}
+
+$output = escapeshellarg( $output );
+
+#`echo $output >> /home/tstarling/open/proxy.log`;
+
+?>
Index: /MediaWiki/branches/1.11/includes/templates/NoLocalSettings.php
===================================================================
--- /MediaWiki/branches/1.11/includes/templates/NoLocalSettings.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/templates/NoLocalSettings.php	(revision 1280)
@@ -0,0 +1,48 @@
+<?php
+# Prevent XSS
+if ( isset( $wgVersion ) ) {
+	$wgVersion = htmlspecialchars( $wgVersion );
+} else {
+	$wgVersion = 'VERSION';
+}
+# Set the path in case we hit a page such as /index.php/Main_Page
+# Could use <base href> but then we have to worry about http[s]/port #/etc.
+$path = '';
+if( isset( $_SERVER['SCRIPT_NAME'] )) {
+	$path = htmlspecialchars( preg_replace('/index.php/', '', $_SERVER['SCRIPT_NAME']) );
+}
+?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns='http://www.w3.org/1999/xhtml' xml:lang='en' lang='en'>
+	<head>
+		<title>MediaWiki <?php echo $wgVersion ?></title>
+		<meta http-equiv='Content-Type' content='text/html; charset=utf-8' />
+		<style type='text/css' media='screen, projection'>
+			html, body {
+				color: #000;
+				background-color: #fff;
+				font-family: sans-serif;
+				text-align: center;
+			}
+
+			h1 {
+				font-size: 150%;
+			}
+		</style>
+	</head>
+	<body>
+		<img src="<?php echo $path ?>skins/common/images/mediawiki.png" alt='The MediaWiki logo' />
+
+		<h1>MediaWiki <?php echo $wgVersion ?></h1>
+		<div class='error'>
+		<?php
+		if ( file_exists( 'config/LocalSettings.php' ) ) {
+			echo( 'To complete the installation, move <tt>config/LocalSettings.php</tt> to the parent directory.' );
+		} else {
+			echo( "Please <a href=\"${path}config/index.php\" title='setup'> set up the wiki</a> first." );
+		}
+		?>
+
+		</div>
+	</body>
+</html>
Index: /MediaWiki/branches/1.11/includes/templates/Userlogin.php
===================================================================
--- /MediaWiki/branches/1.11/includes/templates/Userlogin.php	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/templates/Userlogin.php	(revision 1280)
@@ -0,0 +1,230 @@
+<?php
+/**
+ * @addtogroup Templates
+ */
+if( !defined( 'MEDIAWIKI' ) ) die( -1 );
+
+/** */
+require_once( 'includes/SkinTemplate.php' );
+
+/**
+ * HTML template for Special:Userlogin form
+ * @addtogroup Templates
+ */
+class UserloginTemplate extends QuickTemplate {
+	function execute() {
+		if( $this->data['message'] ) {
+?>
+	<div class="<?php $this->text('messagetype') ?>box">
+		<?php if ( $this->data['messagetype'] == 'error' ) { ?>
+			<h2><?php $this->msg('loginerror') ?>:</h2>
+		<?php } ?>
+		<?php $this->html('message') ?>
+	</div>
+	<div class="visualClear"></div>
+<?php } ?>
+
+<div id="userloginForm">
+<form name="userlogin" method="post" action="<?php $this->text('action') ?>">
+	<h2><?php $this->msg('login') ?></h2>
+	<p id="userloginlink"><?php $this->html('link') ?></p>
+	<div id="userloginprompt"><?php  $this->msgWiki('loginprompt') ?></div>
+	<?php if( @$this->haveData( 'languages' ) ) { ?><div id="languagelinks"><p><?php $this->html( 'languages' ); ?></p></div><?php } ?>
+	<table>
+		<tr>
+			<td align='right'><label for='wpName1'><?php $this->msg('yourname') ?>:</label></td>
+			<td align='left'>
+				<input type='text' class='loginText' name="wpName" id="wpName1"
+					tabindex="1"
+					value="<?php $this->text('name') ?>" size='20' />
+			</td>
+		</tr>
+		<tr>
+			<td align='right'><label for='wpPassword1'><?php $this->msg('yourpassword') ?>:</label></td>
+			<td align='left'>
+				<input type='password' class='loginPassword' name="wpPassword" id="wpPassword1"
+					tabindex="2"
+					value="<?php $this->text('password') ?>" size='20' />
+			</td>
+		</tr>
+	<?php if( $this->data['usedomain'] ) {
+		$doms = "";
+		foreach( $this->data['domainnames'] as $dom ) {
+			$doms .= "<option>" . htmlspecialchars( $dom ) . "</option>";
+		}
+	?>
+		<tr>
+			<td align='right'><?php $this->msg( 'yourdomainname' ) ?>:</td>
+			<td align='left'>
+				<select name="wpDomain" value="<?php $this->text( 'domain' ) ?>"
+					tabindex="3">
+					<?php echo $doms ?>
+				</select>
+			</td>
+		</tr>
+	<?php } ?>
+		<tr>
+			<td></td>
+			<td align='left'>
+				<input type='checkbox' name="wpRemember"
+					tabindex="4"
+					value="1" id="wpRemember"
+					<?php if( $this->data['remember'] ) { ?>checked="checked"<?php } ?>
+					/> <label for="wpRemember"><?php $this->msg('remembermypassword') ?></label>
+			</td>
+		</tr>
+		<tr>
+			<td></td>
+			<td align='left' style="white-space:nowrap">
+				<input type='submit' name="wpLoginattempt" id="wpLoginattempt" tabindex="5" value="<?php $this->msg('login') ?>" />&nbsp;<?php if( $this->data['useemail'] && $this->data['canreset']) { ?><input type='submit' name="wpMailmypassword" id="wpMailmypassword"
+					tabindex="6"
+									value="<?php $this->msg('mailmypassword') ?>" />
+				<?php } ?>
+			</td>
+		</tr>
+	</table>
+<?php if( @$this->haveData( 'uselang' ) ) { ?><input type="hidden" name="uselang" value="<?php $this->text( 'uselang' ); ?>" /><?php } ?>
+</form>
+</div>
+<div id="loginend"><?php $this->msgWiki( 'loginend' ); ?></div>
+<?php
+
+	}
+}
+
+/**
+ * @addtogroup Templates
+ */
+class UsercreateTemplate extends QuickTemplate {
+	function execute() {
+		if( $this->data['message'] ) {
+?>
+	<div class="<?php $this->text('messagetype') ?>box">
+		<?php if ( $this->data['messagetype'] == 'error' ) { ?>
+			<h2><?php $this->msg('loginerror') ?>:</h2>
+		<?php } ?>
+		<?php $this->html('message') ?>
+	</div>
+	<div class="visualClear"></div>
+<?php } ?>
+<div id="userlogin">
+
+<form name="userlogin2" id="userlogin2" method="post" action="<?php $this->text('action') ?>">
+	<h2><?php $this->msg('createaccount') ?></h2>
+	<p id="userloginlink"><?php $this->html('link') ?></p>
+	<?php $this->html('header'); /* pre-table point for form plugins... */ ?>
+	<?php if( @$this->haveData( 'languages' ) ) { ?><div id="languagelinks"><p><?php $this->html( 'languages' ); ?></p></div><?php } ?>
+	<table>
+		<tr>
+			<td align='right'><label for='wpName2'><?php $this->msg('yourname') ?>:</label></td>
+			<td align='left'>
+				<input type='text' class='loginText' name="wpName" id="wpName2"
+					tabindex="1"
+					value="<?php $this->text('name') ?>" size='20' />
+			</td>
+		</tr>
+		<tr>
+			<td align='right'><label for='wpPassword2'><?php $this->msg('yourpassword') ?>:</label></td>
+			<td align='left'>
+				<input type='password' class='loginPassword' name="wpPassword" id="wpPassword2"
+					tabindex="2"
+					value="<?php $this->text('password') ?>" size='20' />
+			</td>
+		</tr>
+	<?php if( $this->data['usedomain'] ) {
+		$doms = "";
+		foreach( $this->data['domainnames'] as $dom ) {
+			$doms .= "<option>" . htmlspecialchars( $dom ) . "</option>";
+		}
+	?>
+		<tr>
+			<td align='right'><?php $this->msg( 'yourdomainname' ) ?>:</td>
+			<td align='left'>
+				<select name="wpDomain" value="<?php $this->text( 'domain' ) ?>"
+					tabindex="3">
+					<?php echo $doms ?>
+				</select>
+			</td>
+		</tr>
+	<?php } ?>
+		<tr>
+			<td align='right'><label for='wpRetype'><?php $this->msg('yourpasswordagain') ?>:</label></td>
+			<td align='left'>
+				<input type='password' class='loginPassword' name="wpRetype" id="wpRetype"
+					tabindex="4"
+					value="<?php $this->text('retype') ?>"
+					size='20' />
+			</td>
+		</tr>
+		<tr>
+			<?php if( $this->data['useemail'] ) { ?>
+				<td align='right'><label for='wpEmail'><?php $this->msg('youremail') ?></label></td>
+				<td align='left'>
+					<input type='text' class='loginText' name="wpEmail" id="wpEmail"
+						tabindex="5"
+						value="<?php $this->text('email') ?>" size='20' />
+				</td>
+			<?php } ?>
+			<?php if( $this->data['userealname'] ) { ?>
+				</tr>
+				<tr>
+					<td align='right'><label for='wpRealName'><?php $this->msg('yourrealname') ?></label></td>
+					<td align='left'>
+						<input type='text' class='loginText' name="wpRealName" id="wpRealName"
+							tabindex="6"
+							value="<?php $this->text('realname') ?>" size='20' />
+					</td>
+			<?php } ?>
+		</tr>
+		<tr>
+			<td></td>
+			<td align='left'>
+				<input type='checkbox' name="wpRemember"
+					tabindex="7"
+					value="1" id="wpRemember"
+					<?php if( $this->data['remember'] ) { ?>checked="checked"<?php } ?>
+					/> <label for="wpRemember"><?php $this->msg('remembermypassword') ?></label>
+			</td>
+		</tr>
+		<tr>
+			<td></td>
+			<td align='left'>
+				<input type='submit' name="wpCreateaccount" id="wpCreateaccount"
+					tabindex="8"
+					value="<?php $this->msg('createaccount') ?>" />
+				<?php if( $this->data['createemail'] ) { ?>
+				<input type='submit' name="wpCreateaccountMail" id="wpCreateaccountMail"
+					tabindex="9"
+					value="<?php $this->msg('createaccountmail') ?>" />
+				<?php } ?>
+			</td>
+		</tr>
+	</table>
+	<?php
+
+		if ($this->data['userealname'] || $this->data['useemail']) {
+			echo '<div id="login-sectiontip">';
+			if ( $this->data['useemail'] ) {
+				echo '<div>';
+				$this->msgHtml('prefs-help-email');
+				echo '</div>';
+			}
+			if ( $this->data['userealname'] ) {
+				echo '<div>';
+				$this->msgHtml('prefs-help-realname');
+				echo '</div>';
+			}
+			echo '</div>';
+		}
+
+	?>
+<?php if( @$this->haveData( 'uselang' ) ) { ?><input type="hidden" name="uselang" value="<?php $this->text( 'uselang' ); ?>" /><?php } ?>
+</form>
+</div>
+<div id="signupend"><?php $this->msgWiki( 'signupend' ); ?></div>
+<?php
+
+	}
+}
+
+?>
Index: /MediaWiki/branches/1.11/includes/tidy.conf
===================================================================
--- /MediaWiki/branches/1.11/includes/tidy.conf	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/tidy.conf	(revision 1280)
@@ -0,0 +1,18 @@
+# html tidy (http://tidy.sf.net) configuration
+# tidy - validate, correct, and pretty-print HTML files
+# see: man 1 tidy, http://tidy.sourceforge.net/docs/quickref.html
+
+show-body-only: yes
+force-output: yes
+tidy-mark: no 
+wrap: 0
+wrap-attributes: no
+literal-attributes: yes
+output-xhtml: yes 
+numeric-entities: yes
+enclose-text: yes
+enclose-block-text: yes
+quiet: yes 
+quote-nbsp: yes
+fix-backslash: no
+fix-uri: no
Index: /MediaWiki/branches/1.11/includes/zhtable/Makefile
===================================================================
--- /MediaWiki/branches/1.11/includes/zhtable/Makefile	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/zhtable/Makefile	(revision 1280)
@@ -0,0 +1,268 @@
+#
+# Creating the file ZhConversion.php used for Simplified/Traditional
+# Chinese conversion. It gets the basic conversion table from the Unihan 
+# database, and construct the phrase tables using phrase libraries in
+# the SCIM packages and the libtabe package. There are also special
+# tables used to for adjustment. 
+#
+
+GREP = LANG=zh_CN.UTF8 grep
+SED = LANG=zh_CN.UTF8 sed
+DIFF = LANG=zh_CN.UTF8 diff
+CC ?= gcc
+
+#installation directory
+INSTDIR = /usr/local/share/zhdaemons/
+
+all: ZhConversion.php tradphrases.notsure simpphrases.notsure wordlist toCN.dict toTW.dict toHK.dict toSG.dict
+
+Unihan.txt:
+	wget -nc ftp://ftp.unicode.org/Public/UNIDATA/Unihan.zip
+	unzip -q Unihan.zip
+
+EZ.txt.in:
+	wget -nc http://easynews.dl.sourceforge.net/sourceforge/scim/scim-tables-0.5.1.tar.gz
+	tar -xzf scim-tables-0.5.1.tar.gz -O scim-tables-0.5.1/zh/EZ.txt.in > EZ.txt.in
+
+phrase_lib.txt:
+	wget -nc http://easynews.dl.sourceforge.net/sourceforge/scim/scim-pinyin-0.5.0.tar.gz
+	tar -xzf scim-pinyin-0.5.0.tar.gz -O scim-pinyin-0.5.0/data/phrase_lib.txt > phrase_lib.txt
+
+tsi.src:
+	wget -nc http://unc.dl.sourceforge.net/sourceforge/libtabe/libtabe-0.2.3.tgz	
+	tar -xzf libtabe-0.2.3.tgz -O libtabe/tsi-src/tsi.src > tsi.src
+
+wordlist: phrase_lib.txt EZ.txt.in tsi.src
+	iconv -c -f big5 -t utf8 tsi.src | $(SED) 's/# //g' | $(SED) 's/[ ][0-9].*//' > wordlist
+	$(SED) 's/\(.*\)\t[0-9][0-9]*.*/\1/' phrase_lib.txt | $(SED) '1,5d' >>wordlist
+	$(SED) '1,/BEGIN_TABLE/d' EZ.txt.in | colrm 1 8 | $(SED) 's/\t.*//' | $(GREP) "^...*" >> wordlist
+	sort wordlist | uniq | $(SED) 's/ //g' > t
+	mv t wordlist
+
+printutf8: printutf8.c
+	$(CC) -o printutf8 printutf8.c
+
+unihan.t2s.t: Unihan.txt printutf8
+	$(GREP) kSimplifiedVariant Unihan.txt | $(SED)  '/#/d' | $(SED)  's/kSimplifiedVariant//' | ./printutf8 > unihan.t2s.t
+
+trad2simp.t: trad2simp.manual unihan.t2s.t
+	cp unihan.t2s.t tmp1
+	for I in `colrm 11 < trad2simp.manual` ; do $(SED) "/^$$I/d" tmp1 > tmp2; mv tmp2 tmp1; done
+	cat trad2simp.manual tmp1 > trad2simp.t
+
+unihan.s2t.t: Unihan.txt printutf8
+	$(GREP) kTraditionalVariant Unihan.txt | $(SED)  '/#/d' | $(SED)  's/kTraditionalVariant//' | ./printutf8 > unihan.s2t.t
+
+simp2trad.t: unihan.s2t.t simp2trad.manual
+	cp unihan.s2t.t tmp1
+	for I in `colrm 11 < simp2trad.manual` ; do $(SED) "/^$$I/d" tmp1 > tmp2; mv tmp2 tmp1; done
+	cat simp2trad.manual tmp1 > simp2trad.t
+
+t2s_1tomany.t: trad2simp.t
+	$(GREP) -s ".\{19,\}" trad2simp.t | $(SED)  's/U+...../"/' | $(SED)  's/|U+...../"=>"/' | $(SED)  's/|U+.....//g' | $(SED)  's/|/",/'  > t2s_1tomany.t
+
+t2s_1to1.t: trad2simp.t s2t_1tomany.t
+	$(SED)  "/.*|.*|.*|.*/d" trad2simp.t | $(SED)  's/U+[0-9a-z][0-9a-z]*/"/' | $(SED)  's/|U+[0-9a-z][0-9a-z]*/"=>"/' | $(SED)  's/|/",/' > t2s_1to1.t
+	$(GREP)  '"."=>"..",' s2t_1tomany.t | $(SED) 's/\("."\)=>".\(.\)",/"\2"=>\1,/' >> t2s_1to1.t
+	$(GREP)  '"."=>"...",' s2t_1tomany.t | $(SED) 's/\("."\)=>".\(.\).",/"\2"=>\1,/' >> t2s_1to1.t
+	$(GREP)  '"."=>"...",' s2t_1tomany.t | $(SED) 's/\("."\)=>"..\(.\)",/"\2"=>\1,/' >> t2s_1to1.t
+	$(GREP)  '"."=>"....",' s2t_1tomany.t | $(SED) 's/\("."\)=>".\(.\)..",/"\2"=>\1,/' >> t2s_1to1.t
+	$(GREP)  '"."=>"....",' s2t_1tomany.t | $(SED) 's/\("."\)=>"..\(.\).",/"\2"=>\1,/' >> t2s_1to1.t
+	$(GREP)  '"."=>"....",' s2t_1tomany.t | $(SED) 's/\("."\)=>"...\(.\)",/"\2"=>\1,/' >> t2s_1to1.t
+	sort t2s_1to1.t | uniq > t
+	mv t t2s_1to1.t
+
+
+s2t_1tomany.t: simp2trad.t
+	$(GREP) -s ".\{19,\}" simp2trad.t | $(SED)  's/U+...../"/' | $(SED)  's/|U+...../"=>"/' | $(SED)  's/|U+.....//g' | $(SED)  's/|/",/' > s2t_1tomany.t
+
+s2t_1to1.t: simp2trad.t t2s_1tomany.t
+	$(SED)  "/.*|.*|.*|.*/d" simp2trad.t | $(SED)  's/U+[0-9a-z][0-9a-z]*/"/' | $(SED)  's/|U+[0-9a-z][0-9a-z]*/"=>"/' | $(SED)  's/|/",/' > s2t_1to1.t
+	$(GREP)  '"."=>"..",' t2s_1tomany.t | $(SED) 's/\("."\)=>".\(.\)",/"\2"=>\1,/' >> s2t_1to1.t
+	$(GREP)  '"."=>"...",' t2s_1tomany.t | $(SED) 's/\("."\)=>".\(.\).",/"\2"=>\1,/' >> s2t_1to1.t
+	$(GREP)  '"."=>"...",' t2s_1tomany.t | $(SED) 's/\("."\)=>"..\(.\)",/"\2"=>\1,/' >> s2t_1to1.t
+	$(GREP)  '"."=>"....",' t2s_1tomany.t | $(SED) 's/\("."\)=>".\(.\)..",/"\2"=>\1,/' >> s2t_1to1.t
+	$(GREP)  '"."=>"....",' t2s_1tomany.t | $(SED) 's/\("."\)=>"..\(.\).",/"\2"=>\1,/' >> s2t_1to1.t
+	$(GREP)  '"."=>"....",' t2s_1tomany.t | $(SED) 's/\("."\)=>"...\(.\)",/"\2"=>\1,/' >> s2t_1to1.t
+	sort s2t_1to1.t | uniq > t
+	mv t s2t_1to1.t
+
+tphrase.t: EZ.txt.in tsi.src
+	colrm 1 8 < EZ.txt.in | $(SED) 's/\t//g' | $(GREP) "^.\{2,4\}[0-9]" | $(SED) 's/[0-9]//g' > t
+	iconv -c -f big5 -t utf8 tsi.src | $(SED) 's/ [0-9].*//g' | $(SED) 's/[# ]//g'| $(GREP) "^.\{2,4\}"  >> t
+	sort t | uniq > tphrase.t
+
+alltradphrases.t: tphrase.t s2t_1tomany.t 
+	for i in `cat s2t_1tomany.t | $(SED) 's/.*=>".//' | $(SED) 's/"//g' |$(SED) 's/,/\n/' | $(SED) 's/\(.\)/\1\n/g' |sort | uniq`; do $(GREP) -s $$i tphrase.t ; done  > alltradphrases.t || true
+
+
+tradphrases_2.t: alltradphrases.t
+	cat alltradphrases.t | $(GREP)  "^..$$" | sort | uniq > tradphrases_2.t
+
+tradphrases_3.t: alltradphrases.t
+	cat alltradphrases.t | $(GREP)  "^...$$" | sort | uniq > tradphrases_3.t
+	for i in `cat tradphrases_2.t`; do $(GREP) $$i tradphrases_3.t ; done | sort | uniq > t3 || true
+	$(DIFF) t3 tradphrases_3.t | $(GREP) ">" | $(SED) 's/> //' > t
+	mv t tradphrases_3.t
+
+
+tradphrases_4.t: alltradphrases.t
+	cat alltradphrases.t | $(GREP)  "^....$$" | sort | uniq > tradphrases_4.t
+	for i in `cat tradphrases_2.t`; do $(GREP) $$i tradphrases_4.t ; done | sort | uniq > t3 || true
+	$(DIFF) t3 tradphrases_4.t | $(GREP) ">" | $(SED) 's/> //' > t
+	mv t tradphrases_4.t
+	for i in `cat tradphrases_3.t`; do $(GREP) $$i tradphrases_4.t ; done | sort | uniq > t3 || true
+	$(DIFF) t3 tradphrases_4.t | $(GREP) ">" | $(SED) 's/> //' > t
+	mv t tradphrases_4.t
+
+tradphrases.t: tradphrases.manual tradphrases_2.t tradphrases_3.t tradphrases_4.t t2s_1tomany.t
+	cat tradphrases.manual tradphrases_2.t tradphrases_3.t tradphrases_4.t |sort | uniq > tradphrases.t
+	for i in `$(SED) 's/"\(.\).*/\1/' t2s_1tomany.t ` ; do $(GREP) $$i tradphrases.t ; done | $(DIFF) tradphrases.t - | $(GREP) '<' | $(SED) 's/< //' > t
+	mv t tradphrases.t
+
+tradphrases.notsure: tradphrases_2.t tradphrases_3.t tradphrases_4.t t2s_1tomany.t
+	cat tradphrases_2.t tradphrases_3.t tradphrases_4.t |sort | uniq > t
+	for i in `$(SED) 's/"\(.\).*/\1/' t2s_1tomany.t ` ; do $(GREP) $$i t; done | $(DIFF) t - | $(GREP) '>' | $(SED) 's/> //' > tradphrases.notsure
+
+
+ph.t: phrase_lib.txt
+	$(SED) 's/[\t0-9a-zA-Z]//g' phrase_lib.txt | $(GREP) "^.\{2,4\}$$" > ph.t
+
+allsimpphrases.t: ph.t
+	rm -f allsimpphrases.t
+	for i in `cat t2s_1tomany.t | $(SED) 's/.*=>".//' | $(SED) 's/"//g' | $(SED) 's/,/\n/' | $(SED) 's/\(.\)/\1\n/g' | sort | uniq `; do $(GREP) $$i ph.t >> allsimpphrases.t; done
+
+simpphrases_2.t: allsimpphrases.t
+	cat allsimpphrases.t | $(GREP) "^..$$" | sort | uniq > simpphrases_2.t
+
+simpphrases_3.t: allsimpphrases.t
+	cat allsimpphrases.t | $(GREP) "^...$$" | sort | uniq > simpphrases_3.t
+	for i in `cat simpphrases_2.t`; do $(GREP) $$i simpphrases_3.t ; done | sort | uniq > t3 || true
+	$(DIFF) t3 simpphrases_3.t | $(GREP) ">" | $(SED) 's/> //' > t
+	mv t simpphrases_3.t
+
+simpphrases_4.t: allsimpphrases.t
+	cat allsimpphrases.t | $(GREP) "^....$$" | sort | uniq > simpphrases_4.t
+	rm -f t
+	for i in `cat simpphrases_2.t`; do $(GREP) $$i simpphrases_4.t >> t; done || true
+	sort t | uniq > t3
+	$(DIFF) t3 simpphrases_4.t | $(GREP) ">" | $(SED) 's/> //' > t
+	mv t simpphrases_4.t
+	for i in `cat simpphrases_3.t`; do $(GREP) $$i simpphrases_4.t; done | sort  | uniq > t3 || true
+	$(DIFF) t3 simpphrases_4.t | $(GREP) ">" | $(SED) 's/> //' > t
+	mv t simpphrases_4.t
+
+simpphrases.t:simpphrases_2.t simpphrases_3.t simpphrases_4.t t2s_1tomany.t
+	cat simpphrases_2.t simpphrases_3.t simpphrases_4.t > simpphrases.t
+	for i in `$(SED) 's/"\(.\).*/\1/' t2s_1tomany.t ` ; do $(GREP) $$i simpphrases.t ; done | $(DIFF) simpphrases.t - | $(GREP) '<' | $(SED) 's/< //' > t
+	mv t simpphrases.t
+
+
+simpphrases.notsure:simpphrases_2.t simpphrases_3.t simpphrases_4.t t2s_1tomany.t
+	cat simpphrases_2.t simpphrases_3.t simpphrases_4.t > t
+	for i in `$(SED) 's/"\(.\).*/\1/' t2s_1tomany.t ` ; do $(GREP) $$i t ; done | $(DIFF) t - | $(GREP) '>' | $(SED) 's/> //' > simpphrases.notsure
+
+trad2simp1to1.t: t2s_1tomany.t t2s_1to1.t
+	$(SED)  's/\(.......\).*/\1",/' t2s_1tomany.t > trad2simp1to1.t
+	cat t2s_1to1.t >> trad2simp1to1.t
+
+simp2trad1to1.t: s2t_1tomany.t s2t_1to1.t
+	$(SED)  's/\(.......\).*/\1",/' s2t_1tomany.t > simp2trad1to1.t
+	cat s2t_1to1.t >> simp2trad1to1.t
+
+trad2simp.php: trad2simp1to1.t tradphrases.t
+	printf '<?php\n$$trad2simp=array(' > trad2simp.php
+	cat trad2simp1to1.t >> trad2simp.php
+	printf ');\n$$str=\n"' >> trad2simp.php
+	cat tradphrases.t >> trad2simp.php
+	printf '";\n$$t=strtr($$str, $$trad2simp);\necho $$t;\n?>' >> trad2simp.php
+
+simp2trad.php: simp2trad1to1.t simpphrases.t
+	printf '<?php\n$$simp2trad=array(' > simp2trad.php
+	cat simp2trad1to1.t >> simp2trad.php
+	printf ');\n$$str=\n"' >> simp2trad.php
+	cat simpphrases.t >> simp2trad.php
+	printf '";\n$$t=strtr($$str, $$simp2trad);\necho $$t;\n?>' >> simp2trad.php
+
+simp2trad.phrases.t: trad2simp.php tradphrases.t toTW.manual
+	php -f trad2simp.php | $(SED)  's/\(.*\)/"\1" => /' > tmp1
+	cat tradphrases.t | $(SED)  's/\(.*\)/"\1",/' > tmp2
+	paste tmp1 tmp2 > simp2trad.phrases.t
+	$(SED) 's/\(.*\)\t\(.*\)/"\1"=>"\2",/' toTW.manual >> simp2trad.phrases.t
+
+trad2simp.phrases.t: simp2trad.php simpphrases.t toCN.manual
+	php -f simp2trad.php | $(SED)  's/\(.*\)/"\1" => /' > tmp1
+	cat simpphrases.t | $(SED)  's/\(.*\)/"\1",/' > tmp2
+	paste tmp1 tmp2 > trad2simp.phrases.t
+	$(SED) 's/\(.*\)\t\(.*\)/"\1"=>"\2",/' toCN.manual >> trad2simp.phrases.t
+
+toCN.dict: trad2simp1to1.t trad2simp.phrases.t
+	cat trad2simp1to1.t | $(SED) 's/[, \t]//g' | $(SED) 's/=>/\t/' > toCN.dict
+	cat trad2simp.phrases.t | $(SED) 's/[, \t]//g' | $(SED) 's/=>/\t/' >> toCN.dict
+
+toTW.dict: simp2trad1to1.t simp2trad.phrases.t
+	cat simp2trad1to1.t | $(SED) 's/[, \t]//g' | $(SED) 's/=>/\t/' > toTW.dict
+	cat simp2trad.phrases.t | $(SED) 's/[, \t]//g' | $(SED) 's/=>/\t/' >> toTW.dict
+
+toHK.dict: toHK.manual
+	cat toHK.manual | $(SED) 's/ //g' | $(SED) 's/\(^.*\)\t\(.*\)/"\1"\t"\2"/' > toHK.dict
+
+toSG.dict: toSG.manual
+	cat toSG.manual | $(SED) 's/ //g' | $(SED) 's/\(^.*\)\t\(.*\)/"\1"\t"\2"/' > toSG.dict
+
+
+
+ZhConversion.php: simp2trad1to1.t simp2trad.phrases.t trad2simp1to1.t trad2simp.phrases.t toHK.manual toSG.manual
+	printf '<?php\n/**\n * Simplified/Traditional Chinese conversion tables\n' > ZhConversion.php
+	printf ' *\n * Automatically generated using code and data in includes/zhtable/\n' >> ZhConversion.php
+	printf ' * Do not modify directly! \n *\n * @package MediaWiki\n*/\n\n' >> ZhConversion.php
+	printf '$$zh2TW=array(\n' >> ZhConversion.php
+	cat simp2trad1to1.t >> ZhConversion.php
+	echo >> ZhConversion.php
+	cat simp2trad.phrases.t >> ZhConversion.php
+	echo >> ZhConversion.php
+	echo ');' >> ZhConversion.php
+	echo >> ZhConversion.php
+	echo >> ZhConversion.php
+	printf '$$zh2CN=array(\n' >> ZhConversion.php
+	cat trad2simp1to1.t >> ZhConversion.php
+	echo >> ZhConversion.php
+	cat trad2simp.phrases.t >> ZhConversion.php
+	echo >> ZhConversion.php
+	printf ');' >> ZhConversion.php
+	echo >> ZhConversion.php
+	echo >> ZhConversion.php
+	printf '$$zh2HK=array(\n' >> ZhConversion.php
+	$(SED) 's/\(.*\)\t\(.*\)/"\1" => "\2",/' toHK.manual >> ZhConversion.php
+	echo >> ZhConversion.php
+	printf ');' >> ZhConversion.php
+	echo >> ZhConversion.php
+	echo >> ZhConversion.php
+	printf '$$zh2SG=array(\n' >> ZhConversion.php
+	$(SED) 's/\(.*\)\t\(.*\)/"\1" => "\2",/' toSG.manual >> ZhConversion.php
+	echo >> ZhConversion.php
+	printf ');' >> ZhConversion.php
+	echo >> ZhConversion.php
+	printf '?>' >> ZhConversion.php
+
+
+clean: cleantmp cleandl
+
+cleantmp:
+	# Stuff unpacked from the files fetched by wget
+	rm -f \
+		Unihan.txt \
+		EZ.txt.in \
+		phrase_lib.txt \
+		tsi.src
+	# Temporary files and other trash
+	rm -f ZhConversion.php tmp1 tmp2 tmp3 t3 *.t trad2simp.php simp2trad.php *.dict printutf8 *~ \
+		simpphrases.notsure tradphrases.notsure wordlist
+
+cleandl:
+	rm -f \
+		Unihan.zip \
+		scim-tables-0.5.1.tar.gz \
+		scim-pinyin-0.5.0.tar.gz \
+		libtabe-0.2.3.tgz
+
Index: /MediaWiki/branches/1.11/includes/zhtable/README
===================================================================
--- /MediaWiki/branches/1.11/includes/zhtable/README	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/zhtable/README	(revision 1280)
@@ -0,0 +1,16 @@
+The various .manual files contains special mappings not included in the
+unihan database, and phrases not included in the SCIM package. 
+
+- simp2trad.manual: Simplified to Traditional character mapping. Most
+  data adapted from
+
+   冯寿忠,“非对称繁简字”对照表, 《语文建设通讯》1997-9第53期.
+   /http://www.yywzw.com/jt/feng/fengb01.htm
+
+- tradphrases.manual: Phrases in Traditional Chinese. A portition is obtained
+  from the TongWen package (http://tongwen.mozdev.org/)
+
+- toTW.manual, toCN.manual, toSG.manual and toHK.manual: special phrase
+  mappings. 
+
+zhengzhu at gmail.com
Index: /MediaWiki/branches/1.11/includes/zhtable/printutf8.c
===================================================================
--- /MediaWiki/branches/1.11/includes/zhtable/printutf8.c	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/zhtable/printutf8.c	(revision 1280)
@@ -0,0 +1,99 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+/* 
+ Unicode                   UTF8
+0x00000000 - 0x0000007F: 0xxxxxxx
+0x00000080 - 0x000007FF: 110xxx xx 10xx xxxx
+0x00000800 - 0x0000FFFF: 1110xxxx  10xxxx xx 10xx xxxx
+0x00010000 - 0x001FFFFF: 11110x xx 10xx xxxx 10xxxx xx 10xx xxxx
+0x00200000 - 0x03FFFFFF: 111110xx  10xxxx xx 10xx xxxx 10xxxx xx 10xx xxxx
+0x04000000 - 0x7FFFFFFF: 1111110x  10xx xxxx 10xxxx xx 10xx xxxx 10xxxx xx 10xx xxxx
+
+0000 0      1001 9
+0001 1      1010 A
+0010 2      1011 B
+0011 3      1100 C
+0100 4      1101 D 
+0101 5      1110 E
+0110 6      1111 F
+0111 7
+1000 8
+*/
+void printUTF8(long long u) {
+  long long m;
+  if(u<0x80) {
+    printf("%c", (unsigned char)u);
+  }
+  else if(u<0x800) {
+    m = ((u&0x7c0)>>6) | 0xc0;
+    printf("%c", (unsigned char)m);
+    m = (u&0x3f) | 0x80;
+    printf("%c", (unsigned char)m);
+  }
+  else if(u<0x10000) {
+    m = ((u&0xf000)>>12) | 0xe0;
+    printf("%c",(unsigned char)m);
+    m = ((u&0xfc0)>>6) | 0x80;
+    printf("%c",(unsigned char)m);
+    m = (u & 0x3f) | 0x80;
+    printf("%c",(unsigned char)m);
+  }
+  else if(u<0x200000) {
+    m = ((u&0x1c0000)>>18) | 0xf0;
+    printf("%c", (unsigned char)m);
+    m = ((u& 0x3f000)>>12) | 0x80;
+    printf("%c", (unsigned char)m);
+    m = ((u& 0xfc0)>>6) | 0x80;
+    printf("%c", (unsigned char)m);
+    m = (u&0x3f) | 0x80;
+    printf("%c", (unsigned char)m);
+  }
+  else if(u<0x4000000){
+    m = ((u&0x3000000)>>24) | 0xf8;
+    printf("%c", (unsigned char)m);
+    m = ((u&0xfc0000)>>18) | 0x80;
+    printf("%c", (unsigned char)m);
+    m = ((u&0x3f000)>>12) | 0x80;
+    printf("%c", (unsigned char)m);
+    m = ((u&0xfc00)>>6) | 0x80;
+    printf("%c", (unsigned char)m);
+    m = (u&0x3f) | 0x80;
+    printf("%c", (unsigned char)m);
+  }
+  else {
+    m = ((u&0x40000000)>>30) | 0xfc;
+    printf("%c", (unsigned char)m);
+    m = ((u&0x3f000000)>>24) | 0x80;
+    printf("%c", (unsigned char)m);
+    m = ((u&0xfc0000)>>18) | 0x80;
+    printf("%c", (unsigned char)m);
+    m = ((u&0x3f000)>>12) | 0x80;
+    printf("%c", (unsigned char)m);
+    m = ((u&0xfc0)>>6) | 0x80;
+    printf("%c", (unsigned char)m);
+    m = (u&0x3f)| 0x80;
+    printf("%c", (unsigned char)m);
+  }
+}
+
+int main() {
+  int i,j;
+  long long n1, n2;
+  unsigned char b1[15], b2[15];
+  unsigned char buf[1024];
+  i=0;
+  while(fgets(buf, 1024, stdin)) {
+    //    printf("read %s\n", buf);
+    for(i=0;i<strlen(buf); i++) 
+      if(buf[i]=='U') {
+	if(buf[i+1] == '+') {
+	  n1 = strtoll(buf+i+2,0,16);
+	  printf("U+%05x", n1);
+	  printUTF8(n1);printf("|");
+	}
+      }
+    printf("\n");
+  }
+}
+
Index: /MediaWiki/branches/1.11/includes/zhtable/simp2trad.manual
===================================================================
--- /MediaWiki/branches/1.11/includes/zhtable/simp2trad.manual	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/zhtable/simp2trad.manual	(revision 1280)
@@ -0,0 +1,178 @@
+U+0753b画|U+0756b畫|U+07575畵|
+U+0677f板|U+0677f板|U+095c6闆|
+U+08868表|U+08868表|U+09336錶|
+U+0624d才|U+0624d才|U+07e94纔|
+U+04e11丑|U+0919c醜|U+04e11丑|
+U+051fa出|U+051fa出|U+09f63齣|
+U+06dc0淀|U+06fb1澱|U+06dc0淀|
+U+051ac冬|U+051ac冬|U+09f15鼕|
+U+08303范|U+07bc4範|U+08303范|
+U+04e30丰|U+08c50豐|U+04e30丰|
+U+0522e刮|U+0522e刮|U+098b3颳|
+U+0540e后|U+05f8c後|U+0540e后|
+U+080e1胡|U+080e1胡|U+09b0d鬍|U+0885a衚|
+U+056de回|U+056de回|U+08ff4迴|
+U+04f19伙|U+05925夥|U+04f19伙|
+U+059dc姜|U+08591薑|U+059dc姜|
+U+0501f借|U+0501f借|U+085c9藉|
+U+0514b克|U+0514b克|U+0524b剋|
+U+056f0困|U+056f0困|U+0774f睏|
+U+06f13漓|U+06f13漓|U+07055灕|
+U+091cc里|U+091cc里|U+088e1裡|U+088cf裏|
+U+05e18帘|U+07c3e簾|U+05e18帘|
+U+09709霉|U+09709霉|U+09ef4黴|
+U+09762面|U+09762面|U+09eb5麵|
+U+08511蔑|U+08511蔑|U+0884a衊|
+U+05343千|U+05343千|U+097c6韆|
+U+079cb秋|U+079cb秋|U+097a6鞦|
+U+0677e松|U+0677e松|U+09b06鬆|
+U+054b8咸|U+054b8咸|U+09e79鹹|
+U+05411向|U+05411向|U+056ae嚮|U+066cf曏|
+U+04f59余|U+09918餘|U+04f59余|
+U+090c1郁|U+09b31鬱|U+090c1郁|
+U+05fa1御|U+05fa1御|U+079a6禦|
+U+0613f愿|U+09858願|U+0613f愿|
+U+04e91云|U+096f2雲|U+04e91云|
+U+082b8芸|U+082b8芸|U+08553蕓|
+U+06c84沄|U+06c84沄|U+06f90澐|
+U+081f4致|U+081f4致|U+07dfb緻|
+U+05236制|U+05236制|U+088fd製|
+U+06731朱|U+06731朱|U+07843硃|
+U+07b51筑|U+07bc9築|U+07b51筑|
+U+051c6准|U+06e96準|U+051c6准|
+U+05382厂|U+05ee0廠|U+05382厂|
+U+05e7f广|U+05ee3廣|U+05e7f广|
+U+08f9f辟|U+095e2闢|U+08f9f辟|
+U+0522b别|U+05225別|U+05f46彆|
+U+0535c卜|U+0535c卜|U+08514蔔|
+U+06c88沈|U+06c88沈|U+0700b瀋|
+U+051b2冲|U+06c96沖|U+0885d衝|
+U+079cd种|U+07a2e種|U+079cd种|
+U+0866b虫|U+087f2蟲|U+0866b虫|
+U+062c5担|U+064d4擔|U+062c5担|
+U+0515a党|U+09ee8黨|U+0515a党|
+U+06597斗|U+09b25鬥|U+06597斗|
+U+0513f儿|U+05152兒|U+0513f儿|
+U+05e72干|U+04e7e乾|U+05e79幹|U+05e72干|U+069a6%Gæ¦¦%@|
+U+08c37谷|U+08c37谷|U+07a40穀|
+U+067dc柜|U+06ac3櫃|U+067dc柜|
+U+05408合|U+05408合|U+095a4閤|
+U+05212划|U+05283劃|U+05212划|
+U+0574f坏|U+058de壞|U+0574f坏|
+U+051e0几|U+05e7e幾|U+051e0几|
+U+07cfb系|U+07cfb系|U+07e6b繫|U+04fc2係|
+U+05bb6家|U+05bb6家|U+050a2傢|
+U+04ef7价|U+050f9價|U+04ef7价|
+U+0636e据|U+064da據|U+0636e据|
+U+05377卷|U+06372捲|U+05377卷|
+U+09002适|U+09069適|U+09002适|
+U+08721蜡|U+0881f蠟|U+08721蜡|
+U+0814a腊|U+081d8臘|U+0814a腊|
+U+04e86了|U+04e86了|U+077ad瞭|
+U+07d2f累|U+07d2f累|U+07e8d纍|
+U+04e48么|U+09ebd麽|U+04e48么|U+05e7a幺|U+09ebc麼|
+U+08499蒙|U+08499蒙|U+077c7矇|U+06fdb濛|U+061de懞|
+U+04e07万|U+0842c萬|U+04e07万|
+U+05b81宁|U+05be7寧|U+05b81宁|
+U+06734朴|U+06a38樸|U+06734朴|
+U+082f9苹|U+0860b蘋|U+082f9苹|
+U+04ec6仆|U+050d5僕|U+04ec6仆|
+U+066f2曲|U+066f2曲|U+09eaf麯|
+U+0786e确|U+078ba確|U+0786e确|
+U+0820d舍|U+0820d舍|U+06368捨|
+U+080dc胜|U+052dd勝|U+080dc胜|
+U+0672f术|U+08853術|U+0672f术|U+0672e朮|
+U+053f0台|U+053f0台|U+081fa臺|U+06aaf檯|U+098b1颱|
+U+04f53体|U+09ad4體|U+04f53体|
+U+06d82涂|U+05857塗|U+06d82涂|
+U+053f6叶|U+08449葉|U+053f6叶|
+U+05401吁|U+05401吁|U+07c72籲|
+U+065cb旋|U+065cb旋|U+0955f镟|
+U+04f63佣|U+050ad傭|U+04f63佣|
+U+04e0e与|U+08207與|U+04e0e与|
+U+06298折|U+06298折|U+0647a摺|
+U+05f81征|U+05fb5徵|U+05f81征|
+U+075c7症|U+075c7症|U+07665癥|
+U+06076恶|U+060e1惡|U+05641噁|
+U+053d1发|U+0767c發|U+09aee髮|
+U+0590d复|U+05fa9復|U+08907複|U+08986覆|
+U+06c47汇|U+0532f匯|U+05f59彙|
+U+083b7获|U+07372獲|U+07a6b穫|
+U+09965饥|U+098e2飢|U+09951饑|
+U+05c3d尽|U+076e1盡|U+05118儘|
+U+05386历|U+06b77歷|U+066c6曆|
+U+05364卤|U+06ef7滷|U+09e75鹵|
+U+05f25弥|U+05f4c彌|U+07030瀰|
+U+07b7e签|U+07c3d簽|U+07c56籖|
+U+07ea4纤|U+07e96纖|U+07e34縴|
+U+082cf苏|U+08607蘇|U+056cc囌|
+U+0575b坛|U+058c7壇|U+07f48罈|
+U+056e2团|U+05718團|U+07cf0糰|
+U+0987b须|U+09808須|U+09b1a鬚|
+U+0810f脏|U+081df臟|U+09ad2髒|
+U+053ea只|U+053ea只|U+096bb隻|
+U+0949f钟|U+09418鐘|U+0937e鍾|
+U+0836f药|U+085e5藥|U+0846f葯|
+U+0540c同|U+0540c同|U+08855衕|
+U+05fd7志|U+05fd7志|U+08a8c誌|
+U+0676f杯|U+0676f杯|U+076c3盃|
+U+05cb3岳|U+05cb3岳|U+05dbd嶽|
+U+05e03布|U+05e03布|U+04f48佈|
+U+05f53当|U+07576當|U+05679噹|
+U+0540a吊|U+05f14弔|U+0540a吊|
+U+04ec7仇|U+04ec7仇|U+08b8e讎|
+U+08574蕴|U+0860a蘊|U+085f4藴|
+U+07ebf线|U+07dda線|U+07dab綫|
+U+04e3a为|U+070ba為|U+07232爲|
+U+04ea7产|U+07522產|U+07523産|
+U+04f17众|U+0773e眾|U+08846衆|
+U+04f2a伪|U+0507d偽|U+050de僞|
+U+051eb凫|U+09ce7鳧|U+09cec鳬|
+U+05395厕|U+05ec1廁|U+053a0厠|
+U+0542f启|U+0555f啟|U+05553啓|
+U+05899墙|U+07246牆|U+058bb墻|
+U+058f3壳|U+06bbc殼|U+06bbb殻|
+U+05956奖|U+0734e獎|U+0596c奬|
+U+059ab妫|U+05aaf媯|U+05b00嬀|
+U+05e76并|U+04e26並|U+04f75併|
+U+05f55录|U+09304錄|U+09332録|
+U+060ab悫|U+06128愨|U+06164慤|
+U+06781极|U+06975極|U+06781极|
+U+06ca9沩|U+06e88溈|U+06f59潙|
+U+07618瘘|U+0763a瘺|U+0763b瘻|
+U+07877硷|U+09e7c鹼|U+07906礆|
+U+07ad6竖|U+08c4e豎|U+07aea竪|
+U+07edd绝|U+07d55絕|U+07d76絶|
+U+07ee3绣|U+07e61繡|U+07d89綉|
+U+07ee6绦|U+07d5b絛|U+07e27縧|
+U+07ef1绱|U+07dd4緔|U+0979d鞝|
+U+07ef7绷|U+07db3綳|U+07e43繃|
+U+07eff绿|U+07da0綠|U+07dd1緑|
+U+07f30缰|U+097c1韁|U+07e6e繮|
+U+082e7苧|U+082ce苎|U+085b4薴|
+U+083bc莼|U+08493蒓|U+084f4蓴|
+U+08bf4说|U+08aaa說|U+08aac説|
+U+08c23谣|U+08b20謠|U+08b21謡|
+U+08c2b谫|U+08b7e譾|U+08b2d謭|
+U+08d43赃|U+08d13贓|U+08d1c贜|
+U+08d4d赍|U+09f4e齎|U+08ceb賫|
+U+08d5d赝|U+08d17贗|U+08d0b贋|
+U+0915d酝|U+0919e醞|U+09196醖|
+U+091c7采|U+063a1採|U+091c7采|U+057f0埰|
+U+094a9钩|U+09264鉤|U+0920e鈎|
+U+094b5钵|U+07f3d缽|U+09262鉢|
+U+09508锈|U+092b9銹|U+093fd鏽|
+U+09510锐|U+092b3銳|U+092ed鋭|
+U+09528锨|U+06774杴|U+09341鍁|
+U+0954c镌|U+0942b鐫|U+093b8鎸|
+U+09562镢|U+09481钁|U+0941d鐝|
+U+09605阅|U+095b1閱|U+095b2閲|
+U+09893颓|U+09839頹|U+0983d頽|
+U+0989c颜|U+0984f顏|U+09854顔|
+U+09980馀|U+09918餘|
+U+09a82骂|U+07f75罵|U+099e1駡|
+U+09c87鲇|U+09bf0鯰|U+09b8e鮎|
+U+09c9e鲞|U+09bd7鯗|U+09b9d鮝|
+U+09cc4鳄|U+09c77鱷|U+09c10鰐|
+U+09e21鸡|U+096de雞|U+09dc4鷄|
+U+09e5a鹚|U+09dbf鶿|U+09dc0鷀|
Index: /MediaWiki/branches/1.11/includes/zhtable/trad2simp.manual
===================================================================
--- /MediaWiki/branches/1.11/includes/zhtable/trad2simp.manual	(revision 1280)
+++ /MediaWiki/branches/1.11/includes/zhtable/trad2simp.manual	(revision 1280)
@@ -0,0 +1,15 @@
+U+056a5嚥|U+054bd咽|
+U+0585a塚|U+051a2冢|
+U+05dbd嶽|U+05cb3岳|
+U+04e99亙|U+04e98亘|
+U+081e5臥|U+05367卧|
+U+04f48佈|U+05e03布|
+U+06dd2淒|U+051c4凄|
+U+06de8淨|U+051c0净|
+U+05147兇|U+051f6凶|
+U+04f48佈|U+05e03布|
+U+06c59汙|U+06c61污|
+U+056ae嚮|U+05411向|
+U+09031週|U+05468周|
+U+0904a遊|U+06e38游|
+U+06de9淩|U+051cc凌|
Index: /MediaWiki/branches/1.11/index.php
===================================================================
--- /MediaWiki/branches/1.11/index.php	(revision 1280)
+++ /MediaWiki/branches/1.11/index.php	(revision 1280)
@@ -0,0 +1,96 @@
+<?php
+
+/**
+ * This is the main web entry point for MediaWiki.
+ *
+ * If you are reading this in your web browser, your server is probably
+ * not configured correctly to run PHP applications!
+ *
+ * See the README, INSTALL, and UPGRADE files for basic setup instructions
+ * and pointers to the online documentation.
+ *
+ * http://www.mediawiki.org/
+ *
+ * ----------
+ *
+ * Copyright (C) 2001-2007 Magnus Manske, Brion Vibber, Lee Daniel Crocker,
+ * Tim Starling, Erik Möller, Gabriel Wicke, Ævar Arnfjörð Bjarmason,
+ * Niklas Laxström, Domas Mituzas, Rob Church and others.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ */
+
+
+# Initialise common code
+require_once( './includes/WebStart.php' );
+
+# Initialize MediaWiki base class
+require_once( "includes/Wiki.php" );
+$mediaWiki = new MediaWiki();
+
+wfProfileIn( 'main-misc-setup' );
+OutputPage::setEncodings(); # Not really used yet
+
+$maxLag = $wgRequest->getVal( 'maxlag' );
+if ( !is_null( $maxLag ) ) {
+	if ( !$mediaWiki->checkMaxLag( $maxLag ) ) {
+		exit;
+	}
+}
+
+# Query string fields
+$action = $wgRequest->getVal( 'action', 'view' );
+$title = $wgRequest->getVal( 'title' );
+
+$wgTitle = $mediaWiki->checkInitialQueries( $title,$action,$wgOut, $wgRequest, $wgContLang );
+if ($wgTitle == NULL) {
+	unset( $wgTitle );
+}
+
+#
+# Send Ajax requests to the Ajax dispatcher.
+#
+if ( $wgUseAjax && $action == 'ajax' ) {
+	require_once( $IP . '/includes/AjaxDispatcher.php' );
+
+	$dispatcher = new AjaxDispatcher();
+	$dispatcher->performAction();
+	$mediaWiki->restInPeace( $wgLoadBalancer );
+	exit;
+}
+
+
+wfProfileOut( 'main-misc-setup' );
+
+# Setting global variables in mediaWiki
+$mediaWiki->setVal( 'Server', $wgServer );
+$mediaWiki->setVal( 'DisableInternalSearch', $wgDisableInternalSearch );
+$mediaWiki->setVal( 'action', $action );
+$mediaWiki->setVal( 'SquidMaxage', $wgSquidMaxage );
+$mediaWiki->setVal( 'EnableDublinCoreRdf', $wgEnableDublinCoreRdf );
+$mediaWiki->setVal( 'EnableCreativeCommonsRdf', $wgEnableCreativeCommonsRdf );
+$mediaWiki->setVal( 'CommandLineMode', $wgCommandLineMode );
+$mediaWiki->setVal( 'UseExternalEditor', $wgUseExternalEditor );
+$mediaWiki->setVal( 'DisabledActions', $wgDisabledActions );
+
+$wgArticle = $mediaWiki->initialize ( $wgTitle, $wgOut, $wgUser, $wgRequest );
+$mediaWiki->finalCleanup ( $wgDeferredUpdateList, $wgLoadBalancer, $wgOut );
+
+# Not sure when $wgPostCommitUpdateList gets set, so I keep this separate from finalCleanup
+$mediaWiki->doUpdates( $wgPostCommitUpdateList );
+
+$mediaWiki->restInPeace( $wgLoadBalancer );
+?>
Index: /MediaWiki/branches/1.11/install-utils.inc
===================================================================
--- /MediaWiki/branches/1.11/install-utils.inc	(revision 1280)
+++ /MediaWiki/branches/1.11/install-utils.inc	(revision 1280)
@@ -0,0 +1,125 @@
+<?php
+
+function install_version_checks() {
+	# We dare not turn output buffer _off_ since this will break completely
+	# if PHP is globally configured to run through a gzip filter.
+	@ob_implicit_flush( true );
+
+	if( !function_exists( 'version_compare' ) ) {
+		# version_compare was introduced in 4.1.0
+		echo "Your PHP version is much too old; 4.0.x will _not_ work. 5.0.0 or higher is required. ABORTING.\n";
+		die( -1 );
+	}
+	if( version_compare( phpversion(), '5.0.0' ) < 0 ) {
+		echo "PHP 5.0.0 or higher is required. ABORTING.\n";
+		die( -1 );
+	}
+	
+	// Test for PHP bug which breaks PHP 5.0.x on 64-bit...
+	// As of 1.8 this breaks lots of common operations instead
+	// of just some rare ones like export.
+	$borked = str_replace( 'a', 'b', array( -1 => -1 ) );
+	if( !isset( $borked[-1] ) ) {
+		echo "PHP 5.0.x is buggy on your 64-bit system; you must upgrade to PHP 5.1.x\n" .
+			"or higher. ABORTING. (http://bugs.php.net/bug.php?id=34879 for details)\n";
+		die( -1 );
+	}
+
+	global $wgCommandLineMode;
+	$wgCommandLineMode = true;
+	umask( 000 );
+	@set_time_limit( 0 );
+}
+
+function copyfile( $sdir, $name, $ddir, $perms = 0664 ) {
+	copyfileto( $sdir, $name, $ddir, $name, $perms );
+}
+
+function copyfileto( $sdir, $sname, $ddir, $dname, $perms = 0664 ) {
+	global $wgInstallOwner, $wgInstallGroup;
+
+	$d = "{$ddir}/{$dname}";
+	if ( copy( "{$sdir}/{$sname}", $d ) ) {
+		if ( isset( $wgInstallOwner ) ) { chown( $d, $wgInstallOwner ); }
+		if ( isset( $wgInstallGroup ) ) { chgrp( $d, $wgInstallGroup ); }
+		chmod( $d, $perms );
+		# print "Copied \"{$sname}\" to \"{$d}\".\n";
+	} else {
+		print "Failed to copy file \"{$sname}\" to \"{$ddir}/{$dname}\".\n";
+		exit();
+	}
+}
+
+function copydirectory( $source, $dest ) {
+	$handle = opendir( $source );
+	while ( false !== ( $f = readdir( $handle ) ) ) {
+		$fullname = "$source/$f";
+		if ( $f{0} != '.' && is_file( $fullname ) ) {
+			copyfile( $source, $f, $dest );
+		}
+	}
+}
+
+function readconsole( $prompt = '' ) {
+	static $isatty = null;
+	if ( is_null( $isatty ) ) {
+		if ( !function_exists( 'posix_isatty' ) || posix_isatty( 0 /*STDIN*/ ) ) {
+			$isatty = true;
+		} else {
+			$isatty = false;
+		}
+	}
+
+	if ( $isatty && function_exists( 'readline' ) ) {
+		return readline( $prompt );
+	} else {
+		if ( $isatty ) {
+			print $prompt;
+		}
+		if ( feof( STDIN ) ) {
+			return false;
+		}
+		$st = fgets(STDIN, 1024);
+		if ($st === false) return false;
+		$resp = trim( $st );
+		return $resp;
+	}
+}
+
+#
+# Read and execute SQL commands from a file
+#
+function dbsource( $fname, $db = false ) {
+	if ( !$db ) {
+		// Try $wgDatabase, which is used in the install and update scripts
+		global $wgDatabase;
+		if ( isset( $wgDatabase ) ) {
+			$db = $wgDatabase;
+		} else {
+			// No? Well, we must be outside of those scripts, so use the standard method
+			$db = wfGetDB( DB_MASTER );
+		}
+	}
+	$error = $db->sourceFile( $fname );
+	if ( $error !== true ) {
+		print $error;
+		exit(1);
+	}
+}
+
+/**
+ * Get the value of session.save_path
+ *
+ * Per http://uk.php.net/manual/en/ref.session.php#ini.session.save-path,
+ * this might have some additional preceding parts which need to be
+ * ditched
+ *
+ * @return string
+ */
+function mw_get_session_save_path() {
+	$path = ini_get( 'session.save_path' );
+	$path = substr( $path, strrpos( $path, ';' ) );
+	return $path;
+}
+
+?>
Index: /MediaWiki/branches/1.11/languages/.htaccess
===================================================================
--- /MediaWiki/branches/1.11/languages/.htaccess	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/.htaccess	(revision 1280)
@@ -0,0 +1,1 @@
+Deny from all
Index: /MediaWiki/branches/1.11/languages/Language.php
===================================================================
--- /MediaWiki/branches/1.11/languages/Language.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/Language.php	(revision 1280)
@@ -0,0 +1,1816 @@
+<?php
+/**
+ * @addtogroup Language
+ */
+
+if( !defined( 'MEDIAWIKI' ) ) {
+	echo "This file is part of MediaWiki, it is not a valid entry point.\n";
+	exit( 1 );
+}
+
+#
+# In general you should not make customizations in these language files
+# directly, but should use the MediaWiki: special namespace to customize
+# user interface messages through the wiki.
+# See http://meta.wikipedia.org/wiki/MediaWiki_namespace
+#
+# NOTE TO TRANSLATORS: Do not copy this whole file when making translations!
+# A lot of common constants and a base class with inheritable methods are
+# defined here, which should not be redefined. See the other LanguageXx.php
+# files for examples.
+#
+
+# Read language names
+global $wgLanguageNames;
+require_once( dirname(__FILE__) . '/Names.php' ) ;
+
+global $wgInputEncoding, $wgOutputEncoding;
+
+/**
+ * These are always UTF-8, they exist only for backwards compatibility
+ */
+$wgInputEncoding    = "UTF-8";
+$wgOutputEncoding	= "UTF-8";
+
+if( function_exists( 'mb_strtoupper' ) ) {
+	mb_internal_encoding('UTF-8');
+}
+
+/* a fake language converter */
+class FakeConverter {
+	var $mLang;
+	function FakeConverter($langobj) {$this->mLang = $langobj;}
+	function convert($t, $i) {return $t;}
+	function parserConvert($t, $p) {return $t;}
+	function getVariants() { return array( $this->mLang->getCode() ); }
+	function getPreferredVariant() {return $this->mLang->getCode(); }
+	function findVariantLink(&$l, &$n) {}
+	function getExtraHashOptions() {return '';}
+	function getParsedTitle() {return '';}
+	function markNoConversion($text, $noParse=false) {return $text;}
+	function convertCategoryKey( $key ) {return $key; }
+	function convertLinkToAllVariants($text){ return array( $this->mLang->getCode() => $text); }
+	function armourMath($text){ return $text; }
+}
+
+#--------------------------------------------------------------------------
+# Internationalisation code
+#--------------------------------------------------------------------------
+
+class Language {
+	var $mConverter, $mVariants, $mCode, $mLoaded = false;
+
+	static public $mLocalisationKeys = array( 'fallback', 'namespaceNames',
+		'skinNames', 'mathNames', 
+		'bookstoreList', 'magicWords', 'messages', 'rtl', 'digitTransformTable', 
+		'separatorTransformTable', 'fallback8bitEncoding', 'linkPrefixExtension',
+		'defaultUserOptionOverrides', 'linkTrail', 'namespaceAliases', 
+		'dateFormats', 'datePreferences', 'datePreferenceMigrationMap', 
+		'defaultDateFormat', 'extraUserToggles', 'specialPageAliases' );
+
+	static public $mMergeableMapKeys = array( 'messages', 'namespaceNames', 'mathNames', 
+		'dateFormats', 'defaultUserOptionOverrides', 'magicWords' );
+
+	static public $mMergeableListKeys = array( 'extraUserToggles' );
+
+	static public $mMergeableAliasListKeys = array( 'specialPageAliases' );
+
+	static public $mLocalisationCache = array();
+
+	static public $mWeekdayMsgs = array(
+		'sunday', 'monday', 'tuesday', 'wednesday', 'thursday',
+		'friday', 'saturday'
+	);
+
+	static public $mWeekdayAbbrevMsgs = array(
+		'sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'
+	);
+
+	static public $mMonthMsgs = array(
+		'january', 'february', 'march', 'april', 'may_long', 'june',
+		'july', 'august', 'september', 'october', 'november',
+		'december'
+	);
+	static public $mMonthGenMsgs = array(
+		'january-gen', 'february-gen', 'march-gen', 'april-gen', 'may-gen', 'june-gen',
+		'july-gen', 'august-gen', 'september-gen', 'october-gen', 'november-gen',
+		'december-gen'
+	);
+	static public $mMonthAbbrevMsgs = array(
+		'jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug',
+		'sep', 'oct', 'nov', 'dec'
+	);
+
+	/**
+	 * Create a language object for a given language code
+	 */
+	static function factory( $code ) {
+		global $IP;
+		static $recursionLevel = 0;
+
+		if ( $code == 'en' ) {
+			$class = 'Language';
+		} else {
+			$class = 'Language' . str_replace( '-', '_', ucfirst( $code ) );
+			// Preload base classes to work around APC/PHP5 bug
+			if ( file_exists( "$IP/languages/classes/$class.deps.php" ) ) {
+				include_once("$IP/languages/classes/$class.deps.php");
+			}
+			if ( file_exists( "$IP/languages/classes/$class.php" ) ) {
+				include_once("$IP/languages/classes/$class.php");
+			}
+		}
+
+		if ( $recursionLevel > 5 ) {
+			throw new MWException( "Language fallback loop detected when creating class $class\n" );
+		}	
+
+		if( ! class_exists( $class ) ) {
+			$fallback = Language::getFallbackFor( $code );
+			++$recursionLevel;
+			$lang = Language::factory( $fallback );
+			--$recursionLevel;
+			$lang->setCode( $code );
+		} else {
+			$lang = new $class;
+		}
+
+		return $lang;
+	}
+
+	function __construct() {
+		$this->mConverter = new FakeConverter($this);
+		// Set the code to the name of the descendant
+		if ( get_class( $this ) == 'Language' ) {
+			$this->mCode = 'en';
+		} else {
+			$this->mCode = str_replace( '_', '-', strtolower( substr( get_class( $this ), 8 ) ) );
+		}
+	}
+
+	/**
+	 * Hook which will be called if this is the content language.
+	 * Descendants can use this to register hook functions or modify globals
+	 */
+	function initContLang() {}
+
+	/**
+	 * @deprecated
+	 * @return array
+	 */
+	function getDefaultUserOptions() {
+		return User::getDefaultOptions();
+	}
+
+	function getFallbackLanguageCode() {
+		$this->load();
+		return $this->fallback;
+	}
+
+	/**
+	 * Exports $wgBookstoreListEn
+	 * @return array
+	 */
+	function getBookstoreList() {
+		$this->load();
+		return $this->bookstoreList;
+	}
+
+	/**
+	 * @return array
+	 */
+	function getNamespaces() {
+		$this->load();
+		return $this->namespaceNames;
+	}
+
+	/**
+	 * A convenience function that returns the same thing as
+	 * getNamespaces() except with the array values changed to ' '
+	 * where it found '_', useful for producing output to be displayed
+	 * e.g. in <select> forms.
+	 *
+	 * @return array
+	 */
+	function getFormattedNamespaces() {
+		$ns = $this->getNamespaces();
+		foreach($ns as $k => $v) {
+			$ns[$k] = strtr($v, '_', ' ');
+		}
+		return $ns;
+	}
+
+	/**
+	 * Get a namespace value by key
+	 * <code>
+	 * $mw_ns = $wgContLang->getNsText( NS_MEDIAWIKI );
+	 * echo $mw_ns; // prints 'MediaWiki'
+	 * </code>
+	 *
+	 * @param int $index the array key of the namespace to return
+	 * @return mixed, string if the namespace value exists, otherwise false
+	 */
+	function getNsText( $index ) {
+		$ns = $this->getNamespaces();
+		return isset( $ns[$index] ) ? $ns[$index] : false;
+	}
+
+	/**
+	 * A convenience function that returns the same thing as
+	 * getNsText() except with '_' changed to ' ', useful for
+	 * producing output.
+	 *
+	 * @return array
+	 */
+	function getFormattedNsText( $index ) {
+		$ns = $this->getNsText( $index );
+		return strtr($ns, '_', ' ');
+	}
+
+	/**
+	 * Get a namespace key by value, case insensitive.
+	 * Only matches namespace names for the current language, not the
+	 * canonical ones defined in Namespace.php.
+	 *
+	 * @param string $text
+	 * @return mixed An integer if $text is a valid value otherwise false
+	 */
+	function getLocalNsIndex( $text ) {
+		$this->load();
+		$lctext = $this->lc($text);
+		return isset( $this->mNamespaceIds[$lctext] ) ? $this->mNamespaceIds[$lctext] : false;
+	}
+
+	/**
+	 * Get a namespace key by value, case insensitive.  Canonical namespace
+	 * names override custom ones defined for the current language.
+	 *
+	 * @param string $text
+	 * @return mixed An integer if $text is a valid value otherwise false
+	 */
+	function getNsIndex( $text ) {
+		$this->load();
+		$lctext = $this->lc($text);
+		if( ( $ns = Namespace::getCanonicalIndex( $lctext ) ) !== null ) return $ns;
+		return isset( $this->mNamespaceIds[$lctext] ) ? $this->mNamespaceIds[$lctext] : false;
+	}
+
+	/**
+	 * short names for language variants used for language conversion links.
+	 *
+	 * @param string $code
+	 * @return string
+	 */
+	function getVariantname( $code ) {
+		return $this->getMessageFromDB( "variantname-$code" );
+	}
+
+	function specialPage( $name ) {
+		$aliases = $this->getSpecialPageAliases();
+		if ( isset( $aliases[$name][0] ) ) {
+			$name = $aliases[$name][0];
+		}
+		return $this->getNsText(NS_SPECIAL) . ':' . $name;
+	}
+
+	function getQuickbarSettings() {
+		return array(
+			$this->getMessage( 'qbsettings-none' ),
+			$this->getMessage( 'qbsettings-fixedleft' ),
+			$this->getMessage( 'qbsettings-fixedright' ),
+			$this->getMessage( 'qbsettings-floatingleft' ),
+			$this->getMessage( 'qbsettings-floatingright' )
+		);
+	}
+
+	function getSkinNames() {
+		$this->load();
+		return $this->skinNames;
+	}
+
+	function getMathNames() {
+		$this->load();
+		return $this->mathNames;
+	}
+
+	function getDatePreferences() {
+		$this->load();
+		return $this->datePreferences;
+	}
+	
+	function getDateFormats() {
+		$this->load();
+		return $this->dateFormats;
+	}
+
+	function getDefaultDateFormat() {
+		$this->load();
+		return $this->defaultDateFormat;
+	}
+
+	function getDatePreferenceMigrationMap() {
+		$this->load();
+		return $this->datePreferenceMigrationMap;
+	}
+
+	function getDefaultUserOptionOverrides() {
+		$this->load();
+		return $this->defaultUserOptionOverrides;
+	}
+
+	function getExtraUserToggles() {
+		$this->load();
+		return $this->extraUserToggles;
+	}
+
+	function getUserToggle( $tog ) {
+		return $this->getMessageFromDB( "tog-$tog" );
+	}
+
+	/**
+	 * Get language names, indexed by code.
+	 * If $customisedOnly is true, only returns codes with a messages file
+	 */
+	public static function getLanguageNames( $customisedOnly = false ) {
+		global $wgLanguageNames;
+		if ( !$customisedOnly ) {
+			return $wgLanguageNames;
+		}
+		
+		global $IP;
+		$messageFiles = glob( "$IP/languages/messages/Messages*.php" );
+		$names = array();
+		foreach ( $messageFiles as $file ) {
+			$m = array();
+			if( preg_match( '/Messages([A-Z][a-z_]+)\.php$/', $file, $m ) ) {
+				$code = str_replace( '_', '-', strtolower( $m[1] ) );
+				if ( isset( $wgLanguageNames[$code] ) ) {
+					$names[$code] = $wgLanguageNames[$code];
+				}
+			}
+		}
+		return $names;
+	}
+
+	/**
+	 * Ugly hack to get a message maybe from the MediaWiki namespace, if this
+	 * language object is the content or user language.
+	 */
+	function getMessageFromDB( $msg ) {
+		global $wgContLang, $wgLang;
+		if ( $wgContLang->getCode() == $this->getCode() ) {
+			# Content language
+			return wfMsgForContent( $msg );
+		} elseif ( $wgLang->getCode() == $this->getCode() ) {
+			# User language
+			return wfMsg( $msg );
+		} else {
+			# Neither, get from localisation
+			return $this->getMessage( $msg );
+		}
+	}
+
+	function getLanguageName( $code ) {
+		global $wgLanguageNames;
+		if ( ! array_key_exists( $code, $wgLanguageNames ) ) {
+			return '';
+		}
+		return $wgLanguageNames[$code];
+	}
+
+	function getMonthName( $key ) {
+		return $this->getMessageFromDB( self::$mMonthMsgs[$key-1] );
+	}
+
+	function getMonthNameGen( $key ) {
+		return $this->getMessageFromDB( self::$mMonthGenMsgs[$key-1] );
+	}
+
+	function getMonthAbbreviation( $key ) {
+		return $this->getMessageFromDB( self::$mMonthAbbrevMsgs[$key-1] );
+	}
+
+	function getWeekdayName( $key ) {
+		return $this->getMessageFromDB( self::$mWeekdayMsgs[$key-1] );
+	}
+
+	function getWeekdayAbbreviation( $key ) {
+		return $this->getMessageFromDB( self::$mWeekdayAbbrevMsgs[$key-1] );
+	}
+
+	/**
+	 * Used by date() and time() to adjust the time output.
+	 * @public
+	 * @param int   $ts the time in date('YmdHis') format
+	 * @param mixed $tz adjust the time by this amount (default false,
+	 *                  mean we get user timecorrection setting)
+	 * @return int
+	 */
+	function userAdjust( $ts, $tz = false )	{
+		global $wgUser, $wgLocalTZoffset;
+
+		if (!$tz) {
+			$tz = $wgUser->getOption( 'timecorrection' );
+		}
+
+		# minutes and hours differences:
+		$minDiff = 0;
+		$hrDiff  = 0;
+
+		if ( $tz === '' ) {
+			# Global offset in minutes.
+			if( isset($wgLocalTZoffset) ) {
+				$hrDiff = $wgLocalTZoffset % 60;
+				$minDiff = $wgLocalTZoffset - ($hrDiff * 60);
+			}
+		} elseif ( strpos( $tz, ':' ) !== false ) {
+			$tzArray = explode( ':', $tz );
+			$hrDiff = intval($tzArray[0]);
+			$minDiff = intval($hrDiff < 0 ? -$tzArray[1] : $tzArray[1]);
+		} else {
+			$hrDiff = intval( $tz );
+		}
+
+		# No difference ? Return time unchanged
+		if ( 0 == $hrDiff && 0 == $minDiff ) { return $ts; }
+
+		# Generate an adjusted date
+		$t = mktime( (
+		  (int)substr( $ts, 8, 2) ) + $hrDiff, # Hours
+		  (int)substr( $ts, 10, 2 ) + $minDiff, # Minutes
+		  (int)substr( $ts, 12, 2 ), # Seconds
+		  (int)substr( $ts, 4, 2 ), # Month
+		  (int)substr( $ts, 6, 2 ), # Day
+		  (int)substr( $ts, 0, 4 ) ); #Year
+		return date( 'YmdHis', $t );
+	}
+
+	/**
+	 * This is a workalike of PHP's date() function, but with better
+	 * internationalisation, a reduced set of format characters, and a better 
+	 * escaping format.
+	 *
+	 * Supported format characters are dDjlNwzWFmMntLYyaAgGhHiscrU. See the 
+	 * PHP manual for definitions. There are a number of extensions, which 
+	 * start with "x":
+	 *
+	 *    xn   Do not translate digits of the next numeric format character
+	 *    xN   Toggle raw digit (xn) flag, stays set until explicitly unset
+	 *    xr   Use roman numerals for the next numeric format character
+	 *    xx   Literal x
+	 *    xg   Genitive month name
+	 *
+	 * Characters enclosed in double quotes will be considered literal (with
+	 * the quotes themselves removed). Unmatched quotes will be considered
+	 * literal quotes. Example:
+	 *
+	 * "The month is" F       => The month is January
+	 * i's"                   => 20'11"
+	 *
+	 * Backslash escaping is also supported.
+	 * 
+	 * @param string $format
+	 * @param string $ts 14-character timestamp
+	 *      YYYYMMDDHHMMSS
+	 *      01234567890123
+	 */
+	function sprintfDate( $format, $ts ) {
+		$s = '';
+		$raw = false;
+		$roman = false;
+		$unix = false;
+		$rawToggle = false;
+		for ( $p = 0; $p < strlen( $format ); $p++ ) {
+			$num = false;
+			$code = $format[$p];
+			if ( $code == 'x' && $p < strlen( $format ) - 1 ) {
+				$code .= $format[++$p];
+			}
+			
+			switch ( $code ) {
+				case 'xx':
+					$s .= 'x';
+					break;
+				case 'xn':
+					$raw = true;
+					break;
+				case 'xN':
+					$rawToggle = !$rawToggle;
+					break;
+				case 'xr':
+					$roman = true;
+					break;
+				case 'xg':
+					$s .= $this->getMonthNameGen( substr( $ts, 4, 2 ) );
+					break;
+				case 'd':
+					$num = substr( $ts, 6, 2 );
+					break;
+				case 'D':
+					if ( !$unix ) $unix = wfTimestamp( TS_UNIX, $ts );
+					$s .= $this->getWeekdayAbbreviation( date( 'w', $unix ) + 1 );
+					break;
+				case 'j':
+					$num = intval( substr( $ts, 6, 2 ) );
+					break;
+				case 'l':
+					if ( !$unix ) $unix = wfTimestamp( TS_UNIX, $ts );
+					$s .= $this->getWeekdayName( date( 'w', $unix ) + 1 );
+					break;
+				case 'N':
+					if ( !$unix ) $unix = wfTimestamp( TS_UNIX, $ts );
+					$w = date( 'w', $unix );
+					$num = $w ? $w : 7;
+					break;
+				case 'w':
+					if ( !$unix ) $unix = wfTimestamp( TS_UNIX, $ts );
+					$num = date( 'w', $unix );
+					break;
+				case 'z':
+					if ( !$unix ) $unix = wfTimestamp( TS_UNIX, $ts );
+					$num = date( 'z', $unix );
+					break;
+				case 'W':
+					if ( !$unix ) $unix = wfTimestamp( TS_UNIX, $ts );
+					$num = date( 'W', $unix );
+					break;					
+				case 'F':
+					$s .= $this->getMonthName( substr( $ts, 4, 2 ) );
+					break;
+				case 'm':
+					$num = substr( $ts, 4, 2 );
+					break;
+				case 'M':
+					$s .= $this->getMonthAbbreviation( substr( $ts, 4, 2 ) );
+					break;
+				case 'n':
+					$num = intval( substr( $ts, 4, 2 ) );
+					break;
+				case 't':
+					if ( !$unix ) $unix = wfTimestamp( TS_UNIX, $ts );
+					$num = date( 't', $unix );
+					break;
+				case 'L':
+					if ( !$unix ) $unix = wfTimestamp( TS_UNIX, $ts );
+					$num = date( 'L', $unix );
+					break;					
+				case 'Y':
+					$num = substr( $ts, 0, 4 );
+					break;
+				case 'y':
+					$num = substr( $ts, 2, 2 );
+					break;
+				case 'a':
+					$s .= intval( substr( $ts, 8, 2 ) ) < 12 ? 'am' : 'pm';
+					break;
+				case 'A':
+					$s .= intval( substr( $ts, 8, 2 ) ) < 12 ? 'AM' : 'PM';
+					break;
+				case 'g':
+					$h = substr( $ts, 8, 2 );
+					$num = $h % 12 ? $h % 12 : 12;
+					break;
+				case 'G':
+					$num = intval( substr( $ts, 8, 2 ) );
+					break;
+				case 'h':
+					$h = substr( $ts, 8, 2 );
+					$num = sprintf( '%02d', $h % 12 ? $h % 12 : 12 );
+					break;					
+				case 'H':
+					$num = substr( $ts, 8, 2 );
+					break;
+				case 'i':
+					$num = substr( $ts, 10, 2 );
+					break;
+				case 's':
+					$num = substr( $ts, 12, 2 );
+					break;
+				case 'c':
+					if ( !$unix ) $unix = wfTimestamp( TS_UNIX, $ts );
+					$s .= date( 'c', $unix );
+					break;
+				case 'r':
+					if ( !$unix ) $unix = wfTimestamp( TS_UNIX, $ts );
+					$s .= date( 'r', $unix );
+					break;
+				case 'U':
+					if ( !$unix ) $unix = wfTimestamp( TS_UNIX, $ts );
+					$num = $unix;
+					break;
+				case '\\':
+					# Backslash escaping
+					if ( $p < strlen( $format ) - 1 ) {
+						$s .= $format[++$p];
+					} else {
+						$s .= '\\';
+					}
+					break;
+				case '"':
+					# Quoted literal
+					if ( $p < strlen( $format ) - 1 ) {
+						$endQuote = strpos( $format, '"', $p + 1 );
+						if ( $endQuote === false ) {
+							# No terminating quote, assume literal "
+							$s .= '"';
+						} else {
+							$s .= substr( $format, $p + 1, $endQuote - $p - 1 );
+							$p = $endQuote;
+						}
+					} else {
+						# Quote at end of string, assume literal "
+						$s .= '"';
+					}
+					break;
+				default:
+					$s .= $format[$p];
+			}
+			if ( $num !== false ) {
+				if ( $rawToggle || $raw ) {
+					$s .= $num;
+					$raw = false;
+				} elseif ( $roman ) {
+					$s .= self::romanNumeral( $num );
+					$roman = false;
+				} else {
+					$s .= $this->formatNum( $num, true );
+				}
+				$num = false;
+			}
+		}
+		return $s;
+	}
+
+	/**
+	 * Roman number formatting up to 3000
+	 */
+	static function romanNumeral( $num ) {
+		static $table = array(
+			array( '', 'I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX', 'X' ),
+			array( '', 'X', 'XX', 'XXX', 'XL', 'L', 'LX', 'LXX', 'LXXX', 'XC', 'C' ),
+			array( '', 'C', 'CC', 'CCC', 'CD', 'D', 'DC', 'DCC', 'DCCC', 'CM', 'M' ),
+			array( '', 'M', 'MM', 'MMM' )
+		);
+			
+		$num = intval( $num );
+		if ( $num > 3000 || $num <= 0 ) {
+			return $num;
+		}
+
+		$s = '';
+		for ( $pow10 = 1000, $i = 3; $i >= 0; $pow10 /= 10, $i-- ) {
+			if ( $num >= $pow10 ) {
+				$s .= $table[$i][floor($num / $pow10)];
+			}
+			$num = $num % $pow10;
+		}
+		return $s;
+	}
+
+	/**
+	 * This is meant to be used by time(), date(), and timeanddate() to get
+	 * the date preference they're supposed to use, it should be used in
+	 * all children.
+	 *
+	 *<code>
+	 * function timeanddate([...], $format = true) {
+	 * 	$datePreference = $this->dateFormat($format);
+	 * [...]
+	 * }
+	 *</code>
+	 *
+	 * @param mixed $usePrefs: if true, the user's preference is used
+	 *                         if false, the site/language default is used
+	 *                         if int/string, assumed to be a format.
+	 * @return string
+	 */
+	function dateFormat( $usePrefs = true ) {
+		global $wgUser;
+
+		if( is_bool( $usePrefs ) ) {
+			if( $usePrefs ) {
+				$datePreference = $wgUser->getDatePreference();
+			} else {
+				$options = User::getDefaultOptions();
+				$datePreference = (string)$options['date'];
+			}
+		} else {
+			$datePreference = (string)$usePrefs;
+		}
+
+		// return int
+		if( $datePreference == '' ) {
+			return 'default';
+		}
+		
+		return $datePreference;
+	}
+
+	/**
+	 * @public
+	 * @param mixed  $ts the time format which needs to be turned into a
+	 *               date('YmdHis') format with wfTimestamp(TS_MW,$ts)
+	 * @param bool   $adj whether to adjust the time output according to the
+	 *               user configured offset ($timecorrection)
+	 * @param mixed  $format true to use user's date format preference
+	 * @param string $timecorrection the time offset as returned by
+	 *               validateTimeZone() in Special:Preferences
+	 * @return string
+	 */
+	function date( $ts, $adj = false, $format = true, $timecorrection = false ) {
+		$this->load();
+		if ( $adj ) { 
+			$ts = $this->userAdjust( $ts, $timecorrection ); 
+		}
+
+		$pref = $this->dateFormat( $format );
+		if( $pref == 'default' || !isset( $this->dateFormats["$pref date"] ) ) {
+			$pref = $this->defaultDateFormat;
+		}
+		return $this->sprintfDate( $this->dateFormats["$pref date"], $ts );
+	}
+
+	/**
+	* @public
+	* @param mixed  $ts the time format which needs to be turned into a
+	*               date('YmdHis') format with wfTimestamp(TS_MW,$ts)
+	* @param bool   $adj whether to adjust the time output according to the
+	*               user configured offset ($timecorrection)
+	* @param mixed  $format true to use user's date format preference
+	* @param string $timecorrection the time offset as returned by
+	*               validateTimeZone() in Special:Preferences
+	* @return string
+	*/
+	function time( $ts, $adj = false, $format = true, $timecorrection = false ) {
+		$this->load();
+		if ( $adj ) { 
+			$ts = $this->userAdjust( $ts, $timecorrection ); 
+		}
+
+		$pref = $this->dateFormat( $format );
+		if( $pref == 'default' || !isset( $this->dateFormats["$pref time"] ) ) {
+			$pref = $this->defaultDateFormat;
+		}
+		return $this->sprintfDate( $this->dateFormats["$pref time"], $ts );
+	}
+
+	/**
+	* @public
+	* @param mixed  $ts the time format which needs to be turned into a
+	*               date('YmdHis') format with wfTimestamp(TS_MW,$ts)
+	* @param bool   $adj whether to adjust the time output according to the
+	*               user configured offset ($timecorrection)
+
+	* @param mixed  $format what format to return, if it's false output the
+	*               default one (default true)
+	* @param string $timecorrection the time offset as returned by
+	*               validateTimeZone() in Special:Preferences
+	* @return string
+	*/
+	function timeanddate( $ts, $adj = false, $format = true, $timecorrection = false) {
+		$this->load();
+
+		$ts = wfTimestamp( TS_MW, $ts );
+
+		if ( $adj ) { 
+			$ts = $this->userAdjust( $ts, $timecorrection ); 
+		}
+
+		$pref = $this->dateFormat( $format );
+		if( $pref == 'default' || !isset( $this->dateFormats["$pref both"] ) ) {
+			$pref = $this->defaultDateFormat;
+		}
+
+		return $this->sprintfDate( $this->dateFormats["$pref both"], $ts );
+	}
+
+	function getMessage( $key ) {
+		$this->load();
+		return isset( $this->messages[$key] ) ? $this->messages[$key] : null;
+	}
+
+	function getAllMessages() {
+		$this->load();
+		return $this->messages;
+	}
+
+	function iconv( $in, $out, $string ) {
+		# For most languages, this is a wrapper for iconv
+		return iconv( $in, $out . '//IGNORE', $string );
+	}
+
+	// callback functions for uc(), lc(), ucwords(), ucwordbreaks()
+	function ucwordbreaksCallbackAscii($matches){
+		return $this->ucfirst($matches[1]);
+	}
+	
+	function ucwordbreaksCallbackMB($matches){
+		return mb_strtoupper($matches[0]);
+	}
+	
+	function ucCallback($matches){
+		list( $wikiUpperChars ) = self::getCaseMaps();
+		return strtr( $matches[1], $wikiUpperChars );
+	}
+	
+	function lcCallback($matches){
+		list( , $wikiLowerChars ) = self::getCaseMaps();
+		return strtr( $matches[1], $wikiLowerChars );
+	}
+	
+	function ucwordsCallbackMB($matches){
+		return mb_strtoupper($matches[0]);
+	}
+	
+	function ucwordsCallbackWiki($matches){
+		list( $wikiUpperChars ) = self::getCaseMaps();
+		return strtr( $matches[0], $wikiUpperChars );
+	}
+
+	function ucfirst( $str ) {
+		return self::uc( $str, true );
+	}
+
+	function uc( $str, $first = false ) {
+		if ( function_exists( 'mb_strtoupper' ) ) {
+			if ( $first ) {
+				if ( self::isMultibyte( $str ) ) {
+					return mb_strtoupper( mb_substr( $str, 0, 1 ) ) . mb_substr( $str, 1 );
+				} else {
+					return ucfirst( $str );
+				}
+			} else {
+				return self::isMultibyte( $str ) ? mb_strtoupper( $str ) : strtoupper( $str );
+			}
+		} else {
+			if ( self::isMultibyte( $str ) ) {
+				list( $wikiUpperChars ) = $this->getCaseMaps();
+				$x = $first ? '^' : '';
+				return preg_replace_callback(
+					"/$x([a-z]|[\\xc0-\\xff][\\x80-\\xbf]*)/",
+					array($this,"ucCallback"),
+					$str
+				);
+			} else {
+				return $first ? ucfirst( $str ) : strtoupper( $str );
+			}
+		}
+	}
+	
+	function lcfirst( $str ) {
+		return self::lc( $str, true );
+	}
+
+	function lc( $str, $first = false ) {
+		if ( function_exists( 'mb_strtolower' ) )
+			if ( $first )
+				if ( self::isMultibyte( $str ) )
+					return mb_strtolower( mb_substr( $str, 0, 1 ) ) . mb_substr( $str, 1 );
+				else
+					return strtolower( substr( $str, 0, 1 ) ) . substr( $str, 1 );
+			else
+				return self::isMultibyte( $str ) ? mb_strtolower( $str ) : strtolower( $str );
+		else
+			if ( self::isMultibyte( $str ) ) {
+				list( , $wikiLowerChars ) = self::getCaseMaps();
+				$x = $first ? '^' : '';
+				return preg_replace_callback(
+					"/$x([A-Z]|[\\xc0-\\xff][\\x80-\\xbf]*)/",
+					array($this,"lcCallback"),
+					$str
+				);
+			} else
+				return $first ? strtolower( substr( $str, 0, 1 ) ) . substr( $str, 1 ) : strtolower( $str );
+	}
+
+	function isMultibyte( $str ) {
+		return (bool)preg_match( '/[\x80-\xff]/', $str );
+	}
+
+	function ucwords($str) {
+		if ( self::isMultibyte( $str ) ) {
+			$str = self::lc($str);
+
+			// regexp to find first letter in each word (i.e. after each space)
+			$replaceRegexp = "/^([a-z]|[\\xc0-\\xff][\\x80-\\xbf]*)| ([a-z]|[\\xc0-\\xff][\\x80-\\xbf]*)/";
+
+			// function to use to capitalize a single char
+			if ( function_exists( 'mb_strtoupper' ) )
+				return preg_replace_callback(
+					$replaceRegexp,
+					array($this,"ucwordsCallbackMB"),
+					$str
+				);
+			else 
+				return preg_replace_callback(
+					$replaceRegexp,
+					array($this,"ucwordsCallbackWiki"),
+					$str
+				);
+		}
+		else
+			return ucwords( strtolower( $str ) );
+	}
+
+  # capitalize words at word breaks
+	function ucwordbreaks($str){
+		if (self::isMultibyte( $str ) ) {
+			$str = self::lc($str);
+
+			// since \b doesn't work for UTF-8, we explicitely define word break chars
+			$breaks= "[ \-\(\)\}\{\.,\?!]";
+
+			// find first letter after word break
+			$replaceRegexp = "/^([a-z]|[\\xc0-\\xff][\\x80-\\xbf]*)|$breaks([a-z]|[\\xc0-\\xff][\\x80-\\xbf]*)/";
+
+			if ( function_exists( 'mb_strtoupper' ) )
+				return preg_replace_callback(
+					$replaceRegexp,
+					array($this,"ucwordbreaksCallbackMB"),
+					$str
+				);
+			else 
+				return preg_replace_callback(
+					$replaceRegexp,
+					array($this,"ucwordsCallbackWiki"),
+					$str
+				);
+		}
+		else
+			return preg_replace_callback(
+			'/\b([\w\x80-\xff]+)\b/',
+			array($this,"ucwordbreaksCallbackAscii"),
+			$str );
+	}
+
+	/**
+	 * Return a case-folded representation of $s
+	 *
+	 * This is a representation such that caseFold($s1)==caseFold($s2) if $s1 
+	 * and $s2 are the same except for the case of their characters. It is not
+	 * necessary for the value returned to make sense when displayed.
+	 *
+	 * Do *not* perform any other normalisation in this function. If a caller
+	 * uses this function when it should be using a more general normalisation
+	 * function, then fix the caller.
+	 */
+	function caseFold( $s ) {
+		return $this->uc( $s );
+	}
+
+	function checkTitleEncoding( $s ) {
+		if( is_array( $s ) ) {
+			wfDebugDieBacktrace( 'Given array to checkTitleEncoding.' );
+		}
+		# Check for non-UTF-8 URLs
+		$ishigh = preg_match( '/[\x80-\xff]/', $s);
+		if(!$ishigh) return $s;
+
+		$isutf8 = preg_match( '/^([\x00-\x7f]|[\xc0-\xdf][\x80-\xbf]|' .
+                '[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xf7][\x80-\xbf]{3})+$/', $s );
+		if( $isutf8 ) return $s;
+
+		return $this->iconv( $this->fallback8bitEncoding(), "utf-8", $s );
+	}
+
+	function fallback8bitEncoding() {
+		$this->load();
+		return $this->fallback8bitEncoding;
+	}
+	
+	/**
+	 * Some languages have special punctuation to strip out
+	 * or characters which need to be converted for MySQL's
+	 * indexing to grok it correctly. Make such changes here.
+	 *
+	 * @param string $in
+	 * @return string
+	 */
+	function stripForSearch( $string ) {
+		global $wgDBtype;
+		if ( $wgDBtype != 'mysql' ) {
+			return $string;
+		}
+
+		# MySQL fulltext index doesn't grok utf-8, so we
+		# need to fold cases and convert to hex
+
+		wfProfileIn( __METHOD__ );
+		if( function_exists( 'mb_strtolower' ) ) {
+			$out = preg_replace(
+				"/([\\xc0-\\xff][\\x80-\\xbf]*)/e",
+				"'U8' . bin2hex( \"$1\" )",
+				mb_strtolower( $string ) );
+		} else {
+			list( , $wikiLowerChars ) = self::getCaseMaps();
+			$out = preg_replace(
+				"/([\\xc0-\\xff][\\x80-\\xbf]*)/e",
+				"'U8' . bin2hex( strtr( \"\$1\", \$wikiLowerChars ) )",
+				$string );
+		}
+		wfProfileOut( __METHOD__ );
+		return $out;
+	}
+
+	function convertForSearchResult( $termsArray ) {
+		# some languages, e.g. Chinese, need to do a conversion
+		# in order for search results to be displayed correctly
+		return $termsArray;
+	}
+
+	/**
+	 * Get the first character of a string. 
+	 *
+	 * @param string $s
+	 * @return string
+	 */
+	function firstChar( $s ) {
+		$matches = array();
+		preg_match( '/^([\x00-\x7f]|[\xc0-\xdf][\x80-\xbf]|' .
+		'[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xf7][\x80-\xbf]{3})/', $s, $matches);
+
+		return isset( $matches[1] ) ? $matches[1] : "";
+	}
+
+	function initEncoding() {
+		# Some languages may have an alternate char encoding option
+		# (Esperanto X-coding, Japanese furigana conversion, etc)
+		# If this language is used as the primary content language,
+		# an override to the defaults can be set here on startup.
+	}
+
+	function recodeForEdit( $s ) {
+		# For some languages we'll want to explicitly specify
+		# which characters make it into the edit box raw
+		# or are converted in some way or another.
+		# Note that if wgOutputEncoding is different from
+		# wgInputEncoding, this text will be further converted
+		# to wgOutputEncoding.
+		global $wgEditEncoding;
+		if( $wgEditEncoding == '' or
+		  $wgEditEncoding == 'UTF-8' ) {
+			return $s;
+		} else {
+			return $this->iconv( 'UTF-8', $wgEditEncoding, $s );
+		}
+	}
+
+	function recodeInput( $s ) {
+		# Take the previous into account.
+		global $wgEditEncoding;
+		if($wgEditEncoding != "") {
+			$enc = $wgEditEncoding;
+		} else {
+			$enc = 'UTF-8';
+		}
+		if( $enc == 'UTF-8' ) {
+			return $s;
+		} else {
+			return $this->iconv( $enc, 'UTF-8', $s );
+		}
+	}
+
+	/**
+	 * For right-to-left language support
+	 *
+	 * @return bool
+	 */
+	function isRTL() { 
+		$this->load();
+		return $this->rtl;
+	}
+
+	/**
+	 * A hidden direction mark (LRM or RLM), depending on the language direction
+	 *
+	 * @return string
+	 */
+	function getDirMark() {
+		return $this->isRTL() ? "\xE2\x80\x8F" : "\xE2\x80\x8E";
+	}
+
+	/**
+	 * An arrow, depending on the language direction
+	 *
+	 * @return string
+	 */
+	function getArrow() {
+		return $this->isRTL() ? '←' : '→';
+	}
+
+	/**
+	 * To allow "foo[[bar]]" to extend the link over the whole word "foobar"
+	 *
+	 * @return bool
+	 */
+	function linkPrefixExtension() {
+		$this->load();
+		return $this->linkPrefixExtension;
+	}
+
+	function &getMagicWords() {
+		$this->load();
+		return $this->magicWords;
+	}
+
+	# Fill a MagicWord object with data from here
+	function getMagic( &$mw ) {
+		if ( !isset( $this->mMagicExtensions ) ) {
+			$this->mMagicExtensions = array();
+			wfRunHooks( 'LanguageGetMagic', array( &$this->mMagicExtensions, $this->getCode() ) );
+		}
+		if ( isset( $this->mMagicExtensions[$mw->mId] ) ) {
+			$rawEntry = $this->mMagicExtensions[$mw->mId];
+		} else {
+			$magicWords =& $this->getMagicWords();
+			if ( isset( $magicWords[$mw->mId] ) ) {
+				$rawEntry = $magicWords[$mw->mId];
+			} else {
+				# Fall back to English if local list is incomplete
+				$magicWords =& Language::getMagicWords();
+				$rawEntry = $magicWords[$mw->mId];
+			}
+		}
+
+		if( !is_array( $rawEntry ) ) {
+			error_log( "\"$rawEntry\" is not a valid magic thingie for \"$mw->mId\"" );
+		}
+		$mw->mCaseSensitive = $rawEntry[0];
+		$mw->mSynonyms = array_slice( $rawEntry, 1 );
+	}
+
+	/**
+	 * Get special page names, as an associative array
+	 *   case folded alias => real name
+	 */
+	function getSpecialPageAliases() {
+		$this->load();
+		if ( !isset( $this->mExtendedSpecialPageAliases ) ) {
+			$this->mExtendedSpecialPageAliases = $this->specialPageAliases;
+			wfRunHooks( 'LangugeGetSpecialPageAliases', 
+				array( &$this->mExtendedSpecialPageAliases, $this->getCode() ) );
+		}
+		return $this->mExtendedSpecialPageAliases;
+	}
+
+	/**
+	 * Italic is unsuitable for some languages
+	 *
+	 * @public
+	 *
+	 * @param string $text The text to be emphasized.
+	 * @return string
+	 */
+	function emphasize( $text ) {
+		return "<em>$text</em>";
+	}
+
+	 /**
+	 * Normally we output all numbers in plain en_US style, that is
+	 * 293,291.235 for twohundredninetythreethousand-twohundredninetyone
+	 * point twohundredthirtyfive. However this is not sutable for all
+	 * languages, some such as Pakaran want ੨੯੩,੨੯੫.੨੩੫ and others such as
+	 * Icelandic just want to use commas instead of dots, and dots instead
+	 * of commas like "293.291,235".
+	 *
+	 * An example of this function being called:
+	 * <code>
+	 * wfMsg( 'message', $wgLang->formatNum( $num ) )
+	 * </code>
+	 *
+	 * See LanguageGu.php for the Gujarati implementation and
+	 * LanguageIs.php for the , => . and . => , implementation.
+	 *
+	 * @todo check if it's viable to use localeconv() for the decimal
+	 *       seperator thing.
+	 * @public
+	 * @param mixed $number the string to be formatted, should be an integer or
+	 *        a floating point number.
+	 * @param bool $nocommafy Set to true for special numbers like dates
+	 * @return string
+	 */
+	function formatNum( $number, $nocommafy = false ) {
+		global $wgTranslateNumerals;
+		if (!$nocommafy) {
+			$number = $this->commafy($number);
+			$s = $this->separatorTransformTable();
+			if (!is_null($s)) { $number = strtr($number, $s); }
+		}
+
+		if ($wgTranslateNumerals) {
+			$s = $this->digitTransformTable();
+			if (!is_null($s)) { $number = strtr($number, $s); }
+		}
+
+		return $number;
+	}
+
+	function parseFormattedNumber( $number ) {
+		$s = $this->digitTransformTable();
+		if (!is_null($s)) { $number = strtr($number, array_flip($s)); }
+
+		$s = $this->separatorTransformTable();
+		if (!is_null($s)) { $number = strtr($number, array_flip($s)); }
+
+		$number = strtr( $number, array (',' => '') );
+		return $number;
+	}
+
+	/**
+	 * Adds commas to a given number
+	 *
+	 * @param mixed $_
+	 * @return string
+	 */
+	function commafy($_) {
+		return strrev((string)preg_replace('/(\d{3})(?=\d)(?!\d*\.)/','$1,',strrev($_)));
+	}
+
+	function digitTransformTable() {
+		$this->load();
+		return $this->digitTransformTable;
+	}
+
+	function separatorTransformTable() {
+		$this->load();
+		return $this->separatorTransformTable;
+	}
+
+
+	/**
+	 * For the credit list in includes/Credits.php (action=credits)
+	 *
+	 * @param array $l
+	 * @return string
+	 */
+	function listToText( $l ) {
+		$s = '';
+		$m = count($l) - 1;
+		for ($i = $m; $i >= 0; $i--) {
+			if ($i == $m) {
+				$s = $l[$i];
+			} else if ($i == $m - 1) {
+				$s = $l[$i] . ' ' . $this->getMessageFromDB( 'and' ) . ' ' . $s;
+			} else {
+				$s = $l[$i] . ', ' . $s;
+			}
+		}
+		return $s;
+	}
+
+	# Crop a string from the beginning or end to a certain number of bytes.
+	# (Bytes are used because our storage has limited byte lengths for some
+	# columns in the database.) Multibyte charsets will need to make sure that
+	# only whole characters are included!
+	#
+	# $length does not include the optional ellipsis.
+	# If $length is negative, snip from the beginning
+	function truncate( $string, $length, $ellipsis = "" ) {
+		if( $length == 0 ) {
+			return $ellipsis;
+		}
+		if ( strlen( $string ) <= abs( $length ) ) {
+			return $string;
+		}
+		if( $length > 0 ) {
+			$string = substr( $string, 0, $length );
+			$char = ord( $string[strlen( $string ) - 1] );
+			$m = array();
+			if ($char >= 0xc0) {
+				# We got the first byte only of a multibyte char; remove it.
+				$string = substr( $string, 0, -1 );
+			} elseif( $char >= 0x80 &&
+			          preg_match( '/^(.*)(?:[\xe0-\xef][\x80-\xbf]|' .
+			                      '[\xf0-\xf7][\x80-\xbf]{1,2})$/', $string, $m ) ) {
+			    # We chopped in the middle of a character; remove it
+				$string = $m[1];
+			}
+			return $string . $ellipsis;
+		} else {
+			$string = substr( $string, $length );
+			$char = ord( $string[0] );
+			if( $char >= 0x80 && $char < 0xc0 ) {
+				# We chopped in the middle of a character; remove the whole thing
+				$string = preg_replace( '/^[\x80-\xbf]+/', '', $string );
+			}
+			return $ellipsis . $string;
+		}
+	}
+
+	/**
+	 * Grammatical transformations, needed for inflected languages
+	 * Invoked by putting {{grammar:case|word}} in a message
+	 *
+	 * @param string $word
+	 * @param string $case
+	 * @return string
+	 */
+	function convertGrammar( $word, $case ) {
+		global $wgGrammarForms;
+		if ( isset($wgGrammarForms['en'][$case][$word]) ) {
+			return $wgGrammarForms['en'][$case][$word];
+		}
+		return $word;
+	}
+
+	/**
+	 * Plural form transformations, needed for some languages.
+	 * For example, where are 3 form of plural in Russian and Polish,
+	 * depending on "count mod 10". See [[w:Plural]]
+	 * For English it is pretty simple.
+	 *
+	 * Invoked by putting {{plural:count|wordform1|wordform2}}
+	 * or {{plural:count|wordform1|wordform2|wordform3}}
+	 *
+	 * Example: {{plural:{{NUMBEROFARTICLES}}|article|articles}}
+	 *
+	 * @param integer $count
+	 * @param string $wordform1
+	 * @param string $wordform2
+	 * @param string $wordform3 (optional)
+	 * @param string $wordform4 (optional)
+	 * @param string $wordform5 (optional)
+	 * @return string
+	 */
+	function convertPlural( $count, $w1, $w2, $w3, $w4, $w5) {
+		return ( $count == '1' || $count == '-1' ) ? $w1 : $w2;
+	}
+
+	/**
+	 * For translaing of expiry times
+	 * @param string The validated block time in English
+	 * @param $forContent, avoid html?
+	 * @return Somehow translated block time
+	 * @see LanguageFi.php for example implementation
+	 */
+	function translateBlockExpiry( $str, $forContent=false ) {
+
+		$scBlockExpiryOptions = $this->getMessageFromDB( 'ipboptions' );
+
+		if ( $scBlockExpiryOptions == '-') {
+			return $str;
+		}
+
+		foreach (explode(',', $scBlockExpiryOptions) as $option) {
+			if ( strpos($option, ":") === false )
+				continue;
+			list($show, $value) = explode(":", $option);
+			if ( strcmp ( $str, $value) == 0 ) {
+				if ( $forContent )
+					return htmlspecialchars($str) . htmlspecialchars( trim( $show ) );
+				else
+					return '<span title="' . htmlspecialchars($str). '">' . htmlspecialchars( trim( $show ) ) . '</span>';
+			}
+		}
+
+		return $str;
+	}
+
+	/**
+	 * languages like Chinese need to be segmented in order for the diff
+	 * to be of any use
+	 *
+	 * @param string $text
+	 * @return string
+	 */
+	function segmentForDiff( $text ) {
+		return $text;
+	}
+
+	/**
+	 * and unsegment to show the result
+	 *
+	 * @param string $text
+	 * @return string
+	 */
+	function unsegmentForDiff( $text ) {
+		return $text;
+	}
+
+	# convert text to different variants of a language.
+	function convert( $text, $isTitle = false) {
+		return $this->mConverter->convert($text, $isTitle);
+	}
+
+	# Convert text from within Parser
+	function parserConvert( $text, &$parser ) {
+		return $this->mConverter->parserConvert( $text, $parser );
+	}
+
+	# Check if this is a language with variants
+	function hasVariants(){
+		return sizeof($this->getVariants())>1;
+	}
+
+	# Put custom tags (e.g. -{ }-) around math to prevent conversion
+	function armourMath($text){ 
+		return $this->mConverter->armourMath($text);
+	}
+
+
+	/**
+	 * Perform output conversion on a string, and encode for safe HTML output.
+	 * @param string $text
+	 * @param bool $isTitle -- wtf?
+	 * @return string
+	 * @todo this should get integrated somewhere sane
+	 */
+	function convertHtml( $text, $isTitle = false ) {
+		return htmlspecialchars( $this->convert( $text, $isTitle ) );
+	}
+
+	function convertCategoryKey( $key ) {
+		return $this->mConverter->convertCategoryKey( $key );
+	}
+
+	/**
+	 * get the list of variants supported by this langauge
+	 * see sample implementation in LanguageZh.php
+	 *
+	 * @return array an array of language codes
+	 */
+	function getVariants() {
+		return $this->mConverter->getVariants();
+	}
+
+
+	function getPreferredVariant( $fromUser = true ) {
+		return $this->mConverter->getPreferredVariant( $fromUser );
+	}
+
+	/**
+	 * if a language supports multiple variants, it is
+	 * possible that non-existing link in one variant
+	 * actually exists in another variant. this function
+	 * tries to find it. See e.g. LanguageZh.php
+	 *
+	 * @param string $link the name of the link
+	 * @param mixed $nt the title object of the link
+	 * @return null the input parameters may be modified upon return
+	 */
+	function findVariantLink( &$link, &$nt ) {
+		$this->mConverter->findVariantLink($link, $nt);
+	}
+
+	/**
+	 * If a language supports multiple variants, converts text
+	 * into an array of all possible variants of the text:
+	 *  'variant' => text in that variant
+	 */
+
+	function convertLinkToAllVariants($text){
+		return $this->mConverter->convertLinkToAllVariants($text);
+	}
+
+
+	/**
+	 * returns language specific options used by User::getPageRenderHash()
+	 * for example, the preferred language variant
+	 *
+	 * @return string
+	 * @public
+	 */
+	function getExtraHashOptions() {
+		return $this->mConverter->getExtraHashOptions();
+	}
+
+	/**
+	 * for languages that support multiple variants, the title of an
+	 * article may be displayed differently in different variants. this
+	 * function returns the apporiate title defined in the body of the article.
+	 *
+	 * @return string
+	 */
+	function getParsedTitle() {
+		return $this->mConverter->getParsedTitle();
+	}
+
+	/**
+	 * Enclose a string with the "no conversion" tag. This is used by
+	 * various functions in the Parser
+	 *
+	 * @param string $text text to be tagged for no conversion
+	 * @return string the tagged text
+	*/
+	function markNoConversion( $text, $noParse=false ) {
+		return $this->mConverter->markNoConversion( $text, $noParse );
+	}
+
+	/**
+	 * A regular expression to match legal word-trailing characters
+	 * which should be merged onto a link of the form [[foo]]bar.
+	 *
+	 * @return string
+	 * @public
+	 */
+	function linkTrail() {
+		$this->load();
+		return $this->linkTrail;
+	}
+
+	function getLangObj() {
+		return $this;
+	}
+
+	/**
+	 * Get the RFC 3066 code for this language object
+	 */
+	function getCode() {
+		return $this->mCode;
+	}
+
+	function setCode( $code ) {
+		$this->mCode = $code;
+	}
+
+	static function getFileName( $prefix = 'Language', $code, $suffix = '.php' ) {
+		return $prefix . str_replace( '-', '_', ucfirst( $code ) ) . $suffix;
+	}
+
+	static function getMessagesFileName( $code ) {
+		global $IP;
+		return self::getFileName( "$IP/languages/messages/Messages", $code, '.php' );
+	}
+
+	static function getClassFileName( $code ) {
+		global $IP;
+		return self::getFileName( "$IP/languages/classes/Language", $code, '.php' );
+	}
+	
+	static function getLocalisationArray( $code, $disableCache = false ) {
+		self::loadLocalisation( $code, $disableCache );
+		return self::$mLocalisationCache[$code];
+	}
+
+	/**
+	 * Load localisation data for a given code into the static cache
+	 *
+	 * @return array Dependencies, map of filenames to mtimes
+	 */
+	static function loadLocalisation( $code, $disableCache = false ) {
+		static $recursionGuard = array();
+		global $wgMemc;
+
+		if ( !$code ) {
+			throw new MWException( "Invalid language code requested" );
+		}
+
+		if ( !$disableCache ) {
+			# Try the per-process cache
+			if ( isset( self::$mLocalisationCache[$code] ) ) {
+				return self::$mLocalisationCache[$code]['deps'];
+			}
+
+			wfProfileIn( __METHOD__ );
+
+			# Try the serialized directory
+			$cache = wfGetPrecompiledData( self::getFileName( "Messages", $code, '.ser' ) );
+			if ( $cache ) {
+				self::$mLocalisationCache[$code] = $cache;
+				wfDebug( "Language::loadLocalisation(): got localisation for $code from precompiled data file\n" );
+				wfProfileOut( __METHOD__ );
+				return self::$mLocalisationCache[$code]['deps'];
+			}
+
+			# Try the global cache
+			$memcKey = wfMemcKey('localisation', $code );
+			$cache = $wgMemc->get( $memcKey );
+			if ( $cache ) {
+				# Check file modification times
+				foreach ( $cache['deps'] as $file => $mtime ) {
+					if ( !file_exists( $file ) || filemtime( $file ) > $mtime ) {
+						break;
+					}
+				}
+				if ( self::isLocalisationOutOfDate( $cache ) ) {
+					$wgMemc->delete( $memcKey );
+					$cache = false;
+					wfDebug( "Language::loadLocalisation(): localisation cache for $code had expired due to update of $file\n" );
+				} else {
+					self::$mLocalisationCache[$code] = $cache;
+					wfDebug( "Language::loadLocalisation(): got localisation for $code from cache\n" );
+					wfProfileOut( __METHOD__ );
+					return $cache['deps'];
+				}
+			}
+		} else {
+			wfProfileIn( __METHOD__ );
+		}
+
+		# Default fallback, may be overridden when the messages file is included
+		if ( $code != 'en' ) {
+			$fallback = 'en';
+		} else {
+			$fallback = false;
+		}
+
+		# Load the primary localisation from the source file
+		$filename = self::getMessagesFileName( $code );
+		if ( !file_exists( $filename ) ) {
+			wfDebug( "Language::loadLocalisation(): no localisation file for $code, using implicit fallback to en\n" );
+			$cache = array();
+			$deps = array();
+		} else {
+			$deps = array( $filename => filemtime( $filename ) );
+			require( $filename );
+			$cache = compact( self::$mLocalisationKeys );	
+			wfDebug( "Language::loadLocalisation(): got localisation for $code from source\n" );
+		}
+
+		if ( !empty( $fallback ) ) {
+			# Load the fallback localisation, with a circular reference guard
+			if ( isset( $recursionGuard[$code] ) ) {
+				throw new MWException( "Error: Circular fallback reference in language code $code" );
+			}
+			$recursionGuard[$code] = true;
+			$newDeps = self::loadLocalisation( $fallback, $disableCache );
+			unset( $recursionGuard[$code] );
+
+			$secondary = self::$mLocalisationCache[$fallback];
+			$deps = array_merge( $deps, $newDeps );
+
+			# Merge the fallback localisation with the current localisation
+			foreach ( self::$mLocalisationKeys as $key ) {
+				if ( isset( $cache[$key] ) ) {
+					if ( isset( $secondary[$key] ) ) {
+						if ( in_array( $key, self::$mMergeableMapKeys ) ) {
+							$cache[$key] = $cache[$key] + $secondary[$key];
+						} elseif ( in_array( $key, self::$mMergeableListKeys ) ) {
+							$cache[$key] = array_merge( $secondary[$key], $cache[$key] );
+						} elseif ( in_array( $key, self::$mMergeableAliasListKeys ) ) {
+							$cache[$key] = array_merge_recursive( $cache[$key], $secondary[$key] );
+						}
+					}
+				} else {
+					$cache[$key] = $secondary[$key];
+				}
+			}
+
+			# Merge bookstore lists if requested
+			if ( !empty( $cache['bookstoreList']['inherit'] ) ) {
+				$cache['bookstoreList'] = array_merge( $cache['bookstoreList'], $secondary['bookstoreList'] );
+			}
+			if ( isset( $cache['bookstoreList']['inherit'] ) ) {
+				unset( $cache['bookstoreList']['inherit'] );
+			}
+		}
+		
+		# Add dependencies to the cache entry
+		$cache['deps'] = $deps;
+
+		# Replace spaces with underscores in namespace names
+		$cache['namespaceNames'] = str_replace( ' ', '_', $cache['namespaceNames'] );
+		
+		# Save to both caches
+		self::$mLocalisationCache[$code] = $cache;
+		if ( !$disableCache ) {
+			$wgMemc->set( $memcKey, $cache );
+		}
+
+		wfProfileOut( __METHOD__ );
+		return $deps;
+	}
+
+	/**
+	 * Test if a given localisation cache is out of date with respect to the 
+	 * source Messages files. This is done automatically for the global cache
+	 * in $wgMemc, but is only done on certain occasions for the serialized 
+	 * data file.
+	 *
+	 * @param $cache mixed Either a language code or a cache array
+	 */
+	static function isLocalisationOutOfDate( $cache ) {
+		if ( !is_array( $cache ) ) {
+			self::loadLocalisation( $cache );
+			$cache = self::$mLocalisationCache[$cache];
+		}
+		$expired = false;
+		foreach ( $cache['deps'] as $file => $mtime ) {
+			if ( !file_exists( $file ) || filemtime( $file ) > $mtime ) {
+				$expired = true;
+				break;
+			}
+		}
+		return $expired;
+	}
+	
+	/**
+	 * Get the fallback for a given language
+	 */
+	static function getFallbackFor( $code ) {
+		self::loadLocalisation( $code );
+		return self::$mLocalisationCache[$code]['fallback'];
+	}
+
+	/** 
+	 * Get all messages for a given language
+	 */
+	static function getMessagesFor( $code ) {
+		self::loadLocalisation( $code );
+		return self::$mLocalisationCache[$code]['messages'];
+	}
+
+	/** 
+	 * Get a message for a given language
+	 */
+	static function getMessageFor( $key, $code ) {
+		self::loadLocalisation( $code );
+		return isset( self::$mLocalisationCache[$code]['messages'][$key] ) ? self::$mLocalisationCache[$code]['messages'][$key] : null;
+	}
+
+	/**
+	 * Load localisation data for this object
+	 */
+	function load() {
+		if ( !$this->mLoaded ) {
+			self::loadLocalisation( $this->getCode() );
+			$cache =& self::$mLocalisationCache[$this->getCode()];
+			foreach ( self::$mLocalisationKeys as $key ) {
+				$this->$key = $cache[$key];
+			}
+			$this->mLoaded = true;
+
+			$this->fixUpSettings();
+		}
+	}
+
+	/**
+	 * Do any necessary post-cache-load settings adjustment
+	 */
+	function fixUpSettings() {
+		global $wgExtraNamespaces, $wgMetaNamespace, $wgMetaNamespaceTalk,
+			$wgNamespaceAliases, $wgAmericanDates;
+		wfProfileIn( __METHOD__ );
+		if ( $wgExtraNamespaces ) {
+			$this->namespaceNames = $wgExtraNamespaces + $this->namespaceNames;
+		}
+
+		$this->namespaceNames[NS_PROJECT] = $wgMetaNamespace;
+		if ( $wgMetaNamespaceTalk ) {
+			$this->namespaceNames[NS_PROJECT_TALK] = $wgMetaNamespaceTalk;
+		} else {
+			$talk = $this->namespaceNames[NS_PROJECT_TALK];
+			$talk = str_replace( '$1', $wgMetaNamespace, $talk );
+
+			# Allow grammar transformations
+			# Allowing full message-style parsing would make simple requests 
+			# such as action=raw much more expensive than they need to be. 
+			# This will hopefully cover most cases.
+			$talk = preg_replace_callback( '/{{grammar:(.*?)\|(.*?)}}/i', 
+				array( &$this, 'replaceGrammarInNamespace' ), $talk );
+			$talk = str_replace( ' ', '_', $talk );
+			$this->namespaceNames[NS_PROJECT_TALK] = $talk;
+		}
+		
+		# The above mixing may leave namespaces out of canonical order.
+		# Re-order by namespace ID number...
+		ksort( $this->namespaceNames );
+
+		# Put namespace names and aliases into a hashtable.
+		# If this is too slow, then we should arrange it so that it is done 
+		# before caching. The catch is that at pre-cache time, the above
+		# class-specific fixup hasn't been done.
+		$this->mNamespaceIds = array();
+		foreach ( $this->namespaceNames as $index => $name ) {
+			$this->mNamespaceIds[$this->lc($name)] = $index;
+		}
+		if ( $this->namespaceAliases ) {
+			foreach ( $this->namespaceAliases as $name => $index ) {
+				$this->mNamespaceIds[$this->lc($name)] = $index;
+			}
+		}
+		if ( $wgNamespaceAliases ) {
+			foreach ( $wgNamespaceAliases as $name => $index ) {
+				$this->mNamespaceIds[$this->lc($name)] = $index;
+			}
+		}
+
+		if ( $this->defaultDateFormat == 'dmy or mdy' ) {
+			$this->defaultDateFormat = $wgAmericanDates ? 'mdy' : 'dmy';
+		}
+		wfProfileOut( __METHOD__ );
+	}
+
+	function replaceGrammarInNamespace( $m ) {
+		return $this->convertGrammar( trim( $m[2] ), trim( $m[1] ) );
+	}
+
+	static function getCaseMaps() {
+		static $wikiUpperChars, $wikiLowerChars;
+		if ( isset( $wikiUpperChars ) ) {
+			return array( $wikiUpperChars, $wikiLowerChars );
+		}
+
+		wfProfileIn( __METHOD__ );
+		$arr = wfGetPrecompiledData( 'Utf8Case.ser' );
+		if ( $arr === false ) {
+			throw new MWException( 
+				"Utf8Case.ser is missing, please run \"make\" in the serialized directory\n" );
+		}
+		extract( $arr );
+		wfProfileOut( __METHOD__ );
+		return array( $wikiUpperChars, $wikiLowerChars );
+	}
+}
+
+?>
Index: /MediaWiki/branches/1.11/languages/LanguageConverter.php
===================================================================
--- /MediaWiki/branches/1.11/languages/LanguageConverter.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/LanguageConverter.php	(revision 1280)
@@ -0,0 +1,812 @@
+<?php
+/**
+  * @addtogroup Language
+  *
+  * @author Zhengzhu Feng <zhengzhu@gmail.com>
+  * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License
+  */
+
+class LanguageConverter {
+	var $mPreferredVariant='';
+	var $mMainLanguageCode;
+	var $mVariants, $mVariantFallbacks;
+	var $mTablesLoaded = false;
+	var $mTables;
+	var $mTitleDisplay='';
+	var $mDoTitleConvert=true, $mDoContentConvert=true;
+	var $mTitleFromFlag = false;
+	var $mCacheKey;
+	var $mLangObj;
+	var $mMarkup;
+	var $mFlags;
+	var $mUcfirst = false;
+	/**
+     * Constructor
+	 *
+     * @param string $maincode the main language code of this language
+     * @param array $variants the supported variants of this language
+     * @param array $variantfallback the fallback language of each variant
+     * @param array $markup array defining the markup used for manual conversion
+	 * @param array $flags array defining the custom strings that maps to the flags
+     * @access public
+     */
+	function __construct($langobj, $maincode,
+								$variants=array(),
+								$variantfallbacks=array(),
+								$markup=array(),
+								$flags = array()) {
+		$this->mLangObj = $langobj;
+		$this->mMainLanguageCode = $maincode;
+		$this->mVariants = $variants;
+		$this->mVariantFallbacks = $variantfallbacks;
+		$this->mCacheKey = wfMemcKey( 'conversiontables', $maincode );
+		$m = array('begin'=>'-{', 'flagsep'=>'|', 'codesep'=>':',
+				   'varsep'=>';', 'end'=>'}-');
+		$this->mMarkup = array_merge($m, $markup);
+		$f = array('A'=>'A', 'T'=>'T', 'R' => 'R');
+		$this->mFlags = array_merge($f, $flags);
+	}
+
+	/**
+     * @access public
+     */
+	function getVariants() {
+		return $this->mVariants;
+	}
+
+	/**
+	 * in case some variant is not defined in the markup, we need
+	 * to have some fallback. for example, in zh, normally people
+	 * will define zh-cn and zh-tw, but less so for zh-sg or zh-hk.
+	 * when zh-sg is preferred but not defined, we will pick zh-cn
+	 * in this case. right now this is only used by zh.
+	 *
+	 * @param string $v the language code of the variant
+	 * @return string the code of the fallback language or false if there is no fallback
+     * @private
+	*/
+	function getVariantFallback($v) {
+		return $this->mVariantFallbacks[$v];
+	}
+
+
+	/**
+	 * get preferred language variants.
+	 * @param boolean $fromUser Get it from $wgUser's preferences
+     * @return string the preferred language code
+     * @access public
+	*/
+	function getPreferredVariant( $fromUser = true ) {
+		global $wgUser, $wgRequest, $wgVariantArticlePath, $wgDefaultLanguageVariant;
+
+		if($this->mPreferredVariant)
+			return $this->mPreferredVariant;
+
+		// see if the preference is set in the request
+		$req = $wgRequest->getText( 'variant' );
+		if( in_array( $req, $this->mVariants ) ) {
+			$this->mPreferredVariant = $req;
+			return $req;
+		}
+
+		// check the syntax /code/ArticleTitle
+		if($wgVariantArticlePath!=false && isset($_SERVER['SCRIPT_NAME'])){
+			// Note: SCRIPT_NAME probably won't hold the correct value if PHP is run as CGI
+			// (it will hold path to php.cgi binary), and might not exist on some very old PHP installations
+			$scriptBase = basename( $_SERVER['SCRIPT_NAME'] );
+			if(in_array($scriptBase,$this->mVariants)){
+				$this->mPreferredVariant = $scriptBase;
+				return $this->mPreferredVariant;
+			}
+		}
+
+		// get language variant preference from logged in users
+		// Don't call this on stub objects because that causes infinite 
+		// recursion during initialisation
+		if( $fromUser && $wgUser->isLoggedIn() )  {
+			$this->mPreferredVariant = $wgUser->getOption('variant');
+			return $this->mPreferredVariant;
+		}
+
+		// see if default variant is globaly set
+		if($wgDefaultLanguageVariant != false  &&  in_array( $wgDefaultLanguageVariant, $this->mVariants )){
+			$this->mPreferredVariant = $wgDefaultLanguageVariant;
+			return $this->mPreferredVariant;
+		}
+
+		# FIXME rewrite code for parsing http header. The current code
+		# is written specific for detecting zh- variants
+		if( !$this->mPreferredVariant ) {
+			// see if some supported language variant is set in the
+			// http header, but we don't set the mPreferredVariant
+			// variable in case this is called before the user's
+			// preference is loaded
+			$pv=$this->mMainLanguageCode;
+			if(array_key_exists('HTTP_ACCEPT_LANGUAGE', $_SERVER)) {
+				$header = str_replace( '_', '-', strtolower($_SERVER["HTTP_ACCEPT_LANGUAGE"]));
+				$zh = strstr($header, $pv.'-');
+				if($zh) {
+					$pv = substr($zh,0,5);
+				}
+			}
+			// don't try to return bad variant
+			if(in_array( $pv, $this->mVariants ))
+				return $pv;
+		}
+
+		return $this->mMainLanguageCode;
+
+	}
+
+	/**
+     * dictionary-based conversion
+     *
+     * @param string $text the text to be converted
+     * @param string $toVariant the target language code
+     * @return string the converted text
+     * @private
+     */
+	function autoConvert($text, $toVariant=false) {
+		$fname="LanguageConverter::autoConvert";
+
+		wfProfileIn( $fname );
+
+		if(!$this->mTablesLoaded)
+			$this->loadTables();
+
+		if(!$toVariant)
+			$toVariant = $this->getPreferredVariant();
+		if(!in_array($toVariant, $this->mVariants))
+			return $text;
+
+		/* we convert everything except:
+		   1. html markups (anything between < and >)
+		   2. html entities
+		   3. place holders created by the parser
+		*/
+		global $wgParser;
+		if (isset($wgParser))
+			$marker = '|' . $wgParser->UniqPrefix() . '[\-a-zA-Z0-9]+';
+		else
+			$marker = "";
+
+		// this one is needed when the text is inside an html markup
+		$htmlfix = '|<[^>]+$|^[^<>]*>';
+
+		// disable convert to variants between <code></code> tags
+		$codefix = '<code>.+?<\/code>|';
+		// disable convertsion of <script type="text/javascript"> ... </script>
+		$scriptfix = '<script.*?>.*?<\/script>|';
+
+		$reg = '/'.$codefix . $scriptfix . '<[^>]+>|&[a-zA-Z#][a-z0-9]+;' . $marker . $htmlfix . '/s';
+	
+		$matches = preg_split($reg, $text, -1, PREG_SPLIT_OFFSET_CAPTURE);
+
+		$m = array_shift($matches);
+
+		$ret = $this->translate($m[0], $toVariant);
+		$mstart = $m[1]+strlen($m[0]);
+		foreach($matches as $m) {
+			$ret .= substr($text, $mstart, $m[1]-$mstart);
+			$ret .= $this->translate($m[0], $toVariant);
+			$mstart = $m[1] + strlen($m[0]);
+		}
+		wfProfileOut( $fname );
+		return $ret;
+	}
+
+	/**
+	 * Translate a string to a variant
+	 * Doesn't process markup or do any of that other stuff, for that use convert()
+	 *
+	 * @param string $text Text to convert
+	 * @param string $variant Variant language code
+	 * @return string Translated text
+	 */
+	function translate( $text, $variant ) {
+		wfProfileIn( __METHOD__ );
+		if( !$this->mTablesLoaded )
+			$this->loadTables();
+		$text = $this->mTables[$variant]->replace( $text );
+		wfProfileOut( __METHOD__ );
+		return $text;
+	}
+
+	/**
+     * convert text to all supported variants
+     *
+     * @param string $text the text to be converted
+     * @return array of string
+     * @public
+     */
+	function autoConvertToAllVariants($text) {
+		$fname="LanguageConverter::autoConvertToAllVariants";
+		wfProfileIn( $fname );
+		if( !$this->mTablesLoaded )
+			$this->loadTables();
+
+		$ret = array();
+		foreach($this->mVariants as $variant) {
+			$ret[$variant] = $this->translate($text, $variant);
+		}
+
+		wfProfileOut( $fname );
+		return $ret;
+	}
+
+	/**
+     * convert link text to all supported variants
+     *
+     * @param string $text the text to be converted
+     * @return array of string
+     * @public
+     */
+	function convertLinkToAllVariants($text) {
+		if( !$this->mTablesLoaded )
+			$this->loadTables();
+
+		$ret = array();
+		$tarray = explode($this->mMarkup['begin'], $text);
+		$tfirst = array_shift($tarray);
+
+		foreach($this->mVariants as $variant)
+			$ret[$variant] = $this->translate($tfirst,$variant);
+
+		foreach($tarray as $txt) {
+			$marked = explode($this->mMarkup['end'], $txt, 2);
+
+			foreach($this->mVariants as $variant){
+				$ret[$variant] .= $this->mMarkup['begin'].$marked[0].$this->mMarkup['end'];
+				if(array_key_exists(1, $marked))
+					$ret[$variant] .= $this->translate($marked[1],$variant);
+			}
+			
+		}
+
+		return $ret;
+	}
+
+
+	/**
+	 * Convert text using a parser object for context
+	 */
+	function parserConvert( $text, &$parser ) {
+		global $wgDisableLangConversion;
+		/* don't do anything if this is the conversion table */
+		if ( $parser->getTitle()->getNamespace() == NS_MEDIAWIKI &&
+				 strpos($parser->mTitle->getText(), "Conversiontable") !== false ) 
+		{
+			return $text;
+		}
+
+		if($wgDisableLangConversion)
+			return $text;
+
+		$text = $this->convert( $text );
+		$parser->mOutput->setTitleText( $this->mTitleDisplay );
+		return $text;
+	}
+
+	/**
+	 *  Parse flags with syntax -{FLAG| ... }-
+	 *
+	 */
+	function parseFlags($marked){
+			$flags = array();
+
+			// process flag only if the flag is valid
+			if(strlen($marked) < 2 || !(in_array($marked[0],$this->mFlags) && $marked[1]=='|' ) )
+				return array($marked,array());
+
+			$tt = explode($this->mMarkup['flagsep'], $marked, 2);
+
+			if(sizeof($tt) == 2) {
+				$f = explode($this->mMarkup['varsep'], $tt[0]);
+				foreach($f as $ff) {
+					$ff = trim($ff);
+					if(array_key_exists($ff, $this->mFlags) &&
+						!array_key_exists($this->mFlags[$ff], $flags))
+						$flags[] = $this->mFlags[$ff];
+				}
+				$rules = $tt[1];
+			}
+			else
+				$rules = $marked;
+
+			if( !in_array('R',$flags) ){
+				//FIXME: may cause trouble here...
+				//strip &nbsp; since it interferes with the parsing, plus,
+				//all spaces should be stripped in this tag anyway.
+				$rules = str_replace('&nbsp;', '', $rules);
+			}
+
+			return array($rules,$flags);
+	}
+
+	/**
+	 * convert text to different variants of a language. the automatic
+	 * conversion is done in autoConvert(). here we parse the text
+	 * marked with -{}-, which specifies special conversions of the
+	 * text that can not be accomplished in autoConvert()
+	 *
+	 * syntax of the markup:
+	 * -{code1:text1;code2:text2;...}-  or
+	 * -{text}- in which case no conversion should take place for text
+     *
+     * @param string $text text to be converted
+     * @param bool $isTitle whether this conversion is for the article title
+     * @return string converted text
+     * @access public
+     */
+	function convert( $text , $isTitle=false) {
+		$mw =& MagicWord::get( 'notitleconvert'   );
+		if( $mw->matchAndRemove( $text ) )
+			$this->mDoTitleConvert = false;
+
+		$mw =& MagicWord::get( 'nocontentconvert'   );
+		if( $mw->matchAndRemove( $text ) ) {
+			$this->mDoContentConvert = false;
+		}
+
+		// no conversion if redirecting
+		$mw =& MagicWord::get( 'redirect'   );
+		if( $mw->matchStart( $text ))
+			return $text;
+
+		if( $isTitle ) {
+
+			// use the title from the T flag if any
+			if($this->mTitleFromFlag){
+				$this->mTitleFromFlag = false;
+				return $this->mTitleDisplay;
+			}
+
+			// check for __NOTC__ tag
+			if( !$this->mDoTitleConvert ) {
+				$this->mTitleDisplay = $text;
+				return $text;
+			}
+
+			global $wgRequest;
+			$isredir = $wgRequest->getText( 'redirect', 'yes' );
+			$action = $wgRequest->getText( 'action' );
+			if ( $isredir == 'no' || $action == 'edit' ) {
+				return $text;
+			}
+			else {
+				$this->mTitleDisplay = $this->convert($text);
+				return $this->mTitleDisplay;
+			}
+		}
+
+		$plang = $this->getPreferredVariant();
+		if( isset( $this->mVariantFallbacks[$plang] ) ) {
+			$fallback = $this->mVariantFallbacks[$plang];
+		} else {
+			$fallback = $this->mMainLanguageCode;
+		}
+
+		$tarray = explode($this->mMarkup['begin'], $text);
+		$tfirst = array_shift($tarray);
+		if($this->mDoContentConvert) 
+			$text = $this->autoConvert($tfirst);
+		else
+			$text = $tfirst;
+		foreach($tarray as $txt) {	
+			$marked = explode($this->mMarkup['end'], $txt, 2);
+
+			// strip the flags from syntax like -{T| ... }-
+			list($rules,$flags) = $this->parseFlags($marked[0]);
+
+			// proces R flag: output raw content of -{ ... }-
+			if( in_array('R',$flags) ){
+				$disp = $rules;
+			} else if( $this->mDoContentConvert){
+				// parse the contents -{ ... }- 
+				$carray = $this->parseManualRule($rules, $flags);
+
+				$disp = '';
+				if(array_key_exists($plang, $carray)) {
+					$disp = $carray[$plang];
+				} else if(array_key_exists($fallback, $carray)) {
+					$disp = $carray[$fallback];
+				}
+			} else{
+				// if we don't do content convert, still strip the -{}- tags
+				$disp = $rules;
+				$flags = array();
+			}
+
+			if($disp) {
+				// use syntax -{T|zh:TitleZh;zh-tw:TitleTw}- for custom conversion in title
+				if(in_array('T',  $flags)){
+					$this->mTitleFromFlag = true;
+					$this->mTitleDisplay = $disp;
+				}
+				else
+					$text .= $disp;
+
+				// use syntax -{A|zh:WordZh;zh-tw:WordTw}- to introduce a custom mapping between
+				// words WordZh and WordTw in the whole text 
+				if(in_array('A', $flags)) {
+
+					/* fill in the missing variants, if any,
+					    with fallbacks */
+					foreach($this->mVariants as $v) {
+						if(!array_key_exists($v, $carray)) {
+							$vf = $this->getVariantFallback($v);
+							if(array_key_exists($vf, $carray))
+								$carray[$v] = $carray[$vf];
+						}
+					}
+
+					foreach($this->mVariants as $vfrom) {
+						if(!array_key_exists($vfrom, $carray))
+							continue;
+						foreach($this->mVariants as $vto) {
+							if($vfrom == $vto)
+								continue;
+							if(!array_key_exists($vto, $carray))
+								continue;
+							$this->mTables[$vto]->setPair($carray[$vfrom], $carray[$vto]);
+						}
+					}
+				}
+			}
+			else {
+				$text .= $marked[0];
+			}
+			if(array_key_exists(1, $marked)){
+				if( $this->mDoContentConvert )
+					$text .= $this->autoConvert($marked[1]);
+				else
+					$text .= $marked[1];
+			}
+		}
+
+		return $text;
+	}
+
+	/**
+	 * parse the manually marked conversion rule
+	 * @param string $rule the text of the rule
+	 * @return array of the translation in each variant
+	 * @private
+	 */
+	function parseManualRule($rules, $flags=array()) {
+
+		$choice = explode($this->mMarkup['varsep'], $rules);
+		$carray = array();
+		if(sizeof($choice) == 1) {
+			/* a single choice */
+			foreach($this->mVariants as $v)
+				$carray[$v] = $choice[0];
+		}
+		else {
+			foreach($choice as $c) {
+				$v = explode($this->mMarkup['codesep'], $c);
+				if(sizeof($v) != 2) // syntax error, skip
+					continue;
+				$carray[trim($v[0])] = trim($v[1]);
+			}
+		}
+		return $carray;
+	}
+
+	/**
+	 * if a language supports multiple variants, it is
+	 * possible that non-existing link in one variant
+	 * actually exists in another variant. this function
+	 * tries to find it. See e.g. LanguageZh.php
+	 *
+	 * @param string $link the name of the link
+	 * @param mixed $nt the title object of the link
+	 * @return null the input parameters may be modified upon return
+     * @access public
+	 */
+	function findVariantLink( &$link, &$nt ) {
+		global $wgDisableLangConversion;
+		$linkBatch = new LinkBatch();
+
+		$ns=NS_MAIN;
+
+		if(is_object($nt))
+			$ns = $nt->getNamespace();
+
+		$variants = $this->autoConvertToAllVariants($link);
+		if($variants == false) //give up
+			return;
+
+		$titles = array();
+
+		foreach( $variants as $v ) {
+			if($v != $link){
+				$varnt = Title::newFromText( $v, $ns );
+				if(!is_null($varnt)){
+					$linkBatch->addObj($varnt);
+					$titles[]=$varnt;
+				}
+			}
+		}
+
+		// fetch all variants in single query
+		$linkBatch->execute();
+
+		foreach( $titles as $varnt ) {
+			if( $varnt->getArticleID() > 0 ) {
+				$nt = $varnt;
+				if( !$wgDisableLangConversion )
+					$link = $v;
+				break;
+			}
+		}
+	}
+
+    /**
+     * returns language specific hash options
+     *
+     * @access public
+     */
+	function getExtraHashOptions() {
+		$variant = $this->getPreferredVariant();
+		return '!' . $variant ;
+	}
+
+    /**
+     * get title text as defined in the body of the article text
+     *
+     * @access public
+     */
+	function getParsedTitle() {
+		return $this->mTitleDisplay;
+	}
+
+	/**
+     * a write lock to the cache
+     *
+     * @private
+     */
+	function lockCache() {
+		global $wgMemc;
+		$success = false;
+		for($i=0; $i<30; $i++) {
+			if($success = $wgMemc->add($this->mCacheKey . "lock", 1, 10))
+				break;
+			sleep(1);
+		}
+		return $success;
+	}
+
+	/**
+     * unlock cache
+     *
+     * @private
+     */
+	function unlockCache() {
+		global $wgMemc;
+		$wgMemc->delete($this->mCacheKey . "lock");
+	}
+
+
+	/**
+     * Load default conversion tables
+     * This method must be implemented in derived class
+     *
+     * @private
+     */
+	function loadDefaultTables() {
+		$name = get_class($this);
+		wfDie("Must implement loadDefaultTables() method in class $name");
+	}
+
+	/**
+     * load conversion tables either from the cache or the disk
+     * @private
+     */
+	function loadTables($fromcache=true) {
+		global $wgMemc;
+		if( $this->mTablesLoaded )
+			return;
+		wfProfileIn( __METHOD__ );
+		$this->mTablesLoaded = true;
+		$this->mTables = false;
+		if($fromcache) {
+			wfProfileIn( __METHOD__.'-cache' );
+			$this->mTables = $wgMemc->get( $this->mCacheKey );
+			wfProfileOut( __METHOD__.'-cache' );
+		}
+		if ( !$this->mTables || !isset( $this->mTables['VERSION 2'] ) ) {
+			wfProfileIn( __METHOD__.'-recache' );
+			// not in cache, or we need a fresh reload.
+			// we will first load the default tables
+			// then update them using things in MediaWiki:Zhconversiontable/*
+			$this->loadDefaultTables();
+			foreach($this->mVariants as $var) {
+				$cached = $this->parseCachedTable($var);
+				$this->mTables[$var]->mergeArray($cached);
+			}
+
+			$this->postLoadTables();
+			$this->mTables['VERSION 2'] = true;
+
+			if($this->lockCache()) {
+				$wgMemc->set($this->mCacheKey, $this->mTables, 43200);
+				$this->unlockCache();
+			}
+			wfProfileOut( __METHOD__.'-recache' );
+		}
+		wfProfileOut( __METHOD__ );
+	}
+
+    /**
+     * Hook for post processig after conversion tables are loaded
+     *
+     */
+	function postLoadTables() {}
+
+    /**
+     * Reload the conversion tables
+     *
+     * @private
+     */
+	function reloadTables() {
+		if($this->mTables)
+			unset($this->mTables);
+		$this->mTablesLoaded = false;
+		$this->loadTables(false);
+	}
+
+
+	/**
+     * parse the conversion table stored in the cache
+     *
+     * the tables should be in blocks of the following form:
+
+     *		-{
+     *			word => word ;
+     *			word => word ;
+     *			...
+     *		}-
+     *
+     *	to make the tables more manageable, subpages are allowed
+     *	and will be parsed recursively if $recursive=true
+     *
+     * @private
+	 */
+	function parseCachedTable($code, $subpage='', $recursive=true) {
+		global $wgMessageCache;
+		static $parsed = array();
+
+		if(!is_object($wgMessageCache))
+			return array();
+
+		$key = 'Conversiontable/'.$code;
+		if($subpage)
+			$key .= '/' . $subpage;
+
+		if(array_key_exists($key, $parsed))
+			return array();
+
+
+		$txt = $wgMessageCache->get( $key, true, true, true );
+
+		// get all subpage links of the form
+		// [[MediaWiki:conversiontable/zh-xx/...|...]]
+		$linkhead = $this->mLangObj->getNsText(NS_MEDIAWIKI) . ':Conversiontable';
+		$subs = explode('[[', $txt);
+		$sublinks = array();
+		foreach( $subs as $sub ) {
+			$link = explode(']]', $sub, 2);
+			if(count($link) != 2)
+				continue;
+			$b = explode('|', $link[0]);
+			$b = explode('/', trim($b[0]), 3);
+			if(count($b)==3)
+				$sublink = $b[2];
+			else
+				$sublink = '';
+
+			if($b[0] == $linkhead && $b[1] == $code) {
+				$sublinks[] = $sublink;
+			}
+		}
+
+
+		// parse the mappings in this page
+		$blocks = explode($this->mMarkup['begin'], $txt);
+		array_shift($blocks);
+		$ret = array();
+		foreach($blocks as $block) {
+			$mappings = explode($this->mMarkup['end'], $block, 2);
+			$stripped = str_replace(array("'", '"', '*','#'), '', $mappings[0]);
+			$table = explode( ';', $stripped );
+			foreach( $table as $t ) {
+				$m = explode( '=>', $t );
+				if( count( $m ) != 2)
+					continue;
+				// trim any trailling comments starting with '//'
+				$tt = explode('//', $m[1], 2);
+				$ret[trim($m[0])] = trim($tt[0]);
+			}
+		}
+		$parsed[$key] = true;
+
+
+		// recursively parse the subpages
+		if($recursive) {
+			foreach($sublinks as $link) {
+				$s = $this->parseCachedTable($code, $link, $recursive);
+				$ret = array_merge($ret, $s);
+			}
+		}
+
+		if ($this->mUcfirst) {
+			foreach ($ret as $k => $v) {
+				$ret[Language::ucfirst($k)] = Language::ucfirst($v);
+			}
+		}
+		return $ret;
+	}
+
+	/**
+	 * Enclose a string with the "no conversion" tag. This is used by
+	 * various functions in the Parser
+	 *
+	 * @param string $text text to be tagged for no conversion
+	 * @return string the tagged text
+	*/
+	function markNoConversion($text, $noParse=false) {
+		# don't mark if already marked
+		if(strpos($text, $this->mMarkup['begin']) ||
+ 		   strpos($text, $this->mMarkup['end']))
+			return $text;
+
+		$ret = $this->mMarkup['begin'] . $text . $this->mMarkup['end'];
+		return $ret;
+	}
+
+	/**
+	 * convert the sorting key for category links. this should make different
+	 * keys that are variants of each other map to the same key
+	*/
+	function convertCategoryKey( $key ) {
+		return $key;
+	}
+	/**
+     * hook to refresh the cache of conversion tables when
+     * MediaWiki:conversiontable* is updated
+     * @private
+	*/
+	function OnArticleSaveComplete($article, $user, $text, $summary, $isminor, $iswatch, $section) {
+		$titleobj = $article->getTitle();
+		if($titleobj->getNamespace() == NS_MEDIAWIKI) {
+            /*
+			global $wgContLang; // should be an LanguageZh.
+			if(get_class($wgContLang) != 'languagezh')
+				return true;
+            */
+			$title = $titleobj->getDBkey();
+			$t = explode('/', $title, 3);
+			$c = count($t);
+			if( $c > 1 && $t[0] == 'Conversiontable' ) {
+				if(in_array($t[1], $this->mVariants)) {
+					$this->reloadTables();
+				}
+			}
+		}
+		return true;
+	}
+
+	/** 
+	 * Armour rendered math against conversion
+	 * Wrap math into rawoutput -{R| math }- syntax
+	 */
+ 	function armourMath($text){ 
+		$ret = $this->mMarkup['begin'] . 'R|' . $text . $this->mMarkup['end'];
+		return $ret;
+	}
+
+
+}
+
+?>
Index: /MediaWiki/branches/1.11/languages/Names.php
===================================================================
--- /MediaWiki/branches/1.11/languages/Names.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/Names.php	(revision 1280)
@@ -0,0 +1,295 @@
+<?php
+/**
+  * These determine things like interwikis, language selectors, and so on.
+  * Safe to change without running scripts on the respective sites.
+  *
+  * @addtogroup Language
+  */
+/* private */ $wgLanguageNames = array(
+	'aa' => 'Afar',			# Afar
+	'ab' => 'Аҧсуа',	# Abkhaz, should possibly add ' бысжѡа'
+	'af' => 'Afrikaans',	# Afrikaans
+	'ak' => 'Akana',		# Akan
+	'als' => 'Alemannisch',	# Alemannic -- not a valid code, for compatibility
+	'am' => 'አማርኛ',	# Amharic
+	'an' => 'Aragonés',	# Aragonese
+	'ang' => 'Anglo Saxon',	# Old English
+	'ar' => 'العربية',	# Arabic
+	'arc' => 'ܐܪܡܝܐ',	# Aramaic
+	'as' => 'অসমীয়া',	# Assamese
+	'ast' => 'Asturianu',	# Asturian
+	'av' => 'Авар',	# Avar
+	'ay' => 'Aymar',		# Aymara, should possibly be Aymará
+	'az' => 'Azərbaycan',	# Azerbaijani
+	'ba' => 'Башҡорт',	# Bashkir
+	'bar' => 'Boarisch',	# Bavarian (Austro-Bavarian and South Tyrolean)
+	'bat-smg' => 'Žemaitėška', # Samogitian 
+	'be' => 'Беларуская',	#  Belarusian normative
+	'be-x-old' => 'Беларуская',	# Belarusian alternative
+	'bg' => 'Български',	# Bulgarian
+	'bh' => 'भोजपुरी',	# Bihara
+	'bi' => 'Bislama',		# Bislama
+	'bm' => 'Bamanankan',	# Bambara
+	'bn' => 'বাংলা',	# Bengali
+	'bo' => 'བོད་ཡིག',	# Tibetan
+	'bpy' => 'ইমার ঠার/বিষ্ণুপ্রিয়া মণিপুরী',	# Bishnupriya Manipuri
+	'br' => 'Brezhoneg',	# Breton
+	'bs' => 'Bosanski',		# Bosnian
+	'bug' => 'ᨅᨔ ᨕᨘᨁᨗ',	# Buginese
+	'bxr' => 'Буряад',	# Buryat (Russia)
+	'ca' => 'Català',	# Catalan
+	'cbk-zam' => 'Zamboangueño',	# Zamboanga Chavacano
+	'cdo' => 'Mìng-dĕ̤ng-ngṳ̄',	# Min Dong
+	'ce' => 'Нохчийн',	# Chechen
+	'ceb' => 'Cebuano',     # Cebuano
+	'ch' => 'Chamoru',		# Chamorro
+	'cho' => 'Choctaw',		# Choctaw
+	'chr' => 'ᏣᎳᎩ', # Cherokee
+	'chy' => 'Tsetsêhestâhese',	# Cheyenne
+	'co' => 'Corsu',		# Corsican
+	'cr' => 'Nēhiyawēwin / ᓀᐦᐃᔭᐍᐏᐣ',		# Cree
+	'crh' => 'Qırımtatarca',   # Crimean Tatar
+	'crh-latn' => "\xE2\x80\xAAQırımtatarca (Latin)\xE2\x80\xAC",       # Crimean Tatar (Latin)
+	'crh-cyrl' => "\xE2\x80\xAAQırımtatarca (Kiril)\xE2\x80\xAC",       # Crimean Tatar (Cyrillic)
+	'cs' => 'Česky',	# Czech
+	'csb' => 'Kaszëbsczi',	# Cassubian
+	'cu' => 'Словѣньскъ', 	# Old Church Slavonic (ancient language)
+	'cv' => 'Чăвашла',	# Chuvash
+	'cy' => 'Cymraeg',		# Welsh
+	'da' => 'Dansk',		# Danish
+	'de' => 'Deutsch',		# German
+	'diq' => 'Zazaki',		# Zazaki
+	'dk' => 'Dansk', 		# Unused code currently redirecting to Danish, 'da' is correct for the language
+	'dv' => 'ދިވެހިބަސް',		# Dhivehi
+	'dz' => 'ཇོང་ཁ',		# Bhutani
+	'ee' => 'Eʋegbe',	# Ewe
+	'el' => 'Ελληνικά',	# Greek
+	'eml' => 'Emiliàn e rumagnòl',	# Emilian-Romagnol / Sammarinese
+	'en' => 'English',		# English
+	'eo' => 'Esperanto',	# Esperanto
+	'es' => 'Español',	# Spanish
+	'et' => 'Eesti',		# Estonian
+	'eu' => 'Euskara',		# Basque
+	'fa' => 'فارسی',	# Persian
+	'ff' => 'Fulfulde',		# Fulah
+	'fi' => 'Suomi',		# Finnish
+	'fiu-vro' => 'Võro',    # Võro
+	'fj' => 'Na Vosa Vakaviti',	# Fijian
+	'fo' => 'Føroyskt',	# Faroese
+	'fr' => 'Français',	# French
+	'frp' => 'Arpitan',	# Franco-Provençal/Arpitan
+	'fur' => 'Furlan',		# Friulian
+	'fy' => 'Frysk',		# Frisian
+	'ga' => 'Gaeilge',		# Irish
+	'gd' => 'Gàidhlig',	# Scots Gaelic
+	'gl' => 'Galego',		# Gallegan
+	'glk' => 'گیلکی',	# Gilaki
+	'gn' => 'Avañe\'ẽ',	# Guarani
+	'got' => '𐌲𐌿𐍄𐌹𐍃𐌺',	# Gothic
+	'gsw' => 'Alemannisch',	# Alemannic
+	'gu' => 'ગુજરાતી',	# Gujarati
+	'gv' => 'Gaelg',		# Manx
+	'ha' => 'هَوُسَ',	# Hausa
+	'haw' => 'Hawai`i',		# Hawaiian
+	'he' => 'עברית',	# Hebrew
+	'hi' => 'हिन्दी',	# Hindi
+	'hil' => 'Ilonggo',	# Hiligaynon
+	'ho' => 'Hiri Motu',	# Hiri Motu
+	'hr' => 'Hrvatski',		# Croatian
+	'hsb' => 'Hornjoserbsce',	# Upper Sorbian
+	'ht' => 'Krèyol ayisyen',		# Haitian, common/popular form is Kreyòl
+	'hu' => 'Magyar',		# Hungarian
+	'hy' => 'Հայերեն',	# Armenian
+	'hz' => 'Otsiherero',	# Herero
+	'ia' => 'Interlingua',	# Interlingua (IALA)
+	'id' => 'Bahasa Indonesia',	# Indonesian
+	'ie' => 'Interlingue',	# Interlingue (Occidental)
+	'ig' => 'Igbo',			# Igbo
+	'ii' => 'ꆇꉙ',	# Sichuan Yi
+	'ik' => 'Iñupiak',	# Inupiak
+	'ilo' => 'Ilokano',	# Ilokano
+	'io' => 'Ido',			# Ido
+	'is' => 'Íslenska',	# Icelandic
+	'it' => 'Italiano',		# Italian
+	'iu' => 'ᐃᓄᒃᑎᑐᑦ',	# Inuktitut
+	'ja' => '日本語',	# Japanese
+	'jbo' => 'Lojban',		# Lojban
+	'jv' => 'Basa Jawa',	# Javanese
+	'ka' => 'ქართული',	# Georgian
+	'kaa' => 'Qaraqalpaqsha',	# Karakalpak
+	'kab' => 'Taqbaylit',	# Kabyle
+	'kg' => 'Kongo',		# Kongo, (FIXME!) should probaly be KiKongo or KiKoongo
+	'ki' => 'Gĩkũyũ',	# Kikuyu, correctness not guaranteed
+	'kj' => 'Kuanyama',		# Kuanyama (FIXME!)
+	'kk' => 'Қазақша',	# Kazakh
+	'kk-cn' => "\xE2\x80\xABقازاقشا (تٴوتە)\xE2\x80\xAC",	# Kazakh Arabic
+	'kk-kz' => "\xE2\x80\xAAҚазақша (кирил)\xE2\x80\xAC",	# Kazakh Cyrillic
+	'kk-tr' => "\xE2\x80\xAAQazaqşa (latın)\xE2\x80\xAC",	# Kazakh Latin
+	'kl' => 'Kalaallisut',	# Greenlandic
+	'km' => 'ភាសាខ្មែរ',	# Cambodian
+	'kn' => 'ಕನ್ನಡ',	# Kannada
+	'ko' => '한국어',	# Korean
+	'kr' => 'Kanuri',		# Kanuri (FIXME!)
+	'ks' => 'कश्मीरी - (كشميري)',	# Kashmiri
+	'ksh' => 'Ripoarisch', 	# Ripuarian 
+	'ksh-c-a' => 'Ripoarisch c a', 	# Ripuarian 
+	'ksh-p-b' => 'Ripoarisch p b', 	# Ripuarian 
+	'ku' => 'Kurdî / كوردي',	# Kurdish
+	'kv' => 'Коми', 	# Komi, cyrillic is common script but also written in latin script
+	'kw' => 'Kernewek',		# Cornish
+	'ky' => 'Кыргызча',	# Kirghiz
+	'la' => 'Latina',		# Latin
+	'lad' => 'Ladino',	# Ladino
+	'lbe' => 'Лакку',	# Lak
+	'lb' => 'Lëtzebuergesch',	# Luxemburguish
+	'lg' => 'Luganda',		# Ganda
+	'li' => 'Limburgs',	# Limburgian
+	'lij' => 'Líguru',	# Ligurian
+	'lld' => 'Ladin',	# Ladin
+	'lmo' => 'Lumbaart',	# Lombard
+	'ln' => 'Lingála',		# Lingala
+	'lo' => 'ລາວ',# Laotian
+	'lt' => 'Lietuvių',	# Lithuanian
+	'lv' => 'Latviešu',	# Latvian
+	'lzz' => 'Lazuri Nena',	#Laz
+	'map-bms' => 'Basa Banyumasan', # Banyumasan 
+	'mg' => 'Malagasy',		# Malagasy
+	'mh' => 'Ebon',			# Marshallese
+	'mi' => 'Māori',	# Maori
+	'minnan' => 'Bân-lâm-gú', # Min-nan (also zh-min-nan)
+	'mk' => 'Македонски',	# Macedonian
+	'ml' => 'മലയാളം',	# Malayalam
+	'mn' => 'Монгол',	# Mongoloian
+	'mo' => 'Молдовеняскэ',	# Moldovan
+	'mr' => 'मराठी',	# Marathi
+	'ms' => 'Bahasa Melayu',	# Malay
+	'mt' => 'Malti',	# Maltese
+	'mus' => 'Muscogee',	# Creek, should possibly be Muskogee
+	'my' => 'Myanmasa',		# Burmese
+	'mzn' => 'مَزِروني',		# Mazandarin
+	'na' => 'Ekakairũ Naoero',		# Nauruan
+	'nah' => 'Nahuatl',		# Nahuatl, en:Wikipedia writes Nahuatlahtolli, while another form is Náhuatl
+	'nan' => 'Bân-lâm-gú', # Min-nan -- (bug 8217) nan instead of zh-min-nan, http://www.sil.org/iso639-3/codes.asp?order=639_3&letter=n
+	'nap' => 'Nnapulitano',	# Neapolitan
+	'nb' => "\xE2\x80\xAANorsk (bokmål)\xE2\x80\xAC",		# Norwegian (Bokmal)
+	'nds' => 'Plattdüütsch',	# Low German ''or'' Low Saxon
+	'nds-nl' => 'Nedersaksisch',	# Dutch Low Saxon
+	'ne' => 'नेपाली',	# Nepali
+	'new' => 'नेपाल भाषा',		# Newar / Nepal Bhasa
+	'ng' => 'Oshiwambo',		# Ndonga
+	'nl' => 'Nederlands',	# Dutch
+	'nn' => "\xE2\x80\xAANorsk (nynorsk)\xE2\x80\xAC"	,	# Norwegian (Nynorsk)
+	'no' => "\xE2\x80\xAANorsk (bokmål)\xE2\x80\xAC",		# Norwegian
+	'non' => 'Norrǿna',		# Old Norse
+	'nov' => 'Novial',		# Novial
+	'nrm' => 'Nouormand',	# Norman
+	'nv' => 'Diné bizaad',	# Navajo
+	'ny' => 'Chi-Chewa',	# Chichewa
+	'oc' => 'Occitan',		# Occitan
+	'om' => 'Oromoo', 		# Oromo
+	'or' => 'ଓଡ଼ିଆ',		# Oriya
+	'os' => 'Иронау', # Ossetic
+	'pa' => 'ਪੰਜਾਬੀ', # Punjabi
+	'pag' => 'Pangasinan',	# Pangasinan
+	'pam' => 'Kapampangan',   # Pampanga
+	'pap' => 'Papiamentu',	# Papiamentu
+	'pdc' => 'Deitsch', 	# Pennsylvania German
+	'pi' => 'पािऴ',	# Pali
+	'pih' => 'Norfuk / Pitkern', # Norfuk/Pitcairn/Norfolk
+	'pl' => 'Polski',		# Polish
+	'pms' => 'Piemontèis', 	# Piedmontese
+	'ps' => 'پښتو',	# Pashto
+	'pt' => 'Português',	# Portuguese
+	'pt-br' => 'Português do Brasil',	# Brazilian Portuguese
+	'qu' => 'Runa Simi',	# Quechua
+	'rm' => 'Rumantsch',	# Raeto-Romance
+	'rmy' => 'Romani',	# Vlax Romany
+	'rn' => 'Kirundi',		# Kirundi
+	'ro' => 'Română',	# Romanian
+	'roa-rup' => 'Armâneashti', # Aromanian
+	'roa-tara' => 'Tarandíne',	# Tarantino
+	'ru' => 'Русский',	# Russian
+	'ru-sib' => 'Сибирской',	# Siberian/North Russian
+	'rw' => 'Kinyarwanda',	# Kinyarwanda, should possibly be Kinyarwandi
+	'sa' => 'संस्कृत',	# Sanskrit
+	'sc' => 'Sardu',		# Sardinian
+	'scn' => 'Sicilianu',	# Sicilian
+	'sco' => 'Scots',       # Scots
+	'sd' => 'سنڌي',	# Sindhi
+	'se' => 'Sámegiella',	# Northern Sami
+	'sg' => 'Sängö',		# Sango, possible alternative is Sangho
+	'sh' => 'Srpskohrvatski / Српскохрватски', # Serbocroatian
+	'si' => 'සිංහල',	# Sinhalese
+	'simple' => 'Simple English',	# Simple English
+	'sk' => 'Slovenčina',	# Slovak
+	'sl' => 'Slovenščina',	# Slovenian
+	'sm' => 'Gagana Samoa',	# Samoan
+	'sn' => 'chiShona',		# Shona
+	'so' => 'Soomaaliga',	# Somali
+	'sq' => 'Shqip',		# Albanian
+	'sr' => 'Српски / Srpski',	# Serbian
+	'sr-ec' => 'ћирилица',	# Serbian cyrillic ekavian
+	'sr-jc' => 'ијекавица',	# Serbian cyrillic iyekvian
+	'sr-el' => 'latinica',	# Serbian latin ekavian
+	'sr-jl' => 'ijekavica',	# Serbian latin iyekavian
+	'ss' => 'SiSwati',		# Swati
+	'st' => 'seSotho',		# Southern Sotho
+	'su' => 'Basa Sunda',	# Sundanese
+	'sv' => 'Svenska',		# Swedish
+	'sw' => 'Kiswahili',	# Swahili
+	'ta' => 'தமிழ்',	# Tamil
+	'te' => 'తెలుగు',	# Telugu
+	'tet' => 'Tetun',	# Tetun
+	'tg' => 'Тоҷикӣ',	# Tajik
+	'th' => 'ไทย',	# Thai
+	'ti' => 'ትግርኛ',		# Tigrinya
+	'tk' => 'Türkmen',	# Turkmen
+	'tl' => 'Tagalog',		# Tagalog (Filipino)
+	#'tlh' => 'tlhIngan-Hol',	# Klingon - no interlanguage links allowed
+	'tn' => 'Setswana',		# Setswana
+	'to' => 'faka-Tonga',		# Tonga (Tonga Islands)
+	'tokipona' => 'Toki Pona',      # Toki Pona
+	'tp' => 'Toki Pona',	# Toki Pona - non-standard language code
+	'tpi' => 'Tok Pisin',	# Tok Pisin
+	'tr' => 'Türkçe',	# Turkish
+	'ts' => 'Xitsonga',		# Tsonga
+	'tt' => 'Tatarça',	# Tatar
+	'tum' => 'chiTumbuka',  # Tumbuka
+	'tw' => 'Twi',			# Twi, (FIXME!)
+	'ty' => 'Reo Mā`ohi',	# Tahitian
+	'tyv' => 'Тыва дыл',	# Tyvan
+	'udm' => 'Удмурт',	# Udmurt
+	'ug' => 'Oyghurque',	# Uyghur
+	'uk' => 'Українська',	# Ukrainian
+	'ur' => 'اردو',	# Urdu
+	'uz' => 'O\'zbek',	# Uzbek
+	've' => 'Tshivenda',		# Venda
+	'vec' => 'Vèneto',	# Venetian
+	'vi' => 'Tiếng Việt',	# Vietnamese
+	'vls' => 'West-Vlams', # West Flemish
+	'vo' => 'Volapük',	# Volapük
+	'wa' => 'Walon',		# Walloon
+	'war' => 'Winaray', # Waray-Waray
+	'wo' => 'Wolof',		# Wolof
+	'wuu' => '吴语',		# Wu
+	'xal' => 'Хальмг',		# Kalmyk
+	'xh' => 'isiXhosa',		# Xhosan
+	'yi' => 'ייִדיש',	# Yiddish
+	'yo' => 'Yorùbá',	# Yoruba
+	'yue' => '粵語', 	# Cantonese -- (bug 8217) yue instead of zh-yue, http://www.sil.org/iso639-3/codes.asp?order=639_3&letter=y
+	'za' => '(Cuengh)',		# Zhuang
+	'zea' => 'Zeêuws',	# Zealandic
+	'zh' => '中文',						# (Zhōng Wén) - Chinese
+	'zh-cfr' => '閩南語', 					# Min-nan alias (site is at minnan)
+	'zh-classical' => '古文 / 文言文',			# Classical Chinese/Literary Chinese
+	'zh-cn' => "\xE2\x80\xAA中文(中国大陆)\xE2\x80\xAC",	# Chinese (PRC)
+	'zh-hans' => "\xE2\x80\xAA中文(简体)\xE2\x80\xAC",	# Chinese written using the Simplified Chinese script
+	'zh-hant' => "\xE2\x80\xAA中文(繁體)\xE2\x80\xAC",	# Chinese written using the Traditional Chinese script
+	'zh-hk' => "\xE2\x80\xAA中文(香港)\xE2\x80\xAC",		# Chinese (Hong Kong)
+	'zh-min-nan' => 'Bân-lâm-gú', 				# Min-nan -- (see bug 8217)
+	'zh-sg' => "\xE2\x80\xAA中文(新加坡)\xE2\x80\xAC", 	# Chinese (Singapore)
+	'zh-tw' => "\xE2\x80\xAA中文(台灣)\xE2\x80\xAC",		# Chinese (Taiwan)
+	'zh-yue' => '粵語',					# Cantonese -- (see bug 8217)
+	'zu' => 'isiZulu'		# Zulu
+);
+?>
Index: /MediaWiki/branches/1.11/languages/classes/LanguageAr.php
===================================================================
--- /MediaWiki/branches/1.11/languages/classes/LanguageAr.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/classes/LanguageAr.php	(revision 1280)
@@ -0,0 +1,28 @@
+<?php
+/** Arabic (العربية)
+ *
+ * @addtogroup Language
+ *
+ * @author Niklas Laxström
+ */
+class LanguageAr extends Language {
+
+	function convertPlural( $count, $w1, $w2, $w3, $w4, $w5) {
+		$forms = array($w1, $w2, $w3, $w4, $w5);
+		if ( $count == 1 ) {
+			$index = 0;
+		} elseif( $count == 2 ) {
+			$index = 1;
+		} elseif( $count < 11 && $count > 2 ) {
+			$index = 2;
+		} elseif( $count % 100 == 0) {
+			$index = 3;
+		} else {
+			$index = 4;
+		}
+		return $forms[$index];
+	}
+
+}
+
+?>
Index: /MediaWiki/branches/1.11/languages/classes/LanguageAz.php
===================================================================
--- /MediaWiki/branches/1.11/languages/classes/LanguageAz.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/classes/LanguageAz.php	(revision 1280)
@@ -0,0 +1,16 @@
+<?php
+/** Azerbaijani (Azərbaycan)
+  *
+  * @addtogroup Language
+  */
+class LanguageAz extends Language {
+	function ucfirst ( $string ) {
+		if ( $string[0] == 'i' ) {
+			return 'İ' . substr( $string, 1 );
+		} else {
+			return parent::ucfirst( $string );
+		}
+	}
+
+}
+?>
Index: /MediaWiki/branches/1.11/languages/classes/LanguageBe.php
===================================================================
--- /MediaWiki/branches/1.11/languages/classes/LanguageBe.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/classes/LanguageBe.php	(revision 1280)
@@ -0,0 +1,91 @@
+<?php
+/** Belarusian normative (Беларуская мова)
+  *
+  * This is still the version from Be-x-old, only duplicated for consistency of
+  * plural and grammar functions. If there are errors please send a patch.
+  *
+  * @addtogroup Language
+  *
+  * @author Ævar Arnfjörð Bjarmason <avarab@gmail.com>
+  * @bug 1638, 2135
+  * @link http://be.wikipedia.org/wiki/Talk:LanguageBe.php
+  * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License
+  * @license http://www.gnu.org/copyleft/fdl.html GNU Free Documentation License
+  */
+
+class LanguageBe extends Language {
+	function convertPlural( $count, $wordform1, $wordform2, $wordform3, $w4, $w5) {
+		$count = str_replace ('.', '', $count);
+		if ($count > 10 && floor(($count % 100) / 10) == 1) {
+			return $wordform3;
+		} else {
+			switch ($count % 10) {
+				case 1: return $wordform1;
+				case 2:
+				case 3:
+				case 4: return $wordform2;
+				default: return $wordform3;
+			}
+		}
+	}
+
+	# Convert from the nominative form of a noun to some other case
+	# Invoked with {{GRAMMAR:case|word}}
+	/**
+   * Cases: родны, вінавальны, месны
+   */
+	function convertGrammar( $word, $case ) {
+		switch ( $case ) {
+			case 'родны': # genitive
+				if ( $word == 'Вікіпэдыя' ) {
+					$word = 'Вікіпэдыі';
+				} elseif ( $word == 'ВікіСлоўнік' ) {
+					$word = 'ВікіСлоўніка';
+				} elseif ( $word == 'ВікіКнігі' ) {
+					$word = 'ВікіКніг';
+				} elseif ( $word == 'ВікіКрыніца' ) {
+					$word = 'ВікіКрыніцы';
+				} elseif ( $word == 'ВікіНавіны' ) {
+					$word = 'ВікіНавін';
+				} elseif ( $word == 'ВікіВіды' ) {
+					$word = 'ВікіВідаў';
+				}
+			break;
+			case 'вінавальны': # akusative
+				if ( $word == 'Вікіпэдыя' ) {
+					$word = 'Вікіпэдыю';
+				} elseif ( $word == 'ВікіСлоўнік' ) {
+					$word = 'ВікіСлоўнік';
+				} elseif ( $word == 'ВікіКнігі' ) {
+					$word = 'ВікіКнігі';
+				} elseif ( $word == 'ВікіКрыніца' ) {
+					$word = 'ВікіКрыніцу';
+				} elseif ( $word == 'ВікіНавіны' ) {
+					$word = 'ВікіНавіны';
+				} elseif ( $word == 'ВікіВіды' ) {
+					$word = 'ВікіВіды';
+				}
+			break;
+			case 'месны': # prepositional
+				if ( $word == 'Вікіпэдыя' ) {
+					$word = 'Вікіпэдыі';
+				} elseif ( $word == 'ВікіСлоўнік' ) {
+					$word = 'ВікіСлоўніку';
+				} elseif ( $word == 'ВікіКнігі' ) {
+					$word = 'ВікіКнігах';
+				} elseif ( $word == 'ВікіКрыніца' ) {
+					$word = 'ВікіКрыніцы';
+				} elseif ( $word == 'ВікіНавіны' ) {
+					$word = 'ВікіНавінах';
+				} elseif ( $word == 'ВікіВіды' ) {
+					$word = 'ВікіВідах';
+				}
+			break;
+		}
+
+		return $word; # this will return the original value for 'назоўны' (nominative) and all undefined case values
+	}
+
+}
+
+?>
Index: /MediaWiki/branches/1.11/languages/classes/LanguageBe_x_old.php
===================================================================
--- /MediaWiki/branches/1.11/languages/classes/LanguageBe_x_old.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/classes/LanguageBe_x_old.php	(revision 1280)
@@ -0,0 +1,88 @@
+<?php
+/** Belarusian alternative (Беларуская мова)
+  *
+  * @addtogroup Language
+  *
+  * @author Ævar Arnfjörð Bjarmason <avarab@gmail.com>
+  * @bug 1638, 2135
+  * @link http://be.wikipedia.org/wiki/Talk:LanguageBe.php
+  * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License
+  * @license http://www.gnu.org/copyleft/fdl.html GNU Free Documentation License
+  */
+
+class LanguageBe_x_old extends Language {
+	function convertPlural( $count, $wordform1, $wordform2, $wordform3, $w4, $w5) {
+		$count = str_replace ('.', '', $count);
+		if ($count > 10 && floor(($count % 100) / 10) == 1) {
+			return $wordform3;
+		} else {
+			switch ($count % 10) {
+				case 1: return $wordform1;
+				case 2:
+				case 3:
+				case 4: return $wordform2;
+				default: return $wordform3;
+			}
+		}
+	}
+
+	# Convert from the nominative form of a noun to some other case
+	# Invoked with {{GRAMMAR:case|word}}
+	/**
+   * Cases: родны, вінавальны, месны
+   */
+	function convertGrammar( $word, $case ) {
+		switch ( $case ) {
+			case 'родны': # genitive
+				if ( $word == 'Вікіпэдыя' ) {
+					$word = 'Вікіпэдыі';
+				} elseif ( $word == 'ВікіСлоўнік' ) {
+					$word = 'ВікіСлоўніка';
+				} elseif ( $word == 'ВікіКнігі' ) {
+					$word = 'ВікіКніг';
+				} elseif ( $word == 'ВікіКрыніца' ) {
+					$word = 'ВікіКрыніцы';
+				} elseif ( $word == 'ВікіНавіны' ) {
+					$word = 'ВікіНавін';
+				} elseif ( $word == 'ВікіВіды' ) {
+					$word = 'ВікіВідаў';
+				}
+			break;
+			case 'вінавальны': # akusative
+				if ( $word == 'Вікіпэдыя' ) {
+					$word = 'Вікіпэдыю';
+				} elseif ( $word == 'ВікіСлоўнік' ) {
+					$word = 'ВікіСлоўнік';
+				} elseif ( $word == 'ВікіКнігі' ) {
+					$word = 'ВікіКнігі';
+				} elseif ( $word == 'ВікіКрыніца' ) {
+					$word = 'ВікіКрыніцу';
+				} elseif ( $word == 'ВікіНавіны' ) {
+					$word = 'ВікіНавіны';
+				} elseif ( $word == 'ВікіВіды' ) {
+					$word = 'ВікіВіды';
+				}
+			break;
+			case 'месны': # prepositional
+				if ( $word == 'Вікіпэдыя' ) {
+					$word = 'Вікіпэдыі';
+				} elseif ( $word == 'ВікіСлоўнік' ) {
+					$word = 'ВікіСлоўніку';
+				} elseif ( $word == 'ВікіКнігі' ) {
+					$word = 'ВікіКнігах';
+				} elseif ( $word == 'ВікіКрыніца' ) {
+					$word = 'ВікіКрыніцы';
+				} elseif ( $word == 'ВікіНавіны' ) {
+					$word = 'ВікіНавінах';
+				} elseif ( $word == 'ВікіВіды' ) {
+					$word = 'ВікіВідах';
+				}
+			break;
+		}
+
+		return $word; # this will return the original value for 'назоўны' (nominative) and all undefined case values
+	}
+
+}
+
+?>
Index: /MediaWiki/branches/1.11/languages/classes/LanguageBg.php
===================================================================
--- /MediaWiki/branches/1.11/languages/classes/LanguageBg.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/classes/LanguageBg.php	(revision 1280)
@@ -0,0 +1,23 @@
+<?php
+/** Bulgarian (Български)
+ *
+ * @addtogroup Language
+ */
+
+/**
+ * @addtogroup Language
+ */
+class LanguageBg extends Language {
+	/**
+	 * ISO number formatting: 123 456 789,99.
+	 * Avoid tripple grouping by numbers with whole part up to 4 digits.
+	 */
+	function commafy($_) {
+		if (!preg_match('/^\d{1,4}$/',$_)) {
+			return strrev((string)preg_replace('/(\d{3})(?=\d)(?!\d*\.)/','$1,',strrev($_)));
+		} else {
+			return $_;
+		}
+	}
+}
+?>
Index: /MediaWiki/branches/1.11/languages/classes/LanguageBs.php
===================================================================
--- /MediaWiki/branches/1.11/languages/classes/LanguageBs.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/classes/LanguageBs.php	(revision 1280)
@@ -0,0 +1,136 @@
+<?php
+/** Bosnian (bosanski)
+  *
+  * @addtogroup Language
+  */
+
+class LanguageBs extends Language {
+
+	function convertPlural( $count, $wordform1, $wordform2, $wordform3, $w4, $w5) {
+		$count = str_replace ('.', '', $count);
+		if ($count > 10 && floor(($count % 100) / 10) == 1) {
+			return $wordform3;
+		} else {
+			switch ($count % 10) {
+				case 1: return $wordform1;
+				case 2:
+				case 3:
+				case 4: return $wordform2;
+				default: return $wordform3;
+			}
+		}
+	}
+
+	# Convert from the nominative form of a noun to some other case
+	# Invoked with {{GRAMMAR:case|word}}
+	/**
+	 * Cases: genitiv, dativ, akuzativ, vokativ, instrumental, lokativ
+	 */
+	function convertGrammar( $word, $case ) {
+		global $wgGrammarForms;
+		if ( isset($wgGrammarForms['bs'][$case][$word]) ) {
+			return $wgGrammarForms['bs'][$case][$word];
+		}
+		switch ( $case ) {
+			case 'genitiv': # genitive
+				if ( $word == 'Wikipedia' ) {
+					$word = 'Wikipedije';
+				} elseif ( $word == 'Wikiknjige' ) {
+					$word = 'Wikiknjiga';
+				} elseif ( $word == 'Wikivijesti' ) {
+					$word = 'Wikivijesti';
+				} elseif ( $word == 'Wikicitati' ) {
+					$word = 'Wikicitata';
+				} elseif ( $word == 'Wikiizvor' ) {
+					$word = 'Wikiizvora';
+				} elseif ( $word == 'Vikirječnik' ) {
+					$word = 'Vikirječnika';
+				}
+			break;
+			case 'dativ': # dative
+				if ( $word == 'Wikipedia' ) {
+					$word = 'Wikipediji';
+				} elseif ( $word == 'Wikiknjige' ) {
+					$word = 'Wikiknjigama';
+				} elseif ( $word == 'Wikicitati' ) {
+					$word = 'Wikicitatima';
+				} elseif ( $word == 'Wikivijesti' ) {
+					$word = 'Wikivijestima';
+				} elseif ( $word == 'Wikiizvor' ) {
+					$word = 'Wikiizvoru';
+				} elseif ( $word == 'Vikirječnik' ) {
+					$word = 'Vikirječniku';
+				}
+			break;
+			case 'akuzativ': # akusative
+				if ( $word == 'Wikipedia' ) {
+					$word = 'Wikipediju';
+				} elseif ( $word == 'Wikiknjige' ) {
+					$word = 'Wikiknjige';
+				} elseif ( $word == 'Wikicitati' ) {
+					$word = 'Wikicitate';
+				} elseif ( $word == 'Wikivijesti' ) {
+					$word = 'Wikivijesti';
+				} elseif ( $word == 'Wikiizvor' ) {
+					$word = 'Wikiizvora';
+				} elseif ( $word == 'Vikirječnik' ) {
+					$word = 'Vikirječnika';
+				}
+			break;
+			case 'vokativ': # vocative
+				if ( $word == 'Wikipedia' ) {
+					$word = 'Wikipedijo';
+				} elseif ( $word == 'Wikiknjige' ) {
+					$word = 'Wikiknjige';
+				} elseif ( $word == 'Wikicitati' ) {
+					$word = 'Wikicitati';
+				} elseif ( $word == 'Wikivijesti' ) {
+					$word = 'Wikivijesti';
+				} elseif ( $word == 'Wikiizvor' ) {
+					$word = 'Wikizivoru';
+				} elseif ( $word == 'Vikirječnik' ) {
+					$word = 'Vikirječniče';
+				}
+			break;
+			case 'instrumental': # instrumental
+				if ( $word == 'Wikipedia' ) {
+					$word = 's Wikipediom';
+				} elseif ( $word == 'Wikiknjige' ) {
+					$word = 's Wikiknjigama';
+				} elseif ( $word == 'Wikicitati' ) {
+					$word = 's Wikicitatima';
+				} elseif ( $word == 'Wikivijesti' ) {
+					$word = 's Wikivijestima';
+				} elseif ( $word == 'Wikiizvor' ) {
+					$word = 's Wikiizvorom';
+				} elseif ( $word == 'Vikirječnik' ) {
+					$word = 's Vikirječnikom';
+				} else {
+					$word = 's ' . $word;
+				}
+			break;
+			case 'lokativ': # locative
+				if ( $word == 'Wikipedia' ) {
+					$word = 'o Wikipediji';
+				} elseif ( $word == 'Wikiknjige' ) {
+					$word = 'o Wikiknjigama';
+				} elseif ( $word == 'Wikicitati' ) {
+					$word = 'o Wikicitatima';
+				} elseif ( $word == 'Wikivijesti' ) {
+					$word = 'o Wikivijestima';
+				} elseif ( $word == 'Wikiizvor' ) {
+					$word = 'o Wikiizvoru';
+				} elseif ( $word == 'Vikirječnik' ) {
+					$word = 'o Vikirječniku';
+				} else {
+					$word = 'o ' . $word;
+				}
+			break;
+		}
+
+		return $word; # this will return the original value for 'nominativ' (nominative) and all undefined case values
+	}
+
+}
+
+?>
Index: /MediaWiki/branches/1.11/languages/classes/LanguageCs.php
===================================================================
--- /MediaWiki/branches/1.11/languages/classes/LanguageCs.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/classes/LanguageCs.php	(revision 1280)
@@ -0,0 +1,86 @@
+<?php
+/** Czech (česky)
+ *
+ * @addtogroup Language
+ */
+
+#--------------------------------------------------------------------------
+# Internationalisation code
+#--------------------------------------------------------------------------
+
+class LanguageCs extends Language {
+	# Grammatical transformations, needed for inflected languages
+	# Invoked by putting {{grammar:case|word}} in a message
+	function convertGrammar( $word, $case ) {
+		global $wgGrammarForms;
+		if ( isset($wgGrammarForms['cs'][$case][$word]) ) {
+			return $wgGrammarForms['cs'][$case][$word];
+		}
+		# allowed values for $case:
+		#	1sg, 2sg, ..., 7sg -- nominative, genitive, ... (in singular)
+		switch ( $word ) {
+			case 'Wikipedia':
+			case 'Wikipedie':
+				switch ( $case ) {
+					case '3sg':
+					case '4sg':
+					case '6sg':
+						return 'Wikipedii';
+					case '7sg':
+						return 'Wikipedií';
+					default:
+						return 'Wikipedie';
+				}
+
+			case 'Wiktionary':
+			case 'Wikcionář':
+				switch ( $case ) {
+					case '2sg':
+						return 'Wikcionáře';
+					case '3sg':
+					case '5sg';
+					case '6sg';
+						return 'Wikcionáři';
+					case '7sg':
+						return 'Wikcionářem';
+					default:
+						return 'Wikcionář';
+				}
+
+			case 'Wikiquote':
+			case 'Wikicitáty':
+				switch ( $case ) {
+					case '2sg':
+						return 'Wikicitátů';
+					case '3sg':
+						return 'Wikicitátům';
+					case '6sg';
+						return 'Wikicitátech';
+					default:
+						return 'Wikicitáty';
+				}
+		}
+		# unknown
+		return $word;
+	}
+
+  # Plural form transformations, needed for some languages.
+  # Invoked by {{plural:count|wordform1|wordform2|wordform3}}
+  function convertPlural( $count, $wordform1, $wordform2, $wordform3, $w4, $w5) {
+    $count = str_replace( '\xc2\xa0', '', $count );
+    switch ( $count ) {
+      case 1:
+        return $wordform1;
+
+      case 2:
+      case 3:
+      case 4:
+        return $wordform2;
+
+      default:
+        return $wordform3;
+    };
+  }
+}
+
+?>
Index: /MediaWiki/branches/1.11/languages/classes/LanguageCu.php
===================================================================
--- /MediaWiki/branches/1.11/languages/classes/LanguageCu.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/classes/LanguageCu.php	(revision 1280)
@@ -0,0 +1,49 @@
+<?php
+/** Old Church Slavonic (Ѩзыкъ словѣньскъ)
+  *
+  * @addtogroup Language
+  */
+
+/* Please, see Language.php for general function comments */
+class LanguageCu extends Language {
+	# Convert from the nominative form of a noun to some other case
+	# Invoked with {{grammar:case|word}}
+	function convertGrammar( $word, $case ) {
+		global $wgGrammarForms;
+		if ( isset($wgGrammarForms['сu'][$case][$word]) ) {
+			return $wgGrammarForms['сu'][$case][$word];
+		}
+
+		# These rules are not perfect, but they are currently only used for site names so it doesn't
+		# matter if they are wrong sometimes. Just add a special case for your site name if necessary.
+
+		#join and array_slice instead mb_substr
+		$ar = array();
+		preg_match_all( '/./us', $word, $ar );
+		if (!preg_match("/[a-zA-Z_]/us", $word))
+			switch ( $case ) {
+				case 'genitive': #родительный падеж
+					if ((join('',array_slice($ar[0],-4))=='вики') || (join('',array_slice($ar[0],-4))=='Вики'))
+						{}
+					elseif (join('',array_slice($ar[0],-2))=='ї')
+						$word = join('',array_slice($ar[0],0,-2)).'їѩ';
+					break;
+				case 'accusative': #винительный падеж
+					#stub
+					break;
+			}
+		return $word;
+	}
+
+	function convertPlural( $count, $wordform1, $wordform2, $wordform3, $wordform4, $w5) {
+		switch ($count % 10) {
+			case 1: return $wordform1;
+			case 2: return $wordform2;
+			case 3: return $wordform3;
+			case 4: return $wordform3;
+			default: return $wordform4;
+		}
+	}
+
+}
+?>
Index: /MediaWiki/branches/1.11/languages/classes/LanguageEo.php
===================================================================
--- /MediaWiki/branches/1.11/languages/classes/LanguageEo.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/classes/LanguageEo.php	(revision 1280)
@@ -0,0 +1,73 @@
+<?php
+/** Esperanto (Esperanto)
+  * @addtogroup Language
+  */
+
+class LanguageEo extends Language {
+	function iconv( $in, $out, $string ) {
+		# For most languages, this is a wrapper for iconv
+		# Por multaj lingvoj, ĉi tiu nur voku la sisteman funkcion iconv()
+		# Ni ankaŭ konvertu X-sistemajn surogotajn
+		if( strcasecmp( $in, 'x' ) == 0 and strcasecmp( $out, 'utf-8' ) == 0) {
+			$xu = array (
+				'xx' => 'x' , 'xX' => 'x' ,
+				'Xx' => 'X' , 'XX' => 'X' ,
+				"Cx" => "\xc4\x88" , "CX" => "\xc4\x88" ,
+				"cx" => "\xc4\x89" , "cX" => "\xc4\x89" ,
+				"Gx" => "\xc4\x9c" , "GX" => "\xc4\x9c" ,
+				"gx" => "\xc4\x9d" , "gX" => "\xc4\x9d" ,
+				"Hx" => "\xc4\xa4" , "HX" => "\xc4\xa4" ,
+				"hx" => "\xc4\xa5" , "hX" => "\xc4\xa5" ,
+				"Jx" => "\xc4\xb4" , "JX" => "\xc4\xb4" ,
+				"jx" => "\xc4\xb5" , "jX" => "\xc4\xb5" ,
+				"Sx" => "\xc5\x9c" , "SX" => "\xc5\x9c" ,
+				"sx" => "\xc5\x9d" , "sX" => "\xc5\x9d" ,
+				"Ux" => "\xc5\xac" , "UX" => "\xc5\xac" ,
+				"ux" => "\xc5\xad" , "uX" => "\xc5\xad"
+				) ;
+			return preg_replace ( '/([cghjsu]x?)((?:xx)*)(?!x)/ei',
+			  'strtr( "$1", $xu ) . strtr( "$2", $xu )', $string );
+		} else if( strcasecmp( $in, 'UTF-8' ) == 0 and strcasecmp( $out, 'x' ) == 0 ) {
+			$ux = array (
+				'x' => 'xx' , 'X' => 'Xx' ,
+				"\xc4\x88" => "Cx" , "\xc4\x89" => "cx" ,
+				"\xc4\x9c" => "Gx" , "\xc4\x9d" => "gx" ,
+				"\xc4\xa4" => "Hx" , "\xc4\xa5" => "hx" ,
+				"\xc4\xb4" => "Jx" , "\xc4\xb5" => "jx" ,
+				"\xc5\x9c" => "Sx" , "\xc5\x9d" => "sx" ,
+				"\xc5\xac" => "Ux" , "\xc5\xad" => "ux"
+			) ;
+			# Double Xs only if they follow cxapelutaj literoj.
+			return preg_replace( '/((?:[cghjsu]|\xc4[\x88\x89\x9c\x9d\xa4\xa5\xb4\xb5]'.
+			  '|\xc5[\x9c\x9d\xac\xad])x*)/ei', 'strtr( "$1", $ux )', $string );
+		}
+		return iconv( $in, $out, $string );
+	}
+
+	function checkTitleEncoding( $s ) {
+		# Check for X-system backwards-compatibility URLs
+		$ishigh = preg_match( '/[\x80-\xff]/', $s);
+		$isutf = preg_match( '/^([\x00-\x7f]|[\xc0-\xdf][\x80-\xbf]|' .
+			'[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xf7][\x80-\xbf]{3})+$/', $s );
+
+		if($ishigh and !$isutf) {
+			# Assume Latin1
+			$s = utf8_encode( $s );
+		} else {
+			if( preg_match( '/(\xc4[\x88\x89\x9c\x9d\xa4\xa5\xb4\xb5]'.
+				'|\xc5[\x9c\x9d\xac\xad])/', $s ) )
+			return $s;
+		}
+
+		//if( preg_match( '/[cghjsu]x/i', $s ) )
+		//	return $this->iconv( 'x', 'utf-8', $s );
+		return $s;
+	}
+
+	function initEncoding() {
+		global $wgEditEncoding;
+		$wgEditEncoding = 'x';
+	}
+}
+
+?>
Index: /MediaWiki/branches/1.11/languages/classes/LanguageEt.php
===================================================================
--- /MediaWiki/branches/1.11/languages/classes/LanguageEt.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/classes/LanguageEt.php	(revision 1280)
@@ -0,0 +1,20 @@
+<?php
+/** Estonian (Eesti)
+ *
+ * @addtogroup Language
+ *
+ */
+
+class LanguageEt extends Language {
+	/**
+	 * Avoid grouping whole numbers between 0 to 9999
+	 */
+	function commafy($_) {
+		if (!preg_match('/^\d{1,4}$/',$_)) {
+			return strrev((string)preg_replace('/(\d{3})(?=\d)(?!\d*\.)/','$1,',strrev($_)));
+		} else {
+			return $_;
+		}
+	}
+}
+?>
Index: /MediaWiki/branches/1.11/languages/classes/LanguageFi.php
===================================================================
--- /MediaWiki/branches/1.11/languages/classes/LanguageFi.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/classes/LanguageFi.php	(revision 1280)
@@ -0,0 +1,146 @@
+<?php
+/** Finnish (Suomi)
+ *
+ * @addtogroup Language
+ *
+ * @author Niklas Laxström
+ */
+class LanguageFi extends Language {
+	/**
+	 * Avoid grouping whole numbers between 0 to 9999
+	 */
+	function commafy($_) {
+		if (!preg_match('/^\d{1,4}$/',$_)) {
+			return strrev((string)preg_replace('/(\d{3})(?=\d)(?!\d*\.)/','$1,',strrev($_)));
+		} else {
+			return $_;
+		}
+	}
+
+	# Convert from the nominative form of a noun to some other case
+	# Invoked with {{GRAMMAR:case|word}}
+	function convertGrammar( $word, $case ) {
+		global $wgGrammarForms;
+		if ( isset($wgGrammarForms['fi'][$case][$word]) ) {
+			return $wgGrammarForms['fi'][$case][$word];
+		}
+
+		# These rules are not perfect, but they are currently only used for site names so it doesn't
+		# matter if they are wrong sometimes. Just add a special case for your site name if necessary.
+
+		# wovel harmony flag
+		$aou = preg_match( '/[aou][^äöy]*$/i', $word );
+
+		# The flag should be false for compounds where the last word has only neutral vowels (e/i).
+		# The general case cannot be handled without a dictionary, but there's at least one notable
+		# special case we should check for:
+
+		if ( preg_match( '/wiki$/i', $word ) )
+			$aou = false;
+
+		# append i after final consonant
+		if ( preg_match( '/[bcdfghjklmnpqrstvwxz]$/i', $word ) )
+			$word .= 'i';
+
+		switch ( $case ) {
+			case 'genitive':
+				$word .= 'n';
+				break;
+			case 'elative':
+				$word .= ($aou ? 'sta' : 'stä');
+				break;
+			case 'partitive':
+				$word .= ($aou ? 'a' : 'ä');
+				break;
+			case 'illative':
+				# Double the last letter and add 'n'
+				# mb_substr has a compatibility function in GlobalFunctions.php
+				$word = $word . mb_substr($word, -1) . 'n';
+				break;
+			case 'inessive':
+				$word .= ($aou ? 'ssa' : 'ssä');
+				break;
+		}
+		return $word;
+	}
+
+	function translateBlockExpiry( $str ) {
+		/*
+			'ago', 'now', 'today', 'this', 'next',
+			'first', 'third', 'fourth', 'fifth', 'sixth', 'seventh', 'eighth', 'ninth', 'tenth', 'eleventh', 'twelfth',
+			'tomorrow', 'yesterday'
+
+			$months = 'january:tammikuu,february:helmikuu,march:maaliskuu,april:huhtikuu,may:toukokuu,june:kesäkuu,' .
+				'july:heinäkuu,august:elokuu,september:syyskuu,october:lokakuu,november:marraskuu,december:joulukuu,' .
+				'jan:tammikuu,feb:helmikuu,mar:maaliskuu,apr:huhtikuu,jun:kesäkuu,jul:heinäkuu,aug:elokuu,sep:syyskuu,'.
+				'oct:lokakuu,nov:marraskuu,dec:joulukuu,sept:syyskuu';
+		*/
+		$weekds = array(
+			'monday' => 'maanantai',
+			'tuesday' => 'tiistai',
+			'wednesday' => 'keskiviikko',
+			'thursay' => 'torstai',
+			'friday' => 'perjantai',
+			'saturday' => 'lauantai',
+			'sunday' => 'sunnuntai',
+			'mon' => 'ma',
+			'tue' => 'ti',
+			'tues' => 'ti',
+			'wed' => 'ke',
+			'wednes' => 'ke',
+			'thu' => 'to',
+			'thur' => 'to',
+			'thurs' => 'to',
+			'fri' => 'pe',
+			'sat' => 'la',
+			'sun' => 'su',
+			'next' => 'seuraava',
+			'tomorrow' => 'huomenna',
+			'ago' => 'sitten',
+			'seconds' => 'sekuntia',
+			'second' => 'sekunti',
+			'secs' => 's',
+			'sec' => 's',
+			'minutes' => 'minuuttia',
+			'minute' => 'minuutti',
+			'mins' => 'min',
+			'min' => 'min',
+			'days' => 'päivää',
+			'day' => 'päivä',
+			'hours' => 'tuntia',
+			'hour' => 'tunti',
+			'weeks' => 'viikkoa',
+			'week' => 'viikko',
+			'fortnights' => 'tuplaviikkoa',
+			'fortnight' => 'tuplaviikko',
+			'months' => 'kuukautta',
+			'month' => 'kuukausi',
+			'years' => 'vuotta',
+			'year' => 'vuosi',
+			'infinite' => 'ikuisesti',
+			'indefinite' => 'ikuisesti'
+		);
+
+		$final = '';
+		$tokens = explode ( ' ', $str);
+		foreach( $tokens as $item ) {
+			if ( !is_numeric($item) ) {
+				if ( count ( explode( '-', $item ) ) == 3 && strlen($item) == 10 ) {
+					list( $yyyy, $mm, $dd ) = explode( '-', $item );
+					$final .= ' ' . $this->date( "{$yyyy}{$mm}{$dd}00000000");
+					continue;
+				}
+				if( isset( $weekds[$item] ) ) {
+					$final .= ' ' . $weekds[$item];
+					continue;
+				}
+			}
+
+			$final .= ' ' . $item;
+		}
+	   	return '<span class="blockexpiry" title="' . htmlspecialchars($str). '">”' . trim( $final ) . '”</span>';
+	}
+
+}
+
+?>
Index: /MediaWiki/branches/1.11/languages/classes/LanguageFr.php
===================================================================
--- /MediaWiki/branches/1.11/languages/classes/LanguageFr.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/classes/LanguageFr.php	(revision 1280)
@@ -0,0 +1,16 @@
+<?php
+/** French (Français)
+ *
+ * @addtogroup Language
+ *
+ */
+
+class LanguageFr extends Language {
+	/**
+	 * Use singular form for zero (see bug 7309)
+	 */
+        function convertPlural( $count, $w1, $w2, $w3, $w4, $w5) {
+		return $count <= '1' ? $w1 : $w2;
+        }
+}
+?>
Index: /MediaWiki/branches/1.11/languages/classes/LanguageGa.php
===================================================================
--- /MediaWiki/branches/1.11/languages/classes/LanguageGa.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/classes/LanguageGa.php	(revision 1280)
@@ -0,0 +1,51 @@
+<?php
+/** Irish (Gaeilge)
+ *
+ * @addtogroup Language
+ */
+
+class LanguageGa extends Language {
+	# Convert day names
+	# Invoked with {{GRAMMAR:transformation|word}}
+	function convertGrammar( $word, $case ) {
+		global $wgGrammarForms;
+		if ( isset($wgGrammarForms['ga'][$case][$word]) ) {
+			return $wgGrammarForms['ga'][$case][$word];
+		}
+
+		switch ( $case ) {
+		case 'genitive':
+			switch ($word) {
+			case 'Vicipéid':     $word = 'Vicipéide'; break;
+			case 'Vicífhoclóir': $word = 'Vicífhoclóra'; break;
+			case 'Vicíleabhair': $word = 'Vicíleabhar'; break;
+			case 'Vicíshliocht': $word = 'Vicíshleachta'; break;
+			case 'Vicífhoinse':  $word = 'Vicífhoinse'; break;
+			case 'Vicíghnéithe': $word = 'Vicíghnéithe'; break;
+			case 'Vicínuacht':   $word = 'Vicínuachta'; break;
+			}
+
+		case 'ainmlae':
+			switch ($word) {
+			case 'an Domhnach':
+				$word = 'Dé Domhnaigh'; break;
+			case 'an Luan':
+				$word = 'Dé Luain'; break;
+			case 'an Mháirt':
+				$word = 'Dé Mháirt'; break;
+			case 'an Chéadaoin':
+				$word = 'Dé Chéadaoin'; break;
+			case 'an Déardaoin':
+				$word = 'Déardaoin'; break;
+			case 'an Aoine':
+				$word = 'Dé hAoine'; break;
+			case 'an Satharn':
+				$word = 'Dé Sathairn'; break;
+			}
+		}
+		return $word;
+	}
+
+}
+
+?>
Index: /MediaWiki/branches/1.11/languages/classes/LanguageGsw.php
===================================================================
--- /MediaWiki/branches/1.11/languages/classes/LanguageGsw.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/classes/LanguageGsw.php	(revision 1280)
@@ -0,0 +1,68 @@
+<?php
+/** Alemannic (Alemannisch)
+ *
+ * @addtogroup Language
+ */
+
+class LanguageGsw extends Language {
+   # Convert from the nominative form of a noun to some other case
+   # Invoked with result
+
+   function convertGrammar( $word, $case ) {
+       global $wgGrammarForms;
+       if ( isset($wgGrammarForms['gsw'][$case][$word]) ) {
+           return $wgGrammarForms['gsw'][$case][$word];
+       }
+       switch ( $case ) {
+           case 'dativ':
+               if ( $word == 'Wikipedia' ) {
+                   $word = 'vo de Wikipedia';
+               } elseif ( $word == 'Wikinorchrichte' ) {
+                   $word = 'vo de Wikinochrichte';
+               } elseif ( $word == 'Wiktionaire' ) {
+                   $word = 'vom Wiktionaire';
+               } elseif ( $word == 'Wikibuecher' ) {
+                   $word = 'vo de Wikibuecher';
+               } elseif ( $word == 'Wikisprüch' ) {
+                   $word = 'vo de Wikisprüch';
+               } elseif ( $word == 'Wikiquälle' ) {
+                   $word = 'vo de Wikiquälle';
+               }
+               break;
+           case 'akkusativ':
+               if ( $word == 'Wikipedia' ) {
+                   $word = 'd Wikipedia';
+               } elseif ( $word == 'Wikinorchrichte' ) {
+                   $word = 'd Wikinochrichte';
+               } elseif ( $word == 'Wiktionaire' ) {
+                   $word = 's Wiktionaire';
+               } elseif ( $word == 'Wikibuecher' ) {
+                   $word = 'd Wikibuecher';
+               } elseif ( $word == 'Wikisprüch' ) {
+                   $word = 'd Wikisprüch';
+               } elseif ( $word == 'Wikiquälle' ) {
+                   $word = 'd Wikiquälle';
+               }
+               break;
+           case 'nominativ':
+               if ( $word == 'Wikipedia' ) {
+                   $word = 'd Wikipedia';
+               } elseif ( $word == 'Wikinorchrichte' ) {
+                   $word = 'd Wikinochrichte';
+               } elseif ( $word == 'Wiktionaire' ) {
+                   $word = 's Wiktionaire';
+               } elseif ( $word == 'Wikibuecher' ) {
+                   $word = 'd Wikibuecher';
+               } elseif ( $word == 'Wikisprüch' ) {
+                   $word = 'd Wikisprüch';
+               } elseif ( $word == 'Wikiquälle' ) {
+                   $word = 'd Wikiquälle';
+               }
+               break;
+       } 
+       return $word;
+   }
+
+}
+
+?>
Index: /MediaWiki/branches/1.11/languages/classes/LanguageHe.php
===================================================================
--- /MediaWiki/branches/1.11/languages/classes/LanguageHe.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/classes/LanguageHe.php	(revision 1280)
@@ -0,0 +1,71 @@
+<?php
+/**
+ * Hebrew (עברית)
+ *
+ * @addtogroup Language
+ *
+ * @author Rotem Liss
+ */
+
+class LanguageHe extends Language {
+	/**
+	 * Convert grammar forms of words.
+	 *
+	 * Available cases:
+	 * "prefixed" (or "תחילית") - when the word has a prefix
+	 *
+	 * @param string the word to convert
+	 * @param string the case
+	 */
+	public function convertGrammar( $word, $case ) {
+		global $wgGrammarForms;
+		if ( isset($wgGrammarForms['he'][$case][$word]) ) {
+			return $wgGrammarForms['he'][$case][$word];
+		}
+		
+		switch ( $case ) {
+			case 'prefixed':
+			case 'תחילית':
+				# Duplicate the "Waw" if prefixed
+				if ( substr( $word, 0, 2 ) == "ו" && substr( $word, 0, 4 ) != "וו" ) {
+					$word = "ו".$word;
+				}
+				
+				# Remove the "He" if prefixed
+				if ( substr( $word, 0, 2 ) == "ה" ) {
+					$word = substr( $word, 2 );
+				}
+				
+				# Add a hyphen if non-Hebrew letters
+				if ( substr( $word, 0, 2 ) < "א" || substr( $word, 0, 2 ) > "ת" ) {
+					$word = "־".$word;
+				}
+		}
+		
+		return $word;
+	}
+	
+	/**
+	 * Gets a number and uses the suited form of the word.
+	 *
+	 * @param integer the number of items
+	 * @param string the first form (singular)
+	 * @param string the second form (plural)
+	 * @param string the third form (2 items, plural is used if not applicable and not specified
+	 * @param not used (for compatibility with ancestor)
+	 * @param not used (for compatibility with ancestor)
+	 *
+	 * @return string of the suited form of word
+	 */
+	public function convertPlural( $count, $w1, $w2, $w3, $w4, $w5) {
+		if ( $count == '1' ) {
+			return $w1;
+		} elseif ( $count == '2' && $w3 ) {
+			return $w3;
+		} else {
+			return $w2;
+		}
+	}
+}
+
+?>
Index: /MediaWiki/branches/1.11/languages/classes/LanguageHr.php
===================================================================
--- /MediaWiki/branches/1.11/languages/classes/LanguageHr.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/classes/LanguageHr.php	(revision 1280)
@@ -0,0 +1,25 @@
+<?php
+/** Croatian (hrvatski)
+  *
+  * @addtogroup Language
+  */
+
+class LanguageHr extends Language {
+	function convertPlural( $count, $wordform1, $wordform2, $wordform3, $w4, $w5) {
+		$count = str_replace ('.', '', $count);
+		if ($count > 10 && floor(($count % 100) / 10) == 1) {
+			return $wordform3;
+		} else {
+			switch ($count % 10) {
+				case 1: return $wordform1;
+				case 2:
+				case 3:
+				case 4: return $wordform2;
+				default: return $wordform3;
+			}
+		}
+	}
+
+}
+
+?>
Index: /MediaWiki/branches/1.11/languages/classes/LanguageHsb.php
===================================================================
--- /MediaWiki/branches/1.11/languages/classes/LanguageHsb.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/classes/LanguageHsb.php	(revision 1280)
@@ -0,0 +1,116 @@
+<?php
+/** Upper Sorbian (Hornjoserbsce)
+ *
+ * @addtogroup Language
+ */
+
+class LanguageHsb extends Language {
+
+	# Convert from the nominative form of a noun to some other case
+	# Invoked with {{GRAMMAR:case|word}}
+
+	function convertGrammar( $word, $case ) {
+		global $wgGrammarForms;
+		if ( isset( $wgGrammarForms['hsb'][$case][$word] ) ) {
+			return $wgGrammarForms['hsb'][$case][$word];
+		}
+
+		switch ( $case ) {
+			case 'genitiw': # genitive
+				if ( $word == 'Wikipedija' ) {
+					$word = 'Wikipedije';
+				} elseif ( $word == 'Wikiknihi' ) {
+					$word = 'Wikiknih';
+				} elseif ( $word == 'Wikinowiny' ) {
+					$word = 'Wikinowin';
+				} elseif ( $word == 'Wikižórło' ) {
+					$word = 'Wikižórła';
+				} elseif ( $word == 'Wikicitaty' ) {
+					$word = 'Wikicitatow';
+				} elseif ( $word == 'Wikisłownik' ) {
+					$word = 'Wikisłownika';
+				}
+				break;
+			case 'datiw': # dativ
+				if ( $word == 'Wikipedija' ) {
+					$word = 'Wikipediji';
+				} elseif ( $word == 'Wikiknihi' ) {
+					$word = 'Wikikniham';
+				} elseif ( $word == 'Wikinowiny' ) {
+					$word = 'Wikinowinam';
+				} elseif ( $word == 'Wikižórło' ) {
+					$word = 'Wikižórłu';
+				} elseif ( $word == 'Wikicitaty' ) {
+					$word = 'Wikicitatam';
+				} elseif ( $word == 'Wikisłownik' ) {
+					$word = 'Wikisłownikej';
+				}
+				break;
+			case 'akuzativ': # akuzativ
+				if ( $word == 'Wikipedija' ) {
+					$word = 'Wikipediju';
+				} elseif ( $word == 'Wikiknihi' ) {
+					$word = 'Wikiknknihi';
+				} elseif ( $word == 'Wikinowiny' ) {
+					$word = 'Wikinowiny';
+				} elseif ( $word == 'Wikižórło' ) {
+					$word = 'Wikižórło';
+				} elseif ( $word == 'Wikicitaty' ) {
+					$word = 'Wikicitaty';
+				} elseif ( $word == 'Wikisłownik' ) {
+					$word = 'Wikisłownik';
+				}
+				break;
+			case 'instrumental': # instrumental
+				if ( $word == 'Wikipedija' ) {
+					$word = 'Wikipediju';
+				} elseif ( $word == 'Wikiknihi' ) {
+					$word = 'Wikiknihami';
+				} elseif ( $word == 'Wikinowiny' ) {
+					$word = 'Wikinowinami';
+				} elseif ( $word == 'Wikižórło' ) {
+					$word = 'Wikižórłom';
+				} elseif ( $word == 'Wikicitaty' ) {
+					$word = 'Wikicitatami';
+				} elseif ( $word == 'Wikisłownik' ) {
+					$word = 'Wikisłownikom';
+				} else {
+					$word = 'z ' . $word;
+				}
+				break;
+			case 'lokatiw': # lokatiw
+				if ( $word == 'Wikipedija' ) {
+					$word = 'Wikipediji';
+				} elseif ( $word == 'Wikiknihi' ) {
+					$word = 'Wikiknihach';
+				} elseif ( $word == 'Wikinowiny' ) {
+					$word = 'Wikinowinach';
+				} elseif ( $word == 'Wikižórło' ) {
+					$word = 'Wikižórłu';
+				} elseif ( $word == 'Wikicitaty' ) {
+					$word = 'Wikicitatach';
+				} elseif ( $word == 'Wikisłownik' ) {
+					$word = 'Wikisłowniku';
+				} else {
+					$word = 'wo ' . $word;
+				}
+				break;
+			}
+		
+		return $word; # this will return the original value for 'nominatiw' (nominativ) and all undefined case values
+	}
+
+	function convertPlural( $count, $singular, $dual, $plural, $pluralgen, $w5 ) {
+		switch ( abs( $count ) % 100 ) {
+			case 1:
+				return $singular;
+			case 2:
+				return $dual;
+			case 3:
+			case 4:
+				return $plural;
+			default:
+				return $pluralgen;
+		}
+	}
+}
Index: /MediaWiki/branches/1.11/languages/classes/LanguageHu.php
===================================================================
--- /MediaWiki/branches/1.11/languages/classes/LanguageHu.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/classes/LanguageHu.php	(revision 1280)
@@ -0,0 +1,52 @@
+<?php
+/**
+  * @addtogroup Language
+  */
+#
+# Hungarian localisation for MediaWiki
+#
+
+class LanguageHu extends Language {
+	function convertGrammar( $word, $case ) {
+		global $wgGrammarForms;
+		if ( isset($wgGrammarForms[$this->getCode()][$case][$word]) ) {
+			return $wgGrammarForms[$this->getCode()][$case][$word];
+		}
+
+		static $localForms = array(
+			'rol' => array(
+				'Wikipédia'   => 'Wikipédiáról',
+				'Wikidézet'   => 'Wikidézetről',
+				'Wikiszótár'  => 'Wikiszótárról',
+				'Wikikönyvek' => 'Wikikönyvekről',
+			),
+			'ba' => array(
+				'Wikipédia'   => 'Wikipédiába',
+				'Wikidézet'   => 'Wikidézetbe',
+				'Wikiszótár'  => 'Wikiszótárba',
+				'Wikikönyvek' => 'Wikikönyvekbe',
+			),
+			'k' => array(
+				'Wikipédia'   => 'Wikipédiák',
+				'Wikidézet'   => 'Wikidézetek',
+				'Wikiszótár'  => 'Wikiszótárak',
+				'Wikikönyvek' => 'Wikikönyvek',
+			)
+		);
+
+		if ( isset( $localForms[$case][$word] ) ) {
+			return $localForms[$case][$word];
+		}
+
+		switch ( $case ) {
+			case 'rol':
+				return $word . 'ról';
+			case 'ba':
+				return $word . 'ba';
+			case 'k':
+				return $word . 'k';
+		}
+	}
+}
+
+?>
Index: /MediaWiki/branches/1.11/languages/classes/LanguageHy.php
===================================================================
--- /MediaWiki/branches/1.11/languages/classes/LanguageHy.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/classes/LanguageHy.php	(revision 1280)
@@ -0,0 +1,73 @@
+<?php
+/** Armenian (Հայերեն)
+  *
+  * @addtogroup Language
+  * @author Ruben Vardanyan (Me@RubenVardanyan.com)
+  */
+
+/* Please, see Language.php for general function comments */
+class LanguageHy extends Language {
+	# Convert from the nominative form of a noun to some other case
+	# Invoked with {{grammar:case|word}}
+	function convertGrammar( $word, $case ) {
+		global $wgGrammarForms;
+		if ( isset($wgGrammarForms['hy'][$case][$word]) ) {
+			return $wgGrammarForms['hy'][$case][$word];
+		}
+
+		# These rules are not perfect, but they are currently only used for site names so it doesn't
+		# matter if they are wrong sometimes. Just add a special case for your site name if necessary.
+
+		#join and array_slice instead mb_substr
+		$ar = array();
+		preg_match_all( '/./us', $word, $ar );
+		if (!preg_match("/[a-zA-Z_]/us", $word))
+			switch ( $case ) {
+				case 'genitive': #սեռական հոլով
+					if (join('',array_slice($ar[0],-1))=='ա')
+						$word = join('',array_slice($ar[0],0,-1)).'այի';
+					elseif (join('',array_slice($ar[0],-1))=='ո')
+						$word=join('',array_slice($ar[0],0,-1)).'ոյի';
+					elseif (join('',array_slice($ar[0],-4))=='գիրք')
+						$word=join('',array_slice($ar[0],0,-4)).'գրքի';
+					else
+						$word.='ի';
+					break;
+				case 'dative':  #Տրական հոլով
+					#stub
+					break;
+				case 'accusative': #Հայցական հոլով
+					#stub
+					break;
+				case 'instrumental':  #
+					#stub
+					break;
+				case 'prepositional': #
+					#stub
+					break;
+			}
+		return $word;
+	}
+
+	function convertPlural( $count, $wordform1, $wordform2) {
+		$count = str_replace (' ', '', $count);
+		if (abs($count) <= 1) {
+			return $wordform1;
+		} else {
+			return $wordform2;
+		}
+	}
+
+	/*
+	 * Armenian numeric format is "12 345,67" but "1234,56"
+	 */
+
+	function commafy($_) {
+		if (!preg_match('/^\d{1,4}$/',$_)) {
+			return strrev((string)preg_replace('/(\d{3})(?=\d)(?!\d*\.)/','$1,',strrev($_)));
+		} else {
+			return $_;
+		}
+	}
+}
+?>
Index: /MediaWiki/branches/1.11/languages/classes/LanguageJa.php
===================================================================
--- /MediaWiki/branches/1.11/languages/classes/LanguageJa.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/classes/LanguageJa.php	(revision 1280)
@@ -0,0 +1,41 @@
+<?php
+/**
+ * Japanese (日本語)
+ *
+ * @addtogroup Language
+ */
+class LanguageJa extends Language {
+	function stripForSearch( $string ) {
+		# MySQL fulltext index doesn't grok utf-8, so we
+		# need to fold cases and convert to hex
+		$s = $string;
+
+		# Strip known punctuation ?
+		#$s = preg_replace( '/\xe3\x80[\x80-\xbf]/', '', $s ); # U3000-303f
+
+		# Space strings of like hiragana/katakana/kanji
+		$hiragana = '(?:\xe3(?:\x81[\x80-\xbf]|\x82[\x80-\x9f]))'; # U3040-309f
+		$katakana = '(?:\xe3(?:\x82[\xa0-\xbf]|\x83[\x80-\xbf]))'; # U30a0-30ff
+		$kanji = '(?:\xe3[\x88-\xbf][\x80-\xbf]'
+			. '|[\xe4-\xe8][\x80-\xbf]{2}'
+			. '|\xe9[\x80-\xa5][\x80-\xbf]'
+			. '|\xe9\xa6[\x80-\x99])';
+			# U3200-9999 = \xe3\x88\x80-\xe9\xa6\x99
+		$s = preg_replace( "/({$hiragana}+|{$katakana}+|{$kanji}+)/", ' $1 ', $s );
+
+		# Double-width roman characters: ff00-ff5f ~= 0020-007f
+		$s = preg_replace( '/\xef\xbc([\x80-\xbf])/e', 'chr((ord("$1") & 0x3f) + 0x20)', $s );
+		$s = preg_replace( '/\xef\xbd([\x80-\x99])/e', 'chr((ord("$1") & 0x3f) + 0x60)', $s );
+
+		# Do general case folding and UTF-8 armoring
+		return parent::stripForSearch( $s );
+	}
+
+	# Italic is not appropriate for Japanese script
+	# Unfortunately most browsers do not recognise this, and render <em> as italic
+	function emphasize( $text ) {
+		return $text;
+	}
+}
+
+?>
Index: /MediaWiki/branches/1.11/languages/classes/LanguageKk.deps.php
===================================================================
--- /MediaWiki/branches/1.11/languages/classes/LanguageKk.deps.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/classes/LanguageKk.deps.php	(revision 1280)
@@ -0,0 +1,12 @@
+<?php
+// This file exists to ensure that base classes are preloaded before
+// LanguageKk.php is compiled, working around a bug in the APC opcode
+// cache on PHP 5, where cached code can break if the include order
+// changed on a subsequent page view.
+// see http://mail.wikipedia.org/pipermail/wikitech-l/2006-January/033660.html
+
+
+require_once( dirname(__FILE__).'/../LanguageConverter.php' );
+require_once( dirname(__FILE__).'/LanguageKk_kz.php' );
+
+?>
Index: /MediaWiki/branches/1.11/languages/classes/LanguageKk.php
===================================================================
--- /MediaWiki/branches/1.11/languages/classes/LanguageKk.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/classes/LanguageKk.php	(revision 1280)
@@ -0,0 +1,226 @@
+<?php
+/** Kazakh (Қазақша)
+  * converter routines
+  *
+  * @addtogroup Language
+  */
+
+require_once( dirname(__FILE__).'/../LanguageConverter.php' );
+require_once( dirname(__FILE__).'/LanguageKk_kz.php' );
+
+class KkConverter extends LanguageConverter {
+	var $mLatinToCyrillic = array(
+		'YA' => 'Я', 'Ya' => 'Я', 'ya' => 'я', 'YE' => 'Е', 'Ye' => 'У', 'ye' => 'е',
+		'YO' => 'Ё', 'Yo' => 'Ё', 'yo' => 'ё', 'YU' => 'Ю', 'Yu' => 'Ю', 'yu' => 'ю',
+		'YW' => 'Ю', 'Yw' => 'Ю', 'yw' => 'ю',
+
+		'bʺ' => 'бъ', 'dʺ' => 'дъ', 'fʺ' => 'фъ', 'gʺ' => 'гъ', 'kʺ' => 'къ', 'lʺ' => 'лъ',
+		'mʺ' => 'мъ', 'nʺ' => 'нъ', 'pʺ' => 'пъ', 'rʺ' => 'ръ', 'sʺ' => 'съ', 'tʺ' => 'тъ',
+		'vʺ' => 'въ', 'zʺ' => 'зъ',
+	 /* 'jʺ' => 'жъ', 'cʺ' => 'цъ', 'çʺ' => 'чъ', 'şʺ' => 'шъ', */
+
+		'ŞÇʹ'=> 'ЩЬ', 'Şçʹ'=> 'Щь',  'Bʺ' => 'БЪ', 'Dʺ' => 'ДЪ', 'Fʺ' => 'ФЪ', 'Gʺ' => 'ГЪ', 'Kʺ' => 'КЪ', 'Lʺ' => 'ЛЪ',
+		'Mʺ' => 'МЪ', 'Nʺ' => 'НЪ', 'Pʺ' => 'ПЪ', 'Rʺ' => 'РЪ', 'Sʺ' => 'СЪ', 'Tʺ' => 'ТЪ',
+		'Vʺ' => 'ВЪ', 'Zʺ' => 'ЗЪ',
+	 /* 'Jʺ' => 'ЖЪ', 'Cʺ' => 'ЦЪ', 'Çʺ' => 'ЧЪ', 'Şʺ' => 'ШЪ', */
+
+		'şçʹ'=> 'щь', 'bʹ' => 'бь', 'dʹ' => 'дь', 'fʹ' => 'фь', 'gʹ' => 'гь', 'kʹ' => 'кь', 'lʹ' => 'ль',
+		'mʹ' => 'мь', 'nʹ' => 'нь', 'pʹ' => 'пь', 'rʹ' => 'рь', 'sʹ' => 'сь', 'tʹ' => 'ть',
+		'vʹ' => 'вь', 'zʹ' => 'зь', 'jʹ' => 'жь', 'cʹ' => 'ць', 'çʹ' => 'чь', 'şʹ' => 'шь',
+
+		'Bʹ' => 'БЬ', 'Dʹ' => 'ДЬ', 'Fʹ' => 'ФЬ', 'Gʹ' => 'ГЬ', 'Kʹ' => 'КЬ', 'Lʹ' => 'ЛЬ',
+		'Mʹ' => 'МЬ', 'Nʹ' => 'НЬ', 'Pʹ' => 'ПЬ', 'Rʹ' => 'РЬ', 'Sʹ' => 'СЬ', 'Tʹ' => 'ТЬ',
+		'Vʹ' => 'ВЬ', 'Zʹ' => 'ЗЬ', 'Jʹ' => 'ЖЬ', 'Cʹ' => 'ЦЬ', 'Çʹ' => 'ЧЬ', 'Şʹ' => 'ШЬ',
+
+		'ŞÇ' => 'Щ', 'Şç' => 'Щ', 'şç' => 'щ',
+
+		'a' => 'а', 'ä' => 'ә', 'b' => 'б', 'c' => 'ц', 'ç' => 'ч', 'd' => 'д', 'e' => 'е',
+		'é' => 'э', 'f' => 'ф', 'g' => 'г', 'ğ' => 'ғ', 'h' => 'һ', 'i' => 'і', 'ı' => 'ы',
+		'ï' => 'и', 'j' => 'ж', 'k' => 'к', 'l' => 'л', 'm' => 'м', 'n' => 'н', 'ñ' => 'ң',
+		'o' => 'о', 'ö' => 'ө', 'p' => 'п', 'q' => 'қ', 'r' => 'р', 's' => 'с', 'ş' => 'ш',
+		't' => 'т', 'u' => 'ұ', 'ü' => 'ү', 'v' => 'в', 'w' => 'у', 'x' => 'х', 'ý' => 'й',
+		'z' => 'з',
+
+		'A' => 'А', 'Ä' => 'Ә', 'B' => 'Б', 'C' => 'Ц', 'Ç' => 'Ч', 'D' => 'Д', 'E' => 'Е',
+		'É' => 'Э', 'F' => 'Ф', 'G' => 'Г', 'Ğ' => 'Ғ', 'H' => 'Һ', 'İ' => 'І', 'I' => 'Ы',
+		'Ï' => 'И', 'J' => 'Ж', 'K' => 'К', 'L' => 'Л', 'M' => 'М', 'N' => 'Н', 'Ñ' => 'Ң',
+		'O' => 'О', 'Ö' => 'Ө', 'P' => 'П', 'Q' => 'Қ', 'R' => 'Р', 'S' => 'С', 'Ş' => 'Ш',
+		'T' => 'Т', 'U' => 'Ұ', 'Ü' => 'Ү', 'V' => 'В', 'W' => 'У', 'Ý' => 'Й', 'X' => 'Х',
+		'Z' => 'З'
+	);
+
+	var $mCyrillicToLatin = array(
+		'а' => 'a',  'ә' => 'ä',  'б' => 'b',  'в' => 'v',  'г' => 'g',  'ғ' => 'ğ',
+		'д' => 'd',  'е' => 'e',  'ё' => 'yo', 'ж' => 'j',  'з' => 'z',  'и' => 'ï',
+		'й' => 'ý',  'к' => 'k',  'қ' => 'q',  'л' => 'l',  'м' => 'm',  'н' => 'n',
+		'ң' => 'ñ',  'о' => 'o',  'ө' => 'ö',  'п' => 'p',  'р' => 'r',  'с' => 's',
+		'т' => 't',  'у' => 'w',  'ұ' => 'u',  'ү' => 'ü',  'ф' => 'f',  'х' => 'x',
+		'һ' => 'h',  'ц' => 'c',  'ч' => 'ç',  'ш' => 'ş',  'щ' => 'şç', 'ъ' => 'ʺ',
+		'ы' => 'ı',  'ь' => 'ʹ',  'і' => 'i',  'э' => 'é',  'ю' => 'yw', 'я' => 'ya',
+
+		'А' => 'A',  'Ә' => 'Ä',  'Б' => 'B',  'В' => 'V',  'Г' => 'G',  'Ғ' => 'Ğ',
+		'Д' => 'D',  'Е' => 'E',  'Ё' => 'Yo', 'Ж' => 'J',  'З' => 'Z',  'И' => 'Ï',
+		'Й' => 'Ý',  'К' => 'K',  'Қ' => 'Q',  'Л' => 'L',  'М' => 'M',  'Н' => 'N',
+		'Ң' => 'Ñ',  'О' => 'O',  'Ө' => 'Ö',  'П' => 'P',  'Р' => 'R',  'С' => 'S',
+		'Т' => 'T',  'У' => 'W',  'Ұ' => 'U',  'Ү' => 'Ü',  'Ф' => 'F',  'Х' => 'X',
+		'Һ' => 'H',  'Ц' => 'C',  'Ч' => 'Ç',  'Ш' => 'Ş',  'Щ' => 'Şç', 'Ъ' => 'ʺ',
+		'Ы' => 'I',  'Ь' => 'ʹ',  'І' => 'İ',  'Э' => 'É',  'Ю' => 'Yw', 'Я' => 'Ya'
+	);
+
+	var $mCyrillicToArabic = array(
+		'ла' => 'لا',  'лА' => 'لا',  'ЛА' => 'لا',  'Ла' => 'لا',
+
+		'а' => 'ا',  'ә' => 'ٵ',  'б' => 'ب',  'в' => 'ۆ',  'г' => 'گ',  'ғ' => 'ع',
+		'д' => 'د',  'е' => 'ە',  'ё' => 'يو', 'ж' => 'ج',  'з' => 'ز',  'и' => 'ي',
+		'й' => 'ي',  'к' => 'ك',  'қ' => 'ق',  'л' => 'ل',  'м' => 'م',  'н' => 'ن',
+		'ң' => 'ڭ',  'о' => 'و',  'ө' => 'ٶ',  'п' => 'پ',  'р' => 'ر',  'с' => 'س',
+		'т' => 'ت',  'у' => 'ۋ',  'ұ' => 'ۇ',  'ү' => 'ٷ',  'ф' => 'ف',  'х' => 'ح',
+		'һ' => 'ھ',  'ц' => 'تس',  'ч' => 'چ',  'ш' => 'ش',  'щ' => 'شش', 'ъ' => 'ي',
+		'ы' => 'ى',  'ь' => 'ي',  'і' => 'ٸ',  'э' => 'ە',  'ю' => 'يۋ', 'я' => 'يا',
+
+		'А' => 'ا',  'Ә' => 'ٵ',  'Б' => 'ب',  'В' => 'ۆ',  'Г' => 'گ',  'Ғ' => 'ع',
+		'Д' => 'د',  'Е' => 'ە',  'Ё' => 'يو',  'Ж' => 'ج',  'З' => 'ز',  'И' => 'ي',
+		'Й' => 'ي',  'К' => 'ك',  'Қ' => 'ق',  'Л' => 'ل',  'М' => 'م',  'Н' => 'ن',
+		'Ң' => 'ڭ',  'О' => 'و',  'Ө' => 'ٶ',  'П' => 'پ',  'Р' => 'ر',  'С' => 'س',
+		'Т' => 'ت',  'У' => 'ۋ',  'Ұ' => 'ۇ',  'Ү' => 'ٷ',  'Ф' => 'ف',  'Х' => 'ح',
+		'Һ' => 'ھ',  'Ц' => 'تس',  'Ч' => 'چ',  'Ш' => 'ش',  'Щ' => 'شش', 'Ъ' => 'ي',
+		'Ы' => 'ى',  'Ь' => 'ي',  'І' => 'ٸ',  'Э' => 'ە',  'Ю' => 'يۋ', 'Я' => 'يا',
+
+		'?' => '؟',
+		'%' => '٪',
+		',' => '،',
+		';' => '؛'
+	);
+
+	function loadDefaultTables() {
+		$this->mTables = array(
+			'kk-kz' => new ReplacementArray( $this->mLatinToCyrillic ),
+			'kk-tr' => new ReplacementArray( $this->mCyrillicToLatin ),
+			'kk-cn' => new ReplacementArray( $this->mCyrillicToArabic ),
+			'kk'    => new ReplacementArray()
+		);
+	}
+
+
+	// Do not convert content on talk pages
+	function parserConvert( $text, &$parser ){
+		if(is_object($parser->getTitle() ) && $parser->getTitle()->isTalkPage())
+			$this->mDoContentConvert=false;
+		else 
+			$this->mDoContentConvert=true;
+
+		return parent::parserConvert($text, $parser );
+	}
+
+	/*
+	 * A function wrapper:
+	 *   - if there is no selected variant, leave the link 
+	 *     names as they were
+	 *   - do not try to find variants for usernames
+	 */
+	function findVariantLink( &$link, &$nt ) {
+		// check for user namespace
+		if(is_object($nt)){
+			$ns = $nt->getNamespace();
+			if($ns==NS_USER || $ns==NS_USER_TALK)
+				return;
+		}
+
+		$oldlink=$link;
+		parent::findVariantLink($link,$nt);
+		if($this->getPreferredVariant()==$this->mMainLanguageCode)
+			$link=$oldlink;
+	}
+
+	/*
+	 * We want our external link captions to be converted in variants,
+	 * so we return the original text instead -{$text}-, except for URLs
+	 */
+	function markNoConversion($text, $noParse=false) {
+		if($noParse || preg_match("/^https?:\/\/|ftp:\/\/|irc:\/\//",$text))
+		    return parent::markNoConversion($text);
+		return $text;
+	}
+
+	/*
+	 * An ugly function wrapper for parsing Image titles
+	 * (to prevent image name conversion)
+	 */
+	function autoConvert($text, $toVariant=false) {
+		global $wgTitle;
+		if(is_object($wgTitle) && $wgTitle->getNameSpace()==NS_IMAGE){ 
+			$imagename = $wgTitle->getNsText();
+			if(preg_match("/^$imagename:/",$text)) return $text;
+		}
+		return parent::autoConvert($text,$toVariant);
+	}
+
+	/**
+	 *  It translates text into variant, specials:
+	 *    - ommiting roman numbers
+	 */
+	function translate($text, $toVariant){
+		$breaks = '[^\w\x80-\xff]';
+
+		// regexp for roman numbers
+		$roman = 'M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})';
+
+		$reg = '/^'.$roman.'$|^'.$roman.$breaks.'|'.$breaks.$roman.'$|'.$breaks.$roman.$breaks.'/';
+
+		$matches = preg_split($reg, $text, -1, PREG_SPLIT_OFFSET_CAPTURE);
+
+		$m = array_shift($matches);
+		if( !isset( $this->mTables[$toVariant] ) ) {
+			throw new MWException( "Broken variant table: " . implode( ',', array_keys( $this->mTables ) ) );
+		}
+		$ret = $this->mTables[$toVariant]->replace( $m[0] );
+		$mstart = $m[1]+strlen($m[0]);
+		foreach($matches as $m) {
+			$ret .= substr($text, $mstart, $m[1]-$mstart);
+			$ret .= parent::translate($m[0], $toVariant);
+			$mstart = $m[1] + strlen($m[0]);
+		}
+
+		return $ret;
+	}
+
+}
+
+class LanguageKk extends LanguageKk_kz {
+
+	function __construct() {
+		global $wgHooks;
+		parent::__construct();
+
+		$variants = array( 'kk', 'kk-kz', 'kk-tr', 'kk-cn' );
+		$variantfallbacks = array(
+			'kk'    => 'kk-kz',
+			'kk-kz' => 'kk-kz',
+			'kk-tr' => 'kk-tr',
+			'kk-cn' => 'kk-cn'
+		);
+
+		$this->mConverter = new KkConverter( $this, 'kk', $variants, $variantfallbacks );
+		$wgHooks['ArticleSaveComplete'][] = $this->mConverter;
+	}
+
+	function convertGrammar( $word, $case ) {
+		$fname="LanguageKk::convertGrammar";
+		wfProfileIn( $fname );
+
+		//always convert to kk-kz before convertGrammar
+		$w1 = $word;
+		$word = $this->mConverter->autoConvert( $word, 'kk-kz' );
+		$w2 = $word;
+		$word = parent::convertGrammar( $word, $case );
+		//restore encoding
+		if( $w1 != $w2 ) {
+			$word = $this->mConverter->translate( $word, 'kk-tr' );
+		}
+		wfProfileOut( $fname );
+		return $word;
+	}
+
+}
+
+?>
Index: /MediaWiki/branches/1.11/languages/classes/LanguageKk_kz.php
===================================================================
--- /MediaWiki/branches/1.11/languages/classes/LanguageKk_kz.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/classes/LanguageKk_kz.php	(revision 1280)
@@ -0,0 +1,268 @@
+<?php
+/** Kazakh (Қазақша)
+  *
+  *
+  * @addtogroup Language
+  */
+
+
+class LanguageKk_kz extends Language {
+
+ 	# Convert from the nominative form of a noun to some other case
+	# Invoked with {{GRAMMAR:case|word}}
+	/**
+	 * Cases: genitive, dative, accusative, locative, ablative, comitative + possessive forms
+	 */
+	function convertGrammar( $word, $case ) {
+		global $wgGrammarForms;
+		if ( isset( $wgGrammarForms['kk'][$case][$word] ) ) {
+			return $wgGrammarForms['kk'][$case][$word];
+		}
+		// Set up some constants...
+    // Vowels in last syllable
+		$frontVowels = array( "е", "ө", "ү", "і", "ә", "э" );
+		$backVowels = array( "а", "о", "ұ", "ы", "я", "ё" );
+    $allVowels = array( "е", "ө", "ү", "і", "ә", "э", "а", "о", "ұ", "ы", "я", "ё" );
+    // Preceding letters
+		$preVowels = $allVowels;
+		$preNasals = array( "м", "н", "ң" );
+    $preSonants = array( "и", "й", "л", "р", "у", "ю");
+		# $preVoiceds = array( "б", "в", "г", "ғ", "д", "ж", "з", "һ" );
+		# $preVoicelesses = array( "п", "ф", "к", "қ", "т", "ш", "с", "х", "ц", "ч", "щ" );
+		$preConsonants = array( "п", "ф", "к", "қ", "т", "ш", "с", "х", "ц", "ч", "щ", "б", "в", "г", "д" );
+		$preEzhZet = array( "ж", "з" );
+    $preSonorants = array( "и", "й", "л", "р", "у", "ю", "м", "н", "ң", "ж", "з");
+
+    // Possessives
+    $firsts = array( "м", "ң" ); // 1st singular, 2nd unformal
+    $seconds = array( "з" );     // 1st plural, 2nd formal
+    $thirds = array( "ы", "і" ); // 3rd
+
+		// Put the word in a form we can play with since we're using UTF-8
+    $ar = array();
+    $ar = preg_split('//u', $word, -1, PREG_SPLIT_NO_EMPTY);
+		$wordEnding = $ar[count( $ar ) - 1]; //Here's the last letter in the word
+		$wordReversed = array_reverse( $ar ); //Here's an array with the order of the letters in the word reversed so we can find a match quicker *shrug*
+
+		// Find the last vowel in the word
+		$wordLastVowel = NULL;
+		foreach ( $wordReversed as $xvalue ) {
+			foreach ( $allVowels as $yvalue ) {
+				if ( strcmp( $xvalue, $yvalue ) == 0 ) {
+					$wordLastVowel = $xvalue;
+					break;
+				} else {
+					continue;
+				}
+			}
+			if ( $wordLastVowel !== NULL ) {
+				break;
+			} else {
+				continue;
+			}
+		}
+
+		// Now convert the word
+		switch ( $case ) {
+			case "dc1":
+			case "genitive": #ilik
+				if ( in_array( $wordEnding, $preConsonants ) ) {
+					if ( in_array( $wordLastVowel, $frontVowels ) ) {
+						$word = implode( "", $ar ) . "тің";
+					} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
+						$word = implode( "", $ar ) . "тың";
+					}
+				} elseif ( in_array( $wordEnding, $preVowels ) || in_array( $wordEnding, $preNasals ) ) {
+					if ( in_array( $wordLastVowel, $frontVowels ) ) {
+						$word = implode( "", $ar ) . "нің";
+					} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
+						$word = implode( "", $ar ) . "ның";
+					}
+				} elseif ( in_array( $wordEnding, $preSonants ) || in_array( $wordEnding, $preEzhZet )) {
+					if ( in_array( $wordLastVowel, $frontVowels ) ) {
+						$word = implode( "", $ar ) . "дің";
+					} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
+						$word = implode( "", $ar ) . "дың";
+					}
+				}
+				break;
+			case "dc2":
+			case "dative": #barıs
+				if ( in_array( $wordEnding, $preConsonants ) ) {
+					if ( in_array( $wordLastVowel, $frontVowels ) ) {
+						$word = implode( "", $ar ) . "ке";
+					} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
+						$word = implode( "", $ar ) . "қа";
+					}
+				} elseif ( in_array( $wordEnding, $preVowels ) || in_array( $wordEnding, $preSonorants ) ) {
+					if ( in_array( $wordLastVowel, $frontVowels ) ) {
+						$word = implode( "", $ar ) . "ге";
+					} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
+						$word = implode( "", $ar ) . "ға";
+					}
+        }
+				break;
+			case "dc21":
+			case "possessive dative": #täweldık + barıs
+				if ( in_array( $wordEnding, $firsts ) ) {
+					if ( in_array( $wordLastVowel, $frontVowels ) ) {
+						$word = implode( "", $ar ) . "е";
+					} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
+						$word = implode( "", $ar ) . "а";
+					}
+				} elseif ( in_array( $wordEnding, $seconds ) ) {
+					if ( in_array( $wordLastVowel, $frontVowels ) ) {
+						$word = implode( "", $ar ) . "ге";
+					} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
+						$word = implode( "", $ar ) . "ға";
+					}
+    		} elseif ( in_array( $wordEnding, $thirds ) ) {
+				  if ( in_array( $wordLastVowel, $frontVowels ) ) {
+						$word = implode( "", $ar ) . "не";
+					} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
+						$word = implode( "", $ar ) . "на";
+					}
+				}
+				break;
+			case "dc3":
+			case "accusative": #tabıs
+				if ( in_array( $wordEnding, $preConsonants ) ) {
+					if ( in_array( $wordLastVowel, $frontVowels ) ) {
+						$word = implode( "", $ar ) . "ті";
+					} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
+						$word = implode( "", $ar ) . "ты";
+					}
+				} elseif ( in_array( $wordEnding, $preVowels ) ) {
+					if ( in_array($wordLastVowel, $frontVowels ) ) {
+						$word = implode( "", $ar ) . "ні";
+					} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
+						$word = implode( "", $ar ) . "ны";
+					}
+				} elseif ( in_array( $wordEnding, $preSonorants) ) {
+					if ( in_array( $wordLastVowel, $frontVowels) ) {
+						$word = implode( "", $ar ) . "ді";
+					} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
+						$word = implode( "", $ar ) . "ды";
+					}
+				}
+				break;
+			case "dc31":
+			case "possessive accusative": #täweldık + tabıs
+				if ( in_array( $wordEnding, $firsts ) || in_array( $wordEnding, $seconds ) ) {
+					if ( in_array( $wordLastVowel, $frontVowels ) ) {
+						$word = implode( "", $ar ) . "ді";
+					} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
+						$word = implode( "", $ar ) . "ды";
+					}
+				} elseif ( in_array( $wordEnding, $thirds ) ) {
+						$word = implode( "", $ar ) . "н";
+				}
+				break;
+			case "dc4":
+			case "locative": #jatıs
+				if ( in_array( $wordEnding, $preConsonants ) ) {
+					if ( in_array( $wordLastVowel, $frontVowels ) ) {
+						$word = implode( "", $ar ) . "те";
+					} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
+						$word = implode( "", $ar ) . "та";
+					}
+				} elseif ( in_array( $wordEnding, $preVowels ) || in_array( $wordEnding, $preSonorants ) ) {
+					if ( in_array( $wordLastVowel, $frontVowels) ) {
+						$word = implode( "", $ar ) . "де";
+					} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
+						$word = implode( "",$ar ) . "да";
+					}
+				} 
+				break;
+			case "dc41":
+			case "possessive locative": #täweldık + jatıs
+				if ( in_array( $wordEnding, $firsts ) || in_array( $wordEnding, $seconds ) ) {
+					if ( in_array( $wordLastVowel, $frontVowels ) ) {
+						$word = implode( "", $ar ) . "де";
+					} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
+						$word = implode( "", $ar ) . "да";
+					}
+				} elseif ( in_array( $wordEnding, $thirds ) ) {
+					if ( in_array( $wordLastVowel, $frontVowels) ) {
+						$word = implode( "", $ar ) . "нде";
+					} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
+						$word = implode( "",$ar ) . "нда";
+					}
+				} 
+				break;
+			case "dc5":
+			case "ablative": #şığıs
+				if ( in_array( $wordEnding, $preConsonants ) ) {
+					if ( in_array( $wordLastVowel, $frontVowels ) ) {
+						$word = implode( "", $ar ) . "тен";
+					} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
+						$word = implode( "", $ar ) . "тан";
+					}
+				} elseif ( in_array($wordEnding, $preVowels ) || in_array($wordEnding, $preSonants ) || in_array($wordEnding, $preEzhZet ) ) {
+					if ( in_array( $wordLastVowel, $frontVowels ) ) {
+						$word = implode( "", $ar ) . "ден";
+					} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
+						$word = implode( "", $ar ) . "дан";
+					}
+				}  elseif ( in_array($wordEnding, $preNasals ) ) {
+					if ( in_array( $wordLastVowel, $frontVowels ) ) {
+						$word = implode( "", $ar ) . "нен";
+					} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
+						$word = implode( "", $ar ) . "нан";
+					}
+				}
+				break;
+			case "dc51":
+			case "possessive ablative": #täweldık + şığıs
+				if ( in_array( $wordEnding, $firsts ) || in_array( $wordEnding, $thirds ) ) {
+					if ( in_array( $wordLastVowel, $frontVowels ) ) {
+						$word = implode( "", $ar ) . "нен";
+					} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
+						$word = implode( "", $ar ) . "нан";
+					}
+				} elseif ( in_array($wordEnding, $seconds ) ) {
+					if ( in_array( $wordLastVowel, $frontVowels ) ) {
+						$word = implode( "", $ar ) . "ден";
+					} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
+						$word = implode( "", $ar ) . "дан";
+					}
+				}
+				break;
+			case "dc6":
+			case "comitative": #kömektes
+				if ( in_array( $wordEnding, $preConsonants ) ) {
+						$word = implode( "", $ar ) . "пен";
+				} elseif ( in_array( $wordEnding, $preVowels ) || in_array( $wordEnding, $preNasals ) || in_array( $wordEnding, $preSonants ) ) {
+						$word = implode( "", $ar ) . "мен";
+				} elseif ( in_array( $wordEnding, $preEzhZet ) ) {
+						$word = implode( "", $ar ) . "бен";
+				}
+				break;
+			case "dc61":
+			case "possessive comitative": #täweldık + kömektes
+				if ( in_array( $wordEnding, $preConsonants ) ) {
+						$word = implode( "", $ar ) . "пенен";
+				} elseif ( in_array( $wordEnding, $preVowels ) || in_array( $wordEnding, $preNasals ) || in_array( $wordEnding, $preSonants ) ) {
+						$word = implode( "", $ar ) . "менен";
+				} elseif ( in_array( $wordEnding, $preEzhZet ) ) {
+						$word = implode( "", $ar ) . "бенен";
+				}
+				break;
+			default: #dc0 #nominative #ataw
+		}
+		return $word;
+	}
+
+	/**
+	 * Avoid grouping whole numbers between 0 to 9999
+	 */
+	function commafy( $_ ) {
+		if ( !preg_match( '/^\d{1,4}$/', $_ ) ) {
+			return strrev( (string)preg_replace( '/(\d{3})(?=\d)(?!\d*\.)/', '$1,', strrev($_) ) );
+		} else {
+			return $_;
+		}
+	}
+}
+
+?>
Index: /MediaWiki/branches/1.11/languages/classes/LanguageKo.php
===================================================================
--- /MediaWiki/branches/1.11/languages/classes/LanguageKo.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/classes/LanguageKo.php	(revision 1280)
@@ -0,0 +1,57 @@
+<?php
+/** Korean (한국어)
+  *
+  * @addtogroup Language
+  */
+
+class LanguageKo extends Language {
+	function firstChar( $s ) {
+		$matches = array();
+		preg_match( '/^([\x00-\x7f]|[\xc0-\xdf][\x80-\xbf]|' .
+		'[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xf7][\x80-\xbf]{3})/', $s, $matches);
+
+		if ( isset( $matches[1] ) ) {
+			if ( strlen( $matches[1] ) != 3 ) {
+				return $matches[1];
+			}
+			$code = (ord($matches[1]{0}) & 0x0f) << 12;
+			$code |= (ord($matches[1]{1}) & 0x3f) << 6;
+			$code |= (ord($matches[1]{2}) & 0x3f);
+			if ( $code < 0xac00 || 0xd7a4 <= $code) {
+				return $matches[1];
+			} elseif ( $code < 0xb098 ) {
+				return "\xe3\x84\xb1";
+			} elseif ( $code < 0xb2e4 ) {
+				return "\xe3\x84\xb4";
+			} elseif ( $code < 0xb77c ) {
+				return "\xe3\x84\xb7";
+			} elseif ( $code < 0xb9c8 ) {
+				return "\xe3\x84\xb9";
+			} elseif ( $code < 0xbc14 ) {
+				return "\xe3\x85\x81";
+			} elseif ( $code < 0xc0ac ) {
+				return "\xe3\x85\x82";
+			} elseif ( $code < 0xc544 ) {
+				return "\xe3\x85\x85";
+			} elseif ( $code < 0xc790 ) {
+				return "\xe3\x85\x87";
+			} elseif ( $code < 0xcc28 ) {
+				return "\xe3\x85\x88";
+			} elseif ( $code < 0xce74 ) {
+				return "\xe3\x85\x8a";
+			} elseif ( $code < 0xd0c0 ) {
+				return "\xe3\x85\x8b";
+			} elseif ( $code < 0xd30c ) {
+				return "\xe3\x85\x8c";
+			} elseif ( $code < 0xd558 ) {
+				return "\xe3\x85\x8d";
+			} else {
+				return "\xe3\x85\x8e";
+			}
+		} else {
+			return "";
+		}
+	}
+}
+
+?>
Index: /MediaWiki/branches/1.11/languages/classes/LanguageKsh.php
===================================================================
--- /MediaWiki/branches/1.11/languages/classes/LanguageKsh.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/classes/LanguageKsh.php	(revision 1280)
@@ -0,0 +1,35 @@
+<?php
+/** Ripuarian (Ripoarėsh)
+ *
+ * @addtogroup Language
+ *
+ * @author Purodha Blissenbach
+ */
+
+class LanguageKsh extends Language {
+	/**
+	 * Avoid grouping whole numbers between 0 to 9999
+	 */
+	public function commafy( $_ ) {
+		if ( !preg_match( '/^\d{1,4}$/', $_ ) ) {
+			return strrev( (string)preg_replace( '/(\d{3})(?=\d)(?!\d*\.)/', '$1,', strrev( $_ ) ) );
+		} else {
+			return $_;
+		}
+	}
+
+	/**
+	 * Handle cases of (1, other, 0) or (1, other)
+	 */
+	public function convertPlural( $count, $w1, $w2, $w3, $w4, $w5 ) {
+		$count = str_replace (' ', '', $count);
+		if ( $count == '1' ) {
+			return $w1;
+		} elseif ( $count == '0' && $w3 ) {
+			return $w3;
+		} else {
+			return $w2;
+		}
+	}
+}
+?>
Index: /MediaWiki/branches/1.11/languages/classes/LanguageLa.php
===================================================================
--- /MediaWiki/branches/1.11/languages/classes/LanguageLa.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/classes/LanguageLa.php	(revision 1280)
@@ -0,0 +1,82 @@
+<?php
+/** Latin (lingua Latina)
+  *
+  * @addtogroup Language
+  */
+
+class LanguageLa extends Language {
+	/**
+	 * Convert from the nominative form of a noun to some other case
+	 *
+	 * Just used in a couple places for sitenames; special-case as necessary.
+	 * Rules are far from complete.
+	 *
+	 * Cases: genitive, accusative, ablative
+	 */
+	function convertGrammar( $word, $case ) {
+		global $wgGrammarForms;
+		if ( isset($wgGrammarForms['la'][$case][$word]) ) {
+			return $wgGrammarForms['la'][$case][$word];
+		}
+
+		switch ( $case ) {
+		case 'genitive':
+			// only a few declensions, and even for those mostly the singular only
+			$in  = array(	'/u[ms]$/',                	# 2nd declension singular
+					'/ommunia$/',              	# 3rd declension neuter plural (partly)
+					'/a$/',                    	# 1st declension singular
+					'/libri$/', '/nuntii$/',   	# 2nd declension plural (partly)
+					'/tio$/', '/ns$/', '/as$/',	# 3rd declension singular (partly)
+					'/es$/'                    	# 5th declension singular
+					);
+			$out = array(	'i',
+					'ommunium',
+					'ae',
+					'librorum', 'nuntiorum',
+					'tionis', 'ntis', 'atis',
+					'ei'
+					);
+			return preg_replace( $in, $out, $word );
+		case 'accusative':
+			// only a few declensions, and even for those mostly the singular only
+			$in  = array(	'/u[ms]$/',                	# 2nd declension singular
+					'/a$/',                    	# 1st declension singular
+					'/ommuniam$/',              	# 3rd declension neuter plural (partly)
+					'/libri$/', '/nuntii$/',   	# 2nd declension plural (partly)
+					'/tio$/', '/ns$/', '/as$/',	# 3rd declension singular (partly)
+					'/es$/'                    	# 5th declension singular
+					);
+			$out = array(	'um',
+					'am',
+					'ommunia',
+					'libros', 'nuntios',
+					'tionem', 'ntem', 'atem',
+					'em'
+					);
+			return preg_replace( $in, $out, $word );
+		case 'ablative':
+			// only a few declensions, and even for those mostly the singular only
+			$in  = array(	'/u[ms]$/',                	# 2nd declension singular
+					'/ommunia$/',              	# 3rd declension neuter plural (partly)
+					'/a$/',                    	# 1st declension singular
+					'/libri$/', '/nuntii$/',   	# 2nd declension plural (partly)
+					'/tio$/', '/ns$/', '/as$/',	# 3rd declension singular (partly)
+					'/es$/'                    	# 5th declension singular
+					);
+			$out = array(	'o',
+					'ommunibus',
+					'a',
+					'libris', 'nuntiis',
+					'tione', 'nte', 'ate',
+					'e'
+					);
+			return preg_replace( $in, $out, $word );
+		default:
+			return $word;
+		}
+	}
+
+}
+
+
+?>
Index: /MediaWiki/branches/1.11/languages/classes/LanguageLt.php
===================================================================
--- /MediaWiki/branches/1.11/languages/classes/LanguageLt.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/classes/LanguageLt.php	(revision 1280)
@@ -0,0 +1,21 @@
+<?php
+/** Lithuanian (Lietuvių)
+ *
+ * @addtogroup Language
+ *
+ */
+
+class LanguageLt extends Language {
+	/* Word forms (with examples):
+		1 - vienas (1) lapas, dvidešimt vienas (21) lapas
+		2 - trys (3) lapai
+		3 - penkiolika (15) lapų
+	*/
+	function convertPlural( $count, $wordform1, $wordform2, $wordform3, $w4, $w5) {
+		if ($count%10==1 && $count%100!=11) return $wordform1;
+		if ($count%10>=2 && ($count%100<10 || $count%100>=20)) return $wordform2;
+		//if third form not specified, then use second form
+		return empty($wordform3)?$wordform2:$wordform3;
+	}
+}
+?>
Index: /MediaWiki/branches/1.11/languages/classes/LanguageLv.php
===================================================================
--- /MediaWiki/branches/1.11/languages/classes/LanguageLv.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/classes/LanguageLv.php	(revision 1280)
@@ -0,0 +1,56 @@
+<?php
+/** Latvian (Latviešu)
+ *
+ * @addtogroup Language
+ *
+ * @author Niklas Laxström
+ *
+ * @copyright Copyright © 2006, Niklas Laxström
+ * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
+ */
+
+class LanguageLv extends Language {
+	/**
+	 * Plural form transformations. Using the first form for words with the last digit 1, but not for words with the last digits 11, and the second form for all the others.
+	 *
+	 * Example: {{plural:{{NUMBEROFARTICLES}}|article|articles}}
+	 *
+	 * @param integer $count
+	 * @param string $wordform1
+	 * @param string $wordform2
+	 * @param string $wordform3 (not used)
+	 * @return string
+	 */
+	function convertPlural( $count, $wordform1, $wordform2, $wordform3, $w4, $w5 ) {
+		return ( ( $count % 10 == 1 ) && ( $count % 100 != 11 ) ) ? $wordform1 : $wordform2;
+	}
+
+	# Convert from the nominative form of a noun to some other case
+	# Invoked with {{GRAMMAR:case|word}}
+	# ģenitīvs - kā, datīvs - kam, akuzatīvs - ko, lokatīvs - kur.
+	/**
+	 * Cases: ģenitīvs, datīvs, akuzatīvs, lokatīvs
+	 */
+	function convertGrammar( $word, $case ) {
+		global $wgGrammarForms;
+
+		$wgGrammarForms['lv']['ģenitīvs' ]['Vikipēdija']   = 'Vikipēdijas';
+		$wgGrammarForms['lv']['ģenitīvs' ]['Vikivārdnīca'] = 'Vikivārdnīcas';
+		$wgGrammarForms['lv']['datīvs'   ]['Vikipēdija']   = 'Vikipēdijai';
+		$wgGrammarForms['lv']['datīvs'   ]['Vikivārdnīca'] = 'Vikivārdnīcai';
+		$wgGrammarForms['lv']['akuzatīvs']['Vikipēdija']   = 'Vikipēdiju';
+		$wgGrammarForms['lv']['akuzatīvs']['Vikivārdnīca'] = 'Vikivārdnīcu';
+		$wgGrammarForms['lv']['lokatīvs' ]['Vikipēdija']   = 'Vikipēdijā';
+		$wgGrammarForms['lv']['lokatīvs' ]['Vikivārdnīca'] = 'Vikivārdnīcā';
+	
+		if ( isset($wgGrammarForms['lv'][$case][$word]) ) {
+			return $wgGrammarForms['lv'][$case][$word];
+		}
+
+		return $word;
+
+	}
+
+}
+
+?>
Index: /MediaWiki/branches/1.11/languages/classes/LanguagePt_br.php
===================================================================
--- /MediaWiki/branches/1.11/languages/classes/LanguagePt_br.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/classes/LanguagePt_br.php	(revision 1280)
@@ -0,0 +1,16 @@
+<?php
+/** Brazilian Portugese (Portuguêsi do Brasil)
+ *
+ * @addtogroup Language
+ *
+ */
+
+class LanguagePt_br extends Language {
+	/**
+	 * Use singular form for zero (see bug 7309)
+	 */
+        function convertPlural( $count, $w1, $w2, $w3, $w4, $w5) {
+		return $count <= '1' ? $w1 : $w2;
+        }
+}
+?>
Index: /MediaWiki/branches/1.11/languages/classes/LanguageRmy.php
===================================================================
--- /MediaWiki/branches/1.11/languages/classes/LanguageRmy.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/classes/LanguageRmy.php	(revision 1280)
@@ -0,0 +1,72 @@
+<?php
+
+class LanguageRmy extends Language {
+	/**
+	 * Convert from the nominative form of a noun to some other case
+	 * Invoked with {{GRAMMAR:case|word}}
+	 *
+	 * Cases: nominative, genitive-m-sg, genitive-f-sg, dative, locative, ablative, instrumental
+	 */
+	public function convertGrammar( $word, $case ) {
+		global $wgGrammarForms;
+		if ( isset($wgGrammarForms['rmy'][$case][$word]) ) {
+			return $wgGrammarForms['rmy'][$case][$word];
+		}
+
+		switch ( $case ) {
+			case 'genitive-m-sg': # genitive (m.sg.)
+				if ( $word == 'Vikipidiya' ) {
+					$word = 'Vikipidiyako';
+				} elseif ( $word == 'Vikcyonaro' ) {
+					$word = 'Vikcyonaresko';
+				}
+			break;
+			case 'genitive-f-sg': # genitive (f.sg.)
+				if ( $word == 'Vikipidiya' ) {
+					$word = 'Vikipidiyaki';
+				} elseif ( $word == 'Vikcyonaro' ) {
+					$word = 'Vikcyonareski';
+				}
+			break;
+			case 'genitive-pl': # genitive (pl.)
+				if ( $word == 'Vikipidiya' ) {
+					$word = 'Vikipidiyake';
+				} elseif ( $word == 'Vikcyonaro' ) {
+					$word = 'Vikcyonareske';
+				}
+			break;
+			case 'dativ':
+				if ( $word == 'Vikipidiyake' ) {
+					$word = 'Wikipediji';
+				} elseif ( $word == 'Vikcyonaro' ) {
+					$word = 'Vikcyonareske';
+				}
+			break;
+			case 'locative':
+				if ( $word == 'Vikipidiyate' ) {
+					$word = 'Wikipedijo';
+				} elseif ( $word == 'Vikcyonaro' ) {
+					$word = 'Vikcyonareste';
+				}
+			break;
+			case 'ablative':
+				if ( $word == 'Vikipidiyatar' ) {
+					$word = 'o Wikipediji';
+				} elseif ( $word == 'Vikcyonaro' ) {
+					$word = 'Vikcyonarestar';
+				}
+			break;
+			case 'instrumental':
+				if ( $word == 'Vikipidiyasa' ) {
+					$word = 'z Wikipedijo';
+				} elseif ( $word == 'Vikcyonaro' ) {
+					$word = 'Vikcyonaresa';
+				}
+			break;
+		}
+
+		return $word; # this will return the original value for 'nominative' and all undefined case values
+	}
+}
+
+?>
Index: /MediaWiki/branches/1.11/languages/classes/LanguageRu.php
===================================================================
--- /MediaWiki/branches/1.11/languages/classes/LanguageRu.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/classes/LanguageRu.php	(revision 1280)
@@ -0,0 +1,86 @@
+<?php
+/** Russian (русский язык)
+  *
+  * You can contact Alexander Sigachov (alexander.sigachov at Googgle Mail)
+  *
+  * @addtogroup Language
+  */
+
+/* Please, see Language.php for general function comments */
+class LanguageRu extends Language {
+	# Convert from the nominative form of a noun to some other case
+	# Invoked with {{grammar:case|word}}
+	function convertGrammar( $word, $case ) {
+		global $wgGrammarForms;
+		if ( isset($wgGrammarForms['ru'][$case][$word]) ) {
+			return $wgGrammarForms['ru'][$case][$word];
+		}
+
+		# These rules are not perfect, but they are currently only used for site names so it doesn't
+		# matter if they are wrong sometimes. Just add a special case for your site name if necessary.
+
+		#join and array_slice instead mb_substr
+		$ar = array();
+		preg_match_all( '/./us', $word, $ar );
+		if (!preg_match("/[a-zA-Z_]/us", $word))
+			switch ( $case ) {
+				case 'genitive': #родительный падеж
+					if ((join('',array_slice($ar[0],-4))=='вики') || (join('',array_slice($ar[0],-4))=='Вики'))
+						{}
+					elseif (join('',array_slice($ar[0],-1))=='ь')
+						$word = join('',array_slice($ar[0],0,-1)).'я';
+					elseif (join('',array_slice($ar[0],-2))=='ия')
+						$word=join('',array_slice($ar[0],0,-2)).'ии';
+					elseif (join('',array_slice($ar[0],-2))=='ка')
+						$word=join('',array_slice($ar[0],0,-2)).'ки';
+					elseif (join('',array_slice($ar[0],-2))=='ти')
+						$word=join('',array_slice($ar[0],0,-2)).'тей';
+					elseif (join('',array_slice($ar[0],-2))=='ды')
+						$word=join('',array_slice($ar[0],0,-2)).'дов';
+					elseif (join('',array_slice($ar[0],-3))=='ник')
+						$word=join('',array_slice($ar[0],0,-3)).'ника';
+					break;
+				case 'dative':  #дательный падеж
+					#stub
+					break;
+				case 'accusative': #винительный падеж
+					#stub
+					break;
+				case 'instrumental':  #творительный падеж
+					#stub
+					break;
+				case 'prepositional': #предложный падеж
+					#stub
+					break;
+			}
+		return $word;
+	}
+
+	function convertPlural( $count, $wordform1, $wordform2, $wordform3, $w4, $w5) {
+		$count = str_replace (' ', '', $count);
+		if ($count > 10 && floor(($count % 100) / 10) == 1) {
+			return $wordform3;
+		} else {
+			switch ($count % 10) {
+				case 1: return $wordform1;
+				case 2:
+				case 3:
+				case 4: return $wordform2;
+				default: return $wordform3;
+			}
+		}
+	}
+
+	/*
+	 * Russian numeric format is "12 345,67" but "1234,56"
+	 */
+
+	function commafy($_) {
+		if (!preg_match('/^\d{1,4}$/',$_)) {
+			return strrev((string)preg_replace('/(\d{3})(?=\d)(?!\d*\.)/','$1,',strrev($_)));
+		} else {
+			return $_;
+		}
+	}
+}
+?>
Index: /MediaWiki/branches/1.11/languages/classes/LanguageSk.php
===================================================================
--- /MediaWiki/branches/1.11/languages/classes/LanguageSk.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/classes/LanguageSk.php	(revision 1280)
@@ -0,0 +1,93 @@
+<?php
+/**
+ * Slovak (Slovenčina)
+ *
+ * @addtogroup Language
+ */
+class LanguageSk extends Language {
+	# Convert from the nominative form of a noun to some other case
+	# Invoked with {{GRAMMAR:case|word}}
+	/**
+	 * Cases: genitív, datív, akuzatív, lokál, inštrumentál
+	 */
+	function convertGrammar( $word, $case ) {
+		global $wgGrammarForms;
+		if ( isset($wgGrammarForms['sk'][$case][$word]) ) {
+			return $wgGrammarForms['sk'][$case][$word];
+		}
+
+		switch ( $case ) {
+			case 'genitív':
+				if ( $word == 'Wikipédia' ) {
+					$word = 'Wikipédie';
+				} elseif ( $word == 'Wikislovník' ) {
+					$word = 'Wikislovníku';
+				} elseif ( $word == 'Wikicitáty' ) {
+					$word = 'Wikicitátov';
+				} elseif ( $word == 'Wikiknihy' ) {
+					$word = 'Wikikníh';
+				}
+			break;
+			case 'datív':
+				if ( $word == 'Wikipédia' ) {
+					$word = 'Wikipédii';
+				} elseif ( $word == 'Wikislovník' ) {
+					$word = 'Wikislovníku';
+				} elseif ( $word == 'Wikicitáty' ) {
+					$word = 'Wikicitátom';
+				} elseif ( $word == 'Wikiknihy' ) {
+					$word = 'Wikiknihám';
+				}
+			break;
+			case 'akuzatív':
+				if ( $word == 'Wikipédia' ) {
+					$word = 'Wikipédiu';
+				} elseif ( $word == 'Wikislovník' ) {
+					$word = 'Wikislovník';
+				} elseif ( $word == 'Wikicitáty' ) {
+					$word = 'Wikicitáty';
+				} elseif ( $word == 'Wikiknihy' ) {
+					$word = 'Wikiknihy';
+				}
+			break;
+			case 'lokál':
+				if ( $word == 'Wikipédia' ) {
+					$word = 'Wikipédii';
+				} elseif ( $word == 'Wikislovník' ) {
+					$word = 'Wikislovníku';
+				} elseif ( $word == 'Wikicitáty' ) {
+					$word = 'Wikicitátoch';
+				} elseif ( $word == 'Wikiknihy' ) {
+					$word = 'Wikiknihách';
+				}
+			break;
+			case 'inštrumentál':
+				if ( $word == 'Wikipédia' ) {
+					$word = 'Wikipédiou';
+				} elseif ( $word == 'Wikislovník' ) {
+					$word = 'Wikislovníkom';
+				} elseif ( $word == 'Wikicitáty' ) {
+					$word = 'Wikicitátmi';
+				} elseif ( $word == 'Wikiknihy' ) {
+					$word = 'Wikiknihami';
+				}
+			break;
+		}
+		return $word;
+	}
+
+	function convertPlural( $count, $w1, $w2, $w3, $w4, $w5) {
+		$count = str_replace ('.', '', $count);
+		$forms = array( $w1, $w2, $w3);
+		if ( $count == 1 ) {
+			$index = 0;
+		} elseif ( $count == 2 || $count == 3 || $count == 4 ) {
+			$index = 1;
+		} else {
+			$index = 2;
+		}
+		return $forms[$index];
+	}
+
+}
+?>
Index: /MediaWiki/branches/1.11/languages/classes/LanguageSl.php
===================================================================
--- /MediaWiki/branches/1.11/languages/classes/LanguageSl.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/classes/LanguageSl.php	(revision 1280)
@@ -0,0 +1,93 @@
+<?php
+/** Slovenian (Slovenščina)
+ *
+ * @addtogroup Language
+ *
+ */
+class LanguageSl extends Language {
+	# Convert from the nominative form of a noun to some other case
+	# Invoked with {{GRAMMAR:case|word}}
+	/**
+	 * Cases: rodilnik, dajalnik, tožilnik, mestnik, orodnik
+	 */
+	function convertGrammar( $word, $case ) {
+		global $wgGrammarForms;
+		if ( isset($wgGrammarForms['sl'][$case][$word]) ) {
+			return $wgGrammarForms['sl'][$case][$word];
+		}
+
+		switch ( $case ) {
+			case 'rodilnik': # genitive
+				switch ( $word ) {
+					case 'Wikipedija': $word = 'Wikipedije'; break 2;
+					case 'Wikiknjige': $word = 'Wikiknjig'; break 2;
+					case 'Wikinovice': $word = 'Wikinovic'; break 2;
+					case 'Wikinavedek': $word = 'Wikinavedka'; break 2;
+					case 'Wikivir': $word = 'Wikivira'; break 2;
+					case 'Wikislovar': $word = 'Wikislovarja'; break 2;
+				}
+			case 'dajalnik': # dativ
+				switch ( $word ) {
+					case 'Wikipedija': $word = 'Wikipediji'; break 2;
+					case 'Wikiknjige': $word = 'Wikiknjigam'; break 2;
+					case 'Wikinovice': $word = 'Wikinovicam'; break 2;
+					case 'Wikinavedek': $word = 'Wikinavedku'; break 2;
+					case 'Wikivir': $word = 'Wikiviru'; break 2;
+					case 'Wikislovar': $word = 'Wikislovarju'; break 2;
+				}
+			case 'tožilnik': # akuzatív
+				switch ( $word ) {
+					case 'Wikipedija': $word = 'Wikipedijo'; break 2;
+					case 'Wikiknjige':
+					case 'Wikinovice':
+					case 'Wikinavedek':
+					case 'Wikivir':
+					case 'Wikislovar':
+						// Don't change, just fall through
+						break 2;
+				}
+			case 'mestnik': # locative
+				switch ( $word ) {
+					case 'Wikipedija': $word = 'o Wikipediji'; break 2;
+					case 'Wikiknjige': $word = 'o Wikiknjigah'; break 2;
+					case 'Wikinovice': $word = 'o Wikinovicah'; break 2;
+					case 'Wikinavedek': $word = 'o Wikinavedku'; break 2;
+					case 'Wikivir': $word = 'o Wikiviru'; break 2;
+					case 'Wikislovar': $word = 'o Wikislovarju'; break 2;
+					default: $word = 'o ' . $word; break 2;
+				}
+			case 'orodnik': # instrumental
+				switch ( $word ) {
+					case 'Wikipedija': $word = 'z Wikipedijo'; break 2;
+					case 'Wikiknjige': $word = 'z Wikiknjigami'; break 2;
+					case 'Wikinovice': $word = 'z Wikinovicami'; break 2;
+					case 'Wikinavedek': $word = 'z Wikinavedkom'; break 2;
+					case 'Wikivir': $word = 'z Wikivirom'; break 2;
+					case 'Wikislovar': $word = 'z Wikislovarjem'; break 2;
+					default: $word = 'z ' . $word;
+				}
+		}
+
+		return $word; # this will return the original value for 'imenovalnik' (nominativ) and all undefined case values
+	}
+
+	function convertPlural( $count, $w1, $w2, $w3, $w4, $w5) {
+		$count = str_replace ('.', '', $count);
+		$forms = array( $w1, $w2, $w3, $w4, $w5 );
+		if ( $count % 100 == 1 ) {
+			$index = 0;
+		} elseif ( $count % 100 == 2 ) {
+			$index = 1;
+		} elseif ( $count % 100 == 3 || $count % 100 == 4 ) {
+			$index = 2;
+		} elseif ( $count != 0 ) {
+			$index = 3;
+		} else {
+			$index = 4;
+		}
+		return $forms[$index];
+	}
+
+
+}
+?>
Index: /MediaWiki/branches/1.11/languages/classes/LanguageSr.deps.php
===================================================================
--- /MediaWiki/branches/1.11/languages/classes/LanguageSr.deps.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/classes/LanguageSr.deps.php	(revision 1280)
@@ -0,0 +1,10 @@
+<?php
+// This file exists to ensure that base classes are preloaded before
+// LanguageSr.php is compiled, working around a bug in the APC opcode
+// cache on PHP 5, where cached code can break if the include order
+// changed on a subsequent page view.
+// see http://mail.wikipedia.org/pipermail/wikitech-l/2006-January/033660.html
+
+require_once( dirname(__FILE__).'/LanguageSr_ec.php' );
+require_once( dirname(__FILE__).'/../LanguageConverter.php' );
+?>
Index: /MediaWiki/branches/1.11/languages/classes/LanguageSr.php
===================================================================
--- /MediaWiki/branches/1.11/languages/classes/LanguageSr.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/classes/LanguageSr.php	(revision 1280)
@@ -0,0 +1,191 @@
+<?php
+/**
+  * @addtogroup Language
+  */
+
+/*
+	There are two levels of conversion for Serbian: the script level
+	(Cyrillics <-> Latin), and the variant level (ekavian
+	<->iyekavian). The two are orthogonal. So we really only need two
+	dictionaries: one for Cyrillics and Latin, and one for ekavian and
+	iyekavian.
+*/
+require_once( dirname(__FILE__).'/../LanguageConverter.php' );
+require_once( dirname(__FILE__).'/LanguageSr_ec.php' );
+require_once( dirname(__FILE__).'/LanguageSr_el.php' );
+
+class SrConverter extends LanguageConverter {
+	var $mToLatin = array(
+		'а' => 'a', 'б' => 'b',  'в' => 'v', 'г' => 'g',  'д' => 'd',
+		'ђ' => 'đ', 'е' => 'e',  'ж' => 'ž', 'з' => 'z',  'и' => 'i',
+		'ј' => 'j', 'к' => 'k',  'л' => 'l', 'љ' => 'lj', 'м' => 'm',
+		'н' => 'n', 'њ' => 'nj', 'о' => 'o', 'п' => 'p',  'р' => 'r',
+		'с' => 's', 'т' => 't',  'ћ' => 'ć', 'у' => 'u',  'ф' => 'f',
+		'х' => 'h', 'ц' => 'c',  'ч' => 'č', 'џ' => 'dž', 'ш' => 'š',
+
+		'А' => 'A', 'Б' => 'B',  'В' => 'V', 'Г' => 'G',  'Д' => 'D',
+		'Ђ' => 'Đ', 'Е' => 'E',  'Ж' => 'Ž', 'З' => 'Z',  'И' => 'I',
+		'Ј' => 'J', 'К' => 'K',  'Л' => 'L', 'Љ' => 'Lj', 'М' => 'M',
+		'Н' => 'N', 'Њ' => 'Nj', 'О' => 'O', 'П' => 'P',  'Р' => 'R',
+		'С' => 'S', 'Т' => 'T',  'Ћ' => 'Ć', 'У' => 'U',  'Ф' => 'F',
+		'Х' => 'H', 'Ц' => 'C',  'Ч' => 'Č', 'Џ' => 'Dž', 'Ш' => 'Š',
+	);
+
+	var $mToCyrillics = array(
+		'a' => 'а', 'b'  => 'б', 'c' => 'ц', 'č' => 'ч', 'ć'  => 'ћ',
+		'd' => 'д', 'dž' => 'џ', 'đ' => 'ђ', 'e' => 'е', 'f'  => 'ф',
+		'g' => 'г', 'h'  => 'х', 'i' => 'и', 'j' => 'ј', 'k'  => 'к',
+		'l' => 'л', 'lj' => 'љ', 'm' => 'м', 'n' => 'н', 'nj' => 'њ',
+		'o' => 'о', 'p'  => 'п', 'r' => 'р', 's' => 'с', 'š'  => 'ш',
+		't' => 'т', 'u'  => 'у', 'v' => 'в', 'z' => 'з', 'ž'  => 'ж',
+
+		'A' => 'А', 'B'  => 'Б', 'C' => 'Ц', 'Č' => 'Ч', 'Ć'  => 'Ћ',
+		'D' => 'Д', 'Dž' => 'Џ', 'Đ' => 'Ђ', 'E' => 'Е', 'F'  => 'Ф',
+		'G' => 'Г', 'H'  => 'Х', 'I' => 'И', 'J' => 'Ј', 'K'  => 'К',
+		'L' => 'Л', 'LJ' => 'Љ', 'M' => 'М', 'N' => 'Н', 'NJ' => 'Њ',
+		'O' => 'О', 'P'  => 'П', 'R' => 'Р', 'S' => 'С', 'Š'  => 'Ш',
+		'T' => 'Т', 'U'  => 'У', 'V' => 'В', 'Z' => 'З', 'Ž'  => 'Ж',
+
+		'DŽ' => 'Џ', 'd!ž' => 'дж', 'D!ž'=> 'Дж', 'D!Ž'=> 'ДЖ',
+		'Lj' => 'Љ', 'l!j' => 'лј', 'L!j'=> 'Лј', 'L!J'=> 'ЛЈ',
+		'Nj' => 'Њ', 'n!j' => 'нј', 'N!j'=> 'Нј', 'N!J'=> 'НЈ'
+	);
+
+	function loadDefaultTables() {
+		$this->mTables = array(
+			'sr-ec' => new ReplacementArray( $this->mToCyrillics ),
+			'sr-jc' => new ReplacementArray( $this->mToCyrillics),
+			'sr-el' => new ReplacementArray( $this->mToLatin),
+			'sr-jl' => new ReplacementArray( $this->mToLatin),
+			'sr'    => new ReplacementArray()
+		);
+	}
+
+	/* rules should be defined as -{ekavian | iyekavian-} -or-
+		-{code:text | code:text | ...}-
+		update: delete all rule parsing because it's not used
+		        currently, and just produces a couple of bugs
+	*/
+	function parseManualRule($rule, $flags=array()) {
+		if(in_array('T',$flags)){
+			return parent::parseManualRule($rule, $flags);
+		}
+
+		// otherwise ignore all formatting
+		foreach($this->mVariants as $v) {
+			$carray[$v] = $rule;
+		}
+		
+		return $carray;
+	}
+
+	// Do not convert content on talk pages
+	function parserConvert( $text, &$parser ){
+		if(is_object($parser->getTitle() ) && $parser->getTitle()->isTalkPage())
+			$this->mDoContentConvert=false;
+		else 
+			$this->mDoContentConvert=true;
+
+		return parent::parserConvert($text, $parser );
+	}
+
+	/*
+	 * A function wrapper:
+	 *   - if there is no selected variant, leave the link 
+	 *     names as they were
+	 *   - do not try to find variants for usernames
+	 */
+	function findVariantLink( &$link, &$nt ) {
+		// check for user namespace
+		if(is_object($nt)){
+			$ns = $nt->getNamespace();
+			if($ns==NS_USER || $ns==NS_USER_TALK)
+				return;
+		}
+
+		$oldlink=$link;
+		parent::findVariantLink($link,$nt);
+		if($this->getPreferredVariant()==$this->mMainLanguageCode)
+			$link=$oldlink;
+	}
+
+	/*
+	 * We want our external link captions to be converted in variants,
+	 * so we return the original text instead -{$text}-, except for URLs
+	 */
+	function markNoConversion($text, $noParse=false) {
+		if($noParse || preg_match("/^https?:\/\/|ftp:\/\/|irc:\/\//",$text))
+			return parent::markNoConversion($text);
+		return $text;
+	}
+
+	/*
+	 * An ugly function wrapper for parsing Image titles
+	 * (to prevent image name conversion)
+	 */
+	function autoConvert($text, $toVariant=false) {
+		global $wgTitle;
+		if(is_object($wgTitle) && $wgTitle->getNameSpace()==NS_IMAGE){ 
+			$imagename = $wgTitle->getNsText();
+			if(preg_match("/^$imagename:/",$text)) return $text;
+		}
+		return parent::autoConvert($text,$toVariant);
+	} 
+
+	/**
+	 *  It translates text into variant, specials:
+	 *    - ommiting roman numbers
+	 */
+	function translate($text, $toVariant){
+		$breaks = '[^\w\x80-\xff]';
+
+		// regexp for roman numbers
+		$roman = 'M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})';
+
+		$reg = '/^'.$roman.'$|^'.$roman.$breaks.'|'.$breaks.$roman.'$|'.$breaks.$roman.$breaks.'/';
+
+		$matches = preg_split($reg, $text, -1, PREG_SPLIT_OFFSET_CAPTURE);
+		
+		$m = array_shift($matches);
+		if( !isset( $this->mTables[$toVariant] ) ) {
+			throw new MWException( "Broken variant table: " . implode( ',', array_keys( $this->mTables ) ) );
+		}
+		$ret = $this->mTables[$toVariant]->replace( $m[0] );
+		$mstart = $m[1]+strlen($m[0]);
+		foreach($matches as $m) {
+			$ret .= substr($text, $mstart, $m[1]-$mstart);
+			$ret .= parent::translate($m[0], $toVariant);
+			$mstart = $m[1] + strlen($m[0]);
+		}
+
+		return $ret;
+	}
+
+}
+
+class LanguageSr extends LanguageSr_ec {
+	function __construct() {
+		global $wgHooks;
+
+		parent::__construct();
+
+		// these variants are currently UNUSED:
+		// 'sr-jc', 'sr-jl' 
+		$variants = array('sr', 'sr-ec', 'sr-el');
+		$variantfallbacks = array(
+			'sr'    => 'sr-ec',
+			'sr-ec' => 'sr',
+			'sr-el' => 'sr',
+			); 
+
+
+		$marker = array();//don't mess with these, leave them as they are
+		$flags = array(
+			'S' => 'S', 'писмо' => 'S', 'pismo' => 'S',
+			'W' => 'W', 'реч'   => 'W', 'reč'   => 'W', 'ријеч' => 'W', 'riječ' => 'W'
+		);
+		$this->mConverter = new SrConverter($this, 'sr', $variants, $variantfallbacks, $marker, $flags);
+		$wgHooks['ArticleSaveComplete'][] = $this->mConverter;
+	}
+}
+?>
Index: /MediaWiki/branches/1.11/languages/classes/LanguageSr_ec.php
===================================================================
--- /MediaWiki/branches/1.11/languages/classes/LanguageSr_ec.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/classes/LanguageSr_ec.php	(revision 1280)
@@ -0,0 +1,27 @@
+<?php
+/**
+  * @addtogroup Language
+  */
+
+#--------------------------------------------------------------------------
+# Internationalisation code
+#--------------------------------------------------------------------------
+
+class LanguageSr_ec extends Language {
+	function convertPlural( $count, $wordform1, $wordform2, $wordform3, $w4, $w5) {
+		$count = str_replace ('.', '', $count);
+		if ($count > 10 && floor(($count % 100) / 10) == 1) {
+			return $wordform3;
+		} else {
+			switch ($count % 10) {
+				case 1: return $wordform1;
+				case 2:
+				case 3:
+				case 4: return $wordform2;
+				default: return $wordform3;
+			}
+		}
+	}
+
+}
+?>
Index: /MediaWiki/branches/1.11/languages/classes/LanguageSr_el.deps.php
===================================================================
--- /MediaWiki/branches/1.11/languages/classes/LanguageSr_el.deps.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/classes/LanguageSr_el.deps.php	(revision 1280)
@@ -0,0 +1,9 @@
+<?php
+// This file exists to ensure that base classes are preloaded before
+// LanguageSr_el.php is compiled, working around a bug in the APC opcode
+// cache on PHP 5, where cached code can break if the include order
+// changed on a subsequent page view.
+// see http://mail.wikipedia.org/pipermail/wikitech-l/2006-January/033660.html
+
+require_once( dirname(__FILE__).'/LanguageSr_ec.php' );
+?>
Index: /MediaWiki/branches/1.11/languages/classes/LanguageSr_el.php
===================================================================
--- /MediaWiki/branches/1.11/languages/classes/LanguageSr_el.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/classes/LanguageSr_el.php	(revision 1280)
@@ -0,0 +1,27 @@
+<?php
+/**
+  * @addtogroup Language
+  */
+
+#--------------------------------------------------------------------------
+# Internationalisation code
+#--------------------------------------------------------------------------
+
+class LanguageSr_el extends Language {
+	function convertPlural( $count, $wordform1, $wordform2, $wordform3, $w4, $w5) {
+		$count = str_replace ('.', '', $count);
+		if ($count > 10 && floor(($count % 100) / 10) == 1) {
+			return $wordform3;
+		} else {
+			switch ($count % 10) {
+				case 1: return $wordform1;
+				case 2:
+				case 3:
+				case 4: return $wordform2;
+				default: return $wordform3;
+			}
+		}
+	}
+
+}
+?>
Index: /MediaWiki/branches/1.11/languages/classes/LanguageTr.php
===================================================================
--- /MediaWiki/branches/1.11/languages/classes/LanguageTr.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/classes/LanguageTr.php	(revision 1280)
@@ -0,0 +1,17 @@
+<?php
+/**
+ * Turkish (Türkçe)
+ *
+ * @addtogroup Language
+ */
+class LanguageTr extends Language {
+	function ucfirst ( $string ) {
+		if ( $string[0] == 'i' ) {
+			return 'İ' . substr( $string, 1 );
+		} else {
+			return parent::ucfirst( $string );
+		}
+	}
+
+}
+?>
Index: /MediaWiki/branches/1.11/languages/classes/LanguageTyv.php
===================================================================
--- /MediaWiki/branches/1.11/languages/classes/LanguageTyv.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/classes/LanguageTyv.php	(revision 1280)
@@ -0,0 +1,232 @@
+<?php
+/** Tyvan localization (Тыва дыл)
+ * @addtogroup Language
+ */
+
+# From friends at tyvawiki.org
+
+#--------------------------------------------------------------------------
+# Internationalisation code
+#--------------------------------------------------------------------------
+
+class LanguageTyv extends Language {
+	/**
+	 * Grammatical transformations, needed for inflected languages
+	 * Invoked by putting {{grammar:case|word}} in a message
+	 *
+	 * @param string $word
+	 * @param string $case
+	 * @return string
+	 */
+	function convertGrammar( $word, $case ) {
+		global $wgGrammarForms;
+		if ( isset($wgGrammarForms['tyv'][$case][$word]) ) {
+			return $wgGrammarForms['tyv'][$case][$word];
+		}
+
+
+	// Set up some constants...
+		$allVowels = array("е", "и", "э", "ө", "ү", "а", "ё", "о", "у", "ы", "ю", "я", "a", "e", "i", "o", "ö", "u", "ü", "y");
+		$frontVowels = array("е", "и", "э", "ө", "ү", "e", "i", "ö", "ü");
+		$backVowels = array("а", "ё", "о", "у", "ы", "ю", "я", "a", "o", "u", "y");
+		$unroundFrontVowels = array("е", "и", "э", "e", "i");
+		$roundFrontVowels = array("ө", "ү", "ö", "ü");
+		$unroundBackVowels = array("а", "ы", "я", "a", "y");
+		$roundBackVowels = array("ё", "о", "у", "ю", "o", "u");
+		$voicedPhonemes = array("д", "б", "з", "ж", "г", "d", "b", "z", "g");
+		$unvoicedPhonemes = array("т", "п", "с", "ш", "к", "ч", "х", "t", "p", "s", "k", "x");
+		$directiveUnvoicedStems = array("т", "п", "с", "ш", "к", "ч", "х", "л", "м", "н", "ң", "t", "p", "s", "k", "x", "l", "m", "n", "ŋ");
+		$directiveVoicedStems = array("д", "б", "з", "ж", "г", "р", "й", "d", "b", "z", "g", "r", "j");
+
+//		$allSonants = array("л", "м", "н", "ң", "р", "й");
+//		$allNasals = array("м", "н", "ң");
+
+	// Put the word in a form we can play with since we're using UTF-8
+		preg_match_all( '/./us', $word, $ar );
+	
+		$wordEnding = $ar[0][count($ar[0]) - 1]; //Here's the last letter in the word
+		$wordReversed = array_reverse($ar[0]); //Here's an array with the order of the letters in the word reversed so we can find a match quicker *shrug*
+
+	// Find the last vowel in the word
+		$wordLastVowel = NULL;
+		foreach ( $wordReversed as $xvalue ) {
+			foreach ( $allVowels as $yvalue ) {
+				if ( strcmp($xvalue, $yvalue) == 0 ) {
+					$wordLastVowel = $xvalue;
+					break;
+				} else {
+					continue;
+				}
+			}
+			if ( $wordLastVowel !== NULL ) {
+				break;
+			} else {
+				continue;
+			}
+		}
+
+	// Now convert the word
+		switch ( $case ) {
+			case "genitive":
+				if ( in_array($wordEnding, $unvoicedPhonemes) ) {
+					if ( in_array($wordLastVowel, $roundFrontVowels) ) {
+						$word = implode("",$ar[0]) . "түң";
+					} elseif ( in_array($wordLastVowel, $unroundFrontVowels) ) {
+						$word = implode("",$ar[0]) . "тиң";
+					} elseif ( in_array($wordLastVowel, $roundBackVowels) ) {
+						$word = implode("",$ar[0]) . "туң";
+					} elseif ( in_array($wordLastVowel, $unroundBackVowels) ) {
+						$word = implode("",$ar[0]) . "тың";
+					} else {
+					}
+				} elseif ( $wordEnding === "л" || $wordEnding === "l") {
+					if ( in_array($wordLastVowel, $roundFrontVowels) ) {
+						$word = implode("",$ar[0]) . "дүң";
+					} elseif ( in_array($wordLastVowel, $unroundFrontVowels) ) {
+						$word = implode("",$ar[0]) . "диң";
+					} elseif ( in_array($wordLastVowel, $roundBackVowels) ) {
+						$word = implode("",$ar[0]) . "дуң";
+					} elseif ( in_array($wordLastVowel, $unroundBackVowels) ) {
+						$word = implode("",$ar[0]) . "дың";
+					} else {
+					}
+				} else {
+					if ( in_array($wordLastVowel, $roundFrontVowels) ) {
+						$word = implode("",$ar[0]) . "нүң";
+					} elseif ( in_array($wordLastVowel, $unroundFrontVowels) ) {
+						$word = implode("",$ar[0]) . "ниң";
+					} elseif ( in_array($wordLastVowel, $roundBackVowels) ) {
+						$word = implode("",$ar[0]) . "нуң";
+					} elseif ( in_array($wordLastVowel, $unroundBackVowels) ) {
+						$word = implode("",$ar[0]) . "ның";
+					} else {
+					}
+				}
+				break;
+			case "dative":
+				if ( in_array($wordEnding, $unvoicedPhonemes) ) {
+					if ( in_array($wordLastVowel, $frontVowels) ) {
+						$word = implode("",$ar[0]) . "ке";
+					} elseif ( in_array($wordLastVowel, $backVowels) ) {
+						$word = implode("",$ar[0]) . "ка";
+					} else {
+					}
+				} else {
+					if ( in_array($wordLastVowel, $frontVowels) ) {
+						$word = implode("",$ar[0]) . "ге";
+					} elseif ( in_array($wordLastVowel, $backVowels) ) {
+						$word = implode("",$ar[0]) . "га";
+					} else {
+					}
+				}
+				break;
+			case "accusative":
+				if ( in_array($wordEnding, $unvoicedPhonemes) ) {
+					if ( in_array($wordLastVowel, $roundFrontVowels) ) {
+						$word = implode("",$ar[0]) . "тү";
+					} elseif ( in_array($wordLastVowel, $unroundFrontVowels) ) {
+						$word = implode("",$ar[0]) . "ти";
+					} elseif ( in_array($wordLastVowel, $roundBackVowels) ) {
+						$word = implode("",$ar[0]) . "ту";
+					} elseif ( in_array($wordLastVowel, $unroundBackVowels) ) {
+						$word = implode("",$ar[0]) . "ты";
+					} else {
+					}
+				} elseif ( $wordEnding === "л"  || $wordEnding === "l") {
+					if ( in_array($wordLastVowel, $roundFrontVowels) ) {
+						$word = implode("",$ar[0]) . "дү";
+					} elseif ( in_array($wordLastVowel, $unroundFrontVowels) ) {
+						$word = implode("",$ar[0]) . "ди";
+					} elseif ( in_array($wordLastVowel, $roundBackVowels) ) {
+						$word = implode("",$ar[0]) . "ду";
+					} elseif ( in_array($wordLastVowel, $unroundBackVowels) ) {
+						$word = implode("",$ar[0]) . "ды";
+					} else {
+					}
+				} else {
+					if ( in_array($wordLastVowel, $roundFrontVowels) ) {
+						$word = implode("",$ar[0]) . "нү";
+					} elseif ( in_array($wordLastVowel, $unroundFrontVowels) ) {
+						$word = implode("",$ar[0]) . "ни";
+					} elseif ( in_array($wordLastVowel, $roundBackVowels) ) {
+						$word = implode("",$ar[0]) . "ну";
+					} elseif ( in_array($wordLastVowel, $unroundBackVowels) ) {
+						$word = implode("",$ar[0]) . "ны";
+					} else {
+					}
+				}
+				break;
+			case "locative":
+				if ( in_array($wordEnding, $unvoicedPhonemes) ) {
+					if ( in_array($wordLastVowel, $frontVowels) ) {
+						$word = implode("",$ar[0]) . "те";
+					} elseif ( in_array($wordLastVowel, $backVowels) ) {
+						$word = implode("",$ar[0]) . "та";
+					} else {
+					}
+				} else {
+					if ( in_array($wordLastVowel, $frontVowels) ) {
+						$word = implode("",$ar[0]) . "де";
+					} elseif ( in_array($wordLastVowel, $backVowels) ) {
+						$word = implode("",$ar[0]) . "да";
+					} else {
+					}
+				}
+				break;
+			case "ablative":
+				if ( in_array($wordEnding, $unvoicedPhonemes) ) {
+					if ( in_array($wordLastVowel, $frontVowels) ) {
+						$word = implode("",$ar[0]) . "тен";
+					} elseif ( in_array($wordLastVowel, $backVowels) ) {
+						$word = implode("",$ar[0]) . "тан";
+					} else {
+					}
+				} else {
+					if ( in_array($wordLastVowel, $frontVowels) ) {
+						$word = implode("",$ar[0]) . "ден";
+					} elseif ( in_array($wordLastVowel, $backVowels) ) {
+						$word = implode("",$ar[0]) . "дан";
+					} else {
+					}
+				}
+				break;
+			case "directive1":
+				if ( in_array($wordEnding, $directiveVoicedStems) ) {
+					$word = implode("",$ar[0]) . "же";
+				} elseif ( in_array($wordEnding, $directiveUnvoicedStems) ) {
+					$word = implode("",$ar[0]) . "че";
+				} else {
+				}
+				break;
+			case "directive2":
+				if ( in_array($wordEnding, $unvoicedPhonemes) ) {
+					if ( in_array($wordLastVowel, $roundFrontVowels) ) {
+						$word = implode("",$ar[0]) . "түве";
+					} elseif ( in_array($wordLastVowel, $unroundFrontVowels) ) {
+						$word = implode("",$ar[0]) . "тиве";
+					} elseif ( in_array($wordLastVowel, $roundBackVowels) ) {
+						$word = implode("",$ar[0]) . "туве";
+					} elseif ( in_array($wordLastVowel, $unroundBackVowels) ) {
+						$word = implode("",$ar[0]) . "тыве";
+					} else {
+					}
+				} else {
+					if ( in_array($wordLastVowel, $roundFrontVowels) ) {
+						$word = implode("",$ar[0]) . "дүве";
+					} elseif ( in_array($wordLastVowel, $unroundFrontVowels) ) {
+						$word = implode("",$ar[0]) . "диве";
+					} elseif ( in_array($wordLastVowel, $roundBackVowels) ) {
+						$word = implode("",$ar[0]) . "дуве";
+					} elseif ( in_array($wordLastVowel, $unroundBackVowels) ) {
+						$word = implode("",$ar[0]) . "дыве";
+					} else {
+					}
+				}
+				break;
+			default:
+				break;
+		}
+		return $word;
+	}
+}
+?>
Index: /MediaWiki/branches/1.11/languages/classes/LanguageUk.php
===================================================================
--- /MediaWiki/branches/1.11/languages/classes/LanguageUk.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/classes/LanguageUk.php	(revision 1280)
@@ -0,0 +1,88 @@
+<?php
+/** Ukrainian (українська мова)
+  *
+  * @package MediaWiki
+  * @subpackage Language
+  */
+
+/* Please, see Language.php for general function comments */
+class LanguageUk extends Language {
+	# Convert from the nominative form of a noun to some other case
+	# Invoked with {{grammar:case|word}}
+	function convertGrammar( $word, $case ) {
+		global $wgGrammarForms;
+		if ( isset($wgGrammarForms['uk'][$case][$word]) ) {
+			return $wgGrammarForms['uk'][$case][$word];
+		}
+
+		# These rules are not perfect, but they are currently only used for site names so it doesn't
+		# matter if they are wrong sometimes. Just add a special case for your site name if necessary.
+
+		#join and array_slice instead mb_substr
+		$ar = array();
+		preg_match_all( '/./us', $word, $ar );
+		if (!preg_match("/[a-zA-Z_]/us", $word))
+			switch ( $case ) {
+				case 'genitive': #родовий відмінок
+					if ((join('',array_slice($ar[0],-4))=='вікі') || (join('',array_slice($ar[0],-4))=='Вікі'))
+						{}
+					elseif (join('',array_slice($ar[0],-1))=='ь')
+						$word = join('',array_slice($ar[0],0,-1)).'я';
+					elseif (join('',array_slice($ar[0],-2))=='ія')
+						$word=join('',array_slice($ar[0],0,-2)).'ії';
+					elseif (join('',array_slice($ar[0],-2))=='ка')
+						$word=join('',array_slice($ar[0],0,-2)).'ки';
+					elseif (join('',array_slice($ar[0],-2))=='ти')
+						$word=join('',array_slice($ar[0],0,-2)).'тей';
+					elseif (join('',array_slice($ar[0],-2))=='ди')
+						$word=join('',array_slice($ar[0],0,-2)).'дів';
+					elseif (join('',array_slice($ar[0],-3))=='ник')
+						$word=join('',array_slice($ar[0],0,-3)).'ника';
+					break;
+				case 'dative':  #давальний відмінок
+					#stub
+					break;
+				case 'accusative': #знахідний відмінок
+					if ((join('',array_slice($ar[0],-4))=='вікі') || (join('',array_slice($ar[0],-4))=='Вікі'))
+						{}
+					elseif (join('',array_slice($ar[0],-2))=='ія')
+						$word=join('',array_slice($ar[0],0,-2)).'ію';
+					break;
+				case 'instrumental':  #орудний відмінок
+					#stub
+					break;
+				case 'prepositional': #місцевий відмінок
+					#stub
+					break;
+			}
+		return $word;
+	}
+
+	function convertPlural( $count, $wordform1, $wordform2, $wordform3, $w4, $w5) {
+		$count = str_replace (' ', '', $count);
+		if ($count > 10 && floor(($count % 100) / 10) == 1) {
+			return $wordform3;
+		} else {
+			switch ($count % 10) {
+				case 1: return $wordform1;
+				case 2:
+				case 3:
+				case 4: return $wordform2;
+				default: return $wordform3;
+			}
+		}
+	}
+
+	/*
+	 * Ukrainian numeric format is "12 345,67" but "1234,56"
+	 */
+
+	function commafy($_) {
+		if (!preg_match('/^\d{1,4}$/',$_)) {
+			return strrev((string)preg_replace('/(\d{3})(?=\d)(?!\d*\.)/','$1,',strrev($_)));
+		} else {
+			return $_;
+		}
+	}
+}
+?>
Index: /MediaWiki/branches/1.11/languages/classes/LanguageWa.php
===================================================================
--- /MediaWiki/branches/1.11/languages/classes/LanguageWa.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/classes/LanguageWa.php	(revision 1280)
@@ -0,0 +1,70 @@
+<?php
+/**
+ * Walloon (Walon)
+ *
+ * @addtogroup Language
+ */
+
+# NOTE: cweri après "NOTE:" po des racsegnes so des ratournaedjes
+# k' i gn a.
+
+class LanguageWa extends Language {
+	###
+	### Dates in Walloon are "1î d' <monthname>" for 1st of the month,
+	### "<day> di <monthname>" for months starting by a consoun, and
+	### "<day> d' <monthname>" for months starting with a vowel
+	###
+	function date( $ts, $adj = false, $format = true, $tc = false ) {
+		global $wgUser;
+
+		if ( $adj ) { $ts = $this->userAdjust( $ts, $tc ); }
+		$datePreference = $this->dateFormat( $format );
+
+		# ISO (YYYY-mm-dd) format
+		#
+		# we also output this format for YMD (eg: 2001 January 15)
+		if ( $datePreference == 'ISO 8601' ) {
+		       $d = substr($ts, 0, 4). '-' . substr($ts, 4, 2). '-' .substr($ts, 6, 2);
+		       return $d;
+		}
+		
+		# dd/mm/YYYY format
+		if ( $datePreference == 'walloon short' ) {
+		       $d = substr($ts, 6, 2). '/' . substr($ts, 4, 2). '/' .substr($ts, 0, 4);
+		       return $d;
+		}
+		
+		# Walloon format
+		#
+		# we output this in all other cases
+		$m = substr( $ts, 4, 2 );
+		$n = substr( $ts, 6, 2 );
+		if ($n == 1) {
+		    $d = "1î d' " . $this->getMonthName( $m ) .
+			" " .  substr( $ts, 0, 4 );
+		} else if ($n == 2 || $n == 3 || $n == 20 || $n == 22 || $n == 23) {
+		    $d = (0 + $n) . " d' " . $this->getMonthName( $m ) .
+			" " .  substr( $ts, 0, 4 );
+		} else if ($m == 4 || $m == 8 || $m == 10) {
+		    $d = (0 + $n) . " d' " . $this->getMonthName( $m ) .
+			" " .  substr( $ts, 0, 4 );
+		} else {
+		    $d = (0 + $n) . " di " . $this->getMonthName( $m ) .
+			" " .  substr( $ts, 0, 4 );
+		}
+		return $d;
+	}
+
+	function timeanddate( $ts, $adj = false, $format = true, $tc = false ) {
+		if ( $adj ) { $ts = $this->userAdjust( $ts, $tc ); }
+		$datePreference = $this->dateFormat( $format );
+		if ( $datePreference == 'ISO 8601' ) {
+			return parent::timeanddate( $ts, $adj, $format, $tc );
+		} else {
+			return $this->date( $ts, $adj, $format, $tc ) . ' a ' . 
+				$this->time( $ts, $adj, $format, $tc );
+		}
+	}
+}
+
+?>
Index: /MediaWiki/branches/1.11/languages/classes/LanguageZh.deps.php
===================================================================
--- /MediaWiki/branches/1.11/languages/classes/LanguageZh.deps.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/classes/LanguageZh.deps.php	(revision 1280)
@@ -0,0 +1,10 @@
+<?php
+// This file exists to ensure that base classes are preloaded before
+// LanguageZh.php is compiled, working around a bug in the APC opcode
+// cache on PHP 5, where cached code can break if the include order
+// changed on a subsequent page view.
+// see http://mail.wikipedia.org/pipermail/wikitech-l/2006-January/033660.html
+
+require_once( dirname(__FILE__).'/LanguageZh_cn.php' );
+require_once( dirname(__FILE__).'/../LanguageConverter.php' );
+?>
Index: /MediaWiki/branches/1.11/languages/classes/LanguageZh.php
===================================================================
--- /MediaWiki/branches/1.11/languages/classes/LanguageZh.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/classes/LanguageZh.php	(revision 1280)
@@ -0,0 +1,102 @@
+<?php
+/**
+  * @addtogroup Language
+  */
+require_once( dirname(__FILE__).'/../LanguageConverter.php' );
+require_once( dirname(__FILE__).'/LanguageZh_cn.php' );
+
+class ZhConverter extends LanguageConverter {
+	function loadDefaultTables() {
+		require( "includes/ZhConversion.php" );
+		$this->mTables = array(
+			'zh-cn' => new ReplacementArray( $zh2CN ),
+			'zh-tw' => new ReplacementArray( $zh2TW ),
+			'zh-sg' => new ReplacementArray( array_merge($zh2CN, $zh2SG) ),
+			'zh-hk' => new ReplacementArray( array_merge($zh2TW, $zh2HK) ),
+			'zh' => new ReplacementArray
+		);
+	}
+
+	function postLoadTables() {
+		$this->mTables['zh-sg']->merge( $this->mTables['zh-cn'] );
+		$this->mTables['zh-hk']->merge( $this->mTables['zh-tw'] );
+    }
+
+	/* there shouldn't be any latin text in Chinese conversion, so no need
+	   to mark anything.
+	   $noParse is there for compatibility with LanguageConvert::markNoConversion
+    */
+	function markNoConversion($text, $noParse = false) {
+		return $text;
+	}
+
+	function convertCategoryKey( $key ) {
+		return $this->autoConvert( $key, 'zh-cn' );
+	}
+}
+
+
+/* class that handles both Traditional and Simplified Chinese
+   right now it only distinguish zh_cn, zh_tw, zh_sg and zh_hk.
+*/
+class LanguageZh extends LanguageZh_cn {
+
+	function __construct() {
+		global $wgHooks;
+		parent::__construct();
+		$this->mConverter = new ZhConverter($this, 'zh',
+                                            array('zh', 'zh-cn', 'zh-tw', 'zh-sg', 'zh-hk'),
+											array('zh'=>'zh-cn',
+												  'zh-cn'=>'zh-sg',
+												  'zh-sg'=>'zh-cn',
+												  'zh-tw'=>'zh-hk',
+												  'zh-hk'=>'zh-tw'));
+		$wgHooks['ArticleSaveComplete'][] = $this->mConverter;
+	}
+
+
+	# this should give much better diff info
+	function segmentForDiff( $text ) {
+		return preg_replace(
+			"/([\\xc0-\\xff][\\x80-\\xbf]*)/e",
+			"' ' .\"$1\"", $text);
+	}
+
+	function unsegmentForDiff( $text ) {
+		return preg_replace(
+			"/ ([\\xc0-\\xff][\\x80-\\xbf]*)/e",
+			"\"$1\"", $text);
+	}
+
+	// word segmentation
+	function stripForSearch( $string ) {
+		$fname="LanguageZh::stripForSearch";
+		wfProfileIn( $fname );
+
+		// eventually this should be a word segmentation
+		// for now just treat each character as a word
+		$t = preg_replace(
+				"/([\\xc0-\\xff][\\x80-\\xbf]*)/e",
+				"' ' .\"$1\"", $string);
+
+        //always convert to zh-cn before indexing. it should be
+		//better to use zh-cn for search, since conversion from
+		//Traditional to Simplified is less ambiguous than the
+		//other way around
+
+		$t = $this->mConverter->autoConvert($t, 'zh-cn');
+		$t = parent::stripForSearch( $t );
+		wfProfileOut( $fname );
+		return $t;
+
+	}
+
+	function convertForSearchResult( $termsArray ) {
+		$terms = implode( '|', $termsArray );
+		$terms = implode( '|', $this->mConverter->autoConvertToAllVariants( $terms ) );
+		$ret = array_unique( explode('|', $terms) );
+		return $ret;
+	}
+
+}
+?>
Index: /MediaWiki/branches/1.11/languages/classes/LanguageZh_cn.php
===================================================================
--- /MediaWiki/branches/1.11/languages/classes/LanguageZh_cn.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/classes/LanguageZh_cn.php	(revision 1280)
@@ -0,0 +1,26 @@
+<?php
+/**
+  * @addtogroup Language
+  */
+class LanguageZh_cn extends Language {
+	function stripForSearch( $string ) {
+		# MySQL fulltext index doesn't grok utf-8, so we
+		# need to fold cases and convert to hex
+		# we also separate characters as "words"
+		if( function_exists( 'mb_strtolower' ) ) {
+			return preg_replace(
+				"/([\\xc0-\\xff][\\x80-\\xbf]*)/e",
+				"' U8' . bin2hex( \"$1\" )",
+				mb_strtolower( $string ) );
+		} else {
+			list( , $wikiLowerChars ) = Language::getCaseMaps();
+			return preg_replace(
+				"/([\\xc0-\\xff][\\x80-\\xbf]*)/e",
+				"' U8' . bin2hex( strtr( \"\$1\", \$wikiLowerChars ) )",
+				$string );
+		}
+	}
+}
+
+
+?>
Index: /MediaWiki/branches/1.11/languages/classes/LanguageZh_yue.php
===================================================================
--- /MediaWiki/branches/1.11/languages/classes/LanguageZh_yue.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/classes/LanguageZh_yue.php	(revision 1280)
@@ -0,0 +1,26 @@
+<?php
+/**
+  * @addtogroup Language
+  */
+class LanguageZh_yue extends Language {
+	function stripForSearch( $string ) {
+		# MySQL fulltext index doesn't grok utf-8, so we
+		# need to fold cases and convert to hex
+		# we also separate characters as "words"
+		if( function_exists( 'mb_strtolower' ) ) {
+			return preg_replace(
+				"/([\\xc0-\\xff][\\x80-\\xbf]*)/e",
+				"' U8' . bin2hex( \"$1\" )",
+				mb_strtolower( $string ) );
+		} else {
+			list( , $wikiLowerChars ) = Language::getCaseMaps();
+			return preg_replace(
+				"/([\\xc0-\\xff][\\x80-\\xbf]*)/e",
+				"' U8' . bin2hex( strtr( \"\$1\", \$wikiLowerChars ) )",
+				$string );
+		}
+	}
+}
+
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesAb.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesAb.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesAb.php	(revision 1280)
@@ -0,0 +1,5 @@
+<?php
+
+$fallback = 'ru';
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesAf.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesAf.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesAf.php	(revision 1280)
@@ -0,0 +1,697 @@
+<?php 
+
+$skinNames = array(
+	'standard' => 'Standaard',
+	'nostalgia' => 'Nostalgie',
+	'cologneblue' => 'Keulen blou',
+);
+
+$namespaceNames = array(
+	NS_MEDIA          => 'Media',
+	NS_SPECIAL        => 'Spesiaal',
+	NS_MAIN           => '',
+	NS_TALK           => 'Bespreking',
+	NS_USER           => 'Gebruiker',
+	NS_USER_TALK      => 'Gebruikerbespreking',
+	# NS_PROJECT set by $wgMetaNamespace,
+	NS_PROJECT_TALK   => '$1bespreking',
+	NS_IMAGE          => 'Beeld',
+	NS_IMAGE_TALK     => 'Beeldbespreking',
+	NS_MEDIAWIKI      => 'MediaWiki',
+	NS_MEDIAWIKI_TALK => 'MediaWikibespreking',
+	NS_TEMPLATE       => 'Sjabloon',
+	NS_TEMPLATE_TALK  => 'Sjabloonbespreking',
+	NS_HELP           => 'Hulp',
+	NS_HELP_TALK      => 'Hulpbespreking',
+	NS_CATEGORY       => 'Kategorie',
+	NS_CATEGORY_TALK  => 'Kategoriebespreking'
+);
+
+# South Africa uses space for thousands and comma for decimal
+# Reference: AWS Reël 7.4 p. 52, 2002 edition
+# glibc is wrong in this respect in some versions
+$separatorTransformTable = array( ',' => "\xc2\xa0", '.' => ',' );
+$linkTrail = "/^([a-z]+)(.*)\$/sD";
+
+$messages = array(
+# User Toggles
+
+"tog-underline" => "Onderstreep skakels.",
+"tog-highlightbroken" => "Wys gebroke skakels <a href=\"\" class=\"new\">so</a> of so<a href=\"\" class=\"internal\">?</a>).",
+"tog-justify"	=> "Justeer paragrawe.",
+"tog-hideminor" => "Moenie klein wysigings in die nuwe wysigingslys wys nie.",
+"tog-usenewrc" => "Verbeterde nuwe wysigingslys (vir moderne blaaiers).",
+"tog-numberheadings" => "Automatiese nommer opskrifte.",
+"tog-showtoolbar" => "Show edit toolbar",
+"tog-rememberpassword" => "Onthou wagwoord oor sessies.",
+"tog-editwidth" => "Wysigingsboks met volle wydte.",
+"tog-editondblclick" => "Wysig blaaie met dubbelkliek (JavaScript).",
+"tog-watchdefault" => "Lys nuwe en gewysigde bladsye.",
+"tog-minordefault" => "Merk alle wysigings automaties as klein by verstek.",
+"tog-previewontop" => "Wys voorskou bo wysigingsboks.",
+
+# Dates
+'sunday' => 'Sondag',
+'monday' => 'Maandag',
+'tuesday' => 'Dinsdag',
+'wednesday' => 'Woensdag',
+'thursday' => 'Donderdag',
+'friday' => 'Vrydag',
+'saturday' => 'Saterdag',
+'january' => 'Januarie',
+'february' => 'Februarie',
+'march' => 'Maart',
+'april' => 'April',
+'may_long' => 'Mei',
+'june' => 'Junie',
+'july' => 'Julie',
+'august' => 'Augustus',
+'september' => 'September',
+'october' => 'Oktober',
+'november' => 'November',
+'december' => 'Desember',
+'jan' => '01',
+'feb' => '02',
+'mar' => '03',
+'apr' => '04',
+'may' => '05',
+'jun' => '06',
+'jul' => '07',
+'aug' => '08',
+'sep' => '09',
+'oct' => '10',
+'nov' => '11',
+'dec' => '12',
+
+
+# Bits of text used by many pages:
+#
+"mainpage"		=> "Tuisblad",
+"about"			=> "Omtrent",
+"aboutsite"      => "Inligting oor {{SITENAME}}",
+"aboutpage"		=> "{{ns:4}}:Omtrent",
+"help"			=> "Help",
+"helppage"		=> "{{ns:4}}:Hulp",
+"bugreports"	=> "Foutrapporte",
+"bugreportspage" => "{{ns:4}}:FoutRapporte",
+"faq"			=> "Gewilde vrae",
+"faqpage"		=> "{{ns:4}}:GewildeVrae",
+"edithelp"		=> "Wysighulp",
+"edithelppage"	=> "{{ns:4}}:Hoe_word_'n_bladsy_gewysig",
+"cancel"		=> "Kanselleer",
+"qbfind"		=> "Vind",
+"qbbrowse"		=> "Snuffel",
+"qbedit"		=> "Wysig",
+"qbpageoptions" => "Bladsy opsies",
+"qbpageinfo"	=> "Bladsy inligting",
+"qbmyoptions"	=> "My opsies",
+"mypage"		=> "My bladsy",
+"mytalk"		=> "My besprekings",
+"currentevents" => "Huidige gebeure",
+"errorpagetitle" => "Fout",
+"returnto"		=> "Keer terug na $1.",
+"whatlinkshere"	=> "Bladsye wat hierheen skakel",
+"help"			=> "Hulp",
+"search"		=> "Soek",
+"searchbutton"		=> "Soek",
+"go"		=> "Wys",
+'searcharticle'		=> "Wys",
+"history"		=> "Ouer weergawes",
+"printableversion" => "Drukbare weergawe",
+"editthispage"	=> "Wysig hierdie bladsy",
+"deletethispage" => "Skrap bladsy",
+"protectthispage" => "Beskerm hierdie bladsy",
+"unprotectthispage" => "Laat toe dat bladsy gewysig word",
+"newpage" => "Nuwe bladsy",
+"talkpage"		=> "Bespreek hierdie bladsy",
+"articlepage"	=> "Lees artikel",
+"userpage" => "Lees gebruikersbladsy",
+"projectpage" => "Lees metabladsy",
+"imagepage" => 	"Lees bladsy oor prent",
+"viewtalkpage" => "Lees bespreking",
+"otherlanguages" => "Ander tale",
+"redirectedfrom" => "(Van $1 aangestuur.)",
+"lastmodifiedat"	=> "Laaste wysiging op $2, $1.",
+"viewcount"		=> "Hierdie bladsy is al $1 keer aangevra.",
+"protectedpage" => "Beskermde bladsy",
+
+"nbytes"		=> "$1 grepe",
+"ok"			=> "Aanvaar", #fixMe
+"retrievedfrom" => "Ontsluit van \"$1\"",
+"newmessageslink" => "nuwe boodskappe",
+
+# Main script and global functions
+#
+"nosuchaction"	=> "Ongeldige aksie",
+"nosuchactiontext" => "Onbekende aksie deur die adres gespesifeer",
+"nosuchspecialpage" => "Ongeldige spesiale bladsy",
+"nospecialpagetext" => "Ongeldige spesiale bladsy gespesifeer.",
+
+# General errors
+#
+"error"			=> "Fout",
+"databaseerror" => "Databasisfout",
+"dberrortext"	=> "Sintaksisfout in databasisnavraag.
+Die laaste navraag was:
+<blockquote><tt>$1</tt></blockquote>
+van funksie \"<tt>$2</tt>\".
+MySQL foutboodskap \"<tt>$3: $4</tt>\".",
+"noconnect"		=> "Kon nie met databasis op $1 konnekteer nie",
+"nodb"			=> "Kon nie databasis $1 selekteer nie",
+"readonly"		=> "Databasis gesluit",
+"enterlockreason" => "Rede vir die sluiting,
+en beraming van wanneer ontsluiting sal plaas vind",
+"readonlytext"	=> "Die {{SITENAME}} databasis is tans gesluit vir nuwe
+artikelwysigings, waarskynlik vir roetine databasisonderhoud,
+waarna dit terug sal wees na normaal.
+Die administreerder wat dit gesluit het se verduideliking:
+<p>$1",
+"missingarticle" => "Die databasis het nie die teks van die veronderstelde bladsy \"$1\" gekry nie.
+Nie databasisfout nie, moontlik sagtewarefout.
+Raporteer die adres asseblief aan enige administrateur.",
+"internalerror" => "Interne fout",
+"filecopyerror" => "Kon nie lêer van \"$1\" na \"$2\" kopieer nie.",
+"filerenameerror" => "Kon nie lêernaam van \"$1\" na \"$2\" wysig nie.",
+"filedeleteerror" => "Kon nie lêer \"$1\" skrap nie.",
+"filenotfound"	=> "Kon nie lêer \"$1\" vind nie.",
+"unexpected"	=> "Onverwagte waarde: \"$1\"=\"$2\".",
+"formerror"		=> "Fout: kon vorm nie stuur nie",
+"badarticleerror" => "Die aksie kon nie op hierdie bladsy uitgevoer word nie.",
+"cannotdelete"	=> "Kon nie die bladsy of prent skrap nie, iemand anders het dit miskien reeds geskrap.",
+"badtitle"		=> "Ongeldige titel",
+"badtitletext"	=> "Die bladsytitel waarvoor gevra is, is ongeldig, leeg, of
+'n verkeerd geskakelde tussen-taal of tussen-wiki titel.",
+"perfdisabled" => "Hierdie funksie is afgeskakel tydens spitstoegangsure vir verrigtingsredes, probeer weer tussen 02:00z en 14:00z (Universeel Gekoördineerde Tyd - UGT).",
+
+# Login and logout pages
+#
+"logouttitle"	=> "Teken uit",
+"logouttext"	=> "Jy is nou uitgeteken, en kan aanhou om
+{{SITENAME}} anoniem te gebruik; of jy kan inteken as dieselfde of 'n ander gebruiker.",
+
+"welcomecreation" => "<h2>Welkom, $1.</h2><p>Jou rekening is geskep;
+moenie vergeet om jou persoonlike voorkeure te stel nie.",
+
+"loginpagetitle" => "Teken in",
+"yourname"		=> "Jou gebruikersnaam",
+"yourpassword"	=> "Jou wagwoord",
+"yourpasswordagain" => "Tik weer jou wagwoord in",
+"remembermypassword" => "Onthou my wagwoord oor sessies.",
+"loginproblem"	=> "<b>Daar was probleme met jou intekening.</b><br />Probeer weer.",
+"alreadyloggedin" => "<strong>Gebruiker $1, jy is reeds ingeteken.</strong><br />",
+
+"login"			=> "Teken in",
+"userlogin"		=> "Teken in",
+"logout"		=> "Teken uit",
+"userlogout"	=> "Teken uit",
+"createaccount"	=> "Kies nuwe wagwoord",
+"badretype"		=> "Die wagwoorde wat jy ingetik het, is nie dieselfde nie.",
+"userexists"	=> "Die gebruikersnaam wat jy gebruik het, is alreeds gebruik. Kies asseblief 'n ander gebruikersnaam.",
+"youremail"		=> "Jou e-pos",
+"yournick"		=> "Jou bynaam (vir stempel)",
+"loginerror"	=> "Intekenfout",
+"noname"		=> "Ongeldige gebruikersnaam.",
+"loginsuccesstitle" => "Suksesvolle intekening",
+"loginsuccess"	=> "Jy is ingeteken by {{SITENAME}} as \"$1\".",
+"nosuchuser"	=> "Daar is geen \"$1\" gebruikersnaam nie.
+Maak seker dit is reg gespel, of gebruik die vorm hier onder om 'n nuwe rekening te skep.",
+"wrongpassword"	=> "Ongeldige wagwoord, probeer weer.",
+"mailmypassword" => "Stuur my wagwword na my e-pos adres.",
+"passwordremindertitle" => "Wagwoordwenk van {{SITENAME}}",
+"passwordremindertext" => "Iemand (waarskynlik jy, van IP-adres $1)
+het gevra dat ons vir jou 'n nuwe {{SITENAME}} wagwoord stuur.
+Die wagwoord vir gebruiker \"$2\" is nou \"$3\".
+Teken asseblief in en verander jou wagwoord.",
+"noemail"		=> "Daar is geen e-pos adres vir gebruiker \"$1\" nie.",
+"passwordsent"	=> "Nuwe wagwoord gestuur na e-posadres vir \"$1\".
+Teken asseblief in na jy dit ontvang het.",
+
+# Edit pages
+#
+"summary"		=> "Opsomming",
+"minoredit"		=> "Klein wysiging",
+"watchthis"		=> "Hou bladsy dop",
+"savearticle"	=> "Stoor bladsy",
+"preview"		=> "Voorskou",
+"showpreview"	=> "Wys voorskou",
+"blockedtitle"	=> "Gebruiker is geblokkeer",
+"blockedtext"	=> "Jou gebruikersnaam of IP-adres is deur $1 geblokkeer:
+<br />''$2''<p>Jy mag $1 of een van die ander [[{{MediaWiki:grouppage-sysop}}|administreerders]] kontak
+om dit te bespreek.",
+"newarticle"	=> "(Nuut)",
+"newarticletext" =>
+"Die bladsy waarna geskakel is, bestaan nie.
+Om 'n nuwe bladsy te skep, tik in die invoerboks hier onder. Lees die [[{{MediaWiki:helppage}}|hulp bladsy]]
+vir meer inligting.
+Indien jy per ongeluk hier is, gebruik jou blaaier se '''terug''' knop.",
+"anontalkpagetext" => "---- ''Dit is die besprekingsbladsy vir 'n anonieme gebruiker wat nie 'n rekening geskep het nie. Ons moet dus hul IP-adres gebruik om hulle te identifiseer. So 'n IP-adres kan deur verskeie gebruikers gedeel word. Indien jy 'n anonieme gebruiker is wat voel dat oneerbiedige komentaar aan jou gerig is, [[Special:Userlogin|skep 'n rekening of teken in]] om verwarring te voorkom met ander anonieme gebruikers.''",
+"noarticletext" => "(Daar is tans geen inligting vir hierdie artikel nie.)",
+"updated"		=> "(Gewysig)",
+"note"			=> "<strong>Nota:</strong>",
+"previewnote"	=> "Onthou dat dit slegs 'n voorskou is en nog nie gestoor is nie!",
+"previewconflict" => "Hierdie voorskou reflekteer die teks in die boonste invoerboks soos dit sal lyk as jy dit stoor.",
+"editing"		=> "Besig om $1 te wysig",
+'editinguser'		=> "Besig om $1 te wysig",
+"editconflict"	=> "Wysigingskonflik: $1",
+"explainconflict" => "Iemand anders het hierdie bladsy gewysig sedert jy dit begin verander het.
+Die boonste invoerboks het die teks wat tans bestaan.
+Jou wysigings word in die onderste invoerboks gewys.
+Jy sal jou wysigings moet saamsmelt met die huidige teks.
+<strong>Slegs</strong> die teks in die boonste invoerboks sal gestoor word wanneer jy \"Stoor bladsy\" druk.<br />",
+"yourtext"		=> "Jou teks",
+"storedversion" => "Gestoorde weergawe",
+"editingold"	=> "<strong>Waarskuwing: jy is besig om 'n ou weergawe van hierdie bladsy te wysig.
+As jy dit stoor, sal enige wysigings sedert hierdie wysiging verloor word.</strong>",
+"yourdiff"		=> "Wysigings",
+/*"copyrightwarning" => "Alle bydraes aan {{SITENAME}} word beskou as beskikbaar gestel onder
+die ''GNU Free Documentation License'' (lees $1 vir meer inligting).
+As jy nie wil hê dat jou werk ongemagtig gewysig of versprei mag word nie, moet jy dit nie hier indien nie.<br />
+Jy belowe ons ook dat jy dit self geskryf het, of verkry het van 'n bron wat toelaat dat dit hier mag wees.<br />
+<strong>Moenie werk beskerm deur kopiereg sonder toestemming indien nie!</strong>",*/
+"longpagewarning" => "Waarskuwing: hierdie bladsy is $1 kilogrepe lank; sekere blaaiers
+kan probleme hê met die wysiging va blaaie langer as 32 kilogrepe. Breek asseblief die bladsy op in kleiner dele.",
+
+# History pages
+#
+"revhistory"	=> "Wysigingsgeskiedenis",
+"nohistory"		=> "Daar is geen wysigingsgeskiedenis vir hierdie bladsy nie.",
+"revnotfound"	=> "Wysiging nie gevind nie.",
+"revnotfoundtext" => "Die ou wysiging waarvoor jy gevra het, kon nie gevind word nie. Maak asseblief seker dat die adres wat jy gebruik
+het om toegang te kry tot hierdie bladsy, reg is.",
+"loadhist"		=> "Besig om bladsy wysigingsgeskiedenis te laai.",
+"currentrev"	=> "Huidige wysiging",
+"revisionasof"	=> "Wysiging soos op $1",
+"cur"			=> "huidige",
+"next"			=> "volgende",
+"last"			=> "vorige",
+"orig"			=> "oorspronklike",
+"histlegend"	=> "Byskrif: (huidige) = verskil van huidige weergawe,
+(vorige) = verskil van vorige weergawe, M = klein wysiging",
+
+# Diffs
+#
+"difference"	=> "(Verksil tussen weergawes)",
+"loadingrev"	=> "Besig om weergawe van verskil te laai.",
+"lineno"		=> "Lyn $1:",
+"editcurrent"	=> "Wysig die huidige weergawe van hierdie bladsy.",
+
+# Search results
+#
+"searchresults" => "soekresultate",
+"searchresulttext" => "Vir meer inligting oor {{SITENAME}} soekresultate, lees [[{{MediaWiki:helppage}}|{{int:help}}]].",
+"searchsubtitle"	=> "Vir navraag \"[[:$1]]\"",
+"searchsubtitleinvalid"	=> "Vir navraag \"$1\"",
+"badquery"		=> "Verkeerd gestelde navraag",
+"badquerytext"	=> "Ons kon nie jou naavraag prosesseer nie.
+Dit is miskien omdat jy gesoek het vir iets wat minder as drie letters bevat. Jy het miskien die navraag verkeerd ingetik.",
+"matchtotals"	=> "Die navraag \"$1\" pas $2 artikeltitels
+en teks in $3 artikels.",
+"noexactmatch" => "Geen bladsy met hierdie presiese titel bestaan nie, probeer 'n volteksnavraag.",
+"titlematches"	=> "Artikeltitel resultate",
+"notitlematches" => "Geen artikeltitel resultate nie",
+"textmatches"	=> "Artikelteks resultate",
+"notextmatches"	=> "Geen artikelteks resultate nie",
+"prevn"			=> "vorige $1",
+"nextn"			=> "volgende $1",
+"viewprevnext"	=> "Kyk na ($1) ($2) ($3).",
+"showingresults" => "Onder <b>$1</b> resultate, beginende met #<b>$2</b>.",
+"nonefound"		=> "<strong>Nota</strong>: onsuksesvolle navrae word gewoonlik veroorsaak deur 'n soektog met algemene
+woorde wat nie geindekseer word nie, of spesifisering van meer as een woord (slegs blaaie wat alle navraagwoorde
+bevat, word gewys).",
+"powersearch" => "Soek",
+"powersearchtext" => "
+Search in namespaces :<br />
+$1<br />
+$2 List redirects   Search for $3 $9", #fixMe
+
+
+# Preferences page
+#
+"preferences"	=> "Voorkeure",
+"prefsnologin" => "Nie ingeteken nie",
+"prefsnologintext"	=> "Jy moet [[Special:Userlogin|ingeteken wees]]
+om voorkeure te spesifiseer.",
+"prefsreset"	=> "Voorkeure is herstel.",
+"qbsettings"	=> "Snelbalkvoorkeure", #fixMe Quickbar settings
+'qbsettings-none'	=> 'Geen.',
+'qbsettings-fixedleft'	=> 'Links vas.',
+'qbsettings-fixedright'	=> 'Regs vas.',
+'qbsettings-floatingleft'	=> 'Dryf links.',
+'qbsettings-floatingright'	=> 'Dryf regs.',
+"changepassword" => "Verander wagwoord",
+"skin"			=> "Omslag",
+"math"			=> "Verbeeld wiskunde",
+"math_failure"		=> "Kon nie verbeeld nie",
+"math_unknown_error"	=> "onbekende fout",
+"math_unknown_function"	=> "onbekende funksie",
+"math_lexing_error"	=> "leksikale fout",
+"math_syntax_error"	=> "sintaksfout",
+"saveprefs"		=> "Stoor voorkeure",
+"resetprefs"	=> "Herstel voorkeure",
+"oldpassword"	=> "Ou wagwoord",
+"newpassword"	=> "Nuwe wagwoord",
+"retypenew"		=> "Tik nuwe wagwoord weer in",
+"textboxsize"	=> "Grootte van invoerboks",
+"rows"			=> "Rye",
+"columns"		=> "Kolomme",
+"searchresultshead" => "Soekresultaat voorkeure",
+"resultsperpage" => "Aantal resultate om te wys",
+"contextlines"	=> "Aantal lyne per resultaat",
+"contextchars"	=> "Karakters konteks per lyn",
+"stubthreshold" => "Drempel vir verkorte artikels",
+"recentchangescount" => "Aantal titels in onlangse wysigings",
+"savedprefs"	=> "Jou voorkeure is gestoor.",
+"timezonetext"	=> "Aantal ure wat plaaslike tyd verskil van UGT.",
+"localtime"	=> "Plaaslike tyd",
+"timezoneoffset" => "Teenrekening",
+
+# Recent changes
+#
+"changes" => "wysigings",
+"recentchanges" => "Onlangse wysigings",
+"rcnote"		=> "Hier onder is die laaste <strong>$1</strong> wysigings gedurende die laaste <strong>$2</strong> dae.",
+"rcnotefrom"	=> "Hier onder is die wysigings sedert <b>$2</b> (tot by <b>$1</b> word gewys).",
+"rclistfrom"	=> "Wys nuwe wysigings en begin by $1",
+"rclinks"		=> "Wys die laaste $1 wysigings in die laaste $2 dae.",
+"diff"			=> "verskil",
+"hist"			=> "geskiedenis",
+"hide"			=> "vat weg",
+"show"			=> "wys",
+"minoreditletter" => "K",
+"newpageletter" => "N",
+
+# Upload
+#
+"upload"		=> "Laai lêer",
+"uploadbtn"		=> "Laai lêer",
+"reupload"		=> "Herlaai",
+"reuploaddesc"	=> "Keer terug na die laaivorm.",
+"uploadnologin" => "Nie ingeteken nie",
+"uploadnologintext"	=> "Teken eers in [[Special:Userlogin|logged in]]
+om lêers te laai.",
+"uploaderror"	=> "Laaifout",
+"uploadtext"	=> "'''STOP!''' Voor jy hier laai, lees en volg {{SITENAME}} se
+[[{{MediaWiki:copyrightpage}}|beleid oor prentgebruik]].
+
+Om prente wat voorheen gelaai is te sien of te soek, gaan na die
+[[Special:Imagelist|lys van gelaaide prente]].
+Laai van lêers en skrappings word aangeteken in die
+[[{{ns:special}}:Log/upload|laailog]].
+
+Gebruik die vorm hier onder om nuwe prente te laai wat jy ter illustrasie in jou artikels wil gebruik.
+In die meeste webblaaiers sal jy 'n \"Browse...\" knop sien, wat jou bedryfstelsel se standaard lêeroopmaak dialoogblokkie sal oopmaak.
+Deur 'n lêer in hierdie dialoogkassie te kies, vul jy die teksboks naas die knop met die naam van die lêer.
+Jy moet ook die blokkie merk om te bevestig dat jy geen kopieregte skend deur die lêer op te laai nie.
+Kliek die \"Laai\" knop om die laai af te handel.
+Dit mag dalk 'n rukkie neem as jy 'n stadige internetverbinding het.
+
+Die voorkeurformate is JPEG vir fotografiese prente, PNG vir tekeninge en ander ikoniese prente, en OGG vir klanklêers.
+Gebruik asseblief beskrywende lêername om verwarring te voorkom.
+Om die prent in 'n artikel te gebruik, gebruik 'n skakel met die formaat '''<nowiki>[[</nowiki>{{ns:image}}<nowiki>:file.jpg]]</nowiki>''' of
+'''<nowiki>[[</nowiki>{{ns:image}}<nowiki>:file.png|alt text]]</nowiki>''' of
+'''<nowiki>[[</nowiki>{{ns:media}}<nowiki>:file.ogg]]</nowiki>''' vir klanklêers.
+
+Let asseblief op dat, soos met {{SITENAME}} bladsye, mag ander jou gelaaide lêers redigeer as hulle dink dit dien die ensiklopedie, en jy kan verhoed word om lêers te laai as jy die stelsel misbruik.",
+"uploadlog"		=> "laailog",
+"uploadlogpage" => "laai_log",
+"uploadlogpagetext" => "Hier onder is 'n lys van die mees onlangse lêers wat gelaai is.
+Alle tye is bedienertyd (UGT).
+<ul>
+</ul>",
+"filename"		=> "Lêernaam",
+"filedesc"		=> "Opsomming",
+"copyrightpage" => "{{ns:4}}:kopiereg",
+"copyrightpagename" => "{{SITENAME}} kopiereg",
+"uploadedfiles"	=> "Gelaaide lêers",
+"minlength"		=> "Prentname moet ten minste drie letters lank wees.",
+"badfilename"	=> "Prentnaam is verander na \"$1\".",
+"badfiletype"	=> "\".$1\" is nie 'n aanbevole lêerformaat vir prente nie.",
+"successfulupload" => "Laai suksesvol",
+"fileuploaded"	=> "Lêer \"$1\" suksesvol gelaai.
+Volg asseblief hierdie skakel: ($2) na die beskrywingsbladsy en vul inligting in oor die die lêer, soos waar dit vandaan kom, wie het dit geskep en wanneer, en enige iets anders wat jy daarvan af weet.",
+"uploadwarning" => "Laaiwaarskuwing",
+"savefile"		=> "Stoor lêer",
+"uploadedimage" => "Het \"[[$1]]\" gelaai",
+
+# Image list
+#
+"imagelist"		=> "Prentelys",
+"imagelisttext"	=> "Hier onder is a lys van $1 prente gesorteer $2.",
+"getimagelist"	=> "Besig om prentelys te haal",
+"ilsubmit"		=> "Soek",
+"showlast"		=> "Wys laaste $1 prente gesorteer $2.",
+"byname"		=> "volgens naam",
+"bydate"		=> "volgens datum",
+"bysize"		=> "volgens grootte",
+"imgdelete"		=> "skrap",
+"imgdesc"		=> "beskrywing",
+"imglegend"		=> "Legende: (beskrywing) = wys/verander prent se beskrywing.",
+"imghistory"	=> "Prentgeskiedenis",
+"revertimg"		=> "gaan terug",
+"deleteimg"		=> "skrap",
+"deleteimgcompletely"		=> "skrap",
+"imghistlegend" => "Legende: (huidig) = dit is die huidige prent, (skrap) = skrap hierdie ou weergawe, (gaan terug) = gaan terug na hierdie ou weergawe.
+<br /><i>Kliek die datum om die prent te sien wat op daardie datum gelaai is</i>.",
+"imagelinks"	=> "Prentskakels",
+"linkstoimage"	=> "Die volgende bladsye gebruik hierdie prent:",
+"nolinkstoimage" => "Daar is geen bladsye wat hierdie prent gebruik nie.",
+
+# Statistics
+#
+"statistics"	=> "Statistiek",
+"sitestats"		=> "Werfstatistiek",
+"userstats"		=> "Gebruikerstatistiek",
+"sitestatstext" => "Daar is 'n totaal van <b>$1</b> bladsye in die databasis.
+Dit sluit \"bespreek\" bladsye in, bladsye oor {{SITENAME}}, minimale \"verkorte\"
+bladsye, wegwysbladsye, en ander wat waarskynlik nie as artikels kwalifiseer nie.
+Uitsluitend bogenoemde, is daar <b>$2</b> bladsye wat waarskynlik ware artikels is.<p>
+Bladsye is al <b>$3</b> kere aangevra, en <b>$4</b> keer verander sedert die sagteware opgegradeer is (July 20, 2002).
+Dit werk uit op gemiddeld <b>$5</b> veranderings per bladsy, en bladsye word <b>$6</b> keer per verandering aangevra.",
+"userstatstext" => "Daar is <b>$1</b> geregistreerde gebruikers.
+<b>$2</b> van hulle is administrateurs (sien $3).",
+
+# Maintenance Page
+#
+"disambiguations"	=> "Bladsye wat onduidelikhede opklaar",
+"disambiguationspage"	=> "{{ns:4}}:Links_to_disambiguating_pages",
+"disambiguationstext"	=> "Die volgende artikels skakel na 'n <i>bladsy wat onduidelikhede opklaar</i>. Hulle behoort eerder na die relevante onderwerp te skakel.<br />'n Bladsy word gesien as een wat onduidelikhede opklaar as $1 daarna toe skakel.<br />Skakels van ander naamkontekste is <i>nie</i> hier gelys nie.",
+"doubleredirects"	=> "Dubbele aansture",
+"doubleredirectstext"	=> "<b>Let op:</b> Hierdie lys bevat moontlik false positiewe. Dit beteken gewoonlik dat daar nog teks met skakels onder die eerste #REDIRECT is.<br />\nElke ry bevat skakels na die eerste en die tweede aanstuur, asook die eerste reël van van die tweede aanstuurteks, wat gewoonlik die \"regte\" teikenbladsy gee waarna die eerste aanstuur behoort te wys.",
+"brokenredirects"	=> "Stukkende aansture",
+"brokenredirectstext"	=> "Die volgende aansture skakel na 'n bladsy wat nie bestaan nie.",
+
+
+# Miscellaneous special pages
+#
+"lonelypages"	=> "Weesbladsye",
+"unusedimages"	=> "Ongebruikte prente",
+"popularpages"	=> "Populêre bladsye",
+"nviews"		=> "$1 keer aangevra",
+"wantedpages"	=> "Gesogte bladsye",
+"nlinks"		=> "$1 skakels",
+"allpages"		=> "Alle bladsye",
+"randompage"	=> "Lukrake bladsy",
+"shortpages"	=> "Kort bladsye",
+"longpages"		=> "Lang bladsye",
+"listusers"		=> "Gebruikerslys",
+"specialpages"	=> "Spesiale bladsye",
+"spheading"		=> "Spesiale bladsye",
+"recentchangeslinked" => "Verwante veranderings",
+"rclsub"		=> "(na bladsye waarna \"$1\" skakel)",
+"newpages"		=> "Nuwe bladsye",
+"movethispage"	=> "Skuif hierdie bladsy",
+"unusedimagestext" => "<p>Let asseblief op dat ander webwerwe, soos die internasionale {{SITENAME}}s, dalk met 'n direkte URL na 'n prent skakel, so die prent sal dus hier verskyn al word dit aktief gebruik.", // TODO: grammar
+"booksources"	=> "Boekbronne",
+"booksourcetext" => "Hier onder is 'n lys van skakels na ander werwe wat nuwe en tweede handse boeke verkoop, en wat dalk ook verdere inligting het oor boeke waarna jy soek.
+{{SITENAME}} is nie geaffilieer aan enige van hierdie besighede nie en die lys moet nie as 'n aanbeveling gesien word nie.",
+
+# Email this user
+#
+"mailnologin"	=> "Geen verstuuradres",
+"mailnologintext" => "Jy moet [[Special:Userlogin|ingeteken]]
+wees en 'n geldige e-posadres in jou [[Special:Preferences|voorkeure]]
+hê om e-pos aan ander gebruikers te stuur.",
+"emailuser"		=> "Stuur e-pos na hierdie gebruiker",
+"emailpage"		=> "Stuur e-pos na gebruiker",
+"emailpagetext"	=> "As die gerbuiker 'n geldoge e-posadres in haar of sy gebruikersvoorkeure het, sal die vorm hier onder 'n enkele boodskap stuur.
+Die e-posadres wat jy in jou gebruikersvoorkeure het sal verkyn as die \"Van\" adres van die pos, so die ontvanger sal kan terug antwoord.",
+"noemailtitle"	=> "Geen e-posadres",
+"noemailtext"	=> "Hierdie gebruiker het nie 'n geldige e-posadres gespesifiseer nie of het gekies om nie e-pos van ander gebruikers te ontvang nie.",
+"emailfrom"		=> "Van",
+"emailto"		=> "Aan",
+"emailsubject"	=> "Onderwerp",
+"emailmessage"	=> "Boodskap",
+"emailsend"		=> "Stuur",
+"emailsent"		=> "E-pos gestuur",
+"emailsenttext" => "Jou e-pos is gestuur.",
+
+# Watchlist
+#
+"watchlist"		=> "My dophoulys",
+"mywatchlist"		=> "My dophoulys",
+"nowatchlist"	=> "Jy het geen items in jou dophoulys nie.",
+"watchnologin"	=> "Nie ingeteken nie",
+"watchnologintext"	=> "Jy moet [[Special:Userlogin|ingeteken]]
+wees om jou dophoulys te verander.",
+"addedwatch"	=> "Bygevoeg tot dophoulys",
+"addedwatchtext" => "Die bladsy \"$1\" is by jou <a href=\"" .
+  "{{localurle:Special:Watchlist}}\">dophoulys</a> gevoeg.
+Toekomstige veranderinge aan hierdie bladsye en sy geassosieerde Bespreekbladsy sal hier verskyn en die bladsy sal in <b>vetdruk</b> verskyn in die <a href=\"" .
+  "{{localurle:Special:Recentchanges}}\">lys van onlangse wysigings</a> om dit makliker te maak om dit raak te sien.
+
+As jy die bladsy later van jou dophoulys wil verwyder, kliek \"Moenie meer dophou\" in die kantbalk.",
+"removedwatch"	=> "Afgehaal van dophoulys",
+"removedwatchtext" => "Die bladsy \"$1\" is van jou dophoulys afgehaal.",
+"watchthispage"	=> "Hou hierdie bladsy dop",
+"unwatchthispage" => "Moenie meer dophou",
+"notanarticle"	=> "Nie 'n artikel",
+
+# Delete/protect/revert
+#
+"deletepage"	=> "Skrap bladsy",
+"confirm"		=> "Bevestig",
+"confirmdelete" => "Bevestig skrapping",
+"deletesub"		=> "(Besig om \"$1\" te skrap)",
+"confirmdeletetext" => "Jy staan op die punt om 'n bladsy of prent asook al hulle geskiedenis uit die databasis te skrap.
+Bevestig asseblief dat jy dit wil doen, dat jy die gevolge verstaan en dat jy dit doen in ooreenstemming met die [[{{MediaWiki:policy-url}}]].",
+'policy-url' => 'Project:Policy',
+"actioncomplete" => "Aksie uitgevoer",
+"deletedtext"	=> "\"$1\" is geskrap.
+Kyk na $2 vir 'n rekord van onlangse skrappings.",
+"deletedarticle" => "\"$1\" geskrap",
+"dellogpage"	=> "Skrap_log",
+"dellogpagetext" => "Hier onder is 'n lys van die mees onlangse skrappings. Alle tye is bedienertyd (UGT).
+<ul>
+</ul>",
+"deletionlog"	=> "skrappingslog",
+"reverted"		=> "Het terug gegaan na vroeëre weergawe",
+"deletecomment"	=> "Rede vir skrapping",
+"imagereverted" => "Terugkeer na vorige weergawe was suksesvol.",
+"rollback"		=> "Rol veranderinge terug",
+"rollbacklink"	=> "Rol terug",
+"cantrollback"	=> "Kan nie na verandering terug keer nie; die laaste bydraer is die enigste outer van hierdie bladsy.",
+"revertpage"	=> "Het teruggegaan na laaste verandering wat $1 gemaak het",
+
+# Undelete
+"undelete" => "Herstel geskrapte bladsy",
+"undeletepage" => "Bekyk en herstel geskrapte bladsye",
+"undeletepagetext" => "Die volgende bladsye is geskrap, maar hulle is nog in die argief en kan herstel word. Die argief kan periodiek skoongemaak word.",
+"undeletearticle" => "Herstel geskrapte bladsy",
+"undeleterevisions" => "$1 weergawes in argief",
+"undeletehistory" => "As jy die bladsy herstel, sal alle weergawes herstel word.
+As 'n nuwe bladsy met dieselfde naam sedert die skrapping geskep is, sal die herstelde weergawes in die nuwe bladsy se voorgeskiedenis verskyn en die huidige weergawe van die lewendige bladsy sal nie outomaties vervang word nie.",
+"undeleterevision" => "Geskrape weergawes vanaf $1",
+"undeletebtn" => "Herstel!",
+"undeletedarticle" => "het \"$1\" herstel",
+
+# Contributions
+#
+"contributions"	=> "Gebruikersbydraes",
+"mycontris" => "My bydraes",
+"contribsub2"	=> "Vir $1 ($2)",
+
+"nocontribs"	=> "Geen veranderinge wat by hierdie kriteria pas, is gevind nie.",
+"ucnote"		=> "Hier onder is die gebruiker se laaste <b>$1</b> veranderings in die laaste <b>$2</b> dae.",
+"uclinks"		=> "Bekyk die laaste $1 veranderings; bekyk die laaste $2 dae.",
+"uctop"		=> " (boontoe)" ,
+
+# What links here
+#
+"whatlinkshere"	=> "Wat skakel hierheen",
+"notargettitle" => "Geen teiken",
+"notargettext"	=> "Jy het nie 'n teikenbladsy of gebruiker waarmee hierdie funksie moet werk, gespesifiseer nie.",
+"linklistsub"	=> "(Lys van skakels)",
+"linkshere"		=> "Die volgende bladsye skakel hierheen:",
+"nolinkshere"	=> "Geen bladsye skakel hierheen nie.",
+"isredirect"	=> "Stuur bladsy aan",
+
+# Block/unblock IP
+#
+"blockip"		=> "Blok IP-adres",
+"blockiptext"	=> "Gebruik die vorm hier onder om skryftoegang van 'n sekere IP-adres te blok.
+Dit moet net gedoen word om vandalisme te voorkom en in ooreenstemming met [[{{MediaWiki:policy-url}}|{{SITENAME}} policy]].
+Vul 'n spesifieke rede hier onder in (haal byvoorbeeld spesifieke bladsye wat gevandaliseer is, aan).",
+"ipaddress"		=> "IP-Adres",
+"ipbreason"		=> "Rede",
+"ipbsubmit"		=> "Blok hierdie adres",
+"badipaddress"	=> "Die IP-adres is nie in die regte formaat nie.",
+"blockipsuccesssub" => "Blokkering het geslaag",
+"blockipsuccesstext" => "Die IP-adres \"$1\" is geblok.
+<br />Kyk na [[Special:Ipblocklist|IP block list]] vir 'n oorsig van blokkerings.",
+"unblockip"		=> "Maak IP-adres oop",
+"unblockiptext"	=> "Gebruik die vorm hier onder om skryftoegang te herstel vir 'n voorheen geblokkeerde IP-adres.",
+"ipusubmit"		=> "Maak hierdie adres oop",
+"ipblocklist"	=> "Lys van geblokkeerde IP-adresse",
+'blocklistline'	=> '$1, $2 het $3 geblok ($4)',
+"blocklink"		=> "blok",
+"unblocklink"	=> "maak oop",
+"contribslink"	=> "bydraes",
+
+# Developer tools
+#
+"lockdb"		=> "Sluit databasis",
+"unlockdb"		=> "Ontsluit databasis",
+"lockdbtext"	=> "As jy die databasis sluit, kan geen gebruiker meer bladsye redigeer nie, voorkeure verander nie, dophoulyste verander nie, of ander aksies uitvoer wat veranderinge in die databasis verg nie.
+Bevestig asseblief dat dit is wat jy wil doen en dat jy die databasis sal ontsluit sodra jy jou instandhouding afgehandel het.",
+"unlockdbtext"	=> "As jy die databasis ontsluit, kan gebruikers weer bladsye redigeer, voorkeure verander, dophoulyste verander, of ander aksies uitvoer wat veranderinge in die databasis verg.
+Bevestig asseblief dat dit is wat jy wil doen.",
+"lockconfirm"	=> "Ja, ek wil regtig die databasis sluit.",
+"unlockconfirm"	=> "Ja, ek wil regtig die databasis ontsluit.",
+"lockbtn"		=> "Sluit die databasis",
+"unlockbtn"		=> "Ontsluit die databasis",
+"locknoconfirm" => "Jy het nie die bevestigblokkie gemerk nie.",
+"lockdbsuccesssub" => "Databasissluit het geslaag",
+"unlockdbsuccesssub" => "Databasisslot is verwyder",
+"lockdbsuccesstext" => "Die {{SITENAME}} databasis is gesluit.
+<br />Onthou om dit te ontsluit wanneer jou onderhoud afgehandel is.",
+"unlockdbsuccesstext" => "Die {{SITENAME}} databasis is ontsluit.",
+
+# Move page
+#
+"movepage"		=> "Skuif bladsy",
+"movepagetext"	=> "Met die vorm hier onder kan jy 'n bladsy hernoem en so al sy geskiedenis na die nuwe naam skuif.
+Die ou titel sal 'n aanstuurbladsy na die nuwe titel word.
+Skakels na die ou bladsytitel sal nie verander nie; maak seker dat jy
+check vir dubbele of gebrekte aansture.
+Dis jou verantwoordelikheid om seker te maak dat skakels steeds wys waarheen hulle moet.
+
+Let op dat 'n bladsy '''nie''' geskuif sal word as daar reeds 'n bladsy met so 'n titel bestaan nie, tensy dit leeg is off 'n aanstuurbladsy is, en dit het geen veranderingsgeskiedenis nie. Dit beteken dat jy 'n bladsy kan hernoem na sy ou titel as jy 'n fout gemaak het, en jy kan nie oor 'n bestaande bladsy skryf nie.
+
+<b>WAARSKUWING!</b>
+Hierdie kan 'n drasitiese en onverwagte verandering vir 'n populêre bladsy wees;
+maak asseblief seker dat jy die gevolge verstaan voordat jy voortgaan.",
+"movepagetalktext" => "Die geassosieerde praatbladsy, indien enige, sal outomaties saam met dit geskuif word, '''behalwe as:'''
+*Jy die bladsy oor naamkontekste heen skuif,
+*'n Bespreekbladsy wat nie leeg is nie reeds onder die nuwe naam bestaan, of
+*Jy die merk uit blokkie hier onder wegneem.
+
+In hierdie gevalle, sal jy die bladsy met die hand moet skuif of saamsmelt as jy wil.",
+"movearticle"	=> "Skuif bladsy",
+"movenologin"	=> "Nie ingeteken nie",
+"movenologintext" => "Jy moet 'n geregistreerde gebruiker wees en [[Special:Userlogin|ingeteken]]
+wees om 'n bladsy te skuif.",
+"newtitle"		=> "Na nuwe titel",
+"movepagebtn"	=> "Skuif bladsy",
+"pagemovedsub"	=> "Verskuiwing het geslaag",
+"pagemovedtext" => "Bladsy \"[[$1]]\" geskuif na \"[[$2]]\".",
+"articleexists" => "'n Bladsy met daardie naam bestaan reeds, of die naam wat jy gekies het, is nie geldig nie.
+Kies asseblief 'n ander naam.",
+"talkexists"	=> "Die bladsy self is suksesvol verskuif, maar die bespreekbladsy kon nie geskuif word nie omdat een reeds bestaan met die nuwe titel. Smelt hulle asseblief met die hand saam.",
+"movedto"		=> "geskuif na",
+"movetalk"		=> "Skuif \"bespreek\"bladsy ook, indien van toepassing.",
+"talkpagemoved" => "Die ooreenkomstige bespreekbladsy is ook geskuif.",
+"talkpagenotmoved" => "Die ooreenkomstige bespreekbladsy is <strong>nie</strong> geskuif nie.",
+
+#Math
+'mw_math_png' => "Gebruik altyd PNG.",
+'mw_math_simple' => "Gebruik HTML indien dit eenvoudig is, andersins PNG.",
+'mw_math_html' => "Gebruik HTML wanneer moontlik, andersins PNG.",
+'mw_math_source' => "Los as TeX (vir teks blaaiers).",
+'mw_math_modern' => "Moderne blaaiers.",
+'mw_math_mathml' => 'MathML',
+
+);
+
+
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesAn.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesAn.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesAn.php	(revision 1280)
@@ -0,0 +1,24 @@
+<?php
+
+$namespaceNames = array(
+	NS_MEDIA          => 'Media',
+	NS_SPECIAL        => 'Espezial',
+	NS_MAIN           => '',
+	NS_TALK           => 'Descusión',
+	NS_USER           => 'Usuario',
+	NS_USER_TALK      => 'Descusión_usuario',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK   => 'Descusión_$1',
+	NS_IMAGE          => 'Imachen',
+	NS_IMAGE_TALK     => 'Descusión_imachen',
+	NS_MEDIAWIKI      => 'MediaWiki',
+	NS_MEDIAWIKI_TALK => 'Descusión_MediaWiki',
+	NS_TEMPLATE       => 'Plantilla',
+	NS_TEMPLATE_TALK  => 'Descusión_plantilla',
+	NS_HELP           => 'Aduya',
+	NS_HELP_TALK      => 'Descusión_aduya',
+	NS_CATEGORY       => 'Categoría',
+	NS_CATEGORY_TALK  => 'Descusión_categoría',
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesAr.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesAr.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesAr.php	(revision 1280)
@@ -0,0 +1,2029 @@
+<?php
+/** Arabic (العربية)
+  *
+  * @addtogroup Language
+  */
+
+$linkPrefixExtension = true;
+$fallback8bitEncoding = 'windows-1256';
+
+$rtl = true;
+$defaultUserOptionOverrides = array(
+	# Swap sidebar to right side by default
+	'quickbar' => 2,
+	# Underlines seriously harm legibility. Force off:
+	'underline' => 0,
+);
+
+$namespaceNames = array(
+	NS_MEDIA            => 'ملف',
+	NS_SPECIAL          => 'خاص',
+	NS_MAIN             => '',
+	NS_TALK             => 'نقاش',
+	NS_USER             => 'مستخدم',
+	NS_USER_TALK        => 'نقاش_المستخدم',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK     => 'نقاش' . '_$1',
+	NS_IMAGE            => 'صورة',
+	NS_IMAGE_TALK       => 'نقاش_الصورة',
+	NS_MEDIAWIKI        => 'ميدياويكي',
+	NS_MEDIAWIKI_TALK   => 'نقاش_ميدياويكي',
+	NS_TEMPLATE         => 'قالب',
+	NS_TEMPLATE_TALK    => 'نقاش_قالب',
+	NS_HELP             => 'مساعدة',
+	NS_HELP_TALK        => 'نقاش_المساعدة',
+	NS_CATEGORY         => 'تصنيف',
+	NS_CATEGORY_TALK    => 'نقاش_التصنيف'
+);
+
+$magicWords = array(
+	'redirect'            => array( 0, "#تحويل", "#REDIRECT" ),
+	'notoc'               => array( 0, "__لافهرس__", "__NOTOC__" ),
+	'nogallery'           => array( 0, "__لامعرض__", "__NOGALLERY__" ),
+	'forcetoc'            => array( 0, "__لصق_فهرس__", "__FORCETOC__" ),
+	'toc'                 => array( 0, "__فهرس__", "__TOC__" ),
+	'noeditsection'       => array( 0, "__لاتحريرقسم__", "__NOEDITSECTION__" ),
+	'start'               => array( 0, "__ابدأ__", "__START__" ),
+	'currentmonth'        => array( 1, "شهر", "شهر_حالي", "CURRENTMONTH" ),
+	'currentmonthname'    => array( 1, "اسم_شهر", "اسم_شهر_حالي", "CURRENTMONTHNAME" ),
+	'currentday'          => array( 1, "يوم", "CURRENTDAY" ),
+	'currentday2'         => array( 1, "يوم2", "CURRENTDAY2" ),
+	'currentdayname'      => array( 1, "اسم_يوم", "CURRENTDAYNAME" ),
+	'currentyear'         => array( 1, "عام", "CURRENTYEAR" ),
+	'currenttime'         => array( 1, "وقت", "CURRENTTIME" ),
+	'currenthour'         => array( 1, "ساعة", "CURRENTHOUR" ),
+	'localmonth'          => array( 1, "شهر_محلي", "LOCALMONTH" ),
+	'localmonthname'      => array( 1, "اسم_شهر_محلي", "LOCALMONTHNAME" ),
+	'localmonthabbrev'    => array( 1, "اختصار_شهر_محلي", "LOCALMONTHABBREV" ),
+	'localday'            => array( 1, "يوم_محلي", "LOCALDAY" ),
+	'localday2'           => array( 1, "يوم_محلي2", "LOCALDAY2" ),
+	'localdayname'        => array( 1, "اسم_يوم_محلي", "LOCALDAYNAME" ),
+	'localyear'           => array( 1, "عام_محلية", "LOCALYEAR" ),
+	'localtime'           => array( 1, "وقت_محلي", "LOCALTIME" ),
+	'localhour'           => array( 1, "ساعة_محلية", "LOCALHOUR" ),
+	'numberofpages'       => array( 1, "عددالصفحات", "عدد_الصفحات", "NUMBEROFPAGES" ),
+	'numberofarticles'    => array( 1, "عددالمقالات", "عدد_المقالات", "NUMBEROFARTICLES" ),
+	'numberoffiles'       => array( 1, "عددالملفات", "عدد_الملفات", "NUMBEROFFILES" ),
+	'numberofusers'       => array( 1, "عددالمستخدمين", "عدد_المستخدمين", "NUMBEROFUSERS" ),
+	'pagename'            => array( 1, "اسم_صفحة", "PAGENAME" ),
+	'pagenamee'           => array( 1, "عنوان_صفحة", "PAGENAMEE" ),
+	'namespace'           => array( 1, "نطاق", "NAMESPACE" ),
+	'namespacee'          => array( 1, "عنوان_نطاق", "NAMESPACEE" ),
+	'talkspace'           => array( 1, "نطاق_نقاش,نطاق_النقاش", "TALKSPACE" ),
+	'talkspacee'          => array( 1, "عنوان_نقاش,عنوان_النقاش", "TALKSPACEE" ),
+	'fullpagename'        => array( 1, "اسم_كامل", "FULLPAGENAME" ),
+	'fullpagenamee'       => array( 1, "عنوان_كامل", "FULLPAGENAMEE" ),
+	'msg'                 => array( 0, "رسالة:", "MSG:" ),
+	'subst'               => array( 0, "نسخ:", "نسخ_قالب:", "SUBST:" ),
+	'msgnw'               => array( 0, "مصدر:", "مصدر_قالب:", "MSGNW:" ),
+	'img_thumbnail'       => array( 1, "تصغير", "thumbnail", "thumb" ),
+	'img_manualthumb'     => array( 1, "تصغير=$1", "thumbnail=$1", "thumb=$1" ),
+	'img_right'           => array( 1, "يمين", "right" ),
+	'img_left'            => array( 1, "يسار", "left" ),
+	'img_none'            => array( 1, "بدون,بلا", "none" ),
+	'img_width'           => array( 1, "$1بك", "$1px" ),
+	'img_center'          => array( 1, "وسط", "center", "centre" ),
+	'img_framed'          => array( 1, "إطار", "اطار", "framed", "enframed", "frame" ),
+	'img_page'            => array( 1, "صفحة=$1", "صفحة $1", "page=$1", "page $1" ),
+	'int'                 => array( 0, "محتوى:", "INT:" ),
+	'sitename'            => array( 1, "اسم_الموقع", "SITENAME" ),
+	'ns'                  => array( 0, "نط:", "NS:" ),
+	'localurl'            => array( 0, "عنوان:", "LOCALURL:" ),
+	'server'              => array( 0, "العنوان", "SERVER" ),
+	'servername'          => array( 0, "اسم_عنوان", "SERVERNAME" ),
+	'scriptpath'          => array( 0, "مسار", "SCRIPTPATH" ),
+	'notitleconvert'      => array( 0, "لاتحويل_عنوان", "__NOTITLECONVERT__", "__NOTC__" ),
+	'nocontentconvert'    => array( 0, "لاتحويل_محتوى", "__NOCONTENTCONVERT__", "__NOCC__" ),
+	'currentweek'         => array( 1, "أسبوع", "CURRENTWEEK" ),
+	'currentdow'          => array( 1, "رقم_يوم_أسبوع", "CURRENTDOW" ),
+	'localweek'           => array( 1, "أسبوع_محلي", "LOCALWEEK" ),
+	'revisionid'          => array( 1, "نسخة", "REVISIONID" ),
+	'plural'              => array( 0, "جمع:", "PLURAL:" ),
+	'fullurl'             => array( 0, "عنوان_كامل:", "FULLURL:" ),
+	'newsectionlink'      => array( 1, "__رابط_قسم_جديد__", "__NEWSECTIONLINK__" ),
+	'language'            => array( 0, "#لغة:", "#LANGUAGE:" ),
+	'numberofadmins'      => array( 1, "عدد_إداريين", "عدد_الإداريين", "NUMBEROFADMINS" ),
+	'special'             => array( 0, "خاص", "special" ),
+);
+
+$skinNames = array(
+	'standard'    => array( "كلاسيك" ),
+	'nostalgia'   => array( "نوستالجيا" ),
+	'cologneblue' => array( "كولون بلو" ),
+	'davinci'     => array( "دافنشي" ),
+	'mono'        => array( "مونو" ),
+	'monobook'    => array( "مونوبوك" ),
+	'myskin'      => array( "واجهتي" ),
+	'chick'       => array( "تشيك" ),
+);
+
+$digitTransformTable = array(
+	'0' => '٠',
+	'1' => '١',
+	'2' => '٢',
+	'3' => '٣',
+	'4' => '٤',
+	'5' => '٥',
+	'6' => '٦',
+	'7' => '٧',
+	'8' => '٨',
+	'9' => '٩',
+	'.' => '٫', // wrong table?
+	',' => '٬'
+);
+
+$specialPageAliases = array(
+	'DoubleRedirects'           => array( "تحويلات_مزدوجة" ),
+	'BrokenRedirects'           => array( "تحويلات_مكسورة" ),
+	'Disambiguations'           => array( "توضيحات" ),
+	'Userlogin'                 => array( "دخول" ),
+	'Userlogout'                => array( "خروج" ),
+	'Preferences'               => array( "تفضيلات" ),
+	'Watchlist'                 => array( "المراقبة" ),
+	'Recentchanges'             => array( "أحدث_التغييرات" ),
+	'Upload'                    => array( "رفع" ),
+	'Imagelist'                 => array( "قائمة_الصور" ),
+	'Newimages'                 => array( "صور_جديدة" ),
+	'Listusers'                 => array( "قائمة_المستخدمين" ),
+	'Statistics'                => array( "احصاءات" ),
+	'Randompage'                => array( "عشوائي", "صفحة_عشوائية" ),
+	'Lonelypages'               => array( "صفحات_يتيمة" ),
+	'Uncategorizedpages'        => array( "صفحات_غير_مصنفة" ),
+	'Uncategorizedcategories'   => array( "تصنيفات_غير_مصنفة" ),
+	'Uncategorizedimages'       => array( "صور_غير_مصنفة" ),
+	'Unusedcategories'          => array( "تصنيفات_غير_مستخدمة" ),
+	'Unusedimages'              => array( "صور_غير_مستخدمة" ),
+	'Wantedpages'               => array( "صفحات_مطلوبة" ),
+	'Wantedcategories'          => array( "تصنيفات_مطلوبة" ),
+	'Mostlinked'                => array( "الأكثر_وصلا" ),
+	'Mostlinkedcategories'      => array( "التصنيفات_الأكبر" ),
+	'Mostcategories'            => array( "الصفحات_الأكثر_تصنيفا" ),
+	'Mostimages'                => array( "الصور_الأكثر_وصلا" ),
+	'Mostrevisions'             => array( "الأكثر_تعديلا" ),
+	'Fewestrevisions'           => array( "الأقل_تعديلا" ),
+	'Shortpages'                => array( "صفحات_قصيرة" ),
+	'Longpages'                 => array( "صفحات_طويلة" ),
+	'Newpages'                  => array( "صفحات_جديدة" ),
+	'Ancientpages'              => array( "صفحات_قديمة" ),
+	'Deadendpages'              => array( "صفحات_مسدودة" ),
+	'Protectedpages'            => array( "صفحات_محمية" ),
+	'Allpages'                  => array( "كل_الصفحات" ),
+	'Prefixindex'               => array( "فهرس" ),
+	'Ipblocklist'               => array( "قائمة_منع_أيبي" ),
+	'Specialpages'              => array( "صفحات_خاصة" ),
+	'Contributions'             => array( "مساهمات" ),
+	'Emailuser'                 => array( "رسالة_إلكترونية" ),
+	'Whatlinkshere'             => array( "ماذا_يصل" ),
+	'Recentchangeslinked'       => array( "تغييرات_مرتبطة" ),
+	'Movepage'                  => array( "نقل_صفحة" ),
+	'Blockme'                   => array( "منعي" ),
+	'Booksources'               => array( "مصدر_كتاب" ),
+	'Categories'                => array( "تصنيفات" ),
+	'Export'                    => array( "تصدير" ),
+	'Version'                   => array( "النسخة" ),
+	'Allmessages'               => array( "كل_الرسائل" ),
+	'Log'                       => array( "سجل" ),
+	'Blockip'                   => array( "منع_أيبي" ),
+	'Undelete'                  => array( "استرجاع" ),
+	'Import'                    => array( "استيراد" ),
+	'Lockdb'                    => array( "غلق_قاعدة" ),
+	'Unlockdb'                  => array( "فتح_قاعدة" ),
+	'Userrights'                => array( "صلاحيات" ),
+	'MIMEsearch'                => array( "بحث_MIME" ),
+	'Unwatchedpages'            => array( "صفحات_غيرمراقبة" ),
+	'Listredirects'             => array( "التحويلات" ),
+	'Revisiondelete'            => array( "إلغاء_تعديل" ),
+	'Unusedtemplates'           => array( "قوالب_غير_مستخدمة" ),
+	'Randomredirect'            => array( "تحويل_عشوائي" ),
+	'Mypage'                    => array( "صفحتي" ),
+	'Mytalk'                    => array( "نقاشي" ),
+	'Mycontributions'           => array( "مساهماتي" ),
+	'Listadmins'                => array( "عرض_الإداريين" ),
+	'Popularpages'              => array( "صفحات_مشهورة" ),
+	'Search'                    => array( "بحث" ),
+	'Resetpass'                 => array( "ضبط_كلمة_السر" ),
+	'Withoutinterwiki'          => array( "بدون_إنترويكي" ),
+);
+
+$messages = array(
+# User preference toggles
+'tog-underline'               => 'خط تحت الوصلات',
+'tog-highlightbroken'         => 'إظهار الوصلات المكسورة <a href="" class="new">بهذا الشكل</a> (البديل بهذا الشكل<a href="" class="internal">؟</a>).',
+'tog-justify'                 => 'اجعل عرض الأسطر في الفقرات متساوٍ',
+'tog-hideminor'               => 'خبئ التعديلات الطفيفة في أحدث التغييرات',
+'tog-extendwatchlist'         => 'تمديد قائمة المراقبة لإظهار جميع التغيرات المطبقة',
+'tog-usenewrc'                => 'شكل متقدم من صفحة أحدث التغييرات (يتطلب جافا سكريبت)',
+'tog-numberheadings'          => 'رقّم الأقسام تلقائيًا',
+'tog-showtoolbar'             => 'إظهار شريط التحرير (يتطلب جافا سكريبت)',
+'tog-editondblclick'          => 'اذهب إلى صفحة التحرير عند النقر المزدوج على المقالة (يتطلب جافا سكريبت)',
+'tog-editsection'             => 'تمكين تعديل الأقسام في المقال عن طريق وصلات [تحرير]',
+'tog-editsectiononrightclick' => 'مكّن تحرير الأقسام في المقال عن طريق كبسة الفأرة اليمين على عناوين الأقسام (يتطلب جافا سكريبت)',
+'tog-showtoc'                 => 'إظهار فهرس المحتويات (للمقالات التي تحتوي على أكثر من 3 أقسام)',
+'tog-rememberpassword'        => 'تذكر عبر الجلسات',
+'tog-editwidth'               => 'صندوق التحرير يأخذ كامل عرض المساحة المتاحة',
+'tog-watchcreations'          => 'أضف الصفحات التي أنشأها إلى قائمة مراقبتي',
+'tog-watchdefault'            => 'أضف الصفحات التي أقوم بتحريرها إلى قائمة مراقبتي',
+'tog-watchmoves'              => 'أضف الصفحات التي أنقلها إلى قائمة مراقبتي',
+'tog-watchdeletion'           => 'أضف الصفحات التي أمسحها إلى قائمة مراقبتي',
+'tog-minordefault'            => "خيار ''هذا تعديل طفيف'' هو الخيار الافتراضي",
+'tog-previewontop'            => 'إظهار العرض المسبق قبل صندوق التحرير',
+'tog-previewonfirst'          => 'اعرض الصفحة عند حفظها بعد أول تعديل',
+'tog-nocache'                 => 'امنع حفظ نسخة من الصفحة بعد زيارتها',
+'tog-enotifwatchlistpages'    => 'أرسل لي رسالة بالتغييرات على الصفحة',
+'tog-enotifusertalkpages'     => 'أرسل لي رسالة عندما يتم تحرير صفحة نقاشي',
+'tog-enotifminoredits'        => 'أرسل لي رسالة للتغييرات الطفيفة أيضًا',
+'tog-enotifrevealaddr'        => 'إظهار عنوان بريدي الإلكتروني في رسائل التنويه',
+'tog-shownumberswatching'     => 'إظهار عدد المستخدمين المراقبين للصفحة',
+'tog-fancysig'                => '<br />فقط توقيع (بدون وصلة أوتوماتيكية)',
+'tog-externaleditor'          => 'استخدم محرر نصوص خارجي تلقائيًا',
+'tog-externaldiff'            => 'استخدام برنامج خارجي لعرض الفروق',
+'tog-showjumplinks'           => 'تفعيل وصلات "اذهب إلى".',
+'tog-uselivepreview'          => 'استخدم الاستعراض السريع (جافاسكريبت) (تجريبي)',
+'tog-forceeditsummary'        => 'نبهني عند تركي خانة "الملخص" فارغة',
+'tog-watchlisthideown'        => 'أخف تعديلاتي من قائمة المراقبة',
+'tog-watchlisthidebots'       => 'أخف تعديلات البوت من قائمة المراقبة',
+'tog-watchlisthideminor'      => 'إخفاء التعديلات الطفيفة من قائمة مراقبتي',
+'tog-nolangconversion'        => 'تعطيل تحويل المتغيرات',
+'tog-ccmeonemails'            => 'إرسال نسخ من الرسائل التي أرسلها للمستخدمين الآخرين إلى بريدي الخاص',
+'tog-diffonly'                => 'لا تعرض محتوى الصفحة عند المقارنة بين التعديلات.',
+
+'underline-always'  => 'دائمًا',
+'underline-never'   => 'لا',
+'underline-default' => 'تبعًا لإعدادات المتصفح',
+
+'skinpreview' => '(عرض)',
+
+# Dates
+'sunday'        => 'الأحد',
+'monday'        => 'الاثنين',
+'tuesday'       => 'الثلاثاء',
+'wednesday'     => 'الأربعاء',
+'thursday'      => 'الخميس',
+'friday'        => 'الجمعة',
+'saturday'      => 'السبت',
+'sun'           => 'أحد',
+'mon'           => 'اثنين',
+'tue'           => 'ثلاثاء',
+'wed'           => 'الأربعاء',
+'thu'           => 'خميس',
+'fri'           => 'جمعة',
+'sat'           => 'سبت',
+'january'       => 'يناير',
+'february'      => 'فبراير',
+'march'         => 'مارس',
+'april'         => 'أبريل',
+'may_long'      => 'مايو',
+'june'          => 'يونيو',
+'july'          => 'يوليو',
+'august'        => 'أغسطس',
+'september'     => 'سبتمبر',
+'october'       => 'أكتوبر',
+'november'      => 'نوفمبر',
+'december'      => 'ديسمبر',
+'january-gen'   => 'يناير',
+'february-gen'  => 'فبراير',
+'march-gen'     => 'مارس',
+'april-gen'     => 'أبريل',
+'may-gen'       => 'مايو',
+'june-gen'      => 'يونيو',
+'july-gen'      => 'يوليو',
+'august-gen'    => 'أغسطس',
+'september-gen' => 'سبتمبر',
+'october-gen'   => 'أكتوبر',
+'november-gen'  => 'نوفمبر',
+'december-gen'  => 'ديسمبر',
+'jan'           => 'يناير',
+'feb'           => 'فبراير',
+'mar'           => 'مارس',
+'apr'           => 'أبريل',
+'may'           => 'مايو',
+'jun'           => 'يونيو',
+'jul'           => 'يوليو',
+'aug'           => 'أغسطس',
+'sep'           => 'سبتمبر',
+'oct'           => 'أكتوبر',
+'nov'           => 'نوفمبر',
+'dec'           => 'ديسمبر',
+
+# Bits of text used by many pages
+'categories'            => '{{PLURAL:$1|تصنيف الصفحة|تصنيفات الصفحة}}',
+'pagecategories'        => '{{PLURAL:$1|تصنيف الصفحة|تصنيفات الصفحة}}',
+'category_header'       => 'المقالات في التصنيف "$1"',
+'subcategories'         => 'التصنيفات الفرعية',
+'category-media-header' => 'الملفات في التصنيف "$1"',
+
+'mainpagetext'      => "<big>'''تم تشغيل ميدياويكي بنجاح.'''</big>",
+'mainpagedocfooter' => 'أنظر [http://meta.wikimedia.org/wiki/Help:Contents دليل المستخدم] لمعلومات حول استخدام الويكي.
+
+== البداية ==
+
+* [http://www.mediawiki.org/wiki/Help:Configuration_settings قائمة إعدادات الضبط]
+* [http://www.mediawiki.org/wiki/Help:FAQ اسئلة متكررة حول ميدياويكي]
+* [http://mail.wikimedia.org/mailman/listinfo/mediawiki-announce القائمة البريدية الخاصة باصدار ميدياويكي]',
+
+'about'          => 'حول',
+'article'        => 'مقالة',
+'newwindow'      => '(يفتح في شباك جديد)',
+'cancel'         => 'الغ',
+'qbfind'         => 'بحث',
+'qbbrowse'       => 'تصفح',
+'qbedit'         => 'تحرير',
+'qbpageoptions'  => 'هذه الصفحة',
+'qbpageinfo'     => 'سياق النص',
+'qbmyoptions'    => 'صفحاتي',
+'qbspecialpages' => 'الصفحات الخاصّة',
+'moredotdotdot'  => 'مزيد...',
+'mypage'         => 'صفحتي',
+'mytalk'         => 'صفحة نقاشي',
+'anontalk'       => 'تناقش مع عنوان الأيبي هذا',
+'navigation'     => 'تصفح',
+
+# Metadata in edit box
+'metadata_help' => 'معطيات ميتا:',
+
+'errorpagetitle'    => 'خطأ',
+'returnto'          => 'الرجوع إلى $1.',
+'tagline'           => 'من {{SITENAME}}',
+'help'              => 'مساعدة',
+'search'            => 'بحث',
+'searchbutton'      => 'بحث',
+'go'                => 'إذهب',
+'searcharticle'     => 'إذهب',
+'history'           => 'التاريخ',
+'history_short'     => 'التاريخ',
+'updatedmarker'     => 'تم تعديل الصفحة بعد آخر زيارة',
+'info_short'        => 'معلومات',
+'printableversion'  => 'نسخة للطباعة',
+'permalink'         => 'وصلة دائمة',
+'print'             => 'طباعة',
+'edit'              => 'تعديل',
+'editthispage'      => 'عدل هذه الصفحة',
+'delete'            => 'حذف',
+'deletethispage'    => 'حذف هذه الصفحة',
+'undelete_short'    => 'استرجاع {{PLURAL:$1|تعديل واحد|تعديلان|$1 تعديلات|$1 تعديل|$1 تعديلا}}',
+'protect'           => 'حماية',
+'protect_change'    => 'تغيير مستوى الحماية',
+'protectthispage'   => 'حماية هذه الصفحة',
+'unprotect'         => 'إزالة الحماية',
+'unprotectthispage' => 'إزالة الحماية عن الصفحة',
+'newpage'           => 'صفحة جديدة',
+'talkpage'          => 'ناقش هذه الصفحة',
+'talkpagelinktext'  => 'النقاش',
+'specialpage'       => 'صفحة خاصة',
+'personaltools'     => 'أدوات شخصية',
+'postcomment'       => 'أرسل تعليق',
+'articlepage'       => 'عرض المقالة',
+'talk'              => 'النقاش',
+'views'             => 'معاينة',
+'toolbox'           => 'أدوات',
+'userpage'          => 'عرض صفحة المستخدم',
+'projectpage'       => 'عرض الصفحة العامة',
+'imagepage'         => 'عرض صفحة الصورة',
+'mediawikipage'     => 'عرض صفحة الرسالة',
+'templatepage'      => 'عرض صفحة القالب',
+'viewhelppage'      => 'عرض صفحة المساعدة',
+'categorypage'      => 'عرض صفحة التصنيف',
+'viewtalkpage'      => 'عرض النقاش',
+'otherlanguages'    => ' لغات أخرى',
+'redirectedfrom'    => '(تم التحويل من $1)',
+'redirectpagesub'   => 'صفحة تحويل',
+'lastmodifiedat'    => 'آخر تعديل لهذه الصفحة كان في $2, $1.', # $1 date, $2 time
+'viewcount'         => 'تم عرض هذه الصفحة {{plural:$1|مرة واحدة|مرتان|$1 مرات|$1 مرة}}.',
+'protectedpage'     => 'صفحة محمية',
+'jumpto'            => 'اذهب إلى:',
+'jumptonavigation'  => 'تصفح',
+'jumptosearch'      => 'بحث',
+
+# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
+'aboutsite'         => 'حول {{SITENAME}}',
+'aboutpage'         => 'Project:حول',
+'bugreports'        => 'تقارير الأخطاء',
+'bugreportspage'    => 'Project:بلاغ_أخطاء',
+'copyright'         => 'المحتويات تحت  $1.',
+'copyrightpagename' => 'حقوق النسخ في {{SITENAME}}',
+'copyrightpage'     => 'Project:حقوق النسخ',
+'currentevents'     => 'الأحداث الجارية',
+'currentevents-url' => 'الأحداث الجارية',
+'disclaimers'       => 'عدم مسؤولية',
+'disclaimerpage'    => 'Project:عدم_مسؤولية_عام',
+'edithelp'          => 'مساعدة التحرير',
+'edithelppage'      => 'Project:مساعدة التحرير',
+'faq'               => 'الأسئلة الأكثر تكرارا',
+'faqpage'           => 'Project:أسئلة متكررة',
+'helppage'          => 'Help:محتويات',
+'mainpage'          => 'الصفحة الرئيسية',
+'policy-url'        => '{{ns:project}}:سياسة',
+'portal'            => 'بوابة المجتمع',
+'portal-url'        => 'Project:بوابة المجتمع',
+'privacy'           => 'سياسة الخصوصية',
+'privacypage'       => 'Project:سياسة الخصوصية',
+'sitesupport'       => 'التبرعات',
+'sitesupport-url'   => 'Project:دعم الموقع',
+
+'badaccess'        => 'خطأ في الصلاحيات المطلوبة',
+'badaccess-group0' => 'ليس من المسموح لك تنفيذ ما طلبت.',
+'badaccess-group1' => 'العمل الذي طلبتموه ينحصر في مجموعه مستخدمي $1.',
+'badaccess-group2' => 'العمل طلبتموه محدود للمستخدمين في احدى المجموعات $1 .',
+'badaccess-groups' => 'الأمر الذي طلبته مسموح به فقط من خلال أحد الأعضاء في المجموعات $1.',
+
+'versionrequired'     => 'يلزم الإصدار $1 من ميدياويكي',
+'versionrequiredtext' => 'يلزم الإصدار رقم $1 من ميدياويكي لاستعمال هذه الصفحة. انظر [[Special:Version|رقم الإصدار]]',
+
+'ok'                  => 'موافق',
+'pagetitle'           => '$1 - {{SITENAME}}',
+'retrievedfrom'       => 'تمّ الاسترجاع من "$1"',
+'youhavenewmessages'  => 'يوجد لديك $1 ($2).',
+'newmessageslink'     => 'رسائل جديدة',
+'newmessagesdifflink' => 'آخر تغيير',
+'editsection'         => 'تحرير',
+'editold'             => 'تحرير',
+'editsectionhint'     => 'تحرير القسم: $1',
+'toc'                 => 'فهرست',
+'showtoc'             => 'إظهار',
+'hidetoc'             => 'إخفاء',
+'thisisdeleted'       => 'هل تريد استعراض أو استرجاع $1؟',
+'viewdeleted'         => 'عرض $1؟',
+'restorelink'         => '{{PLURAL:$1|تعديل واحد محذوف|تعديلان محذوفان|$1 تعديلات محذوفة|$1 تعديل محذوف|$1 تعديلا محذوفا}}',
+'feedlinks'           => 'تلقيم:',
+'feed-invalid'        => 'نوع إشتراك التليقم خاطئ.',
+
+# Short words for each namespace, by default used in the 'article' tab in monobook
+'nstab-main'      => 'مقالة',
+'nstab-user'      => 'صفحة مستخدم',
+'nstab-media'     => 'صفحة ميديا',
+'nstab-special'   => 'خاص',
+'nstab-project'   => 'حول',
+'nstab-image'     => 'ملف',
+'nstab-mediawiki' => 'رسالة',
+'nstab-template'  => 'قالب',
+'nstab-help'      => 'مساعدة',
+'nstab-category'  => 'تصنيف',
+
+# Main script and global functions
+'nosuchaction'      => 'لا يوجد أمر كهذا',
+'nosuchactiontext'  => 'الأمر في مسار الصفحة لم يتم التعرف عليه من خلال الويكي',
+'nosuchspecialpage' => 'لا توجد صفحة خاصة بهذا الاسم',
+'nospecialpagetext' => 'لقد طلبت صفحة خاصة لا يمكن التعرف عليها من قبل نظام الويكي.',
+
+# General errors
+'error'                => 'خطأ',
+'databaseerror'        => 'خطأ في قاعدة البيانات',
+'dberrortext'          => 'حدث خطأ في صيغة الاستعلام.
+ربما يكون هذا عيب بالبرنامج.
+آخر استعلام طُلب من قاعدة البيانات كان:
+<blockquote><tt>$1</tt></blockquote>
+من داخل الدالة "<tt>$2</tt>".
+MySQL أرجعت الخطأ "<tt>$3: $4</tt>".',
+'dberrortextcl'        => 'حدث خطأ في صيغة الاستعلام.
+آخر استعلام طُلب من قاعدة البيانات كان:
+"$1"
+من داخل الدالة "$2".
+MySQL أرجعت الخطأ "$3: $4"',
+'noconnect'            => 'عفوا! تعاني الويكي من بعض المشاكل التقنية, و لا يمكن الاتصال بخادم قاعدة البيانات. <br />
+$1',
+'nodb'                 => 'لم يتمكن من اختيار قاعدة البيانات $1',
+'cachederror'          => 'هذه نسخة مخبأة من الصفحة المطلوبة, و قد لا تكون محدثة.',
+'laggedslavemode'      => 'تحذير: هذه الصفحة قد لا تحتوي على أحدث التغييرات.',
+'readonly'             => 'قاعدة البيانات مغلقة',
+'enterlockreason'      => 'اذكر سبب المنع والوقت المتوقع لإزالة المنع',
+'readonlytext'         => 'قاعدة البيانات مغلقة حاليا أمام الإضافات والتعديلات، السبب غالبا ما يكون الصيانة، وستعود قاعدة البيانات للوضع الطبيعي قريبا.
+عندما تم أغلاق قاعدة البيانات أمام التعديلات والإضافات تم أعطاء السبب التالي:
+<p>$1',
+'missingarticle'       => 'لم تعثر قاعدة البيانات على نص الصفحة المفترض، باسم "$1".
+
+عادة ما يكون السبب في ذلك اتّباع صفحة فروق قديمة أو وصلة لتاريخ صفحة محذوفة. إذا كنت تعتقد أن السبب غير ذلك، فمن الممكن أن يكون هنالك علة في البرنامج. الرجاء إعلام الإداريين عن هذا الخطأ مع ذكر الوصلة.',
+'internalerror'        => 'خطأ داخلي',
+'filecopyerror'        => 'لا يمكن نسخ الملف من  "$1" إلى "$2".',
+'filerenameerror'      => 'لا يمكن تغيير اسم الملف من  "$1" إلى "$2".',
+'filedeleteerror'      => 'لا يمكن حذف الملف "$1".',
+'filenotfound'         => 'لا يمكن إيجاد الملف "$1".',
+'unexpected'           => 'قيمة غير متوقعة: "$1"="$2".',
+'formerror'            => 'خلل: طلبك لم ينفذ',
+'badarticleerror'      => 'لا يمكن إجراء هذا الطلب على هذه الصفحة.',
+'cannotdelete'         => 'لم يتم مسح الصفحة أو الملف المطلوب. ( ربما يكون قد تم مسحه من قبل مستخدم آخر. )',
+'badtitle'             => 'عنوان خاطئ',
+'badtitletext'         => 'عنوان الصفحة المطلوبة إما خاطئ أو فارغ، و ربما الوصلة بين اللغات أو بين المشاريع خاطئة. ومن الممكن وجود رموز لا تصلح للاستعمال في العنوان.',
+'perfdisabled'         => 'عفوا! هذه الخاصية معطله حاليا لإنها تؤثر بشكل سلبي على أداء الويكي و تبطئها إلى حد استحالة استخدامها.',
+'perfdisabledsub'      => 'هذه نسخة محفوظة مسبقا من $1:', # obsolete?
+'perfcached'           => 'القائمة التالية تمّ تخزينها في وقت سابق وقد لا تكون محدّثة بعد:',
+'perfcachedts'         => 'البيانات التالية مخزنة سابقا، آخر تحديث لها كان في $1.',
+'querypage-no-updates' => 'تم تعطيل عمليات التحديث والإضافة لهذه الصفحة في الوقت الحالي. البيانات المعروضة هنا لن يتم تحديثها الأن.',
+'wrong_wfQuery_params' => 'معاملات خاطئة في wfQuery()<br />
+الدالة: $1<br />
+الاستعلام: $2',
+'viewsource'           => 'عرض المصدر للمقالة',
+'viewsourcefor'        => 'ل $1',
+'protectedpagetext'    => "'''تمت حماية هذه الصفحة لمنع التعديلات.'''",
+'viewsourcetext'       => 'يمكنك مشاهدة ونسخ مصدر هذه الصفحة:',
+'protectedinterface'   => 'هذه الصفحة تتضمن نص الواجهة للبرنامج ولقد تم إغلاقها لمنع التخريب.',
+'editinginterface'     => "'''تحذير''': أنت تقوم بتحرير صفحة تستخدم في الواجهة النصية للبرنامج. أية تغييرات لهذه الصفحة سوف تظهر في الواجهة لجميع المستخدمين الآخرين.",
+'sqlhidden'            => '(استعلام SQL مخبئ)',
+'cascadeprotected'     => 'تمت حماية هذه الصفحة من التعديل بسبب كونها مدمجة في الصفحات التالية، والتي تم استعمال خاصية "حماية الصفحات المدمجة" بها:',
+
+# Login and logout pages
+'logouttitle'                => 'خروج المستخدم',
+'logouttext'                 => 'أنت الآن غير مسجل الدخول للنظام.
+تستطيع المتابعة باستعمال {{SITENAME}} كمجهول، أو الدخول مرة أخرى بنفس الاسم أو باسم آخر. من الممكن أن ترى بعض الصفحات في كما وأنك مسجل في النظام.، وذلك بسبب استعمال الصفحات المخبأة في المتصفح لديك.',
+'welcomecreation'            => '== أهلا بك يا $1! ==
+تم إنشاء حسابك بنجاح. لا تنسى أن تقوم بتغيير وتحديد تفضيلاتك في {{SITENAME}}.',
+'loginpagetitle'             => 'دخول المستخدم',
+'yourname'                   => 'اسم المستخدم',
+'yourpassword'               => 'كلمة السر',
+'yourpasswordagain'          => 'أعد كتابة كلمة السر',
+'remembermypassword'         => 'تذكر كلمة السر عبر الجلسات.',
+'yourdomainname'             => 'النطاق الخاص بك',
+'externaldberror'            => 'هناك إما خطأ في دخول قاعدة البيانات الخارجية أو أنه غير مسموح لك بتحديث حسابك الخارجي.',
+'loginproblem'               => '<b>حدثت مشكلة أثناء الدخول.</b><br />يرجى المحاولة مرى أخرى!',
+'alreadyloggedin'            => '<strong>$1، أنت مسجل للدخول من قبل!</strong><br />',
+'login'                      => 'دخول',
+'loginprompt'                => 'يجب أن يدعم متصفحك الكوكيز لتتمكن من الدخول.',
+'userlogin'                  => 'دخول / إنشاء حساب',
+'logout'                     => 'خروج',
+'userlogout'                 => 'خروج',
+'notloggedin'                => 'غير مسجل',
+'nologin'                    => 'لم تشترك بعد؟ $1.',
+'nologinlink'                => 'قم بإنشاء حساب',
+'createaccount'              => 'أنشئ حسابا جديدا',
+'gotaccount'                 => 'هل قمت بالتسجيل سابقا؟ $1.',
+'gotaccountlink'             => 'دخول',
+'createaccountmail'          => 'عبر البريد الإلكتروني',
+'badretype'                  => 'كلمات السر التي أدخلتها غير متطابقة.',
+'userexists'                 => 'اسم المستخدم الذي إخترته مستخدم من قبل، يرجى إختيار اسم مستخدم آخر.',
+'youremail'                  => 'بريدك الإلكتروني*',
+'username'                   => 'اسم المستخدم:',
+'uid'                        => 'رقم المستخدم:',
+'yourrealname'               => 'اسمك الحقيقي*',
+'yourlanguage'               => 'اللغة',
+'yourvariant'                => 'مختلف',
+'yournick'                   => 'اللقب الخاص بك (للتواقيع)',
+'badsig'                     => 'صيغة توقيع خاطئة؛ تحقق من بيانات الHTML.',
+'email'                      => 'البريد الإلكتروني',
+'prefs-help-email-enotif'    => 'يستخدم هذا العنوان أيضا في إرسال تنبيهات البريد الإلكتروني إليك لو قمت بتفعيل تلك الخيارات.',
+'prefs-help-realname'        => '* الاسم الحقيقي (اختياري): لو اخترت أن تعرض اسمك هنا, سيستخدم هذا في الإشارة إلى مساهماتك.',
+'loginerror'                 => 'خطأ في الدخول',
+'prefs-help-email'           => '* البريد الإلكتروني هو مدخل اختياري يمكّن الآخرين من الاتصال بك عن طريق صفحتك أو صفحة نقاشك من دون معرفة عنوانك.',
+'nocookiesnew'               => 'تم إنشاء حساب المستخدم و لكنك لست مسجل الدخول بعد. يستخدم {{SITENAME}} كوكيز لتسجيل الدخول. لديك الكوكيز معطلة. من فضلك فعلها, ثم أدخل باسم الحساب و كلمة السر الجديدتين.',
+'nocookieslogin'             => '{{SITENAME}} يستخدم الكوكيز لتسجيل الدخول. لديك الكوكيز معطلة. من فضلك فعلها, ثم أدخل باسم الحساب و كلمة السر الجديدتين.
+n.',
+'noname'                     => 'لم تحدد اسم مستخدم صحيح.',
+'loginsuccesstitle'          => 'تم الدخول بشكل صحيح',
+'loginsuccess'               => 'لقد قمت بتسجيل الدخول ل{{SITENAME}} باسم "$1".',
+'nosuchuser'                 => 'لا يوجد مستخدم بالاسم "$1".
+تأكد من إملاء الاسم، أو استعمل النموذج الموجود في الأسفل لإنشاء مستخدم جديد.',
+'nosuchusershort'            => 'لا يوجد مستخدم باسم "$1"، تأكد من كتابة الاسم الذي تريده بالطريقة الصحيحة.',
+'nouserspecified'            => 'يجب عليك تحديد اسم المستخدم',
+'wrongpassword'              => 'كلمة السر التي أدخلتها غير صحيحة، يرجى إعادة المحاولة.',
+'wrongpasswordempty'         => 'لقد أدخلت كلمة سر فارغة. حاول مرة أخرى.',
+'mailmypassword'             => 'أرسل لي كلمة السر عبر البريد الإلكتروني.',
+'passwordremindertitle'      => 'تذكير بكلمة السر من {{SITENAME}}',
+'passwordremindertext'       => 'لقد طلب شخص ما (غالبًا أنت، من عنوان الأيبي $1) أن نرسل لك كلمة سر جديدة لـ{{SITENAME}} ($4).
+
+كلمة السرّ الآن للمستخدم "$2" هي "$3". 
+عليك أن تقوم بالدخول إلى الموقع وتغيير كلمة السر خاصتك الآن إلا إذا لم تكن أنت من طلب هذا، اقرأ أدناه في هذه الحالة.
+
+إذا لم تكن أنت من قام بطلب كلمة السرّ أو أنك تذكرّت كلمة السرّ السابقة ولا ترغب بتغييرها فبإمكانك أن تتغاضى عن هذه الرسالة وأن تستمر في استخدام كلمة السرّ السابقة خاصتك.',
+'noemail'                    => 'لا يوجد أي عنوان بريدي مسجل للمستخدم "$1".',
+'passwordsent'               => 'تم إرسال كلمة سر جديدة إلى العنوان البريدي المسجل للمستخدم "$1".
+يرجى محاولة تسجيل الدخول مرة أخرى عند استلامها.',
+'blocked-mailpassword'       => 'تم منع العنوان الخاص بك من التحرير، ولمنع التخريب لا يمكنك أن تستخدم خاصية استرجاع كلمة السر.',
+'eauthentsent'               => 'تم إرسال رسالة إلكترونية إلى العنوان المسمى. حتى ترسل أي رسالة أخرى لذلك الحساب عليك أن تتبع التعليمات الواردة في الرسالة لتأكيد أن هذا العنوان هو لك بالفعل.',
+'throttled-mailpassword'     => 'تم بالفعل إرسال تذكير بكلمة السر، في خلال الـ$1 ساعة الماضية.
+لمنع التخريب، تذكير واحد فقط سيتم إرساله كل
+$1 ساعة.',
+'mailerror'                  => 'خطأ أثناء إرسال البريد: $1',
+'acct_creation_throttle_hit' => 'معذرة، لقد قمت بإنشاء $1 حساب. لا يمكنك عمل المزيد.',
+'emailauthenticated'         => 'تم تأكيد بريدك الإلكتروني على $1.',
+'emailnotauthenticated'      => '<strong>لم يتمّ التحقق</strong> من بريدك الإلكتروني. لن يتمّ إرسال رسائل لأي من الميزات التالية.',
+'noemailprefs'               => '<strong>يجب إعطاء بريد إلكتروني لتفعيل هذه الخصائص.</strong>',
+'emailconfirmlink'           => 'أكد بريدك الإلكتروني',
+'invalidemailaddress'        => 'لا يمكن قبول العنوان الإلكتروني الذي زودته حيث يبدو خاطئا. من فضلك ضع عنوانا مضبوطا أو أفرغ هذا الحقل.',
+'accountcreated'             => 'تم إنشاء الحساب',
+'accountcreatedtext'         => 'تم إنشاء الحساب الخاص ب$1.',
+
+# Password reset dialog
+'resetpass'               => 'إعادة ضبط كلمة سر الحساب',
+'resetpass_announce'      => 'تم تسجيل دخولك بكلمة سر مؤقتة. للدخول بشكل نهائي، يجب عليك ضبط كلمة سر جديدة هنا:',
+'resetpass_text'          => '<!-- أضف نصا هنا -->',
+'resetpass_header'        => 'إعادة ضبط كلمة السر',
+'resetpass_submit'        => 'ضبط كلمة السر والدخول',
+'resetpass_success'       => 'تم تغيير كلمة السر بنجاخ! يتم تسجيل دخولك الأن...',
+'resetpass_bad_temporary' => 'كلمة السر المؤقتة خاطئة. ربما تم تغيير كلمة السر فعليا بنجاح أو ربما قمت بطلب كلمة سر مؤقتة جديدة.',
+'resetpass_forbidden'     => 'لا يمكن تغيير كلمات السر على هذه الويكي',
+'resetpass_missing'       => 'لم يتم استقبال بيانات',
+
+# Edit page toolbar
+'bold_sample'     => 'نص عريض',
+'bold_tip'        => 'نص عريض',
+'italic_sample'   => 'نص مائل',
+'italic_tip'      => 'نص مائل',
+'link_sample'     => 'عنوان وصلة',
+'link_tip'        => 'وصلة داخلية',
+'extlink_sample'  => 'http://www.example.com نص الوصلة',
+'extlink_tip'     => 'وصلة خارجية (تذكر إضافة http:// قبل عنوان الوصلة)',
+'headline_sample' => 'نص عنوان رئيسي',
+'headline_tip'    => 'عنوان من المستوى الثاني',
+'math_sample'     => 'أدخل الصيغة هنا',
+'math_tip'        => 'صيغة رياضية',
+'nowiki_sample'   => 'أدخل النص غير المنسق هنا',
+'nowiki_tip'      => 'أهمل تهيئة الويكي',
+'image_sample'    => 'اسم الصورة|تصغير|تعليق',
+'image_tip'       => 'إدراج صورة',
+'media_tip'       => 'وصلة ملف وسائط',
+'sig_tip'         => 'توقيعك من الساعة والتاريخ',
+'hr_tip'          => 'خط أفقي (تجنب الاستخدام بكثرة)',
+
+# Edit pages
+'summary'                   => 'ملخص',
+'subject'                   => 'موضوع',
+'minoredit'                 => 'هذا تعديل طفيف',
+'watchthis'                 => 'راقب هذه الصفحة',
+'savearticle'               => 'حفظ الصفحة',
+'preview'                   => 'عرض مسبق',
+'showpreview'               => 'عرض التعديلات',
+'showlivepreview'           => 'عرض مباشر',
+'showdiff'                  => 'أظهر الفرق',
+'anoneditwarning'           => "'''تحذير:''' لم تقم بالدخول. سيتم تسجيل عنوان الأيبي الخاص بك في تاريخ هذه الصفحة.",
+'missingsummary'            => "'''تنبيه:''' لم تقم بكتابة ملخص للتعديل الذي قمت به. إذا قمت باختيار «حفظ» مرة أخرى فسوف يحفظ تغييرك بلا ملخص.",
+'missingcommenttext'        => 'الرجاء كتابة تعليق في الأسفل.',
+'missingcommentheader'      => "'''تنبيه:''' لم تقم بوضع عنوان لهذا التعليق، إذا قمت بالضغط على ''حفظ الصفحة'' مجددا، سيتم حفظ تعليقك بدون عنوان.",
+'summary-preview'           => 'عرض مسبق للملخص',
+'subject-preview'           => 'معاينة العنوان',
+'blockedtitle'              => 'المستخدم ممنوع',
+'blockedtext'               => "<big>'''تم منع اسم المستخدم أو عنوان الأيبي الخاص بك.'''</big>
+
+سبب المنع هو: ''$2''. وقام بالمنع $1.
+
+من الممكن التواصل مع $1 للنقاش حول المنع، أو مع أحد [[{{MediaWiki:grouppage-sysop}}|الإداريين]] حول ذلك>
+تذكر أنه لا يمكن لك استعمال خاصية إرسال رسائل إلكترونية للمستخدمين إلا إذا كنت قد وضعت عنوان بريدي صحيح في صفحة [[Special:Preferences|التفضيلات]] الخاصة بك.
+
+عنوان ال IP الخاص بك حاليا هو $3 وكود المنع هو #$5. يرجى إضافة أيهما أو كلاهما في أي رسالة للتساؤل حول المنع.",
+'blockedoriginalsource'     => "مصدر '''$1''' ظاهر هنا:",
+'blockededitsource'         => "مبين بالأسفل نص '''تعديلك''' في '''$1''':",
+'whitelistedittitle'        => 'الولوج ضروري للتحرير',
+'whitelistedittext'         => 'يجب عليك $1 لتتمكن من تعديل الصفحات.',
+'whitelistreadtitle'        => 'الولوج ضروري للقراءة',
+'whitelistreadtext'         => 'يتعين عليك [[Special:Userlogin|الولوج]] لتتمكن من قراءة الصفحات.',
+'whitelistacctitle'         => 'لا يسمح لك بإنشاء إشتراك',
+'whitelistacctext'          => 'حتى يُسمح لك بإنشاء حسابات في هذه الويكي عليك أن تقوم [[Special:Userlogin|بالدخول]] وأن تمتلك الصلاحيات المناسبة.',
+'confirmedittitle'          => 'تأكيد البريد الإلكتروني مطلوب لبدء التعديل',
+'confirmedittext'           => 'يجب عليك تأكيد بريدك الإلكتروني قبل التعديل. من فضلك اكتب و أكد بريدك الإلكتروني من خلال [[Special:Preferences|تفضيلاتك]]',
+'nosuchsectiontitle'        => 'لا يوجد قسم بهذا الاسم',
+'nosuchsectiontext'         => 'لقد حاولت تحرير قسما غير موجودا. وحيث أنه لا يوجد القسم $1، فلا يمكن حفظ تعديلك.',
+'loginreqtitle'             => 'مطلوب الدخول أولا.',
+'loginreqlink'              => 'دخول',
+'loginreqpagetext'          => 'يجب عليك $1 لتشاهد صفحات أخرى.',
+'accmailtitle'              => 'تم إرسال كلمة السر.',
+'accmailtext'               => "تم إرسال كلمة السر الخاصة بـ '$1' إلى العنوان $2.",
+'newarticle'                => '(جديد)',
+'newarticletext'            => "لقد تبعت وصلة لصفحة لم يتم إنشائها بعد.
+لإنشاء هذه الصفحة إبدأ بالكتابة في الصندوق بالأسفل.
+(أنظر في [[{{MediaWiki:helppage}}|صفحة المساعدة]] للمزيد من المعلومات)
+إذا كانت زيارتك لهذه الصفحة بالخطأ، إضغم على زر ''رجوع'' في متصفح الإنترنت لديك.",
+'anontalkpagetext'          => '----
+هذه صفحة نقاش لمستخدم مجهول، وهو المستخدم الذي لم يقم بإنشاء حساب في {{SITENAME}}، أو لا يستعمل ذلك الحساب.
+لذا يتم استعمال رقم ال IP للتعريف به. من الممكن أن يشترك عدد من المستخدمين بنفس رقم ال IP. إذا كنت مستخدم مجهول
+وترى أن رسائل خير موجهة لك قد وصلتك، من الممكن أن تقوم [[Special:Userlogin|بإنشاء حساب أو القيام بالدخول]]
+حتى يزول الخلط بينك وبين المستخدمين المجهولين الآخرين.',
+'noarticletext'             => '(لا يوجد حاليا أي نص في هذه الصفحة)',
+'clearyourcache'            => "ملاحظة: قم بإعادة تحميل الصفحة لرؤية التغييرات. إذا لم تظهر التغييرات بعد إعادة التحميل، قد يكون متصفح الإنترنت الذي تستخدمه يقوم بعرض نسخة مخزنة سابقًا. لتجنب عرض هذه النسخة، قد يلزم أن تقوم بأحد هذه الخطوات:
+* في متصفح '''موزيلا''' أو '''فايرفوكس''' أو '''سفاري''' اضغظ على ''مفتاح Shift'' أثناء قيامك بضغط زر إعادة التحميل (''Refresh'') أو اضغط ''Ctrl-Shift-R'' (''Cmd-Shift-R'' في حاسب أبل).
+* في متصفح '''إنترنت إكسبلورر''' اضغط على مفتاح ''Ctrl'' أثناء قيامك بالنقر على زر إعادة التحميل (''Refresh'') أو اضغط ''Ctrl-F5''.
+* في متصفح''' كونكيرر''' (Konqueror) انقر على زر إعادة التحميل (''Reload'') أو اضغط على مفتاح '''F5'''.
+* في متصفح '''أوبرا''' (Opera) قد يكون من الضروري مسح المحتويات المخزنة عن طريق قائمة التفضيلات (''Tools&rarr;Preferences'').",
+'usercssjsyoucanpreview'    => "<strong>ملاحظة:</strong> استعمل زرّ 'عرض التعديلات' لتجربة النمط (CSS) أو الجافا سكريبت الجديد قبل حفظ الصفحة.",
+'usercsspreview'            => "'''تذكر أنك تقوم بعرض الأنماط المتراصة (CSS) فقط وأنك لم تقم بحفظها بعد!'''",
+'userjspreview'             => "'''تذكر أنك فقط تجرب/تعرض الجافا سكريبت الخاص بك, لم يتم الحفظ بعد!'''",
+'userinvalidcssjstitle'     => "'''تحذير:''' لا توجد واجهة  \"\$1\". تذكر أن ملفات ال.css و ال.js تستخدم حروف صغيرة في العنوان , كمثال User:Foo/monobook.css و ليس User:Foo/Monobook.css.",
+'updated'                   => '(محدثة)',
+'note'                      => '<strong>ملاحظة:</strong>',
+'previewnote'               => 'تذكر، هذا فقط عرض مسبق للصفحة، ولم يتم حفظه بعد!',
+'previewconflict'           => 'العرض يوضح النص الموجود في صندوق التحرير العلوي و الذي سيظهر إذا اخترت الحفظ.',
+'session_fail_preview'      => '<strong>عفوًا! لم نتمكن من حفظ التعديلات التي قمت بها نتيجة لضياع في المعلومات في هذه الجلسة. الرجاء المحاولة مرة أخرى. في حال استمرار المشكلة حاول أن تقوم بالخروج ومن ثم الدخول مرة أخرى.</strong>',
+'session_fail_preview_html' => "<strong>عذرًا ! لا نستطيع تسجيل تعديلاتك بسبب فقدان معلومات حول الجلسات.</strong>
+
+''بسبب أن wiki فعل HTML , تم إخفاء عرض التعديلات كوقاية و حماية  ضد الهجمات ب Javascript.''
+
+<strong>إدا كانت هذه محاولة تعديل صادقة, حاول مرة أخرى. و في حالة الفشل حاول الخروج تم الدخول مرة أخرى.</strong>",
+'importing'                 => 'جاري استيراد $1',
+'editing'                   => 'تحرير $1',
+'editinguser'               => 'تحرير $1',
+'editingsection'            => 'تحرير $1 (قسم)',
+'editingcomment'            => 'تحرير $1 (تعليق)',
+'editconflict'              => 'تضارب في التحرير: $1',
+'explainconflict'           => 'لقد قام أحد ما بتعديل الصفحة بعد أن بدأت انت بتحريرها.
+صندوق النصوص العلوي يحتوي على النص الموجود حاليا في الصفحة.
+والتغييرات التي قمت أنت بها موجودة في الصندوق في أسفل الصفحة.
+يجب أن تقوم بدمج تغييراتك في النص الموجود حاليا.
+<b>فقط</b> ما هو موجود في الصندوق العلوي هو ما سيتم حفظه وإستعاله عند الضغط على زر "حفظ الصفحة".
+<p>',
+'yourtext'                  => 'النص الذي كتبته',
+'storedversion'             => 'النسخة المخزنة',
+'nonunicodebrowser'         => '<strong>تحذير: متصفحك لا يوافق الترميز الموحد. تمت معالجة هذا لكي تتمكن من تحرير الصفحات بأمان: حروف ليست من ASCII سوف تظهر في صندوق التحريرx كأكواد سداسي عشرية.</strong>',
+'editingold'                => '<strong> تحذير: أنت تقوم الآن بتحرير نسخة قديمة من هذه الصفحة. إذا قمت بحفظها، سيتم فقدات كافة التغييرات التي حدثت بعد هذه النسخة. </strong>',
+'yourdiff'                  => 'الفروقات',
+'copyrightwarning'          => 'يرجى الملاحظة أن جميع المساهمات هنا خاضعة وصادرة تحت ترخيص $2 (انظر في $1 للمزيد من التفاصيل)
+إذا لم ترد أن تخضع كتابتك للتعديل والتوزيع الحر، لا تضعها هنا<br />. كما أنك تتعهد بأنك قمت بكتابة ما هو موجود بنفسك، أو قمت بنسخها من مصدر يخضع ضمن الملكية العامة، أو مصدر حر آخر. <strong>لا ترسل أي عمل ذي حقوق محفوظة بدون الإذن من صاحب الحق</strong>.',
+'copyrightwarning2'         => 'من فضلك لاحظ أن حميع المشاركات في {{SITENAME}} يمكن أن تعدل أو تتغير أو تحذف من قبل المشاركين الآخرين. إذا لم تكن ترغب أن تعدل مشاركاتك بهذا الشكل, لا تضعها هنا.<br />
+انت أيضا تقر أنك كتبت هذا بنفسك, أو نسختها من مصدر لا يخضع لحقوق النشر أو يسمح بالنقل بشكلا ما (أنظر $1 للتفاصيل).
+<strong>لا تضف أي نص ذي حقوق محفوظة!</strong>',
+'longpagewarning'           => '<strong>تنبيه: هذه صفحة طويلة وحجمها $1 كيلوبايت، بعض متصفحات الشبكة قد تواجه مشاكل عند محاولة تحرير صفحات يزيد حجمها عن 32 كيلوبايت. يرجى تقسيم الصفحة إلى أقسام أصغر حجمًا  إن أمكن.</strong>',
+'longpageerror'             => '<strong>خطأ: النص الذي أدخلته يجاوز $1 كيلوبايت 
+، و هذا أكبر من الحد الأقصى و هو $2 كيلوبايت. لا يمكن حفظ الصفحة.</strong>',
+'readonlywarning'           => '<strong>تحذير: لقد أغلقت قاعدة البيانات للصيانة، لذلك لن تتمكن من حفظ التعديلات التي قمت بها حاليا. إذا رغبت بإمكانك أن تنسخ النص الذي تعمل عليه وتحفظه في ملف نصي إلى وقت لاحق.</strong>',
+'protectedpagewarning'      => '<strong>تحذير: هذه الصفحة محمية. فقط المستخدمون ذوو الصلاحيات الإدارية يمكن أن يقوموا بتحريرها. تأكد من اتباع [[Project:تعليمات الصفحات المحمية|التعليمات الخاصة بالصفحات المحمية]] قبل التعديل.</strong>',
+'semiprotectedpagewarning'  => "'''ملاحظة:''' هذه الصفحة محمية بحيث يتم تعديلها فقط من قبل المستخدمين المسجلين بالموسوعة.",
+'cascadeprotectedwarning'   => '<strong>تحذير: تمت حماية هذه الصفحة بحيث يستطيع المستخدمون ذوو الصلاحيات الإدارية فقط تعديلها، وذلك لكونها مدمجة في الصفحات التالية والتي تمت حمايتها بخاصية "حماية الصفحات المدمجة":</strong>',
+'templatesused'             => 'القوالب المستخدمة في هذه الصفحة:',
+'templatesusedpreview'      => 'القوالب المستخدمة في هذا العرض المسبق:',
+'templatesusedsection'      => 'القوالب المستخدمة في هذا القسم:',
+'template-protected'        => '(حماية كاملة)',
+'template-semiprotected'    => '(حماية جزئية)',
+'edittools'                 => '<!-- النص هنا سيظهر تحت صناديق التحرير و رفع الصور. -->',
+'nocreatetitle'             => 'تم تحديد إنشاء الصفحات',
+'nocreatetext'              => 'قام الموقع بتحديد القدرة على إنشاء صفحات جديدة.
+يمكنك العودة و تحرير صفحة موجودة بالفعل, أو [[Special:Userlogin|الدخول أو تسجيل حساب]].',
+
+# "Undo" feature
+'undo-success' => 'تم استرجاع التعديل. من فضلك، أكد التعديل وقم بحفظ الصفحة أدناه.',
+'undo-failure' => 'لم ينجح الاسترجاع بسبب تعديلات متعارضة تمت على الصفحة.',
+'undo-summary' => 'الرجوع عن التعديل $1 بواسطة [[Special:Contributions/$2|$2]] ([[نقاش المستخدم:$2|نقاش]])',
+
+# Account creation failure
+'cantcreateaccounttitle' => 'لم يتم إنشاء الحساب.',
+'cantcreateaccounttext'  => 'تم منع إنشاء حساب خاص من عنوانك هذا (<b>$1</b>).
+ربما يكون هذا بسبب التخريب الصادر من مدرستك أو مزود الإنترنت الخاص بك.',
+
+# History pages
+'revhistory'          => 'تاريخ التغييرات',
+'viewpagelogs'        => 'معاينة السجلات لهذه الصفحة',
+'nohistory'           => 'لا يوجد تاريخ للتغييرات لهذه الصفحة.',
+'revnotfound'         => 'النسخة غير موجودة',
+'revnotfoundtext'     => 'لم يتم العثور على النسخة القديمة من الصفحة التي طلبتها.
+من فضلك تأكد من العنوان الذي دخلت به إلى هذه الصفحة.',
+'loadhist'            => 'تحميل تاريخ الصفحة',
+'currentrev'          => 'النسخة الحالية',
+'revisionasof'        => 'نسخة $1',
+'revision-info'       => 'تعديل $1 بواسطة $2',
+'previousrevision'    => '&rarr; نسخة أقدم',
+'nextrevision'        => 'نسخة أحدث &larr;',
+'currentrevisionlink' => 'رؤية النسخة الحالية',
+'cur'                 => 'الحالي',
+'next'                => 'التالي',
+'last'                => 'السابق',
+'orig'                => 'الأصلي',
+'page_first'          => 'الأولى',
+'page_last'           => 'الأخيرة',
+'histlegend'          => 'مفتاح: (الحالي) = الفرق مع النسخة الحالية
+(السابق) = الفروقات مع النسخة السابقة، ط = تغيير طفيف',
+'deletedrev'          => '[محذوف]',
+'histfirst'           => 'أول',
+'histlast'            => 'آخر',
+'historysize'         => '($1 بايت)',
+'historyempty'        => '(فارغ)',
+
+# Revision feed
+'history-feed-title'          => 'تاريخ التعديل',
+'history-feed-description'    => 'تاريخ التعديل على هذه الصفحة في الويكي',
+'history-feed-item-nocomment' => '$1 في $2', # user at time
+'history-feed-empty'          => 'الصفحة المطلوبة غير موجودة. من المحتمل أن تكون هذه الصفحة قد حذفت أو نقلت. حاول [[Special:Search|البحث في الويكي]] عن صفحات جديدة ذات صلة.',
+
+# Revision deletion
+'rev-deleted-comment'         => '(تم حذف تعليق)',
+'rev-deleted-user'            => '(تم حذف اسم مستخدم)',
+'rev-deleted-event'           => '(تم مسح المدخلة)',
+'rev-deleted-text-permission' => '<div class="mw-warning plainlinks">
+تم مسح هذا التعديل من الأرشيف العام.
+من الممكن أن يكون هناك تفاصيل حول هذا في [{{fullurl:Special:Log/delete|page={{FULLPAGENAMEE}}}} سجل الحذف].
+</div>',
+'rev-deleted-text-view'       => '<div class="mw-warning plainlinks">
+تم مسح هذا التعديل من الأرشيف العام.
+بإمكانك رؤية هذا التعديل لكونك إداريا على هذا الموقع.
+من الممكن أن يكون هناك تفاصيل حول هذا في [{{fullurl:Special:Log/delete|page={{FULLPAGENAMEE}}}} سجل الحذف].
+</div>',
+'rev-delundel'                => 'عرض/إخفاء',
+'revisiondelete'              => 'امسح/استرجع التعديلات',
+'revdelete-nooldid-title'     => 'لا يوجد تعديل مختار',
+'revdelete-nooldid-text'      => 'لم تقم بتحديد تعديل أو تعديلات معينة لعمل هذا الاجراء عليها.',
+'revdelete-selected'          => "{{PLURAL:$2|النسخة المختارة|النسختان المختارتان|النسخ المختارة}} من '''$1:'''",
+'logdelete-selected'          => "{{PLURAL:$2|الحدث المختار|الحدثان المختاران|الأحداث المختارة}} من السجل لـ '''$1:'''",
+'revdelete-text'              => 'ستظل الأحداث والتعديلات الملغاة تظهر في تاريخ الصفحة والسجلات،
+ولكن لن يكون مسموحا للعامة الدخول إلى بعض محتوياتها.
+
+سيظل لدى الإداريين الآخريين بهذه الويكي الصلاحية لرؤية المحتويات المخفاة
+ويستطيعون أيضا استرجاعها مرة أخرى من خلال نفس هذه الواجهة، ما لم تكن هناك ضوابط إضافية تم وضعها.',
+'revdelete-legend'            => 'وضع ضوابط:',
+'revdelete-hide-text'         => 'إخفاء نص التعديل',
+'revdelete-hide-name'         => 'إخفاء الإجراء والهدف منه',
+'revdelete-hide-comment'      => 'إخفاء تعليق التعديل',
+'revdelete-hide-user'         => 'إخفاء اسم/عنوان المستخدم',
+'revdelete-hide-restricted'   => 'تطبيق هذه الضوابط على الإداريين بجانب الآخرين',
+'revdelete-suppress'          => 'إخفاء البيانات من الإداريين بجانب الآخرين',
+'revdelete-hide-image'        => 'إخفاء محتويات الملف',
+'revdelete-unsuppress'        => 'إزالة الضوابط من التعديلات المسترجعة',
+'revdelete-log'               => 'تعليق السجل:',
+'revdelete-submit'            => 'تطبيق على التعديل المختار',
+'revdelete-logentry'          => 'تغيير مرئية تعديلات في [[$1]]',
+'logdelete-logentry'          => 'تغيير مرئية أحداث في [[$1]]',
+'revdelete-logaction'         => 'تم ضبط {{plural:$1|تعديل|تعديلان|$1 تعديلات|$1 تعديل|$1 تعديلا}} للوضع $2',
+'logdelete-logaction'         => 'تم ضبط {{plural:$1|حدث|حدثين|$1 أحداث|$1 حدث|$1 حدثا}} بخصوص [[$3]] للوضع $2',
+'revdelete-success'           => 'تم ضبط مرئية التعديلات بنجاح.',
+'logdelete-success'           => 'تم ضبط مرئية الأحداث بنجاح.',
+
+# Oversight log
+'overlogpagetext' => 'القائمة الموجودة هنا هي أحدث عمليات الحذف والمنع المتضمنة محتويات تم إخفائها عن الإداريين. أنظر [[Special:Ipblocklist|قائمة منع عناوين الأيبي]] لترى حالات المنع والطرد الحالية.',
+
+# Diffs
+'difference'                => '(الفرق بين النسخ)',
+'loadingrev'                => 'تحميل التعديلات للمقارنة',
+'lineno'                    => 'سطر $1:',
+'editcurrent'               => 'حرر النسخة الحالية من هذه الصفحة',
+'selectnewerversionfordiff' => 'اختر نسخة أحدث للمقارنة',
+'selectolderversionfordiff' => 'اختر نسخة أقدم للمقارنة',
+'compareselectedversions'   => 'قارن بين النسخ المختارة',
+'editundo'                  => 'استرجاع',
+'diff-multi'                => '(عدد التعديلات غير الظاهرة هو $1.)',
+
+# Search results
+'searchresults'         => 'نتائج البحث',
+'searchresulttext'      => 'للمزيد من المعلومات حول البحث في {{SITENAME}}، راجع [[{{MediaWiki:helppage}}|تصفح]].',
+'searchsubtitle'        => 'لصيغة البحث "[[$1]]"',
+'searchsubtitleinvalid' => 'لصيغة البحث "$1"',
+'badquery'              => 'نص بحث خاطئ',
+'badquerytext'          => 'لا يمكننا معالجة طلبك. من المحتمل أنك حاولت البحث عن كلمة بأقل من ثلاثة حروف, و هذا غير مدعم حاليا. كما قد يكون ناتجا عن خلط في أسلوب البحث, مثلا: "سمك و و تفاح". المرجو تجريب شيء آخر.',
+'matchtotals'           => 'الاستعلام "$1" يشابه $2 عنوان صفحة
+و نصوص $3 صفحة.',
+'noexactmatch'          => 'لا يوجد صفحة بنفس العنوان، حاول البحث بشكل مفصل أكثر من خلال استعمال صندوق البحث أدناه. بإمكانك أيضاً إنشاء [[$1|صفحة جديدة]] بالعنوان الذي طلبته.',
+'titlematches'          => 'نتائج بحث العناوين',
+'notitlematches'        => 'لم يتم إيجاد أي عنوان مطابق',
+'textmatches'           => 'نتائج بحث نصوص الصفحات',
+'notextmatches'         => 'لم يتم إيجاد أي نص مطابق',
+'prevn'                 => '$1 السابقة',
+'nextn'                 => '$1 التالية',
+'viewprevnext'          => 'عرض ($1) ($2) ($3).',
+'showingresults'        => 'القائمة التالية تظهر <b>$1</b> نتيجة أو أقل بدءًا من المدخلة رقم <b>$2</b>.',
+'showingresultsnum'     => 'عرض <b>$3</b> نتيجة بدءًا من المدخلة رقم <b>$2</b>.',
+'nonefound'             => "'''ملاحظة:''' عمليات البحث غير الناجحة تكون عادة نتيجة للبحث عن كلمات شائعة مثل \"from\" و \"have\" والتي لا يتمّ فهرستها، وقد تنتج أيضًا من استعمال أكثر من كلمة في البحث (فقط الصفحات التي تحتوي على جميع هذه الكلمات سوف تظهر في نتيجة البحث).",
+'powersearch'           => 'بحث',
+'powersearchtext'       => 'ابحث في النطاقات:<br />$1<br />$2 عرض التحويلات<br />ابحث عن $3 $9',
+'searchdisabled'        => '<p>عذرا! لقد تم إيقاف ميزة البحث في النصوص بشكل مؤقت، لأسباب تتعلق بتأثيرها على الأداء العام. في الوقت الحالي من الممكن أن تستعمل محرك البحث جووجل Google بدل من خاصية البحث في النصوص. من الممكن أن لا يكون البحث في جووجل يشمل آخر التعديلات والصفحات.
+</p>',
+'blanknamespace'        => 'مقالات',
+
+# Preferences page
+'preferences'              => 'تفضيلات',
+'mypreferences'            => 'تفضيلاتي',
+'prefsnologin'             => 'غير مسجل',
+'prefsnologintext'         => 'يجب أن تكون [[Special:Userlogin|مسجلا]] حتى تتمكن من تعديل تفضيلات المستخدم.',
+'prefsreset'               => 'أعيدت التفضيلات إلى الإعداد الافتراضي المخزن.',
+'qbsettings'               => 'خيارات لوحة الوصلات',
+'qbsettings-none'          => 'بلا تحديد',
+'qbsettings-fixedleft'     => 'مثبت لليسار',
+'qbsettings-fixedright'    => 'مثبت لليمين',
+'qbsettings-floatingleft'  => 'حر لليسار',
+'qbsettings-floatingright' => 'حر لليمين',
+'changepassword'           => 'غير كلمة السر',
+'skin'                     => 'واجهة',
+'math'                     => 'رياضيات',
+'dateformat'               => 'صيغة التاريخ',
+'datedefault'              => 'لا تفضيل',
+'datetime'                 => 'وقت وتاريخ',
+'math_failure'             => 'خطأ رياضيات',
+'math_unknown_error'       => 'خطأ مجهول',
+'math_unknown_function'    => 'وظيفة مجهولة',
+'math_lexing_error'        => 'خطأ في الصيغة',
+'math_syntax_error'        => 'خطأ بالصيغة',
+'math_image_error'         => 'فشل التحويل لPNG , تحقق من تثبيت كل من Latex و dvips و gs و convert.',
+'math_bad_tmpdir'          => 'لا يمكن انشاء أو كتابة في الملف المؤقت',
+'math_bad_output'          => 'لا يمكن انشاء أو كتابة في ملف الخروج',
+'prefs-personal'           => 'معلومات المستخدم',
+'prefs-rc'                 => 'أحدث التغييرات',
+'prefs-watchlist'          => 'قائمة المراقبة',
+'prefs-watchlist-days'     => 'عدد الأيام المعروضة في قائمة المراقبة:',
+'prefs-watchlist-edits'    => 'عدد التعديلات التي تعرض في قائمة المراقبة الموسعة:',
+'prefs-misc'               => 'متفرقات',
+'saveprefs'                => 'حفظ التفضيلات',
+'resetprefs'               => 'أعد التعديلات الأصلية',
+'oldpassword'              => 'كلمة السر القديمة',
+'newpassword'              => 'كلمة السر الجديدة',
+'retypenew'                => 'أعد كتابة كلمة السر الجديدة',
+'textboxsize'              => 'أبعاد صندوق النصوص',
+'rows'                     => 'أسطر',
+'columns'                  => 'أعمدة',
+'searchresultshead'        => 'خيارات نتائج البحث',
+'resultsperpage'           => 'عدد النتائج في الصفحة',
+'contextlines'             => 'عدد الأسطر في كل نتيجة',
+'contextchars'             => 'عدد الأحرف في كل سطر',
+'stubthreshold'            => 'الحدّ الأدنى لعرض البذرة',
+'recentchangescount'       => 'عدد العناوين في صفحة أحدث التغييرات',
+'savedprefs'               => 'تم حفظ تفضيلاتك.',
+'timezonelegend'           => 'المنطقة الزمنية',
+'timezonetext'             => 'عدد الساعات بين توقيتك المحلي والتوقيت على الخادم (UTC).',
+'localtime'                => 'عرض الوقت المحلي',
+'timezoneoffset'           => 'الفرق¹',
+'servertime'               => 'الوقت في الأجهزة الخادمة الآن هو',
+'guesstimezone'            => 'ادخل التوقيت من المتصفح',
+'allowemail'               => 'السماح بتلقي رسائل الكترونية من المستخدمين الآخرين',
+'defaultns'                => 'أبحث في هذه النطاقات بشكل أفتراضي:',
+'default'                  => 'مبدئي',
+'files'                    => 'ملفات',
+
+# User rights
+'userrights-lookup-user'     => 'إدارة مجموعات المستخدمين',
+'userrights-user-editname'   => 'أدخل اسم مستخدم:',
+'editusergroup'              => 'عدل مجموعات المستخدمين',
+'userrights-editusergroup'   => 'تعديل مجموعات المستخدمين',
+'saveusergroups'             => 'احفظ مجموعات المستخدم',
+'userrights-groupsmember'    => 'عضو في:',
+'userrights-groupsavailable' => 'المجموعات المتاحة:',
+'userrights-groupshelp'      => 'قم باختيار المجموعات التي تريد المستخدم أن يضاف إليها أو تتم إزالته منها.
+المجموعات الغير مختارة ستترك كما هي. يمكنك إزالة مجموعة بالضغط على كنترل + ضغطة فأرة يسرى.',
+
+# Groups
+'group'            => 'المجموعة:',
+'group-bot'        => 'بوت',
+'group-sysop'      => 'إداريون',
+'group-bureaucrat' => 'بيروقراطيون',
+'group-all'        => '(الكل)',
+
+'group-bot-member'        => 'بوت',
+'group-sysop-member'      => 'إداري',
+'group-bureaucrat-member' => 'بيروقراط',
+
+'grouppage-bot'        => 'Project:بوت',
+'grouppage-sysop'      => 'Project:إداريين',
+'grouppage-bureaucrat' => 'Project:بيروقراط',
+
+# User rights log
+'rightslog'      => 'سجل صلاحيات المستخدمين',
+'rightslogtext'  => 'هذه قائمة بالتغييرات في صلاحيات المستخدمين.',
+'rightslogentry' => 'تغيير صلاحيات $1 من $2 إلى $3',
+'rightsnone'     => 'مستخدم عادي',
+
+# Recent changes
+'nchanges'                          => '{{PLURAL:$1|تغيير|تغييران|$1 تغييرات|$1 تغيير|$1 تغييرا}}',
+'recentchanges'                     => 'أحدث التغييرات',
+'recentchangestext'                 => 'تابع آخر التغييرات في الموسوعة من هذه الصفحة.',
+'recentchanges-feed-description'    => 'تابع أحدث التغييرات لهذه الويكي عبر هذه التلقيمة.',
+'rcnote'                            => 'ستجد بالأسفل آخر <strong>$1</strong> تعديل في آخر <strong>$2</strong> يوم, منذ $3.',
+'rcnotefrom'                        => 'في الأسفل التغييرات منذ <b>$2</b> (ولغاية <b>$1</b>).',
+'rclistfrom'                        => 'أظهر التغييرات بدأ من $1',
+'rcshowhideminor'                   => '$1 التعديلات الطفيفة',
+'rcshowhidebots'                    => '$1 تعديلات البوت',
+'rcshowhideliu'                     => '$1 تعديلات المستخدمين المسجلين',
+'rcshowhideanons'                   => '$1 تعديلات المستخدمين المجهولين',
+'rcshowhidepatr'                    => '$1 التعديلات المراجعة',
+'rcshowhidemine'                    => '$1 تعديلاتي',
+'rclinks'                           => 'أظهر آخر $1 تعديل في آخر $2 يوم، $3',
+'diff'                              => 'فرق',
+'hist'                              => 'تاريخ',
+'hide'                              => 'إخفاء',
+'show'                              => 'عرض',
+'minoreditletter'                   => 'ط',
+'newpageletter'                     => 'ج',
+'boteditletter'                     => 'ب',
+'sectionlink'                       => '←',
+'number_of_watching_users_pageview' => '[$1 مستخدم مراقب]',
+'rc_categories'                     => 'حصر لتصنيفات (مفرقة برمز "|")',
+'rc_categories_any'                 => 'أي',
+
+# Recent changes linked
+'recentchangeslinked'          => 'تغييرات ذات علاقة',
+'recentchangeslinked-noresult' => 'لم تحدث تعديلات في الصفحات التي لها وصلات هنا خلال الفترة المحددة.',
+
+# Upload
+'upload'                      => 'ارفع ملفا',
+'uploadbtn'                   => 'رفع الملف',
+'reupload'                    => 'إعادة الرفع',
+'reuploaddesc'                => 'الرجوع لصفحة الرفع.',
+'uploadnologin'               => 'لم تقم بتسجيل الدخول',
+'uploadnologintext'           => 'يجب أن تكون [[Special:Userlogin|مسجلا الدخول]] لتتمكن من رفع الملفات.',
+'upload_directory_read_only'  => 'لا يمكن الكتابة على مجلد الرفع ($1) من قبل خادم الشبكة.',
+'uploaderror'                 => 'خطأ في الرفع',
+'uploadtext'                  => "استعمل الصندوق بالأسفل لرفع الصور, لعرض أو البحث في الصور المحملة سابقا, راجع [[Special:Imagelist|قائمة الملفات المرفوعة]], سجل الرفع و المسح موجود في [[Special:Log/upload|سجل الرفع]].
+
+لادراج صورة في صفحة, استعمل الوصلات في الصيغ التالية:
+*'''<nowiki>[[{{ns:image}}:ملف.jpg]]</nowiki>''',
+*'''<nowiki>[[{{ns:image}}:ملف.png|alt text]]</nowiki>''' أو
+*'''<nowiki>[[{{ns:media}}:ملف.ogg]]</nowiki>''' للوصل للملف مباشرة.",
+'uploadlog'                   => 'سجل الرفع',
+'uploadlogpage'               => 'سجل الرفع',
+'uploadlogpagetext'           => 'في الأسفل قائمة بآخر الملفات التي تم رفعها.
+كل الأوقات المعروضة هي حسب توقيت الأجهزة الخادمة (UTC).',
+'filename'                    => 'اسم الملف',
+'filedesc'                    => 'وصف قصير',
+'fileuploadsummary'           => 'نبذة:',
+'filestatus'                  => 'حالة الترخيص',
+'filesource'                  => 'مصدر',
+'uploadedfiles'               => 'الملفات المحملة',
+'ignorewarning'               => 'تغاض عن هذا التحذير واحفظ الملف.',
+'ignorewarnings'              => 'أهمل أية تحذيرات',
+'minlength'                   => 'اسم الملفات يجب أن لا يقل عن ثلاثة أحرف.',
+'illegalfilename'             => 'يحتوي اسم الملف $1 على رموز غير مقبولة. أعد تسمية الملف من فضلك و قم برفعه مرة أخرى.',
+'badfilename'                 => 'تم تغيير اسم الصورة إلى "$1".',
+'filetype-badmime'            => 'من غير المسموح به رفع ملفات من النوع "$1".',
+'filetype-badtype'            => "يعتبر '''\".\$1\"''' من أنواع الملفات المرفوضة
+: قائمة بالأنواع المسموح بها: \$2",
+'filetype-missing'            => 'الملف بدون إمتداد (مثل ".jpg").',
+'large-file'                  => 'ينصح ألا تكون الملفات أكبر من $1؛ هذا الملف مساحته $2.',
+'largefileserver'             => 'حجم هذا الملف أكبر من المسموح به على هذا الخادم (Server).',
+'emptyfile'                   => 'يبدو أن هذا الملف فارغ. قد يكون سبب ذلك خطأ في كتابة الاسم. الرجاء التحقق من اسم الملف.',
+'fileexists'                  => 'هنالك ملف موجود يحمل نفس هذا الاسم الرجاء التأكد من هذا الملف باتّباع الوصلة التالية ($1) قبل القيام بتغييره.',
+'fileexists-extension'        => 'يوجد ملف باسم مشابه:<br />
+اسم الملف المراد رفعه: <strong><tt>$1</tt></strong><br />
+اسم الملف الموجود بالفعل: <strong><tt>$2</tt></strong><br />
+الاختلاف الوحيد بينهما هو حالة أحرف الإمتداد من حيث الكبر أو الصغر. افحص الملفين من أجل التحقق من عدم تطابقهما من فضلك.',
+'fileexists-thumb'            => "'''<center>الصورة الموجودة</center>'''",
+'fileexists-thumbnail-yes'    => 'يبدو أن الملف مصغرا لحجم أعلى <i>(تصغير)</i>. افحص الملف <strong><tt>$1</tt></strong> من فضلك.<br />
+إن كان هو نفس الملف بالحجم الأصلي فلا داعي لرفع تصغير إضافي.',
+'file-thumbnail-no'           => 'يبدأ الملف بـ <strong><tt>$1</tt></strong>. يبدو أن الملف مصغرا لحجم أعلى <i>(تصغير)</i>.
+إذا كانت لديك الصورة في درجة استبانة كاملة قم برفعها، أو قم بتغيير اسم الملف من فضلك.',
+'fileexists-forbidden'        => 'هنالك ملف بنفس الاسم حاليا؛ من فضلك تراجع و اعطه اسما جديداً. [[صورة:$1|تصغير|وسط|$1]]',
+'fileexists-shared-forbidden' => 'يوجد ملف بنفس الاسم في مستودع الملفات المشترك (كومنز)، نرجو أن تعود و تحمل الملف تحت اسم جديد إذا أردت. [[صورة:$1|تصغير|وسط|$1]]',
+'successfulupload'            => 'تم رفع الملف بنجاح',
+'fileuploaded'                => "تمّ رفع الملف $1 بنجاح. الرجاء اتّباع الوصلة التالية: $2 للذهاب إلى صفحة وصف الملف وإضافة معلومات عنه. يمكنك إضافة معلومات عن مصدر الملف وتاريخ إنشائها وأي معلومات أخرى عنها. إذا كان هذا الملف عبارة عن صورة فبإمكانك استعماله في المقالات بإضافة النص التالي:
+
+'''<tt><nowiki>[[</nowiki>{{ns:image}}<nowiki>:$1|تصغير|عنوان الصورة]]</nowiki></tt>'''",
+'uploadwarning'               => 'تحذير رفع الملفات',
+'savefile'                    => 'حفظ الملف',
+'uploadedimage'               => 'تم رفع "[[$1]]"',
+'uploaddisabled'              => 'عذرا، تم إيقاف خاصية رفع الملفات.',
+'uploaddisabledtext'          => 'تم منع رفع الملفات على هذه الويكي.',
+'uploadscripted'              => 'يضم هذا الملف قن HTML أو قن آخر يمكنه أن يأول بطريقة خاطئة بواسطة المتصفح.',
+'uploadcorrupt'               => 'هذا الملف غير سليم أو له امتداد خاطيء. الرجاء التأكد من الملف وإعادة الرفع مرة أخرى.',
+'uploadvirus'                 => 'هذا الملف يحتوي على فيروس. التفاصيل: $1',
+'sourcefilename'              => 'الملف',
+'destfilename'                => 'تخرين الملف باسم',
+'watchthisupload'             => 'راقب هذه الصفحة',
+'filewasdeleted'              => 'تم رفع ثم مسح ملف بهذا الاسم من قبل. من الأفضل مراجعة $1 قبل رفعه مرة أخرى.',
+
+'upload-proto-error'      => 'بروتوكول غير صحيح',
+'upload-proto-error-text' => 'الرفع عن بعد يتطلب مسارا يبدأ بـ <code>http://</code> أو <code>ftp://</code>.',
+'upload-file-error'       => 'خطأ داخلي',
+'upload-file-error-text'  => 'تم وقوع خطأ داخلي عند محاولة عمل ملف مؤقت على الخادم. قم بمراسلة مدير النظام من فضلك.',
+'upload-misc-error'       => 'خطأ في الرفع غير معلوم',
+'upload-misc-error-text'  => 'حدث خطأ غير معلوم أثناء عملية الرفع. من فضلك تاكد أن المسار صحيح ومن الممكن الدخول عليه ثم حاول مرة أخرى. إذا استمرت المشكلة في الحدوث، راسل مديرا للنظام.',
+
+# Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
+'upload-curl-error6'       => 'لم يتمكن من الوصول للمسار',
+'upload-curl-error6-text'  => 'لم يتمكن من الوصول إلى المسار الذي حددته.  راجع من فضلك صحة المسار مرة أخرى وأن الموقع يعمل.',
+'upload-curl-error28'      => 'انتهاء مهلة الرفع',
+'upload-curl-error28-text' => 'أخذ الموقع وقت طويل للاستجابة. تأكد أن الموقع يعمل وانتظر فترة قصيرة ثم حاول مرة أخرى. ربما يتعين عليك المحاولة في وقت أقل ازدحاما.',
+
+'license'            => 'ترخيص',
+'nolicense'          => 'غير محدّد',
+'upload_source_url'  => '(عنوان ويب صحيح، يمكن الوصول إليه)',
+'upload_source_file' => ' (ملف على حاسبك)',
+
+# Image list
+'imagelist'                 => 'قائمة الصور',
+'imagelisttext'             => 'فيما يلي قائمة تحوي $1 ملفًا مرتبة $2.',
+'imagelistforuser'          => 'يعرض هذا الصور التي قام $1 برفعها.',
+'getimagelist'              => 'جاري إحضار قائمة الملفات',
+'ilsubmit'                  => 'بحث',
+'showlast'                  => 'عرض آخر $1 ملف بترتيب $2.',
+'byname'                    => 'حسب الاسم',
+'bydate'                    => 'على التاريخ',
+'bysize'                    => 'على الحجم',
+'imgdelete'                 => 'حذف',
+'imgdesc'                   => 'وصف',
+'imgfile'                   => 'ملف',
+'imglegend'                 => 'مفتاح: (وصف) = عرض أو تعديل صفحة الوصف.',
+'imghistory'                => 'تاريخ الصورة',
+'revertimg'                 => 'استرجاع',
+'deleteimg'                 => 'احذف',
+'deleteimgcompletely'       => 'احذف كل نسخ هذا الملف',
+'imghistlegend'             => 'مفتاح: (حالي) = النسخة الموجودة حاليًا من الملف، (حذف) = حذف هذه النسخة السابقة، (استرجاع) = استرجاع نسخة قديمة من الملف.
+<br /><i>اضغط على التاريخ لرؤية النسخة المحملة في ذلك التاريخ.</i>.',
+'imagelinks'                => 'وصلات',
+'linkstoimage'              => 'الصفحات التالية تحتوي على وصلة لهذه الصورة:',
+'nolinkstoimage'            => 'لا يوجد صفحات تصل لهذه الصورة.',
+'sharedupload'              => 'هذا الملف تم رفعه للتشارك بين المشاريع ويمكن استعماله في المشاريع الأخرى',
+'shareduploadwiki'          => 'الرجاء رؤية $1 لمزيد من المعلومات.',
+'shareduploadwiki-linktext' => 'صفحة وصف الملف',
+'noimage'                   => 'لا يوجد ملف بهذا الاسم، بإمكانك أن تقوم بـ$1.',
+'noimage-linktext'          => 'رفعه',
+'uploadnewversion-linktext' => 'رفع نسخة جديدة للملف',
+'imagelist_date'            => 'تاريخ',
+'imagelist_name'            => 'اسم',
+'imagelist_user'            => 'مستخدم',
+'imagelist_size'            => 'حجم (بايت)',
+'imagelist_description'     => 'وصف',
+'imagelist_search_for'      => 'ابحث عن اسم الصورة:',
+
+# MIME search
+'mimesearch'         => 'بحث MIME',
+'mimesearch-summary' => 'تعمل هذه الصفحة على عرض وتصفية الملفات بناءا على نوعها. المدخل: نوع المحتوى/النوع الفرعي، كمثال
+<tt>image/jpeg</tt>.',
+'mimetype'           => 'نوع الملف:',
+'download'           => 'أنزل',
+
+# Unwatched pages
+'unwatchedpages' => 'صفحات غير مراقبة',
+
+# List redirects
+'listredirects' => 'عرض التحويلات',
+
+# Unused templates
+'unusedtemplates'     => 'قوالب غير مستعملة',
+'unusedtemplatestext' => 'تحتوي هذه الصفحة على قائمة بالصفحات من نطاق «قالب» غير المستعملة في صفحات أخرى. تذكر بأن تتحقق من عدم وجود وصلات أخرى لهذه القوالب قبل حذفها.',
+'unusedtemplateswlh'  => 'وصلات أخرى',
+
+# Random redirect
+'randomredirect' => 'صفحة تحويل عشوائية',
+
+# Statistics
+'statistics'             => 'إحصاءات',
+'sitestats'              => 'إحصاءات الموقع',
+'userstats'              => 'احصائيات المستخدم',
+'sitestatstext'          => "يوجد '''\$1''' صفحة كعدد كلي في قاعدة البيانات.
+و هذا يتضمن \"صفحات النقاش\", الصفحات حول {{SITENAME}}, صفحات \"البذور\" الصغيرة
+, صفحات التحويل, و صفحات أخرى ربما لا ترقى لمستوى مقالة.
+بخلاف هذه الصفحات, يوجد '''\$2''' صفحة يمكن أن يعدوا كصفحات تحتوي على مقالات.
+
+تم تحميل '''\$8''' ملف.
+
+تم عرض الصفحات '''\$3''' مرة , و تم عمل '''\$4''' تعديل للصفحات
+منذ بداية عمل الويكي.
+و هذا بمعدل '''\$5''' للصفحة الواحدة, و '''\$6''' مشاهدة للتعديل الواحد.
+
+طول [http://meta.wikimedia.org/wiki/Help:Job_queue المهمات] هو '''\$7'''.",
+'userstatstext'          => "هناك {{PLURAL:$1|مستخدم مسجل وحيد|مستخدمين مسجلين|$3 مستخدمين مسجلين|$3 مستخدم مسجل|$3 مستخدما مسجلا}}, منهم
+'''$2''' (أو '''$4%''') {{PLURAL:$2|لديه|لديهما|لديهم}} صلاحيات $5.",
+'statistics-mostpopular' => 'أكثر الصفحات مشاهدة',
+
+'disambiguations'      => 'صفحات التوضيح',
+'disambiguationspage'  => 'قالب:توضيح',
+'disambiguations-text' => "الصفحات التالية تصل إلى '''صفحة توضيح'''. ينبغي في المقابل أن تصل إلى الضفحة الملائمة. <br />تعامل الصفحة كصفحة توضيح إذا كان بها قالب موجود في [[MediaWiki:disambiguationspage|صفحة الميدياويكي هذه]]",
+
+'doubleredirects'     => 'تحويلات مزدوجة',
+'doubleredirectstext' => "كل سطر في القائمة التالية يحتوي على وصلات للتحويلة الأولى والثانية بالإضافة إلى أول سطر من نص التحويلة الثانية والذي عادة ما يشير إلى المقالة ''المفترض'' أن يتم التحويل إليها مباشرة من التحويلة الأولى أيضا.",
+
+'brokenredirects'        => 'تحويلات مكسورة',
+'brokenredirectstext'    => 'الوصلات التالية تشير لصفحات غير موجودة.',
+'brokenredirects-edit'   => '(تحرير)',
+'brokenredirects-delete' => '(مسح)',
+
+'withoutinterwiki'        => 'صفحات بدون وصلات لغات أخرى',
+'withoutinterwiki-header' => 'الصفحات التالية لا تصل إلى نسخ بلغات أخرى:',
+
+'fewestrevisions' => 'المقالات ذات أقل تعديل',
+
+# Miscellaneous special pages
+'nbytes'                  => '{{PLURAL:$1|بايت واحد|$1 بايت|$1 بايت|$1 بايت}}',
+'ncategories'             => '{{PLURAL:$1|تصنيف واحد|تصنيفان|$1 تصنيفات|$1 تصنيف|$1 تصنيفا}}',
+'nlinks'                  => '{{PLURAL:$1|وصلة واحدة|وصلتان|$1 وصلات|$1 وصلة}}',
+'nmembers'                => '{{PLURAL:$1|عضو واحد|عضوان|$1 أعضاء|$1 عضو|$1 عضوا}}',
+'nrevisions'              => '{{PLURAL:$1|تعديل وحيد|تعديلان|$1 تعديلات|$1 تعديل|$1 تعديلا}}',
+'nviews'                  => '{{PLURAL:$1|مشاهدة واحدة|مشاهدتان|$1 مشاهدات|$1 مشاهدة}}',
+'specialpage-empty'       => 'هذه الصفحة فارغة.',
+'lonelypages'             => 'صفحات يتيمة',
+'lonelypagestext'         => 'الصفحات التالية لا تصل إليها أيا من صفحات الويكي الأخرى.',
+'uncategorizedpages'      => 'صفحات غير مصنفة',
+'uncategorizedcategories' => 'تصنيفات غير مصنفة',
+'uncategorizedimages'     => 'صور غير مصنفة',
+'unusedcategories'        => 'تصنيفات غير مستعملة',
+'unusedimages'            => 'صور غير مستعملة',
+'popularpages'            => 'الصفحات المشهورة',
+'wantedcategories'        => 'تصنيفات مطلوبة',
+'wantedpages'             => 'صفحات مطلوبة',
+'mostlinked'              => 'أكثر الصفحات المرتبطة بمقالات أخرى',
+'mostlinkedcategories'    => 'أكثر التصنيفات ارتباطا',
+'mostcategories'          => 'أكثر المقالات تصنيفا',
+'mostimages'              => 'أكثر الصور ارتباطا',
+'mostrevisions'           => 'أكثر الصفحات تعديلا',
+'allpages'                => 'كل الصفحات',
+'prefixindex'             => 'فهرس',
+'randompage'              => 'صفحة عشوائية',
+'shortpages'              => 'صفحات قصيرة',
+'longpages'               => 'صفحات طويلة',
+'deadendpages'            => 'صفحات نهاية مسدودة',
+'deadendpagestext'        => 'الصفحات التالية لا تحتوي على وصلات إلى صفحات أخرى بهذه الويكي.',
+'protectedpages'          => 'صفحات محمية',
+'protectedpagestext'      => 'الصفحات التالية محمية من التعديل أو النقل',
+'protectedpagesempty'     => 'لا توجد صفحات محمية حاليا.',
+'listusers'               => 'قائمة الأعضاء',
+'specialpages'            => 'الصفحات الخاصّة',
+'spheading'               => 'الصفحات الخاصة لكل المستخدمين',
+'restrictedpheading'      => 'صفحات خاصة للمخولين فقط',
+'rclsub'                  => '(لصفحات تصل بها الصفحة "$1")',
+'newpages'                => 'صفحات جديدة',
+'newpages-username'       => 'اسم المستخدم:',
+'ancientpages'            => 'المقالات القديمة',
+'intl'                    => 'وصلات بين لغات الموسوعة',
+'move'                    => 'انقل',
+'movethispage'            => 'أنقل هذه الصفحة',
+'unusedimagestext'        => '<p>الرجاء الانتباه إلى أن بعض الصور الموجودة في هذه القائمة قد يكون مشار إليها باستخدام العنوان الكامل (URL) وهي قيد الاستعمال بالرغم من ادراجها هنا.</p>',
+'unusedcategoriestext'    => 'التصنيفات التالية موجودة على الرغم من أنها لا تحتوي على أية مقالات أو تصنيفات أخرى.',
+
+# Book sources
+'booksources'               => 'مصدر كتاب',
+'booksources-search-legend' => 'البحث عن مصادر الكتب',
+'booksources-isbn'          => 'ردمك:',
+'booksources-go'            => 'إذهب',
+'booksources-text'          => 'توجد أدناه قائمة بوصلات لمواقع أخرى تبيع الكتب الجديدة والمستعملة، أيضا يمكنك أن تحصل على معلومات إضافية عن الكتب التي تبحث عنها من هناك:',
+
+'categoriespagetext' => 'التصنيفات التالية موجودة في {{SITENAME}}',
+'data'               => 'بيانات',
+'userrights'         => 'إدارة صلاحيات المستخدمين',
+'groups'             => 'مجموعات المستخدمين',
+'isbn'               => 'ردمك',
+'alphaindexline'     => '$1 إلى $2',
+'version'            => 'رقم النسخة',
+
+# Special:Log
+'specialloguserlabel'  => 'المستخدم:',
+'speciallogtitlelabel' => 'العنوان:',
+'log'                  => 'سجل كامل',
+'log-search-legend'    => 'ابحث عن سجلات',
+'log-search-submit'    => 'اذهب',
+'alllogstext'          => 'عرض شامل لعمليات رفع الملفات، وعمليات حذف أو حماية المقالات، وعمليات منع المستخدمين، وعمليات التغيير في الإداريين. باستطاعتك جعل القائمة أكثر تحديدًا وذلك باختيار نوع العملية، أو اسم المستخدم، أو الصفحات المتأثّرة.',
+'logempty'             => 'لا يوجد مدخلات مطابقة في السجل.',
+'log-title-wildcard'   => 'البحث عن عناوين تبدأ بهذا النص',
+
+# Special:Allpages
+'nextpage'          => 'الصفحة التالية ($1)',
+'prevpage'          => 'الصفحة السابقة ($1)',
+'allpagesfrom'      => 'عرض الصفحات بدءا من:',
+'allarticles'       => 'جميع المقالات',
+'allinnamespace'    => 'جميع الصفحات (في نطاق $1)',
+'allnotinnamespace' => 'كل الصفحات (ليست في نطاق $1)',
+'allpagesprev'      => 'السابق',
+'allpagesnext'      => 'التالي',
+'allpagessubmit'    => 'اذهب',
+'allpagesprefix'    => 'عرض الصفحات التي تبدأ بـ:',
+'allpagesbadtitle'  => 'العنوان المقترح للصفحة غير مقبول أو يضم لغات أخرى أو سابقة أنترويكي. يمكن ان يتضمن حروفا لا يمكن استعمالها للعناوين.',
+
+# Special:Listusers
+'listusersfrom'      => 'عرض المستخدمين بداية من:',
+'listusers-submit'   => 'عرض',
+'listusers-noresult' => 'لم يتم ايجاد مستخدم.',
+
+# E-mail user
+'mailnologin'     => 'لا يوجد عنوان للإرسال',
+'mailnologintext' => 'يجب أن تقوم [[Special:Userlogin|بتسجيل الدخول]] وإدخال بريد إلكتروني صالح في صفحة [[Special:Preferences|التفضيلات]] لتتمكن من إرسال الرسائل لمستخدمين آخرين.',
+'emailuser'       => 'أرسل رسالة لهذا المستخدم',
+'emailpage'       => 'أرسل رسالة للمستخدم',
+'emailpagetext'   => 'لو أن هذا المستخدم قد قام بإدخال عنوان بريدي صحيح في تفضيلاته،
+فسيتم إرسال رسالة واحدة له بالنموذج أدناه.
+العنوان الذي قمت أنت بإدخاله لك في تفضيلات المستخدم،
+سيظهر في مكان المرسل في الرسالة التي سترسل له، ليتمكن من الرد عليك.',
+'defemailsubject' => 'رسالة من {{SITENAME}}',
+'noemailtitle'    => 'لا يوجد عنوان بريد إلكتروني',
+'noemailtext'     => 'لم يحدد هذا المستخدم عنوان بريد إلكتروني صحيح،
+أو طلب عدم استلام الرسائل من المستخدمين الآخرين.',
+'emailfrom'       => 'من',
+'emailto'         => 'إلى',
+'emailsubject'    => 'العنوان',
+'emailmessage'    => 'نص الرسالة',
+'emailsend'       => 'إرسال',
+'emailccme'       => 'أرسل لي بنسخة من رسالتي.',
+'emailccsubject'  => 'نسخة من رسالتك إلى $1: $2',
+'emailsent'       => 'تم إرسال الرسالة',
+'emailsenttext'   => 'تم إرسال رسالتك الإلكترونية.',
+
+# Watchlist
+'watchlist'            => 'قائمة مراقبتي',
+'mywatchlist'         => 'قائمة مراقبتي',
+'watchlistfor'         => "(ل '''$1''')",
+'nowatchlist'          => 'لا يوجد شيء في قائمة مراقبتك.',
+'watchlistanontext'    => 'الرجاء $1 لعرض أو تعديل الصفحات في قائمة مراقبتك.',
+'watchlistcount'       => "'''لديك $1 صفحة في قائمة مراقبتك ، متضمنة صفحات النقاش.'''",
+'clearwatchlist'       => 'امسح ما في قائمة المراقبة',
+'watchlistcleartext'   => 'هل ترغب فعلا بإزالتهم؟',
+'watchlistclearbutton' => 'أفرغ قائمة المراقبة',
+'watchlistcleardone'   => 'تم إفراغ قائمة مراقبتك. تم إزالة $1 صفحة.',
+'watchnologin'         => 'غير مسجل',
+'watchnologintext'     => 'يجب أن تقوم  [[Special:Userlogin|بتسجيل الدخول]] لتتمكن من تعديل قائمة المراقبة لديك.',
+'addedwatch'           => 'تمت الإضافة لقائمة المراقبة',
+'addedwatchtext'       => 'تمت إضافة الصفحة  "$1" إلى [[Special:Watchlist|قائمة المراقبة]] خاصتك. سيتم وضع التغييرات القادمة على هذه الصفحة، وصفحة النقاش الخاصة بها سيتم وضعها هناك. وسيتم اظهار اسم الصفحة بخط <b>عريض</b> في صفحة [[Special:Recentchanges|أحدث التغييرات]] لتسهيل تحديدها واكتشافها.
+
+إذا كنت تريد إزالة الصفحة من قائمة المراقبة لديك، اضغط على "توقف عن المراقبة" بالأعلى.',
+'removedwatch'         => 'تم الحذف من قائمة المراقبة',
+'removedwatchtext'     => 'تم حذف الصفحة "$1" من قائمة مراقبتك.',
+'watch'                => 'راقب',
+'watchthispage'        => 'راقب هذه الصفحة',
+'unwatch'              => 'توقف عن المراقبة',
+'unwatchthispage'      => 'توقف عن مراقبة الصفحة',
+'notanarticle'         => 'ليست صفحة محتوى',
+'watchnochange'        => 'لم يتم تعديل أي صفحة في قائمة المراقبة لديك خلال الفترة المحددة.',
+'watchdetails'         => 'لديك $1 صفحة في قائمة مراقبتك (بدون عد صفحات النقاش). يمكنك [[Special:Watchlist/edit|عرض و تعديل القائمة كاملة هنا]] أو [[Special:Watchlist/clear|إزالة جميع الصفحات]] من قائمة المراقبة.',
+'wlheader-enotif'      => '* خاصية الإعلام بالبريد الإلكتروني ممكنة.',
+'wlheader-showupdated' => "* الصفحات التي تمّ تحريرها بعد زيارتك لها لآخر مرة معروضة بالخط '''الغامق'''",
+'watchmethod-recent'   => 'تفحص التغييرات الأخيرة في قائمة المراقة لديك',
+'watchmethod-list'     => 'إظهار التحريرات في الصفحات المراقبة',
+'removechecked'        => 'حذف المواد المختارة من قائمة المراقبة.',
+'watchlistcontains'    => 'تحتوي قائمة المراقبة لديك على $1 صفحة.',
+'watcheditlist'        => "فيما يلي قائمة مرتبة أبجديا للصفحات الموجودة في قائمة المراقبة لديك.
+أختر الصفحات التري تريد إزالتها من خلال الإشارة عليها من الصندوق بجانبها.
+وإضغط على زر 'حذف المختارات' في آخر الصفحة.",
+'removingchecked'      => 'حذف الصفحات المطلوبة من قائمة المراقبة...',
+'couldntremove'        => "لم ينجح مسح '$1'...",
+'iteminvalidname'      => "مشكلة في المدخل '$1', اسم غير صحيح...",
+'wlnote'               => 'في الأسفل آخر $1 تعديل في آخر <b>$2</b> ساعة.',
+'wlshowlast'           => 'عرض آخر $1 ساعات $2 أيام $3',
+'wlsaved'              => 'هذه نسخة مخزنة من قائمة المراقبة لديك.',
+'watchlist-show-bots'  => 'عرض تعديلات البوتات',
+'watchlist-hide-bots'  => 'إخفاء تعديلات البوتات',
+'watchlist-show-own'   => 'عرض تعديلاتي',
+'watchlist-hide-own'   => 'إخفاء تعديلاتي',
+'watchlist-show-minor' => 'عرض التعديلات الطفيفة',
+'watchlist-hide-minor' => 'إخفاء التعديلات الطفيفة',
+'wldone'               => 'تم بنجاح.',
+
+# Displayed when you click the "watch" button and it's in the process of watching
+'watching'   => 'مراقبة...',
+'unwatching' => 'إزالة المراقبة...',
+
+'enotif_mailer'      => 'نظام {{SITENAME}} البريدي للملاحظات',
+'enotif_reset'       => 'اعتبر كل الصفحات تم زيارتها',
+'enotif_newpagetext' => 'هذه صفحة جديدة.',
+'changed'            => 'تم التغيير',
+'created'            => 'أنشأ',
+'enotif_subject'     => 'صفحة {{SITENAME}} $PAGETITLE تم $CHANGEDORCREATED بواسطة $PAGEEDITOR',
+'enotif_lastvisited' => 'انظر $1 لمراجعة كل التغييرات منذ زيارتك الأخيرة.',
+'enotif_body'        => 'عزيزي $WATCHINGUSERNAME،
+
+إن صفحة $PAGETITLE في {{SITENAME}} قد تغيرت إلى $CHANGEDORCREATED من قبل $PAGEEDITOR، لرؤية النسخة الحالية من الصفحة انظر هنا: $PAGETITLE_URL.
+
+$NEWPAGE
+
+ملخص التحرير: $PAGESUMMARY $PAGEMINOREDIT
+
+اتصل بالمستخدم المحرر:
+بريد إلكتروني: $PAGEEDITOR_EMAIL
+صفحة المستخدم: $PAGEEDITOR_WIKI
+
+لن يكون هنالك أي إخطارات أخرى عن أية تغييرات تتم في المستقبل إلا إذا زرت هذه الصفحة. يمكنك أيضا أن تعيد تصفير عداد الإخطارات لجميع الصفحات التي تراقبها في قائمة مراقبتك.
+
+رسالة إرشادية من {{SITENAME}}
+
+--
+لتغيير قائمة مراقبتك اذهب إلى:
+{{fullurl:{{ns:special}}:Watchlist/edit}}
+
+للاقتراحات والحصول على مساعدة إضافية:
+{{fullurl:{{MediaWiki:helppage}}}}',
+
+# Delete/protect/revert
+'deletepage'                  => 'احذف الصفحة',
+'confirm'                     => 'تأكيد',
+'excontent'                   => "المحتوى كان: '$1'",
+'excontentauthor'             => "المحتوى كان: '$1' (و المساهم الوحيد كان '$2')",
+'exbeforeblank'               => "المحتوى قبل الحذف كان: '$1'",
+'exblank'                     => 'الصفحة كانت فارغة',
+'confirmdelete'               => 'تأكيد الحذف',
+'deletesub'                   => '(حذف "$1")',
+'historywarning'              => 'تحذير: هذه الصفحة التي توشك على حذفها تحتوي على تغييرات سابقة:',
+'confirmdeletetext'           => 'أنت على وشك أن تقوم بحذف صفحة أو صورة بالإضافة إلى جميع التعديلات عليها بشكل دائم من قاعدة البيانات. الرجاء التأكد من عزمك على الحذف وبأنك مدرك لنتائج هذه العملية. عمليات الحذف يجب أن تتم بناءً على [[Project:حذف الصفحات|القواعد المتفق عليها]].',
+'actioncomplete'              => 'انتهاء العملية',
+'deletedtext'                 => '"$1" تم حذفها.
+انظر في $2 لسجل آخر عمليات الحذف.',
+'deletedarticle'              => 'تم حذف "$1"',
+'dellogpage'                  => 'سجل_الحذف',
+'dellogpagetext'              => 'قائمة بأحدث الصفحات المحذوفة.',
+'deletionlog'                 => 'سجل الحذف',
+'reverted'                    => 'استرجع لنسخة أقدم',
+'deletecomment'               => 'سبب الحذف',
+'imagereverted'               => 'تم الرجوع إلى نسخة أقدم.',
+'rollback'                    => 'استرجاع التعديلات',
+'rollback_short'              => 'استرجاع',
+'rollbacklink'                => 'استرجاع',
+'rollbackfailed'              => 'لم ينجح الاسترجاع',
+'cantrollback'                => 'لم ينجح الاسترجاع فآخر تعديل للصفحة كان من قبل المستخدم الوحيد الذي عدّل على هذه الصفحة.',
+'alreadyrolled'               => 'لم ينجح استرجاع آخر تعديل لصفحة [[$1]] من قبل [[User:$2|$2]] ([[User talk:$2|نقاش]]) لأن هنالك من قام بتعديل أو استرجاع هذه الصفحة من قبل.
+
+آخر تعديل كان بواسطة [[User:$3|$3]] ([[User talk:$3|نقاش]]).',
+'editcomment'                 => 'ملاحظة التحرير كانت: "<i>$1</i>".', # only shown if there is an edit comment
+'revertpage'                  => 'تم استرجاع تعديلات [[Special:Contributions/$2|$2]] ([[User talk:$2|نقاش]]); تم الاسترجاع حتى تعديل [[User:$1|$1]]',
+'sessionfailure'              => 'يبدو أن هنالك مشكلة في هذه الجلسة الخاصة بك، لذلك فقد ألغيت هذه العملية كإجراء احترازي ضد الاختراق. الرجاء الضغط على مفتاح "العودة" (Back) للرجوع للصفحة التي جئت منها ثم قمّ بإعادة تحميلها قبل المحاولة مرة أخرى.',
+'protectlogpage'              => 'سجل_الحماية',
+'protectlogtext'              => 'هذه قائمة بالصفحات التي تمّ حمايتها أو إزالة الحماية عنها. للمزيد من المعلومات انظر [[Project:Protected page|قائمة الصفحات المحمية]].',
+'protectedarticle'            => 'حماية [[$1]]',
+'unprotectedarticle'          => 'ازالة حماية [[$1]]',
+'protectsub'                  => '(حماية "$1")',
+'confirmprotecttext'          => 'هل أنت متأكد انك تريد حماية هذه الصفحة؟',
+'confirmprotect'              => 'تأكيد الحماية',
+'protectmoveonly'             => 'الحماية من النقل فقط',
+'protectcomment'              => 'سبب الحماية',
+'protectexpiry'               => 'تنتهي في',
+'protect_expiry_invalid'      => 'وقت إنتهاء المنع غير صحيح.',
+'protect_expiry_old'          => 'وقت إنتهاء المنع يقع في الماضي.',
+'unprotectsub'                => '(إزالة حماية "$1")',
+'confirmunprotecttext'        => 'هل أنت متأكد انك تريد إزالة الحماية عن هذه الصفحة؟',
+'confirmunprotect'            => 'تأكيد إزالة الحماية',
+'unprotectcomment'            => 'سبب إزالة الحماية',
+'protect-unchain'             => 'اسمح بنقل المقالة',
+'protect-text'                => 'يمكنك هنا أن تعرض و تغير مستوى الحماية للصفحة <strong>$1</strong>.',
+'protect-locked-blocked'      => 'لا يمكنك تغيير مستويات الحماية وأنت ممنوع.
+الإعدادات الحالية للصفحة <strong>$1</strong> هي:',
+'protect-locked-dblock'       => 'لا يمكن تغيير مستويات الحماية بسبب غلق قاعدة البيانات حاليا.
+الإعدادات الحالية للصفحة <strong>$1</strong> هي:',
+'protect-locked-access'       => 'لا يملك حسابك هذا صلاحية تغيير مستوى حماية الصفحة.
+الإعدادات الحالية للصفحة <strong>$1</strong> هي:',
+'protect-cascadeon'           => 'هذه الصفحة محمية لكونها مضمنة في الصفحات التالية، والتي بها خيار حماية الصفحات المدمجة فعال. يمكنك تغيير مستوى حماية هذه الصفحة بدون التأثير على حماية الصفحات المدمجة الأخرى.',
+'protect-default'             => 'السماح لجميع المستخدمين.',
+'protect-level-autoconfirmed' => 'منع المستخدمين غير المسجلين.',
+'protect-level-sysop'         => 'منع جميع المستخدمين (عدا الإداريين).',
+'protect-summary-cascade'     => 'حماية الصفحات المدمجة بهذه الصفخة',
+'protect-expiring'            => 'ينتهي في $1 (UTC)',
+'protect-cascade'             => 'حماية الصفحات المدمجة بهذه الصفحة.',
+'restriction-type'            => 'صلاحية',
+'restriction-level'           => 'مستوى الضوابط',
+'minimum-size'                => 'الحجم الأدنى (بايت)',
+
+# Restrictions (nouns)
+'restriction-edit' => 'تعديل',
+'restriction-move' => 'نقل',
+
+# Restriction levels
+'restriction-level-sysop'         => 'حماية كاملة',
+'restriction-level-autoconfirmed' => 'حماية جزئية',
+'restriction-level-all'           => 'أي مستوى',
+
+# Undelete
+'undelete'                 => 'إرجاع صفحات محذوفة',
+'undeletepage'             => 'استعراض واسترجاع الصفحات المحذوفة',
+'viewdeletedpage'          => 'عرض الصفحات المحذوفة',
+'undeletepagetext'         => 'تم إلغاء الصفحات التالية و لكنها مازلت في الأرشيف و يمكن استرجاعها. يمكن مسح الأرشيف بشكل دوري.',
+'undeleteextrahelp'        => "لاسترجاع الصفحة كاملة، اترك جميع الصناديق فارغة
+و اضغط '''''استرجاع'''''. للاسترجاع بشكل انتقائي، ضع علامة في الصناديق أمام التعديلات التي تريد استرجاعها، و اضغط '''''استرجاع'''''. الضغط على '''''إلغاء''''' سيؤدي إلى إفراغ التعليق و حذف جميع العلامات من الصناديق.",
+'undeleterevisions'        => '$1 نسخة تم أرشفتها',
+'undeletehistory'          => 'استرجاع هذه الصفحة يؤدي إلى استرجاع جميع التغييرات المخزنة في تاريخ الصفحة. إذا كان هنالك صفحة جديدة تحمل نفس الاسم، فإن التغييرات القديمة سوف تدمج في تاريخ الصفحة الجديدة.',
+'undeletehistorynoadmin'   => 'لقد تمّ حذف هذه الصفحة للأسباب المدرجة في الأسفل. إلى جانب أسباب الحذف يمكن رؤية المستخدمين الذين قاموا بالتعديل على هذه الصفحة قبل حذفها. بإمكان الإداريين فقط رؤية المحتويات الأصلية للمقال والتعديلات عليها.',
+'undeletebtn'              => 'استرجاع!',
+'undeletereset'            => 'إلغاء',
+'undeletecomment'          => 'تعليق:',
+'undeletedarticle'         => 'تم استرجاع "[[$1]]"',
+'undeletedrevisions'       => 'تم استرجاع {{PLURAL:$1|تعديل واحد|تعديلان|$1 تعديلات|$1 تعديل|$1 تعديلا}}',
+'undeletedrevisions-files' => '$1 مراجعة و $2 ملف تم استرجاعها',
+'undeletedfiles'           => '$1 استرجاع ملفات',
+'cannotundelete'           => 'فشل الاسترجاع؛ ربما قام شخص آخر باسترجاع الصفحة بالفعل.',
+'undeletedpage'            => "<big>'''تم استرجاع $1'''</big>
+
+راجع [[Special:Log/delete|سجل الحدف]] لمعاينة عمليات الحذف و الاسترجاعات الحديثة.",
+'undelete-header'          => 'أنظر الصفحات المحذوفة حديثا في [[Special:Log/delete|سجل الحذف]].',
+'undelete-search-box'      => 'ابحث في الصفحات المحذوفة',
+'undelete-search-prefix'   => 'عرض الصفحات التي تبدأ بـ:',
+'undelete-search-submit'   => 'ابحث',
+'undelete-no-results'      => 'لم يتم العثور على صفحات بهذه المواصفات في أرشيف المحذوفات',
+
+# Namespace form on various pages
+'namespace' => 'النطاق:',
+'invert'    => 'عكس الإختيار',
+
+# Contributions
+'contributions' => 'مساهمات المستخدم',
+'mycontris'     => 'مساهماتي',
+'contribsub2'    => 'للمستخدم $1 ($2)',
+'nocontribs'    => 'لا توجد تعديلات تطابق هذه المحددات.',
+'ucnote'        => 'في الأسفل ستجد آخر <b>$1</b> تعديل لهذا المستخدم في <b>$2</b> أيام.',
+'uclinks'       => 'عرض آخر $1 تعديل;  عرض آخر $2 يوم.',
+'uctop'         => ' (أعلى)',
+
+'sp-contributions-newest'      => 'آخر',
+'sp-contributions-oldest'      => 'أول',
+'sp-contributions-newer'       => '$1 التالية',
+'sp-contributions-older'       => '$1 السابقة',
+'sp-contributions-newbies'     => 'عرض فقط المساهمات للحسابات الجديدة',
+'sp-contributions-newbies-sub' => 'للمبتدئين',
+'sp-contributions-blocklog'    => 'سجل المنع',
+'sp-contributions-search'      => 'بحث عن مساهمات',
+'sp-contributions-username'    => 'عنوان أيبي أو اسم مستخدم:',
+'sp-contributions-submit'      => 'بحث',
+
+'sp-newimages-showfrom' => 'أظهر الصور الجديدة انطلاقا من $1',
+
+# What links here
+'whatlinkshere'      => 'ماذا يرتبط هنا؟',
+'notargettitle'      => 'لا هدف',
+'notargettext'       => 'لم تحدد الصفحة او المستخدم المستهدف
+لعمل هذه الخاصية.',
+'linklistsub'        => '(قائمة الوصلات)',
+'linkshere'          => "الصفحات التالية تحتوي على وصلة إلى '''[[:$1]]''':",
+'nolinkshere'        => "لا يوجد صفحات تصل إلى '''[[:$1]]'''.",
+'nolinkshere-ns'     => "لا تصل أي صفحة إلى '''[[:$1]]''' في النطاق المختار.",
+'isredirect'         => 'صفحة تحويل',
+'istemplate'         => 'مضمن',
+'whatlinkshere-prev' => '{{PLURAL:$1|السابق|الـ $1 السابقة}}',
+'whatlinkshere-next' => '{{PLURAL:$1|القادمة|الـ $1 القادمة}}',
+
+# Block/unblock
+'blockip'                     => 'منع مستخدم',
+'blockiptext'                 => 'استخدم الاستمارة أدناه لمنع عنوان أيبي
+أو مستخدم مسجل من الكتابة.
+يجب أن يتم هذا فقط لمنع التخريب ومتوافقا مع
+[[{{MediaWiki:policy-url}}|السياسة]] المتبعة هنا.
+قم بذكر السبب أدناه (كمثال، اذكر بعض الصفحات التي قام بتخريبها تحديدا).',
+'ipaddress'                   => 'عنوان الأي بي',
+'ipadressorusername'          => 'عنوان المستخدم (IP) أو اسمه',
+'ipbexpiry'                   => 'مدّة المنع',
+'ipbreason'                   => 'السبب',
+'ipbreasonotherlist'          => 'سبب آخر',
+'ipbreason-list'              => '*#أسباب المنع عناوين الأيبي
+*تخريب
+*سخام وصلات
+*#أسباب المنع للمستخدمين المسجلين
+*سباب
+*دمية جورب',
+'ipbanononly'                 => 'فقط المستخدمين المجهولين',
+'ipbcreateaccount'            => 'منع إنشاء حساب جديد',
+'ipbenableautoblock'          => 'امنع العناوين المستخدمة بواسطة هذا المستخدم.',
+'ipbsubmit'                   => 'امنع هذا المستخدم',
+'ipbother'                    => "مدّة المنع (عن اختيار ''غير ذلك'')",
+'ipboptions'                  => 'ربع ساعة:15 minutes,ساعة كاملة:1 hour,ساعتين:2 hours,يوم:1 day,ثلاثة أيام:3 days,أسبوع:1 week,أسبوعان:2 weeks,شهر:1 month,ثلاثة شهور:3 months,ستة شهور:6 months,عام كامل:1 year,دائم:infinite',
+'ipbotheroption'              => 'غير ذلك',
+'ipbotherreason'              => 'سبب إضافي',
+'ipbhidename'                 => 'إخفاء اسم/عنوان المستخدم من سجل المنع وسجل المنع الحالي وقائمة المستخدمين',
+'badipaddress'                => 'عنوان أيبي خاطئ',
+'blockipsuccesssub'           => 'تم المنع بنجاح.',
+'blockipsuccesstext'          => 'تم منع [[Special:Contributions/$1|$1]].
+<br />أنظر [[Special:Ipblocklist|IP block list]] لمراجعة حالات المنع.',
+'ipb-unblock-addr'            => 'إزالة منع $1',
+'ipb-unblock'                 => 'رفع المنع عن المستخدم أو عنوان اللآي بي',
+'ipb-blocklist-addr'          => 'عرض المنع الحالي لـ $1',
+'ipb-blocklist'               => 'عرض حالات المنع الحالية',
+'unblockip'                   => 'إزالة منع مستخدم',
+'unblockiptext'               => 'استخدم الحقل أدناه لاسترجاع صلاحية الكتابة
+الخاصة بIP أو مستخدم تم سحبها منه مسبقا.',
+'ipusubmit'                   => 'إزالة المنع',
+'unblocked'                   => 'تم منع [[مستخدم:$1|$1]]',
+'ipblocklist'                 => 'قائمة أسماء الأعضاء و عناوين الأيبي الممنوعة',
+'ipblocklist-submit'          => 'بحث',
+'blocklistline'               => '$1, $2 منع $3 ($4)',
+'infiniteblock'               => 'غير محدد',
+'expiringblock'               => 'ينتهي في $1',
+'anononlyblock'               => 'مجهول فقط',
+'noautoblockblock'            => 'المنع التلقائي معطل',
+'createaccountblock'          => 'تم منع إنشاء الحسابات.',
+'ipblocklistempty'            => 'قائمة المنع فارغة.',
+'blocklink'                   => 'منع مستخدم',
+'unblocklink'                 => 'رفع المنع عن مستخدم',
+'contribslink'                => 'مساهمات',
+'autoblocker'                 => 'تم منعك تلقائيا لإن الأيبي الخاص بك تم استخدامه مؤخرا بواسطة المستخدم "[[مستخدم:$1|$1]]". سبب منع $1 هو: "\'\'\'$2\'\'\'"',
+'blocklogpage'                => 'سجل_المنع',
+'blocklogentry'               => 'منع "[[$1]]" لفترة زمنية مدتها $2 $3',
+'blocklogtext'                => 'السجل التالي يبين عمليات منع التحرير وإزالة المنع عن المستخدمين. عناوين الأي بي التي تم منعها تلقائيا ليست ضمن هذه القائمة. انظر [[Special:Ipblocklist|عناوين الأي بي الممنوعة]] لرؤية العناوين الممنوعة حاليا.',
+'unblocklogentry'             => 'إزالة منع $1',
+'block-log-flags-anononly'    => 'المستخدمون المجهولون فقط',
+'block-log-flags-nocreate'    => 'منع إنشاء حساب',
+'block-log-flags-autoblock'   => 'منع تلقائي',
+'range_block_disabled'        => 'إمكانية الإداري لمنع نطاق معطلة.',
+'ipb_expiry_invalid'          => 'تاريخ انتهاء المنع المدخل غير صحيح.',
+'ipb_already_blocked'         => 'سبق منع "$1"',
+'ip_range_invalid'            => 'نطاق العناوين المدخل (IP) غير صحيح.',
+'proxyblocker'                => 'مانع الوكيل (البروكسي)',
+'ipb_cant_unblock'            => 'خطأ: لم يتم إيجاد الممنوع $1. ربما تم إلغاء منعه بالفعل.',
+'proxyblockreason'            => 'تم منع عنوان الأيبي الخاص بك لكونه وكيل (بروكسي) مفتوح. قم بمراسلة مزود خدمة الإنترنت الخاص بك أو الدعم الفني وأعلمهم بهذه المشكلة الأمنية.',
+'proxyblocksuccess'           => 'تم الأمر.',
+'sorbsreason'                 => 'هذا الIP تم إدراجه كبروكسي مفتوح في [http://www.sorbs.net SORBS] DNSBL.',
+'sorbs_create_account_reason' => 'هذا الIP تم إدراجه كبروكسي مفتوح في [http://www.sorbs.net SORBS] DNSBL. لا يمكنك إنشاء هذا الحساب',
+
+# Developer tools
+'lockdb'              => 'أقفل قاعدة البيانات',
+'unlockdb'            => 'افتح قاعدة البيانات',
+'lockdbtext'          => 'إغلاق قاعدة البيانات سوف يمنع جميع المستخدمين من تحرير الصفحات وتغيير التفضيلات الخاصة بهم وتعديل قائمة المراقبة وغير ذلك من الأمور المتطلبة التعديل على قاعدة البيانات. الرجاء التأكد من أن هذا حقا ما ترغب القيام به، ومن أنك سوف تقوم بإزالة الغلق بعد الانتهاء من الصيانة.',
+'unlockdbtext'        => 'فتح قاعدة البيانات سيسترجع قدرة كل المستخدمين على تحرير الصفحات, تغيير تفضيلاتهم
+, تعديل قوائم المراقبة الخاصة بهم, و
+أشياء أخرى تحتاج التغيير في قاعدة البيانات.
+من فضلك, أكد أن هذا هو ما تريده.',
+'lockconfirm'         => 'نعم، أنا متأكد أني أريد قفل قاعدة البيانات.',
+'unlockconfirm'       => 'نعم, أريد فعلا فتح قاعدة البيانات.',
+'lockbtn'             => 'أقفل قاعدة البيانات',
+'unlockbtn'           => 'فتح قاعدة البيانات',
+'locknoconfirm'       => 'لم تقم باختيار خانة التأكيد.',
+'lockdbsuccesssub'    => 'نجح إقفال قاعدة البيانات',
+'unlockdbsuccesssub'  => 'تم إزالة قفل قاعدة البيانات',
+'lockdbsuccesstext'   => 'لقد أغلقت قاعدة البيانات.
+<br />تذكر بأن تزيل الغلق بعد اكتمال أعمال الصيانة.',
+'unlockdbsuccesstext' => 'تم إعادة فتح قاعدة البيانات',
+'lockfilenotwritable' => 'ملف غلق قاعدة البيانات لا يمكن الكتابة عليه. لغلق قاعدة البيانات أو إزالة الغلق يجب أن يكون هذا الملف قابلا للكتابة من قبل الخادم.',
+'databasenotlocked'   => 'قاعدة البيانات ليست مغلقة.',
+
+# Move page
+'movepage'                => 'نقل صفحة',
+'movepagetext'            => "باستعمال النموذج أدناه بإمكانك أن تغيّر اسم الصفحة، وأن تنقل تاريخها للاسم الجديد.
+سيتم إنشاء تحويل من العنوان القديم للصفحة بالعنوان الجديد. لكن، لن يتم تغيير الوصلات في الصفحات التي تتصل بهذه الصفحة، لذا عليك [[Special:Maintenance|التأكد]] من عدم وجود وصلات مقطوعة، أو وصلات متتالية، للتأكد من أن المقالات تتصل مع بعضها بشكل مناسب.
+
+يرجى الملاحظة أنه '''لن يتمّ''' نقل الصفحة إذا وجدت صفحة بالاسم الجديد، إلا إذا كانت صفحة فارغة، أو صفحة تحويل، ولا تاريخ لها. وهذا يعني أنك لا تستطيع وضع صفحة مكان صفحة، كما أنه من الممكن ارجاع الصفحة لمكانها في حال تم النقل بشكل خاطئ.
+
+<b>تحذير!</b> قد يكون لنقل الصفحة آثار كبيرة، وتغييرا غير متوقع بالنسبة للصفحات المشهورة. يرجى فهم وإدارك عواقب نقل الصفحات قبل القيام به.",
+'movepagetalktext'        => 'صفحة النقاش المرفقة بالمقالة سيتم نقلها كذلك، إذا وجدت. ولكن لا يتم نقل صفحة النقاش في الحالات التالية:
+* نقل الصفحة عبر نطاقات namespaces مختلفة.
+* يوجد صفحة نقاش غير فارغة تحت العنوان الجديد للمقالة.
+* قمت بإزالة إختيار نقل صفحة النقاش في الأسفل.
+
+وفي الحالات أعلاه، يجب عليك نقل أو دمج محتويات صفحة النقاش يدويا، إذا رغب في ذلك.',
+'movearticle'             => 'انقل الصفحة',
+'movenologin'             => 'غير مسجل',
+'movenologintext'         => 'يجب أن تكون متسخدمًا مسجلاً وأن تقوم [[Special:Userlogin|بالدخول]] لكي تنقل صفحة.',
+'newtitle'                => 'إلى العنوان الجديد',
+'move-watch'              => 'راقب هذه الصفحة',
+'movepagebtn'             => 'أنقل الصفحة',
+'pagemovedsub'            => 'تم النقل بنجاح',
+'pagemovedtext'           => 'تم نقل الصفحة "[[$1]]" إلى "[[$2]]".',
+'articleexists'           => 'يوجد صفحة بهذا الاسم،
+أو أن الاسم الذي تم إختياره غير صالح.
+يرجى إختيار اسم آخر.',
+'talkexists'              => 'تم نقل الصفحة بنجاح، لكن لم
+يتم نقل صفحة النقاش المرافقة، بسبب وجود صفحة نقاش
+مسبقا تحت العوان الجديد.
+يرجى نقل محتويات صفحة النقاش يدويا، ودمجها مع المحتويات السابقة.',
+'movedto'                 => 'تم نقلها إلى',
+'movetalk'                => "أنقل صفحة '''النقاش''' أن أمكن.",
+'talkpagemoved'           => 'تم نقل صفحة النقاش أيضا.',
+'talkpagenotmoved'        => '<strong>لم</strong> يتم نقل صفحة النقاش.',
+'1movedto2'               => '$1 تم نقلها إلى $2',
+'1movedto2_redir'         => 'تم نقل $1 فوق التحويلة $2',
+'movelogpage'             => 'سجل النقل',
+'movelogpagetext'         => 'هذه قائمة بالصفحات التي تمّ نقلها.',
+'movereason'              => 'السبب',
+'revertmove'              => 'استرجاع',
+'delete_and_move'         => 'احذف وانقل',
+'delete_and_move_text'    => '==يستلزم الحذف==
+هناك مقالة تحت الاسم - [[$1]] - الذي طلبت أن تنقل إليه هذه المقالة. هل ترغب بحذف تلك المقالة لإتمام عملية النقل؟',
+'delete_and_move_confirm' => 'نعم، احذف هذه الصفحة.',
+'delete_and_move_reason'  => 'حذف لإفساح مجال للنقل',
+'selfmove'                => 'لا يوجد اختلاف في عنوان المصدر و الهدف ، لا يمكن نقل الصفحة على نفسها.',
+'immobile_namespace'      => 'لا يمكن النقل إلى العنوان المراد، النطاق غير مسموح بالنقل إليه.',
+
+# Export
+'export'            => 'صدّر صفحات',
+'exporttext'        => 'يمكنك تصدير النص و تاريخ تعديلات صفحة أو مجموعة صفحات خاصة في صيغة إكس.إم.إل. وذلك بقصد استيرادها في ويكي آخر يستعمل ميدياويكي بواسطة الصفحة [[Special:Import|صفحة الاستيراد]].
+
+لتصدير صفحات، اكتب العناوين في الصندوق أسفله، عنوان واحد في كل السطر، مع اختيار ما إذا كنت ترغب في النسخة الحالية بالإضافة إلى النسخ القديمة كاملة أو مع معلومات تاريخ الصفحة عنها أو فقط النسخة الحالية مع معلومات عن التعديل الأخير.
+
+في الحالة الأخيرة يمكنك استعمال وصلة مباشرة، كمثال [[{{ns:Special}}:Export/{{Mediawiki:mainpage}}]] للصفحة {{Mediawiki:mainpage}}.',
+'exportcuronly'     => 'ضمن النسخة الحالية فقط ، وليس تاريخ الصفحة بأكمله.',
+'exportnohistory'   => "----ملاحظة:''' تم توقيف التصدير الكامل لتاريخ الصفحة بهذه الترسيمة لأسباب تحسينية'''",
+'export-submit'     => 'تصدير',
+'export-addcattext' => 'إضافة صفحات من تصنيف:',
+'export-addcat'     => 'إضافة',
+
+# Namespace 8 related
+'allmessages'               => 'كافة رسائل النظام',
+'allmessagesname'           => 'الاسم',
+'allmessagesdefault'        => 'النص الافتراضي',
+'allmessagescurrent'        => 'النص الحالي',
+'allmessagestext'           => 'هذه قائمة بكافة رسائل النظام المتوفرة في نطاق ميدياويكي.',
+'allmessagesnotsupportedUI' => 'لغة الواجهة الحالية الخاصة بك <b>$1</b> غير مدعمة في {{ns:special}}:Allmessages في هذا الموقع.',
+'allmessagesnotsupportedDB' => "لا يمكن استخدام '''{{ns:special}}:Allmessages''' لأن المتغير wgUseDatabaseMessages غير مشغل.",
+'allmessagesfilter'         => 'بحث باسم الرسالة:',
+'allmessagesmodified'       => 'إظهر المتغير فقط',
+
+# Thumbnails
+'thumbnail-more'  => 'تكبير',
+'missingimage'    => '<b>صورة غير موجودة</b><br /><i>$1</i>',
+'filemissing'     => 'الملف مفقود',
+'thumbnail_error' => 'خطأ في إنشاء صورة مصغرة:  $1',
+
+# Special:Import
+'import'                     => 'استيراد صفحات',
+'importinterwiki'            => 'استيراد ويكي',
+'import-interwiki-text'      => 'اختر الويكي و عنوان الصفحة المطلوب استيرادها.
+تواريخ التعديلات و أسماء المحررين سيتم الحفاظ عليها.
+كل عمليات الاستيراد عبر مواقع الويكي يتم تسجيلها في [[Special:Log/import|سجل الاستيراد]].',
+'import-interwiki-history'   => 'انسخ تاريخ الصفحة كله',
+'import-interwiki-submit'    => 'استيراد',
+'import-interwiki-namespace' => 'انقل الصفحات إلى النطاق:',
+'importtext'                 => 'من فضلك صدّر الملف من الويكي المصدر عن طريق Special:Export، احفظها على جهازك ثم ارفعها هنا.',
+'importstart'                => 'استيراد صفحات...',
+'import-revision-count'      => 'تعديل(ات) $1',
+'importnopages'              => 'لا صفحات للاستيراد',
+'importfailed'               => 'فشل استيراد: $1',
+'importunknownsource'        => 'نوع مجهول لمصدر الاستيراد',
+'importcantopen'             => 'لم يتمكن من فتح الملف المستورد',
+'importbadinterwiki'         => 'وصلة إنترويكي خاطئة',
+'importnotext'               => 'فارغ أو لا يحتوي على نص',
+'importsuccess'              => 'تم الاستيراد بنجاح!',
+'importhistoryconflict'      => 'هناك تاريخ تعديلات يتعارض مع تاريخ هذه الصفحة (ربما تكون قد استوردت الصفحة من قبل)',
+'importnosources'            => 'لم يتم تحديد مصادر للاستيراد الويكي و الاستيراد المباشر عن طريق الرفع غير فعال.',
+'importnofile'               => 'لم يتم رفع ملف استيراد.',
+'importuploaderror'          => 'فشل رفع أو استيراد الملف، ربما الملف أكبر من الحجم المسموح به.',
+
+# Import log
+'importlogpage'                    => 'سجل الاستيراد',
+'importlogpagetext'                => 'استيرادات إدارية (للإداريين فقط) لصفحات من مواقع ويكي أخرى.',
+'import-logentry-upload'           => 'تم استيراد $1 عن طريق رفع ملف',
+'import-logentry-upload-detail'    => 'تعديل(ات) $1',
+'import-logentry-interwiki'        => 'استيراد ويكي $1',
+'import-logentry-interwiki-detail' => 'تعديل(ات) من $2 $1',
+
+# Tooltip help for the actions
+'tooltip-pt-userpage'             => 'صفحتي الخاصة',
+'tooltip-pt-anonuserpage'         => 'صفحة المستخدم لهذا الأيببي الذي تقوم بالتحرير من خلاله',
+'tooltip-pt-mytalk'               => 'صفحة نقاشي',
+'tooltip-pt-anontalk'             => 'نقاش حول تعديلات هذا المستخدم المجهول',
+'tooltip-pt-preferences'          => 'تفضيلاتي',
+'tooltip-pt-watchlist'            => 'قائمة بالصفحات التي تقوم بمراقبة التعديلات التي تحدث فيها',
+'tooltip-pt-mycontris'            => 'قائمة بمساهماتي',
+'tooltip-pt-login'                => 'من المفضل أن تقوم بتسجيل الدخول، هذا ليس إلزاميا.',
+'tooltip-pt-anonlogin'            => 'من المفضل أن تقوم بتسجيل الدخول، هذا ليس إلزاميا.',
+'tooltip-pt-logout'               => 'خروج',
+'tooltip-ca-talk'                 => 'نقاش حول صفحة المحتوى',
+'tooltip-ca-edit'                 => 'بإمكانك تعديل هذه الصفحة، برجاء استعمال زر عرض التعديلات قبل الحفظ',
+'tooltip-ca-addsection'           => 'أضف تعليق إلى هذا النقاش',
+'tooltip-ca-viewsource'           => 'هذه الصفحة محمية، يمكنك رؤية المصدر النصي لها.',
+'tooltip-ca-history'              => 'النسخ السابقة من هذه الصفحة',
+'tooltip-ca-protect'              => 'لحماية هذه الصفحة',
+'tooltip-ca-delete'               => 'احذف هذه الصفحة',
+'tooltip-ca-undelete'             => 'استرجاع التعديلات التي تمت على هذه الصفحة قبل حذفها',
+'tooltip-ca-move'                 => 'انقل هذه الصفحة',
+'tooltip-ca-watch'                => 'أضف هذه الصفحة إلى قائمة مراقبتي',
+'tooltip-ca-unwatch'              => 'أزل هذه الصفحة من قائمة مراقبتك',
+'tooltip-search'                  => 'ابحث في {{SITENAME}}',
+'tooltip-p-logo'                  => 'الصفحة الرئيسية',
+'tooltip-n-mainpage'              => 'مطالعة الصفحة الرئيسية',
+'tooltip-n-portal'                => 'حول المشروع، ماذا يمكن أن تفعل، أين يمكن أن تجد ما تحتاجه',
+'tooltip-n-currentevents'         => 'مطالعة سريعة لأهم الأخبار الحالية',
+'tooltip-n-recentchanges'         => 'قائمة بأحدث التعديلات في الويكي',
+'tooltip-n-randompage'            => 'اعرض ضفحة عشوائية',
+'tooltip-n-help'                  => 'تحتاج مساعدة؟ طالع هذه الصفحة!',
+'tooltip-n-sitesupport'           => 'قم بدعمنا',
+'tooltip-t-whatlinkshere'         => 'قائمة بكل الصفحات التي تصل هنا',
+'tooltip-t-recentchangeslinked'   => 'أحدث التغييرات في الصفحات الموجودة وصلاتها هنا.',
+'tooltip-feed-rss'                => 'تلقيم أر.إس.إس لهذه الصفحة',
+'tooltip-feed-atom'               => 'تلقيم أتوم لهذه الصفحة',
+'tooltip-t-contributions'         => 'عرض قائمة مساهمات هذا المستخدم',
+'tooltip-t-emailuser'             => 'إرسال رسالة لهذا المستخدم',
+'tooltip-t-upload'                => 'رفع صور أو ملفات وسائط أخرى',
+'tooltip-t-specialpages'          => 'قائمة بكل الصفحات الخاصة',
+'tooltip-ca-nstab-main'           => 'عرض صفحة المحتوى',
+'tooltip-ca-nstab-user'           => 'اعرض صفحة المستخدم',
+'tooltip-ca-nstab-media'          => 'اعرض صفحة ملف الوسائط',
+'tooltip-ca-nstab-special'        => 'هذه صفحة خاصة لا تستطيع أن تقوم بتعديلها',
+'tooltip-ca-nstab-project'        => 'اعرض صفحة خاصة بالمشروع',
+'tooltip-ca-nstab-image'          => 'اعرض صفحة الصورة',
+'tooltip-ca-nstab-mediawiki'      => 'اعرض رسالة النظام',
+'tooltip-ca-nstab-template'       => 'اعرض القالب',
+'tooltip-ca-nstab-help'           => 'اعرض صفحة المساعدة',
+'tooltip-ca-nstab-category'       => 'اعرض صفحة التصنيف',
+'tooltip-minoredit'               => 'اعرض هذا التغيير كتغيير طفيف',
+'tooltip-save'                    => 'احفظ تعديلاتك',
+'tooltip-preview'                 => 'اعرض تعديلاتك, استخدم هذا من فضلك قبل الحفظ!',
+'tooltip-diff'                    => 'شاهد ماذا تغير بالنص.',
+'tooltip-compareselectedversions' => 'شاهد الفروقات بين النسختين المختارتين.',
+'tooltip-watch'                   => 'أضف هذه الصفحة إلى قائمة مراقبتك',
+'tooltip-recreate'                => 'أعد إنشاء الصفحة رغم كونها حذفت',
+
+# Stylesheets
+'common.css'   => '/** النظم المتراصة الموضوعة هنا سيتم تطبيقها على كل الواجهات  */',
+'monobook.css' => '/* CSS placed here will affect users of the Monobook skin */',
+
+# Scripts
+'common.js'   => '/* الجافاسكريبت الموضوع هنا سيتم تحميله لكل المستخدمين مع كل تحميل للصفحة. */',
+'monobook.js' => '/* Deprecated; use [[MediaWiki:common.js]] */',
+
+# Metadata
+'notacceptable' => 'لا يمكن لخادم الويكي تزويدك ببيانات بصيغة يستطيع عميلك قراءتها.',
+
+# Attribution
+'anonymous'        => 'مستخدم مجهول ل{{SITENAME}}',
+'siteuser'         => 'مستخدم {{SITENAME}} $1',
+'lastmodifiedatby' => 'آخر تعديل لهذه الصفحة كان في $2، $1 بواسطة $3.', # $1 date, $2 time, $3 user
+'and'              => 'و',
+'othercontribs'    => 'بناء على عمل $1.',
+'others'           => 'أخرى',
+
+# Spam protection
+'spamprotectiontitle'    => 'مانع السخام',
+'spamprotectiontext'     => 'تم منع حفظ الصفحة عن طريق مانع السخام. من المحتمل أن يكون هذا بسبب وصلة خارجية.',
+'spamprotectionmatch'    => 'النص التالي هو ما نشط مانع السخام الخاص بنا: $1',
+'subcategorycount'       => 'يوجد {{PLURAL:$1|تصنيف فرعي واحد|تصنيفان فرعيان|$1 تصنيفات فرعية|$1 تصنيف فرعي|$1 تصنيفا فرعيا}} في هذا التصنيف.',
+'categoryarticlecount'   => 'يوجد {{PLURAL:$1|مقال واحد|مقالان|$1 مقالات|$1 مقال|$1 مقالا}} في هذا التصنيف.',
+'category-media-count'   => 'يوجد {{PLURAL:$1|ملف واحد|$1 ملفات}} في هذا التصنيف.',
+'listingcontinuesabbrev' => ' (متابعة)',
+'spambot_username'       => 'تنظيف سخام ميدياويكي',
+'spam_reverting'         => 'استرجاع آخر نسخة ليس بها وصلات إلى $1',
+
+# Info page
+'infosubtitle'   => 'معلومات الصفحة',
+'numedits'       => 'عدد التحريرات (مقالة): $1',
+'numtalkedits'   => 'عدد التعديلات (صفحة نقاش): $1',
+'numwatchers'    => 'عدد المراقبين: $1',
+'numauthors'     => 'عدد المحررين (مقالة): $1',
+'numtalkauthors' => 'عدد المستخدمين المحررين للصفحة (صحفة نقاش): $1',
+
+# Math options
+'mw_math_png'    => 'دائمًا اعرض على هيئة PNG',
+'mw_math_simple' => 'اعرض على هيئة HTML للصيغ البسيطة جدًا، وإلا فاعرض بهئية PNG',
+'mw_math_html'   => 'اعرض بصيغة HTML إن أمكن، وإلا فاعرض كهيئة PNG',
+'mw_math_source' => 'اعرض على هيئة TeX (للمتصفحات النصية)',
+'mw_math_modern' => 'مستحسن للمتصفحات الحديثة',
+'mw_math_mathml' => 'اعرض بصيغة MathML إن أمكن (تحت التجريب)',
+
+# Patrolling
+'markaspatrolleddiff'                 => 'تمت مراجعتها',
+'markaspatrolledtext'                 => 'هذه المقالة تمت مراجعتها',
+'markedaspatrolled'                   => 'تمت مراجعتها',
+'markedaspatrolledtext'               => 'تم الإشارة إلى النسخة المختارة كمراجعة.',
+'rcpatroldisabled'                    => 'مراجعة أحدث التغييرات معطلة',
+'rcpatroldisabledtext'                => 'خاصية مراجعة أحدث التغييرات معطلة حاليا',
+'markedaspatrollederror'              => 'لا يمكن الإشارة بالمراجعة',
+'markedaspatrollederrortext'          => 'يجب عليك اختيار النسخة التي تريد أن تشير أنها مراجعة',
+'markedaspatrollederror-noautopatrol' => 'لا يمكن السماح لك بالإشارة إلى تعديلاتك الشخصية كتعديلات تمت مراجعتها.',
+
+# Patrol log
+'patrol-log-page' => 'سجل المراجعة',
+'patrol-log-line' => 'قام بمراحعة $1 من صفحة $2 $3',
+'patrol-log-auto' => '(تلقائيا)',
+'patrol-log-diff' => 'ن$1',
+
+# Image deletion
+'deletedrevision' => 'حذف التعديل القديم $1.',
+
+# Browsing diffs
+'previousdiff' => '→ الفرق السابق',
+'nextdiff'     => 'الفرق اللاحق ←',
+
+# Media information
+'mediawarning'         => "'''تنبيه''': هذا الملف يحتوي على كود خبيث، يمكن عند تشغيله السيطرة على نظامك.<hr />",
+'imagemaxsize'         => 'حجم الصورة في صفحة وصفها:',
+'thumbsize'            => 'حجم العرض المصغر:',
+'file-info'            => '(حجم الملف: $1, نوع الملف: $2)',
+'file-info-size'       => '($1 × $2 بيكسل, حجم الملف: $3, نوع الملف: $4)',
+'file-nohires'         => '<small>لا توجد دقة أعلى متوفرة.</small>',
+'show-big-image'       => 'الصورة بدقة أعلى',
+'show-big-image-thumb' => '<small>حجم هذا العرض: $1 × $2 بيكسل</small>',
+
+'newimages'    => 'معرض الصور الجديدة',
+'showhidebots' => '($1 بوت)',
+'noimages'     => 'لا يوجد محتوى ليتم عرضه.',
+
+'passwordtooshort' => 'كلمة السرّ التي اخترتها قصيرة. يجب أن لا يقل طول الكلمة عن $1 خانة.',
+
+# Metadata
+'metadata'          => 'معلومات الصورة (ميتا)',
+'metadata-help'     => 'هذا الملف يحتوي معلومات إضافية، غالبا ما تكون أضيفت من قبل آلة التصوير الإلكترونية أو الماسح الضوئي المستخدم في تحميل الصورة إلى الحاسوب. إذا كان الملف قد عُدّل عما كان عليه عند رفع الصورة فإن  المعلومات الواردة هنا قد لا تعبر عن هذه الصورة المعدلة.',
+'metadata-expand'   => 'إظهار معلومات إضافية',
+'metadata-collapse' => 'إخفاء المعلومات الإضافية',
+
+# EXIF tags
+'exif-imagewidth'          => 'العرض',
+'exif-imagelength'         => 'الطول',
+'exif-orientation'         => 'التوجية',
+'exif-imagedescription'    => 'عنوان الصورة',
+'exif-make'                => 'منتج آلة التصوير',
+'exif-model'               => 'نوع آلة التصوير',
+'exif-software'            => 'البرمجيات المستخدمة',
+'exif-artist'              => 'المؤلف',
+'exif-copyright'           => 'مالك الحقوق المحفوظة',
+'exif-usercomment'         => 'تعليقات المستخدم',
+'exif-datetimeoriginal'    => 'تاريخ و وقت الإنتاج',
+'exif-exposuretime'        => 'مدة التعرض',
+'exif-exposuretime-format' => '$1 ثانية ($2)',
+'exif-shutterspeedvalue'   => 'سرعة الغالق',
+'exif-focallength'         => 'البعد البؤري للعدسة',
+'exif-focallength-format'  => '$1 ملم',
+'exif-customrendered'      => 'معالجة الصورة حسب الطّلب',
+
+'exif-orientation-1' => 'وضعية طبيعية', # 0th row: top; 0th column: left
+
+'exif-exposureprogram-2' => 'برنامج إعتيادي',
+
+'exif-meteringmode-255' => 'غير ذلك',
+
+'exif-focalplaneresolutionunit-2' => 'بوصة',
+
+'exif-customrendered-0' => 'عملية طبيعية',
+'exif-customrendered-1' => 'عملية حسب الطلب',
+
+'exif-contrast-0' => 'وضعية طبيعية',
+
+'exif-saturation-0' => 'وضعية طبيعية',
+
+'exif-sharpness-0' => 'وضعية طبيعية',
+
+# Pseudotags used for GPSSpeedRef and GPSDestDistanceRef
+'exif-gpsspeed-k' => 'كيلومتر في الساعة',
+
+# External editor support
+'edit-externally'      => 'حرر هذا الملف باستخدام تطبيق خارجي',
+'edit-externally-help' => 'إقرأ [http://meta.wikimedia.org/wiki/Help:External_editors تعليمات الإعداد] لمزيد من المعلومات.',
+
+# 'all' in various places, this might be different for inflected languages
+'recentchangesall' => 'الجميع',
+'imagelistall'     => 'الجميع',
+'watchlistall1'    => 'الجميع',
+'watchlistall2'    => 'الجميع',
+'namespacesall'    => 'الكل',
+
+# E-mail address confirmation
+'confirmemail'            => 'أكد العنوان الإلكتروني',
+'confirmemail_noemail'    => 'ليس لديك بريد صحيح مسجل في [[{{ns:special}}:Preferences|تفضيلاتك]].',
+'confirmemail_text'       => 'هذا الموقع يتطلب تأكيد عنوانك الإلكتروني قبل استعمال خصائص البريد الإلكتروني. اضغط على زر التفعيل بالأسفل ليتم إرسال رسالة تأكيد لعنوانك. ستتضمن الرسالة رمز تفعيل، اضغط على الوصلة التي تحتوي الرمز لتأكيد أن عنوانك الإلكتروني صحيح.',
+'confirmemail_pending'    => "<div class=\"error\">
+'''تم إرسال كود التأكيد بالفعل من قبل إلى بريدك الإلكتروني، إذا كان حسابك قد تم عمله حالا، ربما يجب أن تنتظر بضع دقائق قبل طلبك لكود آخر.'''
+</div>",
+'confirmemail_send'       => 'أرسل رمز التفعيل',
+'confirmemail_sent'       => 'تم إرسال رسالة التأكيد، شكرا لك.',
+'confirmemail_oncreate'   => 'تم إرسال كود تأكيد لعنوان بريدك الإلكتروني.
+لا يشترط أن تستخدم الكود للدخول للموسوعة باسمك، ولكن يجب أن تقوم بإدخاله قبل
+استخدامك أيا من خواص البريد الإلكتروني المستخدمة هنا في الويكي.',
+'confirmemail_sendfailed' => 'لم نستطع إرسال رسالة التأكيد. من فضلك، تأكد من بريدك الإلكتروني.
+
+الخطأ الذي حدث: $1',
+'confirmemail_invalid'    => 'رمز تفعيل خاطئ. ربما انتهت فترة صلاحيته.',
+'confirmemail_needlogin'  => 'يجب عليك $1 لتأكيد البريد الإلكتروني الخاص بك.',
+'confirmemail_success'    => 'تم تأكيد بريدك الإلكتروني، بإمكانك الآن الدخول و التمتع بالويكي.',
+'confirmemail_loggedin'   => 'تم تأكيد بريدك الإلكتروني، شكرا لك.',
+'confirmemail_error'      => 'ثمة شئ خطأ حدث عند محاولة حفظ تأكيدك.',
+'confirmemail_subject'    => 'رسالة تأكيد البريد من {{SITENAME}}',
+'confirmemail_body'       => 'شخصا ما, من المحتمل ان يكون أنت من العنوان $1 , قام بتسجيل 
+حساب بهذا العنوان الإلكتروني على {{SITENAME}}, الحساب هو:
+
+"$2"
+
+لتأكيد أن هذا الحساب يخصك حقا و تريد تفعيل خواص البريد الإلكتروني به على {{SITENAME}}, افتح هذه الوصلة بمتصفحك:
+
+$3
+
+لو لم يكن هذا * أنت * , لا تضغط هذه الوصلة. رمز التفيعل سينتهي في $4.',
+
+# Inputbox extension, may be useful in other contexts as well
+'tryexact'       => 'ابحث عن عنوان مطابق',
+'searchfulltext' => 'ابحث في النص الكامل',
+'createarticle'  => 'إنشاء مقالة',
+
+# Scary transclusion
+'scarytranscludetoolong' => '[عنوان طويل للغاية; معذرة]',
+
+# Trackbacks
+'trackbackbox'      => '<div id="mw_trackbacks">
+المتابعات الخاصة بهذه المقالة:<br />
+$1
+</div>',
+'trackbackremove'   => ' ([$1 حذف])',
+'trackbacklink'     => 'متابعة',
+'trackbackdeleteok' => 'تم بنجاح إلغاء المتابعة.',
+
+# Delete conflict
+'deletedwhileediting' => "'''<span style=\"color:red;\">تحذير:</span> لقد تمّ حذف هذه الصفحة بعد أن بدأت بتعديلها.'''",
+'confirmrecreate'     => "لقد قام المستخدم [[مستخدم:$1|$1]] ([[نقاش المستخدم:$1|نقاش]]) بحذف هذه المقالة بعد أن بدأت بتحريرها للسبب التالي:
+:''$2''
+الرجاء التأكد من أنك تريد إعادة إنشاء هذه المقالة.",
+'recreate'            => 'أعد الإنشاء',
+
+'unit-pixel' => 'بك',
+
+# HTML dump
+'redirectingto' => 'جاري التحويل إلى [[$1]]...',
+
+# action=purge
+'confirm_purge'        => 'امسح كاش هذه الصفحة؟
+
+$1',
+'confirm_purge_button' => 'تابع',
+
+'youhavenewmessagesmulti' => 'لديك رسائل جديدة على $1',
+
+'searchcontaining' => "ابحث عن المقالات التي تحتوي ''$1''.",
+'searchnamed'      => "ابحث عن المقالات التي عنوانها ''$1''.",
+'articletitles'    => "المقالات التي تبدأ ب ''$1''",
+'hideresults'      => 'إخفاء النتائج',
+
+# DISPLAYTITLE
+'displaytitle' => '(اعرض وصلة هذه الصفحة هكذا [[$1]])',
+
+'loginlanguagelabel' => 'اللغة: $1',
+
+# Multipage image navigation
+'imgmultipageprev'   => '&rarr; الصفحة السابقة',
+'imgmultipagenext'   => 'الصفحة التالية &larr;',
+'imgmultigo'         => 'اذهب!',
+'imgmultigotopre'    => 'اذهب إلى صفحة',
+'imgmultiparseerror' => 'يبدو أن ملف الصورة به خطأ ما أو غير صحيح، لذا لا يمكن أن تعرض {{SITENAME}} قائمة بالملفات.',
+
+# Table pager
+'ascending_abbrev'         => 'تصاعدي',
+'descending_abbrev'        => 'تنازلي',
+'table_pager_next'         => 'الصفحة التالية',
+'table_pager_prev'         => 'الصفحة السابقة',
+'table_pager_first'        => 'الصفحة الأولى',
+'table_pager_last'         => 'الصفحة الأخيرة',
+'table_pager_limit'        => 'اعرض $1 عنصر في الصفحة',
+'table_pager_limit_submit' => 'اذهب',
+'table_pager_empty'        => 'لا نتائج',
+
+# Auto-summaries
+'autosumm-blank'   => 'يرجى الانتباه إلى أن هذه الصفحة تم إفراغها',
+'autosumm-replace' => "يرجى الانتباه! استبدل المحتوى بـ '$1'",
+'autoredircomment' => 'تحويل إلى [[$1]]', # This should be changed to the new naming convention, but existed beforehand
+'autosumm-new'     => 'صفحة جديدة: $1',
+
+# Size units
+'size-bytes'     => '$1 بايت',
+'size-kilobytes' => '$1 كيلوبايت',
+'size-megabytes' => '$1 ميجابايت',
+'size-gigabytes' => '$1 جيجابايت',
+
+# Live preview
+'livepreview-loading' => 'جاري التحميل…',
+'livepreview-ready'   => 'جاري التحميل… جاهز!',
+'livepreview-failed'  => 'فشل العرض المباشر!
+حاول تجربة العرض العادي.',
+'livepreview-error'   => 'لم ينجح الاتصال: $1 "$2"
+حاول تجربة العرض العادي.',
+
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesArc.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesArc.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesArc.php	(revision 1280)
@@ -0,0 +1,14 @@
+<?php
+
+/** Aramaic ( ܕܥܒܪܸܝܛ )
+  *
+  * @addtogroup Language
+  */
+
+$rtl = true;
+$defaultUserOptionOverrides = array(
+	# Swap sidebar to right side by default
+	'quickbar' => 2,
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesAs.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesAs.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesAs.php	(revision 1280)
@@ -0,0 +1,19 @@
+<?php
+/** Assamese (অসমীয়া)
+ *
+ * @addtogroup Language
+ */
+
+$digitTransformTable = array(
+	'0' => '০',
+	'1' => '১',
+	'2' => '২',
+	'3' => '৩',
+	'4' => '৪',
+	'5' => '৫',
+	'6' => '৬',
+	'7' => '৭',
+	'8' => '৮',
+	'9' => '৯'
+);
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesAst.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesAst.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesAst.php	(revision 1280)
@@ -0,0 +1,28 @@
+<?php
+/** Asturian (Asturianu)
+  *
+  * @addtogroup Language
+  */
+
+$namespaceNames = array(
+	NS_MEDIA            => 'Media',
+	NS_SPECIAL          => 'Especial',
+	NS_MAIN             => '',
+	NS_TALK             => 'Discusión',
+	NS_USER             => 'Usuariu',
+	NS_USER_TALK        => 'Usuariu_discusión',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK     => '$1_discusión',
+	NS_IMAGE            => 'Imaxen',
+	NS_IMAGE_TALK       => 'Imaxen_discusión',
+	NS_MEDIAWIKI        => 'MediaWiki',
+	NS_MEDIAWIKI_TALK   => 'MediaWiki_discusión',
+	NS_TEMPLATE         => 'Plantilla',
+	NS_TEMPLATE_TALK    => 'Plantilla_discusión',
+	NS_HELP             => 'Ayuda',
+	NS_HELP_TALK        => 'Ayuda_discusión',
+	NS_CATEGORY         => 'Categoría',
+	NS_CATEGORY_TALK    => 'Categoría_discusión',
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesAv.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesAv.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesAv.php	(revision 1280)
@@ -0,0 +1,8 @@
+<?php
+/** Avar (Авар)
+  *
+  * @addtogroup Language
+  */
+
+$fallback = 'ru';
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesAy.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesAy.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesAy.php	(revision 1280)
@@ -0,0 +1,8 @@
+<?php
+/** Aymara
+  *
+  * @addtogroup Language
+  */
+
+$fallback = 'es';
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesAz.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesAz.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesAz.php	(revision 1280)
@@ -0,0 +1,604 @@
+<?php
+/** Azerbaijani (Azərbaycan)
+  *
+  * @addtogroup Language
+  */
+
+$namespaceNames = array(
+	NS_MEDIA            => 'Mediya',
+	NS_SPECIAL          => 'Xüsusi',
+	NS_MAIN             => '',
+	NS_TALK             => 'Müzakirə',
+	NS_USER             => 'İstifadəçi',
+	NS_USER_TALK        => 'İstifadəçi_müzakirəsi',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK     => '$1_müzakirəsi',
+	NS_IMAGE            => 'Şəkil',
+	NS_IMAGE_TALK       => 'Şəkil_müzakirəsi',
+	NS_MEDIAWIKI        => 'MediyaViki',
+	NS_MEDIAWIKI_TALK   => 'MediyaViki_müzakirəsi',
+	NS_TEMPLATE         => 'Şablon',
+	NS_TEMPLATE_TALK    => 'Şablon_müzakirəsi',
+	NS_HELP             => 'Kömək',
+	NS_HELP_TALK        => 'Kömək_müzakirəsi',
+	NS_CATEGORY         => 'Kateqoriya',
+	NS_CATEGORY_TALK    => 'Kateqoriya_müzakirəsi',
+);
+
+$separatorTransformTable = array(',' => '.', '.' => ',' );
+
+
+$messages = array(
+# User preference toggles
+'tog-hideminor'        => 'Son dəyişikliklərdə kiçik redaktələri gizlə',
+'tog-showtoc'          => 'Mündərəcat siyhəsin göstər (3 başliqdan artix ola səhifələrdə)',
+'tog-rememberpassword' => 'Parolu xatırla',
+'tog-fancysig'         => 'Xam imza (daxili bağlantı yaratmaz)',
+
+'underline-always'  => 'Həmişə',
+'underline-never'   => 'Həç zaman',
+'underline-default' => 'Browser default',
+
+'skinpreview' => '(Sınaq göstərişi)',
+
+# Dates
+'sunday'    => 'Bazar',
+'monday'    => 'Bazar ertǝsi',
+'tuesday'   => 'Çǝrşenbǝ axşamı',
+'wednesday' => 'Çǝrşenbǝ',
+'thursday'  => 'Cümǝ axşamı',
+'friday'    => 'Cümǝ',
+'saturday'  => 'Şǝnbǝ',
+'january'   => 'Yanvar',
+'february'  => 'Fevral',
+'march'     => 'Mart',
+'april'     => 'Aprel',
+'may_long'  => 'May',
+'june'      => 'Iyun',
+'july'      => 'Iyul',
+'august'    => 'Avqust',
+'september' => 'Sentyabr',
+'october'   => 'Oktyabr',
+'november'  => 'Noyabr',
+'december'  => 'Dekabr',
+'jan'       => 'Yanvar',
+'feb'       => 'Fevral',
+'mar'       => 'Mart',
+'apr'       => 'Aprel',
+'may'       => 'May',
+'jun'       => 'Iyun',
+'jul'       => 'Iyul',
+'aug'       => 'Avqust',
+'sep'       => 'Sentyabr',
+'oct'       => 'Oktyabr',
+'nov'       => 'Noyabr',
+'dec'       => 'Dekabr',
+
+# Bits of text used by many pages
+'categories'      => 'Kateqoriyalar',
+'pagecategories'  => 'Kateqoriyalar',
+'category_header' => '"$1" kategoriyasındaki məqalələr',
+'subcategories'   => 'Alt kategoriyalar',
+
+'about'          => 'İzah',
+'article'        => 'Mündəricat Səhifəsi',
+'newwindow'      => '(Yeni pəncərədə açılır)',
+'cancel'         => 'Ləğv et',
+'qbfind'         => 'Tap',
+'qbedit'         => 'Redaktə',
+'qbpageoptions'  => 'Bu səhifə',
+'qbpageinfo'     => 'Məzmun',
+'qbmyoptions'    => 'Mənim səhifələrim',
+'qbspecialpages' => 'Xüsusi səhifələr',
+'mypage'         => 'Mənim səhifəm',
+'mytalk'         => 'Danişiqlarım',
+'navigation'     => 'Rəhbər',
+
+'errorpagetitle'    => 'Xəta',
+'returnto'          => '$1 səhifəsinə qayıt.',
+'help'              => 'Kömək',
+'search'            => 'Axtar',
+'searchbutton'      => 'Axtar',
+'go'                => 'Gətir',
+'searcharticle'     => 'Gətir',
+'history'           => 'Səhifənin tarixçəsi',
+'history_short'     => 'Tarixçə',
+'printableversion'  => 'Çap variantı',
+'permalink'         => 'Daimi bağlantı',
+'edit'              => 'Redaktə',
+'editthispage'      => 'Bu səhifəni redaktə edin',
+'delete'            => 'Sil',
+'deletethispage'    => 'Bu səhifəni sil',
+'protect'           => 'Qoru',
+'protectthispage'   => 'Bu səhifəni qoru',
+'unprotect'         => 'Qorumanı bitir',
+'unprotectthispage' => 'Bu səhifəni qoruma',
+'newpage'           => 'Yeni səhifə',
+'talkpage'          => 'Bu səhifəyi müzakirə et',
+'specialpage'       => 'Xüsusi səhifə',
+'postcomment'       => 'Post a comment',
+'articlepage'       => 'Məqaləyə get',
+'talk'              => 'Müzakirə',
+'toolbox'           => 'Alətlər Sandıqı',
+'userpage'          => 'İstifadəçi səhifəsini göstər',
+'projectpage'       => 'Layihə səhifəsini göstər',
+'viewtalkpage'      => 'View discussion',
+'otherlanguages'    => 'Başqa dillərdə',
+'redirectedfrom'    => '($1 səhifəsindən istiqamətləndirilmişdir)',
+'redirectpagesub'   => 'İstiqamətləndirmə səhifəsi',
+'lastmodifiedat'    => 'Bu səhifə sonuncu dəfə $2, $1 tarixində redaktə edilib.', # $1 date, $2 time
+
+# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
+'aboutsite'         => '{{SITENAME}} haqqında',
+'aboutpage'         => 'Project:İzah',
+'bugreports'        => "Xəta mə'ruzəsı",
+'bugreportspage'    => "Project:Xəta_mə'ruzəsı",
+'copyright'         => 'Bu məzmun $1 əhatəsindədir.',
+'copyrightpagename' => '{{SITENAME}} müəllif',
+'copyrightpage'     => 'Project:Müəllif',
+'currentevents'     => 'Güncəl hadisələr',
+'currentevents-url' => 'Project:Güncəl Hadisələr',
+'disclaimers'       => 'İmtina etmə',
+'edithelp'          => 'Redaktə kömək',
+'edithelppage'      => 'Help:Redaktə',
+'faq'               => 'FAQ',
+'faqpage'           => 'Project:FAQ',
+'helppage'          => 'Help:Mündəricət',
+'mainpage'          => 'Ana Səhifə',
+'portal'            => 'Kənd Meydani',
+'portal-url'        => 'Project:Kənd Meydani',
+'sitesupport'       => 'Bağışlar',
+
+'youhavenewmessages' => 'Hal-hazırda $1 var. ($2)',
+'newmessageslink'    => 'yeni mesajlar!',
+'editsection'        => 'redaktə',
+'editold'            => 'redaktə',
+'toc'                => 'Mündəricat',
+'showtoc'            => 'göstər',
+'hidetoc'            => 'gizlə',
+
+# Short words for each namespace, by default used in the 'article' tab in monobook
+'nstab-main'      => 'Məqalə',
+'nstab-user'      => 'İstifadəçi səhifəsi',
+'nstab-special'   => 'Xüsusi',
+'nstab-project'   => 'Layihə səhifəsi',
+'nstab-image'     => 'Fayl',
+'nstab-mediawiki' => "Mə'lumat",
+'nstab-template'  => 'Şablon',
+'nstab-help'      => 'Kömək',
+'nstab-category'  => 'Kateqoriya',
+
+# General errors
+'error'         => 'Xəta',
+'databaseerror' => 'Verilənlər bazası xətası',
+'readonly'      => 'Verilənlər bazası kilidli',
+'internalerror' => 'Daxili xəta',
+'badtitle'      => 'Yanlış başlıq',
+'viewsource'    => 'Mənbə göstər',
+
+# Login and logout pages
+'logouttitle'                => 'İstifadəçi çıxış',
+'logouttext'                 => "<strong>Sistemdən çıxdınız.</strong><br /> Vikipediyanı anonim olaraq istifadə etməyə davam edəbilər, və ya eyni yaxud başqa istifadəçi adı ilə yenidən daxil ola bilərsiniz. Diqqətinizə çatdırırıq ki, ön yaddaşı (browser cache) təmizləyənə qədər bə'zi səhifələr sistemdən çıxdığınız halda da göstərilə bilər.",
+'welcomecreation'            => '== $1, xoş gəlmişsiniz! == Hesabınız yaradıldı. {{SITENAME}} nizamlamalarını dəyişdirməyi unutmayın.',
+'loginpagetitle'             => 'İstifadəçi Giriş Səhifəsi',
+'yourname'                   => 'İstifadəçi adı',
+'yourpassword'               => 'Parol',
+'yourpasswordagain'          => 'Parolu təkrar yazın',
+'remembermypassword'         => 'Məni xatırla',
+'alreadyloggedin'            => '<strong>User $1, Siz onsuz da daxil olmusunuz!</strong><br />',
+'login'                      => 'Daxil ol',
+'loginprompt'                => '{{SITENAME}}-ya daxil olmaq üçün "veb kökələrinin" (cookies) istifadəsinə icazə verilməlidir.',
+'userlogin'                  => 'Daxil ol və ya istifadəçi yarat',
+'logout'                     => 'Çıxış',
+'userlogout'                 => 'Çıxış',
+'nologin'                    => 'İstifadəçi adınız yoxdursa, $1.',
+'nologinlink'                => 'hesab açın',
+'createaccount'              => 'Yeni hesab aç',
+'gotaccount'                 => 'Giriş hesabınız varsa $1.',
+'gotaccountlink'             => 'daxil olun',
+'createaccountmail'          => 'e-məktub ilə',
+'youremail'                  => 'E-məktub *',
+'username'                   => 'İstifadəçi adı:',
+'uid'                        => 'İstifadəçi ID:',
+'yourrealname'               => 'Həqiqi adınız *',
+'yourlanguage'               => 'Dil:',
+'yournick'                   => 'Ləqəb:',
+'email'                      => 'E-məktub',
+'prefs-help-email'           => '* E-məktub (qeyri-məcburi): Enables others to contact you through your user or user_talk page without the need of revealing your identity.',
+'loginsuccesstitle'          => 'Daxil olundu',
+'loginsuccess'               => "'''\"\$1\" olaraq {{SITENAME}}-ya daxil oldunuz.'''",
+'wrongpassword'              => 'Yanlış parol. Təkrar yaz.',
+'wrongpasswordempty'         => 'Parol boş. Təkrar yaz.',
+'mailmypassword'             => 'Parolu unutmuşam',
+'noemail'                    => '"$1" adlı istifadəçi e-məktub ünvanı qeyd edmemişdir.',
+'acct_creation_throttle_hit' => 'Siz artıq $1 hesab açmısınız. Daha çox hesab açabilmərsiniz.',
+'emailauthenticated'         => 'E-məktub ünvanınız $1 tarixində təsdiq edilib.',
+'emailnotauthenticated'      => 'Your e-mail address is not yet authenticated. No e-mail will be sent for any of the following features.',
+'emailconfirmlink'           => 'E-məktubunu təsdiq et',
+'invalidemailaddress'        => 'E-məktub ünvanını qeyri düzgün formatda olduğu üçün qəbul edə bilmirik. Xahiş edirik düzgün formatlı ünvan daxil edin və ya bu sahəni boş qoyun.',
+
+# Edit page toolbar
+'bold_sample'     => 'Qalın mətn',
+'bold_tip'        => 'Qalın mətn',
+'italic_sample'   => 'Kursiv mətn',
+'italic_tip'      => 'Kursiv mətn',
+'link_sample'     => 'Bağlantı başlığı',
+'link_tip'        => 'Daxili bağlantı',
+'extlink_sample'  => 'http://www.misal.com başlıq',
+'extlink_tip'     => 'Xarici səhifə (http:// ekini unutma)',
+'headline_sample' => 'Başlıq metni',
+'headline_tip'    => '2. səviyyə başlıq',
+'image_sample'    => 'Misal.jpg',
+'media_sample'    => 'Misal.ogg',
+'hr_tip'          => 'Horizontal cizgi',
+
+# Edit pages
+'summary'            => 'Qısa məzmun',
+'subject'            => 'Mövzu/başlıq',
+'minoredit'          => 'Kiçik redaktə',
+'watchthis'          => 'Bu səhifəni izlə',
+'savearticle'        => 'Səhifəni qeyd et',
+'preview'            => 'Sınaq göstərişi',
+'showpreview'        => 'Sınaq göstərişi',
+'showdiff'           => 'Dəyişiklikləri göstər',
+'blockedtitle'       => 'İstifadəçi bloklanıb',
+'whitelistedittitle' => 'Redaktə üçün daxil olmalısınız',
+'whitelistreadtitle' => 'Oxumaq üçün daxil olmalısınız',
+'accmailtitle'       => 'Parol göndərildi.',
+'accmailtext'        => '"$1" üçün parol göndərildi bu ünvana : $2.',
+'newarticle'         => '(Yeni)',
+'newarticletext'     => "Mövcud olmayan səhifəyə olan keçidi izlədiniz. Aşağıdakı sahəyə məzmununu yazaraq bu səhifəni '''siz''' yarada bilərsiniz. (əlavə məlumat üçün [[{{MediaWiki:helppage}}|kömək səhifəsinə]] baxın). Əgər bu səhifəyə səhvən gəlmisinizsə sadəcə olaraq brauzerin '''geri''' düyməsinə vurun.",
+'noarticletext'      => "Hal-hazırda bu səhifə boşdur. Başqa səhifələrdə [[{{ns:special}}:Search/{{PAGENAME}}|bu səhifənin adını axtara]] bilər və ya '''[{{fullurl:{{NAMESPACE}}:{{PAGENAME}}|action=edit}} səhifəni siz redaktə edəbilərsiniz]'''.",
+'previewnote'        => '<strong>Bu yalnız sınaq göstərişidir; dəyişikliklər hal-hazırda qeyd edilmemişdir!</strong>',
+'editing'            => 'Redaktə $1',
+'editinguser'        => 'Redaktə $1',
+'yourtext'           => 'Metniniz',
+'yourdiff'           => 'Fərqlər',
+'templatesused'      => 'Bu səhifədə istifadə edilmiş şablonlar:',
+
+# History pages
+'revhistory'          => 'Versiya tarixçəsi',
+'currentrev'          => 'Hal-hazırkı versiya',
+'revisionasof'        => '$1 versiyası',
+'previousrevision'    => '←Əvvəlki versiya',
+'nextrevision'        => 'Sonrakı versiya→',
+'currentrevisionlink' => 'Hal-hazırkı versiyanı göstər',
+'cur'                 => 'hh',
+'next'                => 'sonrakı',
+'last'                => 'son',
+'orig'                => 'orig',
+'histlegend'          => 'Fərqləri seçmə və göstərmə: müqaisə etmək istədiyiniz versiyaların yanındakı radio qutularına işarə qoyun və daxil etmə düyməsinə(enter-a) və ya "müqaisə et" düyməsinə vurun.<br />
+Açıqlama: (hh) = hal-hazırkı versiya ilə olan fərqlər,
+(son) = əvvəlki versiya ilə olan fərqlər, K = kiçik redaktə.',
+'histfirst'           => 'Ən əvvəlki',
+'histlast'            => 'Ən sonuncu',
+
+# Diffs
+'difference'              => '(Versiyalar arasındakı fərq)',
+'lineno'                  => 'Sətir $1:',
+'editcurrent'             => 'Bu səhifənin hal-hazırkı versiyanı redaktə et',
+'compareselectedversions' => 'Seçilən versiyaları müqaisə et',
+
+# Search results
+'prevn'          => 'əvvəlki $1',
+'nextn'          => 'sonrakı $1',
+'viewprevnext'   => 'Göstər ($1) ($2) ($3).',
+'powersearch'    => 'Axtar',
+'blanknamespace' => '(Ana)',
+
+# Preferences page
+'preferences'        => 'Nizamlamalar',
+'changepassword'     => 'Parol dəyiş',
+'math'               => 'Riyaziyyat',
+'dateformat'         => 'Tarix formatı',
+'datedefault'        => 'Tərcih yox',
+'datetime'           => 'Tarix və vaxt',
+'prefs-personal'     => 'İstifadəçi profili',
+'prefs-rc'           => 'Son dəyişikliklər',
+'prefs-misc'         => 'Digər tərcihlər',
+'saveprefs'          => 'Qeyd et',
+'resetprefs'         => 'Reset',
+'oldpassword'        => 'Köhne parol:',
+'newpassword'        => 'Yeni parol:',
+'retypenew'          => 'Yeni parolu təkrar yazın:',
+'textboxsize'        => 'Redaktə',
+'searchresultshead'  => 'Axtar',
+'recentchangescount' => 'Son dəyişikliklərdə başlıq sayı:',
+'savedprefs'         => 'Tərcihlər qeyd edildi.',
+'timezonelegend'     => 'Saat qurşağı',
+'timezonetext'       => 'Server ilə vaxt fərqı. (Azərbaycan üçün +04:00)',
+'localtime'          => 'Məhəlli vaxt',
+'timezoneoffset'     => 'Vaxt fərqı¹',
+'servertime'         => 'Server vaxtı',
+'allowemail'         => 'Digər istifadəçilər mənə e-məktub göndərəbilir',
+'default'            => 'default',
+'files'              => 'Fayllar',
+
+# User rights
+'userrights-lookup-user'   => 'İstifadəçi qruplarını idarə et',
+'userrights-user-editname' => 'İstifadəçi adınızı yazın:',
+
+# Recent changes
+'changes'           => 'dəyişiklik',
+'recentchanges'     => 'Son dəyişikliklər',
+'recentchangestext' => "'''Ən son dəyişiklikləri bu səhifədən izləyin.'''",
+'rcnote'            => 'Aşağıdakı son <strong>$1</strong> dəyişiklik son <strong>$2</strong> gün ərzində edilmişdir.',
+'rclistfrom'        => '$1 vaxtından başlayaraq yeni dəyişiklikləri göstər',
+'rclinks'           => 'Son $2 gün ərzindəki son $1 dəyişikliyi göstər <br />$3',
+'diff'              => 'fərq',
+'hist'              => 'tarixçə',
+'hide'              => 'gizlət',
+'show'              => 'göstər',
+'minoreditletter'   => 'k',
+'newpageletter'     => 'Y',
+
+# Upload
+'upload'            => 'Qarşıya yüklə',
+'uploadbtn'         => 'Sənəd yüklə',
+'reupload'          => 'Təkrar yüklə',
+'reuploaddesc'      => 'Return to the upload form.',
+'uploaderror'       => 'Yükləyiş xətası',
+'uploadlog'         => 'yükleme kaydı',
+'filename'          => 'Fayl adı',
+'fileuploadsummary' => 'İzahat:',
+'filestatus'        => 'Müəllif statusu',
+'filesource'        => 'Mənbə',
+'uploadwarning'     => 'Yükləyiş xəbərdarlıqı',
+'savefile'          => 'Faylı qeyd et',
+
+# Image list
+'imagelist'        => 'Fayl siyahısı',
+'showlast'         => 'Show last $1 files sorted $2.',
+'byname'           => 'ada görə',
+'bydate'           => 'tarixe görə',
+'bysize'           => 'ölçüye görə',
+'imgdesc'          => 'desc',
+'imghistory'       => 'Faylın tarixçəsi',
+'deleteimg'        => 'sil',
+'noimage-linktext' => 'faylı yüklə',
+
+# MIME search
+'mimesearch' => 'MIME axtar',
+'mimetype'   => 'MIME type:',
+
+# Unwatched pages
+'unwatchedpages' => 'İzlənməyən səhifələr',
+
+# Statistics
+'statistics'    => 'Statistika',
+'sitestats'     => '{{SITENAME}} statistika',
+'userstats'     => 'İstifadəçi statistika',
+'sitestatstext' => "{{SITENAME}}-da hal-hazırda məqalələrin sayı: '''$2'''
+
+Verilənlər bazasında yekun '''$1''' səhifə var. Buna müzakirələr, istifadəçi səhifələri, köməklər, wikipedia lahiye səhifələri, xüsusi səhifələr, istiqamətləndirmə səhifələri, boş səhifələr ilə fayllar v əşablonlar daxildir.
+
+There have been a total of '''$3''' page views, and '''$4''' page edits
+since the wiki was setup.
+That comes to '''$5''' average edits per page, and '''$6''' views per edit.
+
+Hal-hazırda [http://meta.wikimedia.org/wiki/Help:Job_queue job queue] sayı: '''$7'''.",
+'userstatstext' => "Hal-hazırda '''$1''' istifadəçi, '''2''' (və ya '''4%''') tanesi idarəçi. (baxınız $3).",
+
+'doubleredirects' => 'İkiqat istiqamətləndirmələr',
+
+'brokenredirects' => 'Xətalı istiqamətləndirmə',
+
+# Miscellaneous special pages
+'nbytes'                  => '$1 bayt',
+'nlinks'                  => '$1 bağlantı',
+'lonelypages'             => 'Yetim səhifələr',
+'uncategorizedpages'      => 'Kateqoriyasız səhifələr',
+'uncategorizedcategories' => 'Kateqoriyasız kateqoriyalar',
+'unusedcategories'        => 'İstifadə edilməmiş kateqoriyalar',
+'unusedimages'            => 'İstifadə edilməmiş fayllar',
+'wantedcategories'        => 'Təlabat olunan kateqoriyalar',
+'wantedpages'             => 'Təlabat olunan səhifələr',
+'mostcategories'          => 'Kateqoriyası ən çox olan məqalələr',
+'mostrevisions'           => 'Ən çox nəzərdən keçirilmiş (versiyalı) məqalələr',
+'allpages'                => 'Bütün səhifələr',
+'randompage'              => 'İxtiyari səhifə',
+'shortpages'              => 'Qısa səhifələr',
+'longpages'               => 'Uzun səhifələr',
+'listusers'               => 'İstifadəçi siyahı',
+'specialpages'            => 'Xüsusi səhifələr',
+'spheading'               => 'İstifadəçilər üçün xüsusi səhifələr',
+'restrictedpheading'      => 'İdarəçilər üçün xüsusi səhifələr',
+'recentchangeslinked'     => 'Əlaqəli redaktələr',
+'newpages'                => 'Yeni səhifələr',
+'ancientpages'            => 'Ən köhnə səhifələr',
+'move'                    => 'Adını dəyişdir',
+'movethispage'            => 'Bu səhifənin adını dəyiş',
+
+# Book sources
+'booksources' => 'Kitab mənbələri',
+
+'categoriespagetext' => 'Wikide aşağıdaki kateqoriyalar var.',
+'version'            => 'Versiya',
+'log'                => 'Loglar',
+'alllogstext'        => "Qarşıya yükləmə, silmə, qoruma, bloklama ve sistem operatoru loqlarının birləşdirilmiş göstərməsi. Log növü, istifadəçi adı veya tə'sir edilən səhifəni seçib görüntünü kiçildə bilərsiniz.",
+
+# Special:Allpages
+'nextpage'       => 'Sonrakı səhifə ($1)',
+'allpagesfrom'   => 'Bu mövqedən başlayan səhifeleri göstər:',
+'allarticles'    => 'Bütün məqalələr',
+'allinnamespace' => 'Bütün səhifələr ($1 səhifələri)',
+'allpagesprev'   => 'Əvvəlki',
+'allpagesnext'   => 'Sonrakı',
+'allpagessubmit' => 'Gətir',
+
+# E-mail user
+'emailuser'       => 'İstifadəçiyə e-məktub yolla',
+'emailpage'       => 'İstifadəçiyə e-məktub yolla',
+'defemailsubject' => '{{SITENAME}} e-məktub',
+'noemailtitle'    => 'E-məktub ünvanı yox',
+'emailfrom'       => 'Kimdən',
+'emailsubject'    => 'Mövzu',
+'emailmessage'    => 'Mesaj',
+'emailsend'       => 'Göndər',
+'emailsent'       => 'E-məktub göndərildi',
+
+# Watchlist
+'watchlist'            => 'İzlədiyim səhifələr',
+'mywatchlist'            => 'İzlədiyim səhifələr',
+'watchnologin'         => 'Daxil olmamısınız',
+'addedwatch'           => 'İzləmə siyahısına əlavə edildi.',
+'addedwatchtext'       => '"$1" səhifəsi [[Special:Watchlist|izlədiyiniz səhifələrə]] əlavə edildi. Bu səhifədə və əlaqəli müzakirə səhifəsində olacaq dəyişikliklər orada göstəriləcək və səhifə asanlıqla seçiləbilmək üçün [[Special:Recentchanges|son dəyişikliklər]]-də qalın şriftlərlə görsənəcəkdir. <p> Səhifəni izləmə sıyahınızdan çıxarmaq üçün yan lovhədəki "izləmə" düyməsinə vurun.',
+'removedwatch'         => 'İzləmə siyahısından çıxardılıb',
+'removedwatchtext'     => '"$1" səhifəsi izləmə siyahınızdan çıxardıldı.',
+'watch'                => 'İzlə',
+'watchthispage'        => 'Bu səhifəni izlə',
+'unwatch'              => 'İzləmə',
+'unwatchthispage'      => 'İzləmə',
+'watchnochange'        => 'Verilən vaxt ərzində heç bir izlədiyiniz səhifə redaktə edilməmişdir.',
+'watchdetails'         => '* müzakirə səhifələri çıxmaq şərtilə $1 səhifəni izləyirsiniz
+* [[Special:Watchlist/edit|İzlədiyiniz səhifələrin tam siyahısının göstərilməsi və redaktəsi]]',
+'wlheader-showupdated' => "* Son ziyarətinizdən sonra edilən dəyişikliklər '''qalın şriftlərlə''' göstərilmişdir.",
+'watchmethod-recent'   => 'yeni dəyişikliklər izlənilən səhifələr üçün yoxlanılır',
+'watchmethod-list'     => 'izlənilən səhifələr yeni dəyişikliklər üçün yoxlanılır',
+'removechecked'        => 'İşarələnənləri izləmə siyahısından çıxart',
+'watchlistcontains'    => 'İzləmə siyahınızda $1 səhifə var.',
+'watcheditlist'        => "Bunlar izlədiyiniz səhifələrin əlifba sırasına görə siyahısıdır. Siyahıdan çıxartmaq istədiyiniz səhifələrin yanındakı qutuları işarələləyin və ekranın altındakı 'işarələnənləri sıyahıdan çıxart düyməsinə' vurun(məzmun səhifəsini çıxartdıqda əlaqəli müzakirə səhifəsi də (və tərsinə) çıxardılacaqdır).",
+'removingchecked'      => 'İstədikləriniz izləmə siyahısından çıxardılır...',
+'wlnote'               => 'Aşağıdakılar son <b>$2</b> saatdakı son $1 dəyişiklikdir.',
+'wlshowlast'           => 'Bunları göstər: son $1 saatı $2 günü $3',
+'wlsaved'              => 'Bu izləmə siyahınızın qeyd edilmiş halıdır.',
+
+# Delete/protect/revert
+'deletepage'     => 'Səhifəni sil',
+'confirm'        => 'Təsdiq et',
+'exblank'        => 'səhifə boş',
+'confirmdelete'  => 'Silmeyi təsdiq et',
+'actioncomplete' => 'Fəaliyyət tamamlandı',
+'deletedarticle' => 'silindi "[[$1]]"',
+'rollback'       => 'Əvvəlki versiya',
+'rollbacklink'   => 'əvvəlki halına qaytar',
+'confirmprotect' => 'Qorumayı təsdiq et',
+
+# Undelete
+'undelete'        => 'Silinmiş səhifələri göstər',
+'viewdeletedpage' => 'Silinmiş səhifələri göstər',
+
+# Namespace form on various pages
+'namespace' => 'Adlar fəzası:',
+'invert'    => 'Seçilən xaricindəkiləri',
+
+# Contributions
+'contributions' => 'İstifadəçi köməkləri',
+'mycontris'     => 'Köməklərim',
+'contribsub2'    => 'For $1 ($2)',
+'uctop'         => '(son)',
+
+# What links here
+'whatlinkshere' => 'Bu səhifəyə bağlantılar',
+'linklistsub'   => '(Bağlantılar siyahı)',
+
+# Block/unblock
+'blockip'            => 'İstifadəçiyi blokla',
+'ipbreason'          => 'Səbəb',
+'ipbsubmit'          => 'Bu istifadəçiyi əngəllə',
+'badipaddress'       => 'Yanlış IP',
+'blockipsuccesssub'  => 'bloklandi',
+'blockipsuccesstext' => '[[{{ns:Special}}:Contributions/$1| $1]]bloklanıb. <br />See[[{{ns:Special}}:Ipblocklist|IP blok siyahisi]] bloklanmış IP lər.',
+'ipblocklist'        => 'Əngəllənmiş istifadəçilər siyahı',
+'blocklink'          => 'blokla',
+'contribslink'       => 'Köməklər',
+'blocklogpage'       => 'Blok qeydı',
+
+# Move page
+'movepage'        => 'Səhifənin adını dəyiş',
+'movearticle'     => 'Səhifənin adını dəyişdir',
+'newtitle'        => 'Yeni başlıq',
+'movepagebtn'     => 'Səhifənin adını dəyiş',
+'movetalk'        => 'Bu səhifənin müzakirə səhifəsinin de adını dəyişdir.',
+'1movedto2'       => '[[$1]] adı dəyişildi. Yeni adı: [[$2]]',
+'1movedto2_redir' => '[[$1]] adı və məsiri dəyişildi : [[$2]]',
+'movereason'      => 'Səbəb',
+'revertmove'      => 'Əvvəlki vəziyyətinə',
+'delete_and_move' => 'Sil və apar',
+
+# Export
+'export' => 'Səhifələri ixrac et',
+
+# Namespace 8 related
+'allmessages'        => "Sistem mə'lumatları",
+'allmessagesname'    => 'Ad',
+'allmessagesdefault' => 'İlkin mətn',
+'allmessagescurrent' => 'İndiki mətn',
+'allmessagestext'    => "Sistem mə'lumatların siyahısı MediaWiki: namespace.",
+
+# Tooltip help for the actions
+'tooltip-pt-userpage'           => 'Öz Səhifəm',
+'tooltip-pt-anonuserpage'       => 'The user page for the ip you',
+'tooltip-pt-mytalk'             => 'Danişiq Səhifəm',
+'tooltip-pt-anontalk'           => 'Bu IP ünvanindan redaktə olunmuş danışıqlar',
+'tooltip-pt-preferences'        => 'Mənim Tərcihlərim',
+'tooltip-pt-watchlist'          => 'İzləməyə aldığım məqalələr.',
+'tooltip-pt-mycontris'          => 'Mən redakə etdiğim məqalələr siyahəsi',
+'tooltip-pt-login'              => 'Hesab açmaniz tövsiə olur, ama icbar yoxdu .',
+'tooltip-pt-anonlogin'          => 'Hesab açib girişiniz tövsiyə olur, ama məndatlı dəyil.',
+'tooltip-pt-logout'             => 'Çixiş',
+'tooltip-ca-talk'               => 'Məqalə həqqində müzakirə edib, nəzərivi bildir',
+'tooltip-ca-edit'               => 'Bu səhifani redaktə edə bilərsiz. Lütfən avvəl sinaq gostəriş edin.',
+'tooltip-ca-addsection'         => 'Bu müzakirə səhifəsində iştirak edin.',
+'tooltip-ca-viewsource'         => 'Bu səhifə qorun altindadir. Mənbəsinə baxabilərsiz.',
+'tooltip-ca-history'            => 'Bu səhifənin geçmiş nüsxələri.',
+'tooltip-ca-protect'            => 'Bu səhifəni qoru',
+'tooltip-ca-delete'             => 'Bu səhifəni sil',
+'tooltip-ca-undelete'           => 'Bu səhifəni silinmədən oncəki halına qaytarın',
+'tooltip-ca-move'               => 'Bu məqalənin adını dəyışin',
+'tooltip-ca-watch'              => 'Bu səhifəni izlə',
+'tooltip-ca-unwatch'            => 'Bu səhifənin izlənmasini bitir',
+'tooltip-search'                => 'Bu vikini axtarin',
+'tooltip-p-logo'                => 'Ana Səhifə',
+'tooltip-n-mainpage'            => 'Ana səhifəni görüş edin',
+'tooltip-n-portal'              => 'Projə həqqində, nələr edəbilərsiz, harda şeyləri tapa bilərsiz',
+'tooltip-n-currentevents'       => 'Gündəki xəbərlər ilə əlaqəli bilgilər',
+'tooltip-n-recentchanges'       => 'Bu Wikidə Son dəyişikliklər siyahəsi.',
+'tooltip-n-randompage'          => 'Bir təsadufi, necə gəldi, məqaləyə baxin',
+'tooltip-n-help'                => 'Yardım almaq üçün.',
+'tooltip-n-sitesupport'         => 'Maddi kömək',
+'tooltip-t-whatlinkshere'       => 'Wikidə bu məqaləyə bağlantilar',
+'tooltip-t-recentchangeslinked' => 'Bu məqaləyə ayid başqa səhifələrdə yeni dəyişikliklər',
+'tooltip-t-contributions'       => 'Bu üzvin redaktə etmiş məqalələr siyahəsi',
+'tooltip-t-emailuser'           => 'Bu istifadəçiyə bir e-məktub yolla',
+'tooltip-t-upload'              => 'Yeni FILE lar Wikiyə yüklə.',
+'tooltip-t-specialpages'        => 'Xüsusi səhifələrin siyahəsi',
+'tooltip-ca-nstab-help'         => 'Kömək səhifəsi',
+
+# Attribution
+'and' => 'və',
+
+# Spam protection
+'subcategorycount'       => 'Bu kategoriyada $1 alt kategoriya var.',
+'categoryarticlecount'   => 'Bu kategoriyada $1 məqalə var.',
+'listingcontinuesabbrev' => '(davam)',
+
+# Browsing diffs
+'previousdiff' => '← Əvvəlki fərq',
+'nextdiff'     => 'Sonrakı fərq →',
+
+'imagemaxsize' => 'Limit images on image description pages to:',
+'thumbsize'    => 'Kiçik ölçü:',
+
+'newimages' => 'Yeni faylların siyahısı',
+
+# 'all' in various places, this might be different for inflected languages
+'imagelistall'  => 'bütün',
+'watchlistall1' => 'hamısını',
+'watchlistall2' => 'hamısını',
+'namespacesall' => 'bütün',
+
+# E-mail address confirmation
+'confirmemail'          => 'E-məktubunu təsdiq et',
+'confirmemail_send'     => 'Təsdiq kodu göndər',
+'confirmemail_sent'     => 'Təsdiq e-məktubu göndərildi.',
+'confirmemail_success'  => 'E-məktub ünvanınız indi təsdiq edildi.',
+'confirmemail_loggedin' => 'E-məktubunuz indi təsdiq edildi.',
+'confirmemail_subject'  => '{{SITENAME}} e-məktub təsdiq etme',
+
+# Inputbox extension, may be useful in other contexts as well
+'createarticle' => 'Məqalə yarat',
+
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesBa.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesBa.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesBa.php	(revision 1280)
@@ -0,0 +1,251 @@
+<?php
+/** Bashkir (Башҡорт)
+  *
+  * @addtogroup Language
+  */
+
+$fallback = 'ru';
+
+
+$namespaceNames = array(
+	NS_MEDIA            => 'Медиа',
+	NS_SPECIAL          => 'Ярҙамсы',
+	NS_MAIN             => '',
+	NS_TALK             => 'Фекер_алышыу',
+	NS_USER             => 'Ҡатнашыусы',
+	NS_USER_TALK        => 'Ҡатнашыусы_м-н_фекер_алышыу', 
+	#NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK     => '$1_б-са_фекер_алышыу',
+	NS_IMAGE            => 'Рәсем',
+	NS_IMAGE_TALK       => 'Рәсем_б-са_фекер_алышыу',
+	NS_MEDIAWIKI        => 'MediaWiki',
+	NS_MEDIAWIKI_TALK   => 'MediaWiki_б-са_фекер_алышыу',
+	NS_TEMPLATE         => 'Ҡалып',
+	NS_TEMPLATE_TALK    => 'Ҡалып_б-са_фекер_алышыу',
+	NS_HELP             => 'Белешмә',
+	NS_HELP_TALK        => 'Белешмә_б-са_фекер_алышыу',
+	NS_CATEGORY         => 'Категория',
+	NS_CATEGORY_TALK    => 'Категория_б-са_фекер_алышыу',
+);
+
+$linkTrail = '/^((?:[a-z]|а|б|в|г|д|е|ё|ж|з|и|й|к|л|м|н|о|п|р|с|т|у|ф|х|ц|ч|ш|щ|ъ|ы|ь|э|ю|я|ә|ө|ү|ғ|ҡ|ң|ҙ|ҫ|һ|“|»)+)(.*)$/sDu';
+
+$messages = array(
+'mainpage' => 'Баш бит',
+
+'portal'          => 'Берләшмә',
+'portal-url'      => '{{ns:project}}:Берләшмә ҡоро',
+'about'           => 'Тасуирлау',
+'aboutsite'       => '{{grammar:genitive|{{SITENAME}}}}-ның тасуирламаһы',
+'aboutpage'       => '{{ns:project}}:Тасуирлама',
+'article'         => 'Мәҡәлә',
+'help'            => 'Белешмә',
+'sitesupport'     => 'Ярҙам итеү',
+'sitesupport-url' => '{{ns:project}}:Эскерһеҙ ярҙам',
+'edithelp'        => 'Мөхәрирләү белешмәһе',
+'newwindow'       => '(яңы биттә)',
+'cancel'          => 'Бөтөрөргә',
+'qbfind'          => 'Эҙләү',
+'qbmyoptions'     => 'Көйләү',
+'qbspecialpages'  => 'Махсус биттәр',
+'mypage'          => 'Шәхси бит',
+'mytalk'          => 'Минең менән фекер алышыу',
+'navigation'      => 'Төп йүнәлештәр',
+
+'currentevents'     => 'Ағымдағы ваҡиғалар',
+'currentevents-url' => 'Ағымдағы ваҡиғалар',
+
+'disclaimers'      => 'Яуаплылыҡтан баш тартыу',
+'disclaimerpage'   => 'Project:Яуаплылыҡтан баш тартыу',
+'privacy'          => 'Сер һаҡлау сәйәсәте',
+'errorpagetitle'   => 'Хата',
+'returnto'         => '$1 битенә ҡайтыу.',
+'search'           => 'Эҙләү',
+'searchbutton'     => 'Табыу',
+'go'               => 'Күсеү',
+'searcharticle'    => 'Күсеү',
+'history'          => 'Тарих',
+'history_short'    => 'Тарих',
+'info_short'       => 'Мәғлүмәт',
+'printableversion' => 'Ҡағыҙға баҫыу өлгөһө',
+'permalink'        => 'Даими һылтау',
+'edit'             => 'Үҙгәртергә',
+'editthispage'     => 'Был мәҡәләне үҙгәртергә',
+'delete'           => 'Юҡ  итергә',
+'protect'          => 'Һаҡларға',
+'talkpage'         => 'Фекер алышыу',
+'specialpage'      => 'Ярҙамсы бит',
+'articlepage'      => 'Мәҡәләне ҡарап сығырға',
+'talk'             => 'Фекер алышыу',
+'toolbox'          => 'Ярҙамсы йүнәлештәр',
+'otherlanguages'   => 'Башҡа телдәрҙә',
+'lastmodifiedat'   => 'Был биттең һуңғы тапҡыр үҙгәртелеү ваҡыты: $2, $1 .', # $1 date, $2 time
+'copyright'        => '<p> $1 ярашлы эстәлеге менән һәр кем файҙалана ала.',
+'jumpto'           => 'Унда күсергә:',
+'jumptosearch'     => 'эҙләү',
+
+'editsection' => 'үҙгәртергә',
+'toc'         => 'Эстәлеге',
+'showtoc'     => 'күрһәтергә',
+'hidetoc'     => 'йәшерергә',
+
+# Short words for each namespace, by default used in the 'article' tab in monobook
+'nstab-main'      => 'Мәҡәлә',
+'nstab-user'      => 'Ҡатнашыусы',
+'nstab-special'   => 'Ярҙамсы бит',
+'nstab-mediawiki' => 'MediaWiki белдереүе',
+
+# General errors
+'error'           => 'Хата',
+'badarticleerror' => 'Был биттә ундай ғәмәл үтәргә ярамай',
+'badtitle'        => 'Ярамаған исем',
+
+# Login and logout pages
+'loginpagetitle'     => 'Танышыу йәки теркәлеү',
+'yourname'           => 'Ҡатнашыусы исеме',
+'yourpassword'       => 'Һеҙҙең пароль',
+'yourpasswordagain'  => 'Парольде ҡабаттан яҙыу',
+'remembermypassword' => 'Парольде хәтерҙә ҡалдырырға',
+'yourdomainname'     => 'Һеҙҙең домен',
+'login'              => 'Танышыу йәки теркәлеү',
+'userlogin'          => 'Танышыу йәки теркәлеү',
+'logout'             => 'Тамамлау',
+'userlogout'         => 'Тамамлау',
+'nologin'            => 'Һеҙ әле теркәлмәгәнме? $1.',
+'nologinlink'        => 'Иҫәп яҙыуын булдырырға',
+'createaccount'      => 'Яңы ҡатнашыусыны теркәү',
+'gotaccount'         => 'Әгәр Һеҙ теркәлеү үткән булһағыҙ? $1.',
+'gotaccountlink'     => 'Үҙегеҙ менән таныштырығыҙ',
+'createaccountmail'  => 'эл. почта буйынса',
+'youremail'          => 'Электрон почта *',
+'yourrealname'       => 'Һеҙҙең ысын исемегеҙ (*)',
+'yourlanguage'       => 'Тышҡы күренештә ҡулланылған тел:',
+'yourvariant'        => 'Тел төрө',
+'yournick'           => 'Һеҙҙең уйҙырма исемегеҙ/ҡушаматығыҙ (имза өсөн):',
+'prefs-help-email'   => '* Электрон почта (күрһәтмәһәң дә була) башҡа ҡатнашыусылар менән туры бәйләнешкә инергә мөмкинселек бирә.',
+'loginsuccesstitle'  => 'Танышыу уңышлы үтте',
+'loginsuccess'       => 'Хәҙер һеҙ $1 исеме менән эшләйһегеҙ.',
+'wrongpassword'      => 'Һеҙ ҡулланған пароль ҡабул ителмәй. Яңынан яҙып ҡарағыҙ.',
+'mailmypassword'     => 'Яңы пароль ебәрергә',
+
+# Edit pages
+'summary'        => 'Үҙгәртеүҙең ҡыҫҡаса тасуирламаһы',
+'minoredit'      => 'Әҙ генә үҙгәрештәр',
+'watchthis'      => 'Был битте күҙәтеүҙәр исемлегенә индерергә',
+'savearticle'    => 'Яҙҙырып ҡуйырға',
+'preview'        => 'Ҡарап сығыу',
+'showpreview'    => 'Ҡарап сығырға',
+'showdiff'       => 'Индерелгән үҙгәрештәр',
+'previewnote'    => 'Ҡарап сығыу өлгөһө, әлегә үҙгәрештәр яҙҙырылмаған!',
+'editing'        => 'Мөхәрирләү  $1',
+'editinguser'    => 'Мөхәрирләү  $1',
+'editingsection' => 'Мөхәрирләү  $1 (секция)',
+'editingcomment' => 'Мөхәрирләү $1 (комментарий)',
+'yourtext'       => 'Һеҙҙең текст',
+'yourdiff'       => 'Айырмалыҡтар',
+
+# Search results
+'badquery'       => 'Һорау дөрөҫ төҙөлмәгән',
+'badquerytext'   => 'Һорауығыҙҙы үтәп булмай. Моғайын, Һеҙ өс хәрефтән ҡыҫҡараҡ һүҙ эҙләйһегеҙҙер, йәки һүҙегеҙҙә хата барҙыр. Һорауығыҙҙы яңынан төҙөп ҡарағыҙ әле.',
+'blanknamespace' => 'Мәҡәләләр',
+
+# Preferences page
+'preferences' => 'Көйләүҙәр',
+
+# Groups
+'group-all' => '(бөтә)',
+
+# Recent changes
+'changes'           => 'үҙгәрештәр',
+'recentchanges'     => 'Һуңғы үҙгәртеүҙәр',
+'recentchangestext' => '{{grammar:genitive|{{SITENAME}}}}. биттәрендә индерелгән һуңғы үҙгәртеүҙәр исемлеге',
+
+# Image list
+'imagelist_user' => 'Ҡатнашыусы',
+
+# MIME search
+'mimesearch' => 'MIME буйынса эҙләү',
+
+# Unwatched pages
+'unwatchedpages' => 'Бер кем дә күҙәтмәгән биттәр',
+
+# Statistics
+'userstatstext' => "Бөтәһе '''$1''' ҡатнашыусы теркәлгән, шуларҙан '''$2''' ($4 %) хәким бурыстарын үтәй.",
+
+# Miscellaneous special pages
+'allpages'            => 'Бөтә биттәр',
+'randompage'          => 'Осраҡлы мәҡәлә',
+'listusers'           => 'Ҡатнашыусылар исемлеге',
+'specialpages'        => 'Махсус биттәр',
+'spheading'           => 'Ярҙамсы биттәр',
+'recentchangeslinked' => 'Бәйле үҙгәртеүҙәр',
+'newpages-username'   => 'Ҡатнашыусы:',
+'ancientpages'        => 'Иң иҫке мәҡәләләр',
+'move'                => 'Яңы исем биреү',
+
+'alphaindexline' => '$1 алып $2 тиклем',
+
+# Special:Allpages
+'allpagesfrom'      => 'Ошондай хәрефтәрҙән башланған биттәрҙе күрһәтергә:',
+'allarticles'       => 'Бөтә мәҡәләләр',
+'allinnamespace'    => 'Бөтә биттәр (Исемдәре «$1» арауығында)',
+'allnotinnamespace' => 'Бөтә биттәр («$1» исемдәр арауығынан башҡа)',
+'allpagesprev'      => 'Алдағы',
+'allpagesnext'      => 'Киләһе',
+'allpagessubmit'    => 'Үтәргә',
+
+# E-mail user
+'emailuser'    => 'Ҡатнашыусыға хат',
+'emailfrom'    => 'Кемдән',
+'emailto'      => 'Кемгә',
+'emailmessage' => 'Хәбәр',
+
+# Watchlist
+'watchlist'    => 'Күҙәтеү исемлеге',
+'mywatchlist'    => 'Күҙәтеү исемлеге',
+'watchnologin' => 'Үҙегеҙҙе танытырға кәрәк',
+'addedwatch'   => 'Күҙәтеү исемлегенә өҫтәлде',
+'watch'        => 'Күҙәтергә',
+'unwatch'      => 'Күҙәтмәҫкә',
+'notanarticle' => 'Мәҡәлә түгел',
+
+'enotif_newpagetext' => 'Был яңы бит.',
+'changed'            => 'үҙгәртелгән',
+
+# Delete/protect/revert
+'actioncomplete' => 'Ғәмәл үтәлде',
+
+# Namespace form on various pages
+'namespace' => 'Исемдәр арауығы:',
+
+# Contributions
+'contributions' => 'Ҡатнашыусы өлөшө',
+'mycontris'     => 'ҡылған эштәр',
+
+# What links here
+'whatlinkshere' => 'Бында һылтанмалар',
+
+# Block/unblock
+'blockip' => 'Ҡатнашыусыны ябыу',
+
+# Namespace 8 related
+'allmessagesname' => 'Хәбәр',
+
+# Attribution
+'siteuser'  => '{{grammar:genitive|{{SITENAME}}}} - ла ҡатнашыусы $1',
+'and'       => 'һәм',
+'siteusers' => '{{grammar:genitive|{{SITENAME}}}} - ла ҡатнашыусы (-лар) $1',
+
+# Labels for User: and Title: on Special:Log pages
+'specialloguserlabel' => 'Ҡатнашыусы:',
+
+# 'all' in various places, this might be different for inflected languages
+'recentchangesall' => 'бөтә',
+'imagelistall'     => 'бөтә',
+'watchlistall1'    => 'бөтә',
+'watchlistall2'    => 'бөтә',
+'namespacesall'    => 'бөтә',
+
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesBar.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesBar.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesBar.php	(revision 1280)
@@ -0,0 +1,16 @@
+<?php
+/**
+ * Bavarian (Boarisch)
+ *
+ * @addtogroup Language
+ */
+
+$fallback = 'de';
+
+$messages = array(
+
+'mainpage'	=> 'Hauptsaitn',
+
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesBat_smg.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesBat_smg.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesBat_smg.php	(revision 1280)
@@ -0,0 +1,8 @@
+<?php
+/** Samogitian (Žemaitėška)
+  *
+  * @addtogroup Language
+  */
+
+$fallback = 'lt';
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesBe.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesBe.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesBe.php	(revision 1280)
@@ -0,0 +1,1044 @@
+<?php
+/** Belarusian normative (Беларуская мова)
+  *
+  * @addtogroup Language
+  */
+
+$skinNames = array(
+	'standard'    => 'Клясычны',
+	'nostalgia'   => 'Настальгія',
+	'cologneblue' => 'Кёльнскі смутак',
+	'davinci'     => 'Да Вінчы',
+	'mono'        => 'Мона',
+	'monobook'    => 'Монакніга',
+	'myskin'      => 'MySkin',
+	'chick'       => 'Цыпа'
+);
+
+$bookstoreList = array(
+	'OZ.by' => 'http://oz.by/search.phtml?what=books&isbn=$1',
+	'Amazon.com' => 'http://www.amazon.com/exec/obidos/ISBN=$1'
+);
+
+$datePreferences = array(
+	'default',
+	'dmy',
+	'ISO 8601',
+);
+
+$defaultDateFormat = 'dmy';
+
+$dateFormats = array(
+	'dmy time' => 'H:i',
+	'dmy date' => 'j xg Y',
+	'dmy both' => 'H:i, j xg Y',
+);
+
+$magicWords = array(
+	'redirect'               => array( 0,    '#redirect' ),
+	'notoc'                  => array( 0,    '__NOTOC__' ),
+	'nogallery'              => array( 0,    '__NOGALLERY__' ),
+	'forcetoc'               => array( 0,    '__FORCETOC__' ),
+	'toc'                    => array( 0,    '__TOC__' ),
+	'noeditsection'          => array( 0,    '__NOEDITSECTION__' ),
+	'start'                  => array( 0,    '__START__' ),
+	'currentmonth'           => array( 1,    'CURRENTMONTH' ),
+	'currentmonthname'       => array( 1,    'CURRENTMONTHNAME' ),
+	'currentmonthnamegen'    => array( 1,    'CURRENTMONTHNAMEGEN' ),
+	'currentmonthabbrev'     => array( 1,    'CURRENTMONTHABBREV' ),
+	'currentday'             => array( 1,    'CURRENTDAY' ),
+	'currentday2'            => array( 1,    'CURRENTDAY2' ),
+	'currentdayname'         => array( 1,    'CURRENTDAYNAME' ),
+	'currentyear'            => array( 1,    'CURRENTYEAR' ),
+	'currenttime'            => array( 1,    'CURRENTTIME' ),
+	'numberofpages'          => array( 1,    'NUMBEROFPAGES' ),
+	'numberofarticles'       => array( 1,    'NUMBEROFARTICLES' ),
+	'numberoffiles'          => array( 1,    'NUMBEROFFILES' ),
+	'numberofusers'          => array( 1,    'NUMBEROFUSERS' ),
+	'pagename'               => array( 1,    'PAGENAME' ),
+	'pagenamee'              => array( 1,    'PAGENAMEE' ),
+	'namespace'              => array( 1,    'NAMESPACE' ),
+	'namespacee'             => array( 1,    'NAMESPACEE' ),
+	'talkspace'              => array( 1,    'TALKSPACE' ),
+	'talkspacee'             => array( 1,    'TALKSPACEE' ),
+	'subjectspace'           => array( 1,    'SUBJECTSPACE', 'ARTICLESPACE' ),
+	'subjectspacee'          => array( 1,    'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+	'fullpagename'           => array( 1,    'FULLPAGENAME' ),
+	'fullpagenamee'          => array( 1,    'FULLPAGENAMEE' ),
+	'subpagename'  	         => array( 1,    'SUBPAGENAME' ),
+	'subpagenamee'           => array( 1,    'SUBPAGENAMEE' ),
+	'basepagename'           => array( 1,    'BASEPAGENAME' ),
+	'basepagenamee'          => array( 1,    'BASEPAGENAMEE' ),
+	'talkpagename'           => array( 1,    'TALKPAGENAME' ),
+	'talkpagenamee'          => array( 1,    'TALKPAGENAMEE' ),
+	'subjectpagename'        => array( 1,    'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+	'subjectpagenamee'       => array( 1,    'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
+	'msg'                    => array( 0,    'MSG:' ),
+	'subst'                  => array( 0,    'SUBST:' ),
+	'msgnw'                  => array( 0,    'MSGNW:' ),
+	'img_thumbnail'          => array( 1,    'thumbnail', 'thumb' ),
+	'img_manualthumb'        => array( 1,    'thumbnail=$1', 'thumb=$1' ),
+	'img_right'              => array( 1,    'right' ),
+	'img_left'               => array( 1,    'left' ),
+	'img_none'               => array( 1,    'none' ),
+	'img_width'              => array( 1,    '$1px' ),
+	'img_center'             => array( 1,    'center', 'centre' ),
+	'img_framed'             => array( 1,    'framed', 'enframed', 'frame' ),
+	'int'                    => array( 0,    'INT:' ),
+	'sitename'               => array( 1,    'SITENAME' ),
+	'ns'                     => array( 0,    'NS:' ),
+	'localurl'               => array( 0,    'LOCALURL:' ),
+	'localurle'              => array( 0,    'LOCALURLE:' ),
+	'server'                 => array( 0,    'SERVER' ),
+	'servername'             => array( 0,    'SERVERNAME' ),
+	'scriptpath'             => array( 0,    'SCRIPTPATH' ),
+	'grammar'                => array( 0,    'GRAMMAR:' ),
+	'notitleconvert'         => array( 0,    '__NOTITLECONVERT__', '__NOTC__' ),
+	'nocontentconvert'       => array( 0,    '__NOCONTENTCONVERT__', '__NOCC__' ),
+	'currentweek'            => array( 1,    'CURRENTWEEK' ),
+	'currentdow'             => array( 1,    'CURRENTDOW' ),
+	'revisionid'             => array( 1,    'REVISIONID' ),
+	'plural'                 => array( 0,    'PLURAL:' ),
+	'fullurl'                => array( 0,    'FULLURL:' ),
+	'fullurle'               => array( 0,    'FULLURLE:' ),
+	'lcfirst'                => array( 0,    'LCFIRST:' ),
+	'ucfirst'                => array( 0,    'UCFIRST:' ),
+	'lc'                     => array( 0,    'LC:' ),
+	'uc'                     => array( 0,    'UC:' ),
+	'raw'                    => array( 0,    'RAW:' ),
+	'displaytitle'           => array( 1,    'DISPLAYTITLE' ),
+	'rawsuffix'              => array( 1,    'R' ),
+	'newsectionlink'         => array( 1,    '__NEWSECTIONLINK__' ),
+	'currentversion'         => array( 1,    'CURRENTVERSION' ),
+	'urlencode'              => array( 0,    'URLENCODE:' ),
+	'currenttimestamp'       => array( 1,    'CURRENTTIMESTAMP' ),
+	'directionmark'          => array( 1,    'DIRECTIONMARK', 'DIRMARK' ),
+	'language'               => array( 0,    '#LANGUAGE:' ),
+	'contentlanguage'        => array( 1,    'CONTENTLANGUAGE', 'CONTENTLANG' ),
+	'pagesinnamespace'       => array( 1,    'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+	'numberofadmins'         => array( 1,    'NUMBEROFADMINS' ),
+	'formatnum'              => array( 0,    'FORMATNUM' ),
+);
+
+$namespaceNames = array(
+        NS_MEDIA            => 'Мультымедыя',
+        NS_SPECIAL          => 'Адмысловае',
+        NS_MAIN             => '',
+        NS_TALK             => 'Размовы',
+        NS_USER             => 'Удзельнік',
+        NS_USER_TALK        => 'Размовы_з_удзельнікам',
+	# NS_PROJECT set by $wgMetaNamespace
+        NS_PROJECT_TALK     => '$1_размовы',
+        NS_IMAGE            => 'Выява',
+        NS_IMAGE_TALK       => 'Размовы_пра_выяву',
+        NS_MEDIAWIKI        => 'MediaWiki',
+        NS_MEDIAWIKI_TALK   => 'Размовы_пра_MediaWiki',
+        NS_TEMPLATE         => 'Шаблон',
+        NS_TEMPLATE_TALK    => 'Размовы_пра_шаблон',
+        NS_HELP             => 'Даведка',
+        NS_HELP_TALK        => 'Размовы_пра_даведку',
+        NS_CATEGORY         => 'Катэгорыя',
+        NS_CATEGORY_TALK    => 'Размовы_пра_катэгорыю'
+);
+
+$separatorTransformTable = array(',' => '.', '.' => ',' );
+
+$linkTrail = '/^([абвгґджзеёжзійклмнопрстуўфхцчшыьэюяćčłńśšŭźža-z]+)(.*)$/sDu';
+
+$messages = array(
+# User preference toggles
+'tog-underline'           => 'Падкрэсліваць спасылкі:',
+'tog-numberheadings'      => 'Аўта-нумараванне загалоўкаў',
+'tog-showtoolbar'         => 'Паказваць стужку рэдактара (ЯваСкрыпт)',
+'tog-editondblclick'      => 'Правіць старонкі пасля падвойнага пстрыкання (JavaScript)',
+'tog-showtoc'             => 'Паказваць змест (для старонак, дзе больш за 3 загалоўкі)',
+'tog-rememberpassword'    => 'Памятаць ад сеансу да сеансу',
+'tog-previewontop'        => 'Паказваць падгляд перад полем рэдактара',
+'tog-previewonfirst'      => 'Пказваць падгляд пры першай праўцы',
+'tog-shownumberswatching' => 'Паказваць колькасць назіральнікаў',
+
+'underline-always' => 'Заўсёды',
+'underline-never'  => 'Ніколі',
+
+# Dates
+'sunday'        => 'Нядзеля',
+'monday'        => 'Панядзелак',
+'tuesday'       => 'Аўторак',
+'wednesday'     => 'Серада',
+'thursday'      => 'Чацвер',
+'friday'        => 'Пятніца',
+'saturday'      => 'Субота',
+'sun'           => 'Нд',
+'mon'           => 'Пн',
+'tue'           => 'Аў',
+'wed'           => 'Ср',
+'thu'           => 'Чц',
+'fri'           => 'Пт',
+'sat'           => 'Сб',
+'january'       => 'Студзень',
+'february'      => 'Люты',
+'march'         => 'Сакавік',
+'april'         => 'Красавік',
+'may_long'      => 'Травень',
+'june'          => 'Чэрвень',
+'july'          => 'Ліпень',
+'august'        => 'Жнівень',
+'september'     => 'Верасень',
+'october'       => 'Кастрычнік',
+'november'      => 'Лістапад',
+'december'      => 'Снежань',
+'january-gen'   => 'Студзень',
+'february-gen'  => 'Люты',
+'march-gen'     => 'Сакавік',
+'april-gen'     => 'Красавік',
+'may-gen'       => 'Травень',
+'june-gen'      => 'Чэрвень',
+'july-gen'      => 'Ліпень',
+'august-gen'    => 'Жнівень',
+'september-gen' => 'Верасень',
+'october-gen'   => 'Кастрычнік',
+'november-gen'  => 'Лістапад',
+'december-gen'  => 'Снежань',
+'jan'           => 'Сту',
+'feb'           => 'Лют',
+'mar'           => 'Сак',
+'apr'           => 'Кра',
+'may'           => 'Травень',
+'jun'           => 'Чэр',
+'jul'           => 'Ліп',
+'aug'           => 'Жні',
+'sep'           => 'Вер',
+'oct'           => 'Кас',
+'nov'           => 'Ліс',
+'dec'           => 'Сне',
+
+# Bits of text used by many pages
+'categories'            => 'Катэгорыі',
+'category_header'       => 'Складнікі ў катэгорыі “$1”',
+
+'about'          => 'Што гэта',
+'article'        => 'Старонка змесціва',
+'newwindow'      => '(адкрыецца ў новым акне)',
+'cancel'         => 'Нічога',
+'qbfind'         => 'Знайсці',
+'qbbrowse'       => 'Выбраць',
+'qbedit'         => 'Правіць',
+'qbpageoptions'  => 'Гэтая старонка',
+'qbpageinfo'     => 'Кантэкст',
+'qbmyoptions'    => 'Свае старонкі',
+'qbspecialpages' => 'Спецыяльныя старонкі',
+'moredotdotdot'  => 'Яшчэ...',
+'mypage'         => 'Свая старонка',
+'mytalk'         => 'Свае размовы',
+'anontalk'       => 'Размова для гэтага IP',
+'navigation'     => 'Рух',
+
+'errorpagetitle'    => 'Памылка',
+'help'              => 'Даведка',
+'search'            => 'Знайсці',
+'searchbutton'      => 'Тэкст',
+'go'                => 'Ісці',
+'searcharticle'     => 'Назва',
+'history'           => 'Гісторыя старонкі',
+'history_short'     => 'Гісторыя',
+'info_short'        => 'Інфармацыя',
+'permalink'         => 'Нязменная спасылка',
+'print'             => 'Друкаваць',
+'edit'              => 'Правіць',
+'editthispage'      => 'Правіць гэту старонку',
+'delete'            => 'сцерці',
+'deletethispage'    => 'Сцерці гэту старонку',
+'undelete_short'    => 'Аднавіць {{PLURAL:$1|адну праўку|$1 правак}}',
+'protect'           => 'Засцерагаць',
+'protectthispage'   => 'Засцерагчы старонку',
+'unprotectthispage' => 'Зняць засцераганне з гэтай старонкі',
+'newpage'           => 'Новая старонка',
+'personaltools'     => 'Асабістыя прылады',
+'postcomment'       => 'Пакінуць заўвагу',
+'articlepage'       => 'Паказаць старонку змесціва',
+'talk'              => 'Размова',
+'views'             => 'Віды',
+'toolbox'           => 'Скрынка прылад',
+'userpage'          => 'Паказаць старонку карыстальніка',
+'imagepage'         => 'Гл. старонку рысунку',
+'viewhelppage'      => 'Паказаць старонку даведкі',
+'categorypage'      => 'Гл. старонку катэгорыі',
+'viewtalkpage'      => 'Паказаць размову',
+'otherlanguages'    => 'На іншых мовах',
+'redirectedfrom'    => '(Пасля перасылкі з <tt>$1</tt>)',
+'redirectpagesub'   => 'Старонка перасылкі',
+'lastmodifiedat'    => 'Апошняе змяненне старонкі адбылося $2, $1.', # $1 date, $2 time
+'viewcount'         => 'Гэту старонку адкрывалі {{plural:$1|адзін раз|$1 разоў}}.',
+'protectedpage'     => 'Засцераганая старонка',
+
+# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
+'aboutsite'         => 'Аб {{SITENAME}}',
+'aboutpage'         => '{{ns:project}}:Аб праекце',
+'currentevents'     => 'Актуальныя падзеі',
+'currentevents-url' => 'Актуальныя падзеі',
+'faq'               => 'ЧАПЫ',
+'faqpage'           => '{{ns:project}}:ЧАПЫ',
+'helppage'          => '{{ns:project}}:Змест',
+'mainpage'          => 'Першая старонка',
+'portal'            => 'Партал супольнасці',
+'portal-url'        => '{{ns:project}}:Партал супольнасці',
+
+'badaccess'        => 'Памылка ў дазволах',
+'badaccess-group0' => 'Вам не дазволена выконваць аперацыю, па якую вы звярталіся.',
+'badaccess-group1' => 'Аперацыя, па якую вы звярталіся, абмежавана карыстальнікамі з групы $1.',
+'badaccess-group2' => 'Аперацыя, па якую вы звярталіся, абмежавана карыстальнікамі з адной з груп $1.',
+'badaccess-groups' => 'Аперацыя, па якую вы звярталіся, абмежавана карыстальнікамі з адной з груп $1.',
+
+'versionrequired'     => 'Патрабуецца MediaWiki версіі $1',
+'versionrequiredtext' => 'Каб карыстацца гэтай старонкай, патрабуецца MediaWiki версіі $1. Гл. [[Special:Version]]',
+
+'youhavenewmessages'  => 'Вы маеце $1 ($2).',
+'newmessageslink'     => 'новыя паведамленні',
+'newmessagesdifflink' => 'розн. з найноўшай версіяй',
+'editsection'         => 'правіць',
+'editold'             => 'правіць',
+'editsectionhint'     => 'Правіць раздзел: $1',
+'toc'                 => 'Змесціва',
+'viewdeleted'         => 'Ці паказаць $1?',
+'restorelink'         => '{{PLURAL:$1|адна сцёртая праўка|$1 сцёртых правак}}',
+'feedlinks'           => 'Струмень:',
+'feed-invalid'        => 'Недапушчальны тып струмяня навін.',
+
+# Short words for each namespace, by default used in the 'article' tab in monobook
+'nstab-main'      => 'Артыкул',
+'nstab-user'      => 'Карыстальнік',
+'nstab-media'     => 'Мультымедыя',
+'nstab-special'   => 'Спецыяльнае',
+'nstab-project'   => 'Старонка праекту',
+'nstab-image'     => 'Файл',
+'nstab-mediawiki' => 'Паведамленне',
+'nstab-template'  => 'Шаблон',
+'nstab-help'      => 'Даведка',
+'nstab-category'  => 'Катэгорыя',
+
+# General errors
+'error'                => 'Памылка',
+'databaseerror'        => 'Памылка базы дадзеных',
+'filecopyerror'        => 'Не ўдалося капіраваць файл "$1" у "$2".',
+'filerenameerror'      => 'Не ўдалося назваць файл "$1" назвай "$2".',
+'filedeleteerror'      => 'Не ўдалося сцерці файл "$1".',
+'filenotfound'         => 'Не ўдалося знайсці файл "$1".',
+'unexpected'           => 'Нечаканае значэнне: "$1"="$2".',
+'formerror'            => 'Памылка: не ўдалося падаць форму',
+'badarticleerror'      => 'Аперацыя не дазволена на гэтай старонцы.',
+'badtitle'             => 'Няправільная назва',
+'badtitletext'         => 'Назва старонкі, па якую звярталіся, аказалася недапушчальнай, пустой, або няправільна прылучанай між-моўнай ці між-вікі назвай. Магчыма, у ёй ёсць знакі, якія нельга ўжываць у назвах.',
+'wrong_wfQuery_params' => 'Недапушчальныя параметры wfQuery()<br />
+Функцыя: $1<br />
+Зварот: $2',
+'viewsource'           => 'Паказаць выточны тэкст',
+'viewsourcefor'        => 'для $1',
+
+# Login and logout pages
+'welcomecreation'            => '== Вітаем, $1! == Ваш  рахунак быў створаны. Не забудзьцеся дапасаваць свае настаўленні ў {{SITENAME}}.',
+'yourname'                   => 'Імя карыстальніка',
+'yourpassword'               => 'Пароль',
+'yourpasswordagain'          => 'Паўтарыце пароль',
+'remembermypassword'         => 'Памятаць мяне',
+'yourdomainname'             => 'Ваш дамен',
+'externaldberror'            => 'Або памылка вонкавай аўтэнтыкацыі ў базе дадзеных, або вам не дазволена абнаўляць свой вонкавы рахунак.',
+'alreadyloggedin'            => '<strong>Карыстальнік $1, вы ўжо ўвайшлі ў сістэму!</strong><br />',
+'login'                      => 'Увайсці ў сістэму',
+'userlogin'                  => 'Увайсці ў сістэму / стварыць рахунак',
+'logout'                     => 'Выйсці з сістэмы',
+'userlogout'                 => 'Выйсці з сістэмы',
+'createaccount'              => 'Стварыць рахунак',
+'gotaccount'                 => 'Ужо маеце рахунак? $1.',
+'gotaccountlink'             => 'Увайсці ў сістэму',
+'createaccountmail'          => 'праз эл.пошту',
+'badretype'                  => 'Уведзеныя паролі не аднолькавыя.',
+'userexists'                 => 'Такое імя карыстальніка ўжо занятае. Калі ласка, выберыце іншае імя.',
+'youremail'                  => 'Эл.пошта *',
+'username'                   => 'Імя карыстальніка:',
+'yourrealname'               => 'Сапраўднае імя *',
+'yourlanguage'               => 'Мова:',
+'yourvariant'                => 'Варыянт',
+'yournick'                   => 'Псеўданім:',
+'badsig'                     => 'Недапушчальны крынічны тэкст подпісу; праверце тэгі HTML.',
+'email'                      => 'Эл.пошта',
+'loginerror'                 => 'Памылка ўваходу',
+'loginsuccesstitle'          => 'Паспяховы ўваход у сістэму',
+'wrongpassword'              => 'Уведзены няправільны пароль. Паспрабуйце нанова.',
+'wrongpasswordempty'         => 'Быў уведзены пусты пароль. Паспрабуйце нанова.',
+'mailmypassword'             => 'Адаслаць пароль эл.поштай',
+'passwordremindertitle'      => 'Нагаданне пра пароль ад {{SITENAME}}',
+'mailerror'                  => 'Памылка адсылання эл.пошты: $1',
+'acct_creation_throttle_hit' => 'У вас ужо створаны $1 рахункаў, і большая колькасць не дазваляецца.',
+'emailconfirmlink'           => 'Пацвердзіце ваш адрас эл.пошты',
+'accountcreated'             => 'Створаны рахунак',
+'accountcreatedtext'         => 'Створаны рахунак карыстальніка $1.',
+
+# Edit page toolbar
+'bold_sample'     => 'Цёмны тэкст',
+'bold_tip'        => 'Цёмны тэкст',
+'italic_sample'   => 'Курсіўны тэкст',
+'italic_tip'      => 'Курсіўны тэкст',
+'link_sample'     => 'Назва спасылкі',
+'link_tip'        => 'Унутраная спасылка',
+'extlink_sample'  => 'http://www.example.com назва спасылкі',
+'extlink_tip'     => 'Вонкавая спасылка (памятайце аб прэфіксе http://)',
+'headline_sample' => 'Тэкст загалоўка',
+'headline_tip'    => 'Загаловак 2 узроўню',
+'math_sample'     => 'Уставіць формулу тут',
+'math_tip'        => 'Матэматычная формула (LaTeX)',
+'image_sample'    => 'Напрыклад.jpg',
+'media_sample'    => 'Напрыклад.ogg',
+'media_tip'       => 'Спасылка на медыя-файл',
+'sig_tip'         => 'Ваш подпіс і адзначаны час',
+'hr_tip'          => 'Гарызантальная рыса (не злоўжывайце гэтым)',
+
+# Edit pages
+'summary'               => 'Тлумачэнне',
+'minoredit'             => 'Гэта меншая праўка',
+'watchthis'             => 'Назіраць за гэтай старонкай',
+'savearticle'           => 'Запісаць старонку',
+'preview'               => 'Падгляд',
+'showdiff'              => 'Паказаць змяненні',
+'anoneditwarning'       => 'Вы не ўвайшлі ў сістэму. Таму, калі вы запішаце старонку, у яе гісторыю трапіць ваш адрас IP.',
+'missingsummary'        => "'''Нагадваем''': вы не ўпісалі тлумачэння для сваёй праўкі. Калі націснуць Запісаць яшчэ раз, праўка будзе замацавана без тлумачэння.",
+'blockedtitle'          => 'Карыстальнік заблакаваны',
+'blockedtext'           => "<big>'''Ваша імя карыстальніка або адрас IP былі пастаўлены пад блок.'''</big> Блок пастаўлены карыстальнікам: \$1. Пададзеная прычына: ''\$2''. Вы можаце звярнуцца да \$1 або да аднаго з іншых [[{{ns:project}}:Administrators|адміністратараў]], каб абмеркаваць гэты блок. Заўважце, што без пацверджанага ўласнага адрасу эл.пошты ў [[Special:Preferences|настаўленнях]] вы не можаце выкарыстаць \"эл.пошту да гэтай асобы\". Калі ў вас ёсць рахунак, свае настаўленні вы можаце правіць нават пад блокам. Ваш адрас IP \$3 і нумар блоку #\$5. Дадавайце або адну з дзвюх, або абедзве ідэнтыфікацыі да кожнага звароту, які будзеце рабіць.",
+'blockedoriginalsource' => "Крынічны тэкст '''$1''' паказаны ніжэй:",
+'blockededitsource'     => "Тэкст '''вашых правак''' у '''$1''' паказаны ніжэй:",
+'whitelistedittitle'    => 'Каб рэдагаваць, трэба ўвайсці ў сістэму',
+'whitelistedittext'     => 'Належыць $1 каб правіць старонкі.',
+'whitelistreadtitle'    => 'Каб чытаць, патрэбны ўваход у сістэму',
+'whitelistreadtext'     => 'Трэба [[Special:Userlogin|ўвайсці ў сістэму]] каб адкрываць старонкі.',
+'whitelistacctitle'     => 'Вам не дазволена ствараць рахункаў',
+'whitelistacctext'      => 'Каб мець дазвол на стварэнне рахункаў у гэтай Вікі вам трэба [[Special:Userlogin|ўвайсці ў сістэму]] і мець неабходныя паўнамоцтвы.',
+'confirmedittitle'      => 'Для рэдагавання патрабуецца пацверджаны адрас эл.пошты',
+'loginreqtitle'         => 'Патрабуецца ўваход у сістэму',
+'accmailtitle'          => 'Быў адасланы пароль.',
+'accmailtext'           => 'Пароль для "$1" быў адасланы на $2.',
+'newarticle'            => '(Новы)',
+'anontalkpagetext'      => "----''Гэта старонка размовы для ананімнага карыстальніка, які або не стварыў яшчэ рахунку, або ім не карыстаўся. Таму дзеля яго ці яе ідэнтыфікацыі мы мусім выкарыстаць лічбавы Адрас IP. Такі адрас IP могуць дзяліць між сабою некалькі асоб. Калі вы ананімны карыстальнік, і лічыце, што атрымліваеце няслушныя заўвагі,[[Special:Userlogin|запішыцеся ў аўтары або ўвайдзіце ў сістэму]], каб вас больш не блыталі з іншымі ананімнымі карыстальнікамі.''",
+'previewnote'           => '<strong>Гэта толькі падгляд; змяненні яшчэ не былі замацаваныя!</strong>',
+'importing'             => 'Імпартуем $1',
+'editing'               => 'Правім $1',
+'editingsection'        => 'Правім $1 (раздзел)',
+'editingcomment'        => 'Правім $1 (каментар)',
+'editconflict'          => 'Канфлікт правак: $1',
+'yourtext'              => 'Свой тэкст',
+'yourdiff'              => 'Адрозненні',
+
+# Account creation failure
+'cantcreateaccounttitle' => 'Немагчыма стварыць рахунак',
+
+# History pages
+'revhistory'          => 'Гісторыя версій',
+'viewpagelogs'        => 'Паказаць журналы для гэтай старонкі',
+'loadhist'            => 'Счытваецца гісторыя старонкі',
+'currentrev'          => 'Актуальная версія',
+'previousrevision'    => '&larr; Папярэдн. версія',
+'nextrevision'        => 'Навейшая версія &rarr;',
+'currentrevisionlink' => 'Актуальная версія',
+'cur'                 => 'з актуальн.',
+'next'                => 'наступ.',
+'last'                => 'з папярэд.',
+'orig'                => 'арыг.',
+'histlegend'          => 'Выбар розніцы: адзначце радыё-боксы версій, якія трэба параўнаць і націсніце enter або кнопку, што ўнізе.<br />
+Тлумачэнне: (з актуальн.) = розніца з актуальнай версіяй,
+(з папярэд.) = розніца з папярэдняй версіяй, M = меншая праўка.',
+'deletedrev'          => '[сцёртая]',
+'histfirst'           => 'Самае старое',
+'histlast'            => 'Самае новае',
+
+# Revision feed
+'history-feed-title'       => 'Гісторыя версій',
+'history-feed-description' => 'Гісторыя версій гэтай старонкі',
+
+# Diffs
+'difference'              => '(Розніца між версіямі)',
+'lineno'                  => 'Радок $1:',
+'editcurrent'             => 'Правіць найноўшую версію старонкі',
+'compareselectedversions' => 'Параўнаць азначаныя версіі',
+'diff-multi'              => '(Не паказан{{plural:$1|а адна прамежкавая версія|ы $1 прамежкавых версій}}.)',
+
+# Search results
+'searchresults'     => 'Вынікі пошуку',
+'badquery'          => 'Няправільна складзены пошукавы зварот',
+'badquerytext'      => 'Не ўдалося апрацаваць ваш зварот.
+Магчыма, з-за таго, што шукаўся тэкст, карацейшы за 3 літары,
+а гэта яшчэ не падтрымліваецца.
+Магчыма, што вы проста няправільна ўпісалі шуканы тэкст.
+Паспрабуйце яшчэ, з іншым тэкстам.',
+'matchtotals'       => 'Зварот "$1" дае ў выніку $2 назваў старонак
+і тэкст $3 старонак.',
+'prevn'             => 'папярэдн. $1',
+'nextn'             => 'наступ. $1',
+'viewprevnext'      => 'Гл. ($1) ($2) ($3).',
+'showingresults'    => 'Ніжэй паказаныя да <b>$1</b> вынікаў, пачаўшы з нумару <b>$2</b>.',
+'showingresultsnum' => 'Ніжэй паказаныя <b>$3</b> вынікаў, пачаўшы з нумару #<b>$2</b>.',
+'powersearch'       => 'Знайсці',
+
+# Preferences page
+'preferences'           => 'Настаўленні',
+'mypreferences'         => 'Свае настаўленні',
+'prefsnologintext'      => 'Каб правіць асабістыя настаўленні, трэба [[Special:Userlogin|ўвайсці ў сістэму]].',
+'prefsreset'            => 'Настаўленні вернуты да пачатковых з архіву.',
+'changepassword'        => 'Правіць пароль',
+'skin'                  => 'Кажух',
+'math'                  => 'Матэматыка',
+'dateformat'            => 'Фармат даты',
+'datetime'              => 'Дата і час',
+'math_failure'          => 'Не ўдалося разабраць',
+'math_unknown_error'    => 'невядомая памылка',
+'math_unknown_function' => 'невядомая функцыя',
+'math_syntax_error'     => 'памылка сінтаксісу',
+'math_image_error'      => 'Не ўдалося ператварыць PNG; праверце правільнасць інсталяцыі пакетаў latex, dvips, gs, convert',
+'math_bad_tmpdir'       => 'Немагчыма запісаць у або стварыць тымчасовы каталог для матэматыкі',
+'math_bad_output'       => 'Немагчыма запісаць у або стварыць выводны каталог для матэматыкі',
+'math_notexvc'          => 'Не знойдзены выканальны модуль texvc; аб яго настаўленнях чытайце ў math/README.',
+'prefs-rc'              => 'Нядаўнія змяненні',
+'prefs-watchlist'       => 'Назіранае',
+'prefs-watchlist-days'  => 'Кольк. дзён для паказу ў назіраным:',
+'prefs-watchlist-edits' => 'Кольк. правак для паказу ў пашыраным відзе назіранага:',
+'prefs-misc'            => 'Рознае',
+'saveprefs'             => 'Запісаць',
+'resetprefs'            => 'Да пачатковага',
+'oldpassword'           => 'Стары пароль:',
+'newpassword'           => 'Новы пароль:',
+'rows'                  => 'Радкі:',
+'columns'               => 'Калонкі:',
+'searchresultshead'     => 'Знайсці',
+'localtime'             => 'Мясцовы час',
+'servertime'            => 'Серверны час',
+'guesstimezone'         => 'Запоўніць з аглядальніка',
+'allowemail'            => 'Дазволіць эл.пошту ад іншых карыстальнікаў',
+'defaultns'             => 'Шукаць у гэтых назваглядах, калі не загадана іначай:',
+'default'               => 'прадвызначэнні',
+'files'                 => 'Файлы',
+
+# User rights
+'userrights-lookup-user'     => 'Распараджацца групамі карыстальнікаў',
+'userrights-user-editname'   => 'Увядзіце імя карыстальніка:',
+'userrights-editusergroup'   => 'Правіць групы карыстальніка',
+'userrights-groupsmember'    => 'У групе:',
+'userrights-groupsavailable' => 'Наяўныя групы:',
+
+# Groups
+'group'            => 'Група:',
+'group-bot'        => 'Боты',
+'group-sysop'      => 'Сісопы',
+'group-bureaucrat' => 'Бюракраты',
+'group-all'        => '(усе)',
+
+'group-bot-member'        => 'Бот',
+'group-sysop-member'      => 'Сісоп',
+'group-bureaucrat-member' => 'Бюракрат',
+
+# User rights log
+'rightsnone' => '(няма)',
+
+# Recent changes
+'recentchanges'                     => 'Нядаўнія змяненні',
+'rcshowhideminor'                   => '$1 меншых правак',
+'rcshowhidebots'                    => '$1 робатаў',
+'rcshowhideliu'                     => '$1 карыстальнікаў, якія ўвайшлі ў сістэму',
+'rcshowhideanons'                   => '$1 ананімных карыстальнікаў',
+'rcshowhidepatr'                    => '$1 патруляваных правак',
+'rcshowhidemine'                    => '$1 свае праўкі',
+'hide'                              => 'Не паказваць',
+'show'                              => 'Паказваць',
+'minoreditletter'                   => 'м',
+'newpageletter'                     => 'Н',
+'boteditletter'                     => 'р',
+'number_of_watching_users_pageview' => '[$1 назіральнік/аў]',
+
+# Upload
+'upload'                      => 'Укласці файл',
+'uploadbtn'                   => 'Укласці файл',
+'uploadnologintext'           => 'Каб укладваць файлы, трэба [[Special:Userlogin|ўвайсці ў сістэму]].',
+'filename'                    => 'Назва файла',
+'filedesc'                    => 'Тлумачэнне',
+'fileuploadsummary'           => 'Тлумачэнне:',
+'filestatus'                  => 'Статус па аўтарскіх правах',
+'filesource'                  => 'Крыніца',
+'ignorewarning'               => 'Не зважаць на папярэджанне і запісаць файл.',
+'ignorewarnings'              => 'Ігнараваць усе папярэджанні',
+'minlength'                   => 'Назвы файлаў мусяць утрымліваць хоць па тры знакі.',
+'badfilename'                 => 'Назва файла зменена на "$1".',
+'fileexists'                  => 'Ужо існуе файл з такою назвай, праверце $1, калі не ўпэўнены, што жадаеце мяняць яго змесціва.',
+'fileexists-forbidden'        => 'Ужо існуе файл з такою назвай; калі ласка, паўтарыце працэдуру ўкладання файла, але з іншай назвай. [[Image:$1|thumb|center|$1]]',
+'fileexists-shared-forbidden' => 'У агульным сховішчы ўжо існуе файл з такою назвай; калі ласка, паўтарыце працэдуру ўкладання файла, але з іншай назвай. [[Image:$1|thumb|center|$1]]',
+'savefile'                    => 'Запісаць файл',
+'uploadvirus'                 => 'Файл утрымлівае вірус! Падрабязнасці: $1',
+'destfilename'                => 'Назва мэтавага файла',
+'watchthisupload'             => 'Назіраць за гэтай старонкай',
+'filewasdeleted'              => 'Файл з такою назвай быў раней укладзены сюды, а потым сцёрты. Варта паглядзець у $1 перад тым, як укладаць яго нанова.',
+
+'license'            => 'Ліцэнзіяванне',
+'upload_source_url'  => ' (сапраўдны, публічна дасягальны URL)',
+'upload_source_file' => ' (файл на вашай машыне)',
+
+# Image list
+'imagelist'                 => 'Спіс файлаў',
+'imagelisttext'             => "Ніжэй даецца спіс з '''$1''' {{plural:$1|файла|файлаў}} у парадку $2.",
+'imagelistforuser'          => 'Тут паказаны толькі тыя рысункі, якія ўклаў(-ла) $1.',
+'getimagelist'              => 'атрымліваем спіс файлаў',
+'ilsubmit'                  => 'Знайсці',
+'showlast'                  => 'Паказ. апошнія $1 файлаў у парадку $2.',
+'byname'                    => 'п. назваў',
+'bydate'                    => 'п. датаў',
+'bysize'                    => "п. аб'ёмаў",
+'imglegend'                 => 'Азначэнні: (desc) = паказаць/правіць апісанне файла.',
+'imghistory'                => 'Гісторыя файла',
+'deleteimgcompletely'       => 'Сцерці ўсе версіі гэтага файла',
+'imagelinks'                => 'Спасылкі',
+'uploadnewversion-linktext' => 'Укласці новую версію гэтага файла',
+'imagelist_date'            => 'Дата',
+'imagelist_name'            => 'Назва',
+'imagelist_user'            => 'Карыстальнік',
+'imagelist_size'            => 'Памер у байтах',
+'imagelist_description'     => 'Апісанне',
+'imagelist_search_for'      => 'Знайсці назву рысунку:',
+
+# MIME search
+'mimetype' => 'Тып MIME:',
+
+# Unwatched pages
+'unwatchedpages' => 'Не-назіраныя старонкі',
+
+# Random redirect
+'randomredirect' => 'Выпадковая перасылка',
+
+# Statistics
+'statistics'    => 'Статыстыка',
+'userstats'     => 'Статыстыка карыстальніка',
+'userstatstext' => "Ёсць '''$1''' зарэгістраваных карыстальнікаў, з якіх '''$2''' ('''$4%''') з'яўляюцца $5.",
+
+'doubleredirects' => 'Падвоеныя перасылкі',
+
+'brokenredirects'     => 'Зламаныя перасылкі',
+'brokenredirectstext' => 'Наступныя перасылкі паказваюць на няісныя старонкі:',
+
+# Miscellaneous special pages
+'nbytes'               => '$1 {{PLURAL:$1|байт|байтаў}}',
+'ncategories'          => '$1 {{PLURAL:$1|катэгорыя|катэгорый}}',
+'nlinks'               => '$1 {{PLURAL:$1|спасылка|спасылак}}',
+'nmembers'             => '$1 {{PLURAL:$1|удзельнік|удзельнікаў}}',
+'nviews'               => '$1 {{PLURAL:$1|паказ|паказаў}}',
+'lonelypages'          => 'Вельмі адзінокія старонкі',
+'unusedcategories'     => 'Нявыкарыстаныя катэгорыі',
+'unusedimages'         => 'Нявыкарыстаныя файлы',
+'popularpages'         => 'Папулярныя старонкі',
+'wantedcategories'     => 'Вельмі патрэбныя катэгорыі',
+'wantedpages'          => 'Вельмі патрэбныя старонкі',
+'mostcategories'       => 'Артыкулы ў найбольшай кольк. катэгорый',
+'mostrevisions'        => 'Артыкулы з найбольшай кольк. версій',
+'allpages'             => 'Усе старонкі',
+'randompage'           => 'Выпадковая старонка',
+'shortpages'           => 'Кароткія старонкі',
+'longpages'            => 'Вельмі доўгія старонкі',
+'listusers'            => 'Спіс карыстальнікаў',
+'specialpages'         => 'Спецыяльныя старонкі',
+'newpages'             => 'Новыя старонкі',
+'newpages-username'    => 'Імя карыстальніка:',
+'ancientpages'         => 'Найстарэйшыя старонкі',
+'move'                 => 'Перанесці',
+'movethispage'         => 'Перанесці гэту старонку',
+
+'data'           => 'Дадзеныя',
+'userrights'     => 'Распараджэнне правамі карыстальніка',
+'groups'         => 'Групы карыстальніка',
+'alphaindexline' => '$1 да $2',
+'version'        => 'Версія',
+
+# Special:Log
+'speciallogtitlelabel' => 'Загаловак:',
+'log'                  => 'Журналы',
+'alllogstext'          => 'Спалучаны паказ журналаў працы з файламі, сцірання, засцерагання і сістэмных аперацый.
+Паказ можна ўдакладняць, выбіраючы тып журналу, імя карыстальніка або пэўную старонку.',
+
+# Special:Allpages
+'nextpage'          => 'Наступная старонка ($1)',
+'allpagesfrom'      => 'Паказваць старонкі ад:',
+'allarticles'       => 'Усе артыкулы',
+'allinnamespace'    => 'Усе артыкулы ($1 назвагляд)',
+'allnotinnamespace' => 'Усе старонкі (не ў назваглядзе $1)',
+'allpagesprev'      => 'Папярэдняе',
+'allpagesnext'      => 'Наступнае',
+'allpagessubmit'    => 'Ісці',
+'allpagesprefix'    => 'Паказваць старонкі з прэфіксам:',
+'allpagesbadtitle'  => 'Гэтая назва старонкі недапушчальная або ўтрымлівае між-моўны або між-вікавы прэфікс. Магчыма, у назве ёсць знак ці знакі, якія нельга ўжываць у назвах.',
+
+# E-mail user
+'emailuser'       => 'Напісаць у эл.пошту гэтаму карыстальніку',
+'emailpage'       => 'Напісаць у эл.пошту',
+'defemailsubject' => 'эл.пошта {{SITENAME}}',
+'emailfrom'       => 'Ад каго',
+'emailto'         => 'Каму',
+'emailsubject'    => 'Тэма',
+'emailmessage'    => 'Ліст',
+'emailsend'       => 'Адаслаць',
+'emailsent'       => 'Эл.пошта адаслана',
+'emailsenttext'   => 'Ваш ліст эл.пошты быў адасланы.',
+
+# Watchlist
+'watchlist'            => 'Сваё назіранае',
+'mywatchlist'            => 'Сваё назіранае',
+'watchlistfor'         => "(для '''$1''')",
+'watchlistanontext'    => 'Каб бачыць або правіць складнікі назіранага, трэба $1.',
+'clearwatchlist'       => 'Ачысціць спіс назіранага',
+'watchlistcleartext'   => 'Ці сапраўды жадаеце сцерці іх?',
+'watchlistclearbutton' => 'Ачысціць спіс назіранага',
+'watchlistcleardone'   => 'Ваш спіс назіранага быў ачышчаны. $1 складнікаў былі сцёрты.',
+'watchnologintext'     => 'Каб правіць свой спіс назіранага, трэба [[Special:Userlogin|ўвайсці ў сістэму]].',
+'addedwatch'           => 'Дапісана да назіранага',
+'addedwatchtext'       => "Старонка \"[[:\$1]]\" была дададзена да [[Special:Watchlist|назіраных]] вамі.
+Змяненні, якія адбудуцца з гэтай старонкай і з Размовай пра яе, будуць паказвацца там, і старонка будзе '''вылучацца шрыфтам''' у [[Special:Recentchanges|спісе нядаўніх змяненняў]], каб лягчэй пазнаваць яе.
+
+Калі вы не пажадаеце больш назіраць за гэтай старонкай, націсніце \"Не назіраць\" у бакоўцы.",
+'watch'                => 'Назіраць',
+'watchthispage'        => 'Назіраць за гэтай старонкай',
+'unwatch'              => 'Не назіраць',
+'unwatchthispage'      => 'Спыніць назіранне',
+'watchnochange'        => 'Ніводзін з назіраных складнікаў не быў зменены за паказаны перыяд.',
+'wlheader-enotif'      => '* Працуе апавяшчанне праз эл.пошту.',
+'wlheader-showupdated' => "* Старонкі, якія былі зменены пасля вашага апошняга іх наведвання, паказаны '''абрысам шрыфту'''.",
+'watchmethod-recent'   => 'правяраем нядаўнія праўкі ў назіраных старонках',
+'watchmethod-list'     => 'правяраем наяўнасць нядаўніх правак ў назіраных старонках',
+'watchlistcontains'    => 'У вашым спісе назіранага $1 старонак.',
+'couldntremove'        => "Не ўдалося выдаліць складнік '$1'...",
+'wlnote'               => 'Ніжэй пададзены апошнія $1 змяненняў за апошнія <b>$2</b> гадз.',
+'wlshowlast'           => 'Паказваць апошнія $1 гадз. $2 дзён $3',
+'wlsaved'              => 'Гэта запісаная версія вашага спісу назіранага.',
+'wldone'               => 'Зроблена.',
+
+'enotif_newpagetext' => 'Гэта новая старонка.',
+'changed'            => 'зменена',
+'created'            => 'створана',
+
+# Delete/protect/revert
+'deletepage'           => 'Сцерці старонку',
+'confirm'              => 'Пацвердзіць',
+'exbeforeblank'        => "змесціва перад ачысткаю было: '$1'",
+'exblank'              => 'старонка была пустой',
+'confirmdelete'        => 'Пацвердзіць сціранне',
+'deletesub'            => '(Сціраем "$1")',
+'historywarning'       => 'Увага: Старонка, якую вы хочаце сцерці, мае гісторыю:',
+'actioncomplete'       => 'Завершана аперацыя',
+'deletedarticle'       => 'сцёрты "[[$1]]"',
+'dellogpage'           => 'Журнал сціранняў',
+'dellogpagetext'       => 'Ніжэй паказаны спіс самых нядаўніх сціранняў.',
+'deletionlog'          => 'журнал сціранняў',
+'deletecomment'        => 'Прычына сцірання',
+'imagereverted'        => 'Ранейшая версія была вернута паспяхова.',
+'rollback'             => 'Адкаціць праўкі',
+'rollback_short'       => 'Адкат',
+'rollbacklink'         => 'адкат',
+'rollbackfailed'       => 'Не ўдалося адкаціць',
+'cantrollback'         => 'Немагчыма адкаціць праўку; апошні аўтар гэта адзіны аўтар на гэтай старонцы.',
+'alreadyrolled'        => 'Немагчыма адкаціць апошнюю праўку ў [[$1]]
+аўтарства [[User:$2|$2]] ([[User talk:$2|Размова]]); за гэты час нехта іншы ўжо правіў або адкатваў старонку.
+
+Аўтарства апошняй праўкі: [[User:$3|$3]] ([[User talk:$3|Размова]]).',
+'editcomment'          => 'Тлумачэнне праўкі: "<i>$1</i>".', # only shown if there is an edit comment
+'protectlogpage'       => 'Журнал засцераганняў',
+'unprotectedarticle'   => 'знята засцераганне з "[[$1]]"',
+'confirmprotecttext'   => 'Ці сапраўды жадаеце засцерагчы гэтую старонку?',
+'confirmprotect'       => 'Пацвердзіце засцераганне',
+'protectmoveonly'      => 'Засцерагаць толькі ад пераносаў',
+'protectcomment'       => 'Прычына засцерагання',
+'unprotectsub'         => '(Здымаем засцераганне з "$1")',
+'confirmunprotecttext' => 'Ці сапраўды жадаеце зняць засцераганне з гэтай старонкі?',
+'confirmunprotect'     => 'Пацвердзіць зняцце засцерагання',
+'unprotectcomment'     => 'Прычына зняцця засцерагання',
+'protect-level-sysop'  => 'Толькі для сісопаў',
+
+# Restrictions (nouns)
+'restriction-edit' => 'Правіць',
+'restriction-move' => 'Перанесці',
+
+# Undelete
+'undelete'                 => 'Паказаць сцёртыя старонкі',
+'undeletepage'             => 'Паказаць і аднавіць сцёртыя старонкі',
+'viewdeletedpage'          => 'Паказаць сцёртыя старонкі',
+'undeletebtn'              => 'Аднавіць',
+'undeletereset'            => 'Да пачатковага',
+'undeletecomment'          => 'Каментар:',
+'undeletedarticle'         => 'адноўлены "[[$1]]"',
+'undeletedrevisions'       => '$1 версій адноўлены',
+'undeletedrevisions-files' => '$1 версій і $2 файл(аў) адноўлены',
+'undeletedfiles'           => '$1 файл(аў) адноўлены',
+
+# Namespace form on various pages
+'namespace' => 'Назвагляд:',
+
+# Contributions
+'contributions' => 'Унёсак карыстальніка',
+'mycontris'     => 'Свае ўнёскі',
+'contribsub2'    => 'Для $1 ($2)',
+
+# What links here
+'whatlinkshere' => 'Сюды спасылаюцца',
+'linklistsub'   => '(спіс спасылак)',
+
+# Block/unblock
+'blockip'             => 'Заблакаваць карыстальніка',
+'ipaddress'           => 'Адрас IP',
+'ipbreason'           => 'Прычына',
+'ipbother'            => 'Іншы час',
+'ipbotheroption'      => 'іншае',
+'badipaddress'        => 'Недапушчальны адрас IP',
+'blockipsuccesssub'   => 'Паспяховае блакаванне',
+'blocklistline'       => '$1, $2 заблакаваны $3 ($4)',
+'infiniteblock'       => 'бясконца',
+'expiringblock'       => 'канчаецца $1',
+'anononlyblock'       => 'толькі ананімы',
+'createaccountblock'  => 'стварэнне рахунку заблакавана',
+'blocklink'           => 'заблакаваць',
+'autoblocker'         => 'Аўтаматычны блок таму што вашым адрасам IP нядаўна карыстаўся "[[User:$1|$1]]". Блакаванне $1\'s патлумачана так: "\'\'\'$2\'\'\'"',
+'blocklogpage'        => 'Журнал блокаў',
+'blocklogentry'       => 'пастаўлены блок на "[[$1]]", з часам трывання $2',
+'ipb_already_blocked' => '"$1" ужо знаходзіцца пад блокам',
+'proxyblocksuccess'   => 'Зроблена.',
+
+# Developer tools
+'lockdb'              => 'Замкнуць базу дадзеных',
+'unlockdb'            => 'Адмыкнуць базу дадзеных',
+'unlockconfirm'       => 'Так, сапраўды жадаю адмыкнуць базу дадзеных.',
+'lockbtn'             => 'Замкнуць базу дадзеных',
+'unlockbtn'           => 'Адмыкнуць базу дадзеных',
+'unlockdbsuccesssub'  => 'Быў зняты замок з базы дадзеных',
+'unlockdbsuccesstext' => 'База дадзеных была адмыкнутая.',
+'databasenotlocked'   => 'База дадзеных не замкнутая.',
+
+# Move page
+'movepage'                => 'Перанесці старонку',
+'movearticle'             => 'Перанесці старонку',
+'movepagebtn'             => 'Перанесці старонку',
+'articleexists'           => 'Старонка з такой назвай ужо існуе, або
+вамі выбрана недапушчальнае імя.
+Выберыце іншае імя.',
+'movedto'                 => 'перанесена ў',
+'movetalk'                => 'Перанесці таксама звязаную старонку размовы',
+'1movedto2'               => '[[$1]] перанесена ў [[$2]]',
+'1movedto2_redir'         => '[[$1]] перанесена ў [[$2]] паводле перасылкі',
+'movelogpage'             => 'Журнал пераносаў',
+'movelogpagetext'         => 'Ніжэй падаецца спіс пераносаў старонак.',
+'movereason'              => 'Тлумачэнне',
+'delete_and_move'         => 'Сцерці і перанесці',
+'delete_and_move_confirm' => 'Так, сцерці старонку',
+'delete_and_move_reason'  => 'Сцёрта, каб зрабіць месца для пераносу',
+'immobile_namespace'      => 'Мэтавая назва належыць да спецыяльнага тыпу; у гэты назвагляд пераносіць старонкі немагчыма.',
+
+# Export
+'export'        => 'Экспартаваць старонкі',
+'exportcuronly' => 'Улучаць толькі актуальную версію, без поўнай гісторыі',
+'export-submit' => 'Экспартаваць',
+
+# Namespace 8 related
+'allmessages'               => 'Сістэмныя паведамленні',
+'allmessagesname'           => 'Назва',
+'allmessagesdefault'        => 'Прадвызначаны тэкст',
+'allmessagescurrent'        => 'Актуальны тэкст',
+'allmessagestext'           => 'Гэта спіс сістэмных паведамленняў, наяўных у назваглядзе MediaWiki.',
+'allmessagesnotsupportedUI' => 'Мова інтэрфейсу <b>$1</b> не падтрымліваеца ў Special:Allmessages гэтай пляцоўкі.',
+'allmessagesnotsupportedDB' => "Немагчыма паказаць '''Special:Allmessages''', таму што не працуе '''\$wgUseDatabaseMessages'''.",
+'allmessagesfilter'         => 'Фільтр назваў паведамленняў:',
+'allmessagesmodified'       => 'Паказваць толькі змененыя',
+
+# Thumbnails
+'missingimage' => '<b>Прапушчаны рысунак</b><br /><i>$1</i>',
+'filemissing'  => 'Адсутны файл',
+
+# Special:Import
+'import'                     => 'Імпартаваць старонкі',
+'import-interwiki-history'   => 'Капіраваць усе гістарычныя версіі гэтай старонкі',
+'import-interwiki-submit'    => 'Імпартаваць',
+'import-interwiki-namespace' => 'Перанесці старонкі ў назвагляд:',
+'importfailed'               => 'Не ўдалося імпартаваць: $1',
+
+# Tooltip help for the actions
+'tooltip-search' => 'Знайсці ў {{SITENAME}}',
+'tooltip-save'   => 'Замацаваць свае змяненні',
+'tooltip-watch'  => 'Дадаць старонку да назіранага',
+
+# Attribution
+'anonymous'        => 'Ананімны карыстальнік(-і) з {{SITENAME}}',
+'siteuser'         => 'карыстальнік $1 з {{SITENAME}}',
+'lastmodifiedatby' => 'Апошняе змяненне старонкі адбылося $2, $1 аўтарства $3.', # $1 date, $2 time, $3 user
+'and'              => 'і',
+'othercontribs'    => 'На аснове працы $1.',
+'others'           => 'іншае',
+'siteusers'        => 'карыстальнік(-і) $1 з {{SITENAME}}',
+'creditspage'      => 'Аўтарства старонкі',
+
+# Spam protection
+'categoryarticlecount' => 'У катэгорыі {{PLURAL:$1|адзін артыкул|$1 артыкулаў}}.',
+
+# Info page
+'numedits'       => 'Кольк. правак (тэксту): $1',
+'numtalkedits'   => 'Кольк. правак (у размове): $1',
+'numwatchers'    => 'Кольк. назіральнікаў: $1',
+'numauthors'     => 'Кольк. розных аўтараў (тэксту): $1',
+'numtalkauthors' => 'Кольк. розных аўтараў (у размове): $1',
+
+# Math options
+'mw_math_png'    => 'Заўсёды вырабляць PNG',
+'mw_math_simple' => 'HTML калі вельмі простае, іначай PNG',
+'mw_math_html'   => 'HTML калі магчыма, іначай PNG',
+'mw_math_source' => 'Пакідаць у выглядзе TeX (для тэкставых гледачоў)',
+'mw_math_modern' => 'Рэкамендуецца сучасным гледачам',
+'mw_math_mathml' => 'MathML калі магчыма (эксперыментальнае)',
+
+# Image deletion
+'deletedrevision' => 'Сцёрта старая версія $1.',
+
+# Browsing diffs
+'previousdiff' => '&larr; Да папярэдн. праўкі',
+'nextdiff'     => 'Да наступн. праўкі &rarr;',
+
+# Media information
+'imagemaxsize' => 'Абмяжоўваць памеры рысункаў на іх тлумачальных старонках:',
+
+'showhidebots' => '($1 робатаў)',
+
+'passwordtooshort' => 'Гэта занадта кароткі пароль. Трэба мець найменей $1 знакаў у паролі.',
+
+# Metadata
+'metadata'          => 'Мета-дадзеныя',
+'metadata-expand'   => 'Паказваць падрабязнасці',
+'metadata-collapse' => 'Не паказваць падрабязнасці',
+
+# EXIF tags
+'exif-imagewidth'            => 'Шырыня',
+'exif-imagelength'           => 'Вышыня',
+'exif-orientation'           => 'Арыентацыя',
+'exif-datetime'              => 'Дата і час змянення файла',
+'exif-artist'                => 'Аўтар',
+'exif-exifversion'           => 'Версія Exif',
+'exif-flashpixversion'       => 'Падтрымліваецца версія Flashpix',
+'exif-datetimeoriginal'      => 'Дата і час стварэння дадзеных',
+'exif-datetimedigitized'     => 'Дата і час лічбавання',
+'exif-exposuretime'          => 'Час вытрымкі',
+'exif-exposuretime-format'   => '$1 сек ($2)',
+'exif-aperturevalue'         => 'Апертура',
+'exif-brightnessvalue'       => 'Яркасць',
+'exif-lightsource'           => 'Крыніца святла',
+'exif-flash'                 => 'Сполах',
+'exif-focallength'           => 'Фокусная адлегласць лінзы',
+'exif-focallength-format'    => '$1 мм',
+'exif-flashenergy'           => 'Энергія сполаху',
+'exif-filesource'            => 'Крыніца файла',
+'exif-exposuremode'          => 'Рэжым вытрымкі',
+'exif-focallengthin35mmfilm' => 'Фокусная адлегласць 35 мм плёнкі',
+'exif-contrast'              => 'Кантраст',
+'exif-gpsaltitude'           => 'Вышыня',
+'exif-gpsareainformation'    => 'Назва мясцовасці GPS',
+'exif-gpsdatestamp'          => 'Дата GPS',
+
+'exif-orientation-1' => 'Звычайна', # 0th row: top; 0th column: left
+
+'exif-exposureprogram-0' => 'Не вызначана',
+'exif-exposureprogram-1' => 'Самастойна',
+'exif-exposureprogram-7' => 'Партрэтны лад (здымкі ў набліжэнні, асноведзь па-за фокусам)',
+'exif-exposureprogram-8' => 'Пейзажны лад (здымкі прасторы, асноведзь у фокусе)',
+
+'exif-meteringmode-0'   => 'Невядома',
+'exif-meteringmode-1'   => 'Сярэдняе',
+'exif-meteringmode-5'   => 'Узор',
+'exif-meteringmode-6'   => 'часткова',
+'exif-meteringmode-255' => 'Іншае',
+
+'exif-lightsource-0' => 'Невядома',
+'exif-lightsource-4' => 'Сполах',
+
+'exif-focalplaneresolutionunit-2' => 'цаляў',
+
+'exif-exposuremode-0' => 'Аўта-вытрымка',
+'exif-exposuremode-1' => 'Самастойная вытрымка',
+
+'exif-scenecapturetype-0' => 'Стандартна',
+'exif-scenecapturetype-1' => 'Альбом',
+'exif-scenecapturetype-2' => 'Кніга',
+
+'exif-gaincontrol-0' => 'Няма',
+
+'exif-contrast-0' => 'Звычайны',
+'exif-contrast-1' => 'Мяккі',
+'exif-contrast-2' => 'Высокі',
+
+'exif-saturation-0' => 'Звычайна',
+
+'exif-sharpness-0' => 'Звычайны',
+'exif-sharpness-1' => 'Мяккі',
+'exif-sharpness-2' => 'Высокі',
+
+'exif-subjectdistancerange-0' => 'Невядома',
+'exif-subjectdistancerange-1' => 'Макрас',
+
+# External editor support
+'edit-externally' => 'Правіць файл у вонкавай праграме',
+
+# 'all' in various places, this might be different for inflected languages
+'recentchangesall' => 'усе',
+'imagelistall'     => 'усе',
+'watchlistall1'    => 'усе',
+'watchlistall2'    => 'усе',
+'namespacesall'    => 'усе',
+
+# E-mail address confirmation
+'confirmemail'           => 'Пацвердзіць адрас эл.пошты',
+'confirmemail_noemail'   => 'У [[Special:Preferences|вашых настаўленнях]] няма дапушчальнага адрасу эл.пошты.',
+'confirmemail_send'      => 'Адаслаць код пацверджання',
+'confirmemail_sent'      => 'Адасланы ліст эл.пошты з пацверджаннем.',
+'confirmemail_invalid'   => 'Няправільны код пацверджання. Магчыма, неактуальны код.',
+'confirmemail_needlogin' => 'Вам трэба зрабіць $1 каб пацвердзіць свой адрас эл.пошты.',
+'confirmemail_loggedin'  => 'Зараз ваш адрас эл.пошты стаўся пацверджаным.',
+'confirmemail_error'     => 'Неакрэсленая памылка пры запісванні пацверджання.',
+
+# Inputbox extension, may be useful in other contexts as well
+'createarticle' => 'Пачаць артыкул',
+
+# Delete conflict
+'deletedwhileediting' => 'Увага: гэтая старонка была сцёрта пасля таго, як вы пачалі рэдагаванне!',
+'confirmrecreate'     => "Карыстальнік [[User:$1|$1]] ([[User talk:$1|размова]]) сцёр гэты артыкул пасля таго, як вы пачалі працу з ім, падаўшы прычыну:
+: ''$2''
+Пацвердзіце свой намер аднавіць гэты артыкул.",
+
+'unit-pixel' => 'крпк',
+
+# HTML dump
+'redirectingto' => 'Перасылаемся да [[$1]]...',
+
+# action=purge
+'confirm_purge' => 'Ці ачысціць кэш для гэтай старонкі?
+
+$1',
+
+'youhavenewmessagesmulti' => 'У вас ёсць новыя паведамленні на $1',
+
+'searchcontaining' => "Знайсці артыкулы, у якіх ёсць ''$1''.",
+'searchnamed'      => "Знайсці артыкулы з назвай ''$1''.",
+'articletitles'    => "Артыкулы, чые назвы пачынаюцца з ''$1''",
+'hideresults'      => 'Не паказваць вынікаў',
+
+'loginlanguagelabel' => 'Мова: $1',
+
+# Multipage image navigation
+'imgmultipageprev' => '&larr; папярэдняя старонка',
+'imgmultipagenext' => 'наступная старонка &rarr;',
+'imgmultigo'       => 'Ісці!',
+'imgmultigotopre'  => 'Ісці на старонку',
+
+# Table pager
+'table_pager_next'         => 'Наступная старонка',
+'table_pager_prev'         => 'Папярэдняя старонка',
+'table_pager_first'        => 'Першая старонка',
+'table_pager_last'         => 'Апошняя старонка',
+'table_pager_limit_submit' => 'Ісці',
+'table_pager_empty'        => 'Без вынікаў',
+
+# Auto-summaries
+'autoredircomment' => 'Перасылаемся да [[$1]]', # This should be changed to the new naming convention, but existed beforehand
+
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesBe_x_old.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesBe_x_old.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesBe_x_old.php	(revision 1280)
@@ -0,0 +1,1028 @@
+<?php
+/** Belarusian alternative (Беларуская мова)
+  *
+  * @addtogroup Language
+  */
+
+$skinNames = array(
+	'standard'    => 'Клясычны',
+	'nostalgia'   => 'Настальгія',
+	'cologneblue' => 'Кёльнскі смутак',
+	'davinci'     => 'Да Вінчы',
+	'mono'        => 'Мона',
+	'monobook'    => 'Монакніга',
+	'myskin'      => 'MySkin',
+	'chick'       => 'Цыпа'
+);
+
+$bookstoreList = array(
+	'OZ.by' => 'http://oz.by/search.phtml?what=books&isbn=$1',
+	'Amazon.com' => 'http://www.amazon.com/exec/obidos/ISBN=$1'
+);
+
+$datePreferences = array(
+	'default',
+	'dmy',
+	'ISO 8601',
+);
+
+$defaultDateFormat = 'dmy';
+
+$dateFormats = array(
+	'dmy time' => 'H:i',
+	'dmy date' => 'j xg Y',
+	'dmy both' => 'H:i, j xg Y',
+);
+
+$magicWords = array(
+	'redirect'               => array( 0,    '#перанакіраваньне', '#redirect' ),
+	'notoc'                  => array( 0,    '__NOTOC__', '__БЯЗЬ_ЗЬМЕСТУ__' ),
+	'nogallery'              => array( 0,    '__NOGALLERY__', '__БЕЗ_ГАЛЕРЭІ__' ),
+	'forcetoc'               => array( 0,    '__FORCETOC__', '__ЗЬМЕСТ_ПРЫМУСАМ__' ),
+	'toc'                    => array( 0,    '__TOC__', '__ЗЬМЕСТ__' ),
+	'noeditsection'          => array( 0,    '__NOEDITSECTION__', '__БЕЗ_РЭДАГАВАНЬНЯ_СЭКЦЫІ__' ),
+	'start'                  => array( 0,    '__START__', '__ПАЧАТАК__' ),
+	'currentmonth'           => array( 1,    'CURRENTMONTH', 'БЯГУЧЫ_МЕСЯЦ' ),
+	'currentmonthname'       => array( 1,    'CURRENTMONTHNAME', 'НАЗВА_БЯГУЧАГА_МЕСЯЦА' ),
+	'currentmonthnamegen'    => array( 1,    'CURRENTMONTHNAMEGEN', 'НАЗВА_БЯГУЧАГА_МЕСЯЦА_Ў_РОДНЫМ_СКЛОНЕ' ),
+	'currentmonthabbrev'     => array( 1,    'CURRENTMONTHABBREV', 'СКАРОЧАНАЯ_НАЗВА_БЯГУЧАГА_МЕСЯЦА' ),
+	'currentday'             => array( 1,    'CURRENTDAY', 'БЯГУЧЫ_ДЗЕНЬ' ),
+	'currentday2'            => array( 1,    'CURRENTDAY2', 'БЯГУЧЫ_ДЗЕНЬ_2' ),
+	'currentdayname'         => array( 1,    'CURRENTDAYNAME', 'НАЗВА_БЯГУЧАГА_ДНЯ' ),
+	'currentyear'            => array( 1,    'CURRENTYEAR', 'БЯГУЧЫ_ГОД' ),
+	'currenttime'            => array( 1,    'CURRENTTIME', 'БЯГУЧЫ_ЧАС' ),
+	'numberofpages'          => array( 1,    'NUMBEROFPAGES', 'КОЛЬКАСЬЦЬ_СТАРОНАК' ),
+	'numberofarticles'       => array( 1,    'NUMBEROFARTICLES', 'КОЛЬКАСЬЦЬ_АРТЫКУЛАЎ' ),
+	'numberoffiles'          => array( 1,    'NUMBEROFFILES', 'КОЛЬКАСЬЦЬ_ФАЙЛАЎ' ),
+	'numberofusers'          => array( 1,    'NUMBEROFUSERS', 'КОЛЬКАСЬЦЬ_УДЗЕЛЬНІКАЎ' ),
+	'pagename'               => array( 1,    'PAGENAME', 'НАЗВА_СТАРОНКІ' ),
+	'pagenamee'              => array( 1,    'PAGENAMEE', 'НАЗВА_СТАРОНКІ_2' ),
+	'namespace'              => array( 1,    'NAMESPACE', 'ПРАСТОРА_НАЗВАЎ' ),
+	'namespacee'             => array( 1,    'NAMESPACEE', 'ПРАСТОРА_НАЗВАЎ_2' ),
+	'talkspace'              => array( 1,    'TALKSPACE', 'ПРАСТОРА_НАЗВАЎ_АБМЕРКАВАНЬНЯ' ),
+	'talkspacee'             => array( 1,    'TALKSPACEE', 'ПРАСТОРА_НАЗВАЎ_АБМЕРКАВАНЬНЯ_2' ),
+	'subjectspace'           => array( 1,    'SUBJECTSPACE', 'ARTICLESPACE', 'ПРАСТОРА_НАЗВАЎ_ПРАДМЕТУ', 'ПРАСТОРА_НАЗВАЎ_АРТЫКУЛА' ),
+	'subjectspacee'          => array( 1,    'SUBJECTSPACEE', 'ARTICLESPACEE', 'ПРАСТОРА_НАЗВАЎ_ПРАДМЕТУ_2', 'ПРАСТОРА_НАЗВАЎ_АРТЫКУЛА_2' ),
+	'fullpagename'           => array( 1,    'FULLPAGENAME', 'ПОЎНАЯ_НАЗВА_СТАРОНКІ' ),
+	'fullpagenamee'          => array( 1,    'FULLPAGENAMEE', 'ПОЎНАЯ_НАЗВА_СТАРОНКІ_2' ),
+	'subpagename'  	         => array( 1,    'SUBPAGENAME', 'НАЗВА_ПАДСТАРОНКІ' ),
+	'subpagenamee'           => array( 1,    'SUBPAGENAMEE', 'НАЗВА_ПАДСТАРОНКІ_2' ),
+	'basepagename'           => array( 1,    'BASEPAGENAME', 'НАЗВА_БАЗАВАЙ_СТАРОНКІ' ),
+	'basepagenamee'          => array( 1,    'BASEPAGENAMEE', 'НАЗВА_БАЗАВАЙ_СТАРОНКІ_2' ),
+	'talkpagename'           => array( 1,    'TALKPAGENAME', 'НАЗВА_СТАРОНКІ_АБМЕРКАВАНЬНЯ' ),
+	'talkpagenamee'          => array( 1,    'TALKPAGENAMEE', 'НАЗВА_СТАРОНКІ_АБМЕРКАВАНЬНЯ_2' ),
+	'subjectpagename'        => array( 1,    'SUBJECTPAGENAME', 'ARTICLEPAGENAME', 'НАЗВА_СТАРОНКІ_ПРАДМЕТУ', 'НАЗВА_СТАРОНКІ_АРТЫКУЛА' ),
+	'subjectpagenamee'       => array( 1,    'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE', 'НАЗВА_СТАРОНКІ_ПРАДМЕТУ_2', 'НАЗВА_СТАРОНКІ_АРТЫКУЛА_2' ),
+	'msg'                    => array( 0,    'MSG:', 'ПАВЕДАМЛЕНЬНЕ:' ),
+	'subst'                  => array( 0,    'SUBST:', 'ПАДСТАНОЎКА:' ),
+	'msgnw'                  => array( 0,    'MSGNW:', 'ПАВЕДАМЛЕНЬНЕ_БЯЗЬ_ВІКІ:' ),
+	'img_thumbnail'          => array( 1,    'thumbnail', 'thumb', 'значак', 'міні' ),
+	'img_manualthumb'        => array( 1,    'thumbnail=$1', 'thumb=$1', 'значак=$1', 'міні=$1' ),
+	'img_right'              => array( 1,    'right', 'справа' ),
+	'img_left'               => array( 1,    'left', 'зьлева' ),
+	'img_none'               => array( 1,    'none', 'няма' ),
+	'img_width'              => array( 1,    '$1px', '$1пкс' ),
+	'img_center'             => array( 1,    'center', 'centre', 'цэнтар' ),
+	'img_framed'             => array( 1,    'framed', 'enframed', 'frame', 'рамка' ),
+	'int'                    => array( 0,    'INT:' ),
+	'sitename'               => array( 1,    'SITENAME', 'НАЗВА_САЙТУ' ),
+	'ns'                     => array( 0,    'NS:', 'ПН:' ),
+	'localurl'               => array( 0,    'LOCALURL:', 'ЛЯКАЛЬНЫ_АДРАС:' ),
+	'localurle'              => array( 0,    'LOCALURLE:', 'ЛЯКАЛЬНЫ_АДРАС_2:' ),
+	'server'                 => array( 0,    'SERVER', 'СЭРВЭР' ),
+	'servername'             => array( 0,    'SERVERNAME', 'НАЗВА_СЭРВЭРА' ),
+	'scriptpath'             => array( 0,    'SCRIPTPATH', 'ШЛЯХ_ДА_СКРЫПТА' ),
+	'grammar'                => array( 0,    'GRAMMAR:', 'ГРАМАТЫКА:' ),
+	'notitleconvert'         => array( 0,    '__NOTITLECONVERT__', '__NOTC__', '__БЕЗ_КАНВЭРТАЦЫІ_НАЗВЫ__' ),
+	'nocontentconvert'       => array( 0,    '__NOCONTENTCONVERT__', '__NOCC__', '__БЕЗ_КАНВЭРТАЦЫІ_ТЭКСТУ__' ),
+	'currentweek'            => array( 1,    'CURRENTWEEK', 'БЯГУЧЫ_ТЫДЗЕНЬ' ),
+	'currentdow'             => array( 1,    'CURRENTDOW', 'БЯГУЧЫ_ДЗЕНЬ_ТЫДНЯ' ),
+	'revisionid'             => array( 1,    'REVISIONID', 'ID_ВЭРСІІ' ),
+	'plural'                 => array( 0,    'PLURAL:', 'МНОЖНЫ_ЛІК:'),
+	'fullurl'                => array( 0,    'FULLURL:', 'ПОЎНЫ_АДРАС:' ),
+	'fullurle'               => array( 0,    'FULLURLE:', 'ПОЎНЫ_АДРАС_2:' ),
+	'lcfirst'                => array( 0,    'LCFIRST:', 'ПЕРШАЯ_ЛІТАРА_МАЛАЯ:' ),
+	'ucfirst'                => array( 0,    'UCFIRST:', 'ПЕРШАЯ_ЛІТАРА_ВЯЛІКАЯ:' ),
+	'lc'                     => array( 0,    'LC:', 'МАЛЫМІ_ЛІТАРАМІ:' ),
+	'uc'                     => array( 0,    'UC:', 'ВЯЛІКІМІ_ЛІТАРАМІ:' ),
+	'raw'                    => array( 0,    'RAW:', 'НЕАПРАЦАВАНЫ:' ),
+	'displaytitle'           => array( 1,    'DISPLAYTITLE', 'АДЛЮСТРАВАНАЯ_НАЗВА' ),
+	'rawsuffix'              => array( 1,    'R', 'Н' ),
+	'newsectionlink'         => array( 1,    '__NEWSECTIONLINK__', '__СПАСЫЛКА_НА_НОВУЮ_СЭКЦЫЮ__' ),
+	'currentversion'         => array( 1,    'CURRENTVERSION', 'БЯГУЧАЯ_ВЭРСІЯ' ),
+	'urlencode'              => array( 0,    'URLENCODE:' ),
+	'currenttimestamp'       => array( 1,    'CURRENTTIMESTAMP', 'МОМАНТ_ЧАСУ' ),
+	'directionmark'          => array( 1,    'DIRECTIONMARK', 'DIRMARK', 'СЫМБАЛЬ_НАПРАМКУ_ПІСЬМА' ),
+	'language'               => array( 0,    '#LANGUAGE:', '#МОВА:' ),
+	'contentlanguage'        => array( 1,    'CONTENTLANGUAGE', 'CONTENTLANG', 'МОВА_ЗЬМЕСТУ' ),
+	'pagesinnamespace'       => array( 1,    'PAGESINNAMESPACE:', 'PAGESINNS:', 'КОЛЬКАСЬЦЬ_СТАРОНАК_У_ПРАСТОРЫ_НАЗВАЎ:' ),
+	'numberofadmins'         => array( 1,    'NUMBEROFADMINS', 'КОЛЬКАСЬЦЬ_АДМІНІСТРАТАРАЎ' ),
+	'formatnum'              => array( 0,    'FORMATNUM', 'ФАРМАТАВАЦЬ_ЛІК' ),
+);
+
+$namespaceNames = array(
+	NS_MEDIA          => 'Мэдыя',
+	NS_SPECIAL        => 'Спэцыяльныя',
+	NS_MAIN           => '',
+	NS_TALK           => 'Абмеркаваньне',
+	NS_USER           => 'Удзельнік',
+	NS_USER_TALK      => 'Гутаркі_ўдзельніка',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK   => 'Абмеркаваньне_$1',
+	NS_IMAGE          => 'Выява',
+	NS_IMAGE_TALK     => 'Абмеркаваньне_выявы',
+	NS_MEDIAWIKI      => 'MediaWiki',
+	NS_MEDIAWIKI_TALK => 'Абмеркаваньне_MediaWiki',
+	NS_TEMPLATE       => 'Шаблён',
+	NS_TEMPLATE_TALK  => 'Абмеркаваньне_шаблёну',
+	NS_HELP           => 'Дапамога',
+	NS_HELP_TALK      => 'Абмеркаваньне_дапамогі',
+	NS_CATEGORY       => 'Катэгорыя',
+	NS_CATEGORY_TALK  => 'Абмеркаваньне_катэгорыі'
+);
+
+$specialPageAliases = array(
+	'DoubleRedirects'           => array( 'Двайныя_перанакіраваньні' ),
+	'BrokenRedirects'           => array( 'Некарэктныя_перанакіраваньні' ),
+	'Disambiguations'           => array( 'Неадназначнасьці' ),
+	'Watchlist'                 => array( 'Сьпіс_назіраньня' ),
+	'Recentchanges'             => array( 'Апошнія_зьмены' ),
+	'Upload'                    => array( 'Загрузка' ),
+	'Imagelist'                 => array( 'Сьпіс_файлаў' ),
+	'Newimages'                 => array( 'Новыя_файлы' ),
+	'Listusers'                 => array( 'Сьпіс_удзельнікаў' ),
+	'Statistics'                => array( 'Статыстыка' ),
+	'Randompage'                => array( 'Выпадковая_старонка' ),
+	'Lonelypages'               => array( 'Старонкі-сіраціны' ),
+	'Uncategorizedpages'        => array( 'Некатэгарызаваныя_старонкі' ),
+	'Uncategorizedcategories'   => array( 'Некатэгарызаваныя_катэгорыі' ),
+	'Uncategorizedimages'       => array( 'Некатэгарызаваныя_файлы' ),
+	'Wantedpages'               => array( 'Запатрабаваныя_старонкі' ),
+	'Wantedcategories'          => array( 'Запатрабаваныя_катэгорыі' ),
+	'Shortpages'                => array( 'Кароткія_старонкі' ),
+	'Longpages'                 => array( 'Доўгія_старонкі' ),
+	'Newpages'                  => array( 'Новыя_старонкі' ),
+	'Ancientpages'              => array( 'Найстарэйшыя_старонкі' ),
+	'Deadendpages'              => array( 'Тупіковыя_старонкі' ),
+	'Protectedpages'            => array( 'Абароненыя_старонкі' ),
+	'Allpages'                  => array( 'Усе_старонкі' ),
+	'Specialpages'              => array( 'Спэцыяльныя_старонкі' ),
+	'Contributions'             => array( 'Унёсак' ),
+	'Categories'                => array( 'Катэгорыі' ),
+	'Export'                    => array( 'Экспарт' ),
+	'Version'                   => array( 'Вэрсія' ),
+	'Allmessages'               => array( 'Сыстэмныя_паведамленьні' ),
+	'Log'                       => array( 'Журналы_падзей' ),
+	'Blockip'                   => array( 'Блякаваньне' ),
+	'Import'                    => array( 'Імпарт' ),
+	'Listredirects'             => array( 'Сьпіс_перанакіраваньняў' ),
+	'Randomredirect'            => array( 'Выпадковае_перанакіраваньне' ),
+	'Mypage'                    => array( 'Мая_старонка' ),
+	'Mytalk'                    => array( 'Мае_размовы' ),
+	'Mycontributions'           => array( 'Мой_унёсак' ),
+	'Listadmins'                => array( 'Сьпіс_адміністратараў' ),
+	'Popularpages'              => array( 'Папулярныя_старонкі' ),
+	'Search'                    => array( 'Пошук' ),
+);
+
+$separatorTransformTable = array(',' => '.', '.' => ',' );
+
+$linkTrail = '/^([абвгґджзеёжзійклмнопрстуўфхцчшыьэюяćčłńśšŭźža-z]+)(.*)$/sDu';
+
+$messages = array(
+# User preference toggles
+'tog-underline'          => 'Падкрэсьліваць спасылкі:',
+'tog-hideminor'          => 'Хаваць дробныя зьмены ў сьпісе апошніх зьменаў',
+'tog-usenewrc'           => 'Удасканалены сьпіс апошніх зьменаў (патрабуе JavaScript)',
+'tog-numberheadings'     => 'Аўтаматычная нумарацыя загалоўкаў',
+'tog-showtoolbar'        => 'Паказваць панэль інструмэнтаў рэдагаваньня (патрабуе JavaScript)',
+'tog-editsection'        => 'Дазволіць рэдагаваньне асобных сэкцыяў па спасылках [рэдагаваць]',
+'tog-showtoc'            => 'Паказваць зьмест (для старонак з колькасьцю сэкцый болей за 3)',
+'tog-rememberpassword'   => 'Запомніць мяне на гэтым кампутары',
+'tog-editwidth'          => 'Поле рэдагаваньня ў поўную шырыню',
+'tog-minordefault'       => 'Па змоўчаньні пазначаць усе зьмены дробнымі',
+'tog-previewonfirst'     => 'Папярэдні прагляд пры першым рэдагаваньні',
+'tog-nocache'            => 'Адключыць кэшаваньне старонак',
+'tog-fancysig'           => 'Просты подпіс (без аўтаматычнай спасылкі)',
+'tog-externaleditor'     => 'Па змоўчаньні выкарыстоўваць зьнешні рэдактар',
+'tog-watchlisthideown'   => 'Хаваць мае праўкі ў сьпісе назіраньня',
+'tog-watchlisthidebots'  => 'Хаваць праўкі робатаў у сьпісе назіраньня',
+'tog-watchlisthideminor' => 'Хаваць дробныя праўкі ў сьпісе назіраньня',
+
+'underline-always' => 'Заўсёды',
+'underline-never'  => 'Ніколі',
+
+'skinpreview' => '(Прагляд)',
+
+# Dates
+'sunday'        => 'нядзеля',
+'monday'        => 'панядзелак',
+'tuesday'       => 'аўторак',
+'wednesday'     => 'серада',
+'thursday'      => 'чацьвер',
+'friday'        => 'пятніца',
+'saturday'      => 'субота',
+'january'       => 'студзень',
+'february'      => 'люты',
+'march'         => 'сакавік',
+'april'         => 'красавік',
+'may_long'      => 'травень',
+'june'          => 'чэрвень',
+'july'          => 'ліпень',
+'august'        => 'жнівень',
+'september'     => 'верасень',
+'october'       => 'кастрычнік',
+'november'      => 'лістапад',
+'december'      => 'сьнежань',
+'january-gen'   => 'студзеня',
+'february-gen'  => 'лютага',
+'march-gen'     => 'сакавіка',
+'april-gen'     => 'красавіка',
+'may-gen'       => 'траўня',
+'june-gen'      => 'чэрвеня',
+'july-gen'      => 'ліпеня',
+'august-gen'    => 'жніўня',
+'september-gen' => 'верасьня',
+'october-gen'   => 'кастрычніка',
+'november-gen'  => 'лістапада',
+'december-gen'  => 'сьнежня',
+'jan'           => '01',
+'feb'           => '02',
+'mar'           => '03',
+'apr'           => '04',
+'may'           => '05',
+'jun'           => '06',
+'jul'           => '07',
+'aug'           => '08',
+'sep'           => '09',
+'oct'           => '10',
+'nov'           => '11',
+'dec'           => '12',
+
+# Bits of text used by many pages
+'categories'      => 'Катэгорыі',
+'pagecategories'  => '{{PLURAL:$1|Катэгорыя|Катэгорыі|Катэгорыі}}',
+'category_header' => 'Артыкулы ў катэгорыі «$1»',
+'subcategories'   => 'Падкатэгорыі',
+
+'about'          => 'Пра',
+'article'        => 'Артыкул',
+'newwindow'      => '(адчыняецца ў новым акне)',
+'cancel'         => 'Адмяніць',
+'qbfind'         => 'Знайсьці',
+'qbbrowse'       => 'Праглядзець',
+'qbedit'         => 'Рэдагаваць',
+'qbpageoptions'  => 'Гэтая старонка',
+'qbspecialpages' => 'Спэцыяльныя старонкі',
+'mypage'         => 'Мая старонка',
+'mytalk'         => 'Мае размовы',
+'anontalk'       => 'Гутаркі для гэтага IP-адраса',
+'navigation'     => 'Навігацыя',
+
+'errorpagetitle'   => 'Памылка',
+'returnto'         => 'Вярнуцца да $1.',
+'tagline'          => 'Зьвесткі зь {{GRAMMAR:родны|{{SITENAME}}}}',
+'help'             => 'Дапамога',
+'search'           => 'Пошук',
+'searchbutton'     => 'Пошук',
+'go'               => 'Старонка',
+'searcharticle'    => 'Старонка',
+'history'          => 'Гісторыя старонкі',
+'history_short'    => 'Гісторыя',
+'info_short'       => 'Інфармацыя',
+'printableversion' => 'Вэрсія для друку',
+'permalink'        => 'Сталая спасылка',
+'edit'             => 'Рэдагаваць',
+'editthispage'     => 'Рэдагаваць гэтую старонку',
+'delete'           => 'Выдаліць',
+'deletethispage'   => 'Выдаліць гэтую старонку',
+'protect'          => 'Абараніць',
+'protectthispage'  => 'Абараніць гэтую старонку',
+'unprotect'        => 'зьняць абарону',
+'newpage'          => 'Новая старонка',
+'talkpage'         => 'Абмеркаваць гэтую старонку',
+'specialpage'      => 'Спэцыяльная старонка',
+'postcomment'      => 'Пракамэнтаваць',
+'articlepage'      => 'Паказаць артыкул',
+'talk'             => 'Гутаркі',
+'toolbox'          => 'Інструмэнты',
+'projectpage'      => 'Паказаць старонку праекту',
+'imagepage'        => 'Паказаць старонку выявы',
+'viewtalkpage'     => 'Паказаць абмеркаваньне',
+'otherlanguages'   => 'На іншых мовах',
+'redirectedfrom'   => '(Перанакіраваная з $1)',
+'redirectpagesub'  => 'Старонка-перанакіраваньне',
+'lastmodifiedat'   => 'Гэтая старонка апошні раз рэдагавалася $2, $1.', # $1 date, $2 time
+'protectedpage'    => 'Абароненая старонка',
+
+# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
+'aboutsite'         => 'Пра {{GRAMMAR:вінавальны|{{SITENAME}}}}',
+'aboutpage'         => '{{ns:project}}:Пра {{GRAMMAR:вінавальны|{{SITENAME}}}}',
+'copyright'         => 'Зьмест старонкі падпадае пад ліцэнзію $1.',
+'copyrightpagename' => 'Аўтарскія правы {{GRAMMAR:родны|{{SITENAME}}}}',
+'copyrightpage'     => '{{ns:project}}:Аўтарскія правы',
+'currentevents'     => 'Бягучыя падзеі',
+'currentevents-url' => 'Бягучыя падзеі',
+'disclaimers'       => 'Адмова ад адказнасьці',
+'disclaimerpage'    => '{{ns:project}}:Адмова ад адказнасьці',
+'edithelp'          => 'Дапамога ў рэдагаваньні',
+'edithelppage'      => 'Help:Рэдагаваньне',
+'helppage'          => 'Help:Зьмест',
+'mainpage'          => 'Галоўная старонка',
+'portal'            => 'Суполка',
+'portal-url'        => '{{ns:project}}:Суполка',
+'privacy'           => 'Правілы адносна прыватнасьці',
+'privacypage'       => '{{ns:project}}:Правілы адносна прыватнасьці',
+'sitesupport'       => 'Ахвяраваньні',
+
+'badaccess'        => 'Памылка: не адпаведны ўзровень правоў',
+'badaccess-group0' => 'Вам не дазволена выканаць запытанае Вамі дзеяньне.',
+'badaccess-group1' => 'Запытанае Вамі дзеяньне дазволенае толькі ўдзельнікам з групы $1.',
+'badaccess-group2' => 'Запытанае Вамі дзеяньне дазволенае толькі ўдзельнікам адной з групаў $1.',
+'badaccess-groups' => 'Запытанае Вамі дзеяньне дазволенае толькі ўдзельнікам адной з групаў $1.',
+
+'ok'                  => 'Добра',
+'pagetitle'           => '$1 - {{SITENAME}}',
+'retrievedfrom'       => 'Атрымана з «$1»',
+'youhavenewmessages'  => 'Вы маеце $1 ($2).',
+'newmessageslink'     => 'новыя паведамленьні',
+'newmessagesdifflink' => 'апошняя зьмена',
+'editsection'         => 'рэдагаваць',
+'editold'             => 'рэдагаваць',
+'editsectionhint'     => 'Рэдагаваць сэкцыю «$1»',
+'toc'                 => 'Зьмест',
+'showtoc'             => 'паказаць',
+'hidetoc'             => 'схаваць',
+'thisisdeleted'       => 'Праглядзець ці аднавіць $1?',
+'viewdeleted'         => 'Паказаць $1?',
+'restorelink'         => 'выдаленыя зьмены ($1)',
+
+# Short words for each namespace, by default used in the 'article' tab in monobook
+'nstab-main'      => 'Артыкул',
+'nstab-user'      => 'Старонка ўдзельніка/ўдзельніцы',
+'nstab-media'     => 'Мэдыя',
+'nstab-special'   => 'Спэцыяльная',
+'nstab-project'   => 'Старонка праекту',
+'nstab-image'     => 'Файл',
+'nstab-mediawiki' => 'Паведамленьне',
+'nstab-template'  => 'Шаблён',
+'nstab-help'      => 'Старонка дапамогі',
+'nstab-category'  => 'Катэгорыя',
+
+# Main script and global functions
+'nosuchaction'      => 'Няма такога дзеяньня',
+'nosuchspecialpage' => 'Такой спэцыяльнай старонкі не існуе',
+
+# General errors
+'error'           => 'Памылка',
+'databaseerror'   => 'Памылка базы зьвестак',
+'nodb'            => 'Немагчыма выбраць базу зьвестак $1',
+'cachederror'     => 'Наступнае — кэшаваная копія запытанай старонкі; магчыма, яна ўжо не адпавядае рэчаіснасьці.',
+'internalerror'   => 'Унутраная памылка',
+'filecopyerror'   => 'Немагчыма cкапіяваць файл «$1» у «$2».',
+'filerenameerror' => 'Немагчыма перайменаваць файл «$1» у «$2».',
+'filedeleteerror' => 'Немагчыма выдаліць файл «$1».',
+'filenotfound'    => 'Немагчыма знайсьці файл «$1».',
+'badarticleerror' => 'Гэтае дзеяньне немагчыма выканаць на гэтай старонцы.',
+'cannotdelete'    => 'Немагчыма выдаліць указаную старонку альбо выяву. (Магчыма, яна ўжо выдаленая кімсьці іншым.)',
+'badtitle'        => 'Некарэктная назва',
+'badtitletext'    => 'Запытаная назва старонкі няслушная ці пустая, альбо няслушна ўказаная міжмоўная ці міжвікі назва. Яна можа ўтрымліваць сымбалі, якія нельга ўжываць у назвах.',
+'perfcached'      => 'Наступныя зьвесткі кэшаваныя і могуць быць састарэлымі.',
+'perfcachedts'    => 'Наступныя зьвесткі кэшаваныя і апошні раз былі абноўленыя $1.',
+'viewsource'      => 'Паказаць крыніцу',
+'viewsourcefor'   => 'для $1',
+
+# Login and logout pages
+'yourname'                   => 'Імя ўдзельніка/ўдзельніцы',
+'yourpassword'               => 'Пароль',
+'remembermypassword'         => 'Запомніць мяне на гэтым кампутары',
+'alreadyloggedin'            => '<strong>Удзельнік $1, Вы ўжо ўвайшлі!</strong><br />',
+'login'                      => 'Увайсьці',
+'userlogin'                  => 'Стварыць рахунак ці ўвайсьці',
+'logout'                     => 'Выйсьці',
+'userlogout'                 => 'Выйсьці',
+'nologin'                    => 'Ня маеце рахунку? $1.',
+'nologinlink'                => 'Стварыце рахунак',
+'createaccount'              => 'Стварыць новы рахунак',
+'gotaccount'                 => 'Ужо маеце рахунак? $1.',
+'gotaccountlink'             => 'Увайдзіце',
+'createaccountmail'          => 'па электроннай пошце',
+'badretype'                  => 'Уведзеныя Вамі паролі не супадаюць.',
+'userexists'                 => 'Выбранае Вамі імя ўдзельніка/ўдзельніцы ўжо выкарыстоўваецца кімсьці іншым. Калі ласка, выберыце іншае імя.',
+'youremail'                  => 'Адрас электроннай пошты *:',
+'username'                   => 'Імя ўдзельніка/ўдзельніцы:',
+'uid'                        => 'ID удзельніка/удзельніцы:',
+'yourrealname'               => 'Сапраўднае імя *:',
+'yourlanguage'               => 'Мова інтэрфэйсу:',
+'yournick'                   => 'Мянушка:',
+'badsig'                     => 'Няслушны неапрацаваны подпіс; праверце HTML-тэгі.',
+'email'                      => 'Электронная пошта',
+'loginerror'                 => 'Памылка ўваходу',
+'nosuchuser'                 => 'Не існуе ўдзельніка ці ўдзельніцы «$1».
+Праверце напісаньне, альбо выкарыстайце форму ніжэй, каб стварыць новы рахунак ўдзельніка ці ўдзельніцы.',
+'nosuchusershort'            => 'Не існуе ўдзельніка ці ўдзельніцы «$1». Праверце напісаньне.',
+'nouserspecified'            => 'Вы мусіце пазначыць імя ўдзельніка.',
+'mailmypassword'             => 'Даслаць мне пароль',
+'acct_creation_throttle_hit' => 'На жаль, Вы ўжо стварылі $1 рахункаў. Болей нельга.',
+'accountcreated'             => 'Рахунак створаны',
+'accountcreatedtext'         => 'Рахунак удзельніка для $1 быў створаны.',
+
+# Edit page toolbar
+'link_tip'      => 'Унутраная спасылка',
+'extlink_tip'   => 'Зьнешняя спасылка (не забывайцеся пачынаць з http:// )',
+'math_sample'   => 'Зьмясьціце тут формулу',
+'math_tip'      => 'Матэматычная формула (LaTeX)',
+'nowiki_sample' => 'Пішыце сюды нефарматаваны тэкст',
+'nowiki_tip'    => 'Ігнараваць вікі-фарматаваньне',
+'image_sample'  => 'Прыклад.jpg',
+'media_sample'  => 'Прыклад.ogg',
+'media_tip'     => 'Спасылка на мэдыя-файл',
+'sig_tip'       => 'Ваш подпіс і момант часу',
+'hr_tip'        => 'Гарызантальная лінія (не выкарыстоўвайце часта)',
+
+# Edit pages
+'summary'               => 'Кароткае апісаньне зьменаў',
+'subject'               => 'Тэма/назва',
+'minoredit'             => 'Гэта дробная праўка',
+'watchthis'             => 'Назіраць за гэтай старонкай',
+'savearticle'           => 'Захаваць старонку',
+'preview'               => 'Прагляд',
+'showpreview'           => 'Праглядзець',
+'showdiff'              => 'Паказаць зьмены',
+'anoneditwarning'       => "'''Папярэджаньне:''' Вы не ўвайшлі. Ваш IP-адрас будзе запісаны ў гісторыі гэтай старонкі.",
+'blockedtitle'          => 'Удзельнік заблякаваны',
+'blockedtext'           => "<big>'''Вашае імя ўдзельніка ці IP-адрас быў заблякаваны $1.'''</big>
+
+Прычына гэтага: ''$2''.
+
+Вы можаце скантактавацца з $1 ці адным зь іншых [[{{MediaWiki:grouppage-sysop}}|адміністратараў]], каб абмеркаваць блякаваньне. Заўважце, што Вы ня зможаце ўжыць мажлівасьць «даслаць ліст па электроннай пошце гэтаму ўдзельніку/гэтай удзельніцы», пакуль не пазначыце сапраўдны адрас электроннай пошты ў Вашых [[Special:Preferences|устаноўках]]. Ваш IP-адрас – $3, ідэнтыфікатар блякіроўкі – #$5. Калі ласка, улучайце гэтую інфармацыю ва ўсе запыты, што Вы будзеце рабіць.",
+'blockedoriginalsource' => "Крыніца '''$1''' паказана ніжэй:",
+'blockededitsource'     => "Тэкст '''Вашых зьменаў''' у '''$1''' паказаны ніжэй:",
+'whitelistacctitle'     => 'Вам не дазволена ствараць рахунак',
+'accmailtitle'          => 'Пароль адасланы.',
+'accmailtext'           => 'Пароль для «$1» быў адасланы на адрас $2.',
+'newarticle'            => '(Новы)',
+'newarticletext'        => "Вы прыйшлі па спасылцы на старонку, якая яшчэ не існуе.
+Каб стварыць яе, напішыце тэкст у полі ніжэй (глядзіце [[{{MediaWiki:helppage}}|старонку дапамогі]] дзеля дадатковай інфармацыі).
+Калі Вы трапілі сюды памылкова, націсьніце '''назад''' у вашым браўзэры",
+'anontalkpagetext'      => "----''Гэта старонка гутарак ананімнага ўдзельніка, які яшчэ не стварыў сабе рахунак ці не ўжывае яго. Таму мы вымушаныя ўжываць лічбавы IP-адрас дзеля ягонай ідэнтыфікацыі. Адзін IP-адрас можа выкарыстоўвацца некалькімі ўдзельнікамі. Калі Вы — ананімны ўдзельнік і лічыце, што атрымалі не прызначаныя Вам камэнтары, калі ласка, [[Special:Userlogin|зарэгіструйцеся ці ўвайдзіце ў сыстэму]], каб у будучыні пазьбегнуць магчымай блытаніны зь іншымі ананімнымі ўдзельнікамі.''
+
+''This is the discussion page for an anonymous user who has not created an account yet or who does not use it. We therefore have to use the numerical IP address to identify him/her. Such an IP address can be shared by several users. If you are an anonymous user and feel that irrelevant comments have been directed at you, please [[Special:Userlogin|create an account or log in]] to avoid future confusion with other anonymous users.''",
+'noarticletext'         => 'Зараз тэкст на гэтай старонцы адсутнічае. Вы можаце [[Special:Search/{{PAGENAME}}|пашукаць гэтую назву]] ў іншых старонках альбо [{{fullurl:{{NAMESPACE}}:{{PAGENAME}}|action=edit}} рэдагаваць гэтую старонку].',
+'note'                  => '<strong>Заўвага: </strong>',
+'previewnote'           => '<strong>Гэта толькі папярэдні прагляд і зьмены яшчэ не былі захаваныя!</strong>',
+'editing'               => 'Рэдагаваньне: $1',
+'editingsection'        => 'Рэдагаваньне: $1 (сэкцыя)',
+'editingcomment'        => 'Рэдагаваньне: $1 (камэнтар)',
+'editconflict'          => 'Канфлікт рэдагаваньня: $1',
+'yourtext'              => 'Ваш тэкст',
+'storedversion'         => 'Захаваная вэрсія',
+'copyrightwarning'      => '<strong>НЕЛЬГА БЕЗ [[{{ns:project}}:Дазволы на выкарыстаньне матэрыялаў|ДАЗВОЛУ]] ДАДАВАЦЬ МАТЭРЫЯЛЫ, АБАРОНЕНЫЯ АЎТАРСКІМ ПРАВАМ!</strong>',
+'protectedpagewarning'  => '<strong>ПАПЯРЭДЖАНЬНЕ:  Гэтая старонка была абароненая, таму толькі адміністратары могуць рэдагаваць яе. Упэўніцеся, што Вы кіруецеся [[{{ns:project}}:Рэдагаваньне абароненых старонак|правіламі рэдагаваньня абароненых старонак]].</strong>',
+'templatesused'         => 'На гэтай старонцы выкарыстаныя наступныя шаблёны:',
+'templatesusedpreview'  => 'У гэтым праглядзе выкарыстаныя наступныя шаблёны:',
+'templatesusedsection'  => 'У гэтай сэкцыі выкарыстаныя наступныя шаблёны:',
+'template-protected'    => '(абаронены)',
+
+# Account creation failure
+'cantcreateaccounttitle' => 'Немагчыма стварыць рахунак',
+
+# History pages
+'revhistory'          => 'Гісторыя зьменаў',
+'viewpagelogs'        => 'Паказаць журналы падзей для гэтай старонкі',
+'nohistory'           => 'Гісторыя зьменаў для гэтай старонкі адсутнічае.',
+'revnotfound'         => 'Вэрсія ня знойдзеная',
+'loadhist'            => 'Загрузка гісторыі старонкі',
+'currentrev'          => 'Бягучая вэрсія',
+'revisionasof'        => 'Вэрсія ад $1',
+'currentrevisionlink' => 'Бягучая вэрсія',
+'cur'                 => 'бяг',
+'orig'                => 'арыг',
+'deletedrev'          => '[выдаленая]',
+
+# Diffs
+'difference'              => '(Адрозьненьні паміж вэрсіямі)',
+'loadingrev'              => 'Загрузка вэрсіі для параўнаньня',
+'lineno'                  => 'Радок $1:',
+'editcurrent'             => 'Рэдагаваць бягучую вэрсію гэтай старонкі',
+'compareselectedversions' => 'Параўнаць выбраныя вэрсіі',
+
+# Search results
+'searchresults'    => 'Вынікі пошуку',
+'searchresulttext' => 'Для атрыманьня больш падрабязнай інфармацыі пра пошук у {{GRAMMAR:месны|{{SITENAME}}}}, глядзіце [[{{MediaWiki:helppage}}|{{int:help}}]].',
+'badquery'         => 'Няслушна сфармаваны пошукавы запыт',
+'badquerytext'     => 'Мы не змаглі апрацаваць Ваш запыт. Магчыма, прычына гэтага ў тым, што Вы паспрабавалі шукаць слова, карацейшае за тры літары, што пакуль не падтрымліваецца. Магчыма таксама, што Вы зрабілі памылку ў выразе, напрыклад, «рыба і і луска». Калі ласка, паспрабуйце іншы запыт.',
+'noexactmatch'     => "'''Старонкі з гэткай назвай не існуе.''' Вы можаце '''[[:$1|стварыць гэтую старонку]]'''.",
+'prevn'            => 'папярэднія $1',
+'nextn'            => 'наступныя $1',
+'viewprevnext'     => 'Паказаць ($1) ($2) ($3).',
+'showingresults'   => 'Ніжэй паданыя да <b>$1</b> вынікаў, пачынаючы з #<b>$2</b>.',
+'powersearch'      => 'Пошук',
+'blanknamespace'   => 'Артыкул',
+
+# Preferences page
+'preferences'             => 'Устаноўкі',
+'mypreferences'           => 'Мае ўстаноўкі',
+'qbsettings-none'         => 'Не паказваць',
+'qbsettings-fixedleft'    => 'Замацаваная зьлева',
+'qbsettings-fixedright'   => 'Замацаваная справа',
+'qbsettings-floatingleft' => 'Рухомая зьлева',
+'changepassword'          => 'Зьмяніць пароль',
+'skin'                    => 'Афармленьне',
+'dateformat'              => 'Фармат даты',
+'datetime'                => 'Дата і час',
+'math_unknown_error'      => 'невядомая памылка',
+'math_unknown_function'   => 'невядомая функцыя',
+'math_syntax_error'       => 'сынтаксычная памылка',
+'prefs-rc'                => 'Апошнія зьмены',
+'prefs-watchlist'         => 'Сьпіс назіраньня',
+'prefs-misc'              => 'Рознае',
+'saveprefs'               => 'Захаваць',
+'resetprefs'              => 'Скінуць',
+'oldpassword'             => 'Стары пароль:',
+'newpassword'             => 'Новы пароль:',
+'retypenew'               => 'Паўтарыце новы пароль:',
+'textboxsize'             => 'Рэдагаваньне',
+'rows'                    => 'Радкоў:',
+'columns'                 => 'Слупкоў:',
+'searchresultshead'       => 'Пошук',
+'resultsperpage'          => 'Колькасьць вынікаў на старонцы',
+'timezonelegend'          => 'Часавы пояс',
+'localtime'               => 'Мясцовы час',
+'servertime'              => 'Бягучы час на сэрвэры',
+'guesstimezone'           => 'Запоўніць з браўзэра',
+'allowemail'              => 'Дазволіць атрыманьне лістоў ад іншых удзельнікаў і ўдзельніц',
+'defaultns'               => 'Па змоўчаньні, шукаць у наступных прасторах назваў:',
+'default'                 => 'па змоўчаньні',
+'files'                   => 'Файлы',
+
+# User rights
+'userrights-user-editname' => 'Увядзіце імя ўдзельніка:',
+'editusergroup'            => 'Рэдагаваць групы ўдзельнікаў і ўдзельніц',
+'saveusergroups'           => 'Захаваць групы ўдзельнікаў і ўдзельніц',
+
+# Groups
+'group'            => 'Група:',
+'group-bot'        => 'Робаты',
+'group-sysop'      => 'Адміністрацыя',
+'group-bureaucrat' => 'Бюракраты',
+'group-all'        => '(усе)',
+
+'group-bot-member'        => 'Робат',
+'group-sysop-member'      => 'Адміністратар/Адміністратарка',
+'group-bureaucrat-member' => 'Бюракрат',
+
+'grouppage-bot'   => '{{ns:project}}:Робаты',
+'grouppage-sysop' => '{{ns:project}}:Адміністрацыя',
+
+# Recent changes
+'recentchanges'                     => 'Апошнія зьмены',
+'recentchangestext'                 => 'Сачыце за апошнімі зьменамі ў {{GRAMMAR:месны|{{SITENAME}}}} на гэтай старонцы.',
+'rcnote'                            => 'Ніжэй пададзеныя апошнія <strong>$1</strong> зьменаў у апошнія <strong>$2</strong> дзён, па стане на $3.',
+'rcnotefrom'                        => 'Ніжэй знаходзяцца зьмены з <b>$2</b> (да <b>$1</b> на старонку).',
+'rclistfrom'                        => 'Паказаць зьмены з $1',
+'rcshowhideminor'                   => '$1 дробныя праўкі',
+'rcshowhidebots'                    => '$1 робатаў',
+'rcshowhideliu'                     => '$1 зарэгістраваных',
+'rcshowhideanons'                   => '$1 ананімаў',
+'rcshowhidemine'                    => '$1 мае праўкі',
+'rclinks'                           => 'Паказаць апошнія $1 зьменаў за мінулыя $2 дзён<br />$3',
+'diff'                              => 'розьн',
+'hist'                              => 'гіст',
+'hide'                              => 'схаваць',
+'show'                              => 'паказаць',
+'minoreditletter'                   => 'д',
+'newpageletter'                     => 'Н',
+'boteditletter'                     => 'р',
+'number_of_watching_users_pageview' => '[Колькасьць назіральнікаў: $1]',
+
+# Recent changes linked
+'recentchangeslinked' => 'Зьвязаныя праўкі',
+
+# Upload
+'upload'            => 'Загрузіць файл',
+'uploadbtn'         => 'Загрузіць файл',
+'reupload'          => 'Загрузіць зноў',
+'reuploaddesc'      => 'Вярнуцца да формы загрузкі.',
+'uploadtext'        => "'''Перад тым, як загрузіць файл:'''
+
+* Азнаёмцеся з '''[[{{ns:project}}:Правілы выкарыстаньня файлаў|правіламі выкарыстаньня файлаў]]'''.
+* Праверце з дапамогай '''[[Special:Imagelist|сьпісу файлаў]]''', ці не загружаны гэты файл з іншай назвай.
+* Выкарыстоўвайце наступныя '''фарматы''': JPG — для фотаздымкаў; GIF — для анімацыі; PNG — для іншых выяваў; OGG — для аўдыёфайлаў.
+* Давайце файлам '''зразумелыя назвы''', якія адлюстроўваюць іх зьмест. Напрыклад: ''Janka Kupala, 1910.jpg'' замест ''JK1.jpg''. Назву файла '''немагчыма''' зьмяніць пасьля загрузкі.
+* Пытайцеся '''дазволу''' на публікацыю фотаздымка ва ўсіх людзей, якія там прысутнічаюць.
+
+'''Пасьля таго, як выява загружаная:'''
+
+* '''Абавязкова''' дадайце:
+** '''дэталёвае апісаньне зьместу''';
+** '''крыніцу''': файл створаны Вамі; адсканаваны з кнігі ''X''; узяты з Інтэрнэт па адрасу ''Y'';
+** для файлаў, якія зроблены '''ня''' Вамі, укажыце, ці атрымалі Вы '''дазвол''' на выкарыстаньне гэтага файла ў {{GRAMMAR:месны|{{SITENAME}}}};
+** '''ліцэнзіі''', згодна ўмоваў якіх магчыма распаўсюджваць файл.
+* '''Выкарыстоўвайце файл''' у артыкуле(ах). Напрыклад: <code><nowiki>[[</nowiki>{{ns:image}}:file.jpg<nowiki>]]</nowiki></code> ці <code><nowiki>[[</nowiki>{{ns:image}}:file.jpg<nowiki>|thumb|200px|Апісаньне]]</nowiki></code> — для выяваў; <code><nowiki>[[</nowiki>{{ns:media}}:file.ogg<nowiki>]]</nowiki></code> — для аўдыёфайлаў.",
+'uploadlog'         => 'журнал загрузак',
+'uploadlogpage'     => 'Журнал загрузак',
+'uploadlogpagetext' => 'Сьпіс апошніх загружаных файлаў.',
+'filename'          => 'Назва файла',
+'filedesc'          => 'Апісаньне',
+'fileuploadsummary' => 'Апісаньне:',
+'filesource'        => 'Крыніца',
+'uploadedfiles'     => 'Загружаныя файлы',
+'ignorewarning'     => 'Праігнараваць папярэджаньне і захаваць файл.',
+'minlength'         => 'Назва файла павінна быць не карацейшай за тры сымбалі.',
+'illegalfilename'   => 'Назва файла «$1» зьмяшчае сымбалі, якія нельга выкарыстоўваць у назвах старонак. Калі ласка, зьмяніце назву файла і паспрабуйце загрузіць яго зноў.',
+'badfilename'       => 'Назва файла была зьмененая на «$1».',
+'savefile'          => 'Захаваць файл',
+'uploadedimage'     => 'загружаная «[[$1]]»',
+'uploadvirus'       => 'Файл утрымлівае вірус! Падрабязнасьці: $1',
+'watchthisupload'   => 'Назіраць за гэтай старонкай',
+
+'license'   => 'Ліцэнзія',
+'nolicense' => 'Не выбраная',
+
+# Image list
+'imagelist'             => 'Сьпіс файлаў',
+'imagelisttext'         => 'Сьпіс <strong>$1</strong> файлаў, адсартаваных <strong>$2</strong>.',
+'getimagelist'          => 'атрыманьне сьпісу файлаў',
+'ilsubmit'              => 'Шукаць',
+'showlast'              => 'Паказаць $1 апошніх файлаў адсартаваных $2.',
+'byname'                => 'па назьве',
+'bydate'                => 'па даце',
+'bysize'                => 'па памеры',
+'imgdelete'             => 'выдаліць',
+'imgdesc'               => 'апісаньне',
+'imgfile'               => 'файл',
+'imghistory'            => 'Гісторыя файла',
+'revertimg'             => 'вярнуць',
+'deleteimg'             => 'выдаліць',
+'deleteimgcompletely'   => 'Выдаліць усе вэрсіі гэтага файла',
+'imagelinks'            => 'Спасылкі',
+'linkstoimage'          => 'Наступныя старонкі спасылаюцца на гэты файл:',
+'nolinkstoimage'        => 'Ніводная старонка не спасылаецца на гэты файл.',
+'sharedupload'          => 'Гэты файл зьяўляецца агульным і можа выкарыстоўвацца іншымі праектамі.',
+'imagelist_date'        => 'Дата',
+'imagelist_name'        => 'Назва',
+'imagelist_user'        => 'Удзельнік',
+'imagelist_size'        => 'Памер',
+'imagelist_description' => 'Апісаньне',
+
+# MIME search
+'mimesearch' => 'Пошук па MIME',
+'mimetype'   => 'Тып MIME:',
+
+# Unwatched pages
+'unwatchedpages' => 'Старонкі, за якімі ніхто не назірае',
+
+# List redirects
+'listredirects' => 'Сьпіс перанакіраваньняў',
+
+# Unused templates
+'unusedtemplates'    => 'Шаблёны, якія не выкарыстоўваюцца',
+'unusedtemplateswlh' => 'іншыя спасылкі',
+
+# Random redirect
+'randomredirect' => 'Выпадковае перанакіраваньне',
+
+# Statistics
+'statistics'    => 'Статыстыка',
+'sitestats'     => 'Статыстыка {{GRAMMAR:родны|{{SITENAME}}}}',
+'userstats'     => 'Статыстыка ўдзелу',
+'userstatstext' => "Колькасьць зарэгістраваных удзельнікаў і ўдзельніц: '''$1'''.
+
+Колькасьць адміністратараў і адміністратарак: '''$2''' (ці '''$4%'''). Падрабязнасьці глядзіце ў $3.",
+
+'disambiguations'     => 'Старонкі-неадназначнасьці',
+'disambiguationspage' => 'Шаблён:Неадназначнасьць',
+
+'doubleredirects' => 'Двайныя перанакіраваньні',
+
+'brokenredirects'     => 'Некарэктныя перанакіраваньні',
+'brokenredirectstext' => 'Наступныя перанакіраваньні спасылаюцца на неіснуючыя старонкі:',
+
+# Miscellaneous special pages
+'nbytes'                  => '$1 {{PLURAL:$1|байт|байта|байтаў}}',
+'ncategories'             => '$1 {{PLURAL:$1|катэгорыя|катэгорыі|катэгорый}}',
+'nlinks'                  => '$1 {{PLURAL:$1|спасылка|спасылкі|спасылак}}',
+'nmembers'                => '$1 {{PLURAL:$1|элемэнт|элемэнты|элемэнтаў}}',
+'nrevisions'              => '$1 {{PLURAL:$1|вэрсія|вэрсіі|вэрсій}}',
+'nviews'                  => '$1 {{PLURAL:$1|прагляд|прагляды|праглядаў}}',
+'lonelypages'             => 'Старонкі-сіраціны',
+'uncategorizedpages'      => 'Некатэгарызаваныя старонкі',
+'uncategorizedcategories' => 'Некатэгарызаваныя катэгорыі',
+'uncategorizedimages'     => 'Некатэгарызаваныя файлы',
+'unusedcategories'        => 'Катэгорыі, якія не выкарыстоўваюцца',
+'unusedimages'            => 'Файлы, якія не выкарыстоўваюцца',
+'popularpages'            => 'Папулярныя старонкі',
+'wantedcategories'        => 'Запатрабаваныя катэгорыі',
+'wantedpages'             => 'Запатрабаваныя старонкі',
+'mostlinked'              => 'Старонкі, на якія найчасьцей спасылаюцца',
+'mostlinkedcategories'    => 'Катэгорыі з найбольшай колькасьцю артыкулаў',
+'mostcategories'          => 'Старонкі з найбольшай колькасьцю катэгорый',
+'mostimages'              => 'Выявы, на якія найчасьцей спасылаюцца',
+'mostrevisions'           => 'Старонкі з найбольшай колькасьцю рэдагаваньняў',
+'allpages'                => 'Усе старонкі',
+'prefixindex'             => 'Пошук старонак па пачатку назвы',
+'randompage'              => 'Выпадковая старонка',
+'shortpages'              => 'Кароткія старонкі',
+'longpages'               => 'Доўгія старонкі',
+'deadendpages'            => 'Тупіковыя старонкі',
+'listusers'               => 'Сьпіс удзельнікаў і ўдзельніц',
+'specialpages'            => 'Спэцыяльныя старонкі',
+'spheading'               => 'Спэцыяльныя старонкі для ўсіх удзельнікаў і ўдзельніц',
+'restrictedpheading'      => 'Спэцыяльныя старонкі з абмежаваным доступам',
+'rclsub'                  => '(да старонак, спасылкі на якія ёсьць на «$1»)',
+'newpages'                => 'Новыя старонкі',
+'newpages-username'       => 'Імя ўдзельніка/ўдзельніцы:',
+'ancientpages'            => 'Найстарэйшыя старонкі',
+'move'                    => 'Перанесьці',
+'movethispage'            => 'Перанесьці гэтую старонку',
+
+# Book sources
+'booksources' => 'Кнігарні',
+
+'categoriespagetext' => 'У {{GRAMMAR:месны|{{SITENAME}}}} існуюць наступныя катэгорыі:',
+'data'               => 'Зьвесткі',
+'alphaindexline'     => 'ад $1 да $2',
+'version'            => 'Вэрсія',
+
+# Special:Log
+'specialloguserlabel'  => 'Удзельнік/удзельніца:',
+'speciallogtitlelabel' => 'Назва:',
+'log'                  => 'Журналы падзей',
+'alllogstext'          => 'Сумесны паказ журналаў загрузкі, выдаленьня, абароны, блякаваньня і адміністраваньня.
+Вы можаце адфільтраваць вынікі па тыпе журналу, удзельніку ці старонцы.',
+
+# Special:Allpages
+'nextpage'          => 'Наступная старонка ($1)',
+'prevpage'          => 'Папярэдняя старонка ($1)',
+'allpagesfrom'      => 'Паказаць старонкі, пачынаючы з:',
+'allarticles'       => 'Усе артыкулы',
+'allinnamespace'    => 'Усе старонкі (прастора назваў: $1)',
+'allnotinnamespace' => 'Усе старонкі (не ў прасторы назваў $1)',
+'allpagesprev'      => 'Папярэднія',
+'allpagesnext'      => 'Наступныя',
+'allpagessubmit'    => 'Паказаць',
+'allpagesprefix'    => 'Паказаць старонкі, назвы якіх пачынаюцца з:',
+'allpagesbadtitle'  => 'Пададзеная назва старонкі была няслушная ці пачыналася зь міжмоўнай ці міжвікі спасылкі. Яна яшчэ можа ўтрымліваць сымбалі, якія ня могуць ужывацца ў назвах.',
+
+# E-mail user
+'emailuser'    => 'Даслаць ліст па электроннай пошце гэтаму ўдзельніку/гэтай удзельніцы',
+'emailpage'    => 'Даслаць ліст ўдзельніку ці ўдзельніцы па электроннай пошце',
+'noemailtitle' => 'Адрас электроннай пошты адсутнічае',
+'emailfrom'    => 'Ад',
+'emailto'      => 'Каму',
+'emailsubject' => 'Тэма',
+'emailmessage' => 'Паведамленьне',
+'emailsend'    => 'Даслаць',
+
+# Watchlist
+'watchlist'            => 'Мой сьпіс назіраньня',
+'mywatchlist'            => 'Мой сьпіс назіраньня',
+'watchlistfor'         => "(для '''$1''')",
+'nowatchlist'          => 'Ваш сьпіс назіраньня — пусты.',
+'clearwatchlist'       => 'Ачысьціць сьпіс назіраньня',
+'watchlistclearbutton' => 'Ачысьціць сьпіс назіраньня',
+'addedwatch'           => 'Дададзеная ў сьпіс назіраньня',
+'addedwatchtext'       => "Артыкул «$1» быў дададзены да Вашага [[Special:Watchlist|сьпісу назіраньня]].
+Наступныя зьмены ў гэтым артыкуле і зьвязанай зь ім старонцы абмеркаваньняў будуць бачныя там, і старонка будзе выглядаць '''тлустай''' на [[Special:Recentchanges|старонцы са сьпісам апошніх зьменаў]], каб зьмены было лягчэй заўважыць.
+
+Калі Вы захочаце выдаліць артыкул са сьпісу назіраньня, націсьніце «не назіраць» у спэцыяльным радку зьверху артыкула.",
+'removedwatch'         => 'Выдаленая са сьпісу назіраньня',
+'removedwatchtext'     => 'Старонка «[[:$1]]» была выдаленая з Вашага сьпісу назіраньня.',
+'watch'                => 'Назіраць',
+'watchthispage'        => 'Назіраць за гэтай старонкай',
+'unwatch'              => 'Не назіраць',
+'unwatchthispage'      => 'Перастаць назіраць',
+'notanarticle'         => 'Не артыкул',
+'removechecked'        => 'Выдаліць выбраныя старонкі са сьпісу назіраньня',
+'removingchecked'      => 'Выдаленьне выбраных старонак са сьпісу назіраньня...',
+'couldntremove'        => 'Немагчыма выдаліць «$1»...',
+'watchlist-show-bots'  => 'паказаць праўкі робатаў',
+'watchlist-hide-bots'  => 'схаваць праўкі робатаў',
+'watchlist-show-own'   => 'паказаць мае праўкі',
+'watchlist-hide-own'   => 'схаваць мае праўкі',
+'watchlist-show-minor' => 'паказаць дробныя праўкі',
+'watchlist-hide-minor' => 'схаваць дробныя праўкі',
+
+# Displayed when you click the "watch" button and it's in the process of watching
+'watching'   => 'Дадаецца ў сьпіс назіраньня...',
+'unwatching' => 'Выдаляецца са сьпісу назіраньня...',
+
+'enotif_newpagetext' => 'Гэта новая старонка.',
+
+# Delete/protect/revert
+'deletepage'           => 'Выдаліць старонку',
+'confirm'              => 'Пацьверджаньне',
+'excontent'            => 'колішні зьмест: «$1»',
+'exblank'              => 'старонка была пустая',
+'confirmdelete'        => 'Пацьверджаньне выдаленьня',
+'deletesub'            => '(Выдаленьне «$1»)',
+'historywarning'       => 'Папярэджаньне: у старонкі, якую Вы зьбіраецеся выдаліць, ёсьць гісторыя:&nbsp;',
+'actioncomplete'       => 'Дзеяньне завершанае',
+'deletedarticle'       => 'выдаленая «[[$1]]»',
+'dellogpage'           => 'Журнал выдаленьняў',
+'dellogpagetext'       => 'Сьпіс апошніх выдаленьняў.',
+'deletionlog'          => 'журнал выдаленьняў',
+'deletecomment'        => 'Прычына выдаленьня',
+'rollback'             => 'Адмяніць рэдагаваньні',
+'cantrollback'         => 'Немагчыма скасаваць зьмену; апошні рэдактар — адзіны аўтар гэтай старонкі.',
+'alreadyrolled'        => 'Немагчыма скасаваць апошнюю зьмену [[:$1]], якую зрабіў [[User:$2|$2]] ([[User talk:$2|гутаркі]]); нехта іншы ўжо зьмяніў артыкул ці скасаваў зьмены.
+
+Апошнія зьмены зробленыя [[User:$3|$3]] ([[User talk:$3|гутаркі]]).',
+'protectlogpage'       => 'Журнал абаронаў',
+'protectedarticle'     => 'абароненая «[[$1]]»',
+'protectsub'           => '(Абарона «$1»)',
+'confirmprotecttext'   => 'Вы сапраўды жадаеце абараніць гэтую старонку?',
+'confirmprotect'       => 'Пацьверджаньне абароны',
+'protectcomment'       => 'Прычына для абароны',
+'confirmunprotecttext' => 'Вы сапраўды жадаеце зьняць абарону з гэтай старонкі?',
+
+# Restrictions (nouns)
+'restriction-edit' => 'Рэдагаваньне',
+'restriction-move' => 'Перанос',
+
+# Undelete
+'undelete'        => 'Прагляд выдаленых старонак',
+'viewdeletedpage' => 'Паказаць выдаленыя старонкі',
+'undeletecomment' => 'Камэнтар:',
+
+# Namespace form on various pages
+'namespace' => 'Прастора назваў:',
+'invert'    => 'Адваротны выбар',
+
+# Contributions
+'contributions' => 'Унёсак удзельніка/удзельніцы',
+'mycontris'     => 'Мой унёсак',
+'contribsub2'    => 'Для $1 ($2)',
+
+'sp-contributions-blocklog' => 'Журнал блякаваньняў',
+
+# What links here
+'whatlinkshere' => 'Адкуль спасылаюцца на старонку',
+'linklistsub'   => '(Сьпіс спасылак)',
+'linkshere'     => "Наступныя старонкі спасылаюцца на '''[[:$1]]''':",
+'nolinkshere'   => "Ніводная старонка не спасылаецца на '''[[:$1]]'''.",
+'isredirect'    => 'старонка-перанакіраваньне',
+'istemplate'    => 'уключэньне',
+
+# Block/unblock
+'blockip'             => 'Блякаваньне ўдзельніка ці ўдзельніцы',
+'blockiptext'         => 'Ужывайце форму ніжэй, каб заблякаваць доступ для запісу з пэўнага IP-адрасу ці імя ўдзельніка. Гэта трэба рабіць толькі прадухіленьня вандалізму і згодна з [[{{ns:project}}:Правілы|правіламі]]. Запоўніце ніжэй пэўную прычыну (напрыклад, пералічыце асобныя старонкі, на якіх былі парушэньні).',
+'ipaddress'           => 'IP-адрас',
+'ipadressorusername'  => 'IP-адрас альбо імя ўдзельніка/ўдзельніцы',
+'ipbexpiry'           => 'Тэрмін',
+'ipbreason'           => 'Прычына',
+'ipbanononly'         => 'Блякаваць толькі ананімаў',
+'ipbcreateaccount'    => 'Забараніць стварэньне рахункаў',
+'ipbother'            => 'Іншы тэрмін',
+'ipboptions'          => '2 гадзіны:2 hours,1 дзень:1 day,3 дня:3 days,1 тыдзень:1 week,2 тыдні:2 weeks,1 месяц:1 month,3 месяцы:3 months,6 месяцаў:6 months,1 год:1 year,назаўсёды:infinite',
+'ipbotheroption'      => 'іншы',
+'badipaddress'        => 'Некарэктны IP-адрас',
+'blockipsuccesssub'   => 'Блякаваньне пасьпяховае',
+'blockipsuccesstext'  => '[[Special:Contributions/$1|$1]] быў заблякаваны/была заблякаваная.
+<br />Глядзіце [[Special:Ipblocklist|сьпіс заблякаваных IP-адрасоў]] дзеля перагляду блякаваньняў.',
+'ipblocklist'         => 'Сьпіс заблякаваных IP-адрасоў і імёнаў удзельнікаў',
+'blocklistline'       => '$1, $2 заблякаваў $3 ($4)',
+'infiniteblock'       => 'назаўсёды',
+'anononlyblock'       => 'толькі ананімаў',
+'createaccountblock'  => 'стварэньне рахунку заблякаванае',
+'blocklink'           => 'заблякаваць',
+'contribslink'        => 'унёсак',
+'autoblocker'         => "Вы аўтаматычна заблякаваныя, таму што Ваш IP-адрас нядаўна ўжываўся «[[User:$1|$1]]». Прычына блякаваньня $1 наступная: «'''$2'''»",
+'blocklogpage'        => 'Журнал блякаваньняў',
+'blocklogentry'       => 'заблякаваны «[[$1]]» на тэрмін: $2 $3',
+'blocklogtext'        => 'Гэта журнал уліку блякаваньняў і разблякаваньняў удзельнікаў. Аўтаматычна заблякаваныя IP-адрасы не пазначаныя. Глядзіце [[Special:Ipblocklist|сьпіс заблякаваных IP-адрасоў]], каб пабачыць дзейныя ў гэты момант блякаваньні.',
+'ipb_already_blocked' => '«$1» ужо заблякаваны',
+'ip_range_invalid'    => 'Некарэктны дыяпазон IP-адрасоў.',
+
+# Move page
+'movepage'                => 'Перанесьці старонку',
+'movearticle'             => 'Перанесьці старонку',
+'newtitle'                => 'Новая назва',
+'move-watch'              => 'Назіраць за гэтай старонкай',
+'movepagebtn'             => 'Перанесьці старонку',
+'pagemovedtext'           => 'Старонка «[[$1]]» перанесеная ў «[[$2]]».',
+'articleexists'           => 'Старонка з такой назвай ужо існуе, альбо абраная Вамі назва недапушчальная.
+Калі ласка, абярыце іншую назву.',
+'movedto'                 => 'перанесеная ў',
+'movetalk'                => 'Перанесьці таксама старонку абмеркаваньня.',
+'talkpagemoved'           => 'Адпаведная старонка абмеркаваньня таксама перанесеная.',
+'talkpagenotmoved'        => 'Адпаведная старонка абмеркаваньня <strong>не</strong> перанесеная.',
+'1movedto2'               => '[[$1]] перанесеная ў [[$2]]',
+'1movedto2_redir'         => '[[$1]] перанесеная ў [[$2]] з выдаленьнем перанакіраваньня',
+'movereason'              => 'Прычына',
+'delete_and_move'         => 'Выдаліць і перанесьці',
+'delete_and_move_confirm' => 'Так, выдаліць старонку',
+
+# Export
+'export'        => 'Экспартаваць старонкі',
+'exportcuronly' => 'Экспартаваць толькі бягучую вэрсію, бяз поўнай гісторыі',
+
+# Namespace 8 related
+'allmessages'               => 'Сыстэмныя паведамленьні',
+'allmessagesname'           => 'Назва',
+'allmessagesdefault'        => 'Тэкст па змоўчаньні',
+'allmessagescurrent'        => 'Бягучы тэкст',
+'allmessagestext'           => 'Сьпіс усіх сыстэмных паведамленьняў, якія існуюць у прасторы назваў MediaWiki.',
+'allmessagesnotsupportedUI' => 'Ваша цяперашняя мова <b>$1</b> інтэрфэйсу не падтрымліваецца Special:AllMessages гэтага сайту.',
+'allmessagesnotsupportedDB' => "'''Special:AllMessages''' не падтрымліваецца, таму што адключанае '''\$wgUseDatabaseMessages'''.",
+'allmessagesfilter'         => 'Фільтар рэгулярных выразаў:',
+'allmessagesmodified'       => 'Паказаць толькі зьмененыя',
+
+# Thumbnails
+'thumbnail-more' => 'Павялічыць',
+'missingimage'   => '<b>Выява адсутнічае</b><br /><i>$1</i>',
+
+# Special:Import
+'import'       => 'Імпартаваць старонкі',
+'importfailed' => 'Немагчыма імпартаваць: $1',
+
+# Tooltip help for the actions
+'tooltip-minoredit' => 'Пазначыць гэтую зьмену як дробную',
+'tooltip-save'      => 'Захаваць Вашы зьмены',
+'tooltip-preview'   => 'Праглядзець Вашы зьмены. Калі ласка, выкарыстоўвайце гэтую магчымасьць перад тым, як захаваць старонку!',
+'tooltip-diff'      => 'Паказаць зробленыя Вамі зьмены ў тэксьце.',
+'tooltip-watch'     => 'Дадаць гэтую старонку ў Ваш сьпіс назіраньня',
+
+# Attribution
+'anonymous'        => 'Ананімныя ўдзельнікі і ўдзельніцы {{GRAMMAR:родны|{{SITENAME}}}}',
+'siteuser'         => 'Удзельнік/удзельніца {{GRAMMAR:родны|{{SITENAME}}}} $1',
+'lastmodifiedatby' => 'Гэтую старонку апошні раз рэдагаваў $3 $2, $1.', # $1 date, $2 time, $3 user
+'and'              => 'і',
+'others'           => 'іншыя',
+'creditspage'      => 'Падзякі',
+
+# Spam protection
+'spamprotectiontitle'    => 'Фільтар для абароны ад спаму',
+'subcategorycount'       => 'У гэтай катэгорыі ёсьць $1 {{PLURAL:$1|падкатэгорыя|падкатэгорыі|падкатэгорый}}.',
+'categoryarticlecount'   => 'У гэтай катэгорыі ёсьць $1 {{PLURAL:$1|артыкул|артыкулы|артыкулаў}}.',
+'category-media-count'   => 'У гэтай катэгорыі ёсьць $1 {{PLURAL:$1|файл|файлы|файлаў}}.',
+'listingcontinuesabbrev' => ' (працяг)',
+
+# Info page
+'infosubtitle'   => 'Інфармацыя пра старонку',
+'numedits'       => 'Колькасьць зьменаў (артыкула): $1',
+'numtalkedits'   => 'Колькасьць зьменаў (старонкі абмеркаваньня): $1',
+'numwatchers'    => 'Колькасьць назіральнікаў і назіральніц: $1',
+'numauthors'     => 'Колькасьць розных аўтараў і аўтарак (артыкула): $1',
+'numtalkauthors' => 'Колькасьць розных аўтараў і аўтарак (старонкі абмеркаваньня): $1',
+
+# Math options
+'mw_math_png'    => 'Заўсёды паказваць як PNG',
+'mw_math_simple' => 'HTML у простых выпадках, інакш PNG',
+'mw_math_html'   => 'HTML калі магчыма, інакш PNG',
+'mw_math_mathml' => 'MathML калі магчыма (экспэрымэнтальна)',
+
+# Image deletion
+'deletedrevision' => 'Выдаленая старая вэрсія $1.',
+
+# Browsing diffs
+'previousdiff' => '← Перайсьці да папярэдняй зьмены',
+'nextdiff'     => 'Перайсьці да наступнай зьмены →',
+
+'newimages' => 'Галерэя новых файлаў',
+'noimages'  => 'Выявы адсутнічаюць.',
+
+# EXIF tags
+'exif-imagewidth'       => 'Шырыня',
+'exif-imagelength'      => 'Вышыня',
+'exif-imagedescription' => 'Назва выявы',
+'exif-make'             => 'Вытворца фотаапарата',
+'exif-model'            => 'Мадэль фотаапарата',
+'exif-exifversion'      => 'Вэрсія Exif',
+'exif-lightsource'      => 'Крыніца сьвятла',
+'exif-flash'            => 'Успышка',
+'exif-gpslatitude'      => 'Шырата',
+'exif-gpslongitude'     => 'Даўгата',
+
+'exif-lightsource-0' => 'Невядомая',
+'exif-lightsource-4' => 'Успышка',
+
+# 'all' in various places, this might be different for inflected languages
+'recentchangesall' => 'усе',
+'namespacesall'    => 'усе',
+
+# E-mail address confirmation
+'confirmemail' => 'Пацьвердзіць адрас электроннай пошты',
+
+'unit-pixel' => 'пкс',
+
+'articletitles' => "Артыкулы, якія пачынаюцца з ''$1''",
+'hideresults'   => 'Схаваць вынікі',
+
+'loginlanguagelabel' => 'Мова: $1',
+
+# Table pager
+'table_pager_next'  => 'Наступная старонка',
+'table_pager_prev'  => 'Папярэдняя старонка',
+'table_pager_first' => 'Першая старонка',
+'table_pager_last'  => 'Апошняя старонка',
+
+# Auto-summaries
+'autosumm-blank'   => 'Зьмест старонкі выдалены цалкам',
+'autoredircomment' => 'Перанакіроўвае на [[$1]]', # This should be changed to the new naming convention, but existed beforehand
+'autosumm-new'     => 'Новая старонка: $1',
+
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesBg.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesBg.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesBg.php	(revision 1280)
@@ -0,0 +1,2329 @@
+<?php
+/** Bulgarian (Български)
+ *
+ * @addtogroup Language
+ */
+$namespaceNames = array(
+	NS_MEDIA            => 'Медия',
+	NS_SPECIAL          => 'Специални',
+	NS_MAIN             => '',
+	NS_TALK             => 'Беседа',
+	NS_USER             => 'Потребител',
+	NS_USER_TALK        => 'Потребител_беседа',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK     => '$1_беседа',
+	NS_IMAGE            => 'Картинка',
+	NS_IMAGE_TALK       => 'Картинка_беседа',
+	NS_MEDIAWIKI        => 'МедияУики',
+	NS_MEDIAWIKI_TALK   => 'МедияУики_беседа',
+	NS_TEMPLATE         => 'Шаблон',
+	NS_TEMPLATE_TALK    => 'Шаблон_беседа',
+	NS_HELP             => 'Помощ',
+	NS_HELP_TALK        => 'Помощ_беседа',
+	NS_CATEGORY         => 'Категория',
+	NS_CATEGORY_TALK    => 'Категория_беседа'
+);
+
+$skinNames = array(
+	'standard'     => 'Класика',
+	'nostalgia'    => 'Носталгия',
+	'cologneblue'  => 'Кьолнско синьо',
+	'smarty'       => 'Падингтън',
+	'montparnasse' => 'Монпарнас',
+	'davinci'      => 'ДаВинчи',
+	'mono'         => 'Моно',
+	'monobook'     => 'Монобук',
+	'myskin'       => 'Мой облик',
+	'chick'        => 'Пиленце'
+);
+
+$datePreferences = false;
+
+$bookstoreList = array(
+	'books.bg'   => 'http://www.books.bg/ISBN/$1',
+	'Пингвините' => 'http://www.pe-bg.com/?cid=3&search_q=$1&where=ISBN&x=0&y=0**',
+	'Бард'       => 'http://www.bard.bg/search/?q=$1'
+);
+
+$magicWords = array(
+#   ID                                 CASE  SYNONYMS
+	'redirect'               => array( 0, '#redirect', '#пренасочване', '#виж' ),
+	'notoc'                  => array( 0, '__NOTOC__', '__БЕЗСЪДЪРЖАНИЕ__' ),
+	'nogallery'              => array( 0, '__NOGALLERY__', '__БЕЗГАЛЕРИЯ__'),
+	'forcetoc'               => array( 0, '__FORCETOC__', '__СЪССЪДЪРЖАНИЕ__' ),
+	'toc'                    => array( 0, '__TOC__', '__СЪДЪРЖАНИЕ__'),
+	'noeditsection'          => array( 0, '__NOEDITSECTION__', '__БЕЗ_РЕДАКТИРАНЕ_НА_РАЗДЕЛИ__'),
+	'start'                  => array( 0, '__START__', '__НАЧАЛО__'),
+	'currentmonth'           => array( 1, 'CURRENTMONTH', 'ТЕКУЩМЕСЕЦ'),
+	'currentmonthname'       => array( 1, 'CURRENTMONTHNAME', 'ТЕКУЩМЕСЕЦИМЕ' ),
+	'currentmonthnamegen'    => array( 1, 'CURRENTMONTHNAMEGEN', 'ТЕКУЩМЕСЕЦИМЕРОД'),
+	'currentmonthabbrev'     => array( 1, 'CURRENTMONTHABBREV', 'ТЕКУЩМЕСЕЦСЪКР'),
+	'currentday'             => array( 1, 'CURRENTDAY', 'ТЕКУЩДЕН'),
+	'currentday2'            => array( 1, 'CURRENTDAY2', 'ТЕКУЩДЕН2'),
+	'currentdayname'         => array( 1, 'CURRENTDAYNAME', 'ТЕКУЩДЕНИМЕ'),
+	'currentyear'            => array( 1, 'CURRENTYEAR', 'ТЕКУЩАГОДИНА'),
+	'currenttime'            => array( 1, 'CURRENTTIME', 'ТЕКУЩОВРЕМЕ'),
+	'currenthour'            => array( 1, 'CURRENTHOUR', 'ТЕКУЩЧАС' ),
+	'localmonth'             => array( 1, 'LOCALMONTH'             ),
+	'localmonthname'         => array( 1, 'LOCALMONTHNAME'         ),
+	'localmonthnamegen'      => array( 1, 'LOCALMONTHNAMEGEN'      ),
+	'localmonthabbrev'       => array( 1, 'LOCALMONTHABBREV'       ),
+	'localday'               => array( 1, 'LOCALDAY'               ),
+	'localday2'              => array( 1, 'LOCALDAY2'              ),
+	'localdayname'           => array( 1, 'LOCALDAYNAME'           ),
+	'localyear'              => array( 1, 'LOCALYEAR'              ),
+	'localtime'              => array( 1, 'LOCALTIME'              ),
+	'localhour'              => array( 1, 'LOCALHOUR'              ),
+	'numberofpages'          => array( 1, 'NUMBEROFPAGES', 'БРОЙСТРАНИЦИ'),
+	'numberofarticles'       => array( 1, 'NUMBEROFARTICLES', 'БРОЙСТАТИИ'),
+	'numberoffiles'          => array( 1, 'NUMBEROFFILES', 'БРОЙФАЙЛОВЕ'),
+	'numberofusers'          => array( 1, 'NUMBEROFUSERS', 'БРОЙПОТРЕБИТЕЛИ'),
+	'pagename'               => array( 1, 'PAGENAME', 'СТРАНИЦА'),
+	'pagenamee'              => array( 1, 'PAGENAMEE', 'СТРАНИЦАИ'),
+	'namespace'              => array( 1, 'NAMESPACE', 'ИМЕННОПРОСТРАНСТВО'),
+	'namespacee'             => array( 1, 'NAMESPACEE', 'ИМЕННОПРОСТРАНСТВОИ'),
+	'talkspace'              => array( 1, 'TALKSPACE'              ),
+	'talkspacee'             => array( 1, 'TALKSPACEE'              ),
+	'subjectspace'           => array( 1, 'SUBJECTSPACE', 'ARTICLESPACE'),
+	'subjectspacee'          => array( 1, 'SUBJECTSPACEE', 'ARTICLESPACEE'),
+	'fullpagename'           => array( 1, 'FULLPAGENAME', 'ПЪЛНОИМЕ_СТРАНИЦА'),
+	'fullpagenamee'          => array( 1, 'FULLPAGENAMEE', 'ПЪЛНОИМЕ_СТРАНИЦАИ'),
+	'subpagename'            => array( 1, 'SUBPAGENAME', 'ИМЕ_ПОДСТРАНИЦА'),
+	'subpagenamee'           => array( 1, 'SUBPAGENAMEE', 'ИМЕ_ПОДСТРАНИЦАИ'),
+	'basepagename'           => array( 1, 'BASEPAGENAME'           ),
+	'basepagenamee'          => array( 1, 'BASEPAGENAMEE'          ),
+	'talkpagename'           => array( 1, 'TALKPAGENAME', 'ИМЕ_БЕСЕДА'),
+	'talkpagenamee'          => array( 1, 'TALKPAGENAMEE', 'ИМЕ_БЕСЕДАИ'),
+	'subjectpagename'        => array( 1, 'SUBJECTPAGENAME', 'ARTICLEPAGENAME'),
+	'subjectpagenamee'       => array( 1, 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE'),
+	'msg'                    => array( 0, 'MSG:', 'СЪОБЩ:'),
+	'subst'                  => array( 0, 'SUBST:', 'ЗАМЕСТ:'),
+	'msgnw'                  => array( 0, 'MSGNW:', 'СЪОБЩБУ:'),
+	'end'                    => array( 0, '__END__', '__КРАЙ__'),
+	'img_thumbnail'          => array( 1, 'thumbnail', 'thumb', 'мини'),
+	'img_manualthumb'        => array( 1, 'thumbnail=$1', 'thumb=$1', 'мини=$1'),
+	'img_right'              => array( 1, 'right', 'вдясно', 'дясно', 'д'),
+	'img_left'               => array( 1, 'left', 'вляво', 'ляво', 'л'),
+	'img_none'               => array( 1, 'none', 'н'),
+	'img_width'              => array( 1, '$1px', '$1пкс' , '$1п'),
+	'img_center'             => array( 1, 'center', 'centre', 'център', 'центр', 'ц' ),
+	'img_framed'             => array( 1, 'framed', 'enframed', 'frame', 'рамка', 'врамка' ),
+	'img_page'               => array( 1, 'page=$1', 'page $1'),
+	'img_baseline'           => array( 1, 'baseline'               ),
+	'img_sub'                => array( 1, 'sub'                    ),
+	'img_super'              => array( 1, 'super', 'sup'           ),
+	'img_top'                => array( 1, 'top'                    ),
+	'img_text-top'           => array( 1, 'text-top'               ),
+	'img_middle'             => array( 1, 'middle'                 ),
+	'img_bottom'             => array( 1, 'bottom'                 ),
+	'img_text-bottom'        => array( 1, 'text-bottom'            ),
+	'int'                    => array( 0, 'INT:', 'ВЪТР:'),
+	'sitename'               => array( 1, 'SITENAME', 'ИМЕНАСАЙТА'),
+	'ns'                     => array( 0, 'NS:', 'ИП:'                    ),
+	'localurl'               => array( 0, 'LOCALURL:', 'ЛОКАЛЕНАДРЕС:'),
+	'localurle'              => array( 0, 'LOCALURLE:', 'ЛОКАЛЕНАДРЕСИ:'),
+	'server'                 => array( 0, 'SERVER', 'СЪРВЪР'),
+	'servername'             => array( 0, 'SERVERNAME', 'ИМЕНАСЪРВЪРА'),
+	'scriptpath'             => array( 0, 'SCRIPTPATH', 'ПЪТДОСКРИПТА'),
+	'grammar'                => array( 0, 'GRAMMAR:', 'ГРАМАТИКА:'),
+	'notitleconvert'         => array( 0, '__NOTITLECONVERT__', '__NOTC__'),
+	'nocontentconvert'       => array( 0, '__NOCONTENTCONVERT__', '__NOCC__'),
+	'currentweek'            => array( 1, 'CURRENTWEEK', 'ТЕКУЩАСЕДМИЦА'),
+	'currentdow'             => array( 1, 'CURRENTDOW', 'ТЕКУЩ_ДЕН_ОТ_СЕДМИЦАТА'),
+	'localweek'              => array( 1, 'LOCALWEEK'              ),
+	'localdow'               => array( 1, 'LOCALDOW'               ),
+	'revisionid'             => array( 1, 'REVISIONID', 'ИД_НА_ВЕРСИЯТА'),
+	'revisionday'            => array( 1, 'REVISIONDAY', 'ДЕН__НА_ВЕРСИЯТА'),
+	'revisionday2'           => array( 1, 'REVISIONDAY2', 'ДЕН__НА_ВЕРСИЯТА2'),
+	'revisionmonth'          => array( 1, 'REVISIONMONTH', 'МЕСЕЦ__НА_ВЕРСИЯТА'),
+	'revisionyear'           => array( 1, 'REVISIONYEAR', 'ГОДИНА__НА_ВЕРСИЯТА'),
+	'revisiontimestamp'      => array( 1, 'REVISIONTIMESTAMP'      ),
+	'plural'                 => array( 0, 'PLURAL:', 'МН_ЧИСЛО:'),
+	'fullurl'                => array( 0, 'FULLURL:', 'ПЪЛЕН_АДРЕС:'),
+	'fullurle'               => array( 0, 'FULLURLE:', 'ПЪЛЕН_АДРЕСИ:'),
+	'lcfirst'                => array( 0, 'LCFIRST:', 'ПЪРВА_БУКВА_МАЛКА:'),
+	'ucfirst'                => array( 0, 'UCFIRST:', 'ПЪРВА_БУКВА_ГЛАВНА:'),
+	'lc'                     => array( 0, 'LC:', 'МАЛКИ_БУКВИ:'),
+	'uc'                     => array( 0, 'UC:', 'ГЛАВНИ_БУКВИ:'),
+	'raw'                    => array( 0, 'RAW:', 'НЕОБРАБ:'),
+	'displaytitle'           => array( 1, 'DISPLAYTITLE', 'ПОКАЗВ_ЗАГЛАВИЕ'),
+	'rawsuffix'              => array( 1, 'R'                      ),
+	'newsectionlink'         => array( 1, '__NEWSECTIONLINK__'),
+	'currentversion'         => array( 1, 'CURRENTVERSION'         ),
+	'urlencode'              => array( 0, 'URLENCODE:'             ),
+	'anchorencode'           => array( 0, 'ANCHORENCODE'           ),
+	'currenttimestamp'       => array( 1, 'CURRENTTIMESTAMP'       ),
+	'localtimestamp'         => array( 1, 'LOCALTIMESTAMP'         ),
+	'directionmark'          => array( 1, 'DIRECTIONMARK', 'DIRMARK' ),
+	'language'               => array( 0, '#LANGUAGE:'             ),
+	'contentlanguage'        => array( 1, 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+	'pagesinnamespace'       => array( 1, 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+	'numberofadmins'         => array( 1, 'NUMBEROFADMINS'         ),
+	'formatnum'              => array( 0, 'FORMATNUM'              ),
+	'padleft'                => array( 0, 'PADLEFT'                ),
+	'padright'               => array( 0, 'PADRIGHT'               ),
+	'special'                => array( 0, 'special',               ),
+	'defaultsort'            => array( 1, 'DEFAULTSORT:'           ),
+);
+
+/**
+ * Alternate names of special pages. All names are case-insensitive. The first
+ * listed alias will be used as the default. Aliases from the fallback
+ * localisation (usually English) will be included by default.
+ *
+ * This array may be altered at runtime using the LanguageGetSpecialPageAliases
+ * hook.
+ */
+$specialPageAliases = array(
+	'DoubleRedirects'           => array('Двойни_пренасочвания'),
+	'BrokenRedirects'           => array('Невалидни_пренасочвания'),
+	'Disambiguations'           => array('Пояснителни_страници'),
+	'Userlogin'                 => array('Регистриране_или_влизане'),
+	'Userlogout'                => array('Излизане'),
+	'Preferences'               => array('Настройки'),
+	'Watchlist'                 => array('Списък_за_наблюдение'),
+	'Recentchanges'             => array('Последни_промени'),
+	'Upload'                    => array('Качване'),
+	'Imagelist'                 => array('Списък_на_картинките'),
+	'Newimages'                 => array('Галерия_на_новите_файлове'),
+	'Listusers'                 => array('Списък_на_потребителите'),
+	'Statistics'                => array('Статистика'),
+	'Randompage'                => array('Случайна_статия'),
+	'Lonelypages'               => array('Страници-сираци'),
+	'Uncategorizedpages'        => array('Некатегоризирани_страници'),
+	'Uncategorizedcategories'   => array('Некатегоризирани_категории'),
+	'Uncategorizedimages'       => array('Некатегоризирани_картинки'),
+	'Unusedcategories'          => array('Неизползвани_категории'),
+	'Unusedimages'              => array('Неизползвани_картинки'),
+	'Wantedpages'               => array('Желани_страници'),
+	'Wantedcategories'          => array('Желани_категории'),
+	'Mostlinked'                => array('Най-препращани_страници'),
+	'Mostlinkedcategories'      => array('Най-препращани_категории'),
+	'Mostcategories'            => array('Страници_с_най-много_категории'),
+	'Mostimages'                => array('Най-препращани_картинки'),
+	'Mostrevisions'             => array('Страници_с_най-много_версии'),
+	'Fewestrevisions'           => array('Страници_с_най-малко_версии'),
+	'Shortpages'                => array('Кратки_страници'),
+	'Longpages'                 => array('Дълги_страници'),
+	'Newpages'                  => array('Нови_страници'),
+	'Ancientpages'              => array('Стари_статии'),
+	'Deadendpages'              => array('Задънени_страници'),
+	'Allpages'                  => array('Всички_страници'),
+	'Prefixindex'               => array('Азбучен_списък_на_представки') ,
+	'Ipblocklist'               => array('Списък_на_блокирани_IP-адреси_и_потребители'),
+	'Specialpages'              => array('Специални_страници'),
+	'Contributions'             => array('Приноси'),
+	'Emailuser'                 => array('Пращане_писмо_на_потребител'),
+	'Whatlinkshere'             => array('Какво_сочи_насам'),
+	'Recentchangeslinked'       => array('Свързани_промени'),
+	'Movepage'                  => array('Преместване_на_страница'),
+	'Booksources'               => array('Източници_на_книги'),
+	'Categories'                => array('Категории'),
+	'Export'                    => array('Изнасяне_на_страници'),
+	'Version'                   => array('Версия'),
+	'Allmessages'               => array('Системни_съобщения'),
+	'Log'                       => array('Дневници'),
+	'Blockip'                   => array('Блокиране_на_потребител'),
+	'Undelete'                  => array('Преглед_на_изтрити_страници'),
+	'Import'                    => array('Внасяне_на_страници'),
+	'Lockdb'                    => array('Заключване_на_базата_от_данни'),
+	'Unlockdb'                  => array('Отключване_на_базата_от_данни'),
+	'Userrights'                => array('Управление_на_потребителските_права'),
+	'MIMEsearch'                => array('MIME-търсене'),
+	'Unwatchedpages'            => array('Ненаблюдавани_страници'),
+	'Listredirects'             => array('Списък_на_пренасочванията'),
+	'Revisiondelete'            => array('Изтриване_на_версии'),
+	'Unusedtemplates'           => array('Неизползвани_шаблони'),
+	'Randomredirect'            => array('Случайно_пренасочване'),
+	'Mypage'                    => array('Моята_страница'),
+	'Mytalk'                    => array('Моята_беседа'),
+	'Mycontributions'           => array('Моите_приноси'),
+	'Listadmins'                => array('Списък_на_администраторите'),
+	'Popularpages'              => array('Известни_страници'),
+	'Search'                    => array('Търсене'),
+	'Resetpass'                 => array('Изтриване_на_парола'),
+	'Withoutinterwiki'          => array('Без_междууикита'),
+);
+
+$linkTrail = '/^([a-zабвгдежзийклмнопрстуфхцчшщъыьэюя]+)(.*)$/sDu';
+
+$separatorTransformTable = array(',' => "\xc2\xa0", '.' => ',' );
+
+$messages = array(
+# User preference toggles
+'tog-underline'               => 'Подчертаване на препратките:',
+'tog-highlightbroken'         => 'Показване на невалидните препратки <a href="#" class="new">така</a> (алтернативно: така<a href="#" class="internal">?</a>)',
+'tog-justify'                 => 'Двустранно подравняване на абзаците',
+'tog-hideminor'               => 'Скриване на малки редакции в последните промени',
+'tog-extendwatchlist'         => 'Разширяване на списъка, така че да показва всички промени',
+'tog-usenewrc'                => 'Подобряване на последните промени (Джаваскрипт)',
+'tog-numberheadings'          => 'Номериране на заглавията',
+'tog-showtoolbar'             => 'Помощна лента за редактиране (Джаваскрипт)',
+'tog-editondblclick'          => 'Редактиране при двойно щракване (Джаваскрипт)',
+'tog-editsection'             => 'Възможност за редактиране на раздел чрез препратка [редактиране]',
+'tog-editsectiononrightclick' => 'Възможност за редактиране на раздел при щракване с десния бутон върху заглавие на раздел (Джаваскрипт)',
+'tog-showtoc'                 => 'Показване на съдържание (за страници с повече от три раздела)',
+'tog-rememberpassword'        => 'Запомняне между сесиите',
+'tog-editwidth'               => 'Максимална ширина на кутията за редактиране',
+'tog-watchcreations'          => 'Добавяне на създадените от мен страници към списъка ми за наблюдение',
+'tog-watchdefault'            => 'Добавяне на редактираните от мен страници към списъка ми за наблюдение',
+'tog-watchmoves'              => 'Добавяне на преместените от мен страници към списъка ми за наблюдение',
+'tog-watchdeletion'           => 'Добавяне на изтритите от мен страници към списъка ми за наблюдение',
+'tog-minordefault'            => 'Отбелязване на всички промени като малки по подразбиране',
+'tog-previewontop'            => 'Показване на предварителния преглед преди текстовата кутия, а не след нея',
+'tog-previewonfirst'          => 'Показване на предварителен преглед при първа редакция',
+'tog-nocache'                 => 'Без складиране на страниците',
+'tog-enotifwatchlistpages'    => 'Уведомяване по е-пощата при промяна на страница от списъка ми за наблюдение',
+'tog-enotifusertalkpages'     => 'Уведомяване по е-пощата при промяна на беседата ми',
+'tog-enotifminoredits'        => 'Уведомяване по е-пощата даже при малки промени',
+'tog-enotifrevealaddr'        => 'Показване на електронния ми адрес в известяващите писма',
+'tog-shownumberswatching'     => 'Показване на броя на потребителите, наблюдаващи дадена страница',
+'tog-fancysig'                => 'Без превръщане на подписа в препратка към потребителската страница',
+'tog-externaleditor'          => 'Използване на външен редактор по подразбиране',
+'tog-externaldiff'            => 'Използване на външна програма за разлики по подразбиране',
+'tog-showjumplinks'           => 'Показване на препратки за достъпност от типа „Към…“',
+'tog-uselivepreview'          => 'Използване на бърз предварителен преглед (Джаваскрипт) (експериментално)',
+'tog-forceeditsummary'        => 'Предупреждаване при празно поле за резюме на редакцията',
+'tog-watchlisthideown'        => 'Скриване на моите редакции в списъка ми за наблюдение',
+'tog-watchlisthidebots'       => 'Скриване на редакциите на ботове в списъка ми за наблюдение',
+'tog-watchlisthideminor'      => 'Скриване на малките промени в списъка ми за наблюдение',
+'tog-nolangconversion'        => 'Без преобразувания при различни езикови варианти',
+'tog-ccmeonemails'            => 'Получаване на копия на писмата, които пращам на другите потребители',
+'tog-diffonly'                => 'Без показване на съдържанието на страницата при преглед на разлики',
+
+'underline-always'  => 'Винаги',
+'underline-never'   => 'Никога',
+'underline-default' => 'Според настройките на браузъра',
+
+'skinpreview' => '(Предварителен преглед)',
+
+# Dates
+'sunday'        => 'неделя',
+'monday'        => 'понеделник',
+'tuesday'       => 'вторник',
+'wednesday'     => 'сряда',
+'thursday'      => 'четвъртък',
+'friday'        => 'петък',
+'saturday'      => 'събота',
+'sun'           => 'нд',
+'mon'           => 'пн',
+'tue'           => 'вт',
+'wed'           => 'ср',
+'thu'           => 'чт',
+'fri'           => 'пт',
+'sat'           => 'сб',
+'january'       => 'януари',
+'february'      => 'февруари',
+'march'         => 'март',
+'april'         => 'април',
+'may_long'      => 'май',
+'june'          => 'юни',
+'july'          => 'юли',
+'august'        => 'август',
+'september'     => 'септември',
+'october'       => 'октомври',
+'november'      => 'ноември',
+'december'      => 'декември',
+'january-gen'   => 'януари',
+'february-gen'  => 'февруари',
+'march-gen'     => 'март',
+'april-gen'     => 'април',
+'may-gen'       => 'май',
+'june-gen'      => 'юни',
+'july-gen'      => 'юли',
+'august-gen'    => 'август',
+'september-gen' => 'септември',
+'october-gen'   => 'октомври',
+'november-gen'  => 'ноември',
+'december-gen'  => 'декември',
+'jan'           => 'яну',
+'feb'           => 'фев',
+'mar'           => 'мар',
+'apr'           => 'апр',
+'may'           => 'май',
+'jun'           => 'юни',
+'jul'           => 'юли',
+'aug'           => 'авг',
+'sep'           => 'сеп',
+'oct'           => 'окт',
+'nov'           => 'ное',
+'dec'           => 'дек',
+
+# Bits of text used by many pages
+'categories'            => 'Категории',
+'pagecategories'        => '{{PLURAL:$1|Категория|Категории}}',
+'category_header'       => 'Страници в категория „$1“',
+'subcategories'         => 'Подкатегории',
+'category-media-header' => 'Файлове в категория "$1"',
+
+'mainpagetext'      => 'Уикито беше успешно инсталирано.',
+'mainpagedocfooter' => 'Разгледайте [http://meta.wikimedia.org/wiki/Help:Contents ръководството] за подробна информация относно използването на софтуера.
+
+== Първи стъпки ==
+
+* [http://www.mediawiki.org/wiki/Help:Configuration_settings Конфигурационни настройки]
+* [http://www.mediawiki.org/wiki/Help:FAQ ЧЗВ за МедияУики]
+* [http://mail.wikimedia.org/mailman/listinfo/mediawiki-announce Пощенски списък относно нови версии на МедияУики]',
+
+'about'          => 'За {{SITENAME}}',
+'article'        => 'Страница',
+'newwindow'      => '(отваря се в нов прозорец)',
+'cancel'         => 'Отказ',
+'qbfind'         => 'Търсене',
+'qbbrowse'       => 'Избор',
+'qbedit'         => 'Редактиране',
+'qbpageoptions'  => 'Настройки за страницата',
+'qbpageinfo'     => 'Информация за страницата',
+'qbmyoptions'    => 'Моите настройки',
+'qbspecialpages' => 'Специални страници',
+'moredotdotdot'  => 'Още…',
+'mypage'         => 'Моята страница',
+'mytalk'         => 'Моята беседа',
+'anontalk'       => 'Беседа за адреса',
+'navigation'     => 'Навигация',
+
+# Metadata in edit box
+'metadata_help' => 'Метаданни:',
+
+'errorpagetitle'    => 'Грешка',
+'returnto'          => 'Обратно към $1.',
+'tagline'           => 'от {{SITENAME}}',
+'help'              => 'Помощ',
+'search'            => 'Търсене',
+'searchbutton'      => 'Търсене',
+'go'                => 'Отваряне',
+'searcharticle'     => 'Отваряне',
+'history'           => 'История',
+'history_short'     => 'История',
+'updatedmarker'     => 'има промяна (от последното ви влизане)',
+'info_short'        => 'Информация',
+'printableversion'  => 'Версия за печат',
+'permalink'         => 'Постоянна препратка',
+'print'             => 'Печат',
+'edit'              => 'Редактиране',
+'editthispage'      => 'Редактиране',
+'delete'            => 'Изтриване',
+'deletethispage'    => 'Изтриване',
+'undelete_short'    => 'Възстановяване на {{PLURAL:$1|една редакция|$1 редакции}}',
+'protect'           => 'Защита',
+'protect_change'    => 'смяна на защитата',
+'protectthispage'   => 'Защита',
+'unprotect'         => 'Сваляне на защитата',
+'unprotectthispage' => 'Сваляне на защитата',
+'newpage'           => 'Нова страница',
+'talkpage'          => 'Дискусионна страница',
+'talkpagelinktext'  => 'Беседа',
+'specialpage'       => 'Специална страница',
+'personaltools'     => 'Лични инструменти',
+'postcomment'       => 'Оставяне на съобщение',
+'articlepage'       => 'Преглед на страница',
+'talk'              => 'Беседа',
+'views'             => 'Прегледи',
+'toolbox'           => 'Инструменти',
+'userpage'          => 'Потребителска страница',
+'projectpage'       => 'Основна страница',
+'imagepage'         => 'Преглед на файл',
+'mediawikipage'     => 'Показване на страницата със съобщенията',
+'templatepage'      => 'Преглед на страницата със шаблона',
+'viewhelppage'      => 'Получете справка',
+'categorypage'      => 'Преглеждане на страницата с категориите',
+'viewtalkpage'      => 'Преглед на беседа',
+'otherlanguages'    => 'На други езици',
+'redirectedfrom'    => '(пренасочване от $1)',
+'redirectpagesub'   => 'Пренасочваща страница',
+'lastmodifiedat'    => 'Последна промяна на страницата: $2, $1.', # $1 date, $2 time
+'viewcount'         => 'Страницата е била преглеждана {{plural:$1|един път|$1 пъти}}.',
+'protectedpage'     => 'Защитена страница',
+'jumpto'            => 'Направо към:',
+'jumptonavigation'  => 'навигация',
+'jumptosearch'      => 'търсене',
+
+# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
+'aboutsite'         => 'За {{SITENAME}}',
+'aboutpage'         => '{{ns:project}}:За {{SITENAME}}',
+'bugreports'        => 'Съобщения за грешки',
+'bugreportspage'    => '{{ns:project}}:Съобщения за грешки',
+'copyright'         => 'Съдържанието е достъпно при условията на $1.',
+'copyrightpagename' => 'Авторски права в {{SITENAME}}',
+'copyrightpage'     => '{{ns:project}}:Авторски права',
+'currentevents'     => 'Текущи събития',
+'currentevents-url' => 'Текущи събития',
+'disclaimers'       => 'Условия за ползване',
+'disclaimerpage'    => '{{ns:project}}:Условия за ползване',
+'edithelp'          => 'Помощ при редактиране',
+'edithelppage'      => '{{ns:help}}:Как се редактират страници',
+'faq'               => 'ЧЗВ',
+'faqpage'           => '{{ns:project}}:ЧЗВ',
+'helppage'          => '{{ns:help}}:Съдържание',
+'mainpage'          => 'Начална страница',
+'policy-url'        => '{{ns:project}}:Политика',
+'portal'            => 'Портал за общността',
+'portal-url'        => '{{ns:project}}:Портал',
+'privacy'           => 'Защита на личните данни',
+'privacypage'       => '{{ns:project}}:Защита на личните данни',
+'sitesupport'       => 'Дарения',
+'sitesupport-url'   => '{{ns:project}}:Подкрепа',
+
+'badaccess'        => 'Грешка при достъп',
+'badaccess-group0' => 'Нямате права да извършите исканото действие',
+'badaccess-group1' => 'Исканото действие могат да изпълнят само потребители от групата $1.',
+'badaccess-group2' => 'Исканото действие могат да изпълнят само потребители от групите $1.',
+'badaccess-groups' => 'Исканото действие могат да изпълнят само потребители от групите $1.',
+
+'versionrequired'     => 'Изисква се версия $1 на МедияУики',
+'versionrequiredtext' => 'За да използвате тази страница, е необходима версия $1 на МедияУики. Вижте [[{{ns:special}}:Version]].',
+
+'ok'                  => 'Добре',
+'pagetitle'           => '$1 — {{SITENAME}}',
+'retrievedfrom'       => 'Взето от „$1“.',
+'youhavenewmessages'  => 'Имате $1 ($2).',
+'newmessageslink'     => 'нови съобщения',
+'newmessagesdifflink' => 'разлика с предишната версия',
+'editsection'         => 'редактиране',
+'editold'             => 'редактиране',
+'editsectionhint'     => 'Редактиране на раздел: $1',
+'toc'                 => 'Съдържание',
+'showtoc'             => 'показване',
+'hidetoc'             => 'скриване',
+'thisisdeleted'       => 'Преглед или възстановяване на $1?',
+'viewdeleted'         => 'Преглед на $1?',
+'restorelink'         => '{{PLURAL:$1|една изтрита редакция|$1 изтрити редакции}}',
+'feedlinks'           => 'Във вида:',
+'feed-invalid'        => 'Невалиден формат на информацията',
+
+# Short words for each namespace, by default used in the 'article' tab in monobook
+'nstab-main'      => 'Страница',
+'nstab-user'      => 'Потребител',
+'nstab-media'     => 'Медия',
+'nstab-special'   => 'Специална страница',
+'nstab-project'   => 'Проект',
+'nstab-image'     => 'Файл',
+'nstab-mediawiki' => 'Съобщение',
+'nstab-template'  => 'Шаблон',
+'nstab-help'      => 'Помощ',
+'nstab-category'  => 'Категория',
+
+# Main script and global functions
+'nosuchaction'      => 'Няма такова действие',
+'nosuchactiontext'  => 'Действието, указано от мрежовия адрес, не се разпознава от системата.',
+'nosuchspecialpage' => 'Няма такава специална страница',
+'nospecialpagetext' => 'Отправихте заявка за невалидна [[{{ns:special}}:Specialpages|специална страница]].',
+
+# General errors
+'error'                => 'Грешка',
+'databaseerror'        => 'Грешка при работа с базата от данни',
+'dberrortext'          => 'Възникна синтактична грешка при заявка към базата от данни.
+Последната заявка към базата от данни беше:
+<blockquote><code>$1</code></blockquote>
+при функцията „<code>$2</code>“.
+MySQL дава грешка „<code>$3: $4</code>“.',
+'dberrortextcl'        => 'Възникна синтактична грешка при заявка към базата от данни.
+Последната заявка беше:
+„$1“
+при функцията „$2“.
+MySQL дава грешка „$3: $4“.',
+'noconnect'            => '<p>В момента има технически трудности и не може да се осъществи връзка с базата от данни.</p>
+<p>$1</p>
+<p>Моля, опитайте отново по-късно. Извиняваме се за неудобството.</p>',
+'nodb'                 => 'Неуспех при избирането на база от данни $1',
+'cachederror'          => 'Показано е складирано копие на желаната страница, което евентуално може да е остаряло.',
+'laggedslavemode'      => 'Внимание: Страницата може да не съдържа последните обновявания.',
+'readonly'             => 'Базата от данни е затворена за промени',
+'enterlockreason'      => 'Посочете причина за затварянето, като дадете и приблизителна оценка кога базата от данни ще бъде отново отворена',
+'readonlytext'         => 'Базата от данни е временно затворена за промени — вероятно за рутинна поддръжка, след която ще бъде отново на разположение.
+Администраторът, който я е затворил, дава следното обяснение:
+$1',
+'missingarticle'       => 'Текстът на страницата „$1“ не беше намерен в базата от данни.
+
+Това обикновено е причинено от последване на остаряла разлика или препратка от историята към изтрита страница.
+
+Ако не това е причината, е възможно да сте открили грешка в системата.
+Моля, съобщете за това на администратор, като включите и името на страницата.',
+'readonly_lag'         => 'Базата от данни беше автоматично заключена, докато подчинените сървъри успеят да се съгласуват с основния сървър.',
+'internalerror'        => 'Вътрешна грешка',
+'filecopyerror'        => 'Файлът „$1“ не можа да бъде копиран като „$2“.',
+'filerenameerror'      => 'Файлът „$1“ не можа да бъде преименуван на „$2“.',
+'filedeleteerror'      => 'Файлът „$1“ не можа да бъде изтрит.',
+'filenotfound'         => 'Файлът „$1“ не беше намерен.',
+'unexpected'           => 'Неочаквана стойност: „$1“=„$2“.',
+'formerror'            => 'Възникна грешка при изпращане на формуляра',
+'badarticleerror'      => 'Действието не може да се изпълни върху страницата.',
+'cannotdelete'         => 'Указаната страница или файл не можа да бъде изтрит(а). Възможно е вече да е изтрит(а) от някой друг.',
+'badtitle'             => 'Невалидно заглавие',
+'badtitletext'         => 'Желаното заглавие на страница е невалидно, празно или неправилна препратка към друго уики.',
+'perfdisabled'         => 'Съжаляваме! Това свойство е временно изключено, защото забавя базата от данни дотам, че никой не може да използва уикито.',
+'perfdisabledsub'      => 'Съхранен екземпляр от $1:', # obsolete?
+'perfcached'           => 'Следните данни са извлечени от склада и затова може да не отговарят на текущото състояние:',
+'perfcachedts'         => 'Данните са складирани и обновени за последно на $1.',
+'querypage-no-updates' => 'Обновяването на данните за тази страница е изключено. Данните за сега няма да бъдат обновявани.',
+'wrong_wfQuery_params' => 'Невалидни аргументи за wfQuery()<br />
+Функция: $1<br />
+Заявка: $2',
+'viewsource'           => 'Защитена страница',
+'viewsourcefor'        => 'за $1',
+'protectedpagetext'    => 'Тази страница е заключена за редактиране.',
+'viewsourcetext'       => 'Можете да разгледате и да копирате кодa на страницата:',
+'protectedinterface'   => 'Тази страница съдържа текст, нужен за работата на системата. Тя е защитена против редактиране, за да се предотвратят възможни злоупотреби.',
+'editinginterface'     => "'''Внимание:''' Редактирате страница, която се използва за интерфейса на софтуера. Промяната й ще повлияе на външния вид на уикито.",
+'sqlhidden'            => '(Заявка на SQL — скрита)',
+'cascadeprotected'     => 'Тази страница е защитена против редактиране, защото е включена в следните страници, които от своя страна имат каскадна защита:',
+
+# Login and logout pages
+'logouttitle'                => 'Излизане на потребител',
+'logouttext'                 => '<strong>Излязохте от системата.</strong>
+
+Можете да продължите да използвате {{SITENAME}} анонимно или да влезете отново като друг потребител. Обърнете внимание, че някои страници все още ще се показват така, сякаш сте влезли, докато не изтриете кеш-паметта на браузъра.',
+'welcomecreation'            => '== Добре дошли, $1! ==
+
+Вашата сметка беше успешно открита. Сега можете да промените настройките на {{SITENAME}} по ваш вкус.',
+'loginpagetitle'             => 'Влизане в системата',
+'yourname'                   => 'Потребителско име',
+'yourpassword'               => 'Парола',
+'yourpasswordagain'          => 'Въведете повторно парола',
+'remembermypassword'         => 'Запомняне на паролата',
+'yourdomainname'             => 'Домейн',
+'externaldberror'            => 'Или е станала грешка в базата от данни при външното удостоверяване, или не ви е позволено да обновявате външната си сметка.',
+'loginproblem'               => '<strong>Имаше проблем с влизането ви.</strong><br />Опитайте отново!',
+'alreadyloggedin'            => '<strong>$1, вече сте влезли в системата!</strong>',
+'login'                      => 'Влизане',
+'loginprompt'                => "За влизане в {{SITENAME}} е необходимо да въведете потребителското си име и парола и да натиснете бутона '''Влизане''', като за да бъде това успешно, бисквитките (cookies) трябва да са разрешени в браузъра ви.
+
+Ако все още не сте регистриран (нямате открита сметка), лесно можете да сторите това, като просто въведете желаните от вас потребителско име и парола (двукратно) и щракнете върху '''Регистриране'''.",
+'userlogin'                  => 'Регистриране или влизане',
+'logout'                     => 'Излизане',
+'userlogout'                 => 'Излизане',
+'notloggedin'                => 'Не сте влезли',
+'nologin'                    => 'Нямате потребителско име? $1.',
+'nologinlink'                => 'Създаване на сметка',
+'createaccount'              => 'Регистриране',
+'gotaccount'                 => 'Имате ли вече сметка? $1.',
+'gotaccountlink'             => 'Влизане',
+'createaccountmail'          => 'с писмо по електронната поща',
+'badretype'                  => 'Въведените пароли не съвпадат.',
+'userexists'                 => 'Въведеното потребителско име вече се използва. Моля, изберете друго име.',
+'youremail'                  => 'Е-поща *:',
+'username'                   => 'Потребителско име:',
+'uid'                        => 'Потребителски номер:',
+'yourrealname'               => 'Истинско име *:',
+'yourlanguage'               => 'Език:',
+'yourvariant'                => 'Вариант',
+'yournick'                   => 'Псевдоним (за подписи чрез ~~~~):',
+'badsig'                     => 'Избраният подпис не е валиден. Проверете HTML-етикетите!',
+'email'                      => 'Е-поща',
+'prefs-help-email-enotif'    => 'Този адрес се използва и за да бъдете известени за промяна на страници, ако сте избрали тази възможност.',
+'prefs-help-realname'        => '* <strong>Истинско име</strong> <em>(незадължително)</em>: Ако го посочите, на него ще бъдат приписани вашите приноси.',
+'loginerror'                 => 'Грешка при влизане',
+'prefs-help-email'           => '* <strong>Електронна поща</strong> <em>(незадължително)</em>: Позволява на хората да се свържат с вас, без да се налага да им съобщавате адреса си, а също може да се използва, за да ви се изпрати нова парола, ако случайно забравите сегашната си.',
+'nocookiesnew'               => 'Потребителската сметка беше създадена, но все още не сте влезли. {{SITENAME}} използва бисквитки при влизане на потребителите. Моля, разрешете бисквитките във вашия браузър, тъй като те са забранени, и след това влезте с потребителското си име и парола.',
+'nocookieslogin'             => '{{SITENAME}} използва бисквитки (cookies) за запис на влизанията. Моля, разрешете бисквитките във вашия браузър, тъй като те са забранени, и опитайте отново.',
+'noname'                     => 'Не указахте валидно потребителско име.',
+'loginsuccesstitle'          => 'Успешно влизане',
+'loginsuccess'               => 'Влязохте в {{SITENAME}} като „$1“.',
+'nosuchuser'                 => 'Няма потребител с името „$1“.
+Проверете изписването или се регистрирайте, използвайки долния формуляр.',
+'nosuchusershort'            => 'Няма потребител с името „$1“. Проверете изписването.',
+'nouserspecified'            => 'Трябва да посочите име на потребител.',
+'wrongpassword'              => 'Въведената парола е невалидна (или липсва). Моля, опитайте отново.',
+'wrongpasswordempty'         => 'Въведената парола е празна. Моля, опитайте отново.',
+'mailmypassword'             => 'Изпращане на нова парола',
+'passwordremindertitle'      => 'Напомняне за парола от {{SITENAME}}',
+'passwordremindertext'       => 'Някой (най-вероятно вие, от IP-адрес $1) помоли да ви изпратим нова парола за влизане в {{SITENAME}} ($4).
+Паролата за потребителя „$2“ е „$3“.
+Сега би трябвало да влезете в системата и да смените паролата си.
+
+Ако заявката е направена от друг или пък сте си спомнили паролата и не искате да я променяте, можете да пренебрегнете това съобщение и да продължите да използвате старата си парола.',
+'noemail'                    => 'Няма записана електронна поща за потребителя „$1“.',
+'passwordsent'               => 'Нова парола беше изпратена на електронната поща на „$1“.
+Моля, влезте отново, след като я получите.',
+'blocked-mailpassword'       => 'Редактирането от вашия IP-адрес е забранено, затова не ви е позволено да използвате възможността за възстановяване на загубена парола.',
+'eauthentsent'               => 'Писмото за потвърждение е изпратено на посочения адрес. В него са описани действията, които трябва да се извършат, за да потвърдите, че този адрес за електронна поща действително е ваш.',
+'throttled-mailpassword'     => 'Функцията за напомняне на паролата е използвана през последните $1 часа.
+За предотвратяване на злоупотреби е разрешено да се изпраща не повече от едно напомняне в рамките на $1 часа.',
+'mailerror'                  => 'Грешка при изпращане на писмо: $1',
+'acct_creation_throttle_hit' => 'Съжаляваме, вече създали сте $1 сметки и нямате право на повече.',
+'emailauthenticated'         => 'Адресът на електронната ви поща беше потвърден на $1.',
+'emailnotauthenticated'      => 'Адресът на електронната ви поща <strong>не е потвърден</strong>. Няма да получавате писма за никое от следните възможности.',
+'noemailprefs'               => '<strong>Не е указан адрес за електронна поща</strong>, функциите няма да работят.',
+'emailconfirmlink'           => 'Потвърждаване на адреса за електронна поща',
+'invalidemailaddress'        => 'Въведеният адрес не може да бъде приет, тъй като не съответства на формата на адрес за електронна поща. Моля, въведете коректен адрес или оставете полето празно.',
+'accountcreated'             => 'Потребителската сметка беше създадена',
+'accountcreatedtext'         => 'Потребителската сметка за $1 беше създадена.',
+
+# Password reset dialog
+'resetpass'               => 'Смяна на паролата',
+'resetpass_announce'      => 'Влязохте с временен код, получен по електронната поща. Сега е нужно да си изберете нова парола:',
+'resetpass_text'          => '<!-- Тук добавете текст -->',
+'resetpass_header'        => 'Смяна на паролата',
+'resetpass_submit'        => 'Избиране на парола и влизане',
+'resetpass_success'       => 'Вашата парола беше успешно сменена! Сега може да влезете.',
+'resetpass_bad_temporary' => 'Невалидна временна парола. Възможно е вече да сте променили паролата си или пък да сте поискали нова временна парола.',
+'resetpass_forbidden'     => 'На това уики не е разрешена смяната на парола',
+'resetpass_missing'       => 'Липсват формулярни данни.',
+
+# Edit page toolbar
+'bold_sample'     => 'Получер текст',
+'bold_tip'        => 'Получер (удебелен) текст',
+'italic_sample'   => 'Курсивен текст',
+'italic_tip'      => 'Курсивен (наклонен) текст',
+'link_sample'     => 'Име на препратка',
+'link_tip'        => 'Вътрешна препратка',
+'extlink_sample'  => 'http://www.primer.com Име на препратката',
+'extlink_tip'     => 'Външна препратка (не забравяйте http:// отпред)',
+'headline_sample' => 'Заглавен текст',
+'headline_tip'    => 'Заглавие',
+'math_sample'     => 'Тук въведете формулата',
+'math_tip'        => 'Математическа формула (LaTeX)',
+'nowiki_sample'   => 'Тук въведете текст',
+'nowiki_tip'      => 'Пренебрегване на форматиращите команди',
+'image_sample'    => 'Пример.jpg',
+'image_tip'       => 'Вмъкване на картинка',
+'media_sample'    => 'Пример.ogg',
+'media_tip'       => 'Препратка към файл',
+'sig_tip'         => 'Вашият подпис заедно с времева отметка',
+'hr_tip'          => 'Хоризонтална линия (използвайте пестеливо)',
+
+# Edit pages
+'summary'                   => 'Резюме',
+'subject'                   => 'Тема/заглавие',
+'minoredit'                 => 'Това е малка промяна.',
+'watchthis'                 => 'Наблюдаване на страницата',
+'savearticle'               => 'Съхранение',
+'preview'                   => 'Предварителен преглед',
+'showpreview'               => 'Предварителен преглед',
+'showlivepreview'           => 'Бърз предварителен преглед',
+'showdiff'                  => 'Показване на промените',
+'anoneditwarning'           => "'''Внимание:''' Не сте влезли в системата. В историята на страницата ще бъде записан вашият IP-адрес.",
+'missingsummary'            => "'''Напомняне:''' Не сте въвели кратко описание на промените. При повторно натискане на бутона „Съхранение“, редакцията ви ще бъде съхранена без резюме.",
+'missingcommenttext'        => 'Моля, въведете по-долу вашето съобщение.',
+'missingcommentheader'      => "'''Напомняне:''' Не сте въвели заглавие на коментара. При повторно натискане на бутона „Съхранение“, редакцията ви ще бъде записана без такова.",
+'summary-preview'           => 'Предварителен преглед на резюмето',
+'subject-preview'           => 'Предварителен преглед на заглавието',
+'blockedtitle'              => 'Потребителят е блокиран',
+'blockedtext'               => "<big>'''Вашето потребителско име (или IP-адрес) е блокирано.'''</big>
+
+Блокирането е извършено от $1. Посочената причина е: ''$2''
+
+Можете да се свържете с $1 или с някой от останалите [[{{MediaWiki:grouppage-sysop}}|администратори]], за да обсъдите това.
+
+Можете да използвате услугата „Пращане писмо на потребителя“ само ако сте посочили валидна електронна поща в [[{{ns:special}}:Preferences|настройките]] си.
+
+Вашият IP-адрес е $3, а номерът на блока е $5. Моля, вмъквайте едно от двете или и двете във всяко питане, което правите.",
+'blockedoriginalsource'     => "По-долу е показано съдържанието на '''$1''':",
+'blockededitsource'         => "По долу е показан текстът на '''вашите редакции''' на '''$1''':",
+'whitelistedittitle'        => 'Необходимо е да влезете, за да може да редактирате',
+'whitelistedittext'         => 'Необходимо е да $1, за да може да редактирате страници.',
+'whitelistreadtitle'        => 'Необходимо е да влезете, за да може да четете страници',
+'whitelistreadtext'         => 'Необходимо е да [[{{ns:special}}:Userlogin|влезете]], за да може да четете страници.',
+'whitelistacctitle'         => 'Не ви е позволено да създавате сметка',
+'whitelistacctext'          => 'За да ви бъде позволено създаването на сметки, трябва да [[{{ns:special}}:Userlogin|влезете]] и да имате подходящото разрешение.',
+'confirmedittitle'          => 'Необходимо е потвърждение на адреса ви за електронна поща',
+'confirmedittext'           => 'Необходимо е да потвърдите електронната си поща, преди да редактирате страници. Моля, въведете и потвърдете адреса си на [[{{ns:special}}:Preferences|страницата с настройките]].',
+'nosuchsectiontitle'        => 'Няма такъв раздел',
+'nosuchsectiontext'         => 'Опитахте да редактирате несъществуващия раздел $1. Поради тази причина е невъзможно редакцията ви да бъде съхранена.',
+'loginreqtitle'             => 'Изисква се влизане',
+'loginreqlink'              => 'влизане',
+'loginreqpagetext'          => 'Необходимо е да $1, за да може да разглеждате други страници.',
+'accmailtitle'              => 'Паролата беше изпратена.',
+'accmailtext'               => 'Паролата за „$1“ беше изпратена на $2.',
+'newarticle'                => '(нова)',
+'newarticletext'            => 'Последвахте препратка към страница, която все още не съществува.
+За да я създадете, просто започнете да пишете в долната текстова кутия
+(вижте [[{{MediaWiki:helppage}}|помощната страница]] за повече информация).',
+'anontalkpagetext'          => "----
+''Това е дискусионната страница на анонимен потребител, който  все още няма сметка или не я използва, затова се налага да използваме IP-адрес, за да го/я идентифицираме. Такъв адрес може да се споделя от няколко потребители.''
+
+''Ако сте анонимен потребител и мислите, че тези неуместни коментари са отправени към вас, моля, [[{{ns:special}}:Userlogin|регистрирайте се или влезте в системата]], за да избегнете евентуално бъдещо объркване с други анонимни потребители.''",
+'noarticletext'             => "(Тази страница все още не съществува. Можете да я създадете, като щракнете на '''Редактиране'''.)",
+'clearyourcache'            => "'''Бележка:''' След съхранението е необходимо да изтриете кеша на браузъра, за да видите промените:
+'''Mozilla / Firefox / Safari:''' натиснете бутона ''Shift'' и щракнете върху ''Презареждане'' (''Reload''), или изберете клавишната комбинация ''Ctrl-Shift-R'' (''Cmd-Shift-R'' за Apple Mac);
+'''IE:''' натиснете ''Ctrl'' и щракнете върху ''Refresh'', или клавишната комбинация ''CTRL-F5'';
+'''Konqueror:''' щракнете върху ''Презареждане'' или натиснете ''F5'';
+'''Opera:''' вероятно е необходимо да изчистите кеша през менюто ''Tools&rarr;Preferences''.",
+'usercssjsyoucanpreview'    => '<strong>Съвет:</strong> Използвайте бутона „Предварителен преглед“, за да изпробвате новия код на CSS/Джаваскрипт преди съхранението.',
+'usercsspreview'            => "'''Не забравяйте, че това е само предварителен преглед на кода на CSS. Страницата все още не е съхранена!'''",
+'userjspreview'             => "'''Не забравяйте, че това е само изпробване/предварителен преглед на кода на Джаваскрипт. Страницата все още не е съхранена!'''",
+'userinvalidcssjstitle'     => "'''Внимание:''' Не е намерена тема „$1“. Не забравяйте, че названието на потребителските ви страници за CSS и Джаваскрипт трябва да се състои от малки букви, например: „Потребител:Иван/monobook.css“ (а не „Потребител:Иван/Monobook.css“).",
+'updated'                   => '(обновена)',
+'note'                      => '<strong>Забележка:</strong>',
+'previewnote'               => 'Не забравяйте, че това е само предварителен преглед и страницата все още не е съхранена!',
+'previewconflict'           => 'Този предварителен преглед отразява текста в горната текстова кутия така, както би се показал, ако съхраните.',
+'session_fail_preview'      => '<strong>За съжаление редакцията ви не успя да бъде обработена, поради загуба на данните за текущата сесия. Моля, опитайте отново. Ако все още не работи, опитайте да излезете и да влезете наново.</strong>',
+'session_fail_preview_html' => "<strong>За съжаление редакцията ви не беше записана поради изтичането на сесията ви.</strong>
+
+''Тъй като уикито приема обикновен HTML, предварителният преглед е скрит като предпазна мярка срещу атаки чрез Джаваскрипт.''
+
+<strong>Опитайте отново. Ако все още не сработва, пробвайте да излезете и влезете отново.</strong>",
+'importing'                 => 'Внасяне на $1',
+'editing'                   => 'Редактиране на „$1“',
+'editinguser'               => 'Редактиране на „$1“',
+'editingsection'            => 'Редактиране на „$1“ (раздел)',
+'editingcomment'            => 'Редактиране на „$1“ (нов раздел)',
+'editconflict'              => 'Различна редакция: $1',
+'explainconflict'           => 'Някой друг вече е променил тази страница, откакто започнахте да я редактирате.
+Горната текстова кутия съдържа текущия текст на страницата без вашите промени, които са показани в долната кутия. За да бъдат и те съхранени, е необходимо ръчно да ги преместите в горното поле, тъй като <strong>единствено</strong> текстът в него ще бъде съхранен при натискането на бутона „Съхранение“.<br />',
+'yourtext'                  => 'Вашият текст',
+'storedversion'             => 'Съхранена версия',
+'nonunicodebrowser'         => '<strong>ВНИМАНИЕ: Браузърът ви не поддържа Уникод. За да можете спокойно да редактирате страници, всички символи, невключени в ASCII-таблицата, ще бъдат заменени с шестнадесетични кодове.</strong>',
+'editingold'                => '<strong>ВНИМАНИЕ: Редактирате остаряла версия на страницата.
+Ако съхраните, всякакви промени, направени след тази версия, ще бъдат изгубени.</strong>',
+'yourdiff'                  => 'Разлики',
+'copyrightwarning'          => 'Моля, обърнете внимание на това, че всички приноси към {{SITENAME}} се публикуват при условията на $2 (за подробности вижте $1).
+Ако не сте съгласни вашата писмена работа да бъде променяна и разпространявана без ограничения, не я публикувайте.<br />
+
+Също потвърждавате, че <strong>вие</strong> сте написали материала или сте използвали <strong>свободни ресурси</strong> — <em>обществено достояние</em> или друг свободен източник.
+Ако сте ползвали чужди материали, за които имате разрешение, непременно посочете източника.
+
+<div style="font-variant:small-caps"><strong>Не публикувайте произведения с авторски права без разрешение!<strong></div>',
+'copyrightwarning2'         => 'Моля, обърнете внимание на това, че всички приноси към {{SITENAME}} могат да бъдат редактирани, променяни или премахвани от останалите сътрудници.
+Ако не сте съгласни вашата писмена работа да бъде променяна без ограничения, не я публикувайте.<br />
+Също потвърждавате, че <strong>вие</strong> сте написали материала или сте използвали <strong>свободни ресурси</strong> — <em>обществено достояние</em> или друг свободен източник (за подробности вижте $1).
+Ако сте ползвали чужди материали, за които имате разрешение, непременно посочете източника.
+
+<div style="font-variant:small-caps"><strong>Не публикувайте произведения с авторски права без разрешение!<strong></div>',
+'longpagewarning'           => '<strong>ВНИМАНИЕ: Страницата има размер $1 килобайта; някои браузъри могат да имат проблеми при редактиране на страници по-големи от 32 КБ.
+Моля, обмислете дали страницата не може да се раздели на няколко по-малки части.</strong>',
+'longpageerror'             => '<strong>ГРЕШКА: Текстът, който пращате, е с големина $1 килобайта, което надвишава позволения максимум от $2 килобайта. Заради това не може да бъде съхранен.</strong>',
+'readonlywarning'           => '<strong>ВНИМАНИЕ: Базата от данни беше затворена за поддръжка, затова в момента промените ви не могат да бъдат съхранени. Ако желаете, можете да съхраните страницата като текстов файл и да се опитате да я публикувате по-късно.</strong>',
+'protectedpagewarning'      => '<strong>ВНИМАНИЕ: Страницата е защитена и само администратори могат да я редактират.
+Моля, следвайте [[{{ns:project}}:Защитена страница|указанията за защитена страница]].</strong>',
+'semiprotectedpagewarning'  => "'''Забележка''': Страница е защитена, като само регистрирани потребители могат да я редактират.",
+'cascadeprotectedwarning'   => "'''Внимание:''' Страницата е защитена, като само потребители с администраторски права могат да я редактират. Тя е включена в следните страници с каскадна защита:",
+'templatesused'             => 'Шаблони, използвани на страницата:',
+'templatesusedpreview'      => 'Шаблони, използвани в предварителния преглед:',
+'templatesusedsection'      => 'Шаблони, използвани в този раздел:',
+'template-protected'        => '(защитена)',
+'template-semiprotected'    => '(полузащитена)',
+'edittools'                 => '<!-- Евентуален текст тук ще бъде показван под формулярите за редактиране и качване. -->',
+'nocreatetitle'             => 'Създаването на страници е ограничено',
+'nocreatetext'              => 'Създаването на нови страници на този сайт е ограничено. Можете да се върнете назад и да редактирате някоя от съществуващите страници, [[{{ns:special}}:Userlogin|да се регистрирате или да създадете нова потребителска сметка]].',
+
+# "Undo" feature
+'undo-success' => 'Редакцията може да бъде върната. Прегледайте долното сравнение и се уверете, че наистина искате да го направите. След това съхранете страницата, за да извършите връщането.',
+'undo-failure' => 'Редакцията не може да бъде върната поради конфликтни междинни редакции.',
+'undo-summary' => 'премахната редакция $1 на [[{{ns:special}}:Contributions/$2|$2]] ([[{{ns:user_talk}}:$2|беседа]])',
+
+# Account creation failure
+'cantcreateaccounttitle' => 'Невъзможно е да бъде създадена потребителска сметка.',
+'cantcreateaccounttext'  => 'Създаването на потребителски сметки от този IP-адрес (<strong>$1</strong>) е забранено. Това най-вероятно се дължи на често повтарящ се вандализъм от потребител, с който споделяте този адрес.',
+
+# History pages
+'revhistory'          => 'История на версиите',
+'viewpagelogs'        => 'Преглед на извършените административни действия по страницата',
+'nohistory'           => 'Няма редакционна история за тази страница.',
+'revnotfound'         => 'Версията не е открита',
+'revnotfoundtext'     => 'Желаната стара версия на страницата не беше открита.
+Моля, проверете адреса, който използвахте за достъп до страницата.',
+'loadhist'            => 'Зареждане история на страницата',
+'currentrev'          => 'Текуща версия',
+'revisionasof'        => 'Версия от $1',
+'revision-info'       => 'Версия от $1 на $2',
+'previousrevision'    => '←По-стара версия',
+'nextrevision'        => 'По-нова версия→',
+'currentrevisionlink' => 'преглед на текущата версия',
+'cur'                 => 'тек',
+'next'                => 'след',
+'last'                => 'посл',
+'orig'                => 'ориг',
+'page_first'          => 'първа',
+'page_last'           => 'последна',
+'histlegend'          => '<em>Разлики:</em> Изберете версиите, които желаете да сравните, чрез превключвателите срещу тях и натиснете &lt;Enter&gt; или бутона за сравнение.<br />
+<em>Легенда:</em> (<strong>тек</strong>) = разлика с текущата версия, (<strong>посл</strong>) = разлика с предишната версия, <strong>м</strong>&nbsp;=&nbsp;малка промяна',
+'deletedrev'          => '[изтрита]',
+'histfirst'           => 'Първи',
+'histlast'            => 'Последни',
+'historysize'         => '($1 байта)',
+'historyempty'        => '(празна)',
+
+# Revision feed
+'history-feed-title'          => 'Редакционна история',
+'history-feed-description'    => 'Редакционна история на страницата в {{SITENAME}}',
+'history-feed-item-nocomment' => '$1 в $2', # user at time
+'history-feed-empty'          => 'Исканата страница не съществува — може да е била изтрита или преименувана. Опитайте да [[{{ns:special}}:Search|потърсите]] нови страници, които биха могли да са ви полезни.',
+
+# Revision deletion
+'rev-deleted-comment'         => '(коментарът е изтрит)',
+'rev-deleted-user'            => '(името на автора е изтрито)',
+'rev-deleted-event'           => '(записът е изтрит)',
+'rev-deleted-text-permission' => '<div class="mw-warning plainlinks">
+Тази версия на страницата е изтрита от общодостъпния архив.
+Възможно е обяснения да има в [{{fullurl:Special:Log/delete|page={{PAGENAMEE}}}} дневника на изтриванията].
+</div>',
+'rev-deleted-text-view'       => '<div class="mw-warning plainlinks">
+Тази версия на страницата е изтрита от общодостъпния архив.
+Като администратор на този сайт, вие можете да я видите;
+Възможно е обяснения да има в [{{fullurl:Special:Log/delete|page={{PAGENAMEE}}}} дневника на изтриванията].
+</div>',
+'rev-delundel'                => 'показване/скриване',
+'revisiondelete'              => 'Изтриване/възстановяване на редакции',
+'revdelete-nooldid-title'     => 'Не е зададена редакция',
+'revdelete-nooldid-text'      => 'Не сте задали редакция или редакции за изпълнението на тази функция.',
+'revdelete-selected'          => "{{PLURAL:$2|Избрана версия|Избрани версии}} от '''$1:'''",
+'logdelete-selected'          => "{{PLURAL:$2|Избрано събитие|Избрани събития}} за '''$1:'''",
+'revdelete-text'              => 'Изтритите версии ше се показват в историята на страницата, но тяхното съдържание ще бъде недостъпно за обикновенните потребители.
+
+Администраторите на това уики имат достъп до скритото съдържание и могат да го възстановят, с изключение на случаите, когато има наложено допълнително ограничение.',
+'revdelete-legend'            => 'Задаване на ограничения:',
+'revdelete-hide-text'         => 'Скриване на текста на версията',
+'revdelete-hide-name'         => 'Скриване на действието и целта',
+'revdelete-hide-comment'      => 'Скриване на коментара',
+'revdelete-hide-user'         => 'Скриване на името/IP-адреса на автора',
+'revdelete-hide-restricted'   => 'Прилагане на тези ограничения и към администраторите',
+'revdelete-suppress'          => 'Скриване на причината за изтриването и от администраторите',
+'revdelete-hide-image'        => 'Скриване на файловото съдържание',
+'revdelete-unsuppress'        => 'Премахване на ограниченията за възстановените версии',
+'revdelete-log'               => 'Коментар:',
+'revdelete-submit'            => 'Прилагане към избраната версия',
+'revdelete-logentry'          => 'промени видимостта на версия на [[$1]]',
+'logdelete-logentry'          => 'промени видимостта на събитие за [[$1]]',
+'revdelete-logaction'         => '$1 {{plural:$1|версия|версии}} сменени на режим $2',
+'logdelete-logaction'         => '$1 {{plural:$1|събитие|събития}} за [[$3]] сменени на режим $2',
+'revdelete-success'           => 'Видимостта на версията беше променена.',
+'logdelete-success'           => 'Видимостта на събитието беше променена.',
+
+# Oversight log
+'overlogpagetext' => 'Това е списък на последните изтривания и блокирания, които са скрити от администраторите. Можете да прегледате [[{{ns:special}}:Ipblocklist|списъка на текущите блокирания]].',
+
+# Diffs
+'difference'                => '(Разлики между версиите)',
+'loadingrev'                => 'зареждане на версии за функцията <em>разл</em>',
+'lineno'                    => 'Ред $1:',
+'editcurrent'               => 'Редактиране на текущата версия на страницата',
+'selectnewerversionfordiff' => 'Избиране на нова версия за сравнение',
+'selectolderversionfordiff' => 'Избиране на стара версия за сравнение',
+'compareselectedversions'   => 'Сравнение на избраните версии',
+'editundo'                  => 'връщане',
+'diff-multi'                => '({{plural:$1|Една междинна версия не е показана|$1 междинни версии не са показани}}.)',
+
+# Search results
+'searchresults'         => 'Резултати от търсенето',
+'searchresulttext'      => 'За повече информация относно {{SITENAME}}, вижте [[{{MediaWiki:helppage}}|{{int:help}}]].',
+'searchsubtitle'        => 'За заявка „[[:$1]]“',
+'searchsubtitleinvalid' => 'За заявка „$1“',
+'badquery'              => 'Лошо формулирана заявка за търсене',
+'badquerytext'          => 'Вашата заявка не можа да бъде обработена.
+Вероятно сте се опитали да търсите дума с по-малко от три букви, което все още не се поддържа.
+Възможно е и да сте сгрешили в изписването на израза, например: „риба и и везни“.
+Моля, опитайте с нова заявка.',
+'matchtotals'           => 'Заявката „$1“ отговаря на $2 заглавия на страници и на текста на $3 страници.',
+'noexactmatch'          => "В {{SITENAME}} не съществува страница с това заглавие. Можете да я '''[[:$1|създадете]]'''.",
+'titlematches'          => 'Съответствия в заглавията на страници',
+'notitlematches'        => 'Няма съответствия в заглавията на страници',
+'textmatches'           => 'Съответствия в текста на страници',
+'notextmatches'         => 'Няма съответствия в текста на страници',
+'prevn'                 => 'предишни $1',
+'nextn'                 => 'следващи $1',
+'viewprevnext'          => 'Преглед ($1) ($2) ($3).',
+'showingresults'        => "Показване на до {{PLURAL:$1|'''1''' резултат|'''$1''' резултата}}, като се започва от номер '''$2'''.",
+'showingresultsnum'     => "Показване на {{PLURAL:$3|'''1''' резултат|'''$3''' резултата}}, като се започва от номер '''$2'''.",
+'nonefound'             => "'''Забележка''': Безрезултатните търсения често са причинени от това, че се търсят основни думи като „има“ или „от“, които не се индексират, или от това, че се търсят повече от една думи, тъй като се показват само страници, съдържащи всички зададени понятия.",
+'powersearch'           => 'Търсене',
+'powersearchtext'       => 'Търсене в именни пространства:<br />$1<br />$2 Показване на пренасочвания<br />Търсене на $3 $9',
+'searchdisabled'        => 'Търсенето в {{SITENAME}} е временно изключено поради голямото натоварване на сървъра. Междувременно можете да търсите чрез Google. Обърнете внимание обаче, че е възможно съхранените при тях страници да са остарели.',
+'blanknamespace'        => '(Основно)',
+
+# Preferences page
+'preferences'              => 'Настройки',
+'mypreferences'            => 'моите настройки',
+'prefsnologin'             => 'Не сте влезли',
+'prefsnologintext'         => 'Необходимо е да [[{{ns:special}}:Userlogin|влезете]], за да може да променяте потребителските си настройки.',
+'prefsreset'               => 'Стандартните настройки бяха възстановени.',
+'qbsettings'               => 'Лента за бърз избор',
+'qbsettings-none'          => 'Без меню',
+'qbsettings-fixedleft'     => 'Неподвижно вляво',
+'qbsettings-fixedright'    => 'Неподвижно вдясно',
+'qbsettings-floatingleft'  => 'Плаващо вляво',
+'qbsettings-floatingright' => 'Плаващо вдясно',
+'changepassword'           => 'Смяна на парола',
+'skin'                     => 'Облик',
+'math'                     => 'Математически формули',
+'dateformat'               => 'Формат на датата',
+'datedefault'              => 'Без предпочитание',
+'datetime'                 => 'Дата и час',
+'math_failure'             => 'Неуспех при разбора',
+'math_unknown_error'       => 'непозната грешка',
+'math_unknown_function'    => 'непозната функция',
+'math_lexing_error'        => 'лексикална грешка',
+'math_syntax_error'        => 'синтактична грешка',
+'math_image_error'         => 'Превръщането към PNG не сполучи. Проверете дали latex, dvips и gs са правилно инсталирани.',
+'math_bad_tmpdir'          => 'Невъзможно е писането или създаването на временна папка за математическите операции',
+'math_bad_output'          => 'Невъзможно е писането или създаването на изходяща папка за математическите операции',
+'math_notexvc'             => 'Липсва изпълнимият файл на texvc. Моля, прегледайте math/README за информация относно конфигурирането.',
+'prefs-personal'           => 'Потребителски данни',
+'prefs-rc'                 => 'Последни промени и мъничета',
+'prefs-watchlist'          => 'Списък за наблюдение',
+'prefs-watchlist-days'     => 'Брой дни, които да се показват в списъка за наблюдение:',
+'prefs-watchlist-edits'    => 'Брой редакции, които се показват в разширения списък за наблюдение:',
+'prefs-misc'               => 'Други настройки',
+'saveprefs'                => 'Съхранение',
+'resetprefs'               => 'Възстановяване на стандартните настройки',
+'oldpassword'              => 'Стара парола:',
+'newpassword'              => 'Нова парола:',
+'retypenew'                => 'Нова парола повторно:',
+'textboxsize'              => 'Редактиране',
+'rows'                     => 'Редове:',
+'columns'                  => 'Колони:',
+'searchresultshead'        => 'Търсене',
+'resultsperpage'           => 'Резултати на страница:',
+'contextlines'             => 'Редове за резултат:',
+'contextchars'             => 'Знаци от контекста на ред:',
+'stubthreshold'            => 'Определяне като къси страници до:',
+'recentchangesdays'        => 'Брой дни в последни промени:',
+'recentchangescount'       => 'Брой редакции в последни промени:',
+'savedprefs'               => 'Вашите настройки бяха съхранени.',
+'timezonelegend'           => 'Времева зона',
+'timezonetext'             => 'Броят часове, с които вашето местно време се различава от това на сървъра (UTC).',
+'localtime'                => 'Местно време',
+'timezoneoffset'           => 'Отместване¹',
+'servertime'               => 'Време на сървъра',
+'guesstimezone'            => 'Попълване чрез браузъра',
+'allowemail'               => 'Възможност за получаване на писма от други потребители',
+'defaultns'                => 'Търсене в тези именни пространства по подразбиране:',
+'default'                  => 'по подразбиране',
+'files'                    => 'Файлове',
+
+# User rights
+'userrights-lookup-user'     => 'Управляване на потребителските групи',
+'userrights-user-editname'   => 'Въведете потребителско име:',
+'editusergroup'              => 'Редактиране на потребителските групи',
+'userrights-editusergroup'   => 'Редактиране на потребителските групи',
+'saveusergroups'             => 'Съхранение на потребителските групи',
+'userrights-groupsmember'    => 'Член на:',
+'userrights-groupsavailable' => 'Групи на разположение:',
+'userrights-groupshelp'      => 'Изберете групите, към които искате той да бъде прибавен или от които да бъде премахнат. Неизбраните групи няма да бъдат променени. Можете да отизберете група чрез &lt;CTRL&gt; + ляв бутон на мишката',
+
+# Groups
+'group'            => 'Потребителска група:',
+'group-bot'        => 'Ботове',
+'group-sysop'      => 'Администратори',
+'group-bureaucrat' => 'Бюрократи',
+'group-all'        => '(всички)',
+
+'group-bot-member'        => 'Бот',
+'group-sysop-member'      => 'Администратор',
+'group-bureaucrat-member' => 'Бюрократ',
+
+'grouppage-bot'        => '{{ns:project}}:Ботове',
+'grouppage-sysop'      => '{{ns:project}}:Администратори',
+'grouppage-bureaucrat' => '{{ns:project}}:Бюрократи',
+
+# User rights log
+'rightslog'      => 'Дневник на потребителските права',
+'rightslogtext'  => 'Това е дневник на промените на потребителски права.',
+'rightslogentry' => 'промени потребителската група на $1 от $2 в $3',
+'rightsnone'     => '(никой)',
+
+# Recent changes
+'nchanges'                          => '$1 {{PLURAL:$1|промяна|промени}}',
+'recentchanges'                     => 'Последни промени',
+'recentchangestext'                 => "Проследяване на последните промени в {{SITENAME}}.
+
+Легенда: '''тек''' = разлика на текущата версия,
+'''ист''' = история на версиите, '''м'''&nbsp;=&nbsp;малка промяна, <strong class='newpage'>Н</strong>&nbsp;=&nbsp;новосъздадена страница",
+'recentchanges-feed-description'    => 'Проследяване на последните промени в {{SITENAME}}.',
+'rcnote'                            => "{{PLURAL:$1|Показана е '''1''' промяна|Показани са последните '''$1''' промени}} през {{PLURAL:$2|последния ден|последните '''$2''' дни}}, към $3.",
+'rcnotefrom'                        => 'Дадени са промените от <strong>$2</strong> (до <strong>$1</strong> показани).',
+'rclistfrom'                        => 'Показване на промени, като се започва от $1.',
+'rcshowhideminor'                   => '$1 на малки промени',
+'rcshowhidebots'                    => '$1 на ботове',
+'rcshowhideliu'                     => '$1 на влезли в системата потребители',
+'rcshowhideanons'                   => '$1 на анонимни потребители',
+'rcshowhidepatr'                    => '$1 на проверени редакции',
+'rcshowhidemine'                    => '$1 на моите приноси',
+'rclinks'                           => 'Показване на последните $1 промени през последните $2 дни<br />$3',
+'diff'                              => 'разл',
+'hist'                              => 'ист',
+'hide'                              => 'Скриване',
+'show'                              => 'Показване',
+'minoreditletter'                   => 'м',
+'newpageletter'                     => 'Н',
+'boteditletter'                     => 'б',
+'number_of_watching_users_pageview' => '[$1 наблюдаващ(и) потребител(и)]',
+'rc_categories'                     => 'Само от категории (разделител „|“)',
+'rc_categories_any'                 => 'Която и да е',
+
+# Recent changes linked
+'recentchangeslinked'          => 'Свързани промени',
+'recentchangeslinked-noresult' => 'Няма промени в свързаните страници за дадения период.',
+'recentchangeslinked-summary'  => "Тази специална страница показва последните промени в свързаните страници. Страниците от списъка ви за наблюдение се показват в '''получер'''.",
+
+# Upload
+'upload'                      => 'Качване',
+'uploadbtn'                   => 'Качване',
+'reupload'                    => 'Повторно качване',
+'reuploaddesc'                => 'Връщане към формуляра за качване.',
+'uploadnologin'               => 'Не сте влезли',
+'uploadnologintext'           => 'Необходимо е да [[{{ns:special}}:Userlogin|влезете]], за да може да качвате файлове.',
+'upload_directory_read_only'  => 'Сървърът няма достъп за писане до папката за качване „$1“.',
+'uploaderror'                 => 'Грешка при качване',
+'uploadtext'                  => "Използвайте долния формуляр, за да качвате файлове, които ще можете да използвате в страниците.
+В повечето браузъри ще видите бутон „Browse…“ (ако използвате преведен интерфейс, можете да видите „Избор на файл…“, „Избор…“ и др.), който ще отвори основния за вашата операционна система диалогов прозорец за избиране на файл.
+
+За да включите картинка (файл) в страница, използвайте една от следните препратки: '''<nowiki>[[{{ns:image}}:картинка.jpg|алтернативен текст]]</nowiki>''' за изображения или '''<nowiki>[[{{ns:media}}:звук.ogg]]</nowiki>''' за музикални файлове.
+
+За да прегледате съществуващите в базата от данни файлове, разгледайте [[{{ns:special}}:Imagelist|списъка с качените файлове]].
+Качванията и изтриванията се записват в [[{{ns:special}}:Log/upload|дневника на качванията]].",
+'uploadlog'                   => 'дневник на качванията',
+'uploadlogpage'               => 'Дневник на качванията',
+'uploadlogpagetext'           => 'Списък на последните качвания.',
+'filename'                    => 'Име на файл',
+'filedesc'                    => 'Описание',
+'fileuploadsummary'           => 'Описание:',
+'filestatus'                  => 'Авторско право',
+'filesource'                  => 'Изходен код',
+'uploadedfiles'               => 'Качени файлове',
+'ignorewarning'               => 'Съхраняване на файла въпреки предупреждението.',
+'ignorewarnings'              => 'Пренебрегване на всякакви предупреждения',
+'minlength'                   => 'Имената на файловете трябва да съдържат поне три знака.',
+'illegalfilename'             => 'Името на файла „$1“ съдържа знаци, които не са позволени в заглавия на страници. Моля, преименувайте файла и се опитайте да го качите отново.',
+'badfilename'                 => 'Файлът беше преименуван на „$1“.',
+'filetype-badmime'            => 'Не е разрешено качването на файлове с MIME-тип „$1“.',
+'filetype-badtype'            => "'''„.$1“''' е нежелан файлов формат.
+: Разрешени са: $2",
+'filetype-missing'            => 'Файлът няма разширение (напр. „.jpg“).',
+'large-file'                  => 'Не се препоръчва файловете да се по-големи от $1; този файл е $2.',
+'largefileserver'             => 'Файлът е по-голям от допустимия от сървъра размер.',
+'emptyfile'                   => 'Каченият от вас файл е празен. Това може да е предизвикано от грешка в името на файла. Моля, уверете се дали наистина искате да го качите.',
+'fileexists'                  => 'Вече съществува файл с това име! Моля, прегледайте $1, ако не сте сигурни дали искате да го промените.',
+'fileexists-extension'        => 'Съществува файл със сходно име:<br />
+Име на качвания файл: <strong><tt>$1</tt></strong><br />
+Име на съществуващия файл: <strong><tt>$2</tt></strong><br />
+Има разлика единствено в разширенията на файловете, изразяваща се в ползване на малки и главни букви. Моля, проверете дали файловете не са еднакви.',
+'fileexists-thumb'            => "'''<center>Съществуваща картинка</center>'''",
+'fileexists-thumbnail-yes'    => 'Изглежда, че файлът е картинка с намален размер <i>(миникартинка)</i>. Моля, проверете файла <strong><tt>$1</tt></strong>.<br />
+Ако съществуващият файл представлява оригиналната версия на картинката, няма нужда да се качва неин умален вариант.',
+'file-thumbnail-no'           => 'Файловото име започва с <strong><tt>$1</tt></strong>. Изглежда, че е картинка с намален размер <i>(миникартинка)</i>.
+Ако разполагате с версия в пълна разделителна способност, качете нея. В противен случай сменете името на този файл.',
+'fileexists-forbidden'        => 'Вече съществува файл с това име! Моля, върнете се и качете файла с ново име. [[{{ns:image}}:$1|мини|центр|$1]]',
+'fileexists-shared-forbidden' => 'В споделеното файлово хранилище вече съществува файл с това име! Моля, върнете се и качете файла с ново име. [[{{ns:image}}:$1|мини|центр|$1]]',
+'successfulupload'            => 'Качването беше успешно',
+'fileuploaded'                => 'Файлът „$1“ беше успешно качен.
+Моля, последвайте препратката $2 към страницата за описание и въведете малко информация за файла — кога и от кого е създаден и всякаква друга информация, която може да имате за него. Ако това е картинка, можете да я вмъкнете в някоя страница по следния начин: <code><nowiki>[[</nowiki>{{ns:image}}<nowiki>:$1|мини|Описание]]</nowiki></code>',
+'uploadwarning'               => 'Предупреждение при качване',
+'savefile'                    => 'Съхраняване на файл',
+'uploadedimage'               => 'качена „[[$1]]“',
+'uploaddisabled'              => 'Съжаляваме, качванията бяха спрени.',
+'uploaddisabledtext'          => 'На този wiki-сайт качването на файлове е забранено',
+'uploadscripted'              => 'Файлът съдържа HTML или скриптов код, който може да бъде погрешно  интерпретиран от браузъра.',
+'uploadcorrupt'               => 'Файлът е повреден или е с неправилно разширение. Моля, проверете го и го качете отново.',
+'uploadvirus'                 => 'Файлът съдържа вирус! Подробности: $1',
+'sourcefilename'              => 'Първоначално име',
+'destfilename'                => 'Целево име',
+'watchthisupload'             => 'Наблюдаване на страницата',
+'filewasdeleted'              => 'Файл в този име е съществувал преди време, но е бил изтрит. Моля проверете $1 преди отново да го качите.',
+
+'upload-proto-error'      => 'Неправилен протокол',
+'upload-proto-error-text' => 'Изисква се адрес започващ с <code>http://</code> или <code>ftp://</code>.',
+'upload-file-error'       => 'Вътрешна грешка',
+'upload-file-error-text'  => 'Вътрешна грешка при опит да се създаде временен файл на сървъра. Моля, обърнете се към системен администратор.',
+'upload-misc-error'       => 'Неизвестна грешка при качване',
+'upload-misc-error-text'  => 'Неизвестна грешка при качване. Моля, убедете се, че адресът е верен и опитайте отново. Ако отново имате проблем, обърнете се към системен администратор.',
+
+# Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
+'upload-curl-error6'       => 'Не е възможно обръщането към указания URL адрес',
+'upload-curl-error6-text'  => 'Търсеният адрес не може да бъде достигнат. Моля проверете дали е написан вярно.',
+'upload-curl-error28'      => 'Времето за качване изтече',
+'upload-curl-error28-text' => 'Сайтът не отговаря твърде дълго. Моля, убедете се, че сайтът работи и след малко опитайте отново. Може би ще трябва да опитате във време, което не е така натоварено.',
+
+'license'            => 'Лицензиране',
+'nolicense'          => 'Нищо не е избрано',
+'upload_source_url'  => ' (правилен, публично достъпен интернет-адрес)',
+'upload_source_file' => ' (файл на вашия компютър)',
+
+# Image list
+'imagelist'                 => 'Списък на файловете',
+'imagelisttext'             => "Списък от {{plural:$1|един файл|'''$1''' файла, сортирани $2}}.",
+'imagelistforuser'          => 'Показва само картинка, качени от $1.',
+'getimagelist'              => 'донасяне на списъка с файлове',
+'ilsubmit'                  => 'Търсене',
+'showlast'                  => 'Показване на последните $1 файла, сортирани $2.',
+'byname'                    => 'по име',
+'bydate'                    => 'по дата',
+'bysize'                    => 'по размер',
+'imgdelete'                 => 'изтр',
+'imgdesc'                   => 'опис',
+'imgfile'                   => 'файл',
+'imglegend'                 => 'Легенда: (опис) = показване/редактиране на описанието на файла.',
+'imghistory'                => 'История на файла',
+'revertimg'                 => 'връщ',
+'deleteimg'                 => 'изтр',
+'deleteimgcompletely'       => 'Изтриване на всички версии на файла',
+'imghistlegend'             => 'Легенда: (тек) = текущият файл, (изтр) = изтриване на съответната версия, (връщ) = възвръщане към съответната версия.
+<br /><i>Щракнете върху датата, за да видите файла, качен на тази дата</i>.',
+'imagelinks'                => 'Препратки към файла',
+'linkstoimage'              => 'Следните страници сочат към файла:',
+'nolinkstoimage'            => 'Няма страници, сочещи към файла.',
+'sharedupload'              => 'Този файл е споделен и може да бъде използван от други проекти.',
+'shareduploadwiki'          => 'Моля, разгледайте $1 за по-нататъшна информация.',
+'shareduploadwiki-linktext' => 'описателната страница на файла',
+'noimage'                   => 'Не съществува файл с това име, можете $1.',
+'noimage-linktext'          => 'да го качите',
+'uploadnewversion-linktext' => 'Качване на нова версия на файла',
+'imagelist_date'            => 'Дата',
+'imagelist_name'            => 'Име на файла',
+'imagelist_user'            => 'Потребител',
+'imagelist_size'            => 'Размер (в байта)',
+'imagelist_description'     => 'Описание',
+'imagelist_search_for'      => 'Търсене по име на файла:',
+
+# MIME search
+'mimesearch'         => 'MIME-търсене',
+'mimesearch-summary' => 'На тази страница можете да филтрирате файловете по техния MIME-тип. Заявката трябва да се състои от медиен тип и подтип, разделени с наклонена черта (слеш), напр. <tt>image/jpeg</tt>.',
+'mimetype'           => 'MIME-тип:',
+'download'           => 'сваляне',
+
+# Unwatched pages
+'unwatchedpages'         => 'Ненаблюдавани страници',
+
+# List redirects
+'listredirects'         => 'Списък на пренасочванията',
+
+# Unused templates
+'unusedtemplates'         => 'Неизползвани шаблони',
+'unusedtemplatestext'     => 'Тази страница съдържа списък на шаблоните, които не са включени в друга страница. Проверявайте за препратки към отделните шаблони преди да ги изтриете или предложите за изтриване.',
+'unusedtemplateswlh'      => 'други препратки',
+
+# Random redirect
+'randomredirect' => 'Случайно пренасочване',
+
+# Statistics
+'statistics'             => 'Статистика',
+'sitestats'              => 'Страници',
+'userstats'              => 'Потребители',
+'sitestatstext'          => "Базата от данни съдържа {{PLURAL:$1|'''1''' страница|'''$1''' страници}}.
+Това включва всички страници от всички именни пространства в {{SITENAME}} (''Основно'', Беседа, {{ns:Project}}, Потребител, Категория, …). Измежду тях {{PLURAL:$2|'''1''' страница|'''$2''' страници}} се смятат за действителни (изключват се пренасочванията и страниците, несъдържащи препратки).
+
+{{PLURAL:$8|Бил е качен един файл|Били са качени '''$8''' файла}}.
+
+Имало е '''$3''' {{PLURAL:$3|преглед|прегледа}} и '''$4''' {{PLURAL:$4|редакция на страница|редакции на страници}} от пускането на {{SITENAME}}. Това прави средно по '''$5''' редакции на страница и по '''$6''' прегледа на редакция.
+
+Дължината на [http://meta.wikimedia.org/wiki/Help:Job_queue работната опашка] е '''$7'''.",
+'userstatstext'          => "Има {{PLURAL:$1|'''1''' регистриран потребител|'''$1''' регистрирани потребители}} и '''$2''' {{PLURAL:$2|потребител|потребители}} (или '''$4%''') с права на $5.",
+'statistics-mostpopular' => 'Най-преглеждани страници',
+
+'disambiguations'         => 'Пояснителни страници',
+'disambiguationspage'     => 'Шаблон:Пояснение',
+'disambiguations-text'    => "Следните страници сочат към '''пояснителна страница''', вместо към истинската тематична страница.<br />Една страница се смята за пояснителна, ако ползва шаблон, към който се препраща от [[MediaWiki:disambiguationspage]]",
+
+'doubleredirects'         => 'Двойни пренасочвания',
+'doubleredirectstext'     => 'Всеки ред съдържа препратки към първото и второто пренасочване, както и първия ред на текста на второто пренасочване, който обикновено посочва „<i>истинската</i>“ целева страница, към която първото пренасочване би трябвало да сочи.',
+
+'brokenredirects'         => 'Невалидни пренасочвания',
+'brokenredirectstext'     => 'Следните пренасочващи страници сочат към несъществуващи страници:',
+'brokenredirects-edit'    => '(редактиране)',
+'brokenredirects-delete'  => '(изтриване)',
+
+'withoutinterwiki'        => 'Страници без междуезикови препратки',
+'withoutinterwiki-header' => 'Следните страници не препращат към версии на други езици:',
+
+'fewestrevisions' => 'Страници с най-малко версии',
+
+# Miscellaneous special pages
+'nbytes'                          => '$1 {{PLURAL:$1|байт|байта}}',
+'ncategories'                     => '$1 {{PLURAL:$1|категория|категории}}',
+'nlinks'                          => '$1 {{PLURAL:$1|препратка|препратки}}',
+'nmembers'                        => '$1 {{PLURAL:$1|член|члена}}',
+'nrevisions'                      => '$1 {{PLURAL:$1|версия|версии}}',
+'nviews'                          => '$1 {{PLURAL:$1|преглед|прегледа}}',
+'specialpage-empty'               => 'Страницата е празна.',
+'lonelypages'                     => 'Страници-сираци',
+'lonelypagestext'                 => 'Към следващите страници няма препратки от други страници на тази енциклопедия.',
+'uncategorizedpages'              => 'Некатегоризирани страници',
+'uncategorizedcategories'         => 'Некатегоризирани категории',
+'uncategorizedimages'             => 'Некатегоризирани картинки',
+'unusedcategories'                => 'Неизползвани категории',
+'unusedimages'                    => 'Неизползвани файлове',
+'popularpages'                    => 'Известни страници',
+'wantedcategories'                => 'Желани категории',
+'wantedpages'                     => 'Желани страници',
+'mostlinked'                      => 'Най-препращани страници',
+'mostlinkedcategories'            => 'Най-препращани категории',
+'mostcategories'                  => 'Страници с най-много категории',
+'mostimages'                      => 'Най-препращани картинки',
+'mostrevisions'                   => 'Страници с най-много версии',
+'allpages'                        => 'Всички страници',
+'prefixindex'                     => 'Азбучен списък на представки',
+'randompage'                      => 'Случайна страница',
+'shortpages'                      => 'Кратки страници',
+'longpages'                       => 'Дълги страници',
+'deadendpages'                    => 'Задънени страници',
+'deadendpagestext'                => 'Посочените страници нямат препратки към други страници в тази енциклопедия.',
+'protectedpages'                  => 'Защитени страници',
+'protectedpagestext'              => 'Следните страници са защитени против редактиране и преместване',
+'protectedpagesempty'             => 'В момента няма защитени страници с тези параметри.',
+'listusers'                       => 'Списък на потребителите',
+'specialpages'                    => 'Специални страници',
+'spheading'                       => 'Специални страници за всички потребители',
+'restrictedpheading'              => 'Специални страници с ограничен достъп',
+'rclsub'                          => '(на страници, сочени от „$1“)',
+'newpages'                        => 'Нови страници',
+'newpages-username'               => 'Потребител:',
+'ancientpages'                    => 'Стари страници',
+'intl'                            => 'Междуезикови препратки',
+'move'                            => 'Преместване',
+'movethispage'                    => 'Преместване на страницата',
+'unusedimagestext'                => 'Моля, обърнете внимание на това, че други сайтове могат да сочат към картинката чрез пряк адрес и въпреки това тя може да се намира в списъка.',
+'unusedcategoriestext'            => 'Следните категории съществуват, но никоя страница или категория не ги използва.',
+
+# Book sources
+'booksources'               => 'Източници на книги',
+'booksources-search-legend' => 'Търсене на информация за книга',
+'booksources-isbn'          => 'ISBN:',
+'booksources-go'            => 'Търсене',
+'booksources-text'          => 'По-долу е списъкът от връзки към други сайтове, продаващи нови и използвани книги или имащи повече информация за книгите, които търсите:',
+
+'categoriespagetext' => 'В {{SITENAME}} съществуват следните категории.',
+'data'               => 'Данни',
+'userrights'         => 'Управление на потребителските права',
+'groups'             => 'Потребителски групи',
+'isbn'               => 'ISBN',
+'alphaindexline'     => 'от $1 до $2',
+'version'            => 'Версия',
+
+# Special:Log
+'specialloguserlabel'  => 'Потребител:',
+'speciallogtitlelabel' => 'Заглавие:',
+'log'                  => 'Дневници',
+'log-search-legend'    => 'Претърсване на дневниците',
+'log-search-submit'    => 'Отиване',
+'alllogstext'          => 'Смесено показване на дневниците на качванията, изтриванията, защитата, блокиранията и бюрократите.
+Можете да ограничите прегледа, като изберете вид на дневника, потребителско име или определена страница.',
+'logempty'             => 'Дневникът не съдържа записи, отговарящи на избрания критерий.',
+'log-title-wildcard'   => 'Търсене на заглавия, започващи със',
+
+# Special:Allpages
+'nextpage'          => 'Следваща страница ($1)',
+'prevpage'          => 'Предходна страница ($1)',
+'allpagesfrom'      => 'Показване на страниците, като се започва от:',
+'allarticles'       => 'Всички страници',
+'allinnamespace'    => 'Всички страници (именно пространство $1)',
+'allnotinnamespace' => 'Всички страници (без именно пространство $1)',
+'allpagesprev'      => 'Предишна',
+'allpagesnext'      => 'Следваща',
+'allpagessubmit'    => 'Отиване',
+'allpagesprefix'    => 'Показване на страници, започващи със:',
+'allpagesbadtitle'  => 'Зададеното име е невалидно. Възможно е да съдържа междуезикова или междупроектна представка или пък знаци, които не могат да се използват в заглавия.',
+
+# Special:Listusers
+'listusersfrom'      => 'Показване на потребителите, започвайки от:',
+'listusers-submit'   => 'Показване',
+'listusers-noresult' => 'Няма намерени потребители.',
+
+# E-mail user
+'mailnologin'     => 'Няма електронна поща',
+'mailnologintext' => 'Необходимо е да [[{{ns:special}}:Userlogin|влезете]] и да посочите валидна електронна поща в [[{{ns:special}}:Preferences|настройките]] си, за да може да пращате писма на други потребители.',
+'emailuser'       => 'Пращане писмо на потребителя',
+'emailpage'       => 'Пращане писмо на потребител',
+'emailpagetext'   => 'Ако потребителят е посочил валидна електронна поща в настройките си, чрез долния формуляр можете да му изпратите съобщение. Адресът, записан в настройките ви, ще се появи в полето „От“ на изпратеното писмо, така че получателят ще е в състояние да ви отговори.',
+'usermailererror' => 'Пощенският обект даде грешка:',
+'defemailsubject' => 'Писмо от {{SITENAME}}',
+'noemailtitle'    => 'Няма електронна поща',
+'noemailtext'     => 'Потребителят не е посочил валидна електронна поща или е избрал да не получава писма от други потребители.',
+'emailfrom'       => 'От',
+'emailto'         => 'До',
+'emailsubject'    => 'Относно',
+'emailmessage'    => 'Съобщение',
+'emailsend'       => 'Изпращане',
+'emailccme'       => 'Получаване на копие на писмото.',
+'emailccsubject'  => 'Копие на писмото ви до $1: $2',
+'emailsent'       => 'Писмото е изпратено',
+'emailsenttext'   => 'Писмото ви беше изпратено.',
+
+# Watchlist
+'watchlist'            => 'Моят списък за наблюдение',
+'mywatchlist'         => 'Моят списък за наблюдение',
+'watchlistfor'         => "(за '''$1''')",
+'nowatchlist'          => 'Списъкът ви за наблюдение е празен.',
+'watchlistanontext'    => 'Необходимо е $1 за да видите или редактирате списъка си за наблюдение.',
+'watchlistcount'       => "'''Имате {{PLURAL:$1|една страница|$1 страници}} в списъка си за наблюдение, вкл. беседи.'''",
+'clearwatchlist'       => 'Изчистване на списъка за наблюдение',
+'watchlistcleartext'   => 'Сигурни ли сте, че искате да ги махнете?',
+'watchlistclearbutton' => 'Изчистване на списъка за наблюдение',
+'watchlistcleardone'   => 'Списъкът ви за наблюдение беше изчистен. {{PLURAL:$1|Една страница беше премахната|$1 страници бяха премахнати}}.',
+'watchnologin'         => 'Не сте влезли',
+'watchnologintext'     => 'Необходимо е да [[{{ns:special}}:Userlogin|влезете]], за да може да променяте списъка си за наблюдение.',
+'addedwatch'           => 'Добавено в списъка за наблюдение',
+'addedwatchtext'       => "Страницата „'''$1'''“ беше добавена към [[{{ns:special}}:Watchlist|списъка ви за наблюдение]].
+Нейните бъдещи промени, както и на съответната й дискусионна страница, ще се описват там, а тя ще се появява с '''удебелен шрифт''' в [[{{ns:special}}:Recentchanges|списъка на последните промени]], което ще направи по-лесно избирането й.
+
+Ако по-късно искате да премахнете страницата от списъка си за наблюдение, щракнете на „''Спиране на наблюдение''“.",
+'removedwatch'         => 'Премахнато от списъка за наблюдение',
+'removedwatchtext'     => 'Страницата „$1“ беше премахната от списъка ви за наблюдение.',
+'watch'                => 'Наблюдаване',
+'watchthispage'        => 'Наблюдаване на страницата',
+'unwatch'              => 'Спиране на наблюдение',
+'unwatchthispage'      => 'Спиране на наблюдение',
+'notanarticle'         => 'Не е страница',
+'watchnochange'        => 'Никоя от наблюдаваните страници не е била редактирана в показаното време.',
+'watchdetails'         => '* {{PLURAL:$1|Една наблюдавана страница|$1 наблюдавани страници}} (без беседи)
+* [[{{ns:special}}:Watchlist/edit|Показване и редактиране на пълния списък]]
+* [[Special:Watchlist/clear|Премахване на всички страници]]',
+'wlheader-enotif'      => '* Известяването по електронна поща е включено.',
+'wlheader-showupdated' => "* Страниците, които са били променени след последния път, когато сте ги посетили, са показани с '''получер''' шрифт.",
+'watchmethod-recent'   => 'проверка на последните промени за наблюдавани страници',
+'watchmethod-list'     => 'проверка на наблюдаваните страници за скорошни редакции',
+'removechecked'        => 'Премахване на избраните от списъка за наблюдение',
+'watchlistcontains'    => 'Списъкът ви за наблюдение съдържа {{PLURAL:$1|една страница|$1 страници}}.',
+'watcheditlist'        => 'В азбучен ред са показани наблюдаваните от вас основни страници. Отметнете кутийките на страниците, които искате да премахнете от списъка ви за наблюдение и натиснете бутона „Премахване на избраните“ (изтриването на основна страница предизвиква изтриването и на съответната й дискусионна страница и обратно).',
+'removingchecked'      => 'Премахване на избраните от списъка за наблюдение…',
+'couldntremove'        => 'Неуспех при премахването на „$1“…',
+'iteminvalidname'      => 'Проблем с „$1“, грешно име…',
+'wlnote'               => "{{PLURAL:$1|Показана е последната промяна|Показани са последните '''$1''' промени}} през {{PLURAL:$2|последния час|последните '''$2''' часа}}.",
+'wlshowlast'           => 'Показване на последните $1 часа $2 дни $3',
+'wlsaved'              => 'Това е съхранена версия на списъка ви за наблюдение.',
+'watchlist-show-bots'  => 'Показване на ботове',
+'watchlist-hide-bots'  => 'Скриване на ботове',
+'watchlist-show-own'   => 'Показване моите приноси',
+'watchlist-hide-own'   => 'Скриване моите приноси',
+'watchlist-show-minor' => 'Показване малки промени',
+'watchlist-hide-minor' => 'Скриване малки промени',
+'wldone'               => 'Готово.',
+
+# Displayed when you click the "watch" button and it's in the process of watching
+'watching'   => 'Наблюдаване…',
+'unwatching' => 'Без наблюдаване…',
+
+'enotif_mailer'      => 'Известяване по пощата на {{SITENAME}}',
+'enotif_reset'       => 'Отбелязване на всички страници като посетени',
+'enotif_newpagetext' => 'Това е нова страница.',
+'changed'            => 'променена',
+'created'            => 'създадена',
+'enotif_subject'     => 'Страницата $PAGETITLE в {{SITENAME}} е била $CHANGEDORCREATED от $PAGEEDITOR',
+'enotif_lastvisited' => 'Преглед на всички промени след последното ви посещение: $1.',
+'enotif_body'        => 'Уважаеми(а) $WATCHINGUSERNAME,
+
+на $PAGEEDITDATE страницата „$PAGETITLE“ в {{SITENAME}} е била $CHANGEDORCREATED от $PAGEEDITOR.
+
+Текуща версия: $PAGETITLE_URL
+
+$NEWPAGE
+
+Кратко описание на измененията: $PAGESUMMARY $PAGEMINOREDIT
+
+Връзка с редактора:
+* електронна поща: $PAGEEDITOR_EMAIL
+* уики: $PAGEEDITOR_WIKI
+
+Няма да ви се пращат други известявания за последващи изменения, докато не посетите страницата. На страницата със списъка ви за наблюдение можете да включите известяванията наведнъж за всички страници.
+
+             Системата за известяване на {{SITENAME}}
+
+--
+За да промените настройките на списъка си за наблюдение, посетете {{fullurl:{{ns:special}}:Watchlist/edit}}
+
+Обратна връзка и помощ: {{fullurl:{{ns:help}}:Contents}}',
+
+# Delete/protect/revert
+'deletepage'                  => 'Изтриване на страница',
+'confirm'                     => 'Потвърждение',
+'excontent'                   => 'съдържанието беше: „$1“',
+'excontentauthor'             => 'съдържанието беше: „$1“ (като единственият автор беше „$2“)',
+'exbeforeblank'               => 'съдържанието преди изпразването беше: „$1“',
+'exblank'                     => 'страницата беше празна',
+'confirmdelete'               => 'Потвърждение на изтриването',
+'deletesub'                   => '(Изтриване на „$1“)',
+'historywarning'              => 'Внимание: Страницата, която ще изтриете, има история:',
+'confirmdeletetext'           => 'На път сте безвъзвратно да изтриете страница или файл, заедно с цялата й (му) история, от базата от данни.
+Моля, потвърдете, че искате това, разбирате последствията и правите това в съответствие с нашата [[{{MediaWiki:policy-url}}|линия на поведение]].',
+'actioncomplete'              => 'Действието беше изпълнено',
+'deletedtext'                 => 'Страницата „$1“ беше изтрита. Вижте $2 за запис на последните изтривания.',
+'deletedarticle'              => 'изтрита „[[$1]]“',
+'dellogpage'                  => 'Дневник на изтриванията',
+'dellogpagetext'              => 'Списък на последните изтривания.',
+'deletionlog'                 => 'дневника на изтриванията',
+'reverted'                    => 'Възвръщане към предишна версия',
+'deletecomment'               => 'Причина за изтриването',
+'imagereverted'               => 'Възвръщането към предишна версия беше успешно.',
+'rollback'                    => 'Връщане назад на промените',
+'rollback_short'              => 'Връщане',
+'rollbacklink'                => 'връщане',
+'rollbackfailed'              => 'Връщането не сполучи',
+'cantrollback'                => 'Промяната не може да се извърши. Последният автор е единственият собственик на страницата.',
+'alreadyrolled'               => 'Редакцията на [[:$1]], направена от [[{{ns:user}}:$2|$2]] ([[{{ns:user_talk}}:$2|Беседа]]), не може да се върне назад. Някой друг вече е редактирал страницата или е върнал назад промените.
+
+Последната редакция е на [[{{ns:user}}:$3|$3]] ([[{{ns:user_talk}}:$3|Беседа]]).',
+'editcomment'                 => "Коментарът на редакцията е бил: „''$1''“.", # only shown if there is an edit comment
+'revertpage'                  => 'Премахване на [[{{ns:special}}:Contributions/$2|редакции на $2]], възвръщане към последната версия на $1',
+'sessionfailure'              => 'Явно има проблем с вашата сесия; действието беше отказано като предпазна мярка срещу крадене на сесията. Моля, натиснете бутона „back“ и презаредете страницата от която сте дошли и опитайте отново.',
+'protectlogpage'              => 'Дневник на защитата',
+'protectlogtext'              => 'Списък на защитите и техните сваляния за страницата.
+За повече информация вижте [[{{ns:project}}:Защитена страница]].',
+'protectedarticle'            => 'защитаване на „[[$1]]“',
+'unprotectedarticle'          => 'сваляне на защитата на „[[$1]]“',
+'protectsub'                  => '(Защитаване на „$1“)',
+'confirmprotecttext'          => 'Наистина ли искате да защитите страницата?',
+'confirmprotect'              => 'Потвърждение на защитата',
+'protectmoveonly'             => 'Защита само от премествания',
+'protectcomment'              => 'Причина за защитата',
+'protectexpiry'               => 'Изтичане',
+'protect_expiry_invalid'      => 'Времето на изтичане е невалидно.',
+'protect_expiry_old'          => 'Времето на изтичане лежи в миналото.',
+'unprotectsub'                => '(Сваляне на защитата на „$1“)',
+'confirmunprotecttext'        => 'Наистина ли искате да свалите защитата на страницата?',
+'confirmunprotect'            => 'Потвърдете свалянето на защитата',
+'unprotectcomment'            => 'Причина за сваляне на защитата',
+'protect-unchain'             => 'Позволяване на преместванията',
+'protect-text'                => 'Тук можете да прегледате и промените нивото на защита на страницата „[[$1]]“. Желателно е да се придържате към [[{{ns:project}}:Защитена страница|ръководните принципи на проекта]].',
+'protect-locked-blocked'      => 'Нямате правото да променяте нивата на защита на страниците, докато сте блокиран. Ето текущите настройки за страницата „<strong>$1</strong>“:',
+'protect-locked-dblock'       => 'Нивата на защита на страниците не могат да бъдат променяни, защото базата от данни е заключена. Ето текущите настройки за страницата „<strong>$1</strong>“:',
+'protect-locked-access'       => 'Нямате правото да променяте нивата на защита на страниците. Ето текущите настройки за страницата „<strong>$1</strong>“:',
+'protect-cascadeon'           => 'Тази страница е защитена против редактиране, защото е включена в следните страници, които от своя страна имат каскадна защита. Можете да промените нивото на защита на страницата, но това няма да повлияе върху каскадната защита.',
+'protect-default'             => '(по подразбиране)',
+'protect-level-autoconfirmed' => 'Блокиране на нерегистрирани потребители',
+'protect-level-sysop'         => 'Само за администратори',
+'protect-summary-cascade'     => 'каскадно',
+'protect-expiring'            => 'изтича на $1 (UTC)',
+'protect-cascade'             => 'Каскадна защита — защита на всички страници, включени в настоящата страница.',
+'restriction-type'            => 'Състояние на защитата',
+'restriction-level'           => 'Ниво на защитата',
+'minimum-size'                => 'Минимален размер (байта)',
+
+# Restrictions (nouns)
+'restriction-edit' => 'Редактиране',
+'restriction-move' => 'Преместване',
+
+# Restriction levels
+'restriction-level-sysop'         => 'пълна защита',
+'restriction-level-autoconfirmed' => 'полузащита',
+'restriction-level-all'           => 'всички',
+
+# Undelete
+'undelete'                 => 'Преглед на изтрити страници',
+'undeletepage'             => 'Преглед и възстановяване на изтрити страници',
+'viewdeletedpage'          => 'Преглед на изтрити страници',
+'undeletepagetext'         => 'Следните страници бяха изтрити, но се намират все още
+в архива и могат да бъдат възстановени. Архивът може да се почиства от време на време.',
+'undeleteextrahelp'        => "За пълно възстановяване на страницата не слагайте отметки и натиснете '''''Възстановяване!'''''.
+За частично възстановяване отметнете тези версии на страницата, които трябва да бъдат въстановени и натиснете '''''Възстановяване!'''''.
+Натиснете '''''Изчистване!''''', за да махнете всички отметки и да изчистите полето за коментар",
+'undeleterevisions'        => '{{PLURAL:$1|Една версия беше архивирана|$1 версии бяха архивирани}}',
+'undeletehistory'          => 'Ако възстановите страницата, всички версии ще бъдат върнати в историята.
+Ако след изтриването е създадена страница със същото име, възстановените версии ще се появят като по-ранна история, а текущата версия на страницата няма да бъде автоматично заменена.',
+'undeleterevdel'           => 'Възстановяването няма да бъде изпълнено, ако би довело до частично изтриване на актуалната версия. В такъв случай актуалната версия не трябва да бъде избирана или пък състоянието й трябва да бъде променено на нормална (нескрита) версия. Версиите на файлове, които нямате право да преглеждате, няма да бъдат възстановени.',
+'undeletehistorynoadmin'   => 'Тази страница е била изтрита. В резюмето отдолу е посочена причината за това, заедно с информация за потребителите, редактирали страницата преди изтриването й. Конкретното съдържание на изтритите версии е достъпно само за администратори.',
+'undelete-revision'        => 'Изтрита версия на $1 от $2:',
+'undeleterevision-missing' => 'Неправилна или липсваща версия. Може да сте последвали грешна препратка или указаната версия да е била възстановена или премахната от архива',
+'undeletebtn'              => 'Възстановяване!',
+'undeletereset'            => 'Изчистване!',
+'undeletecomment'          => 'Коментар:',
+'undeletedarticle'         => '„[[$1]]“ беше възстановена',
+'undeletedrevisions'       => '{{plural:$1|Една версия беше възстановена|$1 версии бяха възстановени}}',
+'undeletedrevisions-files' => '{{plural:$1|Една версия|$1 версии}} и {{plural:$1|един файл|$2 файла}} бяха възстановени',
+'undeletedfiles'           => '{{plural:$2|Един файл беше възстановен|$1 файла бяха възстановени}}',
+'cannotundelete'           => 'Грешка при възстановяването. Възможно е някой друг вече да е възстановил страницата.',
+'undeletedpage'            => "<big>'''Страницата „$1“ беше възстановена.'''</big>  Можете да видите последните изтрити и възстановени страници в [[{{ns:special}}:Log/delete|дневника на изтриванията.]]",
+'undelete-header'          => 'Прегледайте [[Special:Log/delete|дневника на изтриванията]] за текущо изтритите страници.',
+'undelete-search-box'      => 'Търсене на изтрити страници',
+'undelete-search-prefix'   => 'Показване на страници, започващи със:',
+'undelete-search-submit'   => 'Търсене',
+'undelete-no-results'      => 'Не са намерени страници, отговарящи на търсения критерий.',
+
+# Namespace form on various pages
+'namespace' => 'Именно пространство:',
+'invert'    => 'Обръщане на избора',
+
+# Contributions
+'contributions' => 'Приноси',
+'mycontris'     => 'Моите приноси',
+'contribsub2'    => 'За $1 ($2)',
+'nocontribs'    => 'Не са намерени промени, отговарящи на критерия.',
+'ucnote'        => "Показани са последните '''$1''' промени, извършени от този потребител през последните '''$2''' дни.",
+'uclinks'       => 'Показване на последните $1 промени; показване на последните $2 дни.',
+'uctop'         => ' (последна)',
+
+'sp-contributions-newest'      => 'Най-нови',
+'sp-contributions-oldest'      => 'Най-стари',
+'sp-contributions-newer'       => 'По-нови $1',
+'sp-contributions-older'       => 'По-стари $1',
+'sp-contributions-newbies'     => 'Показване само на приносите на нови потребители',
+'sp-contributions-newbies-sub' => 'на нови потребители',
+'sp-contributions-blocklog'    => 'Дневник на блокиранията',
+'sp-contributions-search'      => 'Търсене на приноси',
+'sp-contributions-username'    => 'IP-адрес или потребителско име:',
+'sp-contributions-submit'      => 'Търсене',
+
+'sp-newimages-showfrom' => 'Показване на новите изображения, като се започва от $1',
+
+# What links here
+'whatlinkshere'         => 'Какво сочи насам',
+'notargettitle'         => 'Няма цел',
+'notargettext'          => 'Не указахте целева страница или потребител, върху която/който да се изпълни действието.',
+'linklistsub'           => '(Списък с препратки)',
+'linkshere'             => "Следните страници сочат към '''[[:$1]]''':",
+'nolinkshere'           => "Няма страници, сочещи към '''[[:$1]]'''.",
+'nolinkshere-ns'        => "Няма страници, сочещи към '''[[:$1]]''' в избраното именно пространство.",
+'isredirect'            => 'пренасочваща страница',
+'istemplate'            => 'включване',
+'whatlinkshere-prev'    => '{{PLURAL:$1|предишна|предишни $1}}',
+'whatlinkshere-next'    => '{{PLURAL:$1|следваща|следващи $1}}',
+
+# Block/unblock
+'blockip'                     => 'Блокиране на потребител',
+'blockiptext'                 => 'Използвайте долния формуляр, за да забраните правото на писане
+на определен IP-адрес или потребител.
+Това трябва да се направи само, за да се предотвратят прояви на вандализъм,
+и в съответствие с  [[{{MediaWiki:policy-url}}|линията на поведение]] на {{SITENAME}}.
+Посочете също и причина за блокирането (например, заглавия на страници, станали обект на вандализъм).
+
+Срокът за изтичане на блокирането се въвежда според установения формат на ГНУ, описан в [http://www.gnu.org/software/tar/manual/html_chapter/tar_7.html ръководството], например: „1 hour“, „2 days“, „next Wednesday“, „1 January 2017“. Неограничено блокиране може да се зададе чрез „indefinite“ или „infinite“.',
+'ipaddress'                   => 'IP-адрес',
+'ipadressorusername'          => 'IP-адрес или потребител',
+'ipbexpiry'                   => 'Срок',
+'ipbreason'                   => 'Причина',
+'ipbreasonotherlist'          => 'Друга причина',
+'ipbreason-list'              => '
+*#Причини за блокиране на IP-адреси
+*вандализъм
+*спам
+*#Причини за блокиране на потребители
+*обиди
+*марионетка',
+'ipbanononly'                 => 'Блокиране само на анонимни потребители',
+'ipbcreateaccount'            => 'Забрана за създаване на потребителски сметки',
+'ipbenableautoblock'          => 'Автоматично блокиране на последния IP-адрес, използван от потребителя',
+'ipbsubmit'                   => 'Блокиране на потребителя',
+'ipbother'                    => 'Друг срок',
+'ipboptions'                  => 'Два часа:2 hours,Един ден:1 day,Три дни:3 days,Една седмица:1 week,Две седмици:2 weeks,Един месец:1 month,Три месеца:3 months,Шест месеца:6 months,Една година:1 year,Докато свят светува:infinite',
+'ipbotheroption'              => 'друг',
+'ipbotherreason'              => 'Друга/допълнителна причина',
+'ipbhidename'                 => 'Скриване на потребителското име/IP-адрес в дневника на блокиранията, в списъка с текущите блокирания и в списъка на потребителите',
+'badipaddress'                => 'Невалиден IP-адрес или грешно име на потребител',
+'blockipsuccesssub'           => 'Блокирането беше успешно',
+'blockipsuccesstext'          => '„[[{{ns:special}}:Contributions/$1|$1]]“ беше блокиран.
+<br />Вижте [[{{ns:special}}:Ipblocklist|списъка на блокираните IP-адреси]], за да прегледате всички блокирания.',
+'ipb-unblock-addr'            => 'Отблокиране на $1',
+'ipb-unblock'                 => 'Отблокиране на потребителско име IP-адрес',
+'ipb-blocklist-addr'          => 'Преглед на текущите блокирания на $1',
+'ipb-blocklist'               => 'Преглед на текущите блокирания',
+'unblockip'                   => 'Отблокиране на потребител',
+'unblockiptext'               => 'Използвайте долния формуляр, за да възстановите правото на писане на по-рано блокиран IP-адрес или потребител.',
+'ipusubmit'                   => 'Отблокиране на адреса',
+'unblocked'                   => '[[{{ns:user}}:$1|$1]] беше отблокиран.',
+'ipblocklist'                 => 'Списък на блокирани IP-адреси и потребители',
+'ipblocklist-submit'          => 'Търсене',
+'blocklistline'               => '$1, $2 е блокирал $3 ($4)',
+'infiniteblock'               => 'неограничено',
+'expiringblock'               => 'изтича на $1',
+'anononlyblock'               => 'само анонимни',
+'noautoblockblock'            => 'автоблокировка отключена',
+'createaccountblock'          => 'създаването на сметка е блокирано',
+'ipblocklistempty'            => 'Списъкът на блокиранията е празен.',
+'blocklink'                   => 'блокиране',
+'unblocklink'                 => 'отблокиране',
+'contribslink'                => 'приноси',
+'autoblocker'                 => 'Бяхте автоматично блокиран, тъй като неотдавна IP-адресът ви е бил ползван от блокирания в момента потребител [[{{ns:user}}:$1|$1]]. Причината за неговото блокиране е: „$2“.',
+'blocklogpage'                => 'Дневник на блокиранията',
+'blocklogentry'               => 'блокиране на „[[$1]]“ със срок на изтичане $2 $3',
+'blocklogtext'                => 'Това е дневник на блокиранията и отблокиранията, извършени от този потребител. Автоматично блокираните IP-адреси не са показани. Вижте  [[{{ns:special}}:Ipblocklist|списъка на блокираните IP-адреси]] за текущото състояние на блокиранията.',
+'unblocklogentry'             => 'отблокиране на „$1“',
+'block-log-flags-anononly'    => 'само анонимни потребители',
+'block-log-flags-nocreate'    => 'невъзможно създаване на сметка',
+'block-log-flags-autoblock'   => 'включване на автоблокировача',
+'range_block_disabled'        => 'Възможността на администраторите да задават интервали при IP-адресите е изключена.',
+'ipb_expiry_invalid'          => 'Невалиден срок на изтичане.',
+'ipb_already_blocked'         => '„$1“ е вече блокиран',
+'ip_range_invalid'            => 'Невалиден интервал за IP-адреси.',
+'proxyblocker'                => 'Блокировач на проксита',
+'ipb_cant_unblock'            => 'Грешка: Не е намерен блок с номер $1. Вероятно потребителят е вече отблокиран.',
+'proxyblockreason'            => 'Вашият IP-адрес беше блокиран, тъй като е отворено прокси. Моля, свържете се с доставчика ви на интернет и го информирайте за този сериозен проблем в сигурността.',
+'proxyblocksuccess'           => 'Готово.',
+'sorbs'                       => 'SORBS DNSBL',
+'sorbsreason'                 => 'Вашият IP-адрес е записан като отворено прокси в [http://www.sorbs.net SORBS] DNSBL.',
+'sorbs_create_account_reason' => 'Вашият IP-адрес е записан като отворено прокси в [http://www.sorbs.net SORBS] DNSBL. Не можете да създадете сметка.',
+
+# Developer tools
+'lockdb'              => 'Заключване на базата от данни',
+'unlockdb'            => 'Отключване на базата от данни',
+'lockdbtext'          => 'Заключването на базата от данни ще попречи на всички потребители да редактират страници, да сменят своите настройки, да редактират своите списъци за наблюдение и на всички други техни действия, изискващи промени в базата от данни.
+Моля, потвърдете, че искате точно това и ще отключите базата от данни,
+когато привършите с работата по подръжката.',
+'unlockdbtext'        => 'Отключването на базата от данни ще възстанови способността на потребителите да редактират страници, да сменят своите настройки, да редактират своите списъци за наблюдение и изпълнението на всички други действия, изискващи промени в базата от данни.
+Моля, потвърдете, че искате точно това.',
+'lockconfirm'         => 'Да, наистина искам да заключа базата от данни.',
+'unlockconfirm'       => 'Да, наистина искам да отключа базата от данни.',
+'lockbtn'             => 'Заключване на базата от данни',
+'unlockbtn'           => 'Отключване на базата от данни',
+'locknoconfirm'       => 'Не сте отметнали кутийката за потвърждение.',
+'lockdbsuccesssub'    => 'Заключването на базата от данни беше успешно',
+'unlockdbsuccesssub'  => 'Отключването на базата от данни беше успешно',
+'lockdbsuccesstext'   => 'Базата от данни на {{SITENAME}} беше заключена.
+<br />Не забравяйте да отключите базата от данни, когато привършите с работата по поддръжката.',
+'unlockdbsuccesstext' => 'Базата от данни на {{SITENAME}} беше отключена.',
+'lockfilenotwritable' => 'Няма права за запис във файла за заключване на базата данни. За да заключи или отключи базата данни уеб-сървърът трябва да има права за запис.',
+'databasenotlocked'   => 'Базата от данни не е заключена.',
+
+# Move page
+'movepage'                => 'Преместване на страница',
+'movepagetext'            => "Посредством долния формуляр можете да преименувате страница, премествайки цялата й история на новото име. Старото заглавие ще се превърне в пренасочваща страница.
+Препратките към старата страница няма да бъдат променени; затова проверете за двойни или невалидни пренасочвания.
+Вие сами би трябвало да се убедите в това, дали препратките продължават да сочат там, където се предполага.
+
+Страницата '''няма''' да бъде преместена, ако вече съществува страница с новото име, освен ако е празна или пренасочване и няма редакционна история.
+
+'''ВНИМАНИЕ!'''
+Това може да е голяма и неочаквана промяна за известна страница. Уверете се, че разбирате последствията, преди да продължите.",
+'movepagetalktext'        => "Съответната дискусионна страница, ако съществува, ще бъде автоматично преместена заедно с нея, '''освен ако:'''
+* не местите страницата от едно именно пространство в друго,
+* вече съществува непразна дискусионна страница с това име или
+* не сте отметнали долната кутийка.
+
+В тези случаи, ако желаете, ще е необходимо да преместите страницата ръчно.",
+'movearticle'             => 'Преместване на страница',
+'movenologin'             => 'Не сте влезли',
+'movenologintext'         => 'Необходимо е да [[{{ns:special}}:Userlogin|влезете]], за да може да премествате страници.',
+'newtitle'                => 'Към ново заглавие',
+'move-watch'              => 'Наблюдаване на страницата',
+'movepagebtn'             => 'Преместване',
+'pagemovedsub'            => 'Преместването беше успешно',
+'pagemovedtext'           => 'Страницата „[[$1]]“ беше преместена под името „[[$2]]“.',
+'articleexists'           => 'Вече съществува страница с това име или името, което сте избрали, е невалидно. Моля, изберете друго име.',
+'talkexists'              => "'''Страницата беше успешно преместена, но без съответната дискусионна страница, защото под новото име има една съществуваща. Моля, обединете ги ръчно.'''",
+'movedto'                 => 'преместена като',
+'movetalk'                => 'Преместване и на дискусионната страница, ако е приложимо.',
+'talkpagemoved'           => 'Съответната дискусионна страница също беше преместена.',
+'talkpagenotmoved'        => 'Съответната дискусионна страница <strong>не</strong> беше преместена.',
+'1movedto2'               => '„[[$1]]“ преместена като „[[$2]]“',
+'1movedto2_redir'         => '„[[$1]]“ преместена като „[[$2]]“ (върху пренасочване)',
+'movelogpage'             => 'Дневник на преместванията',
+'movelogpagetext'         => 'По-долу е показан списък на преместванията.',
+'movereason'              => 'Причина',
+'revertmove'              => 'връщане',
+'delete_and_move'         => 'Изтриване и преместване',
+'delete_and_move_text'    => '== Наложително изтриване ==
+
+Целевата страница „[[$1]]“ вече съществува. Искате ли да я изтриете, за да освободите място за преместването?',
+'delete_and_move_confirm' => 'Да, искам да изтрия тази страница.',
+'delete_and_move_reason'  => 'Изтрита, за да се освободи място за преместване',
+'selfmove'                => 'Страницата не може да бъде преместена, тъй като целевото име съвпада с първоначалното й заглавие.',
+'immobile_namespace'      => 'Целевото заглавие е от специален тип. Не е възможно местенето на страници в това именно пространство.',
+
+# Export
+'export'            => 'Изнасяне на страници',
+'exporttext'        => "Тук можете да изнесете като XML текста и историята на една или повече страници. Получените данни можете да:
+* вмъкнете в друг сайт, използващ софтуера МедияУики,
+* обработвате или
+* просто запазите за лично ползване.
+
+За да изнесете няколко страници, въвеждайте всяко ново заглавие на '''нов ред'''. След това изберете дали искате само текущата версия (заедно с информация за последната редакция) или всички версии (заедно с текущата) на страницата.
+
+Ако желаете само текущата версия, бихте могли да използвате препратка от вида [[{{ns:special}}:Export/Пример]] за страницата [[Пример]].",
+'exportcuronly'     => 'Включване само на текущата версия, а не на цялата история',
+'exportnohistory'   => "----
+'''Важно:''' Изнасянето на пълната история на редакциите на страницата е заключен.",
+'export-submit'     => 'Изнасяне',
+'export-addcattext' => 'Добавяне на страници от категория:',
+'export-addcat'     => 'Добавяне',
+
+# Namespace 8 related
+'allmessages'               => 'Системни съобщения',
+'allmessagesname'           => 'Име',
+'allmessagesdefault'        => 'Текст по подразбиране',
+'allmessagescurrent'        => 'Текущ текст',
+'allmessagestext'           => 'Това е списък на системните съобщения, намиращи се в именното пространство „МедияУики“',
+'allmessagesnotsupportedUI' => 'Текущо избраният език за интерфейса <strong>$1</strong> не се поддържа от <em>Специални:AllMessages</em> на сайта.',
+'allmessagesnotsupportedDB' => 'Възможността за използване на страници от именното пространство „МедияУики“ за генериране на интерфейсните съобщения е изключена (<code>LocalSettings.php: wgUseDatabaseMessages = false</code>).',
+'allmessagesfilter'         => 'Филтриране на съобщенията по име:',
+'allmessagesmodified'       => 'Показване само на променените',
+
+# Thumbnails
+'thumbnail-more'  => 'Увеличаване',
+'missingimage'    => '<strong>Липсваща картинка</strong><br /><i>$1</i>',
+'filemissing'     => 'Липсващ файл',
+'thumbnail_error' => 'Грешка при създаване на миникартинка: $1',
+
+# Special:Import
+'import'                     => 'Внасяне на страници',
+'importinterwiki'            => 'Внасяне чрез Трансуики',
+'import-interwiki-text'      => 'Изберете уики и име на страницата.
+Датите на редакциите и имената на авторите ще бъдат запазени.
+Всички операции при внасянето от друго уики се записват в [[{{ns:special}}:Log/import|съответния дневник]].',
+'import-interwiki-history'   => 'Копиране на всички версии на страницата',
+'import-interwiki-submit'    => 'Внасяне',
+'import-interwiki-namespace' => 'Прехвърляне на страници към именно пространство:',
+'importtext'                 => 'Моля, изнесете файла от изходното уики, използвайки инструмента „{{ns:special}}:Export“, съхранете го на диска си и го качете тук.',
+'importstart'                => 'Внасяне на страници…',
+'import-revision-count'      => '$1 {{PLURAL:$1|версия|версии}}',
+'importnopages'              => 'Няма страници за внасяне.',
+'importfailed'               => 'Внасянето беше неуспешно: $1',
+'importunknownsource'        => 'Непознат тип файл',
+'importcantopen'             => 'Не е възможно да се отвори файла за внасяне',
+'importbadinterwiki'         => 'Невалидна уики препратка',
+'importnotext'               => 'Празно',
+'importsuccess'              => 'Внасянето беше успешно!',
+'importhistoryconflict'      => 'Съществува версия от историята, която си противоречи с тази (възможно е страницата да е била вече внесена)',
+'importnosources'            => 'Не са посочени източници за внасяне чрез Трансуики. Прякото качване на версионни истории не е позволено.',
+'importnofile'               => 'Файлът за внасяне не беше качен.',
+'importuploaderror'          => 'Имаше грешка при качването на файла за внасяне. Възможно е размерът му да е по-голям от позволения за качване.',
+
+# Import log
+'importlogpage'                    => 'Дневник на внасянията',
+'importlogpagetext'                => 'Административни внасяния на страници с редакционна история от други уикита.',
+'import-logentry-upload'           => '[[$1]] беше внесена от файл',
+'import-logentry-upload-detail'    => '{{PLURAL:$1|една версия|$1 версии}}',
+'import-logentry-interwiki'        => '$1 беше внесена от друго уики',
+'import-logentry-interwiki-detail' => '{{PLURAL:$1|една версия|$1 версии}} на $2 бяха внесени',
+
+# Tooltip help for the actions
+'tooltip-pt-userpage'             => 'Вашата потребителска страница',
+'tooltip-pt-anonuserpage'         => 'Потребителската страница за адреса, от който редактирате',
+'tooltip-pt-mytalk'               => 'Вашата дискусионна страница',
+'tooltip-pt-anontalk'             => 'Дискусия относно редакциите от този адрес',
+'tooltip-pt-preferences'          => 'Вашите настройки',
+'tooltip-pt-watchlist'            => 'Списък на страници, чиито промени сте избрали да наблюдавате',
+'tooltip-pt-mycontris'            => 'Списък на вашите приноси',
+'tooltip-pt-login'                => 'В момента не сте влезли. Насърчаваме ви да влезете, въпреки че не е задължително.',
+'tooltip-pt-anonlogin'            => 'Насърчаваме ви да влезете, въпреки че не е задължително.',
+'tooltip-pt-logout'               => 'Излизане от {{SITENAME}}',
+'tooltip-ca-talk'                 => 'Беседа относно страницата',
+'tooltip-ca-edit'                 => 'Можете да редактирате страницата. Моля, използвайте бутона за предварителен преглед преди да съхраните.',
+'tooltip-ca-addsection'           => 'Добавяне на коментар към страницата',
+'tooltip-ca-viewsource'           => 'Страницата е защитена. Можете да разгледате изходния й код.',
+'tooltip-ca-history'              => 'Предишни версии на страницата',
+'tooltip-ca-protect'              => 'Защитаване на страницата',
+'tooltip-ca-delete'               => 'Изтриване на страницата',
+'tooltip-ca-undelete'             => 'Възстановяване на изтрити редакции на страницата',
+'tooltip-ca-move'                 => 'Преместване на страницата',
+'tooltip-ca-watch'                => 'Добавяне на страницата към списъка ви за наблюдение',
+'tooltip-ca-unwatch'              => 'Премахване на страницата от списъка ви за наблюдение',
+'tooltip-search'                  => 'Претърсване на {{SITENAME}}',
+'tooltip-p-logo'                  => 'Началната страница',
+'tooltip-n-mainpage'              => 'Началната страница',
+'tooltip-n-portal'                => 'Информация за проекта',
+'tooltip-n-currentevents'         => 'Информация за текущите събития по света',
+'tooltip-n-recentchanges'         => 'Списък на последните промени в {{SITENAME}}',
+'tooltip-n-randompage'            => 'Случайна страница',
+'tooltip-n-help'                  => 'Помощната страница',
+'tooltip-n-sitesupport'           => 'Подкрепете {{SITENAME}}',
+'tooltip-t-whatlinkshere'         => 'Списък на всички страници, сочещи насам',
+'tooltip-t-recentchangeslinked'   => 'Последните промени на страници, сочени от тази страница',
+'tooltip-feed-rss'                => 'RSS feed за страницата',
+'tooltip-feed-atom'               => 'Atom feed за страницата',
+'tooltip-t-contributions'         => 'Показване на приносите на потребителя',
+'tooltip-t-emailuser'             => 'Изпращане на писмо на потребителя',
+'tooltip-t-upload'                => 'Качване на файлове',
+'tooltip-t-specialpages'          => 'Списък на всички специални страници',
+'tooltip-ca-nstab-main'           => 'Преглед на основната страница',
+'tooltip-ca-nstab-user'           => 'Преглед на потребителската страница',
+'tooltip-ca-nstab-media'          => 'Преглед на медийната страница',
+'tooltip-ca-nstab-special'        => 'Това е специална страница, която не може да се редактира.',
+'tooltip-ca-nstab-project'        => 'Преглед на проектната страница',
+'tooltip-ca-nstab-image'          => 'Преглед на страницата на файла',
+'tooltip-ca-nstab-mediawiki'      => 'Преглед на системното съобщение',
+'tooltip-ca-nstab-template'       => 'Преглед на шаблона',
+'tooltip-ca-nstab-help'           => 'Преглед на помощната страница',
+'tooltip-ca-nstab-category'       => 'Преглед на категорията',
+'tooltip-minoredit'               => 'Отбелязване на промяната като малка',
+'tooltip-save'                    => 'Съхраняване на промените',
+'tooltip-preview'                 => 'Предварителен преглед, моля, използвайте го преди да съхраните!',
+'tooltip-diff'                    => 'Показване на направените от вас промени по текста',
+'tooltip-compareselectedversions' => 'Показване на разликите между двете избрани версии на страницата',
+'tooltip-watch'                   => 'Добавяне на страницата към списъка ви за наблюдение',
+'tooltip-recreate'                => 'Възстановяване на страницата независимо, че е била изтрита',
+
+# Stylesheets
+'common.css'   => '/* Чрез редактиране на този файл ще промените всички облици */',
+'monobook.css' => '/* Чрез редактиране на този файл можете да промените облика Монобук */',
+
+# Scripts
+'common.js'   => '/* Този файл съдържа код на Джаваскрипт и се зарежда при всички потребители. */',
+'monobook.js' => '/* Остаряла страница: ползвайте [[МедияУики:Common.js]] */',
+
+# Metadata
+'nodublincore'      => 'Метданни Dublin Core RDF са забранени за този сървър.',
+'nocreativecommons' => 'Метаданни Creative Commons RDF са забранени за този сървър.',
+'notacceptable'     => 'Сървърът не може да предостави данни във формат, който да се разпознава от клиента ви.',
+
+# Attribution
+'anonymous'        => 'Анонимен потребител(и) на {{SITENAME}}',
+'siteuser'         => 'потребители на {{SITENAME}} $1',
+'lastmodifiedatby' => 'Последната промяна на страницата е извършена от $3 на $2, $1.', # $1 date, $2 time, $3 user
+'and'              => 'и',
+'othercontribs'    => 'Основаващо се върху работа на $1.',
+'others'           => 'други',
+'siteusers'        => 'потребителите на {{SITENAME}} $1',
+'creditspage'      => 'Библиография и източници',
+'nocredits'        => 'Няма въведени източници или библиография',
+
+# Spam protection
+'spamprotectiontitle'    => 'Филтър за защита от спам',
+'spamprotectiontext'     => 'Страницата, която искахте да съхраните, беше блокирана от филтъра против спам. Това обикновено е причинено от препратка към външен сайт.',
+'spamprotectionmatch'    => 'Следният текст предизвика включването на филтъра: $1',
+'subcategorycount'       => 'Тази категория има {{PLURAL:$1|една подкатегория|$1 подкатегории}}.',
+'categoryarticlecount'   => 'Тази категория съдържа {{PLURAL:$1|една страница|$1 страници}}.',
+'category-media-count'   => 'Категорията съдържа {{PLURAL:$1|един файл|$1 файла}}.',
+'listingcontinuesabbrev' => ' продълж.',
+'spambot_username'       => 'Спамочистач',
+'spam_reverting'         => 'Връщане на последната версия не съдържаща препратки към $1',
+'spam_blanking'          => 'Всички версии, съдържащи препратки към $1, изчистване',
+
+# Info page
+'infosubtitle'   => 'Информация за страницата',
+'numedits'       => 'Брой редакции (страница): $1',
+'numtalkedits'   => 'Брой редакции (дискусионна страница): $1',
+'numwatchers'    => 'Брой наблюдатели: $1',
+'numauthors'     => 'Брой различни автори (страница): $1',
+'numtalkauthors' => 'Брой различни автори (дискусионна страница): $1',
+
+# Math options
+'mw_math_png'    => 'Използване винаги на PNG',
+'mw_math_simple' => 'HTML при опростен TeX, иначе PNG',
+'mw_math_html'   => 'HTML по възможност, иначе PNG',
+'mw_math_source' => 'Оставяне като TeX (за текстови браузъри)',
+'mw_math_modern' => 'Препоръчително за нови браузъри',
+'mw_math_mathml' => 'MathML по възможност (експериментално)',
+
+# Patrolling
+'markaspatrolleddiff'                 => 'Отбелязване като проверена версия',
+'markaspatrolledtext'                 => 'Отбелязване на версията като проверена',
+'markedaspatrolled'                   => 'Проверена версия',
+'markedaspatrolledtext'               => 'Избраната версия беше отбелязана като проверена.',
+'rcpatroldisabled'                    => 'Патрулът е деактивиран',
+'rcpatroldisabledtext'                => 'Патрулът на последните промени е деактивиран',
+'markedaspatrollederror'              => 'Не е възможно да се отбележи като проверена',
+'markedaspatrollederrortext'          => 'Длъжни сте да зададете редакция, която да бъде отбелязана като проверена.',
+'markedaspatrollederror-noautopatrol' => 'Не е разрешено да маркирате своите редакции като проверени.',
+
+# Patrol log
+'patrol-log-page' => 'Дневник на патрула',
+'patrol-log-line' => 'отбеляза $1 от $2 като проверена $3',
+'patrol-log-auto' => '(автоматично)',
+'patrol-log-diff' => 'версия $1',
+
+# Image deletion
+'deletedrevision' => 'Изтрита стара версия $1.',
+
+# Browsing diffs
+'previousdiff' => '← Предишна разлика',
+'nextdiff'     => 'Следваща разлика →',
+
+# Media information
+'mediawarning'         => "'''Внимание''': Възможно е файлът да съдържа злонамерен програмен код, чието изпълнение да доведе до повреди в системата ви.
+<hr />",
+'imagemaxsize'         => 'Ограничаване на картинките на описателните им страници до:',
+'thumbsize'            => 'Размери на миникартинките:',
+'file-info'            => '(файлов размер: $1, MIME-тип: $2)',
+'file-info-size'       => '($1 × $2 пиксела, файлов размер: $3, MIME-тип: $4)',
+'file-nohires'         => '<small>Не е налична версия с по-висока разделителна способност.</small>',
+'file-svg'             => '<small>Това е скалиеруемо векторно изображение без загуби (SVG). Основен размер: $1 × $2 пиксела.</small>',
+'show-big-image'       => 'Пълна разделителна способност',
+'show-big-image-thumb' => '<small>Размер на предварителния преглед: $1 × $2 пиксела</small>',
+
+'newimages'         => 'Галерия на новите файлове',
+'showhidebots'      => '($1 на ботове)',
+'noimages'          => 'Няма нищо.',
+
+'passwordtooshort' => 'Паролата ви е прекалено къса: трябва да съдържа поне $1 знака.',
+
+# Metadata
+'metadata'          => 'Метаданни',
+'metadata-help'     => 'Файлът съдържа допълнителни данни, обикновено добавяни от цифровите апарати или скенери. Ако файлът е редактиран след създаването си, то някои параметри може да не съответстват на текущото изображение.',
+'metadata-expand'   => 'Показване на допълнителните данни',
+'metadata-collapse' => 'Скриване на допълнителните данни',
+'metadata-fields'   => 'EXIF данните, показани в това съобщение, ще бъдат включени на медийната страница, когато информационната таблица е сгъната. Останалите данни ще са скрити по подразбиране.
+* производител
+* модел
+* дата и време на създаване
+* време за експозиция
+* F (бленда)
+* фокусно разстояние',
+
+# EXIF tags
+'exif-imagewidth'                  => 'Ширина',
+'exif-imagelength'                 => 'Височина',
+'exif-bitspersample'               => 'Дълбочина на цвета (битове)',
+'exif-compression'                 => 'Вид компресия',
+'exif-photometricinterpretation'   => 'Pixel composition',
+'exif-orientation'                 => 'Ориентация',
+'exif-samplesperpixel'             => 'Number of components',
+'exif-planarconfiguration'         => 'Принцип на организация на данните',
+'exif-ycbcrsubsampling'            => 'Subsampling ratio of Y to C',
+'exif-ycbcrpositioning'            => 'Y and C positioning',
+'exif-xresolution'                 => 'Хоризонтална резолюция',
+'exif-yresolution'                 => 'Вертикална резолюция',
+'exif-resolutionunit'              => 'Unit of X and Y resolution',
+'exif-stripoffsets'                => 'Image data location',
+'exif-rowsperstrip'                => 'Number of rows per strip',
+'exif-stripbytecounts'             => 'Bytes per compressed strip',
+'exif-jpeginterchangeformat'       => 'Offset to JPEG SOI',
+'exif-jpeginterchangeformatlength' => 'Bytes of JPEG data',
+'exif-transferfunction'            => 'Transfer function',
+'exif-whitepoint'                  => 'White point chromaticity',
+'exif-primarychromaticities'       => 'Chromaticities of primarities',
+'exif-ycbcrcoefficients'           => 'Color space transformation matrix coefficients',
+'exif-referenceblackwhite'         => 'Pair of black and white reference values',
+'exif-datetime'                    => 'Дата и време на изменението на файла',
+'exif-imagedescription'            => 'Название на изображението',
+'exif-make'                        => 'Производител',
+'exif-model'                       => 'Модел на фотоапарата',
+'exif-software'                    => 'Използван софтуер',
+'exif-artist'                      => 'Автор',
+'exif-copyright'                   => 'Притежател на авторското право',
+'exif-exifversion'                 => 'Exif версия',
+'exif-flashpixversion'             => 'Поддържана версия Flashpix',
+'exif-colorspace'                  => 'Цветово пространство',
+'exif-componentsconfiguration'     => 'Meaning of each component',
+'exif-compressedbitsperpixel'      => 'Режим на компресия на образа',
+'exif-pixelydimension'             => 'Пълна ширина на изображението',
+'exif-pixelxdimension'             => 'Пълна височина на изображението',
+'exif-makernote'                   => 'Допълнителни данни на производителя',
+'exif-usercomment'                 => 'Допълнителни коментари',
+'exif-relatedsoundfile'            => 'Related audio file',
+'exif-datetimeoriginal'            => 'Дата и време на създаване',
+'exif-datetimedigitized'           => 'Date and time of digitizing',
+'exif-subsectime'                  => 'DateTime subseconds',
+'exif-subsectimeoriginal'          => 'DateTimeOriginal subseconds',
+'exif-subsectimedigitized'         => 'DateTimeDigitized subseconds',
+'exif-exposuretime'                => 'Време на експозиция',
+'exif-exposuretime-format'         => '$1 сек ($2)',
+'exif-fnumber'                     => 'F (бленда)',
+'exif-fnumber-format'              => 'f/$1',
+'exif-exposureprogram'             => 'Програма на експонацията',
+'exif-spectralsensitivity'         => 'Спектрална чувствителност',
+'exif-isospeedratings'             => 'Светлочувствителност ISO',
+'exif-oecf'                        => 'Optoelectronic conversion factor',
+'exif-shutterspeedvalue'           => 'Скорост на затвора',
+'exif-aperturevalue'               => 'Диаметър на обектива',
+'exif-brightnessvalue'             => 'Светлосила',
+'exif-exposurebiasvalue'           => 'Отклонение от експонацията',
+'exif-maxaperturevalue'            => 'Maximum land aperture',
+'exif-subjectdistance'             => 'Разстояние до обекта',
+'exif-meteringmode'                => 'Режим на измерване',
+'exif-lightsource'                 => 'Източник на светлина',
+'exif-flash'                       => 'Светкавица',
+'exif-focallength'                 => 'Фокусно разстояние',
+'exif-focallength-format'          => '$1 mm',
+'exif-subjectarea'                 => 'Subject area',
+'exif-flashenergy'                 => 'Мощност на светкавицата',
+'exif-spatialfrequencyresponse'    => 'Spatial frequency response',
+'exif-focalplanexresolution'       => 'Фокусна равнина X резолюция',
+'exif-focalplaneyresolution'       => 'Фокусна равнина Y резолюция',
+'exif-focalplaneresolutionunit'    => 'Единица за разделителна способност на фокалната равнина',
+'exif-subjectlocation'             => 'Subject location',
+'exif-exposureindex'               => 'Индекс на експонацията',
+'exif-sensingmethod'               => 'Метод на засичане',
+'exif-filesource'                  => 'Файлов източник',
+'exif-scenetype'                   => 'Вид сцена',
+'exif-cfapattern'                  => 'Стандартен цветови стил',
+'exif-customrendered'              => 'Допълнителна обработка на изображението',
+'exif-exposuremode'                => 'Режим на експонация',
+'exif-whitebalance'                => 'Баланс на бялото',
+'exif-digitalzoomratio'            => 'Съотношение на цифровото увеличение',
+'exif-focallengthin35mmfilm'       => 'Фокусно разстояние в 35 mm филм',
+'exif-scenecapturetype'            => 'Scene capture type',
+'exif-gaincontrol'                 => 'Scene control',
+'exif-contrast'                    => 'Контраст',
+'exif-saturation'                  => 'Наситеност',
+'exif-sharpness'                   => 'Острота',
+'exif-devicesettingdescription'    => 'Описание на настройките на апарата',
+'exif-subjectdistancerange'        => 'Subject distance range',
+'exif-imageuniqueid'               => 'Уникален идентификатор на изображението',
+'exif-gpsversionid'                => 'GPS tag version',
+'exif-gpslatituderef'              => 'Северна или южна ширина',
+'exif-gpslatitude'                 => 'Географска ширина',
+'exif-gpslongituderef'             => 'Източна или западна дължина',
+'exif-gpslongitude'                => 'Географска дължина',
+'exif-gpsaltituderef'              => 'Altitude reference',
+'exif-gpsaltitude'                 => 'Надморска височина',
+'exif-gpstimestamp'                => 'GPS време (атомен часвник)',
+'exif-gpssatellites'               => 'Satellites used for measurement',
+'exif-gpsstatus'                   => 'Receiver status',
+'exif-gpsmeasuremode'              => 'Метод за измерване',
+'exif-gpsdop'                      => 'Прецизност',
+'exif-gpsspeedref'                 => 'Единица за скорост',
+'exif-gpsspeed'                    => 'Скорост на GPS приемник',
+'exif-gpstrackref'                 => 'Reference for direction of movement',
+'exif-gpstrack'                    => 'Посока на движение',
+'exif-gpsimgdirectionref'          => 'Reference for direction of image',
+'exif-gpsimgdirection'             => 'Direction of image',
+'exif-gpsmapdatum'                 => 'Geodetic survey data used',
+'exif-gpsdestlatituderef'          => 'Reference for latitude of destination',
+'exif-gpsdestlatitude'             => 'Latitude destination',
+'exif-gpsdestlongituderef'         => 'Reference for longitude of destination',
+'exif-gpsdestlongitude'            => 'Longitude of destination',
+'exif-gpsdestbearingref'           => 'Reference for bearing of destination',
+'exif-gpsdestbearing'              => 'Bearing of destination',
+'exif-gpsdestdistanceref'          => 'Reference for distance to destination',
+'exif-gpsdestdistance'             => 'Distance to destination',
+'exif-gpsprocessingmethod'         => 'Name of GPS processing method',
+'exif-gpsareainformation'          => 'Name of GPS area',
+'exif-gpsdatestamp'                => 'GPS дата',
+'exif-gpsdifferential'             => 'Диференциална корекция на GPS',
+
+# EXIF attributes
+'exif-compression-1' => 'Некомпресиран',
+'exif-compression-6' => 'JPEG',
+
+'exif-photometricinterpretation-2' => 'RGB',
+'exif-photometricinterpretation-6' => 'YCbCr',
+
+'exif-unknowndate' => 'Неизвестна дата',
+
+'exif-orientation-1' => 'Нормално', # 0th row: top; 0th column: left
+'exif-orientation-2' => 'Отражение по хоризонталата', # 0th row: top; 0th column: right
+'exif-orientation-3' => 'Обърнато на 180°', # 0th row: bottom; 0th column: right
+'exif-orientation-4' => 'Отражение по вертикалата', # 0th row: bottom; 0th column: left
+'exif-orientation-5' => 'Обърнато на 90° срещу часовниковата стрелка и отразено по вертикалата', # 0th row: left; 0th column: top
+'exif-orientation-6' => 'Обърнато на 90° по часовниковата стрелка', # 0th row: right; 0th column: top
+'exif-orientation-7' => 'Обърнато на 90° по часовниковата стрелка и отразено по вертикалата', # 0th row: right; 0th column: bottom
+'exif-orientation-8' => 'Обърнато на 90° срещу часовниковата стрелка', # 0th row: left; 0th column: bottom
+
+'exif-planarconfiguration-1' => 'формат „chunky“',
+'exif-planarconfiguration-2' => 'формат „planar“',
+
+'exif-xyresolution-i' => '$1 dpi',
+'exif-xyresolution-c' => '$1 dpc',
+
+'exif-colorspace-1'      => 'sRGB',
+'exif-colorspace-ffff.h' => 'FFFF.H',
+
+'exif-componentsconfiguration-0' => 'не съществува',
+'exif-componentsconfiguration-1' => 'Y',
+'exif-componentsconfiguration-2' => 'Cb',
+'exif-componentsconfiguration-3' => 'Cr',
+'exif-componentsconfiguration-4' => 'R',
+'exif-componentsconfiguration-5' => 'G',
+'exif-componentsconfiguration-6' => 'B',
+
+'exif-exposureprogram-0' => 'Не е определено',
+'exif-exposureprogram-1' => 'Ръчна настройка',
+'exif-exposureprogram-2' => 'Нормална програма',
+'exif-exposureprogram-3' => 'Приоритет на блендата',
+'exif-exposureprogram-4' => 'Приоритет на скоростта',
+'exif-exposureprogram-5' => 'Creative program (biased toward depth of field)',
+'exif-exposureprogram-6' => 'Action program (biased toward fast shutter speed)',
+'exif-exposureprogram-7' => 'Режим „Портрет“ (за снимки в едър план, фонът не е на фокус)',
+'exif-exposureprogram-8' => 'Режим „Пейзаж“ (за пейзажни снимки, в които фонът е на фокус)',
+
+'exif-subjectdistance-value' => '$1 метра',
+
+'exif-meteringmode-0'   => 'Unknown',
+'exif-meteringmode-1'   => 'Average',
+'exif-meteringmode-2'   => 'CenterWeightedAverage',
+'exif-meteringmode-3'   => 'Spot',
+'exif-meteringmode-4'   => 'MultiSpot',
+'exif-meteringmode-5'   => 'Pattern',
+'exif-meteringmode-6'   => 'Partial',
+'exif-meteringmode-255' => 'Other',
+
+'exif-lightsource-0'   => 'неизвестно',
+'exif-lightsource-1'   => 'дневна светлина',
+'exif-lightsource-2'   => 'Флуоресцентно осветление',
+'exif-lightsource-3'   => 'Волфрамово осветление',
+'exif-lightsource-4'   => 'Светкавица',
+'exif-lightsource-9'   => 'хубаво време',
+'exif-lightsource-10'  => 'облачно',
+'exif-lightsource-11'  => 'Сянка',
+'exif-lightsource-12'  => 'Daylight fluorescent (D 5700–7100K)',
+'exif-lightsource-13'  => 'Day white fluorescent (N 4600–5400K)',
+'exif-lightsource-14'  => 'Cool white fluorescent (W 3900–4500K)',
+'exif-lightsource-15'  => 'White fluorescent (WW 3200–3700K)',
+'exif-lightsource-17'  => 'Standard light A',
+'exif-lightsource-18'  => 'Standard light B',
+'exif-lightsource-19'  => 'Standard light C',
+'exif-lightsource-20'  => 'D55',
+'exif-lightsource-21'  => 'D65',
+'exif-lightsource-22'  => 'D75',
+'exif-lightsource-23'  => 'D50',
+'exif-lightsource-24'  => 'Студийна лампа стандарт ISO',
+'exif-lightsource-255' => 'друг източник на светлина',
+
+'exif-focalplaneresolutionunit-2' => 'инчове',
+
+'exif-sensingmethod-1' => 'Undefined',
+'exif-sensingmethod-2' => 'One-chip color area sensor',
+'exif-sensingmethod-3' => 'Two-chip color area sensor',
+'exif-sensingmethod-4' => 'Three-chip color area sensor',
+'exif-sensingmethod-5' => 'Color sequential area sensor',
+'exif-sensingmethod-7' => 'Trilinear sensor',
+'exif-sensingmethod-8' => 'Color sequential linear sensor',
+
+'exif-filesource-3' => 'цифров фотоапарат',
+
+'exif-scenetype-1' => 'A directly photographed image',
+
+'exif-customrendered-0' => 'нормален процес',
+'exif-customrendered-1' => 'нестандартна обработка',
+
+'exif-exposuremode-0' => 'автоматична експозиция',
+'exif-exposuremode-1' => 'ръчна експозиция',
+'exif-exposuremode-2' => 'Auto bracket',
+
+'exif-whitebalance-0' => 'Автоматичен баланс на бялото',
+'exif-whitebalance-1' => 'Ръчно определяне на баланса на бялото',
+
+'exif-scenecapturetype-0' => 'Стандартен',
+'exif-scenecapturetype-1' => 'Ландшафт',
+'exif-scenecapturetype-2' => 'Портрет',
+'exif-scenecapturetype-3' => 'Нощна сцена',
+
+'exif-gaincontrol-0' => 'Нищо',
+'exif-gaincontrol-1' => 'Неголямо увеличение',
+'exif-gaincontrol-2' => 'Голямо увеличение',
+'exif-gaincontrol-3' => 'Неголямо намаление',
+'exif-gaincontrol-4' => 'Силно намаление',
+
+'exif-contrast-0' => 'Нормално',
+'exif-contrast-1' => 'Слабо повишение',
+'exif-contrast-2' => 'Силно повишение',
+
+'exif-saturation-0' => 'Нормално',
+'exif-saturation-1' => 'Неголяма наситеност',
+'exif-saturation-2' => 'Голяма наситеност',
+
+'exif-sharpness-0' => 'Нормално',
+'exif-sharpness-1' => 'по-меко',
+'exif-sharpness-2' => 'по-остро',
+
+'exif-subjectdistancerange-0' => 'Неизвестно',
+'exif-subjectdistancerange-1' => 'Macro',
+'exif-subjectdistancerange-2' => 'Близко',
+'exif-subjectdistancerange-3' => 'Далечно',
+
+# Pseudotags used for GPSLatitudeRef and GPSDestLatitudeRef
+'exif-gpslatitude-n' => 'северна ширина',
+'exif-gpslatitude-s' => 'южна ширина',
+
+# Pseudotags used for GPSLongitudeRef and GPSDestLongitudeRef
+'exif-gpslongitude-e' => 'източна дължина',
+'exif-gpslongitude-w' => 'западна дължина',
+
+'exif-gpsstatus-a' => 'Measurement in progress',
+'exif-gpsstatus-v' => 'Measurement interoperability',
+
+'exif-gpsmeasuremode-2' => '2-dimensional measurement',
+'exif-gpsmeasuremode-3' => '3-dimensional measurement',
+
+# Pseudotags used for GPSSpeedRef and GPSDestDistanceRef
+'exif-gpsspeed-k' => 'км/час',
+'exif-gpsspeed-m' => 'мили/час',
+'exif-gpsspeed-n' => 'възли',
+
+# Pseudotags used for GPSTrackRef, GPSImgDirectionRef and GPSDestBearingRef
+'exif-gpsdirection-t' => 'истинска',
+'exif-gpsdirection-m' => 'магнитна',
+
+# External editor support
+'edit-externally'      => 'Редактиране на файла чрез външно приложение',
+'edit-externally-help' => 'За повече информация прегледайте [http://meta.wikimedia.org/wiki/Help:External_editors указанията за настройките].',
+
+# 'all' in various places, this might be different for inflected languages
+'recentchangesall' => 'всички',
+'imagelistall'     => 'всички',
+'watchlistall1'    => 'всички',
+'watchlistall2'    => 'всички',
+'namespacesall'    => 'Всички',
+
+# E-mail address confirmation
+'confirmemail'            => 'Потвърждаване на адрес за електронна поща',
+'confirmemail_noemail'    => 'Не сте посочили валиден адрес за електронна поща в [[{{ns:special}}:Preferences|настройки си]].',
+'confirmemail_text'       => '{{SITENAME}} изисква да потвърдите адреса си за електронна поща преди да използвате възможностите за е-поща. Натиснете долния бутон, за да ви бъде изпратено писмо, съдържащо специално генерирана препратка, чрез която ще можете да потвърдите валидността на адреса си.',
+'confirmemail_pending'    => '<div class="error">
+Кодът за потвърждение вече е изпратен. Ако току-що сте се регистрирали, изчакайте няколко минути да пристигне писмото, преди да поискате нов код.
+</div>',
+'confirmemail_send'       => 'Изпращане на код за потвърждение',
+'confirmemail_sent'       => 'Кодът за потвърждение беше изпратен.',
+'confirmemail_oncreate'   => 'Код за потвърждение беше изпратен на електронната ви поща.
+Този код не е необходим за влизане, но ще ви трябва при активирането на функциите в {{SITENAME}}, изискващи валидна електронна поща.',
+'confirmemail_sendfailed' => 'Кодът за потвърждение не можа да бъде изпратен. Проверете адреса си за недопустими знаци.
+Изпращачът на е-поща отвърна: $1',
+'confirmemail_invalid'    => 'Грешен код за потвърждение. Възможно е кодът да е остарял.',
+'confirmemail_needlogin'  => 'Длъжни сте да $1, за да потвърдите адреса на електронната си поща.',
+'confirmemail_success'    => 'Адресът ви за електронна поща беше потвърден. Вече можете да влезете и да се наслаждавате на уикито.',
+'confirmemail_loggedin'   => 'Адресът ви за електронна поща беше потвърден.',
+'confirmemail_error'      => 'Станала е грешка при потвърждаването на адреса ви.',
+'confirmemail_subject'    => '{{SITENAME}} — Потвърждаване на адрес за е-поща',
+'confirmemail_body'       => 'Някой, вероятно вие, от IP-адрес $1, е регистрирал потребител „$2“ в {{SITENAME}}, като е посочил този адрес за електронна поща.
+
+За да потвърдите, че сметката в {{SITENAME}} и настоящият пощенски адрес са ваши, заредете долната препратка в браузъра си:
+
+$3
+
+Ако някой друг е направил регистрацията в {{SITENAME}} и не желаете да я потвърждавате, не следвайте препратката. Кодът за потвърждение ще загуби валидност след $4.',
+
+# Inputbox extension, may be useful in other contexts as well
+'tryexact'       => 'Пълно и точно съвпадение',
+'searchfulltext' => 'Претърсване на целия текст',
+'createarticle'  => 'Създаване на статия',
+
+# Scary transclusion
+'scarytranscludedisabled' => '[Включването между уикита е деактивирано]',
+'scarytranscludefailed'   => '[Зареждането на шаблона за $1 не сполучи]',
+'scarytranscludetoolong'  => '[Адресът е твърде дълъг; съжаляваме]',
+
+# Trackbacks
+'trackbackbox'      => '<div id="mw_trackbacks">
+Обратни следи за статията:<br />
+$1
+</div>',
+'trackbackremove'   => ' ([$1 Изтриване])',
+'trackbacklink'     => 'Обратна следа',
+'trackbackdeleteok' => 'Обратната следа беше изтрита.',
+
+# Delete conflict
+'deletedwhileediting' => 'Внимание: Страницата е била изтрита, след като сте започнали да я редактирате!',
+'confirmrecreate'     => "Потребителят [[{{ns:user}}:$1|$1]] ([[{{ns:user_talk}}:$1|беседа]]) е изтрил страницата, откакто сте започнали да я редактирате, давайки следното обяснение:
+: ''$2''
+Моля, потвърдете, че наистина желаете да създадете страницата отново.",
+'recreate'            => 'Ново създаване',
+
+# HTML dump
+'redirectingto' => 'Пренасочване към [[$1]]…',
+
+# action=purge
+'confirm_purge'        => 'Изчистване на складираното копие на страницата?
+
+$1',
+'confirm_purge_button' => 'Добре',
+
+'youhavenewmessagesmulti' => 'Получихте нови съобщения на $1',
+
+'searchcontaining' => "Търсене на статии, съдържащи ''$1''.",
+'searchnamed'      => "Търсене на статии, чиито имена съдържат ''$1''.",
+'articletitles'    => "Страници, започващи с ''$1''",
+'hideresults'      => 'Скриване на резултатите',
+
+# DISPLAYTITLE
+'displaytitle' => '(Препратка към тази страница — [[$1]])',
+
+'loginlanguagelabel' => 'Език: $1',
+
+# Multipage image navigation
+'imgmultipageprev'   => '&larr; предишна страница',
+'imgmultipagenext'   => 'следваща страница &rarr;',
+'imgmultigo'         => 'Отиване',
+'imgmultigotopre'    => 'Към страницата',
+'imgmultiparseerror' => 'Изглежда, че файлът е повреден, затова {{SITENAME}} не може да създаде списък на страници.',
+
+# Table pager
+'ascending_abbrev'         => 'възх',
+'descending_abbrev'        => 'низх',
+'table_pager_next'         => 'Следваща страница',
+'table_pager_prev'         => 'Предишна страница',
+'table_pager_first'        => 'Първа страница',
+'table_pager_last'         => 'Последна страница',
+'table_pager_limit'        => 'Показване на $1 записа на страница',
+'table_pager_limit_submit' => '>>',
+'table_pager_empty'        => 'Няма резултати',
+
+# Auto-summaries
+'autosumm-blank'   => 'Премахване на цялото съдържание на страницата',
+'autosumm-replace' => 'Заместване на съдържанието на страницата със „$1“',
+'autoredircomment' => 'Пренасочване към [[$1]]', # This should be changed to the new naming convention, but existed beforehand
+'autosumm-new'     => 'Нова страница: $1',
+
+# Size units
+'size-bytes'     => '$1 B',
+'size-kilobytes' => '$1 KB',
+'size-megabytes' => '$1 MB',
+'size-gigabytes' => '$1 GB',
+
+# Live preview
+'livepreview-loading' => 'Зарежда се…',
+'livepreview-ready'   => 'Зарежда се… Готово!',
+'livepreview-failed'  => 'Бързият предварителен преглед не е възможен!
+Опитайте нормален предварителен преглед.',
+'livepreview-error'   => 'Връзката не сполучи: $1 "$2"
+Опитайте нормален предварителен преглед.',
+
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesBh.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesBh.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesBh.php	(revision 1280)
@@ -0,0 +1,20 @@
+<?php
+/** Bihara (भोजपुरी)
+  *
+  * @addtogroup Language
+  */
+
+$digitTransformTable = array(
+	'0' => '०',
+	'1' => '१',
+	'2' => '२',
+	'3' => '३',
+	'4' => '४',
+	'5' => '५',
+	'6' => '६',
+	'7' => '७',
+	'8' => '८',
+	'9' => '९',
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesBm.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesBm.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesBm.php	(revision 1280)
@@ -0,0 +1,8 @@
+<?php
+/** Bambara (Bamanankan)
+  *
+  * @addtogroup Language
+  */
+
+$fallback = 'fr';
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesBn.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesBn.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesBn.php	(revision 1280)
@@ -0,0 +1,132 @@
+<?php
+/** Bengali (বাংলা)
+  *
+  * @addtogroup Language
+  */
+
+$namespaceNames = array(
+	NS_SPECIAL        => 'বিশেষ',
+	NS_MAIN           => '',
+	NS_TALK           => 'আলাপ',
+	NS_USER           => 'ব্যবহারকারী',
+	NS_USER_TALK      => 'ব্যবহারকারী_আলাপ',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK   => '$1_আলাপ',
+	NS_IMAGE          => 'চিত্র',
+	NS_IMAGE_TALK     => 'চিত্র_আলাপ',
+	NS_MEDIAWIKI_TALK => 'MediaWiki_আলাপ'
+);
+$datePreferences = false;
+$digitTransformTable = array(
+	'0' => '০',
+	'1' => '১',
+	'2' => '২',
+	'3' => '৩',
+	'4' => '৪',
+	'5' => '৫',
+	'6' => '৬',
+	'7' => '৭',
+	'8' => '৮',
+	'9' => '৯'
+);
+
+
+$messages = array(
+# Dates
+
+'sunday' => 'রবিবার',
+'monday' => 'সোমবার',
+'tuesday' => 'মঙ্গলবার',
+'wednesday' => 'বুধবার',
+'thursday' => 'বৃহস্পতিবার',
+'friday' => 'শুক্রবার',
+'saturday' => 'শনিবার',
+'january' => 'জানুয়ারী',
+'february' => 'ফেব্রুয়ারী',
+'march' => 'মার্চ',
+'april' => 'এপ্রিল',
+'may_long' => 'মে',
+'june' => 'জুন',
+'july' => 'জুলাই',
+'august' => 'আগস্ট',
+'september' => 'সেপ্টেম্বর',
+'october' => 'অক্টোবর',
+'november' => 'নভেম্বর',
+'december' => 'ডিসেম্বর',
+'jan' => 'জানু',
+'feb' => 'ফেব্রু',
+'mar' => 'মার্চ',
+'apr' => 'এপ্রিল',
+'may' => 'মে',
+'jun' => 'জুন',
+'jul' => 'জুলাই',
+'aug' => 'আগস্ট',
+'sep' => 'সেপ্টে',
+'oct' => 'অক্টো',
+'nov' => 'নভে',
+'dec' => 'ডিসে',
+
+# Bits of text used by many pages:
+#
+
+'mainpage'    => 'প্রধান পাতা',
+'about'     => 'বৃত্তান্ত',
+'aboutsite'      => '{{SITENAME}}র বৃত্তান্ত', // TODO: grammar
+'aboutpage'   => '{{ns:project}}:বৃত্তান্ত',
+'help'      => 'সহায়িকা',
+'helppage'    => '{{ns:project}}:সহায়িকা',
+'bugreports'  => 'ত্রুটি বিবরণী',
+'bugreportspage' => '{{ns:project}}:ত্রুটি_বিবরণী',
+'faq'     => 'প্রশ্নোত্তর',
+'faqpage'   => '{{ns:project}}:প্রশ্নোত্তর',
+'edithelp'    => 'সম্পাদনা সহায়িকা',
+'edithelppage'  => '{{ns:project}}:কিভাবে_একটি_পৃষ্ঠা_সম্পাদনা_করবেন',
+'cancel'    => 'বাতিল কর',
+'qbfind'    => 'খঁুজে দেখ',
+'qbbrowse'    => 'ঘুরে দেখ',
+'qbedit'    => 'সম্পাদনা কর',
+'qbpageoptions' => 'এ পৃষ্ঠার বিকল্পসমূহ',
+'qbpageinfo'  => 'পৃষ্ঠা-সংক্রান্ত তথ্য',
+'qbmyoptions' => 'আমার পছন্দ',
+'mypage'    => 'আমার পাতা',
+'mytalk'    => 'আমার কথাবার্তা',
+'currentevents' => 'সমসাময়িক ঘটনা',
+'errorpagetitle' => 'ভুল',
+'returnto'    => 'ফিরে যাও $1.',
+'whatlinkshere' => 'যেসব পাতা থেকে এখানে সংযোগ আছে',
+'help'      => 'সহায়িকা',
+'search'    => 'খঁুজে দেখ',
+'searchbutton'    => 'খঁুজে দেখ',
+'go'    => 'চল',
+'searcharticle'    => 'চল',
+'history'   => 'এ পৃষ্ঠার ইতিহাস',
+'printableversion' => 'ছাপার যোগ্য সংস্করণ',
+'editthispage'  => 'এই পৃষ্ঠাটি সম্পাদনা করুন',
+'deletethispage' => 'এই পৃষ্ঠাটি মুছে ফেলুন',
+'protectthispage' => 'এই পৃষ্ঠাটি সংরক্ষণ করুন',
+'unprotectthispage' => 'এই পৃষ্ঠার সংরক্ষণ ছেড়ে দিন',
+'newpage' => 'নতুন পাতা',
+'talkpage'    => 'এই পৃষ্ঠা নিয়ে আলোচনা করুন',
+'articlepage' => 'নিবন্ধ দেখুন',
+'userpage' => 'ব্যাবহারকারীর পাতা দেখুন',
+'projectpage' => 'মেটা-পাতা দেখুন',
+'imagepage' =>  'ছবির পাতা দেখুন',
+'viewtalkpage' => 'আলোচনা দেখুন',
+'otherlanguages' => 'অন্যান্য ভাষা',
+'redirectedfrom' => '($1 থেকে ঘুরে এসেছে)',
+'lastmodifiedat'  => 'এ পৃষ্ঠায় শেষ পরিবর্তন হয়েছিল $2, $1.',
+'viewcount'   => 'এ পৃষ্ঠা দেখা হয়েছে $1 বার।',
+'nbytes'    => '$1 বাইট',
+'ok'      => 'ঠিক আছে',
+'retrievedfrom' => '\'$1\' থেকে আনীত',
+'newmessageslink' => 'নতুন বার্তা',
+'editsection'=>'সম্পাদনা করুন',
+'editold'=>'সম্পাদনা করুন',
+'toc' => 'সূচীপত্র',
+'showtoc' => 'দেখাও',
+'hidetoc' => 'সরিয়ে রাখ',
+
+);
+
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesBo.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesBo.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesBo.php	(revision 1280)
@@ -0,0 +1,19 @@
+<?php
+/** Tibetan (བོད་ཡིག)
+  *
+  * @addtogroup Language
+  */
+
+$digitTransformTable = array(
+	'0' => '༠',
+	'1' => '༡',
+	'2' => '༢',
+	'3' => '༣',
+	'4' => '༤',
+	'5' => '༥',
+	'6' => '༦',
+	'7' => '༧',
+	'8' => '༨',
+	'9' => '༩'
+);
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesBpy.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesBpy.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesBpy.php	(revision 1280)
@@ -0,0 +1,349 @@
+<?php
+/** Bishnupriya Manipuri (বিষ্ণুপ্রিয়া মণিপুরী)
+ *
+ * @addtogroup Language
+ * @Author Uttam Singha, Dec 2006
+ */
+$rtl = false;
+$namespaceNames = array(
+	NS_MEDIA          => 'মিডিয়া',
+	NS_SPECIAL        => 'বিশেষ',
+	NS_MAIN           => '',
+	NS_TALK           => 'য়্যারী',
+	NS_USER           => 'আতাকুরা',
+	NS_USER_TALK      => 'আতাকুরার_য়্যারী',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK   => '$1_য়্যারী',
+	NS_IMAGE          => 'ছবি',
+	NS_IMAGE_TALK     => 'ছবি_য়্যারী',
+	NS_MEDIAWIKI      => 'মিডিয়াউইকি',
+	NS_MEDIAWIKI_TALK => 'মিডিয়াউইকির_য়্যারী',
+	NS_TEMPLATE       => 'মডেল',
+	NS_TEMPLATE_TALK  => 'মডেলর_য়্যারী',
+	NS_HELP           => 'পাংলাক',
+	NS_HELP_TALK      => 'পাংলাকর_য়্যারী',
+	NS_CATEGORY       => 'থাক',
+	NS_CATEGORY_TALK  => 'থাকর_য়্যারী',
+);
+
+$messages = array(
+# Dates
+'sunday'    => 'লামুইসিং',
+'monday'    => 'নিংথৌকাপা',
+'tuesday'   => 'লেইপাকপা',
+'wednesday' => 'ইনসাইনসা',
+'thursday'  => 'সাকলসেন',
+'friday'    => 'ইরেই',
+'saturday'  => 'থাংচা',
+'january'   => 'জানুয়ারী',
+'february'  => 'ফেব্রুয়ারী',
+'march'     => 'মার্চ',
+'april'     => 'এপ্রিল',
+'may_long'  => 'মে',
+'june'      => 'জুন',
+'july'      => 'জুলাই',
+'august'    => 'আগস্ট',
+'september' => 'সেপ্টেম্বর',
+'october'   => 'অক্টোবর',
+'november'  => 'নভেম্বর',
+'december'  => 'ডিসেম্বর',
+'jan'       => 'জানু',
+'feb'       => 'ফেব্রু',
+'mar'       => 'মার্চ',
+'apr'       => 'এপ্রিল',
+'may'       => 'মে',
+'jun'       => 'জুন',
+'jul'       => 'জুলাই',
+'aug'       => 'আগস্ট',
+'sep'       => 'সেপ্টে',
+'oct'       => 'অক্টো',
+'nov'       => 'নভে',
+'dec'       => 'ডিসে',
+
+# Bits of text used by many pages
+'categories'      => 'বিষয়রথাকহানি',
+'category_header' => '"$1" বিষয়রথাকে আসে নিবন্ধহানি',
+
+'about'          => 'বারে',
+'cancel'         => 'বাতিল করেদে',
+'qbfind'         => 'বিসারিয়া চা',
+'qbbrowse'       => 'বুলিয়া চা',
+'qbedit'         => 'পতানি',
+'qbpageoptions'  => 'পাতা এহানর সারুক',
+'qbpageinfo'     => 'পাতা এহানর পৌ',
+'qbmyoptions'    => 'মর পছন',
+'qbspecialpages' => 'বিশেষ পাতাহানি',
+'mypage'         => 'মর পাতাহান',
+'mytalk'         => 'মর য়্যারি-পরি',
+'anontalk'       => 'অচিনা এগর য়্যারির পাতা',
+'navigation'     => 'দিশা-ধরুনী',
+
+'errorpagetitle'    => 'লাল',
+'returnto'          => 'আলথকে যাগা $1.',
+'tagline'           => 'মুক্ত বিশ্বকোষ উইকিপিডিয়াত্ত',
+'help'              => 'পাংলাক',
+'search'            => 'বিসারিয়া চা',
+'searchbutton'      => 'বিসারানি',
+'go'                => 'হাত',
+'searcharticle'     => 'হাত',
+'history_short'     => 'ইতিহাসহান',
+'printableversion'  => 'ছাপানি একরব সংস্করণ',
+'permalink'         => 'আকুবালা মিলাপ',
+'edit'              => 'পতানি',
+'editthispage'      => 'পাতা এহান পতিক',
+'delete'            => 'পুসানি',
+'deletethispage'    => 'পাতা এহান পুসে বেলিক',
+'protectthispage'   => 'পাতা এহান ইতু করিক',
+'unprotectthispage' => 'পাতা এহানর ইতু এরাদিক',
+'newpage'           => 'নুৱা পাতা',
+'talkpage'          => 'পাতা এহান্ন য়্যারি দিক',
+'specialpage'       => 'বিশেষ পাতাহান',
+'articlepage'       => 'নিবন্ধ চেইক',
+'talk'              => 'য়্যারী',
+'toolbox'           => 'আতিয়ার',
+'userpage'          => 'আতাকুরার পাতাহান চেইক',
+'projectpage'       => 'প্রকল্পর পাতাহান',
+'imagepage'         => 'ছবির পাতাহান চেইক',
+'categorypage'      => 'বিষয়থাকর পাতাহানি চা',
+'viewtalkpage'      => 'য়্যারীর পাতাহান চেইক',
+'otherlanguages'    => 'আরআর ঠারে',
+'redirectedfrom'    => '($1 -ত্ত পাকদিয়া আহিল)',
+'lastmodifiedat'    => 'পাতা এহানর লমিলগা পতানিহান $2, $1.', # $1 date, $2 time
+'viewcount'         => 'পাতা এহান $1 মাউ চানা ইল।',
+'jumptonavigation'  => 'দিশা ধরানি',
+
+# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
+'aboutsite'         => '{{SITENAME}}র বারে',
+'aboutpage'         => '{{ns:project}}:বারে',
+'bugreports'        => 'লাল বিবরণী',
+'bugreportspage'    => '{{ns:project}}:লাল_বিবরণী',
+'currentevents'     => 'হাদি এহানর ঘটনা',
+'currentevents-url' => 'হাদি এহানর ঘটনাহানি',
+'edithelp'          => 'পতানি পাংলাক',
+'edithelppage'      => '{{ns:project}}:কিসাদে_পাতা_আহান_পতানি',
+'faq'               => 'প্রশ্নরজুয়াপ',
+'faqpage'           => '{{ns:project}}:প্রশ্নরজুয়াপ',
+'helppage'          => '{{ns:project}}:পাংলাক',
+'mainpage'          => 'পয়লা পাতা',
+'portal'            => 'শিংলুপ',
+'portal-url'        => '{{ns:project}}:শিংলুপ',
+'sitesupport'       => 'দান দেনা',
+
+'badaccess' => 'য়্যাথাঙে লালসে',
+
+'ok'              => 'চুমিসে',
+'retrievedfrom'   => "'$1' -ত্ত আনানি অসে",
+'newmessageslink' => 'নুৱা পৌ',
+'editsection'     => 'পতিক',
+'editold'         => 'পতিক',
+'toc'             => 'মেথেল',
+'showtoc'         => 'ফংকর',
+'hidetoc'         => 'মেথেল আরুম কর',
+
+# Short words for each namespace, by default used in the 'article' tab in monobook
+'nstab-main'      => 'নিবন্ধ',
+'nstab-user'      => 'আতাকুরার পাতা',
+'nstab-special'   => 'বিশেষ',
+'nstab-project'   => 'প্রকল্প পাতা',
+'nstab-mediawiki' => 'পৌ',
+
+# General errors
+'error'              => 'লালুইসে',
+'cachederror'        => 'এরে পাতা এহান বা লাতলগ পুছানি নাকরল। (নিঙকরুরিতাঃ আগেদে কুঙগ আগই পুছে বেলাসিসাত)',
+'badarticleerror'    => 'এরে পাতা এহান কাম এহান করানি সম্ভব নেই।',
+'badtitle'           => 'শিরোনাঙহান গ্রহনযোগ্য নাইসে।',
+'protectedinterface' => 'পাতা এহানর মেথেল উইকি সফটওয়্যারর ইন্টারফেসর পৌহান দের, অহানে এহানরে ইতু করিয়া থনা অসে এবিউসেত্ত ঙাক্করানির কাজে।',
+
+# Login and logout pages
+'welcomecreation'            => '== সম্ভাষা, $1! ==
+
+তর একাউন্টহান মুকিল। তর {{SITENAME}} পছনহান পতানি না পাহুরিস।',
+'yourname'                   => 'আতাকুরার নাংহান (Username)',
+'yourpassword'               => 'খন্তাচাবিগ (password)',
+'yourpasswordagain'          => 'খন্তাচাবিগ (password) আরাকমু ইকর',
+'yourdomainname'             => 'তর ডোমেইনগ',
+'alreadyloggedin'            => '<strong>আতাকুরা $1, তি আগেত্তর ভিতরে হমিয়া আসতগহে!</strong><br />',
+'userlogin'                  => 'হমানি / নৱা একাউন্ট খুলানি',
+'userlogout'                 => 'নিকুলানি',
+'badretype'                  => 'খন্তাচাবি (password) দ্বিয়গি না মিলের।',
+'youremail'                  => 'ই-মেইল *:',
+'yourrealname'               => 'আৱৈপা নাংহান *:',
+'yourlanguage'               => 'ঠারহান:',
+'yournick'                   => 'দাহানির নাংহান:',
+'acct_creation_throttle_hit' => 'ঙাক্করেদিবাং, তি এবাকাপেয়া $1হান অ্যাকাউন্ট হংকরেবেলাসত৷ অতাত্ত বপ হঙকরানির য়্যাথাং নেই।৷',
+'accountcreated'             => 'একাউন্টহান হঙকরানি ইল',
+'accountcreatedtext'         => 'আতাকুরা $1 -র কা একাউন্টহান হঙকরানি ইল।',
+
+# Edit page toolbar
+'bold_sample' => 'গাঢ়পা ৱাহি',
+'bold_tip'    => 'গাঢ়পা ৱাহি',
+
+# Edit pages
+'minoredit'        => 'এহান হুরু-মুরু সম্পাদনাহানহে।',
+'watchthis'        => 'পাতাএহান খিয়ালে থ',
+'anoneditwarning'  => "'''সিঙুইসঃ''' তি লগইন নাকরিসত। পতানির ইতিহাসহাত তর IP addressহান সিজিল ইতই।",
+'blockedtitle'     => 'আতাকুরাগরে থেপ করানি অসে',
+'blockedtext'      => "তর আতাকুরা নাঙহান নাইলেউ আইপি ঠিকানাহানরে $1 থেপকরানি অসে। এহানর কারণহান অসেতাইঃ:<br />''$2''<p>তি $1 নাইলেউ [[{{MediaWiki:grouppage-sysop}}|প্রশাসকর]] মা যে কোন আগর লগে বিষয় এহান্ন য়্যারি পরি দে পারর। বিশেষ মাতিলতাঃ তর ই-মেইল ঠিকানাহান যদি [[Special:Preferences|তর পছন তালিকাত]] বরিয়া নাথার, অতা ইলে তি উইকিপিডিয়াত হের আতাকুরারে ই-মেইল করানি নুৱারবে। তর আইপি ঠিকানাহান ইলতাই $3। কৃপা করিয়া যে কোন যোগাযোগর সময়ত এরে ঠিকানা এহান যেসাদেউ বরিস।",
+'confirmedittitle' => 'সম্পাদনা করানির কা ই-মেইল লেপকানি থকিতই',
+'confirmedittext'  => 'যেহানউ সম্পাদনা করানির আগে তর ই-মেইল ঠিকানাহন যেসাদেউ লেপকরানি লাগতই। কৃপাকরিয়া তর ই-মেইল ঠিকানাহান [[special:Preferences|আতাকুরার পছনতালিকা]]ত চুমকরে বরা।',
+'accmailtitle'     => 'খন্তাচাবি(password) দিয়াপেঠৱা দিলাং।',
+'accmailtext'      => '"$1"-র খন্তাচাবি(password) $2-রাঙ দিয়াপেঠৱাদেনা ইল।',
+'anontalkpagetext' => "''এহান অচিনা অতার য়্যারির পাতাহান। এরে আইপি ঠিকানা (IP Address) এহানাত্ত লগ-ইন নাকরিয়া পতানিত মেইক্ষু অসিল। আক্কুস ক্ষেন্তামে আইপি ঠিকানা হামেসা বদল অর, বিশেষ করিয়া ডায়াল-আপ ইন্টারনেট, প্রক্সি সার্ভার মাহি ক্ষেত্র এতা সিলরতা, বারো আগত্ত বপ ব্যবহারকারেকুরার ক্ষেত্রত প্রযোজ্য ইতে পারে। অহানে তি নিশ্চকে এরে আইপি এহাত্ত উইকিপিডিয়াত হমিয়া কোন য়্যারী দেখর, অহান তরে নিঙকরিয়া নাউ ইতে পারে। অহানে হাবিত্ত হবা অর, তি যদি [[{{ns:Special}}:Userlogin|লগ-ইন করর, বা নৱা একাউন্ট খুলর]] অহানবুলতেউ লগ-ইন করলে কুঙগউ তর আইপি ঠিকানাহান, বারো অহানর মাতুঙে তর অবস্থানহান সুপকরেউ হার না পেইবা।''",
+'clearyourcache'   => "'''খিয়াল থ:''' তর পছনহানি রক্ষা করানির থাঙনাত পতাহানি চানার কা তর ব্রাউজারর ক্যাশ লালুয়া যানা লাগতে পারে। '''মোজিলা/ফায়ারফক্স/সাফারি:''' শিফট কী চিপিয়া থয়া রিলোড-এ ক্লিক কর, নাইলে ''কন্ট্রোল-শিফট-R''(এপল ম্যাক-এ ''কমান্ড-শিফট-R'') আকপাকে চিপা; '''ইন্টারনেট এক্সপ্লোরার:''' ''কন্ট্রোল'' চিপিয়া থয়া রিফ্রেশ-এ ক্লিক কর, নাইলে ''কন্ট্রোল-F5'' চিপা; '''কংকারার:''' হুদ্দা রিলোড ক্লিক করলে বা F5 চিপিলে চলতই; '''অপেরা''' আতাকুরাই ''Tools→Preferences''-এ গিয়া কাশ সম্পূর্ণ ঙক্ষি করানি লাগতে পারে।",
+'yourtext'         => 'তর ইকরা বিষয়হানি',
+'yourdiff'         => 'ফারাকহানি',
+
+# History pages
+'currentrev'          => 'হাদিএহানর পতানি',
+'currentrevisionlink' => 'হাদি এহানর পতানি',
+'histlegend'          => 'ফারাক (Diff) বাছানি: যে সংস্করণহানি তুলনা করানি চার, অহান লেপকরিয়া এন্টার বা তলর খুথামগত যাতা।<br />
+নির্দেশিকা: (এব) = এবাকার সংস্করণহানর লগে ফারাক,(আ) =  জানে আগে-আগে গেলগা সংস্করণহানর লগে ফারাক, হ = হুরু-মুরু (নামাতলেউ একরব অসারে) সম্পাদনাহান।',
+'histfirst'           => 'হাব্বিত্ত পুরানা',
+'histlast'            => 'হাব্বিত্ত নুৱা',
+
+# Diffs
+'compareselectedversions' => 'বাসাইল সংস্করণহানি তুলনা কর',
+
+# Search results
+'blanknamespace' => '(গুরি)',
+
+# Preferences page
+'changepassword' => 'খন্তাচাবি(password) পতা',
+'saveprefs'      => 'ইতু',
+'columns'        => 'দুরগিঃ',
+'allowemail'     => 'আরতা(ব্যবহার করেকুরা)ই ইমেইল করানির য়্যাথাং দে।',
+
+# Recent changes
+'changes'         => 'পতানিহানি',
+'recentchanges'   => 'হাদিএহান পতাসিতা',
+'diff'            => 'ফারাক',
+'hist'            => 'ইতিহাসহান',
+'hide'            => 'আরুম',
+'minoreditletter' => 'হ',
+'newpageletter'   => 'নু',
+'boteditletter'   => 'ব',
+
+# Upload
+'upload'          => 'আপলোড ফাইল',
+'uploadbtn'       => 'আপলোড',
+'badfilename'     => 'ফাইলগর নাঙহান পতিয়া $1" করানি ইল।',
+'savefile'        => 'ফাইল ইতু',
+'watchthisupload' => 'পাতাএহান খিয়ালে থ',
+
+# Image list
+'imagelist'  => 'ছবির তালিকা',
+'ilsubmit'   => 'বিসারা',
+'byname'     => 'নাঙর সিজিলন',
+'bydate'     => 'তারিখর সিজিলন',
+'bysize'     => 'আকারহানর সিজিলন',
+'imagelinks' => 'জুরিসিতা',
+
+'brokenredirects' => 'বারো-নির্দেশ কামনাকরের',
+
+# Miscellaneous special pages
+'nbytes'              => '$1 বাইট',
+'allpages'            => 'হাবি পাতাহানি',
+'randompage'          => 'খাংদা পাতা',
+'specialpages'        => 'বিশেষ পাতাহানি',
+'recentchangeslinked' => 'সাকেই আসে পতা',
+'ancientpages'        => 'পুরানা পাতাহানি',
+'move'                => 'থেইকরানি',
+
+# Book sources
+'booksources' => 'লেরিকর উৎসহান',
+
+'categoriespagetext' => 'ইমারঠারর উইকিপিডিয়াত এবাকার বিষয়রথাক:',
+'alphaindexline'     => '$1 ত $2',
+
+# Special:Allpages
+'allpagesfrom'     => 'যেহাত্ত অকরিসি অহাত্ত পাতাহানি দেহাদেঃ',
+'allarticles'      => 'নিবন্ধহাবি',
+'allinnamespace'   => 'পাতাহানি হাবি ($1 নাঙরজাগা)',
+'allpagesprev'     => 'আলথকে',
+'allpagesnext'     => 'থাঙনাত',
+'allpagessubmit'   => 'হাত',
+'allpagesprefix'   => 'মেয়েক এগন অকরিসি ৱাহির পাতাহানি দেহাদেঃ',
+
+# Watchlist
+'watchlist'       => 'মর তালাবি',
+'mywatchlist'       => 'মর তালাবি',
+'addedwatch'      => 'তালাবির তালিকাহাত থনা ইল',
+'addedwatchtext'  => "\"\$1\" পাতা এহান তর [[Special:Watchlist|আহির-আরুম তালিকা]]-ত তিলকরানি ইল। পিসেদে এরে পাতা এহান বারো পাতা এহানর লগে সাকেই আসে য়্যারী পাতাত অইতই হারি জাতর পতানি এহানাত তিলকরানি অইতই। অতাবাদেউ [[Special:Recentchanges|হাদি এহানর পতানিহানি]]-ত পাতা এহানরে '''গাঢ়করা''' মেয়েকে দেহা দেনা অইতই যাতে তি নুঙিকরে পাতা এহান চিনে পারবেতা। <p>পিসেদে তি পাতা এহানরে থেইকরানি মনেইলে \"আহির-আরুমেত্ত থেইকরেদে\" ট্যাবগত ক্লিক করিস৷",
+'watch'           => 'তালাবি',
+'watchthispage'   => 'পাতাএহান খিয়ালে থ',
+'unwatch'         => 'তালাবি নেই',
+'unwatchthispage' => 'তালাবি এরাদেনা',
+
+'changed' => 'পতেসে',
+
+# Delete/protect/revert
+'confirm'        => 'লেপকরানি',
+'confirmdelete'  => 'পুসানিহান লেপকর',
+'actioncomplete' => 'কামহান লমিল।',
+'cantrollback'   => 'আগেকার সঙস্করনহাত আলথকে যানা নুৱারলু, লমিলগা সম্পদনাকরেকুরা অগ পাতা অহানর আকখুলা লেখকগ।',
+
+# Restrictions (nouns)
+'restriction-edit' => 'পতানিহান_চিয়ৌকর',
+
+# Contributions
+'mycontris' => 'মর অবদান',
+
+# What links here
+'whatlinkshere' => 'যে পাতাহানিত্ত এহানাত মিলাপ আসে',
+
+# Block/unblock
+'blockip'            => 'আতাকুরাগরে থেপকর',
+'badipaddress'       => 'আইপি ঠিকানাহান গ্রহনযোগ্যনাইসে',
+'blockipsuccesssub'  => 'থেপকরানিহান চুমিল',
+'blockipsuccesstext' => '[[{{ns:Special}}:Contributions/$1|$1]] রে থেপকরিয়া থসি <br />থেপকরানিহান খাল করানি থকিলে,[[{{ns:Special}}:Ipblocklist| থেপকরিয়া থসি আইপি ঠিকানার তালিকাহান]] চা।',
+'blocklistline'      => '$1 তারিখে $2, $3 ($4) রে থেপকরানি অসে।',
+'blocklink'          => 'থেপ কর',
+'contribslink'       => 'অবদান',
+'blocklogpage'       => 'থেপকরানির log',
+'blocklogentry'      => '"[[$1]]"-রে $2 মেয়াদর কা থেপকরানি অসে।',
+
+# Move page
+'articleexists'           => 'ইতে পারে এরে শিরোনাঙর নিবন্ধহান হঙপরসেগা, নাইলে তি দিয়াসত শিরোনাং এহান দেনার য়্যাথাং নেই। কৃপা করিয়া আরাক শিরোনাং আহান দেনার হৎনা কর।',
+'delete_and_move'         => 'পুসানি বারো থেইকরানি',
+'delete_and_move_confirm' => 'হায়, পাতা এহান পুস',
+
+# Namespace 8 related
+'allmessages'         => 'সিস্টেমর পৌহানি',
+'allmessagesname'     => 'নাং',
+'allmessagescurrent'  => 'হাদি এহানর ৱাহি',
+'allmessagestext'     => 'তলে মিডিয়াউইকি: নাঙরজাগাত পানা একরের সিস্টেম পৌহানির তালিকাহান দেনা ইল।',
+'allmessagesmodified' => 'পতাসি অতা হুদ্দা দেহাদে',
+
+# Attribution
+'anonymous' => '{{SITENAME}}র বেনাঙর আতাকুরা(গি)',
+'and'       => 'বারো',
+
+# Spam protection
+'categoryarticlecount' => 'এরে বিষয়রথাকে $1হান নিবন্ধ আসে।',
+
+# Labels for User: and Title: on Special:Log pages
+'specialloguserlabel' => 'আতাকুরাগ:',
+
+# E-mail address confirmation
+'confirmemail'            => 'ই-মেইল ঠিকানাহান লেপকর',
+'confirmemail_send'       => 'লেপকরেকুরা কোডগ দিয়াপেঠাদে',
+'confirmemail_sent'       => 'লেপকরেকুরা ই-মেইলহান দিয়াপেঠা দিলাং।',
+'confirmemail_sendfailed' => 'লেপকরেকুরা ই-মেইলহান দিয়াপেঠাদে নুৱাররাং। ইমেইল ঠিকানাহান চুমকরে ইকরিসত্তানাকিতা আরাক আকমু খিয়াল করিয়া চা। আলথকে আহিলঃ $1',
+'confirmemail_invalid'    => 'লেপকরেকুরা কোডগ চুম নাইসে। সম্ভবতঃ এগ পুরানা ইয়া পরসেগা।',
+'confirmemail_success'    => 'তর ই-মেইল ঠিকানাহার লেপ্পাহান চুমিল। তি এবাকা হমানি(log in) পারর।',
+'confirmemail_loggedin'   => 'তর ই-মেইল ঠিকানাহার লেপকরানিহান চুমিল।',
+
+# action=purge
+'confirm_purge'        => 'পাতা এহানর ক্যাশহান ঙক্ষি করানি মনারতা? 
+
+$1',
+'confirm_purge_button' => 'চুমিসে',
+
+'articletitles' => "যে পাতাহানি ''$1'' ন অকরাগ, অতার তালিকা",
+
+# Auto-summaries
+'autoredircomment' => '[[$1]]-ত যানার বারো-র্নিদেশ করানি ইল', # This should be changed to the new naming convention, but existed beforehand
+
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesBr.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesBr.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesBr.php	(revision 1280)
@@ -0,0 +1,1965 @@
+<?php
+
+$namespaceNames = array(
+	NS_MEDIA          => 'Media',
+	NS_SPECIAL        => 'Dibar',
+	NS_MAIN           => '',
+	NS_TALK           => 'Kaozeal',
+	NS_USER           => 'Implijer',
+	NS_USER_TALK      => 'Kaozeadenn_Implijer',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK   => 'Kaozeadenn_$1',
+	NS_IMAGE          => 'Skeudenn',
+	NS_IMAGE_TALK     => 'Kaozeadenn_Skeudenn',
+	NS_MEDIAWIKI      => 'MediaWiki',
+	NS_MEDIAWIKI_TALK => 'Kaozeadenn_MediaWiki',
+	NS_TEMPLATE       => 'Patrom',
+	NS_TEMPLATE_TALK  => 'Kaozeadenn_Patrom',
+	NS_HELP           => 'Skoazell',
+	NS_HELP_TALK      => 'Kaozeadenn_Skoazell',
+	NS_CATEGORY       => 'Rummad',
+	NS_CATEGORY_TALK  => 'Kaozeadenn_Rummad'
+);
+
+$skinNames = array(
+	'standard'     => 'Standard',
+	'nostalgia'    => 'Melkoni',
+	'cologneblue'  => 'Glaz Kologn',
+	'smarty'       => 'Paddington',
+	'montparnasse' => 'Montparnasse',
+	'davinci'      => 'DaVinci',
+	'mono'         => 'Mono',
+	'monobook'     => 'MonoBook',
+	'myskin'       => 'MySkin'
+);
+
+$bookstoreList = array(
+	'Amazon.fr'    => 'http://www.amazon.fr/exec/obidos/ISBN=$1',
+	'alapage.fr'   => 'http://www.alapage.com/mx/?tp=F&type=101&l_isbn=$1&donnee_appel=ALASQ&devise=&',
+	'fnac.com'     => 'http://www3.fnac.com/advanced/book.do?isbn=$1',
+	'chapitre.com' => 'http://www.chapitre.com/frame_rec.asp?isbn=$1',
+);
+
+$datePreferences = false;
+$defaultDateFormat = 'dmy';
+$dateFormats = array(
+	'dmy time' => 'H:i',
+	'dmy date' => 'j M Y',
+	'dmy both' => 'j M Y "da" H:i',
+);
+
+$separatorTransformTable = array(',' => "\xc2\xa0", '.' => ',' );
+$linkTrail = "/^([a-zàâçéèêîôûäëïöüùÇÉÂÊÎÔÛÄËÏÖÜÀÈÙ]+)(.*)$/sDu";
+
+$messages = array(
+# User preference toggles
+'tog-underline'               => 'Liammoù islinennet',
+'tog-highlightbroken'         => 'Furmad al liammoù torr <a href="" class="new">evel-mañ</a> (pe : evel-se<a href="" class="internal">?</a>).',
+'tog-justify'                 => 'Rannbennadoù marzekaet',
+'tog-hideminor'               => "Kuzhat ar <i>C'hemmoù nevez</i> dister",
+'tog-extendwatchlist'         => 'Implijout ar roll evezhiañ gwellaet evit heuliañ an holl gemmoù',
+'tog-usenewrc'                => 'Kemmoù nevez gwellaet<br /> (gant merdeerioù zo hepken)',
+'tog-numberheadings'          => 'Niverenniñ emgefre an titloù',
+'tog-showtoolbar'             => 'Diskouez ar varrenn gant ar meuzioù skridaozañ',
+'tog-editondblclick'          => 'Daouglikañ evit kemmañ ur bajenn (JavaScript)',
+'tog-editsection'             => 'Kemmañ ur rann dre al liammoù [kemmañ]',
+'tog-editsectiononrightclick' => 'Kemmañ ur rann dre glikañ a-zehou<br /> war titl ar rann',
+'tog-showtoc'                 => 'Diskouez an daolenn<br /> (evit ar pennadoù zo ouzhpenn 3 rann enno)',
+'tog-rememberpassword'        => "Derc'hel soñj eus ma ger-tremen (toupin)",
+'tog-editwidth'               => 'Digeriñ ar prenestr skridaozañ en e led brasañ',
+'tog-watchcreations'          => 'Evezhiañ ar pajennoù krouet ganin',
+'tog-watchdefault'            => 'Evezhiañ ar pennadoù savet pe kemmet ganin',
+'tog-watchmoves'              => "Ouzhpennañ da'm roll evezhiañ ar pajennoù adanvet ganin",
+'tog-watchdeletion'           => "Ouzhpennañ da'm roll evezhiañ ar pajennoù diverket ganin",
+'tog-minordefault'            => "Sellet ouzh ar c'hemmoù degaset ganin<br /> evel kemmoù dister dre ziouer",
+'tog-previewontop'            => 'Rakwelet tres ar bajenn a-us ar prenestr skridaozañ',
+'tog-previewonfirst'          => 'Rakwelet tres ar bajenn kerkent hag an aozadenn gentañ',
+'tog-nocache'                 => 'Diweredekaat krubuilh ar pajennoù',
+'tog-enotifwatchlistpages'    => 'Kas ur postel din pa vez degaset kemmoù war ur bajenn evezhiet ganin',
+'tog-enotifusertalkpages'     => 'Kas ur postel din pa vez degaset kemmoù war ma fajenn gaozeal',
+'tog-enotifminoredits'        => 'Kas ur postel din, ha pa vije evit kemenn kemmoù dister',
+'tog-enotifrevealaddr'        => "Lakaat ma chomlec'h postel war wel er posteloù kemenn-diwall",
+'tog-shownumberswatching'     => 'Diskouez an niver a lennerien',
+'tog-fancysig'                => 'Sinadurioù diliamm (hep liamm emgefre)',
+'tog-externaleditor'          => 'Ober gant un skridaozer diavaez dre ziouer',
+'tog-externaldiff'            => "Ober gant ur c'heñverier diavaez dre ziouer",
+'tog-showjumplinks'           => 'Gweredekaat al liammoù "merdeiñ" ha "klask" e krec\'h ar pajennoù',
+'tog-uselivepreview'          => 'Implijout Rakwelet prim (JavaScript) (taol-arnod)',
+'tog-forceeditsummary'        => 'Kemenn din pa ne skrivan netra er stern diverrañ',
+'tog-watchlisthideown'        => "Kuzhat ma c'hemmoù er rollad evezhiañ",
+'tog-watchlisthidebots'       => 'Kuzhat kemmoù ar botoù er rollad evezhiañ',
+'tog-watchlisthideminor'      => "Kuzhat ar c'hemmoù dister er rollad evezhiañ",
+'tog-nolangconversion'        => "Diweredekaat an treiñ diforc'hioù yezh",
+'tog-ccmeonemails'            => 'Kas din un eilenn eus ar posteloù a gasan da implijerien all',
+'tog-diffonly'                => "Arabat diskouez danvez ar pennadoù dindan an diforc'hioù",
+
+'underline-always'  => 'Atav',
+'underline-never'   => 'Morse',
+'underline-default' => 'Diouzh ar merdeer',
+
+'skinpreview' => '(Rakwelet)',
+
+# Dates
+'sunday'        => 'Sul',
+'monday'        => 'Lun',
+'tuesday'       => 'Meurzh',
+'wednesday'     => "Merc'her",
+'thursday'      => 'Yaou',
+'friday'        => 'Gwener',
+'saturday'      => 'Sadorn',
+'sun'           => 'Sul',
+'mon'           => 'Lun',
+'tue'           => 'Meu',
+'wed'           => 'Mer',
+'thu'           => 'Meu',
+'fri'           => 'Gwe',
+'sat'           => 'Sad',
+'january'       => 'Genver',
+'february'      => "C'hwevrer",
+'march'         => 'Meurzh',
+'april'         => 'Ebrel',
+'may_long'      => 'Mae',
+'june'          => 'Mezheven',
+'july'          => 'Gouere',
+'august'        => 'Eost',
+'september'     => 'Gwengolo',
+'october'       => 'Here',
+'november'      => 'Du',
+'december'      => 'Kerzu',
+'january-gen'   => 'Genver',
+'february-gen'  => "C'hwevrer",
+'march-gen'     => 'Meurzh',
+'april-gen'     => 'Ebrel',
+'may-gen'       => 'Mae',
+'june-gen'      => 'Mezheven',
+'july-gen'      => 'Gouere',
+'august-gen'    => 'Eost',
+'september-gen' => 'Gwengolo',
+'october-gen'   => 'Here',
+'november-gen'  => 'Du',
+'december-gen'  => 'Kerzu',
+'jan'           => 'Gen',
+'feb'           => "C'hwe",
+'mar'           => 'Meu',
+'apr'           => 'Ebr',
+'may'           => 'Mae',
+'jun'           => 'Mez',
+'jul'           => 'Gou',
+'aug'           => 'Eos',
+'sep'           => 'Gwe',
+'oct'           => 'Her',
+'nov'           => 'Du',
+'dec'           => 'Kzu',
+
+# Bits of text used by many pages
+'categories'            => 'Roll ar rummadoù',
+'pagecategories'        => 'Rummadoù ar bajenn',
+'category_header'       => 'Niver a bennadoù er rummad "$1"',
+'subcategories'         => 'Isrummad',
+'category-media-header' => 'Restroù liesvedia er rummad "$1"',
+
+'mainpagetext'      => 'Meziant {{SITENAME}} staliet.',
+'mainpagedocfooter' => "Sellit ouzh [http://meta.wikimedia.org/wiki/Help:Contents Sturlevr an implijerien] evit gouzout hiroc'h war an doare da implijout ar meziant wiki.
+
+== Kregiñ ganti ==
+
+* [http://www.mediawiki.org/wiki/Help:Configuration_settings Configuration settings list]
+* [http://www.mediawiki.org/wiki/Help:FAQ MediaWiki FAQ]
+* [http://mail.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]",
+
+'about'          => 'Diwar-benn',
+'article'        => 'Pennad',
+'newwindow'      => '(digeriñ en ur prenestr nevez)',
+'cancel'         => 'Nullañ',
+'qbfind'         => 'Klask',
+'qbbrowse'       => 'Furchal',
+'qbedit'         => 'Kemmañ',
+'qbpageoptions'  => 'Pajenn an dibaboù',
+'qbpageinfo'     => 'Pajenn gelaouiñ',
+'qbmyoptions'    => 'Ma dibaboù',
+'qbspecialpages' => 'Pajennoù dibar',
+'moredotdotdot'  => "Ha muioc'h c'hoazh...",
+'mypage'         => 'Ma zammig pajenn',
+'mytalk'         => "Ma c'haozeadennoù",
+'anontalk'       => "Kaozeal gant ar chomlec'h IP-mañ",
+'navigation'     => 'Merdeiñ',
+
+# Metadata in edit box
+'metadata_help' => 'Metastlennoù :',
+
+'errorpagetitle'    => 'Fazi',
+'returnto'          => "Distreiñ d'ar bajenn $1.",
+'tagline'           => 'Eus {{SITENAME}}',
+'help'              => 'Skoazell',
+'search'            => 'Klask',
+'searchbutton'      => 'Klask',
+'go'                => 'Kas',
+'searcharticle'     => 'Mont',
+'history'           => 'Istor ar bajenn',
+'history_short'     => 'Istor',
+'updatedmarker'     => 'kemmet abaoe ma zaol-sell diwezhañ',
+'info_short'        => 'Titouroù',
+'printableversion'  => 'Stumm da voullañ',
+'permalink'         => "Chomlec'h ar stumm-mañ",
+'print'             => 'Moullañ',
+'edit'              => 'Kemmañ',
+'editthispage'      => 'Kemmañ ar bajenn-mañ',
+'delete'            => 'Diverkañ',
+'deletethispage'    => 'Diverkañ ar bajenn-mañ',
+'undelete_short'    => 'Diziverkañ',
+'protect'           => 'Gwareziñ',
+'protectthispage'   => 'Gwareziñ ar bajenn-mañ',
+'unprotect'         => 'Diwareziñ',
+'unprotectthispage' => 'Diwareziñ ar bajenn-mañ',
+'newpage'           => 'Pajenn nevez',
+'talkpage'          => 'Pajenn gaozeal',
+'specialpage'       => 'Pajenn zibar',
+'personaltools'     => 'Ostilhoù personel',
+'postcomment'       => 'Ouzhpennañ e soñj',
+'articlepage'       => 'Sellet ouzh ar pennad',
+'talk'              => 'Kaozeadenn',
+'views'             => 'Gweladennoù',
+'toolbox'           => 'Boest ostilhoù',
+'userpage'          => 'Pajenn implijer',
+'projectpage'       => 'Pajenn meta',
+'imagepage'         => 'Pajenn skeudenn',
+'mediawikipage'     => "Sellet ouzh pajenn ar c'hemennadennoù",
+'templatepage'      => 'Gwelet patrom ar bajenn',
+'viewhelppage'      => 'Gwelet ar bajenn skoazell',
+'categorypage'      => 'Gwelet pajenn ar rummadoù',
+'viewtalkpage'      => 'Pajenn gaozeal',
+'otherlanguages'    => 'Yezhoù all',
+'redirectedfrom'    => '(Adkaset eus $1)',
+'redirectpagesub'   => 'Pajenn adkas',
+'lastmodifiedat'    => "Kemmoù diwezhañ degaset d'ar bajenn-mañ : $2, $1.", # $1 date, $2 time
+'viewcount'         => 'Sellet ez eus bet ouzh ar bajenn-mañ $1 (g)wech.',
+'protectedpage'     => 'Pajenn warezet',
+'jumpto'            => 'Mont da :',
+'jumptonavigation'  => 'merdeiñ',
+'jumptosearch'      => 'klask',
+
+# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
+'aboutsite'         => 'Diwar-benn {{SITENAME}}',
+'aboutpage'         => '{{ns:4}}:Diwar-benn',
+'bugreports'        => 'Teul an drein',
+'bugreportspage'    => '{{ns:4}}:Teul an drein',
+'copyright'         => "Danvez a c'haller implijout dindan $1.",
+'copyrightpagename' => 'aotre {{SITENAME}}',
+'copyrightpage'     => '{{ns:4}}:Gwirioù aozer (Copyright)',
+'currentevents'     => 'Keleier',
+'currentevents-url' => 'Keleier',
+'disclaimers'       => 'Kemennoù',
+'disclaimerpage'    => 'Project:Kemenn hollek',
+'edithelp'          => 'Skoazell',
+'edithelppage'      => '{{ns:4}}:Penaos degas kemmoù en ur bajenn',
+'faq'               => 'FAG',
+'faqpage'           => '{{ns:4}}:FAG',
+'helppage'          => '{{ns:4}}:Skoazell',
+'mainpage'          => 'Degemer',
+'policy-url'        => '{{ns:project}}:Reolennoù',
+'portal'            => 'Porched ar gumuniezh',
+'portal-url'        => '{{ns:4}}:Degemer',
+'privacy'           => 'Reolennoù prevezded',
+'privacypage'       => 'Project:Reolennoù prevezded',
+'sitesupport'       => 'Roadoù',
+'sitesupport-url'   => 'Project:Roadoù',
+
+'badaccess'        => 'Fazi aotre',
+'badaccess-group0' => "N'oc'h ket aotreet da seveniñ ar pezh hoc'h eus goulennet.",
+'badaccess-group1' => 'Miret eo an ober-mañ evit an dud er strollad $1 hepken.',
+'badaccess-group2' => 'Miret eo an ober-mañ evit an dud en unan eus ar strolladoù $1 hepken.',
+'badaccess-groups' => 'Miret eo an ober-mañ evit an dud en unan eus ar strolladoù $1 hepken.',
+
+'versionrequired'     => 'Rekis eo Stumm $1 MediaWiki',
+'versionrequiredtext' => 'Rekis eo stumm $1 MediaWiki evit implijout ar bajenn-mañ. Sellit ouzh [[Special:Version]]',
+
+'ok'                  => 'Mat eo',
+'retrievedfrom'       => 'Adtapet diwar « $1 »',
+'youhavenewmessages'  => "$1 zo ganeoc'h ($2).",
+'newmessageslink'     => 'Kemennoù nevez',
+'newmessagesdifflink' => "Diforc'hioù e-keñver ar stumm kent",
+'editsection'         => 'kemmañ',
+'editold'             => 'kemmañ',
+'editsectionhint'     => 'Kemmañ ar rann : $1',
+'toc'                 => 'Taolenn',
+'showtoc'             => 'diskouez',
+'hidetoc'             => 'kuzhat',
+'thisisdeleted'       => 'Diskouez pe diziverkañ $1 ?',
+'viewdeleted'         => 'Gwelet $1?',
+'restorelink'         => "1 c'hemm diverket",
+'feedlinks'           => 'Lanv :',
+'feed-invalid'        => 'Seurt lanv direizh.',
+
+# Short words for each namespace, by default used in the 'article' tab in monobook
+'nstab-main'      => 'Pennad',
+'nstab-user'      => 'Pajenn implijer',
+'nstab-media'     => 'Media',
+'nstab-special'   => 'Dibar',
+'nstab-project'   => 'Diwar-benn',
+'nstab-image'     => 'Skeudenn',
+'nstab-mediawiki' => 'Kemennadenn',
+'nstab-template'  => 'Patrom',
+'nstab-help'      => 'Skoazell',
+'nstab-category'  => 'Rummad',
+
+# Main script and global functions
+'nosuchaction'      => 'Ober dianav',
+'nosuchactiontext'  => "N'eo ket anavezet gant ar wiki an ober spisaet en Url.",
+'nosuchspecialpage' => "N'eus ket eus ar bajenn zibar-mañ",
+'nospecialpagetext' => "Goulennet hoc'h eus ur bajenn zibar n'eo ket anavezet gant ar wiki.",
+
+# General errors
+'error'                => 'Fazi',
+'databaseerror'        => 'Fazi bank roadennoù',
+'dberrortext'          => 'Fazi ereadur er bank roadennoù. Setu ar goulenn bet pledet gantañ da ziwezhañ :
+<blockquote><tt>$1</tt></blockquote>
+adal an arc\'hwel "<tt>$2</tt>".
+Adkaset eo bet ar fazi "<tt>$3: $4</tt>" gant MySQL.',
+'dberrortextcl'        => 'Ur fazi ereadur zo en ur goulenn graet ouzh ar bank roadennoù. Setu ar goulenn bet pledet gantañ da ziwezhañ :
+"$1"
+graet gant an arc\'hwel "$2"
+adkaset eo bet ar fazi "$3 : $4" gant MySQL.',
+'noconnect'            => "Ho tigarez! Da-heul kudennoù teknikel, n'haller ket kevreañ ouzh ar bank roadennoù evit poent.
+<br />
+$1",
+'nodb'                 => 'Dibosupl dibab ar bank roadennoù $1',
+'cachederror'          => "Un eilenn eus ar bajenn goulennet eo homañ; marteze n'eo ket bet hizivaet",
+'laggedslavemode'      => "Diwallit : marteze a-walc'h n'emañ ket ar c'hemmoù diwezhañ war ar bajenn-mañ",
+'readonly'             => 'Hizivadurioù stanket war ar bank roadennoù',
+'enterlockreason'      => 'Merkit perak eo stanket hag istimit pegeit e chomo evel-henn',
+'readonlytext'         => "Evit poent n'haller ket ouzhpennañ pe gemmañ netra er bank roadennoù mui. Un tamm kempenn boutin d'ar bank moarvat. goude-se e vo plaen an traoù en-dro.
+
+Setu displegadenn ar merour bet prennet ar bank gantañ : $1",
+'missingarticle'       => "N'eo ket bet ar bank roadennoù evit kavout testenn ur bajenn zo anezhi c'hoazh gant an titl \"\$1\".
+N'eo ket ur fazi gant ar bank roadennoù, un draen gant ar wiki marteze a-walc'h.
+Kasit, ni ho ped, keloù eus an draen-mañ d'ur merour en ur verkañ mat dezhañ chomlec'h ar bajenn e kaoz.",
+'readonly_lag'         => "Stanket eo bet ar bank roadennoù ent emgefre p'emañ an eilservijerioù oc'h adpakañ o dale e-keñver ar pennservijer",
+'internalerror'        => 'Fazi diabarzh',
+'filecopyerror'        => 'Dibosupl eilañ « $1 » war-du « $2 ».',
+'filerenameerror'      => 'Dibosupl da adenvel « $1 » e « $2 ».',
+'filedeleteerror'      => 'Dibosupl da ziverkañ « $1 ».',
+'filenotfound'         => 'N\'haller ket kavout ar restr "$1".',
+'unexpected'           => 'Talvoudenn dic\'hortoz : "$1"="$2".',
+'formerror'            => 'Fazi: Dibosupl eo kinnig ar furmskrid',
+'badarticleerror'      => "N'haller ket seveniñ an ober-mañ war ar bajenn-mañ.",
+'cannotdelete'         => 'Dibosupl da ziverkañ ar bajenn pe ar skeudenn spisaet.',
+'badtitle'             => 'Titl fall',
+'badtitletext'         => "Faziek pe c'houllo eo titl ar bajenn goulennet; pe neuze eo faziek al liamm etreyezhel",
+'perfdisabled'         => "Ho tigarez! Diweredekaet eo bet an arc'hwel-mañ evit poent rak gorrekaat a ra ar bank roadennoù kement ha ma n'hall ket mui den implijout ar wiki.",
+'perfdisabledsub'      => 'Setu aze un eilenn savete eus $1:', # obsolete?
+'perfcached'           => "Krubuilhet eo ar roadennoù da-heul ha marteze n'int ket bet hizivaet.",
+'perfcachedts'         => "Krubuilhet eo ar roadennoù-mañ; hizivaet int bet da ziwezhañ d'an $1.",
+'querypage-no-updates' => 'Diweredekaet eo an hizivaat evit ar bajenn-mañ. Evit poent ne vo ket nevesaet ar stlennoù amañ.',
+'wrong_wfQuery_params' => "Arventennoù faziek war an urzhiad wfQuery()<br />
+Arc'hwel : $1<br />
+Goulenn : $2",
+'viewsource'           => 'Sellet ouzh tarzh an destenn',
+'viewsourcefor'        => 'evit $1',
+'protectedpagetext'    => "Prennet eo bet ar bajenn-mañ. N'haller ket degas kemmoù enni.",
+'viewsourcetext'       => 'Gallout a rit gwelet hag eilañ danvez ar bajenn-mañ',
+'protectedinterface'   => 'Testenn ar bajenn-mañ a dalvez evit etrefas ar meziant. Setu perak eo bet gwarezet ar bajenn.',
+'editinginterface'     => "'''Diwallit :''' Emaoc'h oc'h adaozañ ur bajenn a dalvez da sevel skridoù evit etrefas ar meziant. Ar c'hemmoù graet ouzh ar bajenn-mañ a zegaso kemmoù war etrefas an holl implijerien.",
+'sqlhidden'            => '(Reked SQL kuzhet)',
+'cascadeprotected'     => 'Gwarezet eo ar bajenn-mañ; n\'haller ket degas kemmoù enni peogwir he c\'haver er pajennoù da-heul zo bet gwarezet en ur zibab an dibarzh "skalierad" :',
+
+# Login and logout pages
+'logouttitle'                => 'Dilugañ',
+'logouttext'                 => "Diluget oc'h bremañ.
+Gallout a rit kenderc'hel da implijout {{SITENAME}} en un doare dizanv, pe en em lugañ en-dro gant un anv all mar fell deoc'h.",
+'welcomecreation'            => '<h2>Degemer mat, $1!</h2><p>Krouet eo bet ho kont implijer.
+Na zisoñjit ket da bersonelaat ho {{SITENAME}} en ur sellet ouzh pajenn ar Penndibaboù.',
+'loginpagetitle'             => 'Ho tisklêriadenn',
+'yourname'                   => "Hoc'h anv implijer",
+'yourpassword'               => 'Ho ker-tremen',
+'yourpasswordagain'          => 'Skrivit ho ker-tremen en-dro',
+'remembermypassword'         => "Derc'hel soñj eus ma ger-tremen (toupin)",
+'yourdomainname'             => 'Ho tomani',
+'externaldberror'            => "Pe ez eus bet ur fazi gwiriekaat diavaez er bank titouroù pe n'oc'h ket aotreet da nevesaat ho kont diavaez.",
+'loginproblem'               => '<b>Kudenn zisklêriañ.</b><br />Klaskit en-dro !',
+'alreadyloggedin'            => "'''Implijer $1, disklêriet oc'h dija!'''<br />",
+'login'                      => 'Disklêriañ',
+'loginprompt'                => "Ret eo deoc'h bezañ gweredekaet an toupinoù evit bezañ luget ouzh {{SITENAME}}.",
+'userlogin'                  => 'Krouiñ ur gont pe en em lugañ',
+'logout'                     => 'Dilugañ',
+'userlogout'                 => 'Dilugañ',
+'notloggedin'                => 'Diluget',
+'nologin'                    => "N'oc'h ket luget ? $1.",
+'nologinlink'                => 'Krouiñ ur gont',
+'createaccount'              => 'Krouiñ ur gont nevez',
+'gotaccount'                 => "Ur gont zo ganeoc'h dija ? $1.",
+'gotaccountlink'             => 'En em lugañ',
+'createaccountmail'          => 'dre bostel',
+'badretype'                  => "N'eo ket peurheñvel an eil ouzh egile an daou c'her-tremen bet lakaet ganeoc'h.",
+'userexists'                 => "Implijet eo dija an anv implijer lakaet ganeoc'h. Dibabit unan all mar plij.",
+'youremail'                  => 'Postel *:',
+'username'                   => 'Anv implijer :',
+'uid'                        => 'Niv. identelezh an implijer :',
+'yourrealname'               => 'Anv gwir*',
+'yourlanguage'               => 'Yezh an etrefas&nbsp;',
+'yourvariant'                => 'Adstumm',
+'yournick'                   => "Sinadur evit ar c'haozeadennoù (gant ~~~)",
+'badsig'                     => 'Direizh eo ho sinadur kriz; gwiriit ho palizennoù HTML.',
+'email'                      => 'Postel',
+'prefs-help-email-enotif'    => "Implijet e vez ar chomlec'h-mañ evit kas deoc'h kemennadennoù dre bostel ivez m'hoc'h eus dibabet an dibarzhioù ret evit se.",
+'prefs-help-realname'        => "* Hoc'h anv (diret) : ma vez spisaet ganeoc'h e vo implijet evit sinañ ho tegasadennoù.",
+'loginerror'                 => 'Kudenn zisklêriañ',
+'prefs-help-email'           => "* Postel (diret) : gantañ e vo aes mont e darempred ganeoc'h adal al lec'hienn o terc'hel kuzh ho chomlec'h, hag adkas ur ger-tremen deoc'h ma tichañsfe deoc'h koll ho hini.",
+'nocookiesnew'               => "krouet eo bet ar gont implijer met n'hoc'h ket luget. {{SITENAME}} a implij toupinoù evit al lugañ met diweredekaet eo an toupinoù ganeoc'h. Trugarez da weredekaat anezho ha d'en em lugañ en-dro.",
+'nocookieslogin'             => "{{SITENAME}} a implij toupinoù evit al lugañ met diweredekaet eo an toupinoù ganeoc'h. Trugarez da weredekaat anezho ha d'en em lugañ en-dro.",
+'noname'                     => "N'hoc'h eus lakaet anv implijer ebet.",
+'loginsuccesstitle'          => "Disklêriet oc'h.",
+'loginsuccess'               => 'Luget oc\'h bremañ war {{SITENAME}} evel "$1".',
+'nosuchuser'                 => 'N\'eus ket eus an implijer "$1".
+Gwiriit eo bet skrivet mat an anv ganeoc\'h pe implijit ar furmskrid a-is a-benn krouiñ ur gont implijer nevez.',
+'nosuchusershort'            => "N'eus perzhiad ebet gantañ an anv « $1 ». Gwiriit ar reizhskrivadur.",
+'nouserspecified'            => "Ret eo deoc'h spisaat un anv implijer.",
+'wrongpassword'              => 'Ger-tremen kamm. Klaskit en-dro.',
+'wrongpasswordempty'         => 'Ger-tremen ebet. Lakait unan mar plij.',
+'mailmypassword'             => 'Kasit din ur ger-tremen nevez',
+'passwordremindertitle'      => 'Ho ker-tremen nevez war {{SITENAME}}',
+'passwordremindertext'       => "Unan bennak (c'hwi moarvat gant ar chomlec'h IP \$1)
+en deus goulennet ma vo kaset deoc'h ur ger-tremen nevez evit mont war {{SITENAME}} (\$4).
+Ger-tremen an implijer \"\$2\" zo bremañ \"\$3\".
+Erbediñ a reomp deoc'h en em lugañ ha kemmañ ar ger-tremen-mañ an abretañ ar gwellañ.
+
+Mard eo bet graet ar goulenn gant unan bennak all, pe m'hoc'h eus soñj eus ho ker-tremen bremañ ha
+ne fell ket deoc'h cheñch anezhañ ken, e c'hallit leuskel ar postel-mañ a-gostez ha kenderc'hel d'ober gant ho ker-tremen kozh.",
+'noemail'                    => 'N\'eus bet enrollet chomlec\'h elektronek ebet evit an implijer "$1".',
+'passwordsent'               => 'Kaset ez eus bet ur ger-tremen nevez da chomlec\'h elektronek an implijer "$1".
+Trugarez deoc\'h evit en em zisklêriañ kerkent ha ma vo bet resevet ganeoc\'h.',
+'blocked-mailpassword'       => "N'haller ket degas kemmoù adal ar chomlec'h IP-mañ ken, gant se n'hallit ket implijout an arc'hwel adtapout gerioù-tremen, kuit m'en em ledfe kammvoazioù.",
+'eauthentsent'               => "Kaset ez eus bet ur postel kadarnaat war-du ar chomlec'h postel spisaet. 
+A-raok na vije kaset postel ebet d'ar gont-se e vo ret deoc'h heuliañ ar c'huzulioù merket er postel resevet evit kadarnaat ez eo mat ho kont deoc'h.",
+'throttled-mailpassword'     => "Kaset ez eus bet ch'oazh ur postel degas soñj e-kerzh an
+$1 eur ziwezhañ. Evit mirout ouzh pep gaou ne vo kaset posteloù all a-seurt-se nemet bep
+$1 eur.",
+'mailerror'                  => 'Fazi en ur gas ar postel : $1',
+'acct_creation_throttle_hit' => "Ho tigarez, krouet ez eus bet $1 (c'h)gont ganeoc'h dija. N'hallit ket krouiñ unan nevez.",
+'emailauthenticated'         => "Gwiriet eo bet ho chomlec'h postel d'an $1.",
+'emailnotauthenticated'      => "N'eo ket bet gwiriekaet ho chomlec'h postel evit c'hoazh. Ne vo ket tu da gas postel ebet deoc'h evit hini ebet eus an dezverkoù dindan.",
+'noemailprefs'               => "Merkit ur chomlec'h postel mar fell deoc'h ez afe an arc'hwelioù-mañ en-dro.",
+'emailconfirmlink'           => "Kadarnait ho chomlec'h postel",
+'invalidemailaddress'        => "N'haller ket degemer ar chomlec'h postel-mañ rak faziek eo e furmad evit doare. Merkit ur chomlec'h reizh pe goullonderit ar vaezienn-mañ.",
+'accountcreated'             => 'Kont krouet',
+'accountcreatedtext'         => 'Krouet eo bet kont implijer $1.',
+
+# Password reset dialog
+'resetpass'               => 'Adsevel ar ger-tremen',
+'resetpass_announce'      => "En em enrollet oc’h dre ur ger-tremen da c'hortoz kaset deoc'h dre bostel. A-benn bezañ enrollet da vat e rankit spisaat ur ger-tremen nevez amañ :",
+'resetpass_text'          => '<!-- Ouzhpennañ testenn amañ -->',
+'resetpass_header'        => 'Adsevel ar ger-tremen',
+'resetpass_submit'        => 'Kemmañ ar ger-tremen hag en em lugañ',
+'resetpass_success'       => "Kemmet mat eo bet ho ker-temen ! Emaoc'h oc'h en em lugañ e-barzh...",
+'resetpass_bad_temporary' => "Ger-tremen da c'hortoz faziek. Marteze hoc'h eus cheñchet ho ker-tremen dija pe hoc'h eus goulennet ur ger-tremen da c'hortoz all.",
+'resetpass_forbidden'     => "N'haller ket cheñch ar gerioù-termen war ar wiki-mañ",
+'resetpass_missing'       => "N'eus bet lakaet titour ebet.",
+
+# Edit page toolbar
+'bold_sample'     => 'Testenn dev',
+'bold_tip'        => 'Testenn dev',
+'italic_sample'   => 'Testenn italek',
+'italic_tip'      => 'Testenn italek',
+'link_sample'     => 'Liamm titl',
+'link_tip'        => 'Liamm diabarzh',
+'extlink_sample'  => 'http://www.example.com liamm titl',
+'extlink_tip'     => 'Liamm diavaez (na zisoñjit ket http://)',
+'headline_sample' => 'Testenn istitl',
+'headline_tip'    => 'Istitl live 2',
+'math_sample'     => 'Lakait ho formulenn amañ',
+'math_tip'        => 'Formulenn jedoniel (LaTeX)',
+'nowiki_sample'   => 'Lakait an destenn anfurmadet amañ',
+'nowiki_tip'      => 'Na deuler pled ouzh eradur ar wiki',
+'image_sample'    => 'Skouer.jpg',
+'image_tip'       => 'Skeudenn enframmet',
+'media_sample'    => 'Skouer.ogg',
+'media_tip'       => 'Liamm restr media',
+'sig_tip'         => 'Ho sinadur gant an deiziad',
+'hr_tip'          => 'Liamm a-led (arabat implijout re)',
+
+# Edit pages
+'summary'                   => 'Diverrañ&nbsp;',
+'subject'                   => 'Danvez/titl',
+'minoredit'                 => 'Kemm dister.',
+'watchthis'                 => 'Evezhiañ ar pennad-mañ',
+'savearticle'               => 'Enrollañ',
+'preview'                   => 'Rakwelet',
+'showpreview'               => 'Rakwelet',
+'showlivepreview'           => 'Rakwelet prim',
+'showdiff'                  => "Diskouez ar c'hemmoù",
+'anoneditwarning'           => "'''Diwallit :''' N'oc'h ket luget. Ho chomlec'h IP eo a vo enrollet war istor kemmoù ar bajenn-mañ.",
+'missingsummary'            => "'''Taolit evezh:''' N'hoc'h eus ket lakaet tamm testenn diverrañ ebet evit ho kemmoù. Mar klikit war enrollañ en-dro, e vo enrollet ho testenn evel m'emañ hepmuiken.",
+'missingcommenttext'        => "Skrivit hoc'h evezhiadenn a-is.",
+'missingcommentheader'      => "'''Taolit evezh:''' N'hoc'h eus ket lakaet tamm danvez/titl ebet evit hoc'h evezhiadenn. Mar klikit war enrollañ en-dro, e vo enrollet ho testenn evel m'emañ hepmuiken.",
+'summary-preview'           => 'Rakwelet an diverrañ',
+'subject-preview'           => 'Rakwelet danvez/titl',
+'blockedtitle'              => 'Implijer stanket',
+'blockedtext'               => "<big>'''Stanket eo bet ho kont implijer pe ho chomlec'h IP'''</big> 
+
+Gant $1 eo bet graet. Setu an abeg : ''$2''.
+
+Gallout a rit mont e darempred gant $1 pe gant unan eus ar [[{{MediaWiki:grouppage-sysop}}|verourien]] all evit eskemm ganto war se. N'hallit implijout an arc'hwel 'kas ur postel d'an implijer-mañ' nemet ma' eus bet spisaet ganeoc'h ur chomlec'h postel reizh en ho
+[[Special:Preferences|penndibaboù kont]]. $3 eo ho chomlec'h IP, ha #$5 eo an niverenn identelezh stanket. Implijit anezho en ho koulennoù bep tro.",
+'blockedoriginalsource'     => "Kavout a reot mammenn '''$1''' a-is:",
+'blockededitsource'         => "Kavout a reot testenn ho '''kemmoù''' war '''$1''' a-is :",
+'whitelistedittitle'        => 'Ret eo bezañ luget evit skridaozañ',
+'whitelistedittext'         => "Ret eo deoc'h en em $1 evit gallout skridaozañ",
+'whitelistreadtitle'        => 'Ret eo bezañ luget evit gallout lenn',
+'whitelistreadtext'         => 'Ret eo bezañ [[Special:Userlogin|luget]] evit gallout lenn ar pennadoù',
+'whitelistacctitle'         => "N'hoc'h ket aotreet da grouiñ ur gont",
+'whitelistacctext'          => 'A-benn gallout krouiñ ur gont war ar Wiki-mañ e rankit bezañ [[Special:Userlogin|luget]] ha kaout an aotreoù rekis',
+'confirmedittitle'          => "Ret eo kadarnaat e chomlec'h postel a-raok kemmañ pajennoù",
+'confirmedittext'           => "Rankout a ri bezañ kadarnaet ho chomlec'h postel a-raok gellout degas kemmoù er pajennoù. Skrivit ha kadarnait ho chomlec'h postel en ho [[Special:Preferences|penndibaboù implijer]] mar plij.",
+'loginreqtitle'             => 'Anv implijer rekis',
+'loginreqlink'              => 'en em lugañ',
+'loginreqpagetext'          => "Ret eo deoc'h $1 evit gwelet pajennoù all.",
+'accmailtitle'              => 'Ger-tremen kaset.',
+'accmailtext'               => 'Kaset eo bet ger-tremen « $1 » da $2.',
+'newarticle'                => '(Nevez)',
+'newarticletext'            => 'Skrivit amañ testenn ho pennad.',
+'anontalkpagetext'          => "---- ''Homañ eo ar bajenn gaozeal evit un implijer(ez) dianv n'eus ket c'hoazh krouet kont ebet pe na implij ket anezhi. Setu perak e rankomp ober gant ar chomlec'h IP niverel evit disklêriañ anezhañ/i. Gallout a ra ur chomlec'h a seurt-se bezañ rannet etre meur a implijer(ez). Ma'z oc'h un implijer(ez) dianv ha ma stadit ez eus bet kaset deoc'h kemennadennoù na sellont ket ouzhoc'h, gallout a rit [[Special:Userlogin|krouiñ ur gont pe en em lugañ]] kuit a vagañ muioc'h a gemmesk.",
+'noarticletext'             => "(N'eus evit poent tamm skrid ebet war ar bajenn-mañ)",
+'clearyourcache'            => "'''Notenn :''' Goude bezañ enrollet ho pajenn e rankit adkargañ anezhi a-ratozh evit gwelet ar c'hemmoù : '''Internet Explorer''' : ''ctrl-f5'', '''Mozilla / Firefox''' : ''ctrl-shift-r'', '''Safari''' : ''cmd-shift-r'', '''Konqueror''' : ''f5''.",
+'usercssjsyoucanpreview'    => "'''Tun:''' grit gant ar bouton '''Rakwelet''' evit testiñ ho follenn css/js nevez a-raok enrollañ anezhi.",
+'usercsspreview'            => "'''Dalc'hit soñj emaoc'h o rakwelet ho follenn css deoc'h ha n'eo ket bet enrollet c'hoazh!'''",
+'userjspreview'             => "'''Dalc'hit soñj emaoc'h o rakwelet pe o testiñ ho kod javascript deoc'h ha n'eo ket bet enrollet c'hoazh!'''",
+'userinvalidcssjstitle'     => "'''Diwallit:''' N'eus tamm gwiskadur \"\$1\" ebet. Ho pez soñj e vez implijet lizherennoù bihan goude an anv implijer hag ar veskell / gant ar pajennoù personel dezho un astenn .css ha .js; da skouer eo mat ar follenn stil Implijer:Foo/monobook.css ha faziek an hini implijer:Foo/Monobook.css.",
+'updated'                   => '(Hizivaet)',
+'note'                      => '<strong>Notenn :</strong>',
+'previewnote'               => "<strong>Diwallit mat, n'eo homañ nemet ur rakweladenn, n'eo ket enrollet an destenn c'hoazh!</strong>",
+'previewconflict'           => 'Gant ar rakweladenn e teu testenn ar bajenn war wel evel ma vo pa vo bet enrollet.',
+'session_fail_preview'      => "<strong>Ho tigarez! N'eus ket bet tu da enrollañ ho kemmoù rak kollet eo bet roadennoù an dalc'h. Klaskit en-dro mar plij. Ma ne'z a ket en-dro c'hoazh, klaskit dilugañ ho kont ha lugañ en-dro.</strong>",
+'session_fail_preview_html' => "<strong>Ho tigarez! N'omp ket bet gouest da enrollañ ho kemmoù rak kollet ez eus bet stlennoù e-kerzh ho talc'h.</strong>
+
+''Gweredekaet eo al linenoù HTML er wiki-mañ. Rak-se eo kuzh ar rakweladurioù a-benn en em zifenn diouzh an tagadennoù JavaScript.''
+
+<strong>Mard e oa onest ar c'hemmoù oc'h eus klasket degas, klaskit en-dro. Mard ned a ket en-dro, klaskit en em zilugañ ha lugañ en-dro (pe digevreañ/kevreañ).</strong>",
+'importing'                 => "Oc'h enporzhiañ $1",
+'editing'                   => "oc'h aozañ $1",
+'editinguser'               => "oc'h aozañ $1",
+'editingsection'            => "oc'h aozañ $1 (rann)",
+'editingcomment'            => "oc'h aozañ $1 (soñj)",
+'editconflict'              => 'tabut kemmañ : $1',
+'explainconflict'           => "<b>Enrollet eo bet ar bajenn-mañ war-lerc'h m'ho pefe kroget d'he c'hemmañ.
+E-krec'h an takad aozañ emañ an destenn evel m'emañ enrollet bremañ er bank roadennoù. Ho kemmoù deoc'h a zeu war wel en takad aozañ traoñ. Ret e vo deoc'h degas ho kemmoù d'an destenn zo evit poent. N'eus nemet an destenn zo en takad krec'h a vo saveteet.</b><br />",
+'yourtext'                  => 'Ho testenn',
+'storedversion'             => 'Stumm enrollet',
+'nonunicodebrowser'         => "<strong>DIWALLIT: N'eo ket skoret an Unicode gant ho merdeer. Un diskoulm da c'hortoz zo bet kavet evit ma c'hallfec'h degas kemmoù er pennadoù : dont a raio war wel an arouezennoù an-ASCII er prenestr skridaozañ evel kodoù eizhdekvedennel.</strong>",
+'editingold'                => "<strong>Diwallit : o kemm ur stumm kozh eus ar bajenn-mañ emaoc'h. Mard enrollit bremañ e vo kollet an holl gemmoù bet graet abaoe ar stumm-se.</strong>",
+'yourdiff'                  => "Diforc'hioù",
+'copyrightwarning'          => "Sellet e vez ouzh an holl degasadennoù graet war {{SITENAME}} evel ouzh degasadennoù a zouj da dermenoù ar $2 (Sellet ouzh $1 evit gouzout hiroc'h). Mar ne fell ket deoc'h e vefe embannet ha skignet ho skridoù, arabat kas anezho.<br />
+Heñveldra, prometiñ a rit kemer perzh dre zegas skridoù savet ganeoc'h hepken pe tennet eus ur vammenn frank a wirioù. 
+<strong>NA IMPLIJIT KET LABOURIOÙ GANT GWIRIOÙ AOZER (COPYRIGHT) HEP AOTRE D'OBER KEMENT-SE!</strong>",
+'copyrightwarning2'         => "Notit mat e c'hall kement degasadenn graet ganeoc'h war {{SITENAME}} bezañ kemmet, adaozet pe lamet kuit gant an implijerien all. Mar ne fell ket deoc'h e vije kemmet-digemmet ar pezh hoc'h eus skrivet na gemerit ket perzh er raktres-mañ.<br /> Gouestlañ a rit ivez eo bet savet ar boued spered ganeoc'h pe eilet diwar ur vammenn frank a wirioù pe en domani foran (gwelet $1 evit gouzout hiroc'h). <strong>NA IMPLIJIT KET LABOURIOÙ GANT GWIRIOÙ AOZER HEP AOTRE D'OBER KEMENT-SE!</strong>",
+'longpagewarning'           => "<strong>KEMENN DIWALL: $1 ko eo hed ar bajenn-mañ;
+merdeerioù zo o deus poan da verañ ar pajennoù tro-dro pe en tu all da 32 ko pa vezont savet.
+Marteze e c'hallfec'h rannañ ar bajenn e rannoù bihanoc'h.</strong>",
+'longpageerror'             => "<strong>FAZI: $1 kilobit hir eo an destenn lakaet ganeoc'h, ar pezh zo hiroc'h eget $2 kilobit, ar vent vrasañ aotreet. N'haller ket enrollañ.</strong>",
+'readonlywarning'           => "<strong>KEMENN DIWALL: stanket eo bet ar bajenn-mañ evit bezañ trezalc'het,
+n'oc'h ket evit enrollañ ho kemmoù diouzhtu eta. Gallout a rit eilañ an destenn en ur restr hag enrollañ anezhi diwezhatoc'hik.</strong>",
+'protectedpagewarning'      => "<strong>KEMENN DIWALL: Stanket eo bet ar bajenn-mañ.
+N'eus nemet an implijerien ganto ar statud merour a c'hall degas kemmoù enni.</strong>",
+'semiprotectedpagewarning'  => "''Notenn :''' Gwarezet eo ar bajenn-mañ; n'eus nemet an implijerien bet krouet ur gont ganto a c'hall degas kemmoù enni.",
+'cascadeprotectedwarning'   => "<strong>DIWALLIT: Prennet eo ar bajenn-mañ. N'eus nemet ar verourien a c'hall degas kemmoù enni peogwir he c'haver e-touez ar pajennoù da-heul zo bet gwarezet en ur zibab an dibarzh \"skalierad\".</strong>:",
+'templatesused'             => 'Patromoù implijet war ar bajenn-mañ :',
+'templatesusedpreview'      => 'Patromoù implijet er rakweladenn-mañ :',
+'templatesusedsection'      => 'Patromoù implijet er rann-mañ :',
+'template-protected'        => '(gwarezet)',
+'template-semiprotected'    => '(damwarezet)',
+'edittools'                 => '<!-- Diskouezet e vo an destenn kinniget amañ dindan ar sternioù kemmañ ha kargañ. -->',
+'nocreatetitle'             => "Strishaet eo bet ar c'hrouiñ pajennoù",
+'nocreatetext'              => "N'eus pennad ebet gant anv lakaet ganeoc'h c'hoazh. Mar fell deoc'h e c'hallit en em lugañ pe [[special:userlogin|krouiñ ur gont]]. Goude-se e c'hallot krouiñ pennadoù nevez. Taolit evezh koulskoude da zoujañ ouzh ar reolennoù a denn da anvioù ar pennadoù ha klaskit mat a-raok krouiñ ur pennad zo anezhañ dija.",
+
+# "Undo" feature
+'undo-success' => "Gallout a reer disteurel ar c'hemmoù-mañ. Gwiriit, mar plij, gant ar geñveriadenn a-is evit bezañ sur eo an dra-se a fell deoc'h ober; goude-se enrollit ar c'hemmoù a-is a-benn echuiñ disteurel ar c'hemmoù.",
+'undo-failure' => "N'eus ket bet tu da zisteuler ar c'hemm-mañ abalamour d'un tabut gant kemmoù degaset e-keit-se.",
+'undo-summary' => 'Disteurel kemmoù $1 a-berzh [[Special:Contributions/$2]] ([[User talk:$2]])',
+
+# Account creation failure
+'cantcreateaccounttitle' => 'Dibosupl krouiñ ar gont',
+'cantcreateaccounttext'  => "Stanket eo bet ar c'hrouiñ kontoù adal ar chomlec'h IP-mañ (<b>$1</b>). Moarvat eo abalamour d'an taolioù vandalerezh dizehan adal ho skol pe ho pourchaser servij Kenrouedad.",
+
+# History pages
+'revhistory'                  => 'Stummoù kent',
+'viewpagelogs'                => 'Gwelet ar marilhoù evit ar bajenn-mañ',
+'nohistory'                   => "Ar bajenn-mañ n'he deus tamm istor ebet.",
+'revnotfound'                 => "N'eo ket bet kavet ar stumm-mañ",
+'revnotfoundtext'             => "N'eo ket bet kavet stumm kent ar bajenn-mañ. Gwiriit an URL lakaet ganeoc'h evit mont d'ar bajenn-mañ.",
+'loadhist'                    => 'O kargañ istor ar bajenn',
+'currentrev'                  => 'Stumm a-vremañ pe stumm red',
+'revisionasof'                => 'Stumm eus an $1',
+'revision-info'               => 'Stumm eus an $1 gant $2',
+'previousrevision'            => '← Stumm kent',
+'nextrevision'                => "Stumm war-lerc'h →",
+'currentrevisionlink'         => 'Gwelet ar stumm red',
+'cur'                         => 'red',
+'next'                        => 'goude',
+'last'                        => 'diwez',
+'orig'                        => 'kent',
+'page_first'                  => 'kentañ',
+'page_last'                   => 'diwezhañ',
+'histlegend'                  => "Sellet ouzh an diforc'hioù : lakait un ask adal d'ar stummoù a fell deoc'h keñveriañ ha pouezit war kadarnaat pe war ar bouton en traoñ.<br />
+Alc'hwez : (red) = diforc'hioù gant ar stumm a-vremañ,
+(diwez) = diforc'hioù gant ar stumm kent, D = kemm dister",
+'deletedrev'                  => '[diverket]',
+'histfirst'                   => 'Kentañ',
+'histlast'                    => 'Diwezhañ',
+'rev-deleted-comment'         => '(evezhiadenn diverket)',
+'rev-deleted-user'            => '(anv implijer diverket)',
+'rev-deleted-text-permission' => '<div class="mw-warning plainlinks">
+Lamet eo bet kuit ar stumm-mañ eus ar bajenn diouzh an dielloù foran.
+Marteze e kavot munudoù war [{{fullurl:Special:Log/delete|page={{PAGENAMEE}}}} roll ar pajennoù diverket].
+</div>',
+'rev-deleted-text-view'       => "<div class=\"mw-warning plainlinks\">
+Lamet eo bet kuit ar stumm-mañ eus ar bajenn diouzh an dielloù foran.
+Dre ma'z oc'h merour war al lec'hienn-mañ e c'hallit sellet outañ;
+Marteze e kavot munudoù all war [{{fullurl:Special:Log/delete|page={{PAGENAMEE}}}} roll ar pajennoù diverket].
+</div>",
+'rev-delundel'                => 'diskouez/kuzhat',
+
+'history-feed-title'          => "Istor ar c'hemmoù",
+'history-feed-description'    => "Istor ar c'hemmoù degaset war ar bajenn-mañ eus ar wiki",
+'history-feed-item-nocomment' => "$1 d'an $2", # user at time
+'history-feed-empty'          => "Ar bajenn goulennet n'eus ket anezhi.
+Marteze eo bet diverket eus ar wiki, pe adanvet.
+Implijit [[Special:Search|klaskit er wiki]] evit kavout pajennoù all a c'hallfe klotañ.",
+
+# Revision deletion
+'revisiondelete'            => 'Diverkañ/diziverkañ stummoù',
+'revdelete-nooldid-title'   => 'Stumm pal ebet',
+'revdelete-nooldid-text'    => "N'eo ket bet spisaet ganeoc'h ar stumm(où) pal da implijout an arc'hwel-mañ evito.",
+'revdelete-selected'        => 'Diuzañ stumm eus an [[:$1]]:',
+'revdelete-text'            => "Derc'hel a raio ar stummoù diverket da zont war wel war istor ar bajenn,
+met n'hallo ket an dud sellet outo.
+
+Gouest e vo ar verourien all da dapout krog en testennoù kuzhet ha da ziziverkañ anezho en-dro dre an hevelep etrefas, nemet e vije bet lakaet e plas strishadurioù ouzhpenn gant renerien al lec'hienn.",
+'revdelete-legend'          => 'Sevel strishadurioù stumm :',
+'revdelete-hide-text'       => 'Kuzhat testenn ar stumm',
+'revdelete-hide-comment'    => "Kuzhat notenn ar c'hemm",
+'revdelete-hide-user'       => "Kuzhat anv implijer pe chomlec'h IP an aozer",
+'revdelete-hide-restricted' => 'Lakaat ar strishadurioù-mañ da dalvezout kement evit ar verourien hag evit an implijerien all',
+'revdelete-log'             => 'Notenn evit ar marilh :',
+'revdelete-submit'          => 'Lakaat da dalvezout evit ar stumm diuzet',
+'revdelete-logentry'        => 'Cheñchet eo bet hewelusted ar stumm evit [[$1]]',
+
+# Diffs
+'difference'                => "(Diforc'hioù etre ar stummoù)",
+'loadingrev'                => 'o kargañ ar stumm kent evit keñveriañ',
+'lineno'                    => 'Linenn $1:',
+'editcurrent'               => 'Kemmañ stumm red ar bajenn-mañ',
+'selectnewerversionfordiff' => "Dibab ur stumm nevesoc'h",
+'selectolderversionfordiff' => "Dibab ur stumm koshoc'h",
+'compareselectedversions'   => 'Keñveriañ ar stummoù diuzet',
+'editundo'                  => 'disteuler',
+'diff-multi'                => "({{plural:$1|Ur reizhadenn da c'hortoz|$1 reizhadenn da c'hortoz}} kuzhet.)",
+
+# Search results
+'searchresults'         => "Disoc'h ar c'hlask",
+'searchresulttext'      => "Evit kaout muioc'h a ditouroù diwar-benn ar c'hlask e {{SITENAME}}, sellet ouzh [[{{MediaWiki:helppage}}|{{int:help}}]].",
+'searchsubtitle'        => 'Evit ar goulenn "[[:$1]]"',
+'searchsubtitleinvalid' => 'Evit ar goulenn "$1"',
+'badquery'              => 'Goulenn savet a-dreuz',
+'badquerytext'          => "N'eus ket bet gallet plediñ gant ho koulenn.
+Klasket hoc'h eus, moarvat, ur ger dindan teir lizherenn, ar pezh n'hallomp ket ober evit c'hoazh. Gallet hoc'h eus ober, ivez, ur fazi ereadur evel \"pesked ha skantenn\".
+Klaskit gant ur goulenn all.",
+'matchtotals'           => 'Klotañ a ra ar goulenn "$1" gant $2 titl
+pennad ha gant testenn $3 pennad.',
+'noexactmatch'          => "'''N'eus pajenn ebet anvet \"\$1\".''' Gallout a rit [[:\$1|krouiñ ar bajenn]].",
+'titlematches'          => 'Klotadurioù gant an titloù',
+'notitlematches'        => "N'emañ ar ger(ioù) goulennet e titl pennad ebet",
+'textmatches'           => 'Klotadurioù en testennoù',
+'notextmatches'         => "N'emañ ar ger(ioù) goulennet e testenn pennad ebet",
+'prevn'                 => '$1 kent',
+'nextn'                 => "$1 war-lerc'h",
+'viewprevnext'          => 'Gwelet ($1) ($2) ($3).',
+'showingresults'        => "Diskouez <b>$1</b> disoc'h adal an #<b>$2</b>.",
+'showingresultsnum'     => "Diskouez <b>$3</b> disoc'h adal an #<b>$2</b>.",
+'nonefound'             => '<strong>Notenn</strong>: alies eo liammet an diouer a zisoc\'hoù ouzh an implij a vez graet eus termenoù klask re stank, evel "da" pe "ha",
+termenoù n\'int ket menegeret, pe ouzh an implij a meur a dermen klask (en disoc\'hoù ne gaver nemet ar pajennoù enno an holl c\'herioù spisaet).',
+'powersearch'           => 'Klask',
+'powersearchtext'       => '
+Klask en esaouennoù :<br />
+$1<br />
+$2 Lakaat ivez ar pajennoù adkas &nbsp; Klask $3 $9',
+'searchdisabled'        => "<p>Diweredekaet eo bet an arc'hwel klask war an destenn a-bezh evit ur frapad rak ur samm re vras e oa evit ar servijer. Emichañs e vo tu d'e adlakaat pa vo ur servijer galloudusoc'h ganeomp. Da c'hortoz e c'hallit klask gant Google:</p>",
+'blanknamespace'        => '(Pennañ)',
+
+# Preferences page
+'preferences'           => 'Penndibaboù',
+'mypreferences'         => 'penndibaboù',
+'prefsnologin'          => 'Diluget',
+'prefsnologintext'      => "ret eo deoc'h bezañ [[Special:Userlogin|luget]] evit kemm ho tibaboù implijer.",
+'prefsreset'            => 'Adlakaet eo bet ar penndibaboù diouzh ar stumm bet enrollet.',
+'qbsettings'            => 'Personelaat ar varrenn ostilhoù',
+'qbsettings-none'	=> 'Hini ebet',
+'qbsettings-fixedleft'	=> 'Kleiz',
+'qbsettings-fixedright'	=> 'Dehou',
+'qbsettings-floatingleft'	=> 'War-neuñv a-gleiz',
+'changepassword'        => 'Kemmañ ar ger-tremen',
+'skin'                  => 'Gwiskadur',
+'math'                  => 'Tres jedoniel',
+'dateformat'            => 'Stumm an deiziad',
+'datedefault'           => 'Dre ziouer',
+'datetime'              => 'Deiziad hag eur',
+'math_failure'          => 'Fazi jedoniezh',
+'math_unknown_error'    => 'fazi dianav',
+'math_unknown_function' => 'kevreizhenn jedoniel dianav',
+'math_lexing_error'     => 'fazi ger',
+'math_syntax_error'     => 'fazi ereadur',
+'math_image_error'      => "C'hwitet eo bet ar gaozeadenn e PNG, gwiriit staliadur Latex, dvips, gs ha convert",
+'math_bad_tmpdir'       => "N'hall ket krouiñ pe skrivañ er c'havlec'h da c'hortoz",
+'math_bad_output'       => "N'hall ket krouiñ pe skrivañ er c'havlec'h ermaeziañ",
+'math_notexvc'          => "N'hall ket an erounezeg 'texvc' bezañ kavet. Lennit math/README evit he c'hefluniañ.",
+'prefs-personal'        => 'Titouroù personel',
+'prefs-rc'              => 'Kemmoù diwezhañ',
+'prefs-watchlist'       => 'Roll evezhiañ',
+'prefs-watchlist-days'  => 'Niver a zevezhioù da ziskouez er rollad evezhiañ :',
+'prefs-watchlist-edits' => 'Niver a gemmoù da ziskouez er roll evezhiañ astennet :',
+'prefs-misc'            => 'Penndibaboù liesseurt',
+'saveprefs'             => 'Enrollañ ar penndibaboù',
+'resetprefs'            => 'Adlakaat ar penndibaboù kent',
+'oldpassword'           => 'Ger-tremen kozh',
+'newpassword'           => 'Ger-tremen nevez :',
+'retypenew'             => 'Kadarnaat ar ger-tremen nevez',
+'textboxsize'           => 'Ment ar prenestr skridaozañ',
+'rows'                  => 'Linennoù :',
+'columns'               => 'Bannoù',
+'searchresultshead'     => 'Enklaskoù',
+'resultsperpage'        => 'Niver a respontoù dre bajenn :',
+'contextlines'          => 'Niver a linennoù dre respont',
+'contextchars'          => 'Niver a arouezennoù kendestenn dre linenn',
+'stubthreshold'         => 'Ment vihanañ ar pennadoù berr',
+'recentchangescount'    => "Niver a ditloù er c'hemmoù diwezhañ",
+'savedprefs'            => 'Enrollet eo bet ar penndibaboù.',
+'timezonelegend'        => 'Takad eur',
+'timezonetext'          => "Mar ne resisait ket al linkadur eur e vo graet gant eur Europa ar C'hornôg dre ziouer.",
+'localtime'             => "Eur lec'hel",
+'timezoneoffset'        => 'Linkadur eur',
+'servertime'            => 'Eur ar servijer',
+'guesstimezone'         => 'Ober gant talvoudenn ar merdeer',
+'allowemail'            => 'Aotren ar posteloù a-berzh implijerien all',
+'defaultns'             => 'Klask en esaouennoù-mañ dre ziouer :',
+'default'               => 'dre ziouer',
+'files'                 => 'Restroù',
+
+# User rights
+'userrights-lookup-user'     => 'Merañ strolladoù an implijer',
+'userrights-user-editname'   => 'Lakait un anv implijer :',
+'editusergroup'              => 'Kemmañ ar strolladoù implijerien',
+'userrights-editusergroup'   => 'Kemmañ strolladoù an implijer',
+'saveusergroups'             => 'Enrollañ ar strolladoù implijer',
+'userrights-groupsmember'    => 'Ezel eus :',
+'userrights-groupsavailable' => 'Strolladoù zo :',
+'userrights-groupshelp'      => "Diuzit ar strolladoù a fell deoc'h e vefe ouzhpennet an implijer dezho pe tennet diouto. 
+Ne vo ket cheñchet ar strolladoù n'int ket bet diuzet. Gallout a rit diziuzañ ur strollad gant CTRL + Klik kleiz",
+
+# Groups
+'group'            => 'Strollad :',
+'group-bot'        => 'Botoù',
+'group-sysop'      => 'Merourien',
+'group-bureaucrat' => 'Pennoù-bras',
+'group-all'        => '(pep tra)',
+
+'group-sysop-member'      => 'Merour',
+'group-bureaucrat-member' => 'Penn-bras',
+
+'grouppage-bot'        => '{{ns:project}} : Botoù',
+'grouppage-sysop'      => '{{ns:project}}:Merourien',
+'grouppage-bureaucrat' => '{{ns:project}}: Pennoù-bras',
+
+# User rights log
+'rightslog'      => 'Marilh statud an implijerien',
+'rightslogtext'  => "Setu marilh ar c'hemmoù statud bet c'hoarvezet d'an implijerien.",
+'rightslogentry' => 'en/he deus cheñchet strollad $1 eus $2 lakaet da $3',
+'rightsnone'     => '(hini)',
+
+# Recent changes
+'changes'                           => 'Kemm',
+'recentchanges'                     => 'Kemmoù diwezhañ',
+'recentchangestext'                 => "Dre ar bajenn-mañ e c'hallit heuliañ ar c'hemmoù diwezhañ bet degaset d'ar wiki.",
+'recentchanges-feed-description'    => "Heuilhit ar c'hemmoù diwezhañ er wiki el lusk-mañ.",
+'rcnote'                            => "Setu aze an <strong>$1</strong> kemm diwezhañ bet c'hoarvezet e-pad an <strong>$2</strong> deiz diwezhañ, d'an $3.",
+'rcnotefrom'                        => "Setu aze roll ar c'hemmoù c'hoarvezet abaoe an/ar <strong>$2</strong> (<b>$1</b> d'ar muiañ).",
+'rclistfrom'                        => "Diskouez ar c'hemmoù diwezhañ abaoe an $1.",
+'rcshowhideminor'                   => "$1 ar c'hemmoù dister",
+'rcshowhidebots'                    => '$1 ar robotoù',
+'rcshowhideliu'                     => '$1 an implijerien enrollet',
+'rcshowhideanons'                   => '$1 an implijerien dizanv',
+'rcshowhidepatr'                    => "$1 ar c'hemmoù gwiriet",
+'rcshowhidemine'                    => "$1 ma c'hemmoù",
+'rclinks'                           => "Diskouez an $1 kemm diwezhañ c'hoarvezet e-pad an $2 devezh diwezhañ<br />$3",
+'diff'                              => "diforc'h",
+'hist'                              => 'ist',
+'hide'                              => 'kuzhat',
+'show'                              => 'diskouez',
+'minoreditletter'                   => 'D',
+'number_of_watching_users_pageview' => '[$1 den o lenn]',
+'rc_categories'                     => 'Bevenn ar rummadoù (dispartiañ gant "|")',
+'rc_categories_any'                 => 'An holl',
+
+# Upload
+'upload'                      => 'Kargañ war ar servijer',
+'uploadbtn'                   => 'Kargañ ur restr',
+'reupload'                    => 'Eilañ adarre',
+'reuploaddesc'                => "Distreiñ d'ar furmskrid.",
+'uploadnologin'               => 'diluget',
+'uploadnologintext'           => "ret eo deoc'h bezañ [[Special:Userlogin|luget]]
+evit eilañ restroù war ar servijer.",
+'upload_directory_read_only'  => "N'hall ket ar servijer skrivañ e renkell ar c'hargadennoù ($1).",
+'uploaderror'                 => 'Fazi',
+'uploadtext'                  => "Grit gant ar furmskrid a-is evit enporzhiañ skeudennoù; evit sellet pe klask skeudennoù bet enporzhiet a-raok sellit ouzh [[Special:Imagelist|roll ar skeudennoù eilet war ar servijer]]. Kavet e vo ar skeudennoù enporzhiet pe diverket war [[Special:Log/upload|marilh ar pajennoù enporzhiet]] ivez.
+
+Evit enklozañ ar skeudenn en ur pennad, lakait er pennad-se ul liamm skrivet evel-henn :
+'''<nowiki>[[</nowiki>{{ns:image}}<nowiki>:anv_ar_restr.jpg]]</nowiki>''' pe
+'''<nowiki>[[</nowiki>{{ns:image}}<nowiki>:anv_ar_restr.png|testenn all]]</nowiki>''' pe
+'''<nowiki>[[</nowiki>{{ns:media}}<nowiki>:anv_ar_restr.ogg]]</nowiki>''' evit ar sonioù.",
+'uploadlog'                   => 'marilh ar pajennoù enporzhiet',
+'uploadlogpage'               => 'Marilh ar pajennoù enporzhiet',
+'uploadlogpagetext'           => 'Setu marilh ar restroù diwezhañ bet karget war ar servijer.',
+'filename'                    => 'Anv&nbsp;',
+'filedesc'                    => 'Deskrivadur&nbsp;',
+'fileuploadsummary'           => 'Diverrañ :',
+'filestatus'                  => 'Statud ar gwirioù aozer',
+'filesource'                  => 'Mammenn',
+'uploadedfiles'               => 'Restroù karget',
+'ignorewarning'               => "Na ober van eus ar c'hemennoù diwall ha saveteiñ ar restr forzh penaos.",
+'ignorewarnings'              => "Na ober van ouzh ar c'hemennoù diwall",
+'minlength'                   => 'Teir lizherenn da nebeutañ a rank bezañ lakaet da anvioù evit ar skeudennoù.',
+'illegalfilename'             => "Lakaet ez eus bet er restr « $1 » arouezennoù n'int ket aotreet evit titl ur bajenn. Mar plij, adanvit ar restr hag adkasit anezhi.",
+'badfilename'                 => 'Anvet eo bet ar skeudenn « $1 ».',
+'badfiletype'                 => "« .$1 » n'eo ket ur furmad erbedet evit ar restroù skeudenn.",
+'large-file'                  => "Erbediñ a reer ne vefe ket brasoc'h ar restroù eget $1; $2 eo ment ar restr-mañ.",
+'largefileserver'             => "Brasoc'h eo ar restr-mañ eget ar pezh a c'hall ar servijer aotren.",
+'emptyfile'                   => "Evit doare eo goullo ar restr bet karget ganeoc'h. Moarvat eo abalamour d'an tipo en anv ar restr. Gwiriit mat e fell deoc'h pellgargañ ar restr-mañ.",
+'fileexists'                  => "Ur restr all gant an anv-se zo c'hoazh. Trugarez da wiriañ $1. Ha sur oc'h da gaout c'hoant da gemmañ ar restr-mañ ?",
+'fileexists-forbidden'        => "Ur restr all gant an anv-se zo c'hoazh; kit war ho kiz hag enporzhiit ar restr dindan un anv all [[Image:$1|thumb|center|$1]]",
+'fileexists-shared-forbidden' => "Ur restr all gant an hevelep anv zo c'hoazh er c'havlec'h eskemm restroù; kit war ho kiz hag enpozhiit ar restr adarre dindan un anv all. [[Image:$1|thumb|center|$1]]",
+'successfulupload'            => 'Eiladenn kaset da benn vat',
+'fileuploaded'                => 'Eilet eo bet ar restr "$1" war ar servijer.
+Heuilhit al liamm-mañ : ($2) evit mont ouzh ar bajenn zeskrivañ ha reiñ titouroù diwar-benn ar restr, da skouer an orin anezhi, an deiz m\'eo bet savet, an aozer anezhi, pe kement titour all a c\'hall bezañ ganeoc\'h.',
+'uploadwarning'               => 'Diwallit!',
+'savefile'                    => 'Enrollañ ar restr',
+'uploadedimage'               => '"[[$1]]" enporzhiet',
+'uploaddisabled'              => 'Ho tigarez, diweredekaet eo bet kas ar restr-mañ.',
+'uploaddisabledtext'          => "N'haller ket kargañ restroù war ar wiki-mañ.",
+'uploadscripted'              => "Er restr-mañ ez eus kodoù HTML pe skriptoù a c'hallfe bezañ kammgomprenet gant ur merdeer Kenrouedad.",
+'uploadcorrupt'               => 'Brein eo ar restr-mañ, par eo he ment da netra pe fall eo an astenn anezhi.
+Gwiriit anezhi mar plij.',
+'uploadvirus'                 => 'Viruzet eo ar restr! Titouroù : $1',
+'sourcefilename'              => 'Anv ar resr da gas',
+'destfilename'                => "Anv a vo roet d'ar restr enrollet",
+'watchthisupload'             => 'Evezhiañ ar bajenn-mañ',
+'filewasdeleted'              => "Ur restr gant an anv-mañ zo bet enporzhiet dija ha diverket goude-se. Mat e vefe deoc'h gwiriañ an $1 a-raok hec'h enporzhiañ en-dro.",
+
+'upload-proto-error'      => 'Protokol direizh',
+'upload-proto-error-text' => 'Rekis eo an URLoù a grog gant <code>http://</code> pe <code>ftp://</code> evit enporzhiañ.',
+'upload-file-error'       => 'Fazi diabarzh',
+'upload-file-error-text'  => "Ur fazi diabarzh zo c'hoarvezet en ur grouiñ ur restr da c'hortoz war ar servijer. Kit e darempred gant unan eus merourien ar reizhiad.",
+'upload-misc-error'       => 'Fazi kargañ dianav',
+'upload-misc-error-text'  => "Ur fazi dianav zo bet e-ser kargañ. Gwiriit eo reizh an URL hag e c'hall bezañ tizhet ha klaskit en-dro. Ma talc'h ar gudenn, kit e darempred gant merourien ar reizhiad.",
+
+# Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
+'upload-curl-error6'       => "N'eus ket bet gallet tizhout an URL",
+'upload-curl-error6-text'  => "N'eus ket bet gallet tizhout an URL. Gwiriit mat eo reizh an URL hag emañ al lec'hienn enlinenn.",
+'upload-curl-error28'      => "Aet dreist d'an termen",
+'upload-curl-error28-text' => "Re bell eo bet al lec'hienn o respont. Gwiriit mat emañ al lec'hienn enlinenn, gortozit ur pennadig ha klaskit en-dro. Mat e vo deoc'h adklask d'ur mare dibresoc'h marteze ivez.",
+
+'license'            => 'Aotre',
+'nolicense'          => 'Hini ebet diuzet',
+'upload_source_url'  => " (Un URL reizh a c'hall bezañ tizhet gant an holl)",
+'upload_source_file' => " (ur restr war hoc'h urzhiataer)",
+
+# Image list
+'imagelist'                 => 'Roll ar skeudennoù',
+'imagelisttext'             => 'Setu ur roll $1 skeudenn rummet $2.',
+'imagelistforuser'          => 'Ne ziskouez nemet ar skeudennoù enporzhiet gant $1.',
+'getimagelist'              => "Oc'h adtapout roll ar skeudennoù",
+'ilsubmit'                  => 'Klask',
+'showlast'                  => 'diskouez an/ar $1 skeudenn ziwezhañ rummet dre $2.',
+'byname'                    => 'dre o anv',
+'bydate'                    => 'dre an deiziad anezho',
+'bysize'                    => 'dre o ment',
+'imgdelete'                 => 'diverk',
+'imgdesc'                   => 'deskr',
+'imgfile'                   => 'restr',
+'imglegend'                 => "Alc'hwez: (deskr) = diskouez/kemmañ deskrivadur ar skeudenn.",
+'imghistory'                => 'Istor ar skeudenn',
+'revertimg'                 => 'adlak',
+'deleteimg'                 => 'diverk',
+'deleteimgcompletely'       => 'diverk',
+'imghistlegend'             => "Alc'hwez: (brem) = setu ar skeudenn zo bremañ, (diverk) = diverkañ ar stumm kozh-mañ, (adlak) = adlakaat ar stumm kozh-mañ.
+<br /><i>Klikit war an deiziad evit gwelet ar skeudenn eilet d'an deiziad-se</i>.",
+'imagelinks'                => 'Liammoù war-du ar skeudenn',
+'linkstoimage'              => 'Ul liamm war-du ar skeudenn-mañ zo war ar pajennoù a-is :',
+'nolinkstoimage'            => "N'eus liamm ebet war-du ar skeudenn-mañ war pajenn ebet.",
+'sharedupload'              => 'Rannet eo ar restr-mañ. Gallout a ra bezañ implijet evit raktresoù all.',
+'shareduploadwiki'          => "Gwelit an $1 mar plij evit gouzout hiroc'h.",
+'shareduploadwiki-linktext' => 'pajenn deskrivañ ar restr',
+'noimage'                   => "N'eus pajenn ebet anvet evel-se c'hoazh, gallout a rit $1.",
+'noimage-linktext'          => 'enporzhiañ unan',
+'uploadnewversion-linktext' => 'Kargañ ur stumm nevez eus ar restr-mañ',
+'imagelist_date'            => 'Deiziad',
+'imagelist_name'            => 'Anv',
+'imagelist_user'            => 'Implijer',
+'imagelist_size'            => 'Ment (e bitoù)',
+'imagelist_description'     => 'Deskrivadur',
+'imagelist_search_for'      => 'Klask evit anv ar skeudenn :',
+
+# MIME search
+'mimesearch' => 'Klask MIME',
+'mimetype'   => 'Seurt MIME :',
+'download'   => 'pellgargañ',
+
+# Unwatched pages
+'unwatchedpages' => "Pajennoù n'int ket evezhiet",
+
+# List redirects
+'listredirects' => 'Roll an adkasoù',
+
+# Unused templates
+'unusedtemplates'     => 'Patromoù dizimplij',
+'unusedtemplatestext' => 'Rollet eo amañ an holl bajennoù dezho an esaouenn anv "patrom" ha n\'int ket implijet war pajenn ebet. Ho pet soñj da wiriañ mat hag-eñ n\'eus ket liammoù all war-du ar patromoù-se a-raok diverkañ anezho.',
+'unusedtemplateswlh'  => 'liammoù all',
+
+# Random redirect
+'randomredirect' => 'Ur bajenn adkas dre zegouezh',
+
+# Statistics
+'statistics'             => 'Stadegoù',
+'sitestats'              => "Stadegoù al lec'hienn",
+'userstats'              => 'Stadegoù implijer',
+'sitestatstext'          => "En holl ez eus '''\$1''' pajenn er bank roadennoù.
+Er sifr-mañ emañ ar pajennoù \"kaozeal\", ar pajennoù a denn da {{SITENAME}}, an danvez-pennadoù, ar pajennoù adkas ha meur a seurt pajenn all n'haller ket sellet outo evel pennadoù.
+Mar lakaer ar pajennoù-se er-maez e chom '''\$2''' pajenn zo moarvat gwir pennadoù.
+
+'''\$8''' restr zo bet karget.
+
+'''\$3''' pajenn zo bet sellet outo ha degaset ez eus bet kemmoù e '''\$4''' pajenn abaoe m'eo bet savet ar wiki.
+Ar pezh a ra ur geidenn a '''\$5''' kemm dre bajenn ha '''\$6''' selladenn evit pep kemm.
+
+Hirder al [http://meta.wikimedia.org/wiki/Help:Job_queue lostennad labour] zo par da '''\$7'''.",
+'userstatstext'          => "'''$1''' implijer enrollet zo; en o zouez ez eus 
+'''$2''' (pe '''$4%''') zo $5.",
+'statistics-mostpopular' => 'Pajennoù muiañ sellet',
+
+'disambiguations'      => 'Pajennoù digejañ',
+'disambiguationspage'  => '{{ns:4}}:Liammoù_ouzh_ar_pajennoù_disheñvelaat',
+'disambiguations-text' => "Liammet eo ar pajennoù da-heul ouzh ur '''bajenn digejañ'''. Padal e tlefent kas war-eeun d'an danvez anezho.<br />Sellet e vez ouzh ur bajenn evel ur bajenn digejañ m'eo liammet adal $1.<br />Ne gemerer ket e kont al liammoù adal <em>esaouennoù anv</em> all.",
+
+'doubleredirects'     => 'Adkasoù doubl',
+'doubleredirectstext' => '<b>Diwallit:</b> Gallout a ra bezañ "pozitivoù faos er roll-mañ. D\'ar mare-se eo moarvat peogwir ez eus testenn war bajenn an #REDIRECT kentañ ivez.<br />War bep linenn emañ al liammoù war-du pajenn an adkas kentañ hag en eil hag ivez linenn gentañ pajenn an eil adkas zo sañset reiñ ar pal "gwirion". War-du ar pal-se e tlefe liammañ an #REDIRECT kentañ.',
+
+'brokenredirects'        => 'Adkasoù torret',
+'brokenredirectstext'    => "Kas a ra an adkasoù-mañ d'ur bajenn n'eus ket anezhi.",
+'brokenredirects-edit'   => '(kemmañ)',
+'brokenredirects-delete' => '(diverkañ)',
+
+# Miscellaneous special pages
+'nbytes'                  => '$1 eizhbit',
+'ncategories'             => '$1 rummad',
+'nlinks'                  => '$1 daveenn',
+'nmembers'                => '$1 pennad',
+'nrevisions'              => '$1 stumm',
+'nviews'                  => '$1 selladenn',
+'lonelypages'             => 'Pajennoù en o-unan',
+'lonelypagestext'         => "N'eus liamm ebet e pajenn ebet eus ar wiki-mañ a gasfe war-du ar pajennoù a-is.",
+'uncategorizedpages'      => 'Pajennoù hep rummad ebet',
+'uncategorizedcategories' => 'Rummadoù hep rummadoù',
+'uncategorizedimages'     => 'Skeudennoù dirummad',
+'unusedcategories'        => 'Rummadoù dizimplij',
+'unusedimages'            => 'Skeudennoù en o-unan',
+'popularpages'            => 'Pajennoù sellet ar muiañ',
+'wantedcategories'        => 'Rummadoù a vank',
+'wantedpages'             => 'Pajennoù goulennet ar muiañ',
+'mostlinked'              => 'Pajennoù dezho al liammoù niverusañ',
+'mostlinkedcategories'    => 'Rummadoù dezho al liammoù niverusañ',
+'mostcategories'          => 'Pennadoù rummatet ar muiañ',
+'mostimages'              => 'Skeudennoù dezho al liammoù niverusañ',
+'mostrevisions'           => 'Pennadoù bet kemmet ar muiañ',
+'allpages'                => 'An holl bajennoù',
+'prefixindex'             => 'An holl bajennoù dre o lizherenn gentañ',
+'randompage'              => 'Ur bajenn dre zegouezh',
+'shortpages'              => 'Pennadoù berr',
+'longpages'               => 'Pennadoù hir',
+'deadendpages'            => 'Pajennoù dall (hep liamm diabarzh)',
+'deadendpagestext'        => "Ar pajennoù da-heul n'int ket liammet ouzh pajenn ebet all er wiki-mañ.",
+'protectedpages'          => 'Pajennoù gwarezet',
+'protectedpagestext'      => "Gwarezet eo ar pajennoù da-heul; n'haller na degas kemmoù enno nag o dilec'hiañ",
+'listusers'               => 'Roll an implijerien',
+'specialpages'            => 'Pajennoù dibar',
+'spheading'               => 'Pajennoù dibar',
+'restrictedpheading'      => 'Pajennoù dibar miret-strizh',
+'recentchangeslinked'     => 'Heuliañ al liammoù',
+'rclsub'                  => '(eus ar pajennoù liammet ouzh "$1")',
+'newpages'                => 'Pajennoù nevez',
+'newpages-username'       => 'Anv implijer :',
+'ancientpages'            => 'Pennadoù koshañ',
+'intl'                    => 'Liammoù etrewiki',
+'move'                    => 'adenvel',
+'movethispage'            => 'Adenvel ar bajenn',
+'unusedimagestext'        => "<p>Na zisoñjit e c'hall lec'hiennoù all, {{SITENAME}}où all, kaout ul liamm eeun war-du ar skeudenn-mañ hag e c'hall neuze ar skeudenn-mañ bezañ bet lakaet war ar roll-mañ tra m'emañ implijet e lec'h all.",
+'unusedcategoriestext'    => "Krouet eo bet ar rummadoù-mañ met n'int ket bet implijet e pennad pe rummad ebet.",
+
+# Book sources
+'booksources'               => 'Oberennoù dave',
+'booksources-search-legend' => 'Klask en oberennoù dave',
+'booksources-isbn'          => 'ISBN :',
+'booksources-go'            => 'Kadarnaat',
+'booksources-text'          => "Ur roll liammoù a gas da lec'hiennoù all ma werzher levrioù kozh ha nevez a gavot a-is; marteze e kavot eno titouroù pelloc'h war al levrioù a glaskit :",
+
+'categoriespagetext' => 'War ar wiki emañ ar rummadoù da-heul :',
+'data'               => 'Stlennoù',
+'userrights'         => 'Merañ statud an implijerien',
+'groups'             => 'Strolladoù implijer',
+'alphaindexline'     => '$1 da $2',
+'version'            => 'Stumm',
+'log'                => 'Marilhoù',
+'alllogstext'        => "Diskwel ar marilhoù pellgargañ, diverkañ, gwareziñ, stankañ ha merañ. Gallout a rit personelaat ar mod diskwel en ur zibab ar marilh, an anv implijer pe ar bajenn a fell deoc'h.",
+'logempty'           => 'Goullo eo istor ar bajenn-mañ.',
+
+# Special:Allpages
+'nextpage'          => "Pajenn war-lerc'h ($1)",
+'prevpage'          => 'Pajenn gent ($1)',
+'allpagesfrom'      => 'Diskouez ar pajennoù adal :',
+'allarticles'       => 'An holl bennadoù',
+'allinnamespace'    => 'An holl bajennoù (esaouenn $1)',
+'allnotinnamespace' => "An holl bajennoù (ar re n'emaint ket en esaouenn anv $1)",
+'allpagesprev'      => 'Kent',
+'allpagesnext'      => "War-lerc'h",
+'allpagessubmit'    => 'Kadarnaat',
+'allpagesprefix'    => 'Diskouez ar pajennoù a grog gant :',
+'allpagesbadtitle'  => "Fall e oa anv ar bajenn lakaet pe neuze ez eus ennañ ur rakger etrewiki pe etreyezhoù. Evit doare ez arouezennoù n'haller ket implijout en titloù.",
+
+# Special:Listusers
+'listusersfrom' => 'Diskouez an implijerien ha kregiñ gant :',
+
+# E-mail user
+'mailnologin'     => "Chomlec'h ebet",
+'mailnologintext' => "Ret eo deoc'h bezañ [[Special:Userlogin|luget]]
+ha bezañ merket ur chomlec'h postel reizh en ho [[Special:Preferences|penndibaboù]]
+evit gallout kas ur postel d'un implijer all.",
+'emailuser'       => "Kas ur postel d'an implijer-mañ",
+'emailpage'       => 'Postel implijer',
+'emailpagetext'   => "M'en deus an implijer-se merket ur chomlec'h postel reizh en e benndibaboù e vo kaset ur postel dezhañ dre ar furmskrid a-is.
+E maezienn \"Kaser\" ho postel e vo merket ar chomlec'h postel resisaet ganeoc'h-c'hwi, d'ar resever da c'halloud respont deoc'h ma kar.",
+'usermailererror' => 'Fazi postel :',
+'defemailsubject' => 'postel kaset eus {{SITENAME}}',
+'noemailtitle'    => "Chomlec'h elektronek ebet",
+'noemailtext'     => "N'en deus ket an implijer-mañ resisaet chomlec'h postel reizh ebet pe dibabet en deus chom hep resev posteloù a-berzh an implijerien all.",
+'emailfrom'       => 'Kaser',
+'emailto'         => 'Resever',
+'emailsubject'    => 'Danvez',
+'emailmessage'    => 'Postel',
+'emailsend'       => 'Kas',
+'emailccme'       => "Kasit din un eilenn eus ma c'hemennadenn dre bostel.",
+'emailccsubject'  => 'Eilenn eus ho kemennadenn da $1: $2',
+'emailsent'       => 'Postel kaset',
+'emailsenttext'   => 'Kaset eo bet ho postel.',
+
+# Watchlist
+'watchlist'            => 'Rollad evezhiañ',
+'mywatchlist'            => 'Rollad evezhiañ',
+'watchlistfor'         => "(evit '''$1''')",
+'nowatchlist'          => "N'eus pennad ebet en ho rollad evezhiañ.",
+'watchlistanontext'    => "Ret eo deoc'h $1 evit gwelet pe kemmañ an elfennoù zo en ho rollad evezhiañ.",
+'watchlistcount'       => "'''$1 pajenn zo en ho rollad evezhiañ, gant ar pajennoù kaozeal en o zouez'''",
+'clearwatchlist'       => 'Goullonderiñ ar roll evezhiañ',
+'watchlistcleartext'   => "Ha sur oc'h e fell deoc'h lemel anezho kuit?",
+'watchlistclearbutton' => 'Riñsañ ar rollad evezhiañ',
+'watchlistcleardone'   => 'Riñset eo bet ho rollad evezhiañ. $1 pajenn zo bet lamet kuit.',
+'watchnologin'         => 'Diluget',
+'watchnologintext'     => "Ret eo deoc'h bezañ [[Special:Userlogin|luget]]
+evit kemmañ ho roll.",
+'addedwatch'           => "Ouzhpennet d'ar roll",
+'addedwatchtext'       => '<p>Ouzh ho [[Special:Watchlis|rollad evezhiañ]] eo bet ouzhpennet ar bajenn "$1".
+Kemmoù da zont ar bajenn-mañ ha re ar bajenn gaozeal stag outi a vo rollet amañ hag e teuio ar bajenn <b>e tev</b> er [[Special:Recentchanges|roll kemmoù diwezhañ]] evit bezañ gwelet aesoc\'h ganeoc\'h.</p>
+
+<p>Evit tennañ ar bajenn-mañ a-ziwar ho rollad evezhiañ. klikit war "Paouez da evezhiañ" er framm merdeiñ.</p>',
+'removedwatch'         => 'Lamet a-ziwar ar rollad evezhiañ',
+'removedwatchtext'     => 'Lamet eo bet ar bajenn « $1 » a-ziwar ho rollad evezhiañ.',
+'watch'                => 'Evezhiañ',
+'watchthispage'        => 'Evezhiañ ar bajenn-mañ',
+'unwatch'              => 'paouez da evezhiañ',
+'unwatchthispage'      => 'Paouez da evezhiañ',
+'notanarticle'         => 'Pennad ebet',
+'watchnochange'        => "Pajenn ebet eus ar re evezhiet ganeoc'h n'eo bet kemmet e-pad ar prantad spisaet",
+'watchdetails'         => "Lakaet hoc'h eus $1 pajenn dindan evezh, anez kontañ ar pajennoù kaozeal.  [$4 Diskouez ha kemmañ ar roll klok].",
+'wlheader-enotif'      => "* War enaou emañ ar c'has posteloù.",
+'wlheader-showupdated' => "* E '''tev''' emañ merket ar pajennoù bet degaset kemmoù enno abaoe ar wech ziwezhañ hoc'h eus sellet outo",
+'watchmethod-recent'   => "Gwiriañ ar c'hemmoù diwezhañ er pajennoù dindan evezh",
+'watchmethod-list'     => "Gwiriañ ar c'hemmoù diwezhañ evit ar pajennoù evezhiet",
+'removechecked'        => 'Lemel ar pennadoù diuzet a-ziwar ar rollad evezhiañ',
+'watchlistcontains'    => '$1 pajenn zo en ho rollad evezhiañ',
+'watcheditlist'        => 'Setu aze ho rollad evezhiañ dre urzh al lizherenneg. Diuzit ar pajennoù hoc\'h eus c\'hoant da lemel a-ziwar ar roll ha klikit war ar bouton "lemel a-ziwar ar rollad evezhiañ" e traoñ ar skramm.',
+'removingchecked'      => 'Lamet eo ar pennadoù diuzet a-ziwar ho rollad evezhiañ...',
+'couldntremove'        => 'Dibosupl da lemel kuit ar pennad « $1 »...',
+'iteminvalidname'      => "Ur gudenn zo gant ar pennad « $1 » : n'eo ket mat e anv...",
+'wlnote'               => 'A-is emañ an $1 kemm diwezhañ abaoe an <b>$2</b> eurvezh diwezhañ.',
+'wlshowlast'           => 'Diskouez an $1 eurvezh $2 devezh diwezhañ $3',
+'wlsaved'              => 'Ne vez hizivaet ar rollad evezhiañ nemet ur wech bep eurvezh kuit da sammañ ar servijer betek re.',
+'watchlist-show-bots'  => 'Diskouez kemmoù ar robotoù',
+'watchlist-hide-bots'  => 'Kuzhat kemmoù ar botoù',
+'watchlist-show-own'   => "Diskouez ma c'hemmoù",
+'watchlist-hide-own'   => "Kuzhat ma c'hemmoù",
+'watchlist-show-minor' => "Diskouez ar c'hemmoù dister",
+'watchlist-hide-minor' => "Kuzhat ar c'hemmoù dister",
+'wldone'               => 'Graet.',
+
+# Displayed when you click the "watch" button and it's in the process of watching
+'watching'   => 'Heuliet...',
+'unwatching' => 'Paouez da evezhiañ...',
+
+'enotif_mailer'      => 'Posteler Kemenn {{SITENAME}}',
+'enotif_reset'       => 'Merkañ an holl bajennoù evel gwelet',
+'enotif_newpagetext' => 'Ur bajenn nevez eo homañ.',
+'changed'            => 'kemmet',
+'created'            => 'Krouet',
+'enotif_subject'     => '$CHANGEDORCREATED eo bet pajenn $PAGETITLE {{SITENAME}} gant $PAGEEDITOR',
+'enotif_lastvisited' => 'Sellet ouzh $1 evit gwelet an holl gemmoù abaoe ho selladenn ziwezhañ.',
+'enotif_body'        => '$WATCHINGUSERNAME ker, 
+
+$CHANGEDORCREATED Kemmet eo bet ar bajenn {{SITENAME}} evit $PAGETITLE gant $PAGEEDITOR d\'an $PAGEEDITDATE, gwelet $PAGETITLE_URL evit gwelet ar stumm red. 
+
+$NEWPAGE 
+
+Diverrañ an Implijer : $PAGESUMMARY $PAGEMINOREDIT 
+
+Mont e darempred gant an implijer: 
+postel: $PAGEEDITOR_EMAIL 
+wiki: $PAGEEDITOR_WIKI 
+
+Nemet e yafec\'h da welet ar bajenn end-eeun, ne vo kemenn all ebet ma vez degaset kemmoù enni pelloc\'h. Gallout a rit nevesaat doare ar pennadoù evezhiet ganeoc\'h en ho rollad evezhiañ ivez. 
+
+            Ho reizhiad kemenn {{SITENAME}} muiañ karet 
+
+-- 
+A-benn kemmañ doare ho rollad evezhiañ, sellit ouzh {{fullurl:{{ns:Special}}:Watchlist/edit}} 
+
+Evezhiadennoù ha skoazell pelloc\'h : 
+{{fullurl:{{MediaWiki:helppage}}}}',
+
+# Delete/protect/revert
+'deletepage'                  => 'Diverkañ ur bajenn',
+'confirm'                     => 'Kadarnaat',
+'excontent'                   => "endalc'had '$1'",
+'excontentauthor'             => "an danvez a oa : '$1' (ha '[[Special:Contributions/$2|$2]]' a oa bet an implijer nemetañ)",
+'exbeforeblank'               => "A-raok diverkañ e oa an endalc'had : '$1'",
+'exblank'                     => "pajenn c'houllo",
+'confirmdelete'               => 'Kadarnaat an diverkañ',
+'deletesub'                   => '(O tiverkañ "$1")',
+'historywarning'              => "Diwallit: War-nes diverkañ ur bajenn ganti un istor emaoc'h :",
+'confirmdeletetext'           => "War-nes diverkañ da viken ur bajenn pe ur skeudenn eus ar bank roadennoù emaoc'h. Diverket e vo ivez an holl stummoù kozh stag outi.
+Kadarnait, mar plij, eo mat an dra-se hoc'h eus c'hoant da ober, e komprenit mat an heuliadoù, hag e rit se diouzh ar [[{{MediaWiki:policy-url}}]].",
+'actioncomplete'              => 'Diverkadenn kaset da benn',
+'deletedtext'                 => '"Diverket eo bet $1".
+Sellet ouzh $2 evit roll an diverkadennoù diwezhañ.',
+'deletedarticle'              => 'diverket "$1"',
+'dellogpage'                  => 'Roll ar pajennoù diverket',
+'dellogpagetext'              => 'Setu roll ar pajennnoù diwezhañ bet diverket.',
+'deletionlog'                 => 'roll an diverkadennoù',
+'reverted'                    => 'Adlakaat ar stumm kent',
+'deletecomment'               => 'Abeg an diverkadenn',
+'imagereverted'               => 'Adlakaet eo bet ar stumm kent.',
+'rollback'                    => "disteuler ar c'hemmoù",
+'rollback_short'              => 'Disteuler',
+'rollbacklink'                => 'disteuler',
+'rollbackfailed'              => "C'hwitet eo bet an distaoladenn",
+'cantrollback'                => 'Dibosupl da zisteuler: an aozer diwezhañ eo an hini nemetañ da vezañ kemmet ar pennad-mañ',
+'alreadyrolled'               => "Dibosupl eo disteuler ar c'hemm diwezhañ graet e [[:$1]]
+gant [[User:$2|$2]] ([[User talk:$2|Talk]]); kemmet pe distaolet eo bet c'hoazh gant unan bennak all.
+
+Ar c'hemm diwezhañ a oa gant [[User:$3|$3]] ([[User talk:$3|Talk]]).",
+'editcomment'                 => 'Diverradenn ar c\'hemm a oa: "<i>$1</i>".', # only shown if there is an edit comment
+'revertpage'                  => "Kemmoù distaolet gant [[Special:Contributions/$2|$2]] ([[User_talk:$2|Kaozeal]]); adlakaet d'ar stumm diwezhañ a-gent gant [[User:$1|$1]]",
+'sessionfailure'              => 'Evit doare ez eus ur gudenn gant ho talc\'h;
+Nullet eo bet an ober-mañ a-benn en em wareziñ diouzh an tagadennoù preizhañ.
+Klikit war "kent" hag adkargit ar bajenn oc\'h deuet drezi; goude klaskit en-dro.',
+'protectlogpage'              => 'Log_gwareziñ',
+'protectlogtext'              => 'Kavit a-is ur roll pajennoù gwarezet ha diwarezet. Sellet ouzh ar [[Special:Protectedpages|roll ar pajennoù gwarezet]] evit kaout roll ar pajennoù gwarezet bremañ.',
+'protectedarticle'            => 'en/he deus gwarezet [[$1]]',
+'unprotectedarticle'          => 'en/he deus diwarezet [[$1]]',
+'protectsub'                  => '(Stankañ "$1")',
+'confirmprotecttext'          => "Ha mennet oc'h da wareziñ ar bajenn-mañ ?",
+'confirmprotect'              => 'Kadarnaat ar stankañ',
+'protectmoveonly'             => 'Gwareziñ an adkasoù hepken',
+'protectcomment'              => 'Abeg ar stankañ',
+'protectexpiry'               => 'Termen',
+'protect_expiry_invalid'      => 'Direizh eo termen ar prantad.',
+'unprotectsub'                => '(Distankañ "$1")',
+'confirmunprotecttext'        => "Ha mennet oc'h da ziwareziñ ar bajenn-mañ?",
+'confirmunprotect'            => 'Abeg an distankañ',
+'unprotectcomment'            => 'Abeg an distankañ',
+'protect-unchain'             => 'Dibrennañ an aotreoù adenvel',
+'protect-text'                => "Amañ e c'hallit gwelet ha cheñch live gwareziñ ar bajenn <strong>$1</strong>.",
+'protect-viewtext'            => "Gant ho kont n'hoc'h eus ket ar gwir da cheñch live gwareziñ ar pennadoù. Setu an doare zo bremañ evit ar bajenn <strong>$1</strong>:",
+'protect-cascadeon'           => "Gwarezet eo ar bajenn-mañ peogwir he c'haver er pajennoù da-heul zo gweredekaet enno ar gwareziñ dre skalierad. Gallout a rit kemmañ al live gwareziñ met ne cheñcho ket ar gwareziñ dre skalierad.",
+'protect-default'             => '(dre ziouer)',
+'protect-level-autoconfirmed' => "Stankañ an implijerien n'int ket enrollet",
+'protect-level-sysop'         => 'Merourien hepken',
+'protect-summary-cascade'     => 'Gwareziñ dre skalierad',
+'protect-expiring'            => "a zeu d'e dermen d'an $1",
+'protect-cascade'             => 'Gwareziñ dre skalierad - gwareziñ a ra an holl bajennoù zo er bajenn-mañ. ARABAT IMPLIJOUT.',
+
+# Restrictions (nouns)
+'restriction-edit' => 'Kemmañ',
+'restriction-move' => 'Adenvel',
+
+# Restriction levels
+'restriction-level-sysop'         => 'Gwarez klok',
+'restriction-level-autoconfirmed' => 'Gwarez darnel',
+
+# Undelete
+'undelete'                 => 'Diziverkañ ar bajenn ziverket',
+'undeletepage'             => 'Gwelet ha diziverkañ ar bajenn ziverket',
+'viewdeletedpage'          => 'Gwelet ar pajennoù diverket',
+'undeletepagetext'         => "Diverket eo bet ar pajennoù-mañ, er pod-lastez emaint met er bank roadennoù emaint c'hoazh ha gallout a reont bezañ diziverket eta.
+Ingal e c'hall ar pod-lastez bezañ goullonderet.",
+'undeleteextrahelp'        => "Evit diziverkañ ar bajenn en he fezh, laoskit goullo an holl logoù bihan ha klikit war '''''Diziverkañ!'''''. Evit diziverkañ stummoù zo hepken, askit ar logoù bihan a glot gant ar stummoù da vezañ adsavet, ha klikit war '''''Diziverkañ!'''''. Mar klikit war '''''Adderaouiñ''''' e vo naetaet ar stern diverrañ hag al logoù asket.",
+'undeletearticle'          => 'Diziverkañ ar pennadoù diverket',
+'undeleterevisions'        => "$1 (g/c'h)kemm diellaouet",
+'undeletehistory'          => "Ma tiziverkit ar bajenn e vo diziverket an holl gemmoù bet degaset en hec'h istor.
+Ma'z eus bet krouet ur bajenn nevez dezhi an hevelep anv abaoe an diverkadenn, e teuio war wel ar c'hemmoù diziverket er rann istor a-raok, ha ne vo ket erlec'hiet ar stumm red ent emgefre.",
+'undeletehistorynoadmin'   => "Diverket eo bet ar pennad-mañ. Displeget eo perak en diverradenn a-is, war un dro gant munudoù an implijerien o deus bet degaset kemmoù er bajenn a-raok na vije diverket. N'eus nemet ar verourien a c'hall tapout krog war an destenn bet diverket.",
+'undelete-revision'        => "Stumm eus $1 diverket d'an $2 :",
+'undeleterevision-missing' => "Stumm fall pe diank. Pe hoc'h eus heuliet ul liamm fall, pe eo bet diziverket ar stumm pe c'hoazh eo bet lamet diouzh an dielloù.",
+'undeletebtn'              => 'Diziverkañ!',
+'undeletereset'            => 'Adderaouiñ',
+'undeletecomment'          => 'Notenn :',
+'undeletedarticle'         => 'Diziverket"$1"',
+'undeletedrevisions'       => '$1 stumm bet diziverket',
+'undeletedrevisions-files' => 'Diziverket ez eus bet $1 stumm ha $2 restr',
+'undeletedfiles'           => '$1 restr adsavet',
+'cannotundelete'           => "Dibosupl eo diziverkañ; moarvat eo bet diziverket gant unan bennak all araozoc'h.",
+'undeletedpage'            => "<big>'''Diziverket eo bet $1'''</big>
+
+Sellit ouzh [[Special:Log/delete|marilh an diverkadennoù]] evit teuler ur sell ouzh an diverkadennoù diwezhañ.",
+'undelete-header'          => 'Gwelet [[Special:Log/delete|al log diverkañ]] evit ar pajennoù diverket nevez zo.',
+'undelete-search-box'      => 'Klask pajennoù diverket',
+'undelete-search-prefix'   => 'Diskouez ar pajennoù a grog gant :',
+'undelete-search-submit'   => 'Klask',
+'undelete-no-results'      => "N'eus bet kavet pajenn ebet a glotje e dielloù an diverkadennoù.",
+
+# Namespace form on various pages
+'namespace' => 'Esaouenn anv :',
+'invert'    => 'Eilpennañ an dibab',
+
+# Contributions
+'contributions' => 'diazezet war labour $1.',
+'mycontris'     => 'Ma degasadennnoù',
+'contribsub2'    => 'Evit $1 ($2)',
+'nocontribs'    => "N'eus bet kavet kemm ebet o klotañ gant an dezverkoù-se.",
+'ucnote'        => "Setu an/ar <b>$1</b> (b/c'h)kemm diwezhañ bet graet gant an implijer-mañ e-pad an/ar <b>$2</b> devezh diwezhañ.",
+'uclinks'       => "diskouez an/ar $1 (g/c'h)kemm diwezhañ; diskouez an/ar $2 devezh diwezhañ.",
+'uctop'         => ' (diwezhañ)',
+'newbies'       => 'implijerien nevez',
+
+'sp-contributions-newest'      => 'Nevesañ',
+'sp-contributions-oldest'      => 'Koshañ',
+'sp-contributions-newer'       => "$1 nevesoc'h",
+'sp-contributions-older'       => "$1 koshoc'h",
+'sp-contributions-newbies-sub' => 'Evit an implijerien nevez',
+'sp-contributions-blocklog'    => 'Roll ar stankadennoù',
+
+'sp-newimages-showfrom' => 'Diskouez ar skeudennoù nevez adal $1',
+
+# What links here
+'whatlinkshere' => 'Pajennoù liammet',
+'notargettitle' => 'netra da gavout',
+'notargettext'  => 'Merkit anv ur bajenn da gavout pe hini un implijer.',
+'linklistsub'   => '(Roll al liammoù)',
+'linkshere'     => "Ar pajennoù a-is zo enno ul liamm a gas war-du '''[[:$1]]''':",
+'nolinkshere'   => "N'eus pajenn ebet enni ul liamm war-du '''[[:$1]]'''.",
+'isredirect'    => 'pajenn adkas',
+'istemplate'    => 'enframmet',
+
+# Block/unblock
+'blockip'                     => "Stankañ ur chomlec'h IP",
+'blockiptext'                 => "Grit gant ar furmskrid a-is evit stankañ ar moned skrivañ ouzh ur chomlec'h IP pe un implijer bennak.
+Seurt diarbennoù n'hallont bezañ kemeret nemet evit mirout ouzh ar vandalerezh hag a-du gant an [[{{MediaWiki:policy-url}}|erbedadennoù ha reolennoù da heuliañ]].
+Roit a-is an abeg resis (o verkañ, da skouer, roll ar pajennoù bet graet gaou outo).",
+'ipaddress'                   => "Chomlec'h IP",
+'ipadressorusername'          => "Chomlec'h IP pe anv implijer",
+'ipbexpiry'                   => 'Pad ar stankadenn',
+'ipbreason'                   => 'Abeg ar stankañ',
+'ipbanononly'                 => 'Stankañ an implijerien dianav hepken',
+'ipbcreateaccount'            => 'Mirout a grouiñ kontoù',
+'ipbenableautoblock'          => "Stankañ war-eeun ar chomlec'h IP diwezhañ implijet gant an den-mañ hag an holl chomlec'hioù en deus klasket degas kemmoù drezo war-lerc'h",
+'ipbsubmit'                   => "Stankañ ouzh ar chomlec'h-mañ",
+'ipbother'                    => 'Prantad all',
+'ipboptions'                  => '2 eurvezh:2 hours,1 devezh:1 day,3 devezh:3 days,1 sizhunvezh:1 week,2 sizhunvezh:2 weeks,1 mizvezh:1 month,3 mizvezh:3 months,6 mizvezh:6 months,1 bloaz:1 year,da viken:infinite',
+'ipbotheroption'              => 'prantad all',
+'badipaddress'                => "Kamm eo ar chomlec'h IP.",
+'blockipsuccesssub'           => 'Stankadenn deuet da benn vat',
+'blockipsuccesstext'          => 'Stanket ez eus bet ouzh chomlec\'h IP "$1".
+<br />Gallout a rit sellet ouzh ar [[Special:Ipblocklist|bajenn-mañ]] evit gwelet roll ar chomlec\'hioù IP stanket outo.',
+'ipb-unblock-addr'            => 'Distankañ $1',
+'ipb-unblock'                 => "Distankañ un implijer pe ur chomlec'h IP",
+'ipb-blocklist-addr'          => 'Gwelet ar stankadennoù zo evit $1',
+'ipb-blocklist'               => 'Teuler ur sell ouzh roll an dud stanket evit poent',
+'unblockip'                   => "Distankañ ur chomlec'h IP",
+'unblockiptext'               => "Grit gant ar furmskrid a-is evit adsevel ar moned skrivañ ouzh ur chomlec'h IP bet stanket a-gent.",
+'ipusubmit'                   => "Distankañ ar chomlec'h-mañ",
+'unblocked'                   => 'Distanket eo bet [[User:$1|$1]]',
+'ipblocklist'                 => "Roll ar chomlec'hioù IP stanket outo",
+'blocklistline'               => '$1, $2 en/he deus stanket $3 ($4)',
+'infiniteblock'               => 'da viken',
+'expiringblock'               => "a zeu d'e dermen d'an $1",
+'anononlyblock'               => 'implijerien dizanv hepken',
+'noautoblockblock'            => 'emstankañ diweredekaet',
+'createaccountblock'          => "Harzet eo ar c'hrouiñ kontoù",
+'ipblocklistempty'            => 'Goullo eo roll ar stankadennoù',
+'blocklink'                   => 'stankañ',
+'unblocklink'                 => 'distankañ',
+'contribslink'                => 'degasadenn',
+'autoblocker'                 => 'Emstanket rak rannañ a rit ur chomlec\'h IP gant "$1". Abeg : "$2".',
+'blocklogpage'                => 'Log stankañ',
+'blocklogentry'               => 'stanket "[[$1]]" e-pad $2 $3',
+'blocklogtext'                => "Setu roud stankadennoù ha distankadennoù an implijerien. N'eo ket bet rollet ar chomlec'hioù IP bet stanket outo ent emgefre. Sellet ouzh [[Special:Ipblocklist|roll an implijerien stanket]] evit gwelet piv zo stanket e gwirionez.",
+'unblocklogentry'             => 'distanket "$1"',
+'block-log-flags-anononly'    => 'implijerien dizanv hepken',
+'block-log-flags-nocreate'    => 'berzet eo krouiñ kontoù',
+'block-log-flags-autoblock'   => 'Gweredekaet eo an emstankañ IPoù',
+'range_block_disabled'        => "Diweredekaet eo bet ar stankañ stuc'hadoù IP.",
+'ipb_expiry_invalid'          => 'amzer termen direizh.',
+'ipb_already_blocked'         => 'Stanket eo bet "$1" dija',
+'ip_range_invalid'            => 'Stankañ IP direizh.',
+'proxyblocker'                => 'Stanker proksi',
+'ipb_cant_unblock'            => "Fazi: N'eo ket stanket an ID $1. Moarvat eo bet distanket c'hoazh.",
+'proxyblockreason'            => "Stanket eo bet hoc'h IP rak ur proksi digor eo. Trugarez da gelaouiñ ho pourvezer moned ouzh ar Genrouedad pe ho skoazell deknikel eus ar gudenn surentez-mañ.",
+'proxyblocksuccess'           => 'Echu.',
+'sorbsreason'                 => "Rollet eo ho chomlec'h IP evel ur proksi digor en DNSBL implijet gant al lec'hienn-mañ.",
+'sorbs_create_account_reason' => "Rollet eo ho chomlec'h IP evel ur proksi digor war an DNSBL implijet gant al lec'hienn-mañ. N'hallit ket krouiñ ur gont",
+
+# Developer tools
+'lockdb'              => 'Prennañ ar bank',
+'unlockdb'            => 'Dibrennañ ar bank',
+'lockdbtext'          => "Ma vez prennet ar bank roadennoù n'hallo ket mui implijer ebet kemmañ pajennoù, enrollañ e benndibaboù, kemmañ e rollad evezhiañ na seveniñ oberiadenn ebet a c'houlenn degas kemm pe gemm er bank roadennoù.
+Kadarnait, mar plij, eo se hoc'h eus c'hoant da ober hag e vo dibrennet ar bank ganeoc'h kerkent ha ma vo bet kaset da benn hoc'h oberiadenn drezalc'h.",
+'unlockdbtext'        => "Dibrennañ ar bank a lakay adarre an holl implijerien e-tailh da gemmañ pajennoù, hizivaat o fenndibaboù hag o rollad evezhiañ ha seveniñ an holl oberiadennoù a c'houlenn ma vefe kemmet ar bank roadennoù.
+Kadarnait, mar plij, eo se hoc'h eus c'hoant da ober.",
+'lockconfirm'         => 'Ya, kadarnaat a ran e fell din prennañ ar bank roadennoù.',
+'unlockconfirm'       => 'Ya, kadarnaat a ran e fell din dibrennañ ar bank roadennoù.',
+'lockbtn'             => 'Prennañ ar bank',
+'unlockbtn'           => 'Dibrennañ ar bank',
+'locknoconfirm'       => "N'eo ket bet asket al log kadarnaat ganeoc'h.",
+'lockdbsuccesssub'    => 'Bank prennet.',
+'unlockdbsuccesssub'  => 'Bank dibrennet.',
+'lockdbsuccesstext'   => "Prennet eo bank roadennnoù {{SITENAME}}.
+
+<br />Na zisoñjit ket e zibrennañ pa vo bet kaset da benn vat hoc'h oberiadenn drezalc'h.",
+'unlockdbsuccesstext' => 'Dibrennet eo bank roadennoù {{SITENAME}}.',
+'lockfilenotwritable' => "N'haller ket skrivañ war restr prennañ ar bank roadennoù. A-benn prennañ-dibrennañ ar bank e rankit bezañ aotreet da skrivañ war ar servijer Kenrouedad.",
+'databasenotlocked'   => "N'eo ket prennet ar bank titouroù.",
+
+# Move page
+'movepage'                => 'Adenvel ur pennad',
+'movepagetext'            => "Grit gant ar furmskrid a-is evit adenvel ur pennad hag adkas an holl stummoù kent anezhañ war-du an anv nevez.
+Dont a raio an titl kentañ da vezañ ur bajenn adkas war-du an titl nevez.
+Ne vo ket kemmet liammoù an titl kozh ha ne vo ket dilec'hiet ar bajenn gaozeal, ma'z eus anezhi.
+
+'''DIWALLIT!'''
+Gallout a ra kement-se bezañ ur c'hemm bras ha dic'hortoz evit ur pennad a vez sellet outi alies;
+bezit sur e komprenit mat an heuliadoù a-raok kenderc'hel ganti.",
+'movepagetalktext'        => "Gant se e vo adanvet ent emgefre ar bajenn gaozeal stag, ma'z eus anezhi '''nemet ma:'''
+*ec'h adanvit ur bajenn war-du ul lec'h all,
+*ez eus ur bajenn gaozeal c'hoazh gant an anv nevez, pe
+*diweredekaet hoc'h eus ar bouton a-is.
+
+En degouezh-se e rankot adenvel pe gendeuziñ ar bajenn c'hwi hoc'h-unan ma karit.",
+'movearticle'             => "Dilec'hiañ ar pennad",
+'movenologin'             => 'Diluget',
+'movenologintext'         => 'Evit adenvel ur pennad e rankit bezañ [[Special:Userlogin|luget]] evel un implijer enrollet.',
+'newtitle'                => 'anv nevez',
+'move-watch'              => 'Evezhiañ ar bajenn-mañ',
+'movepagebtn'             => 'Adenvel ar pennad',
+'pagemovedsub'            => "Dilec'hiadenn kaset da benn vat",
+'pagemovedtext'           => 'Adkaset eo bet ar pennad "[[$1]]" da "[[$2]]".',
+'articleexists'           => "Ur pennad gantañ an anv-se zo dija pe n'eo ket reizh an titl hoc'h eus dibabet.
+Dibabit unan all mar plij.",
+'talkexists'              => "Dilec'hiet mat eo bet ar bajenn hec'h-unan met chomet eo ar bajenn gaozeal rak unan all a oa dija gant an anv nevez-se. Kendeuzit anezho c'hwi hoc'h-unan mar plij.",
+'movedto'                 => 'adanvet e',
+'movetalk'                => 'Adenvel ivez ar bajenn "gaozeal", mar bez ret.',
+'talkpagemoved'           => "Dilec'hiet eo bet ivez ar bajenn gaozeal stag.",
+'talkpagenotmoved'        => "<strong>N'eo ket bet</strong> dilec'hiet ar bajenn gaozeal stag.",
+'1movedto2'               => '$1 adkaset war-du $2',
+'1movedto2_redir'         => '$1 adkaset war-du $2 (adkas)',
+'movelogpage'             => 'Roll an adkasoù',
+'movelogpagetext'         => 'Setu roll ar pajennoù bet savet un adkas evito.',
+'movereason'              => 'Abeg an adkas',
+'revertmove'              => 'nullañ',
+'delete_and_move'         => 'Diverkañ ha sevel adkas',
+'delete_and_move_text'    => "==Ezhomm diverkañ== 
+
+Savet eo ar pennad tal \"[[\$1]]\" c'hoazh. Diverkañ anezhañ a fell deoc'h ober evit reiñ lec'h d'an adkas ?",
+'delete_and_move_confirm' => 'Ya, diverkañ ar bajenn',
+'delete_and_move_reason'  => "Diverket evit ober lec'h d'an adkas",
+'selfmove'                => "Heñvel eo titl ar poent loc'hañ ha hini ar pal; n'haller ket adkas ur bajenn war-du he lec'h orin.",
+'immobile_namespace'      => "Dibarek eo titl ar vammenn pe ar pal; n'haller ket adenvel pajennoù war-du an esaouenn anv-mañ.",
+
+# Export
+'export'          => 'Ezporzhiañ pajennoù',
+'exporttext'      => "Gallout a rit ezporzhiañ en XML an destenn ha pennad istor ur bajenn pe ur strollad pajennoù; a-benn neuze e c'hall an disoc'h bezañ enporzhiet en ur wiki all a ya en-dro gant ar meziant MediaWiki, treuzfurmet pe enrollet da vezañ implijet diouzh ma karot.",
+'exportcuronly'   => 'Ezporzhiañ hepken ar stumm red hep an istor anezhañ',
+'exportnohistory' => "---- 
+'''Notenn :''' Dilezet eo bet an ezporzhiañ istor klok ar pajennoù evit poent peogwir e veze gorrekaet ar reizhiad diwar se.",
+'export-submit'   => 'Ezporzhiañ',
+
+# Namespace 8 related
+'allmessages'               => 'Roll kemennoù ar reizhiad',
+'allmessagesname'           => 'Anv',
+'allmessagesdefault'        => 'Testenn dre ziouer',
+'allmessagescurrent'        => 'Testenn zo bremañ',
+'allmessagestext'           => "Setu roll an holl gemennadennoù a c'haller kaout e bed MediaWiki",
+'allmessagesnotsupportedUI' => "Ne zegemer ket Special:AllMessages yezh hoc'h etrefas (<b>$1</b>) war al lec'hienn-mañ.",
+'allmessagesnotsupportedDB' => "N'haller ket kaout Special:AllMessages rak diweredekaet eo bet wgUseDatabaseMessages.",
+'allmessagesfilter'         => 'Sil anv kemennadenn :',
+'allmessagesmodified'       => 'Diskouez ar re bet kemmet hepken',
+
+# Thumbnails
+'thumbnail-more'  => 'Brasaat',
+'missingimage'    => '<b>Skeudenn a vank</b><br /><i>$1</i>',
+'filemissing'     => 'Restr ezvezant',
+'thumbnail_error' => 'Fazi e-ser krouiñ an alberz : $1',
+
+# Special:Import
+'import'                     => 'Enporzhiañ pajennoù',
+'importinterwiki'            => 'enporzhiadenn etrewiki',
+'import-interwiki-text'      => 'Diuzit ur wiki hag ur bajenn da enporzhiañ.
+Miret e vo deiziadoù ar stummmoù hag anvioù an aozerien.
+Miret eo an holl enporzhiadennoù etrewiki e-barzh [[Special:Log/import|log an enporzhiadennoù]].',
+'import-interwiki-history'   => 'Eilañ holl stummoù istor ar bajenn-mañ',
+'import-interwiki-submit'    => 'Enporzhiañ',
+'import-interwiki-namespace' => 'Treuzkas ar pajennoù en esaouenn anv :',
+'importtext'                 => "Ezporzhiit ur restr adal ar wiki orin en ur implij an arc'hwel Special:Export, enrollit ar bajenn war ho pladenn ha degasit anezhi amañ.",
+'importstart'                => "Oc'h enporzhiañ pajennoù...",
+'import-revision-count'      => '$1 stumm',
+'importnopages'              => 'Pajenn ebet da enporzhiañ.',
+'importfailed'               => "C'hwitet eo an enporzhiadenn: $1",
+'importunknownsource'        => 'Dianav eo seurt ar vammenn enporzhiañ',
+'importcantopen'             => "N'eus ket bet gallet digeriñ ar restr enporzhiet",
+'importbadinterwiki'         => 'Liamm etrewiki fall',
+'importnotext'               => 'Goullo pe hep tamm testenn ebet',
+'importsuccess'              => 'Deuet eo an enporzhiadenn da benn vat!',
+'importhistoryconflict'      => "Divankadennoù zo er pennad istor ha tabut zo gant se (marteze eo bet enporzhiet ar bajenn araozoc'h)",
+'importnosources'            => "N'eus bet spisaet tamm mammenn etrewiki ebet ha diweredekaet eo enporzhiañ an Istor war-eeun.",
+'importnofile'               => "N'eus bet enporzhiet restr ebet.",
+'importuploaderror'          => "N'eus ket bet gallet enporzhiañ ar restr; marteze peogwir eo brasoc'h eget ar vent enporzhiañ aotreet.",
+
+# Import log
+'importlogpage'                    => 'Log an enporzhiadennoù',
+'importlogpagetext'                => "Enporzhiadennoù melestradurel eus pajennoù adal wikioù all gant istor ar c'hemmadennoù degaset enno.",
+'import-logentry-upload'           => 'en/he deus enporzhiet (pellgarget) [[$1]]',
+'import-logentry-upload-detail'    => '$1 stumm',
+'import-logentry-interwiki'        => 'treuzwikiet $1',
+'import-logentry-interwiki-detail' => '$1 kemm adal $2',
+
+# Tooltip help for the actions
+'tooltip-pt-userpage'             => 'Ma fajenn implijer',
+'tooltip-pt-anonuserpage'         => "Ar bajenn implijer evit ar c'homlec'h IP implijet ganeoc'h",
+'tooltip-pt-mytalk'               => 'Ma fajenn gaozeal',
+'tooltip-pt-anontalk'             => "Kaozeadennoù diwar-benn ar c'hemmoù graet adal ar chomlec'h-mañ",
+'tooltip-pt-preferences'          => 'Ma fenndibaboù',
+'tooltip-pt-watchlist'            => "Roll ar pajennoù evezhiet ganeoc'h.",
+'tooltip-pt-mycontris'            => 'Roll ma degasadennoù',
+'tooltip-pt-login'                => "Daoust ma n'eo ket ret, ec'h aliomp deoc'h d'en em lugañ.",
+'tooltip-pt-anonlogin'            => "Daoust ma n'eo ket ret, ec'h aliomp deoc'h d'en em lugañ.",
+'tooltip-pt-logout'               => 'Dilugañ',
+'tooltip-ca-talk'                 => 'Kaozeadennoù diwar-benn ar pennad',
+'tooltip-ca-edit'                 => 'Gallout a rit degas kemmoù er bajenn-mañ. Implijit ar stokell Rakwelet a-raok enrollañ, mar plij.',
+'tooltip-ca-addsection'           => 'Kemerit perzh er gaoz-mañ.',
+'tooltip-ca-viewsource'           => 'Gwarezet eo ar bajenn-mañ. Gallout a rit gwelet an danvez anezhañ memes tra.',
+'tooltip-ca-history'              => 'Stummoù kozh ar bajenn-mañ gant an aozerien anezhi.',
+'tooltip-ca-protect'              => 'Gwareziñ ar bajenn-mañ',
+'tooltip-ca-delete'               => 'Diverkañ ar bajenn-mañ',
+'tooltip-ca-undelete'             => 'Adsevel ar bajenn-mañ',
+'tooltip-ca-move'                 => 'Adenvel ar bajenn-mañ',
+'tooltip-ca-watch'                => "Ouzhpennañ ar bajenn-mañ d'ho roll evezhiañ",
+'tooltip-ca-unwatch'              => 'Paouez da evezhiañ ar bajenn-mañ',
+'tooltip-search'                  => 'Klaskit er wiki-mañ',
+'tooltip-p-logo'                  => 'Pajenn bennañ',
+'tooltip-n-mainpage'              => 'Diskouez ar Bajenn bennañ',
+'tooltip-n-portal'                => "Diwar-benn ar raktres, ar pezh a c'hallit ober, pelec'h kavout an traoù",
+'tooltip-n-currentevents'         => 'Tapout keleier diwar-benn an darvoudoù diwezhañ',
+'tooltip-n-recentchanges'         => "Roll ar c'hemmoù diwezhañ c'hoarvezet war ar wiki.",
+'tooltip-n-randompage'            => 'Diskwel ur bajenn dre zegouezh',
+'tooltip-n-help'                  => 'Skoazell.',
+'tooltip-n-sitesupport'           => 'Skoazellit ar raktres',
+'tooltip-t-whatlinkshere'         => 'Roll ar pajennoù liammet ouzh ar bajenn-mañ',
+'tooltip-t-recentchangeslinked'   => "Roll ar c'hemmoù diwezhañ war ar pajennoù liammet ouzh ar bajenn-mañ",
+'tooltip-feed-rss'                => 'Magañ ar red RSS evit ar bajenn-mañ',
+'tooltip-feed-atom'               => 'Magañ ar red Atom evit ar bajenn-mañ',
+'tooltip-t-contributions'         => 'Gwelet roll degasadennoù an implijer-mañ',
+'tooltip-t-emailuser'             => "Kas ur postel d'an implijer-mañ",
+'tooltip-t-upload'                => 'Enporzhiañ ur skeudenn pe ur restr media war ar servijer',
+'tooltip-t-specialpages'          => 'Roll an holl bajennoù dibar',
+'tooltip-ca-nstab-main'           => 'Gwelet ar pennad',
+'tooltip-ca-nstab-user'           => 'Gwelet ar bajenn implijer',
+'tooltip-ca-nstab-media'          => 'Gwelet pajenn ar media',
+'tooltip-ca-nstab-special'        => "Ur bajenn dibar eo homañ, n'oc'h ket evit degas kemmoù enni.",
+'tooltip-ca-nstab-project'        => 'Gwelet pajenn ar raktres',
+'tooltip-ca-nstab-image'          => 'Gwelet pajenn deskrivañ ar bajenn-mañ',
+'tooltip-ca-nstab-mediawiki'      => 'Gwelet kemenn ar reizhiad',
+'tooltip-ca-nstab-template'       => 'Gwelet ar patrom',
+'tooltip-ca-nstab-help'           => 'Gwelet ar bajenn soazell',
+'tooltip-ca-nstab-category'       => 'Gwelet pajenn ar rummad',
+'tooltip-minoredit'               => "Merkañ ar c'hemm-mañ evel dister",
+'tooltip-save'                    => 'Enrollañ ho kemmoù',
+'tooltip-preview'                 => "Rakwelet ar c'hemmoù; trugarez d'ober gantañ a-raok enrollañ!",
+'tooltip-diff'                    => "Diskouez ar c'hemmoù degaset ganeoc'h en destenn.",
+'tooltip-compareselectedversions' => "Sellet ouzh an diforc'hioù zo etre daou stumm diuzet ar bajenn-mañ.",
+'tooltip-watch'                   => 'Ouzhpennañ ar bajenn-mañ ouzh ho rollad evezhiañ',
+'tooltip-recreate'                => 'Adkrouiñ ar bajenn ha pa vije bet diverket a-raok',
+
+# Stylesheets
+'common.css'   => '/** Talvezout a raio ar CSS lakaet amañ evit an holl gwiskadurioù */',
+'monobook.css' => '/* Ar CSS lakaet amañ a dalvezo evit implijerien ar gwiskadur Monobook */',
+
+# Scripts
+'common.js'   => '* Forzh pe JavaScript amañ a vo karget evit an holl implijerien war kement pajenn lennet ganto. */',
+'monobook.js' => '/* Deprecated; use [[MediaWiki:common.js]] */
+/*Lagadennoù titouriñ ha stokelloù prim*/',
+
+# Metadata
+'nodublincore'      => "Diweredekaet eo ar metastlennoù 'Dublin Core RDF' war ar servijer-mañ.",
+'nocreativecommons' => "N'eo ket gweredekaet ar metastlennoù 'Creative Commons RDF' war ar servijer-mañ.",
+'notacceptable'     => "N'eo ket ar servijer wiki-mañ evit pourchas stlennoù en ur furmad lennus evit ho arval.",
+
+# Attribution
+'anonymous'        => 'Implijer(ez) dianv eus {{SITENAME}}',
+'siteuser'         => 'Implijer(ez) $1 eus {{SITENAME}}',
+'lastmodifiedatby' => "Kemmet eo bet ar bajenn-mañ da ziwezhañ d'an/ar $2, $1 gant $3", # $1 date, $2 time, $3 user
+'and'              => 'ha(g)',
+'othercontribs'    => 'Diazezet war labour $1.',
+'others'           => 're all',
+'siteusers'        => 'Implijer(ez) $1 eus {{SITENAME}}',
+'creditspage'      => 'Pajennoù kredoù',
+'nocredits'        => "N'eus tamm titour kred hegerz ebet evit ar bajenn-mañ.",
+
+# Spam protection
+'spamprotectiontitle'    => "Pajenn warezet ent emgefre abalamour d'ar Spam",
+'spamprotectiontext'     => "Pajenn warezet ent emgefre abalamour d'ar Spam",
+'spamprotectionmatch'    => 'Dihunet eo bet an detektour Spam: $1 gant an destenn-mañ',
+'subcategorycount'       => "$1 isrummad zo d'ar rummad-mañ.",
+'categoryarticlecount'   => '$1 pennad zo er rummad-mañ.',
+'category-media-count'   => "Bez'ez eus {{PLURAL:$1|ur restr|$1 restr}} er rummad-mañ.",
+'listingcontinuesabbrev' => "(war-lerc'h)",
+'spambot_username'       => 'Naetaat spam MediaWiki',
+'spam_reverting'         => "Distreiñ d'ar stumm diwezhañ hep liamm davet $1",
+'spam_blanking'          => 'Diverkañ an holl stummoù enno liammoù davet $1',
+
+# Info page
+'infosubtitle'   => 'Titouroù evit ar bajenn',
+'numedits'       => 'Niver a gemmoù (pennad): $1',
+'numtalkedits'   => 'Niver a gemmoù (pajenn gaozeal): $1',
+'numwatchers'    => 'Niver a dud o lenn : $1',
+'numauthors'     => 'Niver a aozerien zisheñvel (pennad): $1',
+'numtalkauthors' => 'Niver a aozerien zisheñvel (pajenn gaozeal): $1',
+
+# Math options
+'mw_math_png'    => 'Produiñ atav ur skeudenn PNG',
+'mw_math_simple' => "HTML m'eo eeun-kenañ, a-hend-all ober gant PNG",
+'mw_math_html'   => 'HTML mar bez tu, a-hend-all PNG',
+'mw_math_source' => "Leuskel ar c'hod TeX orin",
+'mw_math_modern' => 'Evit ar merdeerioù arnevez',
+'mw_math_mathml' => 'MathML',
+
+# Patrolling
+'markaspatrolleddiff'                 => 'Merkañ evel gwiriet',
+'markaspatrolledtext'                 => 'Merkañ ar pennad-mañ evel gwiriet',
+'markedaspatrolled'                   => 'Merkañ evel gwiriet',
+'markedaspatrolledtext'               => 'Merket eo bet ar stumm diuzet evel gwiriet.',
+'rcpatroldisabled'                    => "Diweredekaet ar gwiriañ ar C'hemmoù diwezhañ",
+'rcpatroldisabledtext'                => "Diweredekaet eo bet an arc'hwel evezhiañ ar c'hemmoù diwezhañ.",
+'markedaspatrollederror'              => "N'hall ket bezañ merket evel gwiriet",
+'markedaspatrollederrortext'          => "Ret eo deoc'h spisaat ur stumm a-benn e verkañ evel gwiriet.",
+'markedaspatrollederror-noautopatrol' => "N'oc'h ket aotreet da verkañ evel gwiriet ar c'hemmoù degaset ganeoc'h.",
+
+# Patrol log
+'patrol-log-page' => 'Log gwiriañ',
+'patrol-log-line' => 'en/he deus merket ar stumm $1 eus $2 evel gwiriet $3',
+'patrol-log-auto' => '(emgefre)',
+
+# Image deletion
+'deletedrevision' => 'Diverket stumm kozh $1.',
+
+# Browsing diffs
+'previousdiff' => "← Diforc'h kent",
+'nextdiff'     => "Diforc'h war-lerc'h →",
+
+'imagemaxsize' => 'Ment vrasañ ar skeudennoù er pajennoù deskrivañ skeudennoù :',
+'thumbsize'    => 'Ment an alberz :',
+'showbigimage' => 'Pellgargañ ur stumm uhel e bizhder ($1x$2, $3 Ko)',
+
+'newimages'    => 'Roll ar skeudennoù nevez',
+'showhidebots' => '($1 bot)',
+'noimages'     => 'Netra da welet.',
+
+# Labels for User: and Title: on Special:Log pages
+'specialloguserlabel'  => 'Implijer :',
+'speciallogtitlelabel' => 'Titl :',
+
+'passwordtooshort' => 'Re verr eo ho ker-tremen. $1 arouezenn a rank bezañ ennañ da nebeutañ .',
+
+# Media Warning
+'mediawarning' => "'''Diwallit''': Kodoù siek a c'hall bezañ er restr-mañ; ma'z erounezit anezhi e c'hallje tagañ ho reizhiad.<hr />",
+
+'fileinfo' => '$1Ko, seurt MIME: <tt>$2</tt>',
+
+# Metadata
+'metadata'          => 'Metastlennoù',
+'metadata-help'     => "Titouroù ouzhpen zo er restr-mañ; bet lakaet moarvat gant ar c'hamera niverel pe ar skanner implijet evit he niverelaat. Mard eo bet cheñchet ar skeudenn e-keñver he stad orin marteze ne vo ket kenkoulz munudoù zo.",
+'metadata-expand'   => 'Dispakañ ar munudoù',
+'metadata-collapse' => 'Krennañ ar munudoù',
+'metadata-fields'   => "Ensoc'het e vo ar maeziennoù metastlennoù EXIF rollet er gemennadenn-mañ e pajenn deskrivañ ar skeudenn pa vo punet taolenn ar metastlennoù. Kuzhet e vo ar re all dre ziouer.
+* make
+* model
+* datetimeoriginal
+* exposuretime
+* fnumber
+* focallength",
+
+# EXIF tags
+'exif-imagewidth'                  => 'Led',
+'exif-imagelength'                 => 'Hed',
+'exif-bitspersample'               => 'Niv. a vitoù dre barzhioù',
+'exif-compression'                 => 'Seurt gwaskadur',
+'exif-photometricinterpretation'   => 'Kenaozadur piksel',
+'exif-orientation'                 => 'Tuadur',
+'exif-samplesperpixel'             => 'Niver a standilhonoù',
+'exif-planarconfiguration'         => 'Kempenn ar stlennoù',
+'exif-ycbcrpositioning'            => "Lec'hiadur Y ha C",
+'exif-xresolution'                 => 'Pizhder led ar skeudenn',
+'exif-yresolution'                 => 'Pizhder hed ar skeudenn',
+'exif-resolutionunit'              => 'Unanennoù pizhder X ha Y',
+'exif-stripoffsets'                => "Lec'hiadur stlennoù ar skeudenn",
+'exif-rowsperstrip'                => 'Niver a linennoù dre vandenn',
+'exif-jpeginterchangeformat'       => "Lec'hiadur ar SOI JPEG",
+'exif-jpeginterchangeformatlength' => 'Ment ar stlennoù JPEG en eizhbitoù',
+'exif-transferfunction'            => "Arc'hwel treuzkas",
+'exif-ycbcrcoefficients'           => 'Kenefederioù moull treuzfurmiñ an egorenn liv',
+'exif-referenceblackwhite'         => 'Talvoudenn dave gwenn ha du',
+'exif-datetime'                    => 'Deiziad hag eur kemm restr',
+'exif-imagedescription'            => 'Titl ar skeudenn',
+'exif-make'                        => 'Oberier ar benveg',
+'exif-model'                       => 'Doare ar benveg',
+'exif-software'                    => 'Meziant bet implijet',
+'exif-artist'                      => 'Aozer',
+'exif-copyright'                   => "Perc'henn ar gwirioù aozer (copyright)",
+'exif-exifversion'                 => 'Stumm exif',
+'exif-flashpixversion'             => 'Skoret ganti stumm Flashpix',
+'exif-colorspace'                  => "Lec'h al livioù",
+'exif-componentsconfiguration'     => 'Talvoudegezh pep parzh',
+'exif-compressedbitsperpixel'      => 'Doare gwaskañ ar skeudenn',
+'exif-pixelydimension'             => 'Ledander skeudenn gwiriek',
+'exif-pixelxdimension'             => 'Uhelder skeudenn gwiriek',
+'exif-makernote'                   => 'Notennoù an oberier',
+'exif-usercomment'                 => 'Evezhiadennoù',
+'exif-relatedsoundfile'            => 'Restr son stag',
+'exif-datetimeoriginal'            => 'Deiziad hag eur ar sevel roadoù',
+'exif-datetimedigitized'           => 'Deiziad hag eur an niverelaat',
+'exif-exposuretime'                => "Amzer louc'hañ",
+'exif-exposuretime-format'         => '$1 eilenn ($2)',
+'exif-fnumber'                     => 'Hed etre sti',
+'exif-exposureprogram'             => "Programm louc'hañ",
+'exif-spectralsensitivity'         => 'Kizidigezh spektrel',
+'exif-isospeedratings'             => 'Kizidigezh ISO',
+'exif-oecf'                        => 'Faktor amdreiñ elektronek',
+'exif-shutterspeedvalue'           => 'Tizh klozañ',
+'exif-aperturevalue'               => 'Digorder',
+'exif-brightnessvalue'             => 'Sklêrder',
+'exif-exposurebiasvalue'           => "Reizhadenn louc'hañ",
+'exif-maxaperturevalue'            => 'Maezienn digeriñ vrasañ',
+'exif-subjectdistance'             => 'Hed ar sujed',
+'exif-meteringmode'                => 'Doare muzuliañ',
+'exif-lightsource'                 => "Mammenn c'houloù",
+'exif-flash'                       => "Luc'h",
+'exif-focallength'                 => 'Hirder ar fokalenn',
+'exif-subjectarea'                 => 'Gorread ar sujed',
+'exif-flashenergy'                 => "Nerzh al luc'h",
+'exif-focalplanexresolution'       => 'Muzuliadur a-led ur fokalenn blaen',
+'exif-focalplaneyresolution'       => 'Muzuliadur a-serzh ur fokalenn blaen',
+'exif-focalplaneresolutionunit'    => 'Unanenn spisder evit ur fokalenn blaen',
+'exif-subjectlocation'             => "Lec'hiadur ar sujed",
+'exif-exposureindex'               => "Meneger louc'hañ",
+'exif-sensingmethod'               => 'Hentenn detektiñ',
+'exif-filesource'                  => 'Tarzh ar restr',
+'exif-scenetype'                   => 'Seurt arvest',
+'exif-cfapattern'                  => 'Framm silañ al livioù',
+'exif-customrendered'              => 'Plediñ gant ar skeudennoù personelaet',
+'exif-exposuremode'                => "Mod louc'hañ",
+'exif-whitebalance'                => 'Mentel ar gwennoù',
+'exif-digitalzoomratio'            => 'Feur brasaat niverel (zoum)',
+'exif-focallengthin35mmfilm'       => 'Hirder ar fokalenn e filmoù 35 mm',
+'exif-gaincontrol'                 => 'Reizhañ ar sklêrder',
+'exif-contrast'                    => 'Dargemm',
+'exif-saturation'                  => 'Saturadur',
+'exif-sharpness'                   => 'Spisder',
+'exif-devicesettingdescription'    => 'Deskrivadur doare ar wikefre',
+'exif-subjectdistancerange'        => 'Hed ar sujed',
+'exif-imageuniqueid'               => 'Anavezer nemetañ ar skeudenn',
+'exif-gpsversionid'                => 'Stumm an neudennad GPS',
+'exif-gpslatituderef'              => 'Ledred Norzh pe su',
+'exif-gpslatitude'                 => 'Ledred',
+'exif-gpslongituderef'             => 'Hedred kornôg pe reter',
+'exif-gpslongitude'                => 'Hedred',
+'exif-gpsaltituderef'              => 'Daveenn uhelder',
+'exif-gpsaltitude'                 => 'Uhelder',
+'exif-gpstimestamp'                => 'Eur GPS (eurier atomek)',
+'exif-gpssatellites'               => 'Loarelloù implijet evit ar muzuliañ',
+'exif-gpsstatus'                   => 'Statud ar resever',
+'exif-gpsmeasuremode'              => 'Doare muzuliañ',
+'exif-gpsdop'                      => 'Resisder ar muzul',
+'exif-gpsspeedref'                 => 'Unanenn dizh',
+'exif-gpsspeed'                    => 'Tizh ar resever GPS',
+'exif-gpstrackref'                 => "Daveenn evit durc'hadur ar fiñv",
+'exif-gpstrack'                    => "Durc'hadur ar fiñv",
+'exif-gpsimgdirectionref'          => "Daveenn evit durc'hadur ar skeudenn",
+'exif-gpsimgdirection'             => "Durc'hadur ar skeudenn",
+'exif-gpsdestlatituderef'          => 'Daveenn evit ledred ar pal',
+'exif-gpsdestlatitude'             => 'Ledred ar pal',
+'exif-gpsdestlongituderef'         => 'Daveenn evit hedred ar pal',
+'exif-gpsdestlongitude'            => 'Hedred ar pal',
+'exif-gpsdestbearingref'           => 'Daveenn evit notenniñ ar pal',
+'exif-gpsdestbearing'              => 'Notenniñ ar pal',
+'exif-gpsdestdistanceref'          => 'Daveenn evit an hed betek ar pal',
+'exif-gpsdestdistance'             => 'Hed betek ar pal',
+'exif-gpsprocessingmethod'         => 'Anv hentenn blediñ ar GPS',
+'exif-gpsareainformation'          => 'Anv an takad GPS',
+'exif-gpsdatestamp'                => 'Deiziad GPS',
+'exif-gpsdifferential'             => "Reizhadenn diforc'hadus GPS",
+
+# EXIF attributes
+'exif-compression-1' => 'Hep gwaskañ',
+
+'exif-unknowndate' => 'Deiziad dianav',
+
+'exif-orientation-1' => 'Boutin', # 0th row: top; 0th column: left
+'exif-orientation-2' => 'Eilpennet a-hed', # 0th row: top; 0th column: right
+'exif-orientation-3' => 'Troet eus 180°', # 0th row: bottom; 0th column: right
+'exif-orientation-4' => 'Eilpennet a-serzh', # 0th row: bottom; 0th column: left
+'exif-orientation-5' => 'Troet eus 90° a-gleiz hag eilpennet a-serzh', # 0th row: left; 0th column: top
+'exif-orientation-6' => 'Troet eus 90° a-zehou', # 0th row: right; 0th column: top
+'exif-orientation-7' => 'Troet eus 90° a-zehou hag eilpennet a-serzh', # 0th row: right; 0th column: bottom
+'exif-orientation-8' => 'Troet eus 90° a-gleiz', # 0th row: left; 0th column: bottom
+
+'exif-componentsconfiguration-0' => "n'eus ket anezhi",
+
+'exif-exposureprogram-0' => 'Anspisaet',
+'exif-exposureprogram-1' => 'Dre zorn',
+'exif-exposureprogram-2' => 'Programm boutin',
+'exif-exposureprogram-3' => 'Rakgwir digeriñ',
+'exif-exposureprogram-4' => 'Rakkwir serriñ',
+'exif-exposureprogram-5' => 'Programm krouiñ (tuadur e-keñver donder ar maez)',
+'exif-exposureprogram-6' => 'Programm seveniñ (tuadur e-keñver an tizh serriñ)',
+'exif-exposureprogram-7' => 'Mod poltred (evit skeudennoù a-dost gant an diadreñv dispis)',
+'exif-exposureprogram-8' => 'Mod gweledva (evit skeudennoù gweledva gant an diadreñv spis)',
+
+'exif-subjectdistance-value' => '$1 metr',
+
+'exif-meteringmode-0'   => 'Dianav',
+'exif-meteringmode-1'   => 'Keitat',
+'exif-meteringmode-2'   => 'Muzul kreiz keitat',
+'exif-meteringmode-4'   => 'Liesspot',
+'exif-meteringmode-5'   => 'Patrom',
+'exif-meteringmode-6'   => 'Darnek',
+'exif-meteringmode-255' => 'All',
+
+'exif-lightsource-0'   => 'Dianav',
+'exif-lightsource-1'   => 'Gouloù deiz',
+'exif-lightsource-2'   => "Treluc'hus",
+'exif-lightsource-3'   => 'Tungsten (gouloù kann)',
+'exif-lightsource-4'   => "Luc'h",
+'exif-lightsource-9'   => 'Amzer digoumoul',
+'exif-lightsource-10'  => 'Amzer goumoulek',
+'exif-lightsource-11'  => 'Skeud',
+'exif-lightsource-12'  => "Gouloù deiz treluc'hus (D 5700 – 7100K)",
+'exif-lightsource-13'  => "Gouloù deiz treluc'hus gwenn (N 4600 – 5400K)",
+'exif-lightsource-14'  => "Gouloù treluc'hus gwenn yen (W 3900 – 4500K)",
+'exif-lightsource-15'  => "Gouloù treluc'hus gwenn (WW 3200 – 3700K)",
+'exif-lightsource-17'  => 'Gouloù standard A',
+'exif-lightsource-18'  => 'Gouloù standard B',
+'exif-lightsource-19'  => 'Gouloù standard C',
+'exif-lightsource-24'  => 'Goulaouiñ studio gant tungsten ISO',
+'exif-lightsource-255' => "Mammenn c'houloù all",
+
+'exif-focalplaneresolutionunit-2' => 'meudad',
+
+'exif-sensingmethod-1' => 'Hep resisaat',
+
+'exif-scenetype-1' => "Lun luc'hskeudennet war-eeun",
+
+'exif-customrendered-0' => 'Plediñ boutin',
+'exif-customrendered-1' => 'Plediñ personelaet',
+
+'exif-exposuremode-0' => "Emlouc'hañ",
+'exif-exposuremode-1' => "Louc'hañ dre zorn",
+'exif-exposuremode-2' => 'Emvraketiñ',
+
+'exif-whitebalance-0' => 'Mentel ar gwennoù emgefre',
+'exif-whitebalance-1' => 'Mentel ar gwennoù dre zorn',
+
+'exif-scenecapturetype-1' => 'Gweledva',
+'exif-scenecapturetype-2' => 'Poltred',
+'exif-scenecapturetype-3' => 'Arvest noz',
+
+'exif-gaincontrol-0' => 'Hini ebet',
+
+'exif-contrast-0' => 'Boutin',
+'exif-contrast-1' => 'Dister',
+'exif-contrast-2' => 'Kreñv',
+
+'exif-saturation-0' => 'Boutin',
+'exif-saturation-1' => 'Saturadur izel',
+'exif-saturation-2' => 'Saturadur uhel',
+
+'exif-sharpness-0' => 'Boutin',
+'exif-sharpness-1' => 'Dister',
+'exif-sharpness-2' => 'Kreñv',
+
+'exif-subjectdistancerange-0' => 'Dianav',
+'exif-subjectdistancerange-1' => 'Makro',
+'exif-subjectdistancerange-2' => 'Gwelet a-dost',
+'exif-subjectdistancerange-3' => 'Gwelet a-bell',
+
+# Pseudotags used for GPSLatitudeRef and GPSDestLatitudeRef
+'exif-gpslatitude-n' => 'Ledred norzh',
+'exif-gpslatitude-s' => 'Ledred su',
+
+# Pseudotags used for GPSLongitudeRef and GPSDestLongitudeRef
+'exif-gpslongitude-e' => 'Hedred reter',
+'exif-gpslongitude-w' => 'Hedred kornôg',
+
+'exif-gpsstatus-a' => 'O vuzuliañ',
+'exif-gpsstatus-v' => 'etreoberatadusted ar muzul',
+
+'exif-gpsmeasuremode-2' => 'Muzuliañ divventek',
+'exif-gpsmeasuremode-3' => 'Muzuliañ teirventek',
+
+# Pseudotags used for GPSSpeedRef and GPSDestDistanceRef
+'exif-gpsspeed-k' => 'Kilometr dre eur',
+'exif-gpsspeed-m' => 'Miltir dre eur',
+'exif-gpsspeed-n' => 'Skoulm',
+
+# Pseudotags used for GPSTrackRef, GPSImgDirectionRef and GPSDestBearingRef
+'exif-gpsdirection-t' => "Durc'hadur gwir",
+'exif-gpsdirection-m' => 'Norzh magnetek',
+
+# External editor support
+'edit-externally'      => 'Kemmañ ar restr-mañ dre un arload diavaez',
+'edit-externally-help' => "Gwelet skoazell an [http://meta.wikimedia.org/wiki/Help:External_editors arloadoù diavaez] a-benn gouzout hiroc'h.",
+
+# 'all' in various places, this might be different for inflected languages
+'recentchangesall' => 'an holl',
+'imagelistall'     => 'an holl',
+'watchlistall1'    => 'pep tra',
+'watchlistall2'    => 'pep tra',
+'namespacesall'    => 'pep tra',
+
+# E-mail address confirmation
+'confirmemail'            => "Kadarnaat ar chomlec'h postel",
+'confirmemail_noemail'    => "N'hoc'h eus ket spisaet chomlec'h postel mat ebet en ho [[Special:Preferences|penndibaboù implijer]].",
+'confirmemail_text'       => "Rankout a ra ar wiki-mañ bezañ gwiriet ho chomlec'h postel a-raok gallout implijout nep arc'hwel postel. Implijit ar bouton a-is evit kas ur postel kadarnaat d'ho chomlec'h. Ul liamm ennañ ur c'hod a vo er postel. Kargit al liamm-se en o merdeer evit kadarnaat ho chomlec'h.",
+'confirmemail_pending'    => "<div class=\"error\"> 
+Ur c'hod kadarnaat zo bet kaset deoc'h dre bostel c'hoazh; a-raok klask goulenn unan nevez, m'emaoc'h o paouez krouiñ ho kont, e vo fur eus ho perzh gortoz un nebeud munutoù ha leuskel amzer dezhañ d'en em gavout betek ennoc'h. 
+</div>",
+'confirmemail_send'       => "Kas ur c'hod kadarnaat",
+'confirmemail_sent'       => 'Postel kadarnaat kaset',
+'confirmemail_oncreate'   => "Kaset ez eus bet ur c'hod kadarnaat d'ho chomlec'h postel. 
+N'eus ket ezhomm eus ar c'hod-mañ evit en em lugañ met ret e vo deoc'h ober gantañ 
+evit aotren hini pe hini eus arc'hwelioù postel ar wiki.",
+'confirmemail_sendfailed' => "Dibosupl kas ar postel kadarnaat. Gwiriit ho chomlec'h.",
+'confirmemail_invalid'    => "Kod kadarnaat kamm. Marteze eo aet ar c'hod d'e dermen",
+'confirmemail_needlogin'  => "Ret eo deoc'h $1 evit kadarnaat ho chomlec'h postel.",
+'confirmemail_success'    => "Kadarnaet eo ho chomlec'h postel. A-benn bremañ e c'hallit en em lugañ hag ober ho mad eus ar wiki.",
+'confirmemail_loggedin'   => "Kadarnaet eo ho chomlec'h bremañ",
+'confirmemail_error'      => 'Ur gudenn zo bet e-ser enrollañ ho kadarnadenn',
+'confirmemail_subject'    => "Kadarnadenn chomlec'h postel evit {{SITENAME}}",
+'confirmemail_body'       => "Unan bennak, c'hwi moarvat gant ar chomlec'h IP \$1, en deus enrollet ur gont \"\$2\"  gant ar chomlec'h postel-mañ war lec'hienn {{SITENAME}}.
+
+A-benn kadarnaat eo deoc'h ar gont-se ha gweredekaat an arc'hwelioù postelerezh war {{SITENAME}}, digorit, mar plij, al liamm a-is en ho merdeer :
+
+\$3
+
+Ma n'eo ket bet graet ganeoc'h na zigorit ket al liamm. Mont a raio ar c'hod-mañ d'e dermen da \$4.",
+
+# Inputbox extension, may be useful in other contexts as well
+'tryexact'       => 'Klask ma klotfe rik',
+'searchfulltext' => 'Klask an destenn a-bezh',
+'createarticle'  => 'Krouiñ pennad',
+
+# Scary transclusion
+'scarytranscludedisabled' => '[Diweredekaet eo an treuzkludañ etrewiki]',
+'scarytranscludefailed'   => "[C'hwitet eo bet adtapout ar patrom evit $1; hon digarezit]",
+'scarytranscludetoolong'  => '[URL re hir; hon digarez]',
+
+# Trackbacks
+'trackbackbox'      => '<div id="mw_trackbacks">
+Liamm war-gil betek al liamm-mañ :<br />
+$1
+</div>',
+'trackbackremove'   => ' ([Diverkañ $1])',
+'trackbacklink'     => 'Liamm war-gil',
+'trackbackdeleteok' => 'Diverket mat eo bet al liamm war-gil.',
+
+# Delete conflict
+'deletedwhileediting' => "Diwallit : Diverket eo bet ar bajenn-mañ bremañ ha krog e oac'h da zegas kemmoù enni!",
+'confirmrecreate'     => "Diverket eo bet ar pennad-mañ gant [[User:$1|$1]] ([[User talk:$1|kaozeal]]) goude ma vije bet kroget ganeoc'h kemmañ anezhañ : 
+: ''$2'' 
+Kadarnait mar plij e fell deoc'h krouiñ ar pennad-mañ da vat.",
+'recreate'            => 'Adkrouiñ',
+
+# HTML dump
+'redirectingto' => "Oc'h adkas da [[$1]]...",
+
+# action=purge
+'confirm_purge'        => 'Spurjañ krubuilh ar bajenn-mañ? 
+
+$1',
+'confirm_purge_button' => 'Mat eo',
+
+'youhavenewmessagesmulti' => "Kemennoù nevez zo ganeoc'h war $1",
+
+'searchcontaining' => "Klask ar pennadoù enno ''$1''.",
+'searchnamed'      => "Klask ar pennadoù anvet ''$1''.",
+'articletitles'    => "Pennadoù a grog gant ''$1''",
+'hideresults'      => "Kuzhat an disoc'hoù",
+
+# DISPLAYTITLE
+'displaytitle' => '(Liammañ war-du ar bajenn-mañ evel [[$1]])',
+
+'loginlanguagelabel' => 'Yezh : $1',
+
+# Multipage image navigation
+'imgmultipageprev'   => '&larr; pajenn gent',
+'imgmultipagenext'   => "pajenn war-lerc'h &rarr;",
+'imgmultigo'         => 'Mont !',
+'imgmultigotopre'    => "Mont d'ar bajenn",
+'imgmultiparseerror' => "Evit doare eo brein pe faziek restr ar skeudenn-mañ; gant se n'hall ket {{SITENAME}} adtapout ur roll pajennoù.",
+
+# Table pager
+'ascending_abbrev'         => 'pignat',
+'descending_abbrev'        => 'diskenn',
+'table_pager_next'         => "Pajenn war-lerc'h",
+'table_pager_prev'         => 'Pajenn gent',
+'table_pager_first'        => 'Pajenn gentañ',
+'table_pager_last'         => 'Pajenn ziwezhañ',
+'table_pager_limit'        => 'Diskouez $1 elfenn dre bajenn',
+'table_pager_limit_submit' => 'Mont',
+'table_pager_empty'        => "Disoc'h ebet",
+
+# Auto-summaries
+'autosumm-blank'   => 'O tiverkañ kement danvez zo war ar bajenn',
+'autosumm-replace' => "Oc'h erlec'hiañ ar bajenn gant '$1'",
+'autoredircomment' => 'Adkas war-du [[$1]]', # This should be changed to the new naming convention, but existed beforehand
+'autosumm-new'     => 'Pajenn nevez: $1',
+
+# Live preview
+'livepreview-loading' => 'O kargañ...',
+'livepreview-ready'   => 'O kargañ... Prest !',
+'livepreview-failed'  => "C'hwitet eo rakwelet diouzhtu !
+Klaskit rakwelet er mod boutin.",
+'livepreview-error'   => 'C\'hwitet kevreañ : $1 "$2"
+Klaskit rakwelet er mod boutin.',
+
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesBs.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesBs.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesBs.php	(revision 1280)
@@ -0,0 +1,1141 @@
+<?php
+
+$namespaceNames = array(
+	NS_MEDIA            => 'Medija',
+	NS_SPECIAL          => 'Posebno',
+	NS_MAIN             => '',
+	NS_TALK             => 'Razgovor',
+	NS_USER             => 'Korisnik',
+	NS_USER_TALK        => 'Razgovor_sa_korisnikom',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK     => 'Razgovor_{{grammar:instrumental|$1}}',
+	NS_IMAGE            => 'Slika',
+	NS_IMAGE_TALK       => 'Razgovor_o_slici',
+	NS_MEDIAWIKI        => 'MedijaViki',
+	NS_MEDIAWIKI_TALK   => 'Razgovor_o_MedijaVikiju',
+	NS_TEMPLATE         => 'Šablon',
+	NS_TEMPLATE_TALK    => 'Razgovor_o_šablonu',
+	NS_HELP             => 'Pomoć',
+	NS_HELP_TALK        => 'Razgovor_o_pomoći',
+	NS_CATEGORY         => 'Kategorija',
+	NS_CATEGORY_TALK    => 'Razgovor_o_kategoriji',
+);
+
+$skinNames = array(
+	'Obična', 'Nostalgija', 'Kelnsko plavo', 'Pedington', 'Monparnas'
+);
+
+$magicWords = array(
+	# ID                              CASE SYNONYMS
+	'redirect'               => array( 0, '#Preusmjeri', '#redirect', '#preusmjeri', '#PREUSMJERI' ),
+	'notoc'                  => array( 0, '__NOTOC__', '__BEZSADRŽAJA__' ),
+	'forcetoc'               => array( 0, '__FORCETOC__', '__FORSIRANISADRŽAJ__' ),
+	'toc'                    => array( 0, '__TOC__', '__SADRŽAJ__' ),
+	'noeditsection'          => array( 0, '__NOEDITSECTION__', '__BEZ_IZMENA__', '__BEZIZMENA__' ),
+	'start'                  => array( 0, '__START__', '__POČETAK__' ),
+	'currentmonth'           => array( 1, 'CURRENTMONTH', 'TRENUTNIMJESEC' ),
+	'currentmonthname'       => array( 1, 'CURRENTMONTHNAME', 'TRENUTNIMJESECIME' ),
+	'currentmonthnamegen'    => array( 1, 'CURRENTMONTHNAMEGEN', 'TRENUTNIMJESECROD' ),
+	'currentmonthabbrev'     => array( 1, 'CURRENTMONTHABBREV', 'TRENUTNIMJESECSKR' ),
+	'currentday'             => array( 1, 'CURRENTDAY', 'TRENUTNIDAN' ),
+	'currentdayname'         => array( 1, 'CURRENTDAYNAME', 'TRENUTNIDANIME' ),
+	'currentyear'            => array( 1, 'CURRENTYEAR', 'TRENUTNAGODINA' ),
+	'currenttime'            => array( 1, 'CURRENTTIME', 'TRENUTNOVRIJEME' ),
+	'numberofarticles'       => array( 1, 'NUMBEROFARTICLES', 'BROJČLANAKA' ),
+	'numberoffiles'          => array( 1, 'NUMBEROFFILES', 'BROJDATOTEKA', 'BROJFAJLOVA' ),
+	'pagename'               => array( 1, 'PAGENAME', 'STRANICA' ),
+	'pagenamee'              => array( 1, 'PAGENAMEE', 'STRANICE' ),
+	'namespace'              => array( 1, 'NAMESPACE', 'IMENSKIPROSTOR' ),
+	'namespacee'             => array( 1, 'NAMESPACEE', 'IMENSKIPROSTORI' ),
+	'fullpagename'           => array( 1, 'FULLPAGENAME', 'PUNOIMESTRANE' ),
+	'fullpagenamee'          => array( 1, 'FULLPAGENAMEE', 'PUNOIMESTRANEE' ),
+	'msg'                    => array( 0, 'MSG:', 'POR:' ),
+	'subst'                  => array( 0, 'SUBST:', 'ZAMJENI:' ),
+	'msgnw'                  => array( 0, 'MSGNW:', 'NVPOR:' ),
+	'img_thumbnail'          => array( 1, 'thumbnail', 'thumb', 'mini' ),
+	'img_manualthumb'        => array( 1, 'thumbnail=$1', 'thumb=$1', 'mini=$1' ),
+	'img_right'              => array( 1, 'right', 'desno', 'd' ),
+	'img_left'               => array( 1, 'left', 'lijevo', 'l' ),
+	'img_none'               => array( 1, 'none', 'n', 'bez' ),
+	'img_width'              => array( 1, '$1px', '$1piksel' , '$1p' ),
+	'img_center'             => array( 1, 'center', 'centre', 'centar', 'c' ),
+	'img_framed'             => array( 1, 'framed', 'enframed', 'frame', 'okvir', 'ram' ),
+	'int'                    => array( 0, 'INT:', 'INT:' ),
+	'sitename'               => array( 1, 'SITENAME', 'IMESAJTA' ),
+	'ns'                     => array( 0, 'NS:', 'IP:' ),
+	'localurl'               => array( 0, 'LOCALURL:', 'LOKALNAADRESA:' ),
+	'localurle'              => array( 0, 'LOCALURLE:', 'LOKALNEADRESE:' ),
+	'server'                 => array( 0, 'SERVER', 'SERVER' ),
+	'servername'             => array( 0, 'SERVERNAME', 'IMESERVERA' ),
+	'scriptpath'             => array( 0, 'SCRIPTPATH', 'SKRIPTA' ),
+	'grammar'                => array( 0, 'GRAMMAR:', 'GRAMATIKA:' ),
+	'notitleconvert'         => array( 0, '__NOTITLECONVERT__', '__NOTC__', '__BEZTC__' ),
+	'nocontentconvert'       => array( 0, '__NOCONTENTCONVERT__', '__NOCC__', '__BEZCC__' ),
+	'currentweek'            => array( 1, 'CURRENTWEEK', 'TRENUTNASEDMICA' ),
+	'currentdow'             => array( 1, 'CURRENTDOW', 'TRENUTNIDOV' ),
+	'revisionid'             => array( 1, 'REVISIONID', 'IDREVIZIJE' ),
+	'plural'                 => array( 0, 'PLURAL:', 'MNOŽINA:' ),
+	'fullurl'                => array( 0, 'FULLURL:', 'PUNURL:' ),
+	'fullurle'               => array( 0, 'FULLURLE:', 'PUNURLE:' ),
+	'lcfirst'                => array( 0, 'LCFIRST:', 'LCPRVI:' ),
+	'ucfirst'                => array( 0, 'UCFIRST:', 'UCPRVI:' ),
+	'lc'                     => array( 0, 'LC:', 'LC:' ),
+	'uc'                     => array( 0, 'UC:', 'UC:' ),
+);
+
+$fallback8bitEncoding = "iso-8859-2";
+$separatorTransformTable = array(',' => '.', '.' => ',' );
+$linkTrail = '/^([a-zćčžšđž]+)(.*)$/sDu';
+
+$messages = array(
+'1movedto2' => 'stranica [[$1]] premještena u stranicu [[$2]]',
+'1movedto2_redir' => 'stranica [[$1]] premještena u stranicu [[$2]] putem preusmjerenja',
+'monobook.css' => '/*
+*/',
+'monobook.js' => '/* Deprecated; use [[MediaWiki:common.js]] */',
+/* tooltips and access keys */
+
+'accesskey-pt-userpage' => '.',
+'tooltip-pt-userpage' => 'Moja korisnička stranica',
+'accesskey-pt-anonuserpage' => '.',
+'tooltip-pt-anonuserpage' => 'Korisnička stranica za ip koju Vi uređujete kao',
+'accesskey-pt-mytalk' => 'n',
+'tooltip-pt-mytalk' => 'Moja stranica za razgovor',
+'accesskey-pt-anontalk' => 'n',
+'tooltip-pt-anontalk' => 'Razgovor o doprinosu sa ove IP adrese',
+'accesskey-pt-preferences' => '',
+'tooltip-pt-preferences' => 'Moja podešavanja',
+'accesskey-pt-watchlist' => 'l',
+'tooltip-pt-watchlist' => 'Spisak članaka koje pratite.',
+'accesskey-pt-mycontris' => 'y',
+'tooltip-pt-mycontris' => 'Spisak mog doprinosa',
+'accesskey-pt-login' => 'o',
+'tooltip-pt-login' => 'Prijava nije obavezna, ali donosi mnogo koristi.',
+'accesskey-pt-anonlogin' => 'o',
+'tooltip-pt-anonlogin' => 'Prijava nije obavezna, ali donosi mnogo koristi.',
+'accesskey-pt-logout' => '',
+'tooltip-pt-logout' => 'Odjava sa projekta {{SITENAME}}',
+'accesskey-ca-talk' => 't',
+'tooltip-ca-talk' => 'Razgovor o sadržaju',
+'accesskey-ca-edit' => 'e',
+'tooltip-ca-edit' => 'Možete da uređujete ovaj članak. Molimo Vas, koristite dugme "Prikaži izgled',
+'accesskey-ca-addsection' => '+',
+'tooltip-ca-addsection' => 'Dodajte svoj komentar.',
+'accesskey-ca-viewsource' => 'e',
+'tooltip-ca-viewsource' => 'Ovaj članak je zaključan. Možete ga samo vidjeti ili kopirati kod.',
+'accesskey-ca-history' => 'h',
+'tooltip-ca-history' => 'Prethodne verzije ove stranice.',
+'accesskey-ca-protect' => '=',
+'tooltip-ca-protect' => 'Zaštitite stranicu od budućih izmjena',
+'accesskey-ca-delete' => 'd',
+'tooltip-ca-delete' => 'Izbrišite ovu stranicu',
+'accesskey-ca-undelete' => 'd',
+'tooltip-ca-undelete' => 'Vratite izmjene koje su načinjene prije brisanja stranice',
+'accesskey-ca-move' => 'm',
+'tooltip-ca-move' => 'Pomjerite stranicu',
+'accesskey-ca-nomove' => '',
+'tooltip-ca-nomove' => 'Nemate dozvolu za pomjeranje ove stranice',
+'accesskey-ca-watch' => 'w',
+'tooltip-ca-watch' => 'Dodajte stranicu u listu praćnih članaka',
+'accesskey-ca-unwatch' => 'w',
+'tooltip-ca-unwatch' => 'Izbrišite stranicu sa liste praćnih članaka',
+'accesskey-search' => 'f',
+'tooltip-search' => 'Pretražite projekat {{SITENAME}}',
+'accesskey-p-logo' => '',
+'tooltip-p-logo' => 'Glavna stranica',
+'accesskey-n-mainpage' => 'z',
+'tooltip-n-mainpage' => 'Posjetite glavnu stranicu',
+'accesskey-n-portal' => '',
+'tooltip-n-portal' => 'O projektu, kako Vi možete pomoći, i gdje da nađete potrebne stvari o projektu {{SITENAME}}',
+'accesskey-n-currentevents' => '',
+'tooltip-n-currentevents' => 'Podaci o onome na čemu se trenutno radi',
+'accesskey-n-recentchanges' => 'r',
+'tooltip-n-recentchanges' => 'Spisak nedavnih izmjena na projektu {{SITENAME}}.',
+'accesskey-n-randompage' => 'x',
+'tooltip-n-randompage' => 'Otvorite slučajan članak',
+'accesskey-n-help' => '',
+'tooltip-n-help' => 'Naučite da uređujete projekat {{SITENAME}}.',
+'accesskey-n-sitesupport' => '',
+'tooltip-n-sitesupport' => 'Podržite nas',
+'accesskey-t-whatlinkshere' => 'j',
+'tooltip-t-whatlinkshere' => 'Spisak svih članaka koji su povezani sa ovim',
+'accesskey-t-recentchangeslinked' => 'k',
+'tooltip-t-recentchangeslinked' => 'Nedavne izmjene na stranicama koje su povezane sa ovom',
+'accesskey-feed-rss' => '',
+'tooltip-feed-rss' => 'RSS za ovu stranicu',
+'accesskey-feed-atom' => '',
+'tooltip-feed-atom' => 'Atom za ovu stranicu',
+'accesskey-t-contributions' => '',
+'tooltip-t-contributions' => 'Pogledajte spisak doprinosa ovog korisnika',
+'accesskey-t-emailuser' => '',
+'tooltip-t-emailuser' => 'Pošaljite pismo ovom korisniku',
+'accesskey-t-upload' => 'u',
+'tooltip-t-upload' => 'Pošaljite slike i medija fajlove',
+'accesskey-t-specialpages' => 'q',
+'tooltip-t-specialpages' => 'Spisak svih posebih stranica',
+'accesskey-ca-nstab-main' => 'c',
+'tooltip-ca-nstab-main' => 'Pogledajte sadržaj članka',
+'accesskey-ca-nstab-user' => 'c',
+'tooltip-ca-nstab-user' => 'Pogledajte korisničku stranicu',
+'accesskey-ca-nstab-media' => 'c',
+'tooltip-ca-nstab-media' => 'Pogledajte medija fajl',
+'accesskey-ca-nstab-special' => '',
+'tooltip-ca-nstab-special' => 'Ovo je specijalna stranica i zato je ne možete uređivati',
+'accesskey-ca-nstab-project' => 'a',
+'tooltip-ca-nstab-project' => 'Pogledajte projekat stranicu',
+'accesskey-ca-nstab-image' => 'c',
+'tooltip-ca-nstab-image' => 'Pogledajte stranicu slike',
+'accesskey-ca-nstab-mediawiki' => 'c',
+'tooltip-ca-nstab-mediawiki' => 'Pogledajte sistemsku poruku',
+'accesskey-ca-nstab-template' => 'c',
+'tooltip-ca-nstab-template' => 'Pogledajte šablon',
+'accesskey-ca-nstab-help' => 'c',
+'tooltip-ca-nstab-help' => 'Pogledajte stranicu za pomoć',
+'accesskey-ca-nstab-category' => 'c',
+'tooltip-ca-nstab-category' => 'Pogledajte stranicu kategorije',
+'about' => 'O...',
+'aboutpage' => '{{ns:4}}:O',
+'aboutsite' => 'O projektu {{SITENAME}}',
+'accmailtext' => 'Lozinka za nalog \'$1\' je poslata na adresu $2.',
+'accmailtitle' => 'Lozinka poslata.',
+'actioncomplete' => 'Akcija završena',
+'addedwatch' => 'Dodato u spisak praćenih članaka',
+'addedwatchtext' => 'Stranica "[[:$1]]" je dodata vašem [[{{ns:-1}}:Watchlist|spisku praćenih članaka]]. Buduće promjene ove stranice i njoj pridružene stranice za razgovor će biti navedene ovde, i stranica će biti <b>podebljana</b> u [[{{ns:-1}}:Recentchanges|spisku]] nedavnih izmjena da bi se lakše uočila.
+
+Ako kasnije želite da uklonite stranicu sa vašeg spiska praćenih članaka, kliknite na "prekini praćenje" na paleti.',
+'allmessages' => 'Sistemske poruke',
+'allmessagesnotsupportedDB' => '[[{{ns:-1}}:Allmessages|sistemske poruke]] nisu podržane zato što je <i>wgUseDatabaseMessages</i> isključen.',
+'allmessagesnotsupportedUI' => 'Vaš trenutni jezik interfejsa <b>$1</b> nije podržan u [[{{ns:-1}}:Allmessages|sistemskim porukama]] na ovoj viki.',
+'allmessagestext' => 'Ovo je spisak svih sistemskih poruka u {{ns:8}} imenskom prostoru.',
+'allpages' => 'Sve stranice',
+'alphaindexline' => '$1 u $2',
+'alreadyloggedin' => '<strong>Korisniče $1, već ste prijavljeni!</strong><br />',
+'alreadyrolled' => 'Ne može se vratiti poslednja izmjena [[:$1]] od korisnika [[{{ns:2}}:$2|$2]] ([[{{ns:3}}:$2|razgovor]]); neko drugi je već izmjenio ili vratio članak.  Poslednja izmjena od korisnika [[{{ns:2}}:$3|$3]] ([[{{ns:3}}:$3|razgovor]]).',
+'ancientpages' => 'Najstarije stranice',
+'and' => 'i',
+'anoneditwarning' => 'Niste prijavljeni. Vaša IP adresa će biti zapisana.',
+'anontalk' => 'Razgovor za ovu IP adresu',
+'anontalkpagetext' => '----\'\'Ovo je stranica za razgovor za anonimnog korisnika koji još nije napravio nalog ili ga ne koristi.  Zbog toga moramo da koristimo brojčanu IP adresu kako bismo odentifikovali njega ili nju.  Takvu adresu može dijeliti više korisnika.  Ako ste anonimni korisnik i mislite da su vam upućene nebitne primjedbe, molimo Vas da [[{{ns:-1}}:Userlogin|napravite nalog ili se prijavite]] da biste izbjegli buduću zabunu sa ostalim anonimnim korisnicima.\'\'',
+'anonymous' => 'Anonimni korisnik od {{SITENAME}}',
+'apr' => 'apr',
+'april' => 'april',
+'article' => 'Članak',
+'articleexists' => 'Stranica pod tim imenom već postoji, ili je ime koje ste izabrali neispravno.  Molimo Vas da izaberete drugo ime.',
+'articlepage' => 'Pogledaj članak',
+'aug' => 'avg',
+'august' => 'avgust',
+'autoblocker' => 'Automatski ste blokirani jer dijelite IP adresu sa "$1".  Razlog za blokiranje je: "\'\'\'$2\'\'\'"',
+'badarticleerror' => 'Ova akcija ne može biti izvršena na ovoj stranici.',
+'badfilename' => 'Ime slike je promjenjeno u "$1".',
+'badfiletype' => '".$1" nije preporučeni format slike.',
+'badipaddress' => 'Pogrešna IP adresa',
+'badquery' => 'Loše oblikovan upit za pretragu',
+'badquerytext' => 'Nismo mogli da obradimo vaš upit.  Ovo je vjerovatno zbog toga što ste pokušali da tražite riječ kraću od tri slova, što trenutno nije podržano.  Takođe je moguće da ste pogrešno ukucali izraz, na primjer "riba ii krljušti".  Molimo vas da pokušate nekim drugim upitom.',
+'badretype' => 'Lozinke koje ste unijeli se ne poklapaju.',
+'badtitle' => 'Loš naslov',
+'badtitletext' => 'Zahtjevani naslov stranice je bio neispravan, prazan ili neispravno povezan međujezički ili interviki naslov.',
+'blanknamespace' => '(Glavno)',
+'blockedtext' => 'Vaše korisničko ime ili IP adresa je blokirana od strane $1.
+Dati razlog je sledeći:<br />\'\'$2\'\'<p>Možete kontaktirati $1 ili nekog drugog [[{{MediaWiki:grouppage-sysop}}|administratora]] da biste razgovarili o blokadi.',
+'blockedtitle' => 'Korisnik je blokiran',
+'blockip' => 'Blokiraj korisnika',
+'blockipsuccesssub' => 'Blokiranje je uspjelo',
+'blockipsuccesstext' => '[[{{ns:-1}}:Contributions/$1|$1]] je blokiran.
+<br />Pogledajte [[{{ns:-1}}:Ipblocklist|IP spisak blokiranih korisnika]] za pregled blokiranja.',
+# problem with link: [[{{ns:4}}:Smjernice|smjernicama]]
+'blockiptext' => 'Upotrebite donji upitnik da biste uklonili prava pisanja sa određene IP adrese ili korisničkog imena.  Ovo bi trebalo da bude urađeno samo da bi se spriječio vandalizam, i u skladu sa [[{{ns:4}}:Smjernice|smjernicama]]. Unesite konkretan razlog ispod (na primjer, navodeći koje stranice su vandalizovane).',
+'blocklink' => 'blokirajte',
+'blocklistline' => '$1, $2 blokirao korisnika $3 ($4)',
+'blocklogentry' => 'je blokirao "$1" sa vremenom isticanja blokade od $2',
+'blocklogtext' => 'Ovo je istorija blokiranja i deblokiranja korisnika.  Automatsko blokirane IP adrese nisu uspisane ovde.  Pogledajte [[{{ns:-1}}:Ipblocklist|blokirane IP adrese]] za spisak trenutnih zabrana i blokiranja.',
+'bold_sample' => 'Podebljan tekst',
+'bold_tip' => 'Podebljan tekst',
+'booksources' => 'Štampani izvori',
+'booksourcetext' => 'Ispod je spisak veza na druge sajtove koji
+prodaju nove i korišćene knjige, i takođe mogu imati daljnje informacije
+o knjigama koje tražite.
+{{SITENAME}} ne sarađuje ni se jednim od ovih preduzeća, i
+ovaj spisak ne treba da se shvati kao potvrda njihovog kvaliteta.',
+'brokenredirects' => 'Pokvarena preusmjerenja',
+'brokenredirectstext' => 'Sledeća preusmjerenja su povezana na nepostojeći članak:',
+'bugreports' => 'Prijavite grešku',
+'bugreportspage' => '{{ns:4}}:Prijave_grešaka',
+'bydate' => 'po datumu',
+'byname' => 'po imenu',
+'bysize' => 'po veličini',
+'cachederror' => 'Ovo je keširana kopija zahtjevane stranice, i možda nije najnovija.',
+'cancel' => 'Poništite',
+'cannotdelete' => 'Ne može se obrisati navedena stranica ili slika.  (Moguće je da ju je neko drugi već obrisao.)',
+'cantrollback' => 'Ne može se vratiti izmjena; poslednji autor je ujedno i jedini.',
+'categories' => 'Kategorije',
+'categoriespagetext' => 'Sledeće kategorije već postoje u {{SITENAME}}',
+'category_header' => 'Članaka u kategoriji "$1"',
+'changepassword' => 'Promjeni lozinku',
+'changes' => 'izmjene',
+'columns' => 'Kolona',
+'compareselectedversions' => 'Uporedite označene verzije',
+'confirm' => 'Potvrdite',
+'confirmdelete' => 'Potvrdi brisanje',
+# problem with link [[{{ns:4}}:Pravila|pravilima]]
+'confirmdeletetext' => 'Na putu ste da trajno obrišete stranicu
+ili sliku zajedno sa svom njenom istorijom iz baze.
+Molimo Vas da potvrdite da namjeravate da uradite ovo, da razumijete
+poslijedice, i da ovo radite u skladu sa
+[[{{ns:4}}:Pravila|pravilima]] {{SITENAME}}.',
+'confirmemail' => 'Potvrdite adresu e-pošte',
+'confirmemail_body' => 'Neko, vjerovatno Vi, je sa IP adrese $1 registrovao nalog "$2" sa ovom adresom e-pošte na {{SITENAME}}.
+
+Da potvrdite da ovaj nalog stvarno pripada vama i da aktivirate mogućnost e-pošte na {{SITENAME}}, otvorite ovu poveznicu u vašem brauzeru:
+
+$3
+
+Ako ovo niste vi, ne pratite poveznicu. Ovaj kod za potvrdu će isteći u $4.',
+'confirmemail_error' => 'Nešto je pošlo po zlu prilikom sačuvavanja vaše potvrde.',
+'confirmemail_invalid' => 'Netačan kod za potvrdu. Moguće je da je kod istekao.',
+'confirmemail_loggedin' => 'Adresa Vaše e-pošte je potvrđena.',
+'confirmemail_send' => 'Pošaljite kod za potvrdu',
+'confirmemail_sendfailed' => 'Pošta za potvrđivanje nije poslata. Provjerite adresu zbog nepravilnih karaktera.',
+'confirmemail_sent' => 'E-pošta za potvrđivanje poslata.',
+'confirmemail_subject' => '{{SITENAME}} adresa e-pošte za potvrđivanje',
+'confirmemail_success' => 'Adresa vaše e-pošte je potvrđena. Možete sad da se prijavite i uživate u viki.',
+'confirmemail_text' => 'Ova viki zahtjeva da potvrdite adresu Vaše e-pošte prije nego što koristite mogućnosti e-pošte. Aktivirajte dugme ispod kako bi ste poslali poštu za potvrdu na Vašu adresu. Pošta uključuje poveznicu koja sadrži kod; učitajte poveznicu u Vaš brauzer da bi ste potvrdili da je adresa Vaše e-pošte validna.',
+'confirmprotect' => 'Potvrdite zaštitu',
+'confirmprotecttext' => 'Da li zaista želite da zaštitite ovu stranicu?',
+'confirmrecreate' => 'Korisnik [[{{ns:2}}:$1|$1]] ([[{{ns:3}}:$1|razgovor]]) je obrisao ovaj članak pošto ste počeli uređivanje sa razlogom:
+: \'\'$2\'\'
+
+Molimo Vas da potvrdite da stvarno želite da ponovo napravite ovaj članak.',
+'confirmunprotect' => 'Potvrdite skidanje zaštite',
+'confirmunprotecttext' => 'Da li zaista želite da skinete zaštitu sa ove stranice?',
+'contextchars' => 'Karaktera konteksta po liniji:',
+'contextlines' => 'Linija po pogotku:',
+'contribslink' => 'doprinos',
+'contribsub2' => 'Za $1 ($2)',
+'contributions' => 'Doprinos korisnika',
+'copyright' => 'Svi sadržaji podliježu "$1" licenci.',
+'copyrightpage' => '{{ns:4}}:Autorska_prava',
+'copyrightpagename' => '{{SITENAME}} autorska prava',
+'copyrightwarning' => 'Za sve priloge poslate na projekat {{SITENAME}} smatramo da su objavljeni pod $2 (konsultujte $1 za detalje).
+Ukoliko ne želite da vaši članci budu podložni izmjenama i slobodnom rasturanju i objavljivanju, 
+nemojte ih slati ovdje. Takođe, slanje članka podrazumijeva i vašu izjavu da ste ga napisali sami, ili da ste ga kopirali iz izvora u javnom domenu ili sličnog slobodnog izvora.
+
+<strong>NEMOJTE SLATI RAD ZAŠTIĆEN AUTORSKIM PRAVIMA BEZ DOZVOLE AUTORA!</strong>',
+'couldntremove' => 'Ne može se ukloniti \'$1\'...',
+'createaccount' => 'Napravi nalog',
+'createaccountmail' => 'e-poštom',
+'cur' => 'tren',
+'currentevents' => 'Trenutni događaji',
+'currentrev' => 'Trenutna revizija',
+'databaseerror' => 'Greška u bazi',
+'dateformat' => 'Format datuma',
+'datedefault' => 'Nije bitno',
+'dberrortext' => 'Desila se sintaksna greška upita baze.
+Ovo je moguće zbog ilegalnog upita, ili moguće greške u softveru.
+Poslednji pokušani upit je bio: <blockquote><tt>$1</tt></blockquote>
+iz funkcije "<tt>$2</tt>".
+MySQL je vratio grešku "<tt>$3: $4</tt>".',
+'dberrortextcl' => 'Desila se sintaksna greška upita baze.
+Poslednji pokušani upit je bio:
+"$1"
+iz funkcije "$2".
+MySQL je vratio grešku "$3: $4".',
+'deadendpages' => 'Stranice bez internih veza',
+'dec' => 'dec',
+'december' => 'decembar',
+'defaultns' => 'Uobičajeno tražite u ovim imenskim prostorima:',
+'defemailsubject' => '{{SITENAME}} e-pošta',
+'delete' => 'Obrišite',
+'deletecomment' => 'Razlog za brisanje',
+'deletedarticle' => 'obrisan "[[$1]]"',
+'deletedtext' => 'Članak "$1" je obrisan.
+Pogledajte $2 za zapis o skorašnjim brisanjima.',
+'deleteimg' => 'obr',
+'deletepage' => 'Obrišite stranicu',
+'deletesub' => '(Briše se "$1")',
+'deletethispage' => 'Obriši ovu stranicu',
+'deletionlog' => 'istorija brisanja',
+'dellogpage' => 'istorija brisanja',
+'dellogpagetext' => 'Ispod je spisak najskorijih brisanja.',
+'diff' => 'razl',
+'difference' => '(Razlika između revizija)',
+'disambiguations' => 'Stranice za višeznačne odrednice',
+'disambiguationspage' => '{{ns:10}}:Višeznačna odrednica',
+'disambiguationstext' => 'Sledeći članci se povezuju sa <i>višeznačnom odrednicom</i>.  Umjesto toga, oni bi trebali da se povezuju sa odgovarajućom temom.<br />Stranica se tretira kao višeznačna odrednica ako je povezana sa $1.<br />Poveznice iz ostalih imenskih prostora <i>nisu</i> navedene ovdje.',
+'disclaimerpage' => '{{ns:4}}:Uslovi korišćenja, pravne napomene i odricanje odgovornosti',
+'disclaimers' => 'Odricanje odgovornosti',
+'doubleredirects' => 'Dvostruka preusmjerenja',
+'doubleredirectstext' => 'Svaki red sadrži veze na prvo i drugo preusmjerenje, kao i na prvu liniju teksta drugog preusmjerenja, što obično daje "pravi" ciljni članak, na koji bi prvo preusmjerenje i trebalo da pokazuje.',
+'edit' => 'Uredite',
+'editcomment' => 'Komentar izmjene je: "<i>$1</i>".',
+'editconflict' => 'Sukobljenje izmjene: $1',
+'editcurrent' => 'Izmijenite trenutnu verziju ove stranice',
+'edithelp' => 'Pomoć pri uređivanju stranice',
+'edithelppage' => '{{ns:4}}:Uređivanje',
+'editing' => 'Uređujete $1',
+'editinguser' => 'Uređujete $1',
+'editingold' => '<strong>PAŽNJA:  Vi mijenjate stariju
+reviziju ove stranice.
+Ako je snimite, sve promjene učinjene od ove revizije će biti izgubljene.</strong>',
+'editsection' => 'uredite',
+'editold' => 'uredite',
+'editthispage' => 'Uredite ovu stranicu',
+'emailfrom' => 'Od',
+'emailmessage' => 'Poruka',
+'emailpage' => 'Pošalji e-pismo korisniku',
+'emailpagetext' => 'Ako je ovaj korisnik unio ispravnu adresu e-pošte u
+cvoja korisnička podešavanja, upitnik ispod će poslati jednu poruku.
+Adresa e-pošte koju ste vi uneli u svoja korisnička podešavanja će se pojaviti
+kao "Od" adresa poruke, tako da će primalac moći da odgovori.',
+'emailsend' => 'Pošalji',
+'emailsent' => 'Poruka poslata',
+'emailsenttext' => 'Vaša poruka je poslata e-poštom.',
+'emailsubject' => 'Tema',
+'emailto' => 'Za',
+'emailuser' => 'Pošalji e-poštu ovom korisniku',
+'emptyfile' => 'Fajl koji ste poslali je prazan. Ovo je moguće zbog greške u imenu fajla. Molimo Vas da provjerite da li stvarno želite da pošaljete ovaj fajl.',
+'enotif_body' => 'Dragi $WATCHINGUSERNAME,
+
+{{SITENAME}} strana $PAGETITLE je bila $CHANGEDORCREATED $PAGEEDITDATE od strane $PAGEEDITOR,
+pogledajte {{fullurl:$PAGETITLE_RAWURL}} za trenutnu verziju.
+
+$NEWPAGE
+
+Rezime editora: $PAGESUMMARY $PAGEMINOREDIT
+
+Kontaktirajte editora:
+pošta {{fullurl:{{ns:-1}}:Emailuser|target=$PAGEEDITOR_RAWURL}}
+viki {{fullurl:User:$PAGEEDITOR_RAWURL}}
+
+Neće biti drugih obaviještenja u slučaju daljih izmjena ukoliko ne posjetite ovu stranu.
+Takođe možete da resetujete zastavice za obaviještenja za sve Vaše praćene stranice na vašem spisku praćenenih članaka.
+
+             Vaš prijateljski {{SITENAME}} sistem obaviještavanja
+
+--
+Da promjenite podešavanja vezana za spisak praćenenih članaka posjetite
+{{fullurl:{{ns:-1}}:Watchlist|edit=yes}}
+
+Fidbek i dalja pomoć:
+{{fullurl:{{MediaWiki:helppage}}}}',
+'enotif_lastvisited' => 'Pogledajte {{fullurl:$PAGETITLE_RAWURL|diff=0&oldid=$OLDID}} za sve izmjene od vaše poslednje posjete.',
+'enotif_mailer' => '{{SITENAME}} obaviještenje o pošti',
+'enotif_newpagetext' => 'Ovo je novi članak.',
+'enotif_reset' => 'Označi sve strane kao posjećene',
+'enotif_subject' => '{{SITENAME}} strana $PAGETITLE je bila $CHANGEDORCREATED od strane $PAGEEDITOR',
+'enterlockreason' => 'Unesite razlog za zaključavanje, uključujući procijenu
+vremena otključavanja',
+'error' => 'Greška',
+'errorpagetitle' => 'Greška',
+'exbeforeblank' => 'sadržaj prije brisanja je bio: \'$1\'',
+'exblank' => 'stranica je bila prazna',
+'excontent' => 'sadržaj je bio: \'$1\'',
+'explainconflict' => 'Neko drugi je promjenio ovu stranicu otkad ste Vi počeli da je mjenjate.
+Gornje tekstualno polje sadrži tekst stranice koji trenutno postoji.
+Vaše izmjene su prikazane u donjem tekstu.
+Moraćete da unesete svoje promjene u postojeći tekst.
+<b>Samo</b> tekst u gornjem tekstualnom polju će biti snimljen kad
+pritisnete "Sačuvaj".<br />',
+'export' => 'Izvezite stranice',
+'exportcuronly' => 'Uključite samo trenutnu reviziju, ne cijelu istoriju',
+'exporttext' => 'Možete izvesti tekst i istoriju promjena određene stranice
+ili grupe stranice u XML formatu.  Ovo onda može biti uvezeno u drugi viki koji koristi MedijaViki softver, transformisano, ili korišćeno za Vaše lične potrebe.',
+'extlink_sample' => 'http://www.adresa.com opis adrese',
+'extlink_tip' => 'Spoljašnja poveznica (zapamti prefiks http://)',
+'faqpage' => '{{ns:4}}:NPP',
+'feb' => 'feb',
+'february' => 'februar',
+'feedlinks' => 'Fid:',
+'filecopyerror' => 'Ne može se kopirati "$1" na "$2".',
+'filedeleteerror' => 'Ne može se izbrisati fajl "$1".',
+'filedesc' => 'Opis',
+'fileexists' => 'Fajl sa ovim imenom već postoji.  Molimo Vas da provjerite $1 ako niste sigurni da li želite da ga promjenite.',
+'fileexists-forbidden' => 'Fajl sa ovim imenom već postoji; molimo Vas da se vratite i pošaljete ovaj fajl pod novim imenom. [[{{ns:6}}:$1|thumb|center|$1]]',
+'fileexists-shared-forbidden' => 'Fajl sa ovim imenom već postoji u zajedničkoj ostavi; molimo Vas da se vratite i pošaljete ovaj fajl pod novim imenom. [[{{ns:6}}:$1|thumb|center|$1]]',
+'fileinfo' => '$1KB, MIME tip: <code>$2</code>',
+'filemissing' => 'Nedostaje fajl',
+'filename' => 'Ime fajla',
+'filenotfound' => 'Ne može se naći fajl "$1".',
+'filerenameerror' => 'Ne može se promjeniti ime fajla "$1" to "$2".',
+'filesource' => 'Izvor',
+'filestatus' => 'Status autorskih prava',
+'fileuploaded' => 'Fajl "$1" je uspješno poslat.
+Molimo Vas da pratite ovu vezu: ($2) do stranice za opisivanje i unesite
+informacije o fajlu, kao odakle je, kad i ko ga
+je napravio, i bio šta drugo što znate o njemu.',
+'formerror' => 'Greška:  ne može se poslati upitnik',
+'friday' => 'petak',
+'getimagelist' => 'pribavljam spisak slika',
+'go' => 'Idi',
+'searcharticle' => 'Idi',
+'gotaccount' => 'Imate nalog? $1.',
+'gotaccountlink' => 'Prijavi se',
+'guesstimezone' => 'Popuni iz brauzera',
+'headline_sample' => 'Naslov',
+'headline_tip' => 'Podnaslov',
+'help' => 'Pomoć',
+'helppage' => '{{ns:12}}:Sadržaj',
+'hide' => 'sakrij',
+'hidetoc' => 'sakrij',
+'hist' => 'ist',
+'histlegend' => 'Objašnjenje: (tren) = razlika sa trenutnom verziom,
+(posl) = razlika sa prethodnom verziom, M = mala izmjena',
+'history' => 'Istorija stranice',
+'history_short' => 'Istorija',
+'historywarning' => 'Pažnja:  stranica koju želite da obrišete ima istoriju:',
+'hr_tip' => 'Horizontalna linija (koristite oskudno)',
+'ilsubmit' => 'Traži',
+'image_sample' => 'ime_slike.jpg',
+'image_tip' => 'Uklopljena slika',
+'imagelinks' => 'Upotreba slike',
+'imagelist' => 'Spisak slika',
+'imagelisttext' => 'Ispod je spisak $1 slika poređanih $2.',
+'imagepage' => 'Pogjedajte stranicu slike',
+'imagereverted' => 'Vraćanje na raniju verziju je uspješno.',
+'imgdelete' => 'obr',
+'imgdesc' => 'opis',
+'imghistlegend' => 'Objašnjenje:  (tren) = ovo je trenutna slika, (obr) = obrišite
+ovu staru verziju, (vrt) = vrati na ovu staru verziju.
+<br /><i>Kliknite na datum da vidite sliku poslatu tog dana</i>.',
+'imghistory' => 'Istorija slike',
+'imglegend' => 'Objašnjenje:  (opis) = prikaži/izmjeni opis slike.',
+'import' => 'Ivoz stranica',
+'importfailed' => 'Uvoz nije uspjeo: $1',
+'importhistoryconflict' => 'Postoji konfliktna istorija revizija',
+'importnotext' => 'Stranica je prazna, ili bez teksta',
+'importsuccess' => 'Uspješno ste uvezli stranicu!',
+'importtext' => 'Molimo Vas da izvezete fajl iz izvornog vikija koristeći [[{{ns:-1}}:Export|izvoz]], sačuvajte ga kod sebe i pošaljite ovde.',
+'internalerror' => 'Interna greška',
+'intl' => 'Međujezičke veze',
+'ip_range_invalid' => 'Netačan raspon IP adresa.',
+'ipaddress' => 'IP adresa/korisničko ime',
+'ipb_expiry_invalid' => 'Pogrešno vrijeme trajanja.',
+'ipbexpiry' => 'Trajanje',
+'ipblocklist' => 'Spisak blokiranih IP adresa i korisničkih imena',
+'ipbreason' => 'Razlog',
+'ipbsubmit' => 'Blokirajte ovog korisnika',
+'ipusubmit' => 'Deblokirajte ovog korisnika',
+'isredirect' => 'preusmjerivač',
+'italic_sample' => 'Kurzivan tekst',
+'italic_tip' => 'Kurzivan tekst',
+'iteminvalidname' => 'Problem sa \'$1\', neispravno ime...',
+'jan' => 'jan',
+'january' => 'januar',
+'jul' => 'jul',
+'july' => 'jul',
+'jun' => 'jun',
+'june' => 'jun',
+'largefile' => 'Preporučuje se da slike ne pređu veličinu od 100K.',
+'last' => 'posl',
+'lastmodifiedat' => 'Ova stranica je poslednji put izmijenjena $2, $1',
+'lastmodifiedatby' => 'Ovu stranicu je poslednji put promjenio $3, dana $3.',
+'lineno' => 'Linija $1:',
+'link_sample' => 'Naslov poveznice',
+'link_tip' => 'Unutrašnja poveznica',
+'linklistsub' => '(Spisak veza)',
+'linkshere' => 'Sledeće stranice su povezane ovdje:',
+'linkstoimage' => 'Sledeće stranice koriste ovu sliku:',
+'listusers' => 'Spisak korisnika',
+'loadhist' => 'Učitaje se istorija stranice',
+'loadingrev' => 'učitava se revizija za razliku',
+'localtime' => 'Lokalno vrijeme',
+'lockbtn' => 'Zaključajte bazu',
+'lockconfirm' => 'Da, zaista želim da zaključam bazu.',
+'lockdb' => 'Zaključajte bazu',
+'lockdbsuccesssub' => 'Baza je zaključana',
+'lockdbsuccesstext' => '{{SITENAME}} baza podataka je zaključana. <br /> Sjetite se da je otključate kad završite sa održavanjem.',
+'lockdbtext' => 'Zaključavanje baze će svim korisnicima ukinuti mogućnost izmjene stranica,
+promjene korisničkih podešavanja, izmjene praćenih članaka, i svega ostalog
+što zahtjeva promjene u bazi.
+Molimo Vas da potvrdite da je ovo zaista ono što namjeravate da uradite, i da ćete
+otkučati bazu kad završite posao oko njenog održavanja.',
+'locknoconfirm' => 'Niste potvrdili svoju namjeru.',
+'login' => 'Prijavi se',
+'loginerror' => 'Greška pri prijavljivanju',
+'loginpagetitle' => 'Prijavljivanje',
+'loginproblem' => '<b>Bilo je problema sa vašim prijavljivanjem.</b><br />Probajte ponovo!',
+'loginprompt' => 'Morate imati kolačiće (\'\'\'cookies\'\'\') omogućene da biste se prijavili na {{SITENAME}}.',
+'loginreqtitle' => 'Potrebno je [[{{ns:-1}}:Userlogin|prijavljivanje]]',
+'loginsuccess' => '\'\'\'Sad ste prijavljeni na {{SITENAME}} kao "$1".\'\'\'',
+'loginsuccesstitle' => 'Prijavljivanje uspješno',
+'logout' => 'Odjavite se',
+'logouttext' => '<strong>Sad ste odjavljeni.</strong><br />
+Možete nastaviti da koristite {{SITENAME}} anonimno, ili se ponovo prijaviti
+kao isti ili kao drugi korisnik.  Obratite pažnju da neke stranice mogu nastaviti da se prikazuju kao da ste još uvijek prijavljeni, dok ne očistite keš svog brauzera.',
+'logouttitle' => 'Odjavite se',
+'lonelypages' => 'Siročići',
+'longpages' => 'Dugačke stranice',
+'longpagewarning' => '<strong>PAŽNJA:  Ova stranica ima $1 kilobajta; niki
+brauzeri mogu imati problema kad uređujete stranice skoro ili veće od 32 kilobajta.
+Molimo Vas da razmotrite razbijanje stranice na manje dijelove.</strong>',
+'mailerror' => 'Greška pri slanju e-pošte: $1',
+'mailmypassword' => 'Pošalji mi moju lozinku',
+'mailnologin' => 'Nema adrese za slanje',
+'mailnologintext' => 'Morate biti [[Special:Userlogin|prijavljeni]]
+i imati ispravnu adresu e-pošte u vašim [[Special:Preferences|podešavanjima]]
+da biste slali e-poštu drugim korisnicima.',
+'mainpage' => 'Glavna stranica',
+'mainpagetext' => 'Viki softver is uspješno instaliran.',
+'mar' => 'mar',
+'march' => 'mart',
+'markaspatrolleddiff' => 'Označi kao patrolirano',
+'markaspatrolledtext' => 'Označi ovaj članak kao patroliran',
+'markedaspatrolled' => 'Označeno kao patrolirano',
+'markedaspatrollederror' => 'Ne može se označiti kao patrolirano',
+'markedaspatrollederrortext' => 'Morate naglasiti reviziju koju treba označiti kao patroliranu.',
+'markedaspatrolledtext' => 'Izabrana revizija je označena kao patrolirana.',
+'matchtotals' => 'Upit "$1" je nađen u "$2" naslova članaka
+i tekst $3 članaka.',
+'math' => 'Prikazivanje matematike',
+'math_bad_output' => 'Ne može se napisati ili napraviti direktorijum za matematični izvještaj.',
+'math_bad_tmpdir' => 'Ne može se napisati ili napraviti privremeni matematični direktorijum',
+'math_failure' => 'Neuspjeh pri parsiranju',
+'math_image_error' => 'PNG konverzija neuspješna; provjerite tačnu instalaciju latex-a, dvips-a, gs-a i convert-a',
+'math_lexing_error' => 'riječnička greška',
+'math_notexvc' => 'Nedostaje izvršno texvc; molimo Vas da pogledate math/README da podesite.',
+'math_sample' => 'Unesite formulu ovdje',
+'math_syntax_error' => 'sintaksna greška',
+'math_tip' => 'Matematička formula (LaTeX)',
+'math_unknown_error' => 'nepoznata greška',
+'math_unknown_function' => 'nepoznata funkcija',
+'may' => 'maj',
+'media_sample' => 'ime_medija_fajla.ogg',
+'media_tip' => 'Putanja ka multimedijalnom fajlu',
+'mediawarning' => '\'\'\'Upozorenje\'\'\': Ovaj fajl sadrži loš kod, njegovim izvršavanjem možete da ugrozite Vaš sistem.
+<hr />',
+'metadata' => 'Metapodaci',
+'mimesearch' => 'MIME pretraga',
+'mimetype' => 'MIME tip:',
+'minlength' => 'Imena fajlova moraju imati bar tri slova.',
+'minoredit' => 'Ovo je mala izmjena',
+'missingarticle' => 'Baza nije mogla naći tekst stranice koji je trebala da nađe, nazvan "$1".
+
+Ovo je obično izazvano praćenjem zastarijelog "razl" ili veze ka istoriji
+stranice koja je obrisana.
+
+Ako ovo nije slučaj, možda ste pronašli grešku u softveru.
+Molimo Vas da prijaviti ovo jednom od [[{{MediaWiki:grouppage-sysop}}|administratora]], zajedno sa URL-om.',
+'missingimage' => '<b>Ovdje nedostaje slika</b><br /><i>$1</i>',
+'monday' => 'ponedeljak',
+'moredotdotdot' => 'Još...',
+'move' => 'Premjestite',
+'movearticle' => 'Premjestite stranicu',
+'movedto' => 'premještena na',
+'movenologin' => 'Niste prijavljeni',
+'movenologintext' => 'Morate biti registrovani korisnik i [[Special:Userlogin|prijavljeni]]
+da biste premjestili stranicu.',
+'movepage' => 'Premjestite stranicu',
+'movepagebtn' => 'premjestite stranicu',
+'movepagetalktext' => 'Odgovarajuća stranica za razgovor, ako postoji, će automatski biti premještena istovremeno \'\'\'osim:\'\'\'
+*Ako premještate stranicu preko imenskih prostora,
+*Neprazna stranica za razgovor već postoji pod novim imenom, ili
+*Odčekirajte donju kutiju.
+
+U tim slučajevima, moraćete ručno da premjestite stranicu ukoliko to želite.',
+'movepagetext' => 'Donji upitnik će preimenovati stranicu, premještajući svu
+njenu istoriju na novo ime.
+Stari naslov će postati preusmjerenje na novi naslov.
+Poveznice prema starom naslovu neće biti promijenjene; obavezno
+provjerite da li ima [[{{ns:-1}}:DoubleRedirects|dvostrukih]] ili [[{{ns:-1}}:BrokenRedirects|pokvarenih preusmjerenja]].
+Na vama je odgovornost da veze i dalje idu tamo gdje trebaju da idu.
+
+Obratite pažnju da stranica \'\'\'neće\'\'\' biti pomjerena ako već postoji
+stranica sa novim naslovom, osim ako je ona prazna ili preusmjerenje i nema
+istoriju promjena.   Ovo znači da ne možete preimenovati stranicu na ono ime
+sa koga ste je preimenovali ako pogriješite, i ne možete prepisati
+postojeću stranicu.
+
+<b>PAŽNJA!</b>
+Ovo može biti drastična i neočekivana promjena za popularnu stranicu;
+molimo Vas da budete sigurni da razumijete poslijedice ovoga prije što
+nastavite.',
+'movetalk' => 'Premjestite "stranicu za razgovor" takođe, ako je moguće.',
+'movethispage' => 'Premjesti ovu stranicu',
+'mycontris' => 'Moj doprinos',
+'mypage' => 'Moja stranica',
+'mytalk' => 'Moj razgovor',
+'navigation' => 'Navigacija',
+'nbytes' => '$1 bajtova',
+'newarticle' => '(Novi)',
+# problem with link: [[{{ns:4}}:Igralište|igralište]]
+'newarticletext' => '<div style="border: 1px solid #ccc; padding: 7px;">\'\'\'{{SITENAME}} nema stranicu {{PAGENAME}}.\'\'\'
+* Da započnete stranicu, koristite prostor ispod i kad završite, pritisnite "Sačuvaj".  Vaše izmjene će odmah biti vidljive.
+* Ako ste novi na prjektu {{SITENAME}}, molimo Vas da pogledate [[{{MediaWiki:helppage}}|pomoćnu stranicu]], ili koristite [[{{ns:4}}:Igralište|igralište]] za eksperimentaciju.
+</div>',
+'newmessageslink' => 'novih poruka',
+'newpage' => 'Nova stranica',
+'newpages' => 'Nove stranice',
+'newpassword' => 'Nova lozinka:',
+'newtitle' => 'Novi naslov',
+'next' => 'sled',
+'nextn' => 'sledećih $1',
+'nlinks' => '$1 veza',
+# problem with lik: [[{{ns:4}}:Zahtjevi za brisanje#{{PAGENAME}}|ovdje]]
+'noarticletext' => '<div style="border: 1px solid #ccc; padding: 7px;">\'\'\'{{SITENAME}} još nema ovaj članak.\'\'\'
+* Da započnete članak, kliknite \'\'\'[{{fullurl:{{NAMESPACE}}:{{PAGENAME}}|action=edit}} uredite ovu stranicu]\'\'\'.
+* [[{{ns:-1}}:Search/{{PAGENAME}}|Pretraži {{PAGENAME}}]] u ostalim člancima
+* [[{{ns:-1}}:Whatlinkshere/{{NAMESPACE}}:{{PAGENAME}}|Stranice koje su povezane za]] {{PAGENAME}} članak
+----
+* \'\'\'Ukoliko ste napravili ovaj članak u poslednjih nekoliko minuta i još se nije pojavio, postoji mogućnost da je server u zastoju zbog osvježavanja baze podataka.\'\'\' Molimo Vas da probate sa <span class="plainlinks">[{{fullurl:{{NAMESPACE}}:{{PAGENAME}}|action=purge}} osvježavanjem]<span> ili sačekajte i provjerite kasnije ponovo prije ponovnog pravljenja članka.
+* Ako ste napravili članak pod ovim imenom ranije, moguće je da je bio izbrisan.  Potražite \'\'\'{{FULLPAGENAME}}\'\'\' [{{fullurl:Special:Log|type=delete&page={{FULLPAGENAMEE}}}} u spisku brisanja].  Alternativno, provjerite [[{{ns:4}}:Zahtjevi za brisanje#{{PAGENAME}}|ovdje]].
+</div>',
+'noconnect' => 'Žao nam je! Viki ima neke tehničke poteškoće, i ne može da se poveže sa serverom baze. <br />',
+'nocontribs' => 'Nisu nađene promjene koje zadovoljavaju ove uslove.',
+'nocookieslogin' => '{{SITENAME}} koristi kolačiće (\'\'cookies\'\') da bi se korisnici prijavili.  Vi ste onemogućili kolačiće na Vašem kompjuteru.  Molimo Vas da ih omogućite i da pokušate ponovo sa prijavom.',
+'nocookiesnew' => 'Korisnički nalog je napravljen, ali niste prijavljeni.  {{SITENAME}} koristi kolačiće (\'\'cookies\'\') da bi se korisnici prijavili.  Vi ste onemogućili kolačiće na Vašem kompjuteru.  molimo Vas da ih omogućite, a onda se prijavite sa svojim novim korisničkim imenom i lozinkom.',
+'nocreativecommons' => 'Creative Commons RDF metapodaci onemogućeni za ovaj server.',
+'nodb' => 'Ne mogu da izaberem bazu $1',
+'nodublincore' => 'Dublin Core RDF metapodaci onemogućeni za ovaj server.',
+'noemail' => 'Ne postoji adresa e-pošte za korisnika "$1".',
+'noemailtext' => 'Ovaj korisnik nije naveo ispravnu adresu e-pošte,
+ili je izabrao da ne prima e-poštu od drugih korisnika.',
+'noemailtitle' => 'Nema adrese e-pošte',
+# problem with link: [[{{ns:4}}:Zahtjevani članci|da stavite zahtjev za ovaj članak]]
+'noexactmatch' => 'Nema stranice sa takvim imenom.
+
+Možete \'\'\'[[:$1|da napravite članak sa tim naslovom]]\'\'\' ili [[{{ns:4}}:Zahtjevani članci|da stavite zahtjev za ovaj članak]] ili [[{{ns:-1}}:Allpages/$1|potražite na drugim stranicama]].
+
+::*\'\'\'\'\'<u>Opomena: Nemojte da kopirate materijale za koje nemate dozvolu!</u>\'\'\'\'\'',
+'nohistory' => 'Ne postoji istorija izmjena za ovu stranicu.',
+'nolinkshere' => 'Ništa nije povezano ovdje.',
+'nolinkstoimage' => 'Nema stranica koje koriste ovu sliku.',
+'nologinlink' => 'Napravite nalog',
+'noname' => 'Niste izabrali ispravno korisničko ime.',
+'nonefound' => '\'\'\'Pažnja\'\'\': neuspješne pretrage su
+često izazvane traženjem čestih riječi kao "je" ili "od",
+koje nisu indeksirane, ili navođenjem više od jednog izraza za traženje (samo stranice
+koje sadrže sve izraze koji se traže će se pojaviti u rezultatima).',
+'nospecialpagetext' => 'Tražili ste posebnu stranicu, koju {{SITENAME}} softver nije prepoznao.',
+'nosuchaction' => 'Nema takve akcije',
+'nosuchactiontext' => 'Akcija navedena u URL-u nije
+prepoznata od strane {{SITENAME}} softvera.',
+'nosuchspecialpage' => 'Nema takve posebne stranice',
+'nosuchuser' => 'Ne postoji korisnik sa imenom "$1". Provjerite Vaše kucanje, ili upotrebite donji upitnik da napravite novi korisnički nalog.',
+'notacceptable' => 'Viki server ne može da pruži podatke u onom formatu koji Vaš klijent može da pročita.',
+'notanarticle' => 'Nije članak',
+'notargettext' => 'Niste naveli ciljnu stranicu ili korisnika
+na kome bi se izvela ova funkcija.',
+'notargettitle' => 'Nema cilja',
+'note' => '<strong>Pažnja:</strong>',
+'notextmatches' => 'Tekst članka ne odgovara',
+'notitlematches' => 'Naslov članka ne odgovara.',
+'notloggedin' => 'Niste prijavljeni',
+'nov' => 'nov',
+'november' => 'novembar',
+'nowatchlist' => 'Nemate ništa na svom spisku praćenih članaka.',
+'nowiki_sample' => 'Dodaj neformatirani tekst ovdje',
+'nowiki_tip' => 'Ignoriši viki formatiranje teksta',
+'nstab-category' => 'Kategorija',
+'nstab-help' => 'Pomoć',
+'nstab-image' => 'Slika',
+'nstab-main' => 'Članak',
+'nstab-media' => 'Medija',
+'nstab-mediawiki' => 'Poruka',
+'nstab-special' => 'Posebna',
+'nstab-template' => 'Šablon',
+'nstab-user' => 'Korisnička stranica',
+'nstab-project' => 'Članak',
+'nviews' => '$1 puta pogledano',
+'oct' => 'okt',
+'october' => 'oktobar',
+'ok' => 'da',
+'oldpassword' => 'Stara lozinka:',
+'orig' => 'orig',
+'othercontribs' => 'Bazirano na radu od strane korisnika $1.',
+'otherlanguages' => 'Ostali jezici',
+'pagecategories' => 'Kategorije',
+'pagemovedsub' => 'Premještanje uspjelo',
+'pagemovedtext' => 'Stranica "[[$1]]" premještena je na "[[$2]]".',
+'pagetitle' => '$1 - {{SITENAME}}',
+'passwordremindertext' => 'Neko (vjerovatno Vi, sa IP adrese $1)
+je zahtjevao da vam pošaljemo novu {{SITENAME}} lozinku za prijavljivanje na {{SERVERNAME}}.
+Lozinka za korisnika "$2" je sad "$3".
+Sad treba da se prijavite i promjenite lozinku.
+
+Ako je neko drugi napravio ovaj zahtjev ili ako ste se sjetili vaše lozinke i
+ne želite više da je promjenite, možete da ignorišete ovu poruku i da nastavite koristeći
+vašu staru lozinku.',
+'passwordremindertitle' => '{{SITENAME}} podsjetnik za lozinku',
+'passwordsent' => 'Nova lozinka je poslata na adresu e-pošte
+korisnika "$1".
+Molimo Vas da se prijavite pošto je primite.',
+'perfcached' => 'Sledeći podaci su keširani i možda neće biti u potpunosti ažurirani:',
+'perfdisabled' => 'Žao nam je!  Ova mogućnost je privremeno onemogućena jer usporava bazu do te mjere da više niko ne može da koristi viki.',
+'perfdisabledsub' => 'Ovdje je sačuvana kopija $1:',
+'permalink' => 'Trajna veza',
+'personaltools' => 'Lični alati',
+'popularpages' => 'Popularne stranice',
+'portal' => 'Portal zajednice',
+'portal-url' => '{{ns:4}}:Portal_zajednice',
+'postcomment' => 'Pošaljite komentar',
+'powersearch' => 'Traži',
+'powersearchtext' => 'Pretraga u imenskim prostorima :<br />
+$1<br />
+$2 Izlistajte preusmjerenja &nbsp; Tražite $3 $9',
+'preferences' => 'Podešavanja',
+'prefs-help-email' => '* E-mail (optional): Enables others to contact you through your user or user_talk page without the need of revealing your identity.',
+'prefs-misc' => 'Ostala podešavanja',
+'prefs-personal' => 'Korisnički podaci',
+'prefs-rc' => 'Podešavanja nedavnih izmjena',
+'prefsnologin' => 'Niste prijavljeni',
+'prefsnologintext' => 'Morate biti [[{{ns:-1}}:Userlogin|prijavljeni]] da biste podešavali korisnička podešavanja.',
+'prefsreset' => 'Podešavanja su vraćena na prvotne vrijednosti.',
+'preview' => 'Pregled stranice',
+'previewconflict' => 'Ovaj pregled reflektuje tekst u gornjem polju
+kako će izgledati ako pritisnete "Sačuvaj članak".',
+'previewnote' => '<strong>Ovo je samo pregled; izmjene stranice nisu još sačuvane!</strong>',
+'prevn' => 'prethodnih $1',
+'print' => 'Štampa',
+'printableversion' => 'Verzija sa štampanje',
+'protect' => 'Zaštitite',
+'protect-default' => '(standardno)',
+'protect-level-autoconfirmed' => 'Blokiraj neregistrovane korisnike',
+'protect-level-sysop' => 'Samo administratori',
+# problem with link: [[{{ns:4}}:Zaštićena stranica|uputstva projekta]]
+'protect-text' => 'Ovdje možete gledati i izmjeniti level zaštite za stranicu <strong>$1</strong>.
+Budite sigurni da pratite [[{{ns:4}}:Zaštićena stranica|uputstva projekta]].',
+'protect-unchain' => 'Deblokirajte dozvole premještanja',
+'protect-viewtext' => 'Vaš nalog nema dozvolu da promjeni level zaštite stranica.
+Ovo su trenutna podešavanja za stranicu <strong>$1</strong>:',
+'protectcomment' => 'Razlog za zaštitu',
+'protectedarticle' => 'stranica "[[$1]]" je zaštićena',
+'protectedpage' => 'Zaštićena stranica',
+# proble with link: [[{{ns:4}}:Pravila o zaštiti stranica|pravila o zaštiti stranica]]
+'protectedpagewarning' => '<strong>PAŽNJA: Ova stranica je zaključana tako da samo korisnici sa
+administratorkim privilegijama mogu da je mijenjaju. Uvjerite se da pratite [[{{ns:4}}:Pravila o zaštiti stranica|pravila o zaštiti stranica]]</strong>.',
+# problem with link: [[{{ns:4}}:Zaštićena stranica]]
+'protectedtext' => 'Ova stranica je zaključana i ne može se uređivati; moguće je da ima
+mnogo razloga za ovo, molimo Vas da pogledate [[{{ns:4}}:Zaštićena stranica]].
+
+Možete gledati i kopirati sadržaj ove stranice:',
+'protectlogpage' => 'Istorija zaključavanja',
+# problem with link: [[{{ns:4}}:Zaštićena stranica]]
+'protectlogtext' => 'Ispod je spisak zaštićenja stranice.
+Pogledajte [[{{ns:4}}:Zaštićena stranica]] za više informacija.',
+'protectsub' => '(Zaštićuje se "$1")',
+'protectthispage' => 'Zaštitite ovu stranicu',
+'proxyblocker' => 'Bloker proksija',
+'proxyblockreason' => 'Vaša IP adresa je blokirana jer je ona otvoreni proksi.  Molimo vas da kontaktirate vašeg davatelja internetskih usluga (Internet Service Provider-a) ili tehničku podršku i obavijestite ih o ovom ozbiljnom sigurnosnom problemu.',
+'proxyblocksuccess' => 'Proksi uspješno blokiran.',
+'qbbrowse' => 'Prelistajte',
+'qbedit' => 'Izmjenite',
+'qbfind' => 'Pronađite',
+'qbmyoptions' => 'Moje opcije',
+'qbpageinfo' => 'Informacije o stranici',
+'qbpageoptions' => 'Opcije stranice',
+'qbsettings' => 'Podešavanja brze palete',
+'qbsettings-none'	=> 'Nikakva',
+'qbsettings-fixedleft'	=> 'Pričvršćena lijevo',
+'qbsettings-fixedright'	=> 'Pričvršćena desno',
+'qbsettings-floatingleft'	=> 'Plutajuća lijevo',
+'qbspecialpages' => 'Posebne stranice',
+'randompage' => 'Slučajna stranica',
+'range_block_disabled' => 'Administratorska mogućnost da blokira grupe je isključena.',
+'rclinks' => 'Prikaži najskorijih $1 izmjena u poslednjih $2 dana; $3',
+'rclistfrom' => 'Prikaži nove izmjene počev od $1',
+'rclsub' => '(na stranice povezane sa "$1")',
+'rcnote' => 'Ispod je najskorijih <strong>$1</strong> izmjena u poslednjih <strong>$2</strong> dana.',
+'rcnotefrom' => 'Ispod su izmjene od <b>$2</b> (do <b>$1</b> prikazano).',
+'rcshowhideanons' => '$1 anonimne korisnike',
+'rcshowhidebots' => '$1 botove',
+'rcshowhideliu' => '$1 prijavljene korisnike',
+'rcshowhidemine' => '$1 moje izmjene',
+'rcshowhideminor' => '$1 male izmjene',
+'rcshowhidepatr' => '$1 patrolirane izmjene',
+'readonly' => 'Baza je zaključana',
+'readonlytext' => 'Baza je trenutno zaključana za nove unose i ostale izmjene, vjerovatno zbog rutinskog održavanja, posle čega će biti vraćena u uobičajeno stanje.
+
+Administrator koji ju je zaključao je ponudio ovo objašnjenje: $1',
+'readonlywarning' => '<strong>PAŽNJA:  Baza je zaključana zbog održavanja,
+tako da nećete moći da sačuvate svoje izmjene za sada.  Možda želite da kopirate
+i nalijepite tekst u tekst editor i sačuvate ga za kasnije.</strong>',
+'recentchanges' => 'Nedavne izmjene',
+'recentchangesall' => 'sve',
+'recentchangescount' => 'Broj naslova u nedavnim izmjenama:',
+'recentchangeslinked' => 'Srodne izmjene',
+'recentchangestext' => 'Na ovoj stranici možete pratiti nedavne izmjene.',
+'redirectedfrom' => '(Preusmjereno sa $1)',
+'remembermypassword' => 'Zapamti me',
+'removechecked' => 'Uklonite označene unose iz spiska praćenih članaka',
+'removedwatch' => 'Uklonjeno iz spiska praćenih članaka',
+'removedwatchtext' => 'Stranica "$1" je uklonjena iz vašeg spiska praćenih članaka.',
+'removingchecked' => 'Uklanjaju se ove stranice sa spiska praćenih članaka...',
+'resetprefs' => 'Vrati podešavanja',
+'restorelink' => '$1 izbrisanih izmjena',
+'resultsperpage' => 'Pogodaka po stranici:',
+'retrievedfrom' => 'Dobavljeno iz "$1"',
+'returnto' => 'Povratak na $1.',
+'retypenew' => 'Ukucajte ponovo novu lozinku:',
+'reupload' => 'Ponovo pošaljite',
+'reuploaddesc' => 'Vratite se na upitnik za slanje.',
+'reverted' => 'Vraćeno na prijašnju reviziju',
+'revertimg' => 'vrt',
+'revertmove' => 'vrati',
+'revertpage' => 'Vraćene izmjene $2 na poslednju izmjenu korisnika $1',
+'revhistory' => 'Istorija izmjena',
+'revisionasof' => 'Revizija od $1',
+'revnotfound' => 'Revizija nije pronađena',
+'revnotfoundtext' => 'Starija revizija ove stranice koju ste zatražili nije nađena.
+Molimo Vas da provjerite URL pomoću kojeg ste pristupili ovoj stranici.',
+'rollback' => 'Vrati izmjene',
+'rollback_short' => 'Vrati',
+'rollbackfailed' => 'Vraćanje nije uspjelo',
+'rollbacklink' => 'vrati',
+'rows' => 'Redova',
+'saturday' => 'subota',
+'savearticle' => 'Sačuvaj',
+'savedprefs' => 'Vaša podešavanja su sačuvana.',
+'savefile' => 'Sačuvaj fajl',
+'saveprefs' => 'Sačuvajte podešavanja',
+'search' => 'Pretraži',
+'searchbutton' => 'Pretraži',
+'searchdisabled' => '<p>Izvinjavamo se!  Puno pretraga teksta je privremeno onemogućena.  U međuvremenu, možete koristiti Google za pretragu.  Indeks može biti stariji.',
+'searchsubtitle' => 'Tražili ste [[:$1]] [[Special:Allpages/$1|&#x5B;Sadržaj&#x5D;]]',
+'searchsubtitleinvalid' => 'Tražili ste $1',
+'searchresults' => 'Rezultati pretrage',
+'searchresultshead' => 'Podešavanja rezultata pretrage',
+'searchresulttext' => 'Za više informacija o pretraživanju {{SITENAME}}, pogledajte [[{{MediaWiki:helppage}}|{{int:help}}]].',
+'selectnewerversionfordiff' => 'Izaberite noviju verziju za upoređivanje',
+'selectolderversionfordiff' => 'Izaberite stariju verziju za upoređivanje',
+'selfmove' => 'Izvorni i ciljani naziv su isti; strana ne može da se premjesti preko same sebe.',
+'semiprotectedpagewarning' => '\'\'\'Pažnja:\'\'\' Ova stranica je zaključana tako da je samo registrovani korisnici mogu uređivati.',
+'sep' => 'sep',
+'september' => 'septembar',
+'servertime' => 'Vrijeme na serveru',
+'shortpages' => 'Kratke stranice',
+'show' => 'pokaži',
+'showbigimage' => 'Prikaži sliku veće rezolucije ($1x$2, $3 Kb)',
+'showdiff' => 'Prikaži izmjene',
+'showhidebots' => '($1 botove)',
+'showingresults' => 'Prikazani su <b>$1</b> rezultata počev od <b>$2</b>.',
+'showingresultsnum' => 'Prikazani su <b>$3</b> rezultati počev od <b>$2</b>.',
+'showlast' => 'Prikaži poslednjih $1 slika sortiranih po $2.',
+'showpreview' => 'Prikaži izgled',
+'showtoc' => 'prikaži',
+'sig_tip' => 'Vaš potpis sa trenutnim vremenom',
+'sitestats' => 'Statistika sajta',
+'sitestatstext' => '<p style="font-size:125%;margin-bottom:0">{{SITENAME}} trenutno ima \'\'\'$2\'\'\' članaka.</p>
+<p style="margin-top:0">Ovaj broj isključuje preusmjerenja, stranice za razgovor, stranice sa opisom slike, korisničke stranice, šablone, stranice za pomoć, članke bez poveznica, i stranice o projektu {{SITENAME}}.</p>
+<p>
+Totalni broj stranica u bazi:  \'\'\'$1\'\'\'.</p>
+<p>
+Bilo je \'\'\'$3\'\'\' pogleda stranica, i \'\'\'$4\'\'\' izmjena otkad je viki bio instaliran.
+To izađe u prosjeku oko \'\'\'$5\'\'\' izmjena po stranici, i \'\'\'$6\'\'\' pogleda po izmjeni.
+</p>',
+'sitesupport' => 'Donacije',
+'sitesupport-url' => '{{ns:4}}:Donacije',
+'siteuser' => '{{SITENAME}} korisnik $1',
+'siteusers' => '{{SITENAME}} korisnik (korisnici) $1',
+'skin' => 'Koža',
+'skinpreview' => '(Pregled)',
+'spamprotectionmatch' => 'Sledeći tekst je izazvao naš filter za neželjene poruke: $1',
+'spamprotectiontext' => 'Strana koju želite da sačuvate je blokirana od strane filtera za neželjene poruke.  Ovo je vjerovatno izazvao vezom ka spoljašnjem sajtu.',
+'spamprotectiontitle' => 'Filter za zaštitu od neželjenih poruka',
+'speciallogtitlelabel' => 'Naslov:',
+'specialloguserlabel' => 'Korisnik:',
+'specialpage' => 'Posebna Stranica',
+'specialpages' => 'Posebne stranice',
+'spheading' => 'Posebne stranice za sve korisnike',
+'sqlhidden' => '(SQL pretraga sakrivena)',
+'statistics' => 'Statistike',
+'storedversion' => 'Uskladištena verzija',
+'stubthreshold' => 'Granica za prikazivanje klica',
+'subcategories' => 'Potkategorije',
+'subcategorycount' => '$1 potkategorija su u ovoj kategoriji.',
+'subject' => 'Tema/naslov',
+'successfulupload' => 'Uspješno slanje',
+'summary' => 'Sažetak',
+'sunday' => 'nedelja',
+'talk' => 'Razgovor',
+'talkexists' => 'Sama stranica je uspješno premještena, ali
+stranica za razgovor nije mogla biti premještena jer takva već postoji na novom naslovu.  Molimo Vas da ih spojite ručno.',
+'talkpage' => 'Razgovor o stranici',
+'talkpagemoved' => 'Odgovarajuća stranica za razgovor je takođe premještena.',
+'talkpagenotmoved' => 'Odgovarajuća stranica za razgovor <strong>nije</strong> premještena.',
+'templatesused' => 'Šabloni koji su upotrebljeni na ovoj stranici:',
+'textboxsize' => 'Veličine tekstualnog polja',
+'textmatches' => 'Tekst stranice odgovara',
+'thisisdeleted' => 'Pogledaj ili vrati $1?',
+'thumbnail-more' => 'uvećajte',
+'thumbsize' => 'Veličina umanjenog prikaza:',
+'thursday' => 'četvrtak',
+'timezonelegend' => 'Vremenska zona',
+'timezoneoffset' => 'Odstupanje',
+'timezonetext' => 'Unesite broj sati za koji se Vaše lokalno vrijeme razlikuje od serverskog vremena (UTC).',
+'titlematches' => 'Naslov članka odgovara',
+'toc' => 'Sadržaj',
+'tog-autopatrol' => 'Označi moje izmjene kao patrolirane',
+'tog-enotifminoredits' => 'Pošalji mi e-poštu takođe za male izmjene stranica',
+'tog-enotifrevealaddr' => 'Otkrij adresu moje e-pošte u porukama obaviještenja',
+'tog-enotifusertalkpages' => 'Pošalji mi e-poštu kad se promijeni moja korisnička stranica za razgovor',
+'tog-enotifwatchlistpages' => 'Pošalji mi e-poštu kad se promijene stranice',
+'tog-hideminor' => 'Sakrij male izmjene u spisku nedavnih izmjena',
+'tog-highlightbroken' => 'Formatiraj pokvarene veze <a href="" class="new">ovako</a> (alternativa: ovako<a href="" class="internal">?</a>).',
+'tog-justify' => 'Uravnjaj pasuse',
+'tog-minordefault' => 'Označi sve izmjene malim isprva',
+'tog-nocache' => 'Onemogući keširanje stranica',
+'tog-numberheadings' => 'Automatski numeriši podnaslove',
+'tog-previewonfirst' => 'Prikaži izgled pri prvoj izmjeni',
+'tog-previewontop' => 'Prikaži pretpregled prije polja za izmjenu a ne posle',
+'tog-rememberpassword' => 'Zapamti lozinku kroz više seansi',
+'tog-showjumplinks' => 'Omogući "skoči na" poveznice',
+'tog-shownumberswatching' => 'Prikaži broj korisnika koji prate',
+'tog-showtoc' => 'Prikaži sadržaj<br />(u svim stranicama sa više od tri podnaslova)',
+'tog-showtoolbar' => 'Prikaži dugmiće za izmjene (JavaScript)',
+'tog-underline' => 'Podvuci veze:',
+'tog-usenewrc' => 'Poboljšan spisak nedavnih izmjena (JavaScript)',
+'tog-watchcreations' => 'Dodaj stranice koje ja napravim u moj spisak praćenih članaka',
+'tog-watchdefault' => 'Dodaj stranice koje uređujem u moj spisak praćenih članaka',
+'toolbox' => 'Posebne funkcije',
+'tooltip-compareselectedversions' => 'Pogledajte pazlike između dvije selektovane verzije ove stranice.',
+'tooltip-minoredit' => 'Naznačite da se radi o maloj izmjeni',
+'tooltip-preview' => 'Pregledajte Vaše izmjene; molimo Vas da koristite ovo prije nego što sačuvate stranicu!',
+'tooltip-save' => 'Sačuvajte Vaše izmjene',
+'tooltip-search' => 'Pretražite projekat {{SITENAME}}',
+'tooltip-watch' => 'Dodajte ovu stranicu na Vaš spisak praćenih članaka',
+'tuesday' => 'utorak',
+'uclinks' => 'Gledaj poslednjih $1 izmjena; gledaj poslednjih $2 dana.',
+'ucnote' => 'Ispod je poslednjih <b>$1</b> izmjena u poslednjih <b>$2</b> dana.',
+'uctop' => ' (vrh)',
+'uid' => 'Korisnički ID:',
+'unblockip' => 'Odblokiraj korisnika',
+'unblockiptext' => 'Upotrebite donji upitnik da bi ste vratili
+pravo pisanja ranije blokiranoj IP adresi
+ili korisničkom imenu.',
+'unblocklink' => 'deblokiraj',
+'unblocklogentry' => 'deblokiran $1',
+'uncategorizedcategories' => 'Nekategorisane kategorije',
+'uncategorizedpages' => 'Nekategorisane stranice',
+'undelete' => 'Pogledaj izbrisane stranice',
+'undelete_short' => 'Vrati $1 obrisanih izmjena',
+'undeletearticle' => 'Vrati izbrisani članak',
+'undeletebtn' => 'Vrati!',
+'undeletedarticle' => 'vraćeno "$1"',
+'undeletedrevisions' => '$1 revizija vraćeno',
+'undeletehistory' => 'Ako vratite stranicu, sve revizije će biti vraćene njenoj istoriji.
+Ako je nova stranica istog imena napravljena od brisanja, vraćene
+revizije će se pojaviti u ranijoj istoriji, a trenutna revizija sadašnje stranice
+neće biti automatski zamijenjena.',
+'undeletehistorynoadmin' => 'Ova stranica je izbrisana.  Ispod se nalazi dio istorije brisanja i istorija revizija izbrisane stranice.  Tekst izbrisane stranice je vidljiv samo korisnicima koji su administratori.',
+'undeletepage' => 'Pogledaj i vrati izbrisane stranice',
+'undeletepagetext' => 'Sledeće stranice su izbrisane ali su još uvijek u arhivi i
+mogu biti vraćene.  Arhiva moše biti periodično čišćena.',
+'undeleterevision' => 'Izbrisana revizija od $1',
+'undeleterevisions' => '$1 revizija arhivirano',
+'underline-always' => 'Uvijek',
+'underline-default' => 'Po podešavanjima brauzera',
+'underline-never' => 'Nikad',
+'unexpected' => 'Neočekivana vrijednost: "$1"="$2".',
+'unlockbtn' => 'Otključaj bazu',
+'unlockconfirm' => 'Da, zaista želim da otključam bazu.',
+'unlockdb' => 'Otključaj bazu',
+'unlockdbsuccesssub' => 'Baza je otključana',
+'unlockdbsuccesstext' => '{{SITENAME}} baza podataka je otključana.',
+'unlockdbtext' => 'Otključavanje baze će svim korisnicima vratiti mogućnost
+izmjene stranica, promjene korisničkih stranica, izmjene spiska praćenih članaka,
+i svega ostalog što zahtjeva promjene u bazi.
+Molimo Vas da potvrdite da je ovo zaista ono što namijeravate da uradite.',
+'unprotect' => 'odštiti',
+'unprotectcomment' => 'Razlog za skidanje zaštite',
+'unprotectedarticle' => 'odštićena "$1"',
+'unprotectsub' => '(Skidanje zaštite "$1")',
+'unprotectthispage' => 'Odštiti ovu stranicu',
+'unusedcategories' => 'Nekorišćene kategorije',
+'unusedcategoriestext' => 'Sledeće strane kategorija postoje iako ih ni jedan drugi članak ili kategorija ne koriste.',
+'unusedimages' => 'Neupotrebljene slike',
+'unusedimagestext' => '<p>Obratite pažnju da se drugi veb sajtovi, kao što su drugi
+međunarodni Vikiji, mogu povezati na sliku direktnom
+URL-om, i tako mogu još uvijek biti prikazani ovdje uprkos
+aktivnoj upotrebi.</p>',
+'unwatch' => 'Ukinite praćenje',
+'unwatchthispage' => 'Ukinite praćenje',
+'updated' => '(Osvježeno)',
+'upload' => 'Postavi datoteku',
+'uploadbtn' => 'Postavi datoteku',
+'uploaddisabled' => 'Slanje fajlova je isključeno',
+'uploadedfiles' => 'Poslati fajlovi',
+'uploadedimage' => 'poslato "[[$1]]"',
+'uploaderror' => 'Greška pri slanju',
+'uploadlog' => 'log slanja',
+'uploadlogpage' => 'istorija slanja',
+'uploadlogpagetext' => 'Ispod je spisak najskorijih slanja.',
+'uploadnologin' => 'Niste prijavljeni',
+'uploadnologintext' => 'Morate biti [[{{ns:-1}}:Userlogin|prijavljeni]]
+da bi ste slali fajlove.',
+'uploadvirus' => 'Fajl sadrži virus!  Detalji:  $1',
+'uploadwarning' => 'Upozorenje pri slanju',
+'usercssjsyoucanpreview' => '<strong>Pažnja:</strong> Koristite \'Prikaži izgled\' dugme da testirate svoj novi CSS/JS prije nego što sačuvate.',
+'usercsspreview' => '\'\'\'Zapamtite ovo je samo izgled vašeg CSS-a, još uvijek nije sačuvan!\'\'\'',
+'userexists' => 'Korisničko ime koje ste unijeli je već u upotrebi.  Molimo Vas da izaberete drugo ime.',
+'userjspreview' => '\'\'\'Zapamtite ovo je samo izgled vaše JavaScript-e, još uvijek nije sačuvan!\'\'\'',
+'userlogin' => 'Prijavite se / Registrujte se',
+'userlogout' => 'Odjavite se',
+'usermailererror' => 'Objekat pošte je vratio grešku:',
+'username' => 'Korisničko ime:',
+'userpage' => 'Pogledaj korisničku stranicu',
+'userstats' => 'Statistike korisnika',
+'userstatstext' => 'Postoji \'\'\'$1\'\'\' registrovanih korisnika, od kojih
+su \'\'\'$2\'\'\' (ili \'\'\'$4%\'\'\') administratori.',
+'version' => 'Verzija',
+'versionrequired' => 'Verzija $1 MedijaVikija je potrebna',
+'versionrequiredtext' => 'Verzija $1 MedijaVikija je potrebna da bi se koristila ova strana. Pogledajte [[{{ns:-1}}:Version|verziju]]',
+'viewcount' => 'Ovoj stranici je pristupljeno $1 puta.',
+'viewdeleted' => 'Pogledaj $1?',
+'viewdeletedpage' => 'Pogledaj izbrisane stranice',
+'viewprevnext' => 'Pogledaj ($1) ($2) ($3).',
+'views' => 'Pregledi',
+'viewsource' => 'pogledaj kod',
+'viewtalkpage' => 'Pogledaj raspravu',
+'wantedcategories' => 'Tražene kategorije',
+'wantedpages' => 'Tražene stranice',
+'watch' => 'Prati',
+'watchdetails' => '* $1 stranica praćeno ne računajući stranice za razgovor
+* [$4 prikaži i mijenjaj potpuni spisak]',
+'watcheditlist' => 'Ovdje je abecedni spisak stranica koje
+pratite.  Označite stranice koje želite da uklonite sa svog spiska i kliknite na dugme \'ukloni izabrane\' na dnu ekrana.',
+'watchlist' => 'Praćeni članci',
+'mywatchlist' => 'Praćeni članci',
+'watchlistcontains' => 'Vaš spisak praćenih članaka sadrži $1 stranica.',
+'watchmethod-list' => 'provjerava se da li ima nedavnih izmjena u praćenim stranicama',
+'watchmethod-recent' => 'provjerava se da li ima praćenih stranica u nedavnim izmjenama',
+'watchnochange' => 'Ništa što pratite nije promjenjeno u prikazanom vremenu.',
+'watchnologin' => 'Niste prijavljeni',
+'watchnologintext' => 'Morate biti [[{{ns:-1}}:Userlogin|prijavljeni]] da bi ste mijenjali spisak praćenih članaka.',
+'watchthis' => 'Prati ovaj članak',
+'watchthispage' => 'Prati ovu stranicu',
+'wednesday' => 'srijeda',
+'welcomecreation' => '<h2>Dobro došli, $1!</h2><p>Vaš nalog je napravljen.
+Ne zaboravite da prilagodite sebi svoja podešavanja.',
+'whatlinkshere' => 'Šta je povezano ovdje',
+'whitelistacctext' => 'Da bi vam bilo dozvoljeno da napravite naloge na ovom Vikiju, morate da se [[{{ns:-1}}:Userlogin|prijavite]] i imate odgovarajuća ovlašćenja.',
+'whitelistacctitle' => 'Nije vam dozvoljeno da napravite nalog',
+'whitelistedittext' => 'Morate da se [[{{ns:-1}}:Userlogin|prijavite]] da bi ste uređivali stranice.',
+'whitelistedittitle' => 'Obavezno je prijavljivanje za uređivanje',
+'whitelistreadtext' => 'Morate da se [[{{ns:-1}}:Userlogin|prijavite]] da bi ste čitali članke.',
+'whitelistreadtitle' => 'Obavezno je prijavljivanje za čitanje',
+'projectpage' => 'Pogledaj stranu o ovoj strani',
+'wlheader-enotif' => '* Obavještavanje e-poštom je omogućeno.',
+'wlheader-showupdated' => '* Stranice koje su izmjenjene od kad ste ih poslednji put posjetili su prikazane \'\'\'podebljanim slovima\'\'\'',
+'wlhideshowbots' => '$1 izmjena botova.',
+'wlhideshowown' => '$1 moje izmjene.',
+'wlnote' => 'Ispod je najskorijih $1 izmjena, načinjenih u posljednjih <b>$2</b> sati.',
+'wlsaved' => 'Ovo je sačuvana verzija vašeg spiska praćenih članaka.',
+'wlshowlast' => 'Prikaži poslednjih $1 sati $2 dana $3',
+'wrong_wfQuery_params' => 'Netačni parametri za wfQuery()<br />
+Funkcija: $1<br />
+Pretraga: $2',
+'wrongpassword' => 'Unijeli ste neispravnu lozinku.  Molimo Vas da pokušate ponovo.',
+'wrongpasswordempty' => 'Lozinka je bila prazna.  Molimo Vas da pokušate ponovo.',
+'youhavenewmessages' => 'Imate $1 ($2).',
+'yourdiff' => 'Razlike',
+'yourdomainname' => 'Vaš domen',
+'youremail' => 'E-pošta *',
+'yourname' => 'Korisničko ime',
+'yournick' => 'Nadimak (za potpise):',
+'yourpassword' => 'Lozinka',
+'yourpasswordagain' => 'Ponovite lozinku',
+'yourrealname' => 'Vaše pravo ime *',
+'yourtext' => 'Vaš tekst',
+);
+
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesCa.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesCa.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesCa.php	(revision 1280)
@@ -0,0 +1,2121 @@
+<?php
+$skinNames = array(
+	'standard' => "Estàndard",
+	'nostalgia' => "Nostàlgia",
+	'cologneblue' => "Colònia blava",
+);
+
+$bookstoreList = array(
+	'Catàleg Col·lectiu de les Universitats de Catalunya' => 'http://ccuc.cbuc.es/cgi-bin/vtls.web.gateway?searchtype=control+numcard&searcharg=$1',
+	'Totselsllibres.com' => 'http://www.totselsllibres.com/tel/publi/busquedaAvanzadaLibros.do?ISBN=$1',
+	'inherit' => true,
+);
+$namespaceNames = array(
+	NS_MEDIA          => 'Media',
+	NS_SPECIAL        => 'Especial',
+	NS_MAIN           => '',
+	NS_TALK           => 'Discussió',
+	NS_USER           => 'Usuari',
+	NS_USER_TALK      => 'Usuari_Discussió',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK   => '$1_Discussió',
+	NS_IMAGE          => 'Imatge',
+	NS_IMAGE_TALK     => 'Imatge_Discussió',
+	NS_MEDIAWIKI      => 'MediaWiki',
+	NS_MEDIAWIKI_TALK => 'MediaWiki_Discussió',
+	NS_TEMPLATE       => 'Plantilla',
+	NS_TEMPLATE_TALK  => 'Plantilla_Discussió',
+	NS_HELP           => 'Ajuda',
+	NS_HELP_TALK      => 'Ajuda_Discussió',
+	NS_CATEGORY       => 'Categoria',
+	NS_CATEGORY_TALK  => 'Categoria_Discussió'
+);
+
+$separatorTransformTable = array(',' => '.', '.' => ',' );
+
+$dateFormats = array(
+	'mdy time' => 'H:i',
+	'mdy date' => 'M j, Y',
+	'mdy both' => 'H:i, M j, Y',
+
+	'dmy time' => 'H:i',
+	'dmy date' => 'j M Y',
+	'dmy both' => 'H:i, j M Y',
+
+	'ymd time' => 'H:i',
+	'ymd date' => 'Y M j',
+	'ymd both' => 'H:i, Y M j',
+);
+
+$linkTrail = '/^([a-zàèéíòóúç·ïü\']+)(.*)$/sDu';
+
+$messages = array(
+# User preference toggles
+'tog-underline'               => 'Subratlla els enllaços:',
+'tog-highlightbroken'         => 'Formata els enllaços trencats  <a href="" class="new">d\'aquesta manera</a> (altrament, es faria d\'aquesta altra manera<a href="" class="internal">?</a>).',
+'tog-justify'                 => 'Alineació justificada dels paràgrafs',
+'tog-hideminor'               => 'Amaga les edicions menors en la pàgina de canvis recents',
+'tog-extendwatchlist'         => 'Desplega la llista de seguiment per a mostrar tots els canvis afectats',
+'tog-usenewrc'                => 'Presentació millorada dels canvis recents (cal JavaScript)',
+'tog-numberheadings'          => 'Enumera automàticament els encapçalaments',
+'tog-showtoolbar'             => "Mostra la barra d'eines d'edició (cal JavaScript)",
+'tog-editondblclick'          => "Inicia l'edició de la pàgina en pitjar-hi dues vegades (cal JavaScript)",
+'tog-editsection'             => "Activa l'edició per seccions mitjançant enllaç específic corresponent",
+'tog-editsectiononrightclick' => "Activa l'edició per seccions en pitjar sobre l'encapçalament amb el botó dret del ratolí (cal JavaScript)",
+'tog-showtoc'                 => "Mostrar l'índex de continguts a les pàgines amb més de 3 seccions",
+'tog-rememberpassword'        => 'Recorda la contrasenya entre sessions',
+'tog-editwidth'               => "Amplia al màxim la caixa d'edició",
+'tog-watchcreations'          => 'Vigila els articles que he creat',
+'tog-watchdefault'            => 'Vigila els articles que he editat',
+'tog-watchmoves'              => 'Afegeix les pàgines que reanomeni a la llista de seguiment',
+'tog-watchdeletion'           => 'Afegeix les pàgines que elimini a la llista de seguiment',
+'tog-minordefault'            => 'Marca totes les contribucions com a edicions menors per defecte',
+'tog-previewontop'            => "Mostra una vista prèvia de l'article davant del panell d'edicions",
+'tog-previewonfirst'          => "Mostra una visualització prèvia de l'article en la primera edició",
+'tog-nocache'                 => 'Desactiva la memòria cau per als articles',
+'tog-enotifwatchlistpages'    => "Notifica'm per correu electrònic els canvis en les pàgines que vigili",
+'tog-enotifusertalkpages'     => "Notifica per corr-el quan hi han modificacions a la pàgina de discussió del meu compte d'usuari",
+'tog-enotifminoredits'        => "Notifica per corr-el també en casos d'edicions menors",
+'tog-enotifrevealaddr'        => "Mostra l'adreça del meu corr-el en els missatges d'avís per corr-el",
+'tog-shownumberswatching'     => "Mostra el nombre d'usuaris que vigilen l'article",
+'tog-fancysig'                => 'Signatures planes (sense enllaç automàtic)',
+'tog-externaleditor'          => 'Recorre a un editor extern per omissió',
+'tog-externaldiff'            => 'Recorre a un altre visualitzador de canvis per defecte',
+'tog-showjumplinks'           => "Activa els enllaços de dreceres d'accessibilitat",
+'tog-uselivepreview'          => 'Activa la previsualització automàtica (cal JavaScript) (experimental)',
+'tog-forceeditsummary'        => "Avisa'm quan el camp de sumari és en blanc",
+'tog-watchlisthideown'        => 'Amaga el que he contribuït de la llista de seguiment',
+'tog-watchlisthidebots'       => 'Amaga de la llista de seguiment les edicions fetes per usuaris bots',
+'tog-watchlisthideminor'      => 'Amaga les edicions menors de la llista de seguiment',
+'tog-nolangconversion'        => 'Desactiva la conversió de variants',
+'tog-ccmeonemails'            => "Envia'm còpies dels missatges que enviï als altres usuaris.",
+'tog-diffonly'                => 'Amaga el contingut de la pàgina davall de la taula de diferències',
+
+'underline-always'  => 'Sempre',
+'underline-never'   => 'Mai',
+'underline-default' => 'Configuració per defecte del navegador',
+
+'skinpreview' => '(prova)',
+
+# Dates
+'sunday'        => 'diumenge',
+'monday'        => 'dilluns',
+'tuesday'       => 'dimarts',
+'wednesday'     => 'dimecres',
+'thursday'      => 'dijous',
+'friday'        => 'divendres',
+'saturday'      => 'dissabte',
+'sun'           => 'dg',
+'mon'           => 'dl',
+'tue'           => 'dt',
+'wed'           => 'dc',
+'thu'           => 'dj',
+'fri'           => 'dv',
+'sat'           => 'ds',
+'january'       => 'gener',
+'february'      => 'febrer',
+'march'         => 'març',
+'april'         => 'abril',
+'may_long'      => 'maig',
+'june'          => 'juny',
+'july'          => 'juliol',
+'august'        => 'agost',
+'september'     => 'setembre',
+'october'       => 'octubre',
+'november'      => 'novembre',
+'december'      => 'desembre',
+'january-gen'   => 'gener',
+'february-gen'  => 'febrer',
+'march-gen'     => 'març',
+'april-gen'     => 'abril',
+'may-gen'       => 'maig',
+'june-gen'      => 'juny',
+'july-gen'      => 'juliol',
+'august-gen'    => 'agost',
+'september-gen' => 'setembre',
+'october-gen'   => 'octubre',
+'november-gen'  => 'novembre',
+'december-gen'  => 'desembre',
+'jan'           => 'gen',
+'feb'           => 'febr',
+'mar'           => 'març',
+'apr'           => 'abr',
+'may'           => 'maig',
+'jun'           => 'juny',
+'jul'           => 'jul',
+'aug'           => 'ag',
+'sep'           => 'set',
+'oct'           => 'oct',
+'nov'           => 'nov',
+'dec'           => 'des',
+
+# Bits of text used by many pages
+'categories'            => 'Categories',
+'pagecategories'        => '{{PLURAL:$1|Categoria|Categories}}',
+'category_header'       => 'Articles a la categoria «$1»',
+'subcategories'         => 'Subcategories',
+'category-media-header' => 'Contingut multimèdia en la categoria "$1"',
+
+'mainpagetext'      => "<big>'''El programari del MediaWiki s'hi ha instal·lat correctament.'''</big>",
+'mainpagedocfooter' => "Consulteu la [http://meta.wikimedia.org/wiki/Help:Contents Guia d'Usuari] per a més informació sobre com utilitzar el programa wiki.
+
+== Per a començar ==
+
+* [http://www.mediawiki.org/wiki/Help:Configuration_settings Llista de característiques configurables]
+* [http://www.mediawiki.org/wiki/Help:FAQ PMF del MediaWiki]
+* [http://mail.wikimedia.org/mailman/listinfo/mediawiki-announce Llista de correu (''listserv'') per a anuncis del MediaWiki]",
+
+'about'          => 'Quant a',
+'article'        => 'Contingut de la pàgina',
+'newwindow'      => '(obre en una nova finestra)',
+'cancel'         => 'Anul·la',
+'qbfind'         => 'Cerca',
+'qbbrowse'       => 'Navega',
+'qbedit'         => 'Edita',
+'qbpageoptions'  => 'Opcions de pàgina',
+'qbpageinfo'     => 'Informació de pàgina',
+'qbmyoptions'    => 'Pàgines pròpies',
+'qbspecialpages' => 'Pàgines especials',
+'moredotdotdot'  => 'Més...',
+'mypage'         => 'Pàgina personal',
+'mytalk'         => 'Discussió',
+'anontalk'       => "Contacta amb l'anònim que fa servir aquesta IP",
+'navigation'     => 'Navegació',
+
+# Metadata in edit box
+'metadata_help' => 'Metadades:',
+
+'errorpagetitle'    => 'Error',
+'returnto'          => 'Torna cap a $1.',
+'tagline'           => 'De {{SITENAME}}',
+'help'              => 'Ajuda',
+'search'            => 'Cerca',
+'searchbutton'      => 'Cerca',
+'go'                => 'Vés-hi',
+'searcharticle'     => 'Vés-hi',
+'history'           => 'Historial de canvis',
+'history_short'     => 'Historial',
+'updatedmarker'     => 'actualitzat des de la darrera visita',
+'info_short'        => 'Informació',
+'printableversion'  => 'Versió per a impressora',
+'permalink'         => 'Enllaç permanent',
+'print'             => "Envia aquesta pàgina a la cua d'impressió",
+'edit'              => 'Edita',
+'editthispage'      => 'Edita la pàgina',
+'delete'            => 'Elimina',
+'deletethispage'    => 'Elimina la pàgina',
+'undelete_short'    => 'Recupera {{PLURAL:$1|la pàgina eliminada|$1 modificacions de la pàgina eliminada}}',
+'protect'           => 'Protecció',
+'protectthispage'   => 'Protecció de la pàgina',
+'unprotect'         => 'Desprotecció',
+'unprotectthispage' => 'Desprotecció de la pàgina',
+'newpage'           => 'Pàgina nova',
+'talkpage'          => 'Discussió de la pàgina',
+'specialpage'       => 'Pàgina especial',
+'personaltools'     => "Eines de l'usuari",
+'postcomment'       => 'Envia un comentari',
+'articlepage'       => 'Mostra la pàgina',
+'talk'              => 'Discussió',
+'views'             => 'Vistes',
+'toolbox'           => 'Eines',
+'userpage'          => "Visualitza la pàgina d'usuari",
+'projectpage'       => 'Visualitza la pàgina del projecte',
+'imagepage'         => 'Visualitza la pàgina de la imatge',
+'mediawikipage'     => 'Visualitza la pàgina de missatges',
+'templatepage'      => 'Visualitza la pàgina de plantilla',
+'viewhelppage'      => "Visualitza la pàgina d'ajuda",
+'categorypage'      => 'Visualitza la pàgina de la categoria',
+'viewtalkpage'      => 'Visualitza la pàgina de discussió',
+'otherlanguages'    => 'En altres llengües',
+'redirectedfrom'    => "(S'ha redirigit des de $1)",
+'redirectpagesub'   => 'Pàgina de redireccionament',
+'lastmodifiedat'    => 'Darrera modificació de la pàgina: $2, $1.', # $1 date, $2 time
+'viewcount'         => 'Aquesta pàgina ha estat visitada {{plural:$1|una vegada|$1 vegades}}.',
+'protectedpage'     => 'Pàgina protegida',
+'jumpto'            => 'Dreceres ràpides:',
+'jumptonavigation'  => 'navegació',
+'jumptosearch'      => 'cerca',
+
+# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
+'aboutsite'         => 'Quant al projecte de {{SITENAME}}',
+'aboutpage'         => 'Project:Quant a',
+'bugreports'        => "Informes d'errors del programari",
+'bugreportspage'    => "Project:Informes d'errors",
+'copyright'         => "El contingut és disponible sota els termes d'una llicència $1",
+'copyrightpagename' => '{{SITENAME}}, tots els drets reservats',
+'copyrightpage'     => 'Project:Copyrights',
+'currentevents'     => 'Actualitat',
+'currentevents-url' => 'Project:Actualitat',
+'disclaimers'       => 'Avís general',
+'disclaimerpage'    => 'Project:Avís general',
+'edithelp'          => 'Ajuda per a editar pàgines',
+'edithelppage'      => "Help:Com s'edita una pàgina",
+'faq'               => 'PMF',
+'faqpage'           => 'Project:PMF',
+'helppage'          => 'Help:Índex',
+'mainpage'          => 'Pàgina principal',
+'policy-url'        => 'Project:Polítiques',
+'portal'            => 'Portal comunitari',
+'portal-url'        => 'Project:Portal',
+'privacy'           => 'Política de privadesa',
+'privacypage'       => 'Project:Política de privadesa',
+'sitesupport'       => 'Donacions',
+'sitesupport-url'   => 'Project:Donatius',
+
+'badaccess'        => 'Error de permisos',
+'badaccess-group0' => "No teniu permisos per a executar l'acció que heu sol·licitat.",
+'badaccess-group1' => "L'acció que heu sol·licitat es limita als usuaris del grup $1.",
+'badaccess-group2' => "L'acció que heu sol·licitat es limita a un dels usuaris dels grups $1.",
+'badaccess-groups' => "L'acció que heu sol·licitat es limita als usuaris d'un dels grups $1.",
+
+'versionrequired'     => 'Cal la versió $1 del MediaWiki',
+'versionrequiredtext' => 'Cal la versió $1 del MediaWiki per a utilitzar aquesta pàgina. Vegeu [[Special:Version]]',
+
+'ok'                  => "D'acord",
+'pagetitle'           => '$1 - {{SITENAME}}',
+'retrievedfrom'       => 'Obtingut de "$1"',
+'youhavenewmessages'  => 'Teniu $1 ($2).',
+'newmessageslink'     => 'nous missatges',
+'newmessagesdifflink' => 'últims canvis',
+'editsection'         => 'edita',
+'editold'             => 'edita',
+'editsectionhint'     => 'Edita la secció: $1',
+'toc'                 => 'Contingut',
+'showtoc'             => 'desplega',
+'hidetoc'             => 'amaga',
+'thisisdeleted'       => 'Voleu mostrar o restaurar $1?',
+'viewdeleted'         => 'Voleu mostrar $1?',
+'restorelink'         => '{{PLURAL:$1|una versió esborrada|$1 versions esborrades}}',
+'feedlinks'           => 'Sindicament:',
+'feed-invalid'        => 'La subscripció no és vàlida pel tipus de sindicament.',
+
+# Short words for each namespace, by default used in the 'article' tab in monobook
+'nstab-main'      => 'Article',
+'nstab-user'      => "Pàgina d'usuari",
+'nstab-media'     => 'Pàgina de mitjans',
+'nstab-special'   => 'Pàgina especial',
+'nstab-project'   => 'Pàgina del projecte',
+'nstab-image'     => 'Fitxer',
+'nstab-mediawiki' => 'Missatge',
+'nstab-template'  => 'Plantilla',
+'nstab-help'      => 'Ajuda',
+'nstab-category'  => 'Categoria',
+
+# Main script and global functions
+'nosuchaction'      => 'No es reconeix aquesta operació',
+'nosuchactiontext'  => "El programari wiki que fa servir {{SITENAME}} no reconeix l'operació especificada per l'adreça URL",
+'nosuchspecialpage' => 'No es troba la pàgina especial que busqueu',
+'nospecialpagetext' => 'La pàgina especial que demaneu no és vàlida. Vegeu la llista de pàgines especials en [[Special:Specialpages]].',
+
+# General errors
+'error'                => 'Error',
+'databaseerror'        => "S'ha produït un error en la base de dades",
+'dberrortext'          => "S'ha produït un error de sintaxi en una consulta a la base de dades.
+Açò podria indicar un error en el programari.
+La darrera consulta que s'ha intentat fer ha estat:
+<blockquote><tt>$1</tt></blockquote>
+des de la funció «<tt>$2</tt>».
+L'error de retorn de MySQL ha estat «<tt>$3: $4</tt>».",
+'dberrortextcl'        => "S'ha produït un error de sintaxi en una consulta a la base de dades.
+La darrera consulta que s'ha intentat fer ha estat:
+<blockquote><tt>$1</tt></blockquote>
+des de la funció «<tt>$2</tt>».
+L'error de retorn de MySQL ha estat «<tt>$3: $4</tt>».",
+'noconnect'            => "Al programari wiki hi ha algun problema tècnic, i no s'ha pogut contactar amb el servidor de la base de dades. <br />
+$1",
+'nodb'                 => "No s'ha pogut seleccionar la base de dades $1",
+'cachederror'          => 'Tot seguit és una còpia provinent de la memòria cau de la pàgina que hi heu demanat i, per això, podria no estar actualitzada.',
+'laggedslavemode'      => 'Avís: La pàgina podria mancar de modificacions recents.',
+'readonly'             => 'La base de dades es troba blocada',
+'enterlockreason'      => 'Escrigueu un motiu pel bloqueig, així com una estimació de quan tindrà lloc el desbloqueig',
+'readonlytext'         => "La base de dades està temporalment bloquejada segurament per tasques de manteniment, després de les quals es tornarà a la normalitat.
+
+L'administrador que l'ha bloquejada ha donat aquesta explicació: $1",
+'missingarticle'       => 'La base de dades no ha trobat el text d\'una
+pàgina que hauria d\'haver trobat, anomenada "$1".
+Això acostuma a passar a quan se segueix un enllaç a una pàgina que ha estat eliminada.
+
+Si aquest no és el cas, probablement es tracta d\'un error en el programari.
+Informeu-ne si us plau a un administrador, fent-ne arribar la direcció URL.',
+'readonly_lag'         => "S'ha blocada la base de dades automàticament per a la sincronització dels servidors",
+'internalerror'        => 'Fallida interna',
+'filecopyerror'        => 'No s\'ha pogut copiar el fitxer "$1" com "$2".',
+'filerenameerror'      => 'No s\'ha pogut reanomenar el fitxer "$1" com "$2".',
+'filedeleteerror'      => 'No s\'ha pogut esborrar el fitxer "$1".',
+'filenotfound'         => 'No s\'ha pogut trobar el fitxer "$1".',
+'unexpected'           => 'S\'ha trobat un valor imprevist: "$1"="$2".',
+'formerror'            => "Error: no s'ha pogut enviar les dades del formulari",
+'badarticleerror'      => 'Aquesta operació no es pot dur a terme en aquesta pàgina',
+'cannotdelete'         => "No s'ha pogut esborrar la pàgina o el fitxer especificat, o potser ja ha estat esborrat per algú altre.",
+'badtitle'             => 'El títol no és correcte',
+'badtitletext'         => 'El títol de la pàgina que heu demanada no és correcte, és en blanc o és un enllaç inter-lingüístic trencat. Podria haver-hi algun caràcter no permés per al seu ús en els títols.',
+'perfdisabled'         => "S'ha desactivat temporalment aquesta funcionalitat perquè sobrecarrega la base de dades fins al punt d'inutilitzar el programari wiki.",
+'perfdisabledsub'      => 'Això és una còpia desada de $1:', # obsolete?
+'perfcached'           => 'Tot seguit es mostren les dades que es troben a la memòria cau, i podria no tenir els últims canvis del dia:',
+'perfcachedts'         => 'Tot seguit es mostra les dades que es troben a la memòria cau, la darrera actualització de la qual fou el $1.',
+'querypage-no-updates' => "S'ha inhabilitat l'actualització d'aquesta pàgina. Les dades que hi contenen podrien no estar al dia.",
+'wrong_wfQuery_params' => 'Paràmetres incorrectes per a wfQuery()<br />
+Funció: $1<br />
+Consulta: $2',
+'viewsource'           => 'Mostra la font',
+'viewsourcefor'        => 'per a $1',
+'protectedpagetext'    => 'Aquesta pàgina està protegida i no pot ser editada.',
+'viewsourcetext'       => "Podeu visualitzar i copiar la font d'aquesta pàgina:",
+'protectedinterface'   => "Aquesta pàgina conté cadenes de text per a la interfície del programari, i és protegida per a previndre'n abusos.",
+'editinginterface'     => "'''Avís:''' Esteu editant una pàgina que conté cadenes de text per a la interfície d'aquest programari. Tingueu en compte que els canvis que es fan a aquesta pàgina afecten a l'aparença de la interfície d'usuari per a tots els usuaris.",
+'sqlhidden'            => '(consulta SQL oculta)',
+'cascadeprotected'     => "S'ha protegit aquesta pàgina de modificacions en trobar-se inclosa entre les següents pàgines protegides l'opció en cascada:",
+
+# Login and logout pages
+'logouttitle'                => 'Fi de la sessió',
+'logouttext'                 => '<strong>Heu finalitzat la vostra sessió.</strong><br />
+Podeu continuar utilitzant {{SITENAME}} de forma anònima, o podeu iniciar una sessió una altra vegada amb el mateix o un altre usuari. Tingueu en compte que algunes pàgines poden continuar mostrant-se com si encara estiguéssiu en una sessió, fins que buideu la memòria cau del vostre navegador.',
+'welcomecreation'            => "== Us donem la benvinguda, $1! ==
+
+S'ha creat el vostre compte. No oblideu de canviar les vostres preferències.",
+'loginpagetitle'             => 'Inici de sessió',
+'yourname'                   => "Nom d'usuari",
+'yourpassword'               => 'Contrasenya',
+'yourpasswordagain'          => 'Escriviu una altra vegada la contrasenya',
+'remembermypassword'         => 'Recorda la contrasenya entre sessions.',
+'yourdomainname'             => 'El vostre domini',
+'externaldberror'            => "Hi ha hagut una fallida en el servidor d'autenticació externa de la base de dades i no teniu permís per a actualitzar el vostre compte d'accès extern.",
+'loginproblem'               => "<strong>S'ha produït un problema en iniciar la sessió.</strong><br />Proveu-ho de nou!",
+'alreadyloggedin'            => '<strong>Us donem la benvinguda $1, ja heu iniciat la vostra sessió!</strong><br />',
+'login'                      => 'Inici de sessió',
+'loginprompt'                => 'Heu de tenir les galetes activades per a poder-vos registar.',
+'userlogin'                  => 'Inicia una sessió / crea un compte',
+'logout'                     => 'Finalitza la sessió',
+'userlogout'                 => 'Finalitza la sessió',
+'notloggedin'                => 'No us heu identificat',
+'nologin'                    => 'No teniu un compte? $1.',
+'nologinlink'                => 'Crea un compte',
+'createaccount'              => 'Crea un nou compte',
+'gotaccount'                 => 'Ja teniu un compte? $1.',
+'gotaccountlink'             => 'Inicia una sessió',
+'createaccountmail'          => 'per correu electrònic',
+'badretype'                  => 'Les contrasenyes que heu introduït no coincideixen.',
+'userexists'                 => 'El nom que heu entrat ja és en ús. Escolliu-ne un de diferent.',
+'youremail'                  => 'Adreça electrònica *',
+'username'                   => "Nom d'usuari:",
+'uid'                        => "Identificador d'usuari:",
+'yourrealname'               => 'Nom real *',
+'yourlanguage'               => 'Llengua:',
+'yourvariant'                => 'Variant lingüística',
+'yournick'                   => 'Àlies (nom que es mostrarà):',
+'badsig'                     => 'La signatura que heu inserit no és vàlida; verifiqueu les etiquetes HTML que heu emprat.',
+'email'                      => 'Adreça electrònica',
+'prefs-help-email-enotif'    => "Si n'heu habilitat les opcions, l'adreça també s'utilitzarà per a enviar-vos notificacions per correu electrònic.",
+'prefs-help-realname'        => "* Nom real (opcional): si escolliu donar aquesta informació serà utilitzada per a donar-vos l'atribució de la vostra feina.",
+'loginerror'                 => "Error d'inici de sessió",
+'prefs-help-email'           => "* Adreça electrònica (opcional): Permet als altres usuaris enviar-vos missatges de correu electrònic a través de la vostra pàgina d'usuari o de discussió, sense que així calgui revelar la vostra identitat.",
+'nocookiesnew'               => "S'ha creat el compte d'usuari, però no esteu enregistrat. El projecte {{SITENAME}} usa galetes per enregistrar els usuaris. Si us plau activeu-les, per a poder enregistrar-vos amb el vostre nom d'usuari i la clau.",
+'nocookieslogin'             => 'El programari {{SITENAME}} utilitza galetes per enregistrar usuaris. Teniu les galetes desactivades. Activeu-les i torneu a provar.',
+'noname'                     => "No heu especificat un nom vàlid d'usuari.",
+'loginsuccesstitle'          => "S'ha iniciat la sessió amb èxit",
+'loginsuccess'               => 'Heu iniciat la sessió a {{SITENAME}} com a "$1".',
+'nosuchuser'                 => 'No hi ha cap usuari anomenat "$1".
+Reviseu-ne l\'ortografia, o creeu un nou compte d\'usuari.',
+'nosuchusershort'            => 'No hi ha cap usuari anomenat "$1". Comproveu que ho hàgiu escrit correctament.',
+'nouserspecified'            => "Heu d'especificar un nom d'usuari.",
+'wrongpassword'              => 'La contrasenya que heu introduït és incorrecta. Torneu-ho a provar.',
+'wrongpasswordempty'         => "La contrasenya que s'ha introduït era en blanc. Torneu-ho a provar.",
+'mailmypassword'             => "Envia'm una nova contrasenya per correu electrònic",
+'passwordremindertitle'      => 'Recordatori de la contrasenya del projecte {{SITENAME}}',
+'passwordremindertext'       => "Algú (vós mateix segurament, des de l'adreça l'IP $1) ha sol·licitat que us enviéssim una nova contrasenya per a iniciar la sessió al projecte {{SITENAME}} ($4).
+La contrasenya per a l'usuari «$2» és ara «$3».
+Ara hauríeu d'iniciar la sessió i canviar la vostra contrasenya.
+
+Si algú altre hagués fet aquesta sol·licitud o si ja haguéssiu recordat la vostra contrasenya i
+no volguéssiu canviar-la, ignoreu aquest missatge i continueu utilitzant
+la vostra antiga contrasenya.",
+'noemail'                    => 'No hi ha cap adreça electrònica registrada de l\'usuari "$1".',
+'passwordsent'               => 'S\'ha enviat una nova contrasenya a l\'adreça electrònica registrada per "$1".
+Inicieu una sessió després que la rebeu.',
+'blocked-mailpassword'       => 'La vostra adreça IP ha estat blocada. Se us ha desactivat la funció de recuperació de contrasenya per a prevenir abusos.',
+'eauthentsent'               => "S'ha enviat un correu electrònic a la direcció especificada. Abans no s'envïi cap altre correu electrònic a aquesta adreça, cal verificar que és realment vostra. Per tant, cal que seguiu les instruccions presents en el correu electrònic que se us ha enviat.",
+'throttled-mailpassword'     => "En les últimes $1 hores ja se us ha enviat una contrasenya. Per a prevenir abusos, només s'envia un recordatori de contrasenya cada $1 hores.",
+'mailerror'                  => "S'ha produït un error en enviar el missatge: $1",
+'acct_creation_throttle_hit' => 'Ho sentim, ja teniu $1 comptes creats i no és permès de tenir-ne més.',
+'emailauthenticated'         => "S'ha autenticat la vostra adreça electrònica a $1.",
+'emailnotauthenticated'      => 'La vostra adreça de correu electrònic <strong>encara no està autentificada</strong>. No rebrà correu electrònic provinent de cap les següents funcionalitats.',
+'noemailprefs'               => 'Especifiqueu una adreça electrònica per a activar aquestes característiques.',
+'emailconfirmlink'           => 'Confirmeu la vostra adreça electrònica',
+'invalidemailaddress'        => "No es pot acceptar l'adreça electrònica perquè sembla que té un format no vàlid.
+Introduïu una adreça amb un format adequat o bé buideu el camp.",
+'accountcreated'             => "S'ha creat el compte",
+'accountcreatedtext'         => "S'ha creat el compte d'usuari de $1.",
+
+# Password reset dialog
+'resetpass'               => 'Reinicia la contrasenya del compte',
+'resetpass_announce'      => 'Heu iniciat la sessió amb un codi temporal enviat per correu electrònic. Per a finalitzar-la, heu de definir una nova contrasenya ací:',
+'resetpass_text'          => '<!-- Afegiu-hi un text -->',
+'resetpass_header'        => 'Reinicia la contrasenya',
+'resetpass_submit'        => 'Definiu una contrasenya i inicieu una sessió',
+'resetpass_success'       => "S'ha canviat la vostra contrasenya amb èxit! Ara ja podeu iniciar-hi una sessió...",
+'resetpass_bad_temporary' => 'La contrasenya temporal no és vàlida. Potser ja havíeu canviat la vostra contrasenya o heu sol·licitat una nova contrasenya temporal.',
+'resetpass_forbidden'     => "No poden canviar-se les contrasenyes d'aquest wiki",
+'resetpass_missing'       => 'No hi ha cap dada de formulari.',
+
+# Edit page toolbar
+'bold_sample'     => 'Text en negreta',
+'bold_tip'        => 'Text en negreta',
+'italic_sample'   => 'Text en cursiva',
+'italic_tip'      => 'Text en cursiva',
+'link_sample'     => "Títol de l'enllaç",
+'link_tip'        => 'Enllaç intern',
+'extlink_sample'  => "http://www.exemple.cat títol de l'enllaç",
+'extlink_tip'     => 'Enllaç extern (recordeu el prefix http://)',
+'headline_sample' => "Text per a l'encapçalament",
+'headline_tip'    => 'Encapçalat de secció de 2n nivell',
+'math_sample'     => 'Inseriu una fórmula ací',
+'math_tip'        => 'Fórmula matemàtica (LaTeX)',
+'nowiki_sample'   => 'Inseriu ací text no formatat',
+'nowiki_tip'      => 'Ignora la formatació wiki',
+'image_sample'    => 'Exemple.jpg',
+'image_tip'       => 'Imatge annexada',
+'media_sample'    => 'Exemple.ogg',
+'media_tip'       => 'Enllaç cap al fitxer multimèdia',
+'sig_tip'         => 'La vostra signatura amb marca horària',
+'hr_tip'          => 'Línia horitzontal (useu-lo moderadament)',
+
+# Edit pages
+'summary'                   => 'Resum',
+'subject'                   => 'Tema/capçalera',
+'minoredit'                 => 'Aquesta és una edició menor.',
+'watchthis'                 => 'Vigila aquest article.',
+'savearticle'               => 'Desa la pàgina',
+'preview'                   => 'Vista prèvia',
+'showpreview'               => 'Mostra una vista prèvia',
+'showlivepreview'           => 'Vista ràpida',
+'showdiff'                  => 'Mostra els canvis',
+'anoneditwarning'           => "'''Atenció:''' No esteu registrats amb un nom d'usuari. Es guardarà la vostra adreça IP en l'historial de la pàgina.",
+'missingsummary'            => "'''Recordatori''': Heu deixat en blanc el sumari d'edició. Si torneu a clicar el botó de desar, l'edició es guardarà sense sumari.",
+'missingcommenttext'        => 'Introduïu un comentari a continuació.',
+'missingcommentheader'      => "'''Recordatori:''' No hi heu proporcionat l'afer o l'encapçalament del vostre comentari. Si hi pitgeu el botó de desar una altra vegada, la vostra contribució serà desada sense açò.",
+'summary-preview'           => 'Previsualització del resum',
+'subject-preview'           => 'Previsualització de tema/capçalera',
+'blockedtitle'              => "L'usuari està bloquejat",
+'blockedtext'               => "<big>'''S'ha procedit al bloqueig del vostre compte d'usuari o la vostra adreça IP.'''</big>
+
+El bloqueig l'ha dut a terme $1, amb el següent motiu: ''$2''
+
+Podeu contactar $1 o un dels [[{{MediaWiki:grouppage-sysop}}|administradors]] per a discutir el blocatge.
+
+Tingueu un compte que no podeu fer servir el formulari d'enviament de missatges de correl a cap usuari, fins que tingueu una adreça de correu vàlida registrada a les vostres [[Special:Preferences|preferències d'usuari]].
+
+La vostra adreça IP és $3, i el núm. ID del blocatge és #$5. Si us plau, incloeu aquesta adreça en totes les consultes que feu.",
+'blockedoriginalsource'     => "La font de '''$1''' es mostra a sota:",
+'blockededitsource'         => "El text de les vostres edicions a '''$1''' es mostra a continuació:",
+'whitelistedittitle'        => 'Cal iniciar una sessió per a poder editar',
+'whitelistedittext'         => 'Heu de $1 per editar pàgines.',
+'whitelistreadtitle'        => "Heu d'iniciar una sessió per a llegir-ho",
+'whitelistreadtext'         => "Heu d'[[Special:Userlogin|indentificar-vos]] per llegir les pàgines.",
+'whitelistacctitle'         => 'No teniu permisos per a crear un compte',
+'whitelistacctext'          => "Per estar autoritzat a crear comptes en aquesta Viqui heu d'[[Special:Userlogin|identificar-vos]] i tenir els permisos apropiats.",
+'confirmedittitle'          => "Cal una confirmació de l'adreça electrònica per a poder editar",
+'confirmedittext'           => "Heu de confirmar la vostra adreça electrònica abans de poder editar pàgines. Definiu i valideu la vostra adreça electrònica a través de les vostres [[Special:Preferences|preferències d'usuari]].",
+'loginreqtitle'             => 'Cal que inicieu una sessió',
+'loginreqlink'              => 'inicia una sessió',
+'loginreqpagetext'          => 'Heu de ser $1 per a visualitzar altres pàgines.',
+'accmailtitle'              => "S'ha enviat una contrasenya.",
+'accmailtext'               => "S'ha enviat a $2 la contrasenya per a «$1».",
+'newarticle'                => '(Nou)',
+'newarticletext'            => "Heu seguit un enllaç a una pàgina que encara no existeix.
+Per a crear-la començeu a escriure en l'espai d'abaix
+(vegeu l'[[{{MediaWiki:helppage}}|ajuda]] per a més informació).
+Si sou ací per error simplement cliqueu el botó \"enrere\" del vostre navegador.",
+'anontalkpagetext'          => "----''Aquesta és la pàgina de discussió d'un usuari anònim que encara no ha creat un compte o que no usa el seu nom registrat. Per tant hem de usar la seva adreça IP numèrica per identificar-lo. Una adreça IP pot ser compartida per molts usuaris. Si sou un usuari anònim i trobau que us han adreçat comentaris inoportuns, si us plau, [[Special:Userlogin|creeu-vos un compte]] per evitar futures confusions amb altres usuaris anònims.''",
+'noarticletext'             => 'En aquest moment no hi ha text en aquesta pàgina. Podeu [[Special:Search/{{PAGENAME}}|cercar-ne el títol]] en altres pàgines o [{{fullurl:{{FULLPAGENAME}}|action=edit}} començar a escriure-hi].',
+'clearyourcache'            => "'''Nota:''' Després de desar, heu de posar al dia la memòria cau del vostre navegador per veure els canvis. '''Mozilla / Firefox / Safari:''' Premeu ''Shift'' mentre cliqueu ''Actualitza'' (Reload), o premeu ''Ctrl+Shift+R'' (''Cmd+Shift+R'' en un Mac Apple); '''Internet Explorer:''' premeu ''Ctrl'' mentre cliqueu ''Actualitza'' (Refresh), o premeu ''Ctrl+F5''; '''Konqueror:''': simplement cliqueu el botó ''Recarregar'' (Reload), o premeu ''F5''; '''Opera''' haureu d'esborrar completament la vostra memòria cau (caché) a ''Tools→Preferences''.",
+'usercssjsyoucanpreview'    => '<strong>Consell:</strong> Utilitzeu el botó «Mostra previsualització» per probar el vostre nou CSS/JS abans de desar-lo.',
+'usercsspreview'            => "'''Recordeu que esteu previsualitzant el vostre CSS d'usuari i que encara no s'ha desat!'''",
+'userjspreview'             => "'''Recordeu que només estau provant/previsualitzant el vostre JavaScript, encara no ho heu desat!'''",
+'userinvalidcssjstitle'     => "'''Atenció:''' No existeix l'aparença «$1». Recordeu que les subpàgines personalitzades amb extensions .css i .js utilitzen el títol en minúscules, per exemple, Usuari:NOM/monobook.css no és el mateix que Usuari:NOM/Monobook.css.",
+'updated'                   => '(Actualitzat)',
+'note'                      => '<strong>Nota:</strong>',
+'previewnote'               => "<strong>Adoneu-vos que això només és una vista prèvia, els canvis dels quals encara no s'han alçat!</strong>",
+'previewconflict'           => "Aquesta previsualització reflexa el text a l'ària
+d'edició superior tal i com apareixerà si escolliu gravar.",
+'session_fail_preview'      => "<strong>Ho sentim, no s'ha pogut processar, però, les vostres modificacions, a causa d'una pèrdua de la sessió de dades.
+Si us plau, intenteu-lo una altra vegada. Si continua havent-hi problemes, eixiu la sessió del vostre compte i torneu per autenticar-vos-hi.</strong>",
+'session_fail_preview_html' => "<strong>Ho sentim, no s'ha pogut processar, però, les vostres modificacions, a causa d'una pèrdua de la sessió de dades.</strong>
+
+''Com que aquest web basat en wiki té habilitat l'ús de codi planer d'HTML, s'ha amagat la previsualització com a prevenció contra atacs mitjançant codis JavaScript.''
+
+<strong>Si es tracta d'una contribució legítima, si us plau, intenteu-ho una altra vegada. Si continua havent-hi problemes, eixiu la sessió del vostre compte i torneu per autenticar-vos-hi.</strong>",
+'importing'                 => "S'està important $1",
+'editing'                   => "S'està editant $1",
+'editinguser'               => "S'està editant $1",
+'editingsection'            => "S'està editant $1 (secció)",
+'editingcomment'            => "S'està editant $1 (comentari)",
+'editconflict'              => "Conflicte d'edició: $1",
+'explainconflict'           => "Algú més ha canviat aquesta pàgina des que l'heu editada.
+L'ària de text superior conté el text de la pàgina com existeix actualment. Els vostres canvis es mostren a l'ària de text inferior.
+Haureu d'incorporar els vostres canvis en el text existent.
+<b>Sólo</b> el text a l'ària de text superior serà gravat quan premeu
+ \"Desa pàgina\".<br />",
+'yourtext'                  => 'El vostre text',
+'storedversion'             => 'Versió emmagatzemada',
+'nonunicodebrowser'         => "<strong>ALERTA: El vostre navegador no és compatible amb unicode, si us plau canvieu-lo abans d'editar articles.</strong>",
+'editingold'                => "<strong>ATENCIÓ:Esteu editant una versió antiga d'aquesta pàgina.
+Si la graveu, els canvis fets des d'eixa revisió es perdran.</strong>",
+'yourdiff'                  => 'Diferències',
+'copyrightwarning'          => "Si us plau, tingueu en compte que totes les contribucions per al projecte {{SITENAME}} es consideren com a publicades sota els termes de la llicència $2 (vegeu-ne més detalls a $1). Si no desitgeu la modificació i distribució lliure dels vostres escrits sense el vostre consentiment, no els poseu ací.<br />
+A més a més, en enviar el vostre text, doneu fe què tot és sota la vostra autoria, o copiats des de fonts en el domini públic o semblants. Heu de saber que aquest <strong>no</strong> és el cas de la majoria de pàgines que hi ha a Internet.
+<strong>No useu textos amb drets d'autor sense permís!</strong>",
+'copyrightwarning2'         => "Si us plau, tingueu en compte que totes les contribucions per al projecte {{SITENAME}} poden ser corregits o esborrats sense pietat per altres usuaris. Si no desitgeu la modificació i distribució lliure dels vostres escrits sense el vostre consentiment, no els poseu ací.<br />
+A més a més, en enviar el vostre text, doneu fe què tot és sota la vostra autoria, o copiats des de fonts en el domini públic o semblants (vegeu $1). Heu de saber que aquest <strong>no</strong> és el cas de la majoria de pàgines que hi ha a Internet.<strong>No useu textos amb drets d'autor sense permís!</strong>",
+'longpagewarning'           => "<strong>ATENCIÓ: Aquesta pàgina fa $1 kB; hi ha navegadors que poden presentar problemes editant pàgines que s'acostin o sobrepassin els 32 kB. Intenteu, si és possible, dividir la pàgina en seccions més petites.</strong>",
+'longpageerror'             => '<strong>ERROR: El text que heu introduït és de $1 kB i  sobrepassa el màxim permès de $2 kB. Per tant, no es desarà.</strong>',
+'readonlywarning'           => '<strong>ADVERTÈNCIA: La base de dades està tancada per manteniment
+i no podeu desar les vostres contribucions en aquests moments. podeu retallar i enganxar el codi
+en un fitxer de text i desar-lo més tard.</strong>',
+'protectedpagewarning'      => '<strong>ATENCIÓ: Aquesta pàgina està bloquejada i només pot ser editada per usuaris [[{{MediaWiki:grouppage-sysop}}|administradors]].</strong>',
+'semiprotectedpagewarning'  => "'''Atenció:''' Aquesta pàgina està bloquejada i només pot ser editada per usuaris registrats.",
+'cascadeprotectedwarning'   => "'''Avís:''' S'ha blocat aquesta pàgina, per tant només els usuaris amb permisos d'administrador poden editar-lo, ja que es troba en les següents pàgines protegides en cascada:",
+'templatesused'             => 'Aquesta pàgina fa servir les següents plantilles:',
+'templatesusedpreview'      => 'Plantilles usades en aquesta previsualització:',
+'templatesusedsection'      => 'Plantilles usades en aquesta secció:',
+'template-protected'        => '(protegida)',
+'template-semiprotected'    => '(semiprotegida)',
+'edittools'                 => "<!-- Es mostrarà als formularis d'edició i de càrrega el text que hi haja després d'aquesta línia. -->",
+'nocreatetitle'             => "S'ha limitat la creació de pàgines",
+'nocreatetext'              => "Està restringida la possibilitat de crear noves pàgines.
+Podeu editar les planes ja existents o bé [[Special:Userlogin|entrar en un compte d'usuari]].",
+
+# "Undo" feature
+'undo-success' => "Pot desfer-se la modificació. Si us plau, reviseu la comparació de sota per a assegurar-vos que és el que voleu fer; llavors deseu els canvis per a finalitzar la desfeta de l'edició.",
+'undo-failure' => 'No pot desfer-se la modificació perquè hi ha edicions entre mig que hi entren en conflicte.',
+'undo-summary' => 'Es desfà la revisió $1 de [[Special:Contributions/$2|$2]] ([[User talk:$2|Discussió]])',
+
+# Account creation failure
+'cantcreateaccounttitle' => 'No es pot crear el compte',
+'cantcreateaccounttext'  => "La creació de comptes d'usuari des d'aquesta adreça IP (<b>$1</b>) s'ha blocat. 
+Probablement es deu a atacs insistents de vandalisme per part d'usuaris del vostre mateix proveïdor d'internet.",
+
+# History pages
+'revhistory'                  => 'Historial de revisions',
+'viewpagelogs'                => "Visualitza els registres d'aquesta pàgina",
+'nohistory'                   => 'No hi ha un historial de revisions per a aquesta pàgina.',
+'revnotfound'                 => 'Revisió no trobada',
+'revnotfoundtext'             => "No s'ha pogut trobar la revisió antiga de la pàgina que demanàveu.
+Reviseu l'URL que heu emprat per a accedir-hi.",
+'loadhist'                    => 'Recuperant la història de la pàgina',
+'currentrev'                  => 'Revisió actual',
+'revisionasof'                => 'Revisió de $1',
+'revision-info'               => 'Revisió de $1; $2',
+'previousrevision'            => '←Versió anterior',
+'nextrevision'                => 'Versió posterior→',
+'currentrevisionlink'         => 'Versió actual',
+'cur'                         => 'act',
+'next'                        => 'seg',
+'last'                        => 'prev',
+'orig'                        => 'orig',
+'page_first'                  => 'primera',
+'page_last'                   => 'última',
+'histlegend'                  => 'Simbologia: (act) = diferència amb la versió actual,
+(prev) = diferència amb la versió prèvia, m = edició menor',
+'deletedrev'                  => '[suprimit]',
+'histfirst'                   => 'El primer',
+'histlast'                    => "L'últim",
+'rev-deleted-comment'         => "(s'ha suprimit el comentari)",
+'rev-deleted-user'            => "(s'ha suprimit el nom d'usuari)",
+'rev-deleted-text-permission' => '<div class="mw-warning plainlinks">
+Aquesta versió de la pàgina ha estat eliminada dels arxius públics. Vegeu més detalls al [{{fullurl:Special:Log/delete|page={{PAGENAMEE}}}} registre d\'esborrats].
+</div>',
+'rev-deleted-text-view'       => '<div class="mw-warning plainlinks">
+Aquesta versió de la pàgina ha estat eliminada dels arxius públics. Com a administrador de la Viquipèdia podeu veure-la; vegeu més detalls al [{{fullurl:Special:Log/delete|page={{PAGENAMEE}}}} registre d\'esborrats].
+</div>',
+'rev-delundel'                => 'mostra/amaga',
+
+'history-feed-title'          => 'Historial de revisió',
+'history-feed-description'    => 'Historial de revisió per a aquesta pàgina del wiki',
+'history-feed-item-nocomment' => '$1 a $2', # user at time
+'history-feed-empty'          => 'La pàgina demanada no existeix.
+Potser ha estat esborrada o reanomenada.
+Intenteu [[Special:Search|cercar al mateix wiki]] per a noves pàgines rellevants.',
+
+# Revision deletion
+'revisiondelete'            => 'Esborrar/restaurar revisions',
+'revdelete-nooldid-title'   => 'No hi ha pàgina per a la reversió',
+'revdelete-nooldid-text'    => 'No heu especificat la versió des de la qual voleu aplicar aquesta funció.',
+'revdelete-selected'        => 'Revisió seleccionada de [[:$1]]',
+'revdelete-text'            => "Les versions esborrades es mostraran encara dins de l'historial de l'article, si bé el seu contingut serà inaccessible al públic.
+
+Altres administradors d'aquest web basat en wiki encara podrien accedir al contingut amagat i restituir-lo de nou mitjançant aquesta mateixa interfície, si no hi ha cap altra restricció addicional pels operadors del lloc web.",
+'revdelete-legend'          => 'Defineix restriccions en la revisió:',
+'revdelete-hide-text'       => 'Amaga el text de revisió',
+'revdelete-hide-comment'    => "Amaga el comentari de l'edició",
+'revdelete-hide-user'       => "Amaga el nom d'usuari o la IP de l'editor",
+'revdelete-hide-restricted' => 'Aplica aquestes restriccions als administradors com també als altres',
+'revdelete-log'             => 'Comentari del registre:',
+'revdelete-submit'          => 'Aplica a la revisió seleccionada',
+'revdelete-logentry'        => "s'ha canviat la visibilitat de la revisió de [[$1]]",
+
+# Diffs
+'difference'                => '(Diferència entre revisions)',
+'loadingrev'                => 'recuperant revisió per a diff',
+'lineno'                    => 'Línia $1:',
+'editcurrent'               => "Edita la versió actual d'aquesta pàgina",
+'selectnewerversionfordiff' => 'Selecciona una nova versió per a comparar',
+'selectolderversionfordiff' => 'Selecciona una versió més antiga per a comparar',
+'compareselectedversions'   => 'Compara les versions seleccionades',
+'editundo'                  => 'desfés',
+'diff-multi'                => '(Hi ha {{plural:$1|una revisió intermèdia|$1 revisions intermèdies}})',
+
+# Search results
+'searchresults'         => 'Resultats de la cerca',
+'searchresulttext'      => 'Per a més informació de les cerques del projecte {{SITENAME}}, aneu a [[{{MediaWiki:helppage}}|{{int:help}}]].',
+'searchsubtitle'        => "Heu cercat '''[[:$1]]'''",
+'searchsubtitleinvalid' => 'Per consulta "$1"',
+'badquery'              => 'Consulta de recerca formulada de manera incorrecta',
+'badquerytext'          => "No s'ha pogut processar la recerca.
+El motiu és probablement per què heu intentat cercar una paraula de menys de tres lletres, la qual cosa encara no és possible.
+També pot ser que hàgiu comès un error en lletrejar el terme.
+Torneu-ho a provar amb una altra recerca.",
+'matchtotals'           => 'La consulta "$1" ha coincidit amb $2  títols d\'articles
+i el text de $3 articles.',
+'noexactmatch'          => "'''No hi ha cap pàgina anomenada «$1».''' Si voleu, podeu ajudar [[:$1|creant-la]].",
+'titlematches'          => "Coincidències de títol d'article",
+'notitlematches'        => "No hi ha coincidències de títol d'article",
+'textmatches'           => "Coincidències de text d'article",
+'notextmatches'         => "No hi ha coincidències de text d'article",
+'prevn'                 => '$1 anteriors',
+'nextn'                 => '$1 següents',
+'viewprevnext'          => 'Vés a ($1) ($2) ($3).',
+'showingresults'        => "S'està mostrant a sota <b>$1</b> resultats començant per #<b>$2</b>.",
+'showingresultsnum'     => 'Tot seguit es llisten els <b>$3</b> resultats començant pel nº<b>$2</b>.',
+'nonefound'             => '<strong>Nota</strong>: les recerques sense èxit són causades tot sovint
+per recerques de paraules comunes com "la" o "de",
+que no es troben a l\'índex, o per especificar més d\'una paraula a cercar (només les pàgines
+que contenen tots els termes d\'una recerca apareixeran en el resultat).',
+'powersearch'           => 'Cerca',
+'powersearchtext'       => '
+Cerca en espais de nom :<br />
+$1<br />
+$2 Llista redireccions   Cerca $3 $9',
+'searchdisabled'        => 'La cerca dins el projecte {{SITENAME}} està desactivat. Mentrestant podeu buscar a través de Google, però tingueu en compte que la seva base de dades no estarà actualitzada.',
+'blanknamespace'        => '(Portada)',
+
+# Preferences page
+'preferences'              => 'Preferències',
+'mypreferences'            => 'Preferències',
+'prefsnologin'             => 'No heu iniciat una sessió',
+'prefsnologintext'         => "Heu d'haver [[Special:Userlogin|entrat]] per seleccionar preferències d'usuari.",
+'prefsreset'               => "Les preferències han estat respostes des d'emmagatzematge.",
+'qbsettings'               => 'Preferències de "Quickbar"',
+'qbsettings-none'          => 'Cap',
+'qbsettings-fixedleft'     => 'Fixa a la dreta',
+'qbsettings-fixedright'    => "Fixa a l'esquerra",
+'qbsettings-floatingleft'  => "Surant a l'esquerra",
+'qbsettings-floatingright' => 'Surant a la dreta',
+'changepassword'           => 'Canvia la contrasenya',
+'skin'                     => 'Aparença',
+'math'                     => 'Com es mostren les fòrmules',
+'dateformat'               => 'Format de la data',
+'datedefault'              => 'Cap preferència',
+'datetime'                 => 'Data i hora',
+'math_failure'             => "No s'ha pogut entendre",
+'math_unknown_error'       => 'error desconegut',
+'math_unknown_function'    => 'funció desconeguda',
+'math_lexing_error'        => 'error de lèxic',
+'math_syntax_error'        => 'error de sintaxi',
+'math_image_error'         => "Hi ha hagut una errada en la conversió cap el format PNG; verifiqueu la instal·lació de ''Latex'', ''dvips'', ''gs'' i ''convert''.",
+'math_bad_tmpdir'          => 'No ha estat possible crear el directori temporal de math o escriure-hi dins.',
+'math_bad_output'          => "No ha estat possible crear el directori d'eixida de math o escriure-hi dins.",
+'math_notexvc'             => "No s'ha trobat el fitxer executable ''texvc''; si us plau, vegeu math/README per a configurar-lo.",
+'prefs-personal'           => "Perfil d'usuari",
+'prefs-rc'                 => 'Canvis recents',
+'prefs-watchlist'          => 'Llista de seguiment',
+'prefs-watchlist-days'     => 'Nombre de dies per mostrar en la llista de seguiment:',
+'prefs-watchlist-edits'    => 'Nombre de modificacions a mostrar en una llista estesa de seguiment:',
+'prefs-misc'               => 'Altres preferències',
+'saveprefs'                => 'Desa les preferències',
+'resetprefs'               => 'Torna a preferències per defecte',
+'oldpassword'              => 'Contrasenya antiga',
+'newpassword'              => 'Contrasenya nova',
+'retypenew'                => 'Torneu a escriure la nova contrasenya:',
+'textboxsize'              => 'Dimensions de la caixa de text',
+'rows'                     => 'Files',
+'columns'                  => 'Columnes',
+'searchresultshead'        => 'Preferències de la cerca',
+'resultsperpage'           => 'Resultats a mostrar per pàgina',
+'contextlines'             => 'Línies a mostrar per resultat',
+'contextchars'             => 'Caràcters de context per línia',
+'stubthreshold'            => "Llindar d'article mínim",
+'recentchangescount'       => 'Nombre de títols en canvis recents',
+'savedprefs'               => 'Les vostres preferències han estat desades.',
+'timezonelegend'           => 'Fus horari',
+'timezonetext'             => "Introduïu el nombre d'hores de diferència entre la vostra hora local i la del servidor (UTC).",
+'localtime'                => 'Hora local',
+'timezoneoffset'           => 'Diferència',
+'servertime'               => 'Hora del servidor',
+'guesstimezone'            => 'Omple-ho des del navegador',
+'allowemail'               => "Habilita el correu electrònic des d'altres usuaris",
+'defaultns'                => 'Busca per defecte en els següents espais de noms:',
+'default'                  => 'per defecte',
+'files'                    => 'Fitxers',
+
+# User rights
+'userrights-lookup-user'     => "Gestiona els grups d'usuari",
+'userrights-user-editname'   => "Introduïu un nom d'usuari:",
+'editusergroup'              => "Edita els grups d'usuaris",
+'userrights-editusergroup'   => "Edita els grups d'usuaris",
+'saveusergroups'             => "Desa els grups d'usuari",
+'userrights-groupsmember'    => 'Membre de:',
+'userrights-groupsavailable' => 'Grups disponibles:',
+'userrights-groupshelp'      => "Seleccioneu els grups dels quals voleu suprimir-ne l'usuari o afegir-lo.
+Els grups no seleccionats no es canviaran. Podeu treure la selecció d'un grup amb CTRL + Clic",
+
+# Groups
+'group'            => 'Grup:',
+'group-bot'        => 'bots',
+'group-sysop'      => 'administradors',
+'group-bureaucrat' => 'buròcrates',
+'group-all'        => '(tots)',
+
+'group-bot-member'        => 'bot',
+'group-sysop-member'      => 'administrador',
+'group-bureaucrat-member' => 'buròcrata',
+
+'grouppage-bot'        => 'Project:Bots',
+'grouppage-sysop'      => 'Project:Administradors',
+'grouppage-bureaucrat' => 'Project:Buròcrates',
+
+# User rights log
+'rightslog'      => "Registre dels permisos d'usuari",
+'rightslogtext'  => "Aquest és un registre de canvis dels permisos d'usuari.",
+'rightslogentry' => "heu modificat els drets de l'usuari «$1» del grup $2 al de $3",
+'rightsnone'     => '(cap)',
+
+# Recent changes
+'changes'                           => 'canvis',
+'recentchanges'                     => 'Canvis recents',
+'recentchangestext'                 => 'Seguiu els canvis recents del projecte {{SITENAME}} en aquesta pàgina.',
+'recentchanges-feed-description'    => 'Segueix en aquest canal els canvis més recents del wiki.',
+'rcnote'                            => 'A continuació hi ha els darrers <strong>$1</strong> canvis en els darrers <strong>$2</strong> dies, com de $3.',
+'rcnotefrom'                        => 'A sota hi ha els canvis des de <b>$2</b> (es mostren fins <b>$1</b>).',
+'rclistfrom'                        => 'Mostra els canvis nous des de $1',
+'rcshowhideminor'                   => '$1 edicions menors',
+'rcshowhidebots'                    => '$1 bots',
+'rcshowhideliu'                     => '$1 usuaris identificats',
+'rcshowhideanons'                   => '$1 usuaris anònims',
+'rcshowhidepatr'                    => '$1 edicions patrullades',
+'rcshowhidemine'                    => '$1 edicions pròpies',
+'rclinks'                           => 'Mostra els darrers $1 canvis en els darrers $2 dies<br />$3',
+'diff'                              => 'dif',
+'hist'                              => 'hist',
+'hide'                              => 'amaga',
+'show'                              => 'mostra',
+'minoreditletter'                   => 'm',
+'newpageletter'                     => 'N',
+'boteditletter'                     => 'b',
+'sectionlink'                       => '→',
+'number_of_watching_users_pageview' => '[Usuaris que vigilen aquesta pàgina: $1]',
+'rc_categories'                     => 'Limita a les categories (separades amb "|")',
+'rc_categories_any'                 => 'Qualsevol',
+
+# Upload
+'upload'                      => 'Carrega',
+'uploadbtn'                   => 'Carrega un fitxer',
+'reupload'                    => 'Carrega de nou',
+'reuploaddesc'                => 'Torna al formulari per apujar.',
+'uploadnologin'               => 'No heu iniciat una sessió',
+'uploadnologintext'           => "Heu d'[[Special:Userlogin|iniciar una sessió]]
+per a penjar-hi fitxers.",
+'upload_directory_read_only'  => 'El servidor web no pot escriure al directori de càrrega ($1)',
+'uploaderror'                 => "S'ha produït un error en l'intent de carregar",
+'uploadtext'                  => "Feu servir el formulari de davall per a carregar-hi una còpia d'un fitxer. Per a visualitzar o cercar imatges que s'hagueren carregat prèviament, aneu a la [[Special:Imagelist|llista de fitxers carregats]]. Les càrregues i les destruccions es registren en el [[Special:Log/upload|registre de càrregues]].
+
+Per a incloure una imatge en un article, feu un enllaç de la forma
+* '''<nowiki>[[</nowiki>{{ns:image}}<nowiki>:Fitxer.jpg]]</nowiki>''';
+* '''<nowiki>[[</nowiki>{{ns:image}}<nowiki>:Fitxer.png|alt text]]</nowiki>'''; o per a sons
+* '''<nowiki>[[</nowiki>{{ns:media}}<nowiki>:Fitxer.ogg]]</nowiki>''' per a enllaçar-ho directament al fitxer.",
+'uploadlog'                   => 'registre de càrregues',
+'uploadlogpage'               => 'Registre de càrregues',
+'uploadlogpagetext'           => "A sota hi ha un llistat dels fitxers que s'han pujat més recentment.
+Totes les hores són les del servidor (UTC).",
+'filename'                    => 'Nom de fitxer',
+'filedesc'                    => 'Sumari',
+'fileuploadsummary'           => 'Resum:',
+'filestatus'                  => 'Situació del copyright',
+'filesource'                  => 'Font',
+'uploadedfiles'               => 'Fitxers carregats',
+'ignorewarning'               => 'Ignora qualsevol avís i desa el fitxer igualment.',
+'ignorewarnings'              => 'Ignora qualsevol avís',
+'minlength'                   => 'Els noms de les imatges han de tenir un mínim de tres lletres.',
+'illegalfilename'             => "El nom de l'arxiu “$1” conté caràcters que no estan permesos en els títols de pàgines. Si us plau canvieu el nom a l'arxiu i torneu a carregar-lo.",
+'badfilename'                 => 'El nom de la imatge s\'ha canviat a "$1".',
+'badfiletype'                 => '".$1" no és un format recomanat d\'imatge.',
+'large-file'                  => 'Els fitxers importants no haurien de ser més grans de $1; aquest fitxer ocupa $2.',
+'largefileserver'             => 'Aquest fitxer és més gran del que el servidor permet.',
+'emptyfile'                   => "L'arxiu que heu carregat sembla estar buit. Això por ser degut a un mal caràcter en el nom de l'arxiu. Si us plau reviseu si realment voleu carregar aquest arxiu.",
+'fileexists'                  => 'Ja hi existeix un fitxer amb aquest nom, si us plau, verifiqueu $1 si no esteu segurs de voler substituir-lo.',
+'fileexists-forbidden'        => 'Ja hi existeix un fitxer amb aquest nom; si us plau, torneu enrere i carregueu aquest fitxer sota un altre nom. [[Image:$1|thumb|center|$1]]',
+'fileexists-shared-forbidden' => 'Ja hi ha un fitxer amb aquest nom al fons comú de fitxers; si us plau, torneu enrera i carregueu-ne una còpia amb un altre nom. [[Image:$1|thumb|center|$1]]',
+'successfulupload'            => "El fitxer s'ha carregat amb èxit",
+'fileuploaded'                => 'L\'arxiu "$1" s\'ha carregat amb èxit.
+Seguiu aquest enllaç si us plau: ($2) a la pàgina de descripció i empleneu
+la informació necessària sobre l\'arxiu, tal com la procedència, la data de creació
+i l\'autor, i qualsevol altra cosa que pugueu saber al respecte.',
+'uploadwarning'               => 'Avís de càrrega',
+'savefile'                    => 'Desa el fitxer',
+'uploadedimage'               => '"[[$1]]" carregat.',
+'uploaddisabled'              => "S'ha inhabilitat la càrrega",
+'uploaddisabledtext'          => "S'ha inhabilitat la càrrega de fitxers en aquest wiki.",
+'uploadscripted'              => 'Aquest fitxer conté codi HTML o de seqüències que pot ser interpretat equivocadament per un navegador.',
+'uploadcorrupt'               => 'El fitxer està corrupte o té una extensió incorrecte. Reviseu-lo i torneu-lo a pujar.',
+'uploadvirus'                 => 'El fitxer conté un virus! Detalls: $1',
+'sourcefilename'              => 'Font del nom del fitxer',
+'destfilename'                => 'Nom del fitxer de destinació',
+'watchthisupload'             => 'Vigila aquesta pàgina',
+'filewasdeleted'              => "Prèviament es va carregar un fitxer d'aquest nom i després va ser esborrat. Hauríeu de verificar $1 abans de procedir a carregar-lo una altra vegada.",
+
+'upload-proto-error'      => 'El protocol és incorrecte',
+'upload-proto-error-text' => 'Per a les càrregues remotes cal que els URL comencin amb <code>http://</code> o <code>ftp://</code>.',
+'upload-file-error'       => "S'ha produït un error intern",
+'upload-file-error-text'  => "S'ha produït un error de càrrega desconegut quan s'intentava crear un fitxer temporal al servidor. Contacteu al vostre administrador de sistemes.",
+'upload-misc-error'       => "S'ha produït un error de càrrega desconegut",
+'upload-misc-error-text'  => "S'ha produït un error desconegut durant la càrrega. Verifiqueu que l'URL és vàlid i accessible, i torneu-ho a provar. Si el problema persisteix, adreceu-vos al vostre administrador de sistemes.",
+
+# Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
+'upload-curl-error6'       => "No s'ha pogut accedir a l'URL",
+'upload-curl-error6-text'  => "No s'ha pogut accedir a l'URL que s'ha proporcionat. Torneu a comprovar que sigui correcte i que el lloc estigui funcionant.",
+'upload-curl-error28'      => "S'ha excedit el temps d'espera de la càrrega",
+'upload-curl-error28-text' => "El lloc ha trigat massa a respondre. Comproveu que està funcionant, espereu una estona i torneu-ho a provar. Podeu mirar d'intentar-ho quan hi hagi menys trànsit a la xarxa.",
+
+'license'            => 'Llicència',
+'nolicense'          => "No s'ha seleccionat cap",
+'upload_source_url'  => ' (un URL vàlid i accessible públicament)',
+'upload_source_file' => ' (un fitxer en el vostre ordinador)',
+
+# Image list
+'imagelist'                 => "Llistat d'imatges",
+'imagelisttext'             => "Llista {{plural:$1|d'un sol arxiu|de '''$1''' arxius ordenats $2}}.",
+'imagelistforuser'          => 'Només es mostren les imatges que ha pujat $1',
+'getimagelist'              => " obtenint el llistat d'imatges",
+'ilsubmit'                  => 'Cerca',
+'showlast'                  => 'Mostra les darreres $1 imatges ordenades $2.',
+'byname'                    => 'per nom',
+'bydate'                    => 'per data',
+'bysize'                    => 'per mida',
+'imgdelete'                 => 'edi',
+'imgdesc'                   => 'desc',
+'imgfile'                   => 'fitxer',
+'imglegend'                 => 'Simbologia: (edi) = mostra/edita la descripció de la imatge.',
+'imghistory'                => 'Història de la imatge',
+'revertimg'                 => 'res',
+'deleteimg'                 => 'esb',
+'deleteimgcompletely'       => "Esborra totes les versions d'aquest arxiu",
+'imghistlegend'             => 'Simbologia: (act) = aquesta és la imatge actual, (esb) = esborra
+aquesta versió antiga, (rev) = reverteix a aquesta versió antiga.
+<br /><i>Cliqueu sobre la data per veure la imatge carregada en aquesta data</i>.',
+'imagelinks'                => 'Enllaços a la imatge',
+'linkstoimage'              => 'Les següents pàgines enllacen a aquesta imatge:',
+'nolinkstoimage'            => 'No hi ha pàgines que enllacin aquesta imatge.',
+'sharedupload'              => 'Aquest fitxer està compartit i pot ser usat per altres projectes.',
+'shareduploadwiki'          => 'Consulteu $1 per a més informació.',
+'shareduploadwiki-linktext' => 'pàgina de descripció del fitxer',
+'noimage'                   => 'No existeix cap fitxer amb aquest nom, però podeu $1.',
+'noimage-linktext'          => 'Carrega',
+'uploadnewversion-linktext' => "Carrega una nova versió d'aquest fitxer",
+'imagelist_date'            => 'Data',
+'imagelist_name'            => 'Nom',
+'imagelist_user'            => 'Usuari',
+'imagelist_size'            => 'Mida (octets)',
+'imagelist_description'     => 'Descripció',
+'imagelist_search_for'      => "Cerca un nom d'imatge:",
+
+# MIME search
+'mimesearch'         => 'Cerca per MIME',
+'mimesearch-summary' => 'This page enables the filtering of files for its MIME-type. Input: contenttype/subtype, e.g. <tt>image/jpeg</tt>.',
+'mimetype'           => 'Tipus MIME:',
+'download'           => 'descarrega',
+
+# Unwatched pages
+'unwatchedpages' => 'Pàgines desateses',
+
+# List redirects
+'listredirects' => 'Llista de redireccions',
+
+# Unused templates
+'unusedtemplates'     => 'Plantilles no usades',
+'unusedtemplatestext' => "Aquesta pàgina mostra les pàgines en l'espai de noms de plantilles, que no estan incloses en cap altra pàgina. Recordeu de comprovar les pàgines que hi enllacen abans d'esborrar-les.",
+'unusedtemplateswlh'  => 'altres enllaços',
+
+# Random redirect
+'randomredirect' => "Redirecció a l'atzar",
+
+# Statistics
+'statistics'             => 'Estadístiques',
+'sitestats'              => 'Estadístiques del lloc',
+'userstats'              => "Estadístiques d'usuari",
+'sitestatstext'          => "Hi ha un total de '''$1''' pàgines en la base de dades.
+Això inclou pàgines de discussió, pàgines sobre el projecte {{SITENAME}}, pàgines mínimes,
+redireccions, i altres que probablement no es poden classificar com a articles.
+Excloent-les, hi ha '''$2''' pàgines que probablement són articles legítims.
+
+S'han penjat '''$8''' fitxers.
+
+Hi ha hagut un total de '''$3''' visites a pàgines, i '''$4''' edicions de pàgina
+des que el programari s'ha configurat.
+Això resulta en un promig de '''$5''' edicions per pàgina,
+i '''$6''' visites per edició.
+
+La mida de la [http://meta.wikimedia.org/wiki/Help:Job_queue cua de treballs] és '''$7'''.",
+'userstatstext'          => "Hi ha '''$1''' usuaris registrats, dels quals 
+{{PLURAL:$2|un (el '''$4%''') n'és $5|'''$2''' (el '''$4%''') en són $5}}.",
+'statistics-mostpopular' => 'Pàgines més visualitzades',
+
+'disambiguations'      => 'Pàgines de desambiguació',
+'disambiguationspage'  => 'Template:Desambiguació',
+'disambiguations-text' => "Les següents pàgines enllacen a una '''pàgina de desambiguació'''. Per això, caldria que enllacessin al tema apropiat.<br />Una pàgina es tracta com de desambiguació si utilitza una plantilla que prové de [[MediaWiki:disambiguationspage]]",
+
+'doubleredirects'     => 'Redireccions dobles',
+'doubleredirectstext' => '<b>Atenció:</b> aquest llistat pot contenir falsos positius. Això normalment significa que hi ha text
+
+addicional amb enllaços sota el primer #REDIRECT.<br />
+Cada fila conté enllaços al segon i tercer redireccionament, així com la primera línia del
+
+segon redireccionament, la qual cosa dóna normalment l\'article "real", al que el primer redireccionamet hauria d\'apuntar.',
+
+'brokenredirects'        => 'Redireccions rompudes',
+'brokenredirectstext'    => 'Les següents redireccions enllacen a pàgines inexistents:',
+'brokenredirects-edit'   => '(edita)',
+'brokenredirects-delete' => '(elimina)',
+
+# Miscellaneous special pages
+'nbytes'                  => '$1 {{PLURAL:$1|octet|octets}}',
+'ncategories'             => '$1 {{PLURAL:$1|categoria|categories}}',
+'nlinks'                  => '$1 {{PLURAL:$1|enllaç|enllaços}}',
+'nmembers'                => '$1 {{PLURAL:$1|membre|membres}}',
+'nrevisions'              => '$1 {{PLURAL:$1|revisió|revisions}}',
+'nviews'                  => '$1 {{PLURAL:$1|visita|visites}}',
+'specialpage-empty'       => 'Aquesta pàgina és buida.',
+'lonelypages'             => 'Pàgines orfes',
+'lonelypagestext'         => "Les següents pàgines no s'enllacen des d'altres pàgines d'aquest wiki.",
+'uncategorizedpages'      => 'Pàgines sense categoria',
+'uncategorizedcategories' => 'Categories sense categoria',
+'uncategorizedimages'     => 'Imatges sense categoria',
+'unusedcategories'        => 'Categories sense articles',
+'unusedimages'            => 'Imatges sense ús',
+'popularpages'            => 'Pàgines populars',
+'wantedcategories'        => 'Categories demanades',
+'wantedpages'             => 'Pàgines demanades',
+'mostlinked'              => 'Pàgines més enllaçades',
+'mostlinkedcategories'    => 'Categories més utilitzades',
+'mostcategories'          => 'Pàgines que utilitzen més categories',
+'mostimages'              => 'Imatges més enllaçades',
+'mostrevisions'           => 'Pàgines més modificades',
+'allpages'                => 'Totes les pàgines',
+'prefixindex'             => 'Cercar per prefix',
+'randompage'              => "Pàgina a l'atzar",
+'shortpages'              => 'Pàgines curtes',
+'longpages'               => 'Pàgines llargues',
+'deadendpages'            => 'Pàgines atzucac',
+'deadendpagestext'        => "Aquestes pàgines no tenen enllaços a d'altres pàgines d'aquesta mateixa wiki.",
+'protectedpages'          => 'Pàgines protegides',
+'protectedpagestext'      => 'Aquestes pàgines estan protegides contra la seva lliure edició o el seu reanomenament:',
+'protectedpagesempty'     => 'No hi ha cap pàgina protegida per ara',
+'listusers'               => "Llistat d'usuaris",
+'specialpages'            => 'Pàgines especials',
+'spheading'               => 'Pàgines especials',
+'restrictedpheading'      => 'Pàgines especials restringides',
+'recentchangeslinked'     => "Seguiment d'enllaços",
+'rclsub'                  => '(a pàgines enllaçades des de "$1")',
+'newpages'                => 'Pàgines noves',
+'newpages-username'       => "Nom d'usuari:",
+'ancientpages'            => 'Pàgines més antigues',
+'intl'                    => 'Enllaços entre llengües',
+'move'                    => 'Reanomena',
+'movethispage'            => 'Trasllada la pàgina',
+'unusedimagestext'        => '<p>Noteu que altres llocs web poden enllaçar una imatge amb un URL directe i estar llistada aquí tot i estar en ús actiu.</p>',
+'unusedcategoriestext'    => 'Les pàgines de categoria següents existeixen encara que cap altre article o categoria les utilitza.',
+
+# Book sources
+'booksources'               => 'Obres de referència',
+'booksources-search-legend' => 'Cerca fonts de llibres',
+'booksources-isbn'          => 'ISBN:',
+'booksources-go'            => 'Vés-hi',
+'booksources-text'          => "A sota hi ha una llista d'enllaços d'altres llocs que venen llibres nous i de segona mà, i també podrien tenir més informació dels llibres que esteu cercant:",
+
+'categoriespagetext' => 'Les categories següents existeixen en el wiki.',
+'data'               => 'Dades',
+'userrights'         => "Gestió dels permisos d'usuari",
+'groups'             => "Grups d'usuaris",
+'isbn'               => 'ISBN',
+'alphaindexline'     => '$1 a $2',
+'version'            => 'Versió',
+'log'                => 'Registres',
+'alllogstext'        => "Presentació combinada de càrregues, eliminacions, proteccions, bloquejos, i registres d'administrador. 
+Podeu reduir l'extensió seleccionant el tipus de identificació, el nom del usuari, o la pàgina afectada.",
+'logempty'           => 'No hi ha cap coincidència en el registre.',
+
+# Special:Allpages
+'nextpage'          => 'Següent pàgina ($1)',
+'prevpage'          => 'Pàgina prèvia ($1)',
+'allpagesfrom'      => 'Mostra les pàgines que van crear-se el:',
+'allarticles'       => 'Tots els articles',
+'allinnamespace'    => "Totes les pàgines (de l'espai de noms $1)",
+'allnotinnamespace' => "Totes les pàgines (que no són a l'espai de noms $1)",
+'allpagesprev'      => 'Anterior',
+'allpagesnext'      => 'Següent',
+'allpagessubmit'    => 'Vés-hi',
+'allpagesprefix'    => 'Mostra les pàgines amb prefix:',
+'allpagesbadtitle'  => "El títol de la pàgina que hi heu inserit no és vàlid o hi conté un prefix d'inter-wiki o inter-lingüístic. Hi podria contindre un o més caràcters els quals no hom haurien d'utilitzar per als títols.",
+
+# Special:Listusers
+'listusersfrom'      => 'Mostra usuaris començant per:',
+'listusers-submit'   => 'Mostra',
+'listusers-noresult' => "No s'han trobat coincidències de noms d'usuaris. Si us plau, busqueu també amb variacions per majúscules i minúscules.",
+
+# E-mail user
+'mailnologin'     => "No enviïs l'adreça",
+'mailnologintext' => "Heu d'haver [[Special:Userlogin|entrat]]
+i tenir una direcció electrònica vàlida en les vostres [[Special:Preferences|preferències]]
+per enviar un correu electrònic a altres usuaris.",
+'emailuser'       => 'Envia un missatge de correu electrònic a aquest usuari',
+'emailpage'       => 'Correu electrònic a usuari',
+'emailpagetext'   => "Si aquest usuari ha entrat una adreça electrònica vàlida en les vostres preferències d'usuari, el següent formulari
+
+serveix per enviar-li un missatge.
+L'adreça electrònica que heu entrat en les vostres preferències d'usuari apareixerà en el remitent, de manera que el destinatari pugui
+
+respondre.",
+'usermailererror' => "L'objecte de correu ha retornat un error:",
+'defemailsubject' => 'Adreça correl de {{SITENAME}}',
+'noemailtitle'    => 'No hi ha cap adreça electrònica',
+'noemailtext'     => "Aquest usuari no ha especificat una adreça electrònica vàlida, o ha escollit no rebre correu electrònic d'altres usuaris
+
+.",
+'emailfrom'       => 'De',
+'emailto'         => 'Per',
+'emailsubject'    => 'Assumpte',
+'emailmessage'    => 'Missatge',
+'emailsend'       => 'Envia',
+'emailccme'       => "Envia'm una còpia del meu missatge.",
+'emailccsubject'  => 'Còpia del vostre missatge a $1: $2',
+'emailsent'       => 'Correu electrònic enviat',
+'emailsenttext'   => 'El vostre correu electrònic ha estat enviat.',
+
+# Watchlist
+'watchlist'            => 'Llista de seguiment',
+'mywatchlist'            => 'Llista de seguiment',
+'watchlistfor'         => "(per a '''$1''')",
+'nowatchlist'          => 'No teniu cap element en el vostre llistat de seguiment.',
+'watchlistanontext'    => 'Premeu $1 per a visualitzar o editar elements de la vostra llista de seguiment.',
+'watchlistcount'       => "'''Teniu {{PLURAL:$1|$1 element|$1 elements}} en la vostra llista de seguiment, incloent-hi les pàgines de discussió.'''",
+'clearwatchlist'       => 'Buida la llista de seguiment',
+'watchlistcleartext'   => 'Esteu segur que voleu eliminar-los?',
+'watchlistclearbutton' => 'Buida la llista de seguiment',
+'watchlistcleardone'   => "S'ha buidat la vostra llista de seguiment. {{PLURAL:$1|S'ha eliminat $1 element|S'han eliminat $1 elements}}.",
+'watchnologin'         => 'No heu iniciat la sessió',
+'watchnologintext'     => "Heu d'[[Special:Userlogin|entrar]]
+per modificar el vostre llistat de seguiment.",
+'addedwatch'           => "S'ha afegit la pàgina a la llista de seguiment",
+'addedwatchtext'       => "S'ha afegit la pàgina «[[:$1]]» a la vostra [[Special:Watchlist|llista de seguiment]].
+
+Els canvis futurs que tindran lloc en aquesta pàgina i la seua corresponent discussió s'avisaràn a la vostra [[Special:Watchlist|llista de seguiment]], ressaltant-se també '''en negreta''' en la [[Special:Recentchanges|llista de canvis recents]] perquè hom pugui adonar-se'n més fàcilment.
+
+Si voleu deixar de vigilar la pàgina, cliqueu sobre l'enllaç de «Desatén» de la barra lateral.",
+'removedwatch'         => "S'ha tret de la llista de seguiment",
+'removedwatchtext'     => 'S\'ha tret la pàgina "[[:$1]]" de la vostra llista de seguiment.',
+'watch'                => 'Vigila',
+'watchthispage'        => 'Vigila aquesta pàgina',
+'unwatch'              => 'Desatén',
+'unwatchthispage'      => 'Desatén',
+'notanarticle'         => 'No és un article',
+'watchnochange'        => "No s'ha editat cap dels elements que vigileu en el període de temps que es mostra.",
+'watchdetails'         => '* {{PLURAL:$1|$1 pàgina|$1 pàgines}} vigilades, sense comptar les pàgines de discussió
+* [[Special:Watchlist/edit|Mostra i edita la llista de seguiment completa]]
+* [[Special:Watchlist/clear|Treu totes les pàgines]]',
+'wlheader-enotif'      => "* S'ha habilitat la notificació per correu electrònic.",
+'wlheader-showupdated' => "* Les pàgines que s'han canviat des de la vostra darrera visita es mostren '''en negreta'''",
+'watchmethod-recent'   => "s'està comprovant si ha pàgines vigilades en les edicions recents",
+'watchmethod-list'     => "s'està comprovant si hi ha edicions recents en les pàgines vigilades",
+'removechecked'        => 'Elimina els elements marcats de la llista de seguiment',
+'watchlistcontains'    => 'La vostra llista de seguiment conté $1 pàgines.',
+'watcheditlist'        => "Aquesta és una llista alfabètica de les pàgines de contingut
+sota el vostre seguiment. Marqueu els quadres de les pàgines que vulgueu eliminar de la vostra llista de seguiment i cliqueu al botó «elimina les marcades»
+que es troba a la part inferior de la pantalla (en eliminar-se una pàgina de contingut també s'elimina la pàgina de discussió acompanyant i viceversa).",
+'removingchecked'      => "S'estan eliminant els elements sol·licitats de la llista de seguiment...",
+'couldntremove'        => "No s'ha pogut eliminar l'element '$1'...",
+'iteminvalidname'      => "Hi ha un problema amb l'element '$1': el nom no és vàlid...",
+'wlnote'               => 'A sota hi ha els darrers $1 canvis en les darreres <b>$2</b> hores.',
+'wlshowlast'           => '<small>- Mostra les darreres $1 hores, els darrers $2 dies o $3</small>',
+'wlsaved'              => 'Aquesta es una versió desada de la vostra llista de seguiment.',
+'watchlist-show-bots'  => 'Mostra les edicions dels bots',
+'watchlist-hide-bots'  => 'Amaga les edicions dels bots',
+'watchlist-show-own'   => 'Mostra les edicions pròpies',
+'watchlist-hide-own'   => 'Amaga les edicions pròpies',
+'watchlist-show-minor' => 'Mostra les edicions menors',
+'watchlist-hide-minor' => 'Amaga les edicions menors',
+'wldone'               => 'Fet.',
+
+# Displayed when you click the "watch" button and it's in the process of watching
+'watching'   => "S'està vigilant...",
+'unwatching' => "S'està desatenent...",
+
+'enotif_mailer'      => 'Sistema de notificació per correl de {{SITENAME}}',
+'enotif_reset'       => 'Marca totes les pàgines com a visitades',
+'enotif_newpagetext' => 'Aquesta és una nova pàgina.',
+'changed'            => 'modificat',
+'created'            => 'publicat',
+'enotif_subject'     => '$PAGEEDITOR ha $CHANGEDORCREATED la pàgina $PAGETITLE en {{SITENAME}}',
+'enotif_lastvisited' => "Vegeu $1 per a tots els canvis que s'han fet des de la teua darrera visita.",
+'enotif_body'        => 'Benvolgut $WATCHINGUSERNAME,
+
+La pàgina $PAGETITLE del projecte {{SITENAME}} ha estat $CHANGEDORCREATED el dia $PAGEEDITDATE per $PAGEEDITOR, vegeu $PAGETITLE_URL per la versió actual.
+
+$NEWPAGE
+
+Resum ofert per l\'editor: $PAGESUMMARY $PAGEMINOREDIT
+
+Contacteu amb l\'editor:
+correu: $PAGEEDITOR_EMAIL
+pàgina d\'usuari: $PAGEEDITOR_WIKI
+
+No rebreu més notificacions de futurs canvis si no visiteu la pàgina. També podeu canviar el mode de notificació de les pàgines que vigileu en la vostra llista de seguiment.
+
+             El servei de notificació del projecte {{SITENAME}}
+
+--
+Per a canviar les opcions de la vostra llista de seguiment aneu a:
+{{fullurl:Special:Watchlist/edit}}
+
+Suggeriments i ajuda:
+{{fullurl:{{MediaWiki:helppage}}}}',
+
+# Delete/protect/revert
+'deletepage'                  => 'Esborra aquesta pàgina',
+'confirm'                     => 'Confirma',
+'excontent'                   => 'el contingut era: «$1»',
+'excontentauthor'             => "el contingut era: «$1» (i l'única persona qui hi ha editat ha estat «[[Special:Contributions/$2|$2]]»)",
+'exbeforeblank'               => "el contingut abans d'estar en blanc era: '$1'",
+'exblank'                     => 'la pàgina estava en blanc',
+'confirmdelete'               => "Confirma l'esborrat",
+'deletesub'                   => '(Esborrant "$1")',
+'historywarning'              => 'Avís: La pàgina que eliminareu té un historial:',
+'confirmdeletetext'           => "Esteu a punt d'esborrar de forma permanent una pàgina o imatge i tot el seu historial de la base de dades.
+Confirmeu que realment ho voleu fer, que enteneu les
+conseqüències, i que el que esteu fent està d'acord amb la [[{{MediaWiki:policy-url}}|política]] del projecte.",
+'actioncomplete'              => "S'ha realitzat l'acció de manera satisfactòria.",
+'deletedtext'                 => '"$1" ha estat esborrat.
+Mostra $2 per a un registre dels esborrats més recents.',
+'deletedarticle'              => 'esborrat "$1"',
+'dellogpage'                  => "Registre_d'esborrats",
+'dellogpagetext'              => 'Davall hi ha un llistat dels esborraments més recents.',
+'deletionlog'                 => "Registre d'esborrats",
+'reverted'                    => 'Invertit amb una revisió anterior',
+'deletecomment'               => 'Motiu per a ser esborrat',
+'imagereverted'               => "S'ha revertit amb èxit a una versió anterior.",
+'rollback'                    => 'Reverteix edicions',
+'rollback_short'              => 'Revoca',
+'rollbacklink'                => 'Reverteix',
+'rollbackfailed'              => "No s'ha pogut revocar",
+'cantrollback'                => "No s'ha pogut revertir les edicions; el darrer col·laborador és l'únic autor d'aquest article.",
+'alreadyrolled'               => "No es pot retrocedir a la darrera modificació de [[:$1]]
+per l'usuari [[User:$2|$2]] ([[User talk:$2|Discussió]]); algú altre hi ha editat tot seguit o ja ha revertit la pàgina.
+
+La darrera modificació s'ha fet per l'usuari [[User:$3|$3]] ([[User talk:$3|Discussió]]).",
+'editcomment'                 => 'El comentari d\'edició ha estat: "<i>$1</i>".', # only shown if there is an edit comment
+'revertpage'                  => "Revertides les edicions de [[Special:Contributions/$2|$2]] ([[User talk:$2|discussió]]); s'ha recuperat la darrera versió de [[User:$1|$1]]",
+'sessionfailure'              => 'Sembla que hi ha problema amb la vostra sessió; aquesta acció ha estat anulada en prevenció de pirateig de sessió. Si us plau, pitgueu "Torna", i recarregueu la pàgina des d\'on veniu, aleshores intenteu-lo de nou.',
+'protectlogpage'              => 'Registre de protecció',
+'protectlogtext'              => 'Aquest és el registre de proteccions i desproteccions. Vegeu la [[Special:Protectedpages|llista de pàgines protegides]] per a la llista de les pàgines que actualment tenen alguna protecció.',
+'protectedarticle'            => 'protegit «[[$1]]»',
+'unprotectedarticle'          => '«[[$1]]» desprotegida',
+'protectsub'                  => '(Protegint «$1»)',
+'confirmprotecttext'          => 'Voleu realment protegir aquesta pàgina?',
+'confirmprotect'              => 'Confirmeu la protecció',
+'protectmoveonly'             => 'Protegit només de reanomenament',
+'protectcomment'              => 'Motiu de la protecció',
+'protectexpiry'               => "Data d'expiració",
+'protect_expiry_invalid'      => "Data d'expiració no vàlida",
+'protect_expiry_old'          => 'El temps de termini ja ha passat.',
+'unprotectsub'                => "(S'està desprotegint «$1»)",
+'confirmunprotecttext'        => 'Realment voleu desprotegir aquesta pàgina?',
+'confirmunprotect'            => 'Confirmeu la desprotecció',
+'unprotectcomment'            => 'Motiu de la desprotecció',
+'protect-unchain'             => 'Permet diferent nivell de protecció per editar i per moure',
+'protect-text'                => 'Aquí podeu visualitzar i canviar el nivell de protecció de la pàgina «$1». Assegureu-vos de seguir les polítiques existents.',
+'protect-viewtext'            => "El vostre compte no té permisos per canviar els nivells de protecció d'una pàgina. Actualment el nivell de protecció de la pàgina «<strong>$1</strong>» és:",
+'protect-cascadeon'           => "Aquesta pàgina es troba protegida perquè està inclosa en les següents pàgines que tenen activada una protecció en cascada. Podeu canviar el nivell de protecció d'aquesta pàgina però això no afectarà la protecció en cascada.",
+'protect-default'             => '(per defecte)',
+'protect-level-autoconfirmed' => 'Bloca els usuaris no registrats',
+'protect-level-sysop'         => 'Bloqueja tots els usuaris excepte administradors',
+'protect-summary-cascade'     => 'en cascada',
+'protect-expiring'            => 'expira el dia $1 (UTC)',
+'protect-cascade'             => 'Protecció en cascada: protegeix totes les pàgines i plantilles incloses en aquesta.',
+
+# Restrictions (nouns)
+'restriction-edit' => 'Edita',
+'restriction-move' => 'Reanomena',
+
+# Restriction levels
+'restriction-level-sysop'         => 'protegida',
+'restriction-level-autoconfirmed' => 'semiprotegida',
+
+# Undelete
+'undelete'                 => 'Restaura una pàgina esborrada',
+'undeletepage'             => 'Mostra i restaura pàgines esborrades',
+'viewdeletedpage'          => 'Visualitza les pàgines eliminades',
+'undeletepagetext'         => "Les següents pàgines han estat esborrades però encara són a l'arxiu i poden ser restaurades. L'arxiu pot ser netejat
+
+periòdicament.",
+'undeleteextrahelp'        => "Per a recuperar la pàgina sencera, deixeu totes les caselles sense seleccionar i
+cliqueu a  '''''Recupera'''''. Per a realitzar una recuperació selectiva, marqueu les caselles que corresponguin
+a les revisions que voleu recuperar, i feu clic a '''''Recupera'''''. Si cliqueu '''''Reinicia''''', es netejarà el
+camp de comentari i es desmarcaran totes les caselles.",
+'undeletearticle'          => "Recupera l'article eliminat",
+'undeleterevisions'        => '$1 revisions arxivades',
+'undeletehistory'          => 'Si restaureu una pàgina, totes les revisions seran restaurades a la història.
+Si una nova pàgina amb el mateix nom ha estat creada des de l\'esborrat, les versions restaurades apareixeran com a història anterior, i la
+
+revisió actual del la pàgina "viva" no serà substituïda automàticament.',
+'undeletehistorynoadmin'   => "S'ha eliminat aquest article. El motiu es mostra
+al resum a continuació, juntament amb detalls dels usuaris que havien editat aquesta pàgina
+abans de la seua eliminació. El text de les revisions eliminades només és accessible als administradors.",
+'undelete-revision'        => "S'ha eliminat la revisió de $1 de $2:",
+'undeleterevision-missing' => "La revisió no és vàlida o hi manca. Podeu tenir-hi un mal enllaç, o bé
+pot haver-se restaurat o eliminat de l'arxiu.",
+'undeletebtn'              => 'Recupera!',
+'undeletereset'            => 'Reinicia',
+'undeletecomment'          => 'Comentari:',
+'undeletedarticle'         => 'restaurat "$1"',
+'undeletedrevisions'       => '$1 revisions restaurades',
+'undeletedrevisions-files' => '$1 revisions i $2 arxiu(s) restaurats',
+'undeletedfiles'           => '$1 {{PLURAL:$1|arxiu restaurat|arxius restaurats}}',
+'cannotundelete'           => "No s'ha pogut restaurar; algú altre pot estar restaurant la mateixa pàgina.",
+'undeletedpage'            => "<big>'''S'ha restaurat «$1»'''</big>
+
+Consulteu el [[Special:Log/delete|registre d'esborrats]] per a veure els esborrats i les restauracions més recents.",
+'undelete-header'          => "Vegeu [[Special:Log/delete|el registre d'eliminació]] per a veure les pàgines eliminades recentment.",
+'undelete-search-box'      => 'Cerca pàgines esborrades',
+'undelete-search-prefix'   => 'Mostra pàgines que comencin:',
+'undelete-search-submit'   => 'Cerca',
+'undelete-no-results'      => "No s'ha trobat cap pàgina que hi concideixi a l'arxiu d'eliminació.",
+
+# Namespace form on various pages
+'namespace' => 'Espai de noms:',
+'invert'    => 'Inverteix la selecció',
+
+# Contributions
+'contributions' => "Contribucions de l'usuari",
+'mycontris'     => 'Contribucions',
+'contribsub2'    => 'Per $1 ($2)',
+'nocontribs'    => "No s'ha trobat canvis que encaixessin amb aquests criteris.",
+'ucnote'        => "A sota hi ha els darrers <b>$1</b> canvis d'aquest usuari en els darrers <b>$2</b> dies.",
+'uclinks'       => 'Mostra els darrers $1 canvis; mostra els darrers $2 dies.',
+'uctop'         => ' (actual)',
+'newbies'       => 'novells',
+
+'sp-contributions-newest'      => 'Les més noves',
+'sp-contributions-oldest'      => 'Les més antigues',
+'sp-contributions-newer'       => '$1 anteriors',
+'sp-contributions-older'       => '$1 següents',
+'sp-contributions-newbies-sub' => 'Per a novells',
+'sp-contributions-blocklog'    => 'Registre de blocatges',
+
+'sp-newimages-showfrom' => 'Mostra imatges des de $1',
+
+# What links here
+'whatlinkshere' => 'Què hi enllaça',
+'notargettitle' => 'No hi ha pàgina en blanc',
+'notargettext'  => 'No heu especificat a quina pàgina dur a terme aquesta funció.',
+'linklistsub'   => "(Llista d'enllaços)",
+'linkshere'     => "Les següents pàgines enllacen amb '''[[:$1]]''':",
+'nolinkshere'   => "Cap pàgina enllaça amb '''[[:$1]]'''.",
+'isredirect'    => 'pàgina redirigida',
+'istemplate'    => 'inclosa',
+
+# Block/unblock
+'blockip'                     => "Bloca l'usuari",
+'blockiptext'                 => "Empreu el següent formulari per blocar l'accés
+d'escriptura des d'una adreça IP específica o des d'un usuari determinat.
+això només s'hauria de fer per prevenir el vandalisme, i
+d'acord amb la [[{{MediaWiki:policy-url}}|política del projecte]].
+Empleneu el diàleg de sota amb un motiu específic (per exemple, citant
+quines pàgines en concret estan sent vandalitzades).",
+'ipaddress'                   => 'Adreça IP',
+'ipadressorusername'          => "Adreça IP o nom de l'usuari",
+'ipbexpiry'                   => 'Venciment',
+'ipbreason'                   => 'Motiu',
+'ipbanononly'                 => 'Bloca només els usuaris anònims',
+'ipbcreateaccount'            => 'Evita la creació de comptes',
+'ipbenableautoblock'          => 'Bloca automàticament totes les adreces IPs que utilitze aquest usuari',
+'ipbsubmit'                   => 'Bloqueja aquesta adreça',
+'ipbother'                    => 'Un altre termini',
+'ipboptions'                  => '2 hores:2 hours,1 dia:1 day,3 dies:3 days,1 setmana:1 week,2 setmanes:2 weeks,1 mes:1 month,3 mesos:3 months,6 mesos:6 months,1 any:1 year,infinit:infinite',
+'ipbotheroption'              => 'un altre',
+'badipaddress'                => "L'adreça IP no té el format correcte.",
+'blockipsuccesssub'           => "S'ha blocat amb èxit",
+'blockipsuccesstext'          => 'L\'usuari "[[Special:Contributions/$1|$1]]" ha estat blocat.
+<br />Vegeu la [[Special:Ipblocklist|llista d\'IP blocades]] per revisar els bloquejos.',
+'ipb-unblock-addr'            => 'Desbloca $1',
+'ipb-unblock'                 => 'Desbloca un usuari o una adreça IP',
+'ipb-blocklist-addr'          => 'Llista els bloquejos existents per $1',
+'ipb-blocklist'               => 'Llista els bloquejos existents',
+'unblockip'                   => "Desbloca l'usuari",
+'unblockiptext'               => "Empreu el següent formulari per restaurar
+l'accés a l'escriptura a una adreça IP o un usuari prèviament bloquejat.",
+'ipusubmit'                   => 'Desbloca aquesta adreça',
+'unblocked'                   => "S'ha desbloquejat l'usuari [[User:$1|$1]]",
+'ipblocklist'                 => "Llista d'adreces IP i noms d'usuaris blocats",
+'ipblocklist-submit'          => 'Cerca',
+'blocklistline'               => '$1, $2 bloca $3 ($4)',
+'infiniteblock'               => 'infinit',
+'expiringblock'               => 'venç el $1',
+'anononlyblock'               => 'només usuari anònim',
+'noautoblockblock'            => "S'ha deshabilitat el bloqueig automàtic",
+'createaccountblock'          => "s'ha blocat la creació del compte",
+'ipblocklistempty'            => 'La llista està buida.',
+'blocklink'                   => 'bloca',
+'unblocklink'                 => 'desbloca',
+'contribslink'                => 'contribucions',
+'autoblocker'                 => 'Heu estat blocat perquè compartiu adreça IP amb "$1". Motiu: "$2"',
+'blocklogpage'                => 'Registre de blocatges',
+'blocklogentry'               => 's\'ha blocat "[[$1]]" per a un període de $2 $3',
+'blocklogtext'                => "Això és una relació de accions de bloqueig i desbloqueig. Les adreces IP bloquejades automàticament no apareixen. Vegeu la [[Special:Ipblocklist|llista d'usuaris actualment bloquejats]].",
+'unblocklogentry'             => 'desbloquejat $1',
+'block-log-flags-anononly'    => 'només els usuaris anònims',
+'block-log-flags-nocreate'    => "s'ha desactivat la creació de comptes",
+'block-log-flags-autoblock'   => "s'ha activat el bloqueig automàtic",
+'range_block_disabled'        => 'La facultat dels administradors per crear blocatges de rang està desactivada.',
+'ipb_expiry_invalid'          => "Data d'acabament no vàlida.",
+'ipb_already_blocked'         => '«$1» ja és blocat',
+'ip_range_invalid'            => 'Rang de IP no vàlid.',
+'proxyblocker'                => 'Blocatge de proxy',
+'ipb_cant_unblock'            => "Errada: No s'ha trobat el núm. ID de bloqueig $1. És possible que ja se'n haguera desblocat.",
+'proxyblockreason'            => "La vostra adreça IP ha estat bloquejada perquè és un proxy obert. Si us plau contactau el vostre proveïdor d'Internet o servei tècnic i informau-los d'aquest seriós problema de seguretat.",
+'proxyblocksuccess'           => 'Fet.',
+'sorbs'                       => 'DNSBL',
+'sorbsreason'                 => 'La vostra adreça IP està llistada com a servidor intermediari obert a la llista negra de DNS que consulta aquest lloc web.',
+'sorbs_create_account_reason' => 'La vostra adreça IP està llistada com a servidor intermediari obert a la llista negra de DNS que consulta aquest lloc web. No podeu crear-hi un compte',
+
+# Developer tools
+'lockdb'              => 'Bloca la base de dades',
+'unlockdb'            => 'Desbloca la base de dades',
+'lockdbtext'          => "Blocant la base de dades s'anul·larà la capacitat de tots els
+usuaris d'editar pàgines, canviar les preferències, editar els llistats de seguiments, i
+altres canvis que requereixen canvis en la base de dades.
+Confirmeu que això és el que intenteu fer, i sobretot no us oblideu
+de desblocar la base de dades quan acabeu el manteniment.",
+'unlockdbtext'        => "Desblocant la base de dades es restaurarà l'habilitat de tots
+els usuaris d'editar pàgines, canviar les preferències, editar els llistats de seguiment, i
+altres accions que requereixen canvis en la base de dades.
+Confirmeu que això és el que voleu fer.",
+'lockconfirm'         => 'Sí, realment vull blocar la base de dades.',
+'unlockconfirm'       => 'Sí, realment vull desblocar la base dades.',
+'lockbtn'             => 'Bloca la base de dades',
+'unlockbtn'           => 'Desbloca la base de dades',
+'locknoconfirm'       => 'No heu respost al diàleg de confirmació.',
+'lockdbsuccesssub'    => "S'ha blocat la base de dades",
+'unlockdbsuccesssub'  => "S'ha eliminat el bloqueig de la base de dades",
+'lockdbsuccesstext'   => "S'ha bloquejat la base de dades del projecte {{SITENAME}}.
+<br />Recordeu-vos de treure el bloqueig quan hàgiu acabat el manteniment.",
+'unlockdbsuccesstext' => "S'ha desbloquejat la base de dades del projecte {{SITENAME}}.",
+'lockfilenotwritable' => 'No es pot modificar el fitxer de la base de dades de bloquejos. Per a blocar o desblocar la base de dades, heu de donar-ne permís de modificació al servidor web.',
+'databasenotlocked'   => 'La base de dades no està bloquejada.',
+
+# Move page
+'movepage'                => 'Reanomena la pàgina',
+'movepagetext'            => "Emprant el següent formulari reanomenareu una pàgina,
+movent tota la seva història al nou nom.
+El títol anterior es convertirà en un redireccionament al nou títol.
+Els enllaços a l'antic títol de la pàgina no es canviaran. Assegureu-vos-en de verificar que no deixeu redireccions
+
+dobles o trencades.
+Sou el responsable de fer que els enllaços segueixin apuntant on se suposa que ho facin.
+
+Noteu que la pàgina '''no''' serà traslladada si ja existeix una pàgina amb el títol nou, a no ser que sigui una pàgina buida o un
+
+''redireccionament'' sense història.
+Això significa que podeu reanomenar de nou una pàgina al seu títol original si cometeu un error, i que no podeu sobreescriure una pàgina
+
+existent.
+
+<b>ADVERTÈNCIA!</b>
+Això pot ser un canvi dràstic i inesperat per una pàgina popular;
+assegureu-vos-en d'entendre les conseqüències que comporta
+abans de seguir endavant.",
+'movepagetalktext'        => "La pàgina de discussió associada, si existeix, serà traslladada automàticament '''a menys que:'''
+*Ja existeixi una pàgina de discussió no buida amb el nom nou, o
+*Hàgiu desseleccionat la opció de sota.
+
+En aquests casos, haureu de traslladar o fusionar la pàgina manualment si ho desitgeu.",
+'movearticle'             => 'Reanomena la pàgina',
+'movenologin'             => "No sou a dins d'una sessió",
+'movenologintext'         => "Heu de ser un usuari registrat i estar [[Special:Userlogin|dintre d'una sessió]]
+per reanomenar una pàgina.",
+'newtitle'                => 'A títol nou',
+'move-watch'              => 'Vigila aquesta pàgina',
+'movepagebtn'             => 'Reanomena la pàgina',
+'pagemovedsub'            => 'Reanomenament amb èxit',
+'pagemovedtext'           => 'Pàgina "[[$1]]" reanomenada a "[[$2]]".',
+'articleexists'           => 'Ja existeix una pàgina amb aquest nom, o el nom que heu
+escollit no és vàlid.
+Escolliu un altre nom, si us plau.',
+'talkexists'              => "S'ha reanomenat la pàgina amb èxit, però la pàgina de discussió no s'ha pogut moure car ja no existeix en el títol nou.
+
+Incorporeu-les manualment, si us plau.",
+'movedto'                 => 'reanomenat a',
+'movetalk'                => 'Reanomena també la pàgina de discussió si és aplicable.',
+'talkpagemoved'           => 'També ha estat reanomenada la pàgina de discussió corresponent.',
+'talkpagenotmoved'        => 'La pàgina de discussió corresponent <strong>no</strong> ha estat reanomenada.',
+'1movedto2'               => "[[$1]] s'ha reanomenat com [[$2]]",
+'1movedto2_redir'         => "[[$1]] s'ha reanomenat com [[$2]] amb una redirecció",
+'movelogpage'             => 'Registre de reanomenaments',
+'movelogpagetext'         => 'Vegeu la llista de les darreres pàgines reanomenades.',
+'movereason'              => 'Motiu',
+'revertmove'              => 'revertir',
+'delete_and_move'         => 'Esborra i trasllada',
+'delete_and_move_text'    => '==Cal esborrar==
+
+L\'article de destí, "[[$1]]", ja existeix. Voleu esborrar-lo per fer lloc per al trasllat?',
+'delete_and_move_confirm' => 'Sí, esborra la pàgina',
+'delete_and_move_reason'  => "S'ha eliminat per a permetre el reanomenament",
+'selfmove'                => "Els títols d'origen i de destí coincidixen: no és possible de reanomenar una pàgina a si mateixa.",
+'immobile_namespace'      => "El títol d'origen o de destí és d'un tipus especial; no és possible reanomenar pàgines a aquest espai de noms.",
+
+# Export
+'export'          => 'Exporta les pàgines',
+'exporttext'      => "Podeu exportar cap XML el text i l'historial d'una pàgina en concret o d'un conjunt de pàgines; aleshores el resultat pot importar-se en un altre web basat en wiki amb programari de MediaWiki mitjançant la [[Special:Import|pàgina d'importació]].
+
+Per a exportar pàgines, escrigueu els títols que dessitgeu a la caixa de text de davall, un títol per línia, i seleccioneu si desitgeu o no la versió actual amb totes les versions prèvies, amb la pàgina d'historial, o tan sols la pàgina actual amb la informació de la darrera modificació.
+
+En el darrer cas podeu fer servir un enllaç, com ara [[{{ns:Special}}:Export/{{Mediawiki:mainpage}}]] per a la pàgina {{Mediawiki:mainpage}}.",
+'exportcuronly'   => "Exporta únicament la versió actual en voltes de l'historial sencer",
+'exportnohistory' => "----
+'''Nota:''' s'ha deshabilitat l'exportació sencera d'historial de pàgines mitjançant aquest formulari a causa de problemes de rendiment del servidor.",
+'export-submit'   => 'Exporta',
+
+# Namespace 8 related
+'allmessages'               => 'Tots els missatges del sistema',
+'allmessagesname'           => 'Etiqueta',
+'allmessagesdefault'        => 'Text per defecte',
+'allmessagescurrent'        => 'Text actual',
+'allmessagestext'           => "Tot seguit hi és una llista dels missatges del sistema que es troben a l'espai de noms de ''MediaWiki''.",
+'allmessagesnotsupportedUI' => "La llengua de la vostra interfície actual, <strong>$1</strong>, no es troba implementada en els Special:Allmessages d'aquest lloc.",
+'allmessagesnotsupportedDB' => "No es pot processar '''{{ns:special}}:Allmessages''' perquè la variable '''\$wgUseDatabaseMessages''' hi és desactivada.",
+'allmessagesfilter'         => 'Cerca etiqueta de missatge:',
+'allmessagesmodified'       => 'Mostra només missatges modificats',
+
+# Thumbnails
+'thumbnail-more'  => 'Amplia',
+'missingimage'    => '<b>Manca la imatge</b><br /><i>$1</i>',
+'filemissing'     => 'Fitxer inexistent',
+'thumbnail_error' => "S'ha produït un error en crear la miniatura: $1",
+
+# Special:Import
+'import'                     => 'Importa les pàgines',
+'importinterwiki'            => 'Importa interwiki',
+'import-interwiki-text'      => "Trieu un web basat en wiki i un títol de pàgina per a importar.
+Es conservaran les dates de les versions i els noms dels editors.
+Totes les accions d'importació interwiki es conserven al [[Special:Log/import|registre d'importacions]].",
+'import-interwiki-history'   => "Copia totes les versions de l'historial d'aquesta pàgina",
+'import-interwiki-submit'    => 'Importa',
+'import-interwiki-namespace' => "Transfereix les pàgines a l'espai de noms:",
+'importtext'                 => "Si us plau, exporteu el fitxer des del wiki d'origen utilitzant l'eina Special:Export, alceu-lo al vostre disc dur i carregueu-ne una còpia ací.",
+'importstart'                => "S'està important pàgines...",
+'import-revision-count'      => '$1 {{PLURAL:$1|revisió|revisions}}',
+'importnopages'              => 'No hi ha cap pàgina per importar.',
+'importfailed'               => 'La importació ha fallat: $1',
+'importunknownsource'        => "No es reconeix el tipus de la font d'importació",
+'importcantopen'             => "No ha estat possible d'obrir el fitxer a importar",
+'importbadinterwiki'         => "Enllaç d'interwiki incorrecte",
+'importnotext'               => 'Buit o sense text',
+'importsuccess'              => "S'ha importat amb èxit!",
+'importhistoryconflict'      => "Hi ha un conflicte de versions en l'historial (la pàgina podria haver sigut importada abans)",
+'importnosources'            => "No s'ha definit cap font d'origen interwiki i s'ha deshabilitat la càrrega directa d'una còpia de l'historial",
+'importnofile'               => "No s'ha pujat cap fitxer d'importació.",
+'importuploaderror'          => "Ha fallat la càrrega del fitxer d'importació; potser el seu pes ha excedit el límit màxim.",
+
+# Import log
+'importlogpage'                    => "Registre d'importació",
+'importlogpagetext'                => "Importacions administratives de pàgines amb l'historial des d'altres wikis.",
+'import-logentry-upload'           => "s'ha importat [[$1]] per càrrega de fitxers",
+'import-logentry-upload-detail'    => '$1 revisió/ons',
+'import-logentry-interwiki'        => "s'ha importat $1 via interwiki",
+'import-logentry-interwiki-detail' => '$1 revisió/ons de $2',
+
+# Tooltip help for the actions
+'tooltip-pt-userpage'             => "La vostra pàgina d'usuari.",
+'tooltip-pt-anonuserpage'         => "La pàgina d'usuari per la ip que utilitzeu",
+'tooltip-pt-mytalk'               => 'La vostra pàgina de discussió.',
+'tooltip-pt-anontalk'             => 'Discussió sobre les edicions per aquesta adreça ip.',
+'tooltip-pt-preferences'          => 'Les vostres preferències.',
+'tooltip-pt-watchlist'            => 'La llista de pàgines de les que estau vigilant els canvis.',
+'tooltip-pt-mycontris'            => 'Llista de les vostres contribucions.',
+'tooltip-pt-login'                => 'Us animem a registrar-vos, però no és obligatori.',
+'tooltip-pt-anonlogin'            => 'Us animem a registrar-vos, però no és obligatori.',
+'tooltip-pt-logout'               => "Finalitza la sessió d'usuari",
+'tooltip-ca-talk'                 => "Discussió sobre el contingut d'aquesta pàgina.",
+'tooltip-ca-edit'                 => 'Podeu editar aquesta pàgina. Si us plau, previsualitzeu abans de desar.',
+'tooltip-ca-addsection'           => 'Afegeix un comentari a aquesta discussió.',
+'tooltip-ca-viewsource'           => 'Aquesta pàgina està protegida. Podeu veure el seu codi font.',
+'tooltip-ca-history'              => "Versions antigues d'aquesta pàgina.",
+'tooltip-ca-protect'              => 'Protegeix aquesta pàgina.',
+'tooltip-ca-delete'               => 'Esborra aquesta pàgina.',
+'tooltip-ca-undelete'             => 'Restaura les edicions fetes a aquesta pàgina abans de que fos esborrada.',
+'tooltip-ca-move'                 => 'Reanomena aquesta pàgina.',
+'tooltip-ca-watch'                => 'Afegiu aquesta pàgina a la vostra llista de seguiment.',
+'tooltip-ca-unwatch'              => 'Llevau aquesta pàgina de la vostra llista de seguiment.',
+'tooltip-search'                  => 'Cerca en el projecte {{SITENAME}}',
+'tooltip-p-logo'                  => 'Pàgina principal',
+'tooltip-n-mainpage'              => 'Visiteu la pàgina principal.',
+'tooltip-n-portal'                => 'Sobre el projecte, què podeu fer, on podeu trobar coses.',
+'tooltip-n-currentevents'         => "Per trobar informació general sobre l'actualitat.",
+'tooltip-n-recentchanges'         => 'La llista de canvis recents a la wiki.',
+'tooltip-n-randompage'            => 'Vés a una pàgina aleatòria.',
+'tooltip-n-help'                  => 'El lloc per esbrinar.',
+'tooltip-n-sitesupport'           => 'Feu-nos una donació.',
+'tooltip-t-whatlinkshere'         => 'Llista de totes les pàgines viqui que enllacen ací.',
+'tooltip-t-recentchangeslinked'   => 'Canvis recents a pàgines que enllacen amb aquesta pàgina.',
+'tooltip-feed-rss'                => "Canal RSS d'aquesta pàgina",
+'tooltip-feed-atom'               => "Canal Atom d'aquesta pàgina",
+'tooltip-t-contributions'         => "Vegeu la llista de contribucions d'aquest usuari.",
+'tooltip-t-emailuser'             => 'Envia un correu en aquest usuari.',
+'tooltip-t-upload'                => "Càrrega d'imatges o altres fitxers.",
+'tooltip-t-specialpages'          => 'Llista de totes les pàgines especials.',
+'tooltip-ca-nstab-main'           => 'Vegeu el contingut de la pàgina.',
+'tooltip-ca-nstab-user'           => "Vegeu la pàgina de l'usuari.",
+'tooltip-ca-nstab-media'          => "Vegeu la pàgina de l'element multimèdia",
+'tooltip-ca-nstab-special'        => 'Aquesta pàgina és una pàgina especial, no podeu editar-la.',
+'tooltip-ca-nstab-project'        => 'Vegeu la pàgina del projecte',
+'tooltip-ca-nstab-image'          => 'Vegeu la pàgina de la imatge',
+'tooltip-ca-nstab-mediawiki'      => 'Vegeu el missatge de sistema.',
+'tooltip-ca-nstab-template'       => 'Vegeu la plantilla.',
+'tooltip-ca-nstab-help'           => "Vegeu la pàgina d'ajuda.",
+'tooltip-ca-nstab-category'       => 'Vegeu la pàgina de la categoria.',
+'tooltip-minoredit'               => 'Marca-ho com una edició menor',
+'tooltip-save'                    => 'Desa els vostres canvis',
+'tooltip-preview'                 => 'Reviseu els vostres canvis, feu-ho abans de desar res!',
+'tooltip-diff'                    => 'Mostra quins canvis heu fet al text.',
+'tooltip-compareselectedversions' => "Vegeu les diferències entre les dues versions seleccionades d'aquesta pàgina.",
+'tooltip-watch'                   => 'Afegiu aquesta pàgina a la vostra llista de seguiment',
+'tooltip-recreate'                => 'Recrea la pàgina malgrat hagi estat suprimida',
+
+# Stylesheets
+'common.css'   => '/* Editeu aquest fitxer per personalitzar totes les aparences per al lloc sencer */',
+'monobook.css' => "/* Editeu aquest fitxer per personalitzar l'aparença del monobook per a tot el lloc sencer */",
+
+# Scripts
+'common.js'   => "/* Es carregarà per a tots els usuaris, i per a qualsevol pàgina, el codi JavaScript que hi haja després d'aquesta línia. */",
+'monobook.js' => '/* Deprecated; use [[MediaWiki:common.js]] */',
+
+# Metadata
+'nodublincore'      => "S'han inhabilitat les metadades RDF de Dublin Core del servidor.",
+'nocreativecommons' => "S'han inhabilitat les metadades RDF de Creative Commons del servidor.",
+'notacceptable'     => 'El servidor wiki no pot oferir dades en un format que el client no pot llegir.',
+
+# Attribution
+'anonymous'        => 'Usuaris anònims del projecte {{SITENAME}}',
+'siteuser'         => 'Usuari $1 del projecte {{SITENAME}}',
+'lastmodifiedatby' => 'Va modificar-se la pàgina per darrera vegada el $2, $1 per $3.', # $1 date, $2 time, $3 user
+'and'              => 'i',
+'othercontribs'    => 'Basat en les contribucions de $1.',
+'others'           => 'altres',
+'siteusers'        => '{{SITENAME}} usuaris $1',
+'creditspage'      => 'Títols de la pàgina',
+'nocredits'        => 'No hi ha títols disponibles per aquesta pàgina.',
+
+# Spam protection
+'spamprotectiontitle'    => 'Filtre de protecció de brossa',
+'spamprotectiontext'     => 'La pàgina que volíeu desar va ser blocada pel filtre de brossa. Probablement per un enllaç a un lloc extern.',
+'spamprotectionmatch'    => 'El següent text és el que va disparar el nostre filtre de brossa: $1',
+'subcategorycount'       => "Hi ha {{PLURAL:$1|una subcategoria|$1 subcategories}} dins d'aquesta categoria.",
+'categoryarticlecount'   => 'Hi ha {{PLURAL:$1|un article|$1 articles}} en aquesta categoria.',
+'category-media-count'   => 'Aquesta categoria conté {{PLURAL:$1|un arxiu|$1 arxius}}.',
+'listingcontinuesabbrev' => ' cont.',
+'spambot_username'       => "Neteja MediaWiki d'spam",
+'spam_reverting'         => 'Es reverteix a la darrera versió que no conté enllaços a $1',
+'spam_blanking'          => "Totes les revisions contenien enllaços $1, s'està deixant en blanc",
+
+# Info page
+'infosubtitle'   => 'Informació de la pàgina',
+'numedits'       => "Nombre d'edicions (article): $1",
+'numtalkedits'   => "Nombre d'edicions (pàgina de discussió): $1",
+'numwatchers'    => "Nombre d'usuaris que l'estan vigilant: $1",
+'numauthors'     => "Nombre d'autors (article): $1",
+'numtalkauthors' => "Nombre d'autors (pàgina de discussió): $1",
+
+# Math options
+'mw_math_png'    => 'Produeix sempre PNG',
+'mw_math_simple' => 'HTML si és molt simple, si no PNG',
+'mw_math_html'   => 'HTML si és possible, si no PNG',
+'mw_math_source' => 'Deixa com a TeX (per a navegadors de text)',
+'mw_math_modern' => 'Recomanat per navegadors moderns',
+'mw_math_mathml' => 'MathML si és possible (experimental)',
+
+# Patrolling
+'markaspatrolleddiff'                 => 'Marca com a supervisat',
+'markaspatrolledtext'                 => "Marca l'article com a supervisat",
+'markedaspatrolled'                   => 'Marca com a supervisat',
+'markedaspatrolledtext'               => "S'ha marcat la revisió seleccionada com supervisada.",
+'rcpatroldisabled'                    => "S'ha deshabilitat la supervisió dels canvis recents",
+'rcpatroldisabledtext'                => 'La funció de supervisió de canvis recents és actualment deshabilitada.',
+'markedaspatrollederror'              => 'No es pot marcar com a supervisat',
+'markedaspatrollederrortext'          => 'Cal que especifiqueu una versió per a marcar-la com a supervisada.',
+'markedaspatrollederror-noautopatrol' => 'No podeu marcar les vostres pròpies modificacions com a supervisades.',
+
+# Patrol log
+'patrol-log-page' => 'Registre de supervisió',
+'patrol-log-line' => "s'ha marcat la versió $1 de $2 com a supervisat $3",
+'patrol-log-auto' => '(automàtic)',
+'patrol-log-diff' => 'r$1',
+
+# Image deletion
+'deletedrevision' => "S'ha eliminat la revisió antiga $1.",
+
+# Browsing diffs
+'previousdiff' => '← Ves a la diferència prèvia',
+'nextdiff'     => 'Vés a la pròxima diferència →',
+
+'imagemaxsize' => "Limita les imatges de les pàgines de descripció d'imatges a:",
+'thumbsize'    => 'Mida de la miniatura:',
+'showbigimage' => "Baixa la versió d'alta resolució ($1x$2, $3 kB)",
+
+'newimages'    => 'Galeria de nous fitxers',
+'showhidebots' => '($1 bots)',
+'noimages'     => 'Res per veure.',
+
+# Labels for User: and Title: on Special:Log pages
+'specialloguserlabel'  => 'Usuari:',
+'speciallogtitlelabel' => 'Títol:',
+
+'passwordtooshort' => 'La contrasenya és massa curta. Com ha mínim ha de tenir $1 caràcters.',
+
+# Media Warning
+'mediawarning' => "'''Advertència''': Aquest arxiu pot contenir codi maliciós, si l'executeu podeu comprometre la seguretat del vostre sistema.<hr />",
+
+'fileinfo' => '$1KB, tipus MIME: <code>$2</code>',
+
+# Metadata
+'metadata'          => 'Metadades',
+'metadata-help'     => "Aquest arxiu conté informació addicional, probablement afegida per la càmera digital o l'escànner usat per a crear-lo o digitalitzar-lo. Si l'arxiu ha estat modificat posteriorment, alguns detalls poden no correspondre amb l'informació real de l'arxiu.",
+'metadata-expand'   => 'Mostra els detalls estesos',
+'metadata-collapse' => 'Amaga els detalls estesos',
+'metadata-fields'   => 'Els camps de metadades EXIF llistats en aquest missatge es mostraran en la pàgina de descripció de la imatge fins i tot quan la taula estigui plegada. La resta estaran ocults però es podran desplegar.
+* make
+* model
+* datetimeoriginal
+* exposuretime
+* fnumber
+* focallength',
+
+# EXIF tags
+'exif-imagewidth'                  => 'Amplada',
+'exif-imagelength'                 => 'Alçada',
+'exif-bitspersample'               => 'Octets per component',
+'exif-compression'                 => 'Esquema de compressió',
+'exif-photometricinterpretation'   => 'Composició dels píxels',
+'exif-orientation'                 => 'Orientació',
+'exif-samplesperpixel'             => 'Nombre de components',
+'exif-planarconfiguration'         => 'Ordenament de dades',
+'exif-ycbcrsubsampling'            => 'Proporció de mostreig secundari de Y amb C',
+'exif-ycbcrpositioning'            => 'Posició YCbCr',
+'exif-xresolution'                 => 'Resolució horitzontal',
+'exif-yresolution'                 => 'Resolució vertical',
+'exif-resolutionunit'              => 'Unitats de les resolucions X i Y',
+'exif-stripoffsets'                => 'Ubicació de les dades de la imatge',
+'exif-rowsperstrip'                => 'Nombre de fileres per franja',
+'exif-stripbytecounts'             => 'Octets per franja comprimida',
+'exif-jpeginterchangeformat'       => 'Ancorament del JPEG SOI',
+'exif-jpeginterchangeformatlength' => 'Octets de dades JPEG',
+'exif-transferfunction'            => 'Funció de transferència',
+'exif-whitepoint'                  => 'Cromositat del punt blanc',
+'exif-primarychromaticities'       => 'Coordenada cromàtica del color primari',
+'exif-ycbcrcoefficients'           => "Quoficients de la matriu de transformació de l'espai colorimètric",
+'exif-referenceblackwhite'         => 'Valors de referència negre i blanc',
+'exif-datetime'                    => "Data i hora de modificació de l'arxiu",
+'exif-imagedescription'            => 'Títol de la imatge',
+'exif-make'                        => 'Fabricant de la càmera',
+'exif-model'                       => 'Model de càmera',
+'exif-software'                    => 'Programari utilitzat',
+'exif-artist'                      => 'Autor',
+'exif-copyright'                   => "Titular dels drets d'autor",
+'exif-exifversion'                 => 'Versió Exif',
+'exif-flashpixversion'             => 'Versió Flashpix admesa',
+'exif-colorspace'                  => 'Espai de color',
+'exif-componentsconfiguration'     => 'Significat de cada component',
+'exif-compressedbitsperpixel'      => "Mode de compressió d'imatge",
+'exif-pixelydimension'             => 'Amplada de la imatge',
+'exif-pixelxdimension'             => 'Alçada de la imatge',
+'exif-makernote'                   => 'Notes del fabricant',
+'exif-usercomment'                 => "Comentaris de l'usuari",
+'exif-relatedsoundfile'            => "Fitxer d'àudio relacionat",
+'exif-datetimeoriginal'            => 'Dia i hora de generació de les dades',
+'exif-datetimedigitized'           => 'Dia i hora de digitalització',
+'exif-subsectime'                  => 'Data i hora, fraccions de segon',
+'exif-subsectimeoriginal'          => 'Data i hora de creació, fraccions de segon',
+'exif-subsectimedigitized'         => 'Data i hora de digitalització, fraccions de segon',
+'exif-exposuretime'                => "Temps d'exposició",
+'exif-exposuretime-format'         => '$1 s ($2)',
+'exif-fnumber'                     => 'Obertura del diafragma',
+'exif-fnumber-format'              => 'f/$1',
+'exif-exposureprogram'             => "Programa d'exposició",
+'exif-spectralsensitivity'         => 'Sensibilitat espectral',
+'exif-isospeedratings'             => 'Sensibilitat ISO',
+'exif-oecf'                        => 'Factor de conversió optoelectrònic',
+'exif-shutterspeedvalue'           => "Temps d'exposició",
+'exif-aperturevalue'               => 'Obertura',
+'exif-brightnessvalue'             => 'Brillantor',
+'exif-exposurebiasvalue'           => "Correcció d'exposició",
+'exif-maxaperturevalue'            => "Camp d'obertura màxim",
+'exif-subjectdistance'             => 'Distància del subjecte',
+'exif-meteringmode'                => 'Mode de mesura',
+'exif-lightsource'                 => 'Font de llum',
+'exif-flash'                       => 'Flash',
+'exif-focallength'                 => 'Longitud focal de la lent',
+'exif-focallength-format'          => '$1 mm',
+'exif-subjectarea'                 => 'Enquadre del subjecte',
+'exif-flashenergy'                 => 'Energia del flash',
+'exif-spatialfrequencyresponse'    => 'Resposta en freqüència espacial',
+'exif-focalplanexresolution'       => 'Resolució X del pla focal',
+'exif-focalplaneyresolution'       => 'Resolució Y del pla focal',
+'exif-focalplaneresolutionunit'    => 'Unitat de resolució del pla focal',
+'exif-subjectlocation'             => 'Posició del subjecte',
+'exif-exposureindex'               => "Índex d'exposició",
+'exif-sensingmethod'               => 'Mètode de detecció',
+'exif-filesource'                  => 'Font del fitxer',
+'exif-scenetype'                   => "Tipus d'escena",
+'exif-cfapattern'                  => 'Patró CFA',
+'exif-customrendered'              => "Processament d'imatge personalitzat",
+'exif-exposuremode'                => "Mode d'exposició",
+'exif-whitebalance'                => 'Balanç de blancs',
+'exif-digitalzoomratio'            => "Escala d'ampliació digital (zoom)",
+'exif-focallengthin35mmfilm'       => 'Distància focal per a pel·lícula de 35 mm',
+'exif-scenecapturetype'            => "Tipus de captura d'escena",
+'exif-gaincontrol'                 => "Control d'escena",
+'exif-contrast'                    => 'Contrast',
+'exif-saturation'                  => 'Saturació',
+'exif-sharpness'                   => 'Nitidesa',
+'exif-devicesettingdescription'    => 'Descripció dels paràmetres del dispositiu',
+'exif-subjectdistancerange'        => 'Escala de distància del subjecte',
+'exif-imageuniqueid'               => 'Identificador únic de la imatge',
+'exif-gpsversionid'                => 'Versió del tag GPS',
+'exif-gpslatituderef'              => 'Latitud nord o sud',
+'exif-gpslatitude'                 => 'Latitud',
+'exif-gpslongituderef'             => 'Longitud est o oest',
+'exif-gpslongitude'                => 'Longitud',
+'exif-gpsaltituderef'              => "Referència d'altitud",
+'exif-gpsaltitude'                 => 'Altitud',
+'exif-gpstimestamp'                => 'Hora GPS (rellotge atòmic)',
+'exif-gpssatellites'               => 'Satèl·lits usats per la mesura',
+'exif-gpsstatus'                   => 'Estat del receptor',
+'exif-gpsmeasuremode'              => 'Mode de mesura',
+'exif-gpsdop'                      => 'Precisió de la mesura',
+'exif-gpsspeedref'                 => 'Unitats de velocitat',
+'exif-gpsspeed'                    => 'Velocitat del receptor GPS',
+'exif-gpstrackref'                 => 'Referència per la direcció del moviment',
+'exif-gpstrack'                    => 'Direcció del moviment',
+'exif-gpsimgdirectionref'          => 'Referència per la direcció de la imatge',
+'exif-gpsimgdirection'             => 'Direcció de la imatge',
+'exif-gpsmapdatum'                 => 'Geodetic survey data used',
+'exif-gpsdestlatituderef'          => 'Referència per a la latitud del destí',
+'exif-gpsdestlatitude'             => 'Latitud de la destinació',
+'exif-gpsdestlongituderef'         => 'Referència per a la longitud del destí',
+'exif-gpsdestlongitude'            => 'Longitud de la destinació',
+'exif-gpsdestbearingref'           => "Referència per a l'orientació de destí",
+'exif-gpsdestbearing'              => 'Orientació del destí',
+'exif-gpsdestdistanceref'          => 'Referència de la distància a la destinació',
+'exif-gpsdestdistance'             => 'Distància a la destinació',
+'exif-gpsprocessingmethod'         => 'Nom del mètode de processament GPS',
+'exif-gpsareainformation'          => "Nom de l'àrea GPS",
+'exif-gpsdatestamp'                => 'Data GPS',
+'exif-gpsdifferential'             => 'Correcció diferencial GPS',
+
+# EXIF attributes
+'exif-compression-1' => 'Sense compressió',
+'exif-compression-6' => 'JPEG',
+
+'exif-photometricinterpretation-2' => 'RGB',
+'exif-photometricinterpretation-6' => 'YCbCr',
+
+'exif-unknowndate' => 'Data desconeguda',
+
+'exif-orientation-1' => 'Normal', # 0th row: top; 0th column: left
+'exif-orientation-2' => 'Invertit horitzontalment', # 0th row: top; 0th column: right
+'exif-orientation-3' => 'Girat 180°', # 0th row: bottom; 0th column: right
+'exif-orientation-4' => 'Invertit verticalment', # 0th row: bottom; 0th column: left
+'exif-orientation-5' => 'Rotat 90° en sentit antihorari i invertit verticalment', # 0th row: left; 0th column: top
+'exif-orientation-6' => 'Rotat 90° en sentit horari', # 0th row: right; 0th column: top
+'exif-orientation-7' => 'Rotat 90° en sentit horari i invertit verticalment', # 0th row: right; 0th column: bottom
+'exif-orientation-8' => 'Rotat 90° en sentit antihorari', # 0th row: left; 0th column: bottom
+
+'exif-planarconfiguration-1' => 'a blocs densos (chunky)',
+'exif-planarconfiguration-2' => 'format pla',
+
+'exif-xyresolution-i' => '$1 ppp',
+'exif-xyresolution-c' => '$1 ppc',
+
+'exif-colorspace-1'      => 'sRGB',
+'exif-colorspace-ffff.h' => 'FFFF.H',
+
+'exif-componentsconfiguration-0' => 'no existeix',
+'exif-componentsconfiguration-1' => 'Y',
+'exif-componentsconfiguration-2' => 'Cb',
+'exif-componentsconfiguration-3' => 'Cr',
+'exif-componentsconfiguration-4' => 'R',
+'exif-componentsconfiguration-5' => 'G',
+'exif-componentsconfiguration-6' => 'B',
+
+'exif-exposureprogram-0' => 'No definit',
+'exif-exposureprogram-1' => 'Manual',
+'exif-exposureprogram-2' => 'Programa normal',
+'exif-exposureprogram-3' => "amb prioritat d'obertura",
+'exif-exposureprogram-4' => "amb prioritat de velocitat d'obturació",
+'exif-exposureprogram-5' => 'Programa creatiu (preferència a la profunditat de camp)',
+'exif-exposureprogram-6' => "Programa acció (preferència a la velocitat d'obturació)",
+'exif-exposureprogram-7' => 'Mode retrat (per primers plans amb fons desenfocat)',
+'exif-exposureprogram-8' => 'Mode paisatge (per fotos de paisatges amb el fons enfocat)',
+
+'exif-subjectdistance-value' => '$1 metres',
+
+'exif-meteringmode-0'   => 'Desconegut',
+'exif-meteringmode-1'   => 'Mitjana',
+'exif-meteringmode-2'   => 'Mesura central mitjana',
+'exif-meteringmode-3'   => 'Puntual',
+'exif-meteringmode-4'   => 'Multipuntual',
+'exif-meteringmode-5'   => 'Patró',
+'exif-meteringmode-6'   => 'Parcial',
+'exif-meteringmode-255' => 'Altres',
+
+'exif-lightsource-0'   => 'Desconegut',
+'exif-lightsource-1'   => 'Llum de dia',
+'exif-lightsource-2'   => 'Fluorescent',
+'exif-lightsource-3'   => 'Tungstè (llum incandescent)',
+'exif-lightsource-4'   => 'Flaix',
+'exif-lightsource-9'   => 'Clar',
+'exif-lightsource-10'  => 'Ennuvolat',
+'exif-lightsource-11'  => 'Ombra',
+'exif-lightsource-12'  => 'Fluorescent de llum del dia (D 5700 – 7100K)',
+'exif-lightsource-13'  => 'Fluorescent de llum blanca (N 4600 – 5400K)',
+'exif-lightsource-14'  => 'Fluorescent blanc fred (W 3900 – 4500K)',
+'exif-lightsource-15'  => 'Fluorescent blanc (WW 3200 – 3700K)',
+'exif-lightsource-17'  => 'Llum estàndard A',
+'exif-lightsource-18'  => 'Llum estàndard B',
+'exif-lightsource-19'  => 'Llum estàndard C',
+'exif-lightsource-20'  => 'D55',
+'exif-lightsource-21'  => 'D65',
+'exif-lightsource-22'  => 'D75',
+'exif-lightsource-23'  => 'D50',
+'exif-lightsource-24'  => "Bombeta de tungsten d'estudi ISO",
+'exif-lightsource-255' => 'Altre font de llum',
+
+'exif-focalplaneresolutionunit-2' => 'polzades',
+
+'exif-sensingmethod-1' => 'Indefinit',
+'exif-sensingmethod-2' => "Sensor d'àrea de color a un xip",
+'exif-sensingmethod-3' => "Sensor d'àrea de color a dos xips",
+'exif-sensingmethod-4' => "Sensor d'àrea de color a tres xips",
+'exif-sensingmethod-5' => "Sensor d'àrea de color per seqüències",
+'exif-sensingmethod-7' => 'Sensor trilineal',
+'exif-sensingmethod-8' => 'Sensor linear de color per seqüències',
+
+'exif-filesource-3' => 'DSC',
+
+'exif-scenetype-1' => 'Una imatge fotografiada directament',
+
+'exif-customrendered-0' => 'Procés normal',
+'exif-customrendered-1' => 'Processament personalitzat',
+
+'exif-exposuremode-0' => 'Exposició automàtica',
+'exif-exposuremode-1' => 'Exposició manual',
+'exif-exposuremode-2' => 'Bracketting automàtic',
+
+'exif-whitebalance-0' => 'Balanç automàtic de blancs',
+'exif-whitebalance-1' => 'Balanç manual de blancs',
+
+'exif-scenecapturetype-0' => 'Estàndard',
+'exif-scenecapturetype-1' => 'Paisatge',
+'exif-scenecapturetype-2' => 'Retrat',
+'exif-scenecapturetype-3' => 'Escena nocturna',
+
+'exif-gaincontrol-0' => 'Cap',
+'exif-gaincontrol-1' => 'Low gain up',
+'exif-gaincontrol-2' => 'High gain up',
+'exif-gaincontrol-3' => 'Low gain down',
+'exif-gaincontrol-4' => 'High gain down',
+
+'exif-contrast-0' => 'Normal',
+'exif-contrast-1' => 'Suau',
+'exif-contrast-2' => 'Fort',
+
+'exif-saturation-0' => 'Normal',
+'exif-saturation-1' => 'Baixa saturació',
+'exif-saturation-2' => 'Alta saturació',
+
+'exif-sharpness-0' => 'Normal',
+'exif-sharpness-1' => 'Suau',
+'exif-sharpness-2' => 'Fort',
+
+'exif-subjectdistancerange-0' => 'Desconeguda',
+'exif-subjectdistancerange-1' => 'Macro',
+'exif-subjectdistancerange-2' => 'Subjecte a prop',
+'exif-subjectdistancerange-3' => 'Subjecte lluny',
+
+# Pseudotags used for GPSLatitudeRef and GPSDestLatitudeRef
+'exif-gpslatitude-n' => 'Latitud nord',
+'exif-gpslatitude-s' => 'Latitud sud',
+
+# Pseudotags used for GPSLongitudeRef and GPSDestLongitudeRef
+'exif-gpslongitude-e' => 'Longitud est',
+'exif-gpslongitude-w' => 'Longitud oest',
+
+'exif-gpsstatus-a' => 'Mesura en curs',
+'exif-gpsstatus-v' => 'Interoperabilitat de mesura',
+
+'exif-gpsmeasuremode-2' => 'Mesura bidimensional',
+'exif-gpsmeasuremode-3' => 'Mesura tridimensional',
+
+# Pseudotags used for GPSSpeedRef and GPSDestDistanceRef
+'exif-gpsspeed-k' => 'Quilòmetres per hora',
+'exif-gpsspeed-m' => 'Milles per hora',
+'exif-gpsspeed-n' => 'Nusos',
+
+# Pseudotags used for GPSTrackRef, GPSImgDirectionRef and GPSDestBearingRef
+'exif-gpsdirection-t' => 'Direcció real',
+'exif-gpsdirection-m' => 'Direcció magnètica',
+
+# External editor support
+'edit-externally'      => 'Edita aquest fitxer fent servir una aplicació externa',
+'edit-externally-help' => 'Vegeu les [http://meta.wikimedia.org/wiki/Help:External_editors instruccions de configuració] per a més informació.',
+
+# 'all' in various places, this might be different for inflected languages
+'recentchangesall' => 'tots',
+'imagelistall'     => 'totes',
+'watchlistall1'    => 'totes',
+'watchlistall2'    => 'totes',
+'namespacesall'    => 'tots',
+
+# E-mail address confirmation
+'confirmemail'            => "Confirma l'adreça de correu electrònic",
+'confirmemail_noemail'    => "No heu introduït una direcció vàlida de correu electrònic en les vostres [[Special:Preferences|preferències d'usuari]].",
+'confirmemail_text'       => "El programari del sistema necessita que valideu la vostra adreça de correu
+electrònic per a poder gaudir d'algunes facilitats. Cliqueu el botó inferior
+per enviar un codi de confirmació a la vostra adreça. Seguiu l'enllaç que
+hi haurà al missatge enviat per a confirmar que el vostre correu és correcte.",
+'confirmemail_pending'    => "<div class=\"error\">
+Ja s'ha enviat el vostre codi de confirmació per correu electrònic; si
+fa poc hi heu creat el vostre compte, abans de mirar de demanar un nou
+codi, primer hauríeu d'esperar alguns minuts per a rebre'l.
+</div>",
+'confirmemail_send'       => 'Envia per correu electrònic un codi de confirmació',
+'confirmemail_sent'       => "S'ha enviat un missatge de confirmació.",
+'confirmemail_oncreate'   => "S'ha enviat un codi de confirmació a la vostra adreça de correu electrònic.
+No es requereix aquest codi per a autenticar-s'hi, però vos caldrà proporcionar-lo
+abans d'activar qualsevol funcionalitat del wiki basada en missatges
+de correu electrònic.",
+'confirmemail_sendfailed' => "No s'ha pogut enviar un missatge de confirmació. Comproveu que l'adreça no tingui caràcters no vàlids.
+
+El programari de correu retornà el següent missatge: $1",
+'confirmemail_invalid'    => 'El codi de confirmació no és vàlid. Aquest podria haver vençut.',
+'confirmemail_needlogin'  => 'Necessiteu $1 per a confirmar la vostra adreça electrònica.',
+'confirmemail_success'    => "S'ha confirmat la vostra adreça electrònica. Ara podeu iniciar una sessió i gaudir del wiki.",
+'confirmemail_loggedin'   => "Ja s'ha confirmat la vostra adreça electrònica.",
+'confirmemail_error'      => 'Quelcom ha fallat en desar la vostra confirmació.',
+'confirmemail_subject'    => "Confirmació de l'adreça electrònica del projecte {{SITENAME}}",
+'confirmemail_body'       => "Algú, segurament vós, ha registrat el compte «$2» al projecte {{SITENAME}}
+amb aquesta adreça electrònica des de l'adreça IP $1.
+
+Per a confirmar que aquesta adreça electrònica us pertany realment
+i així activar les opcions de correu del programari, seguiu aquest enllaç:
+
+$3
+
+Si '''no''' heu estat vós, no el cliqueu. Aquest codi de confirmació
+caducarà a $4.",
+
+# Inputbox extension, may be useful in other contexts as well
+'tryexact'       => 'Prova una coincidència exacta',
+'searchfulltext' => 'Cerca un text sencer',
+'createarticle'  => 'Crea un article',
+
+# Scary transclusion
+'scarytranscludedisabled' => "[S'ha deshabilitat la transclusió interwiki]",
+'scarytranscludefailed'   => '[Ha fallat la recuperació de la plantilla per a $1; ho sentim]',
+'scarytranscludetoolong'  => "[L'URL és massa llarg; ho sento]",
+
+# Trackbacks
+'trackbackbox'      => '<div id="mw_trackbacks">
+Referències d\'aquest article:<br />
+$1
+</div>',
+'trackbackremove'   => ' ([$1 eliminada])',
+'trackbacklink'     => 'Referència',
+'trackbackdeleteok' => "La referència s'ha eliminat amb èxit.",
+
+# Delete conflict
+'deletedwhileediting' => "Avís: S'ha suprimit aquesta pàgina abans que haguéssiu començat a editar-la!",
+'confirmrecreate'     => "L'usuari [[User:$1|$1]] ([[User talk:$1|discussió]]) va esborrar aquesta pàgina que havíeu creat donant -ne el següent motiu:
+: ''$2''
+Confirmeu que realment voleu tornar-la a crear.",
+'recreate'            => 'Recrea',
+
+'unit-pixel' => 'px',
+
+# HTML dump
+'redirectingto' => "S'està redirigint a [[$1]]...",
+
+# action=purge
+'confirm_purge'        => "Voleu buidar la memòria cau d'aquesta pàgina?
+
+$1",
+'confirm_purge_button' => "D'acord",
+
+'youhavenewmessagesmulti' => 'Teniu nous missatges a $1',
+
+'searchcontaining' => "Cerca articles que continguin ''$1''.",
+'searchnamed'      => "Cerca els articles que s'anomenin ''$1''.",
+'articletitles'    => "Articles que comencen amb ''$1''",
+'hideresults'      => 'Amaga els resultats',
+
+# DISPLAYTITLE
+'displaytitle' => '(Enllaça a aquesta pàgina com [[$1]])',
+
+'loginlanguagelabel' => 'Idioma: $1',
+
+# Multipage image navigation
+'imgmultipageprev'   => '&larr; pàgina prèvia',
+'imgmultipagenext'   => 'pàgina següent &rarr;',
+'imgmultigo'         => 'Vés-hi',
+'imgmultigotopre'    => 'Ve a la pàgina',
+'imgmultiparseerror' => "Sembla que el fitxer de la imatge és corromput o no és vàlid, i per això no s'ha pogut procedir una llista de pàgines en {{SITENAME}}.",
+
+# Table pager
+'ascending_abbrev'         => 'asc',
+'descending_abbrev'        => 'desc',
+'table_pager_next'         => 'Pàgina següent',
+'table_pager_prev'         => 'Pàgina anterior',
+'table_pager_first'        => 'Primera pàgina',
+'table_pager_last'         => 'Darrera pàgina',
+'table_pager_limit'        => 'Mostra $1 elements per pàgina',
+'table_pager_limit_submit' => 'Vés',
+'table_pager_empty'        => 'Sense resultats',
+
+# Auto-summaries
+'autosumm-blank'   => "S'esta suprimint tot el contingut de la pàgina",
+'autosumm-replace' => 'Contingut canviat per «$1».',
+'autoredircomment' => "S'està redirigint a [[$1]]", # This should be changed to the new naming convention, but existed beforehand
+'autosumm-new'     => 'Pàgina nova, amb el contingut: «$1».',
+
+# Size units
+'size-bytes'     => '$1 B',
+'size-kilobytes' => '$1 KB',
+'size-megabytes' => '$1 MB',
+'size-gigabytes' => '$1 GB',
+
+# Live preview
+'livepreview-loading' => 'Carregant-se…',
+'livepreview-ready'   => 'Carregant-se… Llestos!',
+'livepreview-failed'  => 'Ha fallat la vista ràpida!
+Trieu amb la previsualització normal.',
+'livepreview-error'   => 'La conexió no ha estat possible: $1 "$2"
+Trieu amb la previsualització normal.',
+
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesCe.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesCe.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesCe.php	(revision 1280)
@@ -0,0 +1,8 @@
+<?php
+/** Chechen (Нохчийн)
+  *
+  * @addtogroup Language
+  */
+
+$fallback = 'ru';
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesCs.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesCs.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesCs.php	(revision 1280)
@@ -0,0 +1,2162 @@
+<?php
+/** Czech (česky)
+ *
+ * @addtogroup Language
+ */
+$fallback8bitEncoding = 'cp1250';
+
+$namespaceNames = array(
+	NS_MEDIA              => 'Média',
+	NS_SPECIAL            => 'Speciální',
+	NS_MAIN               => '',
+	NS_TALK               => 'Diskuse',
+	NS_USER               => 'Uživatel',
+	NS_USER_TALK          => 'Uživatel_diskuse',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK	      => '$1_diskuse',
+	NS_IMAGE              => 'Soubor',
+	NS_IMAGE_TALK         => 'Soubor_diskuse',
+	NS_MEDIAWIKI          => 'MediaWiki',
+	NS_MEDIAWIKI_TALK     => 'MediaWiki_diskuse',
+	NS_TEMPLATE           => 'Šablona',
+	NS_TEMPLATE_TALK      => 'Šablona_diskuse',
+	NS_HELP               => 'Nápověda',
+	NS_HELP_TALK          => 'Nápověda_diskuse',
+	NS_CATEGORY           => 'Kategorie',
+	NS_CATEGORY_TALK      => 'Kategorie_diskuse',
+);
+
+/**
+ * Skin names. If any key is not specified, the English one will be used.
+ */
+ $skinNames = array(
+	'standard'            => 'Standard',
+	'nostalgia'           => 'Nostalgie',
+	'cologneblue'         => 'Kolínská modř',
+	'chick'               => 'Kuře'
+);
+
+$datePreferences = false;
+
+$defaultDateFormat = 'dmy';
+
+$dateFormats = array(
+	'dmy time' => 'H:i',
+	'dmy date' => 'j. n. Y',
+	'dmy both' => 'H:i, j. n. Y',
+);
+
+/**
+ * Hledání knihy podle ISBN
+ * Default list of book sources
+ */
+$bookstoreList = array(
+    'Národní knihovna'			=> 'http://sigma.nkp.cz/F/?func=find-a&find_code=ISN&request=$1',
+	'Státní technická knihovna' => 'http://www.stk.cz/cgi-bin/dflex/CZE/STK/BROWSE?A=01&V=$1',
+	'inherit' => true,
+);
+
+/**
+ * Magic words
+ * Customisable syntax for wikitext and elsewhere
+ *
+ * Note to translators:
+ *   Please include the English words as synonyms.  This allows people
+ *   from other wikis to contribute more easily.
+ *
+ * This array can be modified at runtime with the LanguageGetMagic hook
+ */
+ $magicWords = array(
+##   ID                                 CASE  SYNONYMS
+	'redirect'               => array( 0,    '#REDIRECT',        '#PŘESMĚRUJ'         ),
+	'notoc'                  => array( 0,    '__NOTOC__',        '__BEZOBSAHU__'      ),
+	'nogallery'              => array( 0,    '__NOGALLERY__',    '__BEZGALERIE__'     ),
+	'forcetoc'               => array( 0,    '__FORCETOC__',     '__VŽDYOBSAH__'      ),
+	'toc'                    => array( 0,    '__TOC__',          '__OBSAH__'          ),
+	'noeditsection'          => array( 0,    '__NOEDITSECTION__', '__BEZEDITOVATČÁST__' ),
+	'start'                  => array( 0,    '__START__',        '__ZAČÁTEK__'        ),
+	'currentmonth'           => array( 1,    'CURRENTMONTH',     'AKTUÁLNÍMĚSÍC'      ),
+	'currentmonthname'       => array( 1,    'CURRENTMONTHNAME', 'AKTUÁLNÍMĚSÍCJMÉNO' ),
+	'currentmonthnamegen'    => array( 1,    'CURRENTMONTHNAMEGEN', 'AKTUÁLNÍMĚSÍCGEN' ),
+	'currentmonthabbrev'     => array( 1,    'CURRENTMONTHABBREV', 'AKTUÁLNÍMĚSÍCZKR' ),
+	'currentday'             => array( 1,    'CURRENTDAY',       'AKTUÁLNÍDEN'        ),
+	'currentday2'            => array( 1,    'CURRENTDAY2',      'AKTUÁLNÍDEN2'       ),
+	'currentdayname'         => array( 1,    'CURRENTDAYNAME',   'AKTUÁLNÍDENJMÉNO'   ),
+	'currentyear'            => array( 1,    'CURRENTYEAR',      'AKTUÁLNÍROK'        ),
+	'currenttime'            => array( 1,    'CURRENTTIME',      'AKTUÁLNÍČAS'        ),
+	'currenthour'            => array( 1,    'CURRENTHOUR',      'AKTUÁLNÍHODINA'     ),
+	'localmonth'             => array( 1,    'LOCALMONTH',       'MÍSTNÍMĚSÍC'        ),
+	'localmonthname'         => array( 1,    'LOCALMONTHNAME',   'MÍSTNÍMĚSÍCJMÉNO'   ),
+	'localmonthnamegen'      => array( 1,    'LOCALMONTHNAMEGEN','MÍSTNÍMĚSÍCGEN'     ),
+	'localmonthabbrev'       => array( 1,    'LOCALMONTHABBREV', 'MÍSTNÍMĚSÍCZKR'     ),
+	'localday'               => array( 1,    'LOCALDAY',         'MÍSTNÍDEN'          ),
+	'localday2'              => array( 1,    'LOCALDAY2',        'MÍSTNÍDEN2'         ),
+	'localdayname'           => array( 1,    'LOCALDAYNAME',     'MÍSTNÍDENJMÉNO'     ),
+	'localyear'              => array( 1,    'LOCALYEAR',        'MÍSTNÍROK'          ),
+	'localtime'              => array( 1,    'LOCALTIME',        'MÍSTNÍČAS'          ),
+	'localhour'              => array( 1,    'LOCALHOUR',        'MÍSTNÍHODINA'       ),
+	'numberofpages'          => array( 1,    'NUMBEROFPAGES',    'POČETSTRAN'         ),
+	'numberofarticles'       => array( 1,    'NUMBEROFARTICLES', 'POČETČLÁNKŮ'        ),
+	'numberoffiles'          => array( 1,    'NUMBEROFFILES',    'POČETSOUBORŮ'       ),
+	'numberofusers'          => array( 1,    'NUMBEROFUSERS',    'POČETUŽIVATELŮ'     ),
+	'pagename'               => array( 1,    'PAGENAME',         'NÁZEVSTRANY'        ),
+	'pagenamee'              => array( 1,    'PAGENAMEE',        'NÁZEVSTRANYE'       ),
+	'namespace'              => array( 1,    'NAMESPACE',        'JMENNÝPROSTOR'      ),
+	'namespacee'             => array( 1,    'NAMESPACEE',       'JMENNÝPROSTORE'     ),
+	'talkspace'              => array( 1,    'TALKSPACE',        'DISKUSNÍPROSTOR'    ),
+	'talkspacee'             => array( 1,    'TALKSPACEE',       'DISKUSNÍPROSTORE'   ),
+	'subjectspace'           => array( 1,    'SUBJECTSPACE', 'ARTICLESPACE', 'ČLÁNEKPROSTOR' ),
+	'subjectspacee'          => array( 1,    'SUBJECTSPACEE', 'ARTICLESPACEE', 'ČLÁNEKPROSTORE' ),
+	'fullpagename'           => array( 1,    'FULLPAGENAME',     'PLNÝNÁZEVSTRANY'    ),
+	'fullpagenamee'          => array( 1,    'FULLPAGENAMEE',    'PLNÝNÁZEVSTRANYE'   ),
+	'subpagename'            => array( 1,    'SUBPAGENAME',      'NÁZEVPODSTRANY'     ),
+	'subpagenamee'           => array( 1,    'SUBPAGENAMEE',     'NÁZEVPODSTRANYE'    ),
+	'basepagename'           => array( 1,    'BASEPAGENAME',     'NÁZEVNADSTRANY'     ),
+	'basepagenamee'          => array( 1,    'BASEPAGENAMEE',    'NÁZEVNADSTRANYE'    ),
+	'talkpagename'           => array( 1,    'TALKPAGENAME',     'NÁZEVDISKUSE'       ),
+	'talkpagenamee'          => array( 1,    'TALKPAGENAMEE',    'NÁZEVDISKUSEE'      ),
+	'subjectpagename'        => array( 1,    'SUBJECTPAGENAME', 'ARTICLEPAGENAME', 'NÁZEVČLÁNKU' ),
+	'subjectpagenamee'       => array( 1,    'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE', 'NÁZEVČLÁNKUE' ),
+	'msg'                    => array( 0,    'MSG:'                   ),
+	'subst'                  => array( 0,    'SUBST:',           'VLOŽIT:'            ),
+	'msgnw'                  => array( 0,    'MSGNW:',           'VLOŽITNW:'          ),
+	'img_thumbnail'          => array( 1,    'thumbnail', 'thumb', 'náhled'           ),
+	'img_manualthumb'        => array( 1,    'thumbnail=$1', 'thumb=$1', 'náhled=$1'  ),
+	'img_right'              => array( 1,    'right',            'vpravo'             ),
+	'img_left'               => array( 1,    'left',             'vlevo'              ),
+	'img_none'               => array( 1,    'none',             'žádné'              ),
+	'img_width'              => array( 1,    '$1px'                   ),
+	'img_center'             => array( 1,    'center', 'centre', 'střed'              ),
+	'img_framed'             => array( 1,    'framed', 'enframed', 'frame', 'rám'     ),
+	'img_page'               => array( 1,    'page=$1', 'page $1', 'strana=$1', 'strana $1'      ),
+	'img_baseline'           => array( 1,    'baseline'               ),
+	'img_sub'                => array( 1,    'sub'                    ),
+	'img_super'              => array( 1,    'super', 'sup'           ),
+	'img_top'                => array( 1,    'top'                    ),
+	'img_text-top'           => array( 1,    'text-top'               ),
+	'img_middle'             => array( 1,    'middle'                 ),
+	'img_bottom'             => array( 1,    'bottom'                 ),
+	'img_text-bottom'        => array( 1,    'text-bottom'            ),
+	'int'                    => array( 0,    'INT:'                   ),
+	'sitename'               => array( 1,    'SITENAME',         'NÁZEVSERVERU'       ),
+	'ns'                     => array( 0,    'NS:'                    ),
+	'localurl'               => array( 0,    'LOCALURL:',        'MÍSTNÍURL:'         ),
+	'localurle'              => array( 0,    'LOCALURLE:',       'MÍSTNÍURLE:'        ),
+	'server'                 => array( 0,    'SERVER'                 ),
+	'servername'             => array( 0,    'SERVERNAME',       'JMÉNOSERVERU'       ),
+	'scriptpath'             => array( 0,    'SCRIPTPATH'             ),
+	'grammar'                => array( 0,    'GRAMMAR:',         'SKLOŇUJ:'           ),
+	'notitleconvert'         => array( 0,    '__NOTITLECONVERT__', '__NOTC__', '__BEZKONVERZENADPISU__'),
+	'nocontentconvert'       => array( 0,    '__NOCONTENTCONVERT__', '__NOCC__', '__BEZKONVERZEOBSAHU__'),
+	'currentweek'            => array( 1,    'CURRENTWEEK',      'AKTUÁLNÍTÝDEN'      ),
+	'currentdow'             => array( 1,    'CURRENTDOW',       'AKTUÁLNÍDENTÝDNE'   ),
+	'localweek'              => array( 1,    'LOCALWEEK',        'MÍSTNÍTÝDEN'        ),
+	'localdow'               => array( 1,    'LOCALDOW',         'MÍSTNÍDENTÝDNE'     ),
+	'revisionid'             => array( 1,    'REVISIONID',       'IDREVIZE'           ),
+	'revisionday'            => array( 1,    'REVISIONDAY',      'DENREVIZE'          ),
+	'revisionday2'           => array( 1,    'REVISIONDAY2',     'DENREVIZE2'         ),
+	'revisionmonth'          => array( 1,    'REVISIONMONTH',    'MĚSÍCREVIZE'        ),
+	'revisionyear'           => array( 1,    'REVISIONYEAR',     'ROKREVIZE'          ),
+	'revisiontimestamp'      => array( 1,    'REVISIONTIMESTAMP','KÓDČASUREVIZE'      ),
+	'plural'                 => array( 0,    'PLURAL:',          'PLURÁL:'            ),
+	'fullurl'                => array( 0,    'FULLURL:',         'PLNÉURL:'           ),
+	'fullurle'               => array( 0,    'FULLURLE:',        'PLNÉURLE:'          ),
+	'lcfirst'                => array( 0,    'LCFIRST:',         'PRVNÍMALÉ:'         ),
+	'ucfirst'                => array( 0,    'UCFIRST:',         'PRVNÍVELKÉ:'        ),
+	'lc'                     => array( 0,    'LC:',              'MALÁ:'              ),
+	'uc'                     => array( 0,    'UC:',              'VELKÁ:'             ),
+	'raw'                    => array( 0,    'RAW:'                                   ),
+	'displaytitle'           => array( 1,    'DISPLAYTITLE',     'ZOBRAZOVANÝNADPIS'  ),
+	'rawsuffix'              => array( 1,    'R'                      ),
+	'newsectionlink'         => array( 1,    '__NEWSECTIONLINK__', '__LINKPŘIDATKOMENTÁŘ__' ),
+	'currentversion'         => array( 1,    'CURRENTVERSION',   'VERZESOFTWARE'      ),
+	'urlencode'              => array( 0,    'URLENCODE:'                             ),
+	'anchorencode'           => array( 0,    'ANCHORENCODE'                           ),
+	'currenttimestamp'       => array( 1,    'CURRENTTIMESTAMP', 'AKTUÁLNÍKÓDČASU'    ),
+	'localtimestamp'         => array( 1,    'LOCALTIMESTAMP',   'MÍSTNÍKÓDČASU'      ),
+	'directionmark'          => array( 1,    'DIRECTIONMARK', 'DIRMARK' ),
+	'language'               => array( 0,    '#LANGUAGE:',       '#JAZYK:'            ),
+	'contentlanguage'        => array( 1,    'CONTENTLANGUAGE', 'CONTENTLANG', 'JAZYKOBSAHU' ),
+	'pagesinnamespace'       => array( 1,    'PAGESINNAMESPACE:', 'PAGESINNS:', 'STRÁNEKVEJMENNÉMPROSTORU:' ),
+	'numberofadmins'         => array( 1,    'NUMBEROFADMINS',   'POČETSPRÁVCŮ'       ),
+	'formatnum'              => array( 0,    'FORMATNUM',        'FORMÁTUJČÍSLO'      ),
+	'padleft'                => array( 0,    'PADLEFT',          'ZAROVNATVLEVO'      ),
+	'padright'               => array( 0,    'PADRIGHT',         'ZAROVNATVPRAVO'     ),
+	'special'                => array( 0,    'special', 'speciální'              ),
+	'defaultsort'            => array( 1,    'DEFAULTSORT:', 'KLÍČŘAZENÍ:'            ),
+
+);
+
+/**
+ * Regular expression matching the "link trail", e.g. "ed" in [[Toast]]ed, as 
+ * the first group, and the remainder of the string as the second group.
+ */
+# Písmena, která se mají objevit jako část odkazu ve formě '[[jazyk]]y' atd:
+$linkTrail = '/^([a-záčďéěíňóřšťúůýž]+)(.*)$/sDu';
+
+
+$separatorTransformTable = array(',' => "\xc2\xa0", '.' => ',' );
+
+$messages = array(
+# User preference toggles
+'tog-underline'               => 'Podtrhnout odkazy',
+'tog-highlightbroken'         => 'Formátovat odkazy na neexistující články <a href="#" class="new">takto</a> (alternativa: takto<a href="#" class="broken">?</a>).',
+'tog-justify'                 => 'Zarovnat odstavce do bloku',
+'tog-hideminor'               => 'Skrýt malé editace v posledních změnách',
+'tog-extendwatchlist'         => 'Rozšířený seznam sledovaných stránek',
+'tog-usenewrc'                => 'Zdokonalené poslední změny (JavaScript)',
+'tog-numberheadings'          => 'Automaticky číslovat nadpisy',
+'tog-showtoolbar'             => 'Ukázat lištu s nástroji při editaci',
+'tog-editondblclick'          => 'Editovat dvojklikem (JavaScript)',
+'tog-editsection'             => 'Zapnout možnost editace části článku pomocí odkazu [editovat]',
+'tog-editsectiononrightclick' => 'Zapnout možnost editace části článku pomocí kliknutí pravým tlačítkem na nadpisy v článku (JavaScript)',
+'tog-showtoc'                 => 'Ukázat obsah článku (pokud má článek více než tři nadpisy)',
+'tog-rememberpassword'        => 'Pamatovat si mé heslo mezi návštěvami',
+'tog-editwidth'               => 'Roztáhnout editační okno na celou šířku',
+'tog-watchcreations'          => 'Přidávat mnou založené stránky ke sledovaným',
+'tog-watchdefault'            => 'Přidávat mnou editované stránky ke sledovaným',
+'tog-watchmoves'              => 'Přidávat přesouvané stránky mezi sledované',
+'tog-watchdeletion'           => 'Přidávat stránky, které smažu, mezi sledované',
+'tog-minordefault'            => 'Označit editaci implicitně jako malá editace',
+'tog-previewontop'            => 'Zobrazovat náhled před editačním oknem (ne za ním)',
+'tog-previewonfirst'          => 'Zobrazit při první editaci náhled',
+'tog-nocache'                 => 'Nepoužívat cache',
+'tog-enotifwatchlistpages'    => 'Poslat e-mail při změně sledované stránky',
+'tog-enotifusertalkpages'     => 'Poslat e-mail při změně mé diskusní stránky',
+'tog-enotifminoredits'        => 'Poslat e-mail i pro menší editace (které jinak nezpůsobují odeslání e-mailu)',
+'tog-enotifrevealaddr'        => 'Prozradit mou e-mailovou adresu v upozorňujících e-mailech',
+'tog-shownumberswatching'     => 'Zobrazovat počet sledujících uživatelů',
+'tog-fancysig'                => 'Neupravovat podpis (nevkládat automaticky odkaz)',
+'tog-externaleditor'          => 'Implicitně používat externí editor',
+'tog-externaldiff'            => 'Implicitně používat externí porovnávací program',
+'tog-showjumplinks'           => 'Používat odkazy „skočit na“ pro vyšší přístupnost',
+'tog-uselivepreview'          => 'Používat rychlý náhled (JavaScript) (Experimentální)',
+'tog-forceeditsummary'        => 'Upozornit, když nevyplním shrnutí editace',
+'tog-watchlisthideown'        => 'Na seznamu sledovaných stránek skrýt moje editace',
+'tog-watchlisthidebots'       => 'Na seznamu sledovaných stránek skrýt editace botů',
+'tog-watchlisthideminor'      => 'Skrýt malé editace z mých sledovaných stránek',
+'tog-nolangconversion'        => 'Vypnout konverzi variant',
+'tog-ccmeonemails'            => 'Zasílat mi kopie e-mailů, které pošlu jiným uživatelům',
+'tog-diffonly'                => 'Nezobrazovat obsah stránky pod rozdílem verzí',
+
+'underline-always'  => 'Vždy',
+'underline-never'   => 'Nikdy',
+'underline-default' => 'Podle prohlížeče',
+
+'skinpreview' => '(Náhled)',
+
+# Dates
+'sunday'        => 'neděle',
+'monday'        => 'pondělí',
+'tuesday'       => 'úterý',
+'wednesday'     => 'středa',
+'thursday'      => 'čtvrtek',
+'friday'        => 'pátek',
+'saturday'      => 'sobota',
+'sun'           => 'ne',
+'mon'           => 'po',
+'tue'           => 'út',
+'wed'           => 'st',
+'thu'           => 'čt',
+'fri'           => 'pá',
+'sat'           => 'so',
+'january'       => 'leden',
+'february'      => 'únor',
+'march'         => 'březen',
+'april'         => 'duben',
+'may_long'      => 'květen',
+'june'          => 'červen',
+'july'          => 'červenec',
+'august'        => 'srpen',
+'september'     => 'září',
+'october'       => 'říjen',
+'november'      => 'listopad',
+'december'      => 'prosinec',
+'january-gen'   => 'ledna',
+'february-gen'  => 'února',
+'march-gen'     => 'března',
+'april-gen'     => 'dubna',
+'may-gen'       => 'května',
+'june-gen'      => 'června',
+'july-gen'      => 'července',
+'august-gen'    => 'srpna',
+'september-gen' => 'září',
+'october-gen'   => 'října',
+'november-gen'  => 'listopadu',
+'december-gen'  => 'prosince',
+'jan'           => '1.',
+'feb'           => '2.',
+'mar'           => '3.',
+'apr'           => '4.',
+'may'           => '5.',
+'jun'           => '6.',
+'jul'           => '7.',
+'aug'           => '8.',
+'sep'           => '9.',
+'oct'           => '10.',
+'nov'           => '11.',
+'dec'           => '12.',
+
+# Bits of text used by many pages
+'categories'            => 'Kategorie',
+'pagecategories'        => 'Kategorie',
+'category_header'       => 'Články v kategorii „$1“',
+'subcategories'         => 'Podkategorie',
+'category-media-header' => 'Soubory v kategorii „$1“',
+
+'mainpagetext'      => "<big>'''MediaWiki bylo úspěšně nainstalováno.'''</big>",
+'mainpagedocfooter' => '[http://meta.wikimedia.org/wiki/Help:Contents Průvodce uživatele] Vám napoví jak používat MediaWiki.
+
+== Začínáme ==
+
+* [http://www.mediawiki.org/wiki/Help:Configuration_settings Nastavená konfigurace]
+* [http://www.mediawiki.org/wiki/Help:FAQ Často kladené otázky o MediaWiki]
+* [http://mail.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]',
+
+'about'          => 'Úvod',
+'article'        => 'Obsahová stránka',
+'newwindow'      => '(otevře se v novém okně)',
+'cancel'         => 'Storno',
+'qbfind'         => 'Hledání',
+'qbbrowse'       => 'Listování',
+'qbedit'         => 'Editování',
+'qbpageoptions'  => 'Tato stránka',
+'qbpageinfo'     => 'Kontext',
+'qbmyoptions'    => 'Moje volby',
+'qbspecialpages' => 'Speciální stránky',
+'moredotdotdot'  => 'Další…',
+'mypage'         => 'Moje stránka',
+'mytalk'         => 'Moje diskuse',
+'anontalk'       => 'Diskuse k této IP adrese',
+'navigation'     => 'Navigace',
+
+# Metadata in edit box
+'metadata_help' => 'Metadata:',
+
+'errorpagetitle'    => 'Chyba',
+'returnto'          => 'Návrat na stránku „$1“.',
+'tagline'           => 'Z {{grammar:2sg|{{SITENAME}}}}',
+'help'              => 'Nápověda',
+'search'            => 'Hledat',
+'searchbutton'      => 'Hledat',
+'go'                => 'Jít na',
+'searcharticle'     => 'Jít na',
+'history'           => 'Historie stránky',
+'history_short'     => 'Historie',
+'updatedmarker'     => 'změněno od poslední návštěvy',
+'info_short'        => 'Informace',
+'printableversion'  => 'Verze k tisku',
+'permalink'         => 'Trvalý odkaz',
+'print'             => 'Vytisknout',
+'edit'              => 'Editovat',
+'editthispage'      => 'Editovat stránku',
+'delete'            => 'Smazat',
+'deletethispage'    => 'Smazat stránku',
+'undelete_short'    => 'Obnovit $1 {{plural:$1|verzi|verze|verzí}}',
+'protect'           => 'Zamknout',
+'protectthispage'   => 'Zamknout stránku',
+'unprotect'         => 'Odemknout',
+'unprotectthispage' => 'Odemknout stránku',
+'newpage'           => 'Nová stránka',
+'talkpage'          => 'Diskusní stránka',
+'specialpage'       => 'Speciální stránka',
+'personaltools'     => 'Osobní nástroje',
+'postcomment'       => 'Přidat komentář',
+'articlepage'       => 'Prohlédnout si článek',
+'talk'              => 'Diskuse',
+'views'             => 'Zobrazení',
+'toolbox'           => 'Nástroje',
+'userpage'          => 'Prohlédnout si uživatelovu stránku',
+'projectpage'       => 'Prohlédnout si stránku o projektu',
+'imagepage'         => 'Prohlédnout si stránku o obrázku',
+'mediawikipage'     => 'Prohlédnout si text rozhraní',
+'templatepage'      => 'Prohlédnout si šablonu',
+'viewhelppage'      => 'Prohlédnout si stránku nápovědy',
+'categorypage'      => 'Prohlédnout si stránku kategorie',
+'viewtalkpage'      => 'Prohlédnout si diskusi',
+'otherlanguages'    => 'V jiných jazycích',
+'redirectedfrom'    => '(Přesměrováno z $1)',
+'redirectpagesub'   => 'Přesměrování',
+'lastmodifiedat'    => ' Stránka byla naposledy editována v $2, $1.', # $1 date, $2 time
+'viewcount'         => 'Stránka byla zobrazena $1krát.',
+'protectedpage'     => 'Zamčená stránka',
+'jumpto'            => 'Přejít na:',
+'jumptonavigation'  => 'navigace',
+'jumptosearch'      => 'hledání',
+
+# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
+'aboutsite'         => 'O&nbsp;{{grammar:6sg|{{SITENAME}}}}',
+'aboutpage'         => 'Project:{{SITENAME}}',
+'bugreports'        => 'Hlášení chyb',
+'bugreportspage'    => 'Project:Chyby',
+'copyright'         => 'Obsah je dostupný pod $1.',
+'copyrightpagename' => 'podmínek {{grammar:2sg|{{SITENAME}}}}',
+'copyrightpage'     => '{{ns:4}}:Autorské právo',
+'currentevents'     => 'Aktuality',
+'currentevents-url' => 'Aktuality',
+'disclaimers'       => 'Vyloučení odpovědnosti',
+'disclaimerpage'    => 'Project:Vyloučení odpovědnosti',
+'edithelp'          => 'Pomoc při editování',
+'edithelppage'      => 'Help:Jak editovat stránku',
+'faq'               => 'Často kladené otázky',
+'faqpage'           => 'Project:Často kladené otázky',
+'helppage'          => 'Help:Obsah',
+'mainpage'          => 'Hlavní strana',
+'policy-url'        => 'Project:Pravidla',
+'portal'            => 'Portál {{grammar:2sg|{{SITENAME}}}}',
+'portal-url'        => 'Project:Portál {{grammar:2sg|{{SITENAME}}}}',
+'privacy'           => 'Ochrana osobních údajů',
+'privacypage'       => 'Project:Ochrana osobních údajů',
+'sitesupport'       => 'Sponzorství',
+'sitesupport-url'   => 'Project:Sponzorství',
+
+'badaccess'        => 'Nedostatečná oprávnění',
+'badaccess-group0' => 'Nemáte oprávnění k provedené požadované činnosti.',
+'badaccess-group1' => 'Požadovanou činnost smějí provádět jen uživatelé ve skupině $1.',
+'badaccess-group2' => 'Požadovanou činnost smějí provádět jen uživatelé ve skupinách $1.',
+'badaccess-groups' => 'Požadovanou činnost smějí provádět jen uživatelé ve skupinách $1.',
+
+'versionrequired'     => 'Vyžadováno MediaWiki verze $1',
+'versionrequiredtext' => 'Pro použití této stránky je vyžadováno MediaWiki verze $1. Vizte [[{{ns:-1}}:Version]].',
+
+'ok'                  => 'OK',
+'pagetitle'           => '$1 - {{SITENAME}}',
+'retrievedfrom'       => 'Citováno z „$1“',
+'youhavenewmessages'  => 'Máte $1 ($2).',
+'newmessageslink'     => 'nové zprávy',
+'newmessagesdifflink' => 'rozdíl oproti předchozí verzi',
+'editsection'         => 'editovat',
+'editold'             => 'editovat',
+'editsectionhint'     => 'Editace části $1',
+'toc'                 => 'Obsah',
+'showtoc'             => 'zobrazit',
+'hidetoc'             => 'skrýt',
+'thisisdeleted'       => 'Prohlédnout nebo obnovit $1?',
+'viewdeleted'         => 'Zobrazit $1?',
+'restorelink'         => '{{plural:$1|smazanou editaci|$1 smazané editace|$1 smazaných editací}}',
+'feedlinks'           => 'Kanály:',
+'feed-invalid'        => 'Neplatný typ kanálu.',
+
+# Short words for each namespace, by default used in the 'article' tab in monobook
+'nstab-main'      => 'Článek',
+'nstab-user'      => 'Uživatelova stránka',
+'nstab-media'     => 'Soubor',
+'nstab-special'   => 'Speciální',
+'nstab-project'   => '{{SITENAME}}',
+'nstab-image'     => 'Soubor',
+'nstab-mediawiki' => 'Hlášení',
+'nstab-template'  => 'Šablona',
+'nstab-help'      => 'Nápověda',
+'nstab-category'  => 'Kategorie',
+
+# Main script and global functions
+'nosuchaction'      => 'Neznámý úkon',
+'nosuchactiontext'  => 'Tato wiki nezná činnost (action) uvedenou v URL.',
+'nosuchspecialpage' => 'Neexistující speciální stránka',
+'nospecialpagetext' => 'Žádaná speciální stránka na této wiki neexistuje.',
+
+# General errors
+'error'                => 'Chyba',
+'databaseerror'        => 'Databázová chyba',
+'dberrortext'          => "Při dotazu do databáze došlo k syntaktické chybě.
+Příčinou může být chyba v programu.
+Poslední dotaz byl:
+<blockquote><tt>$1</tt></blockquote>
+z funkce '<tt>$2</tt>'.
+MySQL vrátil chybu '<tt>$3: $4</tt>'.",
+'dberrortextcl'        => 'Při dotazu do databáze došlo k syntaktické chybě.
+Poslední dotaz byl:
+"$1"
+z funkce "$2".
+MySQL vrátil chybu "$3: $4"',
+'noconnect'            => 'Promiňte! Tato wiki má nějaké technické potíže a nepodařilo se připojit k databázovém serveru.<br />
+$1',
+'nodb'                 => 'Nebylo možné vybrat databázi $1',
+'cachederror'          => 'Následuje kopie požadované stránky z cache, která nemusí být aktuální.',
+'laggedslavemode'      => 'Upozornění: Stránka nemusí být zcela aktuální.',
+'readonly'             => 'Databáze je uzamčena',
+'enterlockreason'      => 'Udejte důvod zamčení, včetně odhadu, za jak dlouho dojde k odemčení.',
+'readonlytext'         => 'Databáze je nyní uzamčena, takže nelze ukládat nové doplňky a změny. Důvodem je pravděpodobně pravidelná údržba, po které se vše vrátí do normálního stavu. 
+
+Správce, který databázi zamkl, zanechal následující zprávu: $1',
+'missingarticle'       => 'Databáze nenašla text článku, který měla najít, nazvaného „$1“.
+
+Důvodem je obvykle zastaralý odkaz do historie smazané stránky.
+
+V jiném případě jste možná narazil(a) na chybu v programu. Oznamte to prosím správci systému (zapamatujte si použité URL).',
+'readonly_lag'         => 'Databáze byla automaticky dočasně uzamčena kvůli zpoždění ostatních databázových servery proti hlavnímu',
+'internalerror'        => 'Vnitřní chyba',
+'filecopyerror'        => 'Nebylo možné zkopírovat soubor  „$1“ na „$2“.',
+'filerenameerror'      => 'Nebylo možné přejmenovat soubor „$1“ na „$2“.',
+'filedeleteerror'      => 'Nebylo možné smazat soubor „$1“.',
+'filenotfound'         => 'Nebylo možné najít soubor „$1“.',
+'unexpected'           => 'Neočekávaná hodnota: "$1"="$2".',
+'formerror'            => 'Chyba: nebylo možné odeslat formulář',
+'badarticleerror'      => 'Tento úkon nelze použít na tento článek.',
+'cannotdelete'         => 'Nebylo možné smazat zvolenou stránku ani soubor. (Možná už byla smazána někým jiným.)',
+'badtitle'             => 'Neplatný název',
+'badtitletext'         => 'Požadovaný název stránky byl neplatný, prázdný nebo obsahoval nesprávnou předponu mezijazykového či interwiki odkazu. Možná obsahoval znaky, které v názvu nejsou dovoleny.',
+'perfdisabled'         => 'Omlouváme se. Tato služba byla dočasně znepřístupněna, protože zpomalovala databázi natolik, že nikdo nemohl používat wiki.',
+'perfdisabledsub'      => 'Tady je uložená kopie z $1:', # obsolete?
+'perfcached'           => 'Následující data jsou z cache a nemusí být plně aktuální:',
+'perfcachedts'         => 'Následující data jsou z cache, která byla naposledy aktualizována $1.',
+'querypage-no-updates' => 'Aktualizace této stránky je vypnuta. Data teď nebudou obnoveny.',
+'wrong_wfQuery_params' => 'Nesprávné parametry do wfQuery()<br />
+Funkce: $1<br />
+Dotaz: $2',
+'viewsource'           => ' Ukázat zdroj',
+'viewsourcefor'        => 'stránky $1',
+'protectedpagetext'    => 'Tato stránka byla zamčena, takže ji nelze editovat.',
+'viewsourcetext'       => 'Můžete si prohlédnout a zkopírovat zdrojový kód této stránky:',
+'protectedinterface'   => 'Tato stránka obsahuje text softwarového rozhraní a smějí ji editovat jen správci.',
+'editinginterface'     => "'''Upozornění:''' Editujete stránku, která definuje texty rozhraní. Změny této stránky ovlivní vzhled uživatelského rozhraní všem uživatelům.",
+'sqlhidden'            => '(SQL dotaz skryt)',
+'cascadeprotected'     => 'Tato stránka je zamčena, neboť je vložena do následujících stránek zamčených kaskádovým zámkem:',
+
+# Login and logout pages
+'logouttitle'                => 'Na shledanou!',
+'logouttext'                 => 'Nyní jste odhlášeni.<br />
+Tento počítač může být používán k prohlížení a editaci {{grammar:2sg|{{SITENAME}}}} bez uživatelského jména, nebo pro přihlášení jiného uživatele. Upozorňujeme, že některé stránky se mohou i nadále zobrazovat, jako byste byli dosud přihlášeni. Tento jev potrvá do smazání cache vašeho prohlížeče.',
+'welcomecreation'            => '== Vítejte, $1! ==
+Váš účet byl vytvořen. Nezapomeňte si upravit své [[Special:Preferences|nastavení]]!',
+'loginpagetitle'             => 'Přihlaste se',
+'yourname'                   => 'Název vašeho účtu',
+'yourpassword'               => 'Vaše heslo',
+'yourpasswordagain'          => 'Napište heslo znovu',
+'remembermypassword'         => 'Trvalé přihlášení',
+'yourdomainname'             => 'Vaše doména',
+'externaldberror'            => 'Buď nastalo chyba v databázi pro externí autentikaci, nebo nemáte dovoleno měnit svůj externí účet.',
+'loginproblem'               => '<b>Nastal problém při vašem přihlášení.</b><br />Zkuste to znovu!',
+'alreadyloggedin'            => '<strong>Uživateli $1, již jste přihlášen!</strong><br />',
+'login'                      => 'Přihlaste se',
+'loginprompt'                => 'K přihlášení do {{grammar:2sg|{{SITENAME}}}} musíte mít povoleny cookies.',
+'userlogin'                  => 'Přihlaste se',
+'logout'                     => 'Odhlásit se',
+'userlogout'                 => 'Odhlášení',
+'notloggedin'                => 'Nejste přihlášen(a)',
+'nologin'                    => 'Dosud nemáte účet? $1.',
+'nologinlink'                => 'Zaregistrujte se',
+'createaccount'              => 'Vytvořit nový účet',
+'gotaccount'                 => 'Už jste registrováni? $1.',
+'gotaccountlink'             => 'Přihlaste se',
+'createaccountmail'          => 'pomocí e-mailu',
+'badretype'                  => 'Vámi napsaná hesla nesouhlasí.',
+'userexists'                 => 'Uživatel se stejným jménem je už registrován. Zvolte jiné jméno.',
+'youremail'                  => 'Vaše e-mailová adresa: *)',
+'username'                   => 'Uživatelské jméno:',
+'uid'                        => 'Uživatelské ID:',
+'yourrealname'               => 'Vaše skutečné jméno: **)',
+'yourlanguage'               => 'Jazyk rozhraní',
+'yourvariant'                => 'Jazyková varianta',
+'yournick'                   => 'Alternativní podpis',
+'badsig'                     => 'Chybný podpis, zkontrolujte syntaxi HTML.',
+'email'                      => 'E-mail',
+'prefs-help-email-enotif'    => 'Na tuto adresu vám budou zasílány informace o změně stránek, pokud o ně požádáte.',
+'prefs-help-realname'        => '**) Skutečné jméno (volitelné): pokud ho zadáte, bude použito pro označení autorství vaší práce.<br />',
+'loginerror'                 => 'Chyba při přihlašování',
+'prefs-help-email'           => '*) E-mail (volitelný): Umožní ostatním uživatelům vás kontaktovat, aniž by tato adresa byla zobrazena; také vám na tuto adresu může být zasláno nové heslo v případě, že své heslo zapomenete.',
+'nocookiesnew'               => 'Uživatelský účet byl vytvřen, ale nejste přihlášeni. {{SITENAME}} používá cookies k přihlášení uživatelů. Vy máte cookies vypnuty. Prosím zapněte je a přihlaste se znovu s vaším novým uživatelským jménem a heslem.',
+'nocookieslogin'             => '{{SITENAME}} používá cookies k přihlášení uživatelů. Vy máte cookies vypnuty. Prosím zapněte je a zkuste znovu.',
+'noname'                     => 'Musíte uvést jméno svého účtu.',
+'loginsuccesstitle'          => 'Přihlášení uspělo',
+'loginsuccess'               => 'Nyní jste přihlášen na {{grammar:6sg|{{SITENAME}}}} jako uživatel „$1“.',
+'nosuchuser'                 => 'Neexistuje uživatel se jménem „$1“. Zkontrolujte zápis, nebo si vytvořte nový účet.',
+'nosuchusershort'            => 'Neexistuje uživatel se jménem „$1“. Zkontrolujte zápis.',
+'nouserspecified'            => 'Musíte zadat uživatelské jméno.',
+'wrongpassword'              => 'Vámi uvedené heslo nesouhlasí. Zkuste to znovu.',
+'wrongpasswordempty'         => 'Zadané heslo bylo prázdné. Zkuste to znovu.',
+'mailmypassword'             => 'Poslat e-mailem dočasné heslo',
+'passwordremindertitle'      => 'Připomenutí ztraceného hesla z {{grammar:2sg|{{SITENAME}}}}',
+'passwordremindertext'       => 'Někdo (patrně Vy, z IP adresy $1) žádal, abychom Vám poslali nové heslo pro přihlášení do {{SITENAME}} ($4).
+
+ Heslo pro uživatele "$2" je nyní "$3". Doporučujeme přihlásit se nyní a změnit heslo.
+Pokud jste o změnu hesla nežádali nebo jste si na původní heslo již vzpomněli a už ho změnit
+nechcete, můžete tuto zprávu ignorovat a používat staré heslo.',
+'noemail'                    => 'Uživatel „$1“ nemá zaregistrovanou e-mailovou adresu.',
+'passwordsent'               => 'Dočasné heslo bylo zasláno na e-mailovou adresu registrovanou pro „$1“. Přihlaste se, prosím, znovu, jakmile ho obdržíte.',
+'blocked-mailpassword'       => 'Vaší IP adrese byla zablokována možnost editace, a současně s tím je zablokována funkce pro zaslání nového hesla.',
+'eauthentsent'               => 'Potvrzovací e-mail byl zaslán na zadanou adresu.
+Před tím, než vám na tuto adresu budou moci být zasílány další zprávy, následujte instrukce
+v e-mailu, abyste potvrdili, že tato adresa skutečně patří vám.',
+'throttled-mailpassword'     => 'Heslo již bylo jednou zasláno během uplynulých $1 hodin. 
+Heslo může být zasláno jen jednou za $1 {{plural:$1|hodinu|hodiny|hodin}}.',
+'mailerror'                  => 'Chyba při zasílání e-mailu: $1',
+'acct_creation_throttle_hit' => 'Omlouváme se, ale už jste vyrobil(a) $1 účtů. Žádný další už nemůžete vytvořit.',
+'emailauthenticated'         => 'Vaše e-mailová adresa byla ověřena $1.',
+'emailnotauthenticated'      => 'Vaše e-mailová adresa dosud nebyla ověřena a e-mailové funkce do té doby nejsou dostupné.',
+'noemailprefs'               => 'Pro zprovoznění následujících možností musíte zadat svou e-mailovou adresu.',
+'emailconfirmlink'           => 'Podvrďte svou e-mailovou adresu',
+'invalidemailaddress'        => 'Zadaná e-mailová adresa nemůže být přijata, neboť nemá správný formát. Zadejte laskavě platnou e-mailovou adresu, nebo obsah tohoto pole vymažte.',
+'accountcreated'             => 'Účet vytvořen',
+'accountcreatedtext'         => 'Uživatelský účet $1 byl vytvořen.',
+
+# Password reset dialog
+'resetpass'               => 'Nové nastavení hesla účtu',
+'resetpass_announce'      => 'Přihlašujete se dočasným heslem zaslaným e-mailem. Přihlášení lze dokončit po nastavení nového trvalého hesla.',
+'resetpass_text'          => '<!-- Sem přidejte text -->',
+'resetpass_header'        => 'Nové nastavení hesla',
+'resetpass_submit'        => 'Nastavit heslo a přihlásit se',
+'resetpass_success'       => 'Vaše heslo bylo úspěšně změněno. Probíhá přihlašování...',
+'resetpass_bad_temporary' => 'Neplatné dočasné heslo. Možná již bylo heslo úspěšně změněno nebo někdo znovu požádal o nové dočasné heslo.',
+'resetpass_forbidden'     => 'Na této wiki heslo nelze změnit.',
+'resetpass_missing'       => 'Ve formuláři nejsou žádná data.',
+
+# Edit page toolbar
+'bold_sample'     => 'Tučný text',
+'bold_tip'        => ' Tučný text',
+'italic_sample'   => 'Kurzíva',
+'italic_tip'      => 'Kurzíva',
+'link_sample'     => 'Název odkazu',
+'link_tip'        => 'Vnitřní odkaz',
+'extlink_sample'  => 'http://www.example.com Titulek odkazu',
+'extlink_tip'     => 'Externí odkaz (nezapomeňte na předponu http://)',
+'headline_sample' => 'Text nadpisu',
+'headline_tip'    => 'Nadpis druhé úrovně',
+'math_sample'     => 'Vložit sem vzorec',
+'math_tip'        => 'Matematický vzorec (LaTeX)',
+'nowiki_sample'   => ' Vložit sem neformátovaný text',
+'nowiki_tip'      => 'Ignorovat formátování wiki',
+'image_sample'    => 'Příklad.jpg',
+'image_tip'       => 'Vložený obrázek',
+'media_sample'    => 'Příklad.ogg',
+'media_tip'       => 'Odkaz na mediální soubor',
+'sig_tip'         => 'Váš podpis s časovým údajem',
+'hr_tip'          => 'Vodorovná čára (používejte střídmě)',
+
+# Edit pages
+'summary'                   => '<a href="{{LOCALURLE:Project:Shrnutí editace}}" class="internal" title="Stručně popište změny, které jste zde učinili">Shrnutí editace</a>',
+'subject'                   => 'Předmět/nadpis',
+'minoredit'                 => 'Tato změna je malá editace.',
+'watchthis'                 => 'Sledovat tento článek',
+'savearticle'               => 'Uložit změny',
+'preview'                   => 'Náhled',
+'showpreview'               => 'Ukázat náhled',
+'showlivepreview'           => 'Rychlý náhled',
+'showdiff'                  => 'Ukázat změny',
+'anoneditwarning'           => "'''Varování:''' Nejste přihlášen(a). Vaše IP adresa bude zveřejněna v historii této stránky.",
+'missingsummary'            => "'''Připomenutí:''' Nezadali jste shrnutí editace. Pokud ještě jednou kliknete na Uložit změny, bude vaše editace zapsána bez shrnutí.",
+'missingcommenttext'        => 'Zadejte komentář',
+'missingcommentheader'      => "'''Připomenutí:''' Nezadali jste předmět/nadpis pro tento komentář. Pokud ještě jednou kliknete na Uložit změny, bude vaše editace zapsána i bez toho.",
+'summary-preview'           => 'Náhled shrnutí',
+'subject-preview'           => 'Náhled předmětu/nadpisu',
+'blockedtitle'              => 'Uživatel zablokován',
+'blockedtext'               => "<big>'''Vaší IP adrese či uživatelskému jménu byla zablokována možnost editace.'''</big>
+
+Pokoušíte se editovat stránku, ať už kliknutím na tlačítko ''Editovat stránku'', nebo na červený odkaz. Vaše uživatelské jméno nebo IP adresa však byla zablokována správcem s uživatelským jménem „$1“. Jako důvod blokování uvedl: '''$2'''.
+
+Pokud chcete zablokování prodiskutovat, můžete [[Special:Emailuser/$1|kontaktovat]] uživatele $1 či jiného [[Special:Listadmins|správce]]. Uvědomte si, že nemůžete použít nabídku „Poslat e-mail“, jestliže nemáte na {{grammar:6sg|{{SITENAME}}}} účet a ve svém [[Special:Preferences|nastavení]] uvedenu platnou e-mailovou adresu.
+
+Vaše IP adresa je '''$3''' a identifikační číslo bloku je '''$5'''; tyto údaje budete muset uvést ve všech žádostech o odblokování.
+
+Pokud chcete vědět, kdy zablokování vyprší, podívejte se na [[Special:Ipblocklist|seznam blokovaných uživatelů]].
+
+== Chcete jen číst? ==
+Blokování nebrání čtení stránek, jen jejich editaci. Pokud jste si chtěli jen
+přečíst stránku a vidíte tuto zprávu, pravděpodobně jste klikli na červený odkaz.
+To je odkaz na stránku, která zatím neexistuje, takže se uživateli otevře editační
+okénko. Tento problém mít nebudete, pokud budete klikat jen na modré odkazy.",
+'blockedoriginalsource'     => "Zdrojový text stránky '''$1''' následuje:",
+'blockededitsource'         => "Text '''vašich editací''' stránky '''$1''' následuje:",
+'whitelistedittitle'        => 'Pro editaci je vyžadováno přihlášení',
+'whitelistedittext'         => 'Pro editaci se musíte $1.',
+'whitelistreadtitle'        => 'Vyžadováno přihlášení',
+'whitelistreadtext'         => 'Pro čtení článků se musíte [[Special:Userlogin|přihlásit]].',
+'whitelistacctitle'         => 'Není vám dovoleno vytvářet uživatelské účty',
+'whitelistacctext'          => 'Abyste na této wiki mohl(a) vytvářet uživatelské účty, musíte se [[Special:Userlogin|přihlásit]] a mít příslušná oprávnění.',
+'confirmedittitle'          => 'Vyžadováno e-mailové potvrzení',
+'confirmedittext'           => 'Pro editaci stránek je vyžadováno potvrzení vaší e-mailové adresy. Na stránce [[Special:Preferences|nastavení]] zadejte a nechte potvrdit svou e-mailovou adresu.',
+'loginreqtitle'             => 'Vyžadováno přihlášení',
+'loginreqlink'              => 'přihlásit',
+'loginreqpagetext'          => ' K prohlížení jiných stránek se musíte $1.',
+'accmailtitle'              => 'Heslo odesláno.',
+'accmailtext'               => 'Heslo pro „$1“ bylo odesláno na $2.',
+'newarticle'                => '(Nový)',
+'newarticletext'            => "Následovali jste odkaz na stránku, která dosud neexistuje.
+Pokud ji chcete vytvořit, napište text do rámečku níže a stiskněte tlačítko ''Uložit změny''. Další rady najdete v [[{{MediaWiki:helppage}}|nápovědě]].
+Pokud jste zde omylem, stiskněte ve svém prohlížeči tlačítko ''Zpět''.",
+'anontalkpagetext'          => "---- ''Toto je diskusní stránka anonymního uživatele, který si dosud nevytvořil účet nebo ho nepoužívá. Musíme proto použít číselnou IP adresu k jeho identifikaci. Taková IP adresa může být sdílena několika uživateli. Pokud jste anonymní uživatel a cítíte, že jsou Vám adresovány irrelevantní komentáře, prosím [[Special:Userlogin|vytvořte si účet nebo se přihlaste]] a tím se vyhnete budoucí záměně s jinými anonymními uživateli.''",
+'noarticletext'             => 'Tato stránka zatím neobsahuje žádný text, můžete [[Special:Search/{{PAGENAME}}|zkusit tento název vyhledat]] na jiných stránkách, nebo [{{fullurl:{{FULLPAGENAME}}|action=edit}} tuto stránku založit].',
+'clearyourcache'            => "'''Poznámka:''' Po uložení musíte smazat cache vašeho prohlížeče, jinak změny neuvidíte: '''Mozilla / Firefox:''' ''Ctrl-Shift-R'', '''IE:''' ''Ctrl-F5'', '''Safari:''' ''Cmd-Shift-R'', '''Konqueror''': ''F5''.",
+'usercssjsyoucanpreview'    => '<strong>Tip:</strong> Použijte tlačítko „Ukázat náhled“ k testování vašeho nového css/js před uložením.',
+'usercsspreview'            => "'''Pamatujte, že si prohlížíte jen náhled vašeho uživatelského css, neboť ještě nebylo uloženo!'''",
+'userjspreview'             => "'''Pamatujte, že testujete a prohlížíte pouze náhled vašeho uživatelského javascriptu, dosud nebyl uložen!'''",
+'userinvalidcssjstitle'     => "'''Varování:''' Vzhled „$1“ neexistuje. Nezapomeňte, že uživatelské .css a .js soubory používají malá písmena, např. {{ns:User}}:{{BASEPAGENAME}}/monobook.css, nikoli {{ns:User}}:{{BASEPAGENAME}}/Monobook.css.",
+'updated'                   => '(Změna uložena)',
+'note'                      => '<strong>Poznámka:</strong>&nbsp;',
+'previewnote'               => 'Pamatujte, že toto je pouze náhled, ne uložení!',
+'previewconflict'           => 'Tento náhled ukazuje text tak, jak bude vypadat po uložení stránky.',
+'session_fail_preview'      => '<strong>Omlouváme se, ale váš požadavek se nepodařilo zpracovat. Zkuste to prosím znovu. Pokud se tento problém bude opakovat, zkuste se odhlásit a znovu přihlásit.</strong>',
+'session_fail_preview_html' => "<strong>Omlouváme se, ale váš požadavek se nepodařilo zpracovat.</strong>
+
+''Jelikož tato wiki má povoleno libovolné HTML, není zobrazen náhled jako prevence proti útokům JavaScriptem.''
+
+Pokud jde o zamýšlenou editaci, zkuste to prosím znovu. Pokud se tento problém bude opakovat, zkuste se odhlásit a znovu přihlásit.",
+'importing'                 => 'Import stránky $1',
+'editing'                   => 'Editace stránky $1',
+'editinguser'               => 'Úprava práv uživatele $1',
+'editingsection'            => 'Editace stránky $1 (část)',
+'editingcomment'            => 'Editace stránky $1 (komentář)',
+'editconflict'              => 'Editační konflikt: $1',
+'explainconflict'           => 'Někdo změnil stránku po započetí vaší editace. Výše vidíte aktuální text článku. Vaše změny jsou uvedeny dole. Musíte sloučit své změny se stávajícím článkem. <b>Pouze</b> výše uvedený text zůstane uchován po kliknutí na „Uložit“. <br />',
+'yourtext'                  => 'Váš text',
+'storedversion'             => ' Uložená verze',
+'nonunicodebrowser'         => '<strong>UPOZORNĚNÍ: Váš prohlížeč není schopen pracovat se znaky Unicode, pro editaci stránek prosím použijte nějaký jiný.</strong>',
+'editingold'                => '<strong>VAROVÁNÍ: Nyní editujete zastaralou verzi této stránky. Když ji uložíte, všechny změny provedené mezitím se ztratí.</strong>',
+'yourdiff'                  => 'Rozdíly',
+'copyrightwarning'          => 'Všechny příspěvky do {{grammar:2sg|{{SITENAME}}}} jsou zveřejňovány podle $2 (podrobnosti najdete na $1). Pokud si nepřejete, aby váš text byl nemilosrdně upravován a volně šířen, pak ho do {{grammar:2sg|{{SITENAME}}}} neukládejte.<br />
+Uložením příspěvku se zavazujete, že je vaším dílem nebo je zkopírován ze zdrojů, které nejsou chráněny autorským právem (tzv. <em>public domain</em>). <strong>Nekopírujte díla chráněná autorským právem bez dovolení!</strong>',
+'copyrightwarning2'         => 'Uvědomte si, že všechny příspěvky do {{grammar:2sg|{{SITENAME}}}} mohou být ostatními uživateli upraveny, pozměněny či odstraněny. Pokud si nepřejete, aby váš text byl nemilosrdně upravován, pak ho do {{grammar:2sg|{{SITENAME}}}} neukládejte.<br />
+Uložením příspěvku se zavazujete, že je vaším dílem nebo je zkopírován ze zdrojů, které nejsou chráněny autorským právem (tzv. <em>public domain</em>), podrobnosti najdete na $1. <strong>Nekopírujte díla chráněná autorským právem bez dovolení!</strong>',
+'longpagewarning'           => 'VAROVÁNÍ: Tato stránka je $1 KB dlouhá; některé prohlížeče mohou mít problémy s editováním stran, které se blíží nebo jsou delší než 32 KB. Prosím zvažte rozdělení stránky na více částí.',
+'longpageerror'             => '<strong>CHYBA: Pokoušíte se uložit text o velikosti $1 KB, přičemž dovolené maximum je $2 KB. Vaše editace nemůže být uložena.</strong>',
+'readonlywarning'           => 'VAROVÁNÍ: Databáze byla uzamčena kvůli údržbě, takže nebudete moci uložit své změny. Můžete si okopírovat text do souboru a uložit ho na později.',
+'protectedpagewarning'      => '<strong>Varování:</strong> Tato stránka byla zamčena, takže ji mohou editovat pouze správci.',
+'semiprotectedpagewarning'  => '<strong>Poznámka:</strong> Tato stránka byla zamčena, takže ji mohou editovat pouze registrovaní uživatelé.',
+'cascadeprotectedwarning'   => '<strong>Varování: Tato stránka byla zamčena, protože je vložena na stránku zamčenou kaskádním zámkem, a proto ji mohou editovat pouze správci.</strong>',
+'templatesused'             => 'Šablony používané na této stránce:',
+'templatesusedpreview'      => 'Šablony používané v tomto náhledu:',
+'templatesusedsection'      => 'Šablony používané v této části stránky:',
+'template-protected'        => '(zamčena)',
+'template-semiprotected'    => '(polozamčena)',
+'edittools'                 => '<!-- Tento text bude zobrazen pod formuláři pro editaci stránek a načítání souborů. -->',
+'nocreatetitle'             => 'Vytváření nových stránek je omezeno',
+'nocreatetext'              => 'Na tomto serveru je možnost vytváření nových stránek omezena.
+Můžete se vrátit a editovat již existující stránku, nebo [[Special:Userlogin|se přihlásit či se registrovat]].',
+
+# "Undo" feature
+'undo-success' => 'Editace byla zrušena. Zkontrolujte a pak potvrďte změny zobrazené níže.',
+'undo-failure' => 'Editace nemohla být zrušena kvůli konfliktu mezilehlých editací.',
+'undo-summary' => 'Zrušena verze $1 od uživatele [[Special:Contributions/$2|$2]] ([[User talk:$2|diskuse]])',
+
+# Account creation failure
+'cantcreateaccounttitle' => 'Nelze vytvořit uživatelský účet',
+'cantcreateaccounttext'  => 'Tvorba účtů z této IP adresy (<b>$1</b>) byla zablokována. Je to pravděpodobně způsobeno opakovaným vandalismem uživatelů stejného poskytovatele internetového připojení či školy.',
+
+# History pages
+'revhistory'                  => 'Historie editací',
+'viewpagelogs'                => 'Zobrazit protokolovací záznamy k této stránce',
+'nohistory'                   => 'O této stránce neexistuje historie editací.',
+'revnotfound'                 => 'Verze nenalezena',
+'revnotfoundtext'             => 'Nelze najít starou verzi, kterou žádáte. Zkuste prosím zkontrolovat URL hledané stránky.\b',
+'loadhist'                    => 'Načítá se stránka historie editací',
+'currentrev'                  => 'Aktuální verze',
+'revisionasof'                => 'Verze z $1',
+'revision-info'               => 'Verze z $1; $2',
+'previousrevision'            => '← Starší verze',
+'nextrevision'                => 'Novější verze →',
+'currentrevisionlink'         => 'zobrazit aktuální verzi',
+'cur'                         => 'teď',
+'next'                        => 'násl',
+'last'                        => 'předchozí',
+'orig'                        => 'původní',
+'page_first'                  => 'první',
+'histlegend'                  => '(teď) = rozdíly oproti nynější verzi, (předchozí) = rozdíly oproti předchozí verzi, <b>m</b> = malá editace',
+'deletedrev'                  => '[smazáno]',
+'histfirst'                   => 'Nejstarší',
+'histlast'                    => 'Nejnovější',
+'rev-deleted-comment'         => '(komentář odstraněn)',
+'rev-deleted-user'            => '(uživatelské jméno odstraněno)',
+'rev-deleted-text-permission' => '<div class="mw-warning plainlinks">
+Tato revize byla odstraněna z veřejného archivu.
+Podrobnosti o smazání mohou být uvedeny v [{{fullurl:Special:Log/delete|page={{PAGENAMEE}}}} knize smazaných stránek].
+</div>',
+'rev-deleted-text-view'       => '<div class="mw-warning plainlinks">
+Tato revize byla odstraněna z veřejného archivu.
+Jako správce si ji však můžete prohlédnout;
+podrobnosti o smazání mohou být uvedeny v [{{fullurl:Special:Log/delete|page={{PAGENAMEE}}}} knize smazaných stránek].
+</div>',
+'rev-delundel'                => 'skrýt/zobrazit',
+
+# Revision feed
+'history-feed-title'          => 'Historie editací',
+'history-feed-description'    => 'Historie editací této stránky',
+'history-feed-item-nocomment' => '$1 v $2', # user at time
+'history-feed-empty'          => 'Požadovaná stránka neexistuje.
+Mohla být smazána či přejmenována.
+Zkuste [[Special:Search|hledání]].',
+
+# Revision deletion
+'revisiondelete'            => 'Smazat/obnovit revize',
+'revdelete-nooldid-title'   => 'Nezadána revize',
+'revdelete-nooldid-text'    => 'Nezvolili jste revize, na které chcete tuto funkci použít.',
+'revdelete-selected'        => 'Zvolené revize [[:$1]]:',
+'revdelete-text'            => 'Smazané revize budou nadále zobrazeny v historii stránky, ale jejich text nebude veřejně dostupný.
+
+Ostatní správci této wiki si budou moci skrytý obsah prohlížet a pomocí stejného rozhraní jej také obnovit,
+pokud to provozovatel serveru nezakázal.',
+'revdelete-legend'          => 'Nastavit omezení k revizi:',
+'revdelete-hide-text'       => 'Skrýt text revize',
+'revdelete-hide-comment'    => 'Skrýt editační komentář',
+'revdelete-hide-user'       => 'Skrýt uživatelovu IP adresu',
+'revdelete-hide-restricted' => 'Tato omezení aplikovat i na správce',
+'revdelete-log'             => 'Komentář:',
+'revdelete-submit'          => 'Aplikovat nastavení',
+'revdelete-logentry'        => 'změnil viditelnost revizí u [[$1]]',
+
+# Diffs
+'difference'                => '(Rozdíly mezi verzemi)',
+'loadingrev'                => 'načítají se verze pro zjištění rozdílů',
+'lineno'                    => 'Řádka $1:',
+'editcurrent'               => ' Editovat nynější verzi této stránky',
+'selectnewerversionfordiff' => 'Vyberte novější verzi pro porovnání',
+'selectolderversionfordiff' => 'Vyberte starší verzi pro porovnání',
+'compareselectedversions'   => 'Porovnat vybrané verze',
+'editundo'                  => 'zrušit editaci',
+'diff-multi'                => '({{plural:$1|Není zobrazena jedna mezilehlá verze|Nejsou zobrazeny $1 mezilehlé verze|Není zobrazeno $1 mezilehlých verzí}}.)',
+
+# Search results
+'searchresults'         => 'Výsledky hledání',
+'searchresulttext'      => 'Pro více informací o tom, jak hledat na {{grammar:6sg|{{SITENAME}}}}, se podívejte do [[{{MediaWiki:helppage}}|nápovědy]].',
+'searchsubtitle'        => 'Hledáno „[[:$1]]“',
+'searchsubtitleinvalid' => 'Hledáno „$1“',
+'badquery'              => 'Špatně vytvořený vyhledávací dotaz',
+'badquerytext'          => 'Nemůžeme zpracovat vaše zadání. Je to pravděpodobně tím, že hledáte slovo kratší než tři písmena, což zatím není podporováno. Může to být také tím, že zadání bylo napsáno nesprávně. Prosím zkuste jiné zadání.',
+'matchtotals'           => 'Zadanému „$1“ odpovídá $2 {{plural:$2|název strany|názvy stran|názvů stran}} a text $3 {{plural:$3|strany|stran|stran}}.',
+'noexactmatch'          => "'''Neexistuje žádná stránka s názvem „$1“.''' Můžete tuto stránku [[:$1|založit]].",
+'titlematches'          => 'Stránky s odpovídajícím názvem',
+'notitlematches'        => 'Žádné stránky názvem neodpovídají.',
+'textmatches'           => 'Stránky s odpovídajícím textem',
+'notextmatches'         => 'Žádné stránky textem neodpovídají.',
+'prevn'                 => '$1 předchozích',
+'nextn'                 => '$1 následujících',
+'viewprevnext'          => 'Ukázat ($1) ($2) ($3).',
+'showingresults'        => 'Zobrazuji <strong>$1</strong> {{plural:$1|výsledek|výsledky|výsledků}} počínaje od <strong>$2</strong>.',
+'showingresultsnum'     => 'Zobrazuji <strong>$3</strong> {{plural:$3|výsledek|výsledky|výsledků}} počínaje od <strong>$2</strong>.',
+'nonefound'             => '<strong>Poznámka</strong>: neúspěšná hledání jsou často důsledkem zadání slov, která nejsou indexována, nebo uvedením mnoha slov najednou (ve výsledku se objeví jen ty stránky, které obsahují všechna zadaná slova).',
+'powersearch'           => 'Hledání',
+'powersearchtext'       => '
+Hledat ve jmenných prostorech:<br />
+$1<br />
+$2 Vypsat přesměrování &nbsp; Hledat $3 $9',
+'searchdisabled'        => '<p>Omlouváme se. Plnotextové vyhledávání je dočasně nedostupné. Zatím můžete zkusit vyhledávání Googlem; je ale možné, že jeho výsledky nemusí být aktuální.</p>',
+'blanknamespace'        => '(Hlavní)',
+
+# Preferences page
+'preferences'              => 'Nastavení',
+'mypreferences'            => 'Nastavení',
+'prefsnologin'             => 'Nejste přihlášen(a)!',
+'prefsnologintext'         => 'Pro nastavení se musíte [[Special:Userlogin|přihlásit]].',
+'prefsreset'               => 'Nastavení vráceno.',
+'qbsettings'               => 'Nastavení lišty nástrojů',
+'qbsettings-none'          => 'Žádný',
+'qbsettings-fixedleft'     => 'Leží vlevo',
+'qbsettings-fixedright'    => 'Leží vpravo',
+'qbsettings-floatingleft'  => 'Visí vlevo',
+'qbsettings-floatingright' => 'Visí vpravo',
+'changepassword'           => 'Změna hesla',
+'skin'                     => 'Styl',
+'math'                     => 'Matematika',
+'dateformat'               => 'Formát data',
+'datedefault'              => 'Implicitní',
+'datetime'                 => 'Datum a čas',
+'math_failure'             => 'Nelze pochopit',
+'math_unknown_error'       => 'neznámá chyba',
+'math_unknown_function'    => 'neznámá funkce',
+'math_lexing_error'        => 'chyba při lexingu',
+'math_syntax_error'        => 'syntaktická chyba',
+'math_image_error'         => 'Selhala konverze do PNG; zkontrolujte správnou instalaci latexu, dvips, gs a convertu',
+'math_bad_tmpdir'          => 'Nelze zapsat nebo vytvořit dočasný adresář pro matematiku',
+'math_bad_output'          => 'Nelze zapsat nebo vytvořit adresář pro výstup matematiky',
+'math_notexvc'             => 'Chybí spustitelný texvc; podívejte se prosím do math/README na konfiguraci.',
+'prefs-personal'           => 'Údaje o uživateli',
+'prefs-rc'                 => ' Poslední změny',
+'prefs-watchlist'          => 'Sledované stránky',
+'prefs-watchlist-days'     => 'Počet dní zobrazených ve sledovaných stránkách:',
+'prefs-watchlist-edits'    => 'Počet editací zobrazených na zdokonalených sledovaných stránkách:',
+'prefs-misc'               => ' Různé',
+'saveprefs'                => 'Uložit nastavení',
+'resetprefs'               => 'Vrátit původní nastavení',
+'oldpassword'              => 'Staré heslo',
+'newpassword'              => 'Nové heslo',
+'retypenew'                => 'Napište znovu nové heslo',
+'textboxsize'              => 'Editace',
+'rows'                     => 'Řádky',
+'columns'                  => 'Sloupce',
+'searchresultshead'        => 'Vyhledávání',
+'resultsperpage'           => 'Počet nalezených článků na jednu stránku výsledků',
+'contextlines'             => ' Počet řádek zobrazených z každé nalezené stránky',
+'contextchars'             => ' Počet znaků kontextu na každé řádce',
+'stubthreshold'            => 'Hranice pro zobrazení pahýlu',
+'recentchangescount'       => 'Počet zobrazených záznamů v posledních změnách',
+'savedprefs'               => 'Vaše nastavení bylo uloženo.',
+'timezonelegend'           => 'Časové pásmo',
+'timezonetext'             => 'Označte, o kolik se vaše časové pásmo liší od serveru (UTC). Například pro středoevropské časové pásmo (SEČ) vyplňte „01:00“ v zimě, „02:00“ v období platnosti letního času.',
+'localtime'                => 'Místní časové pásmo',
+'timezoneoffset'           => 'Posun',
+'servertime'               => 'Aktuální čas na serveru',
+'guesstimezone'            => 'Načíst z prohlížeče',
+'allowemail'               => 'Dovolit e-mail od ostatních uživatelů',
+'defaultns'                => 'Implicitně hledat v těchto jmenných prostorech:',
+'default'                  => 'implicitní',
+'files'                    => 'Soubory',
+
+# User rights
+'userrights-lookup-user'     => 'Spravovat uživatelské skupiny',
+'userrights-user-editname'   => 'Zadejte uživatelské jméno:',
+'editusergroup'              => 'Upravit uživatelskou skupinu',
+'userrights-editusergroup'   => 'Upravit uživatelské skupiny',
+'saveusergroups'             => 'Uložit uživatelské skupiny',
+'userrights-groupsmember'    => 'Člen skupin:',
+'userrights-groupsavailable' => 'Dostupné skupiny:',
+'userrights-groupshelp'      => 'Zvolte skupiny, do/ze kterých chcete uživatele přidat/odebrat.
+Nezvolené skupiny nebudou změněny. Skupinu můžete vyřadit z vybraných pomocí CTRL + Levé tlačítko myši',
+
+# Groups
+'group'            => 'Skupina:',
+'group-bot'        => 'Boti',
+'group-sysop'      => 'Správci',
+'group-bureaucrat' => 'Byrokraté',
+'group-all'        => '(všichni)',
+
+'group-bot-member'        => 'Bot',
+'group-sysop-member'      => 'Správce',
+'group-bureaucrat-member' => 'Byrokrat',
+
+'grouppage-bot'        => '{{ns:Project}}:Boti',
+'grouppage-sysop'      => '{{ns:Project}}:Správci',
+'grouppage-bureaucrat' => '{{ns:Project}}:Byrokraté',
+
+# User rights log
+'rightslog'      => 'Kniha práv uživatelů',
+'rightslogtext'  => 'Toto je záznam změn uživatelských práv.',
+'rightslogentry' => 'změnil pro $1 členství ve skupinách z $2 na $3',
+'rightsnone'     => '(žádné)',
+
+# Recent changes
+'recentchanges'                     => 'Poslední změny',
+'recentchangestext'                 => 'Sledujte poslední změny na {{grammar:6sg|{{SITENAME}}}} na této stránce.',
+'recentchanges-feed-description'    => 'Na tomto kanále sledujte poslední změny na {{grammar:6sg|{{SITENAME}}}}.',
+'rcnote'                            => 'Níže {{plural:$1|je poslední|jsou poslední|je posledních}} <strong>$1</strong> {{plural:$1|změna|změny|změn}} za {{plural:$2|poslední|poslední|posledních}} <strong>$2</strong> {{plural:$2|den|dny|dnů}} před $3.',
+'rcnotefrom'                        => 'Níže {{plural:$1|je|jsou|je}} nejvýše <b>$1</b> {{plural:$1|změna|změny|změn}} od <b>$2</b>.',
+'rclistfrom'                        => 'Ukázat nové změny, počínaje od $1',
+'rcshowhideminor'                   => '$1 malé editace',
+'rcshowhidebots'                    => '$1 roboty',
+'rcshowhideliu'                     => '$1 přihlášené uživatele',
+'rcshowhideanons'                   => '$1 anonymní uživatele',
+'rcshowhidepatr'                    => '$1 prověřené editace',
+'rcshowhidemine'                    => '$1 moje editace',
+'rclinks'                           => 'Ukázat $1 posledních změn během posledních $2 dnů; $3.',
+'diff'                              => 'rozdíl',
+'hist'                              => 'historie',
+'hide'                              => 'skrýt',
+'show'                              => 'ukázat',
+'minoreditletter'                   => 'm',
+'newpageletter'                     => 'N',
+'boteditletter'                     => 'b',
+'sectionlink'                       => '→',
+'number_of_watching_users_pageview' => '[$1 {{plural:$1|sledující uživatel|sledující uživatelé|sledujících uživatelů}}]',
+'rc_categories'                     => 'Omezit na kategorie (oddělené „|“)',
+'rc_categories_any'                 => 'Všechny',
+
+# Recent changes linked
+'recentchangeslinked' => 'Související změny',
+
+# Upload
+'upload'                      => 'Načíst soubor',
+'uploadbtn'                   => 'Načíst soubor',
+'reupload'                    => 'Načíst znovu',
+'reuploaddesc'                => 'Vrátit se k načtení.',
+'uploadnologin'               => 'Nejste přihlášen(a)',
+'uploadnologintext'           => 'Pro načtení souboru se musíte [[Special:Userlogin|přihlásit]].',
+'upload_directory_read_only'  => 'Do adresáře pro načítané soubory ($1) nemá webserver právo zápisu.',
+'uploaderror'                 => 'Při načítání došlo k chybě',
+'uploadtext'                  => 'Pro prohlížení a hledání již dříve nahraných souborů se podívejte
+na [[Special:Imagelist|seznam načtených souborů]], popř.
+[[Special:Newimages|galerii nových obrázků]]. Všechna načtení
+a smazání jsou zaznamenány v [[Special:Log|protokolovacích záznamech]].
+
+Pomocí níže uvedeného formuláře můžete na wiki nahrát obrázky a jiné
+soubory, které poté budete moci použít v článcích. Ve většině prohlížečů
+je zobrazeno tlačítko „Procházet…“, pomocí kterého budete moci
+vybrat soubor k načtení, jehož jméno se poté objeví v políčku
+vedle tlačítka. Poté stiskněte tlačítko „Načíst soubor“ k
+dokončení načtení. Buďte trpěliví, nahrávání může chvíli trvat.
+
+Preferované formáty jsou JPEG pro fotografie, PNG pro schémata
+a OGG pro zvuky. Používejte laskavě smysluplná jména souborů,
+soubor po načtení nelze přejmenovat.
+
+Pro vložení obrázku do stránky použijte syntaxi
+<code><nowiki>[[</nowiki>{{ns:6}}<nowiki>:soubor.jpg]]</nowiki></code> nebo
+<code><nowiki>[[</nowiki>{{ns:6}}<nowiki>:soubor.png|popisek]]</nowiki></code>, popř.
+<code><nowiki>[[</nowiki>{{ns:-2}}<nowiki>:soubor.ogg]]</nowiki></code> pro zvuky.
+
+Uvědomte si laskavě, že stejně jako u ostatních wikistránek mohou
+ostatní uživatelé vámi nahraný soubor smazat či upravit, pokud to
+uznají za vhodné; pokud budete tuto funkci zneužívat, může být
+váš uživatelský účet zablokován.',
+'uploadlog'                   => 'kniha nahrávek',
+'uploadlogpage'               => 'Kniha nahrávek',
+'uploadlogpagetext'           => 'Níže najdete seznam nejnovějších souborů.',
+'filename'                    => 'Soubor',
+'filedesc'                    => 'Popis',
+'fileuploadsummary'           => 'Popis:',
+'filestatus'                  => 'Autorská práva',
+'filesource'                  => 'Zdroj',
+'uploadedfiles'               => 'Načtené soubory',
+'ignorewarning'               => 'Ignorovat varování a načíst soubor.',
+'ignorewarnings'              => 'Ignorovat všechna varování',
+'minlength'                   => 'Jméno souboru se musí skládat nejméně ze tří písmen.',
+'illegalfilename'             => 'Název souboru "$1" obsahuje znaky, které nejsou povoleny v názvech stránek. Prosím přejmenujte soubor a zkuste jej nahrát znovu.',
+'badfilename'                 => 'Jméno souboru bylo změněno na „$1“.',
+'large-file'                  => 'Doporučuje se, aby délka souboru nepřesahovala $1, tento soubor má $2.',
+'largefileserver'             => 'Velikost tohoto souboru překračuje limit nastavený na serveru.',
+'emptyfile'                   => 'Soubor, který jste vložili, se zdá být prázdný. Mohl to způsobit překlep v názvu souboru. Prosím zkontrolujte, zda jste opravdu chtěli vložit tento soubor.',
+'fileexists'                  => ' Soubor s tímto jménem již existuje, prosím podívejte se na $1, pokud nevíte jistě, zda chcete tento soubor nahradit.',
+'fileexists-forbidden'        => 'Soubor s tímto názvem již existuje; vraťte se a zvolte jiný název. [[{{ns:image}}:$1|thumb|center|$1]]',
+'fileexists-shared-forbidden' => 'Soubor s tímto názvem již existuje ve sdíleném úložišti; vraťte se a zvolte jiný název. [[{{ns:image}}:$1|thumb|center|$1]]',
+'successfulupload'            => 'Načtení úspěšně provedeno!',
+'fileuploaded'                => 'Soubor „$1“ byl úspěšně načten. Prosím klikněte na tento odkaz: ($2), který vede na stránku popisu a napište tam informace o souboru: odkud pochází, kdy byl vytvořen a kým; a cokoliv dalšího, co o něm můžete vědět. Pokud je to obrázek, můžete ho do stránek vložit takto: <tt><nowiki>[[</nowiki>{{ns:6}}<nowiki>:$1|thumb|Nadpis]]</nowiki></tt>',
+'uploadwarning'               => 'Varování',
+'savefile'                    => 'Uložit soubor',
+'uploadedimage'               => 'načítá „[[$1]]“',
+'uploaddisabled'              => 'Načítání souborů vypnuto.',
+'uploaddisabledtext'          => 'Promiňte, ale načítání souborů je na této wiki vypnuto.',
+'uploadscripted'              => 'Tento soubor obsahuje HTML nebo kód skriptu, který by mohl být prohlížečem chybně interpretován.',
+'uploadcorrupt'               => 'Soubor je poškozen nebo nemá správnou příponu. Zkontrolujte prosím soubor a zkuste ho načíst znovu.',
+'uploadvirus'                 => 'Tento soubor obsahuje virus! Podrobnosti: $1',
+'sourcefilename'              => 'Jméno zdrojového souboru',
+'destfilename'                => 'Cílové jméno',
+'watchthisupload'             => 'Sledovat tuto stránku',
+'filewasdeleted'              => 'Soubor stejného jména byl již dříve načten a posléze smazán. Podrobnosti obsahuje $1.',
+
+'upload-proto-error'      => 'Neplatný protokol',
+'upload-proto-error-text' => 'Nahrání vzdáleného souboru vyžaduje zadání URLs začínající na <code>http://</code> nebo <code>ftp://</code>.',
+'upload-file-error'       => 'Vnitřní chyba',
+'upload-file-error-text'  => 'Vnitřní chyba se vyskytla při vytváření dočasného souboru na serveru. Kontaktuje prosím administrátora systému.',
+'upload-misc-error'       => 'Neznámá chyba',
+'upload-misc-error-text'  => 'Neznámá chyba se vyskytla během nahrávání souboru.  Zkontrolujte zda je URL platná a přístupné a zkuste to znovu.  Pokud se chyba znovu objeví, kontaktuje administrátora systému.',
+
+# Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
+'upload-curl-error6'       => 'Z URL nelze číst',
+'upload-curl-error6-text'  => 'Ze zadané URL nelze číst.  Zkontrolujte ža URL je správně napsané a server je dostupný',
+'upload-curl-error28'      => 'Čas pro nahrání vypršel',
+'upload-curl-error28-text' => 'Serveru dlouho neodpovídá. Zkontrolujte, že server je dostupný, počkejte chvíli a zkuste to znovu.',
+
+'license'            => 'Licence',
+'nolicense'          => 'Bez udání licence',
+'upload_source_url'  => ' (platné, veřejně přístupné URL)',
+'upload_source_file' => ' (soubor na vašem počítači)',
+
+# Image list
+'imagelist'                 => 'Seznam načtených obrázků',
+'imagelisttext'             => 'Níže je seznam $1 obrázků, seřazených $2.',
+'imagelistforuser'          => 'Tento seznam obsahuje jen soubory načtené uživatelem $1.',
+'getimagelist'              => 'načítám seznam obrázků',
+'ilsubmit'                  => 'Hledat',
+'showlast'                  => 'Ukázat posledních $1 obrázků řazených $2.',
+'byname'                    => 'podle jména',
+'bydate'                    => 'podle data',
+'bysize'                    => 'podle velikosti',
+'imgdelete'                 => 'smazat',
+'imgdesc'                   => 'popis',
+'imgfile'                   => 'soubor',
+'imglegend'                 => '(popis) = ukázat / editovat popis souboru.',
+'imghistory'                => 'Historie načtených souborů',
+'revertimg'                 => 'vrátit',
+'deleteimg'                 => 'smazat',
+'deleteimgcompletely'       => 'smazat úplně',
+'imghistlegend'             => '(teď) = toto je současná verze souboru, (smazat úplně) = smazat všechny verze tohoto souboru, (smazat) = smazat jen tuto verzi, (vrátit) = obnovit starou verzi. <br /> <i>Klikněte na datum pro zobrazení obrázku, který byl uložen v ten den.</i>',
+'imagelinks'                => 'Odkazy k souboru',
+'linkstoimage'              => 'Na soubor odkazují tyto stránky:',
+'nolinkstoimage'            => 'Na tento soubor neodkazuje žádná stránka.',
+'sharedupload'              => 'Tento soubor je sdílený a může být používán ostatními projekty.',
+'shareduploadwiki'          => 'Více informací najdete na $1.',
+'shareduploadwiki-linktext' => 'stránce s popisem',
+'noimage'                   => 'Soubor s tímto jménem neexistuje, můžete ho $1',
+'noimage-linktext'          => 'načíst',
+'uploadnewversion-linktext' => 'Načíst novou verzi tohoto souboru',
+'imagelist_date'            => 'Datum',
+'imagelist_name'            => 'Název',
+'imagelist_user'            => 'Uživatel',
+'imagelist_size'            => 'Velikost (bajtů)',
+'imagelist_description'     => 'Popis',
+'imagelist_search_for'      => 'Hledat obrázek podle názvu:',
+
+# MIME search
+'mimesearch' => 'Hledání podle MIME typu',
+'mimetype'   => 'MIME typ:',
+'download'   => 'download',
+
+# Unwatched pages
+'unwatchedpages' => 'Nesledované stránky',
+
+# List redirects
+'listredirects' => 'Seznam přesměrování',
+
+# Unused templates
+'unusedtemplates'     => 'Nepoužívané šablony',
+'unusedtemplatestext' => 'Tato stránka obsahuje seznam všech stran ve jmenném prostoru {{ns:-1}}, které nejsou vloženy do žádné jiné strany. Před jejich smazáním nezapomeňte zkontrolovat ostatní odkazy.',
+'unusedtemplateswlh'  => 'ostatní odkazy',
+
+# Random redirect
+'randomredirect' => 'Náhodné přesměrování',
+
+# Statistics
+'statistics'             => 'Statistika',
+'sitestats'              => 'Statistika {{grammar:2sg|{{SITENAME}}}}',
+'userstats'              => 'O uživatelích',
+'sitestatstext'          => "V databázi je celkem '''$1''' {{plural:$1|stránka|stránky|stránek}}. Toto číslo zahrnuje diskusní stránky, stránky o {{grammar:6sg|{{SITENAME}}}}, pahýly, přesměrování a další, které nejsou články v pravém slova smyslu. Kromě nich zbývá '''$2''' pravděpodobně {{plural:$2|skutečný článek|skutečné články|skutečných článků}}.
+
+{{plural:$8|Byl načten|Byly načteny|Bylo načteno}} '''$8''' {{plural:$8|obrázek|obrázky|obrázků}}.
+
+Od založení wiki bylo navštíveno celkem '''$3''' stránek a editováno '''$4'''krát. To činí v průměru '''$5''' editací na stránku a '''$6''' návštěv na editaci.
+
+Aktuální délka fronty údržby je '''$7'''.",
+'userstatstext'          => "Je zde '''$1''' {{plural:$1|registrovaný uživatel|registrovaní uživatelé|registrovaných uživatelů}}, z toho '''$2''' ($4&nbsp;%) {{plural:$2|je správce|jsou $5|jsou $5}}.",
+'statistics-mostpopular' => 'Nejčtenější stránky',
+
+'disambiguations'      => 'Stránky odkazující na rozcestníky',
+'disambiguationspage'  => '{{ns:10}}:Rozcestník',
+'disambiguations-text' => 'Odkazy na následujících stránkách vedou na rozcestníky (stránky obsahující některou ze šablon uvedených na [[MediaWiki:Disambiguationspage|seznamu rozcestníkových šablon]]).',
+
+'doubleredirects'     => 'Dvojitá přesměrování',
+'doubleredirectstext' => 'Každý řádek obsahuje odkaz na první a druhé přesměrování, plus první řádek textu druhého přesměrování, který obvykle ukazuje jméno „skutečného“ hlavního článku, na který by mělo první přesměrování odkazovat.',
+
+'brokenredirects'        => 'Přerušená přesměrování',
+'brokenredirectstext'    => ' Tato přesměrování vedou na neexistující články.',
+'brokenredirects-edit'   => '(editovat)',
+'brokenredirects-delete' => '(smazat)',
+
+# Miscellaneous special pages
+'nbytes'                  => '$1 {{plural:$1|bajt|bajty|bajtů}}',
+'ncategories'             => '$1 {{plural:$1|kategorie|kategorie|kategorií}}',
+'nlinks'                  => '$1 {{plural:$1|odkaz|odkazy|odkazů}}',
+'nmembers'                => '$1 {{plural:$1|stránka|stránky|stránek}}',
+'nrevisions'              => '$1 {{plural:$1|revize|revize|revizí}}',
+'nviews'                  => '$1 zobrazení',
+'lonelypages'             => 'Sirotčí články',
+'lonelypagestext'         => 'Na následující stránky na této wiki neodkazuje žádná jiná stránka.',
+'uncategorizedpages'      => 'Nekategorizované stránky',
+'uncategorizedcategories' => 'Nekategorizované kategorie',
+'uncategorizedimages'     => 'Nekategorizované soubory',
+'unusedcategories'        => 'Nepoužívané kategorie',
+'unusedimages'            => 'Nepoužívané obrázky a soubory',
+'popularpages'            => 'Nejnavštěvovanější stránky',
+'wantedcategories'        => 'Žádané kategorie',
+'wantedpages'             => 'Žádoucí články',
+'mostlinked'              => 'Nejodkazovanější stránky',
+'mostlinkedcategories'    => 'Nejpoužívanější kategorie',
+'mostcategories'          => 'Články s nejvyšším počtem kategorií',
+'mostimages'              => 'Nejpoužívanější soubory',
+'mostrevisions'           => 'Stránky s nejvíce revizemi',
+'allpages'                => 'Všechny stránky',
+'prefixindex'             => 'Seznam stránek podle začátku názvu',
+'randompage'              => 'Náhodná stránka',
+'shortpages'              => 'Nejkratší články',
+'longpages'               => 'Nejdelší články',
+'deadendpages'            => 'Slepé články',
+'deadendpagestext'        => 'Následující stránky neodkazují na žádnou jinou stránku této wiki.',
+'protectedpages'          => 'Zamčené stránky',
+'protectedpagestext'      => 'Následující stránky jsou zamčeny nebo polozamčeny pro editaci nebo přesun:',
+'listusers'               => 'Uživatelé',
+'specialpages'            => 'Speciální stránky',
+'spheading'               => 'Speciální stránky pro všechny uživatele',
+'restrictedpheading'      => 'Speciální stránky s omezeným přístupem',
+'rclsub'                  => '(stránek odkazovaných z „$1“)',
+'newpages'                => 'Nejnovější články',
+'newpages-username'       => 'Uživatelské jméno:',
+'ancientpages'            => 'Nejdéle needitované stránky',
+'intl'                    => 'Mezijazykové odkazy',
+'move'                    => 'Přesunout',
+'movethispage'            => 'Přesunout stránku',
+'unusedimagestext'        => '<p>Jiné WWW stránky mohou odkazovat přímo pomocí URL, na takové odkazy se v tomto seznamu nebere zřetel.',
+'unusedcategoriestext'    => 'Následující kategorie mají své stránky, ačkoli je žádná stránka ani jiná kategorie nepoužívá.',
+
+# Book sources
+'booksources'               => 'Zdroje knih',
+'booksources-search-legend' => 'Vyhledat knižní zdroje',
+'booksources-isbn'          => 'ISBN:',
+'booksources-go'            => 'Vyhledat',
+'booksources-text'          => 'Níže je seznam odkazů na servery prodávající knihy, nebo které mohou mít další informace o knihách, které hledáte.',
+
+'categoriespagetext' => 'Ve wiki existují následující kategorie:',
+'data'               => 'Data',
+'userrights'         => 'Správa uživatelských skupin',
+'groups'             => 'Uživatelské skupiny',
+'isbn'               => 'ISBN',
+'alphaindexline'     => 'od $1 do $2',
+'version'            => 'Verze',
+
+# Special:Logs
+'log'                  => 'Protokolovací záznamy',
+'alllogstext'          => 'Společné zobrazení knihy nahrávek, smazání, zamčení, zablokování a uživatelských práv.
+Zobrazení můžete zůžit výběrem typu záznamu, uživatelského jména nebo dotčené stránky.',
+'logempty'             => 'Protokol neobsahuje žádný odpovídající záznam.',
+'specialloguserlabel'  => 'Uživatel:',
+'speciallogtitlelabel' => 'Název:',
+
+# Special:Allpages
+'nextpage'          => 'Další stránka ($1)',
+'prevpage'          => 'Předchozí stránka ($1)',
+'allpagesfrom'      => 'Všechny stránky počínaje od:',
+'allarticles'       => 'Všechny články',
+'allinnamespace'    => 'Všechny stránky (jmenný prostor $1)',
+'allnotinnamespace' => 'Všechny stránky (mimo jmenný prostor $1)',
+'allpagesprev'      => 'Předchozí',
+'allpagesnext'      => 'Následující',
+'allpagessubmit'    => 'Přejít',
+'allpagesprefix'    => 'Zobrazit stránky začínající:',
+'allpagesbadtitle'  => 'Zadaný název stránky nebyl platný nebo obsahoval předponu mezijazykového či interwiki odkazu. Možná obsahoval znaky, které v názvu nejsou dovoleny.',
+
+# Special:Listusers
+'listusersfrom' => 'Zobrazit uživatele počínaje od:',
+
+# E-mail user
+'mailnologin'     => 'Bez odesílací adresy',
+'mailnologintext' => 'Pokud chcete posílat e-maily jiným uživatelům, musíte se [[Special:Userlogin|přihlásit]] a mít platnou e-mailovou adresu ve svém [[Special:Preferences|nastavení]].',
+'emailuser'       => 'Poslat e-mail',
+'emailpage'       => 'Poslat e-mail',
+'emailpagetext'   => 'Pokud tento uživatel uvedl platnou e-mailovou adresu ve svém nastavení, tímto formulářem mu lze poslat zprávu. E-mailová adresa, kterou máte uvedenu v nastavení, se objeví jako adresa odesílatele pošty, aby adresát mohl odpovědět.',
+'usermailererror' => 'Chyba poštovního programu:',
+'defemailsubject' => 'E-mail z {{grammar:2sg|{{SITENAME}}}}',
+'noemailtitle'    => 'Bez e-mailové adresy',
+'noemailtext'     => 'Tento uživatel buď nezadal platnou adresu nebo zakázal přijímat zprávy od jiných uživatelů.',
+'emailfrom'       => 'Od',
+'emailto'         => 'Komu',
+'emailsubject'    => 'Předmět',
+'emailmessage'    => 'Zpráva',
+'emailsend'       => 'Odeslat',
+'emailccme'       => 'Poslat kopii zprávy na můj e-mail',
+'emailccsubject'  => 'Kopie Vaší zprávy pro uživatele $1: $2',
+'emailsent'       => 'Zpráva odeslána',
+'emailsenttext'   => 'Váš e-mail byl odeslán.',
+
+# Watchlist
+'watchlist'            => 'Sledované stránky',
+'mywatchlist'            => 'Sledované stránky',
+'watchlistfor'         => "(uživatele '''$1''')",
+'nowatchlist'          => 'Na svém seznamu sledovaných stránek nemáte žádné položky.',
+'watchlistanontext'    => 'Pro prohlížení či úpravu seznamu sledovaných stránek se musíte $1.',
+'watchlistcount'       => "'''Na svém seznamu sledovaných stránek máte $1 {{plural:$1|položku|položky|položek}} včetně diskusí.'''",
+'clearwatchlist'       => 'Smazat seznam sledovaných stránek',
+'watchlistcleartext'   => 'Jste si jisti, že chcete odstranit tyto položky?',
+'watchlistclearbutton' => 'Smazat',
+'watchlistcleardone'   => 'Váš seznam sledovaných stránek byl smazán, {{plural:$1|byla odstraněna jedna položka|byly odstraněny $1 položky|bylo odstraněno $1 položek}}.',
+'watchnologin'         => 'Nejste přihlášen(a)',
+'watchnologintext'     => 'Pro sledování stránek se musíte [[Special:Userlogin|přihlásit]].',
+'addedwatch'           => 'Přidáno k sledovaným',
+'addedwatchtext'       => 'Stránka „[[:$1]]“ byla přidána mezi stránky, které [[Special:Watchlist|sledujete]]. Budoucí změny této stránky se objeví <b>tučně</b> v [[Special:Recentchanges|seznamu posledních změn]], aby bylo snadnější si jí povšimnout. Pokud budete později chtít stránku ze seznamu sledovaných smazat, klikněte na „Nesledovat tuto stránku“ v liště nástrojů.',
+'removedwatch'         => 'Vyřazeno ze seznamu sledovaných stránek',
+'removedwatchtext'     => 'Stránka „$1“ byla vyřazena z vašeho seznamu sledovaných stránek.',
+'watch'                => 'Sledovat',
+'watchthispage'        => 'Sledovat tuto stránku',
+'unwatch'              => 'Nesledovat',
+'unwatchthispage'      => 'Nesledovat tuto stránku',
+'notanarticle'         => 'Toto není článek',
+'watchnochange'        => 'Žádná ze sledovaných položek nebyla editována v době, která je zobrazena.',
+'watchdetails'         => '* Na svém seznamu sledovaných stránek máte $1 {{plural:$1|stránku|stránky|stránek}}
+* [[Special:Watchlist/edit|Ukázat a editovat kompletní seznam]].
+* [[Special:Watchlist/clear|Odstranit všechny položky]]',
+'wlheader-enotif'      => '* Upozorňování e-mailem je zapnuto.',
+'wlheader-showupdated' => "* Stránky, které se změnily od vaší poslední návštěvy, jsou zobrazeny '''tučně'''",
+'watchmethod-recent'   => 'hledají se sledované stránky mezi posledními změnami',
+'watchmethod-list'     => 'hledají se nejnovější editace sledovaných stránek',
+'removechecked'        => 'Vyřadit označené položky ze seznamu sledovaných',
+'watchlistcontains'    => 'Na svém seznamu sledovaných stránek máte $1 {{plural:$1|položku|položky|položek}}.',
+'watcheditlist'        => 'Tady je abecední seznam vašich sledovaných stránek. Zaškrtněte stránky, které chcete smazat z vašeho seznamu a klikněte na tlačítko „vyřadit označené“ na konci obrazovky. S každou stránkou je vždy sledována i její diskusní stránka a naopak.',
+'removingchecked'      => 'Požadované položky se odstraňují ze seznamu sledovaných…',
+'couldntremove'        => 'Nepodařilo se odstranit položku „$1“…',
+'iteminvalidname'      => 'Problém s položkou „$1“, neplatný název…',
+'wlnote'               => 'Níže je {{plural:$1|poslední změna|poslední $1 změny|posledních $1 změn}} za {{plural:$2|poslední|poslední|posledních}} <b>$2</b> {{plural:$2|hodinu|hodiny|hodin}}.',
+'wlshowlast'           => 'Ukázat posledních $1 hodin $2 dnů $3',
+'wlsaved'              => 'Toto je uložená verze vašeho seznamu sledovaných stránek.',
+'watchlist-show-bots'  => 'ukázat roboty',
+'watchlist-hide-bots'  => 'skrýt roboty',
+'watchlist-show-own'   => 'ukázat mé editace',
+'watchlist-hide-own'   => 'skrýt mé editace',
+'watchlist-show-minor' => 'ukázat malé editace',
+'watchlist-hide-minor' => 'skrýt malé editace',
+'wldone'               => 'Hotovo.',
+
+# Displayed when you click the "watch" button and it's in the process of watching
+'watching'   => 'Přidávám na seznam sledovaných stránek...',
+'unwatching' => 'Odebírám ze seznamu sledovaných stránek...',
+
+'enotif_mailer'      => 'Zasílač hlášení {{grammar:2sg|{{SITENAME}}}}',
+'enotif_reset'       => 'Vynulovat všechny příznaky (nastavit stav na „navštíveno“)',
+'enotif_newpagetext' => 'Toto je nová stránka.',
+'changed'            => 'upravil',
+'created'            => 'vytvořil',
+'enotif_subject'     => '$PAGEEDITOR upravil stránku $PAGETITLE na {{grammar:6sg|{{SITENAME}}}}.',
+'enotif_lastvisited' => 'Vizte $1 pro seznam všech změn od minulé návštěvy.',
+'enotif_body'        => 'Vážený uživateli $WATCHINGUSERNAME,
+
+$PAGEEDITDATE $CHANGEDORCREATED $PAGEEDITOR stránku $PAGETITLE, vizte $PAGETITLE_URL pro aktuální verzi.
+
+$NEWPAGE
+
+Shrnutí editace: $PAGESUMMARY $PAGEMINOREDIT
+
+Uživatele, který změnu provedl, můžete kontaktovat:
+e-mailem: $PAGEEDITOR_EMAIL
+na wiki: $PAGEEDITOR_WIKI
+
+Dokud stránku nenavštívíte, nebudou vám zasílána další oznámení o změnách této stránky, případně do doby, než vynulujete příznaky ve svém seznamu sledovaných stránek.
+
+	S pozdravem váš zasílač hlášení {{grammar:2sg|{{SITENAME}}}}
+
+--
+Pro změnu nastavení navštivte
+{{fullurl:Special:Watchlist/edit}}
+
+Rady a kontakt:
+{{fullurl:Project:Potřebuji pomoc}}',
+
+# Delete/protect/revert
+'deletepage'                  => 'Smazat stránku',
+'confirm'                     => 'Potvrdit',
+'excontent'                   => 'obsah byl: „$1“',
+'excontentauthor'             => 'obsah byl: „$1“ (a jediným přispěvatelem byl „[[Speciální:Contributions/$2|$2]]“)',
+'exbeforeblank'               => 'obsah před vyprázdněním byl: „$1“',
+'exblank'                     => 'stránka byla prázdná',
+'confirmdelete'               => 'Potvrdit smazání',
+'deletesub'                   => '(Maže se „$1“)',
+'historywarning'              => ' Varování: Stránka, kterou chcete smazat, má historii:&nbsp;',
+'confirmdeletetext'           => 'Chystáte se trvale smazat z databáze stránku nebo obrázek s celou jeho historií. Prosím potvrďte, že to opravdu chcete učinit, že si uvědomujete důsledky a že je to v souladu s [[{{MediaWiki:policy-url}}|pravidly]].',
+'actioncomplete'              => 'Provedeno',
+'deletedtext'                 => ' Stránka nebo soubor „$1“ byla smazána; $2 zaznamenává poslední smazání.',
+'deletedarticle'              => 'maže „$1“',
+'dellogpage'                  => 'Kniha smazaných stránek',
+'dellogpagetext'              => 'Zde je seznam posledních smazaných z databáze. Všechny časové údaje uvedeny podle časového pásma serveru (UTC).
+<ul>
+</ul>',
+'deletionlog'                 => 'Kniha smazaných stránek',
+'reverted'                    => 'Obnovení předchozí verze',
+'deletecomment'               => 'Důvod smazání',
+'imagereverted'               => 'Obnovení předchozí verze úspěšně provedeno.',
+'rollback'                    => 'Vrátit zpět editace',
+'rollback_short'              => 'Vrátit zpět',
+'rollbacklink'                => 'vrácení zpět',
+'rollbackfailed'              => 'Nešlo vrátit zpět',
+'cantrollback'                => 'Nelze vrátit zpět poslední editaci, neboť poslední přispěvatel je jediným autorem tohoto článku.',
+'alreadyrolled'               => 'Nelze vrátit zpět poslední editaci [[:$1]] od [[User:$2|$2]] ([[User talk:$2|Diskuse]]), protože někdo jiný již článek editoval nebo vrátil tuto změnu zpět. Poslední editace byla od [[User:$3|$3]] ([[User talk:$3|Diskuse]]).',
+'editcomment'                 => 'Shrnutí editace bylo: „<i>$1</i>“.', # only shown if there is an edit comment
+'revertpage'                  => 'Editace uživatele „$2“ vrácena do předchozího stavu, jehož autorem je „$1“.',
+'sessionfailure'              => 'Zřejmě je nějaký problém s vaším přihlášením;
+vámi požadovaná činnost byla stornována jako prevence před neoprávněným přístupem.
+Stiskněte tlačítko „zpět“, obnovte stránku, ze které jste přišli a zkuste činnost znovu.',
+'protectlogpage'              => 'Kniha zamčení',
+'protectlogtext'              => 'Níže je uveden seznam všech zamčení a odemčení stránek.',
+'protectedarticle'            => 'zamyká „[[$1]]“',
+'unprotectedarticle'          => 'odemyká „[[$1]]“',
+'protectsub'                  => '(Zamyká se „$1“)',
+'confirmprotecttext'          => 'Opravdu chcete zamknout tuto stránku?',
+'confirmprotect'              => 'Potvrdit zamčení',
+'protectmoveonly'             => 'Bránit pouze proti přesunutí',
+'protectcomment'              => 'Důvod zamčení',
+'protectexpiry'               => 'Čas vypršení',
+'protect_expiry_invalid'      => 'Čas vypršení je chybný.',
+'unprotectsub'                => '(Odemyká se „$1“)',
+'confirmunprotecttext'        => 'Opravdu chcete odemknout tuto stránku?',
+'confirmunprotect'            => 'Potvrdit odemčení',
+'unprotectcomment'            => 'Důvod odemčení',
+'protect-unchain'             => 'Oddělené ovládání zámku přesunů',
+'protect-text'                => 'Zde si můžete prohlédnout či změnit nastavení zámků stránky <strong>$1</strong>.',
+'protect-viewtext'            => 'Nemáte dostatečná oprávnění ke změně zámků stran. Zde si můžete prohlédnout aktuální nastavení stránky [[$1]]:',
+'protect-cascadeon'           => 'Tato stránka je právě zamčena, protože je vložena do následujících stránek zamčených kaskádovým zámkem. Můžete změnit zámky pro tuto stránku, ale nebude to mít žádný vliv na kaskádové zamčení.',
+'protect-default'             => '(odemčeno)',
+'protect-level-autoconfirmed' => 'Pouze registrovaní',
+'protect-level-sysop'         => 'Pouze správci',
+'protect-summary-cascade'     => 'kaskádový',
+'protect-expiring'            => 'vyprší $1 (UTC)',
+'protect-cascade'             => 'Kaskádní zámek - zamkne všechny stránky vložené do této stránky.',
+
+# Restrictions (nouns)
+'restriction-edit' => 'Editace',
+'restriction-move' => 'Přesun',
+
+# Restriction levels
+'restriction-level-sysop'         => 'zamčeno',
+'restriction-level-autoconfirmed' => 'polozamčeno',
+
+# Undelete
+'undelete'                 => 'Smazané stránky',
+'undeletepage'             => 'Prohlédnout si a obnovit smazanou stránku',
+'viewdeletedpage'          => 'Zobrazení smazané stránky',
+'undeletepagetext'         => 'Tyto stránky jsou smazány, avšak dosud archivovány, a proto je možno je obnovit. Archiv může být pravidelně vyprazdňován.',
+'undeleteextrahelp'        => "Pro úplné obnovení stránky s kompletní historií ponechte všechny čtverečky nezaškrtnuté a klikněte na '''''Obnovit'''''. Pro částečné obnovení zašrktněte čtverečky u obnovovaných revizí a klikněte na '''''Obnovit'''''. Kliknutí na '''''Reset''''' vyprázdní komentář a zruší všechna zaškrtnutí.",
+'undeleterevisions'        => '$1 {{plural:$1|verze je archivována|verze jsou archivovány|verzí je archivováno}}',
+'undeletehistory'          => 'Pokud stránku obnovíte, všechny revize budou v historii obnoveny. Pokud byla vytvořena nová stránka se stejným jménem jako smazaná, obnovené revize se zapíší na starší místo v historii a nová stránka nebude nahrazena.',
+'undeletehistorynoadmin'   => 'Tato stránka byla smazána. Důvod smazání je uveden níže, spolu s informacemi o uživatelích, kteří tuto stránku před smazáním editovali. Samotný text stránky je dostupný pouze správcům.',
+'undelete-revision'        => 'Smazaná verze článku $1 z $2:',
+'undeleterevision-missing' => 'Nesprávná nebo chybějící revize. Možná máte špatný odkaz, nebo revize byla obnovena či odstraněna z archivu.',
+'undeletebtn'              => 'Obnovit',
+'undeletereset'            => 'Reset',
+'undeletecomment'          => 'Komentář:',
+'undeletedarticle'         => 'obnovuje „[[$1]]“',
+'undeletedrevisions'       => '{{plural:$1|Obnovena $1 verze|Obnoveny $1 verze|Obnoveno $1 verzí}}',
+'undeletedrevisions-files' => '{{plural:$1|Obnovena $1 verze|Obnoveny $1 verze|Obnoveno $1 verzí}} a $2 {{plural:$2|soubor|soubory|souborů}}',
+'undeletedfiles'           => '{{plural:$1|Obnoven jeden soubor|Obnoveny $1 soubory|Obnoveno $1 souborů}}',
+'cannotundelete'           => 'Stránku se nepodařilo obnovit; někdo jiný ji již možná obnovil.',
+'undeletedpage'            => "<big>'''$1 byla obnovena'''</big>
+
+Záznam o posledních mazáních a obnoveních najdete v [[Special:Log/delete|knize smazaných stránek]].",
+'undelete-header'          => 'Vizte nedávno smazané stránky v [[Special:Log/delete|knize smazaných stránek]].',
+'undelete-search-box'      => 'Hledání smazaných stránek',
+'undelete-search-prefix'   => 'Zobraz stránky začínající na:',
+'undelete-search-submit'   => 'Hledat',
+'undelete-no-results'      => 'Dotazu žádné smazané stránky neodpovídají.',
+
+# Namespace form on various pages
+'namespace' => 'Jmenný prostor:',
+'invert'    => 'Obrátit výběr',
+
+# Contributions
+'contributions' => 'Příspěvky uživatele',
+'mycontris'     => 'Mé příspěvky',
+'contribsub2'    => '$1 ($2)',
+'nocontribs'    => 'Nenalezeny žádné změny vyhovující kritériím.',
+'ucnote'        => 'Níže jsou uživatelovy poslední <strong>$1</strong> změny během {{plural:$2|posledního|posledních|posledních}} <strong>$2</strong> {{plural:$2|dne|dnů|dnů}}.',
+'uclinks'       => 'Ukaž posledních $1 změn; ukaž posledních $2 dnů.',
+'uctop'         => ' (aktuální)',
+
+'sp-contributions-newest'      => 'Nejnovější',
+'sp-contributions-oldest'      => 'Nejstarší',
+'sp-contributions-newer'       => '$1 novějších',
+'sp-contributions-older'       => '$1 starších',
+'sp-contributions-newbies-sub' => 'Noví uživatelé',
+'sp-contributions-blocklog'    => 'Kniha zablokování',
+
+'sp-newimages-showfrom' => 'Zobrazit nové obrázky počínaje od $1',
+
+# What links here
+'whatlinkshere' => 'Odkazuje sem',
+'notargettitle' => 'Bez cílové stránky',
+'notargettext'  => 'Této funkci musíte určit cílovou stránku nebo uživatele.',
+'linklistsub'   => '(Seznam odkazů)',
+'linkshere'     => "Na '''[[:$1]]''' odkazují tyto stránky:",
+'nolinkshere'   => "Žádná stránka na '''[[:$1]]''' neodkazuje.",
+'isredirect'    => 'přesměrování',
+'istemplate'    => 'vložení',
+
+# Block/unblock
+'blockip'                     => 'Zablokovat uživatele',
+'blockiptext'                 => 'Tento formulář slouží k zablokování editací z konkrétní IP adresy nebo uživatelského jména. Toto by mělo být používáno jen v souladu s [[{{MediaWiki:policy-url}}|pravidly]]. Udejte přesný důvod níže (například ocitujte, které stránky byly poškozeny). Pro odblokování se podívejte na [[Special:Ipblocklist|seznam blokovaných IP adres]].',
+'ipaddress'                   => 'IP adresa',
+'ipadressorusername'          => 'IP adresa nebo uživatelské jméno',
+'ipbexpiry'                   => 'Čas vypršení',
+'ipbreason'                   => 'Důvod',
+'ipbanononly'                 => 'Zablokovat pouze anonymní uživatele',
+'ipbcreateaccount'            => 'Nedovolit registraci nových uživatelů',
+'ipbenableautoblock'          => 'Automaticky blokovat IP adresy používané tímto uživatelem',
+'ipbsubmit'                   => 'Zablokovat',
+'ipbother'                    => 'Jiný čas vypršení',
+'ipboptions'                  => '2 hodiny:2 hours,1 den:1 day,3 dny:3 days,1 týden:1 week,2 týdny:2 weeks,1 měsíc:1 month,3 měsíce:3 months,6 měsíců:6 months,1 rok:1 year,do odvolání:infinite',
+'ipbotheroption'              => 'jiný',
+'badipaddress'                => 'Neplatná IP adresa',
+'blockipsuccesssub'           => 'Zablokování uspělo',
+'blockipsuccesstext'          => 'Uživatel „[[Special:Contributions/$1|$1]]“ je zablokován. <br />Podívejte se na [[Special:Ipblocklist|seznam zablokovaných]], [[Special:Log/block|kniha zablokování]] zaznamenává všechny podobné úkony.',
+'ipb-unblock-addr'            => 'Odblokovat uživatele nebo IP $1',
+'ipb-unblock'                 => 'Odblokovat uživatele nebo IP adresu',
+'ipb-blocklist-addr'          => 'Zobrazit probíhající bloky pro uživatele nebo IP $1',
+'ipb-blocklist'               => 'Zobrazit probíhající bloky',
+'unblockip'                   => 'Odblokovat uživatele',
+'unblockiptext'               => 'Tímto formulářem je možno obnovit právo blokované IP adresy či uživatele opět přispívat do {{grammar:2sg|{{SITENAME}}}}.',
+'ipusubmit'                   => 'Odblokovat',
+'unblocked'                   => '[[User:$1|$1]] byl odblokován',
+'ipblocklist'                 => 'Seznam blokovaných IP adres',
+'blocklistline'               => '$1 $2 zablokoval $3 ($4)',
+'infiniteblock'               => 'do odvolání',
+'expiringblock'               => 'čas vypršení: $1',
+'anononlyblock'               => 'jen anonymové',
+'noautoblockblock'            => 'bez autoblokování',
+'createaccountblock'          => 'tvorba účtů zakázána',
+'ipblocklistempty'            => 'Seznam blokování je momentálně prázdný.',
+'blocklink'                   => 'zablokovat',
+'unblocklink'                 => 'uvolnit',
+'contribslink'                => 'příspěvky',
+'autoblocker'                 => 'Automaticky zablokováno, protože sdílíte IP adresu s „$1“. Důvod zablokování tohoto uživatele: „$2“.',
+'blocklogpage'                => 'Kniha zablokování',
+'blocklogentry'               => 'blokuje „[[$1]]“ s časem vypršení $2 $3',
+'blocklogtext'                => 'Toto je kniha úkonů blokování a odblokování uživatelů. Automaticky blokované IP adresy nejsou vypsány. Podívejte se na [[Special:Ipblocklist|seznam blokování IP]] s výčtem aktuálních zákazů a blokování.',
+'unblocklogentry'             => 'odblokovává „$1“',
+'block-log-flags-anononly'    => 'jen nepřihl.',
+'block-log-flags-nocreate'    => 'vytváření účtů zablokováno',
+'block-log-flags-autoblock'   => 'autoblokování zapnuto',
+'range_block_disabled'        => 'Blokování rozsahů IP adres je zakázáno.',
+'ipb_expiry_invalid'          => 'Neplatný čas vypršení.',
+'ipb_already_blocked'         => '„$1“ již je zablokován.',
+'ip_range_invalid'            => 'Neplatný IP rozsah.',
+'proxyblocker'                => 'Blokování proxy serverů',
+'ipb_cant_unblock'            => 'Chyba: Blokování s ID $1 nebylo nalezeno. Uživatel již možná byl odblokován.',
+'proxyblockreason'            => 'Vaše IP adresa byla zablokována, protože funguje jako otevřený proxy server. Kontaktujte svého poskytovatele internetového připojení nebo technickou podporu a informujte je o tomto vážném bezpečnostním problému.',
+'proxyblocksuccess'           => 'Hotovo.',
+'sorbs'                       => 'SORBS DNSBL',
+'sorbsreason'                 => 'Vaše IP adresa je uvedena na seznamu [http://www.sorbs.net/ SORBS] DNSBL jako otevřený proxy server.',
+'sorbs_create_account_reason' => 'Vaše IP adresa je uvedena na seznamu [http://www.sorbs.net/ SORBS] DNSBL jako otevřený proxy server. Z této adresy si nemůžete založit účet',
+
+# Developer tools
+'lockdb'              => 'Zamknout databázi',
+'unlockdb'            => 'Odemknout databázi',
+'lockdbtext'          => 'Pokud zamknete databázi, znemožníte ostatním editovat, upravovat nastavení, sledované stránky apod. Potvrďte, že to opravdu chcete udělat a že odemknete databázi hned po opravách.',
+'unlockdbtext'        => ' Pokud odemknete databázi, umožníte ostatním editovat, upravovat nastavení, sledované stránky apod. Potvrďte, že to opravdu chcete udělat.',
+'lockconfirm'         => 'Ano, opravdu chci zamknout databázi.',
+'unlockconfirm'       => 'Ano, opravdu chci odemknout databázi.',
+'lockbtn'             => 'Zamknout databázi',
+'unlockbtn'           => 'Odemknout databázi',
+'locknoconfirm'       => 'Nebylo zaškrtnuto políčko potvrzení.',
+'lockdbsuccesssub'    => 'Databáze uzamčena',
+'unlockdbsuccesssub'  => 'Databáze odemčena',
+'lockdbsuccesstext'   => 'Databáze {{grammar:2sg|{{SITENAME}}}} byla úspěšně uzamčena.
+<br />Nezapomeňte ji po dokončení údržby [[Special:Unlockdb|odemknout]].',
+'unlockdbsuccesstext' => 'Databáze {{grammar:2sg|{{SITENAME}}}} je odemčena.',
+'lockfilenotwritable' => 'Do souboru zámku databáze nelze zapisovat. Pro zamčení či odemčení databáze musí mít webový server právo zápisu do tohoto souboru.',
+'databasenotlocked'   => 'Databáze není uzamčena.',
+
+# Move page
+'movepage'                => 'Přesunout stránku',
+'movepagetext'            => 'Pomocí tohoto formuláře změníte název stránky a přesunete i celou její historii pod nový název. Původní název se stane přesměrováním na nový název. Odkazy na předchozí název <i>nebudou</i> změněny. <b>VAROVÁNÍ!</b> Toto může drastická a nečekaná změna pro oblíbené stránky. Ujistěte se, prosím, že chápete důsledky vašeho kroku před tím, než změnu provedete.',
+'movepagetalktext'        => "Přidružená diskusní stránka, pokud existuje, bude automaticky přesunuta společně se stránkou, '''pokud:'''
+* Dosud neexistuje neprázdná diskusní stránka pod novým jménem a
+* nezrušíte křížek ve formuláři.
+
+V těchto případech musíte přesunout nebo sloučit stránky manuálně, jestliže si to přejete.",
+'movearticle'             => 'Přesunout stránku',
+'movenologin'             => 'Nejste přihlášen(a)!',
+'movenologintext'         => 'Pro přesouvání stránek se musíte [[Special:Userlogin|přihlásit]].',
+'newtitle'                => 'Na nový název',
+'move-watch'              => 'Sledovat tuto stránku',
+'movepagebtn'             => 'Přesunout stránku',
+'pagemovedsub'            => 'Úspěšně přesunuto',
+'pagemovedtext'           => "Stránka „[[$1]]“ přesunuta na „[[$2]]“.
+
+'''Nyní''' následujte odkaz [[{{ns:-1}}:Whatlinkshere/$1]]: pokud se v seznamu vyskytnou nějaké přesměrovače, je třeba je upravit tak, aby ukazovaly na nový název ($2), jinak nebudou fungovat.",
+'articleexists'           => 'Takto nazvaná stránka již existuje, nebo Vámi zvolený název je neplatný. Zvolte jiný název.',
+'talkexists'              => 'Stránka byla přesunuta úspěšně, ale diskusní stránka přesunuta být nemohla, neboť pod novým názvem již nějaká stránka existuje. Proveďte prosím ruční sloučení.',
+'movedto'                 => 'přesunuto na',
+'movetalk'                => 'Přesunout také diskusní stránku, existuje-li.',
+'talkpagemoved'           => 'Diskusní stránka byla také přesunuta.',
+'talkpagenotmoved'        => 'Diskusní stránka <strong>nebyla</strong> přesunuta.',
+'1movedto2'               => 'Stránka [[$1]] přemístěna na stránku [[$2]]',
+'1movedto2_redir'         => 'Stránka [[$1]] přemístěna na stránku [[$2]] s výměnou přesměrování',
+'movelogpage'             => 'Kniha přesunů',
+'movelogpagetext'         => 'Toto je záznam všech přesunů stránek.',
+'movereason'              => 'Důvod',
+'revertmove'              => 'vrátit',
+'delete_and_move'         => 'Smazat a přesunout',
+'delete_and_move_text'    => '==Je potřeba smazání==
+
+Cílová stránka „[[$1]]“ již existuje. Přejete si ji smazat pro uvolnění místa pro přesun?',
+'delete_and_move_confirm' => 'Ano, smazat cílovou stránku',
+'delete_and_move_reason'  => 'Smazáno pro umožnění přesunu',
+'selfmove'                => 'Původní a nový název jsou stejné; nelze stránku přesunout na sebe samu.',
+'immobile_namespace'      => 'Nový název je speciálního druhu; z a do tohoto jmenného prostoru nelze stránky přesouvat.',
+
+# Export
+'export'          => 'Exportovat stránky',
+'exporttext'      => 'Můžete exportovat text a historii editací některé stránky nebo sady stránek zabalené v XML. Výsledný soubor lze naimportovat do jiné wiki, která běží na software MediaWiki, pomocí stránky [[{{ns:Special}}:Import]].
+
+Do níže uvedeného editačního pole zadejte názvy stránek, které chcete exportovat; každý řádek jeden název. Zvolte také, zda se mají exportovat i starší verze stránky včetně informací v historii editací, nebo jen aktuální verze s informací o poslední editaci.',
+'exportcuronly'   => 'Zahrnout jen současnou verzi, ne plnou historii',
+'exportnohistory' => "----
+'''Poznámka:''' export plných historií protřednictvím tohoto formuláře byl z výkonnostních důvodů zakázán.",
+'export-submit'   => 'Exportovat',
+
+# Namespace 8 related
+'allmessages'               => 'Všechna systémová hlášení',
+'allmessagesname'           => 'Označení hlášení',
+'allmessagesdefault'        => 'Původní text',
+'allmessagescurrent'        => 'Aktuální text',
+'allmessagestext'           => 'Toto je seznam všech hlášení dostupných ve jmenném prostoru MediaWiki.',
+'allmessagesnotsupportedUI' => 'Váš aktuální jazyk rozhraní <b>$1</b> není na tomto serveru pro {{ns:-1}}:AllMessages podporován.',
+'allmessagesnotsupportedDB' => '{{ns:-1}}:AllMessages není podporováno, neboť wgUseDatabaseMessages je vypnuto.',
+'allmessagesfilter'         => 'Filtr názvů hlášení:',
+'allmessagesmodified'       => 'Zobrazit pouze upravená hlášení',
+
+# Thumbnails
+'thumbnail-more'  => 'Zvětšit',
+'missingimage'    => '<b>Chybějící obrázek</b><br /><i>$1</i>',
+'filemissing'     => 'Chybějící soubor',
+'thumbnail_error' => 'Chyba při vytváření náhledu: $1',
+
+# Special:Import
+'import'                     => 'Importovat stránky',
+'importinterwiki'            => 'Import mezi wiki',
+'import-interwiki-text'      => 'Pro import zvolte zdrojovou wiki a název stránky. Data revizí a jména autorů budou zachována. Všechny importy se zaznamenávají do [[Special:Log/import|knihy importů]].',
+'import-interwiki-history'   => 'Zkopírovat všechny historické verze této stránky',
+'import-interwiki-submit'    => 'Importovat',
+'import-interwiki-namespace' => 'Stránky přenést do jmenného prostoru:',
+'importtext'                 => 'Prosím exportujte soubor ze zdrojové wiki pomocí nástroje {{ns:-1}}:Export, uložte ji na svůj disk a nahrajte ji sem.',
+'importstart'                => 'Stránky se importují…',
+'import-revision-count'      => '$1 {{PLURAL:$1|revize|revize|revizí}}',
+'importnopages'              => 'Není co importovat.',
+'importfailed'               => 'Import selhal: $1',
+'importunknownsource'        => 'Neznámý typ zdroje importu',
+'importcantopen'             => 'Nepodařilo se otevřít importní soubor',
+'importbadinterwiki'         => 'Neplatný interwiki odkaz',
+'importnotext'               => 'Prázdný nebo žádný text',
+'importsuccess'              => 'Import byl úspěšný!',
+'importhistoryconflict'      => 'Existuje konflikt mezi historiemi verzí. Možná, že tato stránka byla již importována dříve.',
+'importnosources'            => 'Nebyly definovány žádné zdroje pro import mezi wiki a přímé načítání historie je vypnuto.',
+'importnofile'               => 'Nebyl načten importní soubor.',
+'importuploaderror'          => 'Nepodařilo se načíst importní soubor; možná jeho velikost přesahuje dovolenou mez.',
+
+# Import log
+'importlogpage'                    => 'Kniha importů',
+'importlogpagetext'                => 'Na této stránce se zobrazují správcovské importy stránek včetně historie editací z jiných wiki.',
+'import-logentry-upload'           => 'naimportoval [[$1]] načtením souboru',
+'import-logentry-upload-detail'    => '$1 {{PLURAL:$1|revizi|revize|revizí}}',
+'import-logentry-interwiki'        => 'přenesl $1',
+'import-logentry-interwiki-detail' => '$1 {{PLURAL:$1|revizi|revize|revizí}} z $2',
+
+# Tooltip help for the actions
+'tooltip-pt-userpage'             => 'Moje uživatelská stránka',
+'tooltip-pt-anonuserpage'         => 'Uživatelská stránka pro IP adresu, ze které editujete',
+'tooltip-pt-mytalk'               => 'Moje diskusní stránka',
+'tooltip-pt-anontalk'             => 'Diskuse o editacích provedených z této IP adresy',
+'tooltip-pt-preferences'          => 'Moje preference',
+'tooltip-pt-watchlist'            => 'Seznam stránek, jejichž změny sleduji',
+'tooltip-pt-mycontris'            => 'Seznam mých příspěvků',
+'tooltip-pt-login'                => 'Doporučujeme vám přihlásit se, ovšem není to povinné.',
+'tooltip-pt-anonlogin'            => 'Doporučujeme vám přihlásit se, ovšem není to povinné.',
+'tooltip-pt-logout'               => 'Odhlásit se',
+'tooltip-ca-talk'                 => 'Diskuse ke stránce',
+'tooltip-ca-edit'                 => 'Tuto stránku můžete editovat. Prosíme použijte tlačítko Ukázat náhled před uložením.',
+'tooltip-ca-addsection'           => 'Přidat k této diskusi svůj komentář.',
+'tooltip-ca-viewsource'           => 'Tato stránka je zamčena. Můžete si prohlédnout její zdrojový kód.',
+'tooltip-ca-history'              => 'Starší verze této stránky.',
+'tooltip-ca-protect'              => 'Zamknout tuto stránku.',
+'tooltip-ca-delete'               => 'Smazat tuto stránku.',
+'tooltip-ca-undelete'             => 'Obnovit editace této stránky provedené před jejím smazáním.',
+'tooltip-ca-move'                 => 'Přesunout tuto stránku',
+'tooltip-ca-watch'                => 'Přidat tuto stránku mezi sledované',
+'tooltip-ca-unwatch'              => 'Vyjmout tuto stránku ze sledovaných',
+'tooltip-search'                  => 'Prohledat tuto wiki',
+'tooltip-p-logo'                  => 'Hlavní strana',
+'tooltip-n-mainpage'              => 'Navštívit Hlavní stranu',
+'tooltip-n-portal'                => 'O projektu, jak můžete pomoci, kde hledat',
+'tooltip-n-currentevents'         => 'Informace o aktuálních událostech',
+'tooltip-n-recentchanges'         => 'Seznam posledních změn na této wiki',
+'tooltip-n-randompage'            => 'Přejít na náhodně vybranou stránku',
+'tooltip-n-help'                  => 'Místo, kde najdete pomoc',
+'tooltip-n-sitesupport'           => 'Podpořte nás',
+'tooltip-t-whatlinkshere'         => 'Seznam všech wikistránek, které sem odkazují',
+'tooltip-t-recentchangeslinked'   => 'Nedávné změny stránek, které sem odkazují',
+'tooltip-feed-rss'                => 'RSS kanál pro tuto stránku',
+'tooltip-feed-atom'               => 'Atom kanál pro tuto stránku',
+'tooltip-t-contributions'         => 'Prohlédnout si seznam příspěvků tohoto uživatele',
+'tooltip-t-emailuser'             => 'Poslat e-mail tomuto uživateli',
+'tooltip-t-upload'                => 'Nahrát obrázky či jiná multimédia',
+'tooltip-t-specialpages'          => 'Seznam všech speciálních stránek',
+'tooltip-ca-nstab-main'           => 'Zobrazit článek',
+'tooltip-ca-nstab-user'           => 'Zobrazit uživatelovu stránku',
+'tooltip-ca-nstab-media'          => 'Zobrazit stránku souboru',
+'tooltip-ca-nstab-special'        => 'Toto je speciální stránka, kterou nelze editovat.',
+'tooltip-ca-nstab-project'        => 'Zobrazit stránku o wiki.',
+'tooltip-ca-nstab-image'          => 'Zobrazit stránku obrázku.',
+'tooltip-ca-nstab-mediawiki'      => 'Zobrazit systémovou zprávu.',
+'tooltip-ca-nstab-template'       => 'Zobrazit šablonu.',
+'tooltip-ca-nstab-help'           => 'Zobrazit stránku nápovědy.',
+'tooltip-ca-nstab-category'       => 'Zobrazit kategorii.',
+'tooltip-minoredit'               => 'Označit změnu jako malou editaci',
+'tooltip-save'                    => 'Kliknutím na toto tlačítko uložíte na trvalo své změny',
+'tooltip-preview'                 => 'Kliknutím na toto tlačítko zobrazíte náhled svých změn; používejte ho, prosíme, před uložením!',
+'tooltip-diff'                    => 'Zobrazit, jaké změny jste v textu provedli.',
+'tooltip-compareselectedversions' => 'Podívat se na rozdíly mezi dvěma vybranými verzemi této stránky.',
+'tooltip-watch'                   => 'Přidat stránku do seznamu sledovaných',
+'tooltip-recreate'                => 'Uložit stránku, takže bude po smazání znovu vytvořena',
+
+# Stylesheets
+'common.css'   => '/* Zde uvedené CSS bude ovlivňovat všechny styly */',
+'monobook.css' => '/* Zde uvedené CSS bude ovlivňovat pouze styl „monobook“ */',
+
+# Scripts
+'common.js'   => '/* Zde uvedený JavaScript bude použit pro všechny uživatele při načtení každé stránky.  */',
+'monobook.js' => '/* Zastaralé; použijte [[MediaWiki:common.js]] */',
+
+# Metadata
+'nodublincore'      => 'Na tomto serveru je vypnuto generování metadat Dublin Core RDF.',
+'nocreativecommons' => 'Na tomto server je vypnuto generování metadat Creative Commons RDF.',
+'notacceptable'     => 'Tento wiki server není schopen poskytnout data ve formátu, který by váš klient byl schopen přečíst.',
+
+# Attribution
+'anonymous'        => 'anonymní uživatel(é) {{grammar:2sg|{{SITENAME}}}}',
+'siteuser'         => 'uživatel {{grammar:2sg|{{SITENAME}}}} $1',
+'lastmodifiedatby' => 'Tuto stránku naposledy měnil $3 v $2, $1.', # $1 date, $2 time, $3 user
+'and'              => 'a',
+'othercontribs'    => 'Do textu přispěli $1.',
+'others'           => 'ostatní',
+'siteusers'        => 'uživatel(é) {{grammar:2sg|{{SITENAME}}}} $1',
+'creditspage'      => 'Zásluhy za stránku',
+'nocredits'        => 'K této stránce neexistuje informace o zásluhách.',
+
+# Spam protection
+'spamprotectiontitle'    => 'Protispamový filtr',
+'spamprotectiontext'     => 'Stránka, kterou jste se pokusil(a) uložit, byla zablokována protispamovým filtrem. Pravděpodobnou příčinou je odkaz na externí stránky. Může vás zajímat následující regulární výraz, který označuje v současné době blokované stránky:',
+'spamprotectionmatch'    => 'Následující text spustil náš filtr proti spamu: $1',
+'subcategorycount'       => 'Tato kategorie obsahuje $1 {{plural:$1|podkategorii|podkategorie|podkategorií}}.',
+'categoryarticlecount'   => 'Tato kategorie obsahuje $1 {{plural:$1|článek|články|článků}}.',
+'category-media-count'   => 'Tato kategorie obsahuje {{plural:$1|jeden soubor|$1 soubory|$1 souborů}}.',
+'listingcontinuesabbrev' => 'pokrač.',
+'spambot_username'       => 'Systémový čistič spamu',
+'spam_reverting'         => 'Revert na poslední verzi neobsahující odkazy na $1',
+'spam_blanking'          => 'Všechny revize obsahovaly odkazy na $1, vyprázdněno',
+
+# Info page
+'infosubtitle'   => 'Informace o stránce',
+'numedits'       => 'Počet editací (článek): $1',
+'numtalkedits'   => 'Počet editací (diskusní stránka): $1',
+'numwatchers'    => 'Počet sledujících uživatelů: $1',
+'numauthors'     => 'Počet různých autorů (článek): $1',
+'numtalkauthors' => 'Počet různých autorů (diskusní stránka): $1',
+
+# Math options
+'mw_math_png'    => 'Vždy jako PNG',
+'mw_math_simple' => 'Jednoduché jako HTML, jinak PNG',
+'mw_math_html'   => 'HTML pokud je to možné, jinak PNG',
+'mw_math_source' => 'Ponechat jako TeX (pro textové prohlížeče)',
+'mw_math_modern' => 'Doporučené nastavení pro moderní prohlížeče',
+'mw_math_mathml' => 'MathML pokud je podporováno (experimentální)',
+
+# Patrolling
+'markaspatrolleddiff'                 => 'Označit jako prověřené',
+'markaspatrolledtext'                 => 'Označit tento článek jako prověřený',
+'markedaspatrolled'                   => 'Označeno jako prověřené',
+'markedaspatrolledtext'               => 'Vybraná verze byla označena jako prověřená.',
+'rcpatroldisabled'                    => 'Hlídka posledních změn vypnuta',
+'rcpatroldisabledtext'                => 'Hlídka posledních změn je momentálně vypnuta.',
+'markedaspatrollederror'              => 'Nelze označit za prověřené',
+'markedaspatrollederrortext'          => 'Musíte zvolit revizi, která má být označena jako prověřená.',
+'markedaspatrollederror-noautopatrol' => 'Nemáte dovoleno označovat vlastní editace jako prověřené.',
+
+# Patrol log
+'patrol-log-page' => 'Kniha prověřených editací',
+'patrol-log-line' => 'označit revizi $1 článku $2 za prověřenou $3',
+'patrol-log-auto' => '(automaticky)',
+'patrol-log-diff' => 'r$1',
+
+# Image deletion
+'deletedrevision' => 'Smazána stará revize $1.',
+
+# Browsing diffs
+'previousdiff' => '← Předchozí porovnání',
+'nextdiff'     => 'Následující porovnání →',
+
+# Media information
+'mediawarning' => "'''Upozornění''': Tento soubor může obsahovat škodlivý kód, spuštěním můžete ohrozit svůj počítač.<hr />",
+'imagemaxsize' => 'Omezit obrázky na stránkách s popiskem na:',
+'thumbsize'    => 'Velikost náhledu:',
+
+'newimages'    => 'Galerie nových obrázků',
+'showhidebots' => '($1 roboty)',
+'noimages'     => 'Není co zobrazit.',
+
+'passwordtooshort' => 'Vaše heslo je příliš krátké. Musí obsahovat nejméně $1 {{plural:$1|znak|znaky|znaků}}.',
+
+# Metadata
+'metadata'          => 'Metadata',
+'metadata-help'     => 'Tento soubor obsahuje dodatečné informace, poskytnuté zřejmě digitálním fotoaparátem nebo scannerem, kterým byl pořízen. Pokud byl soubor od té doby změněn, některé údaje mohou být neplatné.',
+'metadata-expand'   => 'Zobrazit podrobnosti',
+'metadata-collapse' => 'Skrýt podrobnosti',
+'metadata-fields'   => 'Pole EXIF uvedená v této zprávě budou na stránce s popisem vypsána vždy. Pro zobrazení ostatních bude třeba kliknout na „zobrazit podrobnosti“.
+* make
+* model
+* datetimeoriginal
+* exposuretime
+* fnumber
+* focallength',
+
+# EXIF tags
+'exif-imagewidth'                  => 'Šířka',
+'exif-imagelength'                 => 'Výška',
+'exif-bitspersample'               => 'Bitů na složku',
+'exif-compression'                 => 'Druh komprese',
+'exif-photometricinterpretation'   => 'Barevný prostor',
+'exif-orientation'                 => 'Orientace',
+'exif-samplesperpixel'             => 'Počet složek',
+'exif-planarconfiguration'         => 'Uspořádání dat',
+'exif-ycbcrsubsampling'            => 'Poměr podvzorkování Y ku C',
+'exif-ycbcrpositioning'            => 'Umístění Y a C',
+'exif-xresolution'                 => 'Rozlišení obrázku na šířku',
+'exif-yresolution'                 => 'Rozlišení obrázku na výšku',
+'exif-resolutionunit'              => 'Jednotky rozlišení',
+'exif-stripoffsets'                => 'Umístění dat obrázku',
+'exif-rowsperstrip'                => 'Počet řádků na pás',
+'exif-stripbytecounts'             => 'Počet bajtů na komprimovaný pás',
+'exif-jpeginterchangeformat'       => 'Ofset k JPEG SOI',
+'exif-jpeginterchangeformatlength' => 'Počet bajtů JPEG dat',
+'exif-transferfunction'            => 'Přenosová funkce',
+'exif-whitepoint'                  => 'Chroma bílého bodu',
+'exif-primarychromaticities'       => 'Chroma primárních barev',
+'exif-ycbcrcoefficients'           => 'Koeficienty matice pro transformaci barevných prostorů',
+'exif-referenceblackwhite'         => 'Světlost referenčního černého a bílého bodu',
+'exif-datetime'                    => 'Datum a čas vytvoření obrázku',
+'exif-imagedescription'            => 'Název obrázku',
+'exif-make'                        => 'Značka fotoaparátu',
+'exif-model'                       => 'Model fotoaparátu',
+'exif-software'                    => 'Použitý software',
+'exif-artist'                      => 'Autor',
+'exif-copyright'                   => 'Držitel autorských práv',
+'exif-exifversion'                 => 'Verze Exif',
+'exif-flashpixversion'             => 'Podporovaná verze Flashpix',
+'exif-colorspace'                  => 'Barevný prostor',
+'exif-componentsconfiguration'     => 'Význam jednotlivých složek',
+'exif-compressedbitsperpixel'      => 'Komprimační režim',
+'exif-pixelydimension'             => 'Platná šířka obrazu',
+'exif-pixelxdimension'             => 'Platná výška obrazu',
+'exif-makernote'                   => 'Poznámky výrobce',
+'exif-usercomment'                 => 'Uživatelské poznámky',
+'exif-relatedsoundfile'            => 'Související zvukový soubor',
+'exif-datetimeoriginal'            => 'Datum a čas pořízení obrázku',
+'exif-datetimedigitized'           => 'Datum a čas digitalizace',
+'exif-subsectime'                  => 'zlomky sekundy pro DateTime',
+'exif-subsectimeoriginal'          => 'zlomky sekundy pro DateTimeOriginal',
+'exif-subsectimedigitized'         => 'zlomky sekundy pro DateTimeDigitized',
+'exif-exposuretime'                => 'Expozice',
+'exif-exposuretime-format'         => '$1 s ($2)',
+'exif-fnumber'                     => 'Clona',
+'exif-fnumber-format'              => 'f/$1',
+'exif-exposureprogram'             => 'Expoziční program',
+'exif-spectralsensitivity'         => 'Spektrální citlivost',
+'exif-isospeedratings'             => 'Nastavení ISO citlivosti',
+'exif-oecf'                        => 'Optoelectronická převodní funkce (OECF)',
+'exif-shutterspeedvalue'           => 'Rychlost závěrky',
+'exif-aperturevalue'               => 'Clona',
+'exif-brightnessvalue'             => 'Světlost',
+'exif-exposurebiasvalue'           => 'Změna expozice',
+'exif-maxaperturevalue'            => 'Nejmenší clona',
+'exif-subjectdistance'             => 'Vzdálenost k předmětu',
+'exif-meteringmode'                => 'Způsob měření',
+'exif-lightsource'                 => 'Světelný zdroj',
+'exif-flash'                       => 'Blesk',
+'exif-focallength'                 => 'Ohnisková vzdálenost',
+'exif-focallength-format'          => '$1 mm',
+'exif-subjectarea'                 => 'Umístění předmětu',
+'exif-flashenergy'                 => 'Výkon blesku',
+'exif-spatialfrequencyresponse'    => 'Odezva prostorové frekvence',
+'exif-focalplanexresolution'       => 'X rozlišení ohniskové roviny',
+'exif-focalplaneyresolution'       => 'Y rozlišení ohniskové roviny',
+'exif-focalplaneresolutionunit'    => 'Jednotka rozlišení ohniskové roviny',
+'exif-subjectlocation'             => 'Umístění předmětu',
+'exif-exposureindex'               => 'Expoziční index',
+'exif-sensingmethod'               => 'Senzor',
+'exif-filesource'                  => 'Zdroj souboru',
+'exif-scenetype'                   => 'Druh scény',
+'exif-cfapattern'                  => 'Geometrické uspořádání senzoru',
+'exif-customrendered'              => 'Uživatelské zpracování',
+'exif-exposuremode'                => 'Expoziční režim',
+'exif-whitebalance'                => 'Vyvážení bílé',
+'exif-digitalzoomratio'            => 'Digitální zoom',
+'exif-focallengthin35mmfilm'       => 'Ekvivalent ohniskové délky pro 35mm film',
+'exif-scenecapturetype'            => 'Druh scény',
+'exif-gaincontrol'                 => 'Úprava světlosti',
+'exif-contrast'                    => 'Kontrast',
+'exif-saturation'                  => 'Sytost',
+'exif-sharpness'                   => 'Ostrost',
+'exif-devicesettingdescription'    => 'Popis nastavení zařízení',
+'exif-subjectdistancerange'        => 'Vzdálenost k předmětu',
+'exif-imageuniqueid'               => 'Unikátní ID obrázku',
+'exif-gpsversionid'                => 'Verze GPS tagu',
+'exif-gpslatituderef'              => 'Severní/jižní zeměpisná šířka',
+'exif-gpslatitude'                 => 'Zeměpisná šířka',
+'exif-gpslongituderef'             => 'Východní/západní zeměpisná délka',
+'exif-gpslongitude'                => 'Zeměpisná délka',
+'exif-gpsaltituderef'              => 'Nad/podmořská výška/hloubka',
+'exif-gpsaltitude'                 => 'Nadmořská výška',
+'exif-gpstimestamp'                => 'GPS čas (podle atomových hodin)',
+'exif-gpssatellites'               => 'Satelity použité pro měření',
+'exif-gpsstatus'                   => 'Stav přijímače',
+'exif-gpsmeasuremode'              => 'Režim měření',
+'exif-gpsdop'                      => 'Přesnost měření',
+'exif-gpsspeedref'                 => 'Jednotka rychlosti',
+'exif-gpsspeed'                    => 'Rychlost GPS přijímače',
+'exif-gpstrackref'                 => 'Reference pro směr pohybu',
+'exif-gpstrack'                    => 'Směr pohybu',
+'exif-gpsimgdirectionref'          => 'Reference pro orientaci obrázku',
+'exif-gpsimgdirection'             => 'Orientace obrázku',
+'exif-gpsmapdatum'                 => 'Použitý geodetický systém',
+'exif-gpsdestlatituderef'          => 'Severní/jižní zeměpisná šířka předmětu',
+'exif-gpsdestlatitude'             => 'Zeměpisná šířka předmětu',
+'exif-gpsdestlongituderef'         => 'Východní/západní zeměpisná délka předmětu',
+'exif-gpsdestlongitude'            => 'Zeměpisná délka předmětu',
+'exif-gpsdestbearingref'           => 'Reference pro směr k předmětu',
+'exif-gpsdestbearing'              => 'Směr k předmětu',
+'exif-gpsdestdistanceref'          => 'Jednotka vzdálenosti k předmětu',
+'exif-gpsdestdistance'             => 'Vzdálenost k předmětu',
+'exif-gpsprocessingmethod'         => 'Označení metody zpracování GPS dat',
+'exif-gpsareainformation'          => 'Označení GPS oblasti',
+'exif-gpsdatestamp'                => 'Datum podle GPS',
+'exif-gpsdifferential'             => 'Diferenciální korekce GPS',
+
+# EXIF attributes
+'exif-compression-1' => 'Nekomprimovaný',
+'exif-compression-6' => 'JPEG',
+
+'exif-photometricinterpretation-2' => 'RGB',
+'exif-photometricinterpretation-6' => 'YCbCr',
+
+'exif-unknowndate' => 'neznámé datum',
+
+'exif-orientation-1' => 'Normální', # 0th row: top; 0th column: left
+'exif-orientation-2' => 'Vodorovně převráceno', # 0th row: top; 0th column: right
+'exif-orientation-3' => 'Otočeno o 180°', # 0th row: bottom; 0th column: right
+'exif-orientation-4' => 'Svisle převráceno', # 0th row: bottom; 0th column: left
+'exif-orientation-5' => 'Otočeno o 90° proti směru hodinových ručiček a svisle převráceno', # 0th row: left; 0th column: top
+'exif-orientation-6' => 'Otočeno o 90° ve směru hodinových ručiček', # 0th row: right; 0th column: top
+'exif-orientation-7' => 'Otočeno o 90° ve směru hodinových ručiček a svisle převráceno', # 0th row: right; 0th column: bottom
+'exif-orientation-8' => 'Otočeno o 90° proti směru hodinových ručiček', # 0th row: left; 0th column: bottom
+
+'exif-planarconfiguration-1' => 'chunky',
+'exif-planarconfiguration-2' => 'planar',
+
+'exif-xyresolution-i' => '$1 dpi',
+'exif-xyresolution-c' => '$1 dpc',
+
+'exif-colorspace-1'      => 'sRGB',
+'exif-colorspace-ffff.h' => 'FFFF.H',
+
+'exif-componentsconfiguration-0' => 'neexistuje',
+'exif-componentsconfiguration-1' => 'Y',
+'exif-componentsconfiguration-2' => 'Cb',
+'exif-componentsconfiguration-3' => 'Cr',
+'exif-componentsconfiguration-4' => 'R',
+'exif-componentsconfiguration-5' => 'G',
+'exif-componentsconfiguration-6' => 'B',
+
+'exif-exposureprogram-0' => 'Neuvedeno',
+'exif-exposureprogram-1' => 'Ruční',
+'exif-exposureprogram-2' => 'Normální',
+'exif-exposureprogram-3' => 'Priorita clony',
+'exif-exposureprogram-4' => 'Priorita závěrky',
+'exif-exposureprogram-5' => 'Kreativní (lepší hloubka ostrosti)',
+'exif-exposureprogram-6' => 'Akce (rychlejší závěrka)',
+'exif-exposureprogram-7' => 'Portrét (detailní fotografie s neostrým pozadím)',
+'exif-exposureprogram-8' => 'Krajina (fotografie krajiny s ostrým pozadím)',
+
+'exif-subjectdistance-value' => '$1 m',
+
+'exif-meteringmode-0'   => 'Není známo',
+'exif-meteringmode-1'   => 'Průměrové',
+'exif-meteringmode-2'   => 'Vážený průměr',
+'exif-meteringmode-3'   => 'Bodové',
+'exif-meteringmode-4'   => 'Zónové',
+'exif-meteringmode-5'   => 'Vzorové',
+'exif-meteringmode-6'   => 'Částečné',
+'exif-meteringmode-255' => 'Jiné',
+
+'exif-lightsource-0'   => 'Není známo',
+'exif-lightsource-1'   => 'Denní světlo',
+'exif-lightsource-2'   => 'Fluorescentní',
+'exif-lightsource-3'   => 'Žárovka',
+'exif-lightsource-4'   => 'Blesk',
+'exif-lightsource-9'   => 'Jasno',
+'exif-lightsource-10'  => 'Zamračeno',
+'exif-lightsource-11'  => 'Stín',
+'exif-lightsource-12'  => 'Zářivka denní světlo (D 5700 – 7100K)',
+'exif-lightsource-13'  => 'Zářivka bílé denní světlo (N 4600 – 5400K)',
+'exif-lightsource-14'  => 'Zářivka studená bílá (W 3900 – 4500K)',
+'exif-lightsource-15'  => 'Bílá zářivka (WW 3200 – 3700K)',
+'exif-lightsource-17'  => 'Standardní osvětlení A',
+'exif-lightsource-18'  => 'Standardní osvětlení B',
+'exif-lightsource-19'  => 'Standardní osvětlení C',
+'exif-lightsource-20'  => 'D55',
+'exif-lightsource-21'  => 'D65',
+'exif-lightsource-22'  => 'D75',
+'exif-lightsource-23'  => 'D50',
+'exif-lightsource-24'  => 'ISO studiová žárovka',
+'exif-lightsource-255' => 'Jiný světelný zdroj',
+
+'exif-focalplaneresolutionunit-2' => 'in',
+
+'exif-sensingmethod-1' => 'Není známo',
+'exif-sensingmethod-2' => 'Jednočipový plošný senzor',
+'exif-sensingmethod-3' => 'Dvoučipový plošný senzor',
+'exif-sensingmethod-4' => 'Tříčipový plošný senzor',
+'exif-sensingmethod-5' => 'Sekvenční plošný senzor',
+'exif-sensingmethod-7' => 'Trilineární senzor',
+'exif-sensingmethod-8' => 'Sekvenční lineární senzor',
+
+'exif-filesource-3' => 'Digitální fotoaparát',
+
+'exif-scenetype-1' => 'Přímo fotografováno',
+
+'exif-customrendered-0' => 'Běžné zpracování',
+'exif-customrendered-1' => 'Uživatelské zpracování',
+
+'exif-exposuremode-0' => 'Automatická expozice',
+'exif-exposuremode-1' => 'Ruční expozice',
+'exif-exposuremode-2' => 'Bracketing',
+
+'exif-whitebalance-0' => 'Automatické vyvážení bílé',
+'exif-whitebalance-1' => 'Ruční vyvážení bílé',
+
+'exif-scenecapturetype-0' => 'Standardní',
+'exif-scenecapturetype-1' => 'Na šířku',
+'exif-scenecapturetype-2' => 'Na výšku',
+'exif-scenecapturetype-3' => 'Noční scéna',
+
+'exif-gaincontrol-0' => 'Žádná',
+'exif-gaincontrol-1' => 'Mírné zvýšení jasu',
+'exif-gaincontrol-2' => 'Výrazné zvýšení jasu',
+'exif-gaincontrol-3' => 'Mírné snížení jasu',
+'exif-gaincontrol-4' => 'Výrazné snížení jasu',
+
+'exif-contrast-0' => 'Normální',
+'exif-contrast-1' => 'Měkký',
+'exif-contrast-2' => 'Tvrdý',
+
+'exif-saturation-0' => 'Normální',
+'exif-saturation-1' => 'Nízká sytost',
+'exif-saturation-2' => 'Vysoká sytost',
+
+'exif-sharpness-0' => 'Normální',
+'exif-sharpness-1' => 'Měkká',
+'exif-sharpness-2' => 'Tvrdá',
+
+'exif-subjectdistancerange-0' => 'Není známo',
+'exif-subjectdistancerange-1' => 'Makro',
+'exif-subjectdistancerange-2' => 'Detail',
+'exif-subjectdistancerange-3' => 'Pohled zdálky',
+
+# Pseudotags used for GPSLatitudeRef and GPSDestLatitudeRef
+'exif-gpslatitude-n' => 'Severní šířka',
+'exif-gpslatitude-s' => 'Jižní šířka',
+
+# Pseudotags used for GPSLongitudeRef and GPSDestLongitudeRef
+'exif-gpslongitude-e' => 'Východní délka',
+'exif-gpslongitude-w' => 'Západní délka',
+
+'exif-gpsstatus-a' => 'Probíhá měření',
+'exif-gpsstatus-v' => 'Měření mimo provoz',
+
+'exif-gpsmeasuremode-2' => 'Dvourozměrné měření',
+'exif-gpsmeasuremode-3' => 'Trojrozměrné měření',
+
+# Pseudotags used for GPSSpeedRef and GPSDestDistanceRef
+'exif-gpsspeed-k' => 'km/h',
+'exif-gpsspeed-m' => 'mph',
+'exif-gpsspeed-n' => 'kt',
+
+# Pseudotags used for GPSTrackRef, GPSImgDirectionRef and GPSDestBearingRef
+'exif-gpsdirection-t' => 'Pravý kurs',
+'exif-gpsdirection-m' => 'Magnetický kurs',
+
+# External editor support
+'edit-externally'      => 'Editovat tento soubor v externím programu',
+'edit-externally-help' => 'Více informací najdete v [http://meta.wikimedia.org/wiki/Help:External_editors nápovědě pro nastavení].',
+
+# 'all' in various places, this might be different for inflected languages
+'recentchangesall' => 'všechny',
+'imagelistall'     => 'všechny',
+'watchlistall1'    => 'všechny',
+'watchlistall2'    => 'všechny',
+'namespacesall'    => 'všechny',
+
+# E-mail address confirmation
+'confirmemail'            => 'Potvrzení e-mailové adresy',
+'confirmemail_noemail'    => 'Ve svém [[Special:Preferences|uživatelském nastavení]] jste nezadali platnou e-mailovou adresu.',
+'confirmemail_text'       => 'Tato wiki vyžaduje, abyste potvrdili svou e-mailovou adresu
+před využíváním některých funkcí. Kliknutím na níže umístěné tlačítko dojde k odeslání
+potvrzovacího e-mailu na vámi uvedeno adresu. Tento mail obsahuje odkaz a potvrzovací kód;
+přejděte na odkazovanou stránku svým internetovým prohlížečem, tím potvrdíte, že
+zadaná adresa je platná.',
+'confirmemail_pending'    => '<div class="error">
+Potvrzovací kód vám byl již zaslán na váš e-mail.
+Pokud jste si založili účet před chvílí, vyčkejte, prosíme, několik minut na doručení kódu dříve, než požádáte o nový.
+</div>',
+'confirmemail_send'       => 'Odeslat potvrzovací kód',
+'confirmemail_sent'       => 'Potvrzovací e-mail byl odeslán',
+'confirmemail_oncreate'   => 'Na vaši e-mailovou adresu byl zaslán potvrzovací kód.
+Tento kód není zapotřebí k přihlášení, ale budete ho potřebovat k aktivaci některých funkcí založených na využití e-mailu.',
+'confirmemail_sendfailed' => 'Nepodařilo se odeslat potvrzovací e-mail. Zkontrolujte, zda adresa neobsahuje chybné znaky.
+
+Poštovní program hlásí: $1',
+'confirmemail_invalid'    => 'Neplatný potvrzovací kód. Možná již vypršela platnost kódu.',
+'confirmemail_needlogin'  => 'Pro potvrzení své e-mailové adresy se musíte $1.',
+'confirmemail_success'    => 'Vaše e-mailová adresa byla potvrzena. Nyní se můžete přihlásit a používat wiki.',
+'confirmemail_loggedin'   => 'Vaše e-mailová adresa byla potvrzena.',
+'confirmemail_error'      => 'Nepodařilo se uložit vaše potvrzení.',
+'confirmemail_subject'    => 'Potvrzení e-mailové adresy pro {{grammar:4sg|{{SITENAME}}}}',
+'confirmemail_body'       => 'Někdo (patrně vy, z IP adresy $1) si registroval účet se jménem "$2" a touto e-mailovou adresou na {{grammar:6sg|{{SITENAME}}}}.
+
+Pokud si přejete aktivovat e-mailové funkce na {{grammar:6sg|{{SITENAME}}}}, tak pro potvrzení,
+že tato adresa opravdu patří vám, přejděte svým internetovým prohlížečem na následující adresu:
+
+$3
+
+Pokud jste o toto potvrzení *nežádali*, neklikejte na předchozí odkaz. Platnost tohoto potvrzovacího
+kódu vyprší $4.',
+
+# Inputbox extension, may be useful in other contexts as well
+'tryexact'       => 'Vyzkoušet přesné hledání',
+'searchfulltext' => 'Plnotextové hledání',
+'createarticle'  => 'Vytvořit článek',
+
+# Scary transclusion
+'scarytranscludedisabled' => '[Vkládání šablon mezi wiki je vypnuto]',
+'scarytranscludefailed'   => '[Nepodařilo se načíst šablonu pro $1; je mi líto]',
+'scarytranscludetoolong'  => '[Příliš dlouhé URL; je mi líto]',
+
+# Trackbacks
+'trackbackbox'      => "<div id='mw_trackbacks'>
+Zpětné odkazy k tomuto článku:<br />
+$1
+</div>",
+'trackbackremove'   => ' ([$1 Smazat])',
+'trackbacklink'     => 'Zpětný odkaz',
+'trackbackdeleteok' => 'Zpětný odkaz byl úspěšně smazán.',
+
+# Delete conflict
+'deletedwhileediting' => 'Upozornění: V průběhu vaší editace byla tato stránka smazána!',
+'confirmrecreate'     => 'Uživatel [[User:$1|$1]] ([[User talk:$1|diskuse]]) tuto stránku smazal poté, co jste začali editovat, s odůvodněním:
+: „$2“
+Opravdu si přejete znovu tuto stránku založit?',
+'recreate'            => 'Znovu založit',
+
+'unit-pixel' => 'px',
+
+# HTML dump
+'redirectingto' => 'Přesměrovává se na [[$1]]…',
+
+# action=purge
+'confirm_purge'        => 'Aktualizovat cachovanou verzi této stránky?
+
+$1',
+'confirm_purge_button' => 'OK',
+
+'youhavenewmessagesmulti' => 'Na $1 máte nové zprávy',
+
+'searchcontaining' => "Hledat články obsahující ''$1''.",
+'searchnamed'      => "Hledat články pojmenované ''$1''.",
+'articletitles'    => "Články začínající ''$1''",
+'hideresults'      => 'Skrýt výsledky',
+
+# DISPLAYTITLE
+'displaytitle' => '(Na tuto stránku odkazujte pomocí [[$1]])',
+
+'loginlanguagelabel' => 'Jazyk: $1',
+
+# Multipage image navigation
+'imgmultipageprev'   => '&larr; předchozí stránka',
+'imgmultipagenext'   => 'následující stránka &rarr;',
+'imgmultigo'         => 'Jít!',
+'imgmultigotopre'    => 'Přejít na stránku',
+'imgmultiparseerror' => 'Soubor je zřejmě chybný nebo poškozený, nelze vyhledat seznam stránek.',
+
+# Table pager
+'ascending_abbrev'         => 'vzestupně',
+'descending_abbrev'        => 'sestupně',
+'table_pager_next'         => 'Následující stránka',
+'table_pager_prev'         => 'Předchozí stránka',
+'table_pager_first'        => 'První stránka',
+'table_pager_last'         => 'Poslední stránka',
+'table_pager_limit'        => 'Zobrazit $1 položek na stránku',
+'table_pager_limit_submit' => 'Zobrazit',
+'table_pager_empty'        => 'Nic nebylo nalezeno',
+
+# Auto-summaries
+'autosumm-blank'   => 'Vyprázdnění stránky',
+'autosumm-replace' => 'Obsah stránky nahrazen textem „$1“',
+'autoredircomment' => 'Přesměrováno na [[$1]]', # This should be changed to the new naming convention, but existed beforehand
+'autosumm-new'     => 'Nová stránka: $1',
+
+# Size units
+'size-bytes'     => '$1 B',
+'size-kilobytes' => '$1 kB',
+'size-megabytes' => '$1 MB',
+'size-gigabytes' => '$1 GB',
+
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesCsb.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesCsb.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesCsb.php	(revision 1280)
@@ -0,0 +1,330 @@
+<?php
+/**
+ * @addtogroup Language
+ */
+
+$namespaceNames = array(
+	NS_MEDIA            => 'Media',
+	NS_SPECIAL          => 'Specjalnô',
+	NS_MAIN             => '',
+	NS_TALK             => 'Diskùsëjô',
+	NS_USER             => 'Brëkòwnik',
+	NS_USER_TALK        => 'Diskùsëjô_brëkòwnika',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK     => 'Diskùsëjô_$1',
+	NS_IMAGE            => 'Òbrôzk',
+	NS_IMAGE_TALK       => 'Diskùsëjô_òbrôzków',
+	NS_MEDIAWIKI        => 'MediaWiki',
+	NS_MEDIAWIKI_TALK   => 'Diskùsëjô_MediaWiki',
+	NS_TEMPLATE         => 'Szablóna',
+	NS_TEMPLATE_TALK    => 'Diskùsëjô_Szablónë',
+	NS_HELP             => 'Pòmòc',
+	NS_HELP_TALK        => 'Diskùsëjô_Pòmòcë',
+	NS_CATEGORY         => 'Kategòrëjô',
+	NS_CATEGORY_TALK    => 'Diskùsëjô_Kategòrëji'
+);
+
+$messages = array(
+'1movedto2' => '$1 przeniesłé do $2',
+'aboutpage' => '{{ns:4}}:Ò_{{SITENAME}}',
+'aboutsite' => 'Ò {{SITENAME}}',
+'actioncomplete' => 'Òperacëjô wëkònónô',
+'addedwatch' => 'Dodónô do lëstë ùzérónëch',
+'allmessages' => 'Wszëtczé systemòwé ògłosë',
+'ancientpages' => 'Nôstarszé starnë',
+'and' => 'ë',
+'anontalk' => 'Diskùsëjô dlô ti IP-adresë',
+'anonymous' => 'Anonimòwi brëkòwnik/-cë  {{SITENAME}}',
+'april-gen' => 'Łżëkwiôta',
+'april' => 'Łżëkwiôt',
+'august-gen' => 'Zélnika',
+'august' => 'Zélnik',
+'badfilename' => 'Miono òbrôzka zmienioné na "$1".',
+'badfiletype' => '".$1" nie je nôlepszim fòrmatã lopka.',
+'badipaddress' => 'IP-adresa nie je richtich pòdónô.',
+'blockedtext' => 'Twòje kònto abò/ ë IP-adresa òstałë zascëgòwóné przez $1.\nPòdónô przëczëna to:<br />$2.<p>Bë wëjasnic sprawã zablokòwaniégò mòżesz skòntaktowac sã z $1 abò jińszim [[{{MediaWiki:grouppage-sysop}}|administratorã]].',
+'grouppage-sysop' => 'Project:Administratorzë',
+'blockip' => 'Zascëgôj IP-adresã',
+'booksources' => 'Ksążczi',
+'brokenredirects' => 'Zerwóné przeczerowania',
+'bydate' => 'wedle datumù',
+'byname' => 'wedle miona',
+'bysize' => 'wedle wiôlgòscë',
+'categories' => 'Kategòrëje',
+'categoryarticlecount' => 'W ny kategòrëje je $1 artiklów.',
+'category_header' => 'Artikle w kategòrëji "$1"',
+'changepassword' => 'Zmiana parolë',
+'compareselectedversions' => 'Przërównôj wëbróné wersëje',
+'confirmdelete' => 'Pòcwierdzë rëmónié',
+'confirm' => 'Pòcwierdzë',
+'confirmprotect' => 'Pòcwierdzë zazychrowanié',
+'confirmprotecttext' => 'Jes Të gwës, że chcesz zazychrowac ną starnã?',
+'confirmunprotect' => 'Pòcwierdzë òdzychrowónié',
+'confirmunprotecttext' => 'Jes Të gwës, że chcesz òdzychrowac ną starnã?',
+'contribslink' => 'wkłôd',
+'contribsub2' => 'Dlô brëkòwnika $1 ($2)',
+'contributions' => 'Wkłôd brëkòwników',
+/*'copyrightwarning' => "Prosymë wdôrzëc, że przëjimô sã, ëż wszelejaczi\nwkłôd do {{SITENAME}} je ùżëczóny wedle reglów <i>GNU Free Documentation License</i>\n(szczegóły w $1).  <br />Jeżle nie chcesz, bë Twój tekst bëł dowòlno zmieniwóny przez kòżdégò ë rozpòmiónowóny bez ògrańczeniów, tej nie dôwôj do niegò  doprzińdzeniô w {{SITENAME}}. Równoczasno òswiôdczôsz, że nen tekst je Twòjim dokazã, abò pòchôdô z materiałów ôrtu <i>public domain</i> abò\n<i>GNU Free Documentation License</i>, abò téż kòmpatibilnégò ôrtu.\n<br /><strong>PROSYMË NIE ÙŻIWAC BEZ ZEZWÒLENIÉGÒ MATERIAŁÓW ÒBJIMNIÃTËCH AUTORSCZIM PRAWÃ!</strong>",*/
+'copyright' => 'Zamkłosc hewòtny starnë je ùżëczónô wedle reglów $1.',
+'couldntremove' => 'Ni móg rëmac pòzycëje "$1"...',
+'createaccount' => 'Założë nowé kònto',
+'cur' => 'aktualnô',
+'databaseerror' => 'Fela w pòdôwkòwi baze',
+'dateformat' => 'Fòrmat datumù',
+'december-gen' => 'Gòdnika',
+'december' => 'Gòdnik',
+'defaultns' => 'Domëslno przeszëkùjë nôslédné rëmnotë mionów:',
+'defemailsubject' => 'E-mail òd {{SITENAME}}',
+'deletecomment' => 'Przëczëna rëmaniô',
+'deleteimg' => 'rëmôj nen òbrôzk',
+'deletepage' => 'Rëmôj starnã',
+'delete' => 'Rëmôj',
+'deletionlog' => 'register rëmaniów',
+'dellogpage' => 'Rëmóné',
+'difference' => '(różnice midzë wersëjama)',
+'disambiguationspage' => '{{ns:4}}:Starnë_ùjednoznacznieniô',
+'disclaimerpage' => '{{ns:4}}:General_disclaimer',
+'disclaimers' => 'Prawné zastrzedżi',
+'doubleredirects' => 'Dëbeltné przeczérowania',
+'editcurrent' => 'Editëjë aktualną wersëjã ny starnë',
+'edit' => 'Edicëjô',
+'editold' => 'Edicëjô',
+'editsection' => 'Edicëjô',
+'editthispage' => 'Editëjë ną starnã',
+'emailfrom' => 'Òd',
+'emailmessage' => 'Wiadło',
+'emailpage' => 'Sélajë e-mail do brëkòwnika',
+'emailsend' => 'Wëslë',
+'emailsubject' => 'Téma',
+'emailto' => 'Do',
+'emailuser' => 'Wëslë e-maila do negò brëkòwnika',
+'errorpagetitle' => 'Brida',
+'excontent' => 'Zamkłosc starnë "$1"',
+'explainconflict' => 'Chtos sfórtowôł wprowadzëc swòją wersëjã artikla òbczôs Twòji edicëji. Górné pòle edicëji zamëkô w se tekst starnë aktualno zapisóny w pòdôwkòwi baze. Twòje zmianë są w dólnym pòlu edicëji. Bë wprowadzëc swòje zmianë mùszisz zmòdifikòwac tekst z górnégò pòla. <b>Blós</b> tekst z górnégò pòla mdze zapisóny w baze czej wcësniesz "Zapiszë".',
+'export' => 'Ekspòrt starnów',
+'faqpage' => '{{ns:4}}:FAQ',
+'february-gen' => 'Gromicznika',
+'february' => 'Gromicznik',
+'filecopyerror' => 'Ni mòże skòpérowac lopka "$1" do "$2".',
+'filedeleteerror' => 'Ni mòże rëmac lopka "$1".',
+'filedesc' => 'Òpisënk',
+'filename' => 'Miono lopka',
+'filenotfound' => 'Ni mòże nalezc lopka "$1".',
+'filerenameerror' => 'Ni mòże zmienic miona lopka "$1" na "$2".',
+'filesource' => 'Zdrój',
+'fileuploaded' => 'Lopk"$1" òstôł wladowóny.\nBiôj, prosymë, do starnë òpisënkù lopka ($2) ë pòdôj tikającé gò infòrmacëje\ntaczé jak: pòchòdzenié lopka, czedë ë przez kògò òstôł ùtworzony, ôs dëcht co le ò nim wiész, a wëdôwô Cë sã wôżné.',
+'formerror' => 'Fela: ni mòże wëslac fòrmùlara',
+'getimagelist' => 'zladënk lëstë lopków',
+'go' => 'Biôj!',
+'searcharticle' => 'Biôj!',
+'guesstimezone' => 'Wezmi z przezérnika',
+'help' => 'Pòmòc',
+'hidetoc' => 'zatacë',
+'hide' => 'zatacë',
+'histlegend' => "Legenda: (aktualnô) = różnice w przërównanim do aktualny wersëje,\n(wczasniészô) = różnice w przërównanim do wczasniészi wersëje, D = drobné edicëje",
+'history' => 'Historëjô starnë',
+'history_short' => 'Historëjô',
+'hr_tip' => 'Wòdorównô (horizontalnô) linijô (brëkùjë szpôrowno)',
+'ilsubmit' => 'Szëkôj',
+'imagelinks' => 'Lënczi do lopka',
+'imagelist' => 'Lësta òbrôzków',
+'imagepage' => 'Starna òbrôzka',
+'imagereverted' => 'Przëwôrcenié wczasniészi wersëje darzëło sã.',
+'imgdelete' => 'rëmôj',
+'imgdesc' => 'òpisënk',
+'imghistlegend' => "Legenda: (aktualny) = to je aktualny lopk, (rëmôj) = rëmôj\nną starszą wersëjã, (przëwôrcë) = przëwôrcë ną starszą wersëjã.\n<br /><i>Klëkni na datum bë òbôczëc jaczé lopczi bëlë wladowóné òb nen dzéń</i>.",
+'imghistory' => 'Historëjô lopka',
+'import' => 'Impòrtëjë starnë',
+'internalerror' => 'Bënowô fela',
+'ipbreason' => 'Przëczëna',
+'isredirect' => 'starna przeczerowaniô',
+'january-gen' => 'stëcznika',
+'january' => 'stëcznik',
+'july-gen' => 'Lëpinca',
+'july' => 'Lëpinc',
+'june' => 'Czerwińc',
+'june-gen' => 'Czerwińca',
+'largefile' => 'Nôlepi bë lopk ni miôł wicy jak $1 bajtów.',
+'lastmodifiedatby' => 'Na starna bëła slédno editowónô $2, $1 przez $3.',
+'lastmodifiedat' => 'Na starna bëła slédno editowónô ò $2, $1;',
+'last' => 'pòslédnô',
+'lineno' => 'Lëniô $1:',
+'linkshere' => 'Do ny starnë òdwòłëją sã hewòtné starnë:',
+'linkstoimage' => 'Hewò są starnë, jaczé òdwòłëją sã do negò lopka:',
+'listusers' => 'Lësta brëkòwników',
+'loadhist' => 'Zladënk historëji ny starnë',
+'localtime' => 'Twòja czasowô cona',
+'lockbtn' => 'Zascëgôj bazã pòdôwków',
+'loginerror' => 'Fela logòwaniô',
+'loginpagetitle' => 'Logòwanié brëkòwnika',
+'loginprompt' => 'Brëkùjesz miec \'\'cookies\'\' (kùszczi) włączoné bë sã wlogòwac do {{SITENAME}}.',
+'loginsuccess' => 'Të jes wlogòwóny do {{SITENAME}} jakno "$1".',
+'loginsuccesstitle' => 'ùdałé logòwanié',
+'login' => 'Wlogùjë mie',
+'logouttext' => 'Të jes ju wëlogòwóny. Mòżesz prôcowac z {{SITENAME}} jakno anonimòwi brëkòwnik abò wlogòwac sã jakno zaregistrowóny brëkòwnik.',
+'logouttitle' => 'Wëlogòwanié brëkòwnika',
+'logout' => 'Wëlogùjë mie',
+'lonelypages' => 'Niechóné starnë',
+'longpages' => 'Nôdłëgszé starnë',
+'mainpage' => 'Przédnô starna',
+'march-gen' => 'strumiannika',
+'march' => 'strumiannik',
+'math_failure' => 'Parser nie rozmiôł rozpòznac',
+'may-gen' => 'Môja',
+'may_long' => 'Môj',
+'minlength' => 'Miono òbrôzka brëkùje miec przënomni trzë lëterë.',
+'minoredit' => 'Drobnô edicëjô.',
+'minoreditletter' => 'D',
+'missingarticle' => 'Programa ni mô nalôzłé tekstu starnë, chtërnô bë mùsza bëc w baze, to je starnë "$1".<p>Colemało mô to plac, czej òstónie wëbróné sparłãczenié\ndo rëmóny starnë, np. stôrszi wersëji jińszi starnë.</p><p>Jińszé leżnosce mògą znaczëc, że w soft-wôrze je fela. W taczim przëtrôfkù prosymë zameldowac nen fakt administratorowi pòdającë hewòtną adresã.',
+'missingimage' => '<b>Felëjący òbrôzk</b><br /><i>$1</i>',
+'moredotdotdot' => 'Wicy...',
+'movearticle' => 'Przeniesë artikel',
+'movedto' => 'przeniesłô do',
+'movenologin' => 'Felënk logòwaniô',
+'movepagebtn' => 'Przeniesë starnã',
+'movepage' => 'Przeniesë starnã',
+'move' => 'Przeniesë',
+'movetalk' => 'Przeniesë téż starnã <i>Diskùsëje</i>, jeżle je to mòżlëwé.',
+'movethispage' => 'Przeniesë',
+'mycontris' => 'Mòje edicëje',
+'navigation' => 'Nawigacëjô',
+'newpages' => 'Nowé starnë',
+'newpassword' => 'Nowô parola',
+'newwindow' => '(òtmëkô sã w nowim òczenkù)',
+'nlinks' => '$1 lënków',
+'noemailtitle' => 'Felënk email-adresë',
+'noemail' => 'W baze ni ma email-adresë dlô brëkòwnika "$1".',
+'noexactmatch' => 'Nie da starnë z dokładno taczim titlã. Spróbùjë fùl szëkbë.',
+'nolinkstoimage' => 'Niżódnô starna nie òdwòłëje sã do negò lopka.',
+'nosuchactiontext' => 'Programa Mediawiki nie rozpòznôwô taczi òperacëji jakô je w URL',
+'nosuchspecialpage' => 'Nie da taczi specjalny starnë',
+'nosuchuser' => 'Nie da taczégò brëkòwnika "$1". Sprôwdzë pisënk abò wëfùlujë fòrmular bë założëc nowé kònto.',
+'notanarticle' => 'To nie je artikel',
+'notargettitle' => 'Nie da taczi starnë',
+'notloggedin' => 'Felëje logòwóniô',
+'november-gen' => 'Lëstopadnika',
+'november' => 'Lëstopadnik',
+'nowiki_sample' => 'Wstôw tuwò niesfòrmatowóny tekst',
+'nowiki_tip' => 'Ignorëjë wiki-fòrmatowanié',
+'nstab-category' => 'Kategòrëjô',
+'nstab-help' => 'Pòmòc',
+'nstab-image' => 'Òbrôzk',
+'nstab-main' => 'Artikel',
+'nstab-mediawiki' => 'ògłosënk',
+'nstab-special' => 'Specjalnô',
+'nstab-template' => 'Szablóna',
+'nstab-user' => 'Starna brëkòwnika',
+'nstab-project' => 'meta-starna',
+'october-gen' => 'Rujana',
+'october' => 'Rujan',
+'ok' => 'Jo!',
+'othercontribs' => 'Òpiarté na prôcë $1.',
+'pagecategories' => '{{PLURAL:$1|Kategòrëjô|Kategòrëje}}',
+'pagemovedsub' => 'Przeniesenié darzëło sã',
+'pagemovedtext' => 'Starna "[[$1]]" òsta przeniesłô do "[[$2]]".',
+'pagetitle' => '$1 - {{SITENAME}}',
+'passwordremindertext' => 'Chtos (prôwdëjuwerno Të, z adresë $1) pòprosëł ò wësłanié nowi parolë dopùscënkù do {{SITENAME}} ($4). Aktualnô parola dlô brëkòwnika "$2" je "$3". Nôlepi mdze czej wlogùjesz sã terô ë zarô zmienisz parolã.',
+'personaltools' => 'Priwatné przërëchtënczi',
+'popularpages' => 'Nôwidzalszé starnë',
+'portal' => 'Pòrtal wëcmaniznë',
+'portal-url' => '{{ns:4}}:Pòrtal wëcmaniznë',
+'postcomment' => 'Dôj dopòwiesc',
+'powersearch' => 'Szëkba',
+'preferences' => 'Preferencëje',
+'prefsnologin' => 'Felënk logòwóniô',
+'prefs-personal' => 'Pòdôwczi brëkòwnika',
+'previewnote' => 'To je blós pòdzérk - artikel jesz nie je zapisóny!',
+'preview' => 'Pòdzérk',
+'protectcomment' => 'Przëczëna zazychrowóniô',
+'protectedarticle' => 'zazychrowónô [[$1]]',
+'protectedpage' => 'Starna je zazychrowónô',
+'protect' => 'Zazychrëjë',
+'proxyblocksuccess' => 'Fertich.',
+'qbfind' => 'Nalézë',
+'qbmyoptions' => 'Mòje òptacëje',
+'qbspecialpages' => 'Specjalné starnë',
+'randompage' => 'Kawlowô starna',
+'readonly' => 'Baza pòdôwków je zablokòwónô',
+'readonlywarning' => 'BÔCZËNK: Pòdôwkòwô baza òsta sztërkòwô zablokòwónô dlô administracëjnëch célów. Nie mòże tej timczasã zapisac nowi wersëje artikla. Bédëjemë przeniesc ji tekst do priwatnégò lopka
+(wëtnij/wstôw) ë zachòwac na pózni.',
+'recentchangescount' => 'Wielëna pòzycëji na lësce slédnëch edicëji',
+'recentchangeslinked' => 'Zmianë w dolënkòwónëch',
+'recentchanges' => 'Slédné edicëje',
+# problem with link: [[{{ns:4}}:Nazëwizna|konwencëje nazëwaniégò starnów]]
+'recentchangestext' => 'Na starna prezentérëje historëjã slédnëch edicëjów w {{SITENAME}}.\n\nWitôj! Jeżle Të jes tuwò dopiérze pierszi rôz, przeczëtôj né starnë: [[{{MediaWiki:faqpage}}|FAQ]], [[{{ns:4}}:Nazëwizna|konwencëje nazëwaniégò starnów]].',
+'redirectedfrom' => '(Przeczerowóné z $1)',
+'removedwatch' => 'Rëmóné z lëstë ùzérónëch',
+'returnto' => 'Wôrcë sã do starnë: $1.',
+'reupload' => 'Wëslë jesz rôz',
+'revertimg' => 'przëwôrcë',
+'rights' => 'Prawa:',
+'rollback' => 'Copnij edicëjã',
+'rollbackfailed' => 'Nie szło copnąc zmianë',
+'rollbacklink' => 'copnij',
+'savearticle' => 'Zapiszë artikel',
+'savefile' => 'Zapiszë lôpk',
+'search' => 'Szëkba',
+'searchbutton' => 'Szëkba',
+'september-gen' => 'Séwnika',
+'september' => 'Séwnik',
+'servertime' => 'Aktualny czas serwera',
+'shortpages' => 'Nôkrótszé starnë',
+'show' => 'pokôż',
+'showpreview' => 'Pòdzérk',
+'showtoc' => 'pokôż',
+'sitestats' => 'Statistika artiklów',
+'sitestatstext' => 'W pòdôwkòwi baze je w sëmie <b>$1</b> starn. Na wielëna zamëkô w se starnë <i>Diskùsëji</i>, starnë ò {{SITENAME}}, starnë ôrtë <i>stub</i> (ùzémk), starnë przeczerowóniô, ë jińszé, chtërné grãdo je klasyfikòwac jakno artikle. Bez nëch to prôwdëjuwerno da <b>$2</b> starn artiklów.<p>\nBëło w sëmie <b>$3</b> òdwiôdënów ë <b>$4</b> edicëji òd sztótu, czej miôł plac\nupgrade soft-wôrë.\nDôwó to strzédno <b>$5</b> edicëji na jedną starnã ë <b>$6</b> òdwiôdënów na jedną edicëjã.',
+'siteuser' => 'Brëkòwnik {{SITENAME}} $1',
+'skin' => 'Wëzdrzatk',
+'spamprotectiontitle' => 'Anti-spamòwi filter',
+'specialpage' => 'Specjalnô starna',
+'specialpages' => 'Specjalné starnë',
+'spheading' => 'Specjalné nôpisma',
+'successfulupload' => 'Wladënk darzëł sã',
+'talk' => 'Diskùsëjô',
+'timezonelegend' => 'Czasowô cona',
+'toc' => 'Spisënk zamkłoscë',
+'toolbox' => 'Przërëchtënczi',
+'tooltip-watch' => 'Dodôj ną starnã do lëstë ùzérónëch',
+'ucnote' => 'Hewò je lësta slédnëch <b>$1</b> edicëjów dokònónëch przez\nbrëkòwnika òbczôs òstatnëch <b>$2</b> dni.',
+'unprotectcomment' => 'Przëczëna òdzychrowaniô',
+'unprotectedarticle' => 'òdzychrowóny [[$1]]',
+'unprotect' => 'Òdzychrëjë',
+'unusedimages' => 'Nie wëzwëskóné òbrôzczi',
+'unwatch' => 'Òprzestôj ùzerac',
+'unwatchthispage' => 'Òprzestôj ùzerac ną starnã',
+'uploaddisabled' => 'Przeprôszómë! Mòżlëwòta wladënkù lopków na nen serwer òsta wëłączonô.',
+'uploadedfiles' => 'Wladowóné lopczi',
+'uploadedimage' => 'wladënk: "$1"',
+'uploadlog' => 'Lësta wladënków',
+'uploadlogpage' => 'Dołączoné',
+'uploadlogpagetext' => 'Hewò je lësta slédno wladowónëch lopków.\nWszëtczé gòdzënë tikają conë ùniwersalnégò czasë (UTC).\n<ul>\n</ul>',
+'uploadnologin' => 'Felënk logòwaniô',
+# problem with link: [[{{ns:4}}:Regle_wladowaniô_lopków|regle wladowaniô lopków]]
+'uploadtext' => '<strong>STOP!</strong> Nigle wladëjesz jaczi lopk,\nprzeczëtôj [[{{ns:4}}:Regle_wladowaniô_lopków|regle wladowaniô lopków]] ë ùgwësnij sã, że wladëwającë gò òstóniesz z\nnima w zgòdze.\n<p>Jeżle chcesz przezdrzec abò przeszëkac do terô wladowóné lopczi,\nprzeńdzë do [[{{ns:special}}:Imagelist|lëstë wladowónëch lopków]].\nWszëtczé wladënczi ë rëmania są òdnotérowóné w\nspecjalnëch zestôwkach: [[{{ns:special}}:Log/upload|wladënczi]] ë [[{{ns:special}}:Log/delete|rëmóné]].\n<p>Bë wëslac nowi lopk do zòbrazowaniô Twòjégò artikla wëzwëskùj \nhewòtny fòrmùlar.\nW wikszoscë przezérników ùzdrzesz knąpã <i>Browse...</i>\nabò <i>Przezérôj...</i>, chtëren ùmożlëwi Cë òtemkniãcé sztandardowégò\nòkna wëbiérkù lopka. Wëbranié lopka sprawi wstôwienié jegò miona\nw tekstowim pòlu kòl knąpë.\nZaznaczającë pasowné pòle, mùszisz téż pòcwierdzëc, ëż sélającë\nlopk nie gwôłcësz nikògò autorsczich praw.\nWladënk zacznie sã pò wcësniãcym <i>Wladëjë lopk</i>.\nTo mòże sztërk zdérowac, òsoblëwò jeżle ni môsz chùtczégò dopùscënkù do internetu.\n<p>Preferowónyma fòrmatama są: JPEG dlô òdjimków, PNG dlô céchùnków\në òbrôzków ze znankama ikònów, ôs OGG dlô zwãków. Bë nie dac przińc do lëchòrozmieniów nadôwôj lopkom miona sparłãczóné z jich zamkłoscą.\nBë wstôwic òbrôzk do artikla, wpiszë lënk:\n<b><nowiki>[[</nowiki>{{ns:image}}<nowiki>:miono.jpg]]</nowiki></b> abò <b><nowiki>[[</nowiki>{{ns:image}}<nowiki>:miono.png|òpcjonalny tekst]]</nowiki></b>.\nDlô zwãkòwëch lopków lënk mdze wëzdrzôł tak: <b><nowiki>[[</nowiki>{{ns:media}}<nowiki>:file.ogg]]</nowiki></b>.\n<p>Prosymë wdarzëc, ëż tak samò jak w przëtrôfkù zwëczajnëch starnów {{SITENAME}},\njińszi brëkòwnicë mògą editowac abò rëmac wladowóné przez Ce lopczi,\njeżle mdą dbë, że to mdze lepi służëc całi ùdbie {{SITENAME}}.\nTwòje prawò do sélaniégò lopków mòże bëc Cë òdebróné, eżle nadùżëjesz systemë.',
+'uploadwarning' => 'Òstrzega ò wladënkù',
+'upload' => 'Wladënk lopka',
+'userlogin' => 'Logòwanié',
+'userlogout' => 'Wëlogòwanié',
+'userstats' => 'Statistika brëkòwników',
+'version' => 'Wersëjô',
+'wantedpages' => 'Nônótniészé starnë',
+'watchlistcontains' => 'Wielëna artiklów na Twòji lësce ùzérónëch: $1.',
+'watchlist' => 'Lësta ùzérónëch artiklów',
+'mywatchlist' => 'Lësta ùzérónëch artiklów',
+'watchmethod-list' => 'szëkba ùzérónëch artiklów westrzód pòslédnëch edicëjów',
+'watchnologin' => 'Felënk logòwóniô',
+'watchthispage' => 'Ùzérôj ną starnã',
+'watchthis' => 'Ùzérôj',
+'watch' => 'Ùzérôj',
+'whatlinkshere' => 'Lënkùjącé',
+'whitelistedittitle' => 'Bë editowac je nót sã wlogòwac',
+'whitelistreadtitle' => 'Bë czëtac je nót sã wlogòwac',
+'yourlanguage' => 'Kaszëbsczi',
+'yourpasswordagain' => 'Pòwtórzë parolã',
+'yourpassword' => 'Twòja parola',
+'yourrealname' => 'Twòje jistné miono*',
+);
+
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesCu.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesCu.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesCu.php	(revision 1280)
@@ -0,0 +1,141 @@
+<?php
+/** Old Church Slavonic (Ѩзыкъ словѣньскъ)
+  */
+
+$separatorTransformTable = array(
+	',' => ".",
+	'.' => ','
+);
+
+$linkPrefixExtension = true;
+
+$namespaceNames = array(
+	NS_MEDIA            => 'Срѣдьства',
+	NS_SPECIAL          => 'Нарочьна',
+	NS_MAIN             => '',
+	NS_TALK             => 'Бесѣда',
+	NS_USER             => 'Польѕевател҄ь',
+	NS_USER_TALK        => 'Польѕевател_бесѣда', 
+	#NS_PROJECT set by $wgMetaNamespace
+  	NS_PROJECT_TALK     => '{{grammar:genitive|$1}}_бесѣда',
+	NS_IMAGE            => 'Видъ',
+	NS_IMAGE_TALK       => 'Вида_бесѣда',
+	NS_MEDIAWIKI        => 'MediaWiki',
+	NS_MEDIAWIKI_TALK   => 'MediaWiki_бесѣда',
+	NS_TEMPLATE         => 'Образьць',
+	NS_TEMPLATE_TALK    => 'Образьца_бесѣда',
+	NS_HELP             => 'Помощь',
+	NS_HELP_TALK        => 'Помощи_бесѣда',
+	NS_CATEGORY         => 'Катигорї',
+	NS_CATEGORY_TALK    => 'Катигорїѩ_бесѣда',
+);
+
+$defaultDateFormat = 'mdy';
+
+$dateFormats = array(
+	'mdy time' => 'H:i',
+	'mdy date' => 'xg j числа, Y',
+	'mdy both' => 'H:i, xg j числа, Y',
+
+	'dmy time' => 'H:i',
+	'dmy date' => 'j F Y',
+	'dmy both' => 'H:i, j F Y',
+
+	'ymd time' => 'H:i',
+	'ymd date' => 'Y F j',
+	'ymd both' => 'H:i, Y F j',
+
+	'ISO 8601 time' => 'xnH:xni:xns',
+	'ISO 8601 date' => 'xnY-xnm-xnd',
+	'ISO 8601 both' => 'xnY-xnm-xnd"T"xnH:xni:xns',
+);
+
+$linkTrail = '/^([a-zабвгдеєжѕзїіıићклмнопсстѹфхѡѿцчшщъыьѣюѥѧѩѫѭѯѱѳѷѵґѓђёјйљњќуўџэ҄я“»]+)(.*)$/sDu';
+
+$messages = array(
+'linkprefix'            => '/^(.*?)(„|«)$/sD',
+
+'january' => 'їанѹарїи',
+'february' => 'феврѹарїи',
+'march' => 'мартїи',
+'april' => 'апрїлїи',
+'may_long' => 'маїи',
+'june' => 'їѹнїи',
+'july' => 'їѹлїи',
+'august' => 'аѵгѹстъ',
+'september' => 'септемврїи',
+'october' => 'октѡврїи',
+'november' => 'ноемврїи',
+'december' => 'декемврїи',
+'january-gen' => 'їанѹарї',
+'february-gen' => 'феврѹарї',
+'march-gen' => 'мартї',
+'april-gen' => 'апрїлї',
+'may-gen' => 'маї',
+'june-gen' => 'їѹнї',
+'july-gen' => 'їѹлї',
+'august-gen' => 'аѵгѹста',
+'september-gen' => 'септемврї',
+'october-gen' => 'октѡврї',
+'november-gen' => 'ноемврї',
+'december-gen' => 'декемврї',
+
+'1movedto2_redir' => '[[$1]] нареченъ [[$2]] врьхѹ прѣнаправлѥни ѥстъ.',
+'blockip' => 'Загради польѕеватель',
+'cite_article_link' => 'Приведи статїѭ',
+'contributions' => 'Добродѣни польѕевател',
+'createaccount' => 'Cъзижди си мѣсто',
+'currentevents' => 'Текѫща събыти',
+'delete' => 'ничьжи',
+'edit' => 'исправи',
+'editold' => 'исправи',
+'editsection' => 'исправи',
+'emailuser' => 'Посъли епїстолѫ',
+'go' => 'Прѣиди',
+'help' => 'Помощь',
+'history_short' => 'Їстѡрї',
+'ilsubmit' => 'Ищи',
+'login' => 'Въниди',
+'logout' => 'иходъ',
+'mainpage' => 'Главьна страница',
+'move' => 'прѣименѹи',
+'mycontris' => 'Мо добродѣни',
+'mypreferences' => 'мои строи',
+'mytalk' => 'Мо бесѣда',
+'navigation' => 'плаваниѥ',
+'nstab-main' => 'статї',
+'nstab-project' => 'съвѣтъ',
+'nstab-special' => 'Нарочьна',
+'nstab-user' => 'польѕеватель',
+'permalink' => 'Ѹставьна съвѧзь',
+'portal' => 'Обьщины съвѣтъ',
+'powersearch' => 'Ищи',
+'printableversion' => 'Печатьнъ образъ',
+'protect' => 'забрани',
+'qbedit' => 'исправи',
+'qbspecialpages' => 'Нарочьны страницѧ',
+'recentchanges' => 'Послѣдьнѩ мѣны',
+'recentchangeslinked' => 'Вѧзаны мѣны',
+'restriction-edit' => 'исправи',
+'search' => 'поискъ',
+'searcharticle' => 'Прѣиди',
+'searchbutton' => 'Ищи',
+'sitesupport' => 'Дани',
+'specialpage' => 'нарочьна страница',
+'specialpages' => 'Нарочьны страницѧ',
+'talk' => 'бесѣда',
+'toolbox' => 'Орѫди',
+'unprotect' => 'пѹсти',
+'unwatch' => 'остави блюдениѥ',
+'upload' => 'Положи дѣло',
+'uploadbtn' => 'Положи дѣло',
+'userlogin' => 'Въниди / съзижди си мѣсто',
+'userlogout' => 'иходъ',
+'watch' => 'блюди',
+'watchlist' => 'Мо блюдени',
+'mywatchlist' => 'Мо блюдени',
+'whatlinkshere' => ' Досьдещьнѩ съвѧзи',
+
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesCv.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesCv.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesCv.php	(revision 1280)
@@ -0,0 +1,261 @@
+<?php
+/**
+ * Chuvash stub localization; default to Russian instead of English.
+ */
+$fallback = 'ru';
+$linkPrefixExtension = true;
+
+$namespaceNames = array(
+	NS_MEDIA            => 'Медиа',
+	NS_SPECIAL          => 'Ятарлă',
+	NS_MAIN             => '',
+	NS_TALK             => 'Сӳтсе явасси',
+	NS_USER             => 'Хутшăнакан',
+	NS_USER_TALK        => 'Хутшăнаканăн_канашлу_страници',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK     => '$1_сӳтсе_явмалли',
+	NS_IMAGE            => 'Ӳкерчĕк',
+	NS_IMAGE_TALK       => 'Ӳкерчĕке_сӳтсе_явмалли',
+	NS_MEDIAWIKI        => 'MediaWiki',
+	NS_MEDIAWIKI_TALK   => 'MediaWiki_сӳтсе_явмалли',
+	NS_TEMPLATE         => 'Шаблон',
+	NS_TEMPLATE_TALK    => 'Шаблона_сӳтсе_явмалли',
+	NS_HELP             => 'Пулăшу',
+	NS_HELP_TALK        => 'Пулăшăва_сӳтсе_явмалли',
+	NS_CATEGORY         => 'Категори',
+	NS_CATEGORY_TALK    => 'Категорине_сӳтсе_явмалли',
+);
+
+$linkTrail = '/^([a-zа-яĕçăӳ"»]+)(.*)$/sDu';
+
+$messages = array(
+'underline-always' => 'Яланах',
+
+# Dates
+'monday'    => 'Тунтикун',
+'tuesday'   => 'Ытларикун',
+'thursday'  => 'Кĕçнерникун',
+'friday'    => 'Эрнекун',
+'january'   => 'Кăрлач',
+'march'     => 'Пуш',
+'april'     => 'Ака',
+'may_long'  => 'Çу',
+'june'      => 'Çěртме',
+'july'      => 'Утă',
+'august'    => 'Çурла',
+'september' => 'Авăн',
+'october'   => 'Юпа',
+'november'  => 'Чӳк',
+'december'  => 'Раштав',
+'jan'       => 'Кăр',
+'mar'       => 'Пуш',
+'apr'       => 'Ака',
+'may'       => 'Çу',
+'jun'       => 'Çěр',
+'jul'       => 'Утă',
+'aug'       => 'Çур',
+'sep'       => 'Авн',
+'oct'       => 'Юпа',
+'nov'       => 'Чӳк',
+'dec'       => 'Раш',
+
+# Bits of text used by many pages
+'categories'     => 'Категорисем',
+'pagecategories' => 'Категорисем',
+
+'linkprefix' => '/^(.*?)([a-zA-Z\x80-\xff«"]+)$/sD',
+'mainpage'   => 'Тĕп страницă',
+
+'aboutsite'      => '{{SITENAME}} çинчен',
+'aboutpage'      => '{{ns:project}}:çинчен',
+'help'           => 'Пулăшу',
+'helppage'       => '{{ns:project}}:Пулăшу',
+'sitesupport'    => 'Пожертвованисем',
+'edithelp'       => 'Улшăнусене кĕртме пулăшакан пулăшу',
+'edithelppage'   => '{{ns:project}}:Улшăнусене кĕртме пулăшакан пулăшу',
+'qbspecialpages' => 'Ятарлӑ страницӑсем',
+
+'currentevents'     => 'Хыпарсем',
+'currentevents-url' => 'Хыпарсем',
+
+'search'           => 'Шырасси',
+'searchbutton'     => 'Шырасси',
+'go'               => 'Куç',
+'searcharticle'    => 'Куç',
+'history'          => 'Истори',
+'history_short'    => 'Истори',
+'printableversion' => 'Пичетлемелли верси',
+'permalink'        => 'Яланхи вырăн',
+'edit'             => 'Тӳрлетӳ',
+'editthispage'     => 'Страницăна тӳрлетесси',
+'delete'           => 'Кăларса пăрахасси',
+'undelete_short'   => '$1 тӳрлетӳсене каялла тавăр',
+'talkpage'         => 'Сӳтсе явасси',
+'specialpage'      => 'Ятарлă страницă',
+'talk'             => 'Сӳтсе явасси',
+'toolbox'          => 'Ĕç хатĕрĕсем',
+'otherlanguages'   => 'Урăх чěлхесем',
+'lastmodifiedat'   => 'Ку страницăна юлашки улăштарнă вăхăт: $2, $1.', # $1 date, $2 time
+'jumptonavigation' => 'навигаци',
+'jumptosearch'     => 'Шырав',
+
+'toc'     => 'Тупмалли',
+'hidetoc' => 'кӑтартмалла мар',
+
+# Short words for each namespace, by default used in the 'article' tab in monobook
+'nstab-user'    => 'Хутшăнакан страници',
+'nstab-special' => 'Ятарлă',
+'nstab-help'    => 'пулăшу',
+
+# General errors
+'laggedslavemode' => 'Асăрхăр! Страница çинче юлашки улшăнусене кăтартмасăр пултарнă.',
+
+# Edit pages
+'minoredit'      => 'Кунта пěчěк улшăнусем кăна кěртнě',
+'watchthis'      => 'Ку страницăна кěртекен  улшăнусем  хыççăн сăнамалла',
+'previewnote'    => 'Ку страницăна халлěхе çырса хуман. Эсир ку страницă мěнле пулассине кăна куратăр!!',
+'editing'        => '$1 тӳрлетни',
+'editinguser'    => '$1 тӳрлетни',
+'editingsection' => '$1 тӳрлетни (статья разделě)',
+'editingcomment' => '$1 тӳрлетни (кӗске анлантарӑвӗ)',
+'templatesused'  => 'Ку страница çинче усă курнă шаблонсем:',
+
+# History pages
+'previousrevision' => '&larr;Малтанхи верси',
+'nextrevision'     => 'Çěнěрех верси→',
+'next'             => 'тепěр',
+'deletedrev'       => '[кăларса пăрахнă]',
+'histfirst'        => 'Пĕрремĕш',
+'histlast'         => 'Юлашки',
+
+# Search results
+'showingresults' => 'Аяларах эсир <b>#$2</b> пуçласа кăтартнă <b>$1</b> йĕркене куратăр.',
+
+# Preferences page
+'oldpassword' => 'Кивě пароль',
+'newpassword' => 'Çěнě пароль',
+'textboxsize' => 'Тӳрлетни',
+'rows'        => 'Йěркесем',
+'localtime'   => 'Вырăнти вăхăт',
+'servertime'  => 'Сервер вăхăчě',
+'files'       => 'Файлсем',
+
+# User rights log
+'rightslogtext' => 'Ку пользовательсен прависене улăштарниссен журналě',
+
+# Recent changes
+'recentchanges' => 'Юлашки улшăнусем',
+'rcnote'        => 'Юлашки <strong>$2</strong> кун хушшинчи <strong>$1</strong> улшăнусем. Халě пěтěмпе  <strong>{{NUMBEROFARTICLES}}</strong> статья.',
+'rclistfrom'    => 'Юлашки улшăнусене $1 вăхăтран пуçласа кăтартнă',
+'rclinks'       => 'Юлашки $2 кун хушшинче тунă $1 улшăнусене кăтартмалла<br />$3',
+'hide'          => 'кăтартмалла мар',
+'show'          => 'кăтартмалла',
+'newpageletter' => 'Ç',
+
+# Upload
+'upload'         => 'Файла кĕртесси',
+'uploadlog'      => 'Файлсене кĕртнин логĕ',
+'uploadedfiles'  => 'Кĕртнĕ файлсем',
+'ignorewarnings' => 'Асăрхаттарусене шута илмелле мар',
+'uploaddisabled' => 'Каçарăр та сайта халĕ нимĕн те кĕртме юрамаст.',
+
+# Image list
+'imagelist' => 'Ӳкерчěксен списокě',
+'ilsubmit'  => 'Шырамалла',
+
+# Miscellaneous special pages
+'nviews'                  => '$1 хут пăхнă',
+'uncategorizedpages'      => 'Каталогсăр страницăсем',
+'uncategorizedcategories' => 'Каталога кĕртмен категорисем',
+'allpages'                => 'Пěтěм страницăсем',
+'randompage'              => 'Ăнсăртран илнě страницă',
+'deadendpages'            => 'Ниăçта та урăх ертмен страницăсем',
+'listusers'               => 'Хутшăнакансен списокĕ',
+'specialpages'            => 'Ятарлă страницăсем',
+'spheading'               => 'Пěтěм пользовательсем валли ятарлă страницăсем',
+'recentchangeslinked'     => 'Çыхăннă улшăнусем',
+'newpages'                => 'Çěнě страницăсем',
+'ancientpages'            => 'Чи кивĕ статьясем',
+
+'data' => 'Кун',
+
+# Special:Allpages
+'nextpage'     => 'Тепěр страницă ($1)',
+'allpagesnext' => 'Тепěр',
+
+# Delete/protect/revert
+'deletepage'     => 'Кăларса парахнă статьясем',
+'rollback'       => 'Тÿрлетÿсене каялла куçарасси',
+'rollback_short' => 'Каялла куçарасси',
+'rollbackfailed' => 'Каялла куçарнă çухна йăнăш тухнă',
+
+# Undelete
+'undelete'           => 'Кăларса пăрахнă страницăсене пăх',
+'undeletearticle'    => 'Кăларса парахнă страницăна каялла тавăр',
+'undeleterevisions'  => 'Архивра пурĕ $1 верси',
+'undeletebtn'        => 'Каялла тавăр!',
+'undeletedarticle'   => '«[[$1]]» каялла тавăрнă',
+'undeletedrevisions' => '$1 кăларса пăрахнă тӳрлетӳсене каялла тавăрнă',
+
+# Contributions
+'uclinks' => 'Юлашки $1 улшăнусене пăх; юлашки $2 кун хушшинче тунисене пăх.',
+'uctop'   => ' (пуçламăш)',
+
+# What links here
+'whatlinkshere' => 'Кунта килекен ссылкăсем',
+'notargettitle' => 'Тĕллевне кăтартман',
+'linklistsub'   => '(ссылкăсен списокĕ)',
+
+# Block/unblock
+'ipbreason'       => 'Сăлтавĕ',
+'unblockip'       => 'IP-адреса блокировкăран калар',
+'unblocklink'     => 'блокировкăран кăлар',
+'unblocklogentry' => '«$1» блокировкăран кăларнă',
+
+# Move page
+'movepage'         => 'Страницăна куçарнă',
+'pagemovedsub'     => 'Куçарас ěç тěрěс иртрě',
+'talkpagemoved'    => 'Сӳтсе явмалли страницăн ятне те улăштартăмăр.',
+'talkpagenotmoved' => 'Сӳтсе явмалли страницăн ятне улăштарма пултараймарăмăр.',
+'1movedto2'        => '$1 $2 çине куçарнă',
+'delete_and_move'  => 'Кăларса пăрахса куçарасси',
+
+# Thumbnails
+'thumbnail-more' => 'Пысăклатмалли',
+
+# Tooltip help for the actions
+'tooltip-pt-userpage'    => 'Пользователь страници',
+'tooltip-pt-preferences' => 'Настройкӑсем',
+'tooltip-ca-talk'        => 'Статьяна сӳтсе явасси',
+'tooltip-ca-edit'        => 'Эсир ку страницӑна тӳрлетме пултаратӑр. Тархасшӑн ҫырса хӑваричен страницӑ мӗнле пулассине пӑхӑр.',
+'tooltip-ca-addsection'  => 'Кӗске ӑнлантару хушма пултаратӑр.',
+'tooltip-ca-viewsource'  => 'Ку страницӑна эсир улӑштарма пултараймастӑр. Ӑна мӗнле ҫырнине кӑна пӑхма пултаратӑр.',
+'tooltip-ca-protect'     => 'Улӑшратусенчен сыхласси',
+'tooltip-ca-delete'      => 'Страницӑна кӑларса пӑрахмалли',
+'tooltip-ca-move'        => 'Страницӑна урӑх ҫӗре куҫарасси',
+'tooltip-ca-watch'       => 'Ку страницӑ хыҫҫӑн сӑнама пуҫласси',
+'tooltip-ca-unwatch'     => 'Ку страницӑ хыҫҫӑн урӑх сӑнамалла мар',
+'tooltip-search'         => 'Шырав',
+'tooltip-p-logo'         => 'Тӗп страницӑ',
+'tooltip-save'           => 'Тӳрлетӳсене астуса хăвармалла',
+'tooltip-watch'          => 'Çак страницăна пăхса тăмаллисем шутне хуш',
+
+# Attribution
+'and'    => 'тата',
+'others' => 'ыттисем',
+
+# Spam protection
+'listingcontinuesabbrev' => '(малалли)',
+
+# Info page
+'numedits' => 'Улшăнусен шучĕ (статьясем): $1',
+
+# Inputbox extension, may be useful in other contexts as well
+'createarticle' => 'Çĕнĕ статья çыр',
+
+# Trackbacks
+'trackbackremove' => ' ([$1 кăларса пăрах])',
+
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesCy.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesCy.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesCy.php	(revision 1280)
@@ -0,0 +1,840 @@
+<?php
+/**
+  * @addtogroup Language
+  */
+
+/* Cymraeg - Welsh */
+
+$namespaceNames = array(
+	NS_MEDIA          => "Media",
+	NS_SPECIAL        => "Arbennig",
+	NS_MAIN           => "",
+	NS_TALK           => "Sgwrs",
+	NS_USER           => "Defnyddiwr",
+	NS_USER_TALK      => "Sgwrs_Defnyddiwr",
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK   => "Sgwrs_$1",
+	NS_IMAGE          => "Delwedd",
+	NS_IMAGE_TALK     => "Sgwrs_Delwedd",
+	NS_MEDIAWIKI      => "MediaWici",
+	NS_MEDIAWIKI_TALK => "Sgwrs_MediaWici",
+	NS_TEMPLATE       => "Nodyn",
+	NS_TEMPLATE_TALK  => "Sgwrs_Nodyn",
+	NS_CATEGORY		  => "Categori",
+	NS_CATEGORY_TALK  => "Sgwrs_Categori",
+	NS_HELP			  => "Cymorth",
+	NS_HELP_TALK	  => "Sgwrs Cymorth"
+);
+
+$skinNames = array(
+	'standard' => "Safonol",
+	'nostalgia' => "Hiraeth",
+	'cologneblue' => "Glas Cwlen",
+);
+
+$datePreferences = false;
+
+$bookstoreList = array(
+	"AddALL" => "http://www.addall.com/New/Partner.cgi?query=$1&type=ISBN",
+	"PriceSCAN" => "http://www.pricescan.com/books/bookDetail.asp?isbn=$1",
+	"Barnes & Noble" => "http://search.barnesandnoble.com/bookSearch/isbnInquiry.asp?isbn=$1",
+	"Amazon.com" => "http://www.amazon.com/exec/obidos/ISBN=$1",
+	"Amazon.co.uk" => "http://www.amazon.co.uk/exec/obidos/ISBN=$1"
+);
+
+
+$magicWords = array(
+#   ID                                 CASE  SYNONYMS
+	'redirect'               => array( 0,    "#redirect", "#ail-cyfeirio"                 ),
+	'notoc'                  => array( 0,    "__NOTOC__", "__DIMTAFLENCYNNWYS__"          ),
+	'noeditsection'          => array( 0,    "__NOEDITSECTION__", "__DIMADRANGOLYGU__"    ),
+	'start'                  => array( 0,    "__START__", "__DECHRAU__"                   ),
+	'currentmonth'           => array( 1, "CURRENTMONTH", "MISCYFOES"                ),
+	'currentmonthname'       => array( 1,    "CURRENTMONTHNAME", "ENWMISCYFOES"           ),
+	'currentday'             => array( 1,    "CURRENTDAY", "DYDDIADCYFOES"                ),
+	'currentdayname'         => array( 1,    "CURRENTDAYNAME", "ENWDYDDCYFOES"            ),
+	'currentyear'            => array( 1,    "CURRENTYEAR", "FLWYDDYNCYFOES"              ),
+	'currenttime'            => array( 1,    "CURRENTTIME", "AMSERCYFOES"                 ),
+	'numberofarticles'       => array( 1, "NUMBEROFARTICLES","NIFEROERTHYGLAU"       ),
+	'currentmonthnamegen'    => array( 1,    "CURRENTMONTHNAMEGEN", "GENENWMISCYFOES"     ),
+	'subst'                  => array( 1,    "SUBST:"                                     ),
+	'msgnw'                  => array( 0,    "MSGNW:"                                     ),
+	'end'                    => array( 0, "__DIWEDD__"                                   ),
+	'img_thumbnail'          => array( 1, "ewin bawd", "bawd", "thumb", "thumbnail"  ),
+	'img_right'              => array( 1,    "de", "right"                                ),
+	'img_left'               => array( 1,    "chwith", "left"                             ),
+	'img_none'               => array( 1,    "dim", "none"                                ),
+	'img_width'              => array( 1,    "$1px"                                       ),
+	'img_center'             => array( 1, "canol", "centre", "center"                ),
+	'int'                    => array( 0,    "INT:"                                       )
+
+);
+$linkTrail = "/^([àáâèéêìíîïòóôûŵŷa-z]+)(.*)\$/sDu";
+
+$messages = array(
+# User Toggles
+
+"tog-underline" => "Tanllinellu cysylltiadau",
+"tog-highlightbroken" => "Fformatio cysylltiadau wedi'i dorri <a href=\"\" class=\"new\">fel hyn</a> (dewis arall: fel hyn<a href=\"\" class=\"internal\">?</a>).",
+"tog-justify" => "Unioni paragraffau",
+"tog-hideminor" => "Cuddiwch golygiadau bach mewn newidiadau diweddar",
+"tog-usenewrc" => "Newidiadau diweddar mwyhad (nid am pob porwr)",
+"tog-numberheadings" => "Rhifwch teiltau yn awtomatig",
+"tog-showtoolbar"=> "Dangos bar erfynbocs golygu",
+"tog-editondblclick" => "Golygu tudalennau gyda clic dwbwl (JavaScript)",
+"tog-editwidth" => "Mae gan bocs golygu lled llon",
+"tog-editsection"  => "Galluogwch golygu adrannau trwy cysylltiadau [golygu]",
+"tog-editsectiononrightclick" => "Galluogwch golygu adrannau trwy dde-clicio ar teitlau adran (JavaScript)",
+"tog-showtoc" => "Dangoswch Taflen Cynnwys (am erthyglau gyda mwy na 3 pennawdau",
+"tog-rememberpassword" => "Cofiwch allweddair dros sesiwnau",
+"tog-watchdefault" => "Gwiliwch erthyglau newydd ac wedi adnewid",
+"tog-minordefault" => "Marciwch pob golygiad fel un bach",
+"tog-previewontop" => "Dangos blaenwelediad cyn y bocs golygu, nid ar ol e",
+"tog-nocache" => "Anablwch casio tudanlen",
+
+# Dates
+'sunday' => 'Dydd Sul',
+'monday' => 'Dydd Llun',
+'tuesday' => 'Dydd Mawrth',
+'wednesday' => 'Dydd Mercher',
+'thursday' => 'Dydd Iau',
+'friday' => 'Dydd Gwener',
+'saturday' => 'Dydd Sadwrn',
+'january' => 'Ionawr',
+'february' => 'Chwefror',
+'march' => 'Mawrth',
+'april' => 'Ebrill',
+'may_long' => 'Mai',
+'june' => 'Mehefin',
+'july' => 'Gorffennaf',
+'august' => 'Awst',
+'september' => 'Medi',
+'october' => 'Hydref',
+'november' => 'Tachwedd',
+'december' => 'Rhagfyr',
+'jan' => 'Ion',
+'feb' => 'Chwe',
+'mar' => 'Maw',
+'apr' => 'Ebr',
+'may' => 'Mai',
+'jun' => 'Meh',
+'jul' => 'Gor',
+'aug' => 'Aws',
+'sep' => 'Med',
+'oct' => 'Hyd',
+'nov' => 'Tach',
+'dec' => 'Rhag',
+
+
+# Bits of text used by many pages:
+#
+"categories" => "Categorïau tudalen",
+"pagecategories" => "Categorïau tudalen",
+"category_header" => "Erthyglau mewn categori \"$1\"",
+"subcategories" => "Is-categorïau",
+"mainpage" => "Prif tudalen",
+"mainpagetext" => "Meddalwedd {{SITENAME}} wedi sefydlu'n llwyddiannus",
+"about"	=> "Amdano",
+"aboutsite"      => "Amdano {{SITENAME}}",
+"aboutpage" => "{{ns:project}}:Amdano",
+"help" => "Help",
+"helppage" => "{{ns:project}}:Help",
+"bugreports" => "Adroddiadau diffygion",
+"bugreportspage" => "{{ns:project}}:Adroddiadau_diffygion",
+"sitesupport" => "Rhoddion",
+"faq" => "COF",
+"faqpage" => "{{ns:project}}:COF",
+"edithelp" => "Help gyda golygu",
+"edithelppage" => "{{ns:project}}:Sut_ydy_chi'n_golygu_tudalen",
+"cancel" => "Dirymu",
+"qbfind" => "Cael",
+"qbbrowse" => "Pori",
+"qbedit" => "Golygu",
+"qbpageoptions" => "Dewysiadau tudalen",
+"qbpageinfo" => "Gwybodaeth tudalen",
+"qbmyoptions" => "Fy dewysiadau",
+"qbspecialpages" => "Tudalennau arbennig",
+"moredotdotdot"	=> "Mwy...",
+"mypage" => "Fy nhudalen",
+"mytalk" => "Sgwrs fi",
+"disclaimers" => "Gwadiadau",
+"disclaimerpage" => "{{ns:project}}:Gwadiad_cyffredin",
+"currentevents" => "Digwyddiadau presennol",
+"errorpagetitle" => "Gwall",
+"returnto" => "Ewch yn ôl i $1.",
+"whatlinkshere"	=> "Tudalennau sydd yn cysyllti fan hyn",
+"help" => "Help",
+"search" => "Chwilio",
+"searchbutton" => "Chwilio",
+"go" => "Mynd",
+'searcharticle' => "Mynd",
+"history" => "Hanes y tudalen",
+"printableversion" => "Fersiwn argraffiol",
+"editthispage" => "Golygwch y tudalen hon",
+"deletethispage" => "Dileuwch y tudalen hon",
+"protectthispage" => "Amddiffynwch y tudalen hon",
+"unprotectthispage" => "Di-amddiffynwch y tudalen hon",
+"newpage" => "Tudalen newydd",
+"talkpage" => "Sgwrsio amdano'r tudalen hon",
+"postcomment" => "Postiwch esboniad",
+"articlepage" => "Gwyliwch erthygl",
+"userpage" => "Gwyliwch tudalen defnyddiwr",
+"projectpage" => "Gwyliwch tudalen meta",
+"imagepage" => "Gwyliwch tudalen llun",
+"viewtalkpage" => "Gwyliwch sgwrs",
+"otherlanguages" => "Ieithoed eraill",
+"redirectedfrom" => "(Ail-cyfeiriad oddiwrth $1)",
+"lastmodifiedat" => "Pryd cafodd ei newid diwethaf $2, $1.",
+"viewcount" => "Mae'r tudalen hyn wedi cael ei gweld $1 o weithiau.",
+"protectedpage" => "Tudalen amddiffyniol",
+"nbytes" => "$1 bytes",
+"ok" => "OK",
+"retrievedfrom" => "Wedi dod o \"$1\"",
+"newmessageslink" => "Neges(eueon) newydd",
+"editsection" => "golygu",
+"editold" => "golygu",
+"toc" => "Taflen Cynnwys",
+"showtoc" => "dangos",
+"hidetoc" => "cuddio",
+"thisisdeleted" => "Edrychwch at, neu atgyweirio $1?",
+"restorelink" => "$1 golygiadau wedi eu dileuo",
+
+# Main script and global functions
+#
+"nosuchaction" => "Does dim gweithred",
+"nosuchactiontext" => "Dydy'r meddalwedd Mediawiki ddim yn deallt y gweithrediad mae'r URL yn gofyn iddo fe gwneud",
+"nosuchspecialpage" => "Does dim tudalen arbennig",
+"nospecialpagetext" => "Yr ydych wedi gofyn am tudalen arbennig dydy'r meddalwedd Mediawiki ddim yn adnabod.",
+
+# General errors
+#
+"error"	=> "Gwall",
+"databaseerror" => "Databas ar gam",
+"dberrortext" => "Mae gwall cystrawen wedi digwydd ar y databas.
+Y gofyniad olaf triodd y databas oedd:
+<blockquote><tt>$1</tt></blockquote>
+oddiwrth ffwythiant \"<tt>$2</tt>\".
+Dwedodd MySQL mae 'ne côd gwall \"<tt>$3: $4</tt>\".",
+"dberrortextcl"              => "Mae gwall cystrawen wedi digwydd ar y databas.
+Y gofyniad olaf triodd y databas oedd:
+\"$1\"
+oddiwrth ffwythiant \"$2\".
+Dwedodd MySQL mae 'ne côd gwall \"$3: $4\".",
+"noconnect" => "Ddim yn gallu cysylltu i'r databas ar $1",
+"nodb" => "Ddim yn gallu dewis databas $1",
+"cachederror" => "Dyma copi o'r stôr o'r tudalen rydych wedi gofyn, ac efallai dydi hi ddim yn cyfoes.",
+"readonly" => "Databas ar gloi",
+"enterlockreason" => "Rhowch reswm am paham mae'r databas yn cael eu gloi, yn cynnwys amcangyfrif pryd fydd y databas yn cael eu di-gloi",
+"readonlytext" => "Mae'r databas {{SITENAME}} wedi eu cloi yn erbyn erthyglau newydd ac adnewidiadau eraill, yn tebygol am gofalaeth trefn y databas -- fydd y databas yn ôl cyn bo hir.
+Mae'r gweinyddwr wedi dweud yr achos cloi'r databas oedd:
+<p>$1",
+"missingarticle" => "Dydi'r databas ddim wedi dod o hyd i testun tudalen ddyler hi ffindio, sef \"$1\".
+Dydi hwn ddim yn gwall y databas, ond debyg byg yn y meddalwedd.
+Adroddwch hwn i gweinyddwr os gwelwch yn dda, a cofiwch sylwi'r URL.",
+"internalerror" => "Gwall mewnol",
+"filecopyerror" => "Ddim yn gallu copïo ffeil \"$1\" i \"$2\".",
+"filerenameerror" => "Ddim yn gallu ail-enw ffeil \"$1\" i \"$2\".",
+"filedeleteerror" => "Ddim yn gallu dileu ffeil \"$1\".",
+"filenotfound" => "Ddim yn gallu ffeindio ffeil \"$1\".",
+"unexpected" => "Gwerth annisgwyl: \"$1\"=\"$2\".",
+"formerror" => "Gwall: ddim yn medru ymostwng y ffurflen",
+"badarticleerror" => "Mae'n amhosib perfformio'r gweithred hwn ar tudalen hon.",
+"cannotdelete" => "Mae'n amhosib dileu y tudalen neu llun hwn. (Wyrach mae rhywun arall eisoes wedi eu dileu.)",
+"badtitle" => "Teitl drwg",
+"badtitletext" => "Mae'r teitl rydych wedi gofyn yn anilys, gwag, neu cysylltu'n anghywir rhwng ieithoedd neu wicïau.",
+"perfdisabled" => "Sori! Mae'r nodwedd hon wedi cael eu anablo am achosion perfformiadau yn yr amserau brysyrach; dewch yn ôl rhwng 02:00 a 14:00 GMT a triwch eto.",
+"perfdisabledsub" => "Dyma copi rydym wedi cadw ers $1:",
+"wrong_wfQuery_params" => "Incorrect parameters to wfQuery()<br />
+Function: $1<br />
+Query: $2",
+"viewsource" => "Gwyliwch y ffynhonnell",
+# problem with link: [[{{ns:project}}:Protected page]]
+"protectedtext" => "Mae tudalen hon wedi cael eu gloi i gwahardd golygu'r tudalen. Mae nifer o rheswmau paham mae hwn wedi digwydd, gwelwch y tudalen
+[[{{ns:project}}:Protected page]].
+
+Ellwch gweld a copïo'r ffynhonnell y tudalen hon:",
+
+# Login and logout pages
+#
+"logouttitle" => "Allgofnodi'r defnyddwr",
+"logouttext" => "Yr ydych wedi allgofnodi.
+Gallwch chi defnyddio'r {{SITENAME}} yn anhysbys, neu gallwch chi mewngofnodi eto fel yr un defnyddwr neu un arall.",
+
+"welcomecreation" => "<h2>Croeso, $1!</h2><p>Mae eich accownt wedi gael eu creu. Peidiwch ac anghofio i personaleiddio eich ffafraethau defnyddwr {{SITENAME}}.",
+"loginpagetitle" => "Mewngofnodi'r defnyddwr",
+"yourname" => "Eich enw defnyddwr",
+"yourpassword" => "Eich allweddair",
+"yourpasswordagain" => "Ail-teipiwch allweddair",
+"remembermypassword" => "Cofiwch fy allweddair dros mwy nag un sesiwn.",
+"loginproblem" => "<b>Mae problem efo'ch mewngofnodi.</b><br />Triwch eto!",
+"alreadyloggedin" => "<strong>Defnyddwr $1, yr ydych eisioes wedi mewngofnodi!</strong><br />",
+
+"login"	=> "Mewngofnodi",
+"loginprompt" => "Rhaid i chi galluogi cwcis i mewngofnodi i {{SITENAME}}.",
+"userlogin" => "Mewngofnodi",
+"logout" => "Allgofnodi",
+"userlogout" => "Allgofnodi",
+"notloggedin" => "Nid wedi mewngofnodi",
+"createaccount"	=> "Creuwch accownt newydd",
+"createaccountmail" => "gan e-post",
+"badretype" => "Dydy'r allweddgeiriau ddim yn cymharu.",
+"userexists" => "Mae rhywun arall wedi dewis yr enw defnyddwr. Dewiswch un arall os gwelwch yn dda.",
+"youremail" => "Eich cyfeiriad e-bost",
+"yournick" => "Eich llysenw (am llofnod)",
+"loginerror" => "Problem mewngofnodi",
+"nocookiesnew" => "Mae'r accownt defnyddiwr wedi gael eu creu, ond dydwch chi ddim wedi mewngofnodi. Mae {{SITENAME}} yn defnyddio cwcis i mewngofnodi defnyddwyr. Rydych chi wedi anablo cwcis. Galluogwch nhw os welwch yn dda, felly mewngofnodwch gyda'ch enw defnyddiwr a cyfrinair newydd.",
+"nocookieslogin" => "Mae {{SITENAME}} yn defnyddio cwcis i mewngofnodi defnyddwyr. Rydych chi wedi anablo cwcis. Galluogwch nhw os welwch yn dda, a triwch eto.",
+"noname" => "Dydi chi ddim wedi enwi enw defnyddwr dilys.",
+"loginsuccesstitle" => "Mewngofnod llwyddiannus",
+"loginsuccess" => "Yr ydych wedi mewngofnodi i {{SITENAME}} fel \"$1\".",
+"nosuchuser" => "Does dim defnyddwr gyda'r enw \"$1\".
+Sicrhau rydych chi wedi sillafu'n iawn, neu creuwch accownt newydd gyda'r ffurflen isod.",
+"wrongpassword"	=> "Mae'r allweddair rydych wedi teipio ddim yn cywir. Triwch eto, os gwelwch yn dda.",
+"mailmypassword" => "E-postiwch allweddair newydd i fi",
+"passwordremindertitle" => "Nodyn atgoffa allweddair oddiwrth {{SITENAME}}",
+"passwordremindertext" => "Mae rhywun (chi, yn tebygol, oddiwrth cyfeiriad IP $1) wedi gofyn iddi ni danfon allweddair mewngofnodi newydd {{SITENAME}}.
+Allweddair defnyddwr \"$2\" rwan yw \"$3\". Ddylwch chi mewngofnodi rwan a newid yr allweddair.",
+"noemail" => "Does dim cyfeiriad e-bost wedi cofrestru dros defnyddwr \"$1\".",
+"passwordsent" => "Mae allweddair newydd wedi gael eu ddanfon at y cyfeiriad e-bost cofrestredig am \"$1\". Mewngofnodwch eto, os gwelwch yn dda, ar ol i chi dderbyn yr allweddair.",
+
+# Edit page toolbar
+"bold_sample" => "Testun cryf",
+"bold_tip" => "Testun cryf",
+"italic_sample" => "Testun italig",
+"italic_tip" => "Testun italig",
+"link_sample" => "Teitl cyswllt",
+"link_tip" => "Cyswllt mewnol",
+"extlink_sample" => "http://www.example.com cyswllt teitl",
+"extlink_tip" => "Cyswllt allanol (cofiwch y rhagddodiad http:// )",
+"headline_sample" => "Testun pennawd",
+"headline_tip" => "Pennawd safon 2",
+"math_sample" => "Mewnosodwch fformwla yma",
+"math_tip" => "Fformwla mathemategol (LaTeX)",
+"nowiki_sample" => "Mewnosodwch testun di-fformatedig yma",
+"nowiki_tip" => "Anwybyddwch fformatiaeth wiki",
+"image_sample" => "Example.jpg",
+"image_tip" => "Delwedd mewnosod",
+"media_sample" => "Example.mp3",
+"media_tip" => "Cyswllt ffeil media",
+"sig_tip" => "Eich llofnod gyda stamp amser",
+"hr_tip" => "Llinell llorweddol (defnyddiwch yn cynnil)",
+
+# Edit pages
+#
+"summary" => "Crynodeb",
+"subject" => "Testun/pennawd",
+"minoredit" => "Mae hwn yn golygiad bach",
+"watchthis" => "Gwyliwch erthygl hon",
+"savearticle" => "Cadw tudalen",
+"preview" => "Blaenwelediad",
+"showpreview" => "Gweler blaenwelediad",
+"blockedtitle"	=> "Mae'r defnyddwr wedi gael eu blocio",
+"blockedtext" => "Mae eich enw defnyddwr neu cyfeiriad IP wedi gael eu blocio gan $1. Y rheswm yw:<br />''$2''<p>Ellwch cysylltu $1 neu un o'r
+[[{{MediaWiki:grouppage-sysop}}|swyddogion]] eraill i trafodi'r bloc.",
+"whitelistedittitle" => "Rhaid mewngofnodi i golygu",
+"whitelistedittext" => "Rhaid i chi [[Special:Userlogin|mewngofnodi]] i olygu erthyglau.",
+"whitelistreadtitle" => "Rhaid mewngofnodi i ddarllen",
+"whitelistreadtext" => "Rhaid i chi [[Special:Userlogin|mewngofnodi]] i ddarllen erthyglau.",
+"whitelistacctitle" => "Ni chaniateir creu accownt",
+"whitelistacctext" => "I gael caniatâd i creu accownt yn y wiki hon, rhaid i chi [[Special:Userlogin|mewngofnodi]] a chael y caniatâd priodol.",
+"accmailtitle" => "Wedi danfon cyfrinair.",
+"accmailtext" => "Mae'r cyfrinair am '$1' wedi danfon i $2.",
+"newarticle" => "(Newydd)",
+"newarticletext" =>
+"Yr ydych wedi dilyn cysylltiad i tudalen sydd ddim wedi gael eu creu eto.
+I creuo'r tudalen, dechreuwch teipio yn y bocs isaf
+(gwelwch y [[{{MediaWiki:helppage}}|tudalen help]] am mwy o hysbys).
+Os ydych yma trwy camgymeriad, cliciwch eich botwm '''nol'''.",
+"anontalkpagetext" => "---- ''Dyma tudalen sgwrsio am defnyddwr sydd ddim eto wedi creu accownt, neu ddim yn eu defnyddio. Rhaid i ni defnyddio'r cyfeiriad IP rhifiadol i adnabod fe neu hi. Mae'n posib i llawer o bobl siario'r un cyfeiriad IP. Os ydych chi'n defnyddwr anhysbys ac yn teimlo mae esboniadau amherthynol wedi cael eu gwneud arnach chi, creuwch accownt neu mewngofnodwch i osgoi anhrefn gyda defnyddwyr anhysbys yn y dyfodol.''",
+"noarticletext" => "(Does dim testun yn y tudalen hon eto)",
+"updated" => "(Diweddariad)",
+"note"	=> "<strong>Sylwch:</strong>",
+"previewnote" => "Cofiwch blaenwelediad ydi hwn, a dydi e ddim wedi cael eu chadw!",
+"previewconflict" => "Mae blaenwelediad hwn yn dangos y testun yn yr ardal golygu uchaf, fel y fydd hi'n edrych os dewyswch chi arbed.",
+"editing" => "Yn golygu $1",
+'editinguser' => "Yn golygu $1",
+"editingsection" => "Yn golygu $1 (rhan)",
+"editingcomment" => "Yn golygu $1 (esboniad)",
+"editconflict" => "Croestynnu golygyddol: $1",
+"explainconflict" => "Mae rhywun arall wedi newid y tudalen hon ers i chi dechrau golygu hi. Mae'r ardal testun uchaf yn cynnwys testun y tudalen fel y mae hi rwan. Mae eich newidiadau yn ddangos yn yr ardal testun isaf.
+Fydd rhaid i chi ymsoddi eich newidiadau i mewn i'r testun sydd mewn bod.
+<b>Dim ond</b> y testun yn yr ardal testun uchaf fydd yn cael eu cadw pan rydwch yn gwasgu \"Cadw tudalen\".<br />",
+"yourtext" => "Eich testun",
+"storedversion" => "Fersiwn wedi cadw",
+"editingold" => "<strong>RHYBUDD: Rydych yn golygu hen fersiwn y tudalen hon. Os cadwch hi, fydd unrhyw newidiadau hwyrach yn gael eu colli!.</strong>",
+"yourdiff" => "Gwahaniaethau",
+/*"copyrightwarning" => "Sylwch mae pob cyfraniad i {{SITENAME}} yn gael eu rhyddhau o dan termau'r Trwydded Dogfen Rhydd GNU (gwelwch $1 am manylion).
+Os nid ydych chi'n fodlon cael eich ysgrifeniad eu golygu heb trugaredd, a creu copïau dros y wê, peidiwch cyfranu'r ysgrifeniad yma.<br />
+Hefyd, rydych chi'n addo chi yw'r awdur y cyfraniad, neu rydych chi wedi copïo fe oddiwrth y parth cyhoeddus neu rhyw modd rhydd tebyg.
+<strong>PEIDIWCH CYFRANNU GWAITH O DAN HAWLFRAINT HEB CANIATÂD!</strong>",*/
+"longpagewarning" => "<strong>RHYBUDD: Mae hyd y tudalen hon yn $1 kilobyte; mae rhai porwyr yn cael problemau yn golygu tudalennau hirach na 32kb.<br />
+Ystyriwch torri'r tudalen i mewn i ddarnau llai, os gwelwch yn dda.</strong>",
+"readonlywarning" => "<strong>RHYBUDD: Mae'r databas wedi cloi i gael eu trwsio,
+felly fyddwch chi ddim yn medru cadw eich olygiadau rwan. Efalle fyddwch chi'n eisio tori-a-pastio'r
+testun i mewn i ffeil testun, a cadw hi tan hwyrach.</strong>",
+# problem with link: [[Project:Protected_page_guidelines|gwifrau tywys tudalen amddiffyn]]
+"protectedpagewarning" => "<strong>RHYBUDD:  Mae tudalen hon wedi eu gloi -- dim ond defnyddwyr
+gyda braintiau 'sysop' sy'n medru eu olygu. Byddwch yn siwr rydych yn dilyn y
+[[Project:Protected_page_guidelines|gwifrau tywys tudalen amddiffyn]].</strong>",
+
+# History pages
+#
+"revhistory" => "Hanes cywiriadau",
+"nohistory" => "Does dim hanes cywiriadau am tudalen hon.",
+"revnotfound" => "Cywiriad nid wedi darganfod",
+"revnotfoundtext" => "Ni ellir darganfod yr hen cywiriad y tudalen rydych wedi gofyn amdano. Gwiriwch yr URL rydych wedi defnyddio i darganfod y tudalen hon.",
+"loadhist" => "Yn llwytho hanes y tudalen",
+"currentrev" => "Diwygiad cyfoes",
+"revisionasof"	=> "Diwygiad $1",
+"cur" => "cyf",
+"next"	=> "nesaf",
+"last"	=> "olaf",
+"orig"	=> "gwreidd",
+"histlegend" => "Eglurhad: (cyf) = gwahaniaeth gyda fersiwn cyfoes,
+(olaf) = gwahaniaeth gyda fersiwn gynt, M = golygiad mân",
+
+# Diffs
+#
+"difference" => "(Gwahaniaethau rhwng fersiwnau)",
+"loadingrev" => "yn llwytho diwygiad am wahaniaeth",
+"lineno" => "Llinell $1:",
+"editcurrent" => "Golygwch fersiwn cyfoes tudalen hon",
+
+# Search results
+#
+"searchresults" => "Canlyniadau chwiliad",
+"searchresulttext" => "Am mwy o hysbys amdano chwilio {{SITENAME}}, gwelwch [[{{MediaWiki:helppage}}|{{int:help}}]].",
+"searchsubtitle" => "Am gofyniad \"[[:$1]]\"",
+"searchsubtitleinvalid" => "Am gofyniad \"$1\"",
+"badquery" => "Gofyniad chwilio drwg",
+"badquerytext" => "Roedd yn amhosibl i prosesu'ch gofyniad.
+Mae'n tebygol roedd hyn am achos yr ydych wedi trio chwilio a gair gyda llai na tri llythyrau. Hefyd, wyrach rydych wedi cam-teipio'r gofyniad. Triwch gofyniad arall.",
+"matchtotals" => "Mae'r gofyniad \"$1\" wedi cyfatebu $2 teitlau erthyglau, a'r testun oddiwrth $3 erthyglau.",
+"titlematches" => "Teitlau erthygl yn cyfateb",
+"notitlematches" => "Does dim teitlau erthygl yn cyfateb",
+"textmatches" => "Testun erthygl yn cyfateb",
+"notextmatches"	=> "Does dim testun erthyglau yn cyfateb",
+"prevn"	=> "$1 gynt",
+"nextn"	=> "$1 nesaf",
+"viewprevnext"	=> "Gweler ($1) ($2) ($3).",
+"showingresults" => "Yn dangos isod y <b>$1</b> canlyniadau yn dechrau gyda #<b>$2</b>.",
+"nonefound" => "<strong>Sylwch</strong>: mae chwiliadau yn aml yn anlwyddiannus am achos mae'r chwiliad yn edrych a geiriau cyffredin fel \"y\" ac \"ac\",
+sydd ddim yn cael eu mynegai.",
+"powersearch" => "Chwilio",
+"powersearchtext" => "
+Edrychwch mewn lle-enw:<br />
+$1<br />
+$2 Rhestrwch ail-cyfeiriadau &nbsp; Chwiliwch am $3 $9",
+"searchdisabled" => "<p>Mae'r peiriant chwilio'r holl databas wedi cael eu troi i ffwrdd i gwneud pethau'n hawddach ar y gwasanaethwr. Gobeithiwn fydd yn bosibl i troi'r peiriant ymlaen cyn bo hir, ond yn y cyfamser mae'n posibl gofyn Google:</p>",
+"blanknamespace" => "(Prif)",
+
+
+# Preferences page
+#
+"preferences" => "ffafraethau",
+"prefsnologin" => "Nid wedi mewngofnodi",
+"prefsnologintext" => "Rhaid i chi [[Special:Userlogin|mewngofnodi]]
+i setio ffafraethau defnyddwr.",
+"prefsreset" => "Mae ffafraethau wedi gael eu ail-setio oddiwrth y storfa.",
+"qbsettings" => "Gosodiadau bar-gyflym",
+'qbsettings-none'	=> 'Dim',
+'qbsettings-fixedleft'	=> 'Sefydlog chwith',
+'qbsettings-fixedright'	=> 'Sefydlog de',
+'qbsettings-floatingleft'	=> 'Arnawf de',
+"changepassword" => "Newydwch allweddair",
+"skin"	=> "Croen",
+"math"	=> "Rendro mathemateg",
+"math_failure"	=> "wedi methu dosbarthu",
+"math_unknown_error" => "gwall anhysbys",
+"math_unknown_function"	=> "ffwythiant anhysbys",
+"math_lexing_error" => "gwall lecsio",
+"math_syntax_error" => "gwall cystrawen",
+"saveprefs" => "Cadw ffafraethau",
+"resetprefs" => "Ail-setio ffafraethau",
+"oldpassword" => "Hen allweddair",
+"newpassword" => "Allweddair newydd",
+"retypenew" => "Ail-teipiwch yr allweddair newydd",
+"textboxsize" => "Maint y bocs testun",
+"rows"	=> "Rhesi",
+"columns" => "Colofnau",
+"searchresultshead" => "Sefydliadau canlyniadau chwilio",
+"resultsperpage" => "Hitiau i ddangos ar pob tudalen",
+"contextlines" => "Llinellau i ddangos ar pob hit",
+"contextchars" => "Characters of context per line",
+"stubthreshold" => "Threshold for stub display",
+"recentchangescount" => "Nifer o teitlau yn newidiadau diweddar",
+"savedprefs" => "Mae eich ffafraethau wedi cael eu chadw.",
+"timezonetext"	=> "Teipiwch y nifer o oriau mae eich amsel lleol yn wahân o'r amser y gwasanaethwr (UTC/GMT).",
+"localtime" => "Amser lleol",
+"timezoneoffset" => "Atred",
+"servertime" => "Amser y gwasanaethwr yw",
+"guesstimezone" => "Llenwch oddiwrth y porwr",
+"defaultns" => "Gwyliwch yn llefydd-enw rhain:",
+
+# Recent changes
+#
+"changes" => "newidiadau",
+"recentchanges" => "Newidiadau diweddar",
+"recentchangestext" => "Traciwch y newidiadau mor diweddar i'r {{SITENAME}} ac i'r tudalen hon.",
+"rcnote" => "Isod yw'r newidiadau <strong>$1</strong> olaf yn y <strong>$2</strong> dyddiau olaf.",
+"rcnotefrom" => "Isod yw'r newidiadau ers <b>$2</b> (dangosir i fynu i <b>$1</b>).",
+"rclistfrom" => "Dangos newidiadau newydd yn dechrau oddiwrth $1",
+"rclinks" => "Dangos y $1 newidiadau olaf yn y $2 dyddiau olaf.",
+"diff"	=> "gwahan",
+"hist"	=> "hanes",
+"hide"	=> "cuddio",
+"show"	=> "dangos",
+"minoreditletter" => "B",
+"newpageletter" => "N",
+
+# Upload
+#
+"upload" => "Llwytho ffeil i fynu",
+"uploadbtn" => "Llwytho ffeil i fynu",
+"reupload" => "Ail-llwytho i fynu",
+"reuploaddesc"	=> "Return to the upload form.",
+"uploadnologin" => "Nid wedi mewngofnodi",
+"uploadnologintext" => "Rhaid i chi bod wedi [[Special:Userlogin|mewngofnodi]]
+i lwytho ffeiliau i fynu.",
+"uploaderror" => "Gwall yn llwytho ffeil i fynu",
+# problem with link: [[Project:Polisi_defnyddio_lluniau|polisi defnyddio lluniau]]
+"uploadtext" => "'''STOPIWCH!''' Cyn iddich chi llwytho lluniau yma, darllenwch a dilynwch [[Project:Polisi_defnyddio_lluniau|polisi defnyddio lluniau]] {{SITENAME}} os gwelwch yn dda.
+
+I gweld neu chwilio hen lluniau ewch i'r
+[[{{ns:special}}:Imagelist|rhestr lluniau wedi llwytho]].
+Mae pob llwyth a dileuo ffeil yn cael eu recordio ar y
+[[Special:Log/upload|log llwytho]].
+
+Defnyddwch y ffurflen isod i llwytho ffeil llun newydd i darluno eich erthyglau.
+Ar y mwyafrif o porwyr, fyddwch yn gweld botwm \"Pori/Browse...\" i agor y dialog agor ffeil arferol.
+Fydd dewis ffeil y llenwi enw'r ffeil yn y cae testun nesaf i'r botwm.
+Mae rhaid i chi hefyd ticio'r blaidd i addo rydych chi ddim yn torri hawlfraintiau rhywun arall trwy llwytho'r ffeil.
+Gwasgwch y botwm \"Llwytho/Upload\" i gorffen y llwyth.
+Ellith hwn cymyd dipyn o amser os mae gennych chi cysylltiad rhyngrwyd araf.
+
+Y fformatiau gwell gennym ni yw JPEG am lluniau ffotograffiaeth, PNG
+am lluniadau a delweddau iconydd eraill, ag OGG am seiniau.
+Enwch eich ffeil yn disgrifiadol i osgoi anhrefn os gwelwch yn dda.
+I cynnwys y llun mewn erthygl, defnyddwch cysylltiad yn y ffurf
+'''<nowiki>[[</nowiki>{{ns:image}}<nowiki>:ffeil.jpg]]</nowiki>''' neu
+'''<nowiki>[[</nowiki>{{ns:image}}<nowiki>:ffeil.png|testun arall]]</nowiki>''' neu
+'''<nowiki>[[</nowiki>{{ns:media}}<nowiki>:ffeil.ogg]]</nowiki>''' am sain.
+
+Sylwch -- fel efo tudalennau {{SITENAME}}, ellith pobl eraill golygu neu dileu eich ffeil os ydyn nhw'n meddwl fyddynt yn helpu'r gwyddoniadur, ac ellwch chi cael eich gwaharddio os ydych chi'n sarhau'r system.",
+"uploadlog" => "log llwytho i fynu",
+"uploadlogpage" => "log_llwytho_i_fynu",
+"uploadlogpagetext" => "Isod mae rhestr o'r llwythu ffeil diweddarach.
+Pob amser sy'n dangos yw amser y gwasanaethwr (UTC).
+<ul>
+</ul>",
+"filename" => "Enw ffeil",
+"filedesc" => "Crynodeb",
+"filestatus" => "Statws hawlfraint",
+"filesource" => "Ffynhonnell",
+"copyrightpage" => "{{ns:project}}:Hawlfraint",
+"copyrightpagename" => "Hawlfraint {{SITENAME}}",
+"uploadedfiles"	=> "Ffeiliau wedi llwytho i fynu",
+"minlength" => "Rhaid enwau lluniau bod o leia tri llythrennau.",
+"badfilename" => "Mae enw'r llun wedi newid i \"$1\".",
+"badfiletype" => "Nid yw \".$1\" yn fformat ffeil lluniau cymeradwy.",
+"largefile" => "Mae'n cymeradwy dydy lluniau nid mwy na 100k o faint.",
+"successfulupload" => "Llwyth i fynu yn llwyddiannus",
+"fileuploaded" => "Mae ffeil \"$1\" wedi llwytho'n llwyddiannnus.
+Dilynwch y cyswllt hon: ($2) i'r tudalen disgrifiad a llenwch gwybodaeth amdano'r ffeil (ble mae'n dod o, pwy a creu o, beth bynnag arall rydych chi'n gwybod amdano'r ffeil.",
+"uploadwarning" => "Rhybudd llwytho i fynu",
+"savefile" => "Cadw ffeil",
+"uploadedimage" => "\"[[$1]]\" wedi llwytho",
+"uploaddisabled" => "Mae ddrwg gennym ni, mae uwchllwytho wedi anablo.",
+
+# Image list
+#
+"imagelist" => "Rhestr delweddau",
+"imagelisttext"	=> "Isod mae rhestr o $1 delweddau wedi trefnu $2.",
+"getimagelist" => "yn nôl rhestr delweddau",
+"ilsubmit" => "Chwilio",
+"showlast" => "Dangos y $1 delweddau olaf wedi trefnu $2.",
+"byname" => "gan enw",
+"bydate" => "gan dyddiad",
+"bysize" => "gan maint",
+"imgdelete" => "difl",
+"imgdesc" => "disg",
+"imglegend" => "Eglurhad: (disg) = dangos/golygu disgrifiad y delwedd.",
+"imghistory" => "Hanes y delwedd",
+"revertimg" => "dych",
+"deleteimg" => "dil",
+"deleteimgcompletely" => "dil",
+"imghistlegend" => "Eglurhad: (cyf) = hon yw'r delwedd cyfoes, (dil) = dilewch yr hen fersiwn hon, (dych) = dychwelio i hen fersiwn hon.
+<br /><i>Cliciwch ar dyddiad i weld y delwedd ag oedd llwythiad ar y dyddiad hon</i>.",
+"imagelinks" => "Cysylltiadau delwedd",
+"linkstoimage" => "Mae'r tudalennau isod yn cysylltu i'r delwedd hon:",
+"nolinkstoimage" => "Does dim tudalen yn cysylltu i'r  delwedd hon.",
+
+# Statistics
+#
+"statistics" => "Ystadegau",
+"sitestats" => "Ystadegau'r seit",
+"userstats" => "Ystadegau defnyddwyr",
+"sitestatstext" => "Mae <b>$1</b> tudalennau ar y databas.
+Mae hyn yn cynnwys tudalennau \"sgwrs\", tudalennau amdano {{SITENAME}}, tudalennau \"stwbyn\" bach, ail-cyfeirnodau, ac eraill sydd dim yn cymwysoli fel erthyglau. Ag eithrio y rheini, mae <b>$2</b> tudalennau yn tebyg yn erthyglau iawn.<p>
+Mae 'ne wedi bod <b>$3</b> golygon o tudalennau, a <b>$4</b> tudalennau wedi golygu ers i'r meddalwedd gael eu sefydliad (12 Gorffennaf 2003).
+Sef <b>$5</b> golygiadau pob tudalen, ar gyfartaledd, a <b>$6</b> golygon o bob golygiad.",
+"userstatstext" => "Mae 'ne <b>$1</b> defnyddwyr wedi cofrestru.
+(Mae <b>$2</b> yn gweinyddwyr (gwelwch $3)).",
+
+# Miscellaneous special pages
+#
+"lonelypages" => "Erthyglau heb cysylltiadau",
+"unusedimages"	=> "Lluniau di-defnyddio",
+"popularpages"	=> "Erthyglau poblogol",
+"nviews" => "$1 golwgfeydd",
+"wantedpages" => "Erthyglau mewn eisiau",
+"nlinks" => "$1 cysylltiadau",
+"allpages" => "Pob tudalennau",
+"randompage" => "Erthygl hapgyrch",
+"shortpages" => "Erthyglau byr",
+"longpages" => "Erthyglau hir",
+"deadendpages" => "Tudalennau heb cysylltiadau",
+"listusers" => "Rhestr defnyddwyr",
+"specialpages" => "Erthyglau arbennig",
+"spheading" => "Erthyglau arbennig",
+"recentchangeslinked" => "Newidiadau perthnasol",
+"rclsub" => "(i erthyglau cysyllt oddiwrth \"$1\")",
+"newpages" => "Erthyglau newydd",
+"ancientpages" => "Erthyglau hynach",
+"intl" => "Cysylltiadau rhwng ieithau",
+"movethispage"	=> "Symydwch tudalen hon",
+"unusedimagestext" => "<p>Sylwch mae gwefannau eraill, e.e. y {{SITENAME}}u Rhwngwladol, yn medru cysylltu at llun gyda URL uniongychol, felly mae'n bosibl dangos enw ffeil yma er gwaethaf mae hi'n dal mewn iws.", // TODO: grammar
+"booksources" => "Ffynonellau llyfrau",
+"booksourcetext" => "Isod mae rhestr cysylltiadau i gwefannau eraill sydd yn gwerthu llyfrau newydd ac ail-law, ac wyrach mae ganddynt gwybodaeth am y llyfrau rydych yn chwilio amdano.
+Does gan {{SITENAME}} dim cysylltiad gyda unrhyw o'r masnachau, a dydy rhestr hon ddim yn cymeradwyaeth o honnynt.",
+"alphaindexline" => "$1 i $2",
+"version" => "Fersiwn",
+
+# Email this user
+#
+"mailnologin" => "Dim cyfeiriad i anfon",
+"mailnologintext" => "Rhaid i chi wedi [[{{ns:special}}:Userlogin|mewngofnodi]]
+a rhoi cyfeiriad e-bost dilyn yn eich [[{{ns:special}}:Preferences|ffafraethau]]
+i anfon e-bost i ddefnyddwyr eraill.",
+"emailuser" => "Anfon e-bost i defnyddwr hwn",
+"emailpage" => "Anfon e-bost i defnyddwr",
+"emailpagetext"	 => "Os yw defnyddwr hwn wedi rhoi cyfeiriad e-bost yn eu ffafraethau, fydd y ffurf isod yn anfon un neges iddo ef. Fydd y cyfeiriad e-bost rydych chi wedi rhoi yn eich ffafraethau yn dangos yn yr \"Oddiwrth\" cyfeiriad yr e-bost, felly fydd y defnyddwr arall yn gallu ateb.",
+"defemailsubject" => "e-post {{SITENAME}}",
+"noemailtitle" => "Dim cyfeiriad e-bost",
+"noemailtext" => "Dydy defnyddwr hwn ddim wedi rhoi cyfeiriad e-bost dilys, neu mae e wedi dewis nid i dderbyn e-bost oddiwrth defnyddwyr eraill.",
+"emailfrom" => "Oddiwrth",
+"emailto" => "I",
+"emailsubject" => "Pwnc",
+"emailmessage" => "Neges",
+"emailsend" => "Anfon",
+"emailsent" => "Neges e-bost wedi danfon",
+"emailsenttext" => "Mae eich neges e-bost wedi gael ei anfon.",
+
+# Watchlist
+#
+"watchlist" => "Fy rhestr gwylio",
+"mywatchlist" => "Fy rhestr gwylio",
+"nowatchlist"  => "Does ganddoch chi ddim eitem ar eich rhestr gwylio.",
+"watchnologin"	=> "Dydych chi ddim wedi mewngofnodi",
+"watchnologintext" => "Rhaid i chi bod wedi [[Special:Userlogin|mewngofnodi]]
+i adnewid eich rhestr gwylio.",
+"addedwatch" => "Wedi adio i'ch rhestr gwylio",
+"addedwatchtext" => "Mae tudalen \"$1\" wedi gael eu ychwanegu i eich <a href=\"" .
+  "{{localurle:Arbennig:Rhestr_gwylio}}\">rhestr gwylio</a>.
+Pan fydd y tudalen hon, a'i tudalen Sgwrs, yn newid, fyddynt yn dangos  <b>yn cryf</b> yn y <a href=\"" .
+  "{{localurle:Arbennig:Newidiadau_diweddar}}\">rhestr newidiadau diweddar</a>, i bod yn hawsach i gweld.
+
+Os ydych chi'n eisiau cael gwared ar y tudalen yn hwyrach, cliciwch ar \"Stopiwch gwylio\" yn y bar ar y chwith.",
+"removedwatch" => "Wedi diswyddo oddiwrth y rhestr gwylio",
+"removedwatchtext" => "Mae tudalen \"$1\" wedi cael ei diswyddo oddiwrth eich rhestr gwylio.",
+"watchthispage"	=> "Gwyliwch y tudalen hon",
+"unwatchthispage" => "Stopiwch gwylio",
+"notanarticle"	=> "Nid erthygl",
+"watchnochange" => "Does dim o'r erthyglau rydych chi'n gwylio wedi golygu yn yr amser sy'n dangos.",
+"watchdetails" => "(Yn gwylio $1 tudalennau, nid yn cyfri tudalennau sgwrs;
+wedi olygu $2 tudalennau ers y toriad;
+$3...
+[$4 dangos ac olygu y rhestr cyfan].)",
+"watchmethod-recent"=> "gwiriwch golygiadau diweddar am tudalennau gwyliad",
+"watchmethod-list" => "yn gwirio tudalennau gwyliad am olygiadau diweddar",
+"removechecked" => "Dileuwch eitemau sydd gyda tic o'ch rhestr gwylio",
+"watchlistcontains" => "Mae eich rhestr gwylio yn cynnwys $1 tudalennau.",
+"watcheditlist"	=> "Dyma rhestr wyddorol o'r tudalennau rydych yn wylio.
+Ticiwch blwchau y tudalennau rydych eisiau symud o'ch rhestr gwylio, a cliciwch
+y botwm 'dileu' ar gwaelod y sgrîn.",
+"removingchecked" => "Yn dileu'r eitemau rydych wedi gofyn o'ch rhestr gwylio...",
+"couldntremove" => "Wedi methu dileu eitem '$1'...",
+"iteminvalidname" => "Problem gyda eitem '$1', enw annilys...",
+"wlnote" => "Isod yw'r $1 newidiadau olaf yn y <b>$2</b> oriau diwethaf.",
+"wlshowlast" => "Dangos y $1 oriau $2 dyddiau $3 diwethaf",
+"wlsaved" => "Dyma copi o'ch rhestr gwylio rydym ni wedi cadw.",
+
+# Delete/protect/revert
+#
+"deletepage" => "Dileuwch y tudalen",
+"confirm" => "Cadarnhau",
+"excontent" => "y cynnwys oedd: '$1'",
+"exbeforeblank" => "y cynnwys cyn blancio oedd: '$1'",
+"exblank" => "y tudalen oedd yn wâg",
+"confirmdelete" => "Cadarnhaewch y dileuad",
+"deletesub" => "(Yn dileuo \"$1\")",
+"historywarning" => "Rhubydd: Mae hanes gan y tudalen yr ydych yn mynd i dileuo:",
+"confirmdeletetext" => "Rydych chi'n mynd i dileu erthygl neu llun yn parhaol, hefyd gyda'u hanes, oddiwrth y databas.
+Cadarnhaewch yr ydych yn bwriadu gwneud hwn, ac yr ydych yn ddeallt y canlyniad, ac yr ydych yn gwneud hwn yn ôl [[{{MediaWiki:policy-url}}]].",
+"policy-url" => "Project:Polisi",
+"actioncomplete" => "Gweithred llwyr",
+"deletedtext" => "Mae \"$1\" wedi eu dileu.
+Gwelwch $2 am cofnod o dileuon diweddar.",
+"deletedarticle" => "wedi dileu \"$1\"",
+"dellogpage" => "Log_dileuo",
+"dellogpagetext" => "Isod mae rhestr o'r dileuon diweddarach.
+<ul>
+</ul>",
+"deletionlog" => "Log dileuon",
+"reverted" => "Wedi mynd nôl i fersiwn gynt",
+"deletecomment"	=> "Achos dileuad",
+"imagereverted" => "Gwrthdroad i fersiwn gynt yn llwyddiannus.",
+"rollback" => "Roliwch golygon yn ôl",
+"rollbacklink" => "rolio nôl",
+"cantrollback" => "Ddim yn gallu gwrthdroi golygiad; y cyfrannwr olaf oedd yr unrhyw awdur yr erthygl hon.",
+"alreadyrolled"	=> "Amhosib rolio nôl golygiad olaf [[:$1]]
+gan [[{{ns:user}}:$2|$2]] ([[{{ns:user_talk}}:$2|Sgwrs]]); mae rhywun arall yn barod wedi olygu neu rolio nôl yr erthygl.
+
+[[{{ns:user}}:$3|$3]] ([[{{ns:user_talk}}:$3|Sgwrs]] gwneuthoedd yr olygiad olaf).",
+#   only shown if there is an edit comment
+"editcomment" => "Crynodeb y golygiad oedd: \"<i>$1</i>\".",
+"revertpage" => "Wedi gwrthdroi i golygiad olaf gan $1",
+"protectlogpage" => "Log_amdiffyno",
+# problem with link: [[{{ns:project}}:Tudalen amddiffynol]]
+"protectlogtext" => "Isod mae rhestr o cloion/datgloion tudalennau.
+Gwelwch [[{{ns:project}}:Tudalen amddiffynol]] am mwy o wybodaeth.",
+"protectedarticle" => "wedi amddiffyno [[$1]]",
+"unprotectedarticle" => "wedi di-amddiffyno [[$1]]",
+
+# Undelete
+"undelete" => "Gwrthdroi tudalen wedi dileuo",
+"undeletepage" => "Gwyliwch ac adferiwch tudalennau wedi dileuo",
+"undeletepagetext" => "Mae'r tudalennau isod wedi cael eu dileuo ond mae nhw'n dal yn yr archif ac maen bosibl adferio nhw. Mae'r archif yn cael eu glanhau o dro i dro.",
+"undeletearticle" => "Adferiwch erthygl wedi dileu",
+"undeleterevisions" => "$1 fersiwnau yn yr archif",
+"undeletehistory" => "Os adferiwch y tudalen, fydd holl y fersiwnau yn gael eu adferio yn yr hanes. Os mae tudalen newydd wedi gael eu creu ers i'r tudalen bod yn dileu, fydd y fersiwnau adferol yn dangos yn yr hanes gynt ond ni fydd y fersiwn cyfoes yn gael eu allosodi.",
+"undeleterevision" => "wedi dileu fersiwn $1",
+"undeletebtn" => "Adferiwch!",
+"undeletedarticle" => "wedi adferio \"$1\"",
+
+
+# Contributions
+#
+"contributions"	=> "Cyfraniadau defnyddwr",
+"mycontris" => "Fy nghyfraniadau",
+"contribsub2" => "Dros $1 ($2)",
+"nocontribs" => "Dim wedi dod o hyd i newidiadau gyda criterion hyn.",
+"ucnote" => "Isod mae y <b>$1</b> newidiadau yn y <b>$2</b> dyddiau olaf am defnyddwr hwn.",
+"uclinks" => "Gwelwch y $1 newidiadau olaf; gwelwch y $2 dyddiau olaf.",
+"uctop"	=> " (top)" ,
+
+# What links here
+#
+"whatlinkshere"	=> "Beth sy'n cysylltu yma",
+"notargettitle" => "Dim targed",
+"notargettext" => "Dydych chi ddim wedi dewis tudalen targed neu defnyddwr.",
+"linklistsub"  => "(Rhestr cysylltiadau)",
+"linkshere" => "Mae'r tudalennau isod yn cysylltu yma:",
+"nolinkshere" => "Does dim tudalennau yn cysylltu yma.",
+"isredirect" => "tudalen ail-cyfeirnod",
+
+# Block/unblock IP
+#
+"blockip" => "Blociwch cyfeiriad IP",
+"blockiptext" => "Defnyddwch y ffurflen isod i blocio mynedfa ysgrifenol oddiwrth cyfeiriad IP cymharol.
+Ddylwch dim ond gwneud hwn i stopio fandaliaeth, yn dilyn a [[{{MediaWiki:policy-url}}|polisi {{SITENAME}}]].
+Llenwch rheswm am y bloc, isod (e.e. enwch y tudalennau a oedd wedi fandalo).",
+"ipaddress" => "Cyfeiriad IP",
+"ipbexpiry" => "Diwedd",
+"ipbreason" => "Achos",
+"ipbsubmit" => "Blociwch y cyfeiriad hwn",
+"badipaddress" => "Dydy'r cyfeiriad IP ddim yn ddilys.",
+"blockipsuccesssub" => "Bloc yn llwyddiannus",
+"blockipsuccesstext" => "Mae cyfeiriad IP \"$1\" wedi cael eu blocio.
+<br />Gwelwch [[{{ns:special}}:Ipblocklist|rhestr bloc IP]] i arolygu blociau.",
+"unblockip" => "Di-blociwch cyfeiriad IP",
+"unblockiptext"	=> "Defnyddwch y ffurflen isod i di-blocio mynedfa ysgrifenol i cyfeiriad IP sydd wedi cael eu blocio'n gynt.",
+"ipusubmit" => "Di-blociwch y cyfeiriad hwn",
+"ipblocklist" => "Rhestr cyfeiriadau IP wedi blocio",
+"blocklistline"	=> "$1, $2 wedi blocio $3 ($4)",
+"blocklink" => "bloc",
+"unblocklink" => "di-bloc",
+"contribslink" => "cyfraniadau",
+"autoblocker" => "Wedi cloi'n awtomatig am achos rydych chi'n rhannu cyfeiriad IP gyda \"$1\". Rheswm \"$2\".",
+"blocklogpage" => "Log_blociau",
+"blocklogentry"	=> 'wedi blocio "$1" efo amser diwedd o $2',
+"blocklogtext" => "Dyma log o pryd mae cyfeiriadau wedi cael eu blocio a datblocio. Dydy cyfeiriad
+a sydd wedi blocio'n awtomatig ddim yn cael eu ddangos yma. Gwelwch [[Special:Ipblocklist|rhestr block IP]] am
+y rhestr o blociau a gwaharddiadau sydd yn effeithiol rwan.",
+"unblocklogentry" => 'wedi datblocio "$1"',
+"range_block_disabled" => "Mae gallu sysop i creu dewis o blociau wedi anablo.",
+"ipb_expiry_invalid" => "Amser diwedd ddim yn dilys.",
+"ip_range_invalid" => "Dewis IP annilys.",
+
+# Move page
+#
+"movepage" => "Symud tudalen",
+"movepagetext" => "Fydd defnyddio'r ffurflen isod yn ail-enwi tudalen, symud eu hanes gyfan i'r enw newydd.
+Fydd yr hen teitl yn dod tudalen ail-cyfeiriad i'r teitl newydd.
+Ni fydd cysylltiadau i'r hen teitl yn newid; mae rhaid i chi gwirio mae cysylltau'n dal yn mynd i'r lle mae angen iddyn nhw mynd!
+
+Sylwch fydd y tudalen '''ddim''' yn symud os mae 'ne tudalen efo'r enw newydd yn barod ar y databas (sef os mae hi'n gwâg neu yn ail-cyfeiriad heb unrhyw hanes golygu). Mae'n posibl i chi ail-enwi tudalen yn ôl i lle oedd hi os ydych chi wedi gwneud camgymeriad, ac mae'n amhosibl i ysgrifennu dros tudalen sydd barod yn bodoli.
+
+<b>RHYBUDD!</b>
+Ellith hwn bod newid sydyn a llym i tudalen poblogol; byddwch yn siwr rydych chi'n deallt y canlyniadau cyn iddich chi mynd ymlaen gyda hwn.",
+"movepagetalktext" => "Fydd y tudalen sgwrs , os oes ne un, yn symud gyda tudalen hon '''ac eithrio:'''
+*rydych yn symud y tudalen wrth llefydd-enw,
+*mae tudalen sgwrs di-wâg yn barod efo'r enw newydd, neu
+*rydych chi'n di-ticio'r blwch isod.",
+"movearticle" => "Symud tudalen",
+"movenologin" => "Nid wedi mewngofnodi",
+"movenologintext" => "Rhaid i chi bod defnyddwr cofrestredig ac wedi [[{{ns:special}}:Userlogin|mewngofnodi]]
+to move a page.",
+"newtitle" => "i teitl newydd",
+"movepagebtn" => "Symud tudalen",
+"pagemovedsub"	=> "Symud yn llwyddiannus",
+"pagemovedtext" => "Mae tudalen \"[[$1]]\" wedi symud i \"[[$2]]\".",
+"articleexists" => "Mae tudalen gyda'r enw newydd yn bodoli'n barod, neu mae eich enw newydd ddim yn dilys.
+Dewiswch enw newydd os gwelwch yn dda.",
+"talkexists" => "Mae'r tudalen wedi symud yn llwyddiannus, ond roedd hi'n amhosibl symud y tudalen sgwrs am achos roedd ne un efo'r teitl newydd yn bodoli'n barod. Cysylltwch nhw eich hun, os gwelwch yn dda.",
+"movedto" => "symud i",
+"movetalk" => "Symud tudalen \"sgwrs\" hefyd, os oes un.",
+"talkpagemoved" => "Mae'r tudalen sgwrs hefyd wedi symud.",
+"talkpagenotmoved" => "Dydy'r tudalen sgwrs <strong>ddim</strong> wedi symud.",
+"1movedto2" => "$1 wedi symud i $2",
+
+# Export
+
+"export" => "Export pages",
+"exporttext" => "You can export the text and editing history of a particular
+page or set of pages wrapped in some XML; this can then be imported into another
+wiki running MediaWiki software, transformed, or just kept for your private
+amusement.",
+"exportcuronly"	=> "Include only the current revision, not the full history",
+
+# Namespace 8 related
+
+"allmessages" => "Holl_negeseuon",
+"allmessagestext" => "Dyma rhestr holl y negeseuon ar gael yn y lle-enw MediaWiki:",
+
+# Thumbnails
+
+"thumbnail-more" => "Helaethwch",
+
+#Math
+'mw_math_png' => "Rendrwch PNG o hyd",
+'mw_math_simple' => "HTML os yn syml iawn, PNG fel arall",
+'mw_math_html' => "HTML os bosibl, PNG fel arall",
+'mw_math_source' => "Gadewch fel TeX (am porwyr testun)",
+'mw_math_modern' => "Cymeradwedig am porwyr modern",
+'mw_math_mathml' => 'MathML',
+
+);
+
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesDa.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesDa.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesDa.php	(revision 1280)
@@ -0,0 +1,1394 @@
+<?php
+/** Danish (Dansk)
+  *
+  * @addtogroup Language
+ */
+
+$namespaceNames = array(
+	NS_MEDIA			=> 'Media',
+	NS_SPECIAL			=> 'Speciel',
+	NS_MAIN				=> '',
+	NS_TALK				=> 'Diskussion',
+	NS_USER				=> 'Bruger',
+	NS_USER_TALK		=> 'Brugerdiskussion',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK		=> '$1-diskussion',
+	NS_IMAGE			=> 'Billede',
+	NS_IMAGE_TALK		=> 'Billeddiskussion',
+	NS_MEDIAWIKI		=> 'MediaWiki',
+	NS_MEDIAWIKI_TALK	=> 'MediaWiki-diskussion',
+	NS_TEMPLATE  		=> 'Skabelon',
+	NS_TEMPLATE_TALK	=> 'Skabelondiskussion',
+	NS_HELP				=> 'Hjælp',
+	NS_HELP_TALK		=> 'Hjælp-diskussion',
+	NS_CATEGORY			=> 'Kategori',
+	NS_CATEGORY_TALK	=> 'Kategoridiskussion'
+
+);
+
+$skinNames = array(
+	'standard' => 'Klassisk',
+	'nostalgia' => 'Nostalgi',
+	'cologneblue' => 'Cologne-blå',
+);
+
+$datePreferences = false;
+$defaultDateFormat = 'dmy';
+$dateFormats = array(
+	'dmy time' => 'H:i',
+	'dmy date' => 'j. M Y',
+	'dmy both' => 'j. M Y "kl." H:i',
+);
+
+$bookstoreList = array(
+	"Bibliotek.dk" => "http://bibliotek.dk/vis.php?base=dfa&origin=kommando&field1=ccl&term1=is=$1&element=L&start=1&step=10",
+	"Bogguide.dk" => "http://www.bogguide.dk/find_boeger_bog.asp?ISBN=$1",
+	'inherit' => true,
+);
+
+$separatorTransformTable = array(',' => '.', '.' => ',' );
+$linkTrail = '/^([a-zæøå]+)(.*)$/sDu';
+
+#-------------------------------------------------------------------
+# Default messages
+#-------------------------------------------------------------------
+
+$messages = array(
+# User preference toggles
+"tog-underline" => "Understreg henvisninger",
+"tog-highlightbroken" => "Brug røde henvisninger til tomme sider",
+"tog-justify"	=> "Justér afsnit",
+"tog-hideminor" => "Skjul mindre ændringer i seneste ændringer listen",
+"tog-extendwatchlist" => "Udvidet liste med seneste ændringer",
+"tog-usenewrc" => "Udvidet seneste ændringer liste<br />(ikke for alle browsere)",
+"tog-numberheadings" => "Automatisk nummerering af overskrifter",
+"tog-showtoolbar" => "Vis værktøjslinje til redigering",
+"tog-editondblclick" => "Redigér sider med dobbeltklik (JavaScript)",
+"tog-editsection"=>"Redigér afsnit ved hjælp af [redigér]-henvisning",
+"tog-editsectiononrightclick"=>"Redigér afsnit ved at højreklikke<br /> på afsnittets titel (JavaScript)",
+"tog-showtoc"=>"Vis indholdsfortegnelse<br />(for artikler med mere end tre afsnit)",
+"tog-rememberpassword" => "Husk adgangskode til næste besøg",
+"tog-editwidth" => "Redigeringsboksen har fuld bredde",
+"tog-watchdefault" => "Overvåg nye og ændrede artikler",
+"tog-minordefault" => "Markér som standard alle ændringer som mindre",
+"tog-previewontop" => "Vis forhåndsvisning før redigeringsboksen",
+'tog-previewonfirst' => 'Vis forhåndsvisning når du starter med at redigere',
+"tog-nocache" => "Husk ikke siderne til næste besøg",
+'tog-enotifwatchlistpages' 	=> 'Send mig en e-mail med sideændringer (bemærk: eksisterende beskedmarkeringer skal fjernes manuelt i overvågningslisten)',
+'tog-enotifusertalkpages' 	=> 'Send mig en e-mail når min brugerdiskussionsside ændres (bemærk: eksisterende beskedmarkeringer skal fjernes manuelt i overvågningslisten)',
+'tog-enotifminoredits' 		=> 'Send mig også en e-mail for mindre ændringer af sider (der normalt ikke udløser mails med besked om ændringer)',
+'tog-enotifrevealaddr' 		=> 'Offentliggør min e-mail-adresse i mails med besked om ændringer (når jeg ændrer en side kan brugere, der overvåger siden, hurtigt komme i kontakt med mig)',
+'tog-shownumberswatching' 	=> 'Vis antal brugere, der overvåger (i seneste ændringer-visning, overvågningslisten og i bunden af artikelsider)',
+'tog-fancysig' => 'Signaturer uden automatisk link',
+'tog-externaleditor' => 'Brug ekstern editor automatisk',
+'tog-externaldiff' => 'Brug ekstern forskelsvisning automatisk',
+
+# dates
+'sunday' => 'søndag',
+'monday' => 'mandag',
+'tuesday' => 'tirsdag',
+'wednesday' => 'onsdag',
+'thursday' => 'torsdag',
+'friday' => 'fredag',
+'saturday' => 'lørdag',
+'january' => 'januar',
+'february' => 'februar',
+'march' => 'marts',
+'april' => 'april',
+'may_long' => 'maj',
+'june' => 'juni',
+'july' => 'juli',
+'august' => 'august',
+'september' => 'september',
+'october' => 'oktober',
+'november' => 'november',
+'december' => 'december',
+'jan' => 'jan',
+'feb' => 'feb',
+'mar' => 'mar',
+'apr' => 'apr',
+'may' => 'maj',
+'jun' => 'jun',
+'jul' => 'jul',
+'aug' => 'aug',
+'sep' => 'sep',
+'oct' => 'okt',
+'nov' => 'nov',
+'dec' => 'dec',
+
+# Bits of text used by many pages:
+#
+"categories" => "Kategorier",
+"pagecategories" => "Kategorier",
+"category_header" => 'Artikler i kategorien "$1"',
+"subcategories" => "Underkategorier",
+
+"mainpage"		=> "Forside",
+"mainpagetext"	=> "MediaWiki er nu installeret.",
+"mainpagedocfooter" => "Se vores engelsksprogede [http://meta.wikimedia.org/wiki/MediaWiki_i18n dokumentation om tilpasning af brugergrænsefladen]
+og [http://meta.wikimedia.org/wiki/MediaWiki_User%27s_Guide brugervejledningen] for oplysninger om opsætning og anvendelse.",
+
+'portal'		=> 'Forside for skribenter',
+'portal-url'		=> '{{ns:4}}:Forside',
+"about"			=> "Om",
+"aboutsite"      => "Om {{SITENAME}}",
+"aboutpage"		=> "{{ns:4}}:Om",
+'article' => 'Artikel',
+"help"			=> "Hjælp",
+"helppage"		=> "{{ns:4}}:Hjælp",
+"bugreports"	=> "Fejlrapporter",
+"bugreportspage" => "{{ns:4}}:Fejlrapporter",
+"sitesupport"   => "Donation",
+'sitesupport-url' => '{{ns:4}}:Donation',
+"faq"			=> "OSS",
+"faqpage"		=> "{{ns:4}}:OSS",
+"edithelp"		=> "Hjælp til redigering",
+"newwindow"		=> "(åbner i et nyt vindue)",
+"edithelppage"	=> "{{ns:4}}:Hvordan redigerer jeg en side",
+"cancel"		=> "Afbryd",
+"qbfind"		=> "Find",
+"qbbrowse"		=> "Gennemse",
+"qbedit"		=> "Redigér",
+"qbpageoptions" => "Indstillinger for side",
+"qbpageinfo"	=> "Information om side",
+"qbmyoptions"	=> "Mine indstillinger",
+'qbspecialpages'	=> 'Specielle sider',
+'moredotdotdot'	=> 'Mere...',
+"mypage"		=> "Min side",
+"mytalk"		=> "Min diskussion",
+'anontalk'		=> 'Diskussionsside for denne IP-adresse',
+'navigation' => 'Navigation',
+
+# Metadata in edit box
+'metadata' => '<b>Metadata</b> (for en foklaring se <a href="$1">her</a>)',
+
+"currentevents" => "Aktuelle begivenheder",
+'currentevents-url' => 'Aktuelle begivenheder',
+
+'disclaimers' => 'Forbehold',
+"disclaimerpage" => "{{ns:4}}:Generelle forbehold",
+"errorpagetitle" => "Fejl",
+"returnto"		=> "Tilbage til $1.",
+"whatlinkshere"	=> "Hvad henviser hertil",
+"help"			=> "Hjælp",
+"search"		=> "Søg",
+"searchbutton"	=> "Søg",
+"go"		=> "Gå til",
+'searcharticle'		=> "Gå til",
+"history"		=> "Historik",
+'history_short' => 'Historik',
+'info_short'	=> 'Information',
+"printableversion" => "Udskriftsvenlig udgave",
+'edit' => 'Redigér',
+"editthispage"	=> "Redigér side",
+'delete' => 'Slet',
+"deletethispage" => "Slet side",
+"undelete_short" => "Fortryd sletning af $1 versioner",
+'protect' => 'Beskyt',
+"protectthispage" => "Beskyt side",
+'unprotect' => 'Fjern beskyttelse',
+"unprotectthispage" => "Fjern beskyttelse af side",
+"newpage" => "Ny side",
+"talkpage"		=> "Diskussionssiden",
+'specialpage' => 'Speciel side',
+'personaltools' => 'Personlige værktøjer',
+"postcomment"   => "Tilføj en kommentar",
+"articlepage"	=> "Se artiklen",
+'talk' => 'Diskussion',
+'toolbox' => 'Værktøjer',
+"userpage" => "Se brugersiden",
+"projectpage" => "Se metasiden",
+"imagepage" => 	"Se billedsiden",
+"viewtalkpage" => "Se diskussion",
+"otherlanguages" => "Andre sprog",
+"redirectedfrom" => "(Omdirigeret fra $1)",
+"lastmodifiedat"	=> "Denne side blev senest ændret den $2, $1.",
+"viewcount"		=> "Siden er vist i alt $1 gange.",
+'copyright'	=> 'Indholdet&nbsp;er&nbsp;udgivet&nbsp;under&nbsp;$1.',
+"protectedpage" => "Beskyttet side",
+'badaccess'     => 'Permission error',
+
+'nbytes'		=> '$1 bytes',
+"go"			=> "Gå til",
+'searcharticle'			=> "Gå til",
+"ok"			=> "OK",
+"retrievedfrom" => "Hentet fra \"$1\"",
+"newmessageslink" => "nye beskeder",
+"editsection"=>"redigér",
+"editold"=>"redigér",
+"toc" => "Indholdsfortegnelse",
+"showtoc" => "vis",
+"hidetoc" => "skjul",
+"thisisdeleted" => "Se eller gendan $1?",
+"restorelink" => "$1 slettede ændringer",
+'feedlinks' => 'Feed:',
+'tagline' => 'Fra {{SITENAME}}',
+
+# Short words for each namespace, by default used in the 'article' tab in monobook
+'nstab-main' => 'Artikel',
+'nstab-user' => 'Brugerside',
+'nstab-media' => 'Medie',
+'nstab-special' => 'Speciel',
+'nstab-project' => 'Om',
+'nstab-image' => 'Billede',
+'nstab-mediawiki' => 'Besked',
+'nstab-template' => 'Skabelon',
+'nstab-help' => 'Hjælp',
+'nstab-category' => 'Kategori',
+
+# Main script and global functions
+#
+"nosuchaction"	=> "Funktionen findes ikke",
+"nosuchactiontext" => "Funktion angivet i URL'en kan ikke
+genkendes af MediaWiki-softwaren",
+"nosuchspecialpage" => "En sådan specialside findes ikke",
+"nospecialpagetext" => "Du har bedt om en specialside, der ikke kan
+genkendes af MediaWiki-softwaren.",
+
+# General errors
+#
+"error"			=> "Fejl",
+"databaseerror" => "Databasefejl",
+"dberrortext"	=> "Der er opstået en syntaksfejl i en databaseforespørgsel.
+Dette kan være på grund af en ugyldig forespørgsel (se $5),
+eller det kan betyde en fejl i softwaren.
+Den seneste forsøgte databaseforespørgsel var:
+<blockquote><tt>$1</tt></blockquote>
+fra funktionen \"<tt>$2</tt>\".
+MySQL returnerede fejlen \"<tt>$3: $4</tt>\".",
+"dberrortextcl" => "Der er opstået en syntaksfejl i en databaseforespørgsel.
+Den seneste forsøgte databaseforespørgsel var:
+\"$1\"
+fra funktionen \"$2\".
+MySQL returnerede fejlen \"$3: $4\".",
+'noconnect'		=> 'Der er problemer med {{SITENAME}}s database, vi kan desværre ikke komme i kontakt med den for øjeblikket. Prøv igen senere. <br />
+$1',
+"nodb"			=> "Kunne ikke vælge databasen $1",
+"cachederror"	=> "Det følgende er en gemt kopi af den ønskede side, og er måske ikke helt opdateret.",
+"readonly"		=> "Databasen er skrivebeskyttet",
+"enterlockreason" => "Skriv en begrundelse for skrivebeskyttelsen, også indeholdende et estimat
+på hvornår skrivebeskyttelsen vil blive ophævet igen",
+"readonlytext"	=> "{{SITENAME}}databasen er for øjeblikket skrivebeskyttet,
+hvilket forhindrer oprettelse af nye sider og andre ændringer,
+sandsynligvis på grund af rutinemæssig databasevedligeholdelse,
+hvorefter den vil returnere til normaldrift. Administratoren der
+skrivebeskyttede databasen har denne forklaring:
+<p>$1",
+"missingarticle" => "Databasen fandt ikke teksten på en side,
+som den skulle have fundet, med navnet \"$1\".
+
+<p>Dette er ikke en databasefejl, men sandsynligvis en fejl i softwaren.
+
+<p>Send venligst en rapport om dette til en administrator,
+hvor du også nævner URL'en.",
+'readonly_lag' => "Databasen er automatisk blevet låst mens slave database serverne synkronisere med master databasen",
+"internalerror" => "Intern fejl",
+"filecopyerror" => "Kunne ikke kopiere filen \"$1\" til \"$2\".",
+"filerenameerror" => "Kunne ikke omdøbe filen \"$1\" til \"$2\".",
+"filedeleteerror" => "Kunne ikke slette filen \"$1\".",
+"filenotfound"	=> "Kunne ikke finde filen \"$1\".",
+"unexpected"	=> "Uventet værdi: \"$1\"=\"$2\".",
+"formerror"		=> "Fejl: Kunne ikke afsende formular",
+"badarticleerror" => "Denne funktion kan ikke udføres på denne side.",
+"cannotdelete"	=> "Kunne ikke slette siden eller filen der blev angivet.",
+"badtitle"		=> "Forkert titel",
+"badtitletext"	=> "Den ønskede sides titel var ikke tilladt, tom eller siden
+er forkert henvist fra en {{SITENAME}} på et andet sprog.",
+"perfdisabled" => "Denne funktion er desværre midlertidigt afbrudt,
+fordi den belaster databasen meget hårdt og i en sådan grad,
+at siden bliver meget langsom. Funktionen bliver forhåbentlig
+omskrevet i den nærmeste fremtid (måske af dig, det er jo open source!).",
+"perfdisabledsub" => "Her er en gemt kopi fra $1:",
+'perfcached' => 'Følgende data er gemt i cachen, det er muligvis ikke helt opdateret:',
+'wrong_wfQuery_params' => "Ugyldig parameter til wfQuery()<br />
+Funktion: $1<br />
+Forespørgsel: $2",
+'viewsource' => 'Vis kilden',
+'protectedtext' => "Denne side er skrivebeskyttet for at forhindre ændringer;
+der kan være flere årsager til at det er sket,
+se [[Special:Log/protect|listen over beskyttede sider]].
+
+Du kan sé og kopiere sidens indhold:",
+'sqlhidden' => '(SQL forespørgsel gemt)',
+
+# Login and logout pages
+#
+"logouttitle"	=> "Bruger-log-af",
+"logouttext"	=> "Du er nu logget af.
+Du kan fortsætte med at bruge {{SITENAME}} anonymt, eller du kan logge på
+igen som den samme eller en anden bruger.",
+
+"welcomecreation" => "== Velkommen, $1! ==
+
+Din konto er blevet oprettet. Glem ikke at personliggøre dine {{SITENAME}}-indstillinger.",
+
+"loginpagetitle" => "Bruger log på",
+"yourname"		=> "Dit brugernavn",
+"yourpassword"	=> "Din adgangskode",
+"yourpasswordagain" => "Gentag adgangskode",
+"remembermypassword" => "Husk min adgangskode til næste gang.",
+'yourdomainname'       => 'Your domain',
+'externaldberror'      => 'There was either an external authentication database error or you are not allowed to update your external account.',
+"loginproblem"	=> "<b>Der har været et problem med at få dig logget på.</b><br />Prøv igen!",
+"alreadyloggedin" => "<strong>Bruger $1, du er allerede logget på!</strong><br />",
+
+"login"			=> "Log på",
+'loginprompt'   => "Du skal have cookies slået til for at kunne logge på {{SITENAME}}.",
+"userlogin"		=> "Opret en konto eller log på",
+"logout"		=> "Log af",
+"userlogout"	=> "Log af",
+"notloggedin"	=> "Ikke logget på",
+"createaccount"	=> "Opret en ny konto",
+'createaccountmail'	=> 'via e-mail',
+"badretype"		=> "De indtastede adgangskoder er ikke ens.",
+"userexists"	=> "Det brugernavn du har valgt er allerede i brug. Vælg
+venligst et andet brugernavn.",
+"youremail"		=> "Din e-mail-adresse *",
+'yourrealname'		=> 'Dit rigtige navn*',
+'yourlanguage'	=> 'Grænsefladesprog',
+'yourvariant'  => 'Sprogvariant',
+"yournick"		=> "Dit kaldenavn (til signaturer)",
+'prefs-help-email' 	=> '** <strong>E-mail-adresse</strong> (valgfrit): Giver andre mulighed for at kontakte dig, uden du behøver at afsløre din e-mail-adresse. Det kan også bruges til at fremsende en ny adgangskode til dig, hvis du glemmer den du har.',
+'prefs-help-email-enotif' => 'Denne e-mail-adresse bruges også til at sende beskeder til dig via e-mail, hvis du har aktiveret funktionerne.',
+'prefs-help-realname' 	=> '* <strong>Dit rigtige navn</strong> (valgfrit): Hvis du vælger at oplyse dit navn vil dette blive brugt til at tilskrive dig dit arbejde.',
+"loginerror"	=> "Fejl med at logge på",
+'nocookiesnew'	=> "Din brugerkonto er nu oprettet, men du er ikke logget på. {{SITENAME}} bruger cookies til at logge brugere på. Du har slået cookies fra. Vær venlig at slå cookies til, og derefter kan du logge på med dit nye brugernavn og kodeord.",
+"nocookieslogin"	=> "{{SITENAME}} bruger cookies til at logge brugere på. Du har slået cookies fra. Slå dem venligst til og prøv igen.",
+"noname"		=> "Du har ikke angivet et gyldigt brugernavn.",
+"loginsuccesstitle" => "Logget på med succes",
+"loginsuccess"	=> "Du er nu logget på {{SITENAME}} som \"$1\".",
+"nosuchuser"	=> "Der er ingen bruger med navnet \"$1\".
+Kontrollér stavemåden igen, eller brug formularen herunder til at oprette en ny brugerkonto.",
+'nosuchusershort'	=> "Der er ingen bruger ved navn \"$1\". Tjek din stavning.",
+"wrongpassword"	=> "Den indtastede adgangskode var forkert. Prøv igen.",
+"mailmypassword" => "Send en ny adgangskode til min e-mail-adresse",
+"passwordremindertitle" => "Ny adgangskode fra {{SITENAME}}",
+"passwordremindertext" => "Nogen (sandsynligvis dig, fra IP-adressen $1)
+har bedt om at vi sender dig en ny adgangskode til at logge på {{SITENAME}}.
+Den nye adgangskode for bruger \"$2\" er nu \"$3\".
+Du bør logge på nu og ændre din adgangskode.",
+"noemail"		=> "Der er ikke oplyst en e-mail-adresse for bruger \"$1\".",
+"passwordsent"	=> "En ny adgangskode er sendt til e-mail-adressen,
+som er registreret for \"$1\".
+Du bør logge på og ændre din adgangskode straks efter du har modtaget e-mail'en.",
+'mailerror' => "Fejl ved afsendelse af e-mail: $1",
+'acct_creation_throttle_hit' => 'Du har allerede oprettet $1 kontoer. Du kan ikke oprette flere.',
+'emailauthenticated' 	=> 'Din e-mail-adresse blev bekræftet på $1.',
+'emailnotauthenticated'	=> 'Din e-mail-adresse er endnu ikke bekræftet og de avancerede e-mail-funktioner er slået fra indtil bekræftelse har fundet sted (d.u.a.).
+Log ind med den midlertidige adgangskode, der er blevet sendt til dig, for at bekræfte, eller bestil et nyt på loginsiden.',
+'invalidemailaddress'	=> 'E-mail-adressen kan ikke accepteres da den tilsyneladende har et ugyldigt format. Skriv venligst en e-mail-adresse med et korrekt format eller tøm feltet.',
+
+# Edit page toolbar
+'bold_sample'=>'Fed tekst',
+'bold_tip'=>'Fed tekst',
+'italic_sample'=>'Kursiv tekst',
+'italic_tip'=>'Kursiv tekst',
+'link_sample'=>'Henvisning',
+'link_tip'=>'Intern henvisning',
+'extlink_sample'=>'http://www.eksempel.dk Titel på henvisning',
+'extlink_tip'=>'Ekstern henvisning (husk http:// præfiks)',
+'headline_sample'=>'Tekst til overskrift',
+'headline_tip'=>'Type 2 overskrift',
+'math_sample'=>'Indsæt formel her (LaTeX)',
+'math_tip'=>'Matematisk formel (LaTeX)',
+'nowiki_sample'=>'Indsæt tekst her som ikke skal wikiformateres',
+'nowiki_tip'=>'Ignorer wikiformatering',
+'image_sample'=>'Eksempel.jpg',
+'image_tip'=>'Indlejret billede',
+'media_sample'=>'Eksempel.mp3',
+'media_tip'=>'Henvisning til multimediefil',
+'sig_tip'=>'Din signatur med tidsstempel',
+'hr_tip'=>'Horisontal linje (brug den sparsomt)',
+
+# Edit pages
+#
+# problem with link: {{fullurl:{{ns:4}}}}:Beskrivelse
+'summary'		=> '<a href="{{fullurl:{{ns:4}}}}:Beskrivelse" title="Giv venligst en kort beskrivelse af din ændring">Beskrivelse</a>',
+"subject"		=> "Emne/overskrift",
+"minoredit"		=> "Dette er en mindre ændring.",
+"watchthis"		=> "Overvåg denne artikel",
+"savearticle"	=> "Gem side",
+"preview"		=> "Forhåndsvisning",
+"showpreview"	=> "Forhåndsvisning",
+'showdiff'	=> 'Vis ændringer',
+"blockedtitle"	=> "Brugeren er blokeret",
+"blockedtext"	=> "Dit brugernavn eller din IP-adresse er blevet blokeret af
+$1. Begrundelsen er denne:<br />$2<p>Du kan kontakte $1
+eller en af de andre [[{{MediaWiki:grouppage-sysop}}|administratorer]] for at diskutere blokeringen.
+
+Din IP-adresse er $3.
+Sørg venligst for at medtage denne IP-adresse i alle henvendelser til en administrator.",
+'whitelistedittitle' => 'Log på for at redigere',
+'whitelistedittext' => 'Du skal [[Special:Userlogin|logge på]] for at kunne rette artikler.',
+'whitelistreadtitle' => 'Log på for at læse',
+'whitelistreadtext' => 'Du skal [[Special:Userlogin|logge på]] for at læse artikler.',
+'whitelistacctitle' => 'Du har ikke lov til at oprette en konto',
+'whitelistacctext' => 'For at få lov til at lave en konto på denne wiki skal du [[Special:Userlogin|logge på]] og have passende rettigheder.',
+'loginreqtitle'	=> 'Log på nødvendigt',
+'loginreqlink' => 'logge på',
+'loginreqpagetext'	=> 'Du skal $1 for at se andre sider.',
+'accmailtitle' => 'Adgangskode sendt.',
+'accmailtext' => "Adgangskoden for '$1' er sendt til $2.",
+"newarticle"	=> "(Ny)",
+# problem with link: [[{{ns:4}}:Sandkassen|sandkassen]]
+"newarticletext" => "<div style=\"font-size:small;color:\#003333;border-width:1px;border-style:solid;border-color:\#aaaaaa;padding:3px\">'''{{SITENAME}} har endnu ikke nogen {{NAMESPACE}}-side ved navn {{PAGENAME}}.'''<br /> Du kan begynde en side ved at skrive i boksen herunder. (se [[{{MediaWiki:helppage}}|hjælpen]] for yderligere oplysninger).<br /> Eller du kan [[{{ns:-1}}:Search/{{PAGENAME}}|søge efter {{PAGENAME}} i {{SITENAME}}]].<br /> Hvis det ikke var din mening, så tryk på '''Tilbage'''- eller '''Back'''-knappen. '''Dit bidrag til {{SITENAME}} vil fremkomme omgående''', så hvis du bare vil teste tingene, så brug venligst [[{{ns:4}}:Sandkassen|sandkassen]]!</div>",
+"anontalkpagetext" => "---- ''Dette er en diskussionsside for en anonym bruger, der ikke har oprettet en konto endnu eller ikke bruger den. Vi er derfor nødt til at bruge den nummeriske IP-adresse til at identificere ham eller hende. En IP-adresse kan være delt mellem flere brugere. Hvis du er en anonym bruger og synes, at du har fået irrelevante kommentarer på sådan en side, så vær venlig at oprette en brugerkonto og [[Special:Userlogin|logge på]], så vi undgår fremtidige forvekslinger med andre anonyme brugere.''",
+# problem with link: [[Wiktionary:{{NAMESPACE}}:{{PAGENAME}}|wikiordbogen]]
+# problem with link: [[:no:{{PAGENAME}}|norsk]]
+# problem with link: [[:nn:{{PAGENAME}}|nynorsk]]
+# problem with link: [[:sv:{{PAGENAME}}|svensk]]
+"noarticletext" => "<div style=\"border: 1px solid \#ccc; padding: 7px; background-color: \#fff; color: \#000\">'''{{SITENAME}} har ikke nogen side med præcis dette navn.''' * Du kan se om {{PAGENAME}} findes i [[Wiktionary:{{NAMESPACE}}:{{PAGENAME}}|wikiordbogen]] eller på '''[[:no:{{PAGENAME}}|norsk]]''', '''[[:nn:{{PAGENAME}}|nynorsk]]''', eller '''[[:sv:{{PAGENAME}}|svensk]]'''. * Du kan '''[{{fullurl:{{NAMESPACE}}:{{PAGENAME}}|action=edit}} starte siden {{PAGENAME}}]''' * Eller [[{{ns:special}}:Search/{{PAGENAME}}|søge efter {{PAGENAME}}]] i andre artikler ---- * Hvis du har oprettet denne artikel indenfor de sidste få minutter, så kan de skyldes at der er lidt forsinkelse i opdateringen af {{SITENAME}}s cache. Vent venligst og tjek igen senere om artiklen dukker op, inden du forsøger at oprette artiklen igen. </div>",
+'clearyourcache' => "'''Bemærk''', efter at have gemt, er du nødt til at tømme din browsers cache for at kunne se ændringerne. '''Mozilla / Firefox / Safari''': hold ''shifttasten'' nede og klik på ''reload'' eller tryk på ''control-shift-r'' (Mac: ''cmd-shift-r''); '''Internet Explorer''': hold ''controltasten'' nede og klik på ''refresh'' eller tryk på ''control-F5''; '''Konqueror''': klik på ''reload'' eller tryk på ''F5''",
+'usercssjsyoucanpreview' => "<strong>Tip:</strong> Brug knappen 'forhåndsvisning' til at teste dit nye css/js før du gemmer.",
+'usercsspreview' => "'''Husk at du kun tester/forhåndsviser dit eget css, den er ikke gemt endnu!'''",
+'userjspreview' => "'''Husk at du kun tester/forhåndsviser dit eget javascript, det er ikke gemt endnu!'''",
+"updated"		=> "(Opdateret)",
+'note'			=> '<strong>Bemærk:</strong>',
+"previewnote"	=> "Husk at dette er kun en forhåndsvisning, siden er ikke
+gemt endnu!",
+"previewconflict" => "Denne forhåndsvisning er resultatet af den
+redigérbare tekst ovenfor,
+sådan vil det komme til at se ud hvis du vælger at gemme teksten.",
+"editing"		=> "Redigerer $1",
+'editinguser'		=> "Redigerer $1",
+"editingsection"	=> "Redigerer $1 (afsnit)",
+"editingcomment"	=> "Redigerer $1 (kommentar)",
+"editconflict"	=> "Redigeringskonflikt: $1",
+"explainconflict" => "Nogen har ændret denne side, efter du
+startede på at redigere den.
+Den øverste tekstboks indeholder den nuværende tekst.
+Dine ændringer er vist i den nederste tekstboks.
+Du er nødt til at sammenflette dine ændringer med den eksisterende tekst.
+<b>Kun</b> teksten i den øverste tekstboks vil blive gemt når du
+trykker \"Gem side\".<br />",
+"yourtext"		=> "Din tekst",
+"storedversion" => "Den gemte version",
+'nonunicodebrowser' => "<strong>Advarsel: Din browser er ikke unicode-kompatibel, skift eller opdater din browser før du redigerer en artikel.</strong>",
+"editingold"	=> "<strong>ADVARSEL: Du redigerer en gammel version
+af denne side.
+Hvis du gemmer den, vil alle ændringer foretaget siden denne revision blive
+overskrevet.</strong>",
+"yourdiff"		=> "Forskelle",
+/*"copyrightwarning" => "*Bemærk at alle bidrag til {{SITENAME}} er at betragte som udgivet under GNU Free Documentation License (se $1 for flere oplysninger). *Hvis du ikke ønsker at din tekst skal udsættes for nådesløse redigeringer og at den kan blive kopieret efter forgodtbefindende, så skal du ikke placere den her. *Du lover os også, at du selv har forfattet teksten, kopieret den fra en public domain-kilde eller tilsvarende fri kilde. <strong><big>LÆG ALDRIG MATERIALE HER SOM ER BESKYTTET AF ANDRES OPHAVSRET UDEN DERES TILLADELSE!</big></strong>",*/
+"longpagewarning" => "<strong>ADVARSEL: Denne side er $1 kilobyte stor; nogle browsere kan have problemer med at redigere sider der nærmer sig eller er større end 32 Kb. Overvej om siden kan opdeles i mindre dele.</strong>",
+"readonlywarning" => "<strong>ADVARSEL: Databasen er låst på grund af vedligeholdelse,
+så du kan ikke gemme dine ændringer lige nu. Det kan godt være en god ide at
+kopiere din tekst til en tekstfil, så du kan gemme den til senere.</strong>",
+# problem with link: [[Project:Politik_for_beskyttede_sider|politiken for beskyttede sider]]
+"protectedpagewarning" => "<strong>ADVARSEL: Denne side er låst, så kun administratorer
+kan redigere den. Sørg for at du følger
+[[Project:Politik_for_beskyttede_sider|politiken for beskyttede sider]].</strong>",
+'templatesused'	=> 'Skabeloner der er brugt på denne side:',
+
+# History pages
+#
+"revhistory"	=> "Versionshistorik",
+"nohistory"		=> "Der er ingen versionshistorik for denne side.",
+"revnotfound"	=> "Versionen er ikke fundet",
+"revnotfoundtext" => "Den gamle version af den side du spurgte efter kan
+ikke findes. Kontrollér den URL du brugte til at få adgang til denne side.",
+"loadhist"		=> "Indlæser sidens historik",
+"currentrev"	=> "Nuværende version",
+"revisionasof"	=> "Versionen fra $1",
+'previousrevision'	=> '←Ældre version',
+'nextrevision'		=> 'Nyere version→',
+'currentrevisionlink'   => 'se nuværende version',
+"cur"			=> "nuværende",
+"next"			=> "næste",
+"last"			=> "forrige",
+"orig"			=> "originale",
+"histlegend"	=> "Forklaring: (nuværende) = forskel til den nuværende
+version, (forrige) = forskel til den forrige version, M = mindre ændring",
+'deletedrev' => '[slettet]',
+
+# Diffs
+#
+"difference"	=> "(Forskelle mellem versioner)",
+"loadingrev"	=> "indlæser version for at se forskelle",
+"lineno"		=> "Linje $1:",
+"editcurrent"	=> "Redigér den nuværende version af denne side",
+'selectnewerversionfordiff' => 'Vælg en nyere version til sammenligning',
+'selectolderversionfordiff' => 'Vælg en ældre version til sammenligning',
+'compareselectedversions' => 'Sammenlign valgte versioner',
+
+# Search results
+#
+"searchresults" => "Søgeresultater",
+"searchresulttext" => "For mere information om søgning på {{SITENAME}}, se [[{{MediaWiki:helppage}}|{{int:help}}]].",
+"badquery"		=> "Forkert udformet forespørgsel",
+"badquerytext"	=> "Vi kunne ikke udføre din forespørgsel.
+Det er sandsynligvis fordi du har forsøgt at søge efter et ord med
+færre end tre bogstaver, hvilket ikke understøttes endnu.
+Det kan også være du har skrevet forkert, for
+eksempel \"fisk og og skaldyr\".
+Prøv en anden forespørgsel.",
+"matchtotals"	=> "Forespørgslen \"$1\" opfyldte $2 artikeltitler
+og teksten i $3 artikler.",
+# problem with link: [[{{ns:4}}:Efterspurgte_artikler|efterspørge den]]
+"noexactmatch" => "{{SITENAME}} har ingen artikel med dette navn. Du kan [[:$1|oprette en artikel med dette navn]] eller [[{{ns:4}}:Efterspurgte_artikler|efterspørge den]]. For at undgå flere artikler om samme emne, bedes du inden oprettelsen søge efter artiklen under alternative navne og stavemåder.",
+"titlematches"	=> "Artikeltitler der opfyldte forespørgslen",
+"notitlematches" => "Ingen artikeltitler opfyldte forespørgslen",
+"textmatches"	=> "Artikeltekster der opfyldte forespørgslen",
+"notextmatches"	=> "Ingen artikeltekster opfyldte forespørgslen",
+"prevn"			=> "forrige $1",
+"nextn"			=> "næste $1",
+"viewprevnext"	=> "Vis ($1) ($2) ($3).",
+"showingresults" => "Nedenfor vises <b>$1</b> resultater startende med
+nummer <b>$2</b>.",
+"showingresultsnum" => "Herunder vises <b>$3</b> resultater startende med nummer <b>$2</b>.",
+"nonefound"		=> "<strong>Bemærk</strong>: Søgning uden resultat skyldes at man søger efter almindelige ord som \"har\" og \"fra\", der ikke er indekseret, eller at man har angivet mere end ét søgeord (da kun sider indeholdende alle søgeordene vil blive fundet).",
+"powersearch" => "Søg",
+"powersearchtext" => "
+Søg i navnerum:<br />
+$1<br />
+$2 List omdirigeringer &nbsp; Søg efter $3 $9",
+"searchdisabled" => "<p>Beklager! Fuldtekstsøgningen er midlertidigt afbrudt på grund af for stor belastning på serverne. I mellemtidem kan du anvende Google- eller Yahoo!-søgefelterne herunder. Bemærk at deres kopier af {{SITENAME}}s indhold kan være forældet.</p>",
+"blanknamespace" => "(Artikler)",
+
+# Preferences page
+#
+"preferences"	=> "Indstillinger",
+"prefsnologin" => "Ikke logget på",
+"prefsnologintext"	=> "Du skal være [[Special:Userlogin|logget på]]
+for at ændre brugerindstillinger.",
+"prefsreset"	=> "Indstillingerne er blevet gendannet fra lageret.",
+"qbsettings"	=> "Hurtigmenu",
+'qbsettings-none'	=> 'Ingen',
+'qbsettings-fixedleft'	=> 'Fast venstre',
+'qbsettings-fixedright'	=> 'Fast højre',
+'qbsettings-floatingleft'	=> 'Flydende venstre',
+'qbsettings-floatingright'	=> 'Flydende højre',
+"changepassword" => "Skift adgangskode",
+"skin"			=> "Udseende",
+"math"			=> "Matematiske formler",
+"dateformat"	=> "Datoformat",
+"math_failure"		=> "Fejl i matematikken",
+"math_unknown_error"	=> "ukendt fejl",
+"math_unknown_function"	=> "ukendt funktion",
+"math_lexing_error"	=> "lexerfejl",
+"math_syntax_error"	=> "syntaksfejl",
+'math_image_error'	=> 'PNG-konvertering mislykkedes; undersøg om latex, dvips, gs og convert er installeret korrekt',
+'math_bad_tmpdir'	=> 'Kan ikke skrive til eller oprette temp-mappe til math',
+'math_bad_output'	=> 'Kan ikke skrive til eller oprette uddata-mappe til math',
+'math_notexvc'	=> 'Manglende eksekvérbar texvc; se math/README for opsætningsoplysninger.',
+'prefs-personal' => 'Brugerdata',
+'prefs-rc' => 'Seneste ændringer og artikelstumper',
+'prefs-misc' => 'Forskelligt',
+'prefs-watchlist-edits' => 'Antal redigeringer der vises i udvidet overvågningsliste:',
+"saveprefs"		=> "Gem indstillinger",
+"resetprefs"	=> "Gendan indstillinger",
+"oldpassword"	=> "Gammel adgangskode",
+"newpassword"	=> "Ny adgangskode",
+"retypenew"		=> "Gentag ny adgangskode",
+"textboxsize"	=> "Redigering",
+"rows"			=> "Rækker",
+"columns"		=> "Kolonner",
+"searchresultshead" => "Søgeresultater",
+"resultsperpage" => "Resultater pr. side",
+"contextlines"	=> "Linjer pr. resultat",
+"contextchars"	=> "Tegn pr. linje i resultatet",
+"stubthreshold" => "Grænse for visning af artikelstumper",
+"recentchangescount" => "Antallet af titler på siden \"seneste ændringer\"",
+"savedprefs"	=> "Dine indstillinger er blevet gemt.",
+'timezonelegend' => 'Tidszone',
+"timezonetext"	=> "Indtast antal timer din lokale tid er forskellig
+fra serverens tid (UTC). Der bliver automatisk tilpasset til dansk tid,
+ellers skulle man for eksempel for dansk vintertid, indtaste \"1\"
+(og \"2\" når vi er på sommertid).",
+"localtime"	=> "Lokaltid",
+"timezoneoffset" => "Forskel",
+"servertime"	=> "Serverens tid er nu",
+"guesstimezone" => "Hent tidszone fra browseren",
+"defaultns"		=> "Søg som standard i disse navnerum:",
+'default'		=> 'standard',
+'files'			=> 'Filer',
+
+# User levels special page
+#
+
+# switching pan
+
+'userrights-lookup-user' => 'Administrér brugergrupper',
+'userrights-user-editname' => 'Skriv et brugernavn:',
+'editusergroup' => 'Redigér brugergrupper',
+
+# user groups editing
+#
+'userrights-editusergroup' => 'Redigér brugergrupper',
+'saveusergroups' => 'Gem brugergrupper',
+'userrights-groupsmember' => 'Medlem af:',
+'userrights-groupsavailable' => 'Tilgængelige grupper:',
+'userrights-groupshelp' => 'Vælg grupper som du ønsker brugeren skal fjernes fra eller føjes til.
+Grupper som ikke er valgt, vil ikke blive ændret. Du kan ophæve valget af en gruppe ved hjælp af CTRL-tasten og et venstreklik.',
+
+# Groups
+#
+'grouppage-sysop' => 'Project:Administratorer',
+
+# Recent changes
+#
+"changes" => "ændringer",
+"recentchanges" => "Seneste ændringer",
+"rcnote"		=> "Nedenfor er de seneste <strong>$1</strong> ændringer i de
+sidste <strong>$2</strong> dage.",
+"rcnotefrom"	=> "Nedenfor er ændringerne fra <b>$2</b> indtil <b>$1</b> vist.",
+"rclistfrom"	=> "Vis nye ændringer startende fra $1",
+"rclinks"		=> "Vis seneste $1 ændringer i de sidste $2 dage<br />$3",
+"diff"			=> "forskel",
+"hist"			=> "historik",
+"hide"			=> "skjul",
+"show"			=> "vis",
+"minoreditletter" => "m",
+"newpageletter" => "N",
+'sectionlink' => '→',
+'number_of_watching_users_pageview' 	=> '[$1 overvågende bruger/e]',
+
+# Upload
+#
+"upload"		=> "Læg en fil op",
+"uploadbtn"		=> "Læg en fil op",
+"reupload"		=> "Læg en fil op igen",
+"reuploaddesc"	=> "Tilbage til formularen til at lægge filer op.",
+"uploadnologin" => "Ikke logget på",
+"uploadnologintext"	=> "Du skal være [[Special:Userlogin|logget på]] for at kunne lægge filer op.",
+"uploaderror"	=> "Fejl under oplægning af fil",
+# problem with link: [[{{NS:4}}:Politik om brug af billeder|politik om brug af billeder]]
+# problem with link: [[{{NS:4}}:Skabeloner#Ophavsret|skabelonsiden]]
+"uploadtext"	=> "<div style=\"border: 1px solid grey; background: \#ddf; padding: 7px; margin: 0 auto;\">
+<strong>STOP!</strong> Før du lægger filer op her,
+så vær sikker på du har læst og følger {{SITENAME}}s
+[[{{NS:4}}:Politik om brug af billeder|politik om brug af billeder]].
+
+Følg venligst disse retningslinjer:
+<ul>
+<li>Angiv tydeligt hvor filen stammer fra</li>
+<li>Brug et beskrivende filnavn, så det er til at se hvad filen indeholder</li>
+<li>Tjek i [[Special:Imagelist|listen over filer]] om filen allerede er lagt op</li>
+</ul>
+</div>
+<p>Brug formularen herunder til at lægge nye filer op, som kan bruges i dine artikler.
+På de fleste browsere vil du se en \"Browse...\" knap eller en
+\"Gennemse...\" knap, som vil
+bringe dig til dit styresystems standard-dialog til åbning af filer.
+Når du vælger en fil, vil navnet på filen dukke op i tekstfeltet
+ved siden af knappen.
+Du skal også bekræfte, at du ikke er ved at bryde nogens ophavsret.
+Det gør du ved at sætte et mærke i tjekboksen.
+Vælg \"Læg en fil op\"-knappen for at lægge filen op.
+Dette kan godt tage lidt tid hvis du har en langsom internetforbindelse.
+
+<p>De foretrukne formater er JPEG til fotografiske billeder, PNG
+til tegninger og andre små billeder, og OGG til lyd.
+For at bruge et billede i en artikel, så brug et link af denne type
+'''<nowiki>[[</nowiki>{{ns:image}}<nowiki>:fil.jpg]]</nowiki>''' eller
+'''<nowiki>[[</nowiki>{{ns:image}}<nowiki>:fil.png|alternativ tekst]]</nowiki>''' eller
+'''<nowiki>[[</nowiki>{{ns:media}}<nowiki>:fil.ogg]]</nowiki>''' for lyd.
+
+<p>Læg mærke til at præcis som med alle andre sider, så kan og må andre gerne
+redigere eller
+slette de filer, du har lagt op, hvis de mener det hjælper {{SITENAME}}, og
+du kan blive blokeret fra at lægge op hvis du misbruger systemet.",
+"uploadlog"		=> "oplægningslog",
+"uploadlogpage" => "Oplægningslog",
+"uploadlogpagetext" => "Herunder en liste over de senest oplagte filer. Alle de viste tider er serverens tid (UTC).",
+"filename"		=> "Filnavn",
+"filedesc"		=> "Beskrivelse",
+'filestatus' => 'Status på ophavsret',
+'filesource' => 'Kilde',
+"copyrightpage" => "{{ns:project}}:Ophavsret",
+"copyrightpagename" => "{{SITENAME}} ophavsret",
+"uploadedfiles"	=> "Filer som er lagt op",
+"minlength"		=> "Navnet på filen skal være på mindst tre bogstaver.",
+'illegalfilename'	=> 'Filnavnet "$1" indeholder tegn, der ikke er tilladte i sidetitler. Omdøb filen og prøv at lægge den op igen.',
+"badfilename"	=> "Navnet på filen er blevet ændret til \"$1\".",
+"badfiletype"	=> "\".$1\" er ikke et af de anbefalede filformater.",
+"largefile"		=> "Det anbefales, at filer ikke fylder mere end $1kb ($2).",
+'emptyfile'		=> 'Filen du lagde op lader til at være tom. Det kan skyldes en slåfejl i filnavnet. Kontroller om du virkelig ønsker at lægge denne fil op.',
+'fileexists'		=> 'En fil med det navn findes allerede, tjek venligst $1 om du er sikker på du vil ændre den.',
+"successfulupload" => "Oplægning er gennemført med succes",
+"fileuploaded"	=> "Filen \"$1\" er lagt op med succes.
+Følg dette link: ($2) til siden med beskrivelse, og udfyld
+information omkring filen, såsom hvor den kom fra, hvornår den er lavet
+og af hvem, og andre ting du ved om filen.",
+"uploadwarning" => "Oplægningsadvarsel",
+"savefile"		=> "Gem fil",
+"uploadedimage" => "Lagde \"[[$1]]\" op",
+"uploaddisabled" => "Desværre er funktionen til at lægge billeder op afbrudt på denne server.",
+'uploadscripted' => 'Denne fil indeholder HTML eller script-kode, der i visse tilfælde can fejlfortolkes af en browser.',
+'uploadcorrupt' => 'Denne fil er beskadiget eller forsynet med en forkert endelse. Kontroller venligst filen og prøv at lægge den op igen.',
+'uploadvirus' => 'Denne fil indeholder en virus! Virusnavn: $1',
+
+# Image list
+#
+"imagelist"		=> "Liste over billeder",
+"imagelisttext"	=> "Herunder er en liste med $1 billeder sorteret $2.",
+"getimagelist"	=> "henter billedliste",
+"ilsubmit"		=> "Søg",
+"showlast"		=> "Vis de sidste $1 billeder sorteret $2.",
+"byname"		=> "efter navn",
+"bydate"		=> "efter dato",
+"bysize"		=> "efter størrelse",
+"imgdelete"		=> "slet",
+"imgdesc"		=> "beskrivelse",
+"imglegend"		=> "Forklaring: (beskrivelse) = vis/redigér billedebeskrivelse.",
+"imghistory"	=> "Billedhistorik",
+"revertimg"		=> "gendan",
+"deleteimg"		=> "slet",
+"deleteimgcompletely"		=> "Slet alle revisioner af dette billede",
+"imghistlegend" => "Forklaring: (nuværende) = dette er det nuværende billede,
+(slet) = slet denne gamle version, (gendan) = gendan en gammel version.
+<br /><i>Klik på en dato for at se billedet, som er lagt op den dag</i>.",
+"imagelinks"	=> "Billedehenvisninger",
+"linkstoimage"	=> "De følgende sider henviser til dette billede:",
+"nolinkstoimage" => "Der er ingen sider der henviser til dette billede.",
+'shareduploadwiki' => 'Se venligst $1 for yderligere information.',
+'shareduploadwiki-linktext' => 'siden med billedbeskrivelsen',
+'noimage'       => 'Der eksisterer ingen fil med dette navn, du kan $1',
+'noimage-linktext' => 'lægge den op',
+'uploadnewversion-linktext' => 'Læg en ny version af denne fil op',
+
+# Statistics
+#
+"statistics"	=> "Statistik",
+"sitestats"		=> "Statistiske oplysninger om {{SITENAME}}",
+"userstats"		=> "Statistik om brugere på {{SITENAME}}",
+"sitestatstext" => "Der er i alt '''$1''' sider i databasen.
+Dette tal indeholder \"diskussion\"-sider, sider om {{SITENAME}}, omdirigeringssider og andre sider der sikkert ikke kan kaldes artikler.
+Hvis man udelader disse, så er der '''$2''' sider som sandsynligvis er rigtige artikler.
+Der har i alt været '''$4''' sideredigeringer siden programmellet blev opdateret den 25. september 2002.
+Det vil sige, at der har været '''$5''' gennemsnitlige redigeringer pr. side.",
+
+# Maintenance Page
+#
+"disambiguations"	=> "Artikler med flertydige titler",
+"disambiguationspage"	=> "Project:Henvisninger til artikler med flertydige titler",
+"disambiguationstext"	=> "De følgende artikler henviser til
+<i>artikler med flertydige titler</i>. De skulle henvise til en ikke-flertydig
+titel i stedet for.<br />En artikel bliver behandlet som flertydig, hvis den er
+henvist fra $1.<br />Henvisninger fra andre navnerum er <i>ikke</i> listet her.",
+"doubleredirects"	=> "Dobbelte omdirigeringer",
+"doubleredirectstext"	=> "<b>Bemærk:</b> Denne liste kan indeholde forkerte
+resultater. Det er som regel, fordi siden indeholder ekstra tekst under den
+første #REDIRECT.<br />\nHver linje indeholder henvisninger til den første og den
+anden omdirigering, og den første linje fra den anden omdirigeringstekst,
+det giver som regel den \"rigtige\" målartikel, som den første omdirigering
+skulle have peget på.",
+"brokenredirects"	=> "Dårlige omdirigeringer",
+"brokenredirectstext"	=> "De følgende omdirigeringer peger på en side der
+ikke eksisterer.",
+
+
+# Miscellaneous special pages
+#
+"lonelypages"	=> "Forældreløse artikler",
+'uncategorizedpages'	=> 'Ukategoriserede sider',
+'uncategorizedcategories'	=> 'Ukategoriserede kategorier',
+"unusedimages"	=> "Ubrugte billeder",
+"popularpages"	=> "Populære artikler",
+"nviews"		=> "$1 visninger",
+"wantedpages"	=> "Ønskede artikler",
+"nlinks"		=> "$1 henvisninger",
+"allpages"		=> "Alle artikler",
+"randompage"	=> "Tilfældig artikel",
+"shortpages"	=> "Korte artikler",
+"longpages"		=> "Lange artikler",
+'deadendpages'  => 'Blindgydesider',
+"listusers"		=> "Liste over brugere",
+"specialpages"	=> "Specielle sider",
+"spheading"		=> "Specielle sider for alle brugere",
+'restrictedpheading'	=> 'Specielle sider med begrænset adgang',
+"recentchangeslinked" => "Relaterede ændringer",
+"rclsub"		=> "(til sider henvist fra \"$1\")",
+"newpages"		=> "Nyeste artikler",
+"ancientpages"		=> "Ældste artikler",
+"intl"		=> "Sproghenvisninger",
+"movethispage"	=> "Flyt side",
+"unusedimagestext" => "<p>Læg mærke til, at andre websider
+såsom de andre internationale {{SITENAME}}er måske henviser til et billede med
+en direkte URL, så det kan stadig være listet her, selvom det er
+i aktivt brug.",
+"booksources"	=> "Bogkilder",
+'categoriespagetext' => 'De følgende kategorier eksisterer på {{SITENAME}}.',
+'data'	=> 'Data',
+
+# FIXME: Other sites, of course, may have affiliate relations with the booksellers list
+"booksourcetext" => "Herunder er en liste af henvisninger til steder der
+udlåner og/eller sælger nye og brugte bøger, og som måske også har
+yderligere oplysninger om bøger du leder efter.
+{{SITENAME}} er ikke associeret med nogen af disse steder,
+og denne liste skal ikke ses som en anbefaling af disse.",
+'isbn'	=> 'ISBN',
+"alphaindexline" => "$1 til $2",
+'version'		=> 'Information om MediaWiki',
+'log'		=> 'Logs',
+'alllogstext'	=> 'Samlet visning af oplægningslog, sletningslog, blokeringslog, bureaukratlog og listen over beskyttede sider.
+Du kan sortere i visningen ved at vælge type, brugernavn og/eller en udvalgt side.',
+
+# Special:Allpages
+'nextpage'          => 'Næste side ($1)',
+'allpagesfrom'		=> 'Vis sider startende fra: $1',
+'allarticles'       => 'Alle artikler',
+'allinnamespace'	=> 'Alle sider (i $1 navnerummet)',
+'allnotinnamespace'	=> 'Alle sider (ikke i $1 navnerummet)',
+'allpagesprev'      => 'Forrige',
+'allpagesnext'      => 'Næste',
+'allpagessubmit'    => 'Vis',
+
+# Email this user
+#
+"mailnologin"	=> "Ingen afsenderadresse",
+"mailnologintext" => "Du skal være [[Special:Userlogin|logget på]] og have en gyldig e-mailadresse sat i dine [[Special:Preferences|indstillinger]] for at sende e-mail til andre brugere.",
+"emailuser"		=> "E-mail til denne bruger",
+"emailpage"		=> "E-mail bruger",
+"emailpagetext"	=> "Hvis denne bruger har sat en gyldig e-mail-adresse i
+sine brugerindstillinger, så vil formularen herunder sende en enkelt
+besked.
+Den e-mailadresse, du har sat i dine brugerindstillinger, vil dukke op
+i \"Fra\" feltet på denne mail, så modtageren er i stand til at svare.",
+'usermailererror' => 'E-mail-modulet returnerede en fejl:',
+'defemailsubject'  => "{{SITENAME}} e-mail",
+"noemailtitle"	=> "Ingen e-mail-adresse",
+"noemailtext"	=> "Denne bruger har ikke angivet en gyldig e-mail-adresse,
+eller har valgt ikke at modtage e-mail fra andre brugere.",
+"emailfrom"		=> "Fra",
+"emailto"		=> "Til",
+"emailsubject"	=> "Emne",
+"emailmessage"	=> "Besked",
+"emailsend"		=> "Send",
+"emailsent"		=> "E-mail sendt",
+"emailsenttext" => "Din e-mail er blevet sendt.",
+
+# Watchlist
+#
+"watchlist"		=> "Overvågningsliste",
+"mywatchlist"		=> "Overvågningsliste",
+"nowatchlist"	=> "Du har ingenting i din overvågningsliste.",
+"watchnologin"	=> "Ikke logget på",
+"watchnologintext"	=> "Du skal være [[Special:Userlogin|logget på]] for at kunne ændre din overvågningsliste.",
+"addedwatch"	=> "Tilføjet til din overvågningsliste",
+"addedwatchtext" => "Siden \"$1\" er blevet tilføjet til din [[Special:Watchlist|overvågningsliste]]. Fremtidige ændringer til denne side og den tilhørende diskussionsside vil blive listet der, og siden vil fremstå '''fremhævet''' i [[Special:Recentchanges|listen med de seneste ændringer]] for at gøre det lettere at finde den. Hvis du senere vil fjerne siden fra din overvågningsliste, så klik \"Fjern overvågning\".",
+"removedwatch"	=> "Fjernet fra overvågningsliste",
+"removedwatchtext" => "Siden \"$1\" er blevet fjernet fra din
+overvågningsliste.",
+'watch' => 'Overvåg',
+"watchthispage"	=> "Overvåg side",
+'unwatch' => 'Fjern overvågning',
+"unwatchthispage" => "Fjern overvågning",
+"notanarticle"	=> "Ikke en artikel",
+"watchnochange" => "Ingen af siderne i din overvågningsliste er ændret i den valgte periode.",
+"watchdetails" => "* Du har $1 sider på din overvågningsliste (fratrukket alle diskussionssider).
+* I tidsintervallet valgt herunder, har brugerne foretaget $2 redigeringer i {{SITENAME}}.
+* $3
+* Du kan [[Special:Watchlist/edit|vise og redigere den komplette liste]].",
+'wlheader-enotif' 		=> "* E-mail underretning er slået til.",
+'wlheader-showupdated'   => "* Sider der er ændret siden dit sidste besøg er '''fremhævet'''",
+"watchmethod-recent" => "Tjekker seneste ændringer for sider i din overvågningsliste",
+"watchmethod-list" => "Tjekker seneste ændringer for sider i din overvågningsliste",
+"removechecked" => "Fjern valgte sider fra min overvågningsliste",
+"watchlistcontains" => "Din overvågningsliste indeholder $1 sider.",
+"watcheditlist" => "Her er en alfabetisk liste over siderne i din overvågningsliste.
+Vælg de sider du vil fjerne fra din overvågningsliste
+og klik på 'fjern valgte sider fra min overvågningsliste' knappen
+i bunden af skærmen.",
+"removingchecked" => "Fjerner de valgte sider fra din overvågningsliste...",
+"couldntremove" => "Kunne ikke fjerne '$1'...",
+"iteminvalidname" => "Problem med '$1', ugyldigt navn...",
+"wlnote" => "Nedenfor er de seneste $1 ændringer i de sidste <b>$2</b> timer.",
+'wlshowlast' 		=> "Vis de seneste $1 timer $2 dage $3",
+'wlsaved'			=> 'Dette er en gemt version af din overvågningsliste.',
+'wlhideshowown'		=> '$1 mine redigeringer.',
+'wlhideshowbots'		=> '$1 robotredigeringer.',
+'wldone'			=> 'Gennemført.',
+
+'enotif_mailer' 		=> '{{SITENAME}} informationsmail',
+'enotif_reset'			=> 'Marker alle sider som besøgt',
+'enotif_newpagetext'=> 'Dette er en ny side.',
+'changed'			=> 'ændret',
+'created'			=> 'oprettet',
+'enotif_subject' 	=> '{{SITENAME}}-siden $PAGETITLE_QP er blevet ændret af $PAGEEDITOR_QP',
+'enotif_lastvisited' => 'Se $1 for alle ændringer siden dit sidste besøg.',
+# problem with link: {{fullurl:Landsbybrønden}}
+'enotif_body' => 'Kære $WATCHINGUSERNAME,
+
+{{SITENAME}}-siden $PAGETITLE er blevet ændret den $PAGEEDITDATE af $PAGEEDITOR, se $PAGETITLE_URL for den nyeste version.
+
+$NEWPAGE
+
+Bidragyderens beskrivelse: $PAGESUMMARY $PAGEMINOREDIT
+Kontakt bidragyderen:
+mail $PAGEEDITOR_EMAIL
+wiki $PAGEEDITOR_WIKI
+
+Du vil ikke modtage flere beskeder om yderligere ændringer af denne side med mindre du besøger den. På din overvågningsliste kan du også nulstille alle markeringer på de sider, du overvåger.
+
+             Med venlig hilsen {{SITENAME}}s informationssystem
+
+--
+Besøg {{fullurl:Special:Watchlist/edit}} for at ændre indstillingerne for din overvågningsliste
+
+Tilbagemelding og yderligere hjælp:
+{{fullurl:Landsbybrønden}}',
+
+# Delete/protect/revert
+#
+"deletepage"	=> "Slet side",
+"confirm"		=> "Bekræft",
+"excontent" => "indholdet var: '$1'",
+"excontentauthor" => "indholdet var: '$1' (og den eneste forfatter var '$2')",
+"exbeforeblank" => "indholdet før siden blev tømt var: '$1'",
+"exblank" => "siden var tom",
+"confirmdelete" => "Bekræft sletning",
+"deletesub"		=> "(Sletter \"$1\")",
+"historywarning" => "Advarsel: Siden du er ved at slette har en historie:",
+"confirmdeletetext" => "Du er ved permanent at slette en side
+eller et billede sammen med hele den tilhørende historie fra databasen.
+Bekræft venligst at du virkelig vil gøre dette, at du forstår
+konsekvenserne, og at du gør dette i overensstemmelse med
+[[{{MediaWiki:policy-url}}]].",
+"policy-url" => "Project:Politik",
+"actioncomplete" => "Gennemført",
+"deletedtext"	=> "\"$1\" er slettet.
+Se $2 for en fortegnelse over de nyeste sletninger.",
+"deletedarticle" => "slettede \"$1\"",
+"dellogpage"	=> "Sletningslog",
+"dellogpagetext" => "Herunder er en liste over de nyeste sletninger.
+Alle tider er serverens tid (UTC).",
+"deletionlog"	=> "sletningslog",
+"reverted"		=> "Gendannet en tidligere version",
+"deletecomment"	=> "Begrundelse for sletning",
+"imagereverted" => "Gendannelse af en tidligere version gennemført med
+succes.",
+"rollback"		=> "Fjern redigeringer",
+'rollback_short' => 'Fjern redigering',
+"rollbacklink"	=> "fjern redigering",
+"rollbackfailed" => "Kunne ikke fjerne redigeringen",
+"cantrollback"	=> "Kan ikke fjerne redigering;
+den sidste bruger er den eneste forfatter.",
+"alreadyrolled"	=> "Kan ikke fjerne den seneste redigering af [[:$1]] foretaget af [[User:$2|$2]] ([[User talk:$2|diskussion]]); en anden har allerede redigeret siden eller fjernet redigeringen. Den seneste redigering er foretaget af [[User:$3|$3]] ([[User talk:$3|diskussion]]).",
+#   only shown if there is an edit comment
+"editcomment" => "Kommentaren til redigeringen var: \"<i>$1</i>\".",
+"revertpage"	=> "Gendannelse til seneste version ved $1, fjerner ændringer fra $2",
+'sessionfailure' => 'There seems to be a problem with your login session;
+this action has been canceled as a precaution against session hijacking.
+Please hit "back" and reload the page you came from, then try again.',
+"protectlogpage" => "Liste_over_beskyttede_sider",
+# problem with link: [[Project:Beskyttet side]]
+"protectlogtext" => "Herunder er en liste over sider der er blevet beskyttet/har fået fjernet beskyttelsen.
+Se [[Project:Beskyttet side]] for mere information.",
+"protectedarticle" => "[[$1]] beskyttet",
+"unprotectedarticle" => "fjernet beskyttelse af [[$1]]",
+'protectsub' =>"(Beskytter \"$1\")",
+'confirmprotecttext' => 'Vil du virkelig beskytte denne side?',
+'confirmprotect' => 'Bekræft beskyttelse',
+'protectmoveonly' => 'Beskyt kun fra at blive flyttet',
+'protectcomment' => 'Begrundelse for beskyttelse',
+'unprotectsub' =>"(Fjern beskyttelse af \"$1\")",
+'confirmunprotecttext' => 'Vil du virkelig fjerne beskyttelsen fra denne side?',
+'confirmunprotect' => 'Bekræft fjernelse af beskyttelse',
+'unprotectcomment' => 'Begrundelse for fjernet beskyttelse',
+
+# Undelete
+"undelete" => "Gendan en slettet side",
+"undeletepage" => "Se og gendan slettede sider",
+"undeletepagetext" => "De følgende sider er slettede, men de findes
+stadig i arkivet og kan gendannes. Arkivet blivet periodevis slettet.",
+"undeletearticle" => "Gendan slettet artikel",
+"undeleterevisions" => "$1 revisioner arkiveret",
+"undeletehistory" => "Hvis du gendanner siden, vil alle de historiske
+revisioner også blive gendannet. Hvis en ny side med det samme navn
+er oprettet siden denne blev slettet, så vil de gendannede revisioner
+dukke op i den tidligere historie, og den nyeste revision vil forblive
+på siden.",
+"undeleterevision" => "Slettet version fra $1",
+"undeletebtn" => "Gendan!",
+"undeletedarticle" => "gendannede \"$1\"",
+'undeletedrevisions' => "$1 versioner gendannet",
+
+# Namespace form on various pages
+'namespace' => 'Namvnerum:',
+'invert' => 'Invert selection',
+
+# Contributions
+#
+"contributions"	=> "Brugerbidrag",
+"mycontris" => "Mine bidrag",
+"contribsub2"	=> "For $1 ($2)",
+"nocontribs"	=> "Ingen ændringer er fundet som opfylder disse kriterier.",
+"ucnote"	=> "Herunder er denne brugers sidste <b>$1</b> ændringer i de
+sidste <b>$2</b> dage.",
+"uclinks"	=> "Vis de sidste $1 ændringer; vis de sidste $2 dage.",
+"uctop"		=> " (top)" ,
+'newbies'       => 'nybegyndere',
+
+# What links here
+#
+"whatlinkshere"	=> "Hvad henviser hertil",
+"notargettitle" => "Intet mål",
+"notargettext"	=> "Du har ikke angivet en målside eller bruger at udføre denne funktion på.",
+"linklistsub"	=> "(Liste over henvisninger)",
+"linkshere"	=> "De følgende sider henviser her til:",
+"nolinkshere"	=> "Ingen sider henviser her til.",
+"isredirect"	=> "omdirigeringsside",
+
+# Block/unblock IP
+#
+"blockip"		=> "Bloker bruger",
+# problem with link [[meta:Range blocks|IP-adresseblokke]]
+"blockiptext"	=> "Brug formularen herunder til at blokere for skriveadgangen fra en specifik IP-adresse eller et brugernavn. Dette må kun gøres for at forhindre vandalisme og skal være i overensstemmelse med [[{{MediaWiki:policy-url}}|{{SITENAME}}s politik]]. Angiv en specifik begrundelse herunder (for eksempel med angivelse af sider der har været udsat for vandalisme). Udløbet (expiry) angives i GNUs standardformat, som er beskrevet i [http://www.gnu.org/software/tar/manual/html_chapter/tar_7.html vejledningen til tar] (på engelsk), fx \"1 hour\", \"2 days\", \"next Wednesday\", \"1 January 2017\". Alternativt kan en blokering gøres uendelig (skriv \"indefinite\" eller \"infinite\"). For oplysninger om blokering af IP-adresseblokke, se [[meta:Range blocks|IP-adresseblokke]] (på engelsk). For at ophæve en blokering, se [[Special:Ipblocklist|listen over blokerede IP-adresser og brugernavne]].",
+"ipaddress"		=> "IP-adresse/brugernavn",
+'ipbexpiry'		=> 'Udløb',
+"ipbreason"		=> "Begrundelse",
+"ipbsubmit"		=> "Bloker denne bruger",
+"badipaddress"	=> "IP-adressen/brugernavnet er udformet forkert eller eksistere ikke.",
+"blockipsuccesssub" => "Blokering udført med succes",
+"blockipsuccesstext" => "\"$1\" er blevet blokeret.
+<br />Se [[Special:Ipblocklist|IP blokeringslisten]] for alle blokeringer.",
+"unblockip"		=> "Ophæv blokering af bruger",
+"unblockiptext"	=> "Brug formularen herunder for at gendanne skriveadgangen
+for en tidligere blokeret IP-adresse eller bruger.",
+"ipusubmit"		=> "Ophæv blokeringen af denne adresse",
+"ipblocklist"	=> "Liste over blokerede IP-adresser og brugernavne",
+'blocklistline'	=> '$1, $2 blokerede $3 ($4)',
+'infiniteblock' => 'udløber infinite', //fixme
+'expiringblock' => 'udløber $1',
+"blocklink"		=> "bloker",
+"unblocklink"	=> "ophæv blokering",
+"contribslink"	=> "bidrag",
+"autoblocker"	=> "Automatisk blokeret fordi du deler IP-adresse med \"$1\". Begrundelse \"$2\".",
+'blocklogpage'	=> 'Blokeringslog',
+'blocklogentry'	=> 'blokerede "$1" med $2 som udløbstid',
+'blocklogtext'	=> 'Dette er en liste over blokerede brugere og ophævede blokeringer af brugere. Automatisk blokerede IP-adresser er ikke anført her. Se [[Special:Ipblocklist|blokeringslisten]] for den nuværende liste over blokerede brugere.',
+'unblocklogentry'	=> 'ophævede blokering af "$1"',
+'range_block_disabled'	=> 'Sysop-muligheden for at oprette blokeringsklasser er slået fra.',
+'ipb_expiry_invalid'	=> 'Udløbstiden er ugyldig.',
+'ip_range_invalid'	=> "Ugyldigt IP-interval.",
+'proxyblocker'	=> 'Proxy-blokering',
+'proxyblockreason'	=> 'Din IP-adresse er blevet blokeret fordi den er en såkaldt \'\'åben proxy\'\'. Kontakt din Internet-udbyder eller tekniske hotline og oplyse dem om dette alvorlige sikkerhedsproblem.',
+'proxyblocksuccess'	=> "Færdig.",
+
+# Developer tools
+#
+"lockdb"		=> "Lås database",
+"unlockdb"		=> "Lås database op",
+"lockdbtext"	=> "At låse databasen vil forhindre alle brugere i at kunne redigere sider, ændre indstillinger, redigere overvågningslister og andre ting der kræver ændringer i databasen. Bekræft venligst at du har til hensigt at gøre dette, og at du vil låse databasen op, når din vedligeholdelse er overstået.",
+"unlockdbtext"	=> "At låse databasen op vil gøre, at alle brugere igen
+kan redigere sider, ændre deres indstillinger, redigere deres
+overvågningsliste, og andre ting der kræver ændringer i databasen.
+Bekræft venligst at du har til hensigt at gøre dette.",
+"lockconfirm"	=> "Ja, jeg vil virkelig låse databasen.",
+"unlockconfirm"	=> "Ja, jeg vil virkelig låse databasen op.",
+"lockbtn"		=> "Lås databasen",
+"unlockbtn"		=> "Lås databasen op",
+"locknoconfirm" => "Du har ikke bekræftet handlingen.",
+"lockdbsuccesssub" => "Databasen er nu låst",
+"unlockdbsuccesssub" => "Databasen er nu låst op",
+"lockdbsuccesstext" => "Mediawikidatabasen er låst. <br />Husk at fjerne låsen når du er færdig med din vedligeholdelse.",
+"unlockdbsuccesstext" => "Mediawikidatabasen er låst op.",
+
+# Make sysop
+'rightslogtext'		=> 'Dette er en log over ændringer i brugeres rettigheder.',
+
+# Move page
+#
+"movepage"		=> "Flyt side",
+"movepagetext"	=> "Når du bruger formularen herunder vil du få omdøbt en
+side og flyttet hele sidens historie til det nye navn.
+Den gamle titel vil blive en omdirigeringsside til den nye titel.
+Henvisninger til den gamle titel vil ikke blive ændret. Sørg for at
+tjekke for dobbelte eller dårlige omdirigeringer.
+Du er ansvarlig for, at alle henvisninger stadig peger derhen, hvor det er
+meningen de skal pege.
+
+Bemærk at siden '''ikke''' kan flyttes hvis der allerede er en side
+med den nye titel, medmindre den side er tom eller er en omdirigering
+uden nogen historie. Det betyder at du kan flytte en side tilbage hvor
+den kom fra, hvis du kommer til at lave en fejl.
+
+<b>ADVARSEL!</b>
+Dette kan være en drastisk og uventet ændring for en populær side;
+vær sikker på, at du forstår konsekvenserne af dette før du
+fortsætter.",
+"movepagetalktext" => "Den tilhørende diskussionsside, hvis der er en,
+vil automatisk blive flyttet med siden '''medmindre:'''
+*Du flytter siden til et andet navnerum,
+*En ikke-tom diskussionsside allerede eksisterer under det nye navn, eller
+*Du fjerner markeringen i boksen nedenunder.
+
+I disse tilfælde er du nødt til at flytte eller sammenflette siden manuelt.",
+"movearticle"	=> "Flyt side",
+"movenologin"	=> "Ikke logget på",
+"movenologintext" => "Du skal være registreret bruger og være [[Special:Userlogin|logget på]]
+for at flytte en side.",
+"newtitle"		=> "Til ny titel",
+"movepagebtn"	=> "Flyt side",
+"pagemovedsub"	=> "Flytning gennemført",
+"pagemovedtext" => "Siden \"[[$1]]\" er flyttet til \"[[$2]]\".",
+"articleexists" => "En side med det navn eksisterer allerede, eller det
+navn du har valgt er ikke gyldigt. Vælg et andet navn.",
+"talkexists"	=> "Siden blev flyttet korrekt, men den tilhørende
+diskussionsside kunne ikke flyttes, fordi der allerede eksisterer en
+med den nye titel. Du er nødt til at flette dem sammen manuelt.",
+"movedto"		=> "flyttet til",
+"movetalk"		=> "Flyt også \"diskussionssiden\", hvis den eksisterer.",
+"talkpagemoved" => "Den tilhørende diskussionsside blev også flyttet.",
+"talkpagenotmoved" => "Den tilhørende diskussionsside blev
+<strong>ikke</strong> flyttet.",
+'1movedto2'		=> "$1 flyttet til $2",
+'1movedto2_redir' => '$1 flyttet til $2 over en omdirigering',
+'movelogpage' => 'Flyttelog',
+'movelogpagetext' => 'Nedenfor er en liste over flyttede sider.',
+'movereason'	=> 'Begrundelse',
+'revertmove'	=> 'gendan',
+'delete_and_move' => 'Slet og flyt',
+'delete_and_move_text'	=>
+'==Sletning nødvendig==
+
+Målartiklen "[[$1]]" eksisterer allerede. Vil du slette den for at lave plads til flytningen?',
+'delete_and_move_reason' => 'Slet for at lave plads til flyningen',
+'selfmove' => "Begge sider har samme navn. Man kan ikke flytte en side oven i sig selv.",
+'immobile_namespace' => "Måltitlen er en speciel type; man kan ikke flytte sider ind i det navnerum.",
+
+# Export
+
+'export'		=> 'Eksportér sider',
+'exporttext'	=> 'Du kan eksportere teksten og historikken fra en eller flere sider i et simpelt XML format. Dette kan bruges til at indsætte siderne i en anden wiki der bruger MediaWiki softwaren, eller du kan beholde den for din egen fornøjelses skyld',
+'exportcuronly'	=> 'Eksportér kun den nuværende version, ikke hele historikken',
+
+# Namespace 8 related
+
+'allmessages'	=> 'Alle beskeder',
+'allmessagesname' => 'Navn',
+'allmessagesdefault' => 'Standard tekst',
+'allmessagescurrent' => 'Nuværende tekst',
+'allmessagestext'	=> 'Dette er en liste over alle beskeder i MediaWiki: navnerummet.',
+'allmessagesnotsupportedUI' => 'Dit aktuelle grænsefladesprog <b>$1</b> er ikke understøttet af Special:AllMessages på dette websted.',
+'allmessagesnotsupportedDB' => 'Special:AllMessages ikke understøttet fordi wgUseDatabaseMessages er slået fra.',
+
+# Thumbnails
+
+'thumbnail-more'	=> 'Forstør',
+'missingimage'		=> "<b>Mangler billede</b><br /><i>$1</i>",
+'filemissing'		=> 'Filen mangler',
+
+# Special:Import
+'import'	=> 'Importere sider',
+'importinterwiki' => 'Transwiki import',
+'importtext'	=> 'Eksportér filen fra kilde-wiki\'en ved hjælp af værktøjet Special:Export, gem den på din harddisk og læg den op her.',
+'importfailed'	=> "Importering fejlede: $1",
+'importnotext'	=> 'Tom eller ingen tekst',
+'importsuccess'	=> 'Importen lykkedes!',
+'importhistoryconflict' => 'Der er en konflikt i versionhistorikken (siden kan have været importeret før)',
+'importnosources' => 'No transwiki import sources have been defined and direct history uploads are disabled.',
+
+# Keyboard access keys for power users
+'accesskey-search' => 'f',
+'accesskey-minoredit' => 'i',
+'accesskey-save' => 's',
+'accesskey-preview' => 'p',
+'accesskey-diff' => 'v',
+'accesskey-compareselectedversions' => 'v',
+
+# tooltip help for some actions, most are in Monobook.js
+'tooltip-search' => 'Søg i {{SITENAME}}',
+'tooltip-minoredit' => 'Marker dette som en mindre ændring',
+'tooltip-save' => 'Gem dine ændringer',
+'tooltip-preview' => 'Forhåndsvis dine ændringer, brug venligst denne funktion inden du gemmer!',
+'tooltip-diff' => 'Vis hvilke ændringer du har lavet i teksten.',
+'tooltip-compareselectedversions' => 'Se forskellene imellem de to valgte versioner af denne side.',
+'tooltip-watch' => 'Tilføj denne side til din overvågningsliste',
+
+# stylesheets
+#'monobook.css' => '/* edit this file to customize the monobook skin for the entire site */',
+#'monobook.js' => '/* Deprecated; use [[MediaWiki:common.js]] */',
+
+# Metadata
+'nodublincore' => 'Dublin Core RDF-metadata er slået fra på denne server.',
+'nocreativecommons' => 'Creative Commons RDF-metadata er slået fra på denne server.',
+'notacceptable' => 'Wiki-serveren kan ikke levere data i et format, som din klient understøtter.',
+
+# Attribution
+
+'anonymous' => "Anonym(e) bruger(e) af {{SITENAME}}",
+'siteuser' => "{{SITENAME}} bruger $1",
+'lastmodifiedatby' => "Denne side blev senest ændret $2, $1 af $3.",
+'and' => 'og',
+'othercontribs' => "Baseret på arbejde af $1.",
+'others' => 'andre',
+'siteusers' => "{{SITENAME}} bruger(e) $1",
+'creditspage' => 'Sidens forfattere',
+'nocredits' => 'Der er ingen forfatteroplysninger om denne side.',
+
+# Spam protection
+
+'spamprotectiontitle' => 'Spambeskyttelsesfilter',
+# problem with link: [[m:spam blacklist]]
+# problem with link: [[m:Special:Listadmins|m:administrator]]
+'spamprotectiontext' => 'Siden du prøver at få adgang til er blokeret af spamfilteret. Dette skyldes sandsynligvis et link til et eksternt websted. Se [[m:spam blacklist]] for en komplet liste af blokerede websteder. Hvis du mener at spamfilteret blokerede redigeringen ved en fejl, så kontakt en [[m:Special:Listadmins|m:administrator]]. Det følgende er et udtræk af siden der bevirkede blokeringen:',
+'spamprotectionmatch' => 'Følgende tekst udløste vores spamfilter: $1',
+'subcategorycount' => "Der er $1 underkategorier i denne kategori.",
+'categoryarticlecount' => "Der er $1 artikler i denne kategori.",
+'listingcontinuesabbrev' => " forts.",
+
+# Info page
+"infosubtitle" => "Information om siden",
+"numedits" => "Antal redigeringer (artikel): $1",
+"numtalkedits" => "Antal redigeringer (diskussionsside): $1",
+"numwatchers" => "Antal overvågere: $1",
+"numauthors" => "Antal forskellige forfattere (artikel): $1",
+"numtalkauthors" => "Antal forskellige forfattere (diskussionsside): $1",
+
+# Math options
+'mw_math_png' => "Vis altid som PNG",
+'mw_math_simple' => "HTML hvis meget simpel ellers PNG",
+'mw_math_html' => "HTML hvis muligt ellers PNG",
+'mw_math_source' => "Lad være som TeX (for tekstbrowsere)",
+'mw_math_modern' => "Anbefalet til moderne browsere",
+'mw_math_mathml' => "MathML hvis muligt",
+
+# Patrolling
+'markaspatrolleddiff'   => "Markér som patruljeret",
+'markaspatrolledtext'   => "Markér denne artikel som patruljeret",
+'markedaspatrolled'     => "Markeret som patruljeret",
+'markedaspatrolledtext' => "Den valgte revision er nu markeret som patruljeret.",
+'rcpatroldisabled'      => "Seneste ændringer-patruljeringen er slået fra",
+'rcpatroldisabledtext'  => "Funktionen til seneste ændringer-patruljeringen er pt. slået fra.",
+
+# Monobook.js: tooltips and access keys for monobook
+'monobook.js' => '/* Deprecated; use [[MediaWiki:common.js]] */',
+
+'accesskey-pt-userpage' => '.',
+'tooltip-pt-userpage' => 'Min brugerside',
+'accesskey-pt-anonuserpage' => '.',
+'tooltip-pt-anonuserpage' => 'Brugersiden for den ip-adresse du redigerer som',
+'accesskey-pt-mytalk' => 'n',
+'tooltip-pt-mytalk' => 'Min diskussionsside',
+'accesskey-pt-anontalk' => 'n',
+'tooltip-pt-anontalk' => 'Diskussion om redigeringer fra denne ip-adresse',
+'accesskey-pt-preferences' => '',
+'tooltip-pt-preferences' => 'Mine indstillinger',
+'accesskey-pt-watchlist' => 'l',
+'tooltip-pt-watchlist' => 'Listen over sider du overvåger for ændringer.',
+'accesskey-pt-mycontris' => 'y',
+'tooltip-pt-mycontris' => 'Listen over dine bidrag',
+'accesskey-pt-login' => 'o',
+'tooltip-pt-login' => 'Du opfordres til at logge på, men det er ikke obligatorisk.',
+'accesskey-pt-anonlogin' => 'o',
+'tooltip-pt-anonlogin' => 'Du opfordres til at logge på, men det er ikke obligatorisk',
+'accesskey-pt-logout' => '',
+'tooltip-pt-logout' => 'Log af',
+'accesskey-ca-talk' => 't',
+'tooltip-ca-talk' => 'Diskussion om indholdet på siden',
+'accesskey-ca-edit' => 'e',
+'tooltip-ca-edit' => 'Du kan redigere denne side. Brug venligst forhåndsvisning før du gemmer.',
+'accesskey-ca-addsection' => '+',
+'tooltip-ca-addsection' => 'Tilføj en kommentar til denne diskussion.',
+'accesskey-ca-viewsource' => 'e',
+'tooltip-ca-viewsource' => 'Denne side er beskyttet. Du kan kigge på kildekoden.',
+'accesskey-ca-history' => 'h',
+'tooltip-ca-history' => 'Tidligere versioner af denne side.',
+'accesskey-ca-protect' => '=',
+'tooltip-ca-protect' => 'Beskyt denne side',
+'accesskey-ca-delete' => 'd',
+'tooltip-ca-delete' => 'Slet denne side',
+'accesskey-ca-undelete' => 'd',
+'tooltip-ca-undelete' => 'Gendan de redigeringer der blev lavet på denne side før den blev slettet',
+'accesskey-ca-move' => 'm',
+'tooltip-ca-move' => 'Flyt denne side',
+'accesskey-ca-watch' => 'w',
+'tooltip-ca-watch' => 'Sæt denne side på din overvågningsliste',
+'accesskey-ca-unwatch' => 'w',
+'tooltip-ca-unwatch' => 'Fjern denne side fra din overvågningsliste',
+'accesskey-search' => 'f',
+'tooltip-search' => 'Søg på denne wiki',
+'accesskey-p-logo' => '',
+'tooltip-p-logo' => 'Forsiden',
+'accesskey-n-mainpage' => 'z',
+'tooltip-n-mainpage' => 'Besøg forsiden',
+'accesskey-n-portal' => '',
+'tooltip-n-portal' => 'Om projektet, hvad du kan gøre, hvor tingene findes',
+'accesskey-n-currentevents' => '',
+'tooltip-n-currentevents' => 'Find baggrundsinformation om aktuelle begivenheder',
+'accesskey-n-recentchanges' => 'r',
+'tooltip-n-recentchanges' => 'Listen over de seneste ændringer i wikien.',
+'accesskey-n-randompage' => 'x',
+'tooltip-n-randompage' => 'Gå til en tilfældig artikel',
+'accesskey-n-help' => '',
+'tooltip-n-help' => 'Hvordan gør jeg ...',
+'accesskey-n-sitesupport' => '',
+'tooltip-n-sitesupport' => 'Støt os',
+'accesskey-t-whatlinkshere' => 'j',
+'tooltip-t-whatlinkshere' => 'Liste med alle sider som henviser hertil',
+'accesskey-t-recentchangeslinked' => 'k',
+'tooltip-t-recentchangeslinked' => 'Seneste ændringer i sider som denne side henviser til',
+'accesskey-feed-rss' => '',
+'tooltip-feed-rss' => 'RSS-feed for denne side',
+'accesskey-feed-atom' => '',
+'tooltip-feed-atom' => 'Atom-feed for denne side',
+'accesskey-t-contributions' => '',
+'tooltip-t-contributions' => 'Se denne brugers bidrag',
+'accesskey-t-emailuser' => '',
+'tooltip-t-emailuser' => 'Send en e-mail til denne bruger',
+'accesskey-t-upload' => 'u',
+'tooltip-t-upload' => 'Upload et billede eller anden mediafil',
+'accesskey-t-specialpages' => 'q',
+'tooltip-t-specialpages' => 'Liste med alle specielle sider',
+'accesskey-ca-nstab-main' => 'c',
+'tooltip-ca-nstab-main' => 'Se indholdet',
+'accesskey-ca-nstab-user' => 'c',
+'tooltip-ca-nstab-user' => 'Se brugersiden',
+'accesskey-ca-nstab-media' => 'c',
+'tooltip-ca-nstab-media' => 'Se mediasiden',
+'accesskey-ca-nstab-special' => '',
+'tooltip-ca-nstab-special' => 'Dette er en speciel side; man kan ikke redigere sådanne sider.',
+//'accesskey-ca-nstab-project' => 'a',
+//'tooltip-ca-nstab-project' => 'Se Wikipediasiden',
+'accesskey-ca-nstab-image' => 'c',
+'tooltip-ca-nstab-image' => 'Se billedsiden',
+'accesskey-ca-nstab-mediawiki' => 'c',
+'tooltip-ca-nstab-mediawiki' => 'Se systembeskeden',
+'accesskey-ca-nstab-template' => 'c',
+'tooltip-ca-nstab-template' => 'Se skabelonen',
+'accesskey-ca-nstab-help' => 'c',
+'tooltip-ca-nstab-help' => 'Se hjælpesiden',
+'accesskey-ca-nstab-category' => 'c',
+'tooltip-ca-nstab-category' => 'Se kategorisiden',
+
+# image deletion
+'deletedrevision' => 'Slettede gammel version $1.',
+
+# browsing diffs
+'previousdiff' => '← Gå til forrige forskel',
+'nextdiff' => 'Gå til næste forskel →',
+
+'imagemaxsize' => 'Begræns størrelsen af billeder på billedsiderne til:',
+'thumbsize'	=> 'Thumbnail størrelse :',
+'showbigimage' => 'Download en version i høj opløsning ($1x$2, $3 KB)',
+
+'newimages' => 'Galleri med de nyeste billeder',
+'noimages'  => 'Ingenting at se.',
+
+
+# labels for User: and Title: on Special:Log pages
+'specialloguserlabel' => 'Bruger:',
+'speciallogtitlelabel' => 'Titel:',
+
+'passwordtooshort' => 'Dit kodeord er for kort. Det skal være mindst $1 tegn langt.',
+
+# Media Warning
+'mediawarning' => "'''Advarsel''', denne filtype kan muligvis indeholde skadelig kode, du kan beskadige dit system hvis du udfører den.
+<hr />",
+# external editor support
+'edit-externally' => 'Rediger denne fil med en ekstern editor',
+'edit-externally-help' => 'Se [http://meta.wikimedia.org/wiki/Help:External_editors setup instruktionerne] for mere information.',
+
+# 'all' in various places, this might be different for inflected languages
+'recentchangesall' => 'alle',
+'imagelistall' => 'alle',
+'watchlistall1' => 'alle',
+'watchlistall2' => 'alle',
+'namespacesall' => 'alle',
+
+);
+
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesDe.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesDe.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesDe.php	(revision 1280)
@@ -0,0 +1,2299 @@
+<?php
+/**
+ * German (Deutsch)
+ *
+ * @addtogroup Language
+ *
+ * @author Jimmy Collins <jimmy.collins@web.de>
+ * @author Raimond Spekking (Raymond) <raimond.spekking@gmail.com> since January 2007
+ */
+
+
+$namespaceNames = array(
+	NS_MEDIA            => 'Media',
+	NS_SPECIAL          => 'Spezial',
+	NS_MAIN             => '',
+	NS_TALK             => 'Diskussion',
+	NS_USER             => 'Benutzer',
+	NS_USER_TALK        => 'Benutzer_Diskussion',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK     => '$1_Diskussion',
+	NS_IMAGE            => 'Bild',
+	NS_IMAGE_TALK       => 'Bild_Diskussion',
+	NS_MEDIAWIKI        => 'MediaWiki',
+	NS_MEDIAWIKI_TALK   => 'MediaWiki_Diskussion',
+	NS_TEMPLATE         => 'Vorlage',
+	NS_TEMPLATE_TALK    => 'Vorlage_Diskussion',
+	NS_HELP             => 'Hilfe',
+	NS_HELP_TALK        => 'Hilfe_Diskussion',
+	NS_CATEGORY         => 'Kategorie',
+	NS_CATEGORY_TALK    => 'Kategorie_Diskussion'
+);
+
+$skinNames = array(
+	'standard'      => 'Klassik',
+	'nostalgia'     => 'Nostalgie',
+	'cologneblue'   => 'Kölnisch Blau',
+	'smarty'        => 'Paddington',
+	'montparnasse'  => 'Montparnasse',
+	'davinci'       => 'DaVinci',
+	'mono'          => 'Mono',
+	'monobook'      => 'MonoBook',
+	'myskin'        => 'MySkin',
+	'chick'         => 'Küken'
+);
+
+
+$bookstoreList = array(
+	'abebooks.de' => 'http://www.abebooks.de/servlet/BookSearchPL?ph=2&isbn=$1',
+	'amazon.de' => 'http://www.amazon.de/exec/obidos/ISBN=$1',
+	'buch.de' => 'http://www.buch.de/de.buch.shop/shop/1/home/schnellsuche/buch/?fqbi=$1',
+	'Karlsruher Virtueller Katalog (KVK)' => 'http://www.ubka.uni-karlsruhe.de/kvk.html?SB=$1',
+	'Lehmanns Fachbuchhandlung' => 'http://www.lob.de/cgi-bin/work/suche?flag=new&stich1=$1'
+);
+
+$separatorTransformTable = array(',' => '.', '.' => ',' );
+$linkTrail = '/^([äöüßa-z]+)(.*)$/sDu';
+
+/**
+ * Alternate names of special pages. All names are case-insensitive. The first
+ * listed alias will be used as the default. Aliases from the fallback 
+ * localisation (usually English) will be included by default. 
+ * 
+ * This array may be altered at runtime using the LangugeGetSpecialPageAliases 
+ * hook.
+ */
+$specialPageAliases = array(
+        'DoubleRedirects'           => array( 'Doppelte_Weiterleitungen' ),
+        'BrokenRedirects'           => array( 'Kaputte_Weiterleitungen' ),
+        'Disambiguations'           => array( 'Begriffsklärungsverweise' ),
+        'Userlogin'                 => array( 'Anmelden' ),
+        'Userlogout'                => array( 'Abmelden' ),
+        'Preferences'               => array( 'Einstellungen' ),
+        'Watchlist'                 => array( 'Beobachtungsliste' ),
+        'Recentchanges'             => array( 'Letzte_Änderungen' ),
+        'Upload'                    => array( 'Hochladen' ),
+        'Imagelist'                 => array( 'Dateien', 'Dateiliste' ),
+        'Newimages'                 => array( 'Neue_Dateien' ),
+        'Listusers'                 => array( 'Benutzer' ),
+        'Statistics'                => array( 'Statistik' ),
+        'Randompage'                => array( 'Zufällige_Seite' ),
+        'Lonelypages'               => array( 'Verwaiste_Seiten' ),
+        'Uncategorizedpages'        => array( 'Nicht_kategorisierte_Seiten' ),
+        'Uncategorizedcategories'   => array( 'Nicht_kategorisierte_Kategorien' ),
+        'Uncategorizedimages'       => array( 'Nicht_kategorisierte_Dateien' ),
+        'Unusedcategories'          => array( 'Unbenutzte_Kategorien' ),
+        'Unusedimages'              => array( 'Unbenutzte_Dateien' ),
+        'Wantedpages'               => array( 'Gewünschte_Seiten' ),
+        'Wantedcategories'          => array( 'Gewünschte_Kategorien' ),
+        'Mostlinked'                => array( 'Meistverlinkte_Seiten' ),
+        'Mostlinkedcategories'      => array( 'Meistbenutzte_Kategorien' ),
+        'Mostcategories'            => array( 'Meistkategorisierte_Seiten' ),
+        'Mostimages'                => array( 'Meistbenutzte_Dateien' ),
+        'Mostrevisions'             => array( 'Meistbearbeitete_Seiten' ),
+        'Fewestrevisions'           => array( 'Wenigstbearbeitete_Seiten' ),
+        'Shortpages'                => array( 'Kürzeste_Seiten' ),
+        'Longpages'                 => array( 'Längste_Seiten' ),
+        'Newpages'                  => array( 'Neue_Seiten' ),
+        'Ancientpages'              => array( 'Älteste_Seiten' ),
+        'Deadendpages'              => array( 'Sackgassenseiten' ),
+        'Protectedpages'            => array( 'Geschützte_Seiten' ),
+        'Allpages'                  => array( 'Alle_Seiten' ),
+        'Prefixindex'               => array( 'Präfixindex' ) ,
+        'Ipblocklist'               => array( 'Gesperrte_IPs' ),
+        'Specialpages'              => array( 'Spezialseiten' ),
+        'Contributions'             => array( 'Beiträge' ),
+        'Emailuser'                 => array( 'E-Mail' ),
+        'Whatlinkshere'             => array( 'Linkliste', 'Verweisliste' ),
+        'Recentchangeslinked'       => array( 'Änderungen_an_verlinkten_Seiten' ),
+        'Movepage'                  => array( 'Verschieben' ),
+        'Blockme'                   => array( 'Proxy-Sperre' ),
+        'Booksources'               => array( 'ISBN-Suche' ),
+        'Categories'                => array( 'Kategorien' ),
+        'Export'                    => array( 'Exportieren' ),
+        'Version'                   => array( 'Version' ),
+        'Allmessages'               => array( 'MediaWiki-Systemnachrichten' ),
+        'Log'                       => array( 'Logbuch' ),
+        'Blockip'                   => array( 'Sperren' ),
+        'Undelete'                  => array( 'Wiederherstellen' ),
+        'Import'                    => array( 'Importieren' ),
+        'Lockdb'                    => array( 'Datenbank_sperren' ),
+        'Unlockdb'                  => array( 'Datenbank_entsperren' ),
+        'Userrights'                => array( 'Benutzerrechte' ),
+        'MIMEsearch'                => array( 'MIME-Typ-Suche' ),
+        'Unwatchedpages'            => array( 'Ignorierte_Seiten', 'Unbeobachtete_Seiten' ),
+        'Listredirects'             => array( 'Weiterleitungen' ),
+        'Revisiondelete'            => array( 'Versionslöschung' ),
+        'Unusedtemplates'           => array( 'Unbenutzte_Vorlagen' ),
+        'Randomredirect'            => array( 'Zufällige_Weiterleitung' ),
+        'Mypage'                    => array( 'Meine_Benutzerseite' ),
+        'Mytalk'                    => array( 'Meine_Diskussionsseite' ),
+        'Mycontributions'           => array( 'Meine_Beiträge' ),
+        'Listadmins'                => array( 'Administratoren' ),
+        'Search'                    => array( 'Suche' ),
+        'Withoutinterwiki'          => array( 'Fehlende_Interwikis' ),
+);
+
+$dateFormats = array(
+	'mdy time' => 'H:i',
+	'mdy date' => 'M j. Y',
+	'mdy both' => 'H:i, M j. Y',
+
+	'dmy time' => 'H:i',
+	'dmy date' => 'j. F Y',
+	'dmy both' => 'H:i, j. M Y',
+
+	'ymd time' => 'H:i',
+	'ymd date' => 'Y M j',
+	'ymd both' => 'H:i, Y M j',
+);
+
+$messages = array(
+# User preference toggles
+'tog-underline'               => 'Links unterstreichen:',
+'tog-highlightbroken'         => 'Links auf leere Seiten hervorheben',
+'tog-justify'                 => 'Text als Blocksatz',
+'tog-hideminor'               => 'Kleine Änderungen ausblenden',
+'tog-extendwatchlist'         => 'Erweiterte Beobachtungsliste',
+'tog-usenewrc'                => 'Erweiterte Darstellung (benötigt JavaScript)',
+'tog-numberheadings'          => 'Überschriften automatisch nummerieren',
+'tog-showtoolbar'             => 'Bearbeiten-Werkzeugleiste anzeigen',
+'tog-editondblclick'          => 'Seiten mit Doppelklick bearbeiten (JavaScript)',
+'tog-editsection'             => 'Links zum Bearbeiten einzelner Absätze anzeigen',
+'tog-editsectiononrightclick' => 'Einzelne Absätze per Rechtsklick bearbeiten (JavaScript)',
+'tog-showtoc'                 => 'Anzeigen eines Inhaltsverzeichnisses bei Seiten mit mehr als 3 Überschriften',
+'tog-rememberpassword'        => 'Benutzer soll auf diesem Computer dauerhaft angemeldet bleiben',
+'tog-editwidth'               => 'Text-Eingabefeld mit voller Breite',
+'tog-watchcreations'          => 'Selbst erstellte Seiten automatisch beobachten',
+'tog-watchdefault'            => 'Selbst geänderte und neu erstellte Seiten automatisch beobachten',
+'tog-watchmoves'              => 'Selbst verschobene Seiten automatisch beobachten',
+'tog-watchdeletion'           => 'Selbst gelöschte Seiten automatisch beobachten',
+'tog-minordefault'            => 'Alle eigenen Änderungen als geringfügig markieren',
+'tog-previewontop'            => 'Vorschau oberhalb des Bearbeitungsfensters anzeigen',
+'tog-previewonfirst'          => 'Beim ersten Bearbeiten immer die Vorschau anzeigen',
+'tog-nocache'                 => 'Seitencache deaktivieren',
+'tog-enotifwatchlistpages'    => 'Bei Änderungen an beobachteten Seiten E-Mails senden.',
+'tog-enotifusertalkpages'     => 'Bei Änderungen an meiner Benutzer-Diskussionsseite E-Mails senden.',
+'tog-enotifminoredits'        => 'Auch bei kleinen Änderungen an beobachteten Seiten E-Mails senden.',
+'tog-enotifrevealaddr'        => 'Ihre E-Mail-Adresse wird in Benachrichtigungsmails gezeigt',
+'tog-shownumberswatching'     => 'Anzahl der beobachtenden Benutzer anzeigen',
+'tog-fancysig'                => 'Signatur ohne Verlinkung zur Benutzerseite',
+'tog-externaleditor'          => 'Externen Editor als Standard benutzen',
+'tog-externaldiff'            => 'Externes Diff-Programm als Standard benutzen',
+'tog-showjumplinks'           => '„Wechseln-zu“-Links ermöglichen',
+'tog-uselivepreview'          => 'Live-Vorschau nutzen (JavaScript) (experimentell)',
+'tog-forceeditsummary'        => 'Warnen, wenn beim Speichern die Zusammenfassung fehlt',
+'tog-watchlisthideown'        => 'Eigene Bearbeitungen in der Beobachtungsliste ausblenden',
+'tog-watchlisthidebots'       => 'Bearbeitungen durch Bots in der Beobachtungsliste ausblenden',
+'tog-watchlisthideminor'      => 'Kleine Bearbeitungen in der Beobachtungsliste ausblenden',
+'tog-nolangconversion'        => 'Konvertierung von Sprachvarianten deaktivieren',
+'tog-ccmeonemails'            => 'Schicke mir Kopien der E-Mails, die ich anderen Benutzern sende.',
+'tog-diffonly'                => 'Zeige beim Versionsvergleich nur die Unterschiede, nicht die vollständige Seite',
+
+'underline-always'  => 'immer',
+'underline-never'   => 'nie',
+'underline-default' => 'von Browsereinstellung abhängig',
+
+'skinpreview' => '(Vorschau)',
+
+# Dates
+'sunday'        => 'Sonntag',
+'monday'        => 'Montag',
+'tuesday'       => 'Dienstag',
+'wednesday'     => 'Mittwoch',
+'thursday'      => 'Donnerstag',
+'friday'        => 'Freitag',
+'saturday'      => 'Samstag',
+'sun'           => 'So',
+'mon'           => 'Mo',
+'tue'           => 'Di',
+'wed'           => 'Mi',
+'thu'           => 'Do',
+'fri'           => 'Fr',
+'sat'           => 'Sa',
+'january'       => 'Januar',
+'february'      => 'Februar',
+'march'         => 'März',
+'april'         => 'April',
+'may_long'      => 'Mai',
+'june'          => 'Juni',
+'july'          => 'Juli',
+'august'        => 'August',
+'september'     => 'September',
+'october'       => 'Oktober',
+'november'      => 'November',
+'december'      => 'Dezember',
+'january-gen'   => 'Januars',
+'february-gen'  => 'Februars',
+'march-gen'     => 'Märzes',
+'april-gen'     => 'Aprils',
+'may-gen'       => 'Mais',
+'june-gen'      => 'Junis',
+'july-gen'      => 'Julis',
+'august-gen'    => 'Augusts',
+'september-gen' => 'Septembers',
+'october-gen'   => 'Oktobers',
+'november-gen'  => 'Novembers',
+'december-gen'  => 'Dezembers',
+'jan'           => 'Jan.',
+'feb'           => 'Feb.',
+'mar'           => 'Mär.',
+'apr'           => 'Apr.',
+'may'           => 'Mai',
+'jun'           => 'Jun.',
+'jul'           => 'Jul.',
+'aug'           => 'Aug.',
+'sep'           => 'Sep.',
+'oct'           => 'Okt.',
+'nov'           => 'Nov.',
+'dec'           => 'Dez.',
+
+# Bits of text used by many pages
+'categories'            => 'Kategorien',
+'pagecategories'        => '{{PLURAL:$1|Kategorie|Kategorien}}',
+'category_header'       => 'Seiten in der Kategorie „$1“',
+'subcategories'         => 'Unterkategorien',
+'category-media-header' => 'Medien in der Kategorie „$1“',
+
+'mainpagetext'      => 'MediaWiki wurde erfolgreich installiert.',
+'mainpagedocfooter' => 'Hilfe zur Benutzung und Konfiguration der Wiki Software finden Sie im [http://meta.wikimedia.org/wiki/Help:Contents Benutzerhandbuch].',
+
+'about'          => 'Über',
+'article'        => 'Seite',
+'newwindow'      => '(wird in einem neuen Fenster geöffnet)',
+'cancel'         => 'Abbrechen',
+'qbfind'         => 'Finden',
+'qbbrowse'       => 'Blättern',
+'qbedit'         => 'Ändern',
+'qbpageoptions'  => 'Seitenoptionen',
+'qbpageinfo'     => 'Seitendaten',
+'qbmyoptions'    => 'Meine Seiten',
+'qbspecialpages' => 'Spezialseiten',
+'moredotdotdot'  => 'Mehr …',
+'mypage'         => 'Eigene Seite',
+'mytalk'         => 'Eigene Diskussion',
+'anontalk'       => 'Diskussionsseite dieser IP',
+'navigation'     => 'Navigation',
+
+# Metadata in edit box
+'metadata_help' => 'Metadaten:',
+
+'errorpagetitle'    => 'Fehler',
+'returnto'          => 'Zurück zur Seite $1.',
+'tagline'           => 'Aus {{SITENAME}}',
+'help'              => 'Hilfe',
+'search'            => 'Suche',
+'searchbutton'      => 'Suche',
+'go'                => 'Ausführen',
+'searcharticle'     => 'Seite',
+'history'           => 'Versionen',
+'history_short'     => 'Versionen/Autoren',
+'updatedmarker'     => '(geändert)',
+'info_short'        => 'Information',
+'printableversion'  => 'Druckversion',
+'permalink'         => 'Permanentlink',
+'print'             => 'Drucken',
+'edit'              => 'bearbeiten',
+'editthispage'      => 'Seite bearbeiten',
+'delete'            => 'löschen',
+'deletethispage'    => 'Diese Seite löschen',
+'undelete_short'    => '{{PLURAL:$1|1 Version|$1 Versionen}} wiederherstellen',
+'protect'           => 'schützen',
+'protect_change'    => 'Schutz ändern',
+'protectthispage'   => 'Seite schützen',
+'unprotect'         => 'freigeben',
+'unprotectthispage' => 'Schutz aufheben',
+'newpage'           => 'Neue Seite',
+'talkpage'          => 'Diskussion',
+'talkpagelinktext'  => 'Diskussion',
+'specialpage'       => 'Spezialseite',
+'personaltools'     => 'Persönliche Werkzeuge',
+'postcomment'       => 'Kommentar hinzufügen',
+'articlepage'       => 'Seite',
+'talk'              => 'Diskussion',
+'views'             => 'Ansichten',
+'toolbox'           => 'Werkzeuge',
+'userpage'          => 'Benutzerseite',
+'projectpage'       => 'Meta-Text',
+'imagepage'         => 'Bildseite',
+'mediawikipage'     => 'Inhaltsseite anzeigen',
+'templatepage'      => 'Vorlagenseite anzeigen',
+'viewhelppage'      => 'Hilfeseite anzeigen',
+'categorypage'      => 'Kategorieseite anzeigen',
+'viewtalkpage'      => 'Diskussion',
+'otherlanguages'    => 'Andere Sprachen',
+'redirectedfrom'    => '(Weitergeleitet von $1)',
+'redirectpagesub'   => 'Weiterleitung',
+'lastmodifiedat'    => 'Diese Seite wurde zuletzt am $1 um $2 Uhr geändert.', # $1 date, $2 time
+'viewcount'         => 'Diese Seite wurde bisher $1 mal abgerufen.',
+'protectedpage'     => 'Geschützte Seite',
+'jumpto'            => 'Wechseln zu:',
+'jumptonavigation'  => 'Navigation',
+'jumptosearch'      => 'Suche',
+
+# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
+'aboutsite'         => 'Über {{SITENAME}}',
+'aboutpage'         => '{{ns:project}}:Über_{{SITENAME}}',
+'bugreports'        => 'Kontakt',
+'bugreportspage'    => '{{ns:project}}:Kontakt',
+'copyright'         => 'Inhalt ist verfügbar unter der $1.',
+'copyrightpagename' => '{{SITENAME}} Urheberrecht',
+'copyrightpage'     => '{{ns:project}}:Urheberrecht',
+'currentevents'     => 'Aktuelle Ereignisse',
+'currentevents-url' => 'Aktuelle Ereignisse',
+'disclaimers'       => 'Impressum',
+'disclaimerpage'    => '{{ns:project}}:Impressum',
+'edithelp'          => 'Bearbeitungshilfe',
+'edithelppage'      => '{{ns:project}}:Bearbeitungshilfe',
+'faq'               => 'FAQ',
+'faqpage'           => '{{ns:project}}:FAQ',
+'helppage'          => '{{ns:project}}:Hilfe',
+'mainpage'          => 'Hauptseite',
+'policy-url'        => 'Project:Leitlinien',
+'portal'            => '{{SITENAME}}-Portal',
+'portal-url'        => '{{ns:project}}:Portal',
+'privacy'           => 'Datenschutz',
+'privacypage'       => '{{ns:project}}:Datenschutz',
+'sitesupport'       => 'Spenden',
+'sitesupport-url'   => '{{ns:project}}:Spenden',
+
+'badaccess'        => 'Keine ausreichenden Rechte',
+'badaccess-group0' => 'Sie haben nicht die erforderliche Berechtigung für diese Aktion.',
+'badaccess-group1' => 'Diese Aktion ist beschränkt auf Benutzer, die der Gruppe „$1“ angehören.',
+'badaccess-group2' => 'Diese Aktion ist beschränkt auf Benutzer, die einer der Gruppen „$1“ angehören.',
+'badaccess-groups' => 'Diese Aktion ist beschränkt auf Benutzer, die einer der Gruppen „$1“ angehören.',
+
+'versionrequired'     => 'Version $1 von MediaWiki ist erforderlich',
+'versionrequiredtext' => 'Version $1 von MediaWiki ist erforderlich, um diese Seite zu nutzen. Siehe die [[{{ns:special}}:Version|Versionsseite]]',
+
+'ok'                  => 'Suche',
+'pagetitle'           => '$1 - {{SITENAME}}',
+'retrievedfrom'       => 'Von „$1“',
+'youhavenewmessages'  => 'Sie haben $2 auf Ihrer $1.',
+'newmessageslink'     => 'Diskussionsseite',
+'newmessagesdifflink' => 'neue Nachrichten',
+'editsection'         => 'bearbeiten',
+'editold'             => 'bearbeiten',
+'editsectionhint'     => 'Abschnitt bearbeiten: $1',
+'toc'                 => 'Inhaltsverzeichnis',
+'showtoc'             => 'Anzeigen',
+'hidetoc'             => 'Verbergen',
+'thisisdeleted'       => '$1 ansehen oder wiederherstellen?',
+'viewdeleted'         => '$1 anzeigen?',
+'restorelink'         => '$1 {{PLURAL:$1|gelöschte Version|gelöschte Versionen}}',
+'feedlinks'           => 'Feed:',
+'feed-invalid'        => 'Ungültiger Abonnement-Typ.',
+'feed-atom'           => 'Atom',
+'feed-rss'            => 'RSS',
+
+# Short words for each namespace, by default used in the 'article' tab in monobook
+'nstab-main'      => 'Seite',
+'nstab-user'      => 'Benutzerseite',
+'nstab-media'     => 'Media',
+'nstab-special'   => 'Spezialseite',
+'nstab-project'   => 'Portalseite',
+'nstab-image'     => 'Datei',
+'nstab-mediawiki' => 'MediaWiki-Systemtext',
+'nstab-template'  => 'Vorlage',
+'nstab-help'      => 'Hilfeseite',
+'nstab-category'  => 'Kategorie',
+
+# Main script and global functions
+'nosuchaction'      => 'Diese Aktion gibt es nicht',
+'nosuchactiontext'  => 'Die in der URL angegebene Aktion wird von der MediaWiki-Software nicht unterstützt.',
+'nosuchspecialpage' => 'Diese Spezialseite gibt es nicht',
+'nospecialpagetext' => 'Die aufgerufene Spezialseite ist nicht vorhanden. Alle verfügbaren Spezialseiten sind auf der [[{{ns:special}}:Specialpages|Liste der Spezialseiten]] zu finden.',
+
+# General errors
+'error'                => 'Fehler',
+'databaseerror'        => 'Fehler in der Datenbank',
+'dberrortext'          => 'Es gab einen Syntaxfehler in der Datenbankabfrage.
+Die letzte Datenbankabfrage lautete: <blockquote><tt>$1</tt></blockquote> aus der Funktion „<tt>$2</tt>“.
+MySQL meldete den Fehler „<tt>$3: $4</tt>“.',
+'dberrortextcl'        => 'Es gab einen Syntaxfehler in der Datenbankabfrage.
+Die letzte Datenbankabfrage lautete: „$1“ aus der Funktion „<tt>$2</tt>“.
+MySQL meldete den Fehler: „<tt>$3: $4</tt>“.',
+'noconnect'            => 'Konnte keine Verbindung zur Datenbank auf $1 herstellen',
+'nodb'                 => 'Konnte Datenbank $1 nicht auswählen',
+'cachederror'          => 'Das Folgende ist eine Kopie aus dem Cache und möglicherweise nicht aktuell.',
+'laggedslavemode'      => 'Achtung: Die angezeigte Seite enthält unter Umständen nicht die jüngsten Bearbeitungen.',
+'readonly'             => 'Datenbank ist gesperrt',
+'enterlockreason'      => 'Bitte geben Sie einen Grund ein, warum die Datenbank gesperrt werden soll und eine Abschätzung über die Dauer der Sperrung',
+'readonlytext'         => 'Die Datenbank ist vorübergehend für Neueinträge und Änderungen gesperrt. Bitte versuchen Sie es später noch einmal.
+
+Grund der Sperrung: $1',
+'missingarticle'       => 'Der Text für „$1“ wurde nicht in der Datenbank gefunden.
+
+Die Seite ist möglicherweise gelöscht oder verschoben worden.
+
+Falls dies nicht der Fall ist, haben Sie eventuell einen Fehler in der Software gefunden. Bitte melden Sie dies einem [[{{MediaWiki:grouppage-sysop}}|Administrator]] unter Nennung der URL.',
+'readonly_lag'         => 'Die Datenbank wurde kurzzeitig automatisch gesperrt, damit sich die Datenbanken abgleichen können.',
+'internalerror'        => 'Interner Fehler',
+'filecopyerror'        => 'Die Datei „$1“ konnte nicht nach „$2“ kopiert werden.',
+'filerenameerror'      => 'Die Datei „$1“ konnte nicht nach „$2“ umbenannt werden.',
+'filedeleteerror'      => 'Die Datei „$1“ konnte nicht gelöscht werden.',
+'filenotfound'         => 'Die Datei „$1“ wurde nicht gefunden.',
+'unexpected'           => 'Unerwarteter Wert: „$1“=„$2“.',
+'formerror'            => 'Fehler: Die Eingaben konnten nicht verarbeitet werden.',
+'badarticleerror'      => 'Diese Aktion kann auf diese Seite nicht angewendet werden.',
+'cannotdelete'         => 'Die gewählte Seite kann nicht gelöscht werden. Möglicherweise wurde sie bereits gelöscht.',
+'badtitle'             => 'Ungültiger Titel',
+'badtitletext'         => 'Der Titel der angeforderten Seite ist ungültig, leer oder ein ungültiger Sprachlink von einem anderen Wiki.',
+'perfdisabled'         => "'''Entschuldigung!''' Diese Funktion wurde wegen Überlastung des Servers vorübergehend deaktiviert.",
+'perfdisabledsub'      => 'Hier ist eine gespeicherte Kopie von $1:', # obsolete?
+'perfcached'           => 'Die folgenden Daten stammen aus dem Cache und sind möglicherweise nicht aktuell:',
+'perfcachedts'         => 'Diese Daten stammen aus dem Cache, letztes Update: $1',
+'querypage-no-updates' => "'''Die Aktualisierungsfunktion für diese Seite ist zur Zeit deaktiviert. Die Daten werden bis auf weiteres nicht erneuert.'''",
+'wrong_wfQuery_params' => 'Falsche Parameter für wfQuery()<br />
+Funktion: $1<br />
+Abfrage: $2',
+'viewsource'           => 'Quelltext betrachten',
+'viewsourcefor'        => 'für $1',
+'protectedpagetext'    => 'Diese Seite ist für das Bearbeiten gesperrt.',
+'viewsourcetext'       => 'Sie können jedoch den Quelltext dieser Seite betrachten und kopieren:',
+'protectedinterface'   => 'Diese Seite enthält Text für das Sprach-Interface der Software und ist gesperrt, um Missbrauch zu verhindern.',
+'editinginterface'     => "'''Warnung:''' Diese Seite enthält von der MediaWiki-Software benutzten Text. Änderungen wirken sich auf die Benutzeroberfläche aus.",
+'sqlhidden'            => '(SQL-Abfrage versteckt)',
+'cascadeprotected'     => 'Diese Seite ist zur Bearbeitung gesperrt. Sie ist in die {{PLURAL:$1|folgende Seite|folgenden Seiten}} eingebunden, die mittels der Kaskadensperroption geschützt {{PLURAL:$1|ist|sind}}:',
+
+# Login and logout pages
+'logouttitle'                => 'Benutzer-Abmeldung',
+'logouttext'                 => 'Sie sind nun abgemeldet.
+Sie können {{SITENAME}} jetzt anonym weiterbenutzen, oder sich unter dem selben oder einem anderen Benutzernamen wieder anmelden.',
+'welcomecreation'            => '== Willkommen, $1! ==
+
+Ihr Benutzerkonto wurde eingerichtet. Vergessen Sie nicht, Ihre Einstellungen anzupassen.',
+'loginpagetitle'             => 'Benutzer-Anmeldung',
+'yourname'                   => 'Benutzername',
+'yourpassword'               => 'Passwort',
+'yourpasswordagain'          => 'Passwort wiederholen',
+'remembermypassword'         => 'Benutzer auf diesem Computer dauerhaft anmelden',
+'yourdomainname'             => 'Ihre Domain',
+'externaldberror'            => 'Entweder es liegt ein Fehler bei der externen Authentifizierung vor, oder Sie dürfen Ihr externes Benutzerkonto nicht aktualisieren.',
+'loginproblem'               => "'''Es gab ein Problem mit Ihrer Anmeldung.'''<br />Bitte versuchen Sie es nochmal!",
+'alreadyloggedin'            => "'''Benutzer $1, Sie sind bereits angemeldet!'''<br />",
+'login'                      => 'Anmelden',
+'loginprompt'                => 'Um sich bei {{SITENAME}} anmelden zu können, müssen Cookies aktiviert sein.',
+'userlogin'                  => 'Anmelden',
+'logout'                     => 'Abmelden',
+'userlogout'                 => 'Abmelden',
+'notloggedin'                => 'Nicht angemeldet',
+'nologin'                    => 'Sie haben kein Benutzerkonto? $1.',
+'nologinlink'                => 'Neues Benutzerkonto anlegen',
+'createaccount'              => 'Benutzerkonto anlegen',
+'gotaccount'                 => 'Sie haben bereits ein Benutzerkonto? $1.',
+'gotaccountlink'             => 'Anmelden',
+'createaccountmail'          => 'über E-Mail',
+'badretype'                  => 'Die beiden Passwörter stimmen nicht überein.',
+'userexists'                 => 'Dieser Benutzername ist schon vergeben. Bitte wählen Sie einen anderen.',
+'youremail'                  => 'E-Mail-Adresse**:',
+'username'                   => 'Benutzername:',
+'uid'                        => 'Benutzer-ID:',
+'yourrealname'               => 'Echter Name*:',
+'yourlanguage'               => 'Sprache der Benutzeroberfläche:',
+'yourvariant'                => 'Variante',
+'yournick'                   => 'Unterschrift:',
+'badsig'                     => 'Die Syntax der Unterschrift ist ungültig; bitte HTML überprüfen.',
+'email'                      => 'E-Mail',
+'prefs-help-email-enotif'    => 'An diese Adresse werden auch die Benachrichtigungsmails geschickt, sofern Sie das eingeschaltet haben.',
+'prefs-help-realname'        => '* <strong>Echter Name</strong> (optional): Für anerkennende Nennungen Ihres Namens im Zusammenhang mit Ihren Beiträgen.',
+'loginerror'                 => 'Fehler bei der Anmeldung',
+'prefs-help-email'           => '** <strong>E-Mail-Adresse</strong> (optional): Erlaubt anderen Benutzern Sie über Ihre Benutzerseite zu kontaktieren,
+ohne dass Sie Ihre E-Mail-Adresse veröffentlichen müssen.
+Für den Fall, dass Sie Ihr Passwort vergessen haben, kann Ihnen ein temporäres Einmal-Passwort zugesendet werden.',
+'nocookiesnew'               => 'Der Benutzerzugang wurde erstellt, aber Sie sind nicht eingeloggt. {{SITENAME}} benötigt für diese Funktion Cookies, bitte aktivieren Sie diese und loggen sich dann mit Ihrem neuen Benutzernamen und dem Passwort ein.',
+'nocookieslogin'             => '{{SITENAME}} benutzt Cookies zum Einloggen der Benutzer. Sie haben Cookies deaktiviert, bitte aktivieren Sie diese und versuchen es erneut.',
+'noname'                     => 'Sie müssen einen gültigen Benutzernamen angeben.',
+'loginsuccesstitle'          => 'Anmeldung erfolgreich',
+'loginsuccess'               => 'Sie sind jetzt als „$1“ bei {{SITENAME}} angemeldet.',
+'nosuchuser'                 => 'Der Benutzername „$1“ existiert nicht. Überprüfen Sie die Schreibweise oder legen Sie ein neues Benutzerkonto an.',
+'nosuchusershort'            => 'Der Benutzername „$1“ existiert nicht. Bitte überprüfen Sie die Schreibweise.',
+'nouserspecified'            => 'Bitte geben Sie einen Benutzernamen an.',
+'wrongpassword'              => 'Das Passwort ist falsch (oder fehlt). Bitte versuchen Sie es erneut.',
+'wrongpasswordempty'         => 'Das eingegebene Passwort war leer. Bitte versuchen Sie es erneut.',
+'mailmypassword'             => 'Neues Passwort zusenden',
+'passwordremindertitle'      => 'Neues Passwort für ein {{SITENAME}}-Benutzerkonto',
+'passwordremindertext'       => 'Jemand mit der IP-Adresse $1, wahrscheinlich Sie selbst, hat ein neues Passwort für die Anmeldung bei {{SITENAME}} ($4) angefordert.
+
+Das automatisch generierte Passwort für Benutzer $2 lautet nun: $3
+
+Sie sollten sich jetzt anmelden und das Passwort ändern: {{fullurl:{{ns:special}}}}:Userlogin
+
+Bitte ignoriesen Sie diese E-Mail, falls Sie diese nicht selbst angefordert haben. Das alte Passwort bleibt weiterhin gültig.',
+'noemail'                    => 'Benutzer „$1“ hat keine E-Mail-Adresse angegeben.',
+'passwordsent'               => 'Ein temporäres Passwort wurde an die E-Mail-Adresse von Benutzer „$1“ gesendet.
+Bitte melden Sie sich damit an, sobald Sie es erhalten.
+Das alte Passwort bleibt weiterhin gültig.',
+'blocked-mailpassword'       => 'Die von Ihnen verwendete IP-Adresse ist für das Ändern von Seiten gesperrt. Um einen Missbrauch zu verhindern, wurde die Möglichkeit zur Anforderung eines neuen Passwortes ebenfalls gesperrt.',
+'eauthentsent'               => 'Eine Bestätigungsmail wurde an die angegebene E-Mail-Adresse verschickt.
+
+Bevor eine E-Mail von anderen Benutzern über die {{SITENAME}}-Mailfunktion empfangen werden kann, muss die Adresse und ihre tatsächliche Zugehörigkeit zu diesem Benutzerkonto erst bestätigt werden. Bitte befolgen Sie die Hinweise in der Bestätigungsmail.',
+'throttled-mailpassword'     => 'Es wurde innerhalb der letzten $1 Stunden bereits ein neues Passwort angefordert. Um einen Missbrauch der Funktion zu verhindern, kann nur alle $1 Stunden ein neues Passwort angefordert werden.',
+'mailerror'                  => 'Fehler beim Senden der E-Mail: $1',
+'acct_creation_throttle_hit' => 'Sie haben schon $1 Benutzerkonten und können jetzt keine weiteren mehr anlegen.',
+'emailauthenticated'         => 'Ihre E-Mail-Adresse wurde bestätigt: $1.',
+'emailnotauthenticated'      => 'Ihre E-Mail-Adresse ist noch nicht bestätigt. Die folgenden E-Mail-Funktionen stehen erst nach erfolgreicher Bestätigung zur Verfügung.',
+'noemailprefs'               => 'Geben Sie eine E-Mail-Adresse an, damit die nachfolgenden Funktionen zur Verfügung stehen.',
+'emailconfirmlink'           => 'E-Mail-Adresse bestätigen (authentifizieren).',
+'invalidemailaddress'        => 'Die E-Mail-Adresse wurde nicht akzeptiert, da sie ein ungültiges Format aufzuweisen scheint. Bitte geben Sie eine Adresse in einem gültigen Format ein, oder leeren Sie das Feld.',
+'accountcreated'             => 'Benutzerkonto erstellt',
+'accountcreatedtext'         => 'Das Benutzerkonto $1 wurde eingerichtet.',
+
+# Password reset dialog
+'resetpass'               => 'Passwort für Benutzerkonto zurücksetzen',
+'resetpass_announce'      => 'Anmeldung mit dem per E-Mail zugesandten Code. Um die Anmeldung abzuschließen, müssen Sie jetzt ein neues Passwort wählen.',
+'resetpass_text'          => '<!-- Add text here -->',
+'resetpass_header'        => 'Passwort zurücksetzen',
+'resetpass_submit'        => 'Passwort übermitteln und anmelden',
+'resetpass_success'       => 'Ihr Passwort wurde erfolgreich geändert. Es folgt die Anmeldung …',
+'resetpass_bad_temporary' => 'Ungültiges vorläufiges Passwort. Sie haben bereits Ihr Passwort erfolgreich geändert oder ein neues, vorläufiges Passwort angefordert.',
+'resetpass_forbidden'     => 'Das Passwort kann in {{SITENAME}} nicht geändert werden.',
+'resetpass_missing'       => 'Leeres Formular.',
+
+# Edit page toolbar
+'bold_sample'     => 'Fetter Text',
+'bold_tip'        => 'Fetter Text',
+'italic_sample'   => 'Kursiver Text',
+'italic_tip'      => 'Kursiver Text',
+'link_sample'     => 'Link-Text',
+'link_tip'        => 'Interner Link',
+'extlink_sample'  => 'http://www.beispiel.de Link-Text',
+'extlink_tip'     => 'Externer Link (http:// beachten)',
+'headline_sample' => 'Ebene 2 Überschrift',
+'headline_tip'    => 'Ebene 2 Überschrift',
+'math_sample'     => 'Formel hier einfügen',
+'math_tip'        => 'Mathematische Formel (LaTeX)',
+'nowiki_sample'   => 'Unformatierten Text hier einfügen',
+'nowiki_tip'      => 'Unformatierter Text',
+'image_sample'    => 'Beispiel.jpg',
+'image_tip'       => 'Bildlink',
+'media_sample'    => 'Beispiel.ogg',
+'media_tip'       => 'Mediendatei-Link',
+'sig_tip'         => 'Ihre Signatur mit Zeitstempel',
+'hr_tip'          => 'Horizontale Linie (sparsam verwenden)',
+
+# Edit pages
+'summary'                   => 'Zusammenfassung',
+'subject'                   => 'Betreff',
+'minoredit'                 => 'Nur Kleinigkeiten wurden verändert',
+'watchthis'                 => 'Diese Seite beobachten',
+'savearticle'               => 'Seite speichern',
+'preview'                   => 'Vorschau',
+'showpreview'               => 'Vorschau zeigen',
+'showlivepreview'           => 'Live-Vorschau',
+'showdiff'                  => 'Änderungen zeigen',
+'anoneditwarning'           => 'Sie bearbeiten diese Seite ohne angemeldet zu sein. Statt eines Benutzernamens wird die IP-Adresse in der Versionsgeschichte aufgezeichnet.',
+'missingsummary'            => "'''Hinweis:''' Sie haben keine Zusammenfassung angegeben. Wenn Sie erneut „Speichern“ klicken, wird Ihre Änderung ohne Zusammenfassung übernommen.",
+'missingcommenttext'        => 'Bitte geben Sie eine Zusammenfassung ein.',
+'missingcommentheader'      => "'''ACHTUNG:''' Sie haben keine Überschrift im Feld „Betreff:“ eingegeben. Wenn Sie erneut auf „Seite speichern“ klicken, wird Ihre Bearbeitung ohne Überschrift gespeichert.",
+'summary-preview'           => 'Vorschau der Zusammenfassungszeile',
+'subject-preview'           => 'Vorschau des Betreffs',
+'blockedtitle'              => 'Benutzer ist gesperrt',
+'blockedtext'               => 'Ihr Benutzername oder Ihre IP-Adresse wurde von $1 gesperrt. Als Grund wurde angegeben:
+
+:$2
+
+<p style="border-style: solid; border-color: red; border-width: 1px; padding:5px;"><b>Ein Lesezugriff ist weiterhin möglich,</b> 
+nur die Bearbeitung und Erstellung von Seiten in {{SITENAME}} wurde gesperrt.
+Sollte diese Nachricht angezeigt werden, obwohl nur lesend zugriffen wurde, sind Sie einem (roten) Link auf einen noch nicht existenten Artikel gefolgt.</p>
+
+Die Dauer der Sperrung findet sich im <span class="plainlinks">[{{fullurl:Special:Ipblocklist|&action=search&limit=&ip=%23}}$5 Logbuch]</span>.
+
+Sie können $1 oder einen der anderen [[{{MediaWiki:grouppage-sysop}}|Administratoren]] kontaktieren, um über die Sperre zu diskutieren.
+
+Bitte geben Sie Ihre IP-Adresse $3 und die Sperr-ID #$5 in jeder Anfrage an.',
+'blockedoriginalsource'     => "Der Quelltext von '''$1''' wird hier angezeigt:",
+'blockededitsource'         => "Der Quelltext von '''Ihren Änderungen''' an '''$1''':",
+'whitelistedittitle'        => 'Zum Bearbeiten ist es erforderlich, angemeldet zu sein',
+'whitelistedittext'         => 'Sie müssen sich $1, um Seiten bearbeiten zu können.',
+'whitelistreadtitle'        => 'Zum Lesen ist es erforderlich, angemeldet zu sein',
+'whitelistreadtext'         => 'Sie müssen sich [[Special:Userlogin|hier anmelden]], um Seiten lesen zu können.',
+'whitelistacctitle'         => 'Sie sind nicht berechtigt, ein Benutzerkonto anzulegen.',
+'whitelistacctext'          => 'Um in {{SITENAME}} Benutzer anlegen zu dürfen, müssen Sie sich [[Special:Userlogin|hier anmelden]] und die nötigen Berechtigungen haben.',
+'confirmedittitle'          => 'Zum Bearbeiten ist die E-Mail-Bestätigung erforderlich.',
+'confirmedittext'           => 'Sie müssen Ihre E-Mail-Adresse erst bestätigen, bevor Sie bearbeiten können. Bitte ergänzen und bestätigen Sie Ihre E-Mail-Adresse in den [[Special:Preferences|Einstellungen]].',
+'nosuchsectiontitle'        => 'Abschnitt nicht vorhanden',
+'nosuchsectiontext'         => 'Sie versuchten den nicht vorhandenen Abschnitt $1 zu bearbeiten. Es können jedoch nur bereits vorhandene Abschnitte bearbeitet werden.',
+'loginreqtitle'             => 'Anmeldung erforderlich',
+'loginreqlink'              => 'anmelden',
+'loginreqpagetext'          => 'Sie müssen sich $1, um Seiten lesen zu können.',
+'accmailtitle'              => 'Passwort wurde verschickt',
+'accmailtext'               => 'Das Passwort für den [[{{ns:user}}:$1]] wurde an $2 geschickt.',
+'newarticle'                => '(Neu)',
+'newarticletext'            => 'Hier den Text der neuen Seite eintragen. Bitte nur in ganzen Sätzen schreiben und keine urheberrechtsgeschützten Texte anderer kopieren.',
+'anontalkpagetext'          => "---- ''Diese Seite dient dazu, einem nicht angemeldeten Benutzer Nachrichten zu hinterlassen. Wenn Sie mit den Kommentaren auf dieser Seite nichts anfangen können, richten sie sich vermutlich an einen früheren Inhaber Ihrer IP-Adresse und Sie können sie ignorieren. Wenn Sie ein anonymer Benutzer sind und denken, dass irrelevante Kommentare an Sie gerichtet wurden, [[Special:Userlogin|melden Sie sich bitte an]], um zukünftige Verwirrung zu vermeiden. ''",
+'noarticletext'             => '(Diese Seite enthält momentan noch keinen Text)',
+'clearyourcache'            => "'''Hinweis:''' Nach dem Speichern muss der Browserchache geleert werden, um die Änderungen zu sehen:<br />
+'''Mozilla/Firefox:''' ''Strg-Shift-R'', '''Internet Explorer:''' ''Strg-F5'', '''Opera:''' ''F5'', '''Safari:''' ''Cmd-Shift-R'', '''Konqueror:''' ''F5''.",
+'usercssjsyoucanpreview'    => '<strong>Tipp:</strong> Benutzen Sie den Vorschau-Button, um Ihr neues css/js vor dem Speichern zu testen.',
+'usercsspreview'            => "== Vorschau Ihres Benutzer-CSS ==
+'''Beachten Sie:''' Nach dem Speichern müssen Sie Ihren Browser anweisen, die neue Version zu laden: '''Mozilla/Firefox:''' ''Strg-Shift-R'', '''Internet Explorer:''' ''Strg-F5'', '''Opera:''' ''F5'', '''Safari:''' ''Cmd-Shift-R'', '''Konqueror:''' ''F5''.",
+'userjspreview'             => "== Vorschau Ihres Benutzer-JavaScript ==
+'''Beachten Sie:''' Nach dem Speichern müssen Sie Ihren Browser anweisen, die neue Version zu laden: '''Mozilla/Firefox:''' ''Strg-Shift-R'', '''Internet Explorer:''' ''Strg-F5'', '''Opera:''' ''F5'', '''Safari:''' ''Cmd-Shift-R'', '''Konqueror:''' ''F5''.",
+'userinvalidcssjstitle'     => "'''Warnung:''' Es existiert kein Skin „$1“. Bitte bedenken Sie, dass benutzerspezifische .css- und .js-Seiten mit einem Kleinbuchstaben anfangen müssen, also z.B. ''Benutzer:Mustermann/monobook.css'' an Stelle von ''Benutzer:Mustermann/Monobook.css''.",
+'updated'                   => '(Geändert)',
+'note'                      => '<strong>Hinweis:</strong>',
+'previewnote'               => 'Dies ist nur eine Vorschau, die Seite wurde noch nicht gespeichert!',
+'previewconflict'           => 'Diese Vorschau gibt den Inhalt des oberen Textfeldes wieder; so wird die Seite aussehen, wenn Sie jetzt speichern.',
+'session_fail_preview'      => '<strong>Ihre Bearbeitung konnte nicht gespeichert werden, da Ihre Sitzungsdaten verloren gegangen sind.
+Bitte versuchen Sie es erneut. Sollte das Problem bestehen bleiben, loggen Sie sich kurz aus und wieder ein.</strong>',
+'session_fail_preview_html' => "<strong>Ihre Bearbeitung konnte nicht gespeichert werden, da Ihre Sitzungsdaten verloren gegangen sind.</strong>
+
+''Da in diesem Wiki reines HTML aktiviert ist, wurde die Vorschau ausgeblendet um JavaScript Attacken vorzubeugen.''
+
+<strong>Bitte versuchen Sie es erneut. Sollte das Problem bestehen bleiben, melden Sie sich kurz ab und wieder an.</strong>",
+'importing'                 => 'importiere $1',
+'editing'                   => 'Bearbeiten von $1',
+'editinguser'               => 'Bearbeiten von Benutzer <b>$1</b>',
+'editingsection'            => 'Bearbeiten von $1 (Absatz)',
+'editingcomment'            => 'Bearbeiten von $1 (Kommentar)',
+'editconflict'              => 'Bearbeitungskonflikt: $1',
+'explainconflict'           => 'Jemand anders hat diese Seite geändert, nachdem Sie angefangen haben diese zu bearbeiten.
+Das obere Textfeld enthält den aktuellen Stand.
+Das untere Textfeld enthält Ihre Änderungen.
+Bitte fügen Sie Ihre Änderungen in das obere Textfeld ein.
+<b>Nur</b> der Inhalt des oberen Textfeldes wird gespeichert, wenn Sie auf „Speichern“ klicken!<br />',
+'yourtext'                  => 'Ihr Text',
+'storedversion'             => 'Gespeicherte Version',
+'nonunicodebrowser'         => '<strong>Achtung:</strong> Ihr Browser kann Unicode-Zeichen nicht richtig verarbeiten. Bitte verwenden Sie einen anderen Browser um Seiten zu bearbeiten.',
+'editingold'                => '<strong>ACHTUNG: Sie bearbeiten eine alte Version dieser Seite.
+Wenn Sie speichern, werden alle neueren Versionen überschrieben.</strong>',
+'yourdiff'                  => 'Unterschiede',
+'copyrightwarning'          => '<strong>Bitte <big>kopieren Sie keine Webseiten</big>, die nicht Ihre eigenen sind, benutzen Sie <big>keine urheberrechtlich geschützten Werke</big> ohne Erlaubnis des Copyright-Inhabers!</strong><br />
+Sie geben uns hiermit Ihre Zusage, dass Sie den Text <strong>selbst verfasst</strong> haben, dass der Text Allgemeingut (<strong>public domain</strong>) ist, oder dass der <strong>Copyright-Inhaber</strong> seine <strong>Zustimmung</strong> gegeben hat. Falls dieser Text bereits woanders veröffentlicht wurde, weisen Sie bitte auf der Diskussionsseite darauf hin.
+<i>Bitte beachten Sie, dass alle {{SITENAME}}-Beiträge automatisch unter der „$2“ stehen (siehe $1 für Details). Falls Sie nicht möchten, dass Ihre Arbeit hier von anderen verändert und verbreitet wird, dann drücken Sie nicht auf „Speichern“.</i>',
+'copyrightwarning2'         => 'Bitte beachten Sie, dass alle Beiträge zu {{SITENAME}} von anderen Mitwirkenden bearbeitet, geändert oder gelöscht werden können.
+Reichen Sie hier keine Texte ein, falls Sie nicht wollen dass diese ohne Einschränkung geändert werden können.
+
+Sie bestätigen hiermit auch, dass Sie diese Texte selbst geschrieben haben oder diese von einer gemeinfreien Quelle kopiert haben
+(siehe $1 für weitere Details). <strong>ÜBERTRAGEN SIE OHNE GENEHMIGUNG KEINE URHEBERRECHTLICH GESCHÜTZTEN INHALTE!</strong>',
+'longpagewarning'           => '<strong>WARNUNG: Diese Seite ist $1 kB groß; einige Browser könnten Probleme haben, Seiten zu bearbeiten, die größer als 32 kB sind.
+Überlegen Sie bitte, ob eine Aufteilung der Seite in kleinere Abschnitte möglich ist.</strong>',
+'longpageerror'             => '<strong>FEHLER: Der Text, den Sie zu speichern versuchen, ist $1 kB groß. Das ist größer als das erlaubte Maximum von $2 kB. Speicherung nicht möglich.</strong>',
+'readonlywarning'           => '<strong>WARNUNG: Die Datenbank wurde während der Seitenbearbeitung für Wartungsarbeiten gesperrt, so dass Sie die Seite im Moment nicht
+speichern können. Sichern Sie den Text und versuchen Sie die Änderungen später einzuspielen.</strong>',
+'protectedpagewarning'      => "'''ACHTUNG: Diese Seite wurde gesperrt, so dass sie nur durch Benutzer mit Administratorrechten bearbeitet werden kann.'''",
+'semiprotectedpagewarning'  => "'''Halbsperrung:''' Die Seite wurde so gesperrt, dass nur registrierte Benutzer diese ändern können.",
+'cascadeprotectedwarning'   => "'''ACHTUNG: Diese Seite wurde gesperrt, so dass sie nur durch Benutzer mit Administratorrechten bearbeitet werden kann. Sie ist in die {{PLURAL:$1|folgende Seite|folgenden Seiten}} eingebunden, die mittels der Kaskadensperroption geschützt {{PLURAL:$1|ist|sind}}:'''",
+'templatesused'             => 'Folgende Vorlagen werden von dieser Seite verwendet:',
+'templatesusedpreview'      => 'Folgende Vorlagen werden von dieser Artikelvorschau verwendet:',
+'templatesusedsection'      => 'Folgende Vorlagen werden von diesem Abschnitt verwendet:',
+'template-protected'        => '(schreibgeschützt)',
+'template-semiprotected'    => '(schreibgeschützt für unangemeldete und neue Benutzer)',
+'edittools'                 => '<!-- Dieser Text wird unter dem „Bearbeiten“-Formular sowie dem "Hochladen"-Formular angezeigt. -->',
+'nocreatetitle'             => 'Die Erstellung neuer Seiten ist eingeschränkt.',
+'nocreatetext'              => 'Der Server hat das Erstellen neuer Seiten eingeschränkt. Sie können bestehende Seiten ändern oder sich [[Special:Userlogin|anmelden]].',
+
+# "Undo" feature
+'undo-success' => 'Die Änderung konnte erfolgreich rückgängig gemacht werden. Bitte die Bearbeitung in der Vergleichsansicht kontrollieren und dann auf „Seite speichern“ klicken, um sie zu speichern.',
+'undo-failure' => '<span class="error">Die Änderung konnte nicht rückgängig gemacht werden, da der betroffene Abschnitt zwischenzeitlich verändert wurde.</span>',
+'undo-summary' => 'Änderung $1 von [[{{ns:special}}:Contributions/$2|$2]] ([[{{ns:user_talk}}:$2|Diskussion]]) wurde rückgängig gemacht.',
+
+# Account creation failure
+'cantcreateaccounttitle' => 'Benutzerkonto kann nicht erstellt werden.',
+'cantcreateaccounttext'  => 'Die Erstellung eines Benutzerkontos von der IP-Adresse <b>$1</b> wurde gesperrt.
+Dies geschah vermutlich auf Grund von wiederholtem Vandalismus von Besuchern der Bildungseinrichtung oder anderen Benutzern des Internet-Service-Providers.',
+
+# History pages
+'revhistory'                  => 'Frühere Versionen',
+'viewpagelogs'                => 'Logbücher für diese Seite anzeigen',
+'nohistory'                   => 'Es gibt keine früheren Versionen dieser Seite.',
+'revnotfound'                 => 'Diese Version wurde nicht gefunden.',
+'revnotfoundtext'             => 'Die Version dieser Seite, nach der Sie suchen, konnte nicht gefunden werden. Bitte überprüfen Sie die URL dieser Seite.',
+'loadhist'                    => 'Lade Liste mit früheren Versionen',
+'currentrev'                  => 'Aktuelle Version',
+'revisionasof'                => 'Version vom $1',
+'revision-info'               => 'Version vom $1 von $2',
+'previousrevision'            => '← Nächstältere Version',
+'nextrevision'                => 'Nächstjüngere Version →',
+'currentrevisionlink'         => 'Aktuelle Version',
+'cur'                         => 'Aktuell',
+'next'                        => 'Nächste',
+'last'                        => 'Vorherige',
+'orig'                        => 'Original',
+'page_first'                  => 'Anfang',
+'page_last'                   => 'Ende',
+'histlegend'                  => 'Zur Anzeige der Änderungen einfach die zu vergleichenden Versionen auswählen und die Schaltfläche „{{int:compareselectedversions}}“ klicken.<br />
+* (Aktuell) = Unterschied zur aktuellen Version, (Vorherige) = Unterschied zur vorherigen Version
+* Uhrzeit/Datum = Version zu dieser Zeit, Benutzername/IP-Adresse des Bearbeiters, K = Kleine Änderung',
+'deletedrev'                  => '[gelöscht]',
+'histfirst'                   => 'Älteste',
+'histlast'                    => 'Neueste',
+'historysize'                 => '($1 Bytes)',
+'historyempty'                => '(leer)',
+
+# Revision feed
+'history-feed-title'          => 'Versionsgeschichte',
+'history-feed-description'    => 'Versionsgeschichte für diese Seite in {{SITENAME}}',
+'history-feed-item-nocomment' => '$1 um $2', # user at time
+'history-feed-empty'          => 'Die angeforderte Seite existiert nicht. Vielleicht wurde sie gelöscht oder verschoben. [[Special:Search|Durchsuchen]] Sie {{SITENAME}} für passende neue Seiten.',
+
+# Revision deletion
+'revisiondelete'              => 'Versionen löschen/wiederherstellen',
+'rev-deleted-comment'         => '(Bearbeitungskommentar entfernt)',
+'rev-deleted-user'            => '(Benutzername entfernt)',
+'rev-deleted-event'           => '(Aktion entfernt)',
+'rev-deleted-text-permission' => '<div class="mw-warning plainlinks"> Diese Version wurde gelöscht und ist nicht mehr öffentlich einsehbar.
+Nähere Angaben zum Löschvorgang sowie eine Begründung finden sich im [{{fullurl:Special:Log/delete|page={{FULLPAGENAMEE}}}} Lösch-Logbuch].</div>',
+'rev-deleted-text-view'       => '<div class="mw-warning plainlinks">Diese Version wurde gelöscht und ist nicht mehr öffentlich einsehbar.
+Als Administrator können Sie sie weiterhin einsehen.
+Nähere Angaben zum Löschvorgang sowie eine Begründung finden sich im [{{fullurl:Special:Log/delete|page={{FULLPAGENAMEE}}}} Lösch-Logbuch].</div>',
+'rev-delundel'                => 'zeige/verstecke',
+'revdelete-nooldid-title'     => 'Keine Version angegeben',
+'revdelete-nooldid-text'      => 'Sie haben keine Version angegeben, auf die diese Aktion ausgeführt werden soll.',
+'revdelete-selected'          => "{{PLURAL:$2|Ausgewählte Version|Ausgewählte Versionen}} von '''$1:'''",
+'logdelete-selected'          => "{{PLURAL:$2|Ausgewählter Logbucheintrag|Ausgewählte Logbucheinträge}} für '''$1:'''",
+'revdelete-text'              => 'Der Inhalt oder andere Bestandteile gelöschter Versionen sind nicht mehr öffentlich einsehbar, erscheinen jedoch weiterhin als Einträge in der Versionsgeschichte. 
+
+Administratoren können den entfernten Inhalt oder andere entfernte Bestandteile weiterhin einsehen und wiederherstellen, es sei denn, es wurde festgelegt, dass die Zugangsbeschränkungen auch für Administratoren gelten.',
+'revdelete-legend'            => 'Einschränkungen für die Versionen festlegen:',
+'revdelete-hide-text'         => 'Text der Version verstecken',
+'revdelete-hide-name'         => 'Logbuch-Aktion verstecken',
+'revdelete-hide-comment'      => 'Bearbeitungskommentar verstecken',
+'revdelete-hide-user'         => 'Benutzernamen/die IP des Bearbeiters verstecken',
+'revdelete-hide-restricted'   => 'Diese Einschränkungen gelten auch für Administratoren',
+'revdelete-suppress'          => 'Grund der Löschung auch für Administratoren versteckt',
+'revdelete-hide-image'        => 'Bildinhalt verstecken',
+'revdelete-unsuppress'        => 'Einschränkungen für wiederhergestellte Versionen aufheben',
+'revdelete-log'               => 'Kommentar/Begründung (erscheint im Logbuch):',
+'revdelete-submit'            => 'Auf ausgewählte Version anwenden',
+'revdelete-logentry'          => 'Versionsansicht geändert für [[$1]]',
+'logdelete-logentry'          => 'änderte die Sichtbarkeit für [[$1]]',
+'revdelete-logaction'         => '$1 {{plural:$1|Version|Versionen}} auf Modus $2 gesetzt',
+'logdelete-logaction'         => '$1 {{plural:$1|Eintrag|Einträge}} für [[$3]] auf Modus $2 gesetzt',
+'revdelete-success'           => 'Versionsansicht erfolgreich geändert.',
+'logdelete-success'           => 'Logbuch-Aktion erfolgreich gesetzt.',
+
+# Oversight log
+'oversightlog'    => 'Oversight-Logbuch',
+'overlogpagetext' => 'Das ist das Logbuch der Löschungen und Sperren, die vor Administratoren versteckt sind.',
+
+# Diffs
+'difference'                => '(Unterschied zwischen Versionen)',
+'loadingrev'                => 'Lade Versionen zur Unterscheidung',
+'lineno'                    => 'Zeile $1:',
+'editcurrent'               => 'Die aktuelle Version dieser Seite bearbeiten',
+'selectnewerversionfordiff' => 'Eine neuere Version zum Vergleich auswählen',
+'selectolderversionfordiff' => 'Eine ältere Version zum Vergleich auswählen',
+'compareselectedversions'   => 'Gewählte Versionen vergleichen',
+'editundo'                  => 'rückgängig',
+'diff-multi'                => "<span style='font-size: smaller'>(Der Versionsvergleich bezieht {{plural:$1|eine dazwischen liegende Version|$1 dazwischen liegende Versionen}} mit ein.)</span>",
+
+# Search results
+'searchresults'         => 'Suchergebnisse',
+'searchresulttext'      => 'Für mehr Informationen zur Suche siehe die [[{{MediaWiki:helppage}}|Hilfeseite]].',
+'searchsubtitle'        => 'Für Ihre Suchanfrage „[[:$1]]“.',
+'searchsubtitleinvalid' => 'Für Ihre Suchanfrage „$1“.',
+'badquery'              => 'Falsche Suchanfrage',
+'badquerytext'          => 'Wir konnten Ihre Suchanfrage nicht verarbeiten.
+Vermutlich haben Sie versucht, ein Wort zu suchen, das kürzer als vier Buchstaben ist.
+Dies funktioniert im Moment noch nicht.
+Möglicherweise haben Sie auch die Anfrage falsch formuliert, z.B.
+„Lohn und und Steuern“.
+Bitte versuchen Sie eine anders formulierte Suchanfrage.',
+'matchtotals'           => 'Die Suchanfrage „$1“ stimmt mit $2 Seitentiteln und dem Inhalt von $3 Seiten überein.',
+'noexactmatch'          => "'''Es existiert keine Seite mit dem Titel „$1“.'''
+
+Versuchen Sie es über die Volltextsuche.
+Alternativ können Sie auch den [[Special:Allpages|alphabetischen Index]] nach ähnlichen Begriffen durchsuchen.
+
+Wenn Sie sich mit dem Thema auskennen, können Sie selbst die Seite „[[$1]]“ verfassen.",
+'titlematches'          => 'Übereinstimmungen mit Seitentiteln',
+'notitlematches'        => 'Keine Übereinstimmungen mit Seitentiteln',
+'textmatches'           => 'Übereinstimmungen mit Inhalten',
+'notextmatches'         => 'Keine Übereinstimmungen mit Inhalten',
+'prevn'                 => 'vorherige $1',
+'nextn'                 => 'nächste $1',
+'viewprevnext'          => 'Zeige ($1) ($2) ($3).',
+'showingresults'        => "Hier {{PLURAL:$1|ist '''1''' Ergebnis|sind '''$1''' Ergebnisse}}, beginnend mit Nummer '''$2'''.",
+'showingresultsnum'     => "Hier {{PLURAL:$3|ist '''1''' Ergebnis|sind '''$1''' Ergebnisse}}, beginnend mit Nummer '''$2'''.",
+'nonefound'             => '<strong>Hinweis</strong>: Erfolglose Suchanfragen werden häufig dadurch verursacht, dass mehr als ein Suchbegriff angegeben wurde. Nur Seiten die alle Suchbegriffe enthalten werden hier angezeigt. Versuchen Sie in diesem Fall die Anzahl der Suchbegriffe zu verringern.',
+'powersearch'           => 'Suche',
+'powersearchtext'       => 'Suche in Namensräumen:<br />$1<br />$2 Weiterleitungen anzeigen<br />Suche nach: $3 $9',
+'searchdisabled'        => 'Die {{SITENAME}} Suche wurde deaktiviert. Sie können unterdessen über Google suchen. Bitte bedenken Sie, dass der Suchindex für {{SITENAME}} veraltet sein kann.',
+'blanknamespace'        => '(Seiten)',
+
+# Preferences page
+'preferences'              => 'Einstellungen',
+'preferences-summary'      => 'Auf dieser Spezialseite können Sie Ihre Zugangsdaten ändern und bestimmte Teile der Oberfläche individuell anpassen ',
+'mypreferences'            => 'Einstellungen',
+'prefsnologin'             => 'Nicht angemeldet',
+'prefsnologintext'         => 'Sie müssen [[Special:Userlogin|angemeldet]] sein, um Ihre Einstellungen ändern zu können.',
+'prefsreset'               => 'Die Eingaben wurden verworfen, es erfolgte keine Speicherung.',
+'qbsettings'               => 'Seitenleiste',
+'qbsettings-none'          => 'Keine',
+'qbsettings-fixedleft'     => 'Links, fest',
+'qbsettings-fixedright'    => 'Rechts, fest',
+'qbsettings-floatingleft'  => 'Links, schwebend',
+'qbsettings-floatingright' => 'Rechts, schwebend',
+'changepassword'           => 'Passwort ändern',
+'skin'                     => 'Skin',
+'math'                     => 'TeX',
+'dateformat'               => 'Datumsformat',
+'datedefault'              => 'Standard',
+'datetime'                 => 'Datum und Zeit',
+'math_failure'             => 'Parser-Fehler',
+'math_unknown_error'       => 'Unbekannter Fehler',
+'math_unknown_function'    => 'Unbekannte Funktion',
+'math_lexing_error'        => "'Lexing'-Fehler",
+'math_syntax_error'        => 'Syntaxfehler',
+'math_image_error'         => 'die PNG-Konvertierung schlug fehl',
+'math_bad_tmpdir'          => 'Kann das Temporärverzeichnis für mathematische Formeln nicht anlegen oder beschreiben.',
+'math_bad_output'          => 'Kann das Zielverzeichnis für mathematische Formeln nicht anlegen oder beschreiben.',
+'math_notexvc'             => 'Das texvc-Programm kann nicht gefunden werden. Bitte math/README beachten.',
+'prefs-personal'           => 'Benutzerdaten',
+'prefs-rc'                 => 'Anzeige von „Letzte Änderungen“',
+'prefs-watchlist'          => 'Beobachtungsliste',
+'prefs-watchlist-days'     => 'Anzahl der Tage, die die Beobachtungsliste standardmäßig umfassen soll:',
+'prefs-watchlist-edits'    => 'Anzahl der Einträge in der erweiterten Beobachtungsliste:',
+'prefs-misc'               => 'Verschiedenes',
+'saveprefs'                => 'Einstellungen speichern',
+'resetprefs'               => 'Eingaben verwerfen',
+'oldpassword'              => 'Altes Passwort:',
+'newpassword'              => 'Neues Passwort:',
+'retypenew'                => 'Neues Passwort (nochmal):',
+'textboxsize'              => 'Bearbeiten',
+'rows'                     => 'Zeilen',
+'columns'                  => 'Spalten',
+'searchresultshead'        => 'Suche',
+'resultsperpage'           => 'Treffer pro Seite:',
+'contextlines'             => 'Zeilen pro Treffer:',
+'contextchars'             => 'Zeichen pro Zeile:',
+'stubthreshold'            => 'Kleine Seiten markieren bis (Byte):',
+'recentchangesdays'        => 'Anzahl der Tage, die die Liste der „Letzten Änderungen“ standardmäßig umfassen soll:',
+'recentchangescount'       => 'Anzahl der Einträge in „Letzte Änderungen“ und „Neue Artikel“:',
+'savedprefs'               => 'Ihre Einstellungen wurden gespeichert.',
+'timezonelegend'           => 'Zeitzone',
+'timezonetext'             => 'Geben Sie die Anzahl der Stunden ein, die zwischen Ihrer Zeitzone und UTC liegen.',
+'localtime'                => 'Ortszeit:',
+'timezoneoffset'           => 'Unterschied¹:',
+'servertime'               => 'Aktuelle Zeit auf dem Server:',
+'guesstimezone'            => 'Vom Browser übernehmen',
+'allowemail'               => 'E-Mail-Empfang von anderen Benutzern ermöglichen.',
+'defaultns'                => 'In diesen Namensräumen soll standardmäßig gesucht werden:',
+'default'                  => 'Voreinstellung',
+'files'                    => 'Dateien',
+
+# User rights
+'userrights-lookup-user'     => 'Verwalte Gruppenzugehörigkeit',
+'userrights-user-editname'   => 'Benutzername:',
+'editusergroup'              => 'Benutzerrechte bearbeiten',
+'userrights-editusergroup'   => 'Bearbeite Gruppenzugehörigkeit des Benutzers',
+'saveusergroups'             => 'Gruppenzugehörigkeiten speichern',
+'userrights-groupsmember'    => 'Mitglied von:',
+'userrights-groupsavailable' => 'Verfügbare Gruppen:',
+'userrights-groupshelp'      => "Wählen Sie die Gruppen, aus denen der Benutzer entfernt oder zu denen er hinzugefügt werden soll.
+Nicht selektierte Gruppen werden nicht geändert. Eine Selektion kann mit '''Strg + Linksklick''' (bzw. Ctrl + Linksklick) entfernt werden.",
+'userrights-reason'          => 'Grund:',
+
+# Groups
+'group'            => 'Gruppe:',
+'group-bot'        => 'Bots',
+'group-sysop'      => 'Administratoren',
+'group-bureaucrat' => 'Bürokraten',
+'group-all'        => '(alle)',
+
+'group-bot-member'        => 'Bot',
+'group-sysop-member'      => 'Administrator',
+'group-bureaucrat-member' => 'Bürokrat',
+
+'grouppage-bot'        => '{{ns:project}}:Bots',
+'grouppage-sysop'      => '{{ns:project}}:Administratoren',
+'grouppage-bureaucrat' => '{{ns:project}}:Bürokraten',
+
+# User rights log
+'rightslog'      => 'Rechte-Logbuch',
+'rightslogtext'  => 'Dies ist das Logbuch der Änderungen der Benutzerrechte.',
+'rightslogentry' => 'änderte die Gruppenzugehörigkeit für „[[$1]]“ von „$2“ auf „$3“.',
+'rightsnone'     => '(-)',
+
+# Recent changes
+'nchanges'                          => '$1 {{PLURAL:$1|Änderung|Änderungen}}',
+'recentchanges'                     => 'Letzte Änderungen',
+'recentchangestext'                 => "Auf dieser Seite können Sie die letzten Änderungen auf '''{{SITENAME}}''' nachverfolgen.",
+'recentchanges-feed-description'    => 'Verfolge mit diesem Feed die letzten Änderungen in {{SITENAME}}.',
+'rcnote'                            => "Angezeigt {{PLURAL:$1|wird '''1''' Änderung|werden die letzten '''$1''' Änderungen}} {{PLURAL:$2|des letzten Tages|der letzten '''$2''' Tage}}. Stand: $3. (<b><tt>Neu</tt></b>&nbsp;– neuer Eintrag; <b><tt>K</tt></b>&nbsp;– kleine Änderung; <b><tt>B</tt></b>&nbsp;– Änderung durch einen Bot; ''(± Zahl)''&nbsp;– Größenänderung in Byte)",
+'rcnotefrom'                        => 'Angezeigt werden die Änderungen seit <b>$2</b> (max. <b>$1</b> Einträge).',
+'rclistfrom'                        => 'Nur Änderungen seit $1 zeigen.',
+'rcshowhideminor'                   => 'Kleine Änderungen $1',
+'rcshowhidebots'                    => 'Bots $1',
+'rcshowhideliu'                     => 'Angemeldete Benutzer $1',
+'rcshowhideanons'                   => 'Anonyme Benutzer $1',
+'rcshowhidepatr'                    => 'Überprüfte Änderungen $1',
+'rcshowhidemine'                    => 'Eigene Beiträge $1',
+'rclinks'                           => 'Zeige die letzten $1 Änderungen der letzten $2 Tage.<br />$3',
+'diff'                              => 'Unterschied',
+'hist'                              => 'Versionen',
+'hide'                              => 'ausblenden',
+'show'                              => 'einblenden',
+'minoreditletter'                   => 'K',
+'newpageletter'                     => 'N',
+'boteditletter'                     => 'B',
+'number_of_watching_users_pageview' => '[$1 beobachtende/r Benutzer]',
+'rc_categories'                     => 'Nur Seiten aus den Kategorien (getrennt mit „|“):',
+'rc_categories_any'                 => 'Alle',
+'rc-change-size'                    => '$1 {{PLURAL:$1|Byte|Bytes}}',
+
+# Recent changes linked
+'recentchangeslinked'          => 'Änderungen an verlinkten Seiten',
+'recentchangeslinked-noresult' => 'Im ausgewählten Zeitraum wurden an den verlinkten Seiten keine Änderungen vorgenommen.',
+'recentchangeslinked-summary'  => "Diese Spezialseite listet die letzten Änderungen der verlinkten Seiten auf. Seiten auf Ihrer Beobachtungsliste sind '''fett''' geschrieben.",
+
+# Upload
+'upload'                      => 'Hochladen',
+'uploadbtn'                   => 'Datei hochladen',
+'reupload'                    => 'Abbrechen',
+'reuploaddesc'                => 'Zurück zur Hochladen-Seite.',
+'uploadnologin'               => 'Nicht angemeldet',
+'uploadnologintext'           => 'Sie müssen [[Special:Userlogin|angemeldet sein]], um Dateien hochladen zu können.',
+'upload_directory_read_only'  => 'Der Webserver hat keine Schreibrechte für das Upload-Verzeichnis ($1).',
+'uploaderror'                 => 'Fehler beim Hochladen',
+'uploadtext'                  => "Gehen Sie zu der [[Special:Imagelist|Liste hochgeladener Dateien]], um vorhandene Dateien zu suchen und anzuzeigen.
+
+Benutzen Sie dieses Formular, um neue Dateien hochzuladen. Klicken Sie auf '''„Durchsuchen...“''', um einen Dateiauswahl-Dialog zu öffnen.
+Nach der Auswahl einer Datei wird der Dateiname im Textfeld '''„Quelldatei“''' angezeigt.
+Bestätigen Sie dann die Copyright-Vereinbarung und klicken anschließend auf '''„Datei hochladen“'''.
+Dies kann eine Weile dauern, besonders bei einer langsamen Internet-Verbindung.
+
+Um ein '''Bild''' in einer Seite zu verwenden, schreiben Sie an Stelle des Bildes zum Beispiel:
+* '''<tt><nowiki>[[</nowiki>{{ns:image}}:Datei.jpg<nowiki>]]</nowiki></tt>'''
+* '''<tt><nowiki>[[</nowiki>{{ns:image}}:Datei.jpg|Link-Text<nowiki>]]</nowiki></tt>'''
+
+Um '''Mediendateien''' einzubinden, verwenden Sie zum Beispiel:
+* '''<tt><nowiki>[[</nowiki>{{ns:media}}:Datei.ogg<nowiki>]]</nowiki></tt>'''
+* '''<tt><nowiki>[[</nowiki>{{ns:media}}:Datei.ogg|Link-Text<nowiki>]]</nowiki></tt>'''
+
+Bitte beachten Sie, dass, genau wie bei normalen Seiteninhalten, andere Benutzer Ihre Dateien löschen oder verändern können.",
+'uploadlog'                   => 'Datei-Logbuch',
+'uploadlogpage'               => 'Datei-Logbuch',
+'uploadlogpagetext'           => 'Dies ist das Logbuch der hochgeladenen Dateien, siehe auch [[{{ns:special}}:Newimages]].',
+'filename'                    => 'Dateiname',
+'filedesc'                    => 'Beschreibung',
+'fileuploadsummary'           => 'Beschreibung/Quelle:',
+'filestatus'                  => 'Copyright-Status',
+'filesource'                  => 'Quelle',
+'uploadedfiles'               => 'Hochgeladene Dateien',
+'ignorewarning'               => 'Warnung ignorieren und Datei speichern.',
+'ignorewarnings'              => 'Warnungen ignorieren',
+'minlength'                   => 'Dateinamen müssen mindestens drei Buchstaben lang sein.',
+'illegalfilename'             => 'Der Dateiname „$1“ enthält mindestens ein nicht erlaubtes Zeichen. Bitte benennen Sie die Datei um und versuchen Sie diese erneut hochzuladen.',
+'badfilename'                 => 'Der Dateiname wurde in „$1“ geändert.',
+'filetype-badmime'            => 'Dateien mit dem MIME-Typ „$1“ dürfen nicht hochgeladen werden.',
+'filetype-badtype'            => "'''„.$1“''' ist ein unerwünschtes Dateiformat.
+: Erlaubt sind: $2",
+'filetype-missing'            => 'Die hochzuladende Datei hat keine Erweiterung (z. B. „.jpg“).',
+'large-file'                  => 'Die Dateigröße sollte nach Möglichkeit $1 nicht überschreiten. Diese Datei ist $2 groß.',
+'largefileserver'             => 'Die Datei ist größer als die vom Server eingestellte Maximalgröße.',
+'emptyfile'                   => 'Die hochgeladene Datei ist leer. Der Grund kann ein Tippfehler im Dateinamen sein. Bitte kontrollieren Sie, ob Sie die Datei wirklich hochladen wollen.',
+'fileexists'                  => 'Eine Datei mit diesem Namen existiert bereits. Wenn Sie auf „Datei speichern“ klicken, wird die Datei überschrieben. Bitte prüfen Sie <strong><tt>$1</tt></strong>, wenn Sie sich nicht sicher sind.',
+'fileexists-extension'        => "Eine Datei mit ähnlichem Namen existiert bereits:<br />
+Name der hochzuladenden Datei: <strong><tt>$1</tt></strong><br />
+Name der vorhandenen Datei: <strong><tt>$2</tt></strong><br />
+Nur die Dateiendung unterscheidet sich in Groß-/Kleinschreibung. Bitte prüfen Sie, ob die Dateien inhaltlich identisch sind.",
+'fileexists-thumb'            => "'''<center>Vorhandenes Bild</center>'''",
+'fileexists-thumbnail-yes'    => "Bei der Datei scheint es sich um ein Bild verringerter Größe <i>(thumbnail)</i> zu handeln. Bitte prüfen Sie die Datei <strong><tt>$1</tt></strong>.<br />
+Wenn es sich um das Bild in Originalgröße handelt, so braucht kein separates Vorschaubild hochgeladen zu werden.",
+'file-thumbnail-no'           => "Der Dateiname beginnt mit <strong><tt>$1</tt></strong>. Dies deutet auf ein Bild verringerter Größe <i>(thumbnail)</i> hin.
+Bitte prüfen Sie, ob Sie das Bild in voller Auflösung vorliegen haben und laden Sie dieses unter dem Originalnamen hoch.",
+'fileexists-forbidden'        => 'Mit diesem Namen existiert bereits eine Datei. Bitte gehen Sie zurück und laden Ihre Datei unter einem anderen Namen hoch. [[Image:$1|thumb|center|$1]]',
+'fileexists-shared-forbidden' => 'Mit diesem Namen existiert bereits eine Datei. Bitte gehen Sie zurück und laden Sie diese Datei unter einem anderen Namen hoch. [[Image:$1|thumb|center|$1]]',
+'successfulupload'            => 'Erfolgreich hochgeladen',
+'fileuploaded'                => 'Die Datei „$1“ wurde erfolgreich hochgeladen. Bitte folgen Sie dem Link $2 zur Beschreibungsseite und geben Sie weitere Informationen zur Datei an.
+
+Falls es sich um ein Bild gehandelt hat, so können Sie mit <tt><nowiki>[[</nowiki>{{ns:image}}<nowiki>:$1|thumb|Beschreibung]]</nowiki></tt> ein Vorschaubild auf der Seite erzeugen lassen.',
+'uploadwarning'               => 'Warnung',
+'savefile'                    => 'Datei speichern',
+'uploadedimage'               => 'hat [[$1]] hochgeladen',
+'uploaddisabled'              => 'Entschuldigung, das Hochladen ist deaktiviert.',
+'uploaddisabledtext'          => 'Das Hochladen von Dateien ist in {{SITENAME}} deaktiviert.',
+'uploadscripted'              => 'Diese Datei enthält HTML- oder Scriptcode, der irrtümlich von einem Webbrowser ausgeführt werden könnte.',
+'uploadcorrupt'               => 'Die Datei ist beschädigt oder hat einen falschen Namen. Bitte überprüfen Sie die Datei und laden Sie sie erneut hoch.',
+'uploadvirus'                 => 'Diese Datei enthält einen Virus! Details: $1',
+'sourcefilename'              => 'Quelldatei',
+'destfilename'                => 'Zielname',
+'watchthisupload'             => 'Diese Seite beobachten',
+'filewasdeleted'              => 'Eine Datei mit diesem Namen wurde schon einmal hochgeladen und zwischenzeitlich wieder gelöscht. Bitte prüfen Sie zuerst den Eintrag im $1, bevor Sie die Datei wirklich speichern.',
+
+'upload-proto-error'      => 'Falsches Protokoll',
+'upload-proto-error-text' => 'Die URL muss mit <code>http://</code> oder <code>ftp://</code> beginnen.',
+'upload-file-error'       => 'Interner Fehler',
+'upload-file-error-text'  => 'Bei der Erstellung einer temporären Datei auf dem Server ist ein interner Fehler aufgetreten. Bitte informieren Sie einen System-Administrator.',
+'upload-misc-error'       => 'Unbekannter Fehler beim Hochladen',
+'upload-misc-error-text'  => 'Beim Hochladen ist ein unbekannter Fehler aufgetreten. Prüfen Sie die URL auf Fehler, den Online-Status der Seite und versuchen Sie es erneut. Wenn das Problem weiterbesteht, informieren Sie einen System-Administrator.',
+
+# Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
+'upload-curl-error6'       => 'URL ist nicht erreichbar',
+'upload-curl-error6-text'  => 'Die angegebene URL ist nicht erreichbar. Prüfen Sie sowohl die URL auf Fehler als auch den Online-Status der Seite.',
+'upload-curl-error28'      => 'Zeitüberschreitung beim Hochladen',
+'upload-curl-error28-text' => 'Die Seite braucht zu lange für eine Antwort. Prüfen Sie, ob die Seite online ist, warten Sie einen kurzen Moment und versuchen Sie es dann erneut. Es kann sinnvoll sein, einen erneuten Versuch zu einer anderen Zeit zu probieren..',
+
+'license'            => 'Lizenz',
+'nolicense'          => 'keine Vorauswahl',
+'upload_source_url'  => ' (gültige, öffentlich zugängliche URL)',
+'upload_source_file' => ' (eine Datei auf Ihrem Computer)',
+
+# Image list
+'imagelist'                 => 'Dateiliste',
+'imagelist-summary'         => 'Diese Spezialseite listet alle hochgeladenen Dateien auf. Standardmäßig werden die zuletzt hochgeladenen Dateien zuerst angezeigt. Durch einen Klick auf die Spaltenüberschriften kann die Sortierung umgedreht werden oder es kann nach einer anderen Spalte sortiert werden.',
+'imagelisttext'             => "Hier ist eine Liste von '''$1''' {{PLURAL:$1|Datei|Dateien}}, sortiert $2.",
+'imagelistforuser'          => 'Diese Seite zeigt nur Dateien, die von $1 hochgeladen wurden.',
+'getimagelist'              => 'Lade Dateiliste',
+'ilsubmit'                  => 'Suche',
+'showlast'                  => 'Zeige die letzten $1 Dateien, sortiert nach $2.',
+'byname'                    => 'nach Name',
+'bydate'                    => 'nach Datum',
+'bysize'                    => 'nach Größe',
+'imgdelete'                 => 'Löschen',
+'imgdesc'                   => 'Beschreibung',
+'imgfile'                   => 'Datei',
+'imglegend'                 => 'Legende: (Beschreibung) = Zeige/Bearbeite Dateibeschreibung.',
+'imghistory'                => 'Dateiversionen',
+'revertimg'                 => 'Zurücksetzen',
+'deleteimg'                 => 'Löschen',
+'deleteimgcompletely'       => 'Alle Versionen dieser Datei löschen',
+'imghistlegend'             => 'Legende: (Aktuell) = Dies ist die aktuelle Datei, (Löschen) = lösche diese alte Version, (Zurücksetzen) = verwende wieder diese alte Version.',
+'imagelinks'                => 'Dateilinks',
+'linkstoimage'              => 'Die folgenden Seiten benutzen diese Datei:',
+'nolinkstoimage'            => 'Keine Seite benutzt diese Datei.',
+'sharedupload'              => 'Diese Datei ist ein gemeinsam genutzter Upload und kann von anderen Projekten verwendet werden.',
+'shareduploadwiki'          => 'Für weitere Informationen siehe $1.',
+'shareduploadwiki-linktext' => 'Datei-Beschreibungsseite',
+'noimage'                   => 'Eine Datei mit diesem Namen existiert nicht, Sie können sie jedoch $1.',
+'noimage-linktext'          => 'hochladen',
+'uploadnewversion-linktext' => 'Eine neue Version dieser Datei hochladen',
+'imagelist_date'            => 'Datum',
+'imagelist_name'            => 'Name',
+'imagelist_user'            => 'Benutzer',
+'imagelist_size'            => 'Größe (Byte)',
+'imagelist_description'     => 'Beschreibung',
+'imagelist_search_for'      => 'Suche nach Datei:',
+
+# MIME search
+'mimesearch'         => 'Suche nach MIME-Typ',
+'mimesearch-summary' => 'Auf dieser Spezialseite können die Dateien nach dem MIME-Typ gefiltert werden. Die Eingabe muss immer den Medien- und Subtyp beinhalten: <tt>image/jpeg</tt> (siehe Bildbeschreibungsseite).',
+'mimetype'           => 'MIME-Typ:',
+'download'           => 'Herunterladen',
+
+# Unwatched pages
+'unwatchedpages'         => 'Nicht beobachtete Seiten',
+'unwatchedpages-summary' => 'Diese Spezialseite zeigt alle Seiten, die von keinem Benutzer auf einer Beobachtungsliste stehen.',
+
+# List redirects
+'listredirects'         => 'Weiterleitungsliste',
+'listredirects-summary' => 'Diese Spezialseite listet Weiterleitungen auf.',
+
+# Unused templates
+'unusedtemplates'         => 'Nicht benutzte Vorlagen',
+'unusedtemplates-summary' => 'Diese Seite listet alle Vorlagen auf, die nicht in anderen Seiten eingebunden sind. Überprüfen Sie andere Links zu den Vorlagen, bevor Sie diese löschen.',
+'unusedtemplatestext'     => '',
+'unusedtemplateswlh'      => 'Andere Links',
+
+# Random redirect
+'randomredirect'         => 'Zufällige Weiterleitung',
+'randomredirect-nopages' => 'In diesem Namensraum sind keine Weiterleitungen vorhanden.',
+
+# Statistics
+'statistics'             => 'Statistik',
+'sitestats'              => 'Seitenstatistik',
+'userstats'              => 'Benutzerstatistik',
+'sitestatstext'          => "Es gibt insgesamt '''$1''' {{PLURAL:$1|Seite|Seiten}} in der Datenbank.
+Das schliesst Diskussionsseiten, Seiten über {{SITENAME}}, kleine Seiten, Weiterleitungen und andere Seiten ein,
+die eventuell nicht als Seiten gewertet werden können.
+
+Diese ausgenommen gibt es '''$2''' {{PLURAL:$2|Seite|Seiten}}, die als Seite gewertet werden {{PLURAL:$2|kann|können}}.
+
+Insgesamt {{PLURAL:$8|wurde '''1''' Datei|wurden '''$8''' Dateien}} hochgeladen.
+
+Insgesamt gab es '''$3''' {{PLURAL:$3|Seitenabruf|Seitenabrufe}} und '''$4''' {{PLURAL:$4|Seitenbearbeitung|Seitenbearbeitungen}} seit {{SITENAME}} eingerichtet wurde.
+Daraus ergeben sich '''$5''' Bearbeitungen pro Seite und '''$6''' Seitenabrufe pro Bearbeitung.
+
+Länge der [http://meta.wikimedia.org/wiki/Help:Job_queue „Job queue“]: '''$7'''",
+'userstatstext'          => "Es gibt '''$1''' {{PLURAL:$1|registrierten|registrierte}} [[Special:Listusers|Benutzer]].
+Davon {{PLURAL:$2|hat|haben}} '''$2''' (=$4%) $5-Rechte.",
+'statistics-mostpopular' => 'Meist besuchte Seiten',
+
+'disambiguations'      => 'Begriffsklärungsseiten',
+'disambiguationspage'  => '{{ns:project}}:Begriffsklärung',
+'disambiguations-text' => 'Die folgenden Seiten verlinken auf eine Seite zur Begriffsklärung. Sie sollten statt dessen auf die eigentlich gemeinte Seite verlinken.<br />Eine Seite wird als Begriffsklärungsseite behandelt, wenn [[MediaWiki:disambiguationspage]] auf sie verlinkt.<br />Links aus Namensräumen werden hier nicht aufgelistet.',
+
+'doubleredirects'         => 'Doppelte Weiterleitungen',
+'doubleredirects-summary' => '<b>Achtung:</b> Diese Liste kann „falsche Positive“ enthalten. Das ist dann der Fall, wenn eine Weiterleitung außer dem Weiterleitungs-Link noch weiteren Text mit anderen Links enthält. Letztere sollten dann entfernt werden.',
+'doubleredirectstext'     => '',
+
+'brokenredirects'         => 'Kaputte Weiterleitungen',
+'brokenredirects-summary' => 'Diese Spezialseite listet Weiterleitungen auf nicht existierende Artikel auf.',
+'brokenredirectstext'     => '',
+'brokenredirects-edit'    => '(bearbeiten)',
+'brokenredirects-delete'  => '(löschen)',
+
+'withoutinterwiki'        => 'Seiten ohne Links zu anderen Sprachen',
+'withoutinterwiki-header' => 'Die folgenden Seiten verlinken nicht auf andere Sprachversionen:',
+
+'fewestrevisions'         => 'Seiten mit den wenigsten Versionen',
+'fewestrevisions-summary' => 'Diese Spezialseite zeigt eine Liste von Seiten mit den wenigsten Bearbeitungen.',
+
+# Miscellaneous special pages
+'nbytes'                          => '$1 {{PLURAL:$1|Byte|Bytes}}',
+'ncategories'                     => '$1 {{PLURAL:$1|Kategorie|Kategorien}}',
+'nlinks'                          => '{{PLURAL:$1|1 Link|$1 Links}}',
+'nmembers'                        => '– {{PLURAL:$1|1 Eintrag|$1 Einträge}}',
+'nrevisions'                      => '{{PLURAL:$1|1 Bearbeitung|$1 Bearbeitungen}}',
+'nviews'                          => '{{PLURAL:$1|1 Abfrage|$1 Abfragen}}',
+'specialpage-empty'               => 'Die Seite enthält aktuell keine Einträge.',
+'lonelypages'                     => 'Verwaiste Seiten',
+'lonelypages-summary'             => 'Diese Spezialseite zeigt Seiten, auf die von keiner anderen Seite verlinkt wird. Diese verwaisten Seiten sind deshalb nicht erwünscht, oder eventuell fragwürdig, weil sie über die normale Navigation durch {{SITENAME}} nie aufgerufen werden können. ',
+'lonelypagestext'                 => '',
+'uncategorizedpages'              => 'Nicht kategorisierte Seiten',
+'uncategorizedpages-summary'      => 'Diese Spezialseite zeigt alle Seiten, die noch keiner Kategorie zugewiesen wurden.',
+'uncategorizedcategories'         => 'Nicht kategorisierte Kategorien',
+'uncategorizedcategories-summary' => 'Diese Spezialseite zeigt alle Kategorien, die selbst noch keiner Kategorie zugewiesen wurden.',
+'uncategorizedimages'             => 'Nicht kategorisierte Dateien',
+'uncategorizedimages-summary'     => 'Diese Spezialseite zeigt alle Dateien, die in keine Kategorie eingeordnet wurden.',
+'unusedcategories'                => 'Verwaiste Kategorien',
+'unusedimages'                    => 'Verwaiste Dateien',
+'popularpages'                    => 'Beliebte Seiten',
+'wantedcategories'                => 'Benutzte, aber nicht angelegte Kategorien',
+'wantedcategories-summary'        => 'Diese Spezialseite listet Kategorien auf, die zwar in Seiten verwendet werden, welche aber nicht als Kategorie angelegt worden sind.',
+'wantedpages'                     => 'Gewünschte Seiten',
+'wantedpages-summary'             => 'Diese Spezialseite listet alle Seiten auf, die noch nicht existieren, auf die aber von bestehenden Seiten bereits verlinkt wird.',
+'mostlinked'                      => 'Häufig verlinkte Seiten',
+'mostlinked-summary'              => 'Diese Spezialseite zeigt, unabhängig vom Namensraum, alle besonders häufig verlinkten Seiten an.',
+'mostlinkedcategories'            => 'Meistbenutzte Kategorien',
+'mostlinkedcategories-summary'    => 'Diese Spezialseite zeigt eine Liste der meistbenutzten Kategorien.',
+'mostcategories'                  => 'Meistkategorisierte Seiten',
+'mostcategories-summary'          => 'Diese Spezialseite zeigt besonders häufig kategorisierte Seiten an.',
+'mostimages'                      => 'Meistbenutzte Dateien',
+'mostimages-summary'              => 'Diese Spezialseite zeigt eine Liste der meistbenutzten Dateien.',
+'mostrevisions'                   => 'Seiten mit den meisten Versionen',
+'mostrevisions-summary'           => 'Diese Spezialseite zeigt eine Liste von Seiten mit den meisten Bearbeitungen.',
+'allpages'                        => 'Alle Seiten',
+'allpages-summary'                => "Diese Spezialseite listet den Seitenbestand von {{SITENAME}} von A bis Z auf. Sortiert wird alphabetisch, erst Zahlen, dann Großbuchstaben, Kleinbuchstaben und schließlich Sonderzeichen. ''A&nbsp;10'' findet sich vor ''AZ'', der ''Aal'' ist jedoch noch dahinter eingeordnet.",
+'prefixindex'                     => 'Alle Seiten (mit Präfix)',
+'prefixindex-summary'             => 'Diese Spezialseite zeigt alle Seiten, die mit der eingegebenen Zeichenfolge („Präfix“) beginnen. Die Ausgabe kann auf einen Namensraum eingeschränkt werden.',
+'randompage'                      => 'Zufällige Seite',
+'randompage-nopages'	          => 'In diesem Namensraum sind keine Seiten vorhanden.',
+'shortpages'                      => 'Kurze Seiten',
+'shortpages-summary'              => 'Diese Liste zeigt die kürzesten Seiten im Hauptnamensraum an. Gezählt werden die Zeichen des Textes wie er im Bearbeitungsfenster dargestellt wird, also in Wiki-Syntax und ohne die Inhalte eingebundener Vorlagen. Grundlage der Zählung ist der UTF-8-kodierte Text, nach dem beispielsweise deutsche Umlaute als zwei Zeichen gelten.',
+'longpages'                       => 'Lange Seiten',
+'longpages-summary'               => 'Diese Liste zeigt die längsten Seiten im Hauptnamensraum an. Gezählt werden die Zeichen des Textes wie er im Bearbeitungsfenster dargestellt wird, also in Wiki-Syntax und ohne die Inhalte eingebundener Vorlagen. Grundlage der Zählung ist der UTF-8-kodierte Text, nach dem beispielsweise deutsche Umlaute als zwei Zeichen gelten.',
+'deadendpages'                    => 'Sackgassenseiten',
+'deadendpages-summary'            => 'Diese Spezialseite zeigt eine Liste von Seiten, die keine Links auf andere Seiten oder nur Links auf noch nicht vorhandene Seiten enthalten.',
+'deadendpagestext'                => '',
+'protectedpages'                  => 'Geschützte Seiten',
+'protectedpages-summary'          => 'Diese Spezialseite zeigt alle vor dem Verschieben oder Bearbeiten geschützten Seiten.',
+'protectedpagestext'              => '',
+'protectedpagesempty'             => 'Aktuell sind keine Seiten mit diesen Parametern geschützt.',
+'listusers'                       => 'Benutzerverzeichnis',
+'listusers-summary'               => "Diese Spezialseite listet alle registrierten Benutzer auf; die Gesamtzahl kann [[Special:Statistics|hier]] eingesehen werden. Über das Auswahlfeld ''Gruppe'' lässt sich die Abfrage auf bestimmte Benutzergruppen einschränken.",
+'specialpages'                    => 'Spezialseiten',
+'specialpages-summary'            => 'Diese Seite bietet einen Überblick aller Spezialseiten. Diese werden automatisch generiert und können nicht bearbeitet werden.',
+'spheading'                       => 'Spezialseiten für alle Benutzer',
+'restrictedpheading'              => 'Spezialseiten für Administratoren',
+'rclsub'                          => '(auf Seiten von „$1“)',
+'newpages'                        => 'Neue Seiten',
+'newpages-summary'                => 'Diese Spezialseite listet alle neu erstellten Seiten der letzten 30 Tage auf. Die Ausgabe kann auf einen Namensraum und/oder Benutzernamen eingeschränkt werden.',
+'newpages-username'               => 'Benutzername:',
+'ancientpages'                    => 'Seit längerem unbearbeitete Artikel',
+'ancientpages-summary'            => 'Diese Spezialseite zeigt eine Liste von Seiten, die am längsten nicht mehr geändert worden sind.',
+'intl'                            => 'Interwiki-Links',
+'move'                            => 'verschieben',
+'movethispage'                    => 'Seite verschieben',
+'unusedimagestext'                => '<p>Bitte beachten Sie, dass andere Wikis möglicherweise einige dieser Dateien verwenden.',
+'unusedcategoriestext'            => 'Diese Spezialseite zeigt alle Kategorien, die selber keiner Kategorie zugewiesen wurden.',
+
+# Book sources
+'booksources'               => 'ISBN-Suche',
+'booksources-summary'       => 'Auf dieser Spezialseite können  Sie eine ISBN eingeben und erhalten dann eine Liste mit Informations- und Bezugsmöglichkeiten zur gesuchten ISBN. Bindestriche oder Leerzeichen zwischen den Ziffern spielen für die Suche keine Rolle.',
+'booksources-search-legend' => 'Suche nach Bezugsquellen für Bücher',
+'booksources-isbn'          => 'ISBN:',
+'booksources-go'            => 'Suche',
+'booksources-text'          => 'Dies ist eine Liste mit Links zu Internetseiten, die neue und gebrauchte Bücher verkaufen. Dort kann es auch weitere Informationen über die Bücher geben. {{SITENAME}} ist mit keinem dieser Anbieter geschäftlich verbunden.',
+
+'categoriespagetext' => 'Die folgenden Kategorien existieren in {{SITENAME}}:',
+'data'               => 'Daten',
+'userrights'         => 'Benutzerrechteverwaltung',
+'groups'             => 'Benutzergruppen',
+'isbn'               => 'ISBN',
+'alphaindexline'     => '$1 bis $2',
+'version'            => 'Version',
+
+# Special:Logs
+'specialloguserlabel'  => 'Benutzer:',
+'speciallogtitlelabel' => 'Titel:',
+'log'                  => 'Logbücher',
+'log-search-legend'    => 'Logbücher durchsuchen',
+'log-search-submit'    => 'Suche',
+'alllogstext'          => 'Dies ist die kombinierte Anzeige aller in {{SITENAME}} geführten Logbücher. Die Ausgabe kann durch die Auswahl des Logbuchtyps, des Benutzers oder des Seitentitels eingeschränkt werden.',
+'logempty'             => 'Keine passenden Einträge.',
+'log-title-wildcard'   => 'Titel beginnt mit …',
+
+# Special:Allpages
+'nextpage'          => 'Nächste Seite ($1)',
+'prevpage'          => 'Vorherige Seite ($1)',
+'allpagesfrom'      => 'Seiten anzeigen ab:',
+'allarticles'       => 'Alle Seiten',
+'allinnamespace'    => 'Alle Seiten (Namensraum: $1)',
+'allnotinnamespace' => 'Alle Seiten (nicht im $1 Namensraum)',
+'allpagesprev'      => 'Vorherige',
+'allpagesnext'      => 'Nächste',
+'allpagessubmit'    => 'Anwenden',
+'allpagesprefix'    => 'Seiten anzeigen mit Präfix:',
+'allpagesbadtitle'  => 'Der eingegebene Seitenname ist ungültig: Er hat entweder ein vorangestelltes Sprach-, ein Interwiki-Kürzel oder enthält ein oder mehrere Zeichen, welche in Seitennamen nicht verwendet werden dürfen.',
+
+# Special:Listusers
+'listusersfrom'      => 'Zeige Benutzer ab:',
+'listusers-submit'   => 'Zeige',
+'listusers-noresult' => 'Keinen Benutzer gefunden.',
+
+# E-mail user
+'mailnologin'     => 'Sie sind nicht angemeldet.',
+'mailnologintext' => 'Sie müssen [[{{ns:special}}:Userlogin|angemeldet sein]] und eine [[{{ns:special}}:Confirmemail|bestätigte]] E-Mail-Adresse haben, um anderen Benutzern E-Mails schicken zu können.',
+'emailuser'       => 'E-Mail an diesen Benutzer',
+'emailpage'       => 'E-Mail an Benutzer',
+'emailpagetext'   => 'Wenn dieser Benutzer eine gültige E-Mail-Adresse angegeben hat, können Sie ihm mit dem untenstehenden Formular eine E-Mail senden. Als Absender wird die E-Mail-Adresse aus Ihren Einstellungen eingetragen, damit der Benutzer Ihnen antworten kann.',
+'usermailererror' => 'Das E-Mail-Objekt gab einen Fehler zurück:',
+'defemailsubject' => '{{SITENAME}}-E-Mail',
+'noemailtitle'    => 'Keine E-Mail-Adresse',
+'noemailtext'     => 'Dieser Benutzer hat keine gültige E-Mail-Adresse angegeben oder möchte keine E-Mail von anderen Benutzern empfangen.',
+'emailfrom'       => 'Von',
+'emailto'         => 'An',
+'emailsubject'    => 'Betreff',
+'emailmessage'    => 'Nachricht',
+'emailsend'       => 'Senden',
+'emailccme'       => 'Sende eine Kopie der E-Mail an mich',
+'emailccsubject'  => 'Kopie Ihrer Nachricht an $1: $2',
+'emailsent'       => 'E-Mail verschickt',
+'emailsenttext'   => 'Ihre E-Mail wurde verschickt.',
+
+# Watchlist
+'watchlist'            => 'Beobachtungsliste',
+'mywatchlist'         => 'Beobachtungsliste',
+'watchlistfor'         => "(für '''$1''')",
+'nowatchlist'          => 'Sie haben keine Einträge auf Ihrer Beobachtungsliste.',
+'watchlistanontext'    => 'Sie müssen sich $1, um Ihre Beobachtungsliste zu sehen oder Einträge auf ihr zu bearbeiten.',
+'watchlistcount'       => "'''Sie haben $1 {{PLURAL:$1|Eintrag|Einträge}} auf Ihrer Beobachtungsliste (inkl. Diskussionsseiten).'''",
+'clearwatchlist'       => 'Beobachtungsliste löschen',
+'watchlistcleartext'   => 'Sind Sie sicher, dass Sie diese vollständig löschen wollen?',
+'watchlistclearbutton' => 'Beobachtungsliste löschen',
+'watchlistcleardone'   => 'Ihre Beobachtungsliste wurde gelöscht. {{PLURAL:$1|Ein Eintrag wurde|$1 Einträge wurden}} entfernt.',
+'watchnologin'         => 'Sie sind nicht angemeldet',
+'watchnologintext'     => 'Sie müssen [[Special:Userlogin|angemeldet]]
+sein, um Ihre Beobachtungsliste zu bearbeiten.',
+'addedwatch'           => 'Zur Beobachtungsliste hinzugefügt',
+'addedwatchtext'       => 'Die Seite „$1“ wurde zu Ihrer [[Special:Watchlist|Beobachtungsliste]] hinzugefügt.
+
+Spätere Änderungen an dieser Seite und der dazugehörigen Diskussionsseite werden dort gelistet und
+in der Übersicht der [[Special:Recentchanges|letzten Änderungen]] in Fettschrift dargestellt. 
+
+Wenn Sie die Seite wieder von Ihrer Beobachtungsliste entfernen möchten, klicken Sie auf der jeweiligen Seite auf „nicht mehr beobachten“.',
+'removedwatch'         => 'Von der Beobachtungsliste entfernt',
+'removedwatchtext'     => 'Die Seite „$1“ wurde von Ihrer Beobachtungsliste entfernt.',
+'watch'                => 'beobachten',
+'watchthispage'        => 'Seite beobachten',
+'unwatch'              => 'nicht mehr beobachten',
+'unwatchthispage'      => 'Nicht mehr beobachten',
+'notanarticle'         => 'Keine Seite',
+'watchnochange'        => 'Keine der von Ihnen beobachteten Seiten wurde während des angezeigten Zeitraums bearbeitet.',
+'watchdetails'         => 'Sie beobachten {{PLURAL:$1|eine Seite|$1 Seiten}} | [[Special:Watchlist/edit|Komplette Liste zeigen und bearbeiten]] | [[Special:Watchlist/clear|Komplette Liste leeren]]',
+'wlheader-enotif'      => 'Der E-Mail-Benachrichtigungsdienst ist aktiviert.<br />',
+'wlheader-showupdated' => "Seiten mit noch nicht gesehenen Änderungen werden '''fett''' dargestellt.<br />",
+'watchmethod-recent'   => 'Überprüfen der letzten Bearbeitungen für die Beobachtungsliste',
+'watchmethod-list'     => 'Überprüfen der Beobachtungsliste nach letzten Bearbeitungen',
+'removechecked'        => 'Markierte Einträge löschen',
+'watchlistcontains'    => 'Ihre Beobachtungsliste enthält $1 {{PLURAL:$1|Seite|Seiten}}.',
+'watcheditlist'        => 'Dies ist eine alphabetische und nach Namensräumen gruppierte Liste aller von Ihnen beobachteten Seiten. Wenn Sie Einträge von der Beobachtungsliste wieder entfernen möchten, markieren Sie diese und klicken auf die Schaltfläche „Markierte Einträge löschen“ am Ende dieser Seite.',
+'removingchecked'      => 'Die ausgewählten Einträge werden aus der Beobachtungsliste entfernt...',
+'couldntremove'        => 'Der Eintrag „$1“ kann nicht gelöscht werden.',
+'iteminvalidname'      => 'Problem mit dem Eintrag „$1“, ungültiger Name.',
+'wlnote'               => "Es {{PLURAL:$1|folgt die letzte Änderung|folgen die letzten '''$1''' Änderungen}} der letzten {{PLURAL:$2|Stunde|'''$2''' Stunden}}.",
+'wlshowlast'           => 'Zeige die Änderungen der letzten $1 Stunden, $2 Tage oder $3 (in den letzten 30 Tagen).',
+'wlsaved'              => 'Dies ist eine gespeicherte Version Ihrer Beobachtungsliste.',
+'watchlist-show-bots'  => 'Bot-Änderungen einblenden',
+'watchlist-hide-bots'  => 'Bot-Änderungen ausblenden',
+'watchlist-show-own'   => 'eigene Änderungen einblenden',
+'watchlist-hide-own'   => 'eigene Änderungen ausblenden',
+'watchlist-show-minor' => 'kleine Änderungen einblenden',
+'watchlist-hide-minor' => 'kleine Änderungen ausblenden',
+'wldone'               => 'Erfolgreich ausgeführt.',
+
+# Displayed when you click the "watch" button and it's in the process of watching
+'watching'   => 'Beobachten …',
+'unwatching' => 'Nicht beobachten …',
+
+'enotif_mailer'      => '{{SITENAME}} E-Mail-Benachrichtigungsdienst',
+'enotif_reset'       => 'Alle Seiten als besucht markieren',
+'enotif_newpagetext' => 'Das ist eine neue Seite.',
+'changed'            => 'geändert',
+'created'            => 'erzeugt',
+'enotif_subject'     => '[{{SITENAME}}] Die Seite "$PAGETITLE" wurde von $PAGEEDITOR $CHANGEDORCREATED',
+'enotif_lastvisited' => 'Alle Änderungen auf einen Blick: $1',
+'enotif_body'        => 'Liebe/r $WATCHINGUSERNAME,
+
+die {{SITENAME}} Seite "$PAGETITLE" wurde von $PAGEEDITOR am $PAGEEDITDATE $CHANGEDORCREATED.
+
+Aktuelle Version: $PAGETITLE_URL
+
+$NEWPAGE
+
+Zusammenfassung des Bearbeiters: $PAGESUMMARY $PAGEMINOREDIT
+
+Kontakt zum Bearbeiter:
+E-Mail: $PAGEEDITOR_EMAIL
+Wiki: $PAGEEDITOR_WIKI
+
+Es werden solange keine weiteren Benachrichtigungsmails gesendet, bis Sie die Seite wieder besucht haben. Auf Ihrer Beobachtungsseite können Sie alle Benachrichtigungsmarker zusammen zurücksetzen.
+
+             Ihr freundliches {{SITENAME}} Benachrichtigungssystem
+
+-- 
+Um die Einstellungen Ihrer Beobachtungsliste anzupassen besuchen Sie: {{fullurl:Special:Watchlist/edit}}',
+
+# Delete/protect/revert
+'deletepage'                  => 'Seite löschen',
+'confirm'                     => 'Bestätigen',
+'excontent'                   => "Alter Inhalt: '$1'",
+'excontentauthor'             => "Inhalt war: '$1' (einziger Bearbeiter: [[{{ns:user}}:$2|$2]] - [[{{ns:user_talk}}:$2|Diskussion]])",
+'exbeforeblank'               => "Inhalt vor dem Leeren der Seite: '$1'",
+'exblank'                     => 'Seite war leer',
+'confirmdelete'               => 'Löschen bestätigen',
+'deletesub'                   => '(Lösche „$1“)',
+'historywarning'              => 'WARNUNG: Die Seite, die Sie löschen wollen, hat eine Versionsgeschichte:',
+'confirmdeletetext'           => 'Sie sind dabei, eine Seite oder eine Datei und alle zugehörigen älteren Versionen
+zu löschen. Bitte bestätigen Sie dazu, dass Sie sich der Konsequenzen bewusst sind
+und dass Sie in Übereinstimmung mit den [[{{MediaWiki:policy-url}}|Richtlinien]] handeln.',
+'actioncomplete'              => 'Aktion beendet',
+'deletedtext'                 => '„$1“ wurde gelöscht. Im $2 finden Sie eine Liste der letzten Löschungen.',
+'deletedarticle'              => 'hat „[[$1]]“ gelöscht',
+'dellogpage'                  => 'Lösch-Logbuch',
+'dellogpagetext'              => 'Dies ist das Logbuch der gelöschten Seiten und Dateien.',
+'deletionlog'                 => 'Lösch-Logbuch',
+'reverted'                    => 'Auf eine alte Version zurückgesetzt',
+'deletecomment'               => 'Grund der Löschung',
+'imagereverted'               => 'Auf eine alte Version zurückgesetzt.',
+'rollback'                    => 'Zurücksetzen der Änderungen',
+'rollback_short'              => 'Zurücksetzen',
+'rollbacklink'                => 'Zurücksetzen',
+'rollbackfailed'              => 'Zurücksetzen gescheitert',
+'cantrollback'                => 'Die Änderung kann nicht zurückgesetzt werden, da es keine früheren Autoren gibt.',
+'alreadyrolled'               => "Das Zurücksetzen der Änderungen von [[{{ns:user}}:$2|$2]] <span style='font-size: smaller'>([[{{ns:user_talk}}:$2|Diskussion]], 
+[[{{ns:special}}:Contributions/$2|Beiträge]])</span> am Artikel [[:$1]] war nicht erfolgreich, da in der Zwischenzeit bereits ein anderer Benutzer 
+Änderungen an diesem Artikel vorgenommen hat.<br />Die letzte Änderung stammt von [[{{ns:user}}:$3|$3]] <span style='font-size: smaller'>([[{{ns:user_talk}}:$3|Diskussion]])</span>.",
+'editcomment'                 => 'Der Änderungskommentar lautet: „<i>$1</i>“.', # only shown if there is an edit comment
+'revertpage'                  => 'Änderungen von [[{{ns:user}}:$2|$2]] ([[{{ns:special}}:Contributions/$2|Beiträge]]) rückgängig gemacht und letzte Version von $1 wiederhergestellt',
+'sessionfailure'              => 'Es gab ein Problem mit Ihrer Benutzersitzung.
+Diese Aktion wurde aus Sicherheitsgründen abgebrochen, um eine falsche Zuordnung Ihrer Änderungen zu einem anderen Benutzer zu verhindern.
+Bitte gehen Sie zurück und versuchen den Vorgang erneut auszuführen.',
+'protectlogpage'              => 'Seitenschutz-Logbuch',
+'protectlogtext'              => 'Dies ist das Seitenschutz-Logbuch. Siehe die [[{{ns:special}}:Protectedpages|Liste der geschützten Seiten]] für alle aktuell geschützten Seiten.',
+'protectedarticle'            => 'änderte den Seitenschutzstatus von [[$1]]',
+'unprotectedarticle'          => 'hob den Schutz von $1 auf',
+'protectsub'                  => '(Sperren von „$1“)',
+'confirmprotecttext'          => 'Soll diese Seite wirklich geschützt werden?',
+'confirmprotect'              => 'Seitenschutzstatus ändern',
+'protectmoveonly'             => 'Nur vor dem Verschieben schützen',
+'protectcomment'              => 'Grund der Sperrung/Entsperrung:',
+'protectexpiry'               => 'Sperrdauer:',
+'protect_expiry_invalid'      => 'Die eingegebene Dauer ist ungültig.',
+'protect_expiry_old'          => 'Die Sperrzeit liegt in der Vergangenheit.',
+'unprotectsub'                => '(Aufhebung der Sperrung von „$1“)',
+'confirmunprotecttext'        => 'Wollen Sie wirklich die Sperrung dieser Seite aufheben?',
+'confirmunprotect'            => 'Aufhebung der Sperrung bestätigen',
+'unprotectcomment'            => 'Grund für das Aufheben der Sperrung',
+'protect-unchain'             => 'Verschiebeschutz ändern',
+'protect-text'                => "Hier können Sie den Schutzstatus für die Seite '''$1''' einsehen und ändern.",
+'protect-locked-blocked'      => 'Sie können den Seitenschutz nicht ändern, da Ihr Benutzerkonto gesperrt ist. Hier sind die aktuellen Seitenschutz-Einstellungen für die Seite <strong>„$1“:</strong>',
+'protect-locked-dblock'       => 'Die Datenbank ist gesperrt, der Seitenschutz kann daher nicht geändert werden. Hier sind die aktuellen Seitenschutz-Einstellungen für die Seite <strong>„$1“:</strong>',
+'protect-locked-access'       => 'Ihr Benutzerkonto verfügt nicht über die notwendigen Rechte zur Änderung des Seitenschutzes. Hier sind die aktuellen Seitenschutz-Einstellungen für die Seite <strong>„$1“:</strong>',
+'protect-cascadeon'           => 'Diese Seite ist gegenwärtig Teil einer Kaskadensperre. Sie ist in die {{PLURAL:$1|folgende Seite|folgenden Seiten}} eingebunden, welche durch die Kaskadensperroption geschützt {{PLURAL:$1|ist|sind}}. Der Seitenschutzstatus kann für diese Seite geändert werden, dies hat jedoch keinen Einfluss auf die Kaskadensperre:',
+'protect-default'             => 'Alle (Standard)',
+'protect-level-autoconfirmed' => 'Sperrung für nicht registrierte Benutzer',
+'protect-level-sysop'         => 'Nur Administratoren',
+'protect-summary-cascade'     => 'kaskadierend',
+'protect-expiring'            => 'bis $1 (UTC)',
+'protect-cascade'             => 'Kaskadierende Sperre – alle in diese Seite eingebundenen Vorlagen werden ebenfalls gesperrt.',
+'restriction-type'            => 'Schutzstatus',
+'restriction-level'           => 'Schutzhöhe',
+'minimum-size'                => 'Mindestgröße (Bytes)',
+
+# Restrictions (nouns)
+'restriction-edit' => 'bearbeiten',
+'restriction-move' => 'verschieben',
+
+# Restriction levels
+'restriction-level-sysop'         => 'geschützt (nur Administratoren)',
+'restriction-level-autoconfirmed' => 'geschützt (nur angemeldete, nicht-neue Benutzer)',
+'restriction-level-all'           => 'alle',
+
+# Undelete
+'undelete'                 => 'Gelöschte Seite wiederherstellen',
+'undeletepage'             => 'Gelöschte Seite wiederherstellen',
+'viewdeletedpage'          => 'Gelöschte Seiten anzeigen',
+'undeletepagetext'         => 'Die folgenden Seiten wurden gelöscht und können von Administratoren wiederhergestellt werden:',
+'undeleteextrahelp'        => '* Um die Seite komplett mit allen Versionen wiederherzustellen, geben Sie bitte eine Begründung an und klicken auf „Wiederherstellen“.
+* Möchten Sie nur bestimmte Versionen wiederherstellen, so wählen Sie diese bitte einzeln an Hand der Markierungen aus, geben eine Begründung an und klicken dann auf „Wiederherstellen“.
+* „Abbrechen“ leert das Kommentarfeld und entfernt alle Markierungen bei den Versionen.',
+'undeleterevisions'        => '{{PLURAL:$1|1 Version|$1 Versionen}} archiviert',
+'undeletehistory'          => 'Wenn Sie diese Seite wiederherstellen, werden auch alle alten
+Versionen wiederhergestellt. Wenn seit der Löschung eine neue Seite gleichen
+Namens erstellt wurde, werden die wiederhergestellten Versionen chronologisch in die Versionsgeschichte eingeordnet.
+Die aktuelle Version, die gegenwärtig live angezeigt wird, wird nicht automatisch durch eine wiederhergestellte Version ersetzt, falls diese jünger ist.
+Sichtbarkeits-Einschränkungen an Dateiversionen gehen bei einer Wiederherstellung verloren.',
+'undeleterevdel'           => 'Die Wiederherstellung wird nicht durchgeführt, wenn die aktuellste Version versteckt ist oder versteckte Teile enthält.
+In diesem Fall darf die aktuellste Version nicht markiert werden oder ihr Status muss auf den einer normalen Version geändert werden.
+Versionen von Dateien, auf die Sie keinen Zugriff haben, werden nicht wiederhergestellt.',
+'undeletehistorynoadmin'   => 'Diese Seite wurde gelöscht. Der Grund für die Löschung ist in der Zusammenfassung angegeben,
+genauso wie Details zum letzten Benutzer der diese Seite vor der Löschung bearbeitet hat.
+Der aktuelle Text der gelöschten Seite ist nur Administratoren zugänglich.',
+'undelete-revision'        => 'Gelöschte Version von $1 vom $2:',
+'undeleterevision-missing' => 'Ungültige oder fehlende Version. Entweder ist der Link falsch oder die Version wurde aus dem Archiv wiederhergestellt oder entfernt.',
+'undeletebtn'              => 'Wiederherstellen',
+'undeletereset'            => 'Abbrechen',
+'undeletecomment'          => 'Begründung:',
+'undeletedarticle'         => 'hat „[[$1]]“ wiederhergestellt',
+'undeletedrevisions'       => '$1 {{plural:$1|Version|Versionen}} wurden wiederhergestellt',
+'undeletedrevisions-files' => '$1 {{plural:$1|Version|Versionen}} und $2 {{plural:$2|Datei|Dateien}} wurden wiederhergestellt',
+'undeletedfiles'           => '$1 {{plural:$1|Datei|Dateien}} wurden wiederhergestellt',
+'cannotundelete'           => 'Wiederherstellung fehlgeschlagen; jemand anderes hat die Seite bereits wiederhergestellt.',
+'undeletedpage'            => "'''$1''' wurde wiederhergestellt.
+
+Im [[Special:Log/delete|Lösch-Logbuch]] finden Sie eine Übersicht der kürzlich gelöschten und wiederhergestellten Seiten.",
+'undelete-header'          => 'Siehe das [[{{ns:special}}:Log/delete|Lösch-Logbuch]] für kürzlich gelöschte Seiten.',
+'undelete-search-box'      => 'Suche nach gelöschten Seiten',
+'undelete-search-prefix'   => 'Suchbegriff (Wortanfang ohne Wildcards):',
+'undelete-search-submit'   => 'Suche',
+'undelete-no-results'      => 'Es wurde im Archiv keine zum Suchbegriff passende Seite gefunden.',
+
+# Namespace form on various pages
+'namespace' => 'Namensraum:',
+'invert'    => 'Auswahl umkehren',
+
+# Contributions
+'contributions' => 'Benutzerbeiträge',
+'mycontris'     => 'Eigene Beiträge',
+'contribsub2'   => 'Für $1 ($2)',
+'nocontribs'    => 'Es wurden keine Benutzerbeiträge mit diesen Kriterien gefunden.',
+'ucnote'        => 'Dies sind die letzten <b>$1</b> Beiträge des Benutzers in den letzten <b>$2</b> Tagen.',
+'uclinks'       => 'Zeige die letzten $1 Beiträge; zeige die letzten $2 Tage.',
+'uctop'         => ' (aktuell)',
+
+'sp-contributions-newest'      => 'Jüngste',
+'sp-contributions-oldest'      => 'Älteste',
+'sp-contributions-newer'       => 'Jüngere $1',
+'sp-contributions-older'       => 'Ältere $1',
+'sp-contributions-newbies'     => 'Zeige nur Beiträge neuer Benutzer',
+'sp-contributions-newbies-sub' => 'Für Neulinge',
+'sp-contributions-blocklog'    => 'Sperrlogbuch',
+'sp-contributions-search'      => 'Suche nach Benutzerbeiträgen',
+'sp-contributions-username'    => 'IP-Adresse oder Benutzername:',
+'sp-contributions-submit'      => 'Suche',
+
+'sp-newimages-showfrom' => 'Zeige neue Dateien ab $1',
+
+# What links here
+'whatlinkshere'         => 'Links auf diese Seite',
+'whatlinkshere-summary' => 'Diese Spezialseite listet alle internen Links auf eine bestimmte Seite auf. Die möglichen Zusätze „(Vorlageneinbindung)“ und „(Weiterleitungsseite)“ zeigen jeweils an, dass die Seite nicht durch einen normalen Wikilink eingebunden ist. ',
+'notargettitle'         => 'Keine Seite angegeben',
+'notargettext'          => 'Sie haben nicht angegeben, auf welche Seite diese Funktion angewendet werden soll.',
+'linklistsub'           => '(Linkliste)',
+'linkshere'             => "Die folgenden Seiten verlinken auf '''„[[:$1]]“''':",
+'nolinkshere'           => "Keine Seite verlinkt auf '''„[[:$1]]“'''.",
+'nolinkshere-ns'        => "Keine Seite verlinkt auf '''„[[:$1]]“''' im gewählten Namensraum.",
+'isredirect'            => 'Weiterleitungsseite',
+'istemplate'            => 'Vorlageneinbindung',
+'whatlinkshere-prev'    => '{{PLURAL:$1|vorheriger|vorherige $1}}',
+'whatlinkshere-next'    => '{{PLURAL:$1|nächster|nächste $1}}',
+
+# Block/unblock
+'blockip'                     => 'IP-Adresse/Benutzer sperren',
+'blockiptext'                 => 'Benutzen Sie das Formular, um einen Benutzer oder eine IP-Adresse zu sperren.
+Dies sollte nur erfolgen, um Vandalismus zu verhindern und in Übereinstimmung mit den [[{{MediaWiki:policy-url}}|Richtlinien]].
+Bitte geben Sie den Grund für die Sperre an.',
+'ipaddress'                   => 'IP-Adresse oder Benutzername',
+'ipadressorusername'          => 'IP-Adresse oder Benutzername',
+'ipbexpiry'                   => 'Sperrdauer',
+'ipbreason'                   => 'Begründung',
+'ipbreasonotherlist'          => 'Andere Begründung',
+'ipbreason-dropdown'          => '
+* Allgemeine Sperrgründe
+** Löschen von Seiten
+** Einstellen unsinniger Seiten
+** Fortgesetzte Verstöße gegen die Richtlinien für Weblinks
+** Verstoß gegen den Grundsatz „Keine persönlichen Angriffe“
+* Benutzerspezifische Sperrgründe
+** Ungeeigneter Benutzername
+** Neuanmeldung eines unbeschränkt gesperrten Benutzers
+* IP-spezifische Sperrgründe
+** Proxy, wegen Vandalismus einzelner Benutzer längerfristig gesperrt',
+'ipbanononly'                 => 'Nur anonyme Benutzer sperren',
+'ipbcreateaccount'            => 'Erstellung von Benutzerkonten verhindern',
+'ipbenableautoblock'          => 'Sperre die aktuell von diesem Benutzer genutzte IP-Adresse sowie automatisch alle folgenden, von denen aus er Bearbeitungen oder das Anlegen von Benutzeraccounts versucht',
+'ipbsubmit'                   => 'IP-Adresse/Benutzer sperren',
+'ipbother'                    => 'Andere Dauer (englisch)',
+'ipboptions'                  => '1 Stunde:1 hour,2 Stunden:2 hours,6 Stunden:6 hours,1 Tag:1 day,3 Tage:3 days,1 Woche:1 week,2 Wochen:2 weeks,1 Monat:1 month,3 Monate:3 months,1 Jahr:1 year,Unbeschränkt:indefinite',
+'ipbotheroption'              => 'Andere Dauer',
+'ipbotherreason'              => 'Andere/ergänzende Begründung',
+'ipbhidename'		      => 'Benutzername/IP-Adresse im Sperr-Logbuch, der Liste aktiver Sperren und dem Benutzerverzeichnis verstecken.',
+'badipaddress'                => 'Die IP-Adresse hat ein falsches Format.',
+'blockipsuccesssub'           => 'Sperre erfolgreich',
+'blockipsuccesstext'          => 'Der Benutzer/die IP-Adresse [[{{ns:special}}:Contributions/$1|$1]] wurde gesperrt und die Aktion im [[{{ns:special}}:Log/block|Benutzersperr-Logbuch]] protokolliert
+
+Zur Aufhebung der Sperre siehe die [[{{ns:special}}:Ipblocklist|Liste aller aktiven Sperren]].',
+'ipb-edit-dropdown'           => 'Sperrgründe bearbeiten',
+'ipb-unblock-addr'            => '„$1“ freigeben',
+'ipb-unblock'                 => 'IP-Adresse/Benutzer freigeben',
+'ipb-blocklist-addr'          => 'Aktuelle Sperre für „$1“ anzeigen',
+'ipb-blocklist'               => 'Alle aktuellen Sperren anzeigen',
+'unblockip'                   => 'IP-Adresse freigeben',
+'unblockiptext'               => 'Benutzen Sie das Formular, um eine IP-Adresse oder einen Benutzer freizugeben.',
+'ipusubmit'                   => 'Freigeben',
+'unblocked'                   => '[[User:$1|$1]] wurde freigegeben',
+'ipblocklist'                 => 'Liste gesperrter Benutzer/IP-Adressen',
+'ipblocklist-summary'         => "Diese Spezialseite führt – ergänzend zum [[Special:Log/block|Benutzersperr-Logbuch]], das alle manuell vorgenommenen (Ent-)Sperrungen protokolliert – die '''aktuell''' gesperrten Benutzer und IP-Adressen auf, einschließlich automatisch gesperrter IP-Adressen in anonymisierter Form.",
+'ipblocklist-submit'          => 'Suche',
+'blocklistline'               => '$1, $2 sperrte $3 (bis $4)',
+'infiniteblock'               => 'unbegrenzt',
+'expiringblock'               => '$1',
+'anononlyblock'               => 'nur Anonyme',
+'noautoblockblock'            => 'Autoblock deaktiviert',
+'createaccountblock'          => 'Erstellung von Benutzerkonten gesperrt',
+'ipblocklistempty'            => 'Die gesuchte IP-Adresse/der Benutzername ist nicht gesperrt oder die Liste enthält keine Einträge.',
+'blocklink'                   => 'sperren',
+'unblocklink'                 => 'freigeben',
+'contribslink'                => 'Beiträge',
+'autoblocker'                 => 'Automatische Sperre, da Sie eine gemeinsame IP-Adresse mit „$1“ benutzen. Grund: „$2“.',
+'blocklogpage'                => 'Benutzersperr-Logbuch',
+'blocklogentry'               => 'sperrte [[$1]] für einen Zeitraum von: $2 $3',
+'blocklogtext'                => 'Dies ist das Logbuch über Sperrungen und Entsperrungen von Benutzern und IP-Adressen. Automatisch gesperrte IP-Adressen werden nicht erfasst. Siehe die [[{{ns:special}}:Ipblocklist|{{int:ipblocklist}}]] für alle aktiven Sperren.',
+'unblocklogentry'             => 'hat die Sperre von [[$1]] aufgehoben.',
+'block-log-flags-anononly'    => 'nur Anonyme',
+'block-log-flags-nocreate'    => 'Erstellung von Benutzerkonten gesperrt',
+'block-log-flags-noautoblock' => 'Autoblock deaktiviert',
+'range_block_disabled'        => 'Die Möglichkeit, ganze Adressräume zu sperren, ist nicht aktiviert.',
+'ipb_expiry_invalid'          => 'Die eingegebene Dauer ist ungültig.',
+'ipb_already_blocked'         => '„$1“ wurde bereits gesperrt',
+'ip_range_invalid'            => 'Ungültiger IP-Addressbereich.',
+'proxyblocker'                => 'Proxy blocker',
+'ipb_cant_unblock'            => 'Fehler: Sperr-ID $1 nicht gefunden. Die Sperre wurde bereits aufgehoben.',
+'proxyblockreason'            => 'Ihre IP-Adresse wurde gesperrt, da sie ein offener Proxy ist. Bitte kontaktieren Sie Ihren Provider oder Ihre Systemtechnik und informieren Sie sie über dieses mögliche Sicherheitsproblem.',
+'proxyblocksuccess'           => 'Fertig.',
+'sorbs'                       => 'DNSBL',
+'sorbsreason'                 => 'Die IP-Adresse ist in der DNSBL von {{SITENAME}} als offener PROXY gelistet.',
+'sorbs_create_account_reason' => 'Die IP-Adresse ist in der DNSBL von {{SITENAME}} als offener PROXY gelistet. Das Anlegen neuer Benutzer ist nicht möglich.',
+
+# Developer tools
+'lockdb'              => 'Datenbank sperren',
+'unlockdb'            => 'Datenbank freigeben',
+'lockdbtext'          => 'Mit dem Sperren der Datenbank werden alle Änderungen an Benutzereinstellungen, Beobachtungslisten, Seiten usw. verhindert. Bitte die Sperrung bestätigen.',
+'unlockdbtext'        => 'Das Aufheben der Datenbank-Sperre wird alle Änderungen wieder zulassen. Bitte die Aufhebung bestätigen.',
+'lockconfirm'         => 'Ja, ich möchte die Datenbank sperren.',
+'unlockconfirm'       => 'Ja, ich möchte die Datenbank freigeben.',
+'lockbtn'             => 'Datenbank sperren',
+'unlockbtn'           => 'Datenbank freigeben',
+'locknoconfirm'       => 'Sie haben das Bestätigungsfeld nicht markiert.',
+'lockdbsuccesssub'    => 'Datenbank wurde erfolgreich gesperrt',
+'unlockdbsuccesssub'  => 'Datenbank wurde erfolgreich freigegeben',
+'lockdbsuccesstext'   => 'Die {{SITENAME}}-Datenbank wurde gesperrt.
+<br />Bitte geben Sie die Datenbank [[Special:Unlockdb|wieder frei]], sobald die Wartung abgeschlossen ist.',
+'unlockdbsuccesstext' => 'Die {{SITENAME}}-Datenbank wurde freigegeben.',
+'lockfilenotwritable' => 'Die Datenbank-Sperrdatei ist nicht beschreibbar. Zum Sperren oder Freigeben der Datenbank muss diese für den Webserver beschreibbar sein.',
+'databasenotlocked'   => 'Die Datenbank ist nicht gesperrt.',
+
+# Move page
+'movepage'                => 'Seite verschieben',
+'movepagetext'            => 'Mit diesem Formular können Sie eine Seite umbenennen (mitsamt allen Versionen). Der alte Titel wird zum neuen weiterleiten. Links auf den alten Titel werden nicht geändert, und die Diskussionsseite wird ebenfalls nicht mitverschoben.',
+'movepagetalktext'        => "Die dazugehörige Diskussionsseite wird mitverschoben, '''es sei denn:'''
+*Es existiert bereits eine Diskussionsseite mit diesem Namen, oder
+*Sie wählen die untenstehende Option ab.
+
+In diesen Fällen müssen Sie, falls gewünscht, den Inhalt der Seite von Hand verschieben oder zusammenführen.",
+'movearticle'             => 'Seite verschieben',
+'movenologin'             => 'Sie sind nicht angemeldet',
+'movenologintext'         => 'Sie müssen ein registrierter Benutzer und
+[[Special:Userlogin|angemeldet]] sein,
+um eine Seite zu verschieben.',
+'newtitle'                => 'Ziel',
+'move-watch'              => 'Diese Seite beobachten',
+'movepagebtn'             => 'Seite verschieben',
+'pagemovedsub'            => 'Verschiebung erfolgreich',
+'pagemovedtext'           => 'Seite „[[$1]]“ wurde nach „[[$2]]“ verschoben.',
+'articleexists'           => 'Unter diesem Namen existiert bereits eine Seite.
+Bitte wählen Sie einen anderen Namen.',
+'talkexists'              => 'Die Seite selbst wurde erfolgreich verschoben, aber die zugehörige Diskussions-Seite nicht, da bereits eine mit dem neuen Titel existiert. Bitte gleichen Sie die Inhalte von Hand ab.',
+'movedto'                 => 'verschoben nach',
+'movetalk'                => 'Die Diskussionsseite mitverschieben, wenn möglich.',
+'talkpagemoved'           => 'Die Diskussionsseite wurde ebenfalls verschoben.',
+'talkpagenotmoved'        => 'Die Diskussionsseite wurde <strong>nicht</strong> verschoben.',
+'1movedto2'               => 'hat [[$1]] nach [[$2]] verschoben',
+'1movedto2_redir'         => 'hat [[$1]] nach [[$2]] verschoben und dabei eine Weiterleitung überschrieben',
+'movelogpage'             => 'Verschiebungs-Logbuch',
+'movelogpagetext'         => 'Dies ist eine Liste aller verschobenen Seiten.',
+'movereason'              => 'Begründung',
+'revertmove'              => 'zurück verschieben',
+'delete_and_move'         => 'Löschen und Verschieben',
+'delete_and_move_text'    => '==Zielseite vorhanden, löschen?==
+
+Die Seite „[[$1]]“ existiert bereits. Möchten Sie diese löschen, um die Seite verschieben zu können?',
+'delete_and_move_confirm' => 'Zielseite für die Verschiebung löschen',
+'delete_and_move_reason'  => 'gelöscht, um Platz zu machen für Verschiebung',
+'selfmove'                => 'Ursprungs- und Zielname sind gleich; eine Seite kann nicht zu sich selbst verschoben werden.',
+'immobile_namespace'      => 'Der Quell- oder Zielnamensraum ist geschützt; Verschiebungen in diesen Namensraum hinein oder aus diesem heraus sind nicht möglich.',
+
+# Export
+'export'            => 'Seiten exportieren',
+'exporttext'        => 'Mit dieser Spezialseite können  Sie den Text (und die Bearbeitungs-/Versionsgeschichte) einzelner Seiten nach XML exportieren.
+Das Ergebnis kann in ein anderes Wiki mit MediaWiki-Software eingespielt, bearbeitet oder archiviert werden.
+
+Tragen Sie einfach den oder die entsprechenden Seitentitel in das folgende Textfeld ein (pro Zeile jeweils nur für eine Seite).
+
+Alternativ ist der Export auch mit der Syntax <tt><nowiki>[[</nowiki>{{ns:special}}<nowiki>:Export/Seitentitel]]</nowiki></tt> möglich, zum Beispiel [[{{ns:special}}:Export/{{Mediawiki:mainpage}}]] für die [[{{Mediawiki:mainpage}}]].',
+'exportcuronly'     => 'Nur die aktuelle Version der Seite exportieren',
+'exportnohistory'   => "----
+'''Hinweis:''' Der Export kompletter Versionsgeschichten ist aus Performancegründen bis auf Weiteres nicht möglich.",
+'export-submit'     => 'Seiten exportieren',
+'export-addcattext' => 'Seiten aus Kategorie hinzufügen:',
+'export-addcat'     => 'Hinzufügen',
+
+# Namespace 8 related
+'allmessages'               => 'MediaWiki-Systemtexte',
+'allmessagesname'           => 'Name',
+'allmessagesdefault'        => 'Standardtext',
+'allmessagescurrent'        => 'Aktueller Text',
+'allmessagestext'           => 'Dies ist eine Liste der MediaWiki-Systemtexte.',
+'allmessagesnotsupportedUI' => 'Your current interface language <b>$1</b> is not supported by Special:Allmessages at this site.',
+'allmessagesnotsupportedDB' => "'''Special:Allmessages''' ist momentan nicht möglich, weil die Datenbank offline ist.",
+'allmessagesfilter'         => 'Nachrichtennamensfilter:',
+'allmessagesmodified'       => 'Nur geänderte zeigen',
+
+# Thumbnails
+'thumbnail-more'           => 'vergrößern',
+'missingimage'             => '<b>Fehlendes Bild</b><br /><i>$1</i>',
+'filemissing'              => 'Datei fehlt',
+'thumbnail_error'          => 'Fehler beim Erstellen des Vorschaubildes: $1',
+'djvu_page_error'          => 'DjVu-Seite ausserhalb des Seitenbereichs',
+'djvu_no_xml'              => 'XML-Daten können für die DjVu-Datei nicht abgerufen werden',
+'thumbnail_invalid_params' => 'Ungültige Thumbnail-Parameter',
+'thumbnail_dest_directory' => 'Zielverzeichnis kann nicht erstellt werden.',
+
+# Special:Import
+'import'                     => 'Seiten importieren',
+'importinterwiki'            => 'Transwiki-Import',
+'import-interwiki-text'      => 'Wählen Sie ein Wiki und eine Seite zum Importieren aus.
+Das Datum der jeweiligen Versionen und die Autoren bleiben erhalten.
+Alle Transwiki Import-Aktionen werden im [[Special:Log/import|Import-Logbuch]] protokolliert.',
+'import-interwiki-history'   => 'Importiere alle Versionen dieser Seite',
+'import-interwiki-submit'    => 'Import',
+'import-interwiki-namespace' => 'Importiere die Seite in den Namensraum:',
+'importtext'                 => 'Auf dieser Spezialseite können über [[{{ns:special}}:Export]] exportierte Seiten in dieses Wiki importiert werden.',
+'importstart'                => 'Importiere Seiten …',
+'import-revision-count'      => '– {{PLURAL:$1|1 Version|$1 Versionen}}',
+'importnopages'              => 'Keine Seiten zum Importieren vorhanden.',
+'importfailed'               => 'Import fehlgeschlagen: $1',
+'importunknownsource'        => 'Unbekannte Importquelle',
+'importcantopen'             => 'Importdatei konnte nicht geöffnet werden',
+'importbadinterwiki'         => 'Falscher Interwiki-Link',
+'importnotext'               => 'Leer oder kein Text',
+'importsuccess'              => 'Import erfolgreich!',
+'importhistoryconflict'      => 'Es existieren bereits ältere Versionen, welche mit diesen kollidieren. Möglicherweise wurde die Seite bereits vorher importiert.',
+'importnosources'            => 'Für den Transwiki-Import sind keine Quellen definiert. Das direkte Hochladen von Versionen ist gesperrt.',
+'importnofile'               => 'Es ist keine Importdatei ausgewählt worden!',
+'importuploaderror'          => 'Das Hochladen der Importdatei ist fehlgeschlagen. Vielleicht ist die Datei größer als erlaubt.',
+
+# Import log
+'importlogpage'                    => 'Import-Logbuch',
+'importlogpagetext'                => 'Administrativer Import von Seiten mit Versionsgeschichte von anderen Wikis.',
+'import-logentry-upload'           => '[[$1]] wurde importiert',
+'import-logentry-upload-detail'    => '{{PLURAL:$1|1 Version|$1 Versionen}}',
+'import-logentry-interwiki'        => '[[$1]] wurde importiert (Transwiki)',
+'import-logentry-interwiki-detail' => '{{PLURAL:$1|1 Version|$1 Versionen}} von $2 importiert',
+
+# Tooltip help for the actions
+'tooltip-pt-userpage'             => 'Eigene Benutzerseite',
+'tooltip-pt-anonuserpage'         => 'Benutzerseite der IP-Adresse von der aus Sie Änderungen durchführen',
+'tooltip-pt-mytalk'               => 'Eigene Diskussionsseite',
+'tooltip-pt-anontalk'             => 'Diskussion über Änderungen von dieser IP-Adresse',
+'tooltip-pt-preferences'          => 'Eigene Einstellungen',
+'tooltip-pt-watchlist'            => 'Liste der beobachteten Seiten',
+'tooltip-pt-mycontris'            => 'Liste eigener Beiträge',
+'tooltip-pt-login'                => 'Sich einzuloggen wird zwar gerne gesehen, ist aber keine Pflicht.',
+'tooltip-pt-anonlogin'            => 'Sich einzuloggen wird zwar gerne gesehen, ist aber keine Pflicht.',
+'tooltip-pt-logout'               => 'Abmelden',
+'tooltip-ca-talk'                 => 'Diskussion zum Seiteninhalt',
+'tooltip-ca-edit'                 => 'Seite bearbeiten. Bitte vor dem Speichern die Vorschaufunktion benutzen.',
+'tooltip-ca-addsection'           => 'Einen Kommentar zu dieser Diskussion hinzufügen.',
+'tooltip-ca-viewsource'           => 'Diese Seite ist geschützt. Der Quelltext kann angesehen werden.',
+'tooltip-ca-history'              => 'Frühere Versionen dieser Seite',
+'tooltip-ca-protect'              => 'Diese Seite schützen',
+'tooltip-ca-delete'               => 'Diese Seite löschen',
+'tooltip-ca-undelete'             => 'Einträge wiederherstellen, bevor diese Seite gelöscht wurde',
+'tooltip-ca-move'                 => 'Diese Seite verschieben',
+'tooltip-ca-watch'                => 'Diese Seite zur persönlichen Beobachtungsliste hinzufügen',
+'tooltip-ca-unwatch'              => 'Diese Seite von der persönlichen Beobachtungsliste entfernen',
+'tooltip-search'                  => '{{SITENAME}} durchsuchen',
+'tooltip-p-logo'                  => 'Hauptseite',
+'tooltip-n-mainpage'              => 'Hauptseite anzeigen',
+'tooltip-n-portal'                => 'Über das Portal, was Sie tun können, wo was zu finden ist',
+'tooltip-n-currentevents'         => 'Hintergrundinformationen zu aktuellen Ereignissen',
+'tooltip-n-recentchanges'         => 'Liste der letzten Änderungen in {{SITENAME}}.',
+'tooltip-n-randompage'            => 'Zufällige Seite',
+'tooltip-n-help'                  => 'Hilfeseite anzeigen',
+'tooltip-n-sitesupport'           => 'Unterstützen Sie uns',
+'tooltip-t-whatlinkshere'         => 'Liste aller Seiten, die hierher zeigen',
+'tooltip-t-recentchangeslinked'   => 'Letzte Änderungen an Seiten, die von hier verlinkt sind',
+'tooltip-feed-rss'                => 'RSS-Feed für diese Seite',
+'tooltip-feed-atom'               => 'Atom-Feed für diese Seite',
+'tooltip-t-contributions'         => 'Liste der Beiträge von diesem Benutzer ansehen',
+'tooltip-t-emailuser'             => 'Eine E-Mail an diesen Benutzer senden',
+'tooltip-t-upload'                => 'Dateien hochladen',
+'tooltip-t-specialpages'          => 'Liste aller Spezialseiten',
+'tooltip-ca-nstab-main'           => 'Seiteninhalt anzeigen',
+'tooltip-ca-nstab-user'           => 'Benutzerseite anzeigen',
+'tooltip-ca-nstab-media'          => 'Mediendateienseite anzeigen',
+'tooltip-ca-nstab-special'        => 'Dies ist eine Spezialseite. Sie kann nicht verändert werden.',
+'tooltip-ca-nstab-project'        => 'Portalseite anzeigen',
+'tooltip-ca-nstab-image'          => 'Bilderseite anzeigen',
+'tooltip-ca-nstab-mediawiki'      => 'MediaWiki-Systemtext anzeigen',
+'tooltip-ca-nstab-template'       => 'Vorlage anzeigen',
+'tooltip-ca-nstab-help'           => 'Hilfeseite anzeigen',
+'tooltip-ca-nstab-category'       => 'Kategorieseite anzeigen',
+'tooltip-minoredit'               => 'Diese Änderung als klein markieren.',
+'tooltip-save'                    => 'Änderungen speichern',
+'tooltip-preview'                 => 'Vorschau der Änderungen an dieser Seite. Bitte vor dem Speichern benutzen!',
+'tooltip-diff'                    => 'Zeigt Änderungen am Text tabellarisch an',
+'tooltip-compareselectedversions' => 'Unterschiede zwischen zwei ausgewählten Versionen dieser Seite vergleichen.',
+'tooltip-watch'                   => 'Diese Seite der persönlichen Beobachtungsliste hinzufügen.',
+'tooltip-recreate'                => 'Seite neu erstellen, obwohl sie gelöscht wurde.',
+
+# Stylesheets
+'common.css'   => '/** CSS an dieser Stelle wirkt sich auf alle Skins aus */',
+'monobook.css' => '/** Kleinschreibung nicht erzwingen */
+.portlet h5,
+.portlet h6,
+#p-personal ul,
+#p-cactions li a {
+	text-transform: none;
+}',
+
+# Scripts
+'common.js'   => '/* Jedes JavaScript hier wird für alle Benutzer für jede Seite geladen. */',
+'monobook.js' => '/* Deprecated; use [[MediaWiki:common.js]] */',
+
+# Metadata
+'nodublincore'      => 'Dublin-Core-RDF-Metadaten sind für diesen Server deaktiviert.',
+'nocreativecommons' => 'Creative-Commons-RDF-Metadaten sind für diesen Server deaktiviert.',
+'notacceptable'     => 'Der Wiki-Server kann die Daten nicht für Ihr Ausgabegerät aufbereiten.',
+
+# Attribution
+'anonymous'        => 'Anonyme(r) Benutzer auf {{SITENAME}}',
+'siteuser'         => '{{SITENAME}}-Benutzer $1',
+'lastmodifiedatby' => 'Diese Seite wurde zuletzt am $1 um $2 Uhr von $3 geändert.', # $1 date, $2 time, $3 user
+'and'              => 'und',
+'othercontribs'    => 'Basiert auf der Arbeit von $1',
+'others'           => 'andere',
+'siteusers'        => '{{SITENAME}}-Benutzer $1',
+'creditspage'      => 'Seiteninformationen',
+'nocredits'        => 'Für diese Seite sind keine Informationen vorhanden.',
+
+# Spam protection
+'spamprotectiontitle'    => 'Spamschutzfilter',
+'spamprotectiontext'     => 'Die Seite die Sie speichern wollten wurde vom Spamschutzfilter blockiert. Das liegt wahrscheinlich an einem Link zu einer externen Seite.',
+'spamprotectionmatch'    => 'Der folgende Text wurde von dem Spam-Filter gefunden: $1',
+'subcategorycount'       => '{{PLURAL:$1|Es wird $1 Unterkategorie|Es werden $1 Unterkategorien}} angezeigt.',
+'categoryarticlecount'   => 'Es {{PLURAL:$1|wird $1 Seite|werden $1 Seiten}} aus dieser Kategorie angezeigt.',
+'category-media-count'   => 'Es {{PLURAL:$1|wird $1 Datei|werden $1 Dateien}} aus dieser Kategorie angezeigt.',
+'listingcontinuesabbrev' => ' (Forts.)',
+'spambot_username'       => 'MediaWiki Spam-Säuberung',
+'spam_reverting'         => 'Letzte Version ohne Links zu $1 wiederhergestellt.',
+'spam_blanking'          => 'Alle Versionen enthielten Links zu $1, bereinigt.',
+
+# Info page
+'infosubtitle'   => 'Seiteninformation',
+'numedits'       => 'Anzahl der Seitenänderungen: $1',
+'numtalkedits'   => 'Anzahl der Diskussionsänderungen: $1',
+'numwatchers'    => 'Anzahl der Beobachter: $1',
+'numauthors'     => 'Anzahl der Autoren: $1',
+'numtalkauthors' => 'Anzahl der Diskussionsteilnehmer: $1',
+
+# Math options
+'mw_math_png'    => 'Immer als PNG darstellen',
+'mw_math_simple' => 'Einfaches TeX als HTML darstellen, sonst PNG',
+'mw_math_html'   => 'Wenn möglich als HTML darstellen, sonst PNG',
+'mw_math_source' => 'Als TeX belassen (für Textbrowser)',
+'mw_math_modern' => 'Empfehlenswert für moderne Browser',
+'mw_math_mathml' => 'MathML (experimentell)',
+
+# Patrolling
+'markaspatrolleddiff'                 => 'Als geprüft markieren',
+'markaspatrolledtext'                 => 'Diese Seitenänderung als geprüft markieren',
+'markedaspatrolled'                   => 'Als geprüft markiert',
+'markedaspatrolledtext'               => 'Die ausgewählte Seitenänderung wurde als geprüft markiert.',
+'rcpatroldisabled'                    => 'Prüfung der letzten Änderungen gesperrt',
+'rcpatroldisabledtext'                => 'Die Prüfung der letzten Änderungen ist zur Zeit gesperrt.',
+'markedaspatrollederror'              => 'Markierung als „geprüft“ nicht möglich.',
+'markedaspatrollederrortext'          => 'Sie müssen eine Seitenänderung auswählen.',
+'markedaspatrollederror-noautopatrol' => 'Es ist Ihnen nicht erlaubt, eigene Bearbeitungen als geprüft zu markieren.',
+
+# Patrol log
+'patrol-log-page' => 'Prüf-Logbuch',
+'patrol-log-line' => 'hat $1 von $2 als geprüft markiert $3.',
+'patrol-log-auto' => '(automatisch)',
+'patrol-log-diff' => 'Version $1',
+
+# Image deletion
+'deletedrevision' => 'Alte Version $1 gelöscht.',
+
+# Browsing diffs
+'previousdiff' => '← Zum vorherigen Versionsunterschied',
+'nextdiff'     => 'Zum nächsten Versionsunterschied →',
+
+# Media information
+'mediawarning'         => "'''Warnung:''' Diese Art von Datei kann böswilligen Programmcode enthalten. Durch das Herunterladen und Öffnen der Datei kann Ihr Computer beschädigt werden.<hr />",
+'imagemaxsize'         => 'Maximale Bildgröße auf Bildbeschreibungsseiten:',
+'thumbsize'            => 'Standardgröße der Vorschaubilder (thumbnails):',
+'file-info'            => '(Dateigröße: $1, MIME-Typ: $2)',
+'file-info-size'       => '($1 × $2 Pixel, Dateigröße: $3, MIME-Typ: $4)',
+'file-nohires'         => '<small>Keine höhere Auflösung vorhanden.</small>',
+'file-svg'             => '<small>Dies ist eine verlustfrei skalierbare Vektorgrafik. Basisgröße: $1 × $2 Pixel.</small>',
+'show-big-image'       => 'Version in höherer Auflösung',
+'show-big-image-thumb' => '<small>Größe der Voransicht: $1 × $2 Pixel</small>',
+
+'newimages'         => 'Neue Dateien',
+'newimages-summary' => 'Diese Spezialseite zeigt die zuletzt hochgeladenen Bilder und Dateien an.',
+'showhidebots'      => '(Bots $1)',
+'noimages'          => 'Keine Dateien gefunden.',
+
+/*
+Short names for language variants used for language conversion links.
+To disable showing a particular link, set it to 'disable', e.g.
+'variantname-zh-sg' => 'disable',
+Variants for Chinese language
+*/
+'variantname-zh-cn' => 'cn',
+'variantname-zh-tw' => 'tw',
+'variantname-zh-hk' => 'hk',
+'variantname-zh-sg' => 'sg',
+'variantname-zh'    => 'zh',
+
+# Variants for Serbian language
+'variantname-sr-ec' => 'sr-ec',
+'variantname-sr-el' => 'sr-el',
+'variantname-sr-jc' => 'sr-jc',
+'variantname-sr-jl' => 'sr-jl',
+'variantname-sr'    => 'sr',
+
+# Variants for Kazakh language
+'variantname-kk-tr' => 'kk-tr',
+'variantname-kk-kz' => 'kk-kz',
+'variantname-kk-cn' => 'kk-cn',
+'variantname-kk'    => 'kk',
+
+'passwordtooshort' => 'Fehler bei der Passwort-Wahl: Es muss mindestens $1 Zeichen lang sein und darf nicht mit dem Benutzernamen identisch sein.',
+
+# Metadata
+'metadata'          => 'Metadaten',
+'metadata-help'     => 'Diese Datei enthält weitere Informationen, die in der Regel von der Digitalkamera oder dem verwendeten Scanner stammen. Durch nachträgliche Bearbeitung der Originaldatei können einige Details verändert worden sein.',
+'metadata-expand'   => 'Erweiterte Details einblenden',
+'metadata-collapse' => 'Erweiterte Details ausblenden',
+'metadata-fields'   => 'Die folgenden Felder der EXIF-Metadaten in diesem MediaWiki-Systemtext werden auf Bildbeschreibungsseiten angezeigt; weitere standardmäßig „eingeklappte“ Details können angezeigt werden.
+* make
+* model
+* datetimeoriginal
+* exposuretime
+* fnumber
+* focallength',
+
+# EXIF tags
+'exif-imagewidth'                  => 'Breite',
+'exif-imagelength'                 => 'Länge',
+'exif-bitspersample'               => 'Bits pro Farbkomponente',
+'exif-compression'                 => 'Art der Kompression',
+'exif-photometricinterpretation'   => 'Pixelzusammensetzung',
+'exif-orientation'                 => 'Kameraausrichtung',
+'exif-samplesperpixel'             => 'Anzahl Komponenten',
+'exif-planarconfiguration'         => 'Datenausrichtung',
+'exif-ycbcrsubsampling'            => 'Subsampling Rate von Y bis C',
+'exif-ycbcrpositioning'            => 'Y und C Positionierung',
+'exif-xresolution'                 => 'Horizontale Auflösung',
+'exif-yresolution'                 => 'Vertikale Auflösung',
+'exif-resolutionunit'              => 'Maßeinheit der Auflösung',
+'exif-stripoffsets'                => 'Bilddaten-Versatz',
+'exif-rowsperstrip'                => 'Anzahl Zeilen pro Streifen',
+'exif-jpeginterchangeformat'       => 'Offset zu JPEG SOI',
+'exif-jpeginterchangeformatlength' => 'Größe der JPEG-Daten in Bytes',
+'exif-transferfunction'            => 'Übertragungsfunktion',
+'exif-whitepoint'                  => 'Manuell mit Messung',
+'exif-ycbcrcoefficients'           => 'YCbCr-Koeffizienten',
+'exif-referenceblackwhite'         => 'Schwarz/Weiß-Referenzpunkte',
+'exif-datetime'                    => 'Speicherzeitpunkt',
+'exif-imagedescription'            => 'Bildtitel',
+'exif-make'                        => 'Hersteller',
+'exif-model'                       => 'Modell',
+'exif-software'                    => 'Software',
+'exif-artist'                      => 'Fotograf',
+'exif-copyright'                   => 'Urheberrechte',
+'exif-exifversion'                 => 'Exif-Version',
+'exif-flashpixversion'             => 'unterstützte Flashpix-Version',
+'exif-colorspace'                  => 'Farbraum',
+'exif-componentsconfiguration'     => 'Bedeutung einzelner Komponenten',
+'exif-compressedbitsperpixel'      => 'Komprimierte Bits pro Pixel',
+'exif-pixelydimension'             => 'Gültige Bildbreite',
+'exif-pixelxdimension'             => 'Gültige Bildhöhe',
+'exif-makernote'                   => 'Herstellernotiz',
+'exif-usercomment'                 => 'Benutzerkommentare',
+'exif-relatedsoundfile'            => 'Zugehörige Tondatei',
+'exif-datetimeoriginal'            => 'Erfassungszeitpunkt',
+'exif-datetimedigitized'           => 'Digitalisierungszeitpunkt',
+'exif-subsectime'                  => 'Speicherzeitpunkt (1/100 s)',
+'exif-subsectimeoriginal'          => 'Erfassungszeitpunkt (1/100 s)',
+'exif-subsectimedigitized'         => 'Digitalisierungszeitpunkt (1/100 s)',
+'exif-exposuretime'                => 'Belichtungsdauer',
+'exif-exposuretime-format'         => '$1 Sekunden ($2)',
+'exif-fnumber'                     => 'Blende',
+'exif-fnumber-format'              => 'f/$1',
+'exif-exposureprogram'             => 'Belichtungsprogramm',
+'exif-spectralsensitivity'         => 'Spectral Sensitivity',
+'exif-isospeedratings'             => 'Film- oder Sensorempfindlichkeit (ISO)',
+'exif-oecf'                        => 'Optoelektronischer Umrechnungsfaktor',
+'exif-shutterspeedvalue'           => 'Belichtungszeitwert',
+'exif-aperturevalue'               => 'Blendenwert',
+'exif-brightnessvalue'             => 'Helligkeitswert',
+'exif-exposurebiasvalue'           => 'Belichtungsvorgabe',
+'exif-maxaperturevalue'            => 'Größte Blende',
+'exif-subjectdistance'             => 'Entfernung',
+'exif-meteringmode'                => 'Messverfahren',
+'exif-lightsource'                 => 'Lichtquelle',
+'exif-flash'                       => 'Blitz',
+'exif-focallength'                 => 'Brennweite',
+'exif-focallength-format'          => '$1 mm',
+'exif-subjectarea'                 => 'Bereich',
+'exif-flashenergy'                 => 'Blitzstärke',
+'exif-focalplanexresolution'       => 'Sensorauflösung horizontal',
+'exif-focalplaneyresolution'       => 'Sensorauflösung vertikal',
+'exif-focalplaneresolutionunit'    => 'Einheit der Sensorauflösung',
+'exif-subjectlocation'             => 'Motivstandort',
+'exif-exposureindex'               => 'Belichtungsindex',
+'exif-sensingmethod'               => 'Messmethode',
+'exif-filesource'                  => 'Quelle der Datei',
+'exif-scenetype'                   => 'Szenentyp',
+'exif-cfapattern'                  => 'CFA-Muster',
+'exif-customrendered'              => 'Benutzerdefinierte Bildverarbeitung',
+'exif-exposuremode'                => 'Belichtungsmodus',
+'exif-whitebalance'                => 'Weißabgleich',
+'exif-digitalzoomratio'            => 'Digitalzoom',
+'exif-focallengthin35mmfilm'       => 'Brennweite (Kleinbildäquivalent)',
+'exif-scenecapturetype'            => 'Aufnahmeart',
+'exif-gaincontrol'                 => 'Verstärkung',
+'exif-contrast'                    => 'Kontrast',
+'exif-saturation'                  => 'Sättigung',
+'exif-sharpness'                   => 'Schärfe',
+'exif-devicesettingdescription'    => 'Geräteeinstellung',
+'exif-subjectdistancerange'        => 'Motiventfernung',
+'exif-imageuniqueid'               => 'Bild-ID',
+'exif-gpsversionid'                => 'GPS-Tag-Version',
+'exif-gpslatituderef'              => 'nördl. oder südl. Breite',
+'exif-gpslatitude'                 => 'Geografische Breite',
+'exif-gpslongituderef'             => 'östl. oder westl. Länge',
+'exif-gpslongitude'                => 'Geografische Länge',
+'exif-gpsaltituderef'              => 'Bezugshöhe',
+'exif-gpsaltitude'                 => 'Höhe',
+'exif-gpstimestamp'                => 'GPS-Zeit',
+'exif-gpssatellites'               => 'Für die Messung benutzte Satelliten',
+'exif-gpsstatus'                   => 'Empfängerstatus',
+'exif-gpsmeasuremode'              => 'Messverfahren',
+'exif-gpsdop'                      => 'Maßpräzision',
+'exif-gpsspeedref'                 => 'Geschwindigkeitseinheit',
+'exif-gpsspeed'                    => 'Geschwindigkeit des GPS-Empfängers',
+'exif-gpstrackref'                 => 'Referenz für Bewegungsrichtung',
+'exif-gpstrack'                    => 'Bewegungsrichtung',
+'exif-gpsimgdirectionref'          => 'Referenz für die Ausrichtung des Bildes',
+'exif-gpsimgdirection'             => 'Bildrichtung',
+'exif-gpsmapdatum'                 => 'Geodätisches Datum benutzt',
+'exif-gpsdestlatituderef'          => 'Referenz für die Breite',
+'exif-gpsdestlatitude'             => 'Breite',
+'exif-gpsdestlongituderef'         => 'Referenz für die Länge',
+'exif-gpsdestlongitude'            => 'Länge',
+'exif-gpsdestbearingref'           => 'Referenz für Motivrichtung',
+'exif-gpsdestbearing'              => 'Motivrichtung',
+'exif-gpsdestdistanceref'          => 'Referenz für die Motiventfernung',
+'exif-gpsdestdistance'             => 'Motiventfernung',
+'exif-gpsprocessingmethod'         => 'Name des GPS-Verfahrens',
+'exif-gpsareainformation'          => 'Name des GPS-Gebietes',
+'exif-gpsdatestamp'                => 'GPS-Datum',
+'exif-gpsdifferential'             => 'GPS-Differentialkorrektur',
+
+# EXIF attributes
+'exif-compression-1' => 'Unkomprimiert',
+'exif-compression-6' => 'JPEG',
+
+'exif-photometricinterpretation-2' => 'RGB',
+'exif-photometricinterpretation-6' => 'YCbCr',
+
+'exif-unknowndate' => 'Unbekanntes Datum',
+
+'exif-orientation-1' => 'Normal', # 0th row: top; 0th column: left
+'exif-orientation-2' => 'Horizontal gedreht', # 0th row: top; 0th column: right
+'exif-orientation-3' => 'Um 180° gedreht', # 0th row: bottom; 0th column: right
+'exif-orientation-4' => 'Vertikal gedreht', # 0th row: bottom; 0th column: left
+'exif-orientation-5' => 'Entgegen dem Uhrzeigersinn um 90° gedreht und vertikal gewendet', # 0th row: left; 0th column: top
+'exif-orientation-6' => 'Um 90° in Uhrzeigersinn gedreht', # 0th row: right; 0th column: top
+'exif-orientation-7' => 'Um 90° in Uhrzeigersinn gedreht und vertikal gewendet', # 0th row: right; 0th column: bottom
+'exif-orientation-8' => 'Um 90° entgegen dem Uhrzeigersinn gedreht', # 0th row: left; 0th column: bottom
+
+'exif-planarconfiguration-1' => 'Grobformat',
+'exif-planarconfiguration-2' => 'Planarformat',
+
+'exif-xyresolution-i' => '$1 dpi',
+'exif-xyresolution-c' => '$1 dpc',
+
+'exif-colorspace-1'      => 'sRGB',
+'exif-colorspace-ffff.h' => 'FFFF.H',
+
+'exif-componentsconfiguration-0' => 'Existiert nicht',
+'exif-componentsconfiguration-1' => 'Y',
+'exif-componentsconfiguration-2' => 'Cb',
+'exif-componentsconfiguration-3' => 'Cr',
+'exif-componentsconfiguration-4' => 'R',
+'exif-componentsconfiguration-5' => 'G',
+'exif-componentsconfiguration-6' => 'B',
+
+'exif-exposureprogram-0' => 'Unbekannt',
+'exif-exposureprogram-1' => 'Manuell',
+'exif-exposureprogram-2' => 'Standardprogramm',
+'exif-exposureprogram-3' => 'Zeitautomatik',
+'exif-exposureprogram-4' => 'Blendenautomatik',
+'exif-exposureprogram-5' => 'Kreativprogramm mit Bevorzugung hoher Schärfentiefe',
+'exif-exposureprogram-6' => 'Action-Programm mit Bevorzugung einer kurzen Belichtungszeit',
+'exif-exposureprogram-7' => 'Portrait-Programm',
+'exif-exposureprogram-8' => 'Landschaftsaufnahmen',
+
+'exif-subjectdistance-value' => '$1 Meter',
+
+'exif-meteringmode-0'   => 'Unbekannt',
+'exif-meteringmode-1'   => 'Durchschnittlich',
+'exif-meteringmode-2'   => 'Mittenzentriert',
+'exif-meteringmode-3'   => 'Spotmessung',
+'exif-meteringmode-4'   => 'Mehrfachspotmessung',
+'exif-meteringmode-5'   => 'Muster',
+'exif-meteringmode-6'   => 'Bildteil',
+'exif-meteringmode-255' => 'Unbekannt',
+
+'exif-lightsource-0'   => 'Unbekannt',
+'exif-lightsource-1'   => 'Tageslicht',
+'exif-lightsource-2'   => 'Fluoreszierend',
+'exif-lightsource-3'   => 'Glühlampe',
+'exif-lightsource-4'   => 'Blitz',
+'exif-lightsource-9'   => 'Schönes Wetter',
+'exif-lightsource-10'  => 'Bewölkt',
+'exif-lightsource-11'  => 'Schatten',
+'exif-lightsource-12'  => 'Tageslicht fluoreszierend (D 5700–7100 K)',
+'exif-lightsource-13'  => 'Tagesweiß fluoreszierend (N 4600–5400 K)',
+'exif-lightsource-14'  => 'Kaltweiß fluoreszierend (W 3900–4500 K)',
+'exif-lightsource-15'  => 'Weiß fluoreszierend (WW 3200–3700 K)',
+'exif-lightsource-17'  => 'Standardlicht A',
+'exif-lightsource-18'  => 'Standardlicht B',
+'exif-lightsource-19'  => 'Standardlicht C',
+'exif-lightsource-20'  => 'D55',
+'exif-lightsource-21'  => 'D65',
+'exif-lightsource-22'  => 'D75',
+'exif-lightsource-23'  => 'D50',
+'exif-lightsource-24'  => 'ISO Studio Kunstlicht',
+'exif-lightsource-255' => 'Andere Lichtquelle',
+
+'exif-focalplaneresolutionunit-2' => 'Zoll',
+
+'exif-sensingmethod-1' => 'Undefiniert',
+'exif-sensingmethod-2' => 'Ein-Chip-Farbsensor',
+'exif-sensingmethod-3' => 'Zwei-Chip-Farbsensor',
+'exif-sensingmethod-4' => 'Drei-Chip-Farbsensor',
+'exif-sensingmethod-7' => 'Trilinearer Sensor',
+
+'exif-filesource-3' => 'DSC',
+
+'exif-scenetype-1' => 'Normal',
+
+'exif-customrendered-0' => 'Standard',
+'exif-customrendered-1' => 'Benutzerdefiniert',
+
+'exif-exposuremode-0' => 'Automatische Belichtung',
+'exif-exposuremode-1' => 'Manuelle Belichtung',
+'exif-exposuremode-2' => 'Belichtungsreihe',
+
+'exif-whitebalance-0' => 'Automatisch',
+'exif-whitebalance-1' => 'Manuell',
+
+'exif-scenecapturetype-0' => 'Standard',
+'exif-scenecapturetype-1' => 'Landschaft',
+'exif-scenecapturetype-2' => 'Portrait',
+'exif-scenecapturetype-3' => 'Nachtszene',
+
+'exif-gaincontrol-0' => 'Keine',
+'exif-gaincontrol-1' => 'Gering',
+'exif-gaincontrol-2' => 'High gain up',
+'exif-gaincontrol-3' => 'Low gain down',
+'exif-gaincontrol-4' => 'High gain down',
+
+'exif-contrast-0' => 'Normal',
+'exif-contrast-1' => 'Schwach',
+'exif-contrast-2' => 'Stark',
+
+'exif-saturation-0' => 'Normal',
+'exif-saturation-1' => 'Gering',
+'exif-saturation-2' => 'Hoch',
+
+'exif-sharpness-0' => 'Normal',
+'exif-sharpness-1' => 'Gering',
+'exif-sharpness-2' => 'Stark',
+
+'exif-subjectdistancerange-0' => 'Unbekannt',
+'exif-subjectdistancerange-1' => 'Makro',
+'exif-subjectdistancerange-2' => 'Nah',
+'exif-subjectdistancerange-3' => 'Entfernt',
+
+# Pseudotags used for GPSLatitudeRef and GPSDestLatitudeRef
+'exif-gpslatitude-n' => 'nördl. Breite',
+'exif-gpslatitude-s' => 'südl. Breite',
+
+# Pseudotags used for GPSLongitudeRef and GPSDestLongitudeRef
+'exif-gpslongitude-e' => 'östl. Länge',
+'exif-gpslongitude-w' => 'westl. Länge',
+
+'exif-gpsstatus-a' => 'Messung läuft',
+
+'exif-gpsmeasuremode-2' => '2-dimensionale Messung',
+'exif-gpsmeasuremode-3' => '3-dimensionale Messung',
+
+# Pseudotags used for GPSSpeedRef and GPSDestDistanceRef
+'exif-gpsspeed-k' => 'km/h',
+'exif-gpsspeed-m' => 'mph',
+'exif-gpsspeed-n' => 'Knoten',
+
+# Pseudotags used for GPSTrackRef, GPSImgDirectionRef and GPSDestBearingRef
+'exif-gpsdirection-t' => 'Tatsächliche Richtung',
+'exif-gpsdirection-m' => 'Magnetische Richtung',
+
+# External editor support
+'edit-externally'      => 'Diese Datei mit einem externen Programm bearbeiten',
+'edit-externally-help' => '<span class="plainlinks">Siehe die [http://meta.wikimedia.org/wiki/Help:External_editors Installationsanweisungen] für weitere Informationen</span>',
+
+# 'all' in various places, this might be different for inflected languages
+'recentchangesall' => 'alle',
+'imagelistall'     => 'alle',
+'watchlistall1'    => 'alle',
+'watchlistall2'    => 'alle',
+'namespacesall'    => 'alle',
+
+# E-mail address confirmation
+'confirmemail'            => 'E-Mail-Adresse bestätigen (Authentifizierung)',
+'confirmemail_noemail'    => 'Sie haben keine gültige E-Mail-Adresse in Ihrem [[Special:Preferences|Benutzerprofil]] eingetragen.',
+'confirmemail_text'       => '{{SITENAME}} erfordert, dass Sie Ihre E-Mail-Adresse bestätigen (authentifizieren), bevor Sie die erweiterten E-Mail-Funktionen benutzen können. Durch einen Klick auf die Schaltfläche unten wird eine E-Mail an Sie verschickt. Diese E-Mail enthält einen Link mit einem Bestätigungs-Code. Durch Klicken auf diesen Link wird bestätigt, dass Ihre E-Mail-Adresse gültig ist.',
+'confirmemail_pending'    => '<div class="error">Es wurde Ihnen bereits ein Bestätigungs-Code per E-Mail zugeschickt. Wenn Sie Ihr Benutzerkonto erst vor kurzem erstellt haben, warten Sie bitte noch ein paar Minuten auf die E-Mail, bevor Sie einen neuen Code anfordern.</div>',
+'confirmemail_send'       => 'Bestätigungscode zuschicken',
+'confirmemail_sent'       => 'Bestätigungs-E-Mail wurde verschickt.',
+'confirmemail_oncreate'   => 'Ein Bestätigungs-Code wurde an Ihre E-Mail-Adresse gesandt. Dieser Code wird für die Anmeldung nicht benötigt, jedoch wird er zur Aktivierung der E-Mail-Funktionen innerhalb des Wikis gebraucht.',
+'confirmemail_sendfailed' => 'Die Bestätigungs-E-Mail konnte nicht versendet werden. Bitte prüfen Sie die E-Mail-Adresse auf ungültige Zeichen.
+
+Rückmeldung des Mailservers: $1',
+'confirmemail_invalid'    => 'Ungültiger Bestätigungs-Code. Die Gültigkeitsdauer des Codes ist eventuell abgelaufen.',
+'confirmemail_needlogin'  => 'Sie müssen sich $1 um Ihre E-Mail-Adresse zu bestätigen.',
+'confirmemail_success'    => 'Ihre E-Mail-Adresse wurde erfolgreich bestätigt. Sie können sich jetzt einloggen.',
+'confirmemail_loggedin'   => 'Ihre E-Mail-Adresse wurde erfolgreich bestätigt.',
+'confirmemail_error'      => 'Es gab einen Fehler bei der Bestätigung Ihrer E-Mail-Adresse.',
+'confirmemail_subject'    => '[{{SITENAME}}] - Bestätigung der E-Mail-Adresse',
+'confirmemail_body'       => 'Hallo,
+
+jemand mit der IP-Adresse $1, wahrscheinlich Sie selbst, hat eine Bestätigung dieser E-Mail-Adresse für das Benutzerkonto "$2" für {{SITENAME}} angefordert.
+
+Um die E-Mail-Funktion für {{SITENAME}} (wieder) zu aktivieren und um zu bestätigen, dass dieses Benutzerkonto wirklich zu Ihrer E-Mail-Adresse und damit zu Ihnen gehört, öffnen Sie bitte folgenden Link in Ihrem Browser: $3
+
+Der Bestätigungscode ist bis zu folgendem Zeitpunkt gültig: $4
+
+Wenn diese E-Mail-Adresse *nicht* zu dem genannten Benutzerkonto gehört, folgen Sie diesem Link bitte *nicht*.
+
+-- 
+{{SITENAME}}: {{fullurl:{{Mediawiki:mainpage}}}}',
+
+# Inputbox extension, may be useful in other contexts as well
+'tryexact'       => 'Versuche exakte Suche:',
+'searchfulltext' => 'Gesamten Text durchsuchen',
+'createarticle'  => 'Seite anlegen',
+
+# Scary transclusion
+'scarytranscludedisabled' => '[Interwiki-Einbindung ist deaktiviert]',
+'scarytranscludefailed'   => '[Vorlageneinbindung für $1 ist gescheitert]',
+'scarytranscludetoolong'  => '[URL ist zu lang; Entschuldigung]',
+
+# Trackbacks
+'trackbackbox'      => '<div id="mw_trackbacks">
+Trackbacks für diese Seite:<br />
+$1
+</div>',
+'trackbackremove'   => '([$1 löschen])',
+'trackbacklink'     => 'Trackback',
+'trackbackdeleteok' => 'Trackback wurde erfolgreich gelöscht.',
+
+# Delete conflict
+'deletedwhileediting' => '<span class="error">Achtung: Diese Seite wurde gelöscht, nachdem Sie angefangen haben, sie zu bearbeiten! 
+Sehen Sie im [{{fullurl:Special:Log|type=delete&page=}}{{FULLPAGENAMEE}} Lösch-Logbuch] nach, 
+warum die Seite gelöscht wurde. Wenn Sie die Seite speichern, wird sie neu angelegt.</span>',
+'confirmrecreate'     => "Benutzer [[{{ns:user}}:$1|$1]] ([[{{ns:user_talk}}:$1|Diskussion]]) hat diese Seite gelöscht, nachdem Sie angefangen haben, sie zu bearbeiten. Die Begründung lautete:
+''$2''
+Bitte bestätigen Sie, dass Sie diese Seite wirklich neu erstellen möchten.",
+'recreate'            => 'Erneut anlegen',
+
+# HTML dump
+'redirectingto' => 'Weitergeleitet nach [[$1]]',
+
+# action=purge
+'confirm_purge'        => 'Diese Seite aus dem Server-Cache löschen? $1',
+'confirm_purge_button' => 'OK',
+
+'youhavenewmessagesmulti' => 'Sie haben neue Nachrichten: $1',
+
+'searchcontaining' => "Suche nach Seiten, in denen ''$1'' vorkommt.",
+'searchnamed'      => "Suche nach Seiten, deren Name ''$1'' enthält.",
+'articletitles'    => "Seiten, die mit ''$1'' beginnen",
+'hideresults'      => 'Verbergen',
+
+# DISPLAYTITLE
+'displaytitle' => '(Link zu dieser Seite als [[$1]])',
+
+'loginlanguagelabel' => 'Sprache: $1',
+
+# Multipage image navigation
+'imgmultipageprev'   => '← vorige Seite',
+'imgmultipagenext'   => 'nächste Seite →',
+'imgmultigo'         => 'OK',
+'imgmultigotopre'    => 'Gehe zu Seite',
+'imgmultiparseerror' => 'Die Datei scheint defekt zu sein, so dass {{SITENAME}} keine Seitenliste erstellen kann.',
+
+# Table pager
+'ascending_abbrev'         => 'auf',
+'descending_abbrev'        => 'ab',
+'table_pager_next'         => 'Nächste Seite',
+'table_pager_prev'         => 'Vorherige Seite',
+'table_pager_first'        => 'Erste Seite',
+'table_pager_last'         => 'Letzte Seite',
+'table_pager_limit'        => 'Zeige $1 Einträge pro Seite',
+'table_pager_limit_submit' => 'Los',
+'table_pager_empty'        => 'Keine Ergebnisse',
+
+# Auto-summaries
+'autosumm-blank'   => 'Die Seite wurde geleert.',
+'autosumm-replace' => "Der Seiteninhalt wurde durch einen anderen Text ersetzt: '$1'",
+'autoredircomment' => 'Weiterleitung nach [[$1]] erstellt', # This should be changed to the new naming convention, but existed beforehand
+'autosumm-new'     => 'Die Seite wurde neu angelegt: $1',
+
+# Size units
+'size-bytes'     => '$1 B',
+'size-kilobytes' => '$1 KB',
+'size-megabytes' => '$1 MB',
+'size-gigabytes' => '$1 GB',
+
+# Live preview
+'livepreview-loading' => 'Laden …',
+'livepreview-ready'   => 'Laden … Fertig!',
+'livepreview-failed'  => 'Live-Vorschau nicht möglich! Bitte die normale Vorschau benutzen.',
+'livepreview-error'   => 'Verbindung nicht möglich: $1 "$2". Bitte die normale Vorschau benutzen.',
+
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesDv.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesDv.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesDv.php	(revision 1280)
@@ -0,0 +1,8 @@
+<?php
+/** Dhivehi language file ( ދިވެހިބަސް',      )
+  *
+  * @addtogroup Language
+  */
+
+$rtl = true;
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesDz.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesDz.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesDz.php	(revision 1280)
@@ -0,0 +1,21 @@
+<?php
+/** Dzongkha (རྫོང་ཁ)
+  *
+  * @addtogroup Language
+  *
+  * @author Ævar Arnfjörð Bjarmason <avarab@gmail.com>
+  */
+$digitTransformTable = array(
+	'0' => '༠',
+	'1' => '༡',
+	'2' => '༢',
+	'3' => '༣',
+	'4' => '༤',
+	'5' => '༥',
+	'6' => '༦',
+	'7' => '༧',
+	'8' => '༨',
+	'9' => '༩'
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesEl.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesEl.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesEl.php	(revision 1280)
@@ -0,0 +1,1852 @@
+<?php
+/** Greek (Ελληνικά)
+  *
+  * Translation by Pasok Internet Volunteers
+  * http://forum.pasok.gr
+  * version 1.0 (initial release)
+  *
+  *The project for the translation of MediaWiki into Greek
+  *was undertaken by a group of ICT volunteers working under
+  *the auspices of the Greek political party PASOK.
+  *
+  *The idea behind this effort was  to provide an extensible,
+  *easy-to-use and non-intimidating tool for content development
+  *and project management, to be used throughout the administrative
+  *and political structure of PASOK by staff, volunteers, party members
+  *and elected officials (all of whom possess varying degrees of ICT skills).
+  *
+  *The PASOK ICT team and the volunteers who worked on this project are
+  *now returning the translated interface to the Open-Source Community
+  *with over 98% of the messages translated into user-friendly Greek.
+  *
+  *We hope that it will be used as a tool by other civil society organizations
+  *in Greece, and that it will enhance the collective creation and the dissemination
+  *of knowledge - an essential component of the democratic process.
+  *
+  * @addtogroup Language
+  */
+
+$namespaceNames = array(
+	NS_MEDIA            => 'Μέσον',
+	NS_SPECIAL          => 'Ειδικό',
+	NS_MAIN	            => '',
+	NS_TALK	            => 'Συζήτηση',
+	NS_USER             => 'Χρήστης',
+	NS_USER_TALK        => 'Συζήτηση_χρήστη',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK     => '$1_συζήτηση',
+	NS_IMAGE            => 'Εικόνα',
+	NS_IMAGE_TALK       => 'Συζήτηση_εικόνας',
+	NS_MEDIAWIKI        => 'MediaWiki',
+	NS_MEDIAWIKI_TALK   => 'MediaWiki_talk',
+	NS_TEMPLATE         => 'Πρότυπο',
+	NS_TEMPLATE_TALK    => 'Συζήτηση_προτύπου',
+	NS_HELP             => 'Βοήθεια',
+	NS_HELP_TALK        => 'Συζήτηση_βοήθειας',
+	NS_CATEGORY         => 'Κατηγορία',
+	NS_CATEGORY_TALK    => 'Συζήτηση_κατηγορίας',
+);
+$fallback8bitEncoding = 'iso-8859-7';
+$separatorTransformTable = array(',' => '.', '.' => ',' );
+$linkTrail = '/^([a-z]+)(.*)$/sD';
+
+
+$datePreferences = array(
+	'default',
+	'dmy',
+	'ISO 8601',
+);
+
+$defaultDateFormat = 'dmy';
+
+$datePreferenceMigrationMap = array(
+	'default',
+	'dmy',
+	'dmy',
+	'dmy'
+);
+
+$dateFormats = array(
+	'dmy time' => 'H:i',
+	'dmy date' => 'j xg Y',
+	'dmy both' => 'H:i, j xg Y',
+
+	'ISO 8601 time' => 'xnH:xni:xns',
+	'ISO 8601 date' => 'xnY-xnm-xnd',
+	'ISO 8601 both' => 'xnY-xnm-xnd"T"xnH:xni:xns',
+);
+
+
+$messages = array(
+
+# User preference toggles
+#----------------------------------------#
+'tog-underline' => 'Υπογράμμιση συνδέσμων',
+'tog-highlightbroken' => 'Κατεστραμένοι σύνδεσμοι μορφοποίησης <a href="" class="new">όπως αυτός</a> (εναλλακτικά: όπως αυτός<a href="" class="internal">?</a>).',
+'tog-justify' => 'Στοίχιση παραγράφων',
+'tog-hideminor' => 'Απόκρυψη αλλαγών μικρής κλίμακας',
+'tog-usenewrc' => 'Ανάδειξη πρόσφατων αλλαγών (δεν λειτουργεί σε όλους τους browser)',
+'tog-numberheadings' => 'Αυτόματη αρίθμιση τίτλων',
+'tog-showtoolbar' => 'Εμφάνιση μπάρας εργαλείων επεξεργασίας',
+'tog-editondblclick' => 'Επεξεργασία σελίδων με διπλό κλικ (JavaScript)',
+'tog-editsection' => 'Ενεργοποίηση επεξεργασίας τμημάτων μέσω των συνδέσμων [επεξεργασία]',
+'tog-editsectiononrightclick' => 'Ενεργοποίηση επεξεργασίας τμήματος με δεξύ κλικ<br /> στους τίτλους των τμημάτων (JavaScript)',
+'tog-showtoc' => 'Εμφάνιση πίνακα περιεχομένων <br />(για σελίδες με περισσότερες από τρεις κεφαλίδες)',
+'tog-rememberpassword' => 'Διατήρηση του κωδικού πρόσβασης σε αυτό τον υπολογιστή',
+'tog-editwidth' => 'Πλαίσιο επεξεργασίας στο μέγιστο πλάτος',
+'tog-watchdefault' => 'Προσθήκη των σελίδων που επεξεργάζεστε στη λίστα παρακολούθησης.',
+'tog-minordefault' => 'Προκαθορίστε να χαρακτηρίζονται όλες οι αλλαγές "μικρής κλίμακας".',
+'tog-previewontop' => 'Εμφάνιση προεπισκόπησης πριν από το πλαίσο επεξεργασίας και όχι μετά',
+'tog-previewonfirst' => 'Εμφάνιση προεπισκόπησης κατά την πρώτη επεξεργασία',
+'tog-nocache' => 'Απενεργοποίηση της δυνατότητας δημιουργίας cache των σελίδων',
+'tog-enotifwatchlistpages' => 'Ειδοποίηση με e-mail σχετικά με αλλαγές στις σελίδες που παρακολουθώ.',
+'tog-enotifusertalkpages' => 'Ειδοποίηση με e-mail σχετικά με αλλαγές στη συζήτηση της δικής μου σελίδας χρήστη',
+'tog-enotifminoredits' => 'Ειδοποίηση με e-mail και για τις αλλαγές μικρής κλίμακας σε αυτή τη σελίδα',
+'tog-enotifrevealaddr' => 'Εμφάνιση της ηλεκτρονικής μου διεύθυνσης στις ειδοποιήσεις που μου αποστέλλονται.',
+'tog-shownumberswatching' => 'Εμφάνιση του αριθμού των συνδεδεμένων χρηστών',
+'tog-fancysig' => 'Απλή υπογραφή (χωρίς τη χρήση αυτόματου συνδέσμου)',
+'tog-externaleditor' => 'Εξ αρχής χρήση εξωτερικού επεξεργαστή κειμένου',
+'tog-externaldiff' => 'Εξ αρχής χρήση εξωτερικού λογισμικού αντιπαραβολής (diffing)',
+
+'underline-always' => 'Πάντα',
+'underline-never' => 'Ποτέ',
+'underline-default' => 'Όπως ορίζεται από το browser σας.',
+
+'skinpreview' => '(προεπισκόπηση)',
+
+#Months
+
+'january' => 'Ιανουάριος',
+'february' => 'Φεβρουάριος',
+'march' => 'Μάρτιος',
+'april' => 'Απρίλιος',
+'may_long' => 'Μάιος',
+'june' => 'Ιούνιος',
+'july' => 'Ιούλιος',
+'august' => 'Αύγουστος',
+'september' => 'Σεπτέμβριος',
+'october' => 'Οκτώβριος',
+'november' => 'Νοέμβριος',
+'december' => 'Δεκέμβριος',
+
+'january-gen' => 'Ιανουαρίου',
+'february-gen' => 'Φεβρουαρίου',
+'march-gen' => 'Μαρτίου',
+'april-gen' => 'Απριλίου',
+'may-gen' => 'Μαΐου',
+'june-gen' => 'Ιουνίου',
+'july-gen' => 'Ιουλίου',
+'august-gen' => 'Αυγούστου',
+'september-gen' => 'Σεπτεμβρίου',
+'october-gen' => 'Οκτωβρίου',
+'november-gen' => 'Νοεμβρίου',
+'december-gen' => 'Δεκεμβρίου',
+
+
+'jan' => 'Ιαν',
+'feb' => 'Φεβρ',
+'mar' => 'Μαρτ',
+'apr' => 'Απρ',
+'may' => 'Μαΐου',
+'jun' => 'Ιουν',
+'jul' => 'Ιουλ',
+'aug' => 'Αυγ',
+'sep' => 'Σεπτ',
+'oct' => 'Οκτ',
+'nov' => 'Νοε',
+'dec' => 'Δεκ',
+#Days
+#-------#
+'sunday' => 'Κυριακή',
+'monday' => 'Δευτέρα',
+'tuesday' => 'Τρίτη',
+'wednesday' => 'Τετάρτη',
+'thursday' => 'Πέμπτη',
+'friday' => 'Παρασκευή',
+'saturday' => 'Σαββάτο',
+
+
+# Bits of text used by many pages:
+#----------------------------------------------------#
+'categories' => 'Κατηγορίες',
+'pagecategories' => 'Κατηγορίες',
+'category_header' => 'Άρθρα στην κατηγορία "$1"',
+'subcategories' => 'Υποκατηγορίες',
+
+'linkprefix' => '/^(.*?)([a-zA-Z\x80-\xff]+)$/sD',
+'mainpage' => 'Αρχική σελίδα',
+'mainpagetext' => 'To λογισμικό Wiki εγκαταστάθηκε επιτυχώς.',
+
+'mainpagedocfooter' => 'Περισσότερες πληροφορίες σχετικά με τη χρήση και με τη ρύθμιση παραμέτρων θα βρείτε στους συνδέσμους: [http://meta.wikimedia.org/wiki/MediaWiki_i18n Οδηγίες για τροποποίηση του περιβάλλοντος εργασίας] και [http://meta.wikimedia.org/wiki/MediaWiki_User%27s_Guide Εγχειρίδιο χρήστη].',
+
+'portal' => 'Ο ιστοχώρος της κοινότητας',
+'portal-url' => '{{ns:4}}:Ο_ιστοχώρος_της_κοινότητας',
+'about' => 'Σχετικά με',
+'aboutsite' => 'Σχετικά με το {{SITENAME}}',
+'aboutpage' => '{{ns:4}}:Σχετικά με',
+'article' => 'Σελίδα κειμένου (ή άλλου περιεχομένου)',
+'help' => 'Βοήθεια',
+'helppage' => '{{ns:12}}:Περιεχόμενα',
+#'wikititlesuffix' => '{{SITENAME}}',
+'bugreports' => 'Αναφορές σφαλμάτων',
+'bugreportspage' => '{{ns:4}}:Αναφορά_σφάλματος',
+'sitesupport' => 'Υποστήριξη ιστοχώρου',
+'sitesupport-url' => '{{ns:4}}:Υποστήριξη_ιστοχώρου',
+'faq' => 'Συνήθεις ερωτήσεις (FAQ)',
+'faqpage' => '{{ns:12}}:Συνήθεις ερωτήσεις (FAQ)',
+'edithelp' => 'Βοήθεια σχετικά με την επεξεργασία',
+'newwindow' => '(ανοίγει σε ξεχωριστό παράθυρο)',
+'edithelppage' => '{{ns:12}}:Επεξεργασία',
+'cancel' => 'Ακύρωση',
+'qbfind' => 'Εύρεση',
+'qbbrowse' => 'Περιήγηση',
+'qbedit' => 'Επεξεργασία',
+'qbpageoptions' => 'Αυτή η σελίδα',
+'qbpageinfo' => 'Συμφραζόμενα',
+'qbmyoptions' => 'Οι σελίδες μου',
+'qbspecialpages' => 'Σελίδες λειτουργιών',
+'moredotdotdot' => 'Περισσότερα...',
+'mypage' => 'Η σελίδα μου',
+'mytalk' => 'Οι συζητήσεις μου',
+'anontalk' => 'Οι συζητήσεις αυτής της διεύθυνσης IP',
+'navigation' => 'Πλοήγηση',
+
+
+# Metadata in edit box
+#---------------------------------#
+'metadata' => '<b>Μεταδεδομένα</b> (επεξήγηση στο σύνδεσμο <a href="$1">here</a>)',
+
+'currentevents' => 'Τρέχοντα γεγονότα',
+'currentevents-url' => 'Τρέχοντα γεγονότα',
+
+'disclaimers' => 'Αποποίηση ευθυνών',
+'disclaimerpage' => '{{ns:4}}:Αποποίηση_ευθύνης',
+
+'errorpagetitle' => 'Σφάλμα',
+'returnto' => 'Επιστροφή στη σελίδα $1.',
+'tagline' => 'Από {{SITENAME}}',
+'whatlinkshere' => 'Αναφορές στη σελίδα',
+'help' => 'Βοήθεια',
+'search' => 'Αναζήτηση',
+'searchbutton' => 'Αναζήτηση',
+'go' => 'Μετάβαση',
+'searcharticle' => 'Μετάβαση',
+'history_short' => 'Ιστορικό',
+'info_short' => 'Πληροφορίες',
+'printableversion' => 'Εκτυπώσιμη έκδοση',
+'print' => 'Εκτύπωση',
+'edit' => 'Επεξεργασία',
+'editthispage' => 'Επεξεργασία αυτής της σελίδας',
+'delete' => 'Διαγραφή',
+'deletethispage' => 'Διαγραφή αυτής της σελίδας',
+'undelete_short' => 'Να αναστραφεί η διαγραφή $1 επεξεργασιών.',
+'protect' => 'Προστασία',
+'protectthispage' => 'Κλείδωμα της σελίδας',
+'unprotect' => 'Άρση προστασίας',
+'unprotectthispage' => 'Άρση προστασίας αυτής της σελίδας',
+'newpage' => 'Νέα σελίδα',
+'talkpage' => 'Συζήτηση για αυτή τη σελίδα',
+'specialpage' => 'Σελίδα λειτουργιών',
+'personaltools' => 'Προσωπικά εργαλεία',
+'postcomment' => 'Καταχωρίστε ένα σχόλιο.',
+'articlepage' => 'Εμφάνιση σελίδας κειμένου',
+'talk' => 'Συζήτηση',
+'views' => 'Εμφανίσεις',
+'toolbox' => 'Εργαλεία',
+'userpage' => 'Εμφάνιση σελίδας χρήστη',
+'projectpage' => 'Εμφάνιση σελίδας βοήθειας',
+'imagepage' => 'Εμφάνιση σελίδας εικόνων',
+'viewtalkpage' => 'Εμφάνιση συζήτησης',
+'otherlanguages' => 'Άλλες γλώσσες',
+'redirectedfrom' => '(Ανακατεύθυνση από $1)',
+'lastmodifiedat' => 'Η σελίδα αυτή τροποποιήθηκε τελευταία φορά στις $2, $1.',
+'viewcount' => 'Αυτή η σελίδα έχει προσπελαστεί $1 φορές.',
+'copyright' => 'Το περιεχόμενο είναι διαθέσιμο σύμφωνα με την $1.',
+'protectedpage' => 'Κλειδωμένη σελίδα',
+
+'badaccess' => 'Ακατάλληλη άδεια',
+
+'versionrequired' => 'Απαιτείται η έκδοση $1 του MediaWiki.',
+'versionrequiredtext' => 'Για να χρησιμοποιήσετε αυτή τη σελίδα απαιτείται η έκδοση $1 του MediaWiki . Βλ. [[Special:Έκδοση]]',
+'nbytes' => '$1 bytes',
+'retrievedfrom' => 'Ανακτήθηκε από το "$1".',
+'newmessageslink' => 'νέο μήνυμα',
+'editsection' => 'επεξεργασία',
+'editold' => 'επεξεργασία',
+'toc' => 'Πίνακας περιεχομένων',
+'showtoc' => 'εμφάνιση',
+'hidetoc' => 'απόκρυψη',
+'thisisdeleted' => 'Εμφάνιση ή αποκατάσταση της $1;',
+'restorelink' => '$1 επεξεργασίες έχουν διαγραφεί.',
+'feedlinks' => 'Ροή δεδομένων:',
+
+
+# Short words for each namespace, by default used in the 'article' tab in monobook
+#---------------------------------------------------------------------------------------------------------------------------------#
+'nstab-main' => 'Άρθρο',
+'nstab-user' => 'Σελίδα χρήστη',
+'nstab-media' => 'Ηλεκτρονικά μέσα',
+'nstab-special' => 'Σελίδα λειτουργιών',
+'nstab-project' => 'Σχετικά με',
+'nstab-image' => 'Εικόνα',
+'nstab-mediawiki' => 'Μήνυμα',
+'nstab-template' => 'Πρότυπο',
+'nstab-help' => 'Βοήθεια',
+'nstab-category' => 'Κατηγορία',
+
+# Main script and global functions
+#--------------------------------------------------#
+'nosuchaction' => 'Δεν υπάρχει τέτοια ενέργεια.',
+'nosuchactiontext' => 'Η ενέργεια που καθορίστηκε από την διεύθυνση URL δεν αναγνωρίζεται από το Wiki.',
+'nosuchspecialpage' => 'Δεν υπάρχει τέτοια σελίδα λειτουργιών.',
+'nospecialpagetext' => 'Έχετε ζητήσει μια ειδική σελίδα που δεν αναγνωρίζεται από το Wiki.',
+
+# General errors
+#------------------------#
+'error' => 'Σφάλμα',
+'databaseerror' => 'Σφάλμα στη βάση δεδομένων',
+
+'dberrortext' => 'Σημειώθηκε συντακτικό σφάλμα σε αίτημα προς τη βάση δεδομένων. Πιθανόν να πρόκειται για ένδειξη σφάλματος στο λογισμικό. Το τελευταίο αίτημα προς τη βάση δεδομένων που επιχειρήθηκε ήταν: <blockquote><tt>$1</tt></blockquote> μέσα από τη λειτουργία "<tt>$2</tt>".  Το MySQL επέστρεψε σφάλμα "<tt>$3: $4</tt>".',
+
+'dberrortextcl' => 'Σημειώθηκε συντακτικό σφάλμα σε αίτημα προς τη βάση δεδομένων. Το τελευταίο αίτημα που επιχειρήθηκε ήταν: "$1" μέσα από τη λειτουργία "$2". Το MySQL επέστρεψε σφάλμα "$3: $4".',
+'noconnect' => 'Λυπούμαστε! Λόγω τεχνικών δυσκολιών το Wiki δεν μπορεί να επικοινωνήσει με τον server της βάσης δεδομένων. <br />
+
+$1',
+
+'nodb' => 'Αδύνατη η επιλογή της βάσης δεδομένων $1',
+'cachederror' => 'Το ακόλουθο κείμενο προέρχεται από το προσωρινό αρχείο (cache) και πιθανόν να μην περιέχει τις πιο πρόσφατες αλλαγές.',
+'laggedslavemode' => 'Προειδοποίηση: Η σελίδα μπορεί να μην έχει ενημερωθεί με τις πρόσφατες αλλαγές.<br />',
+'readonly' => 'Κλειδωμένη βάση δεδομένων',
+'enterlockreason' => 'Εξηγήστε τους λόγους για το κλείδωμα και το πότε, κατά την εκτίμησή σας, το κλείδωμα αυτό θα αναιρεθεί.',
+
+'readonlytext' => 'Η βάση δεδομένων είναι προσωρινά κλειδωμένη και δεν μπορεί να δεχθεί νέα λήμματα και άλλες τροποποιήσεις -πιθανότατα λόγω συντήρησης. Μετά τη συντήρηση θα επανέλθει σε κανονική λειτουργία.  Η αιτιολογία για το κλείδωμα της βάσης δεδομένων ήταν η εξής: <p>$1',
+
+'missingarticle' => 'Η βάση δεδομένων δεν βρήκε το αναμενόμενο περιεχόμενο σελίδας κάτω από το όνομα "$1".
+
+<p> Αυτό συμβαίνει όταν ακολουθούμε συνδέσμους μιας παλιάς \'αντιπαραβολής\' ή \'ίστορικού\' σε σελίδες που έχουν διαγραφεί. Αν δεν πρόκειται για τέτοια περίπτωση, είναι πιθανόν να υπάρχει σφάλμα στο λογισμικό. Σας παρακαλούμε να το αναφέρετε στους διαχειριστές, παραπέμποντας στο συγκεκριμένο URL.',
+
+'readonly_lag' => 'Η βάση δεδομένων έχει κλειδωθεί αυτόματα για να μπορέσουν οι επιμέρους servers των αντιγράφων της βάσης δεδομένων (slaves) να καλύψουν τη διαφορά με τον κεντρικό server του πρωτοτύπου της βάσης (master).',
+
+'internalerror' => 'Εσωτερικό σφάλμα',
+'filecopyerror' => 'Δεν ήταν δυνατή η αντιγραφή του αρχείου "$1" στο "$2".',
+'filerenameerror' => 'Δεν είναι δυνατή η μετονομασία του αρχείου "$1" σε "$2".',
+'filedeleteerror' => 'Δεν ήταν δυνατή η διαγραφή του αρχείου "$1".',
+'filenotfound' => 'Δεν είναι δυνατή η ανεύρεση του αρχείου "$1".',
+'unexpected' => 'Μη προσδοκώμενη τιμή: "$1"="$2"',
+'formerror' => 'Λάθος: Δεν ολοκληρώθηκε η υποβολή της φόρμας!',
+'badarticleerror' => 'Η ενέργεια αυτή δεν μπορεί να εκτελεσθεί στη συγκεκριμένη σελίδα.',
+'cannotdelete' => 'Αδύνατη η διαγραφή της συγκεκριμένης σελίδας ή εικόνας (Ενδεχομένως να έχει ήδη διαγραφεί από άλλο χρήστη.)',
+'badtitle' => 'Ακατάλληλος τίτλος',
+'badtitletext' => 'Ο τίτλος της σελίδας που ζητήσατε είναι άκυρος ή κενός ή πρόκειται για έναν εσφαλμένα συνδεδεμένο διαγλωσσικό τίτλο (ή εσφαλμένα συνδεδεμένο τίτλο ανάμεσα σε διαφορετικά Wiki).',
+'perfdisabled' => 'Λυπούμαστε! Αυτή η λειτουργία έχει προσωρινά απενεργοποιηθεί επειδή επιβραδύνει τη βάση δεδομένων σε βαθμό που κανένας χρήστης δεν μπορεί να χρησιμοποιήσει το Wiki.',
+'perfdisabledsub' => 'Αυτό είναι ένα αποθηκευμένο αντίγραφο της $1:',
+'perfcached' => 'Τα δεδομένα που ακολουθούν είναι cached και είνα πιθανόν να μην είναι πλήρως ενημερωμένα:',
+
+'wrong_wfQuery_params' => 'Λανθανσμένες παράμετροι στο wfQuery()<br />
+Λειτουργία: $1<br />
+Αίτημα: $2',
+
+'viewsource' => 'Εμφάνιση κώδικα',
+
+# problem with link: [[{{ns:4}}:Κλειδωμένες_σελίδες]]
+'protectedtext' => 'Η σελίδα αυτή είναι κλειδωμένη και δεν είναι δυνατή η επεξεργασία της. Για περισσότερες πληροφορίες σχετικά με τους λόγους για τους οποίους προστατεύεται η σελίδα, παρακαλούμε επισκεφθείτε το σύνδεσμο
+[[{{ns:4}}:Κλειδωμένες_σελίδες]].
+
+Μπορείτε να δείτε και να αντιγράψετε τον πηγαίο κώδικα αυτής σελίδας:',
+
+'sqlhidden' => '(το αίτημα SQL δεν εμφανίζεται)',
+
+
+# Login and logout pages
+#-------------------------------------#
+'logouttitle' => 'Έξοδος χρήστη',
+'logouttext' => 'Έχετε αποσυνδεθεί.
+Μπορείτε να παραμείνετε στο {{SITENAME}} ανώνυμα, ή μπορείτε να συνδεθείτε ξανά με το ίδιο ή με διαφορετικό (εάν έχετε) όνομα χρήστη. Έχετε υπ\' όψη σας πως αρκετές σελίδες θα συνεχίσουν να εμφανίζονται κανονικά, σαν να μην έχετε αποσυνδεθεί, μέχρι να καθαρίσετε το cache του browser σας.',
+
+'welcomecreation' => '== Καλώς ήλθατε, $1! ==
+
+Ο λογαριασμός σας έχει δημιουργθεί. Μπορείτε να εξατομικεύσετε το {{SITENAME}} σύμφωνα με τις ανάγκες σας μέσα από το σύνδεσμο [[Special:Preferences|Προτιμήσεις]].',
+
+'loginpagetitle' => 'Είσοδος χρήστη',
+'yourname' => 'Όνομα χρήστη',
+'yourpassword' => 'Κωδικός',
+'yourpasswordagain' => 'Πληκτρολογήστε ξανά τον κωδικό',
+'remembermypassword' => 'Διατήρηση του κωδικού πρόσβασης σε αυτόν τον υπολογιστή',
+#'yourdomainname' => 'Your domain',
+'externaldberror' => 'Συνέβη εξωτερικό σφάλμα πιστοποίησης στη βάση δεδομένων ή δεν σας έχει επιτραπεί να ενημερώσετε τον εξωτερικό σας λογαριασμό.',
+'loginproblem' => '<b>Εμφανίστηκε πρόβλημα κατά την είσοδό σας.</b><br />Παρακαλούμε δοκιμάστε ξανά!',
+'alreadyloggedin' => '<strong>Ο χρήστης $1, είναι ήδη συνδεδεμένος!</strong><br />',
+'login' => 'Είσοδος',
+'loginprompt' => 'Πρέπει να έχετε ενεργοποιήσει τα cookies για να συνδεθείτε στο {{SITENAME}}.',
+'userlogin' => 'Δημιουργία Λογαριασμού/Είσοδος',
+'logout' => 'Έξοδος',
+'userlogout' => 'Έξοδος χρήστη',
+'notloggedin' => 'Δεν έχετε συνδεθεί.',
+'createaccount' => 'Δημιουργία νέου λογαριασμού',
+'createaccountmail' => 'Με ηλεκτρονικό ταχυδρομείο',
+'badretype' => 'Οι κωδικοί που έχετε δηλώσει δεν συμφωνούν μεταξύ τους.',
+'userexists' => 'Το όνομα χρήστη που συμπληρώσατε είναι ήδη σε χρήση. Παρακαλούμε διαλέξτε ένα άλλο όνομα.',
+'youremail' => 'Ηλεκτρονική διεύθυνση*',
+'yourrealname' => 'Όνομα και επώνυμο*',
+'yourlanguage' => 'Γλώσσα διασύνδεσης',
+'yourvariant' => 'Η γλώσσα που χρησιμοποιείτε',
+'yournick' => 'Το ψευδώνυμό σας (για την υπογραφή)',
+'email' => 'αλληλογραφία',
+
+'prefs-help-email-enotif' => 'Αυτή η διεύθυνση χρησιμοποιείται για να σας αποστέλλονται ειδοποιήσεις εφόσον έχετε ενεργοποιήσει τις σχετικές επιλογές.',
+'prefs-help-realname' => '* Πραγματικό όνομα (προαιρετικό): εφόσον εισάγετε το όνομά σας, αυτό θα μπορεί να χρησιμοποιηθεί για να αναγνωριστεί ευρύτερα η δουλειά σας.',
+'loginerror' => 'Λάθος σύνδεσης',
+
+'prefs-help-email' => '* Email (προαιρετικό): Δίνει τη δυνατότητα σε άλλους χρήστες να επικοινωνήσουν μαζί σας μέσω της σελίδας χρήστη (ή της συζήτησης για την σελίδα χρήστη) χωρίς να εμφανίζεται η ταυτότητά σας.',
+
+'nocookiesnew' => 'Ο λογαριασμός χρήστη έχει δημιουργηθεί, αλλά δεν έχετε ακόμα συνδεθεί. Το {{SITENAME}} χρησιμοποιεί cookies κατά τη σύνδεση των χρηστών. Τα cookies είναι απενεργοποιημένα στον υπολογιστή σας. Παρακαλούμε ενεργοποιήστε τα και στη συνέχεια συνδεθείτε χρησιμοποιώντας το νέο όνομα χρήστη σας και τον κωδικό σας.',
+
+'nocookieslogin' => 'Το {{SITENAME}} χρησιμοποιεί cookies κατά τη σύνδεση των χρηστών. Τα cookies είναι απενεργοποιημένα στον υπολογιστή σας. Παρακαλούμε ενεργοποιήστε τα και ξαναδοκιμάστε!',
+'noname' => 'Το όνομα χρήστη που έχετε καθορίσει δεν είναι έγκυρο.',
+'loginsuccesstitle' => 'Επιτυχής σύνδεση',
+'loginsuccess' => 'Είστε συνδεδεμένος(-η) στο {{SITENAME}} ως "$1".',
+
+'nosuchuser' => 'Δεν υπάρχει χρήστης με το όνομα "$1".
+Ελέγξτε την ορθογραφία ή χρησιμοποιείστε την παρακάτω φόρμα για να δημιουργήσετε ένα νέο λογαριασμό.',
+
+'nosuchusershort' => 'Δεν υπάρχει χρήστης με το όνομα "$1". Παρακαλούμε ελέγξτε την ορθογραφία.',
+'wrongpassword' => 'Ο κωδικός που πληκτρολογήσατε είναι λανθασμένος. Παρακαλούμε προσπαθήστε ξανά.',
+'mailmypassword' => 'Στείλτε μου ένα νέο κωδικό.',
+'passwordremindertitle' => 'Υπενθύμιση κωδικού από το {{SITENAME}}',
+
+'passwordremindertext' => 'Κάποιος (πιθανώς εσείς) με διεύθυνση IP $1, ζήτησε να σας στείλουμε ένα νέο κωδικό πρόσβασης στο {{SITENAME}}. Ο κωδικός πρόσβασης για το χρήστη "$2" είναι αυτή τη στιγμή "$3". Συνιστούμε να συνδεθείτε και να αλλάξετε αυτόν τον κωδικό το συντομότερο δυνατόν.',
+
+'noemail' => 'Δεν υπάρχει ηλεκτρονική διεύθυνση για το χρήστη "$1".',
+
+'passwordsent' => 'Σας έχει σταλεί ένας νέος κωδικός στην ηλεκτρονική διέθυνση που δηλώσατε για "$1".
+Σας παρακαλούμε να ξανασυνδεθείτε μόλις τον λάβετε.',
+
+'eauthentsent' => 'Ένα μήνυμα επαλήθευσης έχει σταλεί στην ηλεκτρονική διεύθυνση που έχετε δηλώσει στο σύστημα. Πριν αρχίσει η αποστολή μηνυμάτων στη συγκεκριμένη διεύθυνση, πρέπει να ακολουθήσετε τις οδηγίες που βρίσκονται στο μήνυμα που σας έχει σταλεί για να επαληθεύσετε ότι η συγκεκριμένη ηλεκτρονική διεύθυνση ανήκει πραγματικά σε εσάς.',
+
+'mailerror' => 'Λάθος στην αποστολή του μηνύματος: $1',
+'acct_creation_throttle_hit' => 'Λυπούμαστε, έχετε ήδη δημιουργήσει $1 λογαριασμούς και δεν μπορείτε να δημιουργήσετε άλλους.',
+'emailauthenticated' => 'Η ηλεκτρονική σας διεύθυνση επιβεβαιώθηκε στις $1.',
+
+'emailnotauthenticated' => 'Η ηλεκτρονική σας διεύθυνση δεν έχει επαληθευθεί ακόμα. Μέχρι να ολοκληρώσετε την επαλήθευση της διεύθυνσής σας, δεν είναι δυνατόν το σύστημα να σας αποστείλει αλληλογραφία για καμμία από τις ακόλουθες λειτορυγίες.',
+
+'noemailprefs' => '<strong>Δεν έχει ορισθεί ηλεκτρονική διέυθυνση</strong>, οι λειτουργίες που ακολουθούν δεν θα είναι δυνατόν να ολοκληρωθούν.',
+'emailconfirmlink' => 'Επαληθεύστε την ηλεκτρονική σας διεύθυνση',
+'invalidemailaddress' => 'Η ηλεκτρονική διεύθυνση δεν έγινε δεκτή γιατί ενδεχομένως δεν είχε έγκυρη μορφή. Παρακαλούμε συμπληρώστε μια σωστά διαμορφωμένη διεύθυνση ή αφήστε το πεδίο κενό.',
+
+
+# Edit page toolbar
+#----------------------------#
+'bold_sample' => 'Έντονο κείμενο',
+'bold_tip' => 'Έντονο κείμενο',
+
+'italic_sample' => 'Κείμενο με πλάγιους χαρακτήρες',
+'italic_tip' => 'Κείμενο με πλάγιους χαρακτήρες',
+
+'link_sample' => 'Τίτλος συνδέσμου',
+'link_tip' => 'Εσωτερικός σύνδεσμος',
+
+'extlink_sample' => 'http://www.paradeigma.com τίτλος συνδέσμου',
+'extlink_tip' => 'Εξωτερικός σύνδεσμος (μην ξεχάστε το πρόθεμα http:// )',
+
+'headline_sample' => 'Κείμενο τίτλου',
+'headline_tip' => 'Δεύτερος τίτλος (επίπεδο 2)',
+
+'math_sample' => 'Εισαγωγή τύπου εδώ',
+'math_tip' => 'Μαθηματικός τύπος (LaTeX)',
+
+'nowiki_sample' => 'Εισάγετε εδώ το μη μορφοποιημένο κείμενο.',
+'nowiki_tip' => 'Να αγνοηθεί η μορφοποίηση Wiki.',
+
+'image_sample' => 'paradeigma.jpg',
+'image_tip' => 'Ενσωματωμένη εικόνα',
+
+'media_sample' => 'paradeigma.mp3',
+'media_tip' => 'Σύνδεσμος αρχείου πολυμέσων',
+
+'sig_tip' => 'Υπογραφή με ημερομηνία',
+'hr_tip' => 'Οριζόντια γραμμή (να χρησιμοποιείται με μέτρο!)',
+
+
+# Edit pages
+#-----------------#
+'summary' => 'Σύνοψη',
+'subject' => 'Θέμα/επικεφαλίδα',
+'minoredit' => 'Αλλαγή μικρής κλίμακας',
+'watchthis' => 'Παρακολούθηση αυτής της σελίδας',
+'savearticle' => 'Αποθήκευση σελίδας',
+'preview' => 'Προεπισκόπηση',
+'showpreview' => 'Προεπισκόπηση',
+'showdiff' => 'Δείτε τις αλλαγές',
+'blockedtitle' => 'Ο χρήστης έχει υποστεί φραγή.',
+
+'grouppage-sysop' => 'Project:Διαχειριστές',
+'blockedtext' => 'Το όνομα χρήστη ή η διεύθυνση IP σας έχει υποστεί φραγή από τον/την $1 με την αιτιολογία :<br />\'\'$2\'\'<p> Μπορείτε να απευθυνθείτε στον/στην $1 ή σε κάποιον άλλον από τους [[{{MediaWiki:grouppage-sysop}}|διαχειριστές]] για να συζητήσετε το πρόβλημα.
+
+Έχετε υπ\' όψη σας ότι δεν μπορείτε να χρησιμοποιήσετε τη δυνατότητα "αποστολή e-mail σε χρήστη" εκτός αν έχετε μια έγκυρη διεύθυνση e-mail δηλωμένη στις [[Special:Preferences|Προτιμήσεις χρήστη]].
+
+<br />
+<br />Η διεύθυνση IP σας είναι: $3. Παρακαλούμε να την αναφέρετε σε κάθε σας αίτημα.',
+
+'whitelistedittitle' => 'Για να επεξεργαστείτε μια σελίδα πρέπει πρώτα να συνδεθείτε.',
+'whitelistedittext' => 'Πρέπει να [[Special:Userlogin|συνδεθείτε]] για να επεξεργαστείτε μια σελίδα.',
+'whitelistreadtitle' => 'Για να διαβάσετε πρέπει πρώτα να συνδεθείτε.',
+'whitelistreadtext' => 'Πρέπει να [[Special:Userlogin|συνδεθείτε]] για να διαβάσετε σελίδες.',
+'whitelistacctitle' => 'Δεν έχετε το δικαίωμα να δημιουργήσετε λογαριασμό.',
+'whitelistacctext' => 'Για να σας επιτραπεί η δημιουργία λογαριασμού σε αυτό το Wiki πρέπει να [[Special:Userlogin|συνδεθείτε]] και να κατέχετε την κατάλληλη άδεια.',
+'loginreqtitle' => 'Απαιτείται η σύνδεση του χρήστη.',
+'accmailtitle' => 'Ο κωδικός έχει σταλεί.',
+'accmailtext' => 'Ο κωδικός για τον/την \'$1\' έχει σταλεί στο $2.',
+'newarticle' => '(Νέο)',
+
+'newarticletext' => 'Έχετε ακολουθήσει ένα σύνδεσμο που δεν υπάρχει ακόμα. Για να δημιουργήσετε μια νέα σελίδα εδώ, αρχίστε να γράφετε το κείμενό σας στο πλαίσιο.(Βλ. [[{{MediaWiki:helppage}}|Σελίδα βοήθειας]] για περισσότερες πληροφορίες).
+Αν έχετε βρεθεί εδώ κατά λάθος, απλώς πατήστε \'\'\'επιστροφή (back)\'\'\' στον browser του υπολογιστή σας.',
+
+
+# problem with link: [[{{ns:12}}:διεύθυνση IP|διεύθυνση IP]]
+# problem with link: [[{{ns:12}}:proxy server|proxy server]]
+'anontalkpagetext' => '----\'\'Αυτή η σελίδα συζήτησης προορίζεται για ανώνυμους χρήστες που δεν έχουν δημιουργήσει ακόμα λογαριασμό (ή που δεν τον χρησιμοποιούν). Έτσι για την ταυτοποίηση ενός ανώνυμου χρήστη χρησιμοποιείται η [[{{ns:12}}:διεύθυνση IP  |διεύθυνση IP ]] του. Είναι όμως πιθανόν η διεύθυνση αυτή να είναι κοινή για πολλούς διαφορετικούς χρήστες (όπως π.χ. για τους χρήστες ενός Internet Cafe ή ενός [[{{ns:12}}:proxy server|proxy server]]). Αν είστε ανώνυμος χρήστης και έχετε δεχθεί σχόλια άσχετα με τα θέματά σας (κάτι που μπορεί να συμβεί αν χρησιμοποιείτε την ίδια [[{{ns:12}}:διεύθυνση IP|διεύθυνση IP]] με κάποιον άλλο ανώνυμο χρήστη) θα ήταν καλό να [[Special:Userlogin|δημιουργήσετε ένα λογαριασμό χρήστη ή να συνδεθείτε]] για να αποφεύγεται η σύγχυση\'\'.',
+
+'noarticletext' => '(Δεν υπάρχει κείμενο στη σελίδα)',
+
+'clearyourcache' => '\'\'\'Σημείωση:\'\'\' Μετά την αποθήκευση, θα χρειαστεί να καθαρίσετε  το cache στον browser για να μπορέσετε να δείτε τις αλλαγές: \'\'\'Mozilla:\'\'\' click \'\'Reload\'\' (or \'\'Ctrl-R\'\'), \'\'\'IE / Opera:\'\'\' \'\'Ctrl-F5\'\', \'\'\'Safari:\'\'\' \'\'Cmd-R\'\', \'\'\'Konqueror\'\'\' \'\'Ctrl-R\'\'.<br />',
+
+'usercssjsyoucanpreview' => '<strong>Χρήσιμη συμβουλή:</strong> Χρησιμοποιήστε το κουμπί "Προεπισκόπηση" για να ελέγξτε τα νέα σας CSS/JS πριν τα αποθηκεύσετε.',
+'usercsspreview' => '\'\'\'Σας υπενθυμίζουμε ότι κάνετε απλώς έλεγχο/προεπισκόπηση του CSS του χρήστη -δεν το έχετε ακόμα αποθηκεύσει! \'\'\'',
+'userjspreview' => '\'\'\'Σας υπενθυμίζουμε ότι κάνετε απλώς έλεγχο/προεπισκόπηση του JavaScript του χρήστη -δεν το έχετε ακόμα αποθηκεύσει!\'\'\'',
+'updated' => '(Ενημερώθηκε.)',
+'note' => '<strong>Προσοχή: </strong>',
+'previewnote' => 'Σας υπενθυμίζουμε ότι βλέπετε μόνον την προεπισκόπηση -δεν έχετε ακόμα αποθηκεύσει τις αλλαγές σας!',
+'previewconflict' => 'Αυτή η προεπισκόπηση απεικονίζει το κείμενο στην επάνω περιοχή επεξεργασίας κειμένου, όπως θα εμφανιστεί εάν επιλέξετε να το αποθηκεύσετε.',
+'editing' => 'Επεξεργασία $1',
+'editinguser' => 'Επεξεργασία $1',
+'editingsection' => 'Επεξεργασία $1 (τμήμα)',
+'editingcomment' => 'Επεξεργασία $1 (σχόλια)',
+'editconflict' => 'Ανταγωνιστικές επεξεργασίες: $1',
+
+'explainconflict' => 'Κάποιος άλλος χρήστης έχει αλλάξει αυτή τη σελίδα από τότε που αρχίσατε να την επεξεργάζεστε. Στο επάνω τμήμα βρίσκεται το τρέχον κείμενο της σελίδας. Οι δικές σας αλλαγές εμφανίζονται στο κάτω τμήμα. Θα πρέπει να ενσωματώσετε εσείς τις αλλαγές σας στο τρέχον κείμενο. <b>Μόνον</b> το επάνω τμήμα θα αποθηκευθεί όταν πατήσετε "Αποθήκευση σελίδας".<p>',
+
+'yourtext' => 'Το κείμενό σας',
+'storedversion' => 'Αποθηκευμένη έκδοση',
+
+'nonunicodebrowser' => '<strong>ΠΡΟΣΟΧΗ! Ο browser σας δεν είναι συμβατός με unicode. Παρακαλούμε χρησιμοποιήστε έναν άλλο browser για επεξεργαστείστε αυτό το άρθρο έτσι ώστε να αποδοθούν σωστά όλοι οι ελληνικοί χαρακτήρες. </strong><br />',
+
+'editingold' => '<strong>ΠΡΟΕΙΔΟΠΟΙΗΣΗ: Επεξεργάζεστε μια παλιότερη αναθεώρηση αυτής της σελίδας. Αν προσπαθείστε να την αποθηκεύσετε, όσες αλλαγές έχουν γίνει πριν από αυτή την αναθεώρηση θα χαθούν.</strong><br />',
+
+'yourdiff' => 'Διαφορές',
+
+'copyrightwarning' => 'Ολες οι προσθήκες/ αλλαγές στο {{SITENAME}} θα πρέπει να συμφωνούν με την $2 (Βλ. $1 για λεπτομέρειες).
+Αν δεν επιθυμείτε τα κείμενά σας να τα επεξεργαστούν κατά την κρίση τους άλλοι χρήστες και να τα διαδώσουν κατά βούληση παρακαλούμε να μην τα αναρτήσετε σε αυτό το χώρο. Ότι συνεισφέρετε στο χώρο αυτό σε κείμενα, διαγράμματα, στοιχεία ή εικόνες πρέπει να είναι δικά σας έργα ή να ανήκουν στο δημόσιο τομέα (public domain) ή να προέρχονται από ελεύθερες ή ανοιχτές πηγές με ρητή άδεια αναδημοσίευσης. <br />
+
+Τέλος μας υπόσχεστε και δηλώνετε πως ότι γράφετε σε αυτό τον χώρο είναι πρωτότυπο δικό σας έργο και, άσχετα με την έκτασή του, δεν έχει εκχωρηθεί σε τρίτους η δημοσίευση και η εκμετάλλευσή του.
+<strong>ΠΑΡΑΚΑΛΟΥΜΕ ΝΑ ΜΗΝ ΑΝΑΡΤΗΣΕΤΕ ΚΕΙΜΕΝΑ ΤΡΙΤΩΝ ΕΑΝ ΔΕΝ ΕΧΕΤΕ ΤΗΝ ΑΔΕΙΑ ΤΟΥ ΙΔΙΟΚΤΗΤΗ ΤΟΥ COPYRIGHT!</strong>',
+
+'copyrightwarning2' => 'Έχετε υπ\' όψη σας ότι όλες οι προσθήκες/αλλαγές που κάνετε στο {{SITENAME}} μπορούν να υποστούν επεξεργασία και αλλαγές ή ακόμα και να διαγραφούν από άλλους χρήστες.
+Αν δεν επιθυμείτε τα κείμενά σας να τα επεξεργαστούν κατά την κρίση τους άλλοι χρήστες και να τα διαδώσουν κατά βούληση παρακαλούμε να μην τα αναρτήσετε σε αυτό το χώρο. Ότι συνεισφέρετε στο χώρο αυτό σε κείμενα, διαγράμματα, στοιχεία ή εικόνες πρέπει να είναι δικά σας έργα ή να ανήκουν στο δημόσιο τομέα (public domain) ή να προέρχονται από ελεύθερες ή ανοιχτές πηγές με ρητή άδεια αναδημοσίευσης. <br />
+Τέλος μας υπόσχεστε και δηλώνετε πως ότι γράφετε σε αυτό τον χώρο είναι πρωτότυπο δικό σας έργο και, άσχετα με την έκτασή του, δεν έχει εκχωρηθεί σε τρίτους η δημοσίευση και η εκμετάλλευσή του.
+<strong>ΠΑΡΑΚΑΛΟΥΜΕ ΝΑ ΜΗΝ ΑΝΑΡΤΗΣΕΤΕ ΚΕΙΜΕΝΑ ΤΡΙΤΩΝ ΕΑΝ ΔΕΝ ΕΧΕΤΕ ΤΗΝ ΑΔΕΙΑ ΤΟΥ ΙΔΙΟΚΤΗΤΗ ΤΟΥ COPYRIGHT!</strong>',
+
+'longpagewarning' => 'ΠΡΟΕΙΔΟΠΟΙΗΣΗ: Η σελίδα έχει μέγεθος $1kb. Είναι πιθανόν μερικοί browser να παρουσιάσουν προβλήματα στην επεξεργασία σελίδων της τάξης των 32kb και άνω. Μπορείτε να αποφύγετε το πρόβλημα κόβωντας τη σελίδα σε μικρότερα τμήματα.<br />',
+
+'readonlywarning' => 'ΠΡΟΕΙΔΟΠΟΙΗΣΗ: Η βάση δεδομένων έχει κλειδωθεί προσωρινά για συντήρηση και δεν θα μπορέσετε να αποθηκεύσετε αυτά που έχετε επεξεργαστεί.  Μπορείτε αν θέλετε να αποθηκεύσετε το κείμενο στον υπολογιστή σας (με αποκοπή-και-επικόλληση) και να το ξαναχρησιμοποιήσετε αργότερα όταν η συντήρηση θα έχει ολοκληρωθεί.',
+
+# problem with link: [[{{ns:4}}:Σελίδες_υπό_προστασία|τους κανόνες για τις υπό προστασία σελίδες]]
+'protectedpagewarning' => 'ΠΡΟΕΙΔΟΠΟΙΗΣΗ:  Η σελίδα αυτή έχει κλειδωθεί -η οποιαδήποτε επεξεργασία της μπορεί να γίνει μόνον από διαχειριστές. Βεβαιωθείτε πως ακολουθείτε [[{{ns:4}}:Σελίδες_υπό_προστασία|τους κανόνες για τις υπό προστασία σελίδες]].<br />',
+
+'templatesused' => 'Πρότυπα που χρησιμοποιήθηκαν στη σελίδα αυτή:',
+
+
+# History pages
+#----------------------#
+'revhistory' => 'Ιστορικό αναθεωρήσεων',
+'nohistory' => 'Δεν υπάρχει ιστορικό επεξεργασίας για αυτή τη σελίδα.',
+'revnotfound' => 'Η αναθεώρηση δεν βρέθηκε.',
+'revnotfoundtext' => 'Η παλιά αναθεώρηση της σελίδας που ζητήσατε δεν ήταν δυνατόν να βρεθεί. Παρακαλούμε ελέγξτε τo URL που χρησιμοποιήσατε για να φτάσετε σε αυτήν τη σελίδα.',
+'loadhist' => 'Φόρτωση ιστορικού σελίδας',
+'currentrev' => 'Τρέχουσα αναθεώρηση',
+'revisionasof' => 'Αναθεώρηση της $1',
+'previousrevision' => '&larr;Παλιότερη αναθεώρηση',
+'nextrevision' => 'Νεώτερη αναθεώρηση&rarr;',
+'currentrevisionlink' => 'εμφάνιση της τρέχουσας αναθεώρησης',
+'cur' => 'τρέχουσα',
+'next' => 'επόμενη',
+'last' => 'τελευταία',
+'orig' => '\'πρωτότυπη\'',
+
+'histlegend' => 'Σύγκριση διαφορών: Επιλέξτε τις εκδόσεις που θέλετε να συγκρίνετε και πατήστε enter ή κάντε κλικ στην μπάρα "Σύγκριση...". <br />
+Υπόμνημα: (τρέχον) = διαφορές με την τρέχουσα έκδοση,
+(τελευταίο) = διαφορές με την προηγούμενη έκδοση, μ = αλλαγές μικρής κλίμακας.',
+
+'deletedrev' => '[διαγράφτηκε]',
+'histfirst' => 'Η πιο παλιά',
+'histlast' => 'Η πιο πρόσφατη',
+
+
+# Diffs
+#--------#
+'difference' => '(Διαφορές μεταξύ αναθεωρήσεων)',
+'loadingrev' => 'φόρτωση αναθεώρησης για \'σύγκριση\'',
+'lineno' => 'Γραμμή $1:',
+'editcurrent' => 'Επεξεργασία της τρέχουσας έκδοσης της σελίδας',
+'selectnewerversionfordiff' => 'Επιλέξτε μια πιο πρόσφατη έκδοση για σύγκριση.',
+'selectolderversionfordiff' => 'Επιλέξτε μια παλιότερη έκδοση για σύγκριση.',
+'compareselectedversions' => 'Σύγκριση των εκδόσεων που έχουν επιλεγεί',
+
+
+# Search results
+#------------------------#
+'searchresults' => 'Αποτελέσματα αναζήτησης',
+'searchresulttext' => 'Για περισσότερες πληροφορίες σχετικά με την αναζήτηση στο {{SITENAME}}, βλ. [[{{MediaWiki:helppage}}|{{int:help}}]].',
+'searchsubtitle' => 'Κριτήρια αναζήτησης: "[[:$1]]"',
+'searchsubtitleinvalid' => 'Κριτήρια αναζήτησης: "$1"',
+'badquery' => 'Λανθασμένη μορφή αιτήματος αναζήτησης',
+
+'badquerytext' => 'Το σύστημα δεν μπόρεσε να επεξεργαστεί το αίτημα σας. Αυτό πιθανόν οφείλεται στο ότι αναζητήσατε μια λέξη με λιγότερα από τρία γράμματα (κάτι που δεν υποστηρίζεται προς το παρόν). Μπορεί επίσης να οφείλεται σε λάθος πληκτρολόγησης π.χ. "Διάλογος και διαλούβευση". Παρακαλoύμε δοκιμάστε πάλι.',
+
+'matchtotals' => 'Το αίτημα "$1" βρήκε $2 παρόμοιους τίτλους σελίδων και παρόμοιο κείμενο σε $3 σελίδες',
+'noexactmatch' => 'Δεν υπάρχει καμμία σελίδα με αυτόν ακριβώς τον τίτλο -έγινε αναζήτηση με το πλήρες κείμενο.',
+'titlematches' => 'Τίτλοι άρθρων που ανταποκρίνονται',
+'notitlematches' => 'Δεν υπάρχουν αντίστοιχοι τίτλοι σελίδων.',
+'textmatches' => 'Κείμενα σελίδων που ανταποκρίνονται:',
+'notextmatches' => 'Δεν υπάρχουν αντίστοιχα κείμενα σελίδων.',
+'prevn' => '$1 προηγουμένων',
+'nextn' => '$1 επομένων',
+'viewprevnext' => 'Εμφάνιση ($1) ($2) ($3).',
+'showingresults' => 'Εμφάνιση <b>$1</b> αποτελεσμάτων που αρχίζουν με #<b>$2</b>',
+'showingresultsnum' => 'Εμφάνιση <b>$3</b> αποτελεσμάτων που αρχίζουν με #<b>$2</b>',
+
+'nonefound' => '\'\'\'Σημείωση\'\'\': Οι ανεπιτυχείς αναζητήσεις οφείλονται συνήθως στο ότι έχουμε συμπεριλάβει στα κριτήρια πολύ συνηθισμένες λέξεις, όπως "έχει" ή "από" (που δεν υπάρχουν στο ευρετήριο) ή στο ότι προκαθορίσαμε πολλά κριτήρια αναζήτησης ταυτοχρόνως. (Στην τελευταία περίπτωση, μόνον οι σελίδες που περιέχουν \'\'όλα\'\' τα κριτήρια αναζήτησης θα εμφανιστούν στα αποτελέσματα).<br />',
+
+'powersearch' => 'Αναζήτηση',
+
+'powersearchtext' => 'Αναζήτηση στις περιοχές :<br />
+
+$1<br />
+$2 Εμφάνιση ανακατευθύνσεων &nbsp; Κριτήρια αναζήτησης $3 $9',
+
+'blanknamespace' => '(Αρχική περιοχή)',
+
+
+# Preferences page
+#-----------------------------#
+'preferences' => 'Προτιμήσεις',
+'prefsnologin' => 'Δεν έχετε συνδεθεί.',
+
+'prefsnologintext' => 'Πρέπει να έχετε [[Special:Userlogin|συνδεθεί]]
+για να καθορίσετε τις προτιμήσεις χρήστη.',
+
+
+'prefsreset' => 'Οι προτιμήσεις σας έχουν αποκατασταθεί σύμφωνα με την αποθηκευμένη έκδοσή τους.',
+'changepassword' => 'Αλλαγή κωδικού',
+'skin' => 'Οπτική οργάνωση (skin)',
+'math' => 'Απόδοση μαθηματικών',
+'dateformat' => 'Μορφή ημερομηνίας',
+'math_failure' => 'Δεν μπόρεσε να γίνει ανάλυση του όρου.',
+'math_unknown_error' => 'Άγνωστο λάθος',
+'math_unknown_function' => 'άγνωστη συνάρτηση',
+'math_lexing_error' => 'Σφάλμα στην λεξική ανάλυση',
+'math_syntax_error' => 'Λάθος σύνταξης',
+'math_image_error' => 'Η μετατροπή σε PNG απέτυχε. Παρακαλούμε ελέγξτε ότι έχουν εγκατασταθεί σωστά τα latex, dvips, gs, και ξαναπροσπαθήστε!',
+'math_bad_tmpdir' => 'Δεν είναι δυνατή η δημιουργία μαθηματικών δεδομένων (ή η εγγραφή σε προσωρινό κατάλογο)',
+'math_bad_output' => 'Δεν είναι δυνατή η δημιουργία  μαθηματικών δεδομένων (ή η εγγραφή σε κατάλογο εξόδου)',
+'math_notexvc' => 'Αγνοείται το εκτελέσιμο texvc -παρακαλούμε συμβουλευτείτε το math/README για να ρυθμίσετε τις παραμέτρους.',
+'prefs-personal' => 'Στοιχεία χρήστη',
+'prefs-rc' => 'Πρόσφατες αλλαγές και εμφάνιση πολύ σύντομων άρθρων',
+'prefs-misc' => 'Διάφορες ρυθμίσεις',
+'saveprefs' => 'Αποθήκευση προτιμήσεων',
+'resetprefs' => 'Επαναφορά προτιμήσεων',
+'oldpassword' => 'Παλιός κωδικός',
+'newpassword' => 'Νέος κωδικός πρόσβασης',
+'retypenew' => 'Πληκτρολογήστε ξανά το νέο κωδικό.',
+'textboxsize' => 'Επεξεργασία',
+'rows' => 'Σειρές',
+'columns' => 'Στήλες',
+'searchresultshead' => 'Αποτελέσματα αναζήτησης/Ρυθμίσεις',
+'resultsperpage' => 'Αποτελέσματα ανά σελίδα',
+'contextlines' => 'Σειρές που θα εμφανίζονται ανά αποτέλεσμα',
+'contextchars' => 'Αριθμός χαρακτήρων στο εμφανιζόμενο κείμενο',
+'stubthreshold' => 'Ελάχιστο μέγεθος πολύ σύντομων σελίδων (stub)',
+'recentchangescount' => 'Αριθμός τίτλων στις πρόσφατες αλλαγές',
+'savedprefs' => 'Οι προτιμήσεις σας έχουν αποθηκευθεί.',
+'timezonelegend' => 'Ζώνη ώρας (Time zone)',
+'timezonetext' => 'Συμπληρώστε τον αριθμό των ωρών κατά τις οποίες η τοπική σας ώρα διαφέρει από την ώρα του server (UTC).',
+'localtime' => 'Εμφάνιση τοπικής ώρας',
+'timezoneoffset' => 'Διαφορά ωρών',
+'servertime' => 'Η ώρα του server είναι:',
+'guesstimezone' => 'Συμπλήρωση μέσω του browser',
+'defaultns' => 'Προκαθορισμένη αναζήτηση στις περιοχές:',
+'default' => 'Προκαθορισμένο',
+'files' => 'Αρχεία',
+
+
+# User levels special page
+#--------------------------------------#
+
+# switching pan
+
+'userrights-lookup-user' => 'Διαχείριση ομάδων χρηστών',
+'userrights-user-editname' => 'Δηλώστε όνομα χρήστη:',
+'editusergroup' => 'Επεξεργασία \'Ομάδα Χρηστών\'',
+
+# user groups editing
+#
+'userrights-editusergroup' => 'Επεξεργασία ομάδων χρηστών',
+'saveusergroups' => 'Αποθήκευση ομάδων χρηστών',
+'userrights-groupsmember' => 'Μελος της ομάδας:',
+'userrights-groupsavailable' => 'Υπάρχουσες ομάδες:',
+
+'userrights-groupshelp' => 'Επιλέξτε όμάδες στις οποίες επιθυμείτε να προστεθεί ο χρήστης ή ομάδες από τις οποίες επιθυμείτε να αφαιρεθεί ο χρήστης. Μπορείτε να αναιρέσετε την επιλογή μιας ομάδας με το πλήκτο CTRL + αριστερό κλικ',
+
+# Recent changes
+#--------------------------#
+'changes' => 'αλλαγές',
+'recentchanges' => 'Πρόσφατες αλλαγές',
+'recentchangestext' => 'Παρακολουθείστε σε αυτή τη σελίδα τις πιο πρόσφατες αλλαγές στο Wiki.',
+'rcnote' => 'Ακολουθούν οι <strong>$1</strong> πιο πρόσφατες αλλαγές στο διάστημα των τελευταίων <strong>$2</strong> ημερών.',
+'rcnotefrom' => 'Ακολουθούν οι αλλαγές από <b>$2</b> (εμφάνιση <b>$1</b> αλλαγών max).',
+'rclistfrom' => 'Εμφάνιση νέων αλλαγών αρχίζοντας από $1',
+'rclinks' => 'Εμφάνιση των τελευταίων $1 αλλαγών στο διάστημα των τελευταίων $2 ημερών <br />$3',
+'diff' => '\'διαφορά\'',
+'hist' => '\'ιστορικό\'',
+'hide' => 'απόκρυψη',
+'show' => 'εμφάνιση',
+'minoreditletter' => 'μ',
+'newpageletter' => 'N',
+#'sectionlink' => '&rarr;',
+'number_of_watching_users_pageview' => '[$1 χρήστης (-ες) που παρακολουθούν]',
+
+
+# Upload
+#------------#
+'upload' => 'Φόρτωση αρχείου',
+'uploadbtn' => 'Φόρτωση αρχείου',
+'reupload' => 'Επανάληψη φόρτωσης',
+'reuploaddesc' => 'Επιστροφή στη φόρμα φόρτωσης',
+'uploadnologin' => 'Δεν έχετε συνδεθεί!',
+'uploadnologintext' => 'Για να φορτώσετε αρχεία πρέπει πρώτα να [[Special:Userlogin|συνδεθείτε]].',
+'upload_directory_read_only' => 'Δεν είναι δυνατή η εγγραφή στον κατάλογο ($1) από τον server.',
+'uploaderror' => 'Σφάλμα στη φόρτωση αρχείου',
+
+# problem with link: [[{{ns:4}}:Κανόνες_χρήσης_εικόνων|Κανόνες χρήσης εικόνων]]
+# problem with link: [[{{ns:4}}:Καταγραφές_φόρτωσης|Καταγραφές φόρτωσης]]
+'uploadtext' => '\'\'\'ΠΕΡΙΜΕΝΕΤΕ!\'\'\' Πριν προχωρήσετε στη φόρτωση αρχείων σε αυτό το χώρο βεβαιωθείτε πως διαβάσατε και πως ακολουθείτε τους [[{{ns:4}}:Κανόνες_χρήσης_εικόνων|Κανόνες χρήσης εικόνων]].
+
+Μπορείτε να δείτε ή να αναζητήσετε εικόνες που έχουν φορτωθεί κατά το παρελθόν κάτω από το σύνδεσμο [[Special:Imagelist|Κατάλογος εικόνων που έχουν φορτωθεί]].
+Οι φορτώσεις και οι διαγραφές έχουν καταγραφεί στη σελίδα
+[[{{ns:4}}:Καταγραφές_φόρτωσης|Καταγραφές φόρτωσης]].
+
+Χρησιμοποιήστε την παρακάτω φόρμα για να φορτώσετε νέα αρχεία εικόνας που θα χρησιμοποιηθούν στον οπτικό εμπλουτισμό των σελίδων. Στους περισσότερους browsers υπάρχει ένα κουμπί "Browse..." το οποίο εμφανίζει το πεδίο διαλόγου του συστήματός σας για το άνοιγμα αρχείων. Αν επιλέξετε ένα αρχείο, το όνομά τoυ θα συμπληρωθέι αυτόματα στο πεδίο κειμένου που βρίσκεται δίπλα στο κουμπί. Μην ξεχάστε να επιβεβαιώσετε (σημειώνοντας το ανάλογο κουτάκι) πως με τη φόρτωση του συγκεκριμένου αρχείου δεν παραβιάζετε πνευματικά δικαιώματα.
+
+Πατήστε το κουμπί "Upload" για να ολοκληρωθέι η φόρτωση.
+Η διαδικασία μπορεί να διαρκέσει λίγο περισσότερο αν διαθέτετε αργή σύνδεση με το internet.
+
+Οι προτιμώμενες μορφές αρχείου είναι: JPEG για φωτογραφίες, PNG για σχήματα και άλλες εικόνες και OGG για αρχεία ήχου. Δώστε περιγραφικά ονόματα στα αρχεία σας για να αποφευχθεί τυχόν σύγχυση.
+
+Για να συμπεριληφθεί μια εικόνα σε μια σελίδα, χρησιμοποιήστε συνδέσμους της μορφής
+\'\'\'<nowiki>[[</nowiki>{{ns:image}}<nowiki>:file.jpg]]</nowiki>\'\'\' ή
+\'\'\'<nowiki>[[</nowiki>{{ns:image}}<nowiki>:file.png|alt text]]</nowiki>\'\'\' ή
+\'\'\'<nowiki>[[</nowiki>{{ns:media}}<nowiki>:file.ogg]]</nowiki>\'\'\' για αρχεία ήχου.
+
+Σας παρακαλούμε να λάβετε υπ΄όψη σας ότι, ακριβώς όπως συμβαίνει με τις σελίδες Wiki, είναι δυνατόν άλλοι χρήστες να επεξεργαστούν ή να διαγράψουν κατά την κρίση τους αρχεία που έχετε φορτώσει. Έχετε επίσης υπ΄όψη σας πως είναι δυνατόν να υποστείτε φραγή σαν χρήστης αν διαπιστωθεί πως έχετε κάνει κατάχρηση του συστήματος.<br />',
+
+'uploadlog' => 'Φόρτωση αρχείου γεγονότων',
+'uploadlogpage' => 'Καταγραφές φόρτωσης',
+'uploadlogpagetext' => 'Ακολουθεί κατάλογος των αρχείων που έχουν φορτωθεί πρόσφατα.',
+'filename' => 'Όνομα αρχείου',
+'filedesc' => 'Σύνοψη',
+'filestatus' => 'Κατάσταση του copyright',
+'filesource' => 'Πηγή',
+'copyrightpage' => 'Project:Copyrights',
+'copyrightpagename' => '{{SITENAME}} copyright',
+'uploadedfiles' => 'Αρχεία που έχουν φορτωθεί',
+'minlength' => 'Τα ονόματα εικόνων δεν πρέπει να περιέχουν λιγότερους από τρεις χαρακτήρες.',
+'illegalfilename' => 'Το όνομα του αρχείου "$1" περιέχει χαρακτήρες που δεν επιτρέπονται στους τίτλους των σελίδων. Παρακαλούμε δώστε άλλο όνομα στο αρχείο και προσπαθήστε ξανά να το ανεβάσετε.',
+'badfilename' => 'Το όνομα της εικόνας άλλαξε σε "$1".',
+'badfiletype' => 'Το ".$1" δεν είναι προτεινόμενος τύπος εικόνας.',
+'largefile' => 'Συνιστούμε οι εικόνες να μην υπερβαίνουν σε μέγεθος τα 100k .',
+
+'emptyfile' => 'Το αρχείο που φορτώσατε φαίνεται να είναι κενό. Αυτό μπορεί να οφείλεται σε λάθος πληκτρολόγησης του ονόματος του αρχείου. Παρακαλούμε ελέγξτε εαν αυτό είναι πραγματικά το αρχείο που θέλετε να φορτώσετε.',
+
+'fileexists' => 'Υπάρχει ήδη αρχείο με αυτό το όνομα -παρακαλούμε ελέγξτε στο $1. Είστε βέβαιος (-η) πως θέλετε να αλλάξετε το όνομα του αρχείου;',
+'successfulupload' => 'Επιτυχής φόρτωση',
+
+'fileuploaded' => 'Το αρχείο $1 φορτώθηκε επιτυχώς!
+Παρακαλούμε ακολουθήστε το σύνδεσμο: $2 προς τη σελίδα της περιγραφής και συμπληρώστε πληροφορίες σχετικές με το αρχείο, όπως το από πού προήλθε, πότε δημιουργήθηκε και από ποιόν, και οτιδήποτε άλλο γνωρίζετε σχετικά με αυτό. Αν πρόκειται για εικόνα μπορείτε να την ενθέσετε με τον εξής τρόπο: <tt><nowiki>[[</nowiki>{{ns:image}}<nowiki>:$1|thumb|Description]]</nowiki></tt>',
+
+'uploadwarning' => 'Προειδοιποίηση φόρτωσης',
+'savefile' => 'Αποθήκευση αρχείου',
+'uploadedimage' => 'Η φόρτωση του "$1" ολοκληρώθηκε.',
+'uploaddisabled' => 'Λυπούμαστε, η φόρτωση έχει απενεργοποιηθεί.',
+'uploadscripted' => 'Αυτό το αρχείο περιέχει κώδικα HTML ή script που μπορεί να παρερμηνευθεί από μερικούς browser.',
+'uploadcorrupt' => 'Το αρχείο είναι κατεστραμένο ή έχει κάποια λανθασμένη επέκταση. Παρακαλούμε ελέγξτε το και ξαναδοκιμάστε να το ανεβάσετε.',
+'uploadvirus' => 'Το αρχείο περιέχει ιό! Λεπτομέρειες: $1',
+'sourcefilename' => 'Όνομα πηγαίου αρχείου',
+'destfilename' => 'Όνομα αρχείου προορισμού',
+
+
+# Image list
+#----------------#
+'imagelist' => 'Κατάλογος εικόνων',
+'imagelisttext' => 'Ακολουθεί κατάλογος $1 εικόνων ταξινομημένων κατά σειρά $2.',
+'getimagelist' => 'Προσκόμιση καταλόγου εικόνων',
+'ilsubmit' => 'Αναζήτηση',
+'showlast' => 'Εμφάνιση των $1 πιο πρόσφατων εικόνων κατά σειρά $2.',
+'byname' => 'ονόματος',
+'bydate' => 'ημερομηνίας',
+'bysize' => 'μεγέθους',
+'imgdelete' => '\'διαγραφή\'',
+'imgdesc' => '\'περιγραφή\'',
+'imglegend' => 'Υπόμνημα: (\'περιγραφή\') = εμφάνιση/επεξεργασία της περιγραφής εικόνας',
+'imghistory' => 'Ιστορικό εικόνας',
+'revertimg' => '\'επαναφορά\'',
+'deleteimg' => '\'διαγραφή\'',
+'deleteimgcompletely' => 'Διαγραφή όλων των αναθεωρήσεων',
+
+'imghistlegend' => 'Υπόμνημα: (\'τρέχον\') = αυτή είναι η τρέχουσα εικόνα, (\'διαγραφή\') = διαγραφή αυτής της παλιότερης έκδοσης, (\'επαναφορά\') = επαναφορά σε αυτή την παλιότερη έκδοση
+
+<br /><i>Κάνοντας κλικ στην ημερομηνία θα δείτε την εικόνα που φορτώθηκε εκείνη την ημέρα</i>.',
+
+'imagelinks' => 'Σύνδεσμοι εικόνων',
+'linkstoimage' => 'Οι ακόλουθες σελίδες συνδέονται με αυτή την εικόνα:',
+'nolinkstoimage' => 'Δεν υπάρχουν σελίδες που συνδέονται με αυτήν την εικόνα.',
+'sharedupload' => 'Το αρχείο αυτό φορτώθηκε για κοινή χρήση και είναι δυνατόν να χρησιμοποιείται ταυτοχρόνως σε περισσότερα από ένα έργα.',
+'shareduploadwiki' => 'Παρακαλούμε συμβουλευθείτε την [$1 σελίδα περιγραφής αρχείου] για περισσότερες πληροφορίες.',
+'noimage' => 'Δεν υπάρχει αρχείο με αυτό το όνομα, μπορείτε να [$1 το φορτώσετε].',
+'uploadnewversion-linktext' => 'Φορτώστε μια νέα έκδοση αυτού του αρχείου',
+
+
+# Statistics
+#---------------#
+'statistics' => 'Στατιστικές',
+'sitestats' => 'Στατιστικές ιστοχώρου',
+'userstats' => 'Στατιστικές χρηστών',
+
+'sitestatstext' => 'Υπάρχουν συνολικά \'\'\'$1\'\'\' σελίδες στη βάση δεδομένων. Σε αυτές συμπεριλαμβάνονται και οι σελίδες "συζήτησης", σελίδες σχετικά με το {{SITENAME}}, σελίδες με πολύ σύντομο κείμενο (stub), ανακατευθύνσεις, και άλλες που πιθανόν να μην χαρακτηρίζονται σελίδες-με- κείμενο (ή περιεχόμενο).
+Επιπλέον υπάρχουν και \'\'\'$2\'\'\' άλλες σελίδες που πληρούν τα κριτήρια και χαρακτηρίζονται, επίσης, σελίδες περιεχομένου.
+
+Από τη στιγμή που δημιουργήθηκε αυτό το Wiki έχουν καταγραφεί \'\'\'$3\'\'\' επισκέψεις σε σελίδες και \'\'\'$4\'\'\' επεξεργασίες σε σελίδες.
+Ο μέσος όρος κατά την τελευταία ενημέρωση ήταν \'\'\'$5\'\'\' επεξεργασίες ανά σελίδα και \'\'\'$6\'\'\' επισκέψεις ανά επεξεργασία.',
+
+'userstatstext' => 'Υπάρχουν \'\'\'$1\'\'\' εγγεγραμένοι χρήστες.
+\'\'\'$2\'\'\' από αυτούς είναι διαχειριστές (βλ. $3 | διαχειριστές).',
+
+
+# Maintenance Page
+#-----------------------------#
+'disambiguations' => 'Σελίδες αποσαφήνισης',
+'disambiguationspage' => '{{ns:4}}:Σύνδεσμοι_προς_τις_σελίδες_αποσαφήνισης',
+
+'disambiguationstext' => 'Οι σελίδες που ακολουθούν συνδέονται με μια <i>σελίδα αποσαφήνισης</i> ενώ θα έπρεπε κανονικά να συνδέονται με το αντίστοιχο θέμα.<br />Μια σελίδα θεωρείται σελίδα αποσαφήνισης όταν συνδέεται μέσω της $1.<br />Σύνδεσμοι μέσα από άλλες περιοχές <i>δεν</i> περιλαμβάνονται σε αυτό τον κατάλογο.',
+
+'doubleredirects' => 'Διπλές ανακατευθύνσεις',
+
+'doubleredirectstext' => 'Κάθε σειρά περιέχει συνδέσμους προς την πρώτη και τη δεύτερη σελίδα ανακατεύθυνσης, όπως επίσης και την πρώτη αράδα του κειμένου στη δεύτερη σελίδα ανακατεύθυνσης η οποία και είναι, κανονικά, ο πραγματικός προορισμός της ανακατεύθυνσης -εκεί δηλαδή όπου θα έπρεπε να είχατε οδηγηθεί από την αρχή.',
+
+'brokenredirects' => 'Κατεστραμένες ανακατευθύνσεις',
+'brokenredirectstext' => 'Οι παρακάτω ανακατευθύνσεις οδηγούν σε σελίδες που δεν υπάρχουν.',
+
+# Miscellaneous special pages
+#
+'lonelypages' => 'Ορφανές σελίδες',
+'uncategorizedpages' => 'Αταξινόμητες σελίδες',
+'uncategorizedcategories' => 'Αταξινόμητες κατηγορίες',
+'unusedcategories' => 'Κενές κατηγορίες',
+'unusedimages' => 'Αχρησιμοποίητες εικόνες',
+'popularpages' => 'Δημοφιλείς σελίδες',
+'nviews' => '$1 επισκέψεις',
+'wantedpages' => 'Σελίδες σε ζήτηση',
+'mostlinked'	=> 'Οι σελίδες με τις περισσότερες αναφορές',
+'nlinks' => '$1 σύνδεσμοι',
+'allpages' => 'Όλες οι σελίδες',
+'randompage' => 'Σελίδα στην τύχη',
+'shortpages' => 'Σύντομες σελίδες',
+'longpages' => 'Εκτενείς σελίδες',
+'deadendpages' => 'Αδιέξοδες σελίδες',
+'listusers' => 'Κατάλογος χρηστών',
+'specialpages' => 'Σελίδες λειτουργιών',
+'spheading' => 'Σελίδες λειτουργιών για όλους τους χρήστες',
+'restrictedpheading' => 'Ειδικές σελίδες με περιορισμούς πρόσβασης',
+'recentchangeslinked' => 'Σχετικές αλλαγές',
+'rclsub' => '(σε σελίδες που συνδέονται από το "$1")',
+'newpages' => 'Νέες σελίδες',
+'ancientpages' => 'Οι παλιότερες σελίδες',
+'intl' => 'Διαγλωσσικοί σύνδεσμοι',
+'move' => 'Μετακίνηση',
+'movethispage' => 'Μετακίνηση αυτής της σελίδας',
+
+'unusedimagestext' => '<p>Παρακαλούμε να λάβετε υπ` όψη σας πως άλλες ιστοσελίδες είναι δυνατόν να  συνδέονται με μια εικόνα με απευθείας URL - για το λόγο αυτό μπορεί μερικές εικόνες να εμφανίζονται ακόμα εδώ παρόλο που στην πραγματικότητα είναι σε χρήση.</p>',
+
+'unusedcategoriestext' => 'Οι ακόλουθες κατηγοριοποιημένες σελίδες δεν συνδέονται με άλλο άρθρο ή κατηγορία.',
+'booksources' => 'Πηγές βιβλίων',
+'categoriespagetext' => 'Υπάρχουν οι ακόλουθες κατηγορίες στο Wiκi.',
+'data' => 'Δεδομένα',
+'userrights' => 'Διαχείριση δικαιωμάτων χρηστών',
+'groups' => 'Ομάδες χρηστών',
+
+'booksourcetext' => 'Ακολουθούν σύνδεσμοι για διαδικτυακούς τόπους που εμπορεύονται καινούργια ή μεταχειρισμένα βιβλία και όπου μπορείτε να αναζητήσετε τα βιβλία που σας ενδιαφέρουν. Το {{SITENAME}} δεν έχει σχέση με αυτές τις επιχειρήσεις και ο κατάλογος αυτός δεν αποτελεί κατά κανένα τρόπο προώθηση ή διαφήμισή τους.',
+
+'isbn' => 'ISBN',
+'alphaindexline' => '$1 έως $2',
+'version' => 'Έκδοση',
+'log' => 'Καταγραφές γεγονότων',
+
+'alllogstext' => 'Εποπτική εμφάνιση όλων των ενεργειών φόρτωσης αρχείων, διαγραφής, προστασίας, φραγής και όλων των καταγραφών των διαχειριστών στο αρχείο γεγονότων. Μπορείτε να περιορίσετε τα αποτελέσματα που εμφανίζονται επιλέγοντας συγκεκριμένο είδος γεγονότων, όνομα χρήστη ή τη σελίδα που επηρεάστηκε.',
+
+
+# Special:Allpages
+#--------------------------#
+'nextpage' => 'Επόμενη σελίδα ($1)',
+'allpagesfrom' => 'Εμφάνιση όλων των σελίδων που αρχίζουν στο:',
+'allarticles' => 'Όλα τα άρθρα',
+'allinnamespace' => 'Όλες οι σελίδες (στην περιοχή $1)',
+'allnotinnamespace' => 'Όλες οι σελίδες (που δεν βρίσκονται στην περιοχή $1)',
+'allpagesprev' => 'Προηγούμενες',
+'allpagesnext' => 'Επόμενες',
+'allpagessubmit' => 'Μετάβαση',
+
+
+# E this user
+#-----------------#
+'mailnologin' => 'Δεν υπάρχει διεύθυνση παραλήπτη.',
+
+'mailnologintext' => 'Πρέπει να έχετε [[Special:Userlogin|συνδεθεί]] και να έχετε δηλώσει
+μια έγκυρη ηλεκτρονική διεύθυνση στις [[Special:Preferences|Προτιμήσεις]]
+για να στείλετε e-mail σε άλλους χρήστες.',
+
+'emailuser' => 'Στείλτε e-mail σε αυτόν το χρήστη',
+'emailpage' => 'Αποστολή e-mail σε χρήστη',
+
+'emailpagetext' => 'Συπληρώνοντας την παρακάτω φόρμα θα στείλετε ένα μήνυμα εφόσον ο παραλήπτης έχει δηλώσει μια έγκυρη διεύθυνση ηλεκτρονικού ταχυδρομείου στις \'προτιμήσεις χρήστη\'. Η διεύθυνση ηλεκτρονικού ταχυδρομείου που έχετε δηλώσει στις δικές σας \'προτιμήσεις χρήστη\' θα εμφανιστεί ως διεύθυνση αποστολέα του μηνύματος, ούτως ώστε ο παραλήπτης να μπορέσει να σας απαντήσει.',
+
+'usermailererror' => 'Σφάλμα ηλεκτρονικού ταχυδρομείου:',
+'defemailsubject' => 'Ηλεκτρονικό ταχυδρομείο {{SITENAME}}',
+'noemailtitle' => 'Δεν υπάρχει ηλεκτρονική διεύθυνση.',
+'noemailtext' => 'Ο χρήστης αυτός δεν έχει δηλώσει την ηλεκτρονική του διέθυνση ή έχει επιλέξει να μην δέχεται μηνύματα από άλλους χρήστες.',
+'emailfrom' => 'Αποστολέας',
+'emailto' => 'Προς',
+'emailsubject' => 'Θέμα',
+'emailmessage' => 'Μήνυμα',
+'emailsend' => 'Αποστολή',
+'emailsent' => 'Το μήνυμα έχει σταλεί',
+'emailsenttext' => 'Το μήνυμά σας έχει σταλεί.',
+
+
+# Watchlist
+#---------------#
+'watchlist' => 'Λίστα παρακολούθησης',
+'mywatchlist' => 'Λίστα παρακολούθησης',
+'nowatchlist' => 'Δεν υπάρχουν εγγραφές στη λίστα παρακολούθησης.',
+'watchnologin' => 'Δεν έχετε συνδεθεί.',
+'watchnologintext' => 'Για να κάνετε αλλαγές στη λίστα παρακολούθησης πρέπει να <a href="{{localurl:Special:Userlogin}}"> συνδεθείτε </a>.',
+'addedwatch' => 'Η σελίδα έχει προστεθεί στη λίστα παρακολούθησης.',
+
+'addedwatchtext' => 'Η σελίδα "$1" έχει προστεθεί στη [[Special:Watchlist|λίστα παρακολούθησης]].
+Μελλοντικές αλλαγές στη σελίδα καθώς και στη σχετική με τη σελίδα συζήτηση θα φαίνονται \'\'\'με έντονα γράμματα\'\'\' στη [[Special:Recentchanges|λίστα πρόσφατων αλλαγών]] έτσι ώστε να διευκολύνεται η παρακολούθηση.
+
+
+<p>Αν θελήσετε να αφαιρέσετε τη σελίδα αυτή από τη λίστα παρακολούθησης, κάνετε κλικ στην επιλογή "παύση παρακολούθησης" στην μπάρα ενεργειών.',
+
+'removedwatch' => 'Αφαιρέθηκε απο τη λίστα παρακολούθησης.',
+'removedwatchtext' => 'Η σελίδα "$1" έχει αφαιρεθεί από τη λίστα παρακολούθησής σας.',
+'watch' => 'Παρακολούθηση',
+'watchthispage' => 'Παρακολούθηση αυτής της σελίδας',
+'unwatch' => 'Παύση παρακολούθησης',
+'unwatchthispage' => 'Παύση παρακολούθησης αυτής της σελίδας',
+'notanarticle' => 'Η σελίδα αυτή δεν είναι σελίδα περιεχομένου.',
+'watchnochange' => 'Δεν υπήρξε δραστηριότητα επεξεργασίας στις σελίδες που παρακολουθείτε κατά την εμφανιζόμενη χρονική περίοδο.',
+'watchdetails' => '(Υπό παρακολούθηση: $1 σελίδες, χωρίς τις σελίδες συζήτησης. $2 συνολικά σελίδες έχουν υποστεί επεξεργασία. $3... <a href="$4">Προβολή και επεξεργασία ολόκληρης της λίστας </a>)',
+'wlheader-enotif' => '* Η ειδοποίηση με ηλεκτρονικό ταχυδρομείο έχει ενεργοποιηθεί.',
+'wlheader-showupdated' => '* Σελίδες που έχουν υποστεί αλλαγές από την τελευταία φορά που τις επισκεφθήκατε εμφανίζονται με \'\'\'έντονους χαρακτήρες\'\'\'.',
+'watchmethod-recent' => 'Έλεγχος πρόσφατων αλλαγών σε σελίδες υπό παρακολούθηση',
+'watchmethod-list' => 'Έλεγχος σελίδων υπό παρακολούθηση για πρόσφατες αλλαγές',
+'removechecked' => 'Αφαίρεση επιλεγμένων σελίδων από τη λίστα παρακολούθησης',
+'watchlistcontains' => 'Η λίστα παρακολούθησής σας περιέχει $1 σελίδες.',
+
+'watcheditlist' => 'Ακολουθεί μια λίστα των σελίδων που παρακολουθείτε (κατά αλφαβητική σειρά). Σημειώστε τις σελίδες που επιθυμείτε να αφαιρέσετε από τη λίστα σας και επικυρώστε με ένα κλικ στο κουμπί \'αφαίρεση σελίδων\' στο κάτω μέρος της οθόνης.',
+
+'removingchecked' => 'Εξάλειψη των αντικειμένων που ζητήσατε να αφαιρεθούν από τη λίστα παρακολούθησης...',
+'couldntremove' => 'Δεν ήταν δυνατόν να εξαλειφθεί το στοιχείο $1...',
+'iteminvalidname' => 'Πρόβλημα με το στοιχείο "$1", άκυρο όνομα...',
+'wlnote' => 'Ακολουθούν οι $1 πιο πρόσφατες αλλαγές κατά τη διάρκεια των τελευταίων <b>$2</b> ωρών.',
+'wlshowlast' => 'Εμφάνιση των τελευταίων $1 ωρών $2 ημερών $3',
+'wlsaved' => 'Αποθηκευμένη έκδοση της λίστας παρακολούθησης',
+'wlhideshowown' => '$1 από τις επεξεργασίες μου',
+'enotif_mailer' => 'Σύστημα ειδοποίησης μέσω αλληλογραφίας του {{SITENAME}}',
+'enotif_reset' => 'Σημειώστε όλες τις σελίδες ως αναγνωσμένες.',
+'enotif_newpagetext' => 'Αυτή είναι μια νέα σελίδα.',
+'changed' => 'έχει αλλάξει',
+'created' => 'δημιουργήθηκε',
+'enotif_subject' => 'Η σελίδα $PAGETITLE του {{SITENAME}}έχει $CHANGEDORCREATED από το χρήστη $PAGEEDITOR',
+'enotif_lastvisited' => 'Δείτε το $1 για όλες τις αλλαγές που έγιναν από την τελευταία σας επίσκεψη.',
+'enotif_body' => 'Αγαπητέ $WATCHINGUSERNAME...
+
+Η σελίδα $PAGETITLE του {{SITENAME}}έχει $CHANGEDORCREATED στις $PAGEEDITDATE από το χρήστη $PAGEEDITOR -ακολουθήστε το σύνδεσμο $PAGETITLE_URL για να δείτε την τρέχουσα αναθεώρηση.
+
+$NEWPAGE
+
+Περιγραφή: $PAGESUMMARY $PAGEMINOREDIT
+
+Επικοινωνήστε με το συγκεκριμένο χρήστη:
+mail: $PAGEEDITOR_EMAIL
+wiki: $PAGEEDITOR_WIKI
+
+Δεν θα υπάρξει άλλη ειδοποίηση για περαιτέρω αλλαγές αν δεν επισκεφθείτε τη σελίδα. Μπορείτε επίσης να επαναφέρετε την επιλογή ειδοποίησης για όλες τις σελίδες στη λίστα παρακολούθησής σας.
+
+Φιλικά,<br />
+Tο σύστημα ειδοποίησης του {{SITENAME}}
+
+--
+Για να αλλάξετε τις προτιμήσεις της λίστας παρακολούθησής σας, ακολουθήστε το σύνδεσμο:
+{{fullurl:Special:Watchlist/edit}}
+
+Ερωτήσεις και περισσότερες πληροφορίες:
+{{fullurl:{{MediaWiki:helppage}}}}',
+
+
+# Delete/protect/revert
+#----------------------------------#
+'deletepage' => 'Διαγραφή σελίδας',
+'confirm' => 'Επιβεβαίωση',
+'excontent' => 'το περιεχόμενο ήταν:',
+'excontentauthor' => 'το περιεχόμενο ήταν: \'$1\' (και οι μοναδικές συνεισφορές ήταν του \'$2\')',
+'exbeforeblank' => 'το περιεχόμενο πριν απο την εκκαθάριση ήταν:',
+'exblank' => 'η σελίδα ήταν κενή',
+'confirmdelete' => 'Επιβεβαίωση διαγραφής',
+'deletesub' => '(Διαγραφή της "$1")',
+# problem with link: [[{{ns:4}}:Κανόνες|Κανόνες]]
+'historywarning' => 'ΠΡΟΕΙΔΟΠΟΙΗΣΗ! Η σελίδα που πρόκειται να διαγράψετε έχει ιστορικό.<br />',
+'confirmdeletetext' => 'Πρόκειται να διαγράψετε οριστικά από τη βάση δεδομένων μια σελίδα (ή μια εικόνα) μαζί με το ιστορικό της. Παρακαλούμε επιβεβαιώστε ότι θέλετε πραγματικά να το κάνετε, ότι αντιλαμβάνεσθε τις συνέπειες και ότι το κάνετε σύμφωνα με τους [[{{ns:4}}:Κανόνες|Κανόνες]].',
+'actioncomplete' => 'Η ενέργεια ολοκληρώθηκε.',
+'deletedtext' => 'Η "$1" έχει διαγραφεί.
+Για το ιστορικό των πρόσφατων διαγραφών ανατρέξτε στο σύνδεσμο $2',
+'deletedarticle' => 'Η $1 διαγράφτηκε.',
+'dellogpage' => 'Καταγραφές διαγραφών',
+'dellogpagetext' => 'Λίστα των πιο πρόσφατων διαγραφών',
+'deletionlog' => 'Καταγραφές διαγραφών',
+'reverted' => 'Επαναφορά σε προηγούμενη αναθεώρηση',
+'deletecomment' => 'Αιτιολογία διαγραφής',
+'imagereverted' => 'Η επαναφορά σε παλιότερη έκδοση ήταν επιτυχής.',
+'rollback' => 'Επαναφορά επεξεργασιών',
+'rollback_short' => 'Επαναφορά',
+'rollbacklink' => 'Επαναφορά στην προηγούμενη',
+'rollbackfailed' => 'Η επαναφορά απέτυχε.',
+'cantrollback' => 'Δεν είναι δυνατή η αναίρεση αυτής της αλλαγής, πρόκειται για την αρχική ενέργεια δημιουργίας της σελίδας.',
+
+'alreadyrolled' => 'Αδύνατον να αναιρεθεί η τελευταία αλλαγή της σελίδας [[:$1]]
+από το χρήστη [[User:$2|$2]] ([[User talk:$2|Συζήτηση]]), κάποιος έχει ήδη αναιρέσει την αλλαγή ή έχει αλλάξει εκ νέου τη σελίδα.
+
+Τελευταία αλλαγή από το χρήστη [[User:$3|$3]] ([[User talk:$3|Συζήτηση]]).',
+#   only shown if there is an edit comment
+'editcomment' => 'Το σχόλιο της επεξεργασίας ήταν: "<i>$1</i>".',
+'revertpage' => 'Ανάκληση των αλλαγών $2 (επιστροφή στην προηγούμενη αναθεώρηση $1)',
+
+'sessionfailure' => 'Υπάρχει πρόβλημα με τη σύνδεσή σας -η ενέργεια αυτή ακυρώθηκε προληπτικά για την αντιμετώπιση τυχόν πειρατείας συνόδου (session hijacking). Παρακαλoύμε πατήστε "Επιστροφή", ξαναφορτώστε τη σελίδα από την οποία φθάσατε εδώ και προσπαθήστε ξανά.',
+
+'protectlogpage' => 'Καταγραφές προστασίας (κλειδώματος)',
+
+# problem with link: [[{{ns:4}}:Σελίδες_υπό_προστασία]]
+'protectlogtext' => 'Ακολουθεί κατάλογος ενεργειών κλειδώματος και ξεκλειδώματος σελίδων.
+(Βλ. [[{{ns:4}}:Σελίδες_υπό_προστασία]] για περισσότερες πληροφορίες).',
+
+'protectedarticle' => 'Κλειδωμένο $1',
+'unprotectedarticle' => 'έχει αρθεί η προστασία του $1',
+'protectsub' => '(Κλειδώνεται η "$1")',
+'confirmprotecttext' => 'Θέλετε πραγματικά να κλειδώσετε αυτή τη σελίδα;',
+'confirmprotect' => 'Επιβεβαίωση κλειδώματος',
+'protectmoveonly' => 'Προστασία μόνον από μετακινήσεις',
+'protectcomment' => 'Αιτιολογία προστασίας',
+'unprotectsub' => '(Άρση προστασίας για το "$1")',
+'confirmunprotecttext' => 'Θέλετε πραγματικά να ξεκλειδώσετε αυτή τη σελίδα;',
+'confirmunprotect' => 'Επιβεβαίωση ξεκλειδώματος',
+'unprotectcomment' => 'Αιτιολογία για την άρση προστασίας',
+
+
+# Undelete
+#---------------#
+'undelete' => 'Αποκατάσταση σελίδων που έχουν διαγραφεί',
+'undeletepage' => 'Εμφάνιση και αποκατάσταση σελίδων που έχουν διαγραφεί',
+'undeletepagetext' => 'Οι σελίδες που ακολουθούν έχουν διαγραφεί αλλά βρίσκονται ακόμα αποθηκευμένες στο αρχείο και μπορούν να αποκατασταθούν. (Κατά καιρούς γίνεται εκκαθάριση του αρχείου.)',
+'undeletearticle' => 'Αποκατάσταση σελίδας που έχει διαγραφεί',
+'undeleterevisions' => '$1 αναθεωρήσεις έχουν αρχειοθετηθεί.',
+
+'undeletehistory' => 'Αν αποκαταστήσετε αυτή τη σελίδα, όλες οι αναθεωρήσεις θα αποκατασταθούν στο ιστορικό. Αν μετά τη διαγραφή αυτής της σελίδας έχει δημιουργηθεί μια νέα σελίδα με το ίδιο όνομα, οι αναθεωρήσεις που αποκαταστάθηκαν θα εμφανιστούν στο πρότερο ιστορικό και η τρέχουσα αναθεώρηση της σελίδας δεν θα αντικαταστθεί αυτομάτως.',
+
+'undeleterevision' => 'Αναθεώρηση που έχει διαγραφεί στις $1',
+'undeletebtn' => 'Αποκατάσταση!',
+'undeletedarticle' => 'αποκατάσταση "$1"',
+'undeletedrevisions' => 'Αποκατάσταση $1 αναθεωρήσεων',
+
+
+# Namespace form on various pages
+#-------------------------------------------------------#
+'namespace' => 'Περιοχή:',
+'invert' => 'Αντιστροφή της επιλογής',
+
+
+# Contributions
+#---------------------#
+'contributions' => 'Συνεισφορές χρήστη',
+'mycontris' => 'Οι προσθήκες μου',
+'contribsub2' => 'Για τον/την $1 ($2)',
+'nocontribs' => 'Δεν βρέθηκαν αλλαγές με αυτά τα κριτήρια.',
+'ucnote' => 'Ακολουθούν οι τελευταίες <b>$1</b> αλλαγές του χρήστη κατά τη διάρκεια των τελευταίων <b>$2</b> ημερών.',
+'uclinks' => 'Εμφάνιση των τελευταίων $1 αλλαγών - Εμφάνιση των τελευταίων $2 ημερών',
+'uctop' => ' (τελευταία)',
+'newbies' => 'νέοι χρήστες',
+
+
+# What links here
+#-------------------------#
+'whatlinkshere' => 'Αναφορές στη σελίδα',
+'notargettitle' => 'Δεν έχει καθοριστεί προορισμός.',
+'notargettext' => 'Δεν έχετε καθορίσει ένα χρήστη ή μια σελίδα προορισμού για να εκτελεσθεί αυτή η λειτουργία.',
+'linklistsub' => '(Κατάλογος συνδέσμων)',
+'linkshere' => 'Εδώ παραπέμπουν οι ακόλουθες σελίδες:',
+'nolinkshere' => 'Δεν υπάρχουν σελίδες με συνδέσεις προς τα εδώ.',
+'isredirect' => 'ανακατεύθυνση σελίδας',
+
+
+# Block/unblock IP
+#--------------------------#
+'blockip' => 'Φραγή χρήστη ή διεύθυνσης IP',
+
+# problem with link: [[{{ns:4}}:Κανόνες|Κανόνες]]
+'blockiptext' => 'Χρησιμοποιήστε την παρακάτω φόρμα για να εμποδίσετε παρεμβάσεις στο κείμενο από μια συγκεκριμένη διεύθυνση IP ή όνομα χρήστη.
+Το μέτρο αυτό πρέπει να λαμβάνεται μόνο σε περιπτώσεις βανδαλισμού σελίδων και πάντα σύμφωνα με τους [[{{ns:4}}:Κανόνες|Κανόνες]].
+Παρακαλούμε να αιτιολογήσετε την ενέργειά σας (παραπέμποντας π.χ. σε συγκεκριμένες σελίδες που υπέστησαν βανδαλισμό).',
+
+'ipaddress' => 'Διεύθυνση IP/όνομα χρήστη',
+'ipadressorusername' => 'Διεύθυνση IP ή όνομα χρήστη',
+'ipbexpiry' => 'Λήξη',
+'ipbreason' => 'Αιτιολογία',
+'ipbsubmit' => 'Φραγή σε αυτό το χρήστη',
+'ipbother' => 'Άλλη ώρα',
+'ipboptions' => '2 ώρες:2 hours,1 ημέρα:1 day,3 ημέρες:3 days,1 εβδομάδα:1 week,2 εβδομάδες:2 weeks,1 μήνα:1 month,3 μήνες:3 months,6 μήνες:6 months,1 χρόνο:1 year,αόριστα:infinite',
+'ipbotheroption' => 'άλλη',
+'badipaddress' => 'Άκυρη διεύθυνση IP.',
+'blockipsuccesssub' => 'Η φραγή ολοκληρώθηκε επιτυχώς.',
+'blockipsuccesstext' => 'Η διεύθυνση "$1" έχει υποστεί φραγή. <br />Δείτε τη [[Special:Ipblocklist|λίστα διευθύνσεων IP που έχουν υποστεί φραγή]] για να το επιβεβαιώσετε.',
+'unblockip' => 'Άρση φραγής χρήστη',
+'unblockiptext' => 'Χρησιμοποιήστε την παρακάτω φόρμα για να αποκαταστήσετε την πρόσβαση σε επεξεργασία, σε μια διεύθυνση IP ή σε ένα χρήστη που είχε αποκλειστεί με φραγή.',
+'ipusubmit' => 'Άρση φραγής αυτής της διεύθυνσης',
+'ipblocklist' => 'Λίστα διευθύνσεων IP και ονομάτων χρηστών που έχουν υποστεί φραγή.',
+'blocklistline' => 'Φραγή του/της $3 από τους $1, $2 (λήγει $4)',
+'blocklink' => 'φραγή',
+'unblocklink' => 'Άρση φραγής',
+'contribslink' => 'Συνεισφορές/Προσθήκες',
+'autoblocker' => 'Έχετε υποστεί αυτόματα φραγή από το σύστημα επειδή χρησιμοποιείτε την ίδια διεύθυνση IP με το χρήστη "$1". Αιτιολογία "$2".',
+'blocklogpage' => 'Καταγραφές φραγής',
+'blocklogentry' => 'Φραγή του/της "$1" με χρόνο λήξης $2',
+
+'blocklogtext' => 'Σε αυτή τη σελίδα υπάρχουν οι καταγραφές φραγής και κατάργησης φραγής των χρηστών (αρχείο γεγονότων).
+
+<br />Δεν συμπεριλαμβάνονται οι διευθύνσεις IP που υπέστησαν αυτόματα φραγή. <br />Στο σύνδεσμο [[Special:Ipblocklist|διευθύνεις IP που έχουν υποστεί φραγή]] θα βρείτε τον πλήρη κατάλογο με τις τρέχουσες φραγές.',
+
+'unblocklogentry' => 'Άρση φραγής του "$1"',
+'range_block_disabled' => 'Η δυνατότητα του διαχειριστή να δημιουργεί περιοχές φραγής είναι απενεργοποιημένη.',
+'ipb_expiry_invalid' => 'Άκυρος χρόνος λήξης',
+'ip_range_invalid' => 'Το εύρος των διευθύνσεων IP δεν είναι έγκυρο.',
+'proxyblocker' => 'Εργαλείο φραγής διακομιστών (proxy blocker)',
+
+'proxyblockreason' => 'Η διεύθυνσήη IP σας έχει υποστεί φραγή γιατί είναι open proxy. Παρακαλούμε επικοινωνείστε με την υπηρεσία παροχής Internet που χρησιμοποιείτε ή με την τεχνική υποστήριξη, για να θέσετε υπ΄ όψη τους αυτό το σοβαρό θέμα ασφάλειας.',
+
+'proxyblocksuccess' => 'Ολοκληρώθηκε!',
+#'sorbs' => 'SORBS DNSBL',
+'sorbsreason' => 'Η διεύθνυση IP σας έχει χαρακτηρισθεί ως open proxy στο [http://www.sorbs.net SORBS] DNSBL.',
+'sorbs_create_account_reason' => 'Η διεύθυνση IP σας έχει χαρακτηρισθεί open proxy στο [http://www.sorbs.net SORBS] DNSBL. Δεν μπορείτε να δημιουργήσετε λογαριασμό χρήστη.',
+
+
+# Developer tools
+#-------------------------#
+'lockdb' => 'Κλείδωμα βάσης δεδομένων',
+'unlockdb' => 'Ξεκλείδωμα βάσης δεδομένων',
+
+'lockdbtext' => 'Το κλείδωμα της βάσης δεδομένων αναιρεί τη δυνατότητα όλων των χρηστών να επεξεργαστούν σελίδες, να αλλάξουν τις προτιμήσεις τους, να επεξεργαστούν τις λίστες παρακολούθησης και να εκτελέσουν οποιαδήποτε ενέργεια επηρεάζει τη βάση δεδομένων. Παρακαλούμε να επιβεβαιώσετε ότι γνωρίζετε τις επιπτώσεις της ενέργειάς σας και ότι θα ξεκλειδώσετε τη βάση δεδομένων μόλις ολοκληρωθεί η συντήρηση.',
+
+'unlockdbtext' => 'Το ξεκλείδωμα της βάσης δεδομένων θα αποκαταστήσει τη δυνατότητα των χρηστών να επεξεργάζονται σελίδες, να αλλάζουν τις προτιμήσεις τους, να τροποποιούν τις λίστες παρακολούθησης και να προβαίνουν γενικότερα σε ενέργειες που επιφέρουν αλλαγές στη βάση δεδομένων. Παρακαλούμε επιβεβαιώστε πως θέλετε να προχωρήσετε.',
+
+'lockconfirm' => 'Ναι, επιθυμώ να κλειδώσω τη βάση δεδομένων.',
+'unlockconfirm' => 'Ναι, επιθυμώ να ξεκλειδώσω τη βάση δεδομένων.',
+'lockbtn' => 'Κλείδωμα βάσης δεδομένων',
+'unlockbtn' => 'Ξεκλείδωμα βάσης δεδομένων',
+'locknoconfirm' => 'Δεν έχετε σημειώσει το κουτάκι της επιβεβαίωσης.',
+'lockdbsuccesssub' => 'Η βάση δεδομένων κλειδώθηκε επιτυχώς.',
+'unlockdbsuccesssub' => 'Άρση κλειδώματος τη βάσης δεδομένων',
+
+
+'lockdbsuccesstext' => 'Η βάση δεδομένων έχει κλειδωθεί.
+<br />Μην ξεχάσετε να την ξεκλειδώσετε όταν τελειώσετε τη συντήρηση.',
+
+# Make sysop
+#-------------------#
+'rightslogtext' => 'Καταγραφές των αλλαγών στα δικαιώματα χρηστών.',
+
+# Move page
+#-----------------#
+'movepage' => 'Μετακίνηση σελίδας',
+
+#  problem with link [[Special:Maintenance|ελέγξατε]] (this special page does not exist in normal Mediawiki)
+'movepagetext' => 'Χρησιμοποιήστε τη φόρμα που ακολουθεί για να μετονομάσετε σελίδες και για να μεταφέρετε όλο το ιστορικό τους κάτω από το νέο όνομα. Κάτω από τον παλιό τίτλο της σελίδας θα παραμείνει μια σελίδα ανακατεύθυνσης στο νέο τίτλο. Οι τυχόν σύνδεσμοι που οδηγούσαν στην παλιά σελίδα δεν θα επηρεαστούν. Βεβαιωθείτε πως [[Special:Maintenance|ελέγξατε]] τα διπλά διαστήματα και τους κατεστραμένους συνδέσμους. Αναλαμβάνετε την ευθύνη να επιβεβαιώσετε ότι οι συνδεσμοι εξακολουθούν να οδηγούν προς τις κατευθύνσεις που πρέπει.
+
+Λάβετε υπ` όψη σας ότι η σελίδα \'\'\'δεν\'\'\' θα μετακινηθεί αν υπάρχει ήδη μια άλλη σελίδα κάτω από το νέο τίτλο, εκτός αν η σελίδα αυτή είναι κενή \'\'\'και\'\'\' χωρίς ιστορικό επεξεργασίας. Αυτό σημαίνει ότι, στην περίπτωση που έχετε κάνει λάθος, μπορείτε να μετονομάσετε μια σελίδα ξαναδίνοντας της την αρχική της ονομασία αλλά δεν μπορείτε να αντικαταστήσετε μια υπάρχουσα σελίδα.
+
+
+<b>ΠΡΟΣΟΧΗ!</b>
+Η μετονομασία σελίδας είναι μια αιφνίδια και δραστική αλλαγή όταν πρόκειται για δημοφιλείς σελίδες. Παρακαλούμε, πριν το αποφασίσετε, να εξετάσετε προσεκτικά τις πιθανές επιπτώσεις αυτής της ενέργειας .',
+
+'movepagetalktext' => 'Η σελίδα συζήτησης που αντιστοιχεί, εάν υπάρχει, θα μετακινηθεί αυτόματα μαζί με αυτήν \'\'\'έκτός αν:\'\'\'
+*Μετακινείτε τη σελίδα σε διαφορετική περιοχή (namespace),
+*Υπάρχει κάτω από το νέο όνομα μια σελίδα συζήτησης που δεν είναι κενή, ή
+*Έχετε αφαιρέσει τη σημείωση (check) από το κουτάκι που υπάρχει παρακάτω.
+
+Σε αυτές τις περιπτώσεις, θα πρέπει να μετακινήσετε (ή να ενσωματώσετε αν το θέλετε) τη σελίδα με αντιγραφή-και-επικόλληση.',
+
+'movearticle' => 'Μετακίνηση σελίδας',
+'movenologin' => 'Δεν έχετε συνδεθεί.',
+'movenologintext' => 'Για να μετακινήσετε μια σελίδα πρέπει να είστε εγγεγραμένος χρήστης και [[Special:Userlogin|να έχετε συνδεθεί]] στο Wiκi.',
+'newtitle' => 'νέος τίτλος',
+'movepagebtn' => 'Μετακίνηση σελίδας',
+'pagemovedsub' => 'Η μετακίνηση ήταν επιτυχής',
+'pagemovedtext' => 'Η σελίδα "[[$1]]" μετακινήθηκε στη "[[$2]]".',
+'articleexists' => 'Υπάρχει ήδη σελίδα με αυτό το όνομα. Παρακαλούμε δώστε άλλο όνομα στη σελίδα.',
+'talkexists' => 'Η ίδια η σελίδα μετακινήθηκε επιτυχώς αλλά όχι και η σελίδα συζήτησης, λόγω του ότι υπάρχει ήδη άλλη σελίδα συζήτησης κάτω από το νέο τίτλο. Παρακαλούμε ενοποιήστε τις δύο σελίδες με \'αντιγραφή-και-επικόλληση\'.',
+'movedto' => 'Μεκακινήθηκε στο',
+'movetalk' => 'Μετακίνηση της σελίδας "συζήτηση" (εάν υπάρχει)',
+'talkpagemoved' => 'Η αντίστοιχη σελίδα συζήτησης έχει επίσης μεταφερθεί.',
+'talkpagenotmoved' => 'Η σελίδα συζήτησης που αντιστοιχεί <strong>δεν</strong> έχει μεταφερθεί.',
+'1movedto2' => 'Η $1 μετονομάστηκε σε $2',
+'1movedto2_redir' => 'Η $1 μετακινήθηκε στη θέση $2 (με ανακατεύθυνση)',
+'movelogpage' => '΄Μετακίνηση αρχείου καταγραφών',
+'movelogpagetext' => 'Ακολουθεί η λίστα με τις σελίδες που έχουν μετακινηθεί.',
+'movereason' => 'Αιτιολογία',
+'revertmove' => 'έπαναφορά',
+'delete_and_move' => 'Διαγραφή και μετακίνηση',
+
+'delete_and_move_text' => '==Χρειάζεται διαγραφή.==
+
+Το άρθρο [[$1]] υπάρχει ήδη. Θέλετε να το διαγράψετε για να εκτελεσθεί η μετακίνηση;',
+
+'delete_and_move_reason' => 'Διαγράφτηκε για να εκτελεθεί η μετακίνηση.',
+'selfmove' => 'Ο τίτλος προέλευσης είναι ο ίδιος με τον τίτλο προορισμού -δεν είναι δυνατόν να μετακινηθεί μια σελίδα προς τον εαυτό της.',
+
+'immobile_namespace' => 'Ο τίτλος του προορισμού είναι ειδικού τύπου -δεν είναι δυνατή η μετακίνηση σελίδων σε εκείνη την περιοχή.',
+
+
+# Export
+#----------#
+'export' => 'Εξαγωγή σελίδων',
+
+'exporttext' => 'Μπορείτε να κάνετε εξαγωγή του κειμένου και του ιστορικού επεξεργασίας μιας συγκεκριμένης σελίδας (ή περισσοτέρων σελίδων που έχουν ομαδοποιηθεί με χρήση XML).
+
+Για την εξαγωγή ολόκληρων άρθρων, συμπληρώστε τους τίτλους στο παρακάτω πλαίσιο (ένα τίτλο σε κάθε σειρά) και επιλέξτε ανάμεσα από το να εξαγάγετε μόνο την τρέχουσα έκδοση (με τις πληροφορίες της πιο πρόσφατης επεξεργασίας) ή εναλλακτικά και τις παλιότερες εκδόσεις (με τις αντίστοιχες καταγραφές στη σελιδα του ιστορικού).
+
+Στην τελευταία περίπτωση μπορείτε να κάνετε και χρήση συνδέσμου, π.χ. [[{{ns:Special}}:Export/{{MediaWiki:mainpage}}]] για το άρθρο {{MediaWiki:mainpage}}.',
+
+'exportcuronly' => 'Να συμπεριληφθεί μόνον η τρέχουσα αναθεώρηση, όχι το πλήρες ιστορικό.',
+
+
+# Namespace 8 related
+#----------------------------------#
+'allmessages' => 'Όλα τα μηνύματα του συστήματος',
+'allmessagesname' => 'Όνομα',
+'allmessagesdefault' => 'Προκαθορισμένο κείμενο',
+'allmessagescurrent' => 'Παρόν κείμενο',
+'allmessagestext' => 'Η λίστα με όλα τα μηνύματα συστήματος που βρίσκονται στην περιοχή MediaWiki:',
+'allmessagesnotsupportedUI' => 'Η τρέχουσα γλώσσα διασύνδεσής σας <b>$1</b> δεν υποστηρίζεται από το Special:AllMessages σε αυτό τον ιστοχώρο.',
+'allmessagesnotsupportedDB' => 'Special:Το AllMessages δεν υποστηρίζεται επειδή το wgUseDatabaseMessages είναι απενεργοποιημένο.',
+
+
+# Thumbnails
+#------------------#
+'thumbnail-more' => 'Μεγέθυνση',
+'missingimage' => '<b>Αγνοούμενη εικόνα</b><br /><i>$1</i>',
+'filemissing' => 'Αγνοούμενο αρχείο',
+
+
+# Special:Import
+#----------------------#
+'import' => 'Εισαγωγή σελίδων',
+'importinterwiki' => 'Εισαγωγή από άλλο Wiki',
+'importtext' => 'Παρακαλούμε εξάγετε το αρχείο από το πηγαίο Wiki (χρησιμοποιώντας Special:Export), αποθηκεύστε το στο δίσκο του υπολογιστή σας και φορτώστε το από εκεί.',
+'importfailed' => 'Η εισαγωγή απέτυχε: $1',
+'importnotext' => 'Κενό (-ή) ή χωρίς κείμενο',
+'importsuccess' => 'Η εισαγωγή επέτυχε!',
+'importhistoryconflict' => 'Υπάρχει αντιφατικό ιστορικό αναθεωρήσεων (μπορεί να έχετε κάνει παλιότερα  εισαγωγή αυτής της σελίδας).',
+'importnosources' => 'Δεν έχουν καθοριστεί πηγές για την εισαγωγή από άλλο Wiki και η απευθείας φόρτωση στο ιστορικό έχει απενεργοποιηθεί.',
+
+
+# Keyboard access keys for power users
+#------------------------------------------------------------#
+'accesskey-search' => 'f',
+'accesskey-minoredit' => 'i',
+'accesskey-save' => 's',
+'accesskey-preview' => 'p',
+'accesskey-diff' => 'v',
+'accesskey-compareselectedversions' => 'v',
+
+
+# Tooltip help for some actions, most are in Monobook.js
+#--------------------------------------------------------------------------------------#
+'tooltip-search' => 'Αναζήτηση στο Wiki',
+'tooltip-minoredit' => 'Χαρακτηρήστε τις αλλαγές "μικρής κλίμακας"',
+'tooltip-save' => 'Αποθήκευση αλλαγών',
+'tooltip-preview' => 'Προεπισκόπηση - Παρακαλούμε να χρησιμοποιήτε αυτή την επιλογή πριν αποθηκεύσετε τις αλλαγές σας!',
+'tooltip-diff' => 'Προβολή των αλλαγών που κάνατε στο κείμενο.',
+'tooltip-compareselectedversions' => 'Εμφάνιση των διαφορών ανάμεσα στις δύο αναθεωρήσεις της σελίδας που έχετε επιλέξει.',
+'tooltip-watch' => 'Προσθήκη της σελίδας στη λίστα παρακολούθησης',
+
+
+# stylesheets
+#-------------------#
+'monobook.css' => '/* edit this file to customize the monobook skin for the entire site */',
+#'monobook.js' => '/* Deprecated; use [[MediaWiki:common.js]] */',
+
+
+# Metadata
+#---------------#
+'nodublincore' => 'Τα μεταδεδομένα RDF που αφορούν στο Dublin Core έχουν απενεργοποιηθεί σε αυτό τον server.',
+'nocreativecommons' => 'Τα μεταδεδομένα RDF που αφορούν στο Creative Commons έχουν απενεργοποιηθεί σε αυτό τον server.',
+'notacceptable' => 'Ο server του Wiki δεν μπορεί να αποδόσει δεδομένα σε μορφή που τα διαβάζει ο client',
+
+
+# Attribution
+#-----------------#
+'anonymous' => 'Ανώνυμος(-οι) χρήστης(-ες) του {{SITENAME}}',
+'siteuser' => '{{SITENAME}} χρήστης $1',
+'lastmodifiedatby' => 'Η σελίδα αυτή τροποποιήθηκε τελευταία φορά στις  $2, $1 από το χρήστη $3.',
+'and' => 'και',
+'othercontribs' => 'Βασισμένο στη δουλειά του/της $1',
+'others' => 'άλλοι',
+'siteusers' => '{{SITENAME}} χρήστης (-ες) $1',
+'creditspage' => 'Αναγνώριση συνεισφοράς στη σελίδα',
+'nocredits' => 'Δεν υπάρχουν πληροφορίες σχετικά με την αναγνώριση συνεισφοράς σε αυτή τη σελίδα.',
+
+
+# Spam protection
+#--------------------------#
+'spamprotectiontitle' => 'Φίλτρο προστασίας από spam',
+'spamprotectiontext' => 'Η σελίδα που επιχειρήσατε να αποθηκεύσετε απομονώθηκε από το φίλτρο spam. Αυτό οφείλεται, πιθανότατα, στην ύπαρξη ενός (ή περισσότερων) συνδέσμων προς εξωτερικές σελίδες.',
+'spamprotectionmatch' => 'Το φίλτρο spam έχει τεθεί σε ενέργεια εξ αιτίας του εξής κειμένου: $1',
+'subcategorycount' => 'Υπάρχουν $1 υποκατηγορίες σε αυτή την κατηγορία.',
+'categoryarticlecount' => 'Υπάρχουν $1 άρθρα σε αυτή την κατηγορία.',
+
+
+'listingcontinuesabbrev' => 'συνεχίζεται...',
+
+
+# Info page
+#---------------#
+'infosubtitle' => 'Πληροφορίες για τη σελίδα',
+'numedits' => 'Αριθμός επεξεργασιών (στο άρθρο): $1',
+'numtalkedits' => 'Αριθμός επεξεργασιών (στη σελίδα συζήτησης): $1',
+'numwatchers' => 'Αριθμός παρακολουθήσεων: $1',
+'numauthors' => 'Αριθμός διακριτών συγγραφέων (στο άρθρο): $1',
+'numtalkauthors' => 'Αριθμός διακριτών συγγραφέων (στη σελίδα συζήτησης): $1',
+
+
+# Math options
+#---------------------#
+'mw_math_png' => 'Απόδοση πάντα σε PNG',
+'mw_math_simple' => 'HTML αν είναι αρκετά απλό, διαφορετικά PNG',
+'mw_math_html' => 'HTML αν είναι δυνατόν, διαφορετικά PNG',
+'mw_math_source' => 'Να παραμείνει ως TeX (για text browsers)',
+'mw_math_modern' => 'Προτεινόμενο για σύγχρονους browser',
+'mw_math_mathml' => 'MathML όποτε είναι δυνατόν (πειραματικό)',
+
+
+# Patrolling
+#--------------#
+'markaspatrolleddiff' => 'Να σημειωθεί \'υπό παρακολούθηση\'',
+'markaspatrolledtext' => 'Να σημειωθεί αυτό το άρθρο ως \'υπό παρακολούθηση\'.',
+'markedaspatrolled' => 'Σημειωμένο ως \'υπό παρακολούθηση\'',
+'markedaspatrolledtext' => 'Η αναθεώρηση που έχει επιλεγεί έχει σημειωθεί ως \'υπό παρακολούθηση\'.',
+'rcpatroldisabled' => 'Η λειτουργία \'Παρακολούθηση Πρόσφατων Αλλαγών\' έχει απενεργοποιηθεί.',
+'rcpatroldisabledtext' => 'Η λειτουργία \'Παρακολούθηση Πρόσφατων Αλλαγών\' είναι αυτή τη στιγμή απενεργοποιημένη.',
+
+
+# Monobook.js: tooltips and access keys for monobook
+#------------------------------------------------------------------------------------#
+'monobook.js' => '/* Deprecated; use [[MediaWiki:common.js]] */',
+
+'accesskey-pt-userpage' => '.',
+'tooltip-pt-userpage' => 'Η προσωπική μου σελίδα στο Wiκi',
+'accesskey-pt-anonuserpage' => '.',
+'tooltip-pt-anonuserpage' => 'Η σελίδα χρήστη στον οποίο αντιστοιχεί η διεύθυνση IP που έχετε',
+'accesskey-pt-mytalk' => 'n',
+'tooltip-pt-mytalk' => 'Η σελίδα συζητήσεών μου',
+'accesskey-pt-anontalk' => 'n',
+'tooltip-pt-anontalk' => 'Συζήτηση σχετικά με τις αλλαγές που έγιναν από αυτή τη διεύθυνση IP',
+'accesskey-pt-preferences' => '',
+'tooltip-pt-preferences' => 'Οι προτιμήσεις μου',
+'accesskey-pt-watchlist' => 'l',
+'tooltip-pt-watchlist' => 'Η λίστα με τις σελίδες που παρακολουθείτε για αλλαγές',
+'accesskey-pt-mycontris' => 'y',
+'tooltip-pt-mycontris' => 'Κατάλογος των συνεισφορών μου',
+'accesskey-pt-login' => 'o',
+'tooltip-pt-login' => 'Σας προτείνουμε να συνδεθείτε παρόλο που δεν είναι αναγκαίο.',
+'accesskey-pt-anonlogin' => 'o',
+'tooltip-pt-anonlogin' => 'Σας προτείνουμε να συνδεθείτε παρόλο που δεν είναι αναγκαίο.',
+'accesskey-pt-logout' => '',
+'tooltip-pt-logout' => 'Αποσύνδεση',
+'accesskey-ca-talk' => 't',
+'tooltip-ca-talk' => 'Συζήτηση για το παρόν άρθρο',
+'accesskey-ca-edit' => 'e',
+'tooltip-ca-edit' => 'Μπορείτε να επεξεργαστείτε αυτό το άρθρο. Χρησιμοποιείστε την "Προεπισκόπηση',
+'accesskey-ca-addsection' => '+',
+'tooltip-ca-addsection' => 'Προσθέστε σχόλιο στη συζήτηση.',
+'accesskey-ca-viewsource' => 'e',
+'tooltip-ca-viewsource' => 'Αυτό το άρθρο είναι κλειδωμένο. Μπορείτε να δείτε τον πηγαίο κώδικά του.',
+'accesskey-ca-history' => 'h',
+'tooltip-ca-history' => 'Παλιές αναθεωρήσεις του άρθρου.',
+'accesskey-ca-protect' => '=',
+'tooltip-ca-protect' => 'Κλείδωμα αυτού του άρθρου',
+'accesskey-ca-delete' => 'd',
+'tooltip-ca-delete' => 'Διαγραφή αυτής της σελίδας',
+'accesskey-ca-undelete' => 'd',
+'tooltip-ca-undelete' => 'Αποκαταστήστε τις αλλαγές που έγιναν σε αυτή τη σελίδα πριν διαγραφεί.',
+'accesskey-ca-move' => 'm',
+'tooltip-ca-move' => 'Μετακινήστε αυτή τη σελίδα',
+'accesskey-ca-nomove' => '',
+'tooltip-ca-nomove' => 'Δεν έχετε εξουσιοδότηση να μετακινήσετε αυτή τη σελίδα.',
+'accesskey-ca-watch' => 'w',
+'tooltip-ca-watch' => 'Προσθήκη της σελίδας στη λίστα παρακολούθησης',
+'accesskey-ca-unwatch' => 'w',
+'tooltip-ca-unwatch' => 'Αφαίρεση της σελίδας από τη λίστα παρακολούθησης',
+'accesskey-search' => 'f',
+'tooltip-search' => 'Αναζήτηση στο WiKi',
+'accesskey-p-logo' => '',
+'tooltip-p-logo' => 'Αρχική σελίδα',
+'accesskey-n-mainpage' => 'z',
+'tooltip-n-mainpage' => 'Δείτε την Αρχική σελίδα',
+'accesskey-n-portal' => '',
+'tooltip-n-portal' => 'Σχετικά με το Wiκi - πώς μπορείτε να βοηθήσετε, πού μπορείτε να απευθυνθείτε',
+'accesskey-n-currentevents' => '',
+'tooltip-n-currentevents' => 'Πληροφορίες για πρόσφατα γεγονότα',
+'accesskey-n-recentchanges' => 'r',
+'tooltip-n-recentchanges' => 'Η λίστα με τις πρόσφατες αλλαγές στο WiKi',
+'accesskey-n-randompage' => 'x',
+'tooltip-n-randompage' => 'Επισκεφθείτε μια τυχαία σελίδα του Wiκi',
+'accesskey-n-help' => '',
+'tooltip-n-help' => 'Το μέρος για να βρείτε τις απαντήσεις που ψάχνετε.',
+'accesskey-n-sitesupport' => '',
+'tooltip-n-sitesupport' => 'Βοηθήστε το έργο.',
+'accesskey-t-whatlinkshere' => 'j',
+'tooltip-t-whatlinkshere' => 'Λίστα από άρθρα που αναφέρουν το παρόν άρθρο',
+'accesskey-t-recentchangeslinked' => 'k',
+'tooltip-t-recentchangeslinked' => 'Πρόσφατες αλλαγές σε άρθρα που συνδέονται με το παρόν',
+'accesskey-feed-rss' => '',
+'tooltip-feed-rss' => 'RSS feed για',
+'accesskey-feed-atom' => '',
+'tooltip-feed-atom' => 'Atom feed για',
+'accesskey-t-contributions' => '',
+'tooltip-t-contributions' => 'Δείτε τη λίστα με τις συνεισφορές αυτού του χρήστη στο Wiκi',
+'accesskey-t-emailuser' => '',
+'tooltip-t-emailuser' => 'Αποστολή μηνύματος σε αυτό το χρήστη',
+'accesskey-t-upload' => 'u',
+'tooltip-t-upload' => 'Φόρτωση εικόνας ή αρχείου πολυμέσων',
+'accesskey-t-specialpages' => 'q',
+'tooltip-t-specialpages' => 'Η λίστα με όλες τις σελίδες λειτουργιών',
+'accesskey-ca-nstab-main' => 'c',
+'tooltip-ca-nstab-main' => 'Άρθρο',
+'accesskey-ca-nstab-user' => 'c',
+'tooltip-ca-nstab-user' => 'Δείτε τη σελίδα του χρήστη',
+'accesskey-ca-nstab-media' => 'c',
+'tooltip-ca-nstab-media' => 'Δείτε τη σελίδα πολυμέσων',
+'accesskey-ca-nstab-special' => '',
+'tooltip-ca-nstab-special' => 'Αυτή είναι ειδική σελίδα και δεν μπορείτε να την επεξεργαστείτε.',
+'accesskey-ca-nstab-project' => 'a',
+'tooltip-ca-nstab-project' => 'Δείτε τη σελίδα του συστήματος',
+'accesskey-ca-nstab-image' => 'c',
+'tooltip-ca-nstab-image' => 'Δείτε την εικόνα',
+'accesskey-ca-nstab-mediawiki' => 'c',
+'tooltip-ca-nstab-mediawiki' => 'Δείτε το μήνυμα του συστήματος',
+'accesskey-ca-nstab-template' => 'c',
+'tooltip-ca-nstab-template' => 'Δείτε το πρότυπο',
+'accesskey-ca-nstab-help' => 'c',
+'tooltip-ca-nstab-help' => 'Δείτε τη σελίδα βοήθειας',
+'accesskey-ca-nstab-category' => 'c',
+'tooltip-ca-nstab-category' => 'Δείτε τη σελίδα κατηγοριών',
+
+
+# image deletion
+#------------------------#
+'deletedrevision' => 'Η παλιά έκδοση της $1 διαγράφτηκε.',
+
+
+# browsing diffs
+#----------------------#
+'previousdiff' => '&larr; Δείτε την προηγούμενη \'διαφορά\'',
+'nextdiff' => 'Μετάβαση στην επόμενη \'διαφορά\' &rarr;',
+
+'imagemaxsize' => 'Περιορισμός του μεγέθους των εικόνων (στις σελίδες περιγραφής εικόνων) σε:',
+'thumbsize'	=> 'Μεγεθος μινιατούρας:',
+'showbigimage' => 'Κατέβασμα του αρχείου υψηλής ανάλυσης ($1x$2, $3 KB)',
+
+'newimages' => 'Πινακοθήκη νέων εικόνων',
+'noimages' => 'Δεν υπάρχουν εικόνες.',
+
+
+# short names for language variants used for language conversion links.
+# to disable showing a particular link, set it to 'disable', e.g.
+# 'variantname-zh-sg' => 'disable',
+'variantname-zh-cn' => 'cn',
+'variantname-zh-tw' => 'tw',
+'variantname-zh-hk' => 'hk',
+'variantname-zh-sg' => 'sg',
+'variantname-zh' => 'zh',
+
+
+# labels for User: and Title: on Special:Log pages
+#--------------------------------------------------------------------------#
+'specialloguserlabel' => 'Χρήστης:',
+'speciallogtitlelabel' => 'Τίτλος:',
+'passwordtooshort' => 'Ο κωδικός σας είναι πολύ σύντομος. Πρέπει να περιέχει τουλάχιστον $1 χαρακτήρες.',
+
+# Media Warning
+#-----------------------#
+'mediawarning' => '\'\'\'Προειδοποίηση\'\'\': Το αρχείο αυτό μπορεί να περιέχει κακοπροαίρετο κώδικα που μπορεί να βλάψει το σύστημα του υπολογιστή σας.
+
+<hr />',
+
+'fileinfo' => '$1KB, MIME type: <code>$2</code>',
+
+# Metadata
+#---------------#
+'metadata' => 'Μεταδεδομένα',
+
+
+# Exif tags
+#-------------#
+'exif-imagewidth' => 'Πλάτος',
+'exif-imagelength' => 'Υψος',
+'exif-bitspersample' => 'Bits ανά στοιχείο',
+'exif-compression' => 'Σχήμα συμπίεσης',
+'exif-photometricinterpretation' => 'Σύνθεση των pixel',
+'exif-orientation' => 'Προσαντολισμός',
+'exif-samplesperpixel' => 'Αριθμός στοιχείων',
+'exif-planarconfiguration' => 'Διάταξη δεδομένων',
+'exif-ycbcrsubsampling' =>'Αναλογικό δείγμα σε φωτεινότητα και χρώμα',
+'exif-ycbcrpositioning' =>'Ρύθμιση φωτεινότητας και χρώματος',
+'exif-xresolution' => 'Οριζόντια ανάλυση',
+'exif-yresolution' => 'Κατακόρυφη ανάλυση',
+'exif-resolutionunit' => 'Μονάδα μέτρησης ανάλυσης X και Y',
+'exif-stripoffsets' => 'Τοποθέτηση δεδομένων εικόνας',
+'exif-rowsperstrip' =>'Αριθμός σειρών ανά λωρίδα',
+'exif-stripbytecounts' =>'Bytes ανά συμπιεσμένη λωρίδα',
+'exif-jpeginterchangeformat' => 'Μετάθεση σε JPEG SOI',
+'exif-jpeginterchangeformatlength' => 'Bytes δεδομένων JPEG',
+'exif-transferfunction' => 'Λειτουργία μεταφοράς',
+'exif-whitepoint' =>'Χρωματικός προσδιορισμός λευκού',
+'exif-primarychromaticities' =>'Πρωτεύοντες χρωματισμοί',
+'exif-ycbcrcoefficients' =>'Συντελεστές μητρών μετασχηματισμού χρώματος',
+'exif-referenceblackwhite' => 'Ζεύγος μαύρων και άσπρων αξιών αναφοράς',
+'exif-datetime' => 'Δηλώστε την ημερομηνία και την ώρα της επεξεργασίας.',
+'exif-imagedescription' => 'Τίτλος εικόνας',
+'exif-make' => 'Κατασκευαστής φωτογραφικής μηχανής',
+'exif-model' => 'Μοντέλο φωτογραφικής μηχανής',
+'exif-software' => 'Λογισμικό που χρησιμοποιήθηκε',
+'exif-artist' => 'Δημιουργός',
+'exif-copyright' => 'Ιδιοκτήτης του copyright',
+'exif-exifversion' => 'Έκδοση exif',
+'exif-flashpixversion' => 'Υποστηριζόμενη έκδοση Flashpix',
+'exif-colorspace' => 'Χρωματική περιοχή',
+'exif-componentsconfiguration' => 'Νόημα του κάθε στοιχείου',
+'exif-compressedbitsperpixel' => 'Κατάσταση συμπίεσης εικόνας',
+'exif-pixelydimension' => 'Έγκυρο πλάτος εικόνας',
+'exif-pixelxdimension' => 'Έγκυρο ύψος εικόνας',
+'exif-makernote' => 'Σημειώσεις του κατασκευαστή',
+'exif-usercomment' => 'Σχόλια χρήστη',
+'exif-relatedsoundfile' => 'Σχετικό αρχείο ήχου',
+'exif-datetimeoriginal' => 'Ημερομηνία και ώρα της παραγωγής ψηφιακών δεδομένων',
+'exif-datetimedigitized' => 'Ημερομηνία και ώρα της μετατροπής σε ψηφιακή μορφή',
+#'exif-subsectime' =>'DateTime subseconds',
+#'exif-subsectimeoriginal' =>'DateTimeOriginal subseconds',
+#'exif-subsectimedigitized' =>'DateTimeDigitized subseconds',
+'exif-exposuretime' => 'Χρόνος έκθεσης',
+'exif-fnumber' => 'Αριθμός F',
+'exif-exposureprogram' => 'Πρόγραμμα έκθεσης',
+'exif-spectralsensitivity' => 'Ευαισθησία φάσματος',
+'exif-isospeedratings' => 'Βαθμολόγηση ταχύτητας ISO',
+'exif-oecf' => 'Οπτικοηλεκτρονικός συντελεστής μετατροπής',
+'exif-shutterspeedvalue' => 'Ταχύτητα κλείστρου',
+'exif-aperturevalue' => 'Διάφραγμα',
+'exif-brightnessvalue' => 'Φωτεινότητα',
+'exif-exposurebiasvalue' => 'Προτεραιότητα έκθεσης',
+'exif-maxaperturevalue' => 'Μέγιστο διάφραγμα ξηράς',
+'exif-subjectdistance' => 'Απόσταση αντικειμένου',
+'exif-meteringmode' => 'Κατάσταση λειτουργίας φωτόμετρου',
+'exif-lightsource' => 'Πηγή φωτός',
+'exif-flash' => 'Φλας',
+'exif-focallength' => 'Εστιακή απόσταση του φακού',
+'exif-subjectarea' => 'Θεματική περιοχή',
+'exif-flashenergy' => 'Ενέργεια του φλας',
+'exif-spatialfrequencyresponse' =>'Χωρική απόκριση συχνότητας',
+'exif-focalplanexresolution' => 'Ανάλυση εστιακού επιπέδου Χ',
+'exif-focalplaneyresolution' => 'Ανάλυση εστιακού πειπέδου Υ',
+'exif-focalplaneresolutionunit' => 'Μονάδα μέτρησης ανάλυσης εστιακού επιπέδου',
+'exif-subjectlocation' => 'Τοποθέτηση του αντικειμένου',
+'exif-exposureindex' => 'Δείκτης έκθεσης',
+'exif-sensingmethod' => 'Μέθοδος αισθητήρα',
+'exif-filesource' => 'Πηγή αρχείου',
+'exif-scenetype' => 'Τύπος σκηνής',
+'exif-cfapattern' => 'CFA pattern',
+'exif-customrendered' => 'Ειδική επεξεργασία εικόνας',
+'exif-exposuremode' => 'Κατάσταση λειτουργίας έκθεσης',
+'exif-whitebalance' => 'Ισορροπία των λευκών',
+'exif-digitalzoomratio' => 'Αναλογία ψηφιακού zoom',
+'exif-focallengthin35mmfilm' => 'Εστιακή απόσταση σε φιλμ 35 mm',
+'exif-scenecapturetype' => 'Τύπος σύλληψης της σκηνής',
+'exif-gaincontrol' => 'Έλεγχος πεδίου',
+'exif-contrast' => 'Αντίθεση',
+'exif-saturation' => 'Κορεσμός',
+'exif-sharpness' => 'Όξυνση',
+'exif-devicesettingdescription' => 'Περιγραφή των ρυθμίσεων του μηχανήματος',
+'exif-subjectdistancerange' => 'Περιοχή διακύμανσης της απόστασης του αντικειμένου',
+'exif-imageuniqueid' => 'Μονοσήμαντη ταυτοποίηση εικόνας',
+'exif-gpsversionid' => 'Έκδοση με GPS tag',
+'exif-gpslatituderef' => 'Βόρειο ή Νότιο γεωγραφικό πλάτος',
+'exif-gpslatitude' => 'Γεωγραφικό πλάτος',
+'exif-gpslongituderef' => 'Ανατολικό ή Δυτικό γεωγραφικό μήκος',
+'exif-gpslongitude' => 'Γεωγραφικό μήκος',
+'exif-gpsaltituderef' => 'Αναφορές υψομέτρου',
+'exif-gpsaltitude' => 'Υψόμετρο',
+'exif-gpstimestamp' => 'Ώρα GPS (ατομικό ρολόι)',
+'exif-gpssatellites' => 'Δορυφόροι που χρησιμοποιήθηκαν για τις μετρήσεις',
+'exif-gpsstatus' => 'Κατάσταση δέκτη',
+'exif-gpsmeasuremode' => 'Τρόπος λειτουργίας μετρήσεων',
+'exif-gpsdop' => 'Ακρίβεια μέτρησης',
+'exif-gpsspeedref' => 'Μονάδα μέτρησης ταχύτητας',
+'exif-gpsspeed' => 'Ταχύτητα δέκτη GPS',
+'exif-gpstrackref' => 'Αναφορές για την κατεύθυνση της κίνησης',
+'exif-gpstrack' => 'Κατεύθυνση κίνησης',
+'exif-gpsimgdirectionref' => 'Αναφορές για την κατεύθυνση της εικόνας',
+'exif-gpsimgdirection' => 'Κατεύθυνση της εικόνας',
+'exif-gpsmapdatum' => 'Στοιχεία γεωδετικών μετρήσεων ΄που έχουν χρησιμοποιηθεί',
+'exif-gpsdestlatituderef' => 'Αναφορές για το γεωγραφικό πλάτος του προορισμού',
+'exif-gpsdestlatitude' => 'Αναφορές γεωγραφικού πλάτους',
+'exif-gpsdestlongituderef' => 'Αναφορές για το γεωγραφικό μήκος του προορισμού',
+'exif-gpsdestlongitude' => 'Γεωγραφικό πλάτος προορισμού',
+'exif-gpsdestbearingref' => 'Αναφορές για τις συντεταγμένες προορισμού',
+'exif-gpsdestbearing' => 'Συντεταγμένες προορισμού',
+'exif-gpsdestdistanceref' => 'Αναφορές για την απόσταση μέχρι τον προορισμό',
+'exif-gpsdestdistance' => 'Απόσταση μέχρι τον προορισμό',
+'exif-gpsprocessingmethod' => 'Όνομα μεθόδου επεξεργασίας GPS',
+'exif-gpsareainformation' => 'Όνομα περιοχής GPS',
+'exif-gpsdatestamp' => 'Ημερομηνία GPS',
+'exif-gpsdifferential' => 'Διαφορική διόρθωση GPS',
+
+'exif-compression-1' => 'Έχει αποσυμπιεστεί.',
+'exif-compression-6' => 'JPEG',
+
+'exif-photometricinterpretation-6' => 'YCbCr',
+
+'exif-orientation-1' => 'Φυσικός', // 0th row: top; 0th column: left
+'exif-orientation-2' => 'Έχει αντιστραφεί οριζόντια.', // 0th row: top; 0th column: right
+'exif-orientation-3' => 'Έχει περιστραφεί κατά 180° μοίρες.', // 0th row: bottom; 0th column: right
+'exif-orientation-4' => 'Έχει αντιστραφεί κατακόρυφα.', // 0th row: bottom; 0th column: left
+'exif-orientation-5' => 'Έχει περιστραφεί κατά 90° μοίρες με φορά αντίθετα προς τη φορά των δεικτών του ρολογιού και έχει αντιστραφεί κατακόρυφα.', // 0th row: left; 0th column: top
+'exif-orientation-6' => 'Έχει περιστραφεί κατά 90° μοίρες κατά τη φορά των δεικτών του ρολογιού.', // 0th row: right; 0th column: top
+'exif-orientation-7' => 'Έχει περιστραφεί κατά 90° μοίρες κατά τη φορά των δεικτών του ρολογιού και έχει αντιστραφεί κατακόρυφα.',  // 0th row: right; 0th column: bottom
+'exif-orientation-8' => 'Έχει περιστραφή κατά 90° μοίρες αντίθετα προς τη φορά των δεικτών του ρολογιού.', // 0th row: left; 0th column: bottom
+
+'exif-planarconfiguration-1' => 'πεπλατυσμένος σχηματισμός',
+'exif-planarconfiguration-2' => 'επίπεδος σχηματισμός',
+
+'exif-xyresolution-i' => '$1 dpi',
+'exif-xyresolution-c' => '$1 dpc',
+
+'exif-colorspace-1' => 'sRGB',
+'exif-colorspace-ffff.h' => 'FFFF.H',
+'exif-componentsconfiguration-0' => 'δεν υπάρχει',
+'exif-componentsconfiguration-1' => 'Y',
+'exif-componentsconfiguration-2' => 'Cb',
+'exif-componentsconfiguration-3' => 'Cr',
+'exif-componentsconfiguration-4' => 'R',
+'exif-componentsconfiguration-5' => 'G',
+'exif-componentsconfiguration-6' => 'B',
+
+'exif-exposureprogram-0' => 'Δεν έχει προκαθοριστεί',
+'exif-exposureprogram-1' => 'Χειροκίνητο',
+'exif-exposureprogram-2' => 'Κανονικό πρόγραμμα',
+'exif-exposureprogram-3' => 'Προτεραιότητα διαφράγματος',
+'exif-exposureprogram-4' => 'Προτεραιότητα κλείστρου',
+'exif-exposureprogram-5' => 'Δημιουργικό πρόγραμμα (με προτεραιότητα το βάθος πεδίου)',
+'exif-exposureprogram-6' => 'Δημιουργικό πρόγραμμα (με προτεραιόττηα την ταχύτητα του κλείστρου)',
+'exif-exposureprogram-7' => 'Επιλογή λειτουργίας "πορτραίτου" (για φωτογραφίες closeup με το φόντο εκτός εστίασης)',
+'exif-exposureprogram-8' => 'Επιλογή λειτουργίας "τοπίου" (για φωτογραφίες τοπίου με εστιασμένο φόντο)',
+
+'exif-subjectdistance-value' => '$1 μέτρα',
+'exif-meteringmode-0' => 'Άγνωστη',
+'exif-meteringmode-1' => 'Μέση τιμή',
+'exif-meteringmode-2' => 'Μέση τιμή με έμφαση στο κέντρο',
+'exif-meteringmode-3' => 'Ένα σημείο',
+'exif-meteringmode-4' => 'Πολλά σημεία',
+'exif-meteringmode-5' => 'Μοτίβο',
+'exif-meteringmode-6' => 'Μερική',
+'exif-meteringmode-255' => 'Άλλο',
+'exif-lightsource-0' => 'Άγνωστη',
+'exif-lightsource-1' => 'Φως ημέρας',
+'exif-lightsource-2' => 'Φωσφορίζον',
+'exif-lightsource-3' => 'Tungsten (φωτισμός από λυχνίες πυράκτωσης)',
+'exif-lightsource-4' => 'Φλας',
+'exif-lightsource-9' => 'Αίθριος καιρός',
+'exif-lightsource-10' => 'Συννεφιά',
+'exif-lightsource-11' => 'Σκιά',
+'exif-lightsource-12' => 'Φως ημέρας φωσφορίζον (D 5700 – 7100K)',
+'exif-lightsource-13' => 'Λευκό φως ημέρας  (N 4600 – 5400K)',
+'exif-lightsource-14' => 'Κρύο λευκό φως fluorescent (W 3900 – 4500K)',
+'exif-lightsource-15' => 'Λευκό φως φωσφορίζον (WW 3200 – 3700K)',
+'exif-lightsource-17' => 'Τυποποιημένος φωτισμός A',
+'exif-lightsource-18' => 'Τυποποιημένος φωτισμός B',
+'exif-lightsource-19' => 'Τυποποιημένος φωτισμός C',
+'exif-lightsource-20' => 'D55',
+'exif-lightsource-21' => 'D65',
+'exif-lightsource-22' => 'D75',
+'exif-lightsource-23' => 'D50',
+#'exif-lightsource-24' => 'ISO studio tungsten',
+'exif-lightsource-255' => 'Άλλη πηγή φωτός',
+
+'exif-focalplaneresolutionunit-2' => 'ίντσες',
+
+'exif-sensingmethod-1' => 'Δεν έχει καθοριστεί',
+'exif-sensingmethod-2' => 'One-chip color area sensor',
+'exif-sensingmethod-3' => 'Two-chip color area sensor',
+'exif-sensingmethod-4' => 'Three-chip color area sensor',
+'exif-sensingmethod-5' => 'Color sequential area sensor',
+'exif-sensingmethod-7' => 'Trilinear sensor',
+'exif-sensingmethod-8' => 'Color sequential linear sensor',
+
+'exif-filesource-3' => 'DSC',
+'exif-scenetype-1' => 'Εικόνα που φωτογραφήθηκε απ` ευθείας',
+
+'exif-customrendered-0' => 'Κανονική επεξεργασία',
+'exif-customrendered-1' => 'Ειδική επεξεργασία',
+
+'exif-exposuremode-0' => 'Αυτόματη έκθεση',
+'exif-exposuremode-1' => 'Χειροκίνητη έκθεση',
+'exif-exposuremode-2' => 'Αυτόματο bracket',
+
+'exif-whitebalance-0' => 'Αυτόματη ισορροπία των λευκών',
+'exif-whitebalance-1' => 'Χειροκίνητη ισορροπία των λευκών',
+
+'exif-scenecapturetype-0' => 'Συνήθης',
+'exif-scenecapturetype-1' => 'Τοπίο',
+'exif-scenecapturetype-2' => 'Πορτραίτο',
+'exif-scenecapturetype-3' => 'Νυκτερινή σκηνή',
+
+'exif-gaincontrol-0' => 'Κανένα',
+'exif-gaincontrol-1' => 'Χαμηλό κέρδος επάνω',
+'exif-gaincontrol-2' => 'Υψηλό κέρδος επάνω',
+'exif-gaincontrol-3' => 'Χαμηλό κέρδος κάτω',
+'exif-gaincontrol-4' => 'Υψηλό κέρδος κατω',
+
+'exif-contrast-0' => 'Φυσικό',
+'exif-contrast-1' => 'Απαλό',
+'exif-contrast-2' => 'Ισχυρό',
+
+'exif-saturation-0' => 'Φυσικός',
+'exif-saturation-1' => 'Χαμηλός κορεσμός',
+'exif-saturation-2' => 'Υψηλός κορεσμός',
+
+'exif-sharpness-0' => 'Φυσική',
+'exif-sharpness-1' => 'Απαλή',
+'exif-sharpness-2' => 'Σκληρή',
+
+'exif-subjectdistancerange-0' => 'Άγνωστη',
+'exif-subjectdistancerange-1' => 'Macro',
+'exif-subjectdistancerange-2' => 'Κοντινή λήψη',
+'exif-subjectdistancerange-3' => 'Μακρίνή λήψη',
+
+// Pseudotags used for GPSLatitudeRef and GPSDestLatitudeRef
+'exif-gpslatitude-n' => 'Βόρειο γεωγραφικό πλάτος',
+'exif-gpslatitude-s' => 'Νότιο γεωγραφικό πλάτος',
+
+// Pseudotags used for GPSLongitudeRef and GPSDestLongitudeRef
+'exif-gpslongitude-e' => 'Ανατολικό γεωγραφικό μήκος',
+'exif-gpslongitude-w' => 'Δυτικό γεωγραφικό μήκος',
+
+'exif-gpsstatus-a' => 'Μέτρηση εν εξελίξει',
+'exif-gpsstatus-v' => 'Διαλειτουργικότητα μετρήσεων',
+
+'exif-gpsmeasuremode-2' => 'μέτρηση δύο διαστάσεων',
+'exif-gpsmeasuremode-3' => 'μέτρηση τριών διαστάσεων',
+
+// Pseudotags used for GPSSpeedRef and GPSDestDistanceRef
+'exif-gpsspeed-k' => 'Χιλιόμετρα/ώρα',
+'exif-gpsspeed-m' => 'Μίλια/ώρα',
+'exif-gpsspeed-n' => 'Κόμβοι',
+
+// Pseudotags used for GPSTrackRef, GPSImgDirectionRef and GPSDestBearingRef
+'exif-gpsdirection-t' => 'Πραγματική κατεύθυνση',
+'exif-gpsdirection-m' => 'Μαγνητική κατεύθυνση',
+
+
+# external editor support
+#-------------------------------------#
+'edit-externally' => 'Επεξεργαστείτε το συγκεκριμένο αρχείο χρησιμοποιώντας μια από τις εξωτερικές εφαρμογές.',
+'edit-externally-help' => 'Για περισσότερες πληροφορίες ακολουθήστε το σύνδεσμο: [http://meta.wikimedia.org/wiki/Help:External_editors setup instructions].',
+
+
+# 'all' in various places, this might be different for inflected languages
+#---------------------------------------------------------------------------------------------------------#
+'recentchangesall' => 'όλες',
+'imagelistall' => 'όλες',
+'watchlistall1' => 'όλες',
+'watchlistall2' => 'όλες',
+
+
+# E-mail address confirmation
+#--------------------------------------------#
+'confirmemail' => 'Επαλήθευση διεύθυνσης e-mail',
+
+'confirmemail_text' => 'Το σύστημα χρειάζεται να επαληθεύσει τη διεύθυνση e-mail που δώσατε για να χρησιμοποιήσετε τις δυνατότητες αλληλογραφίας. Κάνετε κλικ στο παρακάτω κουμπί και θα σας αποσταλεί μήνυμα επαλήθευσης στη διεύθυνσή σας. Στο μήνυμα αυτό θα εμφανίζεται ένας σύνδεσμος που Θα περιέχει τον κωδικό επαλήθευσης -ακολουθήστε το σύνδεσμο αυτό για να μπορέσει το σύστημα να επαληθεύσει τη διεύθυνση αλληλογραφίας σας.',
+
+'confirmemail_send' => 'Αποστολή κωδικού επαλήθευσης με e-mail .',
+'confirmemail_sent' => 'Το μήνυμα επαλήθευσης έχει σταλεί, ελέγξτε την αλληλογραφία σας.',
+'confirmemail_sendfailed' => 'Δεν ήταν δυνατή η αποστολή του μηνύματος επαλήθευσης. Ελέγξτε την ηλεκτρονική διεύθυνση που συμπληρώσατε για πιθανά λάθη πληκτρολόγησης.',
+'confirmemail_invalid' => 'Λάθος κωδικός επαλήθευσης. Είναι πιθανόν ο κωδικός σας να έχει λήξει.',
+'confirmemail_success' => 'Η ηλεκτρονική σας διεύθυνση σας επαληθεύτηκε. Μπορείτε πλέον να συνδεθείτε και να απολαύσετε τις δυνατότητες του Wiκi.',
+'confirmemail_loggedin' => 'Η ηλεκτρονική σας διεύθυνση επαληθεύτηκε.',
+'confirmemail_error' => 'Παρουσιάστηκε λάθος κατά την αποθήκευση των ρυθμίσεών σας.',
+'confirmemail_subject' => 'Επαλήθευση ηλεκτρονικής διεύθυνσης του {{SITENAME}}',
+
+'confirmemail_body' =>  'Κάποιος, πιθανόν εσείς από τη διεύθυνση IP $1, δημιούργησε στο {{SITENAME}} ένα λογαριασμό χρήστη "$2" με τη συγκεκριμένη ηλεκτρονική διεύθυνση.
+
+Για να επιβεβαιώσετε ότι αυτός ο λογαριασμός χρήστη ανήκει πραγματικά σε εσάς και για να ενεργοποιηθούν οι δυνατότητες e-mail του {{SITENAME}}, ακολουθήστε αυτό το σύνδεσμο:
+
+$3
+
+Αν ο χρήστης που δημιούργησε το συγκεκριμένο λογαριασμό δεν είστε εσείς, μην ακολουθήστε το σύνδεσμο. Ο κωδικός επιβεβαίωσης θα λήξει στις $4',
+
+
+
+# Inputbox extension, may be useful in other contexts as well
+#----------------------------------------------------------------------------------------------#
+'tryexact' => 'Δοκιμάστε την επακριβή αντιστοιχία.',
+'searchfulltext' => 'Αναζήτηση με το πλήρες κείμενο',
+'createarticle' => 'Δημιουργία άρθρου',
+
+
+# Scary transclusion
+#------------------------------#
+'scarytranscludedisabled' => '[Η ενσωμάτωση εξωτερικών ιστοσελίδων σε αυτό το Wiki είναι απενεργοποιημένη.]',
+'scarytranscludefailed' => '[Λυπούμαστε, η προσκόμιση προτύπου για το $1 απέτυχε.]',
+'scarytranscludetoolong' => '[Λυπούμαστε η διεύθυνση URL είναι πολύ μεγάλη.]',
+
+
+# Trackbacks
+#------------------#
+/*'trackbackbox' => '<div id=\'mw_trackbacks\'>
+Trackbacks for this article:<br />
+$1
+</div>',
+*/
+'trackbackremove' => ' ([$1΄- Διαγραφή])',
+'trackbacklink' => 'Επιστροφή για αναζήτηση',
+'trackbackdeleteok' => 'Η επιστροφή για αναζήτηση έχει διαγραφεί επιτυχώς.',
+
+
+);
+
+
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesEn.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesEn.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesEn.php	(revision 1280)
@@ -0,0 +1,2894 @@
+<?php
+/**
+ * This is the default English localisation file
+ *
+ * END USERS: DO NOT EDIT THIS FILE DIRECTLY!
+ *
+ * REPEAT!
+ *
+ * DO NOT EDIT THIS FILE DIRECTLY!
+ * NOTHING WILL HAPPEN WHEN YOU DO THAT!
+ *
+ * You can make your customizations on the wiki.
+ * While logged in as a sysop user, go to [[Special:Allmessages]]
+ * and edit the MediaWiki:* pages listed there.
+ *
+ * DO NOT EDIT THIS FILE DIRECTLY OR YOU WILL JUST BE CONFUSED!
+ */
+
+
+/**
+ * Fallback language, used for all unspecified messages and behaviour. This
+ * is English by default, for all files other than this one.
+ *
+ * Do NOT set this to false in any other message file! Leave the line out to
+ * accept the default fallback to "en". 
+ */
+$fallback = false;
+
+/**
+ * Is the language written right-to-left?
+ * Note that right-to-left languages generally also specify 
+ *    $defaultUserOptionOverrides = array( 'quickbar' => 2 );
+ */
+$rtl = false;
+
+/**
+ * Optional array mapping ASCII digits 0-9 to local digits.
+ */
+$digitTransformTable = null;
+
+/**
+ * Transform table for decimal point '.' and thousands separator ','
+ */
+$separatorTransformTable = null;
+
+/**
+ * Overrides for the default user options. This is mainly used by RTL languages.
+ */
+$defaultUserOptionOverrides = array();
+
+/**
+ * Extra user preferences which will be shown in Special:Preferences as 
+ * checkboxes. Extra settings in derived languages will automatically be 
+ * appended to the array of the fallback languages.
+ */
+$extraUserToggles = array();
+
+/**
+ * URLs do not specify their encoding. UTF-8 is used by default, but if the 
+ * URL is not a valid UTF-8 sequence, we have to try to guess what the real
+ * encoding is. The encoding used in this case is defined below, and must be
+ * supported by iconv(). 
+ */
+$fallback8bitEncoding = 'windows-1252';
+
+/**
+ * To allow "foo[[bar]]" to extend the link over the whole word "foobar"
+ */
+$linkPrefixExtension = false;
+
+/**
+ * Namespace names. NS_PROJECT is always set to $wgMetaNamespace after the 
+ * settings are loaded, it will be ignored even if you specify it here. 
+ *
+ * NS_PROJECT_TALK will be set to $wgMetaNamespaceTalk if that variable is
+ * set, otherwise the string specified here will be used. The string may 
+ * contain "$1", which will be replaced by the name of NS_PROJECT. It may 
+ * also contain a grammatical transformation, e.g. 
+ *
+ *     NS_PROJECT_TALK => 'Keskustelu_{{grammar:elative|$1}}'
+ *
+ * Only one grammatical transform may be specified in the string. For 
+ * performance reasons, this transformation is done locally by the language 
+ * module rather than by the full wikitext parser. As a result, no other 
+ * parser features are available. 
+ */
+$namespaceNames = array(
+	NS_MEDIA            => 'Media',
+	NS_SPECIAL          => 'Special',
+	NS_MAIN	            => '',
+	NS_TALK	            => 'Talk',
+	NS_USER             => 'User',
+	NS_USER_TALK        => 'User_talk',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK     => '$1_talk',
+	NS_IMAGE            => 'Image',
+	NS_IMAGE_TALK       => 'Image_talk',
+	NS_MEDIAWIKI        => 'MediaWiki',
+	NS_MEDIAWIKI_TALK   => 'MediaWiki_talk',
+	NS_TEMPLATE         => 'Template',
+	NS_TEMPLATE_TALK    => 'Template_talk',
+	NS_HELP             => 'Help',
+	NS_HELP_TALK        => 'Help_talk',
+	NS_CATEGORY         => 'Category',
+	NS_CATEGORY_TALK    => 'Category_talk',
+);
+
+/**
+ * Array of namespace aliases, mapping from name to NS_xxx index
+ */
+$namespaceAliases = array();
+
+/**
+ * Skin names. If any key is not specified, the English one will be used.
+ */
+$skinNames = array(
+	'standard' => 'Classic',
+	'nostalgia' => 'Nostalgia',
+	'cologneblue' => 'Cologne Blue',
+	'davinci' => 'DaVinci',
+	'mono' => 'Mono',
+	'monobook' => 'MonoBook',
+	'myskin' => 'MySkin',
+	'chick' => 'Chick'
+);
+
+/**
+ * Deprecated, use the message array
+ */
+$mathNames = array(
+	MW_MATH_PNG => 'mw_math_png',
+	MW_MATH_SIMPLE => 'mw_math_simple',
+	MW_MATH_HTML => 'mw_math_html',
+	MW_MATH_SOURCE => 'mw_math_source',
+	MW_MATH_MODERN => 'mw_math_modern',
+	MW_MATH_MATHML => 'mw_math_mathml'
+);
+
+/**
+ * A list of date format preference keys which can be selected in user 
+ * preferences. New preference keys can be added, provided they are supported
+ * by the language class's timeanddate(). Only the 5 keys listed below are 
+ * supported by the wikitext converter (DateFormatter.php).
+ *
+ * The special key "default" is an alias for either dmy or mdy depending on 
+ * $wgAmericanDates
+ */
+$datePreferences = array(
+	'default',
+	'mdy',
+	'dmy',
+	'ymd',
+	'ISO 8601',
+);
+
+/**
+ * The date format to use for generated dates in the user interface.
+ * This may be one of the above date preferences, or the special value 
+ * "dmy or mdy", which uses mdy if $wgAmericanDates is true, and dmy 
+ * if $wgAmericanDates is false.
+ */
+$defaultDateFormat = 'dmy or mdy';
+
+/**
+ * Associative array mapping old numeric date formats, which may still be 
+ * stored in user preferences, to the new string formats.
+ */
+$datePreferenceMigrationMap = array(
+	'default',
+	'mdy',
+	'dmy',
+	'ymd'
+);
+
+/**
+ * These are formats for dates generated by MediaWiki (as opposed to the wikitext
+ * DateFormatter). Documentation for the format string can be found in 
+ * Language.php, search for sprintfDate. 
+ *
+ * This array is automatically inherited by all subclasses. Individual keys can be
+ * overridden.
+ */
+$dateFormats = array(
+	'mdy time' => 'H:i',
+	'mdy date' => 'F j, Y',
+	'mdy both' => 'H:i, F j, Y',
+
+	'dmy time' => 'H:i',
+	'dmy date' => 'j F Y',
+	'dmy both' => 'H:i, j F Y',
+
+	'ymd time' => 'H:i',
+	'ymd date' => 'Y F j',
+	'ymd both' => 'H:i, Y F j',
+
+	'ISO 8601 time' => 'xnH:xni:xns',
+	'ISO 8601 date' => 'xnY-xnm-xnd',
+	'ISO 8601 both' => 'xnY-xnm-xnd"T"xnH:xni:xns',
+);
+
+/**
+ * Default list of book sources
+ */
+$bookstoreList = array(
+	'AddALL' => 'http://www.addall.com/New/Partner.cgi?query=$1&type=ISBN',
+	'PriceSCAN' => 'http://www.pricescan.com/books/bookDetail.asp?isbn=$1',
+	'Barnes & Noble' => 'http://search.barnesandnoble.com/bookSearch/isbnInquiry.asp?isbn=$1',
+	'Amazon.com' => 'http://www.amazon.com/exec/obidos/ISBN=$1'
+);
+
+/**
+ * Magic words
+ * Customisable syntax for wikitext and elsewhere
+ *
+ * Note to translators:
+ *   Please include the English words as synonyms.  This allows people
+ *   from other wikis to contribute more easily.
+ *
+ * This array can be modified at runtime with the LanguageGetMagic hook
+ */
+$magicWords = array(
+#   ID                                 CASE  SYNONYMS
+	'redirect'               => array( 0,    '#REDIRECT'              ),
+	'notoc'                  => array( 0,    '__NOTOC__'              ),
+	'nogallery'              => array( 0,    '__NOGALLERY__'          ),
+	'forcetoc'               => array( 0,    '__FORCETOC__'           ),
+	'toc'                    => array( 0,    '__TOC__'                ),
+	'noeditsection'          => array( 0,    '__NOEDITSECTION__'      ),
+	'start'                  => array( 0,    '__START__'              ),
+	'currentmonth'           => array( 1,    'CURRENTMONTH'           ),
+	'currentmonthname'       => array( 1,    'CURRENTMONTHNAME'       ),
+	'currentmonthnamegen'    => array( 1,    'CURRENTMONTHNAMEGEN'    ),
+	'currentmonthabbrev'     => array( 1,    'CURRENTMONTHABBREV'     ),
+	'currentday'             => array( 1,    'CURRENTDAY'             ),
+	'currentday2'            => array( 1,    'CURRENTDAY2'            ),
+	'currentdayname'         => array( 1,    'CURRENTDAYNAME'         ),
+	'currentyear'            => array( 1,    'CURRENTYEAR'            ),
+	'currenttime'            => array( 1,    'CURRENTTIME'            ),
+	'currenthour'            => array( 1,    'CURRENTHOUR'            ),
+	'localmonth'             => array( 1,    'LOCALMONTH'             ),
+	'localmonthname'         => array( 1,    'LOCALMONTHNAME'         ),
+	'localmonthnamegen'      => array( 1,    'LOCALMONTHNAMEGEN'      ),
+	'localmonthabbrev'       => array( 1,    'LOCALMONTHABBREV'       ),
+	'localday'               => array( 1,    'LOCALDAY'               ),
+	'localday2'              => array( 1,    'LOCALDAY2'              ),
+	'localdayname'           => array( 1,    'LOCALDAYNAME'           ),
+	'localyear'              => array( 1,    'LOCALYEAR'              ),
+	'localtime'              => array( 1,    'LOCALTIME'              ),
+	'localhour'              => array( 1,    'LOCALHOUR'              ),
+	'numberofpages'          => array( 1,    'NUMBEROFPAGES'          ),
+	'numberofarticles'       => array( 1,    'NUMBEROFARTICLES'       ),
+	'numberoffiles'          => array( 1,    'NUMBEROFFILES'          ),
+	'numberofusers'          => array( 1,    'NUMBEROFUSERS'          ),
+	'numberofedits'          => array( 1,    'NUMBEROFEDITS'          ),
+	'pagename'               => array( 1,    'PAGENAME'               ),
+	'pagenamee'              => array( 1,    'PAGENAMEE'              ),
+	'namespace'              => array( 1,    'NAMESPACE'              ),
+	'namespacee'             => array( 1,    'NAMESPACEE'             ),
+	'talkspace'              => array( 1,    'TALKSPACE'              ),
+	'talkspacee'             => array( 1,    'TALKSPACEE'              ),
+	'subjectspace'           => array( 1,    'SUBJECTSPACE', 'ARTICLESPACE' ),
+	'subjectspacee'          => array( 1,    'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+	'fullpagename'           => array( 1,    'FULLPAGENAME'           ),
+	'fullpagenamee'          => array( 1,    'FULLPAGENAMEE'          ),
+	'subpagename'            => array( 1,    'SUBPAGENAME'            ),
+	'subpagenamee'           => array( 1,    'SUBPAGENAMEE'           ),
+	'basepagename'           => array( 1,    'BASEPAGENAME'           ),
+	'basepagenamee'          => array( 1,    'BASEPAGENAMEE'          ),
+	'talkpagename'           => array( 1,    'TALKPAGENAME'           ),
+	'talkpagenamee'          => array( 1,    'TALKPAGENAMEE'          ),
+	'subjectpagename'        => array( 1,    'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+	'subjectpagenamee'       => array( 1,    'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
+	'msg'                    => array( 0,    'MSG:'                   ),
+	'subst'                  => array( 0,    'SUBST:'                 ),
+	'msgnw'                  => array( 0,    'MSGNW:'                 ),
+	'img_thumbnail'          => array( 1,    'thumbnail', 'thumb'     ),
+	'img_manualthumb'        => array( 1,    'thumbnail=$1', 'thumb=$1'),
+	'img_right'              => array( 1,    'right'                  ),
+	'img_left'               => array( 1,    'left'                   ),
+	'img_none'               => array( 1,    'none'                   ),
+	'img_width'              => array( 1,    '$1px'                   ),
+	'img_center'             => array( 1,    'center', 'centre'       ),
+	'img_framed'             => array( 1,    'framed', 'enframed', 'frame' ),
+	'img_page'               => array( 1,    'page=$1', 'page $1'     ),
+	'img_baseline'           => array( 1,    'baseline'               ),
+	'img_sub'                => array( 1,    'sub'                    ),
+	'img_super'              => array( 1,    'super', 'sup'           ),
+	'img_top'                => array( 1,    'top'                    ),
+	'img_text-top'           => array( 1,    'text-top'               ),
+	'img_middle'             => array( 1,    'middle'                 ),
+	'img_bottom'             => array( 1,    'bottom'                 ),
+	'img_text-bottom'        => array( 1,    'text-bottom'            ),
+	'int'                    => array( 0,    'INT:'                   ),
+	'sitename'               => array( 1,    'SITENAME'               ),
+	'ns'                     => array( 0,    'NS:'                    ),
+	'localurl'               => array( 0,    'LOCALURL:'              ),
+	'localurle'              => array( 0,    'LOCALURLE:'             ),
+	'server'                 => array( 0,    'SERVER'                 ),
+	'servername'             => array( 0,    'SERVERNAME'             ),
+	'scriptpath'             => array( 0,    'SCRIPTPATH'             ),
+	'grammar'                => array( 0,    'GRAMMAR:'               ),
+	'notitleconvert'         => array( 0,    '__NOTITLECONVERT__', '__NOTC__'),
+	'nocontentconvert'       => array( 0,    '__NOCONTENTCONVERT__', '__NOCC__'),
+	'currentweek'            => array( 1,    'CURRENTWEEK'            ),
+	'currentdow'             => array( 1,    'CURRENTDOW'             ),
+	'localweek'              => array( 1,    'LOCALWEEK'              ),
+	'localdow'               => array( 1,    'LOCALDOW'               ),
+	'revisionid'             => array( 1,    'REVISIONID'             ),
+	'revisionday'            => array( 1,    'REVISIONDAY'            ),
+	'revisionday2'           => array( 1,    'REVISIONDAY2'           ),
+	'revisionmonth'          => array( 1,    'REVISIONMONTH'          ),
+	'revisionyear'           => array( 1,    'REVISIONYEAR'           ),
+	'revisiontimestamp'      => array( 1,    'REVISIONTIMESTAMP'      ),
+	'plural'                 => array( 0,    'PLURAL:'                ),
+	'fullurl'                => array( 0,    'FULLURL:'               ),
+	'fullurle'               => array( 0,    'FULLURLE:'              ),
+	'lcfirst'                => array( 0,    'LCFIRST:'               ),
+	'ucfirst'                => array( 0,    'UCFIRST:'               ),
+	'lc'                     => array( 0,    'LC:'                    ),
+	'uc'                     => array( 0,    'UC:'                    ),
+	'raw'                    => array( 0,    'RAW:'                   ),
+	'displaytitle'           => array( 1,    'DISPLAYTITLE'           ),
+	'rawsuffix'              => array( 1,    'R'                      ),
+	'newsectionlink'         => array( 1,    '__NEWSECTIONLINK__'     ),
+	'currentversion'         => array( 1,    'CURRENTVERSION'         ),
+	'urlencode'              => array( 0,    'URLENCODE:'             ),
+	'anchorencode'           => array( 0,    'ANCHORENCODE'           ),
+	'currenttimestamp'       => array( 1,    'CURRENTTIMESTAMP'       ),
+	'localtimestamp'         => array( 1,    'LOCALTIMESTAMP'         ),
+	'directionmark'          => array( 1,    'DIRECTIONMARK', 'DIRMARK' ),
+	'language'               => array( 0,    '#LANGUAGE:'             ),
+	'contentlanguage'        => array( 1,    'CONTENTLANGUAGE', 'CONTENTLANG' ),
+	'pagesinnamespace'       => array( 1,    'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+	'numberofadmins'         => array( 1,    'NUMBEROFADMINS'         ),
+	'formatnum'              => array( 0,    'FORMATNUM'              ),
+	'padleft'                => array( 0,    'PADLEFT'                ),
+	'padright'               => array( 0,    'PADRIGHT'               ),
+	'special'                => array( 0,    'special',               ),
+	'defaultsort'            => array( 1,    'DEFAULTSORT:'           ),
+);
+
+/**
+ * Alternate names of special pages. All names are case-insensitive. The first
+ * listed alias will be used as the default. Aliases from the fallback 
+ * localisation (usually English) will be included by default. 
+ * 
+ * This array may be altered at runtime using the LangugeGetSpecialPageAliases 
+ * hook. 
+ */
+$specialPageAliases = array(
+	'DoubleRedirects'           => array( 'DoubleRedirects' ),
+	'BrokenRedirects'           => array( 'BrokenRedirects' ),
+	'Disambiguations'           => array( 'Disambiguations' ),
+	'Userlogin'                 => array( 'Userlogin' ),
+	'Userlogout'                => array( 'Userlogout' ),
+	'Preferences'               => array( 'Preferences' ),
+	'Watchlist'                 => array( 'Watchlist' ),
+	'Recentchanges'             => array( 'Recentchanges' ),
+	'Upload'                    => array( 'Upload' ),
+	'Imagelist'                 => array( 'Imagelist' ),
+	'Newimages'                 => array( 'Newimages' ),
+	'Listusers'                 => array( 'Listusers', 'Userlist' ),
+	'Statistics'                => array( 'Statistics' ),
+	'Randompage'                => array( 'Random', 'Randompage' ),
+	'Lonelypages'               => array( 'Lonelypages' ),
+	'Uncategorizedpages'        => array( 'Uncategorizedpages' ),
+	'Uncategorizedcategories'   => array( 'Uncategorizedcategories' ),
+	'Uncategorizedimages'       => array( 'Uncategorizedimages' ),
+	'Unusedcategories'          => array( 'Unusedcategories' ),
+	'Unusedimages'              => array( 'Unusedimages' ),
+	'Wantedpages'               => array( 'Wantedpages' ),
+	'Wantedcategories'          => array( 'Wantedcategories' ),
+	'Mostlinked'                => array( 'Mostlinked' ),
+	'Mostlinkedcategories'      => array( 'Mostlinkedcategories' ),
+	'Mostcategories'            => array( 'Mostcategories' ),
+	'Mostimages'                => array( 'Mostimages' ),
+	'Mostrevisions'             => array( 'Mostrevisions' ),
+	'Fewestrevisions'           => array( 'Fewestrevisions' ),
+	'Shortpages'                => array( 'Shortpages' ),
+	'Longpages'                 => array( 'Longpages' ),
+	'Newpages'                  => array( 'Newpages' ),
+	'Ancientpages'              => array( 'Ancientpages' ),
+	'Deadendpages'              => array( 'Deadendpages' ),
+	'Protectedpages'            => array( 'Protectedpages' ),
+	'Allpages'                  => array( 'Allpages' ),
+	'Prefixindex'               => array( 'Prefixindex' ) ,
+	'Ipblocklist'               => array( 'Ipblocklist' ),
+	'Specialpages'              => array( 'Specialpages' ),
+	'Contributions'             => array( 'Contributions' ),
+	'Emailuser'                 => array( 'Emailuser' ),
+	'Whatlinkshere'             => array( 'Whatlinkshere' ),
+	'Recentchangeslinked'       => array( 'Recentchangeslinked' ),
+	'Movepage'                  => array( 'Movepage' ),
+	'Blockme'                   => array( 'Blockme' ),
+	'Booksources'               => array( 'Booksources' ),
+	'Categories'                => array( 'Categories' ),
+	'Export'                    => array( 'Export' ),
+	'Version'                   => array( 'Version' ),
+	'Allmessages'               => array( 'Allmessages' ),
+	'Log'                       => array( 'Log', 'Logs' ),
+	'Blockip'                   => array( 'Blockip' ),
+	'Undelete'                  => array( 'Undelete' ),
+	'Import'                    => array( 'Import' ),
+	'Lockdb'                    => array( 'Lockdb' ),
+	'Unlockdb'                  => array( 'Unlockdb' ),
+	'Userrights'                => array( 'Userrights' ),
+	'MIMEsearch'                => array( 'MIMEsearch' ),
+	'Unwatchedpages'            => array( 'Unwatchedpages' ),
+	'Listredirects'             => array( 'Listredirects' ),
+	'Revisiondelete'            => array( 'Revisiondelete' ),
+	'Unusedtemplates'           => array( 'Unusedtemplates' ),
+	'Randomredirect'            => array( 'Randomredirect' ),
+	'Mypage'                    => array( 'Mypage' ),
+	'Mytalk'                    => array( 'Mytalk' ),
+	'Mycontributions'           => array( 'Mycontributions' ),
+	'Listadmins'                => array( 'Listadmins' ),
+	'Popularpages'              => array( 'Popularpages' ),
+	'Search'                    => array( 'Search' ),
+	'Resetpass'                 => array( 'Resetpass' ),
+	'Withoutinterwiki'          => array( 'Withoutinterwiki' ),
+);
+
+/**
+ * Regular expression matching the "link trail", e.g. "ed" in [[Toast]]ed, as 
+ * the first group, and the remainder of the string as the second group.
+ */
+$linkTrail = '/^([a-z]+)(.*)$/sD';
+
+#-------------------------------------------------------------------
+# Default messages
+#-------------------------------------------------------------------
+# Allowed characters in keys are: A-Z, a-z, 0-9, underscore (_) and
+# hyphen (-). If you need more characters, you may be able to change
+# the regex in MagicWord::initRegex
+
+$messages = array(
+/*
+The sidebar for MonoBook is generated from this message, lines that do not
+begin with * or ** are discarded, furthermore lines that do begin with ** and
+do not contain | are also discarded, but don't depend on this behaviour for
+future releases. Also note that since each list value is wrapped in a unique
+XHTML id it should only appear once and include characters that are legal
+XHTML id names.
+
+Note to translators: Do not include this message in the language files you
+submit for inclusion in MediaWiki, it should always be inherited from the
+parent class in order maintain consistency across languages.
+*/
+'sidebar' => '
+* navigation
+** mainpage|mainpage
+** portal-url|portal
+** currentevents-url|currentevents
+** recentchanges-url|recentchanges
+** randompage-url|randompage
+** helppage|help
+** sitesupport-url|sitesupport',
+
+# User preference toggles
+'tog-underline' => 'Underline links:',
+'tog-highlightbroken' => 'Format broken links <a href="" class="new">like this</a> (alternative: like this<a href="" class="internal">?</a>).',
+'tog-justify'	=> 'Justify paragraphs',
+'tog-hideminor' => 'Hide minor edits in recent changes',
+'tog-extendwatchlist' => 'Expand watchlist to show all applicable changes',
+'tog-usenewrc' => 'Enhanced recent changes (JavaScript)',
+'tog-numberheadings' => 'Auto-number headings',
+'tog-showtoolbar'		=> 'Show edit toolbar (JavaScript)',
+'tog-editondblclick' => 'Edit pages on double click (JavaScript)',
+'tog-editsection'		=> 'Enable section editing via [edit] links',
+'tog-editsectiononrightclick'	=> 'Enable section editing by right clicking<br /> on section titles (JavaScript)',
+'tog-showtoc'			=> 'Show table of contents (for pages with more than 3 headings)',
+'tog-rememberpassword' => 'Remember my login on this computer',
+'tog-editwidth' => 'Edit box has full width',
+'tog-watchcreations' => 'Add pages I create to my watchlist',
+'tog-watchdefault' => 'Add pages I edit to my watchlist',
+'tog-watchmoves' => 'Add pages I move to my watchlist',
+'tog-watchdeletion' => 'Add pages I delete to my watchlist',
+'tog-minordefault' => 'Mark all edits minor by default',
+'tog-previewontop' => 'Show preview before edit box',
+'tog-previewonfirst' => 'Show preview on first edit',
+'tog-nocache' => 'Disable page caching',
+'tog-enotifwatchlistpages' 	=> 'E-mail me when a page I\'m watching is changed',
+'tog-enotifusertalkpages' 	=> 'E-mail me when my user talk page is changed',
+'tog-enotifminoredits' 		=> 'E-mail me also for minor edits of pages',
+'tog-enotifrevealaddr' 		=> 'Reveal my e-mail address in notification mails',
+'tog-shownumberswatching' 	=> 'Show the number of watching users',
+'tog-fancysig' => 'Raw signatures (without automatic link)',
+'tog-externaleditor' => 'Use external editor by default',
+'tog-externaldiff' => 'Use external diff by default',
+'tog-showjumplinks' => 'Enable "jump to" accessibility links',
+'tog-uselivepreview' => 'Use live preview (JavaScript) (Experimental)',
+'tog-forceeditsummary' => 'Prompt me when entering a blank edit summary',
+'tog-watchlisthideown' => 'Hide my edits from the watchlist',
+'tog-watchlisthidebots' => 'Hide bot edits from the watchlist',
+'tog-watchlisthideminor' => 'Hide minor edits from the watchlist',
+'tog-nolangconversion'		=> 'Disable variants conversion',
+'tog-ccmeonemails' => 'Send me copies of emails I send to other users',
+'tog-diffonly' => "Don't show page content below diffs",
+
+'underline-always' => 'Always',
+'underline-never' => 'Never',
+'underline-default' => 'Browser default',
+
+'skinpreview' => '(Preview)',
+
+# dates
+'sunday' => 'Sunday',
+'monday' => 'Monday',
+'tuesday' => 'Tuesday',
+'wednesday' => 'Wednesday',
+'thursday' => 'Thursday',
+'friday' => 'Friday',
+'saturday' => 'Saturday',
+'sun' => 'Sun',
+'mon' => 'Mon',
+'tue' => 'Tue',
+'wed' => 'Wed',
+'thu' => 'Thu',
+'fri' => 'Fri',
+'sat' => 'Sat',
+'january' => 'January',
+'february' => 'February',
+'march' => 'March',
+'april' => 'April',
+'may_long' => 'May',
+'june' => 'June',
+'july' => 'July',
+'august' => 'August',
+'september' => 'September',
+'october' => 'October',
+'november' => 'November',
+'december' => 'December',
+'january-gen' => 'January',
+'february-gen' => 'February',
+'march-gen' => 'March',
+'april-gen' => 'April',
+'may-gen' => 'May',
+'june-gen' => 'June',
+'july-gen' => 'July',
+'august-gen' => 'August',
+'september-gen' => 'September',
+'october-gen' => 'October',
+'november-gen' => 'November',
+'december-gen' => 'December',
+'jan' => 'Jan',
+'feb' => 'Feb',
+'mar' => 'Mar',
+'apr' => 'Apr',
+'may' => 'May',
+'jun' => 'Jun',
+'jul' => 'Jul',
+'aug' => 'Aug',
+'sep' => 'Sep',
+'oct' => 'Oct',
+'nov' => 'Nov',
+'dec' => 'Dec',
+# Bits of text used by many pages:
+#
+'categories' => 'Categories',
+'pagecategories' => '{{PLURAL:$1|Category|Categories}}',
+'pagecategorieslink' => 'Special:Categories',
+'category_header' => 'Articles in category "$1"',
+'subcategories' => 'Subcategories',
+'category-media-header' => 'Media in category "$1"',
+
+
+'linkprefix'		=> '/^(.*?)([a-zA-Z\x80-\xff]+)$/sD',
+'mainpage'		=> 'Main Page',
+'mainpagetext'	=> "<big>'''MediaWiki has been successfully installed.'''</big>",
+'mainpagedocfooter' => "Consult the [http://meta.wikimedia.org/wiki/Help:Contents User's Guide] for information on using the wiki software.
+
+== Getting started ==
+
+* [http://www.mediawiki.org/wiki/Help:Configuration_settings Configuration settings list]
+* [http://www.mediawiki.org/wiki/Help:FAQ MediaWiki FAQ]
+* [http://mail.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]",
+
+'portal'		=> 'Community portal',
+'portal-url'		=> 'Project:Community Portal',
+'about'			=> 'About',
+'aboutsite'		=> 'About {{SITENAME}}',
+'aboutpage'		=> 'Project:About',
+'article'		=> 'Content page',
+'help'			=> 'Help',
+'helppage'		=> 'Help:Contents',
+'bugreports'	=> 'Bug reports',
+'bugreportspage' => 'Project:Bug reports',
+'sitesupport'   => 'Donations',
+'sitesupport-url' => 'Project:Site support',
+'faq'			=> 'FAQ',
+'faqpage'		=> 'Project:FAQ',
+'edithelp'		=> 'Editing help',
+'newwindow'		=> '(opens in new window)',
+'edithelppage'	=> 'Help:Editing',
+'cancel'		=> 'Cancel',
+'qbfind'		=> 'Find',
+'qbbrowse'		=> 'Browse',
+'qbedit'		=> 'Edit',
+'qbpageoptions' => 'This page',
+'qbpageinfo'	=> 'Context',
+'qbmyoptions'	=> 'My pages',
+'qbspecialpages'	=> 'Special pages',
+'moredotdotdot'	=> 'More...',
+'mypage'		=> 'My page',
+'mytalk'		=> 'My talk',
+'anontalk'		=> 'Talk for this IP',
+'navigation' => 'Navigation',
+
+# Metadata in edit box
+'metadata_help' => 'Metadata:',
+
+'currentevents' => 'Current events',
+'currentevents-url' => 'Current events',
+
+'disclaimers' => 'Disclaimers',
+'disclaimerpage' => 'Project:General disclaimer',
+'privacy' => 'Privacy policy',
+'privacypage' => 'Project:Privacy policy',
+'errorpagetitle' => 'Error',
+'returnto'		=> 'Return to $1.',
+'tagline'      	=> 'From {{SITENAME}}',
+'search'		=> 'Search',
+'searchbutton'		=> 'Search',
+'go'		=> 'Go',
+'searcharticle'		=> 'Go',
+'history'		=> 'Page history',
+'history_short' => 'History',
+'updatedmarker' => 'updated since my last visit',
+'info_short'	=> 'Information',
+'printableversion' => 'Printable version',
+'permalink'     => 'Permanent link',
+'print' => 'Print',
+'edit' => 'Edit',
+'editthispage'	=> 'Edit this page',
+'delete' => 'Delete',
+'deletethispage' => 'Delete this page',
+'undelete_short' => 'Undelete {{PLURAL:$1|one edit|$1 edits}}',
+'protect' => 'Protect',
+'protect_change' => 'change protection',
+'protectthispage' => 'Protect this page',
+'unprotect' => 'unprotect',
+'unprotectthispage' => 'Unprotect this page',
+'newpage' => 'New page',
+'talkpage'		=> 'Discuss this page',
+'talkpagelinktext' => 'Talk',
+'specialpage' => 'Special Page',
+'personaltools' => 'Personal tools',
+'postcomment'   => 'Post a comment',
+'addsection'   => '+',
+'articlepage'	=> 'View content page',
+'talk' => 'Discussion',
+'views' => 'Views',
+'toolbox' => 'Toolbox',
+'userpage' => 'View user page',
+'projectpage' => 'View project page',
+'imagepage' => 	'View image page',
+'mediawikipage' => 	'View message page',
+'templatepage' => 	'View template page',
+'viewhelppage' => 	'View help page',
+'categorypage' => 	'View category page',
+'viewtalkpage' => 'View discussion',
+'otherlanguages' => 'In other languages',
+'redirectedfrom' => '(Redirected from $1)',
+'redirectpagesub' => 'Redirect page',
+'lastmodifiedat'		=> 'This page was last modified $2, $1.',	//$1 date, $2 time
+'viewcount'		=> 'This page has been accessed {{plural:$1|one time|$1 times}}.',
+'copyright'	=> 'Content is available under $1.',
+'protectedpage' => 'Protected page',
+'jumpto' => 'Jump to:',
+'jumptonavigation' => 'navigation',
+'jumptosearch' => 'search',
+
+'badaccess'        => 'Permission error',
+'badaccess-group0' => 'You are not allowed to execute the action you have requested.',
+'badaccess-group1' => 'The action you have requested is limited to users in the group $1.',
+'badaccess-group2' => 'The action you have requested is limited to users in one of the groups $1.',
+'badaccess-groups' => 'The action you have requested is limited to users in one of the groups $1.',
+
+'versionrequired' => 'Version $1 of MediaWiki required',
+'versionrequiredtext' => 'Version $1 of MediaWiki is required to use this page. See [[Special:Version|version page]].',
+
+'ok'			=> 'OK',
+'sitetitle'		=> '{{SITENAME}}',
+'pagetitle'		=> '$1 - {{SITENAME}}',
+'sitesubtitle'	=> '',
+'retrievedfrom' => 'Retrieved from "$1"',
+'youhavenewmessages' => 'You have $1 ($2).',
+'newmessageslink' => 'new messages',
+'newmessagesdifflink' => 'last change',
+'editsection'=>'edit',
+'editold'=>'edit',
+'editsectionhint' => 'Edit section: $1',
+'toc' => 'Contents',
+'showtoc' => 'show',
+'hidetoc' => 'hide',
+'thisisdeleted' => 'View or restore $1?',
+'viewdeleted' => 'View $1?',
+'restorelink' => '{{PLURAL:$1|one deleted edit|$1 deleted edits}}',
+'feedlinks' => 'Feed:',
+'feed-invalid' => 'Invalid subscription feed type.',
+'feed-atom' => 'Atom',
+'feed-rss' => 'RSS',
+'sitenotice'	=> '-', # the equivalent to wgSiteNotice
+'anonnotice' => '-',
+
+# Short words for each namespace, by default used in the 'article' tab in monobook
+'nstab-main' => 'Article',
+'nstab-user' => 'User page',
+'nstab-media' => 'Media page',
+'nstab-special' => 'Special',
+'nstab-project' => 'Project page',
+'nstab-image' => 'File',
+'nstab-mediawiki' => 'Message',
+'nstab-template' => 'Template',
+'nstab-help' => 'Help page',
+'nstab-category' => 'Category',
+
+# Main script and global functions
+#
+'nosuchaction'	=> 'No such action',
+'nosuchactiontext' => 'The action specified by the URL is not
+recognized by the wiki',
+'nosuchspecialpage' => 'No such special page',
+'nospecialpagetext' => 'You have requested an invalid special page, a list of valid special pages may be found at [[Special:Specialpages|special pages list]].',
+
+# General errors
+#
+'error'			=> 'Error',
+'databaseerror' => 'Database error',
+'dberrortext'	=> 'A database query syntax error has occurred.
+This may indicate a bug in the software.
+The last attempted database query was:
+<blockquote><tt>$1</tt></blockquote>
+from within function "<tt>$2</tt>".
+MySQL returned error "<tt>$3: $4</tt>".',
+'dberrortextcl' => 'A database query syntax error has occurred.
+The last attempted database query was:
+"$1"
+from within function "$2".
+MySQL returned error "$3: $4"',
+'noconnect'		=> 'Sorry! The wiki is experiencing some technical difficulties, and cannot contact the database server. <br />
+$1',
+'nodb'			=> 'Could not select database $1',
+'cachederror'	=> 'The following is a cached copy of the requested page, and may not be up to date.',
+'laggedslavemode'   => 'Warning: Page may not contain recent updates.',
+'readonly'			=> 'Database locked',
+'enterlockreason'	=> 'Enter a reason for the lock, including an estimate
+of when the lock will be released',
+'readonlytext'		=> 'The database is currently locked to new entries and other modifications, probably for routine database maintenance, after which it will be back to normal.
+
+The administrator who locked it offered this explanation: $1',
+'missingarticle' => 'The database did not find the text of a page that it should have found, named "$1".
+
+This is usually caused by following an outdated diff or history link to a
+page that has been deleted.
+
+If this is not the case, you may have found a bug in the software.
+Please report this to an administrator, making note of the URL.',
+'readonly_lag' => 'The database has been automatically locked while the slave database servers catch up to the master',
+'internalerror' => 'Internal error',
+'filecopyerror' => 'Could not copy file "$1" to "$2".',
+'filerenameerror' => 'Could not rename file "$1" to "$2".',
+'filedeleteerror' => 'Could not delete file "$1".',
+'filenotfound'	=> 'Could not find file "$1".',
+'unexpected'	=> 'Unexpected value: "$1"="$2".',
+'formerror'		=> 'Error: could not submit form',
+'badarticleerror' => 'This action cannot be performed on this page.',
+'cannotdelete'	=> 'Could not delete the page or file specified. (It may have already been deleted by someone else.)',
+'badtitle'		=> 'Bad title',
+'badtitletext' => 'The requested page title was invalid, empty, or an incorrectly linked inter-language or inter-wiki title. It may contain one or more characters which cannot be used in titles.',
+'perfdisabled' => 'Sorry! This feature has been temporarily disabled because it slows the database down to the point that no one can use the wiki.',
+'perfdisabledsub' => 'Here is a saved copy from $1:', # obsolete?
+'perfcached' => 'The following data is cached and may not be up to date.',
+'perfcachedts' => 'The following data is cached, and was last updated $1.',
+'querypage-no-updates' => 'Updates for this page are currently disabled. Data here will not presently be refreshed.',
+'wrong_wfQuery_params' => 'Incorrect parameters to wfQuery()<br />
+Function: $1<br />
+Query: $2',
+'viewsource' => 'View source',
+'viewsourcefor' => 'for $1',
+'protectedpagetext' => 'This page has been locked to prevent editing.',
+'viewsourcetext' => 'You can view and copy the source of this page:',
+'protectedinterface' => 'This page provides interface text for the software, and is locked to prevent abuse.',
+'editinginterface' => "'''Warning:''' You are editing a page which is used to provide interface text for the software. Changes to this page will affect the appearance of the user interface for other users.",
+'sqlhidden' => '(SQL query hidden)',
+'cascadeprotected' => 'This page has been protected from editing, because it is included in the following {{PLURAL:$1|page|pages}}, which are protected with the "cascading" option turned on:',
+
+# Login and logout pages
+#
+'logouttitle'	=> 'User logout',
+'logouttext'	=> '<strong>You are now logged out.</strong><br />
+You can continue to use {{SITENAME}} anonymously, or you can log in
+again as the same or as a different user. Note that some pages may
+continue to be displayed as if you were still logged in, until you clear
+your browser cache.',
+
+'welcomecreation' => "== Welcome, $1! ==
+
+Your account has been created. Don't forget to change your {{SITENAME}} preferences.",
+
+'loginpagetitle' => 'User login',
+'yourname'		=> 'Username',
+'yourpassword'	=> 'Password',
+'yourpasswordagain' => 'Retype password',
+'remembermypassword'	=> 'Remember my login on this computer',
+'yourdomainname'       => 'Your domain',
+'externaldberror'      => 'There was either an external authentication database error or you are not allowed to update your external account.',
+'loginproblem'	=> '<b>There has been a problem with your login.</b><br />Try again!',
+'alreadyloggedin' => "<strong>User $1, you are already logged in!</strong><br />",
+
+'login'			=> 'Log in',
+'loginprompt'	=> 'You must have cookies enabled to log in to {{SITENAME}}.',
+'userlogin'		=> 'Log in / create account',
+'logout'		=> 'Log out',
+'userlogout'	=> 'Log out',
+'notloggedin'	=> 'Not logged in',
+'nologin'	=> 'Don\'t have a login? $1.',
+'nologinlink'	=> 'Create an account',
+'createaccount'	=> 'Create account',
+'gotaccount'	=> 'Already have an account? $1.',
+'gotaccountlink'	=> 'Log in',
+'createaccountmail'	=> 'by e-mail',
+'badretype'		=> 'The passwords you entered do not match.',
+'userexists'	=> 'Username entered already in use. Please choose a different name.',
+'youremail'		=> 'E-mail *:',
+'username'		=> 'Username:',
+'uid'			=> 'User ID:',
+'yourrealname'		=> 'Real name *:',
+'yourlanguage'	=> 'Language:',
+'yourvariant'  => 'Variant',
+'yournick'		=> 'Nickname:',
+'badsig'		=> 'Invalid raw signature; check HTML tags.',
+'email'			=> 'E-mail',
+'prefs-help-email-enotif' => 'This address is also used to send you e-mail notifications if you enabled the options.',
+'prefs-help-realname' 	=> '* Real name (optional): if you choose to provide it this will be used for giving you attribution for your work.',
+'loginerror'	=> 'Login error',
+'prefs-help-email'      => '* E-mail (optional): Enables others to contact you through your user or user_talk page without needing to reveal your identity.',
+'nocookiesnew'	=> 'The user account was created, but you are not logged in. {{SITENAME}} uses cookies to log in users. You have cookies disabled. Please enable them, then log in with your new username and password.',
+'nocookieslogin'	=> '{{SITENAME}} uses cookies to log in users. You have cookies disabled. Please enable them and try again.',
+'noname'		=> 'You have not specified a valid user name.',
+'loginsuccesstitle' => 'Login successful',
+'loginsuccess'	=> "'''You are now logged in to {{SITENAME}} as \"$1\".'''",
+'nosuchuser'	=> 'There is no user by the name "$1". Check your spelling, or create a new account.',
+'nosuchusershort'	=> 'There is no user by the name "$1". Check your spelling.',
+'nouserspecified'	=> 'You have to specify a username.',
+'wrongpassword'		=> 'Incorrect password entered. Please try again.',
+'wrongpasswordempty'		=> 'Password entered was blank. Please try again.',
+'mailmypassword' 	=> 'E-mail password',
+'passwordremindertitle' => 'Password reminder from {{SITENAME}}',
+'passwordremindertext' => 'Someone (probably you, from IP address $1)
+requested that we send you a new password for {{SITENAME}} ($4).
+The password for user "$2" is now "$3".
+You should log in and change your password now.
+
+If someone else made this request or if you have remembered your password and
+you no longer wish to change it, you may ignore this message and continue using
+your old password.',
+'noemail' => 'There is no e-mail address recorded for user "$1".',
+'passwordsent'	=> 'A new password has been sent to the e-mail address
+registered for "$1".
+Please log in again after you receive it.',
+'blocked-mailpassword' => 'Your IP address is blocked from editing, and so
+is not allowed to use the password recovery function to prevent abuse.',
+'eauthentsent' =>  'A confirmation e-mail has been sent to the nominated e-mail address.
+Before any other mail is sent to the account, you will have to follow the instructions in the e-mail,
+to confirm that the account is actually yours.',
+'throttled-mailpassword' => 'A password reminder has already been sent, within the
+last $1 hours. To prevent abuse, only one password reminder will be sent per
+$1 hours.',
+'loginend'		            => '',
+'signupend'		            => '{{int:loginend}}',
+'mailerror'                 => 'Error sending mail: $1',
+'acct_creation_throttle_hit' => 'Sorry, you have already created $1 accounts. You can\'t make any more.',
+'emailauthenticated'        => 'Your e-mail address was authenticated on $1.',
+'emailnotauthenticated'     => 'Your e-mail address is not yet authenticated. No e-mail
+will be sent for any of the following features.',
+'noemailprefs'              => 'Specify an e-mail address for these features to work.',
+'emailconfirmlink' => 'Confirm your e-mail address',
+'invalidemailaddress'	=> 'The e-mail address cannot be accepted as it appears to have an invalid
+format. Please enter a well-formatted address or empty that field.',
+'accountcreated' => 'Account created',
+'accountcreatedtext' => 'The user account for $1 has been created.',
+
+# Password reset dialog
+'resetpass' => 'Reset account password',
+'resetpass_announce' => 'You logged in with a temporary e-mailed code. To finish logging in, you must set a new password here:',
+'resetpass_text' => "<!-- Add text here -->",
+'resetpass_header' => 'Reset password',
+'resetpass_submit' => 'Set password and log in',
+'resetpass_success' => 'Your password has been changed successfully! Now logging you in...',
+'resetpass_bad_temporary' => 'Invalid temporary password. You may have already successfully changed your password or requested a new temporary password.',
+'resetpass_forbidden' => 'Passwords cannot be changed on this wiki',
+'resetpass_missing' => 'No form data.',
+
+
+# Edit page toolbar
+'bold_sample'=>'Bold text',
+'bold_tip'=>'Bold text',
+'italic_sample'=>'Italic text',
+'italic_tip'=>'Italic text',
+'link_sample'=>'Link title',
+'link_tip'=>'Internal link',
+'extlink_sample'=>'http://www.example.com link title',
+'extlink_tip'=>'External link (remember http:// prefix)',
+'headline_sample'=>'Headline text',
+'headline_tip'=>'Level 2 headline',
+'math_sample'=>'Insert formula here',
+'math_tip'=>'Mathematical formula (LaTeX)',
+'nowiki_sample'=>'Insert non-formatted text here',
+'nowiki_tip'=>'Ignore wiki formatting',
+'image_sample'=>'Example.jpg',
+'image_tip'=>'Embedded image',
+'media_sample'=>'Example.ogg',
+'media_tip'=>'Media file link',
+'sig_tip'=>'Your signature with timestamp',
+'hr_tip'=>'Horizontal line (use sparingly)',
+
+# Edit pages
+#
+'summary'		=> 'Summary',
+'subject'		=> 'Subject/headline',
+'minoredit'		=> 'This is a minor edit',
+'watchthis'		=> 'Watch this page',
+'savearticle'	=> 'Save page',
+'preview'		=> 'Preview',
+'showpreview'	=> 'Show preview',
+'showlivepreview'	=> 'Live preview',
+'showdiff'	=> 'Show changes',
+'anoneditwarning' => "'''Warning:''' You are not logged in. Your IP address will be recorded in this page's edit history.",
+'missingsummary' => "'''Reminder:''' You have not provided an edit summary. If you click Save again, your edit will be saved without one.",
+'missingcommenttext' => 'Please enter a comment below.',
+'missingcommentheader' => "'''Reminder:''' You have not provided a subject/headline for this comment. If you click Save again, your edit will be saved without one.",
+'summary-preview' => 'Summary preview',
+'subject-preview' => 'Subject/headline preview',
+'blockedtitle'	=> 'User is blocked',
+'blockedtext' => "<big>'''Your user name or IP address has been blocked.'''</big>
+
+The block was made by $1. The reason given is ''$2''.
+
+You can contact $1 or another [[{{MediaWiki:grouppage-sysop}}|administrator]] to discuss the block.
+You cannot use the 'email this user' feature unless a valid email address is specified in your
+[[Special:Preferences|account preferences]]. Your current IP address is $3, and the block ID is #$5. Please include either or both of these in any queries.",
+'blockedoriginalsource' => "The source of '''$1''' is shown below:",
+'blockededitsource' => "The text of '''your edits''' to '''$1''' is shown below:",
+'whitelistedittitle' => 'Login required to edit',
+'whitelistedittext' => 'You have to $1 to edit pages.',
+'whitelistreadtitle' => 'Login required to read',
+'whitelistreadtext' => 'You have to [[Special:Userlogin|login]] to read pages.',
+'whitelistacctitle' => 'You are not allowed to create an account',
+'whitelistacctext' => 'To be allowed to create accounts in this wiki you have to [[Special:Userlogin|log]] in and have the appropriate permissions.',
+'confirmedittitle' => 'E-mail confirmation required to edit',
+'confirmedittext' => 'You must confirm your e-mail address before editing pages. Please set and validate your e-mail address through your [[Special:Preferences|user preferences]].',
+'nosuchsectiontitle' => 'No such section',
+'nosuchsectiontext' => "You tried to edit a section that doesn't exist.  Since there is no section \$1, there's no place to save your edit.",
+'loginreqtitle'	=> 'Login Required',
+'loginreqlink' => 'log in',
+'loginreqpagetext'	=> 'You must $1 to view other pages.',
+'accmailtitle' => 'Password sent.',
+'accmailtext' => 'The password for "$1" has been sent to $2.',
+'newarticle'	=> '(New)',
+'newarticletext' =>
+"You've followed a link to a page that doesn't exist yet.
+To create the page, start typing in the box below
+(see the [[{{MediaWiki:helppage}}|help page]] for more info).
+If you are here by mistake, just click your browser's '''back''' button.",
+'newarticletextanon' => '{{int:newarticletext}}',
+'talkpagetext' => '<!-- MediaWiki:talkpagetext -->',
+'anontalkpagetext' => "----''This is the discussion page for an anonymous user who has not created an account yet or who does not use it. We therefore have to use the numerical IP address to identify him/her. Such an IP address can be shared by several users. If you are an anonymous user and feel that irrelevant comments have been directed at you, please [[Special:Userlogin|create an account or log in]] to avoid future confusion with other anonymous users.''",
+'noarticletext' => 'There is currently no text in this page, you can [[Special:Search/{{PAGENAME}}|search for this page title]] in other pages or [{{fullurl:{{FULLPAGENAME}}|action=edit}} edit this page].',
+'noarticletextanon' => '{{int:noarticletext}}',
+'clearyourcache' => "'''Note:''' After saving, you may have to bypass your browser's cache to see the changes. '''Mozilla / Firefox / Safari:''' hold down ''Shift'' while clicking ''Reload'', or press ''Ctrl-Shift-R'' (''Cmd-Shift-R'' on Apple Mac); '''IE:''' hold ''Ctrl'' while clicking ''Refresh'', or press ''Ctrl-F5''; '''Konqueror:''': simply click the ''Reload'' button, or press ''F5''; '''Opera''' users may need to completely clear their cache in ''Tools→Preferences''.",
+'usercssjsyoucanpreview' => '<strong>Tip:</strong> Use the \'Show preview\' button to test your new CSS/JS before saving.',
+'usercsspreview' => '\'\'\'Remember that you are only previewing your user CSS, it has not yet been saved!\'\'\'',
+'userjspreview' => '\'\'\'Remember that you are only testing/previewing your user JavaScript, it has not yet been saved!\'\'\'',
+'userinvalidcssjstitle' => "'''Warning:''' There is no skin \"$1\". Remember that custom .css and .js pages use a lowercase title, e.g. {{ns:user}}:Foo/monobook.css as opposed to {{ns:user}}:Foo/Monobook.css.",
+'updated' => '(Updated)',
+'note' => '<strong>Note:</strong>',
+'previewnote' => '<strong>This is only a preview; changes have not yet been saved!</strong>',
+'session_fail_preview' => '<strong>Sorry! We could not process your edit due to a loss of session data.
+Please try again. If it still doesn\'t work, try logging out and logging back in.</strong>',
+'previewconflict' => 'This preview reflects the text in the upper text editing area as it will appear if you choose to save.',
+'session_fail_preview_html' => '<strong>Sorry! We could not process your edit due to a loss of session data.</strong>
+
+\'\'Because this wiki has raw HTML enabled, the preview is hidden as a precaution against JavaScript attacks.\'\'
+
+<strong>If this is a legitimate edit attempt, please try again. If it still doesn\'t work, try logging out and logging back in.</strong>',
+'importing' => 'Importing $1',
+'editing' => 'Editing $1',
+'editinguser' => 'Editing user <b>$1</b>',
+'editingsection' => 'Editing $1 (section)',
+'editingcomment' => 'Editing $1 (comment)',
+'editconflict' => 'Edit conflict: $1',
+'explainconflict' => 'Someone else has changed this page since you started editing it.
+The upper text area contains the page text as it currently exists.
+Your changes are shown in the lower text area.
+You will have to merge your changes into the existing text.
+<b>Only</b> the text in the upper text area will be saved when you
+press "Save page".<br />',
+'yourtext'		=> 'Your text',
+'storedversion' => 'Stored version',
+'nonunicodebrowser' => "<strong>WARNING: Your browser is not unicode compliant. A workaround is in place to allow you to safely edit articles: non-ASCII characters will appear in the edit box as hexadecimal codes.</strong>",
+'editingold'	=> "<strong>WARNING: You are editing an out-of-date
+revision of this page.
+If you save it, any changes made since this revision will be lost.</strong>",
+'yourdiff'		=> 'Differences',
+'copyrightwarning' => 'Please note that all contributions to {{SITENAME}} are considered to be released under the $2 (see $1 for details). If you don\'t want your writing to be edited mercilessly and redistributed at will, then don\'t submit it here.<br />
+You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource.
+<strong>DO NOT SUBMIT COPYRIGHTED WORK WITHOUT PERMISSION!</strong>',
+'copyrightwarning2' => 'Please note that all contributions to {{SITENAME}} may be edited, altered, or removed by other contributors. If you don\'t want your writing to be edited mercilessly, then don\'t submit it here.<br />
+You are also promising us that you wrote this yourself, or copied it from a
+public domain or similar free resource (see $1 for details).
+<strong>DO NOT SUBMIT COPYRIGHTED WORK WITHOUT PERMISSION!</strong>',
+'longpagewarning' => "<strong>WARNING: This page is $1 kilobytes long; some
+browsers may have problems editing pages approaching or longer than 32kb.
+Please consider breaking the page into smaller sections.</strong>",
+'longpageerror' => "<strong>ERROR: The text you have submitted is $1 kilobytes 
+long, which is longer than the maximum of $2 kilobytes. It cannot be saved.</strong>",
+'readonlywarning' => '<strong>WARNING: The database has been locked for maintenance,
+so you will not be able to save your edits right now. You may wish to cut-n-paste
+the text into a text file and save it for later.</strong>',
+'protectedpagewarning' => "<strong>WARNING:  This page has been locked so that only users with sysop privileges can edit it.</strong>",
+'semiprotectedpagewarning' => "'''Note:''' This page has been locked so that only registered users can edit it.",
+'cascadeprotectedwarning' => "'''Warning:''' This page has been locked so that only users with sysop privileges can edit it, because it is included in the following cascade-protected {{PLURAL:$1|page|pages}}:",
+'templatesused'	=> 'Templates used on this page:',
+'templatesusedpreview'	=> 'Templates used in this preview:',
+'templatesusedsection'	=> 'Templates used in this section:',
+'template-protected' => '(protected)',
+'template-semiprotected' => '(semi-protected)',
+'edittools' => '<!-- Text here will be shown below edit and upload forms. -->',
+'nocreatetitle' => 'Page creation limited',
+'nocreatetext' => 'This site has restricted the ability to create new pages.
+You can go back and edit an existing page, or [[Special:Userlogin|log in or create an account]].',
+
+# "Undo" feature
+'undo-success' => 'The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then save the changes below to finish undoing the edit.',
+'undo-failure' => 'The edit could not be undone due to conflicting intermediate edits.',
+'undo-summary' => 'Undo revision $1 by [[Special:Contributions/$2|$2]] ([[User talk:$2|Talk]])',
+
+# Account creation failure
+'cantcreateaccounttitle' => 'Can\'t create account',
+'cantcreateaccounttext' => 'Account creation from this IP address (<b>$1</b>) has been blocked. 
+This is probably due to persistent vandalism from your school or Internet service 
+provider.',
+
+# History pages
+#
+'revhistory'	=> 'Revision history',
+'viewpagelogs' => 'View logs for this page',
+'nohistory'		=> 'There is no edit history for this page.',
+'revnotfound'	=> 'Revision not found',
+'revnotfoundtext' => "The old revision of the page you asked for could not be found.
+Please check the URL you used to access this page.",
+'loadhist'		=> 'Loading page history',
+'currentrev'	=> 'Current revision',
+'revisionasof'          => 'Revision as of $1',
+'revision-info' => 'Revision as of $1 by $2',
+'revision-nav' => '($1) $2 | $3 ($4) | $5 ($6)',
+'previousrevision'	=> '←Older revision',
+'nextrevision'		=> 'Newer revision→',
+'currentrevisionlink'   => 'Current revision',
+'cur'			=> 'cur',
+'next'			=> 'next',
+'last'			=> 'last',
+'orig'			=> 'orig',
+'page_first'		=> 'first',
+'page_last'		=> 'last',
+'histlegend'	=> 'Diff selection: mark the radio boxes of the versions to compare and hit enter or the button at the bottom.<br />
+Legend: (cur) = difference with current version,
+(last) = difference with preceding version, M = minor edit.',
+'history_copyright'    => '-',
+'deletedrev' => '[deleted]',
+'histfirst' => 'Earliest',
+'histlast' => 'Latest',
+'historysize' => '($1 bytes)',
+'historyempty' => '(empty)',
+
+# Revision feed
+#
+'history-feed-title'          => 'Revision history',
+'history-feed-description'    => 'Revision history for this page on the wiki',
+'history-feed-item-nocomment' => '$1 at $2', # user at time
+'history-feed-empty'          => 'The requested page doesn\'t exist.
+It may have been deleted from the wiki, or renamed.
+Try [[Special:Search|searching on the wiki]] for relevant new pages.',
+
+# Revision deletion
+#
+'rev-deleted-comment'         => '(comment removed)',
+'rev-deleted-user'            => '(username removed)',
+'rev-deleted-event'           => '(entry removed)',
+'rev-deleted-text-permission' => '<div class="mw-warning plainlinks">
+This page revision has been removed from the public archives.
+There may be details in the [{{fullurl:Special:Log/delete|page={{FULLPAGENAMEE}}}} deletion log].
+</div>',
+'rev-deleted-text-view'       => '<div class="mw-warning plainlinks">
+This page revision has been removed from the public archives.
+As an administrator on this site you can view it;
+there may be details in the [{{fullurl:Special:Log/delete|page={{FULLPAGENAMEE}}}} deletion log].
+</div>',
+'rev-delundel'                => 'show/hide',
+'revisiondelete'              => 'Delete/undelete revisions',
+'revdelete-nooldid-title'     => 'No target revision',
+'revdelete-nooldid-text'      => 'You have not specified target revision or revisions to perform this function on.',
+'revdelete-selected'          => "{{PLURAL:$2|Selected revision|Selected revisions}} of '''$1:'''",
+'logdelete-selected'          => "{{PLURAL:$2|Selected log event|Selected log events}} for '''$1:'''",
+'revdelete-text'              => "Deleted revisions and events will still appear in the page history and logs,
+but parts of their content will be inaccessible to the public.
+
+Other admins on this wiki will still be able to access the hidden content and can
+undelete it again through this same interface, unless additional restrictions are set.",
+'revdelete-legend'            => 'Set restrictions:',
+'revdelete-hide-text'         => 'Hide revision text',
+'revdelete-hide-name'         => 'Hide action and target',
+'revdelete-hide-comment'      => 'Hide edit comment',
+'revdelete-hide-user'         => 'Hide editor\'s username/IP',
+'revdelete-hide-restricted'   => 'Apply these restrictions to sysops as well as others',
+'revdelete-suppress'          => 'Suppress data from sysops as well as others',
+'revdelete-hide-image'        => 'Hide file content',
+'revdelete-unsuppress'        => 'Remove restrictions on restored revisions',
+'revdelete-log'               => 'Log comment:',
+'revdelete-submit'            => 'Apply to selected revision',
+'revdelete-logentry'          => 'changed revision visibility of [[$1]]',
+'logdelete-logentry'          => 'changed event visibility of [[$1]]',
+'revdelete-logaction'         => '$1 {{plural:$1|revision|revisions}} set to mode $2',
+'logdelete-logaction'         => '$1 {{plural:$1|event|events}} to [[$3]] set to mode $2',
+'revdelete-success'           => 'Revision visibility successfully set.',
+'logdelete-success'           => 'Event visibility successfully set.',
+
+# Oversight log
+#
+'oversightlog' => 'Oversight log',
+'overlogpagetext' => 'Below is a list of the most recent deletions and blocks involving content 
+hidden from Sysops. See the [[Special:Ipblocklist|IP block list]] for the list of currently operational bans and blocks.',
+
+# Diffs
+#
+'difference'	=> '(Difference between revisions)',
+'loadingrev'	=> 'loading revision for diff',
+'lineno'	=> "Line $1:",
+'editcurrent'	=> 'Edit the current version of this page',
+'selectnewerversionfordiff' => 'Select a newer version for comparison',
+'selectolderversionfordiff' => 'Select an older version for comparison',
+'compareselectedversions' => 'Compare selected versions',
+'editundo'	=> 'undo',
+'diff-multi'	=> "({{plural:$1|One intermediate revision|$1 intermediate revisions}} not shown.)",
+
+# Search results
+#
+'searchresults' => 'Search results',
+'searchresulttext' => "For more information about searching {{SITENAME}}, see [[{{MediaWiki:helppage}}|{{int:help}}]].",
+'searchsubtitle' => "You searched for '''[[:$1]]'''",
+'searchsubtitleinvalid' => "You searched for '''$1'''",
+'badquery'		=> 'Badly formed search query',
+'badquerytext'	=> 'We could not process your query.
+This is probably because you have attempted to search for a
+word fewer than three letters long, which is not yet supported.
+It could also be that you have mistyped the expression, for
+example "fish and and scales".
+Please try another query.',
+'matchtotals'	=> "The query \"$1\" matched $2 page titles
+and the text of $3 pages.",
+'noexactmatch' => "'''There is no page titled \"$1\".''' You can [[:$1|create this page]].",
+'titlematches'	=> 'Article title matches',
+'notitlematches' => 'No page title matches',
+'textmatches'	=> 'Page text matches',
+'notextmatches'	=> 'No page text matches',
+'prevn'			=> "previous $1",
+'nextn'			=> "next $1",
+'viewprevnext'	=> "View ($1) ($2) ($3).",
+'showingresults' => "Showing below up to {{PLURAL:$1|'''1''' result|'''$1''' results}} starting with #'''$2'''.",
+'showingresultsnum' => "Showing below {{PLURAL:$3|'''1''' result|'''$3''' results}} starting with #'''$2'''.",
+'nonefound'		=> "'''Note''': Unsuccessful searches are
+often caused by searching for common words like \"have\" and \"from\",
+which are not indexed, or by specifying more than one search term (only pages
+containing all of the search terms will appear in the result).",
+'powersearch' => 'Search',
+'powersearchtext' => "Search in namespaces:<br />$1<br />$2 List redirects<br />Search for $3 $9",
+'searchdisabled' => '{{SITENAME}} search is disabled. You can search via Google in the meantime. Note that their indexes of {{SITENAME}} content may be out of date.',
+
+'googlesearch' => '
+<form method="get" action="http://www.google.com/search" id="googlesearch">
+    <input type="hidden" name="domains" value="{{SERVER}}" />
+    <input type="hidden" name="num" value="50" />
+    <input type="hidden" name="ie" value="$2" />
+    <input type="hidden" name="oe" value="$2" />
+
+    <input type="text" name="q" size="31" maxlength="255" value="$1" />
+    <input type="submit" name="btnG" value="$3" />
+  <div>
+    <input type="radio" name="sitesearch" id="gwiki" value="{{SERVER}}" checked="checked" /><label for="gwiki">{{SITENAME}}</label>
+    <input type="radio" name="sitesearch" id="gWWW" value="" /><label for="gWWW">WWW</label>
+  </div>
+</form>',
+'blanknamespace' => '(Main)',
+
+# Preferences page
+#
+'preferences'	=> 'Preferences',
+'preferences-summary'	=> '',
+'mypreferences'	=> 'My preferences',
+'prefsnologin' => 'Not logged in',
+'prefsnologintext'	=> "You must be [[Special:Userlogin|logged in]] to set user preferences.",
+'prefsreset'	=> 'Preferences have been reset from storage.',
+'qbsettings'	=> 'Quickbar',
+'qbsettings-none'	=> 'None',
+'qbsettings-fixedleft'	=> 'Fixed left',
+'qbsettings-fixedright'	=> 'Fixed right',
+'qbsettings-floatingleft'	=> 'Floating left',
+'qbsettings-floatingright'	=> 'Floating right',
+'changepassword' => 'Change password',
+'skin'			=> 'Skin',
+'math'			=> 'Math',
+'dateformat'		=> 'Date format',
+'datedefault'		=> 'No preference',
+'datetime'		=> 'Date and time',
+'math_failure'		=> 'Failed to parse',
+'math_unknown_error'	=> 'unknown error',
+'math_unknown_function'	=> 'unknown function',
+'math_lexing_error'	=> 'lexing error',
+'math_syntax_error'	=> 'syntax error',
+'math_image_error'	=> 'PNG conversion failed; check for correct installation of latex, dvips, gs, and convert',
+'math_bad_tmpdir'	=> 'Can\'t write to or create math temp directory',
+'math_bad_output'	=> 'Can\'t write to or create math output directory',
+'math_notexvc'	=> 'Missing texvc executable; please see math/README to configure.',
+'prefs-personal' => 'User profile',
+'prefs-rc' => 'Recent changes',
+'prefs-watchlist' => 'Watchlist',
+'prefs-watchlist-days' => 'Number of days to show in watchlist:',
+'prefs-watchlist-edits' => 'Number of edits to show in expanded watchlist:',
+'prefs-misc' => 'Misc',
+'saveprefs'		=> 'Save',
+'resetprefs'	=> 'Reset',
+'oldpassword'	=> 'Old password:',
+'newpassword'	=> 'New password:',
+'retypenew'		=> 'Retype new password:',
+'textboxsize'	=> 'Editing',
+'rows'			=> 'Rows:',
+'columns'		=> 'Columns:',
+'searchresultshead' => 'Search',
+'resultsperpage' => 'Hits per page:',
+'contextlines'	=> 'Lines per hit:',
+'contextchars'	=> 'Context per line:',
+'stubthreshold' => 'Threshold for stub display:',
+'recentchangesdays' => 'Days to show in recent changes:',
+'recentchangescount' => 'Number of edits to show in recent changes:',
+'savedprefs'	=> 'Your preferences have been saved.',
+'timezonelegend' => 'Time zone',
+'timezonetext'	=> 'The number of hours your local time differs from server time (UTC).',
+'localtime'	=> 'Local time',
+'timezoneoffset' => 'Offset¹',
+'servertime'	=> 'Server time',
+'guesstimezone' => 'Fill in from browser',
+'allowemail'		=> 'Enable e-mail from other users',
+'defaultns'		=> 'Search in these namespaces by default:',
+'default'		=> 'default',
+'files'			=> 'Files',
+
+# User rights
+'userrights-lookup-user' => 'Manage user groups',
+'userrights-user-editname' => 'Enter a username:',
+'editusergroup' => 'Edit User Groups',
+'userrights-editusergroup' => 'Edit user groups',
+'saveusergroups' => 'Save User Groups',
+'userrights-groupsmember' => 'Member of:',
+'userrights-groupsavailable' => 'Available groups:',
+'userrights-groupshelp' => 'Select groups you want the user to be removed from or added to.
+Unselected groups will not be changed. You can deselect a group with CTRL + Left Click',
+'userrights-reason' => 'Reason for change:',
+
+# Groups
+'group'                   => 'Group:',
+'group-bot'               => 'Bots',
+'group-sysop'             => 'Sysops',
+'group-bureaucrat'        => 'Bureaucrats',
+'group-all'               => '(all)',
+
+'group-bot-member'        => 'Bot',
+'group-sysop-member'      => 'Sysop',
+'group-bureaucrat-member' => 'Bureaucrat',
+
+'grouppage-bot' => '{{ns:project}}:Bots',
+'grouppage-sysop' => '{{ns:project}}:Administrators',
+'grouppage-bureaucrat' => '{{ns:project}}:Bureaucrats',
+
+# User rights log
+'rightslog'      => 'User rights log',
+'rightslogtext'  => 'This is a log of changes to user rights.',
+'rightslogentry' => 'changed group membership for $1 from $2 to $3',
+'rightsnone'     => '(none)',
+
+# Recent changes
+#
+'nchanges'      => '$1 {{PLURAL:$1|change|changes}}',
+'recentchanges' => 'Recent changes',
+'recentchanges-url' => 'Special:Recentchanges',
+'recentchangestext' => 'Track the most recent changes to the wiki on this page.',
+'recentchanges-feed-description' => 'Track the most recent changes to the wiki in this feed.',
+'rcnote'		=> "Below {{PLURAL:$1|is '''1''' change|are the last '''$1''' changes}} in the last {{PLURAL:$2|day|last '''$2''' days}}, as of $3.",
+'rcnotefrom'	=> "Below are the changes since <b>$2</b> (up to <b>$1</b> shown).",
+'rclistfrom'	=> "Show new changes starting from $1",
+'rcshowhideminor' => '$1 minor edits',
+'rcshowhidebots' => '$1 bots',
+'rcshowhideliu' => '$1 logged-in users',
+'rcshowhideanons' => '$1 anonymous users',
+'rcshowhidepatr' => '$1 patrolled edits',
+'rcshowhidemine' => '$1 my edits',
+'rclinks'		=> "Show last $1 changes in last $2 days<br />$3",
+'diff'			=> 'diff',
+'hist'			=> 'hist',
+'hide'			=> 'Hide',
+'show'			=> 'Show',
+'minoreditletter' => 'm',
+'newpageletter' => 'N',
+'boteditletter' => 'b',
+'sectionlink' => '→',
+'number_of_watching_users_RCview' 	=> '[$1]',
+'number_of_watching_users_pageview' 	=> '[$1 watching user/s]',
+'rc_categories'	=> 'Limit to categories (separate with "|")',
+'rc_categories_any'	=> 'Any',
+'rc-change-size' => '$1',
+
+# Recentchangeslinked
+'recentchangeslinked'           => 'Related changes',
+'recentchangeslinked-noresult'  => 'No changes on linked pages during the given period.',
+'recentchangeslinked-summary'   => "This special page lists the last changes on pages who are linked. Pages on your watchlist are '''bold'''.",
+
+# Upload
+#
+'upload'		=> 'Upload file',
+'uploadbtn'		=> 'Upload file',
+'reupload'		=> 'Re-upload',
+'reuploaddesc'	=> 'Return to the upload form.',
+'uploadnologin' => 'Not logged in',
+'uploadnologintext'	=> "You must be [[Special:Userlogin|logged in]]
+to upload files.",
+'upload_directory_read_only' => 'The upload directory ($1) is not writable by the webserver.',
+'uploaderror'	=> 'Upload error',
+'uploadtext'	=> "Use the form below to upload files, to view or search previously uploaded images go to the [[Special:Imagelist|list of uploaded files]], uploads and deletions are also logged in the [[Special:Log/upload|upload log]].
+
+To include the image in a page, use a link in the form
+'''<nowiki>[[</nowiki>{{ns:image}}<nowiki>:File.jpg]]</nowiki>''',
+'''<nowiki>[[</nowiki>{{ns:image}}<nowiki>:File.png|alt text]]</nowiki>''' or
+'''<nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki>''' for directly linking to the file.",
+'uploadlog'		=> 'upload log',
+'uploadlogpage' => 'Upload log',
+'uploadlogpagetext' => 'Below is a list of the most recent file uploads.',
+'filename'		=> 'Filename',
+'filedesc'		=> 'Summary',
+'fileuploadsummary' => 'Summary:',
+'filestatus' => 'Copyright status',
+'filesource' => 'Source',
+'copyrightpage' => "Project:Copyrights",
+'copyrightpagename' => "{{SITENAME}} copyright",
+'uploadedfiles'	=> 'Uploaded files',
+'ignorewarning'        => 'Ignore warning and save file anyway.',
+'ignorewarnings'	=> 'Ignore any warnings',
+'minlength'		=> 'File names must be at least three letters.',
+'illegalfilename'	=> 'The filename "$1" contains characters that are not allowed in page titles. Please rename the file and try uploading it again.',
+'badfilename'	=> 'File name has been changed to "$1".',
+'filetype-badmime'            => 'Files of the MIME type "$1" are not allowed to be uploaded.',
+'filetype-badtype'            => "'''\".$1\"''' is an unwanted file type
+: List of allowed file types: $2",
+'filetype-missing'            => 'The file has no extension (like ".jpg").',
+'large-file' => 'It is recommended that files are no larger than $1; this file is $2.',
+'largefileserver' => 'This file is bigger than the server is configured to allow.',
+'emptyfile'		      => 'The file you uploaded seems to be empty. This might be due to a typo in the file name. Please check whether you really want to upload this file.',
+'fileexists'		      => 'A file with this name exists already, please check <strong><tt>$1</tt></strong> if you are not sure if you want to change it.',
+'fileexists-extension'        => 'A file with a similar name exists:<br />
+Name of the uploading file: <strong><tt>$1</tt></strong><br />
+Name of the existing file: <strong><tt>$2</tt></strong><br />
+Please choose a different name.',
+'fileexists-thumb'             => "'''<center>Existing image</center>'''",
+'fileexists-thumbnail-yes'     => "The file seems to be an image of reduced size <i>(thumbnail)</i>. Please check the file <strong><tt>$1</tt></strong>.<br />
+If the checked file is the same image of original size it is not necessary to upload an extra thumbnail.",
+'file-thumbnail-no'            => "The filename begins with <strong><tt>$1</tt></strong>. It seems to be an image of reduced size <i>(thumbnail)</i>.
+If you have this image in full resolution upload this one, otherwise change the file name please.",
+'fileexists-forbidden'         => 'A file with this name exists already; please go back and upload this file under a new name. [[Image:$1|thumb|center|$1]]',
+'fileexists-shared-forbidden'  => 'A file with this name exists already in the shared file repository; please go back and upload this file under a new name. [[Image:$1|thumb|center|$1]]',
+'successfulupload' => 'Successful upload',
+'fileuploaded'	=> "File $1 uploaded successfully.
+Please follow this link: $2 to the description page and fill
+in information about the file, such as where it came from, when it was
+created and by whom, and anything else you may know about it. If this is an image, you can insert it like this: <tt><nowiki>[[</nowiki>{{ns:image}}<nowiki>:$1|thumb|Description]]</nowiki></tt>",
+'uploadwarning' => 'Upload warning',
+'savefile'		=> 'Save file',
+'uploadedimage' => "uploaded \"[[$1]]\"",
+'uploaddisabled' => 'Uploads disabled',
+'uploaddisabledtext' => 'File uploads are disabled on this wiki.',
+'uploadscripted' => 'This file contains HTML or script code that may be erroneously be interpreted by a web browser.',
+'uploadcorrupt' => 'The file is corrupt or has an incorrect extension. Please check the file and upload again.',
+'uploadvirus' => 'The file contains a virus! Details: $1',
+'sourcefilename' => 'Source filename',
+'destfilename' => 'Destination filename',
+'watchthisupload'	=> 'Watch this page',
+'filewasdeleted' => 'A file of this name has been previously uploaded and subsequently deleted. You should check the $1 before proceeding to upload it again.',
+
+'upload-proto-error' => 'Incorrect protocol',
+'upload-proto-error-text' => 'Remote upload requires URLs beginning with <code>http://</code> or <code>ftp://</code>.',
+'upload-file-error' => 'Internal error',
+'upload-file-error-text' => 'An internal error occurred when attempting to create a temporary file on the server.  Please contact a system administrator.',
+'upload-misc-error' => 'Unknown upload error',
+'upload-misc-error-text' => 'An unknown error occurred during the upload.  Please verify that the URL is valid and accessible and try again.  If the problem persists, contact a system administrator.',
+# Some likely curl errors.  More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
+'upload-curl-error6' => "Couldn't reach URL",
+'upload-curl-error6-text' => 'The URL provided could not be reached.  Please double-check that the URL is correct and the site is up.',
+'upload-curl-error28' => 'Upload timeout',
+'upload-curl-error28-text' => 'The site took too long to respond. Please check the site is up, wait a short while and try again. You may want to try at a less busy time.',
+
+'license' => 'Licensing',
+'nolicense' => 'None selected',
+'licenses' => '-', # Don't duplicate this in translations
+'upload_source_url' => ' (a valid, publicly accessible URL)',
+'upload_source_file' => ' (a file on your computer)',
+
+# Image list
+#
+'imagelist'		=> 'File list',
+'imagelist-summary' => '',
+'imagelisttext' => "Below is a list of '''$1''' {{plural:$1|file|files}} sorted $2.",
+'imagelistforuser' => "This shows only images uploaded by $1.",
+'getimagelist'	=> 'fetching file list',
+'ilsubmit'		=> 'Search',
+'showlast'		=> 'Show last $1 files sorted $2.',
+'byname'		=> 'by name',
+'bydate'		=> 'by date',
+'bysize'		=> 'by size',
+'imgdelete'		=> 'del',
+'imgdesc'		=> 'desc',
+'imgfile'       => 'file',
+'imglegend'		=> 'Legend: (desc) = show/edit file description.',
+'imghistory'	=> 'File history',
+'revertimg'		=> 'rev',
+'deleteimg'		=> 'del',
+'deleteimgcompletely'		=> 'Delete all revisions of this file',
+'imghistlegend' => 'Legend: (cur) = this is the current file, (del) = delete
+this old version, (rev) = revert to this old version.
+<br /><i>Click on date to see the file uploaded on that date</i>.',
+'imagelinks'	=> 'Links',
+'linkstoimage'	=> 'The following pages link to this file:',
+'nolinkstoimage' => 'There are no pages that link to this file.',
+'sharedupload' => 'This file is a shared upload and may be used by other projects.',
+'shareduploadwiki' => 'Please see the $1 for further information.',
+'shareduploadwiki-linktext' => 'file description page',
+'shareddescriptionfollows' => '-',
+'noimage'       => 'No file by this name exists, you can $1.',
+'noimage-linktext'       => 'upload it',
+'uploadnewversion-linktext' => 'Upload a new version of this file',
+'imagelist_date' => 'Date',
+'imagelist_name' => 'Name',
+'imagelist_user' => 'User',
+'imagelist_size' => 'Size (bytes)',
+'imagelist_description' => 'Description',
+'imagelist_search_for' => 'Search for image name:',
+
+# Mime search
+#
+'mimesearch' => 'MIME search',
+'mimesearch-summary' => 'This page enables the filtering of files for its MIME-type. Input: contenttype/subtype, e.g. <tt>image/jpeg</tt>.',
+'mimetype' => 'MIME type:',
+'download' => 'download',
+
+# Unwatchedpages
+#
+'unwatchedpages' => 'Unwatched pages',
+'unwatchedpages-summary' => '',
+
+# List redirects
+'listredirects' => 'List redirects',
+'listredirects-summary' => '',
+
+# Unused templates
+'unusedtemplates' => 'Unused templates',
+'unusedtemplates-summary' => '',
+'unusedtemplatestext' => 'This page lists all pages in the template namespace which are not included in another page. Remember to check for other links to the templates before deleting them.',
+'unusedtemplateswlh' => 'other links',
+
+# Random redirect
+'randomredirect' => 'Random redirect',
+'randomredirect-nopages' => 'There are no redirects in this namespace.',
+
+# Statistics
+#
+'statistics'	=> 'Statistics',
+'sitestats'		=> '{{SITENAME}} statistics',
+'userstats'		=> 'User statistics',
+'sitestatstext' => "There {{PLURAL:$1|is '''1''' page|are '''$1''' total pages}} in the database.
+This includes \"talk\" pages, pages about {{SITENAME}}, minimal \"stub\"
+pages, redirects, and others that probably don't qualify as content pages.
+Excluding those, there {{PLURAL:$2|is '''1''' page that is a|are '''$2''' pages that are}} probably legitimate
+content {{PLURAL:$2|page|pages}}. 
+
+'''$8''' {{PLURAL:$8|file|files}} have been uploaded.
+
+There have been a total of '''$3''' {{PLURAL:$3|page view|page views}}, and '''$4''' {{PLURAL:$4|page edit|page edits}}
+since {{SITENAME}} was setup.
+That comes to '''$5''' average edits per page, and '''$6''' views per edit.
+
+The [http://meta.wikimedia.org/wiki/Help:Job_queue job queue] length is '''$7'''.",
+'userstatstext' => "There {{PLURAL:$1|is '''1''' registered user|are '''$1''' registered users}}, of which
+'''$2''' (or '''$4%''') {{PLURAL:$2|has|have}} $5 rights.",
+'statistics-mostpopular' => 'Most viewed pages',
+'statistics-footer' => '',
+
+'disambiguations'	=> 'Disambiguation pages',
+'disambiguations-summary'	=> '',
+'disambiguationspage'	=> 'Template:disambig',
+'disambiguations-text'	=> "The following pages link to a '''disambiguation page'''. They should link to the appropriate topic instead.<br />A page is treated as disambiguation page if it uses a template which is linked from [[MediaWiki:disambiguationspage]]",
+
+'doubleredirects'	=> 'Double redirects',
+'doubleredirects-summary'	=> '',
+'doubleredirectstext'	=> "Each row contains links to the first and second redirect, as well as the first line of the second redirect text, usually giving the \"real\" target page, which the first redirect should point to.",
+
+'brokenredirects'	=> 'Broken redirects',
+'brokenredirects-summary'	=> '',
+'brokenredirectstext'	=> 'The following redirects link to non-existent pages:',
+'brokenredirects-edit' => '(edit)',
+'brokenredirects-delete' => '(delete)',
+
+'withoutinterwiki' => 'Pages without language links',
+'withoutinterwiki-header' => 'The following pages do not link to other language versions:',
+'withoutinterwiki-summary' => '',
+
+'fewestrevisions' => 'Articles with the fewest revisions',
+'fewestrevisions-summary' => '',
+
+# Miscellaneous special pages
+#
+'nbytes'		=> '$1 {{PLURAL:$1|byte|bytes}}',
+'ncategories'		=> '$1 {{PLURAL:$1|category|categories}}',
+'nlinks'		=> '$1 {{PLURAL:$1|link|links}}',
+'nmembers'		=> '$1 {{PLURAL:$1|member|members}}',
+'nrevisions'		=> '$1 {{PLURAL:$1|revision|revisions}}',
+'nviews'		=> '$1 {{PLURAL:$1|view|views}}',
+'specialpage-empty'     => 'This page is empty.',
+'lonelypages'	=> 'Orphaned pages',
+'lonelypages-summary'	=> '',
+'lonelypagestext'	=> 'The following pages are not linked from other pages in this wiki.',
+'uncategorizedpages'	=> 'Uncategorized pages',
+'uncategorizedpages-summary' => '',
+'uncategorizedcategories'	=> 'Uncategorized categories',
+'uncategorizedcategories-summary' => '',
+'uncategorizedimages' => 'Uncategorized images',
+'uncategorizedimages-summary' => '',
+'unusedcategories' => 'Unused categories',
+'unusedimages'	=> 'Unused files',
+'popularpages'	=> 'Popular pages',
+'popularpages-summary' => '',
+'wantedcategories' => 'Wanted categories',
+'wantedcategories-summary' => '',
+'wantedpages'	=> 'Wanted pages',
+'wantedpages-summary' => '',
+'mostlinked'	=> 'Most linked to pages',
+'mostlinked-summary' => '',
+'mostlinkedcategories' => 'Most linked to categories',
+'mostlinkedcategories-summary' => '',
+'mostcategories' => 'Articles with the most categories',
+'mostcategories-summary' => '',
+'mostimages'	=> 'Most linked to images',
+'mostimages-summary' => '',
+'mostrevisions' => 'Articles with the most revisions',
+'mostrevisions-summary' => '',
+'allpages'		=> 'All pages',
+'allpages-summary'	=> '',
+'prefixindex'   => 'Prefix index',
+'prefixindex-summary' => '',
+'randompage'	=> 'Random page',
+'randompage-nopages'	=> 'There are no pages in this namespace.',
+'randompage-url'=> 'Special:Random',
+'shortpages'	=> 'Short pages',
+'shortpages-summary'     => '',
+'longpages'		=> 'Long pages',
+'longpages-summary'	=> '',
+'deadendpages'  => 'Dead-end pages',
+'deadendpages-summary'	=> '',
+'deadendpagestext'	=> 'The following pages do not link to other pages in this wiki.',
+'protectedpages' => 'Protected pages',
+'protectedpages-summary' => '',
+'protectedpagestext' => 'The following pages are protected from moving or editing',
+'protectedpagesempty'   => 'No pages are currently protected with these parameters.',
+'listusers'		=> 'User list',
+'listusers-summary'	=> '',
+'specialpages'	=> 'Special pages',
+'specialpages-summary'	=> '',
+'spheading'		=> 'Special pages for all users',
+'restrictedpheading'	=> 'Restricted special pages',
+'rclsub'		=> "(to pages linked from \"$1\")",
+'newpages'		=> 'New pages',
+'newpages-summary'	=> '',
+'newpages-username' => 'Username:',
+'ancientpages'		=> 'Oldest pages',
+'ancientpages-summary'	=> '',
+'intl'		=> 'Interlanguage links',
+'move' => 'Move',
+'movethispage'	=> 'Move this page',
+'unusedimagestext' => '<p>Please note that other web sites may link to an image with
+a direct URL, and so may still be listed here despite being
+in active use.</p>',
+'unusedcategoriestext' => 'The following category pages exist although no other article or category make use of them.',
+
+# Book sources
+'booksources'	=> 'Book sources',
+'booksources-summary'	=> '',
+'booksources-search-legend' => 'Search for book sources',
+'booksources-isbn' => 'ISBN:',
+'booksources-go' => 'Go',
+'booksources-text' => 'Below is a list of links to other sites that sell new and used books, and may also have
+further information about books you are looking for:',
+
+'categoriespagetext' => 'The following categories exist in the wiki.',
+'data'	=> 'Data',
+'userrights' => 'User rights management',
+'userrights-summary' => '',
+'groups' => 'User groups',
+
+'isbn'	=> 'ISBN',
+'rfcurl' =>  'http://tools.ietf.org/html/rfc$1',
+'pubmedurl' =>  'http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=Retrieve&db=pubmed&dopt=Abstract&list_uids=$1',
+'alphaindexline' => "$1 to $2",
+'version'		=> 'Version',
+
+# Special:Logs
+'specialloguserlabel'  => 'User:',
+'speciallogtitlelabel' => 'Title:',
+'log'                  => 'Logs',
+'log-search-legend' => 'Search for logs',
+'log-search-submit' => 'Go',
+'alllogstext'          => 'Combined display of all available logs of {{SITENAME}}.
+You can narrow down the view by selecting a log type, the user name, or the affected page.',
+'logempty'             => 'No matching items in log.',
+'log-title-wildcard' => 'Search titles starting with this text',
+
+# Special:Allpages
+'nextpage'          => 'Next page ($1)',
+'prevpage'          => 'Previous page ($1)',
+'allpagesfrom'		=> 'Display pages starting at:',
+'allarticles'		=> 'All articles',
+'allinnamespace'	=> 'All pages ($1 namespace)',
+'allnotinnamespace'	=> 'All pages (not in $1 namespace)',
+'allpagesprev'		=> 'Previous',
+'allpagesnext'		=> 'Next',
+'allpagessubmit'	=> 'Go',
+'allpagesprefix'	=> 'Display pages with prefix:',
+'allpagesbadtitle'	=> 'The given page title was invalid or had an inter-language or inter-wiki prefix. It may contain one or more characters which cannot be used in titles.',
+
+# Special:Listusers
+'listusersfrom'      => 'Display users starting at:',
+'listusers-submit'   => 'Show',
+'listusers-noresult' => 'No user found.',
+
+# Email this user
+#
+'mailnologin'	=> 'No send address',
+'mailnologintext' => "You must be [[Special:Userlogin|logged in]]
+and have a valid e-mail address in your [[Special:Preferences|preferences]]
+to send e-mail to other users.",
+'emailuser'		=> 'E-mail this user',
+'emailpage'		=> 'E-mail user',
+'emailpagetext'	=> 'If this user has entered a valid e-mail address in
+his or her user preferences, the form below will send a single message.
+The e-mail address you entered in your user preferences will appear
+as the "From" address of the mail, so the recipient will be able
+to reply.',
+'usermailererror' => 'Mail object returned error:',
+'defemailsubject'  => "{{SITENAME}} e-mail",
+'noemailtitle'	=> 'No e-mail address',
+'noemailtext'	=> 'This user has not specified a valid e-mail address,
+or has chosen not to receive e-mail from other users.',
+'emailfrom'		=> 'From',
+'emailto'		=> 'To',
+'emailsubject'	=> 'Subject',
+'emailmessage'	=> 'Message',
+'emailsend'		=> 'Send',
+'emailccme'     => 'E-mail me a copy of my message.',
+'emailccsubject'=> 'Copy of your message to $1: $2',
+'emailsent'		=> 'E-mail sent',
+'emailsenttext' => 'Your e-mail message has been sent.',
+
+# Watchlist
+'watchlist'			=> 'My watchlist',
+'mywatchlist'			=> 'My watchlist',
+'watchlistfor' => "(for '''$1''')",
+'nowatchlist'		=> 'You have no items on your watchlist.',
+'watchlistanontext' => 'Please $1 to view or edit items on your watchlist.',
+'watchlistcount' 	=> "'''You have {{PLURAL:$1|$1 item|$1 items}} on your watchlist, including talk pages.'''",
+'clearwatchlist' 	=> 'Clear watchlist',
+'watchlistcleartext' => 'Are you sure you wish to remove them?',
+'watchlistclearbutton' => 'Clear watchlist',
+'watchlistcleardone' => 'Your watchlist has been cleared. {{PLURAL:$1|$1 item was|$1 items were}} removed.',
+'watchnologin'		=> 'Not logged in',
+'watchnologintext'	=> 'You must be [[Special:Userlogin|logged in]] to modify your watchlist.',
+'addedwatch'		=> 'Added to watchlist',
+'addedwatchtext'	=> "The page \"[[:$1]]\" has been added to your [[Special:Watchlist|watchlist]].
+Future changes to this page and its associated Talk page will be listed there,
+and the page will appear '''bolded''' in the [[Special:Recentchanges|list of recent changes]] to
+make it easier to pick out.
+
+If you want to remove the page from your watchlist later, click \"Unwatch\" in the sidebar.",
+'removedwatch'		=> 'Removed from watchlist',
+'removedwatchtext' 	=> "The page \"[[:$1]]\" has been removed from your watchlist.",
+'watch' => 'Watch',
+'watchthispage'		=> 'Watch this page',
+'unwatch' => 'Unwatch',
+'unwatchthispage' 	=> 'Stop watching',
+'notanarticle'		=> 'Not a content page',
+'watchnochange' 	=> 'None of your watched items was edited in the time period displayed.',
+'watchdetails'		=> '* {{PLURAL:$1|$1 page|$1 pages}} watched not counting talk pages
+* [[Special:Watchlist/edit|Show and edit complete watchlist]]
+* [[Special:Watchlist/clear|Remove all pages]]',
+'wlheader-enotif' 		=> "* E-mail notification is enabled.",
+'wlheader-showupdated'   => "* Pages which have been changed since you last visited them are shown in '''bold'''",
+'watchmethod-recent'=> 'checking recent edits for watched pages',
+'watchmethod-list'	=> 'checking watched pages for recent edits',
+'removechecked' 	=> 'Remove checked items from watchlist',
+'watchlistcontains' => "Your watchlist contains $1 {{PLURAL:$1|page|pages}}.",
+'watcheditlist'		=> 'Here\'s an alphabetical list of your
+watched content pages. Check the boxes of pages you want to remove from your watchlist and click the \'remove checked\' button
+at the bottom of the screen (deleting a content page also deletes the accompanying talk page and vice versa).',
+'removingchecked' 	=> 'Removing requested items from watchlist...',
+'couldntremove' 	=> "Couldn't remove item '$1'...",
+'iteminvalidname' 	=> "Problem with item '$1', invalid name...",
+'wlnote' 		=> "Below {{PLURAL:$1|is the last change|are the last '''$1''' changes}} in the last {{PLURAL:$2|hour|'''$2''' hours}}.",
+'wlshowlast' 		=> 'Show last $1 hours $2 days $3',
+'wlsaved'		=> 'This is a saved version of your watchlist.',
+'watchlist-show-bots' => 'Show bot edits',
+'watchlist-hide-bots' => 'Hide bot edits',
+'watchlist-show-own' => 'Show my edits',
+'watchlist-hide-own' => 'Hide my edits',
+'watchlist-show-minor' => 'Show minor edits',
+'watchlist-hide-minor' => 'Hide minor edits',
+'wldone'			=> 'Done.',
+# Displayed when you click the "watch" button and it's in the process of watching
+'watching' => 'Watching...',
+'unwatching' => 'Unwatching...',
+
+'enotif_mailer' 		=> '{{SITENAME}} Notification Mailer',
+'enotif_reset'			=> 'Mark all pages visited',
+'enotif_newpagetext'=> 'This is a new page.',
+'changed'			=> 'changed',
+'created'			=> 'created',
+'enotif_subject' 	=> '{{SITENAME}} page $PAGETITLE has been $CHANGEDORCREATED by $PAGEEDITOR',
+'enotif_lastvisited' => 'See $1 for all changes since your last visit.',
+'enotif_body' => 'Dear $WATCHINGUSERNAME,
+
+the {{SITENAME}} page $PAGETITLE has been $CHANGEDORCREATED on $PAGEEDITDATE by $PAGEEDITOR, see $PAGETITLE_URL for the current version.
+
+$NEWPAGE
+
+Editor\'s summary: $PAGESUMMARY $PAGEMINOREDIT
+
+Contact the editor:
+mail: $PAGEEDITOR_EMAIL
+wiki: $PAGEEDITOR_WIKI
+
+There will be no other notifications in case of further changes unless you visit this page. You could also reset the notification flags for all your watched pages on your watchlist.
+
+             Your friendly {{SITENAME}} notification system
+
+--
+To change your watchlist settings, visit
+{{fullurl:{{ns:special}}:Watchlist/edit}}
+
+Feedback and further assistance:
+{{fullurl:{{MediaWiki:helppage}}}}',
+
+# Delete/protect/revert
+#
+'deletepage'	=> 'Delete page',
+'confirm'		=> 'Confirm',
+'excontent' => "content was: '$1'",
+'excontentauthor' => "content was: '$1' (and the only contributor was '[[Special:Contributions/$2|$2]]')",
+'exbeforeblank' => "content before blanking was: '$1'",
+'exblank' => 'page was empty',
+'confirmdelete' => 'Confirm delete',
+'deletesub'		=> "(Deleting \"$1\")",
+'historywarning' => 'Warning: The page you are about to delete has a history:',
+'confirmdeletetext' => "You are about to permanently delete a page
+or image along with all of its history from the database.
+Please confirm that you intend to do this, that you understand the
+consequences, and that you are doing this in accordance with
+[[{{MediaWiki:policy-url}}]].",
+'policy-url' => 'Project:Policy',
+'actioncomplete' => 'Action complete',
+'deletedtext'	=> "\"$1\" has been deleted.
+See $2 for a record of recent deletions.",
+'deletedarticle' => "deleted \"[[$1]]\"",
+'dellogpage'	=> 'Deletion log',
+'dellogpagetext' => 'Below is a list of the most recent deletions.',
+'deletionlog'	=> 'deletion log',
+'reverted'		=> 'Reverted to earlier revision',
+'deletecomment'	=> 'Reason for deletion',
+'imagereverted' => 'Revert to earlier version was successful.',
+'rollback'		=> 'Roll back edits',
+'rollback_short' => 'Rollback',
+'rollbacklink'	=> 'rollback',
+'rollbackfailed' => 'Rollback failed',
+'cantrollback'	=> 'Cannot revert edit; last contributor is only author of this page.',
+'alreadyrolled'	=> "Cannot rollback last edit of [[:$1]]
+by [[User:$2|$2]] ([[User talk:$2|Talk]]); someone else has edited or rolled back the page already.
+
+Last edit was by [[User:$3|$3]] ([[User talk:$3|Talk]]).",
+#   only shown if there is an edit comment
+'editcomment' => "The edit comment was: \"<i>$1</i>\".",
+'revertpage'	=> "Reverted edits by [[Special:Contributions/$2|$2]] ([[User talk:$2|Talk]]); changed back to last version by [[User:$1|$1]]",
+'sessionfailure' => 'There seems to be a problem with your login session;
+this action has been canceled as a precaution against session hijacking.
+Please hit "back" and reload the page you came from, then try again.',
+'protectlogpage' => 'Protection log',
+'protectlogtext' => "Below is a list of page locks and unlocks. See the [[Special:Protectedpages|protected pages list]] for the list of currently operational page protections.",
+'protectedarticle' => 'protected "[[$1]]"',
+'unprotectedarticle' => 'unprotected "[[$1]]"',
+'protectsub' => '(Protecting "$1")',
+'confirmprotecttext' => 'Do you really want to protect this page?',
+'confirmprotect' => 'Confirm protection',
+'protectmoveonly' => 'Protect from moves only',
+'protectcomment' => 'Reason for protecting',
+'protectexpiry' => 'Expiry',
+'protect_expiry_invalid'	=> 'Expiry time is invalid.',
+'protect_expiry_old'	=> 'Expiry time is in the past.',
+'unprotectsub' =>"(Unprotecting \"$1\")",
+'confirmunprotecttext' => 'Do you really want to unprotect this page?',
+'confirmunprotect' => 'Confirm unprotection',
+'unprotectcomment' => 'Reason for unprotecting',
+'protect-unchain' => 'Unlock move permissions',
+'protect-text' => 'You may view and change the protection level here for the page <strong>$1</strong>.',
+'protect-locked-blocked' => 'You cannot change protection levels while blocked. Here are the
+current settings for the page <strong>$1</strong>:',
+'protect-locked-dblock' => 'Protection levels cannot be changed due to an active database lock.
+Here are the current settings for the page <strong>$1</strong>:',
+'protect-locked-access' => 'Your account does not have permission to change page protection levels.
+Here are the current settings for the page <strong>$1</strong>:',
+'protect-cascadeon' => "This page is currently protected because it is included in the following {{PLURAL:$1|page, which has|pages, which have}} cascading protection turned on. You can change this page's protection level, but it will not affect the cascading protection.",
+'protect-default' => '(default)',
+'protect-level-autoconfirmed' => 'Block unregistered users',
+'protect-level-sysop' => 'Sysops only',
+'protect-summary-cascade' => 'cascading',
+'protect-expiring' => 'expires $1 (UTC)',
+'protect-cascade' => 'Cascading protection - protect any pages included in this page.',
+'restriction-type' => 'Permission',
+'restriction-level' => 'Restriction level',
+'minimum-size' => 'Minimum size (bytes)',
+
+# restrictions (nouns)
+'restriction-edit' => 'Edit',
+'restriction-move' => 'Move',
+
+# restriction levels
+'restriction-level-sysop' => 'full protected',
+'restriction-level-autoconfirmed' => 'semi protected',
+'restriction-level-all' => 'any level',
+
+
+# Undelete
+'undelete' => 'View deleted pages',
+'undeletepage' => 'View and restore deleted pages',
+'viewdeletedpage' => 'View deleted pages',
+'undeletepagetext' => 'The following pages have been deleted but are still in the archive and
+can be restored. The archive may be periodically cleaned out.',
+'undeleteextrahelp' => "To restore the entire page, leave all checkboxes deselected and
+click '''''Restore'''''. To perform a selective restoration, check the boxes corresponding to the
+revisions to be restored, and click '''''Restore'''''. Clicking '''''Reset''''' will clear the
+comment field and all checkboxes.",
+'undeleterevisions' => "$1 {{PLURAL:$1|revision|revisions}} archived",
+'undeletehistory' => 'If you restore the page, all revisions will be restored to the history.
+If a new page with the same name has been created since the deletion, the restored
+revisions will appear in the prior history, and the current revision of the live page
+will not be automatically replaced. Also note that restrictions on file revisions are lost upon restoration', 
+'undeleterevdel' => 'Undeletion will not be performed if it will result in the top page revision being
+partially deleted. In such cases, you must uncheck or unhide the newest deleted revisions. Revisions of files 
+that you don\'t have permission to view will not be restored.',
+'undeletehistorynoadmin' => 'This article has been deleted. The reason for deletion is
+shown in the summary below, along with details of the users who had edited this page
+before deletion. The actual text of these deleted revisions is only available to administrators.',
+'undelete-revision' => 'Deleted revision of $1 from $2:',
+'undeleterevision-missing' => "Invalid or missing revision. You may have a bad link, or the
+revision may have been restored or removed from the archive.",
+'undeletebtn' => 'Restore',
+'undeletereset' => 'Reset',
+'undeletecomment' => 'Comment:',
+'undeletedarticle' => "restored \"[[$1]]\"",
+'undeletedrevisions' => "$1 {{plural:$1|revision|revisions}} restored",
+'undeletedrevisions-files' => "$1 {{plural:$1|revision|revisions}} and $2 {{plural:$2|file|files}} restored",
+'undeletedfiles' => "$1 {{plural:$1|file|files}} restored",
+'cannotundelete' => 'Undelete failed; someone else may have undeleted the page first.',
+'undeletedpage' => "<big>'''$1 has been restored'''</big>
+
+Consult the [[Special:Log/delete|deletion log]] for a record of recent deletions and restorations.",
+'undelete-header' => 'See [[Special:Log/delete|the deletion log]] for recently deleted pages.',
+'undelete-search-box' => 'Search deleted pages',
+'undelete-search-prefix' => 'Show pages starting with:',
+'undelete-search-submit' => 'Search',
+'undelete-no-results' => 'No matching pages found in the deletion archive.',
+
+# Namespace form on various pages
+'namespace' => 'Namespace:',
+'invert' => 'Invert selection',
+
+# Contributions
+#
+'contributions' => 'User contributions',
+'mycontris'     => 'My contributions',
+'contribsub2'    => "For $1 ($2)",
+'nocontribs'    => 'No changes were found matching these criteria.',
+'ucnote'        => "Below are this user's last <b>$1</b> changes in the last <b>$2</b> days.",
+'uclinks'       => "View the last $1 changes; view the last $2 days.",
+'uctop'         => ' (top)' ,
+
+'sp-contributions-newest'      => 'Newest',
+'sp-contributions-oldest'      => 'Oldest',
+'sp-contributions-newer'       => 'Newer $1',
+'sp-contributions-older'       => 'Older $1',
+'sp-contributions-newbies'     => 'Show contributions of new accounts only',
+'sp-contributions-newbies-sub' => 'For new accounts',
+'sp-contributions-blocklog'    => 'Block log',
+'sp-contributions-search'      => 'Search for contributions',
+'sp-contributions-username'    => 'IP Address or username:',
+'sp-contributions-submit'      => 'Search',
+'sp-contributions-footer' => '-',
+'sp-contributions-footer-anon' => '-',
+
+'sp-newimages-showfrom' => 'Show new images starting from $1',
+
+# What links here
+#
+'whatlinkshere'         => 'What links here',
+'whatlinkshere-summary'	=> '',
+'whatlinkshere-barrow'  => '&lt;',
+'notargettitle'         => 'No target',
+'notargettext'          => 'You have not specified a target page or user
+to perform this function on.',
+'linklistsub'           => '(List of links)',
+'linkshere'             => "The following pages link to '''[[:$1]]''':",
+'nolinkshere'           => "No pages link to '''[[:$1]]'''.",
+'nolinkshere-ns'        => "No pages link to '''[[:$1]]''' in the chosen namespace.",
+'isredirect'            => 'redirect page',
+'istemplate'            => 'inclusion',
+'whatlinkshere-prev'    => '{{PLURAL:$1|previous|previous $1}}',
+'whatlinkshere-next'    => '{{PLURAL:$1|next|next $1}}',
+
+# Block/unblock IP
+#
+'blockip'		=> 'Block user',
+'blockiptext'	=> "Use the form below to block write access
+from a specific IP address or username.
+This should be done only to prevent vandalism, and in
+accordance with [[{{MediaWiki:policy-url}}|policy]].
+Fill in a specific reason below (for example, citing particular
+pages that were vandalized).",
+'ipaddress'		=> 'IP Address',
+'ipadressorusername' => 'IP Address or username',
+'ipbexpiry'		=> 'Expiry',
+'ipbreason'		=> 'Reason',
+'ipbreasonotherlist'    => 'Other reason',
+
+// These are examples only. They can be translated but should be adjusted via
+// [[MediaWiki:ipbreason-list]] by the local community
+// defines a block reason not part of a group
+// * defines a block reason group in the drow down menu
+// ** defines a block reason
+// To disable this drop down menu enter '-' in [[MediaWiki:ipbreason-dropdown]].
+'ipbreason-dropdown'    => '
+*Common block reasons
+** Inserting false information
+** Removing content from pages
+** Spamming links to external sites
+** Inserting nonsense/gibberish into pages
+** Intimidating behaviour/harassment
+** Abusing multiple accounts
+** Unacceptable username',
+'ipbanononly'   => 'Block anonymous users only',
+'ipbcreateaccount' => 'Prevent account creation',
+'ipbenableautoblock' => 'Automatically block the last IP address used by this user, and any subsequent IPs they try to edit from',
+'ipbsubmit'		=> 'Block this user',
+'ipbother'		=> 'Other time',
+'ipboptions'		=> '2 hours:2 hours,1 day:1 day,3 days:3 days,1 week:1 week,2 weeks:2 weeks,1 month:1 month,3 months:3 months,6 months:6 months,1 year:1 year,infinite:infinite',
+'ipbotheroption'	=> 'other',
+'ipbotherreason'        => 'Other/additional reason',
+'ipbhidename'		=> 'Hide username/IP from the block log, active block list and user list',
+'badipaddress'	=> 'Invalid IP address',
+'blockipsuccesssub' => 'Block succeeded',
+'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] has been blocked.
+<br />See [[Special:Ipblocklist|IP block list]] to review blocks.',
+'ipb-edit-dropdown' => 'Edit block reasons',
+'ipb-unblock-addr' => 'Unblock $1',
+'ipb-unblock' => 'Unblock a username or IP address',
+'ipb-blocklist-addr' => 'View existing blocks for $1',
+'ipb-blocklist' => 'View existing blocks',
+'unblockip'		=> 'Unblock user',
+'unblockiptext'	=> 'Use the form below to restore write access
+to a previously blocked IP address or username.',
+'ipusubmit'		=> 'Unblock this address',
+'unblocked' => '[[User:$1|$1]] has been unblocked',
+'ipblocklist'	=> 'List of blocked IP addresses and usernames',
+'ipblocklist-summary'	=> '',
+'ipblocklist-submit'    => 'Search',
+'blocklistline'	=> "$1, $2 blocked $3 ($4)",
+'infiniteblock' => 'infinite',
+'expiringblock' => 'expires $1',
+'anononlyblock' => 'anon. only',
+'noautoblockblock' => 'autoblock disabled',
+'createaccountblock' => 'account creation blocked',
+'ipblocklistempty'	=> 'The blocklist is empty or the requested IP address/username is not blocked.',
+'blocklink'		=> 'block',
+'unblocklink'	=> 'unblock',
+'contribslink'	=> 'contribs',
+'autoblocker'	=> 'Autoblocked because your IP address has been recently used by "[[User:$1|$1]]". The reason given for $1\'s block is: "$2"',
+'blocklogpage'	=> 'Block log',
+'blocklogentry'	=> 'blocked "[[$1]]" with an expiry time of $2 $3',
+'blocklogtext'	=> 'This is a log of user blocking and unblocking actions. Automatically
+blocked IP addresses are not listed. See the [[Special:Ipblocklist|IP block list]] for
+the list of currently operational bans and blocks.',
+'unblocklogentry'	=> 'unblocked $1',
+'block-log-flags-anononly' => 'anonymous users only',
+'block-log-flags-nocreate' => 'account creation disabled',
+'block-log-flags-noautoblock' => 'autoblock disabled',
+'range_block_disabled'	=> 'The sysop ability to create range blocks is disabled.',
+'ipb_expiry_invalid'	=> 'Expiry time invalid.',
+'ipb_already_blocked' => '"$1" is already blocked',
+'ip_range_invalid'	=> 'Invalid IP range.',
+'proxyblocker'	=> 'Proxy blocker',
+'ipb_cant_unblock' => 'Error: Block ID $1 not found. It may have been unblocked already.',
+'proxyblockreason'	=> 'Your IP address has been blocked because it is an open proxy. Please contact your Internet service provider or tech support and inform them of this serious security problem.',
+'proxyblocksuccess'	=> 'Done.',
+'sorbs'         => 'DNSBL',
+'sorbsreason'   => 'Your IP address is listed as an open proxy in the DNSBL used by this site.',
+'sorbs_create_account_reason' => 'Your IP address is listed as an open proxy in the DNSBL used by this site. You cannot create an account',
+
+
+# Developer tools
+#
+'lockdb'		=> 'Lock database',
+'unlockdb'		=> 'Unlock database',
+'lockdbtext'	=> 'Locking the database will suspend the ability of all
+users to edit pages, change their preferences, edit their watchlists, and
+other things requiring changes in the database.
+Please confirm that this is what you intend to do, and that you will
+unlock the database when your maintenance is done.',
+'unlockdbtext'	=> 'Unlocking the database will restore the ability of all
+users to edit pages, change their preferences, edit their watchlists, and
+other things requiring changes in the database.
+Please confirm that this is what you intend to do.',
+'lockconfirm'	=> 'Yes, I really want to lock the database.',
+'unlockconfirm'	=> 'Yes, I really want to unlock the database.',
+'lockbtn'		=> 'Lock database',
+'unlockbtn'		=> 'Unlock database',
+'locknoconfirm' => 'You did not check the confirmation box.',
+'lockdbsuccesssub' => 'Database lock succeeded',
+'unlockdbsuccesssub' => 'Database lock removed',
+'lockdbsuccesstext' => 'The database has been locked.
+<br />Remember to [[Special:Unlockdb|remove the lock]] after your maintenance is complete.',
+'unlockdbsuccesstext' => 'The database has been unlocked.',
+'lockfilenotwritable' => 'The database lock file is not writable. To lock or unlock the database, this needs to be writable by the web server.',
+'databasenotlocked' => 'The database is not locked.',
+
+# Move page
+#
+'movepage'		=> 'Move page',
+'movepagetext'	=> 'Using the form below will rename a page, moving all
+of its history to the new name.
+The old title will become a redirect page to the new title.
+Links to the old page title will not be changed; be sure to
+check for double or broken redirects.
+You are responsible for making sure that links continue to
+point where they are supposed to go.
+
+Note that the page will \'\'\'not\'\'\' be moved if there is already
+a page at the new title, unless it is empty or a redirect and has no
+past edit history. This means that you can rename a page back to where
+it was just renamed from if you make a mistake, and you cannot overwrite
+an existing page.
+
+<b>WARNING!</b>
+This can be a drastic and unexpected change for a popular page;
+please be sure you understand the consequences of this before
+proceeding.',
+'movepagetalktext' => 'The associated talk page will be automatically moved along with it \'\'\'unless:\'\'\'
+*A non-empty talk page already exists under the new name, or
+*You uncheck the box below.
+
+In those cases, you will have to move or merge the page manually if desired.',
+'movearticle'	=> 'Move page',
+'movenologin'	=> 'Not logged in',
+'movenologintext' => "You must be a registered user and [[Special:Userlogin|logged in]]
+to move a page.",
+'newtitle'		=> 'To new title',
+'move-watch' => 'Watch this page',
+'movepagebtn'	=> 'Move page',
+'pagemovedsub'	=> 'Move succeeded',
+'pagemovedtext' => "Page \"[[$1]]\" moved to \"[[$2]]\".",
+'articleexists' => 'A page of that name already exists, or the
+name you have chosen is not valid.
+Please choose another name.',
+'talkexists'	=> "'''The page itself was moved successfully, but the talk page could not be moved because one already exists at the new title. Please merge them manually.'''",
+'movedto'		=> 'moved to',
+'movetalk'		=> 'Move associated talk page',
+'talkpagemoved' => 'The corresponding talk page was also moved.',
+'talkpagenotmoved' => 'The corresponding talk page was <strong>not</strong> moved.',
+'1movedto2'		=> '[[$1]] moved to [[$2]]',
+'1movedto2_redir' => '[[$1]] moved to [[$2]] over redirect',
+'movelogpage' => 'Move log',
+'movelogpagetext' => 'Below is a list of page moved.',
+'movereason'	=> 'Reason',
+'revertmove'	=> 'revert',
+'delete_and_move' => 'Delete and move',
+'delete_and_move_text'	=>
+'==Deletion required==
+
+The destination article "[[$1]]" already exists. Do you want to delete it to make way for the move?',
+'delete_and_move_confirm' => 'Yes, delete the page',
+'delete_and_move_reason' => 'Deleted to make way for move',
+'selfmove' => "Source and destination titles are the same; can't move a page over itself.",
+'immobile_namespace' => "Source or destination title is of a special type; cannot move pages from and into that namespace.",
+
+# Export
+
+'export'		=> 'Export pages',
+'exporttext'	=> 'You can export the text and editing history of a particular page or
+set of pages wrapped in some XML. This can be imported into another wiki using MediaWiki
+via the [[Special:Import|import page]].
+
+To export pages, enter the titles in the text box below, one title per line, and
+select whether you want the current version as well as all old versions, with the page
+history lines, or just the current version with the info about the last edit.
+
+In the latter case you can also use a link, e.g. [[{{ns:Special}}:Export/{{MediaWiki:mainpage}}]] for the page {{MediaWiki:mainpage}}.',
+'exportcuronly'	=> 'Include only the current revision, not the full history',
+'exportnohistory' => "----
+'''Note:''' Exporting the full history of pages through this form has been disabled due to performance reasons.",
+'export-submit' => 'Export',
+'export-addcattext' => 'Add pages from category:',
+'export-addcat' => 'Add',
+
+# Namespace 8 related
+
+'allmessages'	=> 'System messages',
+'allmessagesname' => 'Name',
+'allmessagesdefault' => 'Default text',
+'allmessagescurrent' => 'Current text',
+'allmessagestext'	=> 'This is a list of system messages available in the MediaWiki namespace.',
+'allmessagesnotsupportedUI' => 'Your current interface language <b>$1</b> is not supported by {{ns:special}}:Allmessages at this site.',
+'allmessagesnotsupportedDB' => '\'\'\'{{ns:special}}:Allmessages\'\'\' cannot be used because \'\'\'$wgUseDatabaseMessages\'\'\' is switched off.',
+'allmessagesfilter' => 'Message name filter:',
+'allmessagesmodified' => 'Show only modified',
+
+
+# Thumbnails
+
+'thumbnail-more'	=> 'Enlarge',
+'missingimage'		=> '<b>Missing image</b><br /><i>$1</i>',
+'filemissing'		=> 'File missing',
+'thumbnail_error'   => 'Error creating thumbnail: $1',
+'djvu_page_error'   => 'DjVu page out of range',
+'djvu_no_xml'       => 'Unable to fetch XML for DjVu file',
+'thumbnail_invalid_params' => 'Invalid thumbnail parameters',
+'thumbnail_dest_directory' => 'Unable to create destination directory',
+
+# Special:Import
+'import'	=> 'Import pages',
+'importinterwiki' => 'Transwiki import',
+'import-interwiki-text' => 'Select a wiki and page title to import.
+Revision dates and editors\' names will be preserved.
+All transwiki import actions are logged at the [[Special:Log/import|import log]].',
+'import-interwiki-history' => 'Copy all history versions for this page',
+'import-interwiki-submit' => 'Import',
+'import-interwiki-namespace' => 'Transfer pages into namespace:',
+'importtext'	=> 'Please export the file from the source wiki using the Special:Export utility, save it to your disk and upload it here.',
+'importstart'	=> "Importing pages...",
+'import-revision-count' => '$1 {{PLURAL:$1|revision|revisions}}',
+'importnopages'	=> "No pages to import.",
+'importfailed'	=> "Import failed: $1",
+'importunknownsource'	=> "Unknown import source type",
+'importcantopen'	=> "Couldn't open import file",
+'importbadinterwiki'	=> "Bad interwiki link",
+'importnotext'	=> 'Empty or no text',
+'importsuccess'	=> 'Import succeeded!',
+'importhistoryconflict' => 'Conflicting history revision exists (may have imported this page before)',
+'importnosources' => 'No transwiki import sources have been defined and direct history uploads are disabled.',
+'importnofile' => 'No import file was uploaded.',
+'importuploaderror' => 'Upload of import file failed; perhaps the file is bigger than the allowed upload size.',
+
+# import log
+'importlogpage' => 'Import log',
+'importlogpagetext' => 'Administrative imports of pages with edit history from other wikis.',
+'import-logentry-upload' => 'imported [[$1]] by file upload',
+'import-logentry-upload-detail' => '$1 revision(s)',
+'import-logentry-interwiki' => 'transwikied $1',
+'import-logentry-interwiki-detail' => '$1 revision(s) from $2',
+
+
+# Keyboard access keys for power users
+'accesskey-pt-userpage' => '.',
+'accesskey-pt-anonuserpage' => '.',
+'accesskey-pt-mytalk' => 'n',
+'accesskey-pt-anontalk' => 'n',
+'accesskey-pt-preferences' => '',
+'accesskey-pt-watchlist' => 'l',
+'accesskey-pt-mycontris' => 'y',
+'accesskey-pt-login' => 'o',
+'accesskey-pt-anonlogin' => 'o',
+'accesskey-pt-logout' => '',
+'accesskey-ca-talk' => 't',
+'accesskey-ca-edit' => 'e',
+'accesskey-ca-addsection' => '+',
+'accesskey-ca-viewsource' => 'e',
+'accesskey-ca-history' => 'h',
+'accesskey-ca-protect' => '=',
+'accesskey-ca-delete' => 'd',
+'accesskey-ca-undelete' => 'd',
+'accesskey-ca-move' => 'm',
+'accesskey-ca-watch' => 'w',
+'accesskey-ca-unwatch' => 'w',
+'accesskey-search' => 'f',
+'accesskey-p-logo' => '',
+'accesskey-n-mainpage' => 'z',
+'accesskey-n-portal' => '',
+'accesskey-n-currentevents' => '',
+'accesskey-n-recentchanges' => 'r',
+'accesskey-n-randompage' => 'x',
+'accesskey-n-help' => '',
+'accesskey-n-sitesupport' => '',
+'accesskey-t-whatlinkshere' => 'j',
+'accesskey-t-recentchangeslinked' => 'k',
+'accesskey-feed-rss' => '',
+'accesskey-feed-atom' => '',
+'accesskey-t-contributions' => '',
+'accesskey-t-emailuser' => '',
+'accesskey-t-upload' => 'u',
+'accesskey-t-specialpages' => 'q',
+'accesskey-ca-nstab-main' => 'c',
+'accesskey-ca-nstab-user' => 'c',
+'accesskey-ca-nstab-media' => 'c',
+'accesskey-ca-nstab-special' => '',
+'accesskey-ca-nstab-project' => 'a',
+'accesskey-ca-nstab-image' => 'c',
+'accesskey-ca-nstab-mediawiki' => 'c',
+'accesskey-ca-nstab-template' => 'c',
+'accesskey-ca-nstab-help' => 'c',
+'accesskey-ca-nstab-category' => 'c',
+'accesskey-minoredit' => 'i',
+'accesskey-save' => 's',
+'accesskey-preview' => 'p',
+'accesskey-diff' => 'v',
+'accesskey-compareselectedversions' => 'v',
+'accesskey-watch' => 'w',
+
+# Tooltip help for the actions
+'tooltip-pt-userpage' => 'My user page',
+'tooltip-pt-anonuserpage' => "The user page for the ip you're editing as",
+'tooltip-pt-mytalk' => 'My talk page',
+'tooltip-pt-anontalk' => 'Discussion about edits from this ip address',
+'tooltip-pt-preferences' => 'My preferences',
+'tooltip-pt-watchlist' => "The list of pages you're monitoring for changes",
+'tooltip-pt-mycontris' => 'List of my contributions',
+'tooltip-pt-login' => 'You are encouraged to log in, it is not mandatory however.',
+'tooltip-pt-anonlogin' => 'You are encouraged to log in, it is not mandatory however.',
+'tooltip-pt-logout' => 'Log out',
+'tooltip-ca-talk' => 'Discussion about the content page',
+'tooltip-ca-edit' => 'You can edit this page. Please use the preview button before saving.',
+'tooltip-ca-addsection' => 'Add a comment to this discussion.',
+'tooltip-ca-viewsource' => 'This page is protected. You can view its source.',
+'tooltip-ca-history' => 'Past versions of this page.',
+'tooltip-ca-protect' => 'Protect this page',
+'tooltip-ca-delete' => 'Delete this page',
+'tooltip-ca-undelete' => 'Restore the edits done to this page before it was deleted',
+'tooltip-ca-move' => 'Move this page',
+'tooltip-ca-watch' => 'Add this page to your watchlist',
+'tooltip-ca-unwatch' => 'Remove this page from your watchlist',
+'tooltip-search' => 'Search {{SITENAME}}',
+'tooltip-p-logo' => 'Main Page',
+'tooltip-n-mainpage' => 'Visit the Main Page',
+'tooltip-n-portal' => 'About the project, what you can do, where to find things',
+'tooltip-n-currentevents' => 'Find background information on current events',
+'tooltip-n-recentchanges' => 'The list of recent changes in the wiki.',
+'tooltip-n-randompage' => 'Load a random page',
+'tooltip-n-help' => 'The place to find out.',
+'tooltip-n-sitesupport' => 'Support us',
+'tooltip-t-whatlinkshere' => 'List of all wiki pages that link here',
+'tooltip-t-recentchangeslinked' => 'Recent changes in pages linked from this page',
+'tooltip-feed-rss' => 'RSS feed for this page',
+'tooltip-feed-atom' => 'Atom feed for this page',
+'tooltip-t-contributions' => 'View the list of contributions of this user',
+'tooltip-t-emailuser' => 'Send a mail to this user',
+'tooltip-t-upload' => 'Upload images or media files',
+'tooltip-t-specialpages' => 'List of all special pages',
+'tooltip-ca-nstab-main' => 'View the content page',
+'tooltip-ca-nstab-user' => 'View the user page',
+'tooltip-ca-nstab-media' => 'View the media page',
+'tooltip-ca-nstab-special' => "This is a special page, you can't edit the page itself",
+'tooltip-ca-nstab-project' => 'View the project page',
+'tooltip-ca-nstab-image' => 'View the image page',
+'tooltip-ca-nstab-mediawiki' => 'View the system message',
+'tooltip-ca-nstab-template' => 'View the template',
+'tooltip-ca-nstab-help' => 'View the help page',
+'tooltip-ca-nstab-category' => 'View the category page',
+'tooltip-minoredit' => 'Mark this as a minor edit',
+'tooltip-save' => 'Save your changes',
+'tooltip-preview' => 'Preview your changes, please use this before saving!',
+'tooltip-diff' => 'Show which changes you made to the text.',
+'tooltip-compareselectedversions' => 'See the differences between the two selected versions of this page.',
+'tooltip-watch' => 'Add this page to your watchlist',
+'tooltip-recreate' => 'Recreate the page despite it has been deleted',
+
+# stylesheets
+'common.css' => '/** CSS placed here will be applied to all skins */',
+'monobook.css' => '/* CSS placed here will affect users of the Monobook skin */',
+
+# Scripts
+'common.js' => '/* Any JavaScript here will be loaded for all users on every page load. */',
+'monobook.js' => '/* Deprecated; use [[MediaWiki:common.js]] */',
+
+# Metadata
+'nodublincore' => 'Dublin Core RDF metadata disabled for this server.',
+'nocreativecommons' => 'Creative Commons RDF metadata disabled for this server.',
+'notacceptable' => 'The wiki server can\'t provide data in a format your client can read.',
+
+# Attribution
+
+'anonymous' => 'Anonymous user(s) of {{SITENAME}}',
+'siteuser' => '{{SITENAME}} user $1',
+'lastmodifiedatby' => 'This page was last modified $2, $1 by $3.',	// $1 date, $2 time. $3 user
+'and' => 'and',
+'othercontribs' => 'Based on work by $1.',
+'others' => 'others',
+'siteusers' => '{{SITENAME}} user(s) $1',
+'creditspage' => 'Page credits',
+'nocredits' => 'There is no credits info available for this page.',
+
+# Spam protection
+
+'spamprotectiontitle' => 'Spam protection filter',
+'spamprotectiontext' => 'The page you wanted to save was blocked by the spam filter. This is probably caused by a link to an external site.',
+'spamprotectionmatch' => 'The following text is what triggered our spam filter: $1',
+'subcategorycount' => "There {{PLURAL:$1|is one subcategory|are $1 subcategories}} to this category.",
+'categoryarticlecount' => "There {{PLURAL:$1|is one article|are $1 articles}} in this category.",
+'category-media-count' => "There {{PLURAL:$1|is one file|are $1 files}} in this category.",
+'listingcontinuesabbrev' => " cont.",
+'spambot_username' => 'MediaWiki spam cleanup',
+'spam_reverting' => 'Reverting to last version not containing links to $1',
+'spam_blanking' => 'All revisions contained links to $1, blanking',
+
+# Info page
+'infosubtitle' => 'Information for page',
+'numedits' => 'Number of edits (article): $1',
+'numtalkedits' => 'Number of edits (discussion page): $1',
+'numwatchers' => 'Number of watchers: $1',
+'numauthors' => 'Number of distinct authors (article): $1',
+'numtalkauthors' => 'Number of distinct authors (discussion page): $1',
+
+# Math options
+'mw_math_png' => 'Always render PNG',
+'mw_math_simple' => 'HTML if very simple or else PNG',
+'mw_math_html' => 'HTML if possible or else PNG',
+'mw_math_source' => 'Leave it as TeX (for text browsers)',
+'mw_math_modern' => 'Recommended for modern browsers',
+'mw_math_mathml' => 'MathML if possible (experimental)',
+
+# Patrolling
+'markaspatrolleddiff'   => "Mark as patrolled",
+'markaspatrolledlink'   => "[$1]",
+'markaspatrolledtext'   => "Mark this article as patrolled",
+'markedaspatrolled'     => "Marked as patrolled",
+'markedaspatrolledtext' => "The selected revision has been marked as patrolled.",
+'rcpatroldisabled'      => "Recent Changes Patrol disabled",
+'rcpatroldisabledtext'  => "The Recent Changes Patrol feature is currently disabled.",
+'markedaspatrollederror'  => "Cannot mark as patrolled",
+'markedaspatrollederrortext' => "You need to specify a revision to mark as patrolled.",
+'markedaspatrollederror-noautopatrol' => 'You are not allowed to mark your own changes as patrolled.',
+
+# Patrol log
+'patrol-log-page' => 'Patrol log',
+'patrol-log-header' => '',
+'patrol-log-line' => 'marked $1 of $2 patrolled $3',
+'patrol-log-auto' => '(automatic)',
+'patrol-log-diff' => 'r$1',
+
+# image deletion
+'deletedrevision' => 'Deleted old revision $1.',
+
+# browsing diffs
+'previousdiff' => '← Previous diff',
+'nextdiff' => 'Next diff →',
+
+# media-info
+'mediawarning'          => "'''Warning''': This file may contain malicious code, by executing it your system may be compromised.<hr />",
+'imagemaxsize'          => 'Limit images on image description pages to:',
+'thumbsize'             => 'Thumbnail size:',
+'widthheight'		=> '$1×$2',
+'file-info'             => '(file size: $1, MIME type: $2)',
+'file-info-size'        => '($1 × $2 pixel, file size: $3, MIME type: $4)',
+'file-nohires'          => '<small>No higher resolution available.</small>',
+'file-svg'              => '<small>This is a lossless scalable vector image. Base size: $1 × $2 pixels.</small>',
+'show-big-image'        => 'Full resolution',
+'show-big-image-thumb'  => '<small>Size of this preview: $1 × $2 pixels</small>',
+
+'newimages' => 'Gallery of new files',
+'newimages-summary' => '',
+'showhidebots' => '($1 bots)',
+'noimages'  => 'Nothing to see.',
+
+# short names for language variants used for language conversion links.
+# to disable showing a particular link, set it to 'disable', e.g.
+# 'variantname-zh-sg' => 'disable',
+'variantname-zh-cn' => 'cn',
+'variantname-zh-tw' => 'tw',
+'variantname-zh-hk' => 'hk',
+'variantname-zh-sg' => 'sg',
+'variantname-zh' => 'zh',
+# variants for Serbian language
+'variantname-sr-ec' => 'sr-ec',
+'variantname-sr-el' => 'sr-el',
+'variantname-sr-jc' => 'sr-jc',
+'variantname-sr-jl' => 'sr-jl',
+'variantname-sr' => 'sr',
+# variants for Kazakh language
+'variantname-kk-tr' => 'kk-tr',
+'variantname-kk-kz' => 'kk-kz',
+'variantname-kk-cn' => 'kk-cn',
+'variantname-kk' => 'kk',
+
+'passwordtooshort' => 'Your password is invalid or too short. It must have at least $1 characters and be different from your username.',
+
+# Metadata
+'metadata' => 'Metadata',
+'metadata-help' => 'This file contains additional information, probably added from the digital camera or scanner used to create or digitize it. If the file has been modified from its original state, some details may not fully reflect the modified image.',
+'metadata-expand' => 'Show extended details',
+'metadata-collapse' => 'Hide extended details',
+'metadata-fields' => 'EXIF metadata fields listed in this message will
+be included on image page display when the metadata table
+is collapsed. Others will be hidden by default.
+* make
+* model
+* datetimeoriginal
+* exposuretime
+* fnumber
+* focallength',
+
+# Exif tags
+'exif-imagewidth' =>'Width',
+'exif-imagelength' =>'Height',
+'exif-bitspersample' =>'Bits per component',
+'exif-compression' =>'Compression scheme',
+'exif-photometricinterpretation' =>'Pixel composition',
+'exif-orientation' =>'Orientation',
+'exif-samplesperpixel' =>'Number of components',
+'exif-planarconfiguration' =>'Data arrangement',
+'exif-ycbcrsubsampling' =>'Subsampling ratio of Y to C',
+'exif-ycbcrpositioning' =>'Y and C positioning',
+'exif-xresolution' =>'Horizontal resolution',
+'exif-yresolution' =>'Vertical resolution',
+'exif-resolutionunit' =>'Unit of X and Y resolution',
+'exif-stripoffsets' =>'Image data location',
+'exif-rowsperstrip' =>'Number of rows per strip',
+'exif-stripbytecounts' =>'Bytes per compressed strip',
+'exif-jpeginterchangeformat' =>'Offset to JPEG SOI',
+'exif-jpeginterchangeformatlength' =>'Bytes of JPEG data',
+'exif-transferfunction' =>'Transfer function',
+'exif-whitepoint' =>'White point chromaticity',
+'exif-primarychromaticities' =>'Chromaticities of primarities',
+'exif-ycbcrcoefficients' =>'Color space transformation matrix coefficients',
+'exif-referenceblackwhite' =>'Pair of black and white reference values',
+'exif-datetime' =>'File change date and time',
+'exif-imagedescription' =>'Image title',
+'exif-make' =>'Camera manufacturer',
+'exif-model' =>'Camera model',
+'exif-software' =>'Software used',
+'exif-artist' =>'Author',
+'exif-copyright' =>'Copyright holder',
+'exif-exifversion' =>'Exif version',
+'exif-flashpixversion' =>'Supported Flashpix version',
+'exif-colorspace' =>'Color space',
+'exif-componentsconfiguration' =>'Meaning of each component',
+'exif-compressedbitsperpixel' =>'Image compression mode',
+'exif-pixelydimension' =>'Valid image width',
+'exif-pixelxdimension' =>'Valid image height',
+'exif-makernote' =>'Manufacturer notes',
+'exif-usercomment' =>'User comments',
+'exif-relatedsoundfile' =>'Related audio file',
+'exif-datetimeoriginal' =>'Date and time of data generation',
+'exif-datetimedigitized' =>'Date and time of digitizing',
+'exif-subsectime' =>'DateTime subseconds',
+'exif-subsectimeoriginal' =>'DateTimeOriginal subseconds',
+'exif-subsectimedigitized' =>'DateTimeDigitized subseconds',
+'exif-exposuretime' =>'Exposure time',
+'exif-exposuretime-format' => '$1 sec ($2)',
+'exif-fnumber' =>'F Number',
+'exif-fnumber-format' =>'f/$1',
+'exif-exposureprogram' =>'Exposure Program',
+'exif-spectralsensitivity' =>'Spectral sensitivity',
+'exif-isospeedratings' =>'ISO speed rating',
+'exif-oecf' =>'Optoelectronic conversion factor',
+'exif-shutterspeedvalue' =>'Shutter speed',
+'exif-aperturevalue' =>'Aperture',
+'exif-brightnessvalue' =>'Brightness',
+'exif-exposurebiasvalue' =>'Exposure bias',
+'exif-maxaperturevalue' =>'Maximum land aperture',
+'exif-subjectdistance' =>'Subject distance',
+'exif-meteringmode' =>'Metering mode',
+'exif-lightsource' =>'Light source',
+'exif-flash' =>'Flash',
+'exif-focallength' =>'Lens focal length',
+'exif-focallength-format' =>'$1 mm',
+'exif-subjectarea' =>'Subject area',
+'exif-flashenergy' =>'Flash energy',
+'exif-spatialfrequencyresponse' =>'Spatial frequency response',
+'exif-focalplanexresolution' =>'Focal plane X resolution',
+'exif-focalplaneyresolution' =>'Focal plane Y resolution',
+'exif-focalplaneresolutionunit' =>'Focal plane resolution unit',
+'exif-subjectlocation' =>'Subject location',
+'exif-exposureindex' =>'Exposure index',
+'exif-sensingmethod' =>'Sensing method',
+'exif-filesource' =>'File source',
+'exif-scenetype' =>'Scene type',
+'exif-cfapattern' =>'CFA pattern',
+'exif-customrendered' =>'Custom image processing',
+'exif-exposuremode' =>'Exposure mode',
+'exif-whitebalance' =>'White Balance',
+'exif-digitalzoomratio' =>'Digital zoom ratio',
+'exif-focallengthin35mmfilm' =>'Focal length in 35 mm film',
+'exif-scenecapturetype' =>'Scene capture type',
+'exif-gaincontrol' =>'Scene control',
+'exif-contrast' =>'Contrast',
+'exif-saturation' =>'Saturation',
+'exif-sharpness' =>'Sharpness',
+'exif-devicesettingdescription' =>'Device settings description',
+'exif-subjectdistancerange' =>'Subject distance range',
+'exif-imageuniqueid' =>'Unique image ID',
+'exif-gpsversionid' =>'GPS tag version',
+'exif-gpslatituderef' =>'North or South Latitude',
+'exif-gpslatitude' =>'Latitude',
+'exif-gpslongituderef' =>'East or West Longitude',
+'exif-gpslongitude' =>'Longitude',
+'exif-gpsaltituderef' =>'Altitude reference',
+'exif-gpsaltitude' =>'Altitude',
+'exif-gpstimestamp' =>'GPS time (atomic clock)',
+'exif-gpssatellites' =>'Satellites used for measurement',
+'exif-gpsstatus' =>'Receiver status',
+'exif-gpsmeasuremode' =>'Measurement mode',
+'exif-gpsdop' =>'Measurement precision',
+'exif-gpsspeedref' =>'Speed unit',
+'exif-gpsspeed' =>'Speed of GPS receiver',
+'exif-gpstrackref' =>'Reference for direction of movement',
+'exif-gpstrack' =>'Direction of movement',
+'exif-gpsimgdirectionref' =>'Reference for direction of image',
+'exif-gpsimgdirection' =>'Direction of image',
+'exif-gpsmapdatum' =>'Geodetic survey data used',
+'exif-gpsdestlatituderef' =>'Reference for latitude of destination',
+'exif-gpsdestlatitude' =>'Latitude destination',
+'exif-gpsdestlongituderef' =>'Reference for longitude of destination',
+'exif-gpsdestlongitude' =>'Longitude of destination',
+'exif-gpsdestbearingref' =>'Reference for bearing of destination',
+'exif-gpsdestbearing' =>'Bearing of destination',
+'exif-gpsdestdistanceref' =>'Reference for distance to destination',
+'exif-gpsdestdistance' =>'Distance to destination',
+'exif-gpsprocessingmethod' =>'Name of GPS processing method',
+'exif-gpsareainformation' =>'Name of GPS area',
+'exif-gpsdatestamp' =>'GPS date',
+'exif-gpsdifferential' =>'GPS differential correction',
+
+# Make & model, can be wikified in order to link to the camera and model name
+
+'exif-make-value' => '$1',
+'exif-model-value' =>'$1',
+'exif-software-value' => '$1',
+
+# Exif attributes
+
+'exif-compression-1' => 'Uncompressed',
+'exif-compression-6' => 'JPEG',
+
+'exif-unknowndate' => 'Unknown date',
+
+'exif-photometricinterpretation-2' => 'RGB',
+'exif-photometricinterpretation-6' => 'YCbCr',
+
+'exif-orientation-1' => 'Normal', // 0th row: top; 0th column: left
+'exif-orientation-2' => 'Flipped horizontally', // 0th row: top; 0th column: right
+'exif-orientation-3' => 'Rotated 180°', // 0th row: bottom; 0th column: right
+'exif-orientation-4' => 'Flipped vertically', // 0th row: bottom; 0th column: left
+'exif-orientation-5' => 'Rotated 90° CCW and flipped vertically', // 0th row: left; 0th column: top
+'exif-orientation-6' => 'Rotated 90° CW', // 0th row: right; 0th column: top
+'exif-orientation-7' => 'Rotated 90° CW and flipped vertically', // 0th row: right; 0th column: bottom
+'exif-orientation-8' => 'Rotated 90° CCW', // 0th row: left; 0th column: bottom
+
+'exif-planarconfiguration-1' => 'chunky format',
+'exif-planarconfiguration-2' => 'planar format',
+
+'exif-xyresolution-i' => '$1 dpi',
+'exif-xyresolution-c' => '$1 dpc',
+
+'exif-colorspace-1' => 'sRGB',
+'exif-colorspace-ffff.h' => 'FFFF.H',
+
+'exif-componentsconfiguration-0' => 'does not exist',
+'exif-componentsconfiguration-1' => 'Y',
+'exif-componentsconfiguration-2' => 'Cb',
+'exif-componentsconfiguration-3' => 'Cr',
+'exif-componentsconfiguration-4' => 'R',
+'exif-componentsconfiguration-5' => 'G',
+'exif-componentsconfiguration-6' => 'B',
+
+'exif-exposureprogram-0' => 'Not defined',
+'exif-exposureprogram-1' => 'Manual',
+'exif-exposureprogram-2' => 'Normal program',
+'exif-exposureprogram-3' => 'Aperture priority',
+'exif-exposureprogram-4' => 'Shutter priority',
+'exif-exposureprogram-5' => 'Creative program (biased toward depth of field)',
+'exif-exposureprogram-6' => 'Action program (biased toward fast shutter speed)',
+'exif-exposureprogram-7' => 'Portrait mode (for closeup photos with the background out of focus)',
+'exif-exposureprogram-8' => 'Landscape mode (for landscape photos with the background in focus)',
+
+'exif-subjectdistance-value' => '$1 metres',
+
+'exif-meteringmode-0' => 'Unknown',
+'exif-meteringmode-1' => 'Average',
+'exif-meteringmode-2' => 'CenterWeightedAverage',
+'exif-meteringmode-3' => 'Spot',
+'exif-meteringmode-4' => 'MultiSpot',
+'exif-meteringmode-5' => 'Pattern',
+'exif-meteringmode-6' => 'Partial',
+'exif-meteringmode-255' => 'Other',
+
+'exif-lightsource-0' => 'Unknown',
+'exif-lightsource-1' => 'Daylight',
+'exif-lightsource-2' => 'Fluorescent',
+'exif-lightsource-3' => 'Tungsten (incandescent light)',
+'exif-lightsource-4' => 'Flash',
+'exif-lightsource-9' => 'Fine weather',
+'exif-lightsource-10' => 'Cloudy weather',
+'exif-lightsource-11' => 'Shade',
+'exif-lightsource-12' => 'Daylight fluorescent (D 5700 – 7100K)',
+'exif-lightsource-13' => 'Day white fluorescent (N 4600 – 5400K)',
+'exif-lightsource-14' => 'Cool white fluorescent (W 3900 – 4500K)',
+'exif-lightsource-15' => 'White fluorescent (WW 3200 – 3700K)',
+'exif-lightsource-17' => 'Standard light A',
+'exif-lightsource-18' => 'Standard light B',
+'exif-lightsource-19' => 'Standard light C',
+'exif-lightsource-20' => 'D55',
+'exif-lightsource-21' => 'D65',
+'exif-lightsource-22' => 'D75',
+'exif-lightsource-23' => 'D50',
+'exif-lightsource-24' => 'ISO studio tungsten',
+'exif-lightsource-255' => 'Other light source',
+
+'exif-focalplaneresolutionunit-2' => 'inches',
+
+'exif-sensingmethod-1' => 'Undefined',
+'exif-sensingmethod-2' => 'One-chip color area sensor',
+'exif-sensingmethod-3' => 'Two-chip color area sensor',
+'exif-sensingmethod-4' => 'Three-chip color area sensor',
+'exif-sensingmethod-5' => 'Color sequential area sensor',
+'exif-sensingmethod-7' => 'Trilinear sensor',
+'exif-sensingmethod-8' => 'Color sequential linear sensor',
+
+'exif-filesource-3' => 'DSC',
+
+'exif-scenetype-1' => 'A directly photographed image',
+
+'exif-customrendered-0' => 'Normal process',
+'exif-customrendered-1' => 'Custom process',
+
+'exif-exposuremode-0' => 'Auto exposure',
+'exif-exposuremode-1' => 'Manual exposure',
+'exif-exposuremode-2' => 'Auto bracket',
+
+'exif-whitebalance-0' => 'Auto white balance',
+'exif-whitebalance-1' => 'Manual white balance',
+
+'exif-scenecapturetype-0' => 'Standard',
+'exif-scenecapturetype-1' => 'Landscape',
+'exif-scenecapturetype-2' => 'Portrait',
+'exif-scenecapturetype-3' => 'Night scene',
+
+'exif-gaincontrol-0' => 'None',
+'exif-gaincontrol-1' => 'Low gain up',
+'exif-gaincontrol-2' => 'High gain up',
+'exif-gaincontrol-3' => 'Low gain down',
+'exif-gaincontrol-4' => 'High gain down',
+
+'exif-contrast-0' => 'Normal',
+'exif-contrast-1' => 'Soft',
+'exif-contrast-2' => 'Hard',
+
+'exif-saturation-0' => 'Normal',
+'exif-saturation-1' => 'Low saturation',
+'exif-saturation-2' => 'High saturation',
+
+'exif-sharpness-0' => 'Normal',
+'exif-sharpness-1' => 'Soft',
+'exif-sharpness-2' => 'Hard',
+
+'exif-subjectdistancerange-0' => 'Unknown',
+'exif-subjectdistancerange-1' => 'Macro',
+'exif-subjectdistancerange-2' => 'Close view',
+'exif-subjectdistancerange-3' => 'Distant view',
+
+// Pseudotags used for GPSLatitudeRef and GPSDestLatitudeRef
+'exif-gpslatitude-n' => 'North latitude',
+'exif-gpslatitude-s' => 'South latitude',
+
+// Pseudotags used for GPSLongitudeRef and GPSDestLongitudeRef
+'exif-gpslongitude-e' => 'East longitude',
+'exif-gpslongitude-w' => 'West longitude',
+
+'exif-gpsstatus-a' => 'Measurement in progress',
+'exif-gpsstatus-v' => 'Measurement interoperability',
+
+'exif-gpsmeasuremode-2' => '2-dimensional measurement',
+'exif-gpsmeasuremode-3' => '3-dimensional measurement',
+
+// Pseudotags used for GPSSpeedRef and GPSDestDistanceRef
+'exif-gpsspeed-k' => 'Kilometres per hour',
+'exif-gpsspeed-m' => 'Miles per hour',
+'exif-gpsspeed-n' => 'Knots',
+
+// Pseudotags used for GPSTrackRef, GPSImgDirectionRef and GPSDestBearingRef
+'exif-gpsdirection-t' => 'True direction',
+'exif-gpsdirection-m' => 'Magnetic direction',
+
+# external editor support
+'edit-externally' => 'Edit this file using an external application',
+'edit-externally-help' => 'See the [http://meta.wikimedia.org/wiki/Help:External_editors setup instructions] for more information.',
+
+# 'all' in various places, this might be different for inflected languages
+'recentchangesall' => 'all',
+'imagelistall' => 'all',
+'watchlistall1' => 'all',
+'watchlistall2' => 'all',
+'namespacesall' => 'all',
+
+# E-mail address confirmation
+'confirmemail' => 'Confirm E-mail address',
+'confirmemail_noemail' => 'You do not have a valid email address set in your [[Special:Preferences|user preferences]].',
+'confirmemail_text' => "This wiki requires that you validate your e-mail address
+before using e-mail features. Activate the button below to send a confirmation
+mail to your address. The mail will include a link containing a code; load the
+link in your browser to confirm that your e-mail address is valid.",
+'confirmemail_pending' => '<div class="error">
+A confirmation code has already been e-mailed to you; if you recently
+created your account, you may wish to wait a few minutes for it to
+arrive before trying to request a new code.
+</div>',
+'confirmemail_send' => 'Mail a confirmation code',
+'confirmemail_sent' => 'Confirmation e-mail sent.',
+'confirmemail_oncreate' => 'A confirmation code was sent to your e-mail address.
+This code is not required to log in, but you will need to provide it before
+enabling any e-mail-based features in the wiki.',
+'confirmemail_sendfailed' => 'Could not send confirmation mail. Check address for invalid characters.
+
+Mailer returned: $1',
+'confirmemail_invalid' => 'Invalid confirmation code. The code may have expired.',
+'confirmemail_needlogin' => 'You need to $1 to confirm your email address.',
+'confirmemail_success' => 'Your e-mail address has been confirmed. You may now log in and enjoy the wiki.',
+'confirmemail_loggedin' => 'Your e-mail address has now been confirmed.',
+'confirmemail_error' => 'Something went wrong saving your confirmation.',
+
+'confirmemail_subject' => '{{SITENAME}} e-mail address confirmation',
+'confirmemail_body' => "Someone, probably you from IP address $1, has registered an
+account \"$2\" with this e-mail address on {{SITENAME}}.
+
+To confirm that this account really does belong to you and activate
+e-mail features on {{SITENAME}}, open this link in your browser:
+
+$3
+
+If this is *not* you, don't follow the link. This confirmation code
+will expire at $4.",
+
+# Inputbox extension, may be useful in other contexts as well
+'tryexact' => 'Try exact match',
+'searchfulltext' => 'Search full text',
+'createarticle' => 'Create article',
+
+# Scary transclusion
+'scarytranscludedisabled' => '[Interwiki transcluding is disabled]',
+'scarytranscludefailed' => '[Template fetch failed for $1; sorry]',
+'scarytranscludetoolong' => '[URL is too long; sorry]',
+
+# Trackbacks
+'trackbackbox' => '<div id="mw_trackbacks">
+Trackbacks for this article:<br />
+$1
+</div>',
+'trackback' => '; $4$5 : [$2 $1]',
+'trackbackexcerpt' => '; $4$5 : [$2 $1]: <nowiki>$3</nowiki>',
+'trackbackremove' => ' ([$1 Delete])',
+'trackbacklink' => 'Trackback',
+'trackbackdeleteok' => 'The trackback was successfully deleted.',
+
+
+# delete conflict
+
+'deletedwhileediting' => 'Warning: This page has been deleted after you started editing!',
+'confirmrecreate' => 'User [[User:$1|$1]] ([[User talk:$1|talk]]) deleted this page after you started editing with reason:
+: \'\'$2\'\'
+Please confirm that really want to recreate this page.',
+'recreate' => 'Recreate',
+
+'unit-pixel' => 'px',
+
+# HTML dump
+'redirectingto' => 'Redirecting to [[$1]]...',
+
+# action=purge
+'confirm_purge' => "Clear the cache of this page?\n\n$1",
+'confirm_purge_button' => 'OK',
+
+'youhavenewmessagesmulti' => "You have new messages on $1",
+'newtalkseperator' => ',_',
+'searchcontaining' => "Search for articles containing ''$1''.",
+'searchnamed' => "Search for articles named ''$1''.",
+'articletitles' => "Articles starting with ''$1''",
+'hideresults' => 'Hide results',
+
+# DISPLAYTITLE
+'displaytitle' => '(Link to this page as [[$1]])',
+
+# Separator for categories in page lists
+# Please don't localise this
+'catseparator' => '|',
+
+'loginlanguagelabel' => 'Language: $1',
+
+# Don't duplicate this in translations; defaults should remain consistent
+'loginlanguagelinks' => "* Deutsch|de
+* English|en
+* Esperanto|eo
+* Français|fr
+* Español|es
+* Italiano|it
+* Nederlands|nl",
+
+# Multipage image navigation
+'imgmultipageprev' => '← previous page',
+'imgmultipagenext' => 'next page →',
+'imgmultigo' => 'Go!',
+'imgmultigotopre' => 'Go to page',
+'imgmultigotopost' => '',
+'imgmultiparseerror' => 'The image file appears to be corrupted or incorrect, so {{SITENAME}} cannot retrieve a list of pages.',
+
+# Table pager
+'ascending_abbrev' => 'asc',
+'descending_abbrev' => 'desc',
+'table_pager_next' => 'Next page',
+'table_pager_prev' => 'Previous page',
+'table_pager_first' => 'First page',
+'table_pager_last' => 'Last page',
+'table_pager_limit' => 'Show $1 items per page',
+'table_pager_limit_submit' => 'Go',
+'table_pager_empty' => 'No results',
+
+# Auto-summaries
+'autosumm-blank' => 'Removing all content from page',
+'autosumm-replace' => 'Replacing page with \'$1\'',
+'autoredircomment' => 'Redirecting to [[$1]]', # This should be changed to the new naming convention, but existed beforehand.
+'autosumm-new' => 'New page: $1',
+
+# Autoblock whitelist
+'autoblock_whitelist' => 'AOL http://webmaster.info.aol.com/proxyinfo.html
+*64.12.96.0/19
+*149.174.160.0/20
+*152.163.240.0/21
+*152.163.248.0/22
+*152.163.252.0/23
+*152.163.96.0/22
+*152.163.100.0/23
+*195.93.32.0/22
+*195.93.48.0/22
+*195.93.64.0/19
+*195.93.96.0/19
+*195.93.16.0/20
+*198.81.0.0/22
+*198.81.16.0/20
+*198.81.8.0/23
+*202.67.64.128/25
+*205.188.192.0/20
+*205.188.208.0/23
+*205.188.112.0/20
+*205.188.146.144/30
+*207.200.112.0/21',
+
+# Size units
+'size-bytes' => '$1 B',
+'size-kilobytes' => '$1 KB',
+'size-megabytes' => '$1 MB',
+'size-gigabytes' => '$1 GB',
+
+# Live preview
+'livepreview-loading' => 'Loading…',
+'livepreview-ready'   => 'Loading… Ready!',
+'livepreview-failed'  => "Live preview failed!\nTry normal preview.",
+'livepreview-error'   => "Failed to connect: $1 \"$2\"\nTry normal preview.",
+
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesEnRTL.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesEnRTL.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesEnRTL.php	(revision 1280)
@@ -0,0 +1,5 @@
+<?php
+
+$rtl = true;
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesEo.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesEo.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesEo.php	(revision 1280)
@@ -0,0 +1,1435 @@
+<?php
+$namespaceNames = array(
+	NS_MEDIA          => 'Media',
+	NS_SPECIAL        => 'Speciala',
+	NS_MAIN           => '',
+	NS_TALK           => 'Diskuto',
+	NS_USER           => 'Vikipediisto', # FIXME: Generalize v-isto kaj v-io
+	NS_USER_TALK      => 'Vikipediista_diskuto',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK   => '$1_diskuto',
+	NS_IMAGE          => 'Dosiero', #FIXME: Check the magic for Image: and Media:
+	NS_IMAGE_TALK     => 'Dosiera_diskuto',
+	NS_MEDIAWIKI      => 'MediaWiki',
+	NS_MEDIAWIKI_TALK => 'MediaWiki_diskuto',
+	NS_TEMPLATE       => 'Ŝablono',
+	NS_TEMPLATE_TALK  => 'Ŝablona_diskuto',
+	NS_HELP           => 'Helpo',
+	NS_HELP_TALK      => 'Helpa_diskuto',
+	NS_CATEGORY       => 'Kategorio',
+	NS_CATEGORY_TALK  => 'Kategoria_diskuto',
+);
+
+$skinNames = array(
+	'standard' => 'Klasika',
+	'nostalgia' => 'Nostalgio',
+	'cologneblue' => 'Kolonja Bluo',
+	'mono' => 'Senkolora',
+	'monobook' => 'Librejo',
+	'chick' => 'Kokido',
+);
+
+$separatorTransformTable = array(',' => ' ', '.' => ',' );
+
+$datePreferences = false;
+$defaultDateFormat = 'dmy';
+$dateFormats = array(
+	'dmy time' => 'H:i',
+	'dmy date' => 'j. M Y',
+	'dmy both' => 'H:i, j. M Y',
+);
+
+
+$messages = array(
+# User preference toggles
+'tog-underline'               => 'Substreku ligilojn',
+'tog-highlightbroken'         => 'Ruĝigu ligilojn al neekzistantaj paĝoj',
+'tog-justify'                 => 'Alkadrigu liniojn',
+'tog-hideminor'               => 'Kaŝu malgrandajn redaktetojn ĉe <i>Lastaj ŝanĝoj</i>',
+'tog-usenewrc'                => 'Novstila Lastaj Ŝanĝoj (bezonas JavaSkripton)',
+'tog-numberheadings'          => 'Aŭtomate numeru sekciojn',
+'tog-showtoolbar'             => 'Montru eldonilaron',
+'tog-editondblclick'          => 'Redaktu per duobla alklako (JavaScript)',
+'tog-editsection'             => 'Montru [redaktu]-ligiloj por sekcioj',
+'tog-editsectiononrightclick' => 'Redaktu sekciojn per dekstra musklako',
+'tog-showtoc'                 => 'Montru liston de enhavoj',
+'tog-rememberpassword'        => 'Memoru mian pasvorton',
+'tog-editwidth'               => 'Redaktilo estu plenlarĝa',
+'tog-watchcreations'          => 'Aldonu de mi kreitajn paĝojn al mia atentaro',
+'tog-watchdefault'            => 'Priatentu paĝojn de vi redaktintajn',
+'tog-minordefault'            => 'Marku ĉiujn redaktojn malgrandaj',
+'tog-previewontop'            => 'Montru antaŭrigardon antaŭ redaktilo',
+'tog-previewonfirst'          => 'Montru antaŭrigardon je unua redakto',
+'tog-nocache'                 => 'Malaktivigu kaŝmemorigon de paĝoj.',
+'tog-enotifwatchlistpages'    => 'Sendu al mi retmesaĝon kiam tiu paĝo estas ŝanĝita',
+'tog-enotifusertalkpages'     => 'Sendu al mi retmesaĝon kiam mia diskutpaĝo estas ŝanĝita',
+'tog-shownumberswatching'     => 'Montru la nombron da priatentaj uzantoj',
+'tog-fancysig'                => 'Simpla subskribo (sen aŭtomata ligo)',
+'tog-externaleditor'          => 'Uzu defaŭlte eksteran tekstprilaborilon',
+'tog-externaldiff'            => 'Uzu defaŭlte eksteran ŝanĝmontrilon',
+'tog-showjumplinks'           => 'Ebligi alirligojn "salti al" 
+<!-- Bonvolu kontroli ĉu ĝustas la traduko de : Enable "jump to" accessibility links -->',
+'tog-watchlisthideown'        => 'Kaŝu miajn redaktojn de la atentaro',
+'tog-watchlisthidebots'       => 'Kaŝu bot-redaktojn de la atentaro',
+
+'underline-always'  => 'Ĉiam',
+'underline-never'   => 'Neniam',
+'underline-default' => 'Defaŭlte laŭ foliumilo',
+
+'skinpreview' => '(Antaŭrigardo)',
+
+# Dates
+'sunday'    => 'dimanĉo',
+'monday'    => 'lundo',
+'tuesday'   => 'mardo',
+'wednesday' => 'merkredo',
+'thursday'  => 'ĵaŭdo',
+'friday'    => 'vendredo',
+'saturday'  => 'sabato',
+'january'   => 'januaro',
+'february'  => 'februaro',
+'march'     => 'marto',
+'april'     => 'aprilo',
+'may_long'  => 'majo',
+'june'      => 'junio',
+'july'      => 'julio',
+'august'    => 'aŭgusto',
+'september' => 'septembro',
+'october'   => 'oktobro',
+'november'  => 'novembro',
+'december'  => 'decembro',
+'may'       => 'Maj',
+'aug'       => 'Aŭg',
+'oct'       => 'Okt',
+
+# Bits of text used by many pages
+'categories'      => 'Kategorioj',
+'pagecategories'  => '{{PLURAL:$1|Kategorio|Kategorioj}}',
+'category_header' => 'Artikoloj en kategorio "$1"',
+'subcategories'   => 'Subkategorioj',
+
+'mainpagetext'      => 'Vikisoftvaro sukcese instaliĝis.',
+'mainpagedocfooter' => "Consult the [http://meta.wikimedia.org/wiki/MediaWiki_User%27s_Guide User's Guide] for information on using the wiki software.
+
+== Getting started ==
+
+* [http://www.mediawiki.org/wiki/Help:Configuration_settings Configuration settings list]
+* [http://www.mediawiki.org/wiki/Help:FAQ MediaWiki FAQ]
+* [http://mail.wikipedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]",
+
+'about'          => 'Enkonduko',
+'article'        => 'Artikolo',
+'newwindow'      => '(en nova fenestro)',
+'cancel'         => 'Nuligu',
+'qbfind'         => 'Trovu',
+'qbbrowse'       => 'Foliumado',
+'qbedit'         => 'Redaktado',
+'qbpageoptions'  => 'Paĝagado',
+'qbpageinfo'     => 'Paĝinformoj',
+'qbmyoptions'    => 'Personaĵoj',
+'qbspecialpages' => 'Specialaj paĝoj',
+'moredotdotdot'  => 'Pli...',
+'mypage'         => 'Mia paĝo',
+'mytalk'         => 'Mia diskuto',
+'anontalk'       => 'Diskutpaĝo por tiu ĉi IP',
+'navigation'     => 'Navigado',
+
+'errorpagetitle'    => 'Eraro',
+'returnto'          => 'Revenu al $1.',
+'tagline'           => 'El {{SITENAME}}',
+'help'              => 'Helpo',
+'search'            => 'Serĉu',
+'searchbutton'      => 'Serĉu',
+'go'                => 'Ek!',
+'searcharticle'     => 'Ek!',
+'history'           => 'Malnovaj versioj',
+'history_short'     => 'Historio',
+'updatedmarker'     => 'ĝisdatita de post mia lasta vizito',
+'info_short'        => 'Informo',
+'printableversion'  => 'Presebla versio',
+'permalink'         => 'Konstanta ligilo',
+'edit'              => 'Redaktu',
+'editthispage'      => 'Redaktu la paĝon',
+'delete'            => 'Forigu',
+'deletethispage'    => 'Forigu la paĝon',
+'undelete_short'    => 'Malforigu $1 redaktojn',
+'protect'           => 'Protektu',
+'protectthispage'   => 'Protektu la paĝon',
+'unprotect'         => 'Malprotektu',
+'unprotectthispage' => 'Malprotektu la paĝon',
+'newpage'           => 'Nova paĝo',
+'talkpage'          => 'Diskutu la paĝon',
+'specialpage'       => 'Speciala Paĝo',
+'personaltools'     => 'Personaj iloj',
+'postcomment'       => 'Afiŝu komenton',
+'articlepage'       => 'Vidu la artikolon',
+'talk'              => 'Diskuto',
+'views'             => 'Vidoj',
+'toolbox'           => 'Iloj',
+'userpage'          => 'Vidu personan paĝon',
+'imagepage'         => 'Vidu dosieropaĝon',
+'viewtalkpage'      => 'Vidu diskutopaĝon',
+'otherlanguages'    => 'Aliaj lingvoj',
+'redirectedfrom'    => '(Alidirektita el $1)',
+'redirectpagesub'   => 'Redirekta paĝo',
+'lastmodifiedat'    => 'Laste redaktita je $2, $1.', # $1 date, $2 time
+'viewcount'         => 'Montrita $1-foje.',
+'protectedpage'     => 'Protektita paĝo',
+'jumpto'            => 'Saltu al:',
+'jumptonavigation'  => 'navigado',
+'jumptosearch'      => 'serĉo',
+
+# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
+'aboutsite'         => 'Pri {{SITENAME}}',
+'aboutpage'         => '{{SITENAME}}:Enkonduko',
+'bugreports'        => 'Raportu cimojn',
+'bugreportspage'    => 'Project:Raportu cimojn',
+'copyright'         => 'La enhavo estas havebla sub $1.',
+'copyrightpagename' => 'permesilo **** GFDL **** uzata por la {{SITENAME}}',
+'copyrightpage'     => 'Project:Kopirajto',
+'currentevents'     => 'Aktualaĵoj',
+'currentevents-url' => 'Aktualaĵoj',
+'disclaimers'       => 'Malgarantio',
+'disclaimerpage'    => 'Project:Malgarantia paĝo',
+'edithelp'          => 'Helpo pri redaktado',
+'edithelppage'      => 'Help:Kiel redakti paĝon',
+'faq'               => 'Oftaj demandoj',
+'faqpage'           => 'Project:Oftaj demandoj',
+'helppage'          => 'Help:Enhavo',
+'mainpage'          => 'Ĉefpaĝo',
+'policy-url'        => 'Project:Konsiletoj',
+'portal'            => 'Komunuma portalo',
+'portal-url'        => 'Project:Komunuma portalo',
+'privacy'           => 'Regularo pri respekto de la privateco',
+'privacypage'       => 'Project:Respekto de la privateco',
+'sitesupport'       => 'Subteno',
+'sitesupport-url'   => 'Project:Subteno',
+
+'badaccess' => 'Vi ne havas sufiĉe da redaktorajtoj por tiu paĝo.',
+
+'versionrequired'     => 'Versio $1 de MediaWiki nepras',
+'versionrequiredtext' => 'La versio $1 de MediaWiki estas necesa por uzi ĉi tiun paĝon. Vidu [[Special:Version]]',
+
+'ok'                  => 'Ek!',
+'retrievedfrom'       => 'Elŝutita el  "$1"',
+'youhavenewmessages'  => 'Por vi estas $1 ($2).',
+'newmessageslink'     => 'nova mesaĝo',
+'newmessagesdifflink' => 'ŝanĝoj kompare kun antaŭlasta versio',
+'editsection'         => '<small>redaktu</small>',
+'editsectionhint'     => 'Redaktu sekcion: $1',
+'toc'                 => 'Enhavo',
+'showtoc'             => 'montru',
+'hidetoc'             => 'kaŝu',
+'thisisdeleted'       => 'Vidu aŭ restarigu $1?',
+'viewdeleted'         => 'Rigardu $1?',
+'restorelink'         => '$1 forigita(j)n versio(j)n',
+'feedlinks'           => 'Nutro:',
+
+# Short words for each namespace, by default used in the 'article' tab in monobook
+'nstab-main'      => 'Artikolo',
+'nstab-user'      => '**** root {{lcfirst:ns:user}}a / Vikipediista paĝo',
+'nstab-media'     => 'Media paĝo',
+'nstab-special'   => 'Speciala',
+'nstab-image'     => 'Bildo',
+'nstab-mediawiki' => 'Sistema mesaĝo',
+'nstab-template'  => 'Ŝablono',
+'nstab-help'      => 'Helpo',
+'nstab-category'  => 'Kategorio',
+
+# Main script and global functions
+'nosuchaction'      => 'Ne ekzistas tia ago',
+'nosuchactiontext'  => "La agon ('action') nomitan de la URL
+ne agnoskas la programaro de {{SITENAME}}",
+'nosuchspecialpage' => 'Ne ekzistas tia speciala paĝo',
+'nospecialpagetext' => 'Vi petis [[Special:Specialpages|specialan paĝon]] kiun ne agnoskas la programaro de {{SITENAME}}.',
+
+# General errors
+'error'                => 'Eraro',
+'databaseerror'        => 'Datumbaza eraro',
+'dberrortext'          => 'Sintakseraro okazis en informpeto al la datumaro.
+Jen la plej laste provita informmendo:
+<blockquote><tt>$1</tt></blockquote>
+el la funkcio "<tt>$2</tt>".
+MySQL redonis eraron  "<tt>$3: $4</tt>".',
+'dberrortextcl'        => 'Okazis sintaksa eraro en la informpeto al la datumaro.
+La lasta provita peto estis:
+"$1"
+el la funkcio "$2".
+\'\'MySQL\'\' resendis la erarmesaĝon "$3: $4".',
+'noconnect'            => 'Neeblis konekti al la datumbazo; estas ia erarao aŭ oni riparadas la servilon.
+<br />
+$1',
+'nodb'                 => 'Neeblis elekti datumaron $1',
+'cachederror'          => 'Intertempe, jen konservita kopio de la petita paĝo (ĝi eble ne estas ĝisdata).',
+'readonly'             => 'Datumaro ŝlosita, nurlega',
+'enterlockreason'      => 'Bonvolu klarigi, kial oni ŝlosas la datumaron, kaj
+la estimatan tempon de malŝlosado.',
+'readonlytext'         => 'La datumaro de {{SITENAME}} estas nun ŝlosita kontraŭ
+novaj aldonaj kaj aliaj ŝanĝoj, probable pro laŭkutima flegado de la datumaro.
+Bonvolu reprovu post iom da tempo.
+
+La ŝlosinto lasis la jenan mesaĝon:
+<p>$1</p>',
+'missingarticle'       => 'La datumbazo ne trovis la tekston de
+artikolo, kiun ĝi devus trovi, nomita "$1".
+Ĉi tio ne estas eraro de la datumbazo, sed probable cimo en la programo.
+Bonvolu raporti ĉi tion al iu sistemestro, kaj rimarkigi la retadreson (URL).',
+'internalerror'        => 'Interna eraro',
+'filecopyerror'        => 'Neeblis kopii dosieron  "$1" al "$2".',
+'filerenameerror'      => 'Neeblis alinomi dosieron "$1" al "$2".',
+'filedeleteerror'      => 'Neeblis forigi dosieron "$1".',
+'filenotfound'         => 'Neeblis trovi dosieron "$1".',
+'unexpected'           => 'Neatendita valuto: "$1"="$2".',
+'formerror'            => 'Eraro: neeblis liveri formulon',
+'badarticleerror'      => 'Tiun ĉi agon oni ne povas apliki al tiu ĉi artikolo.',
+'cannotdelete'         => 'Neeblis forigi la elektitan paĝon aŭ dosieron.',
+'badtitle'             => 'Nevalida titolo',
+'badtitletext'         => 'La petita paĝotitolo estas nevalida, malplena, aŭ
+malĝuste ligita interlingva aŭ intervikia titolo.',
+'perfdisabled'         => 'Ni petas pardonon! La petita funkcio estas malebligita
+provizore por konservi la rapidecon de la servilo.',
+'perfdisabledsub'      => 'Jen konservita kopio laŭ $1:', # obsolete?
+'perfcached'           => 'La sekvantaj informoj venas el kaŝmemoro kaj eble ne estas ĝisdataj :',
+'wrong_wfQuery_params' => 'Malĝustaj parametroj por wfQuery()<br />
+Funkcio: $1<br />
+Peto: $2',
+'viewsource'           => 'Vidu vikitekston',
+'viewsourcefor'        => 'por $1',
+'protectedpagetext'    => 'Tiu ĉi paĝo estas ŝlosita por malebligi redaktadon.',
+'editinginterface'     => "'''Atentu:''' Vi redaktas paĝon, kiu estas uzata kiel interfaca teksto por la softvaro. Ŝanĝoj de tiu ĉi teksto povas ŝanĝi aspekton de la interfaco por aliaj uzantoj.",
+
+# Login and logout pages
+'logouttitle'                => 'Elsalutu!',
+'logouttext'                 => '<strong>Vi elsalutis kaj finis vian seancon.</strong><br />
+Vi rajtas daŭre vikiumi sennome, aŭ vi povas reensaluti kiel la sama aŭ kiel alia uzanto.',
+'welcomecreation'            => '<h2>Bonvenon, $1!</h2> Via konto estas kreita.
+<span style="color:#ff0000">Ne forgesu fari viajn {{SITENAME}}-preferojn!</span>',
+'loginpagetitle'             => 'Ensalutu / enskribu',
+'yourname'                   => 'Via salutnomo',
+'yourpassword'               => 'Via pasvorto',
+'yourpasswordagain'          => 'Retajpu pasvorton',
+'remembermypassword'         => 'Rememoru mian pasvorton.',
+'yourdomainname'             => 'Via domajno',
+'externaldberror'            => 'Aŭ estis datenbaza eraro rilate al ekstera aŭtentikigado, aŭ vi ne permesas ĝisdatigi vian eksteran konton.',
+'loginproblem'               => '<b>Okazis problemo pri via ensalutado.</b><br />Bonvolu reprovi!',
+'alreadyloggedin'            => '<strong>$1, vi jam estas ensalutinta!</strong><br />',
+'login'                      => 'Ensalutu',
+'loginprompt'                => 'Necesas ke via foliumilo permesu kuketojn por ensaluti en la {{SITENAME}}.',
+'userlogin'                  => 'Ensalutu',
+'logout'                     => 'Elsalutu',
+'userlogout'                 => 'Elsalutu',
+'notloggedin'                => 'Ne ensalutinta',
+'nologin'                    => 'Ĉu vi ne jam havas salutnomon? $1.',
+'nologinlink'                => 'Kreu konton',
+'createaccount'              => 'Kreu novan konton',
+'createaccountmail'          => 'retpoŝte',
+'badretype'                  => 'La pasvortoj kiujn vi tajpis ne egalas.',
+'userexists'                 => 'Jam estas uzanto kun la nomo kiun vi elektis. Bonvolu elekti alian nomon.',
+'youremail'                  => 'Via retpoŝtadreso',
+'username'                   => 'Salutnomo:',
+'uid'                        => 'Uzantnumero:',
+'yourrealname'               => 'Vera nomo¹',
+'yourlanguage'               => 'Lingvo',
+'yourvariant'                => 'Varianto',
+'yournick'                   => 'Via kaŝnomo (por subskriboj)',
+'badsig'                     => 'La kruda identigaĵo nevalidas; kontrolu la HTML-etikedojn.',
+'email'                      => 'Retpoŝto',
+'prefs-help-realname'        => '* Vera nomo (opcia) : se vi elektas sciigi ĝin, ĝi estos uzita por aŭtorigi vin pri viaj kontribuoj.',
+'loginerror'                 => 'Ensaluta eraro',
+'prefs-help-email'           => '* Retpoŝto (opcia) : ebligas al aliaj kontakti vin tra via uzantpaĝo aŭ diskutpaĝo sen neceso malkaŝi vian identecon.',
+'nocookiesnew'               => 'La uzantokonto estis kreita sed vi ne estas ensalutinta. *** E-igo lcfirst {{SITENAME}} uzas kuketojn por akcepti uzantojn. Kuketoj esta malaktivigitaj ĉe vi. Bonvolu aktivigi ilin kaj ensalutu per viaj novaj salutnomo kaj pasvorto.',
+'nocookieslogin'             => '{{SITENAME}} uzas kuketojn por akcepti uzantojn. Kuketoj esta malaktivigitaj ĉe vi. Bonvolu aktivigi ilin kaj provu denove.',
+'noname'                     => 'Vi ne tajpis validan salutnomon.',
+'loginsuccesstitle'          => 'Ensalutado sukcesis',
+'loginsuccess'               => 'Vi nun estas en la {{SITENAME}} kiel uzanto "$1".',
+'nosuchuser'                 => 'Neniu uzanto nomiĝas "$1".
+Bonvolu kontroli vian literumadon, aŭ uzu la malsupran formularon por krei novan konton.',
+'nosuchusershort'            => 'Ne ekzistas uzanto kun la nomo "$1". Bonvolu kontroli vian ortografion.',
+'wrongpassword'              => 'Vi tajpis malĝustan pasvorton. Bonvolu provi denove.',
+'wrongpasswordempty'         => 'Vi tajpis malplenan pasvorton. Bonvolu provi denove.',
+'mailmypassword'             => 'Retpoŝtu al mi novan pasvorton',
+'passwordremindertitle'      => 'Rememorigo el {{SITENAME}} pri perdita pasvorto',
+'passwordremindertext'       => 'Iu (probable vi, el IP-adreso $1)
+petis, ke ni sendu al vi novan pasvorton por ensaluti {{SITENAME}}n ($4).
+La pasvorto por uzanto "$2" nun estas "$3".
+Ni rekomendas, ke vi nun ensalutu kaj ŝanĝu vian pasvorton.',
+'noemail'                    => 'Retpoŝtadreso ne estas registrita por uzanto "$1".',
+'passwordsent'               => 'Oni sendis novan pasvorton al la retpoŝtadreso
+registrita por "$1".
+Bonvolu saluti denove ricevinte ĝin.',
+'eauthentsent'               => 'Konfirma retmesaĝo estas sendita al la nomita retadreso. Antaŭ ol iu ajn alia mesaĝo estos sendita al la konto, vi devos sekvi la instrukciojn en la mesaĝo por konfirmi ke la konto ja estas la via.',
+'acct_creation_throttle_hit' => 'Ni pardonpetas - vi jam kreis $1 kontojn. Vi ne povas krei pli.',
+'emailauthenticated'         => 'Via retpoŝta adreso estis autentikigita ĉe $1.',
+'emailnotauthenticated'      => 'Via retadreso ne jam estas aŭtentigita. Neniu retmesaĝo estos sendita al iu el la sekvantaj adresoj.',
+'emailconfirmlink'           => 'Konfirmu vian retpoŝtan adreson',
+'invalidemailaddress'        => 'La retpoŝt-adreso ne estas akceptebla ĉar ĝi ŝajne havas nevalidan formaton. Bonvole entajpu ĝust-formatan adreson, aŭ malplenigu la zonon.',
+'accountcreated'             => 'Konto kreita',
+'accountcreatedtext'         => 'La uzanto-konto por $1 estas kreita.',
+
+# Edit page toolbar
+'bold_sample'     => 'Grasa teksto',
+'bold_tip'        => 'Grasa teksto',
+'italic_sample'   => 'Kursiva teksto',
+'italic_tip'      => 'Kursiva teksto',
+'link_sample'     => 'Ligtitolo',
+'link_tip'        => 'Interna ligo',
+'extlink_sample'  => 'http://www.ekzemplo.com ligtitolo',
+'extlink_tip'     => 'Ekstera ligo (memoru http:// prefikson)',
+'headline_sample' => 'Titola teksto',
+'headline_tip'    => 'Titololinio je dua nivelo',
+'math_sample'     => 'Enmetu formulon ĉi tien',
+'math_tip'        => 'Matematika formulo (LaTeX)',
+'nowiki_sample'   => '	 Enmetu ne formatitan tekston ĉi tien',
+'nowiki_tip'      => 'Ignoru vikiformatadon',
+'image_sample'    => 'Ekzemplo.jpg',
+'image_tip'       => 'Enŝutita bildo',
+'media_sample'    => 'Ekzemplo.mp3',
+'media_tip'       => 'Ligo al dosiero sona ...',
+'sig_tip'         => 'Via subskribo kun tempstampo',
+'hr_tip'          => 'Horizontala linio (uzu ŝpareme)',
+
+# Edit pages
+'summary'                => 'Resumo',
+'subject'                => 'Temo/subtitolo',
+'minoredit'              => 'Ĉi tiu ŝanĝo estas redakteto',
+'watchthis'              => 'Atentadu la artikolon',
+'savearticle'            => 'Konservu ŝanĝojn',
+'preview'                => 'Antaŭrigardo',
+'showpreview'            => 'Antaŭrigardu',
+'showdiff'               => 'Montru ŝanĝojn',
+'anoneditwarning'        => 'Vi ne estas ensalutinta. Via IP-adreso enregistriĝos en la ŝango-historio de tiu ĉi paĝo.',
+'missingsummary'         => "'''Rememorigilo:''' Vi ne provizis redaktan resumon. Se vi alklakos denove la savan butonon, via redaktaĵo estos storata sen resumo.",
+'missingcommenttext'     => 'Bonvolu entajpi komenton malsupre.',
+'blockedtitle'           => 'La uzanto estas forbarita.',
+'blockedtext'            => 'Via konto aŭ IP-adreso estis forbarita fare de $1,
+kiu priskribis la kialon jene:<br />
+$2<br />
+Vi rajtas kontakti tiun administranton por pridiskuti la forbaradon.
+
+Via IP-adreso estas $3. Bonvolu mencii ĝin en ajna plendo.',
+'whitelistedittitle'     => 'Ensalutado devigata por redakti',
+'whitelistedittext'      => 'Vi devas $1 por redakti paĝojn.',
+'whitelistreadtitle'     => 'Ensalutado devigata por legi',
+'whitelistreadtext'      => 'Vi devas [[Special:Userlogin|ensaluti]] por legi paĝojn.',
+'whitelistacctitle'      => 'Vi ne rajtas krei konton',
+'whitelistacctext'       => 'Por rajti krei konton en ĉi tiu vikio vi devas [[Special:Userlogin|ensaluti]] kaj havi la taŭgajn permesojn.',
+'confirmedittitle'       => 'Nepras konfirmi per retpoŝto por redakti',
+'confirmedittext'        => 'Vi devas konfirmi vian retpoŝtan adreson antaŭ ol redakti paĝojn. Bonvolu agordi kaj validigi vian retadreson per viaj [[Special:Preferences|uzulaj preferoj]].',
+'loginreqtitle'          => 'Nepre ensalutu',
+'loginreqlink'           => 'login',
+'loginreqpagetext'       => 'Vi devas $1 por rigardi aliajn paĝojn.',
+'accmailtitle'           => 'Pasvorto sendita.',
+'accmailtext'            => "La pasvorto por '$1' estis sendita al  $2.",
+'newarticle'             => '(Nova)',
+'newarticletext'         => 'Vi sekvis ligilon al paĝo jam ne ekzistanta. Se vi volas krei ĝin, ektajpu sube (vidu la [[{{MediaWiki:helppage}}|helpopaĝo]] por klarigoj.) Se vi malintence alvenis ĉi tien, simple alklaku la retrobutonon de via retumilo.',
+'anontalkpagetext'       => "---- ''Jen diskutopaĝo por iu anonima kontribuanto kiu ne jam kreis konton aŭ ne uzas ĝin. Ni tial devas uzi la cifran IP-adreso por identigi lin. la sama IP-adreso povas estis samtempte uzata de pluraj uzantoj. Se vi estas anonimulo kaj preferus eviti tiajn mistrafajn komentojn kaj konfuziĝon kun aliaj anonimuloj de via retejo, bonvolu [[Special:Userlogin|krei konton aŭ ensaluti]].''",
+'noarticletext'          => '(La paĝo nun estas malplena. Se vi ĵus kreis tiun ĉi paĝon klaku [{{fullurl:{{FULLPAGENAME}}|action=purge}} ĉi tien].)',
+'clearyourcache'         => "'''Notu:''' Post konservado vi forviŝu la kaŝmemoron de via foliumilo por vidi la ŝanĝojn : '''Mozilo:''' alklaku ''Reŝarĝi'' (aŭ ''Stir-Shift-R''), '''IE / Opera:''' ''Stir-F5'', '''Safari:''' ''Cmd-R'', '''Konqueror''' ''Stir-R''.",
+'usercssjsyoucanpreview' => '<strong>Konsileto:</strong> Uzu la "Antaŭrigardan" butonon por provi vian novan css/js antaŭ konservi.',
+'usercsspreview'         => "'''Memoru ke vi nur antaŭrigardas vian uzulan CSS. Ĝi ne jam estas konservita!'''",
+'userjspreview'          => "'''Memoru ke vi nun nur provas kaj antaŭrigardas vian uzantan javaskripton, ĝi ne estas jam konservita'''",
+'updated'                => '(Ŝanĝo registrita)',
+'note'                   => '<strong>Noto:</strong>',
+'previewnote'            => 'Memoru, ke ĉi tio estas nur antaŭrigardo kaj ankoraŭ ne konservita!',
+'previewconflict'        => 'La jena antaŭrigardo montras la tekston el la supra tekstujo,
+kiel ĝi aperos se vi elektos konservi la paĝon.',
+'session_fail_preview'   => '<strong>Bedaŭrinde ne eblis trakti vian redakton pro manko de sesiaj datenoj. Bonvolu provi refoje. Se ankoraŭ ne efikas post tio, elsalutu kaj poste re-ensalutu.</strong>',
+'editing'                => 'Redaktante $1',
+'editinguser'            => 'Redaktante $1',
+'editingsection'         => 'Redaktante $1 (sekcion)',
+'editingcomment'         => 'Redaktante $1 (komenton)',
+'editconflict'           => 'Redakta konflikto: $1',
+'explainconflict'        => 'Iu alia ŝanĝis la paĝon post kiam vi ekredaktis.
+La supra tekstujo enhavas la aktualan tekston de la artikolo.
+Viaj ŝanĝoj estas en la malsupra tekstujo.
+Vi devas mem kunfandi viajn ŝanĝojn kaj la jaman tekston.
+<b>Nur</b> la teksto en la supra tekstujo estos konservita kiam
+vi alklakos "Konservu".<br />',
+'yourtext'               => 'Via teksto',
+'storedversion'          => 'Registrita versio',
+'nonunicodebrowser'      => '<strong>ATENTU: Via foliumilo ne eltenas unikodon, bonvolu ŝanĝi ĝin antaŭ ol redakti artikolon.</strong>',
+'editingold'             => '<strong>AVERTO: Vi nun redaktas malnovan version de tiu ĉi artikolo.
+Se vi konservos vian redakton, ĉiuj ŝanĝoj faritaj post tiu versio perdiĝos.</strong>',
+'yourdiff'               => 'Malsamoj',
+'copyrightwarning'       => 'Bonvolu noti, ke ĉiu kontribuaĵo al la {{SITENAME}} estu rigardata kiel eldonita laŭ $2 (vidu je $1). Se vi volas, ke via verkaĵo ne estu redaktota senkompate kaj disvastigota laŭvole, ne alklaku "Konservu".<br />
+Vi ankaŭ ĵuras, ke vi mem verkis la tekston, aŭ ke vi kopiis ĝin el fonto senkopirajta.
+<strong>NE UZU KOPIRAJTAJN VERKOJN SENPERMESE!</strong>',
+'copyrightwarning2'      => 'Bonvolu noti ke ĉiuj kontribuoj al {{SITENAME}} povas esti reredaktita, ŝanĝita aŭ forigita de aliaj kontribuantoj. Se vi ne deziras ke viaj verkoj estu senkompate reredaktitaj, ne publikigu ilin ĉi tie.  <br />
+Vi ankaŭ promesu al ni ke vi verkis tion mem aŭ kopiis el publika domajno aŭ simila libera fonto (vidu $1 por detaloj). 
+<strong>NE PROPONU KOPIRAJTITAJN VERKOJN SEN PERMESO! </strong>',
+'longpagewarning'        => '<strong>AVERTO: Tiu ĉi paĝo longas $1 kilobitokojn; kelkaj retumiloj
+povas fuŝi redaktante paĝojn je longo proksime aŭ preter 32kb.
+Se eble, bonvolu disigi la paĝon al malpli grandajn paĝerojn.</strong>',
+'longpageerror'          => '<strong>Eraro: La teksto, kiun vi prezentis, longas $1 kilobajtojn, kio estas pli longa ol la maksimumo de $2 kilobajtoj. Ĝi ne povas esti storata.</strong>',
+'readonlywarning'        => '<strong>AVERTO: La datumbazo estas ŝlosita por teknika laboro;
+pro tio neeblas nun konservi vian redaktadon. Vi povas elkopii kaj englui
+la tekston al tekstdosiero por poste reenmeti ĝin al la vikio.</strong>',
+'protectedpagewarning'   => '<strong>Atentu: Tiu ĉi paĝo estas ŝlosita, por ke nur sistemestroj povu redakti ĝin.</strong>',
+'templatesused'          => 'Ŝablonoj uzitaj sur ĉi paĝo:',
+
+# History pages
+'revhistory'          => 'Historio de redaktoj',
+'nohistory'           => 'Ne ekzistas historio de redaktoj por ĉi tiu paĝo.',
+'revnotfound'         => 'Ne ekzistas malnova versio de la artikolo',
+'revnotfoundtext'     => 'Ne eblis trovi malnovan version de la artikolo kiun vi petis.
+Bonvolu kontroli la retadreson (URL) kiun vi uzis por atingi la paĝon.\b',
+'loadhist'            => 'Ŝarĝas redaktohistorion',
+'currentrev'          => 'Aktuala versio',
+'revisionasof'        => 'Kiel registrite je $1',
+'previousrevision'    => '← Antaŭa versio',
+'nextrevision'        => 'Sekva versio →',
+'currentrevisionlink' => 'vidu nunan version',
+'cur'                 => 'nun',
+'next'                => 'sekv',
+'last'                => 'ant',
+'histlegend'          => 'Klarigo: (nun) = vidu malsamojn kompare kun la nuna versio,
+(ant) = malsamojn kompare kun la antaŭa versio, M = malgranda redakteto',
+'deletedrev'          => '[forigita]',
+'histfirst'           => 'plej frua',
+'histlast'            => 'plej lasta',
+
+# Diffs
+'difference'                => '(Malsamoj inter versioj)',
+'loadingrev'                => 'ŝarĝas version por malsamoj',
+'lineno'                    => 'Linio $1:',
+'editcurrent'               => 'Redaktu la nunan version de la paĝo',
+'selectnewerversionfordiff' => 'Elektu la pli novan version por kompari.',
+'selectolderversionfordiff' => 'Elektu malpli novan version por kompari.',
+'compareselectedversions'   => 'Komparu la selektitajn versiojn',
+
+# Search results
+'searchresults'         => 'Serĉrezultoj',
+'searchresulttext'      => 'Por pliaj informoj kiel priserĉi la {{SITENAME}}n, vidu [[{{MediaWiki:helppage}}|{{int:help}}]].',
+'searchsubtitle'        => 'Serĉmendo "[[:$1]]"',
+'searchsubtitleinvalid' => 'Serĉmendo "$1"',
+'badquery'              => 'Misformita serĉmendo',
+'badquerytext'          => 'Via serĉmendo ne estis plenumebla.
+Eble vi provis serĉi vorton kun malpli ol tri literoj.
+Tion la oni ankoraŭ ne povas fari. Ankaŭ eblas, ke vi mistajpis la
+esprimon. Bonvolu reserĉi.',
+'matchtotals'           => 'La serĉmendo "$1" liveris $2 artikolojn laŭ titolo
+kaj $3 artikolojn laŭ enhavo.',
+'titlematches'          => 'Trovitaj laŭ titolo',
+'notitlematches'        => 'Neniu trovita laŭ titolo',
+'textmatches'           => 'Trovitaj laŭ enhavo',
+'notextmatches'         => 'Neniu trovita laŭ enhavo',
+'prevn'                 => '$1 antaŭajn',
+'nextn'                 => '$1 sekvajn',
+'viewprevnext'          => 'Montru ($1) ($2) ($3).',
+'showingresults'        => 'Montras <b>$1</b> trovitajn ekde la <b>$2</b>-a.',
+'showingresultsnum'     => 'Montras <b>$3</b> trovitajn ekde la <b>$2</b>-a.',
+'nonefound'             => '<strong>Noto</strong>: malsukcesaj serĉoj ofte
+okazas ĉar oni serĉas tro da ofte uzataj vortoj, kiujn ne enhavas la indekso,
+aŭ ĉar oni petas tro da serĉvortoj (nur paĝoj kiuj enhavas ĉiun serĉvorton
+montriĝos en la rezulto).',
+'powersearch'           => 'Trovu',
+'powersearchtext'       => '
+Serĉu en sekcioj: :<br />
+$1<br />
+$2 Kun alidirektiloj   Serĉu $3 $9',
+'searchdisabled'        => '<p>Oni provizore malŝaltis serĉadon per la plenteksta
+indekso pro troŝarĝita servilo. Intertempe, vi povas serĉi per <i>guglo</i> aŭ per <i>jahu!</i>:</p>',
+'blanknamespace'        => '(Artikoloj)',
+
+# Preferences page
+'preferences'           => 'Preferoj',
+'prefsnologin'          => 'Ne jam salutis!',
+'prefsnologintext'      => '[[Special:Userlogin|Ensalutu]] kaj vi povos ŝanĝi viajn preferojn.',
+'prefsreset'            => 'Preferoj reprenitaj el la registro.',
+'qbsettings'            => 'Preferoj pri ilaro',
+'qbsettings-none'	=> 'Nenia',
+'qbsettings-fixedleft'	=> 'Fiksiĝas maldekstre',
+'qbsettings-fixedright'	=> 'Fiksiĝas dekstre',
+'qbsettings-floatingleft'	=> 'Ŝvebas maldekstre',
+'qbsettings-floatingright'	=> 'Ŝvebas dekstre',
+'changepassword'        => 'Ŝanĝu pasvorton',
+'skin'                  => 'Aspekto',
+'math'                  => 'Tradukas matematikaĵon',
+'dateformat'            => 'Datformato',
+'datedefault'           => 'Nenia prefero',
+'datetime'              => 'Dato kaj horo',
+'math_failure'          => 'Malsukcesis analizi formulon',
+'math_unknown_error'    => 'Nekonata eraro',
+'math_unknown_function' => 'Nekonata funkcio',
+'math_lexing_error'     => 'Leksika analizo malsukcesis',
+'math_syntax_error'     => 'Sintakseraro',
+'math_image_error'      => 'Konverto al PNG malsukcesis',
+'prefs-personal'        => 'Uzulaj datumoj',
+'prefs-rc'              => 'Lastaj ŝanĝoj kaj elmontro de stumpoj',
+'prefs-misc'            => 'Miksitaĵoj',
+'saveprefs'             => 'Konservu preferojn',
+'resetprefs'            => 'Restarigi antaŭajn preferojn',
+'oldpassword'           => 'Malnova pasvorto',
+'newpassword'           => 'Nova pasvorto',
+'retypenew'             => 'Retajpu novan pasvorton',
+'textboxsize'           => 'Grandeco de redakta tekstujo',
+'rows'                  => 'Linioj',
+'columns'               => 'Kolumnoj',
+'searchresultshead'     => 'Agordaĵoj pri serĉorezulto',
+'resultsperpage'        => 'Montru trovitajn po',
+'contextlines'          => 'Montru liniojn el paĝoj po',
+'contextchars'          => 'Montru literojn el linioj ĝis po',
+'stubthreshold'         => 'Indiku paĝojn malpli grandajn ol',
+'recentchangescount'    => "Montru kiom da titoloj en 'Lastaj ŝanĝoj'",
+'savedprefs'            => 'Viaj preferoj estas konservitaj.',
+'timezonelegend'        => 'Horzono',
+'timezonetext'          => 'Indiku je kiom da horoj via
+loka horzono malsamas disde tiu de la servilo (UTC).
+Ekzemple, por la Centra Eŭropa Horzono, indiku "1" vintre aŭ "2" dum somertempo.',
+'localtime'             => 'Loka horzono',
+'timezoneoffset'        => 'Malsamo',
+'servertime'            => 'Loka horzono (UTC)',
+'guesstimezone'         => 'Plenigita el la foliumilo',
+'allowemail'            => 'Ricevu retmesaĝojn de aliaj uzantoj.',
+'defaultns'             => 'Serĉu la jenajn sekciojn:',
+'default'               => 'defaŭlte',
+'files'                 => 'Dosieroj',
+
+# User rights
+'userrights-lookup-user'     => 'Administru uzantogrupojn',
+'userrights-user-editname'   => 'Entajpu uzantonomon:',
+'editusergroup'              => 'Redaktu Uzantgrupojn',
+'userrights-editusergroup'   => 'Redaktu uzantogrupojn.',
+'saveusergroups'             => 'Konservu uzulan grupon',
+'userrights-groupsmember'    => 'Membro de:',
+'userrights-groupsavailable' => 'Disponeblaj grupoj:',
+'userrights-groupshelp'      => 'Selektu grupojn el kiuj vi volas forigi aŭ al kiuj vi volas aldoni uzanton. Neselektitaj grupoj ne estos ŝanĝitaj. Vi povas malselekti grupon per STR.',
+
+# Groups
+'group'            => 'Grupo:',
+'group-sysop'      => 'Sisopoj',
+'group-bureaucrat' => 'Burokratoj',
+'group-all'        => '(ĉiuj)',
+
+'group-sysop-member'      => 'Sisopo',
+'group-bureaucrat-member' => 'Burokrato',
+
+'grouppage-bureaucrat' => 'Project:Burokratoj',
+
+# User rights log
+'rightslogtext'  => 'Ĉi tio estas loglibro de uzulaj rajtŝanĝoj.',
+'rightslogentry' => 'ŝanĝis grupan membrecon por $1 de $2 al $3',
+
+# Recent changes
+'changes'           => 'ŝanĝoj',
+'recentchanges'     => 'Lastaj ŝanĝoj',
+'recentchangestext' => 'Sur tiu ĉi paĝo vi povas vidi la plej novajn vikiŝanĝojn.',
+'rcnote'            => 'Jen la plej lastaj <strong>$1</strong> ŝanĝoj dum la lastaj <strong>$2</strong> tagoj gxis la <strong>$3</strong>.',
+'rcnotefrom'        => 'Jen la ŝanĝoj ekde <b>$2</b> (lastaj ĝis <b>$1</b>).',
+'rclistfrom'        => 'Montru novajn ŝanĝojn ekde $1',
+'rcshowhideminor'   => '$1 redaktetojn',
+'rcshowhidebots'    => '$1 robotojn',
+'rcshowhideliu'     => '$1 ensalutantojn',
+'rcshowhideanons'   => '$1 anonimajn redaktojn',
+'rcshowhidepatr'    => '$1 patrolitajn redaktojn',
+'rcshowhidemine'    => '$1 miajn redaktojn',
+'rclinks'           => 'Montru $1 lastajn ŝanĝojn; montru la ŝanĝojn dum la $2 lastaj tagoj.<br />$3',
+'diff'              => 'malsamoj',
+'hist'              => 'historio',
+'hide'              => 'kaŝu',
+'show'              => 'montru',
+'minoreditletter'   => 'M',
+
+# Upload
+'upload'                      => 'Alŝutu dosieron',
+'uploadbtn'                   => 'Alŝutu dosieron',
+'reupload'                    => 'Realŝutu',
+'reuploaddesc'                => 'Revenu al la alŝuta formularo.',
+'uploadnologin'               => 'Ne ensalutinta',
+'uploadnologintext'           => 'Se vi volas alŝuti dosierojn, vi devas [[Special:Userlogin|ensaluti]].',
+'upload_directory_read_only'  => 'La TTT-servilo ne povas alskribi la alŝuto-dosierujon ($1).',
+'uploaderror'                 => 'Eraro okazis dum alŝuto',
+'uploadtext'                  => '<p>Por okulumi aŭ serĉi jam alŝutitajn dosierojn, aliru la [[Special:Imagelist|liston de alŝutaĵoj]]. Ĉiuj alŝutoj kaj forigoj estas registrataj en la [[Special:Log/upload|alŝuta loglibro]].</p>
+
+<p>Uzu ĉi tiun formularon por alŝuti novajn bildojn kaj aliajn dosierojn por ilustrado de viaj artikoloj. Ĉe kutimaj retumiloj, vi vidos ĉi-sube butonon "Foliumi..." aŭ simile; tiu malfermas la dosierelektilon de via operaciumo. Kiam vi elektos dosieron, ĝia nomo plenigos la tekstujon apud la butono. Vi ankaŭ nepre devas klakjesi la skatolon por aserti, ke vi ne malobeas la leĝan kopirajton de aliuloj per alŝuto de la dosiero. Por plenumi la alŝutadon, alklaku la butono "Alŝutu". Tio ĉi eble iomete longe daŭros, se estas granda dosiero kaj se via interreta konekto malrapidas.</p>
+
+<p>La dosiertipoj preferataj ĉe {{SITENAME}} estas JPEG por fotografaĵoj, PNG por grafikaĵoj, diagramoj, ktp; kaj OGG por sonregistraĵoj. Bonvolu doni al via dosiero nomon informan, por eviti konfuzon. Por enmeti la dosieron en artikolon, skribu ligilon laŭ la formoj</p>
+
+* <nowiki>[[</nowiki>{{ns:image}}<nowiki>:Dosiero.jpg]]</nowiki>
+* <nowiki>[[</nowiki>{{ns:image}}<nowiki>:Bildo.png|teksto por retumiloj negrafikaj]]</nowiki>
+aŭ por sono
+* <nowiki>[[</nowiki>{{ns:media}}<nowiki>:Dosiero.ogg]]</nowiki>
+
+<p>Bonvolu rimarki, ke same kiel artikoloj en la {{SITENAME}}, aliaj uzantoj rajtas redakti, anstataŭigi, aŭ forigi viajn alŝutaĵojn se ili pensas, ke tio servus la vikion. Se vi aĉe misuzas la sistemon, eblas ke vi estos forbarita.</p>',
+'uploadlog'                   => 'loglibro de alŝutaĵoj',
+'uploadlogpage'               => 'Loglibro_de_alŝutaĵoj',
+'uploadlogpagetext'           => 'Jen la plej laste alŝutitaj dosieroj.
+Ĉiuj tempoj montriĝas laŭ la horzono UTC.
+<ul>
+</ul>',
+'filename'                    => 'Dosiernomo',
+'filedesc'                    => 'Priskribo',
+'fileuploadsummary'           => 'Resumo:',
+'filestatus'                  => 'Kopirajta statuso',
+'filesource'                  => 'Fonto',
+'uploadedfiles'               => 'Alŝutitaj dosieroj',
+'ignorewarning'               => 'Ignoru averton kaj konservu dosieron ĉiukaze',
+'ignorewarnings'              => 'Ignoru ĉiajn avertojn',
+'minlength'                   => 'Dosiernomo devas havi pli ol du literojn.',
+'illegalfilename'             => 'La dosiernomo $1 entenas karaktrojn kiuj ne estas permesitaj en paĝaj titoloj. Bonvolu renomi la dosieron kaj provu denove alŝuti ĝin.',
+'badfilename'                 => 'Dosiernomo estis ŝanĝita al "$1".',
+'badfiletype'                 => '".$1" estas neakceptata dosiertipo.',
+'large-file'                  => 'Oni rekomendas, ke dosieroj ne superu grandon de $1 bitokoj; tiu ĉi enhavas $2 bitokojn.',
+'largefileserver'             => 'Ĉi tiu dosiero estas pli granda ol permesas la servilaj preferoj.',
+'emptyfile'                   => 'La dosiero kiun vi alŝutis ŝajnas malplena. Tio povas esti kaŭzita sde tajperaro en la titolo. Bonvolu kontroli ĉu vi vere volas alŝuti tiun dosieron.',
+'fileexists'                  => 'Dosiero kun tia ĉi nomo jam ekzistas. Bonvolu kontroli $1 krom se vi certas ke vi konscie volas ŝanĝi ĝuste tiun.',
+'fileexists-forbidden'        => 'Dosiero kun tia ĉi nomo jam ekzistas; bonvole realŝutu ĉi tiun dosieron per nova nomo. [[Image:$1|thumb|center|$1]]',
+'fileexists-shared-forbidden' => 'Dosiero kun tia ĉi nomo jam ekzistas en la komuna dosiero-deponejo; bonvole realŝutu ĉi tiun dosieron per nova nomo. [[Image:$1|thumb|center|$1]]',
+'successfulupload'            => 'Alŝuto sukcesis!',
+'fileuploaded'                => 'Vi sukcese alŝutis dosieron "$1".
+Bonvolu sekvi la jenan ligilo: ($2) al la priskrib-paĝo kaj
+verki iom da informo pri la dosiero. Ekzemple, de kie ĝi devenas;
+kiam ĝi estis kreita, kaj kiu kreis ĝin; kaj ion ajn, kion vi scias pri ĝi.',
+'uploadwarning'               => 'Averto',
+'savefile'                    => 'Konservu dosieron',
+'uploadedimage'               => 'alŝutis "[[$1]]"',
+'uploaddisabled'              => 'Ni petas pardonon, sed oni malebligis alŝutadon.',
+'uploaddisabledtext'          => 'Alŝutado de dosieroj estas malfunkciigita je tiu ĉi vikio.',
+'uploadscripted'              => 'HTML-aĵo aŭ skriptokodaĵo troviĝas en tiu ĉi dosiero, kiun TTT-foliumilo eble interpretus erare.',
+'uploadcorrupt'               => 'La dosiero estas difektita aŭ havas malĝustan finaĵon. Bonvolu kontroli la dosieron kaj refoje alŝuti ĝin.',
+'uploadvirus'                 => 'Viruso troviĝas en la dosiero! Detaloj: $1',
+'sourcefilename'              => 'Fonta dosiernomo',
+'destfilename'                => 'Celdosiernomo',
+
+# Image list
+'imagelist'                 => 'Listo de alŝutitaj dosieroj',
+'imagelisttext'             => 'Jen listo de $1 alŝutaĵoj, ordigitaj laŭ $2.',
+'getimagelist'              => 'akiras dosierliston',
+'ilsubmit'                  => 'Trovu!',
+'showlast'                  => 'Montru la $1 lastajn bildojn laŭ $2.',
+'byname'                    => 'nomo',
+'bydate'                    => 'dato',
+'bysize'                    => 'grandeco',
+'imgdelete'                 => 'forigu',
+'imgdesc'                   => 'pri',
+'imglegend'                 => '(pri) = montru/redaktu priskribon de dosiero.',
+'imghistory'                => 'Historio de alŝutoj',
+'revertimg'                 => 'res',
+'deleteimg'                 => 'for',
+'deleteimgcompletely'       => 'for',
+'imghistlegend'             => '(nun) = ĉi tiu estas la nuna versio de la dosiero, (for) = forigu
+ĉi tiun malnovan version, (res) = restarigu ĉi tiun malnovan version.
+<br /><i>Por vidi la dosieron laŭdate, alklaku la daton</i>.',
+'imagelinks'                => 'Ligiloj al la dosiero',
+'linkstoimage'              => 'La jenaj paĝoj ligas al ĉi tiu dosiero:',
+'nolinkstoimage'            => 'Neniu paĝo ligas al ĉi tiu dosiero.',
+'sharedupload'              => 'This file is a shared upload and may be used by other projects.',
+'noimage'                   => 'Ne ekzistas dosiero kun tia nomo vi povas [$1 alŝuti ĝin].',
+'noimage-linktext'          => 'alŝutu ĝin',
+'uploadnewversion-linktext' => 'Alŝutu novan version de ĉi tiu dosiero',
+
+# MIME search
+'mimesearch' => 'MIME-serĉilo',
+'download'   => 'elŝutu',
+
+# Unwatched pages
+'unwatchedpages' => 'Neatentataj paĝoj',
+
+# List redirects
+'listredirects' => 'Listo de redirektiloj',
+
+# Unused templates
+'unusedtemplates'     => 'Neuzitaj ŝablonoj',
+'unusedtemplatestext' => 'Ĉi paĝo listigas ĉiujn paĝojn en la nomspaco "Ŝablono" kiuj ne estas enmetitaj en alia paĝo. Bonvolu kontroli aliajn ligilojn al la ŝablonoj antaŭ ol forigi ilin.',
+'unusedtemplateswlh'  => 'aliaj ligiloj',
+
+# Random redirect
+'randomredirect' => 'Hazarda alidirekto',
+
+# Statistics
+'statistics'    => 'Statistiko',
+'sitestats'     => 'Pri la retejo',
+'userstats'     => 'Pri la uzantaro',
+'sitestatstext' => "Troviĝas en nia datumaro sume '''\$1''' paĝoj.
+Tiu nombro enhavas \"diskutpaĝojn\", paĝojn pri {{SITENAME}}, \"artikoletetojn\", alidirektilojn, kaj aliajn, kiuj eble ne vere estas artikoloj. Malatentante ilin, oni povas nombri '''\$2''' probablajn ĝustajn artikolojn.
+
+'''\$8''' dosieroj estis alŝutitaj.
+
+Oni vidis sume '''\$3''' paĝojn, kaj redaktis sume '''\$4''' plural paĝojn
+ekde la starigo de la vikio.
+Tio estas meznombre po unu paĝo por '''\$5''' paĝoj viditaj, kaj por '''\$6''' redaktoj.
+
+La nuna longeco de la [http://meta.wikimedia.org/wiki/Help:Job_queue laborenda vico] estas '''\$7'''.",
+'userstatstext' => "Enskribiĝis '''$1''' uzantoj. El tiuj, '''$2''' (aŭ '''$4%''') estas administrantoj (vidu $3).",
+
+'disambiguations'      => 'Misligitaj apartigiloj',
+'disambiguationspage'  => 'Template:Apartigilo',
+'disambiguations-text' => 'La jenaj paĝoj alligas <i>paĝon-apartigilon</i>. Ili devus anstataŭe alligi la ĝustan temon.<br />Oni konsideras tiujn paĝojn, kiujn alligas $1 apartigiloj.<br />Ligado el ne-artikolaj sekcioj <i>ne</i> listiĝas ĉi tie.',
+
+'doubleredirects'     => 'Duoblaj alidirektadoj',
+'doubleredirectstext' => '<b>Atentu:</b> Eblas, ke la jena listo enhavas falsajn rezultojn. Ĝenerale, tio signifas, ke estas plua teksto kun ligiloj post la #REDIRECT.<br />
+Ĉiu linio montras ligilojn ĉe la unua kaj dua alidirektadoj, kaj la unua linio de la teksto de la dua alidirektado, kiu ĝenerale montras la "veran" artikolon, kiu devus celi la unuan alidirektadon.',
+
+'brokenredirects'     => 'Rompitaj alidirektadoj',
+'brokenredirectstext' => 'La jenaj alidirektadoj ligas al neekzistantaj artikoloj.',
+
+# Miscellaneous special pages
+'nbytes'                  => '$1 {{PLURAL:$1|bitoko|bitokoj}}',
+'ncategories'             => '$1 categories',
+'nlinks'                  => '$1 {{PLURAL:$1|ligilo|ligiloj}}',
+'nrevisions'              => '$1 {{PLURAL:$1|revizio|revizioj}}',
+'nviews'                  => '$1-foje',
+'lonelypages'             => 'Neligitaj paĝoj',
+'uncategorizedpages'      => 'Neenkategoriitaj paĝoj',
+'uncategorizedcategories' => 'Neenkategoriitaj kategorioj',
+'unusedcategories'        => 'Neuzitaj kategorioj',
+'unusedimages'            => 'Neuzataj bildoj',
+'popularpages'            => 'Plej vizitataj paĝoj',
+'wantedcategories'        => 'Dezirataj kategorioj',
+'wantedpages'             => 'Dezirataj paĝoj',
+'mostlinked'              => 'Plej ligitaj paĝoj',
+'mostlinkedcategories'    => 'Plej ligitaj kategorioj',
+'mostcategories'          => 'Artikoloj kun la plej multaj kategorioj',
+'mostimages'              => 'Plej ligitaj bildoj',
+'mostrevisions'           => 'Artikoloj kun la plej multaj revizioj',
+'allpages'                => 'Ĉiuj paĝoj',
+'prefixindex'             => 'Indeksa prefikso',
+'randompage'              => 'Hazarda paĝo',
+'shortpages'              => 'Paĝetoj',
+'longpages'               => 'Paĝegoj',
+'deadendpages'            => 'Seneliraj paĝoj',
+'listusers'               => 'Uzantaro',
+'specialpages'            => 'Specialaj paĝoj',
+'spheading'               => 'Specialaj paĝoj',
+'restrictedpheading'      => 'Alirlimigitaj specialaj paĝoj',
+'recentchangeslinked'     => 'Rilataj paĝoj',
+'rclsub'                  => '(al paĝoj ligitaj de "$1")',
+'newpages'                => 'Novaj paĝoj',
+'ancientpages'            => 'Plej malnovaj artikoloj',
+'intl'                    => 'Interlingvaj ligiloj',
+'move'                    => 'Movu',
+'movethispage'            => 'Movu la paĝon',
+'unusedimagestext'        => 'Notu, ke aliaj TTT-ejoj, ekzemple
+la alilingvaj {{SITENAME}}j, povas rekte ligi al dosiero per URL.
+Tio ne estus enkalkutita en la jena listo.',
+'unusedcategoriestext'    => 'La paĝoj de la sekvanta kategorio jam ekzistas, sed neniu alia artikolo aŭ kategorio rilatas al ĝi.',
+
+# Book sources
+'booksources'        => 'Libroservoj',
+'booksources-text'   => 'Jen ligilaro al aliaj TTT-ejoj, kiuj vendas librojn,
+kaj/aŭ informumos pri la libro ligita.
+La {{SITENAME}} ne estas komerce ligita al tiuj vendejoj, kaj la listo ne estu
+komprenata kiel rekomendo aŭ reklamo.',
+
+'categoriespagetext' => 'La sekvantaj kategorioj ekzistas jam en la vikio.',
+'userrights'         => 'Prizorgo de uzulaj rajtoj',
+'groups'             => 'Uzulaj grupoj',
+'alphaindexline'     => '$1 ĝis $2',
+'version'            => 'Versio',
+'log'                => 'Loglibroj',
+'alllogstext'        => 'Suma kompilaĵo de ĉiuj alŝutoj, forigoj, protektoj, blokadoj kaj agoj de administrantoj. Vi povas pliprecizigi la kompilaĵon laŭ loglibra tipo, **** vikipediista **** nomo aŭ koncernita paĝo.',
+
+# Special:Allpages
+'nextpage'          => 'Sekvanta paĝo ($1)',
+'allpagesfrom'      => 'Montru paĝojn ekde :',
+'allarticles'       => 'Ĉiuj artikoloj',
+'allinnamespace'    => 'Ĉiuj paĝoj ($1 nomspaco)',
+'allnotinnamespace' => 'Ĉiuj paĝoj (ne en nomspaco $1)',
+'allpagesprev'      => 'Antaŭen',
+'allpagesnext'      => 'Sekven',
+'allpagessubmit'    => 'Ek!',
+'allpagesprefix'    => 'Montru paĝojn kun prefikso:',
+
+# E-mail user
+'mailnologin'     => 'Neniu alsendota adreso',
+'mailnologintext' => 'Vi nepre estu [[Special:Userlogin|salutanta]] kaj havanta validan retpoŝtadreson en viaj [[Special:Preferences|preferoj]] por retpoŝti al aliaj uzantoj.',
+'emailuser'       => 'Retpoŝtu',
+'emailpage'       => 'Retpoŝtu',
+'emailpagetext'   => 'Se la alsendota uzanto donis validan retpoŝtadreson en la preferoj, vi povas sendi unu mesaĝon per la jena formulo. La retpoŝtadreso, kiun vi metis en la preferoj, aperos kiel "El"-adreso de la poŝto, por ke la alsendonto povos respondi.',
+'usermailererror' => 'Resendita retmesaĝa erarsubjekto :',
+'defemailsubject' => '{{SITENAME}} ****-retmesaĝo',
+'noemailtitle'    => 'Neniu retpoŝtadreso',
+'noemailtext'     => 'Ĉi tiu uzanto aŭ ne donis validan retpoŝtadreson aŭ elektis ne ricevi retpoŝton de aliaj uzantoj.',
+'emailfrom'       => 'El',
+'emailto'         => 'Al',
+'emailsubject'    => 'Subjekto',
+'emailmessage'    => 'Mesaĝo',
+'emailsend'       => 'Sendu',
+'emailsent'       => 'Retmesaĝo sendita',
+'emailsenttext'   => 'Via retmesaĝo estas sendita.',
+
+# Watchlist
+'watchlist'            => 'Atentaro',
+'mywatchlist'            => 'Atentaro',
+'nowatchlist'          => 'Vi ne jam elektis priatenti iun ajn paĝon.',
+'watchlistcount'       => "'''Vi atentas $1 aĵojn en via atentaro, inkluzive de diskutpaĝoj.'''",
+'clearwatchlist'       => 'Malplenigu atentaron',
+'watchlistcleartext'   => 'Ĉu vi certas, ke vi volas forigi ilin?',
+'watchlistclearbutton' => 'Malplenigi atentaron',
+'watchlistcleardone'   => 'Via atentaro estis malplenigita. $1 eroj estis forigitaj.',
+'watchnologin'         => 'Ne ensalutinta',
+'watchnologintext'     => 'Nepras [[Special:Userlogin|ensaluti]] por ŝanĝi vian atentaron.',
+'addedwatch'           => 'Aldonis al atentaro',
+'addedwatchtext'       => "La paĝo \"[[:\$1]]\" estis aldonita al via [[Special:Watchlist|atentaro]]. Estontaj ŝanĝoj de tiu ĉi paĝo aperos en '''grasa tiparo''' en la [[Special:Recentchanges|listo de Lastaj Ŝanĝoj]], kaj estos listigitaj en via atentaro. Se vi poste volos forigi la paĝon el via atentaro, alklaku \"Malatentu paĝon\" en la ilobreto.",
+'removedwatch'         => 'Forigis el atentaro',
+'removedwatchtext'     => 'La paĝo "[[:$1]]" estas forigita el via atentaro.',
+'watch'                => 'Atentu',
+'watchthispage'        => 'Priatentu paĝon',
+'unwatch'              => 'Malatentu',
+'unwatchthispage'      => 'Malatentu paĝon',
+'notanarticle'         => 'Ne estas artikolo',
+'watchnochange'        => 'Neniu artikolo en via atentaro redaktiĝis dum la prispektita tempoperiodo.',
+'watchdetails'         => '(Vi priatentas $1 paĝojn [krom diskutopaĝoj];
+laste $2 paĝoj entute redaktiĝis en la vikio; $3...
+[$4 redaktu vian atentaron].)',
+'wlheader-enotif'      => '* Retpoŝta sciigo estas ebligita',
+'wlheader-showupdated' => "* Montriĝas per '''dikaj literoj''' tiuj paĝoj, kiujn oni ŝanĝis ekde kiam vi laste vizitis ilin",
+'watchmethod-recent'   => 'traserĉas lastajn redaktojn',
+'watchmethod-list'     => 'traserĉas priatentitajn',
+'removechecked'        => 'Forprenu elektitajn el la listo',
+'watchlistcontains'    => 'Via atentaro enhavas $1 paĝojn.',
+'watcheditlist'        => 'Jen listo de ĉiu paĝtitolo en via atentaro.
+Elektu forigotajn paĝojn kaj alklaku "forprenu elektitajn" sube.',
+'removingchecked'      => 'Forprenas elektitajn...',
+'couldntremove'        => 'Neeblas forigi titolon "$1"...',
+'iteminvalidname'      => 'Ia eraro pri "$1", nevalida titolo...',
+'wlnote'               => 'Jen la plej lastaj $1 redaktoj dum la lastaj <b>$2</b> horoj.',
+'wlshowlast'           => 'Montru el lastaj $1 horoj $2 tagoj $3',
+'wlsaved'              => 'Jen konservita versio de via atentaro.',
+'wldone'               => 'Farita.',
+
+'enotif_mailer'      => 'Averta retmesaĝo de {{SITENAME}}',
+'enotif_reset'       => 'Marku ĉiujn vizititajn paĝojn',
+'enotif_newpagetext' => 'Tiu ĉi estas nova paĝo',
+'changed'            => 'ŝanĝita',
+'enotif_subject'     => 'la paĝo $PAGETITLE de {{SITENAME}} estis $CHANGEDORCREATED de $PAGEEDITOR',
+'enotif_lastvisited' => 'Vidu $1 por ĉiuj ŝanĝoj de post via lasta vizito.',
+'enotif_body'        => 'Kara $WATCHINGUSERNAME,
+
+la paĝo $PAGETITLE de {{SITENAME}} estis $CHANGEDORCREATED je $PAGEEDITDATE de $PAGEEDITOR, vidu {{fullurl:$PAGETITLE RAWURL}} por la nuna versio.
+
+$NEWPAGE
+
+Redakta resumo : $PAGESUMMARY $PAGEMINOREDIT
+
+Kontaktu la redaktinton:
+retpoŝto {{fullurl:Special:Emailuser/$PAGEEDITOR RAWURL}}
+vikio {{fullurl:User:$PAGEEDITOR RAWURL}}
+
+Ne estos aliaj avertoj kaze de sekvaj ŝanĝoj krom se vi vizitas la paĝon. Vi povas ankaŭ malaktivigi la avertsignalon por ĉiuj priatentitaj paĝoj de via atentaro.
+
+             Sincere via, la avertsistemo de {{SITENAME}}
+
+--
+Por ŝanĝi la elektojn de via atentaro, bv viziti
+{{fullurl:Special:Watchlist/edit}}
+
+Reagoj kaj plia helpo :
+{{fullurl:{{MediaWiki:helppage}}}}',
+
+# Delete/protect/revert
+'deletepage'                  => 'Forigu paĝon',
+'confirm'                     => 'Konfirmu',
+'excontent'                   => "enhavis: '$1'",
+'excontentauthor'             => "la enteno estis : '$1' (kaj la sola kontribuinto estis '$2')",
+'exbeforeblank'               => "antaŭ malplenigo enhavis: '$1'",
+'exblank'                     => 'estis malplena',
+'confirmdelete'               => 'Konfirmu forigadon',
+'deletesub'                   => '(Forigas "$1")',
+'historywarning'              => 'Averto: la forigota paĝo havas historion:',
+'confirmdeletetext'           => 'Vi estas definitive viŝonta paĝon aŭ bildon kun ĝia historio. Bv. konfirmi, ke vi vere intencas fari tion, komprenante ties konsekvencojn, kaj ke vi agas tiel laŭ [[{{MediaWiki:policy-url}}]].',
+'actioncomplete'              => 'Ago farita',
+'deletedtext'                 => '"$1" estas forigita.
+Vidu la paĝon $2 por registro de lastatempaj forigoj.',
+'deletedarticle'              => 'forigis "$1"',
+'dellogpage'                  => 'Loglibro de forigoj',
+'dellogpagetext'              => 'Jen listo de la plej lastaj forigoj el la datumaro.
+Ĉiuj tempoj sekvas la horzonon UTC.
+<ul>
+</ul>',
+'deletionlog'                 => 'listo de forigoj',
+'reverted'                    => 'Restarigis antaŭan version',
+'deletecomment'               => 'Kialo por forigo',
+'imagereverted'               => 'Restarigo de antaŭa versio sukcesis.',
+'rollback'                    => 'Restarigu antaŭan redakton',
+'rollback_short'              => 'Restarigo',
+'rollbacklink'                => 'restarigu antaŭan',
+'rollbackfailed'              => 'Restarigo malsukcesis',
+'cantrollback'                => 'Neeblas restarigi antaŭan redakton; la redaktinto lasta estas la sola de la paĝo.',
+'alreadyrolled'               => 'Ne eblas restarigi la lastan redakton de [[:$1]] de la [[User:$2|$2]] ([[User talk:$2|diskuto]]) pro tio, ke oni intertempe redaktis la paĝon. La lasta redaktinto estas [[User:$3|$3]] ([[User talk:$3|diskuto]]).',
+'editcomment'                 => "La komento estis: '<i>$1</i>'.", # only shown if there is an edit comment
+'revertpage'                  => 'Restarigis redaktojn de [[Special:Contributions/$2|$2]] ([[User talk:$2|diskuto]]); restarigis al la lasta versio de [[User:$1|$1]]',
+'sessionfailure'              => 'Ŝajnas ke estas problemo kun via ensalutado;
+Ĉi ago estis nuligita por malhelpi fiensalutadon.
+Bonvolu alklalki la reirbutonon kaj reŝarĝi la paĝon el kiu vi venas, kaj provu denove.',
+'protectlogpage'              => 'Protektloglibro',
+'protectlogtext'              => 'Jen listo de ŝlositaj kaj malŝlositaj paĝoj. Bv. kontroli la [[Special:Protectedpages|liston de protektitaj paĝoj]] por la aktuala listo de protektitaj paĝoj.',
+'protectedarticle'            => 'protektita [[:$1]]',
+'unprotectedarticle'          => 'malprotektita [[$1]]',
+'protectsub'                  => '(Protektante "$1")',
+'confirmprotecttext'          => 'Ĉu vi vere volas protekti ĉi paĝon ?',
+'confirmprotect'              => 'Konfirmu protektadon',
+'protectmoveonly'             => 'Protektu nur kontraŭ movoj',
+'protectcomment'              => 'Kialo por protekti',
+'unprotectsub'                => '(Malprotektanta "$1")',
+'confirmunprotecttext'        => 'Ĉu vi vere volas malprotekti ĉi paĝon ?',
+'confirmunprotect'            => 'Konfirmu malprotektadon',
+'unprotectcomment'            => 'Kialo de malprotekto',
+'protect-unchain'             => 'Malŝlosu movpermesojn',
+'protect-text'                => 'Ĉi tie vi povas ŝanĝi la protektonivelon por paĝo <strong>$1</strong>.',
+'protect-viewtext'            => 'Via konto ne havas rajtojn por ŝanĝi la protektnivelon de la paĝo. Jen la nunaj ecoj <!--  settings --> por la paĝo [[$1]]',
+'protect-default'             => '(defaŭlte)',
+'protect-level-autoconfirmed' => 'Bloki neensalutintajn uzantojn',
+'protect-level-sysop'         => 'Nur administrantoj',
+
+# Undelete
+'undelete'                 => 'Restarigu forigitan paĝon',
+'undeletepage'             => 'Montru kaj restarigu forigitajn paĝojn',
+'viewdeletedpage'          => 'Rigardu forigitajn paĝojn',
+'undeletepagetext'         => 'La jenaj paĝoj estis forigitaj, sed ankoraŭ restas arkivitaj,
+kaj oni povas restarigi ilin. La arkivo povas esti malplenigita periode.',
+'undeleteextrahelp'        => "Por restarigi la tuton de la paĝo, marku neniun markobutonon kaj klaku la butonon '''''Restarigu'''''. Por restarigi selektitajn versiojn de la paĝo, marku la butonojn konformajn al la dezirataj versioj, kaj klaku la butonon '''''Restarigu'''''. Klako je '''''Restarigu''''' malplenigos la komentozonon kaj malmarkos ĉiujn la markobutonojn.",
+'undeletearticle'          => 'Restarigu forigitan artikolon',
+'undeleterevisions'        => '$1 versioj arkivitaj',
+'undeletehistory'          => 'Se vi restarigos la paĝon, ĉiuj versioj estos restarigitaj
+en la historio. Se nova paĝo kun la sama nomo estis kreita post la forigo, la restarigitaj
+versioj aperos antaŭe en la historio, kaj la aktuala versio ne estos anstataŭigita.',
+'undeleterevision'         => 'Forigita versio de $1 $2',
+'undeletehistorynoadmin'   => 'Ĉi tiu artikolo estis forigita. La kaŭzo por la forigo estas montrata en la malsupra resumo, kune kun detaloj pri la uzantoj, kiuj redaktis ĉi tiun paĝon antaŭ la forigo. La aktuala teksto de ĉi tiuj forigitaj revizioj estas atingebla nur por administrantoj.',
+'undeletebtn'              => 'Restarigu!',
+'undeletereset'            => 'Reŝarĝu',
+'undeletecomment'          => 'Komento:',
+'undeletedarticle'         => 'restarigis "$1"',
+'undeletedrevisions'       => '$1 restarigita(j) versio(j)',
+'undeletedrevisions-files' => '$1 revizioj kaj $2 dosiero(j) restarigitaj',
+'undeletedfiles'           => '$1 dosiero(j) restarigita(j)',
+'undeletedpage'            => "<big>'''$1 estis restarigita'''</big>
+
+Konsultu la [[Special:Log/delete|deletion log]] por protokolo pri la lastatempaj forigoj kaj restarigoj.",
+
+# Namespace form on various pages
+'namespace' => 'Nomspaco:',
+'invert'    => 'Inversu selektaĵon',
+
+# Contributions
+'contributions' => 'Kontribuoj de uzanto',
+'mycontris'     => 'Miaj kontribuoj',
+'contribsub2'    => 'De $1 ($2)',
+'nocontribs'    => 'Trovis neniajn redaktojn laŭ tiu kriterio.',
+'ucnote'        => 'Jen la <b>$1</b> lastaj redaktoj de tiu uzanto dum la <b>$2</b> lastaj tagoj.',
+'uclinks'       => 'Montru la $1 lastajn redaktojn; montru la $2 lastajn tagojn.',
+'uctop'         => ' (lasta)',
+'newbies'       => 'novaĵoj',
+
+'sp-contributions-newest'      => 'Plej novaj',
+'sp-contributions-oldest'      => 'Plej malnovaj',
+'sp-contributions-newer'       => '$1 pli novajn',
+'sp-contributions-older'       => '$1 pli malnovajn',
+'sp-contributions-newbies-sub' => 'Kontribuoj de novaj uzuloj. Forigitaj paĝoj ne estas montritaj.',
+
+'sp-newimages-showfrom' => 'Montru novajn bildojn komencante de $1',
+
+# What links here
+'whatlinkshere' => 'Ligiloj ĉi tien',
+'notargettitle' => 'Sen celpaĝo',
+'notargettext'  => 'Vi ne precizigis, kiun paĝon aŭ uzanton priumi.',
+'linklistsub'   => '(Listo de ligiloj)',
+'linkshere'     => 'La jenaj paĝoj ligas ĉi tien:',
+'nolinkshere'   => 'Neniu paĝo ligas ĉi tien.',
+'isredirect'    => 'alidirekto',
+
+# Block/unblock
+'blockip'            => 'Forbaru IP-adreson/nomon',
+'blockiptext'        => 'Uzu la suban formularon por bloki skribeblecon por specifa IP-adreso aŭ uzanto. Tion vi faru vere nur por malebligi vandaladon laŭ la [[{{MediaWiki:policy-url}}|regularo]]. Menciu la specifan kaŭzon, ekzemple citante vandalitan paĝon.',
+'ipaddress'          => 'IP-adreso/nomo',
+'ipadressorusername' => 'IP adreso aŭ uzula nomo',
+'ipbexpiry'          => 'Blokdaŭro',
+'ipbreason'          => 'Kialo',
+'ipbsubmit'          => 'Forbaru la adreson',
+'ipbother'           => 'Alia daŭro',
+'ipboptions'         => '2 horoj:2 hours,1 tago:1 day,3 tagoj:3 days,1 semajno:1 week,2 semajnoj:2 weeks,1 monato:1 month,3 monatoj:3 months,6 monatoj:6 months,1 jaro:1 year,porĉiam:infinite',
+'ipbotheroption'     => 'alia',
+'badipaddress'       => 'Neniu uzanto, aŭ la IP-adreso estas misformita.',
+'blockipsuccesssub'  => 'Oni sukcese forbaris la adreson/nomon.',
+'blockipsuccesstext' => '"$1" estas forbarita. <br />Vidu la [[Special:Ipblocklist|liston de IP-forbaroj]].',
+'unblockip'          => 'Malforbaru IP-adreson/nomon',
+'unblockiptext'      => 'Per la jena formulo vi povas repovigi al iu
+forbarita IP-adreso/nomo la povon enskribi en la vikio.',
+'ipusubmit'          => 'Malforbaru la adreson',
+'ipblocklist'        => 'Listo de forbaritaj IP-adresoj/nomoj',
+'blocklistline'      => 'Je $1, $2 forbaris $3 ($4)',
+'infiniteblock'      => 'senfina',
+'expiringblock'      => 'finiĝas je $1',
+'ipblocklistempty'   => 'La blokada listo estas malplena.',
+'blocklink'          => 'forbaru',
+'unblocklink'        => 'malforbaru',
+'contribslink'       => 'kontribuoj',
+'autoblocker'        => 'Provizore forbarita aŭtomate pro tio, ke vi uzas la saman IP-adreson kiel "$1", kiu estis forbarita pro : "$2".',
+'blocklogpage'       => 'Forbarlibro',
+'blocklogentry'      => 'forbaris "$1" por daŭro de "$2"',
+'blocklogtext'       => 'Ĉi tio estas loglibro pri uzanto-forbaraj kaj malforbaraj agoj. Aŭtomate forbaritaj IP adresoj ne estas listigitaj. Vidu la [[Special:Ipblocklist|IP forbarliston]] por ĉi-momente fobaritaj uzulantoj kaj IPoj.',
+'unblocklogentry'    => '$1 estis malbarita',
+'ipb_expiry_invalid' => 'Nevalida blokdaŭro.',
+
+# Developer tools
+'lockdb'              => 'Ŝlosi datumaron',
+'unlockdb'            => 'Malŝlosi datumaron',
+'lockdbtext'          => 'Se vi ŝlosos la datumaron, tio malebligos al ĉiuj uzantoj
+redakti paĝojn, ŝanĝi preferojn, priumi atentarojn, kaj fari diversajn aliajn
+aferojn, por kiuj nepras ŝanĝi la datumaron.
+Bonvolu certigu, ke vi efektive intencas tion fari, kaj ke vi ja malŝlosos
+la datumaron post ol vi finos vian riparadon.',
+'unlockdbtext'        => 'Se vi malŝlosos la datumaron, tio reebligos al ĉiuj uzantoj
+redakti paĝojn, ŝanĝi preferojn, priumi la atentaron, kaj fari aliajn aferojn,
+por kiuj nepras ŝanĝi al la datumaro.
+Bonvolu certigu, ke vi efektive intencas tion fari.',
+'lockconfirm'         => 'Jes, mi vere volas ŝlosi la datumaron.',
+'unlockconfirm'       => 'Jes, mi vere volas malŝlosi la datumaron.',
+'lockbtn'             => 'Ŝlosi datumaron',
+'unlockbtn'           => 'Malŝlosi datumaron',
+'locknoconfirm'       => 'Vi ne konfirmis.',
+'lockdbsuccesssub'    => 'Datumaro ŝlosita',
+'unlockdbsuccesssub'  => 'Datumaro malŝlosita',
+'lockdbsuccesstext'   => 'La datumaro de {{SITENAME}} estas ŝlosita.
+<br />Ne forgesu malŝlosi ĝin post kiam vi finos la riparadon.',
+'unlockdbsuccesstext' => 'La datumaro de {{SITENAME}} estas malŝlosita.',
+
+# Move page
+'movepage'                => 'Movu paĝon',
+'movepagetext'            => "Per la jena formulo vi povas ŝanĝi la nomon de iu paĝo, kunportante
+ĝian historion de redaktoj je la nova nomo.
+La antaŭa titolo fariĝos alidirektilo al la nova titolo.
+Ligiloj al la antaŭa titolo <i>ne</i> estos ŝanĝitaj; uzu
+la riparilojn kaj zorgilojn por certigi,
+ke ne restos duoblaj aŭ fuŝitaj alidirektiloj.
+Kiel movanto, vi respondecas pri ĝustigado de fuŝitaj ligiloj.
+
+Notu, ke la paĝo '''ne''' estos movita se jam ekzistas paĝo
+ĉe la nova titolo, krom se ĝi estas malplena aŭ alidirektilo
+al ĉi tiu paĝo, kaj sen antaŭa redaktohistorio. Pro tio, vi ja
+povos removi la paĝon je la antaŭa titolo se vi mistajpus, kaj
+neeblas ke vi neintence forviŝus ekzistantan paĝon per movo.
+
+<b>AVERTO!</b>
+Tio povas esti drasta kaj neatendita ŝanĝo por populara paĝo;
+bonvolu certigi vin, ke vi komprenas ties konsekvencojn antaŭ
+ol vi antaŭeniru.",
+'movepagetalktext'        => "La movo aŭtomate kunportos la diskuto-paĝon, se tia ekzistas, '''krom se:'''
+*Vi movas la paĝon tra nomspacoj (ekz de ''Nomo'' je ''User:Nomo''),
+*Ne malplena diskuto-paĝo jam ekzistas je la nova nomo, aŭ
+*Vi malelektas la suban ŝaltilon.
+
+Tiujokaze, vi nepre permane kunigu la diskuto-paĝojn se vi tion deziras.",
+'movearticle'             => 'Movu paĝon',
+'movenologin'             => 'Ne ensalutinta',
+'movenologintext'         => 'Vi nepre estu registrita uzanto kaj [[Special:Userlogin|ensalutu]] por rajti movi paĝojn.',
+'newtitle'                => 'Al nova titolo',
+'movepagebtn'             => 'Movu paĝon',
+'pagemovedsub'            => 'Sukcesis movi',
+'pagemovedtext'           => 'Paĝo "[[$1]]" estas movita al "[[$2]]".',
+'articleexists'           => 'Paĝo kun tiu nomo jam ekzistas, aŭ la nomo kiun vi elektis ne validas.
+Bonvolu elekti alian nomon.',
+'talkexists'              => 'Oni ja sukcesis movi la paĝon mem, sed
+ne movis la diskuto-paĝon ĉar jam ekzistas tia ĉe la nova titolo.
+Bonvolu permane kunigi ilin.',
+'movedto'                 => 'movita al',
+'movetalk'                => 'Movu ankaŭ la "diskuto"-paĝon, se ĝi ekzistas.',
+'talkpagemoved'           => 'Ankaŭ la diskutpaĝo estas movita.',
+'talkpagenotmoved'        => 'La diskutpaĝo <strong>ne</strong> estas movita.',
+'1movedto2'               => '[[:$1|$1]] movita al [[:$2|$2]]',
+'1movedto2_redir'         => '[[:$1|$1]] movita al [[:$2|$2]], redirekto lasita',
+'movelogpage'             => 'Loglibro de paĝmovoj',
+'movelogpagetext'         => 'Jen listo de movitaj paĝoj',
+'movereason'              => 'Kialo',
+'revertmove'              => 'restarigu',
+'delete_and_move'         => 'Forigu kaj movu',
+'delete_and_move_text'    => '==Forigo nepras==
+
+La celartikolo "[[$1]]" jam ekzistas. Ĉu vi volas forigi ĝin por krei spacon por la movo?',
+'delete_and_move_confirm' => 'Jes, forigu la paĝon',
+'delete_and_move_reason'  => 'Forigita por ebligi movon',
+'selfmove'                => 'Font- kaj cel-titoloj samas; ne eblas movi paĝon sur ĝin mem.',
+'immobile_namespace'      => 'La celtitolo estas de speciala speco; ne eblas movi paĝojn en tiun nomspacon.',
+
+# Export
+'export'        => 'Eksportu paĝojn',
+'exporttext'    => 'Vi povas eksporti la tekston kaj la redaktohistorion de aparta paĝo aŭ de paĝaro kolektita en ia XML ; tio povas esti importita en alian programon funkciantan per MediaWiki-softvaro, ŝanĝita, aŭ nur prenita por propra privata uzo.',
+'exportcuronly' => 'Entenas nur la aktualan version, ne la malnovajn.',
+
+# Namespace 8 related
+'allmessages'               => 'Ĉiuj mesaĝoj',
+'allmessagesname'           => 'Nomo',
+'allmessagesdefault'        => 'Defaŭlta teksto',
+'allmessagescurrent'        => 'Nuna teksto',
+'allmessagestext'           => 'Ĉi tio estas listo de ĉiuj mesaĝoj haveblaj en la MediaWiki: nomspaco',
+'allmessagesnotsupportedUI' => 'La nuna lingvo de interfaco <b>$1</b> ne estas subtenata en Special:Allmessages de tiu ĉi paĝaro.',
+'allmessagesnotsupportedDB' => 'Speciala:Allmessages ne subtenata ĉar la variablo wgUseDatabaseMessages estas malkonektita.',
+'allmessagesfilter'         => 'Filtrilo laŭ racia esprimo :',
+'allmessagesmodified'       => 'Montru nur ŝanĝitajn',
+
+# Thumbnails
+'thumbnail-more'  => 'Pligrandigu',
+'missingimage'    => '<b>Mankanta bildo</b><br /><i>$1</i>',
+'filemissing'     => 'Mankanta dosiero',
+'thumbnail_error' => 'Okazis eraro kreante antaŭvidan bildeton: $1',
+
+# Special:Import
+'import'                => 'Importitaj paĝoj',
+'importinterwiki'       => 'Transvikia importo',
+'importtext'            => 'Bonvole eksportu la dosieron el la fonta vikio per la ilo Speciala:Export, konservu ĝin sur via disko kaj poste alŝutu ĝin tien ĉi.',
+'importfailed'          => 'Malsukcesis la importo: $1',
+'importnotext'          => 'Malplena aŭ senteksta',
+'importsuccess'         => 'La importo sukcesis!',
+'importhistoryconflict' => 'Malkongrua historia versio ekzistas (eble la paĝo importiĝis antaŭe)',
+'importnosources'       => 'Neniu transvikia importfonto estis difinita kaj rekta historio de alŝutoj estas malaktivigita.',
+
+# Keyboard access keys for power users
+'accesskey-pt-userpage'           => '.',
+'accesskey-pt-anonuserpage'       => '.',
+'accesskey-pt-mytalk'             => 'n',
+'accesskey-pt-anontalk'           => 'n',
+'accesskey-pt-preferences'        => '',
+'accesskey-pt-watchlist'          => 'l',
+'accesskey-pt-mycontris'          => 'y',
+'accesskey-pt-login'              => 'o',
+'accesskey-pt-anonlogin'          => 'o',
+'accesskey-pt-logout'             => '',
+'accesskey-ca-talk'               => 't',
+'accesskey-ca-edit'               => 'e',
+'accesskey-ca-addsection'         => '+',
+'accesskey-ca-viewsource'         => 'e',
+'accesskey-ca-history'            => 'h',
+'accesskey-ca-protect'            => '=',
+'accesskey-ca-delete'             => 'd',
+'accesskey-ca-undelete'           => 'd',
+'accesskey-ca-move'               => 'm',
+'accesskey-ca-watch'              => 'w',
+'accesskey-ca-unwatch'            => 'w',
+'accesskey-search'                => 'f',
+'accesskey-p-logo'                => '',
+'accesskey-n-mainpage'            => 'z',
+'accesskey-n-portal'              => '',
+'accesskey-n-currentevents'       => '',
+'accesskey-n-recentchanges'       => 'r',
+'accesskey-n-randompage'          => 'x',
+'accesskey-n-help'                => '',
+'accesskey-n-sitesupport'         => '',
+'accesskey-t-whatlinkshere'       => 'j',
+'accesskey-t-recentchangeslinked' => 'k',
+'accesskey-feed-rss'              => '',
+'accesskey-feed-atom'             => '',
+'accesskey-t-contributions'       => '',
+'accesskey-t-emailuser'           => '',
+'accesskey-t-upload'              => 'u',
+'accesskey-t-specialpages'        => 'q',
+'accesskey-ca-nstab-main'         => 'c',
+'accesskey-ca-nstab-user'         => 'c',
+'accesskey-ca-nstab-media'        => 'c',
+'accesskey-ca-nstab-special'      => '',
+'accesskey-ca-nstab-project'      => 'a',
+'accesskey-ca-nstab-image'        => 'c',
+'accesskey-ca-nstab-mediawiki'    => 'c',
+'accesskey-ca-nstab-template'     => 'c',
+'accesskey-ca-nstab-help'         => 'c',
+'accesskey-ca-nstab-category'     => 'c',
+
+# Tooltip help for the actions
+'tooltip-pt-userpage'             => 'Mia uzantopaĝo',
+'tooltip-pt-anonuserpage'         => 'La uzantopaĝo por la IP adreso sub kiu vi estas redaktanta',
+'tooltip-pt-mytalk'               => 'Mia diskutpaĝo',
+'tooltip-pt-anontalk'             => 'Diskuto pri redaktoj sub tiu ĉi IP adreso',
+'tooltip-pt-preferences'          => 'Miaj preferoj',
+'tooltip-pt-watchlist'            => 'Listo de paĝoj kies ŝanĝojn vi priatentas.',
+'tooltip-pt-mycontris'            => 'Listo de miaj kontribuoj',
+'tooltip-pt-login'                => 'Vi estas invitita ensaluti, tamen ne estas devige.',
+'tooltip-pt-anonlogin'            => 'Vi estas invitita ensaluti, tamen ne estas devige.',
+'tooltip-pt-logout'               => 'Elsalutu',
+'tooltip-ca-talk'                 => 'Diskuto pri la artikolo',
+'tooltip-ca-edit'                 => 'Vi povas redakti tiun ĉi paĝon. Bv uzi la antaŭvidbutonon antaŭ ol konservi.',
+'tooltip-ca-addsection'           => 'Aldonu komenton al tiu diskuto.',
+'tooltip-ca-viewsource'           => 'Tiu paĝo estas protektita. Vi povas nur rigardi ties fonton.',
+'tooltip-ca-history'              => 'Antaŭaj versioj de tiu ĉi paĝo.',
+'tooltip-ca-protect'              => 'Protektu tiun ĉi paĝon',
+'tooltip-ca-delete'               => 'Forigu tiun ĉi paĝon',
+'tooltip-ca-undelete'             => 'Restarigu la redaktojn faritajn al tiu ĉi paĝo antaŭ ties forigo',
+'tooltip-ca-move'                 => 'Movu tiun ĉi paĝon',
+'tooltip-ca-watch'                => 'Aldonu tiun ĉi paĝon al via atentaro',
+'tooltip-ca-unwatch'              => 'Forigu tiun ĉi paĝon el via atentaro',
+'tooltip-search'                  => 'Traserĉu tiun ĉi vikion',
+'tooltip-p-logo'                  => 'Ĉefpaĝo',
+'tooltip-n-mainpage'              => 'Vizitu la Ĉefpaĝon',
+'tooltip-n-portal'                => 'Pri la projekto, kion vi povas fari, kie vi povas trovi ion',
+'tooltip-n-currentevents'         => 'Trovu fonajn informojn pri nunaj eventoj',
+'tooltip-n-recentchanges'         => 'Listo de la lastaj ŝanĝoj en la vikio.',
+'tooltip-n-randompage'            => 'Vidu hazardan paĝon',
+'tooltip-n-help'                  => 'Serĉopaĝo.',
+'tooltip-n-sitesupport'           => 'Subtenu nin per mono',
+'tooltip-t-whatlinkshere'         => 'Listo de ĉiuj vikiaj paĝoj kij ligas ĉi tien',
+'tooltip-t-recentchangeslinked'   => 'Lastaj ŝanĝoj en paĝoj kiuj ligas al tiu ĉi paĝo',
+'tooltip-feed-rss'                => 'RSS-fonto por tiu ĉi paĝo',
+'tooltip-feed-atom'               => 'Atom-fonto por ĉi paĝo',
+'tooltip-t-contributions'         => 'Vidu la liston de kontribuoj de tiu ĉi uzanto',
+'tooltip-t-emailuser'             => 'Sendu retmesaĝon al tiu ĉi uzanto',
+'tooltip-t-upload'                => 'Alŝutu bildojn aŭ dosierojn',
+'tooltip-t-specialpages'          => 'Listo de ĉiuj specialaj paĝoj',
+'tooltip-ca-nstab-main'           => 'Vidu la artikolon',
+'tooltip-ca-nstab-user'           => 'Vidu la personan paĝon de la uzanto',
+'tooltip-ca-nstab-media'          => 'Vidu la paĝon de la dosiero',
+'tooltip-ca-nstab-special'        => 'Estas speciala paĝo, vi ne rajtas redakti ĝin.',
+'tooltip-ca-nstab-project'        => 'Vidu la paĝon de la projekto',
+'tooltip-ca-nstab-image'          => 'Vidu la paĝon de la bildo',
+'tooltip-ca-nstab-mediawiki'      => 'Vidu la sisteman mesaĝon',
+'tooltip-ca-nstab-template'       => 'Vidu la ŝablonon',
+'tooltip-ca-nstab-help'           => 'Vidu la helppaĝon',
+'tooltip-ca-nstab-category'       => 'Vidu la paĝon de kategorioj',
+'tooltip-minoredit'               => 'Marku tiun ŝanĝon kiel malgrava',
+'tooltip-save'                    => 'Konservu viajn ŝanĝojn',
+'tooltip-preview'                 => 'Antaŭrigardu viajn ŝanĝojn. Bonvolu uzi tion antaŭ ol konservi ilin!',
+'tooltip-diff'                    => 'Show which changes you made to the text.',
+'tooltip-compareselectedversions' => 'Vidu la malsamojn inter ambaŭ selektitaj versioj de ĉi paĝo.',
+'tooltip-watch'                   => 'Aldonu ĉi paĝon al via atentaro',
+
+# Stylesheets
+'monobook.css' => '/* CSS placed here will affect users of the Monobook skin */',
+
+# Scripts
+'monobook.js' => '/* Deprecated; use [[MediaWiki:common.js]] */',
+
+# Attribution
+'anonymous'        => 'Anonima(j) uzanto(j) de {{SITENAME}}',
+'siteuser'         => '{{SITENAME}} uzanto $1',
+'lastmodifiedatby' => 'Ĉi paĝo estis laste ŝanĝita je $2, $1 de $3.', # $1 date, $2 time, $3 user
+'and'              => 'kaj',
+'othercontribs'    => 'Bazita sur la laboro de $1.',
+'others'           => 'aliaj',
+'siteusers'        => '{{SITENAME}} uzanto(j) $1',
+
+# Spam protection
+'spamprotectiontitle'    => 'Filtrilo kontraŭ spamo',
+'spamprotectiontext'     => 'La paĝo kiun vi trovis konservi estis blokita per la spam-filtrilo. Ĉi tia eraro estas kaŭzata pro ekstera ligilo al malpermesata retejo.',
+'spamprotectionmatch'    => 'La jena teksto ekagigis la spam-filtrilon: $1',
+'subcategorycount'       => 'Estas {{PLURAL:$1|unu subkategorio|$1 subkategorioj}} en tiu kategorio.',
+'categoryarticlecount'   => 'Estas {{PLURAL:$1|unu artikolo|$1 artikoloj}} en tiu kategorio.',
+'listingcontinuesabbrev' => ' daŭrigo',
+'spambot_username'       => 'Trudmesaĝa forigo de MediaWiki',
+'spam_reverting'         => 'Restarigo de lasta versio ne entenante ligilojn al $1',
+'spam_blanking'          => 'Forviŝo de ĉiuj versioj entenate ligilojn al $1',
+
+# Info page
+'infosubtitle' => 'Informoj por paĝo',
+
+# Math options
+'mw_math_png'    => 'Ĉiam krei PNG-bildon',
+'mw_math_simple' => 'HTMLigu se simple, aŭ PNG',
+'mw_math_html'   => 'HTMLigu se eble, aŭ PNG',
+'mw_math_source' => 'Lasu TeX-fonton (por tekstfoliumiloj)',
+'mw_math_modern' => 'Rekomendita por modernaj foliumiloj',
+'mw_math_mathml' => 'MathML seeble (provizora)',
+
+# Patrolling
+'markaspatrolleddiff'   => 'Marku kiel patrolita',
+'markaspatrolledtext'   => 'Marku ĉi artikolon patrolita',
+'markedaspatrolled'     => 'Markita kiel patrolita',
+'markedaspatrolledtext' => 'La elektita versio estas markita kiel patrolita.',
+'rcpatroldisabled'      => 'Patrolado de lastaj ŝanĝoj malaktivigita',
+'rcpatroldisabledtext'  => 'La funkcio patrolado de la lastaj ŝanĝoj estas nun malaktivigita.',
+
+# Image deletion
+'deletedrevision' => 'Forigita malnova versio $1.',
+
+# Browsing diffs
+'previousdiff' => '← Iru al antaŭa ŝanĝo',
+'nextdiff'     => 'Iru al sekvanta ŝanĝo →',
+
+'imagemaxsize' => 'Elmontru bildojn en bildpriskribaj paĝoj je maksimume :',
+'thumbsize'    => 'Grandeco de bildetoj :',
+'showbigimage' => 'Elŝutu version altdistingive ($1 X $2, $3 KB)',
+
+'newimages' => 'Aro da novaj bildoj',
+'noimages'  => 'Nenio videbla.',
+
+# Labels for User: and Title: on Special:Log pages
+'specialloguserlabel'  => 'Uzanto:',
+'speciallogtitlelabel' => 'Titolo:',
+
+'passwordtooshort' => 'Via pasvorto estas tro mallonga. Ĝi entenu minimume $1 karaktrojn.',
+
+# Media Warning
+'mediawarning' => "'''Warning''': This file may contain malicious code, by executing it your system may be compromised.
+<hr />",
+
+# Metadata
+'metadata-expand'   => 'Montru etendajn detalojn',
+'metadata-collapse' => 'Kaŝu etendajn detalojn',
+
+# EXIF tags
+'exif-artist'          => 'Kreinto',
+'exif-pixelxdimension' => 'Valind image height',
+'exif-aperturevalue'   => 'Aperturo',
+'exif-brightnessvalue' => 'Heleco',
+'exif-contrast'        => 'Kontrasto',
+
+'exif-componentsconfiguration-0' => 'ne ekzistas',
+
+# External editor support
+'edit-externally'      => 'Ŝanĝu ĉi dosieron per ekstera softvaro',
+'edit-externally-help' => "Vidu la [http://meta.wikimedia.org/wiki/Help:External_editors instalinstrukciojn] por pliaj informoj ''(angle)''.",
+
+# 'all' in various places, this might be different for inflected languages
+'recentchangesall' => 'ĉiuj',
+'imagelistall'     => 'ĉiuj',
+'watchlistall1'    => 'ĉiuj',
+'watchlistall2'    => 'ĉiuj',
+'namespacesall'    => 'ĉiuj',
+
+# E-mail address confirmation
+'confirmemail'            => 'Konfirmu retpoŝtadreson',
+'confirmemail_text'       => 'Ĉi tiu vikio postulas ke vi validigu vian retadreson antaŭ ol uzadi la retmesaĝpreferojn. Bonvolu alklaki la suban butonon por sendi konfirmesaĝon al via adreso. La mesaĝo entenos ligilon kun kodo; bonvolu alŝuti la ligilon en vian foliumilon por konfirmi ke via retadreso validas.',
+'confirmemail_send'       => 'Retmesaĝi konfirmkodon',
+'confirmemail_sent'       => 'Konfirma retmesaĝo estas sendita.',
+'confirmemail_sendfailed' => 'Ne eblis sendi konfirmretmesaĝon. Bonvolu kontroli ĉu en la adreso ne estus nevalidaj karaktroj.',
+'confirmemail_invalid'    => 'Nevalida konfirmkodo. La kodo eble ne plu validas.',
+'confirmemail_needlogin'  => 'Vi devas $1 por konfirmi vian retpoŝtan adreson.',
+'confirmemail_success'    => 'Via retadreso estas konfirmita. Vi povas nun ensaluti kaj ĝui la vikion.',
+'confirmemail_loggedin'   => 'Via retadreso estas nun konfirmita.',
+'confirmemail_error'      => 'Io misokazis dum konservo de via konfirmo.',
+'confirmemail_body'       => 'Iu, verŝajne vi ĉe la IP-adreso $1, enregistrigis per tiu 
+ĉi retpoŝtadreso la konton "$2" ĉe {{SITENAME}}.
+
+Malfermu tiun ĉi ligon en via retumilo, por konfirmi ke la
+konto ja apartenas al vi kaj por malŝlosi retpoŝtajn
+kapablojn ĉe {{SITENAME}}:
+
+$3
+
+Se vi ne mendis ĉi tiun mesaĝon, ne alklaku la ligon. Tiu
+ĉi konfirmokodo eksvalidiĝos je $4.',
+
+# Inputbox extension, may be useful in other contexts as well
+'tryexact'       => 'Provu ekzaktan trafon',
+'searchfulltext' => 'Serĉu plentekste',
+'createarticle'  => 'Kreu artikolon',
+
+# Scary transclusion
+'scarytranscludetoolong' => '[Bedaŭrinde la URL estas tro longa]',
+
+# Trackbacks
+'trackbackbox'      => "<div id='mw_trackbacks'>
+Postspuroj por ĉi artikolo:<br />p
+$1
+</div>",
+'trackbackremove'   => ' ([$1 Forigu])',
+'trackbacklink'     => 'Postspurado',
+'trackbackdeleteok' => 'La postspurado esti sukcese forigita.',
+
+# Delete conflict
+'deletedwhileediting' => 'Averto: Oni forigis ĉi tiun paĝon post tiam, kiam vi ekredaktis ĝin!',
+'recreate'            => 'Rekreu',
+
+# HTML dump
+'redirectingto' => 'Redirektante al [[:$1]]...',
+
+# action=purge
+'confirm_purge'        => 'Ĉu forviŝiĝu la enhavo de tiu ĉi paĝo?
+
+$1',
+'confirm_purge_button' => 'Bone',
+
+'youhavenewmessagesmulti' => 'Vi havas novajn mesaĝojn ĉe $1',
+
+'articletitles' => "Artikoloj komencante de ''$1''",
+'hideresults'   => 'Kaŝu rezultojn',
+
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesEs.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesEs.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesEs.php	(revision 1280)
@@ -0,0 +1,1758 @@
+<?php
+/** Spanish (Español)
+  *
+  * @bug 4401
+  * @bug 4424
+  *
+  * @addtogroup Language
+  */
+
+$skinNames = array(
+	'standard' => 'Estándar',
+);
+$namespaceNames = array(
+	NS_MEDIA          => 'Media',
+	NS_SPECIAL        => 'Especial',
+	NS_MAIN           => '',
+	NS_TALK           => 'Discusión',
+	NS_USER           => 'Usuario',
+	NS_USER_TALK      => 'Usuario_Discusión',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK   => '$1_Discusión',
+	NS_IMAGE          => 'Imagen',
+	NS_IMAGE_TALK     => 'Imagen_Discusión',
+	NS_MEDIAWIKI      => 'MediaWiki',
+	NS_MEDIAWIKI_TALK => 'MediaWiki_Discusión',
+	NS_TEMPLATE       => 'Plantilla',
+	NS_TEMPLATE_TALK  => 'Plantilla_Discusión',
+	NS_HELP           => 'Ayuda',
+	NS_HELP_TALK      => 'Ayuda_Discusión',
+	NS_CATEGORY       => 'Categoría',
+	NS_CATEGORY_TALK  => 'Categoría_Discusión',
+);
+
+$datePreferences = false;
+$defaultDateFormat = 'dmy';
+$dateFormats = array(
+	'dmy time' => 'H:i',
+	'dmy date' => 'j M Y',
+	'dmy both' => 'H:i j M Y',
+);
+
+$separatorTransformTable = array(',' => '.', '.' => ',' );
+$linkTrail = '/^([a-záéíóúñ]+)(.*)$/sDu';
+
+
+
+
+$messages = array(
+'tog-underline'         => 'Subrayar enlaces',
+'tog-highlightbroken'   => 'Destacar enlaces a artículos vacíos <a href="" class="new">como este</a> (alternativa: como éste<a href="" class="internal">?</a>).',
+'tog-justify'           => 'Ajustar párrafos',
+'tog-hideminor'         => 'Esconder ediciones menores en «cambios recientes»',
+'tog-extendwatchlist'   => 'Expandir la lista de seguimiento a todos los cambios aplicables',
+'tog-usenewrc'          => 'Cambios recientes realzados (no para todos los navegadores)',
+'tog-numberheadings'    => 'Auto-numerar encabezados',
+'tog-showtoolbar'       => 'Mostrar barra de edición',
+'tog-editondblclick'    => 'Editar páginas con doble clic (JavaScript)',
+'tog-editsection'       => 'Habilitar la edición de secciones usando el enlace [editar]',
+'tog-editsectiononrightclick'=> 'Habilitar la edición de secciones presionando el botón de la derecha<br /> en los títulos de secciones (JavaScript)',
+'tog-showtoc'           => 'Mostrar la tabla de contenidos (para paginas con más de 3 encabezados)',
+'tog-rememberpassword'  => 'Recordar la contraseña entre sesiones',
+'tog-editwidth'         => 'La caja de edición tiene el ancho máximo',
+'tog-watchcreations'    => 'Vigilar las páginas que yo cree.',
+'tog-watchdefault'      => 'Vigilar las páginas que yo modifique',
+'tog-minordefault'      => 'Marcar todas las ediciones como menores por defecto',
+'tog-previewontop'      => 'Mostrar la previsualización antes de la caja de edición en lugar de después',
+'tog-previewonfirst'    => 'Mostrar previsualización al comenzar a editar',
+'tog-nocache'           => 'Inhabilitar el \'\'cache\'\' de páginas',
+'tog-enotifwatchlistpages'=> 'Enviame un correo cuando haya cambios de página',
+'tog-enotifusertalkpages'=> 'Notifícame cuando cambia mi página de discusión de usuario',
+'tog-enotifminoredits'  => 'Notifícame también los cambios menores de página',
+'tog-enotifrevealaddr'  => 'Revela mi dirección electrónica en los correos de notificación',
+'tog-shownumberswatching'=> 'Mostrar el número de usuarios que la vigilan',
+'tog-fancysig'          => 'Firma sin enlace automático',
+'tog-externaleditor'    => 'Utilizar editor externo por defecto',
+'tog-externaldiff'      => 'Utilizar \'\'diff\'\' externo por defecto',
+'tog-showjumplinks'     => 'Habilitar enlaces de accesibilidad «saltar a»',
+'tog-autopatrol'        => 'Marcar mis ediciones como patrulladas',
+'tog-forceeditsummary'  => 'Alertar al grabar sin resumen de edición.',
+'tog-watchlisthideown'  => 'No mostrar mis ediciones en la lista de seguimiento',
+'tog-watchlisthidebots' => 'No mostrar ediciones de bots en la lista de seguimiento',
+'underline-always'      => 'Siempre',
+'underline-never'       => 'Nunca',
+'underline-default'     => 'Valor por defecto del navegador',
+'skinpreview'           => '(Ver cómo queda)',
+'sunday'                => 'Domingo',
+'monday'                => 'Lunes',
+'tuesday'               => 'Martes',
+'wednesday'             => 'Miércoles',
+'thursday'              => 'Jueves',
+'friday'                => 'Viernes',
+'saturday'              => 'Sábado',
+'january'               => 'enero',
+'february'              => 'febrero',
+'march'                 => 'marzo',
+'april'                 => 'abril',
+'may_long'              => 'mayo',
+'june'                  => 'junio',
+'july'                  => 'julio',
+'august'                => 'agosto',
+'september'             => 'septiembre',
+'october'               => 'octubre',
+'november'              => 'noviembre',
+'december'              => 'diciembre',
+'jan'                   => 'ene',
+'feb'                   => 'feb',
+'mar'                   => 'mar',
+'apr'                   => 'abr',
+'may'                   => 'may',
+'jun'                   => 'jun',
+'jul'                   => 'jul',
+'aug'                   => 'ago',
+'sep'                   => 'sep',
+'oct'                   => 'oct',
+'nov'                   => 'nov',
+'dec'                   => 'dic',
+'categories'            => 'Categorías',
+'pagecategories'        => '{{PLURAL:$1|Categoría|Categorías}}',
+'category_header'       => 'Artículos en la categoría "$1"',
+'subcategories'         => 'Subcategorías',
+'mainpage'              => 'Portada',
+'mainpagetext'          => 'Software wiki instalado con éxito.',
+'mainpagedocfooter'     => 'Por favor, lee [http://meta.wikimedia.org/wiki/MediaWiki_i18n documentation on customizing the interface] y [http://meta.wikimedia.org/wiki/MediaWiki_User%27s_Guide User\'s Guide] para conocer su configuración y uso.',
+'portal'                => 'Portal de la comunidad',
+'portal-url'            => 'Project:Portal de la comunidad',
+'about'                 => 'Acerca de',
+'aboutsite'             => 'Acerca de {{SITENAME}}',
+'aboutpage'             => 'Project:Acerca de',
+'article'               => 'Artículo',
+'help'                  => 'Ayuda',
+'helppage'              => 'Project:Ayuda',
+'bugreports'            => 'Informes de error de software',
+'bugreportspage'        => 'Project:Informes de error',
+'sitesupport'           => 'Donaciones',
+'sitesupport-url'       => 'Project:Apoyo al proyecto',
+'faqpage'               => 'Project:FAQ',
+'edithelp'              => 'Ayuda de edición',
+'newwindow'             => '(Se abre en una ventana nueva)',
+'edithelppage'          => 'Help:Cómo se edita una página',
+'cancel'                => 'Cancelar',
+'qbfind'                => 'Encontrar',
+'qbbrowse'              => 'Hojear',
+'qbedit'                => 'Editar',
+'qbpageoptions'         => 'Opciones de página',
+'qbpageinfo'            => 'Información de página',
+'qbmyoptions'           => 'Mis opciones',
+'qbspecialpages'        => 'Páginas especiales',
+'moredotdotdot'         => 'Más...',
+'mypage'                => 'Mi página',
+'mytalk'                => 'Mi discusión',
+'anontalk'              => 'Discusión para esta IP',
+'navigation'            => 'Navegación',
+'currentevents'         => 'Actualidad',
+'currentevents-url'     => 'Actualidad',
+'disclaimers'           => 'Aviso legal',
+'disclaimerpage'        => 'Project:Limitación general de responsabilidad',
+'privacy'               => 'Política de protección de datos',
+'privacypage'           => 'Project:Política de protección de datos',
+'returnto'              => 'Regresa a $1.',
+'tagline'               => 'De {{SITENAME}}',
+'search'                => 'Buscar',
+'searchbutton'          => 'Buscar',
+'go'                    => 'Ir',
+'searcharticle'                    => 'Ir',
+'history'               => 'Historial',
+'history_short'         => 'Historial',
+'updatedmarker'         => 'actualizado desde mi última visita',
+'info_short'            => 'Información',
+'printableversion'      => 'Versión para imprimir',
+'permalink'             => 'Enlace permanente',
+'print'                 => 'Imprimir',
+'edit'                  => 'Editar',
+'editthispage'          => 'Editar esta página',
+'delete'                => 'Borrar',
+'deletethispage'        => 'Borrar esta página',
+'undelete_short'        => 'Restaurar {{PLURAL:$1|una edición|$1 ediciones}}',
+'protect'               => 'Proteger',
+'protectthispage'       => 'Proteger esta página',
+'unprotect'             => 'Desproteger',
+'unprotectthispage'     => 'Desproteger esta página',
+'newpage'               => 'Página nueva',
+'talkpage'              => 'Discutir esta página',
+'specialpage'           => 'Página Especial',
+'personaltools'         => 'Herramientas personales',
+'postcomment'           => 'Poner un comentario',
+'articlepage'           => 'Ver artículo',
+'talk'                  => 'Discusión',
+'views'                 => 'Vistas',
+'toolbox'               => 'Herramientas',
+'userpage'              => 'Ver página de usuario',
+'projectpage'           => 'Ver página meta',
+'imagepage'             => 'Ver página de imagen',
+'viewtalkpage'          => 'Ver discusión',
+'otherlanguages'        => 'Otros idiomas',
+'redirectedfrom'        => '(Redirigido desde $1)',
+'redirectpagesub'       => 'Página redirigida',
+'lastmodifiedat'          => 'Esta página fue modificada por última vez el $2, $1.',
+'viewcount'             => 'Esta página ha sido visitada {{PLURAL:$1|una vez|$1 veces}}.',
+'copyright'             => 'El contenido está disponible bajo los términos de la <i>$1</i>',
+'protectedpage'         => 'Página protegida',
+'jumpto'                => 'Saltar a',
+'jumptonavigation'      => 'navegación',
+'jumptosearch'          => 'búsqueda',
+'badaccess'             => 'Error de permisos',
+'versionrequired'       => 'La versión $1 de MediaWiki es necesaria para emplear esta página',
+'versionrequiredtext'   => 'Se necesita utilizar la versión $1 de MediaWiki para utilizar esta página. Para más información, consulta [[Special:Version]]',
+'retrievedfrom'         => 'Obtenido de "$1"',
+'youhavenewmessages'    => 'Tienes $1 ($2).',
+'newmessageslink'       => 'mensajes nuevos',
+'newmessagesdifflink'   => 'dif. entre las dos últimas versiones',
+'editsection'           => 'editar',
+'editold'               => 'editar',
+'editsectionhint'       => 'Editar sección: $1',
+'toc'                   => 'Tabla de contenidos',
+'showtoc'               => 'mostrar',
+'hidetoc'               => 'esconder',
+'thisisdeleted'         => '¿Ver o restaurar $1?',
+'viewdeleted'           => '¿Deseas ver $1?',
+'restorelink'           => '{{PLURAL:$1|una edición borrada|$1 ediciones borradas}}',
+'feedlinks'             => 'Sindicación:',
+'nstab-main'            => 'Artículo',
+'nstab-user'            => 'Usuario',
+'nstab-media'           => 'Media',
+'nstab-special'         => 'Especial',
+'nstab-project'         => 'Página del proyecto',
+'nstab-image'           => 'Imagen',
+'nstab-mediawiki'       => 'Mensaje',
+'nstab-template'        => 'Plantilla',
+'nstab-help'            => 'Ayuda',
+'nstab-category'        => 'Categoría',
+'nosuchaction'          => 'No existe tal acción',
+'nosuchactiontext'      => 'La acción especificada por el URL no es
+reconocida por el software de {{SITENAME}}',
+'nosuchspecialpage'     => 'No existe esa página especial',
+'nospecialpagetext'     => 'Has requerido una página especial que no es
+reconocida por el software de {{SITENAME}}.',
+'databaseerror'         => 'Error de la base de datos',
+'dberrortext'           => 'Ha ocurrido un error de sintaxis en una consulta
+a la base de datos.
+Esto puede indicar un error en el software.
+La última consulta que se intentó fue:
+<blockquote><tt>$1</tt></blockquote> dentro de la función "<tt>$2</tt>". El error de retorno de
+MySQL fue"<tt>$3: $4</tt>".',
+'dberrortextcl'         => 'Ha ocurrido un error de sintaxis en una consulta
+a la base de datos.
+La última consulta que se intentó fue:
+"$1"
+desde la función "$2".
+MySQL retornó el error "$3: $4".',
+'noconnect'             => 'No se pudo conectar a la base de datos en $1',
+'nodb'                  => 'No se pudo seleccionar la base de datos $1',
+'cachederror'           => 'Esta es una copia guardada en el cache de la página requerida, y puede no estar actualizada.',
+'laggedslavemode'       => 'Aviso: a la página le pueden faltar las actualizaciones recientes.',
+'readonly'              => 'Base de datos bloqueada',
+'enterlockreason'       => 'Explica el motivo del bloqueo, incluyendo una estimación de cuándo se producirá el desbloqueo',
+'readonlytext'          => 'La base de datos de {{SITENAME}} está temporalmente
+bloqueada para nuevas entradas u otras modificaciones, probablemente
+para mantenimiento de rutina, después de lo cual volverá a la normalidad.
+El administrador que la bloqueó ofreció esta explicación:
+<p>$1',
+'missingarticle'        => 'La base de datos no encontró el texto de una
+página que debería haber encontrado, llamada "$1".
+
+Esto es causado usualmente por seguir un enlace a una diferencia de páginas o historial obsoleto a una página que ha sido borrada.
+
+Si esta no es la causa, puedes haber encontrado un error en el software. Por favor, informa de esto a un administrador,
+incluyendo el URL.',
+'readonly_lag'          => 'La base de datos ha sido bloqueada automáticamente mientras los servidores esclavos de la base de datos alcanzan al amo',
+'internalerror'         => 'Error interno',
+'filecopyerror'         => 'No se pudo copiar el archivo "$1" a "$2".',
+'filerenameerror'       => 'No se pudo renombrar el archivo "$1" a "$2".',
+'filedeleteerror'       => 'No se pudo borrar el archivo "$1".',
+'filenotfound'          => 'No se pudo encontrar el archivo "$1".',
+'unexpected'            => 'Valor no esperado: "$1"="$2".',
+'formerror'             => 'Error: no se pudo enviar el formulario',
+'badarticleerror'       => 'Esta acción no se puede llevar a cabo en esta página.',
+'cannotdelete'          => 'No se pudo borrar la página o imagen especificada. (Puede haber sido borrada por alguien antes)',
+'badtitle'              => 'Título incorrecto',
+'badtitletext'          => 'El título de la página solicitada esta vacío, es inválido, o es un enlace interlenguaje o interwiki incorrecto.',
+'perfdisabled'          => 'Lo siento, esta función está temporalmente desactivada porque enlentece la base de datos a tal punto que nadie puede usar el wiki.',
+'perfdisabledsub'       => 'Aquí hay una copia grabada de $1:',
+'perfcached'            => 'Los siguientes datos están en cache y por tanto pueden estar desactualizados:',
+'perfcachedts'          => 'Estos datos están almacenados. Su última actualización fue el $1.',
+'wrong_wfQuery_params'  => 'Parámetros incorrectos para wfQuery()<br />
+Funcción: $1<br />
+Consulta: $2',
+'viewsource'            => 'Ver código fuente',
+# problem with link: [[Project:Esta página está protegida]]
+'protectedtext'         => 'Esta página ha sido protegida para impedir su modificación; hay varias razones para que esto sea así, por favor vea
+[[Project:Esta página está protegida]].
+
+Puedes ver y copiar el texto fuente de esta página:',
+'sqlhidden'             => '(Consulta SQL oculta)',
+'logouttitle'           => 'Fin de sesión',
+'logouttext'            => 'Has terminado tu sesión.
+Puedes continuar usando {{SITENAME}} en forma anónima, o puedes
+iniciar sesión otra vez como el mismo u otro usuario.',
+'welcomecreation'       => '== ¡Bienvenido(a), $1! ==
+
+Tu cuenta ha sido creada. No olvides personalizar [[Special:Preferences|tus preferencias]] de {{SITENAME}}.',
+'loginpagetitle'        => 'Registrarse/Entrar',
+'yourname'              => 'Tu nombre de usuario',
+'yourpassword'          => 'Tu contraseña',
+'yourpasswordagain'     => 'Repite tu contraseña',
+'remembermypassword'    => 'Quiero que me recuerden entre sesiones.',
+'yourdomainname'        => 'Tu dominio',
+'externaldberror'       => 'Hubo un error de autenticación externa de la base de datos o bien tú no está autorizado a actualizar tu cuenta externa.',
+'loginproblem'          => '<b>Hubo un problema con tu entrada.</b><br />¡Inténtalo otra vez!',
+'alreadyloggedin'       => '<strong>Usuario $1, ¡ya entraste!</strong><br />',
+'login'                 => 'Registrarse/Entrar',
+'loginprompt'           => 'Necesitas tener cookies permitidos para registrarte en {{SITENAME}}.',
+'userlogin'             => 'Registrarse/Entrar',
+'logout'                => 'Salir',
+'userlogout'            => 'Salir',
+'notloggedin'           => 'No has entrado',
+'nologin'               => '¿No tienes una cuenta? $1.',
+'nologinlink'           => 'Créala',
+'createaccount'         => 'Crea una nueva cuenta',
+'gotaccount'            => '¿Ya tienes una cuenta? $1.',
+'gotaccountlink'        => 'Ingresar',
+'createaccountmail'     => 'por correo',
+'badretype'             => 'Las contraseñas que ingresaste no concuerdan.',
+'userexists'            => 'El nombre que entraste ya está en uso. Por favor, elige un nombre diferente.',
+'youremail'             => 'Tu dirección de correo electrónico',
+'username'              => 'Nombre de usuario:',
+'uid'                   => 'ID de usuario:',
+'yourrealname'          => 'Tu nombre real *',
+'yourlanguage'          => 'Idioma:',
+'yourvariant'           => 'Variante lingüística',
+'yournick'              => 'Tu apodo (para firmas)',
+'badsig'                => 'Firma en crudo inválida; comprueba las etiquetas HTML.',
+'email'                 => 'Correo electrónico',
+'prefs-help-email-enotif'=> 'Esta dirección también se usa para mandarte notificaciones por correo si tienes habilitadas las opciones correspondientes.',
+'prefs-help-realname'   => '* Nombre real (opcional): si optas por proporcionarlo, se usará para dar atribución a tu trabajo.',
+'loginerror'            => 'Error de inicio de sesión',
+'prefs-help-email'      => '* Correo (opcional): Permite a otros usuarios escribirte por correo desde tu página de usuario o tu página de discusión sin la necesidad de revelar tu identidad.',
+'nocookiesnew'          => 'La cuenta de usuario ha sido creada, pero ahora mismo no estás identificado. {{SITENAME}} usa <em>cookies</em> para identificar a los usuarios registrados, pero tú las tienes deshabilitadas. Por favor, habilítalas, e ingresa con tu nuevo nombre y contraseña.',
+'nocookieslogin'        => '{{SITENAME}} utiliza <em>cookies</em> para el ingreso de los usuarios. Tienes las <em>cookies</em> deshabilitadas en el navegador. Por favor, actívalas e inténtalo de nuevo.',
+'noname'                => 'No has especificado un nombre de usuario válido.',
+'loginsuccesstitle'     => 'Inicio de sesión exitoso',
+'loginsuccess'          => 'Has iniciado tu sesión en {{SITENAME}} como "$1".',
+'nosuchuser'            => 'No existe usuario alguno llamado "$1".
+Revisa tu escritura, o usa el formulario de abajo para crear una nueva cuenta de usuario.',
+'nosuchusershort'       => 'No hay un usuario con el nombre "$1". Revisa cómo lo has escrito.',
+'wrongpassword'         => 'La contraseña que ingresaste es incorrecta. Por favor inténtalo de nuevo.',
+'wrongpasswordempty'    => 'No has escrito una contraseña, inténtalo de nuevo.',
+'mailmypassword'        => 'Envíame una nueva contraseña por correo electrónico',
+'passwordremindertitle' => 'Recordatorio de contraseña de {{SITENAME}}',
+'passwordremindertext'  => 'Alguien (probablemente tú, desde la dirección IP $1)
+solicitó que te enviáramos una nueva contraseña para iniciar sesión en {{SITENAME}} ($4).
+La contraseña para el usuario "$2" es ahora "$3".
+Ahora deberías iniciar sesión y cambiar tu contraseña.
+
+Si fue alguien más quien solicitó este mensaje o has recordado tu contraseña y ya no deseas cambiarla, puedes ignorar este mensaje y seguir usando tu contraseña original.',
+'noemail'               => 'No hay dirección electrónica (e-mail) registrada para "$1".',
+'passwordsent'          => 'Una nueva contraseña ha sido enviada a la dirección electrónica registrada para "$1".
+Por favor entra otra vez después de que la recibas.',
+'eauthentsent'          => 'Un correo electrónico de confirmación ha sido enviado a la
+dirección especificada. Antes de que se envíe algún otro correo,
+sigue por favor las instrucciones enviadas en el mensaje, para confirmar que la dirección te pertenece.',
+'mailerror'             => 'Error al enviar correo: $1',
+'acct_creation_throttle_hit'=> 'Lo sentimos, ya has creado $1 cuentas. No puedes crear otra.',
+'emailauthenticated'    => 'Tu dirección electrónica fue autentificada en $1.',
+'emailnotauthenticated' => 'Aún no has confirmado tu durección de correo.
+Hasta que lo hagas, las siguientes funciones no estarán disponibles.',
+'noemailprefs'          => '<strong>Especifica una dirección electrónica para que funcionen estas características.</strong>',
+'emailconfirmlink'      => 'Confirma tu dirección de correo electrónico',
+'invalidemailaddress'   => 'La dirección electrónica no puede ser aceptada pues parece que tiene un formato no válido. Por favor, escribe una dirección bien formada o vacía el campo.',
+'accountcreated'        => 'Cuenta creada',
+'accountcreatedtext'    => 'La cuenta de usuario para $1 ha sido creada.',
+'bold_sample'           => 'Texto en negrita',
+'bold_tip'              => 'Texto en negrita',
+'italic_sample'         => 'Texto en cursiva',
+'italic_tip'            => 'Texto en cursiva',
+'link_sample'           => 'Título del enlace',
+'link_tip'              => 'Enlace interno',
+'extlink_sample'        => 'http://www.ejemplo.com Título del enlace',
+'extlink_tip'           => 'Enlace externo (recuerda añadir el prefijo http://)',
+'headline_sample'       => 'Texto de titular',
+'headline_tip'          => 'Titular de nivel 2',
+'math_sample'           => 'Escribe aquí una fórmula',
+'math_tip'              => 'Fórmula matemática (LaTeX)',
+'nowiki_sample'         => 'Aquí inserta texto sin formato',
+'nowiki_tip'            => 'Pasar por alto el formato wiki',
+'image_sample'          => 'Ejemplo.jpg',
+'image_tip'             => 'Imagen incorporada',
+'media_sample'          => 'Ejemplo.ogg',
+'media_tip'             => 'Enlace a archivo multimedia',
+'sig_tip'               => 'Firma, fecha y hora',
+'hr_tip'                => 'Línea horizontal (utilízala con moderación)',
+'summary'               => 'Resumen',
+'subject'               => 'Tema/título',
+'minoredit'             => 'Esta es una edición menor',
+'watchthis'             => 'Vigilar este artículo',
+'savearticle'           => 'Grabar la página',
+'preview'               => 'Previsualizar',
+'showpreview'           => 'Mostrar previsualización',
+'showdiff'              => 'Mostrar cambios',
+'blockedtitle'          => 'El usuario está bloqueado',
+'blockedtext'           => 'Tu nombre de usuario o dirección IP ha sido bloqueada por $1.
+La razón dada es la que sigue:<br />$2<br /> Puedes contactar a $1 o a otro de los [[{{MediaWiki:grouppage-sysop}}|administradores]] para
+discutir el bloqueo.
+
+Nota que no podrás usar el enlace "enviar correo electrónico a este usuario" si no has registrado una dirección válida de correo electrónico en tus [[Special:Preferences|preferencias]]. 
+
+Tu dirección IP es $3. Por favor, menciona esta dirección en cualquier consulta que hagas.',
+'whitelistedittitle'    => 'Se requiere ingresar para editar.',
+'whitelistedittext'     => 'Tienes que $1 para editar artículos.',
+'whitelistreadtitle'    => 'Se requiere ingresar para leer',
+'whitelistreadtext'     => 'Tienes que [[Special:Userlogin|registrarte]] para leer artículos.',
+'whitelistacctitle'     => 'No se te permite crear una cuenta',
+'whitelistacctext'      => 'Para que se te permita crear cuentas en este wiki tienes que [[Special:Userlogin|iniciar sesión]] y tener los permisos apropiados.',
+'loginreqtitle'         => 'Se requiere ingresar',
+'loginreqlink'          => 'ingresar',
+'loginreqpagetext'      => 'Debes $1 para ver otras páginas.',
+'accmailtitle'          => 'La contraseña ha sido enviada.',
+'accmailtext'           => 'La contraseña para «$1» se ha enviado a $2.',
+'newarticle'            => '(Nuevo)',
+'newarticletext'        => 'Has seguido un enlace a una página que aún no existe. Si lo que quieres es crear esta página, empieza a escribir en la caja que sigue. Para más información consulta la [[{{MediaWiki:helppage}}|página de ayuda]]. Si llegaste aquí por error, presiona la tecla para volver a la página anterior de tu navegador.',
+'anontalkpagetext'      => '---- \'\'Esta es la página de discusión para un usuario anónimo que aún no ha creado una cuenta (o no la usa). Por lo tanto, tenemos que usar su dirección IP para identificarlo. Una dirección IP puede ser compartida por varios usuarios. Si eres un usuario anónimo y sientes que te han dirigido comentarios irrelevantes, por favor [[Special:Userlogin|crea una cuenta o entra]] para evitar confusiones futuras con otros usuarios anónimos.\'\'',
+'noarticletext'         => '(En este momento no hay texto en esta página)',
+'clearyourcache'        => '\'\'\'Nota:\'\'\' Tras salvar el archivo, debes refrescar la caché de tu navegador para ver los cambios:
+*\'\'\'Mozilla:\'\'\'  \'\'ctrl-shift-r\'\',
+*\'\'\'Internet Explorer:\'\'\' \'\'ctrl-f5\'\',
+*\'\'\'Safari:\'\'\' \'\'cmd-shift-r\'\',
+*\'\'\'Konqueror\'\'\' \'\'f5\'\'.',
+'usercssjsyoucanpreview'=> '<strong>Consejo:</strong> Usa el botón «Mostrar previsualización» para probar tu nuevo css/js antes de grabarlo.',
+'usercsspreview'        => '\'\'\'¡Recuerda que sólo estás previsualizando tu css de usuario, aún no se ha grabado!\'\'\'',
+'userjspreview'         => '\'\'\'¡Recuerda que sólo estás previsualizando tu javascript de usuario, y que todavía no se ha grabado!\'\'\'',
+'updated'               => '(Actualizado)',
+'note'                  => '<strong>Nota:</strong>',
+'previewnote'           => '¡Recuerda que esto es sólo una previsualización, y no ha sido grabada todavía!',
+'session_fail_preview'  => '<strong>Lo sentimos, no pudimos procesar tu edición debido a una pérdida de los datos de sesión. Por favor, prueba de nuevo, y si no funciona, prueba a salir y volver a ingresar.</strong>',
+'previewconflict'       => 'Esta previsualización refleja el texto en el área
+de edición superior como aparecerá si eliges grabar.',
+'importing'             => 'Importando $1',
+'editing'               => 'Editando $1',
+'editinguser'               => 'Editando $1',
+'editingsection'        => 'Editando $1 (sección)',
+'editingcomment'        => 'Editando $1 (comentario)',
+'editconflict'          => 'Conflicto de edición: $1',
+'explainconflict'       => 'Alguien más ha cambiado esta página desde que empezaste
+a editarla.
+El área de texto superior contiene el texto de la página como existe
+actualmente. Tus cambios se muestran en el área de texto inferior.
+Vas a tener que incorporar tus cambios en el texto existente.
+<b>Sólo</b> el texto en el área de texto superior será grabado cuando presiones
+ "Grabar página".<br />',
+'yourtext'              => 'Tu texto',
+'storedversion'         => 'Versión almacenada',
+'nonunicodebrowser'     => '<strong>AVISO: Tu navegador no cumple la norma Unicode. Se ha activado un sistema de edición alternativo que te permitirá editar artículos con seguridad: los caracteres no ASCII aparecerán en la caja de edición como códigos hexadecimales.</strong>',
+'editingold'            => '<strong>ADVERTENCIA: Estás editando una versión antigua
+ de esta página.
+Si la grabas, los cambios hechos desde esa revisión se perderán.</strong>',
+'yourdiff'              => 'Diferencias',
+'copyrightwarning'      => 'Por favor observa que todas las contribuciones a {{SITENAME}} se consideran hechas públicas bajo la $2 (ver detalles en $1). Si no deseas que la gente corrija tus escritos sin piedad y los distribuya libremente, entonces no los pongas aquí. También tú nos aseguras que escribiste este texto tú mismo y eres dueño de los derechos de autor, o lo copiaste desde el dominio público u otra fuente libre.<strong>¡NO USES ESCRITOS CON COPYRIGHT SIN PERMISO!</strong>',
+'copyrightwarning2'     => 'Por favor, ten en cuenta que todas las contribuciones a {{SITENAME}} pueden ser editadas, modificadas o eliminadas por otros colaboradores. Si no deseas que la gente corrija tus escritos sin piedad y los distribuya libremente, entonces no los pongas aquí. <br />También tú nos aseguras que escribiste esto tú mismo y eres dueño de los derechos de autor, o lo copiaste desde el dominio público u otra fuente libre. (véase $1 para detalles). <br /><strong>¡NO USES ESCRITOS CON COPYRIGHT SIN PERMISO!</strong>',
+'longpagewarning'       => '<strong>ADVERTENCIA: Esta página tiene un tamaño de $1 kilobytes; algunos navegadores pueden tener problemas editando páginas de 32kb o más.
+Por favor considera la posibilidad de descomponer esta página en secciones más pequeñas.</strong>',
+'readonlywarning'       => '<strong>ADVERTENCIA: La base de datos ha sido bloqueada para mantenimiento, así que no podrás grabar tus modificaciones en este momento.
+Puedes "cortar y pegar" a un archivo de texto en tu computador, y grabarlo para
+intentarlo después.</strong>',
+# problem with link: [[Project:Políticas de bloqueo de páginas|gPolíticas de bloqueo de páginas]]
+# problem with link: [[Project:Esta página está protegida|protegida]]
+'protectedpagewarning'  => '<strong>ADVERTENCIA: Esta página ha sido protegida de manera que sólo usuarios con permisos de administrador pueden editarla. Asegúrate de que estás siguiendo las [[Project:Políticas de bloqueo de páginas|gPolíticas de bloqueo de páginas]].</strong>
+__NOEDITSECTION__<h3>La edición de esta página está [[Project:Esta página está protegida|protegida]].</h3>
+* Puedes opinar sobre este bloqueo en la [[{{TALKPAGENAME}}|página de discusión]] del artículo.<br />',
+'templatesused'         => 'Plantillas usadas en esta página:',
+'edittools'             => '<!-- Este texto aparecerá bajo los formularios de edición y subida. -->',
+'nocreatetitle'         => 'Creación de páginas limitada',
+'nocreatetext'          => 'Este wiki ha restringido la posibilidad de crear nuevas páginas. Puedes volver atrás y editar una página existente, o [[Special:Userlogin|ingresar o crear una cuenta]].',
+'revhistory'            => 'Historial de revisiones',
+'nohistory'             => 'No hay un historial de ediciones para esta página.',
+'revnotfound'           => 'Revisión no encontrada',
+'revnotfoundtext'       => 'La revisión antigua de la página por la que preguntaste no se pudo encontrar.
+Por favor revisa el URL que usaste para acceder a esta página.',
+'loadhist'              => 'Recuperando el historial de la página',
+'currentrev'            => 'Revisión actual',
+'revisionasof'          => 'Revisión de $1',
+'previousrevision'      => '← Revisión anterior',
+'nextrevision'          => 'Revisión siguiente →',
+'currentrevisionlink'   => 'Ver revisión actual',
+'cur'                   => 'act',
+'next'                  => 'sig',
+'last'                  => 'prev',
+'histlegend'            => 'Leyenda: (act) = diferencia con la versión actual,
+(prev) = diferencia con la versión previa, M = edición menor',
+'deletedrev'            => '[borrado]',
+'histfirst'             => 'Primeras',
+'histlast'              => 'Últimas',
+'difference'            => '(Diferencia entre revisiones)',
+'loadingrev'            => 'recuperando revisión para diff',
+'lineno'                => 'Línea $1:',
+'editcurrent'           => 'Edita la versión actual de esta página',
+'selectnewerversionfordiff'=> 'Selecciona una versión más reciente para comparar',
+'selectolderversionfordiff'=> 'Selecciona una versión más antigua para comparar',
+'compareselectedversions'=> 'Comparar versiones seleccionadas',
+'searchresults'         => 'Resultados de búsqueda',
+'searchresulttext'      => 'Para más información acerca de búsquedas en {{SITENAME}}, ve a [[{{MediaWiki:helppage}}|{{int:help}}]].',
+'searchsubtitle'        => 'Has consultado por \'\'\'[[:$1]]\'\'\'',
+'searchsubtitleinvalid' => 'Para consulta "$1"',
+'badquery'              => 'Consulta de búsqueda formateada en forma incorrecta',
+'badquerytext'          => 'No pudimos procesar tu búsqueda.
+Esto es probablemente porque intentaste buscar una palabra de menos de tres letras, lo que todavía no es posible.
+También puede ser que hayas cometido un error de escritura en la expresión.
+Por favor, intenta una búsqueda diferente.',
+'matchtotals'           => 'La consulta "$1" coincidió con $2 títulos de artículos
+y el texto de $3 artículos.',
+'titlematches'          => 'Coincidencias de título de artículo',
+'notitlematches'        => 'No hay coincidencias de título de artículo',
+'textmatches'           => 'Coincidencias de texto de artículo',
+'notextmatches'         => 'No hay coincidencias de texto de artículo',
+'prevn'                 => '$1 previos',
+'nextn'                 => '$1 siguientes',
+'viewprevnext'          => 'Ver ($1) ($2) ($3).',
+'showingresults'        => 'Abajo se muestran hasta <b>$1</b> resultados empezando por el nº<b>$2</b>.',
+'showingresultsnum'     => 'Abajo se muestran los <b>$3</b> resultados empezando por el nº<b>$2</b>.',
+'nonefound'             => '<strong>Nota</strong>: a menudo el fracaso en una búsqueda se debe a  intentar buscar palabras comunes como "la" o "de",
+que no están en el índice, o por especificar más de una palabra a buscar (sólo las páginas
+que contengan todos los términos de una búsqueda aparecerán en el resultado).',
+'powersearch'           => 'Búsqueda',
+'powersearchtext'       => '
+Buscar en espacios de nombre:<br />
+$1<br />
+$2 Listar redirecciones   Buscar $3 $9',
+'searchdisabled'        => 'La búsqueda en {{SITENAME}} está temporalmente deshabilitada. Mientras tanto puedes buscar mediante estos buscadores externos, pero ten en cuenta que sus índices del contenido de {{SITENAME}} pueden estar desactualizados.',
+'blanknamespace'        => '(Principal)',
+'preferences'           => 'Preferencias',
+'mypreferences'	=> 'Mis preferencias',
+'prefsnologin'          => 'No has entrado',
+'prefsnologintext'      => 'Debes [[Special:Userlogin|entrar]] para cambiar las preferencias de usuario.',
+'prefsreset'            => 'Las preferencias han sido repuestas a sus valores almacenados.',
+'qbsettings'            => 'Preferencias de "Quickbar"',
+'qbsettings-none'	=> 'Ninguna',
+'qbsettings-fixedleft'	=> 'Fija a la izquierda',
+'qbsettings-fixedright'	=> 'Fija a la derecha',
+'qbsettings-floatingleft'	=> 'Flotante a la izquierda',
+'qbsettings-floatingright'	=> 'Flotante a la derecha',
+'changepassword'        => 'Cambiar contraseña',
+'skin'                  => 'Piel',
+'math'                  => 'Fórmulas',
+'dateformat'            => 'Formato de fecha',
+'datedefault'           => 'Sin preferencia',
+'datetime'              => 'Fecha y hora',
+'math_failure'          => 'No se pudo entender',
+'math_unknown_error'    => 'error desconocido',
+'math_unknown_function' => 'función desconocida',
+'math_lexing_error'     => 'error de léxico',
+'math_syntax_error'     => 'error de sintaxis',
+'math_image_error'      => 'La conversión a PNG ha sido errónea',
+'math_bad_tmpdir'       => 'No se puede escribir o crear el directorio temporal de math',
+'math_bad_output'       => 'No se puede escribir o crear el directorio de salida de math',
+'math_notexvc'          => 'Falta el ejecutalbe de texvc; por favor, lee math/README para configurarlo.',
+'prefs-personal'        => 'Datos personales',
+'prefs-rc'              => 'Cambios recientes',
+'prefs-misc'            => 'Miscelánea',
+'saveprefs'             => 'Grabar preferencias',
+'resetprefs'            => 'Volver a preferencias por defecto',
+'oldpassword'           => 'Contraseña antigua:',
+'newpassword'           => 'Contraseña nueva:',
+'retypenew'             => 'Reescribe la nueva contraseña:',
+'textboxsize'           => 'Edición',
+'rows'                  => 'Filas:',
+'columns'               => 'Columnas:',
+'searchresultshead'     => 'Búsquedas',
+'resultsperpage'        => 'Resultados para mostrar por página',
+'contextlines'          => 'Líneas para mostrar por resultado',
+'contextchars'          => 'Caracteres de contexto por línea',
+'stubthreshold'         => 'Umbral para mostrar esbozos:',
+'recentchangescount'    => 'Número de títulos en cambios recientes',
+'savedprefs'            => 'Tus preferencias han sido grabadas.',
+'timezonelegend'        => 'Huso horario',
+'timezonetext'          => 'Entra el número de horas de diferencia entre tu hora local
+y la hora del servidor (UTC).',
+'localtime'             => 'Hora local',
+'timezoneoffset'        => 'Diferencia',
+'servertime'            => 'La hora en el servidor es',
+'guesstimezone'         => 'Obtener la hora del navegador',
+'allowemail'            => 'Habilitar la recepción de correo de otros usuarios',
+'defaultns'             => 'Buscar en estos espacios de nombres por defecto:',
+'default'               => 'por defecto',
+'files'                 => 'Archivos',
+'userrights-lookup-user'=> 'Configurar grupos de usuarios',
+'userrights-user-editname'=> 'Escribe un nombre de usuario:',
+'editusergroup'         => 'Modificar grupos de usuarios',
+'userrights-editusergroup'=> 'Modificar grupos de usuarios',
+'saveusergroups'        => 'Guardar grupos de usurarios',
+'userrights-groupsmember'=> 'Miembro de:',
+'userrights-groupsavailable'=> 'Grupos disponibles:',
+'userrights-groupshelp' => 'Selecciona los grupos a los que quieres unir al usuario (o de los que le quieres dar de baja).
+Los grupos no seleccionados no cambiarán. Puedes deseleccionar con CTRL + clic izquierdo',
+'changes'               => 'cambios',
+'recentchanges'         => 'Cambios recientes',
+'recentchangestext'     => 'Sigue los cambios más recientes al wiki en esta página.',
+'rcnote'                => 'Abajo están los últimos <b>$1</b> cambios en los últimos <b>$2</b> días, actualizados $3',
+'rcnotefrom'            => 'Abajo están los cambios desde <b>$2</b> (se muestran hasta <b>$1</b>).',
+'rclistfrom'            => 'Mostrar cambios nuevos desde $1',
+'rclinks'               => 'Ver los últimos $1 cambios en los últimos $2 días.<br />$3',
+'diff'                  => 'dif',
+'hide'                  => 'esconder',
+'show'                  => 'mostrar',
+'number_of_watching_users_pageview'=> '[$1 usuarios vigilando]',
+'upload'                => 'Subir archivo',
+'uploadbtn'             => 'Subir un archivo',
+'reupload'              => 'Subir otra vez',
+'reuploaddesc'          => 'Regresar al formulario para subir.',
+'uploadnologin'         => 'No has iniciado sesión',
+'uploadnologintext'     => 'Tienes que [[Special:Userlogin|iniciar sesión]] para poder subir archivos.',
+'upload_directory_read_only'=> 'El directorio para subida de archivos ($1) no puede ser escrito por el servidor web.',
+'uploaderror'           => 'Error al intentar subir archivo',
+# problem with link: [[Project:Política de uso de imágenes|política de uso de imágenes]]
+'uploadtext'            => 'Para ver o buscar imágenes que se hayan subido previamente, ve a la [[Special:Imagelist|lista de imágenes subidas]]. Los archivos subidos y borrados son registrados en el [[Special:Log/upload|registro de subidas]]. Consulta también la [[Project:Política de uso de imágenes|política de uso de imágenes]]. Usa el formulario siguiente para subir nuevos archivos de imágenes que vas a usar para ilustrar tus artículos. En la mayoría de los navegadores, verás un botón "Browse...", que abrirá el diálogo de selección de archivos estándar de tu sistema operativo. Cuando hayas elegido un archivo, su nombre aparecerá en el campo de texto al lado del botón "Examinar...". También debes marcar la caja afirmando que no estás violando ningún copyright al subir el archivo. Presiona el botón "Subir" para completar la subida. Esto puede tomar algún tiempo si tienes una conexión a Internet lenta. Los formatos preferidos son JPEG para imágenes fotográficas, PNG para dibujos y diagramas, y OGG para sonidos. Por favor, dale a tus archivos nombres descriptivos para evitar confusiones. Para incluir la imagen en un artículo, usa un enlace de la forma
+* \'\'\'<nowiki>[[</nowiki>{{ns:Image}}<nowiki>:Archivo.jpg]]</nowiki>\'\'\'
+* \'\'\'<nowiki>[[</nowiki>{{ns:Image}}<nowiki>:Archivo.png|alt text]]</nowiki>\'\'\'
+o para sonidos
+* \'\'\'<nowiki>[[</nowiki>{{ns:Media}}<nowiki>:Archivo.ogg]]</nowiki>\'\'\'
+Por favor recuerda que, al igual que con las páginas {{SITENAME}}, otros pueden editar o borrar los archivos que has subido si piensan que es bueno para el proyecto, y se te puede bloquear, impidiéndote subir más archivos si abusas del sistema.',
+'uploadlog'             => 'registro de subidas',
+'uploadlogpage'         => 'Registro de subidas',
+'uploadlogpagetext'     => 'Abajo hay una lista de los archivos que se han
+subido recientemente. Todas las horas son del servidor (UTC).
+<ul>
+</ul>',
+'filename'              => 'Nombre del archivo',
+'filedesc'              => 'Sumario',
+'fileuploadsummary'     => 'Descripción:',
+'filestatus'            => 'Estado de copyright',
+'filesource'            => 'Fuente',
+'copyrightpage'         => 'Project:Copyrights',
+'copyrightpagename'     => 'Copyright de {{SITENAME}}',
+'uploadedfiles'         => 'Archivos subidos',
+'ignorewarning'         => 'Ignorar aviso y guardar de todos modos',
+'ignorewarnings'        => 'Ignorar cualquier aviso',
+'minlength'             => 'Los nombres de imágenes deben ser al menos de tres letras.',
+'illegalfilename'       => 'El nombre de archivo «$1» contiene caracteres que no están permitidos en títulos de páginas. Por favor, renombra el archivo e intenta volver a subirlo.',
+'badfilename'           => 'El nombre de la imagen se ha cambiado a "$1".',
+'badfiletype'           => '".$1" no es un formato de imagen recomendado.',
+'largefile'             => 'Se recomienda que las imágenes no excedan los $1 bytes de tamaño. Esta imágen tiene $2',
+'largefileserver'       => 'El tamaño de este archivo es mayor del que este servidor admite por configuración.',
+'emptyfile'             => 'El archivo que has intentado subir parece estar vacío; por favor, verifica que realmente se trate del archivo que intentabas subir.',
+'fileexists'            => 'Ya existe un archivo con este nombre, por favor comprueba el existente $1 si no estás seguro de querer reemplazarlo.
+
+
+\'\'\'Nota:\'\'\' Si finalmente sustituyes el archivo, debes refrescar la caché de tu navegador para ver los cambios:
+*\'\'\'Mozilla\'\'\' / \'\'\'Firefox\'\'\': Pulsa el botón \'\'\'Recargar\'\'\' (o \'\'\'ctrl-r\'\'\')
+*\'\'\'Internet Explorer\'\'\' / \'\'\'Opera\'\'\': \'\'\'ctrl-f5\'\'\'
+*\'\'\'Safari\'\'\': \'\'\'cmd-r\'\'\'
+*\'\'\'Konqueror\'\'\': \'\'\'ctrl-r\'\'',
+'fileexists-forbidden'  => 'Ya existe un archivo con este nombre. Por favor, vuelve atrás y sube este archivo con un nuevo nombre. [[Image:$1|thumb|center|$1]]',
+# problem with link: [[Commons:Portada|Commons]]
+'fileexists-shared-forbidden'=> 'Ya existe en \'\'[[Commons:Portada|Commons]]\'\' un archivo con el mismo nombre. Por favor regresa a la página anterior y sube tu archivo con otro nombre. [[Image:$1|thumb|center|$1]]',
+'successfulupload'      => 'Subida con éxito',
+'fileuploaded'          => 'El archivo "$1" se subió con éxito.
+Por favor sigue este enlace: ($2) a la página de descripción y escribe
+la información acerca del archivo, tal como de dónde viene, cuándo fue
+creado y por quién, y cualquier otra cosa que puedas saber al respecto.',
+'uploadwarning'         => 'Advertencia de subida de archivo',
+'savefile'              => 'Grabar archivo',
+'uploadedimage'         => 'subió "[[$1]]".',
+'uploaddisabled'        => 'Lo sentimos, la capacidad de subir archivos está desactivada.',
+'uploadscripted'        => 'Este archivo contiene HTML o código de script que puede ser interpretado erroneamente por un navegador web.',
+'uploadcorrupt'         => 'Este archivo está corrupto o tiene una extensión incorrecta. Por favor, comprueba el archivo y súbleo de nuevo.',
+'uploadvirus'           => '¡El archivo contiene un virus! Detalles: $1',
+'sourcefilename'        => 'Nombre de origen',
+'destfilename'          => 'Nombre de destino',
+'license'               => 'Licencia',
+'nolicense'             => 'Ninguna seleccionada',
+'imagelist'             => 'Lista de imágenes',
+'imagelisttext'         => 'Abajo hay una lista de $1 imágenes ordenadas $2.',
+'getimagelist'          => ' obteniendo la lista de imágenes',
+'ilsubmit'              => 'Búsqueda',
+'showlast'              => 'Mostrar las últimas $1 imágenes ordenadas  $2.',
+'byname'                => 'por nombre',
+'bydate'                => 'por fecha',
+'bysize'                => 'por tamaño',
+'imgdelete'             => 'borr',
+'imglegend'             => 'Leyenda: (desc) = mostrar/editar la descripción de la imagen.',
+'imghistory'            => 'Historial de la imagen',
+'deleteimg'             => 'borr',
+'deleteimgcompletely'   => 'Borrar todas las revisiones',
+'imghistlegend'         => 'Leyenda: (act) = esta es la imagen actual, (borr) = borrar
+esta versión antigua, (rev) = revertir a esta versión antigua.
+<br /><i>Clic en la fecha para ver imagen subida en esa fecha</i>.',
+'imagelinks'            => 'Enlaces a la imagen',
+'linkstoimage'          => 'Las siguientes páginas enlazan a esta imagen:',
+'nolinkstoimage'        => 'No hay páginas que enlacen a esta imagen.',
+'sharedupload'          => 'Este archivo está compartido y puede usarse desde otros proyectos.',
+'shareduploadwiki'      => 'Puedes consultar $1 para más información.',
+'shareduploadwiki-linktext'=> 'página de descripción del archivo',
+'noimage'               => 'No existe un archivo con este nombre, puedes $1.',
+'noimage-linktext'      => 'subirlo',
+'uploadnewversion-linktext'=> 'Subir una nueva versión de este archivo',
+'mimesearch'            => 'Búsqueda MIME',
+'mimetype'              => 'Tipo MIME:',
+'download'              => 'descargar',
+'unwatchedpages'        => 'Páginas no vigiladas',
+'statistics'            => 'Estadísticas',
+'sitestats'             => 'Estadísticas del sitio',
+'userstats'             => 'Estadísticas de usuario',
+'sitestatstext'         => 'Hay un total de \'\'\'$1\'\'\' páginas en la base de datos
+Esto incluye páginas de discusión, páginas sobre {{SITENAME}}, esbozos, redirecciones y otras que probablmente no califican como artículos.
+Excluyéndolas, hay \'\'\'$2\'\'\' páginas que, probablmente, son artículos legítimos.
+
+\'\'\'$8\'\'\' archivos fueron almacenados en el servidor.
+
+Han habido un total de \'\'\'$3\'\'\' visitas y \'\'\'$4\'\'\' ediciones de página desde que el wiki fue instalado.
+Esto resulta en un promedio de \'\'\'$5\'\'\' ediciones por página y \'\'\'$6\'\'\' visitas por edición.
+
+La longitud de [http://meta.wikimedia.org/wiki/Help:Job_queue job queue] es de \'\'\'$7\'\'\'',
+'userstatstext'         => 'Hay \'\'\'$1\'\'\' usuarios registrados.
+de los cuales \'\'\'$2\'\'\' (o \'\'\'$4%\'\'\') son administradores (ver $3).',
+'disambiguations'       => 'Páginas de desambiguación',
+'disambiguationspage'   => 'Template:Desambiguación',
+'disambiguationstext'   => 'Los siguientes artículos enlazan a una <i>página de desambiguación</i>. Deberían enlazar al artículo apropiado.<br />Una página es considerada de desambiguación si está enlazada desde $1.<br />Enlaces desde otros espacios de nombre <b>no</b> son listados aquí.',
+'doubleredirects'       => 'Redirecciones dobles',
+'doubleredirectstext'   => '<b>Atención:</b> Esta lista puede contener falsos positivos. Eso significa usualmente que hay texto adicional con enlaces bajo el primer #REDIRECT.<br />
+Cada fila contiene enlaces al segundo y tercer redirect, así como la primera línea del segundo redirect, en la que usualmente se encontrará el artículo "real" al que el primer redirect debería apuntar.',
+'brokenredirects'       => 'Redirecciones incorrectas',
+'brokenredirectstext'   => 'Las redirecciones siguientes enlazan a un artículo que no existe.',
+'nbytes'                => '$1 {{PLURAL:$1|byte|bytes}}',
+'ncategories'           => '$1 {{PLURAL:$1|categoría|categorías}}',
+'nlinks'                => '$1 {{PLURAL:$1|enlace|enlaces}}',
+'nmembers'              => '$1 {{PLURAL:$1|artículo|artículos}}',
+'nrevisions'            => '$1 {{PLURAL:$1|revisión|revisiones}}',
+'nviews'                => '$1 {{PLURAL:$1|vista|vistas}}',
+'lonelypages'           => 'Páginas huérfanas',
+'uncategorizedpages'    => 'Páginas sin categorizar',
+'uncategorizedcategories'=> 'Categorías sin categorizar',
+'unusedcategories'      => 'Categorías sin uso',
+'unusedimages'          => 'Imágenes sin uso',
+'popularpages'          => 'Páginas populares',
+'wantedcategories'      => 'Categorías requeridas',
+'wantedpages'           => 'Páginas requeridas',
+'mostlinked'            => 'Artículos más enlazados',
+'mostlinkedcategories'  => 'Categorías más enlazadas',
+'mostcategories'        => 'Páginas con más categorías',
+'mostimages'            => 'Imágenes más usadas',
+'mostrevisions'         => 'Artículos con más ediciones',
+'allpages'              => 'Todas las páginas',
+'prefixindex'           => 'Páginas por prefijo',
+'randompage'            => 'Página aleatoria',
+'shortpages'            => 'Páginas cortas',
+'longpages'             => 'Páginas largas',
+'deadendpages'          => 'Páginas sin salida',
+'listusers'             => 'Lista de usuarios',
+'specialpages'          => 'Páginas especiales',
+'spheading'             => 'Páginas especiales',
+'restrictedpheading'    => 'Páginas especiales restringidas',
+'recentchangeslinked'   => 'Seguimiento de enlaces',
+'rclsub'                => '(a páginas enlazadas desde "$1")',
+'newpages'              => 'Páginas nuevas',
+'ancientpages'          => 'Artículos más antiguos',
+'intl'                  => 'Enlaces interlenguaje',
+'move'                  => 'Trasladar',
+'movethispage'          => 'Trasladar esta página',
+'unusedimagestext'      => '<p>Por favor note que otros sitios web
+tales como otras {{SITENAME}}s pueden enlazar a una imagen
+con un URL directo, y de esa manera todavía estar listada aquí
+a pesar de estar en uso activo.',
+'unusedcategoriestext'  => 'Las siguientes categorías han sido creadas, pero ningún artículo o categoría las emplea.',
+'booksources'           => 'Fuentes de libros',
+'categoriespagetext'    => 'Existen las siguientes categorías en este wiki.',
+'data'                  => 'Datos',
+'userrights'            => 'Configuración de permisos de usuarios',
+'groups'                => 'Grupos de usuarios',
+'booksourcetext'        => 'A continuación hay una lista de enlaces a otros sitios que venden libros nuevos y usados, y también pueden contener información adicional acerca de los libros que estás buscando.
+{{SITENAME}} no está relacionada con ninguno de estos negocios, y esta lista no debe ser considerada un patrocinio de los mismos.',
+'alphaindexline'        => '$1 a $2',
+'version'               => 'Versión',
+'log'                   => 'Registros',
+'alllogstext'           => 'Presentación combinada de los registros de subidas, borrados, protecciones, bloqueos y administradores.
+Puedes filtrar esta vista seleccionando el tipo de registro, el nombre de usuario, o la página afectada.',
+'logempty'              => 'No hay elementos en el registro con esas condiciones.',
+'nextpage'              => 'Siguiente página ($1)',
+'allpagesfrom'          => 'Mostrar páginas comenzando en:',
+'allarticles'           => 'Todos los artículos',
+'allinnamespace'        => 'Todas las páginas (espacio $1)',
+'allnotinnamespace'     => 'Todas las páginas (fuera del espacio $1)',
+'allpagesprev'          => 'Anterior',
+'allpagesnext'          => 'Siguiente',
+'allpagessubmit'        => 'Mostrar',
+'allpagesprefix'        => 'Mostrar páginas con el prefijo:',
+'mailnologin'           => 'No enviar dirección',
+'mailnologintext'       => 'Debes [[Special:Userlogin|iniciar sesión]] y tener una dirección electrónica válida en tus [[Special:Preferences|preferencias]] para enviar un correo electrónico a otros usuarios.',
+'emailuser'             => 'Enviar correo electrónico a este usuario',
+'emailpage'             => 'Correo electrónico a usuario',
+'emailpagetext'         => 'Si este usuario ha registrado una dirección electrónica válida en sus preferencias de usuario, el siguiente formulario sirve para enviarle un mensaje.
+La dirección electrónica que indicaste en tus preferencias de usuario aparecerá en el remitente para que el destinatario te pueda responder.',
+'usermailererror'       => 'El objeto de correo devolvió un error:',
+'defemailsubject'       => 'Correo de {{SITENAME}}',
+'noemailtitle'          => 'No hay dirección electrónica',
+'noemailtext'           => 'Este usuario no ha especificado una dirección electrónica válida, o ha elegido no recibir correo electrónico de otros usuarios.',
+'emailfrom'             => 'De',
+'emailto'               => 'Para',
+'emailsubject'          => 'Asunto',
+'emailmessage'          => 'Mensaje',
+'emailsend'             => 'Enviar',
+'emailsent'             => 'Correo electrónico enviado',
+'emailsenttext'         => 'Tu correo electrónico ha sido enviado.',
+'watchlist'             => 'Lista de seguimiento',
+'mywatchlist'             => 'Lista de seguimiento',
+'nowatchlist'           => 'No tienes ninguna página en tu lista de seguimiento.',
+'watchnologin'          => 'No has iniciado sesión',
+'watchnologintext'      => 'Debes [[Special:Userlogin|iniciar sesión]] para modificar tu lista de seguimiento.',
+'addedwatch'            => 'Añadido a la lista de seguimiento',
+'addedwatchtext'        => 'La página «[[:$1]]» ha sido añadida a tu [[Special:Watchlist|lista se seguimiento]]. Cambios futuros en esta página y su página de discusión asociada se indicarán ahí, y la página aparecerá \'\'\'en negritas\'\'\' en la [[Special:Recentchanges|lista de cambios recientes]] para hacerla más fácil de detectar. <p>Cuando quieras eliminar la página de tu lista de seguimiento, presiona "Dejar de vigilar" en el menú.',
+'removedwatch'          => 'Eliminada de la lista de seguimiento',
+'removedwatchtext'      => 'La página "[[:$1]]" ha sido eliminada de tu lista de seguimiento.',
+'watch'                 => 'Vigilar',
+'watchthispage'         => 'Vigilar esta página',
+'unwatch'               => 'Dejar de vigilar',
+'unwatchthispage'       => 'Dejar de vigilar',
+'notanarticle'          => 'No es un artículo',
+'watchnochange'         => 'Ninguno de los artículos en tu lista de seguimiento fue editado en el periodo de tiempo mostrado.',
+'watchdetails'          => '* $1 páginas vigiladas, sin contar las de discusión
+* [[Special:Watchlist/edit|Mostrar y editar la lista de seguimiento]]',
+'wlheader-enotif'       => '* La notificación por correo electrónico está habilitada',
+'wlheader-showupdated'  => '* Las páginas modificadas desde tu última visita aparecen en \'\'\'negrita\'\'\'',
+'watchmethod-recent'    => 'chequeando ediciones recientes en la lista de seguimiento',
+'watchmethod-list'      => 'buscando ediciones recientes en la lista de seguimiento',
+'removechecked'         => 'Borrar artículos seleccionados de la lista de seguimiento',
+'watchlistcontains'     => 'Tu lista de seguimiento posee $1 páginas.',
+'watcheditlist'         => 'Aquí está un listado alfabético de tu lista de seguimiento.
+Selecciona los artículos que deseas eliminar de tu lista de seguimiento y
+pulsa el botón \'Eliminar artículos seleccionados\' al final de la página.',
+'removingchecked'       => 'Eliminando los artículos solicitados de la lista de seguimiento...',
+'couldntremove'         => 'No se pudo borrar el artículo \'$1\'...',
+'iteminvalidname'       => 'Problema con el artículo \'$1\', nombre inválido...',
+'wlnote'                => 'Abajo están los últimos $1 cambios en las últimas <b>$2</b> horas.',
+'wlshowlast'            => 'Mostrar las últimas $1 horas $2 días $3',
+'wlsaved'               => 'Esta es una versión guardada de tu lista de seguimiento.',
+'watchlist-show-bots' => 'Mostrar ediciones de bots',
+'watchlist-hide-bots' => 'Esconder ediciones de bots',
+'watchlist-show-own' => 'Mostrar mis ediciones',
+'watchlist-hide-own' => 'Esconder mis ediciones',
+
+'enotif_mailer'         => 'Notificación por correo de {{SITENAME}}',
+'enotif_reset'          => 'Marcar todas las páginas visitadas',
+'enotif_newpagetext'    => 'Se trata de una nueva página.',
+'changed'               => 'modificada',
+'created'               => 'creada',
+'enotif_subject'        => 'La página $PAGETITLE de {{SITENAME}} ha sido $CHANGEDORCREATED por $PAGEEDITOR',
+'enotif_lastvisited'    => 'Vaya a $1 para ver todos los cambios desde su última visita.',
+'enotif_body'           => 'Estimado/a $WATCHINGUSERNAME,
+
+La página de {{SITENAME}} «$PAGETITLE»
+ha sido $CHANGEDORCREATED por el usuario $PAGEEDITOR el $PAGEEDITDATE.
+La versión actual se encuentra en {{fullurl:$PAGETITLE_RAWURL}}
+
+$NEWPAGE
+
+El resumen de edición es: $PAGESUMMARY $PAGEMINOREDIT
+
+Para comunicarse con el usuario:
+por correo: {{fullurl:Special:Emailuser|target=$PAGEEDITOR_RAWURL}}
+en el wiki: {{fullurl:User:$PAGEEDITOR_RAWURL}}
+
+Para recibir nuevas notificaciones de cambios de esta página, deberá vistarla nuevamente.
+También puede, en su lista de seguimiento, modificar las opciones de notificación de sus
+páginas vigiladas.
+
+             El sistema de notificación de {{SITENAME}}.
+
+--
+Cambie las opciones de su lista de seguimiento en:
+{{fullurl:Special:Watchlist|edit=yes}}',
+'deletepage'            => 'Borrar esta página',
+'confirm'               => 'Confirmar',
+'excontent'             => 'El contenido era: \'$1\'',
+'excontentauthor'       => 'El contenido era: \'$1\' (y el único autor fue \'$2\')',
+'exbeforeblank'         => 'contenido antes de borrar era: \'$1\'',
+'exblank'               => 'página estaba vacía',
+'confirmdelete'         => 'Confirma el borrado',
+'deletesub'             => '(Borrando "$1")',
+'historywarning'        => 'Atención: La página que estás por borrar tiene un historial:',
+'confirmdeletetext'     => 'Estás a punto de borrar una página o imagen
+en forma permanente,
+así como todo su historial, de la base de datos.
+Por favor, confirma que realmente quieres hacer eso, que entiendes las
+consecuencias, y que lo estás haciendo de acuerdo con [[{{MediaWiki:policy-url}}]].',
+'policy-url'            => 'Project:Políticas',
+'actioncomplete'        => 'Acción completa',
+'deletedtext'           => '"$1" ha sido borrado.
+Véase $2 para un registro de los borrados recientes.',
+'deletedarticle'        => 'borrado "$1"',
+'dellogpage'            => 'Registro de borrados',
+'dellogpagetext'        => 'Abajo hay una lista de los borrados más recientes.
+Todos los tiempos se muestran en hora del servidor (UTC).
+<ul>
+</ul>',
+'deletionlog'           => 'registro de borrados',
+'reverted'              => 'Recuperar una revisión anterior',
+'deletecomment'         => 'Razón para el borrado',
+'imagereverted'         => 'Revertido a una versión anterior tuvo éxito.',
+'rollback'              => 'Revertir ediciones',
+'rollback_short'        => 'Revertir',
+'rollbacklink'          => 'Revertir',
+'rollbackfailed'        => 'Reversión fallida',
+'cantrollback'          => 'No se pueden revertir las ediciones; el último colaborador es el único autor de este artículo.',
+'alreadyrolled'         => 'No se puede revertir la última edición de [[:$1]] por [[User:$2|$2]] ([[User talk:$2|discusión]]); alguien más ya ha editado o revertido esa página. La última edición fue hecha por [[User:$3|$3]] ([[User talk:$3|discusión]]).',
+'editcomment'           => 'El resumen de la edición fue: "<i>$1</i>".',
+'revertpage'            => 'Revertidas las ediciones realizadas por [[Special:Contributions/$2|$2]] ([[User talk:$2|Talk]]); hacia la última versión por [[User:$1|$1]]',
+'sessionfailure'        => 'Parece que hay un problema con tu sesión;
+esta acción ha sido cancelada como medida de precaución contra secuestros de sesión.
+Por favor, pulsa "Retroceder", recarga la página de la que viniste e inténtalo de nuevo.',
+'protectlogpage'        => 'Protecciones de páginas',
+# problem with link: [[Project:Esta página está protegida]]
+'protectlogtext'        => 'Abajo se presenta una lista de protección y desprotección de página.
+Véase [[Project:Esta página está protegida]] para más información.',
+'protectedarticle'      => 'protegió [[$1]]',
+'unprotectedarticle'    => 'desprotegió [[$1]]',
+'protectsub'            => '(Protegiendo "$1")',
+'confirmprotecttext'    => '¿Realmente deseas proteger esta página?',
+'confirmprotect'        => 'Confirmar protección',
+'protectmoveonly'       => 'Proteger sólo contra traslados',
+'protectcomment'        => 'Razón para proteger',
+'unprotectsub'          => '(Desprotegiendo "$1")',
+'confirmunprotecttext'  => '¿Realmente deseas desproteger esta página?',
+'confirmunprotect'      => 'Confirmar la desprotección.',
+'unprotectcomment'      => 'Razón para desproteger',
+'protect-unchain'       => 'Configurar permisos para traslados',
+# problem with link: [[Project:Políticas de protección de páginas|políticas de protección de páginas]]
+'protect-text'          => 'Puedes visualizar y modificar el nivel de protección de [[$1]].
+Por favor, asegúrate de que sigues las [[Project:Políticas de protección de páginas|políticas de protección de páginas]].',
+'protect-viewtext'      => 'No tienes permiso para modificar los niveles de protección de esta página. Los niveles de protección actuales para [[$1]] son:',
+'protect-default'       => '(por defecto)',
+'protect-level-autoconfirmed'=> 'Bloquear usuarios no registrados',
+'protect-level-sysop'   => 'Sólo administradores',
+'protect-summary-cascade' => 'en cascada',
+'protect-cascade' => 'Protección en cascada - proteger todas las páginas transcluidas en ésta.',
+'undelete'              => 'Restaurar una página borrada',
+'undeletepage'          => 'Ver y restaurar páginas borradas',
+'viewdeletedpage'       => 'Ver páginas borradas',
+'undeletepagetext'      => 'Las siguientes páginas han sido borradas pero aún están en el archivo y pueden ser restauradas. El archivo puede ser limpiado periódicamente.',
+'undeletearticle'       => 'Restaurar página borrada',
+'undeleterevisions'     => '$1 revisiones archivadas',
+'undeletehistory'       => 'Si restauras una página, todas las revisiones serán restauradas al historial.
+Si una nueva página con el mismo nombre ha sido creada desde el borrado, las versiones restauradas aparecerán como historial anterior, y la revisión actual de la página "viva" no será automáticamente reemplazada.',
+'undeletehistorynoadmin'=> 'El artículo ha sido borrado. La razón de su eliminación se indica abajo en el sumario, así como el detalle de las ediciones realizadas antes del borrado. El texto completo del artículo está disponible sólo para usuarios con permisos de [[{{MediaWiki:grouppage-sysop}}|administrador]].',
+'undeleterevision'      => 'Revisión borrada al $1',
+'undeletebtn'           => '¡Restaurar!',
+'undeletedarticle'      => 'restaurado "$1"',
+'undeletedrevisions'    => '{{PLURAL:$1|Una edición restaurada|$1 ediciones restauradas}}',
+'namespace'             => 'Espacio de nombres:',
+'invert'                => 'Invertir selección',
+'contributions'         => 'Contribuciones del usuario',
+'mycontris'             => 'Mis contribuciones',
+'contribsub2'            => '$1 ($2)',
+'nocontribs'            => 'No se encontraron cambios que cumplieran estos criterios.',
+'ucnote'                => 'Abajo están los últimos <b>$1</b> cambios de este usuario en los últimos <b>$2</b> días.',
+'uclinks'               => 'Ver los últimos $1 cambios; ver los últimos $2 días.',
+'uctop'                 => ' (última modificación)',
+'newbies'               => 'noveles',
+'whatlinkshere'         => 'Lo que enlaza aquí',
+'notargettitle'         => 'No hay página objetivo',
+'notargettext'          => 'No has especificado en qué página
+llevar a cabo esta función.',
+'linklistsub'           => '(Lista de enlaces)',
+'linkshere'             => 'Las siguientes páginas enlazan aquí:',
+'nolinkshere'           => 'Ninguna página enlaza aquí.',
+'isredirect'            => 'página redirigida',
+'blockip'               => 'Bloquear usuario',
+'blockiptext'           => 'Usa el formulario siguiente para bloquear el
+acceso de escritura desde una dirección IP específica o un nombre de usuario.
+Esto debería hacerse sólo para prevenir vandalismos, y de
+acuerdo a las [[{{MediaWiki:policy-url}}|políticas de {{SITENAME}}]].
+Explica la razón específica del bloqueo (por ejemplo, citando
+las páginas en particular que han sido objeto de vandalismo).',
+'ipaddress'             => 'Dirección IP',
+'ipadressorusername'    => 'Dirección IP o nombre de usuario',
+'ipbexpiry'             => 'Caduca dentro de',
+'ipbreason'             => 'Razón',
+'ipbsubmit'             => 'Bloquear esta dirección',
+'ipbother'              => 'Especificar caducidad',
+'ipboptions'            => '15 minutos:15 minutes,media hora:30 minutes,una hora:1 hour,2 horas:2 hours,un día:1 day,3 días:3 days,una semana:1 week,2 semanas:2 weeks,un mes:1 month,para siempre:infinite',
+'ipbotheroption'        => 'Otro tiempo',
+'badipaddress'          => 'La dirección IP no tiene el formato correcto.',
+'blockipsuccesssub'     => 'Bloqueo exitoso',
+'blockipsuccesstext'    => 'La dirección IP "$1" ha sido bloqueada. <br />Ver [[Special:Ipblocklist|lista de IP bloqueadas]] para revisar bloqueos.',
+'unblockip'             => 'Desbloquear usuario',
+'unblockiptext'         => 'Usa el formulario que sigue para restaurar el
+acceso de escritura a una dirección IP previamente bloqueada.',
+'ipusubmit'             => 'Desbloquear esta dirección',
+'ipblocklist'           => 'Lista de direcciones IP bloqueadas',
+'blocklistline'         => '$1, $2 bloquea $3 ($4)',
+'infiniteblock'         => 'infinito',
+'expiringblock'         => 'expira $1',
+'ipblocklistempty'      => 'La lista de bloqueo está vacía.',
+'blocklink'             => 'bloquear',
+'unblocklink'           => 'desbloquear',
+'contribslink'          => 'contribuciones',
+'autoblocker'           => 'Has sido bloqueado automáticamente porque tu dirección IP ha sido usada recientemente por "[[User:$1|$1]]". La razón esgrimida para bloquear a "[[User:$1|$1]]" fue "$2".',
+'blocklogpage'          => 'Bloqueos de usuarios',
+'blocklogentry'         => 'bloqueó a "$1" durante un plazo de "$2".',
+'blocklogtext'          => 'Esto es un registro de bloqueos y desbloqueos de usuarios. Las direcciones bloqueadas automáticamente no están listadas. Vea el [[Special:Ipblocklist|listado de bloqueos de IP]] para la lista de prohibiciones y bloqueos actualmente vigente.',
+'unblocklogentry'       => 'desbloqueó a "$1"',
+'range_block_disabled'  => 'La facultad de administrador de crear bloqueos de rango está deshabilitada.',
+'ipb_expiry_invalid'    => 'Tiempo de caducidad no válido.',
+'ip_range_invalid'      => 'Rango de IP no es válido.',
+'proxyblocker'          => 'Bloqueador de proxies',
+'proxyblockreason'      => 'Tu dirección IP ha sido bloqueada porque es un proxy abierto. Por favor, contacta con tu proveedor de servicios de Internet o con tu servicio de asistencia técnica e infórmales de este grave problema de seguridad.',
+'proxyblocksuccess'     => 'Hecho.',
+'sorbsreason'           => 'Tu dirección IP está listada como proxy abierto en [http://www.sorbs.net SORBS] DNSBL.',
+'sorbs_create_account_reason'=> 'Tu dirección IP está listada como proxy abierto en [http://www.sorbs.net SORBS] DNSBL. No puedes crear una cuenta',
+'lockdb'                => 'Bloquear la base de datos',
+'unlockdb'              => 'Desbloquear la base de datos',
+'lockdbtext'            => 'El bloqueo de la base de datos impedirá a todos los usuarios editar páginas, cambiar sus preferencias, modificar sus listas de seguimiento y cualquier otra función que requiera realizar cambios en la base de datos. Por favor, confirma que ésto es precisamente lo que quieres hacer y que desbloquearás la base de datos tan pronto hayas finalizado las operaciones de mantenimiento.',
+'unlockdbtext'          => 'El desbloqueo de la base de datos permitirá a todos los usuarios editar páginas, cambiar sus preferencias, modificar sus listas de seguimiento y cualesquiera otras funciones que impliquen modificar la base de datos. Por favor, confirma que esto es precisamente lo que quieres hacer.',
+'lockconfirm'           => 'Sí, realmente quiero bloquear la base de datos.',
+'unlockconfirm'         => 'Sí, realmente quiero desbloquear la base de datos.',
+'lockbtn'               => 'Bloquear la base de datos',
+'unlockbtn'             => 'Desbloquear la base de datos',
+'locknoconfirm'         => 'No has confirmado lo que deseas hacer.',
+'lockdbsuccesssub'      => 'El bloqueo se ha realizado con éxito',
+'unlockdbsuccesssub'    => 'El desbloqueo se ha realizado con éxito',
+'lockdbsuccesstext'     => 'La base de datos de {{SITENAME}} ha sido bloqueada.
+<br />Recuerda retirar el bloqueo después de completar las tareas de mantenimiento.',
+'unlockdbsuccesstext'   => 'La base de datos de {{SITENAME}} ha sido desbloqueada.',
+'rightslogtext'         => 'Este es un registro de cambios a los permisos de usuarios.',
+'movepage'              => 'Renombrar página',
+'movepagetext'          => 'Usando el formulario que sigue renombrará una página,
+moviendo todo su historial al nombre nuevo.
+El título anterior se convertirá en un redireccionamiento al nuevo título.
+Los enlaces al antiguo título de la página no se cambiarán. Asegúrate de no dejar redirecciones dobles o rotas.
+Tú eres responsable de hacer que los enlaces sigan apuntando adonde se supone que lo deberían hacer.
+
+Recuerda que la página \'\'\'no\'\'\' será renombrada si ya existe una página con el nuevo título, a no ser que sea una página vacía o un \'\'redirect\'\' sin historial.
+Esto significa que podrás renombrar una página a su título original si has cometido un error, pero que no podrás sobreescribir una página existente.
+
+<b>¡ADVERTENCIA!</b>
+Este puede ser un cambio drástico e inesperado para una página popular;
+por favor, asegúrate de entender las consecuencias que acarreará
+antes de seguir adelante.',
+'movepagetalktext'      => 'La página de discusión asociada, si existe, será renombrada automáticamente \'\'\'a menos que:\'\'\'
+*Estés moviendo la página entre espacios de nombre diferentes,
+*Una página de discusión no vacía ya existe con el nombre nuevo, o
+*Desactivaste la opción "Renombrar la página de discusión también".
+
+En estos casos, deberás trasladar manualmente el contenido de la página de discusión.',
+'movearticle'           => 'Renombrar página',
+'movenologin'           => 'No has iniciado sesión',
+'movenologintext'       => 'Es necesario ser usuario registrado y [[Special:Userlogin|haber iniciado sesión]] para renombrar una página.',
+'newtitle'              => 'A título nuevo',
+'movepagebtn'           => 'Renombrar página',
+'pagemovedsub'          => 'Renombrado realizado',
+'pagemovedtext'         => 'Página "[[$1]]" renombrada a "[[$2]]".',
+'articleexists'         => 'Ya existe una página con ese nombre, o el nombre que has
+escogido no es válido.
+Por favor, elige otro nombre.',
+'talkexists'            => 'La página fue renombrada con éxito, pero la página de discusión no se pudo mover porque ya existe una en el título nuevo. Por favor incorpora su contenido manualmente.',
+'movedto'               => 'renombrado a',
+'movetalk'              => 'Renombrar la página de discusión también, si es aplicable.',
+'talkpagemoved'         => 'La página de discusión correspondiente también fue renombrada.',
+'talkpagenotmoved'      => 'La página de discusión correspondiente <strong>no</strong> fue renombrada.',
+'1movedto2'             => '[[$1]] trasladada a [[$2]]',
+'1movedto2_redir'       => '[[$1]] trasladada a [[$2]] sobre una redirección',
+'movelogpage'           => 'Registro de renombrados',
+'movelogpagetext'       => 'Abajo se encuentra una lista de páginas renombradas.',
+'movereason'            => 'Motivo',
+'revertmove'            => 'revertir',
+'delete_and_move'       => 'Borrar y trasladar',
+'delete_and_move_text'  => '==Se necesita borrado==
+
+La página de destino ("[[$1]]") ya existe. ¿Quieres borrarla para dejar paso al traslado?',
+'delete_and_move_reason'=> 'Borrada para dejar paso al traslado',
+'selfmove'              => 'Los títulos de origen y destino son los mismos; no se puede trasladar un página sobre sí misma.',
+'immobile_namespace'    => 'El título de destino es de un tipo especial; no se pueden trasladar página a ese espacio de nombres.',
+'export'                => 'Exportar páginas',
+'exporttext'            => 'Puedes exportar el texto y el historial de edición de una página en particular o de un conjunto de páginas a un texto XML. En el futuro, este texto podría posteriormente importarse en otro wiki que ejecutase MediaWiki, sin embargo esta capacidad no está aún disponible en la versión actual.
+
+Para exportar páginas, escribe los títulos en la caja de texto de abajo, un título por línea, y selecciona si quieres la versión actual junto a las versiones anteriores, con las líneas del historial, o sólo la versión actual con la información sobre la última edición.
+
+En el último caso puedes usar un enlace, por ejemplo [[Special:Export/{{Mediawiki:Mainpage}}]] for the page {{Mediawiki:Mainpage}}.',
+'exportcuronly'         => 'Sólo incluir la revisión actual, no el historial completo',
+'allmessages'           => 'Todos los mensajes de MediaWiki',
+'allmessagesname'       => 'Nombre',
+'allmessagesdefault'    => 'Texto predeterminado',
+'allmessagescurrent'    => 'Texto actual',
+'allmessagestext'       => 'Esta es una lista de mensajes del sistema disponibles en el espacio de nombres MediaWiki:.',
+'allmessagesnotsupportedUI'=> 'Tu lengua de interfaz actual (<b>$1</b>) no está disponible en Special:AllMessages en este sitio.',
+'allmessagesnotsupportedDB'=> 'Special:AllMessages no está disponible porque wgUseDatabaseMessages está deshabilitado.',
+'thumbnail-more'        => 'Aumentar',
+'missingimage'          => '<b>Falta imagen</b><br /><i>$1</i>',
+'filemissing'           => 'Falta archivo',
+'import'                => 'Importar páginas',
+'importinterwiki'       => 'Importación transwiki',
+'importtext'            => 'Por favor, exporta el archivo desde el wiki de origen usando la utilidad Special:Export, guárdalo en tu disco y súbelo aquí.',
+'importfailed'          => 'La importación ha fallado: $1',
+'importnotext'          => 'Vacío o sin texto',
+'importsuccess'         => '¡La importación tuvo éxito!',
+'importhistoryconflict' => 'Existen revisiones en el historial con conflicto (puede que se haya importado esta página antes)',
+'importnosources'       => 'No hay fuentes de importación transwiki y las subidas directas de historial están deshabilitadas.',
+'importnofile'          => 'No se subieron archivos de importación.',
+'importuploaderror'     => 'La subida del archivo de importación ha fallado; quizá el archivo es mayor que el tamaño de subida permitido.',
+'tooltip-search'        => 'Buscar en este wiki',
+'tooltip-minoredit'     => 'Marcar este cambio como menor',
+'tooltip-save'          => 'Guardar tus cambios',
+'tooltip-preview'       => 'Previsualiza tus cambios, ¡por favor, usa esto antes de grabar!',
+'tooltip-diff'          => 'Muestra los cambios que has introducido en el texto.',
+'tooltip-compareselectedversions'=> 'Ver las diferencias entre las dos versiones seleccionadas de esta página.',
+'tooltip-watch'         => 'Añadir esta página a tu lista de seguimiento',
+'monobook.css'          => '/* cambia este archivo para personalizar la piel monobook para el sitio entero */',
+'nodublincore'          => 'Metadatos Dublin Core RDF deshabilitados en este servidor.',
+'nocreativecommons'     => 'Metadatos Creative Commons RDF deshabilitados en este servidor.',
+'notacceptable'         => 'El servidor wiki no puede proveer los datos en un formato que tu cliente (navegador) pueda entender.',
+'anonymous'             => 'Usuario(s) anónimo(s) de {{SITENAME}}',
+'siteuser'              => 'Usuario $1 de {{SITENAME}}',
+'lastmodifiedatby'        => 'Esta página fue modificada por última vez en $2, $1 por $3.',
+'and'                   => 'y',
+'othercontribs'         => 'Basado en el trabajo de $1.',
+'others'                => 'otros',
+'siteusers'             => 'Usuario(s) $1 de {{SITENAME}}',
+'creditspage'           => 'Créditos de la página',
+'nocredits'             => 'Hay información de créditos para esta página.',
+'spamprotectiontitle'   => 'Filtro de protección contra spam',
+'spamprotectiontext'    => 'La página que intentas guardar ha sido bloqueada por el filtro de spam. Esto se debe probablemente a alguno de los un enlaces externos incluidos en ella.
+
+La siguiente expresión regular define los enlaces que se encuentran bloqueados en este momento:',
+'spamprotectionmatch'   => 'El siguiente texto es el que activó nuestro filtro \'\'anti-spam\'\' (contra la publicidad no solicitada): $1',
+'subcategorycount'      => 'Hay {{PLURAL:$1|una subcategoría|$1 subcategorías}} en esta categoría.',
+'categoryarticlecount'  => 'Hay $1 {{PLURAL:$1|artículo|artículos}} en esta categoría.',
+'infosubtitle'          => 'Información de la página',
+'numedits'              => 'Número de ediciones (artículo): $1',
+'numtalkedits'          => 'Número de ediciones (página de discusión): $1',
+'numwatchers'           => 'Número de usuarios vigilándola: $1',
+'numauthors'            => 'Número de autores distintos (artículo): $1',
+'numtalkauthors'        => 'Número de autores distintos (página de discusión): $1',
+'mw_math_png'           => 'Producir siempre PNG',
+'mw_math_simple'        => 'HTML si es muy simple, si no, PNG',
+'mw_math_html'          => 'HTML si es posible, si no, PNG',
+'mw_math_source'        => 'Dejar como TeX (para navegadores de texto)',
+'mw_math_modern'        => 'Recomendado para navegadores modernos',
+'mw_math_mathml'        => 'MathML',
+'markaspatrolleddiff'   => 'Marcar como revisado',
+'markaspatrolledtext'   => 'Marcar este artículo como revisado',
+'markedaspatrolled'     => 'Marcar como revisado',
+'markedaspatrolledtext' => 'La versión seleccionada ha sido marcada como revisada.',
+'rcpatroldisabled'      => 'Revisión de los Cambios Recientes deshabilitada',
+'rcpatroldisabledtext'  => 'La capacidad de revisar los Cambios Recientes está deshabilitada en este momento.',
+'monobook.js' => '/* Deprecated; use [[MediaWiki:common.js]] */',
+ 
+'accesskey-pt-userpage' => '.',
+'tooltip-pt-userpage' => 'Mi página de usuario',
+'accesskey-pt-anonuserpage' => '.',
+'tooltip-pt-anonuserpage' => 'La página de usuario de la IP desde la que editas',
+'accesskey-pt-mytalk' => 'n',
+'tooltip-pt-mytalk' => 'Mi página de discusión',
+'accesskey-pt-anontalk' => 'n',
+'tooltip-pt-anontalk' => 'Discusión sobre ediciones hechas desde esta dirección IP',
+'accesskey-pt-preferences' => '',
+'tooltip-pt-preferences' => 'Mis preferencias',
+'accesskey-pt-watchlist' => 'l',
+'tooltip-pt-watchlist' => 'La lista de páginas para las que estás vigilando los cambios',
+'accesskey-pt-mycontris' => 'y',
+'tooltip-pt-mycontris' => 'Lista de mis contribuciones',
+'accesskey-pt-login' => 'o',
+'tooltip-pt-login' => 'Te animamos a registrarte, aunque no es obligatorio',
+'accesskey-pt-anonlogin' => 'o',
+'tooltip-pt-anonlogin' => 'Te animamos a registrarte, aunque no es obligatorio',
+'accesskey-pt-logout' => '',
+'tooltip-pt-logout' => 'Salir de la sesión',
+'accesskey-ca-talk' => 't',
+'tooltip-ca-talk' => 'Discusión acerca del artículo',
+'accesskey-ca-edit' => 'e',
+'tooltip-ca-edit' => 'Puedes editar esta página. Por favor, usa el botón de previsualización antes de grabar.',
+'accesskey-ca-addsection' => '+',
+'tooltip-ca-addsection' => 'Añade un comentario a esta discusión',
+'accesskey-ca-viewsource' => 'e',
+'tooltip-ca-viewsource' => 'Esta página está protegida, sólo puedes ver su código fuente',
+'accesskey-ca-history' => 'h',
+'tooltip-ca-history' => 'Versiones anteriores de esta página y sus autores',
+'accesskey-ca-protect' => '=',
+'tooltip-ca-protect' => 'Proteger esta página',
+'accesskey-ca-delete' => 'd',
+'tooltip-ca-delete' => 'Borrar esta página',
+'accesskey-ca-undelete' => 'd',
+'tooltip-ca-undelete' => 'Restaurar las ediciones hechas a esta página antes de que fuese borrada',
+'accesskey-ca-move' => 'm',
+'tooltip-ca-move' => 'Trasladar (renombrar) esta página',
+'accesskey-ca-watch' => 'w',
+'tooltip-ca-watch' => 'Añadir esta página a tu lista de seguimiento',
+'accesskey-ca-unwatch' => 'w',
+'tooltip-ca-unwatch' => 'Borrar esta página de tu lista de seguimiento',
+'accesskey-search' => 'f',
+'tooltip-search' => 'Buscar en este wiki',
+'accesskey-p-logo' => '',
+'tooltip-p-logo' => 'Portada',
+'accesskey-n-mainpage' => 'z',
+'tooltip-n-mainpage' => 'Visitar la Portada',
+'accesskey-n-portal' => '',
+'tooltip-n-portal' => 'Acerca del proyecto, qué puedes hacer, dónde encontrar información',
+'accesskey-n-currentevents' => '',
+'tooltip-n-currentevents' => 'Información de contexto sobre acontecimientos actuales',
+'accesskey-n-recentchanges' => 'r',
+'tooltip-n-recentchanges' => 'La lista de cambios recientes en el wiki',
+'accesskey-n-randompage' => 'x',
+'tooltip-n-randompage' => 'Cargar una página aleatoriamente',
+'accesskey-n-help' => '',
+'tooltip-n-help' => 'El lugar para aprender',
+'accesskey-n-sitesupport' => '',
+'tooltip-n-sitesupport' => 'Respáldanos',
+'accesskey-t-whatlinkshere' => 'j',
+'tooltip-t-whatlinkshere' => 'Lista de todas las páginas del wiki que enlazan con ésta',
+'accesskey-t-recentchangeslinked' => 'k',
+'tooltip-t-recentchangeslinked' => 'Cambios recientes en las páginas que enlazan con esta otra',
+'accesskey-feed-rss' => '',
+'tooltip-feed-rss' => 'Sindicación RSS de esta página',
+'accesskey-feed-atom' => '',
+'tooltip-feed-atom' => 'Sindicación Atom de esta página',
+'accesskey-t-contributions' => '',
+'tooltip-t-contributions' => 'Ver la lista de contribuciones de este usuario',
+'accesskey-t-emailuser' => '',
+'tooltip-t-emailuser' => 'Enviar un mensaje de correo a este usuario',
+'accesskey-t-upload' => 'u',
+'tooltip-t-upload' => 'Subir imágenes o archivos multimedia',
+'accesskey-t-specialpages' => 'q',
+'tooltip-t-specialpages' => 'Lista de todas las páginas especiales',
+'accesskey-ca-nstab-main' => 'c',
+'tooltip-ca-nstab-main' => 'Ver el artículo',
+'accesskey-ca-nstab-user' => 'c',
+'tooltip-ca-nstab-user' => 'Ver la página de usuario',
+'accesskey-ca-nstab-media' => 'c',
+'tooltip-ca-nstab-media' => 'Ver la página de multimedia',
+'accesskey-ca-nstab-special' => '',
+'tooltip-ca-nstab-special' => 'Esta es una página especial, no se puede editar la página en sí',
+'accesskey-ca-nstab-project' => 'a',
+'tooltip-ca-nstab-project' => 'Ver la página de proyecto',
+'accesskey-ca-nstab-image' => 'c',
+'tooltip-ca-nstab-image' => 'Ver la página de la imagen',
+'accesskey-ca-nstab-mediawiki' => 'c',
+'tooltip-ca-nstab-mediawiki' => 'Ver el mensaje de sistema',
+'accesskey-ca-nstab-template' => 'c',
+'tooltip-ca-nstab-template' => 'Ver la plantilla',
+'accesskey-ca-nstab-help' => 'c',
+'tooltip-ca-nstab-help' => 'Ver la página de ayuda',
+'accesskey-ca-nstab-category' => 'c',
+'tooltip-ca-nstab-category' => 'Ver la página de categoría',
+'deletedrevision'       => 'Borrada revisión antigua $1.',
+'previousdiff'          => '← Ir a diferencia anterior',
+'nextdiff'              => 'Ir a siguiente diferencia →',
+'imagemaxsize'          => 'Limitar imágenes en las páginas de descripción a:',
+'thumbsize'             => 'Tamaño de diapositivas:',
+'showbigimage'          => 'Descargar versión de alta resolución ($1×$2, $3 KB)',
+'newimages'             => 'Galería de imágenes nuevas',
+'noimages'              => 'No hay nada que ver.',
+'specialloguserlabel'   => 'Usuario:',
+'speciallogtitlelabel'  => 'Título:',
+'passwordtooshort'      => 'Tu contraseña es muy corta. Debe tener al menos $1 caracteres.',
+'mediawarning'          => '\'\'\'Aviso\'\'\': Este archivo podría contener código malicioso, ejecutándolo tu sistema podría resultar comprometido.<hr />',
+'fileinfo'              => '$1KB, tipo MIME: <code>$2</code>',
+'metadata'              => 'Metadatos',
+'metadata-help'         => 'Este archivo contiene información adicional (metadatos), probablemente añadida por la cámara digital, el escáner o el programa usado para crearlo o digitalizarlo. Si el archivo ha sido modificado desde su estado original, pueden haberse perdido algunos detalles.',
+'metadata-expand'       => 'Mostrar datos detallados',
+'metadata-collapse'     => 'Ocultar datos detallados',
+'exif-imagewidth'       => 'Anchura',
+'exif-imagelength'      => 'Altura',
+'exif-bitspersample'    => 'Bits por componente',
+'exif-compression'      => 'Esquema de compresión',
+'exif-photometricinterpretation'=> 'Composición de pixel',
+'exif-orientation'      => 'Orientación',
+'exif-samplesperpixel'  => 'Número de componentes',
+'exif-planarconfiguration'=> 'Distribución de datos',
+'exif-ycbcrsubsampling' => 'Razón de submuestreo de Y a C',
+'exif-ycbcrpositioning' => 'Posicionamientos Y y C',
+'exif-xresolution'      => 'Resolución horizontal',
+'exif-yresolution'      => 'Resolución vertical',
+'exif-resolutionunit'   => 'Unidad de resolución X e Y',
+'exif-stripoffsets'     => 'Localización de datos de imagen',
+'exif-rowsperstrip'     => 'Número de filas por banda',
+'exif-stripbytecounts'  => 'Bytes por banda comprimida',
+'exif-jpeginterchangeformat'=> 'Desplazamiento al JPEG SOI',
+'exif-jpeginterchangeformatlength'=> 'Bytes de datos JPEG',
+'exif-transferfunction' => 'Función de transferencia',
+'exif-whitepoint'       => 'Cromaticidad de punto blanco',
+'exif-primarychromaticities'=> 'Cromaticidades de primaridades',
+'exif-ycbcrcoefficients'=> 'Coeficientes de matriz de transformación de espacio de color',
+'exif-referenceblackwhite'=> 'Pareja de valores negro y blanco de referencia',
+'exif-datetime'         => 'Fecha y hora de modificación del archivo',
+'exif-imagedescription' => 'Título de la imagen',
+'exif-make'             => 'Fabricante de la cámara',
+'exif-model'            => 'Modelo de cámara',
+'exif-software'         => 'Software usado',
+'exif-artist'           => 'Autor',
+'exif-copyright'        => 'Titular de los derechos de autor',
+'exif-exifversion'      => 'Versión Exif',
+'exif-flashpixversion'  => 'Versión admitida de Flashpix',
+'exif-colorspace'       => 'Espacio de color',
+'exif-componentsconfiguration'=> 'Significado de cada componente',
+'exif-compressedbitsperpixel'=> 'Modo de compresión de la imagen',
+'exif-pixelydimension'  => 'Anchura de imagen válida',
+'exif-pixelxdimension'  => 'Altura de imagen válida',
+'exif-makernote'        => 'Notas del fabricante',
+'exif-usercomment'      => 'Comentarios de usuario',
+'exif-relatedsoundfile' => 'Archivo de audio relacionado',
+'exif-datetimeoriginal' => 'Fecha y hora de la generación de los datos',
+'exif-datetimedigitized'=> 'Fecha y hora de la digitalización',
+'exif-exposuretime'     => 'Tiempo de exposición',
+'exif-fnumber'          => 'Número F',
+'exif-exposureprogram'  => 'Programa de exposición',
+'exif-spectralsensitivity'=> 'Sensibilidad espectral',
+'exif-isospeedratings'  => 'Calificación de velocidad ISO',
+'exif-oecf'             => 'Factor de conversión optoelectrónica',
+'exif-shutterspeedvalue'=> 'Velocidad de obturador',
+'exif-aperturevalue'    => 'Apertura',
+'exif-brightnessvalue'  => 'Luminosidad',
+'exif-exposurebiasvalue'=> 'Sesgo de exposición',
+'exif-maxaperturevalue' => 'Apertura máxima de tierra',
+'exif-subjectdistance'  => 'Distancia al sujeto',
+'exif-meteringmode'     => 'Modo de medición',
+'exif-lightsource'      => 'Fuente de luz',
+'exif-focallength'      => 'Longitud de la lente focal',
+'exif-subjectarea'      => 'Área del sujeto',
+'exif-flashenergy'      => 'Energía del flash',
+'exif-spatialfrequencyresponse'=> 'Respuesta de frecuencia espacial',
+'exif-focalplanexresolution'=> 'Resolución X plano focal',
+'exif-focalplaneyresolution'=> 'Resolución Y plano focal',
+'exif-focalplaneresolutionunit'=> 'Unidad de resolución del plano focal',
+'exif-subjectlocation'  => 'Localización del sujeto',
+'exif-exposureindex'    => 'Índice de exposición',
+'exif-sensingmethod'    => 'Método de sensor',
+'exif-filesource'       => 'Fuente de archivo',
+'exif-scenetype'        => 'Tipo de escena',
+'exif-cfapattern'       => 'Patrón CFA',
+'exif-customrendered'   => 'Procesador personalizado de imagen',
+'exif-exposuremode'     => 'Modo de exposición',
+'exif-whitebalance'     => 'Balance de blanco',
+'exif-digitalzoomratio' => 'Razón de zoom digital',
+'exif-focallengthin35mmfilm'=> 'Longitud focal en película de 35 mm',
+'exif-scenecapturetype' => 'Tipo de captura de escena',
+'exif-gaincontrol'      => 'Control de escena',
+'exif-contrast'         => 'Contraste',
+'exif-saturation'       => 'Saturación',
+'exif-sharpness'        => 'Agudeza',
+'exif-devicesettingdescription'=> 'Descripción de los ajustes del dispositivo',
+'exif-subjectdistancerange'=> 'Rango de distancia al sujeto',
+'exif-imageuniqueid'    => 'ID único de imagen',
+'exif-gpslatituderef'   => 'Latitud norte o sur',
+'exif-gpslatitude'      => 'Latitud',
+'exif-gpslongituderef'  => 'Longitud este u oeste',
+'exif-gpslongitude'     => 'Longitud',
+'exif-gpsaltituderef'   => 'Refencia de altitud',
+'exif-gpsaltitude'      => 'Altitud',
+'exif-gpssatellites'    => 'Satélites usados para la medición',
+'exif-gpsmeasuremode'   => 'Modo de medición',
+'exif-gpsdop'           => 'Precisión de medición',
+'exif-gpsspeedref'      => 'Unidad de velocidad',
+'exif-gpsspeed'         => 'Velocidad del receptor GPS',
+'exif-gpsimgdirectionref'=> 'Referencia de la dirección de imágen',
+'exif-gpsimgdirection'  => 'Dirección de imágen',
+'exif-gpsdestlatituderef'=> 'Referencia para la latitud del destino',
+'exif-gpsdestlatitude'  => 'Destino de latitud',
+'exif-gpsdestlongituderef'=> 'Referencia para la longitud del destino',
+'exif-gpsdestlongitude' => 'Longitud del destino',
+'exif-gpsdestbearingref'=> 'Referencia para la orientación al destino',
+'exif-gpsdestbearing'   => 'Orientación del destino',
+'exif-gpsdestdistanceref'=> 'Referencia para distancia al destination',
+'exif-gpsdestdistance'  => 'Distancia al destino',
+'exif-gpsprocessingmethod'=> 'Nombre del método de procesado GPS',
+'exif-gpsareainformation'=> 'Nombre de la área GPS',
+'exif-gpsdatestamp'     => 'Fecha GPS',
+'exif-gpsdifferential'  => 'Corrección diferencial de GPS',
+'exif-compression-1'    => 'No comprimida',
+'exif-orientation-2'    => 'Volteada horizontalmente',
+'exif-orientation-3'    => 'Rotada 180°',
+'exif-orientation-4'    => 'Volteada verticalmente',
+'exif-orientation-5'    => 'Rotada 90° CCW y volteada verticalmente',
+'exif-orientation-6'    => 'Rotada 90° CW',
+'exif-orientation-7'    => 'Rotada 90° CW y volteada verticalmente',
+'exif-orientation-8'    => 'Rotada 90° CCW',
+'exif-planarconfiguration-1'=> 'formato rechoncho (chunky)',
+'exif-planarconfiguration-2'=> 'formato plano',
+'exif-componentsconfiguration-0'=> 'no existe',
+'exif-exposureprogram-0'=> 'No definido',
+'exif-exposureprogram-2'=> 'Programa normal',
+'exif-exposureprogram-3'=> 'Prioridad de apertura',
+'exif-exposureprogram-4'=> 'Prioridad de obturador',
+'exif-exposureprogram-5'=> 'Programa creativo (sesgado hacia la profundidad de campo)',
+'exif-exposureprogram-6'=> 'Action program (sesgado hacia alta velocidad de obturador)',
+'exif-exposureprogram-7'=> 'Modo retrato (para primeros planos con el fondo desenfocado)',
+'exif-exposureprogram-8'=> 'Modo panorama (para fotos panorámicas con el fondo enfocado)',
+'exif-subjectdistance-value'=> '$1 metros',
+'exif-meteringmode-0'   => 'Desconocido',
+'exif-meteringmode-1'   => 'Media',
+'exif-meteringmode-5'   => 'Patrón',
+'exif-meteringmode-6'   => 'Parcial',
+'exif-meteringmode-255' => 'Otro',
+'exif-lightsource-0'    => 'Desconocido',
+'exif-lightsource-1'    => 'Luz diurna',
+'exif-lightsource-2'    => 'Fluorescente',
+'exif-lightsource-3'    => 'Tungsteno (luz incandescente)',
+'exif-lightsource-9'    => 'Buen tiempo',
+'exif-lightsource-10'   => 'Tiempo nublado',
+'exif-lightsource-11'   => 'Penumbra',
+'exif-lightsource-12'   => 'Fluorescente de luz diurna (D 5700 – 7100K)',
+'exif-lightsource-13'   => 'Fluorescente de día soleado (N 4600 – 5400K)',
+'exif-lightsource-14'   => 'Fluorescente blanco frío (W 3900 – 4500K)',
+'exif-lightsource-15'   => 'Fluroescente blanco (WW 3200 – 3700K)',
+'exif-lightsource-17'   => 'Luz estándar A',
+'exif-lightsource-18'   => 'Luz estándar B',
+'exif-lightsource-19'   => 'Luz estándar C',
+'exif-lightsource-24'   => 'Tungsteno de estudio ISO',
+'exif-lightsource-255'  => 'Otra fuente de luz',
+'exif-focalplaneresolutionunit-2'=> 'pulgadas',
+'exif-sensingmethod-1'  => 'No definido',
+'exif-sensingmethod-2'  => 'Sensor de área de color de un chip',
+'exif-sensingmethod-3'  => 'Sensor de área de color de dos chips',
+'exif-sensingmethod-4'  => 'Sensor de área de color de tres chips',
+'exif-sensingmethod-5'  => 'Sensor de área secuencial de color',
+'exif-sensingmethod-7'  => 'Sensor trilineal',
+'exif-sensingmethod-8'  => 'Sensor lineal secuencial de color',
+'exif-scenetype-1'      => 'Una imagen directamente fotografiada',
+'exif-customrendered-0' => 'Proceso normal',
+'exif-customrendered-1' => 'Proceso personalizado',
+'exif-exposuremode-0'   => 'Exposición automática',
+'exif-exposuremode-1'   => 'Exposición manual',
+'exif-whitebalance-0'   => 'Balance de blanco automático',
+'exif-whitebalance-1'   => 'Balance de blanco manual',
+'exif-scenecapturetype-0'=> 'Estándar',
+'exif-scenecapturetype-1'=> 'Paisaje',
+'exif-scenecapturetype-2'=> 'Retrato',
+'exif-scenecapturetype-3'=> 'Escena nocturna',
+'exif-gaincontrol-0'    => 'Ninguna',
+'exif-contrast-1'       => 'Suave',
+'exif-contrast-2'       => 'Duro',
+'exif-saturation-1'     => 'Baja saturación',
+'exif-saturation-2'     => 'Alta saturación',
+'exif-sharpness-1'      => 'Suave',
+'exif-sharpness-2'      => 'Dura',
+'exif-subjectdistancerange-0'=> 'Desconocida',
+'exif-subjectdistancerange-2'=> 'Vista cercana',
+'exif-subjectdistancerange-3'=> 'Vista lejana',
+'exif-gpslatitude-n'    => 'Latitud norte',
+'exif-gpslatitude-s'    => 'Latitud sur',
+'exif-gpslongitude-e'   => 'Longitud este',
+'exif-gpslongitude-w'   => 'Longitud oeste',
+'exif-gpsmeasuremode-2' => 'Medición bidimensional',
+'exif-gpsmeasuremode-3' => 'Medición tridimensional',
+'exif-gpsspeed-k'       => 'Kilómetros por hora',
+'exif-gpsspeed-m'       => 'Millas por hora',
+'exif-gpsspeed-n'       => 'Nudos',
+'exif-gpsdirection-t'   => 'Dirección real',
+'exif-gpsdirection-m'   => 'Dirección magnética',
+'edit-externally'       => 'Editar este archivo usando una aplicación externa',
+'edit-externally-help'  => 'Ver las [http://meta.wikimedia.org/wiki/Help:External_editors instrucciones de configuración] para más información.',
+'recentchangesall'      => 'todos',
+'imagelistall'          => 'todos',
+'watchlistall1'         => 'todos',
+'watchlistall2'         => 'todos',
+'namespacesall'         => 'todos',
+'confirmemail'          => 'Confirmar dirección de correo',
+'confirmemail_text'     => 'Este wiki requiere que valides tu dirección de correo antes de usarlo. Pulsa el botón de abajo para enviar la confirmación.
+El correo incluirá un enlace con un código; cárgalo para confirmar la validez de tu dirección.',
+'confirmemail_send'     => 'Envía el código de confimación.',
+'confirmemail_sent'     => 'Confirmación de correo enviada.',
+'confirmemail_sendfailed'=> 'No fue posible enviar el correo de confirmación. Por favor, comprueba que no haya caracteres inválidos en la dirección de correo que has ingresado.',
+'confirmemail_invalid'  => 'Código de confirmación incorrecto. El código debe de haber expirado.',
+'confirmemail_success'  => 'Tu dirección de correo ha sido confirmada. Ahora puedes registrarte y colaborar en el wiki.',
+'confirmemail_loggedin' => 'Tu dirección de correo ha sido confirmada.',
+'confirmemail_error'    => 'Algo salió mal al guardar tu confirmación.',
+'confirmemail_subject'  => 'confirmación de la dirección de correo de {{SITENAME}}',
+'confirmemail_body'     => 'Alguien, probablemente tú mismo, ha registrado una
+cuenta "$2" con esta dirección de correo en {{SITENAME}},
+desde la dirección IP $1.
+
+Para confirmar que esta cuenta realmente te pertenece y
+activar el correo en {{SITENAME}}, abre este enlace:
+
+$3
+
+Si la cuenta no es tuya, no sigas el enlace. El código de confirmación expirará en $4.',
+'tryexact'              => 'Probar con coincidencia exacta',
+'searchfulltext'        => 'Buscar por texto completo',
+'createarticle'         => 'Crear artículo',
+'scarytranscludedisabled'=> '[Transclusión interwiki está deshabilitada]',
+'scarytranscludefailed' => '[Obtención de plantilla falló para $1; lo sentimos]',
+'scarytranscludetoolong'=> '[URL es demasiado larga; lo sentimos]',
+'trackbackbox'          => '<div id="mw_trackbacks">
+Trackbacks para este artículo:<br />
+$1
+</div>',
+'trackbackremove'       => ' ([$1 Borrar])',
+'trackbackdeleteok'     => 'El trackback se borró correctamente.',
+'deletedwhileediting'   => 'Aviso: ¡Esta página ha sido borrada después de que iniciases la edición!',
+'confirmrecreate'       => 'El usuario [[User:$1|$1]] ([[User talk:$1|discusión]]) borró este artículo después de que tú empezaces a editarlo y dio esta razón: \'\'$2\'\' Por favor, confirma que realmente deseas crear de nuevo el artículo.',
+'recreate'              => 'Crear de nuevo',
+'tooltip-recreate'      => 'Recupera una página que ha sido borrada',
+'redirectingto'         => 'Redirigiendo a [[$1]]...',
+'confirm_purge'         => '¿Vaciar la cache de esta página?
+
+$1',
+'confirm_purge_button'  => 'Aceptar',
+'accesskey-compareselectedversions'	=> 'v',
+'accesskey-diff'	=> 'v',
+'accesskey-minoredit'	=> 'i',
+'accesskey-preview'	=> 'p',
+'accesskey-save'	=> 's',
+'accesskey-search'	=> 'f',
+'accesskey-watch'	=> 'w',
+'allmessagesfilter'	=> 'Filtrar por nombre del mensaje:',
+'allmessagesmodified'	=> 'Mostrar sólo los modificados',
+'allpagesbadtitle'	=> 'El título dado era inválido o tenía un prefijo de enlace inter-idioma o inter-wiki. Puede contener uno o más caracteres que no se pueden usar en títulos.',
+'anoneditwarning'	=> 'No has introducido tu nombre de usuario. Tu dirección IP se guardará en el historial de edición de la página.',
+'anononlyblock'	=> 'sólo anon.',
+'april-gen'	=> 'abril',
+'articletitles'	=> 'Artículos que comienzan por \'\'$1\'\'',
+'august-gen'	=> 'agosto',
+'autoredircomment'	=> 'Redirigiendo a [[$1]]',
+'badaccess-group0'	=> 'No estás autorizado a ejecutar la acción que has solicitado.',
+'badaccess-group1'	=> 'La acción que has solicitado está restringida a los usuarios de uno de estos grupos: $1.',
+'badaccess-group2'	=> 'La acción que has solicitado está restringida a los usuarios de uno de estos grupos: $1.',
+'badaccess-groups'	=> 'La acción que has solicitado está restringida a los usuarios de uno de estos grupos: $1.',
+'blockededitsource'	=> 'El texto de \'\'\'tus ediciones\'\'\' a \'\'\'$1\'\'\' se muestran a continuación:',
+'blockedoriginalsource'	=> 'El código fuente de \'\'\'$1\'\'\' se muestra a continuación:',
+'boteditletter'	=> 'b',
+'cannotundelete'	=> 'Ha fallado el deshacer el borrado; alguien más puede haber deshecho el borrado antes.',
+'cantcreateaccounttext'	=> 'La creación de cuentas desde esta dirección IP (<b>$1</b>) ha sido bloqueada. 
+Esto se debe probablemente a vandalismos persistentes desde tu escuela o tu proveedor de servicios de Internet.',
+'cantcreateaccounttitle'	=> 'No se puede crear la cuenta',
+'categorypage'	=> 'Ver página de categoría',
+'clearwatchlist'	=> 'Limpiar lista de seguimiento',
+'common.css'	=> '/* Los estilos CSS definidos aquí aplicarán a todas las pieles (skins) */',
+'confirmedittext'	=> 'Debes confirmar tu dirección electrónica antes de editar páginas. Por favor, establece y valida una dirección electrónica a través de tus [[Special:Preferences|preferencias de usuario]].',
+'confirmedittitle'	=> 'Se requiere confirmación de dirección electrónica para editar',
+'confirmemail_needlogin'	=> 'Necesitas $1 para confirmar tu dirección electrónica.',
+'createaccountblock'	=> 'Creación de cuenta bloqueada.',
+'databasenotlocked'	=> 'La base de datos no está bloqueada.',
+'december-gen'	=> 'diciembre',
+'delete_and_move_confirm'	=> 'Sí, borrar la página',
+'displaytitle'	=> '(Link to this page as [[$1]])',
+'editinginterface'	=> '\'\'\'Aviso:\'\'\' Estás editando una página usada para proporcionar texto a la interfaz de {{SITENAME}}. Los cambios en esta página afectarán a la apariencia de la interfaz para los demás usuarios.',
+'error'	=> 'Error',
+'errorpagetitle'	=> 'Error',
+'exportnohistory'	=> '----
+\'\'\'Nota:\'\'\' Exportar el historial completo de páginas a través de este formulario ha sido deshabilitado debido a problemas de rendimiento del servidor.',
+'export-submit'	=> 'Exportar',
+'faq'	=> 'FAQ',
+'february-gen'	=> 'febrero',
+'feed-invalid'	=> 'Tipo de subscripción a sindicación de noticias inválida.',
+'filewasdeleted'	=> 'Un archivo con este nombre se subió con anterioridad y posteriormente ha sido borrado. Deberías revisar el $1 antes de subirlo de nuevo.',
+'fri'	=> 'vie',
+'group'	=> 'Grupo:',
+'group-all'	=> '(todos)',
+'group-bot'	=> 'Bots',
+'group-bot-member'	=> 'Bot',
+'group-bureaucrat'	=> 'Burócratas',
+'group-bureaucrat-member'	=> 'Burócrata',
+'grouppage-bot'	=> 'Project:Bot',
+'grouppage-bureaucrat'	=> 'Project:Burócratas',
+'grouppage-sysop'	=> 'Project:Administradors',
+'group-sysop'	=> 'Administradores',
+'group-sysop-member'	=> 'Administrador',
+'hideresults'	=> 'Ocultar resultados',
+'hist'	=> 'hist',
+'history-feed-description'	=> 'Historial de revisiones para esta página en el wiki',
+'history-feed-empty'	=> 'La página solicitada no existe.
+Puede haber sido borrada del wiki o renombrada.
+Prueba a [[Special:Search|buscar en el wiki]] nuevas páginas relevantes.',
+'history-feed-item-nocomment'	=> '$1 en $2',
+'history-feed-title'	=> 'Historial de revisiones',
+'imagelistforuser'	=> 'Esto sólo muestra imágenes subidas por $1.',
+'imgdesc'	=> 'desc',
+'importbadinterwiki'	=> 'Enlace interwiki anómalo',
+'importcantopen'	=> 'No se puedo importar este archivo',
+'import-interwiki-history'	=> 'Copiar todas las versiones históricas para esta página',
+'import-interwiki-namespace'	=> 'Transferir páginas al espacio de nombres:',
+'import-interwiki-submit'	=> 'Importar',
+'import-interwiki-text'	=> 'Selecciona un wiki y un título de página para importar.
+Las fechas de revisiones y los nombres de editores se preservarán.
+Todas las importaciones transwiki se registran en el [[Special:Log/import|registro de importaciones]].',
+'import-logentry-interwiki'	=> 'transwikificada $1',
+'import-logentry-interwiki-detail'	=> '$1 revisión/ones desde $2',
+'import-logentry-upload'	=> 'importada [[$1]] por subida de archivo',
+'import-logentry-upload-detail'	=> '$1 revisión/ones',
+'importlogpage'	=> 'Registro de importaciones',
+'importlogpagetext'	=> 'Importaciones administrativas de páginas con historial desde otros wikis.',
+'importnopages'	=> 'No hay páginas que importar.',
+'import-revision-count'	=> '$1 revisión/ones',
+'importstart'	=> 'Importando páginas...',
+'importunknownsource'	=> 'Tipo de fuente de importación desconocida',
+'ipb_already_blocked'	=> '"$1" ya se encuentra bloqueado.',
+'ipbanononly'	=> 'Bloquear usuarios anónimos solamente',
+'ipb_cant_unblock'	=> '\'\'\'Error\'\'\': Número ID $1 de bloqueo no encontrado. Pudo haber sido desbloqueado ya.',
+'ipbcreateaccount'	=> 'Prevenir creación de cuenta de usuario.',
+'isbn'	=> 'ISBN',
+'istemplate'	=> 'inclusión',
+'january-gen'	=> 'enero',
+'july-gen'	=> 'julio',
+'june-gen'	=> 'junio',
+'listingcontinuesabbrev'	=> ' cont.',
+'listredirects'	=> 'Lista de redirecciones',
+'lockfilenotwritable'	=> 'El archivo-cerrojo de la base de datos no tiene permiso de escritura. Para bloquear o desbloquear la base de datos, este archivo tiene que ser escribible por el sesrvidor web.',
+'loginlanguagelabel'	=> 'Idioma: $1',
+'longpageerror'	=> '<strong>ERROR: El testo que has enviado ocupa $1 kilobytes, lo cual es mayor que $2 kilobytes. No se puede guardar.</strong>',
+'march-gen'	=> 'marzo',
+'markedaspatrollederror'	=> 'No se puede marcar como patrullada',
+'markedaspatrollederrortext'	=> 'Debes especificar una revisión para marcarla como patrullada.',
+'may-gen'	=> 'mayo',
+'mediawikipage'	=> 'Ver página de mensaje',
+'metadata-fields'	=> 'Los campos de metadatos EXIF que se listan en este mensaje se mostrarán en la página de descripción de la imagen aún cuando la tabla de metadatos esté plegada. Existen otros campos que se mantendrán ocultos por defecto y que podrán desplegarse. 
+* make
+* model
+* datetimeoriginal
+* exposuretime
+* fnumber
+* focallength',
+'metadata_help'	=> 'Metadata:',
+'minoreditletter'	=> 'm',
+'missingcommenttext'	=> 'Por favor introduce texto debajo.',
+'missingsummary'	=> '\'\'\'Atención:\'\'\' No has escrito un resumen de edición. Si haces clic nuevamente en «{{MediaWiki:Savearticle}}» tu edición se grabará sin él.',
+'mon'	=> 'lun',
+'newpageletter'	=> 'N',
+'newpages-username'	=> 'Nombre de usuario',
+# problem with link: [[{{ns:project}}:Búsqueda]]
+'noexactmatch'	=> '<div style="border: 1px solid #ccc; padding: 7px;"><div style="background: #F9F9F9; padding: 7px">
+<div style="font-size:115%"><b>No existe ningún artículo con el título que has escrito.</b></div>
+<hr />
+<ul>
+<li>Posibles causas:
+<ul>
+<li>Puede que lo hayas <b>tecleado mal</b> o con alguna <b>falta de ortografía</b>. Comprueba el texto (recuerda que mayúsculas y acentos afectan a la búsqueda) o consulta [[{{ns:project}}:Búsqueda]]<!-- /a -->. </li>
+<li>Puede que el artículo que buscas <b>tenga otro título</b>. Prueba a repetir tu búsqueda utilizando el botón "Búsqueda" de más arriba.
+</li>
+</ul>
+</li>
+
+<li>
+Ten en cuenta que {{SITENAME}} es un wiki en desarrollo que va siendo construido poco a poco por sus visitantes. Si el artículo que buscas aún no existe, puedes crearlo siguiendo <b>[[$1|este enlace]]</b>. Puede que así otra gente vea el artículo y trate de completarlo.
+</li>
+</ul></div>
+<div style="font-size:90%; padding-left: 7px">
+<b>Muy importante:</b> en {{SITENAME}} <b>no se aceptan en ningún caso</b> textos con copyright sin el permiso explícito de sus autores. En particular, la mayoría de las páginas web (indiquen o no su autor o copyright) tienen copyright, por lo que su contenido es inadmisible aquí. Ten en cuenta que copiar este tipo de materiales <b>puede causar serios daños al proyecto</b>. Para más información, puedes leer <b>[[{{MediaWiki:Copyrightpage}}]]</b>
+</div>
+</div>',
+'nouserspecified'	=> 'Debes especificar un nombre de usuario.',
+'november-gen'	=> 'noviembre',
+'october-gen'	=> 'octubre',
+'ok'	=> 'OK',
+'revision-info' => 'Revisión a fecha de $1; $2',
+'orig'	=> 'orig',
+'pagetitle'	=> '$1 - {{SITENAME}}',
+'prefs-watchlist'	=> 'Seguimiento',
+'prefs-watchlist-days'	=> 'Número de días a mostrar en la lista de seguimiento:',
+'prefs-watchlist-edits'	=> 'Número de ediciones a mostrar en la lista extendida:',
+# problem with link: [[{{ns:project}}:vandalismo|vandalismos]]
+'protectedinterface'	=> 'Esta página provee texto del interfaz del software. Está bloqueada para evitar [[{{ns:project}}:vandalismo|vandalismos]]. Si cree que debería cambiarse el texto, hable con un [[{{MediaWiki:grouppage-sysop}}|Administrador]].',
+'randomredirect'	=> 'Ir a una redirección cualquiera',
+'rc_categories'	=> 'Limitar a categorías (separadas por "|")',
+'rc_categories_any'	=> 'Any',
+'rcshowhideanons'	=> '$1 usuarios anónimos',
+'rcshowhidebots'	=> '$1 bots',
+'rcshowhideliu'	=> '$1 usuarios registrados',
+'rcshowhidemine'	=> '$1 mis ediciones',
+'rcshowhideminor'	=> '$1 ediciones menores',
+'rcshowhidepatr'	=> '$1 ediciones patrulladas',
+'restriction-edit'	=> 'Pueden editar',
+'restriction-move'	=> 'Pueden trasladar',
+'rev-deleted-comment'	=> '(comentario eliminado)',
+'rev-deleted-text-permission'	=> '<div class="mw-warning plainlinks">
+Esta revisión de la página ha sido eliminada de los archivos públicos.
+puede haber detalles en el [{{fullurl:Special:Log/delete|page={{PAGENAMEE}}}} registro de borrado].
+</div>',
+'rev-deleted-text-view'	=> '<div class="mw-warning plainlinks">
+Esta revisión de la página ha sido eliminada de los archivos públicos.
+Como administrador de este wiki puedes verla;
+puede haber detalles en el [{{fullurl:Special:Log/delete|page={{PAGENAMEE}}}} registro de borrado].
+</div>',
+'rev-deleted-user'	=> '(nombre de usuario eliminado)',
+'revdelete-hide-comment'	=> 'Ocultar comentario de edición',
+'revdelete-hide-restricted'	=> 'Aplicar estas restricciones a los administradores tal como al resto',
+'revdelete-hide-text'	=> 'Ocultar el texto de la revisión',
+'revdelete-hide-user'	=> 'Ocultar el nombre/IP del editor',
+'revdelete-legend'	=> 'Establecer restricciones de revisión:',
+'revdelete-log'	=> 'Comentario de registro:',
+'revdelete-logentry'	=> 'cambiada la visibilidad de la revisión para [[$1]]',
+'revdelete-selected'	=> 'Revisión seleccionada de [[:$1]]:',
+'revdelete-submit'	=> 'Aplicar a la revisión seleccionada',
+'revdelete-text'	=> 'Las revisiones borradas aún aparecerán en el historial de la página,
+pero sus contenidos no serán accesibles al público.
+
+Otros administradores de este wiki aún podrán acceder al contenido oculto y podrán deshacer el borrado a través de la misma interfaz, a menos los operadores del sitio establezcan una restricción adicional.',
+'rev-delundel'	=> 'mostrar/ocultar',
+'revertimg'	=> 'rev',
+'revisiondelete'	=> 'Borrar/deshacer borrado revisiones',
+'rightslog'	=> 'Cambios de perfil de usuarios',
+'rightslogentry'	=> 'modificó los grupos a los que pertenece $1: de $2 a $3',
+'rightsnone'	=> 'ninguno',
+'sat'	=> 'sab',
+'searchcontaining'	=> 'Buscar artículos que contengan \'\'$1\'\'.',
+'searchnamed'	=> 'Buscar artículos con este nombre \'\'$1\'\'.',
+'sectionlink'	=> '→',
+'semiprotectedpagewarning'	=> '\'\'\'Nota:\'\'\' Esta página ha sido protegida para que sólo usuarios registrados puedan editarla.',
+'september-gen'	=> 'septiembre',
+'session_fail_preview_html'	=> '<strong>Lo sentimos, no hemos podido procesar tu cambio debido a una pérdida de datos de sesión.</strong>
+
+\'\'Puesto que este wiki tiene el HTML puro habilitado, la visión preliminar está oculta para prevenirse contra ataques en JavaScript.\'\'
+
+<strong>If this is a legitimate edit attempt, please try again. If it still doesn\'t work, try logging out and logging back in.</strong>',
+'showhidebots'	=> '($1 bots)',
+'showlivepreview'	=> 'Live preview',
+'sorbs'	=> 'SORBS DNSBL',
+'spam_blanking'	=> 'Todas las revisiones contienen enlaces a $1, blanqueando',
+'spambot_username'	=> 'Limpieza de spam de MediaWiki',
+'spam_reverting'	=> 'Revirtiendo a la última versión que no contenga enlaces a $1',
+'sp-contributions-newbies-sub'	=> 'Para nuevos',
+'sp-contributions-newer'	=> '← $1 posteriores',
+'sp-contributions-newest'	=> 'Últimas',
+'sp-contributions-older'	=> '$1 previas →',
+'sp-contributions-oldest'	=> 'Primeras',
+'sp-newimages-showfrom'	=> 'Mostrar nuevas imágines empezando por $1',
+'statistics-mostpopular'	=> 'Páginas más vistas',
+'sun'	=> 'dom',
+'templatepage'	=> 'Ver página de plantilla',
+'thu'	=> 'jue',
+'thumbnail_error'	=> 'Error al crear miniatura: $1',
+'tog-uselivepreview'	=> 'Usar live preview (JavaScript) (Experimental)',
+'trackbacklink'	=> 'Trackback',
+'tue'	=> 'mar',
+'unblocked'	=> '[[User:$1|$1]] ha sido desbloqueado',
+'uncategorizedimages'	=> 'Imágenes sin categorizar',
+'undeletecomment'	=> 'Razón para restaurar:',
+'undeletedfiles'	=> '$1 archivo(s) restaurados',
+'undeletedpage'	=> '<big>\'\'\'Se ha restaurado $1\'\'\'</big>
+
+Consulta el [[Special:Log/delete|registro de borrados]] para ver una lista de los últimos borrados / restauraciones.',
+'undeletedrevisions-files'	=> '$1 revisions and $2 file(s) restored',
+'undeleteextrahelp'	=> 'Para restaurar todas las revisiones, deja todas las casillas sin seleccionar y pulsa \'\'\'¡Restaurar!\'\'\'. Para restaurar sólo algunas revisiones, marca las revisiones que quieres restaurar y pulsa \'\'\'¡Restaurar!\'\'\'. Haciendo clic en al botón \'\'\'Nada\'\'\', se deseleccionarán  todas las casillas y eliminará el comentario actual.',
+'undeletereset'	=> 'Nada',
+'unit-pixel'	=> 'px',
+'unusedtemplates'	=> 'Plantillas sin uso',
+'unusedtemplatestext'	=> 'Aquí se enumeran todas las páginas en la zona de plantillas que no están incluidas en otras páginas. Recuerda mirar lo que enlaza a las plantillas antes de borrarlas.',
+'unusedtemplateswlh'	=> 'otros enlaces',
+'uploaddisabledtext'	=> 'Las subidas de archivos están deshabilitadas en este wiki',
+'userinvalidcssjstitle'	=> '\'\'\'Aviso:\'\'\' No existe la piel "$1". Recuerda que las páginas personalizadas .css y .js tienen un título en minúsculas, p.e. Usuario:Foo/monobook.css en vez de  Usuario:Foo/Monobook.css.',
+'variantname-sr'	=> 'sr',
+'variantname-sr-ec'	=> 'sr-ec',
+'variantname-sr-el'	=> 'sr-el',
+'variantname-sr-jc'	=> 'sr-jc',
+'variantname-sr-jl'	=> 'sr-jl',
+'variantname-zh'	=> 'zh',
+'variantname-zh-cn'	=> 'cn',
+'variantname-zh-hk'	=> 'hk',
+'variantname-zh-sg'	=> 'sg',
+'variantname-zh-tw'	=> 'tw',
+'viewhelppage'	=> 'Ver página de ayuda',
+'viewpagelogs'	=> 'Ver los registros de esta página',
+'viewsourcefor'	=> 'para $1',
+'watchlistanontext'	=> 'Para ver o editar las entradas de tu lista de seguimiento debes $1.',
+'watchlistclearbutton'	=> 'Vaciar la lista de seguimiento',
+'watchlistcleardone'	=> 'Tu lista de seguimiento ha sido borrada. Se eliminaron $1 elementos.',
+'watchlistcleartext'	=> '¿Estás seguro de querer borrarlos?',
+'watchlistcount'	=> '\'\'\'Tienes $1 páginas en tu lista de seguimiento, incluyendo las de discusión.\'\'\'',
+'watchlistfor'	=> '(para \'\'\'$1\'\'\')',
+'wed'	=> 'mie',
+'wldone'	=> 'Hecho.',
+'youhavenewmessagesmulti'	=> 'Tienes nuevos mensajes en $1',
+
+);
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesEt.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesEt.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesEt.php	(revision 1280)
@@ -0,0 +1,907 @@
+<?php
+
+/** Estonian (Eesti)
+ *
+ * @addtogroup Language
+ *
+ */
+
+$namespaceNames = array(
+	NS_MEDIA            => 'Meedia',
+	NS_SPECIAL          => 'Eri',
+	NS_MAIN             => '',
+	NS_TALK             => 'Arutelu',
+	NS_USER             => 'Kasutaja',
+	NS_USER_TALK        => 'Kasutaja_arutelu',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK     => '$1_arutelu',
+	NS_IMAGE            => 'Pilt',
+	NS_IMAGE_TALK       => 'Pildi_arutelu',
+	NS_MEDIAWIKI        => 'MediaWiki',
+	NS_MEDIAWIKI_TALK   => 'MediaWiki_arutelu',
+	NS_TEMPLATE         => 'Mall',
+	NS_TEMPLATE_TALK    => 'Malli_arutelu',
+	NS_HELP             => 'Juhend',
+	NS_HELP_TALK        => 'Juhendi_arutelu',
+	NS_CATEGORY         => 'Kategooria',
+	NS_CATEGORY_TALK    => 'Kategooria_arutelu'
+);
+
+$skinNames = array(
+	'standard' => 'Standard',
+	'nostalgia' => 'Nostalgia',
+	'cologneblue' => 'Kölni sinine',
+	'smarty' => 'Paddington',
+	'montparnasse' => 'Montparnasse',
+	'davinci' => 'DaVinci',
+	'mono' => 'Mono',
+	'monobook' => 'MonoBook',
+	'myskin' => 'Mu oma nahk'
+);
+
+#Lisasin eestimaised poed, aga võõramaiseid ei julenud kustutada.
+
+$bookstoreList = array(
+	'Apollo' => 'http://www.apollo.ee/search.php?keyword=$1&search=OTSI',
+	'minu Raamat' => 'http://www.raamat.ee/advanced_search_result.php?keywords=$1',
+	'Raamatukoi' => 'http://www.raamatukoi.ee/cgi-bin/index?valik=otsing&paring=$1',
+	'AddALL' => 'http://www.addall.com/New/Partner.cgi?query=$1&type=ISBN',
+	'PriceSCAN' => 'http://www.pricescan.com/books/bookDetail.asp?isbn=$1',
+	'Barnes & Noble' => 'http://search.barnesandnoble.com/bookSearch/isbnInquiry.asp?isbn=$1',
+	'Amazon.com' => 'http://www.amazon.com/exec/obidos/ISBN=$1'
+);
+
+
+$magicWords = array(
+	#   ID                                 CASE  SYNONYMS
+	'redirect'               => array( 0,    '#redirect', "#suuna"    ),
+);
+
+$separatorTransformTable = array(',' => "\xc2\xa0", '.' => ',' );
+$linkTrail = "/^([a-z]+)(.*)\$/sD";
+
+$datePreferences = array(
+	'default',
+	'et numeric',
+	'dmy',
+	'et roman',
+	'ISO 8601'
+);
+
+$datePreferenceMigrationMap = array(
+	'default',
+	'et numeric',
+	'dmy',
+	'et roman',
+);
+
+$defaultDateFormat = 'dmy';
+
+$dateFormats = array(
+	'et numeric time' => 'H:i',
+	'et numeric date' => 'd.m.Y',
+	'et numeric both' => 'd.m.Y, "kell" H:i',
+
+	'dmy time' => 'H:i',
+	'dmy date' => 'j. F Y',
+	'dmy both' => 'j. F Y, "kell" H:i',
+
+	'et roman time' => 'H:i',
+	'et roman date' => 'j. xrm Y',
+	'et roman both' => 'j. xrm Y, "kell" H:i',
+);
+
+$messages = array(
+"tog-underline" => "Lingid alla kriipsutada",
+"tog-highlightbroken" => "Vorminda lingirikked<a href=\"\" class=\"new\">nii</a> (alternatiiv: nii<a href=\"\" class=\"internal\">?</a>).",
+"tog-justify" => "Lõikude rööpjoondus",
+"tog-hideminor" => "Peida pisiparandused viimastes muudatustes",
+"tog-usenewrc" => "Laiendatud viimased muudatused (mitte kõikide brauserite puhul)",
+"tog-numberheadings" => "Pealkirjade automaatnummerdus",
+"tog-showtoolbar" => "Redigeerimise tööriistariba näitamine",
+"tog-rememberpassword" => "Parooli meeldejätmine tulevasteks seanssideks",
+"tog-editwidth" => "Redaktoriboksil on täislaius",
+"tog-editondblclick" => "Artiklite redigeerimine topeltklõpsu peale (JavaScript)",
+"tog-watchdefault" => "Jälgi uusi ja muudetud artikleid",
+"tog-minordefault" => "Märgi kõik parandused vaikimisi pisiparandusteks",
+"tog-previewontop" => "Näita eelvaadet redaktoriboksi ees, mitte järel",
+
+# Dates
+'sunday' => 'pühapäev',
+'monday' => 'esmaspäev',
+'tuesday' => 'teisipäev',
+'wednesday' => 'kolmapäev',
+'thursday' => 'neljapäev',
+'friday' => 'reede',
+'saturday' => 'laupäev',
+'january' => 'jaanuar',
+'february' => 'veebruar',
+'march' => 'märts',
+'april' => 'aprill',
+'may_long' => 'mai',
+'june' => 'juuni',
+'july' => 'juuli',
+'august' => 'august',
+'september' => 'september',
+'october' => 'oktoober',
+'november' => 'november',
+'december' => 'detsember',
+'jan' => 'jaan',
+'feb' => 'veebr',
+'mar' => 'märts',
+'apr' => 'apr',
+'may' => 'mai',
+'jun' => 'juuni',
+'jul' => 'juuli',
+'aug' => 'aug',
+'sep' => 'sept',
+'oct' => 'okt',
+'nov' => 'nov',
+'dec' => 'dets',
+
+# Bits of text used by many pages:
+#
+'categories' => 'Kategooriad',
+'pagecategories' => 'Kategooriad',
+'category_header' => 'Selles kategoorias on "$1" artiklit',
+'subcategories' => 'Alamkategooriad',
+
+
+"mainpage"		=> "Esileht",
+"mainpagetext"	=> "Wiki tarkvara installeeritud.",
+"mainpagedocfooter" => "Juhiste saamiseks kasutamise ning konfigureerimise kohta vaata palun inglisekeelset [http://meta.wikimedia.org/wiki/MediaWiki_i18n dokumentatsiooni liidese kohaldamisest]
+ning [http://meta.wikimedia.org/wiki/MediaWiki_User%27s_Guide kasutusjuhendit].",
+'portal'                =>  'Kogukonnavärav', # Kirjutajate portaal?
+'portal-url'            => '{{ns:4}}:Kogukonnavärav',
+"about"			=> "Tiitelandmed",
+"aboutsite" => "{{SITENAME}} tiitelandmed",
+"aboutpage"		=> "{{ns:4}}:Tiitelandmed",
+"article"		=> "Sisu",  # või "Artikkel" nagu praegu Vikipeedias?
+"help"			=> "Juhend", # Vikipeedias "Spikker"
+"helppage"		=> "{{ns:12}}:Juhend",
+"bugreports"	=> "Teated programmivigadest",
+"bugreportspage" => "{{ns:4}}:Teated_programmivigadest",
+'sitesupport'   => 'Annetused', # Set a URL in $wgSiteSupportPage in LocalSettings.php
+"faq"			=> "KKK",
+"faqpage"		=> "{{ns:4}}:KKK",
+"edithelp"		=> "Redigeerimisjuhend",
+"newwindow"             => "(avaneb uues aknas)",
+"edithelppage"	=> "{{ns:12}}:Kuidas_artiklit_redigeerida",
+"cancel"		=> "Tühista",
+"qbfind"		=> "Otsi",
+"qbbrowse"		=> "Sirvi",
+"qbedit"		=> "Redigeeri",
+"qbpageoptions" => "Lehekülje suvandid",  // en: this page
+"qbpageinfo"	=> "Lehekülje andmed",    // en: context
+"qbmyoptions"	=> "Minu suvandid",       // en: my pages
+"qbspecialpages" => "Erileheküljed",
+'moredotdotdot' => 'Veel...',
+"mypage"		=> "Minu lehekülg",
+"mytalk"		=> "Minu arutelu",
+'anontalk'              => 'Arutelu selle IP jaoks',
+"currentevents" => "Jooksvad sündmused",
+"navigation"	=> "Navigeerimine",
+"errorpagetitle" => "Viga",
+'disclaimers' => 'Hoiatused',
+"disclaimerpage"   => "{{ns:4}}:Üldised_hoiatused", # lihtsalt "Hoiatused"?
+"returnto"		=> "Naase $1 juurde",
+"tagline"	=> "Allikas: {{SITENAME}}",
+"whatlinkshere"	=> "Siia viitavad artiklid",
+"help"			=> "Juhend",
+"search"		=> "Otsi",
+"searchbutton"	=> "Otsi",
+"go"		=> "Mine",
+'searcharticle'		=> "Mine",
+"history"		=> "Artikli ajalugu",
+'history_short' => 'Ajalugu',
+'info_short'    => 'Info',
+"printableversion" => "Prinditav versioon",
+"editthispage"	=> "Redigeeri seda artiklit",
+'edit' => 'Redigeeri',
+
+"delete" => "Kustuta",
+"deletethispage" => "Kustuta see artikkel",
+"undelete_short" => "Taasta $1 muudatust",
+"protect" => "Kaitse",
+"protectthispage" => "Kaitse seda artiklit",
+"unprotect" => "Ära kaitse",
+"unprotectthispage" => "Ära kaitse seda artiklit",
+"newpage" => "Uus artikkel",
+"talkpage"		=> "Selle artikli arutelu",
+'specialpage' => 'Erilehekülg',
+'personaltools' => 'Personaalsed tööriistad',
+'postcomment'   => 'Lisa kommentaar',
+"articlepage"	=> "Artiklilehekülg",
+'talk' => 'Arutelu',
+'toolbox' => 'Tööriistakast',
+"userpage" => "Kasutajalehekülg",
+"projectpage" => "Metalehekülg",
+"imagepage" => 	"Pildilehekülg",
+"viewtalkpage" => "Arutelulehekülg",
+"otherlanguages" => "Teised keeled",
+"redirectedfrom" => "(Ümber suunatud artiklist $1)",
+"lastmodifiedat"	=> "Viimane muutmine: $2, $1",
+"viewcount"		=> "Seda lehekülge on külastatud $1 korda.",
+# aegunud, võib vist eemaldada, asendada järgmisega:
+"copyright" => "Kogu tekst on kasutatav litsentsi $1 tingimustel.",
+"protectedpage" => "Kaitstud artikkel",
+"nbytes"		=> "$1 baiti",
+"ok"			=> "OK",
+"retrievedfrom" => "Välja otsitud andmebaasist \"$1\"", # parandaks sõnastust?
+'editsection'=>'redigeeri',
+'editold'=>'redigeeri',
+'toc' => 'Sisukord',
+'showtoc' => 'näita',
+'hidetoc' => 'peida',
+'thisisdeleted' => "Vaata või taasta $1?", # View or restore...
+'restorelink' => "Kustutatud muudatuste arv: $1",
+'feedlinks' => 'Sööde:', # See sõna ei meeldi, aga paremat ei tea.
+
+
+# Short words for each namespace, by default used in the 'article' tab in monobook
+'nstab-main' => 'Artikkel',
+'nstab-user' => 'Kasutaja',
+'nstab-media' => 'Meedia',
+'nstab-special' => 'Eri',
+'nstab-project' => 'Tiitelandmed', # about
+'nstab-image' => 'Pilt',
+'nstab-mediawiki' => 'Sõnum', # Message
+'nstab-template' => 'Mall',
+'nstab-help' => 'Juhend',
+'nstab-category' => 'Kategooria',
+
+# Main script and global functions
+#
+"nosuchaction"	=> "Sellist toimingut pole.",
+"nosuchactiontext" => "Wiki ei tunne sellele aadressile vastavat toimingut.",
+"nosuchspecialpage" => "Sellist erilehekülge pole.",
+"nospecialpagetext" => "Wiki ei tunne sellist erilehekülge.",
+
+
+# General errors
+#
+"error"			=> "Viga",
+"databaseerror" => "Andmebaasi viga",
+"dberrortext"	=> "Andmebaasipäringus oli süntaksiviga.
+Otsingupäring oli ebakorrektne (vaata $5) või on tarkvaras viga.
+Viimane andmebaasipäring oli:
+<blockquote><tt>$1</tt></blockquote>
+ja see kutsuti funktsioonist \"<tt>$2</tt>\".
+MySQL andis vea \"<tt>$3: $4</tt>\".",
+"dberrortextcl" => "Andmebaasipäringus oli süntaksiviga.
+Viimane andmebaasipäring oli:
+\"$1\"
+ja see kutsuti funktsioonist \"$2\".
+MySQL andis vea \"$3: $4\".",
+"noconnect"		=> "Vabandame! Wikil on tehnilisi probleeme ning ta ei saa andmebaasiserveriga $1 ühendust",
+"nodb"			=> "Andmebaasi $1 ei õnnestunud kätte saada",
+'cachederror'           => 'Järgnev lehekülg on puhverdatud koopia soovitud leheküljest ja ei pruugi seega olla värskeim.',
+"readonly"		=> "Andmebaas on hetkel kirjutuskaitse all", # 'Database locked', võimalik et siiski "Andmebaas kaitse alla"
+"enterlockreason" => "Sisesta lukustamise põhjus ning juurdepääsu taastamise ligikaudne aeg",
+"readonlytext"	=> "Andmebaas on praegu kirjutuskaitse all, tõenäoliselt andmebaasi rutiinseks hoolduseks, mille lõppedes normaalne olukord taastub.
+Administraator, kes selle kaitse alla võttis, andis järgmise selgituse:
+<p>$1",
+"missingarticle" => "Andmebaas ei leidnud lehekülje \"$1\" teksti, kuigi see oleks pidanud olema leitav.
+
+<p>Tavaliselt on selle põhjuseks vananenud sisuerinevuste- või ajaloolink leheküljele, mis on kustutatud.
+
+<p>Kui ei ole tegemist sellise juhtumiga, siis võib olla tegemist tarkvaraveaga. Palun teatage sellest administraatorile, märkides ära kasutatud aadressi.",
+"internalerror" => "Sisemine viga",
+"filecopyerror" => "Ei saanud faili \"$1\" failiks \"$2\" kopeerida.",
+"filerenameerror" => "Ei saanud faili \"$1\" failiks \"$2\" ümber nimetada.",
+"filedeleteerror" => "Faili nimega \"$1\" ei ole võimalik kustutada.",
+"filenotfound"	=> "Faili nimega \"$1\" ei leitud.",
+"unexpected"	=> "Ootamatu väärtus: \"$1\"=\"$2\".",
+"formerror"		=> "Viga: vormi ei saanud salvestada",
+"badarticleerror" => "Seda toimingut ei saa sellel leheküljel sooritada.",
+"cannotdelete"	=> "Seda lehekülge või pilti ei ole võimalik kustutada. (Võib-olla keegi teine juba kustutas selle.)",
+"badtitle"		=> "Vigane pealkiri",
+"badtitletext"	=> "Küsitud artiklipealkiri oli kas vigane, tühi või siis
+valesti viidatud keelte- või wikidevaheline pealkiri.",
+"perfdisabled" => "Vabandage! See funktsioon ajutiselt ei tööta, sest ta aeglustab andmebaasi kasutamist võimatuseni. Sellepärast täiustatakse vastavat programmi lähitulevikus. Võib-olla teete seda Teie!",
+'perfdisabledsub' => "Siin on salvestatud koopia $1-st:", # obsolete?
+'perfcached' => 'Järgnevad andmed on puhverdatud ja ei pruugi olla kõige värskemad:',
+'wrong_wfQuery_params' => "Valed parameeterid funktsioonile wfQuery()<br />
+Funktsioon: $1<br />
+Päring: $2",
+'viewsource' => 'Vaata lähteteksti',
+# problem with link: [[{{ns:4}}:Lukustatud lehekülg]]
+'protectedtext' => "See lehekülg on lukustatud, et muudatusi vältida. Selleks võib olla
+mitmesuguseid põhjusi, vaata palun artiklit
+[[{{ns:4}}:Lukustatud lehekülg]].
+Sa saad aga vaadata ja kopeerida selle lehekülje lähteteksti --",
+
+
+
+
+# Login and logout pages
+#
+"logouttitle"	=> "Väljalogimine",
+"logouttext"	=> "Te olete välja loginud.
+Võite kasutada süsteemi anonüümselt, aga ka sama või mõne teise kasutajana uuesti sisse logida.",
+	 # rookisin Vikipeedia välja, {{SITENAME}} oleks õige, aga vajab ümbersõnastamist.
+
+"welcomecreation" => "<h2>Tere tulemast, $1!</h2><p>Teie konto on loodud. Ärge unustage seada oma eelistusi.",
+
+"loginpagetitle" => "Sisselogimine",
+"yourname"		=> "Teie kasutajanimi",
+"yourpassword"	=> "Teie parool",
+"yourpasswordagain" => "Sisestage parool uuesti",
+"remembermypassword" => "Parooli meeldejätmine tulevasteks seanssideks.",
+"loginproblem"	=> "<b>Sisselogimine ei õnnestunud.</b><br />Proovige uuesti!",
+"alreadyloggedin" => "<strong>Kasutaja $1, Te olete juba sisse loginud!</strong><br />",
+
+"login"			=> "Logi sisse",
+'loginprompt'           => "{{SITENAME}} võimaldab sisselogimist vaid siis kui küpsised on lubatud.",
+"userlogin"		=> "Logi sisse",
+"logout"		=> "Logi välja",
+"userlogout"	=> "Logi välja",
+"createaccount"	=> "Loo uus konto",
+'createaccountmail'     => 'meili teel',
+"badretype"		=> "Sisestatud paroolid ei lange kokku.",
+"userexists"	=> "Sisestatud kasutajanimi on juba kasutusel. Valige uus nimi.",
+"youremail"		=> "Teie e-posti aadress*",
+"yournick"		=> "Teie hüüdnimi (allakirjutamiseks)",
+'prefs-help-realname' => '* <strong>Tegelik nimi</strong> (pole kohustuslik): kui otsustate selle avaldada, kasutatakse seda Teie tööpanuse seostamiseks Teiega.<br />',
+'prefs-help-email' => '* <strong>E-post</strong> (pole kohustuslik): Võimaldab inimestel Teiega veebisaidi kaudu ühendust võtta, ilma et Te peaksite neile oma meiliaadressi avaldama, samuti on sellest kasu, kui unustate parooli.',
+
+"loginerror"	=> "Viga sisselogimisel",
+'nocookiesnew'  => "Kasutajakonto loodi, aga sa ei ole sisse logitud, sest {{SITENAME}} kasutab kasutajate tuvastamisel küpsiseid. Sinu brauseris on küpsised keelatud. Palun sea küpsised lubatuks ja logi siis oma vastse kasutajanime ning parooliga sisse.",
+"nocookieslogin"      => "{{SITENAME}} kasutab kasutajate tuvastamisel küpsiseid. Sinu brauseris on küpsised keelatud. Palun sea küpsised lubatuks ja proovi siis uuesti.",
+"noname"		=> "Sa ei sisestanud kasutajanime lubataval kujul.",
+"loginsuccesstitle" => "Sisselogimine õnnestus",
+"loginsuccess"	=> "Te olete sisse loginud. Teie kasutajanimi on \"$1\".",
+"nosuchuser"	=> "Kasutajat nimega \"$1\" ei ole olemas. Kontrollige kirjapilti või kasutage alljärgnevat vormi uue kasutajakonto loomiseks.",
+"wrongpassword"	=> "Vale parool. Proovige uuesti.",
+"mailmypassword" => "Saada mulle meili teel uus parool",
+"passwordremindertitle" => "{{SITENAME}} - unustatud salasõna",
+"passwordremindertext" => "Keegi (tõenäoliselt Teie, IP-aadressilt $1),
+palus, et me saadaksime Teile uue parooli süsteemi sisselogimiseks.
+Kasutaja \"$2\" parool on nüüd \"$3\".
+Võiksid sisse logida ja selle ajutise parooli ära muuta.
+
+Sinu {{SITENAME}}.",
+"noemail"		=> "Kasutaja \"$1\" meiliaadressi meil kahjuks pole.",
+"passwordsent"	=> "Uus parool on saadetud kasutaja \"$1\" registreeritud meiliaadressil.
+Pärast parooli saamist logige palun sisse.",
+'mailerror' => "Viga kirja saatmisel: $1",
+'acct_creation_throttle_hit' => 'Vabandame, aga te olete loonud juba $1 kontot. Rohkem te ei saa.',
+
+
+# Edit page toolbar
+'bold_sample'=>'Rasvane kiri',
+'bold_tip'=>'Rasvane kiri',
+'italic_sample'=>'Kursiiv',
+'italic_tip'=>'Kursiiv',
+'link_sample'=>'Lingitav pealkiri',
+'link_tip'=>'Siselink',
+'extlink_sample'=>'http://www.välislink.com Lingi nimi',
+'extlink_tip'=>'Välislink (ära unusta prefiksit http://)',
+'headline_sample'=>'Pealkiri',
+'headline_tip'=>'Teise taseme pealkiri',
+'math_sample'=>'Sisesta valem siia',
+'math_tip'=>'Matemaatiline tekst (LaTeX)',
+'nowiki_sample'=>'Sisesta formaatimata tekst',
+'nowiki_tip'=>'Ignoreeri viki vormindust',
+'image_sample'=>'Näidis.jpg',
+'image_tip'=>'Pilt',
+'media_sample'=>'Näidis.mp3',
+'media_tip'=>'Meediafail',
+'sig_tip'=>'Sinu allkiri koos ajatempliga',
+'hr_tip'=>'Horisontaaljoon',
+
+# Groups
+"grouppage-sysop" => 'Project:administraatorid',
+
+# Edit pages
+#
+"summary"		=> "Resümee",
+'subject'               => 'Pealkiri',
+"minoredit"		=> "See on pisiparandus",
+"watchthis"		=> "Jälgi seda artiklit",
+"savearticle"	=> "Salvesta",
+"preview"		=> "Vaata",
+"showpreview"	=> "Näita eelvaadet",
+"blockedtitle"	=> "Kasutaja on blokeeritud",
+"blockedtext"	=> "Teie kasutajanime või IP-aadressi blokeeris $1.
+Tema põhjendus on järgmine:<br />''$2''<p>Küsimuse arutamiseks võite pöörduda $1 või mõne teise
+[[{{MediaWiki:grouppage-sysop}}|administraatori]] poole.
+
+Pange tähele, et Te ei saa sellele kasutajale teadet saata, kui Te pole registreerinud oma [[Special:Eelistused|eelistuste lehel]] kehtivat e-posti aadressi.
+
+Teie IP on $3. Lisage see aadress kõigile järelpärimistele, mida kavatsete teha.",
+
+'whitelistedittitle' => 'Toimetamiseks on vaja sisse logida',
+'whitelistedittext' => 'Lehekülgede toimetamiseks peate [[Special:Userlogin|sisse logima]].',
+'whitelistreadtitle' => 'Lugemiseks peate olema sisse logitud',
+'whitelistreadtext' => 'Lehekülgede lugemiseks peate [[Special:Userlogin|sisse logima]].',
+'whitelistacctitle' => 'Teil pole õigust kasutajakontot luua',
+'whitelistacctext' => 'Et selles Vikis kontosid luua, peate olema [[Special:Userlogin|sisse logitud]] ja omama vastavaid õigusi.',
+
+'loginreqtitle' => 'Vajalik on sisselogimine',
+'loginreqlink' => 'sisse logima',
+'loginreqpagetext'  => 'Lehekülgede vaatamiseks peate $1.',
+'accmailtitle' => 'Saadeti parool.',
+'accmailtext' => "Kasutaja '$1' parool saadeti aadressile $2.",
+
+"newarticle"	=> "(Uus)",
+# problem with link: [[{{ns:4}}:Juhend|juhendit]]
+"newarticletext" =>
+"Seda lehekülge veel ei ole.
+Lehekülje loomiseks hakake kirjutama all olevasse boksi
+(lisainfo saamiseks vaadake [[{{ns:4}}:Juhend|juhendit]]).
+Kui sattusite siia kogemata, klõpsake lihtsalt brauseri ''back''-nupule.",
+"anontalkpagetext" => "---- ''See on arutelulehekülg anonüümse kasutaja kohta, kes ei ole loonud kontot või ei kasuta seda. Sellepärast tuleb meil kasutaja identifitseerimiseks kasutada tema IP-aadressi. See IP-aadress võib olla mitmele kasutajale ühine. Kui olete anonüümne kasutaja ning leiate, et kommentaarid sellel leheküljel ei ole mõeldud Teile, siis palun [[Special:Userlogin|looge konto või logige sisse]], et edaspidi arusaamatusi vältida.''",
+"noarticletext" => "(See lehekülg on praegu tühi)",
+'clearyourcache' => "'''Märkus:''' Pärast salvestamist pead sa muudatuste nägemiseks oma brauseri puhvri tühjendama: '''Mozilla:''' ''ctrl-shift-r'', '''IE:''' ''ctrl-f5'', '''Safari:''' ''cmd-shift-r'', '''Konqueror''' ''f5''.",
+'usercssjsyoucanpreview' => "<strong>Vihje:</strong> Kasuta nuppu 'Näita eelvaadet' oma uue css/js testimiseks enne salvestamist.",
+'usercsspreview' => "'''Ärge unustage, et seda versiooni teie isiklikust stiililehest pole veel salvestatud!'''",
+'userjspreview' => "'''Ärge unustage, et see versioon teie isiklikust javascriptist on alles salvestamata!'''",
+
+"updated"		=> "(Värskendatud)",
+"note"			=> "<strong>Meeldetuletus:</strong>",
+"previewnote"	=> "Ärge unustage, et see versioon ei ole veel salvestatud!",
+"previewconflict" => "See eelvaade näitab, kuidas ülemises toimetuskastis olev tekst hakkab välja nägema, kui otsustate salvestada.", ## redaktoriboks?
+"editing"		=> "Redigeerimisel on $1",
+'editinguser'		=> "Redigeerimisel on $1",
+"editconflict"	=> "Redigeerimiskonflikt: $1",
+"explainconflict" => "Keegi teine on muutnud seda lehekülge pärast seda, kui Teie seda redigeerima hakkasite.
+Ülemine toimetuskast sisaldab teksti viimast versiooni.
+Teie muudatused on alumises kastis.
+Teil tuleb need viimasesse versiooni üle viia.
+Kui Te klõpsate nupule
+ \"Salvesta\", siis salvestub <b>ainult</b> ülemises toimetuskastis olev tekst.<br />",
+"yourtext"		=> "Teie tekst",
+"storedversion" => "Salvestatud redaktsioon",
+"editingold"	=> "<strong>ETTEVAATUST! Te redigeerite praegu selle lehekülje vana redaktsiooni.
+Kui Te selle salvestate, siis lähevad kõik vahepealsed muudatused kaduma.</strong>",
+"yourdiff"		=> "Erinevused",
+/*"copyrightwarning" => "Pidage silmas, et kõik kaastööd loetakse avaldatuks vastavalt GNU Vaba Dokumentatsiooni Litsentsile
+(Üksikasjad on leheküljel $1).
+Kui Te ei soovi, et Teie poolt kirjutatut halastamatult redigeeritakse ja omal äranägemisel kasutatakse, siis ärge seda siia salvestage.<br />
+Te kinnitate ka, et kirjutasite selle ise või võtsite selle kopeerimiskitsenduseta allikast.
+<strong>ÄRGE SAATKE AUTORIÕIGUSTEGA KAITSTUD MATERJALI ILMA LOATA!</strong>", # Vikipeedia võtsin välja, {{SITENAME}} paigutada kuidagi?*/
+"longpagewarning" => "<strong>HOIATUS: Selle lehekülje pikkus ületab $1 kilobaiti. Mõne brauseri puhul valmistab raskusi juba 32-le kilobaidile läheneva pikkusega lehekülgede redigeerimine. Palun kaaluge selle lehekülje sisu jaotamist lühemate lehekülgede vahel.</strong>",
+"readonlywarning" => "<strong>HOIATUS: Andmebaas on lukustatud hooldustöödeks, nii et praegu ei saa parandusi salvestada. Võite teksti alal hoida tekstifailina ning salvestada hiljem.</strong>",
+# problem with link: [[Project:Juhtnöörid_kaitstud_lehekülje_kohta]]
+"protectedpagewarning" => "<strong>HOIATUS:  See lehekülg on lukustatud, nii et seda saavad redigeerida ainult süsteemi operaatori õigustega kasutajad. Järgige juhtnööre leheküljel
+[[Project:Juhtnöörid_kaitstud_lehekülje_kohta]]</strong>.",
+
+# History pages
+#
+"revhistory"	=> "Redigeerimislugu",
+"nohistory"		=> "Sellel leheküljel ei ole eelmisi redaktsioone.",
+"revnotfound"	=> "Redaktsiooni ei leitud",
+"revnotfoundtext" => "Teie poolt päritud vana redaktsiooni ei leitud.
+Palun kontrollige aadressi, millel Te seda lehekülge leida püüdsite.",
+"loadhist"		=> "Lehekülje ajaloo laadimine",
+"currentrev"	=> "Viimane redaktsioon",
+"revisionasof"	=> "Redaktsioon: $1",
+"cur"			=> "viim",
+"next"			=> "järg",
+"last"			=> "eel",
+"orig"			=> "orig",
+"histlegend"	=> "Märgi versioonid, mida tahad võrrelda ja vajuta võrdlemisnupule.
+Legend: (viim) = erinevused võrreldes viimase redaktsiooniga,
+(eel) = erinevused võrreldes eelmise redaktsiooniga, P = pisimuudatus",
+# Diffs
+#
+"difference"	=> "(Erinevused redaktsioonide vahel)",
+"loadingrev"	=> "Redaktsiooni laadimine erinevustelehekülje jaoks",
+"lineno"		=> "Rida $1:",
+"editcurrent"	=> "Redigeeri selle lehekülje viimast redaktsiooni",
+'selectnewerversionfordiff' => 'Vali võrdlemiseks uuem versioon',
+'selectolderversionfordiff' => 'Vali võrdlemiseks vanem versioon',
+'compareselectedversions' => 'Võrdle valitud versioone',
+# Search results
+#
+"searchresults" => "Otsingu tulemid",
+"searchresulttext" => "Lisainfot otsimise kohta vaata $1.",
+"searchsubtitle"	=> "Päring \"[[:$1]]\"",
+"searchsubtitleinvalid"	=> "Päring \"$1\"",
+"badquery"		=> "Vigane päring",
+"badquerytext"	=> "Teie päringut ei saanud menetleda.
+Tõenäoliselt püüdsite otsida vähem kui kolme-tähelist sõna.
+Selline otsing ei ole praegu veel võimalik. Võib ka olla,
+et päring oli vigane, nt. \"koer and and kass\" ei ole lubatav.
+Palun proovige teistsugust päringut.",
+"matchtotals"	=> "Otsitud sõna \"$1\" leidub $2 artikli pealkirjas
+ning $3 artikli tekstis.",
+"titlematches"	=> "Tabamused artiklipealkirjades",
+"notitlematches" => "Artiklipealkirjades tabamusi ei ole",
+"textmatches"	=> "Tabamused artiklitekstides",
+"notextmatches"	=> "Artiklitekstides tabamusi ei ole",
+"prevn"			=> "eelmised $1",
+"nextn"			=> "järgmised $1",
+"viewprevnext"	=> "Näita ($1) ($2) ($3).",
+"showingresults" => "Allpool näitame <b>$1</b> tulemit alates tulemist #<b>$2</b>.",
+"nonefound"		=> "<strong>Märkus</strong>: otsingute ebaõnnestumise sagedaseks põhjuseks on asjaolu,
+et väga sageli esinevaid sõnu ei võta süsteem otsimisel arvesse. Teine põhjus võib olla
+mitme otsingusõna kasutamine (tulemusena ilmuvad ainult leheküljed, mis sisaldavad kõiki otsingusõnu).",
+"powersearch" => "Otsi",
+"powersearchtext" => "
+Otsing nimeruumidest :<br />
+$1<br />
+$2 Loetle ümbersuunamisi &nbsp; Otsi $3 $9",
+
+
+# Preferences page
+#
+"preferences"	=> "Teie eelistused",
+"prefsnologin" => "Te ei ole sisse loginud",
+"prefsnologintext"	=> "Et oma eelistusi seada, [[Special:Userlogin|tuleb Teil]]
+sisse logida.",
+"prefsreset"	=> "Teie eelistused on arvutimälu järgi taastatud.",
+"qbsettings"	=> "Kiirriba sätted",
+'qbsettings-none'	=> 'Ei_ole',
+'qbsettings-fixedleft'	=> 'Püsivalt_vasakul',
+'qbsettings-fixedright'	=> 'Püsivalt paremal',
+'qbsettings-floatingleft'	=> 'Ujuvalt vasakul',
+"changepassword" => "Muuda parool",
+"skin"			=> "Nahk",
+"math"			=> "Valemite näitamine",
+"dateformat"            => "Kuupäeva formaat",
+'datedefault' => 'Eelistus puudub',
+"math_failure"		=> "Arusaamatu süntaks",
+"math_unknown_error"	=> "Tundmatu viga",
+"math_unknown_function"	=> "Tundmatu funktsioon",
+"math_lexing_error"	=> "Väljalugemisviga",
+"math_syntax_error"	=> "Süntaksiviga",
+"saveprefs"		=> "Salvesta eelistused",
+"resetprefs"	=> "Lähtesta eelistused",
+"oldpassword"	=> "Vana parool",
+"newpassword"	=> "Uus parool",
+"retypenew"		=> "Sisestage uus parool uuesti",
+"textboxsize"	=> "Redaktoriboksi suurus",
+"rows"			=> "Ridade arv",
+"columns"		=> "Veergude arv",
+"searchresultshead" => "Otsingutulemite sätted",
+"resultsperpage" => "Tulemeid leheküljel",
+"contextlines"	=> "Ridu tulemis",
+"contextchars"	=> "Konteksti pikkus real",
+"stubthreshold" => "Nupu näitamise lävi",
+"recentchangescount" => "Pealkirjade arv viimastes muudatustes",
+"savedprefs"	=> "Teie eelistused on salvestatud.",
+"timezonetext"	=> "Kohaliku aja ja serveri aja (maailmaaja) vahe tundides.",
+"localtime"	=> "Kohalik aeg",
+"timezoneoffset" => "Ajavahe",
+
+
+# Recent changes
+#
+"changes" => "muudatused",
+"recentchanges" => "Viimased muudatused",
+"recentchangestext" => "Jälgige sellel leheküljel viimaseid muudatusi.",
+"rcnote"		=> "Allpool on esitatud viimased <strong>$1</strong> muudatust viimase <strong>$2</strong> päeva jooksul.",
+"rcnotefrom"	=> "Allpool on esitatud muudatused alates <b>$2</b> (näidatakse kuni <b>$1</b> muudatust).",
+"rclistfrom"	=> "Näita muudatusi alates $1",
+"rclinks"		=> "Näita viimast $1 muudatust viimase $2 päeva jooksul.",
+"diff"			=> "erin",
+"hist"			=> "ajal",
+"hide"			=> "peida",
+"show"			=> "näita",
+"minoreditletter" => "P",
+"newpageletter" => "U",
+
+# Upload
+#
+"upload"		=> "Faili üleslaadimine",
+"uploadbtn"		=> "Üleslaadimine",
+"reupload"		=> "Uuesti üleslaadimine",
+"reuploaddesc"	=> "Tagasi üleslaadimise vormi juurde.",
+"uploadnologin" => "sisse logimata",
+"uploadnologintext"	=> "Kui Te soovite faile üles laadida, peate [[Special:Userlogin|sisse logima]].",
+"uploaderror"	=> "Viga üleslaadimisel",
+# problem with link: [[{{ns:4}}:Image_use_policy|piltide kasutamise korda]]
+"uploadtext"	=> "<strong>STOPP!</strong> Enne kui sooritad üleslaadimise,
+peaksid tagama, et see järgib siinset [[{{ns:4}}:Image_use_policy|piltide kasutamise korda]].
+
+Et näha või leida eelnevalt üleslaetud pilte,
+mine vaata [[Special:Imagelist|piltide nimekirja]].
+Üleslaadimised ning kustutamised logitakse [[Special:Log/upload|üleslaadimise logis]].
+
+Järgneva vormi abil saad laadida üles uusi pilte
+oma artiklite illustreerimiseks.
+Enamikul brauseritest, näed nuppu \"Browse...\", mis viib sind
+sinu operatsioonisüsteemi standardsesse failiavamisaknasse.
+Faili valimisel sisestatakse selle faili nimi tekstiväljale
+nupu kõrval.
+Samuti pead märgistama kastikese, kinnitades sellega,
+et sa ei riku seda faili üleslaadides kellegi autoriõigusi.
+Üleslaadimise lõpuleviimiseks vajuta nupule \"Üleslaadimine\".
+See võib võtta pisut aega, eriti kui teil on aeglane internetiühendus.
+
+Eelistatud formaatideks on fotode puhul JPEG , joonistuste
+ja ikoonilaadsete piltide puhul PNG, helide jaoks aga OGG.
+Nimeta oma failid palun nõnda, et nad kirjeldaksid arusaadaval moel faili sisu, see aitab segadusi vältida.
+Pildi lisamiseks artiklile, kasuta linki kujul:
+<b><nowiki>[[</nowiki>{{ns:image}}<nowiki>:pilt.jpg]]</nowiki></b> või <b><nowiki>[[</nowiki>{{ns:image}}<nowiki>:pilt.png|alt. tekst]]</nowiki></b>.
+Helifaili puhul: <b><nowiki>[[</nowiki>{{ns:media}}<nowiki>:fail.ogg]]</nowiki></b>.
+
+Pane tähele, et nagu ka ülejäänud siinsete lehekülgede puhul,
+võivad teised sinu poolt laetud faile saidi huvides
+muuta või kustutada ning juhul kui sa süsteemi kuritarvitad
+võidakse sinu ligipääs sulgeda.",
+"uploadlog"		=> "üleslaadimise logi",
+"uploadlogpage" => "Upload_log",
+"uploadlogpagetext" => "Järgnev on nimekiri viimastest üleslaadimistest.
+Kellaajad on märgitud serveri ajaarvamise järele (UTC).
+<ul>
+</ul>",
+"filename"		=> "Faili nimi",
+"filedesc"		=> "Lühikirjeldus",
+"copyrightpage" => "{{ns:4}}:Autoriõigused",
+"copyrightpagename" => "{{SITENAME}} ja autoriõigused",
+"uploadedfiles"	=> "Üleslaetud failid",
+"minlength"		=> "Pildi nimi peab sisaldama vähemalt kolme tähte.",
+"badfilename"	=> "Pildi nimi on muudetud. Uus nimi on \"$1\".",
+"badfiletype"	=> "\".$1\" ei ole soovitatav formaat.",
+"largefile"		=> "Soovitame mitte saata faile, mille suurus ületab 100 kilobaiti.",
+"successfulupload" => "Üleslaadimine õnnestus",
+"fileuploaded"	=> "Fail nimega \"$1\" õnnestus üles laadida.
+Palun järgi seda linki: ($2). See viib su kirjelduslehele, et saaksid esita
+asjassepuutuvad andmed faili kohta: kust on ta pärit, millal
+ja kelle poolt ta loodi, jne.",
+"uploadwarning" => "Hoiatus üleslaadimise asjus",
+"savefile"		=> "Salvesta fail",
+"uploadedimage" => "laadisin üles \"[[$1]]\"",
+
+# Image list
+#
+"imagelist"		=> "Piltide loend",
+"imagelisttext"	=> "Piltide arv järgnevas loendis: $1. Sorteeritud $2.", # $2 -- nt. "kuupäeva järgi".
+"getimagelist"	=> "hangin piltide nimekirja",
+"ilsubmit"		=> "Otsi",
+"showlast"		=> "Näita viimast $1 pilti sorteerituna $2.", # $2 nt. "nime järgi"
+"byname"		=> "nime järgi",
+"bydate"		=> "kuupäeva järgi",
+"bysize"		=> "suuruse järgi",
+"imgdelete"		=> "del",
+"imgdesc"		=> "kirj",
+"imglegend"		=> "Legend: (kirj) = näita/redigeeri pildi kirjeldust.",
+"imghistory"	=> "Pildi ajalugu",
+"revertimg"		=> "taas",
+"deleteimg"		=> "del",
+"deleteimgcompletely"		=> "del",
+"imghistlegend" => "Legend: (viim) = see on pildi viimane versioon, (del) = kustuta
+see vana versioon, (taas) = taasta see vana versioon.
+<br /><i>Klõpsa kuupäevale, et näha tookord laetud pilti.</i>.",
+"imagelinks"	=> "Pildilingid",
+"linkstoimage"	=> "Sellele pildile viitavad järgmised leheküljed:",
+"nolinkstoimage" => "Selle pildile ei viita ükski lehekülg.",
+
+# Statistics
+#
+"statistics"	=> "Statistika",
+"sitestats"		=> "Saidi statistika",
+"userstats"		=> "Kasutaja statistika",
+"sitestatstext" => "Lehekülgede koguarv andmebaasis: <b>$1</b>.
+
+See arv hõlmab ka arutelulehekülgi, abiartikleid Vikipeedia kohta, väga lühikesi lehekülgi (nuppe), ümbersuunamislehekülgi ning muid lehekülgi, millel tõenäoliselt ei ole entsüklopeediaartikleid. Ilma neid arvestamata on Vikipeedias praegu <b>$2</b> lehekülge, mida võib pidada artikliteks.
+
+Alates uuele programmile üleminekust 18. detsembril 2003 on lehekülgi vaadatud kokku <b>$3</b> korda ja redigeeritud kokku <b>$4</b> korda. Seega on lehekülje kohta tehtud <b>$5</b> parandust ja iga paranduse kohta tuleb <b>$5</b> vaatamist.", # viimase lausepoole võiks kohalikes seadetes eemaldada,
+  # sest see kipub mingil põhjusel olema null, tõenäoliselt praegu külastusi lihtsalt kokku ei loeta.
+  # enamasti on arvud.
+  # Võiks veel ainsust silmas pidades ühtteist ümber sõnastada, aga see esineb tõesti üliharva.
+"userstatstext" => "Registreeritud kasutajate arv: <b>$1</b>.
+Administraatori staatuses kasutajaid: <b>$2</b> (vt $3).",
+# Maintenance Page
+#
+
+
+# Miscellaneous special pages
+#
+"lonelypages"	=> "Üksildased artiklid",
+"unusedimages"	=> "Kasutamata pildid",
+"popularpages"	=> "Populaarsed leheküljed",
+"nviews"		=> "Külastuste arv: $1",
+"wantedpages"	=> "Kõige oodatumad artiklid",
+"nlinks"		=> "Linkide arv: $1",
+"allpages"		=> "Kõik artiklid",
+"randompage"	=> "Juhuslik artikkel",
+"shortpages"	=> "Lühikesed artiklid",
+"longpages"		=> "Pikad artiklid",
+"listusers"		=> "Kasutajad",
+"specialpages"	=> "Erileheküljed",
+"spheading"		=> "Erileheküljed",
+"recentchangeslinked" => "Seotud muudatused",
+"rclsub"		=> "(lehekülgedel, millele \"$1\" viitab)", #
+"newpages"		=> "Uued leheküljed",
+'ancientpages'          => 'Vanimad leheküljed',
+"intl"		=> "Keeltevahelised lingid",
+'move' => 'Teisalda',
+"movethispage"	=> "Teisalda lehekülg",
+"unusedimagestext" => "<p>Pange palun tähele, et teised
+veebisaidid, nagu nt. rahvusvahelised Vikipeediad, võivad
+linkida lehekülgedele otselinginga ja seega võivad
+siin esitatud pildid olla ikkagi aktiivses kasutuses.",
+"booksources"	=> "Raamatud",
+"booksourcetext" => "All on esitatud linkide loend teistesse
+saitidesse, mis müüvad uusi ja kasutatud raamatuid ning võivad
+omada lisainfot otsitavate raamatute kohta.
+{{ns:4}} ei ole nende ettevõtmistega seotud ja seda nimekirja
+ei tohiks konstrueerida reklaami tegemiseks.",
+
+# Email this user
+#
+"emailsubject"	=> "Subject",
+"emailmessage"	=> "Sõnum",
+"emailsend"		=> "Saada",
+"emailsent"		=> "E-post saadetud",
+"emailsenttext" => "Teie sõnum on saadetud.",
+
+# Watchlist
+#
+"watchlist"		=> "Minu jälgimisloend",
+"mywatchlist"		=> "Minu jälgimisloend",
+"nowatchlist"	=> "Teie jälgimisloend on tühi.",
+"watchnologin"	=> "Ei ole sisse loginud",
+"watchnologintext"	=> "Jälgimisloendi muutmiseks peate [[Special:Userlogin|sisse logima]].",
+"addedwatch"	=> "Lisatud jälgimisloendile",
+"addedwatchtext" => "Lehekülg \"$1\" on lisatud Teie [[Special:Watchlist|jälgimisloendile]].
+Edasised muudatused sellel lehel ja sellega seotud aruteluküljel reastatakse siin
+ning [[Special:Recentchanges||viimaste muudatuste lehel]] tuuakse ta esile
+<b>rasvase</b> kirja abil.
+
+Kui tahad seda lehte hiljem jälgimisloendist eemaldada, klõpsa päisenupule \"Lõpeta jälgimine\".",
+"removedwatch"	=> "Jälgimisloendist eemaldatud",
+"removedwatchtext" => "Lehekülg pealkirjaga \"$1\" on Teie jälgimisloendist eemaldatud.",
+'watch' => 'Jälgi',
+"watchthispage"	=> "Jälgi seda lehekülge",
+"unwatchthispage" => "Lõpeta jälgimine",
+"notanarticle"	=> "Pole artikkel",
+
+# Delete/protect/revert
+#
+"deletepage"	=> "Kustuta lehekülg",
+"confirm"		=> "Kinnita",
+"confirmdelete" => "Kinnita kustutamine",
+"deletesub"		=> "(Kustutan lehekülje \"$1\")",
+"confirmdeletetext" => "Sa oled andmebaasist jäädavalt kustutamas lehte või pilti
+koos kogu tema ajalooga. Palud kinnita, et sa tahad seda tõepoolest teha, et
+sa mõistad tagajärgi ja et sinu tegevus on kooskõlas siinse
+[[{{MediaWiki:policy-url}}|sisekorraga]].", # Project:Policy tuleks ka tõlkida
+'policy-url' => 'Project:policy',
+"actioncomplete" => "Toiming sooritatud",
+"deletedtext"	=> "\"$1\" on kustutatud.
+Viimaste kustutuste loendit näed siit: $2.",
+"deletedarticle" => "\"$1\" kustutatud",
+"dellogpage"	=> "Kustutatud_leheküljed",
+"dellogpagetext" => "Allpool on esitatud nimekiri viimastest kustutamistest.
+Kõik toodud kellaajad järgivad serveriaega (UTC).
+<ul>
+</ul>",
+"deletionlog"	=> "Kustutatud leheküljed",
+"reverted"		=> "Pöörduti tagasi varasemale versioonile",
+"deletecomment"	=> "Kustutamise põhjus",
+"imagereverted" => "Varasemale versioonile tagasipöördumine õnnestus.",
+"rollback"		=> "Pöördu varasemale versioonile",
+"rollbacklink"	=> "taasta varasem versioon",
+"cantrollback"	=> "Ei saa muudatusi tagasi pöörata; viimane kaastööline on artikli ainus autor.",
+"revertpage"	=> "Pöörduti tagasi viimasele muudatusele, mille tegi $1",
+
+# Undelete
+"undelete" => "Taasta kustutatud lehekülg",
+"undeletepage" => "Kustutatud lehekülgede vaatamine ja taastamine",
+"undeletepagetext" => "Järgnevad leheküljed on kustutatud, kuis arhiivis
+veel olemas, neid saab taastada. Arhiivi sisu vistatakse aegajalt üle parda.",
+"undeletearticle" => "Taasta kustutatud artikkel",
+"undeleterevisions" => "Arhiveeritud versioone on $1.",
+"undeletehistory" => "Kui taastate lehekülje, taastuvad kõik versioonid artikli
+ajaloona. Kui vahepeal on loodud uus samanimeline lehekülg, ilmuvad taastatud
+versioonid varasema ajaloona. Kehtivat versiooni automaatselt välja ei vahetata.",
+"undeleterevision" => "Kustutatud versioon seisuga $1",
+"undeletebtn" => "Taasta!",
+"undeletedarticle" => "\"$1\" taastatud",
+
+# Contributions
+#
+"contributions"	=> "Kasutaja kaastööd",
+"mycontris" => "Minu kaastöö",
+"contribsub2"	=> "Kasutaja \"$1 ($2)\" jaoks",
+"nocontribs"	=> "Antud kriteeriumile vastavaid muudatusi ei leidnud.",
+"ucnote"		=> "Esitatakse selle kasutaja tehtud viimased <b>$1</b> muudatust viimase <b>$2</b> päeva jooksul.",
+"uclinks"		=> "Näita viimast $1 muudatust; viimase $2 päeva jooksul.",
+"uctop"		=> " (üles)" ,
+
+# What links here
+#
+"whatlinkshere"	=> "Viidad siia",
+"notargettitle" => "Puudub sihtlehekülg",
+"notargettext"	=> "Sa ei ole esitanud sihtlehekülge ega kasutajat, kelle kallal seda operatsiooni toime panna.",
+"linklistsub"	=> "(Linkide loend)",
+"linkshere"		=> "Siia viitavad järgmised leheküljed:",
+"nolinkshere"	=> "Siia ei viita ükski lehekülg.",
+"isredirect"	=> "ümbersuunamislehekülg",
+
+# Block/unblock IP
+#
+"blockip"		=> "Blokeeri IP-aadress",
+"blockiptext"	=> "Use the form below to block write access
+from a specific IP address.
+This should be done only only to prevent vandalism, and in
+accordance with [[{{MediaWiki:policy-url}}|{{SITENAME}} policy]].
+Fill in a specific reason below (for example, citing particular
+pages that were vandalized).",
+"ipaddress"		=> "IP-aadress",
+"ipbreason"		=> "Põhjus",
+"ipbsubmit"		=> "Blokeeri see aadress",
+"badipaddress"	=> "The IP address is badly formed.",
+"blockipsuccesssub" => "Block succeeded",
+"blockipsuccesstext" => "IP-aadress \"$1\" on blokeeritud.
+<br />See [[Special:Ipblocklist|IP block list]] to review blocks.",
+"unblockip"		=> "Unblock IP address",
+"unblockiptext"	=> "Use the form below to restore write access
+to a previously blocked IP address.",
+"ipusubmit"		=> "Unblock this address",
+"ipblocklist"	=> "Blokeeritud IP-aadresside loend",
+"blocklistline"	=> "$1, $2 blocked $3 ($4)",
+"blocklink"		=> "blokeeri",
+"unblocklink"	=> "unblock",
+"contribslink"	=> "contribs",
+
+# Developer tools
+#
+"lockdb"		=> "Lukusta andmebaas",
+"unlockdb"		=> "Tee andmebaas lukust lahti",
+"lockbtn"		=> "Võta andmebaas kirjutuskaitse alla",
+"unlockbtn"		=> "Taasta andmebaasi kirjutuspääs",
+"locknoconfirm" => "You did not check the confirmation box.",
+"lockdbsuccesssub" => "Andmebaas kirjutuskaitse all",
+"unlockdbsuccesssub" => "Kirjutuspääs taastatud",
+"lockdbsuccesstext" => "Andmebaas on nüüd kirjutuskaitse all.
+<br />Kui Teie hooldustöö on läbi, ärge unustage kirjutuspääsu taastada!",
+"unlockdbsuccesstext" => "Andmebaasi kirjutuspääs on taastatud.",
+
+# Move page
+#
+"movepage"		=> "Teisalda artikkel",
+"movepagetext"	=> "Using the form below will rename a page, moving all
+of its history to the new name.
+The old title will become a redirect page to the new title.
+Links to the old page title will not be changed; be sure to
+check for double or broken redirects.
+You are responsible for making sure that links continue to
+point where they are supposed to go.
+
+Note that the page will '''not''' be moved if there is already
+a page at the new title, unless it is empty or a redirect and has no
+past edit history. This means that you can rename a page back to where
+it was just renamed from if you make a mistake, and you cannot overwrite
+an existing page.
+
+<b>ETTEVAATUST!</b>
+Võimalik, et olete tegemas ootamatut ning drastilist muudatust väga loetavasse artiklisse;
+enne muudatuse tegemist mõelge palun järele, milised võivad olla selle tagajärjed.",
+"movepagetalktext" => "Koos artiklileheküljega teisaldatakse automaatselt ka arutelulehekülg, '''välja arvatud juhtudel, kui:'''
+*liigutate lehekülge ühest nimeruumist teise,
+*uue nime all on juba olemas mittetühi arutelulehekülg või
+*jätate alumise kastikese märgistamata.
+
+Neil juhtudel teisaldage arutelulehekülg soovi korral eraldi või ühendage ta omal käel uue aruteluleheküljega.",
+"movearticle"	=> "Teisalda artiklilehekülg",
+"movenologin"	=> "Te ei ole sisse loginud",
+"movenologintext" => "Et lehekülge teisaldada, peate registreeruma
+kasutajaks ja [[Special:Userlogin|sisse logima]]",
+"newtitle"		=> "Uue pealkirja alla",
+"movepagebtn"	=> "Teisalda artikkel",
+"pagemovedsub"	=> "Artikkel on teisaldatud",
+"pagemovedtext" => "Artikkel \"[[$1]]\" on teisaldatud pealkirja \"[[$2]]\" alla.",
+"articleexists" => "Selle nimega artikkel on juba olemas või pole valitud nimi lubatav. Palun valige uus nimi.",
+"talkexists"	=> "Artikkel on teisaldatud, kuid arutelulehekülge ei saanud teisaldada, sest uue nime all on arutelulehekülg juba olemas. Palun ühendage aruteluleheküljed ise.",
+"movedto"		=> "Teisaldatud pealkirja alla:",
+"movetalk"		=> "Teisalda ka \"arutelu\", kui saab.",
+"talkpagemoved" => "Ka vastav arutelulehekülg on teisaldatud.",
+"talkpagenotmoved" => "Vastav arutelulehekülg jäi teisaldamata.",
+ #Math
+ 'mw_math_png' => "Alati PNG",
+ 'mw_math_simple' => "Kui väga lihtne, siis HTML, muidu PNG",
+ 'mw_math_html' => "Võimaluse korral HTML, muidu PNG",
+ 'mw_math_source' => "Säilitada TeX (tekstibrauserite puhul)",
+ 'mw_math_modern' => "Soovitatav moodsate brauserite puhul",
+ 'mw_math_mathml' => 'MathML',
+
+);
+
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesEu.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesEu.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesEu.php	(revision 1280)
@@ -0,0 +1,1943 @@
+<?php
+/** Basque (Euskara)
+ *
+ * @addtogroup Language
+ */
+
+$skinNames = array(
+	'standard'     => 'Lehenetsia',
+	'nostalgia'    => 'Nostalgia',
+	'cologneblue'  => 'Cologne Blue',
+	'smarty'       => 'Paddington',
+	'montparnasse' => 'Montparnasse'
+);
+$namespaceNames = array(
+	NS_MEDIA          => 'Media',
+	NS_SPECIAL        => 'Aparteko',
+	NS_MAIN           => '',
+	NS_TALK           => 'Eztabaida',
+	NS_USER           => 'Lankide',
+	NS_USER_TALK      => 'Lankide_eztabaida',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK   => '$1_eztabaida',
+	NS_IMAGE          => 'Irudi',
+	NS_IMAGE_TALK     => 'Irudi_eztabaida',
+	NS_MEDIAWIKI      => 'MediaWiki',
+	NS_MEDIAWIKI_TALK => 'MediaWiki_eztabaida',
+	NS_TEMPLATE       => 'Txantiloi',
+	NS_TEMPLATE_TALK  => 'Txantiloi_eztabaida',
+	NS_HELP           => 'Laguntza',
+	NS_HELP_TALK      => 'Laguntza_eztabaida',
+	NS_CATEGORY       => 'Kategoria',
+	NS_CATEGORY_TALK  => 'Kategoria_eztabaida',
+);
+
+$messages = array(
+'tog-underline' => 'Loturak azpimarratu:',
+'tog-highlightbroken' => 'Lotura hautsiak <a href="" class="new">horrela</a> erakutsi (bestela, honela<a href="" class="internal">?</a>).',
+'tog-justify'	=> 'Paragrafoak justifikatu',
+'tog-hideminor' => 'Azken aldaketetan aldaketa txikiak ezkutatu',
+'tog-extendwatchlist' => 'Jarraipen zerrenda zabaldu aldaketa guztiak ikusteko',
+'tog-usenewrc' => 'Hobetutako azken aldaketak (JavaScript)',
+'tog-numberheadings' => 'Goiburukoak automatikoki zenbakitu',
+'tog-showtoolbar'		=> 'Aldaketen tresna-barra erakutsi (JavaScript)',
+'tog-editondblclick' => 'Klik bikoitzaren bitartez orrialdeak aldatu (JavaScript)',
+'tog-editsection'		=> 'Atalak [aldatu] loturen bitartez aldatzeko aukera gaitu',
+'tog-editsectiononrightclick'	=> 'Atalen izenburuetan klik eginez atala<br />aldatzea gaitu (JavaScript)',
+'tog-showtoc'			=> 'Edukien taula erakutsi (3 goiburukotik gorako orrialdeentzako)',
+'tog-rememberpassword' => 'Nire saioa ordenagailu honetan gogoratu',
+'tog-editwidth' => 'Zabalera osoko aldaketa koadroa',
+'tog-watchcreations' => 'Sortzen ditudan orrialdeak jarraipen zerrendara gehitu',
+'tog-watchdefault' => 'Aldatzen ditudan orrialdeak jarraipen zerrendara gehitu',
+'tog-minordefault' => 'Lehenetsi bezala aldaketa txiki bezala markatu guztiak',
+'tog-previewontop' => 'Aurrebista aldaketa koadroaren aurretik erakutsi',
+'tog-previewonfirst' => 'Lehen aldaketan aurrebista erakutsi',
+'tog-nocache' => 'Orrialdeen katxea ezgaitu',
+'tog-enotifwatchlistpages' 	=> 'Jarraitzen ari naizen orrialde baten aldaketak daudenean e-posta jaso',
+'tog-enotifusertalkpages' 	=> 'Nire eztabaida orrialdea aldatzen denean e-posta jaso',
+'tog-enotifminoredits' 		=> 'Aldaketa txikiak direnean ere e-posta jaso',
+'tog-enotifrevealaddr' 		=> 'Jakinarazpen mezuetan nire e-posta helbidea erakutsi',
+'tog-shownumberswatching' 	=> 'Jarraitzen duen erabiltzaile kopurua erakutsi',
+'tog-fancysig' => 'Lotura automatikorik gabeko sinadura',
+'tog-externaleditor' => 'Lehenetsi bezala kanpoko editore bat erabili',
+'tog-externaldiff' => 'Lehenetsi bezala kanpoko diff erreminta erabili',
+'tog-showjumplinks' => '"Hona jo" irisgarritasun loturak gaitu',
+'tog-uselivepreview' => 'Zuzeneko aurrebista erakutsi (JavaScript) (Proba fasean)',
+'tog-autopatrol' => 'Mark edits I make as patrolled', // Zalantza
+'tog-forceeditsummary' => 'Aldaketaren laburpena zuri uzterakoan ohartarazi',
+'tog-watchlisthideown' => 'Jarraipen zerrendan nire aldaketak ezkutatu',
+'tog-watchlisthidebots' => 'Jarraipen zerrendan bot-en aldaketak ezkutatu',
+
+'underline-always' => 'Beti',
+'underline-never' => 'Inoiz ez',
+'underline-default' => 'Nabigatzailearen lehenetsitako balioa',
+
+'skinpreview' => '(Aurrebista)',
+
+# dates
+'sunday' => 'Igandea',
+'monday' => 'Astelehena',
+'tuesday' => 'Asteartea',
+'wednesday' => 'Asteazkena',
+'thursday' => 'Osteguna',
+'friday' => 'Ostirala',
+'saturday' => 'Larunbata',
+'sun' => 'Iga',
+'mon' => 'Asl',
+'tue' => 'Asr',
+'wed' => 'Asz',
+'thu' => 'Osg',
+'fri' => 'Osr',
+'sat' => 'Lar',
+'january' => 'Urtarrila',
+'february' => 'Otsaila',
+'march' => 'Martxoa',
+'april' => 'Apirila',
+'may_long' => 'Maiatza',
+'june' => 'Ekaina',
+'july' => 'Uztaila',
+'august' => 'Abuztua',
+'september' => 'Iraila',
+'october' => 'Urria',
+'november' => 'Azaroa',
+'december' => 'Abendua',
+'january-gen' => 'Urtarril',
+'february-gen' => 'Otsail',
+'march-gen' => 'Martxo',
+'april-gen' => 'Apiril',
+'may-gen' => 'Maiatz',
+'june-gen' => 'Ekain',
+'july-gen' => 'Uztail',
+'august-gen' => 'Abuztu',
+'september-gen' => 'Irail',
+'october-gen' => 'Urri',
+'november-gen' => 'Azaro',
+'december-gen' => 'Abendu',
+'jan' => 'Urt',
+'feb' => 'Ots',
+'mar' => 'Mar',
+'apr' => 'Api',
+'may' => 'Mai',
+'jun' => 'Eka',
+'jul' => 'Uzt',
+'aug' => 'Abu',
+'sep' => 'Ira',
+'oct' => 'Urr',
+'nov' => 'Aza',
+'dec' => 'Abe',
+# Bits of text used by many pages:
+#
+'categories' => '{{PLURAL:$1|Kategoria|Kategoriak}}',
+'category_header' => '"$1" kategoriako artikuluak',
+'subcategories' => 'Azpikategoriak',
+
+
+'linkprefix'		=> '/^(.*?)([a-zA-Z\x80-\xff]+)$/sD',
+'mainpage'		=> 'Azala',
+'mainpagetext'	=> "<big>'''MediaWiki arrakastaz instalatu da.'''</big>",
+'mainpagedocfooter' => "Ikus [http://meta.wikimedia.org/wiki/Help:Contents Erabiltzaile Gida] wiki softwarea erabiltzen hasteko informazio gehiagorako.
+
+== Nola hasi ==
+
+* [http://www.mediawiki.org/wiki/Help:Configuration_settings Konfigurazio balioen zerrenda]
+* [http://www.mediawiki.org/wiki/Help:FAQ MediaWiki FAQ (Maiz egindako galderak)]
+* [http://mail.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWikiren argitalpenen posta zerrenda]",
+
+'portal'		=> 'Wikipediako txokoa',
+'portal-url'		=> 'Project:Txokoa',
+'about'			=> 'Honi Buruz',
+'aboutsite'		=> '{{SITENAME}}(e)ri buruz',
+'aboutpage'		=> 'Project:Honi_buruz',
+'article'		=> 'Artikulua',
+'help'			=> 'Laguntza',
+'helppage'		=> 'Help:Contents',
+'bugreports'		=> 'Programazio-erroreen jakinarazpenak',
+'bugreportspage'	=> 'Project:Programazio-erroreen jakinarazpenak',
+'sitesupport'		=> 'Dohaintzak',
+'sitesupport-url'	=> 'Project:Gune laguntza',
+'faq'			=> 'Maiz egindako galderak',
+'faqpage'		=> 'Project:Maiz egindako galderak',
+'edithelp'		=> 'Aldaketak egiteko laguntza',
+'newwindow'		=> '(leiho berrian irekitzen da)',
+'edithelppage'		=> 'Help:Aldaketak egiteko laguntza',
+'cancel'		=> 'Bertan behera utzi',
+'qbfind'		=> 'Aurkitu',
+'qbbrowse'		=> 'Arakatu',
+'qbedit'		=> 'Aldatu',
+'qbpageoptions'		=> 'Orrialde hau',
+'qbpageinfo'		=> 'Testuingurua',
+'qbmyoptions'		=> 'Nire orrialdeak',
+'qbspecialpages'	=> 'Aparteko orrialdeak',
+'moredotdotdot'		=> 'Gehiago...',
+'mypage'		=> 'Nire orrialdea',
+'mytalk'		=> 'Nire eztabaida',
+'anontalk'		=> 'IP honen eztabaida',
+'navigation'		=> 'Nabigazioa',
+
+# Metadata in edit box
+'metadata_help' => 'Metadata:',
+
+'currentevents' => 'Albisteak',
+'currentevents-url' => 'Albisteak',
+
+'disclaimers' => 'Mugaketak',
+'disclaimerpage' => 'Project:Erantzukizunen mugaketa orokorra',
+'privacy' => 'Pribatutasun politika',
+'privacypage' => 'Project:Pribatutsan politika',
+'errorpagetitle' => 'Errorea',
+'returnto'		=> '$1(e)ra itzuli.',
+'tagline'      	=> '{{SITENAME}}(e)tik',
+'help'			=> 'Laguntza',
+'search'		=> 'Bilatu',
+'searchbutton'		=> 'Bilatu',
+'go'		=> 'Joan',
+'searcharticle'		=> 'Joan',
+'history'		=> 'Orrialdearen historia',
+'history_short' => 'Historia',
+'updatedmarker' => 'nire azkeneko bisitaz geroztik eguneratuta',
+'info_short'	=> 'Informazioa',
+'printableversion' => 'Inprimatzeko bertsioa',
+'permalink'     => 'Lotura finkoa',
+'print' => 'Inprimatu',
+'edit' => 'Aldatu',
+'editthispage'	=> 'Orrialde hau aldatu',
+'delete' => 'Ezabatu',
+'deletethispage' => 'Orrialde hau ezabatu',
+'undelete_short' => 'Berreskuratu {{PLURAL:$1|aldaketa bat|$1 aldaketa}}',
+'protect' => 'Babestu',
+'protectthispage' => 'Orrialde hau babestu',
+'unprotect' => 'Babesa kendu',
+'unprotectthispage' => 'Orrialde honi babesa kendu',
+'newpage' => 'Orrialde berria',
+'talkpage'		=> 'Orrialde honi buruz eztabaidatu',
+'specialpage' => 'Aparteko orrialdea',
+'personaltools' => 'Tresna pertsonalak',
+'postcomment'   => 'Azalpen bat bidali',
+'articlepage'	=> 'Artikulua ikusi',
+'talk' => 'Eztabaida',
+'views' => 'Bistaratzeak',
+'toolbox' => 'Tresna taula',
+'userpage' => 'Lankide orrialdea ikusi',
+'projectpage' => 'Proiektuaren orrialdea ikusi',
+'imagepage' => 	'Irudiaren orrialdea ikusi',
+'mediawikipage' => 	'Mezu orrialdea ikusi',
+'templatepage' => 	'Txantiloi orrialdea ikusi',
+'viewhelppage' => 	'Laguntza orrialdea ikusi',
+'categorypage' => 	'Kategoria orrialdea ikusi',
+'viewtalkpage' => 'Eztabaida ikusi',
+'otherlanguages' => 'Beste hizkuntzetan',
+'redirectedfrom' => '($1(e)tik birzuzenduta)',
+'autoredircomment' => '[[$1]] orrialdera birzuzentzentzen',
+'redirectpagesub' => 'Birzuzenketa orria',
+'lastmodifiedat'		=> 'Orrialdearen azken aldaketa: $2, $1.',	//$1 date, $2 time
+'viewcount'		=> 'Orrialde hau {{plural:$1|behin|$1 aldiz}} bisitatu da.',
+'copyright'	=> 'Eduki guztia $1(r)en babespean dago.',
+'protectedpage' => 'Babestutako orrialdea',
+'jumpto' => 'Hona jo:',
+'jumptonavigation' => 'nabigazioa',
+'jumptosearch' => 'bilatu',
+
+'badaccess'        => 'Baimen errorea',
+'badaccess-group0' => 'Ez daukazu ekintza hori burutzeko baimenik.',
+'badaccess-group1' => 'Ekintza hori $1 taldeko erabiltzaileei mugatuta dago.',
+'badaccess-group2' => 'Ekintza hori $1 taldeetako bateko erabiltzaileei mugatuta dago.',
+'badaccess-groups' => 'Ekintza hori $1 taldeetako batetako erabiltzaileei mugatuta dago.',
+
+'versionrequired' => 'MediaWikiren $1 bertsioa beharrezkoa da',
+'versionrequiredtext' => 'MediaWikiren $1 bertsioa beharrezkoa da orrialde hau erabiltzeko. Ikus [[Special:Version]]',
+
+'ok'			=> 'Ados',
+'pagetitle'		=> '$1 - {{SITENAME}}',
+'retrievedfrom' => '"$1"(e)tik jasota',
+'youhavenewmessages' => '$1 dauzkazu ($2).',
+'newmessageslink' => 'Mezu berriak',
+'newmessagesdifflink' => 'azken aldaketa ikusi',
+'editsection'=>'aldatu',
+'editold'=>'aldatu',
+'editsectionhint' => 'Atala aldatu: $1',
+'toc' => 'Edukiak',
+'showtoc' => 'erakutsi',
+'hidetoc' => 'ezkutatu',
+'thisisdeleted' => '$1 ikusi edo leheneratu?',
+'viewdeleted' => '$1 ikusi?',
+'restorelink' => '{{PLURAL:$1|ezabatutako aldaketa bat|ezabatutako $1 aldaketa}}',
+'feedlinks' => 'Jarioa:',
+'feed-invalid' => 'Baliogabeko harpidetza jario mota.',
+
+# Short words for each namespace, by default used in the 'article' tab in monobook
+'nstab-main' => 'Artikulua',
+'nstab-user' => 'Erabiltzaile orrialdea',
+'nstab-media' => 'Media orrialdea',
+'nstab-special' => 'Apartekoa',
+'nstab-project' => 'Proiektu orrialdea',
+'nstab-image' => 'Fitxategia',
+'nstab-mediawiki' => 'Mezua',
+'nstab-template' => 'Txantiloia',
+'nstab-help' => 'Laguntza orrialdea',
+'nstab-category' => 'Kategoria',
+
+# Main script and global functions
+#
+'nosuchaction'	=> 'Ekintza hori ez da existitizen',
+'nosuchactiontext' => 'URL bidez zehaztutako ekintza ez du wikiak ezagutzen',
+'nosuchspecialpage' => 'Ez da aparteko orrialde hori existitzen',
+'nospecialpagetext' => 'Baliogabeko aparteko orrialde bat eskatu duzu; existitzen direnen zerrenda ikus dezakezu  [[{{ns:special}}:Specialpages]] orrialdean.',
+
+# General errors
+#
+'error'			=> 'Errorea',
+'databaseerror' => 'Datu-base errorea',
+'dberrortext'	=> 'Datu-basean kontsulta egiterakoan sintaxi errore bat gertatu da. Baliteke softwareak bug bat izatea. Datu-basean egindako azken kontsulta:
+<blockquote><tt>$1</tt></blockquote>
+Funtzio honekin: "<tt>$2</tt>".
+MySQLk emandako errore informazioa: "<tt>$3: $4</tt>".',
+'dberrortextcl' => 'Datu-basean kontsulta egiterakoan sintaxi errore bat gertatu da. Datu-basean egindako azken kontsulta:
+"$1"
+Funtzio honekin: "$2".
+MySQLk emandako errore informazioa: "$3: $4"',
+'noconnect'		=> 'Sentitzen dugu! Wikian arazo teknikoak direla-eta, ezin izan da datu-basera konektatu. <br />
+$1',
+'nodb'			=> 'Ezin izan da $1 datu-basea hautatu',
+'cachederror'	=> 'Honako hau eskatutako orrialdearen katxeko kopia da, litekeena da eguneratuta ez azaltzea.',
+'laggedslavemode'   => 'Oharra: Baliteke orrialde honetan azken aldaketak ez erakustea.',
+'readonly'			=> 'Datu-basea blokeatuta dago',
+'enterlockreason'	=> 'Zehaztu blokeatzeko arrazoia, noiz kenduko den jakinaraziz',
+'readonlytext'		=> 'Datu-basea artikulu berriak sortu edo aldaketak ez egiteko blokeatuta dago, seguruenik mantenu lanak direla-eta. Blokeo hori kentzerakoan beti bezala egongo da berriz.
+
+Blokeatu duen administratzaileak azalpen hau eman du: $1',
+'missingarticle' => 'Datu-baseak ez du aurkitu beharko lukeen orrialde baten testua aurkitu, "$1" izena duena.
+
+Arrazoia iraungitako diff bat edo ezabatutako orrialde baten historia lotura jarraitzea izan liteke.
+
+Hau ez bada zure egoera, baliteke softwarean bug bat aurkitu izana.
+Mesedez, administratzaileari jakinarazi, URLa bidaliz.',
+'readonly_lag' => 'Datu-basea automatikoki blokeatu da menpeko zerbitzariak nagusiarekin sinkronizatu bitartean',
+'internalerror' => 'Barne errorea',
+'filecopyerror' => 'Ezin izan da "$1" fitxategia "$2"(e)ra kopiatu.',
+'filerenameerror' => 'Ezin izan zaio "$1" fitxategiari "$2" izen berria eman.',
+'filedeleteerror' => 'Ezin izan da "$1" fitxategia ezabatu.',
+'filenotfound'	=> 'Ezin izan da "$1" fitxategia aurkitu.',
+'unexpected'	=> 'Espero ez zen balioa: "$1"="$2".',
+'formerror'		=> 'Errorea: ezin izan da formularioa bidali',
+'badarticleerror' => 'Ezin da ekintza hau orrialde honetan burutu.',
+'cannotdelete'	=> 'Ezin izan da zehaztutako orrialde edo fitxategia ezabatu. (Baliteke beste norbaitek ezabatu izana.)',
+'badtitle'		=> 'Izenburu ezegokia',
+'badtitletext' => 'Eskatutako orrialde izenburua ez da baliozkoa, hutsik dago, edo gaizki lotutako hizkuntzen arteko lotura da. Baliteke izenburuetan erabili ezin den karaktereren bat izatea.',
+'perfdisabled' => 'Sentitzen dugu! Ezaugarri hau denbora batez ezgaituta dago, wikian arazoak sortzen baititu, datu-basea motelduz.',
+'perfdisabledsub' => 'Hemen duzu $1(e)tik gordetako kopia:', # obsolete?
+'perfcached' => 'Hurrengo datuak katxean gordeta daude eta litekeena da guztiz eguneratuta ez egotea:',
+'perfcachedts' => 'Hurrengo datuak katxean daude, $1 eguneratu zen azkenekoz.',
+'wrong_wfQuery_params' => 'Baliogabeko parametroak eman zaizkio wfQuery() funtzioari<br />
+Funtzioa: $1<br />
+Kontsulta: $2',
+'viewsource' => 'Kodea ikusi',
+'viewsourcefor' => '$1',
+'protectedtext' => 'Orrialde hau blokeatu egin da aldaketak ekiditeko.
+
+Orrialde honen kodea ikusi eta kopiatu dezakezu:',
+'protectedinterface' => 'TOrrialde honek softwarearentzako interfaze testua gordetzen du eta blokeatuta dago bandalismoak saihesteko.',
+'editinginterface' => "'''Oharra:''' Softwarearentzako interfaze testua duen orrialde bat aldatzen ari zara. Orrialde honetako aldaketek erabiltzaile guztiei eragingo die.",
+'sqlhidden' => '(ezkutuko SQL kontsulta)',
+
+# Login and logout pages
+#
+'logouttitle'	=> 'Saioa ixtea',
+'logouttext'	=> '<strong>Saioa itxi egin duzu.</strong><br />
+Erabiltzaile anonimo bezala jarraitu dezakezu {{SITENAME}} erabiltzen, edo saioa has dezakezu berriz erabiltzaile berdinarekin edo ezberdin batekin. Kontuan izan orrialde batzuk saioa hasita bazenu bezala ikus ditzakezula nabigatzailearen katxea garbitu arte.',
+
+'welcomecreation' => "== Ongi etorri, $1! ==
+
+Zure kontua sortu egin da. Ez ahaztu {{SITENAME}}(e)ko hobespenak aldatzea.",
+
+'loginpagetitle' => 'Saio hasiera',
+'yourname'		=> 'Erabiltzaile izena',
+'yourpassword'	=> 'Pasahitza',
+'yourpasswordagain' => 'Pasahitza berriz',
+'remembermypassword'	=> 'Nire saioa ordenagailu honetan gogoratu',
+'yourdomainname'       => 'Zure domeinua',
+'externaldberror'      => 'There was either an external authentication database error or you are not allowed to update your external account.', // Zalantza
+'loginproblem'	=> '<b>Arazoa gertatu da saioa hasterakoan.</b><br />Saiatu berriz!',
+'alreadyloggedin' => "<strong>$1, saioa hasi duzu jada!</strong><br />",
+
+'login'			=> 'Saioa hasi',
+'loginprompt'	=> 'Cookieak gaituta izatea beharrezkoa da {{SITENAME}}(e)n saioa hasteko.',
+'userlogin'		=> 'Saioa hasi / kontua sortu',
+'logout'		=> 'Saioa itxi',
+'userlogout'	=> 'Saioa itxi',
+'notloggedin'	=> 'Saioa hasi gabe',
+'nologin'	=> 'Ez duzu erabiltzaile konturik? $1.',
+'nologinlink'	=> 'Kontua sortu',
+'createaccount'	=> 'Kontua sortu',
+'gotaccount'	=> 'Baduzu erabiltzaile kontua? $1.',
+'gotaccountlink'	=> 'Saioa hasi',
+'createaccountmail'	=> 'e-postaz',
+'badretype'		=> 'Idatzitako pasahitzak ez dira berdinak.',
+'userexists'	=> 'Aukeratutako erabiltzaile izena hartuta dago. Mesedez, ezberdin bat aukeratu.',
+'youremail'		=> 'E-posta *:',
+'username'		=> 'Erabiltzaile izena:',
+'uid'			=> 'Erabiltzaile IDa:',
+'yourrealname'		=> 'Benetako izena *:',
+'yourlanguage'	=> 'Hizkuntza:',
+'yourvariant'  => 'Aldaera',
+'yournick'		=> 'Erabiltzaile izena:',
+'badsig'		=> 'Baliogabeko sinadura; egiaztatu HTML etiketak.',
+'email'			=> 'E-posta',
+'prefs-help-email-enotif' => 'Helbide hau e-posta bidezko ohartarazpenak bidaltzeko ere erabiltzen da, hobespenetan gaituz gero.',
+'prefs-help-realname' 	=> '* Benetako izena (aukerakoa): zehaztea erabakiz gero, zure lanarentzako atribuzio bezala balioko du.',
+'loginerror'	=> 'Errorea saioa hastean',
+'prefs-help-email'      => '* E-posta (aukerakoa): Beste lankideak zurekin harremanetan jartzeko, zure nortasuna ezagutzera eman gabe.',
+'nocookiesnew'	=> 'Erabiltzaile kontua sortu da, baina ez da saioa hasi. {{SITENAME}}(e)k cookieak erabiltzen ditu saioekin eta ezgaituta dauzkazu. Gaitu itzazu mesedez, eta ondoren saiatu saioa hasten zure erabiltzaile izen eta pasahitz berriak erabiliz.',
+'nocookieslogin'	=> '{{SITENAME}}(e)k cookieak erabiltzen ditu saioekin eta ezgaituta dauzkazu. Gaitu itzazu mesedez, eta saiatu berriz.',
+'noname'		=> 'Ez duzu baliozko erabiltzaile izen bat zehaztu.',
+'loginsuccesstitle' => 'Saio hasiera egina',
+'loginsuccess'	=> "'''Saioa hasi duzu {{SITENAME}}(e)n \"$1\" izenarekin.'''",
+'nosuchuser'	=> 'Ez dago "$1" izena duen lankiderik. Mesedez, egiaztatu ondo idatzi duzun edo kontu berria sor ezazu.',
+'nosuchusershort'	=> 'Ez dago "$1" izena duen erabiltzailerik. Egiaztatu ongi idatzi duzula.',
+'nouserspecified'	=> 'Erabiltzaile izena zehaztu beharra daukazu.',
+'wrongpassword'		=> 'Pasahitza ez da zuzena. Saiatu berriz.',
+'wrongpasswordempty'		=> 'Pasahitza hutsik dago. Saiatu berriz.',
+'mailmypassword' 	=> 'Pasahitza e-postaz bidali',
+'passwordremindertitle' => 'Pasahitzaren gogorarazpena {{SITENAME}}(e)tik',
+'passwordremindertext' => 'Norbaitek (zuk ziurrenik, $1 IP helbidetik)
+{{SITENAME}}(e)ko pasahitza zuri bidaltzea eskatu du ($4).
+"$2" erabiltzailearen pasahitza "$3" da orain.
+Saioa hasi eta pasahitza aldatu beharko zenuke orain.
+
+Eskaera hau beste norbaitek egin badu edo jada pasahitza gogoratu baduzu eta ez baduzu aldatu nahi, mezu honi kasurik ez egin eta jarraitu zuri pasahitz zaharra erabiltzen.',
+'noemail' => 'Ez dago "$1" erabiltzailearen e-posta helbiderik gordeta.',
+'passwordsent'	=> 'Pasahitz berria bidali da "$1" erabiltzailearen e-posta helbidera.
+Mesedez, saioa hasi jasotakoan.',
+'eauthentsent' =>  'Egiaztapen mezu bat bidali da zehaztutako e-posta helbidera.
+Helbide horretara beste edozein mezu bidali aurretik, bertan azaltzen diren argibideak jarraitu behar dituzu, e-posta hori zurea dela egiaztatzeko.',
+'mailerror'                 => 'Errorea mezua bidaltzerakoan: $1',
+'acct_creation_throttle_hit' => 'Sentitzen dugu, $1 erabiltzaile kontu sortu dituzu dagoeneko. Ezin duzu gehiago sortu.',
+'emailauthenticated'        => 'Zure e-posta helbidea egiaztatu zeneko data: $1.',
+'emailnotauthenticated'     => 'Zure posta helbidea egiaztatu gabe dago. Ez da mezurik bidaliko hurrengo ezaugarrientzako.',
+'noemailprefs'              => 'Zehaztu e-posta helbide bat ezaugarri hauek erabili ahal izateko.',
+'emailconfirmlink' => 'Egiaztatu zure e-posta helbidea',
+'invalidemailaddress'	=> 'Ezin da e-posta helbide hori ontzat eman baliogabeko formatua duela dirudielako. Mesedez, formatu egokia duen helbide bat zehaztu, edo hutsik utzi.',
+'accountcreated' => 'Kontua sortuta',
+'accountcreatedtext' => '$1 erabiltzaile kontua sortu egin da.',
+
+# Edit page toolbar
+'bold_sample'=>'Testu beltza',
+'bold_tip'=>'Testu beltza',
+'italic_sample'=>'Testu etzana',
+'italic_tip'=>'Testu etzana',
+'link_sample'=>'Loturaren izenburua',
+'link_tip'=>'Barne lotura',
+'extlink_sample'=>'http://www.adibidea.com loturaren izenburua',
+'extlink_tip'=>'Kanpo lotura (gogoratu http:// aurrizkia)',
+'headline_sample'=>'Goiburuko testua',
+'headline_tip'=>'2. mailako goiburukoa',
+'math_sample'=>'Formula hemen idatzi',
+'math_tip'=>'Formula matematikoa (LaTeX)',
+'nowiki_sample'=>'Formatu gabeko testua idatzi hemen',
+'nowiki_tip'=>'Ez egin jaramonik wiki formatuari',
+'image_sample'=>'Adibidea.jpg',
+'image_tip'=>'Txertatutako irudia',
+'media_sample'=>'Adibidea.ogg',
+'media_tip'=>'Media fitxategi lotura',
+'sig_tip'=>'Zure sinadura data eta orduarekin',
+'hr_tip'=>'Lerro horizontala (gutxitan erabili)',
+
+# Edit pages
+#
+'summary'		=> 'Laburpena',
+'subject'		=> 'Izenburua',
+'minoredit'		=> 'Hau aldaketa txikia da',
+'watchthis'		=> 'Orrialde hau jarraitu',
+'savearticle'	=> 'Orrialdea gorde',
+'preview'		=> 'Aurrebista',
+'showpreview'	=> 'Aurrebista erakutsi',
+'showlivepreview'	=> 'Zuzeneko aurrebista',
+'showdiff'	=> 'Aldaketak erakutsi',
+'anoneditwarning' => "'''Oharra:''' Ez duzu saioa hasi. Zure IP helbidea orrialde honetako historian gordeko da.",
+'missingsummary' => "'''Gogorarazpena:''' Ez duzu aldaketa laburpen bat zehaztu. Berriz ere gordetzeko aukeratzen baduzu, laburpen mezurik gordeko da.",
+'missingcommenttext' => 'Mesedez, iruzkin bat idatzi jarraian.',
+'blockedtitle'	=> 'Erabiltzailea blokeatuta dago',
+'blockedtext' => "Zure erabiltzaile izena edo IP helbidea $1(e)k blokeatu du. Emandako arrazoia honako hau da: ''$2'' $1 edo Wikipediako beste [[{{MediaWiki:grouppage-sysop}}|administratzaile]] batekin harremanetan jarri beharko zinateke zure blokeoa eztabaidatzeko. Kontuan izan ezingo duzula \"Erabiltzaile honi e-posta bidali\" aukera erabili zure [[Special:Preferences|Hobespenetan]] baliozko e-posta helbide bat definitu ezean. Zure IP helbidea $3 da. Mesedez, edozein kontsulta egiterakoan, helbide hori aipatu.",
+'blockedoriginalsource' => "Jarraian ikus daiteke '''$1'''(r)en kodea:",
+'blockededitsource' => "Jarraian ikus daitezke '''$1'''(e)n egin dituzun aldaketak:",
+'whitelistedittitle' => 'Saioa hastea beharrezkoa da aldaketak egiteko',
+'whitelistedittext' => '$1 behar duzu orrialdeak aldatu ahal izateko..',
+'whitelistreadtitle' => 'Saioa hastea beharrezkoa da irakurtzeko',
+'whitelistreadtext' => '[[Special:Userlogin|Saioa hasi]] behar duzu orrialdeak irakurtzeko.',
+'whitelistacctitle' => 'Ez daukazu kontu berri bat sortzeko baimenik',
+'whitelistacctext' => 'Wiki honetan kontu berriak sortu ahal izateko [[Special:Userlogin|saioa hasi]] eta baimena izatea beharrezko da.',
+'confirmedittitle' => 'E-posta egiaztatzea beharrezkoa da aldaketak egiteko',
+'confirmedittext' => 'Orrialdeetan aldaketak egin aurretik zure e-posta helbidea egiaztatu beharra daukazu. Mesedez, zehaztu eta egiaztatu zure e-posta helbidea [[Special:Preferences|hobespenetan]].',
+'loginreqtitle'	=> 'Saioa hastea beharrezkoa',
+'loginreqlink' => 'saioa hasi',
+'loginreqpagetext'	=> 'Beste orrialde batzuk ikusteko $1 beharra daukazu..',
+'accmailtitle' => 'Pasahitza bidali da.',
+'accmailtext' => '"$1"(r)en pasahitza $2(e)ra bidali da.',
+'newarticle'	=> '(Berria)',
+'newarticletext' =>
+"Orrialde hau ez da existitzen oraindik. Orrialde sortu nahi baduzu, beheko koadroan idazten hasi zaitezke (ikus [[{{MediaWiki:helppage}}|laguntza orrialdea]] informazio gehiagorako). Hona nahi gabe etorri bazara, nabigatzaileko '''atzera''' botoian klik egin.",
+'anontalkpagetext' => "----''Honako hau konturik sortu ez edo erabiltzen ez duen erabiltzaile anonimo baten eztabaida orria da. Bere IP helbidea erabili beharko da beraz identifikatzeko. Erabiltzaile batek baino gehiagok IP bera erabil dezakete ordea. Erabiltzaile anonimoa bazara eta zurekin zerikusirik ez duten mezuak jasotzen badituzu, mesedez [[Special:Userlogin|Izena eman edo saioa hasi]] etorkizunean horrelakoak gerta ez daitezen.''",
+'noarticletext' => 'Oraindik ez dago testurik orrialde honetan; beste orrialde batzuetan [[{{ns:special}}:Search/{{PAGENAME}}|bilatu dezakezu izenburu hau]] edo [{{fullurl:{{FULLPAGENAME}}|action=edit}} berau aldatu ere egin dezakezu].',
+'clearyourcache' => "'''Oharra:''' Gorde ondoren zure nabigatzailearen katxea ekidin beharko duzu aldaketak ikusteko. '''Mozilla / Firefox / Safari:''' ''Shift'' tekla sakatu birkargatzeko momentuan, edo ''Ctrl-Shift-R'' sakatu (''Cmd-Shift-R'' Apple Mac baten); '''IE:''' ''Ctrl'' tekla sakatu birkargatzeko momentuan, edo ''Ctrl-F5'' sakatu; '''Konqueror:''': Birkargatzeko klik egin, edo F5 sakatu, besterik ez; '''Opera''' erabiltzaileek ''Tresnak-Hobespenak'' atalera jo eta katxea garbitzeko aukera hautatu.",
+'usercssjsyoucanpreview' => '<strong>Laguntza:</strong> Zure CSS/JS berria gorde aurretik probatzeko \'Aurrebista erakutsi\' botoia erabili.',
+'usercsspreview' => '\'\'\'Ez ahaztu zure CSS kodea aurreikusten zabiltzala, oraindik ez dela gorde!\'\'\'',
+'userjspreview' => '\'\'\'Gogoratu zure JavaScript kodea probatu/aurreikusten zabiltzala, oraindik ez da gorde!\'\'\'',
+'userinvalidcssjstitle' => '\'\'\'Oharra:\'\'\' Ez da "$1" itxura existitzen. Kontuan izan .css eta .js fitxategi pertsonalizatuen izenak letra xehez idatzi behar direla; adibidez, Lankide:Adibide/monobook.css, eta ez Lankide:Adibide/Monobook.css.',
+'updated' => '(Eguneratua)',
+'note' => '<strong>Oharra:</strong>',
+'previewnote' => '<strong>Gogoratu hau aurreikusketa bat dela, beraz gorde egin beharko duzu!</strong>',
+'session_fail_preview' => '<strong>Sentitzen dugu! Ezin izan da zure aldaketa prozesatu, saioko datu batzuen galera dela-eta. Mesedez, saiatu berriz. Arazoak jarraitzen badu, saiatu saioa amaitu eta berriz hasten.</strong>',
+'previewconflict' => 'Aurreikuspenak aldaketen koadroan idatzitako testua erakusten du, gorde ondoren agertuko den bezala.',
+'session_fail_preview_html' => '<strong>Sentitzen dugu! Ezin izan dugu zure aldaketa burutu, saio datu galera bat medio.</strong>
+
+\'\'Wiki honek HTML kodea onartzen duenez, aurreikuspena ezgaituta dago JavaScript erasoak saihestu asmoz.\'\'
+
+<strong>Aldaketa saiakera hau zuzena baldin bada, saiatu berriro mesedez. Arazoak jarraitzen badu, saiatu saioa itxi eta berriz hasten.</strong>',
+'importing' => '$1 inportatzen',
+'editing' => '$1 aldatzen',
+'editinguser' => '<b>$1</b> erabiltzailea aldatzen',
+'editingsection' => '$1 aldatzen (atala)',
+'editingcomment' => '$1 aldatzen (iruzkina)',
+'editconflict' => 'Aldaketa gatazka: $1',
+'explainconflict' => 'Zu orrialdea aldatzen hasi ondoren beste norbaitek ere aldaketak egin ditu. Goiko testu koadroan ikus daiteke orrialdeak uneotan duen edukia. Zure aldaketak beheko testu koadroan ikus daitezke. Zure testua dagoenarekin elkartu beharko duzu. Orrialdea gordetzeko erabakitzen duzun unean goiko koadroko edukia <b>bakarrik</b> gordeko da.<br />',
+'yourtext'		=> 'Zure testua',
+'storedversion' => 'Gordetako bertsioa',
+'nonunicodebrowser' => "<strong>OHARRA: Zure nabigatzailea ez dator Unicode arauarekin bat. Artikuluak modu seguruan aldatu ahal izateko beste sistema bat gaitu da: ASCII ez diren karaktereak kode hamaseitar bezala agertuko dira aldaketa koadroan.</strong>",
+'editingold'	=> "<strong>KONTUZ: Artikulu honen bertsio zahar bat aldatzen ari zara. Gorde egiten baduzu, azkenengo aldaketa baino lehenagoko aldakuntzak, ezabatuak izango dira.</strong>",
+'yourdiff'		=> 'Ezberdintasunak',
+'copyrightwarning' => 'Kontuan izan {{SITENAME}}(e)n egindako ekarpen guztiak $2 baldintzapean argitaratzen direla (ikus $1 informazio gehiagorako). Zure testua banatzeko baldintza hauekin ados ez bazaude, ez ezazu bidali.<br />
+Era berean, bidaltzen ari zaren edukia zuk zeuk idatzitakoa dela edo jabetza publikoko edo baliabide aske batetik kopiatu duzula zin egin ari zara.
+<strong>EZ BIDALI BAIMENIK GABEKO COPYRIGHTDUN EDUKIRIK!</strong>',
+'copyrightwarning2' => 'Mesedez, kontuan izan {{SITENAME}}(e)n egindako ekarpen guztiak besteek aldatu edo ezabatu ditzaketela. Ez baduzu besteek aldaketak egitea nahi, ez ezazu bidali.<br />
+Era berean, bidaltzen ari zaren edukia zuk zeuk idatzitakoa dela edo jabetza publikoko edo baliabide aske batetik kopiatu duzula zin egin ari zara (ikus $1 informazio gehiagorako).
+<strong>EZ BIDALI BAIMENIK GABEKO COPYRIGHTDUN EDUKIRIK!</strong>',
+'longpagewarning' => '<strong>OHARRA: Orrialde honek $1 kilobyteko tamaina du; nabigatzaile batzuek arazoak izan litzakete 32kb-tik gorako testuekin. Mesedez, saiatu orrialdea atal txikiagoetan banatzen.</strong>',
+'longpageerror' => "<strong>ERROREA: Bidali duzun testuak $1 kilobyteko luzera du, eta $2 kilobyteko maximoa baino luzeagoa da. Ezin da gorde.</strong>",
+'readonlywarning' => '<strong>OHARRA: Datu-basea blokeatu egin da mantenu lanak burutzeko, beraz ezingo dituzu orain zure aldaketak gorde. Testua fitxategi baten kopiatu dezakezu, eta beranduago erabiltzeko gorde.</strong>',
+# problem with link: [[Project:Babestutako orria|Babestutako Orria]]
+'protectedpagewarning' => "<strong>OHARRA:  Orri hau blokeaturik dago, administratzaileek soilik eraldatu dezakete. Ikusi [[Project:Babestutako orria|Babestutako Orria]].</strong>",
+'semiprotectedpagewarning' => "<strong>Oharra: Orrialde hau erregistratutako erabiltzaileek bakarrik aldatzeko babestuta dago.</strong>",
+'templatesused'	=> 'Orrialde honetan erabiltzen diren txantiloiak:',
+'edittools' => '<!-- Hemen jarritako testua aldaketa eta igoera formularioen azpian agertuko da. -->',
+'nocreatetitle' => 'Orrialdeak sortzea mugatuta',
+'nocreatetext' => 'Gune honek orrialde berriak sortzeko gaitasuna mugatu du. Atzera egin dezakezu existitzen den orrialde bat aldatzeko, edo [[Special:Userlogin|saio hasi edo kontua sortu]].',
+'cantcreateaccounttitle' => 'Ezin izan da kontua sortu',
+'cantcreateaccounttext' => 'IP helbide honetatik (<b>$1</b>) izena emateko aukera blokeatu egin da. Baliteke zauden eskolan edo Interneteko Zerbitzu Hornitzailean gertatuko bandalismoren batengatik gertatzea hau.',
+
+# History pages
+#
+'revhistory'	=> 'Berrikuspenen historiala',
+'viewpagelogs' => 'Orrialde honen erregistroak ikusi',
+'nohistory'		=> 'Orrialde honek ez dauka aldaketa historiarik.',
+'revnotfound'	=> 'Ezin izan da berrikuspena aurkitu',
+'revnotfoundtext' => "Ezin izan da eskatzen ari zaren orrialdearen berrikuspen zaharra aurkitu. Mesedez, egiaztatu orrialde honetara iristeko erabili duzun URLa.",
+'loadhist'		=> 'Orrialdearen historia kargatzen',
+'currentrev'	=> 'Oraingo berrikuspena',
+'revisionasof'          => '$1(e)ko berrikuspena',
+'previousrevision'	=> '←Berrikuspen zaharragoa',
+'nextrevision'		=> 'Berrikuspen berriagoa→',
+'currentrevisionlink'   => 'Oraingo berrikuspena ikusi',
+'cur'			=> 'orain',
+'next'			=> 'hurrengoa',
+'last'			=> 'azkena',
+'orig'			=> 'orij',
+'histlegend'	=> 'Diff hautapena: hautatu alderatu nahi dituzun bi bertsioak eta beheko botoian klik egin.<br />
+Legenda: (orain) = oraingo bertsioarekiko ezberdintasuna,
+(azkena) = aurreko bertsioarekiko ezberdintasuna, t = aldaketa txikia.',
+'deletedrev' => '[ezabatuta]',
+'histfirst' => 'Lehena',
+'histlast' => 'Azkena',
+'rev-deleted-comment' => '(iruzkina ezabatu da)',
+'rev-deleted-user' => '(erabiltzailea ezabatu da)',
+'rev-deleted-text-permission' => '<div class="mw-warning plainlinks">
+Orrialdearen berrikuspen hau artxibo publikoetatik kendu da. Xehetasunak [{{fullurl:Special:Log/delete|page={{PAGENAMEE}}}} ezabaketa erregistroan] ikus daitezke.
+</div>',
+'rev-deleted-text-view' => '<div class="mw-warning plainlinks">
+Orrialdearen berrikuspen hau artxibo publikoetatik kendu da. Guneko administratzaile bezala ikusteko aukera daukazu ordea; xehetasunak [{{fullurl:Special:Log/delete|page={{PAGENAMEE}}}} ezabaketa erregistroan] ikus ditzakezu.
+</div>',
+'rev-delundel' => 'erakutsi/ezkutatu',
+
+'history-feed-title' => 'Berrikuspenen historia',
+'history-feed-description'	=> 'Wikiko orrialde honen berrikuspenen historia',
+'history-feed-item-nocomment' => 'nork: $1 noiz: $2', # user at time
+'history-feed-empty' => 'Eskatutako orrialdea ez da existitzen. Baliteke wikitik ezabatu edo izenez aldatu izana. Saiatu [[Special:Search|wikian zerikusia duten orrialdeak bilatzen]].',
+
+# Revision deletion
+#
+'revisiondelete' => 'Berrikuspenak ezabatu/leheneratu',
+'revdelete-nooldid-title' => 'Helburu berrikuspenik ez',
+'revdelete-nooldid-text' => 'Ez d(it)uzu eragiketa hau burutzeko helburu berrikuspena(k) zehaztu.',
+'revdelete-selected' => '[[:$1]](r)en hautatutako berrikuspena:',
+'revdelete-text' => "Ezabatutako berrikuspenek orrialdearen historian agertzen jarraituko dute, baina bere edukiak ez dira publikoki eskuratu ahal izango.
+
+Wiki honetako beste administratzaileek ezkutuko eduki hau ikusteko aukera izango dute, eta baita leheneratzeko ere, gunearen arduradunek beste mugapenen bat ezartzen ez badute behintzat.",
+'revdelete-legend' => 'Berrikuspen mugapenak ezarri:',
+'revdelete-hide-text' => 'Berrikuspenaren testua ezkutatu',
+'revdelete-hide-comment' => 'Aldaketaren iruzkina ezkutatu',
+'revdelete-hide-user' => 'Egilearen erabiltzaile izena/IPa ezkutatu',
+'revdelete-hide-restricted' => 'Mugapen hauek administratzaileei zein besteei aplikatu',
+'revdelete-log' => 'Erregistroaren iruzkina:',
+'revdelete-submit' => 'Hautatutako berrikuspenari aplikatu',
+'revdelete-logentry' => '[[$1]](r)entzako berriskupen ikusgaitasuna aldatu da',
+
+# Diffs
+#
+'difference'	=> '(Bertsioen arteko ezberdintasunak)',
+'loadingrev'	=> 'diff-entzako berrikuspena eskuratzen',
+'lineno'		=> "$1. lerroa:",
+'editcurrent'	=> 'Orrialdearen oraingo bertsioa aldatu',
+'selectnewerversionfordiff' => 'Hautatu bertsio berriago bat konparaketa egiteko',
+'selectolderversionfordiff' => 'Hautatu bertsio zaharrago bat konparaketa egiteko',
+'compareselectedversions' => 'Hautatutako bertsioak alderatu',
+
+# Search results
+#
+'searchresults' => 'Bilaketaren emaitzak',
+# problem with link: [[Project:Bilaketa|{{SITENAME}}(e)n bilatzen]]
+'searchresulttext' => "{{SITENAME}}(e)n bilaketak egiteko informazio gehiagorako, ikus [[Project:Bilaketa|{{SITENAME}}(e)n bilatzen]].",
+'searchsubtitle' => "'''[[:$1]]''' bilatu duzu",
+'searchsubtitleinvalid' => "'''$1''' bilatu duzu",
+'badquery'		=> 'Gaizki osatutako bilaketa katea',
+'badquerytext'	=> 'Ezin izan dugu zure kontsulta burutu. Baliteke hau hiru letra baino laburragoa den hitz bat bilatzen saiatzeagatik izatea, eta hori ezin da egin. Litekeena da ere adierazpena gaizki idatzi izana, adibidez "euskal euskal herria". Saiatu beste kontsulta batekin mesedez.',
+'matchtotals'	=> "\"$1\" bilaketak $2 orrialde izenburu eta $3 orrialderen testu aurkitu ditu.",
+'noexactmatch' => "'''Ez dago \"$1\" izenburua duen orrialderik.''' [[:$1|Orrialde hau]] sortu dezakezu.",
+'titlematches'	=> 'Emaitzak artikuluen izenburuetan',
+'notitlematches' => 'Ez dago bat datorren orrialde izenbururik',
+'textmatches'	=> 'Emaitza orrialde testuetan',
+'notextmatches'	=> 'Ez dago bat datorren orrialde testurik',
+'prevn'			=> "aurreko $1ak",
+'nextn'			=> "hurrengo $1ak",
+'viewprevnext'	=> "Ikusi ($1) ($2) ($3).",
+'showingresults' => "Jarraian <b>$1</b> emaitz ikus daitezke, <b>$2</b>.etik hasita.",
+'showingresultsnum' => "Hasieran #<b>$2</b> duten <b>$3</b> emaitza erakusten dira jarraian.",
+'nonefound'		=> "'''Oharra''': Arrakastarik gabeko bilaketen arrazoi nagusietako bat \"dute\" eta \"da\" bezalako hitz arruntak bilatzea izan ohi da, edo baita bilaketan hitz gehiegi zehazteagatik ere (emaitzetan hitz guztiak dituzten emaitzak baino ez dira azalduko).",
+'powersearch' => 'Bilatu',
+'powersearchtext' => "Izen-tarte hauetan bilatu:<br />$1<br />$2 Birzuzenketen zerrenda<br />$3 $9 bilatu",
+'searchdisabled' => '{{SITENAME}}(e)n ezgaituta dago bilaketa. Dena dela, Google erabiliz ere egin dezakezu bilaketa. Kontuan izan bertan dituzten {{SITENAME}}(e)ko emaitzak zaharkituta egon daitezkeela.',
+
+'blanknamespace' => '(Nagusia)',
+
+# Preferences page
+#
+'preferences'	=> 'Hobespenak',
+'mypreferences'	=> 'Nire hobespenak',
+'prefsnologin' => 'Saioa hasi gabe',
+'prefsnologintext'	=> "[[Special:Userlogin|Saioa hasi behar duzu]] zure hobespenak ezartzeko.",
+'prefsreset'	=> 'Hobespenak hasieratu egin dira.',
+'qbsettings'	=> 'Laster-barra',
+'qbsettings-none'	=> 'Ezein ere',
+'qbsettings-fixedleft'	=> 'Eskuinean',
+'qbsettings-fixedright'	=> 'Ezkerrean',
+'qbsettings-floatingleft'	=> 'Ezkerrean mugikor',
+'changepassword' => 'Pasahitza aldatu',
+'skin'			=> 'Itxura',
+'math'			=> 'Math',
+'dateformat'		=> 'Data formatua',
+'datedefault'		=> 'Hobespenik ez',
+'datetime'		=> 'Data eta ordua',
+'math_failure'		=> 'Interpretazio errorea',
+'math_unknown_error'	=> 'errore ezezaguna',
+'math_unknown_function'	=> 'funtzio ezezaguna',
+'math_lexing_error'	=> 'errore lexikoa',
+'math_syntax_error'	=> 'sintaxi errorea',
+'math_image_error'	=> 'PNG bilakatze errorea; egiaztatu latex, dvips, gs eta convert ongi instalatuta daudela',
+'math_bad_tmpdir'	=> 'Ezin da math direktorio tenporala sortu edo bertan idatzi',
+'math_bad_output'	=> 'Ezin da math direktorioa sortu edo bertan idatzi',
+'math_notexvc'	=> 'texvc exekutagarria falta da; mesedez, ikus math/README konfiguratzeko.',
+'prefs-personal' => 'Erabiltzaile profila',
+'prefs-rc' => 'Azken aldaketak',
+'prefs-watchlist' => 'Jarraipen zerrenda',
+'prefs-watchlist-days' => 'Jarraipen zerrendan erakutsi beharreko egun kopurua:',
+'prefs-watchlist-edits' => 'Jarraipen zerrendan erakutsi beharreko aldaketa kopurua:',
+'prefs-misc' => 'Denetarik',
+'saveprefs'		=> 'Gorde',
+'resetprefs'	=> 'Hasieratu',
+'oldpassword'	=> 'Pasahitz zaharra:',
+'newpassword'	=> 'Pasahitz berria:',
+'retypenew'		=> 'Pasahitz berria berriz idatzi:',
+'textboxsize'	=> 'Aldatzen',
+'rows'			=> 'Lerroak:',
+'columns'		=> 'Zutabeak:',
+'searchresultshead' => 'Bilaketa',
+'resultsperpage' => 'Emaitza orrialdeko:',
+'contextlines'	=> 'Lerro emaitzako:',
+'contextchars'	=> 'Lerro bakoitzeko karaktere kopurua:',
+'stubthreshold' => 'Zirriborroak erakusteko muga:',
+'recentchangescount' => 'Aldaketa berrietako izenburu kopurua:',
+'savedprefs'	=> 'Zure hobespenak gorde egin dira.',
+'timezonelegend' => 'Ordu zona',
+'timezonetext'	=> 'Zure ordu lokala eta zerbitzariaren orduaren (UTC) arteko ezberdintasuna.',
+'localtime'	=> 'Ordu lokala',
+'timezoneoffset' => 'Ezberdintasuna¹',
+'servertime'	=> 'Zerbitzariko ordua',
+'guesstimezone' => 'Nabigatzailetik jaso',
+'allowemail'		=> 'Beste erabiltzaileengandik e-posta mezuak jasotzea gaitu',
+'defaultns'		=> 'Izen-tarte hauetan bilatu lehenetsitzat:',
+'default'		=> 'lehenetsia',
+'files'			=> 'Fitxategiak',
+
+# User rights
+'userrights-lookup-user' => 'Erabiltzaile taldeak kudeatu',
+'userrights-user-editname' => 'Erabiltzaile izena idatzi:',
+'editusergroup' => 'Erabiltzaile taldeak editatu',
+
+'userrights-editusergroup' => 'Erabiltzaile taldeak editatu',
+'saveusergroups' => 'Erabiltzaile taldeak gorde',
+'userrights-groupsmember' => 'Partaide da hemen:',
+'userrights-groupsavailable' => 'Existitzen diren taldeak:',
+'userrights-groupshelp' => 'Hautatu erabiltzaileari gehitu edo kendu nahi dizkiozun taldeak. Deshautatutako taldeak ez dira aldatuko. Talde bat deshautatu dezakezu CTRL + Ezker Klika eginez',
+
+# Groups
+'group'                   => 'Taldea:',
+'group-bot'               => 'Bot-ak',
+'group-sysop'             => 'Administratzaileak',
+'group-bureaucrat'        => 'Burokratak',
+'group-all'               => '(guztiak)',
+
+'group-bot-member'        => 'Bot',
+'group-sysop-member'      => 'Administratzaile',
+'group-bureaucrat-member' => 'Burokrata',
+
+'grouppage-bot' => '{{ns:project}}:Bot-ak',
+'grouppage-sysop' => '{{ns:project}}:Administratzaileak',
+'grouppage-bureaucrat' => '{{ns:project}}:Burokratak',
+
+# Recent changes
+#
+'changes' => 'aldaketak',
+'recentchanges' => 'Aldaketa berriak',
+'recentchangestext' => 'Orrialde honetan wiki honetan egindako azken aldaketak erakusten dira.',
+'rcnote'		=> "Jarraian azken <strong>$2</strong> egunetako azken <strong>$1</strong> aldaketak erakusten dira, $3 eguneratuta.",
+'rcnotefrom'	=> "Jarraian azaltzen diren aldaketak data honetatik aurrerakoak dira: <b>$2</b> (gehienez <b>$1</b> erakusten dira).",
+'rclistfrom'	=> "Erakutsi $1 ondorengo aldaketa berriak",
+'rcshowhideminor' => '$1 aldaketa txikiak',
+'rcshowhidebots' => '$1 bot-ak',
+'rcshowhideliu' => '$1 erabiltzaile erregistratuak',
+'rcshowhideanons' => '$1 anonimoak',
+'rcshowhidepatr' => '$1 patruilatutako aldaketak',
+'rcshowhidemine' => '$1 nire aldaketak',
+'rclinks'		=> "Erakutsi azken $1 aldaketak $2 egunetan.<br>$3",
+'diff'			=> 'ezb',
+'hist'			=> 'hist',
+'hide'			=> 'Ezkutatu',
+'show'			=> 'Erakutsi',
+'minoreditletter' => 't',
+'newpageletter' => 'B',
+'boteditletter' => 'b',
+'sectionlink' => '→',
+'number_of_watching_users_pageview' 	=> '[$1 jarraitzaile]',
+'rc_categories'	=> 'Kategorietara mugatu ("|" karaktereaz banandu)',
+'rc_categories_any'	=> 'Edozein',
+
+# Upload
+#
+'upload'		=> 'Fitxategia igo',
+'uploadbtn'		=> 'Fitxategia igo',
+'reupload'		=> 'Berriz igo',
+'reuploaddesc'	=> 'Igotzeko formulariora itzuli.',
+'uploadnologin' => 'Saioa hasi gabe',
+'uploadnologintext'	=> "Fitxategiak igotzeko [[Special:Userlogin|saioa hasi]] behar duzu.",
+'upload_directory_read_only' => 'Web zerbitzariak ez dauka igoera direktorioan ($1) idazteko baimenik.',
+'uploaderror'	=> 'Errorea igotzerakoan',
+'uploadtext'	=> "Fitxategiak igotzeko beheko formularioa erabil dezakezu. Aurretik igotako irudiak ikusi edo bilatzeko [[Special:Imagelist|igotako fitxategien zerrendara]] jo. Igoerak eta ezabatutakoak [[Special:Log/upload|igoera erregistroan]] zerrendatzen dira.
+
+Orrialde baten irudi bat txertatzeko, erabili kode hauetako bat:
+'''<nowiki>[[</nowiki>{{ns:image}}<nowiki>:Fitxategia.jpg]]</nowiki>''',
+'''<nowiki>[[</nowiki>{{ns:image}}<nowiki>:Fitxategia.png|testu alternatiboa]]</nowiki>''' edo
+'''<nowiki>[[</nowiki>{{ns:media}}<nowiki>:Fitxategia.ogg]]</nowiki>''' irudia zuzenean erabiltzeko.",
+'uploadlog'		=> 'igoera erregistroa',
+'uploadlogpage' => 'Igoera erregistroa',
+'uploadlogpagetext' => 'Jarraian azken igoeren zerrenda ikus daiteke.',
+'filename'		=> 'Fitxategi izena',
+'filedesc'		=> 'Laburpena',
+'fileuploadsummary' => 'Laburpena:',
+'filestatus' => 'Copyright egoera',
+'filesource' => 'Iturria',
+'copyrightpage' => "Project:Eskubideak",
+'copyrightpagename' => "{{SITENAME}} copyright",
+'uploadedfiles'	=> 'Igotako fitxategiak',
+'ignorewarning'        => 'Oharra ezikusi eta fitxategia gorde.',
+'ignorewarnings'	=> 'Edozein ohar ezikusi.',
+'minlength'		=> 'Fitxategi izenak hiru karaktere izan behar ditu gutxienez.',
+'illegalfilename'	=> '"$1" fitxategiaren izenak orrialdeen izenburuetan erabili ezin diren karaktereak ditu. Mesedez, fitxategiari izena aldatu eta saiatu berriz igotzen.',
+'badfilename'	=> 'Irudiaren izena aldatu da: "$1".',
+'badfiletype'	=> "\".$1\" ez da gomendatutako irudi fitxategi formatua.",
+'largefile'		=> 'Ez da gomendagarria fitxategiak $1 bytetik gorakoak izatea; fitxategi honek $2 byte ditu',
+'largefileserver' => 'Fitxategi hau zerbitzariak baimentzen duena baino handiagoa da.',
+'emptyfile'		=> 'Badirudi igotzen ari zaren fitxategia hutsik dagoela. Mesedez, egiaztatu fitxategi hori dela igo nahi duzuna.',
+'fileexists'		=> 'Badago izen hori daukan fitxategi bat; mesedez, ikusi existitzen den $1 fitxategia aldatu nahi duzun egiaztatzeko.',
+'fileexists-forbidden' => 'Badago izen hori daukan fitxategi bat; mesedez, atzera itzuli eta igo fitxategia izen ezberdin batekin. [[Image:$1|thumb|center|$1]]',
+'fileexists-shared-forbidden' => 'Badago izen hori daukan fitxategi bat elkarbanatutako fitxategi-biltegian; mesedez, atzera itzuli eta igo fitxategia izen ezberdin batekin. [[Image:$1|thumb|center|$1]]',
+'successfulupload' => 'Igoera arrakastatsua',
+'fileuploaded'	=> "$1 fitxategia igo da. Mesedez, jarraitu hurrengo lotura hau: jo $2 deskribapen orrialdera eta fitxategiaren inguruko informazioa osatu, hala nola bere jatorria, noiz sortu den eta nork, eta fitxategiaren inguruan jakin beharko litzatekeen beste edozein datu. Hau irudi bat bada, honela txertatu dezakezu: <tt><nowiki>[[Image:$1|thumb|Deskribapena]]</nowiki></tt>",
+'uploadwarning' => 'Igotzeko oharra',
+'savefile'		=> 'Fitxategia gorde',
+'uploadedimage' => "\"[[$1]]\" igo da",
+'uploaddisabled' => 'Igoerak ezgaituta daude',
+'uploaddisabledtext' => 'Fitxategiak igotzea ezgaituta dago wiki honetan.',
+'uploadscripted' => 'Fitxategi honek web zerbitzariak modu ezegokian interpretatu lezakeen HTML edo script kodea dauka.',
+'uploadcorrupt' => 'Fitxategiak akatsak ditu edo luzapena ezegokia da. Mesedez, egiaztatu fitxategia ondo dagoela eta berriz igo.',
+'uploadvirus' => 'Fitxategiak birusa dauka! Xehetasunak: $1',
+'sourcefilename' => 'Iturri-fitxategiaren izena',
+'destfilename' => 'Helburu fitxategi izena',
+'watchthisupload'	=> 'Orrialde hau jarraitu',
+'filewasdeleted' => 'Izen hau duen fitxategi bat igo eta ezabatu da jada. $1 aztertu beharko zenuke berriz igo aurretik.',
+
+'license' => 'Lizentzia',
+'nolicense' => 'Hautatu gabe',
+'upload_source_url' => ' (baliozko URL publikoa)',
+'upload_source_file' => ' (zure ordenagailuko fitxategi bat)',
+
+# Image list
+#
+'imagelist'		=> 'Fitxategien zerrenda',
+'imagelisttext' => "Jarraian duzu $2(e)z ordenatutako {{plural:$1|fitxategi baten|'''$1''' fitxategiren}} zerrenda.",
+'imagelistforuser' => "Honek $1(e)k igotako irudiak bakarrik erakusten ditu.",
+'getimagelist'	=> 'fitxategi zerrenda jasotzen',
+'ilsubmit'		=> 'Bilatu',
+'showlast'		=> 'Erakutsi azken $1 fitxategiak $2 ordenatuta.',
+'byname'		=> 'izenaren arabera',
+'bydate'		=> 'dataren arabera',
+'bysize'		=> 'tamainaren arabera',
+'imgdelete'		=> 'ezb',
+'imgdesc'		=> 'desk',
+'imgfile'       => 'fitxategia',
+'imglegend'		=> 'Legenda: (desk) = fitxategiaren deskribapena erakutsi/aldatu.',
+'imghistory'	=> 'Fitxategiaren historia',
+'revertimg'		=> 'des',
+'deleteimg'		=> 'ezb',
+'deleteimgcompletely'		=> 'Fitxategi honen bertsio guztiak ezabatu',
+'imghistlegend' => 'Legenda: (orain) = oraingo fitxategia, (ezab) = ezabatu bertsio zahar hau, (ber) = bertsio zahar honetara itzuli. <br /><i>Dataren gainean klik egin egun hartan igotako fitxategia ikusteko</i>.',
+'imagelinks'	=> 'Loturak',
+'linkstoimage'	=> 'Hurrengo orrialdeek dute fitxategi honetarako lotura:',
+'nolinkstoimage' => 'Ez dago fitxategi honetara lotura egiten duen orrialderik.',
+'sharedupload' => 'Fitxategi hau elkarbanatutako igoera bat da eta beste proiektuek ere erabil dezakete.',
+'shareduploadwiki' => 'Informazio gehiagorako $1 ikusi mesedez.',
+'shareduploadwiki-linktext' => 'fitxategiaren deskribapen orrialdea',
+'noimage'       => 'Ez dago fitxategirik izen honekin, $1 dezakezu nahi baduzu.',
+'noimage-linktext'       => 'igo egin',
+'uploadnewversion-linktext' => 'Fitxategi honen bertsio berri bat igo',
+'imagelist_date' => 'Data',
+'imagelist_name' => 'Izena',
+'imagelist_user' => 'Erabiltzailea',
+'imagelist_size' => 'Tamaina (byte)',
+'imagelist_description' => 'Deskribapena',
+'imagelist_search_for' => 'Irudiaren izenagatik bilatu:',
+
+# Mime search
+#
+'mimesearch' => 'MIME bilaketa',
+'mimetype' => 'MIME mota:',
+'download' => 'deskargatu',
+
+# Unwatchedpages
+#
+'unwatchedpages' => 'Jarraitu gabeko orrialdeak',
+
+# List redirects
+'listredirects' => 'Birzuzenketen zerrenda',
+
+# Unused templates
+'unusedtemplates' => 'Erabili gabeko txantiloiak',
+'unusedtemplatestext' => 'Orrialde honetan beste edozein orrialdetan erabiltzen ez diren txantiloi izen-tarteko orrialdeak zerrendatzen dira. Ez ahaztu txantiloietara egon daitezkeen loturak egiaztatzeaz ezabatu aurretik.',
+'unusedtemplateswlh' => 'beste loturak',
+
+# Random redirect
+'randomredirect' => 'Ausazko birzuzenketa',
+
+# Statistics
+#
+'statistics'	=> 'Estatistikak',
+'sitestats'		=> '{{SITENAME}}(e)ko estatistikak',
+'userstats'		=> 'Erabiltzaile estatistikak',
+'sitestatstext' => "Datu-basean guztira '''$1''' orrialde daude.
+Kopuru horretan \"eztabaida\" orrialdeak, {{SITENAME}}(r)i buruzko orrialdeak, zirriborroak, birzuzenketak eta eduki orrialde bezala kontsideratu ezin diren beste batzuk ere kontuan hartzen dira. Horiek baztertuz, '''$2''' orrialde daude ziurrenik edukia daukatenak. 
+
+'''$8''' fitxategi igo dira.
+
+Guztira '''$3''' orrialde irakurketa egon dira, eta '''$4''' orrialde aldaketa wikia abian jarri zenez geroztik.
+Horren arabera, '''$5''' aldaketa egin dira orrialde bakoitzeko bataz beste, eta aldaketa bakoitzeko '''$6''' irakurketa egin dira.
+
+[http://meta.wikimedia.org/wiki/Help:Job_queue Atazen zerrendaren] luzera '''$7'''(e)koa da.",
+'userstatstext' => "'''$1''' erabiltzaile daude izen emanda, horietatik '''$2''' (edo '''$4%''') $5 direlarik.",
+'statistics-mostpopular' => 'Orrialde bisitatuenak',
+
+'disambiguations'	=> 'Argipen orrialdeak',
+'disambiguationspage'	=> 'Template:argipen',
+'disambiguationstext'	=> "Jarraian zerrendatutako orrialdeek <i>argipen orrialde</i> baterako lotura daukate. Horrez ordez, lotura egokia ipini beharko litzaieke.<br /> Orrialde bat argipen bezala antzematen da $1(e)tik lotura baldin badauka.<br />Beste izen-tarte batzutatik datozen loturak <i>ez</i> dira erakusten.",
+
+'doubleredirects'	=> 'Birzuzenketa bikoitzak',
+'doubleredirectstext'	=> "Lerro bakoitzean lehen eta bigarren birzuzenketetarako loturak ikus daitezke, eta baita edukia daukan edo eduki beharko lukeen orrialderako lotura ere. Lehen birzuzenketak azken honetara zuzendu beharko luke.",
+
+'brokenredirects'	=> 'Hautsitako birzuzenketak',
+'brokenredirectstext'	=> 'Jarraian zerrendatutako birzuzenketak existitzen ez diren orrialdeetara zuzenduta daude:',
+
+# Miscellaneous special pages
+#
+'nbytes'		=> '{{PLURAL:$1|byte 1|$1 byte}}',
+'ncategories'		=> '{{PLURAL:$1|kategoria 1|$1 kategoria}}',
+'nlinks'		=> '{{PLURAL:$1|lotura 1|$1 lotura}}',
+'nmembers'		=> '{{PLURAL:$1|partaide 1|$1 partaide}}',
+'nrevisions'		=> '{{PLURAL:$1|berrikuspen 1|$1 berrikuspen}}',
+'nviews'		=> '{{PLURAL:$1|ikusketa 1|$1 ikusketa}}',
+
+'lonelypages'	=> 'Orrialde umezurtzak',
+'lonelypagestext'	=> 'Jarraian zerrendatutako orrialdeek ez daukate wikiko beste orrialdeetatik loturarik.',
+'uncategorizedpages'	=> 'Kategorizatu gabeko orrialdeak',
+'uncategorizedcategories'	=> 'Kategorizatu gabeko kategoriak',
+'uncategorizedimages' => 'Kategorizatu gabeko irudiak',
+'unusedcategories' => 'Erabili gabeko kategoriak',
+'unusedimages'	=> 'Erabili gabeko fitxategiak',
+'popularpages'	=> 'Orrialde bisitatuenak',
+'wantedcategories' => 'Eskatutako kategoriak',
+'wantedpages'	=> 'Eskatutako orrialdeak',
+'mostlinked'	=> 'Gehien lotutako orrialdeak',
+'mostlinkedcategories' => 'Gehien lotutako kategoriak',
+'mostcategories' => 'Sailkapenean kategoria gehien dituzten orrialdeak',
+'mostimages'	=> 'Gehien lotutako irudiak',
+'mostrevisions' => 'Berrikuspen gehien dituzten orrialdeak',
+'allpages'		=> 'Orrialde guztiak',
+'prefixindex'   => 'Aurrizkien aurkibidea',
+'randompage'	=> 'Ausazko orrialdea',
+'shortpages'	=> 'Orrialde laburrak',
+'longpages'		=> 'Orrialde luzeak',
+'deadendpages'  => 'Orrialde itsuak',
+'deadendpagestext'	=> 'Jarraian zerrendatutako orrialdeek ez daukate wikiko beste edozein orrialdetarako loturarik.',
+'listusers'		=> 'Erabiltzaileen zerrenda',
+'specialpages'	=> 'Aparteko orrialdeak',
+'spheading'		=> 'Erabiltzaile guztientzako aparteko orrialdeak',
+'restrictedpheading'	=> 'Mugatutako aparteko orrialdeak',
+'recentchangeslinked' => 'Lotutako orrialdeen aldaketak',
+'rclsub'		=> "(\"$1\"(e)tik lotutako orrialdeetara)",
+'newpages'		=> 'Orrialde berriak',
+'newpages-username' => 'Erabiltzaile izena:',
+'ancientpages'		=> 'Orrialde zaharrenak',
+'intl'		=> 'Hizkuntzen arteko loturak',
+'move' => 'Move',
+'movethispage'	=> 'Orrialde hau mugitu',
+'unusedimagestext' => '<p>Mesedez, kontuan izan beste webgune batzutatik URL zuzena erabiliz lotura izan dezaketela irudira, eta kasu horretan ez lirateke hemengo zerrendetan azalduko.</p>',
+'unusedcategoriestext' => 'Hurrengo kategoria orrialde guztiak datu-basean existitzen dira, baina ez du inongo orrialde edo kategoriak erabiltzen.',
+
+'booksources'	=> 'Iturri liburuak',
+'categoriespagetext' => 'Hurrengo kategoriak daude wiki honetan:',
+'data'	=> 'Datuak',
+'userrights' => 'Erabiltzaile baimenen kudeaketa',
+'groups' => 'Erabiltzaile taldeak',
+
+'booksources-text' => "Jarraian liburu berri eta erabiliak saltzen dituzten guneetarako loturen zerrenda bat ikus dezakezu, bilatzen ari zaren liburu horientzako informazio gehigarria aurkitzeko lagungarria izan daitekeena:",
+'isbn'	=> 'ISBN',
+'alphaindexline' => "$1(e)tik $2(e)raino",
+'version'		=> 'Bertsioa',
+'log'		=> 'Erregistroak',
+'alllogstext'	=> 'Igoera, ezabaketa, babes, blokeaketa eta administratzaile erregistroen erakusketa. Zerrenda mugatu dezakezu erregistro mota, erabiltzaile izena edo eragindako orrialdea aukeratuz.',
+'logempty' => 'Ez dago emaitzarik erregistroan.',
+
+
+# Special:Allpages
+'nextpage'          => 'Hurrengo orrialdea ($1)',
+'allpagesfrom'		=> 'Honela hasten diren orrialdeak erakutsi:',
+'allarticles'		=> 'Artikulu guztiak',
+'allinnamespace'	=> 'Orrialde guztiak ($1 izen-tartea)',
+'allnotinnamespace'	=> 'Orrialde guztiak ($1 izen-tartean ez daudenak)',
+'allpagesprev'		=> 'Aurrekoa',
+'allpagesnext'		=> 'Hurrengoa',
+'allpagessubmit'	=> 'Joan',
+'allpagesprefix'	=> 'Aurrizki hau duten orrialdeak bistaratu:',
+'allpagesbadtitle'	=> 'Orrialdearen izena baliogabekoa da edo interwiki edo hizkuntzen arteko aurrizkia dauka. Izenburuetan erabili ezin daitezkeen karaktere bat edo gehiago izan ditzake.',
+
+# Special:Listusers
+'listusersfrom' => 'Hemendik aurrerako erabiltzaileak bistaratu:',
+
+# E this user
+#
+'mailnologin'	=> 'Bidalketa helbiderik ez',
+'mailnologintext' => "Beste erabiltzaileei e-posta mezuak bidaltzeko [[Special:Userlogin|saioa hasi]] eta baliozko e-posta helbidea behar duzu izan zure [[Special:Preferences|hobespenetan]].",
+'emailuser'		=> 'Erabiltzaile honi e-posta bidali',
+'emailpage'		=> 'Erabiltzaileari e-posta bidali',
+'emailpagetext'	=> 'Erabiltzaile honek baliozko e-posta helbide bat ezarri badu bere hobespenetan, beheko formularioa erabiliz mezu bat bidal dakioke. Hobespenetan daukazun e-posta helbidea azalduko da mezuaren bidaltzaile bezala eta beraz erantzun ahal izango dizu.',
+'usermailererror' => 'Mail objektuak errore hau itzuli du:',
+'defemailsubject'  => "E-posta {{SITENAME}}(e)tik",
+'noemailtitle'	=> 'Posta helbiderik ez',
+'noemailtext'	=> 'Erabiltzaile honek ez du baliozko posta helbiderik zehaztu edo beste erabiltzaileengandik mezurik ez jasotzea aukeratu du.',
+'emailfrom'		=> 'Nork',
+'emailto'		=> 'Nori',
+'emailsubject'	=> 'Gaia',
+'emailmessage'	=> 'Mezua',
+'emailsend'		=> 'Mezua',
+'emailsent'		=> 'Mezua bidali egin da',
+'emailsenttext' => 'Zure e-posta mezua bidali egin da.',
+
+# Watchlist
+'watchlist'			=> 'Nire jarraipen zerrenda',
+'mywatchlist'			=> 'Nire jarraipen zerrenda',
+'watchlistfor' => "('''$1''')",
+'nowatchlist'		=> 'Zure jarraipen zerrenda hutsik dago.',
+'watchlistanontext' => 'Mesedez $1 zure jarraipen zerrendako orrialdeak ikusi eta aldatu ahal izateko.',
+'watchlistcount' 	=> "'''$1 elementu dituzu zure jarraipen zerrendan, eztabaida orrialdeak barne.'''",
+'clearwatchlist' 	=> 'Jarraipen zerrenda garbitu',
+'watchlistcleartext' => 'Ziur zaude ezabatu nahi dituzula?',
+'watchlistclearbutton' => 'Jarraipen zerrenda garbitu',
+'watchlistcleardone' => 'Zure jarraipen zerrenda garbitu egin da. $1 elementu ezabatu dira.',
+'watchnologin'		=> 'Saioa hasi gabe',
+'watchnologintext'	=> '[[Special:Userlogin|Saioa hasi]] behar duzu zure jarraipen zerrenda aldatzeko.',
+'addedwatch'		=> 'Jarraipen zerrendan gehitu da',
+'addedwatchtext'	=> "\"$1\" orrialdea zure [[Special:Watchlist|jarraipen edo zelatatuen zerrendara]] erantsi da. Orrialde honen hurrengo aldaketak zerrenda horretan ageriko dira aurrerantzean, eta gainera [[Special:Recentchanges|aldaketa berrien zerrendan]] beltzez ageriko da, erraztasunez antzeman ahal izateko.
+
+Jarraipen zerrendatik artikulua kentzeko, artikuluan ''ez jarraitu''ri eman.",
+'removedwatch'		=> 'Jarraipen zerrendatik ezabatuta',
+'removedwatchtext' 	=> "\"[[:$1]]\" orrialdea zure jarraipen zerrendatik kendu da.",
+'watch' => 'Jarraitu',
+'watchthispage'		=> 'Orrialde hau jarraitu',
+'unwatch' => 'Ez jarraitu',
+'unwatchthispage' 	=> 'Jarraitzeari utzi',
+'notanarticle'		=> 'Ez da eduki orrialdea',
+'watchnochange' 	=> 'Hautatutako denbora tartean ez da aldaketarik izan zure jarraipen zerrendako orrialdeetan.',
+'watchdetails'		=> '* $1 orrialde jarraitzen, eztabaida orrialdeak kontuan hartu gabe
+* [[Special:Watchlist/edit|Jarraipen zerrenda osoa erakutsi eta editatu]]
+* [[Special:Watchlist/clear|Orrialde guztiak kendu]]',
+'wlheader-enotif' 		=> "* Posta bidezko ohartarazpena gaituta dago.",
+'wlheader-showupdated'   => "* Bisitatu zenituen azken alditik aldaketak izan dituzten orrialdeak '''beltzez''' nabarmenduta daude",
+'watchmethod-recent'=> 'Aldaketa berriak aztertzen jarraipen zerrendako orrialdeen bila',
+'watchmethod-list'	=> 'jarraipen zerrendako orrialdeak aldaketa berrien bila aztertzen',
+'removechecked' 	=> 'Hautatutakoak jarraipen zerrendatik ezabatu',
+'watchlistcontains' => "Zure jarraipen zerrendak $1 orrialde ditu.",
+'watcheditlist'		=> 'Hona hemen jarraitzen ari zaren orrialdeen zerrenda alfabetikoa. Zerrendatik kendu nahi dituzun orrialdeak hautatu eta \'hautatutakoak ezabatu\' botoian klik egin (eduki orrialde bat kentzeak bere eztabaida orrialdea kentzea ere suposatzen du, eta alderantziz).',
+'removingchecked' 	=> 'Jarraipen zerrendatik eskatutakoak ezabatzen...',
+'couldntremove' 	=> "Ezin izan da '$1' ezabatu...",
+'iteminvalidname' 	=> "Arazoa '$1' elementuarekin, baliogabeko izena...",
+'wlnote' 		=> 'Jarraian ikus daitezke azken \'\'\'$2\'\'\' egunetako azken $1 aldaketak.',
+'wlshowlast' 		=> 'Erakutsi azken $1 orduak $2 egunak $3',
+'wlsaved'		=> 'Honako hau zure jarraipen zerrendaren gordetako bertsio bat da.',
+'wlhideshowown'   	=> '$1 nire aldaketak',
+'wlhideshowbots'   	=> '$1 bot-en aldaketak',
+'wldone'			=> 'Egina.',
+
+'enotif_mailer' 		=> '{{SITENAME}}(e)ko Oharpen Postaria',
+'enotif_reset'			=> 'Orrialde guztiak bisitatu bezala markatu',
+'enotif_newpagetext'=> 'Honako hau orrialde berria da.',
+'changed'			=> 'aldatu',
+'created'			=> 'sortu',
+'enotif_subject' 	=> '{{SITENAME}}(e)ko $PAGETITLE orrialdea $PAGEEDITOR(e)k $CHANGEDORCREATED du',
+'enotif_lastvisited' => 'Jo $1 orrialdera zure azken bisitaz geroztik izandako aldaketa guztiak ikusteko.',
+'enotif_body' => 'Kaixo $WATCHINGUSERNAME,
+
+{{SITENAME}}(e)ko $PAGETITLE orrialdea $CHANGEDORCREATED egin du $PAGEEDITOR(e)k une honetan: $PAGEEDITDATE, ikus $PAGETITLE_URL azken bertsiorako.
+
+$NEWPAGE
+
+Egilearen laburpena: $PAGESUMMARY $PAGEMINOREDIT
+
+Egilearekin harremanetan jarri:
+e-posta: $PAGEEDITOR_EMAIL
+wiki: $PAGEEDITOR_WIKI
+
+Ez dira oharpen gehiago bidaliko orrialde hau berriz bisitatzen ez baduzu. Horrez gain, orrialdeen oharpen konfigurazioa leheneratu dezakezu jarraipen zerrendatik.
+
+             {{SITENAME}}(e)ko oharpen sistema
+
+--
+Zure jarraipen zerrendako konfigurazioa aldatzeko, ikus
+{{fullurl:{{ns:special}}:Watchlist/edit}}
+
+Laguntza:
+{{fullurl:{{MediaWiki:helppage}}}}',
+
+# Delete/protect/revert
+#
+'deletepage'	=> 'Orrialdea ezabatu',
+'confirm'		=> 'Baieztatu',
+'excontent' => "edukia honakoa zen: '$1'",
+'excontentauthor' => "edukia honakoa zen: '$1' (parte hartu duen lankide bakarra: '$2')",
+'exbeforeblank' => "hustu aurreko edukiera: '$1'",
+'exblank' => 'orrialdea hutsik zegoen',
+'confirmdelete' => 'Ezabaketa baieztatu',
+'deletesub'		=> "(\"$1\" ezabatzen)",
+'historywarning' => 'Kontuz! Ezabatuko duzun orrialdeak honako historia du:',
+'confirmdeletetext' => "Orrialde edo irudi bat eta beste historia guztia datu-basetik ezabatzear zaude. Mesedez, egiaztatu hori egin nahi duzula, ondorioak zeintzuk diren badakizula, eta [[{{MediaWiki:policy-url}}|politikak]] errespetatuz egingo duzula.",
+'policy-url' => 'Project:Politikak',
+'actioncomplete' => 'Ekintza burutu da',
+'deletedtext'	=> "\"$1\" ezabatu egin da. Ikus $2 azken ezabaketen erregistroa ikusteko.",
+'deletedarticle' => "\"[[$1]]\" ezabatu da",
+'dellogpage'	=> 'Ezabaketa erregistroa',
+'dellogpagetext' => 'Behean ikus daiteke azken ezabaketen zerrenda.',
+'deletionlog'	=> 'ezabaketa erregistroa',
+'reverted'		=> 'Lehenagoko berrikuspen batera itzuli da',
+'deletecomment'	=> 'Ezabatzeko arrazoia',
+'imagereverted' => 'Lehenagoko bertsiora leheneratu egin da.',
+'rollback'		=> 'Aldaketak desegin',
+'rollback_short' => 'Desegin',
+'rollbacklink'	=> 'desegin',
+'rollbackfailed' => 'Desegiteak huts egin dud',
+'cantrollback'	=> 'Ezin da aldaketa desegin; erabiltzaile bakarrak hartu du parte.',
+'alreadyrolled'	=> "Ezin da [[User:$2|$2]](e)k ([[User talk:$2|Eztabaida]]) [[$1]](e)n egindako azken aldaketa desegin; beste norbaitek editatu du edo jada desegin du. Azken aldaketa [[User:$3|$3]](e)k ([[User talk:$3|Eztabaida]]) egin du.",
+#   only shown if there is an edit comment
+'editcomment' => "Aldaketaren iruzkina: \"<i>$1</i>\".",
+'revertpage'	=> "$2ren aldaketak ezabatu dira, $1ren azken bertsiora itzuliz.",
+'sessionfailure' => 'Badirudi saioarekin arazoren bat dagoela; bandalismoak saihesteko ekintza hau ezeztatu egin da. Mesedez, nabigatzaileko "atzera" botoian klik egin, hona ekarri zaituen orrialde hori berriz kargatu, eta saiatu berriz.',
+'protectlogpage' => 'Babes erregistroa',
+'protectlogtext' => "Orrialdeen blokeo eta desblokeo zerrenda azaltzen da jarraian.",
+'protectedarticle' => '"[[$1]]" babestu da"',
+'unprotectedarticle' => '"[[$1]]"(r)i babesa kendu zaio',
+'protectsub' => '("$1" babesten)',
+'confirmprotecttext' => 'Ziur zaude orrialde hau babestu nahi duzula?',
+'confirmprotect' => 'Babesa baieztatu',
+'protectmoveonly' => 'Mugitzea babestu bakarrik',
+'protectcomment' => 'Babesteko arrazoia',
+'unprotectsub' =>"(babesa kentzen: \"$1\")",
+'confirmunprotecttext' => 'Ziur zaude orrialde honi babesa kendu nahi diozula?',
+'confirmunprotect' => 'Babesa kentzea baieztatu',
+'unprotectcomment' => 'Babesa kentzeko arrazoia',
+'protect-unchain' => 'Mugitzeko blokeoa kendu',
+'protect-text' => '<strong>$1</strong> orrialdearen babes maila ikusi eta aldatu egin beharko zenuke.',
+'protect-viewtext' => 'Ez daukazu babesak aldatzeko baimenik. Hemen duzu <strong>$1</strong> orrialdearen oraingo konfigurazioa:',
+'protect-default' => '(lehenetsia)',
+'protect-level-autoconfirmed' => 'Erregistratu gabeko erabiltzaileak blokeatu',
+'protect-level-sysop' => 'Administratzaileak bakarrik',
+
+# restrictions (nouns)
+'restriction-edit' => 'Aldatu',
+'restriction-move' => 'Mugitu',
+
+# Undelete
+'undelete' => 'Ezabatutako orrialdeak ikusi',
+'undeletepage' => 'Ezabatutako orrialdeak ikusi eta leheneratu',
+'viewdeletedpage' => 'Ezabatutako orrialdeak ikusi',
+'undeletepagetext' => 'Jarraian zerrendatzen diren orrialdeak ezabatu egin dira baina oraindik artxiboa gordeta daude eta leheneratu egin daitezke. Artxiboa noizean behin hustu egin liteke.',
+'undeleteextrahelp' => "Orrialde osoa leheneratzeko, koadrotxo guztiak hautatu gabe utzi eta '''''Leheneratu'''''n klik egin. Aukeratutako leheneratze bat burutzeko, leheneratu nahi dituzun berrikuspenen koadrotxoak markatu eta '''''Leheneratu''''' klik egin. '''''Hasieratu'''''n klik eginez gero koadrotxo guztiak eta iruzkin koadroa hustu egingo dira.",
+'undeletearticle' => 'Ezabatutako orrialdea leheneratu',
+'undeleterevisions' => "$1 berrikuspen gordeta",
+'undeletehistory' => 'Orrialdea leheneratzen baduzu, berrikuspena guztiak leheneratuko dira historian. Ezabatu ondoren izen berdina duen orrialde berri bat sortzen bada leheneratutako berrikuspenak azalduko dira historian, eta oraingo berrikuspena ez da automatikoki ordezkatuko.',
+'undeletehistorynoadmin' => 'Artikulua ezabatu egin da. Ezabatzeko azalpena beheko laburpenean erakusten da, ezabatu aurretik parte hartu zuten erabiltzaileen xehetasunekin batera. Ezabatutako berrikuspenen oraingo testua administratzaileek bakarrik ikus dezakete.',
+'undeleterevision' => "$1 berrikuspen gordeta",
+'undeletebtn' => 'Leheneratu',
+'undeletereset' => 'Hasieratu',
+'undeletecomment' => 'Iruzkina:',
+'undeletedarticle' => "\"[[$1]]\" leheneratu da",
+'undeletedrevisions' => "$1 berrikuspen leheneratu dira",
+'undeletedrevisions-files' => "$1 berrikuspen eta $2 fitxategi leheneratu dira",
+'undeletedfiles' => "$1 fitxategi leheneratu dira",
+'cannotundelete' => 'Errorea birsortzerakoan; baliteke beste norbaitek lehenago birsortu izana.',
+'undeletedpage' => "<big>'''$1 leheneratu egin da'''</big>
+
+[[Special:Log/delete|Ezabaketa erregistrora]] jo azken ezabaketa eta leheneraketak ikusteko.",
+
+# Namespace form on various pages
+'namespace' => 'Izen-tartea:',
+'invert' => 'Hautapena alderanztu',
+
+# Contributions
+#
+'contributions' => 'Lankidearen ekarpenak',
+'mycontris'     => 'Nire ekarpenak',
+'contribsub2'    => "$1 ($2)",
+'nocontribs'    => 'Ez da ezaugarri horiekin bat datorren aldaketarik aurkitu.',
+'ucnote'        => "Behean agertzen dira erabiltzaile honen azken <b>$1</b> aldaketak azken <b>$2</b> egunetan.",
+'uclinks'       => "Azken $1 aldaketak ikusi; azken $2 egunak ikusi.",
+'uctop'         => ' (Azken aldaketa)' ,
+'newbies'       => 'hasiberriak',
+
+'sp-newimages-showfrom' => 'Irudi berriak erakutsi $1(e)tik hasita',
+
+'sp-contributions-newest' => 'Berriena',
+'sp-contributions-oldest' => 'Zaharrena',
+'sp-contributions-newer'  => '$1 berriago',
+'sp-contributions-older'  => '$1 zaharrago',
+'sp-contributions-newbies-sub' => 'Hasiberrientzako',
+
+
+# What links here
+#
+'whatlinkshere'	=> 'Honekin lotzen diren orrialdeak',
+'whatlinkshere-barrow' => '&lt;',
+'notargettitle' => 'Helburu orrialderik ez',
+'notargettext'	=> 'Ez duzu eragiketa hau burutzeko helburu orrialde edo erabiltzaile bat zehaztu.',
+'linklistsub'	=> '(Loturen zerrenda)',
+'linkshere' => "Hurrengoek dute '''[[:$1]]''' orrialderako lotura:",
+'nolinkshere' => "Ez dago '''[[:$1]]''' lotura duen orrialderik.",
+'isredirect'	=> 'berbideraketa orrialdea',
+'istemplate'	=> 'erabilpena',
+
+# Block/unblock IP
+#
+'blockip'		=> 'Erabiltzailea blokeatu',
+'blockiptext'	=> "IP helbide edo erabiltzaile izen bati idazketa baimenak kentzeko beheko formularioa erabil dezakezu. Ekintza hau bandalismoa saihesteko baino ez da burutu behar, eta beti ere [[{{MediaWiki:policy-url}}|politikak]] errespetatuz. Blokeoaren arrazoi bat ere zehaztu ezazu (adibidez, orrialde batzuk zehaztuz).",
+'ipaddress'		=> 'IP Helbidea',
+'ipadressorusername' => 'IP Helbidea edo erabiltzaile izena',
+'ipbexpiry'		=> 'Iraungipena',
+'ipbreason'		=> 'Arrazoia',
+'ipbanononly'   => 'Erabiltzaile anonimoak bakarrik blokeatu',
+'ipbcreateaccount' => 'Kontua sortzea debekatu',
+'ipbsubmit'		=> 'Erabiltzaile hau blokeatu',
+'ipbother'		=> 'Beste denbora-tarte bat',
+'ipboptions'		=> '15 minutu:15 minutes,30 minutu:30 minutes,ordu 1:1 hour,2 ordu:2 hours,egun bat:1 day,3 egun:3 days,aste 1:1 week,2 aste:2 weeks,hilabete 1:1 month,betirako:infinite',
+'ipbotheroption'	=> 'beste bat',
+'badipaddress'	=> 'Baliogabeko IP helbidea',
+'blockipsuccesssub' => 'Blokeoa burutu da',
+'blockipsuccesstext' => '[[{{ns:Special}}:Contributions/$1|$1]] erabiltzaileari blokeoa ezarri zaio. Ikus [[{{ns:Special}}:Ipblocklist|IP blokeoen zerrenda]] blokeoak aztertzeko.',
+'unblockip'		=> 'Erabiltzailea desblokeatu',
+'unblockiptext'	=> 'Erabili beheko formularioa lehenago blokeatutako IP helbide edo erabiltzaile baten idazketa baimenak leheneratzeko.',
+'ipusubmit'		=> 'Helbide hau desblokeatu',
+'unblocked' => '[[User:$1|$1]] desblokeatu egin da',
+'ipblocklist'	=> 'Blokeatutako IP helbide eta erabiltzaileen zerrenda',
+'blocklistline'	=> "$1, $2(e)k $3 blokeatu du (iraungipena: $4)",
+'infiniteblock' => 'infinitu',
+'expiringblock' => 'iraungipen data: $1',
+'anononlyblock' => 'anon. soilik',
+'createaccountblock' => 'kontua sortzea blokeatuta',
+'ipblocklistempty'	=> 'Blokeo zerrenda hutsik dago.',
+'blocklink'		=> 'blokeatu',
+'unblocklink'	=> 'blokeoa kendu',
+'contribslink'	=> 'ekarpenak',
+'autoblocker'	=> '"[[User:$1|$1]]"(e)k berriki erabili duen IP helbidea duzulako autoblokeatu zaizu. $1(e)k emandako arrazoia zera da: "\'\'\'$2\'\'\'"',
+'blocklogpage'	=> 'Blokeo erregistroa',
+'blocklogentry'	=> '"[[User:$1|$1]]" $2(e)ko iraungipenarekin blokeatu da.',
+'blocklogtext'	=> 'Erabiltzaileen blokeoen ezarpen eta ezabaketen erregistroa da hau. Ez dira automatikoki blokeatutako IP helbideak zerrendatzen. Ikus [[Special:Ipblocklist|IP blokeoen zerrenda]] aktibo dauden blokeoak aztertzeko.',
+'unblocklogentry'	=> '$1 desblokeatu da',
+'range_block_disabled'	=> 'Administratzaileak IP eremuak blokeatzeko gaitasuna ezgaituta dago.',
+'ipb_expiry_invalid'	=> 'Baliogabeko iraungipen denbora',
+'ipb_already_blocked' => '"$1" badago blokeatuta',
+'ip_range_invalid'	=> 'Baliogabeko IP eremua.',
+'proxyblocker'	=> 'Proxy blokeatzailea',
+'ipb_cant_unblock' => 'Errorea: Ez da $1 IDa duen blokeoa aurkitu. Baliteke blokeoa jada kenduta egotea.',
+'proxyblockreason'	=> 'Zure IP helbidea blokeatu egin da proxy ireki baten zaudelako. Mesedez, zure Interneteko Zerbitzu Hornitzailearekin harremanetan jar zaitez segurtasun arazo honetaz ohartarazteko.',
+'proxyblocksuccess'	=> 'Egina.',
+'sorbs'         => 'SORBS DNSBL',
+'sorbsreason'   => 'Zure IP helbidea proxy ireki bezala zerrendatuta dago [http://www.sorbs.net SORBS]eko DNSBLan.',
+'sorbs_create_account_reason' => 'Zure IP helbidea proxy ireki bezala zerrendatuta dago [http://www.sorbs.net SORBS]eko DNSBLan. Ezin duzu kontua sortu.',
+
+# Developer tools
+#
+'lockdb'		=> 'Datu-basea blokeatu',
+'unlockdb'		=> 'Datu-basea desblokeatu',
+'lockdbtext'	=> 'Datu-basea blokeatzeak edozein erabiltzailek orrialdeak aldatzea, hobespenak aldatzea, jarraipen zerrendan aldaketak egitea, eta datu-basean edozein aldaketa behar duen edozein ekintza galaraziko du. Mesedez, baieztatu zure asmoa hori dela, eta blokeoa kenduko duzula mantenua burutu ondoren.',
+'unlockdbtext'	=> 'Datu-basea desblokeatzerakoan erabiltzaile guztiek orrialdeak aldatu, beraien hobespenak ezarri, jarraipen zerrendan aldaketak egin eta beste eragiketa batzuk burutzeko gaitasuna leheneratuko du. Mesedez, baieztatu egin nahi duzuna hori dela.',
+'lockconfirm'	=> 'Bai, datu-basea blokeatu nahi dut',
+'unlockconfirm'	=> 'Bai, datu-basea desblokeatu nahi dut',
+'lockbtn'		=> 'Datu-basea blokeatu',
+'unlockbtn'		=> 'Datu-basea desblokeatu',
+'locknoconfirm' => 'Ez duzu baieztapen kutxa hautatu.',
+'lockdbsuccesssub' => 'Datu-basea blokeatu egin da',
+'unlockdbsuccesssub' => 'Datu-basearen blokeoa kendu da',
+'lockdbsuccesstext' => 'Datu-basea blokeatu egin da. <br />Ez ahaztu mantenu lanak burutu ondoren [[Special:Unlockdb|blokeoa kentzeaz]].',
+'unlockdbsuccesstext' => 'Datu-basea desblokeatu egin da.',
+'lockfilenotwritable' => 'Ezin da datu-baseko blokeo fitxategian idatzi. Datu-basea blokeatu edo desblokeatzeko, zerbitzariak idazteko aukera izan beharra dauka.',
+'databasenotlocked' => 'Datu-basea ez dago blokeatuta.',
+
+# Make sysop
+'rightslog'		=> 'Erabiltzaile eskubideen erregistroa',
+'rightslogtext'		=> 'Erabiltzaile eskubideetan izandako aldaketen erregistroa da hau.',
+'rightslogentry'	=> '$1(r)en partaidetza aldatu da $2(e)tik $3(e)ra',
+'rightsnone' 		=> '(bat ere ez)',
+
+# Move page
+#
+'movepage'		=> 'Orrialdea mugitu',
+'movepagetext'	=> 'Hurrengo pausoak jarraituz, artikulu edo orrialde baten izena aldatu daiteke. Izenburu zaharra, automatikoki izenburu berriari birzuzenduko zaio. 
+Gogora ezazu, orrialdearen izena ez dela aldatuko, nahi duzun izena dagoeneko sortuta badago Wikipedian; birzuzenketa bat edo historiarik gabeko orrialde bat ez bada.
+
+<b>KONTUZ!</b>
+Artikulu oso erabilia edo asko aldatzen denaren izenburua aldatzera bazoaz, mesedez, lehenbizi artikuluaren eztabaidan adierazi ezazu beste lankideen iritziak jasotzeko.',
+'movepagetalktext' => 'Dagokion eztabaida orrialdea berarekin batera mugitu da, honako kasu hauetan \'\'\'ezik:\'\'\'
+* Hutsik ez dagoen eztabaida orrialde bat existitzen bada izen berrian.
+* Beheko koadroa hautatzen ez baduzu.
+
+Kasu horietan orrialdea eskuz mugitu edo bestearekin bateratu beharko duzu.',
+'movearticle'	=> 'Orrialdea mugitu',
+'movenologin'	=> 'Saioa hasi gabe',
+'movenologintext' => "Orrialde bat mugitzeko erregistratutako erabiltzailea izan behar duzu eta [[Special:Userlogin|saioa hasi]].",
+'newtitle'		=> 'Izenburu berria',
+'movepagebtn'	=> 'Orrialde mugitu',
+'pagemovedsub'	=> 'Mugimendua eginda',
+'pagemovedtext' => "\"$1\" izenburua \"$2\"(r)en truke aldatu da.",
+'articleexists' => 'Izen hori duen artikulu bat badago edo hautatutako izena ez da baliozkoa. Mesedez, beste izen bat aukeratu.',
+'talkexists'	=> "'''Orrialde hau arazorik gabe mugitu da, baina eztabaida orrialde ezin izan da mugitu izenburu berriarekin jada bat existitzen delako. Mesedez, eskuz batu itzazu biak.'''",
+'movedto'		=> 'hona mugitu da:',
+'movetalk'		=> 'Eztabaida orrialdea ere mugitu, ahal bada.',
+'talkpagemoved' => 'Artikulu honen eztabaida ere mugitu egin da.',
+'talkpagenotmoved' => 'Artikulu honen eztabaida <strong>ez</strong> da mugitu.',
+'1movedto2'		=> '$1 izenburua $2(r)engatik aldatu da',
+'1movedto2_redir' => '$1 izenburua $2(r)engatik aldatu da birzuzenketaren gainetik',
+'movelogpage' => 'Mugimendu erregistroa',
+'movelogpagetext' => 'Mugitutako orrialdeen zerrenda bat azaltzen da jarraian.',
+'movereason'	=> 'Arrazoia',
+'revertmove'	=> 'desegin',
+'delete_and_move' => 'Ezabatu eta mugitu',
+'delete_and_move_text'	=>
+'== Ezabatzeko beharra ==
+
+"[[$1]]" helburua existitzen da. Lekua egiteko ezabatu nahi al duzu?',
+'delete_and_move_confirm' => 'Bai, orrialdea ezabatu',
+'delete_and_move_reason' => 'Lekua egiteko ezabatu da',
+'selfmove' => "Helburu izenburua berdina da; ezin da orrialde bat bere gainera mugitu.",
+'immobile_namespace' => "Hasierako edo amaierako izenburua Aparteko motakoa da; ezin da izen-tarte horretatik eta horretara ezer mugitu.",
+
+# Export
+
+'export'		=> 'Orrialdeak esportatu',
+'exporttext'	=> 'Orrialde bat edo batzuen testua eta historia esportatu dezakezu XML fitxategi batzuetan. Ondoren, MediaWiki erabiltzen duen beste wiki baten jarri dezakezu Special:Import orrialdea erabiliz.
+
+Orrialdeak esportatzeko zehaztu hauen izenburuak beheko koadroan, izenburu bat lerroko, eta aukeratu zein bertsio esportatu nahi dituzun.
+
+Horrez gain, lotura zuzena ere erabil dezakezu; adibidez, [[{{ns:Special}}:Export/{{int:mainpage}}]] {{int:mainpage}} orrialdearentzako.',
+'exportcuronly'	=> 'Oraingo berrikuspena bakarrik hartu, ez historia guztia',
+'exportnohistory' => "----
+'''Oharra:''' Formulario honen bitartez orrialdeen historia osoak esportatzeko aukera ezgaitu egin da, errendimendua dela-eta.",
+'export-submit' => 'Esportatu',
+
+# Namespace 8 related
+
+'allmessages'	=> 'Sistemako mezu guztiak',
+'allmessagesname' => 'Izena',
+'allmessagesdefault' => 'Testu lehenetsia',
+'allmessagescurrent' => 'Oraingo testua',
+'allmessagestext'	=> 'MediaWikin erabiltzen diren mezu guztien zerrenda:',
+'allmessagesnotsupportedUI' => 'Aukeratuta duzun hizkuntza (\'\'\'$1\'\'\') ez du Special:Allmessages orrialdeak onartzen gune honetan.',
+'allmessagesnotsupportedDB' => 'Ezin da \'\'\'Special:Allmessages\'\'\' erabili \'\'\'$wgUseDatabaseMessages\'\'\' ezgaituta dagoelako.',
+'allmessagesfilter' => 'Mezu izenaren iragazkia:',
+'allmessagesmodified' => 'Aldatutakoak bakarrik erakutsi',
+
+# Thumbnails
+
+'thumbnail-more'	=> 'Handitu',
+'missingimage'		=> '<b>Irudia falta da</b><br /><i>$1</i>',
+'filemissing'		=> 'Fitxategia falta da',
+'thumbnail_error'   => 'Errorea irudi txikia sortzerakoan: $1',
+
+# Special:Import
+'import'	=> 'Orrialdeak inportatu',
+'importinterwiki' => 'Wikien arteko inportazioa',
+'import-interwiki-text' => 'Aukeratu inportatzeko wiki eta orrialde izenburu bat. Berrikuspenen datak eta egileak gorde egingo dira. Inportazio ekintza guzti hauek [[Special:Log/import|inportazio erregistroan]] gordetzen dira.',
+'import-interwiki-history' => 'Orrialde honen historiako bertsio guztiak kopiatu',
+'import-interwiki-submit' => 'Inportatu',
+'import-interwiki-namespace' => 'Izen-tarte honetako orrialdeak transferitu:',
+'importtext'	=> 'Mesedez, jatorrizko wikitik orrialdea esportatzeko Special:Export tresna erabil ezazu, zure diskoan gorde eta jarraian hona igo.',
+'importstart'	=> "Orrialdeak inportatzen...",
+'import-revision-count' => '{{PLURAL:$1|berrikuspen 1|$1 berrikuspen}}',
+'importnopages'	=> "Ez dago orrialderik inportatzeko.",
+'importfailed'	=> "Inportazioak huts egin du: $1",
+'importunknownsource'	=> "Inportazio iturri mota ezezaguna",
+'importcantopen'	=> "Ezin izan da inportazio fitxategia ireki",
+'importbadinterwiki'	=> "Interwiki lotura ezegokia",
+'importnotext'	=> 'Hutsik dago edo testurik gabe',
+'importsuccess'	=> 'Inportazioa burutu da!',
+'importhistoryconflict' => 'Gatazka sortzen ari den berrikuspen historia dago (baliteke orrialdea lehenago inportatu izana)',
+'importnosources' => 'Ez dago wikien arteko inportazio iturririk eta historialak zuzenean igotzea ezgaituta dago.',
+'importnofile' => 'Ez da inportazio fitxategirik igo.',
+'importuploaderror' => 'Inportazio fitxategiaren igoerak huts egin du; baliteke fitxategiaren tamaina baimendutakoa baino handiagoa izatea.',
+
+# import log
+'importlogpage' => 'Inportazio erregistroa',
+'importlogpagetext' => 'Beste wiki batzutatik historial eta guzti egindako orrialdeen inportazio administratiboak.',
+'import-logentry-upload' => '[[$1]] igoera bitartez inportatu da',
+'import-logentry-upload-detail' => '$1 berrikuspen',
+'import-logentry-interwiki' => '$1 wiki artean mugitu da',
+'import-logentry-interwiki-detail' => '$1 berrikuspen $2(e)tik',
+
+# Keyboard access keys for power users
+'accesskey-search' => 'f',
+'accesskey-minoredit' => 'i',
+'accesskey-save' => 's',
+'accesskey-preview' => 'p',
+'accesskey-diff' => 'v',
+'accesskey-compareselectedversions' => 'v',
+'accesskey-watch' => 'w',
+
+# tooltip help for some actions, most are in Monobook.js
+'tooltip-search' => '{{SITENAME}}(e)n bilatu',
+'tooltip-minoredit' => 'Aldaketa txiki bezala markatu hau',
+'tooltip-save' => 'Zure aldaketak gorde',
+'tooltip-preview' => 'Zure aldaketak aurreikusi, mesedez gorde aurretik erabili!',
+'tooltip-diff' => 'Testuari egindako aldaketak erakutsi.',
+'tooltip-compareselectedversions' => 'Orrialde honen bi hautatutako bertsioen arteko ezberdintasunak ikusi.',
+'tooltip-watch' => 'Orrialde hau zure segimendu zerrendan gehitu',
+
+# stylesheets
+'common.css' => '/** Hemen idatzitako CSS kodeak itxura guztietan izango du eragina */',
+'monobook.css' => '/* Hemen idatzitako CSS kodeak Monobook itxuran bakarrik izango du eragina */',
+
+# Metadata
+'nodublincore' => 'Dublin Core RDF metadatuak ezgaitu egin dira zerbitzari honetarako.',
+'nocreativecommons' => 'Creative Commons RDF metadatuak ezgaitu egin dira zerbitzari honetarako.',
+'notacceptable' => 'Wiki zerbitzariak ezin ditu datuak zure bezeroak irakur ditzakeen formatu batean eskaini.',
+
+# Attribution
+
+'anonymous' => '{{SITENAME}}(e)ko lankide anonimoak',
+'siteuser' => '{{SITENAME}}(e)ko $1 erabiltzailea',
+'lastmodifiedatby' => 'Orrialdearen azken aldaketa: $2, $1. Nork: $3.',	// $1 date, $2 time. $3 user
+'and' => 'eta',
+'othercontribs' => '$1(r)en lanean oinarrituta.',
+'others' => 'besteak',
+'siteusers' => '{{SITENAME}}(e)ko $1 erabiltzailea(k)',
+'creditspage' => 'Orrialdearen kredituak',
+'nocredits' => 'Ez dago krediturik eskuragarri orrialde honentzako.',
+
+# Spam protection
+
+'spamprotectiontitle' => 'Spam-arengandik babesteko iragazkia',
+'spamprotectiontext' => 'Gorde nahi duzun orrialdea spam iragazkiak blokeatu du. Baliteke kanpo lotura batek sortzea arazo hori.',
+'spamprotectionmatch' => 'Gure spam iragazkiak testu hau antzeman du: $1',
+'subcategorycount' => "{{PLURAL:$1|Azpikategoria bat dago|$1 azpikategoria daude}} kategoria honetan.",
+'categoryarticlecount' => "Kategoria honetan {{PLURAL:$1|artikulu bakarra dago|$1 artikulu daude}}.",
+'listingcontinuesabbrev' => " jarr.",
+'spambot_username' => 'MediaWikiren spam garbiketa',
+'spam_reverting' => '$1(e)rako loturarik ez daukan azken bertsiora itzultzen',
+'spam_blanking' => 'Berrikuspen guztiek $1(e)rako lotura zeukaten, husten',
+
+# Info page
+'infosubtitle' => 'Orrialdearen informazioa',
+'numedits' => 'Aldaketa kopurua (artikulua): $1',
+'numtalkedits' => 'Aldaketa kopurua (eztabaida orrialdea): $1',
+'numwatchers' => 'Jarraitzaile kopurua: $1',
+'numauthors' => 'Egile ezberdinen kopurua (artikulua): $1',
+'numtalkauthors' => 'Egile ezberdinen kopurua (eztabaida orrialdea): $1',
+
+# Math options
+'mw_math_png' => 'Beti PNG irudiak sortu',
+'mw_math_simple' => 'Oso sinplea bada HTML, eta bestela PNG',
+'mw_math_html' => 'Posible bada HTML, eta bestela PNG',
+'mw_math_source' => 'TeX bezala utzi (testu bidezko nabigatzaileentzako)',
+'mw_math_modern' => 'Nabigatzaile berrientzako gomendatuta',
+'mw_math_mathml' => 'MathML posible bada (proba fasean)',
+
+# Patrolling
+'markaspatrolleddiff'   => "Patruilatu bezala markatu",
+'markaspatrolledtext'   => "Artikulu hau patruilatu bezala markatu",
+'markedaspatrolled'     => "Patruilatu bezala markatu da",
+'markedaspatrolledtext' => "Hautatutako berrikuspena patruilatu bezala markatu da.",
+'rcpatroldisabled'      => "Aldaketa berrien patruilaketa ezgaituta dago",
+'rcpatroldisabledtext'  => "Aldaketa berrien patruilaketa ezaugarria ezgaituta dago orain.",
+'markedaspatrollederror'  => "Ezin da patruilatu bezala markatu",
+'markedaspatrollederrortext' => "Patruilatu bezala markatzeko berrikuspen bat hautatu beharra daukazu.",
+
+# Monobook.js: tooltips and access keys for monobook
+'monobook.js' => '/* Deprecated; use [[MediaWiki:common.js]] */',
+
+'accesskey-pt-userpage' => '.',
+'tooltip-pt-userpage' => 'Nire lankide orrialdea',
+'accesskey-pt-anonuserpage' => '.',
+'tooltip-pt-anonuserpage' => 'Zure IParen lankide orrialdea',
+'accesskey-pt-mytalk' => 'n',
+'tooltip-pt-mytalk' => 'Nire eztabaida orrialdea',
+'accesskey-pt-anontalk' => 'n',
+'tooltip-pt-anontalk' => 'Zure IParen eztabaida',
+'accesskey-pt-preferences' => '',
+'tooltip-pt-preferences' => 'Nire hobespenak',
+'accesskey-pt-watchlist' => 'l',
+'tooltip-pt-watchlist' => 'Jarraitzen dituzun orrialdeen zerrenda.',
+'accesskey-pt-mycontris' => 'y',
+'tooltip-pt-mycontris' => 'Nire ekarpenak',
+'accesskey-pt-login' => 'o',
+'tooltip-pt-login' => 'Izen ematera gonbidatzen zaitugu.',
+'accesskey-pt-anonlogin' => 'o',
+'tooltip-pt-anonlogin' => 'Izen ematera gonbidatzen zaitugu.',
+'accesskey-pt-logout' => 'o',
+'tooltip-pt-logout' => 'Saioa itxi',
+'accesskey-ca-talk' => 't',
+'tooltip-ca-talk' => 'Artikuluari buruzko eztabaida',
+'accesskey-ca-edit' => 'e',
+'tooltip-ca-edit' => 'Artikulu hau aldatu dezakezu. Mesedez, aurrebista botoia erabil ezazu gorde baino lehen.',
+'accesskey-ca-addsection' => '+',
+'tooltip-ca-addsection' => 'Eztabaida honetan iruzkin bat erantsi ezazu.',
+'accesskey-ca-viewsource' => 'e',
+'tooltip-ca-viewsource' => 'Artikulu hau babesturik dago. Bere kodea soilik ikus dezakezu.',
+'accesskey-ca-history' => 'h',
+'tooltip-ca-history' => 'Artikulu honen aurreko bertsioak.',
+'accesskey-ca-protect' => '=',
+'tooltip-ca-protect' => 'Artikulu hau babestu',
+'accesskey-ca-delete' => 'd',
+'tooltip-ca-delete' => 'Artikulu hau ezabatu',
+'accesskey-ca-undelete' => 'd',
+'tooltip-ca-undelete' => 'Ezabatu baino lehenago egindako aldaketak berrezarri.',
+'accesskey-ca-move' => 'm',
+'tooltip-ca-move' => 'Orrialde hau mugitu',
+'accesskey-ca-watch' => 'w',
+'tooltip-ca-watch' => 'Orrialde hau jarraipen zerrendan gehitu',
+'accesskey-ca-unwatch' => 'w',
+'tooltip-ca-unwatch' => 'Orrialde hau jarraipen zerrendatik kendu',
+'accesskey-search' => 'f',
+'tooltip-search' => 'Wiki honetan bilatu',
+'accesskey-p-logo' => '',
+'tooltip-p-logo' => 'Azala',
+'accesskey-n-mainpage' => 'z',
+'tooltip-n-mainpage' => 'Azala bisitatu',
+'accesskey-n-portal' => '',
+'tooltip-n-portal' => 'Proiektuaren inguruan, zer egin dezakezu, non aurkitu nahi duzuna',
+'accesskey-n-currentevents' => '',
+'tooltip-n-currentevents' => 'Oraingo gertaeren inguruko informazio gehigarria',
+'accesskey-n-recentchanges' => 'r',
+'tooltip-n-recentchanges' => 'Wikiko azken aldaketen zerrenda.',
+'accesskey-n-randompage' => 'x',
+'tooltip-n-randompage' => 'Ausazko orrialde bat kargatu',
+'accesskey-n-help' => '',
+'tooltip-n-help' => 'Aurkitzeko lekua.',
+'accesskey-n-sitesupport' => '',
+'tooltip-n-sitesupport' => 'Lagun iezaguzu',
+'accesskey-t-whatlinkshere' => 'j',
+'tooltip-t-whatlinkshere' => 'Hona lotzen duten wiki orrialde guztien zerrenda',
+'accesskey-t-recentchangeslinked' => 'k',
+'tooltip-t-recentchangeslinked' => 'Orrialde honetatik lotutako orrialdeen azken aldaketak',
+'accesskey-feed-rss' => '',
+'tooltip-feed-rss' => 'Orrialde honen RSS jarioa',
+'accesskey-feed-atom' => '',
+'tooltip-feed-atom' => 'Orrialde honen atom jarioa',
+'accesskey-t-contributions' => '',
+'tooltip-t-contributions' => 'Lankide honen ekarpen zerrenda ikusi',
+'accesskey-t-emailuser' => '',
+'tooltip-t-emailuser' => 'Lankide honi e-posta mezua bidali',
+'accesskey-t-upload' => 'u',
+'tooltip-t-upload' => 'Irudiak edo media fitxategiak igo',
+'accesskey-t-specialpages' => 'q',
+'tooltip-t-specialpages' => 'Aparteko orrialde guztien zerrenda',
+'accesskey-ca-nstab-main' => 'c',
+'tooltip-ca-nstab-main' => 'Eduki orrialdea ikusi',
+'accesskey-ca-nstab-user' => 'c',
+'tooltip-ca-nstab-user' => 'Lankide orrialdea ikusi',
+'accesskey-ca-nstab-media' => 'c',
+'tooltip-ca-nstab-media' => 'Media orrialdea ikusi',
+'accesskey-ca-nstab-special' => '',
+'tooltip-ca-nstab-special' => 'Hau aparteko orrialde bat da, ezin duzu orrialdea aldatu.',
+'accesskey-ca-nstab-project' => 'a',
+'tooltip-ca-nstab-project' => 'Proiektuaren orrialdea ikusi',
+'accesskey-ca-nstab-image' => 'c',
+'tooltip-ca-nstab-image' => 'Irudiaren orrialdea ikusi',
+'accesskey-ca-nstab-mediawiki' => 'c',
+'tooltip-ca-nstab-mediawiki' => 'Sistemaren mezua ikusi',
+'accesskey-ca-nstab-template' => 'c',
+'tooltip-ca-nstab-template' => 'Txantiloia ikusi',
+'accesskey-ca-nstab-help' => 'c',
+'tooltip-ca-nstab-help' => 'Laguntza orrialdea ikusi',
+'accesskey-ca-nstab-category' => 'c',
+'tooltip-ca-nstab-category' => 'Kategoria orrialdea ikusi',
+
+# image deletion
+'deletedrevision' => '$1 berrikuspen zaharra ezabatu da.',
+
+# browsing diffs
+'previousdiff' => '← Aurreko ezberdintasuna',
+'nextdiff' => 'Hurrengo ezberdintasuna →',
+
+'imagemaxsize' => 'Irudiak deskribapen-orrialdetan hurrengo tamainara txikitu:',
+'thumbsize'	=> 'Irudi txikiaren tamaina:',
+'showbigimage' => 'Bereizmen handiko bertsioa deskargatu ($1x$2, $3 KB)',
+
+'newimages' => 'Fitxategi berrien galeria',
+'showhidebots' => '($1 bot-ak)',
+'noimages'  => 'Ez dago ezer ikusteko.',
+
+# short names for language variants used for language conversion links.
+# to disable showing a particular link, set it to 'disable', e.g.
+# 'variantname-zh-sg' => 'disable',
+'variantname-zh-cn' => 'cn',
+'variantname-zh-tw' => 'tw',
+'variantname-zh-hk' => 'hk',
+'variantname-zh-sg' => 'sg',
+'variantname-zh' => 'zh',
+# variants for Serbian language
+'variantname-sr-ec' => 'sr-ec',
+'variantname-sr-el' => 'sr-el',
+'variantname-sr-jc' => 'sr-jc',
+'variantname-sr-jl' => 'sr-jl',
+'variantname-sr' => 'sr',
+# variants for Kazakh language
+'variantname-kk-tr' => 'kk-tr',
+'variantname-kk-kz' => 'kk-kz',
+'variantname-kk-cn' => 'kk-cn',
+'variantname-kk' => 'kk',
+
+# labels for User: and Title: on Special:Log pages
+'specialloguserlabel' => 'Lankidea:',
+'speciallogtitlelabel' => 'Izenburua:',
+
+'passwordtooshort' => 'Zure pasahitza laburregia da. $1 karaktere izan behar ditu gutxienez.',
+
+# Media Warning
+'mediawarning' => '\'\'\'Oharra\'\'\': Fitxategi honek kode mingarria izan lezake; zure sisteman exekutatzea arriskutsua izan liteke.<hr />',
+
+'fileinfo' => '$1KB, MIME mota: <code>$2</code>',
+
+# Metadata
+'metadata' => 'Metadatuak',
+'metadata-help' => 'Fitxategi honek informazio gehigarri dauka, ziurrenik kamera digital edo eskanerrak egiterako momentuan gehitutakoa. Hori dela-eta, jatorrizko fitxategi hori aldatu egin bada, baliteke xehetasun batzuek errealitatearekin bat ez egitea.',
+'metadata-expand' => 'Xehetasunak erakutsi',
+'metadata-collapse' => 'Xehetasunak ezkutatu',
+'metadata-fields' => 'Mezu honetan zerrendatutako EXIF metadatu eremuak irudiaren orrialdean erakutsiko dira. Gainontzekoak ezkutatu egindako dira lehenetsi bezala.
+* make
+* model
+* datetimeoriginal
+* exposuretime
+* fnumber
+* focallength',
+
+# Exif tags
+'exif-imagewidth' =>'Width',
+'exif-imagelength' =>'Height',
+'exif-bitspersample' =>'Bits per component',
+'exif-compression' =>'Compression scheme',
+'exif-photometricinterpretation' =>'Pixel composition',
+'exif-orientation' =>'Orientation',
+'exif-samplesperpixel' =>'Number of components',
+'exif-planarconfiguration' =>'Data arrangement',
+'exif-ycbcrsubsampling' =>'Subsampling ratio of Y to C',
+'exif-ycbcrpositioning' =>'Y and C positioning',
+'exif-xresolution' =>'Horizontal resolution',
+'exif-yresolution' =>'Vertical resolution',
+'exif-resolutionunit' =>'Unit of X and Y resolution',
+'exif-stripoffsets' =>'Image data location',
+'exif-rowsperstrip' =>'Number of rows per strip',
+'exif-stripbytecounts' =>'Bytes per compressed strip',
+'exif-jpeginterchangeformat' =>'Offset to JPEG SOI',
+'exif-jpeginterchangeformatlength' =>'Bytes of JPEG data',
+'exif-transferfunction' =>'Transfer function',
+'exif-whitepoint' =>'White point chromaticity',
+'exif-primarychromaticities' =>'Chromaticities of primarities',
+'exif-ycbcrcoefficients' =>'Color space transformation matrix coefficients',
+'exif-referenceblackwhite' =>'Pair of black and white reference values',
+'exif-datetime' =>'File change date and time',
+'exif-imagedescription' =>'Image title',
+'exif-make' =>'Camera manufacturer',
+'exif-model' =>'Camera model',
+'exif-software' =>'Software used',
+'exif-artist' =>'Author',
+'exif-copyright' =>'Copyright holder',
+'exif-exifversion' =>'Exif version',
+'exif-flashpixversion' =>'Supported Flashpix version',
+'exif-colorspace' =>'Color space',
+'exif-componentsconfiguration' =>'Meaning of each component',
+'exif-compressedbitsperpixel' =>'Image compression mode',
+'exif-pixelydimension' =>'Valid image width',
+'exif-pixelxdimension' =>'Valid image height',
+'exif-makernote' =>'Manufacturer notes',
+'exif-usercomment' =>'User comments',
+'exif-relatedsoundfile' =>'Related audio file',
+'exif-datetimeoriginal' =>'Date and time of data generation',
+'exif-datetimedigitized' =>'Date and time of digitizing',
+'exif-subsectime' =>'DateTime subseconds',
+'exif-subsectimeoriginal' =>'DateTimeOriginal subseconds',
+'exif-subsectimedigitized' =>'DateTimeDigitized subseconds',
+'exif-exposuretime' =>'Exposure time',
+'exif-exposuretime-format' => '$1 sec ($2)',
+'exif-fnumber' =>'F Number',
+'exif-fnumber-format' =>'f/$1',
+'exif-exposureprogram' =>'Exposure Program',
+'exif-spectralsensitivity' =>'Spectral sensitivity',
+'exif-isospeedratings' =>'ISO speed rating',
+'exif-oecf' =>'Optoelectronic conversion factor',
+'exif-shutterspeedvalue' =>'Shutter speed',
+'exif-aperturevalue' =>'Aperture',
+'exif-brightnessvalue' =>'Brightness',
+'exif-exposurebiasvalue' =>'Exposure bias',
+'exif-maxaperturevalue' =>'Maximum land aperture',
+'exif-subjectdistance' =>'Subject distance',
+'exif-meteringmode' =>'Metering mode',
+'exif-lightsource' =>'Light source',
+'exif-flash' =>'Flash',
+'exif-focallength' =>'Lens focal length',
+'exif-focallength-format' =>'$1 mm',
+'exif-subjectarea' =>'Subject area',
+'exif-flashenergy' =>'Flash energy',
+'exif-spatialfrequencyresponse' =>'Spatial frequency response',
+'exif-focalplanexresolution' =>'Focal plane X resolution',
+'exif-focalplaneyresolution' =>'Focal plane Y resolution',
+'exif-focalplaneresolutionunit' =>'Focal plane resolution unit',
+'exif-subjectlocation' =>'Subject location',
+'exif-exposureindex' =>'Exposure index',
+'exif-sensingmethod' =>'Sensing method',
+'exif-filesource' =>'File source',
+'exif-scenetype' =>'Scene type',
+'exif-cfapattern' =>'CFA pattern',
+'exif-customrendered' =>'Custom image processing',
+'exif-exposuremode' =>'Exposure mode',
+'exif-whitebalance' =>'White Balance',
+'exif-digitalzoomratio' =>'Digital zoom ratio',
+'exif-focallengthin35mmfilm' =>'Focal length in 35 mm film',
+'exif-scenecapturetype' =>'Scene capture type',
+'exif-gaincontrol' =>'Scene control',
+'exif-contrast' =>'Contrast',
+'exif-saturation' =>'Saturation',
+'exif-sharpness' =>'Sharpness',
+'exif-devicesettingdescription' =>'Device settings description',
+'exif-subjectdistancerange' =>'Subject distance range',
+'exif-imageuniqueid' =>'Unique image ID',
+'exif-gpsversionid' =>'GPS tag version',
+'exif-gpslatituderef' =>'North or South Latitude',
+'exif-gpslatitude' =>'Latitude',
+'exif-gpslongituderef' =>'East or West Longitude',
+'exif-gpslongitude' =>'Longitude',
+'exif-gpsaltituderef' =>'Altitude reference',
+'exif-gpsaltitude' =>'Altitude',
+'exif-gpstimestamp' =>'GPS time (atomic clock)',
+'exif-gpssatellites' =>'Satellites used for measurement',
+'exif-gpsstatus' =>'Receiver status',
+'exif-gpsmeasuremode' =>'Measurement mode',
+'exif-gpsdop' =>'Measurement precision',
+'exif-gpsspeedref' =>'Speed unit',
+'exif-gpsspeed' =>'Speed of GPS receiver',
+'exif-gpstrackref' =>'Reference for direction of movement',
+'exif-gpstrack' =>'Direction of movement',
+'exif-gpsimgdirectionref' =>'Reference for direction of image',
+'exif-gpsimgdirection' =>'Direction of image',
+'exif-gpsmapdatum' =>'Geodetic survey data used',
+'exif-gpsdestlatituderef' =>'Reference for latitude of destination',
+'exif-gpsdestlatitude' =>'Latitude destination',
+'exif-gpsdestlongituderef' =>'Reference for longitude of destination',
+'exif-gpsdestlongitude' =>'Longitude of destination',
+'exif-gpsdestbearingref' =>'Reference for bearing of destination',
+'exif-gpsdestbearing' =>'Bearing of destination',
+'exif-gpsdestdistanceref' =>'Reference for distance to destination',
+'exif-gpsdestdistance' =>'Distance to destination',
+'exif-gpsprocessingmethod' =>'Name of GPS processing method',
+'exif-gpsareainformation' =>'Name of GPS area',
+'exif-gpsdatestamp' =>'GPS date',
+'exif-gpsdifferential' =>'GPS differential correction',
+
+# Exif attributes
+
+'exif-compression-1' => 'Uncompressed',
+'exif-compression-6' => 'JPEG',
+
+'exif-photometricinterpretation-2' => 'RGB',
+'exif-photometricinterpretation-6' => 'YCbCr',
+
+'exif-orientation-1' => 'Normal', // 0th row: top; 0th column: left
+'exif-orientation-2' => 'Flipped horizontally', // 0th row: top; 0th column: right
+'exif-orientation-3' => 'Rotated 180°', // 0th row: bottom; 0th column: right
+'exif-orientation-4' => 'Flipped vertically', // 0th row: bottom; 0th column: left
+'exif-orientation-5' => 'Rotated 90° CCW and flipped vertically', // 0th row: left; 0th column: top
+'exif-orientation-6' => 'Rotated 90° CW', // 0th row: right; 0th column: top
+'exif-orientation-7' => 'Rotated 90° CW and flipped vertically', // 0th row: right; 0th column: bottom
+'exif-orientation-8' => 'Rotated 90° CCW', // 0th row: left; 0th column: bottom
+
+'exif-planarconfiguration-1' => 'chunky format',
+'exif-planarconfiguration-2' => 'planar format',
+
+'exif-xyresolution-i' => '$1 dpi',
+'exif-xyresolution-c' => '$1 dpc',
+
+'exif-colorspace-1' => 'sRGB',
+'exif-colorspace-ffff.h' => 'FFFF.H',
+
+'exif-componentsconfiguration-0' => 'does not exist',
+'exif-componentsconfiguration-1' => 'Y',
+'exif-componentsconfiguration-2' => 'Cb',
+'exif-componentsconfiguration-3' => 'Cr',
+'exif-componentsconfiguration-4' => 'R',
+'exif-componentsconfiguration-5' => 'G',
+'exif-componentsconfiguration-6' => 'B',
+
+'exif-exposureprogram-0' => 'Not defined',
+'exif-exposureprogram-1' => 'Manual',
+'exif-exposureprogram-2' => 'Normal program',
+'exif-exposureprogram-3' => 'Aperture priority',
+'exif-exposureprogram-4' => 'Shutter priority',
+'exif-exposureprogram-5' => 'Creative program (biased toward depth of field)',
+'exif-exposureprogram-6' => 'Action program (biased toward fast shutter speed)',
+'exif-exposureprogram-7' => 'Portrait mode (for closeup photos with the background out of focus)',
+'exif-exposureprogram-8' => 'Landscape mode (for landscape photos with the background in focus)',
+
+'exif-subjectdistance-value' => '$1 metres',
+
+'exif-meteringmode-0' => 'Unknown',
+'exif-meteringmode-1' => 'Average',
+'exif-meteringmode-2' => 'CenterWeightedAverage',
+'exif-meteringmode-3' => 'Spot',
+'exif-meteringmode-4' => 'MultiSpot',
+'exif-meteringmode-5' => 'Pattern',
+'exif-meteringmode-6' => 'Partial',
+'exif-meteringmode-255' => 'Other',
+
+'exif-lightsource-0' => 'Unknown',
+'exif-lightsource-1' => 'Daylight',
+'exif-lightsource-2' => 'Fluorescent',
+'exif-lightsource-3' => 'Tungsten (incandescent light)',
+'exif-lightsource-4' => 'Flash',
+'exif-lightsource-9' => 'Fine weather',
+'exif-lightsource-10' => 'Cloudy weather',
+'exif-lightsource-11' => 'Shade',
+'exif-lightsource-12' => 'Daylight fluorescent (D 5700 – 7100K)',
+'exif-lightsource-13' => 'Day white fluorescent (N 4600 – 5400K)',
+'exif-lightsource-14' => 'Cool white fluorescent (W 3900 – 4500K)',
+'exif-lightsource-15' => 'White fluorescent (WW 3200 – 3700K)',
+'exif-lightsource-17' => 'Standard light A',
+'exif-lightsource-18' => 'Standard light B',
+'exif-lightsource-19' => 'Standard light C',
+'exif-lightsource-20' => 'D55',
+'exif-lightsource-21' => 'D65',
+'exif-lightsource-22' => 'D75',
+'exif-lightsource-23' => 'D50',
+'exif-lightsource-24' => 'ISO studio tungsten',
+'exif-lightsource-255' => 'Other light source',
+
+'exif-focalplaneresolutionunit-2' => 'inches',
+
+'exif-sensingmethod-1' => 'Undefined',
+'exif-sensingmethod-2' => 'One-chip color area sensor',
+'exif-sensingmethod-3' => 'Two-chip color area sensor',
+'exif-sensingmethod-4' => 'Three-chip color area sensor',
+'exif-sensingmethod-5' => 'Color sequential area sensor',
+'exif-sensingmethod-7' => 'Trilinear sensor',
+'exif-sensingmethod-8' => 'Color sequential linear sensor',
+
+'exif-filesource-3' => 'DSC',
+
+'exif-scenetype-1' => 'A directly photographed image',
+
+'exif-customrendered-0' => 'Normal process',
+'exif-customrendered-1' => 'Custom process',
+
+'exif-exposuremode-0' => 'Auto exposure',
+'exif-exposuremode-1' => 'Manual exposure',
+'exif-exposuremode-2' => 'Auto bracket',
+
+'exif-whitebalance-0' => 'Auto white balance',
+'exif-whitebalance-1' => 'Manual white balance',
+
+'exif-scenecapturetype-0' => 'Standard',
+'exif-scenecapturetype-1' => 'Landscape',
+'exif-scenecapturetype-2' => 'Portrait',
+'exif-scenecapturetype-3' => 'Night scene',
+
+'exif-gaincontrol-0' => 'None',
+'exif-gaincontrol-1' => 'Low gain up',
+'exif-gaincontrol-2' => 'High gain up',
+'exif-gaincontrol-3' => 'Low gain down',
+'exif-gaincontrol-4' => 'High gain down',
+
+'exif-contrast-0' => 'Normal',
+'exif-contrast-1' => 'Soft',
+'exif-contrast-2' => 'Hard',
+
+'exif-saturation-0' => 'Normal',
+'exif-saturation-1' => 'Low saturation',
+'exif-saturation-2' => 'High saturation',
+
+'exif-sharpness-0' => 'Normal',
+'exif-sharpness-1' => 'Soft',
+'exif-sharpness-2' => 'Hard',
+
+'exif-subjectdistancerange-0' => 'Unknown',
+'exif-subjectdistancerange-1' => 'Macro',
+'exif-subjectdistancerange-2' => 'Close view',
+'exif-subjectdistancerange-3' => 'Distant view',
+
+// Pseudotags used for GPSLatitudeRef and GPSDestLatitudeRef
+'exif-gpslatitude-n' => 'North latitude',
+'exif-gpslatitude-s' => 'South latitude',
+
+// Pseudotags used for GPSLongitudeRef and GPSDestLongitudeRef
+'exif-gpslongitude-e' => 'East longitude',
+'exif-gpslongitude-w' => 'West longitude',
+
+'exif-gpsstatus-a' => 'Measurement in progress',
+'exif-gpsstatus-v' => 'Measurement interoperability',
+
+'exif-gpsmeasuremode-2' => '2-dimensional measurement',
+'exif-gpsmeasuremode-3' => '3-dimensional measurement',
+
+// Pseudotags used for GPSSpeedRef and GPSDestDistanceRef
+'exif-gpsspeed-k' => 'Kilometres per hour',
+'exif-gpsspeed-m' => 'Miles per hour',
+'exif-gpsspeed-n' => 'Knots',
+
+// Pseudotags used for GPSTrackRef, GPSImgDirectionRef and GPSDestBearingRef
+'exif-gpsdirection-t' => 'True direction',
+'exif-gpsdirection-m' => 'Magnetic direction',
+
+# external editor support
+'edit-externally' => 'Fitxategi hau editatu kanpo-aplikazio bat erabiliz',
+'edit-externally-help' => 'Ikus [http://meta.wikimedia.org/wiki/Help:External_editors konfiguraziorako argibideak] informazio gehiagorako.',
+
+# 'all' in various places, this might be different for inflected languages
+'recentchangesall' => 'guztiak',
+'imagelistall' => 'guztiak',
+'watchlistall1' => 'guztiak',
+'watchlistall2' => 'guztiak',
+'namespacesall' => 'guztiak',
+
+# E-mail address confirmation
+'confirmemail' => 'E-posta helbidea egiaztatu',
+'confirmemail_noemail' => 'Ez daukazu e-posta helbiderik zehaztuta zure [[Special:Preferences|hobespenetan]].',
+'confirmemail_text' => "Wiki honetan zure e-posta helbidea egiaztatzea beharrezkoa da e-postarekin zerikusia duten ezaugarriak erabili aurretik. Beheko botoia jo zure helbidera egiaztapen mezu bat bidaltzeko. Mezuan kode bat duen lotura bat joango da atxikita; lotura hori zure nabigatzailean ireki ezazu e-posta helbidea egiaztatzeko.",
+'confirmemail_send' => 'Egiaztapen kodea e-postaz bidali',
+'confirmemail_sent' => 'Egiaztapen mezua bidali da.',
+'confirmemail_sendfailed' => 'Ezin izan da egiaztapen mezua bidali. Ziurtatu e-posta helbidean baliogabeko karaktererik ez dagoela. Zerbitzariaren mezua: $1',
+'confirmemail_invalid' => 'Baliogabeko egiaztapen kodea. Baliteke kodea iraungi izana.',
+'confirmemail_needlogin' => '$1 behar duzu zure e-posta helbidea egiaztatzeko.',
+'confirmemail_success' => 'Zure e-posta helbidea egiaztatu da. Saioa hasi eta ekarpenak egin ditzakezu orain.',
+'confirmemail_loggedin' => 'Zure e-posta helbidea egiaztatu da.',
+'confirmemail_error' => 'Akatsen bat gertatu da egiaztapena burutzerakoan.',
+
+'confirmemail_subject' => 'E-posta helbide egiaztapena {{SITENAME}}(e)n',
+'confirmemail_body' => "Norbaitek, ziurrenik zuk ($1 IP helbidetik), \"$2\" kontua erregistratu du {{SITENAME}}(e)n e-posta helbide honekin.
+
+Izen hori zuri dagokizula eta {{SITENAME}}(e)n zure e-posta egiaztatzeko, hurrengo lotura hau zure nabigatzailean ireki behar duzu:
+
+$3
+
+Zu *ez* bazara, ez jo lotura horretara. Egiaztapen kode hau $4 iraungiko da.",
+
+# Inputbox extension, may be useful in other contexts as well
+'tryexact' => 'Izenburu zehatza bilatu',
+'searchfulltext' => 'Testu osoa bilatu',
+'createarticle' => 'Artikulua sortu',
+
+# Scary transclusion
+'scarytranscludedisabled' => '[Interwikien transklusioa ezgaituta dago]',
+'scarytranscludefailed' => '[Arazoa $1 txantiloia eskuratzerakoan; barkatu]',
+'scarytranscludetoolong' => '[URLa luzeegia da; barkatu]',
+
+# Trackbacks
+'trackbackbox' => '<div id="mw_trackbacks"> Artikulu honen aipuak:<br /> $1 </div>',
+'trackbackremove' => ' ([$1 Ezabatu])',
+'trackbacklink' => 'Aipua',
+'trackbackdeleteok' => 'Aipua ezabatu egin da.',
+
+
+# delete conflict
+
+'deletedwhileediting' => 'Oharra: Zu aldaketak egiten hasi ondoren ezabatu egin da orrialde hau!',
+'confirmrecreate' => '[[User:$1|$1]] erabiltzaileak ([[User talk:$1|eztabaida]]) orrialde hau ezabatu zu aldatzen hasi eta gero. Hona arrazoia: : \'\'$2\'\' Mesedez, baieztatu orrialde hau berriz sortu nahi duzula.',
+'recreate' => 'Birsortu',
+'tooltip-recreate' => 'Orrialdea birsortu ezabatu egin den arren',
+
+'unit-pixel' => 'px',
+
+# HTML dump
+'redirectingto' => '[[$1]] orrialdera berbideratzen...',
+
+# action=purge
+'confirm_purge' => "Orrialde honen katxea ezabatu?
+
+$1",
+'confirm_purge_button' => 'Ados',
+
+'youhavenewmessagesmulti' => "Mezu berriak dituzu $1(e)n",
+'searchcontaining' => "''$1'' barne duten orrialdeen bilaketa.",
+'searchnamed' => "''$1'' izenburua duten artikuluen bilaketa.",
+'articletitles' => "''$1''(r)ekin hasten diren artikuluak",
+'hideresults' => 'Emaitzak ezkutatu',
+
+# DISPLAYTITLE
+'displaytitle' => '(Orrialde honetara lotzen da [[$1]] bezala)',
+
+'loginlanguagelabel' => 'Hizkuntza: $1',
+
+# Multipage image navigation
+'imgmultipageprev' => '&larr; aurreko orrialdea',
+'imgmultipagenext' => 'hurrengo orrialdea &rarr;',
+'imgmultigo' => 'Joan!',
+'imgmultigotopre' => 'Orrialdera jo',
+
+# Table pager
+'ascending_abbrev' => 'gor',
+'descending_abbrev' => 'behe',
+'table_pager_next' => 'Hurrengo orrialdea',
+'table_pager_prev' => 'Aurreko orrialdea',
+'table_pager_first' => 'Lehen orrialdea',
+'table_pager_last' => 'Azken orrialdea',
+'table_pager_limit' => 'Orrialdeko $1 elementu erakutsi',
+'table_pager_limit_submit' => 'Joan',
+'table_pager_empty' => 'Emaitzik ez',
+
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesFa.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesFa.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesFa.php	(revision 1280)
@@ -0,0 +1,917 @@
+<?php
+/** Persian (فارسی)
+  *
+  * @addtogroup Language
+  */
+$skinNames = array(
+	'standard' => 'استاندارد',
+	'nostalgia' => 'نوستالژی',
+	'cologneblue' => 'آبی کلون',
+	'smarty' => 'پدینگتون',
+	'montparnasse' => 'مون‌پارناس',
+);
+$namespaceNames = array(
+	NS_MEDIA          => 'مدیا',
+	NS_SPECIAL        => 'ویژه',
+	NS_MAIN	          => '',
+	NS_TALK	          => 'بحث',
+	NS_USER           => 'کاربر',
+	NS_USER_TALK      => 'بحث_کاربر',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK   => 'بحث_$1',
+	NS_IMAGE          => 'تصویر',
+	NS_IMAGE_TALK     => 'بحث_تصویر',
+	NS_MEDIAWIKI      => 'مدیاویکی',
+	NS_MEDIAWIKI_TALK	=> 'بحث_مدیاویکی',
+	NS_TEMPLATE       => 'الگو',
+	NS_TEMPLATE_TALK  => 'بحث_الگو',
+	NS_HELP           => 'راهنما',
+	NS_HELP_TALK      => 'بحث_راهنما',
+	NS_CATEGORY       => 'رده',
+	NS_CATEGORY_TALK  => 'بحث_رده'
+);
+
+$digitTransformTable = array(
+	"0" => "۰",
+	"1" => "۱",
+	"2" => "۲",
+	"3" => "۳",
+	"4" => "۴",
+	"5" => "۵",
+	"6" => "۶",
+	"7" => "۷",
+	"8" => "۸",
+	"9" => "۹",
+	"%" => "٪",
+	"." => "٫", // wrong table?
+	"," => "٬"
+);
+
+$rtl = true;
+$defaultUserOptionOverrides = array(
+	# Swap sidebar to right side by default
+	'quickbar' => 2,
+	# Underlines seriously harm legibility. Force off:
+	'underline' => 0,
+);
+$linkTrail = "/^([a-z]+)(.*)\$/sD"; /* This may need to be changed --RP */
+
+$messages = array(
+# User toggles
+
+'tog-underline' => "زیر پیوندها خط کشیده شود",
+'tog-highlightbroken' => "قالب‌بندی پیوندهای ناقص <a href=\"\" class=\"new\">به این شکل</a> (امکان دیگر: به این شکل<a href=\"\" class=\"internal\">؟</a>).",
+'tog-justify'	=> "تنظیم بندها",
+'tog-hideminor' => "نشان ندادن تغییرات جزئی در فهرست تغییرات اخیر",
+'tog-usenewrc' => "تغییرات اخیر گسترش‌یافته (برای هر مرورگری نیست)",
+'tog-numberheadings' => "شماره‌گذاری خودکار عناوین",
+'tog-showtoolbar'=>"نمایش نوار ابزار جعبه‌ی ویرایش",
+'tog-editondblclick' => "ویرایش صفحه‌ها با دوکلیک (جاوااسکریپت)",
+'tog-editsection'=>"به کار انداختن ویرایش قسمت‌ها از طریق پیوندهای [ویرایش]",
+'tog-editsectiononrightclick'=>"به کار انداختن ویرایش قسمت‌ها با کلیک راست<br />روی عناوین قسمت‌ها (جاوااسکریپت)",
+'tog-showtoc'=>"نمایش فهرست مندرجات<br />(برای مقالات با بیش از ۳ سرفصل)",
+'tog-rememberpassword' => "کلمه‌ی عبور برای نشست‌های بعدی بماند",
+'tog-editwidth' => "عرض جعبه‌ی ویرایش کامل باشد",
+'tog-watchdefault' => "افزودن صفحاتی که ویرایش می‌کند به فهرست تعقیبات",
+'tog-minordefault' => "پیش‌فرض همه‌ی ویرایش‌ها «جزئی» باشد",
+'tog-previewontop' => "نمایش پیش‌نمایش قبل از جعبه‌ی ویرایش و نه قبل از آن",
+'tog-nocache' => "از کار انداختن حافظه‌ی نهانی صفحات",
+# Dates
+
+'sunday' => "یک‌شنبه",
+'monday' => "دوشنبه",
+'tuesday' => "سه‌شنبه",
+'wednesday' => "چهارشنبه",
+'thursday' => "پنجشنبه",
+'friday' => "جمعه",
+'saturday' => "شنبه",
+'january' => "ژانویه",
+'february' => "فوریه",
+'march' => "مارس",
+'april' => "آوریل",
+'may_long' => "مه",
+'june' => "ژوئن",
+'july' => "ژوئیه",
+'august' => "اوت",
+'september' => "سپتامبر",
+'october' => "اکتبر",
+'november' => "نوامبر",
+'december' => "دسامبر",
+'jan' => "ژانویه",
+'feb' => "فوریه",
+'mar' => "مارس",
+'apr' => "آوریل",
+'may' => "مه",
+'jun' => "ژوئن",
+'jul' => "ژوئیه",
+'aug' => "اوت",
+'sep' => "سپتامبر",
+'oct' => "اکتبر",
+'nov' => "نوامبر",
+'dec' => "دسامبر",
+
+# Bits of text used by many pages:
+#
+'categories' => "رده‌های صفحات",
+'pagecategories' => "رده‌های صفحات",
+'category_header' => "مقاله‌های رده‌ی «$1»",
+'subcategories' => "زیررده‌ها",
+
+'mainpage'		=> "صفحه‌ی اصلی",
+'mainpagetext'	=> "نرم‌افزار ویکی با موفقیت نصب شد.",
+'about'			=> "درباره",
+'aboutsite'      => "درباره‌ی {{SITENAME}}",
+'aboutpage'		=> "{{ns:project}}:درباره",
+'help'			=> "راهنما",
+'helppage'		=> "{{ns:project}}:راهنما",
+'bugreports'	=> "گزارش اشکالات",
+'bugreportspage' => "{{ns:project}}:گزارش اشکالات",
+'sitesupport'   => "کمک مالی",
+'faq'			=> "سؤالات معمول",
+'faqpage'		=> "{{ns:project}}:سؤالات معمول",
+'edithelp'		=> "راهنمای ویرایش کردن",
+'edithelppage'	=> "{{ns:project}}:چگونه_صفحات_را_ویرایش_کنیم",
+'cancel'		=> "لغو",
+'qbfind'		=> "یافتن",
+'qbbrowse'		=> "مرور",
+'qbedit'		=> "ویرایش",
+'qbpageoptions' => "این صفحه",
+'qbpageinfo'	=> "بافت",
+'qbmyoptions'	=> "صفحات من",
+'qbspecialpages'	=> "صفحات ویژه",
+'moredotdotdot'	=> "بیشتر...",
+'mypage'		=> "صفحه‌ی من",
+'mytalk'		=> "بحث من",
+'currentevents' => "وقایع کنونی",
+'disclaimers' => "تکذیب‌نامه‌ها",
+'disclaimerpage'		=> "{{ns:project}}:تکذیب‌نامه‌ی عمومی",
+'errorpagetitle' => "خطا",
+'returnto'		=> "بازگشت به $1.",
+'whatlinkshere'	=> "صفحاتی که به اینجا پیوند دارند",
+'help'			=> "راهنما",
+'search'		=> "جستجو شود",
+'searchbutton'	=> "جستجو شود",
+'go'		=> "برود",
+'searcharticle'		=> "برود",
+'history'		=> "تاریخچه‌ی صفحه",
+'printableversion' => "نسخه‌ی قابل چاپ",
+'editthispage'	=> "ویرایش این صفحه",
+'deletethispage' => "حذف این صفحه",
+'protectthispage' => "محافظت از این صفحه",
+'unprotectthispage' => "از محافظت در آوردن این صفحه",
+'newpage' => "صفحه‌ی جدید",
+'talkpage'		=> "بحث درباره‌ی این صفحه",
+'postcomment'   => "نوشتن نظر",
+'articlepage'	=> "نمایش مقاله",
+'userpage' => "نمایش صفحه‌ی کاربر",
+'projectpage' => "نمایش فوق صفحه",
+'imagepage' => 	"نمایش صفحه‌ی تصویر",
+'viewtalkpage' => "نمایش مباحثات",
+'otherlanguages' => "زبان‌های دیگر",
+'redirectedfrom' => "(تغییر مسیر از $1)",
+'lastmodifiedat'	=> "این صفحه آخرین بار در $2, $1 تغییر کرده است.",
+'viewcount'		=> "این صفحه $1 بار دیده شده است.",
+'protectedpage' => "صفحه‌ی محافظت‌شده",
+'nbytes'		=> "$1 بایت",
+'go'			=> "برو",
+'searcharticle'			=> "برو",
+'ok'			=> "باشد",
+'retrievedfrom' => "گرفته شده از «$1»",
+'editsection'=>"ویرایش",
+'editold'=>"ویرایش",
+'toc' => "فهرست مندرجات",
+'showtoc' => "نمایش داده شود",
+'hidetoc' => "مخفی شود",
+'thisisdeleted' => "نمایش یا احیای $1؟",
+'restorelink' => "$1 ویرایش حذف‌شده",
+
+# Main script and global functions
+#
+'nosuchaction'	=> "چنین عملی وجود ندارد",
+'nosuchactiontext' => "ویکی عمل مشخص شده در URL را نمی‌شناسد",
+'nosuchspecialpage' => "چنین صفحه‌ی ویژه‌ای وجود ندارد",
+'nospecialpagetext' => "شما صفحه‌ی ویژه‌ای را درخواست کرده‌اید که ویکی نمی‌شناسد.",
+
+# General errors
+#
+'error'			=> "خطا",
+'databaseerror' => "خطای پایگاه داده",
+'dberrortextcl' => "A database query syntax error has occurred.
+The last attempted database query was:
+\"$1\"
+from within function \"$2\".
+MySQL returned error \"$3: $4\".",
+'noconnect'		=> "شرمنده! ویکی مشکلات فنی دارد، و نمی‌تواند با خادم پایگاه داده تماس بگیرد.",
+'nodb'			=> "نمی‌توان پایگاه داده‌ی $1 را انتخاب کرد",
+'cachederror'		=> "در زیر یک نسخه‌ی بایگانی‌شده‌ی صفحه‌ی درخواستی می‌آید، و ممکن است به‌روز نباشد.",
+'readonly'		=> "پایگاه داده قفل شد",
+'enterlockreason' => "دلیلی برای قفل کردن ذکر کنید، شامل تقریبی برای زمانی که قفل برداشته خواهد شد",
+'readonlytext'	=> "The database is currently locked to new
+entries and other modifications, probably for routine database maintenance,
+after which it will be back to normal.
+The administrator who locked it offered this explanation:
+<p>$1",
+'missingarticle' => "پایگاه داده متن صفحه‌ای به نام «$1» را که باید می‌یافت، نیافت.
+
+<p>این مشکل معمولاٌ بر اثر ادامه دادن پیوندهای تاریخ‌گذشته‌ی تفاوت یا تاریخچه‌ی صفحاتی رخ می‌دهد که حذف شده‌اند.
+
+<p>اگر مورد شما این نیست، ممکن است اشکالی در نرم‌افزار پیدا کرده باشید.
+لطفاً این مسئله را، با ذکر URL، به یکی از مدیران گزارش کنید.",
+'internalerror' => "خطای داخلی",
+'filecopyerror' => "نتوانستم از پرونده‌ی «$1» روی «$2» نسخه‌برداری کنم.",
+'filerenameerror' => "نتوانستم پرونده‌ی «$1» را به «$2» تغییر نام دهم.",
+'filedeleteerror' => "نتوانستم پرونده‌ی «$1» را حذف کنم",
+'filenotfound'	=> "پرونده‌ی «$1» یافت نشد.",
+'unexpected'	=> "مقدار غیرمنتظره: «$1»=«$2».",
+'formerror'		=> "خطا: نمی‌توان فرم را فرستاد",
+'badarticleerror' => "نمی‌توان این عمل را بر این صفحه انجام داد.",
+'cannotdelete'	=> "نتوانستم صفحه را تصویر مشخص‌شده را حذف کنم. (ممکن است قبلاً کس دیگری آن را حذف کرده باشد.)",
+'badtitle'		=> "عنوان بد",
+'badtitletext'	=> "عنوان درخواستی نامعتبر، خالی، یا عنوانی بین زبانی یا بین‌ویکی‌ای با پیوند نادرست بود.",
+'perfdisabled' => "شرمنده! این امکان موفقتاً برداشته شده چون پایگاه داده را چنان کند می‌کند
+که هیچ کس نمی‌تواند از ویکی استفاده کند.",
+'perfdisabledsub' => "این نسخه‌ی ذخیره‌شده‌ای از $1 است:",
+'wrong_wfQuery_params' => "پارامترهای wfQuery() نادرست است<br />
+تابع: $1<br />
+پرس‌وجو: $2",
+'viewsource' => "نمایش مبدأ",
+'protectedtext' => "این صفحه برای جلوگیری از ویرایش قفل شده است؛ این کار ممکن است دلایل مختلفی داشته باشد. لطفاً به
+[[{{ns:project}}:صفحه‌ی محافظت‌شده]] مراجعه کنید.
+
+شما می‌توانید مبدأ این صفحه را مشاهده و تکثیر کنید:",
+
+# Login and logout pages
+#
+'logouttitle'	=> "خروج کاربر از سیستم",
+'logouttext' => "اکنون از سیستم خارج شدید.
+شما می‌توانید به استفاده‌ی گمنام از {{SITENAME}} ادامه دهید، یا می‌توانید با همین کاربر یا کاربر دیگری
+به سیستم وارد شوید. توجه کنید که تا زمانی که cache مرورگرتان را پاک کنید،
+بعضی صفحات ممکن است به شکلی نمایش یابند که انگار هنوز وارد سیستم هستید.",
+
+'welcomecreation' => "<h2>$1، خوش آمدید!</h2><p>حساب شما
+ایجاد شد.
+فراموش نکنید که ترجیحات {{SITENAME}} خود را
+تنظیم کنید.",
+
+'loginpagetitle' => "ورود کاربر به سیستم",
+'yourname'		=> "نام کاربری شما",
+'yourpassword'	=> "کلمه‌ی عبور شما",
+'yourpasswordagain' => "کلمه‌ی عبور را دوباره وارد کنید",
+'remembermypassword' => "کلمه‌ی عبور بین نشست‌ها به خاطر سپرده شود.",
+'loginproblem'	=> "<b>ورود شما به سیستم با مشکلی مواجه شد.</b><br />دوباره تلاش کنید!",
+'alreadyloggedin' => "<strong>کاربر $1, شما از قبل وارد سیستم شده‌اید!</strong><br />",
+
+'login'			=> "ورود به سیستم",
+'loginprompt'           => "برای ورود به {{SITENAME}} باید cookieها را فعال کنید.",
+'userlogin'		=> "ورود به سیستم",
+'logout'		=> "خروج از سیستم",
+'userlogout'	=> "خروج از سیستم",
+'notloggedin'	=> "به سیستم وارد نشده‌اید",
+'createaccount'	=> "ایجاد حساب جدید",
+'createaccountmail'	=> "با پست الکترونیکی",
+'badretype'		=> "کلمه‌های عبوری که وارد کردید یکسان نیستند.",
+'userexists'	=> "نام کاربری‌ای که وارد کردید قبلاً استفاده شده است. لطفاً یک نام دیگر انتخاب کنید.",
+'youremail'		=> "پست الکترونیکی شما*",
+'yournick'		=> "لقب شما (برای امضاها)",
+'loginerror'	=> "خطا در ورود به سیستم",
+'nocookiesnew'	=> "حساب کاربری ایجاد شد، اما شما وارد سیستم نشدید. {{SITENAME}} برای ورود کاربران به سیستم از cookie استفاده می‌کند. شما
+cookieها را از کار انداخته‌اید. لطفاً cookieها را به کار بیندازید، و سپس با نام کاربری و کلمه‌ی عبور جدیدتان به سیستم وارد شوید.",
+'nocookieslogin'	=> "{{SITENAME}} برای ورود کاربران به سیستم از cookie استفاده می‌کند. شما cookieها را از کار
+انداخته‌اید. لطفاً cookieها را به کار بیندازید و دوباره تلاش کنید.",
+'noname'		=> "شما نام کاربری معتبری مشخص نکرده‌اید.",
+'loginsuccesstitle' => "ورود موفقیت‌آمیز به سیستم",
+'loginsuccess'	=> "شما اکنون با نام «$1» به {{SITENAME}} وارد شده‌اید.",
+'nosuchuser'	=> "کاربری با نام «$1» وجود ندارد.
+املای نام را بررسی کنید، یا از فرم زیر برای ایجاد یک حساب کاربری جدید استفاده کنید.",
+'wrongpassword'	=> "کلمه‌ی عبوری که وارد کردید نادرست است. لطفاٌ دوباره تلاش کنید.",
+'mailmypassword' => "یک کلمه‌ی عبور جدید به شما فرستاده شود",
+/* The following two passwordreminder messages should not be translated, in case
+   the user doesn't use email software able to read Persian. */
+//inherit en//'passwordremindertitle' => '',
+//inherit en//'passwordremindertext' => '',
+'noemail'		=> "هیچ نشانی پست الکترونیکی‌ای برای کاربر «$1» ثبت نشده است.",
+'passwordsent'	=> "یک کلمه‌ی عبور جدید به نشانی الکترونیکی ثبت شده برای کاربر «$1» فرستاده شد.
+لطفاٌ پس از دریافت آن دوباره به سیستم وارد شوید.",
+
+# Edit page toolbar
+'bold_sample'=>"متن سیاه",
+'bold_tip'=>"متن سیاه",
+'italic_sample'=>"متن ایتالیک",
+'italic_tip'=>"متن ایتالیک",
+'link_sample'=>"عنوان پیوند",
+'link_tip'=>"پیوند داخلی",
+'extlink_sample'=>"http://www.example.com عنوان پیوند",
+'extlink_tip'=>"پیوند خارجی (پیشوند http://‎ را فراموش نکنید)",
+'headline_sample'=>"متن عنوان",
+'headline_tip'=>"عنوان سطح ۲",
+'math_sample'=>"درج فرمول در اینجا",
+'math_tip'=>"فرمول ریاضی (LaTeX)",
+'nowiki_sample'=>"اینجا متن قالب‌بندی‌نشده وارد شود",
+'nowiki_tip'=>"نادیده گرفتن قالب‌بندی ویکی",
+'image_sample'=>"مثال.jpg",
+'image_tip'=>"تصویر داخل متن",
+'media_sample'=>"مثال.mp3",
+'media_tip'=>"پیوند پرونده‌ی رسانه",
+'sig_tip'=>"امضای شما و برچسب زمان",
+'hr_tip'=>"خط افقی (با صرفه‌جویی استفاده کنید)",
+
+# Edit pages
+#
+'summary'		=> "خلاصه",
+'subject'		=> "موضوع/عنوان",
+'minoredit'		=> "این ویرایش جزئی است",
+'watchthis'		=> "تعقیب این مقاله",
+'savearticle'	=> "صفحه ذخیره شود",
+'preview'		=> "پیش‌نمایش",
+'showpreview'	=> "پیش‌نمایش نمایش یابد",
+'blockedtitle'	=> "کاربر بسته شده است",
+'blockedtext'	=> "نام کاربری یا نشانی IP شما توسط $1 بسته شده است.
+دلیل داده‌شده این است:<br />''$2''<p>شما می‌توانید با $1 یا یکی از
+[[{{ns:project}}:مدیران|مدیران]] تماس بگیرید و در این باره صحبت کنید.
+
+توجه کنید که شما نمی‌توانید از امکان «فرستادن پست الکترونیکی به این کاربر» استفاده کنید مگر اینکه نشانی پست الکترونیکی
+معتبری در [[ویژه:ترجیحات|ترجیحات کاربری]]‌تان ثبت کرده باشید.
+
+نشانی IP شما $3 است. لطفاً این نشانی را در کلیه‌ی پرس‌وجوهایتان ذکر کنید.
+
+==نکته برای کاربران AOL==
+به خاطر اعمال تخریبی یک کاربر مشخص AOL، {{SITENAME}} معمولاً proxyهای AOL را می‌بندد.
+متأسفانه ممکن است تعداد زیادی از کاربران AOL از یک خادم proxy واحد استفاده کنند، و در نتیجه کاربران بی‌تقصیر AOL معمولاً ندانسته بسته می‌شوند.
+از دردسر ایجاد شده عذر می‌خواهیم.
+
+اگر این اتفاق برای شما افتاد، لطفاً به یکی از مدیران از یک نشانی پست الکترونیک AOL پیغام بفرستید. حتماً نشانی IPی را در فوق داده شده
+ذکر کنید.",
+'whitelistedittitle' => "برای ویرایش باید به سیستم وارد شوید",
+'whitelistedittext' => "برای ویرایش مقاله‌ها باید به سیستم [[ویژه:Userlogin|وارد]] شوید.",
+'whitelistreadtitle' => "برای خواندن باید به سیستم وارد شوید",
+'whitelistreadtext' => "
+برای خواندن مقالات باید [[ویژه:Userlogin|به سیستم وارد شوید]].",
+'whitelistacctitle' => "شما مجاز نیستید حساب درست کنید.",
+'whitelistacctext' => "برای ایجاد حساب در این ویکی باید [[ویژه:Userlogin|به سیستم وارد شوید]] و اجازه
+‌های مربوط به این کار را داشته باشید.",
+'accmailtitle' => "کلمه‌ی عبور فرستاده شد.",
+'accmailtext' => "کلمه‌ی عبور «$1» به «$2» فرستاده شد.",
+'newarticle'	=> "(جدید)",
+'newarticletext' =>
+"شما پیوندی را دنبال کرده‌اید و به صفحه‌ای رسیده‌اید که هنوز وجود ندارد.
+برای ایجاد صفحه، در مستطیل زیر شروع به تایپ کنید
+(برای اطلاعات بیشتر به [[{{ns:project}}:راهنما|صفحه‌ی راهنما]] مراجعه کنید).
+اگر اشتباهاً اینجا آمده‌اید، دکمه‌ی '''back''' مرورگرتان را بزنید.",
+'anontalkpagetext' => "---- ''این صفحه‌ی بحث برای کاربر گمنامی است که هنوز حسابی درست نکرده است یا از آن استفاده نمی‌کند.
+بنابراین برای شناسایی‌اش مجبوریم از [[نشانی IP]] عددی استفاده کنیم. چنین نشانی‌های IPای ممکن است توسط چندین کاربر به شکل
+مشترک استفاده شود.
+اگر شما کاربر گمنامی هستید و تصور می‌کنید اظهار نظرات نامربوط به شما صورت گرفته است،
+لطفاً برای پیشگیری از اشتباه گرفته شدن با کاربران گمنام دیگر در آیند [[ویژه:Userlogin|حسابی ایجاد کنید یا به سیستم وارد شوید]].''",
+'noarticletext' => "(این صفحه در حال حاضر متنی ندارد)",
+'updated'		=> "(به‌روز شد)",
+'note'			=> "<strong>نکته:</strong>",
+'previewnote'	=> "توجه کنید که این فقط پیش‌نمایش است، و ذخیره نشده است!",
+'previewconflict' => "این پیش‌نمایش منعکس‌کننده‌ی متن ناحیه‌ی ویرایش متن بالایی است،
+به شکلی که اگر بخواهید متن را ذخیره کنید نشان داده خواهد شد.",
+'editing'		=> "در حال ویرایش $1",
+'editinguser'		=> "در حال ویرایش $1",
+'editingsection'	=> "در حال ویرایش $1 (قسمت)",
+'editingcomment'	=> "در حال ویرایش $1 (یادداشت)",
+'editconflict'	=> "تعارض ویرایشی: $1",
+'explainconflict' => "از وقتی شما ویرایش این صفحه را آغاز کرده‌اید شخص دیگری آن را تغییر داده است.
+ناحیه‌ی متنی بالایی شامل متن صفحه به شکل فعلی آن است.
+تغییرات شما در ناحیه‌ی متنی پایینی نشان داده شده است.
+شما باید تغییراتتان را با متن فعلی ترکیب کنید.
+وقتی «ذخیره‌ی صفحه» را فشار دهید، <b>فقط</b> متن ناحیه‌ی متنی بالایی ذخیره خواهد شد.<br />",
+'yourtext'		=> "متن شما",
+'storedversion' => "نسخه‌ی ضبط‌شده",
+'editingold'	=> "<strong>هشدار:
+شما دارید نسخه‌ی قدیمی‌ای از این صفحه را ویرایش می‌کنید.
+اگر ذخیره‌اش کنید، هر تغییری که پس از این نسخه انجام شده از بین خواهد رفت.</strong>",
+'yourdiff'		=> "تفاوت‌ها",
+# FIXME: This is inappropriate for third-party use!
+/*'copyrightwarning' => "لطفاٌ توجه داشته باشید که فرض می‌شود کلیه‌ی مشارکت‌های شما با {{SITENAME}}
+تحت اجازه‌نامه‌ی مستندات آزاد گنو منتشر می‌شوند
+(برای جزئیات بیشتر به $1 مراجعه کنید).
+اگر نمی‌خواهد نوشته‌هایتان بیرحمانه ویرایش شده و به دلخواه توزیع شود،
+اینجا نفرستیدشان.<br />
+همینطور شما دارید به ما قول می‌دهید که خودتان این را نوشته‌اید، یا آن را از یک منبع آزاد با
+مالکیت عمومی یا مشابه آن برداشته‌اید.
+<strong>کارهای دارای حق انحصاری تکثیر (کپی‌رایت) را بی اجازه نفرستید!</strong>",*/
+'longpagewarning' => "<strong>هشدار: این صفحه $1 کیلوبایت طول دارد؛
+بعضی مرورگرها ممکن با ویرایش صفحات نزدیک به ۳۲ کیلوبایت یا طولانیتر از آن مشکلاتی داشته باشند.
+لطفاً درباره‌ی شکستن این صفحه به قسمت‌های کوچکتر فکر کنید.</strong>",
+'readonlywarning' => "<strong>هشدار: پایگاه داده برای نگهداری قفل شده است،
+بنابراین نمی‌توانید ویرایش‌هایتان را همین الآن ذخیره کنید.
+اگر می‌خواهید متن را در یک پرونده‌ی متنی ببرید و بچسبانید و برای آینده ذخیره‌اش کنید.</strong>",
+'protectedpagewarning' => "<strong>هشدار: این صفحه قفل شده است تا فقط کاربران با امتیاز اپراتور سیستم بتوانند ویرایشش کنند.
+مطمئن شوید که از
+[[{{ns:project}}:توصیه‌های صفحات محافظت‌شده|توصیه‌های صفحات محافظت‌شده]] پیروی می‌کنید.</strong>",
+
+# History pages
+#
+'revhistory'	=> "تاریخچه‌ی تغییرات",
+'nohistory'		=> "این صفحه تاریخچه‌ی ویرایش ندارد.",
+'revnotfound'	=> "نسخه یافت نشد",
+'revnotfoundtext' => "نسخه‌ی قدیمی‌از از صفحه که درخواست کرده بودید یافت نشد.
+لطفاً URLی را که برای دسترسی به این صفحه استفاده کرده‌اید بررسی کنید.n",
+'loadhist'		=> "در حال خواندن تاریخچه‌ی صفحه",
+'currentrev'	=> "نسخه‌ی فعلی",
+'revisionasof'	=> "نسخه‌ی $1",
+'cur'			=> "فعلی",
+'next'			=> "بعدی",
+'last'			=> "آخرین",
+'orig'			=> "اصلی",
+'histlegend'	=> "شرح: (فعلی) = تفاوت با نسخه‌ی فعلی،
+(آخرین) = تفاوت با نسخه‌ی قبلی، جز = ویرایش جزئی",
+
+# Diffs
+#
+'difference'	=> "(تفاوت بین نسخه‌ها)",
+'loadingrev'	=> "در حال خواندن نسخه برای تفاوت گرفتن",
+'lineno'		=> "سطر $1:",
+'editcurrent'	=> "ویرایش نسخه‌ی فعلی این صفحه",
+
+# Search results
+#
+'searchresults' => "نتایج جستجو",
+'searchresulttext' => "برای اطلاعات بیشتر درباره‌ی جستجوی {{SITENAME}}، به [[{{ns:project}}:جستجو کردن|جستجوی {{SITENAME}}]] مراجعه کنید.",
+'searchsubtitle'	=> "برای پرس‌وجوی «[[:$1]]»",
+'searchsubtitleinvalid'	=> "برای پرس‌وجوی «$1»",
+'badquery'		=> "پرس‌وجوی جستجویی بدشکل",
+'badquerytext'	=> "نتوانستیم پرس‌وجوی شما را پردازش کنیم.
+این مشکل احتمالاً به این دلیل است که سعی کرده‌اید به دنبال کلمه‌ای کوتاهتر از سه حرف
+بگردید، که هنوز پشتیبانی نمی‌شود.
+همین‌طور ممکن است عبارت را اشتباه وارد کرده باشید، مثلاً «ماهی و و پولک».
+لطفاً یک پرس‌وجوی دیگر را امتحان کنید.",
+'matchtotals'	=> "پرس‌وجوی «$1» متناظر $2 عنوان مقاله
+و $3 متن مقاله است.",
+'noexactmatch' => "صفحه‌ی با دقیقاً این عنوان وجود ندارد، تلاش برای جستجوی کل متن.",
+'titlematches'	=> 'Article title matches',
+'notitlematches' => "عنوان هیچ مقاله‌ای نمی‌خورد",
+'textmatches'	=> 'Article text matches',
+'notextmatches'	=> "متن هیچ مقاله‌ای نمی‌خورد",
+'prevn'			=> "$1تای قبلی",
+'nextn'			=> "$1تای بعدی",
+'viewprevnext'	=> "نمایش ($1) ($2) ($3).",
+'showingresults' => "Showing below <b>$1</b> results starting with #<b>$2</b>.",
+'showingresultsnum' => "Showing below <b>$3</b> results starting with #<b>$2</b>.",
+'nonefound'		=> "<strong>نکته</strong>: unsuccessful searches are
+often caused by searching for common words like \"have\" and \"from\",
+which are not indexed, or by specifying more than one search term (only pages
+containing all of the search terms will appear in the result).",
+'powersearch' => "جستجو",
+'powersearchtext' => "
+جستجو در فضاهای نام :<br />
+$1<br />
+$2 تغییرمسیرها فهرست شوند &nbsp; جستجو برای $3 $9",
+'searchdisabled' => "<p>شرمنده! جستجوی کل متن موقتاً از کار انداخته شده, for performance reasons. In the meantime, you can use the Google search below, which may be out of date.</p>",
+'blanknamespace' => "(اصلی)",
+
+# Preferences page
+#
+'preferences'	=> "ترجیحات",
+'prefsnologin' => "به سیستم وارد نشده‌اید",
+'prefsnologintext'	=> "برای تنظیم ترجیحات کاربر باید [[ویژه:Userlogin|به سیستم وارد شوید]].",
+'prefsreset'	=> "ترجیحات از حافظه میزان شد.",
+'qbsettings'	=> "تنظیمات نوار سریع",
+'qbsettings-none'	=> 'نباشد',
+'qbsettings-fixedleft'	=> 'ثابت چپ',
+'qbsettings-fixedright'	=> 'ثابت راست',
+'qbsettings-floatingleft'	=> 'شناور چپ',
+'changepassword' => "تغییر کلمه‌ی عبور",
+'skin'			=> "پوسته",
+'math'			=> "نمایش ریاضیات",
+'dateformat'	=> "قالب تاریخ",
+'math_failure'		=> "شکست در تجزیه",
+'math_unknown_error'	=> "خطای ناشناخته",
+'math_unknown_function'	=> "تابع ناشناخته‌ی",
+'math_lexing_error'	=> "خطای lexing",
+'math_syntax_error'	=> "خطای نحوی",
+'math_image_error'	=> "تبدیل به PNG شکست خورد",
+'saveprefs'		=> "ذخیره‌ی ترجیحات",
+'resetprefs'	=> "صفر کردن ترجیحات",
+'oldpassword'	=> "کلمه‌ی عبور قدیمی",
+'newpassword'	=> "کلمه‌ی عبور جدید",
+'retypenew'		=> "کلمه‌ی عبور جدید را دوباره وارد کنید",
+'textboxsize'	=> "ابعاد جعبه‌ی متن",
+'rows'			=> "تعداد سطرها",
+'columns'		=> "تعداد ستون‌ها",
+'searchresultshead' => "تنظیمات نتیجه‌ی جستجو",
+'resultsperpage' => "تعداد نتایج در هر صفحه",
+'contextlines'	=> "تعداد سطرها در هر نتیجه",
+'contextchars'	=> "تعداد نویسه‌های اطراف در سطر",
+'stubthreshold' => "آستانه‌ی نمایش ناقص‌ها",
+'recentchangescount' => "تعداد عناوین در تغییرات اخیر",
+'savedprefs'	=> "ترجیحات شما ذخیره شد.",
+'timezonetext'	=> "تفاوت تعداد ساعت زمان محلی‌تان با زمان خادم (وقت گرینیچ) را وارد کنید.",
+'localtime'	=> "نمایش زمان محلی",
+'timezoneoffset' => "تفاوت",
+'servertime'	=> "زمان فعلی خادم",
+'guesstimezone' => "از مرورگر گرفته شود",
+'defaultns'		=> "به طور پیشفرض در این فضاهای نام جستجو شود:",
+
+# Recent changes
+#
+'changes' => "تغییرات",
+'recentchanges' => "تغییرات اخیر",
+'recentchangestext' => "آخرین تغییرات ویکی را در این صفحه تعقیب کنید.",
+'rcnote'		=> "در زیر آخرین <strong>$1</strong> تغییر در <strong>$2</strong> روز اخیر آمده است.",
+'rcnotefrom'	=> "در زیر تغییرات از تاریخ <b>$2</b> آمده‌اند (تا <b>$1</b> مورد نشان داده می‌شود).",
+'rclistfrom'	=> "نمایش تغییرات جدید با شروع از $1",
+'rclinks'		=> "نمایش آخرین $1 تغییر در $2 روز اخیر؛ $3",
+'diff'			=> "تفاوت",
+'hist'			=> "تاریخچه",
+'hide'			=> "مخفی شود",
+'show'			=> "نمایش یابد",
+'minoreditletter' => "جز",
+'newpageletter' => "جد",
+
+# Upload
+#
+'upload'		=> "بار کردن پرونده",
+'uploadbtn'		=> "پرونده بار شود",
+'reupload'		=> "بار کردن مجدد",
+'reuploaddesc'	=> "بازگشت به فرم بار کردن",
+'uploadnologin' => "به سیستم وارد نشده‌اید",
+'uploadnologintext'	=> "برای بار کردن پرونده‌ها باید [[ویژه:Userlogin|وارد سیستم شوید]].",
+'uploaderror'	=> "خطا در بار کردن",
+'uploadtext'	=> "'''ایست!''' قبل از این که چیزی اینجا بار کنید،
+مطمئن شوید که
+[[{{ns:project}}:سیاست_استفاده_از_تصاویر|سیاست استفاده از تصاویر]]
+را خوانده‌اید و از آن پیروی می‌کنید.
+
+If a file with the name you are specifying already
+exists on the wiki, it'll be replaced without warning.
+So unless you mean to update a file, it's a good idea
+to first check if such a file exists.
+
+To view or search previously uploaded images,
+go to the [[Special:Imagelist|list of uploaded images]].
+Uploads and deletions are logged on the
+[[{{ns:project}}:Upload_log|upload log]].
+
+Use the form below to upload new image files for use in
+illustrating your articles.
+On most browsers, you will see a \"Browse...\" button, which will
+bring up your operating system's standard file open dialog.
+Choosing a file will fill the name of that file into the text
+field next to the button.
+You must also check the box affirming that you are not
+violating any copyrights by uploading the file.
+Press the \"Upload\" button to finish the upload.
+This may take some time if you have a slow internet connection.
+
+The preferred formats are JPEG for photographic images, PNG
+for drawings and other iconic images, and OGG for sounds.
+Please name your files descriptively to avoid confusion.
+To include the image in an article, use a link in the form
+'''<nowiki>[[image:file.jpg]]</nowiki>''' or
+'''<nowiki>[[image:file.png|alt text]]</nowiki>''' or
+'''<nowiki>[[media:file.ogg]]</nowiki>''' for sounds.
+
+Please note that as with wiki pages, others may edit or
+delete your uploads if they think it serves the encyclopedia, and
+you may be blocked from uploading if you abuse the system.",
+
+'uploadlog'		=> "سیاهه‌ی بارکردن‌ها",
+'uploadlogpage' => "سیاهه‌ی_بارکردن‌ها",
+'uploadlogpagetext' => "فهرست زیر فهرستی از آخرین بارکردن‌های پرونده‌های است.
+همه‌ی زمان‌های نشان‌داده‌شده زمان خادم هستند (وقت گرینیچ).
+<ul>
+</ul>",
+'filename'		=> "نام پرونده",
+'filedesc'		=> "خلاصه",
+'filestatus' => "وضعیت حق تکثیر",
+'filesource' => "منبع",
+'copyrightpage' => "{{ns:project}}:حق_تکثیر",
+'copyrightpagename' => "حق تکثیر {{SITENAME}}",
+'uploadedfiles'	=> "پرونده‌های بارشده",
+'minlength'		=> "نام پرونده باید حداقل سه‌حرفی باشد.",
+'badfilename'	=> "نام پرونده به «$1» تغییر کرد.",
+'badfiletype'	=> "قالب پرونده‌ای «‎.$1» برای پرونده‌های تصویری توصیه نمی‌شود.",
+'largefile'		=> "توصیه می‌شود که اندازه‌ی تصاویر از ۱۰۰ کیلوبایت بیشتر نباشد.",
+'successfulupload' => "بار کردن با موفقیت انجام شد",
+'fileuploaded'	=> "پرونده‌ی «$1» با موفقیت بار شد.
+لطفاً این پیوند را تعقیب کنید: ($2) تا صفحه‌ی توصیف و اطلاعات در مورد
+پرونده را، از قبیل این که از کجا آمده است، چه کسی و در چه زمانی آن را ایجاد کرده است،
+و هر چیز دیگری که ممکن است در مورد آن بدانید، پر کنید.",
+'uploadwarning' => "هشدار بار کردن",
+'savefile'		=> "ذخیره‌ی پرونده",
+'uploadedimage' => "«[[$1]]» بار شد",
+'uploaddisabled' => "شرمنده، بار کردن از کار افتاده است.",
+
+# Image list
+#
+'imagelist'		=> "فهرست تصاویر",
+'imagelisttext'	=> "در زیر فهرست $1 تصویری که $2 مرتب شده است آمده است.",
+'getimagelist'	=> "در حال اخذ فهرست تصاویر",
+'ilsubmit'		=> "جستجو",
+'showlast'		=> "نمایش آخرین $1 تصویر مرتب‌شده $2.",
+'byname'		=> "از روی نام",
+'bydate'		=> "از روی تاریخ",
+'bysize'		=> "از روی اندازه",
+'imgdelete'		=> "حذف",
+'imgdesc'		=> "توصیف",
+'imglegend'		=> "شرح: (توصیف) = نمایش/ویرایش توصیف تصویر.",
+'imghistory'	=> "تاریخچه‌ی تصویر",
+'revertimg'		=> "برگرد",
+'deleteimg'		=> "حذف",
+'deleteimgcompletely'		=> "حذف",
+'imghistlegend' => "شرح: (فعلی) = این تصویر فعلی است، (حذف) = این
+نسخه‌ی قدیمی حذف شود، (برگرد) = برگرداندن به این نسخه‌ی قدیمی.
+<br /><i>برای دیدن تصویر بار شده در تاریخ مشخص، روی تاریخ کلیک کنید</i>.",
+'imagelinks'	=> "پیوند‌های تصاویر",
+'linkstoimage'	=> "این صفحات به این تصویر پیوند دارند:",
+'nolinkstoimage' => "هیچ صفحه‌ای به این تصویر پیوند ندارد.",
+
+# Statistics
+#
+'statistics'	=> "آمار",
+'sitestats'		=> "آمار وبگاه",
+'userstats'		=> "آمار کاربران",
+'sitestatstext' => "کلاً <b>$1</b> صفحه در پایگاه داده هست.
+این شامل صفحات «بحث»، صفحات درباره‌ی {{SITENAME}}، صفحات «ناقص» کوچک،
+تغییرمسیرها، و صفحات دیگری می‌شود که احتمالاً مقاله به حساب نمی‌آیند.
+فارق از این‌ها، <b>$2</b> صفحه هست که احتمالاً مقاله‌ی معقول هستند.<p>
+از زمانی که نرم‌افزار ارتقا یافته (۲۰ ژوئیه‌ی ۲۰۰۲)، کلاً <b>$3</b> بازدید از صفحات،
+و <b>$4</b> ویرایش صفحات صورت گرفته است.
+این می‌شود به طور متوسط <b>$5</b> ویرایش برای هر صفحه، و <b>$6</b> بازدید به‌ازای هر ویرایش.",
+'userstatstext' => "تعداد <b>$1</b> کاربر ثبت‌شده وجود دارد.
+تعداد <b>$2</b> از این کاربران مدیرند (به $3 مراجعه شود).",
+
+# Maintenance Page
+#
+'disambiguations'	=> "صفحات رفع ابهام",
+'disambiguationspage'	=> "{{ns:project}}:پیوند به صفحات رفع ابهام",
+'disambiguationstext'	=> "مقاله‌های زیر به یک <i>صفحه‌ی رفع ابهام</i> پیوند دارند. به جای این، این صفحات باید به
+They should link to the appropriate topic instead.<br />A page is treated as dismbiguation if it is linked from $1.<br />Links from other namespaces are <i>not</i> listed here.",
+'doubleredirects'	=> "تغییرمسیرهای دوتایی",
+'brokenredirects'	=> "تغییرمسیرهای خراب",
+'brokenredirectstext'	=> "تغییرمسیرهای زیر به یک صفحه‌ی ناموجود پیوند دارند.",
+
+
+# Miscellaneous special pages
+#
+'lonelypages'	=> "صفحات یتیم",
+'unusedimages'	=> "تصاویر بلااستفاده",
+'popularpages'	=> "صفحات محبوب",
+'nviews'		=> "$1 نمایش",
+'wantedpages'	=> "صفحات مورد نیاز",
+'nlinks'		=> "$1 پیوند",
+'allpages'		=> "همه‌ی صفحات",
+'randompage'	=> "صفحه‌ی تصادفی",
+'shortpages'	=> "صفحات کوتاه",
+'longpages'		=> "صفحات بلند",
+'deadendpages'  => "صفحات بن‌بست",
+'listusers'		=> "فهرست کاربران",
+'specialpages'	=> "صفحات ویژه",
+'spheading'		=> "صفحات ویژه‌ی همه‌ی کاربران",
+'recentchangeslinked' => "تغییرات مرتبط",
+'rclsub'		=> "(به صفحات پیونددار از «$1»)",
+'newpages'		=> "صفحات جدید",
+'ancientpages'		=> "قدیمی‌ترین مقاله‌ها",
+'intl'		=> "پیوندهای بین زبانی",
+'movethispage'	=> "انتقال این صفحه",
+'unusedimagestext' => "<p>لطفاٌ توجه کنید که وبگاه‌های دیگر از جمله {{SITENAME}}های بین‌المللی
+ممکن است با URL مستقیم به تصاویر پیوند داشته باشند، و نتیجتاً با وجود استفاده‌ی فعال
+اینجا فهرست شده باشند.",
+'booksources'	=> "منابع کتاب",
+# FIXME: Other sites, of course, may have affiliate relations with the booksellers list
+'booksourcetext' => "در زیر فهرستی از پیوندها به وبگاه‌های دیگری که کتاب‌های نو و دست دوم می‌فروشند آمده است،
+و ممکن است اطلاعات بیشتری نیز درباره‌ی کتاب‌هایی که دنبالشان می‌گردید داشته باشند.
+{{SITENAME}} وابستگی یا ارتباطی با هیچ یک از این کسب‌وکارها ندارد، و این فهرست
+نباید به معنی تأیید یا حمایت تعبیر شود.",
+'alphaindexline' => "$1 تا $2",
+
+# Email this user
+#
+'mailnologin'	=> "نشانی فرستنده‌ای نیست",
+'mailnologintext' => "برای فرستادن پست الکترونیکی به کاربران دیگر باید [[ویژه:Userlogin|به سیستم وارد شوید]]
+و نشانی پست الکترونیکی معتبری در [[ویژه:ترجیحات|ترجیحات]]
+خود داشته باشید.",
+'emailuser'		=> "پست الکترونیکی به این کاربر",
+'emailpage'		=> "پست الکترونیکی به کاربر",
+'emailpagetext'	=> "اگر این کاربر نشانی پست الکترونیکی معتبری در ترجیحات کاربریش وارد کرده
+باشد، فرم زیر یک پیغام می‌فرستد.
+نشانی پست الکترونیکی‌ای که در ترجیحات کاربریتان وارد کرده‌اید در نشانی فرستنده (From) نامه
+خواهد آمد، تا گیرنده بتواند پاسخ دهد.",
+'noemailtitle'	=> "نشانی پست‌الکترونیک موجود نیست",
+'noemailtext'	=> "این کاربر نشانی پست الکترونیکی معتبری مشخص نکرده است،
+یا تصمیم گرفته از کاربران دیگر پست الکترونیکی دریافت نکند.",
+'emailfrom'		=> "از",
+'emailto'		=> "به",
+'emailsubject'	=> "عنوان",
+'emailmessage'	=> "پیغام",
+'emailsend'		=> "فرستاده شود",
+'emailsent'		=> "پست الکترونیکی فرستاده شد",
+'emailsenttext' => "پیغام پست الکترونیکی شما فرستاده شد.",
+
+# Watchlist
+#
+'watchlist'			=> "فهرست تعقیبات من",
+'mywatchlist'			=> "فهرست تعقیبات من",
+'nowatchlist'		=> "در فهرست تعقیبات شما هیچ موردی نیست.",
+'watchnologin'		=> "به سیستم وارد نشده‌اید",
+'watchnologintext'	=> "برای تغییر فهرست تعقیباتتان باید [[ویژه:Userlogin|به سیستم وارد شوید]].",
+'addedwatch'		=> "به فهرست تعقیبات اضافه شود",
+'removedwatch'		=> "از فهرست تعقیبات برداشته شد",
+'removedwatchtext' 	=> "صفحه‌ی «$1» از فهرست تعقیبات شما برداشته شد",
+'watchthispage'		=> "تعقیب این صفحه",
+'unwatchthispage' 	=> "توقف تعقیب",
+'notanarticle'		=> "مقاله نیست",
+'watchnochange' 	=> "هیچ یک از موارد در حال تعقیب شما در دوره‌ی زمانی نمایش‌یافته ویرایش نشده است.",
+'watchdetails'		=> "($1 pages watched not counting talk pages;
+$2 total pages edited since cutoff;
+$3...
+[$4 نمایش و ویرایش فهرست کامل].)",
+'watchmethod-recent'=> "بررسی ویرایش‌های اخیر برای صفحات در حال تعقیب",
+'watchmethod-list'	=> "بررسی صفحات در حال تعقیب برای ویرایش‌های اخیر",
+'removechecked' 	=> "برداشتن موارد تیک‌خورده از فهرست تعقیبات",
+'watchlistcontains' => "فهرست تعقیبات شما حاوی $1 صفحه است.",
+'watcheditlist'		=> "در اینجا فهرست الفبایی‌ای از صفحات در تعقیب شما می‌آید.
+در جعبه‌ی صفحاتی که می‌خواهید از فهرست تعقیباتتان حذف شود تیک بزنید و روی دکمه‌ی «برداشتن موارد» در پایین
+صفحه کلیک کنید.",
+'removingchecked' 	=> "در حال برداشتن موارد درخواستی از فهرست تعقیبات...",
+'couldntremove' 	=> "نمی‌توان مورد «$1» را حذف کرد...",
+'iteminvalidname' 	=> "مشکل با مورد «$1»، نام نامعتبر است...",
+'wlnote' 			=> "در زیر آخرین $1 تغییر در $2 ساعت آخر آمده است.",
+'wlshowlast' 		=> "نمایش آخرین $1 ساعت $2 روز $3",
+'wlsaved'			=> "این نسخه‌ی ذخیره‌شده‌ای از فهرست تعقیبات شما است.",
+
+
+# Delete/protect/revert
+#
+'deletepage'	=> "حذف صفحه",
+'confirm'		=> "تأیید",
+'exblank' => "صفحه خالی بود",
+'confirmdelete' => "تأیید حذف",
+'deletesub'		=> "(در حال حذف «$1»)",
+'historywarning' => "هشدار: صفحه‌ای که دارید حذف می‌کند تاریخچه‌ای دارد:",
+'actioncomplete' => "عمل انجام شد",
+'deletedtext'	=> "«$1» حذف شده است.
+برای سابقه‌ی حذف‌های اخیر به $2 مراجعه کنید.",
+'deletedarticle' => "«$1» حذف شد",
+'dellogpage'	=> "سیاهه‌ی_حذف",
+'dellogpagetext' => "فهرست زیر فهرستی از اخیرترین حذف‌ها است.
+همه‌ی زمان‌های نشان‌داده‌شده زمان خادم (وقت گرینیچ) است.
+<ul>
+</ul>",
+'deletionlog'	=> "سیاهه‌ی حذف",
+'reverted'		=> "به نسخه‌ی قدیمی‌تر برگردانده شد",
+'deletecomment'	=> "دلیل حذف",
+'imagereverted' => "برگرداندن به نسخه‌ی قدیمی‌تر با موفقیت انجام شد.",
+'cantrollback'	=> "نمی‌توان ویرایش را برگرداند؛ آخرین مشارکت‌کننده تنها مؤلف این مقاله است.",
+'alreadyrolled'	=> "Cannot rollback last edit of [[:$1]]
+by [[User:$2|$2]] ([[User talk:$2|Talk]]); someone else has edited or rolled back the article already.
+
+آخرین ویرایش توسط [[کاربر:$3|$3]] ([[بحث کاربر:$3|بحث]]).",
+#   only shown if there is an edit comment
+'editcomment' => "توضیح ویرایش این بود: \"<i>$1</i>\".",
+'revertpage'	=> "ویرایش $2 برگردانده شد، به آخرین تغییری که  $1 انجام داده است",
+'protectlogpage' => "سیاهه‌ی_محافظت",
+'protectlogtext' => "در زیر فهرست قفل کردن‌ها/ازقفل‌درآوردن‌های صفحات آمده است.
+برای اطلاعات بیشتر به [[{{ns:project}}:صفحه‌ی محافظت‌شده]] مراجعه کنید.",
+'protectedarticle' => "[[$1]] محافظت شد",
+'unprotectedarticle' => "[[$1]] از محافظت در آمد",
+
+# Undelete
+'undelete' => "احیای صفحه‌ی حذف شده",
+'undeletepage' => "نمایش و احیای صفحات حذف شده",
+'undeletepagetext' => "صفحات زیر حذف شده‌اند ولی هنوز در بایگانی هستند و می‌توانند احیا شوند.
+این آرشیو ممکن است هر چند وقت تمیز شود.",
+'undeletearticle' => "احیای مقاله‌ی حذف‌شده",
+'undeleterevisions' => "$1 نسخه بایگانی شده است",
+'undeletehistory' => "اگر این صفحه را احیا کنید، همه‌ی نسخه‌های آن در تاریخچه احیا خواهند شد.
+اگر صفحه‌ی جدیدی با نام یکسان از زمان حذف ایجاد شده باشد، نسخه‌های احیاشده در تاریخچه‌ی قبلی خواهند آمد،
+و نسخه‌ی فعلی صفحه‌ی زنده به طور خودکار جایگزین نخواهد شد.",
+'undeleterevision' => "حذف نسخه‌ی به تاریخ $1",
+'undeletebtn' => "احیا شود!",
+'undeletedarticle' => "«$1» احیا شد",
+
+# Contributions
+#
+'contributions'	=> "مشارکت‌های کاربر",
+'mycontris' => "مشارکت‌های من",
+'contribsub2'	=> "برای $1 ($2)",
+'nocontribs'	=> "هیچ تغییری نظیر این مشخصات یافت نشد.",
+'ucnote'		=> "در زیر آخرین <b>$1</b> تغییر این کاربر در <b>$2</b> روز اخیر می‌آید.",
+'uclinks'		=> "نمایش آخرین $1 تغییر؛ نمایش $2 روز اخیر.",
+'uctop'		=> " (بالا)" ,
+
+# What links here
+#
+'whatlinkshere'	=> "آنچه به اینجا پیوند دارد",
+'notargettitle' => "مقصدی نیست",
+'notargettext'	=> "شما صفحه‌ی یا کاربر مقصدی برای انجام این عمل روی آن مشخص نکرده‌اید.",
+'linklistsub'	=> "(فهرست پیوندها)",
+'linkshere'		=> "صفحات زیر به اینجا پیوند دارند:",
+'nolinkshere'	=> "هیچ صفحه‌ای به اینجا پیوند ندارد.",
+'isredirect'	=> "صفحه‌ی تغییر مسیر",
+
+# Block/unblock IP
+#
+'blockip'		=> "بستن کاربر",
+'blockiptext'	=> "از فرم زیر برای بستن دسترسی نوشتن از یک نشانی IP یا
+نام کاربری مشخص استفاده کنید.
+این کار فقط فقط باید برای جلوگیری از خرابکاری انجام شود، و بر اساس
+[[{{ns:project}}:خط مشی|خط مشی]].
+دلیل مشخص این کار را در زیر ذکر کنید (مثلاً با ذکر صفحات به‌خصوصی که تخریب شده‌اند).",
+'ipaddress'		=> "نشانی IP/نام کاربر",
+'ipbreason'		=> "دلیل",
+'ipbsubmit'		=> "این کاربر بسته شود",
+'badipaddress'	=> "کاربری با این نام وجود ندارد.",
+'blockipsuccesssub' => "بستن با موفقیت انجام شد",
+'blockipsuccesstext' => "«$1» بسته شده است.
+<br />برای بررسی بسته‌شدن‌ها، به [[ویژه:فهرستIPهای‌بسته|فهرست IPهای بسته]] مراجعه کنید.",
+'unblockip'		=> "باز کردن کاربر",
+'unblockiptext'	=> "برای باز گرداندن دسترسی نوشتن به یک نشانی IP یا نام کاربری بسته‌شده
+از فرم زیر استفاده کنید.",
+'ipusubmit'		=> "باز کردن این نشانی",
+'ipblocklist'	=> "فهرست نشانی‌های IP و نام‌های کاربری بسته‌شده",
+'blocklistline'	=> "$1، $2 بست $3 را ($4)",
+'blocklink'		=> "بسته شود",
+'unblocklink'	=> "باز شود",
+'contribslink'	=> "مشارکت‌ها",
+'autoblocker'	=> "به طور خودکار بسته شد چون IP شما و «$1» یکی است. دلیل «$2».",
+'blocklogpage'	=> "سیاهه‌ی_بسته‌شدن‌ها",
+'blocklogentry'	=> '«$1» بسته شد',
+'blocklogtext'	=> "این سیاهه‌ای از اعمال بستن و باز کردن کاربرها است. نشانی‌های IPی که به طور
+خودکار بسته شده‌اند فهرست نشده‌اند. برای فهرست محرومیت‌ها و بسته‌شدن‌های عملیاتی در لحظه‌ی حاضر،
+به [[Special:Ipblocklist|فهرست IPهای بسته]] مراجعه کنید.",
+'unblocklogentry'	=> '«$1» باز شد',
+
+# Developer tools
+#
+'lockdb'		=> "قفل کردن پایگاه داده",
+'unlockdb'		=> "از قفل در آوردن پایگاه داده",
+'lockconfirm'	=> "بله، من جداً می‌خواهم پایگاه داده را قفل کنم.",
+'unlockconfirm'	=> "بله، من جداً می‌خواهم پایگاه داده را از قفل در آورم.",
+'lockbtn'		=> "قفل کردن پایگاه داده",
+'unlockbtn'		=> "از قفل درآوردن پایگاه داده",
+'locknoconfirm' => "شما در جعبه‌ی تأیید تیک نزدید",
+'lockdbsuccesssub' => "قفل کردن پایگاه داده با موفقیت انجام شد",
+'unlockdbsuccesssub' => "قفل پایگاه داده برداشته شد",
+'lockdbsuccesstext' => "پایگاه داده قفل شد.
+<br />فراموش نکنید که پس از اتمام نگهداری قفل را بردارید.",
+'unlockdbsuccesstext' => "پایگاه داده از قفل در آمد.",
+
+# Move page
+#
+'movepage'		=> "انتقال صفحه",
+'movepagetext'	=> "با استفاده از فرم زیر نام صفحه تغییر خواهد کرد، و تمام تاریخچه‌اش به
+نام جدید منتقل خواهد شد.
+عنوان قدیمی تبدیل به یک صفحه‌ی تغییر مسیر به عنوان جدید خواهد شد.
+پیوندهای به عنوان صفحه‌ی قدیمی تغییر نخواهند کرد؛ حتماً تغییرمسیرهای دوتایی یا خراب را
+[[ویژه:نگهداری|بررسی کنید]].
+شما مسئول اطمینان از این هستید که پیوندها هنوز به همان‌جایی که قرار است بروند.
+
+توجه کنید که اگر از قبل صفحه‌ای در عنوان جدید وجود داشته باشد صفحه منتقل '''نخواهد شد'''، مگر
+این که صفحه خالی یا تغییر مسیر باشد و تاریخچه‌ی ویرایشی نداشته باشد.
+این یعنی اگر اشتباه کردید صفحه را به همان جایی که از آن منتقل شده بود برگردانید،
+و این که نمی‌توانید روی صفحات موجود بنویسید.
+
+<b>هشدار!</b>
+این کار ممکن است تغییر اساسی و غیرمنتظره‌ای برای صفحات محبوب باشد؛
+لطفاً مطمئن شوید که قبل از ادامه دادن عواقب این کار را درک می‌کنید.",
+'movearticle'	=> "انتقال صفحه",
+'movenologin'	=> "به سیستم وارد نشده‌اید",
+'movenologintext' => "برای انتقال صفحات باید کاربر ثبت‌شده بوده و
+[[ویژه:Userlogin|به سیستم وارد شوید]].",
+'newtitle'		=> "به عنوان جدید",
+'movepagebtn'	=> "صفحه منتقل شود",
+'pagemovedsub'	=> "انتقال با موفقیت انجام شد",
+'pagemovedtext' => "صفحه‌ی «[[$1]]» به «[[$2]]» منتقل شد.",
+'articleexists' => "صفحه‌ای با این نام از قبل وجود دارد، یا نامی که انتخاب کرده‌اید معتبر نیست.
+لطفاً نام دیگری انتخاب کنید.",
+'talkexists'	=> "صفحه با موفقیت منتقل شد، ولی صفحه‌ی بحث را، به این دلیل که صفحه‌ی بحثی در عنوان جدید
+وجود دارد، نمی‌توان منتقل کرد. لطفاً آنها را دستی ترکیب کنید.",
+'movedto'		=> "منتقل شد به",
+'movetalk'		=> "صفحه‌ی «بحث» هم، در صورت لزوم، منتقل شود.",
+'talkpagemoved' => "صفحه‌ی بحث متناظر نیز منتقل شد.",
+'talkpagenotmoved' => "صفحه‌ی بحث متناظر منتقل <strong>نشد</strong>.",
+"1movedto2"		=> "$1 به $2 منتقل شد",
+
+# Export
+
+'export'		=> "صدور صفحات",
+'exporttext'	=> "شما می‌توانید متن و تاریخچه‌ی ویرایش یک صفحه‌ی مشخص یا مجموعه‌ای از صفحات را به شکل پوشیده در XML صادر کنید؛
+این اطلاعات را می‌توان وارد ویکی دیگری که نرم‌افزار مدیاویکی اجرا می‌کند کرد، تبدیل کرد، یا برای سرگرمی شخصی نگه داشت.",
+'exportcuronly'	=> "فقط نسخه‌ی فعلی بیاید، نه کل تاریخچه",
+
+# Namespace 8 related
+
+'allmessages'	=> "همه‌ی پیغام‌ها",
+'allmessagestext'	=> "این فهرستی از همه‌ی پیغام‌های موجود در فضای نام مدیاویکی: است",
+
+# Thumbnails
+
+'thumbnail-more'      => "بزرگ شود",
+
+# Math
+
+'mw_math_png' => "همیشه PNG کشیده شود",
+'mw_math_simple' => "اگر خیلی ساده بودHTML وگرنه PNG",
+'mw_math_html' => "اگر ممکن بود HTML وگرنه PNG",
+'mw_math_source' => "در قالب TeX باقی بماند (برای مرورگرهای متنی)",
+'mw_math_modern' => "توصیه برای مرورگرهای امروزی",
+
+);
+
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesFi.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesFi.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesFi.php	(revision 1280)
@@ -0,0 +1,2143 @@
+<?php
+/** Finnish (Suomi)
+ *
+ * @addtogroup Language
+ */
+
+$separatorTransformTable = array(',' => "\xc2\xa0", '.' => ',' );
+
+$namespaceNames = array(
+	NS_MEDIA            => 'Media',
+	NS_SPECIAL          => 'Toiminnot',
+	NS_MAIN             => '',
+	NS_TALK             => 'Keskustelu',
+	NS_USER             => 'Käyttäjä',
+	NS_USER_TALK        => 'Keskustelu_käyttäjästä',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK     => 'Keskustelu_{{grammar:elative|$1}}',
+	NS_IMAGE            => 'Kuva',
+	NS_IMAGE_TALK       => 'Keskustelu_kuvasta',
+	NS_MEDIAWIKI        => 'Järjestelmäviesti',
+	NS_MEDIAWIKI_TALK   => 'Keskustelu_järjestelmäviestistä',
+	NS_TEMPLATE         => 'Malline',
+	NS_TEMPLATE_TALK    => 'Keskustelu_mallineesta',
+	NS_HELP             => 'Ohje',
+	NS_HELP_TALK        => 'Keskustelu_ohjeesta',
+	NS_CATEGORY         => 'Luokka',
+	NS_CATEGORY_TALK    => 'Keskustelu_luokasta'
+);
+
+$skinNames = array(
+	'standard'          => 'Perus',
+	'cologneblue'       => 'Kölnin sininen',
+	'myskin'            => 'Oma tyylisivu'
+);
+
+$datePreferences = array(
+	'default',
+	'fi normal',
+	'fi seconds',
+	'fi numeric',
+	'ISO 8601',
+);
+
+$defaultDateFormat = 'fi normal';
+
+$dateFormats = array(
+	'fi normal time' => 'H.i',
+	'fi normal date' => 'j. F"ta" Y',
+	'fi normal both' => 'j. F"ta" Y "kello" H.i',
+
+	'fi seconds time' => 'H:i:s',
+	'fi seconds date' => 'j. F"ta" Y',
+	'fi seconds both' => 'j. F"ta" Y "kello" H:i:s',
+
+	'fi numeric time' => 'H.i',
+	'fi numeric date' => 'j.n.Y',
+	'fi numeric both' => 'j.n.Y "kello" H.i',
+);
+
+$datePreferenceMigrationMap = array(
+	'default',
+	'fi normal',
+	'fi seconds',
+	'fi numeric',
+);
+
+$bookstoreList = array(
+	'Bookplus'                      => 'http://www.bookplus.fi/product.php?isbn=$1',
+	'Helsingin yliopiston kirjasto' => 'http://pandora.lib.hel.fi/cgi-bin/mhask/monihask.py?volname=&author=&keyword=&ident=$1&submit=Hae&engine_helka=ON',
+	'Pääkaupunkiseudun kirjastot'   => 'http://www.helmet.fi/search*fin/i?SEARCH=$1',
+	'Tampereen seudun kirjastot'    => 'http://kirjasto.tampere.fi/Piki?formid=fullt&typ0=6&dat0=$1'
+);
+
+$magicWords = array(
+	'redirect'            => array( 0, "#UUDELLEENOHJAUS", "#REDIRECT" ),
+	'toc'                 => array( 0, "__SISÄLLYSLUETTELO__", "__TOC__" ),
+	'img_right'           => array( 1, "oikea", "right" ),
+	'img_left'            => array( 1, "vasen", "left" ),
+	'img_center'          => array( 1, "keskitetty", "center", "centre" ),
+	'img_framed'          => array( 1, "kehys", "kehystetty", "framed", "enframed", "frame" ),
+	'grammar'             => array( 0, "TAIVUTUS:", "GRAMMAR:" ),
+	'plural'              => array( 0, "MONIKKO:", "PLURAL:" ),
+);
+
+$specialPageAliases = array(
+	'DoubleRedirects'           => array( 'Kaksinkertaiset_uudelleenohjaukset' ),
+	'BrokenRedirects'           => array( 'Virheelliset_uudelleenohjaukset' ),
+	'Disambiguations'           => array( 'Täsmennyssivut' ),
+	'Userlogin'                 => array( 'Kirjaudu_sisään' ),
+	'Userlogout'                => array( 'Kirjaudu_ulos' ),
+	'Preferences'               => array( 'Asetukset' ),
+	'Watchlist'                 => array( 'Tarkkailulista' ),
+	'Recentchanges'             => array( 'Tuoreet_muutokset' ),
+	'Upload'                    => array( 'Lisää_tiedosto' ),
+	'Imagelist'                 => array( 'Tiedostoluettelo' ),
+	'Newimages'                 => array( 'Uudet_kuvat' ),
+	'Listusers'                 => array( 'Käyttäjät' ),
+	'Statistics'                => array( 'Tilastot' ),
+	'Randompage'                => array( 'Satunnainen_sivu' ),
+	'Lonelypages'               => array( 'Yksinäiset_sivut' ),
+	'Uncategorizedpages'        => array( 'Luokittelemattomat_sivut' ),
+	'Uncategorizedcategories'   => array( 'Luokittelemattomat_luokat' ),
+	'Uncategorizedimages'       => array( 'Luokittelemattomat_tiedostot' ),
+	'Unusedcategories'          => array( 'Käyttämättömät_luokat' ),
+	'Unusedimages'              => array( 'Käyttämättömät_tiedostot' ),
+	'Wantedpages'               => array( 'Halutuimmat_sivut' ),
+	'Wantedcategories'          => array( 'Halutuimmat_luokat' ),
+	'Mostlinked'                => array( 'Viitatuimmat_sivut' ),
+	'Mostlinkedcategories'      => array( 'Viitatuimmat_luokat' ),
+	'Mostcategories'            => array( 'Luokitelluimmat_sivut' ),
+	'Mostimages'                => array( 'Viitatuimmat_kuvat' ),
+	'Mostrevisions'             => array( 'Muokatuimmat_sivut' ),
+	'Fewestrevisions'           => array( 'Vähiten_muokatut_sivut' ),
+	'Shortpages'                => array( 'Lyhyet_sivut' ),
+	'Longpages'                 => array( 'Pitkät_sivut' ),
+	'Newpages'                  => array( 'Uudet_sivut' ),
+	'Ancientpages'              => array( 'Kuolleet_sivut' ),
+	'Deadendpages'              => array( 'Linkittömät_sivut' ),
+	'Protectedpages'            => array( 'Suojatut_sivut' ),
+	'Allpages'                  => array( 'Kaikki_sivut' ),
+	'Prefixindex'               => array( 'Etuliiteluettelo' ) ,
+	'Ipblocklist'               => array( 'Muokkausestot' ),
+	'Specialpages'              => array( 'Toimintosivut' ),
+	'Contributions'             => array( 'Muokkaukset' ),
+	'Emailuser'                 => array( 'Lähetä_sähköpostia' ),
+	'Whatlinkshere'             => array( 'Tänne_viittaavat_sivut' ),
+	'Recentchangeslinked'       => array( 'Linkitetyt_muutokset' ),
+	'Movepage'                  => array( 'Siirrä_sivu' ),
+	'Blockme'                   => array( 'Estä_minut' ),
+	'Booksources'               => array( 'Kirjalähteet' ),
+	'Categories'                => array( 'Luokat' ),
+	'Export'                    => array( 'Vie_sivuja' ),
+	'Version'                   => array( 'Versio' ),
+	'Allmessages'               => array( 'Järjestelmäviestit' ),
+	'Log'                       => array( 'Loki', 'Lokit' ),
+	'Blockip'                   => array( 'Estä' ),
+	'Undelete'                  => array( 'Palauta' ),
+	'Import'                    => array( 'Tuo_sivuja' ),
+	'Lockdb'                    => array( 'Lukitse_tietokanta' ),
+	'Unlockdb'                  => array( 'Avaa_tietokanta' ),
+	'Userrights'                => array( 'Käyttöoikeudet' ),
+	'MIMEsearch'                => array( 'MIME-haku' ),
+	'Unwatchedpages'            => array( 'Tarkkailemattomat_sivut' ),
+	'Listredirects'             => array( 'Uudelleenohjaukset' ),
+	'Revisiondelete'            => array( 'Poista_muokkaus' ),
+	'Unusedtemplates'           => array( 'Käyttämättömät_mallineet' ),
+	'Randomredirect'            => array( 'Satunnainen_uudelleenohjaus' ),
+	'Mypage'                    => array( 'Oma_sivu' ),
+	'Mytalk'                    => array( 'Oma_keskustelu' ),
+	'Mycontributions'           => array( 'Omat_muokkaukset' ),
+	'Listadmins'                => array( 'Ylläpitäjät' ),
+	'Popularpages'              => array( 'Suositut_sivut' ),
+	'Search'                    => array( 'Haku' ),
+	'Resetpass'                 => array( 'Alusta_salasana' ),
+	'Withoutinterwiki'          => array( 'Kielilinkittömät_sivut' ),
+);
+
+$linkTrail = '/^([a-zäö]+)(.*)$/sDu';
+
+$messages = array(
+# User preference toggles
+'tog-underline'               => 'Alleviivaa linkit:',
+'tog-highlightbroken'         => 'Näytä linkit puuttuville sivuille <a href="#" class="new">näin</a> (vaihtoehtoisesti näin: <a href="#" class="internal">?</a>).',
+'tog-justify'                 => 'Tasaa kappaleet',
+'tog-hideminor'               => 'Piilota pienet muutokset tuoreet muutokset -listasta',
+'tog-extendwatchlist'         => 'Laajenna tarkkailulista näyttämään kaikki tehdyt muutokset',
+'tog-usenewrc'                => 'Kehittynyt tuoreet muutokset -listaus (JavaScript)',
+'tog-numberheadings'          => 'Numeroi otsikot',
+'tog-showtoolbar'             => 'Näytä työkalupalkki',
+'tog-editondblclick'          => 'Muokkaa sivuja kaksoisnapsautuksella (JavaScript)',
+'tog-editsection'             => 'Näytä muokkauslinkit jokaisen osion yläpuolella',
+'tog-editsectiononrightclick' => 'Muokkaa osioita napsauttamalla otsikkoa hiiren oikealla painikkeella (JavaScript)',
+'tog-showtoc'                 => 'Näytä sisällysluettelo sivuille, joilla yli 3 otsikkoa',
+'tog-rememberpassword'        => 'Älä kysy salasanaa saman yhteyden eri istuntojen välillä',
+'tog-editwidth'               => 'Muokkauskenttä on sivun levyinen',
+'tog-watchcreations'          => 'Lisää luomani sivut tarkkailulistalle',
+'tog-watchdefault'            => 'Lisää muokkaamani sivut tarkkailulistalle',
+'tog-watchmoves'              => 'Lisää siirtämäni sivut tarkkailulistalle',
+'tog-watchdeletion'           => 'Lisää poistamani sivut tarkkailulistalle',
+'tog-minordefault'            => 'Muutokset ovat oletuksena pieniä',
+'tog-previewontop'            => 'Näytä esikatselu muokkauskentän yläpuolella',
+'tog-previewonfirst'          => 'Näytä esikatselu heti, kun muokkaus aloitetaan',
+'tog-nocache'                 => 'Älä tallenna sivuja välimuistiin',
+'tog-enotifwatchlistpages'    => 'Lähetä sähköpostiviesti tarkkailtujen sivujen muutoksista',
+'tog-enotifusertalkpages'     => 'Lähetä sähköpostiviesti, kun käyttäjäsivun keskustelusivu muuttuu',
+'tog-enotifminoredits'        => 'Lähetä sähköpostiviesti myös pienistä muokkauksista',
+'tog-enotifrevealaddr'        => 'Näytä sähköpostiosoitteeni muille lähetetyissä ilmoituksissa',
+'tog-shownumberswatching'     => 'Näytä sivua tarkkailevien käyttäjien määrä',
+'tog-fancysig'                => 'Muotoilematon allekirjoitus ilman automaattista linkkiä',
+'tog-externaleditor'          => 'Käytä ulkoista tekstieditoria oletuksena',
+'tog-externaldiff'            => 'Käytä ulkoista diff-ohjelmaa oletuksena',
+'tog-showjumplinks'           => 'Lisää loikkaa-käytettävyyslinkit sivun alkuun',
+'tog-uselivepreview'          => 'Käytä pikaesikatselua (JavaScript) (kokeellinen)',
+'tog-forceeditsummary'        => 'Huomauta, jos yhteenvetoa ei ole annettu',
+'tog-watchlisthideown'        => 'Piilota omat muokkaukset',
+'tog-watchlisthidebots'       => 'Piilota bottien muokkaukset',
+'tog-watchlisthideminor'      => 'Piilota pienet muokkaukset',
+'tog-nolangconversion'        => 'Älä tee muunnoksia kielivarianttien välillä',
+'tog-ccmeonemails'            => 'Lähetä minulle kopio MediaWikin kautta lähetetyistä sähköposteista',
+'tog-diffonly'                => 'Älä näytä sivun sisältöä versioita vertailtaessa',
+
+'underline-always'  => 'Aina',
+'underline-never'   => 'Ei koskaan',
+'underline-default' => 'Selaimen oletustapa',
+
+'skinpreview' => '(Esikatsele...)',
+
+# Dates
+'sunday'        => 'sunnuntai',
+'monday'        => 'maanantai',
+'tuesday'       => 'tiistai',
+'wednesday'     => 'keskiviikko',
+'thursday'      => 'torstai',
+'friday'        => 'perjantai',
+'saturday'      => 'lauantai',
+'sun'           => 'su',
+'mon'           => 'ma',
+'tue'           => 'ti',
+'wed'           => 'ke',
+'thu'           => 'to',
+'fri'           => 'pe',
+'sat'           => 'la',
+'january'       => 'tammikuu',
+'february'      => 'helmikuu',
+'march'         => 'maaliskuu',
+'april'         => 'huhtikuu',
+'may_long'      => 'toukokuu',
+'june'          => 'kesäkuu',
+'july'          => 'heinäkuu',
+'august'        => 'elokuu',
+'september'     => 'syyskuu',
+'october'       => 'lokakuu',
+'november'      => 'marraskuu',
+'december'      => 'joulukuu',
+'january-gen'   => 'tammikuun',
+'february-gen'  => 'helmikuun',
+'march-gen'     => 'maaliskuun',
+'april-gen'     => 'huhtikuun',
+'may-gen'       => 'toukokuun',
+'june-gen'      => 'kesäkuun',
+'july-gen'      => 'heinäkuun',
+'august-gen'    => 'elokuun',
+'september-gen' => 'syyskuun',
+'october-gen'   => 'lokakuun',
+'november-gen'  => 'marraskuun',
+'december-gen'  => 'joulukuun',
+'jan'           => 'tammikuu',
+'feb'           => 'helmikuu',
+'mar'           => 'maaliskuu',
+'apr'           => 'huhtikuu',
+'may'           => 'toukokuu',
+'jun'           => 'kesäkuu',
+'jul'           => 'heinäkuu',
+'aug'           => 'elokuu',
+'sep'           => 'syyskuu',
+'oct'           => 'lokakuu',
+'nov'           => 'marraskuu',
+'dec'           => 'joulukuu',
+
+# Bits of text used by many pages
+'categories'            => 'Luokat',
+'pagecategories'        => '{{PLURAL:$1|Luokka|Luokat}}',
+'category_header'       => 'Sivut, jotka ovat luokassa $1',
+'subcategories'         => 'Alaluokat',
+'category-media-header' => 'Luokan ”$1” sisältämät mediatiedostot',
+
+'mainpagetext'      => "'''Mediawiki on onnistuneesti asennettu.'''",
+'mainpagedocfooter' => "Lisätietoja käytöstä on sivulla [http://meta.wikimedia.org/wiki/MediaWiki_User%27s_Guide User's Guide].
+=== Lisäohjeita===
+* [http://www.mediawiki.org/wiki/Help:Configuration_settings Asetusten teko-ohjeita]
+* [http://www.mediawiki.org/wiki/Help:FAQ MediaWikin FAQ]
+* [http://mail.wikimedia.org/mailman/listinfo/mediawiki-announce Sähköpostilista, jolla tiedotetaan MediaWikin uusista versioista]\",
+=== Asetukset ===
+Tarkista, että alla olevat taivutusmuodot ovat oikein. Jos eivät, tee tarvittavat muutokset LocalSettings.php:hen seuraavasti:
+ \$wgGrammarForms['fi']['genitive']['{{SITENAME}}'] = '...';
+ \$wgGrammarForms['fi']['partitive']['{{SITENAME}}'] = '...';
+ \$wgGrammarForms['fi']['elative']['{{SITENAME}}'] = '...';
+ \$wgGrammarForms['fi']['inessive']['{{SITENAME}}'] = '...';
+ \$wgGrammarForms['fi']['illative']['{{SITENAME}}'] = '...';
+Taivutusmuodot: {{GRAMMAR:genitive|{{SITENAME}}}} (yön) — {{GRAMMAR:partitive|{{SITENAME}}}} (yötä) — {{GRAMMAR:elative|{{SITENAME}}}} (yöstä) — {{GRAMMAR:inessive|{{SITENAME}}}} (yössä) — {{GRAMMAR:illative|{{SITENAME}}}} (yöhön).",
+
+'about'          => 'Tietoja',
+'article'        => 'Sivu',
+'newwindow'      => '(avautuu uuteen ikkunaan)',
+'cancel'         => 'Keskeytä',
+'qbfind'         => 'Etsi',
+'qbbrowse'       => 'Selaa',
+'qbedit'         => 'Muokkaa',
+'qbpageoptions'  => 'Sivuasetukset',
+'qbpageinfo'     => 'Sivun tiedot',
+'qbmyoptions'    => 'Asetukset',
+'qbspecialpages' => 'Toimintosivut',
+'moredotdotdot'  => 'Lisää...',
+'mypage'         => 'Käyttäjäsivu',
+'mytalk'         => 'Keskustelusivu',
+'anontalk'       => 'Keskustele tämän IP:n kanssa',
+'navigation'     => 'Valikko',
+
+# Metadata in edit box
+'metadata_help' => 'Sisältökuvaukset:',
+
+'errorpagetitle'    => 'Virhe',
+'returnto'          => 'Palaa sivulle $1.',
+'tagline'           => '{{SITENAME}}',
+'help'              => 'Ohje',
+'search'            => 'Haku',
+'searchbutton'      => 'Etsi',
+'go'                => 'Siirry',
+'searcharticle'     => 'Siirry',
+'history'           => 'Historia',
+'history_short'     => 'Historia',
+'updatedmarker'     => 'päivitetty viimeisimmän käyntisi jälkeen',
+'info_short'        => 'Tiedostus',
+'printableversion'  => 'Tulostettava versio',
+'permalink'         => 'Ikilinkki',
+'print'             => 'Tulosta',
+'edit'              => 'Muokkaa',
+'editthispage'      => 'Muokkaa tätä sivua',
+'delete'            => 'Poista',
+'deletethispage'    => 'Poista tämä sivu',
+'undelete_short'    => 'Palauta $1 muokkausta',
+'protect'           => 'Suojaa',
+'protect_change'    => 'muuta suojausta',
+'protectthispage'   => 'Suojaa tämä sivu',
+'unprotect'         => 'Poista suojaus',
+'unprotectthispage' => 'Poista tämän sivun suojaus',
+'newpage'           => 'Uusi sivu',
+'talkpage'          => 'Keskustele tästä sivusta',
+'talkpagelinktext'  => 'keskustelu',
+'specialpage'       => 'Toimintosivu',
+'personaltools'     => 'Henkilökohtaiset työkalut',
+'postcomment'       => 'Kommentti sivun loppuun',
+'articlepage'       => 'Näytä varsinainen sivu',
+'talk'              => 'Keskustelu',
+'views'             => 'Näkymät',
+'toolbox'           => 'Työkalut',
+'userpage'          => 'Näytä käyttäjäsivu',
+'projectpage'       => 'Näytä projektisivu',
+'imagepage'         => 'Näytä kuvasivu',
+'mediawikipage'     => 'Näytä viestisivu',
+'templatepage'      => 'Näytä mallinesivu',
+'viewhelppage'      => 'Näytä ohjesivu',
+'categorypage'      => 'Näytä luokkasivu',
+'viewtalkpage'      => 'Näytä keskustelusivu',
+'otherlanguages'    => 'Muilla kielillä',
+'redirectedfrom'    => 'Uudelleenohjattu sivulta $1',
+'redirectpagesub'   => 'Uudelleenohjaussivu',
+'lastmodifiedat'    => 'Sivua on viimeksi muutettu $1 kello $2.', # $1 date, $2 time
+'viewcount'         => 'Tämä sivu on näytetty {{PLURAL:$1|yhden kerran|$1 kertaa}}.',
+'protectedpage'     => 'Suojattu sivu',
+'jumpto'            => 'Loikkaa:',
+'jumptonavigation'  => 'valikkoon',
+'jumptosearch'      => 'hakuun',
+
+# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
+'aboutsite'         => 'Tietoja {{GRAMMAR:elative|{{SITENAME}}}}',
+'aboutpage'         => '{{ns:project}}:Tietoja',
+'bugreports'        => 'Ongelmat ja parannusehdotukset',
+'bugreportspage'    => '{{ns:project}}:Ongelmat ja parannusehdotukset',
+'copyright'         => 'Sisältö on käytettävissä lisenssillä $1.',
+'copyrightpagename' => '{{SITENAME}} ja tekijänoikeudet',
+'copyrightpage'     => '{{ns:project}}:Tekijänoikeudet',
+'currentevents'     => 'Ajankohtaista',
+'currentevents-url' => '{{ns:project}}:Ajankohtaista',
+'disclaimers'       => 'Vastuuvapaus',
+'disclaimerpage'    => '{{ns:project}}:Vastuuvapaus',
+'edithelp'          => 'Muokkausohjeet',
+'edithelppage'      => '{{ns:help}}:Kuinka sivuja muokataan',
+'faq'               => 'FAQ',
+'faqpage'           => '{{ns:project}}:FAQ',
+'helppage'          => '{{ns:help}}:Ohje',
+'mainpage'          => 'Etusivu',
+'policy-url'        => '{{ns:project}}:Käytännöt',
+'portal'            => 'Kahvihuone',
+'portal-url'        => '{{ns:project}}:Kahvihuone',
+'privacy'           => 'Tietosuojakäytäntö',
+'privacypage'       => '{{ns:project}}:Tietosuojakäytäntö',
+'sitesupport'       => 'Lahjoitukset',
+'sitesupport-url'   => '{{ns:project}}:Lahjoitukset',
+
+'badaccess'        => 'Lupa evätty',
+'badaccess-group0' => 'Sinulla ei ole lupaa suorittaa pyydettyä toimintoa.',
+'badaccess-group1' => 'Pyytämäsi toiminto on rajoitettu henkilöille ryhmässä $1.',
+'badaccess-group2' => 'Pyytämäsi toiminto on rajoitettu henkilöille ryhmissä $1.',
+'badaccess-groups' => 'Pyytämäsi toiminto on rajoitettu ryhmien $1 henkilöille.',
+
+'versionrequired'     => 'Mediawikistä tarvitaan vähintään versio $1',
+'versionrequiredtext' => 'Mediawikistä tarvitaan vähintään versio $1 tämän sivun käyttämiseen. Katso [[Special:Version|versio]]',
+
+'ok'                  => 'OK',
+'pagetitle'           => '$1 — {{SITENAME}}',
+'retrievedfrom'       => 'Haettu osoitteesta $1',
+'youhavenewmessages'  => 'Sinulle on $1 ($2).',
+'newmessageslink'     => 'uusia viestejä',
+'newmessagesdifflink' => 'viimeisin muutos',
+'editsection'         => 'muokkaa',
+'editold'             => 'muokkaa',
+'editsectionhint'     => 'Muokkaa osiota $1',
+'toc'                 => 'Sisällysluettelo',
+'showtoc'             => 'näytä',
+'hidetoc'             => 'piilota',
+'thisisdeleted'       => 'Näytä tai palauta $1.',
+'viewdeleted'         => 'Näytä $1?',
+'restorelink'         => '{{PLURAL:$1|yksi poistettu muokkaus|$1 poistettua muokkausta}}',
+'feedlinks'           => 'Uutissyötteet:',
+'feed-invalid'        => 'Virheellinen syötetyyppi.',
+
+# Short words for each namespace, by default used in the 'article' tab in monobook
+'nstab-main'      => 'Sivu',
+'nstab-user'      => 'Käyttäjäsivu',
+'nstab-media'     => 'Media',
+'nstab-special'   => 'Toiminto',
+'nstab-project'   => 'Projektisivu',
+'nstab-image'     => 'Tiedosto',
+'nstab-mediawiki' => 'Järjestelmäviesti',
+'nstab-template'  => 'Malline',
+'nstab-help'      => 'Ohje',
+'nstab-category'  => 'Luokka',
+
+# Main script and global functions
+'nosuchaction'      => 'Määrittelemätön pyyntö',
+'nosuchactiontext'  => 'Wikiohjelmisto ei tunnista URL:ssä määriteltyä pyyntöä',
+'nosuchspecialpage' => 'Kyseistä toimintosivua ei ole',
+'nospecialpagetext' => 'Wikiohjelmisto ei tunnista pyytämääsi toimintosivua.',
+
+# General errors
+'error'                => 'Virhe',
+'databaseerror'        => 'Tietokantavirhe',
+'dberrortext'          => 'Tietokantakyselyssä oli syntaksivirhe. Syynä saattaa olla virheellinen kysely, tai se saattaa johtua ohjelmointivirheestä. Viimeinen tietokantakysely, jota yritettiin, oli: <blockquote><tt>$1</tt></blockquote>. Se tehtiin funktiosta ”<tt>$2</tt>”. MySQL palautti virheen ”<tt>$3: $4</tt>”.',
+'dberrortextcl'        => 'Tietokantakyselyssä oli syntaksivirhe. Viimeinen tietokantakysely, jota yritettiin, oli: ”$1”. Se tehtiin funktiosta ”$2”. MySQL palautti virheen ”$3: $4”.',
+'noconnect'            => 'Tietokantaongelma.<br />$1',
+'nodb'                 => 'Tietokantaa $1 ei voitu valita',
+'cachederror'          => 'Pyydetystä sivusta näytettiin välimuistissa oleva kopio, ja se saattaa olla vanhentunut.',
+'laggedslavemode'      => 'Varoitus: Sivu ei välttämättä sisällä viimeisimpiä muutoksia.',
+'readonly'             => 'Tietokanta on lukittu',
+'enterlockreason'      => 'Anna lukituksen syy sekä sen arvioitu poistamisaika',
+'readonlytext'         => '{{GRAMMAR:genitive|{{SITENAME}}}} tietokanta on tällä hetkellä lukittu. Uusia sivuja ei voi luoda eikä muitakaan muutoksia tehdä. Syynä ovat todennäköisimmin rutiininomaiset tietokannan ylläpitotoimet. Tietokannan lukinneen ylläpitäjän selitys: $1',
+'missingarticle'       => "Tietokannasta ei löytynyt sivua '''$1'''. Sivu on saatettu poistaa, tai palvelin ei ole ehtinyt vielä käsitellä sitä. Jälkimmäisessä tapauksessa yritä hetken päästä uudelleen. Jos ongelma ei katoa, ota yhteyttä ylläpitäjään ja anna mukaan tämän sivun URL-osoite.",
+'readonly_lag'         => 'Tietokanta on automaattisesti lukittu, jotta kaikki tietokantapalvelimet saisivat kaikki tuoreet muutokset',
+'internalerror'        => 'Sisäinen virhe',
+'filecopyerror'        => 'Tiedostoa <b>$1</b> ei voitu kopioida tiedostoksi <b>$2</b>.',
+'filerenameerror'      => 'Tiedostoa <b>$1</b> ei voitu nimetä uudelleen nimellä <b>$2</b>.',
+'filedeleteerror'      => 'Tiedostoa <b>$1</b> ei voitu poistaa.',
+'filenotfound'         => 'Tiedostoa <b>$1</b> ei löytynyt.',
+'unexpected'           => 'Odottamaton arvo: ”$1” on ”$2”.',
+'formerror'            => 'Lomakkeen tiedot eivät kelpaa',
+'badarticleerror'      => 'Toimintoa ei voi suorittaa tälle sivulle.',
+'cannotdelete'         => 'Sivun tai tiedoston poisto epäonnistui. Joku muu on saattanut poistaa sen.',
+'badtitle'             => 'Virheellinen otsikko',
+'badtitletext'         => 'Pyytämäsi sivuotsikko oli virheellinen, tyhjä tai väärin linkitetty kieltenvälinen tai wikienvälinen linkki.',
+'perfdisabled'         => 'Pahoittelut! Tämä ominaisuus ei toistaiseksi ole käytetössä, sillä se hidastaa tietokantaa niin paljon, että kukaan ei voi käyttää wikiä. Toiminto ohjelmoidaan tehokkaammaksi lähiaikoina. (Sinäkin voit tehdä sen! Tämä on vapaa ohjelmisto.)',
+'perfdisabledsub'      => 'Tässä on tallennettu kopio $1', # obsolete?
+'perfcached'           => 'Tiedot ovat välimuistista eivätkä välttämättä ole ajan tasalla.',
+'perfcachedts'         => 'Seuraava data on tuotu välimuistista ja se päivitettiin viimeksi $1.',
+'querypage-no-updates' => 'Tämän sivun tietoja ei toistaiseksi päivitetä.',
+'wrong_wfQuery_params' => 'Virheelliset parametrit wfQuery()<br />Funktio: $1<br />Tiedustelu: $2',
+'viewsource'           => 'Lähdekoodi',
+'viewsourcefor'        => 'sivulle $1',
+'protectedpagetext'    => 'Tämä sivu on suojattu muutoksilta.',
+'viewsourcetext'       => 'Voit tarkastella ja kopioida tämän sivun lähdekoodia:',
+'protectedinterface'   => 'Tämä sivu sisältää ohjelmiston käyttöliittymätekstiä ja on suojattu häiriköinnin estämiseksi.',
+'editinginterface'     => '<center>Muokkaat sivua, joka sisältää ohjelmiston käyttöliittymätekstiä.</center>',
+'sqlhidden'            => '(SQL-kysely piilotettu)',
+'cascadeprotected'     => 'Tämä sivu on suojattu muokkauksilta, koska se on sisällytetty alla {{PLURAL:$1|olevaan laajennetusti suojattuun sivuun|oleviin laajennetusti suojattuihin sivuihin}}:',
+
+# Login and logout pages
+'logouttitle'                => 'Uloskirjautuminen',
+'logouttext'                 => 'Olet nyt kirjautunut ulos {{GRAMMAR:elative|{{SITENAME}}}}. Voit jatkaa {{GRAMMAR:genitive|{{SITENAME}}}} käyttöä nimettömänä, tai kirjautua uudelleen sisään.',
+'welcomecreation'            => '== Tervetuloa, $1! == Käyttäjätunnuksesi on luotu. Älä unohda virittää [[Special:Preferences|{{GRAMMAR:genitive|{{SITENAME}}}} asetuksiasi]].',
+'loginpagetitle'             => 'Sisäänkirjautuminen',
+'yourname'                   => 'Käyttäjätunnus',
+'yourpassword'               => 'Salasana',
+'yourpasswordagain'          => 'Salasana uudelleen',
+'remembermypassword'         => 'Muista minut',
+'yourdomainname'             => 'Verkkonimi',
+'externaldberror'            => 'Tapahtui virhe ulkoisen autentikointitietokannan käytössä tai sinulla ei ole lupaa päivittää tunnustasi.',
+'loginproblem'               => '<b>Sisäänkirjautuminen ei onnistunut.</b><br />Yritä uudelleen!',
+'alreadyloggedin'            => '<strong>Käyttäjä $1, olet jo kirjautunut sisään!</strong><br />',
+'login'                      => 'Kirjaudu sisään',
+'loginprompt'                => 'Kirjautumiseen tarvitaan evästeitä.',
+'userlogin'                  => 'Kirjaudu sisään tai luo tunnus',
+'logout'                     => 'Kirjaudu ulos',
+'userlogout'                 => 'Kirjaudu ulos',
+'notloggedin'                => 'Et ole kirjautunut',
+'nologin'                    => 'Jos sinulla ei ole vielä käyttäjätunnusta, voit $1 sellaisen.',
+'nologinlink'                => 'luoda',
+'createaccount'              => 'Luo uusi käyttäjätunnus',
+'gotaccount'                 => 'Jos sinulla on jo tunnus, voit $1.',
+'gotaccountlink'             => 'kirjautua sisään',
+'createaccountmail'          => 'sähköpostitse',
+'badretype'                  => 'Syöttämäsi salasanat ovat erilaiset.',
+'userexists'                 => 'Pyytämäsi käyttäjänimi on jo käytössä. Ole hyvä ja valitse toinen käyttäjänimi.',
+'youremail'                  => 'Sähköpostiosoite:',
+'username'                   => 'Tunnus:',
+'uid'                        => 'Numero:',
+'yourrealname'               => 'Oikea nimi:',
+'yourlanguage'               => 'Käyttöliittymän kieli:',
+'yourvariant'                => 'Kielivariantti',
+'yournick'                   => 'Nimimerkki allekirjoituksia varten:',
+'badsig'                     => 'Allekirjoitus on epävalidi.',
+'email'                      => 'Sähköpostitoiminnot',
+'prefs-help-email-enotif'    => 'Tätä osoitetta käytetään myös artikkelien muuttumisilmoituksiin, jos ominaisuus on käytössä.',
+'prefs-help-realname'        => 'Oikea nimi (vapaaehtoinen): Nimesi näytetään käyttäjätunnuksesi sijasta sivun tekijäluettelossa.',
+'loginerror'                 => 'Sisäänkirjautumisvirhe',
+'prefs-help-email'           => 'Sähköpostiosoite (vapaaehtoinen): Muut käyttäjät voivat ottaa sinuun yhteyttä sähköpostilla ilman, että osoitteesi paljastuu.',
+'nocookiesnew'               => 'Käyttäjä luotiin, mutta et ole kirjautunut sisään. {{SITENAME}} käyttää evästeitä sisäänkirjautumisen yhteydessä. Selaimesi ei salli evästeistä. Kytke ne päälle, ja sitten kirjaudu sisään juuri luomallasi käyttäjänimellä ja salasanalla.',
+'nocookieslogin'             => '{{SITENAME}} käyttää evästeitä sisäänkirjautumisen yhteydessä. Selaimesi ei salli evästeitä. Ota ne käyttöön, ja yritä uudelleen.',
+'noname'                     => 'Et ole määritellyt kelvollista käyttäjänimeä.',
+'loginsuccesstitle'          => 'Sisäänkirjautuminen onnistui',
+'loginsuccess'               => 'Olet kirjautunut käyttäjänä $1.',
+'nosuchuser'                 => 'Käyttäjää ”$1” ei ole olemassa. Tarkista kirjoititko nimen oikein, tai käytä alla olevaa lomaketta uuden käyttäjätunnuksen luomiseksi.',
+'nosuchusershort'            => 'Käyttäjää nimeltä ”$1” ei ole. Kirjoititko nimen oikein?',
+'nouserspecified'            => 'Käyttäjätunnusta ei ole määritelty.',
+'wrongpassword'              => 'Syöttämäsi salasana ei ole oikein. Ole hyvä ja yritä uudelleen.',
+'wrongpasswordempty'         => 'Et voi antaa tyhjää salasanaa.',
+'mailmypassword'             => 'Lähetä uusi salasana sähköpostitse',
+'passwordremindertitle'      => 'Salasanamuistutus {{GRAMMAR:elative|{{SITENAME}}}}',
+'passwordremindertext'       => 'Joku IP-osoitteesta $1 pyysi {{GRAMMAR:partitive|{{SITENAME}}}} ($4) lähettämään uuden salasanan. Salasana käyttäjälle $2 on nyt $3. Kirjaudu sisään ja vaihda salasana.',
+'noemail'                    => "Käyttäjälle '''$1''' ei ole määritelty sähköpostiosoitetta.",
+'passwordsent'               => 'Uusi salasana on lähetetty käyttäjän <b>$1</b> sähköpostiosoitteeseen.',
+'blocked-mailpassword'       => 'Osoitteellesi on asetettu muokkausesto, joka estää käyttämästä salasanamuistutustoimintoa.',
+'eauthentsent'               => 'Varmennussähköposti on lähetetty annettuun sähköpostiosoitteeseen. Muita viestejä ei lähetetä, ennen kuin olet toiminut viestin ohjeiden mukaan ja varmistanut, että sähköpostiosoite kuuluu sinulle.',
+'throttled-mailpassword'     => 'Salasanamuistutus on lähetetty viimeisen $1 tunnin sisällä. Salasanamuistutuksia lähetään enintään $1 tunnin välein.',
+'mailerror'                  => 'Virhe lähetettäessä sähköpostia: $1',
+'acct_creation_throttle_hit' => 'Olet jo luonut $1 tunnusta. Et voi luoda uutta.',
+'emailauthenticated'         => 'Sähköpostiosoitteesi varmennettiin $1.',
+'emailnotauthenticated'      => 'Sähköpostiosoitettasi ei ole vielä varmennettu. Sähköpostia ei lähetetä liittyen alla oleviin toimintoihin.',
+'noemailprefs'               => 'Sähköpostiosoitetta ei ole määritelty.',
+'emailconfirmlink'           => 'Varmenna sähköpostiosoite',
+'invalidemailaddress'        => 'Sähköpostiosoitetta ei voida hyväksyä, koska se ei ole oikeassa muodossa. Ole hyvä ja anna oikea sähköpostiosoite tai jätä kenttä tyhjäksi.',
+'accountcreated'             => 'Käyttäjätunnus luotiin',
+'accountcreatedtext'         => 'Käyttäjän $1 käyttäjätunnus luotiin.',
+
+# Password reset dialog
+'resetpass'               => 'Salasanan alustus',
+'resetpass_announce'      => 'Kirjauduit sisään sähköpostitse lähetetyllä väliaikaissalasanalla. Päätä sisäänkirjautuminen asettamalla uusi salasana.',
+'resetpass_text'          => '<!-- Lisää tekstiä tähän -->',
+'resetpass_header'        => 'Uuden salasanan asettaminen',
+'resetpass_submit'        => 'Aseta salasana ja kirjaudu sisään',
+'resetpass_success'       => 'Salasanan vaihto onnistui.',
+'resetpass_bad_temporary' => 'Kelvoton väliaikaissalasana. Olet saattanut jo asettaa uuden salasanan tai pyytänyt uutta väliaikaissalasanaa.',
+'resetpass_forbidden'     => 'Salasanoja ei voi vaihtaa tässä wikissä',
+'resetpass_missing'       => 'Ei syötettä.',
+
+# Edit page toolbar
+'bold_sample'     => 'Lihavoitu teksti',
+'bold_tip'        => 'Lihavointi',
+'italic_sample'   => 'Kursivoitu teksti',
+'italic_tip'      => 'Kursivointi',
+'link_sample'     => 'linkki',
+'link_tip'        => 'Sisäinen linkki',
+'extlink_sample'  => 'http://www.example.com linkin otsikko',
+'extlink_tip'     => 'Ulkoinen linkki (muista http:// edessä)',
+'headline_sample' => 'Otsikkoteksti',
+'headline_tip'    => 'Otsikko',
+'math_sample'     => 'Lisää kaava tähän',
+'math_tip'        => 'Matemaattinen kaava (LaTeX)',
+'nowiki_sample'   => 'Lisää muotoilematon teksti tähän',
+'nowiki_tip'      => 'Tekstiä, jota wiki ei muotoile',
+'image_sample'    => 'Esimerkki.jpg',
+'image_tip'       => 'Tallennettu kuva',
+'media_sample'    => 'Esimerkki.ogg',
+'media_tip'       => 'Mediatiedostolinkki',
+'sig_tip'         => 'Allekirjoitus aikamerkinnällä',
+'hr_tip'          => 'Vaakasuora viiva',
+
+# Edit pages
+'summary'                   => 'Yhteenveto',
+'subject'                   => 'Aihe',
+'minoredit'                 => 'Tämä on pieni muutos',
+'watchthis'                 => 'Tarkkaile tätä sivua',
+'savearticle'               => 'Tallenna sivu',
+'preview'                   => 'Esikatselu',
+'showpreview'               => 'Esikatsele',
+'showlivepreview'           => 'Pikaesikatselu',
+'showdiff'                  => 'Näytä muutokset',
+'anoneditwarning'           => 'Et ole kirjautunut sisään. IP-osoitteesi kirjataan tämän sivun muokkaushistoriaan.',
+'missingsummary'            => 'Et ole antanut yhteenvetoa. Jos valitset Tallenna uudelleen, niin muokkauksesi tallennetaan ilman yhteenvetoa.',
+'missingcommenttext'        => 'Anna yhteenveto alle.',
+'missingcommentheader'      => 'Et ole antanut otsikkoa kommentillesi. Valitse <em>Tallenna</em>, jos et halua antaa otsikkoa.',
+'summary-preview'           => 'Yhteenvedon esikatselu',
+'subject-preview'           => 'Otsikon esikatselu',
+'blockedtitle'              => 'Pääsy estetty',
+'blockedtext'               => "Yritit muokata sivua tai luoda uuden sivun. $1 on estänyt pääsysi {{GRAMMAR:illative|{{SITENAME}}}} joko käyttäjänimesi tai IP-osoitteesi perusteella. Annettu syy estolle on: <br />''$2''<br />Jos olet sitä mieltä, että sinut on estetty syyttä, voit keskustella asiasta [[{{MediaWiki:grouppage-sysop}}|ylläpitäjän]] kanssa. Huomaa, ettet voi lähettää sähköpostia {{GRAMMAR:genitive|{{SITENAME}}}} kautta, ellet ole asettanut olemassa olevaa sähköpostiosoitetta [[Special:Preferences|asetuksissa]]. Jos IP-osoitteesi on dynaaminen, eli se voi toisinaan vaihtua, olet saattanut saada estetyn osoitteen käyttöösi, ja esto vaikuttaa nyt sinuun. Jos tämä ongelma toistuu jatkuvasti, ota yhteyttä Internet-palveluntarjoajaasi tai {{GRAMMAR:genitive|{{SITENAME}}}} ylläpitäjään. IP-osoitteesi on $3 ja estotunnus on #$5.",
+'blockedoriginalsource'     => 'Sivun ”$1” lähdekoodi:',
+'blockededitsource'         => 'Muokkauksesi sivuun ”$1”:',
+'whitelistedittitle'        => 'Sisäänkirjautuminen vaaditaan muokkaamiseen',
+'whitelistedittext'         => 'Sinun täytyy $1, jotta voisit muokata sivuja.',
+'whitelistreadtitle'        => 'Sisäänkirjautuminen vaaditaan lukemiseen',
+'whitelistreadtext'         => 'Sinun täytyy kirjautua [[Special:Userlogin|sisään]] lukeaksesi sivuja.',
+'whitelistacctitle'         => 'Sinun ei ole sallittu luoda tunnusta',
+'whitelistacctext'          => 'Saadaksesi oikeudet luoda tunnus sinun täytyy kirjautua [[Special:Userlogin|sisään]] ja sinulla tulee olla asiaankuuluvat oikeudet.',
+'confirmedittitle'          => 'Sähköpostin varmennus',
+'confirmedittext'           => 'Et voi muokata sivuja, ennen kuin olet varmentanut sähköpostiosoitteesi. Voit tehdä varmennuksen [[Special:Preferences|asetussivulla]].',
+'nosuchsectiontitle'        => 'Pyydettyä osiota ei ole',
+'nosuchsectiontext'         => 'Yritit muokata osiota, jota ei ole olemassa. Koska osiota $1 ei ole olemassa, muokkausta ei voida tallentaa.',
+'loginreqtitle'             => 'Sisäänkirjautuminen vaaditaan',
+'loginreqlink'              => 'kirjautua sisään',
+'loginreqpagetext'          => 'Sinun täytyy $1, jotta voisit nähdä muut sivut.',
+'accmailtitle'              => 'Salasana lähetetty.',
+'accmailtext'               => "käyttäjän '''$1''' salasana on lähetetty osoitteeseen '''$2'''.",
+'newarticle'                => '(uusi)',
+'newarticletext'            => 'Linkki toi sivulle, jota ei vielä ole. Voit luoda sivun kirjoittamalla alla olevaan tilaan. Jos et halua luoda sivua, käytä selaimen paluutoimintoa.',
+'anontalkpagetext'          => "----''Tämä on nimettömän käyttäjän keskustelusivu. Hän ei ole joko luonut itselleen käyttäjätunnusta tai ei käytä sitä. Siksi hänet tunnistetaan nyt numeerisella IP-osoitteella. Kyseinen IP-osoite voi olla useamman henkilön käytössä. Jos olet nimetön käyttäjä, ja sinusta tuntuu, että aiheettomia kommentteja on ohjattu sinulle, [[Special:Userlogin|luo itsellesi käyttäjätunnus tai kirjaudu sisään]] välttääksesi jatkossa sekaannukset muiden nimettömien käyttäjien kanssa.''",
+'noarticletext'             => "<big>'''{{GRAMMAR:inessive|{{SITENAME}}}} ei ole tämän nimistä sivua.'''</big>
+* Voit kirjoittaa uuden sivun '''<span class=\"plainlinks\">[{{fullurl:{{NAMESPACE}}:{{PAGENAME}}|action=edit}} {{PAGENAME}}]</span>.'''
+* Jos olet luonut sivun tällä nimellä, se on saatettu poistaa — katso [[Special:Log/delete|poistoloki]].",
+'clearyourcache'            => "'''Huomautus:''' Selaimen välimuisti pitää tyhjentää asetusten tallentamisen jälkeen, jotta muutokset tulisivat voimaan:
+*'''Mozilla, Konqueror ja Safari:''' napsauta ''Shift''-näppäin pohjassa päivitä tai paina ''Ctrl-Shift-R'' (''Cmd-Shift-R'' Applella)
+*'''IE:''' napsauta ''Ctrl''-näppäin pohjassa päivitä tai paina ''Ctrl-F5''
+*'''Konqueror''': napsauta päivitä tai paina ''F5''
+*'''Opera:''' saatat joutua tyhjentään välimuistin kokonaan (''Tools→Preferences'').",
+'usercssjsyoucanpreview'    => 'Voit testata uutta CSS:ää tai JavaScriptiä ennen tallennusta esikatselulla.',
+'usercsspreview'            => "'''Tämä on CSS:n esikatselu.'''",
+'userjspreview'             => "'''Tämä on JavaScriptin esikatselu.'''",
+'userinvalidcssjstitle'     => 'Tyyliä nimeltä ”$1” ei ole olemassa. Käyttäjän määrittelemät .css- ja .js-sivut alkavat pienellä alkukirjaimella.',
+'updated'                   => '(Päivitetty)',
+'note'                      => 'Huomautus:',
+'previewnote'               => '<strong>Tämä on vasta sivun esikatselu. Sivua ei ole vielä tallennettu!</strong>',
+'previewconflict'           => 'Tämä esikatselu näyttää miltä muokkausalueella oleva teksti näyttää tallennettuna.',
+'session_fail_preview'      => '<strong>Muokkaustasi ei voitu tallentaa, koska istuntosi tiedot ovat kadonneet.</strong> Yritä uudelleen. Jos ongelma ei katoa, yritä kirjautua ulos ja takaisin sisään.',
+'session_fail_preview_html' => '<strong>Muokkaustasi ei voitu tallentaa, koska istuntosi tiedot ovat kadonneet.</strong>
+
+Esikatselu on piilotettu varokeinona JavaScript-hyökkäyksiä vastaan – tässä wikissä on HTML-tila päällä.
+
+Yritä uudelleen. Jos ongelma ei katoa, yritä kirjautua ulos ja takaisin sisään.',
+'importing'                 => 'Tuodaan sivua $1',
+'editing'                   => 'Muokataan sivua $1',
+'editinguser'               => 'Muokataan sivua $1',
+'editingsection'            => 'Muokataan osiota sivusta $1',
+'editingcomment'            => 'Muokataan kommenttia sivulla $1',
+'editconflict'              => 'Päällekkäinen muokkaus: $1',
+'explainconflict'           => "Joku muu on muuttanut tätä sivua sen jälkeen, kun aloit muokata sitä. Ylempi tekstialue sisältää tämänhetkisen tekstin. Tekemäsi muutokset näkyvät alemmassa ikkunassa. Sinun täytyy yhdistää muutoksesi olemassa olevaan tekstiin. '''Vain''' ylemmässä alueessa oleva teksti tallentuu, kun tallennat sivun.",
+'yourtext'                  => 'Oma tekstisi',
+'storedversion'             => 'Tallennettu versio',
+'nonunicodebrowser'         => "'''Varoitus: Selaimesi ei ole Unicode-yhteensopiva. Ole hyvä ja vaihda selainta, ennen kuin muokkaat sivua.'''",
+'editingold'                => '<center><strong>Varoitus</strong>: Olet muokkaamassa vanhaa versiota tämän sivun tekstistä. Jos tallennat sen, kaikki tämän version jälkeen tehdyt muutokset katoavat.</center>',
+'yourdiff'                  => 'Eroavaisuudet',
+'copyrightwarning'          => '<strong>Muutoksesi astuvat voimaan välittömästi.</strong> Kaikki {{GRAMMAR:illative|{{SITENAME}}}} tehtävät tuotokset katsotaan julkaistuksi $2 -lisenssin mukaisesti ($1). Jos et halua, että kirjoitustasi muokataan armottomasti ja uudelleenkäytetään vapaasti, älä tallenna kirjoitustasi. Tallentamalla muutoksesi lupaat, että kirjoitit tekstisi itse, tai kopioit sen jostain vapaasta lähteestä. <strong>ÄLÄ KÄYTÄ TEKIJÄNOIKEUDEN ALAISTA MATERIAALIA ILMAN LUPAA!</strong>',
+'copyrightwarning2'         => 'Huomaa, että kuka tahansa voi muokata, muuttaa ja poistaa kaikkia sivustolle tekemiäsi lisäyksiä ja muutoksia. Muokkaamalla sivustoa luovutat sivuston käyttäjille tämän oikeuden ja takaat, että lisäämäsi aineisto on joko itse kirjoittamaasi tai peräisin jostain vapaasta lähteestä. Lisätietoja sivulla $1. <strong>TEKIJÄNOIKEUDEN ALAISEN MATERIAALIN KÄYTTÄMINEN ILMAN LUPAA ON EHDOTTOMASTI KIELLETTYÄ!</strong>',
+'longpagewarning'           => '<center>Tämän sivun tekstiosuus on $1 binäärikilotavua pitkä. Harkitse, voisiko sivun jakaa pienempiin osiin.</center>',
+'longpageerror'             => '<strong>Sivun koko on $1 binäärikilotavua. Sivua ei voida tallentaa, koska enimmäiskoko on $2 binäärikilotavua.</strong>',
+'readonlywarning'           => '<strong>Varoitus</strong>: Tietokanta on lukittu huoltoa varten, joten voi olla ettet pysty tallentamaan muokkauksiasi juuri nyt. Saattaa olla paras leikata ja liimata tekstisi omaan tekstitiedostoosi ja tallentaa se tänne myöhemmin.',
+'protectedpagewarning'      => '<center><small>Tämä sivu on lukittu. Vain ylläpitäjät voivat muokata sitä.</small></center>',
+'semiprotectedpagewarning'  => 'Vain rekisteröityneet käyttäjät voivat muokata tätä sivua.',
+'cascadeprotectedwarning'   => '<strong>Vain ylläpitäjät voivat muokata tätä sivua, koska se on sisällytetty alla {{PLURAL:$1|olevaan laajennetusti suojattuun sivuun|oleviin laajennetusti suojattuihin sivuihin}}</strong>:',
+'templatesused'             => 'Tällä sivulla käytetyt mallineet:',
+'templatesusedpreview'      => 'Esikatselussa mukana olevat mallineet:',
+'templatesusedsection'      => 'Tässä osiossa mukana olevat mallineet:',
+'template-protected'        => '(suojattu)',
+'template-semiprotected'    => '(suojattu anonyymeiltä ja uusilta käyttäjiltä)',
+'edittools'                 => '<!-- Tässä oleva teksi näytetään muokkauskentän alla. -->',
+'nocreatetitle'             => 'Sivujen luominen on rajoitettu',
+'nocreatetext'              => 'Et voi luoda uusia sivuja. Voit muokata olemassa olevia sivuja tai luoda [[Special:Userlogin|käyttäjätunnuksen]].',
+
+# "Undo" feature
+'undo-success' => 'Kumoaminen onnistui. Valitse <em>tallenna</em> toteuttaaksesi muutokset.',
+'undo-failure' => 'Muokkausta ei voitu kumota välissä olevien ristiriistaisten muutosten vuoksi. Kumoa muutokset käsin.',
+'undo-summary' => 'Kumottu muokkaus #$1, jonka teki [[Special:Contributions/$2|$2]] ([[User talk:$2|keskustelu]])',
+
+# Account creation failure
+'cantcreateaccounttitle' => 'Tunnuksen luominen epäonnistui',
+'cantcreateaccounttext'  => 'Tunnuksien luominen tästä IP-osoitteesta ($1) on estetty. Syynä tähän on luultavasti jatkuva häiriköinti yhteiskäyttökoneelta.',
+
+# History pages
+'revhistory'          => 'Muutoshistoria',
+'viewpagelogs'        => 'Näytä tämän sivun lokit',
+'nohistory'           => 'Tällä sivulla ei ole muutoshistoriaa.',
+'revnotfound'         => 'Versiota ei löydy',
+'revnotfoundtext'     => 'Pyytämääsi versiota ei löydy. Tarkista URL-osoite, jolla hait tätä sivua.',
+'loadhist'            => 'Ladataan sivuhistoriaa',
+'currentrev'          => 'Nykyinen versio',
+'revisionasof'        => 'Versio $1',
+'revision-info'       => 'Versio hetkellä $1 – tehnyt $2',
+'previousrevision'    => '← Vanhempi versio',
+'nextrevision'        => 'Uudempi versio →',
+'currentrevisionlink' => 'Nykyinen versio',
+'cur'                 => 'nyk.',
+'next'                => 'seur.',
+'last'                => 'edell.',
+'orig'                => 'alkup.',
+'page_first'          => 'ensimmäinen sivu',
+'page_last'           => 'viimeinen sivu',
+'histlegend'          => 'Merkinnät: (nyk.) = eroavaisuudet nykyiseen versioon, (edell.) = eroavaisuudet edelliseen versioon, <span class="minor">p</span> = pieni muutos',
+'deletedrev'          => '[poistettu]',
+'histfirst'           => 'Ensimmäiset',
+'histlast'            => 'Viimeisimmät',
+'historysize'         => '($1 tavua)',
+'historyempty'        => '(tyhjä)',
+
+# Revision feed
+'history-feed-title'          => 'Muutoshistoria',
+'history-feed-description'    => 'Tämän sivun muutoshistoria',
+'history-feed-item-nocomment' => '$1 ($2)', # user at time
+'history-feed-empty'          => 'Pyydettyä sivua ei ole olemassa. 
+Se on saatettu poistaa wikistä tai nimetä uudelleen. 
+Kokeile [[Special:Search|hakua]] löytääksesi asiaan liittyviä sivuja.',
+
+# Revision deletion
+'rev-deleted-comment'         => '(kommentti poistettu)',
+'rev-deleted-user'            => '(käyttäjänimi poistettu)',
+'rev-deleted-event'           => '(tapahtuma poistettu)',
+'rev-deleted-text-permission' => '<div class="mw-warning plainlinks">Tämä versio on poistettu julkisesta arkistosta. [{{fullurl:Special:Log/delete|page={{PAGENAMEE}}}} Poistolokissa] saattaa olla lisätietoja.</div>',
+'rev-deleted-text-view'       => '<div class="mw-warning plainlinks">Tämä versio on poistettu julkisesta arkistosta.</div>',
+'rev-delundel'                => 'näytä tai piilota',
+'revisiondelete'              => 'Poista tai palauta versioita',
+'revdelete-nooldid-title'     => 'Ei kohdeversiota',
+'revdelete-nooldid-text'      => 'Et ole valinnut kohdeversiota tai -versioita.',
+'revdelete-selected'          => "{{PLURAL:$2|Valittu versio|Valitut versiot}} sivusta '''$1:'''",
+'logdelete-selected'          => "{{PLURAL:$2|Valittu lokimerkintä|Valitut lokimerkinnät}} sivulle '''$1:'''",
+'revdelete-text'              => 'Poistetut versiot näkyvät sivun historiassa, mutta niiden sisältö ei ole julkisesti saatavilla.
+
+Muut ylläpitäjät voivat lukea piilotetun sisällön ja palauttaa sen.',
+'revdelete-legend'            => 'Version rajoitukset:',
+'revdelete-hide-text'         => 'Piilota version sisältö',
+'revdelete-hide-name'         => 'Piilota toiminto ja kohde',
+'revdelete-hide-comment'      => 'Piilota yhteenveto',
+'revdelete-hide-user'         => 'Piilota tekijän tunnus tai IP-osoite',
+'revdelete-hide-restricted'   => 'Apply these restrictions to sysops as well as others',
+'revdelete-suppress'          => 'Piilota myös ylläpitäjiltä',
+'revdelete-hide-image'        => 'Piilota tiedoston sisältö',
+'revdelete-unsuppress'        => 'Poista rajoitukset palautetuilta versiolta',
+'revdelete-log'               => 'Lokimerkintä:',
+'revdelete-submit'            => 'Toteuta',
+'revdelete-logentry'          => 'muutti sivun [[$1]] version näkyvyyttä',
+'logdelete-logentry'          => 'muutti sivun [[$1]] näkyvyyttä',
+'revdelete-logaction'         => '$1 {{plural:$1|versio|versiota}} asetettiin tilaan $2',
+'logdelete-logaction'         => '$1 sivun [[$3]] {{plural:$1|tapahtuma|tapahtumaa}} asetettiin tilaan $2',
+'revdelete-success'           => 'Version näkyvyys asetettu.',
+'logdelete-success'           => 'Tapahtuman näkyvyys asetettu.',
+
+# Oversight log
+'oversightlog'    => 'Tietosuojaloki',
+'overlogpagetext' => 'Alla on lista viimeaikaisista poistoista ja estoista liittyen ylläpitäjiltä piilotettuun sisältöön. [[Special:Ipblocklist|Estolistalla]] on luettelo voimassa olevista estoista.',
+
+# Diffs
+'difference'                => 'Versioiden väliset erot',
+'loadingrev'                => 'Ladataan versiota vertailua varten',
+'lineno'                    => 'Rivi $1:',
+'editcurrent'               => 'Muokkaa tämän sivun uusinta versiota',
+'selectnewerversionfordiff' => 'Valitse uudempi versio vertailuun',
+'selectolderversionfordiff' => 'Valitse vanhempi versio vertailuun',
+'compareselectedversions'   => 'Vertaile valittuja versioita',
+'editundo'                  => 'kumoa',
+'diff-multi'                => '(Versioiden välissä {{PLURAL:$1|yksi muu muokkaus|$1 muuta muokkausta}}.)',
+
+# Search results
+'searchresults'         => 'Hakutulokset',
+'searchresulttext'      => 'Lisätietoa {{GRAMMAR:genitive|{{SITENAME}}}} hakutoiminnoista on [[{{MediaWiki:helppage}}|ohjesivulla]].',
+'searchsubtitle'        => 'Haku termeillä [[:$1]]',
+'searchsubtitleinvalid' => 'Haku termeillä $1',
+'badquery'              => 'Kelvoton hakumerkkijono',
+'badquerytext'          => 'Tekemäsi kysely ei ole kelvollinen. Tämä saattaa johtua siitä, että et ole määritellyt hakumerkkijonoa.',
+'matchtotals'           => "Haulla '''$1''' löytyi $2 osumaa sivujen otsikoista ja $3 osumaa sivujen sisällöistä.",
+'noexactmatch'          => 'Sivua ”$1” ei ole olemassa. Voit [[$1|luoda aiheesta uuden sivun]].',
+'titlematches'          => 'Osumat sivujen otsikoissa',
+'notitlematches'        => 'Hakusanaa ei löytynyt minkään sivun otsikosta',
+'textmatches'           => 'Osumat sivujen teksteissä',
+'notextmatches'         => 'Hakusanaa ei löytynyt sivujen teksteistä',
+'prevn'                 => '← $1 edellistä',
+'nextn'                 => '$1 seuraavaa →',
+'viewprevnext'          => 'Näytä [$3] kerralla.
+
+$1 | $2',
+'showingresults'        => "{{PLURAL:$1|'''Yksi''' tulos|'''$1''' tulosta}} tuloksesta '''$2''' alkaen.",
+'showingresultsnum'     => "Alla on {{PLURAL:$3|'''Yksi''' hakutulos|'''$3''' hakutulosta}} alkaen '''$2.''' tuloksesta.",
+'nonefound'             => "'''Huomautus''': Epäonnistuneet haut johtuvat usein hyvin yleisten sanojen, kuten ''on'' ja ''ei'', etsimisestä tai useamman kuin yhden hakutermin määrittelemisestä. Vain sivut, joilla on kaikki hakutermin sanat, näkyvät tuloksissa.",
+'powersearch'           => 'Etsi',
+'powersearchtext'       => 'Hae nimiavaruuksista:<br />$1<br />$2 Luettele uudelleenohjaukset<br />Etsi: $3 $9',
+'searchdisabled'        => '<p style="margin: 1.5em 2em 1em">Tekstihaku on poistettu toistaiseksi käytöstä suuren kuorman vuoksi. Voit käyttää alla olevaa Googlen hakukenttää sivujen etsimiseen, kunnes haku tulee taas käyttöön.<small>Huomaa, että ulkopuoliset kopiot {{GRAMMAR:genitive|{{SITENAME}}}} sisällöstä eivät välttämättä ole ajan tasalla.</small></p>',
+'blanknamespace'        => '(sivut)',
+
+# Preferences page
+'preferences'              => 'Asetukset',
+'mypreferences'            => 'Asetukset',
+'prefsnologin'             => 'Et ole kirjautunut sisään.',
+'prefsnologintext'         => 'Sinun täytyy [[Special:Userlogin|kirjautua sisään]], jotta voisit muuttaa asetuksiasi.',
+'prefsreset'               => 'Asetukset on palautettu tallennetuista asetuksistasi.',
+'qbsettings'               => 'Pikavalikko',
+'qbsettings-none'          => 'Ei mitään',
+'qbsettings-fixedleft'     => 'Tekstin mukana, vasen',
+'qbsettings-fixedright'    => 'Tekstin mukana, oikea',
+'qbsettings-floatingleft'  => 'Pysyen vasemmalla',
+'qbsettings-floatingright' => 'Pysyen oikealla',
+'changepassword'           => 'Vaihda salasanaa',
+'skin'                     => 'Ulkonäkö',
+'math'                     => 'Matematiikka',
+'dateformat'               => 'Päiväyksen muoto',
+'datedefault'              => 'Ei valintaa',
+'datetime'                 => 'Aika ja päiväys',
+'math_failure'             => 'Jäsentäminen epäonnistui',
+'math_unknown_error'       => 'Tuntematon virhe',
+'math_unknown_function'    => 'Tuntematon funktio',
+'math_lexing_error'        => 'Tulkintavirhe',
+'math_syntax_error'        => 'Jäsennysvirhe',
+'math_image_error'         => 'PNG-muunnos epäonnistui; tarkista, että latex, dvips, gs ja convert on asennettu oikein.',
+'math_bad_tmpdir'          => 'Matematiikan kirjoittaminen väliaikaishakemistoon tai tiedostonluonti ei onnistu',
+'math_bad_output'          => 'Matematiikan tulostehakemistoon kirjoittaminen tai tuedostonluonti ei onnistu',
+'math_notexvc'             => 'Texvc-sovellus puuttuu, lue math/READMEstä asennustietoja',
+'prefs-personal'           => 'Käyttäjätiedot',
+'prefs-rc'                 => 'Tuoreet muutokset ja tyngät',
+'prefs-watchlist'          => 'Tarkkailulista',
+'prefs-watchlist-days'     => 'Tarkkailulistan ajanjakso:',
+'prefs-watchlist-edits'    => 'Tarkkailulistalla näytettävien muutosten määrä:',
+'prefs-misc'               => 'Muut asetukset',
+'saveprefs'                => 'Tallenna asetukset',
+'resetprefs'               => 'Palauta tallennetut asetukset',
+'oldpassword'              => 'Vanha salasana:',
+'newpassword'              => 'Uusi salasana:',
+'retypenew'                => 'Uusi salasana uudelleen:',
+'textboxsize'              => 'Muokkaaminen',
+'rows'                     => 'Rivit:',
+'columns'                  => 'Sarakkeet:',
+'searchresultshead'        => 'Haku',
+'resultsperpage'           => 'Tuloksia sivua kohti:',
+'contextlines'             => 'Rivien määrä tulosta kohti:',
+'contextchars'             => 'Sisällön merkkien määrä riviä kohden:',
+'stubthreshold'            => 'Tynkäsivun osoituskynnys:',
+'recentchangesdays'        => 'Näytettävien päivien määrä tuoreissa muutoksissa:',
+'recentchangescount'       => 'Sivujen määrä tuoreissa muutoksissa:',
+'savedprefs'               => 'Asetuksesi tallennettiin onnistuneesti.',
+'timezonelegend'           => 'Aikavyöhyke',
+'timezonetext'             => 'Paikallisen ajan ja palvelimen ajan (UTC) välinen aikaero tunteina.',
+'localtime'                => 'Paikallinen aika',
+'timezoneoffset'           => 'Aikaero¹:',
+'servertime'               => 'Palvelimen aika',
+'guesstimezone'            => 'Utele selaimelta',
+'allowemail'               => 'Salli sähköpostin lähetys osoitteeseen',
+'defaultns'                => 'Etsi oletusarvoisesti näistä nimiavaruuksista:',
+'default'                  => 'oletus',
+'files'                    => 'Tiedostot',
+
+# User rights
+'userrights-lookup-user'     => 'Käyttöoikeuksien hallinta',
+'userrights-user-editname'   => 'Käyttäjätunnus:',
+'editusergroup'              => 'Muokkaa käyttäjän ryhmiä',
+'userrights-editusergroup'   => 'Käyttäjän ryhmät',
+'saveusergroups'             => 'Tallenna',
+'userrights-groupsmember'    => 'Jäsenenä ryhmissä:',
+'userrights-groupsavailable' => 'Saatavilla olevat ryhmät:',
+'userrights-groupshelp'      => 'Valitse ryhmät, jotka haluat poistaa tai lisätä. Valitsemattomia ryhmiä ei muuteta. Voit poistaa valinnan pitämällä Ctrl-näppäintä pohjassa napsautuksen aikana.',
+'userrights-reason'          => 'Syy muutokselle:',
+
+# Groups
+'group'            => 'Ryhmä:',
+'group-bot'        => 'botit',
+'group-sysop'      => 'ylläpitäjät',
+'group-bureaucrat' => 'byrokraatit',
+'group-all'        => '(kaikki)',
+
+'group-bot-member'        => 'botti',
+'group-sysop-member'      => 'ylläpitäjä',
+'group-bureaucrat-member' => 'byrokraatti',
+
+'grouppage-bot'        => '{{ns:project}}:Botit',
+'grouppage-sysop'      => '{{ns:project}}:Ylläpitäjät',
+'grouppage-bureaucrat' => '{{ns:project}}:Byrokraatit',
+
+# User rights log
+'rightslog'      => 'Käyttöoikeusloki',
+'rightslogtext'  => 'Alla on loki on käyttäjien käyttöoikeuksien muutoksista.',
+'rightslogentry' => 'Käyttäjän [[$1|]] oikeudet muutettiin ryhmistä $2 ryhmiin $3',
+'rightsnone'     => '(ei oikeuksia)',
+
+# Recent changes
+'nchanges'                          => '$1 {{PLURAL:$1|muutos|muutosta}}',
+'recentchanges'                     => 'Tuoreet muutokset',
+'recentchangestext'                 => 'Tällä sivulla voi seurata tuoreita {{GRAMMAR:illative|{{SITENAME}}}} tehtyjä muutoksia.',
+'recentchanges-feed-description'    => 'Tällä sivulla voi seurata tuoreita {{GRAMMAR:illative|{{SITENAME}}}} tehtyjä muutoksia.',
+'rcnote'                            => 'Alla on {{PLURAL:$1|yksi muutos|$1 tuoreinta muutosta}} {{PLURAL:$2|viimeisen päivän|$2 viimepäivän}} ajalta $3 asti.',
+'rcnotefrom'                        => 'Alla on muutokset <b>$2</b> lähtien. Enintään <b>$1</b> merkintää näytetään.',
+'rclistfrom'                        => 'Näytä uudet muutokset $1 alkaen',
+'rcshowhideminor'                   => '$1 pienet muutokset',
+'rcshowhidebots'                    => '$1 botit',
+'rcshowhideliu'                     => '$1 kirjautuneet käyttäjät',
+'rcshowhideanons'                   => '$1 anonyymit käyttäjät',
+'rcshowhidepatr'                    => '$1 tarkastetut muutokset',
+'rcshowhidemine'                    => '$1 omat muutokset',
+'rclinks'                           => 'Näytä $1 tuoretta muutosta viimeisten $2 päivän ajalta.<br />$3',
+'diff'                              => 'ero',
+'hist'                              => 'historia',
+'hide'                              => 'piilota',
+'show'                              => 'näytä',
+'minoreditletter'                   => 'p',
+'newpageletter'                     => 'U',
+'boteditletter'                     => 'b',
+'sectionlink'                       => '→',
+'number_of_watching_users_pageview' => '[$1 tarkkailevaa käyttäjää]',
+'rc_categories'                     => 'Vain luokista (erotin on ”|”)',
+'rc_categories_any'                 => 'Mikä tahansa',
+
+# Recent changes linked
+'recentchangeslinked'          => 'Linkitettyjen sivujen muutokset',
+'recentchangeslinked-noresult' => 'Ei muutoksia linkitettyihin sivuihin annetulla aikavälillä.',
+
+# Upload
+'upload'                      => 'Lisää tiedosto',
+'uploadbtn'                   => 'Lähetä tiedosto',
+'reupload'                    => 'Lähetä uudelleen',
+'reuploaddesc'                => 'Palaa lähetyslomakkeelle.',
+'uploadnologin'               => 'Et ole kirjautunut sisään',
+'uploadnologintext'           => 'Sinun pitää olla [[Special:Userlogin|kirjautuneena sisään]], jotta voisit lisätä tiedostoja.',
+'upload_directory_read_only'  => 'Palvelimella ei ole kirjoitusoikeuksia tallennushakemistoon ”<tt>$1</tt>”.',
+'uploaderror'                 => 'Tallennusvirhe',
+'uploadtext'                  => "Ennen kuin lähetät tiedostoja {{GRAMMAR:illative|{{SITENAME}}}}, lue seuraava:
+*''Kirjoita tiedoston tietoihin tarkka tieto tiedoston lähteestä.''
+*''Kerro tiedoston tekijänoikeuksien tila.''
+*''Käytä järkevää tiedostonimeä.'' Nimeä tiedostosi mieluummin tyyliin ”Eiffel-torni Pariisissa, yökuva.jpg” kuin ”etpan1024c.jpg”. Näin vältät mahdollisesti jo olemassa olevan tiedoston korvaamisen omallasi.
+*Laita johonkin aiheeseen liittyvään sivuun linkki kyseiseen tiedostoon, tai kirjoita kuvaussivulle kuvaus tiedoston sisällöstä.
+*Jos haluat nähdä tai etsiä aiemmin lisättyjä tiedostoja, katso [[Special:Imagelist|tiedostoluettelo]]. Tallennukset ja poistot kirjataan [[Special:Log/upload|tiedostolokiin]].
+
+Suositellut kuvaformaatit ovat JPEG valokuville, PNG piirroksille ja kuvakkeille ja Ogg Vorbis äänille. Voit liittää kuvan sivulle käyttämällä seuraavan muotoista merkintää '''<nowiki>[[</nowiki>{{ns:image}}:tiedosto.jpg]]''' tai '''<nowiki>[[</nowiki>{{ns:image}}:tiedosto.png|kuvausteksti]]''' tai '''<nowiki>[[</nowiki>{{ns:media}}:tiedosto.ogg]]''' äänille.
+
+Huomaa, että {{GRAMMAR:inessive|{{SITENAME}}}} muut voivat muokata tai poistaa lähettämäsi tiedoston, jos he katsovat, että se ei palvele projektin tarpeita. Tallentamismahdollisuutesi voidaan estää, jos käytät järjestelmää väärin.",
+'uploadlog'                   => 'Tiedostoloki',
+'uploadlogpage'               => 'Tiedostoloki',
+'uploadlogpagetext'           => 'Alla on luettelo uusimmista tiedostonlisäyksistä. Kaikki ajat näytetään palvelimen aikavyöhykkeessä (UTC).',
+'filename'                    => 'Tiedoston nimi',
+'filedesc'                    => 'Yhteenveto',
+'fileuploadsummary'           => 'Yhteenveto:',
+'filestatus'                  => 'Tiedoston tekijänoikeudet',
+'filesource'                  => 'Lähde',
+'uploadedfiles'               => 'Lisätyt tiedostot',
+'ignorewarning'               => 'Tallenna tiedosto varoituksesta huolimatta.',
+'ignorewarnings'              => 'Ohita kaikki varoitukset',
+'minlength'                   => 'Tiedoston nimessä pitää olla vähintään kolme merkkiä.',
+'illegalfilename'             => "Tiedoston nimessä '''$1''' on merkkejä, joita ei sallita sivujen nimissä. Vaihda tiedoston nimeä, ja yritä lähettämistä uudelleen.",
+'badfilename'                 => 'Tiedoston nimi vaihdettiin: $1.',
+'filetype-badmime'            => 'Tiedostot, joiden MIME-tyyppi on <tt>$1</tt> ei voi lähettää.',
+'filetype-badtype'            => '”<tt>.$1</tt>” ei ole suositeltava tiedostomuoto.
+: Sallitut tiedostomuodot: $2',
+'filetype-missing'            => 'Tiedostolta puuttuu tiedostopääte – esimerkiksi <tt>.jpg</tt>.',
+'large-file'                  => 'Tiedostojen enimmäiskoko on $1. Lähettämäsi tiedoston koko on $2.',
+'largefileserver'             => 'Tämä tiedosto on suurempi kuin mitä palvelin sallii.',
+'emptyfile'                   => 'Tiedosto, jota yritit lähettää, näyttää olevan tyhjä. Tarkista, että kirjoitit polun ja nimen oikein ja että se ei ole liian suuri kohdepalvelimelle.',
+'fileexists'                  => 'Samanniminen tiedosto on jo olemassa. Katso tiedoston sivu $1, jos et ole varma, haluatko muuttaa sitä.',
+'fileexists-extension'        => 'Tiedosto, jolla on samankaltainen nimi, on jo olemassa:<br />
+Tallennetun tiedoston nimi: <strong><tt>$1</tt></strong><br />
+Olemassa olevan tiedoston nimi: <strong><tt>$2</tt></strong><br />
+Ainoa ero on tiedostopäätteen kirjainkoko. Tarkista ovatko tiedostot identtisiä.',
+'fileexists-thumb'            => "'''<center>Olemassa oleva kuva</center>'''",
+'fileexists-thumbnail-yes'    => 'Tiedosto näyttäisi olevan pienennetty kuva <i>(pienoiskuva)</i>. Tarkista tiedosto <strong><tt>$1</tt></strong>.<br />
+Jos yllä oleva tiedosto on alkuperäisversio samasta kuvasta, ei sille tarvi tallentaa pienoiskuvaa.',
+'file-thumbnail-no'           => 'Tiedostonimi alkaa merkkijonolla <strong><tt>$1</tt></strong>. Tiedosto näyttäisi olevan pienennetty kuva <i>(pienoiskuva)</i>.
+Jos sinulla on tämän kuvan alkuperäinen versio, tallenna se. Muussa tapauksessa nimeä tiedosto uudelleen.',
+'fileexists-forbidden'        => 'Samanniminen tiedosto on jo olemassa. Tallenna tiedosto jollakin toisella nimellä. Nykyinen tiedosto: [[Image:$1|thumb|center|$1]]',
+'fileexists-shared-forbidden' => 'Samanniminen tiedosto on jo olemassa jaetussa mediavarastossa. Tallenna tiedosto jollakin toisella nimellä. Nykyinen tiedosto: [[Image:$1|thumb|center|$1]]',
+'successfulupload'            => 'Tallennus onnistui',
+'fileuploaded'                => "Tiedosto '''$1''' on tallennettu onnistuneesti. Seuraa linkkiä ($2) kuvaussivulle, ja täytä tiedostoon liityvät tiedot, kuten mistä se on peräisin, milloin se on luotu, kuka sen loi ja mahdollisesti muita tietämiäsi tietoja. Jos tiedosto on kuva, voit lisätä sen sivulle näin: '''<nowiki>[[</nowiki>{{ns:image}}:$1|thumb|Kuvaus]]'''",
+'uploadwarning'               => 'Tallennusvaroitus',
+'savefile'                    => 'Tallenna',
+'uploadedimage'               => 'lisäsi tiedoston [[$1]]',
+'uploaddisabled'              => '{{GRAMMAR:genitive|{{SITENAME}}}} ei voi lisätä tiedostoja.',
+'uploaddisabledtext'          => 'Tiedostojen lisäys on poistettu käytöstä.',
+'uploadscripted'              => 'Tämä tiedosto sisältää HTML-koodia tai skriptejä, jotka selain saattaa virheellisesti suorittaa.',
+'uploadcorrupt'               => 'Tiedosto on vioittunut tai sillä on väärä tiedostopääte. Tarkista tiedosto ja lähetä se uudelleen.',
+'uploadvirus'                 => 'Tiedosto sisältää viruksen. Tarkemmat tiedot: $1',
+'sourcefilename'              => 'Lähdenimi',
+'destfilename'                => 'Kohdenimi',
+'watchthisupload'             => 'Tarkkaile tätä sivua',
+'filewasdeleted'              => 'Tämän niminen tiedosto on lisätty ja poistettu aikaisemmin. Tarkista $1 ennen jatkamista.',
+
+'upload-proto-error'      => 'Virheellinen protokolla',
+'upload-proto-error-text' => 'Etälähetys on mahdollista vain osoitteista, jotka alkavat merkkijonolla <code>http://</code> tai <code>ftp://</code>.',
+'upload-file-error'       => 'Vakava virhe',
+'upload-file-error-text'  => 'Väliaikaistiedoston luominen epäonnistui. Ota yhteyttä sivuston ylläpitäjään.',
+'upload-misc-error'       => 'Virhe',
+'upload-misc-error-text'  => 'Tiedoston etälähetys ei onnistunut. Varmista, että antamasi osoite on oikein ja toimiva. Jos virhe ei katoa, ota yhteyttä sivuston ylläpitäjään.',
+
+# Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
+'upload-curl-error6'       => 'Toimimaton osoite',
+'upload-curl-error6-text'  => 'Antamaasi osoitteeseen ei saatu yhteyttä. Varmista, että osoite on oikein ja että sivusto on saavutettavissa.',
+'upload-curl-error28'      => 'Etälähetyksen aikakatkaisu',
+'upload-curl-error28-text' => 'Antamastasi osoitteesta ei saatu vastausta määräajassa. Varmista, että sivusto on saavutettavissa ja yritä uudelleen.',
+
+'license'            => 'Lisenssi',
+'nolicense'          => 'Ei lisenssiä',
+'upload_source_url'  => ' (julkinen verkko-osoite)',
+'upload_source_file' => ' (tiedosto tietokoneella)',
+
+# Image list
+'imagelist'                 => 'Tiedostoluettelo',
+'imagelisttext'             => 'Alla on <strong>$1</strong> tiedostoa lajiteltuna <strong>$2</strong>.',
+'imagelistforuser'          => 'Käyttäjän ”$1” lisäämät kuvat.',
+'getimagelist'              => 'noudetaan tiedostoluetteloa',
+'ilsubmit'                  => 'Hae',
+'showlast'                  => 'Näytä viimeiset $1 tiedostoa lajiteltuna $2.',
+'byname'                    => 'nimen mukaan',
+'bydate'                    => 'päiväyksen mukaan',
+'bysize'                    => 'koon mukaan',
+'imgdelete'                 => 'poista',
+'imgdesc'                   => 'kuvaus',
+'imgfile'                   => 'tiedosto',
+'imglegend'                 => 'Merkinnät: (kuvaus) = näytä tai muokkaa tiedoston kuvausta.',
+'imghistory'                => 'Historia',
+'revertimg'                 => 'palauta',
+'deleteimg'                 => 'poista',
+'deleteimgcompletely'       => 'poista',
+'imghistlegend'             => 'Merkinnät: (nyk.) = nykyinen versio, (poista) = poista tämä vanha versio, (palauta) = palauta tiedosto tähän vanhaan versioon.<br />Napsauta päiväystä nähdäksesi silloin tallennettu tiedosto.',
+'imagelinks'                => 'Viittaukset sivuilta',
+'linkstoimage'              => 'Seuraavilta sivuilta on linkki tähän tiedostoon:',
+'nolinkstoimage'            => 'Tähän tiedostoon ei ole linkkejä miltään sivulta.',
+'sharedupload'              => 'Tämä tiedosto on jaettu ja muut projektit saattavat käyttää sitä.',
+'shareduploadwiki'          => 'Katso $1 lisätietoja.',
+'shareduploadwiki-linktext' => 'kuvaussivulta',
+'noimage'                   => 'Tämän nimistä tiedostoa ei ole olemassa. Voit $1 {{GRAMMAR:illative|{{SITENAME}}}}.',
+'noimage-linktext'          => 'lisätä tiedoston',
+'uploadnewversion-linktext' => 'Lisää uusi versio tästä tiedostosta',
+'imagelist_date'            => 'Päiväys',
+'imagelist_name'            => 'Nimi',
+'imagelist_user'            => 'Lähettäjä',
+'imagelist_size'            => 'Koko (tavuja)',
+'imagelist_description'     => 'Kuvaus',
+'imagelist_search_for'      => 'Nimihaku:',
+
+# MIME search
+'mimesearch'         => 'MIME-haku',
+'mimesearch-summary' => 'Tällä sivulla voit etsiä tiedostoja niiden MIME-tyypin perusteella. Syöte: sisältötyyppi/alatyyppi, esimerkiksi <tt>image/jpeg</tt>.',
+'mimetype'           => 'MIME-tyyppi:',
+'download'           => 'lataa',
+
+# Unwatched pages
+'unwatchedpages' => 'Tarkkailemattomat sivut',
+
+# List redirects
+'listredirects' => 'Uudelleenohjaukset',
+
+# Unused templates
+'unusedtemplates'     => 'Käyttämättömät mallineet',
+'unusedtemplatestext' => 'Tässä on lista kaikista mallineista, joita ei ole liitetty toiselle sivulle. Muista tarkistaa onko malline siitä huolimatta käytössä.',
+'unusedtemplateswlh'  => 'muut linkit',
+
+# Random redirect
+'randomredirect'         => 'Satunnainen uudelleenohjaus',
+'randomredirect-nopages' => 'Tässä nimiavaruudessa ei ole uudelleenohjauksia.',
+
+# Statistics
+'statistics'             => 'Tilastot',
+'sitestats'              => 'Sivuston tilastot',
+'userstats'              => 'Käyttäjätilastot',
+'sitestatstext'          => "Tietokannassa on {{PLURAL:$1|yksi sivu|yhteensä $1 sivua}}. Tähän on laskettu mukaan keskustelusivut, {{GRAMMAR:genitive|{{SITENAME}}}} projektisivut, hyvin lyhyet sivut, uudelleenohjaukset sekä muita sivuja, joita ei voi pitää kunnollisina sivuina. Nämä poislukien tietokannassa on '''$2''' {{PLURAL:$2|sivu|sivua}}.
+
+{{GRAMMAR:illative|{{SITENAME}}}} on tallennettu '''$8''' {{PLURAL:$8|tiedosto|tiedostoa}}.
+
+Sivuja on katsottu yhteensä '''$3''' {{PLURAL:$3|kerran|kertaa}} ja muokattu '''$4''' {{PLURAL:$4|kerran|kertaa}}. Keskimäärin yhtä sivua on muokattu '''$5''' kertaa, ja muokkausta kohden sivua on katsottu keskimäärin '''$6''' kertaa.
+
+Ohjelmiston suorittamia ylläpitotöitä on jonossa '''$7''' {{PLURAL:$7|kappale|kappaletta}}.",
+'userstatstext'          => "Rekisteröityneitä käyttäjiä on '''$1'''. Näistä '''$2''' ($4%) on {{PLURAL:$2|ylläpitäjä|ylläpitäjiä}} ($5).",
+'statistics-mostpopular' => 'Katsotuimmat sivut',
+
+'disambiguations'      => 'Linkit täsmennyssivuihin',
+'disambiguationspage'  => '{{ns:project}}:Linkkejä täsmennyssivuihin',
+'disambiguations-text' => 'Seuraavat artikkelit linkittävät <i>täsmennyssivuun</i>. Täsmennyssivun sijaan niiden pitäisi linkittää asianomaiseen aiheeseen.<br />Sivua kohdellaan täsmennyssivuna jos se käyttää mallinetta, johon on linkki sivulta [[MediaWiki:disambiguationspage]].',
+
+'doubleredirects'     => 'Kaksinkertaiset uudelleenohjaukset',
+'doubleredirectstext' => '<b>Huomio:</b> Tässä listassa saattaa olla virheitä. Yleensä kyseessä on sivu, jossa ensimmäisen #REDIRECTin jälkeen on tekstiä.<br />Jokaisella rivillä on linkit ensimmäiseen ja toiseen uudelleenohjaukseen sekä toisen uudelleenohjauksen kohteen ensimmäiseen riviin, eli yleensä ”oikeaan” kohteeseen, johon ensimmäisen uudelleenohjauksen pitäisi osoittaa.',
+
+'brokenredirects'        => 'Virheelliset uudelleenohjaukset',
+'brokenredirectstext'    => 'Seuraavat uudelleenohjaukset on linkitetty artikkeleihin, joita ei ole olemassa.',
+'brokenredirects-edit'   => '(muokkaa)',
+'brokenredirects-delete' => '(poista)',
+
+'withoutinterwiki'        => 'Sivut, joilla ei ole kielilinkkejä',
+'withoutinterwiki-header' => 'Seuraavat sivut eivät viittaa erikielisiin versioihin:',
+
+'fewestrevisions' => 'Sivut, joilla on vähiten muutoksia',
+
+# Miscellaneous special pages
+'nbytes'                  => '$1 {{PLURAL:$1|tavu|tavua}}',
+'ncategories'             => '$1 {{PLURAL:$1|luokka|luokkaa}}',
+'nlinks'                  => '$1 {{PLURAL:$1|linkki|linkkiä}}',
+'nmembers'                => '$1 {{PLURAL:$1|jäsen|jäsentä}}',
+'nrevisions'              => '$1 {{PLURAL:$1|muutos|muutosta}}',
+'nviews'                  => '$1 {{PLURAL:$1|lataus|latausta}}',
+'specialpage-empty'       => 'Tämä sivu on tyhjä.',
+'lonelypages'             => 'Yksinäiset sivut',
+'lonelypagestext'         => 'Seuraaviin sivuhin ei ole linkkejä muualta wikistä.',
+'uncategorizedpages'      => 'Luokittelemattomat sivut',
+'uncategorizedcategories' => 'Luokittelemattomat luokat',
+'uncategorizedimages'     => 'Luokittelemattomat tiedostot',
+'unusedcategories'        => 'Käyttämättömät luokat',
+'unusedimages'            => 'Käyttämättömät tiedostot',
+'popularpages'            => 'Suositut sivut',
+'wantedcategories'        => 'Halutut luokat',
+'wantedpages'             => 'Halutut sivut',
+'mostlinked'              => 'Sivut, joihin on eniten linkkejä',
+'mostlinkedcategories'    => 'Luokat, joihin on eniten linkkejä',
+'mostcategories'          => 'Sivut, jotka ovat useissa luokissa',
+'mostimages'              => 'Kuvat, joihin on eniten linkkejä',
+'mostrevisions'           => 'Sivut, joilla on eniten muutoksia',
+'allpages'                => 'Kaikki sivut',
+'prefixindex'             => 'Sivut otsikon alun mukaan',
+'randompage'              => 'Satunnainen sivu',
+'randompage-nopages'      => 'Tässä nimiavaruudessa ei ole sivuja.',
+'shortpages'              => 'Lyhyet sivut',
+'longpages'               => 'Pitkät sivut',
+'deadendpages'            => 'Sivut, joilla ei ole linkkejä',
+'deadendpagestext'        => 'Seuraavat sivut eivät linkitä muihin sivuihin wikissä.',
+'protectedpages'          => 'Suojatut sivut',
+'protectedpagestext'      => 'Seuraavat sivut ovat suojattuja siirtämiseltä tai muutoksilta',
+'protectedpagesempty'     => 'Ei suojattu sivuja.',
+'listusers'               => 'Käyttäjälista',
+'specialpages'            => 'Toimintosivut',
+'spheading'               => 'Toimintosivut',
+'restrictedpheading'      => 'Rajoitetut toimintosivut',
+'rclsub'                  => 'Sivut, joihin linkki sivulta $1',
+'newpages'                => 'Uudet sivut',
+'newpages-username'       => 'Käyttäjätunnus:',
+'ancientpages'            => 'Kauan muokkaamattomat sivut',
+'intl'                    => 'Kieltenväliset linkit',
+'move'                    => 'Siirrä',
+'movethispage'            => 'Siirrä tämä sivu',
+'unusedimagestext'        => 'Huomaa, että muut verkkosivut saattavat viitata tiedostoon suoran URL:n avulla, jolloin tiedosto saattaa olla tässä listassa, vaikka sitä käytetäänkin.',
+'unusedcategoriestext'    => 'Nämä luokat ovat olemassa, mutta niitä ei käytetä.',
+
+# Book sources
+'booksources'               => 'Kirjalähteet',
+'booksources-search-legend' => 'Etsi kirjalähteitä',
+'booksources-isbn'          => 'ISBN:',
+'booksources-go'            => 'Etsi',
+'booksources-text'          => 'Alla linkkejä ulkopuolisiin sivustoihin, joilla myydään uusia ja käytettyjä kirjoja. Sivuilla voi myös olla lisätietoa kirjoista.',
+
+'categoriespagetext' => '{{GRAMMAR:inessive|{{SITENAME}}}} on seuraavat luokat:',
+'data'               => 'Data',
+'userrights'         => 'Käyttöoikeuksien hallinta',
+'groups'             => 'Ryhmät',
+'isbn'               => 'ISBN',
+'alphaindexline'     => '$1…$2',
+'version'            => 'Versio',
+
+# Special:Log
+'specialloguserlabel'  => 'Käyttäjä:',
+'speciallogtitlelabel' => 'Kohde:',
+'log'                  => 'Lokit',
+'log-search-legend'    => 'Etsi lokeista',
+'log-search-submit'    => 'Hae',
+'alllogstext'          => 'Yhdistetty lokien näyttö. Voit rajoittaa listaa valitsemalla lokityypin, käyttäjän tai sivun johon muutos on kohdistunut.',
+'logempty'             => 'Ei tapahtumia lokissa.',
+'log-title-wildcard'   => 'Sivu alkaa merkkijonolla:',
+
+# Special:Allpages
+'nextpage'          => 'Seuraava sivu ($1)',
+'prevpage'          => 'Edellinen sivu ($1)',
+'allpagesfrom'      => 'Näytä sivuja lähtien sivusta:',
+'allarticles'       => 'Kaikki sivut',
+'allinnamespace'    => 'Kaikki sivut nimiavaruudessa $1',
+'allnotinnamespace' => 'Kaikki sivut, jotka eivät ole nimiavaruudessa $1',
+'allpagesprev'      => 'Edellinen',
+'allpagesnext'      => 'Seuraava',
+'allpagessubmit'    => 'Hae',
+'allpagesprefix'    => 'Näytä sivut, joiden otsikko alkaa',
+'allpagesbadtitle'  => 'Annettu otsikko oli kelvoton tai siinä oli wikien välinen etuliite.',
+
+# Special:Listusers
+'listusersfrom'      => 'Näytä käyttäjät alkaen:',
+'listusers-submit'   => 'Hae',
+'listusers-noresult' => 'Käyttäjiä ei löytynyt. Tarkista myös eri kirjainkoot.',
+
+# E-mail user
+'mailnologin'     => 'Lähettäjän osoite puuttuu',
+'mailnologintext' => 'Sinun pitää olla [[Special:Userlogin|kirjautuneena sisään]] ja [[Special:Preferences|asetuksissasi]] pitää olla toimiva ja <strong>varmennettu</strong> sähköpostiosoite, jotta voit lähettää sähköpostia muille käyttäjille.',
+'emailuser'       => 'Lähetä sähköpostia tälle käyttäjälle',
+'emailpage'       => 'Lähetä sähköpostia käyttäjälle',
+'emailpagetext'   => 'Jos tämä käyttäjä on antanut asetuksissaan kelvollisen sähköpostiosoitteen, alla olevalla lomakeella voi lähettää yhden viestin hänelle. Omissa asetuksissasi annettu sähköpostiosoite näkyy sähköpostin lähettäjän osoitteena, jotta vastaanottaja voi vastata viestiin.',
+'usermailererror' => 'Postitus palautti virheen:',
+'defemailsubject' => '{{SITENAME}}-sähköposti',
+'noemailtitle'    => 'Ei sähköpostiosoitetta',
+'noemailtext'     => 'Tämä käyttäjä ei ole määritellyt kelpoa sähköpostiosoitetta tai ei halua postia muilta käyttäjiltä.',
+'emailfrom'       => 'Lähettäjä',
+'emailto'         => 'Vastaanottaja',
+'emailsubject'    => 'Aihe',
+'emailmessage'    => 'Viesti',
+'emailsend'       => 'Lähetä',
+'emailccme'       => 'Lähetä kopio viestistä minulle.',
+'emailccsubject'  => 'Kopio lähettämästäsi viestistä osoitteeseen $1: $2',
+'emailsent'       => 'Sähköposti lähetetty',
+'emailsenttext'   => 'Sähköpostiviestisi on lähetetty.',
+
+# Watchlist
+'watchlist'            => 'Tarkkailulista',
+'mywatchlist'          => 'Tarkkailulista',
+'watchlistfor'         => 'käyttäjälle <b>$1</b>',
+'nowatchlist'          => 'Tarkkailulistallasi ei ole sivuja.',
+'watchlistanontext'    => 'Sinun täytyy $1, jos haluat käyttää tarkkailulistaa.',
+'watchlistcount'       => 'Tarkkailulistallasi on <b>$1</b> sivua, keskustelusivut mukaan lukien.',
+'clearwatchlist'       => 'Tarkkailulistan tyhjentäminen',
+'watchlistcleartext'   => 'Haluatko tyhjentää tarkkailulistan?',
+'watchlistclearbutton' => 'Tyhjennä tarkkailusta',
+'watchlistcleardone'   => 'Tarkkailulista on tyhjennetty. $1 sivua poistettiin listalta.',
+'watchnologin'         => 'Et ole kirjautunut sisään',
+'watchnologintext'     => 'Sinun pitää kirjautua sisään, jotta voisit käyttää tarkkailulistaa.',
+'addedwatch'           => 'Lisätty tarkkailulistalle',
+'addedwatchtext'       => "Sivu '''$1''' on lisätty [[Special:Watchlist|tarkkailulistallesi]]. Tulevaisuudessa sivuun ja sen keskustelusivuun tehtävät muutokset listataan täällä. Sivu on '''lihavoitu''' [[Special:Recentchanges|tuoreiden muutosten listassa]], jotta huomaisit sen helpommin. Jos haluat myöhemmin poistaa sivun tarkkailulistaltasi, napsauta linkkiä ''lopeta tarkkailu'' sivun reunassa.",
+'removedwatch'         => 'Poistettu tarkkailulistalta',
+'removedwatchtext'     => "Sivu '''$1''' on poistettu tarkkailulistaltasi.",
+'watch'                => 'Tarkkaile',
+'watchthispage'        => 'Tarkkaile tätä sivua',
+'unwatch'              => 'Lopeta tarkkailu',
+'unwatchthispage'      => 'Lopeta tarkkailu',
+'notanarticle'         => 'Ei ole sivu',
+'watchnochange'        => 'Valittuna ajanjaksona yhtäkään tarkkailemistasi sivuista ei muokattu.',
+'watchdetails'         => 'Keskustelusivuja mukaan laskematta tarkkailun alla on $1 sivua, joista $2 on muokattu määritellyllä aikavälillä. <span class="plainlinks"> [$4 Muokkaa listaa]</span>.',
+'wlheader-enotif'      => '* Sähköposti-ilmoitukset ovat käytössä.',
+'wlheader-showupdated' => "* Sivut, joita on muokattu viimeisen käyntisi jälkeen on merkitty '''paksummalla'''",
+'watchmethod-recent'   => 'tarkistetaan tuoreimpia muutoksia tarkkailluille sivuille',
+'watchmethod-list'     => 'tarkistetaan tarkkailtujen sivujen tuoreimmat muutokset',
+'removechecked'        => 'Poista valitut sivut tarkkailulistalta',
+'watchlistcontains'    => 'Tarkkailulistallasi on {{PLURAL:$1|yksi sivu|$1 sivua}}.',
+'watcheditlist'        => 'Tässä on aakkostettu lista tarkkailemistasi sivuista. Merkitse niiden sivujen ruudut, jotka haluat poistaa tarkkailulistaltasi.',
+'removingchecked'      => 'Merkityt sivut poistettiin tarkkailulistalta.',
+'couldntremove'        => 'Sivua $1 ei voitu poistaa tarkkailulistalta',
+'iteminvalidname'      => 'Sivun $1 kanssa oli ongelmia! Sivun nimessä on vikaa.',
+'wlnote'               => "Alla on '''$1''' {{PLURAL:$1|muutos|muutosta}} viimeisen {{PLURAL:$2||'''$2'''}} tunnin ajalta.",
+'wlshowlast'           => 'Näytä viimeiset $1 tuntia tai $2 päivää$3',
+'wlsaved'              => 'Tämä on tallennettu versio tarkkailulistastasi.',
+'watchlist-show-bots'  => 'Näytä bottien muokkaukset',
+'watchlist-hide-bots'  => 'Piilota bottien muokkaukset',
+'watchlist-show-own'   => 'Näytä omat muokkaukset',
+'watchlist-hide-own'   => 'Piilota omat muokkaukset',
+'watchlist-show-minor' => 'Näytä pienet muokkaukset',
+'watchlist-hide-minor' => 'Piilota pienet muokkaukset',
+'wldone'               => 'Muutokset tehty.',
+
+# Displayed when you click the "watch" button and it's in the process of watching
+'watching'   => 'Lisätään tarkkailulistalle...',
+'unwatching' => 'Poistetaan tarkkailulistalta...',
+
+'enotif_mailer'      => '{{GRAMMAR:genitive|{{SITENAME}}}} sivu on muuttunut -ilmoitus',
+'enotif_reset'       => 'Merkitse kaikki sivut katsotuiksi',
+'enotif_newpagetext' => 'Tämä on uusi sivu.',
+'changed'            => 'muuttanut sivua',
+'created'            => 'luonut sivun',
+'enotif_subject'     => '$PAGEEDITOR on $CHANGEDORCREATED $PAGETITLE',
+'enotif_lastvisited' => 'Osoitteessa $1 on kaikki muutokset viimeisen käyntisi jälkeen.',
+'enotif_body'        => 'Käyttäjä $WATCHINGUSERNAME,
+
+{{GRAMMAR:genitive|{{SITENAME}}}} käyttäjä $PAGEEDITOR on $CHANGEDORCREATED $PAGETITLE $PAGEEDITDATE. Nykyinen versio on osoitteessa $PAGETITLE_URL .
+
+$NEWPAGE
+
+Muokkaajan yhteenveto: $PAGESUMMARY $PAGEMINOREDIT
+
+Ota yhteyttä muokkaajaan:
+sähköposti: $PAGEEDITOR_EMAIL
+wiki: $PAGEEDITOR_WIKI
+
+Uusia ilmoituksia tästä sivusta ei tule kunnes vierailet sivulla. Voit myös nollata ilmoitukset kaikille tarkkailemillesi sivuille tarkkailulistallasi.
+
+             {{GRAMMAR:genitive|{{SITENAME}}}} ilmoitusjärjestelmä
+
+--
+Tarkkailulistan asetuksia voit muuttaa osoitteessa:
+{{fullurl:Special:Watchlist/edit}}
+
+Palaute ja lisäapu osoitteessa:
+{{fullurl:{{MediaWiki:helppage}}}}',
+
+# Delete/protect/revert
+'deletepage'                  => 'Poista sivu',
+'confirm'                     => 'Toteuta',
+'excontent'                   => 'sisälsi: ”$1”',
+'excontentauthor'             => 'sisälsi: ”$1” (ainoa muokkaaja oli $2)',
+'exbeforeblank'               => 'ennen tyhjentämistä sisälsi: ”$1”',
+'exblank'                     => 'oli tyhjä',
+'confirmdelete'               => 'Vahvista poisto',
+'deletesub'                   => 'Sivun $1 poisto',
+'historywarning'              => 'Varoitus: Sivulla, jonka aiot poistaa on muokkaushistoria:',
+'confirmdeletetext'           => 'Olet poistamassa sivun tai tiedoston ja kaiken sen historian. Ymmärrä teon seuraukset ja tee poisto {{GRAMMAR:genitive|{{SITENAME}}}} [[{{MediaWiki:policy-url}}|käytäntöjen]] mukaisesti.',
+'actioncomplete'              => 'Toiminto suoritettu',
+'deletedtext'                 => "'''[[Special:Undelete/$1|$1]]''' on poistettu. Sivulla $2 on lista viimeaikaisista poistoista.",
+'deletedarticle'              => 'poisti sivun $1',
+'dellogpage'                  => 'Poistoloki',
+'dellogpagetext'              => 'Alla on loki viimeisimmistä poistoista.',
+'deletionlog'                 => 'poistoloki',
+'reverted'                    => 'Palautettu aikaisempaan versioon',
+'deletecomment'               => 'Poistamisen syy',
+'imagereverted'               => 'Aikaisempaan versioon palauttaminen onnistui.',
+'rollback'                    => 'palauta aiempaan versioon',
+'rollback_short'              => 'Palautus',
+'rollbacklink'                => 'palauta',
+'rollbackfailed'              => 'Palautus epäonnistui',
+'cantrollback'                => 'Aiempaan versioon ei voi palauttaa, koska viimeisin kirjoittaja on sivun ainoa tekijä.',
+'alreadyrolled'               => 'Käyttäjän [[User:$2|$2]] ([[User_talk:$2|keskustelu]]) tekemiä muutoksia sivuun $1 ei voi kumota, koska käyttäjä [[User:$3|$3]] ([[User_talk:$3|keskustelu]]) on tehnyt uudempia muutoksia.',
+'editcomment'                 => 'Muokkauksen yhteenveto oli: <i>$1</i>.', # only shown if there is an edit comment
+'revertpage'                  => 'Käyttäjän [[Special:Contributions/$2|$2]] ([[User_talk:$2|keskustelu]]) muokkaukset kumottiin ja sivu palautettiin viimeisimpään käyttäjän [[User:$1|$1]] tekemään versioon.',
+'sessionfailure'              => 'Istuntosi kanssa on ongelma. Muutosta ei toteutettu varotoimena sessionkaappauksien takia. Käytä selaimen paluutoimintoa ja päivitä sivu, jolta tulit, ja yritä uudelleen.',
+'protectlogpage'              => 'Suojausloki',
+'protectlogtext'              => 'Alla on loki sivujen suojauksista ja suojauksien poistoista. Luettelo tällä hetkellä suojatuista sivuista löytyy [[Special:Protectedpages|suojattuen sivujen luettelosta]].',
+'protectedarticle'            => 'suojasi sivun $1',
+'unprotectedarticle'          => 'poisti suojauksen sivulta $1',
+'protectsub'                  => 'Sivun $1 suojaus',
+'confirmprotecttext'          => 'Haluatko varmasti suojata tämän sivun?',
+'confirmprotect'              => 'Vahvista suojaus',
+'protectmoveonly'             => 'Suojaa vain siirroilta',
+'protectcomment'              => 'Suojauksen syy:',
+'protectexpiry'               => 'Vanhenee',
+'protect_expiry_invalid'      => 'Vanhenemisaika ei kelpaa.',
+'protect_expiry_old'          => 'Vanhenemisaika on menneisyydessä.',
+'unprotectsub'                => 'Suojauksen poisto sivulta $1',
+'confirmunprotecttext'        => 'Haluatko varmasti poistaa tämän sivun suojauksen?',
+'confirmunprotect'            => 'Vahvista suojauksen poisto',
+'unprotectcomment'            => 'Syy suojauksen poistoon',
+'protect-unchain'             => 'Käytä siirtosuojausta',
+'protect-text'                => 'Voit katsoa ja muuttaa sivun ”<strong>$1</strong>” suojauksia.',
+'protect-locked-blocked'      => 'Et voi muuttaa sivun suojauksia, koska sinut on estetty. Alla on sivun ”<strong>$1</strong>” nykyiset suojaukset:',
+'protect-locked-dblock'       => 'Sivun suojauksia ei voi muuttaa, koska tietokanta on lukittu. Alla on sivun ”<strong>$1</strong>” nykyiset suojaukset:',
+'protect-locked-access'       => 'Sinulla ei ole tarvittavia oikeuksia sivujen suojauksen muuttamiseen. Alla on sivun ”<strong>$1</strong>” nykyiset suojaukset:',
+'protect-cascadeon'           => 'Tämä sivu on suojauksen kohteena, koska se on sisällytetty alla {{PLURAL:$1|olevaan laajennetusti suojattuun sivuun|oleviin laajennetusti suojattuihin sivuihin}}. Voit muuttaa tämän sivun suojaustasoa, mutta se ei vaikuta laajennettuun suojaukseen.',
+'protect-default'             => '(ei rajoituksia)',
+'protect-level-autoconfirmed' => 'Estä uudet ja anonyymit käyttäjät',
+'protect-level-sysop'         => 'Vain ylläpitäjät',
+'protect-summary-cascade'     => 'laajennettu',
+'protect-expiring'            => 'vanhenee $1',
+'protect-cascade'             => 'Laajenna suojaus koskemaan kaikkia tähän sivuun sisällytettyjä sivuja.',
+'restriction-type'            => 'Rajoitus',
+'restriction-level'           => 'Suojaus',
+'minimum-size'                => 'Vähimmäiskoko tavuissa',
+
+# Restrictions (nouns)
+'restriction-edit' => 'muokkaus',
+'restriction-move' => 'siirto',
+
+# Restriction levels
+'restriction-level-sysop'         => 'täysin suojattu',
+'restriction-level-autoconfirmed' => 'osittaissuojattu',
+'restriction-level-all'           => 'rajoittamaton',
+
+# Undelete
+'undelete'                 => 'Palauta poistettuja sivuja',
+'undeletepage'             => 'Poistettujen sivujen selaus',
+'viewdeletedpage'          => 'Poistettujen sivujen selaus',
+'undeletepagetext'         => 'Seuraavat sivut on poistettu, mutta ne löytyvät vielä arkistosta, joten ne ovat palautettavissa. Arkisto saatetaan tyhjentää aika ajoin.',
+'undeleteextrahelp'        => 'Palauta sivu valitsemalla <b><i>Palauta</i></b>. Voit palauttaa versiota valikoivasti valitsemalla vain niiden versioiden valintalaatikot, jotka haluat palauttaa.',
+'undeleterevisions'        => '{{PLURAL:$1|Versio|$1 versiota}} arkistoitu.',
+'undeletehistory'          => 'Jos palautat sivun, kaikki versiot lisätään sivun historiaan. Jos uusi sivu samalla nimellä on luotu poistamisen jälkeen, palautetut versiot lisätään sen historiaan, ja olemassa olevaa versiota ei korvata automaattisesti.',
+'undeleterevdel'           => 'Palautusta ei tehdä, jos sen seurauksena sivun uusin versio olisi osittain poistettu. Tässä tilanteessa poista uusimman poistetan version piilotus. Tiedostoversioita, joihin sinulla ei ole katseluoikeutta ei palauteta.',
+'undeletehistorynoadmin'   => 'Tämä sivu on poistettu. Syy sivun poistamiseen näkyy yhteenvedossa, jossa on myös tiedot, ketkä ovat muokanneet tätä sivua ennen poistamista. Sivujen varsinainen sisältö on vain ylläpitäjien luettavissa.',
+'undelete-revision'        => 'Poistettu sivu $1 hetkellä $2',
+'undeleterevision-missing' => 'Virheellinen tai puuttuva versio. Se on saatettu palauttaa tai poistaa arkistosta.',
+'undeletebtn'              => 'Palauta',
+'undeletereset'            => 'Tyhjennä',
+'undeletecomment'          => 'Kommentti:',
+'undeletedarticle'         => 'palautti sivun [[$1]]',
+'undeletedrevisions'       => '$1 versiota palautettiin',
+'undeletedrevisions-files' => '$1 versiota ja $2 tiedosto(a) palautettiin',
+'undeletedfiles'           => '$1 tiedosto(a) palautettiin',
+'cannotundelete'           => 'Palauttaminen epäonnistui.',
+'undeletedpage'            => "<big>'''”$1” on palautettu.'''</big>
+
+[[Special:Log/delete|Poistolokista]] löydät listan viimeisimmistä poistoista ja palautuksista.",
+'undelete-header'          => '[[Special:Log/delete|poistolokissa]] on lista viimeisimmistä poistoista.',
+'undelete-search-box'      => 'Etsi poistettuja sivuja',
+'undelete-search-prefix'   => 'Näytä sivut, jotka alkavat merkkijonolla:',
+'undelete-search-submit'   => 'Hae',
+'undelete-no-results'      => 'Poistoarkistosta ei löytynyt haettuja sivuja.',
+
+# Namespace form on various pages
+'namespace' => 'Nimiavaruus:',
+'invert'    => 'Käännä nimiavaruusvalinta päinvastaiseksi',
+
+# Contributions
+'contributions' => 'Käyttäjän muokkaukset',
+'mycontris'     => 'Muokkaukset',
+'contribsub2'   => 'Käyttäjän $1 ($2) muokkaukset',
+'nocontribs'    => 'Näihin ehtoihin sopivia muokkauksia ei löytynyt.',
+'ucnote'        => "Alla on '''$1''' viimeisintä tämän käyttäjän tekemää muokkausta viimeisten '''$2''' päivän aikana.",
+'uclinks'       => 'Katso $1 viimeisintä muokkausta; katso $2 viimeisintä päivää.',
+'uctop'         => ' (uusin)',
+
+'sp-contributions-newest'      => 'Uusimmat',
+'sp-contributions-oldest'      => 'Vanhimmat',
+'sp-contributions-newer'       => '← $1 uudempaa',
+'sp-contributions-older'       => '$1 vanhempaa →',
+'sp-contributions-newbies'     => 'Näytä uusien tulokkaiden muutokset',
+'sp-contributions-newbies-sub' => 'Uusien tulokkaiden muokkaukset',
+'sp-contributions-blocklog'    => 'estot',
+'sp-contributions-search'      => 'Etsi muokkauksia',
+'sp-contributions-username'    => 'IP-osoite tai käyttäjätunnus:',
+'sp-contributions-submit'      => 'Hae',
+
+'sp-newimages-showfrom' => 'Näytä uudet kuvat alkaen $1',
+
+# What links here
+'whatlinkshere'      => 'Tänne viittaavat sivut',
+'notargettitle'      => 'Ei kohdetta',
+'notargettext'       => 'Et ole määritellyt kohdesivua tai -käyttäjää johon toiminto kohdistuu.',
+'linklistsub'        => 'Lista linkeistä',
+'linkshere'          => 'Seuraavilta sivuilta on linkki sivulle <strong>[[:$1]]</strong>:',
+'nolinkshere'        => 'Sivulle <strong>[[:$1]]</strong> ei ole linkkejä.',
+'nolinkshere-ns'     => 'Sivulle <strong>[[:$1]]</strong> ei ole linkkejä valitussa nimiavaruudessa.',
+'isredirect'         => 'uudelleenohjaussivu',
+'istemplate'         => 'sisällytetty mallineeseen',
+'whatlinkshere-prev' => '← {{PLURAL:$1|edellinen sivu|$1 edellistä sivua}}',
+'whatlinkshere-next' => '{{PLURAL:$1|seuraava sivu|$1 seuraavaa sivua}} →',
+
+# Block/unblock
+'blockip'                     => 'Aseta muokkausesto',
+'blockiptext'                 => 'Tällä lomakkeella voit estää käyttäjän tai IP-osoitteen muokkausoikeudet. Muokkausoikeuksien poistamiseen pitää olla syy, esimerkiksi sivujen vandalisointi. Kirjoita syy siihen varattuun kenttään.<br />Vanhenemisajat noudattavat GNUn standardimuotoa, joka on kuvattu tar-manuaalissa ([http://www.gnu.org/software/tar/manual/html_chapter/tar_7.html] [EN]), esimerkiksi ”1 hour”, ”2 days”, ”next Wednesday”, 2005-08-29”. Esto voi olla myös ”indefinite” tai ”infinite”, joka kestää kunnes se poistetaan.',
+'ipaddress'                   => 'IP-osoite',
+'ipadressorusername'          => 'IP-osoite tai käyttäjätunnus',
+'ipbexpiry'                   => 'Umpeutuu',
+'ipbreason'                   => 'Syy',
+'ipbreasonotherlist'          => 'Muu syy',
+'ipbreason-dropdown'          => '
+*Yleiset estosyyt
+** Väärän tiedon lisääminen
+** Sisällön poistaminen
+** Mainoslinkkien lisääminen
+** Sotkeminen tai roskan lisääminen
+** Häiriköinti
+** Useamman käyttäjätunnuksen väärinkäyttö
+** Sopimaton käyttäjätunnus',
+'ipbanononly'                 => 'Estä vain kirjautumattomat käyttäjät',
+'ipbcreateaccount'            => 'Estä tunnusten luonti',
+'ipbenableautoblock'          => 'Estä viimeisin IP-osoite, josta käyttäjä on muokannut, sekä ne osoitteet, joista hän jatkossa yrittää muokata.',
+'ipbsubmit'                   => 'Estä',
+'ipbother'                    => 'Vapaamuotoinen kesto',
+'ipboptions'                  => '2 tuntia:2 hours,1 päivä:1 day,3 päivää:3 days,1 viikko:1 week,2 viikkoa:2 weeks,1 kuukausi:1 month,3 kuukautta:3 months,6 kuukautta:6 months,1 vuosi:1 year,ikuisesti:infinite',
+'ipbotheroption'              => 'Muu kesto',
+'ipbotherreason'              => 'Muu syy',
+'ipbhidename'                 => 'Piilota IP-osoite tai tunnus estolokista, muokkausestolistasta ja käyttäjälistasta',
+'badipaddress'                => 'IP-osoite on väärin muotoiltu.',
+'blockipsuccesssub'           => 'Esto onnistui',
+'blockipsuccesstext'          => "Käyttäjä tai IP-osoite '''$1''' on estetty.<br />Nykyiset estot löytyvät [[Special:Ipblocklist|estolistalta]].",
+'ipb-edit-dropdown'           => 'Muokkaa syitä',
+'ipb-unblock-addr'            => 'Poista käyttäjän $1 esto',
+'ipb-unblock'                 => 'Poista käyttäjän tai IP-osoitteen muokkausesto',
+'ipb-blocklist-addr'          => 'Näytä käyttäjän $1 estot',
+'ipb-blocklist'               => 'Näytä estot',
+'unblockip'                   => 'Muokkauseston poisto',
+'unblockiptext'               => 'Tällä lomakkeella voit poistaa käyttäjän tai IP-osoitteen muokkauseston.',
+'ipusubmit'                   => 'Poista esto',
+'unblocked'                   => 'Käyttäjän [[User:$1|$1]] esto on poistettu',
+'ipblocklist'                 => 'Lista estetyistä IP-osoitteista',
+'ipblocklist-submit'          => 'Hae',
+'blocklistline'               => '$1 — $2 on estänyt käyttäjän $3 ($4)',
+'infiniteblock'               => 'ikuisesti',
+'expiringblock'               => 'vanhenee $1',
+'anononlyblock'               => 'vain kirjautumattomat',
+'noautoblockblock'            => 'ei automaattista IP-osoitteiden estoa',
+'createaccountblock'          => 'tunnusten luonti estetty',
+'ipblocklistempty'            => 'Estolista on tyhjä.',
+'blocklink'                   => 'estä',
+'unblocklink'                 => 'poista esto',
+'contribslink'                => 'muokkaukset',
+'autoblocker'                 => 'Olet automaattisesti estetty, koska jaat IP-osoitteen käyttäjän $1 kanssa. Eston syy: $2.',
+'blocklogpage'                => 'Estoloki',
+'blocklogentry'               => 'esti käyttäjän tai IP-osoitteen $1. Eston kesto $2 $3',
+'blocklogtext'                => 'Tässä on loki muokkausestoista ja niiden purkamisista. Automaattisesti estettyjä IP-osoitteita ei kirjata. Tutustu [[Special:Ipblocklist|estolistaan]] nähdäksesi listan tällä hetkellä voimassa olevista estoista.',
+'unblocklogentry'             => 'poisti käyttäjältä $1 muokkauseston',
+'block-log-flags-anononly'    => 'vain kirjautumattomat käyttäjät',
+'block-log-flags-nocreate'    => 'tunnusten luonti estetty',
+'block-log-flags-noautoblock' => 'ei automaattista IP-osoitteiden estoa',
+'range_block_disabled'        => 'Ylläpitäjän oikeus luoda alue-estoja ei ole käytössä.',
+'ipb_expiry_invalid'          => 'Virheellinen umpeutumisaika.',
+'ipb_already_blocked'         => '”$1” on jo estetty.',
+'ip_range_invalid'            => 'Virheellinen IP-alue.',
+'proxyblocker'                => 'Välityspalvelinesto',
+'ipb_cant_unblock'            => 'Estoa ”$1” ei löytynyt. Se on saatettu poistaa.',
+'proxyblockreason'            => 'IP-osoitteestasi on estetty muokkaukset, koska se on avoin välityspalvelin. Ota yhteyttä Internet-palveluntarjoajaasi tai tekniseen tukeen ja kerro heillä tästä tietoturvaongelmasta.',
+'proxyblocksuccess'           => 'Valmis.',
+'sorbs'                       => 'SORBS-DNSBL',
+'sorbsreason'                 => 'IP-osoitteesti on listattu avoimena välityspalvelimena [http://www.sorbs.net SORBSin] mustalla listalla.',
+'sorbs_create_account_reason' => 'IP-osoitteesi on listattu avoimena välityspalvelimena [http://www.sorbs.net SORBSin] mustalla listalla. Et voi luoda käyttäjätunnusta.',
+
+# Developer tools
+'lockdb'              => 'Lukitse tietokanta',
+'unlockdb'            => 'Vapauta tietokanta',
+'lockdbtext'          => 'Tietokannan lukitseminen estää käyttäjiä muokkaamasta sivuja, vaihtamasta asetuksia, muokkaamasta tarkkailulistoja ja tekemästä muita tietokannan muuttamista vaativia toimia. Ole hyvä ja vahvista, että tämä on tarkoituksesi, ja että vapautat tietokannan kun olet suorittanut ylläpitotehtävät.',
+'unlockdbtext'        => 'Tietokannan vapauttaminen antaa käyttäjille mahdollisuuden muokkata sivuja, vaihtamaa asetuksia, muokkata tarkkailulistoja ja tehdä muita tietokannan muuttamista vaativia toimia. Ole hyvä ja vahvista, että tämä on tarkoituksesi.',
+'lockconfirm'         => 'Kyllä, haluan varmasti lukita tietokannan.',
+'unlockconfirm'       => 'Kyllä, haluan varmasti vapauttaa tietokannan.',
+'lockbtn'             => 'Lukitse tietokanta',
+'unlockbtn'           => 'Vapauta tietokanta',
+'locknoconfirm'       => 'Et merkinnyt vahvistuslaatikkoa.',
+'lockdbsuccesssub'    => 'Tietokannan lukitseminen onnistui',
+'unlockdbsuccesssub'  => 'Tietokannan vapauttaminen onnistui',
+'lockdbsuccesstext'   => 'Tietokanta on lukittu.<br />Muista vapauttaa tietokanta ylläpitotoimenpiteiden jälkeen.',
+'unlockdbsuccesstext' => 'Tietokanta on vapautettu.',
+'lockfilenotwritable' => 'Tietokannan lukitustiedostoa ei voi kirjoittaa. Tarkista oikeudet.',
+'databasenotlocked'   => 'Tietokanta ei ole lukittu.',
+
+# Move page
+'movepage'                => 'Siirrä sivu',
+'movepagetext'            => "Alla olevalla lomakkeella voit nimetä uudelleen sivuja, jolloin niiden koko historia siirtyy uuden nimen alle. Vanhasta sivusta tulee uudelleenohjaussivu, joka osoittaa uuteen sivuun. Vanhaan sivuun suunnattuja linkkejä ei muuteta, joten muista tehdä tarkistukset kaksinkertaisten tai rikkinäisten uudelleenohjausten varalta. '''Olet vastuussa siitä, että linkit osoittavat sinne, mihin niiden on tarkoituskin osoittaa.'''<br />Huomaa, että sivua '''ei''' siirretä mikäli uusi otsikko on olemassa olevan sivun käytössä, paitsi milloin kyseessä on tyhjä sivu tai uudelleenohjaus, jolla ei ole muokkaushistoriaa. Tämä tarkoittaa sitä, että voit siirtää sivun takaisin vanhalle nimelleen mikäli teit virheen, mutta et voi kirjoittaa olemassa olevan sivun päälle. Jos sivu tarvitsee siirtää olemassa olevan sivun päälle, ota yhteyttä [[Special:Listusers/sysop|ylläpitäjään]].",
+'movepagetalktext'        => "Sivuun mahdollisesti kytketty keskustelusivu siirretään automaattisesti, '''paitsi jos''':
+*Siirrät sivua nimiavaruudesta toiseen
+*Kohdesivulla on olemassa keskustelusivu, joka ei ole tyhjä, tai
+*Kumoat alla olevan ruudun asetuksen.
+
+Näissä tapauksissa sivut täytyy siirtää tai yhdistää käsin.",
+'movearticle'             => 'Siirrä sivu',
+'movenologin'             => 'Et ole kirjautunut sisään',
+'movenologintext'         => 'Sinun pitää olla rekisteröitynyt käyttäjä ja kirjautua sisään, jotta voisit siirtää sivun.',
+'newtitle'                => 'Uusi nimi sivulle',
+'move-watch'              => 'Tarkkaile tätä sivua',
+'movepagebtn'             => 'Siirrä sivu',
+'pagemovedsub'            => 'Siirto onnistui',
+'pagemovedtext'           => "Sivu '''[[$1]]''' siirrettiin nimelle '''[[$2]]'''.",
+'articleexists'           => 'Kohdesivu on jo olemassa, tai valittu nimi ei ole sopiva. Ole hyvä ja valitse uusi nimi.',
+'talkexists'              => 'Sivun siirto onnistui, mutta keskustelusivua ei voitu siirtää, koska uuden otsikon alla on jo keskustelusivu. Keskustelusivujen sisältö täytyy yhdistää käsin.',
+'movedto'                 => 'Siirretty uudelle otsikolle',
+'movetalk'                => 'Siirrä myös keskustelusivu.',
+'talkpagemoved'           => 'Myös sivun keskustelusivu siirrettiin.',
+'talkpagenotmoved'        => "Sivun keskustelusivua '''ei''' siirretty.",
+'1movedto2'               => 'siirsi sivun ”$1” uudelle nimelle ”$2”',
+'1movedto2_redir'         => 'siirsi sivun ”$1” uudelleenohjauksen ”$2” päälle',
+'movelogpage'             => 'Siirtoloki',
+'movelogpagetext'         => 'Tämä on loki siirretyistä sivuista.',
+'movereason'              => 'Syy',
+'revertmove'              => 'kumoa',
+'delete_and_move'         => 'Poista kohdesivu ja siirrä',
+'delete_and_move_text'    => 'Kohdesivu [[$1]] on jo olemassa. Haluatko poistaa sen, jotta nykyinen sivu voitaisiin siirtää?',
+'delete_and_move_confirm' => 'Poista sivu',
+'delete_and_move_reason'  => 'Sivu on siirron tiellä.',
+'selfmove'                => 'Lähde- ja kohdenimi ovat samat.',
+'immobile_namespace'      => 'Sivuja ei voi siirtää tähän nimiavaruuteen.',
+
+# Export
+'export'            => 'Sivujen vienti',
+'exporttext'        => 'Voit viedä sivun tai sivujen tekstiä ja muokkaushistoriaa XML-muodossa. Tämä tieto voidaan tuoda johonkin toiseen wikiin, jossa käytetään MediaWiki-ohjelmistoa.<br />Syötä sivujen otsikoita riveittäin alla olevaan laatikkoon. Valitse myös, haluatko kaikki versiot sivuista, vai ainoastaan nykyisen version.<br />Jälkimmäisessä tapauksessa voit myös käyttää linkkiä. Esimerkiksi sivun {{Mediawiki:mainpage}} saa vietyä linkistä [[{{ns:Special}}:Export/{{Mediawiki:mainpage}}]].',
+'exportcuronly'     => 'Liitä mukaan ainoastaan uusin versio, ei koko historiaa.',
+'exportnohistory'   => '----
+Sivujen koko historian vienti on estetty suorituskykysyistä.',
+'export-submit'     => 'Vie',
+'export-addcattext' => 'Lisää sivut luokasta:',
+'export-addcat'     => 'Lisää',
+
+# Namespace 8 related
+'allmessages'               => 'Järjestelmäviestit',
+'allmessagesname'           => 'Nimi',
+'allmessagesdefault'        => 'Oletusarvo',
+'allmessagescurrent'        => 'Nykyinen arvo',
+'allmessagestext'           => 'Tämä on luettelo kaikista MediaWiki-nimiavaruudessa olevista viesteistä.',
+'allmessagesnotsupportedUI' => 'Tämä sivu ei tue käyttöliittymäkieltäsi <b>$1</b> tässä MediaWikissä.',
+'allmessagesnotsupportedDB' => 'Tämä sivu ei ole käytössä, koska <tt>$wgUseDatabaseMessages</tt>-asetus on pois päältä.',
+'allmessagesfilter'         => 'Viestiavainsuodatin:',
+'allmessagesmodified'       => 'Näytä vain muutetut',
+
+# Thumbnails
+'thumbnail-more'           => 'Suurenna',
+'missingimage'             => '<b>Puuttuva kuva</b><br /><i>$1</i>',
+'filemissing'              => 'Tiedosto puuttuu',
+'thumbnail_error'          => 'Pienoiskuvan luominen epäonnistui: $1',
+'djvu_page_error'          => 'DjVu-tiedostossa ei ole pyydettyä sivua',
+'djvu_no_xml'              => 'DjVu-tiedoston XML-vienti epäonnistui',
+'thumbnail_invalid_params' => 'Virheelliset parametrit pienoiskuvalle',
+'thumbnail_dest_directory' => 'Kohdehakemiston luominen ei onnistunut',
+
+# Special:Import
+'import'                     => 'Tuo sivuja',
+'importinterwiki'            => 'Tuo sivuja lähiwikeistä',
+'import-interwiki-text'      => 'Valitse wiki ja sivun nimi. Versioiden päivämäärät ja muokkaajat säilytetään. Kaikki wikienväliset tuonnit kirjataan [[Special:Log/import|tuontilokiin]].',
+'import-interwiki-history'   => 'Kopioi sivun koko historia',
+'import-interwiki-submit'    => 'Tuo',
+'import-interwiki-namespace' => 'Siirrä nimiavaruuteen:',
+'importtext'                 => 'Vie sivuja lähdewikistä käyttäen [[Special:Export|vienti]]-työkalua. Tallenna tiedot koneellesi ja tallenna ne täällä.',
+'importstart'                => 'Tuodaan sivuja...',
+'import-revision-count'      => '$1 {{PLURAL:$1|versio|versiota}}',
+'importnopages'              => 'Ei tuotavia sivuja.',
+'importfailed'               => 'Tuonti epäonnistui: $1',
+'importunknownsource'        => 'Tuntematon lähdetyyppi',
+'importcantopen'             => 'Tuontitiedoston avaus epäonnistui',
+'importbadinterwiki'         => 'Kelpaamaton wikienvälinen linkki',
+'importnotext'               => 'Tyhjä tai ei tekstiä',
+'importsuccess'              => 'Tuonti onnistui!',
+'importhistoryconflict'      => 'Sivusta on olemassa tuonnin kanssa ristiriitainen muokkausversio. Tämä sivu on saatettu tuoda jo aikaisemmin.',
+'importnosources'            => 'Wikienvälisiä tuontilähteitä ei ole määritelty ja suorat historiatallennukset on poistettu käytöstä.',
+'importnofile'               => 'Mitään tuotavaa tiedostoa ei lähetetty.',
+'importuploaderror'          => 'Tiedoston lähettäminen epäonnistui. Tiedosto saattaa olla liian suuri.',
+
+# Import log
+'importlogpage'                    => 'Tuontiloki',
+'importlogpagetext'                => 'Loki toisista wikeistä tuoduista sivuista.',
+'import-logentry-upload'           => 'toi sivun ”[[$1]]” lähettämällä tiedoston',
+'import-logentry-upload-detail'    => '$1 versio(ta)',
+'import-logentry-interwiki'        => 'toi toisesta wikistä sivun ”$1”',
+'import-logentry-interwiki-detail' => '$1 versio(ta) sivusta $2',
+
+# Keyboard access keys for power users
+'accesskey-ca-nstab-project' => 'c',
+
+# Tooltip help for the actions
+'tooltip-pt-userpage'             => 'Oma käyttäjäsivu',
+'tooltip-pt-anonuserpage'         => 'IP-osoitteesi käyttäjäsivu',
+'tooltip-pt-mytalk'               => 'Oma keskustelusivu',
+'tooltip-pt-anontalk'             => 'Keskustelu tämän IP-osoitteen muokkauksista',
+'tooltip-pt-preferences'          => 'Omat asetukset',
+'tooltip-pt-watchlist'            => 'Lista sivuista, joiden muokkauksia tarkkailet',
+'tooltip-pt-mycontris'            => 'Lista omista muokkauksista',
+'tooltip-pt-login'                => 'Kirjaudu sisään tai luo tunnus',
+'tooltip-pt-anonlogin'            => 'Kirjaudu sisään tai luo tunnus',
+'tooltip-pt-logout'               => 'Kirjaudu ulos',
+'tooltip-ca-talk'                 => 'Keskustele sisällöstä',
+'tooltip-ca-edit'                 => 'Muokkaa tätä sivua',
+'tooltip-ca-addsection'           => 'Lisää kommentti tälle sivulle',
+'tooltip-ca-viewsource'           => 'Näytä sivun lähdekoodi',
+'tooltip-ca-history'              => 'Sivun aikaisemmat versiot',
+'tooltip-ca-protect'              => 'Suojaa tämä sivu',
+'tooltip-ca-delete'               => 'Poista tämä sivu',
+'tooltip-ca-undelete'             => 'Palauta tämä sivu',
+'tooltip-ca-move'                 => 'Siirrä tämä sivu',
+'tooltip-ca-watch'                => 'Lisää tämä sivu tarkkailulistallesi',
+'tooltip-ca-unwatch'              => 'Poista tämä sivu tarkkailulistaltasi',
+'tooltip-search'                  => 'Etsi {{GRAMMAR:elative|{{SITENAME}}}}',
+'tooltip-p-logo'                  => 'Etusivu',
+'tooltip-n-mainpage'              => 'Mene etusivulle',
+'tooltip-n-portal'                => 'Keskustelua projektista',
+'tooltip-n-currentevents'         => 'Taustatietoa tämänhetkisistä tapahtumista',
+'tooltip-n-recentchanges'         => 'Lista tuoreista muutoksista',
+'tooltip-n-randompage'            => 'Avaa satunnainen sivu',
+'tooltip-n-help'                  => 'Ohjeita',
+'tooltip-n-sitesupport'           => 'Tue sivuston toimintaa',
+'tooltip-t-whatlinkshere'         => 'Lista sivuista, jotka viittavat tänne',
+'tooltip-t-recentchangeslinked'   => 'Viimeisimmät muokkaukset sivuissa, joille viitataan tältä sivulta',
+'tooltip-feed-rss'                => 'RSS-syöte tälle sivulle',
+'tooltip-feed-atom'               => 'Atom-syöte tälle sivulle',
+'tooltip-t-contributions'         => 'Näytä lista tämän käyttäjän muokkauksista',
+'tooltip-t-emailuser'             => 'Lähetä sähköpostia tälle käyttäjälle',
+'tooltip-t-upload'                => 'Lisää kuvia tai muita mediatiedostoja',
+'tooltip-t-specialpages'          => 'Näytä toimintosivut',
+'tooltip-ca-nstab-main'           => 'Näytä sisältösivu',
+'tooltip-ca-nstab-user'           => 'Näytä käyttäjäsivu',
+'tooltip-ca-nstab-media'          => 'Näytä mediasivu',
+'tooltip-ca-nstab-special'        => 'Tämä on toimintosivu',
+'tooltip-ca-nstab-project'        => 'Näytä projektisivu',
+'tooltip-ca-nstab-image'          => 'Näytä tiedostosivu',
+'tooltip-ca-nstab-mediawiki'      => 'Näytä järjestelmäviesti',
+'tooltip-ca-nstab-template'       => 'Näytä malline',
+'tooltip-ca-nstab-help'           => 'Näytä ohjesivu',
+'tooltip-ca-nstab-category'       => 'Näytä luokkasivu',
+'tooltip-minoredit'               => 'Merkitse tämä pieneksi muutokseksi',
+'tooltip-save'                    => 'Tallenna muokkaukset',
+'tooltip-preview'                 => 'Esikatsele muokkausta ennen tallennusta',
+'tooltip-diff'                    => 'Näytä tehdyt muutokset',
+'tooltip-compareselectedversions' => 'Vertaile valittuja versioita',
+'tooltip-watch'                   => 'Lisää tämä sivu tarkkailulistaan',
+'tooltip-recreate'                => 'Luo sivu uudelleen',
+
+# Stylesheets
+'common.css'   => '/* Tämä sivu sisältää koko sivustoa muuttavia tyylejä. */',
+'monobook.css' => '/* Tämä sivu sisältää Monobook-ulkoasua muuttavia tyylejä. */',
+
+# Scripts
+'common.js'   => '/* Tämän sivun koodi liitetään jokaiseen sivulataukseen */',
+'monobook.js' => '/* Deprecated; use [[MediaWiki:common.js]] */',
+
+# Metadata
+'nodublincore'      => 'Dublin Core RDF-metatieto on poissa käytöstä tällä palvelimella.',
+'nocreativecommons' => 'Creative Commonsin RDF-metatieto on poissa käytöstä tällä palvelimella.',
+'notacceptable'     => 'Wikipalvelin ei voi näyttää tietoja muodossa, jota ohjelmasi voisi lukea.',
+
+# Attribution
+'anonymous'        => '{{GRAMMAR:genitive|{{SITENAME}}}} anonyymit käyttäjät',
+'siteuser'         => '{{GRAMMAR:genitive|{{SITENAME}}}} käyttäjä $1',
+'lastmodifiedatby' => 'Tätä sivua muokkasi viimeksi ”$3” $2 kello $1.', # $1 date, $2 time, $3 user
+'and'              => 'ja',
+'othercontribs'    => 'Perustuu työlle, jonka teki $1.',
+'others'           => 'muut',
+'siteusers'        => '{{GRAMMAR:genitive|{{SITENAME}}}} käyttäjä(t) $1',
+'creditspage'      => 'Sivun tekijäluettelo',
+'nocredits'        => 'Tämän sivun tekijäluettelotietoja ei löydy.',
+
+# Spam protection
+'spamprotectiontitle'    => 'Mainossuodatin',
+'spamprotectiontext'     => 'Mainossuodatin on estänyt sivun tallentamisen. Syynä on todennäköisimmin {{GRAMMAR:genitive|{{SITENAME}}}} ulkopuolelle osoittava linkki.',
+'spamprotectionmatch'    => 'Teksti, joka ei läpäissyt mainossuodatinta: $1',
+'subcategorycount'       => 'Tällä luokalla on {{PLURAL:$1|yksi alaluokka|$1 alaluokkaa}}.',
+'categoryarticlecount'   => 'Tässä luokassa on {{PLURAL:$1|yksi sivu|$1 sivua}}.',
+'category-media-count'   => 'Tässä luokassa on {{PLURAL:$1|yksi tiedosto|$1 tiedostoa}}.',
+'listingcontinuesabbrev' => ' jatkuu',
+'spambot_username'       => 'MediaWikin mainospoistaja',
+'spam_reverting'         => 'Palautettu viimeisimpään versioon, joka ei sisällä linkkejä kohteeseen $1.',
+'spam_blanking'          => 'Kaikki versiot sisälsivät linkkejä kohteeseen $1. Sivu tyhjennety.',
+
+# Info page
+'infosubtitle'   => 'Tietoja sivusta',
+'numedits'       => 'Sivun muokkausten määrä: $1',
+'numtalkedits'   => 'Keskustelusivun muokkausten määrä: $1',
+'numwatchers'    => 'Tarkkailijoiden määrä: $1',
+'numauthors'     => 'Sivun erillisten kirjoittajien määrä: $1',
+'numtalkauthors' => 'Keskustelusivun erillisten kirjoittajien määrä: $1',
+
+# Math options
+'mw_math_png'    => 'Näytä aina PNG:nä',
+'mw_math_simple' => 'Näytä HTML:nä, jos yksinkertainen, muuten PNG:nä',
+'mw_math_html'   => 'Näytä HTML:nä, jos mahdollista, muuten PNG:nä',
+'mw_math_source' => 'Näytä TeX-muodossa (tekstiselaimille)',
+'mw_math_modern' => 'Suositus nykyselaimille',
+'mw_math_mathml' => 'Näytä MathML:nä jos mahdollista (kokeellinen)',
+
+# Patrolling
+'markaspatrolleddiff'                 => 'Merkitse tarkastetuksi',
+'markaspatrolledtext'                 => 'Merkitse muokkaus tarkastetuksi',
+'markedaspatrolled'                   => 'Tarkastettu',
+'markedaspatrolledtext'               => 'Valittu versio on tarkastettu.',
+'rcpatroldisabled'                    => 'Tuoreiden muutosten tarkastustoiminto ei ole käytössä',
+'rcpatroldisabledtext'                => 'Tuoreiden muutosten tarkastustoiminto ei ole käytössä.',
+'markedaspatrollederror'              => 'Muutoksen merkitseminen tarkastetuksi epäonnistui.',
+'markedaspatrollederrortext'          => 'Tarkastetuksi merkittävää versiota ei ole määritelty.',
+'markedaspatrollederror-noautopatrol' => 'Et voi merkitä omia muutoksiasi tarkastetuiksi.',
+
+# Patrol log
+'patrol-log-page' => 'Muutostentarkastusloki',
+'patrol-log-line' => 'merkitsi sivun $2 muutoksen $1 tarkastetuksi $3',
+'patrol-log-auto' => '(automaattinen)',
+'patrol-log-diff' => 'r$1',
+
+# Image deletion
+'deletedrevision' => 'Poistettiin vanha versio $1.',
+
+# Browsing diffs
+'previousdiff' => '← Edellinen muutos',
+'nextdiff'     => 'Seuraava muutos →',
+
+# Media information
+'mediawarning'         => "'''Varoitus''': Tämä tiedosto saattaa sisältää vahingollista koodia, ja suorittamalla sen järjestelmäsi voi muuttua epäluotettavaksi.<hr />",
+'imagemaxsize'         => 'Rajoita kuvien koko kuvien kuvaussivuilla arvoon:',
+'thumbsize'            => 'Pikkukuvien koko:',
+'file-info'            => '$1, MIME-tyyppi: $2',
+'file-info-size'       => '($1×$2 px, $3, MIME-tyyppi: $4)',
+'file-nohires'         => '<small>Tarkempaa kuvaa ei ole saatavilla.</small>',
+'file-svg'             => '<small>Tämä tiedosto on häviötön skaalautuva vektorigrafiikka. Peruskoko: $1×$2 px.</small>',
+'show-big-image'       => 'Korkeatarkkuuksinen versio',
+'show-big-image-thumb' => '<small>Esikatselun koko: $1×$2 px</small>',
+
+'newimages'    => 'Uudet kuvat',
+'showhidebots' => '($1 botit)',
+'noimages'     => 'Ei uusia kuvia.',
+
+'passwordtooshort' => 'Salasanasi on ei kelpaa. Salasanan pitää olla vähintään $1 merkkiä pitkä ja eri kuin käyttäjätunnuksesi.',
+
+# Metadata
+'metadata'          => 'Sisältökuvaukset',
+'metadata-help'     => 'Tämä tiedosto sisältää esimerkiksi kuvanlukijan, digikameran tai kuvankäsittelyohjelman lisäämiä lisätietoja. Kaikki tiedot eivät enää välttämättä vastaa todellisuutta, jos kuvaa on muokattu sen alkuperäisen luonnin jälkeen.',
+'metadata-expand'   => 'Näytä kaikki sisältökuvaukset',
+'metadata-collapse' => 'Näytä vain tärkeimmät sisältökuvaukset',
+'metadata-fields'   => 'Seuraavat kentät ovat esillä kuvasivulla, kun sisältötietotaulukko on pienennettynä.
+* make
+* model
+* datetimeoriginal
+* exposuretime
+* fnumber
+* focallength',
+
+# EXIF tags
+'exif-imagewidth'                  => 'Leveys',
+'exif-imagelength'                 => 'Korkeus',
+'exif-bitspersample'               => 'Bittiä komponentissa',
+'exif-compression'                 => 'Pakkaustapa',
+'exif-photometricinterpretation'   => 'Kuvapisteen koostumus',
+'exif-orientation'                 => 'Suunta',
+'exif-samplesperpixel'             => 'Komponenttien lukumäärä',
+'exif-planarconfiguration'         => 'Tiedon järjestely',
+'exif-ycbcrsubsampling'            => 'Y:n ja C:n alinäytteistyssuhde',
+'exif-ycbcrpositioning'            => 'Y:n ja C:n asemointi',
+'exif-xresolution'                 => 'Kuvan resoluutio leveyssuunnassa',
+'exif-yresolution'                 => 'Kuvan resoluutio korkeussuunnassa',
+'exif-resolutionunit'              => 'Resoluution yksikkö X- ja Y-suunnassa',
+'exif-stripoffsets'                => 'Kuvatiedon sijainti',
+'exif-rowsperstrip'                => 'Kaistan rivien lukumäärä',
+'exif-stripbytecounts'             => 'Tavua pakatussa kaistassa',
+'exif-jpeginterchangeformat'       => 'Etäisyys JPEG SOI:hin',
+'exif-jpeginterchangeformatlength' => 'JPEG-tiedon tavujen lukumäärä',
+'exif-transferfunction'            => 'Siirtofunktio',
+'exif-whitepoint'                  => 'Valkoisen pisteen väriarvot',
+'exif-primarychromaticities'       => 'Päävärien väriarvot',
+'exif-ycbcrcoefficients'           => 'Väriavaruuden muuntomatriisin kertoimet',
+'exif-referenceblackwhite'         => 'Musta-valkoparin vertailuarvot',
+'exif-datetime'                    => 'Viimeksi muokattu',
+'exif-imagedescription'            => 'Kuvan nimi',
+'exif-make'                        => 'Kameran valmistaja',
+'exif-model'                       => 'Kameran malli',
+'exif-software'                    => 'Käytetty ohjelmisto',
+'exif-artist'                      => 'Tekijä',
+'exif-copyright'                   => 'Tekijänoikeuden omistaja',
+'exif-exifversion'                 => 'Exif-versio',
+'exif-flashpixversion'             => 'Tuettu Flashpix-versio',
+'exif-colorspace'                  => 'Väriavaruus',
+'exif-componentsconfiguration'     => 'Kunkin komponentin määritelmä',
+'exif-compressedbitsperpixel'      => 'Kuvan pakkaustapa',
+'exif-pixelydimension'             => 'Käyttökelpoinen kuvan leveys',
+'exif-pixelxdimension'             => 'Käyttökelpoinen kuvan korkeus',
+'exif-makernote'                   => 'Valmistajan merkinnät',
+'exif-usercomment'                 => 'Käyttäjän kommentit',
+'exif-relatedsoundfile'            => 'Liitetty äänitiedosto',
+'exif-datetimeoriginal'            => 'Luontipäivämäärä',
+'exif-datetimedigitized'           => 'Digitointipäivämäärä',
+'exif-subsectime'                  => 'Aikaleiman sekunninosat',
+'exif-subsectimeoriginal'          => 'Luontiaikaleiman sekunninosat',
+'exif-subsectimedigitized'         => 'Digitointiaikaleiman sekunninosat',
+'exif-exposuretime'                => 'Valotusaika',
+'exif-exposuretime-format'         => '$1 s ($2)',
+'exif-fnumber'                     => 'Aukkosuhde',
+'exif-fnumber-format'              => 'f/$1',
+'exif-exposureprogram'             => 'Valotusohjelma',
+'exif-spectralsensitivity'         => 'Värikirjoherkkyys',
+'exif-isospeedratings'             => 'Herkkyys (ISO)',
+'exif-oecf'                        => 'Optoelektroninen muuntokerroin',
+'exif-shutterspeedvalue'           => 'Suljinaika',
+'exif-aperturevalue'               => 'Aukko',
+'exif-brightnessvalue'             => 'Kirkkaus',
+'exif-exposurebiasvalue'           => 'Valotuksen korjaus',
+'exif-maxaperturevalue'            => 'Suurin aukko',
+'exif-subjectdistance'             => 'Kohteen etäisyys',
+'exif-meteringmode'                => 'Mittaustapa',
+'exif-lightsource'                 => 'Valolähde',
+'exif-flash'                       => 'Salama',
+'exif-focallength'                 => 'Linssin polttoväli',
+'exif-focallength-format'          => '$1 mm',
+'exif-subjectarea'                 => 'Kohteen ala',
+'exif-flashenergy'                 => 'Salaman teho',
+'exif-spatialfrequencyresponse'    => 'Tilataajuusvaste',
+'exif-focalplanexresolution'       => 'Tarkennustason X-resoluutio',
+'exif-focalplaneyresolution'       => 'Tarkennustason Y-resoluutio',
+'exif-focalplaneresolutionunit'    => 'Tarkennustason resoluution yksikkö',
+'exif-subjectlocation'             => 'Kohteen sijainti',
+'exif-exposureindex'               => 'Valotusindeksi',
+'exif-sensingmethod'               => 'Mittausmenetelmä',
+'exif-filesource'                  => 'Tiedostolähde',
+'exif-scenetype'                   => 'Kuvatyyppi',
+'exif-cfapattern'                  => 'CFA-kuvio',
+'exif-customrendered'              => 'Muokattu kuvankäsittely',
+'exif-exposuremode'                => 'Valotustapa',
+'exif-whitebalance'                => 'Valkotasapaino',
+'exif-digitalzoomratio'            => 'Digitaalinen suurennoskerroin',
+'exif-focallengthin35mmfilm'       => '35 mm:n filmiä vastaava polttoväli',
+'exif-scenecapturetype'            => 'Kuvan kaappaustapa',
+'exif-gaincontrol'                 => 'Kuvasäätö',
+'exif-contrast'                    => 'Kontrasti',
+'exif-saturation'                  => 'Värikylläisyys',
+'exif-sharpness'                   => 'Terävyys',
+'exif-devicesettingdescription'    => 'Laitteen asetuskuvaus',
+'exif-subjectdistancerange'        => 'Kohteen etäisyysväli',
+'exif-imageuniqueid'               => 'Kuvan yksilöivä tunniste',
+'exif-gpsversionid'                => 'GPS-muotoilukoodin versio',
+'exif-gpslatituderef'              => 'Pohjoinen tai eteläinen leveysaste',
+'exif-gpslatitude'                 => 'Leveysaste',
+'exif-gpslongituderef'             => 'Itäinen tai läntinen pituusaste',
+'exif-gpslongitude'                => 'Pituusaste',
+'exif-gpsaltituderef'              => 'Korkeuden vertailukohta',
+'exif-gpsaltitude'                 => 'Korkeus',
+'exif-gpstimestamp'                => 'GPS-aika (atomikello)',
+'exif-gpssatellites'               => 'Mittaukseen käytetyt satelliitit',
+'exif-gpsstatus'                   => 'Vastaanottimen tila',
+'exif-gpsmeasuremode'              => 'Mittaustila',
+'exif-gpsdop'                      => 'Mittatarkkuus',
+'exif-gpsspeedref'                 => 'Nopeuden yksikkö',
+'exif-gpsspeed'                    => 'GPS-vastaanottimen nopeus',
+'exif-gpstrackref'                 => 'Liikesuunnan vertailukohta',
+'exif-gpstrack'                    => 'Liikesuunta',
+'exif-gpsimgdirectionref'          => 'Kuvan suunnan vertailukohta',
+'exif-gpsimgdirection'             => 'Kuvan suunta',
+'exif-gpsmapdatum'                 => 'Käytetty geodeettinen maanmittaustieto',
+'exif-gpsdestlatituderef'          => 'Loppupisteen leveysasteen vertailukohta',
+'exif-gpsdestlatitude'             => 'Loppupisteen leveysaste',
+'exif-gpsdestlongituderef'         => 'Loppupisteen pituusasteen vertailukohta',
+'exif-gpsdestlongitude'            => 'Loppupisteen pituusaste',
+'exif-gpsdestbearingref'           => 'Loppupisteen suuntiman vertailukohta',
+'exif-gpsdestbearing'              => 'Loppupisteen suuntima',
+'exif-gpsdestdistanceref'          => 'Loppupisteen etäisyyden vertailukohta',
+'exif-gpsdestdistance'             => 'Loppupisteen etäisyys',
+'exif-gpsprocessingmethod'         => 'GPS-käsittelymenetelmän nimi',
+'exif-gpsareainformation'          => 'GPS-alueen nimi',
+'exif-gpsdatestamp'                => 'GPS-päivämäärä',
+'exif-gpsdifferential'             => 'GPS-differentiaalikorjaus',
+
+# EXIF attributes
+'exif-compression-1' => 'Pakkaamaton',
+'exif-compression-6' => 'JPEG',
+
+'exif-photometricinterpretation-2' => 'RGB',
+'exif-photometricinterpretation-6' => 'YCbCr',
+
+'exif-unknowndate' => 'Tuntematon päiväys',
+
+'exif-orientation-1' => 'Normaali', # 0th row: top; 0th column: left
+'exif-orientation-2' => 'Käännetty vaakasuunnassa', # 0th row: top; 0th column: right
+'exif-orientation-3' => 'Käännetty 180°', # 0th row: bottom; 0th column: right
+'exif-orientation-4' => 'Käännetty pystysuunnassa', # 0th row: bottom; 0th column: left
+'exif-orientation-5' => 'Käännetty 90° vastapäivään ja pystysuunnassa', # 0th row: left; 0th column: top
+'exif-orientation-6' => 'Käännetty 90° myötäpäivään', # 0th row: right; 0th column: top
+'exif-orientation-7' => 'Käännetty 90° myötäpäivään ja pystysuunnassa', # 0th row: right; 0th column: bottom
+'exif-orientation-8' => 'Käännetty 90° vastapäivään', # 0th row: left; 0th column: bottom
+
+'exif-planarconfiguration-1' => 'chunky format',
+'exif-planarconfiguration-2' => 'planar format',
+
+'exif-xyresolution-i' => '$1 dpi',
+'exif-xyresolution-c' => '$1 dpc',
+
+'exif-colorspace-1'      => 'sRGB',
+'exif-colorspace-ffff.h' => 'FFFF.H',
+
+'exif-componentsconfiguration-0' => 'ei ole',
+'exif-componentsconfiguration-1' => 'Y',
+'exif-componentsconfiguration-2' => 'Cb',
+'exif-componentsconfiguration-3' => 'Cr',
+'exif-componentsconfiguration-4' => 'R',
+'exif-componentsconfiguration-5' => 'G',
+'exif-componentsconfiguration-6' => 'B',
+
+'exif-exposureprogram-0' => 'Ei määritelty',
+'exif-exposureprogram-1' => 'Käsinsäädetty',
+'exif-exposureprogram-2' => 'Perusohjelma',
+'exif-exposureprogram-3' => 'Aukon etuoikeus',
+'exif-exposureprogram-4' => 'Suljinajan etuoikeus',
+'exif-exposureprogram-5' => 'Luova ohjelma (painotettu syvyysterävyyttä)',
+'exif-exposureprogram-6' => 'Toimintaohjelma (painotettu nopeaa suljinaikaa)',
+'exif-exposureprogram-7' => 'Muotokuvatila (lähikuviin, joissa tausta on epätarkka)',
+'exif-exposureprogram-8' => 'Maisematila (maisemakuviin, joissa tausta on tarkka)',
+
+'exif-subjectdistance-value' => '$1 metriä',
+
+'exif-meteringmode-0'   => 'Tuntematon',
+'exif-meteringmode-1'   => 'Keskiarvo',
+'exif-meteringmode-2'   => 'Keskustapainotteinen keskiarvo',
+'exif-meteringmode-3'   => 'Piste',
+'exif-meteringmode-4'   => 'Monipiste',
+'exif-meteringmode-5'   => 'Kuvio',
+'exif-meteringmode-6'   => 'Osittainen',
+'exif-meteringmode-255' => 'Muu',
+
+'exif-lightsource-0'   => 'Tuntematon',
+'exif-lightsource-1'   => 'Päivänvalo',
+'exif-lightsource-2'   => 'Loisteputki',
+'exif-lightsource-3'   => 'Hehkulamppu (keinovalo)',
+'exif-lightsource-4'   => 'Salama',
+'exif-lightsource-9'   => 'Hyvä sää',
+'exif-lightsource-10'  => 'Pilvinen sää',
+'exif-lightsource-11'  => 'Varjoinen',
+'exif-lightsource-12'  => 'Päivänvaloloisteputki (D 5700 – 7100K)',
+'exif-lightsource-13'  => 'Päivänvalkoinen loisteputki (N 4600 – 5400K)',
+'exif-lightsource-14'  => 'Kylmä valkoinen loisteputki (W 3900 – 4500K)',
+'exif-lightsource-15'  => 'Valkoinen loisteputki (WW 3200 – 3700K)',
+'exif-lightsource-17'  => 'Oletusvalo A',
+'exif-lightsource-18'  => 'Oletusvalo B',
+'exif-lightsource-19'  => 'Oletusvalo C',
+'exif-lightsource-20'  => 'D55',
+'exif-lightsource-21'  => 'D65',
+'exif-lightsource-22'  => 'D75',
+'exif-lightsource-23'  => 'D50',
+'exif-lightsource-24'  => 'ISO-studiohehkulamppu',
+'exif-lightsource-255' => 'Muu valonlähde',
+
+'exif-focalplaneresolutionunit-2' => 'tuumaa',
+
+'exif-sensingmethod-1' => 'Määrittelemätön',
+'exif-sensingmethod-2' => 'Yksisiruinen värikenno',
+'exif-sensingmethod-3' => 'Kaksisiruinen värikenno',
+'exif-sensingmethod-4' => 'Kolmisiruinen värikenno',
+'exif-sensingmethod-5' => 'Sarjavärikenno',
+'exif-sensingmethod-7' => 'Trilineaarikenno',
+'exif-sensingmethod-8' => 'Sarjalineaarivärikenno',
+
+'exif-filesource-3' => 'DSC',
+
+'exif-scenetype-1' => 'Suoraan valokuvattu kuva',
+
+'exif-customrendered-0' => 'Normaali käsittely',
+'exif-customrendered-1' => 'Muokattu käsittely',
+
+'exif-exposuremode-0' => 'Automaattinen valotus',
+'exif-exposuremode-1' => 'Käsinsäädetty valotus',
+'exif-exposuremode-2' => 'Automaattinen haarukointi',
+
+'exif-whitebalance-0' => 'Automaattinen valkotasapaino',
+'exif-whitebalance-1' => 'Käsinsäädetty valkotasapaino',
+
+'exif-scenecapturetype-0' => 'Perus',
+'exif-scenecapturetype-1' => 'Maisema',
+'exif-scenecapturetype-2' => 'Henkilökuva',
+'exif-scenecapturetype-3' => 'Yökuva',
+
+'exif-gaincontrol-0' => 'Ei ole',
+'exif-gaincontrol-1' => 'Matala ylävahvisus',
+'exif-gaincontrol-2' => 'Korkea ylävahvistus',
+'exif-gaincontrol-3' => 'Matala alavahvistus',
+'exif-gaincontrol-4' => 'Korkea alavahvistus',
+
+'exif-contrast-0' => 'Normaali',
+'exif-contrast-1' => 'Pehmeä',
+'exif-contrast-2' => 'Kova',
+
+'exif-saturation-0' => 'Normaali',
+'exif-saturation-1' => 'Alhainen värikylläisyys',
+'exif-saturation-2' => 'Korkea värikylläisyys',
+
+'exif-sharpness-0' => 'Normaali',
+'exif-sharpness-1' => 'Pehmeä',
+'exif-sharpness-2' => 'Kova',
+
+'exif-subjectdistancerange-0' => 'Tuntematon',
+'exif-subjectdistancerange-1' => 'Makro',
+'exif-subjectdistancerange-2' => 'Lähikuva',
+'exif-subjectdistancerange-3' => 'Kaukokuva',
+
+# Pseudotags used for GPSLatitudeRef and GPSDestLatitudeRef
+'exif-gpslatitude-n' => 'Pohjoista leveyttä',
+'exif-gpslatitude-s' => 'Eteläistä leveyttä',
+
+# Pseudotags used for GPSLongitudeRef and GPSDestLongitudeRef
+'exif-gpslongitude-e' => 'Itäistä pituutta',
+'exif-gpslongitude-w' => 'Läntistä pituutta',
+
+'exif-gpsstatus-a' => 'Mittaus käynnissä',
+'exif-gpsstatus-v' => 'Ristiinmittaus',
+
+'exif-gpsmeasuremode-2' => '2-ulotteinen mittaus',
+'exif-gpsmeasuremode-3' => '3-ulotteinen mittaus',
+
+# Pseudotags used for GPSSpeedRef and GPSDestDistanceRef
+'exif-gpsspeed-k' => 'km/h',
+'exif-gpsspeed-m' => 'mailia tunnissa',
+'exif-gpsspeed-n' => 'solmua',
+
+# Pseudotags used for GPSTrackRef, GPSImgDirectionRef and GPSDestBearingRef
+'exif-gpsdirection-t' => 'Todellinen suunta',
+'exif-gpsdirection-m' => 'Magneettinen suunta',
+
+# External editor support
+'edit-externally'      => 'Muokkaa tätä tiedostoa ulkoisessa sovelluksessa',
+'edit-externally-help' => 'Katso [http://meta.wikimedia.org/wiki/Help:External_editors ohjeet], jos haluat lisätietoja.',
+
+# 'all' in various places, this might be different for inflected languages
+'recentchangesall' => 'kaikki',
+'imagelistall'     => 'kaikki',
+'watchlistall1'    => 'kaikkia',
+'watchlistall2'    => ', koko historia',
+'namespacesall'    => 'kaikki',
+
+# E-mail address confirmation
+'confirmemail'            => 'Varmenna sähköpostiosoite',
+'confirmemail_noemail'    => 'Sinulla ei ole kelvollista sähköpostiosoitetta [[Special:Preferences|asetuksissasi]].',
+'confirmemail_text'       => 'Tämä wiki vaatii sähköpostiosoitteen varmentamisen, ennen kuin voit käyttää sähköpostitoimintoja. Lähetä alla olevasta painikkeesta varmennusviesti osoitteeseesi. Viesti sisältää linkin, jonka avaamalla varmennat sähköpostiosoitteesi.',
+'confirmemail_pending'    => '<div class="error">Varmennusviesti on jo lähetetty. Jos loit tunnuksen äskettäin, odota muutama minuutti viestin saapumista, ennen kuin yrität uudelleen.</div>',
+'confirmemail_send'       => 'Lähetä varmennusviesti',
+'confirmemail_sent'       => 'Varmennusviesti lähetetty.',
+'confirmemail_oncreate'   => 'Varmennusviesti lähetettiin sähköpostiosoitteeseesi. Varmennuskoodia ei tarvita sisäänkirjautumiseen, mutta se täytyy antaa, ennen kuin voit käyttää sähköpostitoimintoja tässä wikissä.',
+'confirmemail_sendfailed' => 'Varmennusviestin lähettäminen epäonnistui. Tarkista, onko osoitteessa kiellettyjä merkkejä.
+
+Postitusohjelma palautti: $1',
+'confirmemail_invalid'    => 'Varmennuskoodi ei kelpaa. Koodi on voinut vanhentua.',
+'confirmemail_needlogin'  => 'Sinun täytyy $1, jotta voisit varmistaa sähköpostiosoitteesi.',
+'confirmemail_success'    => 'Sähköpostiosoitteesi on nyt varmennettu. Voit kirjautua sisään.',
+'confirmemail_loggedin'   => 'Sähköpostiosoitteesi on nyt varmennettu.',
+'confirmemail_error'      => 'Jokin epäonnistui varmennnuksen tallentamisessa.',
+'confirmemail_subject'    => '{{GRAMMAR:genitive|{{SITENAME}}}} sähköpostiosoitteen varmennus',
+'confirmemail_body'       => 'Joku IP-osoitteesta $1 on rekisteröinyt {{GRAMMAR:inessive|{{SITENAME}}}} tunnuksen $2 tällä sähköpostiosoitteella.
+
+Varmenna, että tämä tunnus kuuluu sinulle avamaalla seuraava linkki selaimellasi:
+
+$3
+
+Jos tämä tunnus ei ole sinun, ÄLÄ seuraa linkkiä. Varmennuskoodi vanhenee $4.',
+
+# Inputbox extension, may be useful in other contexts as well
+'tryexact'       => 'Yritä tarkkaa osumaa',
+'searchfulltext' => 'Etsi koko tekstiä',
+'createarticle'  => 'Luo sivu',
+
+# Scary transclusion
+'scarytranscludedisabled' => '[Wikienvälinen sisällytys ei ole käytössä]',
+'scarytranscludefailed'   => '[Mallineen hakeminen epäonnistui: $1]',
+'scarytranscludetoolong'  => '[Verkko-osoite on liian pitkä]',
+
+# Trackbacks
+'trackbackbox'      => '<div id="mw_trackbacks">Artikkelin trackbackit:<br />$1</div>',
+'trackbackremove'   => ' ([$1 poista])',
+'trackbacklink'     => 'Trackback',
+'trackbackdeleteok' => 'Trackback poistettiin.',
+
+# Delete conflict
+'deletedwhileediting' => "<center>'''Varoitus''': Tämä sivu on poistettu sen jälkeen, kun aloitit sen muokkaamisen!</center>",
+'confirmrecreate'     => "Käyttäjä '''[[User:$1|$1]]''' ([[User_talk:$1|keskustelu]]) poisti sivun sen jälkeen, kun aloit muokata sitä. Syy oli:
+: ''$2''
+Ole hyvä ja varmista, että haluat luoda sivun uudelleen.",
+'recreate'            => 'Luo uudelleen',
+
+'unit-pixel' => ' px',
+
+# HTML dump
+'redirectingto' => 'Uudelleenohjataan sivulle [[$1]]...',
+
+# action=purge
+'confirm_purge'        => 'Poistetaanko tämän sivun välimuistikopiot?
+
+$1',
+'confirm_purge_button' => 'Poista',
+
+'youhavenewmessagesmulti' => 'Sinulla on uusia viestejä sivuilla $1',
+
+'searchcontaining' => 'Etsi artikkeleita, jotka sisältävät ”$1”.',
+'searchnamed'      => 'Etsi artikkeleita, joiden nimi on ”$1”.',
+'articletitles'    => 'Artikkelit, jotka alkavat merkkijonolla ”$1”',
+'hideresults'      => 'Piilota tulokset',
+
+# DISPLAYTITLE
+'displaytitle' => '(Linkitä tämä sivu merkinnällä [[$1]])',
+
+'loginlanguagelabel' => 'Kieli: $1',
+
+# Multipage image navigation
+'imgmultipageprev'   => '← edellinen sivu',
+'imgmultipagenext'   => 'seuraava sivu →',
+'imgmultigo'         => 'Mene!',
+'imgmultigotopre'    => 'Mene sivulle',
+'imgmultiparseerror' => 'Kuva vaikuttaa olevan vioittunut tai väärä. {{SITENAME}} ei voi hakea listaa sivuista.',
+
+# Table pager
+'ascending_abbrev'         => 'nouseva',
+'descending_abbrev'        => 'laskeva',
+'table_pager_next'         => 'Seuraava sivu',
+'table_pager_prev'         => 'Edellinen sivu',
+'table_pager_first'        => 'Ensimmäinen sivu',
+'table_pager_last'         => 'Viimeinen sivu',
+'table_pager_limit'        => 'Näytä $1 nimikettä sivulla',
+'table_pager_limit_submit' => 'Mene',
+'table_pager_empty'        => 'Ei tuloksia',
+
+# Auto-summaries
+'autosumm-blank'   => 'Ak: Sivu tyhjennettiin',
+'autosumm-replace' => 'Ak: Sivun sisältö korvattiin sisällöllä ”$1”',
+'autoredircomment' => 'Ak: Uudelleenohjaus sivulle [[$1]]', # This should be changed to the new naming convention, but existed beforehand
+'autosumm-new'     => 'Ak: Uusi sivu: $1',
+
+# Size units
+'size-bytes'     => '$1 B',
+'size-kilobytes' => '$1 KiB',
+'size-megabytes' => '$1 MiB',
+'size-gigabytes' => '$1 GiB',
+
+# Live preview
+'livepreview-loading' => 'Ladataan…',
+'livepreview-ready'   => 'Ladataan… Valmis!',
+'livepreview-failed'  => 'Pikaesikatselu epäonnistui!
+Yritä normaalia esikatselua.',
+'livepreview-error'   => 'Yhdistäminen epäonnistui: $1 ”$2”
+Yritä normaalia esikatselua.',
+
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesFiu_vro.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesFiu_vro.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesFiu_vro.php	(revision 1280)
@@ -0,0 +1,2023 @@
+<?php
+/** Võro (Võro)
+ *
+ * @package MediaWiki
+ * @subpackage Language
+ * @author Niklas Laxsröm
+ *
+ * Tranlators: Sulev Iva (Võrok)
+ */
+
+$fallback = 'et';
+
+$namespaceNames = array(
+	NS_MEDIA            => 'Meediä',
+	NS_SPECIAL          => 'Tallituslehekülg',
+	NS_MAIN             => '',
+	NS_TALK             => 'Arotus',
+	NS_USER             => 'Pruukja',
+	NS_USER_TALK        => 'Pruukja_arotus',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK     => '$1_arotus',
+	NS_IMAGE            => 'Pilt',
+	NS_IMAGE_TALK       => 'Pildi_arotus',
+	NS_MEDIAWIKI        => 'MediaWiki',
+	NS_MEDIAWIKI_TALK   => 'MediaWiki_arotus',
+	NS_TEMPLATE         => 'Näüdüs',
+	NS_TEMPLATE_TALK    => 'Näüdüse_arotus',
+	NS_HELP             => 'Oppus',
+	NS_HELP_TALK        => 'Oppusõ_arotus',
+	NS_CATEGORY         => 'Katõgooria',
+	NS_CATEGORY_TALK    => 'Katõgooria_arotus'
+);
+
+$skinNames = array(
+	'standard'    => array( "Harilik" ),
+	'cologneblue' => array( "Kölni sinine" ),
+	'myskin'      => array( "Mu uma kujondus" ),
+);
+
+$magicWords = array(
+	'redirect'            => array( "0", "#redirect", "#saadaq" ),
+);
+
+$messages = array(
+# User preference toggles
+'tog-underline'               => 'Lingiq ala tõmmadaq',
+'tog-highlightbroken'         => 'Parandaq vigadsõq lingiq <a href="" class="new">nii</a> (vai nii: <a href="" class="internal">?</a>)',
+'tog-justify'                 => 'Lõiguveereq sirgõs',
+'tog-hideminor'               => 'Käkiq perämäidsin muutmiisin ärq väikuq parandusõq',
+'tog-extendwatchlist'         => 'Näütäq perräkaemisnimekirän kõiki muutuisi',
+'tog-usenewrc'                => 'Laendõduq perämädseq muutmisõq (olõ-i kõigin võrgokaejin)',
+'tog-numberheadings'          => 'Päälkirjo automaatnummõrdus',
+'tog-showtoolbar'             => 'Näütäq toimõndusõ riistakasti',
+'tog-editondblclick'          => 'Artiklidõ toimõndaminõ topõltklõpsu pääle (JavaScript)',
+'tog-editsection'             => 'Lupaq lõikõ toimõndaq [toimõndaq]-linkõga',
+'tog-editsectiononrightclick' => 'Lupaq lõikõ toimõndaq hüäpoolidsõ klõpsutusõga <br /> lõigu päälkirä pääl (JavaScript)',
+'tog-showtoc'                 => 'Näütäq sisukõrda (rohkõmb ku kolmõ vaihõpäälkiräga lehile)',
+'tog-rememberpassword'        => 'Salasõna miildejätmine tulõvaidsis kõrros',
+'tog-editwidth'               => 'Täüslakjusõga toimõnduskast',
+'tog-watchcreations'          => 'Panõq mu luuduq leheq mu perräkaemisnimekirjä',
+'tog-watchdefault'            => 'Kaeq vahtsidõ ja muudõtuidõ artiklidõ perrä',
+'tog-watchmoves'              => 'Panõq mu ümbrenõstõduq leheküleq mu perräkaemisnimekirjä',
+'tog-watchdeletion'           => 'Panõq mu kistutõduq leheküleq mu perräkaemisnimekirjä',
+'tog-minordefault'            => 'Märgiq kõik parandusõq vaikimiisi väikeisis paranduisis',
+'tog-previewontop'            => 'Näütäq proovikaehust inne, mitte perän toimõnduskasti',
+'tog-previewonfirst'          => 'Näütäq edimädse toimõndusõ aigo proovikaehust',
+'tog-nocache'                 => 'Pästku-i lehekülgi vaihõmällo',
+'tog-enotifwatchlistpages'    => 'Saadaq mullõ e-kiri, ku muq perräkaetavat lehte muudõtas',
+'tog-enotifusertalkpages'     => 'Saadaq mullõ e-kiri, ku mu arotuslehte muudõtas',
+'tog-enotifminoredits'        => 'Saadaq mullõ e-kiri ka väikeisi muutmiisi kotsilõ',
+'tog-enotifrevealaddr'        => 'Näütäq mu e-postiaadrõssit tõisilõ saadõtuin teedüssin',
+'tog-shownumberswatching'     => "Näütäq, ku pall'o pruukjit taa lehe perrä kaes",
+'tog-fancysig'                => 'Pruugiq lihtsit allkirjo (ilma lingeldä pruukjalehe pääle)',
+'tog-externaleditor'          => 'Pruugiq vaikimiisi välist tekstitoimõndajat',
+'tog-externaldiff'            => 'Pruugiq vaikimiisi välist võrrõlusprogrammi (diff)',
+'tog-showjumplinks'           => 'Panõq lehe algustõ kipõqlingiq',
+'tog-uselivepreview'          => 'Pruugiq kipõkaehust (JavaScript) (proomi)',
+'tog-forceeditsummary'        => 'Annaq teedäq, ku olõ-i kirotõt kokkovõtõt',
+'tog-watchlisthideown'        => 'Näüdäku-i perräkaemisnimekirän mu hindä toimõnduisi',
+'tog-watchlisthidebots'       => 'Näüdäku-i perräkaemisnimekirän robotidõ toimõnduisi',
+'tog-watchlisthideminor'      => 'Näüdäku-i perräkaemisnimekirän väikeisi muutmiisi',
+'tog-nolangconversion'        => 'Jätäq ärq variantõ võrrõlus',
+'tog-ccmeonemails'            => "Saadaq mullõ kopiq e-kir'ost, miä ma saada tõisilõ pruukjilõ",
+'tog-diffonly'                => 'Näüdäku-i lahkominekide lehe all lehe täüt sissu',
+
+'underline-always'  => 'Kõgõ',
+'underline-never'   => 'Ei kunagi',
+'underline-default' => 'Võrgokaeja perrä',
+
+'skinpreview' => '(Kaeminõ)',
+
+# Dates
+'sunday'        => 'pühäpäiv',
+'monday'        => 'iispäiv',
+'tuesday'       => 'tõõsõpäiv',
+'wednesday'     => 'kolmapäiv',
+'thursday'      => 'nelapäiv',
+'friday'        => 'riidi',
+'saturday'      => 'puulpäiv',
+'sun'           => 'Pü',
+'mon'           => 'I',
+'tue'           => 'T',
+'wed'           => 'K',
+'thu'           => 'N',
+'fri'           => 'R',
+'sat'           => 'Pu',
+'january'       => 'vahtsõaastakuu',
+'february'      => 'radokuu',
+'march'         => 'urbõkuu',
+'april'         => 'mahlakuu',
+'may_long'      => 'lehekuu',
+'june'          => 'piimäkuu',
+'july'          => 'hainakuu',
+'august'        => 'põimukuu',
+'september'     => 'süküskuu',
+'october'       => 'rehekuu',
+'november'      => 'märtekuu',
+'december'      => 'joulukuu',
+'january-gen'   => 'vahtsõaastakuu',
+'february-gen'  => 'radokuu',
+'march-gen'     => 'urbõkuu',
+'april-gen'     => 'mahlakuu',
+'may-gen'       => 'lehekuu',
+'june-gen'      => 'piimäkuu',
+'july-gen'      => 'hainakuu',
+'august-gen'    => 'põimukuu',
+'september-gen' => 'süküskuu',
+'october-gen'   => 'rehekuu',
+'november-gen'  => 'märtekuu',
+'december-gen'  => 'joulukuu',
+'jan'           => 'vahts',
+'feb'           => 'radok',
+'mar'           => 'urbõk',
+'apr'           => 'mahlak',
+'may'           => 'lehek',
+'jun'           => 'piimäk',
+'jul'           => 'hainak',
+'aug'           => 'põimuk',
+'sep'           => 'süküsk',
+'oct'           => 'rehek',
+'nov'           => 'märtek',
+'dec'           => 'jouluk',
+
+# Bits of text used by many pages
+'categories'            => 'Katõgooriaq',
+'pagecategories'        => '{{PLURAL:$1|Katõgooria|Katõgooriaq}}',
+'category_header'       => 'Katõgooria "$1" artikliq',
+'subcategories'         => 'Allkatõgooriaq',
+'category-media-header' => 'Kiräkotus katõgoorian "$1"',
+
+'mainpagetext'      => 'Wiki tarkvara paika säet.',
+'mainpagedocfooter' => 'Vikitarkvara pruukmisõ kotsilõ loeq mano: * [http://meta.wikimedia.org/wiki/MediaWiki_User%27s_Guide MediaWiki pruukmisoppus (inglüse keelen)]. * [http://www.mediawiki.org/wiki/Help:Configuration_settings Säädmiisi oppus (inglüse keelen)] * [http://www.mediawiki.org/wiki/Help:FAQ MediaWiki kõgõ küsütümbäq küsümiseq (inglüse keelen)] * [http://mail.wikimedia.org/mailman/listinfo/mediawiki-announce E-postilist, minka andas teedäq MediaWiki vahtsist kujõst].',
+
+'about'          => 'Pääteedüs',
+'article'        => 'Sisu',
+'newwindow'      => '(tulõ vallalõ vahtsõn aknõn)',
+'cancel'         => 'Jätäq katski',
+'qbfind'         => 'Otsiq',
+'qbbrowse'       => 'Kaeq',
+'qbedit'         => 'Toimõndaq',
+'qbpageoptions'  => 'Leheküle säädmine',
+'qbpageinfo'     => 'Leheküle teedüs',
+'qbmyoptions'    => 'Mu säädmiseq',
+'qbspecialpages' => 'Tallitusleheküleq',
+'moredotdotdot'  => 'Viil...',
+'mypage'         => 'Muq lehekülg',
+'mytalk'         => 'Mu arotus',
+'anontalk'       => 'Seo puutri võrgoaadrõsi arotus',
+'navigation'     => 'Juhtminõ',
+
+# Metadata in edit box
+'metadata_help' => 'Metateedüs:',
+
+'errorpagetitle'    => 'Viga',
+'returnto'          => 'Tagasi lehe manoq $1.',
+'tagline'           => 'Läteq: {{SITENAME}}',
+'help'              => 'Abi',
+'search'            => 'Otsiq',
+'searchbutton'      => 'Otsiq',
+'go'                => 'Mineq',
+'searcharticle'     => 'Mineq',
+'history'           => 'Artikli aolugu',
+'history_short'     => 'Aolugu',
+'updatedmarker'     => 'toimõndõt päält mu perämäst kaemist',
+'info_short'        => 'Teedüs',
+'printableversion'  => 'Trükükujo',
+'permalink'         => 'Püsülink',
+'print'             => 'Trüküq vällä',
+'edit'              => 'Toimõndaq',
+'editthispage'      => 'Toimõndaq seod artiklit',
+'delete'            => 'Kistudaq ärq',
+'deletethispage'    => 'Kistudaq seo artikli ärq',
+'undelete_short'    => 'Võtaq tagasi $1 muutmist',
+'protect'           => 'Kaidsaq',
+'protect_change'    => 'kirotuskaidsõq',
+'protectthispage'   => 'Kaidsaq seod artiklit',
+'unprotect'         => 'Kaitsku-i',
+'unprotectthispage' => 'Kaitsku-i seod artiklit',
+'newpage'           => 'Vahtsõnõ artikli',
+'talkpage'          => 'Seo artikli arotus',
+'talkpagelinktext'  => 'Arotus',
+'specialpage'       => 'Tallituslehekülg',
+'personaltools'     => 'Erätüüriistaq',
+'postcomment'       => 'Panõq kommõntaar',
+'articlepage'       => 'Artiklilehekülg',
+'talk'              => 'Arotus',
+'views'             => 'Kaemisõq',
+'toolbox'           => 'Tüüriistakast',
+'userpage'          => 'Pruukjalehekülg',
+'projectpage'       => 'Tallituslehekülg',
+'imagepage'         => 'Pildilehekülg',
+'mediawikipage'     => 'Näütäq sõnomilehekülge',
+'templatepage'      => 'Näütäq näüdüselehekülge',
+'viewhelppage'      => 'Näütäq abilehekülge',
+'categorypage'      => 'Näütäq katõgoorialehekülge',
+'viewtalkpage'      => 'Arotuslehekülg',
+'otherlanguages'    => 'Tõisin keelin',
+'redirectedfrom'    => '(Ümbre saadõt artiklist $1)',
+'redirectpagesub'   => 'Ümbresaatmislehekülg',
+'lastmodifiedat'    => 'Seo leht om viimäte muudõt $2, $1.', # $1 date, $2 time
+'viewcount'         => 'Seo lehe pääl om käüt $1 {{PLURAL:$1|kõrd|kõrda}}.',
+'protectedpage'     => 'Kaidsõt artikli',
+'jumpto'            => 'Mineq üle:',
+'jumptonavigation'  => 'juhtminõ',
+'jumptosearch'      => 'otsminõ',
+
+# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
+'aboutsite'         => '{{SITENAME}} tutvustus',
+'aboutpage'         => '{{ns:Special}}:Pääteedüs',
+'bugreports'        => 'Viateedüseq',
+'bugreportspage'    => '{{ns:Special}}:Viateedüseq',
+'copyright'         => "Teksti või vabalt pruukiq $1'i perrä.",
+'copyrightpagename' => '{{SITENAME}} ja tegijäõigusõq',
+'copyrightpage'     => '{{ns:Special}}:Tegijäõigusõq',
+'currentevents'     => 'Miä sünnüs',
+'currentevents-url' => 'Miä sünnüs',
+'disclaimers'       => 'Hoiatuisi',
+'disclaimerpage'    => '{{ns:Special}}:Üledseq hoiatusõq',
+'edithelp'          => 'Toimõndamisoppus',
+'edithelppage'      => '{{ns:Help}}:Kuis_artiklit_toimõndaq',
+'faq'               => 'KKK',
+'faqpage'           => '{{ns:Special}}:KKK',
+'helppage'          => '{{ns:Help}}:Oppus',
+'mainpage'          => 'Pääleht',
+'policy-url'        => '{{ns:project}}:Säädüseq',
+'portal'            => 'Arotusõtarõ',
+'portal-url'        => '{{ns:Special}}:Arotusõtarõ',
+'privacy'           => 'Eräteedüse kaitsminõ',
+'privacypage'       => '{{ns:project}}:Eräteedüse kaitsminõ',
+'sitesupport'       => 'Tugõminõ',
+'sitesupport-url'   => '{{ns:Special}}:Tugõminõ',
+
+'badaccess'        => 'Lubamalda tallitus',
+'badaccess-group0' => 'Sul olõ-i õigust seod tallitust tetäq.',
+'badaccess-group1' => 'Seod tallitust võivaq tetäq õnnõ rühmä $1 pruukjaq.',
+'badaccess-group2' => 'Seod tallitust saavaq tetäq õnnõ rühmi $1 liikmõq.',
+'badaccess-groups' => 'Seod tallitust saavaq tetäq õnnõ rühmä $1 liikmõq.',
+
+'versionrequired'     => 'Om vaia MediaWiki kujjo $1',
+'versionrequiredtext' => 'Seo lehe kaemisõs om vaia MediaWiki kujjo $1. Kaeq [[Special:Version|kujoteedüst]].',
+
+'ok'                  => 'Hää külh',
+'pagetitle'           => '$1 - {{SITENAME}}',
+'retrievedfrom'       => 'Vällä otsit teedüskogost "$1"',
+'youhavenewmessages'  => 'Sul om $1 ($2).',
+'newmessageslink'     => 'vahtsit sõnomiid',
+'newmessagesdifflink' => 'perämäne muutminõ',
+'editsection'         => 'toimõndaq',
+'editold'             => 'toimõndaq',
+'editsectionhint'     => 'Toimõndaq lõiku: $1',
+'toc'                 => 'Sisukõrd',
+'showtoc'             => 'näütäq',
+'hidetoc'             => 'käkiq',
+'thisisdeleted'       => 'Kaeq vai tiiq tagasi $1?',
+'viewdeleted'         => 'Näüdädäq $1?',
+'restorelink'         => 'Kistutõduid muutmiisi: $1',
+'feedlinks'           => 'Sisseandminõ:',
+'feed-invalid'        => 'Viganõ sisseandminõ.',
+
+# Short words for each namespace, by default used in the 'article' tab in monobook
+'nstab-main'      => 'Artikli',
+'nstab-user'      => 'Pruukjalehekülg',
+'nstab-media'     => 'Meediä',
+'nstab-special'   => 'Tallituslehekülg',
+'nstab-project'   => 'Nimileht',
+'nstab-image'     => 'Pilt',
+'nstab-mediawiki' => 'Teedüs',
+'nstab-template'  => 'Näüdüs',
+'nstab-help'      => 'Oppus',
+'nstab-category'  => 'Katõgooria',
+
+# Main script and global functions
+'nosuchaction'      => 'Säänest tallitust olõ-i.',
+'nosuchactiontext'  => 'Viki tunnõ-i taa aadrõsi manoq käüvät tallitust.',
+'nosuchspecialpage' => 'Säänest tallituslehekülge olõ-i.',
+'nospecialpagetext' => 'Viki tunnõ-i säänest tallituslehekülge.',
+
+# General errors
+'error'                => 'Viga',
+'databaseerror'        => 'Teedüskogo viga',
+'dberrortext'          => 'Teedüskogo perräküsümisen oll\' süntaksiviga.
+Perräküsümine oll\' viganõ (kaeq $5) vai om tarkvaran viga.
+Viimäne teedüskogo perräküsümine oll\':
+<blockquote><tt>$1</tt></blockquote>
+ja tuu tetti funktsioonist "<tt>$2</tt>".
+MySQL and\' via "<tt>$3: $4</tt>".',
+'dberrortextcl'        => 'Teedüskogo perräküsümisen oll\' süntaksiviga.
+Viimäne teedüskogo perräküsümine oll\':
+"$1"
+ja tuu tetti funktsioonist "$2".
+MySQL and\' via "$3: $4".',
+'noconnect'            => 'Wiki saa ei teedüskogoserverit $1 kätte',
+'nodb'                 => 'Saa es teedüskoko $1 kätte',
+'cachederror'          => 'Taa lehekülg om puhvõrdõt kopi ja ei pruugiq tuuperäst ollaq kõgõ värskimb.',
+'laggedslavemode'      => 'Hoiatus: Taa lehe pääl pruugi-i ollaq perämäidsi muutmiisi.',
+'readonly'             => 'Teedüskogo kirotuskaitsõ all',
+'enterlockreason'      => 'Kirodaq lukkupandmisõ põhjus ja ligikaudnõ vallalõvõtmisõ aig',
+'readonlytext'         => "Teedüskogo om kirotuskaitsõ all, arvadaq niikavvas ku tedä parandõdas.
+Kõrraldaja, kiä taa kirotuskaitsõ alaq võtt', and' sääntse selgütüse:
+<p>$1",
+'missingarticle'       => 'Lövvä es teedüskogost leheküle "$1" teksti, kuiki olõsiq pidänüq löüdmä. 
+
+<p>Hariligult om taa põhjusõs vanaslännüq sisuvaihidõ- vai aoluulink lehekülele, miä om ärq kistutõt. 
+
+<p>Ku olõ-i tegemist sääntse johtumisõga, sis või ollaq tegemist tarkvaraviaga. Annaq taast teedäq kõrraldajalõ.',
+'readonly_lag'         => 'Teedüskogo panti automaatsõhe kinniq, et kõik teedüskogoserveriq saasiq kätte kõik värskiq muutmisõq',
+'internalerror'        => 'Sisemäne viga',
+'filecopyerror'        => 'Es saaq teedüstüt "$1" teedüstüs "$2" kopidaq.',
+'filerenameerror'      => 'Es saaq teedüstüt "$1" teedüstüs "$2" ümbre nimetäq.',
+'filedeleteerror'      => 'Teedüstüt nimega "$1" saa-i ärq kistutaq.',
+'filenotfound'         => 'Lövvä es teedüstüt "$1".',
+'unexpected'           => 'Uutmaldaq väärtüs: "$1"="$2".',
+'formerror'            => 'Viga: vormi saa es pästäq',
+'badarticleerror'      => 'Taad tallitust saa ei seo leheküle pääl tetäq.',
+'cannotdelete'         => "Seod lehekülge vai pilti saa ei ärq kistutaq. (Või-ollaq kiäki tõõnõ jo kistut' taa ärq.)",
+'badtitle'             => 'Viganõ päälkiri',
+'badtitletext'         => "Küsüt artiklipäälkiri oll' kas viganõ, tühi vai sis
+võlssi näüdät kiili- vai wikidevaihõlinõ päälkiri.",
+'perfdisabled'         => "Annaq andis! Seo tallitus parhillaq ei tüütäq, selle et tä tege teedüskogo pruukmisõ pall'o aigladsõs. Programmi tävvendedäs ligembädsel aol. Või-ollaq tiit tuud esiq!",
+'perfdisabledsub'      => 'Siin om pästet kopi $1-st:', # obsolete?
+'perfcached'           => 'Järgmäne teedüs om puhvõrdõt ja pruugi ei ollaq kõgõ värskimb:',
+'perfcachedts'         => 'Järgmäne teedüs om puhvõrdõt ja om viimäte muudõt $1.',
+'querypage-no-updates' => 'Taad lehe teedüst parhilla värskis ei tetäq.',
+'wrong_wfQuery_params' => 'Võlss suurusõq tallitusõlõ wfQuery()<br />
+Tallitus: $1<br />
+Perräküsümine: $2',
+'viewsource'           => 'Kaeq lätteteksti',
+'viewsourcefor'        => 'lehele $1',
+'protectedpagetext'    => 'Taa lehekülg om kirotuskaidsõt.',
+'viewsourcetext'       => 'Võit kaiaq ja kopidaq taa lehe lättekoodi:',
+'protectedinterface'   => "Taa lehe pääl om tarkvara pruukjapalgõ tekst. Leht om lukku pant, et taad saasi-i ärq ts'urkiq.",
+'editinginterface'     => "'''Hoiatus:''' Sa toimõndat tarkvara pruukjapalgõ tekstiga lehte. Ku siin midä muudat, mõotas tuu pruukjapalõt.",
+'sqlhidden'            => '(SQL-perräküsümine käkit)',
+'cascadeprotected'     => 'Taa leht om kirotuskaidsõt, selle et taa kuulus alanolõvidõ kaidsõtuidõ lehti hulka:',
+
+# Login and logout pages
+'logouttitle'                => 'Nime alt välläminek',
+'logouttext'                 => 'Olõt nime alt vällä lännüq.
+Võit ilma nimeldä edesi toimõndaq vai minnäq sisse tõõsõ nimega.',
+'welcomecreation'            => '<h2>Tereq, $1!</h2><p>Su konto om valmis. Võit taa hindä perrä sisse säädäq.',
+'loginpagetitle'             => 'Nimega sisseminek',
+'yourname'                   => 'Pruukjanimi',
+'yourpassword'               => 'Salasõna',
+'yourpasswordagain'          => 'Kirodaq viilkõrd salasõna',
+'remembermypassword'         => 'Salasõna miildejätmine järgmäidsis kõrros',
+'yourdomainname'             => 'Võrgonimi',
+'externaldberror'            => 'Välitsen kimmästegemisteedüskogon om viga vai olõ-i sul lubat umma pruukjanimme muutaq.',
+'loginproblem'               => '<b>Es saaq sisse.</b><br />Prooviq vahtsõst!',
+'alreadyloggedin'            => '<strong>Pruukja $1, sa olõt jo nimegaq sisse lännüq!</strong><br />',
+'login'                      => 'Nimega sisseminek',
+'loginprompt'                => '{{SITENAME}} lask nimega sisse õnnõ sis, ku lubatas valmistuisi.',
+'userlogin'                  => 'Mineq nimega sisse',
+'logout'                     => 'Nime alt välläminek',
+'userlogout'                 => 'Mineq nime alt vällä',
+'notloggedin'                => 'Olõ-i nimega sisse mint',
+'nologin'                    => 'Olõ-i inne nimega sisse lännüq? $1.',
+'nologinlink'                => 'Tiiq hindäle pruukjanimi',
+'createaccount'              => 'Tiiq pruukjanimi ärq',
+'gotaccount'                 => 'Ku sul jo om uma pruukjanimi, sis $1.',
+'gotaccountlink'             => 'võit nimega sisse minnäq',
+'createaccountmail'          => 'e-postiga',
+'badretype'                  => 'Kirotõduq salasõnaq ei klapiq kokko.',
+'userexists'                 => 'Kirotõt pruukjanimme jo pruugitas. Võtaq tõõnõ nimi.',
+'youremail'                  => 'Suq e-posti aadrõs *',
+'username'                   => 'Pruukjanimi:',
+'uid'                        => 'Pruukjanummõr:',
+'yourrealname'               => 'Peris nimi *',
+'yourlanguage'               => 'Pruukjapalgõ kiil:',
+'yourvariant'                => 'Keelevariant',
+'yournick'                   => 'Suq kutsmisnimi (alakirotamisõs)',
+'badsig'                     => 'Seo alakirotus olõ-i masva.',
+'email'                      => 'e-posti aadrõs',
+'prefs-help-email-enotif'    => 'Taad aadrõsi pääle saadõtasõq sullõ ka artiklidõ muutumisteedüseq, ku sa sääntseq säädmiseq käüki võtat.',
+'prefs-help-realname'        => "* <strong>Peris nimi</strong> (piä-i kirotama): ku taa teedäq annat, sis pruugitas taad pruukjanime asõmõl lehekülgi tegijide nimekir'on.",
+'loginerror'                 => 'Sisseminemise viga',
+'prefs-help-email'           => '* <strong>E-post</strong> (piä-i kirotama): tõõsõq pruukjaq saavaq sullõ kirotaq ilma su aadrõssit nägemäldäq. Taast om sis kah kassu, ku uma salasõna ärq johtut unõhtama.',
+'nocookiesnew'               => 'Pruukjakonto om valmis, a sa päse-s sisse, selle et {{SITENAME}} tarvitas pruukjidõ kimmästegemises valmistuisi. Suq võrgokaejan ommaq valmistusõq ärq keeledüq. Säeq valmistusõq lubatus ja mineq sis uma vahtsõ pruukjanime ja salasõnaga sisse.',
+'nocookieslogin'             => '{{SITENAME}} tarvitas pruukjidõ kimmästegemises valmistuisi. Suq võrgokaejan ommaq valmistusõq keeledüq. Säeq valmistusõq lubatus ja prooviq vahtsõst.',
+'noname'                     => 'Võlssi kirotõt pruukjanimi.',
+'loginsuccesstitle'          => "Sisseminek läts' kõrda",
+'loginsuccess'               => 'Olõt nimega sisse lännüq. Suq pruukjanimi om \"$1\".',
+'nosuchuser'                 => ' "$1" nimelist pruukjat olõ-i olõman. Kaeq kiräpilt üle vai pruugiq alanolõvat vormi vahtsõ konto luumisõs.',
+'nosuchusershort'            => '"$1" nimelist pruukjat olõ-i olõman. Kas kirotit iks nime õigõhe?',
+'nouserspecified'            => 'Olõ-i kirotõt pruukjanimme.',
+'wrongpassword'              => 'Kirotõt võlss salasõna. Prooviq vahtsõst.',
+'wrongpasswordempty'         => 'Salasõna tohe-i tühi ollaq.',
+'mailmypassword'             => 'Saadaq mullõ vahtsõnõ salasõna',
+'passwordremindertitle'      => '{{SITENAME}} - ärqunõhtõt salasõna',
+'passwordremindertext'       => "Kiäki (arvadaq saq esiq, puutri võrgonummõr $1),
+pallõl', et {{SITENAME}} ($4) saatnuq sullõ vahtsõ sisseminegi salasõna.
+Pruukja $2 salasõna om noq $3. Ku olõt nimega sisse lännüq, võit taa aotlidsõ salasõna ärq muutaq. 
+Tervüisi, {{SITENAME}}.",
+'noemail'                    => 'Kah\'os olõ-i meil pruukja "$1" e-postiaadrõssit.',
+'passwordsent'               => 'Vahtsõnõ salasõna om saadõt pruukja "$1" kirotõdu e-postiaadrõsi pääle. Ku olõt salasõna kätte saanuq, mineq nimega sisse.',
+'blocked-mailpassword'       => 'Su võrgonumbrilõ om pant pääle toimõndamiskiild, miä lasõ-i salasõnna miilde tulõtaq.',
+'eauthentsent'               => 'Sullõ om saadõt kinnütüskiri. Muid kirjo saadõta-i inne, ku olõt tennüq nii, kuis kirän opat ja kinnütänüq, et taa om suq e-postiaadrõs.',
+'throttled-mailpassword'     => '$1 tunni seen om saadõt salasõna miildetulõtus. Sääntsit miildetulõtuisi saadõtas õnnõ $1 tunni takast.',
+'mailerror'                  => 'Kirä saatmisõ viga: $1',
+'acct_creation_throttle_hit' => 'Sa olõt tennüq jo $1 kontot. Rohkõmb ei saaq.',
+'emailauthenticated'         => 'Su e-postiaadrõs kinnütedi ärq $1.',
+'emailnotauthenticated'      => "Su e-postiaadrõssit olõ-i viil kinnütet. Alanolõvi as'on e-kirjo ei saadõtaq.",
+'noemailprefs'               => 'Olõ-i ant e-postiaadrõssit.',
+'emailconfirmlink'           => 'Kinnüdäq uma e-postiaadrõs.',
+'invalidemailaddress'        => 'Olõ-i kõrralik e-postiaadrõs. Kirodaq õigõ e-postiaadrõs vai jätäq rivi rühäs.',
+'accountcreated'             => 'Pruukjanimi luudi',
+'accountcreatedtext'         => 'Luudi pruukjanimi pruukjalõ $1.',
+
+# Password reset dialog
+'resetpass'               => 'Salasõna vahtsõndus',
+'resetpass_announce'      => 'Sa lätsit sisse e-postiga saadõdu aotlidsõ koodiga. Kõrdapiten sisseminekis tulõ sul siin tetäq hindäle  vahtsõnõ salasõna:',
+'resetpass_text'          => '<!-- Kirodaq siiäq -->',
+'resetpass_header'        => 'Salasõna vahtsõndus',
+'resetpass_submit'        => 'Kirodaq salasõna ja mineq nimega sisse',
+'resetpass_success'       => 'Salasõna vaihtaminõ läts kõrda.',
+'resetpass_bad_temporary' => 'Taa aotlinõ salasõna kõlba-i. Sa olõt jo saanuq vahtsõ salasõna vai küsünüq vahtsõ aotlidsõ salasõna.',
+'resetpass_forbidden'     => 'Seon vikin saa-i salasõnno vaihtaq.',
+'resetpass_missing'       => 'Olõ-i teksti ant.',
+
+# Edit page toolbar
+'bold_sample'     => 'Paks kiri',
+'bold_tip'        => 'Paks kiri',
+'italic_sample'   => 'Liuhkakiri',
+'italic_tip'      => 'Liuhkakiri',
+'link_sample'     => 'Lingitäv päälkiri',
+'link_tip'        => 'Siselink',
+'extlink_sample'  => "http://www.välislink'.com Lingi nimi",
+'extlink_tip'     => 'Välislink (unõhtagu-i ette pandaq http://)',
+'headline_sample' => 'Päälkiri',
+'headline_tip'    => 'Tõõsõ tasõmõ päälkiri',
+'math_sample'     => 'Kirodaq vallõm siiäq',
+'math_tip'        => 'Matõmaatigatekst (LaTeX)',
+'nowiki_sample'   => 'Kirodaq kujondamalda tekst',
+'nowiki_tip'      => 'Tunnistagu-i viki kujondust',
+'image_sample'    => 'Näüdüs.jpg',
+'image_tip'       => 'Pilt',
+'media_sample'    => 'Näüdüs.mp3',
+'media_tip'       => 'Meediäteedüstü',
+'sig_tip'         => 'Suq allkiri üten aotempliga',
+'hr_tip'          => 'Horisontaaljuun',
+
+# Edit pages
+'summary'                   => 'Kokkovõtõq',
+'subject'                   => 'Päälkiri',
+'minoredit'                 => 'Taa om väiku parandus',
+'watchthis'                 => 'Kaeq taa lehe perrä',
+'savearticle'               => 'Pästäq',
+'preview'                   => 'Proovikaehus',
+'showpreview'               => 'Näütäq proovikaehust',
+'showlivepreview'           => 'Kipõkaehus',
+'showdiff'                  => 'Näütäq muutmiisi',
+'anoneditwarning'           => "'''Hoiatus:''' sa olõ-i nimega sisse lännüq, seo lehe aolukku pandas su puutri aadrõs.",
+'missingsummary'            => "'''Miildetulõtus:'''sa olõ-i kirotanuq uma toimõndamisõ kokkovõtõt. Ku klõpsahtat viil kõrra nuppi Pästäq, sis pästetäs su toimõndus ilma kokkovõttõldaq.",
+'missingcommenttext'        => 'Olõq hää, kirodaq kokkovõtõq.',
+'missingcommentheader'      => 'Sa olõ-i andnuq umalõ kokkovõttõlõ päälkirjä. Ku klõpsahtat nuppi <em>Pästäq</em>, pästetäs toimõndus ilma päälkiräldä.',
+'summary-preview'           => 'Kokkovõttõ kaeminõ',
+'subject-preview'           => 'Päälkirä kaeminõ',
+'blockedtitle'              => 'Pruukja om kinniq peet',
+'blockedtext'               => "Su pruukjanime vai puutri võrgoaadrõsi pand' kinniq $1. Timä põhjõndus om sääne:<br />''$2''<br />Küsümüst saat arotaq $1 vai mõnõ tõõsõ
+[[{{MediaWiki:grouppage-sysop}}|kõrraldajaga]].
+
+Panõq tähele, et sa saa-i taalõ pruukjalõ sõnomit saataq, ku sa olõ-i kirjä pandnuq umma [[Special:Preferences|säädmislehe]] e-posti aadrõssit.
+
+Suq puutri võrgoaadrõs om $3 ja kinnipandmistunnus om #$5. Panõq naaq kõiki perräküsümiisi manoq, midä tiit.",
+'blockedoriginalsource'     => "Lehe '''$1''' lättekuud:",
+'blockededitsource'         => "Su tett toimõndus lehe '''$1''' pääl:",
+'whitelistedittitle'        => 'Toimõndamisõs piät nimega sisse minemä',
+'whitelistedittext'         => 'Lehekülgi toimõndamisõs $1.',
+'whitelistreadtitle'        => 'Lugõmisõs piät olõma nimega sisse lännüq',
+'whitelistreadtext'         => 'Lehekülgi lugõmisõs piät [[Special:Userlogin|nimega sisse minemä]].',
+'whitelistacctitle'         => 'Sul olõ-i õigust pruukjakontot luvvaq',
+'whitelistacctext'          => 'Et seon Vikin kontosit luvvaq, piät olõma [[Special:Userlogin|nimega sisse lännüq]] ja sul piät olõma tuu jaos nõvvõtavaq õigusõq.',
+'confirmedittitle'          => 'E-posti kinnütüs',
+'confirmedittext'           => 'Sa saa-i inne lehekülgi toimõndaq, ku olõt kinnütänüq ärq uma e-postiaadrõsi. Tuud saat tetäq uma [[Special:Preferences|säädmislehe]] pääl.',
+'nosuchsectiontitle'        => 'Olõ-i säänest lõiku',
+'nosuchsectiontext'         => 'Sa proovõq toimõndaq lõiku, midä olõ-i olõman, a ku lõiku $1 olõ-i olõman, sis olõ-i su toimõndust kohe pandaq.',
+'loginreqtitle'             => 'Piät nimega sisse minemä',
+'loginreqlink'              => 'nimega sisse minemä',
+'loginreqpagetext'          => 'Tõisi lehekülgi kaemisõs piät $1.',
+'accmailtitle'              => 'Salasõna saadõt.',
+'accmailtext'               => "Pruukja '$1' salasyna saadõti aadrõsi pääle $2.",
+'newarticle'                => '(Vahtsõnõ)',
+'newarticletext'            => "Taad lehekülge olõ-i viil.
+Leheküle luumisõs nakkaq kirotama alanolõvahe kasti. 
+Ku sa johtuq siiäq kogõmaldaq, sis klõpsaq võrgokaeja '''Tagasi'''-nuppi.",
+'anontalkpagetext'          => "---- ''Taa om arotusleht nimeldä pruukja kotsilõ, kiä olõ-i loonuq kontot vai pruugi-i tuud. Tuuperäst tulõ meil pruukja kimmästegemises pruukiq timä puutri võrgoaadrõssit. Taa aadrõs või ollaq mitmõ pruukja pääle ütine. Ku olõt nimeldä pruukja ja lövvät, et taa leheküle pääle kirotõt jutt käü suq kotsilõ, sis olõq hää, [[Special:Userlogin|luuq konto vai mineq nimega sisse]], et edespiten segähüisi ärq hoitaq.''",
+'noarticletext'             => "<big>Seo leht om parlaq tühi.'''</big> * Võit kirotaq vahtsõ lehe '''<span class=\"plainlinks\">[{{fullurl:{{NAMESPACE}}:{{PAGENAME}}|action=edit}} {{PAGENAME}}]</span>.''' * Ku olõt jo loonuq sääntse nimega lehe, või tuu ollaq ärq kistutõt — kaeq [[Special:Log/delete|kistutusnimekirjä]].",
+'clearyourcache'            => "'''Panõq tähele:''' perän pästmist piät muutmiisi nägemises uma võrgokaeja vaihõmälo tühäs tegemä: '''Mozilla:''' vaodaq ''reload''  vai ''ctrl-r'', '''IE / Opera:''' ''ctrl-f5'', '''Safari:''' ''cmd-r'', '''Konqueror''' ''ctrl-r''.",
+'usercssjsyoucanpreview'    => "<strong>Nõvvoannõq:</strong> Pruugiq nuppi 'Näütäq proovikaehust' uma vahtsõ CCS-i vai JavaScripti ülekaemisõs, inne ku taa ärq pästät.",
+'usercsspreview'            => "'''Unõhtagu-i, et seod kujjo su umast stiililehest olõ-i viil pästet!'''",
+'userjspreview'             => "'''Unõhtagu-i, et seo kujo su umast javascriptist om viil pästmäldäq!'''",
+'userinvalidcssjstitle'     => "'''Miildetulõtus:''' Olõ-i stiili nimega \"\$1\". Piäq meelen, et pruukja säedüq .css- and .js-leheq piät nakkama väiku algustähega.",
+'updated'                   => '(Värskis tett)',
+'note'                      => '<strong>Miildetulõtus:</strong>',
+'previewnote'               => '<strong>Taa om õnnõ proovikaehus; muutmisõq olõ-i pästedüq!</strong>',
+'previewconflict'           => "Taa proovikaehus näütäs, kuis ülembädsen toimõtuskastin ollõv tekst' päält pästmist vällä nägemä nakkas.",
+'session_fail_preview'      => '<strong>Annaq andis! Su toimõndust saa-s pästäq, selle et su tüükõrra teedüs om kaoma lännüq. Olõq hää, proomiq viilkõrd. Ku tuust olõ-i kassu, proomiq nii, et läät nime alt vällä ja sis jälq tagasi sisse.</strong>',
+'session_fail_preview_html' => "<strong>Annaq andis, mi saa-i tallitaq su toimõndust, selle et toimõnduskõrra teedüs om kaoma lännüq.</strong>
+
+''Kuna taan vikin om käügin lihtsä HTML, sis om näütämist piiret JavaScript-i ründämiisi kaitsõs.''
+
+<strong>Ku taa om õigõ toimõnduskatsõq, prooviq viilkõrd. Ku iks tüütä-i, prooviq nime alt vällä minekit ja vahtsõst sissetulõkit.</strong>",
+'importing'                 => 'Tuvvas lehekülge $1',
+'editing'                   => 'Toimõndõdas artiklit $1',
+'editinguser'               => 'Toimõndõdas lehekülge $1',
+'editingsection'            => 'Toimõndõdas lõiku artiklist $1',
+'editingcomment'            => 'Toimõndõdas kommõntaari lehe $1 pääl',
+'editconflict'              => 'Toimõndamisvastaolo: $1',
+'explainconflict'           => 'Kiäki om muutnuq seod lehte perän tuud, ku saq taad toimõndama naksiq.
+Ülemädsen toimõnduskastin om teksti perämäne kujo.
+Suq muutmisõq ommaq alomadsõn kastin.
+Sul tulõ naaq viimätsehe kujjo üle viiäq. Ku klõpsahtat nuppi "Pästäq", sis pästetäs <b>õnnõ</b> ülembädse toimõnduskasti tekst.',
+'yourtext'                  => 'Suq tekst',
+'storedversion'             => 'Pästet kujo',
+'nonunicodebrowser'         => "<strong>Hoiatus: su võrgokaeja tukõ-i Unicode'i. Olõq hüä, võtaq toimõndamisõs leht vallalõ tõõsõn võrgokaejan.</strong>",
+'editingold'                => '<strong>KAEQ ETTE! Toimõndat parhilla taa lehe vanna kujjo. Ku taa ärq pästät, sis lätväq kõik päält taad kujjo tettüq muutmisõq kaoma.</strong>',
+'yourdiff'                  => 'Lahkominegiq',
+'copyrightwarning'          => 'Pruukjapalgõ ümbrepandmisõq loetasõq avaldõdus $2 perrä
+(täpsämbähe kaeq $1). Muud sissu või pruukiq tävveste vabalt, ku olõ-i tõisildõ näüdät.',
+'copyrightwarning2'         => 'Rehkendäq tuud, et kõiki seo lehe pääle tettüid kirotuisi ja toimõnduisi või kiä taht muutaq vai ärq kistutaq. Ku sa taha-i, et su tüüd armuhiitmäldä ümbre tetäs ja uma ärqnägemise perrä pruugitas, sis pästku-i taad siiäq. Sa piät ka lubama, et kirotit uma jutu esiq vai võtit kopimiskeelüldä paigast (täpsämbält kaeq $1). <strong>PANGU-I TAAHA TEGIJÄÕIGUISIGA KAIDSÕTUT MATÕRJAALI ILMA LUALDA!</strong>',
+'longpagewarning'           => '<center>HOIATUS: Seo lehe suurus om $1 kilobaiti. Mõnõ võrgokaejaga või ollaq hätä jo 32-kilobaididsõ lehe toimõndamisõga. Märgiq perrä, kas seod lehte andnuq jakaq vähämbis lehis.</center>',
+'longpageerror'             => '<strong>VIGA: Lehe suurus om $1 kilobaiti. Taad saa-i pästäq, selle et kõgõ suurõmb lubat suurus om $2 kilobaiti.</strong>',
+'readonlywarning'           => '<strong>HOIATUS: Teedüskogo om huuldustöie jaos lukku pant, nii et parhilla saa-i paranduisi pästäq. Võit teksti alalõ hoitaq tekstifailin ja pästäq taa siiäq peränpoolõ.</strong>',
+'protectedpagewarning'      => '<center><small>Taa leht om lukun. Taad saavaq toimõndaq õnnõ kõrraldajaõiguisiga pruukjaq.</small></center>',
+'semiprotectedpagewarning'  => 'Seod lehte saavaq muutaq õnnõ nimega sisse lännüq pruukjaq.',
+'cascadeprotectedwarning'   => "'''HOIATUS:''' Taad lehte võivaq toimõndaq õnnõ kõrraldajaõiguisiga pruukjaq, selle et taa kuulus järgmäidsi kaidsõtuisi lehti hulka:",
+'templatesused'             => 'Seo lehe pääl pruugiduq näüdüseq:',
+'templatesusedpreview'      => 'Proovikaehusõn pruugiduq näüdüseq:',
+'templatesusedsection'      => 'Seon lõigun pruugiduq näüdüseq:',
+'template-protected'        => '(ärqkaidsõt)',
+'template-semiprotected'    => '(ärqkaidsõduq nimeldä ja vahtsõq pruukjaq)',
+'edittools'                 => '<!-- Text here will be shown below edit and upload forms. -->',
+'nocreatetitle'             => 'Lehekülgi luuminõ piiret',
+'nocreatetext'              => 'Sa ei saaq luvvaq vahtsit lehti. Võit toimõndaq olõmanolõvit lehti vai minnäq nimega sisse. Ku sul olõ-i pruukjanimme, sis võit tuu hindäle [[Special:Userlogin|tetäq]].',
+
+# "Undo" feature
+'undo-success' => "Tagasivõtminõ läts' kõrda. Kaeq üle, kas taa om tuu, midä sa tetäq tahtsõt ja pästäq muutusõq.",
+'undo-failure' => 'Tagasivõtminõ lää-s kõrda samal aol tettüide muutmiisi vastaolo peräst. Võit muutusõq käsilde tagasi võttaq.',
+'undo-summary' => "Tagasi võet muutminõ #$1, mink tekk' [[Special:Contributions/$2|$2]] ([[User talk:$2|Arotus]])",
+
+# Account creation failure
+'cantcreateaccounttitle' => 'Pruukjanime luuminõ lää-s kõrda',
+'cantcreateaccounttext'  => "Pruukjanime luuminõ taa puutri võrgoaadrõsi ($1) alt om keelet. Taa põhjusõs või ollaq perräjätmäldä kur'ategemine, miä om toimõ pant taa puutri võrgoaadrõsi päält.",
+
+# History pages
+'revhistory'          => 'Toimõndamislugu',
+'viewpagelogs'        => 'Kaeq seo lehe muutmisnimekirjä.',
+'nohistory'           => 'Seo leheküle pääl ei olõq vanõmbit kujjõ.',
+'revnotfound'         => 'Es lövväq kujjo',
+'revnotfoundtext'     => 'Es lövväq su otsitut vanna kujjo.
+Kaeq üle aadrõs, kost sa taad löüdäq proovõq.',
+'loadhist'            => 'Leheküle aoluu laatminõ',
+'currentrev'          => 'Viimäne kujo',
+'revisionasof'        => 'Kujo $1',
+'revision-info'       => 'Kujo aost $1 - tennüq $2',
+'previousrevision'    => '←Vanõmb kujo',
+'nextrevision'        => 'Vahtsõmb kujo→',
+'currentrevisionlink' => 'Viimäne kujo',
+'cur'                 => 'viim',
+'next'                => 'järgm',
+'last'                => 'minev',
+'orig'                => 'alg',
+'page_first'          => 'edimäne leht',
+'page_last'           => 'viimäne leht',
+'histlegend'          => "Märgiq ärq kujoq, midä tahat kõrvo säädiq ja vaodaq võrdõlõmisnuppi.
+Seletüs: (viim) = lahkominegiq viimätsest kujost,
+(minev) = lahkominegiq minevädsest kujost, ts = väiku (tsill'okõnõ) muutminõ",
+'deletedrev'          => '[kistutõt]',
+'histfirst'           => 'Edimädseq',
+'histlast'            => 'Viimädseq',
+'historysize'         => '($1 baiti)',
+'historyempty'        => '(tühi)',
+
+# Revision feed
+'history-feed-title'          => 'Muutmislugu',
+'history-feed-description'    => 'Seo lehe muutmislugu',
+'history-feed-item-nocomment' => '$1 ($2)', # user at time
+'history-feed-empty'          => 'Säänest lehte olõ-i. Taa või ollaq ärq kistutõt vai ümbre nimetet. Võit pruumiq [[Special:Search|otsiq]] lehti, miä võivaq ollaq taa lehega köüdedüq.',
+
+# Revision deletion
+'rev-deleted-comment'         => '(kommõntaar ärq kistutõt)',
+'rev-deleted-user'            => '(pruukjanimi ärq kistutõt)',
+'rev-deleted-event'           => '(kiräkotus ärq kistutõt)',
+'rev-deleted-text-permission' => '<div class="mw-warning plainlinks">
+Lehe taa kujo om avaligust arhiivist ärq kistutõt.
+Lisateedüst või ollaq [{{fullurl:Special:Log/delete|page={{FULLPAGENAMEE}}}} kistutamisnimekirän].
+</div>',
+'rev-deleted-text-view'       => '<div class="mw-warning plainlinks">Taa kujo om avaligust pruugist ärq kistutõt, a kõrraldajaq saavaq taad nätäq. As\'a kotsilõ või teedüst olla [{{fullurl:Special:Log/delete|page={{FULLPAGENAMEE}}}} kistutusnimekirän] </div>',
+'rev-delundel'                => 'näütäq/käkiq',
+'revisiondelete'              => 'Kistudaq/võtaq tagasi lehe kujjõ',
+'revdelete-nooldid-title'     => 'Olõ-i säänest kujjo',
+'revdelete-nooldid-text'      => 'Sa olõ-i valinuq kujjo vai kujjõ.',
+'revdelete-selected'          => "{{PLURAL:$2|Valit kujo|Validuq kujoq}} lehele '''$1:'''",
+'logdelete-selected'          => "{{PLURAL:$2|Valit muutminõ|Validuq muutmisõq}} lehele '''$1:'''",
+'revdelete-text'              => 'Kistudõduq kujoq ommaq olõman lehe aoluun, a näide sissu saa-i avaligult nätäq. Seo viki tõõsõq kõrraldajaq saavaq taad käkitüt teksti lukõq ja taa tagasi avaligult nättäväs tetäq, ku olõ-i säet muid piirdmiisi.',
+'revdelete-legend'            => 'Kujo piirdmiseq:',
+'revdelete-hide-text'         => 'Käkiq kujo sisu',
+'revdelete-hide-name'         => 'Käkiq kujo nimi',
+'revdelete-hide-comment'      => 'Käkiq kokkovõtõq',
+'revdelete-hide-user'         => 'Käkiq toimõndaja pruukjanimi vai puutri võrgoaadrõs',
+'revdelete-hide-restricted'   => 'Panõq naaq piirdmiseq pääle ka kõrraldajilõ',
+'revdelete-suppress'          => 'Panõq teedüs lukku ka kõrraldajilõ',
+'revdelete-hide-image'        => 'Käkiq teedüstü sissu',
+'revdelete-unsuppress'        => 'Võtaq tagasitettüisi kujjõ päält piirdmisõq maaha',
+'revdelete-log'               => 'Muutmisnimekirä märgüs:',
+'revdelete-submit'            => 'Võtaq käüki valitulõ kujolõ',
+'revdelete-logentry'          => 'muudõt lehe [[$1]] kujo nättävüst',
+'logdelete-logentry'          => 'muudõt lehe [[$1]] muutmiisi nättävüst',
+'revdelete-logaction'         => '$1 {{plural:$1|kujo|kujjo}} säet muudu $2',
+'logdelete-logaction'         => '$1 {{plural:$1|muutminõ|muutmist}} lehele [[$3]] säet muudu $2',
+'revdelete-success'           => 'Kujo nättävüs paika säet.',
+'logdelete-success'           => 'Muutmiisi nättävüs paika säet.',
+
+# Oversight log
+'oversightlog'    => 'Perrävalvmismuutuisi nimekiri',
+'overlogpagetext' => 'Tan om nimekiri vahtsõmbist kistutuisist ja kinniqpidämiisist, miä pututasõq kõrraldajidõ iist käkitüt sissu. Kaeq [[Special:Ipblocklist|puutridõ võrgoaadrõssidõ kinniqpidämisnimekirjä]], et nätäq, määntseq kinniqpidämiseq ommaq parhillaq jovvun.',
+
+# Diffs
+'difference'                => '(Kujjõ lahkominegiq)',
+'loadingrev'                => 'Kujo laatminõ lahkominekide näütämise lehe jaos',
+'lineno'                    => 'Rida $1:',
+'editcurrent'               => 'Toimõndaq taa leheküle viimäst kujjo',
+'selectnewerversionfordiff' => 'Valiq võrdõlõmisõs vahtsõmb kujo',
+'selectolderversionfordiff' => 'Valiq võrdõlõmisõs vanõmb kujo',
+'compareselectedversions'   => 'Võrdõlõq valituid kujjõ',
+'editundo'                  => 'võtaq tagasi',
+'diff-multi'                => '(Kujjõ vaihõl {{plural:$1|üts näütämäldä muutminõ|$1 näütämäldä muutmist}}.)',
+
+# Search results
+'searchresults'         => 'Otsmisõ tulõmusõq',
+'searchresulttext'      => 'Lisateedüst otsmisõ kotsilõ kaeq [[{{MediaWiki:helppage}}|{{SITENAME}} otsmisoppusõst]].',
+'searchsubtitle'        => "Otsminõ '''[[:$1]]''' perrä",
+'searchsubtitleinvalid' => 'Otsminõ "$1"',
+'badquery'              => 'Viganõ otsmistekst',
+'badquerytext'          => 'Su perräküsümine es kõlbaq.
+Arvadaq sa proovõq otsiq veidemb ku kolmõ tähega sõnna.
+Tuud saa-i parlaq viil tetäq. Või ka ollaq,
+et perräküsümine oll\' viganõ, nt "pini and and kass" ei kõlbaq.
+Olõq hää, prooviq vahtsõst.',
+'matchtotals'           => 'Otsit sõna "$1" om $2 artikli päälkirän
+ja $3 artikli sisun.',
+'noexactmatch'          => "'''Olõ-i lehte päälkiräga \"\$1\".''' Võit tuu [[:\$1|esiq luvvaq]].",
+'titlematches'          => "Artiklipäälkir'ost löüt",
+'notitlematches'        => "Artiklipäälkir'ost es lövväq",
+'textmatches'           => 'Artiklitekstest löüt',
+'notextmatches'         => 'Artiklitekstest es lövväq',
+'prevn'                 => 'minevädseq $1',
+'nextn'                 => 'järgmädseq $1',
+'viewprevnext'          => 'Näütäq ($1) ($2) ($3).',
+'showingresults'        => 'Tan om <b>$1</b> tulõmust (tulõmusõst <b>$2</b> pääle).',
+'showingresultsnum'     => "Näüdätäs {{PLURAL:$3|'''1''' tulõmus|'''$3''' tulõmust}} tulõmusõst #'''$2''' pääle.",
+'nonefound'             => '<strong>Hoiatus</strong>: otsmishäti sakõs põhjusõs om tuu, et väega sagehõhe ettetulõvit sõnno võta-i massin otsmisõ man arvõhe. Tõõnõ põhjus või ollaq
+mitmõ otsmissõna pruukminõ (sis ilmusõq õnnõ leheküleq, kon ommaq kõik otsiduq sõnaq).',
+'powersearch'           => 'Otsminõ',
+'powersearchtext'       => 'Otsitas nimeruumõn:<br />$1<br />$2 List redirects<br />Otsitas $3 $9',
+'searchdisabled'        => "{{SITENAME}} otsminõ parhillaq ei tüütäq. Niikavva, ku otsminõ jälq tüüle saa, võit pruukiq otsmisõs alanolõvat Google'i otsikasti, a näide teedüs {{SITENAME}} sisust pruugi-i ollaq alasi kõgõ värskimb.",
+'blanknamespace'        => '(Artikliq)',
+
+# Preferences page
+'preferences'              => 'Säädmine',
+'mypreferences'            => 'Mu säädmiseq',
+'prefsnologin'             => 'Sa olõ-i nimega sisse lännüq',
+'prefsnologintext'         => 'Et säädmiisi tetäq, tulõ sul [[Special:Userlogin|nimega sisse minnäq]].',
+'prefsreset'               => 'Su säädmiseq ommaq puutrimälo perrä tagasi tettüq.',
+'qbsettings'               => 'Kipõriba säädmine',
+'qbsettings-none'          => 'Olõ-i',
+'qbsettings-fixedleft'     => 'Kõgõ kural puul',
+'qbsettings-fixedright'    => 'Kõgõ hüäl puul',
+'qbsettings-floatingleft'  => 'Ujovahe kural puul',
+'qbsettings-floatingright' => 'Ujovahe hüäl puul',
+'changepassword'           => 'Muudaq salasõnna',
+'skin'                     => 'Vällänägemine',
+'math'                     => 'Valõmidõ näütämine',
+'dateformat'               => 'Kuupäävä muud',
+'datedefault'              => 'Ütskõik',
+'datetime'                 => 'Kuupäiv ja kelläaig',
+'math_failure'             => 'Arvosaamalda süntaks',
+'math_unknown_error'       => 'Tundmalda viga',
+'math_unknown_function'    => 'Tundmalda tallitus',
+'math_lexing_error'        => 'Vällälugõmisviga',
+'math_syntax_error'        => 'Süntaksiviga',
+'math_image_error'         => 'PNG-muutus lää-s kõrda; kaeq üle, et latex, dvips, gs ja convert ommaq õigõhe paika säedüq',
+'math_bad_tmpdir'          => 'Matõmaatigateksti kirotaminõ aotlistõ kausta vai taa kausta luuminõ ei lääq kõrdaq',
+'math_bad_output'          => 'Matõmaatigateksti kirotaminõ välläandmiskausta vai sääntse kausta luuminõ ei lääq kõrda',
+'math_notexvc'             => 'Olõ-i texvc-tüüriista; loeq tuu paikasäädmise kotsilõ math/README-st.',
+'prefs-personal'           => 'Pruukjateedüs',
+'prefs-rc'                 => 'Perämädseq muutmisõq',
+'prefs-watchlist'          => 'Perräkaemisnimekiri',
+'prefs-watchlist-days'     => 'Perräkaemisnimekirä muutuisi näütämise aig päivin:',
+'prefs-watchlist-edits'    => 'Perräkaemisnimekirän näüdätävide muutuisi hulk:',
+'prefs-misc'               => 'Muuq säädmiseq',
+'saveprefs'                => 'Pästäq säädmiseq ärq',
+'resetprefs'               => 'Võtaq säädmiseq tagasi',
+'oldpassword'              => 'Vana salasõna',
+'newpassword'              => 'Vahtsõnõ salasõna',
+'retypenew'                => 'Kirodaq viilkõrd vahtsõnõ salasõna',
+'textboxsize'              => 'Toimõnduskasti suurus',
+'rows'                     => 'Rito',
+'columns'                  => 'Tulpõ',
+'searchresultshead'        => 'Otsminõ',
+'resultsperpage'           => 'Tulõmuisi leheküle kotsilõ',
+'contextlines'             => 'Rito tulõmusõn',
+'contextchars'             => 'Konteksti pikkus ria pääl',
+'stubthreshold'            => 'Kehvä artikli näütämise lävi',
+'recentchangesdays'        => 'Päivi, midä näüdädäq viimätsin muutmiisin',
+'recentchangescount'       => 'Päälkirjo hulk viimätsin muutmiisin',
+'savedprefs'               => 'Su muutmisõq ommaq pästedüq.',
+'timezonelegend'           => 'Aovüü',
+'timezonetext'             => 'Paikligu ao ja serveri ao (maailmaao) vaheq (tunniq).',
+'localtime'                => 'Paiklik aig',
+'timezoneoffset'           => 'Aovaheq',
+'servertime'               => 'Serveri aig',
+'guesstimezone'            => 'Võtaq aig võrgokaejast',
+'allowemail'               => 'Lupaq tõisil pruukjil mullõ e-posti saataq',
+'defaultns'                => 'Otsiq vaikimiisi naist nimeruumõst:',
+'default'                  => 'vaikimiisi',
+'files'                    => 'Teedüstüq',
+
+# User rights
+'userrights-lookup-user'     => 'Pruukjaõiguisi muutminõ',
+'userrights-user-editname'   => 'Kirodaq pruukjanimi:',
+'editusergroup'              => 'Muudaq pruukjidõ rühmi',
+'userrights-editusergroup'   => 'Pruukjidõrühmä valik',
+'saveusergroups'             => 'Pästäq pruukjidõrühmä muutmisõq',
+'userrights-groupsmember'    => 'Kuulus rühmä:',
+'userrights-groupsavailable' => 'Või mano pandaq rühmihe:',
+'userrights-groupshelp'      => 'Valiq rühmäq, minkast sa tahat pruukjat ärq võttaq vai kohe mano pandaq. Valimalda jätetüid rühmi muudõda-i. Rühmä valimist saa tühäs tetäq CTRL + hüä hiirevaotusõga.',
+
+# Groups
+'group'            => 'Rühm:',
+'group-bot'        => 'Robodiq',
+'group-sysop'      => 'Kõrraldajaq',
+'group-bureaucrat' => 'Pääkõrraldajaq',
+'group-all'        => '(kõik)',
+
+'group-bot-member'        => 'Robot',
+'group-sysop-member'      => 'Kõrraldaja',
+'group-bureaucrat-member' => 'Pääkõrraldaja',
+
+'grouppage-bot'        => '{{ns:project}}:Robodiq',
+'grouppage-sysop'      => '{{ns:project}}:Kõrraldajaq',
+'grouppage-bureaucrat' => '{{ns:project}}:Pääkõrraldajaq',
+
+# User rights log
+'rightslog'      => 'Pruukmisõiguisi muutmisõ nimekiri',
+'rightslogtext'  => 'Taa om pruukmisõiguisi muutmiisi nimekiri.',
+'rightslogentry' => 'Pruukja $1 õigusõq muudõti ümbre rühmäst $2 rühmä $3',
+'rightsnone'     => '(olõ-i õiguisi)',
+
+# Recent changes
+'nchanges'                          => '$1 {{PLURAL:$1|muutminõ|muutmiisi}}',
+'recentchanges'                     => 'Viimädseq muutmisõq',
+'recentchangestext'                 => 'Kaeq seo lehe pääl viimätsit muutmiisi.',
+'recentchanges-feed-description'    => 'Kaeq seo lehe pääl {{SITENAME}} viimätsit muutmiisi.',
+'rcnote'                            => 'Tan ommaq {{PLURAL:$1|üts muutus|$1 viimäst muutmist}}, miä ommaq tettüq {{PLURAL:$2|üte viimädse päävä|$2 viimädse päävä}} seen (kuupääväst $3 lugõma naatõn).',
+'rcnotefrom'                        => 'Tan ommaq muutmisõq kuupääväst <b>$2</b> pääle (näüdätäs kooniq <b>$1</b> muutmist).',
+'rclistfrom'                        => 'Näütäq muutmiisi kuupääväst $1 pääle',
+'rcshowhideminor'                   => '$1 väikuq parandusõq',
+'rcshowhidebots'                    => '$1 robodiq',
+'rcshowhideliu'                     => '$1 nimega pruukjaq',
+'rcshowhideanons'                   => '$1 nimeldä pruukjaq',
+'rcshowhidepatr'                    => '$1 kontrolliduq muutmisõq',
+'rcshowhidemine'                    => '$1 mu toimõndusõq.',
+'rclinks'                           => 'Näütäq viimädseq $1 muutmist, miä ommaq tettüq viimädse $2 päävä seen. $3',
+'diff'                              => 'lahk',
+'hist'                              => 'aol',
+'hide'                              => 'Käkitäseq',
+'show'                              => 'Näüdätäseq',
+'minoreditletter'                   => 'ts',
+'newpageletter'                     => 'V',
+'boteditletter'                     => 'rb',
+'number_of_watching_users_pageview' => '[{{PLURAL:$1|$1 perräkaejat|üts perräkaeja}}]',
+'rc_categories'                     => 'Õnnõ katõgoorijist (eräldedäs märgiga "|")',
+'rc_categories_any'                 => 'Miä taht',
+
+# Recent changes linked
+'recentchangeslinked'          => 'Siiäq putvaq muutmisõq',
+'recentchangeslinked-noresult' => 'Taaha putvit lehti olõ-i taa ao seen muudõt.',
+
+# Upload
+'upload'                      => 'Teedüstü üleslaatminõ',
+'uploadbtn'                   => 'Üleslaatminõ',
+'reupload'                    => 'Vahtsõst üleslaatminõ',
+'reuploaddesc'                => 'Tagasi üleslaatmisõ vormi mano.',
+'uploadnologin'               => 'Sa olõ-i nimega sisse lännüq',
+'uploadnologintext'           => 'Kui tahat teedüstüid üles laatiq, piät [[Special:Userlogin|nimega sisse minemä]].',
+'upload_directory_read_only'  => 'Serveril olõ-i üleslaatmiskausta ($1) kirotamisõ õigust.',
+'uploaderror'                 => 'Üleslaatmisviga',
+'uploadtext'                  => '<strong>PIÄQ KINNIQ!</strong> Inne ülelaatmist kaeq, et taa käünüq {{SITENAME}} [[{{MediaWiki:policy-url}}|pilte pruukmisõ kõrra]] perrä.
+<p>Innembält üleslaadiduq pildiq lövvät [[Special:Imagelist|pilte nimekiräst]].
+<p>Järgmädse vormi abiga saat laatiq üles vahtsit pilte ummi artiklide ilostamisõs. Inämbüsel võrgokaejil näet nuppi "Browse..." vai "Valiq...", miä vii sinno
+su opõratsioonisüsteemi standardsõhe teedüstüide vallalõtegemise aknõhe. Teedüstü valimisõs pandas timä nimi tekstivälä pääle, miä om nupi kõrval.
+Piät ka kastikõistõ märgi tegemä, et kinnütät,
+et sa riku-i taad teedüstüt üles laatõn kinkagi tegijäõiguisi. Üleslaatmisõs vaodaq nupi pääle "Üleslaatminõ". Taa või võttaq piso aigo, esiqeräle sis, kui sul om aiglanõ võrgoliin. <p>Soovitõdus kujos om pääväpildel JPEG, joonistuisil
+ja ikooni muudu pildel PNG, helle jaos OGG.
+Nimedäq umaq teedüstüq nii, et nimi ütelnüq midägi selgehe teedüstü sisu kotsilõ. Taa avitas segähüisi ärq hoitaq. Ku panõt artiklilõ pildi mano, pruugiq sääntse kujoga linki: <b>[[image:pilt.jpg]]</b> vai <b>[[image:pilt.png|alt. tekst]]</b>.
+Helüteedüstü puhul: <b>[[media:teedüstü.ogg]]</b>.
+<p>Panõq tähele, et nigu ka tõisi {{SITENAME}} lehekülgi pääl, võivaq tõõsõq su laadituid teedüstüid leheküle jaos muutaq vai ärq kistutaq. {{SITENAME}} kur\'astõ pruukjalõ võidas manoqpäsemine kinniq pandaq.',
+'uploadlog'                   => 'Üleslaatmiisi nimekiri',
+'uploadlogpage'               => 'Üleslaatmiisi nimekiri',
+'uploadlogpagetext'           => 'Nimekiri viimätsist üleslaatmiisist. Kelläaoq ommaq märgidüq serveri aoarvamisõ perrä (UTC).',
+'filename'                    => 'Teedüstü nimi',
+'filedesc'                    => 'Kokkovõtõq',
+'fileuploadsummary'           => 'Kokkovõtõq:',
+'filestatus'                  => 'Teedüstü tegijäõigusõq',
+'filesource'                  => 'Kost peri',
+'uploadedfiles'               => 'Üleslaadiduq teedüstüq',
+'ignorewarning'               => 'Pangu-i hoiatust tähele ja pästäq tuugiperäst.',
+'ignorewarnings'              => 'Pangu-i üttegi hoiatust tähele',
+'minlength'                   => 'Pildi nimen piät olõma vähämbält kolm tähte.',
+'illegalfilename'             => 'Teedüstü nimen "$1" om lehenime jaos lubamaldaq märke. Vaihtaq teedüstü nimme ja prooviq taa vahtsõst üles laatiq.',
+'badfilename'                 => 'Teedüstü nimi om ärq muudõt. Vahtsõnõ nimi om "$1".',
+'filetype-badmime'            => 'Teedüstüid, mink MIME-tüüp om "$1" tohe-i üles laatiq.',
+'filetype-badtype'            => "'''\".\$1\"''' olõ-i soovitõt teedüstütüüp.
+Lubaduq teedüstütüübiq ommaq: \$2",
+'filetype-missing'            => 'Teedüstül olõ-i laendust (nt ".jpg").',
+'large-file'                  => 'Teedüstüq tohe-i ollaq suurõmbaq, ku $1, a taa teedüstü om $2.',
+'largefileserver'             => 'Teedüstü om suurõmb ku server lupa.',
+'emptyfile'                   => "Teedüstü, midä sa proovõq üles laatiq paistus ollõv tühi. Kaeq üle, et kirotit nime õigõhe ja et taa olõ-i serverile pall'o suur.",
+'fileexists'                  => 'Sama nimega teedüstü om jo olõman. Katso $1, ku sa olõ-i kimmäs, et tahat taad muutaq.',
+'fileexists-extension'        => 'Sääntse nimega teedüstü om jo olõman:<br />
+Üleslaaditava teedüstü nimi: <strong><tt>$1</tt></strong><br />
+Olõmanolõva teedüstü nimi: <strong><tt>$2</tt></strong><br />
+Ainugõnõ vaih om laendusõ suurõ/väiku algustähe man. Kaeq perrä, kas naaq ommaq üts ja tuusama teedüstü.',
+'fileexists-thumb'            => "'''<center>Olõmanollõv pilt</center>'''",
+'fileexists-thumbnail-yes'    => 'Taa paistus ollõv vähändet pilt <i>(thumbnail)</i>. Kaeq teedüstü <strong><tt>$1</tt></strong>üle.<br />
+Ku ülekaet teedüstü om sama pilt alguperälidsen suurusõn, sis olõ-i vaia eräle vähändedüt pilti üles laatiq.',
+'file-thumbnail-no'           => 'Teedüstü nimi nakkas pääle <strong><tt>$1</tt></strong>. Taa paistus ollõv vähändet pilt <i>(thumbnail)</i>. Ku sul om olõman taa pilt tävven suurusõn, sis laadiq üles tuu, ku olõ-i, sis muudaq teedüstü nimi ärq.',
+'fileexists-forbidden'        => 'Sääntse nimega teedüstü om jo olõman. Pästäq teedüstü tõõsõ nimega. Parhillanõ teedüstü: [[Image:$1|thumb|center|$1]]',
+'fileexists-shared-forbidden' => 'Sama nimega teedüstü om jo olõman jaetuidõ teedüstüide hulgan. Pästäq teedüstü mõnõ tõõsõ nime ala. Parhillanõ teedüstü: [[Image:$1|thumb|center|$1]]',
+'successfulupload'            => "Üleslaatminõ läts' kõrda",
+'fileuploaded'                => 'Teedüstü "$1" laaditi üles.
+Klõpsaq linki: ($2) ja saat seletüslehe pääle,kohe saat kirjä pandaq
+tarviligu teedüse teedüstü kotsilõ: kost peri, kunas luud, kiä lõi jne.',
+'uploadwarning'               => 'Üleslaatmishoiatus',
+'savefile'                    => 'Pästäq teedüstü ärq',
+'uploadedimage'               => 'laadõ üles "$1"',
+'uploaddisabled'              => 'Üleslaatminõ lää-s kõrda',
+'uploaddisabledtext'          => 'Teedüstüide üleslaatminõ om seon vikin kinniq pant.',
+'uploadscripted'              => 'Seol teedüstül om HTML-kuud vai skripte, minkast võrgokaeja või võlssi arvo saiaq.',
+'uploadcorrupt'               => 'Teedüstü om viganõ vai om täl võlss laendus. Olõq hää, kaeq tä üle ja laadiq vahtsõst üles.',
+'uploadvirus'                 => 'Teedüstül om viirus man! Kaeq: $1',
+'sourcefilename'              => 'Teedüstü nimi',
+'destfilename'                => 'Teedüstü nimi vikin',
+'watchthisupload'             => 'Kaeq taa lehe perrä',
+'filewasdeleted'              => 'Sääntse nimega teedüstü om jo üles laadit ja sis ärq kistutõt. Kaeq üle $1 inne ku nakkat jälq üles laatma.',
+
+'upload-proto-error'      => 'Viganõ protokoll',
+'upload-proto-error-text' => 'Üles saa laatiq õnnõ aadrõssidõ päält, mink alostusõn om <code>http://</code> vai <code>ftp://</code>.',
+'upload-file-error'       => 'Sisemäne viga',
+'upload-file-error-text'  => 'Aotlidsõ teedüstü luuminõ lää-s kõrda. Küsüq api kõrraldaja käest.',
+'upload-misc-error'       => 'Üleslaatmisõ viga',
+'upload-misc-error-text'  => 'Teedüstü üleslaatminõ lää-s kõrda. Kaeq üle, kas su ant aadrõs om masva ja õigõhe kirotõt. Ku viga iks ärq kao-i, küsüq api kõrraldaja käest.',
+
+# Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
+'upload-curl-error6'       => 'Lövvä-s säänest aadrõssit',
+'upload-curl-error6-text'  => 'Lövvä-s säänest aadrõssit. Kaeq üle, kas aadrõss om iks õigõ ja tüütäs.',
+'upload-curl-error28'      => 'Saa-s ao pääle üles laaditus',
+'upload-curl-error28-text' => 'Taa aadrõsi päält saa-s ao pääle vastust. Oodaq vähä ja prooviq vahtsõst.',
+
+'license'            => 'Litsents',
+'nolicense'          => 'Olõ-i litsentsi valit',
+'upload_source_url'  => ' (avalik tüütäv võrgoaadrõs)',
+'upload_source_file' => ' (teedüstü su puutrin)',
+
+# Image list
+'imagelist'                 => 'Pilte nimekiri',
+'imagelisttext'             => 'Pilte nimekirän $1 (sordiduq $2).',
+'imagelistforuser'          => 'Pruukja $1 laadiduq pildiq.',
+'getimagelist'              => 'hangi pilte nimekirjä',
+'ilsubmit'                  => 'Otsminõ',
+'showlast'                  => 'Näütäq viimäst $1 pilti sorditult $2.',
+'byname'                    => 'nime perrä',
+'bydate'                    => 'kuupäävä perrä',
+'bysize'                    => 'suurusõ perrä',
+'imgdelete'                 => 'kistudaq',
+'imgdesc'                   => 'seletüs',
+'imgfile'                   => 'teedüstü',
+'imglegend'                 => 'Seletüs: (seletüs) = näütäq/toimõndaq pildi seletüst.',
+'imghistory'                => 'Pildi aolugu',
+'revertimg'                 => 'tagasi',
+'deleteimg'                 => 'kistut',
+'deleteimgcompletely'       => 'kistut',
+'imghistlegend'             => 'Seletüs: (viim) = pildi viimäne kujo, (kistut) = kistudaq taa vana kujo, (tagasi) = võtaq tagasi vana kujo.
+<br /><i>Klõpsaq kuupäävä pääle, et nätäq tuukõrd laaditut pilti.</i>.',
+'imagelinks'                => 'Pildilingiq',
+'linkstoimage'              => 'Taa pildi pääle näütäseq leheküleq:',
+'nolinkstoimage'            => 'Taa pildi pääle näütä-i ütski lehekülg.',
+'sharedupload'              => 'Taa om ütine teedüstü, taad võivaq pruukiq ka tõõsõq vikiq.',
+'shareduploadwiki'          => 'Taa kotsilõ saa lähkümbält kaiaq $1.',
+'shareduploadwiki-linktext' => 'seletüsleheküle päält',
+'noimage'                   => 'Olõ-i säänest teedüstüt, võit taa esiq {{SITENAME}}he $1.',
+'noimage-linktext'          => 'üles laatiq',
+'uploadnewversion-linktext' => 'Laadiq taa teedüstü vahtsõnõ kujo',
+'imagelist_date'            => 'Kuupäiv',
+'imagelist_name'            => 'Nimi',
+'imagelist_user'            => 'Pruukja',
+'imagelist_size'            => 'Suurus (baidõn)',
+'imagelist_description'     => 'Seletüs',
+'imagelist_search_for'      => 'Pildi nime otsminõ:',
+
+# MIME search
+'mimesearch'         => 'MIME-otsminõ',
+'mimesearch-summary' => 'Taa lehe pääl saat otsiq teedüstüid näide MIME-tüübi perrä. Kirodaq: sisutüüp/alltüüp, nt <tt>image/jpeg</tt>.',
+'mimetype'           => 'MIME-tüüp:',
+'download'           => 'laat',
+
+# Unwatched pages
+'unwatchedpages' => 'Perräkaemisõlda leheq',
+
+# List redirects
+'listredirects' => 'Ümbresaatmisõq',
+
+# Unused templates
+'unusedtemplates'     => 'Pruukmalda näüdüseq',
+'unusedtemplatestext' => 'Tan ommaq kirän kõik näüdüseq, midä olõ-i ütegi lehe pääle pant. Inne ku naaq ärq kistutat, kaeq perrä, kas näide pääle kost määnest linki näütä-i.',
+'unusedtemplateswlh'  => 'muuq lingiq',
+
+# Random redirect
+'randomredirect'         => 'Johuslinõ ümbresaatminõ',
+'randomredirect-nopages' => 'Seon nimeruumin olõ-i üttegi ümbresaatmist.',
+
+# Statistics
+'statistics'             => 'Statistiga',
+'sitestats'              => 'Lehekülgi statistiga',
+'userstats'              => 'Pruukjidõ statistiga',
+'sitestatstext'          => "Teedüskogon om kokko <b>$1</b> lehekülge.
+
+Taa numbri seen ommaq ka arotusküleq, abiartikliq, väega lühkeseq leheküleq, ümbresaatmisleheküleq ja muuq leheq, mink pääl arvadaq olõ-i entsüklopeediäartiklit. Ilma naid rehkendämäldä om parhilla '''$2''' {{SITENAME}} lehekülge, midä või pitäq artiklis. Üles om laadit '''$8''' teedüstüt. Lehti om kaet kokko '''$3''' kõrda ja toimõndõt '''$4''' kõrda. Tuu om keskmädselt '''$5''' kaemist lehe kotsilõ ja '''$6''' kaemist toimõndusõ kotsilõ. Hoolõkandõtallituisi om järekõrran '''$7'''.",
+'userstatstext'          => "Kirjäpantuid pruukjit om '''$1'''. Naist '''$2''' ($4%) ommaq kõrraldaja õiguisiga pruukjaq ($5).",
+'statistics-mostpopular' => 'Kõgõ kaetumbaq leheq',
+
+'disambiguations'      => 'Lingiq, miä näütäseq täpsüstüslehekülgi pääle',
+'disambiguationspage'  => '{{ns:project}}:Linke täpsüstüslehekülile',
+'disambiguations-text' => "Naaq leheq näütäseq '''täpsüstüslehti''' pääle. Tuu asõmal pidänüq nä näütämä as'a sisu pääle.<br />Lehte peetäs täpsüstüslehes, ku timän om pruugit näüdüst, kohe näütäs link lehelt [[MediaWiki:disambiguationspage]].",
+
+'doubleredirects'     => 'Katõkõrdsõq ümbresaatmisõq',
+'doubleredirectstext' => 'Egä ria pääl om ärq tuud edimäne ja tõõnõ ümbresaatmisleht ja niisama tõõsõ ümbresaatmislehe link, miä näütäs hariligult kotusõ pääle, kohe edimäne ümbersaatmisleht pidänüq õkva näütämä.',
+
+'brokenredirects'        => 'Vigadsõq ümbresaatmisõq',
+'brokenredirectstext'    => 'Naaq ümbresaatmisõq näütäseq lehti pääle, midä olõ-i olõman:',
+'brokenredirects-edit'   => '(toimõndaq)',
+'brokenredirects-delete' => '(kistudaq ärq)',
+
+'withoutinterwiki'        => 'Keelelingeldä leheq',
+'withoutinterwiki-header' => 'Nail lehil olõ-i linke tõisi kiili lehti pääle:',
+
+'fewestrevisions' => 'Kõgõ veidemb kõrdo toimõndõduq leheq',
+
+# Miscellaneous special pages
+'nbytes'                  => '$1 baiti',
+'ncategories'             => '$1 {{PLURAL:$1|katõgooria|katõgooriaq}}',
+'nlinks'                  => 'Linke arv: $1',
+'nmembers'                => '$1 {{PLURAL:$1|liigõq|liigõt}}',
+'nrevisions'              => '$1 {{PLURAL:$1|muutminõ|muutmist}}',
+'nviews'                  => 'Käümiisi: $1',
+'specialpage-empty'       => 'Taa leht om tühi.',
+'lonelypages'             => 'Artikliq, kohe olõ-i linke',
+'lonelypagestext'         => 'Nailõ lehile olõ-i muialt vikist linke.',
+'uncategorizedpages'      => 'Katõgoorijilda leheq',
+'uncategorizedcategories' => 'Katõgoorijilda katõgooriaq',
+'uncategorizedimages'     => 'Katõgoorijilda pildiq',
+'unusedcategories'        => 'Pruukmalda katõgooriaq',
+'unusedimages'            => 'Pruukmaldaq pildiq',
+'popularpages'            => "Pall'okäütüq leheküleq",
+'wantedcategories'        => 'Kõgõ tahetumbaq katõgooriaq',
+'wantedpages'             => 'Kõgõ tahetumbaq artikliq',
+'mostlinked'              => 'Leheq, kohe om kõgõ rohkõmb linke',
+'mostlinkedcategories'    => 'Katõgooriaq, kohe om kõgõ rohkõmb linke',
+'mostcategories'          => 'Artikliq, mil om kõgõ rohkõmb katõgoorijit',
+'mostimages'              => 'Pildiq, mil om kõgõ rohkõmb katõgoorijit',
+'mostrevisions'           => 'Artikliq, mil om kõgõ rohkõmb toimõnduisi',
+'allpages'                => 'Kõik artikliq',
+'prefixindex'             => 'Leheq päälkirä algusõ perrä',
+'randompage'              => 'Johuslinõ artikli',
+'randompage-nopages'      => 'Seon nimeruumin olõ-i üttegi lehte.',
+'shortpages'              => 'Lühküq artikliq',
+'longpages'               => 'Pikäq artikliq',
+'deadendpages'            => 'Leheq, kon olõ-i linke',
+'deadendpagestext'        => 'Nail lehil olõ-i linke tõisi viki lehti pääle.',
+'protectedpages'          => 'Kaidsõduq leheq',
+'protectedpagestext'      => 'Naaq leheq kaidsõtasõq ärq tõistõ paika panõkist ja muutmisõst.',
+'protectedpagesempty'     => 'Olõ-i kaidsõtuid lehti.',
+'listusers'               => 'Pruukjaq',
+'specialpages'            => 'Tallitusleheküleq',
+'spheading'               => 'Tallitusleheküleq',
+'restrictedpheading'      => 'Piiredüq tallitusleheküleq',
+'rclsub'                  => '(lehekülil, kohe leht "$1" näütäs)',
+'newpages'                => 'Vahtsõq leheküleq',
+'newpages-username'       => 'Pruukjanimi:',
+'ancientpages'            => 'Kõgõ vanõmbaq leheküleq',
+'intl'                    => 'Kiilivaihõlidsõq lingiq',
+'move'                    => 'Nõstaq ümbre',
+'movethispage'            => 'Panõq lehekülg tõistõ paika',
+'unusedimagestext'        => 'Panõq tähele, et tõõsõq leheküleq, nigu tõisi maiõ Vikipeediäq, võivaq pandaq siiäq lehekülgi pääle õkvalinke, tuuperäst võidas siin antuid pilte ka parhilla aktiivsõhe pruukiq.',
+'unusedcategoriestext'    => 'Naaq katõgooriaq ommaq olõman, a naid pruugita-i.',
+
+# Book sources
+'booksources'               => 'Raamaduq',
+'booksources-search-legend' => 'Otsiq raamatut',
+'booksources-isbn'          => 'ISBN:',
+'booksources-go'            => 'Otsiq',
+'booksources-text'          => 'Tan om linke lehekülile, kon müvväs raamatit vai andas raamatidõ kotsilõ teedüst.',
+
+'categoriespagetext' => 'Seon vikin ommaq sääntseq katõgooriaq:',
+'data'               => 'Teedüs',
+'userrights'         => 'Pruukja õiguisi muutminõ',
+'groups'             => 'Pruukjarühmäq',
+'isbn'               => 'ISBN',
+'alphaindexline'     => '$1 kooniq $2',
+'version'            => 'Kujo',
+
+# Special:Log
+'specialloguserlabel'  => 'Pruukja:',
+'speciallogtitlelabel' => 'Päälkiri:',
+'log'                  => 'Muutmisnimekiri',
+'log-search-legend'    => 'Muutmiisi otsminõ',
+'log-search-submit'    => 'Otsiq',
+'alllogstext'          => '{{SITENAME}} kõiki muutmiisi - kistutamiisi, kaitsmiisi, kinniqpidämiisi ja kõrraldamiisi ütine nimekiri. Võit valliq ka eräle muutmistüübi, pruukjanime vai lehe päälkirä perrä.',
+'logempty'             => 'Muutmisnimekirän olõ-i sääntsit kiräkotussit.',
+'log-title-wildcard'   => 'Otsiq päälkirjo, miä alostasõq taa tekstiga',
+
+# Special:Allpages
+'nextpage'          => 'Järgmäne lehekülg ($1)',
+'prevpage'          => 'Mineväne lehekülg ($1)',
+'allpagesfrom'      => 'Nakkaq näütämä lehekülest:',
+'allarticles'       => 'Kõik artikliq',
+'allinnamespace'    => 'Kõik nimeruumi $1 leheq',
+'allnotinnamespace' => 'Kõik leheq, midä olõ-i nimeruumin $1',
+'allpagesprev'      => 'Mineväne',
+'allpagesnext'      => 'Järgmäne',
+'allpagessubmit'    => 'Näütäq',
+'allpagesprefix'    => 'Näütäq lehti, mink alostusõn om:',
+'allpagesbadtitle'  => "Taa päälkiri oll' viganõ vai vikidevaihõlidsõ edejakuga. Tan või ollaq märke, midä tohe-i päälkir'on pruukiq.",
+
+# Special:Listusers
+'listusersfrom'      => 'Näütäq pruukjit alostõn:',
+'listusers-submit'   => 'Näütäq',
+'listusers-noresult' => 'Olõ-s pruukjit.',
+
+# E-mail user
+'mailnologin'     => 'Olõ-i saatja aadrõssit',
+'mailnologintext' => 'Sa piät olõma [[Special:Userlogin|nimega sisse lännüq]]
+ja sul piät umin [[Special:Preferences|säädmiisin]] olõma e-postiaadrõs, et sa saasiq tõisilõ pruukjilõ e-kirjo saataq.',
+'emailuser'       => 'Kirodaq taalõ pruukjalõ e-kiri',
+'emailpage'       => 'Kirodaq pruukjalõ e-kiri',
+'emailpagetext'   => 'Ku taa pruukja om ummi säädmiisihe pandnuq uma tüütävä e-postiaadrõsi, saa taa vormi abiga tälle saataq üte kirä. Kirän jääs nätäq saatja aadrõs, et kirä saaja saanuq kiräle vastadaq.',
+'usermailererror' => 'Saatmisõ viga:',
+'defemailsubject' => '{{SITENAME}} e-post',
+'noemailtitle'    => 'Olõ-i e-postiaadrõssit',
+'noemailtext'     => 'Taa pruukja olõ-i andnuq umma e-postiaadrõssit.',
+'emailfrom'       => 'Kink käest',
+'emailto'         => 'Kinkalõ',
+'emailsubject'    => 'Teema',
+'emailmessage'    => 'Sõnnom',
+'emailsend'       => 'Saadaq',
+'emailccme'       => 'Saadaq mullõ kopi mu e-kiräst.',
+'emailccsubject'  => 'Kopi su kiräst aadrõsi pääle $1: $2',
+'emailsent'       => 'E-post saadõt',
+'emailsenttext'   => 'Sõnnom saadõt.',
+
+# Watchlist
+'watchlist'            => 'Perräkaemisnimekiri',
+'mywatchlist'          => 'mu perräkaemisnimekiri',
+'watchlistfor'         => "(pruukjalõ '''$1''')",
+'nowatchlist'          => 'Perräkaemisnimekiri om tühi.',
+'watchlistanontext'    => 'Perräkaemisnimekirä pruukmisõs $1.',
+'watchlistcount'       => "Su perräkaemisnimekirän om üten arotuskülgiga '''$1''' lehekülge.",
+'clearwatchlist'       => 'Tiiq perräkaemisnimekiri tühäs',
+'watchlistcleartext'   => 'Kas tahat naidõ lehti perräkaemisõ ärq lõpõtaq?',
+'watchlistclearbutton' => 'Tiiq perräkaemisnimekiri tühäs',
+'watchlistcleardone'   => 'Perräkaemisnimekiri om tühäs tett, perräkaemisõ alt võeti maaha $1 lehte.',
+'watchnologin'         => 'Olõ-i nimega sisse mint',
+'watchnologintext'     => 'Perräkaemisnimekirä muutmisõs piät [[Special:Userlogin|nimega sisse minemä]].',
+'addedwatch'           => 'Perräkaemisnimekirjä pant',
+'addedwatchtext'       => "Lehekülg \"\$1\" om pant su [[Special:Watchlist|perräkaemisnimekirjä]]. Edespididseq muutmisõq seo lehe ja tä arotuskülgi pääl pandasõq ritta siin ja [[Special:Recentchanges|viimätside muutmiisi lehe pääl]] tuvvasõq '''paksun kirän'''. Ku tahat taad lehte perräkaemisnimekiräst vällä võttaq, klõpsaq nuppi \"Lõpõdaq perräkaeminõ ärq\".",
+'removedwatch'         => 'Perräkaemisnimekiräst vällä võet',
+'removedwatchtext'     => 'Lehekülg "$1" om su perräkaemisnimekiräst vällä võet.',
+'watch'                => 'Kaeq perrä',
+'watchthispage'        => 'Kaeq taad lehekülge perrä',
+'unwatch'              => 'Lõpõdaq perräkaeminõ ärq',
+'unwatchthispage'      => 'Lõpõdaq perräkaeminõ ärq',
+'notanarticle'         => 'Olõ-i artikli',
+'watchnochange'        => 'Taa ao seen olõ-i üttegi perräkaetavat lehte muudõt.',
+'watchdetails'         => '* Arotuslehti rehkendämäldä om perräkaemisõ all {{PLURAL:$1|üts leht|$1 lehte}} ja $2 lehte om validu ao seen muudõt.
+* [[Special:Watchlist/edit|Näütäq ja toimõndaq perräkaetavidõ artiklidõ nimekirjä]]
+* [[Special:Watchlist/clear|Tiiq perräkaemisnimekiri tühäs]]',
+'wlheader-enotif'      => '* E-postiga teedäqandmisõq ommaq käügin.',
+'wlheader-showupdated' => "* Leheq, midä om muudõt päält su viimäst käümist, ommaq '''paksun kirän'''",
+'watchmethod-recent'   => 'kontrollitas perräkaetavidõ lehti perämäidsi muutmiisi',
+'watchmethod-list'     => 'perräkaetavidõ lehti perämädseq muutmisõq',
+'removechecked'        => 'Võtaq validuq leheq perräkaemisõ alt ärq',
+'watchlistcontains'    => 'Perräkaemisnimekirän om $1 {{PLURAL:$1|leht|lehte}}.',
+'watcheditlist'        => 'Tan om tähistü perrä nimekiri lehist, miä ommaq su perräkaemisõ all. Märgiq ärq kastiq noidõ lehti iin, midä tahat perräkaemisõ alt ärq võttaq ja vaodaq nuppi "Võtaq validuq leheq perräkaemisõ alt ärq" (sisuga üten võetasõq maaha ka arotusleheq ja vastapiten).',
+'removingchecked'      => 'Lehti perräkaemisnimekiräst maahavõtminõ...',
+'couldntremove'        => "Saa-s lehte '$1' perräkaemisnimekiräst maaha võttaq",
+'iteminvalidname'      => "Hädä lehega '$1'! Lehe nimen om viga.",
+'wlnote'               => "Tan om '''$1''' {{PLURAL:$1|muutminõ|muutmist}} viimädse '''$2''' tunni ao seen.",
+'wlshowlast'           => 'Näütäq viimädseq $1 tunni $2 päivä $3',
+'wlsaved'              => 'Taa om su perräkaemisnimekirä pästet kujo.',
+'watchlist-show-bots'  => 'Näütäq robotidõ toimõnduisi',
+'watchlist-hide-bots'  => 'Näüdäku-i robotidõ toimõnduisi',
+'watchlist-show-own'   => 'Näütäq muq toimõnduisi',
+'watchlist-hide-own'   => 'Näüdäku-i muq toimõnduisi',
+'watchlist-show-minor' => "Näütäq tsill'okõisi muutmiisi",
+'watchlist-hide-minor' => "Näüdäku-i tsill'okõisi muutmiisi",
+'wldone'               => 'Muutmisõq tettüq.',
+
+# Displayed when you click the "watch" button and it's in the process of watching
+'watching'   => 'Pandas perräkaemisnimekirjä...',
+'unwatching' => 'Võetas perräkaemisõ alt maaha...',
+
+'enotif_mailer'      => '{{SITENAME}} lehe muutumisteedüs',
+'enotif_reset'       => 'Märgiq kõik leheq ülekaetuis',
+'enotif_newpagetext' => 'Taa om vahtsõnõ leht.',
+'changed'            => 'lehte muutnuq',
+'created'            => 'lehe loonuq',
+'enotif_subject'     => '$PAGEEDITOR om $CHANGEDORCREATED $PAGETITLE',
+'enotif_lastvisited' => 'Lehel $1 ommaq kõik päält suq perämäst käümist tettüq muutmisõq.',
+'enotif_body'        => 'Hüä $WATCHINGUSERNAME,
+
+{{SITENAME}} lehte $PAGETITLE $CHANGEDORCREATED $PAGEEDITDATE $PAGEEDITOR, parhillast kujjo kaeq $PAGETITLE_URL.
+
+$NEWPAGE
+
+Muutja kokkovõtõq: $PAGESUMMARY $PAGEMINOREDIT
+
+Kirodaq muutjalõ:
+e-post: $PAGEEDITOR_EMAIL
+viki: $PAGEEDITOR_WIKI
+
+Inämb seo lehe kotsilõ teedäqandmiisi saadõta-i. Võit ka kõik su perräkaetavidõ lehti muutmisõ kuulutusõq ärq keeldäq. 
+
+{{SITENAME}} teedäqandmiskõrraldus 
+
+Perräkaemisnimekirä säädmiisi saat muutaq lehe pääl: {{fullurl:Special:Watchlist/edit}} 
+
+As\'a kotsilõ mano kaiaq ja küssü saat lehe päält: {{fullurl:{{MediaWiki:helppage}}}}',
+
+# Delete/protect/revert
+'deletepage'                  => 'Kistudaq lehekülg ärq',
+'confirm'                     => 'Kinnüdäq',
+'excontent'                   => "sisu oll': '$1'",
+'excontentauthor'             => "sisu oll': '$1' (ja ainugõnõ toimõndaja oll' '[[Special:Contributions/$2|$2]]')",
+'exbeforeblank'               => "inne tühästegemist oll': '$1'",
+'exblank'                     => "leht oll' tühi",
+'confirmdelete'               => 'Kinnüdäq kistutamist',
+'deletesub'                   => '(Kistuda ärq leheküle "$1")',
+'historywarning'              => 'Hoiatus: Lehel, midä tahat ärq kistutaq, om olõman aolugu:',
+'confirmdeletetext'           => 'Sa kistutat teedüskogost periselt ärq lehe vai pildi üten kõgõ timä aoluuga. Kinnüdäq, et sa tahat tuud tõtõstõ tetäq, et sa saat arvo, miä tuust tullaq või ja et tuu, miä sa tiit, klapis [[{{ns:Special}}:Policy|sisekõrraga]].',
+'actioncomplete'              => 'Tallitus valmis',
+'deletedtext'                 => '"$1" om ärq kistutõt.
+Perämäidsi kistutuisi nimekirjä näet siist: $2.',
+'deletedarticle'              => '"$1" kistutõt',
+'dellogpage'                  => 'Kistutõduq leheküleq',
+'dellogpagetext'              => 'Naaq ommaq perämädseq kistutamisõq.
+Kelläaoq ummaq serveriao perrä (UTC).',
+'deletionlog'                 => 'Kistutõduq leheküleq',
+'reverted'                    => 'Minti tagasi vana kujo pääle',
+'deletecomment'               => 'Kistutamisõ põhjus',
+'imagereverted'               => "Vana kujo pääle tagasiminek läts' kõrda.",
+'rollback'                    => 'Mineq tagasi vana kujo pääle',
+'rollback_short'              => 'Võtaq tagasi',
+'rollbacklink'                => 'võtaq tagasi vana kujo',
+'rollbackfailed'              => 'Muutmiisi tagasivõtminõ lää-s kõrda',
+'cantrollback'                => 'Saa-i muutmiisi tagasi pöördäq; viimäne muutja om lehe ainugõnõ toimõndaja.',
+'alreadyrolled'               => 'Pruukja [[User:$2|$2]] ([[User_talk:$2|arotus]]) tettüid lehe $1 muutmiisi saa-i tagasi võttaq, selle et pruukja [[User:$3|$3]] ([[User_talk:$3|arotus]]) om tennüq vahtsõmbit muutmiisi.',
+'editcomment'                 => 'Toimõndamiskokkovõtõq oll\': "<i>$1</i>".', # only shown if there is an edit comment
+'revertpage'                  => 'Pruukja [[Special:Contributions/$2|$2]] ([[User_talk:$2|arotus]]) toimõndusõq pöörediq tagasi ja leht panti tagasi pruukja [[User:$1|$1]] tettü kujo pääle.',
+'sessionfailure'              => 'Paistus ollõv määnegi hädä su toimõndamiskõrraga, tuuperäst om viimäne muutminõ egäs johtumisõs jätet tegemäldä. Vaodaq võrgokaeja "tagasi"-nuppi, laadiq üle lehekülg, kost sa tullit ja prooviq vahtsõst.',
+'protectlogpage'              => 'Lehti kaitsmiisi nimekiri',
+'protectlogtext'              => 'Tan om nimekiri lehti kaitsmiisist ja kaitsmisõ maahavõtmiisist. Parhilla kaitsõ all olõvidõ lehti nimekirä lövvät [[Special:Protectedpages|tast]].',
+'protectedarticle'            => 'pand\' lehe "[[$1]]" kaitsõ ala',
+'unprotectedarticle'          => 'võtt\' lehe "[[$1]]" kaitsõ alt maaha',
+'protectsub'                  => 'Lehe "$1" kaitsminõ',
+'confirmprotecttext'          => 'Kas tahat tõtõstõ taa lehe kaitsõ ala pandaq?',
+'confirmprotect'              => 'Kinnüdäq kaitsõ ala pandmist',
+'protectmoveonly'             => 'Kaidsaq õnnõ tõistõ paika pandmisõ iist',
+'protectcomment'              => 'Kaitsõ ala pandmisõ põhjus',
+'protectexpiry'               => 'Tähtaig',
+'protect_expiry_invalid'      => 'Kõlbmaldaq tähtaig.',
+'protect_expiry_old'          => 'Tähtaig om joba läbi.',
+'unprotectsub'                => 'Lehe "$1" kaitsõ alt maahavõtminõ',
+'confirmunprotecttext'        => 'Kas tahat taa lehe tõtõstõ kaitsõ alt maaha võttaq?',
+'confirmunprotect'            => 'Kinnüdäq kaitsõ alt maahavõtmist',
+'unprotectcomment'            => 'Kaitsõ alt maahavõtmisõ põhjus',
+'protect-unchain'             => 'Pruugiq tõistõ paika pandmisõ kaidsõt',
+'protect-text'                => 'Tan saat kaiaq ja säädäq lehe <strong>$1</strong> kaitsmist.',
+'protect-locked-blocked'      => 'Kinniqpeetült saa-i kaitsmiisi muutaq. Tan ommaq lehe <strong>$1</strong> parhilladsõq säädmiseq:',
+'protect-locked-dblock'       => 'Kaitsmiisi saa-i muuta, selle et teedüskogo om lukun. Tan ommaq lehe <strong>$1</strong> parhilladsõq säädmiseq:',
+'protect-locked-access'       => 'Sul olõ-i õigust kaitsmiisi muutaq.
+Tan ommaq lehe <strong>$1</strong> parhilladsõq säädmiseq:',
+'protect-cascadeon'           => 'Taa leht om kaitsõ all, selle tä om taan kaidsõtuidõ lehti nimekirän. Võit muutaq taa lehe kaitsmiisi, a tä jääs tuugiperäst kaitsõ ala, selle et tä om taan nimekirän.',
+'protect-default'             => '(harilik)',
+'protect-level-autoconfirmed' => 'Piäq kinniq vahtsõq ja kirjäpandmalda pruukjaq',
+'protect-level-sysop'         => 'Õnnõ kõrraldajaq',
+'protect-summary-cascade'     => 'laendõt',
+'protect-expiring'            => 'tähtaig $1',
+'protect-cascade'             => 'Laendaq kaitsmist - võtaq kaitsõ ala kõik seo lehe pääl olõvaq leheq.',
+'restriction-type'            => 'Luba',
+'restriction-level'           => 'Piirdmisastõq',
+'minimum-size'                => 'Kõgõ vähämb maht (baidõn)',
+
+# Restrictions (nouns)
+'restriction-edit' => 'Toimõndus',
+'restriction-move' => 'Tõistõ paika pandminõ',
+
+# Restriction levels
+'restriction-level-sysop'         => 'tävveligult kaidsõt',
+'restriction-level-autoconfirmed' => 'puulkaidsõt',
+'restriction-level-all'           => 'kõik astmõq',
+
+# Undelete
+'undelete'                 => 'Tiiq kistutõt lehekülg tagasi',
+'undeletepage'             => 'Kistutõduidõ lehekülgi kaeminõ ja tagasitegemine',
+'viewdeletedpage'          => 'Kaeq kistutõduid lehti',
+'undeletepagetext'         => 'Naaq leheküleq ommaq ärq kistudõduq, a arhiivin
+viil olõman, naid saa tagasi tetäq niikavva ku naid olõ-i viil arhiivist ärq visat.',
+'undeleteextrahelp'        => 'Võtaq leht tagasi vaotõn nuppi  <b><i>Võtaq tagasi</i></b>. Võit lehe kujjõ valliq ja tagasi võttaq õnnõ nuuq kujoq, miä esiq vällä valit.',
+'undeleterevisions'        => 'Arhiivikujjõ om $1.',
+'undeletehistory'          => 'Ku tiit leheküle tagasi, tulõvaq kõik kujoq tagasi artikli
+aolukku. Ku vaihõpääl om luud vahtsõnõ sama nimega lehekülg, ilmusõq tagasitettüq kujoq vanõmba leheküle aoluun. Olõmanolõvat kujjo automaatsõhe vällä ei vaihtõdaq.',
+'undeleterevdel'           => 'Kistutõduist tagasituuminõ jätetäs tegemäldäq, ku tuuperäst kistus ärq mõni osa lehe kõgõ vahtsõmbast kujost. Ku om nii, sis tulõ vahtsõmbidõ kistudõduisi kujjõ märgistüs vai käkmine maaha võttaq. Sa saa-i kistutõduist tagasi tetäq ka teddüstükujjõ, midä sul olõ-i õigust nätäq.',
+'undeletehistorynoadmin'   => 'Taa leht om ärq kistutõt. Kistutamisõ põhjust näet kokkovõttõn, kost om nätäq ka tuu, kiä ommaq taad lehte toimõndanuq inne kistutamist. Taa lehe sissu saavaq kaiaq õnnõ kõrraldajaq.',
+'undelete-revision'        => 'Kistutõt kujo $1 aost $2',
+'undeleterevision-missing' => 'Viganõ vai olõmaldaq kujo. Taa või ollaq tagasi tett vai arhiivist ärq kistutõt.',
+'undeletebtn'              => 'Tiiq tagasi',
+'undeletereset'            => 'Tiiq tühäs',
+'undeletecomment'          => 'Kommõntaar:',
+'undeletedarticle'         => '"$1" tagasi tett',
+'undeletedrevisions'       => '$1 {{plural:$1|kujo|kujjo}} tagasi tett',
+'undeletedrevisions-files' => '$1 {{plural:$1|kujo|kujjo}} ja $2 {{plural:$2|teedüstü|teedüstüt}} tagasi tett',
+'undeletedfiles'           => '$1 {{plural:$1|teedüstü|teedüstüt}} tagasi tett',
+'cannotundelete'           => 'Tagasitegemine lää-s kõrda; kiäki tõõnõ või-ollaq lehe jo tagasi tennüq.',
+'undeletedpage'            => "<big>'''$1 om tagasi tett'''</big>
+
+Perämäidsi kistutuisi ja tagasitegemiisi saat kaiaq [[Special:Log/delete|kistutamiisi nimekiräst]].",
+'undelete-header'          => 'Perämäidsi kistutuisi saat kaiaq [[Special:Log/delete|kistutamiisi nimekiräst]].',
+'undelete-search-box'      => 'Otsiq kistutõduid lehekülgi',
+'undelete-search-prefix'   => 'Näütäq lehti, miä nakkasõq pääle:',
+'undelete-search-submit'   => 'Otsiq',
+'undelete-no-results'      => 'Kistutamiisi nimekiräst lövvetä-s säänest lehte.',
+
+# Namespace form on various pages
+'namespace' => 'Nimeruum:',
+'invert'    => 'Näütäq kõiki päält validu nimeruumi',
+
+# Contributions
+'contributions' => 'Pruukja kirotusõq',
+'mycontris'     => 'Mu kirotusõq',
+'contribsub2'    => 'Pruukja "$1 ($2)" kirotusõq',
+'nocontribs'    => 'Sääntsit muutmiisi es lövväq.',
+'ucnote'        => 'Näüdätäseq taa pruukja tettüid <b>$1</b> viimäst muutmist viimädse <b>$2</b> päävä seen.',
+'uclinks'       => 'Näütäq viimäst $1 muutmist; viimädse $2 päävä seen.',
+'uctop'         => ' (kõgõ vahtsõmb)',
+
+'sp-contributions-newest'      => 'Kõgõ vahtsõmbaq',
+'sp-contributions-oldest'      => 'Kõgõ vanõmbaq',
+'sp-contributions-newer'       => '← $1 vahtsõmbat',
+'sp-contributions-older'       => '$1 vanõmbat →',
+'sp-contributions-newbies'     => 'Näütäq õnnõ vahtsidõ pruukjidõ toimõnduisi',
+'sp-contributions-newbies-sub' => 'Vahtsidõ pruukjidõ toimõndusõq',
+'sp-contributions-blocklog'    => 'Kinniqpidämisnimekiri',
+'sp-contributions-search'      => 'Otsiq muutmiisi',
+'sp-contributions-username'    => 'Puutri võrgoaadrõs vai pruukjanimi:',
+'sp-contributions-submit'      => 'Otsiq',
+
+'sp-newimages-showfrom' => 'Näütäq vahtsit pilte kuupääväst $1 pääle',
+
+# What links here
+'whatlinkshere'      => 'Siiäq näütäjäq lingiq',
+'notargettitle'      => 'Otsitut lehte olõ-i',
+'notargettext'       => 'Sa olõ-i andnuq lehte ega pruukjat, minka taad tallitust tetäq.',
+'linklistsub'        => '(Linke nimekiri)',
+'linkshere'          => 'Lehe <b>[[:$1]]</b> pääle näütäseq lingiq lehti päält:',
+'nolinkshere'        => 'Lehe <b>[[:$1]]</b> pääle näütä-i linke ütegi lehe päält.',
+'nolinkshere-ns'     => "Valitun nimeruumin näütä-i ütegi lehe päält linke lehe '''[[:$1]]''' pääle.",
+'isredirect'         => 'ümbresaatmislehekülg',
+'istemplate'         => 'pruugit näüdüssen',
+'whatlinkshere-prev' => '← {{PLURAL:$1|mineväne leht|$1 mineväst lehte}}',
+'whatlinkshere-next' => '{{PLURAL:$1|mineväne leht|$1 mineväst lehte}} →',
+
+# Block/unblock
+'blockip'                     => 'Piäq puutri võrgoaadrõs kinniq',
+'blockiptext'                 => "Taa vorm om kimmä puutri võrgoaadrõsi päält tettüisi kirotuisi kinniqpidämises. '''Taad tohis tetäq õnnõ lehti ts'urkmisõ vasta ni [[{{MediaWiki:policy-url}}|{{SITENAME}} sisekõrra perrä]]'''. Kimmähe tulõ täütäq ka rida \"põhjus\". Sinnäq võinuq pandaq nt lingiq noilõ lehile, midä rikuti.",
+'ipaddress'                   => 'Puutri võrgoaadrõs (IP)',
+'ipadressorusername'          => 'Puutri võrgoaadrõs vai pruukjanimi',
+'ipbexpiry'                   => 'Tähtaig',
+'ipbreason'                   => 'Põhjus',
+'ipbanononly'                 => 'Piäq kinniq õnnõ ilma nimeldä pruukjaq',
+'ipbcreateaccount'            => 'Lasku-i pruukjanimme luvvaq',
+'ipbenableautoblock'          => 'Piäq kinniq viimäne puutri võrgoaadrõs, kost pruukja om toimõnduisi tennüq, ja edespiten aadrõsiq, kost tä viil pruuv toimõnduisi tetäq.',
+'ipbsubmit'                   => 'Piäq taa aadrõs kinniq',
+'ipbother'                    => 'Muu tähtaig',
+'ipboptions'                  => '15 minotit:15 minutes,1 päiv:1 day,3 päivä:3 days,1 nätäl:1 week,2 nädälit:2 weeks,1 kuu:1 month,3 kuud:3 months,6 kuud:6 months,1 aastak:1 year,igävene:infinite',
+'ipbotheroption'              => 'Muu tähtaig',
+'ipbhidename'                 => 'Käkiq pruukjanimi vai puutri võrgoaadrõs ärq kinniqpidämis-, toimõndus-, ja pruukjanimekiräst',
+'badipaddress'                => 'Puutri võrgoaadrõs om võlssi kirotõt.',
+'blockipsuccesssub'           => 'Kinniqpidämine läts kõrda',
+'blockipsuccesstext'          => 'Puutri võrgoaadrõs "$1" om kinniq peet.
+<br />Kõik parhilladsõq kinniqpidämiseq lövvät [[Special:Ipblocklist|kinniqpidämiisi nimekiräst]].',
+'ipb-unblock-addr'            => 'Lõpõdaq pruukja $1 kinniqpidämine ärq',
+'ipb-unblock'                 => 'Lõpõdaq pruukja vai puutri võrgoaadrõasi kinniqpidämine ärq',
+'ipb-blocklist-addr'          => 'Näütäq pruukja $1 kinniqpidämiisi',
+'ipb-blocklist'               => 'Näütäq kinnniqpidämiisi',
+'unblockip'                   => 'Lõpõdaq puutri võrgoaadrõsi kinniqpidämine ärq',
+'unblockiptext'               => 'Täüdäq ärq taa vorm, et lõpõtaq ärq pruukja vai puutri võrgoaadrõsi kinniqpidämine',
+'ipusubmit'                   => 'Lõpõdaq kinniqpidämine ärq',
+'unblocked'                   => 'Pruukja [[User:$1|$1]] kinniqpidämine om ärq lõpõtõt',
+'ipblocklist'                 => 'Kinniqpeetüisi IP-aadrõssidõ nimekiri',
+'ipblocklist-submit'          => 'Otsiq',
+'blocklistline'               => '$1 — $2 om kinniq pidänüq pruukja $3 ($4)',
+'infiniteblock'               => 'igäveste',
+'expiringblock'               => 'tähtaig om $1',
+'anononlyblock'               => 'õnnõ nimeldä pruukjaq',
+'noautoblockblock'            => 'automaatsõ kinniqpidämiseldä',
+'createaccountblock'          => 'pruukjanime luuminõ kinniq pant',
+'ipblocklistempty'            => 'Kinniqpidämiisi nimekiri om tühi (vai olõ-i otsitut aadrõssit vai pruukjanimme kinniq peet).',
+'blocklink'                   => 'piäq kinniq',
+'unblocklink'                 => 'võtaq kinniqpidämine maaha',
+'contribslink'                => 'kirotusõq',
+'autoblocker'                 => 'Olõt automaatsõhe kinniq peet, selle et jaat puutri võrgoaadrõssit pruukjaga $1. Kinniqpidämise põhjus: $2.',
+'blocklogpage'                => 'Kinniqpidämiisi nimekiri',
+'blocklogentry'               => 'pidi kinniq pruukja vai puutri võrgoaadrõsi "[[$1]]". Kinniqpidämise tähtaig $2 $3',
+'blocklogtext'                => 'Taa om kinniqpidämiisi ja naidõ maahavõtmiisi nimekiri. Automaatsõhe kinniqpeetüisi puutridõ võrgoaadrõssiid tan näüdätä-i, noid kaeq [[Special:Ipblocklist|puutridõ võrgoaadrõssidõ kinniqpidämise nimekiräst]].',
+'unblocklogentry'             => "lõpõt' pruukja $1 kinniqpidämise ärq",
+'block-log-flags-anononly'    => 'õnnõ nimeldä pruukjaq',
+'block-log-flags-nocreate'    => 'pruukjanime luuminõ kinniq peet',
+'block-log-flags-noautoblock' => 'automaatnõ kinniqpidämine maaha võet',
+'range_block_disabled'        => 'Kõrraldaja kinniqpidämisõigusõq olõ-i masma pantuq',
+'ipb_expiry_invalid'          => 'Viganõ tähtaig.',
+'ipb_already_blocked'         => '"$1" om jo kinniq peet',
+'ip_range_invalid'            => 'Viganõ puutri võrgoaadrõsi kujo.',
+'proxyblocker'                => 'Vaihõserveri kinniqpidämine',
+'ipb_cant_unblock'            => 'Lövvä-s kinniqpidämist $1. Taa või ollaq jo maaha võet.',
+'proxyblockreason'            => "Su puutri võrgoaadrõs om kinniq peet, selle et taa om avalik vaihõserver. Otsiq üles uma võrgoliini pakja vai puutrias'atundja ja kõnõlõq näile taast hädäst.",
+'proxyblocksuccess'           => 'Valmis.',
+'sorbs'                       => 'SORBS-i must nimekiri (DNSBL)',
+'sorbsreason'                 => 'Su puutri võrgoaadrõs om SORBS-i mustan nimekirän ku avalik vaihõserver.',
+'sorbs_create_account_reason' => 'Su puutri võrgoaadrõs om pant SORBS-i musta nimekirjä ku avalik vaihõserver. Sa saa-i pruukjanimme tetäq',
+
+# Developer tools
+'lockdb'              => 'Panõq teedüskogo lukku',
+'unlockdb'            => 'Tiiq teedüskogo lukust vallalõ',
+'lockdbtext'          => 'Teedüskogo lukkupandminõ lasõ-i pruukjil lehti ja perräkaemisnimekirjo toimõndaq, säädmiisi vaihtaq ega muid teedüskoko muutvit tallituisi tetäq. Olõq hää ja kinnüdäq, et sa tahat taad tetäq ja et sa lasõt teedüskogo vallalõ, ku olõt umaq tarvilidsõq tallitusõq ärq tennüq.',
+'unlockdbtext'        => 'Ku teedüskogo vallalõ laskõq, saavaq pruukjaq lehti ja perräkaemisnimekirjo toimõndaq, vaihtaq säädmiisi ja tetäq muid teedüskoko muutvit tallituisi. Olõq hää ja kinnüdäq, et sa tahat taad tetäq.',
+'lockconfirm'         => 'Jah, ma taha tõtõstõ teedüskogo lukku pandaq.',
+'unlockconfirm'       => 'Jah, ma taha tõtõstõ teedüskogo lukust vallalõ laskõq.',
+'lockbtn'             => 'Panõq teedüskogo lukku',
+'unlockbtn'           => 'Lasõq teedüskogo lukust vallalõ',
+'locknoconfirm'       => 'Sa olõ-i kinnütüskasti ärq märknüq.',
+'lockdbsuccesssub'    => 'Teedüskogo om lukun',
+'unlockdbsuccesssub'  => 'Teedüskogo om vallalõ',
+'lockdbsuccesstext'   => 'Teedüskogo om noq lukun.
+<br />Ku su huuldustüü saa tettüs, sis unõhtagu-i teedüskoko jälq lukust vallalõ laskõq!',
+'unlockdbsuccesstext' => 'Teedüskogo om lukust vallalõ last.',
+'lockfilenotwritable' => 'Saa-i kirotaq teedüskogo lukkupandmisõ teedüstüt. Kaeq üle, kas sul om tuus õigus.',
+'databasenotlocked'   => 'Teedüskoko panda-s lukku.',
+
+# Move page
+'movepage'                => 'Nõstaq artikli tõistõ paika',
+'movepagetext'            => "Taad vormi pruukin saat lehe ümbre nimetäq. Lehe aolugu pandas kah vahtsõ päälkirä ala. Vana päälkiräga lehest saa vahtsõ lehe pääle ümbresaatmisõ leht. Tõisin artikliin olõvit linke, miä näütäseq vana nimega lehe pääle, ärq ei muudõdaq. Sa piät kaema, et es tulnuq katõkõrdsit ümbresaatmiisi ni et kõik jäänüq tüütämä nigu inne ümbrenimetämist. Lehte '''nimetedä-i ümbre''', ku vahtsõ nimega leht om jo olõman. Erängus om tuu, ku vana leht om tühi vai om esiq ümbresaatmisleht ja täl olõ-i toimõndamisaoluku. Tuu tähendäs, et sa saa-i kogõmalda üle kirotaq jo olõmanolõvat lehte, a saat halvastõ lännü ümbrenimetämise tagasi pöördäq. <strong>KAEQ ETTE!</strong> Või ollaq, et sa nakkat tegemä suurt ja uutmalda muutmist väega loetavahe artiklihe; inne, ku midä muudat, märgiq perrä, miä tuust tullaq või.",
+'movepagetalktext'        => "Üten artiklilehekülega pandas tõistõ paika ka arotuskülg, '''vällä arvat sis, ku:'''
+*panõt lehe ütest nimeruumist tõistõ,
+*vahtsõ nime all om jo olõman arotuskülg, kohe om jo midägi kirotõt, vai ku
+*jätät alomadsõ kastikõsõ märgistämäldäq.
+
+Kui om nii, sis panõq vana arotuskülg eräle vai panõq taa kokko vahtsõ arotuskülega.",
+'movearticle'             => 'Panõq artiklilehekülg tõistõ paika',
+'movenologin'             => 'Sa olõ-i nimega sisse lännüq',
+'movenologintext'         => 'Et lehekülge tõistõ paika pandaq, piät hindä pruukjas kirjä pandma ja [[Special:Userlogin|nimega sisse minemä]]',
+'newtitle'                => 'Vahtsõ päälkirä ala',
+'move-watch'              => 'Kaeq taa lehe perrä',
+'movepagebtn'             => 'Panõq artikli tõistõ paika',
+'pagemovedsub'            => 'Artikli om tõistõ paika pant',
+'pagemovedtext'           => 'Artikli "[[$1]]" om pant päälkirä "[[$2]]" ala.',
+'articleexists'           => 'Sääntse nimega artikli om jo olõman vai olõ-i lubat säänest nimme valliq. Valiq vahtsõnõ nimi.',
+'talkexists'              => 'Artikli om tõistõ paika pant, a arotuslehekülge saa-s pandaq, selle et vahtsõ nime all om jo arotuskülg. Panõq arotusküleq esiq kokko.',
+'movedto'                 => 'Pant päälkirä ala:',
+'movetalk'                => 'Panõq ka "arotus", ku saa.',
+'talkpagemoved'           => 'Arotuslehekülg om kah tõistõ paika pant.',
+'talkpagenotmoved'        => 'Arotuslehekülg jäi tõistõ paika pandmaldaq.',
+'1movedto2'               => "pand' lehe [[$1]] vahtsõ nime [[$2]] ala",
+'1movedto2_redir'         => "pand' lehe [[$1]] ümbresaatmislehe [[$2]] pääle",
+'movelogpage'             => 'Tõistõ paika pandmiisi nimekiri',
+'movelogpagetext'         => 'Taa om lehti tõistõ paika pandmiisi nimekiri.',
+'movereason'              => 'Põhjus',
+'revertmove'              => 'võtaq tagasi',
+'delete_and_move'         => 'Kistudaq tsihtlehekülg ärq ja panõq timä asõmalõ taa leht',
+'delete_and_move_text'    => 'Tsihtlehekülg  "[[$1]]" om jo olõman, kas tahat tuu ärq kistutaq, et taa leht timä asõmalõ pandaq?',
+'delete_and_move_confirm' => 'Jah, kistudaq tuu leht ärq',
+'delete_and_move_reason'  => 'Ärq kistutõt, et tõõnõ timä asõmalõ pandaq',
+'selfmove'                => 'Lätte- ja tsihtnimi ommaq samaq; saa-i lehte timä hindä pääle pandaq.',
+'immobile_namespace'      => 'Taaha nimeruumi saa-i lehti pandaq.',
+
+# Export
+'export'            => 'Lehti viimine',
+'exporttext'        => 'Võit viiäq lehti teksti ja toimõndusaoluu [[Special:Import|üleviimislehe]] kaudu XML-moodun tõistõ MediaWiki kõrra peri tüütäjähe vikihte.
+
+Kirodaq taaha kasti lehti päälkiräq, kost tahat sissu üle viiäq, egä ria pääle üts, ja valiq, kas tahat viiäq lehe kõiki kujjõ vai õnnõ kõgõ vahtsõmbat.
+
+Viimädse johtumisõ kõrral võit ka pruukiq linki, nt leht {{MediaWiki:mainpage}} saa viidüs lingiga 
+[[{{ns:Special}}:Export/{{MediaWiki:mainpage}}]].',
+'exportcuronly'     => 'Võtku-i kõiki kujjõ, a õnnõ kõgõ vahtsõmb',
+'exportnohistory'   => "----
+'''Viga:''' Tulõ-i lehti terve aoluu viimisega toimõ.",
+'export-submit'     => 'Viiq',
+'export-addcattext' => 'Võtaq leheq katõgooriast:',
+'export-addcat'     => 'Panõq mano',
+
+# Namespace 8 related
+'allmessages'               => 'Tallitusteedüseq',
+'allmessagesname'           => 'Nimi',
+'allmessagesdefault'        => 'Vaikimiisi tekst',
+'allmessagescurrent'        => 'Parhillanõ tekst',
+'allmessagestext'           => 'Taan nimekirän ommaq kõik MediaWiki nimeruumi tallitusteedüseq.',
+'allmessagesnotsupportedUI' => 'Säänest pruukjapalgõ kiilt nigu <b>$1</b> saa-i parhilla taan MediaWikin pruukiq.',
+'allmessagesnotsupportedDB' => 'Taad lehte saa-i pruukiq, selle et <tt>$wgUseDatabaseMessages</tt>-säädmine om välän.',
+'allmessagesfilter'         => 'Teedüsenimmi sõgluminõ:',
+'allmessagesmodified'       => 'Näütäq õnnõ muudõtuid',
+
+# Thumbnails
+'thumbnail-more'           => 'Suurõndaq',
+'missingimage'             => '<b>Olõ-i pilti</b><br /><i>$1</i>',
+'filemissing'              => 'Olõ-i teedüstüt',
+'thumbnail_error'          => 'Väikupildi luuminõ lää-s kõrda: $1',
+'djvu_page_error'          => 'DjVu lehe viga',
+'djvu_no_xml'              => 'Saa-s DjVu-teedüstü jaos XML-i kätte',
+'thumbnail_invalid_params' => 'Võlss väikupildi parametriq',
+'thumbnail_dest_directory' => 'Saa-i tsihtkausta luvvaq',
+
+# Special:Import
+'import'                     => 'Tuuq lehti',
+'importinterwiki'            => 'Tuuq lehti tõõsõst vikist',
+'import-interwiki-text'      => 'Valiq viki ja lehe nimi. Kujjõ kuupääväq ja toimõndajidõ nimeq hoiõtasõq alalõ. Kõik tõisist vikidest tuumisõq pandasõq kirjä [[Special:Log/import|tuumiisi nimekirjä]].',
+'import-interwiki-history'   => 'Kopiq lehe terveq aolugu',
+'import-interwiki-submit'    => 'Tuuq',
+'import-interwiki-namespace' => 'Panõq leheq nimeruumi:',
+'importtext'                 => 'Viiq lättevikist lehti [[Special:Export|viimis]]-tüüriistaga. Pästäq teedüs nii uman puutrin ku siin.',
+'importstart'                => 'Tuvvas lehti...',
+'import-revision-count'      => '$1 {{PLURAL:$1|kujo|kujjo}}',
+'importnopages'              => 'Olõ-i lehti, midä tuvvaq.',
+'importfailed'               => 'Tuuminõ lää-s kõrda: $1',
+'importunknownsource'        => 'Tundmaldaq tuumisõ lättetüüp',
+'importcantopen'             => 'Saa-s tuudut teedüstüt vallalõ',
+'importbadinterwiki'         => 'Kõlbmalda vikidevaihõlinõ link',
+'importnotext'               => 'Tühi vai tekstildä',
+'importsuccess'              => "Tuuminõ läts' kõrda!",
+'importhistoryconflict'      => 'Lehest om olõman tuuduga vastaolon kujo. Taad lehte või ollaq jo inne tuud.',
+'importnosources'            => 'Olõ-i vikidevaihõliidsi tuumislättit ja aoluu õkva pästmine tüütä-i.',
+'importnofile'               => 'Olõ-i üttegi tuudut teedüstüt.',
+'importuploaderror'          => "Teedüstü saatminõ lää-s kõrda. Teedüstü või ollaq pall'o suur.",
+
+# Import log
+'importlogpage'                    => 'Tuumiisi nimekiri',
+'importlogpagetext'                => 'Tõisist vikidest tuuduisi lehti nimekiri.',
+'import-logentry-upload'           => 'tõi lehe [[$1]] saatõn teedüstü',
+'import-logentry-upload-detail'    => '$1 {{PLURAL:$1|kujo|kujjo}}',
+'import-logentry-interwiki'        => 'tõi tõõsõst vikist lehe ”$1”',
+'import-logentry-interwiki-detail' => '$1 {{PLURAL:$1|kujo|kujjo}} lehest $2',
+
+# Tooltip help for the actions
+'tooltip-pt-userpage'             => 'Mu pruukjaleht',
+'tooltip-pt-anonuserpage'         => 'Su puutri võrgoaadrõsi pruukjaleht',
+'tooltip-pt-mytalk'               => 'Mu arotuskülg',
+'tooltip-pt-anontalk'             => 'Arotus taa puutri võrgoaadrõsi päält tettüisi toimõnduisi üle',
+'tooltip-pt-preferences'          => 'Mu säädmiseq',
+'tooltip-pt-watchlist'            => 'Nimekiri lehist, mil tahtnuq silmä pääl hoitaq',
+'tooltip-pt-mycontris'            => 'Mu ummi toimõnduisi nimekiri',
+'tooltip-pt-login'                => 'Mineq nimega sisse vai tiiq hindäle pruukjanimi (soovitav).',
+'tooltip-pt-anonlogin'            => 'Mineq nimega sisse vai tiiq hindäle pruukjanimi (soovitav).',
+'tooltip-pt-logout'               => 'Mineq nime alt vällä',
+'tooltip-ca-talk'                 => 'Arotus lehe sisu üle',
+'tooltip-ca-edit'                 => 'Saa võit taad lehte toimõndaq.',
+'tooltip-ca-addsection'           => 'Jätäq taalõ lehele kommõntaar.',
+'tooltip-ca-viewsource'           => 'Taa om kaidsõt leht. Saat kaiaq õnnõ taa lättekuudi.',
+'tooltip-ca-history'              => 'Taa lehe vanõmbaq kujoq.',
+'tooltip-ca-protect'              => 'Võtaq taa leht kaitsõ ala',
+'tooltip-ca-delete'               => 'Kistudaq taa leht ärq',
+'tooltip-ca-undelete'             => 'Tuuq taa leht kistutõduist tagasi',
+'tooltip-ca-move'                 => 'Panõq taa leht tõistõ paika',
+'tooltip-ca-watch'                => 'Panõq taa leht umma perräkaemisnimekirjä',
+'tooltip-ca-unwatch'              => 'Võtaq taa leht perräkaemisnimekiräst maaha',
+'tooltip-search'                  => 'Otsiq vikist {{SITENAME}}',
+'tooltip-p-logo'                  => 'Pääleht',
+'tooltip-n-mainpage'              => 'Mineq päälehele',
+'tooltip-n-portal'                => 'Taa viki arotusõkotus',
+'tooltip-n-currentevents'         => 'Tiidmist tuu kotsilõ, miä parhilla sünnüs',
+'tooltip-n-recentchanges'         => 'Perämäidsi muutmiisi nimekiri',
+'tooltip-n-randompage'            => 'Tiiq vallalõ johuslinõ lehekülg',
+'tooltip-n-help'                  => 'Abiotsmisõ kotus',
+'tooltip-n-sitesupport'           => 'Tukõq mi tüüd',
+'tooltip-t-whatlinkshere'         => 'Siiäq näütäjide linkega lehti nimekiri',
+'tooltip-t-recentchangeslinked'   => 'Viimädseq muutmisõq lehile, mink pääle näüdätäs linkega seo lehe päält',
+'tooltip-feed-rss'                => 'Taa lehe RSS-kujo',
+'tooltip-feed-atom'               => 'Taa lehe Atom-kujo',
+'tooltip-t-contributions'         => 'Näütäq taa pruukja toimõnduisi nimekirjä',
+'tooltip-t-emailuser'             => 'Saadaq taalõ pruukjalõ e-kiri',
+'tooltip-t-upload'                => 'Panõq mano pilte vai meediäteedüstüid',
+'tooltip-t-specialpages'          => 'Näütäq tallituslehekülgi',
+'tooltip-ca-nstab-main'           => 'Näütäq sisulehekülge',
+'tooltip-ca-nstab-user'           => 'Näütäq pruukjalehekülge',
+'tooltip-ca-nstab-media'          => 'Näütäq meediälehekülge',
+'tooltip-ca-nstab-special'        => 'Taa om tallituslehekülg',
+'tooltip-ca-nstab-project'        => 'Näütäq projektilehekülge',
+'tooltip-ca-nstab-image'          => 'Näütäq pildilehekülge',
+'tooltip-ca-nstab-mediawiki'      => 'Näütäq tallitusteedüst',
+'tooltip-ca-nstab-template'       => 'Näütäq näüdüst',
+'tooltip-ca-nstab-help'           => 'Näütäq abilehekülge',
+'tooltip-ca-nstab-category'       => 'Näütäq katõgoorialehekülge',
+'tooltip-minoredit'               => "Märgiq taa ärq ku tsill'okõnõ muutminõ",
+'tooltip-save'                    => 'Pästäq muutmisõq',
+'tooltip-preview'                 => 'Kaeq umaq toimõndusõq inne pästmist üle!',
+'tooltip-diff'                    => 'Näütäq tettüid muutmiisi',
+'tooltip-compareselectedversions' => 'Näütäq seo lehe valituidõ kuiõ lahkominekit.',
+'tooltip-watch'                   => 'Panõq taa leht umma perräkaemisnimekirjä',
+'tooltip-recreate'                => 'Tuuq taa leht kisutõduist tagasi',
+
+# Stylesheets
+'common.css'   => '/* Taa lehe pääl om tervet taad vikit muutvit kujonduisi */',
+'monobook.css' => '/* Taa lehe pääl om Monobook-vällänägemist muutvit kujonduisi. */',
+
+# Scripts
+'common.js'   => '/* Taa lehe kuud pandas mano egäle lehelaatmisõlõ */',
+'monobook.js' => '/* Olõi soovitõt; pruugiq [[MediaWiki:common.js]] */',
+
+# Metadata
+'nodublincore'      => 'Taan serverin olõ-i Dublin Core RDF-metateedüst tüüle pant.',
+'nocreativecommons' => 'Taan serverin olõ-i Creative Commonsi RDF-metateedüst tüüle pant.',
+'notacceptable'     => 'Wikiserver saa-i näüdädäq teedüst sääntsen moodun, midä su programm saasiq lukõq.',
+
+# Attribution
+'anonymous'        => '{{SITENAME}} nimeldäq pruukjaq',
+'siteuser'         => '{{SITENAME}} pruukja $1',
+'lastmodifiedatby' => "Taad lehte toimõnd' viimäte ”$3” $2 kell $1.", # $1 date, $2 time, $3 user
+'and'              => 'ja',
+'othercontribs'    => 'Tennüq pruukja $1.',
+'others'           => 'tõõsõq',
+'siteusers'        => '{{SITENAME}} pruukja(q) $1',
+'creditspage'      => 'Lehe tegijide nimekiri',
+'nocredits'        => 'Taa lehe tegijide nimekirjä olõ-i.',
+
+# Spam protection
+'spamprotectiontitle'    => 'Prahisõgõl',
+'spamprotectiontext'     => 'Prahisõgõl om lehe kinniq pidänüq ja lasõ-i taad pästäq. Tuu põhjus om arvadaq vikist välläpoolõ näütäjä link.',
+'spamprotectionmatch'    => 'Tekst, midä prahisõgõl läbi lasõ-s: $1',
+'subcategorycount'       => 'Seol katõgoorial om {{PLURAL:$1|üts allkatõgooria|$1 allkatõgooriat}}.',
+'categoryarticlecount'   => 'Seon katõgoorian om {{PLURAL:$1|üts leht|$1 lehte}}.',
+'category-media-count'   => 'Seon katõgoorian om {{PLURAL:$1|üts teedüstü|$1 teedüstüt}}.',
+'listingcontinuesabbrev' => 'lätt edesi',
+'spambot_username'       => 'MediaWiki prahihäötäjä',
+'spam_reverting'         => 'Tagasi pööret viimädse kujo pääle, koh olõ-i linke lehele $1',
+'spam_blanking'          => "Kõigin kujõn oll' linke lehele $1. Leht tühäs tett.",
+
+# Info page
+'infosubtitle'   => 'Teedüs lehe kotsilõ',
+'numedits'       => 'Lehele tettüid toimõnduisi: $1',
+'numtalkedits'   => 'Arotuskülele tettüid toimõnduisi: $1',
+'numwatchers'    => 'Perräkaejit: $1',
+'numauthors'     => 'Lehele eräle kirotajit: $1',
+'numtalkauthors' => 'Arotuskülele eräle kirotajit: $1',
+
+# Math options
+'mw_math_png'    => 'Kõgõ PNG',
+'mw_math_simple' => 'Ku väega lihtsä, sis HTML, muido PNG',
+'mw_math_html'   => 'Ku saa, sis HTML, muido PNG',
+'mw_math_source' => 'Alalõ hoitaq TeX (tekstikaejin)',
+'mw_math_modern' => 'Vahtsõmbilõ võrgokaejilõ soovitõt',
+'mw_math_mathml' => 'MathML',
+
+# Patrolling
+'markaspatrolleddiff'                 => 'Märgiq ülekaetus',
+'markaspatrolledtext'                 => 'Märgiq toimõndus ülekaetus',
+'markedaspatrolled'                   => 'Märgit ülekaetus',
+'markedaspatrolledtext'               => 'Valit kujo om üle kaet.',
+'rcpatroldisabled'                    => 'Vahtsidõ muutmiisi ülekaemist olõ-i tüüle säet.',
+'rcpatroldisabledtext'                => 'Vahtsidõ muutmiisi ülekaemist olõ-i tüüle säet.',
+'markedaspatrollederror'              => 'Muutuisi ülekaetus märkmine lää-s kõrda',
+'markedaspatrollederrortext'          => 'Olõ-i ant lehe muutmiskujjo, midä ülekaetus märkiq.',
+'markedaspatrollederror-noautopatrol' => 'Esiq tohe-i ummi muutmiisi ülekaetus märkiq.',
+
+# Patrol log
+'patrol-log-page' => 'Muutmiisi ülekaemiisi nimekiri',
+'patrol-log-line' => 'märke lehe $2 muutmisõ $1 ülekaetus $3',
+'patrol-log-auto' => '(automaatnõ)',
+'patrol-log-diff' => 'r$1',
+
+# Image deletion
+'deletedrevision' => 'Kistutõdi ärq vana kujo $1.',
+
+# Browsing diffs
+'previousdiff' => '← Mineväne muutminõ',
+'nextdiff'     => 'Järgmäne muutminõ →',
+
+# Media information
+'mediawarning'         => "'''Kaeq ette''': Taan teedüstün või ollaq sisen ohtlik kuud, miä või su programmilõ vika tetäq.<hr />",
+'imagemaxsize'         => 'Pildi seletüslehe pääl näütämise suuruspiir:',
+'thumbsize'            => 'Väikupildi suurus:',
+'file-info'            => '$1, MIME-tüüp: $2',
+'file-info-size'       => '($1×$2 pikslit, $3, MIME-tüüp: $4)',
+'file-nohires'         => '<small>Taast terävämpä pilti olõ-i saiaq.</small>',
+'file-svg'             => '<small>Taa om skaleeritävä vektorgraafikaga pilt. Põhisuurus: $1×$2 pikslit.</small>',
+'show-big-image'       => 'Täüsterräv kujo',
+'show-big-image-thumb' => '<small>Proovikaemisõ suurus: $1×$2 pikslit</small>',
+
+'newimages'    => 'Vahtsõq pildiq',
+'showhidebots' => '($1 robodiq)',
+'noimages'     => 'Olõ-i vahtsit pilte.',
+
+'passwordtooshort' => "Salasõna om pall'o lühkü, taan piät olõma vähämbält $1 märki.",
+
+# Metadata
+'metadata'          => 'Sisuseletüseq',
+'metadata-help'     => 'Seon teedüstün om lisateedüst, miä om arvadaq peri pildinudsijast, digikaamõrast vai pilditoimõndusprogrammist. Ku pilti om peräst timä tegemist muudõt, sis pruugi-i taa teedüs inämb õigõ ollaq.',
+'metadata-expand'   => 'Näütäq kõiki sisuseletüisi',
+'metadata-collapse' => 'Näütäq õnnõ tähtsämbit sisuseletüisi',
+'metadata-fields'   => 'Naaq riaq ommaq nätäq pildilehe pääl, ku sisuseletüse tapõl om tühi. * make * model * datetimeoriginal * exposuretime * fnumber * focallength',
+
+# EXIF tags
+'exif-imagewidth'                  => 'Lakjus',
+'exif-imagelength'                 => 'Korgus',
+'exif-bitspersample'               => 'Bitti osa kotsilõ',
+'exif-compression'                 => 'Kokkopakmisviis',
+'exif-photometricinterpretation'   => 'Pildipunktõ ülesehitüs',
+'exif-orientation'                 => 'Tsiht',
+'exif-samplesperpixel'             => 'Ossõ arv',
+'exif-planarconfiguration'         => 'Teedüse kõrraldaminõ',
+'exif-ycbcrsubsampling'            => 'Y ja C alanäütüsvaihõkõrd',
+'exif-ycbcrpositioning'            => 'Y ja C paikasäädmine',
+'exif-xresolution'                 => 'Pildi terävüs lajoldõ',
+'exif-yresolution'                 => 'Pildi terävüs pikuldõ',
+'exif-resolutionunit'              => 'Terävusosa X- ja Y-tsihin',
+'exif-stripoffsets'                => 'Pilditeedüse kotus',
+'exif-rowsperstrip'                => 'Riban rivve',
+'exif-stripbytecounts'             => 'Baitõ kokkopakitun riban',
+'exif-jpeginterchangeformat'       => 'Kavvus JPEG SOI-st',
+'exif-jpeginterchangeformatlength' => 'JPEG-teedüssen baitõ',
+'exif-transferfunction'            => 'Ülekandõfunktsiuun',
+'exif-whitepoint'                  => 'Valgõ punkti värmiarv',
+'exif-primarychromaticities'       => 'Päävärme värmiarvoq',
+'exif-ycbcrcoefficients'           => 'Värmiruumi tõõsõndusmaatriksi elemendiq',
+'exif-referenceblackwhite'         => 'Musta-valgõpaari võrrõlusarvoq',
+'exif-datetime'                    => 'Viimäte muudõt',
+'exif-imagedescription'            => 'Pildiallkiri',
+'exif-make'                        => 'Kaamõra tekij',
+'exif-model'                       => 'Kaamõra mutõl',
+'exif-software'                    => 'Pruugit tarkvara',
+'exif-artist'                      => 'Tekij',
+'exif-copyright'                   => 'Tegijäõigusõ umanik',
+'exif-exifversion'                 => 'Exif-kujo',
+'exif-flashpixversion'             => 'Toet Flashpix-kujo',
+'exif-colorspace'                  => 'Värmiruum',
+'exif-componentsconfiguration'     => 'Egä osa tähendüs',
+'exif-compressedbitsperpixel'      => 'Pildi kokkopakmismuud',
+'exif-pixelydimension'             => 'Kõlbolinõ pildi lakjus',
+'exif-pixelxdimension'             => 'Kõlbolinõ pildi korgus',
+'exif-makernote'                   => 'Tegijä seletüseq',
+'exif-usercomment'                 => 'Pruukja kommõntaariq',
+'exif-relatedsoundfile'            => 'Manopant helüteedüstü',
+'exif-datetimeoriginal'            => 'Luumisaig',
+'exif-datetimedigitized'           => 'Digitalisiirmisaig',
+'exif-subsectime'                  => 'Ao sekundiosaq',
+'exif-subsectimeoriginal'          => 'Edimält olnuq ao sekundiosaq',
+'exif-subsectimedigitized'         => 'Digitalisiirmisao sekundiosaq',
+'exif-exposuretime'                => 'Valgustusaig',
+'exif-exposuretime-format'         => '$1 sek ($2)',
+'exif-fnumber'                     => 'Mulguvaihõkõrd',
+'exif-fnumber-format'              => 'f/$1',
+'exif-exposureprogram'             => 'Valgustusprogramm',
+'exif-spectralsensitivity'         => 'Spektri herküs',
+'exif-isospeedratings'             => 'Herküs (ISO)',
+'exif-oecf'                        => 'Optoelektroonilinõ muutumiskõrdaja',
+'exif-shutterspeedvalue'           => 'Katigu kibõhus',
+'exif-aperturevalue'               => 'Läbilaskmismulk',
+'exif-brightnessvalue'             => 'Helehüs',
+'exif-exposurebiasvalue'           => 'Valgustusõ parandus',
+'exif-maxaperturevalue'            => 'Kõgõ suurõmb läbilaskmismulk',
+'exif-subjectdistance'             => 'Tsihtmärgi kavvus',
+'exif-meteringmode'                => 'Mõõtmisviis',
+'exif-lightsource'                 => 'Valgusläteq',
+'exif-flash'                       => 'Välk',
+'exif-focallength'                 => 'Läädse palotuslakjus',
+'exif-focallength-format'          => '$1 mm',
+'exif-subjectarea'                 => 'Tsihtmärgi ala',
+'exif-flashenergy'                 => 'Välgü vägi',
+'exif-spatialfrequencyresponse'    => 'Ruumifrekvendsi vastõq',
+'exif-focalplanexresolution'       => 'Täpsüstüsastmõ X-resolutsiuun',
+'exif-focalplaneyresolution'       => 'Täpsüstüstasõmõ Y-resolutsiuun',
+'exif-focalplaneresolutionunit'    => 'Täpsüstüstasõmõ resolutsiooni mõõt',
+'exif-subjectlocation'             => 'Tsihtmärgi kotus',
+'exif-exposureindex'               => 'Valgustusindeks',
+'exif-sensingmethod'               => 'Mõõtmisviis',
+'exif-filesource'                  => 'Teedüstüläteq',
+'exif-scenetype'                   => 'Pilditüüp',
+'exif-cfapattern'                  => 'CFA-kujond',
+'exif-customrendered'              => 'Hindäperi pilditoimõndus',
+'exif-exposuremode'                => 'Valgustusviis',
+'exif-whitebalance'                => 'Valgõ tasakaal',
+'exif-digitalzoomratio'            => 'Digitaalnõ suurõnduskõrdaja',
+'exif-focallengthin35mmfilm'       => '35 mm-dse filmi palotusvaheq',
+'exif-scenecapturetype'            => 'Pildi sissevõtmisviis',
+'exif-gaincontrol'                 => 'Pildi säädmine',
+'exif-contrast'                    => 'Kontrast',
+'exif-saturation'                  => 'Värmikülläsüs',
+'exif-sharpness'                   => 'Terävüs',
+'exif-devicesettingdescription'    => 'Kaamõra säädmiisi seletüs',
+'exif-subjectdistancerange'        => 'Tsihtmärgi kavvusvaih',
+'exif-imageuniqueid'               => 'Pildi tunnusnummõr',
+'exif-gpsversionid'                => 'GPS-koodi kujo',
+'exif-gpslatituderef'              => "Põh'a- vai lõunalakjus",
+'exif-gpslatitude'                 => 'Lakjus',
+'exif-gpslongituderef'             => 'Hummogu- vai õdagupikkus',
+'exif-gpslongitude'                => 'Pikkus',
+'exif-gpsaltituderef'              => 'Korgusõ võrrõluspunkt',
+'exif-gpsaltitude'                 => 'Korgus',
+'exif-gpstimestamp'                => 'GPS-aig (aatomikell)',
+'exif-gpssatellites'               => 'Mõõtmisõs pruugiduq satõlliidiq',
+'exif-gpsstatus'                   => 'Vastavõtja sais',
+'exif-gpsmeasuremode'              => 'Mõõtmisviis',
+'exif-gpsdop'                      => 'Mõõtmistäpsüs',
+'exif-gpsspeedref'                 => 'Kibõhusmõõt',
+'exif-gpsspeed'                    => 'GPS-vastavõtja kibõhus',
+'exif-gpstrackref'                 => 'Liikmistsihi võrrõluspunkt',
+'exif-gpstrack'                    => 'Liikmistsiht',
+'exif-gpsimgdirectionref'          => 'Pildi tsihi võrrõluspunkt',
+'exif-gpsimgdirection'             => 'Pildi tsiht',
+'exif-gpsmapdatum'                 => 'Pruugit geodeetiline maamõõtmisteedüs',
+'exif-gpsdestlatituderef'          => 'Tsihtmärgi lakjusõ võrrõluspunkt',
+'exif-gpsdestlatitude'             => 'Tsihtmärgi lakjus',
+'exif-gpsdestlongituderef'         => 'Tsihtmärgi pikkusõ võrrõluspunkt',
+'exif-gpsdestlongitude'            => 'Tsihtmärgi pikkus',
+'exif-gpsdestbearingref'           => 'Tsihtmärgi vällätimmise võrrõluspunkt',
+'exif-gpsdestbearing'              => 'Tsihtmärgi vällätimmine',
+'exif-gpsdestdistanceref'          => 'Tsihtmärgi kavvusõ võrrõluspunkt',
+'exif-gpsdestdistance'             => 'Tsihtmärgi kavvus',
+'exif-gpsprocessingmethod'         => 'GPS-i tüümoodu nimi',
+'exif-gpsareainformation'          => 'GPS-ala nimi',
+'exif-gpsdatestamp'                => 'GPS-kuupäiv',
+'exif-gpsdifferential'             => 'GPS-differentsiaalparandus',
+
+# EXIF attributes
+'exif-compression-1' => 'Kokkopakmalda',
+'exif-compression-6' => 'JPEG',
+
+'exif-photometricinterpretation-2' => 'RGB',
+'exif-photometricinterpretation-6' => 'YCbCr',
+
+'exif-unknowndate' => 'Tundmalda kuupäiv',
+
+'exif-orientation-1' => 'Harilik', # 0th row: top; 0th column: left
+'exif-orientation-2' => 'Pikäle käänet', # 0th row: top; 0th column: right
+'exif-orientation-3' => '180° käänet', # 0th row: bottom; 0th column: right
+'exif-orientation-4' => 'Pistü käänet', # 0th row: bottom; 0th column: left
+'exif-orientation-5' => 'Käänet 90° vastapäivä ja pistü', # 0th row: left; 0th column: top
+'exif-orientation-6' => 'Käänet 90° peripäivä', # 0th row: right; 0th column: top
+'exif-orientation-7' => 'Käänet 90° peripäivä ja pistü', # 0th row: right; 0th column: bottom
+'exif-orientation-8' => 'Käänet 90° vastapäivä', # 0th row: left; 0th column: bottom
+
+'exif-planarconfiguration-1' => "''chunky''-formaat",
+'exif-planarconfiguration-2' => "''planar''-formaat",
+
+'exif-xyresolution-i' => '$1 dpi',
+'exif-xyresolution-c' => '$1 dpc',
+
+'exif-colorspace-1'      => 'sRGB',
+'exif-colorspace-ffff.h' => 'FFFF.H',
+
+'exif-componentsconfiguration-0' => 'olõ-i',
+'exif-componentsconfiguration-1' => 'Y',
+'exif-componentsconfiguration-2' => 'Cb',
+'exif-componentsconfiguration-3' => 'Cr',
+'exif-componentsconfiguration-4' => 'R',
+'exif-componentsconfiguration-5' => 'G',
+'exif-componentsconfiguration-6' => 'B',
+
+'exif-exposureprogram-0' => 'Olõ-i paika säet',
+'exif-exposureprogram-1' => 'Käsilde paikasäet',
+'exif-exposureprogram-2' => 'Põhiprogramm',
+'exif-exposureprogram-3' => 'Läbilaskmismulgu põhilisus',
+'exif-exposureprogram-4' => 'Katiguao põhilisus',
+'exif-exposureprogram-5' => 'Luuva programm (suurõndõt süvvüsterävüst)',
+'exif-exposureprogram-6' => 'Liikmisprogramm (suurõndõt katiguao kibõhust)',
+'exif-exposureprogram-7' => 'Rinnapildimuud (lähipildele, kon tagapõhi om hägonõ)',
+'exif-exposureprogram-8' => 'Maastigumuud (maastigupildele, kon tagapõhi om selge)',
+
+'exif-subjectdistance-value' => '$1 miitrit',
+
+'exif-meteringmode-0'   => 'Tiidmäldä',
+'exif-meteringmode-1'   => 'Keskmäne',
+'exif-meteringmode-2'   => 'Keskkotusõperine keskmäne',
+'exif-meteringmode-3'   => 'Täpp',
+'exif-meteringmode-4'   => 'Mitmõtäpiline',
+'exif-meteringmode-5'   => 'Kujond',
+'exif-meteringmode-6'   => 'Osalinõ',
+'exif-meteringmode-255' => 'Muu',
+
+'exif-lightsource-0'   => 'Tiidmäldä',
+'exif-lightsource-1'   => 'Päävävalgus',
+'exif-lightsource-2'   => 'Päävävalguslamp',
+'exif-lightsource-3'   => 'Hõõglamp (kunstvalgus)',
+'exif-lightsource-4'   => 'Välk',
+'exif-lightsource-9'   => 'Selge ilm',
+'exif-lightsource-10'  => 'Pilvine ilm',
+'exif-lightsource-11'  => 'Vari',
+'exif-lightsource-12'  => 'Päävävalguslamp (D 5700 – 7100K)',
+'exif-lightsource-13'  => 'Päävävalguslamp (N 4600 – 5400K)',
+'exif-lightsource-14'  => 'Külmvalgõ päävävalguslamp (W 3900 – 4500K)',
+'exif-lightsource-15'  => 'Valgõ päävävalguslamp (WW 3200 – 3700K)',
+'exif-lightsource-17'  => 'Standardvalgus A',
+'exif-lightsource-18'  => 'Standardvalgus B',
+'exif-lightsource-19'  => 'Standardvalgus C',
+'exif-lightsource-20'  => 'D55',
+'exif-lightsource-21'  => 'D65',
+'exif-lightsource-22'  => 'D75',
+'exif-lightsource-23'  => 'D50',
+'exif-lightsource-24'  => 'ISO stuudiohõõglamp',
+'exif-lightsource-255' => 'Muu valgus',
+
+'exif-focalplaneresolutionunit-2' => 'tolli',
+
+'exif-sensingmethod-1' => 'Paikasäädmäldä',
+'exif-sensingmethod-2' => 'Ütene värmisensor',
+'exif-sensingmethod-3' => 'Katõnõ värmisensor',
+'exif-sensingmethod-4' => 'Kolmõnõ värmisensor',
+'exif-sensingmethod-5' => 'Sarivärmisensor',
+'exif-sensingmethod-7' => 'Trilineaarsensor',
+'exif-sensingmethod-8' => 'Sarilineaarsensor',
+
+'exif-filesource-3' => 'DSC',
+
+'exif-scenetype-1' => 'Õkva pildistet pilt',
+
+'exif-customrendered-0' => 'Harilik tallitus',
+'exif-customrendered-1' => 'Hindäsäet tallitus',
+
+'exif-exposuremode-0' => 'Automaatnõ valgustus',
+'exif-exposuremode-1' => 'Hindäsäet valgustus',
+'exif-exposuremode-2' => 'Automaatnõ haardminõ',
+
+'exif-whitebalance-0' => 'Automaatnõ valgõ tasakaal',
+'exif-whitebalance-1' => 'Hindäsäet valgõ tasakaal',
+
+'exif-scenecapturetype-0' => 'Harilik',
+'exif-scenecapturetype-1' => 'Maastik',
+'exif-scenecapturetype-2' => 'Rinnapilt',
+'exif-scenecapturetype-3' => 'Üüpilt',
+
+'exif-gaincontrol-0' => 'Olõ-i',
+'exif-gaincontrol-1' => 'Matal üläkinnütüs',
+'exif-gaincontrol-2' => 'Korgõ üläkinnütüs',
+'exif-gaincontrol-3' => 'Matal alakinnütüs',
+'exif-gaincontrol-4' => 'Korgõ alakinnütüs',
+
+'exif-contrast-0' => 'Harilik',
+'exif-contrast-1' => 'Pehmeq',
+'exif-contrast-2' => 'Kõva',
+
+'exif-saturation-0' => 'Harilik',
+'exif-saturation-1' => 'Väiku värmikülläsüs',
+'exif-saturation-2' => 'Suur värmikülläsüs',
+
+'exif-sharpness-0' => 'Harilik',
+'exif-sharpness-1' => 'Pehmeq',
+'exif-sharpness-2' => 'Kõva',
+
+'exif-subjectdistancerange-0' => 'Tiidmäldäq',
+'exif-subjectdistancerange-1' => 'Makro',
+'exif-subjectdistancerange-2' => 'Lähküpilt',
+'exif-subjectdistancerange-3' => 'Kavvõpilt',
+
+# Pseudotags used for GPSLatitudeRef and GPSDestLatitudeRef
+'exif-gpslatitude-n' => "Põh'lakjust",
+'exif-gpslatitude-s' => 'Lõunalakjust',
+
+# Pseudotags used for GPSLongitudeRef and GPSDestLongitudeRef
+'exif-gpslongitude-e' => 'Hummogupikkust',
+'exif-gpslongitude-w' => 'Õdagupikkust',
+
+'exif-gpsstatus-a' => 'Mõõtminõ käü',
+'exif-gpsstatus-v' => 'Ristimõõtminõ',
+
+'exif-gpsmeasuremode-2' => 'Katõmõõtmõlinõ mõõtminõ',
+'exif-gpsmeasuremode-3' => 'Kolmõmõõtmõlinõ mõõtminõ',
+
+# Pseudotags used for GPSSpeedRef and GPSDestDistanceRef
+'exif-gpsspeed-k' => 'kilomiitrit tunnin',
+'exif-gpsspeed-m' => 'miili tunnin',
+'exif-gpsspeed-n' => 'sõlmõ',
+
+# Pseudotags used for GPSTrackRef, GPSImgDirectionRef and GPSDestBearingRef
+'exif-gpsdirection-t' => 'Peris tsiht',
+'exif-gpsdirection-m' => 'Magnõttsiht',
+
+# External editor support
+'edit-externally'      => 'Toimõndaq taad teedüstüt välidse programmiga',
+'edit-externally-help' => 'Lisateedüst: [http://meta.wikimedia.org/wiki/Help:External_editors kaeq siist].',
+
+# 'all' in various places, this might be different for inflected languages
+'recentchangesall' => 'kõik',
+'imagelistall'     => 'kõik',
+'watchlistall1'    => 'kõiki',
+'watchlistall2'    => ', terveq aolugu',
+'namespacesall'    => 'kõik',
+
+# E-mail address confirmation
+'confirmemail'            => 'Kinnüdäq e-postiaadrõssit',
+'confirmemail_noemail'    => 'Sul olõ-i [[Special:Preferences|ummi säädmiisihe]] pant kõlbolist e-postiaadrõssit.',
+'confirmemail_text'       => 'Taa viki nõud e-postiaadrõsi kinnütämist, inne ku e-posti pruukiq võit. Saadaq alanolõva nupi pääle vaotõn uma aadrõsi pääle kinnütüse küsümise kiri. Säält lövvät lingi, mink vaotamisõga kinnütät uma e-postiaadrõsi.',
+'confirmemail_pending'    => '<div class="error">Kinnütüskiri om jo ärq saadõt. Ku lõit õkva vahtsõ pruukjanime, oodaq mõni minot sõnomi tulõkit, inne ku proovit vahtsõst.</div>',
+'confirmemail_send'       => 'Saadaq kinnütüskiri ärq',
+'confirmemail_sent'       => 'Kinnütüskiri ärq saadõt.',
+'confirmemail_oncreate'   => 'Kinnütüskiri saadõti su e-postiaadrõsi pääle. Kinnütüskuudi olõ-i joht vajja nimega sisseminekis, a tuu tulõ sul ärq saataq, ku tahat, et sa saanuq taan vikin e-posti saataq.',
+'confirmemail_sendfailed' => 'Kinnütüskiri jäi saatmalda. Kaeq, kas su annõtun aadrõssin olõ-i keeletüid märke. Postiprogramm saat tagasi: $1',
+'confirmemail_invalid'    => 'Kõlbmalda kinnütüskuud. Taa või ollaq vanaslännüq.',
+'confirmemail_needlogin'  => 'Uma e-postiaadrõsi kinnütämises $1.',
+'confirmemail_success'    => 'Su e-postiaadrõs om no ärq kinnütet. Võit nimega sisse minnäq.',
+'confirmemail_loggedin'   => 'Su e-postiaadrõs om no ärq kinnütet.',
+'confirmemail_error'      => "Su e-postiaadrõsi kinnütämisega läts' midägi võlssi.",
+'confirmemail_subject'    => '{{SITENAME}} e-postiaadrõsi kinnütämine',
+'confirmemail_body'       => 'Kiäki, arvadaq saq esiq, lõi puutri võrgoaadrõsi $1 päält {{SITENAME}} pruukjanime $2. Ku taa om tõtõstõ suq pruukjanimi, tiiq vallalõ link: $3. Ku taa *olõ-i* suq luud pruukjanimi, sis teku-i midägi. Kinnütüskuud lätt vanas $4.',
+
+# Inputbox extension, may be useful in other contexts as well
+'tryexact'       => 'Täpsä otsminõ',
+'searchfulltext' => 'Otsiq terveq tekst',
+'createarticle'  => 'Luuq leht',
+
+# Scary transclusion
+'scarytranscludedisabled' => '[Vikidevaihõlinõ teedüsepruukminõ olõ-i käügin]',
+'scarytranscludefailed'   => '[Saa-s näüdüst kätte: $1]',
+'scarytranscludetoolong'  => "[Võrgoaadrõs om pall'o pikk]",
+
+# Trackbacks
+'trackbackbox'      => "<div id=\"mw_trackbacks\">Artikli pääle pantuisi linke näütämine (''trackbackiq''):<br />\$1</div>",
+'trackbackremove'   => ' ([$1 kistutus])',
+'trackbacklink'     => "Artikli pääle pantuisi linke näütämine (''trackback'')",
+'trackbackdeleteok' => "Artikli pääle pantuisi linke näütämine (''trackback'') kistutõdi ärq.",
+
+# Delete conflict
+'deletedwhileediting' => "<center>'''Hoiatus''': taa leht om ärq kistutõt päält tuud, ku sa taad toimõndama naksit!</center>",
+'confirmrecreate'     => "Pruukja '''[[User:$1|$1]]''' ([[User_talk:$1|arotus]]) kistut' taa lehe ärq päält tuud, ku sa naksit taad toimõndama. Põhjus oll':  ''$2'' Olõq hää, kinnüdäq, et tahat taad lehte vahtsõst luvvaq.",
+'recreate'            => 'Luuq vahtsõst',
+
+# HTML dump
+'redirectingto' => 'Saadõtas ümbre lehe pääle [[$1]]...',
+
+# action=purge
+'confirm_purge'        => 'Kas taa lehe vaihõmälokujoq tulõvaq ärq kistutaq?
+
+$1',
+'confirm_purge_button' => 'Hää külh',
+
+'youhavenewmessagesmulti' => 'Sullõ om vahtsit sõnomit lehe pääl $1',
+
+'searchcontaining' => "Otsiq artikliid, kon om seen ''$1''.",
+'searchnamed'      => "Otsiq artikliid nimega ''$1''.",
+'articletitles'    => "Artikliq, miä nakkasõq pääle ''$1''",
+'hideresults'      => 'Käkiq tulõmusõq ärq',
+
+# DISPLAYTITLE
+'displaytitle' => '(Panõq taa lehe pääle link [[$1]])',
+
+'loginlanguagelabel' => 'Kiil: $1',
+
+# Multipage image navigation
+'imgmultipageprev'   => '← mineväne leht',
+'imgmultipagenext'   => 'järgmäne leht →',
+'imgmultigo'         => 'Mineq!',
+'imgmultigotopre'    => 'Mineq lehe pääle',
+'imgmultiparseerror' => 'Pilt paistus ollõv viganõ vai võlss. {{SITENAME}} saa-i lehti nimekirjä andaq.',
+
+# Table pager
+'ascending_abbrev'         => 'ülespoolõ',
+'descending_abbrev'        => 'allapoolõ',
+'table_pager_next'         => 'Järgmäne leht',
+'table_pager_prev'         => 'Mineväne leht',
+'table_pager_first'        => 'Edimäne leht',
+'table_pager_last'         => 'Perämäne leht',
+'table_pager_limit'        => 'Näütäq $1 ütsüst lehe kotsilõ',
+'table_pager_limit_submit' => 'Mineq',
+'table_pager_empty'        => 'Olõ-i tulõmuisi',
+
+# Auto-summaries
+'autosumm-blank'   => 'Leht tetti tühäs',
+'autosumm-replace' => "Asõmalõ panti '$1'",
+'autoredircomment' => 'Ümbresaatminõ lehele [[$1]]', # This should be changed to the new naming convention, but existed beforehand
+'autosumm-new'     => 'Vahtsõnõ leht: $1',
+
+# Size units
+'size-bytes'     => '$1 B',
+'size-kilobytes' => '$1 KB',
+'size-megabytes' => '$1 MB',
+'size-gigabytes' => '$1 GB',
+
+# Live preview
+'livepreview-loading' => 'Laat…',
+'livepreview-ready'   => 'Laat… Valmis!',
+'livepreview-failed'  => 'Kipõkaehus lää-s käümä!
+Prooviq harilikku kaehust.',
+'livepreview-error'   => 'Ütistämine lää-s kõrda: $1 "$2"
+Prooviq harilikku kaehust.',
+
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesFo.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesFo.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesFo.php	(revision 1280)
@@ -0,0 +1,117 @@
+<?php
+/** Faroese (Føroyskt)
+  *
+  * @addtogroup Language
+  */
+
+$skinNames = array(
+	'Standardur', 'Nostalgiskur', 'Cologne-bláur', 'Paddington', 'Montparnasse'
+);
+
+$bookstoreList = array(
+	'Bokasolan.fo' => 'http://www.bokasolan.fo/vleitari.asp?haattur=bok.alfa&Heiti=&Hovindur=&Forlag=&innbinding=Oell&bolkur=Allir&prisur=Allir&Aarstal=Oell&mal=Oell&status=Oell&ISBN=$1',
+	'inherit' => true,
+);
+
+$namespaceNames = array(
+	NS_MEDIA            => 'Miðil',
+	NS_SPECIAL          => 'Serstakur',
+	NS_MAIN             => '',
+	NS_TALK             => 'Kjak',
+	NS_USER             => 'Brúkari',
+	NS_USER_TALK        => 'Brúkari_kjak',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK     => '$1_kjak',
+	NS_IMAGE            => 'Mynd',
+	NS_IMAGE_TALK       => 'Mynd_kjak',
+	NS_MEDIAWIKI        => 'MidiaWiki',
+	NS_MEDIAWIKI_TALK   => 'MidiaWiki_kjak',
+	NS_TEMPLATE         => 'Fyrimynd',
+	NS_TEMPLATE_TALK    => 'Fyrimynd_kjak',
+	NS_HELP             => 'Hjálp',
+	NS_HELP_TALK        => 'Hjálp_kjak',
+	NS_CATEGORY         => 'Bólkur',
+	NS_CATEGORY_TALK    => 'Bólkur_kjak'
+);
+
+$datePreferences = false;
+$defaultDateFormat = 'dmy';
+$dateFormats = array(
+	'dmy time' => 'H:i',
+	'dmy date' => 'j. M Y',
+	'dmy both' => 'j. M Y "kl." H:i',
+);
+
+$linkTrail = '/^([áðíóúýæøa-z]+)(.*)$/sDu';
+
+$messages = array(
+
+# User toggles
+"tog-underline"	   => "Undurstrika ávísingar",
+"tog-highlightbroken" => "Brúka reyða ávísing til tómar síður",
+"tog-justify"	   => "Stilla greinpart",
+"tog-hideminor"	   => "Goym minni broytingar í seinast broytt listanum",		  # Skjul mindre ændringer i seneste ændringer listen
+"tog-usenewrc"	   => "víðka seinastu broytingar lista<br />(ikki til alla kagarar)",
+"tog-numberheadings"   => "Sjálvtalmerking av yvirskrift",
+"tog-showtoolbar"	   => "Vís amboðslinju í rætting",
+"tog-editondblclick"   => "Rætta síðu við at tvíklikkja (JavaScript)",
+"tog-editsection"	   =>"Rætta greinpart við hjálp av [rætta]-ávísing",
+"tog-editsectiononrightclick"=>"Rætta greinpart við at høgraklikkja<br /> á yvirskrift av greinparti (JavaScript)",
+"tog-showtoc"=>"Vís innihaldsyvurlit<br />(Til greinir við meira enn trimun greinpartum)",
+"tog-rememberpassword" => "Minst til loyniorð næstu ferð",
+"tog-editwidth" => "Rættingarkassin hevur fulla breid",
+"tog-watchdefault" => "Vaka yvur nýggjum og broyttum greinum",
+"tog-minordefault" => "Merk sum standard allar broytingar sum smærri",
+"tog-previewontop" => "Vís forhondsvísning áðren rættingarkassan",
+"tog-nocache" => "Minst ikki til síðurnar til næstu ferð",
+
+# Dates
+'sunday' => 'sunnudagur',
+'monday' => 'mánadagur',
+'tuesday' => 'týsdagur',
+'wednesday' => 'mikudagur',
+'thursday' => 'hósdagur',
+'friday' => 'fríggjadagur',
+'saturday' => 'leygardagur',
+'january' => 'januar',
+'february' => 'februar',
+'march' => 'mars',
+'april' => 'apríl',
+'may_long' => 'mai',
+'june' => 'juni',
+'july' => 'juli',
+'august' => 'august',
+'september' => 'september',
+'october' => 'oktober',
+'november' => 'november',
+'december' => 'desember',
+'jan' => 'jan',
+'feb' => 'feb',
+'mar' => 'mar',
+'apr' => 'apr',
+'may' => 'mai',
+'jun' => 'jun',
+'jul' => 'jul',
+'aug' => 'aug',
+'sep' => 'sep',
+'oct' => 'okt',
+'nov' => 'nov',
+'dec' => 'des',
+
+# Math options
+'mw_math_png' => "Vís altíð sum PNG",
+'mw_math_simple' => "HTML um sera einfalt annars PNG",
+'mw_math_html' => "HTML um møguligt annars PNG",
+'mw_math_source' => "Lat verða sum TeX (til tekstkagara)",
+'mw_math_modern' => "Tilmælt nýtíðarkagara",
+'mw_math_mathml' => 'MathML if possible (experimental)',
+
+# Preferences page
+'qbsettings-none'	=> 'Eingin',
+'qbsettings-fixedleft'	=> 'Fast vinstru',
+'qbsettings-fixedright'	=> 'Fast høgru',
+'qbsettings-floatingleft'	=> 'Flótandi vinstru',
+
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesFr.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesFr.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesFr.php	(revision 1280)
@@ -0,0 +1,2109 @@
+<?php
+/** French (Français)
+ *
+ * @addtogroup Language
+ *
+ */
+$skinNames = array(
+	'standard'  => 'Standard',
+	'nostalgia' => 'Nostalgie',
+);
+
+$bookstoreList = array(
+	'Amazon.fr'    => 'http://www.amazon.fr/exec/obidos/ISBN=$1',
+	'alapage.fr'   => 'http://www.alapage.com/mx/?tp=F&type=101&l_isbn=$1&donnee_appel=ALASQ&devise=&',
+	'fnac.com'     => 'http://www3.fnac.com/advanced/book.do?isbn=$1',
+	'chapitre.com' => 'http://www.chapitre.com/frame_rec.asp?isbn=$1',
+);
+
+$namespaceNames = array(
+	NS_MEDIA          => 'Media',
+	NS_SPECIAL        => 'Special',
+	NS_MAIN           => '',
+	NS_TALK           => 'Discuter',
+	NS_USER           => 'Utilisateur',
+	NS_USER_TALK      => 'Discussion_Utilisateur',
+	NS_PROJECT        => '$1',
+	NS_PROJECT_TALK   => 'Discussion_$1',
+	NS_IMAGE          => 'Image',
+	NS_IMAGE_TALK     => 'Discussion_Image',
+	NS_MEDIAWIKI      => 'MediaWiki',
+	NS_MEDIAWIKI_TALK => 'Discussion_MediaWiki',
+	NS_TEMPLATE       => 'Modèle',
+	NS_TEMPLATE_TALK  => 'Discussion_Modèle',
+	NS_HELP           => 'Aide',
+	NS_HELP_TALK      => 'Discussion_Aide',
+	NS_CATEGORY       => 'Catégorie',
+	NS_CATEGORY_TALK  => 'Discussion_Catégorie'
+);
+$linkTrail = '/^([a-zàâçéèêîôûäëïöüùÇÉÂÊÎÔÛÄËÏÖÜÀÈÙ]+)(.*)$/sDu';
+
+$dateFormats = array(
+	'mdy time' => 'H:i',
+	'mdy date' => 'F j, Y',
+	'mdy both' => 'F j, Y à H:i',
+
+	'dmy time' => 'H:i',
+	'dmy date' => 'j F Y',
+	'dmy both' => 'j F Y à H:i',
+
+	'ymd time' => 'H:i',
+	'ymd date' => 'Y F j',
+	'ymd both' => 'Y F j à H:i',
+);
+
+$separatorTransformTable = array( ',' => "\xc2\xa0", '.' => ',' );
+
+$messages = array(
+# User preference toggles
+'tog-underline'               => 'Souligner les liens :',
+'tog-highlightbroken'         => 'Afficher <a href="" class="new">en rouge</a> les liens vers des pages non existantes (sinon :  comme ceci<a href="" class="internal">?</a>)',
+'tog-justify'                 => 'Justifier les paragraphes',
+'tog-hideminor'               => 'Cacher les modifications récentes mineures',
+'tog-extendwatchlist'         => 'Utiliser la liste de suivi améliorée',
+'tog-usenewrc'                => 'Utiliser les modifications récentes améliorées (JavaScript)',
+'tog-numberheadings'          => 'Numéroter automatiquement les titres',
+'tog-showtoolbar'             => 'Montrer la barre de menu de modification (JavaScript)',
+'tog-editondblclick'          => 'Double-cliquer pour modifier une page (JavaScript)',
+'tog-editsection'             => 'Modifier une section via les liens [modifier]',
+'tog-editsectiononrightclick' => 'Modifier une section en faisant un clic droit sur son titre (JavaScript)',
+'tog-showtoc'                 => 'Afficher la table des matières (pour les pages ayant plus de 3 sections)',
+'tog-rememberpassword'        => 'Se souvenir de mon mot de passe (cookie)',
+'tog-editwidth'               => 'Afficher la fenêtre d’édition en pleine largeur',
+'tog-watchcreations'          => 'Ajouter les pages que je crée à ma liste de suivi',
+'tog-watchdefault'            => 'Ajouter les pages que je modifie à ma liste de suivi',
+'tog-watchmoves'              => 'Ajouter les pages que je renomme à ma liste de suivi',
+'tog-watchdeletion'           => 'Ajouter les pages que je supprime à ma liste de suivi',
+'tog-minordefault'            => 'Considérer mes modifications comme mineures par défaut',
+'tog-previewontop'            => 'Montrer la prévisualisation au-dessus de la zone de modification',
+'tog-previewonfirst'          => 'Montrer la prévisualisation lors de la première édition',
+'tog-nocache'                 => 'Désactiver le cache des pages',
+'tog-enotifwatchlistpages'    => 'Autoriser l’envoi de courriel lorsqu’une page de votre liste de suivi est modifiée',
+'tog-enotifusertalkpages'     => 'M’avertir par courriel en cas de modification de ma page de discussion',
+'tog-enotifminoredits'        => 'M’avertir par courriel même en cas de modification mineure',
+'tog-enotifrevealaddr'        => 'Afficher mon adresse électronique dans les courriels d’avertissement',
+'tog-shownumberswatching'     => 'Afficher le nombre d’utilisateurs qui suivent cette page',
+'tog-fancysig'                => 'Signature brute (sans lien automatique)',
+'tog-externaleditor'          => 'Utiliser un éditeur externe par défaut',
+'tog-externaldiff'            => 'Utiliser un comparateur externe par défaut',
+'tog-showjumplinks'           => 'Activer les liens « navigation » et « recherche » en haut de page (apparences Myskin et autres)',
+'tog-uselivepreview'          => 'Utiliser l’aperçu rapide (JavaScript) (expérimental)',
+'tog-forceeditsummary'        => 'M’avertir lorsque je n’ai pas complété le contenu de la boîte de commentaires',
+'tog-watchlisthideown'        => 'Masquer mes propres modifications dans la liste de suivi',
+'tog-watchlisthidebots'       => 'Masquer les modifications faites par les bots dans la liste de suivi',
+'tog-watchlisthideminor'      => 'Masquer les modifications mineures dans la liste de suivi',
+'tog-nolangconversion'        => 'Désactiver la conversion des variantes de langue',
+'tog-ccmeonemails'            => 'M’envoyer une copie des courriels que j’envoie aux autres utilisateurs',
+'tog-diffonly'                => 'Ne pas montrer le contenu des pages sous les diffs',
+
+'underline-always'  => 'Toujours',
+'underline-never'   => 'Jamais',
+'underline-default' => 'Selon le navigateur',
+
+'skinpreview' => '(Prévisualiser)',
+
+# Dates
+'sunday'        => 'dimanche',
+'monday'        => 'lundi',
+'tuesday'       => 'mardi',
+'wednesday'     => 'mercredi',
+'thursday'      => 'jeudi',
+'friday'        => 'vendredi',
+'saturday'      => 'samedi',
+'sun'           => 'dim',
+'mon'           => 'lun',
+'tue'           => 'mar',
+'wed'           => 'mer',
+'thu'           => 'jeu',
+'fri'           => 'ven',
+'sat'           => 'sam',
+'january'       => 'janvier',
+'february'      => 'février',
+'march'         => 'mars',
+'april'         => 'avril',
+'may_long'      => 'mai',
+'june'          => 'juin',
+'july'          => 'juillet',
+'august'        => 'août',
+'september'     => 'septembre',
+'october'       => 'octobre',
+'november'      => 'novembre',
+'december'      => 'décembre',
+'january-gen'   => 'janvier',
+'february-gen'  => 'février',
+'march-gen'     => 'mars',
+'april-gen'     => 'avril',
+'may-gen'       => 'mai',
+'june-gen'      => 'juin',
+'july-gen'      => 'juillet',
+'august-gen'    => 'août',
+'september-gen' => 'septembre',
+'october-gen'   => 'octobre',
+'november-gen'  => 'novembre',
+'december-gen'  => 'décembre',
+'jan'           => 'jan',
+'feb'           => 'fév',
+'mar'           => 'mar',
+'apr'           => 'avr',
+'may'           => 'mai',
+'jun'           => 'jun',
+'jul'           => 'jul',
+'aug'           => 'aoû',
+'sep'           => 'sep',
+'oct'           => 'oct',
+'nov'           => 'nov',
+'dec'           => 'déc',
+
+# Bits of text used by many pages
+'categories'            => 'Catégories',
+'pagecategories'        => '{{PLURAL:$1|Catégorie |Catégories }}',
+'category_header'       => 'Pages dans la catégorie « $1 »',
+'subcategories'         => 'Sous-catégories',
+'category-media-header' => 'Fichiers multimédia dans la catégorie « $1 »',
+
+'mainpagetext'      => "<big>'''MediaWiki a été installé avec succès.'''</big>",
+'mainpagedocfooter' => 'Consultez le [http://meta.wikimedia.org/wiki/Aide:Contenu Guide de l’utilisateur] pour plus d’informations sur l’utilisation de ce logiciel.
+
+== Démarrer avec MediaWiki ==
+
+* [http://www.mediawiki.org/wiki/Manual:Configuration_settings List des paramètres de configuration]
+* [http://www.mediawiki.org/wiki/Manual:FAQ FAQ MediaWiki]
+* [http://mail.wikimedia.org/mailman/listinfo/mediawiki-announce Liste de discussion des parutions de MediaWiki]',
+
+'about'          => 'À propos',
+'article'        => 'Article',
+'newwindow'      => '(ouvre une nouvelle fenêtre)',
+'cancel'         => 'Annuler',
+'qbfind'         => 'Rechercher',
+'qbbrowse'       => 'Défiler',
+'qbedit'         => 'Modifier',
+'qbpageoptions'  => 'Page d’option',
+'qbpageinfo'     => 'Page d’information',
+'qbmyoptions'    => 'Mes options',
+'qbspecialpages' => 'Pages spéciales',
+'moredotdotdot'  => 'Et plus...',
+'mypage'         => 'Page perso',
+'mytalk'         => 'Page de discussion',
+'mywatchlist'   => 'Liste de suivi',
+'anontalk'       => 'Discussion avec cette adresse IP',
+'navigation'     => 'Navigation',
+
+# Metadata in edit box
+'metadata_help' => 'Métadonnées:',
+
+'errorpagetitle'    => 'Erreur de titre',
+'returnto'          => 'Revenir à la page $1.',
+'tagline'           => 'Un article de {{SITENAME}}.',
+'help'              => 'Aide',
+'search'            => 'Rechercher',
+'searchbutton'      => 'Rechercher',
+'go'                => 'Consulter',
+'searcharticle'     => 'Consulter',
+'history'           => 'hist',
+'history_short'     => 'Historique',
+'updatedmarker'     => 'modifié depuis ma dernière visite',
+'info_short'        => 'Informations',
+'printableversion'  => 'Version imprimable',
+'permalink'         => 'Lien permanent',
+'print'             => 'Imprimer',
+'edit'              => 'Modifier',
+'editthispage'      => 'Modifier cette page',
+'delete'            => 'Supprimer',
+'deletethispage'    => 'Supprimer cette page',
+'undelete_short'    => 'Restaurer {{PLURAL:$1|1 modification| $1 modifications}}',
+'protect'           => 'Protéger',
+'protect_change'    => 'Modifier le niveau de protection',
+'protectthispage'   => 'Protéger cette page',
+'unprotect'         => 'Déprotéger',
+'unprotectthispage' => 'Déprotéger cette page',
+'newpage'           => 'Nouvelle page',
+'talkpage'          => 'Page de discussion',
+'talkpagelinktext'  => 'Discuter',
+'specialpage'       => 'Page spéciale',
+'personaltools'     => 'Outils personnels',
+'postcomment'       => 'Ajouter un commentaire',
+'articlepage'       => 'Voir l’article',
+'talk'              => 'Discussion',
+'views'             => 'Affichages',
+'toolbox'           => 'Boîte à outils',
+'userpage'          => 'Page utilisateur',
+'projectpage'       => 'Page méta',
+'imagepage'         => 'Page image',
+'mediawikipage'     => 'Voir la page des messages',
+'templatepage'      => 'Voir la page du modèle',
+'viewhelppage'      => 'Voir la page d’aide',
+'categorypage'      => 'Voir la page des catégories',
+'viewtalkpage'      => 'Page de discussion',
+'otherlanguages'    => 'Autres langues',
+'redirectedfrom'    => '(Redirigé depuis $1)',
+'redirectpagesub'   => 'Page de redirection',
+'lastmodifiedat'    => 'Dernière modification de cette page le $1 à $2.<br />', # $1 date, $2 time
+'viewcount'         => 'Cette page a été consultée $1 fois.',
+'protectedpage'     => 'Page protégée',
+'jumpto'            => 'Aller à :',
+'jumptonavigation'  => 'Navigation',
+'jumptosearch'      => 'Rechercher',
+
+# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
+'aboutsite'         => 'À propos de {{SITENAME}}',
+'aboutpage'         => '{{ns:4}}:À propos',
+'bugreports'        => 'Rapport d’erreurs',
+'bugreportspage'    => '{{ns:4}}:Rapport d’erreurs',
+'copyright'         => 'Contenu disponible sous $1.',
+'copyrightpagename' => 'licence {{SITENAME}}',
+'copyrightpage'     => '{{ns:4}}:Copyright',
+'currentevents'     => 'Actualités',
+'currentevents-url' => 'Actualités',
+'disclaimers'       => 'Avertissements',
+'disclaimerpage'    => 'Project:Avertissements généraux',
+'edithelp'          => 'Aide',
+'edithelppage'      => '{{ns:help}}:Comment modifier une page',
+'faq'               => 'FAQ',
+'faqpage'           => '{{ns:4}}:FAQ',
+'helppage'          => '{{ns:help}}:Aide',
+'mainpage'          => 'Accueil',
+'policy-url'        => 'Project:policy',
+'portal'            => 'Communauté',
+'portal-url'        => '{{ns:4}}:Accueil',
+'privacy'           => 'Politique de confidentialité',
+'privacypage'       => 'Project:Confidentialité',
+'sitesupport'       => 'Faire un don',
+'sitesupport-url'   => '{{ns:4}}:Faire un don',
+
+'badaccess'        => 'Erreur de permission',
+'badaccess-group0' => 'Vous n’avez pas les droits suffisants pour réaliser l’action que vous demandez.',
+'badaccess-group1' => 'L’action que vous essayez de réaliser n’est accessible qu’aux utilisateurs du groupe $1.',
+'badaccess-group2' => 'L’action que vous essayez de réaliser n’est accessible qu’aux utilisateurs des groupes $1.',
+'badaccess-groups' => 'L’action que vous essayez de réaliser n’est accessible qu’aux utilisateurs des groupes $1.',
+
+'versionrequired'     => 'Version $1 de MediaWiki nécessaire',
+'versionrequiredtext' => 'La version $1 de MediaWiki est nécessaire pour utiliser cette page. Consultez [[Special:Version]]',
+
+'ok'                  => 'OK',
+'pagetitle'           => '$1 - {{SITENAME}}',
+'retrievedfrom'       => 'Récupérée de « $1 »',
+'youhavenewmessages'  => 'Vous avez $1 ($2).',
+'newmessageslink'     => 'des nouveaux messages',
+'newmessagesdifflink' => 'dernière modification',
+'editsection'         => 'modifier',
+'editold'             => 'modifier',
+'editsectionhint'     => 'Modifier la section : $1',
+'toc'                 => 'Sommaire',
+'showtoc'             => 'afficher',
+'hidetoc'             => 'masquer',
+'thisisdeleted'       => 'Désirez-vous afficher ou restaurer $1 ?',
+'viewdeleted'         => 'Voir $1 ?',
+'restorelink'         => '{{PLURAL:$1|1 modification effacée|$1 modifications effacées}}',
+'feedlinks'           => 'Flux',
+'feed-invalid'        => 'Type de flux invalide.',
+'feed-atom'           => 'Atom',
+'feed-rss'            => 'RSS',
+
+# Short words for each namespace, by default used in the 'article' tab in monobook
+'nstab-main'      => 'Article',
+'nstab-user'      => 'Page utilisateur',
+'nstab-media'     => 'Média',
+'nstab-special'   => 'Spécial',
+'nstab-project'   => 'À propos',
+'nstab-image'     => 'Fichier',
+'nstab-mediawiki' => 'Message',
+'nstab-template'  => 'Modèle',
+'nstab-help'      => 'Aide',
+'nstab-category'  => 'Catégorie',
+
+# Main script and global functions
+'nosuchaction'      => 'Action inconnue',
+'nosuchactiontext'  => 'L’action spécifiée dans l’URL n’est pas reconnue par le wiki.',
+'nosuchspecialpage' => 'Page spéciale inexistante',
+'nospecialpagetext' => 'Vous avez demandé une page spéciale qui n’est pas reconnue par le wiki. Une liste des pages spéciales peut être trouvée sur [[{{ns:special}}:Specialpages]]',
+
+# General errors
+'error'                => 'Erreur',
+'databaseerror'        => 'Erreur de la base de données',
+'dberrortext'          => 'Une erreur de syntaxe s’est produite lors d’une requête sur la base de données . 
+
+Cela peut indiquer un bug dans le logiciel.
+La dernière requête effectuée sur la base de données était :
+<blockquote><tt>$1</tt></blockquote>
+depuis la fonction « <tt>$2</tt> ».
+MySQL a renvoyé l’erreur « <tt>$3 : $4</tt> ».',
+'dberrortextcl'        => 'Une requête à la base de données comporte une erreur de syntaxe. La dernière requête envoyée était : « $1 » effectuée par la fonction « $2 ». MySQL a retourné l’erreur « $3 : $4 ».',
+'noconnect'            => 'Désolé ! Suite à des problèmes techniques, il est impossible de se connecter à la base de données pour le moment. <br />
+$1',
+'nodb'                 => 'Impossible de sélectionner la base de données $1',
+'cachederror'          => 'Cette page est une version en cache et peut ne pas être à jour.',
+'laggedslavemode'      => 'Attention, cette page peut ne pas contenir les toutes dernières modifications effectuées',
+'readonly'             => 'Base de données verrouillée',
+'enterlockreason'      => 'Indiquez la raison du verouillage ainsi qu’une estimation de sa durée',
+'readonlytext'         => 'Les ajouts et mises à jour sur la base de données sont actuellement bloqués, probablement pour permettre la maintenance de la base, après quoi, tout rentrera dans l’ordre.
+L’administrateur ayant verrouillé la base de données a donné l’explication suivante :$1',
+'missingarticle'       => 'La base de données n’a pas pu trouver le texte d’une page qui existe pourtant, dont le nom est « $1 ».
+
+Cela est généralement dû à un diff obsolète ou un lien vers l’historique d’une page effacée.
+
+Si ce n’est pas le cas, vous avez peut-être trouvé un bug dans le logiciel.
+
+Veuillez rapporter cette erreur à un administrateur, en lui indiquant l’adresse de la page fautive.',
+'readonly_lag'         => 'La base de donnée a été automatiquement verrouillée pendant que les serveurs secondaires rattrapent leur retard sur le serveur principal.',
+'internalerror'        => 'Erreur interne',
+'filecopyerror'        => 'Impossible de copier le fichier « $1 » vers « $2 ».',
+'filerenameerror'      => 'Impossible de renommer le fichier « $1 » en « $2 ».',
+'filedeleteerror'      => 'Impossible de supprimer le fichier « $1 ».',
+'filenotfound'         => 'Impossible de trouver le fichier « $1 ».',
+'unexpected'           => 'Valeur inattendue : « $1 » = « $2 ».',
+'formerror'            => 'Erreur : Impossible de soumettre le formulaire',
+'badarticleerror'      => 'Cette action ne peut pas être effectuée sur cette page.',
+'cannotdelete'         => 'Impossible de supprimer la page ou le fichier indiqué. (La suppression a peut-être déjà été effectuée par quelqu’un d’autre.)',
+'badtitle'             => 'Mauvais titre',
+'badtitletext'         => 'Le titre de la page demandée est invalide, vide ou il s’agit d’un titre inter-langue ou inter-projet mal lié. Il contient peut-être un ou plusieurs caractères qui ne peuvent pas être utilisés dans les titres.',
+'perfdisabled'         => 'Désolé ! Cette fonctionnalité est temporairement désactivée car elle ralentit la base de données à tel point que plus personne ne peut utiliser le wiki.',
+'perfdisabledsub'      => 'Ceci est une copie de sauvegarde de $1 :', # obsolete?
+'perfcached'           => 'Ceci est une version en cache et n’est peut-être pas à jour.',
+'perfcachedts'         => 'Les données suivantes sont en cache, elles ne sont donc pas obligatoirement à jour. La dernière actualisation date du $1.',
+'querypage-no-updates' => 'Les mises à jour pour cette page sont actuellemnt désactivées. Les données ci-dessous ne sont pas mises à jour.',
+'wrong_wfQuery_params' => 'Paramètres incorrects sur wfQuery()<br />
+Fonction : $1<br />
+Requête : $2',
+'viewsource'           => 'Voir le texte source',
+'viewsourcefor'        => 'pour $1',
+'protectedpagetext'    => 'Cette page a été protégée pour empêcher sa modification.',
+'viewsourcetext'       => 'Vous pouvez voir et copier le contenu de l’article pour pouvoir travailler dessus :',
+'protectedinterface'   => 'Cette page fournit du texte d’interface pour le logiciel et est protégée pour éviter les abus.',
+'editinginterface'     => "'''Attention :''' vous éditez une page utilisée pour créer le texte de l’interface du logiciel. Les changements se répercuteront, selon le contexte, sur toutes ou certaines pages visibles par les autres utilisateurs.",
+'sqlhidden'            => '(Requête SQL cachée)',
+'cascadeprotected'     => 'Cette page est actuellement protégée car incluse dans les pages suivantes, ayant été protégée avec l’option « protection en cascade » activée :',
+
+# Login and logout pages
+'logouttitle'                => 'Déconnexion',
+'logouttext'                 => "'''Vous êtes à présent déconnecté(e).'''<br />
+Vous pouvez continuer à utiliser {{SITENAME}} de façon anonyme, vous reconnecter sous le même nom ou un autre.",
+'welcomecreation'            => '== Bienvenue, $1 ! ==
+
+Votre compte a été créé. N’oubliez pas de personnaliser vos Préférences sur {{SITENAME}}.',
+'loginpagetitle'             => 'Connexion',
+'yourname'                   => 'Votre nom d’utilisateur',
+'yourpassword'               => 'Votre mot de passe',
+'yourpasswordagain'          => 'Entrez à nouveau votre mot de passe',
+'remembermypassword'         => 'Se souvenir de mon mot de passe (cookie)',
+'yourdomainname'             => 'Votre domaine',
+'externaldberror'            => 'Soit une erreur s’est produite avec la base de données d’authentification externe, soit vous n’êtes pas autorisé à mettre à jour votre compte externe.',
+'loginproblem'               => '<b>Problème d’identification.</b><br />Essayez à nouveau !',
+'alreadyloggedin'            => '<strong>Utilisateur $1, vous êtes déjà identifié !</strong><br />',
+'login'                      => 'Identification',
+'loginprompt'                => 'Vous devez activer les cookies pour vous connecter à {{SITENAME}}.',
+'userlogin'                  => 'Créer un compte ou se connecter',
+'logout'                     => 'Se déconnecter',
+'userlogout'                 => 'Déconnexion',
+'notloggedin'                => 'Non connecté',
+'nologin'                    => 'Vous n’avez pas de compte ? $1.',
+'nologinlink'                => 'Créez un compte',
+'createaccount'              => 'Créer un compte',
+'gotaccount'                 => 'Vous avez déjà un compte ? $1.',
+'gotaccountlink'             => 'Identifiez-vous',
+'createaccountmail'          => 'par courriel',
+'badretype'                  => 'Les mots de passe que vous avez saisis ne sont pas identiques.',
+'userexists'                 => 'Le nom d’utilisateur que vous avez saisi est déjà utilisé. Veuillez en choisir un autre.',
+'youremail'                  => 'Adresse de courriel* :',
+'username'                   => 'Nom d’utilisateur :',
+'uid'                        => 'Numéro d’utilisateur :',
+'yourrealname'               => 'Nom réel*',
+'yourlanguage'               => 'Langue de l’interface :',
+'yourvariant'                => 'Variante',
+'yournick'                   => 'Surnom :',
+'badsig'                     => 'Signature brute incorrecte ; Vérifiez vos balises HTML.',
+'email'                      => 'Courriel',
+'prefs-help-email-enotif'    => 'Cette adresse est aussi utilisée pour vous envoyer des notifications par courriel si vous avez activé les options correspondantes.',
+'prefs-help-realname'        => '* Nom réel (facultatif) : si vous le spécifiez, il sera utilisé pour vous attribuer vos contributions.',
+'loginerror'                 => 'Erreur d’identification',
+'prefs-help-email'           => '* Adresse de courriel (facultatif) : permet aux autres utilisateurs de vous contacter par courriel (lien sur vos pages utilisateur) sans que votre courriel soit visible.',
+'nocookiesnew'               => 'Le compte utilisateur a été créé, mais vous n’êtes pas connecté. {{SITENAME}} utilise des cookies pour la connexion mais vous les avez désactivés. Veuillez les activer et vous reconnecter avec le même nom et le même mot de passe.',
+'nocookieslogin'             => '{{SITENAME}} utilise des cookies pour la connexion mais vous avez les cookies désactivés. Veuillez les activer et vous reconnecter.',
+'noname'                     => 'Vous n’avez pas saisi un nom d’utilisateur valide.',
+'loginsuccesstitle'          => 'Identification réussie.',
+'loginsuccess'               => 'Vous êtes maintenant connecté sur {{SITENAME}} en tant que « $1 ».',
+'nosuchuser'                 => 'L’utilisateur « $1 » n’existe pas.
+Vérifiez que vous avez bien orthographié le nom, ou utilisez le formulaire ci-dessous pour créer un nouveau compte utilisateur.',
+'nosuchusershort'            => 'Il n’y a pas de contributeur avec le nom « $1 ». Veuillez vérifier l’orthographe.',
+'nouserspecified'            => 'Vous devez saisir un nom d’utilisateur.',
+'wrongpassword'              => 'Le mot de passe est incorrect. Veuillez essayer à nouveau.',
+'wrongpasswordempty'         => 'Vous n’avez pas entré de mot de passe. Veuillez essayer à nouveau.',
+'mailmypassword'             => 'Envoyez-moi un nouveau mot de passe',
+'passwordremindertitle'      => 'Votre nouveau mot de passe sur {{SITENAME}}',
+'passwordremindertext'       => 'Quelqu’un (probablement vous) ayant l’adresse IP $1 a demandé à ce qu’un nouveau mot de passe vous soit envoyé pour {{SITENAME}} ($4).
+Le mot de passe de l’utilisateur « $2 » est à présent « $3 ».
+Nous vous conseillons de vous connecter et de modifier ce mot de passe dès que possible.
+
+Si vous n’êtes pas l’auteur de cette demande, ou si vous vous souvenez à présent de votre ancien mot de passe et que vous ne souhaitez plus en changer, vous pouvez ignorer ce message et continuer à utiliser votre ancien mot de passe.',
+'noemail'                    => 'Aucun adresse de courriel n’a été enregistrée pour l’utilisateur « $1 ».',
+'passwordsent'               => 'Un nouveau mot de passe a été envoyé à l’adresse de courriel de l’utilisateur « $1 ». Veuillez vous reconnecter après l’avoir reçu.',
+'blocked-mailpassword'       => 'Votre adresse IP est bloquée en édition, la fonction de rappel du mot de passe est donc désactivée pour éviter les abus.',
+'eauthentsent'               => 'Un courriel de confirmation a été envoyé à l’adresse indiquée.
+Avant qu’un autre courriel ne soit envoyé à ce compte, vous devrez suivre les instructions du courriel et confirmer que le compte est bien le vôtre.',
+'throttled-mailpassword'     => 'Un courriel de rappel de votre mot de passe a déjà été envoyé durant les $1 dernières heures. Afin d’éviter les abus, un seul courriel de rappel sera envoyé en $1 heures.',
+'mailerror'                  => 'Erreur en envoyant le courriel : $1',
+'acct_creation_throttle_hit' => 'Désolé, vous avez déjà créé $1 comptes. Vous ne pouvez pas en créer de nouveaux.',
+'emailauthenticated'         => 'Votre adresse de courriel a été authentifiée le $1.',
+'emailnotauthenticated'      => 'Votre adresse de courriel n’est <strong>pas encore authentifiée</strong>. Aucun courriel ne sera envoyé pour chacune des fonctions suivantes.',
+'noemailprefs'               => '<strong>Aucune adresse électronique n’a été indiquée,</strong> les fonctions suivantes ne seront pas disponibles.',
+'emailconfirmlink'           => 'Confirmez votre adresse de courriel',
+'invalidemailaddress'        => 'Cette adresse de courriel ne peut pas être acceptée car elle semble avoir un format invalide. Veuillez entrer une adresse valide ou laisser ce champ vide.',
+'accountcreated'             => 'Compte créé.',
+'accountcreatedtext'         => 'Le compte utilisateur pour $1 a été créé.',
+
+# Password reset dialog
+'resetpass'               => 'Remise à zéro du mot de passe',
+'resetpass_announce'      => 'Vous vous êtes enregistré avec un mot de passe temporaire envoyé par e-mail. Pour terminer l’enregistrement, vous devez entreer un nouveau mot de passe ici :',
+'resetpass_text'          => '<!-- Add text here -->',
+'resetpass_header'        => 'Remise à zéro du mot de passe',
+'resetpass_submit'        => 'Changer le mot de passe et s’enregistrer',
+'resetpass_success'       => 'Votre mot de passe a été changé avec succès ! Enregistrement en cours...',
+'resetpass_bad_temporary' => 'Mot de passe temporaire invalide. Vous avez peut-être déjà changé votre mot de passe avec succès, ou demandé un nouveau mot de passe temporaire.',
+'resetpass_forbidden'     => 'Les mots de passe ne peuvent pas être changés sur ce wiki',
+'resetpass_missing'       => 'Aucune donnée entrée.',
+
+# Edit page toolbar
+'bold_sample'     => 'Texte gras',
+'bold_tip'        => 'Texte gras',
+'italic_sample'   => 'Texte italique',
+'italic_tip'      => 'Texte italique',
+'link_sample'     => 'Titre du lien',
+'link_tip'        => 'Lien interne',
+'extlink_sample'  => 'http://www.example.com titre du lien',
+'extlink_tip'     => 'Lien externe (n’oubliez pas le préfixe http://)',
+'headline_sample' => 'Texte de sous-titre',
+'headline_tip'    => 'Sous-titre niveau 2',
+'math_sample'     => 'Entrez votre formule ici',
+'math_tip'        => 'Formule mathématique (LaTeX)',
+'nowiki_sample'   => 'Entrez le texte non formaté ici',
+'nowiki_tip'      => 'Ignorer la syntaxe wiki',
+'image_sample'    => 'Exemple.jpg',
+'image_tip'       => 'Image insérée',
+'media_sample'    => 'Exemple.ogg',
+'media_tip'       => 'Lien vers un fichier média',
+'sig_tip'         => 'Votre signature avec la date',
+'hr_tip'          => 'Ligne horizontale (ne pas en abuser)',
+
+# Edit pages
+'summary'                   => 'Résumé&nbsp;',
+'subject'                   => 'Sujet/titre',
+'minoredit'                 => 'Modification mineure',
+'watchthis'                 => 'Suivre cette page',
+'savearticle'               => 'Sauvegarder',
+'preview'                   => 'Prévisualisation',
+'showpreview'               => 'Prévisualisation',
+'showlivepreview'           => 'Aperçu rapide',
+'showdiff'                  => 'Changements en cours',
+'anoneditwarning'           => "'''Attention :''' Vous n’êtes pas identifié. Votre adresse IP sera enregistrée dans l’historique de cette page.",
+'missingsummary'            => "'''Rappel :''' Vous n’avez pas entré de résumé de modification. Si vous cliquez une nouvelle fois sur le bouton « Sauvegarder », votre modification sera enregistrée sans résumé.",
+'missingcommenttext'        => 'Merci d’insérer un résumé ci-dessous.',
+'missingcommentheader'      => "'''Rappel :''' Vous n’avez pas fourni de sujet/titre à ce commentaire. Si vous cliquez à nouveau sur ''Sauvegarder'', votre édition sera enregistrée sans commentaire.",
+'summary-preview'           => 'Prévisualisation du résumé',
+'subject-preview'           => 'Prévisualisation du sujet/titre',
+'blockedtitle'              => 'L’utilisateur est bloqué.',
+'blockedtext'               => "<big>'''Votre compte utilisateur (ou votre adresse IP) a été bloqué.'''</big>
+
+Le blocage a été effectué par $1 pour la raison suivante : ''$2''.
+
+Vous pouvez contacter $1 ou un autre [[{{MediaWiki:grouppage-sysop}}|administrateur]] pour en discuter. Vous ne pouvez utiliser la fonction « Envoyer un courriel à cet utilisateur » que si une adresse de courriel valide est spécifiée dans vos [[Special:Preferences|préférences]]. Votre adresse IP actuelle est $3 et votre identifiant de blocage est #$5. Veuillez inclure cette adresse dans toute requête.",
+'blockedoriginalsource'     => "Le code source de  '''$1''' est indiqué ci-dessous :",
+'blockededitsource'         => "Le contenu de '''vos modifications''' apportées à '''$1''' est indiqué ci-dessous :",
+'whitelistedittitle'        => 'Enregistrement nécessaire pour modifier le contenu',
+'whitelistedittext'         => 'Vous devez être $1 pour avoir la permission de modifier le contenu.',
+'whitelistreadtitle'        => 'Enregistrement nécessaire pour lire le contenu',
+'whitelistreadtext'         => 'Vous devez être [[Special:Userlogin|connecté]] pour lire le contenu.',
+'whitelistacctitle'         => 'Vous n’êtes pas autorisé à créer un compte.',
+'whitelistacctext'          => 'Pour pouvoir créer un compte sur ce Wiki, vous devez être [[Special:Userlogin|connecté]] et avoir les permissions appropriées.',
+'confirmedittitle'          => 'Validation de l’adresse de courriel nécessaire pour modifier le contenu',
+'confirmedittext'           => 'Vous devez confirmer votre adresse courriel avant de modifier {{SITENAME}}. Veuillez entrer et valider votre adresse électronique à l’aide de la page [[Special:Preferences|préférences]].',
+'nosuchsectiontitle'        => 'Section manquante',
+'nosuchsectiontext'         => "Vous avez essayé de modifier une section qui n’existe pas. Puisqu’il n’y a pas de section $1, il n’y a pas d'endroit où sauvegarder vos modifications.",
+'loginreqtitle'             => 'Enregistrement nécessaire',
+'loginreqlink'              => 'connecter',
+'loginreqpagetext'          => 'Vous devez vous $1 pour voir les autres pages.',
+'accmailtitle'              => 'Mot de passe envoyé.',
+'accmailtext'               => 'Le mot de passe de « $1 » a été envoyé à l’adresse $2.',
+'newarticle'                => '(Nouveau)',
+'newarticletext'            => "Vous avez suivi un lien vers une page qui n’existe pas encore. Pour créer cette page, entrez votre texte dans la boîte ci-dessous (vous pouvez consulter [[{{MediaWiki:helppage}}|la page d’aide]] pour plus d’information). Si vous êtes arrivé ici par erreur, cliquez sur le bouton '''retour''' de votre navigateur.",
+'anontalkpagetext'          => "---- ''Vous êtes sur la page de discussion d’un utilisateur anonyme qui n’a pas encore créé de compte ou qui ne l’utilise pas. Pour cette raison, nous devons utiliser son adresse IP pour l’identifier. Une adresse IP peut être partagée par plusieurs utilisateurs. Si vous êtes un utilisateur anonyme et si vous constatez que des commentaires qui ne vous concernent pas vous ont été adressés, vous pouvez [[Special:Userlogin|créer un compte ou vous connecter]] afin d’éviter toute confusion future avec d’autres contributeurs anonymes.''",
+'noarticletext'             => 'Il n’y a pour l’instant aucun texte sur cette page ; vous pouvez [[{{ns:special}}:Search/{{PAGENAME}}|lancer une recherche sur le titre de cette page]] ou [{{fullurl:{{NAMESPACE}}:{{FULLPAGENAME}}|action=edit}} modifier cette page].',
+'clearyourcache'            => "'''Note :''' Après avoir sauvegardé, vous devrez peut-être forcer le rechargement de la page pour voir les changements : '''Mozilla / Firefox / Safari''' : appuyez sur ''Shift'' en cliquant sur ''Recharger'', ou appuyez sur ''Ctrl-Shift-R'' (''Cmd-Shift-R'' sur Mac) ; '''IE''' : appuyez sur ''Ctrl'' en cliquant sur ''Rafraîchir'', ou appuyez sur ''Ctrl-F5'' ; '''Konqueror''' : cliquez simplement sur ''Recharger'' ou appuyez sur ''F5'' ; '''Opera''' : vous devrez peut-être vider complètement votre cache via ''Outils > Préférences''.",
+'usercssjsyoucanpreview'    => "'''Astuce :''' utilisez le bouton « Prévisualisation » pour tester votre nouvelle feuille CSS/JS avant de l’enregistrer.",
+'usercsspreview'            => "'''Rappelez-vous que vous êtes en train de prévisualiser votre propre feuille CSS et qu’elle n’a pas encore été enregistrée !'''",
+'userjspreview'             => "'''Rappelez-vous que vous êtes en train de visualiser ou de tester votre code JavaScript et qu’il n’a pas encore été enregistré !'''",
+'userinvalidcssjstitle'     => "'''Attention :''' il n’existe pas de style « $1 ». Rappelez-vous que les pages personnelles avec extensions .css et .js utilisent des titres en minuscules après le nom d'utilisateur et la barre de fraction /.<br />Ainsi, Utilisateur:Foo/monobook.css est valide, alors que Utilisateur:Foo/Monobook.css sera une feuille de style invalide.",
+'updated'                   => '(Mis à jour)',
+'note'                      => '<strong>Note :</strong>',
+'previewnote'               => 'Attention, ce texte n’est qu’une prévisualisation et n’a pas encore été sauvegardé !',
+'previewconflict'           => 'Cette prévisualisation montre le texte de la boîte de modification supérieure tel qu’il apparaîtra si vous choisissez de le sauvegarder.',
+'session_fail_preview'      => '<strong>Désolé ! Nous ne pouvons enregistrer votre modification à cause d’une perte d’informations concernant votre session. Veuillez réessayer. Si cela échoue à nouveau, veuillez vous déconnecter, puis vous reconnecter.</strong>',
+'session_fail_preview_html' => "<strong>Désolé ! Nous ne pouvons enregistrer votre modification à cause d’une perte d’informations concernant votre session.</strong>
+
+''L’HTML brut étant activé sur ce wiki, la prévisualisation a été masquée afin de prévenir une attaque par JavaScript.''
+
+<strong>Si la tentative de modification était légitime, veuillez réessayer. Si cela échoue à nouveau, veuillez vous déconnecter, puis vous reconnecter.</strong>",
+'importing'                 => 'Import de $1',
+'editing'                   => 'Modification de $1',
+'editinguser'               => 'Modification de $1',
+'editingsection'            => 'Modification de $1 (section)',
+'editingcomment'            => 'Modification de $1 (commentaire)',
+'editconflict'              => 'Conflit de modification : $1',
+'explainconflict'           => '<b>Cette page a été sauvegardée après que vous avez commencé à la modifier. La zone de modification supérieure contient le texte tel qu’il est enregistré actuellement dans la base de données. Vos modifications apparaissent dans la zone de modification inférieure. Vous allez devoir apporter vos modifications au texte existant. Seul le texte de la zone supérieure sera sauvegardé.</b><br />',
+'yourtext'                  => 'Votre texte',
+'storedversion'             => 'Version enregistrée',
+'nonunicodebrowser'         => '<strong>Attention : Votre navigateur ne supporte pas l’unicode. Une solution temporaire a été trouvée pour vous permettre de modifier en tout sûreté un article : les caractères non-ASCII apparaîtront dans votre boîte de modification en tant que codes hexadécimaux. Vous devriez utiliser un navigateur plus récent.</strong>',
+'editingold'                => '<strong>Attention : vous êtes en train de modifier une version obsolète de cette page. Si vous sauvegardez, toutes les modifications effectuées depuis cette version seront perdues.</strong>',
+'yourdiff'                  => 'Différences',
+'copyrightwarning'          => 'Toutes les contributions à {{SITENAME}} sont considérées comme publiées sous les termes de la $2 (voir $1 pour plus de détails). Si vous ne désirez pas que vos écrits soient modifiés et distribués à volonté, merci de ne pas les soumettre ici.<br />
+Vous nous promettez aussi que vous avez écrit ceci vous-même, ou que vous l’avez copié d’une source provenant du domaine public, ou d’une ressource libre.<strong>N’UTILISEZ PAS DE TRAVAUX SOUS COPYRIGHT SANS AUTORISATION EXPRESSE !</strong>',
+'copyrightwarning2'         => 'Toutes les contributions à {{SITENAME}} peuvent être modifiées ou supprimées par d’autres utilisateurs. Si vous ne désirez pas que vos écrits soient modifiés et distribués à volonté, merci de ne pas les soumettre ici.<br />
+Vous nous promettez aussi que vous avez écrit ceci vous-même, ou que vous l’avez copié d’une source provenant du domaine public, ou d’une ressource libre. (voir $1 pour plus de détails).
+<strong>N’UTILISEZ PAS DE TRAVAUX SOUS COPYRIGHT SANS AUTORISATION EXPRESSE !</strong>',
+'longpagewarning'           => "'''AVERTISSEMENT : cette page a une longueur de $1 Ko ;
+certains navigateurs gèrent mal la modification des pages approchant ou dépassant 32 ko.
+Peut-être devriez-vous diviser la page en sections plus petites.'''",
+'longpageerror'             => '<strong>ERREUR : Le texte que vous avez soumis fait $1 Ko, ce qui dépasse la limite fixée à $2 Ko. Le texte ne peut pas être sauvé.</strong>',
+'readonlywarning'           => "'''AVERTISSEMENT : La base de données a été verrouillée pour maintenance,
+vous ne pourrez donc pas sauvegarder vos modifications maintenant. Vous pouvez copier le texte dans un fichier texte et le sauver pour plus tard.'''",
+'protectedpagewarning'      => "'''AVERTISSEMENT : cette page est protégée.
+Seuls les utilisateurs ayant le statut d’administrateur peuvent la modifier..'''",
+'semiprotectedpagewarning'  => "'''Notee:''' Cette page a été protégée de telle façon que seuls les contributeurs enregistrés puissent la modifier.",
+'cascadeprotectedwarning'   => '<strong>ATTENTION : Cette page a été protégée de manière à ce que seuls les [[{{MediaWiki:grouppage-sysop}}|administrateurs]] puissent l’éditer. Cette protection a été faite car cette page est incluse dans une page protégée avec la « protection en cascade » activée.</strong>',
+'templatesused'             => 'Modèles utilisés sur cette page :',
+'templatesusedpreview'      => 'Modèles utilisés dans cette prévisualisation :',
+'templatesusedsection'      => 'Modèles utilisés dans cette section :',
+'template-protected'        => '(protégé)',
+'template-semiprotected'    => '(semi-protégé)',
+'edittools'                 => '<!-- Tout texte entré ici sera affiché sous les boîtes de modification ou d’import de fichier. -->',
+'nocreatetitle'             => 'Création de page limitée',
+'nocreatetext'              => 'Ce site a restreint la possibilité de créer de nouvelles pages. Vous pouvez revenir en arrière et modifier une page existante, [[Special:Userlogin|vous connecter ou créer un compte]].',
+
+# "Undo" feature
+'undo-success' => 'Cette modification a été défaite. Veuillez confirmer, et sauvegarder les changements ci-dessous.',
+'undo-failure' => 'Cette modification n’a pas pu être défaite en raison de conflit avec des modifications intermédiaires.',
+'undo-summary' => 'Annulation des modifications $1 de [[Special:Contributions/$2|$2]] ([[User talk:$2|discuter]])',
+
+# Account creation failure
+'cantcreateaccounttitle' => 'Vous ne pouvez pas créer de compte.',
+'cantcreateaccounttext'  => 'La création de compte depuis cette adresse IP (<b>$1</b>) a été bloquée. Ceci est probablement la conséquence d’un vandalisme répété depuis votre école ou votre fournisseur d’accès à internet.',
+
+# History pages
+'revhistory'          => 'Historique de la page et liste des auteurs.',
+'viewpagelogs'        => 'Voir le journal de cette page',
+'nohistory'           => 'Il n’existe pas d’historique pour cette page.',
+'revnotfound'         => 'Version introuvable',
+'revnotfoundtext'     => 'La version précédente de cette page n’a pas pu être retrouvée. Veuillez vérifier l’URL que vous avez utilisée pour accéder à cette page.',
+'loadhist'            => 'Chargement de l’historique de la page',
+'currentrev'          => 'Version actuelle',
+'revisionasof'        => 'Version du $1',
+'revision-info'       => 'Version du $1 par $2',
+'previousrevision'    => '← Version précédente',
+'nextrevision'        => 'Version suivante →',
+'currentrevisionlink' => 'voir la version courante',
+'cur'                 => 'actu',
+'next'                => 'suiv',
+'last'                => 'diff',
+'orig'                => 'orig',
+'page_first'          => 'prem',
+'page_last'           => 'dern',
+'histlegend'          => 'Sélection du diff : cochez les boutons radio des versions à comparer et tapez Entrée ou cliquez sur le bouton en bas de la page.<br />Légende : (actu) = différence avec la version actuelle ,
+(dern) = différence avec la version précédente, M = modification mineure',
+'deletedrev'          => '[supprimé]',
+'histfirst'           => 'Premières contributions',
+'histlast'            => 'Dernières contributions',
+'historysize'         => '($1 octets)',
+'historyempty'        => '(vide)',
+
+# Revision feed
+'history-feed-title'          => 'Historique des versions',
+'history-feed-description'    => 'Historique pour cette page sur le wiki',
+'history-feed-item-nocomment' => '$1 le $2', # user at time
+'history-feed-empty'          => 'La page demandée n’existe pas. Elle a peut-être été supprimée du wiki ou renommée. Vous pouvez essayer de [[Special:Search|rechercher dans le wiki]] des pages pertinentes récentes.',
+
+# Revision deletion
+'rev-deleted-comment'         => '(commentaire supprimé)',
+'rev-deleted-user'            => '(nom d’utilisateur supprimé)',
+'rev-deleted-event'           => '(entry removed)',
+'rev-deleted-text-permission' => '<div class="mw-warning plainlinks"> Cette version de la page a été retirée des archives publiques. Il peut y avoir des détails dans le [{{fullurl:Special:Log/delete|page={{PAGENAMEE}}}} journal des suppressions]. </div>',
+'rev-deleted-text-view'       => '<div class="mw-warning plainlinks"> Cette version de la page a été retirée des archives publiques. En tant qu’administrateur de ce site, vous pouvez la visualiser ; il peut y avoir des détails dans le [{{fullurl:Special:Log/delete|page={{PAGENAMEE}}}} journal des suppressions]. </div>',
+'rev-delundel'                => 'afficher/masquer',
+'revisiondelete'              => 'Supprimer/Restaurer des versions',
+'revdelete-nooldid-title'     => 'Pas de cible pour la révision',
+'revdelete-nooldid-text'      => 'Vous n’avez pas précisé la ou les révision(s) cible(s) pour utiliser cette fonction.',
+'revdelete-selected'          => "{{PLURAL:$2|Version sélectionnée|Versions sélectionnées}} de '''$1''' :",
+'logdelete-selected'          => "{{PLURAL:$2|Évènement de journal sélectionné|Évènements de journal sélectionnés}} pour '''$1''' :",
+'revdelete-text'              => 'Les versions supprimées apparaîtront encore dans l’historique de l’article, mais leur contenu textuel sera inaccessible au public.
+
+D’autres administrateurs sur ce wiki pourront toujours accèder au contenu caché et le restaurer à nouveau à travers cette même interface, à moins qu’une restriction supplémentaire ne soit mise en place par les opérateurs du site.',
+'revdelete-legend'            => 'Mettre en place des restrictions de version :',
+'revdelete-hide-text'         => 'Masquer le texte de la version',
+'revdelete-hide-name'         => 'Masquer l’action et la cible',
+'revdelete-hide-comment'      => 'Masquer le commentaire de modification',
+'revdelete-hide-user'         => 'Masquer le pseudo ou l’adresse IP du contributeur.',
+'revdelete-hide-restricted'   => 'Appliquer ces restrictions aux administrateurs ainsi qu’aux autres utilisateurs',
+'revdelete-suppress'          => 'Supprimer les données des administrateurs et des autres',
+'revdelete-hide-image'        => 'Masquer le contenu du fichier',
+'revdelete-unsuppress'        => 'Enlever les restrictions sur les versions restaurées',
+'revdelete-log'               => 'Commentaire pour le journal :',
+'revdelete-submit'            => 'Appliquer à la version sélectionnée',
+'revdelete-logentry'          => 'La visibilité de la version a été modifiée pour [[$1]]',
+'logdelete-logentry'          => 'La visibilité de l’évènement a été modifiée pour [[$1]]',
+'revdelete-logaction'         => '$1 {{plural:$1|version changée|versions changées}} en mode $2',
+'logdelete-logaction'         => '$1 {{plural:$1|évènement de [[$3]] changé|évènements de [[$3]] changés}} en mode $2',
+'revdelete-success'           => 'Visibilité des versions changées avec succès.',
+'logdelete-success'           => 'Visibilité des évènements changées avec succès.',
+
+# Oversight log
+'oversightlog'    => 'Journal oversight',
+'overlogpagetext' => 'la liste ci-dessous montre les suppressions et blocages récents dont le contenu est masqué même pour les administrateurs.
+Consulter la [[Special:Ipblocklist|liste des comptes bloqués]] pour la liste des blocages en cours.',
+
+# Diffs
+'difference'                => '(Différences entre les versions)',
+'loadingrev'                => 'chargement de l’ancienne version pour comparaison',
+'lineno'                    => 'Ligne $1 :',
+'editcurrent'               => 'Modifier la version actuelle de cette page',
+'selectnewerversionfordiff' => 'Choisir une version plus récente',
+'selectolderversionfordiff' => 'Choisir une version plus ancienne',
+'compareselectedversions'   => 'Comparer les versions sélectionnées',
+'editundo'                  => 'défaire',
+'diff-multi'                => '({{plural:$1|Une révision intermédiaire masquée|$1 révisions intermédiaires masquées}})',
+
+# Search results
+'searchresults'         => 'Résultats de la recherche',
+'searchresulttext'      => 'Pour plus d’informations sur la recherche dans {{SITENAME}}, voir [[{{MediaWiki:helppage}}|{{int:help}}]].',
+'searchsubtitle'        => 'Vous avez recherché « [[:$1]] »',
+'searchsubtitleinvalid' => 'Vous avez recherché « $1 »',
+'badquery'              => 'Recherche mal formulée',
+'badquerytext'          => 'Nous n’avons pas pu traiter votre requête. Vous avez probablement recherché un mot d’une longueur inférieure à trois lettres, ce qui n’est pas encore possible. Vous avez aussi pu faire une erreur de syntaxe, telle que « poisson et et écailles ». Veuillez essayer une autre recherche.',
+'matchtotals'           => 'La requête « $1 » correspond à $2 titre(s) d’article et au texte de $3 article(s).',
+'noexactmatch'          => "'''Aucune page intitulée « $1 » n’existe.''' Vous pouvez [[:$1|créer cet article]].",
+'titlematches'          => 'Correspondances dans les titres d’articles',
+'notitlematches'        => 'Aucun titre d’article ne correspond à la recherche.',
+'textmatches'           => 'Correspondances dans le texte d’articles',
+'notextmatches'         => 'Aucun texte d’article ne correspond à la recherche.',
+'prevn'                 => '$1 précédents',
+'nextn'                 => '$1 suivants',
+'viewprevnext'          => 'Voir ($1) ($2) ($3).',
+'showingresults'        => 'Affichage de <b>$1</b> {{plural:$1|résultat|résultats}} à partir du #<b>$2</b>.',
+'showingresultsnum'     => 'Affichage de <b>$3</b> {{plural:$3|résultat|résultats}} à partir du #<b>$2</b>.',
+'nonefound'             => '<strong>Note</strong> : l’absence de résultat est souvent due à l’emploi de termes de recherche trop courants, comme « à » ou « de », qui ne sont pas indexés, ou à l’emploi de plusieurs termes de recherche (seules les pages contenant tous les termes apparaissent dans les résultats).',
+'powersearch'           => 'Rechercher',
+'powersearchtext'       => 'Rechercher dans les espaces de noms :<br />
+$1<br />
+$2 Inclure les page de redirections<br /> Rechercher $3 $9',
+'searchdisabled'        => 'La recherche sur {{SITENAME}} est désactivée. En attendant la réactivation, vous pouvez effectuer une recherche via Google. Attention, leur indexation du contenu {{SITENAME}} peut ne pas être à jour.',
+'blanknamespace'        => '(principal)',
+
+# Preferences page
+'preferences'              => 'Préférences',
+'mypreferences'            => 'Préférences',
+'prefsnologin'             => 'Non connecté',
+'prefsnologintext'         => 'Vous devez être [[Special:Userlogin|connecté]] pour modifier vos préférences d’utilisateur.',
+'prefsreset'               => 'Les préférences ont été rétablies à partir de la version enregistrée.',
+'qbsettings'               => 'Barre outils',
+'qbsettings-none'          => 'Aucune',
+'qbsettings-fixedleft'     => 'Gauche',
+'qbsettings-fixedright'    => 'Droite',
+'qbsettings-floatingleft'  => 'Flottante à gauche',
+'qbsettings-floatingright' => 'Flottante à droite',
+'changepassword'           => 'Modification du mot de passe',
+'skin'                     => 'Apparence',
+'math'                     => 'Rendu des maths',
+'dateformat'               => 'Format de date',
+'datedefault'              => 'Aucune préférence',
+'datetime'                 => 'Date et heure',
+'math_failure'             => 'Erreur math',
+'math_unknown_error'       => 'erreur indéterminée',
+'math_unknown_function'    => 'fonction inconnue',
+'math_lexing_error'        => 'erreur lexicale',
+'math_syntax_error'        => 'erreur de syntaxe',
+'math_image_error'         => 'La conversion en PNG a échoué ; vérifiez l’installation de Latex, dvips, gs et convert',
+'math_bad_tmpdir'          => 'Impossible de créer ou d’écrire dans le répertoire math temporaire',
+'math_bad_output'          => 'Impossible de créer ou d’écrire dans le répertoire math de sortie',
+'math_notexvc'             => 'L’exécutable « texvc » est introuvable. Lisez math/README pour le configurer.',
+'prefs-personal'           => 'Informations personnelles',
+'prefs-rc'                 => 'Modifications récentes',
+'prefs-watchlist'          => 'Liste de suivi',
+'prefs-watchlist-days'     => 'Nombre de jours à afficher dans la liste de suivi :',
+'prefs-watchlist-edits'    => 'Nombre de modifications à afficher dans la liste de suivi étendue :',
+'prefs-misc'               => 'Préférences diverses',
+'saveprefs'                => 'Enregistrer les préférences',
+'resetprefs'               => 'Rétablir les préférences',
+'oldpassword'              => 'Ancien mot de passe :',
+'newpassword'              => 'Nouveau mot de passe :',
+'retypenew'                => 'Confirmer le nouveau mot de passe :',
+'textboxsize'              => 'Fenêtre de modification',
+'rows'                     => 'Rangées :',
+'columns'                  => 'Colonnes :',
+'searchresultshead'        => 'Recherche',
+'resultsperpage'           => 'Nombre de réponses par page :',
+'contextlines'             => 'Nombre de lignes par réponse :',
+'contextchars'             => 'Nombre de caractères de contexte par ligne :',
+'stubthreshold'            => 'Taille minimale des articles courts :',
+'recentchangesdays'        => 'Nombre de jours à afficher dans les modifications récentes :',
+'recentchangescount'       => 'Nombre de modifications à afficher dans les modifications récentes :',
+'savedprefs'               => 'Les préférences ont été sauvegardées.',
+'timezonelegend'           => 'Fuseau horaire',
+'timezonetext'             => 'Nombre d’heures de décalage entre votre heure locale et l’heure du serveur (UTC).',
+'localtime'                => 'Heure locale :',
+'timezoneoffset'           => 'Décalage horaire¹ :',
+'servertime'               => 'Heure du serveur :',
+'guesstimezone'            => 'Utiliser la valeur du navigateur',
+'allowemail'               => 'Autoriser l’envoi de courriel venant d’autres utilisateurs',
+'defaultns'                => 'Rechercher par défaut dans ces espaces de noms',
+'default'                  => 'défaut',
+'files'                    => 'Fichiers',
+
+# User rights
+'userrights-lookup-user'     => 'Gestion des droits utilisateur',
+'userrights-user-editname'   => 'Entrer un nom d’utilisateur :',
+'editusergroup'              => 'Modification des groupes utilisateurs',
+'userrights-editusergroup'   => 'Modifier les groupes de l’utilisateur',
+'saveusergroups'             => 'Sauvegarder les groupes utilisateur',
+'userrights-groupsmember'    => 'Membre de :',
+'userrights-groupsavailable' => 'Groupes disponibles :',
+'userrights-groupshelp'      => 'Choisissez les groupes desquels vous voulez retirer ou rajouter l’utilisateur. Les groupes non sélectionnés ne seront pas modifiés. Vous pouvez désélectionner un groupe avec CTRL + clic gauche.',
+
+# Groups
+'group'            => 'Groupe :',
+'group-bot'        => 'Bots',
+'group-sysop'      => 'Administrateurs',
+'group-bureaucrat' => 'Bureaucrates',
+'group-all'        => 'Tous',
+
+'group-bot-member'        => 'Bot',
+'group-sysop-member'      => 'Administrateur',
+'group-bureaucrat-member' => 'Bureaucrate',
+
+'grouppage-bot'        => '{{ns:project}}:Bots',
+'grouppage-sysop'      => '{{ns:project}}:Administrateurs',
+'grouppage-bureaucrat' => '{{ns:project}}:Bureaucrates',
+
+# User rights log
+'rightslog'      => 'Historique des modifications de statut',
+'rightslogtext'  => 'Ceci est un journal des modifications de statut d’utilisateur.',
+'rightslogentry' => 'a modifié les droits de l’utilisateur « $1 » de $2 à $3',
+'rightsnone'     => '(aucun)',
+
+# Recent changes
+'nchanges'                          => '$1 {{PLURAL:$1|modification|modifications}}',
+'recentchanges'                     => 'Modifications récentes',
+'recentchangestext'                 => 'Suivez sur cette page les dernières modifications de {{SITENAME}}.',
+'recentchanges-feed-description'    => 'Suivez les dernières modifications de ce wiki dans un flux.',
+'rcnote'                            => 'Ci-dessous se {{PLURAL:$1|trouve la dernière modification|trouvent les $1 dernières modifications}} depuis {{PLURAL:$2|le dernier jour|les <b>$2</b> derniers jours}}, en date du $3.',
+'rcnotefrom'                        => 'Voici les modifications effectuées depuis le <strong>$2</strong> (<b>$1</b> au maximum).',
+'rclistfrom'                        => 'Afficher les nouvelles modifications depuis le $1.',
+'rcshowhideminor'                   => '$1 modifications mineures',
+'rcshowhidebots'                    => '$1 robots',
+'rcshowhideliu'                     => '$1 utilisateurs enregistrés',
+'rcshowhideanons'                   => '$1 contributions d’IP',
+'rcshowhidepatr'                    => '$1 éditions surveillées',
+'rcshowhidemine'                    => '$1 mes contributions',
+'rclinks'                           => 'Afficher les $1 dernières modifications effectuées au cours des $2 derniers jours<br />$3.',
+'diff'                              => 'diff',
+'hist'                              => 'hist',
+'hide'                              => 'masquer',
+'show'                              => 'afficher',
+'minoreditletter'                   => 'm',
+'newpageletter'                     => 'N',
+'boteditletter'                     => 'b',
+'sectionlink'                       => '→',
+'number_of_watching_users_pageview' => '[$1 utilisateur(s) suivant]',
+'rc_categories'                     => 'Limite des catégories (séparation avec « | »)',
+'rc_categories_any'                 => 'Toutes',
+
+# Recent changes linked
+'recentchangeslinked'          => 'Suivi des liens',
+'recentchangeslinked-noresult' => 'Aucun changement sur les pages liées pendant la période choisie.',
+'recentchangeslinked-summary'  => "Cette page spéciale montre les modifications récentes sur les pages qui sont liées. Les pages de votre liste de suivi sont '''en gras'''.",
+
+# Upload
+'upload'                      => 'Importer une image ou un son',
+'uploadbtn'                   => 'Importer le fichier',
+'reupload'                    => 'Copier à nouveau',
+'reuploaddesc'                => 'Retour au formulaire.',
+'uploadnologin'               => 'Non connecté(e)',
+'uploadnologintext'           => 'Vous devez être [[Special:Userlogin|connecté]] pour copier des fichiers sur le serveur.',
+'upload_directory_read_only'  => 'Le serveur Web ne peut écrire dans le dossier cible ($1).',
+'uploaderror'                 => 'Erreur',
+'uploadtext'                  => 'Utilisez ce formulaire pour copier des fichiers, pour voir ou rechercher des images précédemment copiées consultez la [[Special:Imagelist|liste de fichiers copiés]], les copies et suppressions sont aussi enregistrées dans le [[Special:Log/upload|journal des copies]].
+
+Pour inclure une image dans une page, utilisez un lien de la forme
+<b><nowiki>[[</nowiki>{{ns:6}}<nowiki>:fichier.jpg]]</nowiki></b>,
+<b><nowiki>[[</nowiki>{{ns:6}}<nowiki>:fichier.png|texte alternatif]]</nowiki></b> or
+<b><nowiki>[[</nowiki>{{ns:-2}}<nowiki>:fichier.ogg]]</nowiki></b> pour lier directement vers le fichier.',
+'uploadlog'                   => 'Historique des importations',
+'uploadlogpage'               => 'Historique des importations de fichiers multimédia',
+'uploadlogpagetext'           => 'Voici la liste des derniers fichiers copiés sur le serveur.',
+'filename'                    => 'Nom du fichier',
+'filedesc'                    => 'Description',
+'fileuploadsummary'           => 'Description :',
+'filestatus'                  => 'Statut du copyright',
+'filesource'                  => 'Source',
+'uploadedfiles'               => 'Fichiers copiés',
+'ignorewarning'               => 'Ignorer l’avertissement et sauvegarder le fichier.',
+'ignorewarnings'              => 'Ignorer les avertissements lors de l’import',
+'minlength'                   => 'Les noms des images doivent comporter au moins trois lettres.',
+'illegalfilename'             => 'Le nom de fichier « $1 » contient des caractères interdits dans les titres de pages. Merci de le renommer et de le copier à nouveau.',
+'badfilename'                 => 'L’image a été renommée « $1 ».',
+'filetype-badmime'            => 'Les fichiers du type MIME « $1 » ne peuvent pas être importés.',
+'filetype-badtype'            => "'''« .$1 »''' est un type de fichier non désiré
+: Liste des types de fichiers autorisés : $2",
+'filetype-missing'            => 'Le fichier n’a aucune extension (comme « .jpg » par exemple).',
+'large-file'                  => 'Les fichiers importés ne devraient pas être plus gros que $1 ; ce fichier fait $2.',
+'largefileserver'             => 'La taille de ce fichier est supérieure au maximum autorisé.',
+'emptyfile'                   => 'Le fichier que vous voulez importer semble vide. Ceci peut-être dû à une erreur dans le nom du fichier. Veuillez vérifier que vous désirez vraiment copier ce fichier.',
+'fileexists'                  => 'Un fichier avec ce nom existe déjà. Merci de vérifier $1. Êtes-vous certain de vouloir modifier ce fichier ?',
+'fileexists-extension'        => 'Un fichier avec un nom similaire existe déjà :<br />
+Nom du fichier à importer : <strong><tt>$1</tt></strong><br />
+Nom du fichier existant : <strong><tt>$2</tt></strong><br />
+la seule différence est la casse (majuscules / minuscules) de l’extension. Veuillez vérifier que le fichier est différent et changer son nom.',
+'fileexists-thumb'            => "'''<center>Image existante</center>'''",
+'fileexists-thumbnail-yes'    => 'Le fichier semble être une image en taille réduite <i>(thumbnail)</i>. Veuillez vérifier le fichier <strong><tt>$1</tt></strong>.<br />
+Si le fichier vérifié est la même image (dans une meilleure résolution), il n’y a pas besoin d’importer une version réduite.',
+'file-thumbnail-no'           => 'Le nom du fichier commence par <strong><tt>$1</tt></strong>. Il est possible qu’il s’agisse d’une version réduite <i>(thumbnail)</i>.
+Si vous disposez du fichier en haute résolution, importez-le, sinon veuillez changer le nom du fichier.',
+'fileexists-forbidden'        => 'Un fichier avec ce nom existe déjà ; merci de retourner en arrière et de copier le fichier sous un nouveau nom. [[Image:$1|thumb|center|$1]]',
+'fileexists-shared-forbidden' => 'Un fichier portant le même nom existe déjà dans la base de données commune ; veuillez revenir en arrière et le renvoyer sous un autre nom. [[Image:$1|thumb|center|$1]]',
+'successfulupload'            => 'Copie réussie',
+'fileuploaded'                => 'Le fichier « $1 » a été copié sur le serveur.
+Suivez ce lien ($2) pour accéder à la page de description, et donner des informations sur le fichier, par exemple son origine, sa date de création, son auteur, ou tout autre renseignement en votre possession.',
+'uploadwarning'               => 'Attention !',
+'savefile'                    => 'Sauvegarder le fichier',
+'uploadedimage'               => 'a importé « [[$1]] »',
+'uploaddisabled'              => 'Désolé, l’envoi de fichier est désactivé.',
+'uploaddisabledtext'          => 'La copie de fichiers est désactivée sur ce wiki.',
+'uploadscripted'              => 'Ce fichier contient du code HTML ou un script qui pourrait être interprété de façon incorrecte par un navigateur Internet.',
+'uploadcorrupt'               => 'Ce fichier est corrompu, a une taille nulle ou possède une extension invalide.
+Veuillez vérifer le fichier.',
+'uploadvirus'                 => 'Ce fichier contient un virus ! Pour plus de détails, consultez : $1',
+'sourcefilename'              => 'Nom du fichier à envoyer',
+'destfilename'                => 'Nom sous lequel le fichier sera enregistré',
+'watchthisupload'             => 'Suivre ce fichier',
+'filewasdeleted'              => 'Un fichier avec ce nom a déjà été copié, puis supprimé. Vous devriez vérifier le $1 avant de procéder à une nouvelle copie.',
+
+'upload-proto-error'      => 'Protocole incorrect',
+'upload-proto-error-text' => 'L’import requiert des URLs commençant par <code>http://</code> ou <code>ftp://</code>.',
+'upload-file-error'       => 'Erreur interne',
+'upload-file-error-text'  => 'Une erreur interne est survenue en voulant créer un fichier temporaire sur le serveur. Veuillez contacter un administrateur système.',
+'upload-misc-error'       => 'Erreur d’import inconnue',
+'upload-misc-error-text'  => 'Une erreur inconnue est survenue pendant l’import. Veuillez vérifier que l’URL est valide et accessible, puis essayer à nouveau. Si le problème persiste, contactez à un administrateur système.',
+
+# Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
+'upload-curl-error6'       => 'Ne peut pas atteindre l’URL',
+'upload-curl-error6-text'  => 'L’URL fournie ne peut pas être atteinte. Veuillez vérifier que l’URL est correcte et que le site est en ligne.',
+'upload-curl-error28'      => 'Dépassement du délai lors de l’import',
+'upload-curl-error28-text' => 'Le site a mis trop longtemps à répondre. Vérifiez que le site est en ligne, attendez un peu et réessayez. Vous pouvez aussi réessayer à une heure de moindre affluence.',
+
+'license'            => 'Licence',
+'nolicense'          => 'Aucune licence sélectionnée',
+'upload_source_url'  => ' (une URL valide et accessible publiquement)',
+'upload_source_file' => ' (un fichier sur votre ordinateur)',
+
+# Image list
+'imagelist'                 => 'Liste des images',
+'imagelisttext'             => "Voici une liste de '''$1''' {{plural:$1|fichier|fichiers}} classées $2.",
+'imagelistforuser'          => 'Affiche uniquement les images importées par $1.',
+'getimagelist'              => 'Récupération de la liste des images',
+'ilsubmit'                  => 'Chercher',
+'showlast'                  => 'Afficher les $1 dernières images classées $2.',
+'byname'                    => 'par nom',
+'bydate'                    => 'par date',
+'bysize'                    => 'par taille',
+'imgdelete'                 => 'suppr',
+'imgdesc'                   => 'page de l’image',
+'imgfile'                   => 'fichier',
+'imglegend'                 => 'Légende : (page de l’image) = afficher/modifier la description de l’image.',
+'imghistory'                => 'Historique de l’image',
+'revertimg'                 => 'rétab',
+'deleteimg'                 => 'suppr',
+'deleteimgcompletely'       => 'suppr',
+'imghistlegend'             => 'Légende : (actu) = ceci est l’image actuelle, (suppr) = supprimer
+cette ancienne version, (rétab) = rétablir cette ancienne version.
+<br /><i>Cliquez sur la date pour voir l’image copiée à cette date</i>.',
+'imagelinks'                => 'Pages contenant l’image',
+'linkstoimage'              => 'Les pages ci-dessous contiennent cette image :',
+'nolinkstoimage'            => 'Aucune page ne contient cette image.',
+'sharedupload'              => 'Ce fichier est partagé et peut-être utilisé par d’autres projets.',
+'shareduploadwiki'          => 'Reportez-vous à la [$1 page de description] pour plus d’informations.',
+'shareduploadwiki-linktext' => 'Page de description du fichier',
+'noimage'                   => 'Aucun fichier possèdant ce nom n’existe, vous pouvez $1.',
+'noimage-linktext'          => 'en importer un',
+'uploadnewversion-linktext' => 'Copier une nouvelle version de ce fichier',
+'imagelist_date'            => 'Date',
+'imagelist_name'            => 'Nom',
+'imagelist_user'            => 'Utilisateur',
+'imagelist_size'            => 'Octets',
+'imagelist_description'     => 'Description',
+'imagelist_search_for'      => 'Recherche pour l’image nommée :',
+
+# MIME search
+'mimesearch' => 'Recherche par type MIME',
+'mimesearch-summary' => 'Cette page spéciale permet de chercher des fichiers en fonction de leur type MIME. Entrée : type/sous-type, par exemple <tt>image/jpeg</tt>.',
+'mimetype'   => 'Type MIME :',
+'download'   => 'Téléchargement',
+
+# Unwatched pages
+'unwatchedpages' => 'Pages non suivies',
+
+# List redirects
+'listredirects' => 'Liste des redirections',
+
+# Unused templates
+'unusedtemplates'     => 'Modèles inutilisés',
+'unusedtemplatestext' => 'Cette page liste toutes les pages de l’espace de noms « Modèle » qui ne sont inclus dans aucune autre page. N’oubliez pas de vérifier s’il n’y a pas d’autre lien vers les modèles avant de les supprimer.',
+'unusedtemplateswlh'  => 'autres liens',
+
+# Random redirect
+'randomredirect' => 'Une page de redirection au hasard',
+'randomredirect-nopages' => 'Il n’y a aucune page de redirection dans cet espace de nom.',
+
+# Statistics
+'statistics'             => 'Statistiques',
+'sitestats'              => 'Statistiques de {{SITENAME}}',
+'userstats'              => 'Statistiques utilisateur',
+'sitestatstext'          => "La base de données contient actuellement <b>\$1</b> pages.
+
+Ce chiffre inclut les pages « discussion », les pages relatives à {{SITENAME}}, les pages minimales (\"ébauches\"),  les pages de redirection, ainsi que d’autres pages qui ne peuvent sans doute pas être considérées comme des articles.
+Si l’on exclut ces pages, il reste <b>\$2</b> pages qui sont probablement de véritables articles.<p>
+
+'''\$8''' fichiers ont été téléchargés.
+
+<b>\$3</b> pages ont été consultées et <b>\$4</b> pages modifiées.
+
+Cela représente une moyenne de <b>\$5</b> modifications par page et de <b>\$6</b> consultations pour une modification.</p>
+
+<p>Il y a '''\$7''' articles dans [http://meta.wikimedia.org/wiki/Help:Job_queue la file de tâche].</p>",
+'userstatstext'          => "Il y a <b>$1</b> utilisateurs enregistrés. Parmi ceux-ci, '''$2''' (ou '''$4%''') sont $5 (voir $3).",
+'statistics-mostpopular' => 'Pages les plus consultées',
+
+'disambiguations'      => 'Pages d’homonymie',
+'disambiguationspage'  => 'Template:Homonymie',
+'disambiguations-text' => 'Les pages suivantes lient vers une <i>page d’homonymie</i>. Elles devraient plutôt lier vers une page pertinente.<br /> Une page est traitée comme une page d’homonymie si elle est liée depuis $1.<br /> Les liens depuis d’autres espaces de noms <i>ne sont pas</i> listés ici.',
+
+'doubleredirects'     => 'Doubles redirections',
+'doubleredirectstext' => 'Chaque case contient des liens vers la première et la seconde redirection, ainsi que la première ligne de texte de la seconde page, ce qui fournit habituellement la « vraie » page cible, vers laquelle la première redirection devrait rediriger.',
+
+'brokenredirects'        => 'Redirections cassées',
+'brokenredirectstext'    => 'Ces redirections mènent vers des pages qui n’existent pas :',
+'brokenredirects-edit'   => '(modifier)',
+'brokenredirects-delete' => '(supprimer)',
+
+'withoutinterwiki' => 'Pages sans liens interlangues',
+'withoutinterwiki-header' => 'Les pages suivantes ne possèdent pas de liens vers d’autres langues :',
+
+'fewestrevisions' => 'Articles les moins modifiés',
+
+# Miscellaneous special pages
+'nbytes'                  => '$1 {{PLURAL:$1|octet|octets}}',
+'ncategories'             => '$1 {{PLURAL:$1|catégorie|catégories}}',
+'nlinks'                  => '$1 {{PLURAL:$1|lien|liens}}',
+'nmembers'                => '$1 {{PLURAL:$1|page|pages}} à l’intérieur',
+'nrevisions'              => '$1 {{PLURAL:$1|révision|révisions}}',
+'nviews'                  => '$1 {{PLURAL:$1|consultation|consultations}}',
+'specialpage-empty'       => 'Cette page est vide.',
+'lonelypages'             => 'Pages orphelines',
+'lonelypagestext'         => 'Les pages suivantes ne sont pas liées à partir d’autres pages du wiki.',
+'uncategorizedpages'      => 'Pages sans catégories',
+'uncategorizedcategories' => 'Catégories sans catégories',
+'uncategorizedimages'     => 'Images sans catégories',
+'unusedcategories'        => 'Catégories inutilisées',
+'unusedimages'            => 'Images orphelines',
+'popularpages'            => 'Pages les plus consultées',
+'wantedcategories'        => 'Catégories les plus demandées',
+'wantedpages'             => 'Pages les plus demandées',
+'mostlinked'              => 'Pages les plus liées',
+'mostlinkedcategories'    => 'Catégories les plus utilisées',
+'mostcategories'          => 'Articles utilisant le plus de catégories',
+'mostimages'              => 'Images les plus utilisées',
+'mostrevisions'           => 'Articles les plus modifiés',
+'allpages'                => 'Toutes les pages',
+'prefixindex'             => 'Toutes les pages par premières lettres',
+'randompage'              => 'Une page au hasard',
+'randompage-nopages'	    => 'Il n’y a pas de pages dans cet espace de nom.',
+'shortpages'              => 'Pages courtes',
+'longpages'               => 'Pages longues',
+'deadendpages'            => 'Pages en impasse',
+'deadendpagestext'        => 'Les pages suivantes ne contiennent aucun lien vers d’autres pages du wiki.',
+'protectedpages'          => 'Pages protégées',
+'protectedpagestext'      => 'Les pages suivantes sont protégées contre les modifications et/ou le renommage :',
+'protectedpagesempty'     => 'Aucune page n’est protégée actuellement.',
+'listusers'               => 'Liste des participants',
+'specialpages'            => 'Pages spéciales',
+'spheading'               => 'Pages spéciales',
+'restrictedpheading'      => 'Pages spéciales réservées',
+'rclsub'                  => '(des pages liées à « $1 »)',
+'newpages'                => 'Nouvelles pages',
+'newpages-username'       => 'Utilisateur :',
+'ancientpages'            => 'Articles les moins récemment modifiés',
+'intl'                    => 'Liens interlangues',
+'move'                    => 'Renommer',
+'movethispage'            => 'Renommer la page',
+'unusedimagestext'        => '<p>N’oubliez pas que d’autres sites peuvent contenir un lien direct vers cette image, et que celle-ci peut être placée dans cette liste alors qu’elle est en réalité utilisée.</p>',
+'unusedcategoriestext'    => 'Les catégories suivantes existent mais aucun article ou catégorie ne les utilisent.',
+
+# Book sources
+'booksources'               => 'Ouvrages de référence',
+'booksources-search-legend' => 'Rechercher parmi des ouvrages de référence',
+'booksources-isbn'          => 'ISBN:',
+'booksources-go'            => 'Valider',
+'booksources-text'          => 'Voici une liste de liens vers d’autres sites qui vendent des livres neufs et d’occasion et sur lesquels vous trouverez peut-être des informations sur les ouvrages que vous cherchez. {{SITENAME}} n’étant liée à aucune de ces sociétés, elle n’a aucunement l’intention d’en faire la promotion.',
+
+'categoriespagetext' => 'Les catégories suivantes existent dans le wiki.',
+'data'               => 'Données',
+'userrights'         => 'Gestion des droits utilisateur',
+'groups'             => 'Groupes utilisateurs',
+'isbn'               => 'ISBN',
+'alphaindexline'     => '$1 à $2',
+'version'            => 'Version',
+
+# Special:Log
+'specialloguserlabel'  => 'Utilisateur :',
+'speciallogtitlelabel' => 'Titre :',
+'log'                  => 'Journaux',
+'log-search-legend' => 'Chercher dans les journaux',
+'log-search-submit' => 'OK',
+'alllogstext'          => 'Affichage combiné des journaux de copie, suppression, protection, blocage, et administrateur. Vous pouvez restreindre la vue en sélectionnant un type de journal, un nom d’utilisateur ou la page concernée.',
+'logempty'             => 'Il n’y a rien dans l’historique pour cette page.',
+'log-title-wildcard' => 'Chercher les titres commençant par le texte suivant',
+
+# Special:Allpages
+'nextpage'          => 'Page suivante ($1)',
+'prevpage'          => 'Page précédente ($1)',
+'allpagesfrom'      => 'Afficher les pages à partir de :',
+'allarticles'       => 'Tous les articles',
+'allinnamespace'    => 'Toutes les pages (espace de noms $1)',
+'allnotinnamespace' => 'Toutes les pages (n’étant pas dans l’espace de noms $1)',
+'allpagesprev'      => 'Précédent',
+'allpagesnext'      => 'Suivant',
+'allpagessubmit'    => 'Valider',
+'allpagesprefix'    => 'Afficher les pages commençant par le préfixe :',
+'allpagesbadtitle'  => 'Le titre renseigné pour la page est incorrect ou possède un préfixe réservé. Il contient certainement un ou plusieurs caractères spéciaux ne pouvant être utilisés dans les titres.',
+
+# Special:Listusers
+'listusersfrom'      => 'Afficher les utilisateurs à partir de :',
+'listusers-submit'   => 'Montrer',
+'listusers-noresult' => 'Aucun utilisateur trouvé. Vérifiez aussi les variantes en majuscules / minuscules.',
+
+# E-mail user
+'mailnologin'     => 'Pas d’adresse',
+'mailnologintext' => 'Vous devez être [[Special:Userlogin|connecté]]
+et avoir indiqué une adresse électronique valide dans vos [[Special:Preferences|préférences]]
+pour avoir la permission d’envoyer un message à un autre utilisateur.',
+'emailuser'       => 'Envoyer un message à cet utilisateur',
+'emailpage'       => 'Envoyer un courriel à l’utilisateur',
+'emailpagetext'   => 'Si cet utilisateur a indiqué une adresse électronique valide dans ses préférences, le formulaire ci-dessous lui enverra un message.
+L’adresse électronique que vous avez indiquée dans vos préférences apparaîtra dans le champ « Expéditeur » de votre message afin que le destinataire puisse vous répondre.',
+'usermailererror' => 'Erreur dans le sujet du courriel :',
+'defemailsubject' => 'Courriel envoyé depuis {{SITENAME}}',
+'noemailtitle'    => 'Pas d’adresse électronique',
+'noemailtext'     => 'Vous ne pouvez joindre cet utilisateur par courrier électronique :
+* soit parce qu’il n’a pas spécifié d’adresse électronique valide (et authentifiée),
+* soit parce qu’il a choisi, dans ses préférences utilisateur, de ne pas recevoir de courrier électronique des autres utilisateurs.',
+'emailfrom'       => 'Expéditeur&nbsp;',
+'emailto'         => 'Destinataire&nbsp;',
+'emailsubject'    => 'Objet&nbsp;',
+'emailmessage'    => 'Message&nbsp;',
+'emailsend'       => 'Envoyer',
+'emailccme'       => 'M’envoyer par courriel une copie de mon message.',
+'emailccsubject'  => 'Copie de votre message à $1 : $2',
+'emailsent'       => 'Message envoyé',
+'emailsenttext'   => 'Votre message a été envoyé.',
+
+# Watchlist
+'watchlist'            => 'Liste de suivi',
+'watchlistfor'         => "(pour l’utilisateur '''$1''')",
+'nowatchlist'          => 'Votre liste de suivi ne contient aucun article.',
+'watchlistanontext'    => 'Pour pouvoir afficher ou éditer les éléments de votre liste de suivi, vous devez vous $1.',
+'watchlistcount'       => "Vous avez '''$1''' {{PLURAL:$1|page|pages}} dans votre liste de suivi, en incluant les pages de discussion",
+'clearwatchlist'       => 'Vider la liste de suivi',
+'watchlistcleartext'   => 'Êtes-vous certain de vouloir retirer tous ces éléments ?',
+'watchlistclearbutton' => 'Vider la liste de suivi',
+'watchlistcleardone'   => 'Votre liste de suivi a été vidée. {{PLURAL:$1|$1 page a été retirée|$1 pages ont été retirées}}.',
+'watchnologin'         => 'Non connecté',
+'watchnologintext'     => 'Vous devez être [[Special:Userlogin|connecté]] pour modifier votre liste.',
+'addedwatch'           => 'Ajouté à la liste de suivi',
+'addedwatchtext'       => 'La page « $1 » a été ajoutée à votre [[Special:Watchlist|liste de suivi]].
+Les prochaines modifications de cette page et de la page de discussion associée seront répertoriées ici, et la page apparaîtra <b>en gras</b> dans la [[Special:Recentchanges|liste des modifications récentes]] pour être repérée plus facilement.
+
+Pour supprimer cette page de votre liste de suivi, cliquez sur « ne plus suivre » dans le cadre de navigation.',
+'removedwatch'         => 'Retirée de la liste de suivi',
+'removedwatchtext'     => 'La page « $1 » a été retirée de votre liste de suivi.',
+'watch'                => 'Suivre',
+'watchthispage'        => 'Suivre cette page',
+'unwatch'              => 'Ne plus suivre',
+'unwatchthispage'      => 'Ne plus suivre',
+'notanarticle'         => 'Pas un article',
+'watchnochange'        => 'Aucune des pages que vous suivez n’a été modifiée pendant la période affichée',
+'watchdetails'         => 'Vous suivez <b>$1</b> {{PLURAL:$1|page|pages}}, sans compter les pages de discussion.
+* [[Special:Watchlist/edit|Voir et modifier la liste de suivi]]
+* [[Special:Watchlist/clear|Retirer toutes les pages de ma liste de suivi]]',
+'wlheader-enotif'      => '* La notification par courriel est activée.',
+'wlheader-showupdated' => '* Les pages qui ont été modifiées depuis votre dernière visite sont montrées en <b>gras</b>',
+'watchmethod-recent'   => 'vérification des modifications récentes des pages suivies',
+'watchmethod-list'     => 'vérification des pages suivies pour des modifications récentes',
+'removechecked'        => 'Retirer de la liste de suivi les pages sélectionnées',
+'watchlistcontains'    => "Votre liste de suivi contient '''$1''' {{PLURAL:$1|page|pages}}.",
+'watcheditlist'        => 'Ceci est votre liste de suivi par ordre alphabétique. Sélectionnez les pages que vous souhaitez retirer de la liste et cliquez le bouton « retirer de la liste de suivi » en bas de l’écran. (retirer un article retire aussi la page de discussion associée, et vice-versa)',
+'removingchecked'      => 'Les articles sélectionnés sont retirés de votre liste de suivi...',
+'couldntremove'        => 'Impossible de supprimer l’article « $1 »...',
+'iteminvalidname'      => 'Problème avec l’article « $1 » : le nom est invalide...',
+'wlnote'               => 'Ci-dessous se {{PLURAL:$1|trouve la dernière modification|trouvent les $1 dernières modifications}} depuis {{PLURAL:$2|la dernière heure|les <b>$2</b> dernières heures}}.',
+'wlshowlast'           => 'Montrer les dernières $1 heures, les derniers $2 jours, ou $3.',
+'wlsaved'              => 'La liste de suivi n’est remise à jour qu’une fois par heure pour alléger la charge sur le serveur.',
+'watchlist-show-bots'  => 'Afficher les contributions de bots',
+'watchlist-hide-bots'  => 'Masquer les contributions de bots',
+'watchlist-show-own'   => 'Afficher mes modifications',
+'watchlist-hide-own'   => 'Masquer mes modifications',
+'watchlist-show-minor' => 'Afficher les modifications mineures',
+'watchlist-hide-minor' => 'Masquer les modifications mineures',
+'wldone'               => 'Terminé.',
+
+# Displayed when you click the "watch" button and it's in the process of watching
+'watching'   => 'Suivi...',
+'unwatching' => 'Fin du suivi...',
+
+'enotif_mailer'      => 'Système d’expédition de notification de {{SITENAME}}',
+'enotif_reset'       => 'Marquer toutes les pages comme visitées',
+'enotif_newpagetext' => 'Ceci est une nouvelle page.',
+'changed'            => 'modifiée',
+'created'            => 'créée',
+'enotif_subject'     => 'La page $PAGETITLE de {{SITENAME}} a été $CHANGEDORCREATED par $PAGEEDITOR',
+'enotif_lastvisited' => 'Consultez $1 pour tous les changements depuis votre dernière visite.',
+'enotif_body'        => 'Cher $WATCHINGUSERNAME,
+
+la page de {{SITENAME}} $PAGETITLE a été $CHANGEDORCREATED le $PAGEEDITDATE par $PAGEEDITOR, voyez $PAGETITLE_URL pour la version actuelle.
+
+$NEWPAGE
+
+Résumé de l’éditeur : $PAGESUMMARY $PAGEMINOREDIT
+
+Contactez l’éditeur :
+courriel : $PAGEEDITOR_EMAIL
+wiki : $PAGEEDITOR_WIKI
+
+Il n’y aura pas de nouvelles notifications en cas d’autres modifications à moins que vous ne visitiez cette page. Vous pouvez aussi remettre à zéro le notificateur pour toutes les pages de votre liste de suivi.
+
+             Votre {{SITENAME}} système de notification
+
+--
+Pour modifier les paramètres de votre liste de suivi, visitez
+{{fullurl:Special:Watchlist/edit}}
+
+Retour et assistance :
+{{fullurl:{{MediaWiki:helppage}}}}',
+
+# Delete/protect/revert
+'deletepage'                  => 'Supprimer une page',
+'confirm'                     => 'Confirmer',
+'excontent'                   => 'contenant « $1 »',
+'excontentauthor'             => 'le contenu était : « $1 » et l’unique contributeur en était « [[Utilisateur:$2|$2]] » ([[Special:contributions/$2|Contributions]])',
+'exbeforeblank'               => 'Contenait avant blanchiment : $1',
+'exblank'                     => 'page vide',
+'confirmdelete'               => 'Confirmer la suppression',
+'deletesub'                   => '(Suppression de « $1 »)',
+'historywarning'              => 'Attention, la page que vous êtes sur le point de supprimer a un historique :',
+'confirmdeletetext'           => 'Vous êtes sur le point de supprimer définitivement de la base de données une page ou une image, ainsi que toutes ses versions antérieures. Veuillez confirmer que c’est bien là ce que vous voulez faire, que vous en comprenez les conséquences et que vous faites cela en accord avec les [[{{MediaWiki:policy-url}}|règles internes]].',
+'actioncomplete'              => 'Action effectuée',
+'deletedtext'                 => '« $1 » a été supprimé.
+Voir $2 pour une liste des suppressions récentes.',
+'deletedarticle'              => 'a effacé « [[$1]] »',
+'dellogpage'                  => 'Historique des suppressions',
+'dellogpagetext'              => 'Voici la liste des suppressions récentes.
+L’heure indiquée est celle du serveur (UTC).',
+'deletionlog'                 => 'journal des suppressions/restaurations',
+'reverted'                    => 'Rétablissement de la version précédente',
+'deletecomment'               => 'Motif de la suppression',
+'imagereverted'               => 'La version précédente a été rétablie.',
+'rollback'                    => 'révoquer modifications',
+'rollback_short'              => 'Révoquer',
+'rollbacklink'                => 'révoquer',
+'rollbackfailed'              => 'La révocation a échoué',
+'cantrollback'                => 'Impossible de révoquer : l’auteur est la seule personne à avoir effectué des modifications sur cette page.',
+'alreadyrolled'               => 'Impossible de révoquer la dernière modification de l’article « [[$1]] » effectuée par [[User:$2|$2]] ([[User talk:$2|Discussion]]) ; quelqu’un d’autre a déjà modifié ou révoqué l’article. La dernière modification a été effectuée par [[User:$3|$3]] ([[User talk:$3|Discussion]]).',
+'editcomment'                 => 'Le résumé de la modification était: <i>« $1 »</i>.', # only shown if there is an edit comment
+'revertpage'                  => 'Révocation des modifications de [[Special:Contributions/$2|$2]] (retour à la précédente version de [[User:$1|$1]])',
+'sessionfailure'              => 'Votre session de connexion semble avoir des problèmes ; cette action a été annulée en prévention d’un piratage de session. Cliquez sur « Précédent » et rechargez la page d’où vous venez, puis réessayez.',
+'protectlogpage'              => 'Historique des protections',
+'protectlogtext'              => 'Voir les [[{{MediaWiki:policy-url}}|directives]] pour plus d’information.',
+'protectedarticle'            => 'a protégé « $1 »',
+'unprotectedarticle'          => 'a déprotégé « $1 »',
+'protectsub'                  => '(Protéger « $1 »)',
+'confirmprotecttext'          => 'Voulez-vous réellement protéger cette page ?',
+'confirmprotect'              => 'Confirmer la protection',
+'protectmoveonly'             => 'Protéger uniquement les déplacements',
+'protectcomment'              => 'Raison de la protection',
+'protectexpiry'               => 'Expiration (n’expire pas par défaut)',
+'protect_expiry_invalid'      => 'Le temps d’expiration est invalide',
+'protect_expiry_old'          => 'Le temps d’expiration est déjà passé.',
+'unprotectsub'                => '(Déprotéger « $1 »)',
+'confirmunprotecttext'        => 'Voulez-vous réellement déprotéger cette page ?',
+'confirmunprotect'            => 'Raison de la déprotection',
+'unprotectcomment'            => 'Raison du déblocage',
+'protect-unchain'             => 'Débloquer les permissions de renommage',
+'protect-text'                => 'Vous pouvez consulter et modifier le niveau de protection de la page <strong>$1</strong>.
+Veuillez vous assurez que vous suivez les [[Project:Protected page|règles internes]].',
+'protect-locked-blocked'      => 'Vous ne pouvez pas modifier le niveau de protection tant que vous êtes bloqué. 
+Voici les réglages actuels de la page <strong>$1</strong> :',
+'protect-locked-dblock'       => 'Le niveau de protection ne peut pas être modifié car la base de données est bloquée.
+Voici les réglages actuels de la page <strong>$1</strong> :',
+'protect-locked-access'       => 'Vous n’avez pas les droits nécessaires pour modifier la protection de la page.
+Voici les réglages actuels de la page <strong>$1</strong> :',
+'protect-cascadeon'           => 'Cette page est actuellement protégée car incluse dans les pages suivantes, ayant été protégée avec l’option « protection en cascade » activée. Vous pouvez changer le niveau de protection de cette page sans que cela n’affecte la protection en cascade.',
+'protect-default'             => 'Pas de protection',
+'protect-level-autoconfirmed' => 'Semi-protection',
+'protect-level-sysop'         => 'Administrateurs uniquement',
+'protect-summary-cascade'     => 'protection en cascade',
+'protect-expiring'            => 'expire le $1',
+'protect-cascade'             => 'Protection en cascade - Protège toutes les pages incluses dans celle-ci.',
+'restriction-type'            => 'Permission',
+'restriction-level'           => 'Niveau de restriction',
+'minimum-size'                => 'Taille minimum (octets)',
+
+# Restrictions (nouns)
+'restriction-edit' => 'Modification',
+'restriction-move' => 'Renommage',
+
+# Restriction levels
+'restriction-level-sysop'         => 'Protection complète',
+'restriction-level-autoconfirmed' => 'Semi-protection',
+'restriction-level-all'           => 'Tous',
+
+# Undelete
+'undelete'                 => 'Voir les pages supprimées',
+'undeletepage'             => 'Voir et restaurer la page supprimée',
+'viewdeletedpage'          => 'Historique de la page supprimée',
+'undeletepagetext'         => 'Ces pages ont été supprimées et se trouvent dans l’archive, elles sont toujours dans la base de données et peuvent être restaurées.
+L’archive peut être effacée périodiquement.',
+'undeleteextrahelp'        => "Pour restaurer toutes les versions de cette page, laissez vierges toutes les cases à cocher, puis cliquez sur '''''Procéder à la restauration'''''.<br />Pour procéder à une restauration sélective, cochez les cases correspondant aux versions qui sont à restaurer, puis cliquez sur '''''Procéder à la restauration'''''.<br />En cliquant sur le bouton '''''Réinitialiser''''', la boîte de résumé et les cases cochées seront remises à zéro.",
+'undeleterevisions'        => '$1 {{PLURAL:$1|révision archivée|révisions archivées}}',
+'undeletehistory'          => 'Si vous restaurez la page, toutes les révisions seront restaurées dans l’historique.
+
+Si une nouvelle page avec le même nom a été créée depuis la suppression, les révisions restaurées apparaîtront dans l’historique antérieur et la version courante ne sera pas automatiquement remplacée.',
+'undeleterevdel'           => "Undeletion will not be performed if it will result in the top page revision being
+partially deleted. In such cases, you must uncheck or unhide the newest deleted revisions. Revisions of files 
+that you don't have permission to view will not be restored.",
+'undeletehistorynoadmin'   => 'Cet article a été supprimé. Le motif de la suppression est indiqué dans le résumé ci-dessous, avec les détails des utilisateurs qui l’ont modifié avant sa suppression. Le contenu de ces versions n’est accessible qu’aux administrateurs.',
+'undelete-revision'        => 'Version supprimée de $1, le $2 :',
+'undeleterevision-missing' => 'Version invalide ou manquante. Vous avez peut-être un mauvais lien, ou la version a été restaurée ou supprimée de l’archive.',
+'undeletebtn'              => 'Procéder à la restauration !',
+'undeletereset'            => 'Réinitialiser',
+'undeletecomment'          => 'Résumé :',
+'undeletedarticle'         => 'a restauré « [[$1]] »',
+'undeletedrevisions'       => '$1 {{PLURAL:$1|version restaurée|versions restaurées}}',
+'undeletedrevisions-files' => '$1 {{PLURAL:$1|version|versions}} et $2 {{PLURAL:$2|fichier|fichiers}} restaurés',
+'undeletedfiles'           => '$1 {{PLURAL:$1|fichier restauré|fichiers restaurés}}',
+'cannotundelete'           => 'La restauration a échoué. Un autre utilisateur a probablement restauré la page avant.',
+'undeletedpage'            => "<big>'''La page $1 a été restaurée'''.</big>
+
+Consultez l’[[Special:Log/delete|historique des suppressions]] pour voir les pages récemment supprimées et restaurées.",
+'undelete-header'          => 'Consultez l’[[Special:Log/delete|historique des suppressions]] pour voir les pages récemment supprimées.',
+'undelete-search-box'      => 'Chercher une page supprimée',
+'undelete-search-prefix'   => 'Montrer les pages commençant par :',
+'undelete-search-submit'   => 'Chercher',
+'undelete-no-results'      => 'Aucune page correspondant à la recherche n’a été trouvé dans les archives.',
+
+# Namespace form on various pages
+'namespace' => 'Espace de noms :',
+'invert'    => 'Inverser la sélection',
+
+# Contributions
+'contributions' => 'Contributions de cet utilisateur',
+'mycontris'     => 'Contributions',
+'contribsub2'    => 'Liste des contributions de $1 ($2). Les pages qui ont été effacées ne sont pas affichées.',
+'nocontribs'    => 'Aucune modification correspondant à ces critères n’a été trouvée.',
+'ucnote'        => 'Voici les <b>$1</b> dernières modifications effectuées par cet utilisateur au cours des <b>$2</b> derniers jours.',
+'uclinks'       => 'Afficher les $1 dernières modifications ; afficher les $2 derniers jours.',
+'uctop'         => ' (dernière)',
+
+'sp-contributions-newest'      => 'Dernières contributions',
+'sp-contributions-oldest'      => 'Premières contributions',
+'sp-contributions-newer'       => '$1 précédents',
+'sp-contributions-older'       => '$1 suivants',
+'sp-contributions-newbies'     => 'Ne montrer que les contributions des nouveaux utilisateurs',
+'sp-contributions-newbies-sub' => 'Liste des contributions des nouveaux utilisateurs. Les pages qui ont été supprimées ne sont pas affichées.',
+'sp-contributions-blocklog'    => 'Journal des blocages',
+'sp-contributions-search'      => 'Chercher les contributions',
+'sp-contributions-username'    => 'Adresse IP ou nom d’utilisateur:',
+'sp-contributions-submit'      => 'Chercher',
+
+'sp-newimages-showfrom' => 'Afficher les images importées depuis le $1',
+
+# What links here
+'whatlinkshere'      => 'Pages liées',
+'notargettitle'      => 'Pas de cible',
+'notargettext'       => 'Indiquez une page cible ou un utilisateur cible.',
+'linklistsub'        => '(Liste de liens)',
+'linkshere'          => 'Les pages ci-dessous contiennent un lien vers <b>[[:$1]]</b> :',
+'nolinkshere'        => 'Aucune page ne contient de lien vers <b>[[:$1]]</b>.',
+'nolinkshere-ns'     => "Aucune page ne contient de lien vers '''[[:$1]]''' dans l’espace de nom choisi.",
+'isredirect'         => 'page de redirection',
+'istemplate'         => 'inclusion',
+'whatlinkshere-prev' => '{{PLURAL:$1|précédent|$1 précédents}}',
+'whatlinkshere-next' => '{{PLURAL:$1|suivant|$1 suivants}}',
+
+# Block/unblock
+'blockip'                     => 'Bloquer une adresse IP ou un utilisateur',
+'blockiptext'                 => 'Utilisez le formulaire ci-dessous pour bloquer l’accès en écriture à partir d’une adresse IP donnée ou d’un nom d’utilisateur.
+
+Une telle mesure ne doit être prise que pour empêcher le vandalisme et en accord avec les [[{{MediaWiki:policy-url}}|règles internes]].
+Donnez ci-dessous une raison précise (par exemple en indiquant les pages qui ont été vandalisées).',
+'ipaddress'                   => 'Adresse IP',
+'ipadressorusername'          => 'Adresse IP ou nom d’utilisateur',
+'ipbexpiry'                   => 'Durée du blocage',
+'ipbreason'                   => 'Motif',
+'ipbreasonotherlist'          => 'Autre motif',
+
+// These are examples only. They can be translated but should be adjusted via [[MediaWiki:ipbreason-list]] by the local community
+// *# defines a reason group in the drow down menu
+// * defines a reason
+'ipbreason-list'              => '
+*#Motifs de blocages pour adresses IP
+*vandalisme
+*spam
+*#Motifs de blocages pour utilisateurs enregistrés
+*insultes
+*faux-nez',
+'ipbanononly'                 => 'Bloquer uniquement les utilisateurs anonymes',
+'ipbcreateaccount'            => 'Empêcher la création de compte',
+'ipbenableautoblock'          => 'Bloquer automatiquement les adresses IP utilisées par cet utilisateur',
+'ipbsubmit'                   => 'Bloquer cet utilisateur',
+'ipbother'                    => 'Autre durée',
+'ipboptions'                  => '2 heures:2 hours,1 jour:1 day,3 jours:3 days,1 semaine:1 week,2 semaines:2 weeks,1 mois:1 month,3 mois:3 months,6 mois:6 months,1 an:1 year,indéfiniment:infinite',
+'ipbotheroption'              => 'autre',
+'ipbotherreason'              => 'Motif différent ou supplémentaire',
+'ipbhidename'                 => 'Masquer le nom d’utilisateur ou l’IP du log de blocage, de la liste des blocages actifs et de la liste des utilisateurs',
+'badipaddress'                => 'L’adresse IP n’est pas correcte.',
+'blockipsuccesssub'           => 'Blocage réussi',
+'blockipsuccesstext'          => '[[{{ns:Special}}:Contributions/$1|$1]] a été bloqué.<br />Vous pouvez consulter sur cette [[Special:Ipblocklist|page]] la liste des adresses IP bloquées.',
+'ipb-unblock-addr'            => 'Débloquer $1',
+'ipb-unblock'                 => 'Débloquer un compte utilisateur ou une adresse IP',
+'ipb-blocklist-addr'          => 'Voir les blocages existants pour $1',
+'ipb-blocklist'               => 'Voir les blocages existants',
+'unblockip'                   => 'Débloquer un utilisateur ou une adresse IP',
+'unblockiptext'               => 'Utilisez le formulaire ci-dessous pour rétablir l’accès en écriture
+d’une adresse IP précédemment bloquée.',
+'ipusubmit'                   => 'Débloquer cette adresse',
+'unblocked'                   => '[[User:$1|$1]] a été débloqué',
+'ipblocklist'                 => 'Liste des utilisateurs bloqués',
+'ipblocklist-summary'         => 'La liste ci-dessous montre tous les utilisateurs et adresses IP bloqués, par ordre anti-chronologique. Consulter le [[Special:Log/block|journal de blocage]] pour voir les dernières actions de blocage et déblocage effectuées.',
+'ipblocklist-submit'          => 'Chercher',
+'blocklistline'               => '$1 (expire le $4) : $2 a bloqué $3',
+'infiniteblock'               => 'permanent',
+'expiringblock'               => 'expire le $1',
+'anononlyblock'               => 'utilisateur non enregistré uniquement',
+'noautoblockblock'            => 'Blocage automatique désactivé',
+'createaccountblock'          => 'La création de compte est bloquée.',
+'ipblocklistempty'            => 'La liste des adresses bloquées est actuellement vide.',
+'blocklink'                   => 'Bloquer',
+'unblocklink'                 => 'débloquer',
+'contribslink'                => 'Contributions',
+'autoblocker'                 => 'Vous avez été bloqué automatiquement parce que votre adresse IP a été récemment utilisée par « $1 ». La raison fournie pour le blocage de $1 est : « $2 ».',
+'blocklogpage'                => 'Historique des blocages',
+'blocklogentry'               => 'a bloqué « [[$1]] » - durée : $2 $3',
+'blocklogtext'                => 'Ceci est la trace des blocages et déblocages des utilisateurs. Les adresses IP automatiquement bloquées ne sont pas listées. Consultez la [[Special:Ipblocklist|liste des utilisateurs bloqués]] pour voir qui est actuellement effectivement bloqué.',
+'unblocklogentry'             => 'a débloqué « $1 »',
+'block-log-flags-anononly'    => 'utilisateurs anonymes seulement',
+'block-log-flags-nocreate'    => 'création de compte interdite',
+'block-log-flags-noautoblock' => 'autoblocage des IP désactivé',
+'range_block_disabled'        => 'Le blocage de plages d’IP a été désactivé',
+'ipb_expiry_invalid'          => 'temps d’expiration invalide.',
+'ipb_already_blocked'         => '« $1 » est déjà bloqué',
+'ip_range_invalid'            => 'Bloc IP incorrect.',
+'proxyblocker'                => 'Bloqueur de proxy',
+'ipb_cant_unblock'            => 'Erreur : Le blocage d’ID $1 n’existe pas. Il est possible qu’un déblocage ait déjà été effectué.',
+'proxyblockreason'            => 'Votre ip a été bloquée car il s’agit d’un proxy ouvert. Merci de contacter votre fournisseur d’accès internet ou votre support technique et de l’informer de ce problème de sécurité.',
+'proxyblocksuccess'           => 'Terminé.',
+'sorbs'                       => 'DNSBL',
+'sorbsreason'                 => 'Votre adresse IP est listée en tant que proxy ouvert [http://www.sorbs.net SORBS] DNSBL.',
+'sorbs_create_account_reason' => 'Votre adresse IP est listée en tant que proxy ouvert [http://www.sorbs.net SORBS] DNSBL. Vous ne pouvez créer un compte',
+
+# Developer tools
+'lockdb'              => 'Verrouiller la base',
+'unlockdb'            => 'Déverrouiller la base',
+'lockdbtext'          => 'Le verrouillage de la base de données empêchera tous les utilisateurs de modifier des pages, de sauvegarder leurs préférences, de modifier leur liste de suivi et d’effectuer toutes les autres opérations nécessitant des modifications dans la base de données.
+Veuillez confirmer que c’est bien là ce que vous voulez faire et que vous débloquerez la base dès que votre opération de maintenance sera terminée.',
+'unlockdbtext'        => 'Le déverrouillage de la base de données permettra à nouveau à tous les utilisateurs de modifier des pages, de mettre à jour leurs préférences et leur liste de suivi, ainsi que d’effectuer les autres opérations nécessitant des modifications dans la base de données.
+
+Veuillez confirmer que c’est bien là ce que vous voulez faire.',
+'lockconfirm'         => 'Oui, je confirme que je souhaite verrouiller la base de données.',
+'unlockconfirm'       => 'Oui, je confirme que je souhaite déverrouiller la base de données.',
+'lockbtn'             => 'Verrouiller la base',
+'unlockbtn'           => 'Déverrouiller la base',
+'locknoconfirm'       => 'Vous n’avez pas coché la case de confirmation.',
+'lockdbsuccesssub'    => 'Verrouillage de la base réussi.',
+'unlockdbsuccesssub'  => 'Base déverrouillée.',
+'lockdbsuccesstext'   => 'La base de données de {{SITENAME}} est verrouillée.
+
+N’oubliez pas de la déverrouiller lorsque vous aurez terminé votre opération de maintenance.',
+'unlockdbsuccesstext' => 'La base de données de {{SITENAME}} est déverrouillée.',
+'lockfilenotwritable' => 'Le fichier de blocage de la base de données n’est pas inscriptible. Pour bloquer ou débloquer la base de données, vous devez pouvoir écrire sur le serveur web.',
+'databasenotlocked'   => 'La base de données n’est pas verrouillée.',
+
+# Move page
+'movepage'                => 'Renommer une page',
+'movepagetext'            => 'Utilisez le formulaire ci-dessous pour renommer une page, en déplaçant tout son historique vers le nouveau nom.
+L’ancien titre deviendra une page de redirection vers le nouveau titre. Les liens vers le titre de l’ancienne page ne seront pas changés ; veuillez vérifier que ce déplacement n’a pas créé de double redirect. Vous devez vous assurez que les liens continuent de pointer vers leur destination supposée.
+
+Une page ne sera pas déplacée si il y a déjà une page au nouveau titre, à moins que la page soit vide, ou une redirection, et qu’elle n’ait pas d’historique. Ce qui veut dire que vous pouvez renommer une page vers sa position d’origine si vous avez commis une erreur, et que vous ne pouvez effacer une page déjà existante par ce procédé.',
+'movepagetalktext'        => 'La page de discussion associée, si présente, sera automatiquement renommée avec <b>sauf si :</b>
+*Vous renommez une page vers un autre espace,
+*Une page de discussion existe déjà avec le nouveau nom, ou
+*Vous avez désélectionné le bouton ci-dessous.
+
+Dans ce cas, vous devrez renommer ou fusionner la page manuellement si vous le désirez.',
+'movearticle'             => 'Renommer l’article',
+'movenologin'             => 'Non connecté',
+'movenologintext'         => 'Pour avoir la permission de renommer un article, vous devez être [[Special:Userlogin|connecté]] en tant qu’utilisateur enregistré.',
+'newtitle'                => 'Nouveau titre',
+'move-watch'              => 'Suivre cette page',
+'movepagebtn'             => 'Renommer l’article',
+'pagemovedsub'            => 'Renommage réussi',
+'pagemovedtext'           => 'L’article « [[$1]] » a été renommé en « [[$2]] ».',
+'articleexists'           => 'Il existe déjà un article portant ce titre, ou le titre que vous avez choisi n’est pas valide. Veuillez en choisir un autre.',
+'talkexists'              => 'La page elle-même a été déplacée avec succès, mais la page de discussion n’a pas pu être déplacée car il en existait déjà une sous le nouveau nom. Veuillez les fusionner manuellement.',
+'movedto'                 => 'renommé en',
+'movetalk'                => 'Renommer aussi la page « discussion », s’il y a lieu.',
+'talkpagemoved'           => 'La page de discussion correspondante a également été déplacée.',
+'talkpagenotmoved'        => 'La page de discussion correspondante n’a <strong>pas</strong> été déplacée.',
+'1movedto2'               => 'a renommé [[$1]] en [[$2]]',
+'1movedto2_redir'         => 'a redirigé [[$1]] vers [[$2]]',
+'movelogpage'             => 'Historique des renommages',
+'movelogpagetext'         => 'Voici la liste des dernières pages renommées.',
+'movereason'              => 'Raison du renommage',
+'revertmove'              => 'annuler',
+'delete_and_move'         => 'Supprimer et renommer',
+'delete_and_move_text'    => '==Suppression requise==
+
+L’article de destination « [[$1]] » existe déjà. Voulez-vous le supprimer pour permettre le renommage ?',
+'delete_and_move_confirm' => 'Oui, j’accepte de supprimer la page de destination pour permettre le renommage.',
+'delete_and_move_reason'  => 'Page supprimée pour permettre un renommage',
+'selfmove'                => 'Les titres d’origine et de destination sont les mêmes : impossible de renommer une page sur elle-même.',
+'immobile_namespace'      => 'Le titre de destination est d’un type spécial ; il est impossible de renommer des pages vers cet espace de noms.',
+
+# Export
+'export'            => 'Exporter des pages',
+'exporttext'        => 'Vous pouvez exporter en XML le texte et l’historique d’une page ou d’un ensemble de pages; le résultat peut alors être importé dans un autre wiki fonctionnant avec le logiciel MediaWiki.
+
+Pour exporter des pages, entrez leurs titres dans la boîte de texte ci-dessous, un titre par ligne, et sélectionnez si vous désirez ou non la version actuelle avec toutes les anciennes versions, avec la page d’historique, ou simplement la page actuelle avec des informations sur la dernière modification.
+
+Dans ce dernier cas, vous pouvez aussi utiliser un lien, comme [[{{ns:Special}}:Export/{{Mediawiki:mainpage}}]] pour la page {{Mediawiki:mainpage}}.',
+'exportcuronly'     => 'Exporter uniquement la version courante sans l’historique complet',
+'exportnohistory'   => "---- 
+'''Note :''' l’exportation complète de l’historique des pages à l’aide de ce formulaire a été désactivée pour des raisons de performances.",
+'export-submit'     => 'Exporter',
+'export-addcattext' => 'Ajouter les pages de la catégorie :',
+'export-addcat'     => 'Ajouter',
+
+# Namespace 8 related
+'allmessages'               => 'Liste des messages système',
+'allmessagesname'           => 'Nom du champ',
+'allmessagesdefault'        => 'Message par défaut',
+'allmessagescurrent'        => 'Message actuel',
+'allmessagestext'           => 'Ceci est la liste de tous les messages disponibles dans l’espace MediaWiki',
+'allmessagesnotsupportedUI' => 'Special:AllMessages n’accepte pas la langue de votre interface (<b>$1</b>) sur ce site.',
+'allmessagesnotsupportedDB' => '<b>Special:Allmessages</b> n’est pas disponible car <b>$wgUseDatabaseMessages</b> est désactivé.',
+'allmessagesfilter'         => 'Filtre d’expression rationnelle :',
+'allmessagesmodified'       => 'N’afficher que les modifications',
+
+# Thumbnails
+'thumbnail-more'  => 'Agrandir',
+'missingimage'    => '<b>Image manquante</b><br /><i>$1</i>',
+'filemissing'     => 'Fichier absent',
+'thumbnail_error' => 'Erreur lors de la création de la miniature : $1',
+'djvu_page_error'   => 'Page DjVu hors limites',
+'djvu_no_xml'       => 'Impossible d’obtenir le XML pour le fichier DjVu',
+'thumbnail_invalid_params' => 'Paramètres de la miniature invalides',
+'thumbnail_dest_directory' => 'Impossible de créer le répertoire de destination',
+
+# Special:Import
+'import'                     => 'Importer des pages',
+'importinterwiki'            => 'Import inter-wiki',
+'import-interwiki-text'      => 'Sélectionnez un wiki et un titre de page à importer.
+Les dates des versions et les noms des éditeurs seront préservés.
+Toutes les actions d’importation interwiki sont conservées dans le [[Special:Log/import|journal d’import]].',
+'import-interwiki-history'   => 'Copier toutes les versions de l’historique de cette page',
+'import-interwiki-submit'    => 'Importer',
+'import-interwiki-namespace' => 'Transférer les pages dans l’espace de nom :',
+'importtext'                 => 'Veuillez exporter le fichier depuis le wiki d’origine en utilisant l’outil Special:Export, le sauvegarder sur votre disque dur et le copier ici.',
+'importstart'                => 'Import des pages...',
+'import-revision-count'      => '$1 {{PLURAL:$1|version|versions}}',
+'importnopages'              => 'Aucune page à importer.',
+'importfailed'               => 'Échec de l’import : $1',
+'importunknownsource'        => 'Type de la source d’import inconnue',
+'importcantopen'             => 'Impossible d’ouvrir le fichier à importer',
+'importbadinterwiki'         => 'Mauvais lien interwiki',
+'importnotext'               => 'Vide ou sans texte',
+'importsuccess'              => 'L’import a réussi !',
+'importhistoryconflict'      => 'Il y a un conflit dans l’historique des versions (cette page a pu être importée auparavant).',
+'importnosources'            => 'Aucune source inter-wiki n’a été définie et la copie directe d’historique est désactivée.',
+'importnofile'               => 'Aucun fichier n’a été importé.',
+'importuploaderror'          => 'L’import du fichier a échoué : il est possible que celui-ci dépasse la taille autorisée.',
+
+# Import log
+'importlogpage'                    => 'Historique des importations de pages',
+'importlogpagetext'                => 'Imports administratifs de pages avec l’historique à partir des autres wikis.',
+'import-logentry-upload'           => 'a importé (téléchargement) $1',
+'import-logentry-upload-detail'    => '$1 version(s)',
+'import-logentry-interwiki'        => 'a importé (transwiki) $1',
+'import-logentry-interwiki-detail' => '$1 version(s) depuis $2',
+
+# Tooltip help for the actions
+'tooltip-pt-userpage'             => 'Ma page utilisateur',
+'tooltip-pt-anonuserpage'         => 'La page utilisateur de l’IP avec laquelle vous contribuez',
+'tooltip-pt-mytalk'               => 'Ma page de discussion',
+'tooltip-pt-anontalk'             => 'La page de discussion pour cette adresse IP',
+'tooltip-pt-preferences'          => 'Mes préférences',
+'tooltip-pt-watchlist'            => 'La liste des pages que vous suivez',
+'tooltip-pt-mycontris'            => 'Liste de mes contributions',
+'tooltip-pt-login'                => 'Vous êtes invité à vous identifier, mais ce n’est pas obligatoire.',
+'tooltip-pt-anonlogin'            => 'Vous êtes invité à vous identifier, mais ce n’est pas obligatoire.',
+'tooltip-pt-logout'               => 'Se déconnecter',
+'tooltip-ca-talk'                 => 'Discussion à propos de cette page',
+'tooltip-ca-edit'                 => 'Vous pouvez modifier cette page. Merci de prévisualiser avant d’enregistrer.',
+'tooltip-ca-addsection'           => 'Ajouter un commentaire à cette discussion.',
+'tooltip-ca-viewsource'           => 'Cette page est protégée. Vous pouvez toutefois en voir le contenu.',
+'tooltip-ca-history'              => 'Les auteurs et versions précédentes de cette page.',
+'tooltip-ca-protect'              => 'Protéger cette page',
+'tooltip-ca-delete'               => 'Supprimer cette page',
+'tooltip-ca-undelete'             => 'Restaurer cette page',
+'tooltip-ca-move'                 => 'Renommer cette page',
+'tooltip-ca-watch'                => 'Ajoutez cette page à votre liste de suivi',
+'tooltip-ca-unwatch'              => 'Retirez cette page de votre liste de suivi',
+'tooltip-search'                  => 'Chercher dans ce wiki',
+'tooltip-p-logo'                  => 'Page principale',
+'tooltip-n-mainpage'              => 'Visitez la page principale',
+'tooltip-n-portal'                => 'À propos du projet',
+'tooltip-n-currentevents'         => 'Trouver des informations sur les évènements actuels',
+'tooltip-n-recentchanges'         => 'Liste des modifications récentes sur le wiki',
+'tooltip-n-randompage'            => 'Afficher une page au hasard',
+'tooltip-n-help'                  => 'Aide',
+'tooltip-n-sitesupport'           => 'Soutenez le projet',
+'tooltip-t-whatlinkshere'         => 'Liste des pages liées à celle-ci',
+'tooltip-t-recentchangeslinked'   => 'Liste des modifications récentes des pages liées à celle-ci',
+'tooltip-feed-rss'                => 'Flux RSS pour cette page',
+'tooltip-feed-atom'               => 'Flux Atom pour cette page',
+'tooltip-t-contributions'         => 'Voir la liste des contributions de cet utilisateur',
+'tooltip-t-emailuser'             => 'Envoyer un courriel à cet utilisateur',
+'tooltip-t-upload'                => 'Importer une image ou fichier média sur le serveur',
+'tooltip-t-specialpages'          => 'Liste de toutes les pages spéciales',
+'tooltip-ca-nstab-main'           => 'Voir l’article',
+'tooltip-ca-nstab-user'           => 'Voir la page utilisateur',
+'tooltip-ca-nstab-media'          => 'Voir la page du média',
+'tooltip-ca-nstab-special'        => 'Ceci est une page spéciale, vous ne pouvez pas la modifier.',
+'tooltip-ca-nstab-project'        => 'Voir la page du projet',
+'tooltip-ca-nstab-image'          => 'Voir la page de l’image',
+'tooltip-ca-nstab-mediawiki'      => 'Voir le message système',
+'tooltip-ca-nstab-template'       => 'Voir le modèle',
+'tooltip-ca-nstab-help'           => 'Voir la page d’aide',
+'tooltip-ca-nstab-category'       => 'Voir la page de la catégorie',
+'tooltip-minoredit'               => 'Marquer mes modifications comme mineures',
+'tooltip-save'                    => 'Sauvegarder vos modifications',
+'tooltip-preview'                 => 'Merci de prévisualiser vos modifications avant de sauvegarder',
+'tooltip-diff'                    => 'Permet de visualiser les changements que vous avez effectués',
+'tooltip-compareselectedversions' => 'Afficher les différences entre deux versions de cette page',
+'tooltip-watch'                   => 'Ajouter cette page à votre liste de suivi',
+'tooltip-recreate'                => 'Recréer la page même si celle-ci a été effacée',
+
+# Stylesheets
+'common.css'   => '/** Le CSS placé ici sera appliqué à toutes les apparences. */',
+'monobook.css' => '/* Le CSS placé ici affectera les utilisateurs du skin Monobook */',
+
+# Scripts
+'common.js'   => '/* N’importe quel JavaScript ici sera chargé pour n’importe quel utilisateur et pour chaque page accédée. */',
+'monobook.js' => '/* Deprecated; use [[MediaWiki:common.js]] */',
+
+# Metadata
+'nodublincore'      => 'Les métadonnées « Dublin Core RDF » sont désactivées sur ce serveur.',
+'nocreativecommons' => 'Les données méta « Creative Commons RDF » sont désactivées sur ce serveur.',
+'notacceptable'     => 'Ce serveur wiki ne peut pas fournir les données dans un format que votre client est capable de lire.',
+
+# Attribution
+'anonymous'        => 'Utilisateur(s) non enregistré(s) de {{SITENAME}}',
+'siteuser'         => 'Utilisateur $1 de {{SITENAME}}',
+'lastmodifiedatby' => 'Cette page a été modifiée pour la dernière fois le $1 à $2 par $3.', # $1 date, $2 time, $3 user
+'and'              => 'et',
+'othercontribs'    => 'Contributions de cet utilisateur.', // Don't add the parameter, tendency to break. Also do not translate literally from English.
+'others'           => 'autres',
+'siteusers'        => 'Utilisateur(s) $1',
+'creditspage'      => 'Page de crédits',
+'nocredits'        => 'Il n’y a pas d’informations d’attribution disponibles pour cette page.',
+
+# Spam protection
+'spamprotectiontitle'    => 'Page automatiquement protégée pour cause de pourriel',
+'spamprotectiontext'     => 'La page que vous avez tenté de sauvegarder a été bloquée par le filtre anti-pourriel. Ceci est probablement causé par un lien vers un site externe.',
+'spamprotectionmatch'    => 'Le texte suivant a déclenché le détecteur de pourriel : $1',
+'subcategorycount'       => '{{PLURAL:$1|Une sous-catégorie est listée |$1 sous-catégories sont listées}} ci-dessous. Si un lien « (200 précédents) » ou « (200 suivants) » est présent ci-dessus, il peut mener à d’autres sous-catégories.',
+'categoryarticlecount'   => 'Il y a {{PLURAL:$1|un article|$1 articles}} dans cette catégorie.',
+'category-media-count'   => 'Il y a {{plural:$1|un fichier|$1 fichiers}} multimédia dans cette catégorie.',
+'listingcontinuesabbrev' => ' (suite)',
+'spambot_username'       => 'Nettoyage de spam MediaWiki',
+'spam_reverting'         => 'Restauration de la dernière version ne contenant pas de lien vers $1',
+'spam_blanking'          => 'Toutes les versions contenant des liens vers $1 sont blanchies',
+
+# Info page
+'infosubtitle'   => 'Informations pour la page',
+'numedits'       => 'Nombre de modifications : $1',
+'numtalkedits'   => 'Nombre de modifications (page de discussion) : $1',
+'numwatchers'    => 'Nombre de contributeurs ayant la page dans leur liste de suivi : $1',
+'numauthors'     => 'Nombre d’auteurs distincts : $1',
+'numtalkauthors' => 'Nombre d’auteurs distincts (page de discussion) : $1',
+
+# Math options
+'mw_math_png'    => 'Toujours produire une image PNG',
+'mw_math_simple' => 'HTML si très simple, autrement PNG',
+'mw_math_html'   => 'HTML si possible, autrement PNG',
+'mw_math_source' => 'Laisser le code TeX original',
+'mw_math_modern' => 'Pour les navigateurs modernes',
+'mw_math_mathml' => 'MathML',
+
+# Patrolling
+'markaspatrolleddiff'                 => 'Marquer comme n’étant pas un vandalisme',
+'markaspatrolledtext'                 => 'Marquer cet article comme non vandalisé',
+'markedaspatrolled'                   => 'Marqué comme non vandalisé',
+'markedaspatrolledtext'               => 'La version sélectionnée a été marquée comme non vandalisée.',
+'rcpatroldisabled'                    => 'La fonction de patrouille des modifications récentes n’est pas activée.',
+'rcpatroldisabledtext'                => 'La fonctionnalité de surveillance des modifications récentes n’est pas activée.',
+'markedaspatrollederror'              => 'Ne peut être marqué comme non vandalisé',
+'markedaspatrollederrortext'          => 'Vous devez sélectionner une version pour pouvoir la marquer comme non vandalisée.',
+'markedaspatrollederror-noautopatrol' => 'Vous n’avez pas le droit de marquer vos propres modifications comme surveillées.',
+
+# Patrol log
+'patrol-log-page' => 'Historique des versions patrouillées',
+'patrol-log-line' => 'a marqué la version $1 de $2 comme vérifiée $3',
+'patrol-log-auto' => '(automatique)',
+'patrol-log-diff' => '$1',
+
+# Image deletion
+'deletedrevision' => 'L’ancienne version $1 a été supprimée.',
+
+# Browsing diffs
+'previousdiff' => '← Différence précédente',
+'nextdiff'     => 'Différence suivante →',
+
+# Media information
+'mediawarning'         => '<b>Attention</b>: Ce fichier peut contenir du code malveillant, votre système pouvant être mis en danger par son exécution.
+<hr />',
+'imagemaxsize'         => 'Format maximal pour les images dans les pages de description d’images :',
+'thumbsize'            => 'Taille de la miniature :',
+'file-info'            => 'Taille du fichier : $1, type MIME : $2',
+'file-info-size'       => '($1 × $2 pixels, taille du fichier : $3, type MIME : $4)',
+'file-nohires'         => '<small>Pas de plus haute résolution disponible.</small>',
+'file-svg'             => '<small>Ceci est un graphique vectoriel, redimensionnable sans pertes. Taille de base : $1 × $2 pixels.</small>',
+'show-big-image'       => 'Image en plus haute résolution',
+'show-big-image-thumb' => '<small>Taille de cet aperçu : $1 × $2 pixels</small>',
+
+'newimages'    => 'Galerie des nouveaux fichiers',
+'showhidebots' => '($1 bots)',
+'noimages'     => 'Aucune image à afficher.',
+
+'passwordtooshort' => 'Votre mot de passe est trop court. Il doit contenir au moins $1 caractères et être différent de votre nom d\'utilisateur.',
+
+# Metadata
+'metadata'          => 'Métadonnées',
+'metadata-help'     => 'Ce fichier contient des informations supplémentaires probablement ajoutées par l’appareil photo ou le scanner qui l’a produite. Si le fichier a été modifié, certains détails peuvent ne pas refléter l’image modifiée.',
+'metadata-expand'   => 'Montrer les informations détaillées',
+'metadata-collapse' => 'Cacher les informations détaillées',
+'metadata-fields'   => 'Les champs de métadonnées d’EXIF listés dans ce message seront inclus dans la page de description de l’image quand la table de métadonnées sera réduite. Les autres champs seront cachés par défaut.
+* constructeur
+* modèle
+* Date et heure
+* temps d’exposition
+* Nombre F
+* longueur de la focale',
+
+# EXIF tags
+'exif-imagewidth'                  => 'Largeur',
+'exif-imagelength'                 => 'Hauteur',
+'exif-bitspersample'               => 'Bits par échantillon',
+'exif-compression'                 => 'Type de compression',
+'exif-photometricinterpretation'   => 'Composition des pixels',
+'exif-orientation'                 => 'Orientation',
+'exif-samplesperpixel'             => 'Échantillons par pixel',
+'exif-planarconfiguration'         => 'Arrangement des données',
+'exif-ycbcrsubsampling'            => 'Subsampling ratio of Y to C',
+'exif-ycbcrpositioning'            => 'Position YCbCr',
+'exif-xresolution'                 => 'Résolution de l’image en largeur',
+'exif-yresolution'                 => 'Résolution de l’image en hauteur',
+'exif-resolutionunit'              => 'Unités de résolution X et Y',
+'exif-stripoffsets'                => 'Image data location',
+'exif-rowsperstrip'                => 'Number of rows per strip',
+'exif-stripbytecounts'             => 'Bytes per compressed strip',
+'exif-jpeginterchangeformat'       => 'Position du SOI JPEG',
+'exif-jpeginterchangeformatlength' => 'Taille en octet des données JPEG',
+'exif-transferfunction'            => 'Fonction de transfert',
+'exif-whitepoint'                  => 'Chromaticité du point blanc',
+'exif-primarychromaticities'       => 'Chromaticities of primarities',
+'exif-ycbcrcoefficients'           => 'Coefficients de la matrice de transformation de l’espace colorimétrique',
+'exif-referenceblackwhite'         => 'Valeurs de référence noir et blanc',
+'exif-datetime'                    => 'Date et heure de changement du fichier',
+'exif-imagedescription'            => 'Titre de l’image',
+'exif-make'                        => 'Fabricant de l’appareil',
+'exif-model'                       => 'Modèle de l’appareil',
+'exif-software'                    => 'Logiciel utilisé',
+'exif-artist'                      => 'Auteur',
+'exif-copyright'                   => 'Détenteur du copyright',
+'exif-exifversion'                 => 'Version exif',
+'exif-flashpixversion'             => 'Version Flashpix supportée',
+'exif-colorspace'                  => 'Espace colorimétrique',
+'exif-componentsconfiguration'     => 'Signification de chaque composante',
+'exif-compressedbitsperpixel'      => 'Mode de compression de l’image',
+'exif-pixelydimension'             => 'Largeur d’image valide',
+'exif-pixelxdimension'             => 'Hauteur d’image valide',
+'exif-makernote'                   => 'Notes du fabricant',
+'exif-usercomment'                 => 'Commentaires',
+'exif-relatedsoundfile'            => 'Fichier audio associé',
+'exif-datetimeoriginal'            => 'Date et heure de la génération de données',
+'exif-datetimedigitized'           => 'Date et heure de numérisation',
+'exif-subsectime'                  => 'DateTime subseconds',
+'exif-subsectimeoriginal'          => 'DateTimeOriginal subseconds',
+'exif-subsectimedigitized'         => 'DateTimeDigitized subseconds',
+'exif-exposuretime'                => 'Temps d’exposition',
+'exif-exposuretime-format'         => '$1 sec ($2)',
+'exif-fnumber'                     => 'Focale',
+'exif-fnumber-format'              => 'f/$1',
+'exif-exposureprogram'             => 'Programme d’exposition',
+'exif-spectralsensitivity'         => 'Spectral sensitivity',
+'exif-isospeedratings'             => 'Sensibilité ISO',
+'exif-oecf'                        => 'Facteur de conversion optoélectronique',
+'exif-shutterspeedvalue'           => 'Vitesse d’obturation',
+'exif-aperturevalue'               => 'Ouverture',
+'exif-brightnessvalue'             => 'Luminosité',
+'exif-exposurebiasvalue'           => 'Correction d’exposition',
+'exif-maxaperturevalue'            => 'Champ d’ouverture maximal',
+'exif-subjectdistance'             => 'Distance du sujet',
+'exif-meteringmode'                => 'Mode de mesure',
+'exif-lightsource'                 => 'Source de lumière',
+'exif-flash'                       => 'Flash',
+'exif-focallength'                 => 'Longueur de focale',
+'exif-focallength-format'          => '$1 mm',
+'exif-subjectarea'                 => 'Subject area',
+'exif-flashenergy'                 => 'Énergie du flash',
+'exif-spatialfrequencyresponse'    => 'Spatial frequency response',
+'exif-focalplanexresolution'       => 'Résolution X focale plane',
+'exif-focalplaneyresolution'       => 'Résolution Y focale plane',
+'exif-focalplaneresolutionunit'    => 'Unité de résolution de focale plane',
+'exif-subjectlocation'             => 'Position du sujet',
+'exif-exposureindex'               => 'Index d’exposition',
+'exif-sensingmethod'               => 'Méthode de détection',
+'exif-filesource'                  => 'Source du fichier',
+'exif-scenetype'                   => 'Type de scène',
+'exif-cfapattern'                  => 'Matrice de filtrage de couleur',
+'exif-customrendered'              => 'Traitement d’image personnalisé',
+'exif-exposuremode'                => 'Mode d’exposition',
+'exif-whitebalance'                => 'Balance des blancs',
+'exif-digitalzoomratio'            => 'Taux d’agrandissement numérique (zoom)',
+'exif-focallengthin35mmfilm'       => 'Longueur de focale pour un film 35 mm',
+'exif-scenecapturetype'            => 'Type de capture de la scène',
+'exif-gaincontrol'                 => 'Contrôle de luminosité',
+'exif-contrast'                    => 'Contraste',
+'exif-saturation'                  => 'Saturation',
+'exif-sharpness'                   => 'Netteté',
+'exif-devicesettingdescription'    => 'Description de la configuration du dispositif',
+'exif-subjectdistancerange'        => 'Distance du sujet',
+'exif-imageuniqueid'               => 'Identifiant unique de l’image',
+'exif-gpsversionid'                => 'Version du tag GPS',
+'exif-gpslatituderef'              => 'Latitude Nord ou Sud',
+'exif-gpslatitude'                 => 'Latitude',
+'exif-gpslongituderef'             => 'Longitude Est ou Ouest',
+'exif-gpslongitude'                => 'Longitude',
+'exif-gpsaltituderef'              => 'Référence d’altitude',
+'exif-gpsaltitude'                 => 'Altitude',
+'exif-gpstimestamp'                => 'Heure GPS (horloge atomique)',
+'exif-gpssatellites'               => 'Satellites utilisés pour la mesure',
+'exif-gpsstatus'                   => 'Statut récepteur',
+'exif-gpsmeasuremode'              => 'Mode de mesure',
+'exif-gpsdop'                      => 'Précision de la mesure',
+'exif-gpsspeedref'                 => 'Unité de vitesse',
+'exif-gpsspeed'                    => 'Vitesse du récepteur GPS',
+'exif-gpstrackref'                 => 'Référence pour la direction du mouvement',
+'exif-gpstrack'                    => 'Direction du movement',
+'exif-gpsimgdirectionref'          => 'Référence pour l’orientation de l’image',
+'exif-gpsimgdirection'             => 'Direction de l’image',
+'exif-gpsmapdatum'                 => 'Geodetic survey data used',
+'exif-gpsdestlatituderef'          => 'Référence pour la latitude de la destination',
+'exif-gpsdestlatitude'             => 'Latitude de la destination',
+'exif-gpsdestlongituderef'         => 'Référence pour la longitude de la destination',
+'exif-gpsdestlongitude'            => 'Longitude de la destination',
+'exif-gpsdestbearingref'           => 'Référence pour le relèvement de la destination',
+'exif-gpsdestbearing'              => 'Relèvement de la destination',
+'exif-gpsdestdistanceref'          => 'Référence pour la distance de la destination',
+'exif-gpsdestdistance'             => 'Distance à la destination',
+'exif-gpsprocessingmethod'         => 'Nom de la méthode de traitement du GPS',
+'exif-gpsareainformation'          => 'Nom de la zone GPS',
+'exif-gpsdatestamp'                => 'Date GPS',
+'exif-gpsdifferential'             => 'Correction différentielle GPS',
+
+# EXIF attributes
+'exif-compression-1' => 'Non compressé',
+'exif-compression-6' => 'JPEG',
+
+'exif-photometricinterpretation-2' => 'RGB',
+'exif-photometricinterpretation-6' => 'YCbCr',
+
+'exif-unknowndate' => 'Date inconnue',
+
+'exif-orientation-1' => 'Normal', # 0th row: top; 0th column: left
+'exif-orientation-2' => 'Inversée horizontalement', # 0th row: top; 0th column: right
+'exif-orientation-3' => 'Tournée de 180°', # 0th row: bottom; 0th column: right
+'exif-orientation-4' => 'Inversée verticalement', # 0th row: bottom; 0th column: left
+'exif-orientation-5' => 'Tournée de 90° à gauche et inversée verticalement', # 0th row: left; 0th column: top
+'exif-orientation-6' => 'Tournée de 90° à droite', # 0th row: right; 0th column: top
+'exif-orientation-7' => 'Tournée de 90° à droite et inversée verticalement', # 0th row: right; 0th column: bottom
+'exif-orientation-8' => 'Tournée de 90° à gauche', # 0th row: left; 0th column: bottom
+
+'exif-planarconfiguration-1' => 'chunky format',
+'exif-planarconfiguration-2' => 'planar format',
+
+'exif-xyresolution-i' => '$1 dpi',
+'exif-xyresolution-c' => '$1 dpc',
+
+'exif-colorspace-1'      => 'sRGB',
+'exif-colorspace-ffff.h' => 'FFFF.H',
+
+'exif-componentsconfiguration-0' => 'n’existe pas',
+'exif-componentsconfiguration-1' => 'Y',
+'exif-componentsconfiguration-2' => 'Cb',
+'exif-componentsconfiguration-3' => 'Cr',
+'exif-componentsconfiguration-4' => 'R',
+'exif-componentsconfiguration-5' => 'G',
+'exif-componentsconfiguration-6' => 'B',
+
+'exif-exposureprogram-0' => 'Indéfini',
+'exif-exposureprogram-1' => 'Manuel',
+'exif-exposureprogram-2' => 'Programme normal',
+'exif-exposureprogram-3' => 'Priorité à l’ouverture',
+'exif-exposureprogram-4' => 'Priorité à l’obturation',
+'exif-exposureprogram-5' => 'Programme création (préférence à la profondeur de champ)',
+'exif-exposureprogram-6' => 'Programme action (préférence à la vitesse d’obturation)',
+'exif-exposureprogram-7' => 'Mode portrait (pour clichés de près avec arrière-plan flou)',
+'exif-exposureprogram-8' => 'Mode paysage (pour des clichés de paysages nets)',
+
+'exif-subjectdistance-value' => '$1 mètres',
+
+'exif-meteringmode-0'   => 'Inconnu',
+'exif-meteringmode-1'   => 'Moyenne',
+'exif-meteringmode-2'   => 'Mesure centrale moyenne',
+'exif-meteringmode-3'   => 'Spot',
+'exif-meteringmode-4'   => 'MultiSpot',
+'exif-meteringmode-5'   => 'Pattern',
+'exif-meteringmode-6'   => 'Partiel',
+'exif-meteringmode-255' => 'Autre',
+
+'exif-lightsource-0'   => 'Inconnue',
+'exif-lightsource-1'   => 'Lumière du jour',
+'exif-lightsource-2'   => 'Fluorescent',
+'exif-lightsource-3'   => 'Tungstène (lumière incandescente)',
+'exif-lightsource-4'   => 'Flash',
+'exif-lightsource-9'   => 'Temps clair',
+'exif-lightsource-10'  => 'Temps nuageux',
+'exif-lightsource-11'  => 'Ombre',
+'exif-lightsource-12'  => 'Éclairage fluorescent lumière du jour (D 5700 – 7100K)',
+'exif-lightsource-13'  => 'Éclairage fluorescent blanc (N 4600 – 5400K)',
+'exif-lightsource-14'  => 'Éclairage fluorescent blanc froid (W 3900 – 4500K)',
+'exif-lightsource-15'  => 'Éclairage fluorescent blanc (WW 3200 – 3700K)',
+'exif-lightsource-17'  => 'Lumière standard A',
+'exif-lightsource-18'  => 'Lumière standard B',
+'exif-lightsource-19'  => 'Lumière standard C',
+'exif-lightsource-20'  => 'D55',
+'exif-lightsource-21'  => 'D65',
+'exif-lightsource-22'  => 'D75',
+'exif-lightsource-23'  => 'D50',
+'exif-lightsource-24'  => 'Éclairage de studio au tungstène ISO',
+'exif-lightsource-255' => 'Autre source de lumière',
+
+'exif-focalplaneresolutionunit-2' => 'pouces',
+
+'exif-sensingmethod-1' => 'Non défini',
+'exif-sensingmethod-2' => 'One-chip color area sensor',
+'exif-sensingmethod-3' => 'Two-chip color area sensor',
+'exif-sensingmethod-4' => 'Three-chip color area sensor',
+'exif-sensingmethod-5' => 'Color sequential area sensor',
+'exif-sensingmethod-7' => 'Trilinear sensor',
+'exif-sensingmethod-8' => 'Color sequential linear sensor',
+
+'exif-filesource-3' => 'DSC',
+
+'exif-scenetype-1' => 'Image directement photographiée',
+
+'exif-customrendered-0' => 'Procédé normal',
+'exif-customrendered-1' => 'Procédé personnalisé',
+
+'exif-exposuremode-0' => 'Exposition automatique',
+'exif-exposuremode-1' => 'Exposition manuelle',
+'exif-exposuremode-2' => 'Bracketting automatique',
+
+'exif-whitebalance-0' => 'Balance des blancs automatique',
+'exif-whitebalance-1' => 'Balance des blancs manuelle',
+
+'exif-scenecapturetype-0' => 'Standard',
+'exif-scenecapturetype-1' => 'Paysage',
+'exif-scenecapturetype-2' => 'Portrait',
+'exif-scenecapturetype-3' => 'Scène de nuit',
+
+'exif-gaincontrol-0' => 'Aucun',
+'exif-gaincontrol-1' => 'Low gain up',
+'exif-gaincontrol-2' => 'High gain up',
+'exif-gaincontrol-3' => 'Low gain down',
+'exif-gaincontrol-4' => 'High gain down',
+
+'exif-contrast-0' => 'Normal',
+'exif-contrast-1' => 'Faible',
+'exif-contrast-2' => 'Fort',
+
+'exif-saturation-0' => 'Normal',
+'exif-saturation-1' => 'Saturation faible',
+'exif-saturation-2' => 'Saturation élevée',
+
+'exif-sharpness-0' => 'Normale',
+'exif-sharpness-1' => 'Douce',
+'exif-sharpness-2' => 'Dure',
+
+'exif-subjectdistancerange-0' => 'Inconnu',
+'exif-subjectdistancerange-1' => 'Macro',
+'exif-subjectdistancerange-2' => 'Rapproché',
+'exif-subjectdistancerange-3' => 'Distant',
+
+# Pseudotags used for GPSLatitudeRef and GPSDestLatitudeRef
+'exif-gpslatitude-n' => 'Latitude Nord',
+'exif-gpslatitude-s' => 'Latitude Sud',
+
+# Pseudotags used for GPSLongitudeRef and GPSDestLongitudeRef
+'exif-gpslongitude-e' => 'Longitude Est',
+'exif-gpslongitude-w' => 'Longitude Ouest',
+
+'exif-gpsstatus-a' => 'Mesure en cours',
+'exif-gpsstatus-v' => 'Interopérabilité de la mesure',
+
+'exif-gpsmeasuremode-2' => 'Mesure à 2 dimensions',
+'exif-gpsmeasuremode-3' => 'Mesure à 3 dimensions',
+
+# Pseudotags used for GPSSpeedRef and GPSDestDistanceRef
+'exif-gpsspeed-k' => 'Kilomètres/heure',
+'exif-gpsspeed-m' => 'Miles/heure',
+'exif-gpsspeed-n' => 'Nœuds',
+
+# Pseudotags used for GPSTrackRef, GPSImgDirectionRef and GPSDestBearingRef
+'exif-gpsdirection-t' => 'Direction vraie',
+'exif-gpsdirection-m' => 'Nord magnétique',
+
+# External editor support
+'edit-externally'      => 'Modifier ce fichier en utilisant un application externe',
+'edit-externally-help' => 'Voir [http://meta.wikimedia.org/wiki/Help:External_editors les instructions] pour plus d’informations.',
+
+# 'all' in various places, this might be different for inflected languages
+'recentchangesall' => 'toutes',
+'imagelistall'     => 'toutes',
+'watchlistall1'    => 'tout',
+'watchlistall2'    => 'tout',
+'namespacesall'    => 'Tous',
+
+# E-mail address confirmation
+'confirmemail'            => 'Confirmer adresse de courriel',
+'confirmemail_noemail'    => 'L’adresse de courriel configurée dans vos [[Special:Preferences|préférences]] n’est pas valide.',
+'confirmemail_text'       => 'Ce wiki nécessite la vérification de votre adresse de courriel avant de pouvoir utiliser toute fonction de messagerie. Utilisez le bouton ci-dessous pour envoyer un courriel de confirmation à votre adresse. Le courriel contiendra un lien contenant un code, chargez ce lien dans votre navigateur pour valider votre adresse.',
+'confirmemail_pending'    => '<div class="error"> Un code de confirmation vous a déjà été envoyé par e-mail ; si vous venez de créer votre compte, veuillez attendre quelques minutes que l’e-mail arrive avant de demander un nouveau code. </div>',
+'confirmemail_send'       => 'Envoyer un code de confirmation',
+'confirmemail_sent'       => 'Courriel de confirmation envoyé',
+'confirmemail_oncreate'   => 'Un code de confirmation a été envoyé à votre adresse e-mail. Ce code n’est pas requis pour se connecter, mais vous en aurez besoin pour activer les fonctionnalités liées aux e-mails sur ce wiki.',
+'confirmemail_sendfailed' => 'Impossible d’envoyer le courriel de confirmation. Vérifiez votre adresse.
+
+Retour du programme de courriel : $1',
+'confirmemail_invalid'    => 'Code de confirmation incorrect. Le code a peut être expiré',
+'confirmemail_needlogin'  => 'Vous devez vous $1 pour confirmer votre adresse de courriel.',
+'confirmemail_success'    => 'Votre adresse de courriel est confirmée. Vous pouvez maintenant vous connecter et profiter du wiki.',
+'confirmemail_loggedin'   => 'Votre adresse est maintenant confirmée',
+'confirmemail_error'      => 'Un problème est survenu en voulant enregistrer votre confirmation',
+'confirmemail_subject'    => 'Confirmation d’adresse de courriel pour {{SITENAME}}',
+'confirmemail_body'       => 'Quelqu’un, probablement vous avec l’adresse IP $1, a enregistré un compte « $2 » avec cette adresse de courriel sur le site {{SITENAME}}.
+
+Pour confirmer que ce compte vous appartient vraiment et activer les fonctions de messagerie sur {{SITENAME}}, veuillez suivre le lien ci dessous dans votre navigateur :
+
+$3
+
+Si il ne s’agit pas de vous, n’ouvrez pas le lien. Ce code de confirmation expirera le $4.',
+
+# Inputbox extension, may be useful in other contexts as well
+'tryexact'       => 'Essayez la correspondance exacte',
+'searchfulltext' => 'Recherche en texte intégral',
+'createarticle'  => 'Créer l’article',
+
+# Scary transclusion
+'scarytranscludedisabled' => '[La transclusion interwiki est désactivée]',
+'scarytranscludefailed'   => '[La récupération de modèle a échoué pour $1 ; désolé]',
+'scarytranscludetoolong'  => '[L’URL est trop longue ; désolé]',
+
+# Trackbacks
+'trackbackbox'      => '<div id="mw_trackbacks"> Rétroliens vers cet article :<br /> $1 </div>',
+'trackbackremove'   => '([$1 Supprimer])',
+'trackbacklink'     => 'Rétrolien',
+'trackbackdeleteok' => 'Le rétrolien a été supprimé avec succès.',
+
+# Delete conflict
+'deletedwhileediting' => 'Attention : cette page a été supprimée après que vous avez commencé à la modifier.',
+'confirmrecreate'     => "L’utilisateur [[User:$1|$1]] ([[User talk:$1|Discussion]]) a supprimé cette page, alors que vous aviez commencé à l’éditer, pour le motif suivant : 
+: ''$2'' 
+Veuillez confirmer que vous désirez recréer cet article.",
+'recreate'            => 'Recréer',
+
+'unit-pixel' => 'px',
+
+# HTML dump
+'redirectingto' => 'Redirection vers [[$1]]',
+
+# action=purge
+'confirm_purge'        => 'Voulez-vous rafraîchir cette page (purger le cache) ? $1',
+'confirm_purge_button' => 'Confirmer',
+
+'youhavenewmessagesmulti' => 'Vous avez de nouveaux messages sur $1',
+
+'searchcontaining' => 'Chercher les articles contenant « $1 ».',
+'searchnamed'      => 'Chercher les articles nommés « $1 ».',
+'articletitles'    => 'Articles commençant par « $1 »',
+'hideresults'      => 'Cacher les résultats',
+
+# DISPLAYTITLE
+'displaytitle' => '(Lier vers cette page comme [[$1]])',
+
+'loginlanguagelabel' => 'Langue : $1',
+
+# Multipage image navigation
+'imgmultipageprev'   => '&larr; page précédente',
+'imgmultipagenext'   => 'page suivante &rarr;',
+'imgmultigo'         => 'Accéder !',
+'imgmultigotopre'    => 'Accéder à la page',
+'imgmultiparseerror' => 'Ce fichier image est apparemment corrompu ou incorrect, et {{SITENAME}} ne peut pas fournir une liste des pages.',
+
+# Table pager
+'ascending_abbrev'         => 'asc',
+'descending_abbrev'        => 'desc',
+'table_pager_next'         => 'Page suivante',
+'table_pager_prev'         => 'Page précédente',
+'table_pager_first'        => 'Première page',
+'table_pager_last'         => 'Dernière page',
+'table_pager_limit'        => 'Montrer $1 éléments par page',
+'table_pager_limit_submit' => 'Accéder',
+'table_pager_empty'        => 'Aucun résultat',
+
+# Auto-summaries
+'autosumm-blank'   => 'Résumé automatique : blanchiment',
+'autosumm-replace' => "Résumé automatique : contenu remplacé par '$1'",
+'autoredircomment' => 'Redirection vers [[$1]]', # This should be changed to the new naming convention, but existed beforehand
+'autosumm-new'     => 'Nouvelle page : $1',
+
+# Size units
+'size-bytes'     => '$1 o',
+'size-kilobytes' => '$1 ko',
+'size-megabytes' => '$1 Mo',
+'size-gigabytes' => '$1 Go',
+
+# Live preview
+'livepreview-loading' => 'Chargement…',
+'livepreview-ready'   => 'Chargement… terminé !',
+'livepreview-failed'  => 'L’aperçu rapide a échoué !
+Essayez la prévisualisation normale.',
+'livepreview-error'   => 'Impossible de se connecter : $1 "$2"
+Essayez la prévisualisation normale.',
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesFur.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesFur.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesFur.php	(revision 1280)
@@ -0,0 +1,729 @@
+<?php
+/** Friulian (Furlan)
+ *
+ * @addtogroup Language
+ */
+$skinNames = array(
+	'nostalgia' => 'Nostalgie',
+);
+$namespaceNames = array(
+	NS_MEDIA          => 'Media',
+	NS_SPECIAL        => 'Speciâl',
+	NS_MAIN           => '',
+	NS_TALK           => 'Discussion',
+	NS_USER           => 'Utent',
+	NS_USER_TALK      => 'Discussion_utent',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK   => 'Discussion_$1',
+	NS_IMAGE          => 'Figure',
+	NS_IMAGE_TALK     => 'Discussion_figure',
+	NS_MEDIAWIKI      => 'MediaWiki',
+	NS_MEDIAWIKI_TALK => 'Discussion_MediaWiki',
+	NS_TEMPLATE       => 'Model',
+	NS_TEMPLATE_TALK  => 'Discussion_model',
+	NS_HELP	          => 'Jutori',
+	NS_HELP_TALK      => 'Discussion_jutori',
+	NS_CATEGORY       => 'Categorie',
+	NS_CATEGORY_TALK  => 'Discussion_categorie'
+);
+
+$datePreferences = false;
+$defaultDateFormat = 'dmy';
+$dateFormats = array(
+	'dmy time' => 'H:i',
+	'dmy date' => 'j "di" M Y',
+	'dmy both' => 'j "di" M Y "a lis" H:i',
+);
+
+$separatorTransformTable = array(',' => "\xc2\xa0", '.' => ',' );
+
+$messages = array(
+'1movedto2'		=> "$1 movût in $2",
+'about' => "Informazions",
+'aboutsite' => "Informazions su {{SITENAME}}",
+'accmailtitle' => 'Password mandade.',
+'accmailtext' => 'La password par "$1" e je stade mandade a $2.',
+'addedwatch'		=> "Zontât aes pagjinis tignudis di voli",
+'addedwatchtext'	=> "La pagjine \"$1\" e je stade zontade ae [[Special:Watchlist|liste di chês tignudis di voli]].
+Tal futûr i cambiaments a cheste pagjine e ae pagjine di discussion relative a saran segnalâts ca,
+e la pagjine e sarà '''gruessute''' te [[Special:Recentchanges|liste dai ultins cambiaments]] cussì che tu puedis notâle daurman.
+
+<p>Se tu vuelis gjavâle de liste pi indevant, frache su \"No stâ tignî di voli\" te sbare in alt.",
+
+'allarticles' => "Dutis lis vôs",
+'allinnamespace'	=> "Dutis lis pagjinis (non dal spazi $1)",
+'alllogstext'	=> 'Viodude combinade dai regjistris des cjamadis, eliminazions, protezions, blocs e azions day sysop.
+Tu puedis strenzi la viodude sielzint un gjenar di regjistri, un non utent o la vôs che ti interesse.',
+'allmessages' => "Ducj i messaçs di sisteme",
+'allmessagescurrent' => "Test curint",
+'allmessagesdefault' => "Test predeterminât",
+'allmessagesmodified' => 'Mostre dome modificâts',
+'allmessagesname' => "Non",
+'allmessagestext'	=> "Cheste e je une liste dai messaçs di sisteme disponibii tal non dal spazi MediaWiki:",
+'allnotinnamespace'	=> "Dutis lis pagjinis (no tal non dal spazi $1)",
+'allpages' => "Dutis lis pagjinis",
+'allpagesfrom'		=> "Mostre pagjinis scomençant di:",
+'allpagesnext'		=> "Prossim",
+'allpagesprev'		=> "Precedent",
+'allpagessubmit' => "Va",
+'alreadyloggedin' => "<strong>Utent $1, tu sês za jentrât!</strong><br />",
+'ancientpages'		=> 'Pagjinis plui vecjis',
+'and' => 'e',
+'anoneditwarning' => 'No tu sês jentrât cuntun non utent. La to direzion IP e vignarà regjistrade tal storic di cheste pagjine.',
+'anontalk'		=> 'Discussion par chest IP',
+'anonymous' => 'Utent(s) anonim(s) di {{SITENAME}}',
+'apr' => "Avr",
+'april' => "Avrîl",
+'articleexists' => 'Une pagjine cun chest non e esist za, o il non sielt nol è valit.
+Sielç par plasê un altri non.',
+'aug' => "Avo",
+'august' => "Avost",
+'badfilename'	=> 'File non gambiât in "$1".',
+'badretype'		=> "Lis peraulis clâfs inseridis no son compagnis.",
+'badsig'		=> 'Firme crude invalide; controle i tags HTML.',
+'blanknamespace' => '(Principâl)',
+'blockedtitle'	=> 'Utent blocât',
+'blocklink' => "bloche",
+'bold_sample'=>'Test in gruessut',
+'bold_tip'=>'Test in gruessut',
+'brokenredirects'	=> 'Redirezions no funzionantis',
+'brokenredirectstext'	=> 'Lis redirezions ca sot inviin a pagjinis che no esistin:',
+'byname'		=> 'par non',
+'bydate'		=> 'par date',
+'bysize'		=> 'par dimension',
+'cancel' => "Scancele",
+'categories' => "Categoriis",
+'categoriespagetext' => 'Te wiki a esistin lis categoriis ca sot.',
+'category_header' => "Vôs inte categorie \"$1\"",
+'categoryarticlecount' => "In cheste categorie tu puedis cjatâ $1 vôs.",
+'changepassword' => 'Gambie peraule clâf',
+'changed'			=> 'cambiade',
+'changes' => 'cambiaments',
+'compareselectedversions' => 'Confronte versions selezionadis',
+'confirm' => "Conferme",
+'confirmdelete' => "Conferme eliminazion",
+'confirmemail' => 'Conferme direzione di pueste',
+'confirmemail_text' => "Cheste wiki ti domande di validÂ la to direzion di pueste eletroniche prime di doprâ lis funzions di email. Ative il boton ca sot par inviâ un codiç di conferme ae to direzion. Chest messaç al includarà un leam cuntun codiç; cjame il leam tal to sgarfadôr par confermâ la validitât de tô direzion.",
+'confirmemail_send' => 'Mande un codiç di conferme',
+'confirmemail_sent' => 'Messaç di conferme mandât.',
+'confirmemail_success' => 'La tô direzion di pueste e je stade confermade. Tu puedis cumò jentrâ e gjoldi la wiki.',
+'confirmemail_loggedin' => 'La tô direzion di pueste e je stade confermade.',
+'confirmprotect' => "Conferme protezion",
+'confirmprotecttext' => "Vuelistu pardabon protezi cheste pagjine?",
+'confirmunprotect' => "Conferme par gjavâ la protezion",
+'confirmunprotecttext' => "Vuelistu pardabon gjavâ la protezion a cheste pagjine?",
+'contextlines'	=> 'Riis par risultât',
+'contributions' => "Contribûts dal utent",
+'contribslink'	=> 'contribûts',
+'contribsub2'    => "Par $1 ($2)",
+'copyright' => "Il contignût al è disponibil sot de $1",
+/*'copyrightwarning' => "<!-- Perché i link non abbiano l'aspetto di link esterni: -->
+<div class=\"plainlinks\">
+
+<div style=\"margin-top:2em\">
+<div style=\"font-weight: bold; font-size: 120%;\">I cambiaments che tu âs fat a saran visibii daurman.</div>
+* Par plasê, dopre la [[{{ns:project}}:Sandbox|sandbox]] se tu vuelis fâ cualchi prove.
+----
+<p style=\"background: red; color: white; font-weight: bold; text-align: center; padding: 2px;\">'''NO STÂ DOPRÂ MATERIÂL CUVIERT DAL DIRIT DI AUTÔR (COPYRIGHT - ©) SE NO TU ÂS UNE AUTORIZAZION ESPLICITE!!!'''</p></div>
+
+* Sta atent, par plasê, che ducj i contribûts ae {{SITENAME}} a son considerâts come dâts fûr sot di une licence GNU Free Documentation License (cjale $1 par altris detais).
+* Se no tu vuelis che il to test al puedi jessi gambiât e tornât a jessi distribuît da cualsisei persone cence limits, no stâ mandâlu ae {{SITENAME}}, al è miôr se tu ti fasis un to sît web personâl.
+* Inviant chest test, tu stâs garantint che chest al è stât scrit di te in origjin, o che al è stât copiât di une sorzint di public domini, o alc   di simil, opûr che tu âs vût une autorizazion esplicite pe publicazion e  tu puedis dimostrâ chest fat.
+</div>
+
+</div>",*/
+'createaccount' => "Cree une gnove identitât",
+'createaccountmail'	=> 'par pueste eletroniche',
+'createarticle' => "Cree vôs",
+'created'			=> 'creade',
+'creditspage' => 'Pagjine dai ricognossiments',
+'cur' => "cor",
+'currentevents' => "Lis gnovis",
+'currentevents-url' => 'Lis gnovis',
+'data'	=> 'Dâts',
+'dateformat'		=> 'Formât de date',
+'datedefault'		=> 'Nissune preference',
+'datetime'		=> 'Date e ore',
+'deadendpages'  => 'Pagjinis cence usite',
+'dec' => "Dic",
+'december' => "Dicembar",
+'default' => "predeterminât",
+'delete' => "Elimine",
+'delete_and_move' => 'Elimine e môf',
+'deletecomment'	=> 'Reson pe eliminazion',
+'deletedarticle' => "eliminât \"$1\"",
+'deletedtext'	=> "\"$1\" al è stât eliminât.
+Cjale $2 par une liste des ultimis eliminazions.",
+'deleteimg' => "eli",
+'deletepage' => "Elimine pagjine",
+'deletesub' => "(Eliminant \"$1\")",
+'deletethispage' => "Elimine cheste pagjine",
+'deletionlog'	=> 'regjistri eliminazions',
+'dellogpage'	=> 'Regjistri des eliminazions',
+'destfilename' => 'Non dal file di destinazion',
+'diff' => "difarencis",
+'difference' => "(Difarence jenfri des revisions)",
+'disambiguations'	=> 'Pagjinis di disambiguazion',
+'disambiguationspage'	=> 'Template:disambig',
+'disambiguationstext'	=> "Lis pagjinis ca sot a son leadis a une <i>pagjine di disambiguazion</i>. A dovaressin invezit jessi leadis al argoment apropriât.<br />Une pagjine e je tratade come di disambiguazion se e je leade di $1.<br />Leams di altris nons di spazi <i>no</i> son metûts inte liste.",
+'disclaimers' => "Avîs legâi",
+'doubleredirects'	=> 'Reindirizaments doplis',
+'download' => 'discjame',
+'edit-externally' => 'Modifiche chest file cuntune aplicazion esterne',
+'edit-externally-help' => 'Cjale [http://meta.wikimedia.org/wiki/Help:External_editors setup instructions] par altris informazions.',
+'edit' => "Cambie",
+'editconflict' => 'Conflit inte modifiche: $1',
+'explainconflict' => 'Cualchidun altri al à cambiât cheste pagjine di cuant che tu âs començât a modificâle.
+La aree di test disore e conten il test de pagjine che esist cumò, i tiei cambiaments a son mostrâts inte aree disot.
+Tu varâs di inserî di gnûf i tiei cambiaments tal test esistint.
+<b>Dome</b> il test in alt al vignarà salvât cuant che tu frachis su "Salve pagjine".<br />',
+'editcurrent'	=> 'Cambie la version corinte di cheste pagjine',
+'editing' => "Cambiament di $1",
+'editinguser' => "Cambiament di $1",
+'edithelp'		=> "Jutori pai cambiaments",
+'edithelppage'	=> "Help:Cambiaments",
+'editingold'	=> "<strong>ATENZION: tu stâs cambiant une version vecje e no inzornade di cheste pagjine. Se tu la salvis, ducj i cambiaments fats di chê volte in ca a laran pierdûts.</strong>",
+'editingsection' => "Cambiament di $1 (sezion)",
+'editsection' => "cambie",
+'editold' => "cambie",
+'editthispage' => "Cambie cheste pagjine",
+'email'			=> 'Pueste eletroniche',
+'emailauthenticated'  => 'La tô direzion email e je stade autenticade su $1.',
+'emailconfirmlink' => 'Conferme la tô direzion email',
+'emailmessage' => "Messaç",
+'emailnotauthenticated'  => 'La tô direzion email no je ancjemò autenticade. No vignaran mandâts messaçs pes funzions ca sot.',
+'emailuser' => "Messaç di pueste a chest utent",
+'error' => "Erôr",
+'errorpagetitle' => "Erôr",
+'exbeforeblank' => "il contignût prime di disvuedâ al jere: '$1'",
+'exblank' => 'pagjine vueide',
+'excontent' => "il contignût al jere: '$1'",
+'excontentauthor' => "il contignût al jere: '$1' (e al veve contribuît dome '$2')",
+'exif-compression-1' => 'Cence compression',
+'exif-imagewidth' =>'Largjece',
+'exif-imagelength' =>'Altece',
+'exif-model' =>'Model di machine fotografiche',
+'exif-software' =>'Software doprÂt',
+'export' => "Espuarte pagjinis",
+'exportcuronly'	=> 'Inclût dome la revision corinte, no dut il storic',
+'extlink_sample'=>'http://www.example.com titul leam',
+'extlink_tip'=>'Leam esterni (visiti dal prefìs http://)',
+'feb' => "Fev",
+'february' => "Fevrâr",
+'filedesc' => "Descrizion",
+'fileuploadsummary' => 'Somari:',
+'fileinfo' => '$1KB, gjenar MIME: <code>$2</code>',
+'filemissing' => "File mancjant",
+'filename' => "Non dal file",
+'filenotfound' => "No si pues cjatâ il file \"$1\".",
+'filesource' => 'Surzint',
+'filestatus' => 'Stât dal copyright',
+'friday' => "Vinars",
+'go' => "Va",
+'searcharticle' => "Va",
+'gotaccount'	=> 'Âstu za une identitât? $1.',
+'gotaccountlink'	=> 'Jentre',
+'guesstimezone' => "Cjape impostazions dal sgarfadôr",
+'headline_sample'=>'Test dal titul',
+'headline_tip'=>'Titul di nivel 2',
+'help' => "Jutori",
+'helppage' => "Help:Contignûts",
+'hide' => "plate",
+'hideresults' => 'Plate risultâts',
+'hidetoc' => "plate",
+'hist' => "stor",
+'history' => "Storic de pagjine",
+'history_short' => "Storic",
+'historywarning' => 'Atenzion: la pagjine che tu stâs eliminant e à un storic.',
+'hr_tip' => "Rie orizontâl (no stâ doprâle masse spes)",
+'ignorewarning'   => 'Ignore avîs e salve instès il file.',
+'ignorewarnings'	=> 'Ignore i avîs',
+'ilsubmit' => "Cîr",
+'image_sample' => "Esempli.jpg",
+'image_tip'=> 'Figure includude',
+'imagelinks' => "Leams de figure",
+'imagelist' => "Liste des figuris",
+'imagelistall' => 'ducj',
+'imagelisttext'	=> "Ca sot e je une liste di $1 files ordenâts $2.",
+'imagepage' => "Cjale pagjine de figure",
+'imgdelete' => "eli",
+'imgdesc' => "desc",
+'imghistlegend' => "Legenda: (cor) = cheste e je la figure corinte, (eli) = elimine
+cheste vecje version, (rip) = torne a ripristinâ cheste vecje version.
+<br /><i>Frache su une date par viodi la figure cjamade su chê volte</i>.",
+'imghistory' => "Storic de figure",
+'imglegend' => "Legenda: (desc) = mostre/cambie descrizion de figure.",
+'import'	=> 'Impuarte pagjinis',
+'importfailed'	=> "Impuartazion falide: $1",
+'importnotext' => "Vueit o cence test",
+'importsuccess'	=> 'Impuartât cun sucès!',
+'info_short' => "Informazions",
+'infosubtitle' => 'Informazions pe pagjine',
+'intl'		=> 'Leams interlengâi',
+'invalidemailaddress'	=> 'La direzion email no pues jessi acetade parcè che no samee intun formât valid. Inserìs par plasê une direzion ben formatade o disvuede chel cjamp.',
+'invert' => "Invertìs selezion",
+'ipbsubmit' => "Bloche chest utent",
+'isbn' => "ISBN",
+'isredirect' => "pagjine di reindirizament",
+'istemplate'	=> 'includude',
+'italic_sample'=>'Test in corsîf',
+'italic_tip'=>'Test in corsîf',
+'jan' => "Zen",
+'january' => "Zenâr",
+'jul' => "Lui",
+'july' => "Lui",
+'jumpto' => 'Va a:',
+'jumptonavigation' => 'navigazion',
+'jumptosearch' => 'ricercje',
+'jun' => "Jug",
+'june' => "Jugn",
+'largefile' => "Si racomande che lis figuris no sedin pi grandis di $1KB ($2).",
+'last' => "ultime",
+'lastmodifiedat' => "Cambiât par l'ultime volte ai $2, $1",
+'lastmodifiedatby' => "Cambiât par l'ultime volte ai $2, $1 di",
+'lineno' => "Rie $1:",
+'link_sample' => "Titul dal leam",
+'link_tip' => "Leams internis",
+'linklistsub' => "(Liste di leams)",
+'linkshere' => "Lis pagjinis ca sot a son leadis a cheste:",
+'linkstoimage' => "Lis pagjinis ca sot a son leadis a cheste figure:",
+'listingcontinuesabbrev' => " cont.",
+'listredirects' => 'Liste des redirezions',
+'listusers' => "Liste dai utents",
+'localtime'	=> 'Ore locâl',
+'lockbtn' => "Bloche base di dâts",
+'lockdb' => "Bloche base di dâts",
+'log'		=> 'Regjistris',
+'logempty' => 'Nissun element corispondint tal regjistri.',
+'login' => "Jentre",
+'loginerror' => "Erôr te jentrade",
+'loginpagetitle' => "Jentrade dal utent",
+'loginprompt'	=> 'Tu âs di vê abilitâts i cookies par jentrâ in {{SITENAME}}.',
+'loginreqtitle'	=> 'Si scugne jentrâ',
+'loginreqlink' => 'jentrâ',
+'loginreqpagetext'	=> 'Tu scugnis $1 par viodi lis altris pagjinis.',
+'loginsuccess' => "Cumò tu sês jentrât te {{SITENAME}} sicu \"$1\".",
+'loginsuccesstitle' => "Jentrât cun sucès",
+'logout' => "Jes",
+'logouttitle'	=> 'Jessude dal utent',
+'logouttext'	=> '<strong>Tu sâs cumò lât fûr.</strong><br />Tu puedis continuâ a doprâ {{SITENAME}} come anonim, o tu puedis jentrâ cul stes o cuntun altri non utent. Note che cualchi pagjine e pues mostrâti ancjemò come jentrât tal sît fin cuant che no tu netis la cache dal sgarfadôr.',
+'lonelypages'	=> 'Pagjinis solitaris',
+'longpagewarning' => "<strong>ATENZION: cheste pagjine e je grande $1 kilobytes; cualchi sgarfadôr al podarès vê problemis a modificâ pagjinis di 32kb o plui grandis. Considere par plasê la pussibilitât di dividi la pagjine in sezions plui piçulis.</strong>",
+'longpages'		=> 'Pagjinis lungjis',
+'mailmypassword' 	=> "Mandimi une gnove peraule clâf",
+'mainpage' => "Pagjine principâl",
+'mainpagetext'	=> "'''MediaWiki e je stade instalade cun sucès.'''",
+'march'			=> 'Març',
+'matchtotals'	=> "La ricercje \"$1\" e à cjatât $2 titui di pagjinis e il test di $3 pagjinis.",
+'math'			=> 'Matematiche',
+'math_sample'=>'Inserìs la formule culì',
+'math_tip'=>'Formule matematiche (LaTeX)',
+'may' => "Mai",
+'may_long' => "Mai",
+'media_sample' => "Esempli.mp3",
+'media_tip' => "Leam a un file multimediâl",
+'minlength' => "Il non di une figure al à di jessi lunc al mancul trê letaris.",
+'minoredit' => "Cheste al è un piçul cambiament",
+'minoreditletter' => "p",
+'mimesearch' => 'Ricercje MIME',
+'mimetype' => 'Gjenar MIME:',
+'missingimage'		=> "<b>Figure mancjante</b><br /><i>$1</i>",
+'monday' => "Lunis",
+'monobook.css' => '/* modifiche chest file par personalizâ la skin monobook par dut il sît */',
+'moredotdotdot'	=> 'Plui...',
+'mostlinked'	=> 'Pagjinis a cui pontin il maiôr numar di leams',
+'mostlinkedcategories' => 'Categoriis a cui pontin il maiôr numar di leams',
+'mostcategories' => 'Vôs cul maiôr numar di categoriis',
+'mostimages'	=> 'Figuris a cui pontin il maiôr numar di leams',
+'mostrevisions' => 'Vôs cul maiôr numar di revisions',
+'move' => "Môf",
+'movearticle' => "Môf la vôs",
+'movedto' => "Movude in",
+'movelogpage' => 'Regjistri des pagjinis movudis',
+'movelogpagetext' => 'Ca sot e je une liste des pagjinis movudis.',
+'movenologin' => "No tu sês jentrât",
+'movenologintext' => "Tu âs di jessi un utent regjistrât e <a href=\"{{localurl:Special:Userlogin}}\">jentrât</a> par movi une pagjine.",
+'movepage' => "Môf pagjine",
+'movepagetext'	=> 'Cun il formulari ca sot tu puedis gambiâ il non a une pagjine, movint dut il sô storic al gnûf non.
+Il vieri titul al deventarà une pagjine di reindirizament al gnûf titul. I leams ae vecje pagjine no saran gambiâts; verifiche
+par plasê che no sedin reindirizaments doplis o no funzionants.
+Tu sês responsabil che i leams a continui a mandâ tal puest just.
+
+Note che la pagjine \'\'\'no\'\'\' sarà movude se e je za une pagjine cul gnûf titul, a mancul che no sedi vueide o un reindirizament e
+cence un storic. Chest al vûl dî che tu puedis tornâ a movi la pagjine tal titul precedent, se
+tu \'nd âs sbaliât e che no tu puedis sorescrivi une pagjine esistìnte.
+
+<b>ATENZION!</b>
+Chest al pues jessi un cambiament drastic e surprendint par une pagjine popolâr;
+tu âs di cognossi lis conseguencis prime di lâ indevant.',
+'movepagebtn' => "Môf pagjine",
+'movereason'	=> 'Reson',
+'movetalk'		=> 'Môf ancje la pagjine di discussion, se pussibil.',
+'movethispage' => "Môf cheste pagjine",
+'mw_math_png' => 'Torne simpri PNG',
+'mw_math_simple' => 'HTML se une vore sempliç, se no PNG',
+'mw_math_html' => 'HTML se pussibil se no PNG',
+'mw_math_source' => 'Lassile come TeX (par sgarfadôrs testuâi)',
+'mw_math_modern' => 'Racomandât pai sgarfadôrs testuâi',
+'mw_math_mathml' => 'MathML se pussibil (sperimentâl)',
+'mycontris' => "Miei contribûts",
+'mypage' => "Mê pagjine",
+'mytalk' => "Mês discussions",
+'navigation' => "somari",
+'nbytes' => "$1 bytes",
+'namespace' => 'Non dal spazi:',
+'namespacesall' => 'ducj',
+'newarticle' => "(Gnûf)",
+'newarticletext' => "Tu âs seguît un leam a une pagjine che no esist ancjemò. Par creâ une pagjine, scomence a scrivi tal spazi ca sot (cjale il [[{{MediaWiki:helppage}}|jutori]] par altris informazions). Se tu sês ca par erôr, frache semplicementri il boton '''Indaûr''' dal to sgarfadôr.",
+'newimages' => "Galarie dai gnûfs files",
+'newmessagesdifflink' => 'difarencis cu la penultime revision',
+'newmessageslink' => 'gnûfs messaçs',
+'newpage' => "Gnove pagjine",
+'newpageletter' => "G",
+'newpages' => "Gnovis pagjinis",
+'newpassword'	=> 'Gnove peraule clâf',
+'newtitle' => "Al gnûf titul",
+'newwindow' => "(al vierç un gnûf barcon)",
+'nextdiff' => "Prossime difarence &rarr;",
+'next'			=> 'prossim',
+'nextn'			=> "prossims $1",
+'nextpage'          => 'Prossime pagjine ($1)',
+'nlinks' => "$1 leams",
+'noarticletext' => "(Par cumò nol è nuie in cheste pagjine)",
+'noconnect'		=> 'Nus displâs, ma il sît al à al moment cualchi dificoltât tecniche e nol pues conetisi al servidôr de base di dâts. <br />$1',
+'nocontribs'    => 'Nissun cambiament che al rispiete chescj criteris cjatât.',
+'nocookiesnew'	=> 'L\'identitât utent e je stade creade, ma no tu sês jentrât. {{SITENAME}} al dopre i cookies par visâsi dai utents, e tu tu ju âs disabilitâts. Par plasê abilitiju, dopo jentre cul to gnûf non utent e password.',
+'nocookieslogin'	=> '{{SITENAME}} e dopre i cookies par visâsi dai utents, e tu tu ju âs disabilitâts. Par plasê abilitiju e torne a provâ.',
+'nocredits' => 'Nissune informazion sui ricognossiments disponibil par cheste pagjine.',
+'nodb'			=> 'No si pues selezionâ la base di dâts $1',
+'noemail' => 'Nissune direzion email regjistrade par l\'utent "$1".',
+'noemailtitle'	=> 'Nissune direzion email',
+'noemailprefs'   => '<strong>Specifiche une direzion email par fâ lâ cheste funzion.</strong>',
+'noemailtext'	=> 'Chest utent nol à specificât une direzion di pueste valide o al à sielzût di no ricevi pueste di altris utents.',
+'noexactmatch' => "'''No esist une pagjine cul titul \"$1\".''' Tu podaressis [[:$1|creâle tu]].",
+'nohistory' => "Nol è presint un storic dai cambiaments par cheste pagjine.",
+'noimages' => "Nuie di viodi.",
+'nolinkshere' => "Nissune pagjine e à leams a cheste vôs",
+'nolinkstoimage' => 'No son pagjinis leadis a chest file.',
+'nologin'	=> 'No tu âs ancjemò une identitât par jentrâ? $1.',
+'nologinlink'	=> 'Creile cumò',
+'noname'		=> 'No tu âs inserît un non utent valit.',
+'notextmatches'	=> 'Nissune corispondence tal test des pagjinis',
+'notitlematches' => 'Nissune corispondence tai titui des pagjinis',
+'nowatchlist'		=> 'No tu stâs tignint di voli nissun element.',
+'nowiki_sample'=> 'Inserìs test no formatât culì',
+'nowiki_tip'=> 'Ignore la formatazion wiki',
+'nov' => "Nov",
+'november' => "Novembar",
+'nowatchlist' => "Nissun element al è tignût di voli.",
+'nstab-category' => "Categorie",
+'nstab-help' => "Jutori",
+'nstab-image' => "Figure",
+'nstab-main' => "Vôs",
+'nstab-media' => "Media",
+'nstab-mediawiki' => "Messaç",
+'nstab-special' => "Speciâl",
+'nstab-template' => "Model",
+'nstab-user' => "Pagjine dal utent",
+'nstab-project' => "Informazions",
+'numauthors' => 'Numar di autôrs diviers (vôs): $1',
+'numedits' => 'Numar di cambiaments (vôs): $1',
+'numtalkauthors' => 'Numar di autôrs diviers (pagjine di discussion): $1',
+'numtalkedits' => 'Numar di cambiaments (pagjine di discussion): $1',
+'numwatchers' => 'Numar di chei che e àn cjalât: $1',
+'oct' => "Otu",
+'october' => "Otubar",
+'ok' => "OK",
+'oldpassword'	=> 'Vecje peraule clâf',
+'orig' => "orig",
+'othercontribs' => 'Basât sul lavôr di $1.',
+'otherlanguages' => "Altris lenghis",
+'others' => 'altris',
+'pagecategories' => "Categoriis",
+'pagemovedsub'	=> 'Movude cun sucès',
+'pagemovedtext' => "Pagjine \"[[$1]]\" movude in \"[[$2]]\".",
+'passwordtooshort' => "La tô peraule clâf e je masse curte, e à di jessi lungje almancul $1 caratars.",
+'permalink'     => 'Leam permanent',
+'personaltools' => 'Imprescj personâi',
+'popularpages'	=> 'Pagjinis popolârs',
+'postcomment'   => 'Zonte un coment',
+'portal' => "Ostarie",
+'portal-url' => "{{ns:project}}:Ostarie",
+'powersearch' => "Cîr",
+'powersearchtext' => "
+Cîr tai nons dai spazis :<br />
+$1<br />
+$2 Liste redirezions &nbsp; Cîr $3 $9",
+'preferences' => "Preferencis",
+'prefs-personal' => 'Dâts utents',
+'prefs-rc' => 'Ultins cambiaments & stubs',
+'prefs-misc' => 'Variis',
+'prefs-help-realname' 	=> "* Non vêr (opzionâl): se tu sielzis di inserîlu al vignarà doprât par dâti un ricognossiment dal tô lavôr.",
+'prefs-help-email-enotif' => 'Cheste direzion e ven ancje doprade par inviâti un messaç di notifiche se tu âs ativât chê opzion.',
+'prefs-help-email'      => "* Email (opzionâl): Permet ai altris di contatâti vie la to pagjine utent o di discussion cence scugnî mostrâ a ducj la tô identitât.",
+'prefs-watchlist' => 'Tignudis di voli',
+'prefs-watchlist-days' => 'Numar di zornadis di mostrâ inte liste des pagjinis tignudis di voli:',
+'prefs-watchlist-edits' => 'Numar di modifichis di mostrâ inte liste slargjade:',
+'prevn'			=> "precedents $1",
+'preview' => "Anteprime",
+'previewnote' => "Visiti che cheste e je dome une anteprime, e no je stade ancjemò salvade!",
+'previousdiff' => "&larr; Difarence precedente",
+'printableversion' => "Version stampabil",
+'privacy' => 'Politiche pe privacy',
+'privacypage' => 'Project:Politiche_pe_privacy',
+'protect' => "Protêç",
+'protectcomment' => "Reson pe protezion",
+'protectedarticle' => "$1 protezût",
+'protectedpage' => "Pagjine protezude",
+# problem with link: [[Project:Pagjinis protezudis]]
+'protectedtext' => "Cheste pagjine e je stade blocade par prevignî cambiaments; a son
+diviersis resons par chest fat, cjale par plasê
+[[Project:Pagjinis protezudis]].
+
+Tu puedis instès viodi e copiâ la risultive di cheste pagjine:",
+'protectmoveonly' => "Protêç dome dai spostaments",
+'protectsub' => "(Protezint \"$1\")",
+'protectthispage' => "Protêç cheste pagjine",
+'qbbrowse' => "Sgarfe",
+'qbedit' => "Cambie",
+'qbfind' => "Cjate",
+'qbmyoptions'	=> "Mês pagjinis",
+'qbpageinfo'	=> "Contest",
+'qbpageoptions' => "Cheste pagjine",
+'qbsettings' => "Sbare svelte",
+'qbsettings-none'	=> 'Nissune',
+'qbsettings-fixedleft'	=> 'Fis a Çampe',
+'qbsettings-fixedright'	=> 'Fis a Drete',
+'qbsettings-floatingleft'	=> 'Flutuant a çampe',
+'qbspecialpages' => "Pagjinis speciâls",
+'randompage' => "Une pagjine a câs",
+'rclinks' => "Mostre i ultins $1 cambiaments tes ultimis $2 zornadis<br />$3",
+'rclistfrom' => "Mostre i ultins cambiaments dal $1",
+'rcnote' => "Ca sot tu cjatis i ultins <strong>$1</strong> cambiaments tes ultimis <strong>$2</strong> zornadis.",
+'rcshowhidebots' => '$1 bots',
+'rcshowhideliu' => '$1 utents jentrâts',
+'rcshowhideanons' => '$1 utents anonims',
+'rcshowhidepatr' => '$1 cambiaments verificâts',
+'rcshowhidemine' => '$1 miei cambiaments',
+'readonlytext'		=> 'La base di dâts pal moment e je blocade e no si puedin zontâ vôs e fâ modifichis, probabilmentri pe normâl manutenzion de base di dâts, daspò de cuâl dut al tornarà normâl.
+
+L\'aministradôr ch\'al à metût il bloc al à scrit cheste motivazion: $1',
+'recentchanges' => "Ultins cambiaments",
+'recentchangesall' => 'ducj',
+'recentchangescount' => "Numar di titui tai ultins cambiaments",
+'recentchangeslinked' => "Cambiaments leâts",
+'recentchangestext' => "Cheste pagjine e mostre i plui recents cambiaments inte {{SITENAME}}.",
+'rclsub'		=> "(aes pagjinis leadis di \"$1\")",
+'redirectedfrom' => "(Inviât ca di $1)",
+'redirectpagesub' => 'Pagjine di redirezion',
+'remembermypassword' => "Visiti di me",
+'removedwatch'		=> 'Gjavade de liste',
+'removedwatchtext' 	=> "La pagjine \"$1\" e je stade gjavade de liste di chês tignudis di voli.",
+'resetprefs'	=> 'Predeterminât',
+'restorelink' => "$1 modifichis eliminadis",
+'restrictedpheading'	=> 'Pagjinis speciâls cun restrizions',
+'restriction-edit' => 'Cambie',
+'restriction-move' => 'Spostament',
+'resultsperpage' => 'Risultâts par pagjine',
+'retrievedfrom' => "Cjapât fûr di $1",
+'returnto' => "Torne a $1.",
+'retypenew'		=> 'Torne a scrivi chê gnove',
+'reupload' => "Torne a cjamâ sù",
+'revertimg' => "rip",
+'revertmove'	=> 'ripristine',
+'revhistory' => "Storic des revisions",
+'rows' => "Riis",
+'saturday' => "Sabide",
+'savearticle' => "Salve la pagjine",
+'savedprefs' => "Lis preferencis a son stadis salvadis",
+'savefile' => "Salve file",
+'saveprefs' => "Salve lis preferencis",
+'scarytranscludedisabled' => '[Inclusion dai interwikis no ative]',
+'scarytranscludefailed' => '[Recupar dal model falît par $1; o si scusin]',
+'scarytranscludetoolong' => '[URL masse lungje; o si scusin]',
+'search' => "Cîr",
+'searchbutton' => "Cîr",
+'searchdisabled' => 'La ricercje in {{SITENAME}} no je ative. Tu puedis doprâ Google intant. Sta atent che i lôr indis sul contignût di {{SITENAME}} a puedin jessi pôc inzornâts.',
+'searchresults' => "Risultâts de ricercje",
+'searchresulttext' => "Par plui informazions su lis ricercjis in {{SITENAME}}, cjale [[{{MediaWiki:helppage}}|{{int:help}}]].",
+'searchsubtitle'	=> "Pal test \"[[:$1]]\"",
+'searchsubtitleinvalid'	=> "Pal test \"$1\"",
+'sep' => "Set",
+'september' => "Setembar",
+'servertime'	=> 'Ore servidôr',
+'sharedupload' => 'Chest file al è condivîs e al pues jessi doprât di altris progjets.',
+'shareduploadwiki' => 'Cjale par plasê la [pagjine di descrizion dal file $1] par altris informazions.',
+'shortpages'	=> 'Pagjinis curtis',
+'show' => "mostre",
+'showbigimage' => "Discjame version a alte risoluzion ($1x$2, $3 KB)",
+'showdiff'	=> 'Mostre cambiaments',
+'showingresults' => "Ca sot a son fin a <b>$1</b> risultâts scomençant dal #<b>$2</b>.",
+'showingresultsnum' => "Ca sot a son <b>$3</b> risultâts scomençant dal #<b>$2</b>.",
+'showlast'		=> "Mostre i ultins $1 files ordenâts $2.",
+'showpreview' => "Mostre anteprime",
+'showtoc' => "mostre",
+'sig_tip' => "La tô firme cun ore e date",
+'sitestats' => "Statistichis dal sît",
+'sitestatstext' => "Tu puedis cjatâ in dut '''$1''' pagjine inte base di dâts.
+Chest numar al inclût pagjinis \"discussion\", pagjinis su la {{SITENAME}}, pagjinis cun pocjis peraulis, reindirizaments, e altris che probabilmentri no si puedin considerâ pardabon come pagjinis di contignût.
+Gjavant chestis, o vin '''$2''' pagjinis che a son probabilmentri pagjinis di contignût legjitimis.
+
+'''$8''' files a son stâts cjamâts sù.
+
+O vin vût in dut '''$3''' viodudis de pagjinis e '''$4''' cambiaments aes pagjinis di cuant che la wiki e je stade implantade.
+Chest al vûl dî une medie di '''$5''' cambiaments par pagjine, e '''$6''' viodudis par ogni cambiament.",
+'sitesupport' => 'Doninus',
+'sitesupport-url' => 'Project:Supuarte il sît',
+'siteuser' => 'Utent $1 di {{SITENAME}}',
+'siteusers' => 'Utents  $1 di {{SITENAME}}',
+'skin'			=> 'Mascare',
+'skinpreview' => '(Anteprime)',
+'sourcefilename' => 'Non dal file origjinâl',
+'specialloguserlabel' => "Utent:",
+'speciallogtitlelabel' => "Titul:",
+'specialpage' => "Pagjine speciâl",
+'specialpages' => "Pagjinis speciâls",
+'spheading'		=> 'Pagjinis speciâls par ducj i utents',
+'statistics' => "Statistichis",
+'subcategories' => "Sot categoriis",
+'successfulupload' => "Cjamât sù cun sucès",
+'summary' => "Somari",
+'sunday' => "Domenie",
+'tagline' => "Di {{SITENAME}}",
+'talk' => "Discussion",
+'talkexists'	=> "'''La pagjine e je stade movude cun sucès, ma no si à podût movi la pagjine di discussion parcè che e esist za tal gnûf titul. Trasferìs il contignût a man par plasê.'''",
+'talkpage' => "Fevelin di cheste pagjine",
+'talkpagemoved' => "Ancje la pagjine di discussion corispondente e je stade movude.",
+'talkpagenotmoved' => "La pagjine di discussion corispondente <strong>no</strong> je stade movude.",
+'templatesused' => "Modei doprâts par cheste pagjine:",
+'textboxsize' => "Cambiament",
+'textmatches'	=> 'Corispondencis tal test des pagjinis',
+'thisisdeleted' => "Vuelistu cjalâ o ripristinâ $1?",
+'thumbnail-more' => "Slargje",
+'thumbnail_error'   => 'Erôr inte creazion de miniature: $1',
+'thumbsize'	=> 'Dimension miniature:',
+'thursday' => "Joibe",
+'timezonelegend' => "Fûs orari",
+'timezonetext'	=> 'Il numar di oris di diference rispiet ae ore dal servidôr (UTC).',
+'titlematches'	=> 'Corispondencis tai titui des pagjinis',
+'toc' => "Indis",
+'tog-highlightbroken' => 'Mostre leams sbaliâts <a href="" class="new">cussì</a> (invezit di cussì<a href="" class="internal">?</a>).',
+'tog-justify'	=> 'Justifiche paragraf',
+'tog-hideminor' => 'Plate lis piçulis modifichis tai ultins cambiaments',
+'tog-usenewrc' => 'Ultins cambiaments avanzâts (JavaScript)',
+'tog-numberheadings' => 'Numerazion automatiche dai titui',
+'tog-editondblclick' => 'Cambie lis pagjinis fracant dôs voltis (JavaScript)',
+'tog-editsection'		=> 'Inserìs un leam [cambie] pe editazion veloç di une sezion',
+'tog-editsectiononrightclick'	=> 'Modifiche une sezion fracant cul tast diestri<br /> sui titui des sezions (JavaScript)',
+'tog-showtoc'			=> 'Mostre indis (par pagjinis cun plui di 3 sezions)',
+'tog-editwidth' => 'Il spazi pe modifiche al è larc il plui pussibil',
+'tog-minordefault' => 'Imposte come opzion predeterminade ducj i cambiaments come piçui',
+'tog-previewontop' => 'Mostre anteprime parsore dal spazi pe modifiche',
+'tog-previewonfirst' => 'Mostre anteprime te prime modifiche',
+'tog-nocache' => 'No stâ tignî in memorie (caching) lis pagjinis',
+'tog-enotifwatchlistpages' 	=> 'Mandimi une email se la pagjine e gambie',
+'tog-enotifusertalkpages' 	=> 'Mandimi une email cuant che la mê pagjine di discussion e gambie',
+'tog-enotifminoredits' 		=> 'Mandimi une email ancje pai piçui cambiaments ae pagjine',
+'tog-enotifrevealaddr' 		=> 'Distapone fûr il gno recapit email tai messaçs di notifiche',
+'tog-shownumberswatching' 	=> 'Mostre il numar di utents che a stan tignint di voli',
+'tog-fancysig' => 'Firmis crudis (cence leam automatic)',
+'tog-externaleditor' => 'Dopre editôr esterni come opzion predeterminade',
+'tog-externaldiff' => 'Dopre editôr difarencis esterni come opzion predeterminade',
+'tog-rememberpassword' => 'Visiti tes prossimis sessions',
+'tog-showtoolbar'		=> 'Mostre sbare dai imprescj pe modifiche (JavaScript)',
+'tog-underline' => 'Sotlinee leams',
+'tog-watchdefault' => 'Zonte in automatic lis pagjinis che o cambii inte liste di chês tignudis di voli',
+'toolbox' => "imprescj",
+'tooltip-compareselectedversions' => 'Viôt lis difarencis framieç lis dôs versions di cheste pagjine selezionadis.',
+'tooltip-diff' => 'Mostre i cambiaments che tu âs fat al test.',
+'tooltip-minoredit' => "Segne cheste come une piçul cambiament",
+'tooltip-preview' => "Anteprime dai tiei cambiaments, doprile par plasê prime di salvâ!",
+'tooltip-save' => "Salve i tiei cambiaments",
+'tooltip-search' => "Cîr in cheste wiki",
+'tooltip-watch' => "Zonte cheste pagjine ae liste di chês tignudis di voli",
+'tuesday' => "Martars",
+'ucnote'        => "Ca sot a son i ultins <b>$1</b> cambiaments dal utent tes ultimis <b>$2</b> zornadis.",
+'uclinks'       => "Viôt i ultins $1 cambiaments; viôt lis ultimis $2 zornadis.",
+'uctop' => " (su)",
+'uid'			=> 'ID utent:',
+'uncategorizedpages'	=> 'Pagjinis cence categorie',
+'uncategorizedcategories'	=> 'Categoriis cence categorie',
+'undelete_short' => 'Recupere $1 modifichis eliminadis',
+'underline-always' => "Simpri",
+'underline-never' => "Mai",
+'underline-default' => "Predeterminât dal sgarfadôr",
+'unusedimages'	=> 'Files no doprâts',
+'unusedtemplates' => 'Modei no doprâts',
+'unwatch' => 'No stâ tignî di voli',
+'unwatchthispage' 	=> 'No stâ tignî di voli plui',
+'updated' => "(Inzornât)",
+'updatedmarker' => 'inzornât de mê ultime visite',
+'upload' => "Cjame sù un file",
+'uploadbtn' => "Cjame sù un file",
+'uploaddisabled' => "Nus displâs, par cumò no si pues cjamâ sù robe.",
+'uploaddisabledtext' => 'Lis cjamadis a son disativâts su cheste wiki.',
+'uploadedfiles' => "Files cjamâts sù",
+'uploadedimage' => "cjamât sù \"$1\"",
+'uploaderror' => "Erôr cjamant sù",
+'uploadlog'		=> 'regjistri cjamâts sù',
+'uploadlogpagetext' => 'Ca sot e je une liste dai file cjamâts su di recent.',
+'uploadnologin' => 'No jentrât',
+'uploadtext'	=> "Dopre la form ca sot par cjamâ sù un file, par cjalâ o cirî i files cjamâts sù in precedence va te [[Special:Imagelist|liste dai files cjamâts sù]], lis cjamadis e lis eliminazions a son ancje regjistrâts tal [[Special:Log/upload|regjistri des cjamadis]].
+
+Par includi une figure intune pagjine, dopre un leam inte form
+'''<nowiki>[[</nowiki>{{ns:6}}<nowiki>:file.jpg]]</nowiki>''',
+'''<nowiki>[[</nowiki>{{ns:6}}<nowiki>:file.png|alt text]]</nowiki>''' or
+'''<nowiki>[[</nowiki>{{ns:-2}}<nowiki>:file.ogg]]</nowiki>''' par un leam diret al file.",
+'userexists'	=> "Il non utent inserît al è za doprât. Sielç par plasê un non diferent.",
+'userlogin' => "Regjistriti o jentre",
+'userlogout' => "Jes",
+'userpage' => "Cjale pagjine dal utent",
+'userstats' => "Statistichis dai utents",
+'userstatstext'  => "A son '''$1''' utents regjistrâts, di chescj '''$2''' (il '''$4%''') a son aministradôrs (cjale $3).",
+'version' => "Version",
+'viewcount' => "Cheste pagjine e je stade viodude $1 voltis.",
+'viewdeleted' => 'Vuelistu viodi $1?',
+'viewprevnext' => "Cjale ($1) ($2) ($3).",
+'viewsource' => "Cjale risultive",
+'wantedpages'	=> 'Pagjinis desideradis',
+'watch' => "Ten di voli",
+'watchlist' => "Tignûts di voli",
+'mywatchlist' => "Tignûts di voli",
+'watchlistall1' => "ducj",
+'watchlistall2' => "dutis",
+'watchlistcontains' => "Tu stâs tignint di voli $1 pagjinis.",
+'watchnochange' 	=> 'Nissun element di chei tignûts di voli al è stât cambiât tal periodi mostrât.',
+'watchdetails'		=> "* $1 pagjinis tignudis di voli cence contâ lis pagjinis di discussion
+* [[Special:Watchlist/edit|Mostre e modfiche la liste complete]]",
+'watchnologin'		=> 'No tu sês jentrât',
+'watchnologintext'	=> "Tu 'nd âs di [[Special:Userlogin|jentrâ]] par modificâ la liste des pagjinis tignudis di voli.",
+'watchthis' => "Ten di voli cheste pagjine",
+'watchthispage' => "Ten di voli cheste pagjine",
+'wednesday' => "Miercus",
+'welcomecreation' => "== Mandi e benvignût $1! ==
+
+La tô identitât e je stade creade. No stâ dismenteâti di gambiâ lis preferencis di {{SITENAME}}.",
+'whatlinkshere' => "Leams a cheste vôs",
+'projectpage' => "Cjale pagjine dal progjet",
+'wlheader-enotif' 		=> "* Notifiche par pueste eletroniche ativade.",
+'wlheader-showupdated'   => "* Lis pagjinis gambiadis de ultime volte che tu lis âs cjaladis a son mostradis in '''gruessut'''",
+'wlnote' 		=> 'Ca sot a son i ultins $1 cambiaments tes ultimis <b>$2</b> oris.',
+'wlshowlast' 		=> 'Mostre ultimis $1 oris $2 zornadis $3',
+'wlsaved'		=> 'Cheste e je une version salvade de liste da lis pagjinis tignudis di voli.',
+'wlhideshowown'   	=> '$1 i miei cambiaments.',
+'wrongpassword' => "La peraule clâf zontade no je juste. Torne par plasê a provâ.",
+'youhavenewmessages' => 'Tu âs $1 ($2).',
+'youhavenewmessagesmulti' => "Tu âs gnûfs messaçs su $1",
+'yourdiff' => "Difarencis",
+'youremail'		=> "Email *",
+'yourlanguage' => "Lenghe di mostrâ",
+'yourdomainname'       => 'Il to domini',
+'yourname'		=> 'Non utent',
+'yourpassword'	=> "Peraule clâf",
+'yourpasswordagain' => "Torne a scrivile",
+'yourrealname'		=> "Non vêr *",
+'yourvariant' => 'Varietât',
+);
+
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesFy.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesFy.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesFy.php	(revision 1280)
@@ -0,0 +1,877 @@
+<?php
+/** Frisian (Frysk)
+ *
+ * @addtogroup Language
+ *
+ */
+
+$skinNames = array(
+	'standard' => 'Standert',
+	'nostalgia' => 'Nostalgy',
+);
+
+$datePreferences = array(
+	'default',
+	'fy normal',
+	'ISO 8601',
+);
+
+$defaultDateFormat = 'fy normal';
+
+$dateFormats = array(
+	'fy normal time' => 'H.i',
+	'fy normal date' => 'j M Y',
+	'fy normal both' => 'j M Y, H.i',
+);
+
+$datePreferenceMigrationMap = array(
+	'default',
+	'fy normal',
+	'fy normal',
+	'fy normal',
+);
+
+$namespaceNames = array(
+	NS_MEDIA          => 'Media',
+	NS_SPECIAL        => 'Wiki',
+	NS_MAIN           => '',
+	NS_TALK           => 'Oerlis',
+	NS_USER           => 'Meidogger',
+	NS_USER_TALK      => 'Meidogger_oerlis',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK   => '$1_oerlis',
+	NS_IMAGE          => 'Ofbyld',
+	NS_IMAGE_TALK     => 'Ofbyld_oerlis',
+	NS_MEDIAWIKI      => 'MediaWiki',
+	NS_MEDIAWIKI_TALK => 'MediaWiki_oerlis',
+	NS_TEMPLATE       => 'Berjocht',
+	NS_TEMPLATE_TALK  => 'Berjocht_oerlis',
+	NS_HELP           => 'Hulp',
+	NS_HELP_TALK      => 'Hulp_oerlis',
+	NS_CATEGORY       => 'Kategory',
+	NS_CATEGORY_TALK  => 'Kategory_oerlis'
+);
+
+$namespaceAliases = array(
+	'Brûker' => NS_USER,
+	'Brûker_oerlis' => NS_USER_TALK,
+);
+
+$separatorTransformTable = array(',' => '.', '.' => ',' );
+$linkTrail = '/^([a-zàáèéìíòóùúâêîôûäëïöü]+)(.*)$/sDu';
+
+
+$messages = array(
+# User Toggles
+
+"tog-underline"		=> "Keppelings ûnderstreekje",
+"tog-highlightbroken"	=> "Keppelings nei lege siden ta <a href=\"\" class=\"new\">read</a> (oars mei in fraachteken<a href=\"\" class=\"internal\">?</a>).",
+"tog-justify"		=> "Paragrafen útfolje",
+"tog-hideminor"		=> "Tekstwizigings wei litte út 'Koarts feroare'",
+"tog-usenewrc"		=> "Utwreide ferzje fan 'Koarts feroare' brûke (net mei alle blêdzjers mooglik)",
+"tog-numberheadings"	=> "Koppen fansels nûmerje",
+"tog-showtoolbar" => "Show edit toolbar",
+"tog-editondblclick"	=> "Dûbelklik jout bewurkingsside (freget JavaScript)",
+"tog-editsection"	=> "Jou [bewurk]-keppelings foar seksjebewurking",
+"tog-editsectiononrightclick" => "Rjochtsklik op sekjsetitels jout seksjebewurking (freget JavaScript)",
+"tog-showtoc"		=> "Ynhâldsopjefte, foar siden mei mear as twa koppen",
+"tog-rememberpassword" => "Oare kear fansels oanmelde",
+"tog-editwidth"		=> "Bewurkingsfjild sa breed as de side",
+"tog-watchdefault"	=> "Sides dy't jo feroare hawwe folgje",
+"tog-minordefault"	=> "Feroarings yn it earst oanjaan as tekstwizigings.",
+"tog-previewontop"	=> "By it neisjen, bewurkingsfjild ûnderoan sette",
+"tog-nocache"		=> "Gjin oerslag brûke",
+# Dates
+'sunday' => 'snein',
+'monday' => 'moandei',
+'tuesday' => 'tiisdei',
+'wednesday' => 'woansdei',
+'thursday' => 'tongersdei',
+'friday' => 'freed',
+'saturday' => 'sneon',
+'january' => 'jannewaris',
+'february' => 'febrewaris',
+'march' => 'maart',
+'april' => 'april',
+'may_long' => 'maaie',
+'june' => 'juny',
+'july' => 'july',
+'august' => 'augustus',
+'september' => 'septimber',
+'october' => 'oktober',
+'november' => 'novimber',
+'december' => 'decimber',
+'jan' => 'jan',
+'feb' => 'feb',
+'mar' => 'mar',
+'apr' => 'apr',
+'may' => 'mai',
+'jun' => 'jun',
+'jul' => 'jul',
+'aug' => 'aug',
+'sep' => 'sep',
+'oct' => 'okt',
+'nov' => 'nov',
+'dec' => 'dec',
+
+
+# Bits of text used by many pages:
+#
+"mainpage"		=> "Haadside",
+"mainpagetext"	=> "Wiki-programma goed installearre.",
+"about"		=> "Ynfo",
+"aboutsite"      	=> "Oer de {{SITENAME}}",
+"aboutpage"		=> "{{ns:project}}:Ynfo",
+"help"		=> "Help",
+"helppage"		=> "{{ns:project}}:Help",
+"bugreports"	=> "Brekmelding",
+"bugreportspage"	=> "{{ns:project}}:Brekmelding",
+"faq"			=> "FAQ",
+"faqpage"		=> "{{ns:project}}:FAQ",
+"edithelp"		=> "Siden bewurkje",
+"edithelppage"	=> "{{ns:project}}:Bewurk-rie",
+"cancel"		=> "Ferlitte",
+"qbfind"		=> "Sykje",
+"qbbrowse"		=> "Blêdzje",
+"qbedit"		=> "Bewurkje",
+"qbpageoptions" 	=> "Side-opsjes",
+"qbpageinfo"	=> "Side-ynfo",
+"qbmyoptions"	=> "Myn Opsjes",
+"mypage"		=> "Myn side",
+"mytalk"		=> "Myn oerlis",
+"currentevents" 	=> "Hjoeddeis",
+"errorpagetitle" 	=> "Fout",
+"returnto"		=> "Werom nei \"$1\".",
+"whatlinkshere"	=> "Siden mei in keppeling hjirhinne",
+"help"		=> "Help",
+"search"		=> "Sykje",
+"searchbutton"	=> "Sykje",
+"go"			=> "Side",
+'searcharticle'			=> "Side",
+"history"		=> "Sideskiednis",
+"printableversion" => "Ofdruk-ferzje",
+"editthispage"	=> "Side bewurkje",
+"deletethispage" 	=> "Side wiskje",
+"protectthispage" => "Side beskermje",
+"newpage" 		=> "Nije side",
+"talkpage"		=> "Sideoerlis",
+"postcomment"   	=> "Skrieuw in opmerking",
+"articlepage"	=> "Side lêze",
+"userpage" 		=> "Brûkerside",
+"projectpage" 	=> "Metaside",
+"imagepage" 	=> "Ofbyldside",
+"viewtalkpage" 	=> "Oerlisside",
+"otherlanguages" 	=> "Oare talen",
+"redirectedfrom" 	=> "(Trochwiisd fan \"$1\")",
+"lastmodifiedat"	=> "Lêste kear bewurke op $2, $1.",
+"viewcount"		=> "Disse side is $1 kear iepenslein.",
+"protectedpage" 	=> "Beskerme side",
+"nbytes"		=> "$1 byte",
+"ok"			=> "Goed",
+"retrievedfrom" 	=> "Untfongen fan \"$1\"",
+"editsection"	=> "edit",
+"editold"	=> "edit",
+"toc" 		=> "Ynhâld",
+"showtoc" 		=> "sjen litte",
+"hidetoc" 		=> "net sjen litte",
+"thisisdeleted"	=> "\"$1\" lêze of werombringje?",
+"restorelink" 	=> "$1 wiske ferzjes",
+
+# Main script and global functions
+#
+"nosuchaction"	=> "Unbekende aksje.",
+"nosuchactiontext" => "De aksje dy't jo oanjoegen fia de URL is net bekind by it Wiki-programma",
+"nosuchspecialpage" => "Unbekende side",
+"nospecialpagetext" => "Jo hawwe in Wiki-side opfrege dy't net bekind is by it Wiki-programma.",
+
+
+# General errors
+#
+"error"			=> "Fout",
+"databaseerror" 		=> "Databankfout",
+"dberrortext"		=> "Sinboufout in databankfraach.
+De lêst besochte databankfraach wie:
+<blockquote><tt>$1</tt></blockquote>
+fan funksje \"<tt>$2</tt>\" út.
+MySQL joech fout \"<tt>$3: $4</tt>\" werom.",
+
+"dberrortextcl" 		=> "Sinboufout in databankfraach.
+De lêst besochte databankfraach wie:
+\"$1\"
+fan funksje \"$2\" út.
+MySQL joech fout \"<tt>$3: $4</tt>\" werom.",
+
+"noconnect"			=> "Sorry! Troch in fout yn de technyk, kin de Wiki gjin ferbining meitsje mei de databanktsjinner.",
+"nodb"			=> "Kin databank \"$1\" net berikke.",
+"cachederror"		=> "Dit is in ferzje út de oerslag, mar it kin wêze dat dy ferâldere is.",
+"readonly"			=> "Databank is Net-skriuwe",
+"enterlockreason" 	=> "Skriuw wêrom de databank net-skriuwe makke is,
+en sawat hoenear't de men wêr skriuwe kin",
+"readonlytext"	=> "De {{SITENAME}} databank is ôfsletten foar nije siden en oare wizigings,
+nei alle gedachten is it foar ûnderhâld, en kinne jo der letter gewoan wer brûk fan meitsje.
+De behearder hat dizze útlis joen:
+<p>$1</p>",
+
+# problem with link: [[{{ns:project}}:Brekmelding|behearder]]
+"missingarticle" 		=> "De databank kin in side net fine, nammentlik: \"$1\".
+<p>Faak is dit om't in âlde ferskil-, of skiednisside opfreege wurdt fan in side dy't wiske is.
+<p>As dat it hjir net is, dan hawwe jo faaks in brek yn it programa fûn.
+Jou dat asjebleaft troch oan de [[{{ns:project}}:Brekmelding|behearder]], tegearre mei de URL.",
+
+"internalerror" 		=> "Ynwindige fout",
+"filecopyerror" 		=> "Koe bestân \"$1\" net kopiearje as \"$2\".",
+"filerenameerror" 	=> "Koe bestân \"$1\" net werneame as \"$2\".",
+"filedeleteerror" 	=> "Koe bestân \"$1\" net wiskje.",
+"filenotfound"		=> "Koe bestân \"$1\" net fine.",
+"unexpected"		=> "Hommelse wearde: \"$1\"=\"$2\".",
+"formerror"			=> "Fout: koe formulier net oerlizze",
+"badarticleerror" 	=> "Dit kin op dizze side net dien wurden.",
+"cannotdelete"		=> "Koe de oantsjutte side of ôfbyld net wiskje. (Faaks hat in oar dat al dien.)",
+"badtitle"			=> "Misse titel",
+"badtitletext"		=> "De opfreeche side titel wie ûnjildich, leech, of in
+miskeppele ynter-taal of ynter-wiki titel.",
+"perfdisabled" 		=> "Sorry! Dit ûnderdiel is tydlik út set om't it de databank sa starich makket
+dat gjinien de wiki brûke kin.",
+"perfdisabledsub" 	=> "Dit is in opsleine ferzje fan \"$1\":",
+
+
+# Login and logout pages
+#
+"logouttitle" 	=> "Ofmelde",
+"logouttext"	=> "Jo binne no ôfmeld.
+Jo kinne de {{SITENAME}} fierders anonym brûke,
+of jo op 'e nij [[{{ns:special}}:Userlogin|oanmelde]] ûnder in oare namme.",
+"welcomecreation" => "<h2>Wolkom, $1!</h2><p>Jo ynstellings bin oanmakke.
+Ferjit net se oan jo foarkar oan te passen.",
+
+"loginpagetitle" 	=> "Oanmelde",
+"yourname"  	=> "Jo brûkersnamme",
+"yourpassword" => "Jo wachtwurd",
+"yourpasswordagain" => "Jo wachtwurd (nochris)",
+"remembermypassword" => "Oare kear fansels oanmelde.",
+"loginproblem" 	=> "<b>Der wie wat mis mei jo oanmelden.</b><br />Besykje it nochris, a.j.w.",
+"alreadyloggedin" => "<strong>Brûker $1, jo binne al oanmeld!</strong><br />",
+"login"		=> "Oanmelde",
+"userlogin"		=> "Oanmelde",
+"logout"		=> "Ofmelde",
+"userlogout"	=> "Ofmelde",
+"notloggedin"	=> "Net oanmelde",
+"createaccount"	=> "Nije ynstelingd oanmeitsje",
+"badretype"		=> "De infierde wuchtwurden binne net lyk.",
+"userexists"	=> "Dy brûkersname wurdt al brûkt. Besykje in oarenien.",
+"youremail"		=> "Jo e-postadres (*).",
+"yournick"		=> "Jo alias (foar sinjaturen)",
+
+"loginerror"	=> "Oanmeldflater",
+"noname"		=> "Jo moatte in brûkersnamme opjaan.",
+"loginsuccesstitle" => "Oanmelden slagge.",
+"loginsuccess"	=> "Jo binne no oanmelde op de {{SITENAME}} as: $1.",
+"nosuchuser"	=> "Brûkersnamme en wachtwurd hearre net by elkoar.
+Besykje op 'e nij, of fier it wachtwurd twa kear yn en meitsje neie brûkersynstellings.",
+
+"wrongpassword"	=> "Brûkersnamme en wachtwurd hearre net by elkoar.
+Besykje op 'e nij, of fier it wachtwurd twa kear yn en meitsje neie brûkersynstellings.",
+
+"mailmypassword" 	=> "Stjoer my in nij wachtwurd.",
+"passwordremindertitle" => "Nij wachtwurd foar de {{SITENAME}}",
+"passwordremindertext" => "Immen (nei alle gedachten jo, fan Ynternet-adres $1)
+hat frege en stjoer jo in nij {{SITENAME}} wachtwurd.
+I wachtwurd foar brûker \"$2\" is no \"$3\".
+Meld jo no oan, en feroarje jo wachtwurd.",
+"noemail"		=> "Der is gjin e-postadres foar brûker \"$1\".",
+"passwordsent"	=> "In nij wachtwurd is tastjoert oan it e-postadres foar \"$1\".
+Please log in again after you receive it.",
+
+# Edit pages
+#
+"summary"		=> "Gearfetting",
+"subject"		=> "Mêd",
+"minoredit"		=> "Dit is in tekstwiziging",
+"watchthis"		=> "Folgje dizze side",
+"savearticle"	=> "Fêstlizze",
+"preview"		=> "Oerlêze",
+"showpreview"	=> "Oerlêze foar de side fêstlein is",
+"blockedtitle"	=> "Brûker is útsletten troch",
+"blockedtext"	=> "Jo brûkersname of Ynternet-adres is útsletten.
+As reden is opjûn:<br />''$2''<p>As jo wolle, kinne jo hjiroer kontakt op nimme meid de behearder.
+
+(Om't in Ynternet-adressen faak mar foar ien sessie tawiisd wurde, kin it wêze
+dat it eins gjit om in oar dy't deselde tagongferskaffer hat as jo hawwe. As it jo
+net betreft, besykje dan earst of it noch sa is as jo in skofke gjin
+Ynternet-ferbining hân hawwe. As it in probleem bliuwt, skriuw dan de behearder.
+Sorry, foar it ûngemak.)
+
+Jo Ynternet-adres is: $3. Nim dat op yn jo berjocht.
+
+Tink derom, dat \"skriuw nei dizze brûker\" allinich wol as jo in
+e-postadres opjûn hawwe in jo [[{{ns:special}}:Preferences|ynstellings]].",
+
+"newarticle"	=> "(Nij)",
+# problem with link: [[{{ns:project}}:Bewurk-rie|Mear ynformaasje oer bewurkjen]]
+"newarticletext" =>
+"Jo hawwe in keppeling folge nei in side dêr't noch gjin tekst op stiet.
+Om sels tekst te meistjsen kinne jo dy gewoan yntype in dit bewurkingsfjild
+([[{{ns:project}}:Bewurk-rie|Mear ynformaasje oer bewurkjen]].)
+Oars kinne jo tebek mei de tebek-knop fan jo blêdzjer.",
+
+"anontalkpagetext" => "---- ''Dit is de oerlisside fan in unbekinde brûker; in brûker
+dy't sich net oanmeld hat. Om't der gjin namme is wurd it Ynternet-adres brûkt om
+oan te jaan wa. Mar faak is it sa dat sa'n adres net altid troch deselde brûkt wurdt.
+As jo it idee hawwe dat jo as ûnbekinde brûker opmerkings foar in oar krije, dan kinne
+jo jo [[{{ns:special}}:Userlogin|oanmelde]], dat jo allinnich opmerkings foar josels krije.''",
+"noarticletext" => "(Der stjit noch gjin tekst op dizze side.)",
+"updated"		=> "(Bewurke)",
+"note"		=> "<strong>Opmerking:</strong>",
+"previewnote"	=> "Tink der om dat dizze side noch net fêstlein is!",
+"previewconflict" => "Dizze side belanget allinich it earste bewurkingsfjild oan.",
+"editing"		=> "Bewurkje \"$1\"",
+'editinguser'		=> "Bewurkje \"$1\"",
+//"editing"		=> "Bewurkje \"$1\" (seksje)",
+//"editing"		=> "Bewurkje \"$1\" (nije opmerking)",
+"editconflict"	=> "Tagelyk bewurke: \"$1\"",
+"explainconflict" => "In oar hat de side feroare sûnt jo begûn binne mei it bewurkjen.
+It earste bewurkingsfjild is hoe't de tekst wilens wurde is.
+Jo feroarings stean yn it twadde fjild.
+Dy wurde allinnich tapasse safier as jo se yn it earste fjild ynpasse.
+<b>Allinnich</b> de tekst út it earste fjild kin fêstlein wurde.<br />",
+"yourtext"		=> "Jo tekst",
+"storedversion" => "Fêstleine ferzje",
+"editingold"	=> "<strong>Waarskôging: Jo binne dwaande mei in âldere ferzje fan dizze side.
+Soenen jo dizze fêstlizze, dan is al wat sûnt dy tiid feroare is kwyt.</strong>",
+"yourdiff"		=> "Feroarings",
+/*"copyrightwarning" => "Alle bydragen ta de {{SITENAME}} wurde sjoen
+as fallend ûnder de GNU Iepen Dokumentaasje Lisinsje
+(sjoch fierders: \"$1\").
+As jo net wolle dat jo skriuwen ûnferbidlik oanpast en frij ferspraat wurdt,
+dan is it baas, en set it net op de {{SITENAME}}.<br />
+Jo ferklare ek dat jo dit sels skreaun hawwe, of it oernaam hawwe út in
+publyk eigendom of in oare iepen boarne.
+<strong><big>Foeg gjin wurk ûnder auteursrjocht ta sûnder tastimming!</big></strong>",*/
+"longpagewarning" => "<strong>Waarskôging: Dizze side is $1 kilobyte lang;
+der binne blêdzjers dy problemen hawwe mei siden fan tsjin de 32kb. of langer.
+Besykje de side yn lytsere stikken te brekken.</strong>",
+"readonlywarning" => "<strong>Waarskôging: De databank is ôfsletten foar
+ûnderhâld, dus jo kinne jo bewurkings no net fêstlizze.
+It wie baas en nim de tekst foar letter oer yn in tekstbestân.</strong>",
+# problem with link: [[Project:Beskerm-rie|rie oer beskerme siden]]
+"protectedpagewarning" => "<strong>Waarskôging: Dizze side is beskerme, dat
+gewoane brûkers dy net bewurkje kinne. Tink om de
+[[Project:Beskerm-rie|rie oer beskerme siden]].</strong>",
+
+# History pages
+#
+"revhistory"	=> "Sideskiednis",
+"nohistory"		=> "Dit is de earste ferzje fan de side.",
+"revnotfound"	=> "Ferzje net fûn",
+"revnotfoundtext" => "De âlde ferzje fan dizze side dêr't jo om frege hawwe, is der net.
+Gean nei of de keppeling dy jo brûkt hawwe wol goed is.",
+"loadhist"		=> "Sideskiednis ...",
+"currentrev"	=> "Dizze ferzje",
+"revisionasof"	=> "Ferzje op $1",
+"cur"			=> "no",
+"next"		=> "dan",
+"last"		=> "doe",
+"orig"		=> "ea",
+"histlegend"	=> "Utlis: (no) = ferskil mei de side sa't dy no is,
+(doe) = ferskill mei de side sa't er doe wie, foar de feroaring, T = Tekstwiziging",
+
+
+# Diffs
+#
+"difference"	=> "(Ferskil tusken ferzjes)",
+"loadingrev"	=> "Ferskil tusken ferzjes ...",
+"lineno"		=> "Rigel $1:",
+"editcurrent"	=> "Bewurk de hjoeddeistiche ferzje fan dizze side",
+
+# Search results
+#
+"searchresults" => "Sykresultaat",
+# problem with link: [[Project:Syk-rie|Ynformaasje oer it sykjen|Sykje troch de {{SITENAME}}]]
+"searchresulttext" => "\"[[Project:Syk-rie|Ynformaasje oer it sykjen|Sykje troch de {{SITENAME}}]]\" troch de {{SITENAME}}.",
+"searchsubtitle"	=> "Foar fraach \"[[:$1]]\"",
+"searchsubtitleinvalid"	=> "Foar fraach \"$1\"",
+"badquery"		=> "Misfoarme sykfraach",
+"badquerytext"	=> "Jo fraach koe net ferwurke wurde.
+Dit is faaks om't jo besyke hawwe en sykje in word fan ien of twa letters, wat it programma noch net kin.
+Of it soe kinne dat jo de fraach misskreaun hawwe, lykas \"frysk en en frei\". Besykje it nochris.",
+"matchtotals"	=> "Foar \"$1\" binne $2 titles fûn en $3 siden.",
+"noexactmatch" => "Der is gjin side mei krekt dizze titel. Faaks is it better en Sykje nei dizze tekst.",
+"titlematches"	=> "Titels",
+"notitlematches" => "Gjin titels",
+"textmatches"	=> "Siden",
+"notextmatches"	=> "Gjin siden",
+"prevn"		=> "foarige $1",
+"nextn"		=> "folgende $1",
+"viewprevnext"	=> "($1) ($2) ($3) besjen.",
+"showingresults"	=> "<b>$1</b> resultaten fan <b>$2</b> ôf.",
+"showingresultsnum" => "<b>$3</b> resultaten fan <b>$2</b> ôf.",
+"nonefound"		=> "As der gjin resultaten binne, tink der dan om dat der <b>net</b> socht
+wurde kin om wurden as \"it\" en \"in\", om't dy net byhâlden wurde, en dat as der mear
+wurden syke wurde, allinnich siden fûn wurde wêr't <b>alle</b> worden op fûn wurde.",
+
+"powersearch" => "Sykje",
+"powersearchtext" => "
+Sykje in nammeromten :<br />
+$1<br />
+$2 List trochferwizings &nbsp; Sykje nei \"$3\" \"$9\"",
+
+"searchdisabled" => "<p>Op it stuit stjit it trochsykjen fan tekst net oan, om't de
+tsjinner it net oankin. Mei't we nije apparatuer krije wurdt it nei alle gedanken wer
+mooglik. Foar now kinne jo sykje fia Google:</p>",
+
+
+
+# Preferences page
+#
+"preferences"		=> "Ynstellings",
+"prefsnologin" 		=> "Net oanmeld",
+"prefsnologintext"	=> "Jo moatte [[{{ns:special}}:Userlogin|oanmeld]] wêze om jo ynstellings te feroarjen.",
+
+"prefsreset"		=> "De ynstellings binne tebek set sa't se fêstlein wienen.",
+"qbsettings"		=> "Menu",
+'qbsettings-none'	=> 'Ut',
+'qbsettings-fixedleft'	=> 'Lofts fêst',
+'qbsettings-fixedright'	=> 'Rjochts fêst',
+'qbsettings-floatingleft'	=> 'Lofts sweevjend',
+'qbsettings-floatingright'	=> 'Rjochts sweevjend',
+"changepassword" 		=> "Wachtword feroarje",
+"skin"			=> "Side-oansjen",
+"math"			=> "Formules",
+"dateformat"		=> "Datum",
+'datedefault' => 'Gjin foarkar',
+"math_failure"		=> "Untsjutbere formule",
+"math_unknown_error"	=> "Unbekinde fout",
+"math_unknown_function"	=> "Unbekinde funksje",
+"math_lexing_error"	=> "Unbekind wurd",
+"math_syntax_error"	=> "Sinboufout",
+"saveprefs"			=> "Ynstellings fêstlizze",
+"resetprefs"		=> "Ynstellings tebek sette",
+"oldpassword"		=> "Ald wachtwurd",
+"newpassword"		=> "Nij wachtwurd",
+"retypenew"			=> "Nij wachtwurd (nochris)",
+"textboxsize"		=> "Tekstfjid-omjittings",
+"rows"			=> "Rigen",
+"columns"			=> "Kolommen",
+"searchresultshead" 	=> "Sykje",
+"resultsperpage" 		=> "Treffers de side",
+"contextlines"		=> "Rigels inhâld de treffer",
+"contextchars"		=> "Tekens fan de inhâld de rigel",
+"stubthreshold" 		=> "Grins foar stobben",
+"recentchangescount" 	=> "Nûmer of titels op 'Koarts feroare'",
+"savedprefs"		=> "Jo ynstellings binne fêstlein.",
+"timezonetext"		=> "Jou it tal fan oeren dat jo tiidsône ferskilt fan UTC (Greenwich).",
+"localtime"			=> "Jo tiidsône",
+"timezoneoffset" 		=> "Ferskil",
+"servertime"		=> "UTC",
+"guesstimezone" 		=> "Freegje de blêdzjer",
+"defaultns"			=> "Nammeromten dy't normaal trochsykje wurde:",
+
+# Recent changes
+#
+"changes" 			=> "feroarings",
+"recentchanges" 		=> "Koarts feroare",
+"recentchangestext" 	=> "De lêste feroarings fan de {{SITENAME}}.",
+"rcnote"			=> "Dit binne de lêste <strong>$1</strong> feroarings yn de lêste <strong>$2</strong> dagen.",
+"rcnotefrom"		=> "Dit binne de feroarings sûnt <b>$2</b> (maksimaal <b>$1</b>).",
+"rclistfrom"		=> "Jou nije feroarings, begjinnende mei $1",
+"rclinks"			=> "Jou $1 nije feroarings yn de lêste $2 dagen; $3 tekstwiziging",
+"diff"			=> "ferskil",
+"hist"			=> "skiednis",
+"hide"			=> "gjin",
+"show"			=> "al",
+"minoreditletter" 	=> "T",
+"newpageletter" 		=> "N",
+
+# Upload
+#
+"upload"		=> "Bied bestân oan",
+"uploadbtn"		=> "Bied bestân oan",
+"reupload"		=> "Op 'e nij oanbiede",
+"reuploaddesc"	=> "Werom nei oanbied-side.",
+"uploadnologin" 	=> "Net oanmelde",
+"uploadnologintext" => "Jo moatte [[{{ns:special}}:Userlogin|oanmeld]] wêze om in bestân oanbieden te kinnen.",
+
+"uploaderror"	=> "Oanbied-fout",
+# problem with link: [[Project:Ofbyld-rie|regels foar ôfbyldbrûk]]
+"uploadtext"	=> "'''STOP!''' Lês ear't jo eat oanbiede
+de [[Project:Ofbyld-rie|regels foar ôfbyldbrûk]] foar de {{SITENAME}}.
+
+Earder oanbeane ôfbylden, kinne jo fine op de
+[[Special:Imagelist|list of oanbeane ôfbylden]].
+Wat oanbean en wat wiske wurdt, wurdt delskreaun yn it
+[[Special:Log/delete|lochboek]].
+
+Om't nije ôfbylden oan te bieden, kieze jo in bestân út sa't dat
+normaal is foar jo blêdzjer en bestjoersysteem.
+Dan jouwe jo oan jo gjin auteursrjocht skeine troch it oanbieden.
+Mei \"Bied oan\" begjinne jo dan it oanbieden.
+Dit kin efkes duorje as jo Ynternet-ferbining net sa flug is.
+
+Foar de bestânsforam wurdt foto's JPEG oanret, foar tekenings ensfh. PNG, en foar
+lûden OGG. Brûk in dúdlike bestânsnamme, sa't in oar ek wit wat it is.
+
+Om it ôfbyld yn in side op te nimmen, meitsje jo dêr sa'n keppeling:<br />
+'''<nowiki>[[</nowiki>{{ns:image}}<nowiki>:jo_foto.jpg|omskriuwing]]</nowiki>''' of
+'''<nowiki>[[</nowiki>{{ns:image}}<nowiki>:jo_logo.png|omskriuwing]]</nowiki>''';
+en foar lûden '''<nowiki>[[</nowiki>{{ns:media}}<nowiki>:jo_lûd.ogg]]</nowiki>'''.
+
+Tink derom dat oaren bewurkje kinne wat jo oanbiede, as dat better is foar de {{SITENAME}},
+krekt's sa't dat foar siden jildt, en dat jo útsletten wurde kinne as jo misbrûk
+meitsje fan it systeem..",
+
+"uploadlog"		=> "oanbied log",
+"uploadlogpage" 	=> "Oanbied_log",
+"uploadlogpagetext" => "Liste fan de lêst oanbeane bestannen.
+(Tiid oanjûn as UTC).
+<ul>
+</ul>",
+
+"filename"		=> "Bestânsnamme",
+"filedesc"		=> "Omskriuwing",
+"copyrightpage" 	=> "{{ns:project}}:Auteursrjocht",
+"copyrightpagename" => "{{SITENAME}} auteursrjocht",
+"uploadedfiles"	=> "Oanbeane bestannen",
+"minlength"		=> "Ofbyldnammen moatte trije letters of mear wêze.",
+"badfilename"	=> "De ôfbyldnamme is feroare nei \"$1\".",
+"badfiletype"	=> "\".$1\" is net yn in oanrette bestânsfoarm.",
+"largefile"		=> "It is baas as ôfbylden net grutter as 100k binne.",
+"successfulupload" => "Oanbieden slagge.",
+"fileuploaded"	=> "Bestân \"$1\" goed oanbean.
+Gean no fierder nei de beskriuwingsside: ($2). Dêr kinne jo oanjaan
+wêr't it bestân wei kaam, hoenear it oanmakke is en wa't it makke hat,
+en wat jo fierder mar oan ynformaasje hawwe.",
+
+"uploadwarning" 	=> "Oanbied waarskôging",
+"savefile"		=> "Lis bestân fêst",
+"uploadedimage" 	=> " \"[[$1]]\" oanbean",
+"uploaddisabled" => "Sorry, op dizze tsjinner kin net oanbean wurde.",
+
+# Image list
+#
+"imagelist"		=> "Ofbyld list",
+"imagelisttext"	=> "Dit is in list fan $1 ôfbylden, op $2.",
+"getimagelist"	=> "Ofbyld list ...",
+"ilsubmit"		=> "Sykje",
+"showlast"		=> "Jou lêste $1 ôfbylden, op $2.",
+"byname"		=> "namme",
+"bydate"		=> "datum",
+"bysize"		=> "grutte",
+"imgdelete"		=> "wisk",
+"imgdesc"		=> "tekst",
+"imglegend"		=> "Utlis: (tekst) = Jou/bewurk ôfbyld-omskriuwing.",
+"imghistory"	=> "Ofbyldskiednis",
+"revertimg"		=> "tebek",
+"deleteimg"		=> "wisk",
+"deleteimgcompletely"		=> "wisk",
+"imghistlegend"	=> "Utlis: (no) = dit is it hjoeddeiske ôfbyld,
+(wisk) = wiskje dizze âldere ferzje, (tebek) = set ôfbyld tebek nei dizze âldere ferzje.
+<br /><i>Fia de datum kinne jo it ôfbyld dat doe oanbean besjen</i>.",
+
+"imagelinks"	=> "Ofbyldkeppelings",
+"linkstoimage"	=> "Dizze siden binne keppele oan it ôfbyld:",
+"nolinkstoimage" => "Der binne gjin siden oan dit ôfbyld keppelje.",
+
+# Statistics
+#
+"statistics"	=> "Statistyk",
+"sitestats"		=> "Side statistyk",
+"userstats"		=> "Brûker statistyk",
+"sitestatstext" => "It tal fan siden in de {{SITENAME}} is: <b>$2</b>.<br />
+(Oerlissiden, siden oer de {{SITENAME}}, oare bysûndere siden,  stobben en
+trochferwizings yn de databank binne dêrby net meiteld.)<br />
+It tal fan siden in de databank is: <b>$1</b>.
+<p>
+Der is <b>$3</b> kear in side opfrege, en <b>$4</b> kear in side bewurke,
+sûnt it programma bywurke is (15 oktober 2002).
+Dat komt yn trochslach del op <b>$5</b> kear bewurke de side,
+en <b>$6</b> kear opfrege de bewurking.",
+
+"userstatstext" => "It tal fan registreare brûkers is <b>$1</b>.
+It tal fan behearders dêrfan is: <b>$2</b>.",
+
+# Maintenance Page
+#
+"disambiguations"		=> "Trochverwizings",
+"disambiguationspage"	=> "{{ns:project}}:trochferwizing",
+# problem with link: [[{{ns:project}}:trochferwizing]]
+"disambiguations-text"	=> "Dizze siden binne keppele fia in
+[[{{ns:project}}:trochferwizing]].
+Se soenen mei de side sels keppele wurde moatte.<br />
+(Allinnich siden út deselde nammeromte binne oanjûn.)",
+
+"doubleredirects"	=> "Dûbele trochverwizings",
+"doubleredirectstext"	=> "<b>Let op!</b> Der kinne missen yn dizze list stean!
+Dat komt dan ornaris troch oare keppelings ûnder de \"#REDIRECT\".<br />
+Eltse rigel jout keppelings nei de earste en twadde trochverwizing, en dan de earste regel fan
+de twadde trochferwizing, wat it \"echte\" doel wêze moat.",
+
+"brokenredirects"		=> "Misse trochferwizings",
+"brokenredirectstext"	=> "Dizze trochferwizings ferwize nei siden dy't der net binne.",
+
+
+# Miscellaneous special pages
+#
+"lonelypages"	=> "Lossteande siden",
+"unusedimages"	=> "Lossteande ôbylden",
+"popularpages"	=> "Grage siden",
+"nviews"		=> "$1 kear sjoen",
+"wantedpages"	=> "Nedige siden",
+"nlinks"		=> "$1 keer keppele",
+"allpages"		=> "Alle titels",
+"randompage"	=> "Samar in side",
+"shortpages"	=> "Koarte siden",
+"longpages"		=> "Lange siden",
+"listusers"		=> "Brûkerlist",
+"specialpages"	=> "Bysûndere siden",
+"spheading"		=> "Bysûndere siden foar all brûkers",
+"recentchangeslinked" => "Folgje keppelings",
+"rclsub"		=> "(nei siden dêr't \"$1\" keppelings nei hat)",
+"newpages"		=> "Nije siden",
+"ancientpages"	=> "Alde siden",
+"movethispage"	=> "Move this side",
+"unusedimagestext" => "<p>Tink derom dat ore web sides lykas fan de oare
+parten fan it meartaliche projekt mei in keppeling nei in direkte URL nei
+an ôfbyld makke hawwe kinne. Dan wurde se noch brûke, mar stean al in dizze list.",
+
+"alphaindexline" 	=> "$1 oan't $2",
+
+
+# Email this brûker
+#
+"mailnologin"	=> "Gjin adres beskikber",
+"mailnologintext" => "Jo moatte [[{{ns:special}}:Userlogin|oanmeld]]
+wêze, en in jildich e-postadres [[{{ns:special}}:Preferences|ynsteld]]
+hawwe, om oan oare brûkers e-post stjoere te kinnen.",
+
+"emailuser"		=> "Skriuw dizze brûker",
+"emailpage"		=> "E-post nei brûker",
+"emailpagetext"	=> "As dizze brûker in jildich e-postadres in ynsteld hat,
+dan kinne jo ien berjocht ferstjoere.
+It e-postadres dat jo ynsteld hawwe wurdt brûkt as de ôfstjoerder, sa't de ûntfanger
+antwurdzje kin.",
+"noemailtitle"	=> "Gjin e-postadres",
+"noemailtext"	=> "Dizze brûker had gjin jildich e-postadres ynsteld,
+of hat oanjaan gjin post fan oare brûkers krije te wollen.",
+"emailfrom"		=> "Fan",
+"emailto"		=> "Oan",
+"emailsubject"	=> "Oer",
+"emailmessage"	=> "Tekst",
+"emailsend"		=> "Stjoer",
+"emailsent"		=> "Berjocht stjoerd",
+"emailsenttext" => "Jo berjocht is stjoerd.",
+
+# Watchlist
+#
+"watchlist"		=> "Folchlist",
+"mywatchlist"		=> "Folchlist",
+"nowatchlist"	=> "Jo hawwe gjin siden op jo folchlist.",
+"watchnologin"	=> "Not oanmeld in",
+"watchnologintext"=> "Jo moatte [[{{ns:special}}:Userlogin|oanmeld]] wêze om jo folchlist te feroarjen.",
+
+"addedwatch"	=> "Oan folchlist tafoege",
+"addedwatchtext"	=> "De side \"$1\" is tafoege oan jo <a href=\""
+. "{{localurle:{{ns:special}}:Watchlist}}\">folchlist</a>.
+As dizze side sels, of de oerlisside, feroare wurd, dan komt dat dêr yn,
+en de side stiet dan ek <b>fet</b> yn de <a href=\"" .
+  "{{localurle:{{ns:special}}:Recentchanges}}\">Koarts feroare</a> list.
+
+<p>As jo letter in side net mear folgje wolle, dan brûke jo \"Ferjit dizze side\".",
+"removedwatch"	=> "Net mear folgje",
+"removedwatchtext" => "De side \"$1\" stiet net mear op jo folchlist.",
+"watchthispage"	=> "Folgje dizze side",
+"unwatchthispage" => "Ferjit dizze side",
+"notanarticle"	=> "Dit kin net folge wurde.",
+"watchnochange" 	=> "Fan de siden dy't jo folgje is der yn dizze perioade net ien feroare.",
+"watchdetails"	=> "Jo folchlist hat $1 siden (oerlissiden net meiteld).
+In dizze perioade binne der $2 siden feroare.
+$3. ([$4 Gâns myn folchlist].)",
+
+"watchmethod-recent" => "Koarts feroare ...",
+"watchmethod-list" => "Folge ...",
+"removechecked"	=> "Ferjit dizze siden",
+"watchlistcontains" => "Jo folgje op it stuit $1 siden.",
+"watcheditlist"	=> "Dit binne de siden op jo folchlist, oardere op alfabet.
+Jou oan hokfoar siden jo net mear folgje wolle, en befêstigje dat ûnderoan de side.",
+
+"removingchecked" => "Wiskje siden fan jo folchlist ...",
+"couldntremove" 	=> "Koe \"$1\" net ferjitte ...",
+"iteminvalidname" => "Misse namme: \"$1\" ...",
+"wlnote" 		=> "Dit binne de lêste <strong>$1</strong> feroarings yn de lêste <strong>$2</strong> oeren.",
+
+
+# Delete/protect/revert
+#
+"deletepage"	=> "Wisk side",
+"confirm"		=> "Befêstigje",
+"excontent"		=> "inhâld wie: '$1'",
+"exbeforeblank" 	=> "foar de tekst wiske wie, wie dat: '$1'",
+"exblank"		=> "side wie leech",
+"confirmdelete"	=> "Befestigje wiskjen",
+"deletesub"		=> "(Wiskje \"$1\")",
+"historywarning"	=> "Waarskôging: De side dy't jo wiskje wolle hat skiednis:",
+# problem with link: [[{{ns:project}}:wisk-rie]]
+"confirmdeletetext" => "Jo binne dwaande mei it foar altyd wiskjen fan in side
+of ôfbyld, tegearre mei alle skiednis, út de databank.
+Befêstigje dat jo dat wier dwaan wolle. Befêstigje dat dat is wat jo witte wat it gefolch
+is en dat jo dit dogge neffens de [[{{ns:project}}:wisk-rie]].",
+
+"actioncomplete"	=> "Dien",
+"deletedtext"	=> "\"$1\" is wiske.
+Sjoch \"$2\" foar in list fan wat resint wiske is.",
+"deletedarticle"	=> "\"$1\" is wiske",
+"dellogpage"	=> "Wisk_loch",
+"dellogpagetext" => "Dit is wat der resint wiske is.
+(Tiden oanjûn as UTC).
+<ul>
+</ul>",
+
+"deletionlog"	=> "wisk loch",
+"reverted"		=> "Tebekset nei eardere ferzje",
+"deletecomment"	=> "Reden foar it wiskjen",
+"imagereverted"	=> "Tebeksette nei eardere ferzje is slagge.",
+"rollback"		=> "Feroarings tebeksette",
+"rollbacklink"	=> "feroaring tebeksette",
+"rollbackfailed"	=> "Feroaring tebeksette net slagge",
+"cantrollback"	=> "Disse feroaringt kin net tebek set, om't der mar ien skriuwer is.",
+"alreadyrolled"	=> "Kin de feroaring fan [[:$1]]
+troch [[User:$2|$2]] ([[User talk:$2|Oerlis]]) net tebeksette;
+inoar hat de feroaring tebekset, of oars wat oan de side feroare.
+
+De lêste feroaring wie fan [[User:$3|$3]] ([[User talk:$3|Oerlis]]).",
+#   only shown if there is an edit comment
+"editcomment"	=> "De gearfetting wie: \"<i>$1</i>\".",
+"revertpage"	=> "Tebek set ta de ferzje fan \"$1\"",
+
+# Undelete
+"undelete"		=> "Side werom set",
+"undeletepage"	=> "Side besjen en werom sette",
+"undeletepagetext" => "Dizze siden binne wiske, mar sitte noch yn it argyf en kinne weromset wurde.
+(It argyf kin út en troch leechmeitsje wurde.)",
+"undeletearticle" => "Set side werom",
+"undeleterevisions" => "$1 ferzjes in it argyf",
+"undeletehistory" => "Soenen jo dizze side weromsette, dan wurde alle ferzjes weromset as part
+fan de skiednis. As der in nije side is mei dizze namme, dan wurd de hjoeddeise ferzje <b>net</b>
+troch de lêste ferzje út dy weromsette skiednis ferfangen.",
+"undeleterevision" => "Wiske side, sa't dy $1 wie.",
+"undeletebtn" 	=> "Weromset!",
+"undeletedarticle" => "\"$1\" weromset",
+
+# Contributions
+#
+"contributions"	=> "Brûker bydragen",
+"mycontris"		=> "Myn bydragen",
+"contribsub2"	=> "Foar \"$1 ($2)\"",
+"nocontribs"	=> "Der binne gjin feroarings fûn dyt't hjirmei oerienkomme.",
+"ucnote"		=> "Dit binne dizze brûker's leste <b>$1</b> feroarings yn de lêste <b>$2</b> dagen.",
+"uclinks"		=> "Besjoch de lêste $1 feroarings; besjoch de lêste $2 dagen.",
+"uctop"		=> " (boppen)",
+
+# What links here
+#
+"whatlinkshere"	=> "Wat is hjirmei keppele",
+"notargettitle"	=> "Gjin side",
+"notargettext"	=> "Jo hawwe net sein oer hokfoar side jo dit witte wolle.",
+"linklistsub"	=> "(List fan keppelings)",
+"linkshere"		=> "Dizze siden binne hjirmei keppele:",
+"nolinkshere"	=> "Gjinien side is hjirmei keppele!",
+"isredirect"	=> "trochverwizing",
+
+# Block/unblock IP
+#
+"blockip"		=> "Slut brûker út",
+# problem with link: [[{{ns:project}}:Utslut-rie|útslut-rie]]
+"blockiptext"	=> "Brûk dizze fjilden om in brûker fan skriuwtagong út te sluten.
+Dit soe allinnich omwillens fan fandalisme dwaan wurde moatte, sa't de
+[[{{ns:project}}:Utslut-rie|útslut-rie]] it oanjout.
+Meld de krekte reden! Begelyk, neam de siden dy't oantaaste waarden.",
+"ipaddress"		=> "Brûkernamme of Ynternet-adres",
+"ipbreason"		=> "Reden",
+"ipbsubmit"		=> "Slut dizze brûker út",
+"badipaddress"	=> "Dy brûker bestiet net",
+"blockipsuccesssub" => "Utsluting slagge",
+"blockipsuccesstext" => "Brûker \"$1\" is útsletten.<br />
+(List fan [[{{ns:special}}:Ipblocklist|útslette brûkers]].)",
+"unblockip"		=> "Lit brûker der wer yn",
+"unblockiptext"	=> "Brûk dizze fjilden om in brûker wer skriuwtagong te jaan.",
+"ipusubmit"		=> "Lit dizze brûker der wer yn",
+"ipblocklist"	=> "List fan útsletten Ynternet-adressen en brûkersnammen",
+"blocklistline"	=> '"$3", troch "$2" op $1 ($4)',
+"blocklink"		=> "slut út",
+"unblocklink"	=> "lit yn",
+"contribslink"	=> "bydragen",
+"autoblocker"	=> "Jo wienen útsletten om't jo Ynternet-adres oerienkomt mei dat fan \"$1\".
+Foar it útslute fan dy brûker waard dizze reden joen: \"$2\".",
+
+# Developer tools
+#
+"lockdb"		=> "Meitsje de database 'Net-skriuwe'",
+"unlockdb"  	=> "Meitsje de databank skriuwber",
+"lockdbtext"	=> "Salang as de databank 'Net-skriuwe' is,
+is foar brûkers it feroarjen fan siden, ynstellings, folchlisten, ensfh. net mooglik.
+Befêstigje dat dit is wat jo wolle, en dat jo de databank wer skriuwber meitsje as
+jo ûnderhâld ree is.",
+"unlockdbtext"	=> "As de databank skriuwber makke wurdt,
+is foar brûkers it feroarjen fan siden, ynstelingen, folchlisten, ensfh, wer mooglik.
+Befêstigje dat dit is wat jo wolle.",
+"lockconfirm"	=> "Ja, ik wol wier de databank 'Net--skriuwe' meitsje.",
+"unlockconfirm"	=> "Ja, ik wol wier de databank skriuwber meitsje.",
+"lockbtn"		=> "Meitsje de database 'Net-skriuwe'",
+"unlockbtn"		=> "Meitsje de databank skriuwber",
+"locknoconfirm"	=> "Jo hawwe jo hanneling net befêstige.",
+"lockdbsuccesssub" => "Databank is 'Net-skriuwe'",
+"unlockdbsuccesssub" => "Database is skriuwber",
+"lockdbsuccesstext" => "De {{SITENAME}} databank is 'Net-skriuwe' makke.
+<br />Tink derom en meitsje de databank skriuwber as jo ûnderhâld ree is.",
+"unlockdbsuccesstext" => "De {{SITENAME}} databank is skriuwber makke.",
+
+# Move page
+#
+"movepage"		=> "Werneam side",
+"movepagetext"	=> "Dit werneamt in side, mei alle sideskiednis.
+De âlde titel wurdt in trochferwizing nei de nije.
+Keppelings mei de âlde side wurde net feroare;
+gean sels nei of't der dûbele of misse ferwizings binne.
+It hinget fan jo ôf of't de siden noch keppelen binne sa't it mient wie.
+
+De side wurdt '''net''' werneamt as der al in side mei dy namme is, útsein as it in side
+sûnder skiednis is en de side leech is of in trochferwizing is. Sa kinne jo in side
+daalks weromneame as jo in flater meitsje, mar jo kinne in oare side net oerskriuwe.",
+
+"movepagetalktext" => "As der in oerlisside by heart, dan bliuwt dy oan de side keppele, '''útsein''':
+*De nije sidenamme yn in oare nammeromte is,
+*Der keppele oan de nije namme al in net-lege oerlisside is, of
+*Jo dêr net foar kieze.
+
+In dizze gefallen is it oan jo hoe't jo de oerlisside werneame of ynfoegje wolle.",
+
+"movearticle"	=> "Werneam side",
+"movenologin"	=> "Net oameld",
+"movenologintext" => "Jo moatte [[{{ns:special}}:Userlogin|oanmeld]] wêze om in side wer te neamen.",
+
+"newtitle"		=> "As nij titel",
+"movepagebtn"	=> "Werneam side",
+"pagemovedsub"	=> "Werneamen slagge",
+"pagemovedtext"	=> "Side \"[[$1]]\" werneamd as \"[[$2]]\".",
+"articleexists"	=> "Der is al in side mei dy namme,
+of oars is de namme dy't jo oanjûn hawwe net tastean.
+Besykje it op 'e nij.",
+
+"talkexists"	=> "It werneamen op sich is slagge, mar de eardere oerlisside is
+net mear keppele om't der foar de nije namme el al in oerlisside wie.
+Gearfoegje de oerlissiden hânmjittig.",
+
+"movedto"		=> "werenamd as",
+"talkpagemoved"	=> "De oerlisside is al noch keppele.",
+"talkpagenotmoved" => "De oerlisside is <strong>net</strong> mear keppele.",
+# Math
+'mw_math_png' => "Altiten as PNG ôfbyldzje",
+'mw_math_simple' => "HTML foar ienfâldiche formules, oars PNG",
+'mw_math_html' => "HTML as mooglik, oars PNG",
+'mw_math_source' => "Lit de TeX ferzje stean (foar tekstblêdzjers)",
+'mw_math_modern' => "Oanbefelle foar resinte blêdzjers",
+'mw_math_mathml' => 'MathML',
+
+);
+
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesGa.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesGa.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesGa.php	(revision 1280)
@@ -0,0 +1,1828 @@
+<?php
+/** Irish (Gaeilge)
+ *
+ * @addtogroup Language
+ */
+
+$skinNames = array(
+	'standard' => 'Gnáth',
+	'nostalgia' => 'Sean-nós',
+	'cologneblue' => 'Gorm na Colóna',
+	'smarty' => 'Paddington',
+	'montparnasse' => 'Montparnasse',
+	'davinci' => 'DaVinci',
+	'mono' => 'Mono',
+	'monobook' => 'MonoBook',
+	'myskin' => 'MySkin',
+	'chick' => 'Chick'
+);
+
+$magicWords = array(
+	#   ID	                         CASE  SYNONYMS
+	'redirect'               => array( 0,    '#redirect', '#athsheoladh' ),
+	'notoc'                  => array( 0,    '__NOTOC__', '__GANCÁ__'              ),
+	'forcetoc'               => array( 0,    '__FORCETOC__',         '__CÁGACHUAIR__'  ),
+	'toc'                    => array( 0,    '__TOC__', '__CÁ__'                ),
+	'noeditsection'          => array( 0,    '__NOEDITSECTION__',    '__GANMHÍRATHRÚ__'  ),
+	'start'                  => array( 0,    '__START__', '__TÚS__'              ),
+	'currentmonth'           => array( 1,    'CURRENTMONTH',  'MÍLÁITHREACH'  ),
+	'currentmonthname'       => array( 1,    'CURRENTMONTHNAME',     'AINMNAMÍOSALÁITHREAÍ'  ),
+	'currentmonthnamegen'    => array( 1,    'CURRENTMONTHNAMEGEN',  'GINAINMNAMÍOSALÁITHREAÍ'  ),
+	'currentmonthabbrev'     => array( 1,    'CURRENTMONTHABBREV',   'GIORRÚNAMÍOSALÁITHREAÍ'  ),
+	'currentday'             => array( 1,    'CURRENTDAY',           'LÁLÁITHREACH'  ),
+	'currentdayname'         => array( 1,    'CURRENTDAYNAME',       'AINMANLAELÁITHRIGH'  ),
+	'currentyear'            => array( 1,    'CURRENTYEAR',          'BLIAINLÁITHREACH'  ),
+	'currenttime'            => array( 1,    'CURRENTTIME',          'AMLÁITHREACH'  ),
+	'numberofarticles'       => array( 1,    'NUMBEROFARTICLES',     'LÍONNANALT'  ),
+	'numberoffiles'          => array( 1,    'NUMBEROFFILES',        'LÍONNAGCOMHAD'  ),
+	'pagename'               => array( 1,    'PAGENAME',             'AINMANLGH'  ),
+	'pagenamee'              => array( 1,    'PAGENAMEE',            'AINMANLGHB'  ),
+	'namespace'              => array( 1,    'NAMESPACE',            'AINMSPÁS'  ),
+	'msg'                    => array( 0,    'MSG:',                 'TCHT:'  ),
+	'subst'                  => array( 0,    'SUBST:',               'IONAD:'  ),
+	'msgnw'                  => array( 0,    'MSGNW:',               'TCHTFS:'  ),
+	'img_thumbnail'          => array( 1,    'thumbnail', 'thumb',   'mionsamhail', 'mion'  ),
+	'img_right'              => array( 1,    'right',                'deas'  ),
+	'img_left'               => array( 1,    'left',                 'clé'  ),
+	'img_none'               => array( 1,    'none',                 'faic'  ),
+	'img_width'              => array( 1,    '$1px'                   ),
+	'img_center'             => array( 1,    'center', 'centre',     'lár'  ),
+	'img_framed'             => array( 1,    'framed', 'enframed', 'frame', 'fráma', 'frámaithe' ),
+	'int'                    => array( 0,    'INT:', 'INMH:'                   ),
+	'sitename'               => array( 1,    'SITENAME',             'AINMANTSUÍMH'  ),
+	'ns'                     => array( 0,    'NS:', 'AS:'                    ),
+	'localurl'               => array( 0,    'LOCALURL:',            'URLÁITIÚIL'  ),
+	'localurle'              => array( 0,    'LOCALURLE:',           'URLÁITIÚILB'  ),
+	'server'                 => array( 0,    'SERVER',               'FREASTALAÍ'  ),
+	'servername'             => array( 0,    'SERVERNAME',            'AINMANFHREASTALAÍ' ),
+	'scriptpath'             => array( 0,    'SCRIPTPATH',           'SCRIPTCHOSÁN'  ),
+	'grammar'                => array( 0,    'GRAMMAR:',             'GRAMADACH:'  ),
+	'notitleconvert'         => array( 0,    '__NOTITLECONVERT__', '__NOTC__', '__GANTIONTÚNADTEIDEAL__', '__GANTT__'),
+	'nocontentconvert'       => array( 0,    '__NOCONTENTCONVERT__', '__NOCC__', '__GANTIONTÚNANÁBHAIR__', '__GANTA__' ),
+	'currentweek'            => array( 1,    'CURRENTWEEK',          'SEACHTAINLÁITHREACH'  ),
+	'currentdow'             => array( 1,    'CURRENTDOW',           'LÁLÁITHREACHNAS'  ),
+	'revisionid'             => array( 1,    'REVISIONID',           'IDANLEASAITHE'  ),
+);
+
+$namespaceNames = array(
+	NS_MEDIA	          => 'Meán',
+	NS_SPECIAL          => 'Speisialta',
+	NS_MAIN             => '',
+	NS_TALK             => 'Plé',
+	NS_USER             => 'Úsáideoir',
+	NS_USER_TALK        => 'Plé_úsáideora',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK     => 'Plé_{{grammar:genitive|$1}}',
+	NS_IMAGE            => 'Íomhá',
+	NS_IMAGE_TALK       => 'Plé_íomhá',
+	NS_MEDIAWIKI        => 'MediaWiki',
+	NS_MEDIAWIKI_TALK   => 'Plé_MediaWiki',
+	NS_TEMPLATE         => 'Teimpléad',
+	NS_TEMPLATE_TALK    => 'Plé_teimpléid',
+	NS_HELP             => 'Cabhair',
+	NS_HELP_TALK        => 'Plé_cabhrach',
+	NS_CATEGORY         => 'Catagóir',
+	NS_CATEGORY_TALK    => 'Plé_catagóire'
+);
+
+$namespaceAliases = array(
+	'Plé_í­omhá' => NS_IMAGE_TALK,
+	'Múnla' => NS_TEMPLATE,
+	'Plé_múnla' => NS_TEMPLATE_TALK,
+	'Rang' => NS_CATEGORY
+);
+
+$linkTrail = '/^([a-z]+)(.*)\$/sD';
+
+
+#-------------------------------------------------------------------
+# Default messages
+#-------------------------------------------------------------------
+
+$messages = array(
+
+# User Toggles'tog-underline'	         => "Cuir línte faoi na naisc",
+'tog-highlightbroken'	   => "Cuir dath dearg ar naisc briste, <a href=\"\" class=\"new\">mar sin</a>
+(rogha eile: mar sin<a href=\"\" class=\"internal\">?</a>).",
+'tog-justify'	           => "Comhfhadaigh na paragraif",
+'tog-hideminor'	         => "Ná taispeáin fo-athruithe i measc na n-athruithe is déanaí",
+'tog-usenewrc'	          => "Stíl nua do na hathruithe is déanaí (le JavaScript)",
+'tog-numberheadings'	    => "Uimhrigh ceannteidil go huathoibríoch",
+'tog-showtoolbar'		=> 'Taispeáin an barra uirlisí eagair (JavaScript)',
+"tog-editondblclick"	    => "Cuir leathanaigh in eagar le déchliceáil (JavaScript)",
+"tog-editsection"	       =>"Cumasaigh mír-eagarthóireacht le naisc mar seo: [athrú]",
+"tog-editsectiononrightclick"   =>"Cumasaigh mír-eagarthóireacht le deaschliceáil<br /> ar ceannteidil (JavaScript)",
+"tog-showtoc"	           =>"Taispeáin an clár ábhair (d'ailt le níos mó ná 3 ceannteidil)",
+"tog-rememberpassword"	  => "Cuimhnigh m'fhocal faire",
+"tog-editwidth"	         => "Cuir uasmhéid ar an mbosca eagair",
+"tog-watchdefault"	      => "Déan faire ar leathanaigh a athraíonn tú",
+"tog-minordefault"	      => "Déan mionathrú de gach aon athrú, mar réamhshocrú",
+"tog-previewontop"	      => "Cuir an réamhamharc os cionn an bhosca eagair, <br />agus ná cuir é taobh thíos de",
+'tog-previewonfirst'	    => 'Taispeáin réamhamharc don chéad athrú',
+"tog-nocache"	           => "Ciorraigh taisce na leathanach",
+
+'tog-enotifwatchlistpages'      => 'Cuir ríomhphost chugam nuair a athraítear leathanaigh',
+'tog-enotifusertalkpages'       => 'Cuir ríomhphost chugam nuair a athraítear mo leathanach phlé úsáideora',
+'tog-enotifminoredits'	  => 'Cuir ríomhphost chugam nuair a dhéantar mionathruithe chomh maith',
+'tog-enotifrevealaddr'	  => 'Taispeáin mo sheoladh ríomhphoist i dteachtaireachtaí fógra',
+'tog-shownumberswatching'       => 'Taispeán an méid úsáideoirí atá ag faire',
+'tog-fancysig'	          => 'Síniuithe bunúsacha (gan nasc uathoibríoch)',
+'tog-externaleditor'	    => 'Bain úsáid as eagarthóir seachtrach, mar réamhshocrú',
+'tog-externaldiff'	      => 'Bain úsáid as difríocht sheachtrach, mar réamhshocrú',
+
+'underline-always' => 'Déan é gach uair é',
+'underline-never' => 'Ná déan é riamh',
+'underline-default' => 'Reamhshocrú ón brabhsálaí',
+
+'sunday' => 'an Domhnach',
+'monday' => 'an Luan',
+'tuesday' => 'an Mháirt',
+'wednesday' => 'an Chéadaoin',
+'thursday' => 'an Déardaoin',
+'friday' => 'an Aoine',
+'saturday' => 'an Satharn',
+'january' => 'Eanáir',
+'february' => 'Feabhra',
+'march' => 'Márta',
+'april' => 'Aibreán',
+'may_long' => 'Bealtaine',
+'june' => 'Meitheamh',
+'july' => 'Iúil',
+'august' => 'Lúnasa',
+'september' => 'Meán Fómhair',
+'october' => 'Deireadh Fómhair',
+'november' => 'Mí na Samhna',
+'december' => 'Mí na Nollag',
+'jan' => 'Ean',
+'feb' => 'Feabh',
+'mar' => 'Márta',
+'apr' => 'Aib',
+'may' => 'Beal',
+'jun' => 'Meith',
+'jul' => 'Iúil',
+'aug' => 'Lún',
+'sep' => 'MFómh',
+'oct' => 'DFómh',
+'nov' => 'Samh',
+'dec' => 'Noll',
+
+
+# Bits of text used by many pages:
+#
+# FIXME
+#
+'categories' => 'Catagóirí',
+'pagecategories' => 'Catagóirí',
+'category_header' => 'Ailt sa chatagóir "$1"',
+"subcategories" => "Fo-chatagóirí",
+
+"mainpage"      => "Príomhleathanach",
+"mainpagetext"  => "Suiteáladh an ríomhchlár vicí go rathúil.",
+"mainpagedocfooter" => "Féach ar [http://meta.wikimedia.org/wiki/MediaWiki_i18n doiciméid um conas an chomhéadán a athrú]
+agus an [http://meta.wikimedia.org/wiki/MediaWiki_User%27s_Guide Lámhleabhar úsáideora] chun cabhair úsáide agus fíoraíochta a fháil.",
+
+'portal'	        => 'Ionad pobail',
+'portal-url'	    => '{{ns:4}}:Ionad pobail',
+"about"     => "Maidir leis",
+"aboutsite"	 => "Maidir le {{SITENAME}}",
+'article'       => "Leathanach ábhair",
+"aboutpage"     => "{{ns:4}}:Maidir leis",
+"help"      => "Cabhair",
+"helppage"      => "Cabhair:Clár_ábhair",
+"bugreports"    => "Fabht-thuairiscí",
+"bugreportspage"    => "{{ns:4}}:Fabht-thuairiscí",
+'sitesupport'   => 'Síntiúis',
+'sitesupport-url' => '{{ns:4}}:Tacaíocht an tsuímh',
+"faq"	   => "Ceisteanna Coiteanta",
+"faqpage"       => "{{ns:4}}:Ceisteanna_Coiteanta",
+"edithelp"      => "Cabhair eagarthóireachta",
+"newwindow"     => "(osclaítear i bhfuinneog eile é)",
+"edithelppage"  => "{{ns:help}}:Eagarthóireacht",
+"cancel"	=> "Cealaigh",
+"qbfind"	=> "Aimsigh",
+"qbbrowse"      => "Brabhsáil",
+"qbedit"	=> "Cuir in eagar",
+"qbpageoptions" => "An leathanach seo",
+"qbpageinfo"    => "Comhthéacs",
+"qbmyoptions"   => "Mo chuid leathanaigh",
+"qbspecialpages" => "Leathanaigh speisialta",
+"moredotdotdot" => "Tuilleadh...",
+"mypage"	=> "Mo leathanach",
+"mytalk"	=> "Mo chuid phlé",
+"anontalk"      => "Plé don IP seo",
+"navigation"    => "Nascleanúint",
+
+# Metadata in edit box
+'metadata' => '<b>Meiteashonraí</b> (féach ar <a href="$1">here</a> le haghaidh a thuilleadh eolais)',
+
+"currentevents" => "Cursaí reatha",
+'currentevents-url' => 'Cursaí reatha',
+
+'disclaimers' => 'Séanadh',
+"disclaimerpage" => "{{ns:4}}:Séanadh_ginearálta",
+"errorpagetitle" => "Earráid",
+"returnto"      => "Dul ar ais go $1.",
+"tagline"       => "Ó {{SITENAME}}.",
+"whatlinkshere" => "Leathanaigh a nascaíonn chuig an leathanach seo",
+"help"      => "Cabhair",
+"search"	=> "Cuardaigh",
+"searchbutton"	=> "Cuardaigh",
+"go"	    => "Téir",
+'searcharticle'	    => "Téir",
+"history"       => "Stair an lgh seo",
+'history_short' => 'Stair',
+'info_short'    => 'Eolas',
+"printableversion" => "Eagrán inphriontáilte",
+"print"	 => "Priontáil",
+"edit"	  => "Athraigh an lch seo",
+"editthispage"  => "Athraigh an lch seo",
+"delete"	=> "Scrios",
+"deletethispage"    => "Scrios an lch seo",
+"undelete_short" => "Díscrios $1 athruithe",
+"protect"	=> "Glasáil",
+"protectthispage" => "Glasáil an lch seo",
+"unprotect"     =>  "Díghlasáil",
+"unprotectthispage" => "Díghlasáil an lch seo",
+"newpage"       => "Leathanach nua",
+"talkpage"      => "Pléigh an lch seo",
+'specialpage' => 'Leathanach Speisialta',
+'personaltools' => 'Uirlisí phearsánta',
+"postcomment"   => "Caint ar an lch",
+"articlepage"   => "Féach ar an alt",
+'talk' => 'Plé',
+'views' => 'Tuairimí',
+'toolbox' => 'Bosca uirlisí',
+"userpage"      => "Féach ar lch úsáideora",
+"projectpage" => "Féach ar lch thionscadail",
+"imagepage"     => "Féach ar lch íomhá",
+"viewtalkpage"  => "Féach ar phlé",
+"otherlanguages"    => "I dteangacha eile",
+"redirectedfrom"    => "(Athsheolta ó $1)",
+"lastmodifiedat"  => "Athraíodh an leathanach seo ag $2, $1.",
+"viewcount"     => "Rochtainíodh an leathanach seo $1 uair.",
+'copyright'     => "Tá an t-ábhar le fáil faoin $1.",
+"protectedpage" => "Leathanach glasáilte",
+
+'badaccess'     => 'Earráid ceada',
+
+'versionrequired' => 'Tá leagan $1 de MediaWiki de dhíth',
+'versionrequiredtext' => 'Tá an leagan $1 de MediaWiki riachtanach chun an leathanach seo a úsáid. Féach ar [[Special:Version]]',
+
+
+"nbytes"	=> "$1 beart",
+"ok"	    => "Déan",
+"editsection"   => "athraigh",
+"editold"   => "athraigh",
+"toc"	   => "Clár ábhair",
+"showtoc"       => "taispeáin",
+"hidetoc"       => "folaigh",
+"thisisdeleted" => "Breathnaigh nó cuir ar ais $1?",
+"restorelink"   => "$1 athruithe scriosaithe",
+'feedlinks' => 'Fotha:',
+
+# Short words for each namespace, by default used in the 'article' tab in monobook
+'nstab-main' => 'Alt',
+'nstab-user' => 'Lch úsáideora',
+'nstab-media' => 'Lch meáin',
+'nstab-special' => 'Speisialta',
+'nstab-project' => 'Lch thionscadail',
+'nstab-image' => 'Comhad',
+'nstab-mediawiki' => 'Teachtaireacht',
+'nstab-template' => 'Teimpléad',
+'nstab-help' => 'Cabhair',
+'nstab-category' => 'Catagóir',
+
+# Main script and global functions
+#
+"nosuchaction"  => "Níl a leithéid de ghníomh ann",
+"nosuchactiontext" => "Níl aithníonn an vicí an gníomh atá ann sa líonsheoladh.",
+"nosuchspecialpage" => "Níl a leithéid de leathanach speisialta ann",
+"nospecialpagetext" => "Níl aithníonn an vicí an leathanach speisialta a d'iarr tú ar.",
+
+# General errors
+#
+"error"	 => "Earráid",
+"databaseerror"     => "Earráid sa bunachar sonraí",
+"dberrortext"   => "Tharlaigh earráid chomhréire in iarratas chuig an bhunachar sonraí.
+<blockquote><tt>$1</tt></blockquote>, ón suim \"<tt>$2</tt>\",
+an iarratas deireanach chuig an bhunachar sonrai.
+Chuir MySQL an earráid seo ar ais: \"<tt>$3: $4</tt>\".",
+"dberrortextcl"     => "Tharlaigh earráid chomhréire in iarratas chuig an bhunachar
+
+sonraí.
+\"$1\", ón suim \"$2\",
+ab ea an iarratas fiosraithe deireanach chuig an bhunachar sonrai,
+Chuir MySQL an earráid seo ar ais: \"$3: $4\".",
+"noconnect"     => "Tá brón orainn! Tá roinnt deacrachtaí teicniúla ag an vicí faoi
+
+láthair,
+agus ní féidir leis teagmháil a dhéanamh leis an mbunachar sonraí.",
+"nodb"      => "Theip rogha an bhunachair sonraí $1",
+"cachederror"   => "Seo í cóip taisce den leathanach atá á lorg agat (is dócha nach bhfuil sí bord ar bhord leis an leagan
+
+láithreach).",
+'laggedslavemode'   => 'Fógra: B\'fhéidir nach bhfuil an leathanach suas chun dáta.',
+"readonly"      => "Bunachar sonraí glasáilte",
+"enterlockreason" => "Iontráil cúis don glasáil, agus meastachán
+den uair a díghlasálfar an bunachar sonraí.",
+"readonlytext"  => "Tá an bunachar sonraí {{GRAMMAR:genitive|{{SITENAME}}}} glasáilte anois do iontráilí agus athruithe nua
+(is dócha go bhfuil sé do gnáthchothabháil).
+Tar éis seo, díghlasálfar an bunachar sonraí arís.
+Tugadh an míniú seo ag an riarthóir a ghlasáil é:
+$1",
+"missingarticle" => "Chuardaigh an bunachar sonraí ar leathanach a mba chóir bheith
+faighte darb teideal \"$1\" ach níor bhfuarthas an leathanach.
+
+Is dócha gur lean tu nasc chuig sean-dhifríocht nó nasc staire a bhaineann le
+leathanach atá scriosta cheana féin.
+
+Muna bhfuil seo an scéal, b'fhéidir go bhfuair tú amach fabht sna bogearraí MediaWiki.
+Déan nóta den URL le do thoil, agus cuir an ábhar in iúl do riarthóir.",
+'readonly_lag' => "Glasáladh an bunachar sonraí go huathoibríoch, mar tá freastalaithe
+sclábhánta an bhunachair sonraí ag teacht suas chun dáta leis an máistirfhreastalaí
+fós.",
+"internalerror" => "Earráid inmhéanach",
+"filecopyerror" => "Ní féidir an comhad \"$1\" a chóipeáil go \"$2\".",
+"filerenameerror" => "Ní féidir an comhad \"$1\" a athainmnigh mar \"$2\".",
+"filedeleteerror" => "Ní féidir an comhad \"$1\" a scriosaigh amach.",
+"filenotfound"  => "Ní bhfuarthas an comhad \"$1\".",
+"unexpected"    => "Luach gan súil leis: \"$1\"=\"$2\".",
+"formerror"     => "Earráid: ní féidir an foirm a tabhair isteach",
+"badarticleerror" => "Ní féidir an gníomh seo a dhéanamh ar an leathanach seo.",
+"cannotdelete"  => "Ní féidir an leathanach nó íomhá sonraithe a scriosaigh. (B'fhéidir gur scrios duine eile é cheana féin.)",
+"badtitle"      => "Teideal neamhbhailí",
+"badtitletext"  => "Bhí teideal an leathanaigh a d'iarr tú ar neamhbhailí, folamh, nó
+teideal idirtheangach nó idirvicí nasctha go mícheart.",
+"perfdisabled" => "Tá brón orainn! Díchumasaíodh an gné seo ar feadh tamaill chun luas an bhunachair sonraí a chosaint.",
+"perfdisabledsub" => "Is cóip i dtaisce é seo, ó $1:",
+"wrong_wfQuery_params" => "Paraiméadair míchearta don wfQuery()<br />
+Feidhm: $1<br />
+Iarratas: $2",
+'perfcached' => 'Fuarthas na sonraí seo as dtaisce, agus is dócha nach bhfuil siad suas chun dáta:',
+"viewsource" => "Féach ar fhoinse",
+# prblem with link: [[{{ns:project}}:Leathanach glasáilte]]
+"protectedtext" => "Glasáladh an leathanach seo chun é a chosaint i gcoinne athruithe. Tá go leor
+cúiseanna féideartha don scéal seo. Féach ar
+[[{{ns:project}}:Leathanach glasáilte]] más é do thoil é.
+
+Is féidir leat foinse an leathanaigh seo a féachaint agus a chóipeáil:",
+'sqlhidden' => '(Iarratas SQL folaithe)',
+
+# Login and logout pages
+#
+"logouttitle"   => "Logáil amach",
+"logouttext" => "Tá tú logáilte amach anois.
+Is féidir leat an {{SITENAME}} a úsáid fós gan ainm, nó is féidir leat logáil isteach
+arís mar an úsáideoir céanna, nó mar úsáideoir eile. Tabhair faoi deara go taispeáinfear roinnt
+leathanaigh mar atá tú logtha ann fós, go dtí go ghlanfá amach do thaisce brabhsálaí",
+
+"welcomecreation" => "== Tá fáilte romhat, $1! ==
+
+Cruthaíodh do chuntas. Ná déan dearmad ar do sainroghanna phearsanta {{GRAMMAR:genitive|{{SITENAME}}}} a hathrú.",
+
+"loginpagetitle" => "Logáil isteach",
+"yourname"      => "D'ainm úsáideora",
+"yourpassword"  => "D'fhocal faire",
+"yourpasswordagain" => "Athiontráil d'fhocal faire",
+"remembermypassword" => "Cuimhnigh orm",
+"yourdomainname"       => "D'fhearann",
+'externaldberror'      => 'Bhí earráid bhunachair sonraí ann maidir le fíordheimhniú seachtrach, nóThere was either an external authentication database error or you are not allowed to update your external account.',
+"loginproblem"  => "<b>Bhí fadhb ann maidir leis an logáil isteach.</b><br />Déan iarracht eile!",
+"alreadyloggedin" => "<strong>A húsáideoir $1, tá tú logáilte isteach cheana féin!</strong><br />",
+
+"login"     => "Logáil isteach",
+'loginprompt'   => "Tá fianáin de dhíth chun logáil isteach a dhéanamh ag {{SITENAME}}.",
+"userlogin"     => "Logáil isteach",
+"logout"	=> "Logáil amach",
+"userlogout"    => "Logáil amach",
+"notloggedin"   => "Níl tú logáilte isteach",
+"createaccount" => "Cruthaigh cuntas nua",
+"createaccountmail" => "le ríomhphost",
+"badretype"     => "D'iontráil tú dhá fhocal faire difriúla.",
+"userexists"    => "Tá an ainm úsáideora a d'iontráil tú á úsáid cheana féin. Déan rogha d'ainm eile, más é do thoil é.",
+"youremail"     => "Do ríomhphost *",
+'yourrealname'  => "D'fhíorainm **",
+'yourlanguage'  => 'Teanga',
+'yourvariant'  => 'Malairt',
+"yournick"      => "Do leasainm (i síniuithe)",
+'prefs-help-email'      => '** <strong>Ríomhphost</strong> (roghnach): Leis an tréith seo is féidir teagmháil a dhéanamh leat tríd do leathanach úsáideora nó phlé_úsáideora gan do sheoladh ríomhphost a thaispeáint.',
+'prefs-help-email-enotif' => 'Úsáidtear an seoladh seo chun fógraíocht ríomhphoist a sheoladh dhuit, má chumasaigh tú an rogha sin.',
+'prefs-help-realname'   => '* <strong>Fíorainm</strong> (roghnach): má toghaíonn tú é sin a chur ar fáil, úsáidfear é chun
+do chuid dreachtaí a chur i leith tusa.',
+"loginerror"    => "Earráid leis an logáil isteach",
+'nocookiesnew'  => "Chruthaíodh an cuntas úsáideora, ach níl tú logáilte isteach.
+
+Úsáideann {{SITENAME}} fianáin chun úsáideoirí a logáil isteach. Tá fianáin díchumasaithe agat. Cumasaigh iad le do thoil, agus ansin logáil isteach le d'ainm úsáideora agus d'fhocal faire úrnua.",
+"nocookieslogin"      => "Úsáideann {{SITENAME}} fianáin chun úsáideoirí a logáil
+isteach. Tá fianáin díchumasaithe agat. Cumasaigh iad agus déan athiarracht, le do thoil.",
+"noname"	=> "Níor shonraigh tú ainm úsáideora bailí.",
+"loginsuccesstitle" => "Logáil isteach rathúil",
+"loginsuccess"  => "Tá tú logáilte isteach anois sa {{SITENAME}} mar \"$1\".",
+"nosuchuser"    => "Níl aon úsáideoir ann leis an ainm \"$1\".
+Cinntigh do litriú, nó bain úsáid as an foirm thíos chun cuntas úsáideora nua a chruthú.",
+'nosuchusershort'       => "Níl aon úsáideoir ann leis an ainm \"$1\". Cinntigh do litriú.",
+"wrongpassword" => "D'iontráil tú focal faire mícheart (nó ar iarraidh). Déan iarracht eile le do thoil.",
+"mailmypassword" => "Seol m'fhocal faire chugam.",
+'passwordremindertitle' => "Cuimneachán an fhocail faire ó {{SITENAME}}",
+'passwordremindertext' => "D'iarr duine éigin (tusa de réir cosúlachta, ón seoladh IP $1)
+go sheolfaimis focal faire {{GRAMMAR:genitive|{{SITENAME}}}} nua.
+\"$3\" an focal faire don úsáideoir \"$2\" anois.
+Ba chóir duit lógail isteach anois agus d'fhocal faire a athrú.",
+
+"noemail"       => "Níl aon seoladh ríomhphoist i gcuntas don úsáideoir \"$1\".",
+"passwordsent"  => "Cuireadh focal faire nua chuig an seoladh ríomhphoist atá cláraithe do \"$1\".
+Nuair atá sé agat, logáil isteach arís le do thoil chun fíordheimhniu a dhéanamh.",
+'eauthentsent'	     =>  "Cuireadh teachtaireacht ríomhphoist chuig an seoladh
+chun fíordheimhniú a dhéanamh. Chun fíordheimhniú a dhéanamh gur leatsa an cuntas, caithfidh tú glac leis an teachtaireacht sin nó ní sheolfar aon rud eile chuig do chuntas.",
+'mailerror' => "Tharlaigh earráid leis an seoladh: $1",
+'acct_creation_throttle_hit' => 'Tá brón orainn, ach tá tú i ndiadh $1 cuntas á chruthú. Ní féidir leat níos mó a dhéanamh.',
+
+'emailauthenticated'    => 'D\'fhíordheimhníodh do sheoladh ríomhphoist ar $1.',
+'emailnotauthenticated' => 'Ní dhearna fíordheimhniú ar do sheoladh ríomhphoist fós, agu díchumasaítear na hardtréithe ríomhphoist go dtí go fíordheimhneofaí é (d.c.f.).
+Chun fíordheimhniú a dhéanamh, logáil isteach leis an focal faire neamhbhuan atá seolta chugat, nó iarr ar ceann nua ar an leathanach logála istigh.',
+'invalidemailaddress'   => 'Ní féidir an seoladh ríomhphoist a ghlacadh leis mar is dócha go bhfuil formáid neamhbhailí aige.
+
+Iontráil seoladh dea-fhormáidte le do thoil, nó glan an réimse sin.',
+
+# Edit page toolbar
+'bold_sample'=>'Cló trom',
+'bold_tip'=>'Cló trom',
+'italic_sample'=>'Cló Iodáileach',
+'italic_tip'=>'Cló Iodáileach',
+'link_sample'=>'Ainm naisc',
+'link_tip'=>'Nasc inmhéanach',
+'extlink_sample'=>'http://www.sampla.com ainm naisc',
+'extlink_tip'=>'Nasc seachtrach (cuimhnigh an réimír http://)',
+'headline_sample'=>'Cló ceannlíne',
+'headline_tip'=>'Ceannlíne Leibhéil 2',
+'math_sample'=>'Cuir foirmle isteach anseo',
+'math_tip'=>'Foirmle matamataice (LaTeX)',
+'nowiki_sample'=>'Cuir téacs neamh-fhormáide anseo',
+'nowiki_tip'=>'Scaoil thar ar fhormáid mearshuímh',
+'image_sample'=>'Sámpla.jpg',
+'image_tip'=>'Íomhá leabaithe',
+'media_sample'=>'Sámpla.mp3',
+'media_tip'=>'Nasc chuig comhad meáin',
+'sig_tip'=>'Do shíniú le stampa ama',
+'hr_tip'=>'Líne cothrománach (inúsáidte go coigilteach)',
+
+# Edit pages
+#
+"summary"       => "Achoimriú",
+"subject"       => "Ábhar/ceannlíne",
+"minoredit"     => "Is mionathrú é seo",
+"watchthis"     => "Déan faire ar an lch seo",
+"savearticle"   => "Sábháil an lch",
+"preview"       => "Réamhamharc",
+"showpreview"   => "Taispeáin réamhamharc",
+"blockedtitle"  => "Tá an úsáideoir seo faoi chosc",
+"blockedtext"   => "Chuir $1 cosc ar d'ainm úsáideora nó ar do sheoladh IP.
+Seo é an cúis a thugadh:<br />''$2''<p>Is féidir leat teagmháil a dhéanamh le $1 nó le ceann eile de na
+[[{{MediaWiki:grouppage-sysop}}|riarthóirí]] chun an cosc a phléigh.
+
+Tabhair faoi deara nach bhfuil cead agat an gné \"cuir ríomhphost chuig an úsáideoir seo\" a úsáid
+mura bhfuil seoladh ríomhphoist bailí cláraithe i do [[Special:Preferences|shainroghanna úsáideora]].
+
+Is é $3 do sheoladh IP. Más é do thoil é, déan tagairt den seoladh seo le gach ceist a chuirfeá.",
+'grouppage-sysop' => '{{ns:4}}:Riarthóirí',
+"whitelistedittitle" => "Logáil isteach chun athrú a dhéanamh",
+"whitelistedittext" => "Ní mór duit [[Special:Userlogin|logáil isteach]] chun ailt a athrú.",
+"whitelistreadtitle" => "Logáil isteach chun ailt a léamh",
+"whitelistreadtext" => "Ní mór duit [[Special:Userlogin|logáil isteach]] chun ailt a léamh.",
+"whitelistacctitle" => "Níl cead agat cuntas a chruthú",
+"whitelistacctext" => "Chun cuntais nua a chruthú sa vicí seo, caithfidh tú [[Special:Userlogin|logáil
+isteach]] agus caithfidh go bhfuil an cead riachtanach agat.",
+'loginreqtitle' => 'Tá logáil isteach de dhíth ort',
+"accmailtitle" => "Seoladh an focal faire.",
+"accmailtext" => "Seoladh chuig $2 focal faire an úsáideora '$1'.",
+"newarticle"    => "(Nua)",
+# problem with link: [[{{ns:project}}:Cabhair|leathanach cabhrach]]
+"newarticletext" =>
+"Lean tú nasc chuig leathanach a nach bhfuil ann fós.
+Chun an leathanach a chruthú, tosaigh ag clóscríobh san bosca anseo thíos
+(féach ar an [[{{ns:project}}:Cabhair|leathanach cabhrach]] chun a thuilleadh eolais a fháil).
+Má tháinig tú anseo as dearmad, brúigh an cnaipe '''ar ais''' ar do líonléitheoir.",
+"anontalkpagetext" => "---- ''Is é seo an leathanach plé do úsáideoir gan ainm nach chruthaigh
+cuntas fós nó nach úsáideann a chuntas phéarsanta. Dá bhrí sin, caithfimid an seoladh IP uimhriúil a úsáid
+chun é/í a ionannaigh. Is féidir cuid mhaith úsáideoirí an seoladh IP céanna a úsáid. Má tá tú
+i do úsáideoir gan ainm agus má tá sé do thuairim go rinneadh léiriuithe neamhfheidhmeacha fút,
+[[Special:Userlogin|cruthaigh cuntas nó logáil isteach]] le do thoil chun mearbhall a héalú
+le húsáideoirí eile gan ainmneacha amach anseo.''",
+"noarticletext" => "(Níl aon téacs ar an leathanach seo faoi láthair)",
+'clearyourcache' => "'''Tabhair faoi deara:''' Tar éis duit ábhar a shábháil, ní mór duit
+taisce do líonléitheora chun na hathruithe a fheiceáil After saving, you have to clear your
+browser cache to see the changes: '''Mozilla / Netscape:''' roghnaigh ''Athlódáil''
+(nó ''Ctrl-R''), '''IE / Opera:''' ''Ctrl-F5'', '''Safari:''' ''Cmd-R'', '''Konqueror''' ''Ctrl-R''.",
+'usercssjsyoucanpreview' => "<strong>Leid:</strong> Sula sábhálaím tú, úsáid an cnaipe
+'Réamhamharc' chun do CSS/JS nua a tástáil.",
+'usercsspreview' => "'''Cuimhnigh nach bhfuil seo ach réamhamharc do CSS úsáideora -
+níor sábháladh é go fóill!'''",
+'userjspreview' => "'''Cuimhnigh nach bhfuil seo ach réamhamharc do JavaScript úsáideora
+- níor sábháladh é go fóill!'''",
+"updated"       => "(Leasaithe)",
+"note"	  => "<strong>Tabhair faoi deara:</strong>",
+"previewnote"   => "Cuimhnigh nach bhfuil seo ach réamhamharc, agus nach sábháladh é fós!",
+"previewconflict" => "San réamhamharc seo, feachann tú an téacs dé réir an eagarbhosca
+thuas mar a taispeáinfear é má sábháilfear é.",
+"editing"       => "Ag athrú $1",
+'editinguser'       => "Ag athrú $1",
+"editconflict"  => "Coimhlint athraithe: $1",
+"explainconflict" => "D'athraigh duine eile an leathanach seo ó shin a thosaigh tú ag athrú é.
+Sa bhosca seo thuas feiceann tú téacs an leathanaigh mar atá sé faoi láthair.
+Tá do chuid athruithe sa bhosca thíos.
+Caithfidh tú do chuid athruithe a chumasadh leis an leagan láithreach.
+Nuair a brúann tú ar an cnaipe \"Sábháil an leathanach\", ní shábhálfar aon rud <b>ach
+amháin</b> an téacs sa bhosca thuas.<p>",
+"yourtext"      => "Do chuid téacs",
+"storedversion" => "Eagrán sábháilte",
+"editingold"    => "<strong>AIRE: Tá tú ag athrú eagrán an leathanaigh atá as dáta.
+Dá shábhálfá é, caillfear aon athrú a rinneadh ó shin an eagrán seo.</strong>",
+"yourdiff"      => "Difríochtaí",
+/*"copyrightwarning" => "Tabhair faoi dearadh go scaoiltear gach ceart le {{SITENAME}} de réir tearmaí an <i>GNU Free Documentation License</i> (féach ar $1 le haghaidh tuilleadh eolais).
+Munar mian leat go gcuirfí do chuid scríbhinn in eagar go héadrócaireach agus go n-athdálfaí gan teorainn iad, ná
+tabhair isteach anseo iad.<br />
+Ina theannta sin, geallann tú gur scríobh tú féin an dréacht seo, nó gur chóipeáil tú é ó fhoinse gan chóipcheart
+é. <strong>NÁ TABHAIR ISTEACH OBAIR LE CÓIPCHEART GAN CHEAD!</strong>",*/
+"copyrightwarning2" => "Tabhair faoi dearadh gur féidir le cuiditheoirí eile gach dréacht do {{SITENAME}} a chur in eagar, a athrú agus a scriosadh. Munar mian leat go gcuirfí do chuid scríbhinn in eagar go héadrócaireach agus go n-athdálfaí gan teorainn iad, ná tabhair isteach anseo iad.<br /> Ina theannta sin, geallann tú gur scríobh tú féin an dréacht seo, nó gur chóipeáil tú é ó fhoinse gan chóipcheart é (féach ar $1 le haghaidh tuilleadh eolais). <strong>NÁ TABHAIR ISTEACH OBAIR LE CÓIPCHEART GAN CHEAD!</strong>",
+"longpagewarning" => "AIRE: Tá an leathanach seo $1 cilibheart i bhfad; ní féidir le roinnt brabhsálaithe
+leathanaigh a athrú má tá siad breis agus $1KiB, nó níos fada ná sin.
+Más féidir, giotaigh an leathanach i gcodanna níos bige.",
+"readonlywarning" => "AIRE: Glasáladh an bunachar sonraí, agus mar sin
+ní féidir leat do chuid athruithe a shábháil díreach anois. B'fhéidir gur mhaith leat an téacs a ghearr is
+ghreamú i gcomhad téacs agus é a úsáid níos déanaí.",
+# problem with link: [[Project:Treoirlínte_do_leathanaigh_glasáilte|treoirlínte do leathanaigh glasáilte]]
+"protectedpagewarning" => "AIRE:  Glasáladh an leathanach seo, agus ní féidir le duine ar bith é a athrú
+ach amhaín na húsáideoirí le pribhléidí oibreora córais. Bí cinnte go leanann tú na
+[[Project:Treoirlínte_do_leathanaigh_glasáilte|treoirlínte do leathanaigh
+glasáilte]].",
+
+# History pages
+#
+"revhistory"    => "Stáir athraithe",
+"nohistory"     => "Níl aon stáir athraithe ag an leathanach seo.",
+"revnotfound"   => "Ní bhfuarthas an athrú",
+"revnotfoundtext" => "Ní bhfuarthas seaneagrán an leathanaigh a d'iarr tú ar.
+Cinntigh an URL a d'úsáid tú chun an leathanach seo a rochtain.",
+"loadhist"      => "Ag lódáil stáir an leathanaigh",
+"currentrev"    => "Leagan láithreach",
+"revisionasof"  => "Leagan ó $1",
+'previousrevision'      => '?Leagan níos sine',
+'nextrevision'	  => 'Leagan níos nuaí?',
+'currentrevisionlink'   => 'féach ar an leagan laithreach',
+"cur"	   => "rth",
+"next"	  => "lns",
+"last"	  => "rmh",
+"orig"	  => "bun",
+'histlegend'    => "Difríochtaí a roghnú: marcáil na boscaí de na eagráin atá ag teastail uait á cuir i gcomparáid, agus brúigh Iontráil nó an cnaipe ag bun an leathanaigh.<br />
+Eochair: (rth) = difríocht leis an leagan láithreach,
+(rmh) = difríocht leis an eagrán roimhe, M = mionathrú",
+'deletedrev' => '[scriosta]',
+'histfirst' => 'An ceann is luaithe',
+'histlast' => 'An ceann is déanaí',
+
+# Diffs
+#
+"difference"    => "(Difríochtaí idir leaganacha)",
+"loadingrev"    => "ag lódáil leagan don difríocht",
+"lineno"	=> "Líne $1:",
+"editcurrent"   => "Athraigh leagan láithreach an leathanaigh seo",
+'selectnewerversionfordiff' => 'Roghnaigh leagan níos nuaí mar chomparáid',
+'selectolderversionfordiff' => 'Roghnaigh leagan níos sine mar chomparáid',
+'compareselectedversions' => 'Cuir na leagain roghnaithe i gcomparáid',
+
+# Search results
+#
+"searchresults" => "Torthaí an chuardaigh",
+# problem with link: [[{{ns:project}}:Cuardach|Cuardach sa {{SITENAME}}]]
+"searchresulttext" => "Féach ar [[{{ns:project}}:Cuardach|Cuardach sa {{SITENAME}}]] chun a thuilleadh eolais a fháil maidir le cuardaigh {{GRAMMAR:genitive|{{SITENAME}}}}.",
+"searchsubtitle"   => "Don iarratas \"[[:$1]]\"",
+"searchsubtitleinvalid"   => "Don iarratas \"$1\"",
+"badquery"      => "Iarratas fiosraithe neamhbhailí",
+"badquerytext"  => "Nior éirigh linn d'iarratas a phróiseáil.
+Is dócha go rinne tú cuardach ar focal le níos lú ná trí litir,
+gné a nach bhfuil le tacaíocht aige fós.
+B'fhéidir freisin go mhíchlóshcríobh tú an leagan, mar shampla
+\"éisc agus agus lanna\". Déan athiarracht.",
+"matchtotals"   => "Bhí an cheist \"$1\" ina mhacasamhail le $2 teidil alt
+agus leis an téacs i $3 ailt.",
+"noexactmatch" => "Níl aon leathanach ann leis an teideal áirithe seo air. Tá cuardach á dhéanamh sa téacs iomlán...",
+"titlematches"  => "Tá macasamhla teidil alt ann",
+"notitlematches" => "Níl macasamhla teidil alt ann",
+"textmatches"   => "Tá macasamhla téacs alt ann",
+"notextmatches" => "Níl macasamhla téacs alt ann",
+"prevn"	 => "na $1 roimhe",
+"nextn"	 => "an chéad $1 eile",
+"viewprevnext"  => "Taispeáin ($1) ($2) ($3).",
+"showingresults" => "Ag taispeáint thíos <b>$1</b> toraidh, ag tosachh le #<b>$2</b>.",
+"showingresultsnum" => "Ag taispeáint thíos <b>$3</b> toraidh, ag tosach le #<b>$2</b>.",
+"nonefound"     => "<strong>Tabhair faoi deara</strong>: go minic, ní éiríonn cuardaigh nuair a cuardaítear focail an-coiteanta, m.sh., \"ag\" is \"an\",
+a nach bhfuil innéacsaítear, nó nuair a ceisteann tú níos mó ná téarma amháin (ní
+taispeáintear sna toraidh ach na leathanaigh ina bhfuil go leoir na téarmaí cuardaigh).",
+"powersearch" => "Cuardaigh",
+"powersearchtext" => "
+Cuardaigh sna hainmspásanna :<br />
+$1<br />
+$2 Cuir athsheolaidh in áireamh   Cuardaigh ar $3 $9",
+"searchdisabled" => "<p>Tá brón orainn! Mhíchumasaíodh an cuardach téacs iomlán go sealadach chun luas an tsuímh
+a chosaint. Idir an dá linn, is féidir leat an cuardach Google anseo thíos a úsáid - b'fhéidir go bhfuil sé as dáta.</p>",
+
+"blanknamespace" => "(Gnáth)",
+
+# Preferences page
+#
+"preferences"   => "Sainroghanna",
+"prefsnologin" => "Níl tú logáilte isteach",
+"prefsnologintext"  => "Ní mór duit [[Special:Userlogin|logáil isteach]] chun do chuid sainroghanna phearsanta a shocrú.",
+"prefsreset"    => "D'athraíodh do chuid sainroghanna ar ais chuig an leagan bunúsach ón stóras.",
+"qbsettings"    => "Sainroghanna an bosca uirlisí",
+'qbsettings-none'	=> 'Faic',
+'qbsettings-fixedleft'	=> 'Greamaithe ar chlé',
+'qbsettings-fixedright'	=> 'Greamaithe ar dheis',
+'qbsettings-floatingleft'	=> 'Ag faoileáil ar chlé',
+'qbsettings-floatingright'	=> 'Ag faoileáil ar dheis',
+"changepassword" => "Athraigh d'fhocal faire",
+"skin"	  => "Craiceann",
+"math"	  => "Ag aistriú na matamaitice",
+"dateformat"    => "Formáid dáta",
+'datedefault' => 'Is cuma liom',
+"math_failure"      => "Theip anailís an fhoirmle",
+"math_unknown_error"    => "earráid anaithnid",
+"math_unknown_function" => "foirmle anaithnid",
+"math_lexing_error" => "Theipeadh anailís an fhoclóra",
+"math_syntax_error" => "earráid comhréire",
+'math_image_error'      => 'Theipeadh aistriú an PNG; tástáil má tá na ríomhchláir latex, dvips, gs, agus convert
+i suite go maith.',
+'math_bad_tmpdir'       => 'Ní féidir scríobh chuig an fillteán mata sealadach, nó é a chruthú',
+'math_bad_output'       => 'Ní féidir scríobh chuig an fillteán mata aschomhaid, nó é a chruthú',
+'math_notexvc'  => 'Níl an ríomhchlár texvc ann; féach ar mata/EOLAIS chun é a sainathrú.',
+'prefs-personal' => 'Sonraí úsáideora',
+'prefs-rc' => 'Athruithe le déanaí agus taispeántas stumpaí',
+'prefs-misc' => 'Sainroghanna éagsúla',
+"saveprefs"     => "Sábháil sainroghanna",
+"resetprefs"    => "Athshuigh sainroghanna",
+"oldpassword"   => "Seanfhocal faire",
+"newpassword"   => "Nuafhocal faire",
+"retypenew"     => "Athiontráil an nuafhocal faire",
+"textboxsize"   => "Eagarthóireacht",
+"rows"	  => "Sraitheanna",
+"columns"       => "Colúin",
+"searchresultshead" => "Sainroghanna do toraidh cuardaigh",
+"resultsperpage" => "Cuairt le taispeáint ar gach leathanach",
+"contextlines"  => "Línte le taispeáint do gach cuairt",
+"contextchars"  => "Litreacha chomhthéacs ar gach líne",
+"stubthreshold" => "Tairseach do taispeántas stumpaí",
+"recentchangescount" => "Méid teideal sna hathruithe le déanaí",
+"savedprefs"    => "Sábháladh do chuid sainroghanna.",
+'timezonelegend' => 'Crios ama',
+"timezonetext"  => "Iontráil an méid uaireanta a difríonn do am áitiúil
+den am an freastalaí (UTC).",
+"localtime" => "An t-am áitiúil",
+"timezoneoffset" => "Difear",
+"servertime"    => "Am an freastalaí anois",
+"guesstimezone" => "Líon ón líonléitheoir",
+"defaultns"     => "Cuardaigh sna ranna seo a los éagmaise:",
+'default'	       => 'réamhshocrú',
+'files'			=> 'Comhaid',
+
+# User levels special page
+#
+
+# switching pan
+'editusergroup' => 'Cuir Grúpái Úsáideoirí In Eagar',
+
+# user groups editing
+'saveusergroups' => 'Sábháil Grúpaí Úsáideoirí',
+
+# user groups editing
+#
+'userrights-editusergroup' => 'Cuir grúpaí na n-úsáideoirí in eagar',
+'saveusergroups' => 'Sábháil Grúpaí na n-Úsáideoirí',
+'userrights-groupsmember' => 'Ball de:',
+'userrights-groupsavailable' => 'Grúpaí atá le fáil:',
+'userrights-groupshelp' => 'Roghnaigh na grúpaí a bhfuil tú ag cur an úsáideoir leis nó ag baint an úsáideoir de.
+Ní bheidh aon athrú le grúpaí neamhroghnaithe. Is féidir leat grúpa a díroghnú le húsáid CTRL + cléchliceáil',
+
+# Recent changes
+#
+"changes" => "athruithe",
+"recentchanges" => "Athruithe is déanaí",
+"recentchangestext" => "Déan faire ar na hathruithe is déanaí sa vicí ar an leathanach seo.",
+"rcnote"	=> "Is iad seo a leanas na <strong>$1</strong> athruithe is déanaí sna <strong>$2</strong> lae seo caite.",
+"rcnotefrom"    => "Is iad seo a leanas na hathruithe ó <b>$2</b> (go dti <b>$1</b> taispeánaithe).",
+"rclistfrom"    => "Taispeáin nua-athruithe dom ó <b>$1</b> anuas)",
+# "rclinks"     => "Taispeáin na $1 athruithe is déanaí sna $2 uaire seo caite / $3 laethanta seo caite.",
+# "rclinks"     => "Taispeáin na $1 athruithe is déanaí sna $2 laethanta seo caite.",
+"rclinks"       => "Taispeáin na $1 athruithe is déanaí sna $2 laethanta seo caite; $3 mionathruithe",
+"diff"	  => "difr",
+"hist"	  => "stáir",
+"hide"	  => "Folaigh",
+"show"	  => "taispeán",
+"minoreditletter" => "m",
+"newpageletter" => "N",
+'sectionlink' => '?',
+'number_of_watching_users_pageview'     => '[$1 úsáideoirí ag breathnú]',
+
+# Upload
+#
+"upload"	=> "Uaslódáil comhad",
+"uploadbtn"     => "Uaslódáil comhad",
+"reupload"      => "Athuaslódáil",
+"reuploaddesc"  => "Dul ar ais chuig an fhoirm uaslódála.",
+"uploadnologin" => "Nil tú logáilte isteach",
+"uploadnologintext" => "Ní mór duit <a href=\"" .
+  "{{localurle:Speisialta:Userlogin}}\">logáil isteach</a>
+chun comhaid a huaslódáil.",
+"uploaderror"   => "Earráid uaslódála",
+# problem with link: [[{{ns:project}}:Polasaí_úsáide_íomhá|polasaí úsáide íomhá]]
+# problem with link: [[{{ns:project}}:Liosta_uaslódála|liosta uaslódála]]
+"uploadtext"    => "'''STOP!''' Sul má dhéanann tú uaslódáil anseo,
+bí cinnte an [[{{ns:project}}:Polasaí_úsáide_íomhá|polasaí úsáide íomhá]] atá ag {{SITENAME}} a léamh agus géilleadh dó.
+
+Má tá comhad ann cheana leis an ainm céanna atá tú ag tabhairt don chomhad nua, cuirfear an comhad nua
+in áit an sean-chomhaid gan fógra.
+Mar sin, muna roghnaíonn tú comhad, is fearr féachaint an bhfuil comhad leis an ainm chéanna ann cheana féin.
+
+Le breathnú nó cuardach a dhéanamh ar íomhánna a uaslódáladh cheana féin, téigh go dtí an
+[[Special:Imagelist|liosta íomhánna]] uaslódáilte. Déantar liosta de uaslódála agus scriosaidh ar an [[{{ns:project}}:Liosta_uaslódála|liosta uaslódála]].
+
+Bain úsáid as an bhfoirm thíos chun íomhá-chomhaid nua a uaslódáil. Is féidir leat na h-íomhánna a úsáid i do chuid alt.
+Ar an gcuid is mó de na líonléitheoirí, feicfidh tú cnaipe \"Brabhsáil...\" nó rud éigin mar sin.
+Lé brú ar an gcnaipe seo, gheobhaigh tú an ghnáthbhosca dialóige comhad-oscailte dod'chóras oibriúcháin.
+Nuair a roghnaíonn tú comhad, líonfar ainm an chomhaid sa téacsbhosca in aice leis an gcnaipe.
+Caithfidh tú dearfú le brú sa bhosca beag nach bhfuil tú ag sárú aon chóipcheart leis an suaslódáil seo.
+Brúigh an cnaipe \"Uaslódáil\" chun an uaslódáil a chríochnú. Mura bhfuil nasc Idirlín tapaidh agat,
+beidh roinnt ama uait leis seo.
+
+Is iad na formáidí inmholta ná JPEG do íomhánna grianghrafa, PNG do pictiúir tarraingte agus léaráidí,
+agus OGG d'huaimeanna. Ainmnigh do chuid comhad i mbealach a mbeidh sé éasca ciall a bhaint astu, chun dul
+amú a sheachaint. Chun an íomhá a úsáid san alt, úsáid nasc mar seo:
+
+'''<nowiki>[[</nowiki>{{ns:6}}<nowiki>:comhad.jpg]]</nowiki>'''
+nó '''<nowiki>[[</nowiki>{{ns:6}}<nowiki>:íomhá.png|téacs eile]]</nowiki>''',
+nó '''<nowiki>[[</nowiki>{{ns:-2}}<nowiki>:comhad.ogg]]</nowiki>''' d'fhuaimeanna.
+
+Mar is fíor maidir le leathanaigh {{GRAMMAR:genitive|{{SITENAME}}}}, is féidir le daoine eile do chuid comhad
+
+uaslódáilte a athrú nó a
+scriosadh, má shíltear go bhfuil sé i gcabhair don ciclipéid. Má bhaineann tú mí-úsáid as an gcóras tá seans
+go gcoscfar ón gcóras tú.",
+
+"uploadlog"     => "Stair uaslódála",
+"uploadlogpage" => "Stair_uaslódála",
+"uploadlogpagetext" => "Is liosta é seo a leanas de na uaslódáil comhad is deanaí.
+Is am an freastalaí (UTC) iad na hamanna atá anseo thíos.
+<ul>
+</ul>",
+"filename"      => "Comhadainm",
+"filedesc"      => "Achoimriú",
+"filestatus" => "Stádas cóipchirt",
+"filesource" => "Foinse",
+"copyrightpage" => "{{ns:4}}:Cóipchearta",
+"copyrightpagename" => "Cóipcheart {{GRAMMAR:genitive|{{SITENAME}}}}",
+"uploadedfiles" => "Comhaid uaslódáilte",
+"minlength"     => "Caithfidh trí litreacha ar a laghad bheith ann sa comhadainm.",
+'illegalfilename'       => 'Tá litreacha san comhadainm  "$1" nach ceadaítear in ainm leathanaigh. Athainmnigh
+an comhad agus déan athiarracht, más é do thoil é.',
+"badfilename"   => "D'athraíodh an comhadainm bheith \"$1\".",
+"badfiletype"   => "Níl \".$1\" ina formáid comhaid íomhá inmholta.",
+"largefile"     => "Moltar nach uaslódálaítear comhaid íomhá thar 100kb i méid.",
+'emptyfile'	     => "De réir a chuma, ní aon rud san chomhad a d'uaslódáil tú ach comhad folamh. Is dócha gur
+míchruinneas é seo san ainm chomhaid. Seiceáil más é an comhad seo atá le huaslódáil agat.",
+"successfulupload" => "Uaslódáil rathúil",
+"fileuploaded"  => "Uaslódáladh an comhad \"$1\" go rathúil.
+Lean an nasc seo: ($2) chuig an leathanach cuir sios agus líon isteach
+eolas faoin comhad, mar shampla cá bhfuarthas é, cathain a
+chruthaíodh é agus rud eile ar bith tá 'fhios agat faoi. Más íomhá an comhad seo,
+is féidir leat é a hionsú mar sin: <tt><nowiki>[[</nowiki>{{ns:image}}<nowiki>:$1|thumb|Cur síos]]</nowiki></tt>",
+"uploadwarning" => "Rabhadh suaslódála",
+"savefile"      => "Sábháil comhad",
+"uploadedimage" => "D'uaslódáladh \"$1\"",
+'uploaddisabled' => 'Tá brón orainn, díchumasaítear an córas uaslódála faoi láthair.',
+'uploadcorrupt' => 'Tá an comhad truaillithe nó tá iarmhír comhadainm neamhbhailí aige. Scrúdaigh an comhad agus
+uaslódáil é arís, le do thoil.',
+'uploadvirus' => 'Tá víreas ann sa comhad seo! Eolas: $1',
+'sourcefilename' => 'Comhadainm foinse',
+'destfilename' => 'Comhadainm sprice',
+
+# Image list
+#
+"imagelist"     => "Liosta íomhánna",
+"imagelisttext" => "Is liosta é seo a leanas de $1 íomhánna, curtha in eagar le $2.",
+"getimagelist"  => "ag fáil an liosta íomhánna",
+"ilsubmit"      => "Cuardaigh",
+"showlast"      => "Taispeáin na $1 íomhánna seo caite, curtha in eagar le $2.",
+"byname"	=> "de réir hainm",
+"bydate"	=> "de réir dáta",
+"bysize"	=> "de réir méid",
+"imgdelete"     => "scrios",
+"imgdesc"       => "curs",
+"imglegend"     => "Eochair: (curs) = taispeáin/athraigh an cur síos comhaid.",
+"imghistory"    => "Stair an chomhaid",
+"revertimg"     => "ath",
+"deleteimg"     => "scr",
+"deleteimgcompletely"     => "Scrios gach leasú don comhad seo",
+"imghistlegend" => "Eochair: (rth) = an leagan láithreach is ea seo, (scr) = scrios an
+seanleagan seo, (ath) = athúsáid an seanleagan seo.
+<br /><i>Bruigh an dáta chun feach ar an íomhá mar a suaslódálaíodh é ar an dáta sin</i>.",
+"imagelinks"    => "Naisc íomhá",
+"linkstoimage"  => "Is iad na leathanaigh seo a leanas a nascaíonn chuig an íomhá seo:",
+"nolinkstoimage" => "Níl aon leathanach ann a nascaíonn chuig an íomhá seo.",
+'sharedupload' => 'Is uaslodáil roinnte atá ann sa comhad seo, agus is féidir le tionscadail eile é a úsáid.',
+'shareduploadwiki' => 'Féach ar an [leathanach cur síos don comhad $1] le tuilleadh eolais.',
+'noimage'       => 'Níl aon chomhad ann leis an ainm seo, ba féidir leat [$1 é a uaslódáil]',
+'uploadnewversion-linktext' => 'Uaslódáil leagan nua den comhad seo',
+
+# Statistics
+#
+"statistics"    => "Staidreamh",
+"sitestats"     => "Staidreamh do {{SITENAME}}",
+"userstats"     => "Staidreamh úsáideora",
+"sitestatstext" => "Is é '''$1''' líon na leathanach sa bunachar sonraí.
+Cuirtear leathanaigh \"phlé\", leathanaigh a bhaineann le {{SITENAME}} í fhéin, ailt \"stumpaí\"
+íosmhéadacha, athsheolaidh, agus leathanaigh eile nach cáileann mar ailt i ndáiríre, san áireamh.
+Ag fágáil na leathanaigh seo as, tá '''$2''' leathanaigh ann atá ina nailt dlisteanacha, is dócha.
+
+In iomlán tá '''$3''' radhairc leathanaigh, agus ''''$4''' athruithe leathanaigh sa {{SITENAME}}
+ó thus athchóiriú an vicí (25 Eanáir, 2004).
+Is é sin '''$5''' athruithe ar meán do gach leathanach, agus '''$6''' radhairc do gach athrú.",
+"userstatstext" => "Tá '''$1''' úsáideoirí cláraithe anseo.
+Tá '''$2''' de na úsáideoirí seo ina riarthóirí (féach ar $3).",
+
+# Maintenance Page
+#
+"disambiguations"   => "Leathanaigh idirdhealaithe",
+"disambiguationspage"   => "{{ns:project}}:Naisc_go_leathanaigh_idirdhealaithe",
+"disambiguationstext"   => "Nascaíonn na ailt seo a leanas go <i>leathanach
+idirdhealaithe</i>. Ba chóir dóibh nasc a dhéanamh dón ábhar áirithe atá i gceist.<br />Tugtar
+an teideal \"idirdhealán\" ar leathanach má tá nasc ar $1 dó.<br /><i>Ní</i> cuirtear ar
+an liosta seo naisc as na hainmspásanna eile.",
+"doubleredirects"   => "Athsheolaidh dúbailte",
+"doubleredirectstext"   => "<b>Tabhair faoi deara:</b> B'fheidir go bhfuil toraidh bréagacha ar an liosta seo.
+De ghnáth cíallaíonn sé sin go bhfuil téacs breise le naisc thíos sa chéad #REDIRECT no #ATHSHEOLADH.<br />\n Sa
+gach sraith tá náisc chuig an chéad is an dara athsheoladh, chomh maith le chéad líne an dara téacs athsheolaidh. De
+ghnáth tugann sé sin an sprioc-alt \"fíor\".",
+"brokenredirects"   => "Athsheolaidh Briste",
+"brokenredirectstext"   => "Is iad na athsheolaidh seo a leanas a nascaíonn go ailt nach bhfuil ann fós.",
+
+
+# Miscellaneous special pages
+#
+"lonelypages"   => "Leathanaigh dhílleachtacha",
+'uncategorizedpages'    => 'Leathanaigh gan catagóir',
+'unusedcategories' => 'Catagóirí nach úsáidtear',
+"unusedimages"  => "Íomhánna nach úsáidtear",
+"popularpages"  => "Leathanaigh coitianta",
+"nviews"	=> "$1 radhairc",
+"wantedpages"   => "Leathanaigh de dhíth",
+"nlinks"	=> "$1 naisc",
+"allpages"      => "Na leathanaigh go léir",
+'nextpage'	      => 'An lch a leanas ($1)',
+"randompage"    => "Leathanach fánach",
+"shortpages"    => "Leathanaigh gearra",
+"longpages"     => "Leathanaigh fada",
+'deadendpages'  => 'Leathanaigh caocha',
+"listusers"     => "Liosta úsáideoirí",
+"specialpages"  => "Leathanaigh speisialta",
+"spheading"     => "Leathanaigh speisialta do gach úsáideoir",
+
+"recentchangeslinked" => "Athruithe gaolmhara",
+"rclsub"	=> "(go leathanaigh nasctha ó \"$1\")",
+"newpages"      => "Leathanaigh nua",
+"ancientpages"      => "Na leathanaigh is sine",
+"intl"      => "Naisc idirtheangacha",
+'move' => 'Athainmnigh',
+"movethispage"  => "Athainmnigh an leathanach seo",
+"unusedimagestext" => "<p>Tabhair faoi deara gur féidir le shuímh
+eile naisc a dhéanamh leis an íomha le URL díreach,
+agus mar sin bheadh siad ar an liosta seo fós cé go bhfuil siad
+in úsáid faoi láthair.",
+'unusedcategoriestext' => 'Tá na leathanaigh catagóire seo a leanas ann, cé nach úsáidtear
+iad in aon alt eile nó in aon chatagóir eile.',
+"booksources"   => "Leabharfhoinsí",
+'categoriespagetext' => 'Tá na catagóir seo a leanas ann sa vicí.',
+'data'  => 'Sonraí',
+"booksourcetext" => "Liosta is ea seo thíos de suímh eile a
+dhíolann leabhair nua agus athdhíolta, agus tá seans ann go bhfuil eolas
+breise acu maidir leis na leabhair a bhfuil tú ag iarradh ar.
+Níl aon baint ag {{SITENAME}} le gnó ar bith anseo, agus ní
+aontú leo é an liosta seo.",
+'isbn'  => 'ISBN',
+"alphaindexline" => "$1 go $2",
+'version'	       => 'Leagan',
+'log'	   => 'Logaí',
+'alllogstext'   => 'Taispeántas comhcheangaltha de logaí a bhaineann le huaslódáil, scriosadh, glasáil, coisc,
+agus oibreoirí córais. Is féidir leat an taispeántas a ghéarú - roghnaigh an saghas loga, an ainm úsáideora, nó an
+leathanach atá i gceist agat.',
+
+# Special:Allpages
+'nextpage'	  => 'An leathanach a leanas ($1)',
+'allarticles'       => 'Gach alt',
+'allpagesprev'      => 'Roimhe',
+'allpagesnext'      => 'Ar aghaidh',
+'allpagessubmit'    => 'Dul',
+
+# Email this user
+#
+"mailnologin"   => "Níl aon seoladh maith ann",
+"mailnologintext" => "Ní mór duit bheith  [[Special:Userlogin|logáilte isteach]]
+agus bheith le seoladh ríomhphoist bhailí i do chuid [[Special:Preferences|sainroghanna]]
+más mian leat ríomhphost a sheoladh chuig úsáideoirí eile.",
+"emailuser"     => "Cuir ríomhphost chuig an úsáideoir seo",
+"emailpage"     => "Seol ríomhphost",
+"emailpagetext" => "Má d'iontráil an úsáideoir seo seoladh ríomhphoist bhailí
+ina chuid sainroghanna úsáideora, cuirfidh an foirm anseo thíos teachtaireacht amháin do.
+Beidh do seoladh ríomhphoist a d'iontráil tú i do chuid sainroghanna úsáideora
+sa bhosca \"Seoltóir\" an riomhphoist, agus mar sin ba féidir léis an faighteoir ríomhphost eile a chur leatsa.",
+'usermailererror' => 'Earráid leis an píosa ríomhphoist:',
+'defemailsubject'  => "Ríomhphost {{GRAMMAR:genitive|{{SITENAME}}}}",
+"noemailtitle"  => "Níl aon seoladh ríomhphoist ann",
+"noemailtext"   => "Níor thug an úsáideoir seo seoladh ríomhphoist bhailí, nó shocraigh sé nach
+mian leis ríomhphost a fháil ón úsáideoirí eile.",
+"emailfrom"     => "Seoltóir",
+"emailto"       => "Chuig",
+"emailsubject"  => "Ábhar",
+"emailmessage"  => "Teachtaireacht",
+"emailsend"     => "Seol",
+"emailsent"     => "Ríomhphost seolta",
+"emailsenttext" => "Seoladh do theachtaireacht ríomhphoist go ráthúil.",
+
+# Watchlist
+#
+"watchlist"     => "Mo liosta faire",
+"mywatchlist"     => "Mo liosta faire",
+"nowatchlist"   => "Níl aon rud i do liosta faire.",
+"watchnologin"  => "Níl tú logáilte isteach",
+/*"watchnologintext"  => "Ní mór duit <a href=\"" .
+  "{{localurle:Speisialta:Userlogin}}\">logáil isteach</a>
+chun do liosta faire a athrú.",*/
+"addedwatch"    => "Curtha san liosta faire",
+"addedwatchtext" => "Cuireadh an leathanach \"$1\" le do [[Special:Watchlist|liosta faire]].
+Cuirfear athruithe amach anseo, don leathanach sin agus don leathanach phlé, ar an liosta ann,
+agus beidh '''cló trom''' ar a theideal san [[Special:Recentchanges|liosta de na hathruithe is déanaí]] sa chaoi go bhfeicfeá iad go héasca.
+
+Más mian leat an leathanach a bain amach do liosta faire níos déanaí, brúigh ar \"Stop ag faire\" ar an taobhbharra.",
+"removedwatch"  => "Bainthe amach ón liosta faire",
+"removedwatchtext" => "Baineadh an leathanach \"$1\" amach ó do liosta faire.",
+'watch' => 'Fair',
+"watchthispage" => "Fair ar an leathanach seo",
+'unwatch' => 'Stop ag faire',
+"unwatchthispage" => "Stop ag faire",
+"notanarticle"  => "Níl alt ann",
+"watchnochange" => "Níor athraíodh ceann ar bith de na leathanaigh atá ar do liosta faire,
+taobh istigh den tréimhse atá roghnaithe agat.",
+"watchdetails" => "Tá tú ag faire ar $1 leathanaigh, gan leathanaigh phlé a chur san áireamh.",
+"watchmethod-recent" => "ag seiceáil na athruithe deireanacha ar do chuid leathanaigh faire",
+"watchmethod-list" => "ag seiceáil na leathanaigh faire ar do chuid athruithe deireanacha",
+"removechecked" => "Bain míreanna marcálaithe as do liosta faire",
+"watchlistcontains" => "Tá $1 leathanaigh i do liosta faire.",
+"watcheditlist" => "Is é seo liosta de na leathanaigh i do liosta faire, in ord aibitre.
+Marcáil boscaí de na leathanaigh atá le baint amach an liosta faire, agus bruigh
+an cnaipe 'bain amach le marcanna' ag bun an leathanaigh.",
+"removingchecked" => "Ag baint amach na míreanna ón liosta faire, mar a iarraidh...",
+"couldntremove" => "Níor baineadh amach an mír '$1'...",
+"iteminvalidname" => "Fadhb leis an mír '$1', ainm neamhbhailí...",
+"wlnote" => "Is iad seo na $1 athruithe deireanacha sna <b>$2</b> uaire deireanacha.",
+"wlshowlast" => "Taispeáin an $1 uair $2 lá seo caite$3", #FIXME
+'wlsaved'	 => 'Leagan sábháilte is ea seo de do liosta faire.',
+'wlhideshowown'   => '$1 mo chuid athruithe.',
+
+'updatedmarker'	 => 'leasaithe (ó shin mo chuairt dheireanach)',
+
+'enotif_mailer' 		=> 'Fógrasheoltóir as {{SITENAME}}',
+'enotif_reset'			=> 'Marcáil gach leathanach bheith tadhlaithe',
+'enotif_newpagetext'=> 'Is leathanach nua é seo.',
+'changed'			=> 'D\'athraigh',
+'created'			=> 'Cruthaigh',
+'enotif_subject' 	=> '  $CHANGEDORCREATED $PAGEEDITOR an leathanach $PAGETITLE ag {{SITENAME}}.',
+'enotif_lastvisited' => 'Féach ar $1 le haghaidh gach athrú a rinneadh ó thús na cuairte seo caite a rinne tú.',
+'enotif_body' => 'A $WATCHINGUSERNAME, a chara,
+
+$CHANGEDORCREATED $PAGEEDITOR an leathanach $PAGETITLE  ag {{SITENAME}} ar $PAGEEDITDATE, féach ar $PAGETITLE_URL chun an leagan reatha a fháil.
+
+$NEWPAGE
+
+Athchoimriú an úsáideora a rinne é: $PAGESUMMARY $PAGEMINOREDIT
+
+Déan teagmháil leis an úsáideoir:
+r-phost: $PAGEEDITOR_EMAIL
+vicí: $PAGEEDITOR_WIKI
+
+I gcás athruithe eile, ní bheidh aon fhógra eile muna dtéann tú go dtí an leathanach seo. Ba féidir leat na bratacha fógraithe a athrú do gach leathanach ar do liosta faire.
+
+	     Is mise le meas,
+	     An fógrachóras uathoibríoch ag {{SITENAME}}
+
+--
+Chun do chuid socruithe a athrú maidir leis an liosta faire, teir go dtí
+{{fullurl:Special:Watchlist/edit}}
+
+Aiseolas agus a thuilleadh cabhrach:
+{{fullurl:{{MediaWiki:helppage}}}}',
+
+# Delete/protect/revert
+#
+"deletepage"    => "Scrios an leathanach",
+"confirm"       => "Cinntigh",
+"excontent" => "is é seo a raibh an ábhar:",
+"exbeforeblank" => "is é seo a raibh an ábhar roimh an folmhadh:",
+"exblank" => "bhí an leathanach folamh",
+"confirmdelete" => "Cinntigh an scriosadh",
+"deletesub"     => "(Ag scriosadh \"$1\")",
+"historywarning" => "Aire: Ta stair ag an leathanach a bhfuil tú ar tí é a scriosadh:",
+# problem with link: [[{{ns:project}}:Polasaí]]
+"confirmdeletetext" => "Tá tú ar tí leathanach nó íomhá a scrios,
+chomh maith leis a chuid stair, ón bunachar sonraí.
+Cinntigh go mian leis an méid seo a dhéanamh, go dtuigeann tú na
+iarmhairtaí, agus go ndéanann tú é dar le [[{{ns:project}}:Polasaí]].",
+"actioncomplete" => "Gníomh críochnaithe",
+"deletedtext"   => "scriosadh \"$1\".
+Féach ar $2 chun cuntas na scriosiadh deireanacha a fháil.",
+"deletedarticle" => "scriosadh \"$1\"",
+"dellogpage"    => "Cuntas_scriosaidh",
+"dellogpagetext" => "Seo é liosta de na scriosaidh is deireanacha.
+Is in am an freastalaí (UTC) iad na hamanna anseo thíos.
+<ul>
+</ul>",
+"deletionlog"   => "cuntas scriosaidh",
+"reverted"      => "Tá eagrán níos luaithe in úsáid anois",
+"deletecomment" => "Cúis don scriosadh",
+"imagereverted" => "D'éirigh le athúsáid eagráin níos luaithe.",
+"rollback"      => "Athúsáid seanathruithe",
+"rollbacklink"  => "athúsáid",
+"rollbackfailed" => "Theip an athúsáid",
+"cantrollback"  => "Ní féidir an athrú a athúsáid; ba é údar an ailt an t-aon duine a rinne athrú dó.",
+"alreadyrolled" => "Ní féidir eagrán níos luaí an leathanaigh [[:$1]]
+le [[User:$2|$2]] ([[User talk:$2|Plé]]) a athúsáid; d'athraigh duine eile é cheana fein, nó
+d'athúsáid duine eile eagrán níos luaí cheana féin.
+
+[[User:$3|$3]] ([[User talk:$3|Plé]]) an té a rinne an athrú is déanaí.",
+#   only shown if there is an edit comment
+"editcomment" => "Seo a raibh an mínithe athraithe: \"<i>$1</i>\".",
+"revertpage"    => "D'athúsáideadh an athrú seo caite le $1",
+"protectlogpage" => "Cuntas_cosanta",
+# problem with link: [[{{ns:4}}:Leathanach glasáilte]]
+"protectlogtext" => "Seo é liosta de glais a cuireadh ar / baineadh de leathanaigh.
+Féach ar [[{{ns:4}}:Leathanach glasáilte]] chun a thuilleadh eolais a fháil.",
+'protectedarticle' => 'glasáladh "[[$1]]"',
+'unprotectedarticle' => 'díghlasáladh "[[$1]]"',
+'protectsub' =>'(Ag glasáil "$1")',
+'confirmprotecttext' => 'Ar mhaith leat go fírinneach an leathanach seo a ghlasáil?',
+'confirmprotect' => 'Cinntigh an glasáil',
+'protectcomment' => 'Cúis don glasáil',
+'unprotectsub' =>"(Ag díghlasáil \"$1\")",
+'confirmunprotecttext' => 'Ar mhaith leat go fírinneach an leathanach seo a díghlasáil?',
+'confirmunprotect' => 'Cinntigh baint an glais',
+'unprotectcomment' => 'Cúis do baint an glais',
+
+# Undelete
+"undelete" => "Díscrios leathanach scriosta",
+"undeletepage" => "Féach ar leathanaigh scriosta agus díscrios iad",
+"undeletepagetext" => "Scriosaíodh na leathanaigh seo a leanas cheana féin, ach
+tá síad sa cartlann fós agus is féidir iad a dhíscrios.
+Ó am go ham, is féidir an cartlann a fholmhú.",
+"undeletearticle" => "Díscrios alt scriosta",
+"undeleterevisions" => "Cuireadh $1 leagain sa chartlann",
+"undeletehistory" => "Dá díscriosfá an leathanach, díscriosfar gach leasú i stair an leathanaigh.
+Dá gcruthaíodh leathanach nua leis an teideal céanna ó shin an scriosadh, taispeáinfear
+na sean-athruithe san stair roimhe seo, agus ní athshuífear leagan láithreach an
+
+leathanaigh go huathoibríoch.",
+"undeleterevision" => "Leagan scriosta den dáta $1",
+"undeletebtn" => "Díscrios!",
+"undeletedarticle" => "Díscriosadh \"$1\" ar ais",
+
+
+# Namespace form on various pages
+'namespace' => 'Ainmspás:',
+'invert' => 'Cuir an roghnú bun os cionn',
+
+# Contributions
+#
+"contributions" => "Dréachtaí úsáideora",
+"mycontris" => "Mo chuid dréachtaí",
+"contribsub2"    => "Do $1 ($2)",
+"nocontribs"    => "Níor bhfuarthas aon athrú a raibh cosúil le na crítéir seo.",
+"ucnote"	=> "Is iad seo thíos na <b>$1</b> athruithe is déanaí a rinne an
+
+úsáideoir sna <b>$2</b> lae
+
+seo caite.",
+"uclinks"       => "Féach ar na $1 athruithe is déanaí; féach ar na $2 lae seo caite.",
+"uctop"     => " (barr)" ,
+'newbies'       => 'núíosaigh',
+
+# What links here
+#
+"whatlinkshere" => "Naisc don leathanch seo",
+"notargettitle" => "Níl aon cuspóir ann",
+"notargettext"  => "Níor thug tú leathanach nó úsáideoir sprice
+chun an gníomh seo a dhéanamh ar.",
+"linklistsub"   => "(Liosta nasc)",
+"linkshere"     => "Nascaíonn na leathanaigh seo a leanas chuig an leathanach seo:",
+"nolinkshere"   => "Ní nascaíonn aon leathanach chuig an leathanach seo.",
+"isredirect"    => "Leathanach athsheolaidh",
+
+# Block/unblock IP
+#
+"blockip"       => "Coisc úsáideoir",
+#problem with link: [[{{ns:project}}:Polasaí|polasaí {{GRAMMAR:genitive|{{SITENAME}}}}]]
+"blockiptext"   => "Úsáid an foirm anseo thíos chun bealach scríofa a chosc ó
+seoladh IP nó ainm úsáideora áirithe.
+Is féidir leat an rud seo a dhéanamh amháin chun an chreachadóireacht a chosc, de réir
+mar a deirtear sa [[{{ns:project}}:Polasaí|polasaí {{GRAMMAR:genitive|{{SITENAME}}}}]].
+Líonaigh cúis áirithe anseo thíos (mar shampla, is féidir leat a luaigh
+leathanaigh áirithe a rinne an duine damáiste ar).",
+"ipaddress"     => "Seoladh IP / ainm úsáideora",
+'ipbexpiry'	     => 'Am éaga',
+"ipbreason"     => "Cúis",
+"ipbsubmit"     => "Coisc an úsáideoir seo",
+'ipbother'	      => 'Méid eile ama',
+'ipboptions'	    => '2 uair:2 hours,1 lá amháin:1 day,3 lá:3 days,1 sheachtain amháin:1 week,2 sheachtain:2 weeks,1 mhí amháin:1 month,3 mhí:3 months,6 mhí:6 months,1 bhliain amháin:1 year,gan teorainn:infinite',
+'ipbotheroption'	=> 'eile',
+"badipaddress"  => "Níl aon úsáideoir ann leis an ainm seo.",
+"blockipsuccesssub" => "D'éirigh leis an cosc",
+"blockipsuccesstext" => "Choisceadh [[{{ns:Special}}:Contributions/$1|$1]].
+<br />Féach ar an g[[{{ns:Special}}:Ipblocklist|liosta coisc IP]] chun coisc a athbhreithniú.",
+"unblockip"     => "Díchoisc úsáideoir",
+"unblockiptext" => "Úsáid an foirm anseo thíos chun bealach scríofa a thabhairt ar ais do seoladh
+IP nó ainm úsáideora a raibh faoi chosc roimhe seo.",
+"ipusubmit"     => "Díchoisc an seoladh seo",
+"ipblocklist"   => "Liosta seoltaí IP agus ainmneacha úsáideoirí coiscthe",
+"blocklistline" => "$1, $2 a choisc $3 (am éaga $4)",
+"blocklink"     => "Cosc",
+"unblocklink"   => "bain an cosc",
+"contribslink"  => "dréachtaí",
+"autoblocker"   => "Coisceadh go huathoibríoch thú dá bharr gur úsáideadh do sheoladh IP ag an úsáideoir \"[[User:$1|$1]]\". Is é seo an cúis don cosc ar $1: \"$2\".",
+"blocklogpage"  => "Cuntas_coisc",
+"blocklogentry" => 'coisceadh "$1"; is é $2 an am éaga',
+"blocklogtext"  => "Seo é cuntas de gníomhartha coisc úsáideoirí agus míchoisc úsáideoirí. Ní cuirtear
+seoltaí IP a raibh coiscthe go huathoibríoch ar an liosta seo. Féach ar an
+[[Special:Ipblocklist|Liosta coisc IP]] chun
+liosta a fháil de coisc atá i bhfeidhm faoi láthair.",
+"unblocklogentry"   => 'díchoisceadh $1',
+'range_block_disabled'  => 'Faoi láthair, míchumasaítear an cumas riarthóra chun réimsechoisc a dhéanamh.',
+'ipb_expiry_invalid'    => 'Am éaga neamhbhailí.',
+'ip_range_invalid'      => "Réimse IP neamhbhailí.",
+'proxyblocker'  => 'Cosc ar seachfhreastalaithe',
+'proxyblockreason'      => "Coisceadh do sheoladh IP dá bharr gur seachfhreastalaí
+neamhshlándála is ea é. Déan teagmháil le do chomhlacht idirlín nó le do lucht cabhrach teicneolaíochta
+go mbeidh 'fhios acu faoin fadhb slándála tábhachtach seo.",
+'proxyblocksuccess'     => "Rinneadh.",
+'sorbs'	 => 'DNSBL SORBS',
+'sorbsreason'   => 'Liostalaítear do sheoladh IP mar sheachfhreastalaí oscailte sa DNSBL [http://www.sorbs.net SORBS].',
+
+# Developer tools
+#
+"lockdb"	=> "Glasáil an bunachar sonraí",
+"unlockdb"      => "Díghlasáil bunachar sonraí",
+"lockdbtext"    => "Dá nglasálfá an bunachar sonraí, ní beidh cead ar aon úsáideoir
+leathanaigh a chur in eagar, a socruithe a athrú, a liostaí faire a athrú, nó rudaí eile a thrachtann le
+athruithe san bunachar sonraí.
+Cinntigh go bhfuil an scéal seo d'intinn agat, is go díghlasálfaidh tú an bunachar sonraí nuair a bhfuil
+do chuid cothabháile críochnaithe.",
+"unlockdbtext"  => "Dá díghlasálfá an bunachar sonraí, beidh ceat ag gach úsáideoirí aris
+na leathanaigh a chur in eagar, a sainroghanna a athrú, a liostaí faire a athrú, agus rudaí eile
+a dhéanamh a thrachtann le athruithe san bunachar sonraí.
+Cinntigh go bhfuil an scéal seo d'intinn agat.",
+"lockconfirm"   => "Sea, is mian liom an bunachar sonraí a ghlasáil.",
+"unlockconfirm" => "Sea, is mian liom an bunachar sonraí a dhíghlasáil.",
+"lockbtn"       => "Glasáil an bunachar sonraí",
+"unlockbtn"     => "Díghlasáil an bunachar sonraí",
+"locknoconfirm" => "Níor mharcáil tú an bosca daingnithe.",
+"lockdbsuccesssub" => "D'éirigh le glasáil an bhunachair sonraí",
+"unlockdbsuccesssub" => "D'éirigh le díghlasáil an bhunachair sonraí",
+"lockdbsuccesstext" => "Glasáladh an bunachar sonraí {{GRAMMAR:genitive|{{SITENAME}}}}.
+<br />Cuimhnigh nach mór duit é a dhíghlasáil tar éis do chuid cothabháil.",
+"unlockdbsuccesstext" => "Díghlasáladh an bunachar sonraí {{GRAMMAR:genitive|{{SITENAME}}}}.",
+
+# SQL query
+
+# Move page
+#
+"movepage"      => "Athainmnigh an leathanach",
+# problem with link: [[Special:Maintenance|cuardach]] does not exist per default
+"movepagetext"  => "Úsáid an foirm seo thíos chun leathanach a hathainmniú. Aistreofar a chuid
+stair go léir chuig an teideal nua.
+Déanfar leathanach athsheolaidh den sean-theideal chuig an teideal nua.
+Ní athreofar naisc chuig sean-teidil an leathanaigh. Bí cinnte go ndéanfá
+[[Special:Maintenance|cuardach]] ar athsheolaidh dubáilte nó briste.
+Tá tú freagrach i cinnteach go leanann naisc chuig an pointe a bhfuil siad ag aimsiú ar.
+
+Tabhair faoi deara '''nach''' n-athainmneofar an leathanach má tá leathanach
+ann cheana féin faoin teideal nua, mura bhfuil sé folamh nó athsheoladh nó mura bhfuil aon
+stair athraithe aige cheana. Ciallaíonn sé sin go féidir leat leathanach a athainmniú ar ais
+chuig an áit ina raibh sé roimhe má dhéanfá botún, agus ní féidir leat leathanach atá ann a fhorscriobh ar.
+
+<b>AIRE!</b>
+Is athrú tábhachtach é athainmniú má tá leathanach coitianta i gceist;
+cinntigh go dtuigeann tú na iarmhairtí go léir roimh a leanfá.",
+"movepagetalktext" => "Aistreofar an leathanach phlé leis, má tá sin ann:
+*'''muna''' bhfuil tú ag aistriú an leathanach trasna ainmspásanna,
+*'''muna''' bhfuil leathanach phlé neamhfholamh ann leis an teideal nua, nó
+*'''muna''' bhaineann tú an marc den bosca anseo thíos.
+
+Sna scéil sin, caithfidh tú an leathanach a aistrigh nó a báigh leis na lámha má tá sin an rud atá uait.",
+"movearticle"   => "Athainmnigh an leathanach",
+"movenologin"   => "Níl tú logáilte isteach",
+"movenologintext" => "Ní mór duit bheith i d'úsáideoir cláraithe agus <a href=\"" .
+  "{{localurle:Speisialta:Userlogin}}\">logáilte isteach</a>
+chun leathanach a hathainmniú.",
+"newtitle"      => "Go teideal nua",
+"movepagebtn"   => "Athainmnigh an leathanach",
+"pagemovedsub"  => "D'éirigh leis an athainmniú",
+"pagemovedtext" => "D'athainmníodh an leathanach \"[[$1]]\" chuig \"[[$2]]\".",
+"articleexists" => "Tá leathanach leis an teideal seo ann fós, nó níl an
+teideal a rinne tú rogha air ina theideal bailí.
+Toghaigh teideal eile le do thoil.",
+"talkexists"    => "D'athainmníodh an leathanach é féin go rathúil, ach ní raibh sé ar a chumas an
+leathanach phlé a hathainmniú dá bharr go bhfuil ceann ann cheana féin ag an teideal nua.
+Báigh tusa féin iad, le do thoil.",
+"movedto"       => "athainmnithe go",
+"movetalk"      => "Athainmnigh an leathanach \"phlé\" freisin, má bhfuil an leathanach sin ann.",
+"talkpagemoved" => "D'athainmníodh an leathanach phlé frithiontráil.",
+"talkpagenotmoved" => "<strong>Níor</strong> athainmníodh an leathanach phlé frithiontráil.",
+'1movedto2'	     => "D'athainmníodh $1 bheith $2",
+'1movedto2_redir' => "D'athainmníodh $1 bheith $2 thar athsheoladh",
+'movelogpage' => 'Athainmnigh loga',
+'movelogpagetext' => 'Liosta is ea seo thíos de leathanaigh athainmnithe.',
+'movereason'	=> 'Cúis',
+'revertmove'	=> 'athúsáid',
+'delete_and_move' => 'Scrios agus athainmnigh',
+'delete_and_move_text'	=>
+'==Tá scrios riachtanach==
+
+Tá an t-alt "[[$1]]" ann cheana féin, a bhíodh ceaptha mar ainm nua don athainmniú. Ar
+mhaith leat é a scrios chun áit a dhéanamh don athainmniú?',
+'delete_and_move_reason' => 'Scriosta chun áit a dhéanamh d\'athainmniú',
+'selfmove' => "Tá an ainm céanna ag an bhfoinse mar atá ar an ainm sprice; ní féidir leathanach a athainmniú bheith é féin.",
+'immobile_namespace' => "Saghas speisialta leathanach atá ann san ainm sprice; ní féidir leathanaigh a athainmniú san ainmspás sin.",
+
+#Export
+
+"export"	=> "Easportáil leathanaigh",
+"exporttext"    => "Is féidir leat an téacs agus stair athraithe de leathanach áirithe a heasportáil,
+fillte i bpíosa XML; is féidir leat ansin é a iompórtáil isteach vicí eile atá le na bogearraí MediaWiki
+air, nó is féidir leat é a coinniú do do chuid shiamsa féin.",
+"exportcuronly" => "Ná cuir san áireamh ach an leagan láithreach; ná cuir an stair iomlán ann",
+
+# Namespace 8 related
+
+"allmessages"   => "Teachtaireachtaí córais",
+"allmessagestext"   => "Liosta is ea seo de theachtaireachtaí córais atá le fáil san ainmspás MediaWiki: .",
+'allmessagesnotsupportedUI' => 'Níl tacaíocht ag Speisialta:AllMessages maidir le do theanga
+comhéadáin phearsanta don suíomh seo.',
+'allmessagesnotsupportedDB' => 'Níl aon tacaíocht anseo do Speisialta:AllMessages dá bharr
+go bhfuil wgUseDatabaseMessages druidte.',
+
+# Thumbnails
+
+'thumbnail-more'	=> 'Méadaigh',
+'missingimage'	  => "<b>Íomhá ar iarraidh</b><br /><i>$1</i>",
+'filemissing'		=> 'Comhad ar iarraidh',
+
+# Special:Import
+'import'	=> 'Iompórtáil leathanaigh',
+'importinterwiki' => 'Iompórtáil trasna vicíonna',
+'importtext'    => 'Easportáil an comhad ón bhfoinse-vicí le do thoil (le húsáid na tréithe
+Speisialta:Export), sábháil ar do dhíosca é agus uaslódáil anseo é.',
+'importfailed'  => "Theip ar an iompórtáil: $1",
+'importnotext'  => 'Folamh nó gan téacs',
+'importsuccess' => "D'eirigh leis an iompórtáil!",
+'importhistoryconflict' => 'Tá stair athraithe contrártha ann cheana féin (is dócha go
+uaslódáladh an leathanach seo roimh ré)',
+'importnosources' => 'Níl aon fhoinse curtha i leith d\'iompórtáil trasna vicíonna, agus
+ní féidir uaslódála staire díreacha a dhéanamh faoi láthair.',
+
+# Keyboard access keys for power users
+'accesskey-search' => 'c', # Cuardaigh
+'accesskey-minoredit' => 'm', # Mionathrú
+'accesskey-save' => 's', # Sábháil
+'accesskey-preview' => 'r', # Reamhamharc
+'accesskey-diff' => 'v', # Difríocht
+'accesskey-compareselectedversions' => 'l', # Leagain
+
+# tooltip help for some actions, most are in Monobook.js
+'tooltip-search' => 'Cuardaigh ar {{SITENAME}}',
+'tooltip-minoredit' => 'Déan mionathrú den athrú seo',
+'tooltip-save' => 'Sábháil do chuid athruithe',
+'tooltip-preview' => 'Réamhamharc ar do chuid athruithe; úsáid an gné seo roimh a shábhálaíonn tú!',
+'tooltip-compareselectedversions' => 'Féach na difríochtaí idir an dhá leagain roghnaithe den leathanach seo.',
+'tooltip-watch' => 'Cuir an leathanach seo ar do liosta faire',
+'tooltip-diff' => 'Taispeáin na difríochtaí áirithe a rinne tú don téacs',
+
+
+# stylesheets
+
+'monobook.css' => '/* athraigh an comhad seo chun an craiceann MonoBook a athrú don suíomh ar fad */',
+#'monobook.js' => '/* Deprecated; use [[MediaWiki:common.js]] */',
+
+# Metadata
+'nodublincore' => 'Míchumasaítear meitea-shonraí Dublin Core RDF ar an freastalaí seo.',
+'nocreativecommons' => 'Míchumasaítear meitea-shonraí Creative Commons RDF ar an freastalaí seo.',
+'notacceptable' => 'Ní féidir leis an freastalaí vicí na sonraí a chur ar fáil i bhformáid atá inléite ag do chliant.',
+
+# Attribution
+
+'anonymous' => "Úsáideoir(í) gan ainm ar {{SITENAME}}",
+'siteuser' => "Úsáideoir $1 ag {{SITENAME}}", #FIXME - genitive needed here
+'lastmodifiedatby' => "Leasaigh $3 an leathanach seo go déanaí ag $2, $1.",
+'and' => 'agus',
+'othercontribs' => "Bunaithe ar saothair le $1.",
+'others' => 'daoine eile',
+'siteusers' => "Úsáideoir(í) ag {{SITENAME}}", #FIXME - genitive needed here
+'creditspage' => 'Creidiúintí leathanaigh',
+'nocredits' => 'Níl aon eolas creidiúna le fáil don leathanach seo.',
+
+# Spam protection
+
+'spamprotectiontitle' => 'Scagaire in aghaidh ríomhphost dramhála',
+'spamprotectiontext' => 'Chuir an scagaire dramhála bac ar an leathanach a raibh tú ar
+iarradh sábháil. Is dócha gur nasc chuig suíomh seachtrach ba chúis leis.',
+'spamprotectionmatch' => 'Truicear ár scagaire dramhála ag an téacs seo a leanas: $1',
+'subcategorycount' => "Tá $1 fo-chatagóirí sa chatagóir seo.",
+'categoryarticlecount' => "Tá $1 ailt sa chatagóir seo.",
+
+# Info page
+"infosubtitle" => "Eolas don leathanach",
+"numedits" => "Méid athruithe (alt): $1",
+"numtalkedits" => "Méid athruithe (leathanach phlé): $1",
+"numwatchers" => "Méid féachnóirí: $1",
+"numauthors" => "Méid údair ar leith (alt): $1",
+"numtalkauthors" => "Méid údair ar leith (leathanach phlé): $1",
+
+# Math options
+
+'mw_math_png' => "Déan PNG-íomhá gach uair",
+'mw_math_simple' => "Déan HTML má tá sin an-easca, nó PNG ar mhodh eile",
+'mw_math_html' => "Déan HTML más féidir, nó PNG ar mhodh eile",
+'mw_math_source' => "Fág mar cló TeX (do teacsleitheoirí)",
+'mw_math_modern' => "Inmholta do líonleitheoirí nua",
+'mw_math_mathml' => 'MathML más féidir (turgnamhach)',
+
+# Patrolling
+'markaspatrolleddiff'   => "Marcáil bheith patrólaithe",
+'markedaspatrolled'     => "Marcáil bheith patrólaithe",
+'markedaspatrolledtext' => "Marcáladh an athrú áirithe seo bheith patrólaithe.",
+'rcpatroldisabled'      => "Mhíchumasaíodh Patról na n-Athruithe is Déanaí",
+'rcpatroldisabledtext'  => "Tá an tréith Patról na n-Athruithe is Déanaí míchumasaithe faoi láthair.",
+
+# Monobook.js: tooltips and access keys for monobook
+'monobook.js' => '/* Deprecated; use [[MediaWiki:common.js]] */',
+
+'accesskey-pt-userpage' => '.',
+'tooltip-pt-userpage' => 'Mo leathanach úsáideora',
+'accesskey-pt-anonuserpage' => '.',
+'tooltip-pt-anonuserpage' => 'Leathanach úsáideora don IP ina dhéanann tú do chuid athruithe',
+'accesskey-pt-mytalk' => 'n',
+'tooltip-pt-mytalk' => 'Mo leathanach phlé',
+'accesskey-pt-anontalk' => 'n',
+'tooltip-pt-anontalk' => 'Plé maidir le na hathruithe a dhéantar ón seoladh IP seo',
+'accesskey-pt-preferences' => '',
+'tooltip-pt-preferences' => 'Mo chuid sainroghanna',
+'accesskey-pt-watchlist' => 'l',
+'tooltip-pt-watchlist' => 'Liosta de na leathanaigh a dhéanann tú faire ar maidir  le athruithe',
+'accesskey-pt-mycontris' => 'y',
+'tooltip-pt-mycontris' => 'Liosta de mo chuid dréachtaí',
+'accesskey-pt-login' => 'o',
+'tooltip-pt-login' => 'Moltar duit logáil isteach, ach níl sé riachtanach.',
+'accesskey-pt-anonlogin' => 'o',
+'tooltip-pt-anonlogin' => 'Moltar duit logáil isteach, ach níl sé riachtanach.',
+'accesskey-pt-logout' => '',
+'tooltip-pt-logout' => 'Logáil amach',
+'accesskey-ca-talk' => 't',
+'tooltip-ca-talk' => 'Plé maidir leis an leathanach ábhair',
+'accesskey-ca-edit' => 'e',
+'tooltip-ca-edit' => 'Is féidir leat an leathanach seo a athrú. Más é do thoil é, bain úsáid as an cnaipe réamhamhairc roimh sábháil a dhéanamh.',
+'accesskey-ca-addsection' => '+',
+'tooltip-ca-addsection' => 'Cuir trácht leis an plé seo..',
+'accesskey-ca-viewsource' => 'e',
+'tooltip-ca-viewsource' => 'Tá an leathanach seo glasáilte. Is féidir leat a fhoinse a fheiceáil.',
+'accesskey-ca-history' => 'h',
+'tooltip-ca-history' => 'Leagain stairiúla den leathanach seo.',
+'accesskey-ca-protect' => '=',
+'tooltip-ca-protect' => 'Glasáil an leathanach seo',
+'accesskey-ca-delete' => 'd',
+'tooltip-ca-delete' => 'Scrios an leathanach seo',
+'accesskey-ca-undelete' => 'd',
+'tooltip-ca-undelete' => 'Díscrios na hathruithe a rinneadh don leathanach seo roimh a scriosadh é',
+'accesskey-ca-move' => 'm',
+'tooltip-ca-move' => 'Athainmnigh an leathanach',
+'accesskey-ca-nomove' => '',
+'tooltip-ca-nomove' => 'Níl an cead riachtanach agat chun an leathanach a athainmniú',
+'accesskey-ca-watch' => 'w',
+'tooltip-ca-watch' => 'Cuir an leathanach seo ar do liosta faire',
+'accesskey-ca-unwatch' => 'w',
+'tooltip-ca-unwatch' => 'Bain an leathanach seo as do liosta faire',
+'accesskey-search' => 'f',
+'tooltip-search' => 'Cuardaigh sa vicí seo',
+'accesskey-p-logo' => '',
+'tooltip-p-logo' => 'Príomhleathanach',
+'accesskey-n-mainpage' => 'z',
+'tooltip-n-mainpage' => 'Tabhair cuairt ar an bPríomhleathanach',
+'accesskey-n-portal' => '',
+'tooltip-n-portal' => 'Maidir leis an tionscadal, cad is féidir leat a dhéanamh, conas achmhainní a fháil',
+'accesskey-n-currentevents' => '',
+'tooltip-n-currentevents' => 'Faigh eolas cúlrach maidir le chursaí reatha',
+'accesskey-n-recentchanges' => 'r',
+'tooltip-n-recentchanges' => 'Liosta de na hathruithe is déanaí sa vicí.',
+'accesskey-n-randompage' => 'x',
+'tooltip-n-randompage' => 'Lódáil leathanach fánach',
+'accesskey-n-help' => '',
+'tooltip-n-help' => 'An áit chun cabhair a fháil.',
+'accesskey-n-sitesupport' => '',
+'tooltip-n-sitesupport' => 'Tabhair tacaíocht duinn',
+'accesskey-t-whatlinkshere' => 'j',
+'tooltip-t-whatlinkshere' => 'Liosta de gach leathanach sa vicí a nascaíonn chuig an leathanach seo',
+'accesskey-t-recentchangeslinked' => 'k',
+'tooltip-t-recentchangeslinked' => 'Na hathruithe is déanaí ar leathanaigh a nascaíonn chuig an leathanach seo',
+'accesskey-feed-rss' => '',
+'tooltip-feed-rss' => 'Fotha RSS don leathanach seo',
+'accesskey-feed-atom' => '',
+'tooltip-feed-atom' => 'Fotha Atom don leathanach seo',
+'accesskey-t-contributions' => '',
+'tooltip-t-contributions' => 'Féach ar an liosta dréachtaí a rinne an t-úsáideoir seo',
+'accesskey-t-emailuser' => '',
+'tooltip-t-emailuser' => 'Cuir teachtaireacht chuig an úsáideoir seo',
+'accesskey-t-upload' => 'u',
+'tooltip-t-upload' => 'Comhaid íomhá nó meáin a uaslódáil',
+'accesskey-t-specialpages' => 'q',
+'tooltip-t-specialpages' => 'Liosta de gach leathanach speisialta',
+'accesskey-ca-nstab-main' => 'c',
+'tooltip-ca-nstab-main' => 'Féach ar an leathanach ábhair',
+'accesskey-ca-nstab-user' => 'c',
+'tooltip-ca-nstab-user' => 'Féach ar an leathanach úsáideora',
+'accesskey-ca-nstab-media' => 'c',
+'tooltip-ca-nstab-media' => 'Féach ar an leathanach meáin',
+'accesskey-ca-nstab-special' => '',
+'tooltip-ca-nstab-special' => 'Is leathanach speisialta é seo, ní féidir leat an leathanach é fhéin a athrú.',
+'accesskey-ca-nstab-project' => 'a',
+'tooltip-ca-nstab-project' => 'Féach ar an leathanach thionscadail',
+'accesskey-ca-nstab-image' => 'c',
+'tooltip-ca-nstab-image' => 'Féach ar an leathanach íomhá',
+'accesskey-ca-nstab-mediawiki' => 'c',
+'tooltip-ca-nstab-mediawiki' => 'Féach ar an teachtaireacht córais',
+'accesskey-ca-nstab-template' => 'c',
+'tooltip-ca-nstab-template' => 'Féach ar an teimpléad',
+'accesskey-ca-nstab-help' => 'c',
+'tooltip-ca-nstab-help' => 'Féach ar an leathanach cabhrach',
+'accesskey-ca-nstab-category' => 'c',
+'tooltip-ca-nstab-category' => 'Féach ar an leathanach catagóire',
+
+# image deletion
+'deletedrevision' => 'Scriosadh an sean-leagan $1.',
+
+# browsing diffs
+'previousdiff' => '&larr; An difríocht roimhe seo',
+'nextdiff' => 'An difríocht i ndiadh seo &rarr;',
+
+'imagemaxsize' => 'Cuir an teorann seo ar na íomhánna atá le fáil ar leathanaigh cuir síos íomhánna:',
+'thumbsize'	=> 'Méid mionshamhla :',
+'showbigimage' => 'Íoslódáil leagan ardtaifigh ($1x$2, $3 kb)',
+
+'newimages' => 'Gailearaí na n-íomhánna nua',
+'noimages'  => 'Níl aon rud le feiscint.',
+
+# labels for User: and Title: on Special:Log pages
+'specialloguserlabel' => 'Úsáideoir:',
+'speciallogtitlelabel' => 'Teideal:',
+
+'passwordtooshort' => 'Tá d\'fhocal faire ró-ghearr. Caithfidh go bhfuil $1 carachtar ann ar a laghad.',
+
+# Media Warning
+'mediawarning' => '\'\'\'Aire\'\'\': Tá seans ann go bhfuil cód mailíseach sa comhad seo - b\'fheidir go gcuirfear do chóras i gcontúirt dá rithfeá é.
+<hr />',
+
+'fileinfo' => '$1KB, saghas MIME: <code>$2</code>',
+
+# Metadata
+'metadata' => 'Meiteasonraí',
+
+# Exif tags
+'exif-imagewidth' =>'Leithead',
+'exif-imagelength' =>'Airde',
+'exif-bitspersample' =>'Gíotáin sa chomhpháirt',
+'exif-compression' =>'Scéim comhbhrúite',
+'exif-photometricinterpretation' =>'Comhbhrú picteilíní',
+'exif-orientation' =>'Treoshuíomh',
+'exif-samplesperpixel' =>'Líon na gcomhpháirt',
+'exif-planarconfiguration' =>'Eagar na sonraí',
+'exif-ycbcrsubsampling' =>'Cóimheas foshamplála de Y i gcoinne C',
+'exif-ycbcrpositioning' =>'Suí Y agus C',
+'exif-xresolution' =>'Taifeach íomhá i dtreo an leithid',
+'exif-yresolution' =>'Taifeach íomhá i dtreo an airde',
+'exif-resolutionunit' =>'Aonad an taifigh X agus Y',
+'exif-stripoffsets' =>'Suíomh na sonraí íomhá',
+'exif-rowsperstrip' =>'Líon na rónna sa stráice',
+'exif-stripbytecounts' =>'Bearta sa stráice comhbhrúite',
+'exif-jpeginterchangeformat' =>'Aischló don SOI JPEG',
+'exif-jpeginterchangeformatlength' =>'Bearta sonraí JPEG',
+'exif-transferfunction' =>'Feidhm aistrithe',
+'exif-whitepoint' =>'Crómatacht na bpointí bán',
+'exif-primarychromaticities' =>'Crómatachta na bpríomhacht',
+'exif-ycbcrcoefficients' =>'Comhéifeachtaí mhaitrís trasfhoirmithe an dathspáis',
+'exif-referenceblackwhite' =>'Péire luachanna tagartha don dubh is don bán',
+'exif-datetime' =>'Dáta agus am athrú an chomhaid',
+'exif-imagedescription' =>'Íomhátheideal',
+'exif-make' =>'Déantóir an ceamara',
+'exif-model' =>'Déanamh an ceamara',
+'exif-software' =>'Na bogearraí a úsáideadh',
+'exif-artist' =>'Údar',
+'exif-copyright' =>'Úinéir an chóipchirt',
+'exif-exifversion' =>'Leagan EXIF',
+'exif-flashpixversion' =>'Leagan Flashpix atá á thacú',
+'exif-colorspace' =>'Dathspás',
+'exif-componentsconfiguration' =>'Ciall le gach giota',
+'exif-compressedbitsperpixel' =>'Modh chomhbhrú na n-íomhánna',
+'exif-pixelydimension' =>'Leithead bailí don íomhá',
+'exif-pixelxdimension' =>'Airde bailí don íomhá',
+'exif-makernote' =>'Nótaí an déantóra',
+'exif-usercomment' =>'Nótaí an úsáideora',
+'exif-relatedsoundfile' =>'comhad gaolmhara fuaime',
+'exif-datetimeoriginal' =>'Dáta agus am ghiniúint na sonraí',
+'exif-datetimedigitized' =>'Dáta agus am digitithe',
+'exif-subsectime' =>'Foshoicindí DateTime',
+'exif-subsectimeoriginal' =>'Foshoicindí DateTimeOriginal',
+'exif-subsectimedigitized' =>'Foshoicindí DateTimeDigitized',
+'exif-exposuretime' =>'Am nochta',
+'exif-fnumber' =>'Uimhir F',
+'exif-exposureprogram' =>'Clár nochta',
+'exif-spectralsensitivity' =>'Íogaireacht an speictrim',
+'exif-isospeedratings' =>'Grádú ISO luais',
+'exif-oecf' =>'Fachtóir optaileictreonach tiontaithe',
+'exif-shutterspeedvalue' =>'Luas nochta',
+'exif-aperturevalue' =>'Cró',
+'exif-brightnessvalue' =>'Gile',
+'exif-exposurebiasvalue' =>'Laobh nochta',
+'exif-maxaperturevalue' =>'Cró tíre uasmhéideach',
+'exif-subjectdistance' =>'Fad ón ábhar',
+'exif-meteringmode' =>'Modh meadarachta',
+'exif-lightsource' =>'Foinse solais',
+'exif-flash' =>'Splanc',
+'exif-focallength' =>'Fad fócasach an lionsa',
+'exif-subjectarea' =>'Achar an ábhair',
+'exif-flashenergy' =>'Splanfhuinneamh',
+'exif-spatialfrequencyresponse' =>'Freagairt minicíochta spáis',
+'exif-focalplanexresolution' =>'Taifeach an plána fócasaigh X',
+'exif-focalplaneyresolution' =>'Taifeach an plána fócasaigh Y',
+'exif-focalplaneresolutionunit' =>'Aonad taifigh an plána fócasaigh',
+'exif-subjectlocation' =>'Suíomh an ábhair',
+'exif-exposureindex' =>'Innéacs nochta',
+'exif-sensingmethod' =>'Modh braite',
+'exif-filesource' =>'Foinse comhaid',
+'exif-scenetype' =>'Cineál radhairc',
+'exif-cfapattern' =>'Patrún CFA',
+'exif-customrendered' =>'Íomháphróiseáil saincheaptha',
+'exif-exposuremode' =>'Modh nochta',
+'exif-whitebalance' =>'Bánchothromaíocht',
+'exif-digitalzoomratio' =>'Cóimheas zúmála digiteaí',
+'exif-focallengthin35mmfilm' =>'Fad fócasach i scannán 35 mm',
+'exif-scenecapturetype' =>'Cineál gabhála radhairc',
+'exif-gaincontrol' =>'Rialú radhairc',
+'exif-contrast' =>'Codarsnacht',
+'exif-saturation' =>'Sáithiú',
+'exif-sharpness' =>'Géire',
+'exif-devicesettingdescription' =>'Cur síos ar socruithe gléis',
+'exif-subjectdistancerange' =>'Raon fada ón ábhar',
+'exif-imageuniqueid' =>'Aitheantas uathúil an íomhá',
+'exif-gpsversionid' =>'Leagan clibe GPS',
+'exif-gpslatituderef' =>'Domhan-leithead Thuaidh no Theas',
+'exif-gpslatitude' =>'Domhan-leithead',
+'exif-gpslongituderef' =>'Domhanfhad Thoir nó Thiar',
+'exif-gpslongitude' =>'Domhanfhad',
+'exif-gpsaltituderef' =>'Tagairt airde',
+'exif-gpsaltitude' =>'Airde',
+'exif-gpstimestamp' =>'Am GPS (clog adamhach)',
+'exif-gpssatellites' =>'Satailítí úsáidte don tomhas',
+'exif-gpsstatus' =>'Stádas an ghlacadóra',
+'exif-gpsmeasuremode' =>'Modh tomhais',
+'exif-gpsdop' =>'Beachtas tomhais',
+'exif-gpsspeedref' =>'Aonad luais',
+'exif-gpsspeed' =>'Luas an ghlacadóra GPS',
+'exif-gpstrackref' =>'Tagairt don treo gluaiseachta',
+'exif-gpstrack' =>'Treo gluaiseachta',
+'exif-gpsimgdirectionref' =>'Tagairt do treo an íomhá',
+'exif-gpsimgdirection' =>'Treo an íomhá',
+'exif-gpsmapdatum' =>'Sonraí suirbhéireachta geodasaí a úsáideadh',
+'exif-gpsdestlatituderef' =>'Tagairt don domhan-leithead sprice',
+'exif-gpsdestlatitude' =>'Domhan-leithead sprice',
+'exif-gpsdestlongituderef' =>'Tagairt don domhanfhad sprice',
+'exif-gpsdestlongitude' =>'Domhanfhad sprice',
+'exif-gpsdestbearingref' =>'Tagairt don treo-uillinn sprice',
+'exif-gpsdestbearing' =>'Treo-uillinn sprice',
+'exif-gpsdestdistanceref' =>'Tagairt don fad ón áit sprice',
+'exif-gpsdestdistance' =>'Fad ón áit sprice',
+'exif-gpsprocessingmethod' =>'Ainm an modha próiseála GPS',
+'exif-gpsareainformation' =>'Ainm an cheantair GPS',
+'exif-gpsdatestamp' =>'Dáta GPS',
+'exif-gpsdifferential' =>'Ceartú difreálach GPS',
+
+# Exif attributes
+
+'exif-compression-1' => 'Neamh-chomhbhrúite',
+'exif-compression-6' => 'JPEG',
+
+'exif-photometricinterpretation-6' => 'YCbCr',
+
+'exif-orientation-1' => 'Gnáth', // 0th row: top; 0th column: left
+'exif-orientation-2' => 'Iompaithe go cothrománach', // 0th row: top; 0th column: right
+'exif-orientation-3' => 'Rothlaithe trí 180°', // 0th row: bottom; 0th column: right
+'exif-orientation-4' => 'Iompaithe go hingearach', // 0th row: bottom; 0th olumn: left
+'exif-orientation-5' => 'Rothlaithe trí 90° CCW agus iompaithe go hingearach', // 0th row: left; 0th column: top
+'exif-orientation-6' => 'Rothlaithe trí 90° CW', // 0th row: right; 0th column: top
+'exif-orientation-7' => 'Rothlaithe trí 90° CW agus iompaithe go hingearach', // 0th row: right; 0th column: bottom
+'exif-orientation-8' => 'Rothlaithe trí 90° CCW', // 0th row: left; 0th column: bottom
+
+'exif-planarconfiguration-1' => 'Formáid shmutánach',
+'exif-planarconfiguration-2' => 'Formáid phlánach',
+
+'exif-colorspace-1' => 'sRGB',
+'exif-colorspace-ffff.h' => 'FFFF.H',
+
+'exif-componentsconfiguration-0' => 'níl a leithéid ann',
+'exif-componentsconfiguration-1' => 'Y',
+'exif-componentsconfiguration-2' => 'Cb',
+'exif-componentsconfiguration-3' => 'Cr',
+'exif-componentsconfiguration-4' => 'R',
+'exif-componentsconfiguration-5' => 'G',
+'exif-componentsconfiguration-6' => 'B',
+
+'exif-exposureprogram-0' => 'Gan sainiú',
+'exif-exposureprogram-1' => 'Leis na lámha',
+'exif-exposureprogram-2' => 'Gnáthchlár',
+'exif-exposureprogram-3' => 'Tosaíocht nochta',
+'exif-exposureprogram-4' => 'Tosaíocht cró',
+'exif-exposureprogram-5' => 'Clár cúise (laofa do doimhneacht réimse)',
+'exif-exposureprogram-6' => 'Clár gnímh (laofa do cróluas tapaidh)',
+'exif-exposureprogram-7' => 'Modh portráide (do grianghraif i ngar don ábhar,
+le cúlra as fócas)',
+'exif-exposureprogram-8' => 'Modh tírdhreacha (do grianghraif tírdhreacha le
+cúlra i bhfócas)',
+
+'exif-meteringmode-0' => 'Anaithnid',
+'exif-meteringmode-1' => 'Meán',
+'exif-meteringmode-2' => 'MeánUalaitheDonLár',
+'exif-meteringmode-3' => 'Spota',
+'exif-meteringmode-4' => 'Ilspotach',
+'exif-meteringmode-5' => 'Patrún',
+'exif-meteringmode-6' => 'Páirteach',
+'exif-meteringmode-255' => 'Eile',
+
+'exif-lightsource-0' => 'Anaithnid',
+'exif-lightsource-1' => 'Solas lae',
+'exif-lightsource-2' => 'Fluaraiseach',
+'exif-lightsource-3' => 'Tungstan (solas gealbhruthach)',
+'exif-lightsource-4' => 'Splanc',
+'exif-lightsource-9' => 'Aimsir breá',
+'exif-lightsource-10' => 'Aimsir scamallach',
+'exif-lightsource-11' => 'Scáth',
+'exif-lightsource-12' => 'Solas lae fluaraiseach (D 5700 â€“ 7100K)',
+'exif-lightsource-13' => 'Solas bán lae fluaraiseach (N 4600 â€“ 5400K)',
+'exif-lightsource-14' => 'Solas fuar bán fluaraiseach (W 3900 â€“ 4500K)',
+'exif-lightsource-15' => 'Solas bán fluaraiseach (WW 3200 â€“ 3700K)',
+'exif-lightsource-17' => 'Gnáthsholas A',
+'exif-lightsource-18' => 'Gnáthsholas B',
+'exif-lightsource-19' => 'Gnáthsholas C',
+'exif-lightsource-20' => 'D55',
+'exif-lightsource-21' => 'D65',
+'exif-lightsource-22' => 'D75',
+'exif-lightsource-23' => 'D50',
+'exif-lightsource-24' => 'Tungstan stiúideó ISO',
+'exif-lightsource-255' => 'Foinse eile solais',
+
+'exif-sensingmethod-1' => 'Gan sainiú',
+'exif-sensingmethod-2' => 'Braiteoir aonshliseach ceantair datha',
+'exif-sensingmethod-3' => 'Braiteoir dháshliseach ceantair datha',
+'exif-sensingmethod-4' => 'Braiteoir tríshliseach ceantair datha',
+'exif-sensingmethod-5' => 'Braiteoir dathsheicheamhach ceantair',
+'exif-sensingmethod-7' => 'Braiteoir trílíneach',
+'exif-sensingmethod-8' => 'Braiteoir dathsheicheamhach línte',
+
+'exif-filesource-3' => 'DSC',
+
+'exif-scenetype-1' => 'Grianghraf a rinneadh go díreach',
+
+'exif-customrendered-0' => 'Gnáthphróiseas',
+'exif-customrendered-1' => 'Próiseas saincheaptha',
+
+'exif-exposuremode-0' => 'Nochtadh uathoibríoch',
+'exif-exposuremode-1' => 'Nochtadh láimhe',
+'exif-exposuremode-2' => 'Brac uathoibríoch',
+
+'exif-whitebalance-0' => 'Bánchothromaíocht uathoibríoch',
+'exif-whitebalance-1' => 'Bánchothromaíocht láimhe',
+
+'exif-scenecapturetype-0' => 'Gnáth',
+'exif-scenecapturetype-1' => 'Tírdhreach',
+'exif-scenecapturetype-2' => 'Portráid',
+'exif-scenecapturetype-3' => 'Radharc oíche',
+
+'exif-gaincontrol-0' => 'Dada',
+'exif-gaincontrol-1' => 'Íosneartúchán suas',
+'exif-gaincontrol-2' => 'Uasneartúchán suas',
+'exif-gaincontrol-3' => 'Íosneartúchán síos',
+'exif-gaincontrol-4' => 'Uasneartúchán síos',
+
+'exif-contrast-0' => 'Gnáth',
+'exif-contrast-1' => 'Bog',
+'exif-contrast-2' => 'Crua',
+
+'exif-saturation-0' => 'Gnáth',
+'exif-saturation-1' => 'Sáithiúchán íseal',
+'exif-saturation-2' => 'Ard-sáithiúchán',
+
+'exif-sharpness-0' => 'Gnáth',
+'exif-sharpness-1' => 'Bog',
+'exif-sharpness-2' => 'Crua',
+
+'exif-subjectdistancerange-0' => 'Anaithnid',
+'exif-subjectdistancerange-1' => 'Macra',
+'exif-subjectdistancerange-2' => 'Radharc teann',
+'exif-subjectdistancerange-3' => 'Cianradharc',
+
+// Pseudotags used for GPSLatitudeRef and GPSDestLatitudeRef
+'exif-gpslatitude-n' => 'Domhan-leithead thuaidh',
+'exif-gpslatitude-s' => 'Domhan-leithead theas',
+
+// Pseudotags used for GPSLongitudeRef and GPSDestLongitudeRef
+'exif-gpslongitude-e' => 'Domhanfhad Thoir',
+'exif-gpslongitude-w' => 'Domhanfhad Thiar',
+
+'exif-gpsstatus-a' => 'Tomhas ar siúl',
+'exif-gpsstatus-v' => 'Tomhas dodhéanta',
+
+'exif-gpsmeasuremode-2' => 'Tomhas déthoiseach',
+'exif-gpsmeasuremode-3' => 'Tomhas tríthoiseach',
+
+// Pseudotags used for GPSSpeedRef and GPSDestDistanceRef
+'exif-gpsspeed-k' => 'Ciliméadair san uair',
+'exif-gpsspeed-m' => 'Mílte san uair',
+'exif-gpsspeed-n' => 'Muirmhílte',
+
+// Pseudotags used for GPSTrackRef, GPSImgDirectionRef and GPSDestBearingRef
+'exif-gpsdirection-t' => 'Fíorthreo',
+'exif-gpsdirection-m' => 'Treo maighnéadach',
+
+# external editor support
+'edit-externally' => 'Athraigh an comhad seo le feidhmchlár seachtrach',
+'edit-externally-help' => 'Féach ar na
+
+[http://meta.wikimedia.org/wiki/Help:External_editors treoracha cumraíochta] (as Béarla)
+
+le tuilleadh eolais.',
+
+# 'all' in various places, this might be different for inflected languages
+'recentchangesall' => 'gach',
+'imagelistall' => 'gach',
+'watchlistall1' => 'gach',
+'watchlistall2' => 'gach',
+
+# E-mail address confirmation
+'confirmemail' => 'Deimhnigh do sheoladh ríomhphoist',
+'confirmemail_text' => "Tá sé de dhíth an an vicí seo do sheoladh ríomhphoist a
+
+bhailíochtú sula úsáideann tú na gnéithe ríomhphoist. Gníomhachtaigh an cnaipe seo thíos
+
+chun teachtaireacht deimhnithe a sheoladh chuig do chuntas ríomhphoist. Beidh nasc ann sa
+
+comhad ina mbeidh cód áirithe; lódáil an nasc i do bhrabhsálaí chun deimhniú go bhfuil do
+
+sheoladh ríomhphoist bailí.",
+'confirmemail_send' => 'Seol cód deimhnithe',
+'confirmemail_sent' => 'Seoladh teachtaireacht deimhnithe.',
+'confirmemail_sendfailed' => 'Níorbh fhéidir an teachtaireacht deimhnithe a sheoladh. Seiceáil nach bhfuil caractair neamh-bhailí ann sa seoladh.',
+'confirmemail_invalid' => 'Cód deimhnithe neamh-bhailí. B\'fhéidir gur chuaidh an cód as feidhm.',
+'confirmemail_success' => 'Deimhníodh do sheoladh ríomhphoist. Is féidir leat logáil
+
+isteach anois agus sult a bhaint as an vicí.',
+'confirmemail_loggedin' => 'Deimhníodh do sheoladh ríomhphoist.',
+'confirmemail_error' => 'Tharlaigh botún éigin le sabháil do dheimhniú.',
+
+'confirmemail_subject' => 'Deimhniú seolaidh ríomhphoist as {{SITENAME}}',
+'confirmemail_body' => "Chláraigh duine éigin an cuntas \"$2\" le húsáid an seolaidh
+
+ríomhphoist seo ar {{SITENAME}} - is dócha gur rinne tú féin é seo, ón seoladh IP $1.
+
+Chun deimhniú a dhéanamh gur leatsa é an cuntas seo, agus chun gnéithe ríomhphoist a chur
+
+i ngníomh ag {{SITENAME}}, oscail an nasc seo i do bhrabhsalaí:
+
+$3
+
+*Muna* bhfuil tú an duine atá i gceist, ná roghnaigh an nasc. Rachfaidh an cód deimhnithe
+
+seo as feidhm ag $4.",
+
+# Inputbox extension, may be useful in other contexts as well
+'tryexact' => 'Déan iarracht ar meaitseáil cruinn',
+'searchfulltext' => 'Cuardaigh sa téacs iomlán',
+'createarticle' => 'Cruthaigh alt',
+
+# Scary transclusion
+'scarytranscludedisabled' => '[Díchumasaíodh trasáireamh idir vicíonna]',
+'scarytranscludefailed' => '[Theip leis an iarradh teimpléid do $1; tá brón orainn]',
+'scarytranscludetoolong' => '[Tá an URL ró-fhada; tá brón orainn]',
+
+);
+
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesGn.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesGn.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesGn.php	(revision 1280)
@@ -0,0 +1,8 @@
+<?php
+/** Guaraní (avañe'ẽ)
+  *
+  * @addtogroup Language
+  */
+
+$fallback = 'es';
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesGsw.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesGsw.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesGsw.php	(revision 1280)
@@ -0,0 +1,846 @@
+<?php
+
+$fallback = 'de';
+$linkTrail = '/^([äöüßa-z]+)(.*)$/sDu';
+
+$messages = array(
+'tog-underline'         => 'Links unterstryche',
+'tog-highlightbroken'   => 'Links uf lääri Themene durestryche',
+'tog-justify'           => 'Tekscht als Blocksatz',
+'tog-hideminor'         => 'Cheini «chlyni Änderige» aazeige',
+'tog-extendwatchlist'   => 'Erwiterti Beobachtungslischte',
+'tog-usenewrc'          => 'Erwytereti «letschti Änderige» (geit nid uf allne Browser)',
+'tog-numberheadings'    => 'Überschrifte outomatisch numeriere',
+'tog-showtoolbar'       => 'Editier-Wärchzüüg aazeige',
+'tog-ccmeonemails'	=> 'Schick mr Kopie vo de Boscht wo n\'ich andere schicke due.',
+'tog-editondblclick'    => 'Syte ändere mit Doppelklick i d Syte (JavaScript)',
+'tog-editsection'       => 'Gleicher aazeige für ds Bearbeite vo einzelnen Absätz',
+'tog-editsectiononrightclick'=> 'Einzelni Absätz ändere mit Rächtsclick (Javascript)',
+'tog-showtoc'           => 'Inhaltsverzeichnis aazeige bi Artikle mit meh als drei Überschrifte',
+'tog-rememberpassword'  => 'Passwort spychere (Cookie)',
+'tog-editwidth'         => 'Tekschtygabfäld mit voller Breiti',
+'tog-watchdefault'      => 'Vo dir nöi gmachti oder verändereti Syte beobachte',
+'tog-minordefault'      => 'Alli dyni Änderigen als «chlyni Änderige» markiere',
+'tog-previewontop'      => 'Vorschou vor em Editierfänschter aazeige',
+'tog-previewonfirst'    => 'Vorschou aazeige bim erschten Editiere',
+'tog-nocache'           => 'Syte-Cache deaktiviere',
+'tog-enotifwatchlistpages'=> 'Benachrichtigungsmails by Änderigen a Wiki-Syte',
+'tog-enotifusertalkpages'=> 'Benachrichtigungsmails bi Änderigen a dyne Benutzersyte',
+'tog-enotifminoredits'  => 'Benachrichtigungsmail ou bi chlyne Sytenänderige',
+'tog-enotifrevealaddr'  => 'Dyni E-Mail-Adrässe wird i Benachrichtigungsmails zeigt',
+'tog-shownumberswatching'=> 'Aazahl Benutzer aazeige, wo ne Syten am Aaluege sy (i den Artikelsyte, i de «letschten Änderigen» und i der Beobachtigslischte)',
+'tog-fancysig'          => 'Kei outomatischi Verlinkig vor Signatur uf d Benutzersyte',
+'tog-externaleditor'    => 'Externen Editor als default',
+'tog-externaldiff'      => 'Externi diff als default',
+'tog-showjumplinks'     => '«Wächsle-zu»-Links ermügleche',
+'tog-uselivepreview'    => 'Live preview benütze (JavaScript) (experimentell)',
+'tog-autopatrol'        => 'Eigeni Bearbeitige als patrolliert markiere',
+'tog-forceeditsummary'  => 'Sei miers, wänn I s Zommefassungsfeld leer los',
+'tog-watchlisthideown'  => 'Eigeni Änderige uf d Beobachtungslischt usblende',
+'tog-watchlisthidebots' => 'Bot-Änderige in d Beobachtungslischt usblende',
+'underline-always'      => 'immer',
+'underline-never'       => 'nie',
+'underline-default'     => 'Browser-Vorystellig',
+'skinpreview'           => '(Vorschou)',
+'sunday'                => 'Sundi',
+'monday'                => 'Mändi',
+'tuesday'               => 'Zischdi',
+'wednesday'             => 'Mittwuch',
+'thursday'              => 'Durschdi',
+'friday'                => 'Fridi',
+'saturday'              => 'Somschdi',
+'january'               => 'Jänner',
+'august'                => 'Ougschte',
+'september'             => 'Septämber',
+'november'              => 'Novämber',
+'december'              => 'Dezämber',
+'may'                   => 'Mei',
+'categories'            => 'Kategorie',
+'pagecategories'        => '{{PLURAL:$1|Kategori|Kategorie}}',
+'category_header'       => 'Artikel in de Kategori "$1"',
+'subcategories'         => 'Unterkategorie',
+'mainpage'              => 'Houptsyte',
+'mainpagetext'          => 'MediaWiki isch erfolgrich inschtalliert worre.',
+'mainpagedocfooter'     => 'Luege uf d [http://meta.wikimedia.org/wiki/MediaWiki_localisation Dokumentation fier d Onpassung vun de Bnutzeroberflächi] un s [http://meta.wikimedia.org/wiki/Help:Contents Bnutzerhondbuech] fier d Hilf yber d Bnutzung un s Ystelle.',
+'portal'                => 'Gmeinschaftsportal',
+'portal-url'            => 'Project:Gemeinschafts-Portal',
+'about'                 => 'Übr',
+'aboutsite'             => 'Übr {{GRAMMAR:akkusativ|{{SITENAME}}}}',
+'aboutpage'             => 'Project:Übr {{UCFIRST:{{GRAMMAR:akkusativ|{{SITENAME}}}}}}',
+'help'                  => 'Hilf',
+'helppage'              => 'Help:Hilf',
+'bugreportspage'        => 'Project:Kontakt',
+'sitesupport'           => 'Finanzielli Hilf',
+'sitesupport-url'       => 'Project:Spenden',
+'faqpage'               => 'Project:FAQ',
+'edithelp'              => 'Ratschläg fiers Bearbeite',
+'newwindow'             => '(imene nöie Fänschter)',
+'edithelppage'          => 'Project:Ändere',
+'cancel'                => 'Abbräche',
+'qbfind'                => 'Finde',
+'qbbrowse'              => 'Blättre',
+'qbedit'                => 'Ändere',
+'qbpageoptions'         => 'Sytenoptione',
+'qbpageinfo'            => 'Sytedate',
+'qbmyoptions'           => 'Ystellige',
+'qbspecialpages'        => 'Spezialsytene',
+'moredotdotdot'         => 'Meh …',
+'mypage'                => 'Minni Syte',
+'mytalk'                => 'mini Diskussionsyte',
+'anontalk'              => 'Diskussionssyste vo sellere IP',
+'currentevents'         => 'Aktuelli Mäldige',
+'currentevents-url'     => 'Aktuelli Termin',
+'disclaimers'           => 'Impressum',
+'disclaimerpage'        => '{{ns:project}}:Impressum',
+'privacy'               => 'Daateschutz',
+'privacypage'           => 'Project:Daateschutz',
+'errorpagetitle'        => 'Fähler',
+'returnto'              => 'Zrügg zur Syte $1.',
+'tagline'               => 'Us {{SITENAME}}',
+'search'                => 'Suech',
+'searchbutton'          => 'Suech',
+'history'               => 'Versione',
+'history_short'         => 'Versione/Autore',
+'printableversion'      => 'Druck-Aasicht',
+'permalink'             => 'Bschtändigi URL',
+'print'                 => 'Drucke',
+'edit'                  => 'ändere',
+'editthispage'          => 'Syte bearbeite',
+'delete'                => 'lösche',
+'deletethispage'        => 'Syte lösche',
+'undelete_short'        => '$1 widerherstelle',
+'protect'               => 'schütze',
+'protectthispage'       => 'Artikel schütze',
+'unprotect'             => 'nümm schütze',
+'unprotectthispage'     => 'Schutz ufhebe',
+'newpage'               => 'Nöji Syte',
+'specialpage'           => 'Spezialsyte',
+'personaltools'         => 'Persönlichi Wärkzüg',
+'postcomment'           => 'Kommentar abgeh',
+'articlepage'           => 'Syte',
+'toolbox'               => 'Wärkzügkäschtli',
+'userpage'              => 'Benutzersyte',
+'imagepage'             => 'Bildsyte',
+'otherlanguages'        => 'Andere Schprôche',
+'redirectedfrom'        => '(Witergleitet vun $1)',
+'redirectpagesub'       => 'Umgleiteti Syte',
+'lastmodifiedat'          => 'Letschti Änderig vo dere Syte: $2, $1<br />',
+'viewcount'             => 'Selli Syte isch {{PLURAL:$1|eimol|$1 Mol}} bsuecht worde.',
+'copyright'             => 'Der Inhalt vo dere Syte steht unter der $1.',
+'protectedpage'         => 'Gschützt Syte',
+'jumpto'                => 'Hops zue:',
+'jumptosearch'          => 'Suech',
+'badaccess'             => 'Kei usreichendi Rechte.',
+'versionrequired'       => 'Version $1 vun MediaWiki wird bnötigt',
+'versionrequiredtext'   => 'Version $1 vun MediaWiki wird bnötigt um diä Syte zue nutze. Luege [[Special:Version]]',
+'pagetitle'             => '$1 - {{SITENAME}}',
+'retrievedfrom'         => 'Vun "$1"',
+'youhavenewmessages'    => 'Du hesch $1 ($2).',
+'newmessageslink'       => 'nöji Nachrichte',
+'newmessagesdifflink'   => 'Unterschid',
+'editsection'           => 'ändere',
+'editsectionhint'       => 'Abschnitt ändere: $1',
+'showtoc'               => 'ufklappe',
+'hidetoc'               => 'zueklappe',
+'thisisdeleted'         => 'Onluege oder widrherstelle vun $1?',
+'viewdeleted'           => '$1 onluege?',
+'restorelink'           => '{{PLURAL:$1|glöschti Änderig|$1 glöschti Ändrige}}',
+'nstab-user'            => 'Benutzersyte',
+'nstab-project'         => 'Projektsyte',
+'nstab-image'           => 'Bildli',
+'nstab-mediawiki'       => 'Nochricht',
+'nstab-template'        => 'Vorlag',
+'nstab-help'            => 'Hilf',
+'nosuchaction'          => 'Di Aktion gibts nit',
+'nosuchactiontext'      => 'Di Aktion wird vun de MediaWiki-Software nit unterschtützt',
+'nosuchspecialpage'     => 'Di Spezialsyte gibts nit',
+'nospecialpagetext'     => 'Diese Spezialseite wird von der MediaWiki-Software nicht unterstützt',
+'error'                 => 'Fähler',
+'databaseerror'         => 'Fähler in dr Datebonk',
+'dberrortext'           => 'S het ä Syntaxfähler in dr Datenbonkabfrôg gebä.
+
+D letzscht Datebonkabfrôg het ghiesse: "$1" us de Funktion "<tt>$2</tt>".
+
+MySQL het den Fähler gmeldet: "<tt>$3: $4</tt>".',
+'noconnect'             => 'Hab kei Vobindung zuer Datebonk uf $1 herschtelle kinne',
+'nodb'                  => 'Hab d Datebonk $1 nit uswähle kinne',
+'cachederror'           => 'D folgende isch ä Kopie usm Cache un möglicherwis nit aktuell.',
+'laggedslavemode'       => 'Obacht: Kürzlich vorgnommene Änderunge wärdet u.U. no nit aazaigt!',
+'readonly'              => 'Datebonk isch gsperrt',
+'enterlockreason'       => 'Bitte gib ä Grund i, worum Datebonk gsperrt werre soll un ä Yschätzung yber d Dur vum Sperre',
+'readonlytext'          => 'Diä {{SITENAME}}-Datebonk isch vorybergehend fier Neijyträg un Änderige gsperrt. Bitte vosuechs s später no mol.
+
+Grund vun de Sperrung: $1',
+'missingarticle'        => 'De Tekscht vum Artikel "$1" isch in de Datebonk nit gfunde. Des isch wahrschinlich ä Fähler in de Software. Sin so guet, un melde des m Adminischtrator, un gib de Artikelnome on.',
+'readonly_lag'          => 'Datebonk isch automatisch gschperrt worre, wil d Sklavedatebonkserver ihr Meischter yhole miesse',
+'internalerror'         => 'Interner Fähler',
+'filecopyerror'         => 'Datei "$1" het nit noch "$2" kopiert werre kinne.',
+'filerenameerror'       => 'Datei "$1" het nit noch "$2" umbnennt werre kinne.',
+'filedeleteerror'       => 'Datei "$1" het nit glöscht werre kinne.',
+'filenotfound'          => 'Datei "$1" isch nit gfunde worre.',
+'formerror'             => 'Fähler: Ds Formular het nid chönne verarbeitet wärde',
+'badarticleerror'       => 'D Aktion konn uf denne Artikel nit ongwendet werre.',
+'cannotdelete'          => 'Konn d spezifiziert Syte odr Artikel nit lösche. (Isch möglicherwis schu vun ebr ondrem glöscht worre.)',
+'badtitle'              => 'Ugültiger Titel',
+'badtitletext'          => 'Dr Titel vun de ongfordert Syte isch ugültig gsi, leer, odr ä ugültiger Sprochlink vun nm ondre Wiki.',
+'perfdisabled'          => 'Leider isch die Funktion momentan usgschalte, wil\'s d Datebank eso starch würd belaschte, dass mer s Wiki nümm chönnti benütze.',
+'perfdisabledsub'       => 'Dert isch ä gspeicherti Kopie vun $1:',
+'perfcached'            => 'Selli Informatione chömme usem Zwüschespeicher un sin derwiil viilliecht nid aktuell.
+----',
+'perfcachedts'          => 'D folgendi Date stomme usm Cache un sin om $1 s letzscht mol aktualisiert worre.',
+'wrong_wfQuery_params'  => 'Falschi Parameter fier wfQuery()<br />
+Funktion: $1<br />
+Abfrog: $2',
+'viewsource'            => 'Quelltext aaluege',
+'viewsourcefor'         => 'fier $1',
+# problem with link: [[Project:Geschützte Seiten|Project:Gschützti Syte]]
+'protectedtext'         => 'Die Syten isch für ds Bearbeite gsperrt; daderfür cha’s verschidnigi Gründ gä. Lueg ou unter [[Project:Geschützte Seiten|Project:Gschützti Syte]].
+
+Du chasch der Quelltekscht vo dere Syten aaluegen u kopiere.',
+'protectedinterface'    => 'Die Syte enthält Text fiers Sproch-Interface vun de Software un isch gsperrt, um Missbrouch zue vohindre.',
+'editinginterface'      => '\'\'\'Obacht:\'\'\' Du bisch e Syten am Verändere wo zum user interface ghört. We du die Syte veränderisch, de änderet sech ds user interface o für di andere Benutzer.',
+'sqlhidden'             => '(SQL-Abfrog voschteckt)',
+'logouttitle'           => 'Benutzer-Abmäldig',
+'logouttext'            => '<div align="center" style="background-color:white;">
+<b>Du bisch jitz abgmäldet!</b>
+</div><br />
+We du jitz öppis uf der {{SITENAME}} änderisch, de wird dyni IP-Adrässen als Urhäber regischtriert u nid dy Benutzername. Du chasch di mit em glychen oder emnen andere Benutzername nöi aamälde.',
+'welcomecreation'       => '<h2>Willkomme, $1!</h2>
+
+Dys Benutzerkonto isch aagleit worde
+
+Vergis nid, dyni [[Special:Preferences|Ystelligen]] aazpasse.',
+'loginpagetitle'        => 'Benutzer-Aamelde',
+'yourname'              => 'Dii Benutzername',
+'yourpassword'          => 'Basswort',
+'yourpasswordagain'     => 'Basswort nommol iitipe',
+'remembermypassword'    => 'Passwort spychere',
+'yourdomainname'        => 'Diini Domäne',
+'externaldberror'       => 'Entwedr s ligt ä Fähler bi dr extern Authentifizierung vor, odr du derfsch din externs Benutzerkonto nit aktualisiere.',
+'loginproblem'          => '\'\'\'S het ä Problem mit dinre Onmeldung gäbe.\'\'\'<br />Bitte vosuechs grad nomal!',
+'alreadyloggedin'       => '<strong>Si sin scho als Benutzer $1 aagmolde!</strong><br />',
+'login'                 => 'Aamälde',
+'loginprompt'           => '<small>Für di bir {{SITENAME}} aazmälde, muesch Cookies erloube!</small>',
+'userlogin'             => 'Aamälde',
+'logout'                => 'Abmälde',
+'userlogout'            => 'Abmälde',
+'notloggedin'           => 'Nit aagmäldet',
+'nologin'               => 'No chei Benutzerchonto? $1',
+'nologinlink'           => '»Chonto aaleege«',
+'createaccount'         => 'Nöis Benutzerkonto aalege',
+'gotaccount'            => 'Du häsch scho a Chonto? $1',
+'gotaccountlink'        => '»Login für beryts aagmeldete Benutzer«',
+'createaccountmail'     => 'yber eMail',
+'badretype'             => 'Di beidi Passwörter stimme nit yberi.',
+'userexists'            => 'Dä Benutzername git’s scho. Bitte lis en anderen uus.',
+'youremail'             => 'Ihri E-Bost-Adräss**',
+'username'              => 'Benutzernome:',
+'yourrealname'          => 'Ihre Name*',
+'yourlanguage'          => 'Sproch:',
+'yourvariant'           => 'Variante',
+'yournick'              => 'Spitzname (zuem Untrschriibe):',
+'badsig'                => 'Dr Syntax vun de Signatur isch ungültig; luege uffs HTML.',
+'email'                 => 'E-Bost',
+'prefs-help-email-enotif'=> 'A die Adrässe wärden o Mails mit Benachrichtigunge geschickt, falls du das ygschalte hesch.',
+'prefs-help-realname'   => '* <strong>Dy ächt Name</strong> (optional): We du wosch, das dyni Änderigen uf di chöi zrüggfüert wärde.',
+'loginerror'            => 'Fähler bir Aamäldig',
+'prefs-help-email'      => '* <strong>E-Bost-Adräss</strong> (optional): Dodemit chönne anderi Lüt übr Ihri Benutzersyte mitene Kontakt uffneh, ohni dass Si muen Ihri E-Bost-Adräss z\'veröffentliche.
+Im Fall dass Si mol Ihr Basswort vergässe hen cha Ihne au e ziitwiiligs Eimol-Basswort gschickt wärde.',
+'nocookieslogin'        => '{{SITENAME}} bruucht Cookies für nen Aamäldig. Du hesch Cookies deaktiviert. Aktivier se bitte u versuech’s nomal.',
+'noname'                => 'Du muesch ä Benutzername aagebe.',
+'loginsuccesstitle'     => 'Aamäldig erfolgrych',
+'loginsuccess'          => '\'\'\'Du bisch jetz als "$1" bi {{SITENAME}} aagmäldet.\'\'\'',
+'nosuchuser'            => 'Dr Benutzername "$1" exischtiert nit.
+
+Yberprüf d Schribwis, odr meld dich als neijer Benutzer ô.',
+'nosuchusershort'       => 'S gibt kei Benutzername „$1“. Bitte yberprüf mol d Schribwis.',
+'nouserspecified'       => 'Bitte gib ä Benutzername ii.',
+'wrongpassword'         => 'Sell Basswort isch falsch (odr fählt). Bitte versuech\'s nomol.',
+'wrongpasswordempty'    => 'Du hesch vagässe diin Basswort iizgeh. Bitte probiers nomol.',
+'mailmypassword'        => 'Es nöis Passwort schicke',
+'passwordremindertitle' => 'Neijs Password fier {{SITENAME}}',
+'passwordremindertext'  => 'Ebber mit dr IP-Adress $1 het ä neijs Passwort fier d Anmeldung bi {{SITENAME}} ongfordert.
+
+S automatisch generiert Passwort fier de Benutzer $2 lutet jetzert: $3
+
+Du sottsch dich jetzt onmelde un s Passwort ändere: {{fullurl:Special:Userlogin}}
+
+Bitte ignorier diä E-Mail, wenn du s nit selber ongfordert hesch. S alt Passwort blibt witerhin gültig.',
+'noemail'               => 'Dr Benutzer "$1" het kei E-Mail-Adress ongebe.',
+'passwordsent'          => 'Ä zytwilligs Passwort isch on d E-Mail-Adress vum Benutzer "$1" gschickt worre.
+Bitte meld dich domit ô, wenns bekumme hesch.',
+'eauthentsent'          => 'Es Bestätigungs-Mail isch a die Adrässe gschickt worde, wo du hesch aaggä. 
+
+Bevor das wyteri Mails yber d {{SITENAME}}-Mailfunktion a die Adrässe gschickt wärde, muesch du d Instruktionen i däm Mail befolge, für z bestätige, das es würklech dys isch.',
+'mailerror'             => 'Fähler bim Sende vun de Mail: $1',
+'acct_creation_throttle_hit'=> 'Duet mr leid, so hän scho $1 Benutzer. Si chönne cheini meh aalege.',
+'emailauthenticated'    => 'Di E-Bost-Adräss isch am $1 bschtätigt worde.',
+'emailnotauthenticated' => 'Dyni e-Mail-Adrässen isch no nid bestätiget. Drum göh di erwytereten e-Mail-Funktione no nid.
+Für d Bestätigung muesch du em Link folge, wo dir isch gmailet worde. Du chasch ou e nöie söttige Link aafordere:',
+'noemailprefs'          => '<strong>Du hesch kei E-Mail-Adrässen aaggä</strong>, drum sy di folgende Funktione nid müglech.',
+'emailconfirmlink'      => 'E-Bost-Adräss bschtätige',
+'invalidemailaddress'   => 'Diä E-Mail-Adress isch nit akzeptiert worre, wil s ä ugültigs Format ghet het. Bitte gib ä neiji Adress in nem gültige Format ii, odr tue s Feld leere.',
+'accountcreated'        => 'De Benutzer isch agleit worre.',
+'accountcreatedtext'    => 'De Benutzer $1 isch aagleit worre.',
+'bold_sample'           => 'fetti Schrift',
+'bold_tip'              => 'Fetti Schrift',
+'italic_sample'         => 'kursiv gschribe',
+'italic_tip'            => 'Kursiv gschribe',
+'link_sample'           => 'Stichwort',
+'extlink_sample'        => 'http://www.zumbyschpil.ch Linktekscht',
+'extlink_tip'           => 'Externer Link (http:// beachte)',
+'headline_sample'       => 'Abschnitts-Überschrift',
+'math_sample'           => 'Formel do yfüge',
+'math_tip'              => 'Mathematisch Formel (LaTeX)',
+'nowiki_sample'         => 'Was da inne staht wird nid formatiert',
+'image_sample'          => 'Byschpil.jpg',
+'image_tip'             => 'Bildvoweis',
+'media_sample'          => 'Byschpil.mp3',
+'media_tip'             => 'Mediedateivoweis',
+'hr_tip'                => 'Horizontal Linie (sparsom vowende)',
+'summary'               => 'Zämefassig',
+'minoredit'             => 'Numen es birebitzeli gänderet',
+'watchthis'             => 'Dä Artikel beobachte',
+'savearticle'           => 'Syte spychere',
+'showpreview'           => 'Vorschau aaluege',
+'showdiff'              => 'Zeig Änderige',
+'anoneditwarning'       => '\'\'\'Warnig:\'\'\' Si sin nit agmolde. Ihri IP-Adrässe wird in de Gschicht vo sellem Artikel gspeicheret.',
+'missingsummary'        => '\'\'\'Obacht:\'\'\' Du hesch kei Zämefassig ongebe. Wenn du erneijt uf Spacher durcksch, wird d Änderung ohni gspychert.',
+'missingcommenttext'    => 'Bitte gib dinr Kommentar unte ii.',
+'whitelistedittext'     => 'Sie müssen sich $1, um Artikel bearbeiten zu können.',
+'whitelistreadtext'     => 'Sie müssen sich [[Special:Userlogin|hier anmelden]], um Artikel lesen zu können.',
+'whitelistacctext'      => 'Um in diesem Wiki Accounts anlegen zu dürfen, müssen Sie sich [[Special:Userlogin|hier anmelden]] und die nötigen Berechtigungen haben.',
+'confirmedittitle'      => 'Zuem Ändere isch e bschtätigti E-Bost-Adräss nötig.',
+'confirmedittext'       => 'Si muen Ihri E-Bost-Adräss erscht bstätige bevor Si Syte go ändere chönne. Bitte setze Si in [[Special:Preferences|Ihre Iistellige]] Ihri E-Bost Adräss ii un löhn Si si pruefe.',
+'accmailtitle'          => 'S Bassword isch verschickt worre.',
+'accmailtext'           => 'S Basswort für "$1" isch uf $2 gschickt worde.',
+'newarticletext'        => '<div id="newarticletext">
+{{MediaWiki:Newarticletext/{{NAMESPACE}}}}
+</div>',
+'anontalkpagetext'      => '----\'\'Sell isch e Diskussionssyte vome anonyme Benutzer wo chei Zuegang aaglegt het odr wo ihn nit bruucht. Sälleweg muen mir di numerischi IP-Adräss bruuche um ihn odr si z\'identifiziere. Sone IP-Adräss cha au vo mehrere Benutzer deilt werde. Wenn Si en anonyme Benutzer sin un \'s Gfuehl hen, dass do irrelevanti Kommentar an Si grichtet wärde, denn [[Special:Userlogin|lege Si sich bitte en Zuegang aa odr mälde sich aa]] go in Zuekunft Verwirrige mit andere anonyme Benutzer z\'vermeide.\'\'',
+'noarticletext'         => '<div id="noarticletext">
+{{MediaWiki:Noarticletext/{{NAMESPACE}}}}
+</div>',
+'clearyourcache'        => '\'\'\'Hywys:\'\'\' Nôch dyner Änderig muess no der Browser-Cache gleert wärde!<br />\'\'\'Mozilla/Safari/Konqueror:\'\'\' \'\'Strg-Umschalttaste-R\'\' (oder \'\'Umschalttaste\'\' drückt halte und uf’s \'\'Neu-Laden\'\'-Symbol klicke), \'\'\'IE:\'\'\' \'\'Strg-F5\'\', \'\'\'Opera/Firefox:\'\'\' \'\'F5\'\'',
+'usercsspreview'        => '== Vorschau ihres Benutzer-CSS. ==
+\'\'\'Beachten Sie:\'\'\' Nach dem Speichern müssen Sie ihrem Browser sagen, die neue Version zu laden: \'\'\'Mozilla:\'\'\' \'\'Strg-Shift-R\'\', \'\'\'IE:\'\'\' \'\'Strg-F5\'\', \'\'\'Safari:\'\'\' \'\'Cmd-Shift-R\'\', \'\'\'Konqueror:\'\'\' \'\'F5\'\'.',
+'userjspreview'         => '== Vorschau Ihres Benutzer-Javascript. ==
+\'\'\'Beachten Sie:\'\'\' Nach dem Speichern müssen Sie ihrem Browser sagen, die neue Version zu laden: \'\'\'Mozilla:\'\'\' \'\'Strg-Shift-R\'\', \'\'\'IE:\'\'\' \'\'Strg-F5\'\', \'\'\'Safari:\'\'\' \'\'Cmd-Shift-R\'\', \'\'\'Konqueror:\'\'\' \'\'F5\'\'.',
+'note'                  => '<strong>Achtung: </strong>',
+'previewnote'           => 'Das isch numen e Vorschau und nonig gspycheret!',
+'editing'               => 'Bearbeite vo «$1»',
+'editinguser'               => 'Bearbeite vo «$1»',
+'editingsection'        => 'Bearbeite vo «$1» (Absatz)',
+'editconflict'          => 'Bearbeitigs-Konflikt: «$1»',
+'explainconflict'       => 'Öpper anders het dä Artikel gänderet, wo du ne sälber am Ändere bisch gsy.
+Im obere Tekschtfäld steit der jitzig Artikel.
+Im untere Tekschtfält stöh dyni Änderige.
+Bitte überträg dyni Änderigen i ds obere Tekschtfäld.
+We du «Syte spychere» drücksch, de wird \'\'\'nume\'\'\' der Inhalt vom obere Tekschtfäld gspycheret.',
+'yourtext'              => 'Ihre Tekscht',
+'storedversion'         => 'Gspychereti Version',
+'editingold'            => '<strong>Obacht: Du bisch en alti Version vo däm Artikel am Bearbeite.
+Alli nöiere Versione wärden überschribe, we du uf «Syte spychere» drücksch.</strong>',
+'yourdiff'              => 'Untrschied',
+'copyrightwarning2'     => 'Dängge Si dra, dass alli Änderige {{GRAMMAR:dativ {{SITENAME}}}} vo andere Benutzer wiedr gänderet odr glöscht wärde chönne. Wenn Si nit wänn, dass ander Lüt an Ihrem tekscht ummedoktere denn schicke Si ihn jetz nit ab.<br />
+Si verspräche uns usserdäm, dass Si des alles selber gschriebe oder vo nere Quälle kopiert hen, wo Public Domain odr sunscht frei isch (lueg $1 für Details).
+<strong>SETZE SI DO OHNI ERLAUBNIS CHEINI URHEBERRÄCHTLICH GSCHÜTZTI WÄRK INE!</strong>',
+'longpagewarning'       => '<span style="color:#ff0000">WARNIG:</span> Die Syten isch $1KB groß; elteri Browser chönnte Problem ha, Sytene z bearbeite wo gröser sy als 32KB. Überleg bitte, öb du Abschnitte vo dere Syte zu eigete Sytene chönntsch usboue.',
+# problem with link: [[Project:Geschützte Seiten|Regle für gschützti Syte]]
+'protectedpagewarning'  => '<span style="color:#ff0000">WARNIG:</span> Die Syten isch gsperrt worde, so das se nume Benutzer mit Sysop-Rechten chöi verändere. Bitte häb di a d [[Project:Geschützte Seiten|Regle für gschützti Syte]].',
+'semiprotectedpagewarning'=> '\'\'\'\'\'Halbsperrung\'\'\': Diese Seite kann von angemeldeten Benutzern bearbeitet werden. Für nicht angemeldete oder gerade eben erst angemeldete Benutzer ist der Schreibzugang gesperrt.\'\'',
+'templatesused'         => 'Selli Vorlage wärde in sellem Artikel bruucht:',
+'edittools'             => '<!-- Selle Text wird untr em "ändere"-Formular un bim "Uffelade"-Formular aagzeigt. -->',
+'revhistory'            => 'Früecheri Versione',
+'currentrev'            => 'Itzigi Version',
+'revisionasof'          => 'Version vo $1',
+'previousrevision'      => '← Vorderi Version',
+'nextrevision'          => 'Nächschti Version →',
+'currentrevisionlink'   => 'Itzigi Version',
+'cur'                   => 'Jetz',
+'next'                  => 'Nächschti',
+'last'                  => 'vorane',
+'histlegend'            => 'Du chasch zwei Versionen uswähle und verglyche.<br />
+Erklärig: (aktuell) = Underschid zu jetz,
+(vorane) = Underschid zur alte Version, <strong>K</strong> = chlyni Änderig',
+'histfirst'             => 'Eltischti',
+'histlast'              => 'Nöischti',
+'difference'            => '(Unterschide zwüsche Versione)',
+'compareselectedversions'=> 'Usgwählti Versione verglyche',
+'searchresults'         => 'Suech-Ergäbnis',
+'searchresulttext'      => 'Für wiiteri Informatione zuem Sueche uff {{SITENAME}} chönne Si mol uff [[{{MediaWiki:helppage}}|{{int:help}}]] luege.',
+'searchsubtitle'           => 'Für d Suechaafrag «[[:$1]]»',
+'searchsubtitleinvalid'           => 'Für d Suechaafrag «$1»',
+'prevn'                 => 'vorderi $1',
+'nextn'                 => 'nächschti $1',
+'viewprevnext'          => '($1) ($2) aazeige; ($3) uf ds Mal',
+'powersearch'           => 'Suechi',
+'powersearchtext'       => '
+Suche in Namensräumen :<br />
+$1<br />
+$2 Zeige auch REDIRECTs   Suche nach $3 $9',
+'searchdisabled'        => '<p>Die Volltextsuche wurde wegen Überlastung temporär deaktiviert. Derweil können Sie entweder folgende Google- oder Yahoo-Suche verwenden, die allerdings nicht den aktuellen Stand widerspiegeln.</p>',
+'blanknamespace'        => '(Haupt-)',
+'preferences'           => 'Iistellige',
+'prefsnologin'          => 'Nid aagmäldet',
+'prefsnologintext'      => 'Du muesch [[Special:Userlogin|aagmäldet]] sy, für Benutzerystellige chönne z ändere',
+'prefsreset'            => 'Du hesch itz wider Standardystellige',
+'changepassword'        => 'Passwort ändere',
+'datedefault'           => 'kei Aagab',
+'datetime'              => 'Datum un Zit',
+'prefs-personal'        => 'Benutzerdate',
+'prefs-rc'              => 'Letschti Änderige',
+'prefs-watchlist'       => 'Beobachtigslischte',
+'prefs-misc'            => 'Verschidnigs',
+'saveprefs'             => 'Änderige spychere',
+'resetprefs'            => 'Änderige doch nid spychere',
+'oldpassword'           => 'Alts Passwort',
+'newpassword'           => 'Nöis Passwort',
+'retypenew'             => 'Nöis Passwort (es zwöits Mal)',
+'textboxsize'           => 'Tekscht-Ygab',
+'rows'                  => 'Zylene',
+'columns'               => 'Spaltene',
+'searchresultshead'     => 'Suech-Ergäbnis',
+'resultsperpage'        => 'Träffer pro Syte',
+'contextlines'          => 'Zyle pro Träffer',
+'contextchars'          => 'Zeiche pro Zyle',
+'stubthreshold'         => 'Artiklen als churz markiere bis (Bytes)',
+'recentchangescount'    => 'Aazahl «letschti Änderige»',
+'savedprefs'            => 'Dyni Ystellige sy gspycheret worde.',
+'timezonelegend'        => 'Zytzone',
+'timezonetext'          => 'Zytdifferänz i Stunden aagä zwüsche der Serverzyt u dyre Lokalzyt',
+'localtime'             => 'Ortszyt',
+'timezoneoffset'        => 'Unterschid¹',
+'servertime'            => 'Aktuelli Serverzyt',
+'guesstimezone'         => 'Vom Browser la ysetze',
+'allowemail'            => 'andere Benutzer erlaube, dass si Ihne E-Bost schicke chönne',
+'defaultns'             => 'Namensrüüm wo standardmäässig söll gsuecht wärde:',
+'files'                 => 'Bilder',
+'userrights-lookup-user'=> 'Verwalte Gruppenzugehörigkeit',
+'editusergroup'         => 'Ändere vo Benutzerrächt',
+'userrights-editusergroup'=> 'Bearbeite Gruppenzugehörigkeit des Benutzers',
+'saveusergroups'        => 'Speichere Gruppenzugehörigkeit',
+'userrights-groupshelp' => 'Wähle die Gruppen, aus denen der Benutzer entfernt oder zu denen er hinzugefügt werden soll.
+Nicht selektierte Gruppen werden nicht geändert. Eine Selektion kann mit Strg + Linksklick (bzw. Ctrl + Linksklick) entfernt werden.',
+'recentchanges'         => 'Letschti Änderige',
+'recentchangestext'     => 'Uff sellere Syte chönne Si die letschte Änderige in sellem Wiki aaluege.',
+'rcnote'                => 'Anzeig: <b>$1</b> Änderige; <b>$2</b> Täg   (<b>N</b> = nöji Artikel; <b>K</b> = chlyni Änderig; <b><span style="color:#ff0000">!</span></b> = unprüeft)',
+'rcnotefrom'            => 'Dies sind die Änderungen seit <b>$2</b> (bis zu <b>$1</b> gezeigt).',
+'rclistfrom'            => '<small>Nöji Änderige ab $1 aazeige (UTC)</small>',
+'rcshowhideminor'       => 'Chlynigkeite $1',
+'rcshowhideliu'         => 'Aagmoldene Benützer $1',
+'rcshowhideanons'       => 'Uuaagmoldene Benützer $1',
+'rcshowhidepatr'        => 'Patrulyrtes $1',
+'rcshowhidemine'        => 'Eigeni Änderige $1',
+'rclinks'               => 'Zeig di letschte $1 Änderige vo de vergangene $2 Täg.<br />$3',
+'diff'                  => 'Unterschid',
+'hist'                  => 'Versione',
+'hide'                  => 'usblände',
+'show'                  => 'yblände',
+'upload'                => 'Datei uffelade',
+'uploadbtn'             => 'Bild lokal ufelade',
+'uploadnologintext'     => 'Sie müssen [[Special:Userlogin|angemeldet sein]], um Dateien hochladen zu können.',
+'uploadtext'            => 'Bruuche Si sell Formular unte go Dateie uffelade. Zuem aaluege odr fruener uffegladeni Bilder go sueche lueg uff de [[Special:Imagelist|Lischte vo uffegladene Dateie]], Uffeladige un Löschige sin au protokolliert uff [[Special:Log/upload|Uffeladige Protokoll]].
+
+Go e Datei odr en Bild innere Syte iizbaue schriibe Si eifach ane:
+* \'\'\'<nowiki>[[</nowiki>{{ns:image}}<nowiki>:file.jpg]]</nowiki>\'\'\'
+* \'\'\'<nowiki>[[</nowiki>{{ns:image}}<nowiki>:file.png|alt text]]</nowiki>\'\'\'
+or
+* \'\'\'<nowiki>[[</nowiki>{{ns:media}}<nowiki>:file.ogg]]</nowiki>\'\'\'
+go direkt e Gleich uff d Datei z\'mache.',
+'copyrightpage'         => 'Project:Copyright',
+'minlength'             => 'Bilddateien müssen mindestens drei Buchstaben haben.',
+'largefile'             => 'Bitte keine Bilder über 100 KByte hochladen.',
+'fileuploaded'          => 'D Datei „$1“ isch erfolgriich uffeglade worde. Bitte folge Sie em Gleich $2 uff d Beschriibigssyte un dän Si wiiteri Informatione zue de Datei aa, wo Si si her hän, wer si gmacht het un so wiiter. Wenn sell e Bild isch denn chönne Si des eso iifuege: <tt><nowiki>[[Image:$1|thumb|Beschriibig]]</nowiki></tt>',
+'imagelist'             => 'Lischte vo Bilder',
+'imagelisttext'         => 'Hier ist eine Liste von $1 Bildern, sortiert $2.',
+'getimagelist'          => 'Lade Bilderliste',
+'ilsubmit'              => 'Suech',
+'showlast'              => 'Zeige die letzten $1 Bilder, sortiert nach $2.',
+'imglegend'             => 'Legende: (Beschreibung) = Zeige/Bearbeite Bildbeschreibung.',
+'imghistory'            => 'Versione',
+'imghistlegend'         => 'Legende: (cur) = Dies ist das aktuelle Bild, (Löschen) = lösche
+diese alte Version, (Zurücksetzen) = verwende wieder diese alte Version.',
+'imagelinks'            => 'Bildverweise',
+'linkstoimage'          => 'Di folgende Sytene händ en Link zu dem Bildli:',
+'nolinkstoimage'        => 'Kein Artikel benutzt dieses Bild.',
+'sharedupload'          => 'Selli Datei wird vo verschiedene Projekt bruucht.',
+'noimage-linktext'      => 'Lads uffe!',
+'unwatchedpages'        => 'Unbeobachteti Sytene',
+'listredirects'         => 'Lischte vo Wyterleitige (Redirects)',
+'sitestats'             => 'Statistik',
+'userstats'             => 'Benützer-Statistik',
+'sitestatstext'         => 'Zuer Ziit git\'s \'\'\'$2\'\'\' [[Special:Allpages|Artikel]] in {{SITENAME}}.
+
+Insgsamt sin \'\'\'$1\'\'\' Syte in de Datebank. Selli sin au alli Sytene wo usserhalb vom Hauptnamensruum exischtiere (z.B. Diskussionssyte) odr wo cheini interne Gleicher hen odr wo au numme [[Special:Listredirects|Weiterleitige]] sin.
+
+Insgesamt wurden \'\'\'$8\'\'\' Dateien hochgeladen.
+
+Es isch insgsamt \'\'\'$4\'\'\' mol öbbis gänderet worde un drmit jedi Syte im Durchschnitt \'\'\'$5\'\'\' mol und \'\'\'$6\'\'\' Seitenabrufe pro Bearbeitung.
+
+Es het \'\'\'$8\'\'\' uffegladeni Dateie.
+
+Zuer Ziit stöhn \'\'\'$7\'\'\' Arbete zuem mache aa.',
+# problem with link: [[Project:Benutzer|regischtriirte Benutzer]]
+'userstatstext'         => 'S git \'\'\'$1\'\'\' regischtriirte Benutzer. Dodrvo sin \'\'\'$2\'\'\' (also \'\'\'$4 %\'\'\') Administratore (lueg au uff $3).',
+'disambiguationspage'   => 'Template:Begriffsklärig',
+'doubleredirects'       => 'Doppelte Redirects',
+'brokenredirects'       => 'Kaputti Wyterleitige',
+'brokenredirectstext'   => 'Di folgende Wyterleitige füered zu Artikel wo\'s gar nid git.',
+'nbytes'                => '$1 {{PLURAL:$1|byte|bytes}}',
+'ncategories'           => '$1 {{PLURAL:$1|Kategori|Kategorie}}',
+'nlinks'                => '$1 {{PLURAL:$1|Gleich|Gleicher}}',
+'nmembers'              => '$1 {{PLURAL:$1|Syte|Sytene}}',
+'nrevisions'            => '$1 {{PLURAL:$1|Revision|Revisione}}',
+'nviews'                => '$1 {{PLURAL:$1|Betrachtig|Betrachtige}}',
+'lonelypages'           => 'Verwaisti Sytene',
+'uncategorizedpages'    => 'Nit kategorisierte Sytene',
+'uncategorizedcategories'=> 'Nit kategorisierte Kategorie',
+'unusedimages'          => 'Verwaiste Bilder',
+'popularpages'          => 'Beliebti Artikel',
+'wantedpages'           => 'Artikel wo fähle',
+'mostlinked'            => 'Meistverlinke Seiten',
+'allpages'              => 'alli Sytene',
+'prefixindex'           => 'Alli Artikle (mit Präfix)',
+'randompage'            => 'Zuefalls-Artikel',
+'shortpages'            => 'Churzi Artikel',
+'longpages'             => 'Langi Artikel',
+'deadendpages'          => 'Artikel ohni Links («Sackgasse»)',
+'listusers'             => 'Lischte vo Benutzer',
+'specialpages'          => 'Spezialsytene',
+'spheading'             => 'Spezial-Sytene für alli Benützer',
+'recentchangeslinked'   => 'Verlinktes prüefe',
+'newpages'              => 'Nöji Artikel',
+'ancientpages'          => 'alti Sytene',
+'move'                  => 'verschiebe',
+'movethispage'          => 'Artikel verschiebe',
+'booksources'           => 'ISBN-Suech',
+'categoriespagetext'    => 'Selli Kategorie gits in dem Wiki:',
+'userrights'            => 'Benutzerrechtsverwaltung',
+'alphaindexline'        => 'vo $1 bis $2',
+'alllogstext'           => 'Kombinierti Aasicht vo de Protokoll vom Ufelade, Lösche, Schütze, Spärre un de Adminischtratore.
+Si chönnet d Aazeig iischränke wenn Si e Protokoll, e Benutzername odr e Sytename iigän.',
+'logempty'              => 'Kei passendi Yträg gfunde.',
+'nextpage'              => 'Nächscht Syte ($1)',
+'allpagesfrom'          => 'Syte aazeige vo:',
+'allarticles'           => 'alli Artikel',
+'allinnamespace'        => 'alli Sytene im Namensruum $1',
+'allnotinnamespace'     => 'alli Sytene wo nit im $1 Namensruum sin',
+'allpagesprev'          => 'Füehrigs',
+'allpagesnext'          => 'nächschts',
+'allpagessubmit'        => 'gang',
+'allpagesprefix'        => 'Alli Sytene mit em Präfix:',
+'mailnologin'           => 'Du bisch nid aagmäldet oder hesch keis Mail aaggä',
+'mailnologintext'       => 'Du muesch [[Special:Userlogin|aagmäldet sy]] und e bestätigeti e-Mail-Adrässen i dynen [[Special:Preferences|Ystelligen]] aaggä ha, für das du öpper anderem es e-Mail chasch schicke.',
+'emailuser'             => 'Es Mail schrybe',
+'emailpage'             => 'e-Mail ane BenutzerIn',
+'emailpagetext'         => 'Öpperem, wo sälber e bestätigeti e-Mail-Adrässe het aaggä, chasch du mit däm Formular es Mail schicke. Im Absänder steit dyni eigeti e-Mail-Adrässe, so das me dir cha antworte.',
+'usermailererror'       => 'Das Mail-Objekt gab einen Fehler zurück:',
+'noemailtitle'          => 'Kei e-Mail-Adrässe',
+'noemailtext'           => 'Dä Benutzer het kei bestätigeti e-Mail-Adrässen aaggä oder wot kei e-Mails vo anderne Benutzer empfa.',
+'emailfrom'             => 'Vo',
+'emailto'               => 'Empfänger',
+'emailsubject'          => 'Titel',
+'emailmessage'          => 'E-Bost',
+'emailsend'             => 'Abschicke',
+'emailsent'             => 'E-Bost furtgschickt',
+'emailsenttext'         => 'Dys e-Mail isch verschickt worde.',
+'watchlist'             => 'Beobachtigslischte',
+'mywatchlist'             => 'Beobachtigslischte',
+'nowatchlist'           => 'Du hesch ke Yträg uf dyre Beobachtigslischte.',
+'watchnologintext'      => 'Du musst [[Special:Userlogin|angemeldet]] sein, um deine Beobachtungsliste zu bearbeiten.',
+'addedwatch'            => 'zue de Beobachtigslischte drzue do',
+'addedwatchtext'        => 'D Syte "[[:$1]]" stoht jetz uf Ihre [[Special:Watchlist|Beobachtigslischte]].
+Neui Änderige an de Syte odr de Diskussionssyte drvo chasch jetz dört seh. Usserdem sin selli Änderige uf de [[Special:Recentchanges|letschte Änderige]] fett gschriibe, dass Si s schneller finde.
+
+Wenn Si d Syte spöter wiedr vo de Lischte striiche wenn, denn drucke Si eifach uf "nümm beobachte".',
+'watch'                 => 'beobachte',
+'watchthispage'         => 'Die Syte beobachte',
+'unwatch'               => 'nümm beobachte',
+'watchnochange'         => 'Vo den Artikle, wo du beobachtisch, isch im aazeigte Zytruum kene veränderet worde.',
+'watchdetails'          => '{| class="messagebox" id="confirmemail" style="width:auto; background-color:#ffffff; border:1px #ccccff solid;  margin: 0 1em 1em;"
+|-
+| \'\'\'Hywys #1:\'\'\' Dur a Schprôchcode-Umschtällung sind kurzzitig vyle Mäldunge uf Änglisch gsi; sot des bi dir allad no dr Fall sy, dann schtell in dyne [[Special:Preferences|Ystellige]] d „Schprôch vo dr Benuzeroberfläch“ uf [\'\'\'gsw - Alemannisch\'\'\'] und schpoicher\'s ab!
+|-
+| \'\'\'Hywys #2:\'\'\' Falls du bi dyner Ärschtaamäldung ou dyne E-Mail-Adress aagea hosch, und du wyterhin Nochrichta yber s’E-Mail-Formulaar empfange wit, isch a [[Special:Confirmemail|Bschtätigung vo dyner E-Mail-Adress]] nootwändig.
+|}
+
+* $1 Artikel wärde beobachtet (Diskussionssyte nid zelt, aber ou beobachtet)
+* [{{fullurl:Special:Watchlist|hideOwn=1}} Eigeni Änderige usblände] |   [[Special:Watchlist/edit|Kompletti Lischte zeigen u bearbeite]]',
+'wlshowlast'            => 'Zeig di letschte $1 Stunde $2 Tage $3',
+'wlhideshowown'         => '$1 vo dir sälber verändereti Artikle',
+'wlhideshowbots'        => '$1 bot edits.',
+'enotif_subject'        => 'Die {{SITENAME}} Seite $PAGETITLE wurde von $PAGEEDITOR $CHANGEDORCREATED',
+'enotif_lastvisited'    => '$1 zeigt alle Änderungen auf einen Blick.',
+'enotif_body'           => 'Liebe/r $WATCHINGUSERNAME,
+
+d {{SITENAME}} Syte $PAGETITLE isch vom $PAGEEDITOR am $PAGEEDITDATE $CHANGEDORCREATED,
+di aktuelli Version isch: $PAGETITLE_URL
+
+$NEWPAGE
+
+Zämmenfassig vom Autor: $PAGESUMMARY $PAGEMINOREDIT
+Kontakt zuem Autor:
+Mail $PAGEEDITOR_EMAIL
+Wiki $PAGEEDITOR_WIKI
+
+Es wird chei wiiteri Benochrichtigungsbost gschickt bis Si selli Syte wiedr bsueche. Uf de Beobachtigssyte chönne Si d Beobachtigsmarker zrucksetze.
+
+             Ihr fründlichs {{SITENAME}} Benochrichtigssyschtem
+
+---
+Ihri Beobachtigslischte {{fullurl:Special:Watchlist/edit}}
+Hilf zue de Benutzig gits uff {{fullurl:{{MediaWiki:helppage}}}}',
+'deletepage'            => 'Syte lösche',
+'confirm'               => 'Bestätige',
+'excontentauthor'       => 'einzigen Inhalt: \'$1\' (bearbeitet worde nume dür \'$2\')',
+'confirmdelete'         => 'Löschig bestätige',
+'deletesub'             => '(«$1» lösche)',
+'historywarning'        => '<span style="color:#ff0000">WARNUNG:</span> Die Seite die Sie zu löschen gedenken hat eine Versionsgeschichte:',
+'confirmdeletetext'     => 'Du bisch drann, en Artikel oder es Bild mitsamt Versionsgschicht permanänt us der Datebank z lösche.
+Bitte bis dir über d Konsequänze bewusst, u bis sicher, das du di a üsi [[{{MediaWiki:policy-url}}|Leitlinien]] haltisch.',
+'policy-url'            => 'Project:Leitlinien',
+'actioncomplete'        => 'Uftrag usgfuehrt.',
+'deletedtext'           => '«$1» isch glösche worde.
+Im $2 het’s e Lischte vo de letschte Löschige.',
+'deletionlog'           => 'Lösch-Logbuech',
+'deletecomment'         => 'Löschigsgrund',
+'alreadyrolled'         => 'Cha d Änderig uf [[:$1]] wo [[User:$2|$2]] ([[User talk:$2|Talk]]) gmacht het nit zruckneh will des öbber anderscht scho gmacht het.
+
+Di letschti Änderig het [[User:$3|$3]] ([[User talk:$3|Talk]]) gmacht.',
+'revertpage'            => 'Rückgängig gmacht zuer letschte Änderig vo $1',
+# problem with link: [[Project:Geschützte Seiten]]
+'protectlogtext'        => 'Dies ist eine Liste der blockierten Seiten. Siehe [[Project:Geschützte Seiten]] für mehr Informationen.',
+'protectcomment'        => 'Grund der Sperrung',
+'undeletehistorynoadmin'=> 'Dieser Artikel wurde gelöscht. Der Grund für die Löschung ist in der Zusammenfassung angegeben,
+genauso wie Details zum letzten Benutzer der diesen Artikel vor der Löschung bearbeitet hat.
+Der aktuelle Text des gelöschten Artikels ist nur Administratoren zugänglich.',
+'undeletebtn'           => 'Wiederherstellen!',
+'undeletedrevisions'    => '{{PLURAL:$1|ei Revision|$1 Revisione}} wiedr zruckgholt.',
+'namespace'             => 'Namensruum:',
+'invert'                => 'Uswahl umkehre',
+'contributions'         => 'Benutzer-Byträg',
+'mycontris'             => 'mini Biiträg',
+'whatlinkshere'         => 'Was linkt da ane?',
+'linkshere'             => 'Di folgende Sytene händ en Link wo da ane führt:',
+'nolinkshere'           => 'Kein Artikel verweist hierhin.',
+'istemplate'            => 'Vorlageybindig',
+'blockip'               => 'Benutzer bzw. IP blockyre',
+'ipbsubmit'             => 'Adresse blockieren',
+'ipboptions'            => '1 Stunde:1 hour,2 Stunden:2 hours,6 Stunden:6 hours,1 Tag:1 day,3 Tage:3 days,1 Woche:1 week,2 Wochen:2 weeks,1 Monat:1 month,3 Monate:3 months,1 Jahr:1 year,Für immer:indefinite',
+'ipblocklist'           => 'Lischte vo blockierte IP-Adresse',
+'blocklistline'         => '$1, $2 het $3 ($4) gschperrt',
+'blocklink'             => 'spärre',
+'contribslink'          => 'Byträg',
+'blocklogpage'          => 'Sperrigs-Protokoll',
+'blocklogentry'         => 'sperrt [[User:$1]] - ([[Special:Contributions/$1|Biiträg]]) für d Ziit vo: $2',
+'blocklogtext'          => 'Des ischs Logbuech yber Sperrunge un Entsperrunge vun Bnutzer. Automatisch blockti IP-Adresse werre nit erfasst. Lueg au [[Special:Ipblocklist|IP-Block Lischt]] fyr ä Lischt vun gsperrti Bnutzer.',
+'unblocklogentry'       => 'Blockade von [[User:$1]] aufgehoben',
+'rightslogtext'         => 'Des ischs Logbuech vun de Änderunge on Bnutzerrechte.',
+'already_sysop'         => 'Selle Benutzer isch scho Adminischtrator.',
+'already_bureaucrat'    => 'Selle Benutzer isch scho Bürokrat.',
+'movepage'              => 'Artikel verschiebe',
+'movepagetext'          => 'Mit däm Forumlar chasch du en Artikel verschiebe, u zwar mit syre komplette Versionsgschicht. Der alt Titel leitet zum nöie wyter, aber Links ufen alt Titel blyben unveränderet.',
+'movepagetalktext'      => 'D Diskussionssyte wird mitverschobe, \'\'\'ussert:\'\'\'
+*Du verschiebsch d Syten i nen andere Namensruum, oder
+*es git scho ne Diskussionssyte mit däm Namen oder
+*du wählsch unte d Option, se nid z verschiebe.
+
+I söttigne Fäll müessti d Diskussionssyten allefalls vo Hand kopiert wärde.',
+'movearticle'           => 'Artikel verschiebe',
+'movenologin'           => 'Du bisch nid aagmäldet',
+'movenologintext'       => 'Du muesch dich z’ersch [[Special:Userlogin|aamälde]] damit du die Syte chasch zügle.',
+'newtitle'              => 'Zum nöie Titel',
+'movepagebtn'           => 'Artikel verschiebe',
+'pagemovedsub'          => 'Verschiebig erfolgrych',
+'pagemovedtext'         => 'Artikel "[[$1]]" isch verschobe worden uf "[[$2]]".',
+'articleexists'         => 'A Syte mit sellem Name gits scho odr de Name isch ungültigt. Bitte nimm en andere.',
+'movedto'               => 'verschoben uf',
+'movetalk'              => 'Diskussionssyte nach Müglechkeit mitverschiebe',
+'talkpagemoved'         => 'D Diskussionssyten isch mitverschobe worde.',
+'1movedto2'             => '[[$1]] isch uf [[$2]] verschobe worde.',
+'1movedto2_redir'       => '[[$1]] isch uf [[$2]] verschobe worre un het drbii e Wiiterleitig übrschriebe.',
+'movereason'            => 'Grund',
+'selfmove'              => 'Der nöi Artikelname mues en andere sy als der alt!',
+'export'                => 'Sytenen exportiere',
+'exporttext'            => 'Sie können den Text und die Bearbeitungshistorie einer bestimmten oder einer Auswahl von Seiten nach XML exportieren. Das Ergebnis kann in ein anderes Wiki mit Mediawiki Software eingespielt werden, bearbeitet oder archiviert werden.',
+'allmessages'           => 'Systemnochrichte',
+'allmessagesname'       => 'Name',
+'allmessagesdefault'    => 'Standard-Tekscht',
+'allmessagescurrent'    => 'jetzige Tekscht',
+'allmessagestext'       => 'Sell isch e Lischte vo alle mögliche Systemnochrichte ussem MediaWiki Namensruum.',
+'allmessagesnotsupportedUI'=> 'Diini Sprochiistellig \'\'\'$1\'\'\' wird vo Special:Allmessages uff sellere Syte nit unterschtützt.',
+'allmessagesnotsupportedDB'=> '\'\'\'Special:Allmessages\'\'\' cha nit bruucht wärde will \'\'\'$wgUseDatabaseMessages\'\'\' abgschalte isch.',
+'allmessagesfilter'     => 'Nochrichte nochem Name filtere:',
+'allmessagesmodified'   => 'numme gänderti aazeige',
+'importtext'            => 'Bitte speichere Si selli Syte vom Quellwiki met em Special:Export Wärkzüg ab un lade Si denn di Datei denn do uffe.',
+'anonymous'             => 'Anonyme Benutzer uff {{SITENAME}}',
+'lastmodifiedatby'        => 'Diese Seite wurde zuletzt geändert um $2, $1 von $3.',
+'and'                   => 'un',
+'othercontribs'         => 'Basiert auf der Arbeit von $1.',
+'spamprotectiontitle'   => 'Spamschutz-Filter',
+'subcategorycount'      => 'In sellere Kategori {{PLURAL:$1|isch no ei Unterkategori|sin no $1 Unterkategorie}}.',
+'categoryarticlecount'  => 'In sellere Kategorie {{PLURAL:$1|isch ei Artikel|sin $1 Artikel}}.',
+'listingcontinuesabbrev'=> ' (Forts.)',
+'mw_math_png'           => 'Immer als PNG aazeige',
+'mw_math_simple'        => 'Eifachs TeX als HTML aazeige, süsch als PNG',
+'mw_math_html'          => 'Falls müglech als HTML aazeige, süsch als PNG',
+'mw_math_source'        => 'Als TeX la sy (für Tekschtbrowser)',
+'mw_math_modern'        => 'Empfolnigi Ystellig für modärni Browser',
+'markaspatrolleddiff'   => 'Als geprüft markiere',
+'markaspatrolledtext'   => 'Den Artikel als geprüft markiere',
+'markedaspatrolledtext' => 'Die usgwählte Artikeländerung isch als geprüft markiert worre.',
+'monobook.js' => '/* Deprecated; use [[MediaWiki:common.js]] */',
+'accesskey-pt-userpage' => '.',
+'tooltip-pt-userpage' => 'Myni Benutzersyte',
+'accesskey-pt-mytalk' => 'n',
+'tooltip-pt-mytalk' => 'Myni Diskussionssyte',
+'accesskey-pt-preferences' => '',
+'tooltip-pt-preferences' => 'Myni Ystellige',
+'accesskey-pt-watchlist' => 'l',
+'tooltip-pt-watchlist' => 'Lischte vo de beobachtete Syte.',
+'accesskey-pt-mycontris' => 'y',
+'tooltip-pt-mycontris' => 'Lischte vo myne Byträg',
+'accesskey-pt-login' => 'o',
+'tooltip-pt-login' => 'Ylogge',
+'accesskey-pt-logout' => '',
+'tooltip-pt-logout' => 'Uslogge',
+'accesskey-ca-article' => 'a',
+'tooltip-ca-article' => 'Artikel aaluege',
+'accesskey-ca-talk' => 't',
+'tooltip-ca-talk' => 'Diskussion zum Artikelinhalt',
+'accesskey-ca-edit' => 'e',
+'tooltip-ca-edit' => 'Syte bearbeite. Bitte vor em Spychere d Vorschou aaluege.',
+'accesskey-ca-addsection' => '+',
+'tooltip-ca-addsection' => 'E Kommentar zu dere Syte derzuetue.',
+'accesskey-ca-viewsource' => 'e',
+'tooltip-ca-viewsource' => 'Die Syte isch geschützt. Du chasch der Quelltext aaluege.',
+'accesskey-ca-history' => 'h',
+'tooltip-ca-history' => 'Früecheri Versione vo dere Syte.',
+'accesskey-ca-protect' => '=',
+'tooltip-ca-protect' => 'Seite beschütze',
+'accesskey-ca-delete' => 'd',
+'tooltip-ca-delete' => 'Syten entsorge',
+'accesskey-ca-undelete' => 'd',
+'tooltip-ca-undelete' => 'Sodeli, da isch es wider.',
+'accesskey-ca-move' => 'm',
+'tooltip-ca-move' => 'Dür ds Verschiebe gits e nöie Name.',
+'accesskey-ca-nomove' => '',
+'tooltip-ca-nomove' => 'Du darfsch die Syte nid verschiebe.',
+'accesskey-ca-watch' => 'w',
+'tooltip-ca-watch' => 'Tue die Syten uf dyni Beobachtigslischte.',
+'accesskey-ca-unwatch' => 'w',
+'tooltip-ca-unwatch' => 'Nim die Syte us dyre Beobachtungslischte furt.',
+'accesskey-search' => 'f',
+'tooltip-search' => 'Dürchsuech das Wiki',
+'accesskey-p-logo' => '',
+'tooltip-p-logo' => 'Houptsyte',
+'accesskey-n-mainpage' => 'z',
+'tooltip-n-mainpage' => 'Gang uf d Houptsyte',
+'accesskey-n-portal' => '',
+'tooltip-n-portal' => 'Über ds Projekt, was du chasch mache, wo du was findsch',
+'accesskey-n-recentchanges' => 'r',
+'tooltip-n-recentchanges' => 'Lischte vo de letschten Änderige i däm Wiki.',
+'accesskey-n-randompage' => 'x',
+'tooltip-n-randompage' => 'E zuefälligi Syte',
+'accesskey-n-help' => '',
+'tooltip-n-help' => 'Ds Ort zum Usefinde.',
+'accesskey-n-sitesupport' => '',
+'tooltip-n-sitesupport' => 'Unterstütz üs',
+'accesskey-t-whatlinkshere' => 'j',
+'tooltip-t-whatlinkshere' => 'Lischte vo allne Sytene, wo do ane linke',
+'accesskey-t-recentchangeslinked' => 'k',
+'tooltip-t-recentchangeslinked' => 'Letschti Änderige vo de Syte, wo vo do verlinkt sin',
+'accesskey-feed-rss' => '',
+'tooltip-feed-rss' => 'RSS-Feed für selli Syte',
+'accesskey-feed-atom' => '',
+'tooltip-feed-atom' => 'Atom-Feed für selli Syte',
+'accesskey-t-contributions' => '',
+'tooltip-t-contributions' => 'Lischte vo de Byträg vo däm Benutzer',
+'accesskey-t-emailuser' => '',
+'tooltip-t-emailuser' => 'Schick däm Benutzer e E-Bost',
+'accesskey-t-specialpages' => 'q',
+'tooltip-t-specialpages' => 'Lischte vo allne Spezialsyte',
+'accesskey-ca-nstab-main' => 'c',
+'tooltip-ca-nstab-main' => 'Artikelinhalt aaluege',
+'accesskey-ca-nstab-user' => 'c',
+'tooltip-ca-nstab-user' => 'Benutzersyte aaluege',
+'accesskey-ca-nstab-media' => 'c',
+'tooltip-ca-nstab-media' => 'Mediasyte aaluege',
+'accesskey-ca-nstab-special' => '',
+'tooltip-ca-nstab-special' => 'Sell isch e Spezialsyte, du chasch se nid bearbeite.',
+'accesskey-ca-nstab-project' => 'a',
+'tooltip-ca-nstab-project' => 'D Projektsyte aaluege',
+'accesskey-ca-nstab-image' => 'c',
+'tooltip-ca-nstab-image' => 'Die Bildsyten aaluege',
+'accesskey-ca-nstab-mediawiki' => 'c',
+'tooltip-ca-nstab-mediawiki' => 'D Systemmäldige aaluege',
+'accesskey-ca-nstab-template' => 'c',
+'tooltip-ca-nstab-template' => 'D Vorlag aaluege',
+'accesskey-ca-nstab-help' => 'c',
+'tooltip-ca-nstab-help' => 'D Hilfssyten aaluege',
+'accesskey-ca-nstab-category' => 'c',
+'tooltip-ca-nstab-category' => 'D Kategoryesyten aaluege',
+'previousdiff'          => '← Vorderi Änderig',
+'nextdiff'              => 'Nächschti Änderig →',
+'imagemaxsize'          => 'Maximali Gröössi vo de Bilder uf de Bildbeschrybigs-Sytene:',
+'thumbsize'             => 'Bildvorschou-Gröössi:',
+'newimages'             => 'Gallery vo noie Bilder',
+'mediawarning'          => '
+===Warnung!===
+Diese Art von Datei kann böswilligen Programmcode enthalten.
+Durch das Herunterladen oder Öffnen der Datei kann der Computer beschädigt werden.
+Bereits das Anklicken des Links kann dazu führen dass der Browser die Datei öffnet
+und unbekannter Programmcode zur Ausführung kommt.
+
+Die Betreiber dieses Wikis können keine Verantwortung für den Inhalte
+dieser Datei übernehmen. Sollte diese Datei tatsächlich böswilligen Programmcode enthalten,
+sollte umgehend ein Administrator informiert werden!',
+'fileinfo'              => '$1KB, MIME Typ: <code>$2</code>',
+'exif-orientation'      => 'Orientierung',
+'exif-copyright'        => 'Copyright',
+'exif-pixelxdimension'  => 'Valind image height',
+'exif-fnumber'          => 'F-Wert',
+'exif-isospeedratings'  => 'Filmempfindlichkeit (ISO)',
+'exif-shutterspeedvalue'=> 'Shutter Speed Value',
+'exif-brightnessvalue'  => 'Brightness Value',
+'edit-externally-help'  => 'Siehe [http://meta.wikimedia.org/wiki/Hilfe:Externe_Editoren Installations-Anweisungen] für weitere Informationen',
+'watchlistall1'         => 'alli',
+'watchlistall2'         => 'alli',
+'confirmemail'          => 'Bschtätigung vo Ihre E-Bost-Adräss',
+'confirmemail_text'     => 'Dermit du di erwyterete Mailfunktione chasch bruuche, muesch du die e-Mail-Adrässe, wo du hesch aaggä, la bestätige. Klick ufe Chnopf unte; das schickt dir es Mail. I däm Mail isch e Link; we du däm Link folgsch, de tuesch dadermit bestätige, das die e-Mail-Adrässe dyni isch.',
+'confirmemail_send'     => 'Bestätigungs-Mail verschicke',
+'confirmemail_sent'     => 'Es isch dir es Mail zur Adrässbestätigung gschickt worde.',
+'confirmemail_sendfailed'=> 'Could not send confirmation mail due to misconfigured server or invalid characters in e-mail address.',
+'confirmemail_success'  => 'Dyni e-Mail-Adrässen isch bestätiget worde. Du chasch di jitz ylogge.',
+'confirmemail_loggedin' => 'Dyni e-Mail-Adrässen isch jitz bestätiget.',
+'confirmemail_subject'  => '{{SITENAME}} e-Mail-Adrässbestätigung',
+'confirmemail_body'     => 'Hallo
+
+{{SITENAME}}-BenutzerIn «$2» — das bisch allwäg du — het sech vor IP-Adrässen $1 uus mit deren e-Mail-Adrässe bi {{SITENAME}} aagmäldet.
+
+Für z bestätige, das die Adrässe würklech dir isch, u für dyni erwytereten e-Mail-Funktionen uf {{SITENAME}} yzschalte, tue bitte der folgend Link i dym Browser uuf:
+
+$3
+
+Falls du *nid* $2 sötsch sy, de tue dä Link bitte nid uuf.
+
+Die Bestätigung isch nume müglech bis $4.
+
+Fründtlechi Grüess',
+'confirm_purge'         => 'Die Zwischeschpoicherung vo der Syte „{{FULLPAGENAME}}“ lösche?
+
+$1
+
+<div style="font-size: 95%; margin-top: 2em;">
+\'\'\'\'\'Erklärig:\'\'\'\'\'
+
+\'\'Zwüschespycherige (Cache) sy temporäri Kopye vore Websyten uf dym Computer. We ne Syte us em Zwüschespycher abgrüefft wird, de bruucht das weniger Rächeleischtig füre {{SITENAME}}-Server als en Abrueff vor Originalsyte.\'\'
+
+\'\'Falls du e Syte scho nes Wyli am Aaluege bisch, de het dy Computer sone Zwüschespycherig gmacht. Derby chönnt die Syten unter Umständ scho i dere Zyt liecht veraltere.\'\'
+
+\'\'Ds Lösche vor Zwüschespycherig zwingt der Server, dir di aktuellschti Version vor Syte z gä!\'\'
+</div>',
+'youhavenewmessagesmulti'=> 'Si hen neui Nochrichte: $1',
+);
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesGu.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesGu.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesGu.php	(revision 1280)
@@ -0,0 +1,18 @@
+<?php
+/**
+  * @addtogroup Language
+  */
+
+$digitTransformTable = array(
+	'0' => '૦',
+	'1' => '૧',
+	'2' => '૨',
+	'3' => '૩',
+	'4' => '૪',
+	'5' => '૫',
+	'6' => '૬',
+	'7' => '૭',
+	'8' => '૮',
+	'9' => '૯'
+);
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesHe.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesHe.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesHe.php	(revision 1280)
@@ -0,0 +1,2309 @@
+<?php
+/**
+ * Hebrew (עברית)
+ *
+ * @addtogroup Language
+ *
+ * @author Rotem Dan (July 2003)
+ * @author Rotem Liss (March 2006 on)
+ */
+
+$rtl = true;
+$defaultUserOptionOverrides = array(
+	# Swap sidebar to right side by default
+	'quickbar' => 2,
+);
+
+$linkTrail = '/^([a-zא-ת]+)(.*)$/sDu';
+$fallback8bitEncoding = 'windows-1255';
+
+$skinNames = array(
+	'standard'    => 'רגיל',
+	'nostalgia'   => 'נוסטלגי',
+	'cologneblue' => 'מים כחולים',
+	'davinci'     => "דה־וינצ'י",
+	'simple'      => 'פשוט',
+	'mono'        => 'מונו',
+	'monobook'    => 'מונובוק',
+	'myskin'      => 'הרקע שלי',
+	'chick'       => "צ'יק"
+);
+
+$dateFormats = array(
+	'mdy time' => 'H:i',
+	'mdy date' => 'xg j, Y',
+	'mdy both' => 'H:i, xg j, Y',
+
+	'dmy time' => 'H:i',
+	'dmy date' => 'j xg Y',
+	'dmy both' => 'H:i, j xg Y',
+
+	'ymd time' => 'H:i',
+	'ymd date' => 'Y xg j',
+	'ymd both' => 'H:i, Y xg j',
+
+	'ISO 8601 time' => 'xnH:xni:xns',
+	'ISO 8601 date' => 'xnY-xnm-xnd',
+	'ISO 8601 both' => 'xnY-xnm-xnd"T"xnH:xni:xns',
+);
+
+$bookstoreList = array(
+	'מיתוס'          => 'http://www.mitos.co.il/',
+	'iBooks'         => 'http://www.ibooks.co.il/',
+	'Barnes & Noble' => 'http://search.barnesandnoble.com/bookSearch/isbnInquiry.asp?isbn=$1',
+	'Amazon.com'     => 'http://www.amazon.com/exec/obidos/ISBN=$1'
+);
+
+$magicWords = array(
+	'redirect'              => array( 0,    '#הפניה',                                  '#REDIRECT'              ),
+	'notoc'                 => array( 0,    '__ללא_תוכן_עניינים__', '__ללא_תוכן__',    '__NOTOC__'              ),
+	'nogallery'             => array( 0,    '__ללא_גלריה__',                          '__NOGALLERY__'          ),
+	'forcetoc'              => array( 0,    '__חייב_תוכן_עניינים__', '__חייב_תוכן__',   '__FORCETOC__'           ),
+	'toc'                   => array( 0,    '__תוכן_עניינים__', '__תוכן__',             '__TOC__'                ),
+	'noeditsection'         => array( 0,    '__ללא_עריכה__',                           '__NOEDITSECTION__'      ),
+	'start'                 => array( 0,    '__התחלה__',                               '__START__'              ),
+	'currentmonth'          => array( 1,    'חודש נוכחי',                               'CURRENTMONTH'           ),
+	'currentmonthname'      => array( 1,    'שם חודש נוכחי',                            'CURRENTMONTHNAME'       ),
+	'currentmonthnamegen'   => array( 1,    'שם חודש נוכחי קניין',                      'CURRENTMONTHNAMEGEN'    ),
+	'currentmonthabbrev'    => array( 1,    'קיצור חודש נוכחי',                         'CURRENTMONTHABBREV'     ),
+	'currentday'            => array( 1,    'יום נוכחי',                                'CURRENTDAY'             ),
+	'currentday2'           => array( 1,    'יום נוכחי 2',                              'CURRENTDAY2'            ),
+	'currentdayname'        => array( 1,    'שם יום נוכחי',                             'CURRENTDAYNAME'         ),
+	'currentyear'           => array( 1,    'שנה נוכחית',                               'CURRENTYEAR'            ),
+	'currenttime'           => array( 1,    'שעה נוכחית',                               'CURRENTTIME'            ),
+	'currenthour'           => array( 1,    'שעות נוכחיות',                             'CURRENTHOUR'            ),
+	'localmonth'            => array( 1,    'חודש מקומי',                               'LOCALMONTH'             ),
+	'localmonthname'        => array( 1,    'שם חודש מקומי',                            'LOCALMONTHNAME'         ),
+	'localmonthnamegen'     => array( 1,    'שם חודש מקומי קניין',                      'LOCALMONTHNAMEGEN'      ),
+	'localmonthabbrev'      => array( 1,    'קיצור חודש מקומי',                         'LOCALMONTHABBREV'       ),
+	'localday'              => array( 1,    'יום מקומי',                                'LOCALDAY'               ),
+	'localday2'             => array( 1,    'יום מקומי 2',                              'LOCALDAY2'              ),
+	'localdayname'          => array( 1,    'שם יום מקומי',                             'LOCALDAYNAME'           ),
+	'localyear'             => array( 1,    'שנה מקומית',                               'LOCALYEAR'              ),
+	'localtime'             => array( 1,    'שעה מקומית',                               'LOCALTIME'              ),
+	'localhour'             => array( 1,    'שעות מקומיות',                             'LOCALHOUR'              ),
+	'numberofpages'         => array( 1,    'מספר דפים כולל', 'מספר דפים',             'NUMBEROFPAGES'          ),
+	'numberofarticles'      => array( 1,    'מספר ערכים',                              'NUMBEROFARTICLES'       ),
+	'numberoffiles'         => array( 1,    'מספר קבצים',                              'NUMBEROFFILES'          ),
+	'numberofusers'         => array( 1,    'מספר משתמשים',                            'NUMBEROFUSERS'          ),
+	'numberofedits'         => array( 1,    'מספר עריכות',                             'NUMBEROFEDITS'          ),
+	'pagename'              => array( 1,    'שם הדף',                                  'PAGENAME'               ),
+	'pagenamee'             => array( 1,    'שם הדף מקודד',                            'PAGENAMEE'              ),
+	'namespace'             => array( 1,    'מרחב השם',                                'NAMESPACE'              ),
+	'namespacee'            => array( 1,    'מרחב השם מקודד',                          'NAMESPACEE'             ),
+	'talkspace'             => array( 1,    'מרחב השיחה',                              'TALKSPACE'              ),
+	'talkspacee'            => array( 1,    'מרחב השיחה מקודד',                        'TALKSPACEE'              ),
+	'subjectspace'          => array( 1,    'מרחב הנושא', 'מרחב הערכים',              'SUBJECTSPACE', 'ARTICLESPACE' ),
+	'subjectspacee'         => array( 1,    'מרחב הנושא מקודד', 'מרחב הערכים מקודד',  'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+	'fullpagename'          => array( 1,    'שם הדף המלא',                            'FULLPAGENAME'           ),
+	'fullpagenamee'         => array( 1,    'שם הדף המלא מקודד',                      'FULLPAGENAMEE'          ),
+	'subpagename'           => array( 1,    'שם דף המשנה',                            'SUBPAGENAME'            ),
+	'subpagenamee'          => array( 1,    'שם דף המשנה מקודד',                      'SUBPAGENAMEE'           ),
+	'basepagename'          => array( 1,    'שם דף הבסיס',                            'BASEPAGENAME'           ),
+	'basepagenamee'         => array( 1,    'שם דף הבסיס מקודד',                      'BASEPAGENAMEE'          ),
+	'talkpagename'          => array( 1,    'שם דף השיחה',                            'TALKPAGENAME'           ),
+	'talkpagenamee'         => array( 1,    'שם דף השיחה מקודד',                      'TALKPAGENAMEE'          ),
+	'subjectpagename'       => array( 1,    'שם דף הנושא', 'שם הערך',                 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+	'subjectpagenamee'      => array( 1,    'שם דף הנושא מקודד', 'שם הערך מקודד',     'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
+	'msg'                   => array( 0,    'הכללה:',                                'MSG:'                   ),
+	'subst'                 => array( 0,    'ס:',                                    'SUBST:'                 ),
+	'msgnw'                 => array( 0,    'הכללת מקור',                            'MSGNW:'                 ),
+	'img_thumbnail'         => array( 1,    'ממוזער',                                'thumbnail', 'thumb'     ),
+	'img_manualthumb'       => array( 1,    'ממוזער=$1',                             'thumbnail=$1', 'thumb=$1'),
+	'img_right'             => array( 1,    'ימין',                                  'right'                  ),
+	'img_left'              => array( 1,    'שמאל',                                 'left'                   ),
+	'img_none'              => array( 1,    'ללא',                                  'none'                   ),
+	'img_width'             => array( 1,    '$1px',                                 '$1px'                   ),
+	'img_center'            => array( 1,    'מרכז',                                 'center', 'centre'       ),
+	'img_framed'            => array( 1,    'ממוסגר', 'מסגרת',                      'framed', 'enframed', 'frame' ),
+	'img_page'              => array( 1,    'דף=$1', 'דף $1',                       'page=$1', 'page $1'     ),
+	'int'                   => array( 0,    'הודעה:',                               'INT:'                   ),
+	'sitename'              => array( 1,    'שם האתר',                              'SITENAME'               ),
+	'ns'                    => array( 0,    'מרחב שם:',                             'NS:'                    ),
+	'localurl'              => array( 0,    'כתובת יחסית:',                         'LOCALURL:'              ),
+	'localurle'             => array( 0,    'כתובת יחסית מקודד:',                   'LOCALURLE:'             ),
+	'server'                => array( 0,    'כתובת השרת', 'שרת',                    'SERVER'                 ),
+	'servername'            => array( 0,    'שם השרת',                              'SERVERNAME'             ),
+	'scriptpath'            => array( 0,    'נתיב הקבצים',                          'SCRIPTPATH'             ),
+	'grammar'               => array( 0,    'דקדוק:',                               'GRAMMAR:'               ),
+	'notitleconvert'        => array( 0,    '__ללא_המרת_כותרת__',                  '__NOTITLECONVERT__', '__NOTC__'),
+	'nocontentconvert'      => array( 0,    '__ללא_המרת_תוכן__',                   '__NOCONTENTCONVERT__', '__NOCC__'),
+	'currentweek'           => array( 1,    'שבוע נוכחי',                           'CURRENTWEEK'            ),
+	'currentdow'            => array( 1,    'מספר יום נוכחי',                       'CURRENTDOW'             ),
+	'localweek'             => array( 1,    'שבוע מקומי',                           'LOCALWEEK'              ),
+	'localdow'              => array( 1,    'מספר יום מקומי',                       'LOCALDOW'               ),
+	'revisionid'            => array( 1,    'מזהה גרסה',                            'REVISIONID'             ),
+	'plural'                => array( 0,    'רבים:',                                'PLURAL:'                ),
+	'fullurl'               => array( 0,    'כתובת מלאה:',                          'FULLURL:'               ),
+	'fullurle'              => array( 0,    'כתובת מלאה מקודד:',                    'FULLURLE:'              ),
+	'lcfirst'               => array( 0,    'אות ראשונה קטנה:',                     'LCFIRST:'               ),
+	'ucfirst'               => array( 0,    'אות ראשונה גדולה:',                    'UCFIRST:'               ),
+	'lc'                    => array( 0,    'אותיות קטנות:',                        'LC:'                    ),
+	'uc'                    => array( 0,    'אותיות גדולות:',                       'UC:'                    ),
+	'raw'                   => array( 0,    'ללא עיבוד:',                          'RAW:'                   ),
+	'displaytitle'          => array( 1,    'כותרת תצוגה',                         'DISPLAYTITLE'           ),
+	'rawsuffix'             => array( 1,    'ללא פסיק',                            'R'                      ),
+	'newsectionlink'        => array( 1,    '__יצירת_הערה__',                      '__NEWSECTIONLINK__'     ),
+	'currentversion'        => array( 1,    'גרסה נוכחית',                         'CURRENTVERSION'         ),
+	'urlencode'             => array( 0,    'נתיב מקודד:',                         'URLENCODE:'             ),
+	'anchorencode'          => array( 0,    'עוגן מקודד:',                         'ANCHORENCODE'           ),
+	'currenttimestamp'      => array( 1,    'זמן נוכחי',                           'CURRENTTIMESTAMP'       ),
+	'localtimestamp'        => array( 1,    'זמן מקומי',                           'LOCALTIMESTAMP'         ),
+	'directionmark'         => array( 1,    'סימן כיווניות',                       'DIRECTIONMARK', 'DIRMARK' ),
+	'language'              => array( 0,    '#שפה:',                              '#LANGUAGE:'             ),
+	'contentlanguage'       => array( 1,    'שפת תוכן',                           'CONTENTLANGUAGE', 'CONTENTLANG' ),
+	'pagesinnamespace'      => array( 1,    'דפים במרחב השם:',                   'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+	'numberofadmins'        => array( 1,    'מספר מפעילים',                      'NUMBEROFADMINS'         ),
+	'formatnum'             => array( 0,    'עיצוב מספר',                        'FORMATNUM'              ),
+	'padleft'               => array( 0,    'ריפוד משמאל',                       'PADLEFT'                ),
+	'padright'              => array( 0,    'ריפוד מימין',                       'PADRIGHT'               ),
+	'special'               => array( 0,    'מיוחד',                             'special'                ),
+	'defaultsort'           => array( 1,    'מיון רגיל:',                        'DEFAULTSORT:'           ),
+);
+
+$namespaceNames = array(
+	NS_MEDIA          => 'מדיה',
+	NS_SPECIAL        => 'מיוחד',
+	NS_MAIN           => '',
+	NS_TALK           => 'שיחה',
+	NS_USER           => 'משתמש',
+	NS_USER_TALK      => 'שיחת_משתמש',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK   => 'שיחת_$1',
+	NS_IMAGE          => 'תמונה',
+	NS_IMAGE_TALK     => 'שיחת_תמונה',
+	NS_MEDIAWIKI      => 'מדיה_ויקי',
+	NS_MEDIAWIKI_TALK => 'שיחת_מדיה_ויקי',
+	NS_TEMPLATE       => 'תבנית',
+	NS_TEMPLATE_TALK  => 'שיחת_תבנית',
+	NS_HELP           => 'עזרה',
+	NS_HELP_TALK      => 'שיחת_עזרה',
+	NS_CATEGORY       => 'קטגוריה',
+	NS_CATEGORY_TALK  => 'שיחת_קטגוריה',
+);
+
+$messages = array(
+# User preference toggles
+'tog-underline'               => 'סמן קישורים בקו תחתי',
+'tog-highlightbroken'         => 'סמן קישורים לדפים שלא נכתבו <a href="" class="new">כך</a> (או: כך<a href="" class="internal">?</a>))',
+'tog-justify'                 => 'ישר פסקאות',
+'tog-hideminor'               => 'הסתר שינויים משניים ברשימת השינויים האחרונים',
+'tog-extendwatchlist'         => 'הרחב את רשימת המעקב כך שתציג את כל השינויים המתאימים (אחרת: את השינוי האחרון בכל דף בלבד)',
+'tog-usenewrc'                => 'רשימת שינויים אחרונים משופרת (JavaScript)',
+'tog-numberheadings'          => 'מספר כותרות אוטומטית',
+'tog-showtoolbar'             => 'הצג את סרגל העריכה',
+'tog-editondblclick'          => 'ערוך דפים בלחיצה כפולה (JavaScript)',
+'tog-editsection'             => 'הפעל עריכת פסקאות באמצעות קישורים מהצורה [עריכה]',
+'tog-editsectiononrightclick' => 'הפעל עריכת פסקאות על־ידי לחיצה ימנית<br />על כותרות הפסקאות (JavaScript)',
+'tog-showtoc'                 => 'הצג תוכן עניינים<br />(עבור דפים עם יותר מ־3 כותרות)',
+'tog-rememberpassword'        => 'זכור את הכניסה שלי במחשב זה',
+'tog-editwidth'               => 'תיבת העריכה ברוחב מלא',
+'tog-watchcreations'          => 'עקוב אחרי דפים שיצרתי',
+'tog-watchdefault'            => 'עקוב אחרי דפים שערכתי',
+'tog-watchmoves'              => 'עקוב אחרי דפים שהעברתי',
+'tog-watchdeletion'           => 'עקוב אחרי דפים שמחקתי',
+'tog-minordefault'            => 'הגדר כל פעולת עריכה כמשנית אם לא צויין אחרת',
+'tog-previewontop'            => 'הצג תצוגה מקדימה לפני תיבת העריכה (או: אחריה)',
+'tog-previewonfirst'          => 'הצג תצוגה מקדימה בעריכה ראשונה',
+'tog-nocache'                 => 'נטרל משיכת דפים מזכרון המטמון שבשרת',
+'tog-enotifwatchlistpages'    => 'שלח לי דוא"ל כאשר נעשה שינוי בדפים הנצפים על־ידי',
+'tog-enotifusertalkpages'     => 'שלח לי דוא"ל כאשר נעשה שינוי בדף שיחת המשתמש שלי',
+'tog-enotifminoredits'        => 'שלח לי דוא"ל גם על עריכות משניות של דפים',
+'tog-enotifrevealaddr'        => 'חשוף את כתובת הדוא"ל שלי בהודעות דואר',
+'tog-shownumberswatching'     => 'הצג את מספר המשתמשים הצופים בדף',
+'tog-fancysig'                => 'הצג חתימה מסוגננת',
+'tog-externaleditor'          => 'השתמש בעורך חיצוני כברירת מחדל',
+'tog-externaldiff'            => 'השתמש בתוכנת השוואת הגרסאות החיצונית כברירת מחדל',
+'tog-showjumplinks'           => 'אפשר קישורי נגישות מסוג "קפוץ אל"',
+'tog-uselivepreview'          => 'השתמש בתצוגה מקדימה חיה (JavaScript) (ניסיוני)',
+'tog-forceeditsummary'        => 'הזהר אותי כשאני מכניס תקציר עריכה ריק',
+'tog-watchlisthideown'        => 'הסתר עריכות שלי ברשימת המעקב',
+'tog-watchlisthidebots'       => 'הסתר בוטים ברשימת המעקב',
+'tog-watchlisthideminor'      => 'הסתר עריכות משניות ברשימת המעקב',
+'tog-nolangconversion'        => 'בטל המרת גרסאות שפה',
+'tog-ccmeonemails'            => 'שלח אלי העתקים של הודעות דואר אלקטרוני שאני שולח למשתמשים אחרים',
+'tog-diffonly'                => 'אל תציג את תוכן הדף מתחת להשוואות הגרסאות',
+
+'underline-always'  => 'תמיד',
+'underline-never'   => 'אף פעם',
+'underline-default' => 'ברירת מחדל של הדפדפן',
+
+'skinpreview' => '(תצוגה מקדימה)',
+
+# Dates
+'sunday'        => 'ראשון',
+'monday'        => 'שני',
+'tuesday'       => 'שלישי',
+'wednesday'     => 'רביעי',
+'thursday'      => 'חמישי',
+'friday'        => 'שישי',
+'saturday'      => 'שבת',
+'sun'           => "ראש'",
+'mon'           => 'שני',
+'tue'           => "שלי'",
+'wed'           => "רבי'",
+'thu'           => "חמי'",
+'fri'           => "שיש'",
+'sat'           => 'שבת',
+'january'       => 'ינואר',
+'february'      => 'פברואר',
+'march'         => 'מרץ',
+'april'         => 'אפריל',
+'may_long'      => 'מאי',
+'june'          => 'יוני',
+'july'          => 'יולי',
+'august'        => 'אוגוסט',
+'september'     => 'ספטמבר',
+'october'       => 'אוקטובר',
+'november'      => 'נובמבר',
+'december'      => 'דצמבר',
+'january-gen'   => 'בינואר',
+'february-gen'  => 'בפברואר',
+'march-gen'     => 'במרץ',
+'april-gen'     => 'באפריל',
+'may-gen'       => 'במאי',
+'june-gen'      => 'ביוני',
+'july-gen'      => 'ביולי',
+'august-gen'    => 'באוגוסט',
+'september-gen' => 'בספטמבר',
+'october-gen'   => 'באוקטובר',
+'november-gen'  => 'בנובמבר',
+'december-gen'  => 'בדצמבר',
+'jan'           => "ינו'",
+'feb'           => "פבר'",
+'mar'           => 'מרץ',
+'apr'           => "אפר'",
+'may'           => 'מאי',
+'jun'           => 'יוני',
+'jul'           => 'יולי',
+'aug'           => "אוג'",
+'sep'           => "ספט'",
+'oct'           => "אוק'",
+'nov'           => "נוב'",
+'dec'           => "דצמ'",
+
+# Bits of text used by many pages
+'categories'            => 'קטגוריות',
+'pagecategories'        => '{{plural:$1|קטגוריה|קטגוריות}}',
+'category_header'       => 'דפים בקטגוריה "$1"',
+'subcategories'         => 'קטגוריות משנה',
+'category-media-header' => 'קבצי מדיה בקטגוריה "$1"',
+
+'mainpagetext'      => "'''תוכנת מדיה־ויקי הותקנה בהצלחה.'''",
+'mainpagedocfooter' => 'היעזרו ב[http://meta.wikimedia.org/wiki/Help:Contents מדריך למשתמש] למידע על שימוש בתוכנת הוויקי.
+
+== קישורים שימושיים ==
+* [http://www.mediawiki.org/wiki/Help:Configuration_settings רשימת ההגדרות]
+* [http://www.mediawiki.org/wiki/Help:FAQ שאלות נפוצות]
+* [http://mail.wikimedia.org/mailman/listinfo/mediawiki-announce רשימת התפוצה על השקת גרסאות]',
+
+'about'          => 'אודות',
+'article'        => 'דף תוכן',
+'newwindow'      => '(נפתח בחלון חדש)',
+'cancel'         => 'בטל / צא',
+'qbfind'         => 'חיפוש',
+'qbbrowse'       => 'דפדוף',
+'qbedit'         => 'עריכה',
+'qbpageoptions'  => 'אפשרויות דף',
+'qbpageinfo'     => 'מידע על הדף',
+'qbmyoptions'    => 'האפשרויות שלי',
+'qbspecialpages' => 'דפים מיוחדים',
+'moredotdotdot'  => 'עוד…',
+'mypage'         => 'הדף שלי',
+'mytalk'         => 'דף השיחה שלי',
+'anontalk'       => 'השיחה עבור IP זה',
+'navigation'     => 'ניווט',
+
+# Metadata in edit box
+'metadata_help' => 'מטא־דטה:',
+
+'errorpagetitle'    => 'שגיאה',
+'returnto'          => 'חזרה לדף $1.',
+'tagline'           => 'מתוך {{SITENAME}}',
+'help'              => 'עזרה',
+'search'            => 'חיפוש',
+'searchbutton'      => 'חיפוש',
+'go'                => 'עבור',
+'searcharticle'     => 'עבור',
+'history'           => 'היסטוריית הדף',
+'history_short'     => 'היסטוריה',
+'updatedmarker'     => 'עודכן מאז ביקורך האחרון',
+'info_short'        => 'מידע',
+'printableversion'  => 'גרסת הדפסה',
+'permalink'         => 'קישור קבוע',
+'print'             => 'גרסה להדפסה',
+'edit'              => 'עריכה',
+'editthispage'      => 'ערכו דף זה',
+'delete'            => 'מחיקה',
+'deletethispage'    => 'מחקו דף זה',
+'undelete_short'    => 'שחזור {{plural:$1|עריכה אחת|$1 עריכות}}',
+'protect'           => 'הגנה',
+'protect_change'    => 'שינוי רמת ההגנה',
+'protectthispage'   => 'הגנו על דף זה',
+'unprotect'         => 'הסרת הגנה',
+'unprotectthispage' => 'הסירו הגנה מדף זה',
+'newpage'           => 'דף חדש',
+'talkpage'          => 'שוחחו על דף זה',
+'talkpagelinktext'  => 'שיחה',
+'specialpage'       => 'דף מיוחד',
+'personaltools'     => 'כלים אישיים',
+'postcomment'       => 'הוסף הערה לדף השיחה',
+'articlepage'       => 'צפיה בדף התוכן',
+'talk'              => 'שיחה',
+'views'             => 'צפיות',
+'toolbox'           => 'תיבת כלים',
+'userpage'          => 'צפיה בדף המשתמש',
+'projectpage'       => 'צפיה בדף המיזם',
+'imagepage'         => 'צפיה בדף התמונה',
+'mediawikipage'     => 'צפיה בדף ההודעה',
+'templatepage'      => 'צפיה בדף התבנית',
+'viewhelppage'      => 'צפיה בדף העזרה',
+'categorypage'      => 'צפיה בדף הקטגוריה',
+'viewtalkpage'      => 'צפיה בדף השיחה',
+'otherlanguages'    => 'שפות אחרות',
+'redirectedfrom'    => '(הופנה מהדף $1)',
+'redirectpagesub'   => 'דף הפניה',
+'lastmodifiedat'    => 'שונה לאחרונה ב־$2, $1.', # $1 date, $2 time
+'viewcount'         => 'דף זה נצפה {{plural:$1|פעם אחת|$1 פעמים|פעמיים}}.',
+'protectedpage'     => 'דף מוגן',
+'jumpto'            => 'קפיצה אל:',
+'jumptonavigation'  => 'ניווט',
+'jumptosearch'      => 'חיפוש',
+
+# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
+'aboutsite'         => 'אודות {{SITENAME}}',
+'aboutpage'         => '{{ns:project}}:אודות',
+'bugreports'        => 'דיווח על באגים',
+'bugreportspage'    => '{{ns:project}}:דיווח על באגים',
+'copyright'         => 'התוכן מוגש בכפוף ל־$1.<br /> בעלי זכויות היוצרים מפורטים בהיסטוריית השינויים של הדף.',
+'copyrightpagename' => 'זכויות היוצרים של {{SITENAME}}',
+'copyrightpage'     => '{{ns:project}}:זכויות יוצרים',
+'currentevents'     => 'אקטואליה',
+'currentevents-url' => 'אקטואליה',
+'disclaimers'       => 'הבהרה משפטית',
+'disclaimerpage'    => '{{ns:project}}:הבהרה משפטית',
+'edithelp'          => 'עזרה לעריכה',
+'edithelppage'      => '{{ns:project}}:איך לערוך דף',
+'faq'               => 'שאלות ותשובות',
+'faqpage'           => '{{ns:project}}:שאלות ותשובות',
+'helppage'          => '{{ns:project}}:עזרה',
+'mainpage'          => 'עמוד ראשי',
+'policy-url'        => '{{ns:project}}:נהלים',
+'portal'            => 'שער הקהילה',
+'portal-url'        => '{{ns:project}}:שער הקהילה',
+'privacy'           => 'מדיניות הפרטיות',
+'privacypage'       => '{{ns:project}}:מדיניות הפרטיות',
+'sitesupport'       => 'תרומות',
+'sitesupport-url'   => '{{ns:project}}:תרומות',
+
+'badaccess'        => 'שגיאה בהרשאות',
+'badaccess-group0' => 'אינכם מורשים לבצע את הפעולה שביקשתם.',
+'badaccess-group1' => 'הפעולה שביקשתם לבצע מוגבלת למשתמשים בקבוצה $1.',
+'badaccess-group2' => 'הפעולה שביקשתם לבצע מוגבלת למשתמשים באחת הקבוצות $1.',
+'badaccess-groups' => 'הפעולה שביקשתם לבצע מוגבלת למשתמשים באחת הקבוצות $1.',
+
+'versionrequired'     => 'נדרשת גרסה $1 של מדיה־ויקי',
+'versionrequiredtext' => 'גרסה $1 של מדיה־ויקי נדרשת לשימוש בדף זה. למידע נוסף, ראו את [[{{ns:special}}:Version|דף הגרסה]].',
+
+'ok'                  => 'אישור',
+'pagetitle'           => '$1 – {{SITENAME}}',
+'retrievedfrom'       => '<br /><span style="font-size: smaller;">מקור: $1</span>',
+'youhavenewmessages'  => 'יש לכם $1 ($2).',
+'newmessageslink'     => 'הודעות חדשות',
+'newmessagesdifflink' => 'שינוי אחרון',
+'editsection'         => 'עריכה',
+'editold'             => 'עריכה',
+'editsectionhint'     => 'עריכת פסקה: $1',
+'toc'                 => 'תוכן עניינים',
+'showtoc'             => 'הראה',
+'hidetoc'             => 'הסתר',
+'thisisdeleted'       => 'שיחזור או הצגת $1?',
+'viewdeleted'         => 'הצגת $1?',
+'restorelink'         => '{{plural:$1|גרסה מחוקה אחת|$1 גרסאות מחוקות}}',
+'feedlinks'           => 'הזנה:',
+'feed-invalid'        => 'סוג הזנת המנוי שגוי.',
+
+# Short words for each namespace, by default used in the 'article' tab in monobook
+'nstab-main'      => 'דף תוכן',
+'nstab-user'      => 'דף משתמש',
+'nstab-media'     => 'מדיה',
+'nstab-special'   => 'מיוחד',
+'nstab-project'   => 'דף מיזם',
+'nstab-image'     => 'תמונה',
+'nstab-mediawiki' => 'הודעה',
+'nstab-template'  => 'תבנית',
+'nstab-help'      => 'דף עזרה',
+'nstab-category'  => 'קטגוריה',
+
+# Main script and global functions
+'nosuchaction'      => 'אין פעולה כזו',
+'nosuchactiontext'  => 'מערכת מדיה־ויקי אינה מכירה את הפעולה המצויינת בכתובת ה־URL של הדף.',
+'nosuchspecialpage' => 'אין דף מיוחד בשם זה',
+'nospecialpagetext' => 'ביקשתם דף מיוחד שאינו קיים. ראו את [[{{ns:special}}:Specialpages|רשימת הדפים המיוחדים]].',
+
+# General errors
+'error'                => 'שגיאה',
+'databaseerror'        => 'שגיאת בסיס־נתונים',
+'dberrortext'          => '<p><b>ארעה שגיאת תחביר בשאילתה לבסיס הנתונים</b>.</p>
+<p>שגיאה זו יכולה להיות תוצאה של שאילתת חיפוש בלתי חוקית, או שהיא עלולה להעיד על באג במערכת מדיה־ויקי.</p>
+<table class="toccolours">
+<tr>
+<th colspan="2" style="background-color: #F8F8F8; text-align: center;">מידע על השגיאה</th>
+</tr>
+<tr>
+<td>השאילתה האחרונה שבוצעה לבסיס הנתונים היתה:</td>
+<td style="direction: ltr;">$1</td>
+</tr>
+<tr>
+<td>הפונקציה הקוראת היתה:</td>
+<td style="direction: ltr;">$2</td>
+</tr>
+<tr>
+<td>הודעת השגיאה שהוחזרה על־ידי בסיס הנתונים:</td>
+<td style="direction: ltr;">$3: $4</td>
+</tr>
+</table>',
+'dberrortextcl'        => '<p><b>ארעה שגיאת תחביר בשאילתה לבסיס הנתונים</b>.</p>
+<table class="toccolours">
+<tr>
+<th colspan="2" style="background-color: #F8F8F8; text-align: center;">מידע על השגיאה</th>
+</tr>
+<tr>
+<td>השאילתה האחרונה שבוצעה לבסיס הנתונים היתה:</td>
+<td style="direction: ltr;">$1</td>
+</tr>
+<tr>
+<td>הפונקציה הקוראת היתה:</td>
+<td style="direction: ltr;">$2</td>
+</tr>
+<tr>
+<td>הודעת השגיאה שהוחזרה על־ידי בסיס הנתונים:</td>
+<td style="direction: ltr;">$3: $4</td>
+</tr>
+</table>',
+'noconnect'            => 'ניסיון ההתחברות לבסיס הנתונים על $1 לא הצליח',
+'nodb'                 => 'לא ניתן לבחור את בסיס הנתונים $1',
+'cachederror'          => 'להלן מוצג עותק גיבוי (Cache), שכנראה איננו עדכני, של הדף המבוקש.',
+'laggedslavemode'      => 'אזהרה: הדף עשוי שלא להכיל עדכונים אחרונים.',
+'readonly'             => 'בסיס הנתונים נעול',
+'enterlockreason'      => 'הזינו סיבה לנעילת בסיס הנתונים, כולל הערכה לגבי מועד שחרור הנעילה.',
+'readonlytext'         => 'בסיס נתונים זה של האתר נעול ברגע זה לצורך הזנת נתונים ושינויים. ככל הנראה מדובר בתחזוקה שוטפת, שלאחריה יחזור האתר לפעולתו הרגילה.
+
+המפתח שנעל את בסיס הנתונים סיפק את ההסבר הבא: $1',
+'missingarticle'       => 'בסיס הנתונים לא מצא את הטקסט של הדף שהוא היה אמור למצוא, בשם "$1".
+
+הדבר נגרם בדרך כלל באמצעות קישור ישן להשוואת גרסאות או גרסה קודמת של דף שנמחק.
+
+אם זה אינו המקרה, כנראה שמצאת באג בתוכנה.
+
+אנא דווח על כך למפתח תוך שמירת פרטי כתובת ה־URL.',
+'readonly_lag'         => 'בסיס הנתונים ננעל אוטומטית כדי לאפשר לבסיסי הנתונים המשניים להתעדכן מהבסיס הראשי.',
+'internalerror'        => 'שגיאה פנימית',
+'filecopyerror'        => 'העתקת "$1" ל־"$2" לא הצליחה.',
+'filerenameerror'      => 'שינוי השם של "$1" ל-"$2" לא הצליח.',
+'filedeleteerror'      => 'מחיקת "$1" לא הצליחה.',
+'filenotfound'         => 'הקובץ "$1" לא נמצא.',
+'unexpected'           => 'ערך לא צפוי: "$1"="$2"',
+'formerror'            => 'שגיאה: לא יכול לשלוח טופס.',
+'badarticleerror'      => 'לא ניתן לבצע פעולה זו בדף זה.',
+'cannotdelete'         => 'מחיקת הדף או התמונה לא הצליחה. (יתכן שהוא נמחק כבר על־ידי מישהו אחר.)',
+'badtitle'             => 'כותרת שגויה',
+'badtitletext'         => 'כותרת הדף המבוקש הייתה לא־חוקית, ריקה, קישור ויקי פנימי, או פנים שפה שגוי.',
+'perfdisabled'         => 'שירות זה הופסק זמנית בכדי לא לפגוע בביצועי המערכת. עמכם הסליחה!',
+'perfdisabledsub'      => 'מוצג להלן עותק שמור של דף מ־$1:', # obsolete?
+'perfcached'           => 'המידע הבא הוא עותק שמור של המידע, ועשוי שלא להיות מעודכן.',
+'perfcachedts'         => 'המידע הבא הוא עותק שמור של המידע, שעודכן לאחרונה ב־$1.',
+'querypage-no-updates' => 'העדכונים לדף זה כרגע מופסקים, והמידע לא יעודכן באופן שוטף.',
+'wrong_wfQuery_params' => 'הפרמטרים שהוזנו ל־wfQuery() אינם נכונים:<br />
+פונקציה: $1<br />
+שאילתה: $2',
+'viewsource'           => 'הצגת מקור',
+'viewsourcefor'        => 'לדף $1',
+'protectedpagetext'    => 'דף זה נעול לעריכה.',
+'viewsourcetext'       => 'באפשרותכם לצפות בטקסט המקור של הדף, ואף להעתיקו:',
+'protectedinterface'   => 'דף זה הוא אחד מסדרת דפים המספקים הודעות מערכת לתוכנה, ונעול לעריכה למפעילי מערכת בלבד כדי למנוע השחתות של ההודעות.',
+'editinginterface'     => "'''אזהרה:''' דף זה הוא אחד מסדרת דפים המספקים הודעות מערכת לתוכנה. שינויים בדף זה ישנו את הודעת המערכת לכל המשתמשים האחרים.",
+'sqlhidden'            => '(שאילתת ה־SQL מוסתרת)',
+'cascadeprotected'     => 'דף זה נעול לעריכה כיוון שהוא מוכלל {{plural:$1|בדף הבא, שמופעלת אצלו|בדפים הבאים, שמופעלת אצלם}} הגנה מדורגת:',
+
+# Login and logout pages
+'logouttitle'                => 'יציאה מהחשבון',
+'logouttext'                 => 'יצאתם זה עתה מהחשבון. באפשרותכם להמשיך ולעשות שימוש ב{{grammar:תחילית|{{SITENAME}}}} באופן אנונימי, או לשוב ולהיכנס לאתר עם שם משתמש זהה או אחר.',
+'welcomecreation'            => '== ברוך הבא, $1! ==
+חשבונך נפתח. אל תשכח להתאים את הגדרות המשתמש שלך.',
+'loginpagetitle'             => 'כניסת משתמש',
+'yourname'                   => 'שם משתמש',
+'yourpassword'               => 'סיסמה',
+'yourpasswordagain'          => 'הקש סיסמה שנית',
+'remembermypassword'         => 'זכור את הכניסה במחשב זה',
+'yourdomainname'             => 'התחום שלך',
+'externaldberror'            => 'הייתה שגיאת הזדהות חיצונית לבסיס הנתונים, או שאינך רשאי לעדכן את חשבונך החיצוני.',
+'loginproblem'               => "'''אירעה שגיאה בכניסה לאתר.'''<br />נסה שנית!",
+'alreadyloggedin'            => "'''$1, כבר ביצעת כניסה לאתר!'''<br />",
+'login'                      => 'כניסה לחשבון',
+'loginprompt'                => 'לפני הכניסה לחשבון ב{{grammar:תחילית|{{SITENAME}}}}, עליכם לוודא כי ה"עוגיות" (Cookies) מופעלות.',
+'userlogin'                  => 'כניסה / הרשמה לחשבון',
+'logout'                     => 'יציאה מהחשבון',
+'userlogout'                 => 'יציאה מהחשבון',
+'notloggedin'                => 'לא בחשבון',
+'nologin'                    => 'אין לכם חשבון? $1.',
+'nologinlink'                => 'אתם מוזמנים להרשם',
+'createaccount'              => 'צור משתמש חדש',
+'gotaccount'                 => 'כבר נרשמתם? $1.',
+'gotaccountlink'             => 'הכנסו לחשבון',
+'createaccountmail'          => 'באמצעות דוא"ל',
+'badretype'                  => 'הסיסמאות שהזנת אינן מתאימות.',
+'userexists'                 => 'שם המשתמש שבחרתם נמצא בשימוש. אנא בחרו שם אחר.',
+'youremail'                  => 'דואר אלקטרוני *:',
+'username'                   => 'שם משתמש:',
+'uid'                        => 'מספר סידורי:',
+'yourrealname'               => 'שם אמיתי *:',
+'yourlanguage'               => 'שפת הממשק:',
+'yourvariant'                => 'שינוי',
+'yournick'                   => 'כינוי (לחתימות):',
+'badsig'                     => 'חתימה מסוגננת שגויה; אנא בדקו את תגיות ה־HTML.',
+'email'                      => 'דוא"ל',
+'prefs-help-email-enotif'    => 'כתובת זו משמשת גם למשלוח עדכונים דרך הדוא"ל (אם אפשרתם זאת).',
+'prefs-help-realname'        => '* שם אמיתי (אופציונאלי): אם תבחרו לספק שם זה, הוא ישמש לייחוס עבודתכם אליכם.',
+'loginerror'                 => 'שגיאה בכניסה לאתר',
+'prefs-help-email'           => '* דואר אלקטרוני (אופציונאלי): אפשרו לאחרים לשלוח לכם מסר דרך דף המשתמש שלכם ללא צורך לחשוף את כתובתכם.',
+'nocookiesnew'               => 'נוצר חשבון המשתמש שלכם, אך לא נכנסתם כמשתמשים רשומים למערכת כיוון שניטרלתם את העוגיות, ש{{grammar:תחילית|{{SITENAME}}}} משתמש בהן לצורך כניסה למערכת. אנא הפעילו אותן מחדש, ולאחר מכן תוכלו להיכנס למערכת עם שם המשתמש והסיסמה החדשים שלכם.',
+'nocookieslogin'             => 'לא הצלחתם להיכנס למערכת כמשתמשים רשומים כיוון שניטרלתם את העוגיות, ש{{grammar:תחילית|{{SITENAME}}}} משתמש בהן לצורך כניסה למערכת. אנא הפעילו אותן מחדש, ולאחר מכן תוכלו להיכנס למערכת עם שם המשתמש והסיסמה שלכם.',
+'noname'                     => 'לא הזנתם שם משתמש חוקי',
+'loginsuccesstitle'          => 'הכניסה הושלמה בהצלחה',
+'loginsuccess'               => "'''נכנסתם ל{{grammar:תחילית|{{SITENAME}}}} בשם \"\$1\".'''",
+'nosuchuser'                 => 'אין משתמש בשם "$1".
+
+אנא ודאו שהאיות נכון, או השתמשו בטופס שלהלן ליצירת חשבון משתמש חדש.',
+'nosuchusershort'            => 'אין משתמש בשם "$1". אנא ודאו שהאיות נכון.',
+'nouserspecified'            => 'עליכם לציין שם משתמש.',
+'wrongpassword'              => 'הסיסמה שהקלדתם שגויה, אנא נסו שנית.',
+'wrongpasswordempty'         => 'הסיסמה שהקלדתם ריקה. אנא נסו שנית.',
+'mailmypassword'             => 'שלחו לי סיסמה חדשה',
+'passwordremindertitle'      => 'תזכורת סיסמה מ{{grammar:תחילית|{{SITENAME}}}}',
+'passwordremindertext'       => 'מישהו (ככל הנראה אתם, מכתובת ה־IP מספר $1) ביקש שנשלח לכם סיסמה חדשה לכניסה לחשבון ב{{grammar:תחילית|{{SITENAME}}}} ($4). הסיסמה עבור המשתמש "$2" היא עתה "$3". עליכם להיכנס לאתר ולשנות את סיסמתכם בהקדם האפשרי. אם מישהו אחר ביקש סיסמה חדשה זו או אם נזכרתם בסיסמתכם ואינכם רוצים עוד לשנות אותה, באפשרותכם להתעלם מהודעה זו ולהמשיך להשתמש בסיסמתכם הישנה.',
+'noemail'                    => 'לא רשומה כתובת דואר אלקטרוני עבור משתמש  "$1".',
+'passwordsent'               => 'סיסמה חדשה נשלחה לכתובת הדואר האלקטרוני הרשומה עבור "$1".
+אנא הכנסו חזרה לאתר אחרי שתקבלו אותה.',
+'blocked-mailpassword'       => 'כתובת ה־IP שלכם חסומה מעריכה, ולפיכך אינכם מורשים להשתמש באפשרות שחזור הסיסמה כדי למנוע ניצול לרעה של התכונה.',
+'eauthentsent'               => 'דוא"ל אישור נשלח לכתובת הדוא"ל שקבעת. לפני שדברי דוא"ל אחרים נשלחים לחשבון הזה, תצטרך לפעול לפי ההוראות בדוא"ל כדי לוודא שהדוא"ל הוא אכן שלך.',
+'throttled-mailpassword'     => 'כבר נעשה שימוש באפשרות שחזור הסיסמה ב־$1 השעות האחרונות. כדי למנוע ניצול לרעה, רק דואר אחד כזה יכול להישלח כל $1 שעות.',
+'mailerror'                  => 'שגיאה בשליחת דואר: $1',
+'acct_creation_throttle_hit' => 'מצטערים, יצרת כבר $1 חשבונות. אינך יכול ליצור חשבונות נוספים.',
+'emailauthenticated'         => 'כתובת הדוא"ל שלך אושרה על־ידי $1.',
+'emailnotauthenticated'      => 'כתובת הדוא"ל שלך עדיין לא אושרה. אף דוא"ל לא יישלח מאף אחת מהתכונות הבאות.',
+'noemailprefs'               => 'אנא ציינו כתובת דוא"ל כדי שתכונות אלה יעבדו.',
+'emailconfirmlink'           => 'אשר את כתובת הדוא"ל שלך',
+'invalidemailaddress'        => 'כתובת הדוא"ל אינה מתקבלת כיוון שנראה שהיא בפורמט לא נכון. אנא הכנס כתובת נכונה או ותר על השדה הזה.',
+'accountcreated'             => 'החשבון נוצר',
+'accountcreatedtext'         => 'חשבון המשתמש $1 נוצר.',
+
+# Password reset dialog
+'resetpass'               => 'איפוס סיסמת החשבון',
+'resetpass_announce'      => 'נכנסתם באמצעות סיסמה זמנית שנשלחה אליכם בדוא"ל. כדי לסיים את הכניסה, עליכם לקבוע כאן סיסמה חדשה:',
+'resetpass_text'          => '<!-- הוסיפו טקסט כאן -->',
+'resetpass_header'        => 'איפוס הסיסמה',
+'resetpass_submit'        => 'הגדרת הסיסמה וכניסה',
+'resetpass_success'       => 'סיסמתכם שונתה בהצלחה! מכניס אתכם למערכת…',
+'resetpass_bad_temporary' => 'סיסמה זמנית שגויה. ייתכן שכבר שיניתם בהצלחה את סיסמתכם; אם לא, אנא בקשו סיסמה זמנית חדשה.',
+'resetpass_forbidden'     => 'לא ניתן לשנות סיסמאות באתר זה.',
+'resetpass_missing'       => 'חסר מידע בטופס.',
+
+# Edit page toolbar
+'bold_sample'     => 'טקסט מודגש',
+'bold_tip'        => 'טקסט מודגש',
+'italic_sample'   => 'טקסט נטוי',
+'italic_tip'      => 'טקסט נטוי (לא מומלץ בעברית)',
+'link_sample'     => 'קישור',
+'link_tip'        => 'קישור פנימי',
+'extlink_sample'  => 'http://www.example.com כותרת הקישור לתצוגה',
+'extlink_tip'     => 'קישור חיצוני (כולל קידומת http מלאה)',
+'headline_sample' => 'כותרת',
+'headline_tip'    => 'כותרת – דרגה 2',
+'math_sample'     => 'formula',
+'math_tip'        => 'נוסחה מתמטית (LaTeX)',
+'nowiki_sample'   => 'טקסט לא מעוצב',
+'nowiki_tip'      => 'טקסט לא מעוצב (התעלם מסימני ויקי)',
+'image_sample'    => 'PictureFileName.jpg|left|thumb|250px|כיתוב תמונה',
+'image_tip'       => 'תמונה (שכבר הועלתה לשרת)',
+'media_sample'    => 'Example.ogg',
+'media_tip'       => 'קישור לקובץ מדיה',
+'sig_tip'         => 'חתימה + שעה',
+'hr_tip'          => 'קו אופקי (השתדלו להמנע משימוש בקו)',
+
+# Edit pages
+'summary'                   => 'תקציר',
+'subject'                   => 'נושא/כותרת',
+'minoredit'                 => 'זהו שינוי משני',
+'watchthis'                 => 'מעקב אחרי דף זה',
+'savearticle'               => 'שמור דף',
+'preview'                   => 'תצוגה מקדימה',
+'showpreview'               => 'תצוגה מקדימה',
+'showlivepreview'           => 'תצוגה מקדימה חיה',
+'showdiff'                  => 'הצג שינויים',
+'anoneditwarning'           => "'''אזהרה:''' אינכם מחוברים לחשבון. כתובת ה־IP שלכם תירשם בהיסטוריית העריכות של הדף. אם לדעתכם זוהי פגיעה בפרטיותכם, עליכם [[{{ns:special}}:Userlogin|להיכנס לחשבון]].",
+'missingsummary'            => "'''תזכורת:''' לא הזנתם תקציר עריכה. אם תלחצו שוב על \"שמור דף\", עריכתכם תישמר בלעדיו.",
+'missingcommenttext'        => 'אנא הקלידו את ההערה למטה.',
+'missingcommentheader'      => "'''תזכורת:''' לא הזנתם נושא/כותרת להערה זו. אם תלחצו שוב על \"שמור דף\", עריכתכם תישמר בלעדיו.",
+'summary-preview'           => 'תצוגה מקדימה של התקציר',
+'subject-preview'           => 'תצוגה מקדימה של הנושא/הכותרת',
+'blockedtitle'              => 'המשתמש חסום',
+'blockedtext'               => "<big>'''שם המשתמש או כתובת ה־IP שלכם נחסמו.'''</big>
+
+החסימה בוצעה על־ידי \$1. הסיבה שניתנה לכך היא '''\$2'''.
+
+באפשרותכם ליצור קשר עם \$1 או עם כל אחד מ[[{{ns:project}}:מפעיל מערכת|מפעילי המערכת]] האחרים כדי לדון על החסימה.
+אינכם יכולים להשתמש בתכונת \"שלחו דואר אלקטרוני למשתמש זה\" אם לא ציינתם כתובת דוא\"ל תקפה ב[[{{ns:special}}:Preferences|העדפות המשתמש שלכם]].
+כתובת ה־IP שלכם היא \$3, ומספר החסימה שלכם הוא #\$5. אנא ציינו אחת מעובדות אלה (או את שתיהן) בכל פנייה למפעילי המערכת.",
+'blockedoriginalsource'     => "טקסט המקור של '''$1''' מוצג למטה:",
+'blockededitsource'         => "הטקסט של '''העריכות שלך''' לדף '''$1''' מוצג למטה:",
+'whitelistedittitle'        => 'כניסה לחשבון נדרשת לעריכה',
+'whitelistedittext'         => 'עליכם $1 כדי לערוך דפים.',
+'whitelistreadtitle'        => 'כניסה לחשבון נדרשת לקריאה',
+'whitelistreadtext'         => 'עליכם [[{{ns:special}}:Userlogin|להיכנס לחשבון]] כדי לקרוא דפים.',
+'whitelistacctitle'         => 'אינכם מורשים ליצור חשבון',
+'whitelistacctext'          => 'עליכם [[{{ns:special}}:Userlogin|להיכנס לחשבון]] שיש לו את ההרשאה ליצור חשבונות כדי ליצור חשבון.',
+'confirmedittitle'          => 'הנכם חייבים לאמת את כתובת הדוא"ל שלכם כדי לערוך',
+'confirmedittext'           => 'עליכם לאמת את כתובת הדוא"ל שלכם לפני שתוכלו לערוך דפים. אנא הגדירו ואמתו את כתובת הדוא"ל שלכם באמצעות [[{{ns:special}}:Preferences|העדפות המשתמש]] שלכם.',
+'nosuchsectiontitle'        => 'אין פסקה כזו',
+'nosuchsectiontext'         => 'ניסיתם לערוך פיסקה שאינה קיימת. כיוון שאין פיסקה בשם $1, אין מקום לשמור את עריכתכם.',
+'loginreqtitle'             => 'כניסה לחשבון נדרשת',
+'loginreqlink'              => 'להיכנס לחשבון',
+'loginreqpagetext'          => 'עליכם $1 כדי לצפות בדפים אחרים.',
+'accmailtitle'              => 'הסיסמה נשלחה',
+'accmailtext'               => 'הסיסמה עבור "$1" נשלחה אל $2.',
+'newarticle'                => '(חדש)',
+'newarticletext'            => "הגעתם לדף שעדיין איננו קיים. כדי ליצור דף חדש, כתבו את התוכן שלכם בתיבת הטקסט למטה.
+
+אם הגעתם לכאן בטעות, פשוט לחצו על מקש ה־'''Back''' בדפדפן שלכם.",
+'anontalkpagetext'          => "----
+'''זהו דף שיחה של משתמש אנונימי שעדיין לא יצר חשבון במערכת, או שהוא לא משתמש בו. כיוון שכך, אנו צריכים להשתמש בכתובת ה־IP כדי לזהותו. ייתכן שכתובת IP זו תייצג מספר משתמשים. אם אתם משתמשים אנונימיים ומרגישים שקיבלתם הודעות בלתי רלוונטיות, אנא [[{{ns:special}}:Userlogin|צרו חשבון או הכנסו]] כדי להימנע מבלבול עתידי עם משתמשים אנונימיים נוספים.'''
+----",
+'noarticletext'             => 'אין עדיין טקסט בדף זה. באפשרותכם [[{{ns:special}}:Search/{{PAGENAME}}|לחפש את {{PAGENAME}} באתר]], או [{{fullurl:{{FULLPAGENAME}}|action=edit}} ליצור דף זה].',
+'clearyourcache'            => "'''הערה:''' לאחר השמירה, עליכם לנקות את זכרון המטמון (Cache) של הדפדפן על־מנת להבחין בשינויים.
+* ב'''מוזילה''', '''פיירפוקס''' או '''ספארי''', לחצו על מקש ה־Shift בעת לחיצתכם על '''העלה מחדש''' (Reload), או הקישו Ctrl+Shift+R (או Cmd+Shift+R במקינטוש של אפל).
+* ב'''אינטרנט אקספלורר''', לחצו על מקש ה־Ctrl בעת לחיצתכם על '''רענן''' (Refresh), או הקישו על Ctrl+F5.
+* ב־'''Konqueror''', פשוט לחצו על '''העלה מחדש''' (Reload), או הקישו על F5.
+* ב'''אופרה''', ייתכן שתצטרכו להשתמש ב'''כלים''' (Tools) > '''העדפות''' (Preferences) כדי לנקות לחלוטין את זכרון המטמון.",
+'usercssjsyoucanpreview'    => "'''עצה:''' השתמשו בלחצן \"תצוגה מקדימה\" כדי לבחון את גליון ה־CSS או את סקריפט ה־JavaScript החדש שלכם לפני השמירה.",
+'usercsspreview'            => "'''זכרו שזו רק תצוגה מקדימה של גליון ה־CSS שלכם, ושהוא טרם נשמר!'''",
+'userjspreview'             => "'''זכרו שזו רק תצוגה מקדימה של סקריפט ה־JavaScript שלכם, ושהוא טרם נשמר!'''",
+'userinvalidcssjstitle'     => "'''אזהרה''': הרקע \"\$1\" אינו קיים. זכרו שדפי CSS ו־JavaScript מותאמים אישית משתמשים בכותרת עם אותיות קטנות – למשל, {{ns:user}}:דוגמה/monobook.css ולא {{ns:user}}:דוגמה/Monobook.css. כמו כן, יש להקפיד על שימוש ב־/ ולא ב־\\.",
+'updated'                   => '(מעודכן)',
+'note'                      => "'''הערה:'''",
+'previewnote'               => 'זכרו שזו רק תצוגה מקדימה, והדף עדיין לא נשמר!',
+'previewconflict'           => 'תצוגה מקדימה זו מציגה כיצד ייראה הטקסט בחלון העריכה העליון, אם תבחרו לשמור אותו.',
+'session_fail_preview'      => "'''מצטערים! לא ניתן לבצע את עריכתכם עקב אובדן קשר עם השרת. אנא נסו שנית. אם זה לא עוזר, אנא צאו מהחשבון ונסו שנית.",
+'session_fail_preview_html' => "'''מצטערים! לא ניתן לבצע את עריכתם עקב אובדן קשר עם השרת.'''
+
+כיוון שבאתר זה אפשרות השימוש ב־HTML מאופשרת, התצוגה המקדימה מוסתרת כדי למנוע התקפות JavaScript.
+
+'''אם זהו ניסיון עריכה לגיטימי, אנא נסו שנית. אם זה לא עוזר, נסו לצאת מהחשבון ולהיכנס אליו שנית.'''",
+'importing'                 => 'מייבא את $1',
+'editing'                   => 'עורך את $1',
+'editinguser'               => 'עורך את המשתמש <b>$1</b>',
+'editingsection'            => 'עורך את $1 (פסקה)',
+'editingcomment'            => 'עורך את $1 (הערה)',
+'editconflict'              => 'התנגשות עריכה: $1',
+'explainconflict'           => "משתמש אחר שינה את הדף מאז שהתחלתם לערוך אותו.
+
+חלון העריכה העליון מכיל את הטקסט בדף כפי שהוא עתה.
+
+השינויים שלכם מוצגים בחלון העריכה התחתון.
+
+עליכם למזג את השינויים שלכם לתוך הטקסט הקיים.
+
+'''רק''' הטקסט בחלון העריכה העליון ישמר כשתשמרו את הדף.",
+'yourtext'                  => 'הטקסט שלך',
+'storedversion'             => 'גרסה שמורה',
+'nonunicodebrowser'         => "'''אזהרה: הדפדפן שלך אינו תואם לתקן יוניקוד. בשל כך הוכנס לפעולה מעקף של הבאג, כדי לאפשר לך לערוך דפים בבטחה: תווים שאינם ב־ASCII יוצגו בתיבת העריכה כקודים הקסדצימליים.",
+'editingold'                => "'''זהירות: אתם עורכים גרסה לא עדכנית של דף זה.
+
+אם תשמרו את הדף, כל השינויים שנעשו מאז גרסה זו יאבדו.'''",
+'yourdiff'                  => 'הבדלים',
+'copyrightwarning'          => "<div id=\"editing-warn\">'''שימו לב:''' תרומתכם ל{{grammar:תחילית|{{SITENAME}}}} תפורסם תחת תנאי הרישיון \$2 (ראו \$1 לפרטים נוספים). אם אינכם רוצים שעבודתכם תהיה זמינה לעריכה על־ידי אחרים, שתופץ לעיני כל, ושאחרים יוכלו להעתיק ממנה בציון המקור – אל תפרסמו אותה פה. כמו־כן, אתם מבטיחים לנו כי כתבתם את הטקסט הזה בעצמכם, או העתקתם אותו ממקור שאינו מוגן על־ידי זכויות יוצרים. '''אל תעשו שימוש בחומר המוגן בזכויות יוצרים ללא רשות!'''</div>",
+'copyrightwarning2'         => "<div id=\"editing-warn\">'''שימו לב:''' תורמים אחרים עשויים לערוך או אף להסיר את תרומתכם ל{{grammar:תחילית|{{SITENAME}}}}. אם אינכם רוצים שעבודתכם תהיה זמינה לעריכה על־ידי אחרים – אל תפרסמו אותה פה. כמו־כן, אתם מבטיחים לנו כי כתבתם את הטקסט הזה בעצמכם, או העתקתם אותו ממקור שאינו מוגן על־ידי זכויות יוצרים (ראו \$1 לפרטים נוספים). '''אל תעשו שימוש בחומר המוגן בזכויות יוצרים ללא רשות!'''</div>",
+'longpagewarning'           => "'''אזהרה: גודל דף זה הוא $1 קילובייטים. בדפדפנים מסוימים יהיו בעיות בעריכת דף הגדול מ־32 קילובייטים. אנא שיקלו לחלק דף זה לדפים קטנים יותר. אם זהו דף שיחה, שיקלו לארכב אותו.'''",
+'longpageerror'             => "'''שגיאה: הטקסט ששלחתם הוא באורך $1 קילובייטים, אך אסור לו להיות ארוך יותר מהמקסימום של $2 קילובייטים. לא ניתן לשומרו.'''",
+'readonlywarning'           => "'''אזהרה: בסיס הנתונים ננעל לצורך תחזוקה. בזמן זה אי אפשר לשמור את הטקסט הערוך. בינתיים, עד סיום התחזוקה, אתם יכולים להשתמש בעורך חיצוני. אנו מתנצלים על התקלה.'''",
+'protectedpagewarning'      => "'''אזהרה: דף זה ננעל כך שרק מפעילי מערכת יכולים לערוך אותו. אנא ודאו שאתם פועלים על־פי העקרונות לעריכת דפים אלו.'''",
+'semiprotectedpagewarning'  => "'''הערה:''' דף זה ננעל כך שרק משתמשים רשומים יכולים לערוך אותו.",
+'cascadeprotectedwarning'   => "'''אזהרה:''' דף זה ננעל כך שרק מפעילי מערכת יכולים לערוך אותו, כיוון שהוא מוכלל {{plural:$1|בדף הבא, שמופעלת עליו|בדפים הבאים, שמופעלת עליהם}} הגנה מדורגת:",
+'templatesused'             => 'תבניות המופיעות בדף זה:',
+'templatesusedpreview'      => 'תבניות המופיעות בתצוגה המקדימה הזו:',
+'templatesusedsection'      => 'תבניות המופיעות בפיסקה זו:',
+'template-protected'        => '(מוגנת)',
+'template-semiprotected'    => '(מוגנת חלקית)',
+'edittools'                 => '<!-- הטקסט הנכתב כאן יוצג מתחת לטפסי עריכת דפים והעלאת קבצים, ולפיכך ניתן לכתוב להציג בו תווים קשים לכתיבה, קטעים מוכנים של טקסט ועוד. -->',
+'nocreatetitle'             => 'יצירת הדפים הוגבלה',
+'nocreatetext'              => 'אתר זה מגביל את האפשרות ליצור דפים חדשים. באפשרותכם לחזור אחורה ולערוך דף קיים, או [[{{ns:special}}:Userlogin|להיכנס לחשבון]].',
+
+# "Undo" feature
+'undo-success' => 'ניתן לבטל את העריכה. אנא בידקו את השוואת הגרסאות למטה כדי לוודא שזה מה שאתם רוצים לעשות, ואז שמרו את השינויים למטה כדי לבצע את ביטול העריכה.',
+'undo-failure' => 'לא ניתן היה לבטל את העריכה עקב התנגשות עם עריכות מאוחרות יותר.',
+'undo-summary' => 'ביטול גרסה $1 של [[{{ns:special}}:Contributions/$2|$2]] ([[{{ns:user_talk}}:$2|שיחה]])',
+
+# Account creation failure
+'cantcreateaccounttitle' => 'לא ניתן ליצור את החשבון',
+'cantcreateaccounttext'  => 'אפשרות יצירת החשבונות מכתובת ה־IP הזו (<b>$1</b>) נחסמה, כנראה עקב השחתות מתמשכות מבית־הספר או ספק האינטרנט שלך.',
+
+# History pages
+'revhistory'          => 'היסטוריית שינויים',
+'viewpagelogs'        => 'הצג יומנים עבור דף זה',
+'nohistory'           => 'אין היסטוריית שינויים עבור דף זה.',
+'revnotfound'         => 'גרסה זו לא נמצאה',
+'revnotfoundtext'     => 'הגרסה הישנה של דף זה לא נמצאה. אנא בדקו את כתובת הקישור שהוביל אתכם הנה.',
+'loadhist'            => 'טוען את היסטוריית השינויים של הדף',
+'currentrev'          => 'גרסה נוכחית',
+'revisionasof'        => 'גרסה מתאריך $1',
+'revision-info'       => 'גרסה מתאריך $1 מאת $2',
+'previousrevision'    => '→ הגרסה הקודמת',
+'nextrevision'        => 'הגרסה הבאה ←',
+'currentrevisionlink' => 'הגרסה הנוכחית',
+'cur'                 => 'נוכ',
+'next'                => 'הבא',
+'last'                => 'אחרון',
+'orig'                => 'מקור',
+'page_first'          => 'ראשון',
+'page_last'           => 'אחרון',
+'histlegend'          => 'השוואת גרסאות: סמנו את תיבות האפשרויות של הגרסאות המיועדות להשוואה, והקישו על Enter או על הכפתור שלמעלה או למטה.<br />
+מקרא: (נוכ) = הבדלים עם הגרסה הנוכחית, (אחרון) = הבדלים עם הגרסה הקודמת, מ = שינוי משני',
+'deletedrev'          => '[נמחק]',
+'histfirst'           => 'ראשונות',
+'histlast'            => 'אחרונות',
+'historysize'         => '($1 בתים)',
+'historyempty'        => '(ריק)',
+
+# Revision feed
+'history-feed-title'          => 'היסטוריית גרסאות',
+'history-feed-description'    => 'היסטוריית הגרסאות של הדף הזה בוויקי',
+'history-feed-item-nocomment' => '$1 ב־$2', # user at time
+'history-feed-empty'          => 'הדף המבוקש לא נמצא.
+ייתכן שהוא נמחק מהוויקי, או ששמו שונה.
+נסו [[{{ns:special}}:Search|לחפש בוויקי]] אחר דפים רלוונטיים חדשים.',
+
+# Revision deletion
+'rev-deleted-comment'         => '(תקציר העריכה הוסתר)',
+'rev-deleted-user'            => '(שם המשתמש הוסתר)',
+'rev-deleted-event'           => '(הרישום הוסתר)',
+'rev-deleted-text-permission' => '<div class="mw-warning plainlinks">
+גרסת הדף הזו הוסרה מהארכיונים הציבוריים. ייתכן שישנם פרטים נוספים על כך ב[{{fullurl:{{ns:special}}:Log/delete|page={{FULLPAGENAMEE}}}} יומן המחיקות].
+</div>',
+'rev-deleted-text-view'       => '<div class="mw-warning plainlinks">
+גרסת הדף הזו הוסרה מהארכיונים הציבוריים. כמפעיל מערכת, באפשרותך לצפות בגרסה; ייתכן שישנם פרטים נוספים על כך ב[{{fullurl:{{ns:special}}:Log/delete|page={{FULLPAGENAMEE}}}} יומן המחיקות].
+</div>',
+'rev-delundel'                => 'הצג/הסתר',
+'revisiondelete'              => 'מחיקת ושחזור גרסאות',
+'revdelete-nooldid-title'     => 'אין גרסת מטרה',
+'revdelete-nooldid-text'      => 'לא ציינתם גרסת או גרסאות מטרה עליהן תבוצע פעולה זו.',
+'revdelete-selected'          => "{{plural:$2|הגרסה של '''$1''' שנבחרה|הגרסאות של '''$1''' שנבחרו}}:",
+'logdelete-selected'          => "{{plural:$2|פעולת היומנים של '''$1''' שנבחרה|פעולות היומנים של '''$1''' שנבחרו}}:",
+'revdelete-text'              => 'גרסאות ופעולות יומנים שנמחקו עדיין יופיעו בהיסטוריית הדף ובדפי היומנים, אך חלקים מתוכנם שלהם לא יהיה זמין לציבור.
+
+מפעילי מערכת אחרים באתר עדיין יוכלו לגשת לתוכן הנסתר ויוכלו לשחזר אותו שוב דרך הממשק הזה, אלא אם כן מוגדרות הגבלות נוספות.',
+'revdelete-legend'            => 'הגדרת הגבלות:',
+'revdelete-hide-text'         => 'הסתר את תוכן הגרסה',
+'revdelete-hide-name'         => 'הסתר את הפעולה ואת דף היעד',
+'revdelete-hide-comment'      => 'הסתר את תקציר העריכה',
+'revdelete-hide-user'         => 'הסתר את שם המשתמש או כתובת ה־IP של העורך',
+'revdelete-hide-restricted'   => 'החל הגבלות אלו גם על מפעילי מערכת',
+'revdelete-suppress'          => 'הסתר את המידע גם ממפעילי המערכת',
+'revdelete-hide-image'        => 'הסתר את תוכן הקובץ',
+'revdelete-unsuppress'        => 'הסר הגבלות בגרסאות משוחזרות',
+'revdelete-log'               => 'הערה ביומן:',
+'revdelete-submit'            => 'בצע על הגרסה שנבחרה',
+'revdelete-logentry'          => 'שינה את הסתרת הגרסה של [[$1]]',
+'logdelete-logentry'          => 'שינה את הסתרת פעולת היומן של [[$1]]',
+'revdelete-logaction'         => '{{plural:$1|גרסה אחת|$1 גרסאות}} הוגדרו למצב $2',
+'logdelete-logaction'         => '{{plural:$1|פעולת יומן אחת|$1 פעולות יומן}} של [[$3]] הוגדרו למצב $2',
+'revdelete-success'           => 'הסתרת הגרסה הושלמה בהצלחה.',
+'logdelete-success'           => 'הסתרת פעולת היומן הושלמה בהצלחה.',
+
+# Oversight log
+'oversightlog'    => 'יומן הסתרות',
+'overlogpagetext' => 'להלן רשימת המחיקות והחסימות הכוללות תוכן המוסתר ממפעילי המערכת. ראו גם את [[{{ns:special}}:Ipblocklist|רשימת המשתמשים החסומים]] הנוכחית.',
+
+# Diffs
+'difference'                => '(הבדלים בין גרסאות)',
+'loadingrev'                => 'טוען את הגרסה להשוואה',
+'lineno'                    => 'שורה $1:',
+'editcurrent'               => 'ערוך גרסה נוכחית של הדף',
+'selectnewerversionfordiff' => 'בחר גרסה חדשה יותר להשוואה',
+'selectolderversionfordiff' => 'בחר גרסה ישנה יותר להשוואה',
+'compareselectedversions'   => 'השווה את הגרסאות שנבחרו',
+'editundo'                  => 'ביטול',
+'diff-multi'                => '({{plural:$1|גרסה אמצעית אחת לא מוצגת|$1 גרסאות אמצעיות לא מוצגות}}.)',
+
+# Search results
+'searchresults'         => 'תוצאות החיפוש',
+'searchresulttext'      => 'למידע נוסף על חיפוש ב{{grammar:תחילית|{{SITENAME}}}}, עיינו ב[[{{ns:project}}:עזרה|דפי העזרה]].',
+'searchsubtitle'        => "לחיפוש המונח '''[[:$1]]'''",
+'searchsubtitleinvalid' => "לחיפוש המונח '''$1'''",
+'badquery'              => 'שגיאה בניסוח השאילתה.',
+'badquerytext'          => 'לא הצלחנו לבצע את השאילתה, ככל הנראה כיוון שניסיתם לחפש מילה בעלת פחות משלוש אותיות. חיפוש כזה עדיין אינו נתמך במערכת. ייתכן גם ששגיתם בהקלדת השאליתה – לדוגמה, כתבתם "דג וגם וגם משקל".
+
+ניתן לנסות שאילתה אחרת.',
+'matchtotals'           => 'לחיפוש "$1" נמצאו $2 דפים עם כותרות תואמות ו־$3 דפים עם תוכן תואם',
+'noexactmatch'          => 'אין דף שכותרתו "$1". באפשרותכם [[:$1|ליצור את הדף]].',
+'titlematches'          => 'כותרות דפים תואמות',
+'notitlematches'        => 'אין כותרות דפים תואמות',
+'textmatches'           => 'דפים עם תוכן תואם',
+'notextmatches'         => 'אין דפים עם תוכן תואם',
+'prevn'                 => '$1 הקודמים',
+'nextn'                 => '$1 הבאים',
+'viewprevnext'          => 'צפו ב - ($1) ($2) ($3).',
+'showingresults'        => "מציג עד {{plural:$1|תוצאה '''אחת'''|'''$1''' תוצאות}} החל ממספר #'''$2''':",
+'showingresultsnum'     => "מציג {{plural:$3|תוצאה '''אחת'''|'''$3''' תוצאות}} החל ממספר #'''$2''':",
+'nonefound'             => 'לא נמצאו דפים עם תוכן תואם. אנא ודאו שהקלדתם את שאילתת החיפוש נכון. אם אכן הקלדתם אותה נכון, נסו לחפש נושא כללי יותר.
+
+חיפושים כושלים מסוג זה נגרמים בדרך כלל בגלל ציון יותר ממילת חיפוש אחת, שכן במקרה זה מופיעים רק דפים הכוללים את כל המילים.',
+'powersearch'           => 'חפש',
+'powersearchtext'       => 'חפש במרחבי שם:<br />$1<br />$2 הצג גם דפי הפנייה<br />חפש $3 $9',
+'searchdisabled'        => 'לצערנו, עקב עומס על המערכת, לא ניתן לחפש כעת בטקסט המלא של הדפים. באפשרותכם להשתמש בינתיים בגוגל, אך שימו לב שייתכן שהוא אינו מעודכן.',
+'blanknamespace'        => '(ראשי)',
+
+# Preferences page
+'preferences'              => 'העדפות',
+'mypreferences'            => 'ההעדפות שלי',
+'prefsnologin'             => 'לא נרשמת באתר',
+'prefsnologintext'         => 'עליכם [[{{ns:special}}:Userlogin|להיכנס לחשבון]] כדי לשנות העדפות משתמש.',
+'prefsreset'               => 'העדפותיך שוחזרו לברירת המחדל.',
+'qbsettings'               => 'הגדרות סרגל כלים',
+'qbsettings-none'          => 'ללא',
+'qbsettings-fixedleft'     => 'קבוע משמאל',
+'qbsettings-fixedright'    => 'קבוע מימין',
+'qbsettings-floatingleft'  => 'צף משמאל',
+'qbsettings-floatingright' => 'צף מימין',
+'changepassword'           => 'שנה סיסמה',
+'skin'                     => 'רקע',
+'math'                     => 'נוסחאות מתמטיות',
+'dateformat'               => 'מבנה תאריך',
+'datedefault'              => 'ברירת המחדל',
+'datetime'                 => 'תאריך ושעה',
+'math_failure'             => 'עיבוד הנוסחה נכשל',
+'math_unknown_error'       => 'שגיאה לא ידועה',
+'math_unknown_function'    => 'פונקציה לא מוכרת',
+'math_lexing_error'        => 'שגיאת לקסינג',
+'math_syntax_error'        => 'שגיאת תחביר',
+'math_image_error'         => 'ההמרה ל־PNG נכשלה; אנא בדקו אם התקנתם נכון את latex, את dvips, את gs ואת convert.',
+'math_bad_tmpdir'          => 'התוכנה לא הצליחה לכתוב או ליצור את הספרייה הזמנית של המתמטיקה',
+'math_bad_output'          => 'התוכנה לא הצליחה לכתוב או ליצור את ספריית הפלט של המתמטיקה',
+'math_notexvc'             => 'קובץ בר־ביצוע של texvc אינו זמין; אנא ראו את קובץ ה־README למידע על ההגדרות.',
+'prefs-personal'           => 'פרטי המשתמש',
+'prefs-rc'                 => 'שינויים אחרונים',
+'prefs-watchlist'          => 'רשימת המעקב',
+'prefs-watchlist-days'     => 'מספר הימים לתצוגה ברשימת המעקב:',
+'prefs-watchlist-edits'    => 'מספר העריכות לתצוגה ברשימת המעקב המורחבת:',
+'prefs-misc'               => 'שונות',
+'saveprefs'                => 'שמור העדפות',
+'resetprefs'               => 'שחזר ברירת מחדל',
+'oldpassword'              => 'סיסמה ישנה',
+'newpassword'              => 'סיסמה חדשה',
+'retypenew'                => 'הקלד סיסמה חדשה שנית',
+'textboxsize'              => 'עריכה',
+'rows'                     => 'שורות',
+'columns'                  => 'עמודות',
+'searchresultshead'        => 'חיפוש',
+'resultsperpage'           => 'מספר תוצאות בעמוד',
+'contextlines'             => 'שורות לכל תוצאה',
+'contextchars'             => 'מספר תווי קונטקסט בשורה',
+'stubthreshold'            => 'סף להצגת דפים קצרים (קצרמרים)',
+'recentchangesdays'        => 'מספר הימים שיוצגו בדף השינויים האחרונים:',
+'recentchangescount'       => 'מספר העריכות שיוצגו בדף השינויים האחרונים:',
+'savedprefs'               => 'העדפותיך נשמרו.',
+'timezonelegend'           => 'אזור זמן',
+'timezonetext'             => 'הפרש השעות בינך לבין השרת (UTC).',
+'localtime'                => 'זמן מקומי',
+'timezoneoffset'           => 'הפרש',
+'servertime'               => 'השעה הנוכחית בשרת היא',
+'guesstimezone'            => 'קבל מהדפדפן',
+'allowemail'               => 'אפשר קבלת דוא"ל ממשתמשים אחרים',
+'defaultns'                => 'כברירת מחדל, חפש במרחבי השם אלו:',
+'default'                  => 'ברירת מחדל',
+'files'                    => 'קבצים',
+
+# User rights
+'userrights-lookup-user'     => 'נהלו קבוצות משתמש',
+'userrights-user-editname'   => 'הכניסו שם משתמש:',
+'editusergroup'              => 'ערכו קבוצות משתמשים',
+'userrights-editusergroup'   => 'ערכו קבוצות משתמש',
+'saveusergroups'             => 'שמור קבוצות משתמש',
+'userrights-groupsmember'    => 'חבר בקבוצות:',
+'userrights-groupsavailable' => 'קבוצות זמינות:',
+'userrights-groupshelp'      => 'אנא בחרו קבוצות שברצונכם שהמשתמש יתווסף אליהן או יוסר מהן.
+קבוצות שלא נבחרו לא ישתנו. באפשרותכם לבטל בחירה של קבוצה באמצעות לחיצה על הכפתור השמאלי של העכבר ועל Ctrl מעליה.',
+'userrights-reason'          => 'סיבה לשינוי:',
+
+# Groups
+'group'            => 'קבוצה:',
+'group-bot'        => 'בוטים',
+'group-sysop'      => 'מפעילי מערכת',
+'group-bureaucrat' => 'ביורוקרטים',
+'group-all'        => '(הכול)',
+
+'group-bot-member'        => 'בוט',
+'group-sysop-member'      => 'מפעיל מערכת',
+'group-bureaucrat-member' => 'ביורוקרט',
+
+'grouppage-bot'        => '{{ns:project}}:בוט',
+'grouppage-sysop'      => '{{ns:project}}:מפעיל מערכת',
+'grouppage-bureaucrat' => '{{ns:project}}:ביורוקרט',
+
+# User rights log
+'rightslog'      => 'יומן תפקידים',
+'rightslogtext'  => 'זהו יומן השינויים בתפקידי המשתמשים.',
+'rightslogentry' => 'שינה את ההרשאות של "$1" מההרשאות $2 להרשאות $3',
+'rightsnone'     => '(ללא הרשאות)',
+
+# Recent changes
+'nchanges'                          => '{{plural:$1|שינוי אחד|$1 שינויים}}',
+'recentchanges'                     => 'שינויים אחרונים',
+'recentchangestext'                 => 'עקבו אחרי השינויים האחרונים באתר בדף זה.',
+'recentchanges-feed-description'    => 'עקבו אחרי השינויים האחרונים באתר בדף זה.',
+'rcnote'                            => "להלן {{plural:$1|השינוי האחרון|'''$1''' השינויים האחרונים}} {{plural:$2|ביום האחרון|ב־$2 הימים האחרונים}}, עד $3:",
+'rcnotefrom'                        => 'להלן <b>$1</b> השינויים האחרונים שבוצעו החל מתאריך <b>$2</b>:',
+'rclistfrom'                        => 'הצג שינויים חדשים החל מ־$1',
+'rcshowhideminor'                   => '$1 שינויים משניים',
+'rcshowhidebots'                    => '$1 בוטים',
+'rcshowhideliu'                     => '$1 משתמשים רשומים',
+'rcshowhideanons'                   => '$1 משתמשים אנונימיים',
+'rcshowhidepatr'                    => '$1 עריכות בדוקות',
+'rcshowhidemine'                    => '$1 עריכות שלי',
+'rclinks'                           => 'הצג $1 שינויים אחרונים ב-$2 הימים האחרונים.<br /> $3',
+'diff'                              => 'הבדל',
+'hist'                              => 'היסטוריה',
+'hide'                              => 'הסתר',
+'show'                              => 'הצג',
+'minoreditletter'                   => 'מ',
+'newpageletter'                     => 'ח',
+'boteditletter'                     => 'ב',
+'sectionlink'                       => '←',
+'number_of_watching_users_pageview' => '[$1 משתמש/ים צופים]',
+'rc_categories'                     => 'הגבל לקטגוריות (הפרד עם "|")',
+'rc_categories_any'                 => 'הכול',
+
+# Recent changes linked
+'recentchangeslinked'          => 'שינויים בדפים המקושרים',
+'recentchangeslinked-noresult' => 'לא היו שינויים בדפים המקושרים בתקופה זו.',
+'recentchangeslinked-summary'  => "בדף זה רשומים השינויים האחרונים בדפים המקושרים. דפים המופיעים ברשימת המעקב שלכם מופיעים ב'''הדגשה'''.",
+
+# Upload
+'upload'                      => 'העלאת קובץ לשרת',
+'uploadbtn'                   => 'העלה קובץ',
+'reupload'                    => 'העלה שנית',
+'reuploaddesc'                => 'חזרו לטופס העלאת קבצים לשרת.',
+'uploadnologin'               => 'לא נכנסתם לאתר',
+'uploadnologintext'           => 'עליכם [[{{ns:special}}:Userlogin|להיכנס לחשבון]] כדי להעלות קבצים.',
+'upload_directory_read_only'  => 'תיקיית ההעלאות ($1) אינה ניתנת לכתיבה על־ידי שרת האינטרנט, ולפיכך הוא אינו יכול להעלות את התמונה.',
+'uploaderror'                 => 'שגיאה בהעלאת הקובץ',
+'uploadtext'                  => "השתמשו בטופס להלן כדי להעלות תמונות. כדי לראות או לחפש תמונות שהועלו בעבר אנא פנו ל[[{{ns:special}}:Imagelist|רשימת הקבצים המועלים]], וכמו כן, העלאות מוצגות ב[[{{ns:special}}:Log/upload|יומן ההעלאות]], ומחיקות ב[[{{ns:special}}:Log/delete|יומן המחיקות]].
+
+כדי לכלול תמונה בדף, השתמשו בקישור בצורות '''<nowiki>[[{{ns:image}}:file.jpg]]</nowiki>''' לתמונות בפורמט JPG (המיועד לתצלומים), '''<nowiki>[[{{ns:image}}:file.png]]</nowiki>''' לתמונות בפורמט PNG (לאיורים, שרטוטים וסמלים). כדי לקשר ישירות לקובץ קול, השתמשו בקישור בצורה '''<nowiki>[[{{ns:media}}:file.jpg]]</nowiki>''' לקבצי קול בפורמט OGG.",
+'uploadlog'                   => 'יומן העלאות קבצים',
+'uploadlogpage'               => 'יומן העלאות',
+'uploadlogpagetext'           => 'להלן רשימה של העלאות הקבצים האחרונות שבוצעו.',
+'filename'                    => 'שם הקובץ',
+'filedesc'                    => 'תקציר',
+'fileuploadsummary'           => 'תיאור:',
+'filestatus'                  => 'מעמד זכויות יוצרים',
+'filesource'                  => 'מקור',
+'uploadedfiles'               => 'קבצים שהועלו',
+'ignorewarning'               => 'התעלם מהאזהרה ושמור את הקובץ בכל זאת.',
+'ignorewarnings'              => 'התעלם מכל האזהרות',
+'minlength'                   => 'שמות של קבצי תמונה צריכים להיות בני שלושה תווים לפחות.',
+'illegalfilename'             => 'הקובץ "$1" מכיל תוים בלתי חוקיים. אנא שנו את שמו ונסו להעלותו שנית.',
+'badfilename'                 => 'שם התמונה שונה ל־"$1".',
+'filetype-badmime'            => 'לא ניתן להעלות קבצים עם סוג ה־MIME "$1".',
+'filetype-badtype'            => "'''\".\$1\"''' הוא סוג קובץ אסור להעלאה
+: רשימה של סוגי קבצים מותרים: \$2",
+'filetype-missing'            => 'לקובץ אין סיומת (כדוגמת ".jpg").',
+'large-file'                  => 'מומלץ שהקבצים לא יהיו גדולים יותר מ־$1 (גודל הקובץ שהעליתם הוא $2).',
+'largefileserver'             => 'גודל הקובץ שהעליתם חורג ממגבלת השרת.',
+'emptyfile'                   => 'הקובץ שהעליתם ריק. ייתכן שהסיבה לכך היא שגיאת הקלדה בשם הקובץ. אנא ודאו שזהו הקובץ שברצונך להעלות.',
+'fileexists'                  => 'קובץ בשם זה כבר קיים, אנא בדקו את <strong><tt>$1</tt></strong> אם אינכם בטוחים שברצונכם להחליף אותו.',
+'fileexists-extension'        => 'קובץ עם שם דומה כבר קיים:<br />
+שם הקובץ המועלה: <strong><tt>$1</tt></strong><br />
+שם הקובץ הקיים: <strong><tt>$2</tt></strong><br />
+ההבדל היחיד הוא בשימוש באותיות רישיות וקטנות בסיומת הקובץ. אנא בדקו אם הקבצים זהים.',
+'fileexists-thumb'            => "'''<center>תמונה קיימת</center>'''",
+'fileexists-thumbnail-yes'    => 'הקובץ עשוי להיות תמונה מוקטנת (ממוזערת). אנא בדקו את הקובץ <strong><tt>$1</tt></strong>.<br />
+אם הקובץ שבדקתם הוא אותה התמונה בגודל מקורי, אין זה הכרחי להעלות גם תמונה ממוזערת.',
+'file-thumbnail-no'           => 'שם הקובץ מתחיל עם <strong><tt>$1</tt></strong>. נראה שזוהי תמונה מוקטנת (ממוזערת).
+אם התמונה בגודל מלא מצויה ברשותכם, אנא העלו אותה ולא את התמונה הממוזערת; אחרת, אנא שנו את שם הקובץ.',
+'fileexists-forbidden'        => 'קובץ בשם זה כבר קיים; אנא חזרו לדף הקודם והעלו את הקובץ תחת שם חדש.
+[[{{ns:image}}:$1|thumb|center|$1]]',
+'fileexists-shared-forbidden' => 'קובץ בשם זה כבר קיים כקובץ משותף; אנא חזרו לדף הקודם והעלו את הקובץ תחת שם חדש.
+[[{{ns:image}}:$1|thumb|center|$1]]',
+'successfulupload'            => 'העלאת הקובץ הושלמה בהצלחה',
+'fileuploaded'                => "הקובץ $1 הועלה לשרת בהצלחה.
+אנא השתמשו בקישור $2 כדי לעבור לדף תיאור הקובץ ולמלא את כל המידע אודות הקובץ, כגון מאין הגיע, מתי נוצר ועל־ידי מי, וכל פרט אחר שאתם יודעים עליו. אם זו תמונה, באפשרותכם להכלילה בדפים כך: '''<nowiki>[[{{ns:image}}:$1|thumb|Description]]</nowiki>'''",
+'uploadwarning'               => 'אזהרת העלאת קבצים',
+'savefile'                    => 'שמור קובץ',
+'uploadedimage'               => 'העלה את הקובץ "[[$1]]"',
+'uploaddisabled'              => 'העלאת קבצים מנוטרלת',
+'uploaddisabledtext'          => 'אפשרות העלאת הקבצים מנוטרלת באתר זה.',
+'uploadscripted'              => 'הקובץ כולל קוד סקריפט או HTML שעשוי להתפרש או להתבצע בטעות על־ידי הדפדפן.',
+'uploadcorrupt'               => 'קובץ זה אינו תקין או שהסיומת שלו איננה מתאימה. אנא בדקו את הקובץ והעלו אותו שוב.',
+'uploadvirus'                 => 'הקובץ מכיל וירוס! פרטים: <div style="direction: ltr;">$1</div>',
+'sourcefilename'              => 'שם הקובץ',
+'destfilename'                => 'שמור קובץ בשם',
+'watchthisupload'             => 'מעקב אחרי דף זה',
+'filewasdeleted'              => 'קובץ בשם זה כבר הועלה בעבר, ולאחר מכן נמחק. אנא בדקו את הדף $1 לפני שתמשיכו להעלותו שנית.',
+
+'upload-proto-error'      => 'פרוטוקול שגוי',
+'upload-proto-error-text' => 'בהעלאה מרוחקת, יש להשתמש בכתובות URL המתחילות עם <code>http://</code> או <code>ftp://</code>.',
+'upload-file-error'       => 'שגיאה פנימית',
+'upload-file-error-text'  => 'שגיאה פנימית התרחשה בעת הניסיון ליצור קובץ זמני על השרת. אנא צרו קשר עם מנהל מערכת.',
+'upload-misc-error'       => 'שגיאת העלאה בלתי ידועה',
+'upload-misc-error-text'  => 'שגיאת העלאה בלתי ידועה התרחשה במהלך ההעלאה. אנא ודאו שכתובת ה־URL תקינה וזמינה ונסו שנית. אם הבעיה חוזרת על עצמה, אנא צרו קשר עם מנהל המערכת.',
+
+# Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
+'upload-curl-error6'       => 'לא ניתן להגיע ל־URL',
+'upload-curl-error6-text'  => 'לא ניתן לכתובת ה־URL שנכתבה. אנא בדקו אם כתובת זו נכונה ואם האתר זמין.',
+'upload-curl-error28'      => 'הסתיים זמן ההמתנה להעלאה',
+'upload-curl-error28-text' => 'לאתר לקח זמן רב מדי לענות. אנא בדקו שהאתר זמין, המתינו מעט ונסו שנית. ייתכן שתרצו לנסות בזמן פחות עמוס.',
+
+'license'            => 'רישיון',
+'nolicense'          => 'אין',
+'upload_source_url'  => ' (כתובת URL תקפה ונגישה)',
+'upload_source_file' => ' (קובץ במחשב שלך)',
+
+# Image list
+'imagelist'                 => 'רשימת תמונות',
+'imagelisttext'             => 'להלן רשימה של {{plural:$1|תמונה אחת|$1 תמונות}}, ממוינות $2:',
+'imagelistforuser'          => 'מוצגות רק התמונות שהועלו על־ידי $1.',
+'getimagelist'              => 'מושך את רשימת התמונות',
+'ilsubmit'                  => 'חיפוש',
+'showlast'                  => 'הצג $1 תמונות אחרונות ממוינות $2',
+'byname'                    => 'לפי שם',
+'bydate'                    => 'לפי תאריך',
+'bysize'                    => 'לפי גודל',
+'imgdelete'                 => 'מחק',
+'imgdesc'                   => 'תיאור',
+'imgfile'                   => 'קובץ',
+'imglegend'                 => 'מקרא: (תיאור) הצג/ערוך תיאור התמונה.',
+'imghistory'                => 'היסטורית קובץ תמונה',
+'revertimg'                 => 'חזור',
+'deleteimg'                 => 'מחק',
+'deleteimgcompletely'       => 'מחק את כל גרסאות התמונה',
+'imghistlegend'             => 'מקרא (נוכ) = זו התמונה הנוכחית, (מחק) = מחק גרסה ישנה זו, (חזור) חזור לגרסה ישנה זו.<br />
+<b>לחצו על תאריך לראות את התמונה שהועלתה בתאריך זה.</b>',
+'imagelinks'                => 'קישורי תמונות',
+'linkstoimage'              => 'הדפים הבאים משתמשים בתמונה זו:',
+'nolinkstoimage'            => 'אין דפים המשתמשים בתמונה זו.',
+'sharedupload'              => 'קובץ זה הוא קובץ משותף וניתן להשתמש בו גם באתרים אחרים.',
+'shareduploadwiki'          => 'למידע נוסף, ראו את $1.',
+'shareduploadwiki-linktext' => 'דף תיאור הקובץ',
+'noimage'                   => 'לא נמצא קובץ בשם זה, אך יש באפשרותכם $1 חלופי.',
+'noimage-linktext'          => 'להעלות קובץ',
+'uploadnewversion-linktext' => 'העלו גרסה חדשה של קובץ זה',
+'imagelist_date'            => 'תאריך',
+'imagelist_name'            => 'שם',
+'imagelist_user'            => 'משתמש',
+'imagelist_size'            => 'גודל (בתים)',
+'imagelist_description'     => 'תיאור',
+'imagelist_search_for'      => 'חיפוש תמונה בשם:',
+
+# MIME search
+'mimesearch'         => 'חיפוש MIME',
+'mimesearch-summary' => 'דף זה מאפשר את סינון הקבצים לפי סוג ה־MIME שלהם. סוג ה־MIME בנוי בצורה "סוג תוכן/סוג משני", לדוגמה <tt>image/jpeg</tt>.',
+'mimetype'           => 'סוג MIME:',
+'download'           => 'הורדה',
+
+# Unwatched pages
+'unwatchedpages' => 'דפים שאינם במעקב',
+
+# List redirects
+'listredirects' => 'רשימת הפניות',
+
+# Unused templates
+'unusedtemplates'     => 'תבניות שאינן בשימוש',
+'unusedtemplatestext' => 'דף זה מכיל רשימה של כל הדפים במרחב השם של התבניות שאינם נכללים בדף אחר. אנא זכרו לבדוק את הקישורים האחרים לתבניות לפני שתמחקו אותן.',
+'unusedtemplateswlh'  => 'קישורים אחרים',
+
+# Random redirect
+'randomredirect'         => 'הפניה אקראית',
+'randomredirect-nopages' => 'אין הפניות במרחב השם הזה.',
+
+# Statistics
+'statistics'             => 'סטטיסטיקות',
+'sitestats'              => 'סטטיסטיקות {{SITENAME}}',
+'userstats'              => 'סטטיסטיקות משתמשים',
+'sitestatstext'          => "בבסיס הנתונים יש בסך הכול {{plural:$1|דף '''אחד'''|'''$1''' דפים}}. מספר זה כולל דפים שאינם דפי תוכן, כגון דפי שיחה, דפים אודות {{SITENAME}}, קצרמרים, דפי תוכן ללא קישורים פנימיים, הפניות, וכיוצא בזה. אם לא סופרים את הדפים שאינם דפי תוכן, {{plural:$2|נשאר דף '''אחד''' שהוא ככל הנראה דף תוכן לכל דבר|נשארים '''$2''' דפים שהם ככל הנראה דפי תוכן לכל דבר}}.
+
+מאז תחילת פעולתו של האתר, {{plural:$3|הייתה באתר צפיה '''אחת''' בדפים|היו באתר '''$3''' צפיות בדפים}}, {{plural:$4|ובוצעה פעולת עריכה '''אחת'''|ובוצעו '''$4''' פעולות עריכה}}.
+
+בסך הכול {{plural:$5|בוצעה בממוצע עריכה '''אחת''' לדף|בוצעו בממוצע '''$5''' עריכות לדף}}, ו{{plural:$6|הייתה צפיה '''אחת''' לכל עריכה|היו '''$6''' צפיות לכל עריכה}}.
+
+אורך [http://meta.wikimedia.org/wiki/Help:Job_queue תור המשימות] הוא '''$7'''.
+
+{{plural:$1|קובץ '''אחד'''|'''$8''' קבצים}} הועלו לאתר עד כה.",
+'userstatstext'          => "{{plural:$1|ישנו [[{{ns:special}}:Listusers|משתמש רשום]] '''אחד'''|ישנם '''$1''' [[{{ns:special}}:Listusers|משתמשים רשומים]] באתר}}, {{plural:$2|ול'''אחד'''|ול־'''$2'''}} (או $4%) מתוכם יש הרשאות $5.",
+'statistics-mostpopular' => 'הדפים הנצפים ביותר',
+
+'disambiguations'      => 'דפי פירושונים',
+'disambiguationspage'  => '{{ns:template}}:פירושונים',
+'disambiguations-text' => "הדפים הבאים מקשרים ל'''דפי פירושונים'''. עליהם לקשר לדף הנושא הרלוונטי במקום זאת.<br />הדף נחשב לדף פירושונים אם הוא משתמש בתבנית המקושרת מההודעה [[{{ns:mediawiki}}:Disambiguationspage|disambiguationspage]].",
+
+'doubleredirects'     => 'הפניות כפולות',
+'doubleredirectstext' => 'כל שורה מכילה קישור להפניות הראשונה והשנייה, וכן את שורת הטקסט הראשונה של ההפניה השנייה, שלרוב נמצא בה היעד האמיתי של ההפניה, אליו אמורה ההפניה הראשונה להצביע.',
+
+'brokenredirects'        => 'הפניות לא תקינות',
+'brokenredirectstext'    => 'ההפניות שלהלן מפנות לדפים שאינם קיימים:',
+'brokenredirects-edit'   => '(עריכה)',
+'brokenredirects-delete' => '(מחיקה)',
+
+'withoutinterwiki'        => 'דפים ללא קישורי שפה',
+'withoutinterwiki-header' => 'הדפים הבאים אינם מקשרים לגרסאות שלהם בשפות אחרות:',
+
+'fewestrevisions' => 'הדפים בעלי מספר העריכות הנמוך ביותר',
+
+# Miscellaneous special pages
+'nbytes'                  => '{{plural:$1|בית אחד|$1 בתים}}',
+'ncategories'             => '{{plural:$1|קטגוריה אחת|$1 קטגוריות}}',
+'nlinks'                  => '{{plural:$1|קישור אחד|$1 קישורים}}',
+'nmembers'                => '{{plural:$1|דף אחד|$1 דפים}}',
+'nrevisions'              => '{{plural:$1|גרסה אחת|$1 גרסאות}}',
+'nviews'                  => '{{plural:$1|צפיה אחת|$1 צפיות}}',
+'specialpage-empty'       => 'דף זה ריק.',
+'lonelypages'             => 'דפים יתומים',
+'lonelypagestext'         => 'לדפים הבאים אין קישורים מדפים אחרים באתר זה.',
+'uncategorizedpages'      => 'דפים חסרי קטגוריה',
+'uncategorizedcategories' => 'קטגוריות חסרות קטגוריה',
+'uncategorizedimages'     => 'תמונות חסרות קטגוריה',
+'unusedcategories'        => 'קטגוריות שאינן בשימוש',
+'unusedimages'            => 'תמונות שאינן בשימוש',
+'popularpages'            => 'דפים פופולריים',
+'wantedcategories'        => 'קטגוריות מבוקשות',
+'wantedpages'             => 'דפים מבוקשים',
+'mostlinked'              => 'הדפים המקושרים ביותר',
+'mostlinkedcategories'    => 'הקטגוריות המקושרות ביותר',
+'mostcategories'          => 'הדפים מרובי־הקטגוריות ביותר',
+'mostimages'              => 'התמונות המקושרות ביותר',
+'mostrevisions'           => 'הדפים בעלי מספר העריכות הגבוה ביותר',
+'allpages'                => 'כל הדפים',
+'prefixindex'             => 'רשימת הדפים המתחילים ב…',
+'randompage'              => 'דף אקראי',
+'randompage-nopages'      => 'אין דפים במרחב השם הזה.',
+'shortpages'              => 'דפים קצרים',
+'longpages'               => 'דפים ארוכים',
+'deadendpages'            => 'דפים ללא קישורים',
+'deadendpagestext'        => 'הדפים הבאים אינם מקשרים לדפים אחרים באתר.',
+'protectedpages'          => 'דפים מוגנים',
+'protectedpagestext'      => 'הדפים הבאים מוגנים מפני עריכה או העברה:',
+'protectedpagesempty'     => 'אין כרגע דפים מוגנים עם הפרמטרים הללו.',
+'listusers'               => 'רשימת משתמשים',
+'specialpages'            => 'דפים מיוחדים',
+'spheading'               => 'דפים מיוחדים',
+'restrictedpheading'      => 'דפים מיוחדים מוגבלים',
+'rclsub'                  => '(לדפים המקושרים מהדף "$1")',
+'newpages'                => 'דפים חדשים',
+'newpages-username'       => 'שם משתמש:',
+'ancientpages'            => 'דפים מוזנחים',
+'intl'                    => 'קישורים בינלשוניים',
+'move'                    => 'העברה',
+'movethispage'            => 'העבר דף זה',
+'unusedimagestext'        => 'רשימת הקבצים שאינם בשימוש באתר. יש למצוא מקום עבור הקבצים או לסמן אותם למחיקה.',
+'unusedcategoriestext'    => 'למרות שהקטגוריות הבאות קיימות, אין שום דף בו נעשה בהן שימוש.',
+
+# Book sources
+'booksources'               => 'משאבי ספרות חיצוניים',
+'booksources-search-legend' => 'חיפוש משאבי ספרות חיצוניים',
+'booksources-isbn'          => 'ISBN:',
+'booksources-go'            => 'עבור',
+'booksources-text'          => 'להלן רשימת קישורים לאתרים אחרים המוכרים ספרים חדשים ויד־שנייה, ושבהם עשוי להיות מידע נוסף לגבי ספרים שאתם מחפשים:',
+
+'categoriespagetext' => 'אלו הקטגוריות הקיימות באתר.',
+'data'               => 'נתונים',
+'userrights'         => 'ניהול הרשאות משתמש',
+'groups'             => 'קבוצות משתמשים',
+'isbn'               => 'ISBN',
+'alphaindexline'     => '$1 עד $2',
+'version'            => 'גרסת התוכנה',
+
+# Special:Log
+'specialloguserlabel'  => 'משתמש:',
+'speciallogtitlelabel' => 'כותרת:',
+'log'                  => 'יומנים',
+'log-search-legend'    => 'חיפוש יומנים',
+'log-search-submit'    => 'עבור',
+'alllogstext'          => 'תצוגה משולבת של כל סוגי היומנים הזמינים ב{{grammar:תחילית|{{SITENAME}}}}.
+ניתן לצמצם את התצוגה על־ידי בחירת סוג היומן, שם המשתמש או הדפים המושפעים.',
+'logempty'             => 'אין פריטים תואמים ביומן.',
+'log-title-wildcard'   => 'חיפוש כותרות המתחילות באותיות אלה',
+
+# Special:Allpages
+'nextpage'          => 'הדף הבא ($1)',
+'prevpage'          => 'הדף הקודם ($1)',
+'allpagesfrom'      => 'הצג דפים החל מ:',
+'allarticles'       => 'כל הדפים',
+'allinnamespace'    => 'כל הדפים (מרחב שם $1)',
+'allnotinnamespace' => 'כל הדפים (שלא במרחב השם $1)',
+'allpagesprev'      => 'הקודם',
+'allpagesnext'      => 'הבא',
+'allpagessubmit'    => 'עבור',
+'allpagesprefix'    => 'הדפים ששמם מתחיל ב…:',
+'allpagesbadtitle'  => 'כותרת הדף המבוקש הייתה לא־חוקית, ריקה, קישור ויקי פנימי, או פנים שפה שגוי. ייתכן שהיא כוללת תו אחד או יותר האסורים לשימוש בכותרות.',
+
+# Special:Listusers
+'listusersfrom'      => 'הצג משתמשים החל מ:',
+'listusers-submit'   => 'הצג',
+'listusers-noresult' => 'לא נמצאו משתמשים.',
+
+# E-mail user
+'mailnologin'     => 'אין כתובת לשליחה',
+'mailnologintext' => 'עליכם [[{{ns:special}}:Userlogin|להיכנס לחשבון]] ולהגדיר לעצמכם כתובת דואר אלקטרוני תקינה ב[[{{ns:special}}:Preferences|העדפות המשתמש]] שלכם כדי לשלוח דואר למשתמש אחר.',
+'emailuser'       => 'שלחו דואר אלקטרוני למשתמש זה',
+'emailpage'       => 'שלחו דואר למשתמש',
+'emailpagetext'   => 'אם המשתמש הזין כתובת דואר אלקטרוני חוקית בהעדפותיו האישיות, הטופס שלהלן ישלח אליו הודעת דואר אחת. כתובת הדואר האלקטרוני שהזנתם בהעדפותיכם האישיות תופיע ככתובת ממנה נשלחה ההודעה כדי שהמשתמש יוכל לענות.',
+'usermailererror' => 'אוביקט הדואר החזיר שגיאה:',
+'defemailsubject' => 'דוא"ל {{SITENAME}}',
+'noemailtitle'    => 'אין כתובת דואר אלקטרוני',
+'noemailtext'     => 'משתמש זה לא הזין כתובת דואר אלקטרוני חוקית או בחר שלא לקבל דואר אלקטרוני ממשתמשים אחרים.',
+'emailfrom'       => 'מאת',
+'emailto'         => 'אל',
+'emailsubject'    => 'נושא',
+'emailmessage'    => 'הודעה',
+'emailsend'       => 'שלח',
+'emailccme'       => 'שלח אלי בדואר האלקטרוני העתק של הודעתי.',
+'emailccsubject'  => 'העתק של הודעתך למשתמש $1: $2',
+'emailsent'       => 'הדואר נשלח',
+'emailsenttext'   => 'הודעת הדואר האלקטרוני שלך נשלחה.',
+
+# Watchlist
+'watchlist'            => 'רשימת המעקב שלי',
+'mywatchlist'          => 'רשימת המעקב שלי',
+'watchlistfor'         => "(עבור '''$1''')",
+'nowatchlist'          => 'אין דפים ברשימת המעקב.',
+'watchlistanontext'    => 'עליכם $1 כדי לצפות או לערוך פריטים ברשימת המעקב.',
+'watchlistcount'       => "'''יש לכם {{plural:$1|פריט אחד|$1 פריטים}} ברשימת המעקב, כולל דפי שיחה.'''",
+'clearwatchlist'       => 'ניקוי רשימת המעקב',
+'watchlistcleartext'   => 'האם אתם בטוחים שברצונכם להסירם?',
+'watchlistclearbutton' => 'נקה את רשימת המעקב',
+'watchlistcleardone'   => 'רשימת המעקב רוקנה. {{plural:$1|פריט אחד הוסר|$1 פריטים הוסרו}} ממנה.',
+'watchnologin'         => 'לא נכנסתם לאתר',
+'watchnologintext'     => 'עליכם [[{{ns:special}}:Userlogin|להיכנס לחשבון]] כדי לערוך את רשימת המעקב.',
+'addedwatch'           => 'הדף נוסף לרשימת המעקב',
+'addedwatchtext'       => 'הדף "[[:$1]]" נוסף ל[[{{ns:special}}:Watchlist|רשימת המעקב]]. שינויים שייערכו בעתיד, בדף זה ובדף השיחה שלו, יוצגו ברשימת המעקב.
+
+בנוסף, הדף יופיע בכתב מודגש ב[[{{ns:special}}:Recentchanges|רשימת השינויים האחרונים]], כדי להקל עליכם את המעקב אחריו.
+
+אם תרצו להסיר את הדף מרשימת המעקב, לחצו על הלשונית "הפסקת מעקב" שלמעלה.',
+'removedwatch'         => 'הדף הוסר מרשימת המעקב',
+'removedwatchtext'     => 'הדף "[[:$1]]" הוסר מ[[{{ns:special}}:Watchlist|רשימת המעקב]].',
+'watch'                => 'מעקב',
+'watchthispage'        => 'עקוב אחר דף זה',
+'unwatch'              => 'הפסקת מעקב',
+'unwatchthispage'      => 'הפסק לעקוב אחר דף זה',
+'notanarticle'         => 'זהו אינו דף תוכן',
+'watchnochange'        => 'אף אחד מהדפים ברשימת המעקב לא עודכן בפרק הזמן המצוין למעלה.',
+'watchdetails'         => '* ברשימת המעקב יש {{plural:$1|דף אחד|$1 דפים}} (לא כולל דפי שיחה).
+* [[{{ns:special}}:Watchlist/edit|הצגה ועריכה של רשימת המעקב במלואה]].
+* [[{{ns:special}}:Watchlist/clear|הסרת כל הדפים]].',
+'wlheader-enotif'      => '* הודעות דוא"ל מאופשרות.',
+'wlheader-showupdated' => "* דפים שהשתנו מאז ביקורכם האחרון בהם מוצגים ב'''הדגשה'''.",
+'watchmethod-recent'   => 'בודק את הדפים שברשימת המעקב לשינויים אחרונים.',
+'watchmethod-list'     => 'בודק את העריכות האחרונות בדפים שברשימת המעקב',
+'removechecked'        => 'הסר דפים מסומנים מרשימת המעקב',
+'watchlistcontains'    => 'רשימת המעקב כוללת {{plural:$1|דף אחד|$1 דפים}}.',
+'watcheditlist'        => 'להלן רשימה מסודרת של הדפים ברשימת המעקב. בחרו את הדפים שאתם רוצים להסיר מהרשימה ולחצו על "הסר דפים מסומנים" בתחתית הדף (הסרת דף גם מסירה את דף השיחה שלו, וכיוצא בזה).',
+'removingchecked'      => 'מסיר את הדפים המסומנים מרשימת המעקב…',
+'couldntremove'        => 'לא ניתן להסיר את $1…',
+'iteminvalidname'      => 'בעיה עם $1, שם שגוי…',
+'wlnote'               => "להלן {{plural:$1|השינוי האחרון|'''$1''' השינויים האחרונים}} {{plural:$2|בשעה האחרונה|ב־'''$2''' השעות האחרונות}}.",
+'wlshowlast'           => '(הצג $1 שעות אחרונות | $2 ימים אחרונים | $3)',
+'wlsaved'              => 'זוהי גרסה שמורה של רשימת המעקב.',
+'watchlist-show-bots'  => 'הצג בוטים',
+'watchlist-hide-bots'  => 'הסתר בוטים',
+'watchlist-show-own'   => 'הצג עריכות שלי',
+'watchlist-hide-own'   => 'הסתר עריכות שלי',
+'watchlist-show-minor' => 'הצג עריכות משניות',
+'watchlist-hide-minor' => 'הסתר עריכות משניות',
+'wldone'               => 'בוצע.',
+
+# Displayed when you click the "watch" button and it's in the process of watching
+'watching'   => 'מוסיף לרשימת המעקב…',
+'unwatching' => 'מסיר מרשימת המעקב…',
+
+'enotif_mailer'      => 'הודעות {{SITENAME}}',
+'enotif_reset'       => 'סמן את כל הדפים כאילו נצפו',
+'enotif_newpagetext' => 'זהו דף חדש.',
+'changed'            => 'שונה',
+'created'            => 'נוצר',
+'enotif_subject'     => 'הדף $PAGETITLE ב{{grammar:תחילית|{{SITENAME}}}} $CHANGEDORCREATED על־ידי $PAGEEDITOR',
+'enotif_lastvisited' => 'ראו $1 לכל השינויים מאז ביקורכם האחרון.',
+'enotif_body'        => 'לכבוד $WATCHINGUSERNAME,
+
+הדף $PAGETITLE ב{{grammar:תחילית|{{SITENAME}}}} $CHANGEDORCREATED ב־$PAGEEDITDATE על־ידי $PAGEEDITOR, ראו $PAGETITLE_URL לגרסה הנוכחית.
+
+$NEWPAGE
+
+תקציר העריכה: $PAGESUMMARY $PAGEMINOREDIT
+
+באפשרותכם ליצור קשר עם העורך:
+בדואר האלקטרוני: $PAGEEDITOR_EMAIL
+באתר: $PAGEEDITOR_WIKI
+
+לא תהיינה הודעות על שינויים נוספים עד שתבקרו את הדף. באפשרותכם גם לאפס את דגלי ההודעות בכל הדפים שברשימת המעקב.
+
+             מערכת ההודעות של {{SITENAME}}
+
+--
+כדי לשנות את הגדרות רשימת המעקב, בקרו בדף
+{{fullurl:{{ns:special}}:Watchlist/edit}}
+
+משוב ועזרה נוספת:
+{{fullurl:{{ns:project}}:עזרה}}',
+
+# Delete/protect/revert
+'deletepage'                  => 'מחיקת דף',
+'confirm'                     => 'אישור',
+'excontent'                   => 'תוכן היה: "$1"',
+'excontentauthor'             => "תוכן היה: '$1' והתורם היחיד היה [[{{ns:special}}:Contributions/$2|$2]]",
+'exbeforeblank'               => 'תוכן לפני שהורק היה: "$1"',
+'exblank'                     => 'הדף היה ריק',
+'confirmdelete'               => 'אישור מחיקת הדף',
+'deletesub'                   => '(מוחק את "$1")',
+'historywarning'              => 'אזהרה – לדף שאתם עומדים למחוק יש היסטוריית שינויים:',
+'confirmdeletetext'           => 'אתם עומדים למחוק דף או תמונה, יחד עם כל ההיסטוריה שלהם, מבסיס הנתונים.
+
+אנא אשרו שזה אכן מה שאתם מתכוונים לעשות, שאתם מבינים את התוצאות של מעשה כזה, ושהמעשה מבוצע בהתאם לנהלי האתר.',
+'actioncomplete'              => 'הפעולה בוצעה',
+'deletedtext'                 => '"[[:$1]]" נמחק. ראו $2 לרשימת המחיקות האחרונות.',
+'deletedarticle'              => 'מחק את "[[$1]]"',
+'dellogpage'                  => 'יומן מחיקות',
+'dellogpagetext'              => 'להלן רשימה של המחיקות האחרונות שבוצעו.',
+'deletionlog'                 => 'יומן מחיקות',
+'reverted'                    => 'שוחזר לגרסה קודמת',
+'deletecomment'               => 'סיבת המחיקה',
+'imagereverted'               => 'השחזור לגרסה הקודמת הושלם בהצלחה.',
+'rollback'                    => 'שחזור עריכות',
+'rollback_short'              => 'שחזור',
+'rollbacklink'                => 'שחזור',
+'rollbackfailed'              => 'השחזור נכשל',
+'cantrollback'                => 'לא ניתן לשחזר את העריכה – התורם האחרון הוא היחיד שכתב דף זה; עם זאת, ניתן למחוק את הדף.',
+'alreadyrolled'               => 'לא ניתן לשחזר את עריכת הדף [[:$1]] על־ידי [[{{ns:user}}:$2|$2]] ([[{{ns:user_talk}}:$2|שיחה]]); מישהו אחר כבר ערך או שחזר דף זה.
+
+העריכה האחרונה היתה של [[{{ns:user}}:$3|$3]] ([[{{ns:user_talk}}:$3|שיחה]]).',
+'editcomment'                 => "תקציר העריכה היה: \"'''\$1'''\".", # only shown if there is an edit comment
+'revertpage'                  => 'שוחזר מעריכה של [[{{ns:special}}:Contributions/$2|$2]] ([[{{ns:user_talk}}:$2|שיחה]]) לעריכה האחרונה של [[{{ns:user}}:$1|$1]]',
+'sessionfailure'              => 'נראה שיש בעיה בחיבורכם לאתר. פעולתכם בוטלה כאמצעי זהירות כנגד התחזות לתקשורת ממחשבכם. אנא חיזרו לדף הקודם ונסו שנית.',
+'protectlogpage'              => 'יומן הגנות',
+'protectlogtext'              => 'להלן רשימה של הגנות וביטולי הגנות על דפים. ראו גם את [[{{ns:special}}:Protectedpages|רשימת הדפים המוגנים]] הנוכחית.',
+'protectedarticle'            => 'הגן על [[$1]]',
+'unprotectedarticle'          => 'ביטל את ההגנה על [[$1]]',
+'protectsub'                  => '(מגן על "$1")',
+'confirmprotecttext'          => 'האם אתם בטוחים שברצונכם להגן על דף זה?',
+'confirmprotect'              => 'מאשר את ההגנה',
+'protectmoveonly'             => 'הגן מפני העברת הדף בלבד',
+'protectcomment'              => 'הסיבה להגנה',
+'protectexpiry'               => 'פקיעת ההגנה',
+'protect_expiry_invalid'      => 'זמן פקיעת ההגנה בלתי חוקי.',
+'protect_expiry_old'          => 'זמן פקיעת ההגנה כבר עבר.',
+'unprotectsub'                => '(מבטל את ההגנה על "$1")',
+'confirmunprotecttext'        => 'האם אתם בטוחים שברצונכם לבטל את ההגנה על דף זה?',
+'confirmunprotect'            => 'מאשר את ביטול ההגנה',
+'unprotectcomment'            => 'הסיבה להסרת ההגנה',
+'protect-unchain'             => 'אפשר שינוי הרשאות העברה',
+'protect-text'                => 'באפשרותכם לראות ולשנות כאן את רמת ההגנה של הדף [[:$1]]. אנא ודאו שאתם פועלים בהתאם בהתאם לנהלי האתר.',
+'protect-locked-blocked'      => 'אינכם יכולים לשנות את רמת ההגנה של הדף בעודכם חסומים.
+להלן ההגדרות הנוכחיות עבור הדף <strong>$1</strong>:',
+'protect-locked-dblock'       => 'אינכם יכולים לשנות את רמת ההגנה על הדף שכן מסד הנתונים חסום ברגע זה.
+להלן ההגדרות הנוכחיות עבור הדף <strong>$1</strong>:',
+'protect-locked-access'       => 'למשתמש שלכם אין הרשאה לשנות את רמת ההגנה של הדף.
+להלן ההגדרות הנוכחיות עבור הדף <strong>$1</strong>:',
+'protect-cascadeon'           => 'דף זה מוגן כרגע כיוון שהוא מוכלל {{plural:$1|בדף הבא, שמופעלת עליו|בדפים הבאים, שמופעלת עליהם}} הגנה מדורגת. באפשרותכם לשנות את רמת ההגנה על הדף, אך זה לא ישפיע על ההגנה המדורגת.',
+'protect-default'             => '(ברירת מחדל)',
+'protect-level-autoconfirmed' => 'משתמשים רשומים בלבד',
+'protect-level-sysop'         => 'מפעילי מערכת בלבד',
+'protect-summary-cascade'     => 'מדורג',
+'protect-expiring'            => 'פוקעת $1 (UTC)',
+'protect-cascade'             => 'הגנה מדורגת – הגן על כל הדפים המוכללים בדף זה.',
+'restriction-type'            => 'הרשאה',
+'restriction-level'           => 'רמת ההגבלה',
+'minimum-size'                => 'גודל מינימאלי (בבתים)',
+
+# Restrictions (nouns)
+'restriction-edit' => 'עריכה',
+'restriction-move' => 'העברה',
+
+# Restriction levels
+'restriction-level-sysop'         => 'הגנה מלאה',
+'restriction-level-autoconfirmed' => 'הגנה חלקית',
+'restriction-level-all'           => 'כל רמה',
+
+# Undelete
+'undelete'                 => 'צפיה בדפים מחוקים',
+'undeletepage'             => 'צפיה ושחזור דפים מחוקים',
+'viewdeletedpage'          => 'צפיה בדפים מחוקים',
+'undeletepagetext'         => 'הדפים שלהלן נמחקו, אך הם עדיין בארכיון וניתן לשחזר אותם. הארכיון מנוקה מעת לעת.',
+'undeleteextrahelp'        => 'לשחזור הדף כולו, אל תסמנו אף תיבת סימון ולחצו על "שחזור". לשחזור של גרסאות מסוימות בלבד, סמנו את תיבות הסימון של הגרסאות הללו, ולחצו על "שחזור". לחיצה על "איפוס" תנקה את התקציר, ואת כל תיבות הסימון.',
+'undeleterevisions'        => '{{plural:$1|גרסה אחת נשמרה|$1 גרסאות נשמרו}} בארכיון',
+'undeletehistory'          => 'אם תשחזרו את הדף, כל הגרסאות תשוחזרנה להיסטוריית השינויים שלו. אם כבר יש דף חדש באותו השם, הגרסאות והשינויים יופיעו רק בדף ההיסטוריה שלו, והגרסה הנוכחית של הדף לא תוחלף אוטומטית. יש לציין שהגבלות המוטלות על גרסאות קבצים נמחקות במהלך השחזור.',
+'undeleterevdel'           => 'השחזור לא יבוצע אם הגרסה הנוכחית של הדף מחוקה בחלקה. במקרה כזה, עליכם לבטל את ההסתרה של הגרסאות המחוקות החדשות ביותר. גרסאות של קבצים שאין לכם הרשאה לצפות בהם לא ישוחזרו.',
+'undeletehistorynoadmin'   => 'דף זה נמחק. הסיבה למחיקה מוצגת בתקציר מטה, ביחד עם פרטים על המשתמשים שערכו את הדף לפני מחיקתו. הטקסט של גרסאות אלו זמין רק למפעילי מערכת.',
+'undelete-revision'        => 'גרסה שנמחקה מהדף $1 מתאריך $2:',
+'undeleterevision-missing' => 'הגרסה שגויה או חסרה. ייתכן שמדובר בקישור שבור, או שהגרסה שוחזרה או הוסרה מהארכיון.',
+'undeletebtn'              => 'שחזור',
+'undeletereset'            => 'איפוס',
+'undeletecomment'          => 'תקציר:',
+'undeletedarticle'         => 'שחזר את "[[$1]]"',
+'undeletedrevisions'       => 'שחזר {{plural:$1|גרסה אחת|$1 גרסאות}}',
+'undeletedrevisions-files' => 'שחזר {{plural:$1|גרסה אחת|$1 גרסאות}} ו{{plural:$2|קובץ אחד|־$2 קבצים}}$2 קבצים',
+'undeletedfiles'           => 'שחזר {{plural:$1|קובץ אחד|$1 קבצים}}',
+'cannotundelete'           => 'השחזור נכשל; ייתכן שמישהו אחר כבר שחזר את הדף.',
+'undeletedpage'            => "'''הדף $1 שוחזר בהצלחה.'''
+
+ראו את [[{{ns:special}}:Log/delete|יומן המחיקות]] לרשימה של מחיקות ושחזורים אחרונים.",
+'undelete-header'          => 'ראו את [[{{ns:special}}:Log/delete|יומן המחיקות]] לדפים שנמחקו לאחרונה.',
+'undelete-search-box'      => 'חיפוש דפים שנמחקו',
+'undelete-search-prefix'   => 'הצגת דפים החל מ:',
+'undelete-search-submit'   => 'חיפוש',
+'undelete-no-results'      => 'לא נמצאו דפים תואמים בארכיון המחיקות.',
+
+# Namespace form on various pages
+'namespace' => 'מרחב שם:',
+'invert'    => 'ללא מרחב זה',
+
+# Contributions
+'contributions' => 'תרומות המשתמש',
+'mycontris'     => 'התרומות שלי',
+'contribsub2'   => 'עבור $1 ($2)',
+'nocontribs'    => 'לא נמצאו שינויים המתאימים לקריטריונים אלו.',
+'ucnote'        => "להלן '''$1''' השינויים האחרונים שביצע משתמש זה ב־'''$2''' הימים האחרונים:",
+'uclinks'       => 'צפה ב־$1 השינויים האחרונים; צפה ב־$2 הימים האחרונים',
+'uctop'         => '(אחרון)',
+
+'sp-contributions-newest'      => 'חדשות ביותר',
+'sp-contributions-oldest'      => 'ישנות ביותר',
+'sp-contributions-newer'       => '$1 החדשות',
+'sp-contributions-older'       => '$1 הישנות',
+'sp-contributions-newbies'     => 'הצגת תרומות של משתמשים חדשים בלבד',
+'sp-contributions-newbies-sub' => 'עבור משתמשים חדשים',
+'sp-contributions-blocklog'    => 'יומן חסימות',
+'sp-contributions-search'      => 'חיפוש תרומות',
+'sp-contributions-username'    => 'שם משתמש או כתובת IP:',
+'sp-contributions-submit'      => 'חיפוש',
+
+'sp-newimages-showfrom' => 'הצג תמונות חדשות החל מ־$1',
+
+# What links here
+'whatlinkshere'      => 'דפים המקושרים לכאן',
+'notargettitle'      => 'אין דף מטרה',
+'notargettext'       => 'לא ציינתם דף מטרה או משתמש לגביו תבוצע פעולה זו.',
+'linklistsub'        => '(רשימת קישורים)',
+'linkshere'          => "הדפים שלהלן מקושרים לדף '''[[:$1]]''':",
+'nolinkshere'        => "אין דפים המקושרים לדף '''[[:$1]]'''.",
+'nolinkshere-ns'     => "אין דפים המקושרים לדף '''[[:$1]]''' במרחב השם שנבחר.",
+'isredirect'         => 'דף הפניה',
+'istemplate'         => 'הכללה',
+'whatlinkshere-prev' => '{{plural:$1|הקודם|$1 הקודמים}}',
+'whatlinkshere-next' => '{{plural:$1|הבא|$1 הבאים}}',
+
+# Block/unblock
+'blockip'                     => 'חסימת משתמש',
+'blockiptext'                 => 'השתמשו בטופס שלהלן כדי לחסום את הרשאות הכתיבה ממשתמש או כתובת IP ספציפיים.
+
+חסימות כאלה צריכות להתבצע אך ורק כדי למנוע ונדליזם, ובהתאם לנהלי האתר.
+
+אנא פרטו את הסיבה הספציפית לחסימה להלן (לדוגמה, ציון דפים ספציפיים אותם השחית המשתמש).',
+'ipaddress'                   => 'כתובת IP',
+'ipadressorusername'          => 'כתובת IP או שם משתמש',
+'ipbexpiry'                   => 'פקיעה',
+'ipbreason'                   => 'סיבה',
+'ipbreasonotherlist'          => 'סיבה אחרת',
+'ipbreason-dropdown'          => "
+* סיבות חסימה נפוצות
+** הוספת מידע שגוי
+** הסרת תוכן מדפים
+** הצפת קישורים לאתרים חיצוניים
+** הוספת שטויות/ג'יבריש לדפים
+** התנהגות מאיימת/הטרדה
+** שימוש לרעה בחשבונות מרובים
+** שם משתמש בעייתי",
+'ipbanononly'                 => 'חסום משתמשים אנונימיים בלבד',
+'ipbcreateaccount'            => 'חסום יצירת חשבונות',
+'ipbenableautoblock'          => 'חסום גם את כתובת ה־IP שלו וכל כתובת IP אחרת שישתמש בה',
+'ipbsubmit'                   => 'חסום משתמש זה',
+'ipbother'                    => 'זמן אחר',
+'ipboptions'                  => 'שעתיים:2 hours,יום:1 day,שלושה ימים:3 days,שבוע:1 week,שבועיים:2 weeks,חודש:1 month,שלושה חודשים:3 months,חצי שנה:6 months,שנה:1 year,לצמיתות:infinite',
+'ipbotheroption'              => 'אחר',
+'ipbotherreason'              => 'סיבה אחרת/נוספת',
+'ipbhidename'                 => 'הסתר את שם המשתמש או כתובת ה־IP מיומן החסימות, רשימת המשתמשים החסומים ורשימת המשתמשים',
+'badipaddress'                => 'משתמש או כתובת IP שגויים.',
+'blockipsuccesssub'           => 'החסימה הושלמה בהצלחה',
+'blockipsuccesstext'          => 'המשתמש [[{{ns:special}}:Contributions/$1|$1]] נחסם.
+
+ראו את [[{{ns:special}}:Ipblocklist|רשימת המשתמשים החסומים]] כדי לצפות בחסימות.',
+'ipb-edit-dropdown'           => 'עריכת סיבות החסימה',
+'ipb-unblock-addr'            => 'הסרת חסימה של $1',
+'ipb-unblock'                 => 'הסרת חסימה של שם משתמש או כתובת IP',
+'ipb-blocklist-addr'          => 'הצגת החסימות הנוכחיות של $1',
+'ipb-blocklist'               => 'הצגת החסימות הנוכחיות',
+'unblockip'                   => 'שחרר משתמש',
+'unblockiptext'               => 'השתמשו בטופס שלהלן כדי להחזיר את הרשאות הכתיבה למשתמש או כתובת IP חסומים.',
+'ipusubmit'                   => 'שחרר משתמש זה',
+'unblocked'                   => 'המשתמש "[[משתמש:$1|$1]]" שוחרר מחסימתו.',
+'ipblocklist'                 => 'רשימת משתמשים חסומים',
+'ipblocklist-submit'          => 'חיפוש',
+'blocklistline'               => '$1 $2 חסם את $3 ($4)',
+'infiniteblock'               => 'לצמיתות',
+'expiringblock'               => 'פוקע $1',
+'anononlyblock'               => 'משתמשים אנונימיים בלבד',
+'noautoblockblock'            => 'חסימה אוטומטית מבוטלת',
+'createaccountblock'          => 'יצירת חשבונות נחסמה',
+'ipblocklistempty'            => 'רשימת המשתמשים החסומים ריקה או ששם המשתמש המבוקש אינו חסום.',
+'blocklink'                   => 'חסום',
+'unblocklink'                 => 'שחרר חסימה',
+'contribslink'                => 'תרומות',
+'autoblocker'                 => 'נחסמת באופן אוטומטי משום שאתה חולק את כתובת ה־IP שלך עם [[{{ns:user}}:$1|$1]]. הנימוק שניתן לחסימת [[{{ns:user}}:$1|$1]] הוא: "$2".',
+'blocklogpage'                => 'יומן חסימות',
+'blocklogentry'               => 'חסם את [[$1]] למשך $2 $3',
+'blocklogtext'                => 'זהו יומן פעולות החסימה והשחרור של משתמשים. כתובות IP הנחסמות באופן אוטומטי אינן מופיעות.
+
+ראו גם את [[{{ns:special}}:Ipblocklist|רשימת המשתמשים החסומים]] הנוכחית.',
+'unblocklogentry'             => 'שחרר את [[$1]]',
+'block-log-flags-anononly'    => 'משתמשים אנונימיים בלבד',
+'block-log-flags-nocreate'    => 'יצירת חשבונות נחסמה',
+'block-log-flags-noautoblock' => 'חסימה אוטומטית מבוטלת',
+'range_block_disabled'        => 'היכולת לחסום טווח כתובות איננה פעילה.',
+'ipb_expiry_invalid'          => 'זמן פקיעת חסימה בלתי חוקי',
+'ipb_already_blocked'         => 'המשתמש "$1" כבר נחסם',
+'ip_range_invalid'            => 'טווח IP שגוי.',
+'proxyblocker'                => 'חוסם פרוקסי',
+'ipb_cant_unblock'            => 'שגיאה: חסימה מספר $1 לא נמצאה. ייתכן שהיא כבר שוחררה.',
+'proxyblockreason'            => 'כתובת ה־IP שלכם נחסמה משום שהיא כתובת פרוקסי פתוחה. אנא צרו קשר עם ספק האינטרנט שלכם והודיעו לו על בעיית האבטחה החמורה הזו.',
+'proxyblocksuccess'           => 'בוצע.',
+'sorbs'                       => 'SORBS',
+'sorbsreason'                 => 'כתובת ה־IP שלכם רשומה ככתובת פרוקסי פתוחה ב־DNSBL שאתר זה משתמש בו.',
+'sorbs_create_account_reason' => 'כתובת ה־IP שלכם רשומה ככתובת פרוקסי פתוחה ב־DNSBL שאתר זה משתמש בו. אינכם יכולים ליצור חשבון.',
+
+# Developer tools
+'lockdb'              => 'נעל בסיס־נתונים',
+'unlockdb'            => 'שחרר בסיס־נתונים מנעילה',
+'lockdbtext'          => 'נעילת בסיס הנתונים תמנע ממשתמשים את האפשרות לערוך דפים, לשנות את העדפותיהם, לערוך את רשימות המעקב שלהם, ופעולות אחרות הדורשות ביצוע שינויים בבסיס הנתונים.
+
+אנא אשרו שזה מה שאתם מתכוונים לעשות, ושתשחררו את בסיס הנתונים מנעילה כאשר פעולת התחזוקה תסתיים.',
+'unlockdbtext'        => 'שחרור בסיס הנתונים מנעילה יחזיר למשתמשים את היכולת לערוך דפים, לשנות את העדפותיהם, לערוך את רשימות המעקב שלהם, ולבצע פעולות אחרות הדורשות ביצוע שינויים בבסיס הנתונים
+אנא אשרו שזה מה שבכוונתכם לעשות.',
+'lockconfirm'         => 'כן, אני באמת רוצה לנעול את בסיס הנתונים.',
+'unlockconfirm'       => 'כן, אני באמת רוצה לשחרר את בסיס הנתונים מנעילה.',
+'lockbtn'             => 'נעל את בסיס הנתונים',
+'unlockbtn'           => 'שחרר את בסיס הנתונים מנעילה',
+'locknoconfirm'       => 'לא סימנתם את תיבת האישור.',
+'lockdbsuccesssub'    => 'נעילת בסיס הנתונים הושלמה בהצלחה',
+'unlockdbsuccesssub'  => 'שוחררה הנעילה מבסיס הנתונים',
+'lockdbsuccesstext'   => 'בסיס הנתונים ננעל.
+
+זכרו [[{{ns:special}}:Unlockdb|לשחרר את הנעילה]] לאחר שפעולת התחזוקה הסתיימה.',
+'unlockdbsuccesstext' => 'שוחררה הנעילה של בסיס הנתונים',
+'lockfilenotwritable' => 'קובץ נעילת מסד הנתונים אינו ניתן לכתיבה. כדי שאפשר יהיה לנעול את מסד הנתונים או לבטל את נעילתו, שרת האינטרנט צריך לקבל הרשאות לכתוב אליו.',
+'databasenotlocked'   => 'מסד הנתונים אינו נעול.',
+
+# Move page
+'movepage'                => 'העברת דף',
+'movepagetext'            => "שימוש בטופס שלהלן ישנה את שמו של דף, ויעביר את כל ההיסטוריה שלו לשם חדש.
+
+השם הישן יהפוך לדף הפניה אל הדף עם השם החדש.
+
+קישורים לשם הישן לא ישתנו, ולכן אנא ודאו שאין [[{{ns:special}}:DoubleRedirects|הפניות כפולות]] או [[{{ns:special}}:BrokenRedirects|שבורות]].
+
+אתם אחראים לוודא שכל הקישורים ממשיכים להצביע למקום שאליו הם אמורים להצביע.
+
+שימו לב: הדף '''לא''' יועבר אם כבר יש דף תחת השם החדש, אלא אם הדף הזה ריק, או שהוא הפניה, ואין לו היסטוריה של שינויים. משמעות הדבר, שאפשר לשנות חזרה את שמו של דף לשם המקורי, אם נעשתה טעות, ולא יימחק דף קיים במערכת.
+
+'''אזהרה:''' שינוי זה עשוי להיות שינוי דרסטי ובלתי צפוי לדף פופולרי; אנא ודאו שאתם מבינים את השלכות המעשה לפני שאתם ממשיכים.",
+'movepagetalktext'        => 'דף השיחה של דף זה יועבר אוטומטית, אלא אם:
+* קיים דף שיחה שאינו ריק תחת השם החדש אליו מועבר הדף.
+* הורדתם את הסימון בתיבה שלהלן.
+
+במקרים אלו, תצטרכו להעביר או לשלב את הדפים באופן ידני, אם תרצו.',
+'movearticle'             => 'העבר דף',
+'movenologin'             => 'לא נכנסתם לאתר',
+'movenologintext'         => 'עליכם [[{{ns:special}}:Userlogin|להיכנס לחשבון]] כדי להעביר דפים.',
+'newtitle'                => 'לשם החדש',
+'move-watch'              => 'מעקב אחרי דף זה',
+'movepagebtn'             => 'העבר דף',
+'pagemovedsub'            => 'ההעברה הושלמה בהצלחה',
+'pagemovedtext'           => 'הדף "[[$1]]" הועבר לשם "[[$2]]".',
+'articleexists'           => 'קיים כבר דף עם אותו שם, או שהשם שבחרתם אינו חוקי.
+אנא בחרו שם אחר.',
+'talkexists'              => 'הדף עצמו הועבר בהצלחה, אבל דף השיחה לא הועבר כיוון שקיים כבר דף שיחה במיקום החדש. אנא מזגו אותם ידנית.',
+'movedto'                 => 'הועבר ל',
+'movetalk'                => 'העבר גם את דף השיחה.',
+'talkpagemoved'           => 'דף השיחה המשוייך הועבר גם כן.',
+'talkpagenotmoved'        => "דף השיחה המשוייך '''לא''' הועבר.",
+'1movedto2'               => '[[$1]] הועבר לשם [[$2]]',
+'1movedto2_redir'         => '[[$1]] הועבר לשם [[$2]] במקום הפניה',
+'movelogpage'             => 'יומן העברות',
+'movelogpagetext'         => 'להלן רשימה של העברות דפים.',
+'movereason'              => 'סיבה',
+'revertmove'              => 'החזר',
+'delete_and_move'         => 'מחק והעבר',
+'delete_and_move_text'    => '== בקשת מחיקה ==
+דף היעד "[[$1]]" כבר קיים. האם ברצונכם למחוק אותו כדי לאפשר את ההעברה?',
+'delete_and_move_confirm' => 'כן, מחק את הדף',
+'delete_and_move_reason'  => 'מחיקה על מנת לאפשר העברה',
+'selfmove'                => 'כותרות המקור והיעד זהות; לא ניתן להעביר דף לעצמו.',
+'immobile_namespace'      => 'כותרת המקור או היעד היא סוג מיוחד של דף; לא ניתן להעביר דפים לתוך או מתוך מרחב שם זה.',
+
+# Export
+'export'            => 'ייצוא דפים',
+'exporttext'        => 'באפשרותכם לייצא את התוכן ואת היסטוריית העריכה של דף אחד או של מספר דפים, בתבנית של קובץ XML, שניתן לייבא אותו למיזם ויקי אחר המשתמש בתוכנת מדיה־ויקי באמצעות [[{{ns:special}}:Import|דף הייבוא]].
+
+כדי לייצא דפים, הקישו את שמותיהם בתיבת הטקסט שלהלן, כל שם בשורה נפרדת, ובחרו האם לייצא גם את הגרסה הנוכחית וגם את היסטוריית השינויים של הדפים, או רק את הגרסה הנוכחית עם מידע על העריכה האחרונה.
+
+בנוסף, ניתן להשתמש בקישור, כגון [[{{ns:special}}:Export/{{int:mainpage}}]] לדף {{int:mainpage}} ללא היסטוריית השינויים שלו.',
+'exportcuronly'     => 'כלול רק את הגרסה הנוכחית, ללא כל ההיסטוריה',
+'exportnohistory'   => "----
+'''הערה:''' ייצוא ההיסטוריה המלאה של דפים דרך טופס זה הופסקה עקב בעיות ביצוע.",
+'export-submit'     => 'ייצוא',
+'export-addcattext' => 'הוספת דפים מהקטגוריה:',
+'export-addcat'     => 'הוספה',
+
+# Namespace 8 related
+'allmessages'               => 'הודעות המערכת',
+'allmessagesname'           => 'שם',
+'allmessagesdefault'        => 'טקסט ברירת מחדל',
+'allmessagescurrent'        => 'טקסט נוכחי',
+'allmessagestext'           => 'זוהי רשימת כל הודעות המערכת שבמרחב השם {{ns:mediawiki}}, המשמשים את ממשק האתר.
+
+מפעילי המערכת יכולים לערוך את ההודעות בלחיצה על שם ההודעה.',
+'allmessagesnotsupportedUI' => "שפת הממשק הנוכחית שלכם, '''$1''', אינה נתמכת על־ידי הדף באתר זה.",
+'allmessagesnotsupportedDB' => 'לא ניתן להשתמש בדף זה כיוון ש־wgUseDatabseMessages מבוטל.',
+'allmessagesfilter'         => 'מסנן שמות ההודעות:',
+'allmessagesmodified'       => 'רק הודעות ששונו',
+
+# Thumbnails
+'thumbnail-more'           => 'הגדל',
+'missingimage'             => "'''תמונה חסרה'''
+
+'''$1''",
+'filemissing'              => 'קובץ חסר',
+'thumbnail_error'          => 'שגיאה ביצירת תמונה ממוזערת: $1',
+'djvu_page_error'          => 'דף ה־DjVu מחוץ לטווח',
+'djvu_no_xml'              => 'לא ניתן היה לקבל את ה־XML עבור קובץ ה־DjVu',
+'thumbnail_invalid_params' => 'פרמטרים שגויים לתמונה הממוזערת',
+'thumbnail_dest_directory' => 'לא ניתן היה ליצור את תיקיית היעד',
+
+# Special:Import
+'import'                     => 'ייבוא דפים',
+'importinterwiki'            => 'ייבוא בין־אתרי',
+'import-interwiki-text'      => 'אנא בחרו אתר ויקי ואת כותרת הדף לייבוא.
+תאריכי ועורכי הגרסאות יישמרו בעת הייבוא.
+כל פעולות הייבוא הבין־אתרי נשמרות ביומן הייבוא.',
+'import-interwiki-history'   => 'העתק את כל היסטוריית העריכות של דף זה',
+'import-interwiki-submit'    => 'ייבוא',
+'import-interwiki-namespace' => 'העבר את הדפים לתוך מרחב השם:',
+'importtext'                 => 'אנא ייצאו את הקובץ מאתר המקור תוך שימוש בעזר הייצוא, שמרו אותו לדיסק הקשיח שלכם והעלו אותו לכאן.',
+'importstart'                => 'מייבא דפים…',
+'import-revision-count'      => '{{plural:$1|גרסה אחת|$1 גרסאות}}',
+'importnopages'              => 'אין דפים לייבוא.',
+'importfailed'               => 'הייבוא נכשל: $1',
+'importunknownsource'        => 'סוג ייבוא בלתי ידוע',
+'importcantopen'             => 'פתיחת קובץ הייבוא נכשלה',
+'importbadinterwiki'         => 'קישור אינטרוויקי שגוי',
+'importnotext'               => 'ריק או חסר טקסט',
+'importsuccess'              => 'הייבוא הושלם בהצלחה!',
+'importhistoryconflict'      => 'ישנה התנגשות עם ההיסטוריה הקיימת של הדף (ייתכן שהדף יובא בעבר)',
+'importnosources'            => 'אין מקורות לייבוא בין־אתרי, וייבוא ישיר של דף עם היסטוריה אינו מאופשר כעת.',
+'importnofile'               => 'לא הועלה קובץ ייבוא.',
+'importuploaderror'          => 'העלאת קובץ ייבוא נכשלה; ייתכן שהקובץ גדול מגודל ההעלאה המותר.',
+
+# Import log
+'importlogpage'                    => 'יומן ייבוא',
+'importlogpagetext'                => 'ייבוא מנהלי של דפים כולל היסטוריית העריכות שלהם מאתרי ויקי אחרים.',
+'import-logentry-upload'           => 'ייבא את [[$1]] על־ידי העלאת קובץ',
+'import-logentry-upload-detail'    => '$1 גרסאות',
+'import-logentry-interwiki'        => 'ייבא את $1 בייבוא בין־אתרי',
+'import-logentry-interwiki-detail' => '$1 גרסאות מהאתר $2',
+
+# Tooltip help for the actions
+'tooltip-pt-userpage'             => 'דף המשתמש שלי',
+'tooltip-pt-anonuserpage'         => 'דף המשתמש של משתמש אנונימי זה',
+'tooltip-pt-mytalk'               => 'דף השיחה שלי',
+'tooltip-pt-anontalk'             => 'שיחה על תרומות המשתמש האנונימי',
+'tooltip-pt-preferences'          => 'ההעדפות שלי',
+'tooltip-pt-watchlist'            => 'רשימת הדפים שאתה עוקב אחרי השינויים בהם',
+'tooltip-pt-mycontris'            => 'רשימת התרומות שלי',
+'tooltip-pt-login'                => 'מומלץ להירשם, אך אין חובה לעשות כן',
+'tooltip-pt-anonlogin'            => 'מומלץ להירשם, אך אין חובה לעשות כן',
+'tooltip-pt-logout'               => 'יציאה מהחשבון',
+'tooltip-ca-talk'                 => 'שוחחו על דף זה',
+'tooltip-ca-edit'                 => 'באפשרותכם לערוך דף זה. אנא השתמשו בלחצן "תצוגה מקדימה" לפני השמירה',
+'tooltip-ca-addsection'           => 'הוספת הערה לשיחה זו',
+'tooltip-ca-viewsource'           => 'זהו דף מוגן, אך באפשרותכם לצפות במקורו',
+'tooltip-ca-history'              => 'גרסאות קודמות של דף זה.',
+'tooltip-ca-protect'              => 'הגנו על דף זה',
+'tooltip-ca-delete'               => 'מחקו דף זה',
+'tooltip-ca-undelete'             => 'שחזרו עריכות שנעשו בדף זה לפני שנמחק',
+'tooltip-ca-move'                 => 'העבירו דף זה',
+'tooltip-ca-watch'                => 'הוסיפו דף זה לרשימת המעקב',
+'tooltip-ca-unwatch'              => 'הסירו דף זה מרשימת המעקב',
+'tooltip-search'                  => 'חיפוש ב{{grammar:תחילית|{{SITENAME}}}}',
+'tooltip-p-logo'                  => 'עמוד ראשי',
+'tooltip-n-mainpage'              => 'בקרו בעמוד הראשי',
+'tooltip-n-portal'                => 'אודות המיזם, איך תוכלו לעזור, איפה למצוא דברים',
+'tooltip-n-currentevents'         => 'מצאו מידע רקע על האירועים האחרונים',
+'tooltip-n-recentchanges'         => 'רשימת השינויים האחרונים באתר',
+'tooltip-n-randompage'            => 'צפייה בדף תוכן אקראי',
+'tooltip-n-help'                  => 'עזרה בשימוש באתר',
+'tooltip-n-sitesupport'           => 'תרומה',
+'tooltip-t-whatlinkshere'         => 'רשימת כל הדפים המקושרים לכאן',
+'tooltip-t-recentchangeslinked'   => 'השינויים האחרונים שבוצעו בדפים המקושרים לכאן',
+'tooltip-feed-rss'                => 'הוסיפו עדכון אוטומטי על־ידי RSS',
+'tooltip-feed-atom'               => 'הוסיפו עדכון אוטומטי על־ידי Atom',
+'tooltip-t-contributions'         => 'צפו בתרומותיו של משתמש זה',
+'tooltip-t-emailuser'             => 'שלחו דואר אלקטרוני למשתמש זה',
+'tooltip-t-upload'                => 'העלו תמונות או קבצי מדיה',
+'tooltip-t-specialpages'          => 'רשימת כל הדפים המיוחדים',
+'tooltip-ca-nstab-main'           => 'צפו בדף התוכן',
+'tooltip-ca-nstab-user'           => 'צפו בדף המשתמש',
+'tooltip-ca-nstab-media'          => 'צפו בפריט המדיה',
+'tooltip-ca-nstab-special'        => 'זהו דף מיוחד, אי אפשר לערוך אותו',
+'tooltip-ca-nstab-project'        => 'צפו בדף המיזם',
+'tooltip-ca-nstab-image'          => 'צפו בדף תיאור התמונה',
+'tooltip-ca-nstab-mediawiki'      => 'צפו בהודעת המערכת',
+'tooltip-ca-nstab-template'       => 'צפו בתבנית',
+'tooltip-ca-nstab-help'           => 'צפו בדף העזרה',
+'tooltip-ca-nstab-category'       => 'צפו בדף הקטגוריה',
+'tooltip-minoredit'               => 'סימון עריכה זו כמשנית',
+'tooltip-save'                    => 'שמירת את השינויים שביצעתם',
+'tooltip-preview'                 => 'תצוגה מקדימה, אנא השתמשו באפשרות זו לפני השמירה!',
+'tooltip-diff'                    => 'צפו בשינויים שערכתם בטקסט',
+'tooltip-compareselectedversions' => 'צפו בהשוואה של שתי גרסאות של דף זה',
+'tooltip-watch'                   => 'הוסיפו דף זה לרשימת המעקב',
+'tooltip-recreate'                => 'צור מחדש את הדף למרות שהוא נמחק',
+
+# Stylesheets
+'common.css'   => '/* הסגנונות הנכתבים כאן ישפיעו על כל הרקעים */',
+'monobook.css' => '/* הסגנונות הנכתבים כאן ישפיעו על הרקע Monobook בלבד */',
+
+# Scripts
+'common.js'   => '/* כל סקריפט JavaScript שנכתב כאן ירוץ עבור כל המשתמשים בכל טעינת עמוד */',
+'monobook.js' => '/* מיושן; השתמשו ב[[מדיה ויקי:Common.js]] */',
+
+# Metadata
+'nodublincore'      => 'Dublin Core RDF metadata מנוטרל בשרת זה.',
+'nocreativecommons' => 'Creative Commons RDF metadata מנוטרל בשרת זה.',
+'notacceptable'     => 'האתר לא יכול לספק מידע בפורמט שתוכנת הלקוח יכולה לקרוא.',
+
+# Attribution
+'anonymous'        => 'משתמש(ים) אנונימי(ים) של {{SITENAME}}',
+'siteuser'         => 'משתמש {{SITENAME}} $1',
+'lastmodifiedatby' => 'דף זה שונה לאחרונה בתאריך $2, $1 על־ידי $3.', # $1 date, $2 time, $3 user
+'and'              => 'וגם',
+'othercontribs'    => 'מבוסס על העבודה של $1.',
+'others'           => 'אחרים',
+'siteusers'        => 'משתמש(י) {{SITENAME}} $1',
+'creditspage'      => 'קרדיטים בדף',
+'nocredits'        => 'אין קרדיטים זמינים בדף זה.',
+
+# Spam protection
+'spamprotectiontitle'    => 'מנגנון מסנן הספאם',
+'spamprotectiontext'     => 'הדף אותו רצית לשמור נחסם על־ידי מסנן הספאם. הסיבה לכך היא לרוב קישור לאתר חיצוני.',
+'spamprotectionmatch'    => 'הטקסט הבא הוא שגרם להפעלת סינון הספאם: $1',
+'subcategorycount'       => '{{plural:$1|ישנה קטגוריית משנה אחת|ישנן $1 קטגוריות משנה}} בקטגוריה זו.',
+'categoryarticlecount'   => '{{plural:$1|ישנו דף אחד|ישנם $1 דפים}} בקטגוריה זו.',
+'category-media-count'   => '{{plural:$1|ישנו קובץ אחד|ישנם $1 קבצים}} בקטגוריה זו.',
+'listingcontinuesabbrev' => ' (המשך)',
+'spambot_username'       => 'MediaWiki spam cleanup',
+'spam_reverting'         => 'שחזור לגרסה אחרונה שלא כוללת קישורים ל־$1',
+'spam_blanking'          => 'כל הגרסאות כוללות קישורים ל־$1, מרוקן את הדף',
+
+# Info page
+'infosubtitle'   => 'מידע על הדף',
+'numedits'       => 'מספר עריכות (דף תוכן): $1',
+'numtalkedits'   => 'מספר עריכות (דף שיחה): $1',
+'numwatchers'    => 'מספר צופים בדף: $1',
+'numauthors'     => 'מספר כותבים נפרדים (דף תוכן): $1',
+'numtalkauthors' => 'מספר כותבים נפרדים (דף שיחה): $1',
+
+# Math options
+'mw_math_png'    => 'תמיד הצג כ־PNG',
+'mw_math_simple' => 'HTML אם פשוט מאוד, אחרת PNG',
+'mw_math_html'   => 'HTML אם אפשר, אחרת PNG',
+'mw_math_source' => 'השאר כקוד TeX (לדפדפני טקסט)',
+'mw_math_modern' => 'מומלץ לדפדפנים עדכניים',
+'mw_math_mathml' => 'MathML אם אפשר (ניסיוני)',
+
+# Patrolling
+'markaspatrolleddiff'                 => 'סמן שינוי כבדוק',
+'markaspatrolledtext'                 => 'סמן דף זה כבדוק',
+'markedaspatrolled'                   => 'השינוי נבדק',
+'markedaspatrolledtext'               => 'השינוי שנבחר נבדק.',
+'rcpatroldisabled'                    => 'בדיקת השינויים האחרונים מבוטלת',
+'rcpatroldisabledtext'                => 'תכונת סימון שינוי כבדוק בשינויים האחרונים היא כרגע מנוטרלת.',
+'markedaspatrollederror'              => 'לא יכול לסמן כבדוק',
+'markedaspatrollederrortext'          => 'עליכם לציין גרסה שתציינו כבדוקה.',
+'markedaspatrollederror-noautopatrol' => 'אינכם מורשים לסמן את השינויים של עצמכם כבדוקים.',
+
+# Patrol log
+'patrol-log-page' => 'יומן שינויים בדוקים',
+'patrol-log-line' => 'סימן את  $1 בדף $2 כבדוקה $3',
+'patrol-log-auto' => '(אוטומטית)',
+'patrol-log-diff' => 'גרסה $1',
+
+# Image deletion
+'deletedrevision' => 'מחק גרסה ישנה $1.',
+
+# Browsing diffs
+'previousdiff' => '→ עבור להשוואת הגרסאות הקודמת',
+'nextdiff'     => 'עבור להשוואת הגרסאות הבאה ←',
+
+# Media information
+'mediawarning'         => "'''אזהרה:''' קובץ זה עלול להכיל קוד זדוני, שהרצתו עלולה לסכן את המערכת שלכם.<hr />",
+'imagemaxsize'         => 'הגבל תמונות בדפי תיאור תמונה ל:',
+'thumbsize'            => 'הקטן לגודל של:',
+'file-info'            => '(גודל הקובץ: $1, סוג MIME: $2)',
+'file-info-size'       => '($1 × $2 פיקסלים, גודל הקובץ: $3, סוג MIME: $4)',
+'file-nohires'         => '<small>אין גרסת רזולוציה גבוהה יותר.</small>',
+'file-svg'             => '<small>זוהי תמונה וקטורית שניתן לשנות את גודלה ללא איבוד פרטים. הגודל המקורי: $1 × $2 פיקסלים.</small>',
+'show-big-image'       => 'תמונה ברזולוציה גבוהה יותר',
+'show-big-image-thumb' => '<small>גודל התצוגה הזו: $1 × $2 פיקסלים</small>',
+
+'newimages'    => 'גלריית תמונות חדשות',
+'showhidebots' => '($1 בוטים)',
+'noimages'     => 'אין תמונות.',
+
+/*
+Short names for language variants used for language conversion links.
+To disable showing a particular link, set it to 'disable', e.g.
+'variantname-zh-sg' => 'disable',
+Variants for Chinese language
+*/
+'variantname-zh-cn' => 'cn',
+'variantname-zh-tw' => 'tw',
+'variantname-zh-hk' => 'hk',
+'variantname-zh-sg' => 'sg',
+'variantname-zh'    => 'zh',
+
+# Variants for Serbian language
+'variantname-sr-ec' => 'sr-ec',
+'variantname-sr-el' => 'sr-el',
+'variantname-sr-jc' => 'sr-jc',
+'variantname-sr-jl' => 'sr-jl',
+'variantname-sr'    => 'sr',
+
+# Variants for Kazakh language
+'variantname-kk-tr' => 'kk-tr',
+'variantname-kk-kz' => 'kk-kz',
+'variantname-kk-cn' => 'kk-cn',
+'variantname-kk'    => 'kk',
+
+'passwordtooshort' => 'סיסמתכם בלתי תקינה או קצרה מדי. עליה להיות מורכבת מ־$1 תווים לפחות ושונה משם המשתמש.',
+
+# Metadata
+'metadata'          => 'מידע נוסף על התמונה',
+'metadata-help'     => 'קובץ זה מכיל מידע נוסף, שיש להניח שהגיע ממצלמה דיגיטלית או מסורק בו התמונה נוצרה או עברה דיגיטציה. אם הקובץ שונה ממצבו הראשוני, כמה מהנתונים להלן עלולים שלא לשקף באופן מלא את מצב התמונה החדש.',
+'metadata-expand'   => 'הצג פרטים מורחבים',
+'metadata-collapse' => 'הסתר פרטים מורחבים',
+'metadata-fields'   => 'שדות המידע הנוסף של EXIF האלה אינם פרטים מורחבים ויוצגו תמיד, לעומת השאר:
+* make
+* model
+* datetimeoriginal
+* exposuretime
+* fnumber
+* focallength',
+
+# EXIF tags
+'exif-imagewidth'                  => 'רוחב',
+'exif-imagelength'                 => 'גובה',
+'exif-bitspersample'               => 'ביטים לרכיב',
+'exif-compression'                 => 'תבנית דחיסה',
+'exif-photometricinterpretation'   => 'הרכב פיקסלים',
+'exif-orientation'                 => 'כיווניות',
+'exif-samplesperpixel'             => 'מספר רכיבים',
+'exif-planarconfiguration'         => 'סידור מידע',
+'exif-ycbcrsubsampling'            => 'הפחתת יחס Y ל־C',
+'exif-ycbcrpositioning'            => 'מיקום Y ו־C',
+'exif-xresolution'                 => 'רזולוציה אופקית',
+'exif-yresolution'                 => 'רזולוציה אנכית',
+'exif-resolutionunit'              => 'יחידות מידה של רזולוציות X ו־Y',
+'exif-stripoffsets'                => 'מיקום מידע התמונה',
+'exif-rowsperstrip'                => 'מספר השורות לרצועה',
+'exif-stripbytecounts'             => 'בייטים לרצועה דחוסה',
+'exif-jpeginterchangeformat'       => 'יחס ל־JPEG SOI',
+'exif-jpeginterchangeformatlength' => 'בייטים של מידע JPEG',
+'exif-transferfunction'            => 'פונקציית העברה',
+'exif-whitepoint'                  => 'נקודה לבנה צבעונית',
+'exif-primarychromaticities'       => 'צבעוניות ה־Primarity',
+'exif-ycbcrcoefficients'           => 'מקדמי פעולת הטרנספורמציה של מרחב הצבע',
+'exif-referenceblackwhite'         => 'זוג ערכי התייחסות לשחור ולבן',
+'exif-datetime'                    => 'תאריך ושעת שינוי הקובץ',
+'exif-imagedescription'            => 'כותרת התמונה',
+'exif-make'                        => 'יצרן המצלמה',
+'exif-model'                       => 'דגם המצלמה',
+'exif-software'                    => 'תוכנה בשימוש',
+'exif-artist'                      => 'מחבר',
+'exif-copyright'                   => 'בעל זכויות היוצרים',
+'exif-exifversion'                 => 'גרסת Exif',
+'exif-flashpixversion'             => 'גרסת Flashpix נתמכת',
+'exif-colorspace'                  => 'מרחב הצבע',
+'exif-componentsconfiguration'     => 'משמעות כל רכיב',
+'exif-compressedbitsperpixel'      => 'שיטת דחיסת התמונה',
+'exif-pixelydimension'             => 'רוחב התמונה הנכון',
+'exif-pixelxdimension'             => 'גובה התמונה הנכון',
+'exif-makernote'                   => 'הערות היצרן',
+'exif-usercomment'                 => 'הערות המשתמש',
+'exif-relatedsoundfile'            => 'קובץ שמע מקושר',
+'exif-datetimeoriginal'            => 'תאריך ושעת יצירת הקובץ',
+'exif-datetimedigitized'           => 'תאריך ושעת הפיכת הקובץ לדיגיטלי',
+'exif-subsectime'                  => 'תת־השניות של שינוי הקובץ',
+'exif-subsectimeoriginal'          => 'תת־השניות של יצירת הקובץ',
+'exif-subsectimedigitized'         => 'תת־השניות של הפיכת הקובץ לדיגיטלי',
+'exif-exposuretime'                => 'זמן חשיפה',
+'exif-exposuretime-format'         => '$1 שניות ($2)',
+'exif-fnumber'                     => 'מספר F',
+'exif-fnumber-format'              => 'f/$1',
+'exif-exposureprogram'             => 'תוכנת החשיפה',
+'exif-spectralsensitivity'         => 'רגישות הספקטרום',
+'exif-isospeedratings'             => 'דירוג מהירות ה־ISO',
+'exif-oecf'                        => 'מקדם המרה אופטו־אלקטרוני',
+'exif-shutterspeedvalue'           => 'מהירות צמצם',
+'exif-aperturevalue'               => 'פתח',
+'exif-brightnessvalue'             => 'בהירות',
+'exif-exposurebiasvalue'           => 'נטיית החשיפה',
+'exif-maxaperturevalue'            => 'גודל הפתח המקסימאלי',
+'exif-subjectdistance'             => 'נושא המרחק',
+'exif-meteringmode'                => 'שיטת מדידה',
+'exif-lightsource'                 => 'מקור אור',
+'exif-flash'                       => 'פלש',
+'exif-focallength'                 => 'אורך מוקדי העדשות',
+'exif-focallength-format'          => '$1 מ"מ',
+'exif-subjectarea'                 => 'נושא האזור',
+'exif-flashenergy'                 => 'אנרגיית הפלש',
+'exif-spatialfrequencyresponse'    => 'תדירות התגובה המרחבית',
+'exif-focalplanexresolution'       => 'משטח הפוקוס ברזולוציה האופקית',
+'exif-focalplaneyresolution'       => 'משטח הפוקוס ברזולוציה האנכית',
+'exif-focalplaneresolutionunit'    => 'יחידת המידה של משטח הפוקוס ברזולוציה',
+'exif-subjectlocation'             => 'נושא המיקום',
+'exif-exposureindex'               => 'מדד החשיפה',
+'exif-sensingmethod'               => 'שיטת חישה',
+'exif-filesource'                  => 'מקור הקובץ',
+'exif-scenetype'                   => 'סוג הסצנה',
+'exif-cfapattern'                  => 'תבנית CFA',
+'exif-customrendered'              => 'עיבוד תמונה מותאם',
+'exif-exposuremode'                => 'מצב החשיפה',
+'exif-whitebalance'                => 'איזון צבע לבן',
+'exif-digitalzoomratio'            => 'יחס הזום הדיגיטלי',
+'exif-focallengthin35mmfilm'       => 'אורך מוקדי העדשות בסרט צילום של 35 מ"מ',
+'exif-scenecapturetype'            => 'אופן צילום הסצנה',
+'exif-gaincontrol'                 => 'בקרת הסצנה',
+'exif-contrast'                    => 'ניגוד',
+'exif-saturation'                  => 'רוויה',
+'exif-sharpness'                   => 'חדות',
+'exif-devicesettingdescription'    => 'תיאור הגדרות ההתקן',
+'exif-subjectdistancerange'        => 'טווח נושא המרחק',
+'exif-imageuniqueid'               => 'מזהה תמונה ייחודי',
+'exif-gpsversionid'                => 'גרסת תגי GPS',
+'exif-gpslatituderef'              => 'קו־רוחב צפוני או דרומי',
+'exif-gpslatitude'                 => 'קו־רוחב',
+'exif-gpslongituderef'             => 'קו־אורך מזרחי או מערבי',
+'exif-gpslongitude'                => 'קו־אורך',
+'exif-gpsaltituderef'              => 'התייחסות גובה',
+'exif-gpsaltitude'                 => 'גובה',
+'exif-gpstimestamp'                => 'זמן GPS (שעון אטומי)',
+'exif-gpssatellites'               => 'לוויינים ששמשו למדידה',
+'exif-gpsstatus'                   => 'מעמד המקלט',
+'exif-gpsmeasuremode'              => 'מצב מדידה',
+'exif-gpsdop'                      => 'דיוק מדידה',
+'exif-gpsspeedref'                 => 'יחידת מהירות',
+'exif-gpsspeed'                    => 'יחידת מהירות של מקלט GPS',
+'exif-gpstrackref'                 => 'התייחסות מהירות התנועה',
+'exif-gpstrack'                    => 'מהירות התנועה',
+'exif-gpsimgdirectionref'          => 'התייחסות כיוון התמונה',
+'exif-gpsimgdirection'             => 'כיוון התמונה',
+'exif-gpsmapdatum'                 => 'מידע סקר מדידת הארץ שנעשה בו שימוש',
+'exif-gpsdestlatituderef'          => 'התייחסות קו־הרוחב של היעד',
+'exif-gpsdestlatitude'             => 'קו־הרוחב של היעד',
+'exif-gpsdestlongituderef'         => 'התייחסות קו־האורך של היעד',
+'exif-gpsdestlongitude'            => 'קו־האורך של היעד',
+'exif-gpsdestbearingref'           => 'התייחסות כיוון היעד',
+'exif-gpsdestbearing'              => 'כיוון היעד',
+'exif-gpsdestdistanceref'          => 'התייחסות מרחק ליעד',
+'exif-gpsdestdistance'             => 'מרחק ליעד',
+'exif-gpsprocessingmethod'         => 'שם שיטת העיבוד של ה־GPS',
+'exif-gpsareainformation'          => 'שם אזור ה־GPS',
+'exif-gpsdatestamp'                => 'תאריך ה־GPS',
+'exif-gpsdifferential'             => 'תיקון דיפרנציאלי של ה־GPS',
+
+# EXIF attributes
+'exif-compression-1' => 'לא דחוס',
+'exif-compression-6' => 'JPEG',
+
+'exif-photometricinterpretation-2' => 'RGB',
+'exif-photometricinterpretation-6' => 'YCbCr',
+
+'exif-unknowndate' => 'תאריך בלתי ידוע',
+
+'exif-orientation-1' => 'רגילה', # 0th row: top; 0th column: left
+'exif-orientation-2' => 'הפוך אופקית', # 0th row: top; 0th column: right
+'exif-orientation-3' => 'מסובב 180°', # 0th row: bottom; 0th column: right
+'exif-orientation-4' => 'הפוך אנכית', # 0th row: bottom; 0th column: left
+'exif-orientation-5' => 'מסובב 90° נגד כיוון השעון והפוך אנכית', # 0th row: left; 0th column: top
+'exif-orientation-6' => 'מסובב 90° עם כיוון השעון', # 0th row: right; 0th column: top
+'exif-orientation-7' => 'מסובב 90° עם כיוון השעון והפוך אנכית', # 0th row: right; 0th column: bottom
+'exif-orientation-8' => 'מסובב 90° נגד כיוון השעון', # 0th row: left; 0th column: bottom
+
+'exif-planarconfiguration-1' => 'פורמט חסון',
+'exif-planarconfiguration-2' => 'פורמט שטוח',
+
+'exif-xyresolution-i' => '$1 dpi',
+'exif-xyresolution-c' => '$1 dpc',
+
+'exif-colorspace-1'      => 'sRGB',
+'exif-colorspace-ffff.h' => 'FFFF.H',
+
+'exif-componentsconfiguration-0' => 'אינו קיים',
+'exif-componentsconfiguration-1' => 'Y',
+'exif-componentsconfiguration-2' => 'Cb',
+'exif-componentsconfiguration-3' => 'Cr',
+'exif-componentsconfiguration-4' => 'R',
+'exif-componentsconfiguration-5' => 'G',
+'exif-componentsconfiguration-6' => 'B',
+
+'exif-exposureprogram-0' => 'לא הוגדרה',
+'exif-exposureprogram-1' => 'ידנית',
+'exif-exposureprogram-2' => 'תוכנה רגילה',
+'exif-exposureprogram-3' => 'עדיפות פתח',
+'exif-exposureprogram-4' => 'עדיפות צמצם',
+'exif-exposureprogram-5' => 'תוכנה יוצרת (מטה לכיוון עומק השדה)',
+'exif-exposureprogram-6' => 'תוכנה פועלת (מטה לכיוון מהירות צמצם גבוהה)',
+'exif-exposureprogram-7' => 'מצב דיוקן (לתמונות צילום מקרוב כשהרקע לא בפוקוס)',
+'exif-exposureprogram-8' => 'מצב נוף (לתמונות נוף כשהרקע בפוקוס)',
+
+'exif-subjectdistance-value' => '$1 מטרים',
+
+'exif-meteringmode-0'   => 'לא ידוע',
+'exif-meteringmode-1'   => 'ממוצע',
+'exif-meteringmode-2'   => 'מרכז משקל ממוצע',
+'exif-meteringmode-3'   => 'נקודה',
+'exif-meteringmode-4'   => 'רב־נקודה',
+'exif-meteringmode-5'   => 'תבנית',
+'exif-meteringmode-6'   => 'חלקי',
+'exif-meteringmode-255' => 'אחר',
+
+'exif-lightsource-0'   => 'לא ידוע',
+'exif-lightsource-1'   => 'אור יום',
+'exif-lightsource-2'   => 'פלואורסצנטי',
+'exif-lightsource-3'   => 'טונגסטן (אור מתלהט)',
+'exif-lightsource-4'   => 'פלש',
+'exif-lightsource-9'   => 'מזג אוויר טוב',
+'exif-lightsource-10'  => 'מזג אוויר מעונן',
+'exif-lightsource-11'  => 'צל',
+'exif-lightsource-12'  => 'אור יום פלואורסצנטי (D 5700 – 7100K)',
+'exif-lightsource-13'  => 'אור יום לבן פלואורסצנטי (N 4600 – 5400K)',
+'exif-lightsource-14'  => 'אור יום קריר לבן פלואורסצנטי (W 3900 – 4500K)',
+'exif-lightsource-15'  => 'פלואורסצנטי לבן (WW 3200 – 3700K)',
+'exif-lightsource-17'  => 'אור רגיל A',
+'exif-lightsource-18'  => 'אור רגיל B',
+'exif-lightsource-19'  => 'אור רגיל C',
+'exif-lightsource-20'  => 'D55',
+'exif-lightsource-21'  => 'D65',
+'exif-lightsource-22'  => 'D75',
+'exif-lightsource-23'  => 'D50',
+'exif-lightsource-24'  => 'טונגסטן אולפן ISO',
+'exif-lightsource-255' => 'מקור אור אחר',
+
+'exif-focalplaneresolutionunit-2' => "אינצ'ים",
+
+'exif-sensingmethod-1' => 'לא מוגדרת',
+'exif-sensingmethod-2' => 'חיישן אזור בצבע עם שבב אחד',
+'exif-sensingmethod-3' => 'חיישן אזור בצבע עם שני שבבים',
+'exif-sensingmethod-4' => 'חיישן אזור בצבע עם שלושה שבבים',
+'exif-sensingmethod-5' => 'חיישן אזור עם צבע רציף',
+'exif-sensingmethod-7' => 'חיישן טריליניארי',
+'exif-sensingmethod-8' => 'חיישן עם צבע רציף ליניארי',
+
+'exif-filesource-3' => 'DSC',
+
+'exif-scenetype-1' => 'תמונה שצולמה ישירות',
+
+'exif-customrendered-0' => 'תהליך רגיל',
+'exif-customrendered-1' => 'תהליך מותאם',
+
+'exif-exposuremode-0' => 'חשיפה אוטומטית',
+'exif-exposuremode-1' => 'חשיפה ידנית',
+'exif-exposuremode-2' => 'מסגרת אוטומטית',
+
+'exif-whitebalance-0' => 'איזון צבע לבן אוטומטי',
+'exif-whitebalance-1' => 'איזון צבע לבן ידני',
+
+'exif-scenecapturetype-0' => 'רגיל',
+'exif-scenecapturetype-1' => 'נוף',
+'exif-scenecapturetype-2' => 'דיוקן',
+'exif-scenecapturetype-3' => 'סצנה לילית',
+
+'exif-gaincontrol-0' => 'ללא',
+'exif-gaincontrol-1' => 'תוספת נמוכה למעלה',
+'exif-gaincontrol-2' => 'תוספת גבוהה למעלה',
+'exif-gaincontrol-3' => 'תוספת נמוכה למטה',
+'exif-gaincontrol-4' => 'תוספת גבוהה למטה',
+
+'exif-contrast-0' => 'רגיל',
+'exif-contrast-1' => 'רך',
+'exif-contrast-2' => 'קשה',
+
+'exif-saturation-0' => 'רגילה',
+'exif-saturation-1' => 'רוויה נמוכה',
+'exif-saturation-2' => 'רוויה גבוהה',
+
+'exif-sharpness-0' => 'רגילה',
+'exif-sharpness-1' => 'רכה',
+'exif-sharpness-2' => 'קשה',
+
+'exif-subjectdistancerange-0' => 'לא ידוע',
+'exif-subjectdistancerange-1' => 'מאקרו',
+'exif-subjectdistancerange-2' => 'תצוגה קרובה',
+'exif-subjectdistancerange-3' => 'תצוגה רחוקה',
+
+# Pseudotags used for GPSLatitudeRef and GPSDestLatitudeRef
+'exif-gpslatitude-n' => 'קו־רוחב צפוני',
+'exif-gpslatitude-s' => 'קו־רוחב דרומי',
+
+# Pseudotags used for GPSLongitudeRef and GPSDestLongitudeRef
+'exif-gpslongitude-e' => 'קו־אורך מזרחי',
+'exif-gpslongitude-w' => 'קו־אורך מערבי',
+
+'exif-gpsstatus-a' => 'מדידה בתהליך',
+'exif-gpsstatus-v' => 'מדידה בו־זמנית',
+
+'exif-gpsmeasuremode-2' => 'מדידה בשני ממדים',
+'exif-gpsmeasuremode-3' => 'מדידה בשלושה ממדים',
+
+# Pseudotags used for GPSSpeedRef and GPSDestDistanceRef
+'exif-gpsspeed-k' => 'קילומטרים בשעה',
+'exif-gpsspeed-m' => 'מיילים בשעה',
+'exif-gpsspeed-n' => 'מיילים ימיים בשעה',
+
+# Pseudotags used for GPSTrackRef, GPSImgDirectionRef and GPSDestBearingRef
+'exif-gpsdirection-t' => 'כיוון אמיתי',
+'exif-gpsdirection-m' => 'כיוון מגנטי',
+
+# External editor support
+'edit-externally'      => 'ערכו קובץ זה באמצעות יישום חיצוני',
+'edit-externally-help' => 'ראו את [http://meta.wikimedia.org/wiki/Help:External_editors הוראות ההתקנה] למידע נוסף.',
+
+# 'all' in various places, this might be different for inflected languages
+'recentchangesall' => 'הכול',
+'imagelistall'     => 'הכול',
+'watchlistall1'    => 'הכול',
+'watchlistall2'    => 'הכול',
+'namespacesall'    => 'הכול',
+
+# E-mail address confirmation
+'confirmemail'            => 'אמתו כתובת דוא"ל',
+'confirmemail_noemail'    => 'אין לכם כתובת דוא"ל תקפה המוגדרת ב[[{{ns:special}}:Preferences|העדפות המשתמש]] שלכם.',
+'confirmemail_text'       => 'אתר זה דורש שתאמתו את כתובת הדוא"ל שלכם לפני שתשתמשו בשירותי הדוא"ל. לחצו על הכפתור למטה כדי לשלוח דוא"ל עם קוד אישור לכתובת הדוא"ל שהזנתם. טענו את הקישור בדפדפן שלכם כדי לאשר שכתובת הדוא"ל תקפה.',
+'confirmemail_pending'    => '<div class="error">קוד אישור דוא"ל כבר נשלח אליכם; אם יצרתם את החשבון לאחרונה, ייתכן שתרצו לחכות מספר דקות עד שיגיע לפני שתנסו לבקש קוד חדש.</div>',
+'confirmemail_send'       => 'שלח קוד אישור',
+'confirmemail_sent'       => 'הדוא"ל עם קוד האישור נשלח.',
+'confirmemail_oncreate'   => 'קוד אישור דוא"ל נשלח לכתובת הדוא"ל שלכם. הקוד הזה אינו נדרש לכניסה, אך תצטרכו לספקו כדי להשתמש בכל תכונה מבוססת דוא"ל באתר זה.',
+'confirmemail_sendfailed' => 'שליחת הדוא"ל עם קוד האישור לא הצליחה. אנא בדקו שאין תווים שגויים בכתובת.
+
+תוכנת הדואר החזירה את ההודעה הבאה: $1',
+'confirmemail_invalid'    => 'קוד האישור שגוי. ייתכן שפג תוקפו.',
+'confirmemail_needlogin'  => 'עליכם לבצע $1 כדי לאמת את כתובת הדוא"ל שלכם.',
+'confirmemail_success'    => 'כתובת הדוא"ל שלכם אושרה. כעת באפשרותכם להיכנס לחשבון שלכם וליהנות מהאתר.',
+'confirmemail_loggedin'   => 'כתובת הדוא"ל שלכם אושרה כעת.',
+'confirmemail_error'      => 'שגיאה בשמירת קוד האישור.',
+'confirmemail_subject'    => 'קוד אישור דוא"ל מ{{grammar:תחילית|{{SITENAME}}}}',
+'confirmemail_body'       => 'מישהו, כנראה אתם (מכתובת ה־IP הזו: $1), רשם את החשבון "$2" עם כתובת הדוא"ל הזו ב{{grammar:תחילית|{{SITENAME}}}}.
+
+כדי לוודא שחשבון זה באמת שייך לכם ולהפעיל את שירותי הדוא"ל באתר, אנא פתחו את הכתובת הבאה בדפדפן שלכם:
+
+$3
+
+אם *לא* אתם ביקשתם קוד אישור זה, אל תפתחו את הקישור. קוד האישור יפקע ב־$4.',
+
+# Inputbox extension, may be useful in other contexts as well
+'tryexact'       => 'מצאו התאמה מדויקת',
+'searchfulltext' => 'חפשו בכל הדף',
+'createarticle'  => 'צרו דף',
+
+# Scary transclusion
+'scarytranscludedisabled' => '[הכללת תבניות בין אתרים מנוטרלת]',
+'scarytranscludefailed'   => '[מצטערים, קבלת התבנית נכשלה בגלל $1]',
+'scarytranscludetoolong'  => '[מצטערים, כתובת ה־URL ארוכה מדי]',
+
+# Trackbacks
+'trackbackbox'      => '<div id="mw_trackbacks">
+טרקבקים לדף זה:<br />
+$1
+</div>',
+'trackbackremove'   => ' ([$1 מחיקה])',
+'trackbacklink'     => 'טרקבק',
+'trackbackdeleteok' => 'הטרקבק נמחק בהצלחה.',
+
+# Delete conflict
+'deletedwhileediting' => 'אזהרה: דף זה נמחק לאחר שהתחלתם לערוך!',
+'confirmrecreate'     => "המשתמש [[{{ns:user}}:$1|$1]] ([[{{ns:user_talk}}:$1|שיחה]]) מחק את הדף לאחר שהתחלת לערוך אותו, מסיבה זו:
+:'''$2'''
+אנא אשרו שאתם אכן רוצים ליצור מחדש את הדף.",
+'recreate'            => 'צור מחדש',
+
+'unit-pixel' => 'px',
+
+# HTML dump
+'redirectingto' => 'מפנה ל־[[$1]]…',
+
+# action=purge
+'confirm_purge'        => 'לנקות את המטמון של דף זה?
+
+$1',
+'confirm_purge_button' => 'אישור',
+
+'youhavenewmessagesmulti' => 'יש לך הודעות חדשות ב־$1',
+
+'searchcontaining' => "חפש דפים המכילים את הטקסט '''$1'''.",
+'searchnamed'      => "חפש דפים בשם '''$1'''.",
+'articletitles'    => "חפש דפים המתחילים עם '''$1'''",
+'hideresults'      => 'הסתר תוצאות',
+
+# DISPLAYTITLE
+'displaytitle' => '(קשרו לדף זה בשם [[$1]])',
+
+'loginlanguagelabel' => 'שפה: $1',
+
+# Multipage image navigation
+'imgmultipageprev'   => '&rarr; לדף הקודם',
+'imgmultipagenext'   => 'לדף הבא &larr;',
+'imgmultigo'         => 'עבור!',
+'imgmultigotopre'    => 'עבור לדף',
+'imgmultiparseerror' => 'קובץ התמונה פגום או שגוי, ולפיכך אין אפשרות לקבל רשימת דפים.',
+
+# Table pager
+'ascending_abbrev'         => 'עולה',
+'descending_abbrev'        => 'יורד',
+'table_pager_next'         => 'הדף הבא',
+'table_pager_prev'         => 'הדף הקודם',
+'table_pager_first'        => 'הדף הראשון',
+'table_pager_last'         => 'הדף האחרון',
+'table_pager_limit'        => 'הצג $1 פריטים בדף',
+'table_pager_limit_submit' => 'עבור',
+'table_pager_empty'        => 'ללא תוצאות',
+
+# Auto-summaries
+'autosumm-blank'   => 'מסיר את כל התוכן מדף זה',
+'autosumm-replace' => "מחליף את הדף עם '$1'",
+'autoredircomment' => 'הפניה לדף [[$1]]', # This should be changed to the new naming convention, but existed beforehand
+'autosumm-new'     => 'דף חדש: $1',
+
+# Size units
+'size-bytes'     => '$1 בייט',
+'size-kilobytes' => '$1 קילו־בייט',
+'size-megabytes' => '$1 מגה־בייט',
+'size-gigabytes' => "$1 ג'יגה־בייט",
+
+# Live preview
+'livepreview-loading' => 'בטעינה…',
+'livepreview-ready'   => 'בטעינה… נטען!',
+'livepreview-failed'  => 'התצוגה המקדימה החיה נכשלה!
+נסו להשתמש בתצוגה מקדימה רגילה.',
+'livepreview-error'   => 'ההתחברות נכשלה: $1 "$2"
+נסו להשתמש בתצוגה מקדימה רגילה.',
+
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesHi.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesHi.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesHi.php	(revision 1280)
@@ -0,0 +1,121 @@
+<?php
+
+$namespaceNames = array(
+	NS_MEDIA          => 'Media',
+	NS_SPECIAL        => 'विशेष',
+	NS_MAIN           => '',
+	NS_TALK           => 'वार्ता',
+	NS_USER           => 'सदस्य',
+	NS_USER_TALK      => 'सदस्य_वार्ता',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK   => '$1_वार्ता',
+	NS_IMAGE          => 'चित्र',
+	NS_IMAGE_TALK     => 'चित्र_वार्ता',
+	NS_MEDIAWIKI      => 'MediaWiki',
+	NS_MEDIAWIKI_TALK => 'MediaWiki_talk',
+	NS_TEMPLATE       => 'साँचा',
+	NS_TEMPLATE_TALK  => 'साँचा_वार्ता',
+	NS_CATEGORY       => 'श्रेणी',
+	NS_CATEGORY_TALK  => 'श्रेणी_वार्ता',
+);
+
+$digitTransformTable = array(
+	"0" => "०",
+	"1" => "१",
+	"2" => "२",
+	"3" => "३",
+	"4" => "४",
+	"5" => "५",
+	"6" => "६",
+	"7" => "७",
+	"8" => "८",
+	"9" => "९"
+);
+$linkTrail = "/^([a-z]+)(.*)\$/sD";
+
+
+$messages = array(
+# Dates
+'sunday'    => 'रविवार',
+'monday'    => 'सोमवार',
+'tuesday'   => 'मंगलवार',
+'wednesday' => 'बुधवार',
+'thursday'  => 'गुरुवार',
+'friday'    => 'शुक्रवार',
+'saturday'  => 'शनिवार',
+'january'   => 'जनवरी',
+'february'  => 'फरवरी',
+'march'     => 'मार्च',
+'april'     => 'अप्रैल',
+'may_long'  => 'मई',
+'june'      => 'जून',
+'july'      => 'जुलाई',
+'august'    => 'अगस्त',
+'september' => 'सितम्बर',
+'october'   => 'अक्टूबर',
+'november'  => 'नवम्बर',
+'december'  => 'दिसम्बर',
+'jan'       => 'जनवरी',
+'feb'       => 'फरवरी',
+'mar'       => 'मार्च',
+'apr'       => 'अप्रैल',
+'may'       => 'मई',
+'jun'       => 'जून',
+'jul'       => 'जुलाई',
+'aug'       => 'अगस्त',
+'sep'       => 'सितम्बर',
+'oct'       => 'अक्टूबर',
+'nov'       => 'नवम्बर',
+'dec'       => 'दिसम्बर',
+
+'about'  => 'अबाउट',
+'mypage' => 'मेरा पृष्ठ',
+'mytalk' => 'मेरी बातें',
+
+'returnto'          => 'लौटें $1.',
+'help'              => 'सहायता',
+'search'            => 'खोज',
+'searchbutton'      => 'खोज',
+'go'                => 'जायें',
+'searcharticle'     => 'जायें',
+'editthispage'      => 'इस पृष्ठ को बदलें',
+'deletethispage'    => 'इस पृष्ठ को हटायें',
+'protectthispage'   => 'इस पृष्ठ को सुरक्षित करें',
+'unprotectthispage' => 'इस पृष्ठ को असुरक्षित करें',
+'newpage'           => 'नया पृष्ठ',
+'talkpage'          => 'इस पृष्ठ के बारे में बात करें',
+'articlepage'       => 'लेख देखें',
+'userpage'          => 'सदस्य पृष्ठ देखें',
+'projectpage'       => 'मेटा पृष्ठ देखें',
+'imagepage'         => 'चित्र पृष्ठ देखें',
+'viewtalkpage'      => 'चर्चा देखें',
+'otherlanguages'    => 'अन्य भाषायें',
+'redirectedfrom'    => '($1 से भेजा गया)',
+'lastmodifiedat'    => 'अन्तिम परिवर्तन $2, $1.', # $1 date, $2 time
+'viewcount'         => 'यह पृष्ठ $1 बार देखा गया है',
+'protectedpage'     => 'सुरक्षित पृष्ठ',
+
+# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
+'aboutsite' => '{{SITENAME}} के बारे में',
+'aboutpage' => '{{ns:project}}:अबाउट',
+'helppage'  => '{{ns:project}}:सहायता',
+'mainpage'  => 'मुख्य पृष्ठ',
+
+'retrievedfrom' => '"$1" से लिया गया',
+
+# Main script and global functions
+'nosuchaction'      => 'ऐसा कोई कार्य नहीं है',
+'nosuchactiontext'  => '{{SITENAME}} सौफ़्टवेयर में इस URL द्वारा निर्धारित कोई क्रिया नही है',
+'nosuchspecialpage' => 'ऐसा कोई विशेष पृष्ठ नहीं है',
+'nospecialpagetext' => 'आपने ऐसा विशेष पृष्ठ मांगा है जो {{SITENAME}} सौफ़्टवेयर में नहीं है.',
+
+# Login and logout pages
+'welcomecreation'   => "<h2>स्वागतम्‌, $1!</h2><p>आपका अकाउन्ट बना दिया गया है.
+Don't forget to personalize your {{SITENAME}} preferences.",
+'yourname'          => 'आपका नाम',
+'yourpassword'      => 'आपका पासवर्ड',
+'yourpasswordagain' => 'पासवर्ड दुबारा लिखें',
+
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesHr.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesHr.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesHr.php	(revision 1280)
@@ -0,0 +1,1600 @@
+<?php
+/** Croatian (hrvatski)
+  *
+  * @addtogroup Language
+  */
+
+$skinNames = array(
+	'standard'  => 'Standardna',
+	'nostalgia'  => 'Nostalgija',
+	'cologneblue'  => 'Kölnska plava',
+	'smarty'  => 'Paddington',
+	'montparnasse'  => 'Montparnasse',
+	'davinci'  => 'DaVinci',
+	'mono'   => 'Mono',
+	'monobook'  => 'MonoBook',
+	'myskin'  => 'MySkin',
+	'chick'  => 'Chick'
+);
+
+$namespaceNames = array(
+	NS_MEDIA           => 'Mediji',
+	NS_SPECIAL         => 'Posebno',
+	NS_MAIN            => '',
+	NS_TALK            => 'Razgovor',
+	NS_USER            => 'Suradnik',
+	NS_USER_TALK       => 'Razgovor_sa_suradnikom',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK    => 'Razgovor_$1',
+	NS_IMAGE           => 'Slika',
+	NS_IMAGE_TALK      => 'Razgovor_o_slici',
+	NS_MEDIAWIKI       => 'MediaWiki',
+	NS_MEDIAWIKI_TALK  => 'MediaWiki_razgovor',
+	NS_TEMPLATE        => 'Predložak',
+	NS_TEMPLATE_TALK   => 'Razgovor_o_predlošku',
+	NS_HELP            => 'Pomoć',
+	NS_HELP_TALK       => 'Razgovor_o_pomoći',
+	NS_CATEGORY        => 'Kategorija',
+	NS_CATEGORY_TALK   => 'Razgovor_o_kategoriji'
+);
+
+$datePreferences = false;
+$defaultDateFormat = 'dmy';
+$dateFormats = array(
+	'dmy time' => 'H:i',
+	'dmy date' => 'j. F Y.',
+	'dmy both' => 'H:i, j. F Y.',
+);
+
+$separatorTransformTable = array(',' => '.', '.' => ',' );
+$fallback8bitEncoding = 'iso-8859-2';
+$linkTrail = '/^([čšžćđßa-z]+)(.*)$/sDu';
+
+
+$messages = array(
+'tog-underline'         => 'Podcrtane poveznice',
+'tog-highlightbroken'   => 'Istakni prazne poveznice drugom bojom (inače, upitnikom na kraju).',
+'tog-justify'           => 'Poravnaj odlomke i zdesna',
+'tog-hideminor'         => 'Sakrij manje izmjene na stranici "Nedavne promjene"',
+'tog-usenewrc'          => 'Poboljšan izgled Nedavnih promjena (nije za sve preglednike)',
+'tog-numberheadings'    => 'Automatski označi naslove brojevima',
+'tog-showtoolbar'       => 'Prikaži traku s alatima za uređivanje',
+'tog-editondblclick'    => 'Dvoklik otvara uređivanje stranice (JavaScript)',
+'tog-editsection'       => 'Prikaži poveznice za uređivanje pojedinih odlomaka',
+'tog-editsectiononrightclick'=> 'Pritiskom na desnu tipku miša otvori uređivanje pojedinih odlomaka (JavaScript)',
+'tog-showtoc'           => 'U člancima s više od tri odlomka prikaži tablicu sadržaja.',
+'tog-rememberpassword'  => 'Zapamti lozinku između prijava',
+'tog-editwidth'         => 'Okvir za uređivanje zauzima cijelu širinu',
+'tog-watchcreations'    => 'Dodaj članke koje kreiram na moju listu praćenja',
+'tog-watchdefault'      => 'Postavi sve nove i izmijenjene stranice u popis praćenja',
+'tog-minordefault'      => 'Normalno označavaj sve moje izmjene kao manje',
+'tog-previewontop'      => 'Prikaži kako će stranica izgledati iznad okvira za uređivanje',
+'tog-previewonfirst'    => 'Prikaži kako će stranica izgledati čim otvorim uređivanje',
+'tog-nocache'           => 'Isključi međuspremnik (cache) stranica.',
+'tog-enotifwatchlistpages'=> 'Pošalji mi e-mail kod izmjene stranice u popisu praćenja',
+'tog-enotifusertalkpages'=> 'Pošalji mi e-mail kod izmjene moje stranice za razgovor',
+'tog-enotifminoredits'  => 'Pošalji mi e-mail i kod manjih izmjena',
+'tog-enotifrevealaddr'  => 'Prikaži moju e-mail adresu u obavijestima o izmjeni',
+'tog-shownumberswatching'=> 'Prikaži broj suradnika koji prate stranicu (u nedavnim izmjenama, popisu praćenja i samim člancima)',
+'tog-fancysig'          => 'Običan potpis (bez automatske poveznice)',
+'tog-externaleditor'    => 'Uvijek koristi vanjski editor',
+'tog-externaldiff'      => 'Uvijek koristi vanjski program za usporedbu',
+'tog-showjumplinks'     => 'Uključi pomoćne poveznice "Skoči na"',
+'tog-uselivepreview'    => 'Uključi trenutačni pretpregled (JavaScript) (eksperimentalno)',
+'tog-autopatrol'        => 'Označi moje promjena več provjerenima',
+'tog-forceeditsummary'  => 'Podsjeti me ako sažetak uređivanja ostavljam praznim',
+'underline-always'      => 'Uvijek',
+'underline-never'       => 'Nikad',
+'underline-default'     => 'Prema postavkama preglednika',
+'skinpreview'           => '(Pregled)',
+'sunday'                => 'nedjelja',
+'monday'                => 'ponedjeljak',
+'tuesday'               => 'utorak',
+'wednesday'             => 'srijeda',
+'thursday'              => 'četvrtak',
+'friday'                => 'petak',
+'saturday'              => 'subota',
+'january'               => 'siječnja',
+'february'              => 'veljače',
+'march'                 => 'ožujka',
+'april'                 => 'travnja',
+'may_long'              => 'svibnja',
+'june'                  => 'lipnja',
+'july'                  => 'srpnja',
+'august'                => 'kolovoza',
+'september'             => 'rujna',
+'october'               => 'listopada',
+'november'              => 'studenog',
+'december'              => 'prosinca',
+'jan'                   => 'sij',
+'feb'                   => 'velj',
+'mar'                   => 'ožu',
+'apr'                   => 'tra',
+'may'                   => 'svi',
+'jun'                   => 'lip',
+'jul'                   => 'srp',
+'aug'                   => 'kol',
+'sep'                   => 'ruj',
+'oct'                   => 'lis',
+'nov'                   => 'stu',
+'dec'                   => 'pro',
+'categories'            => 'Kategorije',
+'pagecategories'        => '{{PLURAL:$1|Kategorija|Kategorije}}',
+'category_header'       => 'Članci u kategoriji "$1"',
+'subcategories'         => 'Potkategorije',
+'mainpage'              => 'Glavna stranica',
+'mainpagetext'          => 'Softver Wiki je uspješno instaliran.',
+'mainpagedocfooter'     => 'Pogledajte [http://meta.wikimedia.org/wiki/MediaWiki_i18n dokumentaciju o prilagodbi sučelja]
+i [http://meta.wikimedia.org/wiki/MediaWiki_User%27s_Guide Vodič za suradnike] za pomoć pri uporabi i podešavanju.',
+'portal'                => 'Portal zajednice',
+'about'                 => 'O',
+'aboutsite'             => 'O projektu {{SITENAME}}',
+'aboutpage'             => 'Project:O_projektu_{{SITENAME}}',
+'article'               => 'Članak',
+'help'                  => 'Pomoć',
+'helppage'              => 'Project:Pomoć',
+'bugreports'            => 'Poruke o programskim greškama',
+'bugreportspage'        => 'Project:Poruke_o_programskim_greškama',
+'sitesupport'           => 'Novčani prilozi',
+'faq'                   => 'Najčešća pitanja',
+'faqpage'               => '{{ns:project}}:FAQ',
+'edithelp'              => 'Kako uređivati stranicu',
+'newwindow'             => '(otvara se u novom prozoru)',
+'edithelppage'          => '{{ns:project}}:Kako_uređivati_stranicu',
+'cancel'                => 'Odustani',
+'qbfind'                => 'Nađi',
+'qbbrowse'              => 'Pregledaj',
+'qbedit'                => 'Uredi',
+'qbpageoptions'         => 'Postavke stranice',
+'qbpageinfo'            => 'O stranici',
+'qbmyoptions'           => 'Moje stranice',
+'qbspecialpages'        => 'Posebne stranice',
+'moredotdotdot'         => 'Više...',
+'mypage'                => 'Moja stranica',
+'mytalk'                => 'Moj razgovor',
+'anontalk'              => 'Razgovor za ovu IP adresu',
+'navigation'            => 'Orijentacija',
+'currentevents'         => 'Aktualno',
+'disclaimers'           => 'Odricanje od odgovornosti',
+'disclaimerpage'        => '{{ns:4}}:General_disclaimer',
+'privacy'               => 'Zaštita privatnosti',
+'errorpagetitle'        => 'Greška',
+'returnto'              => 'Vrati se na $1.',
+'tagline'               => 'Izvor: {{SITENAME}}',
+'search'                => 'Traži',
+'searchbutton'          => 'Traži',
+'go'                    => 'Kreni',
+'searcharticle'                    => 'Kreni',
+'history'               => 'Stare izmjene',
+'history_short'         => 'Stare izmjene',
+'updatedmarker'         => 'obnovljeno od zadnjeg posjeta',
+'info_short'            => 'Informacija',
+'printableversion'      => 'Verzija za ispis',
+'permalink'             => 'Trajna poveznica',
+'print'                 => 'Ispiši',
+'edit'                  => 'Uredi',
+'editthispage'          => 'Uredi ovu stranicu',
+'delete'                => 'Izbriši',
+'deletethispage'        => 'Izbriši ovu stranicu',
+'undelete_short'        => 'Vrati $1 uređivanja',
+'protect'               => 'Zaštiti',
+'protectthispage'       => 'Zaštiti ovu stranicu',
+'unprotect'             => 'Ukloni zaštitu',
+'unprotectthispage'     => 'Ukloni zaštitu s ove stranice',
+'newpage'               => 'Nova stranica',
+'talkpage'              => 'Razgovor o ovoj stranici',
+'specialpage'           => 'Posebna stranica',
+'personaltools'         => 'Osobni alati',
+'postcomment'           => 'Napiši komentar',
+'articlepage'           => 'Vidi članak',
+'talk'                  => 'Razgovor',
+'views'                 => 'Pogledi',
+'toolbox'               => 'Traka s alatima',
+'userpage'              => 'Vidi suradnikovu stranicu',
+'projectpage'           => 'Vidi stranicu o projektu',
+'imagepage'             => 'Vidi stranicu slike',
+'viewtalkpage'          => 'Vidi razgovor',
+'otherlanguages'        => 'Drugi jezici',
+'redirectedfrom'        => '(Preusmjereno s $1)',
+'redirectpagesub'       => 'Preusmjeravanje',
+'lastmodifiedat'          => 'Datum zadnje promjene na ovoj stranici: $2, $1',
+'viewcount'             => 'Ova stranica je pogledana $1 puta.',
+'copyright'             => 'Sadržaji se koriste u skladu s $1.',
+'protectedpage'         => 'Zaštićena stranica',
+'jumpto'                => 'Skoči na:',
+'jumptonavigation'      => 'orijentacija',
+'jumptosearch'          => 'traži',
+'badaccess'             => 'Greška u ovlaštenjima',
+'versionrequired'       => 'Potrebna inačica $1 MediaWikija',
+'versionrequiredtext'   => 'Za korištenje ove stranice potrebna je inačica $1 MediaWiki softvera. Pogledaj [[Special:Version]]',
+'ok'                    => 'U redu',
+'retrievedfrom'         => 'Dobavljeno iz "$1"',
+'youhavenewmessages'    => 'Imate $1 ($2).',
+'newmessageslink'       => 'nove poruke',
+'newmessagesdifflink'   => 'zadnja promjena na stranici za razgovor',
+'editsection'           => 'uredi',
+'editold'               => 'uredi',
+'editsectionhint'       => 'Uređivanje odlomka: $1',
+'toc'                   => 'Sadržaj',
+'showtoc'               => 'prikaži',
+'hidetoc'               => 'sakrij',
+'thisisdeleted'         => 'Vidi ili vrati $1?',
+'viewdeleted'           => 'Vidi $1?',
+'restorelink'           => '$1 pobrisanih izmjena',
+'nstab-main'            => 'Članak',
+'nstab-user'            => 'Stranica suradnika',
+'nstab-media'           => 'Mediji',
+'nstab-special'         => 'Posebno',
+'nstab-project'         => 'Stranica o projektu',
+'nstab-image'           => 'Slika',
+'nstab-mediawiki'       => 'Poruka',
+'nstab-template'        => 'Predložak',
+'nstab-help'            => 'Pomoć',
+'nstab-category'        => 'Kategorija',
+'nosuchaction'          => 'Nema takve naredbe',
+'nosuchactiontext'      => 'Navedeni URL označava
+nepostojeću naredbu',
+'nosuchspecialpage'     => 'Posebna stranica ne postoji',
+'nospecialpagetext'     => 'Takva posebna stranica ne postoji.',
+'error'                 => 'Greška',
+'databaseerror'         => 'Greška baze podataka',
+'dberrortext'           => 'Došlo je do sintaksne pogreške s upitom bazi.
+Možda se radi o bugu u softveru.
+Posljednji pokušaj upita je glasio:
+<blockquote><tt>$1</tt></blockquote>
+iz funkcije "<tt>$2</tt>".
+MySQL je vratio pogrešku "<tt>$3: $4</tt>".',
+'dberrortextcl'         => 'Došlo je do sintaksne pogreške s upitom bazi.
+Možda se radi o bugu u softveru.
+Posljednji pokušaj upita je glasio:
+"$1"
+iz funkcije "<tt>$2</tt>".
+MySQL je vratio pogrešku "<tt>$3: $4</tt>".',
+'noconnect'             => 'Oprostite! Wiki trenutno ima tehničkih problema i ne može se povezati s bazom podataka. $1',
+'nodb'                  => 'Nije bilo moguće odabrati bazu podataka $1',
+'cachederror'           => 'Ova je verzija stranice iz međuspremnika i možda ne sadrži sve promjene.',
+'laggedslavemode'       => 'Upozorenje: na stranici se možda ne nalaze najnovije promjene.',
+'readonly'              => 'Baza podataka je zaključana',
+'enterlockreason'       => 'Upiši razlog zaključavanja i procjenu vremena otključavanja',
+'readonlytext'          => 'Baza podataka je trenutno zaključana, nije ju moguće uređivati ili mijenjati. Ovo je obično pokazatelj tekućeg redovitog održavanja. Nakon što se potonja privremena akcija završi, baza podataka će se vratiti u uobičajeno stanje.
+
+Administrator koji je izvršio zaključavanje naveo je ovaj razlog: $1',
+'missingarticle'        => 'U bazi podataka nije pronađena stranica "$1" koja je trebala biti pronađena.
+
+Ovo se najčešće događa zbog poveznice na zastarjelu usporedbu ili staru promjenu stranice koja je u međuvremenu izbrisana.
+
+Ako to nije slučaj, možda se radi o softverskoj grešci. Molimo da u tom slučaju pošaljete poruku administratoru navodeći URL.',
+'readonly_lag'          => 'Baza podataka je automatski zaključana dok se sekundarni bazni poslužitelji ne usklade s glavnim',
+'internalerror'         => 'Greška sustava',
+'filecopyerror'         => 'Ne mogu kopirati datoteku "$1" u "$2".',
+'filerenameerror'       => 'Ne mogu preimenovati datoteku "$1" u "$2".',
+'filedeleteerror'       => 'Ne mogu obrisati datoteku "$1".',
+'filenotfound'          => 'Datoteka "$1" nije nađena.',
+'unexpected'            => 'Neočekivana vrijednost: "$1"="$2".',
+'formerror'             => 'Greška: Ne mogu poslati podatke',
+'badarticleerror'       => 'Ovu radnju nije moguće izvesti s tom stranicom.',
+'cannotdelete'          => 'Ne mogu obrisati navedenu stranicu ili sliku. (Moguće da je već obrisana.)',
+'badtitle'              => 'Loš naslov',
+'badtitletext'          => 'Navedeni naslov stranice nepravilan ili loše formirana interwiki poveznica.',
+'perfdisabled'          => 'Privremeno onemogućeno. Koristite kopiju snimljenu $1:',
+'perfdisabledsub'       => 'Ovo je snimljena kopija $1:',
+'perfcached'            => 'Sljedeći podaci su iz međuspremnika i možda nisu najsvježiji:',
+'wrong_wfQuery_params'  => 'Neispravni parametri poslani u wfQuery()<br />
+Funkcija: $1<br />
+Upit: $2',
+'viewsource'            => 'Vidi izvornik',
+'viewsourcefor'         => 'za $1',
+# problem with link: [[{{ns:4}}:Protected page|Zaštićena stranica]]
+'protectedtext'         => 'Ova je stranica zaključana čime je onemogućeno njeno uređivanje; za ovo postoji nekoliko mogućih razloga, molim pogledajte članak [[{{ns:4}}:Protected page|Zaštićena stranica]].
+
+Možete pogledati izvorni kod ove stranice i kopirati ga:',
+'sqlhidden'             => '(SQL upit sakriven)',
+'logouttitle'           => 'Odjava suradnika',
+'logouttext'            => 'Odjavili ste se.<br />
+Možete nastaviti s korištenjem projekta {{SITENAME}} anonimno,
+ili se možete ponovo prijaviti pod istim ili drugim imenom. Neke se stranice mogu
+prikazivati kao da ste još uvijek prijavljeni, sve dok ne očistite međuspremnik svog preglednika.',
+'welcomecreation'       => '== Dobrodošli, $1! ==
+
+Vaš je suradnički račun otvoren. Ne zaboravite podesiti korisničke postavke.',
+'loginpagetitle'        => 'Prijava suradnika',
+'yourname'              => 'Suradničko ime',
+'yourpassword'          => 'Upišite lozinku',
+'yourpasswordagain'     => 'Ponovno upišite lozinku',
+'remembermypassword'    => 'Trajno zapamti moju lozinku.',
+'yourdomainname'        => 'Vaša domena',
+'externaldberror'       => 'Došlo je do greške s vanjskom autorizacijom ili vam nije dozvoljeno osvježavanje vanjskog suradničkog računa.',
+'loginproblem'          => '<b>Došlo je do greške s vašom prijavom.</b><br />Pokušajte iznova!',
+'alreadyloggedin'       => '<strong>Suradniče $1, već ste prijavljeni!</strong><br />',
+'login'                 => 'Prijavi se',
+'loginprompt'           => 'Za prijavu na sustav {{SITENAME}} morate u pregledniku uključiti kolačiće (cookies).',
+'userlogin'             => 'Prijavi se',
+'logout'                => 'Odjavi se',
+'userlogout'            => 'Odjavi se',
+'notloggedin'           => 'Niste prijavljeni',
+'nologin'               => 'Nemate suradničko ime? $1.',
+'nologinlink'           => 'Otvorite račun',
+'createaccount'         => 'Otvori novi suradnički račun',
+'gotaccount'            => 'Već imate suradnički račun? $1.',
+'gotaccountlink'        => 'Prijavite se',
+'createaccountmail'     => 'poštom',
+'badretype'             => 'Unesene lozinke nisu istovjetne.',
+'userexists'            => 'Uneseno suradničko ime već je u upotrebi. Unesite neko drugo ime.',
+'youremail'             => 'Vaša elektronska pošta *',
+'username'              => 'Suradničko ime:',
+'uid'                   => 'Suradnički ID-broj:',
+'yourrealname'          => 'Pravo ime (nije obvezno)*',
+'yournick'              => 'Vaš nadimak (za potpisivanje)',
+'badsig'                => 'Kôd vašeg potpisa nije valjan; provjerite HTML tagove.',
+'email'                 => 'Adresa elektronske pošte *',
+'prefs-help-email-enotif'=> 'Ova će se adresa koristiti i za slanje izvješća o promjenama u wikiju, ako ih uključite.',
+'prefs-help-realname'   => '* Pravo ime (nije obvezno): za pravnu atribuciju vaših doprinosa.',
+'loginerror'            => 'Greška u prijavi',
+'prefs-help-email'      => '* E-mail (nije obvezno): Omogućuje drugima da vas kontaktiraju na suradničkoj stranici ili stranici za razgovor bez javnog otkrivanja vaše e-mail adrese.
+Također, ako zaboravite lozinku možemo vam na ovu adresu poslati novu, privremenu.',
+'nocookiesnew'          => 'Suradnički račun je otvoren, ali niste uspješno prijavljeni. Naime, {{SITENAME}} koristi kolačiće (\'\'cookies\'\') u procesu prijave. Isključili ste kolačiće. Molim uključite ih i pokušajte ponovo s vašim novim imenom i lozinkom.',
+'nocookieslogin'        => '{{SITELOGIN}} koristi kolačiće (\'\'cookies\'\') u procesu prijave. Isključili ste kolačiće. Molim uključite ih i pokušajte ponovo.',
+'noname'                => 'Niste unijeli valjano suradničko ime.',
+'loginsuccesstitle'     => 'Prijava uspješna',
+'loginsuccess'          => 'Prijavili ste se na wiki kao "$1".',
+'nosuchuser'            => 'Ne postoji suradnik s imenom "$1". Provjerite jeste li točno utipkali, ili otvorite novi suradnički račun koristeći donji obrazac.',
+'nosuchusershort'       => 'Ne postoji suradnik s imenom "$1". Provjerite vaš unos.',
+'wrongpassword'         => 'Lozinka koju ste unijeli nije ispravna. Pokušajte ponovno.',
+'wrongpasswordempty'    => 'Niste unijeli lozinku. Pokušajte ponovno.',
+'mailmypassword'        => 'Pošalji mi novu lozinku',
+'passwordremindertitle' => '{{SITENAME}}: nova lozinka.',
+'passwordremindertext'  => 'Netko je (vjerojatno vi, s IP adrese $1)
+zatražio da vam pošaljemo novu lozinku za sustav {{SITENAME}} ($4).
+Lozinka za suradnika "$2" je postavljena na "$3".
+Molimo vas da se odmah prijavite i promijenite lozinku.
+
+Ukoliko niste zatražili novu lozinku, ili ste se sjetili stare lozinke i
+više ju ne želite promijeniti, slobodno zanemarite ovu poruku i nastavite
+koristiti staru lozinku.',
+'noemail'               => 'Suradnik "$1" nema zapisanu e-mail adresu.',
+'passwordsent'          => 'Nova je lozinka poslana na e-mail adresu suradnika "$1"',
+'eauthentsent'          => 'Na navedenu adresu poslan je e-mail s potvrdom. Prije nego što pošaljemo daljnje poruke,
+molimo vas da otvorite e-mail i slijedite u njemu sadržana uputstva.',
+'mailerror'             => 'Greška pri slanju e-maila: $1',
+'acct_creation_throttle_hit'=> 'Nažalost, ne možete otvoriti nove suradničke račune. Već ste otvorili $1.',
+'emailauthenticated'    => 'Vaša e-mail adresa je ovjerena $1.',
+'emailnotauthenticated' => 'Vaša e-mail adresa još nije ovjerena.
+Ne možemo poslati e-mail ni u jednoj od sljedećih naredbi.',
+'noemailprefs'          => '<strong>Nije navedena e-mail adresa</strong>, stoga sljedeće naredbe neće raditi.',
+'emailconfirmlink'      => 'Potvrdite svoju e-mail adresu',
+'invalidemailaddress'   => 'Ne mogu prihvatiti e-mail adresu jer nije valjano oblikovana.
+Molim unesite ispravno oblikovanu adresu ili ostavite polje praznim.',
+'bold_sample'           => 'Podebljani tekst',
+'bold_tip'              => 'Podebljani tekst',
+'italic_sample'         => 'Kurzivni tekst',
+'italic_tip'            => 'Kurzivni tekst',
+'link_sample'           => 'Tekst poveznice',
+'link_tip'              => 'Unutarnja poveznica',
+'extlink_sample'        => 'http://www.primjer.hr Tekst poveznice',
+'extlink_tip'           => 'Vanjska poveznica (pazi, nužan je prefiks http://)',
+'headline_sample'       => 'Tekst naslova',
+'headline_tip'          => 'Podnaslov',
+'math_sample'           => 'Ovdje unesi formulu',
+'math_tip'              => 'Matematička formula (LaTeX)',
+'nowiki_sample'         => 'Ovdje unesite neoblikovani tekst',
+'nowiki_tip'            => 'Neoblikovani tekst',
+'image_sample'          => 'Primjer.jpg',
+'image_tip'             => 'Uložena slika',
+'media_sample'          => 'Primjer.ogg',
+'media_tip'             => 'Uloženi medij',
+'sig_tip'               => 'Vaš potpis s datumom',
+'hr_tip'                => 'Vodoravna crta (koristiti rijetko)',
+'summary'               => 'Sažetak',
+'subject'               => 'Predmet',
+'minoredit'             => 'Ovo je manja promjena',
+'watchthis'             => 'Prati ovaj članak',
+'savearticle'           => 'Sačuvaj stranicu',
+'preview'               => 'Pregled kako će stranica izgledati',
+'showpreview'           => 'Prikaži kako će izgledati',
+'showlivepreview'       => 'Pregled kako će izgledati, uživo',
+'showdiff'              => 'Prikaži promjene',
+'anoneditwarning'       => '\'\'\'Upozorenje:\'\'\' Niste prijavljeni pod suradničkim imenom. Vaša IP adresa bit će zabilježena u popisu izmjena ove stranice.',
+'missingsummary'        => '\'\'\'Napomena:\'\'\' Niste unijeli sažetak promjena. Ako ponovno kliknete na \'Sačuvaj\', vaše će promjene biti snimljene bez sažetka.',
+'missingcommenttext'    => 'Molim unesite sažetak.',
+'blockedtitle'          => 'Suradnik je blokiran',
+'blockedtext'           => 'Vaše suradničko ime ili IP adresu blokirao je administrator $1.
+Razlog je:<br />\'\'$2\'\'
+
+Ako želite raspraviti blokiranje
+javite se administratoru $1 ili nekom drugom [[{{MediaWiki:grouppage-sysop}}|administratoru]].
+
+Ne možete se koristiti naredbom "piši suradniku" ako niste
+registrirali valjanu e-mail adresu u svojim [[Special:Preferences|postavkama]].
+
+Vaša IP adresa je $3. Molimo vas da je spomenete u porukama o ovom predmetu.',
+'grouppage-sysop'       => 'Project:Administrators',
+'whitelistedittitle'    => 'Za uređivanje stranice morate se prijaviti',
+'whitelistedittext'     => 'Za uređivanje stranice morate se $1.',
+'whitelistreadtitle'    => 'Za čitanje stranice morate se prijaviti',
+'whitelistreadtext'     => 'Za čitanje stranice morate se [[Special:Userlogin|prijaviti]].',
+'whitelistacctitle'     => 'Ne možete otvoriti suradnički račun',
+'whitelistacctext'      => 'Da biste otvarali suradničke račune na ovom wikiju morate se [[Special:Userlogin|prijaviti]] i posjedovati odgovarajuća ovlaštenja.',
+'confirmedittitle'      => 'Ovjera e-mail adrese nužna za uređivanje',
+'confirmedittext'       => 'Morate ovjeriti vašu e-mail adresu prije nego što vam bude omogućeno uređivanje. Molim unesite i ovjerite vašu e-mail adresu u [[Special:Preferences|suradničkim postavkama]].',
+'loginreqtitle'         => 'Nužna prijava',
+'loginreqlink'          => 'prijava',
+'loginreqpagetext'      => 'Morate se $1 da biste vidjeli ostale stranice.',
+'accmailtitle'          => 'Lozinka poslana.',
+'accmailtext'           => 'Lozinka za suradnika \'$1\' poslana je na adresu $2.',
+'newarticle'            => '(Novo)',
+'newarticletext'        => 'Došli ste na stranicu koja još nema sadržaja.<br />
+*Ako želite unijeti sadržaj, počnite tipkati u prozor ispod ovog teksta.
+*Ako vam treba pomoć, idite na [[{{MediaWiki:helppage}}|stranicu za pomoć]].
+*Ako ste ovamo dospjeli slučajno, kliknite "Natrag" (Back) u svom programu.',
+'anontalkpagetext'      => '----\'\'Ovo je stranica za razgovor s anonimnim suradnikom koji nije otvorio suradnički račun ili se njime ne koristi. Zbog toga se moramo služiti brojčanom IP adresom kako bismo ga identificirali. Takvu adresu često koristi više ljudi. Ako ste anonimni suradnik i smatrate da su vam upućeni irelevantni komentari, molimo vas da [[Special:Userlogin|otvorite suradnički račun ili se prijavite]] te tako u budućnosti izbjegnete zamjenu s drugim anonimnim suradnicima.\'\'',
+'noarticletext'         => '(Trenutno na ovoj stranici nema teksta)',
+'clearyourcache'        => '\'\'\'Napomena:\'\'\' Nakon snimanja trebate očistiti međuspremnik svog preglednika kako biste vidjeli promjene.
+\'\'\'Mozilla / Firefox / Safari:\'\'\' držite \'\'Shift\'\' i pritisnite \'\'Reload\'\', ili pritisnite \'\'Ctrl-Shift-R\'\' (\'\'Cmd-Shift-R\'\' na Apple Macu);
+\'\'\'IE:\'\'\' držite \'\'Ctrl\'\' i pritisnite \'\'Refresh\'\', ili pritisnite \'\'Ctrl-F5\'\'; \'\'\'Konqueror:\'\'\': samo pritisnite dugme \'\'Reload\'\' ili pritisnite \'\'F5\'\'; korsnici \'\'\'Opere\'\'\' možda će morati u potpunosti isprazniti međuspremnik u \'\'Tools&rarr;Preferences\'\'.',
+'usercssjsyoucanpreview'=> '<strong>Savjet:</strong> Koristite dugme \'Pokaži kako će izgledati\' za testiranje svog CSS/JS prije snimanja.',
+'usercsspreview'        => '\'\'\'Ne zaboravite: samo isprobavate/pregledavate svoj suradnički CSS, i da još nije snimljen!\'\'\'',
+'userjspreview'         => '\'\'\'Ne zaboravite: samo isprobavate/pregledavate svoj suradnički JavaScript, i da još nije snimljen!\'\'\'',
+'userinvalidcssjstitle' => '\'\'\'Upozorenje:\'\'\' Nema sučelja pod imenom "$1". Ne zaboravite da imena stranica s .css and .js kodom počinju malim slovom, npr. Suradnik:Mate/monobook.css, a ne Suradnik:Mate/Monobook.css.',
+'updated'               => '(Ažurirano)',
+'note'                  => '<strong>Napomena:</strong>',
+'previewnote'           => 'Ne zaboravite da je ovo samo pregled kako će stranica izgledati i da
+stranica još nije snimljena!',
+'session_fail_preview'  => '<strong>Ispričavamo se! Nismo mogli obraditi vašu izmjenu zbog gubitka podataka o prijavi.
+Molimo pokušajte ponovno. Ako i dalje ne bude radilo, pokušajte se odjaviti i ponovno prijaviti.</strong>',
+'previewconflict'       => 'Ovaj pregled odražava stanje u gornjem polju za unos koje će biti sačuvano
+ako pritisnete "Sačuvaj stranicu".',
+'importing'             => 'Uvoz: $1',
+'editing'               => 'Uređujete $1',
+'editinguser'               => 'Uređujete $1',
+'editingsection'        => 'Uređujete $1 (odlomak)',
+'editingcomment'        => 'Uređujete $1 (komentar)',
+'editconflict'          => 'Istovremeno uređivanje: $1',
+'explainconflict'       => 'Netko je u međuvremenu promijenio stranicu. Gornje polje sadrži sadašnji tekst stranice.
+U donjem polju prikazane su vaše promjene. Morat ćete unijeti vaše promjene u sadašnji tekst. <b>Samo</b> će tekst
+u u gornjem polju biti sačuvan kad pritisnete "Snimi stranicu".',
+'yourtext'              => 'Vaš tekst',
+'storedversion'         => 'Pohranjena inačica',
+'nonunicodebrowser'     => '<strong>UPOZORENJE: Vaš preglednik ne podržava Unicode zapis znakova, molim promijenite ga prije sljedećeg uređivanja članaka.</strong>',
+'editingold'            => '<strong>UPOZORENJE: Uređujete stariju inačicu
+ove stranice. Ako je sačuvate, sve će promjene učinjene nakon ove inačice biti izgubljene.</strong>',
+'yourdiff'              => 'Razlike',
+'longpagewarning'       => 'PAŽNJA: Ova stranica je dugačka $1 kilobajta; neki preglednici bi mogli imati problema pri uređivanju stranica koje se približavaju ili su duže od 32 kb.
+Molimo razmislite o rastavljanju stranice na manje odjeljke.',
+'longpageerror'         => '<strong>POGRJEŠKA: Tekst koji ste unijeli dug je $1 kilobajta, što je više od maksimalnih $2 kilobajta. Nije ga moguće snimiti.</strong>',
+'readonlywarning'       => '<strong>UPOZORENJE: Baza podataka je zaključana zbog održavanja, pa trenutno ne možete sačuvati svoje
+promjene. Najbolje je da kopirate i zaljepite tekst u tekstualnu datoteku te je snimite za kasnije.</strong>',
+# problem with link: [[Project:Protected_page_guidelines|smjernice o zaključavanju]]
+'protectedpagewarning'  => '<strong>UPOZORENJE: ova stranica je zaključana i mogu je uređivati samo suradnici s administratorskim pravima. Molimo pogledajte [[Project:Protected_page_guidelines|smjernice o zaključavanju]].</strong>',
+'semiprotectedpagewarning'=> '\'\'\'Napomena:\'\'\' Ovu stranicu mogu uređivati samo prijavljeni suradnici.',
+'templatesused'         => 'Predlošci korišteni na ovoj stranici:',
+'nocreatetitle'         => 'Otvaranje novih stranica ograničeno',
+'nocreatetext'          => 'Na ovom je projektu ograničeno otvaranje novih stranica.
+Možete se vratiti i uređivati već postojeće stranice ili se [[Special:Userlogin|prijaviti ili otvoriti suradnički račun]].',
+'revhistory'            => 'Stare izmjene',
+'nohistory'             => 'Ova stranica nema starijih izmjena.',
+'revnotfound'           => 'Stara izmjena nije nađena.',
+'revnotfoundtext'       => 'Ne mogu pronaći staru izmjenu stranice koju ste zatražili.
+Molimo provjerite URL koji vas je doveo ovamo.',
+'loadhist'              => 'Učitavam stare izmjene',
+'currentrev'            => 'Trenutna inačica',
+'revisionasof'          => 'Inačica od $1',
+'previousrevision'      => '←Starija inačica',
+'nextrevision'          => 'Novija inačica→',
+'currentrevisionlink'   => 'vidi trenutnu inačicu',
+'cur'                   => 'sad',
+'next'                  => 'sljed',
+'last'                  => 'pret',
+'orig'                  => 'izvo',
+'histlegend'            => 'Uputa: (sad) = razlika od trenutne inačice,
+(pret) = razlika od prethodne inačice, m = manja promjena',
+'deletedrev'            => '[izbrisano]',
+'histfirst'             => 'Najstarije',
+'histlast'              => 'Najnovije',
+'rev-deleted-comment'   => '(komentar uklonjen)',
+'rev-deleted-user'      => '(suradničko ime uklonjeno)',
+'rev-deleted-text-permission'=> '<div class="mw-warning plainlinks">
+Ova je izmjena uklonjena iz javnoga arhiva.
+Detalji se vjerojatno nalaze u [{{fullurl:Special:Log/delete|page={{PAGENAMEE}}}} evidenciji brisanja].
+</div>',
+'rev-deleted-text-view' => '<div class="mw-warning plainlinks">
+Ova je izmjena uklonjena iz javnoga arhiva.
+Kao administrator na ovom projektu možete ju vidjeti;
+detalji se vjerojatno nalaze u [{{fullurl:Special:Log/delete|page={{PAGENAMEE}}}} evidenciji brisanja].
+</div>',
+'rev-delundel'          => 'pokaži/skrij',
+'revisiondelete'        => 'Izbriši/vrati izmjene',
+'revdelete-selected'    => 'Odabrane izmjene stranice [[:$1]]:',
+'revdelete-text'        => 'Obrisane će se izmjene i dalje nalaziti u javnom popisu izmjena,
+ali njihov sadržaj neće biti dostupan javnosti.
+
+Drugi administratori ovoga projekta moći će i dalje pristupiti skrivenom sadržaju i
+vratiti ga u javni pristup putem ovog sučelja, osim ako operateri na projektu nisu
+postavili dodatna ograničenja.',
+'revdelete-legend'      => 'Postavi ograničenja na izmjenu:',
+'revdelete-hide-text'   => 'Sakrij tekst izmjene',
+'revdelete-hide-comment'=> 'Sakrij komentar (sažetak)',
+'revdelete-hide-user'   => 'Sakrij suradnikovo ime/IP adresu',
+'revdelete-hide-restricted'=> 'Postavi ograničenja i za administratore kao i za ostale suradnike',
+'revdelete-log'         => 'Komentar za evidenciju:',
+'revdelete-submit'      => 'Izvrši brisanje/sakrivanje',
+'revdelete-logentry'    => 'promijenjena su prava pristupa za stranicu [[$1]]',
+'difference'            => '(Usporedba među inačicama)',
+'loadingrev'            => 'učitavam inačicu za usporedbu',
+'lineno'                => 'Redak $1:',
+'editcurrent'           => 'Uredi trenutnu inačicu ove stranice',
+'selectnewerversionfordiff'=> 'Izaberi noviju inačicu za usporedbu',
+'selectolderversionfordiff'=> 'Izaberi stariju inačicu za usporedbu',
+'compareselectedversions'=> 'Usporedi odabrane inačice',
+'searchresults'         => 'Rezultati pretrage',
+'searchresulttext'      => 'Za više obavijesti o pretraživanju projekta {{SITENAME}} vidi [[{{MediaWiki:helppage}}|{{int:help}}]].',
+'searchsubtitle'           => 'Za upit "[[:$1]]"',
+'searchsubtitleinvalid'           => 'Za upit "$1"',
+'badquery'              => 'Loše oblikovan upit',
+'badquerytext'          => 'Nismo mogli provesti vašu pretragu.
+Razlog je vjerojatno u tome što ste pokušali tražiti riječ kraću od tri
+slova, što još nije moguće.
+Možda ste pogriješili pri upisu pretrage. Pokušajte ponovo.',
+'matchtotals'           => 'Upitu "$1" odgovara $2 naslova stranica i $3 tekstova stranica.',
+'noexactmatch'          => '\'\'\'Ne postoji stranica naziva "$1".\'\'\' Možete [[:$1|kreirati tu stranicu]].',
+'titlematches'          => 'Pronađene stranice prema naslovu',
+'notitlematches'        => 'Nema pronađenih stranica prema naslovu',
+'textmatches'           => 'Pronađene stranice prema tekstu članka',
+'notextmatches'         => 'Nema pronađenih stranica prema tekstu članka',
+'prevn'                 => 'prethodnih $1',
+'nextn'                 => 'sljedećih $1',
+'viewprevnext'          => 'Vidi ($1) ($2) ($3).',
+'showingresults'        => 'Ispod je prikazano <b>$1</b> rezultata, počevši od <b>$2.</b>.',
+'showingresultsnum'     => 'Ispod je prikazano <b>$3</b> počevši s brojem #<b>$2</b>.',
+'nonefound'             => '<b>Napomena</b>: pretrage su neuspješne ako tražite česte riječi koje ne indeksiramo, ili u upitu navedete previše pojmova (u rezultatu se pojavlju samo stranice koje sadrže sve tražene pojmove).',
+'powersearch'           => 'Traženje',
+'powersearchtext'       => '
+Traženje u prostoru :<br />
+$1<br />
+$2 Popis se preusmjerava   Traženje za $3 $9',
+'searchdisabled'        => '<p>Oprostite! Pretraga po cjelokupnoj bazi je zbog bržeg rada projekta {{SITENAME}} trenutno onomogućena. Možete se poslužiti tražilicom Google.</p>',
+'blanknamespace'        => '(Glavni)',
+'preferences'           => 'Postavke',
+'prefsnologin'          => 'Niste prijavljeni',
+'prefsnologintext'      => 'Morate biti [[Special:Userlogin|prijavljeni]]
+za podešavanje korisničkih postavki.',
+'prefsreset'            => 'Postavke su vraćene na prvotne vrijednosti.',
+'qbsettings'            => 'Traka',
+'qbsettings-none'	=> 'Bez',
+'qbsettings-fixedleft'	=> 'Lijevo nepomično',
+'qbsettings-fixedright'	=> 'Desno nepomično',
+'qbsettings-floatingleft'	=> 'Lijevo leteće',
+'qbsettings-floatingright'	=> 'Desno leteće',
+'changepassword'        => 'Promjena lozinke',
+'skin'                  => 'Izgled',
+'math'                  => 'Prikaz matematičkih formula',
+'dateformat'            => 'Format datuma',
+'datedefault'           => 'Nemoj postaviti',
+'datetime'              => 'Datum i vrijeme',
+'math_failure'          => 'Obrada nije uspjela.',
+'math_unknown_error'    => 'nepoznata greška',
+'math_unknown_function' => 'nepoznata funkcija',
+'math_lexing_error'     => 'rječnička greška (lexing error)',
+'math_syntax_error'     => 'sintaksna greška',
+'math_image_error'      => 'Konverzija u PNG nije uspjela; provjerite jesu li dobro instalirani latex, dvips, gs, i convert',
+'math_bad_tmpdir'       => 'Ne mogu otvoriti ili pisati u privremeni direktorij za matematiku',
+'math_bad_output'       => 'Ne mogu otvoriti ili pisati u odredišni direktorij za matematiku',
+'math_notexvc'          => 'Nedostaje izvršna datoteka texvc-a; pogledajte math/README za postavke.',
+'prefs-personal'        => 'Podaci o suradniku',
+'prefs-rc'              => 'Nedavne promjene i kratki članci',
+'prefs-misc'            => 'Razno',
+'saveprefs'             => 'Snimi postavke',
+'resetprefs'            => 'Vrati na prvotne postavke',
+'oldpassword'           => 'Stara lozinka',
+'newpassword'           => 'Nova lozinka',
+'retypenew'             => 'Ponovno unesite lozinku',
+'textboxsize'           => 'Širina okvira za uređivanje',
+'rows'                  => 'Redova',
+'columns'               => 'Stupaca',
+'searchresultshead'     => 'Prikaz rezultata pretrage',
+'resultsperpage'        => 'Koliko pogodaka na jednoj stranici',
+'contextlines'          => 'Koliko redova teksta po pogotku',
+'contextchars'          => 'Koliko znakova po retku',
+'stubthreshold'         => 'Prag za prikaz članaka u nastajanju (stubova)',
+'recentchangescount'    => 'Broj naslova u nedavnim izmjenama',
+'savedprefs'            => 'Vaše postavke su sačuvane.',
+'timezonelegend'        => 'Vremenska zona',
+'timezonetext'          => 'Unesite razliku između vašeg lokalnog vremena i vremena na poslužitelju (UTC).',
+'localtime'             => 'Lokalno vrijeme',
+'timezoneoffset'        => 'Razlika',
+'servertime'            => 'Vrijeme na poslužitelju',
+'guesstimezone'         => 'Vrijeme dobiveno od preglednika',
+'allowemail'            => 'Omogući primanje e-maila od drugih suradnika',
+'defaultns'             => 'Ako ne navedem drugačije, traži u ovim prostorima:',
+'default'               => 'prvotno',
+'files'                 => 'Datoteke',
+'userrights-lookup-user'=> 'Upravljaj skupinama suradnika',
+'userrights-user-editname'=> 'Unesite suradničko ime:',
+'editusergroup'         => 'Uredi suradničke skupine',
+'userrights-editusergroup'=> 'Uredi skupine suradnika',
+'saveusergroups'        => 'Snimi skupine suradnika',
+'userrights-groupsmember'=> 'Član:',
+'userrights-groupsavailable'=> 'Dostupne skupine:',
+'userrights-groupshelp' => 'Izaberite skupine u koje želite dodati ili iz njih ukloniti suradnika.
+Neoznačene skupine neće se promijeniti. Skupinu možete deselektirati istovremenim pritiskom CTRL + lijeva tipka miša',
+'changes'               => 'promjene',
+'recentchanges'         => 'Nedavne promjene',
+'recentchangestext'     => 'Na ovoj stranici možete pratiti nedavne promjene u wikiju.',
+'rcnote'                => 'Slijedi zadnjih <strong>$1</strong> promjena u zadnjih <strong>$2</strong> dana, od $3.',
+'rcnotefrom'            => 'Slijede promjene od <b>$2</b> (prikazano ih je do <b>$1</b>).',
+'rclistfrom'            => 'Prikaži nove promjene počevši od $1',
+'rcshowhideminor'       => '$1 manje promjene',
+'rcshowhidebots'        => '$1 botove',
+'rcshowhideliu'         => '$1 prijavljene suradnike',
+'rcshowhideanons'       => '$1 anonimne suradnike',
+'rcshowhidepatr'        => '$1 provjerene promjene',
+'rcshowhidemine'        => '$1 moje promjene',
+'rclinks'               => 'Prikaži zadnjih $1 promjena u zadnjih $2 dana; $3',
+'diff'                  => 'razl',
+'hist'                  => 'pov',
+'hide'                  => 'sakrij',
+'show'                  => 'prikaži',
+'number_of_watching_users_pageview'=> '[$1 suradnika prati ovu stranicu]',
+'rc_categories'         => 'Ograniči na kategorije (odvojene znakom  "|")',
+'rc_categories_any'     => 'Sve',
+'upload'                => 'Postavi datoteku',
+'uploadbtn'             => 'Postavi datoteku',
+'reupload'              => 'Ponovno postavi',
+'reuploaddesc'          => 'Vratite se u obrazac za postavljanje.',
+'uploadnologin'         => 'Niste prijavljeni',
+'uploadnologintext'     => 'Za postavljanje datoteka morate biti  [[Special:Userlogin|prijavljeni]].',
+'upload_directory_read_only'=> 'Server ne može pisati u direktorij za postavljanje ($1).',
+'uploaderror'           => 'Greška kod postavljanja',
+# problem with link: [[Project:Slike|upotrebi slika]]
+'uploadtext'            => '\'\'\'STANITE!\'\'\' Prije nego što postavite sliku pročitajte i slijedite upute
+o [[Project:Slike|upotrebi slika]].
+
+Ovaj obrazac služi za postavljanje novih slika. Za pregledavanje i pretraživanje već postavljenih slika
+vidi [[Special:Imagelist|popis postavljenih datoteka]]. Postavljanja i brisanja bilježe se i u [[Special:Log|evidenciji]].
+
+Stavljanjem oznake u odgovarajući kvadratić morate potvrditi da postavljanjem slike ne kršite ničija autorska prava.
+Na kraju pritisnite dugme "Postavi datoteku".
+
+Da biste na stranicu stavili sliku, koristite poveznice tipa
+\'\'\'<nowiki>[[</nowiki>{{ns:6}}<nowiki>:datoteka.jpg]]</nowiki>\'\'\',
+\'\'\'<nowiki>[[</nowiki>{{ns:6}}<nowiki>:datoteka.png|popratni tekst]]</nowiki>\'\'\' ili
+\'\'\'<nowiki>[[</nowiki>{{ns:-2}}<nowiki>:datoteka.ogg]]</nowiki>\'\'\' za izravnu poveznicu na datoteku.',
+'uploadlog'             => 'evidencija postavljanja',
+'uploadlogpage'         => 'Evidencija_postavljanja',
+'uploadlogpagetext'     => 'Dolje je popis nedavno postavljenih slika.',
+'filename'              => 'Ime datoteke',
+'filedesc'              => 'Opis',
+'fileuploadsummary'     => 'Opis:',
+'filestatus'            => 'Status autorskih prava',
+'filesource'            => 'Izvor',
+'copyrightpage'         => 'Project:Autorska prava',
+'copyrightpagename'     => 'Autorska prava na projektu {{SITENAME}}',
+'uploadedfiles'         => 'Postavljene datoteke',
+'ignorewarning'         => 'Zanemari upozorenja i snimi datoteku.',
+'ignorewarnings'        => 'Zanemari sva upozorenja',
+'minlength'             => 'Imena slika moraju imati najmanje tri slova.',
+'illegalfilename'       => 'Ime datoteke "$1" sadrži znakove koji nisu dozvoljeni u imenima stranica. Preimenujte datoteku i ponovno je postavite.',
+'badfilename'           => 'Ime slike automatski je promijenjeno u "$1".',
+'badfiletype'           => '".$1" nije preporučljiv format za slike.',
+'largefile'             => 'Preporučljivo je da veličina datoteka ne prelazi $1 bajtova; ova datoteka ima $2 bajtova',
+'largefileserver'       => 'Veličina ove datoteke veća je od one dopuštene postavkama poslužitelja.',
+'emptyfile'             => 'Datoteka koju ste postavili je prazna. Možda se radi o krivo utipkanom imenu datoteke. Provjerite želite li zaista postaviti ovu datoteku.',
+'fileexists'            => 'Datoteka s ovim imenom već postoji, pogledajte $1 ako niste sigurni želite li je uistinu promijeniti.',
+'fileexists-forbidden'  => 'Datoteka s ovim imenom već postoji; molim postavite ju pod drugim imenom. [[Image:$1|thumb|center|$1]]',
+'fileexists-shared-forbidden'=> 'Datoteka s ovim imenom već postoji u središnjem spremniku datoteka; molim postavite ju pod drugim imenom. [[Image:$1|thumb|center|$1]]',
+'successfulupload'      => 'Postavljanje uspješno.',
+'fileuploaded'          => 'Datoteka "$1" je uspješno postavljena.
+Slijedite ovu poveznicu: ($2) na stranicu s opisom i unesite
+podatke o datoteci: opis, izvor i licencu.
+
+Ako je ovo slika, možete je unijeti u stranicu ovako: <tt><nowiki>[[Image:$1|thumb|Opis]]</nowiki></tt>.',
+'uploadwarning'         => 'Upozorenje kod postavljanja',
+'savefile'              => 'Sačuvaj datoteku',
+'uploadedimage'         => 'postavljeno "$1"',
+'uploaddisabled'        => 'Postavljanje je onemogućeno',
+'uploaddisabledtext'    => 'Postavljanje datoteka na ovom je wikiju onemogućeno.',
+'uploadscripted'        => 'Ova datoteka sadrži HTML ili skriptu, što može dovesti do grešaka u web pregledniku.',
+'uploadcorrupt'         => 'Ova je datoteka oštećena ili ima nepravilan nastavak. Provjerite i pokušajte ponovo.',
+'uploadvirus'           => 'Datoteka sadrži virus! Podrobnije: $1',
+'sourcefilename'        => 'Ime datoteke na vašem računalu',
+'destfilename'          => 'Ime datoteke na wikiju',
+'license'               => 'Dozvola',
+'nolicense'             => 'Molim odaberite:',
+'imagelist'             => 'Popis slika',
+'imagelisttext'         => 'Ispod je popis $1 slika složen $2.',
+'imagelistforuser'      => 'Prikazuje samo slike koje je postavio suradnik $1.',
+'getimagelist'          => 'dobavljam popis slika',
+'ilsubmit'              => 'Traži',
+'showlast'              => 'Prikaži $1 slika složenih $2.',
+'byname'                => 'po imenu',
+'bydate'                => 'po datumu',
+'bysize'                => 'po veličini',
+'imgdelete'             => 'bris',
+'imgdesc'               => 'opis',
+'imglegend'             => 'Uputa: (opis) = prikaži/uredi opis slike.',
+'imghistory'            => 'Povijest slike',
+'revertimg'             => 'vra',
+'deleteimg'             => 'bri',
+'deleteimgcompletely'   => 'Izbriši sve inačice datoteke',
+'imghistlegend'         => 'Uputa: (tre) = trenutna slika, (bri) = briši
+zadnju inačicu, (vra) = vrati sliku na prethodnu inačicu.
+<br /><i>Klikni na datum, da vidiš inačicu koja je tada postavljena</i>.',
+'imagelinks'            => 'Poveznice slike',
+'linkstoimage'          => 'Sljedeće stranice povezuju na ovu sliku:',
+'nolinkstoimage'        => 'Nijedna stranica ne povezuje na ovu sliku.',
+'sharedupload'          => 'Ova je datoteka postavljena na zajedničkom poslužitelju i mogu je koristiti i ostali wikiji',
+'shareduploadwiki'      => 'Za podrobnije informacije vidi $1.',
+'shareduploadwiki-linktext'=> 'stranica s opisom datoteke',
+'noimage'               => 'Ne postoji datoteka s ovim imenom. Možete ju $1.',
+'noimage-linktext'      => 'postaviti',
+'uploadnewversion-linktext'=> 'Postavi novu inačicu datoteke',
+'mimesearch'            => 'MIME tražilica',
+'mimetype'              => 'MIME tip datoteke:',
+'download'              => 'skidanje',
+'unwatchedpages'        => 'Nenadgledane stranice',
+'listredirects'         => 'Popis preusmjeravanja',
+'statistics'            => 'Statistika',
+'sitestats'             => 'Statistika ovog wikija',
+'userstats'             => 'Statistika suradnika',
+'sitestatstext'         => 'U bazi podataka ukupno je \'\'\'$1\'\'\' članaka.
+Ovaj broj uključuje stranice za raspravu, stranice o projektu u prostoru {{SITENAME}}, kratke članke,
+preusmjerene stranice, i sve ostale članke koje najvjerojatnije ne možemo računati kao sadržaj.
+
+Trenutno je \'\'\'$2\'\'\' članaka koji predstavljaju valjan sadržaj (nalaze se u glavnom prostoru i sadrže
+barem jednu unutarnju poveznicu).
+
+Snimljeno je \'\'\'$8\'\'\' datoteka.
+
+Ukupno je \'\'\'$3\'\'\' pregleda stranica, i \'\'\'$4\'\'\' uređivanja članaka od pokretanja projekta {{SITENAME}}.
+U prosjeku to iznosi \'\'\'$5\'\'\' uređivanja po stranici, i \'\'\'$6\'\'\' pregleda po uređivanju.
+
+Duljina [http://meta.wikimedia.org/wiki/Help:Job_queue zadataka za izvršavanje] je \'\'\'$7\'\'\'.',
+'userstatstext'         => 'Broj registriranih suradnika je \'\'\'$1\'\'\'. Od toga je \'\'\'$2\'\'\' (ili \'\'\'$4%\'\'\') administratora (vidi $3).',
+'disambiguations'       => 'Razdvojbene stranice',
+'disambiguationstext'   => 'Sljedeći su članci povezani na <i>razdvojbenu stranicu</i>. Morali bi biti povezani
+na odgovarajući sadržaj.<br />Stranica je razdvojbena ako je povezana iz $1.<br />Poveznice
+iz sekundarnih prostora ovdje <i>nisu</i> prikazane.',
+'doubleredirects'       => 'Dvostruko preusmjeravanje',
+'doubleredirectstext'   => '<b>Pozor:</b>ovaj popis može sadržavati nepravilne članove. To obično znači
+da postoji dodatan tekst u poveznici prve naredbe \#REDIRECT.<br />
+Svaki red sadrži poveznice na prvo i drugo preusmjeravanje, te te prvu liniju teksta drugog preusmjeravanja
+koja obično ukazuje na "pravu" odredišnu stranicu, na koju bi trebalo pokazivati prvo preusmjeravanje.',
+'brokenredirects'       => 'Kriva preusmjeravanja',
+'brokenredirectstext'   => 'Sljedeća preusmjeravanja pokazuju na nepostojeće članke.',
+'nbytes'                => '$1 bajtova',
+'ncategories'           => '$1 kategorija',
+'nlinks'                => '$1 poveznica',
+'nrevisions'            => '$1 inačica',
+'nviews'                => '$1 puta pogledano',
+'lonelypages'           => 'Stranice siročad',
+'uncategorizedpages'    => 'Nekategorizirane stranice',
+'uncategorizedcategories'=> 'Nekategorizirane kategorije',
+'unusedcategories'      => 'Nekorištene kategorije',
+'unusedimages'          => 'Nekorištene slike',
+'popularpages'          => 'Popularne stranice',
+'wantedcategories'      => 'Tražene kategorije',
+'wantedpages'           => 'Tražene stranice',
+'mostlinked'            => 'Stranice na koje vodi najviše poveznica',
+'mostlinkedcategories'  => 'Kategorije na koje vodi najviše poveznica',
+'mostcategories'        => 'Popis članaka po broju kategorija',
+'mostimages'            => 'Slike na koje vodi najviše poveznica',
+'mostrevisions'         => 'Popis članaka po broju uređivanja',
+'allpages'              => 'Sve stranice',
+'prefixindex'           => 'Indeks prema početku naslova',
+'randompage'            => 'Slučajna stranica',
+'shortpages'            => 'Kratke stranice',
+'longpages'             => 'Duge stranice',
+'deadendpages'          => 'Slijepe ulice',
+'listusers'             => 'Popis suradnika',
+'specialpages'          => 'Posebne stranice',
+'spheading'             => 'Posebne stranice za sve suradnike',
+'restrictedpheading'    => 'Posebne stranice s ograničenim pristupom',
+'recentchangeslinked'   => 'Povezane stranice',
+'rclsub'                => '(na stranice povezane iz "$1")',
+'newpages'              => 'Nove stranice',
+'ancientpages'          => 'Najstarije stranice',
+'intl'                  => 'Interwiki poveznice',
+'move'                  => 'Premjesti',
+'movethispage'          => 'Premjesti ovu stranicu',
+'unusedimagestext'      => '<p>Moguće je da su druge mrežne stranice izvan ovog
+wikija povezane na sliku neposrednim URLom, a nisu ovdje navedene unatoč aktivnoj uporabi.</p>',
+'unusedcategoriestext'  => 'Na navedenim stranicama kategorija nema ni jednog članka ili potkategorije.',
+'booksources'           => 'Pretraživanje po ISBN-u',
+'categoriespagetext'    => 'Na ovom wikiju postoje sljedeće kategorije.',
+'data'                  => 'Podaci',
+'userrights'            => 'Upravljanje suradničkim pravima',
+'groups'                => 'Suradničke skupine',
+'booksourcetext'        => 'Dolje je popis poveznica prema stranicama koje prodaju nove ili rabljene knjige i
+gdje su možda na raspolaganju dodatne informacije o knjigama koje tražite.
+{{SITENAME}} ne posluje ni s jednim od ovih siteova i ovaj popis nije pokazatelj njihovog uspjeha.',
+'alphaindexline'        => '$1 do $2',
+'version'               => 'Verzija softvera',
+'log'                   => 'Evidencije',
+'alllogstext'           => 'Skupni prikaz evidencija postavljenih datoteka, brisanja, zaštite, blokiranja, i administratorskih prava.
+Možete suziti prikaz odabirući tip evidencije, suradničko ime ili stranicu u pitanju.',
+'logempty'              => 'Nema pronađenih stavki.',
+'nextpage'              => 'Sljedeća stranica ($1)',
+'allpagesfrom'          => 'Pokaži stranice počevši od:',
+'allarticles'           => 'Svi članci',
+'allinnamespace'        => 'Svi članci (prostor $1)',
+'allnotinnamespace'     => 'Sve stranice koje nisu u prostoru $1',
+'allpagesprev'          => 'Prijašnje',
+'allpagesnext'          => 'Sljedeće',
+'allpagessubmit'        => 'Kreni',
+'allpagesprefix'        => 'Stranice čiji naslov počinje s:',
+'mailnologin'           => 'Nema adrese pošiljaoca',
+'mailnologintext'       => 'Morate biti [[Special:Userlogin|prijavljeni]]
+i imati valjanu adresu e-pošte u svojim [[Special:Preferences|postavkama]]
+da bi mogli slati poštu drugim suradnicima.',
+'emailuser'             => 'Pošalji e-poštu ovom suradniku',
+'emailpage'             => 'Pošalji e-poštu suradniku',
+'emailpagetext'         => 'Ako je suradnik unio valjanu e-mail adresu u svojim postavkama,
+bit će mu poslana poruka s tekstom iz donjeg obrasca.
+E-mail adresa iz vaših postavki nalazit će se u "From" polju poruke i primatelj će vam moći odgovoriti.',
+'usermailererror'       => 'Sustav pošte se vratio s greškom:',
+'noemailtitle'          => 'Nema adrese primaoca',
+'noemailtext'           => 'Ovaj suradnik nije unio valjanu e-mail adresu ili se odlučio na neće primati poštu od drugih suradnika.',
+'emailfrom'             => 'Od',
+'emailto'               => 'Za',
+'emailsubject'          => 'Tema',
+'emailmessage'          => 'Poruka',
+'emailsend'             => 'Pošalji',
+'emailsent'             => 'E-mail poslan',
+'emailsenttext'         => 'Vaša poruka je poslana.',
+'watchlist'             => 'Moj popis praćenja',
+'mywatchlist'             => 'Moj popis praćenja',
+'nowatchlist'           => 'Na vašem popisu praćenja nema nijednog članka.',
+'watchnologin'          => 'Niste prijavljeni',
+'watchnologintext'      => 'Morate biti [[Special:Userlogin|prijavljeni]]
+za promjene u popisu praćenja.',
+'addedwatch'            => 'Dodano u popis praćenja',
+'addedwatchtext'        => 'Stranica "$1" je dodana na vaš [[Special:Watchlist|popis praćenja]].
+Promjene na ovoj stranici i njenoj stranici za razgovor bit će tamo prikazani, a stranica će biti ispisana
+<b>podebljano</b> u [[Special:Recentchanges|popisu nedavnih promjena]], da biste je lakše primijetili.
+<p>Ako poželite ukloniti stranicu s popisa praćenja, pritisnite "Prekini praćenje" u traci s naredbama.</p>',
+'removedwatch'          => 'Odstranjena s popisa praćenja',
+'removedwatchtext'      => 'Stranica "$1" je odstranjena s vašeg popisa praćenja.',
+'watch'                 => 'Prati',
+'watchthispage'         => 'Prati ovu stranicu',
+'unwatch'               => 'Prekini praćenje',
+'unwatchthispage'       => 'Prekini praćenje',
+'notanarticle'          => 'Nije članak',
+'watchnochange'         => 'Niti jedna od praćenih stranica nije promijenjena od vašeg zadnjeg posjeta.',
+'watchdetails'          => '* broj stranica koje se prate (ne brojeći stranice za razgovor): $1
+* [[Special:Watchlist/edit|prikaži i uredi popis praćenja]]',
+'wlheader-enotif'       => '* Uključeno je izvješćivanje e-mailom.',
+'wlheader-showupdated'  => '* Stranice koje su promijenjene od vašeg zadnjeg posjeta prikazane su \'\'\'podebljano\'\'\'',
+'watchmethod-recent'    => 'provjera nedavnih promjena praćenih stranica',
+'watchmethod-list'      => 'provjera praćanih stranica za nedavne promjene',
+'removechecked'         => 'Ukloni označene članke s popisa praćenja',
+'watchlistcontains'     => 'Broj stranica na vašem popisu praćenja je $1.',
+'watcheditlist'         => 'Ovdje je abecedni popis stranica koje pratite. Označite stranice koje želite ukloniti
+s popisa i pritisnite dugme \'ukloni označeno\' na dnu ekrana (uklanjanjem stranice sa sadržajem uklanja se
+i stranica za razgovor i obrnuto).',
+'removingchecked'       => 'Uklanjam ove članke s popisa praćenja...',
+'couldntremove'         => 'Nisam mogao ukloniti \'$1\'...',
+'iteminvalidname'       => 'Problem s izborom \'$1\', ime nije valjano...',
+'wlnote'                => 'Ovdje je posljednjih $1 promjena u posljednjih <b>$2</b> sati.',
+'wlshowlast'            => 'Pokaži zadnjih $1 sati $2 dana $3',
+'wlsaved'               => 'Ovo je snimljena inačica vašeg popisa praćenja.',
+'wlhideshowown'         => '$1 moja uređivanja.',
+'wlhideshowbots'        => '$1 botove.',
+'enotif_mailer'         => '{{SITENAME}} - izvješća o promjenama',
+'enotif_reset'          => 'Označi sve stranice kao već posjećene',
+'enotif_newpagetext'    => 'Ovo je nova stranica.',
+'changed'               => 'promijenio',
+'created'               => 'stvorio',
+'enotif_subject'        => '{{SITENAME}}: Stranicu $PAGETITLE je $CHANGEDORCREATED suradnik $PAGEEDITOR',
+'enotif_lastvisited'    => 'Pogledaj $1 za promjene od zadnjeg posjeta.',
+'enotif_body'           => '$WATCHINGUSERNAME,
+
+stranicu na projektu {{SITENAME}} s naslovom $PAGETITLE je dana $PAGEEDITDATE $CHANGEDORCREATED suradnik $PAGEEDITOR,
+pogledajte $PAGETITLE_URL za trenutnu inačicu.
+
+$NEWPAGE
+
+Sažetak urednika: $PAGESUMMARY $PAGEMINOREDIT
+
+Možete se javiti uredniku:
+mail: $PAGEEDITOR_EMAIL
+wiki: $PAGEEDITOR_WIKI
+
+Do vašeg ponovnog posjeta stranici nećete dobivati daljnja izviješća.
+Postavke za izvješćivanje možete resetirati na svom popisu praćenja.
+
+            Vaš sustav izvješćivanja - hrvatska {{SITENAME}}.
+
+--
+Za promjene svog popisa praćenja posjetite
+{{fullurl:Special:Watchlist|edit=yes}}
+
+Za pomoć posjetite:
+{{fullurl:{{MediaWiki:helppage}}}}',
+'deletepage'            => 'Izbriši stranicu',
+'confirm'               => 'Potvrdi',
+'excontent'             => 'sadržaj je bio: \'$1\'',
+'excontentauthor'       => 'sadržaj je bio: \'$1\' (a jedini urednik \'$2\')',
+'exbeforeblank'         => 'sadržaj prije brisanja je bio: \'$1\'',
+'exblank'               => 'stranica je bila prazna',
+'confirmdelete'         => 'Potvrdi brisanje',
+'deletesub'             => '(Brišem "$1")',
+'historywarning'        => 'UPOZORENJE: Stranica koju želite obrisati ima prijašnje inačice:',
+'confirmdeletetext'     => 'Zauvijek ćete izbrisati stranicu ili sliku zajedno s prijašnjim inačicama.
+Molim potvrdite svoju namjeru, da razumijete posljedice i da ovo radite u skladu s [[{{MediaWiki:policy-url}}|pravilima]].',
+'policy-url'            => 'Project:Pravila',
+'actioncomplete'        => 'Zahvat završen',
+'deletedtext'           => '"$1" je izbrisana.
+Vidi $2 za evidenciju nedavnih brisanja.',
+'deletedarticle'        => 'izbrisano "$1"',
+'dellogpage'            => 'Evidencija_brisanja',
+'dellogpagetext'        => 'Dolje je popis nedavnih brisanja.
+Sva vremena su prema poslužiteljevom vremenu (UTC).
+<ul>
+</ul>',
+'deletionlog'           => 'evidencija brisanja',
+'reverted'              => 'Vraćeno na prijašnju inačicu',
+'deletecomment'         => 'Razlog za brisanje',
+'imagereverted'         => 'Uspješno vraćeno na prijašnju inačicu.',
+'rollback'              => 'Ukloni posljednju promjenu',
+'rollback_short'        => 'Ukloni',
+'rollbacklink'          => 'ukloni',
+'rollbackfailed'        => 'Uklanjanje neuspješno',
+'cantrollback'          => 'Ne mogu ukloniti posljednju promjenu, postoji samo jedna promjena.',
+'alreadyrolled'         => 'Ne mogu ukloniti posljednju promjenu članka [[:$1]] koju je napravio suradnik [[User:$2|$2]]
+([[User talk:$2|Talk]]); netko je već promijenio stranicu ili uklonio promjenu.
+
+Posljednju promjenu napravio je suradnik [[User:$3|$3]] ([[User talk:$3|Talk]]).',
+'editcomment'           => 'Komentar promjene je: "<i>$1</i>".',
+'revertpage'            => 'Uklonjena promjena suradnika $2, vraćeno na zadnju inačicu suradnika $1',
+'sessionfailure'        => 'Uočili smo problem s vašom prijavom. Zadnja naredba nije izvršena
+kako bi izbjegla zloupotreba. Molimo vas da u pregledniku pritisnete "Natrag" (Back) i ponovno učitate stranicu
+s koje ste stigli.',
+'protectlogpage'        => 'Evidencija zaštićivanja',
+# problem with link: [[Project:Protected page|Zaštićena stranica]]
+'protectlogtext'        => 'Ispod je popis zaštićivanja i uklanjanja zaštite pojedinih stranica.
+Pogledajte članak [[Project:Protected page|Zaštićena stranica]] za više obavijesti na ovu temu.',
+'protectedarticle'      => 'članak "[[$1]]" je zaštićen',
+'unprotectedarticle'    => 'uklonjena zaštita članka "[[$1]]"',
+'protectsub'            => '(Zaštićujem "$1")',
+'confirmprotecttext'    => 'Želite li doista zaštititi ovu stranicu?',
+'confirmprotect'        => 'Potvrda zaštite',
+'protectmoveonly'       => 'Zaštiti samo od premještanja',
+'protectcomment'        => 'Razlog za zaštitu',
+'unprotectsub'          => '(Uklanjam zaštitu stranice "$1")',
+'confirmunprotecttext'  => 'Želite li doista ukloniti zaštitu?',
+'confirmunprotect'      => 'Potvrda uklanjanja zaštite',
+'unprotectcomment'      => 'Razlog za uklanjanje zaštite',
+'protect-unchain'       => 'Otključaj ovlaštenja za premještanje',
+'protect-text'          => 'Ovdje možete pregledati i promijeniti razinu zaštite za stranicu <strong>$1</strong>.
+Molim pripazite da ovo radite u skladu s [[{{MediaWiki:policy-url}}|pravilima]].',
+'protect-viewtext'      => 'Vaš suradnički račun nema ovlasti
+za promjenu razine zaštite stranice. Ovo su trenutne postavke stranice <strong>$1</strong>:',
+'protect-default'       => '(bez zaštite)',
+'protect-level-autoconfirmed'=> 'Blokiraj neregistrirane suradnike',
+'protect-level-sysop'   => 'Samo administratori',
+'restriction-edit'      => 'Uređivanje',
+'restriction-move'      => 'Premještanje',
+'undelete'              => 'Vrati izbrisanu stranicu',
+'undeletepage'          => 'Vidi i/ili vrati izbrisane stranice',
+'viewdeletedpage'       => 'Pogledaj izbrisanu stranicu',
+'undeletepagetext'      => 'Sljedeće su stranice izbrisane, ali se još uvijek nalaze u bazi i mogu se obnoviti. Baza se povremeno čisti od ovakvih stranica.',
+'undeletearticle'       => 'Vrati izbrisanu stranicu',
+'undeleterevisions'     => '$1 inačica je arhivirano',
+'undeletehistory'       => 'Ako vratite izbrisanu stranicu, bit će vraćene i sve prijašnje promjene. Ako je u međuvremenu stvorena nova stranica s istim imenom, vraćena stranica bit će upisana kao prijašnja promjena sadašnje. Sadašnja stranica neće biti zamijenjena.',
+'undeletehistorynoadmin'=> 'Ovaj je članak izbrisan. Razlog za brisanje prikazan je u donjem sažetku, zajedno s
+detaljima o suradnicima koji su uređivali ovu stranicu prije brisanja.
+Tekst izbrisanih inačica dostupan je samo administratorima.',
+'undeleterevision'      => 'Izbrisana inačica od $1',
+'undeletebtn'           => 'Vrati!',
+'undeletedarticle'      => 'vraćen "$1"',
+'undeletedrevisions'    => '$1 inačica vraćeno',
+'namespace'             => 'Prostor:',
+'invert'                => 'Sve osim odabranog',
+'contributions'         => 'Doprinosi suradnika',
+'mycontris'             => 'Moji doprinosi',
+'contribsub2'            => 'Za $1 ($2)',
+'nocontribs'            => 'Nema promjena koje udovoljavaju ovim kriterijima.',
+'ucnote'                => 'Ovdje je zadnjih <b>$1</b> promjena ovog suradnika u zadnjih <b>$2</b> dana.',
+'uclinks'               => 'Pogledaj zadnjih $1 promjena; pogledaj zadnjih $2 dana.',
+'uctop'                 => ' (vrh)',
+'newbies'               => 'novaci',
+'sp-contributions-newest'=> 'Najnovije',
+'sp-contributions-oldest'=> 'Najstarije',
+'sp-contributions-newer'=> '$1 novijih',
+'sp-contributions-older'=> '$1 starijih',
+'sp-contributions-newbies-sub'=> 'Za nove suradnike',
+'whatlinkshere'         => 'Što vodi ovamo',
+'notargettitle'         => 'Nema odredišta',
+'notargettext'          => 'Niste naveli ciljnu stranicu ili suradnika za izvršavanje ove funkcije.',
+'linklistsub'           => '(Popis poveznica)',
+'linkshere'             => 'Sljedeće stranice povezuju ovamo:',
+'nolinkshere'           => 'Nijedna stranica ne povezuje ovamo.',
+'isredirect'            => 'stranica za preusmjeravanje',
+'istemplate'            => 'kao predložak',
+'blockip'               => 'Blokiraj suradnika',
+'blockiptext'           => 'Koristite donji obrazac za blokiranje pisanja pojedinih suradnika ili IP adresa .
+To biste trebali raditi samo zbog sprječavanja vandalizma i u skladu
+sa [[{{MediaWiki:policy-url}}|smjernicama]].
+Upišite i razlog za ovo blokiranje (npr. stranice koje su
+vandalizirane).',
+'ipaddress'             => 'IP adresa',
+'ipadressorusername'    => 'IP adresa ili suradničko ime',
+'ipbexpiry'             => 'Rok (na engleskom)',
+'ipbreason'             => 'Razlog',
+'ipbsubmit'             => 'Blokiraj ovog suradnika',
+'ipbother'              => 'Neki drugi rok (na engleskom, npr. 6 days',
+'ipboptions'            => '2 sata:2 hours,6 sati:6 hours,1 dan:1 day,3 dana:3 days,1 tjedan:1 week,2 tjedna:2 weeks,1 mjesec:1 month,3 mjeseca:3 months,6 mjeseci:6 months,1 godine:1 year,zauvijek:infinite',
+'ipbotheroption'        => 'drugo',
+'badipaddress'          => 'Nevaljana IP adresa.',
+'blockipsuccesssub'     => 'Uspješno blokirano',
+'blockipsuccesstext'    => 'Suradnik [[{{ns:Special}}:Contributions/$1|$1]] je blokiran.
+<br />Pogledaj [[{{ns:Special}}:Ipblocklist|IP block list]] za pregled blokiranja.',
+'unblockip'             => 'Deblokiraj suradnika',
+'unblockiptext'         => 'Ovaj se obrazac koristi za vraćanje prava na pisanje prethodno blokiranoj IP adresi.',
+'ipusubmit'             => 'Deblokiraj ovu adresu',
+'ipblocklist'           => 'Popis blokiranih IP adresa',
+'blocklistline'         => '$1, $2 je blokirao $3 ($4)',
+'infiniteblock'         => 'neograničeno',
+'expiringblock'         => 'istječe $1',
+'ipblocklistempty'      => 'Popis blokiranja je prazan.',
+'blocklink'             => 'blokiraj',
+'unblocklink'           => 'deblokiraj',
+'contribslink'          => 'doprinosi',
+'autoblocker'           => 'Automatski ste blokirani jer je vašu IP adresu nedavno koristio "[[User:$1|$1]]" koji je blokiran zbog: "$2".',
+'blocklogpage'          => 'Evidencija_blokiranja',
+'blocklogentry'         => 'Blokiran je "[[$1]]" na rok $2',
+'blocklogtext'          => 'Ovo je evidencija blokiranja i deblokiranja. Na popisu
+nema automatski blokiranih IP adresa. Za popis trenutnih zabrana i
+blokiranja vidi [[Special:Ipblocklist|listu IP blokiranja]].',
+'unblocklogentry'       => 'Deblokiran "$1"',
+'range_block_disabled'  => 'Isključena je administratorska naredba za blokiranje raspona IP adresa.',
+'ipb_expiry_invalid'    => 'Vremenski rok nije valjan.',
+'ip_range_invalid'      => 'Raspon IP adresa nije valjan.',
+'proxyblocker'          => 'Zaštita od otvorenih posrednika (proxyja)',
+'proxyblockreason'      => 'Vaša je IP adresa blokirana jer se radi o otvorenom posredniku (proxyju). Molim stupite u vezu s vašim davateljem internetskih usluga (ISP-om) ili službom tehničke podrške i obavijestite ih o ovom ozbiljnom sigurnosnom problemu.',
+'proxyblocksuccess'     => 'Napravljeno.',
+'sorbsreason'           => 'Vaša IP adresa je na popisu otvorenih posrednika na poslužitelju [http://www.sorbs.net SORBS] DNSBL.',
+'sorbs_create_account_reason'=> 'Vaša IP adresa je na popisu otvorenih posrednika na poslužitelju [http://www.sorbs.net SORBS] DNSBL. Ne možete otvoriti račun.',
+'lockdb'                => 'Zaključaj bazu podataka',
+'unlockdb'              => 'Otključaj bazu podataka',
+'lockdbtext'            => 'Zaključavanjem baze će se suradnicima onemogućiti uređivanje stranica, mijenjanje postavki i popisa praćenja, i sve drugo što zahtijeva promjene u bazi podataka.
+Molim potvrdite svoju namjeru zaključavanja, te da ćete otključati bazu čim završite s održavanjem.',
+'unlockdbtext'          => 'Otključavanjem baze omogućit ćete suradnicima uređivanje stranica,
+mijenjanje postavki, uređivanje popisa praćenja i druge stvari koje zahtijevaju promjene u bazi. Molim potvrdite svoju namjeru.',
+'lockconfirm'           => 'Da, sigurno želim zaključati bazu.',
+'unlockconfirm'         => 'Da, sigurno želim otključati bazu.',
+'lockbtn'               => 'Zaključaj bazu podataka',
+'unlockbtn'             => 'Otključaj bazu podataka',
+'locknoconfirm'         => 'Niste potvrdili svoje namjere.',
+'lockdbsuccesssub'      => 'Zaključavanje baze podataka uspjelo',
+'unlockdbsuccesssub'    => 'Otključavanje baze podataka uspjelo',
+'lockdbsuccesstext'     => 'Baza podataka je zaključana.
+<br />Ne zaboravite otključati po završetku održavanja.',
+'unlockdbsuccesstext'   => 'Baza podataka je otključana.',
+'rightslogtext'         => 'Ovo je evidencija promjena suradničkih prava.',
+'movepage'              => 'Premjesti stranicu',
+# problem with link: [[Special:Maintenance|provjerite]] does not exist in MediaWiki by default
+'movepagetext'          => 'Korištenjem ovog obrasca ćete preimenovati stranicu i premjestiti sve stare izmjene
+na novo ime.
+Stari će se naslov pretvoriti u stranicu koja automatski preusmjerava na novi naslov.
+Poveznice na stari naslov ostat će iste; bilo bi dobro da
+[[Special:Maintenance|provjerite]] je li preusmjeravanje ispravno.
+Na vama je da se pobrinete da poveznice i dalje vode tamo
+gdje bi trebale.
+
+Stranica se \'\'\'neće\'\'\' premjestiti ako već postoji stranica s novim naslovom,
+osim u slučaju prazne stranice ili stranice za preusmjeravanje koja nema
+nikakvih starih izmjena. To znači: 1. ako pogriješite, možete opet preimenovati
+stranicu na stari naslov, 2. ne može vam se dogoditi da izbrišete neku postojeću stranicu.
+
+<b>OPREZ!</b>
+Ovo može biti drastična i neočekivana promjena kad su u pitanju popularne stranice,
+i zato dobro razmislite prije nego što preimenujete stranicu.',
+'movepagetalktext'      => 'Stranica za razgovor, ako postoji, automatski će se premjestiti zajedno sa stranicom koju premještate. \'\'\'Stranica za razgovor neće se premjestiti ako:\'\'\'
+*premještate stranicu iz jednog prostora u drugi,
+*pod novim imenom već postoji stranica za razgovor s nekim sadržajem, ili
+*maknete kvačicu u kućici na dnu ove stranice.
+
+U tim slučajevima ćete morati sami premjestiti ili iskopirati stranicu za razgovor,
+ako to želite.',
+'movearticle'           => 'Premjesti stranicu',
+'movenologin'           => 'Niste prijavljeni',
+'movenologintext'       => 'Ako želite premjestiti stranicu morate biti [[Special:Userlogin|prijavljeni]].',
+'newtitle'              => 'Na novi naslov',
+'movepagebtn'           => 'Premjesti stranicu',
+'pagemovedsub'          => 'Premještanje uspjelo',
+'pagemovedtext'         => 'Stranica "[[$1]]" premještena je na "[[$2]]".',
+'articleexists'         => 'Stranica pod tim imenom već postoji ili ime koje ste odabrali nije u skladu s pravilima.
+Molimo odaberite drugo ime.',
+'talkexists'            => '\'\'\'Sama stranica je uspješno prenesena, ali stranicu za razgovor nije bilo moguće prenijeti jer na odredištu već postoji stranica za razgovor. Molimo da ih ručno spojite.\'\'\'',
+'movedto'               => 'premješteno na',
+'movetalk'              => 'Premjesti i njezinu stranicu za razgovor ako je moguće.',
+'talkpagemoved'         => 'Pripadajuća stranica za razgovor također je premještena.',
+'talkpagenotmoved'      => 'Pripadajuća stranica za razgovor <strong>nije</strong> premještena.',
+'1movedto2'             => '$1 premješteno na $2',
+'1movedto2_redir'       => '$1 premješteno na $2 preko postojećeg preusmjeravanja',
+'movelogpage'           => 'Evidencija premještanja',
+'movelogpagetext'       => 'Ispod je popis premještenih stranica.',
+'movereason'            => 'Razlog',
+'revertmove'            => 'vrati',
+'delete_and_move'       => 'Izbriši i premjesti',
+'delete_and_move_text'  => '==Nužno brisanje==
+
+Odredišni članak "[[$1]]" već postoji. Želite li ga obrisati da biste napravili mjesto za premještaj?',
+'delete_and_move_confirm'=> 'Da, izbriši stranicu',
+'delete_and_move_reason'=> 'Obrisano kako bi se napravilo mjesta za premještaj.',
+'selfmove'              => 'Izvorni i odredišni naslov su isti; ne mogu premjestiti stranicu na nju samu.',
+'immobile_namespace'    => 'Odredišni naslov pripada posebnom tipu; u taj prostor ne mogu pomicati stranice.',
+'export'                => 'Izvezi stranice',
+'exporttext'            => 'Možete izvesti tekst i prijašnje promjene jedne ili više stranica uklopljene u XML kod. U budućim verzijama MediaWiki softvera bit će moguće uvesti ovakvu stranicu u neki drugi wiki. Trenutna verzija to još ne podržava.
+
+Za izvoz stranica unesite njihove naslove u polje ispod, jedan naslov po retku, i označite želite li trenutnu inačicu zajedno sa svim prijašnjima, ili samo trenutnu inačicu s informacijom o zadnjoj promjeni.
+
+U potonjem slučaju možete koristiti i poveznicu, npr. [[{{ns:Special}}:Export/{{MediaWiki:mainpage}}]] za članak [[{{MediaWiki:mainpage}}]].',
+'exportcuronly'         => 'Uključi samo trenutnu inačicu, ne i sve prijašnje',
+'exportnohistory'       => '----
+\'\'\'Napomena:\'\'\' izvoz cjelokupne stranice sa svim prethodnim izmjenama onemogućen je zbog opterećenja poslužitelja.',
+'allmessages'           => 'Sve sistemske poruke',
+'allmessagesname'       => 'Ime',
+'allmessagesdefault'    => 'Prvotni tekst',
+'allmessagescurrent'    => 'Trenutni tekst',
+'allmessagestext'       => 'Ovo je popis svih sistemskih poruka u prostoru MediaWiki: .',
+'allmessagesnotsupportedUI'=> 'Trenutno odabrani jezik, <b>$1</b>, nije podržan u popisu Special:AllMessages na ovom mjestu.',
+'allmessagesnotsupportedDB'=> 'Uređivanje Special:AllMessages trenutno nije podržano jer je isključen parametar wgUseDatabaseMessages.',
+'allmessagesfilter'     => 'Filter imena poruka:',
+'allmessagesmodified'   => 'Prikaži samo promijenjene',
+'thumbnail-more'        => 'Povećaj',
+'missingimage'          => '<b>Nedostaje slika</b><br /><i>$1</i>',
+'filemissing'           => 'Nedostaje datoteka',
+'thumbnail_error'       => 'Pogrješka pri izradbi sličice: $1',
+'import'                => 'Uvezi stranice',
+'importinterwiki'       => 'Transwiki uvoz',
+'importtext'            => 'Molim da izvezete ovu datoteku iz izvorišnog wikija koristeći pomagalo Special:Export, snimite je na svoj disk i postavite je ovdje.',
+'importfailed'          => 'Uvoz nije uspio: $1',
+'importnotext'          => 'Prazno ili bez teksta',
+'importsuccess'         => 'Uvoz je uspio!',
+'importhistoryconflict' => 'Došlo je do konflikta među prijašnjim inačicama (ova je stranica možda već uvezena)',
+'importnosources'       => 'Nije unesen nijedan izvor za transwiki uvoz i neposredno postavljanje povijesti je onemogućeno.',
+'importnofile'          => 'Nije postavljena uvozna datoteka.',
+'importuploaderror'     => 'Postavljanje uvozne datoteke nije uspjelo; možda je datoteka veća od dozvoljene veličine.',
+'tooltip-search'        => 'Pretraži projekt {{SITENAME}}',
+'tooltip-minoredit'     => 'Označi kao manju promjenu',
+'tooltip-save'          => 'Sačuvaj promjene',
+'tooltip-preview'       => 'Prikaži kako će izgledati, molimo koristite prije snimanja!',
+'tooltip-diff'          => 'Prikaži promjene učinjene u tekstu.',
+'tooltip-compareselectedversions'=> 'Prikaži usporedbu izabranih inačica ove stranice.',
+'tooltip-watch'         => 'Dodaj na popis praćenja',
+'monobook.css'          => '/** Ovdje idu izmjene monobook stylesheeta */',
+'nodublincore'          => 'Dublin Core RDF metapodaci su isključeni na ovom serveru.',
+'nocreativecommons'     => 'Creative Commons RDF metapodaci su isključeni na ovom serveru.',
+'notacceptable'         => 'Wiki server ne može dobaviti podatke u obliku kojega vaš klijent može pročitati.',
+'anonymous'             => 'Anonimni suradnik projekta {{SITENAME}}',
+'siteuser'              => 'Suradnik $1 na projektu {{SITENAME}}',
+'lastmodifiedatby'        => 'Ovu je stranicu zadnji put mijenjao dana $2, $1 suradnik $3.',
+'and'                   => 'i',
+'othercontribs'         => 'Temelji se na doprinosu suradnika $1.',
+'others'                => 'drugih',
+'siteusers'             => '{{SITENAME}} suradnik(ci) $1',
+'creditspage'           => 'Autori stranice',
+'nocredits'             => 'Za ovu stranicu nema podataka o autorima.',
+'spamprotectiontitle'   => 'Zaštita od spama',
+'spamprotectiontext'    => 'Stranicu koju ste željeli snimiti blokirao je filter spama. Razlog je vjerojatno vanjska poveznica.',
+'spamprotectionmatch'   => 'Naš filter spama reagirao je na sljedeći tekst: $1',
+'subcategorycount'      => 'Broj potkategorija u ovoj kategoriji: $1.',
+'categoryarticlecount'  => 'Broj članaka u ovoj kategoriji: $1.',
+'listingcontinuesabbrev'=> ' nast.',
+'spambot_username'      => 'MediaWiki zaštita od spama',
+'spam_reverting'        => 'Vraćam na zadnju inačicu koja ne sadrži poveznice na $1',
+'spam_blanking'         => 'Sve inačice sadrže poveznice na $1, brišem cjelokupni sadržaj',
+'infosubtitle'          => 'Podaci o stranici',
+'numedits'              => 'Broj promjena (članak): $1',
+'numtalkedits'          => 'Broj promjena (stranica za razgovor): $1',
+'numwatchers'           => 'Broj pratitelja: $1',
+'numauthors'            => 'Broj autora (članak): $1',
+'numtalkauthors'        => 'Broj autora (stranica za razgovor): $1',
+'mw_math_png'           => 'Uvijek kao PNG',
+'mw_math_simple'        => 'Ako je vrlo jednostavno HTML, inače PNG',
+'mw_math_html'          => 'Ako je moguće HTML, inače PNG',
+'mw_math_source'        => 'Ostavi u formatu TeX (za tekstualne preglednike)',
+'mw_math_modern'        => 'Preporučeno za današnje preglednike',
+'mw_math_mathml'        => 'Ako je moguće MathML (u pokusnoj fazi)',
+'markaspatrolleddiff'   => 'Označi za pregledano',
+'markaspatrolledtext'   => 'Označi ovaj članak pregledanim',
+'markedaspatrolled'     => 'Pregledano',
+'markedaspatrolledtext' => 'Odabrana promjena već je pregledana.',
+'rcpatroldisabled'      => 'Nadzor nedavnih promjena isključen',
+'rcpatroldisabledtext'  => 'Naredba "Nadziri nedavne promjene" trenutno je isključena.',
+'markedaspatrollederror'=> 'Ne mogu označiti za pregledano',
+'markedaspatrollederrortext'=> 'Morate odabrati inačicu koju treba označiti za pregledanu.',
+'monobook.js' => '/* Deprecated; use [[MediaWiki:common.js]] */',
+
+'accesskey-pt-userpage' => '.',
+'tooltip-pt-userpage' => 'Moja suradnička stranica',
+'accesskey-pt-anonuserpage' => '.',
+'tooltip-pt-anonuserpage' => 'Suradnička stranica za IP adresu pod kojom uređujete',
+'accesskey-pt-mytalk' => 'n',
+'tooltip-pt-mytalk' => 'Moja stranica za razgovor',
+'accesskey-pt-anontalk' => 'n',
+'tooltip-pt-anontalk' => 'Razgovor o suradnicima s ove IP adrese',
+'accesskey-pt-preferences' => '',
+'tooltip-pt-preferences' => 'Moje postavke',
+'accesskey-pt-watchlist' => 'l',
+'tooltip-pt-watchlist' => 'Popis stranica koje pratite.',
+'accesskey-pt-mycontris' => 'y',
+'tooltip-pt-mycontris' => 'Popis mojih doprinosa',
+'accesskey-pt-login' => 'o',
+'tooltip-pt-login' => 'Predlažemo vam da se prijavite, ali nije obvezno.',
+'accesskey-pt-anonlogin' => 'o',
+'tooltip-pt-anonlogin' => 'Predlažemo vam da se prijavite, ali nije obvezno.',
+'accesskey-pt-logout' => '',
+'tooltip-pt-logout' => 'Odjavi se',
+'accesskey-ca-talk' => 't',
+'tooltip-ca-talk' => 'Razgovor o stranici',
+'accesskey-ca-edit' => 'e',
+'tooltip-ca-edit' => 'Možete uređivati ovu stranicu. Koristite Pregled kako će izgledati prije nego što snimite.',
+'accesskey-ca-addsection' => '+',
+'tooltip-ca-addsection' => 'Dodaj komentar ovom razgovoru.',
+'accesskey-ca-viewsource' => 'e',
+'tooltip-ca-viewsource' => 'Ova stranica je zaštićena. Možete pogledati izvorni kod.',
+'accesskey-ca-history' => 'h',
+'tooltip-ca-history' => 'Ranije izmjene na ovoj stranici.',
+'accesskey-ca-protect' => '=',
+'tooltip-ca-protect' => 'Zaštiti ovu stranicu',
+'accesskey-ca-delete' => 'd',
+'tooltip-ca-delete' => 'Izbriši ovu stranicu',
+'accesskey-ca-undelete' => 'd',
+'tooltip-ca-undelete' => 'Vrati uređivanja na ovoj stranici prije nego što je izbrisana',
+'accesskey-ca-move' => 'm',
+'tooltip-ca-move' => 'Premjesti ovu stranicu',
+'accesskey-ca-watch' => 'w',
+'tooltip-ca-watch' => 'Dodaj ovu stranicu na svoj popis praćenja',
+'accesskey-ca-unwatch' => 'w',
+'tooltip-ca-unwatch' => 'Ukloni ovu stranicu s popisa praćenja',
+'accesskey-search' => 'f',
+'tooltip-search' => 'Pretraži ovaj wiki',
+'accesskey-p-logo' => '',
+'tooltip-p-logo' => 'Glavna stranica',
+'accesskey-n-mainpage' => 'z',
+'tooltip-n-mainpage' => 'Posjeti glavnu stranicu',
+'accesskey-n-portal' => '',
+'tooltip-n-portal' => 'O projektu, što možete učiniti, gdje je što',
+'accesskey-n-currentevents' => '',
+'tooltip-n-currentevents' => 'O trenutnim događajima',
+'accesskey-n-recentchanges' => 'r',
+'tooltip-n-recentchanges' => 'Popis nedavnih promjena u wikiju.',
+'accesskey-n-randompage' => 'x',
+'tooltip-n-randompage' => 'Učitaj slučajnu stranicu',
+'accesskey-n-help' => '',
+'tooltip-n-help' => 'Mjesto za pomoć suradnicima.',
+'accesskey-n-sitesupport' => '',
+'tooltip-n-sitesupport' => 'Podržite nas materijalno',
+'accesskey-t-whatlinkshere' => 'j',
+'tooltip-t-whatlinkshere' => 'Popis svih stranica koje sadrže poveznice ovamo',
+'accesskey-t-recentchangeslinked' => 'k',
+'tooltip-t-recentchangeslinked' => 'Nedavne promjene na stranicama na koje vode ovdašnje poveznice',
+'accesskey-feed-rss' => '',
+'tooltip-feed-rss' => 'RSS feed za ovu stranicu',
+'accesskey-feed-atom' => '',
+'tooltip-feed-atom' => 'Atom feed za ovu stranicu',
+'accesskey-t-contributions' => '',
+'tooltip-t-contributions' => 'Pogledaj popis suradnikovih doprinosa',
+'accesskey-t-emailuser' => '',
+'tooltip-t-emailuser' => 'Pošalji suradniku e-mail',
+'accesskey-t-upload' => 'u',
+'tooltip-t-upload' => 'Postavi slike i druge medije',
+'accesskey-t-specialpages' => 'q',
+'tooltip-t-specialpages' => 'Popis posebnih stranica',
+'accesskey-ca-nstab-main' => 'c',
+'tooltip-ca-nstab-main' => 'Pogledaj sadržaj',
+'accesskey-ca-nstab-user' => 'c',
+'tooltip-ca-nstab-user' => 'Pogledaj suradničku stranicu',
+'accesskey-ca-nstab-media' => 'c',
+'tooltip-ca-nstab-media' => 'Pogledaj stranicu s opisom medija',
+'accesskey-ca-nstab-special' => '',
+'tooltip-ca-nstab-special' => 'Ovo je posebna stranica koju nije moguće izravno uređivati.',
+'accesskey-ca-nstab-project' => 'a',
+'tooltip-ca-nstab-project' => 'Pogledaj stranicu o projektu',
+'accesskey-ca-nstab-image' => 'c',
+'tooltip-ca-nstab-image' => 'Pogledaj stranicu o slici',
+'accesskey-ca-nstab-mediawiki' => 'c',
+'tooltip-ca-nstab-mediawiki' => 'Pogledaj sistemske poruke',
+'accesskey-ca-nstab-template' => 'c',
+'tooltip-ca-nstab-template' => 'Pogledaj predložak',
+'accesskey-ca-nstab-help' => 'c',
+'tooltip-ca-nstab-help' => 'Pogledaj stranicu za pomoć',
+'accesskey-ca-nstab-category' => 'c',
+'tooltip-ca-nstab-category' => 'Pogledaj stranicu kategorije',
+'deletedrevision'       => 'Izbrisana stara inačica $1.',
+'previousdiff'          => '← Usporedba s prethodnom',
+'nextdiff'              => 'Usporedba sa sljedećom →',
+'imagemaxsize'          => 'Ograniči veličinu slike na stranici s opisom:',
+'thumbsize'             => 'Veličina sličice (umanjene inačice slike):',
+'showbigimage'          => 'Učitaj u punoj veličini ($1x$2, $3 KB)',
+'newimages'             => 'Galerija novih datoteka',
+'showhidebots'          => '($1 botova)',
+'noimages'              => 'Nema slika.',
+'specialloguserlabel'   => 'Suradnik:',
+'speciallogtitlelabel'  => 'Naslov:',
+'passwordtooshort'      => 'Vaša je lozinka prekratka. Lozinke moraju sadržavati najmanje $1 znakova.',
+'mediawarning'          => '\'\'\'Upozorenje\'\'\': Ova datoteka možda sadrži zlonamjerni program čije bi izvršavanje moglo ugroziti vaš računalni sustav.
+<hr />',
+'fileinfo'              => '$1KB, MIME tip: <code>$2</code>',
+'metadata'              => 'Metapodaci',
+'metadata-help'         => 'Ova datoteka sadržava dodatne podatke koje je vjerojatno dodala digitalna kamera ili skener u procesu snimanja odnosno digitalizacije. Ako je datoteka mijenjana, podatci možda nisu u skladu sa stvarnim stanjem.',
+'metadata-expand'       => 'Pokaži sve podatke',
+'metadata-collapse'     => 'Sakrij dodatne podatke',
+'exif-imagewidth'       => 'Širina',
+'exif-imagelength'      => 'Visina',
+'exif-bitspersample'    => 'Dubina boje',
+'exif-compression'      => 'Način sažimanja',
+'exif-photometricinterpretation'=> 'Kolor model',
+'exif-orientation'      => 'Orijentacija kadra',
+'exif-samplesperpixel'  => 'Broj kolor komponenata',
+'exif-planarconfiguration'=> 'Princip rasporeda podataka',
+'exif-ycbcrsubsampling' => 'Omjer kompnente Y prema C',
+'exif-ycbcrpositioning' => 'Razmještaj komponenata Y i C',
+'exif-xresolution'      => 'Vodoravna razlučivost',
+'exif-yresolution'      => 'Okomita razlučivost',
+'exif-resolutionunit'   => 'Jedinica razlučivosti',
+'exif-stripoffsets'     => 'Položaj bloka podataka',
+'exif-rowsperstrip'     => 'Broj redova u bloku',
+'exif-stripbytecounts'  => 'Veličina komprimiranog bloka',
+'exif-jpeginterchangeformat'=> 'Udaljenost JPEG previewa od početka datoteke',
+'exif-jpeginterchangeformatlength'=> 'Količina bajtova JPEG previewa',
+'exif-transferfunction' => 'Funkcija preoblikovanja kolor prostora',
+'exif-whitepoint'       => 'Kromaticitet bijele točke',
+'exif-primarychromaticities'=> 'Kromaticitet primarnih boja',
+'exif-ycbcrcoefficients'=> 'Matrični koeficijenti preobrazbe kolor prostora',
+'exif-referenceblackwhite'=> 'Mjesto bijele i crne točke',
+'exif-datetime'         => 'Datum zadnje promjene datoteke',
+'exif-imagedescription' => 'Ime slike',
+'exif-make'             => 'Proizvođač kamere',
+'exif-model'            => 'Model kamere',
+'exif-software'         => 'Korišteni softver',
+'exif-artist'           => 'Autor',
+'exif-copyright'        => 'Nositelj prava',
+'exif-exifversion'      => 'Exif verzija',
+'exif-flashpixversion'  => 'Podržana verzija Flashpixa',
+'exif-colorspace'       => 'Kolor prostor',
+'exif-componentsconfiguration'=> 'Značenje pojedinih komponenti',
+'exif-compressedbitsperpixel'=> 'Dubina boje poslije sažimanja',
+'exif-pixelydimension'  => 'Puna visina slike',
+'exif-pixelxdimension'  => 'Puna širina slike',
+'exif-makernote'        => 'Napomene proizvođača',
+'exif-usercomment'      => 'Suradnički komentar',
+'exif-relatedsoundfile' => 'Povezani zvučni zapis',
+'exif-datetimeoriginal' => 'Datum i vrijeme slikanja',
+'exif-datetimedigitized'=> 'Datum i vrijeme digitalizacije',
+'exif-subsectime'       => 'Dio sekunde u kojem je slikano',
+'exif-subsectimeoriginal'=> 'Dio sekunde u kojem je fotografirano',
+'exif-subsectimedigitized'=> 'Dio sekunde u kojem je digitalizirano',
+'exif-exposuretime'     => 'Ekspozicija',
+'exif-fnumber'          => 'F broj dijafragme',
+'exif-exposureprogram'  => 'Program ekspozicije',
+'exif-spectralsensitivity'=> 'Spektralna osjetljivost',
+'exif-isospeedratings'  => 'ISO vrijednost',
+'exif-oecf'             => 'Optoelektronski faktor konverzije',
+'exif-shutterspeedvalue'=> 'Brzina zatvarača',
+'exif-aperturevalue'    => 'Dijafragma',
+'exif-brightnessvalue'  => 'Osvijetljenost',
+'exif-exposurebiasvalue'=> 'Kompenzacija ekspozicije',
+'exif-maxaperturevalue' => 'Minimalni broj dijafragme',
+'exif-subjectdistance'  => 'Udaljenost do objekta',
+'exif-meteringmode'     => 'Režim mjerača vremena',
+'exif-lightsource'      => 'Izvor svjetlosti',
+'exif-flash'            => 'Bljeskalica',
+'exif-focallength'      => 'Žarišna duljina leće',
+'exif-subjectarea'      => 'Položaj i površina objekta snimke',
+'exif-flashenergy'      => 'Energija bljeskalice',
+'exif-spatialfrequencyresponse'=> 'Prostorna frekvencijska karakteristika',
+'exif-focalplanexresolution'=> 'Vodoravna razlučivost žarišne ravnine',
+'exif-focalplaneyresolution'=> 'Okomita razlučivost žarišne ravnine',
+'exif-focalplaneresolutionunit'=> 'Jedinica razlučivosti žarišne ravnine',
+'exif-subjectlocation'  => 'Položaj subjekta',
+'exif-exposureindex'    => 'Indeks ekspozicije',
+'exif-sensingmethod'    => 'Tip senzora',
+'exif-filesource'       => 'Izvorna datoteka',
+'exif-scenetype'        => 'Tip scene',
+'exif-cfapattern'       => 'Tip kolor filtera',
+'exif-customrendered'   => 'Dodatna obrada slike',
+'exif-exposuremode'     => 'Režim izbora ekspozicije',
+'exif-whitebalance'     => 'Balans bijele',
+'exif-digitalzoomratio' => 'Razmjer digitalnog zooma',
+'exif-focallengthin35mmfilm'=> 'Ekvivalent žarišne daljine za 35 mm film',
+'exif-scenecapturetype' => 'Tip scene na snimci',
+'exif-gaincontrol'      => 'Kontrola osvijetljenosti',
+'exif-contrast'         => 'Kontrast',
+'exif-saturation'       => 'Zasićenje',
+'exif-sharpness'        => 'Oštrina',
+'exif-devicesettingdescription'=> 'Opis postavki uređaja',
+'exif-subjectdistancerange'=> 'Raspon udaljenosti subjekata',
+'exif-imageuniqueid'    => 'Jedinstveni identifikator slike',
+'exif-gpsversionid'     => 'Verzija bloka GPS-informacije',
+'exif-gpslatituderef'   => 'Sjeverna ili južna širina',
+'exif-gpslatitude'      => 'Širina',
+'exif-gpslongituderef'  => 'Istočna ili zapadna dužina',
+'exif-gpslongitude'     => 'Dužina',
+'exif-gpsaltituderef'   => 'Visina ispod ili iznad mora',
+'exif-gpsaltitude'      => 'Visina',
+'exif-gpstimestamp'     => 'Vrijeme po GPS-u (atomski sat)',
+'exif-gpssatellites'    => 'Korišteni sateliti',
+'exif-gpsstatus'        => 'Status prijemnika',
+'exif-gpsmeasuremode'   => 'Režim mjerenja',
+'exif-gpsdop'           => 'Preciznost mjerenja',
+'exif-gpsspeedref'      => 'Jedinica brzine',
+'exif-gpsspeed'         => 'Brzina GPS prijemnika',
+'exif-gpstrackref'      => 'Tip azimuta prijemnika (pravi ili magnetni)',
+'exif-gpstrack'         => 'Azimut prijemnika',
+'exif-gpsimgdirectionref'=> 'Tip azimuta slike (pravi ili magnetni)',
+'exif-gpsimgdirection'  => 'Azimut slike',
+'exif-gpsmapdatum'      => 'Korišteni geodetski koordinatni sustav',
+'exif-gpsdestlatituderef'=> 'Indeks zemlj. širine objekta',
+'exif-gpsdestlatitude'  => 'Zemlj. širina objekta',
+'exif-gpsdestlongituderef'=> 'Indeks zemlj. dužine objekta',
+'exif-gpsdestlongitude' => 'Zemljopisna dužina objekta',
+'exif-gpsdestbearingref'=> 'Indeks pelenga objekta',
+'exif-gpsdestbearing'   => 'Peleng objekta',
+'exif-gpsdestdistanceref'=> 'Mjerne jedinice udaljenosti objekta',
+'exif-gpsdestdistance'  => 'Udaljenost objekta',
+'exif-gpsprocessingmethod'=> 'Ime metode obrade GPS podataka',
+'exif-gpsareainformation'=> 'Ime GPS područja',
+'exif-gpsdatestamp'     => 'GPS datum',
+'exif-gpsdifferential'  => 'GPS diferencijalna korekcija',
+'exif-compression-1'    => 'Nesažeto',
+'exif-orientation-1'    => 'Normalno',
+'exif-orientation-2'    => 'Zrcaljeno po horizontali',
+'exif-orientation-3'    => 'Zaokrenuto 180°',
+'exif-orientation-4'    => 'Zrcaljeno po vertikali',
+'exif-orientation-5'    => 'Zaokrenuto 90° suprotno od sata i zrcaljeno po vertikali',
+'exif-orientation-6'    => 'Zaokrenuto 90° u smjeru sata',
+'exif-orientation-7'    => 'Zaokrenuto 90° u smjeru sata i zrcaljeno po vertikali',
+'exif-orientation-8'    => 'Zaokrenuto 90° suprotno od sata',
+'exif-planarconfiguration-1'=> 'zrnasti format',
+'exif-planarconfiguration-2'=> 'planarni format',
+'exif-componentsconfiguration-0'=> 'ne postoji',
+'exif-exposureprogram-0'=> 'Nepoznato',
+'exif-exposureprogram-1'=> 'Ručno',
+'exif-exposureprogram-2'=> 'Normalni program',
+'exif-exposureprogram-3'=> 'Prioritet dijafragme',
+'exif-exposureprogram-4'=> 'Prioritet zatvarača',
+'exif-exposureprogram-5'=> 'Umjetnički program (na temelju nužne dubine polja)',
+'exif-exposureprogram-6'=> 'Sportski program (na temelju što bržeg zatvarača)',
+'exif-exposureprogram-7'=> 'Portretni režim (za krupne planove s neoštrom pozadinom)',
+'exif-exposureprogram-8'=> 'Režim krajolika (za slike krajolika s oštrom pozadinom)',
+'exif-subjectdistance-value'=> '$1 metara',
+'exif-meteringmode-0'   => 'Nepoznato',
+'exif-meteringmode-1'   => 'Prosjek',
+'exif-meteringmode-2'   => 'Prosjek s težištem na sredini',
+'exif-meteringmode-3'   => 'Točka',
+'exif-meteringmode-4'   => 'Više točaka',
+'exif-meteringmode-5'   => 'Matrični',
+'exif-meteringmode-6'   => 'Djelomični',
+'exif-meteringmode-255' => 'Drugo',
+'exif-lightsource-0'    => 'Nepoznato',
+'exif-lightsource-1'    => 'Dnevna svjetlost',
+'exif-lightsource-2'    => 'Fluorescentno',
+'exif-lightsource-3'    => 'Volframska žarulja',
+'exif-lightsource-4'    => 'Bljeskalica',
+'exif-lightsource-9'    => 'Lijepo vrijeme',
+'exif-lightsource-10'   => 'Oblačno vrijeme',
+'exif-lightsource-11'   => 'Sjena',
+'exif-lightsource-12'   => 'Fluorescentna svjetlost (D 5700 – 7100K)',
+'exif-lightsource-13'   => 'Fluorescentna svjetlost (N 4600 – 5400K)',
+'exif-lightsource-14'   => 'Fluorescentna svjetlost (W 3900 – 4500K)',
+'exif-lightsource-15'   => 'Bijela fluorescencija (WW 3200 – 3700K)',
+'exif-lightsource-17'   => 'Standardno svjetlo A',
+'exif-lightsource-18'   => 'Standardno svjetlo B',
+'exif-lightsource-19'   => 'Standardno svjetlo C',
+'exif-lightsource-24'   => 'ISO studijska svjetiljka',
+'exif-lightsource-255'  => 'Drugi izvor svjetla',
+'exif-focalplaneresolutionunit-2'=> 'inči',
+'exif-sensingmethod-1'  => 'Nedefinirano',
+'exif-sensingmethod-2'  => 'Jednokristalni matrični senzor',
+'exif-sensingmethod-3'  => 'Dvokristalni matrični senzor',
+'exif-sensingmethod-4'  => 'Trokristalni matrični senzor',
+'exif-sensingmethod-5'  => 'Sekvencijalni matrični senzor',
+'exif-sensingmethod-7'  => 'Trobojni linearni senzor',
+'exif-sensingmethod-8'  => 'Sekvencijalni linearni senzor',
+'exif-filesource-3'     => 'Digitalni fotoaparat',
+'exif-scenetype-1'      => 'Izravno fotografirana slika',
+'exif-customrendered-0' => 'Normalni proces',
+'exif-customrendered-1' => 'Nestadardni proces',
+'exif-exposuremode-0'   => 'Automatski',
+'exif-exposuremode-1'   => 'Ručno',
+'exif-exposuremode-2'   => 'Automatski sa zadanim rasponom',
+'exif-whitebalance-0'   => 'Automatski',
+'exif-whitebalance-1'   => 'Ručno',
+'exif-scenecapturetype-0'=> 'Standardno',
+'exif-scenecapturetype-1'=> 'Pejzaž',
+'exif-scenecapturetype-2'=> 'Portret',
+'exif-scenecapturetype-3'=> 'Noćno',
+'exif-gaincontrol-0'    => 'Nema',
+'exif-gaincontrol-1'    => 'Malo povećanje',
+'exif-gaincontrol-2'    => 'Veliko povećanje',
+'exif-gaincontrol-3'    => 'Malo smanjenje',
+'exif-gaincontrol-4'    => 'Veliko smanjenje',
+'exif-contrast-0'       => 'Normalno',
+'exif-contrast-1'       => 'Meko',
+'exif-contrast-2'       => 'Tvrdo',
+'exif-saturation-0'     => 'Normalno',
+'exif-saturation-1'     => 'Niska saturacija',
+'exif-saturation-2'     => 'Visoka saturacija',
+'exif-sharpness-0'      => 'Normalno',
+'exif-sharpness-1'      => 'Meko',
+'exif-sharpness-2'      => 'Tvrdo',
+'exif-subjectdistancerange-0'=> 'Nepoznato',
+'exif-subjectdistancerange-1'=> 'Krupni plan',
+'exif-subjectdistancerange-2'=> 'Bliski plan',
+'exif-subjectdistancerange-3'=> 'Udaljeno',
+'exif-gpslatitude-n'    => 'Sjever',
+'exif-gpslatitude-s'    => 'Jug',
+'exif-gpslongitude-e'   => 'Istok',
+'exif-gpslongitude-w'   => 'Zapad',
+'exif-gpsstatus-a'      => 'Mjerenje u tijeku',
+'exif-gpsstatus-v'      => 'Spreman za prijenos',
+'exif-gpsmeasuremode-2' => 'Dvodimenzionalno mjerenje',
+'exif-gpsmeasuremode-3' => 'Trodimenzionalno mjerenje',
+'exif-gpsspeed-k'       => 'kmh',
+'exif-gpsspeed-m'       => 'mph',
+'exif-gpsspeed-n'       => 'čv',
+'exif-gpsdirection-t'   => 'Pravi sjever',
+'exif-gpsdirection-m'   => 'Magnetni sjever',
+'edit-externally'       => 'Uredi koristeći se vanjskom aplikacijom',
+'edit-externally-help'  => 'Vidi [http://meta.wikimedia.org/wiki/Help:External_editors setup upute] za više informacija.',
+'recentchangesall'      => 'sve',
+'imagelistall'          => 'sve',
+'watchlistall1'         => 'sve',
+'watchlistall2'         => 'sve',
+'namespacesall'         => 'sve',
+'confirmemail'          => 'Potvrda e-mail adrese',
+'confirmemail_text'     => 'U ovom wikiju morate prije korištenja e-mail naredbi verificirati svoju e-mail adresu. Kliknite na dugme ispod kako biste
+poslali poruku s potvrdom na vašu adresu. U poruci će biti poveznica koju morate otvoriti u
+svom web pregledniku da biste verificirali adresu.',
+'confirmemail_send'     => 'Pošalji kôd za potvrdu e-mail adrese',
+'confirmemail_sent'     => 'Poruka s potvrdom je poslana.',
+'confirmemail_sendfailed'=> 'Poruka s potvrdom nije se mogla poslati. Provjerite pravilnost adrese.',
+'confirmemail_invalid'  => 'Pogrešna potvrda. Kod je možda istekao.',
+'confirmemail_success'  => 'Vaša je e-mail adresa potvrđena. Možete se prijaviti i uživati u wikiju.',
+'confirmemail_loggedin' => 'Vaša je e-mail adresa potvrđena.',
+'confirmemail_error'    => 'Došlo je do greške kod snimanja vaše potvrde.',
+'confirmemail_subject'  => '{{SITENAME}}: potvrda e-mail adrese',
+'confirmemail_body'     => 'Vi ili netko drugi s IP adrese $1 ste otvorili
+suradnički račun pod imenom "$2" s ovom e-mail adresom na Wikipediji.
+
+Kako biste potvrdili da je ovaj suradnički račun uistinu vaš i
+uključili e-mail naredbe na Wikipediji, otvorite u vašem
+pregledniku sljedeću poveznicu:
+
+$3
+
+Ako ovo *niste* vi, nemojte otvarati poveznicu.
+
+Valjanost ovog potvrdnog koda istječe $4.',
+'tryexact'              => 'Pokušaj naći točan pogodak',
+'searchfulltext'        => 'Traži po cjelokupnom tekstu',
+'createarticle'         => 'Stvori članak',
+'scarytranscludedisabled'=> '[Interwiki transkluzija isključena]',
+'scarytranscludefailed' => '[Dobava predloška nije uspjela; $1; ispričavam se]',
+'scarytranscludetoolong'=> '[URL je predug; ispričavam se]',
+'trackbackbox'          => '<div id=\'mw_trackbacks\'>
+\'\'Trackbackovi\'\' za ovaj članak:<br />
+$1
+</div>',
+'trackbackremove'       => ' ([$1 izbrisati])',
+'trackbackdeleteok'     => 'Trackback izbrisan.',
+'deletedwhileediting'   => 'Upozorenje: dok ste uređivali stranicu netko ju je izbrisao!',
+'confirmrecreate'       => 'Suradnik [[User:$1|$1]] ([[User talk:$1|talk]]) izbrisao je ovaj članak nakon što ste ga počeli uređivati. Razlog brisanja
+: \'\'$2\'\'
+Potvrdite namjeru vraćanja ovog članka.',
+'recreate'              => 'Vrati',
+'redirectingto'         => 'Preusmjeravam na [[$1]]...',
+'confirm_purge'         => 'Isprazniti međuspremnik stranice?
+
+$1',
+'youhavenewmessagesmulti'=> 'Imate nove poruke na $1',
+'searchcontaining'      => 'Traži članke koji sadržavaju \'\'$1\'\'.',
+'searchnamed'           => 'Traži članke po imenu \'\'$1\'\'.',
+'articletitles'         => 'Članci koji počinju s \'\'$1\'\'',
+'hideresults'           => 'Sakrij rezultate',
+'displaytitle'          => '(Poveznice na ovu stranicu trebaju biti pod naslovom [[$1]])',
+);
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesHsb.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesHsb.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesHsb.php	(revision 1280)
@@ -0,0 +1,2028 @@
+<?php
+/**
+ * Upper Sorbian (Hornjoserbsce)
+ *
+ * @addtogroup Language
+ */
+
+$fallback = 'de';
+
+$namespaceNames = array(
+	NS_MEDIA            => 'Media',
+	NS_SPECIAL          => 'Specialnje',
+	NS_MAIN             => '',
+	NS_TALK             => 'Diskusija',
+	NS_USER             => 'Wužiwar',
+	NS_USER_TALK        => 'Diskusija_z_wužiwarjom',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK     => '$1_diskusija',
+	NS_IMAGE            => 'Wobraz',
+	NS_IMAGE_TALK       => 'Diskusija_k_wobrazej',
+	NS_MEDIAWIKI        => 'MediaWiki',
+	NS_MEDIAWIKI_TALK   => 'MediaWiki_diskusija',
+	NS_TEMPLATE         => 'Předłoha',
+	NS_TEMPLATE_TALK    => 'Diskusija_k_předłoze',
+	NS_HELP             => 'Pomoc',
+	NS_HELP_TALK        => 'Pomoc_diskusija',
+	NS_CATEGORY         => 'Kategorija',
+	NS_CATEGORY_TALK    => 'Diskusija_ke_kategoriji'
+);
+
+
+$messages = array(
+# User preference toggles
+'tog-underline'               => 'Wotkazy podšmórnić:',
+'tog-highlightbroken'         => 'Wotkazy na prózdne strony wuzběhnyć',
+'tog-justify'                 => 'Wobsah stron w blokowej sadźbje',
+'tog-hideminor'               => 'Snadne změny w aktualnych změnach schować',
+'tog-extendwatchlist'         => 'Rozšěrjena lisćina wobkedźbowankow',
+'tog-usenewrc'                => 'Rozšěrjena lisćina aktualnych změnow (trjeba JavaScript)',
+'tog-numberheadings'          => 'Nadpisma awtomatisce čisłować',
+'tog-showtoolbar'             => 'Gratowu lajstu pokazać (JavaScript)',
+'tog-editondblclick'          => 'Strony z dwójnym kliknjenjom wobdźěłować (JavaScript)',
+'tog-editsection'             => 'Wobdźěłowanje jednotliwych wotrězkow přez wotkazy [wobdźěłać] zmóžnić',
+'tog-editsectiononrightclick' => 'Wobdźěłowanje jednotliwych wotrězkow přez kliknjenje z prawej tastu<br />na nadpisma wotrězkow zmóžnić (JavaScript)',
+'tog-showtoc'                 => 'Zapis wobsaha pokazać (za strony z wjace hač 3 nadpismami)',
+'tog-rememberpassword'        => 'Hesło na tutym ličaku składować',
+'tog-editwidth'               => 'Wobdźěłanske polo ma połnu šěrokosć',
+'tog-watchcreations'          => 'Strony, kotrež wutworjam, swojim wobkedźbowankam přidać',
+'tog-watchdefault'            => 'Strony, kotrež wobdźěłuju, swojim wobkedźbowankam přidać',
+'tog-watchmoves'              => 'Sam přesunjene strony wobkedźbowankam přidać',
+'tog-watchdeletion'           => 'Sam wušmórnjene strony wobkedźbowankam přidać',
+'tog-minordefault'            => 'Wšě změny zwoprědka jako snadne woznamjenić',
+'tog-previewontop'            => 'Přehlad nad wobdźěłanskim polom pokazać',
+'tog-previewonfirst'          => 'Do składowanja přeco přehlad pokazać',
+'tog-nocache'                 => 'Pufrowanje strony znjemóžnić',
+'tog-enotifwatchlistpages'    => 'Mejlku pósłać, hdyž so strona, kotruž wobkedźbuju, změni',
+'tog-enotifusertalkpages'     => 'Mejlku pósłać, hdyž so moja wužiwarska diskusijna strona změni',
+'tog-enotifminoredits'        => 'Tež dla snadnych změnow mejlki pósłać',
+'tog-enotifrevealaddr'        => 'Moju e-mejlowu adresu w e-mejlowych zdźělenkach wotkryć',
+'tog-shownumberswatching'     => 'Ličbu wobkedźbowacych wužiwarjow pokazać',
+'tog-fancysig'                => 'Hrube signatury (bjez awtomatiskeho wotkaza)',
+'tog-externaleditor'          => 'Eksterny editor jako standard wužiwać',
+'tog-externaldiff'            => 'Eksterny diff-program jako standard wužiwać',
+'tog-showjumplinks'           => 'Wotkazy typa „dźi do” zmóžnić',
+'tog-uselivepreview'          => 'Live-přehlad wužiwać (JavaScript) (eksperimentalnje)',
+'tog-forceeditsummary'        => 'Mje skedźbnić, zabudu-li zjeće',
+'tog-watchlisthideown'        => 'Moje změny we wobkedźbowankach schować',
+'tog-watchlisthidebots'       => 'Změny awtomatiskich programow (botow) we wobkedźbowankach schować',
+'tog-watchlisthideminor'      => 'Snadne změny we wobkedźbowankach schować',
+'tog-nolangconversion'        => 'Konwertowanje rěčnych wariantow znjemóžnić',
+'tog-ccmeonemails'            => 'Kopije mejlkow dóstać, kiž druhim wužiwarjam pósćelu',
+'tog-diffonly'                => 'Jenož rozdźěle pokazać (nic pak zbytny wobsah)',
+
+'underline-always'  => 'přeco',
+'underline-never'   => 'ženje',
+'underline-default' => 'po standardźe wobhladowaka',
+
+'skinpreview' => '(Přehlad)',
+
+# Dates
+'sunday'        => 'Njedźela',
+'monday'        => 'Póndźela',
+'tuesday'       => 'Wutora',
+'wednesday'     => 'Srjeda',
+'thursday'      => 'Štwórtk',
+'friday'        => 'Pjatk',
+'saturday'      => 'Sobota',
+'sun'           => 'Njedź',
+'mon'           => 'Pón',
+'tue'           => 'Wut',
+'wed'           => 'Srj',
+'thu'           => 'Štw',
+'fri'           => 'Pja',
+'sat'           => 'Sob',
+'january'       => 'januar',
+'february'      => 'februar',
+'march'         => 'měrc',
+'april'         => 'apryl',
+'may_long'      => 'meja',
+'june'          => 'junij',
+'july'          => 'julij',
+'august'        => 'awgust',
+'september'     => 'september',
+'october'       => 'oktober',
+'november'      => 'nowember',
+'december'      => 'december',
+'january-gen'   => 'januara',
+'february-gen'  => 'februara',
+'march-gen'     => 'měrca',
+'april-gen'     => 'apryla',
+'may-gen'       => 'meje',
+'june-gen'      => 'junija',
+'july-gen'      => 'julija',
+'august-gen'    => 'awgusta',
+'september-gen' => 'septembra',
+'october-gen'   => 'oktobra',
+'november-gen'  => 'nowembra',
+'december-gen'  => 'decembra',
+'jan'           => 'jan',
+'feb'           => 'feb',
+'mar'           => 'měr',
+'apr'           => 'apr',
+'may'           => 'meje',
+'jun'           => 'jun',
+'jul'           => 'jul',
+'aug'           => 'awg',
+'sep'           => 'sep',
+'oct'           => 'okt',
+'nov'           => 'now',
+'dec'           => 'dec',
+
+# Bits of text used by many pages
+'categories'            => '{{PLURAL:$1|Kategorija|Kategorije}}',
+'pagecategories'        => '{{PLURAL:$1|Kategorija|Kategorije}}',
+'category_header'       => 'Nastawki w kategoriji „$1”',
+'subcategories'         => 'Podkategorije',
+'category-media-header' => 'Dataje w kategoriji „$1”',
+
+'mainpagetext'      => '<big><b>MediaWiki bu wuspěšnje instalowany.</b></big>',
+'mainpagedocfooter' => 'Prošu hlej [http://meta.wikimedia.org/wiki/Help:Contents dokumentaciju] za informacije wo wužiwanju softwary.
+
+== Za nowačkow ==
+
+* [http://www.mediawiki.org/wiki/Help:Configuration_settings Wo nastajenjach]
+* [http://www.mediawiki.org/wiki/Help:FAQ MediaWiki FAQ]
+* [http://mail.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]',
+
+'about'          => 'Wo',
+'article'        => 'Nastawk',
+'newwindow'      => '(wočinja so w nowym woknje)',
+'cancel'         => 'Přetorhnyć',
+'qbfind'         => 'Namakać',
+'qbbrowse'       => 'Přepytować',
+'qbedit'         => 'wobdźěłać',
+'qbpageoptions'  => 'stronu',
+'qbpageinfo'     => 'Kontekst',
+'qbmyoptions'    => 'Moje strony',
+'qbspecialpages' => 'Specialne strony',
+'moredotdotdot'  => 'Wjace…',
+'mypage'         => 'Moja strona',
+'mytalk'         => 'Moja diskusija',
+'anontalk'       => 'Z tutej IP diskutować',
+'navigation'     => 'Nawigacija',
+
+# Metadata in edit box
+'metadata_help' => 'Metadaty:',
+
+'errorpagetitle'    => 'Zmylk',
+'returnto'          => 'Wróćo k stronje $1.',
+'tagline'           => 'z {{GRAMMAR:genitiw|{{SITENAME}}}}',
+'help'              => 'Pomoc',
+'search'            => 'Pytać',
+'searchbutton'      => 'Pytać',
+'go'                => 'Nastawk',
+'searcharticle'     => 'Nastawk',
+'history'           => 'stawizny',
+'history_short'     => 'stawizny',
+'updatedmarker'     => 'Změny z mojeho poslednjeho wopyta',
+'info_short'        => 'Informacija',
+'printableversion'  => 'Ćišćomna wersija',
+'permalink'         => 'Trajny wotkaz',
+'print'             => 'Ćišćeć',
+'edit'              => 'wobdźěłać',
+'editthispage'      => 'Stronu wobdźěłać',
+'delete'            => 'Wušmórnyć',
+'deletethispage'    => 'Stronu wušmórnyć',
+'undelete_short'    => '{{PLURAL:$1|jednu wersiju|$1 wersiji|$1 wersije|$1 wersijow}} wobnowić',
+'protect'           => 'Škitać',
+'protectthispage'   => 'Stronu škitać',
+'unprotect'         => 'Škit zběhnyć',
+'unprotectthispage' => 'Škit strony zběhnyć',
+'newpage'           => 'Nowa strona',
+'talkpage'          => 'Diskusija',
+'specialpage'       => 'Specialna strona',
+'personaltools'     => 'Wosobinske nastroje',
+'postcomment'       => 'Komentar dodawać',
+'articlepage'       => 'Nastawk',
+'talk'              => 'Diskusija',
+'views'             => 'Zwobraznjenja',
+'toolbox'           => 'Nastroje',
+'userpage'          => 'Wužiwarsku stronu pokazać',
+'projectpage'       => 'Projektowu stronu pokazać',
+'imagepage'         => 'Wobrazowu stronu pokazać',
+'mediawikipage'     => 'Powěsć pokazać',
+'templatepage'      => 'Předłohu pokazać',
+'viewhelppage'      => 'Pomocnu stronu pokazać',
+'categorypage'      => 'Kategoriju pokazać',
+'viewtalkpage'      => 'Diskusiju pokazać',
+'otherlanguages'    => 'W druhich rěčach',
+'redirectedfrom'    => '(Ze strony „$1” sposrědkowane)',
+'redirectpagesub'   => 'Daleposrědkowanje',
+'lastmodifiedat'    => 'Strona bu posledni raz dnja $1 w $2 hodź. změnjena.', # $1 date, $2 time
+'viewcount'         => 'Strona bu $1 króć wopytana.',
+'protectedpage'     => 'Škitana strona',
+'jumpto'            => 'Dźi do:',
+'jumptonavigation'  => 'Nawigacija',
+'jumptosearch'      => 'Pytać',
+
+# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
+'aboutsite'         => 'Wo {{GRAMMAR:lokatiw|{{SITENAME}}}}',
+'aboutpage'         => '{{ns:project}}:Wo {{GRAMMAR:lokatiw|{{SITENAME}}}}',
+'bugreports'        => 'Bug reports',
+'bugreportspage'    => '{{ns:project}}:Bug reports',
+'copyright'         => 'Wobsah steji pod $1.',
+'copyrightpagename' => '{{SITENAME}} awtorske prawa',
+'copyrightpage'     => '{{ns:project}}:Awtorske prawa',
+'currentevents'     => 'Aktualne podawki',
+'currentevents-url' => 'Aktualne podawki',
+'disclaimers'       => 'Licencne postajenja',
+'disclaimerpage'    => '{{ns:project}}:Licencne postajenja',
+'edithelp'          => 'Pomoc za wobdźěłowanje',
+'edithelppage'      => '{{ns:help}}:Wobdźěłanje',
+'faq'               => 'Husto stajene prašenja (FAQ)',
+'faqpage'           => '{{ns:project}}:FAQ',
+'helppage'          => '{{ns:project}}:Pomoc',
+'mainpage'          => 'Hłowna strona',
+'policy-url'        => '{{ns:project}}:Policy',
+'portal'            => 'Portal {{GRAMMAR:genitiw|{{SITENAME}}}}',
+'portal-url'        => '{{ns:project}}:Portal',
+'privacy'           => 'Škit datow',
+'privacypage'       => '{{ns:project}}:Škit datow',
+'sitesupport'       => 'Dary',
+'sitesupport-url'   => '{{ns:project}}:Darić',
+
+'badaccess'        => 'Nimaš wotpowědne dowolnosće',
+'badaccess-group0' => 'Nimaš wotpowědne dowolnosće za tutu akciju.',
+'badaccess-group1' => 'Tuta akcija da so jenož wot wužiwarjow skupiny $1 wuwjesć.',
+'badaccess-group2' => 'Tuta akcija da so jenož wot wužiwarjow skupin $1 wuwjesć.',
+'badaccess-groups' => 'Tuta akcija da so jenož wot wužiwarjow skupin $1 wuwjesć.',
+
+'versionrequired'     => 'Wersija $1 softwary MediaWiki trěbna',
+'versionrequiredtext' => 'Wersija $1 softwary MediaWiki je trěbna, zo by so tuta strona wužiwać móhła. Hlej [[{{ns:special}}:Version]]',
+
+'ok'                  => 'W porjadku',
+'pagetitle'           => '$1 - {{SITENAME}}',
+'retrievedfrom'       => 'Z {{GRAMMAR:genitiw|"$1"}}',
+'youhavenewmessages'  => 'Maš $1 ($2).',
+'newmessageslink'     => 'nowe powěsće',
+'newmessagesdifflink' => 'poslednja změna',
+'editsection'         => 'wobdźěłać',
+'editold'             => 'wobdźěłać',
+'editsectionhint'     => 'Wotrězk wobdźěłać: $1',
+'toc'                 => 'Wobsah',
+'showtoc'             => 'pokazać',
+'hidetoc'             => 'schować',
+'thisisdeleted'       => '$1 pokazać abo wobnowić?',
+'viewdeleted'         => '$1 pokazać?',
+'restorelink'         => '{{PLURAL:$1|1 wušmórnjenu wersiju|$1 wušmórnjenej wersiji|$1 wušmórnjene wersije|$1 wušmórnjenych wersijow}}',
+'feedlinks'           => 'Newsfeed:',
+'feed-invalid'        => 'Njepłaćiwy typ abonementa.',
+
+# Short words for each namespace, by default used in the 'article' tab in monobook
+'nstab-main'      => 'Nastawk',
+'nstab-user'      => 'Wužiwarska strona',
+'nstab-media'     => 'Medije',
+'nstab-special'   => 'specialna strona',
+'nstab-project'   => 'Projektowa strona',
+'nstab-image'     => 'Dataja',
+'nstab-mediawiki' => 'zdźělenka',
+'nstab-template'  => 'Předłoha',
+'nstab-help'      => 'Pomoc',
+'nstab-category'  => 'Kategorija',
+
+# Main script and global functions
+'nosuchaction'      => 'Žana tajka akcija',
+'nosuchactiontext'  => 'Akcija podata z URL njebu wot wikija připóznata.',
+'nosuchspecialpage' => 'Žana tajka specialna strona',
+'nospecialpagetext' => 'Tuta specialna strona w tutym wikiju njeeksistuje; lisćina płaćiwych specialnych stronow hodźi so pod [[{{ns:special}}:Specialpages]] namakać.',
+
+# General errors
+'error'                => 'Zmylk',
+'databaseerror'        => 'Zmylk w datowej bance',
+'dberrortext'          => 'Syntaktiski zmylk při wotprašowanju datoweje banki.
+To móhło bug w programje być. Poslednje spytane wotprašenje w datowej bance běše:
+<blockquote><tt>$1</tt></blockquote>
+z funkcije „<tt>$2</tt>”.
+MySQL wróći zmylk „<tt>$3: $4</tt>”.',
+'dberrortextcl'        => 'Syntaktiski zmylk je we wotprašowanju datoweje banki wustupił.
+Poslednje wotprašenje w datowej bance běše:
+„$1”
+z funkcije „$2”.
+MySQL wróći zmylk „$3: $4”.',
+'noconnect'            => 'Wodaj! Wiki ma techniske problemy a njemóže ze serwerom datoweje banki zwjazać.
+<br />
+$1',
+'nodb'                 => 'Datowa banka $1 njeda so wubrać',
+'cachederror'          => 'Naslědne je kopija z pufrowaka a njemóhło hižo aktualne być.',
+'laggedslavemode'      => 'Kedźbu: Je móžno, zo strona žane zaktualizowanja njewobsahuje.',
+'readonly'             => 'Datowa banka je zawrjena',
+'enterlockreason'      => 'Zapodaj přičinu za zawrjenje a přibližny čas, hdy budźe zawrjenje zběhnjene',
+'readonlytext'         => 'Datowa banka je tuchwilu za nowe zapiski a druhe změny zawrjena, najskerje wothladowanskich dźěłow dla; po jich zakónčenju budźe wšitko zaso normalne.
+
+Administrator, kiž je datowu banku zawrěł, je naslědnu přičinu podał: $1',
+'missingarticle'       => 'Datowa banka njeje tekst strony, kotraž ma mjeno „$1”, namakała, byrnjež jón poprawom namakać dyrbjała.
+
+To so z wašnjom přez zestarjeny wotkaz do zničeneje strony zawinuje.
+
+Jeli tomu tak njeje, sy snano zmylk w softwarje namakał. Prošu informuj administratora wo tym a zdźěl jemu wužity URL.',
+'readonly_lag'         => 'Datowa banka bu awtomatisce zawrjena, mjeztym zo pospytuja wotwisne serwery datowych bankow  hłowny serwer docpěć',
+'internalerror'        => 'Znutřkowny zmylk',
+'filecopyerror'        => 'Njebě móžno dataju „$1” k „$2” kopěrować.',
+'filerenameerror'      => 'Njebě móžno dataju „$1” na „$2” přemjenować.',
+'filedeleteerror'      => 'Njebě móžno dataju „$1” wušmórnyć.',
+'filenotfound'         => 'Njebě móžno dataju „$1” namakać.',
+'unexpected'           => 'Njewočakowana hódnota: "$1"="$2".',
+'formerror'            => 'Zmylk: njeje móžno formular wotesłać',
+'badarticleerror'      => 'Tuta akcija njeda so na tutej stronje wuwjesć.',
+'cannotdelete'         => 'Njeje móžno podatu stronu abo dataju wušmórnyć. (Po zdaću je to hižo něchtó druhi činił.)',
+'badtitle'             => 'Wopačny titul',
+'badtitletext'         => 'Požadany titul strony běše njepłaćiwy, prózdny abo njekorektny titul z inter-rěč abo inter-wiki. Snano wobsahuje jedne znamješko abo wjacore znamješka, kotrež w titulach dowolene njejsu.',
+'perfdisabled'         => 'Wodaj! Tuta funkcija bu nachwilnje znjemóžnjena, dokelž datowu banku tak spomaluje, zo hižo nichtó wiki wužiwać njemóže.',
+'perfdisabledsub'      => 'Tu je składowana kopija z $1:', # obsolete?
+'perfcached'           => 'Naslědne daty z pufrowaka pochadźeja a snano cyle aktualne njejsu.',
+'perfcachedts'         => 'Naslědne daty su z pufrowaka a buchu $1 posledni raz zaktualizowane.',
+'querypage-no-updates' => "'''Aktualizacija za tutu stronu je tuchwilu znjemóžnjena. Daty so hač na dalše njewobnowjeja.'''",
+'wrong_wfQuery_params' => 'Njeprawe parametry za wfQuery()
+
+Funkcija: $1
+
+Wotprašenje: $2',
+'viewsource'           => 'Žórło wobhladać',
+'viewsourcefor'        => 'za $1',
+'protectedpagetext'    => 'Strona je přećiwo wobdźěłowanju škitana.',
+'viewsourcetext'       => 'Móžeš pak žórło strony wobhladać a jo kopěrować:',
+'protectedinterface'   => 'Tuta strona skići tekst za rěčny zwjerch a je škitana zo by znjewužiwanju zadźěwało.',
+'editinginterface'     => '<b>Kedźbu:</b> Wobdźěłuješ stronu, kotraž wobsahuje tekt za rěčny zwjerch. Změnjenja wuskutkuja so na wšěch druhich wužiwarjow tutoho rěčneho zwjercha.',
+'sqlhidden'            => '(SQL wotprašenje schowane)',
+'cascadeprotected'     => 'Strona je za wobdźěłowanje zawrjene, dokelž je w naslědnich stronach zapřijata, kotrež su přez kaskadowu opciju škitane:',
+
+# Login and logout pages
+'logouttitle'                => 'Wotzjewjenje',
+'logouttext'                 => '<strong>Sy nětko wotzjewjeny.</strong><br />
+Móžeš {{GRAMMAR:akuzatiw|{{SITENAME}}}} nětko anonymnje dale wužiwać abo so ze samsnym abo druhim wužiwarskim mjenom zaso přizjewić. Wobkedźbuj zo so někotre strony dale jewja kaž by hišće přizjewjeny był doniž pufrowak swojeho wobhladowaka njewuprózdnješ.',
+'welcomecreation'            => '== Witaj, $1! ==
+
+Twoje konto bu wutworjene. Njezabudź swoje nastajenja za {{GRAMMAR:akuzatiw|{{SITENAME}}}} změnić.',
+'loginpagetitle'             => 'Přizjewjenje',
+'yourname'                   => 'Wužiwarske mjeno',
+'yourpassword'               => 'Hesło',
+'yourpasswordagain'          => 'Hesło znowa zapodać',
+'remembermypassword'         => 'Hesło na tutym ličaku sej spomjatkować',
+'yourdomainname'             => 'Twoja domejna',
+'externaldberror'            => 'Běše pak eksterny zmylk awtentifikacije datoweje banki, pak njesměš swoje eksterne konto aktualizować.',
+'loginproblem'               => '<b>Běše problem z přizjewjenjom.</b><br />
+
+Prošu spytaj hišće raz!',
+'alreadyloggedin'            => '<strong>Wužiwarjo $1, sy hižo přizjewjeny!</strong><br />',
+'login'                      => 'Přizjewić',
+'loginprompt'                => 'Zo by so pola {{GRAMMAR:genitiw|{{SITENAME}}}} přizjewić móhł, dyrbja so placki (cookies) zmóžnić.',
+'userlogin'                  => 'Konto wutworić abo so přizjewić',
+'logout'                     => 'Wotzjewić',
+'userlogout'                 => 'Wotzjewić',
+'notloggedin'                => 'Njepřizjewjeny',
+'nologin'                    => 'Nimaš žane konto? $1.',
+'nologinlink'                => 'Wužiwarske konto wutworić',
+'createaccount'              => 'Wužiwarske konto wutworić',
+'gotaccount'                 => 'Maš hižo wužiwarske konto? $1.',
+'gotaccountlink'             => 'Přizjewić',
+'createaccountmail'          => 'z e-mejlu',
+'badretype'                  => 'Hesle, kotrejž sy zapodał, so njekryjetej.',
+'userexists'                 => 'Wužiwarske mjeno, kotrež sy wubrał, so hižo wužiwa. Prošu wubjer druhe mjeno.',
+'youremail'                  => 'E-mejl *:',
+'username'                   => 'Wužiwarske mjeno:',
+'uid'                        => 'ID wužiwarja:',
+'yourrealname'               => 'Woprawdźite mjeno *',
+'yourlanguage'               => 'Rěč:',
+'yourvariant'                => 'Warianta',
+'yournick'                   => 'Přimjeno:',
+'badsig'                     => 'Njepłaćiwa signatura, prošu HTML přepruwować.',
+'email'                      => 'E-mejl',
+'prefs-help-email-enotif'    => 'Tuta adresa so wužiwa, zo bychu so ći mejlki pósłali, jeli sy tute opcije zmóžnił.',
+'prefs-help-realname'        => '* Woprawdźite mjeno (opcionalne): jeli so rozsudźiš to zapodać, budźe to so wužiwać, zo by tebi woprawnjenje za twoje dźěło dało.',
+'loginerror'                 => 'Zmylk při přizjewjenju',
+'prefs-help-email'           => '* E-mejl (opcionalny): Zmóžnja druhim će přez twoju wužiwarsku abo diskusijnu stronu kontaktować, bjeztoho zo by swoju identitu wotkryć dyrbjał. Jeli sy swoje hesło zabył, budźe móžno, ći nowe hesło připósłać.',
+'nocookiesnew'               => 'Wužiwarske konto bu wutworjene, njejsy pak přizjewjeny. {{SITENAME}} wužiwa placki (cookies), zo bychu so wužiwarjo přizjewili. Sy placki znjemóžnił. Prošu zmóžń je a přizjew so potom ze swojim nowym wužiwarskim mjenom a hesłom.',
+'nocookieslogin'             => '{{SITENAME}} wužiwa placki (cookies) za přizjewjenje wužiwarjow wužiwa. Sy placki znjemóžnił. Prošu zmóžń je a spytaj hišće raz.',
+'noname'                     => 'Njejsy płaćiwe wužiwarske mjeno podał.',
+'loginsuccesstitle'          => 'Přizjewjenje wuspěšne',
+'loginsuccess'               => '<b>Sy nětko jako „$1” w {{GRAMMAR:lokatiw|{{SITENAME}}}} přizjewjeny.</b>',
+'nosuchuser'                 => 'Njeje wužiwar z mjenom „$1”. Přepruwuj prawopis abo wutwor nowe konto.',
+'nosuchusershort'            => 'Wužiwarske mjeno „$1” njeeksistuje. Prošu přepruwuj prawopis.',
+'nouserspecified'            => 'Dyrbiš wužiwarske mjeno podać',
+'wrongpassword'              => 'Hesło, kotrež sy zapodał, je wopačne. Prošu spytaj hišće raz.',
+'wrongpasswordempty'         => 'Hesło, kotrež sy zapodał, běše prózdne. Prošu spytaj hišće raz.',
+'mailmypassword'             => 'Pósćelće mi nowe hesło',
+'passwordremindertitle'      => 'Skedźbnjenje na hesło z {{GRAMMAR:genitiw|{{SITENAME}}}}',
+'passwordremindertext'       => 'Něchtó (najskerje ty, z IP-adresu $1) je wo nowe hesło za přizjewjenje pola {{GRAMMAR:genitiw|{{SITENAME}}}} ($4) prosył. Hesło za wužiwarja „$2” je nětko $3.
+Ty měł so nětko přizjewić a swoje hesło změnić.
+
+Jeli něchto druhi hač ty wo nowe hesło prosył, abo sy so zaso na njo dopomnił a hižo nochceš je změnić, móžeš tutu powěsć ignorować a swoje stare hesło dale wužiwać.',
+'noemail'                    => 'Za wužiwarja $1 žana e-mejlowa adresa podata njeje.',
+'passwordsent'               => 'Nowe hesło bu na e-mejlowu adresu zregistrowanu za wužiwarja „$1” pósłane.
+Prošu přizjew so znowa, po tym zo sy je přijał.',
+'blocked-mailpassword'       => 'Twoja IP-adresa je přećiwo wobdźěłowanju zawrjene a tohodla njeje dowolene, nowe hesło požadać, zo by znjewužiwanju zadźěwało.',
+'eauthentsent'               => 'Wobkrućenska mejlka bu na naspomnjenu e-mejlowu adresu pósłana.
+Prjedy hač so druha mejlka ke kontu pósćele, dyrbiš so po instrukcijach w mejlce měć, zo by wobkrućił, zo konto je woprawdźe twoje.',
+'throttled-mailpassword'     => 'Bu hižo nowe hesło znutřka {{Plural:$1|poslednjeje hodźiny|poslednjeju hodźinow|poslednich hodźin|poslednich hodźin}} pósłane. Zo by znjewužiwanju zadźěwało, so jenož jedne hesło na {{Plural:$1|hodźinu|hodźinje|hodźiny|hodźinow}} pósćele.',
+'mailerror'                  => 'Zmylk při słanju mejlki: $1',
+'acct_creation_throttle_hit' => 'Wodaj, sy hižo $1 kontow wutworił(a). Njemóžeš dalše wutworić.',
+'emailauthenticated'         => 'Twoja e-mejlowa adresa bu $1 wobkrućena.',
+'emailnotauthenticated'      => 'Twoja e-mejlowa adresa hišće wobkrućena <strong>njeje</strong>. Žadyn email za jednu z naslědnich funkcijow pósłany njebudźe.',
+'noemailprefs'               => 'Podaj e-mejlowu adresu za tute funkcije, zo bychu fungowali.',
+'emailconfirmlink'           => 'Wobkruć swoju e-mejlowu adresu',
+'invalidemailaddress'        => 'E-mejlowa adresa njeda so akceptować, dokelž ma po zdaću njepłaćiwy
+format. Prošu zapodaj płaćiwu adresu abo wuprózdń polo.',
+'accountcreated'             => 'Wužiwarske konto wutworjene',
+'accountcreatedtext'         => 'Wužiwarske konto za $1 bu wutworjene.',
+
+# Password reset dialog
+'resetpass'               => 'Hesło za wužiwarske konto wróćo stajić',
+'resetpass_announce'      => 'Sy so z nachwilnym e-mejlowanym hesłom přizjewił. Zo by přizjewjenje zakónčił, dyrbiš nětko nowe hesło postajić.',
+'resetpass_text'          => '<!-- Add text here -->',
+'resetpass_header'        => 'Hesło wróćo stajić',
+'resetpass_submit'        => 'Hesło posrědkować a so přizjewić',
+'resetpass_success'       => 'Twoje hesło bu wuspěšnje změnjene! Nětko přizjewjenje běži...',
+'resetpass_bad_temporary' => 'Njepłaćiwe nachwilne hesło. Snano sy swoje hesło hižo wuspěšnje změnił abo nowe nachwilne hesło požadał.',
+'resetpass_forbidden'     => 'Hesła njehodźa so w tutym wikiju změnić.',
+'resetpass_missing'       => 'Prózdny formular.',
+
+# Edit page toolbar
+'bold_sample'     => 'Tučny tekst',
+'bold_tip'        => 'Tučny tekst',
+'italic_sample'   => 'Kursiwny tekst',
+'italic_tip'      => 'Kursiwny tekst',
+'link_sample'     => 'Mjeno wotkaza',
+'link_tip'        => 'Znutřkowny wotkaz',
+'extlink_sample'  => 'http://www.přikład.de Mjeno wotkaza',
+'extlink_tip'     => 'Zwonkowny wotkaz (pomyslće sej na prefiks http://)',
+'headline_sample' => 'Nadpismo',
+'headline_tip'    => 'Nadpismo runiny 2',
+'math_sample'     => 'Zasuń tu formulu',
+'math_tip'        => 'Matematiska formula (LaTeX)',
+'nowiki_sample'   => 'Zasuń tu njeformatowany tekst',
+'nowiki_tip'      => 'Wiki-syntaksu ignorować',
+'image_sample'    => 'Přikład.jpg',
+'image_tip'       => 'Zasadźeny wobraz',
+'media_sample'    => 'Přikład.ogg',
+'media_tip'       => 'Wotkaz k mediowej dataji',
+'sig_tip'         => 'Twoja signatura z časowym kołkom',
+'hr_tip'          => 'Wodoruna linija (zrědka wužiwać)',
+
+# Edit pages
+'summary'                   => 'Zjeće',
+'subject'                   => 'Tema/Nadpismo',
+'minoredit'                 => 'Snadna změna',
+'watchthis'                 => 'stronu wobkedźbować',
+'savearticle'               => 'Składować',
+'preview'                   => 'Přehlad',
+'showpreview'               => 'Přehlad pokazać',
+'showlivepreview'           => 'Hnydomny přehlad',
+'showdiff'                  => 'Změny pokazać',
+'anoneditwarning'           => '<b>Kedźbu:</b> Njejsy přizjewjeny. Změny so z twojej IP-adresu składuja.',
+'missingsummary'            => '<b>Kedźbu:</b> Njejsy žane zjeće zapodał. Jeli hišće raz na „Składować” kliknješ so twoje změny bjez komentara składuja.',
+'missingcommenttext'        => 'Prošu zapodaj zjeće.',
+'missingcommentheader'      => "'''Kedźbu:''' Njejsy nadpis za tutón komentar podał. Jeli na „Składować” kliknješ, budźe so twoja změna bjez nadpisa składować.",
+'summary-preview'           => 'Přehlad zjeća',
+'subject-preview'           => 'Přehlad temy',
+'blockedtitle'              => 'Wužiwar je zablokowany',
+'blockedtext'               => "<big>'''Twoje wužiwarske mjeno abo twoja IP-adresa bu přez administratora $1 blokowane(-a).'''</big>
+
+Podata přičina je: $2.
+
+Ty móhł wužiwarja $1 kontaktować abo jednoho z druhich [[{{MediaWiki:grouppage-sysop}}|administratorow]], zo byštej blokowanje diskutowałoj.
+
+Njemóžeš e-majlowe funkcije wužiwać, chibazo sy płaćiwu e-mejlowu adresu w swojich [[{{ns:special}}:Preferences|kontowych nastajenjach]] zapodał. Twoja tuchwilna IP-adresa je $3 a blokowa ID je #$5. Prošu podaj jedyn z njeju abo wobaj we swojich naprašowanjach.",
+'blockedoriginalsource'     => 'To je žórłowy tekst strony <b>$1</b>:',
+'blockededitsource'         => 'Tekst <b>twojich změnow</b> strony <b>$1</b> so tu pokazuje:',
+'whitelistedittitle'        => 'Za wobdźěłowanje je přizjewjenje trěbne.',
+'whitelistedittext'         => 'Dyrbiš so $1, zo by strony wobdźěłować móhł.',
+'whitelistreadtitle'        => 'Za čitanje je přizjewjenje trěbne.',
+'whitelistreadtext'         => 'Dyrbiš so [[{{ns:special}}:Userlogin|přizjewić]], zo by strony čitać móhł.',
+'whitelistacctitle'         => 'Njesměš konto wutworić',
+'whitelistacctext'          => 'Zo by konta w tutym wikiju wutworjeć směł, dyrbiš so [[{{ns:special}}:Userlogin|přizjewić]] a trěbne dowolnosće měć.',
+'confirmedittitle'          => 'Twoja e-mejlowa adresa dyrbi so wobkrućić, prjedy hač móžeš strony wobdźěłować.',
+'confirmedittext'           => 'Twoja e-mejlowu adresa dyrbi so wobkrućić, prjedy hač móžeš strony wobdźěłować. Prošu zapodaj a wobkruć swoju e-mejlowu adresu z pomocu [[{{ns:special}}:Preferences|wužiwarskich nastajenjow]].',
+'loginreqtitle'             => 'Přizjewjenje trěbne',
+'loginreqlink'              => 'přizjewić',
+'loginreqpagetext'          => 'Dyrbiš so $1, zo by strony čitać móhł.',
+'accmailtitle'              => 'Hesło bu pósłane.',
+'accmailtext'               => 'Hesło za wužiwarja [[{{ns:user}}:$1]] bu na adresu $2 pósłane.',
+'newarticle'                => '(Nowy nastawk)',
+'newarticletext'            => 'Sy wotkaz k stronje slědował, kotraž hišće njeeksistuje. Zo by stronu wutworił, wupjelń tekstowe polo deleka (hlej [[{{MediaWiki:helppage}}|stronu pomocy]] za wjace informacijow). Jeli sy zmylnje tu, klikń na tłóčku <b>Wróćo</b> swojeho wobhladowaka.',
+'anontalkpagetext'          => '----
+<i>To je diskusijna strona za anonymneho wužiwarja, kiž hišće konto wutworił njeje abo je njewužiwa. Dyrbimy tohodla numerisku IP-adresu wužiwać, zo bychmy jeho/ju identifikowali. Tajka adresa hodźi so wot wjacorych wužiwarjow zhromadnje wužiwać. Jeli sy anonymny wužiwar a měniš, zo buchu irelewantne komentary k tebi pósłane, [[{{ns:special}}:Userlogin|wutwor konto abo přizjew so]], zo by přichodnu šmjatańcu wobešoł.</i>',
+'noarticletext'             => 'Tuchwilu tuta strona žadyn tekst njewobsahuje, móžeš jeje titul w druhich stronach [[{{ns:special}}:Search/{{PAGENAME}}|pytać]] abo [{{fullurl:{{FULLPAGENAME}}|action=edit}} stronu wutworić].',
+'clearyourcache'            => '<b>Kedźbu:</b> Po składowanju dyrbiš snano pufrowak swojeho wobhladowaka wuprózdnić, <b>Mozilla/Firefox/Safari:</b> tłóč na <i>Umsch</i> kliknjo na <i>Znowa</i> abo tłóč <i>Strg-Umsch-R</i> (<i>Cmd-Shift-R</i> na Apple Mac); <b>IE:</b> tłóč <i>Strg</i> kliknjo na symbol <i>Aktualisieren</i> abo tłóč <i>Strg-F5</i>; <b>Konqueror:</b>: Klikń jenož na tłóčatko <i>Erneut laden</i> abo tłoč  <i>F5</i>; Wužiwarjo <b>Opery</b> móža swój pufrowak dospołnje  w <i>Tools→Preferences</i> wuprózdnić.',
+'usercssjsyoucanpreview'    => '<strong>Pokiw:</strong> Wužij tłóčku „Přehlad”, zo by swój nowy css/js do składowanja testował.',
+'usercsspreview'            => "== Přehlad twojeho wosobinskeho CSS ==
+
+'''Kedźbu:''' Po składowanju dyrbiš pufrowak swojeho wobhladowaka wuprózdnić '''Mozilla/Firefox:''' ''Strg-Shift-R'', '''Internet Explorer:''' ''Strg-F5'', '''Opera:''' ''F5'', '''Safari:''' ''Cmd-Shift-R'', '''Konqueror:''' ''F5''.",
+'userjspreview'             => "== Přehlad twojeho wosobinskeho JavaScript ==
+
+'''Kedźbu:''' Po składowanju dyrbiš pufrowak swojeho wobhladowaka wuprózdnić '''Mozilla/Firefox:''' ''Strg-Shift-R'', '''Internet Explorer:''' ''Strg-F5'', '''Opera:''' ''F5'', '''Safari:''' ''Cmd-Shift-R'', '''Konqueror:''' ''F5''.",
+'userinvalidcssjstitle'     => '<b>Kedźbu:</b> Skin z mjenom „$1” njeeksistuje. Prošu mysli na to, zo dyrbja wosobinske .css a .js strony z małym pismikom započeć, na př. User:Foo/monobook.css město User:Foo/Monobook.css.',
+'updated'                   => '(Zaktualizowany)',
+'note'                      => '<strong>Kedźbu:</strong>',
+'previewnote'               => '<strong>Kedźbu, to je jenož přehlad, změny hišće składowane njejsu!</strong>',
+'previewconflict'           => 'Tutón přehlad tekst w hornim tekstowym polu zwobrazni kaž so zjewi, jeli jón składuješ.',
+'session_fail_preview'      => '<strong>Wodaj! Straty posedźenskich datow dla njemóžachmy twoju změnu předźěłać.
+Prošu spytaj hišće raz. Jeli to potom hišće njefunguje, wotzjew so a přizjew so znowa.</strong>',
+'session_fail_preview_html' => "<strong>Wodaj! Straty posedźenskich datow dla njemóžachmy twoju změnu předźěłać.</strong>
+
+''Dokelž tutón wiki je luty HTML zmóžnił, je přehlad jako wěstotna naprawa přećiwo atakam přez JavaScript schowany.''
+
+<strong>Jeli to je legitimny wobdźěłowanski pospyt, spytaj prošu hišće raz. Jeli to hišće njefunguje, wotzjew so a přizjew so znowa.</strong>",
+'importing'                 => 'Strona „$1” so importuje',
+'editing'                   => 'Wobdźěłanje strony $1',
+'editinguser'               => 'Wužiwar <b>$1</b> so wobdźěłuje',
+'editingsection'            => 'Wobdźěłanje strony $1 (wotrězk)',
+'editingcomment'            => 'Wobdźěłanje strony $1 (komentar)',
+'editconflict'              => 'Wobdźěłowanski konflikt: $1',
+'explainconflict'           => 'Něchtó druhi je stronu změnił w samsnym času, hdyž sy spytał ju wobdźěłować. Hornje tekstowe polo wobsahuje tekst strony kaž tuchwilu eksistuje. Twoje změny so w delnim tekstowym polu pokazuja. Dyrbiš swoje změny do eksistowaceho teksta zadźěłać. <b>Jenož</b> tekst w hornim tekstowym polu so składuje hdyž znowa na „Składować” kliknješ.<br />',
+'yourtext'                  => 'Twój tekst',
+'storedversion'             => 'Składowana wersija',
+'nonunicodebrowser'         => '<strong>KEDŹBU: Twój wobhladowak z Unikodu kompatibelny njeje. Prošu wužiwaj hinaši wobhladowak.</strong>',
+'editingold'                => '<strong>KEDŹBU: Wobdźěłuješ staršu wersiju strony. Jeli ju składuješ, zjewi so jako najnowša wersija!</strong>',
+'yourdiff'                  => 'Rozdźěle',
+'copyrightwarning'          => 'Prošu wobkedźbuj, zo so wšě přinoški k {{GRAMMAR:datiw|{{SITENAME}}}}  jako pod $2 dopušćene wobhladuja. Jeli nochceš, zo so twój přinošk po dobrozdaću wobdźěłuje a znowa rozšěrja, njeskładuj jón.<br />
+Kopěrowanje tekstow, kiž su přez awtorske prawa škitane, je zakazane! <strong>NJESKŁADUJ PŘINOŠKI Z COPYRIGHTOM BJEZ DOWOLNOSĆE!</strong>',
+'copyrightwarning2'         => 'Prošu wobkedźbuj, zo wšě přinoški k {{GRAMMAR:datiw|{{SITENAME}}}} hodźa so wot druhich wužiwarjow wobdźěłować, změnić abo wotstronić. Jeli nochceš, zo so twój přinošk po dobrozdaću wobdźěłuje, njeskładuj jón.<br />
+
+Lubiš nam tež, zo sy jón sam napisał abo ze zjawneje domejny abo z podobneho swobodneho žórła kopěrował (hlej $1 za podrobnosće).
+
+<strong>NJESKŁADUJ PŘINOŠKI Z COPYRIGHTOM BJEZ DOWOLNOSĆE!</strong>',
+'longpagewarning'           => '<strong>KEDŹBU: Strona wobsahuje $1 kB; někotre wobhladowaki maja problemy, strony wobdźěłać, kotrež wobsahuja 32 kB abo wjace. Prošu přemysli sej stronu do mjeńšich wotrězkow rozrjadować.</strong>',
+'longpageerror'             => '<strong>ZMYLK: Tekst, kotryž sy spytał składować wobsahuje $1 kB, maksimalna wulkosć pak je $2 kB. Njehodźi so składować.</strong>',
+'readonlywarning'           => '<strong>KEDŹBU: Datowa banka bu wothladanja dla zawrjena, tohodla njemóžeš swoje wobdźěłowanja nětko składować. Móžeš tekst do tekstoweje dataje přesunyć a jón za pozdźišo składować.</strong>',
+'protectedpagewarning'      => '<strong>KEDŹBU: Strona bu škitana, tak zo jenož wužiwarjo z priwilegijemi administratora móža ju wobdźěłać.</strong>',
+'semiprotectedpagewarning'  => '<b>Kedźbu:</b> Strona bu škitana, tak zo jenož přizjewjeni wužiwarjo móža ju wobdźěłać.',
+'cascadeprotectedwarning'   => "'''KEDŹBU: Strona je škitana, tak zo móža ju jenož wužiwarjo z prawami administratora wobdźělać, dokelž je w naslědnich přez kaskadowu opciju škitanych stronach zapřijata:'''",
+'templatesused'             => 'Na tutej stronje wužiwane předłohi:',
+'templatesusedpreview'      => 'W tutym přehledźe wužiwane předłohi:',
+'templatesusedsection'      => 'W tutym wotrězku wužiwane předłohi:',
+'template-protected'        => '(škitana)',
+'template-semiprotected'    => '(škitana za njepřizjewjenych wužiwarjow a nowačkow)',
+'edittools'                 => '<!-- Tutón tekst so spody wobdźěłowanskich a nahrawanskich formularow pokazuje. -->',
+'nocreatetitle'             => 'Wutworjenje stron je wobmjezowane.',
+'nocreatetext'              => 'Móžnosć wutworjenja nowych stron je w tutym wikiju wobmjezowana. Móžeš wobstejace strony wobdźěłać abo [[{{ns:special}}:Userlogin|so přizjewić abo wužiwarske konto wutworić]].',
+
+# "Undo" feature
+'undo-success' => 'Wersija je so wuspěšnje wotstroniła. Prošu přepruwuj deleka w přirunanskim napohledźe, hač twoja změna bu přewzata a klikń potom na „Składować”, zo by změnu składował.',
+'undo-failure' => '<span class="error">Wobdźěłanje njehodźeše so wotstronić, dokelž wotpowědny wotrězk bu mjeztym změnjeny.</span>',
+'undo-summary' => 'Wersija $1 wužiwarja [[{{ns:special}}:Contributions/$2|$2]] ([[{{ns:user_talk}}:$2|diskusija]]) bu wotstronjena.',
+
+# Account creation failure
+'cantcreateaccounttitle' => 'Wužiwarske konto njeda so wutworić.',
+'cantcreateaccounttext'  => 'Wutworjenje wužiwarskeho konta z tuteje IP-adresy (<b>$1</b>) bu zablokowane. To je najskerje sćěwk nastajneho wandalizma wužiwarjow jenakeho poskićowarja internetneje słužby abo šule.',
+
+# History pages
+'revhistory'                  => 'stawizny',
+'viewpagelogs'                => 'protokole tuteje strony pokazać',
+'nohistory'                   => 'Njeje žanych staršich wersijow strony.',
+'revnotfound'                 => 'Njebě móžno, požadanu wersiju namakać',
+'revnotfoundtext'             => 'Stara wersija strony, kotruž sy žadał, njeda so namakać. Prošu pruwuj URL, kiž sy wužiwał.',
+'loadhist'                    => 'Stawizny strony so začita',
+'currentrev'                  => 'Aktualna wersija',
+'revisionasof'                => 'Wersija z $1',
+'revision-info'               => 'Wersija z $1 wot wužiwarja $2',
+'previousrevision'            => '←Starša wersija',
+'nextrevision'                => 'Nowša wersija→',
+'currentrevisionlink'         => 'Aktualnu wersiju pokazać',
+'cur'                         => 'akt',
+'next'                        => 'přich',
+'last'                        => 'posl',
+'orig'                        => 'prěnja',
+'page_first'                  => 'spočatk',
+'page_last'                   => 'kónc',
+'histlegend'                  => 'Diff wubrać: Wuběrće opciske pola za přirunanje a tłóčće na enter abo tłóčku deleka.
+
+Legenda: (akt) = rozdźěl k tuchwilnej wersiji, (posl) = rozdźěl k předchadnej wersiji, S = snadna změna.',
+'deletedrev'                  => '[wušmórnjena]',
+'histfirst'                   => 'tuchwilnu',
+'histlast'                    => 'najstaršu',
+'rev-deleted-comment'         => '(komentar wotstronjeny)',
+'rev-deleted-user'            => '(wužiwarske mjeno wotstronjene)',
+'rev-deleted-text-permission' => '<div class="mw-warning plainlinks">Tuta wersija bu wušmórnjena a njeda so wjace čitać. Přićinu móžeš w [{{fullurl:{{ns:special}}:Log/delete|page={{PAGENAMEE}}}} protokolu wušmórnjenjow] zhonić.</div>',
+'rev-deleted-text-view'       => '<div class="mw-warning plainlinks">Tuta wersija bu wušmórnjena a njeda so wjace čitać. Jako administrator móžeš ju pak dale čitać. Přićinu móžeš w [{{fullurl:{{ns:special}}:Log/delete|page={{PAGENAMEE}}}} protokolu wušmórnjenjow] zhonić.</div>',
+'rev-delundel'                => 'pokazać/schować',
+
+'history-feed-title'          => 'Stawizny wersijow',
+'history-feed-description'    => 'Stawizny wersijow za tutu stronu w {{GRAMMAR:lokatiw|{{SITENAME}}}}',
+'history-feed-item-nocomment' => '$1 w $2 hodź.', # user at time
+'history-feed-empty'          => 'Strona, kotruž sy požadał, njeekstistuje. Bu snano z wikija wotstronjena abo přemjenowana. Móžeš [[{{ns:special}}:Search|tu]] za stronami z podobnym titulom pytać.',
+
+# Revision deletion
+'revisiondelete'            => 'Wersije wušmórnyć/wobnowić',
+'revdelete-nooldid-title'   => 'Žana wersija podata',
+'revdelete-nooldid-text'    => 'Njejsy cilowu wersiju abo cilowe wersije podał, zo by tutu funkciju wužił.',
+'revdelete-selected'        => 'Wubrana wersija strony [[:$1]]:',
+'revdelete-text'            => 'Wušmórnjene wersije so w stawiznach dale jewja, jich wobsah pak za wužiwarjow čitajomne njeje.
+
+Druzy administratorojo w tutym wikiju móža schowany tekst dale čitać a jón wobnowić, chibazo su tež jich prawa wobmjezowane.',
+'revdelete-legend'          => 'Wobmjezowanja za wersije zrjadować:',
+'revdelete-hide-text'       => 'Tekst tuteje wersije schować',
+'revdelete-hide-comment'    => 'Zjeće schować',
+'revdelete-hide-user'       => 'Wužiwarske mjeno/IP-adresu schować',
+'revdelete-hide-restricted' => 'Tute wobmjezowanja na administratorow kaž tež na druhich wužiwarjow nałožować',
+'revdelete-log'             => 'Komentar w protokolu:',
+'revdelete-submit'          => 'Na wubranu wersiju nałožować',
+'revdelete-logentry'        => 'Widźomnosć wersije změnjena za [[$1]]',
+
+# Diffs
+'difference'                => '(rozdźěl mjez wersijomaj)',
+'loadingrev'                => 'začitanje wersijow za diff',
+'lineno'                    => 'Rjadka $1:',
+'editcurrent'               => 'Tuchwilnu wersiju strony wobdźěłać',
+'selectnewerversionfordiff' => 'Nowšu wersiju za přirunanje wubrać',
+'selectolderversionfordiff' => 'Staršu wersiju za přirunanje wubrać',
+'compareselectedversions'   => 'Wubranej wersiji přirunać',
+'editundo'                  => 'cofnyć',
+'diff-multi'                => '<small>(Přirunanje wersijow zapřija {{PLURAL:$1|jednu mjez nimaj ležacu wersiju|dwě mjez nimaj ležacej wersiji|$1 mjez nimaj ležace wersije|$1 mjez nimaj ležacych wersijow}}.)</small>',
+
+# Search results
+'searchresults'         => 'Pytanske wuslědki',
+'searchresulttext'      => 'Za wjace informacijow wo přepytowanju {{GRAMMAR:genitiw|{{SITENAME}}}}, hlej [[{{MediaWiki:helppage}}|{{int:help}}]].',
+'searchsubtitle'        => 'Sy „[[:$1]]“ pytał.',
+'searchsubtitleinvalid' => 'Sy „[[:$1]]“ pytał.',
+'badquery'              => 'Špatnje formulowane pytanske naprašenje',
+'badquerytext'          => 'Njemóžachmy twoje naprašenje předźěłać. Přičina je najskerje, zo sy spytał za słowom pytać, kotrež ma mjenje hač tři pismiki, štož so hišće njepodpěruje. Snadź sy tež wuraz wopak napisał, na přikład „ryba a a šupizny”. Prošu spytaj hišće raz.',
+'matchtotals'           => 'Naprašenje „$1” namaka {{PLURAL:$2|jedyn titul|$2 titulaj|$2 titule|$2 titulow}} a tekst z {{PLURAL:$3|jedneje strony|$3 stronow|$3 stronow|$3 stronow}}.',
+'noexactmatch'          => '<b>Strona „$1” njeeksistuje.</b>
+
+Móžeš [[{{ns:special}}:Allpages|alfabetiski indeks přepytować]] abo [[:$1|stronu wutworić]].',
+'titlematches'          => 'Strony z wotpowědowacym titulom',
+'notitlematches'        => 'Žane strony z wotpowědowacym titulom',
+'textmatches'           => 'Strony z wotpowědowacym tekstom',
+'notextmatches'         => 'Žane strony z wotpowědowacym tekstom',
+'prevn'                 => 'předchadne $1',
+'nextn'                 => 'přichodne $1',
+'viewprevnext'          => '($1) ($2) ($3) pokazać',
+'showingresults'        => '<b>$1</b> wuslědkow so deleka pokazuje, započinajo z #<b>$2</b>.',
+'showingresultsnum'     => '<b>$3</b> wuslědkow so deleka pokazuje, započinajo z #<b>$2</b>.',
+'nonefound'             => '<b>Kedźbu:</b> Pytanja bjez wuspěcha so často z pytanjom za powšitkownymi słowami zawinuja, kotrež so njeindicěruja abo přez podaće wjace hač jednoho pytanskeho wuraza. Jenož strony, kotrež wšě pytanske wurazy wobsahuja, so w lisćinje wuslědkow zjewja. W tym padźe spytaj ličbu pytanskich wurazow pomjeńšić.',
+'powersearch'           => 'Pytać',
+'powersearchtext'       => 'W mjenowych rumach pytać:<br />$1<br />$2 Daleposrědkowanja naličeć<br />Za wurazom pytać: $3 $9',
+'searchdisabled'        => 'Pytanje w {{GRAMMAR:lokatiw|{{SITENAME}}}} tuchwilu móžne njeje. Móžeš mjeztym z Google pytać. Wobkedźbuj, zo móža wuslědki z wobsaha {{GRAMMAR:genitiw|{{SITENAME}}}} zestarjene być.',
+'blanknamespace'        => '(Nastawki)',
+
+# Preferences page
+'preferences'              => 'Nastajenja',
+'preferences-summary'      => 'Na tutej specialnej stronje móžeš wosobinske daty změnić a powjerch swojim potrěbnosćam přiměrjeć.',
+'mypreferences'            => 'moje nastajenja',
+'prefsnologin'             => 'Njepřizjewjeny',
+'prefsnologintext'         => 'Dyrbiš [[{{ns:special}}:Userlogin|přizjewjeny]] być, zo by nastajenja postajić móhł.',
+'prefsreset'               => 'Nastajenja su ze składa wróćo stajili. Twoje změnjenja njejsu so składowali.',
+'qbsettings'               => 'Pobóčna lajsta',
+'qbsettings-none'          => 'Žane',
+'qbsettings-fixedleft'     => 'Leži nalěwo',
+'qbsettings-fixedright'    => 'Leži naprawo',
+'qbsettings-floatingleft'  => 'Wisa nalěwo',
+'qbsettings-floatingright' => 'Wisa naprawo',
+'changepassword'           => 'Hesło změnić',
+'skin'                     => 'Skin',
+'math'                     => 'Math',
+'dateformat'               => 'Format datuma',
+'datedefault'              => 'Standard',
+'datetime'                 => 'Datum a čas',
+'math_failure'             => 'Analyza njeje so poradźiła',
+'math_unknown_error'       => 'njeznaty zmylk',
+'math_unknown_function'    => 'njeznata funkcija',
+'math_lexing_error'        => 'leksikalny zmylk',
+'math_syntax_error'        => 'syntaktiski zmylk',
+'math_image_error'         => 'Konwertowanje do PNG zwrěšćiło; kontrolujće prawu instalaciju latex, dvips, gs a konwertujće',
+'math_bad_tmpdir'          => 'Njemóžno do nachwilneho matematiskeho zapisa pisać abo jón wutworić',
+'math_bad_output'          => 'Njemóžno do matematiskeho zapisa za wudaće pisać abo jón wutworić',
+'math_notexvc'             => 'Wuwjedźomny texvc pobrachuje; prošu hlej math/README za konfiguraciju.',
+'prefs-personal'           => 'Wužiwarske daty',
+'prefs-rc'                 => 'Aktualne změny',
+'prefs-watchlist'          => 'Wobkedźbowanki',
+'prefs-watchlist-days'     => 'Ličba dnjow, kotrež maja so we wobkedźbowankach pokazać:',
+'prefs-watchlist-edits'    => 'Ličba změnow, kotrež maja so we wobkedźbowankach pokazać:',
+'prefs-misc'               => 'Wšelake nastajenja',
+'saveprefs'                => 'Składować',
+'resetprefs'               => 'Wróćo stajić',
+'oldpassword'              => 'Stare hesło:',
+'newpassword'              => 'Nowe hesło:',
+'retypenew'                => 'Nowe hesło wospjetować:',
+'textboxsize'              => 'Wobdźěłowanje',
+'rows'                     => 'Rjadki:',
+'columns'                  => 'Stołpiki:',
+'searchresultshead'        => 'Pytać',
+'resultsperpage'           => 'Wuslědki za stronu:',
+'contextlines'             => 'Rjadki na wuslědk:',
+'contextchars'             => 'Kontekst na rjadku:',
+'stubthreshold'            => 'Próh za zwobraznjenje pjenka (bajtow):',
+'recentchangescount'       => 'Ličba stron w aktualnych změnach:',
+'savedprefs'               => 'Nastajenja buchu składowane.',
+'timezonelegend'           => 'Časowe pasmo',
+'timezonetext'             => 'Zapisaj ličbu hodźin, wo kotrež so twój lokalny čas wot časa serwera (UTC) wotchila.',
+'localtime'                => 'Lokalny čas',
+'timezoneoffset'           => 'Rozdźěl¹',
+'servertime'               => 'Čas serwera',
+'guesstimezone'            => 'Z wobhladowaka přewzać',
+'allowemail'               => 'Mejlki wot druhich wužiwarjow přijimować',
+'defaultns'                => 'W naslědnich mjenowych rumach awtomatisce pytać:',
+'default'                  => 'standard',
+'files'                    => 'Dataje',
+
+# User rights
+'userrights-lookup-user'     => 'Wužiwarske skupiny zrjadować',
+'userrights-user-editname'   => 'Wužiwarske mjeno:',
+'editusergroup'              => 'Wužiwarske skupiny wobdźěłać',
+'userrights-editusergroup'   => 'Wužiwarske skupiny wobdźěłać',
+'saveusergroups'             => 'Wužiwarske skupiny składować',
+'userrights-groupsmember'    => 'Sobustaw skupiny:',
+'userrights-groupsavailable' => 'K dispoziciji stejace skupiny:',
+'userrights-groupshelp'      => 'Wubjer skupiny, z kotrychž chceš wužiwarja wotstronić abo kotrymž chceš wužiwarja přidać. Njewubrane skupiny so njezměnja. Móžeš skupinu z STRG + lěwe kliknjenje wotwolić',
+
+# Groups
+'group'            => 'Skupina:',
+'group-bot'        => 'Bots',
+'group-sysop'      => 'Administratorojo',
+'group-bureaucrat' => 'Běrokraća',
+'group-all'        => '(wšě)',
+
+'group-bot-member'        => 'bot',
+'group-sysop-member'      => 'administrator',
+'group-bureaucrat-member' => 'běrokrat',
+
+'grouppage-bot'        => '{{ns:project}}:Bots',
+'grouppage-sysop'      => '{{ns:project}}:Administratorojo',
+'grouppage-bureaucrat' => '{{ns:project}}:Běrokraća',
+
+# User rights log
+'rightslog'      => 'Protokol zrjadowanja wužiwarskich prawow',
+'rightslogtext'  => 'To je protokol změnow wužiwarskich prawow.',
+'rightslogentry' => 'skupinowe čłonstwo za $1 z $2 na $3 změnjene',
+'rightsnone'     => '(ničo)',
+
+# Recent changes
+'nchanges'                          => '$1 {{PLURAL:$1|změna|změnje|změny|změnow}}',
+'recentchanges'                     => 'Aktualne změny',
+'recentchangestext'                 => 'Na tutej stronje móžeće najaktualniše změny w {{GRAMMAR:lokatiw|{{SITENAME}}}} wobkedźbować.',
+'recentchanges-feed-description'    => 'Slěduj najaktualniše změny {{GRAMMAR:genitiw|{{SITENAME}}}} w tutym kanalu.',
+'rcnote'                            => 'Deleka su poslednje <strong>$1</strong> změny poslednich <strong>$2</strong> dnjow, staw wot $3.',
+'rcnotefrom'                        => 'Deleka so změny wot <b>$2</b> pokazuja (hač k <b>$1</b>).',
+'rclistfrom'                        => 'Nowe změny pokazać, započinajo z $1',
+'rcshowhideminor'                   => 'snadne změny $1',
+'rcshowhidebots'                    => 'změny awtomatiskich programow (bots) $1',
+'rcshowhideliu'                     => 'změny přizjewjenych wužiwarjow $1',
+'rcshowhideanons'                   => 'změny anonymnych wužiwarjow $1',
+'rcshowhidepatr'                    => 'dohladowane změny $1',
+'rcshowhidemine'                    => 'moje změny $1',
+'rclinks'                           => 'Poslednje $1 změnow poslednich $2 dnjow pokazać<br />$3',
+'diff'                              => 'rozdźěl',
+'hist'                              => 'wersije',
+'hide'                              => 'schować',
+'show'                              => 'pokazać',
+'minoreditletter'                   => 'S',
+'newpageletter'                     => 'N',
+'boteditletter'                     => 'B',
+'sectionlink'                       => '→',
+'number_of_watching_users_pageview' => '$1 {{PLURAL:$1|wobkedźbowacy wužiwar|wobkedźbowacaj wužiwarjej|wobkedźbowacy wužiwarjo|wobkedźbowacych wužiwarjow}}',
+'rc_categories'                     => 'Jenož kategorije (dźělene z "|")',
+'rc_categories_any'                 => 'wšě',
+
+# Upload
+'upload'                      => 'Dataju nahrać',
+'uploadbtn'                   => 'Dataju nahrać',
+'reupload'                    => 'Znowa nahrać',
+'reuploaddesc'                => 'Wróćo k nahrawanskemu formularej.',
+'uploadnologin'               => 'Njepřizjewjeny',
+'uploadnologintext'           => 'Dyrbiš [[{{ns:special}}:Userlogin|přizjwjeny]] być, zo by dataje nahrawać móhł.',
+'upload_directory_read_only'  => 'Nahrawanski zapis ($1) njehodźi so přez webserwer popisować.',
+'uploaderror'                 => 'Zmylk při nahrawanju',
+'uploadtext'                  => "Wužij formular deleka, zo by nowe dataje nahrał; zo by prjedy nahrate wobrazy wobhladał abo pytał dźi k [[{{ns:special}}:Imagelist|lisćinje nahratych datajow]]; detaile k nahrawanjam a wušmórnjenjam so tež w [[{{ns:special}}:Log/upload|protokolu nahrawanjow]] protokoluja.
+
+Zo by wobraz do strony zapřijał, wužij wotkaz we formje
+*'''<nowiki>[[</nowiki>{{ns:image}}<nowiki>:Dataja.jpg]]</nowiki>'''
+*'''<nowiki>[[</nowiki>{{ns:image}}<nowiki>:Dataja.png|alternatiwny tekst]]</nowiki>'''
+
+abo zo by direktnje k dataji wotkazał
+*'''<nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki>'''",
+'uploadlog'                   => 'Protokol nahraćow',
+'uploadlogpage'               => 'Protokol nahraćow',
+'uploadlogpagetext'           => 'Deleka je lisćina naposledk nahratych datajow.',
+'filename'                    => 'Mjeno dataje',
+'filedesc'                    => 'Zjeće',
+'fileuploadsummary'           => 'Zjeće:',
+'filestatus'                  => 'Licenca',
+'filesource'                  => 'Žórło',
+'uploadedfiles'               => 'Nahrate dataje',
+'ignorewarning'               => 'Warnowanje ignorować a dataju najebać toho składować.',
+'ignorewarnings'              => 'Wšě warnowanja ignorować',
+'minlength'                   => 'Mjena datajow dyrbja z třoch pismikow wobstać.',
+'illegalfilename'             => 'Mjeno dataje „$1” wobsahuje znamješka, kotrež w titlach stronow dowolene njejsu. Prošu přemjenuj dataju a spytaj ju znowa nahrać.',
+'badfilename'                 => 'Mjeno dataje bu do „$1” změnjene.',
+'filetype-badmime'            => 'Dataje družiny MIME „$1” njesmědźa so składować.',
+'filetype-badtype'            => "'''„.$1“''' njeje dowoleny datajowy format. Dowolene su: $2",
+'filetype-missing'            => 'Dataja nima kóncowku (na přikład „.jpg“).',
+'large-file'                  => 'Doporuča so, zo dataje wjetše hač $1 njejsu; tuta dataja ma $2.',
+'largefileserver'             => 'Dataja je wjetša hač serwer dowoluje.',
+'emptyfile'                   => 'Dataja, kotruž sy nahrał, zda so prózdna być. Z přičinu móhł pisanski zmylk w mjenje dataje być. Prošu pruwuj hač chceš ju woprawdźe nahrać.',
+'fileexists'                  => 'Dataja z tutym mjenom hižo eksistuje. Jeli kliknješ na „Składować”, so wona přepisuje. Prošu pruwuj $1 jeli njejsy wěsty hač chceš ju změnić.',
+'fileexists-forbidden'        => 'Dataja z tutym mjenom hižo eksistuje, prošu dźi wróćo a nahraj ju z druhim mjenom. [[Image:$1|thumb|center|$1]]',
+'fileexists-shared-forbidden' => 'Dataja z tutym mjenom hižo w zhromadnym chowanišću datajow eksistuje. Prošu dźi wróćo a nahraj ju z druhim mjenom. [[Image:$1|thumb|center|$1]]',
+'successfulupload'            => 'Dataja bu wuspěšnje nahrata',
+'fileuploaded'                => 'Dataja „$1” bu z wuspěchom nahrata. Prošu slěduj wotkaz $2 k stronje wopisanja a zapisaj informacije wo dataji, na př. zwotkel přińdźe, hdy a wot koho bu wutworjena a štožkuli hišće wo njej wěš. Jeli je to wobraz, móžeš jón takle zasunyć: <tt><nowiki>[[Image:$1|thumb|wopisanje]]</nowiki></tt>',
+'uploadwarning'               => 'Warnowanje',
+'savefile'                    => 'Dataju składować',
+'uploadedimage'               => 'je dataju „[[$1]]” nahrał',
+'uploaddisabled'              => 'Wodaj, nahraće je znjemóžnjene.',
+'uploaddisabledtext'          => 'Nahraće datajow je w tutym wikiju znjemóžnjene.',
+'uploadscripted'              => 'Dataja wobsahuje HTML- abo skriptowy kod, kotryž móhł so mylnje přez wobhladowak wuwjesć.',
+'uploadcorrupt'               => 'Dataja je wobškodźena abo ma wopačny sufiks. Prošu přepruwuj dataju a nahraj ju hišće raz.',
+'uploadvirus'                 => 'Dataja wirus wobsahuje! Podrobnosće: $1',
+'sourcefilename'              => 'Mjeno žórłoweje dataje',
+'destfilename'                => 'Mjeno ciloweje dataje',
+'watchthisupload'             => 'Stronu wobkedźbować',
+'filewasdeleted'              => 'Dataja z tutym mjenom bu prjedy nahrata a pozdźišo wušmórnjena. Prošu přepruwuj $1 prjedy hač ju znowa składuješ.',
+
+'upload-proto-error'      => 'Wopačny protokol',
+'upload-proto-error-text' => 'URL dyrbi so z <code>http://</code> abo <code>ftp://</code> započeć.',
+'upload-file-error'       => 'Nutřkowny zmylk',
+'upload-file-error-text'  => 'Nutřkowny zmylk wustupi při pospytu, nachwilnu dataju na serwerje wutworić. Prošu skontaktuj systemoweho administratora.',
+'upload-misc-error'       => 'Njeznaty zmylk při nahraću',
+'upload-misc-error-text'  => 'Njeznaty zmylk za čas nahrawanja wustupi. Prošu přepruwuj, hač URL je płaćiwy a přistupny a spytaj hišće raz. Jeli problem dale eksistuje, skontaktuj systemoweho administratora.',
+
+# Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
+'upload-curl-error6'       => 'URL docpějomny njeje.',
+'upload-curl-error6-text'  => 'Podaty URL njehodźeše so docpěć. Prošu přepruwuj, hač URL je korektny a sydło docpějomne.',
+'upload-curl-error28'      => 'Překročenje časa při nahrawanju',
+'upload-curl-error28-text' => 'Sydło za wotmołwu předołho trjebaše. Prošu pruwuj, hač sydło je docpějomne, čakaj wokomik a spytaj hišće raz. Spytaj hewak w druhim času hišće raz.',
+
+'license'            => 'Licenca',
+'nolicense'          => 'žadyn wuběr',
+'upload_source_url'  => ' (płaćiwy, zjawnje docpějomny URL)',
+'upload_source_file' => ' (dataja na twojim ličaku)',
+
+# Image list
+'imagelist'                 => 'Lisćina datajow',
+'imagelist-summary'         => 'Tuta specialna strona naliči wšě nahrate dataje. Standardnje so naposlědk nahrate dateje cyle horjeka pokazuja. Kliknjo na nadpisma stołpikow móžeš sortěrowanje wobróćić abo po druhich kriterijach rjadować.',
+'imagelisttext'             => 'Deleka je lisćina <b>$1</b> datajow kiž su po <b>$2</b> sortěrowane.',
+'imagelistforuser'          => 'Jenož dataje kiž buchu přez $1 nahrate.',
+'getimagelist'              => 'Lisćina datajow so čita',
+'ilsubmit'                  => 'Pytać',
+'showlast'                  => 'Poslednje $1 datajow sortěrowanych po $2 pokazać.',
+'byname'                    => 'mjenje',
+'bydate'                    => 'datumje',
+'bysize'                    => 'wulkosći',
+'imgdelete'                 => 'Wušmórnyć',
+'imgdesc'                   => 'wopisanje',
+'imgfile'                   => 'dataja',
+'imglegend'                 => 'Legenda: (wop) = Wopisanje dataje pokazać/wobdźěłać.',
+'imghistory'                => 'Stawizny dataje',
+'revertimg'                 => 'cof',
+'deleteimg'                 => 'wušm',
+'deleteimgcompletely'       => 'Wšě wersije tuteje dataje wušmórnyć',
+'imghistlegend'             => 'Legenda: (akt) = to je aktualna dataja, (wušm) = staru wersiju wušmórnyć, (cof) = so k starej wersiji wróćić.
+
+<i>Klikń na datum zo by wersiju widźał kiž bu na tutym dnju nahrata</i>.',
+'imagelinks'                => 'Wotkazy',
+'linkstoimage'              => 'Dataja so na naslědnich stronach wužije:',
+'nolinkstoimage'            => 'Njejsu strony, kotrež na tutu dataju wotkazuja.',
+'sharedupload'              => 'Tuta dataja je zhromadne nahraće a móže so přez druhe projekty wužiwać.',
+'shareduploadwiki'          => 'Za dalše informacije hlej $1.',
+'shareduploadwiki-linktext' => 'stronu datajoweho wopisanja',
+'noimage'                   => 'Žana dataja z tutym mjenom njeeksistuje. Móžeš $1.',
+'noimage-linktext'          => 'ju nahrać',
+'uploadnewversion-linktext' => 'nowu wersiju tuteje dataje nahrać',
+'imagelist_date'            => 'datum',
+'imagelist_name'            => 'mjeno dataje',
+'imagelist_user'            => 'wužiwar',
+'imagelist_size'            => 'wulkosć (byte)',
+'imagelist_description'     => 'wopisanje',
+'imagelist_search_for'      => 'Za mjenom wobraza pytać:',
+
+# MIME search
+'mimesearch'         => 'Pytanje po družinje MIME',
+'mimesearch-summary' => 'Na tutej specialnej stronje hodźa so dataje po družinje MIME filtrować. Dyrbiš přeco družinu MIME a podrjadowanu družinu zapodać: <tt>image/jpeg</tt> (hlej stronu wopisanja dataje).',
+'mimetype'           => 'Družina MIME:',
+'download'           => 'Sćahnyć',
+
+# Unwatched pages
+'unwatchedpages'         => 'Njewobkedźbowane strony',
+'unwatchedpages-summary' => 'Tuta specialna strona naliči wšě strony, kiž njejsu we wobkedźbowankach někotrehožkuli wužiwarja.',
+
+# List redirects
+'listredirects'         => 'Lisćina daleposrědkowanjow',
+'listredirects-summary' => 'Tuta specialna strona naliči daleposrědkowanja.',
+
+# Unused templates
+'unusedtemplates'         => 'Njewužiwane předłohi',
+'unusedtemplates-summary' => 'Tuta specialna strona naliči wšě předłohi, kiž so w druhich stronach njewužiwaju. Přepruwuj druhe wotkazy na předłohi, prjedy hač je wušmórnješ.',
+'unusedtemplatestext'     => 'Tuta specialna strona naliči wšě předłohi, kiž so w druhich stronach njewužiwaju. Prošu přepruwuj tež druhe móžne wotkazy na předłohi, prjedy hač je wušmórnješ.',
+'unusedtemplateswlh'      => 'Druhe wotkazy',
+
+# Random redirect
+'randomredirect' => 'Připadne daleposrědkowanje',
+
+# Statistics
+'statistics'             => 'Statistika',
+'sitestats'              => 'Statistika {{GRAMMAR:genitiw|{{SITENAME}}}}',
+'userstats'              => 'Statistika wužiwarjow',
+'sitestatstext'          => 'Je dohromady <b>$1</b> stron w datowej bance. To wobjima tež diskusijne strony, strony wo {{GRAMMAR:lokatiw|{{SITENAME}}}}, krótke nastawki (pjenki), daleposrědkowanja a druhe, kotrež najskerje nastawki njejsu.
+
+Zwostanje <b>$2</b> stronow, kotrež najskerje su woprawdźite nastawki.
+
+Dohromady bu <b>$8</b> datajow nahratych.
+
+Wot załoženja wiki běše dohromady <b>$3</b> wopytow a <b>$4</b> změnow stron. Běše přerěznje <b>$5</b> změnow na stronu a <b>$6</b> wopytow na wobdźěłanje.
+
+Dołhota [http://meta.wikimedia.org/wiki/Help:Job_queue rynka nadawkow] je <b>$7</b>.',
+'userstatstext'          => 'Je <b>$1</b> [[{{ns:special}}:Listusers|wužiwarjow]] zregistrowanych, <b>$2</b> (abo <b>$4%</b>) z nich su $5.',
+'statistics-mostpopular' => 'Najhusćišo wopytane strony',
+
+'disambiguations'         => 'Rozjasnjenja wjacezmyslnosće',
+'disambiguations-summary' => 'Tuta specialna strona naliči nastawki z wotkazami na daleposrědkowanja. Měli město toho na poprawne hesło wotkazać.<br />Strona so jako rozjasnjenje wjacezmyslnosće zarjaduje, jeli [[MediaWiki:disambiguationspage]] na nju wotkazuje. Wotkazy z druhich mjenowych rumow hač hłowneho (nastawkoweho) so tu njenaspomnjeja.',
+'disambiguationspage'     => '{{ns:project}}:Rozjasnjenje wjacezmyslnosće',
+'disambiguations-text'    => "Naslědne strony na '''rozjasnjenje wjacezmyslnosće''' wotkazuja. Měli město toho na poprawne hesło wotkazać.<br />Strona so jako rozjasnjenje wjacezmyslnosće zarjaduje, jeli [[MediaWiki:disambiguationspage]] na nju wotkazuje.",
+
+'doubleredirects'         => 'Dwójne daleposrědkowanja',
+'doubleredirects-summary' => '<b>Kedźbu:</b> Tuta lisćina móže „wopačne pozitiwy” wobsahować. To je potom z wašnjom, jeli su w daleposrědkowanju nimo přispomnjenja, zo so wo tajku stronu jedna, hišće druhe wotkazy zapisane. Tute měli so wotstronjeć.',
+'doubleredirectstext'     => 'Kóžda rjadka wobsahuje wotkazy k prěnjemu a druhemu daleposrědkowanju kaž tež k prěnjej lince druheho daleposrědkowanja, kotraž zwjetša woprawdźity cil strony podawa, na kotryž prěnje daleposrědkowanje měło pokazać.',
+
+'brokenredirects'         => 'Skóncowane daleposrědkowanja',
+'brokenredirects-summary' => 'Tuta specialna strona naliči daleposrědkowanja na njewobstejace nastawki.',
+'brokenredirectstext'     => 'Naslědne daleposrědkowanja wotkazuja na njeeksistowace strony:',
+'brokenredirects-edit'    => '(wobdźěłać)',
+'brokenredirects-delete'  => '(wušmórnyć)',
+
+# Miscellaneous special pages
+'nbytes'                          => '$1 Bytes',
+'ncategories'                     => '$1 {{PLURAL:$1|jedna kategorija|kategoriji|kategorije|kategorijow}}',
+'nlinks'                          => '$1 {{PLURAL:$1|wotkaz|wotkazaj|wotkazy|wotkazow}}',
+'nmembers'                        => '{{PLURAL:$1|$1 čłon|$1 čłonaj|$1 čłony|$1 čłonow}}',
+'nrevisions'                      => '$1 {{PLURAL:$1|wobdźěłanje|wobdźěłani|wobdźěłanja|wobdźěłanjow}}',
+'nviews'                          => '$1 {{PLURAL:$1|jedyn wopyt|wopytaj|wopyty|wopytow}}',
+'specialpage-empty'               => 'Tuchwilu žane zapiski.',
+'lonelypages'                     => 'Wosyroćene strony',
+'lonelypages-summary'             => 'Tuta specialna strona naliči strony, na kotrež so ze žaneje druheje strony njewotkazuje. Tute wosyroćene strony njejsu wupřate, dokelž njehodźa so přez normalnu nawigaciju {{GRAMMAR:genitiw|{{SITENAME}}}} namakać.',
+'lonelypagestext'                 => 'Na naslědne strony druhe strony we wikiju njewotkazuja.',
+'uncategorizedpages'              => 'Njekategorizowane strony',
+'uncategorizedpages-summary'      => 'Tuta specialna strona naliči wšě strony, kotrež dotal njejsu někajkej kategoriji přirjadowane.',
+'uncategorizedcategories'         => 'Njekategorizowane kategorije',
+'uncategorizedcategories-summary' => 'Tuta specialna strona naliči wšě kategorije, kotrež dotal njejsu někajkej druhej kategoriji přirjadowane.',
+'uncategorizedimages'             => 'Njekategorizowane dataje',
+'uncategorizedimages-summary'     => 'Tuta specialna strona naliči wšě wobrazy, kotrež dotal njejsu někajkej kategoriji přirjadowane.',
+'unusedcategories'                => 'Njewužiwane kategorije',
+'unusedimages'                    => 'Njewužiwane dataje',
+'popularpages'                    => 'Často wopytowane strony',
+'popularpages-summary'            => 'Tuta specialna strona naliči najhusćišo wopytowane strony {{GRAMMAR:genitiw|{{SITENAME}}}}.',
+'wantedcategories'                => 'Požadane kategorije',
+'wantedcategories-summary'        => 'Tuta specialna strona naliči kategorije, kotrež so hižo w nastawkach nałožuja, njejsu pak hišće jako kategorije wutworjene.',
+'wantedpages'                     => 'Požadane strony',
+'wantedpages-summary'             => 'Tuta specialna strona naliči wšě hišće njeeksistowace strony, na kotrež eksistowace strony hižo wotkazuja.',
+'mostlinked'                      => 'Z najwjace stronami zwjazane strony',
+'mostlinked-summary'              => 'Tuta specialna strona naliči, njewotwisnje wot mjenoweho ruma, wšě najwjace zalinkowane strony.',
+'mostlinkedcategories'            => 'Z najwjace stronami zwjazane kategorije',
+'mostlinkedcategories-summary'    => 'Tuta specialna strona naliči najhusćišo wužiwane kategorije.',
+'mostcategories'                  => 'Strony z najwjace kategorijemi',
+'mostcategories-summary'          => 'Tuta specialna strona naliči najhusćišo kategorizowane strony.',
+'mostimages'                      => 'Z najwjace stronami zwjazane dataje',
+'mostimages-summary'              => 'Tuta specialna strona naliči najwjace wužiwane dataje.',
+'mostrevisions'                   => 'Nastawki z najwjace wersijemi',
+'mostrevisions-summary'           => 'Tuta specialna strona naliči strony, kiž buchu najhusćišo wobdźěłane.',
+'allpages'                        => 'Wšě nastawki',
+'allpages-summary'                => 'Tuta specialna strona naliči wšě strony {{GRAMMAR:genitiw|{{SITENAME}}}} wot A do Ž.',
+'prefixindex'                     => 'Wšě nastawki (z prefiksom)',
+'prefixindex-summary'             => 'Tuta specialna strona naliči wšě strony, kotrež započinaja z podatym rjadom znamješkow (prefiks). Pohlad móže so na wěsty mjenowy rum wobmjezować.',
+'randompage'                      => 'Připadny nastawk',
+'shortpages'                      => 'Krótke nastawki',
+'shortpages-summary'              => 'Tuta specialna strona naliči najkrótše nastawki w hłownym mjenowym rumje. Liča so znamješka teksta kaž so we wobdźěłanskim woknom jewja, potajkim we wiki-syntaksu a bjez wobsaha zapřijatych předłohow. Zakład ličenja je z UTF-8 koděrowany tekst.',
+'longpages'                       => 'Dołhe nastawki',
+'longpages-summary'               => 'Tuta specialna strona naliči najdlěše nastawki w hłownym mjenowym rumje. Liča so znamješka teksta kaž so we wobdźěłanskim woknom jewja, potajkim we wiki-syntaksu a bjez wobsaha zapřijatych předłohow. Zakład ličenja je z UTF-8 koděrowany tekst.',
+'deadendpages'                    => 'Nastawki bjez wotkazow',
+'deadendpages-summary'            => 'Tuta specialna strona naliči strony, kiž nimaja wotkazy na druhe nastawki abo jenož wotkazy na njewobstejace strony.',
+'deadendpagestext'                => 'Naslědne strony njejsu z druhimi stronami w tutym wikiju zwjazane.',
+'protectedpages'                  => 'Škitane strony',
+'protectedpages-summary'          => 'Tuta specialna strona pokazuje wšě strony, kotrež dyrbja so přećiwo přesunjenju abo wobdźěłowanju škitać.',
+'protectedpagestext'              => 'Tuta specialna strona naliči wšě strony, kotrež su přećiwo přesunjenju abo wobdźěłowanju škitane.',
+'protectedpagesempty'             => 'Tuchwilu žane.',
+'listusers'                       => 'Lisćina wužiwarjow',
+'listusers-summary'               => "Tuta specialna strona naliči wšěch zregistrowanych wužiwarjow. Jich dospołnu ličbu móžeš [[{{ns:special}}:Statistics|tu]] zhonić. Přez wuběrowanske polo ''Skupina'' hodźi so wuběr na jednotliwe skupiny wužiwarjow wobmjezować.",
+'specialpages'                    => 'Specialne strony',
+'specialpages-summary'            => 'Tuta strona naliči wšě specialne strony. Specialne strony so awtomatisce wutworjeja a njehodźa so wobdźěłać.',
+'spheading'                       => 'Specialne strony za wšěch wužiwarjow',
+'restrictedpheading'              => 'Specialne strony za administratorow',
+'recentchangeslinked'             => 'Změny zwjazanych stron',
+'rclsub'                          => '(k stronam, na kotrež strona „$1” pokazuje)',
+'newpages'                        => 'Nowe strony',
+'newpages-summary'                => 'Tuta specialna strona naliči wšě nowe strony poslednich 30 dnjow. Wuslědki móža so na mjenowe rumy, wužiwarske mjena abo woboje wobmjezować.',
+'newpages-username'               => 'Wužiwarske mjeno:',
+'ancientpages'                    => 'Najstarše nastawki',
+'ancientpages-summary'            => 'Tuta specialna strona naliči strony, kiž najdlěši čas změnjene njebuchu.',
+'intl'                            => 'Mjezyrěčne wotkazy',
+'move'                            => 'Přesunyć',
+'movethispage'                    => 'Stronu přesunyć',
+'unusedimagestext'                => '<p>Prošu wobkedźbuj, zo je móžno zo so někotre z tutych datajow přez druhe wikije wužiwaja.</p>',
+'unusedcategoriestext'            => 'Naslědne kategorije eksistuja, hačrunjež žana druha strona abo kategorija je njewužiwa.',
+
+# Book sources
+'booksources'               => 'Pytanje po ISBN',
+'booksources-summary'       => 'Na tutej specialnej stronje móžeš ISBN zapodać zo by lisćinu z informacijemi k pytanej knize dóstał. Wjazace smužki abo prózdne znamješka so na naprašowanje njewuskutkuja.',
+'booksources-search-legend' => 'Žórła za knihi pytać',
+'booksources-isbn'          => 'ISBN:',
+'booksources-go'            => 'Pytać',
+'booksources-text'          => 'To je lisćina wotkazow k druhim sydłam, kotrež nowe a trjebane knihi předawaja. Tam móžeš tež dalše informacije wo knihach dóstać, kotrež pytaš:',
+
+'categoriespagetext' => 'Naslědne kategorije w tutym wikiju eksistuja:',
+'data'               => 'Daty',
+'userrights'         => 'Zrjadowanje wužiwarskich prawow',
+'groups'             => 'Skupiny wužiwarjow',
+'isbn'               => 'ISBN',
+'alphaindexline'     => '$1 do $2',
+'version'            => 'Wersija',
+'log'                => 'wšě protokole',
+'alllogstext'        => 'To je kombinowany pohlad protokolow nahraćow, wušmórnjenjow, škitow, zablokowanjow a zrjadowanja wužiwarskich prawow. Móžeš pohlad wobmjezować, wuběrajo typ protokola, wužiwarske mjeno abo potrjechenu stronu.',
+'logempty'           => 'Žane wotpowědowace zapiski w protokolu.',
+
+# Special:Allpages
+'nextpage'          => 'Přichodna strona ($1)',
+'prevpage'          => 'Předchadna strona ($1)',
+'allpagesfrom'      => 'Strony pokazać, započinajo z:',
+'allarticles'       => 'Wšě nastawki',
+'allinnamespace'    => 'Wšě strony (mjenowy rum $1)',
+'allnotinnamespace' => 'Wšě strony (nic w mjenowym rumje $1)',
+'allpagesprev'      => 'Předchadne',
+'allpagesnext'      => 'Přichodne',
+'allpagessubmit'    => 'Pokazać',
+'allpagesprefix'    => 'Strony pokazać z prefiksom:',
+'allpagesbadtitle'  => 'Mjeno strony, kotrež sy zapodał(a), njebě płaćiwe. Měješe pak mjezyrěčny, pak mjezywikijowy prefiks abo wobsahowaše jedne abo wjace znamješkow, kotrež w titlach dowolene njejsu.',
+
+# Special:Listusers
+'listusersfrom'      => 'Započinajo z:',
+'listusers-submit'   => 'Pokazać',
+'listusers-noresult' => 'Njemóžno wužiwarjow namakać. Prošu wobkedźbuj, zo so mało- abo wulkopisanje na wotprašowanje wuskutkuje.',
+
+# E-mail user
+'mailnologin'     => 'Njejsy přizjewjeny.',
+'mailnologintext' => 'Dyrbiš [[{{ns:special}}:Userlogin|přizjewjeny]] być a płaćiwu e-mejlowu adresu w swojich [[{{ns:special}}:Preferences|nastajenjach]] měć, zo by druhim wužiwarjam mejlki pósłać móhł.',
+'emailuser'       => 'Wužiwarjej mejlku pósłać',
+'emailpage'       => 'Wužiwarjej mejlku pósłać',
+'emailpagetext'   => 'Jeli tutón wužiwar je płaćiwu e-mejlowu adresu w swojich nastajenjach zapodał, budźe formular deleka mejlku słać.
+E-mejlowa adresa, kotruž sy w swojich nastajenjach zapodał, jewi so jako adresa w polu „Wot” mejlki, zo by přijimowar móhł wotmołwić.',
+'usermailererror' => 'E-mejlowy objekt je zmylk wróćił:',
+'defemailsubject' => 'Powěsć z {{grammar:genitiw|{{SITENAME}}}}',
+'noemailtitle'    => 'Žana e-mejlowa adresa podata',
+'noemailtext'     => 'Tutón wužiwar njeje płaćiwu e-mejlowu adresu podał abo je so rozsudźił, zo nochce mejlki druhich wužiwarjow dóstać.',
+'emailfrom'       => 'Wot',
+'emailto'         => 'Komu',
+'emailsubject'    => 'Předmjet',
+'emailmessage'    => 'Powěsć',
+'emailsend'       => 'Wotesłać',
+'emailccme'       => 'E-mejluj mi kopiju mojeje powěsće.',
+'emailccsubject'  => 'Kopija wašeje powěsće k $1: $2',
+'emailsent'       => 'Mejlka wotesłana',
+'emailsenttext'   => 'Twoja mejlka bu wotesłana.',
+
+# Watchlist
+'watchlist'            => 'Wobkedźbowanki',
+'mywatchlist'            => 'Wobkedźbowanki',
+'watchlistfor'         => '(za wužiwarja <b>$1</b>)',
+'nowatchlist'          => 'Nimaš žane strony w swojich wobkedźbowankach.',
+'watchlistanontext'    => 'Dyrbiš so $1, zo by swoje wobkedźbowanki wobhladać abo wobdźěłać móhł.',
+'watchlistcount'       => "'''Maš $1 stronow w swojich wobkedźbowankach hromadu z přisłušnymi diskusijnymi stronami.'''",
+'clearwatchlist'       => 'Wobkedźbowanki wuprózdnić',
+'watchlistcleartext'   => 'Chceš swoje wobkedźbowanki woprawdźe wuprózdnić?',
+'watchlistclearbutton' => 'Wobkedźbowanki wuprózdnić',
+'watchlistcleardone'   => 'Twoje wobkedźbowanki z dohromady {{PLURAL:$1|jednej stronu|$1 stronomaj|$1 stronami|$1 stronami}} buchu wuprózdnjene.',
+'watchnologin'         => 'Njejsy přizjewjeny.',
+'watchnologintext'     => 'Dyrbiš [[{{ns:special}}:Userlogin|přizjewjeny]] być, zo by swoje wobkedźbowanki změnić móhł.',
+'addedwatch'           => 'Strona bu wobkedźbowankam přidata.',
+'addedwatchtext'       => "Strona [[:$1]] bu [[{{ns:special}}:Watchlist|wobkedźbowankam]] přidata.
+Přichodne změny tuteje strony a přisłušneje diskusijneje strony budu so tam naličeć a strona so '''w tučnym pismje''' w [[{{ns:special}}:Recentchanges|aktualnych změnach]] zjewi.
+
+Jeli chceš stronu pozdźišo ze swojich wobkedźbowankow wotstronić, klikń na rajtark „njewobkedźbować” tuteje strony.",
+'removedwatch'         => 'Strona bu z wobkedźbowankow wotstronjena',
+'removedwatchtext'     => 'Strona [[:$1]] bu z wobkedźbowankow wotstronjena.',
+'watch'                => 'wobkedźbować',
+'watchthispage'        => 'stronu wobkedźbować',
+'unwatch'              => 'njewobkedźbować',
+'unwatchthispage'      => 'wobkedźbowanje skónčić',
+'notanarticle'         => 'njeje nastawk',
+'watchnochange'        => 'Žana z twojich wobkedźbowanych stron njebu w podatej dobje wobdźěłana.',
+'watchdetails'         => '* $1 wobkedźbowanych stron, diskusijne strony wuwzate
+* [[{{ns:special}}:Watchlist/edit|Wobkedźbowanki pokazać a wobdźěłać]]
+* [[{{ns:special}}:Watchlist/clear|Wobkedźbowanki wuprózdnić]]',
+'wlheader-enotif'      => '* E-mejlowe zdźělenje je zmóžnjene.',
+'wlheader-showupdated' => '* Strony, kotrež buchu po twojim poslednim wopyće změnjene so <b>tučne</b> pokazuja.',
+'watchmethod-recent'   => 'Aktualne změny za wobkedźbowane strony přepruwować',
+'watchmethod-list'     => 'Wobkedźbowanki za aktualnymi změnami přepruwować',
+'removechecked'        => 'Wubrane strony z wobkedźbowankow wotstronić',
+'watchlistcontains'    => 'Maš $1 stron w swojich wobkedźbowankach.',
+'watcheditlist'        => 'Deleka je alfabetiska lisćina twojich wobkedźbowanych stron.
+
+Wuběr kašćiki stron, kotrež chceš ze swojich wobkedźbowankow wotstronić. Wotstronjenje nastawka tež přisłušnu diskusijnu stronu wotstroni a nawopak.',
+'removingchecked'      => 'Strony so z wobkedźbowankow wotstronjeja...',
+'couldntremove'        => 'Njemóžno zapisk „$1” wotstronić.',
+'iteminvalidname'      => 'Problem ze zapiskom „$1“, njepłaćiwe mjeno.',
+'wlnote'               => 'Deleka {{PLURAL:$1|je poslednja|stej poslednjej|su poslednje|su poslednje}} $1 {{PLURAL:$1|změna|změnje|změny|změnow}} za poslednje <b>$2</b> hodź.',
+'wlshowlast'           => 'Poslednje $1 hodź. - $2 dnjow - $3 pokazać',
+'wlsaved'              => 'To je składowana wersija twojich wobkedźbowankow.',
+'watchlist-show-bots'  => 'změny botow pokazać',
+'watchlist-hide-bots'  => 'změny botow schować',
+'watchlist-show-own'   => 'moje změny pokazać',
+'watchlist-hide-own'   => 'moje změny schować',
+'watchlist-show-minor' => 'snadne změny pokazać',
+'watchlist-hide-minor' => 'snadne změny schować',
+'wldone'               => 'Akcija bu wuspěšnje wuwjedźena.',
+
+# Displayed when you click the "watch" button and it's in the process of watching
+'watching'   => 'Wobkedźbuju…',
+'unwatching' => 'Njewobkedźbuju…',
+
+'enotif_mailer'      => '{{SITENAME}} E-mejlowe zdźělenje',
+'enotif_reset'       => 'Wšě strony jako wopytane woznamjenić',
+'enotif_newpagetext' => 'To je nowa strona.',
+'changed'            => 'změnjena',
+'created'            => 'wutworjena',
+'enotif_subject'     => '[{{SITENAME}}] Strona „$PAGETITLE” bu přez wužiwarja $PAGEEDITOR $CHANGEDORCREATED.',
+'enotif_lastvisited' => 'Hlej $1 za wšě změny po twojim poslednim wopyće.',
+'enotif_body'        => 'Luby(a) $WATCHINGUSERNAME,<br />
+
+Strona we {{GRAMMAR:lokatiw|{{SITENAME}}}} z mjenom „$PAGETITLE” bu dnja $PAGEEDITDATE wot $PAGEEDITOR $CHANGEDORCREATED,
+hlej $PAGETITLE_URL za aktualnu wersiju.
+
+$NEWPAGE
+
+Zjeće wobdźěłaćerja běše: $PAGESUMMARY $PAGEMINOREDIT
+
+Skontaktuj wobdźěłarja:
+e-mejl: $PAGEEDITOR_EMAIL
+wiki: $PAGEEDITOR_WIKI
+
+Njebudu žane druhe zdźělenki w padźe dalšich změnow, chibazo wopytaš tutu stronu.
+Ty móhł tež zdźělenske opcije za wšě ze swojich wobkedźbowanych stronow wróćo stajić.
+
+Přećelny zdźělenski system {{GRAMMAR:genitiw|{{SITENAME}}}}
+
+--
+Zo by nastajenja twojich wobkedźbowankow změnił, wopytaj
+{{fullurl:{{ns:special}}:Watchlist/edit}}',
+
+# Delete/protect/revert
+'deletepage'                  => 'Stronu wušmórnyć',
+'confirm'                     => 'Wobkrućić',
+'excontent'                   => "wobsah běše: '$1'",
+'excontentauthor'             => "wobsah běše: '$1' (jenički wobdźěłowar běše '$2')",
+'exbeforeblank'               => "wobsah do wuprózdnjenja běše: '$1'",
+'exblank'                     => 'strona běše prózdna',
+'confirmdelete'               => 'Wušmórnjenje wobkrućić',
+'deletesub'                   => '(strona „$1” so wušmórnje)',
+'historywarning'              => 'KEDŹBU: Strona, kotruž chceš wušmórnyć, ma stawizny:',
+'confirmdeletetext'           => 'Sy so rozsudźił stronu abo dataju hromadźe ze jeje stawiznami z datoweje banki wotstronić. Prošu wobkruć, zo to maš wotpohlad to činić, zo rozumiš sćěwki a zo to wotpowědujo 
+[[{{MediaWiki:policy-url}}|prawidłam tutoho wikija]] činiš.',
+'actioncomplete'              => 'Dokónčene',
+'deletedtext'                 => 'Strona „$1” bu wušmórnjena. Hlej $2 za lisćinu aktualnych wušmórnjenjow.',
+'deletedarticle'              => 'je stronu [[$1]] wušmórnył.',
+'dellogpage'                  => 'Protokol wušmórnjenjow',
+'dellogpagetext'              => 'Deleka je lisćina najaktualnišich wušmórnjenjow.',
+'deletionlog'                 => 'Protokol wušmórnjenjow',
+'reverted'                    => 'Na staršu wersiju cofnjene',
+'deletecomment'               => 'Přičina wušmórnjenja',
+'imagereverted'               => 'Wobnowjenje předchadneje wersije běše wuspěšna.',
+'rollback'                    => 'Změny cofnyć',
+'rollback_short'              => 'Cofnyć',
+'rollbacklink'                => 'Cofnyć',
+'rollbackfailed'              => 'Cofnjenje njeporadźiło',
+'cantrollback'                => 'Njemóžno změnu cofnyć; strona nima druhich awtorow.',
+'alreadyrolled'               => 'Njemóžno poslednu změnu wot [[:$1]] wužiwarja [[{{ns:user}}:$2|$2]] ([[{{ns:user_talk}}:$2|diskusija]]) cofnyć; něchtó druhi je stronu hižo wobdźěłał abo změnu cofnył.
+
+Poslednja změna běše wot wužiwarja [[{{ns:user}}:$3|$3]] ([[{{ns:user_talk}}:$3|diskusija]]).',
+'editcomment'                 => 'Komentar wobdźěłanja běše: „<i>$1</i>”.', # only shown if there is an edit comment
+'revertpage'                  => 'Změny wužiwarja [[{{ns:user}}:$2|$2]] ([[{{ns:special}}:Contributions/$2|přinoški]]) cofnjene, nawróćene k poslednjej wersiji wužiwarja [[{{ns:user}}:$1|$1]]',
+'sessionfailure'              => 'Po zdaću je problem z twojim přizjewjenjom. Tuta akcija bu jako wěstotna naprawa přećiwo njewoprawnjenemu přistupej přetorhnjena. Prošu dźi wróćo a spytaj hišće raz.',
+'protectlogpage'              => 'Protokol škita',
+'protectlogtext'              => 'To je protokol škitanych stronow a zběhnjenja škita. Hlej [[{{ns:special}}:Protectedpages|tutu specialnu stronu]] za lisćinu škitanych stron.',
+'protectedarticle'            => 'je stronu [[$1]] škitał',
+'unprotectedarticle'          => 'je škit strony [[$1]] zběhnył',
+'protectsub'                  => '(Stronu „$1” škitać)',
+'confirmprotecttext'          => 'Chceš stronu woprawdźe škitać?',
+'confirmprotect'              => 'Škit wobkrućić',
+'protectmoveonly'             => 'Jenož přećiwo přesunjenju škitać',
+'protectcomment'              => 'Přičina za škitanje:',
+'protectexpiry'               => 'Čas škita:',
+'protect_expiry_invalid'      => 'Njepłaćiwy čas spadnjenja.',
+'protect_expiry_old'          => 'Čas škita leži w zańdźenosći.',
+'unprotectsub'                => '(Škit za stronu „$1” so zběhnje)',
+'confirmunprotecttext'        => 'Chceš škit strony woprawdźe zběhnyć?',
+'confirmunprotect'            => 'Zběhnjenje škita wobkrućić',
+'unprotectcomment'            => 'Přičina za zběhnjenje škita',
+'protect-unchain'             => 'Škit přećiwo přesunjenju změnić',
+'protect-text'                => 'Tu móžeš status škita strony <b>$1</b> wobhladać a změnić.',
+'protect-viewtext'            => 'Nimaš trěbne dowolnosće za změnjenje škitoweho statusa. Tu je aktualny škitowy status za stronu <strong>$1</strong>:',
+'protect-cascadeon'           => 'Tuta strona je tuchwilu škitana, dokelž je w naslědnich stronach zapřijata, kotrež kaskadowemu škitej podleža. Móžeš škitowy status strony změnić, to pak njezměje wliw na kaskadowy škit.',
+'protect-default'             => '(standard)',
+'protect-level-autoconfirmed' => 'jenož přizjewjeni wužiwarjo',
+'protect-level-sysop'         => 'jenož administratorojo',
+'protect-summary-cascade'     => 'kaskadowacy',
+'protect-expiring'            => 'spadnje $1 (UTC)',
+'protect-cascade'             => 'Kaskadowacy škit – wšě w tutej stronje zapřijate strony so škituja.',
+
+# Restrictions (nouns)
+'restriction-edit' => 'wobdźěłać',
+'restriction-move' => 'přesunyć',
+
+# Restriction levels
+'restriction-level-sysop'         => 'dospołnje škitany',
+'restriction-level-autoconfirmed' => 'połškitany (móže so jenož přez přizjewjenych wužiwarjow wobdźěłać, kiž nowačcy njejsu)',
+
+# Undelete
+'undelete'                 => 'Wušmórnjenu stronu wobnowić',
+'undeletepage'             => 'Wušmórnjene strony wobnowić',
+'viewdeletedpage'          => 'Wušmórnjene strony wobhladać',
+'undeletepagetext'         => 'Tute strony buchu wušmórnjene, su pak hišće w datowej bance składowane a móža so wobnowić.',
+'undeleteextrahelp'        => 'Zo by stronu z wšěmi wersijemi wobnowił zapodaj prošu přičinu a klikń na „Wobnowić”. Chceš-li jenož jednotliwe wersije wobnowić, wuběr prošu jich markěrowanske kašćiki, zapodaj přičinu a klikń na „Wobnowić”. Kliknjenje na „Cofnyć” wuprózdni komentarowe polo a wšě kašćiki.',
+'undeletearticle'          => 'Wušmórnjenu stronu wobnowić',
+'undeleterevisions'        => '$1 {{PLURAL:$1|wersija|wersiji|wersije|wersijow}} {{PLURAL:$1|archiwowana|archiwowanej|archiwowane|archiwowane}}',
+'undeletehistory'          => 'Jeli stronu wobnowiš, zapřijmnu so wšě (tež prjedy wušmórnjene) wersije zaso do stawiznow. Jeli bu po wušmórnjenju nowa strona ze samsnym mjenom wutworjena, budu so wobnowjene wersije w prjedawšich stawiznach jewić.',
+'undeletehistorynoadmin'   => 'Strona bu wušmórnjena. Přičina za wušmórnjenje so deleka w zjeću pokazuje, zhromadnje z podrobnosćemi wužiwarjow, kotřiž běchu tutu stronu do zničenja wobdźěłali. Tuchwilny wobsah strony je jenož administratoram přistupny.',
+'undelete-revision'        => 'Wušmórnjena wersija strony „$1” wot $2:',
+'undeleterevision-missing' => 'Njepłaćiwa abo pobrachowaca wersija. Pak je wotkaz wopačny, pak bu wotpowědna wersija z archiwa wobnowjena abo wotstronjena.',
+'undeletebtn'              => 'Wobnowić',
+'undeletereset'            => 'Cofnyć',
+'undeletecomment'          => 'Přičina:',
+'undeletedarticle'         => 'Strona „$1” bu wuspěšnje wobnowjena.',
+'undeletedrevisions'       => '$1 {{Plural:$1|wersija|wersiji|wersije|wersijow}} {{Plural:$1|wobnowjena|wobnowjenej|wobnowjene|wobnowjene}}',
+'undeletedrevisions-files' => '$1 {{PLURAL:$1|wersija|wersiji|wersije|wersijow}} a $2 {{Plural:$2|dataja|dataji|dataje|datajow}} {{PLURAL:$2|wobnowjena|wobnowjenej|wobnowjene|wobnowjene}}',
+'undeletedfiles'           => '$1 {{PLURAL:$1|dataja|dataji|dataje|datajow}} {{PLURAL:$1|wobnowjena|wobnowjenej|wobnowjene|wobnowjene}}.',
+'cannotundelete'           => 'Wobnowjenje zwrěšćiło; něchtó druhi je stronu prjedy wobnowił.',
+'undeletedpage'            => '<big><b>Strona $1 bu z wuspěchom wobnowjena.</b></big>
+
+Hlej [[{{ns:special}}:Log/delete|protokol]] za lisćinu aktualnych wušmórnjenjow a wobnowjenjow.',
+'undelete-header'          => 'Hlej [[{{ns:special}}:Log/delete|protokol wušmórnjenjow]] za njedawno wušmórnjene strony.',
+'undelete-search-box'      => 'Wušmórnjene strony pytać',
+'undelete-search-prefix'   => 'Strony pokazać, kotrež započinaja so z:',
+'undelete-search-submit'   => 'Pytać',
+'undelete-no-results'      => 'Žane přihódne strony w archiwje namakane.',
+
+# Namespace form on various pages
+'namespace' => 'Mjenowy rum:',
+'invert'    => 'Wuběr wobroćić',
+
+# Contributions
+'contributions' => 'Přinoški wužiwarja',
+'mycontris'     => 'Moje přinoški',
+'contribsub2'    => 'za wužiwarja $1 ($2)',
+'nocontribs'    => 'Žane změny, kotrež podatym kriterijam wotpowěduja.',
+'ucnote'        => 'Deleka su poslednje <b>$1</b> změnow wužiwarja z poslednich <b>$2</b> dnjow.',
+'uclinks'       => 'Poslednje $1 přinoškow pokazać; poslednje $2 dnjow pokazać.',
+'uctop'         => '(aktualnje)',
+'newbies'       => 'Nowačcy',
+
+'sp-contributions-newest'      => 'najnowše',
+'sp-contributions-oldest'      => 'najstarše',
+'sp-contributions-newer'       => 'nowše $1',
+'sp-contributions-older'       => 'starše $1',
+'sp-contributions-newbies-sub' => 'Za nowačkow',
+'sp-contributions-blocklog'    => 'protokol zablokowanjow',
+
+'sp-newimages-showfrom' => 'nowe dataje započinajo z $1',
+
+# What links here
+'whatlinkshere'         => 'Što wotkazuje sem',
+'whatlinkshere-summary' => 'Tuta specialna strona naliči wšě nutřkowne wotkazy na jednotliwu stronu. Móžne přidawki „zaprijeće předłohi” abo „daleposrědkowanje” skedźbnja na to, zo njeje strona z normalnym wotkazom zawjazana.',
+'notargettitle'         => 'Žadyn cil',
+'notargettext'          => 'Njejsy cilowu stronu abo wužiwarja podał, zo by funkciju wuwjesć móhł.',
+'linklistsub'           => '(Lisćina wotkazow)',
+'linkshere'             => "Naslědne strony na stronu '''[[:$1]]''' wotkazuja:",
+'nolinkshere'           => "Žane strony na '''[[:$1]]''' njewotkazuja.",
+'isredirect'            => 'daleposrědkowanje',
+'istemplate'            => 'zapřijeće předłohi',
+
+# Block/unblock
+'blockip'                     => 'Wužiwarja zablokować',
+'blockiptext'                 => 'Wužij formular deleka, zo by pisanski přistup za podatu IP-adresu abo wužiwarske mjeno blokował. To měło so jenož stać, zo by wandalizmej zadźěwało a woptpowědujo [[{{MediaWiki:policy-url}}|prawidłam]]. Zapodaj deleka přičinu (na př. citujo wosebite strony, kotrež běchu z woporom wandalizma).',
+'ipaddress'                   => 'IP-adresa',
+'ipadressorusername'          => 'IP-adresa abo wužiwarske mjeno',
+'ipbexpiry'                   => 'Spadnjenje',
+'ipbreason'                   => 'Přičina',
+'ipbanononly'                 => 'Jenož anonymnych wužiwarjow zablokować',
+'ipbcreateaccount'            => 'Wutworjenju nowych kontow zadźěwać',
+'ipbenableautoblock'          => 'IP-adresy blokować kiž buchu přez tutoho wužiwarja hižo wužiwane kaž tež naslědne adresy, z kotrychž so wobdźěłanje pospytuje',
+'ipbsubmit'                   => 'Wužiwarja zablokować',
+'ipbother'                    => 'Druha doba',
+'ipboptions'                  => '1 hodźinu:1 hour,2 hodźinje:2 hours, 6 hodźiny:6 hours,1 dźeń:1 day,3 dny:3 days,1 tydźeń:1 week,2 njedźeli:2 weeks,1 měsać:1 month,3 měsacy:3 months,6 měsacow:6 months,1 lěto:1 year,na přeco:indefinite',
+'ipbotheroption'              => 'druha doba (jendźelsce)',
+'badipaddress'                => 'Njepłaćiwa IP-adresa',
+'blockipsuccesssub'           => 'Zablokowanje wuspěšne',
+'blockipsuccesstext'          => 'Wužiwar [[{{ns:special}}:Contributions/$1|$1]] bu zablokowany a akcija bu w [[{{ns:special}}:Log/block|protokolu zablokowanjow]] protokolowana.
+<br />Hlej [[{{ns:special}}:Ipblocklist|lisćinu tuchwilnje płaćiwych zablokowanjow]], zo by zablokowanja přehladał.',
+'ipb-unblock-addr'            => 'zablokowanje wužiwarja „$1“ zběhnyć',
+'ipb-unblock'                 => 'zablokowanje wužiwarja abo IP-adresy zběhnyć',
+'ipb-blocklist-addr'          => 'aktualne zablokowanja za wužiwarja „$1“ zwobraznić',
+'ipb-blocklist'               => 'tuchwilne blokowanja zwobraznić',
+'unblockip'                   => 'Zablokowanje zběhnyć',
+'unblockiptext'               => 'Wužij formular deleka, zo by blokowanje IP-adresy abo wužiwarskeho mjena zběhnył.',
+'ipusubmit'                   => 'Zablokowanje zběhnyć',
+'unblocked'                   => 'Blokowanje wužiwarja [[{{ns:user}}:$1|$1]] zběhnjene',
+'ipblocklist'                 => 'Lisćina zablokowanych IP-adresow a wužiwarskich mjenow',
+'ipblocklist-summary'         => "Tuta specialna strona naliči přidatnje k [[{{ns:special}}:Log/block|protokolej zablokowanjow]] wšěch '''tuchwilu''' zablokowanych wužiwarjow a wše zablokowane IP-adresy hromadźe z awtomatisce zablokowanymi IP-adresami w anonymizowanej formje.",
+'ipblocklist-submit'          => 'Pytać',
+'blocklistline'               => '$1, $2 je wužiwarja $3 zablokował ($4)',
+'infiniteblock'               => 'na přeco',
+'expiringblock'               => 'hač do $1',
+'anononlyblock'               => 'jenož anonymnych',
+'noautoblockblock'            => 'awtoblokowanje znjemóžnjene',
+'createaccountblock'          => 'wutworjenje wužiwarskich kontow znjemóžnjene',
+'ipblocklistempty'            => 'Lisćina tuchwilnych zablokowanjow je prózdna.',
+'blocklink'                   => 'zablokować',
+'unblocklink'                 => 'blokowanje zběhnyć',
+'contribslink'                => 'přinoški',
+'autoblocker'                 => 'Awtomatiske blokowanje, dokelž twoja IP-adresa bu njedawno wot wužiwarja „[[{{ns:user}}:$1|$1]]” wužita. Přičina, podata přez blokowaceho administratora $1 je: „<b>$2</b>”.',
+'blocklogpage'                => 'Protokol zablokowanjow',
+'blocklogentry'               => 'je wužiwarja [[$1]] zablokował z časom spadnjenja $2 $3',
+'blocklogtext'                => 'To je protokol blokowanja a wotblokowanja wužiwarjow. Awtomatisce blokowane IP-adresy so njenaličuja. Hlej [[{{ns:special}}:Ipblocklist|lisćinu zablokowanych IP-adresow]] za přehlad tuchwilnych blokowanjow.',
+'unblocklogentry'             => 'zablokowanje wužiwarja $1 bu zběhnjene',
+'block-log-flags-anononly'    => 'jenož anonymnych',
+'block-log-flags-nocreate'    => 'wutworjenje wužiwarskich kontow znjemóžnjene',
+'block-log-flags-autoblock'   => 'awtoblokowanje zmóžnjene',
+'range_block_disabled'        => 'Kmanosć administratorow, cyłe wobłuki IP-adresow blokować, je znjemóžnjena.',
+'ipb_expiry_invalid'          => 'Čas spadnjenja je njepłaćiwy.',
+'ipb_already_blocked'         => 'Wužiwar „$1” je hižo zablokowany.',
+'ip_range_invalid'            => 'Njepłaciwy wobłuk IP-adresow.',
+'proxyblocker'                => 'Awtomatiske blokowanje wotewrjenych proksy-serwerow',
+'ipb_cant_unblock'            => 'Zmylk: Njemóžno ID zablokowanja $1 namakać. Zablokowanje je so najskerje mjeztym zběhnyło.',
+'proxyblockreason'            => 'Twoja IP-adresa bu zablokowana, dokelž je wotewrjeny proksy. Prošu skontaktuj swojeho prowidera abo syćoweho administratora a informuj jeho wo tutym chutnym wěstotnym problemje.',
+'proxyblocksuccess'           => 'Dokónčene.',
+'sorbs'                       => 'SORBS DNSbl',
+'sorbsreason'                 => 'Twoja IP-adresa je zapisana jako wotewrjeny proksy na DNSBL {{GRAMMAR:genitiw|{{SITENAME}}}}.',
+'sorbs_create_account_reason' => 'Twoja IP-adresa je zapisana jako wotewrjeny proksy na DNSBL {{GRAMMAR:genitiw|{{SITENAME}}}}. Njemóžeš konto wutworić.',
+
+# Developer tools
+'lockdb'              => 'Datowu banku zamknyć',
+'unlockdb'            => 'Datowu banku wotamknyć',
+'lockdbtext'          => 'Zamknjenje datoweje banki znjemóžni wšěm wužiwarjam strony wobdźěłać, jich nastajenja změnić, jich wobkedźbowanki wobdźěłać a wšě druhe dźěła činić, kotrež sej změny w datowej bance žadaja. Prošu wobkruć, zo chceš datowu banku woprawdźe zamknyć a zo chceš ju zaso wotamknyć, hdyž wothladowanje je sčinjene.',
+'unlockdbtext'        => 'Wotamknjenje datoweje banki zaso wšěm wužiwarjam zmóžni strony wobdźěłać, jich nastajenja změnić, jich wobkedźbowanki wobdźěłać a wšě druhe dźěła činić, kotrež sej změny w datowej bance žadaja. Prošu wobkruć, zo chceš datowu banku woprawdźe wotamknyć.',
+'lockconfirm'         => 'Haj, chcu datowu banku woprawdźe zamknyć.',
+'unlockconfirm'       => 'Haj, chcu datowu banku woprawdźe wotamknyć.',
+'lockbtn'             => 'Datowu banku zamknyć',
+'unlockbtn'           => 'Datowu banku wotamknyć',
+'locknoconfirm'       => 'Njejsy kontrolowy kašćik nakřižował.',
+'lockdbsuccesssub'    => 'Datowa banka bu wuspěšnje zamknjena.',
+'unlockdbsuccesssub'  => 'Datowa banka bu wuspěšnje wotamknjena.',
+'lockdbsuccesstext'   => 'Datowa banka bu zamknjena.
+<br />Njezabudź [[{{ns:special}}:Unlockdb|zamknjenje zaso zběhnyć]], po tym zo wothladowanje je sčinjene.',
+'unlockdbsuccesstext' => 'Datowa banka bu wotamknjena.',
+'lockfilenotwritable' => 'Do dataje zamknjenja datoweje banki njeda so zapisować. Za zamknjenje abo wotamknjenje datoweje banki dyrbi webowy serwer pisanske prawo měć.',
+'databasenotlocked'   => 'Datajowa banka zamknjena njeje.',
+
+# Move page
+'movepage'                => 'Stronu přesunyć',
+'movepagetext'            => 'Wužiwanje formulara deleka budźe stronu přemjenować, suwajo jeje cyłe stawizny pod nowe mjeno. Stary titl budźe daleposrědkowanje na nowy titl. Wotkazy na stary titl so njezměnja. Pruwuj za dwójnymi abo skóncowanymi daleposrědkowanjemi. Dyrbiš zaručić, zo wotkazy na stronu pokazuja, na kotruž dyrbja dowjesć.
+
+Wobkedźbuj, zo strona so <b>nje</b> přesunje, jeli strona z nowym titlom hizo eksistuje, chibazo wona je prózdna abo dalesposrědkowanje a nima zašłe stawizny. To woznamjenja, zo móžeš stronu tam wróćo přemjenować, hdźež bu runje přemjenowana, jeli zmylk činiš a njemóžeš wobstejacu stronu přepisować.
+
+<b>KEDŹBU!</b> Móže to drastiska a njewočakowana změna za woblubowanu stronu być; prošu budź sej wěsty, zo sćěwki rozumiš, prjedy hač pokročuješ.',
+'movepagetalktext'        => 'Přisłušna diskusijna strona přesunje so awtomatisce hromadźe z njej, <b>chibazo:</b>
+*Njeprózdna diskusijna strona pod nowym mjenom hižo eksistuje abo
+*wotstronješ hóčku z kašćika deleka.
+
+W tutych padach dyrbiš stronu manuelnje přesunyć abo zaměšeć, jeli sej to přeješ.',
+'movearticle'             => 'Stronu přesunyć',
+'movenologin'             => 'Njejsy přizjewjeny.',
+'movenologintext'         => 'Dyrbiš zregistrowany wužiwar a [[{{ns:special}}:Userlogin|přizjewjeny]] być, zo by stronu přesunyć móhł.',
+'newtitle'                => 'K nowemu titlej',
+'move-watch'              => 'Stronu wobkedźbować',
+'movepagebtn'             => 'Stronu přesunyć',
+'pagemovedsub'            => 'Přesunjenje wuspěšne',
+'pagemovedtext'           => 'Strona „[[$1]]” bu pod hesło „[[$2]]” přesunjena.',
+'articleexists'           => 'Strona z tutym mjenom hižo eksistuje abo mjeno, kotrež sy wuzwolił(a), płaćiwe njeje. Prošu wuzwol druhe mjeno.',
+'talkexists'              => 'Strona sama bu z wuspěchom přesunjena, ale diskusijna strona njeda so přesunyć, dokelž pod nowym titulom hižo eksistuje. Prošu změšće jeju manuelnje.',
+'movedto'                 => 'přesunjena do hesła',
+'movetalk'                => 'Přisłušnu diskusijnu stronu tohorunja přesunyć',
+'talkpagemoved'           => 'Přisłušna diskusijna strona bu tohorunja přesunjena.',
+'talkpagenotmoved'        => 'Přisłušna diskusijna strona <strong>njebu</strong> přesunjena.',
+'1movedto2'               => 'je stronu [[$1]] pod hesło [[$2]] přesunył',
+'1movedto2_redir'         => 'je stronu [[$1]] pod hesło [[$2]] přesunył a při tym daleposrědkowanje přepisał.',
+'movelogpage'             => 'Protokol přesunjenjow',
+'movelogpagetext'         => 'Deleka je lisćina wšěch přesunjenych stronow.',
+'movereason'              => 'Přičina',
+'revertmove'              => 'wróćo přesunyć',
+'delete_and_move'         => 'wušmórnyć a přesunyć',
+'delete_and_move_text'    => '== Wušmórnjenje trěbne ==
+
+Cilowa strona „[[$1]]” hižo eksistuje. Chceš ju wušmórnyć, zo by so přesunjenje zmóžniło?',
+'delete_and_move_confirm' => 'Haj, stronu wušmórnyć.',
+'delete_and_move_reason'  => 'Strona bu wušmórnjena, zo by so přesunjenje zmóžniło.',
+'selfmove'                => 'Žórłowy a cilowy titl stej samsnej; strona njehodźi so na sebje samu přesunyć.',
+'immobile_namespace'      => 'Cilowy titl je wosebity typ; strony njehodźa so do tutoho mjenoweho ruma abo z njeho přesunyć.',
+
+# Export
+'export'            => 'Strony eksportować',
+'exporttext'        => 'Móžeš tekst a stawizny wěsteje strony abo skupiny stronow, kotrež su w XML zawite, eksportować. To da so potom do druheho wikija, kotryž ze software MediaWiki dźěła, z pomocu strony {{ns:special}}:Import importować.
+
+Zo by strony eksportował, zapodaj title deleka do tekstoweho pola, jedyn titul na linku, a wubjer hač chceš aktualnu wersiju kaž tež stare wersije z linkami stawiznow strony abo jenož aktualnu wersiju z informacijemi wo poslednjej změnje eksportować.
+
+W poslednim padźe móžeš tež wotkaz wužiwać, na př. „[[{{ns:special}}:Export/{{int:Mainpage}}]]” za stronu „{{int:Mainpage}}”.',
+'exportcuronly'     => 'Jenož aktualnu wersiju zapřijeć, nic dospołne stawizny',
+'exportnohistory'   => '----
+<b>Kedźbu:</b> Eksport cyłych stawiznow přez tutón formular bu z přičin wukonitosće serwera znjemóžnjeny.',
+'export-submit'     => 'Eksportować',
+'export-addcattext' => 'Strony z kategorije dodawać:',
+'export-addcat'     => 'Dodawać',
+
+# Namespace 8 related
+'allmessages'               => 'Systemowe zdźělenki',
+'allmessagesname'           => 'Mjeno',
+'allmessagesdefault'        => 'Standardny tekst',
+'allmessagescurrent'        => 'Aktualny tekst',
+'allmessagestext'           => 'To je lisćina wšěch systemowych zdźělenkow, kotrež w mjenowym rumje MediaWiki k dispoziciji steja.',
+'allmessagesnotsupportedUI' => 'Twój rěčny powjerch <b>$1</b> so w tutym wikiju wot strony {{ns:special}}:Allmessages njepodpěruje.',
+'allmessagesnotsupportedDB' => 'Strona <b>{{ns:special}}:Allmessages</b> njemóže so wužiwać, dokelž je datowa banka wotpinata.',
+'allmessagesfilter'         => 'Filter za jednotliwe zdźělenki:',
+'allmessagesmodified'       => 'Jenož změnjene pokazać',
+
+# Thumbnails
+'thumbnail-more'  => 'powjetšić',
+'missingimage'    => '<b>Pobrachowacy wobraz</b>
+
+<i>$1</i>',
+'filemissing'     => 'Dataja pobrachuje',
+'thumbnail_error' => 'Zmylk při wutworjenju miniaturki: $1',
+
+# Special:Import
+'import'                     => 'Strony importować',
+'importinterwiki'            => 'Transwiki import',
+'import-interwiki-text'      => 'Wuběr wiki a stronu k importowanju. Daty wersijow a mjena awtorow so zachowaja. Wšě transwiki-importy so w [[{{ns:special}}:Log/import|protokolu importow]] protokoluja.',
+'import-interwiki-history'   => 'Wšě wersije ze stawiznow tuteje strony kopěrować',
+'import-interwiki-submit'    => 'Importować',
+'import-interwiki-namespace' => 'Strony importować do mjenoweho ruma:',
+'importtext'                 => 'Prošu eksportuj dataju ze žórłoweho wikija wužiwajo stronu [[{{ns:special}}:Export]], składuj ju na swoju tačel a nahraj ju sem.',
+'importstart'                => 'Importuju…',
+'import-revision-count'      => '$1 {{PLURAL:$1|wersija|wersiji|wersije|wersijow}}',
+'importnopages'              => 'Žane strony za importowanje.',
+'importfailed'               => 'Import zwrěšćił: $1',
+'importunknownsource'        => 'Njeznate importowe žórło',
+'importcantopen'             => 'Importowa dataja njeda so wočinjeć.',
+'importbadinterwiki'         => 'Wopačny interwiki-wotkaz',
+'importnotext'               => 'Prózdny abo žadyn tekst',
+'importsuccess'              => 'Import wuspěšny!',
+'importhistoryconflict'      => 'Je konflikt ze stawiznami strony wustupił. Snano bu strona hižo prjedy importowana.',
+'importnosources'            => 'Žane importowanske žórła za transwiki wubrane. Direktne nahraće stawiznow je znjemóžnjene.',
+'importnofile'               => 'Žana importowanska dataja wubrana.',
+'importuploaderror'          => 'Nahraće importoweje dataje zwrěšćiło. Snano je dataja wjetša hač dowolena wulkosć za nahraće.',
+
+# Import log
+'importlogpage'                    => 'Protokol importow',
+'importlogpagetext'                => 'To je lisćina importowanych stronow ze stawiznami z druhich wikijow.',
+'import-logentry-upload'           => 'strona [[$1]] bu přez nahraće importowana',
+'import-logentry-upload-detail'    => '$1 {{PLURAL:$1|wersija|wersiji|wersije|wersijow}}',
+'import-logentry-interwiki'        => 'je stronu [[$1]] z druheho wikija přenjesł',
+'import-logentry-interwiki-detail' => '$1 {{PLURAL:$1|wersija|wersiji|wersije|wersijow}} z $2 {{PLURAL:$1|importowana|importowanej|importowane|importowane}}',
+
+# Tooltip help for the actions
+'tooltip-pt-userpage'             => 'moja wužiwarska strona',
+'tooltip-pt-anonuserpage'         => 'Wužiwarska strona IP-adresy, z kotrejž tuchwilu dźěłaš',
+'tooltip-pt-mytalk'               => 'moja diskusijna strona',
+'tooltip-pt-anontalk'             => 'Diskusija wo změnach z tuteje IP-adresy',
+'tooltip-pt-preferences'          => 'moje nastajenja',
+'tooltip-pt-watchlist'            => 'Lisćina stronow, kotrež wobkedźbuješ',
+'tooltip-pt-mycontris'            => 'lisćina mojich přinoškow',
+'tooltip-pt-login'                => 'Móžeš so woměrje přizjewić, to pak zawjazowace njeje.',
+'tooltip-pt-anonlogin'            => 'Móžeš so woměrje přizjewić, to pak zawjazowace njeje.',
+'tooltip-pt-logout'               => 'so wotzjewić',
+'tooltip-ca-talk'                 => 'diskusija wo stronje',
+'tooltip-ca-edit'                 => 'Móžeš stronu wobdźěłać. Prošu wužij tłóčku „Přehlad” do składowanja.',
+'tooltip-ca-addsection'           => 'nowy wotrězk k diskusiji dodać',
+'tooltip-ca-viewsource'           => 'Strona je škitana. Móžeš pak jeje žórło wobhladać.',
+'tooltip-ca-history'              => 'stawizny tuteje strony',
+'tooltip-ca-protect'              => 'stronu škitać',
+'tooltip-ca-delete'               => 'stronu wušmórnyć',
+'tooltip-ca-undelete'             => 'změny wobnowić, kotrež buchu do wušmórnjenja sčinjene',
+'tooltip-ca-move'                 => 'stronu přesunyć',
+'tooltip-ca-watch'                => 'stronu  wobkedźbowankam přidać',
+'tooltip-ca-unwatch'              => 'stronu z wobkedźbowankow wotstronić',
+'tooltip-search'                  => '{{GRAMMAR:akuzatiw|{{SITENAME}}}} přepytać',
+'tooltip-p-logo'                  => 'hłowna strona',
+'tooltip-n-mainpage'              => 'hłownu stronu pokazać',
+'tooltip-n-portal'                => 'Wo projekće, što móžeš činić, hdźe móžeš informacije namakać',
+'tooltip-n-currentevents'         => 'pozadkowe informacije wo aktualnych podawkach pytać',
+'tooltip-n-recentchanges'         => 'lisćina aktualnych změnow w tutym wikiju',
+'tooltip-n-randompage'            => 'připadny nastawk wopytać',
+'tooltip-n-help'                  => 'pomocna strona',
+'tooltip-n-sitesupport'           => 'projekt podpěrować',
+'tooltip-t-whatlinkshere'         => 'lisćina wšěch stronow, kotrež sem wotkazuja',
+'tooltip-t-recentchangeslinked'   => 'aktualne změny w stronach, na kotrež tuta strona wotkazuje',
+'tooltip-feed-rss'                => 'RSS-feed za tutu stronu',
+'tooltip-feed-atom'               => 'Atom-feed za tutu stronu',
+'tooltip-t-contributions'         => 'přinoški tutoho wužiwarja wobhladać',
+'tooltip-t-emailuser'             => 'wužiwarjej mejlku pósłać',
+'tooltip-t-upload'                => 'dataje nahrać',
+'tooltip-t-specialpages'          => 'lisćina wšěch specialnych stronow',
+'tooltip-ca-nstab-main'           => 'stronu wobhladać',
+'tooltip-ca-nstab-user'           => 'wužiwarsku stronu wobhladać',
+'tooltip-ca-nstab-media'          => 'datajowu stronu wobhladać',
+'tooltip-ca-nstab-special'        => 'To je specialna strona. Njemóžeš ju wobdźěłać.',
+'tooltip-ca-nstab-project'        => 'projektowu stronu wobhladać',
+'tooltip-ca-nstab-image'          => 'wobrazowu stronu wobhladać',
+'tooltip-ca-nstab-mediawiki'      => 'systemowu zdźělenku wobhladać',
+'tooltip-ca-nstab-template'       => 'předłohu wobhladać',
+'tooltip-ca-nstab-help'           => 'pomocnu stronu wobhladać',
+'tooltip-ca-nstab-category'       => 'kategorijnu stronu wobhladać',
+'tooltip-minoredit'               => 'jako snadnu změnu woznamjenić',
+'tooltip-save'                    => 'změny składować',
+'tooltip-preview'                 => 'twoje změny přehladnyć, prošu čiń to do składowanja!',
+'tooltip-diff'                    => 'změny pokazać, kotrež sy w teksće činił',
+'tooltip-compareselectedversions' => 'rozdźěle mjez wubranymaj wersijomaj tuteje strony pokazać',
+'tooltip-watch'                   => 'tutu stronu wobkedźbowankam přidać',
+'tooltip-recreate'                => 'stronu znowa wutworić, hačrunjež bu wumšmórnjena',
+
+# Stylesheets
+'common.css'   => '/* CSS w tutej dataji budźe so na wšěch stronow wuskutkować. */',
+'monobook.css' => '/* CSS wobdźěłać, zo by so skin „monobook” za wšěčh wužiwarjow tutoho skina priměrił */',
+
+# Scripts
+'common.js'   => '/* Kóždy JavaScript tu so za wšěch wužiwarjow při kóždym zwobraznjenju někajkeje strony začita. */',
+'monobook.js' => '/* Zestarjene; prošu [[MediaWiki:common.js]] wužiwać */',
+
+# Metadata
+'nodublincore'      => 'Dublin Core RDF metadaty su za tutón serwer znjemóžnjene.',
+'nocreativecommons' => 'Creative Commons RDF metadaty su za tutón serwer znjemóžnjene.',
+'notacceptable'     => 'Serwer wikija njemóže daty we formaće poskićić, kotryž twój wudawanski nastroj móže čitać.',
+
+# Attribution
+'anonymous'        => 'Anonymny wužiwar/anonymni wužiwarjo {{GRAMMAR:genitiw|{{SITENAME}}}}',
+'siteuser'         => 'wužiwar {{GRAMMAR:genitiw|{{SITENAME}}}} $1',
+'lastmodifiedatby' => 'Strona bu dnja $1 w $2 hodź. wot wužiwarja $3 změnjena.', # $1 date, $2 time, $3 user
+'and'              => 'a',
+'othercontribs'    => 'Na zakładźe dźěła wužiwarja $1.',
+'others'           => 'druhich',
+'siteusers'        => 'wužiwarjow {{GRAMMAR:genitiw|{{SITENAME}}}} $1',
+'creditspage'      => 'Dźak awtoram',
+'nocredits'        => 'Za tutu stronu žane informacije wo zasłužbach njejsu.',
+
+# Spam protection
+'spamprotectiontitle'    => 'Spamowy filter',
+'spamprotectiontext'     => 'Strona, kotruž sy spytał składować, bu přez spamowy filter zablokowana. Přičina je najskerje wotkaz na eksterne sydło.',
+'spamprotectionmatch'    => 'Naslědni tekst je naš spamowy filter wotpokazał: $1',
+'subcategorycount'       => 'Tuta kategorija wobsahuje $1 {{PLURAL:$1|podkategoriju|podkategoriji|podkategorije|podkategorijow}}.',
+'categoryarticlecount'   => 'Tuta kategorija wobsahuje $1 {{PLURAL:$1|nastawk|nastawkaj|nastawki|nastawkow}}.',
+'category-media-count'   => 'Tuta kategorija wobsahuje $1 {{PLURAL:$1|dataju|dataji|dataje|datajow}}.',
+'listingcontinuesabbrev' => ' (pokročowane)',
+'spambot_username'       => 'MediaWiki čisćenje wot spama',
+'spam_reverting'         => 'wróćo na poslednju wersiju, kotraž wotkazy na $1 njewobsahuje',
+'spam_blanking'          => 'Wšě wersije wobsahowachu wotkazy na $1, wučisćene.',
+
+# Info page
+'infosubtitle'   => 'Informacije za stronu',
+'numedits'       => 'Ličba změnow (nastawk): $1',
+'numtalkedits'   => 'Ličba změnow (diskusijna strona): $1',
+'numwatchers'    => 'Ličba wobkedźbowarjow: $1',
+'numauthors'     => 'Ličba rozdźělnych awtorow (nastawk): $1',
+'numtalkauthors' => 'Ličba rozdźělnych awtorow (diskusijna strona): $1',
+
+# Math options
+'mw_math_png'    => 'Přeco jako PNG zwobraznić',
+'mw_math_simple' => 'HTML jeli jara jednory, hewak PNG',
+'mw_math_html'   => 'HTML jeli móžno, hewak PNG',
+'mw_math_source' => 'Jako TeX wostajić (za tekstowe wobhladowaki)',
+'mw_math_modern' => 'Za moderne wobhladowaki doporučene',
+'mw_math_mathml' => 'MathML jeli móžno (eksperimentalnje)',
+
+# Patrolling
+'markaspatrolleddiff'                 => 'Změnu jako přepruwowanu woznamjenić',
+'markaspatrolledtext'                 => 'Tutu změnu nastawka jako přepruwowanu woznamjenić',
+'markedaspatrolled'                   => 'Změna bu jako přepruwowana woznamjenjena.',
+'markedaspatrolledtext'               => 'Wubrana wersija bu jako přepruwowana woznamjenjena.',
+'rcpatroldisabled'                    => 'Přepruwowanje aktualnych změnow je znjemóžnjene.',
+'rcpatroldisabledtext'                => 'Funkcija přepruwowanja aktualnych změnow je tuchwilu znjemóžnjena.',
+'markedaspatrollederror'              => 'Njemóžno jako přepruwowanu woznamjenić.',
+'markedaspatrollederrortext'          => 'Dyrbiš wersiju podać, kotraž so ma jako přepruwowana woznamjenić.',
+'markedaspatrollederror-noautopatrol' => 'Njesměš swoje změny jako přepruwowane woznamjenjeć.',
+
+# Patrol log
+'patrol-log-page' => 'Protokol přepruwowanjow',
+'patrol-log-line' => 'je $1 strony $2 jako přepruwowanu markěrował $3.',
+'patrol-log-auto' => '(awtomatisce)',
+'patrol-log-diff' => 'wersiju $1',
+
+# Image deletion
+'deletedrevision' => 'Stara wersija $1 wušmórnjena',
+
+# Browsing diffs
+'previousdiff' => '← předchadna wersija',
+'nextdiff'     => 'přichodna wersija →',
+
+# Media information
+'mediawarning'         => '<b>KEDŹBU:</b> Dataja móhła złowólny kod wobsahować, kotrehož wuwjedźenje móhło twój system wobškodźić.<hr />',
+'imagemaxsize'         => 'Wobrazy na stronach wobrazoweho wopisanja wobmjezować na:',
+'thumbsize'            => 'Wulkosć miniaturkow (thumbnails):',
+'file-info'            => 'Wulkosć dataje: $1, družina MIME: $2',
+'file-info-size'       => '($1 × $2 pikselow, wulkosć dataje: $3, družina MIME: $4)',
+'file-nohires'         => '<small>Žana dataja z wyšim rozpušćenjom.</small>',
+'show-big-image'       => 'Wersija z wyšim rozpušćenjom',
+'show-big-image-thumb' => '<small>Wulkosć miniaturki: $1 × $2 pikselow</small>',
+
+'newimages'         => 'Nowe dataje',
+'newimages-summary' => 'Tuta specialna strona naliči aktualnje nahrate wobrazy a druhe dataje.',
+'showhidebots'      => '(bots $1)',
+'noimages'          => 'Žane dataje.',
+
+# Labels for User: and Title: on Special:Log pages
+'specialloguserlabel'  => 'Wužiwar:',
+'speciallogtitlelabel' => 'Titl:',
+
+'passwordtooshort' => 'Hesło je překrótke. Dyrbi znajmjeńša $1 {{PLURAL:$1|znamješko|znamješce|znamješka|znamješkow}} měć.',
+
+# Metadata
+'metadata'          => 'Metadaty',
+'metadata-help'     => 'Dataja wobsahuje přidatne informacije, kotrež pochadźa z digitalneje kamery abo skenera. Jeli dataja bu wot toho změnjena je móžno, zo někotre podrobnosće z nětčišeho stawa wotchila.',
+'metadata-expand'   => 'Podrobnosće pokazać',
+'metadata-collapse' => 'Podrobnosće schować',
+'metadata-fields'   => 'Naslědne EXIF-metadaty so standardnje pokazuja. Druhe so po standardźe schowaja a móža so z tabele rozfałdować.
+* make
+* model
+* datetimeoriginal
+* exposuretime
+* fnumber
+* focallength',
+
+# EXIF tags
+'exif-imagewidth'                  => 'Šěrokosć',
+'exif-imagelength'                 => 'Wysokosć',
+'exif-bitspersample'               => 'Bitow na barbowu komponentu',
+'exif-compression'                 => 'Metoda kompresije',
+'exif-photometricinterpretation'   => 'Zestajenje pikselow',
+'exif-orientation'                 => 'Wusměrjenje kamery',
+'exif-samplesperpixel'             => 'Ličba komponentow',
+'exif-planarconfiguration'         => 'Porjad datow',
+'exif-ycbcrsubsampling'            => 'Poměr podwotmasanja (Subsampling) wot Y do C',
+'exif-ycbcrpositioning'            => 'Zaměstnjenje Y a C',
+'exif-xresolution'                 => 'Wodorune rozpušćenje',
+'exif-yresolution'                 => 'Padorune rozpušćenje',
+'exif-resolutionunit'              => 'Jednotka rozpušćenja X a Y',
+'exif-stripoffsets'                => 'Městno wobrazowych datow',
+'exif-rowsperstrip'                => 'Ličba rjadkow na pas',
+'exif-stripbytecounts'             => 'Bajty na komprimowany pas',
+'exif-jpeginterchangeformat'       => 'Offset k JPEG SOI',
+'exif-jpeginterchangeformatlength' => 'Bajty JPEG datow',
+'exif-transferfunction'            => 'Přenošowanska funkcija',
+'exif-whitepoint'                  => 'Barbowa kwalita běłeho dypka',
+'exif-primarychromaticities'       => 'Barbowa kwalita primarnych barbow',
+'exif-ycbcrcoefficients'           => 'Koeficienty matriksy za transformaciju barbneho ruma',
+'exif-referenceblackwhite'         => 'Por čorneje a běłeje referencneje hódnoty',
+'exif-datetime'                    => 'Datum a čas datajoweje změny',
+'exif-imagedescription'            => 'Titl wobraza',
+'exif-make'                        => 'Zhotowjer kamery',
+'exif-model'                       => 'Model kamery',
+'exif-software'                    => 'Software',
+'exif-artist'                      => 'Awtor',
+'exif-copyright'                   => 'Mějićel awtorskich prawow',
+'exif-exifversion'                 => 'Wersija EXIF',
+'exif-flashpixversion'             => 'Podpěrowana wersija Flashpix',
+'exif-colorspace'                  => 'Barbny rum',
+'exif-componentsconfiguration'     => 'Woznam kóždeje komponenty',
+'exif-compressedbitsperpixel'      => 'Modus wobrazoweje kompresije',
+'exif-pixelydimension'             => 'Płaćiwa šěrokosć wobraza',
+'exif-pixelxdimension'             => 'Płaćiwa wysokosć wobraza',
+'exif-makernote'                   => 'Přispomnjenki zhotowjerja',
+'exif-usercomment'                 => 'Přispomjenja wužiwarja',
+'exif-relatedsoundfile'            => 'Zwjazana zynkowa dataja',
+'exif-datetimeoriginal'            => 'Datum a čas wutworjenja datow',
+'exif-datetimedigitized'           => 'Datum a čas digitalizowanja',
+'exif-subsectime'                  => 'Dźěle sekundy za DateTime',
+'exif-subsectimeoriginal'          => 'Dźěle sekundy za DateTimeOriginal',
+'exif-subsectimedigitized'         => 'Dźěle sekundy za DateTimeDigitized',
+'exif-exposuretime'                => 'Naswětlenski čas',
+'exif-exposuretime-format'         => '$1 sek. ($2)',
+'exif-fnumber'                     => 'Zasłona',
+'exif-fnumber-format'              => 'f/$1',
+'exif-exposureprogram'             => 'Naswětlenski program',
+'exif-spectralsensitivity'         => 'Spektralna cutliwosć',
+'exif-isospeedratings'             => 'Filmowa cutliwosć (ISO)',
+'exif-oecf'                        => 'Optoelektroniski přeličenski faktor (OECF)',
+'exif-shutterspeedvalue'           => 'Naswětlenski čas',
+'exif-aperturevalue'               => 'Zasłona',
+'exif-brightnessvalue'             => 'Swětłosć',
+'exif-exposurebiasvalue'           => 'Naswětlenska korektura',
+'exif-maxaperturevalue'            => 'Najwjetša zasłona',
+'exif-subjectdistance'             => 'Zdalenje k předmjetej',
+'exif-meteringmode'                => 'Měrjenska metoda',
+'exif-lightsource'                 => 'Žórło swěcy',
+'exif-flash'                       => 'Błysk',
+'exif-focallength'                 => 'Palnišćowa zdalenosć',
+'exif-focallength-format'          => '$1 mm',
+'exif-subjectarea'                 => 'Wobwod předmjeta',
+'exif-flashenergy'                 => 'Sylnosć błyska',
+'exif-spatialfrequencyresponse'    => 'Cutliwosć rumoweje frekwency',
+'exif-focalplanexresolution'       => 'Wodorune rozpušćenje sensora',
+'exif-focalplaneyresolution'       => 'Padorune rozpušćenje sensora',
+'exif-focalplaneresolutionunit'    => 'Jednotka rozpušćenja sensora',
+'exif-subjectlocation'             => 'Městno předmjeta',
+'exif-exposureindex'               => 'Naswětlenski indeks',
+'exif-sensingmethod'               => 'Měrjenska metoda',
+'exif-filesource'                  => 'Žórło dataje',
+'exif-scenetype'                   => 'Typ sceny',
+'exif-cfapattern'                  => 'Muster CFA',
+'exif-customrendered'              => 'Wot wužiwarja definowane předźěłanje wobrazow',
+'exif-exposuremode'                => 'Naswětlenski modus',
+'exif-whitebalance'                => 'Balansa běłeho dypka',
+'exif-digitalzoomratio'            => 'Digitalny zoom',
+'exif-focallengthin35mmfilm'       => 'Palnišćowa zdalenosć za film 35 mm přeličena',
+'exif-scenecapturetype'            => 'Družina sceny',
+'exif-gaincontrol'                 => 'Regulowanje sceny',
+'exif-contrast'                    => 'Kontrast',
+'exif-saturation'                  => 'Nasyćenosć',
+'exif-sharpness'                   => 'Wótrosć',
+'exif-devicesettingdescription'    => 'Nastajenja nastroja',
+'exif-subjectdistancerange'        => 'Zdalenosć k motiwej',
+'exif-imageuniqueid'               => 'ID wobraza',
+'exif-gpsversionid'                => 'Wersija ID GPS',
+'exif-gpslatituderef'              => 'Sewjerna abo južna šěrina',
+'exif-gpslatitude'                 => 'Geografiska šěrina',
+'exif-gpslongituderef'             => 'Wuchodna abo zapadna dołhosć',
+'exif-gpslongitude'                => 'Geografiska dołhosć',
+'exif-gpsaltituderef'              => 'Referencna wyšina',
+'exif-gpsaltitude'                 => 'Wyšina',
+'exif-gpstimestamp'                => 'Čas GPS (atomowy časnik)',
+'exif-gpssatellites'               => 'Satelity wužiwane za měrjenje',
+'exif-gpsstatus'                   => 'Status přijimaka',
+'exif-gpsmeasuremode'              => 'Měrjenska metoda',
+'exif-gpsdop'                      => 'Měrjenska dokładnosć',
+'exif-gpsspeedref'                 => 'Jednotka spěšnosće',
+'exif-gpsspeed'                    => 'Spěšnosć přijimaka GPS',
+'exif-gpstrackref'                 => 'Referenca za směr pohiba',
+'exif-gpstrack'                    => 'Směr pohiba',
+'exif-gpsimgdirectionref'          => 'Referenca za wusměrjenje wobraza',
+'exif-gpsimgdirection'             => 'Wobrazowy směr',
+'exif-gpsmapdatum'                 => 'Wužiwane geodetiske daty',
+'exif-gpsdestlatituderef'          => 'Referenca za šěrinu',
+'exif-gpsdestlatitude'             => 'Šěrina',
+'exif-gpsdestlongituderef'         => 'Referenca dołhosće',
+'exif-gpsdestlongitude'            => 'Šěrina',
+'exif-gpsdestbearingref'           => 'Referenca za wusměrjenje',
+'exif-gpsdestbearing'              => 'Wusměrjenje',
+'exif-gpsdestdistanceref'          => 'Referenca za zdalenosć k cilej',
+'exif-gpsdestdistance'             => 'Zdalenosć k cilej',
+'exif-gpsprocessingmethod'         => 'Metoda předźěłanja GPS',
+'exif-gpsareainformation'          => 'Mjeno wobwoda GPS',
+'exif-gpsdatestamp'                => 'Datum GPS',
+'exif-gpsdifferential'             => 'Diferencialna korektura GPS',
+
+# EXIF attributes
+'exif-compression-1' => 'Njekomprimowany',
+'exif-compression-6' => 'JPEG',
+
+'exif-photometricinterpretation-2' => 'RGB',
+'exif-photometricinterpretation-6' => 'YCbCr',
+
+'exif-unknowndate' => 'Njeznaty datum',
+
+'exif-orientation-1' => 'Normalnje', # 0th row: top; 0th column: left
+'exif-orientation-2' => 'Wodorunje wobroćeny', # 0th row: top; 0th column: right
+'exif-orientation-3' => '180° zwjertnjeny', # 0th row: bottom; 0th column: right
+'exif-orientation-4' => 'Padorunje wobroćeny', # 0th row: bottom; 0th column: left
+'exif-orientation-5' => '90° přećiwo směrej časnika zwjertneny a padorunje wobroćeny', # 0th row: left; 0th column: top
+'exif-orientation-6' => '90° w směrje časnika zwjertnjeny', # 0th row: right; 0th column: top
+'exif-orientation-7' => '90° w směrje časnika zwjertnjeny a padorunje wobroćeny', # 0th row: right; 0th column: bottom
+'exif-orientation-8' => '90° přećiwo směrej časnika zwjertnjeny', # 0th row: left; 0th column: bottom
+
+'exif-planarconfiguration-1' => 'Škropawy format',
+'exif-planarconfiguration-2' => 'Płony format',
+
+'exif-xyresolution-i' => '$1 dpi',
+'exif-xyresolution-c' => '$1 dpc',
+
+'exif-colorspace-1'      => 'sRGB',
+'exif-colorspace-ffff.h' => 'FFFF.H',
+
+'exif-componentsconfiguration-0' => 'Njeeksistuje',
+'exif-componentsconfiguration-1' => 'Y',
+'exif-componentsconfiguration-2' => 'Cb',
+'exif-componentsconfiguration-3' => 'Cr',
+'exif-componentsconfiguration-4' => 'R',
+'exif-componentsconfiguration-5' => 'G',
+'exif-componentsconfiguration-6' => 'B',
+
+'exif-exposureprogram-0' => 'Njeznaty',
+'exif-exposureprogram-1' => 'Manuelny',
+'exif-exposureprogram-2' => 'Normalny program',
+'exif-exposureprogram-3' => 'Priorita zasłony',
+'exif-exposureprogram-4' => 'Priorita zawěrki',
+'exif-exposureprogram-5' => 'Kreatiwny program (za hłubokosć wótrosće)',
+'exif-exposureprogram-6' => 'Akciski program (za wyšu spěšnosć zawěrki)',
+'exif-exposureprogram-7' => 'Portretowy modus (za fota z blikosće z pozadkom zwonka fokusa)',
+'exif-exposureprogram-8' => 'Krajinowy modus (za fota krajinow z pozadkom we fokusu)',
+
+'exif-subjectdistance-value' => '$1 m',
+
+'exif-meteringmode-0'   => 'Njeznata',
+'exif-meteringmode-1'   => 'Přerězk',
+'exif-meteringmode-2'   => 'Srjedźa wusměrjeny',
+'exif-meteringmode-3'   => 'Spot',
+'exif-meteringmode-4'   => 'Multispot',
+'exif-meteringmode-5'   => 'Muster',
+'exif-meteringmode-6'   => 'Dźělna',
+'exif-meteringmode-255' => 'Druha',
+
+'exif-lightsource-0'   => 'Njeznata',
+'exif-lightsource-1'   => 'Dnjowe swětło',
+'exif-lightsource-2'   => 'Fluorescentne',
+'exif-lightsource-3'   => 'Žehlawka',
+'exif-lightsource-4'   => 'Błysk',
+'exif-lightsource-9'   => 'Rjane wjedro',
+'exif-lightsource-10'  => 'Pomróčene',
+'exif-lightsource-11'  => 'Sćin',
+'exif-lightsource-12'  => 'Dnjowe swětło fluoreskowace (D 5700 – 7100K)',
+'exif-lightsource-13'  => 'Dnjowoběły fluoreskowacy (N 4600 – 5400K)',
+'exif-lightsource-14'  => 'Zymnoběły fluoreskowacy (W 3900 – 4500K)',
+'exif-lightsource-15'  => 'běły fluoroskowacy (WW 3200 – 3700K)',
+'exif-lightsource-17'  => 'Standardne swětło A',
+'exif-lightsource-18'  => 'Standardne swětło B',
+'exif-lightsource-19'  => 'Standardne swětło C',
+'exif-lightsource-20'  => 'D55',
+'exif-lightsource-21'  => 'D65',
+'exif-lightsource-22'  => 'D75',
+'exif-lightsource-23'  => 'D50',
+'exif-lightsource-24'  => 'ISO studijowa wolframowa žehlawka',
+'exif-lightsource-255' => 'Druhe žórło swětła',
+
+'exif-focalplaneresolutionunit-2' => 'cól',
+
+'exif-sensingmethod-1' => 'Njedefinowany',
+'exif-sensingmethod-2' => 'Jednočipowy barbowy přestrjenjowy sensor',
+'exif-sensingmethod-3' => 'Dwučipowy barbowy přestrjenjowy sensor',
+'exif-sensingmethod-4' => 'Třičipowy barbowy přestrjenjowy sensor',
+'exif-sensingmethod-5' => 'Sekwencielny barbowy přestrjenjowy sensor',
+'exif-sensingmethod-7' => 'Třilinearny sensor',
+'exif-sensingmethod-8' => 'Barbowy sekwencielny linearny sensor',
+
+'exif-filesource-3' => 'DSC',
+
+'exif-scenetype-1' => 'Direktnje fotografowany wobraz',
+
+'exif-customrendered-0' => 'Normalne wobdźěłanje',
+'exif-customrendered-1' => 'Wužiwarske wobdźěłanje',
+
+'exif-exposuremode-0' => 'Awtomatiske naswětlenje',
+'exif-exposuremode-1' => 'Manuelne naswětlenje',
+'exif-exposuremode-2' => 'Rjad naswětlenjow (Bracketing)',
+
+'exif-whitebalance-0' => 'Automatiske wurunanje běłeho',
+'exif-whitebalance-1' => 'Manuelne wurunanje běłeho',
+
+'exif-scenecapturetype-0' => 'Standard',
+'exif-scenecapturetype-1' => 'Krajina',
+'exif-scenecapturetype-2' => 'Portret',
+'exif-scenecapturetype-3' => 'Nócna scena',
+
+'exif-gaincontrol-0' => 'Žane',
+'exif-gaincontrol-1' => 'Snadne',
+'exif-gaincontrol-2' => 'Wysoke zesylnjenje',
+'exif-gaincontrol-3' => 'Niske wosłabjenje',
+'exif-gaincontrol-4' => 'Wysoke wosłabjenje',
+
+'exif-contrast-0' => 'Normalny',
+'exif-contrast-1' => 'Mjechki',
+'exif-contrast-2' => 'Sylny',
+
+'exif-saturation-0' => 'Normalna nasyćenosć',
+'exif-saturation-1' => 'Niska nasyćenosć',
+'exif-saturation-2' => 'Wysoka nasyćenosć',
+
+'exif-sharpness-0' => 'Normalna',
+'exif-sharpness-1' => 'Mjechka',
+'exif-sharpness-2' => 'Sylna',
+
+'exif-subjectdistancerange-0' => 'Njeznata',
+'exif-subjectdistancerange-1' => 'Makro',
+'exif-subjectdistancerange-2' => 'Bliski pohlad',
+'exif-subjectdistancerange-3' => 'Zdaleny pohlad',
+
+# Pseudotags used for GPSLatitudeRef and GPSDestLatitudeRef
+'exif-gpslatitude-n' => 'Sewjerna šěrina',
+'exif-gpslatitude-s' => 'Južna šěrina',
+
+# Pseudotags used for GPSLongitudeRef and GPSDestLongitudeRef
+'exif-gpslongitude-e' => 'Wuchodna dołhosć',
+'exif-gpslongitude-w' => 'Zapadna dołhosć',
+
+'exif-gpsstatus-a' => 'Měrjenje běži',
+'exif-gpsstatus-v' => 'Measurement interoperability',
+
+'exif-gpsmeasuremode-2' => 'dwudimensionalne měrjenje',
+'exif-gpsmeasuremode-3' => 'třidimensionalne měrjenje',
+
+# Pseudotags used for GPSSpeedRef and GPSDestDistanceRef
+'exif-gpsspeed-k' => 'km/h',
+'exif-gpsspeed-m' => 'mph',
+'exif-gpsspeed-n' => 'Suki',
+
+# Pseudotags used for GPSTrackRef, GPSImgDirectionRef and GPSDestBearingRef
+'exif-gpsdirection-t' => 'Woprawdźity směr',
+'exif-gpsdirection-m' => 'Magnetiski směr',
+
+# External editor support
+'edit-externally'      => 'Dataju z eksternym programom wobdźěłać',
+'edit-externally-help' => 'Hlej [http://meta.wikimedia.org/wiki/Help:External_editors pokiwy za instalaciju] za dalše informacije.',
+
+# 'all' in various places, this might be different for inflected languages
+'recentchangesall' => 'wšě',
+'imagelistall'     => 'wšě',
+'watchlistall1'    => 'wšě',
+'watchlistall2'    => 'wšě',
+'namespacesall'    => 'wšě',
+
+# E-mail address confirmation
+'confirmemail'            => 'Emailowu adresu wobkrućić',
+'confirmemail_noemail'    => 'Njejsy płaćiwu e-mejlowu adresu w swojich [[{{ns:special}}:Preferences|nastajenjach]] zapodał.',
+'confirmemail_text'       => 'Tutón wiki žada, zo swoju e-mejlowu adresu wobkrućiš, prjedy hač e-mejlowe funkcije wužiješ. Zaktiwuzij tłóčatko deleka, zo by swojej adresy wobkrućensku mejlku pósłał. Mejlka zapřijmje wotkaz, kotryž kod wobsahuje; wočiń wotkaz we swojim wobhladowaku, zo by wobkrućił, zo twoja e-mejlowa adresa je płaćiwa.',
+'confirmemail_pending'    => '<div class="error"> Potwjerdźenski kod bu hižo z e-mejlu připósłany. Jeli sy runje swoje konto wutworił, wočakaj prošu někotre mjeńšiny, prjedy hač sej nowy kod žadaš.</div>',
+'confirmemail_send'       => 'Wobkrućenski kod pósłać',
+'confirmemail_sent'       => 'Wobkrućenska mejlka bu wotesłana.',
+'confirmemail_oncreate'   => 'Wobkrućenski kod bu na twoju e-mejlowu adresu pósłany. Tutón kod za přizjewjenje trěbne njeje, trjebaš jón pak, zo by e-mejlowe funkcije we wikiju aktiwizował.',
+'confirmemail_sendfailed' => 'Wobkrućenska e-mejl njeda so wotesłać. Přepruwuj adresu za njepłaćiwymi znamješkami. E-mejlowy program wotmołwi: $1',
+'confirmemail_invalid'    => 'Njepłaćiwy wobkrućacy kod. Kod je snano spadnył.',
+'confirmemail_needlogin'  => 'Dyrbiš so $1, zo by e-mejlowu adresu wobkrućić móhł.',
+'confirmemail_success'    => 'Twoja e-mejlowa adresa bu wobkrućena. Móžeš so nětko přizjewić.',
+'confirmemail_loggedin'   => 'Twoja e-mejlowa adresu bu nětko wobkrućena.',
+'confirmemail_error'      => 'Zmylk při wobkrućenju twojeje e-mailoweje adresy.',
+'confirmemail_subject'    => '{{SITENAME}} – wobkrućenje e-mejloweje adresy',
+'confirmemail_body'       => 'Něchtó, najskerje ty z IP-adresu $1, je wužiwarske konto „$2” z tutej e-mejlowej adresu we {{GRAMMAR:lokatiw|{{SITENAME}}}} wutworił.
+
+Zo by so wobkrućiło, zo tute konto woprawdźe tebi słuša a zo bychu so e-mejlowe funkcije we {{GRAMMAR:lokatiw|{{SITENAME}}}} zaktiwizowali, wočiń tutón wotkaz w swojim wobhladowaku: $3.
+
+Jeli to *njejsy*, njeslěduj wotkaz. Tutón wobkrućenski kod spadnje dnja $4.
+
+-- 
+{{SITENAME}}: {{fullurl:{{Mediawiki:mainpage}}}}',
+
+# Inputbox extension, may be useful in other contexts as well
+'tryexact'       => 'Dokładne pytanje spytać',
+'searchfulltext' => 'Dospołny tekst pytać',
+'createarticle'  => 'Nastawk wutworić',
+
+# Scary transclusion
+'scarytranscludedisabled' => '[Zapřijeće interwiki je znjemóžnjene]',
+'scarytranscludefailed'   => '[Zapřijeće předłohi za stronu $1 njebě mózno]',
+'scarytranscludetoolong'  => '[Bohužel běše URL předołhi]',
+
+# Trackbacks
+'trackbackbox'      => '<div id="mw_trackbacks">Trackbacks za tutón nastawk:<br />
+$1</div>',
+'trackbackremove'   => '([$1 wušmórnyć])',
+'trackbacklink'     => 'Trackback',
+'trackbackdeleteok' => 'Trackback bu wuspěšnje wušmórnjeny.',
+
+# Delete conflict
+'deletedwhileediting' => '<b>Kedźbu:</b> Strona bu wušmórnjena po tym zo sy započał ju wobdźěłać!',
+'confirmrecreate'     => 'Wužiwar [[{{ns:user}}:$1|$1]] ([[{{ns:user_talk}}:$1|diskusija]]) je stronu wušmórnył po tym zo sy započał ju wobdźěłać z přičinu:
+: <i>$2</i>
+Prošu wobkruć, zo chceš ju woprawdźe znowa wutworić.',
+'recreate'            => 'Znowa wutworić',
+
+'unit-pixel' => 'px',
+
+# HTML dump
+'redirectingto' => 'Posrědkuju k stronje [[$1]]',
+
+# action=purge
+'confirm_purge'        => 'Pufrowak strony wuprózdnić? $1',
+'confirm_purge_button' => 'OK',
+
+'youhavenewmessagesmulti' => 'Maš nowe powěsće: $1',
+
+'searchcontaining' => 'Strony pytać, kotrež <i>$1</i> wobsahuja.',
+'searchnamed'      => 'Strony pytać, w kotrychž titlach so <i>$1</i> jewi.',
+'articletitles'    => 'Strony pytać, kotrež so z <i>$1</i> započinaja',
+'hideresults'      => 'Wuslědki schować',
+
+# DISPLAYTITLE
+'displaytitle' => '(Na tutu stronu jako [[$1]] wotkazać)',
+
+'loginlanguagelabel' => 'Rěč: $1',
+
+# Multipage image navigation
+'imgmultipageprev'   => '← předchadna strona',
+'imgmultipagenext'   => 'přichodna strona →',
+'imgmultigo'         => 'OK',
+'imgmultigotopre'    => 'Dźi k stronje',
+'imgmultiparseerror' => 'Dataja so zda wobškodźena być, tak zo {{SITENAME}} njemóže lisćinu stronow wutworić.',
+
+# Table pager
+'ascending_abbrev'         => 'postupowacy',
+'descending_abbrev'        => 'zestupowacy',
+'table_pager_next'         => 'přichodna strona',
+'table_pager_prev'         => 'předchadna strona',
+'table_pager_first'        => 'prěnja strona',
+'table_pager_last'         => 'poslednja strona',
+'table_pager_limit'        => '$1 {{PLURAL:$1|wuslědk|wuslědkaj|wuslědki|wuslědkow}} na stronu pokazać',
+'table_pager_limit_submit' => 'OK',
+'table_pager_empty'        => 'Žane wuslědki',
+
+# Auto-summaries
+'autosumm-blank'   => 'Strona bu wuprózdnjena',
+'autosumm-replace' => "Strona bu přepisana: '$1'",
+'autoredircomment' => 'posrědkuju k stronje „[[$1]]”', # This should be changed to the new naming convention, but existed beforehand
+'autosumm-new'     => 'Nowa strona: $1',
+
+# Size units
+'size-bytes'     => '$1 B',
+'size-kilobytes' => '$1 kB',
+'size-megabytes' => '$1 MB',
+'size-gigabytes' => '$1 GB',
+
+# Live preview
+'livepreview-loading' => 'Čita so…',
+'livepreview-ready'   => 'Začitanje… Hotowe!',
+'livepreview-failed'  => 'Dynamiski přehlad njemóžno!
+Spytaj normalny přehlad.',
+'livepreview-error'   => 'Zwisk njemóžno: $1 "$2"
+Spytaj normalny přehlad.',
+
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesHu.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesHu.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesHu.php	(revision 1280)
@@ -0,0 +1,1394 @@
+<?php
+/**
+ * Magyar (Hungarian)
+ *
+ * @addtogroup Language
+ */
+
+$namespaceNames = array(
+	NS_MEDIA          => 'Média',
+	NS_SPECIAL        => 'Speciális',
+	NS_MAIN           => '',
+	NS_TALK           => 'Vita',
+	NS_USER           => 'User',
+	NS_USER_TALK      => 'User_vita',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK   => '$1_vita',
+	NS_IMAGE          => 'Kép',
+	NS_IMAGE_TALK     => 'Kép_vita',
+	NS_MEDIAWIKI      => 'MediaWiki',
+	NS_MEDIAWIKI_TALK => 'MediaWiki_vita',
+	NS_TEMPLATE       => 'Sablon',
+	NS_TEMPLATE_TALK  => 'Sablon_vita',
+	NS_HELP           => 'Segítség',
+	NS_HELP_TALK      => 'Segítség_vita',
+	NS_CATEGORY       => 'Kategória',
+	NS_CATEGORY_TALK  => 'Kategória_vita'
+);
+
+$skinNames = array(
+	'standard' => "Alap",
+	'nostalgia' => "Nosztalgia",
+	'cologneblue' => "Kölni kék"
+);
+
+$fallback8bitEncoding = "iso8859-2";
+$separatorTransformTable = array(',' => "\xc2\xa0", '.' => ',' );
+
+$specialPageAliases = array(
+        'DoubleRedirects'           => array( 'Dupla_átirányítások' ),
+        'BrokenRedirects'           => array( 'Nem_létező_lapra_mutató_átirányítások' ),
+        'Disambiguations'           => array( 'Egyértelműsítő_lapok' ),
+        'Userlogin'                 => array( 'Belépés' ),
+        'Userlogout'                => array( 'Kilépés' ),
+        'Preferences'               => array( 'Beállításaim' ),
+        'Watchlist'                 => array( 'Figyelőlistám' ),
+        'Recentchanges'             => array( 'Friss_változtatások' ),
+        'Upload'                    => array( 'Feltöltés' ),
+        'Imagelist'                 => array( 'Képlista' ),
+        'Newimages'                 => array( 'Új_képek_galériája' ),
+        'Listusers'                 => array( 'Felhasználók' ),
+        'Statistics'                => array( 'Statisztikák' ),
+        'Randompage'                => array( 'Lap_találomra' ),
+        'Lonelypages'               => array( 'Magányos_lapok' ),
+        'Uncategorizedpages'        => array( 'Kategorizálatlan_lapok' ),
+        'Uncategorizedcategories'   => array( 'Kategorizálatlan_kategóriák'),
+        'Uncategorizedimages'       => array( 'Kategorizálatlan_képek', 'Kategorizálatlan_fájlok' ),
+        'Unusedcategories'          => array( 'Nem_használt_kategóriák' ),
+        'Unusedimages'              => array( 'Nem_használt_képek' ),
+        'Wantedpages'               => array( 'Keresett_lapok' ),
+        'Wantedcategories'          => array( 'Keresett_kategóriák' ),
+        'Mostlinked'                => array( 'Legtöbbet_hivatkozott_lapok' ),
+        'Mostlinkedcategories'      => array( 'Legtöbbet_hivatkozott_kategóriák' ),
+        'Mostcategories'            => array( 'Legtöbb_kategóriába_tartozó_lapok' ),
+        'Mostimages'                => array( 'Legtöbbet_használt_képek' ),
+        'Mostrevisions'             => array( 'Legtöbbet_szerkesztett_lapok' ),
+        'Shortpages'                => array( 'Rövid_lapok' ),
+        'Longpages'                 => array( 'Hosszú_lapok' ),
+        'Newpages'                  => array( 'Új_lapok' ),
+        'Ancientpages'              => array( 'Régóta_nem_változott_szócikkek' ),
+        'Deadendpages'              => array( 'Zsákutcalapok' ),
+        'Allpages'                  => array( 'Az_összes_lap_listája' ),
+        'Prefixindex'               => array( 'Egy_névtérbe_tartozó_lapok_listája', 'Az_összes_lap_listája' ) ,
+        'Ipblocklist'               => array( 'Blokkolt_IP-címek_listája' ),
+        'Specialpages'              => array( 'Speciális_lapok' ),
+        'Contributions'             => array( 'Szerkesztő_közreműködései' ),
+        'Emailuser'                 => array( 'E-mail_küldése', 'E-mail_küldése_ezen_szerkesztőnek' ),
+        'Whatlinkshere'             => array( 'Mi_hivatkozik_erre' ),
+        'Recentchangeslinked'       => array( 'Kapcsolódó_változtatások' ),
+        'Movepage'                  => array( 'Lap_átnevezése' ),
+        'Blockme'                   => array( 'Blokkolj' ),
+        'Booksources'               => array( 'Könyvforrások' ),
+        'Categories'                => array( 'Kategóriák' ),
+        'Export'                    => array( 'Lapok_exportálása' ),
+        'Version'                   => array( 'Névjegy', 'Verziószám' ),
+        'Allmessages'               => array( 'Rendszerüzenetek' ),
+        'Log'                       => array( 'Rendszernaplók' ),
+        'Blockip'                   => array( 'Blokkolás' ),
+        'Undelete'                  => array( 'Törölt_lapváltozatok_visszaállítása' ),
+        'Import'                    => array( 'Lapok_importálása' ),
+        'Lockdb'                    => array( 'Adatbázis_lezárása' ),
+        'Unlockdb'                  => array( 'Adatbázis_lezárás_feloldása' ),
+        'Userrights'                => array( 'Szerkesztői_jogok' ),
+        'MIMEsearch'                => array( 'Keresés_MIME-típus_alapján' ),
+        'Unwatchedpages'            => array( 'Nem_figyelt_lapok' ),
+        'Listredirects'             => array( 'Átirányítások_listája' ),
+        'Revisiondelete'            => array( 'Változat_törlése' ),
+        'Unusedtemplates'           => array( 'Nem_használt_sablonok' ),
+        'Randomredirect'            => array( 'Átirányítás_találomra' ),
+        'Mypage'                    => array( 'Lapom', 'Userlapom' ),
+        'Mytalk'                    => array( 'Vitám', 'Vitalapom', 'Uservitalapom' ),
+        'Mycontributions'           => array( 'Közreműködéseim' ),
+        'Listadmins'                => array( 'Adminisztrátorok', 'Adminisztrátorok_listája', 'Sysopok' ),
+);
+
+$datePreferences = false;
+$defaultDateFormat = 'ymd';
+$dateFormats = array(
+	'ymd time' => 'H:i',
+	'ymd date' => 'Y. F j.',
+	'ymd both' => 'Y. F j., H:i',
+);
+
+$linkTrail = '/^([a-záéíóúöüőűÁÉÍÓÚÖÜŐŰ]+)(.*)$/sDu';
+
+$messages = array(
+# User preference toggles
+'tog-underline'               => 'Linkek aláhúzása:',
+'tog-highlightbroken'         => 'Törött linkek <a href="" class="new">így</a> (alternatíva: így<a href="" class="internal">?</a>).',
+'tog-justify'                 => 'Bekezdések teljes szélességű tördelése („sorkizárás”)',
+'tog-hideminor'               => 'Apró változtatások elrejtése a Friss változtatások lapon',
+'tog-extendwatchlist'         => 'A figyelőlista kiterjesztése minden változtatásra (ne csak az utolsót mutassa)',
+'tog-usenewrc'                => 'Modern változások listája (nem minden böngészőre)',
+'tog-numberheadings'          => 'Címsorok automatikus számozása',
+'tog-showtoolbar'             => 'Szerkesztőeszköz–sor látható',
+'tog-editondblclick'          => 'Lapon duplakattintásra szerkesztés (JavaScript)',
+'tog-editsection'             => 'Linkek az egyes szakaszok szerkesztéséhez',
+'tog-editsectiononrightclick' => 'Egyes szakaszok szerkesztése a szakaszcímre klikkeléssel (Javascript)',
+'tog-showtoc'                 => 'Három fejezetnél többel rendelkező cikkeknél mutasson tartalomjegyzéket',
+'tog-rememberpassword'        => 'Jelszó megjegyzése a használatok között',
+'tog-editwidth'               => 'Teljes szélességű szerkesztőterület',
+'tog-watchcreations'          => 'Általad létrehozott lapok felvétele a figyelőlistádra',
+'tog-watchdefault'            => 'Szerkesztett cikkek felvétele a figyelőlistára',
+'tog-watchmoves'              => 'Átnevezett lapok felvétele a figyelőlistára',
+'tog-watchdeletion'           => 'Törölt cikkek felvétele a figyelőlistára',
+'tog-minordefault'            => 'Alapból minden szerkesztést jelöljön aprónak',
+'tog-previewontop'            => 'Előnézet a szerkesztőterület előtt és nem utána',
+'tog-previewonfirst'          => 'Előnézet első szerkesztésnél',
+'tog-nocache'                 => 'Lapok gyorstárazásának letiltása',
+'tog-shownumberswatching'     => 'Az oldalt figyelők szerkesztők számának mutatása',
+'tog-fancysig'                => 'Aláírás automatikus hivatkozás nélkül',
+'tog-externaleditor'          => 'Külső szerkesztőprogram alapértelmezett',
+'tog-externaldiff'            => 'Külső különbségképző (diff) program használata',
+'tog-showjumplinks'           => 'Helyezzen el linket („Ugrás”) a beépített eszköztárra',
+'tog-forceeditsummary'        => 'Figyelmeztessen, ha nem adok meg szerkesztési összefoglalót',
+'tog-watchlisthideown'        => 'Saját szerkesztések elrejtése',
+'tog-watchlisthidebots'       => 'Robotok szerkesztéseinek elrejtése',
+'tog-watchlisthideminor'      => 'Apró változtatások elrejtése',
+'tog-ccmeonemails'            => 'A másoknak küldött e-mailekről kapjak én is egy másolatot',
+
+'underline-always'  => 'Mindig',
+'underline-never'   => 'Soha',
+'underline-default' => 'A böngésző alapértelmezése szerint',
+
+'skinpreview' => '(előnézet)',
+
+# Dates
+'sunday'       => 'vasárnap',
+'monday'       => 'hétfő',
+'tuesday'      => 'kedd',
+'wednesday'    => 'szerda',
+'thursday'     => 'csütörtök',
+'friday'       => 'péntek',
+'saturday'     => 'szombat',
+'sun'          => 'Vas',
+'mon'          => 'Hét',
+'tue'          => 'Kedd',
+'wed'          => 'Sze',
+'thu'          => 'Csü',
+'fri'          => 'péntek',
+'sat'          => 'Szo',
+'january'      => 'január',
+'february'     => 'február',
+'march'        => 'március',
+'april'        => 'április',
+'may_long'     => 'május',
+'june'         => 'június',
+'july'         => 'július',
+'august'       => 'augusztus',
+'september'    => 'szeptember',
+'october'      => 'október',
+'november'     => 'november',
+'december'     => 'december',
+'january-gen'  => 'január',
+'february-gen' => 'Február',
+'april-gen'    => 'április',
+'may-gen'      => 'május',
+'june-gen'     => 'június',
+'july-gen'     => 'július',
+'august-gen'   => 'augusztus',
+'october-gen'  => 'Október',
+'mar'          => 'Már',
+'apr'          => 'ápr',
+'may'          => 'Máj',
+'jun'          => 'Jún',
+'jul'          => 'Júl',
+'aug'          => 'aug',
+'sep'          => 'szep',
+'oct'          => 'Okt',
+
+# Bits of text used by many pages
+'categories'            => 'Kategóriák',
+'pagecategories'        => '{{PLURAL:$1|Kategória|Kategóriák}}',
+'category_header'       => '„$1” kategóriába tartozó szócikkek',
+'subcategories'         => 'Alkategóriák',
+'category-media-header' => '„$1” kategóriába tartozó média fájlok',
+
+'mainpagetext' => 'Wiki szoftver sikeresen telepítve.',
+
+'about'          => 'Névjegy',
+'article'        => 'Szócikk',
+'newwindow'      => '(új ablakban nyílik meg)',
+'cancel'         => 'Vissza',
+'qbfind'         => 'Keresés',
+'qbbrowse'       => 'Böngészés',
+'qbedit'         => 'Szerkeszt',
+'qbpageoptions'  => 'Lapbeállítások',
+'qbpageinfo'     => 'Lapinformáció',
+'qbmyoptions'    => 'Beállításaim',
+'qbspecialpages' => 'Speciális lapok',
+'mypage'         => 'Lapom',
+'mytalk'         => 'Vitám',
+'anontalk'       => 'Vitalap ehhez az IP-hez',
+'navigation'     => 'Navigáció',
+
+'errorpagetitle'    => 'Hiba',
+'returnto'          => 'Vissza a $1 cikkhez.',
+'tagline'           => 'A {{SITENAME}}BÓL',
+'help'              => 'Segítség',
+'search'            => 'Keresés',
+'searchbutton'      => 'Keresés',
+'go'                => 'Menj',
+'searcharticle'     => 'Menj',
+'history'           => 'laptörténet',
+'history_short'     => 'Laptörténet',
+'printableversion'  => 'Nyomtatható változat',
+'permalink'         => 'Link erre a változatra',
+'print'             => 'Nyomtatás',
+'edit'              => 'Szerkesztés',
+'editthispage'      => 'Szerkeszd ezt a lapot',
+'delete'            => 'Törlés',
+'deletethispage'    => 'Lap törlése',
+'undelete_short'    => '$1 szerkesztés helyreállítása',
+'protect'           => 'Lapvédelem',
+'protectthispage'   => 'Védelem a lapnak',
+'unprotect'         => 'Védelem ki',
+'unprotectthispage' => 'Védelem megszüntetése',
+'newpage'           => 'Új lap',
+'talkpage'          => 'Lap megbeszélése',
+'specialpage'       => 'Speciális lap',
+'personaltools'     => 'Személyes eszközök',
+'postcomment'       => 'Üzenethagyás',
+'articlepage'       => 'Szócikk megtekintése',
+'talk'              => 'Vitalap',
+'views'             => 'Nézetek',
+'toolbox'           => 'Eszközök',
+'userpage'          => 'Felhasználói lap',
+'projectpage'       => 'Wiki lap megtekintése',
+'imagepage'         => 'Képlap',
+'templatepage'      => 'Sablon lapjának megtekintése',
+'viewtalkpage'      => 'Beszélgetés megtekintése',
+'otherlanguages'    => 'Más nyelveken',
+'redirectedfrom'    => '($1 szócikkből átirányítva)',
+'redirectpagesub'   => 'Átirányítás lap',
+'lastmodifiedat'    => 'A lap utolsó módosítása $2, $1', # $1 date, $2 time
+'viewcount'         => 'Ezt a lapot eddig {{PLURAL:$1|egy|$1}} alkalommal látogatták meg.',
+'protectedpage'     => 'Védett lap',
+'jumpto'            => 'Ugrás:',
+'jumptonavigation'  => 'navigáció',
+'jumptosearch'      => 'keresés',
+
+# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
+'bugreports'        => 'Hibajelentés',
+'bugreportspage'    => 'Project:Hibajelentések',
+'copyrightpage'     => 'Project:Copyright',
+'currentevents'     => 'Friss események',
+'currentevents-url' => '{{ns:project}}:Friss események',
+'disclaimers'       => 'Jogi nyilatkozat',
+'disclaimerpage'    => '{{ns:project}}:Jogi nyilatkozat',
+'edithelp'          => 'Segítség a szerkesztéshez',
+'edithelppage'      => '{{ns:project}}:Hogyan_szerkessz_egy_lapot',
+'faq'               => 'GyIK',
+'faqpage'           => 'Project:GyIK',
+'helppage'          => 'Help:Tartalom',
+'mainpage'          => 'Kezdőlap',
+'portal'            => 'Közösségi portál',
+'portal-url'        => '{{ns:project}}:Közösségi portál',
+'privacy'           => 'Adatvédelmi irányelvek',
+'privacypage'       => '{{ns:project}}:Adatvédelmi irányelvek',
+'sitesupport'       => 'Adományok',
+'sitesupport-url'   => '{{ns:project}}:Gyűjtőkampány',
+
+'badaccess'        => 'Engedélyezési hiba',
+'badaccess-group0' => 'Ezt a tevékenységet nem végezheted el.',
+'badaccess-group1' => 'Ezt a tevékenységet csak a(z) $1 csoportjába tartozó felhasználó végezheti el.',
+'badaccess-group2' => 'Ezt a tevékenységet csak a(z) $1 csoportok valamelyikébe tartozó felhasználó végezheti el.',
+'badaccess-groups' => 'Ezt a tevékenységet csak a(z) $1 csoportok valamelyikébe tartozó felhasználó végezheti el.',
+
+'retrievedfrom'       => 'A lap eredeti címe "$1"',
+'youhavenewmessages'  => '$1 van. ($2)',
+'newmessageslink'     => 'Új üzeneted',
+'newmessagesdifflink' => 'utolsó változtatás',
+'editsection'         => 'szerkesztés',
+'editold'             => 'szerkesztés',
+'editsectionhint'     => 'Szakasz szerkesztése: $1',
+'toc'                 => 'Tartalomjegyzék',
+'showtoc'             => 'mutat',
+'hidetoc'             => 'elrejt',
+'thisisdeleted'       => '$1 megnézése vagy helyreállítása?',
+'restorelink'         => '{{PLURAL:$1|egy|$1}} törölt szerkesztés',
+
+# Short words for each namespace, by default used in the 'article' tab in monobook
+'nstab-main'      => 'Szócikk',
+'nstab-user'      => 'User lap',
+'nstab-media'     => 'Média',
+'nstab-special'   => 'Speciális',
+'nstab-project'   => 'Wiki lap',
+'nstab-image'     => 'Kép',
+'nstab-mediawiki' => 'Üzenet',
+'nstab-template'  => 'Sablon',
+'nstab-help'      => 'Segítség',
+'nstab-category'  => 'Kategória',
+
+# Main script and global functions
+'nosuchaction'      => 'Nincs ilyen tevékenység',
+'nosuchactiontext'  => 'Az URL által megadott tevékenységet a {{SITENAME}}
+software nem ismeri fel',
+'nosuchspecialpage' => 'Nincs ilyen speciális lap',
+'nospecialpagetext' => 'Olyan speciális lapot kértél, amit a {{SITENAME}}-szoftver nem ismer fel.',
+
+# General errors
+'error'              => 'Hiba',
+'databaseerror'      => 'Adatbázis hiba',
+'dberrortext'        => 'Adatbázis formai hiba történt.
+Az utolsó lekérési próbálkozás az alábbi volt:
+<blockquote><tt>$1</tt></blockquote>
+a "<tt>$2</tt>" függvényből.
+A MySQL hiba "<tt>$3: $4</tt>".',
+'dberrortextcl'      => 'Egy adatbázis lekérés formai hiba történt.
+Az utolsó lekérési próbálkozás:
+"$1"
+a "$2" függvényből történt.
+A MySQL hiba "$3: $4".',
+'noconnect'          => 'Nem tudok az adatbázis gépre csatlakozni
+<br />
+$1',
+'nodb'               => 'Nem tudom elérni a $1 adatbázist',
+'cachederror'        => 'Ez a kért cikk egy régebben elmentett példánya, lehetséges, hogy nem tartalmazza a legújabb módosításokat.',
+'laggedslavemode'    => 'Figyelem: Ez a lap nem feltétlenül tartalmazza a legfrissebb változtatásokat!',
+'readonly'           => 'Adatbázis lezárva',
+'enterlockreason'    => 'Add meg a lezárás indoklását valamint egy becslést,
+hogy mikor kerül a lezárás feloldásra',
+'readonlytext'       => "
+{| style=\"background: none;\"
+|-
+| A {{SITENAME}} adatbázisa ideiglenesen le van zárva (valószínűleg adatbázis-karbantartás miatt). 
+A lezárás időtartama alatt a lapok nem szerkeszthetők, és új szócikkek sem hozhatóak létre, az oldalak azonban továbbra is böngészhetőek.
+
+Az adminisztrátor, aki lezárta az adatbázist, az alábbi magyarázatot adta: <div>'''\$1'''</div>
+
+|}",
+'missingarticle'     => 'Az adatbázisban nem található meg a(z) „$1” nevű lap szövege.
+
+<p>Ennek oka általában egy olyan régi link követése, amely egy már törölt lapra hivatkozik.
+
+<p>Ha nem erről van szó akkor lehetséges, hogy programozási hibát találtál a szoftverben. Kérlek, értesíts erről egy [[{{ns:project}}:Adminisztrátorok|adminisztrátort]], és jegyezd fel neki az URL-t (pontos webcímet) is.',
+'readonly_lag'       => 'Az adatbázis automatikusan zárolásra került, amíg a mellékszerverek utolérik a főszervert.',
+'internalerror'      => 'Belső hiba',
+'filecopyerror'      => 'Nem tudom a "$1" file-t a "$2" névre másolni.',
+'filerenameerror'    => 'Nem tudom a "$1" file-t "$2" névre átnevezni.',
+'filedeleteerror'    => 'Nem tudom a "$1" file-t letörölni.',
+'filenotfound'       => 'Nem találom a "$1" file-t.',
+'unexpected'         => 'Váratlan érték: "$1"="$2".',
+'formerror'          => 'Hiba: nem tudom a formot elküldeni',
+'badarticleerror'    => 'Ez a tevékenység nem végezhető ezen a lapon.',
+'cannotdelete'       => 'Nem lehet a megadott lapot vagy képet törölni (talán már valaki más törölte).',
+'badtitle'           => 'Hibás cím',
+'badtitletext'       => 'A kért cím helytelen, üres vagy hibásan hivatkozik
+egy nyelvek közötti vagy wikik közötti címre.',
+'perfdisabled'       => 'Elnézést, de ez a lehetőség átmenetileg nem elérhető, mert annyira lelassítja az adatbázist, hogy senki nem tudja a wikit használni.',
+'perfdisabledsub'    => 'Íme $1 egy elmentett másolata:', # obsolete?
+'perfcached'         => "Az alábbi adatok gyorsítótárból (''cache''-ből) származnak, és ezért lehetséges, hogy nem a legfrissebb változatot mutatják:",
+'perfcachedts'       => "Az alábbi adatok gyorsítótárból (''cache''-ből) származnak, legutóbbi frissítésük ideje $1.",
+'viewsource'         => 'Lapforrás',
+'viewsourcefor'      => '$1 változata',
+'protectedpagetext'  => 'Ez a lap a szerkesztések megakadályozása érdekében le lett zárva. Módosításokat a vitalapon javasolhatsz, a védelem feloldását az adminisztrátorok üzenőfalán kérheted .',
+'viewsourcetext'     => 'A lap forrását megtekintheted és másolhatod:',
+'protectedinterface' => 'Ez a lap a honlap felületéhez szolgáltat szöveget a szoftver számára, és a visszaélések elkerülése végett le van zárva. A vitalapon javasolhatsz módosításokat.',
+
+# Login and logout pages
+'logouttitle'                => 'Kilépés',
+'logouttext'                 => 'Kiléptél.
+Folytathatod a {{SITENAME}} használatát név nélkül, vagy beléphetsz
+újra vagy másik felhasználóként.',
+'welcomecreation'            => '== Üdvözöllek, $1! ==
+
+A felhasználói környezeted létrehoztuk.
+Ne felejtsd el átnézni a személyes {{SITENAME}} beállításaidat.',
+'loginpagetitle'             => 'Belépés',
+'yourname'                   => 'A felhasználói neved',
+'yourpassword'               => 'Jelszavad',
+'yourpasswordagain'          => 'Jelszavad ismét',
+'remembermypassword'         => 'Jelszó megjegyzése a használatok között.',
+'loginproblem'               => '<b>Valami probléma van a belépéseddel.</b><br />Kérlek, próbáld ismét!',
+'alreadyloggedin'            => '<strong>Kedves $1, már be vagy lépve!</strong><br />',
+'login'                      => 'Belépés',
+'loginprompt'                => 'Engedélyezned kell a cookie-kat, hogy bejelentkezhess a {{grammar:ba|{{SITENAME}}}}.',
+'userlogin'                  => 'Belépés',
+'logout'                     => 'Kilépés',
+'userlogout'                 => 'Kilépés',
+'notloggedin'                => 'Nincs belépve',
+'nologin'                    => 'Nincsen még felhasználói neved? $1.',
+'nologinlink'                => 'Itt regisztrálhatsz',
+'createaccount'              => 'Új felhasználó készítése',
+'gotaccount'                 => 'Ha már korábban regisztráltál, $1!',
+'gotaccountlink'             => 'jelentkezz be',
+'createaccountmail'          => 'eMail alapján',
+'badretype'                  => 'A két jelszó eltér egymástól.',
+'userexists'                 => 'A megadott felhasználói név már foglalt. Kérlek, válassz másikat!',
+'youremail'                  => 'Az e-mail címed1:',
+'username'                   => 'Felhasználói név:',
+'uid'                        => 'Azonosító:',
+'yourrealname'               => 'Valódi neved*',
+'yourlanguage'               => 'A felület nyelve:',
+'yournick'                   => 'A beceneved (aláírásokhoz):',
+'badsig'                     => 'Rossz aláírás; ellenőrizd a HTML formázást.',
+'prefs-help-email-enotif'    => 'A címet e-mailben küldött figyelmeztetések küldésére is használjuk, ha azokat beállítottad.',
+'prefs-help-realname'        => '* Igazi neved (nem kötelező): ha úgy döntesz, hogy megadod ez lesz használva a munkád szerzőjének megjelölésére.',
+'loginerror'                 => 'Belépési hiba',
+'prefs-help-email'           => '1 E-mail cím (nem kötelező megadni): Lehetővé teszi, hogy más szerkesztők kapcsolatba lépjenek veled a felhasználói vagy vitalapodon keresztül, anélkül, hogy névtelenséged feladnád.',
+'nocookiesnew'               => 'A felhasználói azonosító létrejött, de nem léptél be. A(z) {{SITENAME}} cookie-kat ("süti") használ a felhasználók azonosítására, és lehetséges, hogy te ezeket letiltottad. Kérünk, hogy engedélyezd a cookie-kat, majd lépj be azonosítóddal és jelszavaddal.',
+'nocookieslogin'             => 'A wiki cookie-kat ("süti") használ az azonosításhoz, de te ezeket letiltottad. Engedélyezd őket, majd próbálkozz ismét.',
+'noname'                     => 'Nem adtál meg érvényes felhasználói nevet.',
+'loginsuccesstitle'          => 'Sikeres belépés',
+'loginsuccess'               => 'Beléptél a {{grammar:ba|{{SITENAME}}}} "$1"-ként.',
+'nosuchuser'                 => 'Nincs olyan felhasználó hogy "$1".
+Ellenőrizd a gépelést, vagy készíts új nevet a fent látható űrlappal.',
+'wrongpassword'              => 'A megadott jelszó helytelen.',
+'wrongpasswordempty'         => 'Nem adtál meg jelszót. Próbáld újra.',
+'mailmypassword'             => 'Küldd el nekem a jelszavamat emailben',
+'passwordremindertitle'      => '{{SITENAME}} jelszó emlékeztető',
+'passwordremindertext'       => 'Valaki (vélhetően te, a $1 IP-címről)
+azt kérte, hogy küldjünk neked új {{SITENAME}} ($4) jelszót.
+A "$2" felhasználó jelszava most "$3".
+Lépj be, és változtasd meg a jelszavad.
+
+Ha nem kértél új jelszót, vagy közben eszedbe jutott a régi, 
+és már nem akarod megváltoztatni, nyugodtan figyelmen kívül 
+hagyhatod ezt az értesítést, és használhatod tovább a régi jelszavadat.',
+'noemail'                    => 'Nincs a "$1" felhasználóhoz e-mail felvéve.',
+'passwordsent'               => 'Az új jelszót elküldtük "$1" email címére.
+Lépj be a levélben található adatokkal.',
+'eauthentsent'               => 'Egy megerősítést kérő e-mail küldtünk a megadott címre. Mielőtt további levelek lennének küldve a megadott címre, végre kell hajtanod az e-mailben kapott utasításokat, hogy bizonyítsd, valóban tiéd a felhasználói fiók.',
+'mailerror'                  => 'Hiba az e-mail küldésekor: $1',
+'acct_creation_throttle_hit' => 'Már létrehoztál $1 felhasználói azonosítót. Sajnáljuk, de többet nem hozhatsz létre.',
+'emailauthenticated'         => 'Az e-mail címedet megerősítetted $1-kor.',
+'emailnotauthenticated'      => 'Az e-mail címed még <strong>nincs megerősítve</strong>. E-mailek küldése és fogadása nem engedélyezett.',
+'emailconfirmlink'           => 'Erősítsd meg az e-mail címedet',
+'invalidemailaddress'        => 'Az e-mail cím nem fogadható el, mert érvénytelen a formátuma.  Kérlek, adj meg egy helyesen formázott e-mail címet vagy hagyd üresen a mezőt.',
+'accountcreated'             => 'Azonosító létrehozva',
+'accountcreatedtext'         => '$1 felhasználói azonosítója sikeresen létrejött.',
+
+# Edit page toolbar
+'bold_sample'     => 'Félkövér szöveg',
+'bold_tip'        => 'Félkövér szöveg',
+'italic_sample'   => 'Dőlt szöveg',
+'italic_tip'      => 'Dőlt szöveg',
+'link_sample'     => 'Belső hivatkozás',
+'link_tip'        => 'Belső hivatkozás',
+'extlink_sample'  => 'http://www.példa-hivatkozás.hu hivatkozás címe',
+'extlink_tip'     => 'Külső hivatkozás (ne felejtsd a http:// előtagot)',
+'headline_sample' => 'Alfejezet címe',
+'headline_tip'    => 'Alfejezetcím',
+'math_sample'     => 'TeX-képlet ide',
+'math_tip'        => 'Matematikai képlet (LaTeX)',
+'nowiki_sample'   => 'Ide írd a nem-formázott szöveget',
+'nowiki_tip'      => 'Wiki formázás kikapcsolása',
+'image_sample'    => 'Egyszerikép.jpg',
+'image_tip'       => 'Kép beszúrása',
+'media_sample'    => 'Peldaegyketto.ogg',
+'media_tip'       => 'Média file hivatkozás',
+'sig_tip'         => 'Aláírás időponttal',
+'hr_tip'          => 'Vízszintes vonal (módjával használd)',
+
+# Edit pages
+'summary'                  => 'Összefoglaló',
+'subject'                  => 'Téma/főcím',
+'minoredit'                => 'Ez egy apró változtatás',
+'watchthis'                => 'Figyeld a szócikket',
+'savearticle'              => 'Lap mentése',
+'preview'                  => 'Előnézet',
+'showpreview'              => 'Előnézet megtekintése',
+'showdiff'                 => 'Változtatások megtekintése',
+'anoneditwarning'          => 'Nem vagy bejelentkezve. Az IP címed látható lesz a laptörténetben.',
+'missingsummary'           => "'''Emlékeztető:''' Nem adtál meg szerkesztési összefoglalót. Ha összefoglaló nélkül akarod elküldeni a szöveget, kattints újra a mentésre.",
+'missingcommenttext'       => 'Kérjük, hogy írj összefoglalót szerkesztésedhez.',
+'summary-preview'          => 'A szerkesztési összefoglaló előnézete',
+'subject-preview'          => 'A szakaszcím előnézete',
+'blockedtitle'             => 'A felhasználó fel van függesztve',
+'blockedtext'              => "Az IP címed vagy a felhasználói neved blokkolva lett a Wiki szabályainak súlyos megsértése miatt. A blokkot $1 állította be az alábbi indoklással:
+:''$2''
+
+Amíg a blokk életben van, nem tudod szerkeszteni a Wiki lapjait. Semmi másban nem vagy korlátozva – ha csak olvasni szeretnél, minden akadály nélkül megteheted. A blokk időtartamát a [[Special:Ipblocklist|blokkok listájában]] nézheted meg. Ha kérdésed vagy kifogásod van, vagy úgy gondolod, hogy a blokkolás nem felelt meg a [[{{ns:project}}:Blokkolási irányelvek|szabályoknak]], fordulj az adminisztrátorokhoz.
+
+Egyes IP címeken több ember osztozik, vagy más-más időpontban különböző emberek kapják meg. '''Elképzelhető, hogy egy másvalakinek szánt blokkba futottál bele.''' (Ha nem érted, miért vagy blokkolva, valószínűleg ez a helyzet.) Ebben az esetben elnézésedet kérjük a kellemetlenségért. Próbáld meg bontani az internetkapcsolatodat, és újracsatlakozni. Ha ez sem segít, értesítsd az egyik adminisztrátort.
+
+== Kapcsolatfelvétel ==
+'''Ha be vagy jelentkezve, és adtál meg email-címet''', [[Special:Emailuser/$4|küldhetsz levelet]] a blokkot beállító adminisztrátornak. Az esetleges egyéb elérhetőségeit a [[User:$4|felhasználói lapján]] találod. Ezenkívül felveheted a kapcsolatot [[{{ns:project}}:Adminisztrátorok|a többi adminisztrátor]] valamelyikével (lásd a lapon a „további elérhtőségek” oszlopot), vagy írhatsz a nyilvános levelezőlistára.
+
+'''A blokkal kapcsolatos üzenetekben írf meg az IP címedet ($3), a blokk sorszámát ($5) és – ha be vagy jelentkezve – a felhasználónevedet!'''
+
+<small>Your username or IP has been blocked by $1. If you have objections, you can [[Special:Emailuser/$4|email $4]] or contact [[{{ns:project}}:Adminisztrátorok#Adminisztrátorok listája|other admins]].</small>",
+'blockedoriginalsource'    => "'''$1''' forrása megtalálható alább:",
+'blockededitsource'        => "'''$1''' lapon '''általad végrehajtott szerkesztések''' szövege:",
+'whitelistedittitle'       => 'A szerkesztéshez be kell lépned',
+'whitelistedittext'        => 'A szócikkek szerkesztéséhez $1.',
+'whitelistreadtitle'       => 'Az olvasáshoz be kell lépned',
+'whitelistreadtext'        => '[[Special:Userlogin|Be kell lépned]] ahhoz, hogy cikkeket tudj olvasni.',
+'whitelistacctitle'        => 'Nem készíthetsz új bejelentkezési kódot',
+'whitelistacctext'         => 'Ahhoz, hogy ezen a Wikin új nevet regisztrálj [[Special:Userlogin|be kell lépned]] a szükséges engedélyszinttel.',
+'confirmedittitle'         => 'E-mail cím megerősítése szükséges a szerkesztéshez',
+'accmailtitle'             => 'Jelszó elküldve.',
+'accmailtext'              => '„$1” jelszavát elküldtük $2 címre.',
+'newarticle'               => '(Új)',
+'newarticletext'           => "Egy olyan lapra jutottál ami még nem létezik.
+A lap létrehozásához kezdd el írni a szövegét lenti keretbe
+(a [[{{MediaWiki:helppage}}|segítség]] lapon lelsz további
+információkat).
+Ha tévedésből jöttél ide, csak nyomd meg a böngésző '''Vissza/Back'''
+gombját.",
+'anontalkpagetext'         => "---- ''Ez egy olyan anonim felhasználó vitalapja, aki még nem készített magának nevet vagy azt nem használta. Ezért az IP-címét használjuk az azonosítására. Az IP számokon számos felhasználó osztozhat az idők folyamán. Ha anonim felhasználó vagy és úgy érzed, hogy értelmetlen megjegyzéseket írnak neked akkor [[Special:Userlogin|készíts magadnak egy nevet vagy lépj be]] hogy megakadályozd más anonim felhasználókkal való keveredést.''",
+'noarticletext'            => '(Ez a lap jelenleg nem tartalmaz szöveget)',
+'clearyourcache'           => "'''Megjegyzés:''' A beállítások elmentése után frissítened kell a böngésződ gyorsítótárát, hogy a változások érvénybe lépjenek. '''Mozilla''' / '''Firefox''' / '''Safari:''' tartsd lenyomva a Shift gombot és kattints a ''Reload'' / ''Frissítés'' gombra az eszköztáron, vagy használd a ''Ctrl–F5'' billentyűkombinációt (Apple Mac-en ''Cmd–Shift–R''); '''Internet Explorer:''' tartsd nyomva a ''Ctrl''-t, és kattints a ''Reload'' / ''Frissítés'' gombra, vagy nyomj ''Ctrl–F5''-öt; '''Konqueror:''' egyszerűen csak kattints a ''Reload'' / ''Frissítés'' gombra (vagy ''Ctrl–R'' vagy ''F5''); '''Opera''' felhasználóknak teljesen ki kell üríteniük a gyorsítótárat a ''Tools›Preferences'' menüben.",
+'usercssjsyoucanpreview'   => '<strong>Tipp:</strong> Használd az "Előnézet megtekintése" gombot az új css/js teszteléséhez mentés előtt.',
+'usercsspreview'           => "'''Ne felejtsd el, hogy ez csak a css előnézete és még nincs elmentve!'''",
+'userjspreview'            => "'''Ne felejtsd el hogy még csak teszteled a felhasználói javascriptedet és az még nincs elmentve!'''",
+'userinvalidcssjstitle'    => "'''Figyelem:''' Nincs „$1” nevű felület. Lehet, hogy nagy kezdőbetűt használtál olyan helyen, ahol nem kellene? A felületekhez tartozó .css/.js oldalak kisbetűvel kezdődnek. (Például ''User:Gipsz Jakab/monobook.css'' és nem ''User:Gipsz Jakab/Monobook.css''.)",
+'updated'                  => '(Frissítve)',
+'note'                     => '<strong>Megjegyzés:</strong>',
+'previewnote'              => 'Ne felejtsd el, hogy ez csak egy előnézet, és nincs elmentve!',
+'previewconflict'          => 'Ez az előnézet a felső szerkesztőablakban levő
+szövegnek megfelelő képet mutatja, ahogy az elmentés után kinézne.',
+'session_fail_preview'     => '<strong>Sajnos nem tudtuk feldolgozni a szerkesztésedet, mert elveszett a session adat. Kérjük próbálkozz újra! Amennyiben továbbra sem sikerül próbálj meg kijelentkezni, majd ismét bejelentkezni!</strong>',
+'editing'                  => '$1 szerkesztés alatt',
+'editinguser'              => '$1 szerkesztés alatt',
+'editingsection'           => '$1 szerkesztés alatt (szakasz)',
+'editingcomment'           => '$1 szerkesztés alatt (üzenet)',
+'editconflict'             => 'Szerkesztési ütközés: $1',
+'explainconflict'          => 'Valaki megváltoztatta a lapot azóta,
+mióta szerkeszteni kezdted.
+A felső szövegablak tartalmazza a szöveget, ahogy az jelenleg létezik.
+A módosításaid az alsó ablakban láthatóak.
+Át kell vezetned a módosításaidat a felső szövegbe.
+<b>Csak</b> a felső ablakban levő szöveg kerül elmentésre akkor, mikor
+a "Lap mentését" választod.<br />',
+'storedversion'            => 'A tárolt változat',
+'nonunicodebrowser'        => '<strong>Figyelem: A böngésződ nem unicode kompatibilis. Egy programozási trükk segítségével biztonságban szerkesztheted a cikkeket: a nem ASCII karakterek a szerkesztőablakban hexadeciális kódokként jelennek meg..</strong>',
+'editingold'               => 'A lap egy elavult változatát szerkeszted. Ha elmented, akkor az ezen változat után végzett összes
+módosítás elvész.',
+'yourdiff'                 => 'Eltérések',
+'longpagewarning'          => '<strong>FIGYELEM: Ez a lap $1 kilobyte hosszú;
+néhány böngészőnek problémái vannak a 32KB körüli vagy nagyobb lapok
+szerkesztésével.
+Fontold meg a lap kisebb szakaszokra bontását.</strong>',
+'readonlywarning'          => '<strong>FIGYELEM: Az adatbázis karbantartás miatt le van zárva,
+ezért a módosításaidat most nem lehetséges elmenteni. Érdemes a szöveget
+kimásolni és elmenteni egy szövegszerkesztőben a későbbi mentéshez.</strong>',
+'protectedpagewarning'     => '<strong>FIGYELEM: Ez a lap védett, csak adminisztrátorok szerkeszthetik. Szerkesztéskor tartsd szem előtt a [[Project:Lapvédelmi_irányelvek|zárt lapok irányelveit]].</strong>',
+'semiprotectedpagewarning' => "'''Megjegyzés:''' ez a lap [[{{ns:project}}:Védett lapok|védett]], nem vagy újonnan regisztrált felhasználók nem szerkeszthetik.",
+'templatesused'            => 'Sablonok ezen a lapon:',
+'templatesusedpreview'     => 'Az előnézetben használt sablonok:',
+'templatesusedsection'     => 'Szakaszban használt sablonok:',
+'template-protected'       => '(védett)',
+'template-semiprotected'   => '(félig-védett)',
+
+# "Undo" feature
+'undo-success' => 'A szerkesztés visszavonható. Kérlek ellenőrizd a változásokat alább, hogy valóban ezt szeretnéd-e tenni, majd kattints a lap mentése gombra a visszavonás véglegesítéséhez.',
+'undo-failure' => 'A szerkesztést nem lehet visszavonni vele ütköző későbbi szerkesztések miatt.',
+'undo-summary' => '[[Special:Contributions/$2|$2]] ([[User talk:$2|vita]]) $1 szerkesztésének visszaállítása.',
+
+# Account creation failure
+'cantcreateaccounttext' => 'Új felhasználó létrehozását erről az IP címről (<b>$1</b>) blokkolták. 
+Erre valószínűleg ismétlődő vandalizmus miatt került sor.',
+
+# History pages
+'revhistory'          => 'Változások története',
+'viewpagelogs'        => 'A lap a rendszernaplókban',
+'nohistory'           => 'Nincs szerkesztési történet ehhez a laphoz.',
+'revnotfound'         => 'A változat nem található',
+'revnotfoundtext'     => 'A lap általad kért régi változatát nem találom. Kérlek, ellenőrizd az URL-t, amivel erre a lapra jutottál.',
+'loadhist'            => 'Laptörténet beolvasása',
+'currentrev'          => 'Aktuális változat',
+'revisionasof'        => '$1 változat',
+'revision-info'       => '$2 $1 kori változata',
+'previousrevision'    => '‹Régebbi változat',
+'nextrevision'        => 'Újabb változat›',
+'currentrevisionlink' => 'legfrissebb változat',
+'cur'                 => 'akt',
+'next'                => 'köv',
+'last'                => 'előző',
+'orig'                => 'eredeti',
+'histlegend'          => 'Jelmagyarázat: (akt) = eltérés az aktuális változattól,
+(előző) = eltérés az előző változattól, 
+A = Apró változtatás',
+'deletedrev'          => '[törölve]',
+'histfirst'           => 'legkorábbi',
+'histlast'            => 'legutolsó',
+
+# Revision feed
+'history-feed-title'       => 'Laptörténet',
+'history-feed-description' => 'Az oldal laptörténete a {{SITENAME}}',
+
+# Diffs
+'difference'  => '(Változatok közti eltérés)',
+'loadingrev'  => 'különbségképzéshez olvasom a változatokat',
+'lineno'      => '$1. sor:',
+'editcurrent' => 'A lap aktuális változatának szerkesztése',
+'editundo'    => 'visszavonás',
+'diff-multi'  => '({{plural:$1|Egy közbeeső változat|$1 közbeeső változat}} nincs mutatva)',
+
+# Search results
+'searchresults'         => 'A keresés eredménye',
+'searchresulttext'      => "'''Megjegyzés''': Az újonnan elkészített szócikkek körülbelül 30-40 óra elteltével válnak kereshetővé. <br />
+További információkkal a keresésről a [[Project:Keresés|Keresés]] szolgál.",
+'searchsubtitle'        => 'Erre kerestél: „[[:$1]]”',
+'searchsubtitleinvalid' => 'A "$1" kereséshez',
+'badquery'              => 'Hibás formájú keresés',
+'badquerytext'          => 'Nem tudjuk a kérésedet végrehajtani. Ennek oka valószínűleg az, hogy három betűnél rövidebb karaktersorozatra próbáltál keresni, ami jelenleg nem lehetséges. Lehet az is, hogy elgépelted a kifejezést, például „hal and and mérleg”. Kérlek, próbálj másik kifejezést keresni.',
+'matchtotals'           => 'A "$1" keresés $2 címszót talált és
+$3 szócikk szövegét.',
+'noexactmatch'          => "Nincs '''$1''' nevű lap. Készíthetsz egy [[:$1|új szócikket]] ezen a néven, felveheted a [[{{ns:project}}:Kért cikkek|kért cikkek]] közé, vagy megnézheted azon szócikkek listáját, amik [[Special:Whatlinkshere/$1|erre a kifejezésre hivatkoznak]], vagy [[Special:Prefixindex/$1|vele kezdődnek]].",
+'titlematches'          => 'Címszó egyezik',
+'notitlematches'        => 'Nincs egyező címszó',
+'textmatches'           => 'Szócikk szövege egyezik',
+'notextmatches'         => 'Nincs szócikk szöveg egyezés',
+'prevn'                 => 'előző $1',
+'nextn'                 => 'következő $1',
+'viewprevnext'          => '($1) ($2) ($3)',
+'showingresults'        => 'Lent látható <b>$1</b> találat, az eleje <b>$2</b>.',
+'showingresultsnum'     => 'Lent látható <b>$3</b> találat, az eleje #<b>$2</b>.',
+'nonefound'             => '<strong>Megyjegyzés</strong>: a sikertelen keresések
+gyakori oka olyan szavak keresése (pl. "have" és "from") amiket a
+rendszer nem indexel fel, vagy több független keresési szó szerepeltetése
+(csak minden megadott szót tartalmazó találatok jelennek meg a
+végeredményben).',
+'powersearch'           => 'Keresés',
+'powersearchtext'       => '
+Keresés a névterekben:<br />
+$1<br />
+$2 Átirányítások listája &nbsp; Keresés:$3 $9',
+'searchdisabled'        => 'Elnézésed kérjük, de a teljes szöveges keresés terhelési okok miatt átmenetileg nem használható. Ezidő alatt használhatod a lenti Google keresést, mely viszont lehetséges, hogy nem teljesen friss adatokkal dolgozik.',
+'blanknamespace'        => '(Alap)',
+
+# Preferences page
+'preferences'              => 'Beállításaim',
+'mypreferences'            => 'beállításaim',
+'prefsnologin'             => 'Nem vagy belépve',
+'prefsnologintext'         => 'Ahhoz, hogy a 
+beállításaidat rögzíthesd, [[Special:Userlogin|be kell lépned]].',
+'prefsreset'               => 'A beállítások törlődtek a tárolóból vett értékekre.',
+'qbsettings'               => 'Gyorsmenü beállítások',
+'qbsettings-none'          => 'Nincs',
+'qbsettings-fixedleft'     => 'Fix baloldali',
+'qbsettings-fixedright'    => 'Fix jobboldali',
+'qbsettings-floatingleft'  => 'Lebegő baloldali',
+'qbsettings-floatingright' => 'Lebegő jobboldali',
+'changepassword'           => 'Jelszó változtatása',
+'skin'                     => 'Felület',
+'math'                     => 'Képletek',
+'dateformat'               => 'Dátum formátuma',
+'datetime'                 => 'Dátum és idő',
+'math_failure'             => 'Értelmezés sikertelen',
+'math_unknown_error'       => 'ismeretlen hiba',
+'math_unknown_function'    => 'ismeretlen függvény',
+'math_syntax_error'        => 'formai hiba',
+'math_image_error'         => 'Sikertelen PNG-vé alakítás (szerver oldali hiba)',
+'prefs-personal'           => 'Felhasználói adatok',
+'prefs-rc'                 => 'Friss változtatások',
+'prefs-watchlist'          => 'Figyelőlista',
+'prefs-watchlist-days'     => 'A figyelőlistában mutatott napok száma:',
+'prefs-watchlist-edits'    => 'A kiterjesztett figyelőlistán mutatott szerkesztések száma:',
+'prefs-misc'               => 'Egyéb',
+'saveprefs'                => 'Beállítások mentése',
+'resetprefs'               => 'Beállítások törlése',
+'oldpassword'              => 'Régi jelszó:',
+'newpassword'              => 'Új jelszó:',
+'retypenew'                => 'Új jelszó ismét:',
+'textboxsize'              => 'Szerkesztés',
+'rows'                     => 'Sor',
+'columns'                  => 'Oszlop',
+'searchresultshead'        => 'Keresés',
+'resultsperpage'           => 'Laponként mutatott találatok száma:',
+'contextlines'             => 'Találatonként mutatott sorok száma:',
+'contextchars'             => 'Soronkénti szövegkörnyezet (karakterszám):',
+'stubthreshold'            => 'Csonkok kijelzésének küszöbértéke:',
+'recentchangescount'       => 'Címszavak száma a friss változtatásokban:',
+'savedprefs'               => 'Az új beállításaid érvénybe léptek.',
+'timezonelegend'           => 'Időzóna',
+'timezonetext'             => 'Add meg az órák számát, amennyivel a helyi
+idő a GMT-től eltér (Magyarországon nyáron 2, télen 1).',
+'localtime'                => 'Helyi idő:',
+'timezoneoffset'           => 'Eltérés1:',
+'servertime'               => 'A szerver ideje:',
+'guesstimezone'            => 'Töltse ki a böngésző',
+'allowemail'               => 'E-mail engedélyezése más felhasználóktól',
+'defaultns'                => 'Alapértelmezésben az alábbi névterekben keressünk:',
+'default'                  => 'alapértelmezés',
+'files'                    => 'Képek',
+
+# Groups
+'group'            => 'Csoport:',
+'group-bot'        => 'Botok',
+'group-sysop'      => 'adminisztrátorok',
+'group-bureaucrat' => 'Bürokraták',
+
+'group-sysop-member'      => 'adminisztrátor',
+'group-bureaucrat-member' => 'Bürokrata',
+
+'grouppage-bot'        => '{{ns:project}}:Botok',
+'grouppage-sysop'      => '{{ns:project}}:Adminisztrátorok',
+'grouppage-bureaucrat' => '{{ns:project}}:Bürokraták',
+
+# User rights log
+'rightslog' => 'Felhasználói jogosultságok naplója',
+
+# Recent changes
+'recentchanges'                  => 'Friss változtatások',
+'recentchanges-feed-description' => 'Kövesd a wiki friss változtatásait ezzel a hírcsatornával.',
+'rcnote'                         => 'Lentebb az utolsó <strong>$2</strong> nap utolsó <strong>$1</strong> változtatása látható. A lap generálásának időpontja $3.',
+'rcnotefrom'                     => 'Lentebb láthatóak a <b>$2</b> óta történt változások (<b>$1</b>-ig).',
+'rclistfrom'                     => 'Az új változtatások kijelzése $1 után',
+'rcshowhideminor'                => 'apró módosítások $1',
+'rcshowhidebots'                 => 'robotok szerkesztéseinek $1',
+'rcshowhideliu'                  => 'bejelentkezett felhasználók szerkesztéseinek $1',
+'rcshowhideanons'                => 'névtelen szerkesztések $1',
+'rcshowhidepatr'                 => 'ellenőrzött szerkesztések $1',
+'rcshowhidemine'                 => 'saját szerkesztések $1',
+'rclinks'                        => 'Az elmúlt $2 nap utolsó $1 változtatása legyen látható<br />$3',
+'diff'                           => 'eltér',
+'hist'                           => 'történet',
+'hide'                           => 'elrejtése',
+'show'                           => 'megjelenítése',
+'minoreditletter'                => 'A',
+'newpageletter'                  => 'Ú',
+
+# Recent changes linked
+'recentchangeslinked' => 'Kapcsolódó változtatások',
+
+# Upload
+'upload'                      => 'Fájl felküldése',
+'uploadbtn'                   => 'Fájl felküldése',
+'reupload'                    => 'Újraküldés',
+'reuploaddesc'                => 'Visszatérés a felküldési űrlaphoz.',
+'uploadnologin'               => 'Nem jelentkeztél be',
+'uploadnologintext'           => 'Csak regisztrált felhasználók tölthetnek fel fájlokat. [[Special:Userlogin|Jelentkezz be]] vagy [{{FULLURL:Special:userlogin|type=signup}} regisztrálj]!',
+'uploaderror'                 => 'Felküldési hiba',
+'uploadlog'                   => 'felküldési napló',
+'uploadlogpage'               => 'Felküldési_napló',
+'uploadlogpagetext'           => 'Lentebb látható a legutóbbi felküldések listája. Minden időpont a szerver időzónájában (UTC) van megadva.',
+'filename'                    => 'Filenév',
+'filedesc'                    => 'Összefoglaló',
+'fileuploadsummary'           => 'Összefoglaló:',
+'filestatus'                  => 'Szerzői jogi állapot',
+'filesource'                  => 'Forrás',
+'uploadedfiles'               => 'Felküldött file-ok',
+'ignorewarning'               => 'Biztosan így akarom feltölteni.',
+'ignorewarnings'              => 'Hagyd figyelmen kívül a figyelmeztetéseket',
+'minlength'                   => 'A kép nevének legalább három betűből kell állnia.',
+'badfilename'                 => 'A kép új neve "$1".',
+'largefileserver'             => 'A fájl mérete meghaladja a kiszolgálón beállított maximális értéket.',
+'fileexists'                  => 'Ezzel a névvel már létezik egy file: $1. Ellenőrizd hogy biztosan felül akarod-e írni azt!',
+'fileexists-forbidden'        => 'Egy ugyanilyen nevű fájl már létezik; kérlek menj vissza és töltsd fel a fájlt egy másik néven. [[Image:$1|thumb|center|$1]]',
+'fileexists-shared-forbidden' => 'Egy ugyanilyen nevű fájl már létezik a Commonson; kérlek menj vissza és válassz egy másik nevet a fájlnak.
+[[Image:$1|thumb|center|$1]]',
+'successfulupload'            => 'Sikeresen felküldve',
+'fileuploaded'                => 'A(z) „$1” fájl felküldése sikeres volt. Kérlek, a ($2) linken add meg a fájl adatait és leírását, mint például honnan való, mikor és ki készítette, stb.',
+'uploadwarning'               => 'Felküldési figyelmeztetés',
+'savefile'                    => 'File mentése',
+'uploadedimage'               => '"[[$1]]" felküldve',
+'uploadscripted'              => 'Ez a file olyan HTML vagy script kódot tartalmaz melyet tévedésből egy webböngésző esetleg értelmezni próbálhatna.',
+'uploadcorrupt'               => 'A fájl sérült vagy hibás a kiterjesztése. Légy szíves ellenőrizd a fájlt és próbálkozz újra!',
+'uploadvirus'                 => 'Ez a file vírust tartalmaz! A részletek: $1',
+'sourcefilename'              => 'Forrásfájl neve',
+'destfilename'                => 'Célmédiafájl neve',
+'watchthisupload'             => 'Figyeld ezt a lapot',
+
+'license'   => 'Licenc',
+'nolicense' => 'Válassz licencet!',
+
+# Image list
+'imagelist'                 => 'Képlista',
+'imagelisttext'             => 'Lentebb látható $1 kép, $2 rendezve.',
+'getimagelist'              => 'képlista lehívása',
+'ilsubmit'                  => 'Keresés',
+'showlast'                  => 'Az utolsó $1 kép $2.',
+'byname'                    => 'név szerint',
+'bydate'                    => 'dátum szerint',
+'bysize'                    => 'méret szerint',
+'imgdelete'                 => 'töröl',
+'imgdesc'                   => 'leírás',
+'imglegend'                 => 'Jelmagyarázat: (leírás) = kép leírás megtekintés/szerkesztés.',
+'imghistory'                => 'Kép története',
+'revertimg'                 => 'régi',
+'deleteimg'                 => 'töröl',
+'deleteimgcompletely'       => 'töröl',
+'imghistlegend'             => 'Jelmagyarázat: (akt) = ez az aktuális kép,
+(töröl) = ezen régi változat törlése,
+(régi) = visszaállás erre a régi változatra.
+<br /><i>Klikkelj a dátumra hogy megnézhesd az akkor felküldött képet</i>.',
+'imagelinks'                => 'Képhivatkozások',
+'linkstoimage'              => 'Az alábbi lapok hivatkoznak erre a képre:',
+'nolinkstoimage'            => 'Erre a képre nem hivatkozik lap.',
+'shareduploadwiki'          => 'Lásd a [$1 file leírólapját] a további információkért.',
+'noimage'                   => 'Ezen a néven nem létezik médiafájl. Ha szeretnél, $1 egyet.',
+'noimage-linktext'          => 'feltölthetsz',
+'uploadnewversion-linktext' => 'A fájl újabb változatának felküldése',
+
+# MIME search
+'mimesearch' => 'Keresés MIME-típus alapján',
+'mimetype'   => 'MIME-típus:',
+
+# Unwatched pages
+'unwatchedpages' => 'Nem figyelt lapok',
+
+# List redirects
+'listredirects' => 'Átirányítások listája',
+
+# Unused templates
+'unusedtemplates'     => 'Nem használt sablonok',
+'unusedtemplatestext' => 'Ez a lap azon sablon névtérben lévő lapokat gyűjti össze, melyek nem találhatók meg más lapokon. Ellenőrizd a linkeket, mielőtt törölnéd őket.',
+
+# Random redirect
+'randomredirect' => 'Átirányítás találomra',
+
+# Statistics
+'statistics'    => 'Statisztikák',
+'sitestats'     => 'Tartalmi statisztikák',
+'userstats'     => 'Felhasználói statisztikák',
+'userstatstext' => 'Jelenleg <b>$1</b> regisztrált felhasználónk van; közülük <b>$2</b> ($4%) $5 (lásd: $3).',
+
+'disambiguations'     => 'Egyértelműsítő lapok',
+'disambiguationspage' => 'Template:Egyért',
+
+'doubleredirects'     => 'Dupla átirányítások',
+'doubleredirectstext' => '<strong>Figyelem:</strong> Ez a lista nem feltétlenül pontos. Ennek általában az oka az, hogy a #REDIRECT alatt további szöveg található.<br />
+Minden sor tartalmazza az első és a második átirányítást, valamint a második átirányítás cikkének első sorát, ami általában a „valódi” célt tartalmazza, amire az elsőnek mutatnia kellene.',
+
+'brokenredirects'        => 'Nem létező lapra mutató átirányítások',
+'brokenredirectstext'    => 'Az alábbi átirányítások nem létező lapokra mutatnak.',
+'brokenredirects-edit'   => '(szerkeszt)',
+'brokenredirects-delete' => '(törlés)',
+
+# Miscellaneous special pages
+'nbytes'                  => '$1 bájt',
+'ncategories'             => '$1 kategória',
+'nlinks'                  => '$1 link',
+'nmembers'                => '$1 elem',
+'nrevisions'              => '$1 változat',
+'nviews'                  => '$1 megtekintés',
+'lonelypages'             => 'Magányos lapok',
+'uncategorizedpages'      => 'Kategorizálatlan lapok',
+'uncategorizedcategories' => 'Kategorizálatlan kategóriák',
+'uncategorizedimages'     => 'Kategorizálatlan képek',
+'unusedcategories'        => 'Nem használt kategóriák',
+'unusedimages'            => 'Nem használt képek',
+'popularpages'            => 'Népszerű lapok',
+'wantedcategories'        => 'Keresett kategóriák',
+'wantedpages'             => 'Keresett lapok',
+'allpages'                => 'Az összes lap listája',
+'prefixindex'             => 'Keresés előtag szerint',
+'randompage'              => 'Lap találomra',
+'shortpages'              => 'Rövid lapok',
+'longpages'               => 'Hosszú lapok',
+'deadendpages'            => 'Zsákutca lapok',
+'deadendpagestext'        => 'Az itt található lapok nem kapcsolódnak hivatkozásokkal ezen wiki más oldalaihoz.',
+'listusers'               => 'Felhasználók',
+'specialpages'            => 'Speciális lapok',
+'spheading'               => 'Speciális lapok',
+'restrictedpheading'      => 'Korlátozott hozzáférésű speciális lapok',
+'rclsub'                  => '(a "$1" lapról hivatkozott lapok)',
+'newpages'                => 'Új lapok',
+'newpages-username'       => 'Felhasználói név:',
+'ancientpages'            => 'Régóta nem változott szócikkek',
+'intl'                    => 'Nyelvek közötti linkek',
+'movethispage'            => 'Nevezd át ezt a lapot',
+'unusedimagestext'        => '<p>Vedd figyelembe azt hogy más
+lapok - mint például a nemzetközi {{grammar:k|{{SITENAME}}}} - közvetlenül
+hivatkozhatnak egy file URL-jére, ezért szerepelhet itt annak
+ellenére hogy aktívan használják.</p>',
+'unusedcategoriestext'    => 'A következő kategóriákban egyetlen cikk, illetve alkategória sem szerepel.',
+
+# Book sources
+'booksources' => 'Könyvforrások',
+
+'categoriespagetext' => 'A wikiben az alábbi kategóriák találhatóak.',
+'alphaindexline'     => '$1 – $2',
+'version'            => 'Névjegy',
+
+# Special:Log
+'specialloguserlabel'  => 'Felhasználó:',
+'speciallogtitlelabel' => 'Cím:',
+'log'                  => 'Rendszernaplók',
+'alllogstext'          => 'Az átnevezési, feltöltési, törlési, lapvédelmi, blokkolási, bürokrata és felhasználó-átnevezési naplók közös listája. Szűkítheted a listát a naplótípus, a műveletet végző felhasználó vagy az érintett oldal megadásával.',
+'logempty'             => 'Nincs illeszkedő naplóbejegyzés.',
+
+# Special:Allpages
+'nextpage'          => 'Következő lap ($1)',
+'prevpage'          => 'Előző oldal ($1)',
+'allpagesfrom'      => 'Lapok listázása a következő címtől kezdve:',
+'allarticles'       => 'Az összes lap listája',
+'allinnamespace'    => 'Összes lap ($1 névtér)',
+'allnotinnamespace' => 'Minden olyan lap, ami nem a(z) $1 névtérben van.',
+'allpagesprev'      => 'Előző',
+'allpagesnext'      => 'Következő',
+'allpagessubmit'    => 'Keresés',
+'allpagesprefix'    => 'Lapok listázása, amik ezzel az előtaggal kezdődnek:',
+'allpagesbadtitle'  => 'A megadott lapnév nyelvközi vagy wikiközi előtagot tartalmazott, vagy érvénytelen volt. Talán olyan karakter van benne, amit nem lehet lapnevekben használni.',
+
+# Special:Listusers
+'listusersfrom' => 'Felhasználók listázása a következő névtől kezdve:',
+
+# E-mail user
+'mailnologin'     => 'Nincs feladó',
+'mailnologintext' => 'Ahhoz hogy másoknak emailt küldhess
+[[Special:Userlogin|be kell jelentkezned]]
+és meg kell adnod egy érvényes email címet a [[Special:Preferences|beállításaidban]].',
+'emailuser'       => 'E-mail küldése ezen szerkesztőnek',
+'emailpage'       => 'E-mail küldése',
+'emailpagetext'   => 'Ha ez a felhasználó érvényes e-mail-címet adott meg, akkor ezen űrlap kitöltésével e-mailt tudsz neki küldeni. Feladóként a beállításaid között megadott e-mail-címed fog szerepelni, hogy a címzett válaszolni tudjon.',
+'defemailsubject' => 'Wiki e-mail',
+'noemailtitle'    => 'Nincs e-mail cím',
+'noemailtext'     => 'Ez a felhasználó nem adott meg e-mail címet, vagy
+nem kíván másoktól leveleket kapni.',
+'emailfrom'       => 'Feladó',
+'emailto'         => 'Címzett',
+'emailsubject'    => 'Téma',
+'emailmessage'    => 'Üzenet',
+'emailsend'       => 'Küldés',
+'emailccme'       => 'Az üzenet másolatát küldje el nekem is e-mailben.',
+'emailccsubject'  => '$1-nek küldött $2 tárgyú üzenet másolata',
+'emailsent'       => 'E-mail elküldve',
+'emailsenttext'   => 'Az e-mail üzenetedet elküldtem.',
+
+# Watchlist
+'watchlist'            => 'Figyelőlistám',
+'mywatchlist'            => 'Figyelőlistám',
+'watchlistfor'         => "('''$1''' részére)",
+'nowatchlist'          => 'Nincs lap a figyelőlistádon.',
+'watchlistanontext'    => 'A figyelőlistád megtekintéséhez és szerkesztéséhez $1.',
+'watchlistcount'       => "'''$1 lap van a figyelőlistádon, beleértve a vitalapokat is.'''",
+'clearwatchlist'       => 'Figyelőlista törlése',
+'watchlistcleartext'   => 'Biztosan el akarod őket távolítani?',
+'watchlistclearbutton' => 'Figyelőlista törlése',
+'watchlistcleardone'   => 'A figyelőlistád törölve, $1 lap került eltávolításra.',
+'watchnologin'         => 'Nincs belépve',
+'watchnologintext'     => 'Ahhoz, hogy figyelőlistád lehessen, [[Special:Userlogin|be kell lépned]].',
+'addedwatch'           => 'Figyelőlistához hozzáfűzve',
+'addedwatchtext'       => "A „$1” lapot hozzáadtam a [[Special:Watchlist|figyelőlistádhoz]].
+Ezután minden, a lapon vagy annak vitalapján történő változást ott fogsz
+látni, és a lap '''vastagon''' fog szerepelni a [[Special:Recentchanges|friss változtatások]]
+lapon, hogy könnyen észrevehető legyen.
+
+Ha később el akarod távolítani a lapot a figyelőlistádról, akkor ezt az
+oldalmenü „{{MediaWiki:unwatchthispage}}” pontjával (vagy a „{{MediaWiki:unwatch}}” füllel) teheted meg.",
+'removedwatch'         => 'Figyelőlistáról eltávolítva',
+'removedwatchtext'     => 'A „$1” lapot eltávolítottam a figyelőlistáról.',
+'watch'                => 'Lap figyelése',
+'watchthispage'        => 'Lap figyelése',
+'unwatch'              => 'Lapfigyelés vége',
+'unwatchthispage'      => 'Figyelés vége',
+'notanarticle'         => 'Nem szócikk',
+'watchnochange'        => 'Egyik figyelt lap sem változott a megadott időintervallumon belül.',
+'watchdetails'         => '<strong>$1</strong> lap van a figyelőlistádon (a vitalapokon kívül). A listát [[Special:Watchlist/edit|itt szerkesztheted]] vagy [[Special:Watchlist/clear|törölhetsz róla mindent]].',
+'wlheader-enotif'      => '* Email értesítés engedélyezve.',
+'wlheader-showupdated' => "* Azok a lapok, amelyek megváltoztak, mióta utoljára megnézted őket, '''vastagon''' láthatóak.",
+'watchmethod-recent'   => 'a figyelt lapokon belüli legfrissebb szerkesztések',
+'watchmethod-list'     => 'a legfrissebb szerkesztésekben található figyelt lapok',
+'removechecked'        => 'A kijelölt lapok eltávolítása a figyelésből',
+'watchlistcontains'    => 'A figyelőlistád $1 lapot tartalmaz.',
+'watcheditlist'        => "Íme a figyelőlistádban található lapok betűrendes listája. Ha egyes lapokat el szeretnél távolítani, jelöld ki őket, és válaszd a 'Kijelöltek eltávolítása' gombot a lap alján.",
+'removingchecked'      => 'A kért lapok eltávolítása a figyelőlistáról...',
+'couldntremove'        => "'$1' nem távolítható el...",
+'iteminvalidname'      => "Probléma a '$1' elemmel: érvénytelen név...",
+'wlnote'               => 'Lentebb az utolsó <b>$2</b> óra $1 változtatása látható.',
+'wlshowlast'           => 'Az elmúlt $1 órában | $2 napon | $3 történt változtatások legyenek láthatóak',
+'wlsaved'              => 'Ez a figyelőlistád egy elmentett példánya.',
+'watchlist-show-bots'  => 'Botok szerkesztéseinek megjelenítése',
+'watchlist-hide-bots'  => 'Botok szerkesztéseinek elrejtése',
+'watchlist-show-own'   => 'Saját szerkesztések megjelenítése',
+'watchlist-hide-own'   => 'Saját szerkesztések elrejtése',
+'watchlist-show-minor' => 'Apró módosítások megjelenítése',
+'watchlist-hide-minor' => 'Apró módosítások elrejtése',
+'wldone'               => 'Kész.',
+
+# Displayed when you click the "watch" button and it's in the process of watching
+'watching'   => 'Figyelés...',
+'unwatching' => 'Figyelés befejezése...',
+
+# Delete/protect/revert
+'deletepage'                  => 'Lap törlése',
+'excontent'                   => "a lap tartalma: '$1'",
+'excontentauthor'             => "a lap tartalma: '$1' (és csak '$2' szerkesztette)",
+'exbeforeblank'               => 'az eltávolítás előtti tartalom: $1',
+'exblank'                     => 'a lap üres volt',
+'confirmdelete'               => 'Törlés megerősítése',
+'deletesub'                   => '("$1" törlése)',
+'historywarning'              => 'Figyelem: a lapnak, amit törölni készülsz, története van:',
+'confirmdeletetext'           => 'Egy lap vagy kép teljes laptörténetével együtti végleges törlésére készülsz.  Kérlek, erősítsd meg, hogy valóban ezt szándékozod tenni, átlátod a következményeit, és a [[{{ns:project}}:Törlési irányelvek|törlési irányelvekkel]] összhangban cselekedsz.',
+'actioncomplete'              => 'Művelet végrehajtva',
+'deletedtext'                 => 'A(z) „$1” lapot törölted.  A legutóbbi törlések listájához lásd a $2 lapot.',
+'deletedarticle'              => '"$1" törölve',
+'dellogpage'                  => 'Törlési_napló',
+'dellogpagetext'              => 'Itt láthatók a legutóbb törölt lapok.
+Minden időpont a server órája (UTC) szerint értendő.',
+'deletionlog'                 => 'törlési napló',
+'reverted'                    => 'Visszaállítva a korábbi változatra',
+'deletecomment'               => 'A törlés oka',
+'rollbacklink'                => 'visszaállítás',
+'cantrollback'                => 'Nem lehet visszaállítani: az utolsó szerkesztést végző felhasználó az egyetlen, aki a lapot szerkesztette.',
+'alreadyrolled'               => '[[:$1]] utolsó, [[User:$2|$2]] ([[User talk:$2|Vita]] | [[Special:Contributions/$2|Szerkesztései]] | [[Special:blockip/$2|Blokkolás]]) általi szerkesztését nem lehet visszavonni: időközben valaki már visszavonta, vagy szerkesztette a lapot.
+
+Az utolsó szerkesztést [[User:$3|$3]] ([[User talk:$3|vita]]) végezte.',
+'editcomment'                 => 'A változtatás összefoglalója "<i>$1</i>" volt.', # only shown if there is an edit comment
+'revertpage'                  => '[[Special:Contributions/$2|$2]] szerkesztései visszaállítva $1 utolsó változatára',
+'protectlogpage'              => 'Lapvédelmi_napló',
+'protectlogtext'              => 'Ez a lezárt/megnyitott lapok listája. 
+A részleteket a [[{{ns:project}}:Lapvédelmi irányelvek|zárt lapok irányelve]] tartalmazza.',
+'protectedarticle'            => 'levédte a(z) [[$1]] lapot',
+'unprotectedarticle'          => 'eltávolította a védelmet a(z) "[[$1]]" lapról',
+'protectsub'                  => '(„$1” levédése)',
+'confirmprotecttext'          => 'Tényleg le akarod védeni ezt a lapot?',
+'confirmprotect'              => 'Levédés megerősítése',
+'protectmoveonly'             => 'Csak átmozgatás elleni védelem',
+'protectcomment'              => 'A védelem oka',
+'protectexpiry'               => 'Időtartam',
+'unprotectsub'                => '(„$1” védelmének feloldása)',
+'confirmunprotecttext'        => 'Tényleg fel akarod oldani ezen lap védelmét?',
+'confirmunprotect'            => 'Védelemfeloldás megerősítése',
+'unprotectcomment'            => 'Védelem feloldásának oka',
+'protect-unchain'             => 'Átnevezési jogok állítása külön',
+'protect-text'                => 'Itt megtekintheted és módosíthatod a(z) [[$1]] lap védelmi szintjét. Légy szives, tartsd be a [[{{ns:project}}:Védett lapok|védett lapokkal kapcsolatos előírásokat]].',
+'protect-cascadeon'           => 'A lap le van védve, mert tartalmazzák az alábbi lapok, amelyeken be van kapcsolva a kaszkád védelem. Ezen lap védelmi szintjének a megváltoztatása a kaszkád védelemre nincs hatással.',
+'protect-default'             => '(alapértelmezett)',
+'protect-level-autoconfirmed' => 'Csak regisztrált felhasználók',
+'protect-level-sysop'         => 'Csak adminisztrátorok',
+'protect-cascade'             => 'Kaszkád védelem – védjen le minden lapot, amit ez a lap tartalmaz.',
+
+# Restrictions (nouns)
+'restriction-edit' => 'Szerkesztés',
+'restriction-move' => 'Átmozgatás',
+
+# Undelete
+'undelete'           => 'Törölt lap helyreállítása',
+'undeletepage'       => 'Törölt lapok megtekintése és helyreállítása',
+'viewdeletedpage'    => 'Törölt lapok megtekintése',
+'undeletepagetext'   => 'Az alábbi lapokat törölték, de még helyreállíthatók az archívumból (az archívumot időről időre üríthetik!).',
+'undeleteextrahelp'  => "A lap teljes helyreállításához ne jelölj be egy boxot sem, csak nyomj a '''''Helyreállítás!''''' gombra. A lap részleges helyreállításához jelöld be a kívánt szerkesztések melletti boxokat, és nyomj a '''''Helyreállítás!''''' gombra. Ha megnyomod a '''''Vissza''''' gombot, az törli a boxok és az összefoglaló jelenlegi tartalmát.",
+'undeleterevisions'  => '$1 változat archiválva',
+'undeletehistory'    => 'Ha helyreállítasz egy lapot, azzal visszahozod laptörténet összes változatát.  Ha lap törlése óta azonos néven már létrehoztak egy újabb lapot, a helyreállított változatok a laptörténet elejére kerülnek be, a jelenlegi lapváltozat módosítása nélkül.',
+'undeletebtn'        => 'Helyreállítás!',
+'undeletereset'      => 'Vissza',
+'undeletecomment'    => 'Visszaállítás oka:',
+'undeletedarticle'   => '"$1" helyreállítva',
+'undeletedrevisions' => '$1 változat helyreállítva',
+'cannotundelete'     => 'Nem lehet a lapot visszaállítani; lehet, hogy azt már valaki visszaállította.',
+'undeletedpage'      => "<big>'''$1 helyreállítva'''</big>
+
+Lásd a [[Special:Log/delete|törlési naplót]] a legutóbbi törlések és helyreállítások listájához.",
+
+# Namespace form on various pages
+'namespace' => 'Névtér:',
+'invert'    => 'Kijelölés megfordítása',
+
+# Contributions
+'contributions' => 'Szerkesztő közreműködései',
+'mycontris'     => 'Közreműködéseim',
+'contribsub2'    => '$1 ($2) cikkhez',
+'nocontribs'    => 'Nem találtam a feltételnek megfelelő módosítást.',
+'ucnote'        => 'Lentebb <b>$1</b> módosításai láthatóak az elmúlt <b>$2</b> napban.',
+'uctop'         => ' (utolsó)',
+
+'sp-contributions-newest'      => 'Legfrissebb',
+'sp-contributions-oldest'      => 'Legkorábbi',
+'sp-contributions-newer'       => '$1 frissebb',
+'sp-contributions-older'       => '$1 korábbi',
+'sp-contributions-newbies-sub' => 'Új szerkesztők lapjai',
+'sp-contributions-blocklog'    => 'Blokkolási napló',
+
+'sp-newimages-showfrom' => 'Új képek mutatása $1 után',
+
+# What links here
+'whatlinkshere' => 'Mi hivatkozik erre',
+'notargettitle' => 'Nincs cél',
+'notargettext'  => 'Nem adtál meg lapot vagy usert keresési célpontnak.',
+'linklistsub'   => '(Linkek )',
+'linkshere'     => 'Az alábbi lapok hivatkoznak erre: [[:$1]]',
+'nolinkshere'   => 'Erre a lapra semmi nem hivatkozik: [[:$1]]',
+'isredirect'    => 'átirányítás',
+'istemplate'    => 'beillesztve',
+
+# Block/unblock
+'blockip'             => 'Blokkolás',
+'blockiptext'         => 'Az alábbi űrlap segítségével megvonhatod egy adott felhasználótól vagy egy adott IP-cím használójától az írási jogokat. Figyelj oda, hogy az intézkedés mindig az [[{{ns:project}}:Blokkolási irányelvek|irányelvek]] szerint történjen. Add meg a blokkolás okát is (például idézd a blokkolandó személy által vandalizált lapokat).
+
+A blokkolás lejáratát GNU standard formátumban add meg, ennek a leírását megtalálod a [http://www.gnu.org/software/tar/manual/html_node/Date-input-formats.html tar kézikönyvében]. Néhány példa: „1 hour”, „2 days”, „next Wednesday”, „1 January 2017”. A blokkolás szólhat „indefinite” (határozatlan) vagy „infinite” (végtelen) időre is.
+
+IP-tartományok blokkolásával kapcsolatban lásd a range blocks szócikket. Blokkolás megszüntetésére a [[Special:Ipblocklist|blokkolt IP címek listája]] oldalon van mód. A blokkok visszamenőleg megtekinthetőek a [[Special:Log/block|blokkolási naplóban]] is.',
+'ipaddress'           => 'IP cím',
+'ipadressorusername'  => 'IP cím vagy felhasználói név',
+'ipbexpiry'           => 'Lejárat',
+'ipbreason'           => 'Blokkolás oka',
+'ipbanononly'         => 'Csak anonim felhasználók blokkolása',
+'ipbcreateaccount'    => 'Új regisztráció megakadályozása',
+'ipbenableautoblock'  => 'A szerkesztő által használt IP-címek automatikus blokkolása',
+'ipbsubmit'           => 'Blokkolás',
+'ipbother'            => 'Más időtartam',
+'ipboptions'          => '2 óra:2 hours,1 nap:1 day,3 nap:3 days,1 hét:1 week,2 hét:2 weeks,1 hónap:1 month,3 hónap:3 months,6 hónap:6 months,1 év:1 year,végtelen:infinite',
+'ipbotheroption'      => 'Más időtartam',
+'badipaddress'        => 'Érvénytelen IP cím',
+'blockipsuccesssub'   => 'Sikeres blokkolás',
+'blockipsuccesstext'  => '„[[{{ns:Special}}:Contributions/$1|$1]]” felhasználót blokkoltad. <br />Lásd a [[{{ns:Special}}:Ipblocklist|blokkolt IP címek listáját]] az érvényben lévő blokkok áttekintéséhez.',
+'ipb-unblock-addr'    => '$1 blokkjának feloldása',
+'ipb-blocklist-addr'  => '$1 aktív blokkjainak megtekintése',
+'ipusubmit'           => 'Blokk feloldása',
+'unblocked'           => '[[User:$1|$1]] blokkolása feloldva',
+'ipblocklist'         => 'Blokkolt IP címek listája',
+'ipblocklist-summary' => 'Lásd még a [[Special:Log/block|blokkolási naplót]].',
+'blocklistline'       => '$1, $2 blokkolta $3 felhasználót (lejárat: $4)',
+'anononlyblock'       => 'csak anon.',
+'createaccountblock'  => 'új felhasználó létrehozása blokkolva',
+'blocklink'           => 'Blokkolás',
+'unblocklink'         => 'blokk feloldása',
+'contribslink'        => 'Szerkesztései',
+'autoblocker'         => "Az általad használt IP-cím autoblokkolva van, mivel korábban a kitiltott „[[User:$1|$1]]” használta. ($1 blokkolásának indoklása: „'''$2'''”) Ha nem te vagy $1, lépj kapcsolatba valamelyik adminisztrátorral, és kérd az autoblokk feloldását. Ne felejtsd el megírni neki, hogy kinek szóló blokkba ütköztél bele!",
+'blocklogpage'        => 'Blokkolási_napló',
+'blocklogentry'       => '"$1" blokkolva $2 $3 időtartamra',
+'blocklogtext'        => 'Ez a felhasználókra helyezett blokkoknak és azok feloldásának listája. Az IP autoblokkok nem szerepelnek a listában. Lásd még [[Special:Ipblocklist|a jelenleg életben lévő blokkok listáját]].',
+'unblocklogentry'     => '"$1" blokkolása feloldva',
+'ipb_expiry_invalid'  => 'Hibás lejárati dátum.',
+'ipb_already_blocked' => '"$1" már blokkolva',
+'proxyblockreason'    => "Az IP címed ''open proxy'' probléma miatt le van tiltva. Vedd fel a kapcsolatot egy informatikussal vagy az internet szolgáltatóddal ezen súlyos biztonsági probléma ügyében.",
+'proxyblocksuccess'   => 'Kész.',
+
+# Developer tools
+'databasenotlocked' => 'Az adatbázis nincs lezárva.',
+
+# Move page
+'newtitle'                => 'Az új névre',
+'pagemovedsub'            => 'Átnevezés sikeres',
+'pagemovedtext'           => "A(z) „[[$1]]” lapot átneveztem a(z) „[[$2]]” névre.
+
+'''Kérlek, [[{{ns:Special}}:Whatlinkshere/$2|ellenőrizd]]''', hogy az átnevezés nem hozott-e létre [[{{ns:Special}}:DoubleRedirects|dupla átirányításokat]], és javítsd őket, ha szükséges.",
+'articleexists'           => 'Ilyen névvel már létezik lap, vagy az általad
+választott név érvénytelen.
+Kérlek, válassz egy másik nevet.
+
+Ha már létezik ilyen nevű lap, akkor kérd annak törlését a [[{{ns:project}}:Azonnali törlés]] lapon.',
+'talkexists'              => 'A lap átmozgatása sikerült, de a hozzá tartozó
+vitalapot nem tudtam átmozgatni mert már létezik egy egyező nevű
+lap az új helyen. Kérlek gondoskodj a két lap összefűzéséről.',
+'movetalk'                => 'Nevezd át a vitalapot is, ha lehetséges.',
+'talkpagemoved'           => 'Az oldal vitalapját is átmozgattam.',
+'talkpagenotmoved'        => 'Az oldal vitalapja <strong>nem került</strong> átmozgatásra.',
+'1movedto2'               => '[[$1]] átnevezve [[$2]] névre',
+'1movedto2_redir'         => '[[$1]] átnevezve [[$2]] névre (átirányítást felülírva)',
+'movereason'              => 'Indoklás',
+'revertmove'              => 'visszaállítás',
+'delete_and_move'         => 'Törlés és átnevezés',
+'delete_and_move_text'    => '== Törlés szükséges ==
+
+Az átnevezés céljaként megadott „[[$1]]” szócikk már létezik.  Ha az átnevezést végre akarod hajtani, ezt a lapot törölni kell.  Valóban ezt szeretnéd?',
+'delete_and_move_confirm' => 'Igen, töröld a lapot',
+'delete_and_move_reason'  => 'átnevezendő lap célneve felszabadítva',
+'selfmove'                => 'A cikk jelenlegi címe megegyezik azzal, amire át szeretnéd mozgatni. Egy szócikket saját magára mozgatni nem lehet.',
+
+# Export
+'export'        => 'Lapok exportálása',
+'exporttext'    => 'Egy adott lap vagy lapcsoport szövegét és laptörténetét exportálhatod XML-be. A kapott fájlt importálhatod egy másik MediaWiki alapú rendszerbe a Special:Import lapon keresztül.
+
+Lapok exportálásához add meg a címüket a lenti szövegdobozban (minden címet külön sorba), és válaszd ki, hogy az összes korábbi változatra és a teljes laptörténetekre szükséged van-e, vagy csak az aktuális változatok és a legutolsó változtatásokra vonatkozó információk kellenek.
+
+Az utóbbi esetben közvetlen linket is használhatsz, például a [[Special:Export/{{MediaWiki:Mainpage}}]] a [[{{MediaWiki:Mainpage}}]] nevű lapot exportálja.',
+'exportcuronly' => 'Csak a legfrissebb állapot, teljes laptörténet nélkül',
+
+# Namespace 8 related
+'allmessages'               => 'Rendszerüzenetek',
+'allmessagesname'           => 'Név',
+'allmessagesdefault'        => 'Alapértelmezett szöveg',
+'allmessagescurrent'        => 'Jelenlegi szöveg',
+'allmessagestext'           => 'Ez a MediaWiki [[{{ns:project}}:Névtér|névtérben]] elérhető összes üzenet listája.',
+'allmessagesnotsupportedUI' => "A felhasználói felületedhez jelenleg megadott nyelvet (<b>$1</b>) ezen a wikin a ''Special:Allmessages'' nem támogatja.",
+'allmessagesnotsupportedDB' => "A '''''Special:Allmessages''''' lap nem használható, mert a '''\$wgUseDatabaseMessages''' ki van kapcsolva.",
+'allmessagesfilter'         => 'Üzenetnevek szűrése:',
+'allmessagesmodified'       => 'Csak a módosítottak mutatása',
+
+# Thumbnails
+'thumbnail-more'  => 'Nagyít',
+'missingimage'    => '<b>Hiányzó kép</b><br /><i>$1</i>',
+'thumbnail_error' => 'Hiba az indexkép létrehozásakor: $1',
+
+# Special:Import
+'import'          => 'Lapok importálása',
+'importnosources' => 'Nincsenek transzwikiimport-források definiálva, a közvetlen laptörténet-felküldés pedig nem megengedett.',
+
+# Import log
+'importlogpage' => 'Importnapló',
+
+# Tooltip help for the actions
+'tooltip-pt-userpage'             => 'A felhasználói lapod',
+'tooltip-pt-anonuserpage'         => 'Az általad használt IP címhez tartozó felhasználói lap',
+'tooltip-pt-mytalk'               => 'A vitalapod',
+'tooltip-pt-anontalk'             => 'Az általad használt IP címről végrehajtott szerkesztések megvitatása',
+'tooltip-pt-preferences'          => 'A beállításaid',
+'tooltip-pt-watchlist'            => 'Az általad figyelemmel kísért oldalak utolsó változtatásai',
+'tooltip-pt-mycontris'            => 'A közreműködéseid listája',
+'tooltip-pt-login'                => 'Bejelentkezni javasolt, de nem kötelező.',
+'tooltip-pt-anonlogin'            => 'Bejelentkezni javasolt, de nem kötelező.',
+'tooltip-pt-logout'               => 'Kijelentkezés',
+'tooltip-ca-talk'                 => 'Az oldal tartalmának megvitatása',
+'tooltip-ca-edit'                 => 'Te is szerkesztheted ezt az oldalt. Mielőtt elmentenéd, használd az előnézetet.',
+'tooltip-ca-addsection'           => 'Újabb fejezet nyitása a vitában.',
+'tooltip-ca-viewsource'           => 'Ez egy védett lap. Ide kattintva megnézheted a forrását.',
+'tooltip-ca-history'              => 'A lap korábbi változatai',
+'tooltip-ca-protect'              => 'Lap levédése',
+'tooltip-ca-delete'               => 'Lap törlése',
+'tooltip-ca-undelete'             => 'Törölt lapváltozatok visszaállítása',
+'tooltip-ca-move'                 => 'Lap átmozgatása',
+'tooltip-ca-watch'                => 'Lap hozzáadása a figyelőlistádhoz',
+'tooltip-ca-unwatch'              => 'Lap eltávolítása a figyelőlistádról',
+'tooltip-search'                  => 'Keresés a wikiben',
+'tooltip-p-logo'                  => 'Kezdőlap',
+'tooltip-n-mainpage'              => 'Kezdőlap megtekintése',
+'tooltip-n-portal'                => 'A közösségről, miben segíthetsz, mit hol találsz meg',
+'tooltip-n-currentevents'         => 'Háttérinformáció az aktuális eseményekről',
+'tooltip-n-recentchanges'         => 'A wikin történt legutóbbi változtatások listája',
+'tooltip-n-randompage'            => 'Egy véletlenszerűen kiválasztott lap betöltése',
+'tooltip-n-help'                  => 'Ha bármi problémád van...',
+'tooltip-n-sitesupport'           => 'Támogass minket!',
+'tooltip-t-whatlinkshere'         => 'Az erre a lapra hivatkozó más lapok listája',
+'tooltip-t-recentchangeslinked'   => 'Az erről a lapról hivatkozott lapok utolsó változtatásai',
+'tooltip-feed-rss'                => 'A lap tartalma RSS feed formájában',
+'tooltip-feed-atom'               => 'A lap tartalma Atom feed formájában',
+'tooltip-t-contributions'         => 'A felhasználó közreműködéseinek listája',
+'tooltip-t-emailuser'             => 'Írj levelet ennek a felhasználónak!',
+'tooltip-t-upload'                => 'Képek vagy egyéb fájlok feltöltése',
+'tooltip-t-specialpages'          => 'Az összes speciális lap listája',
+'tooltip-ca-nstab-main'           => 'Lap megtekintése',
+'tooltip-ca-nstab-user'           => 'Felhasználói lap megtekintése',
+'tooltip-ca-nstab-media'          => 'Fájlleíró lap megtekintése',
+'tooltip-ca-nstab-special'        => 'Ez egy speciális lap, nem lehet szerkeszteni.',
+'tooltip-ca-nstab-project'        => 'Projekt lap megtekintése',
+'tooltip-ca-nstab-image'          => 'Képleíró lap megtekintése',
+'tooltip-ca-nstab-mediawiki'      => 'Rendszerüzenet megtekintése',
+'tooltip-ca-nstab-template'       => 'Sablon megtekintése',
+'tooltip-ca-nstab-help'           => 'Segítő lap megtekintése',
+'tooltip-ca-nstab-category'       => 'Kategória megtekintése',
+'tooltip-minoredit'               => 'Szerkesztés megjelölése apróként',
+'tooltip-save'                    => 'A változtatásaid elmentése',
+'tooltip-preview'                 => 'Mielőtt elmentenéd a lapot, ellenőrizd, biztosan úgy néz-e ki, ahogy szeretnéd!',
+'tooltip-diff'                    => 'Nézd meg, milyen változtatásokat végeztél eddig a szövegen',
+'tooltip-compareselectedversions' => 'A két kiválasztott változat közötti eltérések megjelenítése',
+'tooltip-watch'                   => 'Lap hozzáadása a figyelőlistádhoz',
+
+# Stylesheets
+'common.css'   => '/* Közös CSS az összes skinnek */',
+'monobook.css' => '/*
+Közös (skinfüggetlen) css: [[MediaWiki:Common.css]]*/',
+
+# Attribution
+'anonymous'        => 'Névtelen {{SITENAME}}-felhasználó(k)',
+'siteuser'         => '$1 wiki felhasználó',
+'lastmodifiedatby' => 'Ezt a lapot utoljára $3 módosította $2, $1 időpontban.', # $1 date, $2 time, $3 user
+'and'              => 'és',
+'siteusers'        => '$1 wiki felhasználó(k)',
+
+# Spam protection
+'spamprotectiontitle'    => 'Spamszűrő',
+'spamprotectiontext'     => 'Az általad elmenteni kívánt lap fennakadt a spamszűrőn. Ezt valószínűleg egy külső weblapra történő hivatkozás okozta. Ha úgy érzed, tévedés történt, kérd a lap spamszűrőből való kivételét [[{{ns:project}}:Adminisztrátorok üzenőfala|az adminisztrátorok üzenőfalán]].',
+'spamprotectionmatch'    => 'A spamszűrőn az alábbi szöveg fennakadt: $1',
+'subcategorycount'       => 'Ebben a kategóriában $1 alkategória található.',
+'categoryarticlecount'   => 'A kategória lenti listájában $1 szócikk található.',
+'category-media-count'   => '{{PLURAL:$1|Egy fájl|$1 darab fájl}} található ebben a kategóriában.',
+'listingcontinuesabbrev' => ' folyt.',
+
+# Math options
+'mw_math_png'    => 'Mindig készítsen PNG-t',
+'mw_math_simple' => 'HTML, ha nagyon egyszerű, egyébként PNG',
+'mw_math_html'   => 'HTML, ha lehetséges, egyébként PNG',
+'mw_math_source' => 'Hagyja TeX formában (szöveges böngészőknek)',
+'mw_math_modern' => 'Modern böngészőknek ajánlott beállítás',
+'mw_math_mathml' => 'MathML',
+
+# Patrolling
+'markaspatrolleddiff'    => 'Ellenőrzöttnek jelölöd',
+'markaspatrolledtext'    => 'Ezt a cikket ellenőrzöttnek jelölöd',
+'markedaspatrolled'      => 'Ellenőrzöttnek jelölve',
+'markedaspatrolledtext'  => 'A kiválasztott változatot ellenőrzöttnek jelölted.',
+'rcpatroldisabled'       => 'A Friss Változtatások Ellenőrzése kikapcsolva',
+'rcpatroldisabledtext'   => 'A Friss Változtatások Ellenőrzése jelenleg nincs engedélyezve.',
+'markedaspatrollederror' => 'Nem lehet ellenőrzöttnek jelölni',
+
+# Image deletion
+'deletedrevision' => 'Törölted $1 egy régebbi változatát.',
+
+# Browsing diffs
+'previousdiff' => '‹ Előző változtatások',
+'nextdiff'     => 'Következő változtatások ›',
+
+# Media information
+'imagemaxsize' => 'A képlapokon mutatott maximális képméret:',
+'thumbsize'    => 'Indexkép mérete:',
+
+'newimages' => 'Új képek galériája',
+
+'passwordtooshort' => 'Túl rövid a jelszavad. Legalább $1 karakterből kell állnia.',
+
+# Metadata
+'metadata'          => 'Metaadatok',
+'metadata-help'     => 'Ez a kép járulékos adatokat tartalmaz, amelyek feltehetően a kép létrehozásához használt digitális fényképezőgép vagy lapolvasó beállításairól adnak tájékoztatást.  Ha a képet az eredetihez képest módosították, ezen adatok eltérhetnek a kép tényleges jellemzőitől.',
+'metadata-expand'   => 'További képadatok',
+'metadata-collapse' => 'További képadatok elrejtése',
+
+# EXIF tags
+'exif-imagewidth'                => 'Szélesség',
+'exif-imagelength'               => 'Magasság',
+'exif-compression'               => 'Tömörítési séma',
+'exif-photometricinterpretation' => 'Színösszetevők',
+'exif-samplesperpixel'           => 'Színösszetevők száma',
+'exif-planarconfiguration'       => 'Adatok csoportosítása',
+'exif-stripoffsets'              => 'Csík ofszet',
+'exif-rowsperstrip'              => 'Egy csíkban levő sorok száma',
+'exif-stripbytecounts'           => 'Bájt/csík',
+'exif-datetime'                  => 'Utolsó változtatás ideje',
+'exif-make'                      => 'Fényképezőgép gyártója',
+'exif-model'                     => 'Fényképezőgép típusa',
+'exif-software'                  => 'Használt szoftver',
+'exif-datetimeoriginal'          => 'EXIF információ létrehozásának dátuma',
+'exif-exposuretime'              => 'Expozíciós idő',
+'exif-focallength'               => 'Fókusztávolság',
+
+'exif-planarconfiguration-1' => 'Egyben',
+
+# External editor support
+'edit-externally'      => 'A file szerkesztése külső alkalmazással',
+'edit-externally-help' => 'Lásd a [http://meta.wikimedia.org/wiki/Help:External_editors „setup instructions”] leírást (angolul) ennek használatához.',
+
+# 'all' in various places, this might be different for inflected languages
+'recentchangesall' => 'összes',
+'imagelistall'     => 'összes',
+'watchlistall1'    => 'összes',
+'watchlistall2'    => 'bármikor',
+'namespacesall'    => 'Összes',
+
+# E-mail address confirmation
+'confirmemail'            => 'E-mail cím megerősítése',
+'confirmemail_noemail'    => 'Nincs érvényes e-mail cím megadva a [[Special:Preferences|beállításaidnál]].',
+'confirmemail_text'       => 'Ennek a wikinek a használatához meg kell erősítened az e-mail címed, mielőtt használni kezded a levelezési rendszerét. Nyomd meg az alsó gombot, hogy kaphass egy e-mailt, melyben megtalálod a megerősítéshez szükséges kódot. Töltsd be a kódot a böngésződbe, hogy aktiválhasd az e-mail címedet. Köszönjük!',
+'confirmemail_send'       => 'Küldd el a kódot',
+'confirmemail_sent'       => 'Kaptál egy e-mailt, melyben megtalálod a megerősítéshez szükséges kódot.',
+'confirmemail_oncreate'   => 'A megerősítő kódot elküldtük az e-mail címedre.
+Ez a kód nem szükséges a belépéshez, de meg kell adnod mielőtt a wiki e-mail alapú szolgáltatásait igénybe veheted.',
+'confirmemail_sendfailed' => 'Nem tudjuk elküldeni a megerősítéshez szükséges e-mailt. Kérünk, ellenőrizd a címet. $1',
+'confirmemail_invalid'    => 'Nem megfelelő kód. A kódnak lehet, hogy lejárt a felhasználhatósági ideje.',
+'confirmemail_success'    => 'Az e-mail címed megerősítve. Most már beléphetsz a wikibe.',
+'confirmemail_loggedin'   => 'E-mail címed megerősítve.',
+'confirmemail_error'      => 'Hiba az e-mail címed megerősítése során.',
+'confirmemail_subject'    => '{{SITENAME}} e-mail cím megerősítés',
+'confirmemail_body'       => 'Valaki, valószínűleg te, a $1 IP címről regisztrált a "$2" azonosítóval, ezzel az e-maillel. 
+
+Annak érdekében, hogy megerősítsd, ez az azonosító valóban hozzád tartozik, és aktiválni szeretnéd az e-mail címedet, nyisd meg az alábbi linket a böngésződben:
+
+$3
+
+Ha ez *nem* te vagy, ne kattints a linkre. Ennek a megerősítésre szánt kódnak a felhasználhatósági ideje lejár: $4.',
+
+# Inputbox extension, may be useful in other contexts as well
+'searchfulltext' => 'Teljes szöveg keresése',
+
+# HTML dump
+'redirectingto' => 'Átirányítás a következőre: [[:$1|$1]]...',
+
+'searchcontaining' => "''$1''-t tartalmazó lapokra keresés.",
+'searchnamed'      => "''$1'' című lapok keresése.",
+'articletitles'    => "''$1'' kezdetű szócikkek",
+'hideresults'      => 'Eredmények elrejtése',
+
+# Auto-summaries
+'autosumm-blank'   => 'A lap teljes tartalmának eltávolítása',
+'autosumm-replace' => 'A lap tartalmának cseréje erre: $1',
+'autoredircomment' => 'Átirányítás ide:[[$1]]', # This should be changed to the new naming convention, but existed beforehand
+'autosumm-new'     => 'Új oldal, tartalma: „$1”',
+
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesHy.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesHy.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesHy.php	(revision 1280)
@@ -0,0 +1,1008 @@
+<?php
+/** Armenian (Հայերեն)
+  *
+  * @addtogroup Language
+  *
+  * Based on MessagesEn.php revision 18716 (2007-21-02)
+  * and hy.wikipedia MediaWiki namespace (2007-24-04)
+  *
+  * Maintainer: Ruben Vardanyan (me@RubenVardanyan.com)
+  * 
+  * ՈՒՇԱԴՐՈՒԹՅՈՒՆ, ՄԻ ՓՈՓՈԽԵՔ ԱՅՍ ՖԱՅԼԸ
+  *
+  * Եթե անհրաժեշտ է կատարել փոփոխություն ինտերֆեյսի առանձին տողերի մեջ,
+  * ապա կատարեք դա խմբագրելով MediaWiki:* տիպի ֆայլերը։
+  * Դրանց ցուցակը կարող եք տեսնել այս էջում՝ Special:Allmessages։
+  *
+  */
+
+/**
+ * Transform table for decimal point '.' and thousands separator ','
+ */
+$separatorTransformTable = array(
+	',' => "\xc2\xa0", # nbsp
+	'.' => ','
+);
+
+
+/**
+ * URLs do not specify their encoding. UTF-8 is used by default, but if the 
+ * URL is not a valid UTF-8 sequence, we have to try to guess what the real
+ * encoding is. The encoding used in this case is defined below, and must be
+ * supported by iconv(). 
+ */
+$fallback8bitEncoding = 'UTF-8';
+
+/**
+ * To allow "foo[[bar]]" to extend the link over the whole word "foobar"
+ */
+$linkPrefixExtension = true;
+
+/**
+ * Namespace names. NS_PROJECT is always set to $wgMetaNamespace after the 
+ * settings are loaded, it will be ignored even if you specify it here. 
+ *
+ * NS_PROJECT_TALK will be set to $wgMetaNamespaceTalk if that variable is
+ * set, otherwise the string specified here will be used. The string may 
+ * contain "$1", which will be replaced by the name of NS_PROJECT. It may 
+ * also contain a grammatical transformation, e.g. 
+ *
+ *     NS_PROJECT_TALK => 'Keskustelu_{{grammar:elative|$1}}'
+ *
+ * Only one grammatical transform may be specified in the string. For 
+ * performance reasons, this transformation is done locally by the language 
+ * module rather than by the full wikitext parser. As a result, no other 
+ * parser features are available. 
+ */
+$namespaceNames = array(
+	NS_MEDIA            => 'Մեդիա',
+	NS_SPECIAL          => 'Սպասարկողէջ',
+	NS_MAIN	            => '',
+	NS_TALK	            => 'Քննարկում',
+	NS_USER             => 'Մասնակից',
+	NS_USER_TALK        => 'Մասնակցի_քննարկում',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK     => '{{grammar:genitive|$1}}_քննարկում',
+	NS_IMAGE            => 'Պատկեր',
+	NS_IMAGE_TALK       => 'Պատկերի_քննարկում',
+	NS_MEDIAWIKI        => 'MediaWiki',
+	NS_MEDIAWIKI_TALK   => 'MediaWiki_քննարկում',
+	NS_TEMPLATE         => 'Կաղապար',
+	NS_TEMPLATE_TALK    => 'Կաղապարի_քննարկում',
+	NS_HELP             => 'Օգնություն',
+	NS_HELP_TALK        => 'Օգնության_քննարկում',
+	NS_CATEGORY         => 'Կատեգորիա',
+	NS_CATEGORY_TALK    => 'Կատեգորիայի_քննարկում',
+);
+
+
+/**
+ * A list of date format preference keys which can be selected in user 
+ * preferences. New preference keys can be added, provided they are supported
+ * by the language class's timeanddate(). Only the 5 keys listed below are 
+ * supported by the wikitext converter (DateFormatter.php).
+ *
+ * The special key "default" is an alias for either dmy or mdy depending on 
+ * $wgAmericanDates
+ */
+$datePreferences = array(
+	'default',
+	'mdy',
+	'dmy',
+	'ymd',
+	'ISO 8601',
+);
+
+/**
+ * The date format to use for generated dates in the user interface.
+ * This may be one of the above date preferences, or the special value 
+ * "dmy or mdy", which uses mdy if $wgAmericanDates is true, and dmy 
+ * if $wgAmericanDates is false.
+ */
+$defaultDateFormat = 'dmy or mdy';
+
+/**
+ * Associative array mapping old numeric date formats, which may still be 
+ * stored in user preferences, to the new string formats.
+ */
+$datePreferenceMigrationMap = array(
+	'default',
+	'mdy',
+	'dmy',
+	'ymd'
+);
+
+/**
+ * These are formats for dates generated by MediaWiki (as opposed to the wikitext
+ * DateFormatter). Documentation for the format string can be found in 
+ * Language.php, search for sprintfDate. 
+ *
+ * This array is automatically inherited by all subclasses. Individual keys can be
+ * overridden.
+ */
+$dateFormats = array(
+	'mdy time' => 'H:i',
+	'mdy date' => 'xg j, Y',
+	'mdy both' => 'H:i, xg j, Y',
+
+	'dmy time' => 'H:i',
+	'dmy date' => 'j xg Y',
+	'dmy both' => 'H:i, j xg Y',
+
+	'ymd time' => 'H:i',
+	'ymd date' => 'Y xg j',
+	'ymd both' => 'H:i, Y xg j',
+
+	'ISO 8601 time' => 'xnH:xni:xns',
+	'ISO 8601 date' => 'xnY-xnm-xnd',
+	'ISO 8601 both' => 'xnY-xnm-xnd"T"xnH:xni:xns',
+);
+
+$bookstoreList = array(
+	'Amazon.com' => 'http://www.amazon.com/exec/obidos/ISBN=$1'
+);
+
+/**
+ * Magic words
+ * Customisable syntax for wikitext and elsewhere
+ *
+ * Note to translators:
+ *   Please include the English words as synonyms.  This allows people
+ *   from other wikis to contribute more easily.
+ *
+ * This array can be modified at runtime with the LanguageGetMagic hook
+ */
+$magicWords = array(
+#   ID                                 CASE  SYNONYMS
+	'redirect'               => array( 0,    '#REDIRECT', '#ՎԵՐԱՀՂՈՒՄ' ),
+	'notoc'                  => array( 0,    '__NOTOC__', '__ԱՌԱՆՑ_ԲՈՎ__' ),
+	'nogallery'              => array( 0,    '__NOGALLERY__', '__ԱՌԱՆՑ_ՍՐԱՀԻ__' ),
+	'forcetoc'               => array( 0,    '__FORCETOC__', '__ՍՏԻՊԵԼ_ԲՈՎ__'),
+	'toc'                    => array( 0,    '__TOC__' , '__ԲՈՎ__' ),
+	'noeditsection'          => array( 0,    '__NOEDITSECTION__', '__ԱՌԱՆՑ_ԲԱԺՆԻ_ԽՄԲԱԳՐՄԱՆ__' ),
+	'start'                  => array( 0,    '__START__', '__ՍԿԻԶԲ__' ),
+	'currentmonth'           => array( 1,    'CURRENTMONTH', 'ԸՆԹԱՑԻՔ_ԱՄԻՍԸ' ),
+	'currentmonthname'       => array( 1,    'CURRENTMONTHNAME', 'ԸՆԹԱՑԻՔ_ԱՄՍՎԱ_ԱՆՈՒՆԸ' ),
+	'currentmonthnamegen'    => array( 1,    'CURRENTMONTHNAMEGEN', 'ԸՆԹԱՑԻՔ_ԱՄՍՎԱ_ԱՆՈՒՆԸ_ՍԵՌ' ),
+	'currentmonthabbrev'     => array( 1,    'CURRENTMONTHABBREV', 'ԸՆԹԱՑԻՔ_ԱՄՍՎԱ_ԱՆՎԱՆ_ՀԱՊԱՎՈՒՄԸ' ),
+	'currentday'             => array( 1,    'CURRENTDAY', 'ԸՆԹԱՑԻՔ_ՕՐԸ' ),
+	'currentday2'            => array( 1,    'CURRENTDAY2', 'ԸՆԹԱՑԻՔ_ՕՐԸ_2' ),
+	'currentdayname'         => array( 1,    'CURRENTDAYNAME', 'ԸՆԹԱՑԻՔ_ՕՐՎԱ_ԱՆՈՒՆԸ' ),
+	'currentyear'            => array( 1,    'CURRENTYEAR', 'ԸՆԹԱՑԻՔ_ՏԱՐԻՆ' ),
+	'currenttime'            => array( 1,    'CURRENTTIME', 'ԸՆԹԱՑԻՔ_ԺԱՄԱՆԱԿԸ' ),
+	'currenthour'            => array( 1,    'CURRENTHOUR', 'ԸՆԹԱՑԻՔ_ԺԱՄԸ' ),
+	'localmonth'             => array( 1,    'LOCALMONTH', 'ՏԵՂԱԿԱՆ_ԱՄԻՍԸ' ),
+	'localmonthname'         => array( 1,    'LOCALMONTHNAME', 'ՏԵՂԱԿԱՆ_ԱՄՍՎԱ_ԱՆՈՒՆԸ' ),
+	'localmonthnamegen'      => array( 1,    'LOCALMONTHNAMEGEN', 'ՏԵՂԱԿԱՆ_ԱՄՍՎԱ_ԱՆՈՒՆԸ_ՍԵՌ' ),
+	'localmonthabbrev'       => array( 1,    'LOCALMONTHABBREV', 'ՏԵՂԱԿԱՆ_ԱՄՍՎԱ_ԱՆՎԱՆ_ՀԱՊԱՎՈՒՄԸ' ),
+	'localday'               => array( 1,    'LOCALDAY', 'ՏԵՂԱԿԱՆ_ՕՐԸ' ),
+	'localday2'              => array( 1,    'LOCALDAY2', 'ՏԵՂԱԿԱՆ_ՕՐԸ_2' ),
+	'localdayname'           => array( 1,    'LOCALDAYNAME', 'ՏԵՂԱԿԱՆ_ՕՐՎԱ_ԱՆՈՒՆԸ' ),
+	'localyear'              => array( 1,    'LOCALYEAR', 'ՏԵՂԱԿԱՆ_ՏԱՐԻՆ' ),
+	'localtime'              => array( 1,    'LOCALTIME','ՏԵՂԱԿԱՆ_ԺԱՄԱՆԱԿԸ' ),
+	'localhour'              => array( 1,    'LOCALHOUR','ՏԵՂԱԿԱՆ_ԺԱՄԸ' ),
+	'numberofpages'          => array( 1,    'NUMBEROFPAGES','ԷՋԵՐԻ_ՔԱՆԱԿԸ' ),
+	'numberofarticles'       => array( 1,    'NUMBEROFARTICLES','ՀՈԴՎԱԾՆԵՐԻ_ՔԱՆԱԿԸ' ),
+	'numberoffiles'          => array( 1,    'NUMBEROFFILES','ՖԱՅԼԵՐԻ_ՔԱՆԱԿԸ' ),
+	'numberofusers'          => array( 1,    'NUMBEROFUSERS','ՄԱՍՆԱԿԻՑՆԵՐԻ_ՔԱՆԱԿԸ' ),
+	'pagename'               => array( 1,    'PAGENAME','ԷՋԻ_ԱՆՈՒՆԸ' ),
+	'pagenamee'              => array( 1,    'PAGENAMEE','ԷՋԻ_ԱՆՈՒՆԸ_2' ),
+	'namespace'              => array( 1,    'NAMESPACE','ԱՆՎԱՆԱՏԱՐԱԾՔ' ),
+	'namespacee'             => array( 1,    'NAMESPACEE','ԱՆՎԱՆԱՏԱՐԱԾՔ_2' ),
+	'talkspace'              => array( 1,    'TALKSPACE','ՔՆՆԱՐԿՄԱՆ_ՏԱՐԱԾՔԸ' ),
+	'talkspacee'             => array( 1,    'TALKSPACEE','ՔՆՆԱՐԿՄԱՆ_ՏԱՐԱԾՔԸ_2' ),
+	'subjectspace'           => array( 1,    'SUBJECTSPACE', 'ARTICLESPACE', 'ՀՈԴՎԱԾՆԵՐԻ_ՏԱՐԱԾՔԸ' ),
+	'subjectspacee'          => array( 1,    'SUBJECTSPACEE', 'ARTICLESPACEE', 'ՀՈԴՎԱԾՆԵՐԻ_ՏԱՐԱԾՔԸ_2' ),
+	'fullpagename'           => array( 1,    'FULLPAGENAME', 'ARTICLESPACE', 'ԷՋԻ_ԼՐԻՎ_ԱՆՎԱՆՈՒՄԸ' ),
+	'fullpagenamee'          => array( 1,    'FULLPAGENAMEE', 'ԷՋԻ_ԼՐԻՎ_ԱՆՎԱՆՈՒՄԸ_2' ),
+	'subpagename'            => array( 1,    'SUBPAGENAME', 'ԵՆԹԱԷՋԻ_ԱՆՎԱՆՈՒՄԸ' ),
+	'subpagenamee'           => array( 1,    'SUBPAGENAMEE', 'ԵՆԹԱԷՋԻ_ԱՆՎԱՆՈՒՄԸ_2' ),
+	'basepagename'           => array( 1,    'BASEPAGENAME', 'ՀԻՄՆԱԿԱՆ_ԷՋԻ_ԱՆՎԱՆՈՒՄԸ' ),
+	'basepagenamee'          => array( 1,    'BASEPAGENAMEE', 'ՀԻՄՆԱԿԱՆ_ԷՋԻ_ԱՆՎԱՆՈՒՄԸ_2' ),
+	'talkpagename'           => array( 1,    'TALKPAGENAME', 'ՔՆՆԱՐԿՄԱՆ_ԷՋԻ_ԱՆՎԱՆՈՒՄԸ' ),
+	'talkpagenamee'          => array( 1,    'TALKPAGENAMEE', 'ՔՆՆԱՐԿՄԱՆ_ԷՋԻ_ԱՆՎԱՆՈՒՄԸ_2' ),
+	'subjectpagename'        => array( 1,    'SUBJECTPAGENAME', 'ARTICLEPAGENAME', 'ՀՈԴՎԱԾԻ_ԷՋԻ_ԱՆՎԱՆՈՒՄԸ' ),
+	'subjectpagenamee'       => array( 1,    'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE', 'ՀՈԴՎԱԾԻ_ԷՋԻ_ԱՆՎԱՆՈՒՄԸ_2' ),
+	'msg'                    => array( 0,    'MSG:', 'ՀՈՂՈՐԴ՝' ),
+	'subst'                  => array( 0,    'SUBST:' ),
+	'msgnw'                  => array( 0,    'MSGNW:', 'ՀՈՂՈՐԴ_ԱՌԱՆՑ_ՎԻՔԻԻ՝' ),
+	'end'                    => array( 0,    '__END__','__ԱՎԱՐՏ__' ),
+	'img_thumbnail'          => array( 1,    'thumbnail', 'thumb', 'մինի' ),
+	'img_manualthumb'        => array( 1,    'thumbnail=$1', 'thumb=$1', 'մինի=$1'),
+	'img_right'              => array( 1,    'right', 'աջից' ),
+	'img_left'               => array( 1,    'left', 'ձախից' ),
+	'img_none'               => array( 1,    'none', 'առանց' ),
+	'img_width'              => array( 1,    '$1px', '$1փքս' ),
+	'img_center'             => array( 1,    'center', 'centre', 'կենտրոն' ),
+	'img_framed'             => array( 1,    'framed', 'enframed', 'frame', 'շրջափակել' ),
+	'img_page'               => array( 1,    'page=$1', 'page $1', 'էջը=$1', 'էջ $1' ),
+	'int'                    => array( 0,    'INT:' , 'ՆԵՐՔ՝' ),
+	'sitename'               => array( 1,    'SITENAME', 'ԿԱՅՔԻ_ԱՆՈՒՆԸ' ),
+	'ns'                     => array( 0,    'NS:', 'ԱՏ՝' ),
+	'localurl'               => array( 0,    'LOCALURL:', 'ՏԵՂԱԿԱՆ_ՀԱՍՑԵՆ՝' ),
+	'localurle'              => array( 0,    'LOCALURLE:', 'ՏԵՂԱԿԱՆ_ՀԱՍՑԵՆ_2՝' ),
+	'server'                 => array( 0,    'SERVER', 'ՍԵՐՎԵՐԸ' ),
+	'servername'             => array( 0,    'SERVERNAME', 'ՍԵՐՎԵՐԻ_ԱՆՈՒՆԸ' ),
+	'scriptpath'             => array( 0,    'SCRIPTPATH', 'ՍՔՐԻՊՏԻ_ՃԱՆԱՊԱՐՀԸ' ),
+	'grammar'                => array( 0,    'GRAMMAR:' , 'ՀՈԼՈՎ՛' ),
+	'notitleconvert'         => array( 0,    '__NOTITLECONVERT__', '__NOTC__', '__ԱՌԱՆՑ_ՎԵՐՆԱԳՐԻ_ՓՈՓՈԽՄԱՆ__' ),
+	'nocontentconvert'       => array( 0,    '__NOCONTENTCONVERT__', '__NOCC__', '__ԱՌԱՆՑ_ՊԱՐՈՒՆԱԿՈՒԹՅԱՆ_ՓՈՓՈԽՄԱՆ__' ),
+	'currentweek'            => array( 1,    'CURRENTWEEK', 'ԸՆԹԱՑԻՔ_ՇԱԲԱԹԸ' ),
+	'currentdow'             => array( 1,    'CURRENTDOW', 'ԸՆԹԱՑԻՔ_ՇԱԲԱԹՎԱ_ՕՐԸ' ),
+	'localweek'              => array( 1,    'LOCALWEEK', 'ՏԵՂԱԿԱՆ_ՇԱԲԱԹՎԸ' ),
+	'localdow'               => array( 1,    'LOCALDOW', 'ՏԵՂԱԿԱՆ_ՇԱԲԱԹՎԱ_ՕՐԸ' ),
+	'revisionid'             => array( 1,    'REVISIONID', 'ՏԱՐԲԵՐԱԿԻ_ՀԱՄԱՐԸ' ),
+	'revisionday'            => array( 1,    'REVISIONDAY', 'ՏԱՐԲԵՐԱԿԻ_ՕՐԸ' ),
+	'revisionday2'           => array( 1,    'REVISIONDAY2', 'ՏԱՐԲԵՐԱԿԻ_ՕՐԸ_2' ),
+	'revisionmonth'          => array( 1,    'REVISIONMONTH', 'ՏԱՐԲԵՐԱԿԻ_ԱՄԻՍԸ' ),
+	'revisionyear'           => array( 1,    'REVISIONYEAR', 'ՏԱՐԲԵՐԱԿԻ_ՏԱՐԻՆ' ),
+	'revisiontimestamp'      => array( 1,    'REVISIONTIMESTAMP' ),
+	'plural'                 => array( 0,    'PLURAL:', 'ՀՈԳՆԱԿԻ՝' ),
+	'fullurl'                => array( 0,    'FULLURL:', 'ԼՐԻՎ_ՀԱՍՑԵՆ՝' ),
+	'fullurle'               => array( 0,    'FULLURLE:', 'ԼՐԻՎ_ՀԱՍՑԵՆ_2՝' ),
+	'lcfirst'                => array( 0,    'LCFIRST:', 'ՓՈՔՐԱՏԱՌ_ՍԿԶԲՆԱՏԱՌ՝' ),
+	'ucfirst'                => array( 0,    'UCFIRST:', 'ՄԵԾԱՏԱՌ_ՍԿԶԲՆԱՏԱՌ՝' ),
+	'lc'                     => array( 0,    'LC:', 'ՓՈՔՐԱՏԱՌ՝' ),
+	'uc'                     => array( 0,    'UC:', 'ՄԵԾԱՏԱՌ՝' ),
+	'raw'                    => array( 0,    'RAW:' ),
+	'displaytitle'           => array( 1,    'DISPLAYTITLE', 'ՑՈՒՅՑ_ՏԱԼ_ՎԵՐՆԱԳԻՐԸ' ),
+	'rawsuffix'              => array( 1,    'R', 'Չ' ),
+	'newsectionlink'         => array( 1,    '__NEWSECTIONLINK__', '__ՀՂՈՒՄ_ՆՈՐ_ԲԱԺՆԻ_ՎՐԱ__' ),
+	'currentversion'         => array( 1,    'CURRENTVERSION', 'ԸՆԹԱՑԻՔ_ՏԱՐԲԵՐԱԿԸ' ),
+	'urlencode'              => array( 0,    'URLENCODE:', 'ՄՇԱԿՎԱԾ_ՀԱՍՑԵ՛' ),
+	'anchorencode'           => array( 0,    'ANCHORENCODE' ),
+	'currenttimestamp'       => array( 1,    'CURRENTTIMESTAMP', 'ԸՆԹԱՑԻՔ_ԺԱՄԱՆԱԿԻ_ԴՐՈՇՄ' ),
+	'localtimestamp'         => array( 1,    'LOCALTIMESTAMP', 'ՏԵՂԱԿԱՆ_ԺԱՄԱՆԱԿԻ_ԴՐՈՇՄ' ),
+	'directionmark'          => array( 1,    'DIRECTIONMARK', 'DIRMARK', 'ՆԱՄԱԿԻ_ՈՒՂՂՈՒԹՅՈՒՆԸ' ),
+	'language'               => array( 0,    '#LANGUAGE:', '#ԼԵԶՈՒ՝' ),
+	'contentlanguage'        => array( 1,    'CONTENTLANGUAGE', 'CONTENTLANG', 'ՊԱՐՈՒՆԱԿՈՒԹՅԱՆ_ԼԵԶՈՒՆ' ),
+	'pagesinnamespace'       => array( 1,    'PAGESINNAMESPACE:', 'PAGESINNS:', 'ԷՋԵՐ_ԱՆՎԱՆԱՏԱՐԱԾՔՈՒՄ՝' ),
+	'numberofadmins'         => array( 1,    'NUMBEROFADMINS', 'ԱԴՄԻՆՆԵՐԻ_ՔԱՆԱԿԸ' ),
+	'formatnum'              => array( 0,    'FORMATNUM', 'ՁԵՎԵԼ_ԹԻՎԸ' ),
+	'padleft'                => array( 0,    'PADLEFT', 'ԼՐԱՑՆԵԼ_ՁԱԽԻՑ' ),
+	'padright'               => array( 0,    'PADRIGHT', 'ԼՐԱՑՆԵԼ_ԱՋԻՑ' ),
+	'special'                => array( 0,    'special', 'սպասարկող' ),
+	'defaultsort'			 => array( 1,	 'DEFAULTSORT:', 'ԼՌՈՒԹՅԱՄԲ_ԴԱՍԱՎՈՐՈՒՄ՝' ),
+);
+
+/**
+ * Alternate names of special pages. All names are case-insensitive. The first
+ * listed alias will be used as the default. Aliases from the fallback 
+ * localisation (usually English) will be included by default. 
+ * 
+ * This array may be altered at runtime using the LangugeGetSpecialPageAliases 
+ * hook. 
+ */
+$specialPageAliases = array(
+	'DoubleRedirects'           => array( 'Կրկնակիվերահղումները' ),
+	'BrokenRedirects'           => array( 'Կոտրվածվերահղումները' ),
+	'Disambiguations'           => array( 'Երկիմաստէջերը' ),
+	'Userlogin'                 => array( 'Մասնակցիմուտք' ),
+	'Userlogout'                => array( 'Մասնակցիելք' ),
+	'Preferences'               => array( 'Նախընտրությունները' ),
+	'Watchlist'                 => array( 'Հսկողությանցանկը' ),
+	'Recentchanges'             => array( 'Վերջինփոփոխությունները' ),
+	'Upload'                    => array( 'Բեռնել' ),
+	'Imagelist'                 => array( 'Պատկերներիցանկը' ),
+	'Newimages'                 => array( 'Նորպատկերներ' ),
+	'Listusers'                 => array( 'Մասնակիցներիցանկը' ),
+	'Statistics'                => array( 'Վիճակագրություն' ),
+	'Randompage'                => array( 'Պատահականէջ' ),
+	'Lonelypages'               => array( 'Միայնակէջերը' ),
+	'Uncategorizedpages'        => array( 'Չդասակարգվածէջերը' ),
+	'Uncategorizedcategories'   => array( 'Չդասակարգվածկատեգորիաները' ),
+	'Uncategorizedimages'       => array( 'Չդասակարգվածպատկերները' ),
+	'Unusedcategories'          => array( 'Չօգտագործվածկատեգորիաները' ),
+	'Unusedimages'              => array( 'Չօգտագործվածպատկերները' ),
+	'Wantedpages'               => array( 'Անհրաժեշտէջերը' ),
+	'Wantedcategories'          => array( 'Անհրաժեշտկատեգորիաները' ),
+	'Mostlinked'                => array( 'Ամենաշատհղումներով' ),
+	'Mostlinkedcategories'      => array( 'Շատհղվողկատեգորիաները' ),
+	'Mostcategories'            => array( 'Ամենաշատկատեգորիաներով' ),
+	'Mostimages'                => array( 'Ամենաշատօգտագործվողնկարները' ),
+	'Mostrevisions'             => array( 'Ամենաշատփոփոխվող' ),
+	'Shortpages'                => array( 'Կարճէջերը' ),
+	'Longpages'                 => array( 'Երկարէջերը' ),
+	'Newpages'                  => array( 'Նորէջերը' ),
+	'Ancientpages'              => array( 'Ամենահինէջերը' ),
+	'Deadendpages'              => array( 'Հղումչպարունակողէջերը' ),
+	'Allpages'                  => array( 'Բոլորէջերը' ),
+	'Prefixindex'               => array( 'Որոնումնախածանցով' ) ,
+	'Ipblocklist'               => array( 'ԱրգելափակվածIPները' ),
+	'Specialpages'              => array( 'Սպասարկողէջերը' ),
+	'Contributions'             => array( 'Ներդրումները' ),
+	'Emailuser'                 => array( 'Գրելնամակ' ),
+	'Whatlinkshere'             => array( 'Այստեղհղվողէջերը' ),
+	'Recentchangeslinked'       => array( 'Կապվածէջերիփոփոխությունները' ),
+	'Movepage'                  => array( 'Տեղափոխելէջը' ),
+	'Blockme'                   => array( 'Արգելափակել' ),
+	'Booksources'               => array( 'Գրքայինաղբյուրները' ),
+	'Categories'                => array( 'Կատեգորիաները' ),
+	'Export'                    => array( 'Արտահանելէջերը' ),
+	'Version'                   => array( 'Տարբերակ' ),
+	'Allmessages'               => array( 'Բոլորուղերձները' ),
+	'Log'                       => array( 'Տեղեկամատյան' ),
+	'Blockip'                   => array( 'Արգելափակելip' ),
+	'Undelete'                  => array( 'Վերականգնել' ),
+	'Import'                    => array( 'Ներմուծել' ),
+	'Lockdb'                    => array( 'Կողպելտհ' ),
+	'Unlockdb'                  => array( 'Բացանելտհ' ),
+	'Userrights'                => array( 'Մասնակցիիրավունքները' ),
+	'MIMEsearch'                => array( 'MIMEՈրոնում' ),
+	'Unwatchedpages'            => array( 'Չհսկվողէջերը' ),
+	'Listredirects'             => array( 'Ցույցտալվերահղումները' ),
+	'Listinterwikis'            => array( 'Ցույցտալինտերվիքիները' ),
+	'Revisiondelete'            => array( 'Տարբերակիհեռացում' ),
+	'Unusedtemplates'           => array( 'Չօգտագործվողկաղապարները' ),
+	'Randomredirect'            => array( 'Պատահականվերահղում' ),
+	'Mypage'                    => array( 'Իմէջը' ),
+	'Mytalk'                    => array( 'Իմքննարկումները' ),
+	'Mycontributions'           => array( 'Իմներդրումները' ),
+	'Listadmins'                => array( 'Ադմիններիցանկը' ),
+	'Popularpages'              => array( 'Հանրաճանաչէջերը' ),
+	'Search'                    => array( 'Որոնել' ),
+	'Resetpass'                 => array( 'Նորգաղտնաբառ' ),
+);
+
+/**
+ * Regular expression matching the "link trail", e.g. "ed" in [[Toast]]ed, as 
+ * the first group, and the remainder of the string as the second group.
+ */
+$linkTrail = '/^([a-zաբգդեզէըթժիլխծկհձղճմյնշոչպջռսվտրցւփքօֆև«»]+)(.*)$/sDu';
+
+#-------------------------------------------------------------------
+# Default messages
+#-------------------------------------------------------------------
+# Allowed characters in keys are: A-Z, a-z, 0-9, underscore (_) and
+# hyphen (-). If you need more characters, you may be able to change
+# the regex in MagicWord::initRegex
+
+$messages = array(
+'skinpreview' => '(Դիտել տեսքը)',
+
+# Dates
+'sunday'        => 'Կիրակի',
+'monday'        => 'Երկուշաբթի',
+'tuesday'       => 'Երեքշաբթի',
+'wednesday'     => 'Չորեքշաբթի',
+'thursday'      => 'Հինգշաբթի',
+'friday'        => 'Ուրբաթ',
+'saturday'      => 'Շաբաթ',
+'sun'           => 'Կիր',
+'mon'           => 'Երկ',
+'tue'           => 'Երեք',
+'wed'           => 'Չոր',
+'thu'           => 'Հինգ',
+'fri'           => 'Ուրբ',
+'sat'           => 'Շաբ',
+'january'       => 'Հունվար',
+'february'      => 'Փետրվար',
+'march'         => 'Մարտ',
+'april'         => 'Ապրիլ',
+'may_long'      => 'Մայիս',
+'june'          => 'Հունիս',
+'july'          => 'Հուլիս',
+'august'        => 'Օգոստոս',
+'september'     => 'Սեպտեմբեր',
+'october'       => 'Հոկտեմբեր',
+'november'      => 'Նոյեմբեր',
+'december'      => 'Դեկտեմբեր',
+'january-gen'   => 'Հունվարի',
+'february-gen'  => 'Փետրվարի',
+'march-gen'     => 'Մարտի',
+'april-gen'     => 'Ապրիլի',
+'may-gen'       => 'Մայիսի',
+'june-gen'      => 'Հունիսի',
+'july-gen'      => 'Հուլիսի',
+'august-gen'    => 'Օգոստոսի',
+'september-gen' => 'Սեպտեմբերի',
+'october-gen'   => 'Հոկտեմբերի',
+'november-gen'  => 'Նոյեմբերի',
+'december-gen'  => 'Դեկտեմբերի',
+'jan'           => 'հունվ',
+'feb'           => 'փետ',
+'mar'           => 'մարտ',
+'apr'           => 'ապր',
+'may'           => 'մայիս',
+'jun'           => 'հուն',
+'jul'           => 'հուլ',
+'aug'           => 'օգոս',
+'sep'           => 'սեպ',
+'oct'           => 'հոկ',
+'nov'           => 'նոյ',
+'dec'           => 'դեկ',
+
+# Bits of text used by many pages
+'categories'            => 'Հոդվածների կատեգորիաներ',
+'pagecategories'        => '{{PLURAL:$1|Կատեգորիա|Կատեգորիաներ}}',
+'category_header'       => '"$1" կատեգորիայի հոդվածները',
+'subcategories'         => 'Ենթակատեգորիաներ',
+'category-media-header' => '"$1" կատեգորիայի մեդիան:',
+
+'linkprefix'        => '/^(.*?)([a-zA-Z\x80-\xff]+)$/sD',
+'mainpagetext'      => "<big>'''MediaWiki-ն բարեհաջող ձայնագրվել է։'''</big>",
+'mainpagedocfooter' => "Տեսեք [http://meta.wikimedia.org/wiki/Help:Contents User's Guide]-ը՝ վիքի ծրագրային ապահովման մասին տեղեկություն ստանալու համար։
+
+== Որոշ ռեսուրսներ ==
+
+* [http://www.mediawiki.org/wiki/Help:Configuration_settings Configuration settings list]
+* [http://www.mediawiki.org/wiki/Help:FAQ MediaWiki FAQ]
+* [http://mail.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]",
+
+'about'          => 'Նկարագրությունը',
+'article'        => 'Հոդված',
+'newwindow'      => '(բացվելու է նոր պատուհանի մեջ)',
+'cancel'         => 'Բեկանել',
+'qbfind'         => 'Գտնել',
+'qbbrowse'       => 'Թերթել',
+'qbedit'         => 'Խմբագրել',
+'qbpageoptions'  => 'Այս էջը',
+'qbpageinfo'     => 'Տվյալներ հոդվածի մասին',
+'qbmyoptions'    => 'Իմ էջերը',
+'qbspecialpages' => 'Սպասարկող էջերը',
+'moredotdotdot'  => 'Ավելին...',
+'mypage'         => 'Իմ էջը',
+'mytalk'         => 'Իմ քննարկումները',
+'anontalk'       => 'Կարծիք հայտնեք այս IP-ի մասին։',
+'navigation'     => 'Շրջել կայքում',
+
+# Metadata in edit box
+'metadata_help' => 'Մեթատվյալներ (բացատրության համար տես՝ [[{{ns:project}}:Մեթատվյալներ]])։',
+
+'errorpagetitle'    => 'Սխալ',
+'returnto'          => 'Վերադարնալ $1:',
+'tagline'           => '{{grammar:genitive|{{SITENAME}}}} հոդված։',
+'help'              => 'Օգնություն',
+'search'            => 'Որոնել',
+'searchbutton'      => 'Որոնել',
+'go'                => 'Անցնել',
+'searcharticle'     => 'Անցնել',
+'history'           => 'Էջի պատմությունը',
+'history_short'     => 'Պատմությունը',
+'updatedmarker'     => 'Թարմացվել է իմ վերջին հաճախումից',
+'info_short'        => 'Տեղեկություն',
+'printableversion'  => 'Տպելու տարբերակ',
+'permalink'         => 'Մշտական հղում',
+'print'             => 'Տպել',
+'edit'              => 'Խմբագրել',
+'editthispage'      => 'Խմբագրել այս էջը',
+'delete'            => 'Ջնջել',
+'deletethispage'    => 'Ջնջել այս էջը',
+'undelete_short'    => 'Վերականգնել {{PLURAL:$1|մեկ խմբագրում|$1 խմբագրումներ}}',
+'protect'           => 'Պաշտպանել',
+'protectthispage'   => 'Պաշտպանել այս էջը',
+'unprotect'         => 'Հանել պաշտպանությունից',
+'unprotectthispage' => 'Հանել այս էջը պաշտպանությունից',
+'newpage'           => 'Նոր էջ',
+'talkpage'          => 'Քննարկել այս էջը',
+'specialpage'       => 'Սպասարկող էջ',
+'personaltools'     => 'Անձնական գործիքներ',
+'postcomment'       => 'Մեկնաբանել',
+'articlepage'       => 'Տեսնել բովանդակության էջը',
+'talk'              => 'Քննարկում',
+'views'             => 'Դիտումները',
+'toolbox'           => 'Գործիքներ',
+'userpage'          => 'Դիտել մասնակցի էջը',
+'projectpage'       => 'Դիտել նախագծի էջը',
+'imagepage'         => 'Դիտել պատկերի էջը',
+'mediawikipage'     => 'Դիտել հաղորդագրության էջը',
+'templatepage'      => 'Դիտել կաղապարի էջը',
+'viewhelppage'      => 'Դիտել օգնության էջը',
+'categorypage'      => 'Դիտել կատեգորիաների էջը',
+'viewtalkpage'      => 'Դիտել քննարկումը',
+'otherlanguages'    => 'Այլ լեզուներով',
+'redirectedfrom'    => '(Վերահղված է $1-ից)',
+'redirectpagesub'   => 'Վերահղող էջը',
+'lastmodifiedat'    => 'Այս էջը վերջին անգամ փոփոխվել է  $2, $1։', # $1 date, $2 time
+'viewcount'         => 'Այս էջին դիմել են {{plural:$1|մեկ անգամ|$1 անգամ}}։',
+'protectedpage'     => 'Պաշտպանված էջ',
+'jumpto'            => 'Անցնել՝',
+'jumptosearch'      => 'որոնում',
+
+# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
+'aboutsite'         => '{{grammar:genitive|{{SITENAME}}}} մասին',
+'aboutpage'         => '{{ns:project}}:Նկարագրություն',
+'bugreports'        => 'Սխալների զգուշացում',
+'bugreportspage'    => '{{ns:project}}Սխալների զգուշացում',
+'copyright'         => 'Կայքի բովանդակությունը գտնվում է $1 լիցենզիայի տակ։',
+'copyrightpagename' => '{{SITENAME}} հեղինակային իրավունքները',
+'currentevents'     => 'Ընթացիկ իրադարձություններ',
+'currentevents-url' => 'Ընթացիկ իրադարձություններ',
+'disclaimers'       => 'Ազատում պատասխանատվությունից',
+'edithelp'          => 'Խմբագրման ուղեցույց',
+'edithelppage'      => '{{ns:project}}:Խմբագրական խորհուրդներ',
+'faq'               => 'ՀՏՀ',
+'faqpage'           => '{{ns:project}}:ՀՏՀ',
+'helppage'          => '{{ns:project}}:Օգնություն',
+'mainpage'          => 'Գլխավոր Էջ',
+'portal'            => 'Խորհրդարան',
+'portal-url'        => '{{ns:project}}:Խորհրդարան',
+'sitesupport'       => 'Դրամական նվիրատվություն',
+'sitesupport-url'   => '{{ns:project}}:Դրամական նվիրատվություն',
+
+'badaccess'        => 'Թուլատրման սխալ',
+'badaccess-group0' => 'Ձեզ չի թույլատրվում կատարել տվյալ գործողությունը:',
+'badaccess-group1' => 'Ձեր պահանջած գործողությունը սահմանափակ է $1 խմբի օգտագործողների համար:',
+'badaccess-group2' => 'Ձեր պահանջած գործողությունը սահմանափակ է $1 խմբերից մեկի օգտագործողների համար:',
+'badaccess-groups' => 'Ձեր պահանջած գործողությունը սահմանափակ է $1 խմբերից մեկի օգտագործողների համար:',
+
+'newmessageslink' => 'նոր ուղերձներ',
+'editsection'     => 'խմբագրել',
+'showtoc'         => 'ցույց տալ',
+'hidetoc'         => 'Ցույց տալ',
+'thisisdeleted'   => 'Դիտե՞լ, թե՞ վերականգնել $1։',
+
+# Short words for each namespace, by default used in the 'article' tab in monobook
+'nstab-main'      => 'Հոդված',
+'nstab-user'      => 'Մասնակցի անձնական էջ',
+'nstab-media'     => 'Մեդիա էջ',
+'nstab-special'   => 'Սպասարկող էջ',
+'nstab-project'   => 'Նախագծի էջ',
+'nstab-image'     => 'Ֆայլ',
+'nstab-mediawiki' => 'Ուղերձ',
+'nstab-template'  => 'Կաղապար',
+'nstab-help'      => 'Օգնության էջ',
+'nstab-category'  => 'Կատեգորիա',
+
+# Main script and global functions
+'nosuchaction'      => 'Նման գործողություն չկա։',
+'nosuchspecialpage' => 'Նման սպասարկող էջ չկա։',
+
+# General errors
+'error'           => 'Սխալ',
+'databaseerror'   => 'Տվյալների հենքի սխալ',
+'cachederror'     => 'Տվյալ նյութը ձեր հարցումին համապատասխանող էջի հին, թաքցված օրինակներից  է, և  կարող է  տարբերվել ներկա էջից։',
+'internalerror'   => 'Ներքին սխալ',
+'filerenameerror' => 'Չկարողացա  "$1" ֆայլի անունը փոխել "$2"-ի։',
+'filenotfound'    => 'Չկարողացա գտնել "$1" ֆայլը։',
+'badarticleerror' => 'Տվյալ  գործողությունը չի կարող կատարվել այս էջում։',
+'cannotdelete'    => 'Չեմ կարող ջնջել ընտրված էջը կամ պատկերը։ (Հնարավոր է, որ այն արդեն ջնջվել է ուրիշ մեկի կողմից։)',
+'badtitle'        => 'Վերնագիրը սխալ է։',
+'badtitletext'    => 'Հարցված էջի անվանումը անկատար է, դատարկ կամ սխալ է կապակցված հայերեն լեզվով գրված կամ հայկական վիքիում եղած վերնագրի հետ։',
+
+# Login and logout pages
+'logouttitle'                => 'Մասնակցի ելք',
+'logouttext'                 => '<strong>Դուք դուրս եք եկել համակարգից։</strong><br />
+Դուք կարող եք շարունակել օգտագործել {{SITENAME}} կայքը անանուն, կամ դուք կարող եք կրկին մուտք գործել համակարգ,
+որպես նույն մասնակից, կամ, որպես մեկ այլ մասնակից։ Նկատի ունեցեք, որ որոշ էջեր դեռ ցույց կտան, որ դուք համակարգի մեջ եք, մինչև որ չջնջեք ձեր բրաուզերի քէշը։',
+'welcomecreation'            => '== Բարի գալուստ, $1 ==
+
+Ձեր հաշիվը ստեղծված է։ Չմոռանաք փոփոխել ձեր [[{{ns:special}}:Նախընտրությունները|նախընտրությունները]]։',
+'loginpagetitle'             => 'Մասնակցի գրանցում',
+'yourname'                   => 'Ձեր անունը(այն անունը, որով ուզում եք գրանցվել որպես մասնակից)',
+'yourpassword'               => 'Ձեր գաղտնաբառը',
+'yourpasswordagain'          => 'Կրկնեք գաղտնաբառը',
+'remembermypassword'         => 'Հիշել իմ մուտքագրված տվյալները',
+'loginproblem'               => '<b>Ձեր գրանցման ժամանակ անորոշ խնդիր է ծագել։</b><br /> Փորձեք կրկին։',
+'alreadyloggedin'            => '<font color=red><b>Մասնակից  $1, դուք արդեն գրանցված եք համակարգի մեջ։</b></font><br />',
+'login'                      => 'Գրանցվել',
+'loginprompt'                => 'Ձեր քուքիները պետք է միացված լինեն՝ {{SITENAME}} մուտք գործելու համար։',
+'userlogin'                  => 'Ստեղծել հաշիվ կամ մուտք գործել համակարգ',
+'logout'                     => 'Դուրս գալ',
+'userlogout'                 => 'Դուրս գալ',
+'notloggedin'                => 'Դուք մուտք չեք գործել համակարգ',
+'nologin'                    => 'Դեռևս չե՞ք գրանցվել։ $1։',
+'nologinlink'                => 'Ստեղծել հաշիվ',
+'createaccount'              => 'Ստեղծել նոր մասնակցային հաշիվ',
+'gotaccount'                 => 'Դուք արդեն գրանցվա՞ծ եք։ $1։',
+'gotaccountlink'             => 'Մուտք գործել',
+'createaccountmail'          => 'էմակով',
+'badretype'                  => 'Ձեր գրած նշանաբառերը չեն համընկնում։',
+'userexists'                 => 'Այս անունը արդեն զբաղված է։ Խնդրում ենք ընտրել մեկ ուրիշը։',
+'youremail'                  => 'Ձեր էլ-փոստի հասցեն*',
+'username'                   => 'Գրանցման անունը՝',
+'uid'                        => 'Մասնակցի իդենտիֆիկատորը՝',
+'yourrealname'               => 'Ձեր իրական անունը*',
+'yourlanguage'               => 'Ինտերֆեյսի լեզուն',
+'yourvariant'                => 'Լեզվական տարբերակ',
+'yournick'                   => 'Ձեր կեղծանունը (ստորագրությունների համար)',
+'badsig'                     => 'Սխալ "raw" ստորագրություն, ստուգեք HTML թեգերը:',
+'email'                      => 'Էլ-փոստ',
+'loginerror'                 => 'Գրանցման ժամանակ սխալ է եղել',
+'loginsuccesstitle'          => 'Բարեհաջող մուտք',
+'loginsuccess'               => "'''Դուք մուտք գործեցիք {{SITENAME}}, որպես \"\$1\"։'''",
+'wrongpassword'              => 'Ձեր գրած գաղտնաբառը սխալ է։ Խնդրում ենք կրկին փորձել։',
+'wrongpasswordempty'         => 'Ձեր գրած գաղտնաբառը դատարկ է։ Խնդրում ենք կրկին փորձել։',
+'noemail'                    => '"$1" մասնակցի անունով գրանցված  է-մակ հասցե չկա։',
+'blocked-mailpassword'       => 'Ձեր IP-ն արգելափակված է խմբագրման համար, հետևաբար նաև արգելված է նշանաբառ վերականգնող ֆունկցիան կատարելը:',
+'acct_creation_throttle_hit' => 'Ներեցեք, դուք արդեն ստեղծել եք $1 մասնակցային հաշիվ։ Չեք կարող ավելին ստեղծել։',
+'accountcreated'             => 'Հաշիվը ստեղծված է',
+'accountcreatedtext'         => 'Օգտագործողի հաշիվը $1-ի համար, ստեղծված է:',
+
+# Edit page toolbar
+'bold_sample'     => 'Թավատառ տեքստ',
+'bold_tip'        => 'Թավատառ տեքստ',
+'italic_sample'   => 'Շեղատառ տեքստ',
+'italic_tip'      => 'Շեղատառ տեքստ',
+'link_sample'     => 'Կապ տալ վերնագրին',
+'link_tip'        => 'Ներքին կապ',
+'extlink_sample'  => 'http://www.example.com հղում վերնագիր',
+'extlink_tip'     => 'Արտաքին հղում (հիշեք http:// նախածանցը)',
+'headline_sample' => 'Ենթագլուխ',
+'headline_tip'    => 'Ենթագլուխ',
+'math_sample'     => 'Գրեք բանաձևը այստեղ',
+'math_tip'        => 'Մաթեմատիկական բանաձև (LaTeX)',
+'nowiki_sample'   => 'Գրեք առանց ձևումի տեքստը այստեղ',
+'nowiki_tip'      => 'Անտեսել Վիքի ձևումը',
+'image_tip'       => 'Ներառված պատկեր',
+'media_tip'       => 'Հղում Մեդիա Ֆայլին',
+'sig_tip'         => 'Ձեր ստորագրությունը ամսաթվով',
+'hr_tip'          => 'Հորիզոնական գիծ (միայն անհրաժեշտության դեպքում)',
+
+# Edit pages
+'summary'               => 'Ամփոփումը՝',
+'subject'               => 'Վերնագիր',
+'minoredit'             => 'Սա չնչին ուղղում է',
+'watchthis'             => 'Հսկել այս էջը',
+'savearticle'           => 'Հիշել էջը',
+'showpreview'           => 'Նախադիտել',
+'showdiff'              => 'Ցույց տալ փոփոխությունները',
+'anoneditwarning'       => 'Դուք գրանցված չեք։ Ձեր IP հասցեն կգրանցվի այս էջի խմբագրումների պատմության մեջ։',
+'blockedtitle'          => 'Մասնակցի մուտքը արգելափակված է։',
+'blockedtext'           => 'Որպես մասնակից ձեր անունը կամ  IP հասցեն արգելափակվել է  $1-ի կողմից։
+Պատճառը սա է` <br />\'\'$2\'\'<p> Դուք կարող եք կապվել  $1-ի  կամ մեկ ուրիշ ադմինիստրատորի հետ, տես`[[{{ns:project}}:Administrators|Ադմինիստրատորներ]] ձեր մուտքի արգելափակման հարցը քննարկելու համար։
+
+Դուք չեք կարող օգտվել` "է-մակ ուղարկել այս մասնակցին" հնարավորությունից, քանի դեռ ինքներդ գործող է-մակ հասցե չէք գրանցել ձեր [[{{ns:special}}:Preferences|Մասնակցի նախընտրությունները]] էջում։
+
+Ձեր IP հասցեն սա է` $3, իսկ արգելափակման իդենտիֆիկատորը՝ $5։ Խնդրում ենք ձեր բոլոր հարցումներում  նշել  այս հասցեն։',
+'blockedoriginalsource' => "'''$1'''-ի հիմքը ցույց է տրված ներքևում:",
+'blockededitsource'     => "'''ձեր խմբագրումներ'''-ից '''$1'''-ի տեքստը հետևյալն է:",
+'whitelistacctitle'     => 'Ձեզ չի թույլատրվում անձնական հաշիվ ստեղծել',
+'accmailtitle'          => 'Նշանաբառն ուղարկված է։',
+'accmailtext'           => "'$1'-ի նշանաբառը ուղարկվել է $2-ին:",
+'newarticle'            => '(Նոր)',
+'anontalkpagetext'      => "----''Տվյալ  քննարկման էջը պատկանում է դեռևս գրանցման հաշիվ չունեցող կամ գրանցումից չօգտվող  մասնակցի։Այդ իսկ պատճառով օգտագործվում է  մասնկացի թվային հասցեն [[IP address]] նրան/ներան  ճանաչելու համար։ Նման IP հասցեից կարող են օգտվել մի քանի մասնակիցներ։ Եթե դուք անանուն մասնակից եք, բայց կարծում եք, որ ուրիշներին վերաբերող դիտողությունները  արվում են ձեր հասցեով, ապա խնդրում ենք պարզապես գրանցվել [[{{ns:special}}:Userlogin|այստեղ]], որպեսզի հետագայում ձեզ չշփոթեն  այլ մասնակիցների հետ և ձեզ չվերագրեն նրանց արած գործողությունները։''",
+'noarticletext'         => '(Ներկայումս այս էջում որևէ տեքստ չկա)',
+'yourtext'              => 'Ձեր տեքստը',
+'yourdiff'              => 'Տարբերությունները',
+'copyrightwarning'      => 'Խնդրում ենք նկատի ունենալ, որ {{SITENAME}} արված բոլոր ներդրումները հանդես են գալու "$2" լիցենզիայի տակ (տես` $1 մանրամասնության համար): Եթե դուք չեք ցանկանում, որ ձեր նյութը խմբագրվի և անվճար բաժանվի, ապա մի՛ ներմուծեք այն այստեղ:<br /> Դուք նաև խոստանում եք մեզ, որ գրել եք նյութը ինքներդ կամ վերցրել եք այն անվճար աղբյուրներից: <strong>Չ՛ՀՐԱՏԱՐԱԿԵՔ ԱՐՏՈՆԱԳՐՎԱԾ ԱՇԽԱՏԱՆՔՆԵՐ ԱՌԱՆՑ ԹՈՒՅԼԱՏՐՈՒԹՅԱՆ:</strong>',
+'copyrightwarning2'     => 'Խնդրում ենք նկատի ունենալ, որ {{SITENAME}} արված բոլոր ներդրումները կարող են խմբագրվել, վերամշակվել կամ ջնջվել ուրիշ օգտագործողների կողմից: Եթե դուք չեք ցանկանում, որ ձեր նյութը խմբագրվի և անվճար բաժանվի, ապա մի՛ ներմուծեք այն այստեղ:<br /> Դուք նաև խոստանում եք մեզ, որ գրել եք նյութը ինքներդ կամ վերցրել եք այն անվճար աղբյուրներից (տես` $1 մանրամասնությունների համար): <strong>Չ՛ՀՐԱՏԱՐԱԿԵՔ ԱՐՏՈՆԱԳՐՎԱԾ ԱՇԽԱՏԱՆՔՆԵՐ ԱՌԱՆՑ ԹՈՒՅԼԱՏՐՈՒԹՅԱՆ:</strong>',
+'protectedpagewarning'  => '<strong>ԶԳՈՒՇԱՑՈՒՄ. Այս էջը կարող են խմբագրել միայն ՍիսՕպ իրավունքներ ունեցող անձիք: Ճշտեք, թե արդյո՞ք դուք գործում եք [[{{ns:project}}:պաշտպանված_էջերի_մասին_օրենք|պաշտպանված էջերի մասին օրենքի]] շրջանակներում:</strong>',
+
+# Account creation failure
+'cantcreateaccounttitle' => 'Հաշվի բացումը չի իրականացել',
+'cantcreateaccounttext'  => 'Այս`(<b>$1</b>) IP հասցեից հաշվի բացումն արգելված է: Գործողությունը կիրառվում է ձեր դպրոցից կամ ինտերնետ ակումբից վանդալիզմը կանխելու նպատակով:',
+
+# History pages
+'revhistory'          => 'Վերանայման պատմություն',
+'viewpagelogs'        => 'Դիտել այս էջի տեղեկամատյանը',
+'nohistory'           => 'Այս էջում խմբագրումների պատմություն չկա։',
+'loadhist'            => 'Լցնում եմ էջի պատմությունը',
+'currentrev'          => 'Ընթացիկ խմբագրում',
+'revisionasof'        => '$1-ի տարբերակ',
+'currentrevisionlink' => 'տեսնել ընթացիկ խմբագրումները',
+'next'                => 'հաջորդ',
+'last'                => 'վերջինը',
+'histfirst'           => 'Առաջինը',
+'histlast'            => 'Վերջինը',
+
+# Diffs
+'difference'              => '(Խմբագրումների միջև եղած տարբերությունները)',
+'lineno'                  => 'Տող  $1.',
+'editcurrent'             => 'Խմբագրել այս էջի ներկա տարբերակը',
+'compareselectedversions' => 'Համեմատել ընտրված տարբերակները',
+
+# Search results
+'searchresults'     => 'Որոնումի արդյունքները',
+'searchresulttext'  => '{{SITENAME}}յի որոնման ինֆորմացիայի համար, տես [[Պրոյեկտ:Որոնում|{{SITENAME}}յի որոնում]] էջը:',
+'badquery'          => 'Որոնումի հարցը սխալ է ձևակերպվել։',
+'badquerytext'      => 'Մենք չկարողացանք գտնել ձեր հարցումի պատասխանը։ 
+Սա կարող է լինել մի քանի պատճառներով. կամ դուք փորձել եք գտնել մի բառ, որը երեքից քիչ  տառ է պարունակում, կամ բառի մասին համապատասխան հոդված առայժմ չկա։ Հնարավոր է նաև, որ սխալ եք հավաքել արտահայտությունը, օրինակ "չափ ու  ու  քանակի միավորներ"։ Խնդրում ենք այլ կերպ ձևակերպել հարցը, կամ փորձել հարցնել այլ  բառի մասին։',
+'prevn'             => 'նախորդ $1',
+'nextn'             => 'հաջորդ $1',
+'viewprevnext'      => 'Դիտել ($1) ($2) ($3):',
+'showingresults'    => 'Ստորև բերված են <b>$1</b> արդյունքներ` սկսած #<b>$2</b>-ից:',
+'showingresultsnum' => 'Ստորև բերված են <b>$3</b> արդյունքներ` սկսած #<b>$2</b>-ից:',
+'blanknamespace'    => '(Գլխավոր)',
+
+# Preferences page
+'preferences'              => 'Նախընտրությունները',
+'mypreferences'            => 'Իմ նախընտրությունները',
+'qbsettings-none'          => 'Թաքցնել',
+'qbsettings-fixedleft'     => 'Ձախից անշարժ',
+'qbsettings-fixedright'    => 'Աջից անշարժ',
+'qbsettings-floatingleft'  => 'Ձախից լողացող',
+'qbsettings-floatingright' => 'Աջից լողացող',
+'changepassword'           => 'Փոխել նշանաբառը',
+'skin'                     => 'Տեսք',
+'saveprefs'                => 'Հիշել',
+'resetprefs'               => 'Անտեսել փոփոխությունները',
+'newpassword'              => 'Նոր նշանաբառը',
+'retypenew'                => 'Հաստատեք նոր գաղտնաբառը`',
+'rows'                     => 'Տողերի քանակը`',
+'columns'                  => 'Սյունակներ',
+'searchresultshead'        => 'Որոնել',
+'recentchangescount'       => 'Վերնագրերի քանակը վերջին փոփոխություններում`',
+'savedprefs'               => 'Ձեր հարմարությունները մտապահված են:',
+'allowemail'               => 'Ցույց տալ էլ. փոստի հասցեն ուրիշ մասնակիցներին',
+
+# Recent changes
+'recentchanges'     => 'Վերջին փոփոխությունները',
+'recentchangestext' => 'Հետևեք վիքիում արված վերջին փոփոխությունները այս էջում:',
+'rcnote'            => 'Ստորև բերված են վերջին <strong>$1</strong> փոփոխությունները վերջին <strong>$2</strong> {{plural:$2|օրվա|օրերի}} ընթացքում, $3-ի դրությամբ։',
+'rclistfrom'        => 'Ցույց տալ նոր փոփոխությունները սկսած $1',
+'rclinks'           => 'Ցույց տալ վերջին $1 փոփոխությունները վերջին $2 օրվա ընթացքում<br />$3',
+'diff'              => 'տարբ.',
+'hist'              => 'պատմ',
+'newpageletter'     => 'Ն',
+'boteditletter'     => 'բ',
+
+# Recent changes linked
+'recentchangeslinked' => 'Կապված էջերի փոփոխություններ',
+
+# Upload
+'upload'         => 'Բեռնել ֆայլ',
+'uploadbtn'      => 'Ավելացնել ֆայլը',
+'filename'       => 'Ֆայլի անունը',
+'filedesc'       => 'Ամփոփում',
+'filestatus'     => 'Հեղինակային իրավունքի կարգավիճակ',
+'filesource'     => 'Աղբյուրը',
+'ignorewarning'  => 'Անտեսել զգուշացումը և պահպանել ֆայլը ամեն դեպքում։',
+'badfilename'    => 'Պատկերի անունը փոխվել է` "$1"։',
+'savefile'       => 'Հիշել ֆայլը',
+'sourcefilename' => 'Սկզբնական ֆայլի անունը',
+
+# Image list
+'imagelist'           => 'Նկարների ցանկ',
+'ilsubmit'            => 'Որոնել',
+'showlast'            => 'Ցույց տալ վերջին $1 ֆայլերը, դասավորված $2:',
+'byname'              => 'ըստ անվանումի',
+'bydate'              => 'ըստ ամսաթվի',
+'bysize'              => 'ըստ չափի',
+'revertimg'           => 'վերականգնել',
+'deleteimgcompletely' => 'Ջնջել բոլոր փոփոխությունները',
+'linkstoimage'        => 'Հետևյալ էջերը կապ ունեն տվյալ պատկերի հետ.',
+'nolinkstoimage'      => 'Այս պատկերի հետ ընդհանուր կապ ունեցող ոչ մի էջ չկա։',
+
+# MIME search
+'mimesearch' => 'Որոնում MIME-ով',
+
+# List redirects
+'listredirects' => 'Ցույց տալ վերահղումները',
+
+# Unused templates
+'unusedtemplates' => 'Չօգտագործվող կաղապարները',
+
+# Random redirect
+'randomredirect' => 'Պատահական վերահղում',
+
+# Statistics
+'statistics' => 'Վիճակագրություն',
+'sitestats'  => 'Կայքի վիճակագրությունը',
+
+'disambiguations'     => 'Երկիմաստ էջեր',
+'disambiguationspage' => "Ադմիններ, խնդրում ենք պահպանել այս էջը իր հակասող շաբլոններով և բոլոր վերահղումներով:
+
+Այս ցանկը կիրառվում է [[{{ns:special}}:Disambiguations]]-ի կողմից, բոլոր դեպի հակասող շաբլոններ վերահղումներ պարունակող հոդվածները ցույց տալու համար: Տվյալ ցանկը պգտագործվում է նաև տարբեր համաարգչային ծագում ունեցող վերահսկողների (bots) կողմից:
+
+<small>Նշում. Այս էջը կարող է թարգմանվել և վերախմբագրվել: Բոլոր հղումները դեպի '''<nowiki>[[template:...]]</nowiki>''' կնայվեն ինչպես հղումներ դեպի հակասող շաբլոններ:</small>
+
+* [[Template:Disambig]]",
+
+'doubleredirects' => 'Կրկնակի վերահղումները',
+
+'brokenredirects'         => 'Կոտրված վերահղումներ',
+'brokenredirects-summary' => 'Կոտրված վերահղումներ` հակիրճ',
+'brokenredirectstext'     => 'Հետևյալ վերահղումները ուղղված են գոյություն չունեցող էջեր:',
+
+# Miscellaneous special pages
+'nbytes'                  => '$1 բայթ',
+'lonelypages'             => 'Միայնակ էջերը',
+'uncategorizedpages'      => 'Չդասակարգված էջեր',
+'uncategorizedcategories' => 'Չդասակարգված կատեգորիաներ',
+'uncategorizedimages'     => 'Ոչ կատեգորիզացված նկարները',
+'unusedcategories'        => 'Չօգտագործված կատեգորիաներ',
+'unusedimages'            => 'Չօգտագործված նկարներ',
+'wantedcategories'        => 'Անհրաժեշտ կատեգորիաներ',
+'wantedpages'             => 'Անհրաժեշտ էջեր',
+'mostlinked'              => 'Ամենաշատ հղումներով էջեր',
+'mostlinkedcategories'    => 'Շատ հղվող կատեգորիաները',
+'mostcategories'          => 'Ամենաշատ կատեգորիաներով էջեր',
+'mostimages'              => 'Ամենաշատ օգտագործվող նկարները',
+'mostrevisions'           => 'Ամենաշատ փոփոխվող էջեր',
+'allpages'                => 'Բոլոր էջերը',
+'prefixindex'             => 'Որոնում նախածանցով',
+'randompage'              => 'Պատահական էջ',
+'shortpages'              => 'Կարճ էջեր',
+'longpages'               => 'Երկար էջեր',
+'deadendpages'            => 'Հղում չպարունակող էջեր',
+'listusers'               => 'Մասնակիցների ցանկը',
+'specialpages'            => 'Սպասարկող էջեր',
+'spheading'               => 'Սպասարկող էջեր բոլոր մասնակիցների համար',
+'restrictedpheading'      => 'Արգելափակված սպասարկող էջեր',
+'rclsub'                  => '(to pages linked from "$1")',
+'newpages'                => 'Նոր էջեր',
+'ancientpages'            => 'Ամենահին էջերը',
+'intl'                    => 'Միջլեզվական լինքեր',
+'move'                    => 'Տեղափոխել',
+'movethispage'            => 'Տեղափոխել այս էջը',
+
+# Book sources
+'booksources' => 'Գրքային աղբյուրներ',
+
+'categoriespagetext' => 'Հայերեն վիքիում կան հետևյալ կատեգորիաները՝',
+'alphaindexline'     => '$1 -ից` $2',
+'version'            => 'Տարբերակ',
+
+# Special:Log
+'log'         => 'Տեղեկամատյան',
+'alllogstext' => 'Սա ներլցման (upload), ջնջումների , պաշտպանության, արգելափակման  (blocking) և  համակարգային օպերատորների (սիսոփների) գործողությունների  համախմբված ցանկն է։ Կարող եք նեղացնել դիտումի սահմանները` ընտրելով որևէ  ցանկի տեսակը, որևէ մասնակցի անունը կամ փոփոխության ենթարկված էջը։',
+
+# Special:Allpages
+'nextpage'          => 'Հաջորդ էջը ($1)',
+'allpagesfrom'      => 'Ցույց տալ էջերը, որոնք սկսվում են`',
+'allarticles'       => 'Բոլոր հոդվածները',
+'allinnamespace'    => 'Բոլոր էջերը ($1 անվանակարգ)',
+'allnotinnamespace' => 'Բոլոր էջերը (ոչ $1 անվանակարգում)',
+'allpagesprev'      => 'Նախորդը',
+'allpagesnext'      => 'Հաջորդը',
+'allpagessubmit'    => 'Սկսել',
+'allpagesprefix'    => 'Ցույց տալ հետևյալ նախածանցով էջերը`',
+'allpagesbadtitle'  => 'Տվյալ էջի անունը սխալ է, կամ պարունակում է միջ-լեզվային, կամ միջ-wiki նախածանց: Այն կարող է պարունակել մեկ կամ ավելի սիմվոլներ, որոնք չի կարելի օգտագործել անվանումների մեջ:',
+
+# E-mail user
+'emailuser'     => 'Է-մակ ուղարկել այս մասնակցին',
+'emailpage'     => 'Է-մակ ուղարկել մասնակցին',
+'emailfrom'     => 'Ումից',
+'emailto'       => 'Ում՝',
+'emailsubject'  => 'Ինչի մասին՝',
+'emailmessage'  => 'Ուղերձ',
+'emailsend'     => 'Ուղարկել',
+'emailsent'     => 'Է-մակը ուղարկված է',
+'emailsenttext' => 'Ձեր է-մակ ուղերձն ուղարկված է։',
+
+# Watchlist
+'watchlist'         => 'Իմ հսկողության ցանկը',
+'watchlistfor'      => "('''$1'''-ի համար)",
+'addedwatch'        => 'Ավելացված է վերահսկման ցանկին',
+'addedwatchtext'    => "\"\$1\" էջը ավելացվել է ձեր [[{{ns:special}}:Watchlist|վերահսկման ցանկին]]:
+
+Այս էջի և նրան կապված քննարկումների էջի հետագա փոփոխությունները  կգրանցվեն այդտեղ, և էջը կհայտնվի '''հաստ''' ֆոնտով [[{{ns:special}}:Recentchanges|վերջին փոփոխությունների]] ցուցակի մեջ:
+
+<p>Եթե դուք հետո ցանկանաք հանել էջը վերահսկման ցանկից, ապա սեղմեք \"Հանել վերահսկումից\" կոճակը:",
+'removedwatch'      => 'Հանված է վերահսկման ցանկից',
+'removedwatchtext'  => '"$1" էջը հանվել է ձեր վերահսկման ցանկից:',
+'watch'             => 'Հսկել',
+'watchthispage'     => 'Հսկել այս էջը',
+'unwatch'           => 'Հանել հսկումից',
+'watchdetails'      => '*  հսկվում {{PLURAL:$1|է $1 էջ|են $1 էջեր}}` չհաշված քննարկման էջերը
+* [[{{ns:special}}:Watchlist/edit|Ցուցադրել և խմբագրել հսկողության լրիվ ցանկը]]
+* [[{{ns:special}}:Watchlist/clear|Հանել բոլոր էջերը]]',
+'watchlistcontains' => 'Ձեր հսկողության ցանկում կա  $1 էջ։',
+'wlshowlast'        => 'Ցուցադրել վերջին $1 ժամերը $2 օրերը $3',
+
+# Delete/protect/revert
+'deletepage'           => 'Ջնջել էջը',
+'confirm'              => 'Հաստատել',
+'excontent'            => 'բովանդակությունը սա էր` «$1»',
+'exblank'              => 'էջը դատարկ էր',
+'confirmdelete'        => 'Հաստատել ջնջումը',
+'historywarning'       => 'Զգուշացում. այս էջը, որը դուք պատրաստվում եք ջնջել, պատմություն ունի։',
+'actioncomplete'       => 'Գործողությունը ավարտված  է',
+'deletedarticle'       => 'ջնջված է "$1"',
+'dellogpagetext'       => 'Ստորև կտեսնեք ամենավերջին ջնջումների ցանկը։',
+'deletecomment'        => 'Ջնջելու պատճառը',
+'cantrollback'         => 'Չեմ կարող վերականգնել նախորդ խմբագրման էջը։ Վերջին ուղղում կատարողը այս էջի հեղինակն է։',
+'alreadyrolled'        => 'Չեմ կարող վերականգնել [[User:$2|$2]]–ի վերջին ուղղումը [[$1]]-ի մեջ ([[User talk:$2|Talk]])։ Ինչ-որ մեկն արդեն վերականգնել է  այն կամ ուղղում է կատարել այդ էջում։ 
+Վերջին ուղղումն արվել է [[User:$3|$3]]-ի կողմից ([[User talk:$3|Talk]])։',
+'protectlogpage'       => 'Պաշտպանությունների_տեղեկամատյան',
+'protectlogtext'       => 'Ստորև բերված է պաշտպանված և պաշտպանությունից հանված էջերի ցանկը: Մանրամասնությունների համար, տես` [[Պրոյեկտ:Պաշտպանված էջ]]:',
+'protectsub'           => '("$1" էջի պաշտպանում)',
+'confirmprotecttext'   => 'Դուք իրո՞ք  ուզում եք պաշտպանել այս էջը։',
+'confirmprotect'       => 'Հաստատել պաշտպանությունը',
+'protectmoveonly'      => 'Պաշտպանել միայն տեղաշարժերից',
+'protectcomment'       => 'Պաշտպանման պատճառը',
+'confirmunprotecttext' => 'Դուք իրո՞ք ուզում եք պաշտպանությունից հանել այս էջը։',
+'confirmunprotect'     => 'Հաստատել պաշտպանությունից հանելը',
+'protect-text'         => 'Այստեղ դուք կարող եք տեսնել և փոխել [[$1]] էջի պաշտպանության աստիճանը: Խնդրում ենք համոզվեք, որ դուք գործում եք [[{{ns:project}}:Protected page|պրոյեկտի կանոնակարգի]] ներքո:',
+
+# Undelete
+'cannotundelete' => 'Հակաջնջումը չստացվեց, գուցե մեկ ուրիշն արդեն հակաջնջել է տվյալ էջը:',
+
+# Contributions
+'contributions' => 'Մասնակցի խմբագրումները',
+'mycontris'     => 'Իմ խմբագրումները',
+'contribsub2'    => '$1 ($2)-ի համար',
+
+# What links here
+'whatlinkshere' => 'Այստեղ հղվող էջերը',
+'linklistsub'   => '(Կապերի ցանկը)',
+'linkshere'     => "Հետևյալ էջերը հղում են '''[[:$1]]'''-ի վրա՝",
+'nolinkshere'   => "Ուրիշ էջերից '''[[:$1]]''' էջի վրա հղումներ չկան։",
+'isredirect'    => 'ռեդիրեքտ էջ',
+
+# Block/unblock
+'blockip'            => 'Արգելափակել մասնակցի մուտքը',
+'blockiptext'        => 'Օգտվելով ստորև զետեղված ձևից կարող եք արգելափակել որևէ  առնաձին  IP հասցեից կամ մասնակցի անունից գրելու հնարավորությունը։ 
+Նման բան կարելի է անել միայն վանդալիզմի կանխարգելման նպատակով և  համաձայն Ծրագրի 
+[[{{ns:project}}:Policy|Ներքին քաղաքականության]] պահանջների։Նշեք արգելափակելու պատճառը (օրինակ նշեք այն էջը, որտեղ վանդալիզմ է տեղի ունեցել)։',
+'ipaddress'          => 'IP հասցե/մասնակցի անուն',
+'ipbexpiry'          => 'Մարման ժամկետը',
+'ipbreason'          => 'Պատճառը',
+'ipbsubmit'          => 'Արգելափակել տվյալ մասնակցի մուտքը',
+'badipaddress'       => 'Սխալ  IP հասցե',
+'blockipsuccesssub'  => 'Արգելափակումը կատարված է',
+'blockipsuccesstext' => '"$1" -ի մուտքը արգելափակված է։
+<br />Տես` [[{{ns:special}}:Ipblocklist|Արգելափակված IP-ների ցանկ]] բոլոր արգելափակումներին  ծանոթանալու  համար։',
+'ipusubmit'          => 'Արգելափակումից հանել այս հասցեն',
+'ipblocklist'        => 'Արգելափակված IP հասցեների և մասնակիցների ցանկը',
+'blocklistline'      => '$1, $2 արգելափակել  է $3 (մինչև  $4)',
+'anononlyblock'      => 'միայն անանունները',
+'blocklink'          => 'արգելափակել',
+'contribslink'       => 'խմբագրումներ',
+'autoblocker'        => 'Արգելափակվել  է ինքն իրեն, որովհետև դուք  օգտվում եք  "$1"-ի  IP հասցեից։ Պատճառը սա է՝ "$2"։',
+'blocklogpage'       => 'Արգելափակումների_մատյան',
+'blocklogentry'      => 'արգելափակվել է  "$1"՝  արգելափակման դադարեցման  $2 ժամկետով',
+'blocklogtext'       => 'Սա մասնակիցների մուտքը արգելափակելու և արգելափակումից հանելու գործողությունների մատյանն է։Ինքն իրեն արգելափակվող IP հասցեներն այստեղ չեն նշվում։Տես` [[{{ns:special}}:Ipblocklist|IP արգելափակումների ցանկը]] ներկայումս գործող արգելափակումների և ժամանակավոր կասեցումների ցանկի հետ ծանոթանալու համար։',
+
+# Developer tools
+'lockdb'           => 'Փակել տվյալների բազան',
+'lockconfirm'      => 'Այո, ես իրոք ուզում եմ փակել տվյալների բազան։',
+'lockbtn'          => 'Փակել տվյալների բազան',
+'lockdbsuccesssub' => 'Տվյալների բազան փակված է',
+
+# Move page
+'movepage'        => 'Տեղափոխել էջը',
+'movepagebtn'     => 'Տեղափոխել էջը',
+'articleexists'   => 'Այս անվանումով էջ արդեն գոյություն ունի, կամ ձեր ընտրած անվանումը կիրառելի չէ։ Խնդրում ենք այլ անվանում ընտրել։',
+'movedto'         => 'տեղափոխված է`',
+'1movedto2'       => '[[$1]]-ից տեղափոխված է` [[$2]]',
+'1movedto2_redir' => '[[$1]] -ից տեղափոխված է [[$2]]` ռեդիրեքտով',
+
+# Export
+'export' => 'Արտահանել էջերը',
+
+# Namespace 8 related
+'allmessages'               => 'Բոլոր համակարգային ուղերձները',
+'allmessagesname'           => 'Անունը',
+'allmessagesdefault'        => 'Լռությամբ տեքստը',
+'allmessagescurrent'        => 'Տվյալ տեքստը',
+'allmessagestext'           => 'Սա ` MediaWiki: անվանական տողերում  առկա  բոլոր համակարգային ուղերձների ցանկն է։',
+'allmessagesnotsupportedUI' => 'Ձեր ընթացիկ ինտերֆեյսի լեզուն  <b>$1</b> չի  ընդունվում  այս կայքի {{ns:special}}:AllMessages համակարգի կողմից։',
+'allmessagesnotsupportedDB' => '{{ns:special}}:AllMessages չի գործում, որովհետև  wgUseDatabaseMessages միացրած չէ:',
+'allmessagesfilter'         => 'Ուղղերձների անվան ֆիլտր.',
+'allmessagesmodified'       => 'Ցույց տալ միայն փոփոխվածները',
+
+# Thumbnails
+'filemissing' => 'Նման ֆայլ չկա',
+
+# Special:Import
+'importnotext' => 'Դատարկ է կամ տեքստ չկա։',
+
+# Attribution
+'anonymous'        => '{{SITENAME}}յի անանուն մասնակից(ներ)',
+'lastmodifiedatby' => 'Այս էջը վերջին անգամ փոփոխվել է $2, $1 $3-ի կողմից:', # $1 date, $2 time, $3 user
+'and'              => 'և',
+
+# Spam protection
+'categoryarticlecount'   => 'Այս կատեգորիայում կա  $1 հոդված։',
+'category-media-count'   => 'Այս կատեգորիայում {{PLURAL:$1|կա մեկ ֆայլ|կան $1 ֆայլեր}}:',
+'listingcontinuesabbrev' => ' շարունակ.',
+
+# Image deletion
+'deletedrevision' => 'Ջնջված է հին տարբերակը $1։',
+
+'newimages' => 'Նոր ֆայլերի սրահ',
+'noimages'  => 'Տեսնելու բան չկա։',
+
+# 'all' in various places, this might be different for inflected languages
+'watchlistall1' => 'բոլորը',
+'watchlistall2' => 'բոլորը',
+
+# Delete conflict
+'deletedwhileediting' => 'Զգուշացում` Այս էջը ջնջվել է ձեր խմբագրման ընթացքում:',
+
+'articletitles' => "Հոդվածներ, որոնք սկսվում են ''$1''-ով:",
+
+# Table pager
+'ascending_abbrev' => 'աճմ. կարգ.',
+
+# Auto-summaries
+'autosumm-blank'   => 'Ջնջվում է էջի ամբողջ պարունակությունը',
+'autosumm-replace' => "Փոխվում է էջը '$1'-ով",
+'autoredircomment' => 'Վերահղվում է դեպի [[$1]]', # This should be changed to the new naming convention, but existed beforehand
+'autosumm-new'     => 'Նոր էջ. $1',
+
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesIa.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesIa.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesIa.php	(revision 1280)
@@ -0,0 +1,800 @@
+<?php
+/** Interlingua (Interlingua)
+ *
+ * @addtogroup Language
+ */
+$skinNames = array(
+	'cologneblue' => 'Blau Colonia',
+);
+
+$namespaceNames = array(
+	NS_MEDIA          => 'Media',
+	NS_SPECIAL        => 'Special',
+	NS_MAIN           => '',
+	NS_TALK           => 'Discussion',
+	NS_USER           => 'Usator',
+	NS_USER_TALK      => 'Discussion_Usator',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK   => 'Discussion_$1',
+	NS_IMAGE          => 'Imagine',
+	NS_IMAGE_TALK     => 'Discussion_Imagine',
+	NS_MEDIAWIKI      => 'MediaWiki',
+	NS_MEDIAWIKI_TALK => 'Discussion_MediaWiki',
+	NS_TEMPLATE       => 'Patrono',
+	NS_TEMPLATE_TALK  => 'Discussion_Patrono',
+	NS_HELP           => 'Adjuta',
+	NS_HELP_TALK      => 'Discussion_Adjuta',
+	NS_CATEGORY       => 'Categoria',
+	NS_CATEGORY_TALK  => 'Discussion_Categoria'
+);
+$linkTrail = "/^([a-z]+)(.*)\$/sD";
+
+
+$messages = array(
+
+# User Toggles
+#
+
+"tog-underline" => "Sublinear ligamines",
+"tog-highlightbroken" => "Formatar ligamines rupte <a href=\"\" class=\"new\">assi</a> (alternativemente: assi<a href=\"\" class=\"internal\">?</a>).",
+"tog-justify"	=> "Justificar paragraphos",
+"tog-hideminor" => "Occultar modificationes recente minor",
+"tog-usenewrc" => "Modificationes recente meliorate (non functiona in tote le navigatores)",
+"tog-numberheadings" => "Numerar titulos automaticamente",
+"tog-showtoolbar" => "Show edit toolbar",
+"tog-rememberpassword" => "Recordar contrasigno inter sessiones (usa cookies)",
+"tog-editwidth" => "Cassa de redaction occupa tote le largor del fenestra",
+"tog-editondblclick" => "Duple clic pro modificar un pagina (usa JavaScript)",
+"tog-watchdefault" => "Poner articulos nove e modificate sub observation",
+"tog-minordefault" => "Marcar modificationes initialmente como minor",
+"tog-previewontop" => "Monstrar previsualisation ante le cassa de edition e non post illo",
+
+# dates
+#
+
+'sunday' => 'dominica',
+'monday' => 'lunedi',
+'tuesday' => 'martedi',
+'wednesday' => 'mercuridi',
+'thursday' => 'jovedi',
+'friday' => 'venerdi',
+'saturday' => 'sabbato',
+'january' => 'januario',
+'february' => 'februario',
+'march' => 'martio',
+'april' => 'april',
+'may_long' => 'maio',
+'june' => 'junio',
+'july' => 'julio',
+'august' => 'augusto',
+'september' => 'septembre',
+'october' => 'octobre',
+'november' => 'novembre',
+'december' => 'decembre',
+'jan' => 'jan',
+'feb' => 'feb',
+'mar' => 'mar',
+'apr' => 'apr',
+'may' => 'mai',
+'jun' => 'jun',
+'jul' => 'jul',
+'aug' => 'aug',
+'sep' => 'sep',
+'oct' => 'oct',
+'nov' => 'nov',
+'dec' => 'dec',
+
+
+# Bits of text used by many pages:
+#
+"mainpage"		=> "Frontispicio",
+"about"			=> "A proposito",
+"aboutsite"      => "A proposito de {{SITENAME}}",
+"aboutpage"		=> "{{ns:project}}:A_proposito",
+"help"			=> "Adjuta",
+"helppage"		=> "{{ns:project}}:Adjuta",
+"bugreports"	=> "Reportos de disfunctiones",
+"bugreportspage" => "{{ns:project}}:Reportos_de_disfunctiones",
+"faq"			=> "Questiones frequente",
+"faqpage"		=> "{{ns:project}}:Questiones_frequente",
+"edithelp"		=> "Adjuta al edition",
+"edithelppage"	=> "{{ns:project}}:Como_editar_un_pagina",
+"cancel"		=> "Cancellar",
+"qbfind"		=> "Trovar",
+"qbbrowse"		=> "Foliar",
+"qbedit"		=> "Modificar",
+"qbpageoptions" => "Optiones de pagina",
+"qbpageinfo"	=> "Info del pagina",
+"qbmyoptions"	=> "Mi optiones",
+"mypage"		=> "Mi pagina",
+"mytalk"		=> "Mi discussion",
+"currentevents" => "Actualitates",
+"errorpagetitle" => "Error",
+"returnto"		=> "Retornar a $1.",
+"whatlinkshere"	=> "Referentias a iste pagina",
+"help"			=> "Adjuta",
+"search"		=> "Recercar",
+"searchbutton"	=> "Recercar",
+"go"		=> "Ir",
+'searcharticle'		=> "Ir",
+"history"		=> "Chronologia",
+"printableversion" => "Version imprimibile",
+"editthispage"	=> "Modificar iste pagina",
+"deletethispage" => "Eliminar iste pagina",
+"protectthispage" => "Proteger iste pagina",
+"unprotectthispage" => "Disproteger iste pagina",
+"newpage" => "Nove pagina",
+"talkpage"		=> "Discuter iste pagina",
+"articlepage"	=> "Vider article",
+"userpage" => "Vider pagina del usator",
+"projectpage" => "Vider metapagina",
+"imagepage" => 	"Vider pagina de imagine",
+"viewtalkpage" => "Vider discussion",
+"otherlanguages" => "Altere linguas",
+"redirectedfrom" => "(Redirigite de $1)",
+"lastmodifiedat"	=> "Ultime modification: $2, $1.",
+"viewcount"		=> "Iste pagina esseva accessate $1 vices.",
+"protectedpage" => "Pagina protegite",
+"nbytes"		=> "$1 bytes",
+"ok"			=> "OK",
+"retrievedfrom" => "Recuperate de \"$1\"",
+"newmessageslink" => "messages nove",
+
+# Main script and global functions
+#
+"nosuchaction"	=> "Action inexistente",
+"nosuchactiontext" => "Le action specificate in le URL non es
+recognoscite per le systema de Mediawiki.",
+"nosuchspecialpage" => "Pagina special inexistente",
+"nospecialpagetext" => "
+Tu demandava un pagina special que non es
+recognoscite per le systema de Mediawiki.",
+
+# General errors
+#
+"error"			=> "Error",
+"databaseerror" => "Error de base de datos",
+"dberrortext"	=> "Occurreva un error de syntaxe in le consulta al base de datos.
+Le ultime demanda inviate al base de datos esseva:
+<blockquote><tt>$1</tt></blockquote>
+de intra le function \"<tt>$2</tt>\".
+MySQL retornava le error \"<tt>$3: $4</tt>\".",
+"noconnect"		=> "Impossibile connecter al base de datos a $1",
+"nodb"			=> "Impossibile selectionar base de datos $1",
+"readonly"		=> "Base de datos blocate",
+"enterlockreason" => "Describe le motivo del blocage, includente un estimation
+de quando illo essera terminate",
+"readonlytext"	=> "Actualmente le base de datos de {{SITENAME}} es blocate pro nove
+entratas e altere modificationes, probabilemente pro mantenentia
+routinari del base de datos, post le qual illo retornara al normal.
+Le administrator responsabile dava iste explication:
+<p>$1",
+"missingarticle" => "Le base de datos non trovava le texto de un pagina
+que illo deberea haber trovate, a saper \"$1\".
+Isto non es un error de base de datos, mais probabilemente
+un disfunction in le systema.
+Per favor reporta iste occurrentia a un administrator,
+indicante le URL.",
+"internalerror" => "Error interne",
+"filecopyerror" => "Impossibile copiar file \"$1\" a \"$2\".",
+"filerenameerror" => "Impossibile renominar file \"$1\" a \"$2\".",
+"filedeleteerror" => "Impossibile eliminar file \"$1\".",
+"filenotfound"	=> "Impossibile trovar file \"$1\".",
+"unexpected"	=> "Valor impreviste: \"$1\"=\"$2\".",
+"formerror"		=> "Error: impossibile submitter formulario",
+"badarticleerror" => "Iste action non pote esser effectuate super iste pagina.",
+"cannotdelete"	=> "Impossibile eliminar le pagina o imagine specificate. (Illo pote ja haber essite eliminate per un altere persona.)",
+"badtitle"		=> "Titulo incorrecte",
+"badtitletext"	=> "Le titulo de pagina demandate esseva invalide, vacue, o
+un titulo interlinguistic o interwiki incorrectemente ligate.",
+"perfdisabled" => "Pardono! Iste functionalitate es temporarimente inactivate durante
+horas de grande affluentia de accessos pro motivo de performance;
+retorna inter 02:00 e 14:00 UTC e tenta de nove.",
+
+# Login and logout pages
+#
+"logouttitle"	=> "Fin de session",
+"logouttext"	=> "Tu claudeva tu session.
+Tu pote continuar a usar {{SITENAME}} anonymemente, o initiar un
+nove session como le mesme o como un altere usator.",
+
+"welcomecreation" => "<h2>Benvenite, $1!</h2>
+<p>Tu conto de usator esseva create.
+Non oblida personalisar {{SITENAME}} secundo tu preferentias.",
+
+"loginpagetitle" => "Aperir session",
+"yourname"		=> "Tu nomine de usator",
+"yourpassword"	=> "Tu contrasigno",
+"yourpasswordagain" => "Confirmar contrasigno",
+"remembermypassword" => "Recordar contrasigno inter sessiones.",
+"loginproblem"	=> "<b>Occurreva problemas pro initiar tu session.</b><br />Tenta de nove!",
+"alreadyloggedin" => "<strong>Usator $1, tu session ja es aperte!</strong><br />",
+
+"login"			=> "Aperir session",
+"userlogin"		=> "Aperir session",
+"logout"		=> "Clauder session",
+"userlogout"	=> "Clauder session",
+"createaccount"	=> "Crear nove conto",
+"badretype"		=> "Le duo contrasignos que tu scribeva non coincide.",
+"userexists"	=> "Le nomine de usator que tu selectionava ja es in uso. Per favor selectiona un nomine differente.",
+"youremail"		=> "Tu e-mail",
+"yournick"		=> "Tu pseudonymo (pro signaturas)",
+"loginerror"	=> "Error in le apertura del session",
+"noname"		=> "Tu non specificava un nomine de usator valide.",
+"loginsuccesstitle" => "Session aperte con successo",
+"loginsuccess"	=> "Tu es identificate in {{SITENAME}} como \"$1\".",
+"nosuchuser"	=> "Non existe usator registrate con le nomine \"$1\".
+Verifica le orthographia, o usa le formulario infra pro crear un nove conto de usator.",
+"wrongpassword"	=> "Le contrasigno que tu scribeva es incorrecte. Per favor tenta de nove.",
+"mailmypassword" => "Demandar un nove contrasigno via e-mail",
+"passwordremindertitle" => "Nove contrasigno in {{SITENAME}}",
+"passwordremindertext" => "Alcuno (probabilemente tu, con adresse de IP $1)
+
+demandava inviar te un nove contrasigno pro {{SITENAME}}.
+Le contrasigno pro le usator \"$2\" ora es \"$3\".
+Nos consilia que tu initia un session e cambia le contrasigno le plus tosto possibile.",
+"noemail"		=> "Non existe adresse de e-mail registrate pro le usator \"$1\".",
+"passwordsent"	=> "Un nove contrasigno esseva inviate al adresse de e-mail
+registrate pro \"$1\".
+Per favor initia un session post reciper lo.",
+
+# Edit pages
+#
+"summary"		=> "Summario",
+"minoredit"		=> "Iste es un modification minor",
+"watchthis"		=> "Poner iste articulo sub observation",
+"savearticle"	=> "Salvar articulo",
+"preview"		=> "Previsualisar",
+"showpreview"	=> "Monstrar previsualisation",
+"blockedtitle"	=> "Le usator es blocate",
+"blockedtext"	=> "Tu nomine de usator o adresse de IP ha essite blocate per $1.
+Le motivo presentate es iste:<br />''$2''<p>Tu pote contactar $1 o un del altere
+[[{{ns:project}}:administratores|administratores]] pro discuter le bloco.",
+"newarticle"	=> "(Nove)",
+"newarticletext" =>
+"Tu ha sequite un ligamine a un pagina que ancora non existe.
+Pro crear un nove pagina, comencia a scriber in le cassa infra.
+(Vide le [[{{ns:project}}:Adjuta|pagina de adjuta]] pro plus information.)
+Si tu es hic per error, simplemente clicca le button '''Retornar''' de tu navigator.",
+"anontalkpagetext" => "---- ''Iste es le pagina de discussion pro un usator anonyme qui ancora non ha create un conto o qui non lo usa. Consequentemente nos debe usar le [[adresse de IP]] numeric pro identificar le/la. Un tal adresse de IP pote esser usate in commun per varie personas. Si tu es un usator anonyme e senti que commentarios irrelevante ha essite dirigite a te, per favor [[Special:Userlogin|crea un conto o aperi un session]] pro evitar futur confusiones con altere usatores anonyme.''",
+"noarticletext" => "(Actualmente il non ha texto in iste pagina)",
+"updated"		=> "(Actualisate)",
+"note"			=> "<strong>Nota:</strong>",
+"previewnote"	=> "Rememora te que isto es solmente un previsualisation, tu modificationes ancora non ha essite salvate!",
+"previewconflict" => "Iste previsualisation reflecte le apparentia final del texto in le area de redaction superior
+si tu opta pro salvar lo.",
+"editing"		=> "Modification de $1",
+'editinguser'		=> "Modification de $1",
+"editconflict"	=> "Conflicto de edition: $1",
+"explainconflict" => "Alcuno ha modificate iste pagina post que tu
+ha comenciate a modificar lo.
+Le area de texto superior contine le texto del pagina tal como illo existe actualmente.
+Tu modificationes es monstrate in le area de texto inferior.
+Tu debera incorporar tu modificationes al texto existente.
+<b>Solmente</b> le texto del area superior essera salvate
+quando tu premera \"Salvar pagina\".<br />",
+"yourtext"		=> "Tu texto",
+"storedversion" => "Version immagazinate",
+"editingold"	=> "<strong>ADVERTIMENTO: In iste momento tu modifica
+un version obsolete de iste pagina.
+Si tu lo salvara, tote le modificationes facite post iste revision essera perdite.</strong>",
+"yourdiff"		=> "Differentias",
+/*"copyrightwarning" => "Nota que tote le contributiones a {{SITENAME}} es
+considerate public secundo le terminos del Licentia de Documentation Libere GNU
+(vide plus detalios in $1).
+Si tu non vole que tu scripto sia modificate impietosemente e redistribuite
+a voluntate, alora non lo edita hic.<br />
+Additionalmente, tu nos garanti que tu es le autor de tu contributiones,
+o que tu los ha copiate de un ressource libere de derectos.
+<strong>NON USA MATERIAL COPERITE PER DERECTOS DE AUTOR (COPYRIGHT) SIN AUTORISATION EXPRESSE!</strong>",*/
+"longpagewarning" => "ADVERTIMENTO: Iste pagina ha $1 kilobytes de longitude;
+alcun navigatores pote presentar problemas in editar
+paginas de approximatemente o plus de 32kb.
+Considera fragmentar le pagina in sectiones minor.",
+
+# History pages
+#
+"revhistory"	=> "Chronologia de versiones",
+"nohistory"		=> "Iste pagina non ha versiones precedente.",
+"revnotfound"	=> "Revision non trovate",
+"revnotfoundtext" => "Impossibile trovar le version anterior del pagina que tu ha demandate.
+Verifica le URL que tu ha usate pro accessar iste pagina.",
+"loadhist"		=> "Carga del chronologia del pagina",
+"currentrev"	=> "Revision currente",
+"revisionasof"	=> "Revision de $1",
+"cur"			=> "actu",
+"next"			=> "sequ",
+"last"			=> "prec",
+"orig"			=> "orig",
+"histlegend"	=> "Legenda: (actu) = differentia del version actual,
+(prec) = differentia con le version precedente, M = modification minor",
+
+# Diffs
+#
+"difference"	=> "(Differentia inter revisiones)",
+"loadingrev"	=> "carga del revision pro diff",
+"lineno"		=> "Linea $1:",
+"editcurrent"	=> "Modificar le version actual de iste pagina",
+
+# Search results
+#
+"searchresults" => "Resultatos del recerca",
+"searchresulttext" => "Pro plus information super le recerca de {{SITENAME}}, vide [[Project:Recerca|Recerca in {{SITENAME}}]].",
+"searchsubtitle"	=> "Pro le consulta \"[[:$1]]\"",
+"searchsubtitleinvalid"	=> "Pro le consulta \"$1\"",
+"badquery"		=> "Consulta de recerca mal formate",
+"badquerytext"	=> "Impossibile processar tu consulta.
+Probabilemente tu ha tentate recercar un parola con minus
+de tres litteras de longitude, situation que le systema non
+permitte. Es equalmente possibile que tu ha committite un
+error syntactic in le consulta, per exemplo,
+\"pisce and and squama\".
+Reformula tu consulta.",
+"matchtotals"	=> "Le consulta \"$1\" coincide con le titulos de $2 articulos
+e le texto de $3 articulos.",
+"noexactmatch" => "Non existe un pagina con iste titulo exacte, io recurre al recerca de texto integral.",
+"titlematches"	=> "Coincidentias con titulos de articulos",
+"notitlematches" => "Necun coincidentia",
+"textmatches"	=> "Coincidentias con textos de articulos",
+"notextmatches"	=> "Necun coincidentia",
+"prevn"			=> "$1 precedentes",
+"nextn"			=> "$1 sequentes",
+"viewprevnext"	=> "Vider ($1) ($2) ($3).",
+"showingresults" => "Monstra de <b>$1</b> resultatos a partir de nº <b>$2</b>.",
+"nonefound"		=> "<strong>Nota</strong>: recercas frustrate frequentemente
+es causate per le inclusion de vocabulos commun como \"que\" e \"illo\",
+que non es includite in le indice, o per le specification de plure
+terminos de recerca (solmente le paginas que contine tote le terminos
+de recerca apparera in le resultato).",
+"powersearch" => "Recercar",
+"powersearchtext" => "
+Recerca in contextos :<br />
+$1<br />
+$2 Listar redireciones &nbsp; Recercar pro $3 $9",
+
+
+# Preferences page
+#
+"preferences"	=> "Preferentias",
+"prefsnologin" => "Session non aperte",
+"prefsnologintext"	=> "Tu debe [[Special:Userlogin|aperir un session]]
+pro definir tu preferentias.",
+"prefsreset"	=> "Tu preferentias salvate previemente ha essite restaurate.",
+"qbsettings"	=> "Configuration del barra de utensiles",
+'qbsettings-none'	=> 'Nulle',
+'qbsettings-fixedleft'	=> 'Fixe a sinistra',
+'qbsettings-fixedright'	=> 'Fixe a dextera',
+'qbsettings-floatingleft'	=> 'Flottante a sinistra',
+'qbsettings-floatingright'	=> 'Flottante a dextera',
+"changepassword" => "Cambiar contrasigno",
+"skin"			=> "Apparentia",
+"math"			=> "Exhibition de formulas",
+"math_failure"		=> "Impossibile analysar",
+"math_unknown_error"	=> "error incognite",
+"math_unknown_function"	=> "function incognite",
+"math_lexing_error"	=> "error lexic",
+"math_syntax_error"	=> "error syntactic",
+"saveprefs"		=> "Salvar preferentias",
+"resetprefs"	=> "Restaurar preferentias",
+"oldpassword"	=> "Contrasigno actual",
+"newpassword"	=> "Nove contrasigno",
+"retypenew"		=> "Confirmar nove contrasigno",
+"textboxsize"	=> "Dimensiones del cassa de texto",
+"rows"			=> "Lineas",
+"columns"		=> "Columnas",
+"searchresultshead" => "Configuration del resultatos de recerca",
+"resultsperpage" => "Coincidentias per pagina",
+"contextlines"	=> "Lineas per coincidentia",
+"contextchars"	=> "Characteres de contexto per linea",
+"stubthreshold" => "Limite pro exhibition residual",
+"recentchangescount" => "Quantitate de titulos in modificationes recente",
+"savedprefs"	=> "Tu preferentias ha essite salvate.",
+"timezonetext"	=> "Scribe le differentia de horas inter tu fuso horari
+e illo del servitor (UTC).",
+"localtime"	=> "Hora local",
+"timezoneoffset" => "Differentia de fuso horari",
+
+# Recent changes
+#
+"changes" => "modificationes",
+"recentchanges" => "Modificationes recente",
+"recentchangestext" => "Seque le plus recente modificationes a {{SITENAME}} in iste pagina.
+[[{{ns:project}}:Benvenite,_novicios|Benvenite, novicios]]!
+Per favor lege equalmente iste paginas: [[{{ns:project}}:Questiones_frequente|Questiones frequente super {{SITENAME}}]],
+[[{{ns:project}}:Politicas e directivas|Politica de {{SITENAME}}]]
+(specialmente [[{{ns:project}}:Conventiones de nomenclatura|conventiones de nomenclatura]],
+[[{{ns:project}}:Neutralitate e objectivitate|neutralitate e objectivitate]]),
+e [[{{ns:project}}:Le passos false plus commun|le passos false plus commun]].
+
+Si tu vole que {{SITENAME}} habe successo, es multo importante que tu non
+include material protegite per [[{{ns:project}}:Copyright|derectos de autor]].
+Le aspectos legal connexe poterea prejudicar gravemente le projecto,
+alora per favor non lo face.",
+"rcnote"		=> "Infra es le <strong>$1</strong> ultime modificationes in le <strong>$2</strong> ultime dies.",
+"rcnotefrom"	=> "infra es le modificationes a partir de <b>$2</b> (usque a <b>$1</b>).",
+"rclistfrom"	=> "Monstrar nove modificationes a partir de $1",
+# "rclinks"		=> "Monstrar le $1 ultime modificationes in le $2 ultime horas / $3 ultime dias",
+"rclinks"		=> "Monstrar le $1 ultime modificationes in le $2 ultime days.",
+"diff"			=> "diff",
+"hist"			=> "prec",
+"hide"			=> "occultar",
+"show"			=> "monstrar",
+"minoreditletter" => "M",
+"newpageletter" => "N",
+
+# Upload
+#
+"upload"		=> "Cargar file",
+"uploadbtn"		=> "Cargar file",
+"reupload"		=> "Recargar",
+"reuploaddesc"	=> "Retornar al formulario de carga.",
+"uploadnologin" => "Session non aperte",
+"uploadnologintext"	=> "Tu debe [[Special:Userlogin|aperir un session]]
+pro poter cargar files.",
+"uploaderror"	=> "Error de carga",
+"uploadtext"	=> "'''STOP!''' Ante cargar files al servitor,
+prende cognoscentia del
+[[Project:Image_use_policy|politica de {{SITENAME}} super le uso de imagines]],
+e assecura te de respectar lo.
+
+Pro vider o recercar imagines cargate previemente,
+vade al [[Special:Imagelist|lista de imagines cargate]].
+Cargas e eliminationes es registrate in le
+[[Project:Upload_log|registro de cargas]].
+
+Usa le formulario infra pro cargar nove files de imagine pro
+illustrar tu articulos.
+In le major parte del navigatores, tu videra un button \"Browse...\",
+que facera apparer le cassa de dialogo de apertura de files
+standard de tu systema de operation. Selectiona un file pro
+inserer su nomine in le campo de texto adjacente al button.
+Tu debe additionalmente marcar le quadrato con le qual tu
+declara que tu non viola derectos de autor per medio del carga
+del file.
+Preme le button \"Cargar\" pro initiar le transmission.
+Le carga pote prender alcun tempore si tu connexion al Internet
+es lente.
+
+Le formatos preferite es JPEG pro imagines photographic,
+PNG pro designos e altere imagines iconic, e OGG pro sonos.
+Per favor, attribue nomines descriptive a tu files pro evitar
+confusion.
+Pro includer le imagine in un articulo, usa un ligamine in
+le forma '''<nowiki>[[image:file.jpg]]</nowiki>''' o
+'''<nowiki>[[image:file.png|texto alternative]]</nowiki>''' o
+'''<nowiki>[[media:file.ogg]]</nowiki>''' pro sonos.
+
+Nota que, justo como occurre con le paginas de {{SITENAME}}, alteros
+pote modificar o eliminar le files cargate si illes considera que
+isto beneficia le encyclopedia, e tu pote haber tu derecto
+de carga blocate si tu abusa del systema.",
+"uploadlog"		=> "registro de cargas",
+"uploadlogpage" => "Registro_de_cargas",
+"uploadlogpagetext" => "Infra es un lista del plus recente cargas de files.
+Tote le tempores monstrate es in le fuso horari del servitor (UCT).
+<ul>
+</ul>",
+"filename"		=> "Nomine del file",
+"filedesc"		=> "Description",
+"copyrightpage" => "{{ns:project}}:Copyright",
+"copyrightpagename" => "{{SITENAME}} e derectos de autor (copyright)",
+"uploadedfiles"	=> "Files cargate",
+"minlength"		=> "Le nomines de imagines debe haber al minus tres litteras.",
+"badfilename"	=> "Le nomine del imagine esseva cambiate a \"$1\".",
+"badfiletype"	=> "\".$1\" non es un formato de file de imagine recommendate.",
+"largefile"		=> "Es recommendabile que le imagines non excede 100kb.",
+"successfulupload" => "Carga complete",
+"fileuploaded"	=> "File \"$1\" cargate sin problemas.
+Per favor clicca hic: ($2) pro accessar le pagina de description
+e fornir information super le file, tal como su origine,
+quando illo esseva create e per qui, e toto plus que tu sape
+a su proposito.",
+"uploadwarning" => "Advertimento de carga",
+"savefile"		=> "Salvar file",
+"uploadedimage" => "\"[[$1]]\" cargate",
+
+# Image list
+#
+"imagelist"		=> "Lista de imagines",
+"imagelisttext"	=> "Infra es un lista de $1 imagines ordinate $2.",
+"getimagelist"	=> "recuperation del lista de imagines",
+"ilsubmit"		=> "Recercar",
+"showlast"		=> "Monstrar le ultime $1 imagines ordinate $2.",
+"byname"		=> "per nomine",
+"bydate"		=> "per data",
+"bysize"		=> "per dimension",
+"imgdelete"		=> "elim",
+"imgdesc"		=> "desc",
+"imglegend"		=> "Legenda: (desc) = monstrar/modificar description del imagine.",
+"imghistory"	=> "Chronologia del imagine",
+"revertimg"		=> "rev",
+"deleteimg"		=> "elim",
+"deleteimgcompletely"		=> "elim",
+"imghistlegend" => "Legend: (actu) = iste es le imagine actual, (elim) = elimina
+iste version antique, (rev) = reverte a iste version antique.
+<br /><i>Clica super le data pro vider le imagine cargate in ille die.</i>",
+"imagelinks"	=> "Ligamines al imagine",
+"linkstoimage"	=> "Le paginas sequente se liga a iste imagine:",
+"nolinkstoimage" => "Necun pagina se liga a iste imagine.",
+
+# Statistics
+#
+"statistics"	=> "Statisticas",
+"sitestats"		=> "Statisticas de accesso",
+"userstats"		=> "Statisticas de usator",
+"sitestatstext" => "Le base de datos contine un total de <b>$1</b> paginas.
+Iste numero include paginas de \"discussion\", paginas super {{SITENAME}}, paginas de \"residuo\"
+minime, paginas de redirection, e alteres que probabilemente non se qualifica como articulos.
+A parte de istes, il ha <b>$2</b> paginas que probabilemente es
+articulos legitime.<p>
+Il habeva un total de <b>$3</b> visitas a paginas, e <b>$4</b> modificationes de paginas
+desde le actualisation del systema (20 de julio 2002).
+Isto representa un media de <b>$5</b> modificationes per pagina, e <b>$6</b> visitas per modification.",
+"userstatstext" => "Il ha <b>$1</b> usatores registrate,
+del quales <b>$2</b> es administratores (vide $3).",
+
+# Maintenance Page
+#
+"disambiguations"	=> "Paginas de disambiguation",
+"disambiguationspage"	=> "{{ns:project}}:Ligamines_a_paginas_de_disambiguation",
+"disambiguationstext"	=> "Le articulos sequente se liga a un <i>pagina de disambiguation</i>.
+Illos deberea ligar se directemente al topico appropriate.<br />
+Un pagina es tractate como un pagina de disambiguation si existe un ligamine
+a illo in $1. Ligamines de altere contextos <i>non</i> es listate hic.",
+"doubleredirects"	=> "Redirectiones duple",
+"doubleredirectstext"	=> "<b>Attention:</b> Iste lista pote continer items false.
+Illo generalmente significa que il ha texto additional con ligamines sub le prime #REDIRECT.<br />
+Cata linea contine ligamines al prime e secunde redirection, assi como le prime linea del
+secunde texto de redirection, generalmente exhibiente le articulo scopo \"real\",
+al qual le prime redirection deberea referer se.",
+"brokenredirects"	=> "Redirectiones van",
+"brokenredirectstext"	=> "Le redirectiones sequente se liga a articulos inexistente.",
+
+
+# Miscellaneous special pages
+#
+"lonelypages"	=> "Paginas orphanas",
+"unusedimages"	=> "Imagines non usate",
+"popularpages"	=> "Paginas popular",
+"nviews"		=> "$1 visitas",
+"wantedpages"	=> "Paginas plus demandate",
+"nlinks"		=> "$1 ligamines",
+"allpages"		=> "Tote le paginas",
+"randompage"	=> "Pagina aleatori",
+"shortpages"	=> "Paginas curte",
+"longpages"		=> "Paginas longe",
+"listusers"		=> "Lista de usatores",
+"specialpages"	=> "Paginas special",
+"spheading"		=> "Paginas special",
+"recentchangeslinked" => "Modificationes correlate",
+"rclsub"		=> "(a paginas ligate a partir de \"$1\")",
+"newpages"		=> "Nove paginas",
+"movethispage"	=> "Mover iste pagina",
+"unusedimagestext" => "<p>Nota que altere sitos del web
+tal como le {{SITENAME}}s international pote ligar se a un imagine
+con un URL directe, e consequentemente illos pote esser listate
+hic malgrado esser in uso active.",
+"booksources"	=> "Fornitores de libros",
+"booksourcetext" => "Infra es un lista de ligamines a altere sitos que
+vende libros nove e usate, e pote haber information ulterior super
+libros que tu cerca.
+{{SITENAME}} non es associate a iste interprisas, e iste lista
+non debe esser interpretate como alcun appoio special.",
+
+# Email this user
+#
+"mailnologin"	=> "Necun adresse de invio",
+"mailnologintext" => "Tu debe [[Special:Userlogin|aperir un session]]
+e haber un adresse de e-mail valide in tu [[Special:Preferences|preferentias]]
+pro inviar e-mail a altere usatores.",
+"emailuser"		=> "Inviar e-mail a iste usator",
+"emailpage"		=> "Inviar e-mail al usator",
+"emailpagetext"	=> "Si iste usator forniva un adresse de e-mail valide in
+su preferentias de usator, le formulario infra le/la inviara un message.
+Le adresse de e-mail que tu forniva in tu preferentias de usator apparera
+como le adresse del expeditor del e-mail, a fin que le destinatario
+pote responder te.",
+"noemailtitle"	=> "Necun adresse de e-mail",
+"noemailtext"	=> "Iste usator non ha specificate un adresse de e-mail valide,
+o ha optate pro non reciper e-mail de altere usatores.",
+"emailfrom"		=> "De",
+"emailto"		=> "A",
+"emailsubject"	=> "Subjecto",
+"emailmessage"	=> "Message",
+"emailsend"		=> "Inviar",
+"emailsent"		=> "E-mail inviate",
+"emailsenttext" => "Tu message de e-mail ha essite inviate.",
+
+# Watchlist
+#
+"watchlist"		=> "Paginas sub observation",
+"mywatchlist"		=> "Paginas sub observation",
+"nowatchlist"	=> "Tu non ha paginas sub observation.",
+"watchnologin"	=> "Session non aperte",
+"watchnologintext"	=> "Tu debe [[Special:Userlogin|aperir un session]]
+pro modificar tu lista de paginas sub observation.",
+"addedwatch"	=> "Ponite sub observation",
+"addedwatchtext" => "Le pagina \"$1\" es ora in tu [[Special:Watchlist||lista de paginas sub observation]].
+Modificationes futur a iste pagina e su pagina de discussion associate essera listate la,
+e le pagina apparera '''in nigretto''' in le [[Special:Recentchanges|lista de modificationes recente]] pro
+facilitar su identification.
+
+Si tu vole cessar le obsevation de iste pagina posteriormente, clicca \"Cancellar observation\" in le barra de navigation.",
+"removedwatch"	=> "Observation cancellate",
+"removedwatchtext" => "Le pagina \"$1\" non es plus sub observation.",
+"watchthispage"	=> "Poner iste pagina sub observation",
+"unwatchthispage" => "Cancellar observation",
+"notanarticle"	=> "Non es un articulo",
+
+# Delete/protect/revert
+#
+"deletepage"	=> "Eliminar pagina",
+"confirm"		=> "Confirmar",
+"confirmdelete" => "Confirmar elimination",
+"deletesub"		=> "(Elimination de \"$1\")",
+"confirmdeletetext" => "Tu es a puncto de eliminar permanentemente un pagina
+o imagine del base de datos, conjunctemente con tote su chronologia de versiones.
+Per favor, confirma que, si tu intende facer lo, tu comprende le consequentias,
+e tu lo face de accordo con [[{{ns:project}}:Policy]].",
+"actioncomplete" => "Action complete",
+"deletedtext"	=> "\"$1\" ha essite eliminate.
+Vide $2 pro un registro de eliminationes recente.",
+"deletedarticle" => "\"$1\" eliminate",
+"dellogpage"	=> "Registro_de_eliminationes",
+"dellogpagetext" => "Infra es un lista del plus recente eliminationes.
+Tote le horas es in le fuso horari del servitor (UTC).
+<ul>
+</ul>",
+"deletionlog"	=> "registro de eliminationes",
+"reverted"		=> "Revertite a revision anterior",
+"deletecomment"	=> "Motivo del elimination",
+"imagereverted" => "Reversion con successo a version anterior.",
+"rollback"		=> "Revocar modificationes",
+"rollbacklink"	=> "revocar",
+"cantrollback"	=> "Impossibile revocar le modification; le ultime contribuente es le unic autor de iste articulo.",
+"revertpage"	=> "Revertite al ultime modification per $1",
+
+# Undelete
+"undelete" => "Restaurar pagina eliminate",
+"undeletepage" => "Vider e restaurar paginas eliminate",
+"undeletepagetext" => "Le paginas sequente ha essite eliminate mais ancora es in le archivo e
+pote esser restaurate. Le archivo pote esser evacuate periodicamente.",
+"undeletearticle" => "Restaurar articulo eliminate",
+"undeleterevisions" => "$1 revisiones archivate",
+"undeletehistory" => "Si tu restaura un pagina, tote le revisiones essera restaurate al chronologia.
+Si un nove pagina con le mesme nomine ha essite create post le elimination, le revisiones
+restaurate apparera in le chronologia anterior, e le revision currente del pagina in vigor
+non essera automaticamente substituite.",
+"undeleterevision" => "Revision eliminate in $1",
+"undeletebtn" => "Restautar!",
+"undeletedarticle" => "\"$1\" restaurate",
+
+# Contributions
+#
+"contributions"	=> "Contributiones de usator",
+"mycontris" => "Mi contributiones",
+"contribsub2"	=> "Pro $1 ($2)",
+"nocontribs"	=> "Necun modification ha essite trovate secundo iste criterios.",
+"ucnote"		=> "Infra es le <b>$1</b> ultime modificationes de iste usator in le <b>$2</b> ultime dies.",
+"uclinks"		=> "Vider le $1 ultime modificationes; vider le $2 ultime dies.",
+"uctop"		=> " (alto)" ,
+
+# What links here
+#
+"whatlinkshere"	=> "Referentias a iste pagina",
+"notargettitle" => "Sin scopo",
+"notargettext"	=> "Tu non ha specificate un pagina o usator super le qual
+executar iste function.",
+"linklistsub"	=> "(Lista de ligamines)",
+"linkshere"		=> "Le paginas sequente se liga a iste pagina:",
+"nolinkshere"	=> "Necun pagina se liga a iste.",
+"isredirect"	=> "pagina de redirection",
+
+# Block/unblock IP
+#
+"blockip"		=> "Blocar adresse IP",
+"blockiptext"	=> "Usa le formulario infra pro blocar le accesso de scriptura
+a partir de un adresse IP specific.
+Isto debe esser facite solmente pro impedir vandalismo, e de
+accordo con le [[{{ns:project}}:Policy|politica de {{SITENAME}}]].
+Scribe un motivo specific infra (per exemplo, citante paginas
+specific que ha essite vandalisate).",
+"ipaddress"		=> "Adresse IP",
+"ipbreason"		=> "Motivo",
+"ipbsubmit"		=> "Blocar iste adresse",
+"badipaddress"	=> "Adresse IP mal formate.",
+"blockipsuccesssub" => "Blocage con successo",
+"blockipsuccesstext" => "Le adresse IP \"$1\" ha essite blocate.
+<br />Vide [[Special:Ipblocklist|Lista de IPs blocate]] pro revider le blocages.",
+"unblockip"		=> "Disblocar adresse IP",
+"unblockiptext"	=> "Usa le formulario infra pro restaurar le accesso de scriptura
+a un adresse de IP blocate previemente.",
+"ipusubmit"		=> "Disbloca iste adresse",
+"ipblocklist"	=> "Lista de adresses IP blocate",
+"blocklistline"	=> "$1, $2 ha blockate $3 ($4)",
+"blocklink"		=> "blocar",
+"unblocklink"	=> "disblocar",
+"contribslink"	=> "contributiones",
+
+# Developer tools
+#
+"lockdb"		=> "Blocar base de datos",
+"unlockdb"		=> "Disblocar base de datos",
+"lockdbtext"	=> "Le blocage del base de datos suspendera le capacitate de tote
+le usatores de modificar paginas, modificar lor preferentias e listas de paginas sub observation,
+e altere actiones que require modificationes in le base de datos.
+Per favor confirma que iste es tu intention, e que tu disblocara le
+base de datos immediatemente post completar tu mantenentia.",
+"unlockdbtext"	=> "Le disblocage del base de datos restaurara le capacitate de tote
+le usatores de modificar paginas, modificar lor preferentias e listas de paginas sub observation,
+e altere actiones que require modificationes in le base de datos.
+Per favor confirma que iste es tu intention.",
+"lockconfirm"	=> "Si, io realmente vole blocar le base de datos.",
+"unlockconfirm"	=> "Si, io realmente vole disblocar le base de datos.",
+"lockbtn"		=> "Blocar base de datos",
+"unlockbtn"		=> "Disblocar base de datos",
+"locknoconfirm" => "Tu non ha marcate le quadrato de confirmation.",
+"lockdbsuccesssub" => "Base de datos blocate con successo",
+"unlockdbsuccesssub" => "Base de datos disblocate con successo",
+"lockdbsuccesstext" => "Le base de datos de {{SITENAME}} ha essite blocate.
+<br />Rememora te de disblocar lo post completar tu mantenentia.",
+"unlockdbsuccesstext" => "Le base de datos de {{SITENAME}} ha essite disblocate.",
+
+# Move page
+#
+"movepage"		=> "Mover pagina",
+"movepagetext"	=> "Per medio del formulario infra tu pote renominar un pagina,
+movente tote su chronologia al nove nomine.
+Le titulo anterior devenira un pagina de redirection al nove titulo.
+Le ligamines al pagina anterior non essera modificate;
+assecura te de verificar le apparition de redirectiones duple o van.
+Tu es responsabile pro assecurar que le ligamines continua a punctar a ubi illos deberea.
+
+Nota que le pagina '''non''' essera movite si ja existe un pagina
+sub le nove titulo, salvo si illo es vacue o un redirection e non
+ha un chronologia de modificationes passate. Isto significa que tu
+pote renominar un pagina a su titulo original si tu lo ha renominate
+erroneemente, e que tu non pote superscriber un pagina existente.
+
+<b>ADVERTIMENTO!</b>
+Isto pote esser un cambio drastic e inexpectate pro un pagina popular;
+per favor assecura te que tu comprende le consequentias de isto
+ante proceder.",
+"movepagetalktext" => "Le pagina de discussion associate, si existe, essera automaticamente movite conjunctemente con illo '''a minus que''':
+*Tu move le pagina trans contextos,
+*Un pagina de discussion non vacue ja existe sub le nove nomine, o
+*Tu dismarca le quadrato infra.
+
+Il tal casos, tu debera mover o fusionar le pagina manualmente si desirate.",
+"movearticle"	=> "Mover pagina",
+"movenologin"	=> "Session non aperte",
+"movenologintext" => "Tu debe esser un usator registrate e [[Special:Userlogin|aperir un session]]
+pro mover un pagina.",
+"newtitle"		=> "Al nove titulo",
+"movepagebtn"	=> "Mover pagina",
+"pagemovedsub"	=> "Pagina movite con successo",
+"pagemovedtext" => "Pagina \"[[$1]]\" movite a \"[[$2]]\".",
+"articleexists" => "Un pagina con iste nomine ja existe, o le
+nomine selectionate non es valide.
+Per favor selectiona un altere nomine.",
+"talkexists"	=> "Le pagina mesme ha essite movite con successo, mais le
+pagina de discussion associate non ha essite movite proque ja existe un sub le
+nove titulo. Per favor fusiona los manualmente.",
+"movedto"		=> "movite a",
+"movetalk"		=> "Mover le pagina de \"discussion\" tamben, si applicabile.",
+"talkpagemoved" => "Le pagina de discussion correspondente tamben ha essite movite.",
+"talkpagenotmoved" => "Le pagina de discussion correspondente <strong>non</strong> ha essite movite.",
+
+# Math
+
+'mw_math_png' => "Sempre produce PNG",
+'mw_math_simple' => "HTML si multo simple, alteremente PNG",
+'mw_math_html' => "HTML si possibile, alteremente PNG",
+'mw_math_source' => "Lassa lo como TeX (pro navigatores in modo texto)",
+'mw_math_modern' => "Recommendate pro navigatores moderne",
+'mw_math_mathml' => 'MathML',
+
+);
+
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesId.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesId.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesId.php	(revision 1280)
@@ -0,0 +1,2293 @@
+<?php
+/**
+ * Indonesian (Bahasa Indonesia)
+ *
+ * @addtogroup Language
+ *
+ * @author Ivan Lanin (since March 2006)
+ */
+
+/**
+ * Transform table for decimal point '.' and thousands separator ','
+ */
+$separatorTransformTable = array(',' => '.', '.' => ',' );
+
+/**
+ * Namespace names. NS_PROJECT is always set to $wgMetaNamespace after the 
+ * settings are loaded, it will be ignored even if you specify it here. 
+ */
+$namespaceNames = array(
+	NS_MEDIA            => 'Media',
+	NS_SPECIAL          => 'Istimewa',
+	NS_MAIN             => '',
+	NS_TALK             => 'Pembicaraan',
+	NS_USER             => 'Pengguna',
+	NS_USER_TALK        => 'Pembicaraan_Pengguna',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK     => 'Pembicaraan_$1',
+	NS_IMAGE            => 'Berkas',
+	NS_IMAGE_TALK       => 'Pembicaraan_Berkas',
+	NS_MEDIAWIKI        => 'MediaWiki',
+	NS_MEDIAWIKI_TALK   => 'Pembicaraan_MediaWiki',
+	NS_TEMPLATE         => 'Templat',
+	NS_TEMPLATE_TALK    => 'Pembicaraan_Templat',
+	NS_HELP             => 'Bantuan',
+	NS_HELP_TALK        => 'Pembicaraan_Bantuan',
+	NS_CATEGORY         => 'Kategori',
+	NS_CATEGORY_TALK    => 'Pembicaraan_Kategori'
+);
+
+/**
+ * Array of namespace aliases, mapping from name to NS_xxx index
+ */
+$namespaceAliases = array(
+	'Gambar_Pembicaraan'    => NS_IMAGE_TALK,
+	'MediaWiki_Pembicaraan' => NS_MEDIAWIKI_TALK,
+	'Templat_Pembicaraan'   => NS_TEMPLATE_TALK,
+	'Bantuan_Pembicaraan'   => NS_HELP_TALK,
+	'Kategori_Pembicaraan'  => NS_CATEGORY_TALK,
+	'Gambar'                => NS_IMAGE,
+	'Pembicaraan_Gambar'    => NS_IMAGE_TALK,
+	'Bicara'                => NS_TALK,
+	'Bicara_Pengguna'       => NS_USER_TALK,
+);
+
+/**
+ * Skin names. If any key is not specified, the English one will be used.
+ */
+$skinNames = array(
+	'standard' => 'Klasik',
+	'simple'   => 'Sederhana',
+);
+
+/**
+ * Default list of book sources
+ */
+$bookstoreList = array(
+	'AddALL' => 'http://www.addall.com/New/Partner.cgi?query=$1&type=ISBN',
+	'Amazon.com' => 'http://www.amazon.com/exec/obidos/ISBN=$1',
+	'Barnes & Noble' => 'http://search.barnesandnoble.com/bookSearch/isbnInquiry.asp?isbn=$1',
+	'Bhinneka.com bookstore' => 'http://www.bhinneka.com/Buku/Engine/search.asp?fisbn=$1',
+	'Gramedia Cyberstore (via Google)' => 'http://www.google.com/search?q=%22ISBN+:+$1%22+%22product_detail%22+site:www.gramediacyberstore.com+OR+site:www.gramediaonline.com+OR+site:www.kompas.com&hl=id',
+	'PriceSCAN' => 'http://www.pricescan.com/books/bookDetail.asp?isbn=$1',
+);
+
+/**
+ * Magic words
+ * Customisable syntax for wikitext and elsewhere
+ */
+$magicWords = array(
+#   ID                           CASE  SYNONYMS
+	'redirect'            => array( 0, '#ALIH',                    '#REDIRECT'              ),
+	'notoc'               => array( 0, '__TANPADAFTARISI__',       '__NOTOC__'              ),
+	'nogallery'           => array( 0, '__TANPAGALERI__',          '__NOGALLERY__'          ),
+	'forcetoc'            => array( 0, '__PAKSADAFTARISI__',       '__FORCETOC__'           ),
+	'toc'                 => array( 0, '__DAFTARISI__',            '__TOC__'                ),
+	'noeditsection'       => array( 0, '__TANPASUNTINGANBAGIAN__', '__NOEDITSECTION__'      ),
+	'start'               => array( 0, '__MULAI__',                '__START__'              ),
+	'currentmonth'        => array( 1, 'BULANKINI',                'CURRENTMONTH'           ),
+	'currentmonthname'    => array( 1, 'NAMABULANKINI',            'CURRENTMONTHNAME'       ),
+	'currentmonthnamegen' => array( 1, 'NAMASINGKATBULANKINI',     'CURRENTMONTHNAMEGEN'    ),
+	'currentmonthabbrev'  => array( 1, 'BULANINISINGKAT',          'CURRENTMONTHABBREV'     ),
+	'currentday'          => array( 1, 'HARIKINI',                 'CURRENTDAY'             ),
+	'currentday2'         => array( 1, 'HARIKINI2',                'CURRENTDAY2'            ),
+	'currentdayname'      => array( 1, 'NAMAHARIKINI',             'CURRENTDAYNAME'         ),
+	'currentyear'         => array( 1, 'TAHUNKINI',                'CURRENTYEAR'            ),
+	'currenttime'         => array( 1, 'WAKTUKINI',                'CURRENTTIME'            ),
+	'currenthour'         => array( 1, 'JAMKINI',                  'CURRENTHOUR'            ),
+	'localmonth'          => array( 1, 'BULANLOKAL',               'LOCALMONTH'             ),
+	'localmonthname'      => array( 1, 'NAMABULANLOKAL',           'LOCALMONTHNAME'         ),
+	'localmonthnamegen'   => array( 1, 'NAMAJENDERBULANLOKAL',     'LOCALMONTHNAMEGEN'      ),
+	'localmonthabbrev'    => array( 1, 'NAMASINGKATBULANLOKAL',    'LOCALMONTHABBREV'       ),
+	'localday'            => array( 1, 'HARILOKAL',                'LOCALDAY'               ),
+	'localday2'           => array( 1, 'HARILOKAL2',               'LOCALDAY2'              ),
+	'localdayname'        => array( 1, 'HARILOKAL',                'LOCALDAYNAME'           ),
+	'localyear'           => array( 1, 'TAHUNLOKAL',               'LOCALYEAR'              ),
+	'localtime'           => array( 1, 'WAKTULOKAL',               'LOCALTIME'              ),
+	'localhour'           => array( 1, 'JAMLOKAL',                 'LOCALHOUR'              ),
+	'numberofpages'       => array( 1, 'JUMLAHHALAMAN',            'NUMBEROFPAGES'          ),
+	'numberofarticles'    => array( 1, 'JUMLAHARTIKEL',            'NUMBEROFARTICLES'       ),
+	'numberoffiles'       => array( 1, 'JUMLAHBERKAS',             'NUMBEROFFILES'          ),
+	'numberofusers'       => array( 1, 'JUMLAHPENGGUNA',           'NUMBEROFUSERS'          ),
+	'numberofedits'       => array( 1, 'JUMLAHSUNTINGAN',          'NUMBEROFEDITS'          ),
+	'pagename'            => array( 1, 'NAMAHALAMAN',              'PAGENAME'               ),
+	'pagenamee'           => array( 1, 'NAMAHALAMANE',             'PAGENAMEE'              ),
+	'namespace'           => array( 1, 'RUANGNAMA',                'NAMESPACE'              ),
+	'namespacee'          => array( 1, 'RUANGNAMAE',               'NAMESPACEE'             ),
+	'talkspace'           => array( 1, 'RUANGBICARA',              'TALKSPACE'              ),
+	'talkspacee'          => array( 1, 'RUANGBICARAE',             'TALKSPACEE'              ),
+	'subjectspace'        => array( 1, 'RUANGUTAMA',               'SUBJECTSPACE', 'ARTICLESPACE' ),
+	'subjectspacee'       => array( 1, 'RUANGUTAMAE',              'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+	'fullpagename'        => array( 1, 'NAMALENGKAPHALAMAN',       'FULLPAGENAME'           ),
+	'fullpagenamee'       => array( 1, 'NAMALENGKAPHALAMANE',      'FULLPAGENAMEE'          ),
+	'subpagename'         => array( 1, 'NAMASUBHALAMAN',           'SUBPAGENAME'            ),
+	'subpagenamee'        => array( 1, 'NAMASUBHALAMANE',          'SUBPAGENAMEE'           ),
+	'basepagename'        => array( 1, 'NAMADASARHALAMAN',         'BASEPAGENAME'           ),
+	'basepagenamee'       => array( 1, 'NAMADASARHALAMANE',        'BASEPAGENAMEE'          ),
+	'talkpagename'        => array( 1, 'NAMAHALAMANBICARA',        'TALKPAGENAME'           ),
+	'talkpagenamee'       => array( 1, 'NAMAHALAMANBICARAE',       'TALKPAGENAMEE'          ),
+	'subjectpagename'     => array( 1, 'NAMAHALAMANARTIKEL',       'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+	'subjectpagenamee'    => array( 1, 'NAMAHALAMANARTIKELE',      'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
+	'msg'                 => array( 0, 'PESAN:',                   'MSG:'                   ),
+	'subst'               => array( 0, 'GANTI:',                   'SUBST:'                 ),
+	'msgnw'               => array( 0,                             'MSGNW:'                 ),
+	'img_thumbnail'       => array( 1,                             'thumbnail', 'thumb'     ),
+	'img_manualthumb'     => array( 1,                             'thumbnail=$1', 'thumb=$1'),
+	'img_right'           => array( 1, 'kanan',                    'right'                  ),
+	'img_left'            => array( 1, 'kiri',                     'left'                   ),
+	'img_none'            => array( 1, 'tanpa',                    'none'                   ),
+	'img_width'           => array( 1,                             '$1px'                   ),
+	'img_center'          => array( 1, 'tengah',                   'center', 'centre'       ),
+	'img_framed'          => array( 1, 'bingkai',                  'framed', 'enframed', 'frame' ),
+	'img_page'            => array( 1, 'halaman=$1',               'page=$1', 'page $1'     ),
+	'img_baseline'        => array( 1,                             'baseline'               ),
+	'img_sub'             => array( 1,                             'sub'                    ),
+	'img_super'           => array( 1,                             'super', 'sup'           ),
+	'img_top'             => array( 1, 'atas',                     'top'                    ),
+	'img_text-top'        => array( 1, 'atas-teks',                'text-top'               ),
+	'img_middle'          => array( 1, 'tengah',                   'middle'                 ),
+	'img_bottom'          => array( 1, 'bawah',                    'bottom'                 ),
+	'img_text-bottom'     => array( 1, 'bawah-teks',               'text-bottom'            ),
+	'int'                 => array( 0,                             'INT:'                   ),
+	'sitename'            => array( 1, 'NAMASITUS',                'SITENAME'               ),
+	'ns'                  => array( 0, 'RN:',                      'NS:'                    ),
+	'localurl'            => array( 0, 'URLLOKAL',                 'LOCALURL:'              ),
+	'localurle'           => array( 0, 'URLLOKALE',                'LOCALURLE:'             ),
+	'server'              => array( 0,                             'SERVER'                 ),
+	'servername'          => array( 0, 'NAMASERVER',               'SERVERNAME'             ),
+	'scriptpath'          => array( 0, 'LOKASISKRIP',              'SCRIPTPATH'             ),
+	'grammar'             => array( 0, 'TATABAHASA',               'GRAMMAR:'               ),
+	'notitleconvert'      => array( 0, '__TANPAKONVERSIJUDUL__',   '__NOTITLECONVERT__', '__NOTC__'),
+	'nocontentconvert'    => array( 0, '__TANPAKONVERSIISI__',     '__NOCONTENTCONVERT__', '__NOCC__'),
+	'currentweek'         => array( 1, 'MINGGUKINI',               'CURRENTWEEK'            ),
+	'currentdow'          => array( 1, 'HARIDALAMMINGGU',          'CURRENTDOW'             ),
+	'localweek'           => array( 1, 'MINGGULOKAL',              'LOCALWEEK'              ),
+	'localdow'            => array( 1, 'HARIDALAMMINGGULOKAL',     'LOCALDOW'               ),
+	'revisionid'          => array( 1, 'IDREVISI',                 'REVISIONID'             ),
+	'revisionday'         => array( 1, 'HARIREVISI',               'REVISIONDAY'            ),
+	'revisionday2'        => array( 1, 'HARIREVISI2',              'REVISIONDAY2'           ),
+	'revisionmonth'       => array( 1, 'BULANREVISI',              'REVISIONMONTH'          ),
+	'revisionyear'        => array( 1, 'TAHUNREVISI',              'REVISIONYEAR'           ),
+	'revisiontimestamp'   => array( 1, 'REKAMWAKTUREVISI',         'REVISIONTIMESTAMP'      ),
+	'plural'              => array( 0, 'JAMAK:',                   'PLURAL:'                ),
+	'fullurl'             => array( 0, 'URLLENGKAP:',              'FULLURL:'               ),
+	'fullurle'            => array( 0, 'URLLENGKAPE',              'FULLURLE:'              ),
+	'lcfirst'             => array( 0, 'AWALKECIL:',               'LCFIRST:'               ),
+	'ucfirst'             => array( 0, 'AWALBESAR:',               'UCFIRST:'               ),
+	'lc'                  => array( 0, 'KECIL:',                   'LC:'                    ),
+	'uc'                  => array( 0, 'BESAR:',                   'UC:'                    ),
+	'raw'                 => array( 0, 'MENTAH:',                  'RAW:'                   ),
+	'displaytitle'        => array( 1, 'JUDULTAMPILAN',            'DISPLAYTITLE'           ),
+	'rawsuffix'           => array( 1, 'M',                        'R'                      ),
+	'newsectionlink'      => array( 1, '__PRANALABAGIANBARU__',    '__NEWSECTIONLINK__'     ),
+	'currentversion'      => array( 1, 'VERSIKINI',                'CURRENTVERSION'         ),
+	'urlencode'           => array( 0, 'KODEURL:',                 'URLENCODE:'             ),
+	'anchorencode'        => array( 0, 'KODEJANGKAR',              'ANCHORENCODE'           ),
+	'currenttimestamp'    => array( 1, 'STEMPELWAKTUKINI',         'CURRENTTIMESTAMP'       ),
+	'localtimestamp'      => array( 1, 'STEMPELWAKTULOKAL',        'LOCALTIMESTAMP'         ),
+	'directionmark'       => array( 1, 'MARKAARAH',                'DIRECTIONMARK', 'DIRMARK' ),
+	'language'            => array( 0, '#BAHASA:',                 '#LANGUAGE:'             ),
+	'contentlanguage'     => array( 1, 'BAHASAISI',                'CONTENTLANGUAGE', 'CONTENTLANG' ),
+	'pagesinnamespace'    => array( 1, 'HALAMANDIRUANGNAMA:',      'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+	'numberofadmins'      => array( 1, 'JUMLAHPENGURUS',           'NUMBEROFADMINS'         ),
+	'formatnum'           => array( 0, 'FORMATANGKA',              'FORMATNUM'              ),
+	'padleft'             => array( 0, 'ISIKIRI',                  'PADLEFT'                ),
+	'padright'            => array( 0, 'ISIKANAN',                 'PADRIGHT'               ),
+	'special'             => array( 0, 'istimewa',                 'special',               ),
+	'defaultsort'         => array( 1, 'URUTANBAKU:',              'DEFAULTSORT:'           ),
+);
+
+/**
+ * Alternate names of special pages. All names are case-insensitive. The first
+ * listed alias will be used as the default. 
+ */
+$specialPageAliases = array(
+	'DoubleRedirects'           => array( 'Pengalihanganda' ),
+	'BrokenRedirects'           => array( 'Pengalihanrusak' ),
+	'Disambiguations'           => array( 'Disambiguasi' ),
+	'Userlogin'                 => array( 'Masuklog' ),
+	'Userlogout'                => array( 'Keluarlog' ),
+	'Preferences'               => array( 'Preferensi' ),
+	'Watchlist'                 => array( 'Daftarpantauan' ),
+	'Recentchanges'             => array( 'Perubahanterbaru' ),
+	'Upload'                    => array( 'Pemuatan' ),
+	'Imagelist'                 => array( 'Daftarberkas' ),
+	'Newimages'                 => array( 'Berkasbaru' ),
+	'Listusers'                 => array( 'Daftarpengguna' ),
+	'Statistics'                => array( 'Statistik' ),
+	'Randompage'                => array( 'Halamansembarang' ),
+	'Lonelypages'               => array( 'Halamantakbertuan' ),
+	'Uncategorizedpages'        => array( 'Halamantakterkategori' ),
+	'Uncategorizedcategories'   => array( 'Kategoritakterkategori' ),
+	'Uncategorizedimages'       => array( 'Berkastakterkategori' ),
+	'Unusedcategories'          => array( 'Kategoritakdigunakan' ),
+	'Unusedimages'              => array( 'Berkastakdigunakan' ),
+	'Wantedpages'               => array( 'Halamandiinginkan' ),
+	'Wantedcategories'          => array( 'Kategoridiinginkan' ),
+	'Mostlinked'                => array( 'Palingdituju' ),
+	'Mostlinkedcategories'      => array( 'Kategoripalingdituju' ),
+	'Mostcategories'            => array( 'Kategoriterbanyak' ),
+	'Mostimages'                => array( 'Berkastersering' ),
+	'Mostrevisions'             => array( 'Perubahanterbanyak' ),
+	'Fewestrevisions'           => array( 'Perubahantersedikit' ),
+	'Shortpages'                => array( 'Halamanpendek' ),
+	'Longpages'                 => array( 'Halamanpanjang' ),
+	'Newpages'                  => array( 'Halamanbaru' ),
+	'Ancientpages'              => array( 'Artikeltertua' ),
+	'Deadendpages'              => array( 'Halamanbuntu' ),
+	'Protectedpages'            => array( 'Halamandilindungi' ),
+	'Allpages'                  => array( 'Daftarhalaman' ),
+	'Prefixindex'               => array( 'Indeksawalan' ) ,
+	'Ipblocklist'               => array( 'Daftarblokirip' ),
+	'Specialpages'              => array( 'Halamanistimewa' ),
+	'Contributions'             => array( 'Kontribusi' ),
+	'Emailuser'                 => array( 'Suratepengguna' ),
+	'Whatlinkshere'             => array( 'Pranalabalik' ),
+	'Recentchangeslinked'       => array( 'Perubahanterkait' ),
+	'Movepage'                  => array( 'Pindahkanhalaman' ),
+	'Blockme'                   => array( 'Blokirsaya' ),
+	'Booksources'               => array( 'Sumberbuku' ),
+	'Categories'                => array( 'Kategori' ),
+	'Export'                    => array( 'Ekspor' ),
+	'Version'                   => array( 'Versi' ),
+	'Allmessages'               => array( 'Pesansistem' ),
+	'Log'                       => array( 'Log' ),
+	'Blockip'                   => array( 'Blokirip' ),
+	'Undelete'                  => array( 'Batalhapus' ),
+	'Import'                    => array( 'Impor' ),
+	'Lockdb'                    => array( 'Kuncidb' ),
+	'Unlockdb'                  => array( 'Bukakuncidb' ),
+	'Userrights'                => array( 'Hakpengguna' ),
+	'MIMEsearch'                => array( 'CariMIME' ),
+	'Unwatchedpages'            => array( 'Halamantakdipantau' ),
+	'Listredirects'             => array( 'Daftarpengalihan' ),
+	'Revisiondelete'            => array( 'Hapusrevisi' ),
+	'Unusedtemplates'           => array( 'Templattakdigunakan' ),
+	'Randomredirect'            => array( 'Pengalihansembarang' ),
+	'Mypage'                    => array( 'Halamansaya' ),
+	'Mytalk'                    => array( 'Pembicaraansaya' ),
+	'Mycontributions'           => array( 'Kontribusisaya' ),
+	'Listadmins'                => array( 'Daftarpengurus' ),
+	'Popularpages'              => array( 'Halamanpopuler' ),
+	'Search'                    => array( 'Pencarian', 'Cari' ),
+	'Resetpass'                 => array( 'Resetpass' ),
+	'Withoutinterwiki'          => array( 'Tanpainterwiki' ),
+);
+
+$messages = array(
+# User preference toggles
+'tog-underline'               => 'Garis bawahi pranala:',
+'tog-highlightbroken'         => 'Format pranala patah <a href="" class="new">seperti ini</a> (pilihan: seperti ini<a href="" class="internal">?</a>).',
+'tog-justify'                 => 'Ratakan paragraf',
+'tog-hideminor'               => 'Sembunyikan suntingan kecil di perubahan terbaru',
+'tog-extendwatchlist'         => 'Tampilkan daftar pantauan yang menunjukkan semua perubahan',
+'tog-usenewrc'                => 'Tampilan perubahan terbaru alternatif (JavaScript)',
+'tog-numberheadings'          => 'Beri nomor judul secara otomatis',
+'tog-showtoolbar'             => 'Perlihatkan <em>toolbar</em> (batang alat) penyuntingan',
+'tog-editondblclick'          => 'Sunting halaman dengan klik ganda (JavaScript)',
+'tog-editsection'             => 'Fungsikan penyuntingan sub-bagian melalui pranala [sunting]',
+'tog-editsectiononrightclick' => 'Fungsikan penyuntingan sub-bagian dengan klik-kanan pada judul bagian (JavaScript)',
+'tog-showtoc'                 => 'Perlihatkan daftar isi (untuk halaman yang mempunyai lebih dari 3 sub-bagian)',
+'tog-rememberpassword'        => 'Ingat kata sandi pada setiap sesi',
+'tog-editwidth'               => 'Kotak sunting berukuran maksimum',
+'tog-watchcreations'          => 'Tambahkan halaman yang saya buat ke daftar pantauan',
+'tog-watchdefault'            => 'Tambahkan halaman yang saya sunting ke daftar pantauan',
+'tog-watchmoves'              => 'Tambahkan halaman yang saya pindahkan ke daftar pantauan',
+'tog-watchdeletion'           => 'Tambahkan halaman yang saya hapus ke daftar pantauan',
+'tog-minordefault'            => 'Tandai semua suntingan sebagai suntingan kecil secara baku',
+'tog-previewontop'            => 'Perlihatkan pratayang sebelum kotak sunting dan tidak sesudahnya',
+'tog-previewonfirst'          => 'Perlihatkan pratayang pada suntingan pertama',
+'tog-nocache'                 => 'Matikan <em>cache</em> halaman',
+'tog-enotifwatchlistpages'    => 'Surat-e saya jika suatu halaman yang saya pantau berubah',
+'tog-enotifusertalkpages'     => 'Surat-e saya jika halaman pembicaraan saya berubah',
+'tog-enotifminoredits'        => 'Surat-e saya juga pada perubahan kecil',
+'tog-enotifrevealaddr'        => 'Berikan surat-e saya pada surat notifikasi',
+'tog-shownumberswatching'     => 'Tunjukkan jumlah pemantau',
+'tog-fancysig'                => 'Tanda tangan mentah (tanpa pranala otomatis)',
+'tog-externaleditor'          => 'Gunakan perangkat lunak pengolah kata luar',
+'tog-externaldiff'            => 'Gunakan perangkat lunak luar untuk melihat perbedaan suntingan',
+'tog-showjumplinks'           => 'Aktifkan pranala pembantu "langsung ke"',
+'tog-uselivepreview'          => 'Gunakan pratayang langsung (JavaScript) (eksperimental)',
+'tog-forceeditsummary'        => 'Ingatkan saya bila kotak ringkasan suntingan masih kosong',
+'tog-watchlisthideown'        => 'Sembunyikan suntingan saya di daftar pantauan',
+'tog-watchlisthidebots'       => 'Sembunyikan suntingan bot di daftar pantauan',
+'tog-watchlisthideminor'      => 'Sembunyikan suntingan kecil di daftar pantauan',
+'tog-nolangconversion'        => 'Matikan konversi varian',
+'tog-ccmeonemails'            => 'Kirimkan saya salinan surat-e yang saya kirimkan ke orang lain',
+'tog-diffonly'                => 'Jangan tampilkan isi halaman di bawah perbedaan suntingan',
+
+'underline-always'  => 'Selalu',
+'underline-never'   => 'Tidak',
+'underline-default' => 'Sesuai konfigurasi penjelajah web',
+
+'skinpreview' => '(Pratayang)',
+
+# Dates
+'sunday'        => 'Minggu',
+'monday'        => 'Senin',
+'tuesday'       => 'Selasa',
+'wednesday'     => 'Rabu',
+'thursday'      => 'Kamis',
+'friday'        => 'Jumat',
+'saturday'      => 'Sabtu',
+'sun'           => 'Min',
+'mon'           => 'Sen',
+'tue'           => 'Sel',
+'wed'           => 'Rab',
+'thu'           => 'Kam',
+'fri'           => 'Jum',
+'sat'           => 'Sab',
+'january'       => 'Januari',
+'february'      => 'Februari',
+'march'         => 'Maret',
+'april'         => 'April',
+'may_long'      => 'Mei',
+'june'          => 'Juni',
+'july'          => 'Juli',
+'august'        => 'Agustus',
+'september'     => 'September',
+'october'       => 'Oktober',
+'november'      => 'November',
+'december'      => 'Desember',
+'january-gen'   => 'Januari',
+'february-gen'  => 'Februari',
+'march-gen'     => 'Maret',
+'april-gen'     => 'April',
+'may-gen'       => 'Mei',
+'june-gen'      => 'Juni',
+'july-gen'      => 'Juli',
+'august-gen'    => 'Agustus',
+'september-gen' => 'September',
+'october-gen'   => 'Oktober',
+'november-gen'  => 'November',
+'december-gen'  => 'Desember',
+'jan'           => 'Jan',
+'feb'           => 'Feb',
+'mar'           => 'Mar',
+'apr'           => 'Apr',
+'may'           => 'Mei',
+'jun'           => 'Jun',
+'jul'           => 'Jul',
+'aug'           => 'Agu',
+'sep'           => 'Sep',
+'oct'           => 'Okt',
+'nov'           => 'Nov',
+'dec'           => 'Des',
+
+# Bits of text used by many pages
+'categories'            => 'Daftar kategori',
+'pagecategories'        => '{{PLURAL:$1|Kategori|Kategori}}',
+'category_header'       => 'Artikel dalam kategori "$1"',
+'subcategories'         => 'Subkategori',
+'category-media-header' => 'Media dalam kategori "$1"',
+
+'mainpagetext'      => 'Perangkat lunak wiki berhasil dipasang.',
+'mainpagedocfooter' => "Silakan baca [http://meta.wikimedia.org/wiki/Help:Contents User's Guide] untuk informasi penggunaan perangkat lunak wiki
+
+== Memulai penggunaan ==
+
+* [http://www.mediawiki.org/wiki/Manual:Configuration_settings Daftar pengaturan preferensi]
+* [http://www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]
+* [http://mail.wikimedia.org/mailman/listinfo/mediawiki-announce Milis rilis MediaWiki]",
+
+'about'          => 'Perihal',
+'article'        => 'Artikel',
+'newwindow'      => '(buka di jendela baru)',
+'cancel'         => 'Batalkan',
+'qbfind'         => 'Pencarian',
+'qbbrowse'       => 'Navigasi',
+'qbedit'         => 'Sunting',
+'qbpageoptions'  => 'Halaman ini',
+'qbpageinfo'     => 'Konteks halaman',
+'qbmyoptions'    => 'Halaman saya',
+'qbspecialpages' => 'Halaman istimewa',
+'moredotdotdot'  => 'Lainnya...',
+'mypage'         => 'Halaman saya',
+'mytalk'         => 'Pembicaraan saya',
+'anontalk'       => 'Pembicaraan IP ini',
+'navigation'     => 'Navigasi',
+
+# Metadata in edit box
+'metadata_help' => 'Metadata:',
+
+'errorpagetitle'    => 'Kesalahan',
+'returnto'          => 'Kembali ke $1.',
+'tagline'           => 'Dari {{SITENAME}}',
+'help'              => 'Bantuan',
+'search'            => 'Pencarian',
+'searchbutton'      => 'Cari',
+'go'                => 'Tuju ke',
+'searcharticle'     => 'Tuju ke',
+'history'           => 'Versi terdahulu',
+'history_short'     => 'Versi terdahulu',
+'updatedmarker'     => 'diubah sejak kunjungan terakhir saya',
+'info_short'        => 'Informasi',
+'printableversion'  => 'Versi cetak',
+'permalink'         => 'Pranala permanen',
+'print'             => 'Cetak',
+'edit'              => 'Sunting',
+'editthispage'      => 'Sunting halaman ini',
+'delete'            => 'Hapus',
+'deletethispage'    => 'Hapus halaman ini',
+'undelete_short'    => 'Batal hapus $1 suntingan',
+'protect'           => 'Lindungi',
+'protect_change'    => 'ubah perlindungan',
+'protectthispage'   => 'Lindungi halaman ini',
+'unprotect'         => 'Perlindungan',
+'unprotectthispage' => 'Ubah perlindungan halaman ini',
+'newpage'           => 'Halaman baru',
+'talkpage'          => 'Bicarakan halaman ini',
+'talkpagelinktext'  => 'Bicara',
+'specialpage'       => 'Halaman istimewa',
+'personaltools'     => 'Peralatan pribadi',
+'postcomment'       => 'Kirim komentar',
+'articlepage'       => 'Lihat artikel',
+'talk'              => 'Pembicaraan',
+'views'             => 'Tampilan',
+'toolbox'           => 'Kotak peralatan',
+'userpage'          => 'Lihat halaman pengguna',
+'projectpage'       => 'Lihat halaman proyek',
+'imagepage'         => 'Lihat halaman berkas',
+'mediawikipage'     => 'Lihat halaman pesan sistem',
+'templatepage'      => 'Lihat halaman templat',
+'viewhelppage'      => 'Lihat halaman bantuan',
+'categorypage'      => 'Lihat halaman kategori',
+'viewtalkpage'      => 'Lihat halaman pembicaran',
+'otherlanguages'    => 'Bahasa lain',
+'redirectedfrom'    => '(Dialihkan dari $1)',
+'redirectpagesub'   => 'Halaman peralihan',
+'lastmodifiedat'    => 'Halaman ini terakhir diubah pada $2, $1.', # $1 date, $2 time
+'viewcount'         => 'Halaman ini telah diakses sebanyak $1 kali.<br />',
+'protectedpage'     => 'Halaman yang dilindungi',
+'jumpto'            => 'Langsung ke:',
+'jumptonavigation'  => 'navigasi',
+'jumptosearch'      => 'cari',
+
+# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
+'aboutsite'         => 'Tentang {{SITENAME}}',
+'aboutpage'         => 'Project:Perihal',
+'bugreports'        => 'Laporan bug',
+'bugreportspage'    => 'Project:Laporan bug',
+'copyright'         => 'Seluruh teks tersedia sesuai dengan $1.',
+'copyrightpagename' => 'Hak cipta {{SITENAME}}',
+'copyrightpage'     => '{{ns:project}}:Hak cipta',
+'currentevents'     => 'Peristiwa terkini',
+'currentevents-url' => 'Peristiwa terkini',
+'disclaimers'       => 'Penyangkalan',
+'disclaimerpage'    => 'Project:Penyangkalan umum',
+'edithelp'          => 'Bantuan penyuntingan',
+'edithelppage'      => '{{ns:help}}:Penyuntingan',
+'faq'               => 'FAQ',
+'faqpage'           => 'Project:FAQ',
+'helppage'          => '{{ns:help}}:Isi',
+'mainpage'          => 'Halaman Utama',
+'policy-url'        => 'Project:Kebijakan',
+'portal'            => 'Portal komunitas',
+'portal-url'        => 'Project:Portal komunitas',
+'privacy'           => 'Kebijakan privasi',
+'privacypage'       => 'Project:Kebijakan privasi',
+'sitesupport'       => 'Donasi',
+'sitesupport-url'   => 'Project:Donasi',
+
+'badaccess'        => 'Kesalahan hak akses',
+'badaccess-group0' => 'Anda tidak diizinkan untuk melakukan tindakan yang Anda minta.',
+'badaccess-group1' => 'Tindakan yang Anda minta dibatasi untuk pengguna kelompok $1.',
+'badaccess-group2' => 'Tindakan yang Anda minta dibatasi untuk pengguna dalam kelompok $1.',
+'badaccess-groups' => 'Tindakan yang Anda minta dibatasi untuk pengguna dalam kelompok $1.',
+
+'versionrequired'     => 'Dibutuhkan MediaWiki versi $1',
+'versionrequiredtext' => 'MediaWiki versi $1 dibutuhkan untuk menggunakan halaman ini. Lihat [[Special:Version|halaman versi]]',
+
+'ok'                  => 'OK',
+'pagetitle'           => '$1 - {{SITENAME}}',
+'retrievedfrom'       => 'Diperoleh dari "$1"',
+'youhavenewmessages'  => 'Anda mempunyai $1 ($2).',
+'newmessageslink'     => 'pesan baru',
+'newmessagesdifflink' => 'perubahan terakhir',
+'editsection'         => 'sunting',
+'editold'             => 'sunting',
+'editsectionhint'     => 'Sunting bagian: $1',
+'toc'                 => 'Daftar isi',
+'showtoc'             => 'tampilkan',
+'hidetoc'             => 'sembunyikan',
+'thisisdeleted'       => 'Lihat atau kembalikan $1?',
+'viewdeleted'         => 'Lihat $1?',
+'restorelink'         => '$1 suntingan yang telah dihapus',
+'feedlinks'           => 'Asupan:',
+'feed-invalid'        => 'Tipe permintaan asupan tidak tepat.',
+'feed-atom'           => 'Atom',
+'feed-rss'            => 'RSS',
+
+# Short words for each namespace, by default used in the 'article' tab in monobook
+'nstab-main'      => 'Artikel',
+'nstab-user'      => 'Pengguna',
+'nstab-media'     => 'Media',
+'nstab-special'   => 'Istimewa',
+'nstab-project'   => 'Proyek',
+'nstab-image'     => 'Berkas',
+'nstab-mediawiki' => 'Pesan',
+'nstab-template'  => 'Templat',
+'nstab-help'      => 'Bantuan',
+'nstab-category'  => 'Kategori',
+
+# Main script and global functions
+'nosuchaction'      => 'Tidak ada tindakan tersebut',
+'nosuchactiontext'  => 'Tindakan yang dispesifikasikan oleh URL tersebut tidak dikenal oleh wiki.',
+'nosuchspecialpage' => 'Tidak ada halaman istimewa tersebut',
+'nospecialpagetext' => 'Anda meminta halaman istimewa yang tidak sah. Daftar halaman istimewa yang sah dapat dilihat di [[Special:Specialpages|daftar halaman istimewa]].',
+
+# General errors
+'error'                => 'Kesalahan',
+'databaseerror'        => 'Kesalahan basis data',
+'dberrortext'          => 'Ada kesalahan sintaks pada permintaan basis data. Kesalahan ini mungkin menandakan adanya \'\'bug\'\' dalam perangkat lunak. Permintaan basis data yang terakhir adalah: <blockquote><tt>$1</tt></blockquote> dari dalam fungsi "<tt>$2</tt>". Kesalahan MySQL "<tt>$3: $4</tt>".',
+'dberrortextcl'        => 'Ada kesalahan sintaks pada permintaan basis data. Permintaan basis data yang terakhir adalah: "$1" dari dalam fungsi "$2". Kesalahan MySQL "$3: $4".',
+'noconnect'            => 'Maaf! Wiki mengalami masalah teknis dan tidak dapat menghubungi basis data.<br />$1',
+'nodb'                 => 'Tidak dapat memilih basis data $1',
+'cachederror'          => 'Berikut ini adalah salinan <em>cache</em> dari halaman yang diminta, yang mungkin tidak up-to-date.',
+'laggedslavemode'      => 'Peringatan: Halaman mungkin tidak berisi perubahan terbaru.',
+'readonly'             => 'Basis data dikunci',
+'enterlockreason'      => 'Masukkan alasan penguncian, termasuk perkiraan kapan kunci akan dibuka',
+'readonlytext'         => 'Basis data sedang dikunci terhadap masukan baru. Pengurus yang melakukan penguncian memberikan penjelasan sebagai berikut: <p>$1',
+'missingarticle'       => 'Basis data tidak menemukan teks bagi halaman yang seharusnya mempunyai teks, yaitu halaman "$1".
+
+Ini biasanya disebabkan karena perubahan yang kadaluwarsa atau karena pranala lama kepada halaman telah dihapus.
+
+Jika ini bukan sebabnya, Anda mungkin menemukan bug dalam perangkat lunak. Silakan laporkan hal ini kepada pengurus, dengan mencantumkan URL halaman yang bermasalah tersebut',
+'readonly_lag'         => 'Basis data telah dikunci otomatis selagi basis data sekunder melakukan sinkronisasi dengan basis data utama',
+'internalerror'        => 'Kesalahan internal',
+'filecopyerror'        => 'Tidak dapat menyalin berkas "$1" ke "$2".',
+'filerenameerror'      => 'Tidak dapat mengubah nama berkas "$1" menjadi "$2".',
+'filedeleteerror'      => 'Tidak dapat menghapus berkas "$1".',
+'filenotfound'         => 'Tidak dapat menemukan berkas "$1".',
+'unexpected'           => 'Nilai di luar jangkauan: "$1"="$2".',
+'formerror'            => 'Kesalahan: Tidak dapat mengirimkan formulir',
+'badarticleerror'      => 'Tindakan ini tidak dapat dilaksanakan di halaman ini.',
+'cannotdelete'         => 'Tidak dapat menghapus halaman atau berkas yang diminta.',
+'badtitle'             => 'Judul tidak sah',
+'badtitletext'         => 'Judul halaman yang diminta tidak sah, kosong, atau judul antarbahasa atau antarwiki yang salah sambung.',
+'perfdisabled'         => 'Maaf! Fitur ini dimatikan sementara karena memperlambat basis data hingga tidak ada yang dapat menggunakan wiki ini.',
+'perfdisabledsub'      => 'Ini adalah salinan tersimpan dari $1:', # obsolete?
+'perfcached'           => 'Data berikut ini diambil dari <em>cache</em> dan mungkin bukan data mutakhir:',
+'perfcachedts'         => 'Data berikut ini diambil dari <em>cache</em>, dan terakhir diperbarui pada $1.',
+'querypage-no-updates' => 'Pemutakhiran dari halaman ini sedang dimatikan. Data yang ada di sini saat ini tidak akan dimuat ulang.',
+'wrong_wfQuery_params' => 'Parameter salah ke wfQuery()<br />Fungsi: $1<br />Permintaan: $2',
+'viewsource'           => 'Lihat sumber',
+'viewsourcefor'        => 'dari $1',
+'protectedpagetext'    => 'Halaman ini telah dikunci untuk menghindari penyuntingan.',
+'viewsourcetext'       => 'Anda dapat melihat atau menyalin sumber halaman ini:',
+'protectedinterface'   => 'Halaman ini berisi teks antarmuka untuk digunakan oleh perangkat lunak dan telah dikunci untuk menghindari kesalahan.',
+'editinginterface'     => "'''Peringatan:''' Anda menyunting halaman yang digunakan untuk menyediakan teks antarmuka dengan perangkat lunak. Perubahan teks ini akan mempengaruhi tampilan pada pengguna lain.",
+'sqlhidden'            => '(Permintaan SQL disembunyikan)',
+'cascadeprotected'     => 'Halaman ini telah dilindungi dari penyuntingan karena disertakan di {{PLURAL:$1|halaman|halaman-halaman}} berikut yang telah dilindungi dengan opsi "runtun":',
+
+# Login and logout pages
+'logouttitle'                => 'Keluar log pengguna',
+'logouttext'                 => 'Anda telah keluar log dari sistem. Anda dapat terus menggunakan {{SITENAME}} secara anonim, atau Anda dapat masuk log lagi sebagai pengguna yang sama atau pengguna yang lain. Perhatikan bahwa beberapa halaman mungkin masih terus menunjukkan bahwa Anda masih masuk log sampai Anda membersihkan <em>cache</em> penjelajah web Anda',
+'welcomecreation'            => '== Selamat datang, $1! ==
+
+Akun Anda telah dibuat. Jangan lupa mengatur konfigurasi {{SITENAME}} Anda.',
+'loginpagetitle'             => 'Masuk log pengguna',
+'yourname'                   => 'Nama pengguna',
+'yourpassword'               => 'Kata sandi',
+'yourpasswordagain'          => 'Ulangi kata sandi',
+'remembermypassword'         => 'Ingat kata sandi',
+'yourdomainname'             => 'Domain Anda',
+'externaldberror'            => 'Telah terjadi kesalahan otentikasi basis data eksternal atau Anda tidak diizinkan melakukan kemaskini terhadap akun eksternal Anda.',
+'loginproblem'               => '<strong>Ada masalah dengan proses masuk log Anda.</strong><br />Silakan coba lagi!',
+'alreadyloggedin'            => '<strong>Pengguna $1, Anda sudah masuk log!</strong><br />',
+'login'                      => 'Masuk log',
+'loginprompt'                => "Anda harus mengaktifkan ''cookies'' untuk dapat masuk log ke {{SITENAME}}.",
+'userlogin'                  => 'Masuk log / buat akun',
+'logout'                     => 'Keluar log',
+'userlogout'                 => 'Keluar log',
+'notloggedin'                => 'Belum masuk log',
+'nologin'                    => 'Belum mempunyai nama pengguna? $1.',
+'nologinlink'                => 'Daftarkan akun baru',
+'createaccount'              => 'Buat akun baru',
+'gotaccount'                 => 'Sudah terdaftar sebagai pengguna? $1.',
+'gotaccountlink'             => 'Masuk log',
+'createaccountmail'          => 'melalui surat-e',
+'badretype'                  => 'Kata sandi yang Anda masukkan salah.',
+'userexists'                 => 'Nama pengguna yang Anda masukkan telah dipakai. Silakan pilih nama yang lain.',
+'youremail'                  => 'Surat elektronik *:',
+'username'                   => 'Nama pengguna:',
+'uid'                        => 'ID pengguna:',
+'yourrealname'               => 'Nama asli *:',
+'yourlanguage'               => 'Bahasa antarmuka:',
+'yourvariant'                => 'Varian bahasa',
+'yournick'                   => 'Nama samaran:',
+'badsig'                     => 'Tanda tangan mentah tak sah; periksa tag HTML.',
+'email'                      => 'Surat elektronik',
+'prefs-help-email-enotif'    => 'Alamat ini juga digunakan untuk mengirim surat-e notifikasi pada Anda jika Anda memilih pilihan tersebut.',
+'prefs-help-realname'        => '* <strong>Nama asli</strong> (tidak wajib): jika Anda memberikannya, nama asli Anda akan digunakan untuk memberi pengenalan atas hasil kerja Anda.',
+'loginerror'                 => 'Kesalahan masuk log',
+'prefs-help-email'           => '* <strong>Surat elektronik</strong> (tidak wajib): Memungkinkan orang lain untuk menghubungi Anda melalui situs tanpa perlu memberikan alamat email Anda kepada mereka, dan juga dapat digunakan untuk mengirimkan kata sandi baru jika Anda lupa kata sandi Anda.',
+'nocookiesnew'               => "Akun pengguna telah dibuat, tetapi Anda belum masuk log. {{SITENAME}} menggunakan ''cookies'' untuk log pengguna. ''Cookies'' pada penjelajah web Anda dimatikan. Silakan aktifkan dan masuk log kembali dengan nama pengguna dan kata sandi Anda.",
+'nocookieslogin'             => "{{SITENAME}} menggunakan ''cookies'' untuk log penggunanya. ''Cookies'' pada penjelajah web Anda dimatikan. Silakan aktifkan dan coba lagi.",
+'noname'                     => 'Nama pengguna yang Anda masukkan tidak sah.',
+'loginsuccesstitle'          => 'Berhasil masuk log',
+'loginsuccess'               => "'''Anda sekarang masuk log di {{SITENAME}} sebagai \"\$1\".'''",
+'nosuchuser'                 => 'Tidak ada pengguna dengan nama "$1". Periksalah ejaan Anda, atau gunakan formulir di bawah ini untuk membuka akun baru.',
+'nosuchusershort'            => 'Tidak ada pengguna dengan nama "$1". Periksalah ejaan Anda.',
+'nouserspecified'            => 'Anda harus memasukkan nama pengguna.',
+'wrongpassword'              => 'Kata sandi yang Anda masukkan salah. Silakan coba lagi.',
+'wrongpasswordempty'         => 'Anda tidak memasukkan kata sandi. Silakan coba lagi.',
+'mailmypassword'             => 'Kirimkan kata sandi baru',
+'passwordremindertitle'      => 'Peringatan kata sandi dari {{SITENAME}}',
+'passwordremindertext'       => 'Seseorang (mungkin Anda, dari alamat IP $1) meminta kami mengirimkan kata sandi yang baru untuk {{SITENAME}} ($4). Kata sandi untuk pengguna "$2" sekarang adalah "$3". Anda disarankan segera masuk log dan mengganti kata sandi.',
+'noemail'                    => 'Tidak ada alamat surat-e yang tercatat untuk pengguna "$1".',
+'passwordsent'               => 'Kata sandi baru telah dikirimkan ke surat-e yang didaftarkan untuk "$1". Silakan masuk log kembali setelah menerima surat-e tersebut.',
+'blocked-mailpassword'       => 'Alamat IP Anda diblokir dari penyuntingan dan karenanya tidak diizinkan menggunakan fungsi pengingat kata sandi untuk mencegah penyalahgunaan.',
+'eauthentsent'               => 'Sebuah surat elektronik untuk konfirmasi telah dikirim ke alamat surat elektronik Anda. Anda harus mengikuti instruksi di dalam surat elektronik tersebut untuk melakukan konfirmasi bahwa alamat tersebut adalah benar kepunyaan Anda. {{SITENAME}} tidak akan mengaktifkan fitur surat elektronik jika langkah ini belum dilakukan.',
+'throttled-mailpassword'     => 'Suatu pengingat kata sandi telah dikirimkan dalam $1 jam terakhir. Untuk menghindari penyalahgunaan, hanya satu kata sandi yang akan dikirimkan setiap $1 jam.',
+'mailerror'                  => 'Kesalahan dalam mengirimkan surat-e: $1',
+'acct_creation_throttle_hit' => 'Maaf, Anda telah membuat $1 akun. Anda tidak dapat membuat akun lagi.',
+'emailauthenticated'         => 'Alamat surat-e Anda telah dikonfirmasi pada $1.',
+'emailnotauthenticated'      => 'Alamat surat-e Anda belum dikonfirmasi. Sebelum dikonfirmasi Anda tidak bisa menggunakan fitur surat elektronik.',
+'noemailprefs'               => 'Anda harus memasukkan suatu alamat surat-e untuk dapat menggunakan fitur ini.',
+'emailconfirmlink'           => 'Konfirmasikan alamat surat-e Anda',
+'invalidemailaddress'        => 'Alamat surat-e ini tidak dapat diterima karena formatnya tidak sesuai. Harap masukkan alamat surat-e dalam format yang benar atau kosongkan isian tersebut.',
+'accountcreated'             => 'Akun dibuat',
+'accountcreatedtext'         => 'Akun pengguna untuk $1 telah dibuat.',
+
+# Password reset dialog
+'resetpass'               => 'Atur ulang kata sandi akun',
+'resetpass_announce'      => 'Anda telah masuk log dengan kode sementara yang dikirim melalui surat-e. Untuk melanjutkan, Anda harus memasukkan kata sandi baru di sini:',
+'resetpass_text'          => '<!-- Tambahkan teks di sini -->',
+'resetpass_header'        => 'Atur ulang kata sandi',
+'resetpass_submit'        => 'Atur kata sandi dan masuk log',
+'resetpass_success'       => 'Kata sandi Anda telah berhasil diubah! Sekarang memproses masuk log Anda...',
+'resetpass_bad_temporary' => 'Kata sandi sementara salah. Anda mungkin pernah berhasil mengganti kata sandi Anda atau telah meminta kata sandi baru.',
+'resetpass_forbidden'     => 'Kata sandi tidak dapat diubah di wiki ini',
+'resetpass_missing'       => 'Data formulir tak dikenali.',
+
+# Edit page toolbar
+'bold_sample'     => 'Teks ini akan dicetak tebal',
+'bold_tip'        => 'Cetak tebal',
+'italic_sample'   => 'Teks ini akan dicetak miring',
+'italic_tip'      => 'Cetak miring',
+'link_sample'     => 'Judul pranala',
+'link_tip'        => 'Pranala internal',
+'extlink_sample'  => 'http://www.contoh.com/ judul pranala',
+'extlink_tip'     => 'Pranala luar (jangan lupa awalan http:// )',
+'headline_sample' => 'Teks judul',
+'headline_tip'    => 'Subbagian tingkat 1',
+'math_sample'     => 'Masukkan rumus di sini',
+'math_tip'        => 'Rumus matematika (LaTeX)',
+'nowiki_sample'   => 'Teks ini tidak akan diformat',
+'nowiki_tip'      => 'Abaikan pemformatan wiki',
+'image_sample'    => 'Contoh.jpg',
+'image_tip'       => 'Cantumkan berkas',
+'media_sample'    => 'Contoh.ogg',
+'media_tip'       => 'Pranala berkas media',
+'sig_tip'         => 'Tanda tangan Anda dengan tanda waktu',
+'hr_tip'          => 'Garis horisontal',
+
+# Edit pages
+'summary'                   => 'Ringkasan',
+'subject'                   => 'Subjek/judul',
+'minoredit'                 => 'Ini adalah suntingan kecil.',
+'watchthis'                 => 'Pantau halaman ini',
+'savearticle'               => 'Simpan halaman',
+'preview'                   => 'Pratayang',
+'showpreview'               => 'Lihat pratayang',
+'showlivepreview'           => 'Pratayang langsung',
+'showdiff'                  => 'Perlihatkan perubahan',
+'anoneditwarning'           => 'Anda tidak terdaftar masuk. Alamat IP Anda akan tercatat dalam sejarah (versi terdahulu) halaman ini.',
+'missingsummary'            => "'''Peringatan:''' Anda tidak memasukkan ringkasan penyuntingan. Jika Anda kembali menekan tombol Simpan, suntingan Anda akan disimpan tanpa ringkasan penyuntingan.",
+'missingcommenttext'        => 'Harap masukkan komentar di bawah ini.',
+'missingcommentheader'      => "'''Peringatan:''' Anda belum memberikan subjek atau judul untuk komentar Anda. Jika Anda kembali menekan Simpan, suntingan Anda akan disimpan tanpa komentar tersebut.",
+'summary-preview'           => 'Pratayang ringkasan',
+'subject-preview'           => 'Pratayang subyek/tajuk',
+'blockedtitle'              => 'Pengguna diblokir',
+'blockedtext'               => "<big>'''Nama pengguna atau alamat IP Anda telah diblokir.'''</big>
+
+Blokir dilakukan oleh $1. Alasan yang diberikan adalah ''$2''.
+
+Anda dapat menghubungi $1 atau [[{{MediaWiki:grouppage-sysop}}|pengurus lainnya]] untuk membicarakan hal ini.
+
+Anda tidak dapat menggunakan fitur 'Kirim surat-e pengguna ini' kecuali Anda telah memasukkan alamat surat-e yang sah di [[Special:Preferences|preferensi]] Anda.
+
+Alamat IP Anda adalah $3, dan ID pemblokiran adalah $5. Tolong sertakan salah satu atau kedua informasi ini pada setiap pertanyaan yang Anda buat",
+'blockedoriginalsource'     => "Isi sumber '''$1''' ditunjukkan berikut ini:",
+'blockededitsource'         => "Teks '''suntingan Anda''' terhadap '''$1''' ditunjukkan berikut ini:",
+'whitelistedittitle'        => 'Perlu masuk log untuk menyunting',
+'whitelistedittext'         => 'Anda harus $1 untuk dapat menyunting artikel.',
+'whitelistreadtitle'        => 'Perlu masuk log untuk membaca',
+'whitelistreadtext'         => 'Anda harus [[{{ns:special}}:Userlogin|masuk log]] untuk dapat membaca artikel.',
+'whitelistacctitle'         => 'Anda tidak diperbolehkan untuk membuat akun',
+'whitelistacctext'          => 'Untuk dapat membuat akun dalam wiki ini, Anda harus [[{{ns:special}}:Userlogin|masuk log]] dan mempunyai izin yang tepat.',
+'confirmedittitle'          => 'Konfirmasi surat-e diperlukan untuk melakukan penyuntingan',
+'confirmedittext'           => 'Anda harus mengkonfirmasikan dulu alamat surat-e Anda sebelum menyunting halaman. Harap masukkan dan validasikan alamat surat-e Anda sebelum melakukan penyuntingan. Alamat surat-e dapat diubah melalui [[{{ns:special}}:Preferences|halaman preferensi]]',
+'nosuchsectiontitle'        => 'Subbagian tersebut tak ditemukan',
+'nosuchsectiontext'         => 'Anda mencoba menyunting suatu subbagian tidak ada. Karena subbagian $1 tidak ada, suntingan Anda tak dapat disimpan.',
+'loginreqtitle'             => 'Harus masuk log',
+'loginreqlink'              => 'masuk log',
+'loginreqpagetext'          => 'Anda harus $1 untuk dapat melihat halaman lainnya.',
+'accmailtitle'              => 'Kata sandi telah terkirim.',
+'accmailtext'               => "Kata sandi untuk '$1' telah dikirimkan ke $2.",
+'newarticle'                => '(Baru)',
+'newarticletext'            => "Anda mengikuti pranala ke halaman yang belum tersedia. Untuk membuat halaman tersebut, ketiklah isi halaman di kotak di bawah ini (lihat [[{{MediaWiki:helppage}}|halaman bantuan]] untuk informasi lebih lanjut). Jika Anda tanpa sengaja sampai ke halaman ini, klik tombol '''back''' di penjelajah web anda.",
+'anontalkpagetext'          => "---- ''Ini adalah halaman pembicaraan seorang pengguna anonim yang belum membuat akun atau tidak menggunakannya. Karena ia tidak membuat akun, kami terpaksa harus memakai alamat IP-nya untuk mengenalinya. Alamat IP seperti ini dapat dipakai oleh beberapa pengguna yang berbeda. Jika Anda adalah seorang pengguna anonim dan merasa mendapatkan komentar-komentar miring, silakan [[{{ns:special}}:Userlogin|membuat akun atau masuk log]] untuk menghindari kerancuan dengan pengguna anonim lain di lain waktu.''",
+'noarticletext'             => 'Saat ini tidak ada teks dalam halaman ini. Anda dapat [[Special:Search/{{PAGENAME}}|melakukan pencarian untuk judul halaman ini]] di halaman-halaman lain atau [{{fullurl:{{FULLPAGENAME}}|action=edit}} sunting halaman ini].',
+'clearyourcache'            => "'''Catatan:''' Setelah menyimpan preferensi, Anda perlu membersihkan <em>cache</em> penjelajah web Anda untuk melihat perubahan. '''Mozilla / Firefox / Safari:''' tekan ''Ctrl-Shift-R'' (''Cmd-Shift-R'' pada Apple Mac); '''IE:''' tekan ''Ctrl-F5''; '''Konqueror:''': tekan ''F5''; '''Opera''' bersihkan <em>cache</em> melalui menu ''Tools→Preferences''.",
+'usercssjsyoucanpreview'    => "<strong>Tips:</strong> Gunakan tombol 'Lihat pratayang' untuk menguji CSS/JS baru Anda sebelum menyimpannya.",
+'usercsspreview'            => "'''Ingatlah bahwa yang Anda lihat hanyalah pratayang CSS Anda, dan bahwa pratayang tersebut belum disimpan!'''",
+'userjspreview'             => "'''Ingatlah bahwa yang Anda lihat hanyalah pratayang JavaScript Anda, dan bahwa pratayang tersebut belum disimpan!'''",
+'userinvalidcssjstitle'     => "'''Peringatan:''' Kulit \"\$1\" tidak ditemukan. Harap diingat bahwa halaman .css dan .js menggunakan huruf kecil, contoh {{ns:user}}:Foo/monobook.css dan bukannya {{ns:user}}:Foo/Monobook.css.",
+'updated'                   => '(Diperbarui)',
+'note'                      => '<strong>Catatan:</strong>',
+'previewnote'               => 'Ingatlah bahwa ini hanyalah pratayang yang belum disimpan!',
+'previewconflict'           => 'Pratayang ini mencerminkan teks pada bagian atas kotak suntingan teks sebagaimana akan terlihat bila Anda menyimpannya.',
+'session_fail_preview'      => '<strong>Maaf, kami tidak dapat mengolah suntingan Anda akibat terhapusnya data sesi. Silakan coba sekali lagi. Jika masih tidak berhasil, cobalah keluar log dan masuk log kembali.</strong>',
+'session_fail_preview_html' => "<strong>Maaf! Kami tidak dapat memproses suntingan Anda karena hilangnya data sesi.</strong>
+
+''Karena wiki ini mengizinkan penggunaan HTML mentah, pratayang disembunyikan sebagai pencegahan terhadap serangan JavaScript.''
+
+<strong>Jika ini merupakan upaya suntingan yang sahih, silakan coba lagi. Jika masih tetap tidak berhasil, cobalah keluar log dan masuk kembali.</strong>",
+'importing'                 => 'Sedang mengimpor $1',
+'editing'                   => 'Menyunting $1',
+'editinguser'               => 'Menyunting $1',
+'editingsection'            => 'Menyunting $1 (bagian)',
+'editingcomment'            => 'Menyunting $1 (komentar)',
+'editconflict'              => 'Konflik penyuntingan: $1',
+'explainconflict'           => 'Orang lain telah menyunting halaman ini sejak Anda mulai menyuntingnya. Bagian atas teks ini mengandung teks halaman saat ini. Perubahan yang Anda lakukan ditunjukkan pada bagian bawah teks. Anda hanya perlu menggabungkan perubahan Anda dengan teks yang telah ada. <strong>Hanya</strong> teks pada bagian atas halamanlah yang akan disimpan apabila Anda menekan "Simpan halaman".<p>',
+'yourtext'                  => 'Teks Anda',
+'storedversion'             => 'Versi tersimpan',
+'nonunicodebrowser'         => '<strong>PERINGATAN: Penjelajah web Anda tidak mendukung Unicode, silakan ganti penjelajah web Anda sebelum menyunting artikel.</strong>',
+'editingold'                => "'''Peringatan:''' Anda menyunting revisi lama suatu halaman. Jika Anda menyimpannya, perubahan-perubahan yang dibuat sejak revisi ini akan hilang.",
+'yourdiff'                  => 'Perbedaan',
+'copyrightwarning'          => 'Perhatikan bahwa semua kontribusi terhadap {{SITENAME}} dianggap dilisensikan di bawah lisensi $2 (lihat $1 untuk informasi lebih lanjut). Jika Anda tidak ingin tulisan Anda disunting dan disebarkan ke halaman web yang lain, jangan kirimkan artikel Anda ke sini.<br />Anda juga berjanji bahwa ini adalah hasil karya Anda sendiri, atau disalin dari sumber milik umum atau sumber bebas yang lain. <strong>JANGAN KIRIMKAN KARYA YANG DILINDUNGI HAK CIPTA TANPA IZIN!</strong>',
+'copyrightwarning2'         => 'Perhatikan bahwa semua kontribusi terhadap {{SITENAME}} dapat disunting, diubah, atau dihapus oleh penyumbang lainnya. Jika Anda tidak ingin tulisan Anda disunting orang lain, jangan kirimkan artikel Anda ke sini.<br />Anda juga berjanji bahwa ini adalah hasil karya Anda sendiri, atau disalin dari sumber milik umum atau sumber bebas yang lain (lihat $1 untuk informasi lebih lanjut). <strong>JANGAN KIRIMKAN KARYA YANG DILINDUNGI HAK CIPTA TANPA IZIN!</strong>',
+'longpagewarning'           => "'''PERINGATAN: Halaman ini panjangnya adalah $1 kilobita; beberapa penjelajah web mungkin mengalami masalah dalam menyunting halaman yang panjangnya 32 kb atau lebih. Harap pertimbangkan untuk memecah halaman menjadi beberapa bagian yang lebih kecil.'''",
+'longpageerror'             => '<strong>KESALAHAN: Teks yang Anda kirimkan sebesar $1 kilobita, yang berarti lebih besar dari jumlah maksimum $2 kilobita. Teks tidak dapat disimpan.</strong>',
+'readonlywarning'           => '<strong>PERINGATAN: Basis data sedang dikunci karena pemeliharaan, sehingga saat ini Anda tidak akan dapat menyimpan hasil penyuntingan Anda. Anda mungkin perlu memindahkan hasil penyuntingan Anda ini ke tempat lain untuk disimpan belakangan.</strong>',
+'protectedpagewarning'      => '<strong>PERINGATAN:  Halaman ini telah dikunci sehingga hanya pengguna dengan hak akses pengurus saja yang dapat menyuntingnya.</strong>',
+'semiprotectedpagewarning'  => "'''Catatan:''' Halaman ini sedang dilindungi, sehingga hanya pengguna terdaftar yang bisa menyuntingnya.",
+'cascadeprotectedwarning'   => "<strong>PERINGATAN: Halaman ini telah dikunci sehingga hanya pengguna dengan hak akses pengurus saja yang dapat menyuntingnya karena disertakan dalam {{PLURAL:$1|halaman|halaman-halaman}} berikut yang telah dilindungi dengan opsi 'perlindungan runtun':</strong>",
+'templatesused'             => 'Templat yang digunakan di halaman ini:',
+'templatesusedpreview'      => 'Templat yang digunakan di pratayang ini:',
+'templatesusedsection'      => 'Templat yang digunakan di bagian ini:',
+'template-protected'        => '(dilindungi)',
+'template-semiprotected'    => '(semi-perlindungan)',
+'edittools'                 => '<!-- Teks di sini akan dimunculkan dibawah isian suntingan dan pemuatan.-->',
+'nocreatetitle'             => 'Pembuatan halaman baru dibatasi',
+'nocreatetext'              => 'Situs ini membatasi kemampuan membuat halaman baru. Anda dapat kembali dan menyunting halaman yang telah ada, atau silakan [[{{ns:special}}:Userlogin|masuk log atau mendaftar]]',
+
+# "Undo" feature
+'undo-success' => 'Suntingan ini dapat dibatalkan. Tolong cek perbandingan di bawah untuk meyakinkan bahwa benar itu yang Anda ingin lakukan, lalu simpan perubahan tersebut untuk menyelesaikan pembatalan suntingan.',
+'undo-failure' => 'Suntingan ini tidak dapat dibatalkan karena konflik penyuntingan antara.',
+'undo-summary' => '←Membatalkan revisi $1 oleh [[Special:Contributions/$2|$2]] ([[User talk:$2|Bicara]])',
+
+# Account creation failure
+'cantcreateaccounttitle' => 'Akun tak dapat dibuat',
+'cantcreateaccounttext'  => 'Pembuatan akun dari alamat IP ini (<strong>$1</strong>) diblokir.
+Hal ini mungkin disebabkan adanya vandalisme berulang yang berasal dari sekolah atau penyedia jasa Internet Anda.',
+
+# History pages
+'revhistory'          => 'Sejarah revisi',
+'viewpagelogs'        => 'Lihat log halaman ini',
+'nohistory'           => 'Tidak ada sejarah penyuntingan untuk halaman ini',
+'revnotfound'         => 'Revisi tidak ditemukan',
+'revnotfoundtext'     => 'Revisi lama halaman yang Anda minta tidak dapat ditemukan. Silakan periksa URL yang digunakan untuk mengakses halaman ini.',
+'loadhist'            => 'Memuat halaman sejarah',
+'currentrev'          => 'Revisi sekarang',
+'revisionasof'        => 'Revisi per $1',
+'revision-info'       => 'Revisi per $1; $2',
+'previousrevision'    => '←Revisi sebelumnya',
+'nextrevision'        => 'Revisi selanjutnya→',
+'currentrevisionlink' => 'Revisi sekarang',
+'cur'                 => 'skr',
+'next'                => 'selanjutnya',
+'last'                => 'akhir',
+'orig'                => 'asli',
+'page_first'          => 'pertama',
+'page_last'           => 'terakhir',
+'histlegend'          => "Pilih dua tombol radio lalu tekan tombol ''bandingkan'' untuk membandingkan versi. Klik suatu tanggal untuk melihat versi halaman pada tanggal tersebut.<br />(skr) = perbedaan dengan versi sekarang, (akhir) = perbedaan dengan versi sebelumnya, '''k''' = suntingan kecil, '''b''' = suntingan bot, → = suntingan bagian, ← = ringkasan otomatis",
+'deletedrev'          => '[dihapus]',
+'histfirst'           => 'Terlama',
+'histlast'            => 'Terbaru',
+'historysize'         => '($1 bita)',
+'historyempty'        => '(kosong)',
+
+# Revision feed
+'history-feed-title'          => 'Riwayat revisi',
+'history-feed-description'    => 'Riwayat revisi halaman ini di wiki',
+'history-feed-item-nocomment' => '$1 pada $2', # user at time
+'history-feed-empty'          => 'Halaman yang diminta tak ditemukan. Kemungkinan telah dihapus dari wiki, atau diberi nama baru. Coba [[{{ns:special}}:Search|lakukan pencarian di wiki]] untuk halaman baru yang relevan.',
+
+# Revision deletion
+'rev-deleted-comment'         => '(komentar dihapus)',
+'rev-deleted-user'            => '(nama pengguna dihapus)',
+'rev-deleted-event'           => '(isi dihapus)',
+'rev-deleted-text-permission' => '<div class="mw-warning plainlinks">Riwayat revisi halaman ini telah dihapus dari arsip publik. Detil mungkin tersedia di [{{fullurl:{{ns:special}}:Log/delete|page={{FULLPAGENAMEE}}}} log penghapusan].</div>',
+'rev-deleted-text-view'       => '<div class="mw-warning plainlinks">Riwayat revisi halaman ini telah dihapus dari arsip publik. Sebagai seorang pengurus situs, Anda dapat melihatnya; detil mungkin tersedia di [{{fullurl:{{ns:special}}:Log/delete|page={{FULLPAGENAMEE}}}} log penghapusan].</div>',
+'rev-delundel'                => 'tampilkan/sembunyikan',
+'revisiondelete'              => 'Hapus/batal hapus revisi',
+'revdelete-nooldid-title'     => 'Target revisi tak ditemukan',
+'revdelete-nooldid-text'      => 'Anda belum memberikan target revisi untuk menjalankan fungsi ini.',
+'revdelete-selected'          => "{{PLURAL:$2|Revisi terpilih|Revisi terpilih}} dari '''$1'''",
+'logdelete-selected'          => "{{PLURAL:$2|Log terpilih|Log terpilih}} untuk '''$1''':",
+'revdelete-text'              => 'Revisi dan tindakan yang telah dihapus akan tetap muncul di halaman versi terdahulu, tapi teks isi tidak bisa diakses publik.
+
+Pengurus lain akan dapat mengakses isi tersebunyi dan dapat membatalkan penghapusan melalui antarmuka yang sama, kecuali jika ada pembatasan lain yang dibuat oleh operator situs',
+'revdelete-legend'            => 'Atur batasan:',
+'revdelete-hide-text'         => 'Sembunyikan teks revisi',
+'revdelete-hide-name'         => 'Sembunyikan tindakan dan target',
+'revdelete-hide-comment'      => 'Tampilkan/sembunyikan ringkasan suntingan',
+'revdelete-hide-user'         => 'Sembunyikan nama pengguna/IP penyunting',
+'revdelete-hide-restricted'   => 'Terapkan pembatasan bagi pengurus dan pengguna lainnya',
+'revdelete-suppress'          => 'Sembunyikan juga dari pengurus',
+'revdelete-hide-image'        => 'Sembunyikan isi berkas',
+'revdelete-unsuppress'        => 'Hapus batasan pada revisi yang dikembalikan',
+'revdelete-log'               => 'Log ringkasan:',
+'revdelete-submit'            => 'Terapkan pada revisi terpilih',
+'revdelete-logentry'          => 'ubah tampilan revisi untuk [[$1]]',
+'logdelete-logentry'          => 'ubah aturan penyembunyian dari [[$1]]',
+'revdelete-logaction'         => '$1 revisi telah diubah menjadi mode $2',
+'logdelete-logaction'         => '$1 tindakan terhadap [[$3]] diubah menjadi mode $2',
+'revdelete-success'           => 'Aturan penyembunyian revisi berhasil diterapkan.',
+'logdelete-success'           => 'Aturan penyembunyian tindakan berhasil diterapkan.',
+
+# Oversight log
+'oversightlog'    => 'Log pengawas',
+'overlogpagetext' => 'Berikut ini adalah daftar terbaru penghapusan dan pemblokiran yang melibatkan isi yang disembunyikan dari pengurus. Lihat [[Special:Ipblocklist|daftar blokir IP]] untuk daftar terkini pencekalan dan pemblokiran yang berlaku.',
+
+# Diffs
+'difference'                => '(Perbedaan antarrevisi)',
+'loadingrev'                => 'memuat revisi untuk dibandingkan',
+'lineno'                    => 'Baris $1:',
+'editcurrent'               => 'Sunting versi sekarang dari halaman ini',
+'selectnewerversionfordiff' => 'Pilih sebuah versi yang lebih baru untuk perbandingan',
+'selectolderversionfordiff' => 'Pilih sebuah versi yang lebih lama untuk perbandingan',
+'compareselectedversions'   => 'Bandingkan versi terpilih',
+'editundo'                  => 'batalkan',
+'diff-multi'                => '({{plural:$1|Satu|$1}} revisi antara tak ditampilkan.)',
+
+# Search results
+'searchresults'         => 'Hasil pencarian',
+'searchresulttext'      => 'Untuk informasi lebih lanjut tentang pencarian di {{SITENAME}}, lihat [[{{MediaWiki:helppage}}|halaman bantuan]].',
+'searchsubtitle'        => "Anda mencari '''[[:$1]]'''",
+'searchsubtitleinvalid' => "Anda mencari '''$1'''",
+'badquery'              => 'Format permintaan pencarian salah',
+'badquerytext'          => 'Kami tidak dapat memproses permintaan Anda. Hal ini mungkin disebabkan karena Anda mencoba mencari kata yang panjangnya kurang dari tiga huruf, yang masih belum didukung oleh sistem ini. Hal ini juga dapat disebabkan oleh kesalahan pengetikan ekspresi, misalnya "fish and and scales". Silakan coba permintaan yang lain.',
+'matchtotals'           => 'Permintaan "$1" cocok dengan $2 judul halaman dan teks dari $3 artikel.',
+'noexactmatch'          => "'''Tidak ada halaman yang berjudul \"\$1\".''' Anda dapat [[:\$1|membuat halaman ini]].",
+'titlematches'          => 'Judul artikel yang sama',
+'notitlematches'        => 'Tidak ada judul halaman yang cocok',
+'textmatches'           => 'Teks artikel yang cocok',
+'notextmatches'         => 'Tidak ada teks halaman yang cocok',
+'prevn'                 => '$1 lebih baru',
+'nextn'                 => '$1 lebih lama',
+'viewprevnext'          => 'Lihat ($1) ($2) ($3).',
+'showingresults'        => "Di bawah ini ditampilkan hingga {{PLURAL:$1|'''1''' hasil|'''$1''' hasil}}, dimulai dari #'''$2'''.",
+'showingresultsnum'     => "Di bawah ini ditampilkan{{PLURAL:$3|'''1''' hasil|'''$3''' hasil}}, dimulai dari #'''$2'''.",
+'nonefound'             => "'''Catatan''': Kegagalan pencarian biasanya disebabkan oleh pencarian kata-kata umum dalam bahasa Inggris, seperti \"have\" dan \"from\", yang biasanya tidak diindeks, atau dengan menentukan lebih dari satu kriteria pencarian (hanya halaman yang mengandung semua kriteria pencarianlah yang akan ditampilkan dalam hasil pencarian)",
+'powersearch'           => 'Cari',
+'powersearchtext'       => 'Cari dalam ruang nama:<br />$1<br />$2 Juga tampilkan peralihan<br />Cari $3 $9',
+'searchdisabled'        => '<p style="margin: 1.5em 2em 1em">Mesin pencari {{SITENAME}} sementara dimatikan karena masalah kinerja. Anda dapat mencari melalui Google untuk sementara waktu. <span style="font-size: 89%; display: block; margin-left: .2em">Indeks Google untuk {{SITENAME}} mungkin belum diperbaharui. Jika istilah pencarian berisi garis bawah, gantikan dengan spasi.</span></p>',
+'blanknamespace'        => '(Utama)',
+
+# Preferences page
+'preferences'              => 'Preferensi',
+'mypreferences'            => 'Preferensi saya',
+'prefsnologin'             => 'Belum masuk log',
+'prefsnologintext'         => 'Anda harus [[{{ns:special}}:Userlogin|masuk log]] untuk menetapkan preferensi Anda.',
+'prefsreset'               => 'Preferensi telah dikembalikan ke konfigurasi baku.',
+'qbsettings'               => 'Pengaturan bar pintas',
+'qbsettings-none'          => 'Tidak ada',
+'qbsettings-fixedleft'     => 'Tetap sebelah kiri',
+'qbsettings-fixedright'    => 'Tetap sebelah kanan',
+'qbsettings-floatingleft'  => 'Mengambang sebelah kiri',
+'qbsettings-floatingright' => 'Mengambang sebelah kanan',
+'changepassword'           => 'Ganti kata sandi',
+'skin'                     => 'Kulit',
+'math'                     => 'Math',
+'dateformat'               => 'Format tanggal',
+'datedefault'              => 'Tak ada preferensi',
+'datetime'                 => 'Waktu',
+'math_failure'             => 'Gagal memparse',
+'math_unknown_error'       => 'Kesalahan yang tidak diketahui',
+'math_unknown_function'    => 'fungsi yang tidak diketahui',
+'math_lexing_error'        => 'kesalahan lexing',
+'math_syntax_error'        => 'kesalahan sintaks',
+'math_image_error'         => 'Konversi PNG gagal; periksa apakah latex, dvips, gs, dan convert terinstal dengan benar',
+'math_bad_tmpdir'          => 'Tidak dapat menulisi atau membuat direktori sementara math',
+'math_bad_output'          => 'Tidak dapat menulisi atau membuat direktori keluaran math',
+'math_notexvc'             => 'Executable texvc hilang; silakan lihat math/README untuk cara konfigurasi.',
+'prefs-personal'           => 'Profil',
+'prefs-rc'                 => 'Perubahan terbaru',
+'prefs-watchlist'          => 'Pemantauan',
+'prefs-watchlist-days'     => 'Jumlah hari yang ditampilkan di daftar pantauan:',
+'prefs-watchlist-edits'    => 'Jumlah hari yang ditampilkan di daftar pantauan yang lebih lengkap:',
+'prefs-misc'               => 'Lain-lain',
+'saveprefs'                => 'Simpan',
+'resetprefs'               => 'Reset',
+'oldpassword'              => 'Kata sandi lama:',
+'newpassword'              => 'Kata sandi baru:',
+'retypenew'                => 'Ketik ulang kata sandi baru:',
+'textboxsize'              => 'Penyuntingan',
+'rows'                     => 'Baris:',
+'columns'                  => 'Kolom:',
+'searchresultshead'        => 'Pencarian',
+'resultsperpage'           => 'Hasil per halaman:',
+'contextlines'             => 'Baris ditampilkan per hasil:',
+'contextchars'             => 'Karakter untuk konteks per baris:',
+'stubthreshold'            => 'Ambang batas tampilan rintisan:',
+'recentchangesdays'        => 'Jumlah hari yang ditampilkan di perubahan terbaru:',
+'recentchangescount'       => 'Jumlah suntingan yang ditampilkan di perubahan terbaru:',
+'savedprefs'               => 'Preferensi Anda telah disimpan',
+'timezonelegend'           => 'Zona waktu',
+'timezonetext'             => 'Masukkan perbedaan waktu (dalam jam) antara waktu setempat dengan waktu server (UTC).',
+'localtime'                => 'Waktu setempat',
+'timezoneoffset'           => 'Perbedaan:',
+'servertime'               => 'Waktu server sekarang adalah',
+'guesstimezone'            => 'Isikan dari penjelajah web',
+'allowemail'               => 'Ijinkan pengguna lain mengirim surat-e',
+'defaultns'                => 'Cari dalam ruang nama berikut ini secara baku:',
+'default'                  => 'baku',
+'files'                    => 'Berkas',
+
+# User rights
+'userrights-lookup-user'     => 'Mengatur kelompok pengguna',
+'userrights-user-editname'   => 'Masukkan nama pengguna:',
+'editusergroup'              => 'Sunting kelompok pengguna',
+'userrights-editusergroup'   => 'Sunting kelompok pengguna',
+'saveusergroups'             => 'Simpan kelompok pengguna',
+'userrights-groupsmember'    => 'Anggota dari:',
+'userrights-groupsavailable' => 'Kelompok yang tersedia:',
+'userrights-groupshelp'      => 'Pilih kelompok yang Anda ingin hapus dari atau tambahkan pada pengguna. Kelompok yang tak dipilih tak akan diganti. Anda dapat membatalkan pilihan dengan menekan tombol CTRL + Klik kiri',
+'userrights-reason'          => 'Alasan pengubahan:',
+
+# Groups
+'group'            => 'Kelompok:',
+'group-bot'        => 'Bot',
+'group-sysop'      => 'Pengurus',
+'group-bureaucrat' => 'Birokrat',
+'group-all'        => '(semua)',
+
+'group-bot-member'        => 'Bot',
+'group-sysop-member'      => 'Pengurus',
+'group-bureaucrat-member' => 'Birokrat',
+
+'grouppage-bot'        => '{{ns:project}}:Bot',
+'grouppage-sysop'      => '{{ns:project}}:Pengurus',
+'grouppage-bureaucrat' => '{{ns:project}}:Birokrat',
+
+# User rights log
+'rightslog'      => 'Log perubahan hak akses',
+'rightslogtext'  => 'Di bawah ini adalah log perubahan terhadap hak-hak pengguna.',
+'rightslogentry' => 'mengganti keanggotaan group untuk $1 dari $2 menjadi $3',
+'rightsnone'     => '(tidak ada)',
+
+# Recent changes
+'nchanges'                          => '$1 perubahan',
+'recentchanges'                     => 'Perubahan terbaru',
+'recentchangestext'                 => "Temukan perubahan terbaru dalam wiki di halaman ini. Keterangan: (beda) = perubahan, (versi) = sejarah revisi, '''B''' = halaman baru, '''k''' = suntingan kecil, '''b''' = suntingan bot, (± ''bita'') = jumlah penambahan/pengurangan isi, → = suntingan bagian, ← = ringkasan otomatis.
+----",
+'recentchanges-feed-description'    => 'Temukan perubahan terbaru dalam wiki di asupan ini.',
+'rcnote'                            => "Di bawah ini adalah '''$1''' perubahan terbaru dalam '''$2''' hari terakhir sampai $3.",
+'rcnotefrom'                        => 'Di bawah ini adalah perubahan sejak <strong>$2</strong> (ditampilkan sampai <strong>$1</strong> perubahan).',
+'rclistfrom'                        => 'Perlihatkan perubahan terbaru sejak $1',
+'rcshowhideminor'                   => '$1 suntingan kecil',
+'rcshowhidebots'                    => '$1 bot',
+'rcshowhideliu'                     => '$1 pengguna masuk log',
+'rcshowhideanons'                   => '$1 pengguna anon',
+'rcshowhidepatr'                    => '$1 suntingan terpatroli',
+'rcshowhidemine'                    => '$1 suntingan saya',
+'rclinks'                           => 'Perlihatkan $1 perubahan terbaru dalam $2 hari terakhir<br />$3',
+'diff'                              => 'beda',
+'hist'                              => 'versi',
+'hide'                              => 'Sembunyikan',
+'show'                              => 'Tampilkan',
+'minoreditletter'                   => 'k',
+'newpageletter'                     => 'B',
+'boteditletter'                     => 'b',
+'sectionlink'                       => '→',
+'number_of_watching_users_pageview' => '[$1 pemantau]',
+'rc_categories'                     => 'Batasi sampai kategori (dipisah dengan "|")',
+'rc_categories_any'                 => 'Apapun',
+
+# Recent changes linked
+'recentchangeslinked'          => 'Perubahan terkait',
+'recentchangeslinked-noresult' => 'Tidak terjadi perubahan pada halaman-halaman terkait selama periode yang telah ditentukan.',
+'recentchangeslinked-summary'  => "Halaman istimewa ini memberikan daftar perubahan terakhir pada halaman-halaman terkait. Halaman yang Anda pantau ditandai dengan '''cetak tebal'''.",
+
+# Upload
+'upload'                      => 'Pemuatan',
+'uploadbtn'                   => 'Muatkan berkas',
+'reupload'                    => 'Muat ulang',
+'reuploaddesc'                => 'Kembali ke formulir pemuatan',
+'uploadnologin'               => 'Belum masuk log',
+'uploadnologintext'           => 'Anda harus [[{{ns:special}}:Userlogin|masuk log]] untuk dapat memuatkan berkas.',
+'upload_directory_read_only'  => 'Direktori pemuatan ($1) tidak dapat ditulis oleh server web.',
+'uploaderror'                 => 'Kesalahan pemuatan',
+'uploadtext'                  => "Gunakan isian di bawah untuk memuat berkas. Gunakan [[{{ns:special}}:Imagelist|daftar berkas]] atau [[{{ns:special}}:Log/upload|log pemuatan]] untuk menampilkan atau mencari berkas atau gambar yang telah dimuat sebelumnya.
+
+Untuk menampilkan atau menyertakan berkas atau gambar pada suatu halaman, gunakan pranala dengan format
+'''<nowiki>[[</nowiki>{{ns:image}}<nowiki>:Berkas.jpg]]</nowiki>''',
+'''<nowiki>[[</nowiki>{{ns:image}}<nowiki>:Berkas.png|teks alternatif]]</nowiki>''' atau
+'''<nowiki>[[</nowiki>{{ns:media}}<nowiki>:Berkas.ogg]]</nowiki>''' untuk langsung menuju berkas yang dimaksud.",
+'uploadlog'                   => 'log pemuatan',
+'uploadlogpage'               => 'Log pemuatan',
+'uploadlogpagetext'           => 'Di bawah ini adalah log pemuatan berkas. Semua waktu yang ditunjukkan adalah waktu server (UTC).',
+'filename'                    => 'Nama berkas',
+'filedesc'                    => 'Ringkasan',
+'fileuploadsummary'           => 'Ringkasan:',
+'filestatus'                  => 'Status hak cipta',
+'filesource'                  => 'Sumber',
+'uploadedfiles'               => 'Berkas yang telah dimuat',
+'ignorewarning'               => 'Abaikan peringatan dan langsung simpan berkas.',
+'ignorewarnings'              => 'Abaikan peringatan apapun',
+'minlength'                   => 'Nama berkas sekurang-kurangnya harus tiga huruf.',
+'illegalfilename'             => 'Nama berkas "$1" mengandung aksara yang tidak diperbolehkan ada dalam judul halaman. Silakan ubah nama berkas tersebut dan cobalah memuatkannya kembali.',
+'badfilename'                 => 'Nama berkas telah diubah menjadi "$1".',
+'filetype-badmime'            => 'Berkas dengan tipe MIME "$1" tidak diperkenankan untuk dimuat.',
+'filetype-badtype'            => "'''\".\$1\"''' adalah tipe berkas yang tak diperkenankan.
+: Daftar tipe berkas yang diperkenankan: \$2",
+'filetype-missing'            => 'Berkas tak memiliki ekstensi (misalnya ".jpg").',
+'large-file'                  => 'Ukuran berkas disarankan untuk tidak melebihi $1 bita; berkas ini berukuran $2 bita.',
+'largefileserver'             => 'Berkas ini lebih besar dari pada yang diizinkan server.',
+'emptyfile'                   => 'Berkas yang Anda muatkan kelihatannya kosong. Hal ini mungkin disebabkan karena adanya kesalahan ketik pada nama berkas. Silakan pastikan apakah Anda benar-benar ingin memuatkan berkas ini.',
+'fileexists'                  => 'Berkas dengan nama tersebut telah ada, harap periksa <strong><tt>$1</tt></strong> jika Anda tidak yakin untuk mengubahnya.',
+'fileexists-extension'        => 'Berkas dengan nama serupa telah ada:<br />
+Nama berkas yang akan dimuat: <strong><tt>$1</tt></strong><br />
+Nama berkas yang telah ada: <strong><tt>$2</tt></strong><br />
+Satu-satunya perbedaan adalah pada kapitalisasi ekstensi. Harap cek apakah berkas tersebut sama.',
+'fileexists-thumb'            => "'''<center>Berkas yang tersedia</center>'''",
+'fileexists-thumbnail-yes'    => 'Berkas ini tampaknya merupakan gambar dengan ukuran yang lebih kecil <i>(thumbnail)</i>. Harap cek berkas <strong><tt>$1</tt></strong>.<br />
+Jika berkas tersebut merupakan berkas yang sama, tidak perlu untuk memuat kembali versi kecil lainnya.',
+'file-thumbnail-no'           => 'Nama berkas dimulai dengan <strong><tt>$1</tt></strong>. Tampaknya berkas ini merupakan gambar dengan ukuran yang lebih kecil <i>(thumbnail)</i>.
+Jika Anda memiliki versi resolusi penuh dari gambar ini, harap muatkan berkas tersebut. Jika tidak, harap ubah nama berkas ini.',
+'fileexists-forbidden'        => 'Ditemukan berkas dengan nama yang sama; harap kembali dan muatkan berkas dengan nama lain. [[{{ns:image}}:$1|thumb|center|$1]]',
+'fileexists-shared-forbidden' => 'Ditemukan berkas lain dengan nama yang sama di repositori bersama; harap kembali dan muatkan berkas dengan nama lain. [[{{ns:image}}:$1|thumb|center|$1]]',
+'successfulupload'            => 'Berhasil dimuat',
+'fileuploaded'                => 'Berkas "$1" berhasil dimuatkan. Silakan ikuti pranala berikut: $2 ke halaman deskripsi dan isikan informasi tentang berkas tersebut, seperti dari mana berkas tersebut berasal, kapan berkas itu dibuat dan oleh siapa, dan informasi lain yang Anda ketahui.',
+'uploadwarning'               => 'Peringatan pemuatan',
+'savefile'                    => 'Simpan berkas',
+'uploadedimage'               => 'memuat "[[$1]]"',
+'uploaddisabled'              => 'Maaf, fasilitas pemuatan dimatikan.',
+'uploaddisabledtext'          => 'Pemuatan berkas di tidak diizinkan di wiki ini.',
+'uploadscripted'              => 'Berkas ini mengandung HTML atau kode yang dapat diinterpretasikan dengan keliru oleh penjelajah web.',
+'uploadcorrupt'               => 'Berkas tersebut rusak atau ekstensinya salah. Silakan periksa berkas tersebut dan muatkan kembali.',
+'uploadvirus'                 => 'Berkas tersebut mengandung virus! Detil: $1',
+'sourcefilename'              => 'Nama berkas sumber',
+'destfilename'                => 'Nama berkas tujuan',
+'watchthisupload'             => 'Pantau halaman ini',
+'filewasdeleted'              => 'Suatu berkas dengan nama ini pernah dimuat dan selanjutnya dihapus. Harap cek $1 sebelum memuat lagi berkas tersebut.',
+
+'upload-proto-error'      => 'Protokol tak tepat',
+'upload-proto-error-text' => 'Pemuatan jarak jauh membutuhkan URL yang diawali dengan <code>http://</code> atau <code>ftp://</code>.',
+'upload-file-error'       => 'Kesalahan internal',
+'upload-file-error-text'  => 'Suatu kesalahan internal terjadi sewaktu mencoba membuat berkas temporer di server. Silakan kontak administrator sistem.',
+'upload-misc-error'       => 'Kesalahan pemuatan yang tak dikenal',
+'upload-misc-error-text'  => 'Suatu kesalahan yang tak dikenal terjadi sewaktu pemuatan. Harap pastikan bahwa URL tersebut valid dan dapat diakses dan silakan coba lagi. Jika masalah ini tetap terjadi, kontak administrator sistem.',
+
+# Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
+'upload-curl-error6'       => 'URL tidak dapat dihubungi',
+'upload-curl-error6-text'  => 'URL yang diberikan tak dapat dihubungi. Harap periksa ulang bahwa URL tersebut tepat dan situs itu sedang aktif.',
+'upload-curl-error28'      => 'Pemuatan lewat waktu',
+'upload-curl-error28-text' => 'Situs yang dituju terlalu lambat merespon. Tolong cek apakah situs tersebut aktif, tunggu sebentar, dan coba lagi. Mungkin Anda perlu mencobanya di saat yang lebih longgar.',
+
+'license'            => 'Jenis lisensi',
+'nolicense'          => 'Belum dipilih',
+'upload_source_url'  => ' (suatu URL valid yang dapat diakses publik)',
+'upload_source_file' => ' (suatu berkas di komputer Anda)',
+
+# Image list
+'imagelist'                 => 'Daftar berkas',
+'imagelisttext'             => "Di bawah ini adalah daftar '''$1''' berkas diurutkan $2.",
+'imagelistforuser'          => 'Hanya berkas yang dimuat oleh $1.',
+'getimagelist'              => 'mengambil daftar berkas',
+'ilsubmit'                  => 'Cari',
+'showlast'                  => 'Tampilkan $1 berkas terakhir diurutkan $2.',
+'byname'                    => 'berdasarkan nama',
+'bydate'                    => 'berdasarkan tanggal',
+'bysize'                    => 'berdasarkan ukuran',
+'imgdelete'                 => 'hps',
+'imgdesc'                   => 'desk',
+'imgfile'                   => 'berkas',
+'imglegend'                 => 'Keterangan: (desk) = lihat/sunting deskripsi berkas.',
+'imghistory'                => 'Versi terdahulu',
+'revertimg'                 => 'kbl',
+'deleteimg'                 => 'hps',
+'deleteimgcompletely'       => 'Hapus semua revisi',
+'imghistlegend'             => 'Klik suatu tanggal untuk melihat versi berkas pada tanggal tersebut.<br />Keterangan: (skr) = ini adalah berkas yang sekarang, (hps) = hapus versi lama ini, (kbl) = kembalikan ke versi lama ini.',
+'imagelinks'                => 'Pranala',
+'linkstoimage'              => 'Halaman-halaman berikut memiliki pranala ke berkas ini:',
+'nolinkstoimage'            => 'Tidak ada halaman yang memiliki pranala ke berkas ini.',
+'sharedupload'              => 'Berkas ini adalah pemuatan bersama yang mungkin juga dipakai oleh proyek lain.',
+'shareduploadwiki'          => 'Lihat $1 untuk informasi lebih lanjut.',
+'shareduploadwiki-linktext' => 'halaman deskripsi berkas',
+'noimage'                   => 'Tidak ada berkas dengan nama tersebut, Anda dapat $1.',
+'noimage-linktext'          => 'memuat berkas',
+'uploadnewversion-linktext' => 'Muatkan versi yang lebih baru dari berkas ini',
+'imagelist_date'            => 'Tanggal',
+'imagelist_name'            => 'Nama',
+'imagelist_user'            => 'Pengguna',
+'imagelist_size'            => 'Ukuran (bita)',
+'imagelist_description'     => 'Deskripsi',
+'imagelist_search_for'      => 'Cari nama berkas:',
+
+# MIME search
+'mimesearch'         => 'Pencarian MIME',
+'mimesearch-summary' => 'Halaman ini menyediakan fasilitas menyaring berkas berdasarkan tipe MIME nya. Masukkan: contenttype/subtype, misalnya <tt>image/jpeg</tt>.',
+'mimetype'           => 'Tipe MIME:',
+'download'           => 'unduh',
+
+# Unwatched pages
+'unwatchedpages' => 'Halaman yang tak dipantau',
+
+# List redirects
+'listredirects' => 'Daftar pengalihan',
+
+# Unused templates
+'unusedtemplates'     => 'Templat yang tak digunakan',
+'unusedtemplatestext' => 'Daftar berikut adalah halaman pada ruang nama templat yang tidak dipakai di halaman manapun. Cek dahulu pranala lain ke templat tersebut sebelum menghapusnya.',
+'unusedtemplateswlh'  => 'pranala lain',
+
+# Random redirect
+'randomredirect'         => 'Pengalihan sembarang',
+'randomredirect-nopages' => 'Tak terdapat pengalihan pada ruang nama ini.',
+
+# Statistics
+'statistics'             => 'Statistik',
+'sitestats'              => 'Statistik situs',
+'userstats'              => 'Statistik pengguna',
+'sitestatstext'          => "Terdapat total '''\$1''' halaman dalam basis data. Ini termasuk halaman \"pembicaraan\", halaman tentang {{SITENAME}}, halaman  \"rintisan\" minimum, halaman peralihan, dan halaman-halaman lain yang mungkin tidak masuk kriteria artikel. Selain itu, ada '''\$2''' halaman yang mungkin termasuk artikel yang sah.
+
+'''\$8''' berkas telah dimuat.
+
+Ada sejumlah '''\$3''' penampilan halaman, dan sejumlah '''\$4''' penyuntingan sejak {{SITENAME}} dimulai. Ini berarti rata-rata '''\$5''' suntingan per halaman, dan '''\$6''' penampilan per penyuntingan.
+
+[http://meta.wikimedia.org/wiki/Help:Job_queue Antrian job] adalah sebanyak '''\$7'''.",
+'userstatstext'          => "Terdapat '''$1''' pengguna terdaftar. '''$2''' (atau '''$4%''') diantaranya memiliki hak akses $5.",
+'statistics-mostpopular' => 'Halaman yang paling banyak ditampilkan',
+
+'disambiguations'      => 'Halaman disambiguasi',
+'disambiguationspage'  => '{{ns:template}}:Disambig',
+'disambiguations-text' => "Halaman-halaman berikut memiliki pranala ke suatu ''halaman disambiguasi''. Halaman-halaman tersebut seharusnya berpaut ke topik-topik yang sesuai.<br />Suatu halaman dianggap sebagai halaman disambiguasi apabila halaman tersebut menggunakan templat yang terhubung ke [[MediaWiki:disambiguationspage]].",
+
+'doubleredirects'     => 'Pengalihan ganda',
+'doubleredirectstext' => 'Setiap baris mengandung pranala ke peralihan pertama dan kedua, dan juga baris pertama dari teks peralihan kedua, yang biasanya memberikan artikel tujuan yang "sesungguhnya", yang seharusnya ditunjuk oleh peralihan yang pertama.',
+
+'brokenredirects'        => 'Pengalihan rusak',
+'brokenredirectstext'    => 'Halaman-halaman berikut dialihkan ke halaman yang tidak ada.',
+'brokenredirects-edit'   => '(sunting)',
+'brokenredirects-delete' => '(hapus)',
+
+'withoutinterwiki'        => 'Halaman tanpa pranala antarbahasa',
+'withoutinterwiki-header' => 'Halaman-halaman berikut tidak memiliki pranala ke versi dalam bahasa lain:',
+
+'fewestrevisions' => 'Artikel dengan perubahan tersedikit',
+
+# Miscellaneous special pages
+'nbytes'                  => '$1 bita',
+'ncategories'             => '$1 kategori',
+'nlinks'                  => '$1 pranala',
+'nmembers'                => '$1 pengguna',
+'nrevisions'              => '$1 revisi',
+'nviews'                  => '$1 penampilan',
+'specialpage-empty'       => 'Halaman ini kosong.',
+'lonelypages'             => 'Halaman tak bertuan',
+'lonelypagestext'         => 'Halaman-halaman berikut tidak memiliki pranala dari halaman manapun di wiki ini.',
+'uncategorizedpages'      => 'Halaman yang tak terkategori',
+'uncategorizedcategories' => 'Kategori yang tak terkategori',
+'uncategorizedimages'     => 'Berkas yang tak terkategori',
+'unusedcategories'        => 'Kategori yang tak digunakan',
+'unusedimages'            => 'Berkas yang tak digunakan',
+'popularpages'            => 'Halaman populer',
+'wantedcategories'        => 'Kategori yang diinginkan',
+'wantedpages'             => 'Halaman yang diinginkan',
+'mostlinked'              => 'Halaman yang tersering dituju',
+'mostlinkedcategories'    => 'Kategori dengan halaman terbanyak',
+'mostcategories'          => 'Artikel dengan kategori terbanyak',
+'mostimages'              => 'Berkas yang tersering digunakan',
+'mostrevisions'           => 'Artikel dengan perubahan terbanyak',
+'allpages'                => 'Daftar halaman',
+'prefixindex'             => 'Daftar halaman dengan awalan',
+'randompage'              => 'Halaman sembarang',
+'randompage-nopages'      => 'Tak terdapat halaman pada ruang nama ini.',
+'shortpages'              => 'Halaman pendek',
+'longpages'               => 'Halaman panjang',
+'deadendpages'            => 'Halaman buntu',
+'deadendpagestext'        => 'Halaman-halaman berikut tidak memiliki pranala ke halaman manapun di wiki ini.',
+'protectedpages'          => 'Halaman yang dilindungi',
+'protectedpagestext'      => 'Halaman-halaman berikut dilindungi dari pemindahan atau penyuntingan.',
+'protectedpagesempty'     => 'Saat ini tidak ada halaman yang sedang dilindungi dengan parameter-parameter tersebut.',
+'listusers'               => 'Daftar pengguna',
+'specialpages'            => 'Halaman istimewa',
+'spheading'               => 'Halaman istimewa untuk semua pengguna',
+'restrictedpheading'      => 'Halaman istimewa terbatas',
+'rclsub'                  => '(untuk halaman yang berpaut dari "$1")',
+'newpages'                => 'Halaman baru',
+'newpages-username'       => 'Nama pengguna:',
+'ancientpages'            => 'Artikel tertua',
+'intl'                    => 'Pranala antarbahasa',
+'move'                    => 'Pindahkan',
+'movethispage'            => 'Pindahkan halaman ini',
+'unusedimagestext'        => '<p>Perhatikan bahwa situs web lain mungkin dapat berpaut ke sebuah berkas secara langsung, dan berkas-berkas seperti itu mungkin terdapat dalam daftar ini meskipun masih digunakan oleh situs web lain.',
+'unusedcategoriestext'    => 'Kategori berikut ada walaupun tidak ada artikel atau kategori lain yang menggunakannya.',
+
+# Book sources
+'booksources'               => 'Sumber buku',
+'booksources-search-legend' => 'Cari di sumber buku',
+'booksources-isbn'          => 'ISBN:',
+'booksources-go'            => 'Cari',
+'booksources-text'          => 'Di bawah ini adalah daftar pranala ke situs lain yang menjual buku baru dan bekas, dan mungkin juga mempunyai informasi lebih lanjut mengenai buku yang sedang Anda cari:',
+
+'categoriespagetext' => 'Kategori-kategori berikut ada dalam wiki.',
+'data'               => 'Data',
+'userrights'         => 'Manajemen hak pengguna',
+'groups'             => 'Grup pengguna',
+'isbn'               => 'ISBN',
+'alphaindexline'     => '$1 ke $2',
+'version'            => 'Versi',
+
+# Special:Log
+'specialloguserlabel'  => 'Pengguna:',
+'speciallogtitlelabel' => 'Judul:',
+'log'                  => 'Log',
+'log-search-legend'    => 'Pencarian log',
+'log-search-submit'    => 'Cari',
+'alllogstext'          => 'Di bawah ini adalah gabungan log impor, pemblokiran, pemindahan, pemuatan, penghapusan, perlindungan, perubahan hak akses, dll. Anda dapat melakukan pembatasan tampilan dengan memilih jenis log, nama pengguna, atau judul halaman yang terpengaruh.',
+'logempty'             => 'Tidak ditemukan entri log yang sesuai.',
+'log-title-wildcard'   => 'Cari judul yang diawali dengan teks tersebut',
+
+# Special:Allpages
+'nextpage'          => 'Halaman selanjutnya ($1)',
+'prevpage'          => 'Halaman sebelumnya ($1)',
+'allpagesfrom'      => 'Tampilkan halaman dimulai dari:',
+'allarticles'       => 'Daftar artikel',
+'allinnamespace'    => 'Daftar halaman (ruang nama $1)',
+'allnotinnamespace' => 'Daftar halaman (bukan ruang nama $1)',
+'allpagesprev'      => 'Sebelumnya',
+'allpagesnext'      => 'Selanjutnya',
+'allpagessubmit'    => 'Cari',
+'allpagesprefix'    => 'Tampilkan halaman dengan awalan:',
+'allpagesbadtitle'  => 'Judul halaman yang diberikan tidak sah atau memiliki awalan antar-bahasa atau antar-wiki. Judul tersebut mungkin juga mengandung satu atau lebih aksara yang tidak dapat digunakan dalam judul.',
+
+# Special:Listusers
+'listusersfrom'      => 'Tampilkan pengguna diawali dengan:',
+'listusers-submit'   => 'Tampilkan',
+'listusers-noresult' => 'Pengguna tidak ditemukan.',
+
+# E-mail user
+'mailnologin'     => 'Tidak ada alamat surat-e',
+'mailnologintext' => 'Anda harus [[{{ns:special}}:Userlogin|masuk log]] dan mempunyai alamat surat-e yang sah di dalam [[{{ns:special}}:Preferences|preferensi]] untuk mengirimkan surat-e kepada pengguna lain.',
+'emailuser'       => 'Surat-e pengguna',
+'emailpage'       => 'Kirimi pengguna ini surat-e',
+'emailpagetext'   => 'Jika pengguna ini memasukkan alamat surat-e yang sah dalam preferensinya, formulir dibawah ini akan mengirimkan sebuah surat-e. Alamat surat-e yg terdapat pada preferensi Anda akan muncul sebagai alamat "Dari" dalam surat-e tersebut, sehingga penerima dapat membalas surat-e tersebut.',
+'usermailererror' => 'Kesalahan objek surat:',
+'defemailsubject' => 'Surat-e {{SITENAME}}',
+'noemailtitle'    => 'Tidak ada alamat surat-e',
+'noemailtext'     => 'Pengguna ini tidak memasukkan alamat surat-e yang sah, atau memilih untuk tidak menerima surat-e dari pengguna yang lain.',
+'emailfrom'       => 'Dari',
+'emailto'         => 'Untuk',
+'emailsubject'    => 'Perihal',
+'emailmessage'    => 'Pesan',
+'emailsend'       => 'Kirim',
+'emailccme'       => 'Kirimi saya salinan pesan saya.',
+'emailccsubject'  => 'Salinan pesan Anda untuk $1: $2',
+'emailsent'       => 'Surat-e terkirim',
+'emailsenttext'   => 'Surat-e Anda telah dikirimkan.',
+
+# Watchlist
+'watchlist'            => 'Daftar pantauan',
+'mywatchlist'          => 'Pantauan saya',
+'watchlistfor'         => "(untuk '''$1''')",
+'nowatchlist'          => 'Daftar pantauan Anda kosong.',
+'watchlistanontext'    => 'Silakan $1 untuk melihat atau menyunting daftar pantauan Anda.',
+'watchlistcount'       => "'''Anda memiliki $1 entri di daftar pantauan Anda, termasuk halaman pembicaraan.'''",
+'clearwatchlist'       => 'Kosongkan daftar pantauan',
+'watchlistcleartext'   => 'Apakah Anda yakin untuk menghapusnya?',
+'watchlistclearbutton' => 'Kosongkan daftar pantauan',
+'watchlistcleardone'   => 'Daftar pantauan Anda telah dikosongkan. $1 entri telah dihapus.',
+'watchnologin'         => 'Belum masuk log',
+'watchnologintext'     => 'Anda harus [[{{ns:special}}:Userlogin|masuk log]] untuk mengubah daftar pantauan.',
+'addedwatch'           => 'Telah ditambahkan ke daftar pantauan',
+'addedwatchtext'       => 'Halaman "[[:$1]]" telah ditambahkan ke [[{{ns:special}}:Watchlist|daftar pantauan]]. Perubahan yang terjadi di masa yang akan datang pada halaman tersebut dan halaman pembicaraan terkaitnya akan tercantum di sini, dan halaman itu akan ditampilkan \'\'tebal\'\' pada [[{{ns:special}}:Recentchanges|daftar perubahan terbaru]] agar lebih mudah terlihat.<br /><br />Jika Anda ingin menghapus halaman ini dari daftar pantauan, klik "Berhenti memantau" pada menu.',
+'removedwatch'         => 'Telah dihapus dari daftar pantauan',
+'removedwatchtext'     => 'Halaman "$1" telah dihapus dari daftar pantauan.',
+'watch'                => 'Pantau',
+'watchthispage'        => 'Pantau halaman ini',
+'unwatch'              => 'Batal pantau',
+'unwatchthispage'      => 'Batal pantau halaman ini',
+'notanarticle'         => 'Bukan sebuah artikel',
+'watchnochange'        => 'Tak ada halaman pantauan Anda yang telah berubah dalam jangka waktu yang dipilih.',
+'watchdetails'         => "Daftar pantauan Anda berisi '''$1''' halaman (tidak termasuk halaman pembicaraan) dan berikut adalah daftar perubahan terbaru terhadap halaman-halaman tersebut.<br />Anda dapat [[{{ns:special}}:Watchlist/edit|melihat dan menyunting daftar tersebut]] atau [[{{ns:special}}:Watchlist/clear|mengosongkannya]].",
+'wlheader-enotif'      => '* Notifikasi surat-e diaktifkan.',
+'wlheader-showupdated' => "* Halaman-halaman yang telah berubah sejak kunjungan terakhir Anda ditampilkan dengan '''huruf tebal'''",
+'watchmethod-recent'   => 'periksa daftar perubahan terbaru terhadap halaman yang dipantau',
+'watchmethod-list'     => 'periksa halaman yang dipantau terhadap perubahan terbaru',
+'removechecked'        => 'Keluarkan halaman yang ditandai dari daftar pantauan',
+'watchlistcontains'    => 'Daftar pantauan Anda berisi $1 halaman.',
+'watcheditlist'        => "Berikut ini adalah daftar halaman-halaman yang Anda pantau. Untuk menghapus halaman dari daftar pantauan Anda, berikan tanda cek pada kotak cek di sebelah judul halaman yang ingin Anda hapus, lalu klik tombol ''keluarkan halaman''  di bagian bawah layar.",
+'removingchecked'      => 'Menghapus halaman yang diminta dari daftar pantauan Anda...',
+'couldntremove'        => "Tidak dapat menghapus halaman '$1' dari daftar pantauan...",
+'iteminvalidname'      => "Ada masalah dengan '$1', namanya tidak sah...",
+'wlnote'               => "Di bawah ini adalah $1 perubahan terakhir dalam '''$2''' jam terakhir.",
+'wlshowlast'           => 'Tampilkan $1 jam $2 hari $3 terakhir',
+'wlsaved'              => 'Ini adalah versi tersimpan dari daftar pantauan Anda.',
+'watchlist-show-bots'  => 'Tampilkan suntingan bot',
+'watchlist-hide-bots'  => 'Sembunyikan suntingan bot',
+'watchlist-show-own'   => 'Tampilkan suntingan saya',
+'watchlist-hide-own'   => 'Sembunyikan suntingan saya',
+'watchlist-show-minor' => 'Tampilkan suntingan kecil',
+'watchlist-hide-minor' => 'Sembunyikan suntingan kecil',
+'wldone'               => 'Selesai.',
+
+# Displayed when you click the "watch" button and it's in the process of watching
+'watching'   => 'Memantau...',
+'unwatching' => 'Menghilangkan pemantauan...',
+
+'enotif_mailer'      => 'Pengirim Notifikasi {{SITENAME}}',
+'enotif_reset'       => 'Tandai semua halaman sebagai telah dikunjungi',
+'enotif_newpagetext' => 'Ini adalah halaman baru.',
+'changed'            => 'diubah',
+'created'            => 'dibuat',
+'enotif_subject'     => 'Halaman $PAGETITLE di {{SITENAME}} telah $CHANGEDORCREATED oleh $PAGEEDITOR',
+'enotif_lastvisited' => 'Lihat $1 untuk semua perubahan sejak kunjungan terakhir Anda.',
+'enotif_body'        => 'Dear $WATCHINGUSERNAME,
+
+Halaman $PAGETITLE di {{SITENAME}} telah $CHANGEDORCREATED pada $PAGEEDITDATE oleh $PAGEEDITOR, lihat $PAGETITLE_URL untuk versi terakhir.
+
+$NEWPAGE
+
+Riwayat suntingan: $PAGESUMMARY $PAGEMINOREDIT
+
+Hubungi penyunting:
+mail: $PAGEEDITOR_EMAIL
+wiki: $PAGEEDITOR_WIKI
+
+Kami tidak akan mengirimkan pemberitahuan lain jika terjadi perubahan lagi, kecuali Anda jika Anda telah mengunjungi halaman tersebut. Anda juga dapat menghapus tanda notifikasi untuk semua halaman pantauan Anda pada daftar pantauan Anda.
+
+             Sistem notifikasi {{SITENAME}}
+
+--
+Untuk mengubah preferensi daftar pantauan Anda, kunjungi
+{{fullurl:{{ns:special}}:Watchlist/edit}}
+
+Masukan dan bantuan lanjutan:
+{{fullurl:{{MediaWiki:helppage}}}}',
+
+# Delete/protect/revert
+'deletepage'                  => 'Hapus halaman',
+'confirm'                     => 'Konfirmasikan',
+'excontent'                   => "isi sebelumnya: '$1'",
+'excontentauthor'             => "isinya hanya berupa: '$1' (dan satu-satunya penyumbang adalah '[[Special:Contributions/$2|$2]]')",
+'exbeforeblank'               => "isi sebelum dikosongkan: '$1'",
+'exblank'                     => 'halaman kosong',
+'confirmdelete'               => 'Konfirmasi penghapusan',
+'deletesub'                   => '(Menghapus "$1")',
+'historywarning'              => 'Peringatan: Halaman yang ingin Anda hapus mempunyai sejarah:',
+'confirmdeletetext'           => 'Anda akan menghapus halaman atau berkas ini secara permanen berikut semua sejarahnya dari basis data. Pastikan bahwa Anda memang ingin melakukannya, mengetahui segala akibatnya, dan apa yang Anda lakukan ini adalah sejalan dengan [[{{MediaWiki:policy-url}}|kebijakan {{SITENAME}}]].',
+'actioncomplete'              => 'Proses selesai',
+'deletedtext'                 => '"$1" telah dihapus. Lihat $2 untuk log terkini halaman yang telah dihapus.',
+'deletedarticle'              => 'menghapus "[[$1]]"',
+'dellogpage'                  => 'Log penghapusan',
+'dellogpagetext'              => 'Di bawah ini adalah log penghapusan halaman. Semua waktu yang ditunjukkan adalah waktu server (UTC).',
+'deletionlog'                 => 'log penghapusan',
+'reverted'                    => 'Dikembalikan ke revisi sebelumnya',
+'deletecomment'               => 'Alasan penghapusan',
+'imagereverted'               => 'Berhasil mengembalikan ke revisi sebelumnya',
+'rollback'                    => 'Kembalikan suntingan',
+'rollback_short'              => 'Kembalikan',
+'rollbacklink'                => 'kembalikan',
+'rollbackfailed'              => 'Pengembalian gagal dilakukan',
+'cantrollback'                => 'Tidak dapat mengembalikan suntingan; pengguna terakhir adalah satu-satunya penulis artikel ini.',
+'alreadyrolled'               => 'Tidak dapat melakukan pengembalian ke suntingan terakhir [[:$1]] oleh [[{{ns:user}}:$2|$2]] ([[{{ns:user_talk}}:$2|Pembicaraan]]); orang lain telah menyunting atau melakukan pengembalian terhadap artikel tersebut. Suntingan terakhir oleh [[{{ns:user}}:$3|$3]] ([[{{ns:user_talk}}:$3|Pembicaraan]]).',
+'editcomment'                 => 'Komentar penyuntingan adalah: "<em>$1</em>".', # only shown if there is an edit comment
+'revertpage'                  => 'Suntingan [[{{ns:special}}:Contributions/$2|$2]] ([[{{ns:user_talk}}:$2|Pembicaraan]]) dikembalikan ke versi terakhir oleh [[{{ns:user}}:$1|$1]]',
+'sessionfailure'              => 'Sepertinya ada masalah dengan sesi log anda; log anda telah dibatalkan untuk mencegah pembajakan. Silahkan tekan tombol "back" dan muat kembali halaman sebelum anda masuk, lalu coba lagi.',
+'protectlogpage'              => 'Log perlindungan',
+'protectlogtext'              => 'Di bawah ini adalah log perlindungan dan penghilangan perlindungan halaman. Lihat [[Special:Protectedpages|daftar halaman yang dilindungi]] untuk daftar perlindungan halaman yang berlaku sekarang.',
+'protectedarticle'            => 'melindungi [[$1]]',
+'unprotectedarticle'          => 'menghilangkan perlindungan [[$1]]',
+'protectsub'                  => '(Melindungi "$1")',
+'confirmprotecttext'          => 'Apakah Anda benar-benar ingin melindungi halaman ini?',
+'confirmprotect'              => 'Konfirmasi perlindungan',
+'protectmoveonly'             => 'Lindungi dari pemindahan saja',
+'protectcomment'              => 'Alasan perlindungan',
+'protectexpiry'               => 'Kadaluwarsa',
+'protect_expiry_invalid'      => 'Waktu kadaluwarsa tidak sah.',
+'protect_expiry_old'          => 'Waktu kadaluwarsa adalah pada masa lampau.',
+'unprotectsub'                => '(Menghilangkan perlindungan terhadap "$1")',
+'confirmunprotecttext'        => 'Apakah Anda benar-benar ingin menghilangkan perlindungan terhadap halaman ini?',
+'confirmunprotect'            => 'Konfirmasi penghilangan perlindungan',
+'unprotectcomment'            => 'Alasan penghilangan perlindungan',
+'protect-unchain'             => 'Buka perlindungan pemindahan',
+'protect-text'                => 'Anda dapat melihat atau mengganti tingkatan perlindungan untuk halaman <strong>$1</strong> di sini.',
+'protect-locked-blocked'      => 'Anda tak dapat mengganti tingkat perlindungan selagi diblokir. Berikut adalah konfigurasi saat ini untuk halaman <strong>$1</strong>:',
+'protect-locked-dblock'       => 'Tingkat perlindungan tak dapat diganti karena aktifnya penguncian basis data. Berikut adalah konfigurasi saat ini untuk halaman <strong>$1</strong>:',
+'protect-locked-access'       => 'Akun Anda tidak dapat memiliki hak untuk mengganti tingkat perlindungan halaman. Berikut adalah konfigurasi saat ini untuk halaman <strong>$1</strong>:',
+'protect-cascadeon'           => 'Halaman ini sedang dilindungi karena disertakan dalam {{PLURAL:$1|halaman|halaman-halaman}} berikut yang telah dilindungi dengan pilihan perlindungan runtun diaktifkan. Anda dapat mengganti tingkat perlindungan untuk halaman ini, tapi hal tersebut tidak akan mempengaruhi perlindungan runtun.',
+'protect-default'             => '(baku)',
+'protect-level-autoconfirmed' => 'Hanya pengguna terdaftar',
+'protect-level-sysop'         => 'Hanya pengurus',
+'protect-summary-cascade'     => 'runtun',
+'protect-expiring'            => 'kadalawursa $1',
+'protect-cascade'             => 'Perlindungan runtun - lindungi semua halaman yang termasuk dalam halaman ini.',
+'restriction-type'            => 'Perlindungan',
+'restriction-level'           => 'Tingkatan',
+'minimum-size'                => 'Ukuran minimum (bita)',
+
+# Restrictions (nouns)
+'restriction-edit' => 'Penyuntingan',
+'restriction-move' => 'Pemindahan',
+
+# Restriction levels
+'restriction-level-sysop'         => 'perlindungan penuh',
+'restriction-level-autoconfirmed' => 'perlindungan semi',
+'restriction-level-all'           => 'semua tingkatan',
+
+# Undelete
+'undelete'                 => 'Pembatalan penghapusan',
+'undeletepage'             => 'Pembatalan penghapusan',
+'viewdeletedpage'          => 'Lihat halaman yang telah dihapus',
+'undeletepagetext'         => 'Halaman-halaman berikut ini telah dihapus tapi masih ada di dalam arsip dan dapat dikembalikan. Arsip tersebut mungkin akan dibersihkan secara berkala.',
+'undeleteextrahelp'        => "Untuk mengembalikan keseruhan halaman, biarkan seluruh kotak cek tidak terpilih dan klik '''Kembalikan'''. Untuk melakukan pengembalian selektif, cek kotak revisi yang diinginkan dan klik '''Kembalikan'''. Menekan tombol '''Reset''' akan mengosongkan isian komentar dan semua kotak cek",
+'undeleterevisions'        => '$1 revisi diarsipkan',
+'undeletehistory'          => 'Jika Anda mengembalikan halaman tersebut, semua revisi akan dikembalikan ke dalam sejarah. Jika sebuah halaman baru dengan nama yang sama telah dibuat sejak penghapusan, revisi yang telah dikembalikan akan kelihatan dalam sejarah dahulu, dan revisi terkini halaman tersebut tidak akan ditimpa secara otomatis. Ingat pula bahwa pembatasan revisi berkas terhapus sewaktu pemulihan',
+'undeleterevdel'           => 'Pembatalan penghapusan tidak akan dilakukan jika hal tersebut akan mengakibatkan revisi terkini halaman terhapus sebagian. Pada kondisi tersebut, Anda harus menghilangkan cek atau menghilangkan penyembunyian revisi yang dihapus terakhir. Revisi berkas yang tidak dapat Anda lihat tidak akan dipulihkan.',
+'undeletehistorynoadmin'   => 'Artikel ini telah dihapus. Alasan penghapusan diberikan pada ringkasan di bawah ini, berikut detil pengguna yang telah melakukan penyuntingan pada halaman ini sebelum dihapus. Isi terakhir dari revisi yang telah dihapus ini hanya tersedia untuk pengurus.',
+'undelete-revision'        => 'Revisi yang telah dihapus dari $1 sejak $2:',
+'undeleterevision-missing' => 'Revisi salah atau tak ditemukan. Anda mungkin mengikuti pranala yang salah, atau revisi tersebut telah dipulihkan atau dibuang dari arsip.',
+'undeletebtn'              => 'Kembalikan!',
+'undeletereset'            => 'Reset',
+'undeletecomment'          => 'Komentar:',
+'undeletedarticle'         => '"$1" telah dikembalikan',
+'undeletedrevisions'       => '$1 revisi telah dikembalikan',
+'undeletedrevisions-files' => '$1 revisi and $2 berkas dikembalikan',
+'undeletedfiles'           => '$1 berkas dikembalikan',
+'cannotundelete'           => 'Pembatalan penghapusan gagal; mungkin ada orang lain yang telah terlebih dahulu melakukan pembatalan.',
+'undeletedpage'            => "<big>'''$1 berhasil dikembalikan'''</big>
+
+Lihat [[{{ns:special}}:Log/delete|log penghapusan]] untuk data penghapusan dan pengembalian.",
+'undelete-header'          => 'Lihat [[Special:Log/delete|log penghapusan]] untuk daftar halaman yang baru dihapus.',
+'undelete-search-box'      => 'Cari halaman yang dihapus',
+'undelete-search-prefix'   => 'Tampilkan halaman dimulai dari:',
+'undelete-search-submit'   => 'Cari',
+'undelete-no-results'      => 'Tidak ditemukan halaman yang sesuai di arsip penghapusan.',
+
+# Namespace form on various pages
+'namespace' => 'Ruang nama:',
+'invert'    => 'Balikkan pilihan',
+
+# Contributions
+'contributions' => 'Kontribusi pengguna',
+'mycontris'     => 'Kontribusi saya',
+'contribsub2'   => 'Untuk $1 ($2)',
+'nocontribs'    => 'Tidak ada perubahan yang sesuai dengan kriteria tersebut.',
+'ucnote'        => 'Berikut adalah <strong>$1</strong> suntingan terakhir pengguna ini dalam <strong>$2</strong> hari terakhir.',
+'uclinks'       => 'Menampilkan $1 perubahan terakhir; menampilkan $2 hari terakhir.',
+'uctop'         => ' (atas)',
+
+'sp-contributions-newest'      => 'Terbaru',
+'sp-contributions-oldest'      => 'Terlama',
+'sp-contributions-newer'       => '$1 lebih baru',
+'sp-contributions-older'       => '$1 lebih lama',
+'sp-contributions-newbies'     => 'Hanya pengguna-pengguna baru',
+'sp-contributions-newbies-sub' => 'Untuk pengguna baru',
+'sp-contributions-blocklog'    => 'Log pemblokiran',
+'sp-contributions-search'      => 'Cari kontribusi',
+'sp-contributions-username'    => 'Alamat IP atau nama pengguna:',
+'sp-contributions-submit'      => 'Cari',
+
+'sp-newimages-showfrom' => 'Tampilkan berkas baru dimulai dari $1',
+
+# What links here
+'whatlinkshere'        => 'Pranala balik',
+'whatlinkshere-barrow' => '&lt;',
+'notargettitle'        => 'Tidak ada sasaran',
+'notargettext'         => 'Anda tidak menentukan halaman atau pengguna tujuan fungsi ini.',
+'linklistsub'          => '(Daftar pranala)',
+'linkshere'            => "Halaman-halaman berikut ini berpaut ke '''[[:$1]]''':",
+'nolinkshere'          => "Tidak ada halaman yang berpaut ke '''[[:$1]]'''.",
+'nolinkshere-ns'       => "Tidak ada halaman yang berpaut ke '''[[:$1]]''' pada ruang nama yang dipilih.",
+'isredirect'           => 'halaman peralihan',
+'istemplate'           => 'dengan templat',
+'whatlinkshere-prev'   => '$1 sebelumnya',
+'whatlinkshere-next'   => '$1 selanjutnya',
+
+# Block/unblock
+'blockip'                     => 'Blokir pengguna',
+'blockiptext'                 => 'Gunakan formulir di bawah untuk memblokir kemampuan menulis sebuah alamat IP atau pengguna tertentu. Ini perlu dilakukan untuk mencegah vandalisme, dan sejalan dengan [[{{MediaWiki:policy-url}}|kebijakan {{SITENAME}}]]. Masukkan alasan Anda di bawah (contohnya mengambil halaman tertentu yang telah dirusak). Untuk daftar pengguna dan alamat yang diblokir, lihat [[{{ns:special}}:Ipblocklist|halaman ini]].',
+'ipaddress'                   => 'Alamat IP',
+'ipadressorusername'          => 'Alamat IP atau nama pengguna',
+'ipbexpiry'                   => 'Kadaluwarsa',
+'ipbreason'                   => 'Alasan',
+'ipbreasonotherlist'          => 'Alasan lain',
+'ipbreason-dropdown'          => '
+*Alasan umum
+** Memberikan informasi palsu
+** Menghilangkan isi halaman
+** Spam pranala ke situs luar
+** Memasukkan omong kosong ke halaman
+** Perilaku intimidasi/pelecehan
+** Menyalahgunakan beberapa akun
+** Nama pengguna tak layak',
+'ipbanononly'                 => 'Hanya blokir pengguna anonim',
+'ipbcreateaccount'            => 'Cegah pembuatan akun',
+'ipbenableautoblock'          => 'Blokir alamat IP terakhir yang digunakan pengguna ini secara otomatis, dan semua alamat berikutnya yang mereka coba gunakan untuk menyunting.',
+'ipbsubmit'                   => 'Kirimkan',
+'ipbother'                    => 'Waktu lain',
+'ipboptions'                  => '2 jam:2 hours,1 hari:1 day,3 hari:3 days,1 minggu:1 week,2 minggu:2 weeks,1 bulan:1 month,3 bulan:3 months,6 bulan:6 months,1 tahun:1 year,selamanya:infinite',
+'ipbotheroption'              => 'lainnya',
+'ipbotherreason'              => 'Alasan lain/tambahan',
+'ipbhidename'                 => 'Sembunyikan nama pengguna atau IP dari log pemblokiran, daftar blokir aktif, serta daftar pengguna',
+'badipaddress'                => 'Format alamat IP atau nama pengguna salah.',
+'blockipsuccesssub'           => 'Pemblokiran sukses',
+'blockipsuccesstext'          => 'Alamat IP atau pengguna "$1" telah diblokir. <br />Lihat [[{{ns:special}}:Ipblocklist|Daftar IP dan pengguna diblokir]] untuk melihat kembali pemblokiran.',
+'ipb-edit-dropdown'           => 'Sunting alasan pemblokiran',
+'ipb-unblock-addr'            => 'Hilangkan blokir $1',
+'ipb-unblock'                 => 'Hilangkan blokir seorang pengguna atau suatu alamat IP',
+'ipb-blocklist-addr'          => 'Lihat blokir yang diterapkan untuk $1',
+'ipb-blocklist'               => 'Lihat blokir yang diterapkan',
+'unblockip'                   => 'Hilangkan blokir terhadap alamat IP atau pengguna',
+'unblockiptext'               => 'Gunakan formulir di bawah untuk mengembalikan kemampuan menulis sebuah alamat IP atau pengguna yang sebelumnya telah diblokir.',
+'ipusubmit'                   => 'Hilangkan blokir terhadap alamat ini',
+'unblocked'                   => 'Blokir terhadap [[User:$1|$1]] telah dihilangkan',
+'ipblocklist'                 => 'Daftar pemblokiran',
+'ipblocklist-submit'          => 'Cari',
+'blocklistline'               => '$1, $2 memblokir $3 ($4)',
+'infiniteblock'               => 'tak terbatas',
+'expiringblock'               => 'kadaluwarsa $1',
+'anononlyblock'               => 'hanya anon',
+'noautoblockblock'            => 'pemblokiran otomatis dimatikan',
+'createaccountblock'          => 'pembuatan akun diblokir',
+'ipblocklistempty'            => 'Daftar pemblokiran kosong atau alamat IP/pengguna yang diminta tidak diblokir.',
+'blocklink'                   => 'blokir',
+'unblocklink'                 => 'hilangkan blokir',
+'contribslink'                => 'kontrib',
+'autoblocker'                 => 'Diblokir secara otomatis karena Anda berbagi alamat IP dengan "$1". Alasan "$2".',
+'blocklogpage'                => 'Log pemblokiran',
+'blocklogentry'               => 'memblokir "[[$1]]" dengan waktu kadaluwarsa $2 $3',
+'blocklogtext'                => 'Di bawah ini adalah log pemblokiran dan penghilangan blokir terhadap pengguna. Alamat IP yang diblokir secara otomatis tidak terdapat di dalam daftar ini. Lihat [[{{ns:special}}:Ipblocklist|daftar alamat IP yang diblokir]] untuk daftar blokir terkini yang efektif.',
+'unblocklogentry'             => 'menghilangkan blokir "$1"',
+'block-log-flags-anononly'    => 'hanya pengguna anonim',
+'block-log-flags-nocreate'    => 'pembuatan akun dimatikan',
+'block-log-flags-noautoblock' => 'blokir otomatis dimatikan',
+'range_block_disabled'        => 'Kemampuan pengurus dalam membuat blokir blok IP dimatikan.',
+'ipb_expiry_invalid'          => 'Waktu kadaluwarsa tidak sah.',
+'ipb_already_blocked'         => '"$1" telah diblokir',
+'ip_range_invalid'            => 'Blok IP tidak sah.',
+'proxyblocker'                => 'Pemblokir proxy',
+'ipb_cant_unblock'            => 'Kesalahan: Blokir dengan ID $1 tidak ditemukan. Blokir tersebut kemungkinan telah dibuka.',
+'proxyblockreason'            => 'Alamat IP Anda telah diblokir karena alamat IP Anda adalah proxy terbuka. Silakan hubungi penyedia jasa internet Anda atau dukungan teknis dan beritahukan mereka masalah keamanan serius ini.',
+'proxyblocksuccess'           => 'Selesai.',
+'sorbs'                       => 'SORBS DNSBL',
+'sorbsreason'                 => 'Alamat IP anda terdaftar sebagai proxy terbuka di [http://www.sorbs.net SORBS] DNSBL.',
+'sorbs_create_account_reason' => 'Alamat IP anda terdaftar sebagai proxy terbuka di [http://www.sorbs.net SORBS] DNSBL. Anda tidak dapat membuat akun.',
+
+# Developer tools
+'lockdb'              => 'Kunci basis data',
+'unlockdb'            => 'Buka kunci basis data',
+'lockdbtext'          => 'Mengunci basis data akan menghentikan kemampuan semua pengguna dalam menyunting halaman, mengubah preferensi pengguna, menyunting daftar pantauan mereka, dan hal-hal lain yang memerlukan perubahan terhadap basis data. Pastikan bahwa ini adalah yang ingin Anda lakukan, dan bahwa Anda akan membuka kunci basis data setelah pemeliharaan selesai.',
+'unlockdbtext'        => 'Membuka kunci basis data akan mengembalikan kemampuan semua pengguna dalam menyunting halaman, mengubah preferensi pengguna, menyunting daftar pantauan mereka, dan hal-hal lain yang memerlukan perubahan terhadap basis data.  Pastikan bahwa ini adalah yang ingin Anda lakukan.',
+'lockconfirm'         => 'Ya, saya memang ingin mengunci basis data.',
+'unlockconfirm'       => 'Ya, saya memang ingin membuka kunci basis data.',
+'lockbtn'             => 'Kunci basis data',
+'unlockbtn'           => 'Buka kunci basis data',
+'locknoconfirm'       => 'Anda tidak memberikan tanda cek pada kotak konfirmasi.',
+'lockdbsuccesssub'    => 'Penguncian basis data berhasil',
+'unlockdbsuccesssub'  => 'Pembukaan kunci basis data berhasil',
+'lockdbsuccesstext'   => 'Basis data telah dikunci.
+<br />Pastikan Anda [[Special:Unlockdb|membuka kuncinya]] setelah pemeliharaan selesai.',
+'unlockdbsuccesstext' => 'Kunci basis data telah dibuka.',
+'lockfilenotwritable' => 'Berkas kunci basis data tidak dapat ditulis. Untuk mengunci atau membuka basis data, berkas ini harus dapat ditulis oleh server web.',
+'databasenotlocked'   => 'Basis data tidak terkunci.',
+
+# Move page
+'movepage'                => 'Pemindahan halaman',
+'movepagetext'            => "Formulir di bawah ini digunakan untuk mengubah nama suatu halaman dan memindahkan semua data sejarah ke nama baru. Judul yang lama akan menjadi halaman peralihan menuju judul yang baru. Pranala kepada judul lama tidak akan berubah. Pastikan untuk memeriksa terhadap peralihan halaman yang rusak atau berganda setelah pemindahan. Anda bertanggung jawab untuk memastikan bahwa pranala terus menyambung ke halaman yang seharusnya.
+
+Perhatikan bahwa halaman '''tidak''' akan dipindah apabila telah ada halaman di pada judul yang baru, kecuali bila halaman tersebut kosong atau merupakan halaman peralihan dan tidak mempunyai sejarah penyuntingan. Ini berarti Anda dapat mengubah nama halaman kembali seperti semula apabila Anda membuat kesalahan, dan Anda tidak dapat menimpa halaman yang telah ada.
+
+'''Peringatan:''' Ini dapat mengakibatkan perubahan yang tak terduga dan drastis  bagi halaman yang populer. Pastikan Anda mengerti konsekuensi dari perbuatan ini sebelum melanjutkan.",
+'movepagetalktext'        => "Halaman pembicaraan yang berkaitan juga akan dipindahkan secara otomatis '''kecuali apabila:'''
+
+*Sebuah halaman pembicaraan yang tidak kosong telah ada di bawah judul baru, atau
+*Anda tidak memberi tanda cek pada kotak di bawah ini
+
+Dalam kasus tersebut, apabila diinginkan, Anda dapat memindahkan atau menggabungkan halaman secara manual.",
+'movearticle'             => 'Pindahkan halaman',
+'movenologin'             => 'Belum masuk log',
+'movenologintext'         => 'Anda harus menjadi pengguna terdaftar dan telah [[{{ns:special}}:Userlogin|masuk log]] untuk memindahkan halaman.',
+'newtitle'                => 'Ke judul baru',
+'move-watch'              => 'Pantau halaman ini',
+'movepagebtn'             => 'Pindahkan halaman',
+'pagemovedsub'            => 'Pemindahan berhasil',
+'pagemovedtext'           => '<div class="plainlinks">Halaman "[{{fullurl:<includeonly></includeonly>$1|redirect=no}} $1]" dipindahkan ke "[[$2]]". Jangan lupa untuk memperbaiki [[{{ns:special}}:Whatlinkshere/$1|pengalihan ganda]] yang mungkin terjadi.</div>',
+'articleexists'           => 'Halaman dengan nama tersebut telah ada atau nama yang dipilih tidak sah. Silakan pilih nama lain.',
+'talkexists'              => 'Halaman tersebut berhasil dipindahkan, tetapi halaman pembicaraan dari halaman tersebut tidak dapat dipindahkan karena telah ada halaman pembicaraan pada judul yang baru. Silakan gabungkan halaman-halaman pembicaraan tersebut secara manual.',
+'movedto'                 => 'dipindahkan ke',
+'movetalk'                => 'Pindahkan halaman pembicaraan yang terkait.',
+'talkpagemoved'           => 'Halaman pembicaraan yang terkait juga ikut dipindahkan.',
+'talkpagenotmoved'        => 'Halaman pembicaraan yang terkait <strong>tidak</strong> ikut dipindahkan.',
+'1movedto2'               => '[[$1]] dipindahkan ke [[$2]]',
+'1movedto2_redir'         => '[[$1]] dipindahkan ke [[$2]] melalui peralihan',
+'movelogpage'             => 'Log pemindahan',
+'movelogpagetext'         => 'Di bawah ini adalah log pemindahan halaman.',
+'movereason'              => 'Alasan',
+'revertmove'              => 'kembalikan',
+'delete_and_move'         => 'Hapus dan pindahkan',
+'delete_and_move_text'    => '==Penghapusan diperlukan==
+
+Artikel yang dituju, "[[$1]]", telah mempunyai isi. Apakah Anda hendak menghapusnya untuk memberikan ruang bagi pemindahan?',
+'delete_and_move_confirm' => 'Ya, hapus halaman tersebut',
+'delete_and_move_reason'  => 'Dihapus untuk mengantisipasikan pemindahan halaman',
+'selfmove'                => 'Pemindahan halaman tidak dapat dilakukan karena judul sumber dan judul tujuan sama.',
+'immobile_namespace'      => 'Judul sumber atau tujuan termasuk tipe khusus; tidak dapat memindahkan halaman ke ruang nama tersebut.',
+
+# Export
+'export'            => 'Ekspor halaman',
+'exporttext'        => 'Anda dapat mengekspor teks dan sejarah penyuntingan suatu halaman tertentu atau suatu set halaman dalam bentuk XML tertentu. Hasil ekspor ini selanjutnya dapat diimpor ke wiki lainnya yang menggunakan perangkat lunak MediaWiki, dengan menggunakan fasilitas [[Special:Import|halaman impor]].
+
+Untuk mengekspor halaman-halaman artikel, masukkan judul-judul dalam kotak teks di bawah ini, satu judul per baris, dan pilih apakah anda ingin mengekspor lengkap dengan versi terdahulunya, atau hanya versi sekarang dengan catatan penyuntingan terakhir.
+
+Jika Anda hanya ingin mengimpor versi sekarang, Anda juga dapat melakukan hal ini dengan lebih cepat dengan cara menggunakan pranala khusus, sebagai contoh: [[{{ns:special}}:Export/{{int:mainpage}}]] untuk mengekspor artikel {{int:mainpage}}.',
+'exportcuronly'     => 'Hanya ekspor revisi sekarang, bukan seluruh versi terdahulu',
+'exportnohistory'   => "----
+'''Catatan:''' Mengekspor keseluruhan riwayat suntingan halaman melalui isian ini telah dinon-aktifkan karena alasan kinerja.",
+'export-submit'     => 'Ekspor',
+'export-addcattext' => 'Tambahkan halaman dari kategori:',
+'export-addcat'     => 'Tambahkan',
+
+# Namespace 8 related
+'allmessages'               => 'Pesan sistem',
+'allmessagesname'           => 'Nama',
+'allmessagesdefault'        => 'Teks baku',
+'allmessagescurrent'        => 'Teks sekarang',
+'allmessagestext'           => 'Ini adalah daftar semua pesan sistem yang tersedia dalam ruang nama MediaWiki:',
+'allmessagesnotsupportedUI' => 'Bahasa antarmuka Anda saat ini, <strong>$1</strong> tidak didukung oleh {{ns:special}}:AllMessages di situs ini.',
+'allmessagesnotsupportedDB' => "'''{{ns:special}}:Allmessages''' tidak didukung karena wgUseDatabaseMessages dimatikan.",
+'allmessagesfilter'         => 'Filter nama pesan:',
+'allmessagesmodified'       => 'Hanya tampilkan yang diubah',
+
+# Thumbnails
+'thumbnail-more'           => 'Perbesar',
+'missingimage'             => '<strong>Berkas tak ditemukan</strong><br /><em>$1</em>',
+'filemissing'              => 'Berkas tak ditemukan',
+'thumbnail_error'          => 'Kesalahan sewaktu pembuatan gambar kecil (thumbnail): $1',
+'djvu_page_error'          => 'Halaman DjVu di luar rentang',
+'djvu_no_xml'              => 'XML untuk berkas DjVu tak dapat diperoleh',
+'thumbnail_invalid_params' => 'Parameter gambar kecil tak sah',
+'thumbnail_dest_directory' => 'Direktori tujuan tak dapat dibuat',
+
+# Special:Import
+'import'                     => 'Impor halaman',
+'importinterwiki'            => 'Impor transwiki',
+'import-interwiki-text'      => 'Pilih suatu wiki dan judul halaman yang akan di impor. Tanggal revisi dan nama penyunting akan dipertahankan. Semua aktivitas impor transwiki akan dilog di [[{{ns:special}}:Log/import|log impor]].',
+'import-interwiki-history'   => 'Salin semua versi terdahulu dari halaman ini',
+'import-interwiki-submit'    => 'Impor',
+'import-interwiki-namespace' => 'Transfer halaman ke dalam ruang nama:',
+'importtext'                 => 'Silakan ekspor berkas dari wiki asal dengan menggunakan utilitas [[{{ns:special}}:Export]], simpan ke cakram digital, dan muatkan ke sini.',
+'importstart'                => 'Mengimpor halaman...',
+'import-revision-count'      => '$1 versi terdahulu',
+'importnopages'              => 'Tidak ada halaman untuk diimpor.',
+'importfailed'               => 'Impor gagal: $1',
+'importunknownsource'        => 'Sumber impor tidak dikenali',
+'importcantopen'             => 'Berkas impor tidak dapat dibuka',
+'importbadinterwiki'         => 'Pranala interwiki rusak',
+'importnotext'               => 'Kosong atau tidak ada teks',
+'importsuccess'              => 'Impor sukses!',
+'importhistoryconflict'      => 'Terjadi konflik revisi sejarah (mungkin pernah mengimpor halaman ini sebelumnya)',
+'importnosources'            => 'Tidak ada sumber impor transwiki yang telah dibuat dan pemuatan riwayat secara langsung telah di non-aktifkan.',
+'importnofile'               => 'Tidak ada berkas sumber impor yang telah dimuat.',
+'importuploaderror'          => 'Pemuatan berkas impor gagal; mungkin ukuran berkas lebih besar dari pada yang diizinkan.',
+
+# Import log
+'importlogpage'                    => 'Log impor',
+'importlogpagetext'                => 'Di bawah ini adalah log impor administratif dari halaman-halaman, berikut riwayat suntingannya dari wiki lain.',
+'import-logentry-upload'           => 'mengimpor [[$1]] melalui pemuatan berkas',
+'import-logentry-upload-detail'    => '$1 versi terdahulu',
+'import-logentry-interwiki'        => 'men-transwiki $1',
+'import-logentry-interwiki-detail' => '$1 versi terdahulu dari $2',
+
+# Tooltip help for the actions
+'tooltip-pt-userpage'             => 'Halaman pengguna saya',
+'tooltip-pt-anonuserpage'         => 'Halaman pengguna IP Anda',
+'tooltip-pt-mytalk'               => 'Halaman pembicaraan saya',
+'tooltip-pt-anontalk'             => 'Pembicaraan tentang suntingan dari alamat IP ini',
+'tooltip-pt-preferences'          => 'Preferensi saya',
+'tooltip-pt-watchlist'            => 'Daftar halaman yang saya pantau.',
+'tooltip-pt-mycontris'            => 'Daftar kontribusi saya',
+'tooltip-pt-login'                => 'Anda disarankan untuk masuk log, meskipun hal itu tidak diwajibkan.',
+'tooltip-pt-anonlogin'            => 'Anda disarankan untuk masuk log, meskipun hal itu tidak diwajibkan.',
+'tooltip-pt-logout'               => 'Keluar log',
+'tooltip-ca-talk'                 => 'Pembicaraan halaman isi',
+'tooltip-ca-edit'                 => 'Sunting halaman ini. Gunakan tombol pratayang sebelum menyimpan.',
+'tooltip-ca-addsection'           => 'Tambahkan komentar ke halaman pembicaraan ini.',
+'tooltip-ca-viewsource'           => 'Halaman ini dilindungi. Anda hanya dapat melihat sumbernya.',
+'tooltip-ca-history'              => 'Versi-versi sebelumnya dari halaman ini.',
+'tooltip-ca-protect'              => 'Lindungi halaman ini',
+'tooltip-ca-delete'               => 'Hapus halaman ini',
+'tooltip-ca-undelete'             => 'Kembalikan suntingan ke halaman ini sebelum halaman ini dihapus',
+'tooltip-ca-move'                 => 'Pindahkan halaman ini',
+'tooltip-ca-watch'                => 'Tambahkan halaman ini ke daftar pantauan Anda',
+'tooltip-ca-unwatch'              => 'Hapus halaman ini dari daftar pantauan Anda',
+'tooltip-search'                  => 'Cari dalam wiki ini',
+'tooltip-p-logo'                  => 'Halaman Utama',
+'tooltip-n-mainpage'              => 'Kunjungi Halaman Utama',
+'tooltip-n-portal'                => 'Tentang proyek, apa yang dapat anda lakukan, di mana mencari sesuatu',
+'tooltip-n-currentevents'         => 'Temukan informasi tentang peristiwa terkini',
+'tooltip-n-recentchanges'         => 'Daftar perubahan terbaru dalam wiki.',
+'tooltip-n-randompage'            => 'Tampilkan sembarang halaman',
+'tooltip-n-help'                  => 'Tempat mencari bantuan.',
+'tooltip-n-sitesupport'           => 'Dukung kami',
+'tooltip-t-whatlinkshere'         => 'Daftar semua halaman wiki yang memiliki pranala ke halaman ini',
+'tooltip-t-recentchangeslinked'   => 'Perubahan terbaru halaman-halaman yang memiliki pranala ke halaman ini',
+'tooltip-feed-rss'                => 'Asupan RSS untuk halaman ini',
+'tooltip-feed-atom'               => 'Asupan Atom untuk halaman ini',
+'tooltip-t-contributions'         => 'Lihat daftar kontribusi pengguna ini',
+'tooltip-t-emailuser'             => 'Kirimkan surat-e kepada pengguna ini',
+'tooltip-t-upload'                => 'Muatkan gambar atau berkas media',
+'tooltip-t-specialpages'          => 'Daftar semua halaman istimewa',
+'tooltip-ca-nstab-main'           => 'Lihat halaman artikel',
+'tooltip-ca-nstab-user'           => 'Lihat halaman pengguna',
+'tooltip-ca-nstab-media'          => 'Lihat halaman media',
+'tooltip-ca-nstab-special'        => 'Ini adalah halaman istimewa yang tidak dapat disunting.',
+'tooltip-ca-nstab-project'        => 'Lihat halaman proyek',
+'tooltip-ca-nstab-image'          => 'Lihat halaman berkas',
+'tooltip-ca-nstab-mediawiki'      => 'Lihat pesan sistem',
+'tooltip-ca-nstab-template'       => 'Lihat templat',
+'tooltip-ca-nstab-help'           => 'Lihat halaman bantuan',
+'tooltip-ca-nstab-category'       => 'Lihat halaman kategori',
+'tooltip-minoredit'               => 'Tandai ini sebagai suntingan kecil',
+'tooltip-save'                    => 'Simpan perubahan Anda',
+'tooltip-preview'                 => 'Pratayang perubahan Anda, harap gunakan ini sebelum menyimpan!',
+'tooltip-diff'                    => 'Lihat perubahan yang telah Anda lakukan.',
+'tooltip-compareselectedversions' => 'Lihat perbedaan antara dua versi halaman yang dipilih.',
+'tooltip-watch'                   => 'Tambahkan halaman ini ke daftar pantauan Anda',
+'tooltip-recreate'                => 'Buat ulang halaman walaupun sebenarnya telah dihapus',
+
+# Stylesheets
+'common.css'   => '/* CSS yang ada di sini akan diterapkan untuk semua kulit. */',
+'monobook.css' => '/* CSS yang ada di sini akan diterapkan untuk kulit Monobook. */',
+
+# Scripts
+'common.js'   => '/* JavaScript yang ada di sini akan diterapkan untuk semua kulit. */',
+'monobook.js' => '/* Tidak dianjurkan; gunakan [[MediaWiki:common.js]] */',
+
+# Metadata
+'nodublincore'      => 'Metadata Dublin Core RDF dimatikan di server ini.',
+'nocreativecommons' => 'Metadata Creative Commons RDF dimatikan di server ini.',
+'notacceptable'     => 'Server wiki tidak dapat menyediakan data dalam format yang dapat dibaca oleh client Anda.',
+
+# Attribution
+'anonymous'        => 'Pengguna(-pengguna) anonim {{SITENAME}}',
+'siteuser'         => 'Pengguna {{SITENAME}} $1',
+'lastmodifiedatby' => 'Halaman ini terakhir kali diubah $2, $1 oleh $3.', # $1 date, $2 time, $3 user
+'and'              => 'dan',
+'othercontribs'    => 'Didasarkan pada karya $1.',
+'others'           => 'lainnya',
+'siteusers'        => 'Pengguna(-pengguna) {{SITENAME}} $1',
+'creditspage'      => 'Penghargaan halaman',
+'nocredits'        => 'Tidak ada informasi penghargaan yang tersedia untuk halaman ini.',
+
+# Spam protection
+'spamprotectiontitle'    => 'Filter pencegah spam',
+'spamprotectiontext'     => 'Halaman yang ingin Anda simpan diblokir oleh filter spam. Ini mungkin disebabkan oleh pranala ke situs luar.',
+'spamprotectionmatch'    => 'Teks berikut ini memancing filter spam kami: $1',
+'subcategorycount'       => 'Ada $1 subkategori dalam kategori ini.',
+'categoryarticlecount'   => 'Ada $1 artikel dalam kategori ini.',
+'category-media-count'   => 'Ada $1 berkas dalam kategori ini.',
+'listingcontinuesabbrev' => ' samb.',
+'spambot_username'       => 'Pembersihan span MediaWiki',
+'spam_reverting'         => 'Mengembalikan ke versi terakhir yang tak memiliki pranala ke $1',
+'spam_blanking'          => 'Semua revisi yang memiliki pranala ke $1, pengosongan',
+
+# Info page
+'infosubtitle'   => 'Informasi halaman',
+'numedits'       => 'Jumlah penyuntingan (artikel): $1',
+'numtalkedits'   => 'Jumlah penyuntingan (halaman pembicaraan): $1',
+'numwatchers'    => 'Jumlah pengamat: $1',
+'numauthors'     => 'Jumlah pengarang yang berbeda (artikel): $1',
+'numtalkauthors' => 'Jumlah pengarang yang berbeda (halaman pembicaraan): $1',
+
+# Math options
+'mw_math_png'    => 'Selalu buat PNG',
+'mw_math_simple' => 'HTML jika sangat sederhana atau PNG',
+'mw_math_html'   => 'HTML jika mungkin atau PNG',
+'mw_math_source' => 'Biarkan sebagai TeX (untuk penjelajah web teks)',
+'mw_math_modern' => 'Disarankan untuk penjelajah web modern',
+'mw_math_mathml' => 'MathML jika mungkin (percobaan)',
+
+# Patrolling
+'markaspatrolleddiff'                 => 'Tandai telah dipatroli',
+'markaspatrolledtext'                 => 'Tandai artikel ini telah dipatroli',
+'markedaspatrolled'                   => 'Ditandai telah dipatroli',
+'markedaspatrolledtext'               => 'Revisi yang dipilih telah ditandai terpatroli',
+'rcpatroldisabled'                    => 'Patroli perubahan terbaru dimatikan',
+'rcpatroldisabledtext'                => 'Fitur patroli perubahan terbaru sedang dimatikan.',
+'markedaspatrollederror'              => 'Tidak dapat menandai telah dipatroli',
+'markedaspatrollederrortext'          => 'Anda harus menentukan satu revisi untuk ditandai sebagai yang dipatroli.',
+'markedaspatrollederror-noautopatrol' => 'Anda tidak diizinkan menandai suntingan Anda sendiri dipatroli.',
+
+# Patrol log
+'patrol-log-page' => 'Log patroli',
+'patrol-log-line' => 'menandai $1 dari $2 terpatroli $3',
+'patrol-log-auto' => '(otomatis)',
+'patrol-log-diff' => 'r$1',
+
+# Image deletion
+'deletedrevision' => 'Revisi lama yang dihapus $1.',
+
+# Browsing diffs
+'previousdiff' => '←Perbedaan sebelumnya',
+'nextdiff'     => 'Perbedaan selanjutnya→',
+
+# Media information
+'mediawarning'         => "'''Peringatan:''' Berkas ini mungkin mengandung kode berbahaya yang jika dijalankan dapat mempengaruhi sistem Anda.<hr />",
+'imagemaxsize'         => 'Batasi ukuran gambar dalam halaman deskripsi berkas sampai:',
+'thumbsize'            => 'Ukuran gambar kecil (thumbnail):',
+'file-info'            => '(ukuran berkas: $1, tipe MIME: $2)',
+'file-info-size'       => '($1 × $2 piksel, ukuran berkas: $3, tipe MIME: $4)',
+'file-nohires'         => '<small>Tak tersedia resolusi yang lebih tinggi.</small>',
+'file-svg'             => '<small>Ini adalah berkas vektor yang dapat diubah skalanya dengan bebas. Ukuran dasar: $1 × $2 piksel.</small>',
+'show-big-image'       => 'Resolusi penuh',
+'show-big-image-thumb' => '<small>Ukuran pratayang ini: $1 × $2 piksel</small>',
+
+'newimages'    => 'Galeri berkas baru',
+'showhidebots' => '($1 bot)',
+'noimages'     => 'Tidak ada yang dilihat.',
+
+/*
+Short names for language variants used for language conversion links.
+To disable showing a particular link, set it to 'disable', e.g.
+'variantname-zh-sg' => 'disable',
+Variants for Chinese language
+*/
+'variantname-zh-cn' => 'cn',
+'variantname-zh-tw' => 'tw',
+'variantname-zh-hk' => 'hk',
+'variantname-zh-sg' => 'sg',
+'variantname-zh'    => 'zh',
+
+# Variants for Serbian language
+'variantname-sr-ec' => 'sr-ec',
+'variantname-sr-el' => 'sr-el',
+'variantname-sr-jc' => 'sr-jc',
+'variantname-sr-jl' => 'sr-jl',
+'variantname-sr'    => 'sr',
+
+# Variants for Kazakh language
+'variantname-kk-tr' => 'kk-tr',
+'variantname-kk-kz' => 'kk-kz',
+'variantname-kk-cn' => 'kk-cn',
+'variantname-kk'    => 'kk',
+
+'passwordtooshort' => 'Kata sandi Anda tidak sah atau terlalu pendek. Kata sandi paling tidak harus terdiri dari $1 karakter dan harus berbeda dengan nama pengguna Anda.',
+
+# Metadata
+'metadata'          => 'Metadata',
+'metadata-help'     => 'Berkas ini mengandung informasi tambahan yang mungkin ditambahkan oleh kamera digital atau pemindai yang digunakan untuk membuat atau mendigitalisasi berkas. Jika berkas ini telah mengalami modifikasi, detil yang ada mungkin tidak secara penuh merefleksikan informasi dari gambar yang sudah dimodifikasi ini.',
+'metadata-expand'   => 'Tampilkan detil tambahan',
+'metadata-collapse' => 'Sembunyikan detil tambahan',
+'metadata-fields'   => 'Entri metadata EXIF berikut akan ditampilkan pada halaman informasi gambar jika tabel metadata disembunyikan. Entri lain secara baku akan disembunyikan
+* make
+* model
+* datetimeoriginal
+* exposuretime
+* fnumber',
+
+# EXIF tags
+'exif-imagewidth'                  => 'Lebar',
+'exif-imagelength'                 => 'Tinggi',
+'exif-bitspersample'               => 'Bit per komponen',
+'exif-compression'                 => 'Skema kompresi',
+'exif-photometricinterpretation'   => 'Komposisi piksel',
+'exif-orientation'                 => 'Orientasi',
+'exif-samplesperpixel'             => 'Jumlah komponen',
+'exif-planarconfiguration'         => 'Pengaturan data',
+'exif-ycbcrsubsampling'            => 'Rasio subsampling Y ke C',
+'exif-ycbcrpositioning'            => 'Penempatan Y dan C',
+'exif-xresolution'                 => 'Resolusi horizontal',
+'exif-yresolution'                 => 'Resolusi vertikal',
+'exif-resolutionunit'              => 'Satuan resolusi X dan Y',
+'exif-stripoffsets'                => 'Lokasi data gambar',
+'exif-rowsperstrip'                => 'Jumlah baris per strip',
+'exif-stripbytecounts'             => 'Bita per strip kompresi',
+'exif-jpeginterchangeformat'       => 'Ofset ke JPEG SOI',
+'exif-jpeginterchangeformatlength' => 'Bita data JPEG',
+'exif-transferfunction'            => 'Fungsi transfer',
+'exif-whitepoint'                  => 'Kromatisitas titik putih',
+'exif-primarychromaticities'       => 'Kromatisitas warna primer',
+'exif-ycbcrcoefficients'           => 'Koefisien matriks transformasi ruang warna',
+'exif-referenceblackwhite'         => 'Nilai referensi pasangan hitam putih',
+'exif-datetime'                    => 'Tanggal dan waktu perubahan berkas',
+'exif-imagedescription'            => 'Judul gambar',
+'exif-make'                        => 'Produsen kamera',
+'exif-model'                       => 'Model kamera',
+'exif-software'                    => 'Perangkat lunak',
+'exif-artist'                      => 'Pembuat',
+'exif-copyright'                   => 'Pemilik hak cipta',
+'exif-exifversion'                 => 'Versi Exif',
+'exif-flashpixversion'             => 'Dukungan versi Flashpix',
+'exif-colorspace'                  => 'Ruang warna',
+'exif-componentsconfiguration'     => 'Arti tiap komponen',
+'exif-compressedbitsperpixel'      => 'Mode kompresi gambar',
+'exif-pixelydimension'             => 'Lebar gambar yang sah',
+'exif-pixelxdimension'             => 'Tinggi gambar yang sah',
+'exif-makernote'                   => 'Catatan produsen',
+'exif-usercomment'                 => 'Komentar pengguna',
+'exif-relatedsoundfile'            => 'Berkas audio yang berhubungan',
+'exif-datetimeoriginal'            => 'Tanggal dan waktu pembuatan data',
+'exif-datetimedigitized'           => 'Tanggal dan waktu digitalisasi',
+'exif-subsectime'                  => 'Subdetik DateTime',
+'exif-subsectimeoriginal'          => 'Subdetik DateTimeOriginal',
+'exif-subsectimedigitized'         => 'Subdetik DateTimeDigitized',
+'exif-exposuretime'                => 'Waktu pajanan',
+'exif-exposuretime-format'         => '$1 detik ($2)',
+'exif-fnumber'                     => 'Nilai F',
+'exif-fnumber-format'              => 'f/$1',
+'exif-exposureprogram'             => 'Program pajanan',
+'exif-spectralsensitivity'         => 'Sensitivitas spektral',
+'exif-isospeedratings'             => 'Rating kecepatan ISO',
+'exif-oecf'                        => 'Faktor konversi optoelektronik',
+'exif-shutterspeedvalue'           => 'Kecepatan rana',
+'exif-aperturevalue'               => 'Bukaan',
+'exif-brightnessvalue'             => 'Kecerahan',
+'exif-exposurebiasvalue'           => 'Bias pajanan',
+'exif-maxaperturevalue'            => 'Bukaan tanah maksimum',
+'exif-subjectdistance'             => 'Jarak subjek',
+'exif-meteringmode'                => 'Mode pengukuran',
+'exif-lightsource'                 => 'Sumber cahaya',
+'exif-flash'                       => 'Kilas',
+'exif-focallength'                 => 'Jarak fokus lensa',
+'exif-focallength-format'          => '$1 mm',
+'exif-subjectarea'                 => 'Wilayah subjek',
+'exif-flashenergy'                 => 'Energi kilas',
+'exif-spatialfrequencyresponse'    => 'Respons frekuensi spasial',
+'exif-focalplanexresolution'       => 'Resolusi bidang fokus X',
+'exif-focalplaneyresolution'       => 'Resolusi bidang fokus Y',
+'exif-focalplaneresolutionunit'    => 'Unit resolusi bidang fokus',
+'exif-subjectlocation'             => 'Lokasi subjek',
+'exif-exposureindex'               => 'Indeks pajanan',
+'exif-sensingmethod'               => 'Metode penginderaan',
+'exif-filesource'                  => 'Sumber berkas',
+'exif-scenetype'                   => 'Tipe pemandangan',
+'exif-cfapattern'                  => 'Pola CFA',
+'exif-customrendered'              => 'Proses buatan gambar',
+'exif-exposuremode'                => 'Mode pajanan',
+'exif-whitebalance'                => 'Keseimbangan putih',
+'exif-digitalzoomratio'            => 'Rasio pembesaran digital',
+'exif-focallengthin35mmfilm'       => 'Panjang fokus pada fil 35 mm',
+'exif-scenecapturetype'            => 'Tipe penangkapan',
+'exif-gaincontrol'                 => 'Kontrol pemandangan',
+'exif-contrast'                    => 'Kontras',
+'exif-saturation'                  => 'Saturasi',
+'exif-sharpness'                   => 'Ketajaman',
+'exif-devicesettingdescription'    => 'Deskripsi pengaturan alat',
+'exif-subjectdistancerange'        => 'Jarak subjek',
+'exif-imageuniqueid'               => 'ID unik gambar',
+'exif-gpsversionid'                => 'Versi tag GPS',
+'exif-gpslatituderef'              => 'Lintang Utara atau Selatan',
+'exif-gpslatitude'                 => 'Lintang',
+'exif-gpslongituderef'             => 'Bujur Timur atau Barat',
+'exif-gpslongitude'                => 'Bujur',
+'exif-gpsaltituderef'              => 'Referensi ketinggian',
+'exif-gpsaltitude'                 => 'Ketinggian',
+'exif-gpstimestamp'                => 'Waktu GPS (jam atom)',
+'exif-gpssatellites'               => 'Satelit untuk pengukuran',
+'exif-gpsstatus'                   => 'Status penerima',
+'exif-gpsmeasuremode'              => 'Mode pengukuran',
+'exif-gpsdop'                      => 'Ketepatan pengukuran',
+'exif-gpsspeedref'                 => 'Unit kecepatan',
+'exif-gpsspeed'                    => 'Kecepatan penerima GPS',
+'exif-gpstrackref'                 => 'Referensi arah gerakan',
+'exif-gpstrack'                    => 'Arah gerakan',
+'exif-gpsimgdirectionref'          => 'Referensi arah gambar',
+'exif-gpsimgdirection'             => 'Arah gambar',
+'exif-gpsmapdatum'                 => 'Data survei geodesi',
+'exif-gpsdestlatituderef'          => 'Referensi lintang dari tujuan',
+'exif-gpsdestlatitude'             => 'Lintang tujuan',
+'exif-gpsdestlongituderef'         => 'Referensi bujur dari tujuan',
+'exif-gpsdestlongitude'            => 'Bujur tujuan',
+'exif-gpsdestbearingref'           => 'Referensi bearing of destination',
+'exif-gpsdestbearing'              => 'Bearing of destination',
+'exif-gpsdestdistanceref'          => 'Referensi jarak dari tujuan',
+'exif-gpsdestdistance'             => 'Jarak dari tujuan',
+'exif-gpsprocessingmethod'         => 'Nama metode proses GPS',
+'exif-gpsareainformation'          => 'Nama wilayah GPS',
+'exif-gpsdatestamp'                => 'Tanggal GPS',
+'exif-gpsdifferential'             => 'Koreksi diferensial GPS',
+
+# EXIF attributes
+'exif-compression-1' => 'Tak terkompresi',
+'exif-compression-6' => 'JPEG',
+
+'exif-photometricinterpretation-2' => 'RGB',
+'exif-photometricinterpretation-6' => 'YCbCr',
+
+'exif-unknowndate' => 'Tanggal tak diketahui',
+
+'exif-orientation-1' => 'Normal', # 0th row: top; 0th column: left
+'exif-orientation-2' => 'Dibalik horizontal', # 0th row: top; 0th column: right
+'exif-orientation-3' => 'Diputar 180°', # 0th row: bottom; 0th column: right
+'exif-orientation-4' => 'Dibalik vertikal', # 0th row: bottom; 0th column: left
+'exif-orientation-5' => 'Diputar 90° CCW dan dibalik vertikal', # 0th row: left; 0th column: top
+'exif-orientation-6' => 'Diputar 90° CW', # 0th row: right; 0th column: top
+'exif-orientation-7' => 'Diputar 90° CW dan dibalik vertikal', # 0th row: right; 0th column: bottom
+'exif-orientation-8' => 'Diputar 90° CCW', # 0th row: left; 0th column: bottom
+
+'exif-planarconfiguration-1' => 'format chunky',
+'exif-planarconfiguration-2' => 'format planar',
+
+'exif-xyresolution-i' => '$1 dpi',
+'exif-xyresolution-c' => '$1 dpc',
+
+'exif-colorspace-1'      => 'sRGB',
+'exif-colorspace-ffff.h' => 'FFFF.H',
+
+'exif-componentsconfiguration-0' => 'tak tersedia',
+'exif-componentsconfiguration-1' => 'Y',
+'exif-componentsconfiguration-2' => 'Cb',
+'exif-componentsconfiguration-3' => 'Cr',
+'exif-componentsconfiguration-4' => 'R',
+'exif-componentsconfiguration-5' => 'G',
+'exif-componentsconfiguration-6' => 'B',
+
+'exif-exposureprogram-0' => 'Tak terdefinisi',
+'exif-exposureprogram-1' => 'Manual',
+'exif-exposureprogram-2' => 'Program normal',
+'exif-exposureprogram-3' => 'Prioritas bukaan',
+'exif-exposureprogram-4' => 'Prioritas penutup',
+'exif-exposureprogram-5' => 'Program kreatif (condong ke kedalaman ruang)',
+'exif-exposureprogram-6' => 'Program aksi (condong ke kecepatan rana)',
+'exif-exposureprogram-7' => 'Mode potret (untuk foto closeup dengan latar belakang tak fokus)',
+'exif-exposureprogram-8' => 'Mode pemandangan (untuk foto pemandangan dengan latar belakang fokus)',
+
+'exif-subjectdistance-value' => '$1 meter',
+
+'exif-meteringmode-0'   => 'Tak diketahui',
+'exif-meteringmode-1'   => 'Rerata',
+'exif-meteringmode-2'   => 'RerataBerbobot',
+'exif-meteringmode-3'   => 'Terpusat',
+'exif-meteringmode-4'   => 'BanyakPusat',
+'exif-meteringmode-5'   => 'Pola',
+'exif-meteringmode-6'   => 'Parsial',
+'exif-meteringmode-255' => 'Lain-lain',
+
+'exif-lightsource-0'   => 'Tak diketahui',
+'exif-lightsource-1'   => 'Cahaya siang',
+'exif-lightsource-2'   => 'Pendarflour',
+'exif-lightsource-3'   => 'Wolfram (cahaya pijar)',
+'exif-lightsource-4'   => 'Kilas',
+'exif-lightsource-9'   => 'Cuaca baik',
+'exif-lightsource-10'  => 'Cuaca berkabut',
+'exif-lightsource-11'  => 'Bayangan',
+'exif-lightsource-12'  => 'Pendarflour cahaya siang (D 5700 – 7100K)',
+'exif-lightsource-13'  => 'Pendarflour putih siang (N 4600 – 5400K)',
+'exif-lightsource-14'  => 'Pendarflour putih teduh (W 3900 – 4500K)',
+'exif-lightsource-15'  => 'Pendarflour putih (WW 3200 – 3700K)',
+'exif-lightsource-17'  => 'Cahaya standar A',
+'exif-lightsource-18'  => 'Cahaya standar B',
+'exif-lightsource-19'  => 'Cahaya standar C',
+'exif-lightsource-20'  => 'D55',
+'exif-lightsource-21'  => 'D65',
+'exif-lightsource-22'  => 'D75',
+'exif-lightsource-23'  => 'D50',
+'exif-lightsource-24'  => 'ISO studio tungsten',
+'exif-lightsource-255' => 'Sumber cahaya lain',
+
+'exif-focalplaneresolutionunit-2' => 'inci',
+
+'exif-sensingmethod-1' => 'Tak terdefinisi',
+'exif-sensingmethod-2' => 'Sensor area warna satu keping',
+'exif-sensingmethod-3' => 'Sensor area warna dua keping',
+'exif-sensingmethod-4' => 'Sensor area warna tiga keping',
+'exif-sensingmethod-5' => 'Sensor area warna berurut',
+'exif-sensingmethod-7' => 'Sensor trilinear',
+'exif-sensingmethod-8' => 'Sensor linear warna berurut',
+
+'exif-filesource-3' => 'DSC',
+
+'exif-scenetype-1' => 'Gambar foto langsung',
+
+'exif-customrendered-0' => 'Proses normal',
+'exif-customrendered-1' => 'Proses kustom',
+
+'exif-exposuremode-0' => 'Pajanan otomatis',
+'exif-exposuremode-1' => 'Pajanan manual',
+'exif-exposuremode-2' => 'Braket otomatis',
+
+'exif-whitebalance-0' => 'Keseimbangan putih otomatis',
+'exif-whitebalance-1' => 'Keseimbangan putih manual',
+
+'exif-scenecapturetype-0' => 'Standar',
+'exif-scenecapturetype-1' => 'Melebar',
+'exif-scenecapturetype-2' => 'Potret',
+'exif-scenecapturetype-3' => 'Pemandangan malam',
+
+'exif-gaincontrol-0' => 'Tak ada',
+'exif-gaincontrol-1' => 'Low gain up',
+'exif-gaincontrol-2' => 'High gain up',
+'exif-gaincontrol-3' => 'Low gain down',
+'exif-gaincontrol-4' => 'High gain down',
+
+'exif-contrast-0' => 'Normal',
+'exif-contrast-1' => 'Lembut',
+'exif-contrast-2' => 'Keras',
+
+'exif-saturation-0' => 'Normal',
+'exif-saturation-1' => 'Saturasi rendah',
+'exif-saturation-2' => 'Saturasi tinggi',
+
+'exif-sharpness-0' => 'Normal',
+'exif-sharpness-1' => 'Lembut',
+'exif-sharpness-2' => 'Keras',
+
+'exif-subjectdistancerange-0' => 'Tak diketahui',
+'exif-subjectdistancerange-1' => 'Makro',
+'exif-subjectdistancerange-2' => 'Tampak dekat',
+'exif-subjectdistancerange-3' => 'Tampak jauh',
+
+# Pseudotags used for GPSLatitudeRef and GPSDestLatitudeRef
+'exif-gpslatitude-n' => 'Lintang utara',
+'exif-gpslatitude-s' => 'Lintang selatan',
+
+# Pseudotags used for GPSLongitudeRef and GPSDestLongitudeRef
+'exif-gpslongitude-e' => 'Bujur timur',
+'exif-gpslongitude-w' => 'Bujur barat',
+
+'exif-gpsstatus-a' => 'Pengukuran sedang berlangsung',
+'exif-gpsstatus-v' => 'Interoperabilitas pengukuran',
+
+'exif-gpsmeasuremode-2' => 'Pengukuran 2-dimensi',
+'exif-gpsmeasuremode-3' => 'Pengukuran 3-dimensi',
+
+# Pseudotags used for GPSSpeedRef and GPSDestDistanceRef
+'exif-gpsspeed-k' => 'Kilometer per jam',
+'exif-gpsspeed-m' => 'Mil per jam',
+'exif-gpsspeed-n' => 'Knot',
+
+# Pseudotags used for GPSTrackRef, GPSImgDirectionRef and GPSDestBearingRef
+'exif-gpsdirection-t' => 'Arah sejati',
+'exif-gpsdirection-m' => 'Arah magnetis',
+
+# External editor support
+'edit-externally'      => 'Sunting berkas ini dengan aplikasi luar',
+'edit-externally-help' => 'Lihat [http://meta.wikimedia.org/wiki/Help:External_editors instruksi pengaturan] untuk informasi lebih lanjut.',
+
+# 'all' in various places, this might be different for inflected languages
+'recentchangesall' => 'semua',
+'imagelistall'     => 'semua',
+'watchlistall1'    => 'semua',
+'watchlistall2'    => 'semua',
+'namespacesall'    => 'semua',
+
+# E-mail address confirmation
+'confirmemail'            => 'Konfirmasi alamat surat-e',
+'confirmemail_noemail'    => 'Anda tidak memberikan alamat surat-e yang sah di [[Special:Preferences|preferensi pengguna]] Anda.',
+'confirmemail_text'       => 'Wiki ini mengharuskan Anda untuk melakukan konfirmasi atas alamat surat elektronik Anda sebelum fitur-fitur surat elektronik dapat digunakan. Tekan tombol di bawah ini untuk mengirimi Anda sebuah surat elektronik yang berisi kode konfirmasi yang berupa sebuah alamat internet. Salin alamat tersebut ke penjelajah web Anda dan buka alamat tersebut untuk melakukan konfirmasi sehingga menginformasikan bahwa alamat surat elektronik Anda valid.',
+'confirmemail_pending'    => '<div class="error">Suatu kode konfirmasi telah dikirimkan kepada Anda; jika Anda baru saja membuat akun Anda, silakan tunggu beberapa menit untuk surat tersebut tiba sebelum mencoba untuk meminta satu kode baru.</div>',
+'confirmemail_send'       => 'Kirim kode konfirmasi',
+'confirmemail_sent'       => 'Surat elektronik berisi kode konfirmasi telah dikirim.',
+'confirmemail_oncreate'   => 'Suatu kode konfirmasi telah dikirimkan ke alamat surat-e Anda. Kode ini tidak dibutuhkan untuk masuk log, tapi dibutuhkan sebelum menggunakan semua fitur yang menggunakan surat-e di wiki ini.',
+'confirmemail_sendfailed' => 'Surat-e konfirmasi tidak berhasil dikirim. Harap cek kemungkinan karakter ilegal pada alamat surat-e. Pengirim menginformasikan: $1',
+'confirmemail_invalid'    => 'Kode konfirmasi salah. Kode tersebut mungkin sudah kadaluwarsa.',
+'confirmemail_needlogin'  => 'Anda harus melakukan $1 untuk mengkonfirmasikan alamat surat-e Anda.',
+'confirmemail_success'    => 'Alamat surat-e Anda telah dikonfirmasi. Sekarang Anda dapat masuk log dan mulai menggunakan wiki.',
+'confirmemail_loggedin'   => 'Alamat surat elektronik Anda telah dikonfirmasi.',
+'confirmemail_error'      => 'Terjadi kesalahan sewaktu menyimpan konfirmasi Anda.',
+'confirmemail_subject'    => 'Konfirmasi alamat surat-e {{SITENAME}}',
+'confirmemail_body'       => 'Seseorang, mungkin Anda, dari alamat IP $1, telah mendaftarkan akun "$2" dengan alamat surat-e ini di {{SITENAME}}.
+
+Untuk mengkonfirmasikan bahwa akun ini benar dimiliki oleh Anda sekaligus mengaktifkan fitur surat-e di {{SITENAME}}, ikuti pranala berikut pada penjelajah web Anda:
+
+$3
+
+Jika Anda merasa *tidak pernah* mendaftar, jangan ikuti pranala di atas. Kode konfirmasi ini akan kadaluwarsa pada $4.',
+
+# Inputbox extension, may be useful in other contexts as well
+'tryexact'       => 'Coba pencocokan eksak',
+'searchfulltext' => 'Cari di teks lengkap',
+'createarticle'  => 'Buat artikel',
+
+# Scary transclusion
+'scarytranscludedisabled' => '[Transklusi interwiki dimatikan]',
+'scarytranscludefailed'   => '[Pengambilan templat $1 gagal; maaf]',
+'scarytranscludetoolong'  => '[URL terlalu panjang; maaf]',
+
+# Trackbacks
+'trackbackbox'      => '<div id="mw_trackbacks">
+Pelacakan balik untuk artikel ini:<br />
+$1
+</div>',
+'trackbackremove'   => ' ([$1 Hapus])',
+'trackbacklink'     => 'Lacak balik',
+'trackbackdeleteok' => 'Pelacakan balik berhasil dihapus.',
+
+# Delete conflict
+'deletedwhileediting' => 'Perhatian: Halaman ini telah dihapus setelah Anda mulai melakukan penyuntingan!',
+'confirmrecreate'     => "Pengguna [[{{ns:user}}:$1|$1]] ([[{{ns:user_talk}}:$1|Pembicaraan]]) telah menghapus halaman selagi Anda mulai melakukan penyuntingan dengan alasan:
+: ''$2''
+Silakan konfirmasi jika Anda ingin membuat ulang halaman ini.",
+'recreate'            => 'Buat ulang',
+
+'unit-pixel' => 'px',
+
+# HTML dump
+'redirectingto' => 'Sedang dialihkan ke [[$1]]...',
+
+# action=purge
+'confirm_purge'        => "Hapus ''cache'' halaman ini?
+
+$1",
+'confirm_purge_button' => 'OK',
+
+'youhavenewmessagesmulti' => 'Anda mendapat pesan-pesan baru $1',
+
+'searchcontaining' => "Mencari artikel yang mengandung ''$1''.",
+'searchnamed'      => "Mencari artikel yang berjudul ''$1''.",
+'articletitles'    => "Artikel yang diawali ''$1''",
+'hideresults'      => 'Sembunyikan hasil',
+
+# DISPLAYTITLE
+'displaytitle' => '(Pranala ke halaman ini sebagai [[$1]])',
+
+'loginlanguagelabel' => 'Bahasa: $1',
+
+# Multipage image navigation
+'imgmultipageprev'   => '&larr; halaman sebelumnya',
+'imgmultipagenext'   => 'halaman selanjutnya &rarr;',
+'imgmultigo'         => 'Cari!',
+'imgmultigotopre'    => 'Ke halaman',
+'imgmultiparseerror' => 'Berkas gambar tampaknya rusak atau tak sah, sehingga {{SITENAME}} tidak dapat mengambil daftar halaman.',
+
+# Table pager
+'ascending_abbrev'         => 'naik',
+'descending_abbrev'        => 'turun',
+'table_pager_next'         => 'Halaman selanjutnya',
+'table_pager_prev'         => 'Halaman sebelumnya',
+'table_pager_first'        => 'Halaman pertama',
+'table_pager_last'         => 'Halaman terakhir',
+'table_pager_limit'        => 'Tampilkan $1 entri per halaman',
+'table_pager_limit_submit' => 'Cari',
+'table_pager_empty'        => 'Tidak ditemukan',
+
+# Auto-summaries
+'autosumm-blank'   => '←Mengosongkan halaman',
+'autosumm-replace' => "←Mengganti halaman dengan '$1'",
+'autoredircomment' => '←Mengalihkan ke [[$1]]', # This should be changed to the new naming convention, but existed beforehand
+'autosumm-new'     => "←Membuat halaman berisi '$1'",
+
+# Size units
+'size-bytes'     => '$1 B',
+'size-kilobytes' => '$1 KB',
+'size-megabytes' => '$1 MB',
+'size-gigabytes' => '$1 GB',
+
+# Live preview
+'livepreview-loading' => 'Memuat…',
+'livepreview-ready'   => 'Memuat… Selesai!',
+'livepreview-failed'  => 'Pratayang langsung gagal!
+Coba dengan pratayang normal.',
+'livepreview-error'   => 'Gagal tersambung: $1 "$2"
+Coba dengan pratayang normal.',
+
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesIi.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesIi.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesIi.php	(revision 1280)
@@ -0,0 +1,8 @@
+<?php
+/** Yi (ꆇꉙ)
+  *
+  * @addtogroup Language
+  */
+
+$fallback = 'zh-cn';
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesIs.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesIs.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesIs.php	(revision 1280)
@@ -0,0 +1,754 @@
+<?php
+/** Icelandic (Íslenska)
+ *
+ * @addtogroup Language
+ */
+
+$skinNames = array(
+	'standard'	=> 'Klassískt',
+	'nostalgia'	=> 'Gamaldags',
+	'cologneblue'	=> 'Kölnarblátt',
+	'myskin'	=> 'Mitt þema',
+);
+
+$datePreferences = array(
+	'default',
+	'dmyt',
+	'short dmyt',
+	'tdmy',
+	'short tdmy',
+	'ISO 8601',
+);
+
+$datePreferenceMigrationMap = array(
+	'default',
+	'dmyt',
+	'short dmyt',
+	'tdmy',
+	'short tdmy',
+);	
+
+$dateFormats = array(
+	'dmyt time' => 'H:i',
+	'dmyt date' => 'j. F Y',
+	'dmyt both' => 'j. F Y "kl." H:i',
+
+	'short dmyt time' => 'H:i',
+	'short dmyt date' => 'j. M. Y',
+	'short dmyt both' => 'j. M. Y "kl." H:i',
+
+	'tdmy time' => 'H:i',
+	'tdmy date' => 'j. F Y',
+	'tdmy both' => 'H:i, j. F Y',
+
+	'short tdmy time' => 'H:i',
+	'short tdmy date' => 'j. M. Y',
+	'short tdmy both' => 'H:i, j. M. Y',
+);
+
+$magicWords = array(
+	'redirect'   => array( 0, '#tilvísun', '#TILVÍSUN', '#redirect' ), // MagicWord::initRegex() sucks
+);
+$namespaceNames = array(
+	NS_MEDIA          => 'Miðill',
+	NS_SPECIAL        => 'Kerfissíða',
+	NS_MAIN           => '',
+	NS_TALK           => 'Spjall',
+	NS_USER           => 'Notandi',
+	NS_USER_TALK      => 'Notandaspjall',
+	NS_PROJECT_TALK   => '$1spjall',
+	NS_IMAGE          => 'Mynd',
+	NS_IMAGE_TALK     => 'Myndaspjall',
+	NS_MEDIAWIKI      => 'Melding',
+	NS_MEDIAWIKI_TALK => 'Meldingarspjall',
+	NS_TEMPLATE       => 'Snið',
+	NS_TEMPLATE_TALK  => 'Sniðaspjall',
+	NS_HELP           => 'Hjálp',
+	NS_HELP_TALK      => 'Hjálparspjall',
+	NS_CATEGORY       => 'Flokkur',
+	NS_CATEGORY_TALK  => 'Flokkaspjall'
+);
+
+$separatorTransformTable = array(',' => '.', '.' => ',' );
+$linkPrefixExtension = true;
+$linkTrail = '/^([áðéíóúýþæöa-z-–]+)(.*)$/sDu';
+
+	
+#-------------------------------------------------------------------
+# Default messages
+#-------------------------------------------------------------------
+
+$messages = array(
+'linkprefix'=> '/^(.*?)([áÁðÐéÉíÍóÓúÚýÝþÞæÆöÖA-Za-z-–]+)$/sDu',
+
+'1movedto2' => "$1 færð á $2",
+'1movedto2_redir' => "$1 færð á $2 yfir tilvísun",
+'monobook.css' => "
+/* Stórir stafir í ýmsu */
+#p-personal ul { text-transform: inherit; } /* notandanfn, spjall, stillingar */
+.portlet h5 { text-transform: inherit;}     /* flakk, leit, verkfæri... */
+#p-cactions li a {text-transform: inherit;} /* notandasíða, spjall... */",
+'monobook.js' => '/* Deprecated; use [[MediaWiki:common.js]] */',
+
+'accesskey-pt-userpage' => '.',
+'tooltip-pt-userpage' => 'Notendasíðan mín',
+'accesskey-pt-anonuserpage' => '.',
+'tooltip-pt-anonuserpage' => 'Notendasíðan fyrir IP töluna þína',
+'accesskey-pt-mytalk' => 'n',
+'tooltip-pt-mytalk' => 'Spallsíðan mín',
+'accesskey-pt-anontalk' => 'n',
+'tooltip-pt-anontalk' => 'Spjallsíðan fyrir þessa IP tölu',
+'accesskey-pt-preferences' => '',
+'tooltip-pt-preferences' => 'Almennar stillingar',
+'accesskey-pt-watchlist' => 'l',
+'tooltip-pt-watchlist' => 'Vaktlistinn.',
+'accesskey-pt-mycontris' => 'y',
+'tooltip-pt-mycontris' => 'Listi yfir framlög þín',
+'accesskey-pt-login' => 'o',
+'tooltip-pt-login' => 'Þú ert hvattur/hvött til að innskrá þig, það er hinsvegar ekki nauðsynlegt.',
+'accesskey-pt-anonlogin' => 'o',
+'tooltip-pt-anonlogin' => 'Þú ert hvattur/hvött til að innskrá þig, það er hinsvegar ekki nauðsynlegt.',
+'accesskey-pt-logout' => '',
+'tooltip-pt-logout' => 'Útskráning',
+'accesskey-ca-talk' => 't',
+'tooltip-ca-talk' => 'Spallsíða þessarar síðu',
+'accesskey-ca-edit' => 'e',
+'tooltip-ca-edit' => 'Þú getur breytt síðu þessari, vinsamlegast notaðu „forskoða“ hnappinn áður en þú vistar',
+'accesskey-ca-addsection' => '+',
+'tooltip-ca-addsection' => 'Viðbótarumræða.',
+'accesskey-ca-viewsource' => 'e',
+'tooltip-ca-viewsource' => 'Síða þessi er vernduð, þú getur þó skoðað frumkóða hennar.',
+'accesskey-ca-history' => 'h',
+'tooltip-ca-history' => 'Eldri útgáfur af síðunni.',
+'accesskey-ca-protect' => '=',
+'tooltip-ca-protect' => 'Vernda þessa síðu',
+'accesskey-ca-delete' => 'd',
+'tooltip-ca-delete' => 'Eyða þessari síðu',
+'accesskey-ca-undelete' => 'd',
+'tooltip-ca-undelete' => 'Endurvekja breytingar á síðu þessari fyrir en henni var tortímt',
+'accesskey-ca-move' => 'm',
+'tooltip-ca-move' => 'Færa þessa síðu',
+'accesskey-ca-watch' => 'w',
+'tooltip-ca-watch' => 'Bæta þessari síðu við á vaktlistann',
+'accesskey-ca-unwatch' => 'w',
+'tooltip-ca-unwatch' => 'Fjarlægja þessa síðu af vaktlistanum',
+'accesskey-search' => 'f',
+'tooltip-search' => 'Leit',
+'accesskey-p-logo' => '',
+'tooltip-p-logo' => 'Forsíða',
+'accesskey-n-mainpage' => 'z',
+'tooltip-n-mainpage' => 'Forsíða {{SITENAME}}',
+'accesskey-n-portal' => '',
+'tooltip-n-portal' => 'Um verkefnið, hvernig er hægt að hjálpa og hvar á að byrja',
+'accesskey-n-currentevents' => '',
+'tooltip-n-currentevents' => 'Líðandi stund',
+'accesskey-n-recentchanges' => 'r',
+'tooltip-n-recentchanges' => 'Listi yfir nýlegar breytingar.',
+'accesskey-n-randompage' => 'x',
+'tooltip-n-randompage' => 'Handahófsvalin síða',
+'accesskey-n-help' => '',
+'tooltip-n-help' => 'Efnisyfirlit yfir hjálparsíður.',
+'accesskey-n-sitesupport' => '',
+'tooltip-n-sitesupport' => 'Fjárframlagssíða',
+'accesskey-t-whatlinkshere' => 'j',
+'tooltip-t-whatlinkshere' => 'Listi yfir síður sem tengjast í þessa',
+'accesskey-t-recentchangeslinked' => 'k',
+'tooltip-t-recentchangeslinked' => 'Nýlegar breitingar á ítengdum síðum',
+'accesskey-feed-rss' => '',
+'tooltip-feed-rss' => 'RSS fyrir þessa síðu',
+'accesskey-feed-atom' => '',
+'tooltip-feed-atom' => 'Atom fyrir þessa síðu',
+'accesskey-t-contributions' => '',
+'tooltip-t-contributions' => 'Sýna framlagslista þessa notanda',
+'accesskey-t-emailuser' => '',
+'tooltip-t-emailuser' => 'Senda notanda þessum póst',
+'accesskey-t-upload' => 'u',
+'tooltip-t-upload' => 'Innhlaða myndum eða margmiðlunarskrám',
+'accesskey-t-specialpages' => 'q',
+'tooltip-t-specialpages' => 'Listi yfir kerfissíður',
+'accesskey-ca-nstab-main' => 'c',
+'tooltip-ca-nstab-main' => 'Sýna síðuna',
+'accesskey-ca-nstab-user' => 'c',
+'tooltip-ca-nstab-user' => 'Sýna notendasíðuna',
+'accesskey-ca-nstab-media' => 'c',
+'tooltip-ca-nstab-media' => 'Sýna margmiðlunarsíðuna',
+'accesskey-ca-nstab-special' => '',
+'tooltip-ca-nstab-special' => 'Þetta er kerfissíða, þér er óhæft að breyta henni.',
+'accesskey-ca-nstab-project' => 'a',
+'tooltip-ca-nstab-project' => 'Sýna verkefnasíðuna',
+'accesskey-ca-nstab-image' => 'c',
+'tooltip-ca-nstab-image' => 'Sýna myndasíðuna',
+'accesskey-ca-nstab-mediawiki' => 'c',
+'tooltip-ca-nstab-mediawiki' => 'Sýna kerfisskilaboðin',
+'accesskey-ca-nstab-template' => 'c',
+'tooltip-ca-nstab-template' => 'View the template',
+'accesskey-ca-nstab-help' => 'c',
+'tooltip-ca-nstab-help' => 'Sýna hjálparsíðuna',
+'accesskey-ca-nstab-category' => 'c',
+'tooltip-ca-nstab-category' => 'Sýna efnisflokkasíðuna',
+'about' => "Um",
+'aboutpage' => "Project:Um",
+'aboutsite' => "Um {{SITENAME}}",
+'accmailtext' => "Lykilorðið fyrir „$1“ hefur verið sent á $2.",
+'accmailtitle' => "Lykilorð sent.",
+'acct_creation_throttle_hit' => "Fyrirgefðu, þú hefur nú þegar búið til $1 aðgang(a). Þú getur ekki búið til fleiri.",
+'actioncomplete' => "Aðgerð lokið",
+'addedwatch' => "Bætt á vaktlistann",
+'addedwatchtext' => "Síðunni „$1“ hefur verið bætt á [[Special:Watchlist|Vaktlistann]] þinn.
+Frekari breytingar á henni eða spallsíðu hennar munu verða sýndar þar.
+Þar að auki verður síða þessi '''feitletruð''' á [[Special:Recentchanges|Nýlegum breytingum]]
+svo auðveldara sé að sjá hana þar meðal fjöldans.
+
+<p>Til að fjarlægja síðu þessa af vaktlistanum þarft þú að ýta á tengilinn er merktur er „afvakta“.",
+'allmessages' => "Kerfismeldingar",
+'allmessagescurrent' => "Núverandi texti",
+'allmessagesdefault' => "Sjálfgefinn texti",
+'allmessagesname' => "Titill",
+'allmessagestext' => "Listi yfir meldingar í „{{ns:8}}“ nafnarýminu.",
+'allpages' => "Allar síður",
+'alphaindexline' => "$1 til $2",
+'alreadyloggedin' => "<strong>Notandinn $1 er þegar innskráður!</strong><br />",
+'ancientpages' => "Elstu síður",
+'anontalkpagetext' => "----Þetta er spjallsíða fyrir óskráðan notanda sem hefur ekki búið til aðgang enn þá eða notar hann ekki, slíkir notendur þekkjast á [[IP tala|IP tölu]] sinni. Það getur gerst að margir notendur deili sömu IP tölu þannig að athugasemdum sem beint er til eins notanda geta birst á spjallsíðu annars. [[Special:Userlogin|Skráðu þig sem notanda]] til að koma í veg fyrir svona misskilning.''",
+'apr' => "apr",
+'april' => "apríl",
+'articleexists' => "Annaðhvort er þegar til síða undir þessum titli,
+eða sá titill sem þú hefur valið er ekki gildur.
+Vinsamlegast veldu annan titil.",
+'aug' => "ágú",
+'august' => "ágúst",
+'badfilename' => "Skáarnafninu hefur verið breytt í „$1“.",
+'badquery' => "Illa sniðin leitarfyrirspurn",
+'badtitle' => "Ógildur titill",
+'badtitletext' => "Umbeðin síðutitill er ógildur.",
+'blanknamespace' => "(Aðalnafnrýmið)",
+'blockip' => "Banna notanda",
+'blockipsuccesstext' => "„$1“ hefur verið bannaður.<br />
+Sjá [[Special:Ipblocklist|bannaðar notendur og IP tölur]] fyrir yfirlit yfir núverandi bönn.",
+'blockiptext' => "Hægt er að hindra einstaka notendur eða IP tölur í að gera breytingar á {{SITENAME}}
+
+Útrennslutímar eru í stöðluðu GNU sniði sem farið er yfir í [http://www.gnu.org/software/tar/manual/html_chapter/tar_7.html tar handbókinni], Til dæmis „1 hour“, „2 days“, „next Wednesday“, „1 January 2017“ eða „indefinite“ og „infinite“ til að banna að eylífu, þetta ætti þó aðeins að vera notað á ódauðlegar verur þar sem um 150 ár ættu að duga jafnvel á þrjóskasta fólk.
+
+Sjá [[meta:Range blocks|Range blocks]] á meta fyrir yfirlit yfir [[CIDR]] tölur, [[{{ns:Special}}:Ipblocklist|bannaða notendur og IP tölur]] fyrir lista yfir þá sem nú eru bannaðir og [[{{ns:4}}:Bönnunarskrá|bönnunarskrá]] fyrir lista sem inniheldur einnig þá sem hafa verið bannaðir í fortíðinni.",
+'blocklink' => "banna",
+'blocklistline' => "$1, $2 bannaði $3 ($4)",
+'infiniteblock' => 'rennur út infinite', //fixme
+'expiringblock' => 'rennur út  $1',
+'blocklogpage' => "Bönnunarskrá",
+'blocklogtext' => "This is a log of user blocking and unblocking actions. Automatically
+blocked IP addresses are not be listed. See the [[Special:Ipblocklist|IP block list]] for
+the list of currently operational bans and blocks.",
+'bold_sample' => "Feitletraður texti",
+'bold_tip' => "Feitletraður texti",
+'booksources' => "Bókabúðir",
+'bydate' => "eftir dagsetningu",
+'byname' => "eftir nafni",
+'bysize' => "eftir stærð",
+'cachederror' => "Eftirfarandi er afrit af umbeðinni síðu og gæti því ekki verið nýjasta útgáfa hennar:",
+'cancel' => "Hætta við",
+'cantrollback' => "Ekki hægt að taka aftur breytingu, síðasti höfundur er eini höfundur þessarar síðu.",
+'categories' => "Flokkar",
+'category_header' => "Greinar í flokknum „$1“",
+'categoryarticlecount' => "Það eru $1 síður í þessum flokki.",
+'changepassword' => "Breyta lykilorði",
+'changes' => "Breytingar",
+'clearyourcache' => "'''Ath:''' Eftir að þú hefur vistað breytingar þarf að hreynsa flýtiskrár vafrarans til að sjá þær, í '''Mozilla / Firefox''' ''CTRL-Shift-R'', '''IE:''' ''CTRL-F5'', '''Safari:''' ''CMD-Shift-R'', '''Konqueror:''' ''F5''.",
+'columns' => "Dálkar",
+'compareselectedversions' => "Bera saman valdar útgáfur",
+'confirm' => "Staðfesta",
+'confirmdelete' => "Staðfesting á eyðingu",
+'confirmprotect' => "Verndunarstaðfesting",
+'confirmprotecttext' => "Ertu viss um að þú viljir vernda þessa síðu?",
+'confirmunprotect' => "Afverndunarstaðfesting",
+'confirmunprotecttext' => "Ertu viss um að þú viljir afvernda þessa síðu?",
+'contextchars' => "Stafir í samhengi á hverja línu",
+'contextlines' => "Línur á hverja niðurstöðu",
+'contribslink' => "framlög",
+'contribsub2' => "Eftir $1 ($2)",
+'contributions' => "Framlög notanda",
+'copyright' => "Efni síðunnar má nota undir $1.",
+'copyrightpage' => "Project:Höfundarréttur",
+'copyrightpagename' => "Höfundarréttarreglum {{SITENAME}}",
+'createaccount' => "Nýskrá",
+'createaccountmail' => "með netfangi",
+'cur' => "nú",
+'currentevents' => "Líðandi stund",
+'currentevents-url' => "Líðandi stund",
+'currentrev' => "Núverandi útgáfa",
+'currentrevisionlink' => "núverandi útgáfa",
+'databaseerror' => "Gagnagrunnsvilla",
+'dateformat' => "Tímasnið",
+'datedefault' => 'Sjálfgefið',
+'deadendpages' => "Botnlangar",
+'dec' => "des",
+'december' => "desember",
+'defaultns' => "Leita í þessum nafnrýmum:",
+'defemailsubject' => "Varðandi {{SITENAME}}",
+'delete' => "Eyða",
+'deletecomment' => "Ástæða",
+'deletedarticle' => "tortímdi „$1“",
+'deletedtext' => "„$1“ hefur verið eytt. Sjá lista yfir nýlegar eyðingar í $2.",
+'deleteimg' => "eyða",
+'deleteimgcompletely' => "Eyða öllum útgáfum",
+'deletesub' => "(Eyði: „$1“)",
+'deletethispage' => "Eyða þessari síðu",
+'deletionlog' => "eyðingaskrá",
+'dellogpage' => "Eyðingaskrá",
+'diff' => "breyting",
+'difference' => "(Munur milli útgáfa)",
+'disambiguations' => "Aðgreiningarsíður",
+'disambiguationstext' => "The following pages link to a <i>disambiguation page</i>. They should link to the appropriate topic instead.<br />A page is treated as dismbiguation if it is linked from $1.<br />Links from other namespaces are <i>not</i> listed here.",
+'disclaimerpage' => "Project:Almennur fyrirvari",
+'disclaimers' => "Fyrirvarar",
+'edit' => "Breyta",
+'edithelp' => "Breytingarhjálp",
+'edithelppage' => "Hjálp:Breyta",
+'editing' => "Breyti $1",
+'editinguser' => "Breyti $1",
+'editingcomment' => "Breyti $1 (bæti við athugasemd)",
+'editingold' => "<strong>ATH: Þú ert að breyta gamalli útgáfu þessarar síðu og munu allar breytingar sem gerðar hafa verið á henni frá þeirri útgáfu vera fjarlægðar ef þú vistar.</strong>",
+'editingsection' => "Breyti $1 (hluta)",
+'editsection' => "breyta",
+'editold' => "breyta",
+'editthispage' => "Breyta þessari síðu",
+'emailfrom' => "Frá",
+'emailmessage' => "Skilaboð",
+'emailpage' => "Senda tölvupóst",
+'emailpagetext' => "Hafi notandi þessi fyllt út gild tölvupóstfang í stillingum sínum er hægt að senda skilaboð til hans eða hennar hér. Póstfangið sem þú fylltir út í stillingum þínum mun byrtast í „From:“ hlutanum svo viðtakandinn geti svarað.",
+'emailsend' => "Senda",
+'emailsent' => "Sending tókst",
+'emailsenttext' => "Skilaboðin þín hafa verið send.",
+'emailsubject' => "Fyrirsögn",
+'emailto' => "Til",
+'emailuser' => "Senda þessum notanda tölvupóst",
+/* 'enterlockreason' => "Enter a reason for the lock, including an estimate
+of when the lock will be released", */
+'error' => "Villa",
+'errorpagetitle' => "Villa",
+'excontent' => "innihaldið var: '$1'",
+'explainconflict' => "Síðunni hefur verið breytt síðan þú byrjaðir að gera breytingar á henni, textinn í efri reitnum inniheldur núverandi útgáfu úr gagnagrunni og sá neðri inniheldur þína útgáfu, þú þarft hér að færa breytingar sem þú vilt halda úr neðri reitnum í þann efri og vista síðuna. <strong>Aðeins</strong> texti úr efri reitnum mun vera vistaður þegar þú vistar.",
+'export' => "XML útgáfa síðu",
+'exportcuronly' => "Aðeins núverandi útgáfu án breytingarskrá",
+'extlink_sample' => "http://www.example.com titill tengils",
+'extlink_tip' => "Ytri tengill (muna að setja http:// á undan)",
+'feb' => "feb",
+'february' => "febrúar",
+'feedlinks' => "Nippan:",
+'filedesc' => "Lýsing",
+'fileexists' => "Skrá með þessu nafni er þegar til, skoðaðu $1 ef þú ert óviss um hvort þú viljir breyta henni, ekki verður skrifað yfir gömlu skránna hlaðiru inn nýrri með sama nafni heldur verður núverandi útgáfa geymd í útgáfusögu.",
+'filename' => "Skráarnafn",
+'fileuploaded' => "Skránni „$1“ hefur verið bætt við á {{SITENAME}}.
+Fylgdu þessum tengli: $2 á lýsingarsíðu skráarinnar og fylltu út
+upplýsingar um skránna, svosem um uppruna hennar, höfund og aðrar
+upplýsingar um hana.",
+'friday' => "föstudagur",
+'go' => "Áfram",
+'searcharticle' => "Áfram",
+'guesstimezone' => "Fylla inn",
+'headline_sample' => "Fyrirsagnartexti",
+'headline_tip' => "Annars stigs fyrirsögn",
+'help' => "Hjálp",
+'helppage' => "Hjálp:Efnisyfirlit",
+'hide' => "Fela",
+'hidetoc' => "fela",
+'hist' => "breytingaskrá",
+'histlegend' => "Skýringar: (nú) = bera saman við núverandi útgáfu,
+(breyting) = bera saman við útgáfun á undan, M = minniháttar breyting.",
+'history' => "breytingaskrá",
+'history_short' => "Breytingaskrá",
+'historywarning' => "Athugið: Síðan sem þú ert um það bil að eyða á sér&nbsp;",
+'hr_tip' => "Lárétt lína (notist sparlega)",
+'ilsubmit' => "Leita",
+'image_sample' => "Sýnishorn.jpeg",
+'image_tip' => "Setja inn mynd",
+'imagelinks' => "Myndatenglar",
+'imagelist' => "Skráalisti",
+'imagelisttext' => "Hér fyrir neðan er $1 skrám raðað $2.",
+'imgdelete' => "eyða",
+'imgdesc' => "lýsing",
+'imghistlegend' => "Skýringar: (nú) = bera saman við núverandi útgáfu,
+(breyting) = bera saman við útgáfun á undan, M = minniháttar breyting.
+
+Legend: (nú) = núverandi útgáfa,
+(eyða) = eyða þessari útgáfu, (nota) = nota þessa útgáfu í stað núverandi útgáfu.
+<br /><em>Fylgdu dagsetningartenglunum til að sjá mynd sem hlaðið var inn á þeim tíma</em>.",
+'imghistory' => "Breytingaskrá myndar",
+'imglegend' => "Skýringar: (lýsing) = sýna og/eða breyta lýsingu skráar.",
+'ipaddress' => "IP Tala/notendanafn",
+'ipbexpiry' => "Rennur út eftir",
+'ipblocklist' => "Bannaðar notendur og IP tölur",
+'ipbreason' => "Ástæða",
+'ipbsubmit' => "Banna notanda",
+'ipusubmit' => "Afbanna",
+'isredirect' => "tilvísun",
+'italic_sample' => "Skáletraður texti",
+'italic_tip' => "Skáletraður texti",
+'jan' => "jan",
+'january' => "janúar",
+'jul' => "júl",
+'july' => "júlí",
+'jun' => "jún",
+'june' => "júní",
+'last' => "breyting",
+'lastmodifiedat' => "Þessari síðu var síðast breytt $2, $1.",
+'lineno' => "Lína $1:",
+'link_sample' => "Titill tengils",
+'link_tip' => "Innri tengill",
+'linklistsub' => "(Listi yfir ítengdar síður)",
+'linkshere' => "Eftirfarandi síður tengjast hingað:",
+'linkstoimage' => "Eftirfarandi síður tengjast í mynd þessa:",
+'listingcontinuesabbrev' => " frh.",
+'listusers' => "Notendalisti",
+'localtime' => "Staðartími",
+'lockdb' => "Læsa gagnagrunninum",
+'login' => "Innskrá",
+'loginerror' => "Innskráningarvilla",
+'loginsuccess' => "Þú ert nú innskráð(ur) á {{SITENAME}} sem „$1“.",
+'loginsuccesstitle' => "Innskráning tókst",
+'logout' => "Útskráning",
+'logouttext' => "Þú hefur verið skráð(ur) út.
+Þú getur þó haldið áfram að nota {{SITENAME}} nafnlaust og þú getur skráð þig inn sem annar notandi. Athugaðu að sumar síður kunna að birtast líkt og þú sért ennþá innskráður, hægt er að koma í veg fyrir það með því að hreinsa biðminnið í vafranum.",
+'lonelypages' => "Munaðarlausar síður",
+'longpages' => "Langar síður",
+'mailmypassword' => "Senda nýtt lykilorð með tölvupósti",
+'mainpage' => "Forsíða",
+'makesysop' => "Veita stjórnandaréttindi",
+'makesysopname' => "Notandi:",
+'makesysopok' => "<strong>Notandanum „$1“ hefur verið veitt stjórnandastaða</strong>",
+'makesysopsubmit' => "Gera að stjórnanda",
+'makesysoptext' => "Kerfissíða þessi er notuð af möppudýrum til að veita venjulegum notendum stjórnendaréttindi.",
+'mar' => "mar",
+'march' => "mars",
+'math' => "Birting stærðfræðiformúlna",
+'math_sample' => "Formúlan setjist hér",
+'math_tip' => "LaTeX Stærðfræðiformúla",
+'may' => "maí",
+'may_long' => "maí",
+'media_sample' => "Sýnishorn.ogg",
+'media_tip' => "Tengill í margmiðlunarskrá",
+'minoredit' => "Minniháttar breyting",
+'missingimage' => "<b>Mynd vantar</b><br /><i>$1</i>",
+'monday' => "mánudagur",
+'move' => "Færa",
+'movearticle' => "Færa",
+'movenologin' => "Óinnskráð(ur)",
+'movenologintext' => "Þú verður að vera [[Kerfissíða:Userlogin|innskráð(ur)]] til  að geta fært síður.",
+'movepage' => "Færa síðu",
+'movepagebtn' => "Færa síðuna",
+'movepagetalktext' => "Spallsíða síðunnar verður sjálfkrafa færð með ef hún er til nema:
+* Þú sért að færa síðuna á milli nafnrýma
+* Spallsíða sé þegar til undir nýja nafninu
+* Þú veljir að færa hana ekki
+Í þeim tilfellum verður að færa hana handvirkt.",
+'movepagetext' => "Hér er hægt að endurnefna síðu, hún mun ásamt breytingarskrá hennar
+verða færð á nýja nafnið og núverandi staðsetning mun
+breytast í tilvísun sem vísa mun á nýju staðsetninguna,
+tenglar í núverandi nafn munu hinsvegar ekki breytast,
+athugaðu að þetta búi ekki til margfaldar
+tilvísanir, það er á þína ábyrgð að tryggja það að tenglar haldi áfram
+að vísa á rétta síðu.
+
+Athugaðu að síðan mun '''ekki''' verða færð ef það er þegar síða á nafninu
+sem þú hyggst færa hana á, nema síða sú sé tóm eða tilvísun sem á sér enga
+breytingarsögu. Þú getur þar með fært síðuna aftur til baka án þess að
+missa breytingarsöguna, en ekki fært hana venjulega síðu.
+
+'''Varúð:'''
+Vertu viss um að skilja afleiðingarnar af þessari aðgerð vel. Þetta gæti þýtt
+mjög rótækar breytingar á vinsælum síðum og valdið titringi hjá öðrum notendum.",
+'movetalk' => "Færa „Spjall“ síðuna líka ef við á.",
+'movethispage' => "Færa þessa síðu",
+'mw_math_html' => "HTML ef hægt er, annars PNG",
+'mw_math_mathml' => "MathML",
+'mw_math_modern' => "Mælt með fyrir nýja vafra",
+'mw_math_png' => "Alltaf birta PNG mynd",
+'mw_math_simple' => "HTML fyrir einfaldar jöfnur annars PNG",
+'mw_math_source' => "Sýna TeX jöfnu (fyrir textavafra)",
+'mycontris' => "Framlög",
+'mypage' => "Mín síða",
+'mytalk' => "Spjall",
+'navigation' => "Flakk",
+'newarticle' => "(Ný)",
+'newimages' => "Gallerí nýlegra skráa",
+'newmessageslink' => "ný skilaboð",
+'newpages' => "Nýjar síður",
+'newpassword' => "Nýja lykilorðið",
+'newtitle' => "Yfir á",
+'newwindow' => "(í nýjum glugga)",
+'nextdiff' => "Næsta breyting →",
+'nextn' => "næstu $1",
+'nextrevision' => "Næsta útgáfa→",
+'noarticletext' => "'''Það er ekki enn grein undir þessu nafni á {{SITENAME}}.'''
+* '''[{{fullurl:{{NAMESPACE}}:{{PAGENAME}}|action=edit}} Skrifa grein undir nafninu „{{PAGENAME}}“]'''
+* [[{{ns:special}}:Search/{{PAGENAME}}|Leita að „{{PAGENAME}}“]] í öðrum greinum og síðum.",
+'noemailtext' => "Notandi þessi hefur kosið að fá ekki tölvupóst frá öðrum notendum eða hefur ekki fyllt út netfang sitt í stillingum.",
+'noemailtitle' => "Ekkert póstfang",
+'nolinkshere' => "Engar síður tengjast hingað.",
+'nolinkstoimage' => "Engar síður tengja í hingað.",
+'noname' => "Ógilt notendanafn.",
+'nosuchuser' => "Enginn notandi er til undir nafninu „$1“.",
+'note' => "<strong>Athugið:</strong>",
+'notextmatches' => "Leitarorð fannst/fundust ekki í innihaldi greina",
+'notitlematches' => "Engir greinatitlar pössuðu við fyrirspurnina",
+'nov' => "nóv",
+'november' => "nóvember",
+'nowatchlist' => "Vaktlistinn er tómur.",
+'nowiki_sample' => "Innsetjið ósniðinn texta hér",
+'nowiki_tip' => "Hunsa wikisnið",
+'nstab-category' => "Efnisflokkur",
+'nstab-help' => "Hjálp",
+'nstab-image' => "Mynd",
+'nstab-main' => "Grein",
+'nstab-mediawiki' => "Skilaboð",
+'nstab-template' => "Forsnið",
+'nstab-user' => "Notandasíða",
+'nstab-project' => "Um",
+'oct' => "okt",
+'october' => "október",
+'oldpassword' => "Gamla lykilorðið",
+'otherlanguages' => "Á öðrum tungumálum",
+'pagecategories' => "Flokkar",
+'pagemovedsub' => "Færsla tókst",
+'pagemovedtext' => "Síðan „[[$1]]“ var færð yfir á „[[$2]]“.",
+'pagetitle' => "$1 - {{SITENAME}}",
+'perfcached' => "Eftirfarandi er afrit af umbeðinni síðu og gæti því ekki verið nýjasta útgáfa hennar:",
+'perfdisabled' => "Þessi síða hefur verið gerð óvirk þar sem notkun hennar veldur of miklu álagi á gagnagrunninum.",
+'personaltools' => "Tenglar",
+'portal' => "Samfélagsgátt",
+'portal-url' => "Project:Samfélagsgátt",
+'powersearch' => "Leita",
+'powersearchtext' => "Leita í eftirfarandi nafnrýmum :<br />
+$1<br />
+$2 Sýna tilvísarnir &nbsp; Leita að $3 $9",
+'preferences' => "Stillingar",
+'prefs-misc' => "Aðrar stillingar",
+'prefs-personal' => "Notendaupplýsingar",
+'prefs-rc' => "Nýlegar breytingar og stubbar",
+'prefsnologintext' => "You must be [[Special:Userlogin|logged in]]
+to set user preferences.",
+'preview' => "Forskoða",
+'previewnote' => " Það sem sést hér er aðeins forskoðun og hefur ekki enn verið vistað.",
+'previousdiff' => "← Fyrri breyting",
+'previousrevision' => "←Fyrri útgáfa",
+'prevn' => "síðustu $1",
+'printableversion' => "Prentvæn útgáfa",
+'protect' => "Vernda",
+'protectcomment' => "Ástæða",
+'protectedpagewarning' => "<!-- -->",
+'protectlogpage' => "Verndunarskrá",
+'protectsub' => "(Vernda „$1“)",
+'qbedit' => "Breyta",
+'qbsettings' => "Valblað",
+'qbsettings-none'	=> 'Sleppa',
+'qbsettings-fixedleft'	=> 'Fast vinstra megin',
+'qbsettings-fixedright'	=> 'Fast hægra megin',
+'qbsettings-floatingleft'	=> 'Fljótandi til vinstri',
+'randompage' => "Handahófsvalin síða",
+'rclinks' => "Sýna síðustu $1 breytingar síðustu $2 daga<br />$3",
+'rclistfrom' => "Sýna breytingar frá og með $1",
+'rclsub' => "(á síðum sem tengd er í frá „$1“)",
+'rcnote' => "Að neðan eru síðustu <strong>$1</strong> breytingar síðustu <strong>$2</strong> daga.",
+'recentchanges' => "Nýlegar breytingar",
+'recentchangescount' => "Fjöldi síðna á „nýlegum breytingum“",
+'recentchangeslinked' => "Skyldar breytingar",
+'redirectedfrom' => "(Tilvísun frá $1)",
+'remembermypassword' => "Muna.",
+'removechecked' => "Fjarlægja merktar síður af vaktlistanum",
+'removedwatch' => "Fjarlægt af vaktlistanum",
+'removedwatchtext' => "Síðan \"$1\" hefur verið fjarlægð af vaktlistanum.",
+'removingchecked' => "Fjarlægi umbeðnar síðu(r) af vaktlistanum...",
+'resetprefs' => "Endurstilla valmöguleika",
+'restorelink' => "$1 eydda(r) breyting(u/ar)",
+'resultsperpage' => "Niðurstöður á síðu",
+'retrievedfrom' => "Af „$1“",
+'returnto' => "Tilbaka: $1.",
+'retypenew' => "Endurtaktu nýja lykilorðið",
+'reupload' => "Endurinnhlaða",
+'reuploaddesc' => "Aftur á innhlaðningarformið.",
+'reverted' => "Breytt aftur til fyrri útgáfu",
+'revertimg' => "nota",
+'revertpage' => "Tók aftur breytingar $2, breytt til síðustu útgáfu $1",
+'revhistory' => "Útgáfusaga",
+'revisionasof' => "Útgáfa síðunnar kl. $1",
+'rollback' => "Taka aftur breytingar",
+'rollback_short' => "Afturtaka",
+'rollbackfailed' => "Afturtaka mistókst",
+'rollbacklink' => "afturtaka",
+'rows' => "Raðir",
+'saturday' => "laugardagur",
+'savearticle' => "Vista",
+'savedprefs' => "Stillingarnar þínar hafa verið vistaðar.",
+'savefile' => "Vista",
+'saveprefs' => "Vista stillingar",
+'search' => "Leit",
+'searchbutton' => "Leit",
+'searchsubtitle' => "Fyrir fyrirspurnina „[[:$1]]“",
+'searchsubtitleinvalid' => "Fyrir fyrirspurnina „$1“",
+'searchresults' => "Leitarniðurstöður",
+'searchresultshead' => "Leit",
+'searchresulttext' => "Fyrir frekari upplýsingar um leit á {{SITENAME}}, sjá $1.",
+'sep' => "sep",
+'september' => "september",
+'servertime' => "Tími netþjóns",
+'setbureaucratflag' => "Einnig möppudýr",
+'shortpages' => "Stuttar síður",
+'show' => "Sýna",
+'showingresults' => "Sýni <strong>$1</strong> niðurstöður frá og með #<strong>$2</strong>.",
+'showingresultsnum' => "Sýni <strong>$1</strong> niðurstöður frá og með #<strong>$2</strong>.",
+'showlast' => "Sýna síðustu $1 skrár raðaðar $2.",
+'showpreview' => "Forskoða",
+'showtoc' => "sýna",
+'sig_tip' => "Undirskrift þín auk tímasetningu",
+'sitestats' => "Almenn tölfræði",
+'sitestatstext' => "Nú eru alls '''$1''' síður í gagnagrunninum,
+þar á meðal „spjall“ síður, síður er snúa að {{SITENAME}} verkefninu,
+„stubbar“, tilvísanir og annað efni er ekki telst til greina.
+Þar fyrir utan eru '''$2''' síður sem líklega teljast fullgildar greinar.
+
+'''$3''' síður hafa verið skoðaðar og '''$4''' breytingar hafa verið gerðar
+síðan vefurinn var settur up. Það reiknast sem '''$5''' breytingar
+á hverja síðu að meðaltali, og '''$6''' fléttingar fyrir hverja breytingu.",
+'sitesupport' => "Framlög",
+'skin' => "Þema",
+'specialpage' => "Kerfissíða",
+'specialpages' => "Kerfissíður",
+'spheading' => "Almennar",
+'statistics' => "Tölfræði",
+'storedversion' => "Geymd útgáfa",
+'stubthreshold' => "Stubbamerkja allt undir",
+'subcategories' => "Undirflokkar",
+'subcategorycount' => "Það eru $1 undirflokkar í þessum flokki.",
+'subject' => "Fyrirsögn",
+'successfulupload' => "Innhlaðning tókst",
+'summary' => "Breytingar",
+'sunday' => "sunnudagur",
+'talk' => "Spjall",
+'talkpage' => "Ræða um þessa síðu",
+'talkpagenotmoved' => "Samsvarandi spjallsíða var <strong>ekki</strong> færð.",
+'templatesused' => "Snið notuð á síðunni:",
+'textboxsize' => "Breytingarflipinn",
+'textmatches' => "Leitarorð fannst/fundust í innihaldi eftirfarandi greina",
+'thisisdeleted' => "Endurvekja eða skoða $1?",
+'thursday' => "fimmtudagur",
+'timezonelegend' => "Tímabelti",
+'timezoneoffset' => "Hliðrun",
+'timezonetext' => "Hliðrun staðartíma frá UTC+0.",
+'titlematches' => "Titlar greina sem pössuðu við fyrirspurnina",
+'toc' => "Efnisyfirlit",
+'tog-editondblclick' => "Breyta síðu ef tvísmellt er á hlekkinn (JavaScript)",
+'tog-editsection' => "Leyfa breytingar á hluta síðna með [edit] hlekkjum",
+'tog-editsectiononrightclick' => "Leyfa breytingar á hluta síðna með því að  hægrismella á titla (JavaScript)",
+'tog-editwidth' => "Innsláttarsvæði hefur fulla breidd",
+'tog-hideminor' => "Fela minniháttar breytingar",
+'tog-highlightbroken' => "Sýna brotna hlekki <a href=\"\" class=\"new\">svona</a> (annars: svona<a href=\"\" class=\"internal\">?</a>).",
+'tog-justify' => "Jafna málsgreinar",
+'tog-minordefault' => "Láta breytingar vera sjálfgefnar sem minniháttar",
+'tog-nocache' => "Slökkva á flýtivistun síðna",
+'tog-numberheadings' => "Númera fyrirsagnir sjálfkrafa",
+'tog-previewontop' => "Setja prufuhnapp fyrir framan breytingahnapp",
+'tog-rememberpassword' => "Muna lykilorð",
+'tog-showtoc' => "Sýna efnisyfirlit",
+'tog-underline' => "Undirstrika hlekki",
+'tog-usenewrc' => "Endurbætt nýjar tengingar (ekki fyrir alla vafra)",
+'tog-watchdefault' => "Bæta síðum sem þú breytir við eftirlitslista",
+'toolbox' => "Verkfæri",
+'tooltip-compareselectedversions' => "Sjá breytingarnar á þessari grein á milli útgáfanna sem þú valdir.",
+'tooltip-minoredit' => "Merktu þessa breytingu sem minniháttar",
+'tooltip-preview' => "Forskoða breytingarnar, vinsamlegast gerðu þetta áður en þú vistar!",
+'tooltip-save' => "Vista breytingarnar",
+'tooltip-search' => "Leit á þessari Wiki",
+'tuesday' => "þriðjudagur",
+'unblockip' => "Afbanna notanda",
+'unblockiptext' => "Endurvekja skrifréttindi bannaðra notenda eða IP talna.",
+'unblocklink' => "afbanna",
+'uncategorizedcategories' => "Óflokkaðir flokkar",
+'uncategorizedpages' => "Óflokkaðar síður",
+'undelete' => "Endurvekja eydda síðu",
+'undelete_short' => "Endurvekja $1 breyting(u/ar)",
+'undeletearticle' => "Endurvekja eydda síðu",
+'undeletebtn' => "Endurvekja!",
+'undeletepage' => "Skoða og endurvekja síður",
+'undeletepagetext' => "Eftirfarandi síðum hefur verið eitt en eru þó enn í gagnagrunninum og geta verið endurvaknar. Athugið að síður þessar eru reglulega fjarlægðar endanlega úr gagnagrunninum.",
+'undeleterevisions' => "$1 breyting(ar)",
+'unlockdb' => "Aflæsa gagnagrunninum",
+'unprotect' => "Afvernda",
+'unprotectcomment' => "Ástæða",
+'unprotectsub' => "(Afvernda „$1“)",
+'unusedimages' => "Munaðarlausar skrár",
+'unusedimagestext' => "<p>Please note that other web sites may link to an image with
+a direct URL, and so may still be listed here despite being
+in active use.",
+'unwatch' => "Afvakta",
+'upload' => "Innhlaða",
+'uploadbtn' => "Hlaða inn skrá",
+'uploadedimage' => "hlóð inn \"$1\"",
+'uploaderror' => "Villa í innhlaðningu",
+'uploadlog' => "innhlaðningarskrá",
+'uploadlogpage' => "Innhlaðningarskrá",
+'uploadnologin' => "Óinnskráð(ur)",
+'uploadnologintext' => "You must be [[Special:Userlogin|logged in]]
+to upload files.",
+/*'uploadtext' => "'''Áður en skrá er hlaðið inn''':
+* Notaðu [[JPEG]] skráarsniðið fyrir ljósmyndir, [[GIF]] fyrir hreyfimyndir, [[PNG]] fyrir aðrar myndir og [[Ogg Vorbis]] fyrir hljóðskrár.
+
+'''Eftir að skrá er hlaðið inn''':
+* Veittu nákvæmar upplýsingar um skránna á skráarsíðunni, t.d. um myndina (hvenær hún er tekin, hvar o.s.f.)
+* Gefðu upplýsingar um leyfið sem hún er undir, <code><nowiki>{{</nowiki>GFDL<nowiki>}}</nowiki></code> fyrir [[commons:Commons:Copyright tags#GNU Licenses|GNU FDL]] og <code><nowiki>{{</nowiki>Óhöfundaréttvarið<nowiki>}}</nowiki></code> ef hún er óvernduð af alþjóða höfundarlögum.",*/
+'uploadwarning' => "Aðvörun",
+'usercssjsyoucanpreview' => "<strong>Ath:</strong> Hægt er að nota „Forskoða“ hnappinn til að prófa CSS og JavaScript kóða áður en hann er vistaður.",
+'userlogin' => "Innskrá",
+'userlogout' => "Útskrá",
+'userstats' => "Notendatölfræði",
+'userstatstext' => "Það eru '''$1''' skráðir notendur, þar af eru '''$2''' eða '''$4%''' stjórnendur (sjá $3).",
+'version' => "Útgáfa",
+'viewprevnext' => "Skoða ($1) ($2) ($3).",
+'viewsource' => "Skoða wikikóða",
+'viewtalkpage' => "Skoða umræðu",
+'wantedpages' => "Eftirsóttar síður",
+'watch' => "Vakta",
+'watchdetails' => "Fyrir utan spjallsíður eru $1 síða/síður á vaktlistanum þínum. Hægt er að
+[$4 sýna heildarlistann og breyta honum].",
+'watcheditlist' => "Þetta er listi yfir þínar vöktuðu síður raðað í
+stafrófsröð. Merktu við þær síður sem þú vilt fjarlægja
+af vaktlistanum og ýttu á 'fjarlægja merktar' takkan
+neðst á skjánum.",
+'watchlist' => "Vaktlistinn",
+'mywatchlist' => "Vaktlistinn",
+'watchlistcontains' => "Á vaktlistanum eru $1 síður.",
+'watchmethod-list' => "leita að breytingum í vöktuðum síðum",
+'watchmethod-recent' => "kanna hvort nýlegar breytingar innihalda vaktaðar síður",
+'watchnochange' => "Engri síðu á vaktlistanum þínum hefur verið breytt á tilgreindu tímabili.",
+'watchnologin' => "Óinnskráð(ur)",
+'watchnologintext' => "Þú verður að vera [[Special:Userlogin|innskáð(ur)]] til að geta breytt vaktlistanum.",
+'watchthis' => "Vakta",
+'watchthispage' => "Vakta þessa síðu",
+'wednesday' => "miðvikudagur",
+'welcomecreation' => "<h2>Velkomin(n), $1!</h2><p>Aðgangurinn þinn hefur verið búinn til.
+Ekki gleyma að breyta {{SITENAME}} stillingunum þínum.",
+'whatlinkshere' => "Hvað tengist hingað",
+'whitelistacctext' => "Til að geta búið til aðganga í þessu Wiki, verður þú að [[Special:Userlogin|innskrá]] og hafa viðkomandi réttindi.",
+'whitelistacctitle' => "Þér er óheimilt að skrá þig sem notanda.",
+'whitelistedittext' => "Þú verður að [[Special:Userlogin|skrá þig inn]] til að geta breytt síðum.",
+'whitelistedittitle' => "Þú verður að skrá þig inn til að geta breytt síðum.",
+'whitelistreadtext' => "Þú verður að [[Special:Userlogin|skrá þig inn]] til að lesa síður.",
+'whitelistreadtitle' => "Notandi verður að skrá sig inn til að geta lesið.",
+'projectpage' => "Sýna verkefnissíðu",
+'wlnote' => "Að neðan eru síðustu <b>$1</b> breytingar síðustu <b>$2</b> klukkutíma.",
+'wlsaved' => "Þetta er vistuð útgáfa af vaktlistanum þínum.",
+'wlshowlast' => "Sýna síðustu $1 klukkutíma, $2 daga, $3",
+'wrong_wfQuery_params' => "Incorrect parameters to wfQuery()<br />
+Function: $1<br />
+Query: $2",
+'wrongpassword' => "Uppgefið lykilorð er rangt. Vinsamlegast reyndu aftur.",
+'yourdiff' => "Mismunur",
+'youremail' => "Tölvupóstfangið þitt*",
+'yourlanguage' => "Viðmótstungumál",
+'yourname' => "Notendanafn",
+'yournick' => "Nafn (fyrir undirskriftir)",
+'yourpassword' => "Lykilorð",
+'yourpasswordagain' => "Lykilorð (aftur)",
+'yourrealname' => "Fullt nafn þitt*",
+'yourtext' => "Þinn texti",
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesIt.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesIt.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesIt.php	(revision 1280)
@@ -0,0 +1,2101 @@
+<?php
+/** Italian (Italiano)
+ *
+ * @addtogroup Language
+ */
+$namespaceNames = array(
+	NS_MEDIA            => 'Media',
+	NS_SPECIAL          => 'Speciale',
+	NS_MAIN             => '',
+	NS_TALK             => 'Discussione',
+	NS_USER             => 'Utente',
+	NS_USER_TALK        => 'Discussioni_utente',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK     => 'Discussioni_$1',
+	NS_IMAGE            => 'Immagine',
+	NS_IMAGE_TALK       => 'Discussioni_immagine',
+	NS_MEDIAWIKI        => 'MediaWiki',
+	NS_MEDIAWIKI_TALK   => 'Discussioni_MediaWiki',
+	NS_TEMPLATE         => 'Template',
+	NS_TEMPLATE_TALK    => 'Discussioni_template',
+	NS_HELP             => 'Aiuto',
+	NS_HELP_TALK        => 'Discussioni_aiuto',
+	NS_CATEGORY         => 'Categoria',
+	NS_CATEGORY_TALK    => 'Discussioni_categoria'
+);
+
+$separatorTransformTable = array(',' => '.', '.' => ',' );
+
+$dateFormats = array(
+	'mdy time' => 'H:i',
+	'mdy date' => 'M j, Y',
+	'mdy both' => 'H:i, M j, Y',
+
+	'dmy time' => 'H:i',
+	'dmy date' => 'j M Y',
+	'dmy both' => 'H:i, j M Y',
+
+	'ymd time' => 'H:i',
+	'ymd date' => 'Y M j',
+	'ymd both' => 'H:i, Y M j',
+);
+
+$specialPageAliases = array(
+	'DoubleRedirects'           => array( 'RedirectDoppi' ),
+	'BrokenRedirects'           => array( 'RedirectErrati' ),
+	'Disambiguations'           => array( 'Disambigue' ),
+	'Userlogin'                 => array( 'Entra', 'Login' ),
+	'Userlogout'                => array( 'Esci', 'Logout' ),
+	'Preferences'               => array( 'Preferenze' ),
+	'Watchlist'                 => array( 'OsservatiSpeciali' ),
+	'Recentchanges'             => array( 'UltimeModifiche' ),
+	'Upload'                    => array( 'Carica' ),
+	'Imagelist'                 => array( 'Immagini' ),
+	'Newimages'                 => array( 'ImmaginiRecenti' ),
+	'Listusers'                 => array( 'Utenti', 'ElencoUtenti' ),
+	'Statistics'                => array( 'Statistiche' ),
+	'Randompage'                => array( 'PaginaCasuale' ),
+	'Lonelypages'               => array( 'PagineOrfane' ),
+	'Uncategorizedpages'        => array( 'PagineSenzaCategorie' ),
+	'Uncategorizedcategories'   => array( 'CategorieSenzaCategorie' ),
+	'Uncategorizedimages'       => array( 'ImmaginiSenzaCategorie' ),
+	'Unusedcategories'          => array( 'CategorieNonUsate' ),
+	'Unusedimages'              => array( 'ImmaginiNonUsate' ),
+	'Wantedpages'               => array( 'PagineRichieste' ),
+	'Wantedcategories'          => array( 'CategorieRichieste' ),
+	'Mostlinked'                => array( 'PaginePiùRichiamate' ),
+	'Mostlinkedcategories'      => array( 'CategoriePiùRichiamate' ),
+	'Mostcategories'            => array( 'PagineConPiùCategorie'),
+	'Mostimages'                => array( 'ImmaginiPiùRichiamate' ),
+	'Mostrevisions'             => array( 'PagineConPiùRevisioni' ),
+	'Shortpages'                => array( 'PaginePiùCorte' ),
+	'Longpages'                 => array( 'PaginePiùLunghe' ),
+	'Newpages'                  => array( 'PaginePiùRecenti' ),
+	'Ancientpages'              => array( 'PagineMenoRecenti' ),
+	'Deadendpages'              => array( 'PagineSenzaUscita' ),
+	'Allpages'                  => array( 'TutteLePagine' ),
+	'Prefixindex'               => array( 'Prefissi' ) ,
+	'Ipblocklist'               => array( 'IPBloccati' ),
+	'Specialpages'              => array( 'PagineSpeciali' ),
+	'Contributions'             => array( 'Contributi', 'ContributiUtente' ),
+	'Emailuser'                 => array( 'InviaEMail' ),
+	'Whatlinkshere'             => array( 'PuntanoQui' ),
+	'Recentchangeslinked'       => array( 'ModificheCorrelate' ),
+	'Movepage'                  => array( 'Sposta', 'Rinomina' ),
+	'Blockme'                   => array( 'BloccaProxy' ),
+	'Booksources'               => array( 'RicercaISBN' ),
+	'Categories'                => array( 'Categorie' ),
+	'Export'                    => array( 'Esporta' ),
+	'Version'                   => array( 'Versione' ),
+	'Allmessages'               => array( 'Messaggi' ),
+	'Log'                       => array( 'Registri', 'Registro' ),
+	'Blockip'                   => array( 'Blocca' ),
+	'Undelete'                  => array( 'Ripristina' ),
+	'Import'                    => array( 'Importa' ),
+	'Lockdb'                    => array( 'BloccaDB' ),
+	'Unlockdb'                  => array( 'SbloccaDB' ),
+	'Userrights'                => array( 'PermessiUtente' ),
+	'MIMEsearch'                => array( 'RicercaMIME' ),
+	'Unwatchedpages'            => array( 'PagineNonOsservate' ),
+	'Listredirects'             => array( 'Redirect' ),
+	'Listinterwikis'            => array( 'Interwiki' ),
+	'Revisiondelete'            => array( 'CancellaRevisione' ),
+	'Unusedtemplates'           => array( 'TemplateNonUsati' ),
+	'Randomredirect'            => array( 'RedirectCasuale' ),
+	'Mypage'                    => array( 'MiaPaginaUtente' ),
+	'Mytalk'                    => array( 'MieDiscussioni' ),
+	'Mycontributions'           => array( 'MieiContributi' ),
+	'Listadmins'                => array( 'Amministratori' ),
+	'Popularpages'              => array( 'PaginePiùVisitate' ),
+	'Search'                    => array( 'Ricerca', 'Cerca' ),
+	'Resetpass'                 => array( 'ReimpostaPassword' ),
+);
+
+$linkTrail = '/^([a-zàéèíîìóòúù]+)(.*)$/sDu';
+
+$messages = array(
+# User preference toggles
+'tog-underline'               => 'Sottolinea i collegamenti',
+'tog-highlightbroken'         => 'Formatta <a href="" class="new">così</a> i collegamenti a pagine inesistenti (se disattivato: così<a href="" class="internal">?</a>).',
+'tog-justify'                 => 'Allineamento dei paragrafi giustificato',
+'tog-hideminor'               => 'Nascondi le modifiche minori nelle ultime modifiche',
+'tog-extendwatchlist'         => 'Espandi la funzione osservati speciali mostrando tutte le modifiche applicabili',
+'tog-usenewrc'                => 'Ultime modifiche avanzate (richiede JavaScript)',
+'tog-numberheadings'          => 'Numerazione automatica dei titoli di sezione',
+'tog-showtoolbar'             => 'Mostra barra degli strumenti di modifica (richiede JavaScript)',
+'tog-editondblclick'          => 'Modifica delle pagine tramite doppio clic (richiede JavaScript)',
+'tog-editsection'             => 'Modifica delle sezioni tramite il collegamento [modifica]',
+'tog-editsectiononrightclick' => 'Modifica delle sezioni tramite clic destro sul titolo (richiede JavaScript)',
+'tog-showtoc'                 => "Mostra l'indice per le pagine con più di 3 sezioni",
+'tog-rememberpassword'        => 'Ricorda la password (richiede di accettare i cookie)',
+'tog-editwidth'               => 'Aumenta al massimo la larghezza della casella di modifica',
+'tog-watchcreations'          => 'Aggiungi le pagine create agli osservati speciali',
+'tog-watchdefault'            => 'Aggiungi le pagine modificate agli osservati speciali',
+'tog-watchmoves'              => 'Aggiungi le pagine spostate agli osservati speciali',
+'tog-watchdeletion'           => 'Aggiungi le pagine cancellate agli osservati speciali',
+'tog-minordefault'            => "Indica per default tutte le modifiche come 'minori'",
+'tog-previewontop'            => "Mostra l'anteprima sopra la casella di modifica",
+'tog-previewonfirst'          => "Mostra l'anteprima per la prima modifica",
+'tog-nocache'                 => "Disattiva la ''cache'' per le pagine",
+'tog-enotifwatchlistpages'    => 'Segnalami via e-mail le modifiche alle pagine osservate',
+'tog-enotifusertalkpages'     => 'Segnalami via e-mail le modifiche alla mia pagina di discussione',
+'tog-enotifminoredits'        => 'Segnalami via e-mail anche le modifiche minori',
+'tog-enotifrevealaddr'        => 'Rivela il mio indirizzo e-mail nei messaggi di avviso',
+'tog-shownumberswatching'     => 'Mostra il numero di utenti che hanno la pagina in osservazione',
+'tog-fancysig'                => 'Non modificare il markup della firma (usare per firme non standard)',
+'tog-externaleditor'          => 'Usa per default un editor di testi esterno',
+'tog-externaldiff'            => 'Usa per default un programma di diff esterno',
+'tog-showjumplinks'           => "Attiva i collegamenti accessibili 'vai a'",
+'tog-uselivepreview'          => "Attiva la funzione ''Live preview'' (richiede JavaScript; sperimentale)",
+'tog-forceeditsummary'        => "Chiedi conferma se l'oggetto della modifica è vuoto",
+'tog-watchlisthideown'        => 'Nascondi le mie modifiche negli osservati speciali',
+'tog-watchlisthidebots'       => 'Nascondi le modifiche dei bot negli osservati speciali',
+'tog-watchlisthideminor'      => 'Nascondi le modifiche minori negli osservati speciali',
+'tog-nolangconversion'        => 'Disattiva la conversione tra varianti linguistiche',
+'tog-ccmeonemails'            => 'Inviami una copia dei messaggi spediti agli altri utenti',
+'tog-diffonly'                => 'Non visualizzare il contenuto della pagina dopo il confronto tra versioni',
+
+'underline-always'  => 'Sempre',
+'underline-never'   => 'Mai',
+'underline-default' => 'Mantieni le impostazioni del browser',
+
+'skinpreview' => '(anteprima)',
+
+# Dates
+'sunday'        => 'domenica',
+'monday'        => 'lunedì',
+'tuesday'       => 'martedì',
+'wednesday'     => 'mercoledì',
+'thursday'      => 'giovedì',
+'friday'        => 'venerdì',
+'saturday'      => 'sabato',
+'sun'           => 'dom',
+'mon'           => 'lun',
+'tue'           => 'mar',
+'wed'           => 'mer',
+'thu'           => 'gio',
+'fri'           => 'ven',
+'sat'           => 'sab',
+'january'       => 'gennaio',
+'february'      => 'febbraio',
+'march'         => 'marzo',
+'april'         => 'aprile',
+'may_long'      => 'maggio',
+'june'          => 'giugno',
+'july'          => 'luglio',
+'august'        => 'agosto',
+'september'     => 'settembre',
+'october'       => 'ottobre',
+'november'      => 'novembre',
+'december'      => 'dicembre',
+'january-gen'   => 'gennaio',
+'february-gen'  => 'febbraio',
+'march-gen'     => 'marzo',
+'april-gen'     => 'aprile',
+'may-gen'       => 'maggio',
+'june-gen'      => 'giugno',
+'july-gen'      => 'luglio',
+'august-gen'    => 'agosto',
+'september-gen' => 'settembre',
+'october-gen'   => 'ottobre',
+'november-gen'  => 'novembre',
+'december-gen'  => 'dicembre',
+'jan'           => 'gen',
+'feb'           => 'feb',
+'mar'           => 'mar',
+'apr'           => 'apr',
+'may'           => 'mag',
+'jun'           => 'giu',
+'jul'           => 'lug',
+'aug'           => 'ago',
+'sep'           => 'set',
+'oct'           => 'ott',
+'nov'           => 'nov',
+'dec'           => 'dic',
+
+# Bits of text used by many pages
+'categories'            => 'Categorie',
+'pagecategories'        => '{{PLURAL:$1|Categoria|Categorie}}',
+'category_header'       => 'Pagine nella categoria "$1"',
+'subcategories'         => 'Sottocategorie',
+'category-media-header' => 'File nella categoria "$1"',
+
+'mainpagetext'      => "<big>'''Installazione di MediaWiki completata correttamente.'''</big>",
+'mainpagedocfooter' => "Consultare la [http://meta.wikimedia.org/wiki/Aiuto:Sommario Guida utente] per maggiori informazioni sull'uso di questo software wiki.
+
+== Per iniziare ==
+I seguenti collegamenti sono in lingua inglese:
+
+* [http://www.mediawiki.org/wiki/Help:Configuration_settings Impostazioni di configurazione]
+* [http://www.mediawiki.org/wiki/Help:FAQ Domande frequenti su MediaWiki]
+* [http://mail.wikimedia.org/mailman/listinfo/mediawiki-announce Mailing list annunci MediaWiki]",
+
+'about'          => 'Informazioni',
+'article'        => 'Voce',
+'newwindow'      => '(si apre in una nuova finestra)',
+'cancel'         => 'Annulla',
+'qbfind'         => 'Trova',
+'qbbrowse'       => 'Sfoglia',
+'qbedit'         => 'Modifica',
+'qbpageoptions'  => 'Opzioni pagina',
+'qbpageinfo'     => 'Informazioni sulla pagina',
+'qbmyoptions'    => 'Le mie pagine',
+'qbspecialpages' => 'Pagine speciali',
+'moredotdotdot'  => 'Altro...',
+'mypage'         => 'La mia pagina',
+'mytalk'         => 'Le mie discussioni',
+'anontalk'       => 'Discussioni per questo IP',
+'navigation'     => 'Navigazione',
+
+# Metadata in edit box
+'metadata_help' => 'Metadati:',
+
+'errorpagetitle'    => 'Errore',
+'returnto'          => 'Torna a $1.',
+'tagline'           => 'Da {{SITENAME}}.',
+'help'              => 'Aiuto',
+'search'            => 'Ricerca',
+'searchbutton'      => 'Ricerca',
+'go'                => 'Vai',
+'searcharticle'     => 'Vai',
+'history'           => 'Versioni precedenti',
+'history_short'     => 'Cronologia',
+'updatedmarker'     => 'modificata dalla mia ultima visita',
+'info_short'        => 'Informazioni',
+'printableversion'  => 'Versione stampabile',
+'permalink'         => 'Link permanente',
+'print'             => 'Stampa',
+'edit'              => 'Modifica',
+'editthispage'      => 'Modifica questa pagina',
+'delete'            => 'Cancella',
+'deletethispage'    => 'Cancella questa pagina',
+'undelete_short'    => 'Recupera {{PLURAL:$1|una revisione|$1 revisioni}}',
+'protect'           => 'Blocca',
+'protect_change'    => 'modifica protezione',
+'protectthispage'   => 'Blocca questa pagina',
+'unprotect'         => 'Sblocca',
+'unprotectthispage' => 'Sblocca questa pagina',
+'newpage'           => 'Nuova pagina',
+'talkpage'          => 'Pagina di discussione',
+'specialpage'       => 'Pagina speciale',
+'personaltools'     => 'Strumenti personali',
+'postcomment'       => 'Aggiungi un commento',
+'articlepage'       => 'Vedi la voce',
+'talk'              => 'Discussione',
+'views'             => 'Visite',
+'toolbox'           => 'Strumenti',
+'userpage'          => 'Visualizza la pagina utente',
+'projectpage'       => 'Visualizza la pagina di servizio',
+'imagepage'         => "Visualizza la pagina di descrizione dell'immagine",
+'mediawikipage'     => 'Visualizza il messaggio',
+'templatepage'      => 'Visualizza il template',
+'viewhelppage'      => 'Visualizza la pagina di aiuto',
+'categorypage'      => 'Visualizza la categoria',
+'viewtalkpage'      => 'Visualizza la pagina di discussione',
+'otherlanguages'    => 'Altre lingue',
+'redirectedfrom'    => '(Redirect da $1)',
+'redirectpagesub'   => 'Pagina di redirect',
+'lastmodifiedat'    => 'Ultima modifica per la pagina: $2, $1.', # $1 date, $2 time
+'viewcount'         => 'Questa pagina è stata letta {{PLURAL:$1|una volta|$1 volte}}.',
+'protectedpage'     => 'Pagina bloccata',
+'jumpto'            => 'Vai a:',
+'jumptonavigation'  => 'navigazione',
+'jumptosearch'      => 'ricerca',
+
+# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
+'aboutsite'         => 'Informazioni su {{SITENAME}}',
+'aboutpage'         => 'Project:Informazioni',
+'bugreports'        => 'Malfunzionamenti',
+'bugreportspage'    => 'Project:Malfunzionamenti',
+'copyright'         => "Contenuti soggetti a licenza d'uso $1.",
+'copyrightpagename' => 'Il copyright su {{SITENAME}}',
+'copyrightpage'     => 'Project:Copyright',
+'currentevents'     => 'Attualità',
+'currentevents-url' => 'Attualità',
+'disclaimers'       => 'Avvertenze',
+'disclaimerpage'    => 'Project:Avvertenze generali',
+'edithelp'          => 'Guida',
+'edithelppage'      => 'Project:Modifica',
+'faq'               => 'FAQ',
+'faqpage'           => 'Project:FAQ',
+'helppage'          => 'Help:Indice',
+'mainpage'          => 'Pagina principale',
+'policy-url'        => '{{ns:Project}}:Policy',
+'portal'            => 'Portale comunità',
+'portal-url'        => 'Project:Portale comunità',
+'privacy'           => 'Informazioni sulla privacy',
+'privacypage'       => 'Project:Informazioni sulla privacy',
+'sitesupport'       => 'Donazioni',
+'sitesupport-url'   => 'Project:Donazioni',
+
+'badaccess'        => 'Permessi non sufficienti',
+'badaccess-group0' => "Non si dispone dei permessi necessari per eseguire l'azione richiesta.",
+'badaccess-group1' => 'La funzione richiesta è riservata agli utenti che appartengono al gruppo $1.',
+'badaccess-group2' => 'La funzione richiesta è riservata agli utenti che appartengono ai gruppi $1.',
+'badaccess-groups' => 'La funzione richiesta è riservata agli utenti che appartengono a uno dei seguenti gruppi: $1.',
+
+'versionrequired'     => 'Versione $1 di MediaWiki richiesta',
+'versionrequiredtext' => "Per usare questa pagina è necessario disporre della versione $1 del software MediaWiki. Vedi [[Special:Version|l'apposita pagina]].",
+
+'ok'                  => 'OK',
+'pagetitle'           => '$1 - {{SITENAME}}',
+'retrievedfrom'       => 'Estratto da "$1"',
+'youhavenewmessages'  => 'Hai $1 ($2).',
+'newmessageslink'     => 'nuovi messaggi',
+'newmessagesdifflink' => 'differenza con la revisione precedente',
+'editsection'         => 'modifica',
+'editold'             => 'modifica',
+'editsectionhint'     => 'Modifica la sezione $1',
+'toc'                 => 'Indice',
+'showtoc'             => 'mostra',
+'hidetoc'             => 'nascondi',
+'thisisdeleted'       => 'Vedi o ripristina $1?',
+'viewdeleted'         => 'Vedi $1?',
+'restorelink'         => '{{PLURAL:$1|una modifica cancellata|$1 modifiche cancellate}}',
+'feedlinks'           => 'Feed:',
+'feed-invalid'        => 'Modalità di sottoscrizione del feed non valida.',
+
+# Short words for each namespace, by default used in the 'article' tab in monobook
+'nstab-main'      => 'Voce',
+'nstab-user'      => 'Utente',
+'nstab-media'     => 'File multimediale',
+'nstab-special'   => 'Speciale',
+'nstab-project'   => 'Pagina di servizio',
+'nstab-image'     => 'Immagine',
+'nstab-mediawiki' => 'Messaggio',
+'nstab-template'  => 'Template',
+'nstab-help'      => 'Aiuto',
+'nstab-category'  => 'Categoria',
+
+# Main script and global functions
+'nosuchaction'      => 'Operazione non riconosciuta',
+'nosuchactiontext'  => 'La URL immessa non corrisponde a un comando riconosciuto dal software MediaWiki',
+'nosuchspecialpage' => 'Pagina speciale non disponibile',
+'nospecialpagetext' => "La pagina speciale richiesta non è stata riconosciuta dal software MediaWiki; l'elenco delle pagine speciali valide si trova in [[Special:Specialpage|Elenco delle pagine speciali]].",
+
+# General errors
+'error'                => 'Errore',
+'databaseerror'        => 'Errore del database',
+'dberrortext'          => 'Errore di sintassi nella richiesta inoltrata al database.
+Ciò potrebbe indicare la presenza di un bug nel software.
+L\'ultima query inviata al database è stata:
+<blockquote><tt>$1</tt></blockquote>
+richiamata dalla funzione "<tt>$2</tt>".
+MySQL ha restituito il seguente errore "<tt>$3: $4</tt>".',
+'dberrortextcl'        => 'Errore di sintassi nella richiesta inoltrata al database.
+L\'ultima query inviata al database è stata:
+"$1"
+richiamata dalla funzione "$2".
+MySQL ha restituito il seguente errore "$3: $4".',
+'noconnect'            => 'Connessione al database non riuscita a causa di un problema tecnico del sito.<br />$1',
+'nodb'                 => 'Selezione del database $1 non riuscita',
+'cachederror'          => "Quella presentata di seguito è una copia ''cache'' della pagina richiesta; potrebbe quindi non essere aggiornata.",
+'laggedslavemode'      => 'Attenzione: La pagina potrebbe non riportare gli aggiornamenti più recenti.',
+'readonly'             => 'Database bloccato',
+'enterlockreason'      => 'Indica il motivo del blocco, specificando il momento in cui è presumibile che venga rimosso.',
+'readonlytext'         => "In questo momento il database è bloccato e non sono possibili aggiunte o modifiche alle pagine. Il blocco è di solito legato a operazioni di manutenzione ordinaria, al termine delle quali il database è di nuovo accessibile.
+
+L'amministratore di sistema che ha imposto il blocco ha fornito questa spiegazione: $1",
+'missingarticle'       => 'Il database non ha trovato il testo della pagina dal titolo "$1", che avrebbe dovuto essere presente.
+
+Di solito ciò si verifica quando viene seguito, a partire dalla cronologia o dal confronto tra versioni, un collegamento a una pagina cancellata.
+
+In caso contrario, si è probabilmente scoperto un errore del software MediaWiki.
+Si prega di segnalare l\'accaduto a un amministratore specificando la URL in questione.',
+'readonly_lag'         => 'Il database è stato bloccato automaticamente per consentire ai server con i database slave di sincronizzarsi con il master',
+'internalerror'        => 'Errore interno',
+'filecopyerror'        => 'Impossibile copiare il file "$1" in "$2".',
+'filerenameerror'      => 'Impossibile rinominare il file "$1" in "$2".',
+'filedeleteerror'      => 'Impossibile cancellare il file "$1".',
+'filenotfound'         => 'File "$1" non trovato.',
+'unexpected'           => 'Valore imprevisto: "$1"="$2".',
+'formerror'            => 'Errore: impossibile inviare il modulo',
+'badarticleerror'      => 'Operazione non consentita per questa pagina.',
+'cannotdelete'         => 'Impossibile cancellare la pagina o il file richiesto. (Potrebbe essere stato già cancellato.)',
+'badtitle'             => 'Titolo non corretto',
+'badtitletext'         => 'Il titolo della pagina richiesta è vuoto, errato o con caratteri non ammessi oppure deriva da un errore nei collegamenti tra siti wiki diversi o versioni in lingue diverse dello stesso sito.',
+'perfdisabled'         => 'Siamo spiacenti, questa funzionalità è temporaneamente disabilitata perché il suo uso rallenta il database fino a rendere il sito inutilizzabile per tutti gli utenti.',
+'perfdisabledsub'      => 'I dati presentati di seguito risalgono al $1:', # obsolete?
+'perfcached'           => "I dati che seguono sono estratti da una copia ''cache'' del database, non aggiornati in tempo reale.",
+'perfcachedts'         => "I dati che seguono sono estratti da una copia ''cache'' del database. Ultimo aggiornamento: $1.",
+'querypage-no-updates' => 'Gli aggiornamenti della pagina sono temporaneamente sospesi. I dati in essa contenuti non verranno aggiornati.',
+'wrong_wfQuery_params' => 'Errore nei parametri inviati alla funzione wfQuery()<br />
+Funzione: $1<br />
+Query: $2',
+'viewsource'           => 'Vedi sorgente',
+'viewsourcefor'        => 'di $1',
+'protectedpagetext'    => 'Questa pagina è stata protetta per impedirne la modifica.',
+'viewsourcetext'       => 'È possibile visualizzare e copiare il codice sorgente di questa pagina:',
+'protectedinterface'   => "Questa pagina contiene un elemento che fa parte dell'interfaccia utente del software; è quindi protetta per evitare possibili abusi.",
+'editinginterface'     => "'''Attenzione:''' Il testo di questa pagina fa parte dell'interfaccia utente del sito. Tutte le modifiche apportate a questa pagina si riflettono sui messaggi visualizzati per tutti gli utenti.",
+'sqlhidden'            => '(la query SQL è stata nascosta)',
+'cascadeprotected'     => 'Su questa pagina non è possibile effettuare modifiche perché viene inclusa in una o più pagine che sono state protette selezionando la protezione "ricorsiva". Tali pagine sono elencate di seguito:',
+
+# Login and logout pages
+'logouttitle'                => 'Logout utente',
+'logouttext'                 => '<strong>Logout effettuato.</strong><br />
+Si può continuare ad usare {{SITENAME}} come utente anonimo oppure eseguire un nuovo accesso, con lo stesso nome utente o un nome diverso.
+
+Alcune pagine potrebbero continuare ad apparire come se il logout non fosse avvenuto finché non viene pulita la cache del proprio browser.',
+'welcomecreation'            => "== Benvenuto, $1! ==
+
+L'account è stato creato correttamente. Non dimenticare di personalizzare le preferenze di {{SITENAME}}.",
+'loginpagetitle'             => 'Login utente',
+'yourname'                   => 'Nome utente',
+'yourpassword'               => 'Password',
+'yourpasswordagain'          => 'Ripeti la password',
+'remembermypassword'         => 'Ricorda la password',
+'yourdomainname'             => 'Specificare il dominio',
+'externaldberror'            => 'Si è verificato un errore con il server di autenticazione esterno, oppure non si dispone delle autorizzazioni necessarie per aggiornare il proprio accesso esterno.',
+'loginproblem'               => "<b>Si è verificato un errore durante l'accesso.</b><br />Riprovare.",
+'alreadyloggedin'            => "<strong>L'utente $1 è già connesso a questo server.</strong><br />",
+'login'                      => 'Entra',
+'loginprompt'                => 'Per accedere a {{SITENAME}} è necessario abilitare i cookie.',
+'userlogin'                  => 'Entra o crea un nuovo accesso',
+'logout'                     => 'Esci',
+'userlogout'                 => 'Esci',
+'notloggedin'                => 'Accesso non effettuato',
+'nologin'                    => 'Non hai ancora un accesso? $1.',
+'nologinlink'                => 'Crealo ora',
+'createaccount'              => 'Crea un nuovo accesso',
+'gotaccount'                 => 'Hai già un accesso? $1.',
+'gotaccountlink'             => 'Entra',
+'createaccountmail'          => 'via e-mail',
+'badretype'                  => 'Le password inserite non coincidono tra loro.',
+'userexists'                 => 'Il nome utente inserito è già utilizzato. Si prega di scegliere un nome utente diverso.',
+'youremail'                  => 'Indirizzo e-mail: *',
+'username'                   => 'Nome utente',
+'uid'                        => 'ID utente:',
+'yourrealname'               => 'Nome vero: *',
+'yourlanguage'               => 'Lingua:',
+'yourvariant'                => 'Variante:',
+'yournick'                   => 'Soprannome (nickname):',
+'badsig'                     => 'Errore nella firma non standard, verificare i tag HTML.',
+'email'                      => 'Indirizzo e-mail',
+'prefs-help-email-enotif'    => "L'indirizzo verrà inoltre usato per le segnalazioni via e-mail, se richieste con le apposite opzioni.",
+'prefs-help-realname'        => '* Nome vero (opzionale): se si sceglie di inserirlo, verrà utilizzato per attribuire la paternità dei contenuti inviati.',
+'loginerror'                 => "Errore nell'accesso",
+'prefs-help-email'           => '* Indirizzo e-mail (opzionale): Consente agli utenti di essere contattati attraverso la propria pagina utente o la relativa pagina di discussione, senza dover rivelare la propria identità.',
+'nocookiesnew'               => "Il nome utente per l'accesso è stato creato, ma non è stato possibile accedere a {{SITENAME}} perché i cookie sono disattivati. Riprovare l'accesso con il nome utente e la password appena creati dopo aver attivato i cookie nel proprio browser.",
+'nocookieslogin'             => "L'accesso a {{SITENAME}} richiede l'uso dei cookie, che risultano disattivati. Riprovare l'accesso dopo aver attivato i cookie nel proprio browser.",
+'noname'                     => 'Il nome utente indicato non è valido.',
+'loginsuccesstitle'          => 'Accesso effettuato',
+'loginsuccess'               => "'''Il collegamento al server di {{SITENAME}} con il nome utente \"\$1\" è attivo.'''",
+'nosuchuser'                 => 'Non è registrato alcun utente di nome "$1". Verificare il nome inserito o creare un nuovo accesso.',
+'nosuchusershort'            => 'Non è registrato alcun utente di nome "$1". Verificare il nome inserito.',
+'nouserspecified'            => 'È necessario specificare un nome utente.',
+'wrongpassword'              => 'La password inserita non è corretta. Riprovare.',
+'wrongpasswordempty'         => 'La password inserita è vuota. Riprovare.',
+'mailmypassword'             => 'Invia password via e-mail',
+'passwordremindertitle'      => 'Servizio Password Reminder di {{SITENAME}}',
+'passwordremindertext'       => 'Qualcuno (probabilmente tu, con indirizzo IP $1) ha richiesto l\'invio di una nuova password di accesso a {{SITENAME}} ($4).
+La password per l\'utente "$2" è stata impostata a "$3". 
+È opportuno eseguire un accesso quanto prima e cambiare la password immediatamente.
+
+Se non sei stato tu a fare la richiesta, oppure hai ritrovato la password e non desideri più cambiarla, puoi ignorare questo messaggio e continuare a usare la vecchia password.',
+'noemail'                    => 'Nessun indirizzo e-mail registrato per l\'utente "$1".',
+'passwordsent'               => 'Una nuova password è stata inviata all\'indirizzo e-mail registrato per l\'utente "$1".
+Per favore, effettua un accesso non appena la ricevi.',
+'blocked-mailpassword'       => 'Per prevenire abusi, non è consentito usare la funzione "Invia nuova password" da un indirizzo IP bloccato.',
+'eauthentsent'               => "Un messaggio e-mail di conferma è stato spedito all'indirizzo indicato.
+Per abilitare l'invio di messaggi e-mail per questo accesso è necessario seguire le istruzioni che vi sono indicate, in modo da confermare che si è i legittimi proprietari dell'indirizzo",
+'throttled-mailpassword'     => 'Una nuova password è già stata inviata da meno di $1 ore. Per prevenire abusi, la funzione "Invia nuova password" può essere usata solo una volta ogni $1 ore.',
+'mailerror'                  => "Errore nell'invio del messaggio: $1",
+'acct_creation_throttle_hit' => 'Siamo spiacenti, ma hai già creato $1 account. Non puoi crearne altri.',
+'emailauthenticated'         => "L'indirizzo e-mail è stato confermato il $1.",
+'emailnotauthenticated'      => "L'indirizzo e-mail non è stato ancora confermato. Non verranno inviati messaggi e-mail attraverso le funzioni elencate di seguito.",
+'noemailprefs'               => 'Indicare un indirizzo e-mail per attivare queste funzioni.',
+'emailconfirmlink'           => 'Confermare il proprio indirizzo e-mail',
+'invalidemailaddress'        => "L'indirizzo e-mail indicato ha un formato non valido. Inserire un indirizzo valido o svuotare la casella.",
+'accountcreated'             => 'Accesso creato',
+'accountcreatedtext'         => "È stato creato un accesso per l'utente $1.",
+
+# Password reset dialog
+'resetpass'               => 'Reimposta la password',
+'resetpass_announce'      => "L'accesso è stato effettuato con un codice temporaneo, inviato via e-mail. Per completare l'accesso è necessario impostare una nuova password:",
+'resetpass_text'          => '<!-- Aggiungere il testo qui -->',
+'resetpass_header'        => 'Reimposta password',
+'resetpass_submit'        => 'Imposta la password e accedi al sito',
+'resetpass_success'       => 'La password è stata modificata. Accesso in corso...',
+'resetpass_bad_temporary' => 'Password temporanea non valida. La password potrebbe essere stata già cambiata, oppure potrebbe essere stata richiesta una nuova password temporanea.',
+'resetpass_forbidden'     => 'Non è possibile modificare le password su questo sito',
+'resetpass_missing'       => 'Dati mancanti nel modulo.',
+
+# Edit page toolbar
+'bold_sample'     => 'Grassetto',
+'bold_tip'        => 'Grassetto',
+'italic_sample'   => 'Corsivo',
+'italic_tip'      => 'Corsivo',
+'link_sample'     => 'Titolo del collegamento',
+'link_tip'        => 'Collegamento interno',
+'extlink_sample'  => 'http://www.example.com titolo del collegamento',
+'extlink_tip'     => 'Collegamento esterno (notare il prefisso http:// )',
+'headline_sample' => 'Intestazione',
+'headline_tip'    => 'Intestazione di 2° livello',
+'math_sample'     => 'Inserire qui la formula',
+'math_tip'        => 'Formula matematica (LaTeX)',
+'nowiki_sample'   => 'Inserire qui il testo non formattato',
+'nowiki_tip'      => 'Ignora la formattazione wiki',
+'image_sample'    => 'Esempio.jpg',
+'image_tip'       => 'Immagine incorporata',
+'media_sample'    => 'Esempio.ogg',
+'media_tip'       => 'Collegamento a file multimediale',
+'sig_tip'         => 'Firma con data e ora',
+'hr_tip'          => 'Linea orizzontale (usare con giudizio)',
+
+# Edit pages
+'summary'                   => 'Oggetto',
+'subject'                   => 'Argomento (intestazione)',
+'minoredit'                 => 'Questa è una modifica minore',
+'watchthis'                 => 'Aggiungi agli osservati speciali',
+'savearticle'               => 'Salva la pagina',
+'preview'                   => 'Anteprima',
+'showpreview'               => 'Visualizza anteprima',
+'showlivepreview'           => "Funzione ''Live preview''",
+'showdiff'                  => 'Mostra cambiamenti',
+'anoneditwarning'           => "'''Attenzione:''' Accesso non effettuato. Nella cronologia della pagina verrà registrato l'indirizzo IP.",
+'missingsummary'            => "'''Attenzione:''' Non è stato specificato l'oggetto della modifica. Premendo di nuovo 'Salva la pagina' la modifica verrà salvata con l'oggetto vuoto.",
+'missingcommenttext'        => 'Inserire un commento qui sotto.',
+'missingcommentheader'      => "'''Attenzione:''' Non è stata specificata l'intestazione di questo commento. Premendo di nuovo '''Salva la pagina''' la modifica verrà salvata senza intestazione.",
+'summary-preview'           => 'Anteprima oggetto',
+'subject-preview'           => 'Anteprima oggetto/intestazione',
+'blockedtitle'              => 'Utente bloccato.',
+'blockedtext'               => "Questo nome utente o indirizzo IP sono stati bloccati da $1.
+La motivazione del blocco è la seguente:<br />:''$2''<br />Se lo si desidera, è possibile contattare $1 o un altro [[{{MediaWiki:grouppage-sysop}}|amministratore]] per discutere del blocco.
+
+Si noti che la funzione 'Scrivi all'utente' non è attiva se non è stato registrato un indirizzo e-mail valido nelle proprie [[{{ns:Special}}:Preferences|preferenze]].
+
+Si prega di specificare l'indirizzo IP coinvolto ($3) o il numero del blocco (ID #$5) in qualsiasi richiesta di chiarimenti.",
+'blockedoriginalsource'     => "Di seguito viene mostrato il codice sorgente della pagina '''$1''':",
+'blockededitsource'         => "Di seguito vengono mostrate le '''modifiche apportate''' alla pagina '''$1''':",
+'whitelistedittitle'        => 'Accesso necessario per la modifica delle pagine',
+'whitelistedittext'         => 'Per modificare le pagine è necessario $1.',
+'whitelistreadtitle'        => 'Accesso necessario per la lettura delle pagine',
+'whitelistreadtext'         => "Per essere abilitato alla lettura delle pagine è necessario [[Special:Userlogin|eseguire l'accesso]].",
+'whitelistacctitle'         => 'Creazione di un nuovo accesso non consentita',
+'whitelistacctext'          => "Per essere abilitati alla creazione di nuovi accessi su questo sito è necessario [[Special:Userlogin|effettuare l'accesso]] ed aver ricevuto le opportune autorizzazioni.",
+'confirmedittitle'          => 'Conferma della e-mail necessaria per la modifica delle pagine',
+'confirmedittext'           => "Per essere abilitati alla modifica delle pagine è necessario confermare il proprio indirizzo e-mail. Per impostare e confermare l'indirizzo servirsi delle [[Special:Preferences|preferenze]].",
+'loginreqtitle'             => "Per modificare questa pagina è necessario eseguire l'accesso al sito.",
+'loginreqlink'              => "eseguire l'accesso",
+'loginreqpagetext'          => 'Per vedere altre pagine è necessario $1.',
+'accmailtitle'              => 'Password inviata.',
+'accmailtext'               => 'La password per l\'utente "$1" è stata inviata all\'indirizzo $2.',
+'newarticle'                => '(Nuovo)',
+'newarticletext'            => "Il collegamento appena seguito corrisponde a una pagina non ancora esistente.
+Se si desidera creare la pagina ora, basta cominciare a scrivere il testo nella casella qui sotto
+(fare riferimento alle [[{{MediaWiki:helppage}}|pagine di aiuto]] per maggiori informazioni).
+Se il collegamento è stato seguito per errore, è sufficiente fare clic sul pulsante '''Indietro''' del proprio browser.",
+'anontalkpagetext'          => "----''Questa è la pagina di discussione di un utente anonimo, che non ha ancora creato un accesso o comunque non lo usa. Per identificarlo è quindi necessario usare il numero del suo indirizzo IP. Gli indirizzi IP possono però essere condivisi da più utenti. Se sei un utente anonimo e ritieni che i commenti presenti in questa pagina non si riferiscano a te, [[Special:Userlogin|crea un nuovo accesso o entra]] con quello che già hai per evitare di essere confuso con altri utenti anonimi in futuro''",
+'noarticletext'             => 'In questo momento la pagina richiesta è vuota. È possibile [[Special:Search/{{PAGENAME}}|cercare questo titolo]] nelle altre pagine del sito oppure [{{fullurl:{{FULLPAGENAME}}|action=edit}} modificare la pagina ora].',
+'clearyourcache'            => "'''Nota:''' dopo aver salvato è necessario pulire la cache del proprio browser per vedere i cambiamenti. Per '''Mozilla / Firefox / Safari''': fare clic su ''Ricarica'' tenendo premuto il tasto delle maiuscole, oppure premere ''Ctrl-Maiusc-R'' (''Cmd-Maiusc-R'' su Mac); per '''Internet Explorer:''' mantenere premuto il tasto ''Ctrl'' mentre si preme il pulsante ''Aggiorna'' o premere ''Ctrl-F5''; per '''Konqueror''': premere il pulsante ''Ricarica'' o il tasto ''F5''; per '''Opera''' può essere necessario svuotare completamente la cache dal menu ''Strumenti → Preferenze''.",
+'usercssjsyoucanpreview'    => "<strong>Suggerimento:</strong> si consiglia di usare il pulsante \'Visualizza anteprima\' per provare i nuovi CSS o JavaScript prima di salvarli.",
+'usercsspreview'            => "'''Questa è solo un'anteprima del proprio CSS personale; le modifiche non sono ancora state salvate!'''",
+'userjspreview'             => "'''Questa è solo un'anteprima per provare il proprio JavaScript personale; le modifiche non sono ancora state salvate!'''",
+'userinvalidcssjstitle'     => "'''Attenzione:'''  Non esiste alcuna skin con nome \"\$1\". Si noti che le pagine per i .css e .js personalizzati hanno l'iniziale del titolo minuscola, ad esempio {{ns:User}}:Esempio/monobook.css e non {{ns:User}}:Esempio/Monobook.css.",
+'updated'                   => '(Aggiornato)',
+'note'                      => '<strong>NOTA:</strong>',
+'previewnote'               => 'Questa è solo una anteprima; le modifiche alla pagina NON sono ancora state salvate!',
+'previewconflict'           => "L'anteprima corrisponde al testo presente nella casella di modifica superiore e rappresenta la pagina come apparirà se si sceglie di premere 'Salva la pagina' in questo momento.",
+'session_fail_preview'      => '<strong>Siamo spiacenti, non è stato possibile elaborare la modifica perché sono andati persi i dati relativi alla sessione. Se il problema persiste, si può provare a scollegarsi ed effettuare un nuovo accesso.</strong>',
+'session_fail_preview_html' => "<strong>Siamo spiacenti, non è stato possibile elaborare la modifica perché sono andati persi i dati relativi alla sessione.</strong>
+
+''Poiché in questo sito è abilitato l'uso di HTML senza limitazioni, l'anteprima non viene visualizzata; si tratta di una misura di sicurezza contro gli attacchi JavaScript.''
+
+<strong>Se il problema persiste, si può provare a scollegarsi ed effettuare un nuovo accesso.</strong>",
+'importing'                 => 'Importazione di $1',
+'editing'                   => 'Modifica di $1',
+'editinguser'               => 'Modifica di $1',
+'editingsection'            => 'Modifica di $1 (sezione)',
+'editingcomment'            => 'Modifica di $1 (commento)',
+'editconflict'              => 'Conflitto di edizione su $1',
+'explainconflict'           => "Un altro utente ha salvato una nuova versione della pagina mentre stavi effettuando le modifiche.<br />
+La casella di modifica superiore contiene il testo della pagina attualmente online, così come è stato aggiornato dall'altro utente. La versione con le tue modifiche è invece riportata nella casella di modifica inferiore. Se desideri confermarle, devi riportare le tue modifiche nel testo esistente (casella superiore).
+Premendo il pulsante 'Salva la pagina', verrà salvato <b>solo</b> il testo contenuto nella casella di modifica superiore.<br />",
+'yourtext'                  => 'Il tuo testo',
+'storedversion'             => 'La versione memorizzata',
+'nonunicodebrowser'         => '<strong>Attenzione: Si sta utilizzando un browser non compatibile con i caratteri Unicode. Per consentire la modifica delle pagine senza creare inconvenienti, i caratteri non ASCII vengono visualizzati nella casella di modifica sotto forma di codici esadecimali.</strong>',
+'editingold'                => '<strong>Attenzione: si sta modificando una versione non aggiornata della pagina.<br />
+Se si sceglie di salvarla, tutti i cambiamenti apportati dopo questa revisione andranno perduti.</strong>',
+'yourdiff'                  => 'Differenze',
+'copyrightwarning'          => "Nota: tutti i contributi a {{SITENAME}} si considerano rilasciati nei termini della licenza d'uso $2 (vedi $1 per maggiori dettagli). Se non desideri che i tuoi testi possano essere modificati e ridistribuiti da chiunque senza alcuna limitazione, non inviarli a {{SITENAME}}.<br />
+Con l'invio del testo dichiari inoltre, sotto la tua responsabilità, che il testo è stato scritto da te personalmente oppure che è stato copiato da una fonte di pubblico dominio o analogamente libera.
+<strong>NON INVIARE MATERIALE COPERTO DA DIRITTO DI AUTORE SENZA AUTORIZZAZIONE!</strong>",
+'copyrightwarning2'         => "Nota: tutti i contributi inviati a {{SITENAME}} possono essere modificati, stravolti o cancellati da parte degli altri partecipanti. Se non desideri che i tuoi testi possano essere modificati senza alcun riguardo, non inviarli a questo sito.<br />
+Con l'invio del testo dichiari inoltre, sotto la tua responsabilità, che il testo è stato scritto da te personalmente oppure che è stato copiato da una fonte di pubblico dominio o analogamente libera. (vedi $1 per maggiori dettagli)
+<strong>NON INVIARE MATERIALE COPERTO DA DIRITTO DI AUTORE SENZA AUTORIZZAZIONE!</strong>",
+'longpagewarning'           => "<strong>ATTENZIONE: Questa pagina è lunga $1 kilobyte; alcuni browser potrebbero presentare dei problemi nella modifica di pagine che si avvicinano o superano i 32 KB. Valuta l'opportunità di suddividere la pagina in sezioni più piccole.</strong>",
+'longpageerror'             => '<strong>ERRORE: Il testo inviato è lungo $1 kilobyte, più della dimensione massima consentita ($2 kilobyte). Il testo non può essere salvato.</strong>',
+'readonlywarning'           => '<strong>ATTENZIONE: Il database è stato bloccato per manutenzione, è quindi impossibile salvare le modifiche in questo momento. Per non perderle, è possibile copiare quanto inserito finora nella casella di modifica, incollarlo in un programma di elaborazione testi e salvarlo in attesa dello sblocco del database.</strong>',
+'protectedpagewarning'      => '<strong>ATTENZIONE: Questa pagina è stata bloccata in modo che solo gli utenti con privilegi di amministratore possano modificarla.</strong>',
+'semiprotectedpagewarning'  => "'''Nota:''' Questa pagina è stata bloccata in modo che solo gli utenti registrati possano modificarla.",
+'cascadeprotectedwarning'   => "'''Attenzione:''' Questa pagina è stata bloccata in modo che solo gli utenti con privilegi di amministratore possano modificarla, perché viene inclusa nelle seguenti pagine che sono state protette selezionando la protezione \"ricorsiva\":",
+'templatesused'             => 'Template utilizzati in questa pagina:',
+'templatesusedpreview'      => 'Template utilizzati in questa anteprima:',
+'templatesusedsection'      => 'Template utilizzati in questa sezione:',
+'template-protected'        => '(protetto)',
+'template-semiprotected'    => '(semiprotetto)',
+'edittools'                 => '<!-- Testo che appare al di sotto del modulo di modifica e di upload. -->',
+'nocreatetitle'             => 'Creazione delle pagine limitata',
+'nocreatetext'              => 'Questo sito ha limitato la possibilità di creare nuove pagine ai soli utenti registrati. È possibile tornare indietro e modificare una pagina esistente, oppure [[Special:Userlogin|entrare o creare un nuovo accesso]].',
+
+# "Undo" feature
+'undo-success' => 'Questa modifica può essere annullata. Verificare il confronto presentato di seguito per accertarsi che il contenuto corrisponda a quanto desiderato e quindi salvare le modifiche per completare la procedura di annullamento.',
+'undo-failure' => 'Impossibile annullare la modifica a causa di un conflitto con modifiche intermedie.',
+'undo-summary' => 'Annullata la modifica $1 di [[Special:Contributions/$2|$2]] ([[User talk:$2|Discussione]])',
+
+# Account creation failure
+'cantcreateaccounttitle' => 'Impossibile registrare un utente',
+'cantcreateaccounttext'  => 'La registrazione di nuovi utenti da questo indirizzo IP (<b>$1</b>) è stata bloccata. È possibile che questo indirizzo sia stato usato in passato per compiere vandalismi, causandone il blocco.',
+
+# History pages
+'revhistory'                  => 'Cronologia delle versioni di questa pagina.',
+'viewpagelogs'                => 'Visualizza i log relativi a questa pagina.',
+'nohistory'                   => 'Cronologia delle versioni di questa pagina non reperibile.',
+'revnotfound'                 => 'Versione non trovata',
+'revnotfoundtext'             => 'La versione richiesta della pagina non è stata trovata.
+Verificare la URL usata per accedere a questa pagina.',
+'loadhist'                    => 'Caricamento cronologia di questa pagina',
+'currentrev'                  => 'Versione corrente',
+'revisionasof'                => 'Versione del $1',
+'revision-info'               => 'Versione del $1, autore: $2',
+'previousrevision'            => '← Versione meno recente',
+'nextrevision'                => 'Versione più recente →',
+'currentrevisionlink'         => 'Versione corrente',
+'cur'                         => 'corr',
+'next'                        => 'succ',
+'last'                        => 'prec',
+'orig'                        => 'orig',
+'page_first'                  => 'prima',
+'page_last'                   => 'ultima',
+'histlegend'                  => "Confronto tra versioni: selezionare le caselle corrispondenti alle versioni desiderate e premere Invio o il pulsante in basso.
+
+Legenda: (corr) = differenze con la versione corrente, (prec) = differenze con la versione precedente, '''m''' = modifica minore",
+'deletedrev'                  => '[cancellata]',
+'histfirst'                   => 'Prima',
+'histlast'                    => 'Ultima',
+'rev-deleted-comment'         => '(commento rimosso)',
+'rev-deleted-user'            => '(nome utente rimosso)',
+'rev-deleted-text-permission' => '<div class="mw-warning plainlinks">
+Questa versione della pagina è stata rimossa dagli archivi visibili al pubblico.
+Consultare il [{{fullurl:Special:Log/delete|page={{PAGENAMEE}}}} log di cancellazione] per ulteriori dettagli.
+</div>',
+'rev-deleted-text-view'       => '<div class="mw-warning plainlinks">
+Questa versione della pagina è stata rimossa dagli archivi visibili al pubblico.
+Il testo può essere visualizzato soltanto dagli amministratori del sito.
+Consultare il [{{fullurl:Special:Log/delete|page={{PAGENAMEE}}}} log di cancellazione] per ulteriori dettagli.
+</div>',
+'rev-delundel'                => 'mostra/nascondi',
+'historysize'                 => '($1 byte)',
+'historyempty'                => '(vuota)',
+
+'history-feed-title'          => 'Cronologia',
+'history-feed-description'    => 'Cronologia della pagina su questo sito',
+'history-feed-item-nocomment' => '$1 il $2', # user at time
+'history-feed-empty'          => 'La pagina richiesta non esiste; potrebbe essere stata cancellata dal sito o rinominata. Verificare con la [[Special:Search|pagina di ricerca]] se vi sono nuove pagine.',
+
+# Revision deletion
+'revisiondelete'            => 'Cancella o ripristina versioni',
+'revdelete-nooldid-title'   => 'Versione non specificata',
+'revdelete-nooldid-text'    => 'Non è stata specificata alcuna versione della pagina su cui eseguire questa funzione.',
+'revdelete-selected'        => 'Versioni selezionate di [[:$1]]:',
+'revdelete-text'            => 'Le versioni cancellate restano visibili nella cronologia della pagina, mentre il testo contenuto non è accessibile al pubblico.
+
+Gli altri amministratori del sito potranno accedere comunque ai contenuti nascosti e ripristinarli attraverso questa stessa interfaccia, se non sono state impostate altre limitazioni in fase di installazione del sito.',
+'revdelete-legend'          => 'Imposta le seguenti limitazioni sulle versioni cancellate:',
+'revdelete-hide-text'       => 'Nascondi il testo della versione',
+'revdelete-hide-comment'    => "Nascondi l'oggetto della modifica",
+'revdelete-hide-user'       => "Nascondi il nome o l'indirizzo IP dell'autore",
+'revdelete-hide-restricted' => 'Applica le limitazioni indicate anche agli amministratori',
+'revdelete-log'             => 'Commento per il log:',
+'revdelete-submit'          => 'Applica alla revisione selezionata',
+'revdelete-logentry'        => 'ha modificato la visibilità per una revisione di [[$1]]',
+
+# Diffs
+'difference'                => '(Differenze fra le revisioni)',
+'loadingrev'                => 'caricamento revisione per differenze',
+'lineno'                    => 'Riga $1:',
+'editcurrent'               => 'Modifica la versione corrente di questa pagina',
+'selectnewerversionfordiff' => 'Seleziona una versione più recente per il confronto',
+'selectolderversionfordiff' => 'Seleziona una versione meno recente per il confronto',
+'compareselectedversions'   => 'Confronta le versioni selezionate',
+'editundo'                  => 'annulla',
+'diff-multi'                => '({{plural:$1|Una revisione intermedia non mostrata|$1 revisioni intermedie non mostrate}}.)',
+
+# Search results
+'searchresults'         => 'Risultati della ricerca',
+'searchresulttext'      => 'Per maggiori informazioni sulla ricerca interna di {{SITENAME}}, vedi [[{{MediaWiki:helppage}}|{{int:help}}]].',
+'searchsubtitle'        => "Ricerca di '''[[:$1]]'''",
+'searchsubtitleinvalid' => "Ricerca di '''$1'''",
+'badquery'              => 'Richiesta mal posta',
+'badquerytext'          => 'Impossibile elaborare la richiesta. Questo potrebbe dipendere dall\'aver cercato una parola più corta di 4 caratteri, il che al momento è impossibile, oppure da un errore nella forma della richiesta, ad esempio "pesce and and azzurro". Per favore, riprova.',
+'matchtotals'           => 'La ricerca di "$1" ha trovato $2 riscontri nel titolo e $3 riscontri nel testo.',
+'noexactmatch'          => "'''La pagina \"\$1\" non esiste.''' È possibile [[:\$1|crearla ora]].",
+'titlematches'          => 'Corrispondenze nel titolo delle pagine',
+'notitlematches'        => 'Nessuna corrispondenza nei titoli delle pagine',
+'textmatches'           => 'Corrispondenze nel testo delle pagine',
+'notextmatches'         => 'Nessuna corrispondenza nel testo delle pagine',
+'prevn'                 => 'precedenti $1',
+'nextn'                 => 'successivi $1',
+'viewprevnext'          => 'Vedi ($1) ($2) ($3).',
+'showingresults'        => "Di seguito {{PLURAL:$1|viene presentato al massimo '''1''' risultato|vengono presentati al massimo '''$1''' risultati}} a partire dal numero '''$2'''.",
+'showingresultsnum'     => "Di seguito {{PLURAL:$3|viene presentato '''1''' risultato|vengono presentati '''$3''' risultati}} a partire dal numero '''$2'''.",
+'nonefound'             => '<strong>Nota</strong>: alcune parole comuni nella lingua inglese, come  "zero" o "more", non sono indicizzate e possono quindi dare luogo a risultati nulli, così come l\'indicazione di più termini da ricercare (solo le pagine che contengano tutti i termini richiesti vengono visualizzate fra i risultati).',
+'powersearch'           => 'Ricerca',
+'powersearchtext'       => 'Ricerca nei seguenti namespace:<br />$1<br />$2 Mostra i redirect<br />Criteri di ricerca: $3 $9',
+'searchdisabled'        => 'La ricerca interna di {{SITENAME}} non è attiva; nel frattempo si può provare ad usare un motore di ricerca esterno come Google. (Si noti però che i contenuti di {{SITENAME}} presenti in tali motori potrebbero non essere aggiornati.)',
+'blanknamespace'        => '(Principale)',
+
+# Preferences page
+'preferences'              => 'Preferenze',
+'mypreferences'            => 'le mie preferenze',
+'prefsnologin'             => 'Accesso non effettuato',
+'prefsnologintext'         => "Per poter personalizzare le preferenze è necessario effettuare l'[[Special:Userlogin|accesso]].",
+'prefsreset'               => 'Le preferenze sono state ripristinate ai valori predefiniti.',
+'qbsettings'               => 'Quickbar',
+'qbsettings-none'          => 'Nessuno',
+'qbsettings-fixedleft'     => 'Fisso a sinistra',
+'qbsettings-fixedright'    => 'Fisso a destra',
+'qbsettings-floatingleft'  => 'Fluttuante a sinistra',
+'qbsettings-floatingright' => 'Fluttuante a destra',
+'changepassword'           => 'Cambia password',
+'skin'                     => 'Aspetto grafico (skin)',
+'math'                     => 'Formule matematiche',
+'dateformat'               => 'Formato della data',
+'datedefault'              => 'Nessuna preferenza',
+'datetime'                 => 'Data e ora',
+'math_failure'             => 'Errore del parser',
+'math_unknown_error'       => 'errore sconosciuto',
+'math_unknown_function'    => 'funzione sconosciuta',
+'math_lexing_error'        => 'errore lessicale',
+'math_syntax_error'        => 'errore di sintassi',
+'math_image_error'         => 'Conversione in PNG non riuscita; verificare che siano correttamente installati i seguenti programmi: latex, dvips, gs e convert.',
+'math_bad_tmpdir'          => 'Impossibile scrivere o creare la directory temporanea per math',
+'math_bad_output'          => 'Impossibile scrivere o creare la directory di output per math',
+'math_notexvc'             => 'Eseguibile texvc mancante; per favore consultare math/README per la configurazione.',
+'prefs-personal'           => 'Profilo utente',
+'prefs-rc'                 => 'Ultime modifiche',
+'prefs-watchlist'          => 'Osservati speciali',
+'prefs-watchlist-days'     => 'Numero di giorni da mostrare negli osservati speciali:',
+'prefs-watchlist-edits'    => 'Numero di modifiche da mostrare con le funzioni avanzate:',
+'prefs-misc'               => 'Varie',
+'saveprefs'                => 'Salva le preferenze',
+'resetprefs'               => 'Reimposta le preferenze',
+'oldpassword'              => 'Vecchia password:',
+'newpassword'              => 'Nuova password:',
+'retypenew'                => 'Riscrivi la nuova password:',
+'textboxsize'              => 'Casella di modifica',
+'rows'                     => 'Righe:',
+'columns'                  => 'Colonne:',
+'searchresultshead'        => 'Ricerca',
+'resultsperpage'           => 'Numero di risultati per pagina:',
+'contextlines'             => 'Righe di testo per ciascun risultato:',
+'contextchars'             => 'Numero di caratteri di contesto:',
+'stubthreshold'            => 'Evidenzia gli stub più corti di:',
+'recentchangescount'       => 'Numero di righe nelle ultime modifiche:',
+'savedprefs'               => 'Le preferenze sono state salvate.',
+'timezonelegend'           => 'Fuso orario',
+'timezonetext'             => "Numero di ore di differenza fra l'ora locale e l'ora del server (UTC).",
+'localtime'                => 'Ora locale',
+'timezoneoffset'           => 'Differenza¹',
+'servertime'               => 'Ora del server',
+'guesstimezone'            => "Usa l'ora del tuo browser",
+'allowemail'               => 'Consenti la ricezione di e-mail da altri utenti (1)',
+'defaultns'                => 'Namespace predefiniti per la ricerca:',
+'default'                  => 'predefinito',
+'files'                    => 'File',
+
+# User rights
+'userrights-lookup-user'     => 'Gestione dei gruppi utente',
+'userrights-user-editname'   => 'Inserire il nome utente:',
+'editusergroup'              => 'Modifica gruppi utente',
+'userrights-editusergroup'   => 'Modifica gruppi utente',
+'saveusergroups'             => 'Salva gruppi utente',
+'userrights-groupsmember'    => 'Appartiene ai gruppi:',
+'userrights-groupsavailable' => 'Gruppi disponibili:',
+'userrights-groupshelp'      => "Selezionare i gruppi ai quali si vuole associare o rimuovere l'utente. L'appartenenza ai gruppi non selezionati non verrà modificata. Per deselezionare un gruppo, premere Ctrl + il tasto sinistro del mouse.",
+
+# Groups
+'group'            => 'Gruppo:',
+'group-bot'        => 'Bot',
+'group-sysop'      => 'Amministratori',
+'group-bureaucrat' => 'Burocrati',
+'group-all'        => '(utenti)',
+
+'group-bot-member'        => 'Bot',
+'group-sysop-member'      => 'Amministratore',
+'group-bureaucrat-member' => 'Burocrate',
+
+'grouppage-bot'        => 'Project:Bot',
+'grouppage-sysop'      => 'Project:Amministratori',
+'grouppage-bureaucrat' => 'Project:Burocrati',
+
+# User rights log
+'rightslog'      => 'Diritti degli utenti',
+'rightslogtext'  => 'Questo è il log delle modifiche ai diritti assegnati agli utenti.',
+'rightslogentry' => "ha modificato l'appartenenza di $1 dal gruppo $2 al gruppo $3",
+'rightsnone'     => '(nessuno)',
+
+# Recent changes
+'nchanges'                          => '$1 {{PLURAL:$1|modifica|modifiche}}',
+'recentchanges'                     => 'Ultime modifiche',
+'recentchangestext'                 => 'Questa pagina presenta le modifiche più recenti ai contenuti del sito.',
+'recentchanges-feed-description'    => 'Questo feed riporta le modifiche più recenti ai contenuti del sito.',
+'rcnote'                            => "Di seguito {{PLURAL:$1|è elencata la modifica più recente apportata|sono elencate le '''$1''' modifiche più recenti apportate}} al sito {{PLURAL:$2|nelle ultime 24 ore|negli scorsi '''$2''' giorni}}; i dati sono aggiornati a $3.",
+'rcnotefrom'                        => 'Di seguito sono elencate le modifiche apportate a partire da <b>$2</b> (fino a <b>$1</b>).',
+'rclistfrom'                        => 'Mostra le modifiche apportate a partire da $1',
+'rcshowhideminor'                   => '$1 le modifiche minori',
+'rcshowhidebots'                    => '$1 i bot',
+'rcshowhideliu'                     => '$1 gli utenti registrati',
+'rcshowhideanons'                   => '$1 gli utenti anonimi',
+'rcshowhidepatr'                    => '$1 le modifiche controllate',
+'rcshowhidemine'                    => '$1 le mie modifiche',
+'rclinks'                           => 'Mostra le $1 modifiche più recenti apportate negli ultimi $2 giorni<br />$3',
+'diff'                              => 'diff',
+'hist'                              => 'cron',
+'hide'                              => 'nascondi',
+'show'                              => 'mostra',
+'minoreditletter'                   => 'm',
+'newpageletter'                     => 'N',
+'boteditletter'                     => 'b',
+'sectionlink'                       => '→',
+'number_of_watching_users_pageview' => '[osservata da $1 utenti]',
+'rc_categories'                     => 'Limita alle categorie (separate da "|")',
+'rc_categories_any'                 => 'Qualsiasi',
+
+# Recent changes linked
+'recentchangeslinked'          => 'Modifiche correlate',
+'recentchangeslinked-noresult' => 'Nessuna modifica alle pagine collegate nel periodo specificato.',
+'recentchangeslinked-summary'  => "Questa pagina speciale mostra le modifiche più recenti alle pagine collegate a quella specificata. Le pagine osservate sono evidenziate in '''grassetto'''.",
+
+# Upload
+'upload'                      => 'Carica un file',
+'uploadbtn'                   => 'Carica',
+'reupload'                    => 'Carica di nuovo',
+'reuploaddesc'                => 'Torna al modulo per il caricamento.',
+'uploadnologin'               => 'Accesso non effettuato',
+'uploadnologintext'           => "Il caricamento dei file è consentito solo agli utenti registrati che hanno eseguito [[Special:Userlogin|l'accesso]] al sito.",
+'upload_directory_read_only'  => 'Il server web non è in grado di scrivere nella directory di upload ($1).',
+'uploaderror'                 => 'Errore nel caricamento',
+'uploadtext'                  => "Usare il modulo sottostante per caricare nuovi file. Per visualizzare o ricercare i file già caricati, consultare il [[Special:Imagelist|log dei file caricati]]. Caricamenti e cancellazioni di file sono registrati nel [[Special:Log/upload|log degli upload]].
+
+Per inserire un'immagine in una pagina, fare un collegamento di questo tipo:
+* '''<nowiki>[[</nowiki>{{ns:Image}}<nowiki>:File.png]]</nowiki>'''
+* '''<nowiki>[[</nowiki>{{ns:Image}}<nowiki>:File.png|testo alternativo]]</nowiki>'''
+usare invece
+* '''<nowiki>[[</nowiki>{{ns:Media}}<nowiki>:File.ogg]]</nowiki>'''
+per collegare direttamente gli altri tipi di file.",
+'uploadlog'                   => 'File caricati',
+'uploadlogpage'               => 'Log dei file caricati',
+'uploadlogpagetext'           => 'Elenco degli ultimi file caricati sul server di {{SITENAME}}.',
+'filename'                    => 'Nome del file',
+'filedesc'                    => 'Dettagli',
+'fileuploadsummary'           => 'Dettagli del file:',
+'filestatus'                  => 'Informazioni sul copyright',
+'filesource'                  => 'Fonte',
+'uploadedfiles'               => 'Elenco dei file caricati',
+'ignorewarning'               => "Ignora l'avvertimento e salva comunque il file.",
+'ignorewarnings'              => 'Ignora i messaggi di avvertimento del sistema',
+'minlength'                   => 'I nomi dei file devono essere lunghi almeno tre caratteri.',
+'illegalfilename'             => 'Il nome "$1" contiene dei caratteri non ammessi nei titoli delle pagine. Dare al file un nome diverso e provare a caricarlo di nuovo.',
+'badfilename'                 => 'Il nome del file è stato convertito in "$1".',
+'filetype-badmime'            => 'Non è consentito caricare file di tipo MIME "$1".',
+'filetype-badtype'            => "Non è consentito caricare file di tipo '''\".\$1\"'''
+: Elenco dei tipi di file consentiti: \$2",
+'filetype-missing'            => 'Il file è privo di estensione (ad es. ".jpg").',
+'large-file'                  => 'Si raccomanda di non superare le dimensioni di $1 per ciascun file; questo file è grande $2.',
+'largefileserver'             => 'Il file supera le dimensioni consentite dalla configurazione del server.',
+'emptyfile'                   => 'Il file appena caricato sembra essere vuoto. Ciò potrebbe essere dovuto ad un errore nel nome del file. Verificare che si intenda realmente caricare questo file.',
+'fileexists'                  => 'Un file con questo nome esiste già. Verificare prima $1 se non si è sicuri di volerlo sovrascrivere.',
+'fileexists-forbidden'        => 'Un file con questo nome esiste già. Tornare indietro e modificare il nome con il quale caricare il file. [[Image:$1|thumb|center|$1]]',
+'fileexists-shared-forbidden' => "Un file con questo nome esiste già nell'archivio di risorse multimediali condivise. Tornare indietro e modificare il nome con il quale caricare il file. [[Image:$1|thumb|center|$1]]",
+'successfulupload'            => 'Caricamento completato',
+'fileuploaded'                => "Il file $1 è stato caricato correttamente sul server.
+Seguire il collegamento: $2 per modificare la pagina di descrizione del file appena caricato, indicandone la fonte, l'autore, la data di creazione e ogni altra informazione di cui si sia in possesso. Se si tratta di un'immagine, la si può inserire nelle pagine con il comando: <tt><nowiki>[[</nowiki>{{ns:Image}}<nowiki>:$1|thumb|Descrizione]]</nowiki></tt>.",
+'uploadwarning'               => 'Avviso di Upload',
+'savefile'                    => 'Salva file',
+'uploadedimage'               => 'ha caricato "[[$1]]"',
+'uploaddisabled'              => 'Upload non attivo',
+'uploaddisabledtext'          => 'Il caricamento dei file non è attivo su questo sito.',
+'uploadscripted'              => 'Questo file contiene codice HTML o di script, che potrebbe essere interpretato erroneamente da un browser web.',
+'uploadcorrupt'               => "Il file è corrotto o ha un'estensione non corretta. Controllare il file e provare di nuovo il caricamento.",
+'uploadvirus'                 => 'Questo file contiene un virus! Dettagli: $1',
+'sourcefilename'              => 'Nome del file di origine',
+'destfilename'                => 'Nome del file di destinazione',
+'watchthisupload'             => 'Aggiungi agli osservati speciali',
+'filewasdeleted'              => 'Un file con questo nome è stato già caricato e cancellato in passato. Verificare $1 prima di caricarlo di nuovo.',
+
+'upload-proto-error'      => 'Protocollo errato',
+'upload-proto-error-text' => "Per l'upload remoto è necessario specificare URL che iniziano con <code>http://</code> oppure <code>ftp://</code>.",
+'upload-file-error'       => 'Errore interno',
+'upload-file-error-text'  => 'Si è verificato un errore interno durante la creazione di un file temporaneo sul server. Contattare un amministratore di sistema.',
+'upload-misc-error'       => "Errore non identificato per l'upload",
+'upload-misc-error-text'  => 'Si è verificato un errore non identificato durante il caricamento del file. Verificare che la URL sia corretta e accessibile e provare di nuovo. Se il problema persiste, contattare un amministratore di sistema.',
+
+# Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
+'upload-curl-error6'       => 'URL non raggiungibile',
+'upload-curl-error6-text'  => 'Impossibile raggiungere la URL specificata. Verificare che la URL sia scritta correttamente e che il sito in questione sia attivo.',
+'upload-curl-error28'      => "Tempo scaduto per l'upload",
+'upload-curl-error28-text' => 'Il sito remoto ha impiegato troppo tempo a rispondere. Verificare che il sito sia attivo, attendere qualche minuto e provare di nuovo, eventualmente in un momento di minore traffico.',
+
+'license'            => "Licenza d'uso",
+'nolicense'          => 'Nessuna licenza indicata',
+'upload_source_url'  => ' (una URL corretta e accessibile)',
+'upload_source_file' => ' (un file sul proprio computer)',
+
+# Image list
+'imagelist'                 => 'Elenco dei file',
+'imagelisttext'             => "Di seguito viene presentata una lista di '''$1''' file ordinati per $2.",
+'imagelistforuser'          => "L'elenco mostra solo i file caricati da $1.",
+'getimagelist'              => 'caricamento elenco file',
+'ilsubmit'                  => 'Ricerca',
+'showlast'                  => 'Mostra gli ultimi $1 file ordinati per $2.',
+'byname'                    => 'nome',
+'bydate'                    => 'data',
+'bysize'                    => 'dimensione',
+'imgdelete'                 => 'canc',
+'imgdesc'                   => 'desc',
+'imgfile'                   => 'file',
+'imglegend'                 => 'Legenda: (desc) = visualizza e modifica la descrizione del file.',
+'imghistory'                => 'Cronologia del file',
+'revertimg'                 => 'ripr',
+'deleteimg'                 => 'canc',
+'deleteimgcompletely'       => 'canc',
+'imghistlegend'             => 'Legenda: (cur) = immagine corrente, (canc) = cancella questa vecchia versione, (ripr) = ripristina questa vecchia versione come versione attuale.
+<br /><i>Fare clic su una data per vedere tutte le immagini che sono state caricate in quella data </i>.',
+'imagelinks'                => "Collegamenti all'immagine",
+'linkstoimage'              => "Pagine che contengono collegamenti all'immagine:",
+'nolinkstoimage'            => "Nessuna pagina contiene collegamenti all'immagine.",
+'sharedupload'              => 'Questo file è un upload condiviso; può essere quindi utilizzato da più progetti wiki.',
+'shareduploadwiki'          => 'Si veda $1 per ulteriori informazioni.',
+'shareduploadwiki-linktext' => 'la relativa pagina di descrizione',
+'noimage'                   => 'Un file con questo nome non esiste; $1?',
+'noimage-linktext'          => 'caricarlo ora',
+'uploadnewversion-linktext' => 'Carica una nuova versione di questo file',
+'imagelist_date'            => 'Data',
+'imagelist_name'            => 'Nome',
+'imagelist_user'            => 'Utente',
+'imagelist_size'            => 'Dimensione in byte',
+'imagelist_description'     => 'Description',
+'imagelist_search_for'      => 'Ricerca immagini per nome:',
+
+# MIME search
+'mimesearch'         => 'Ricerca in base al tipo MIME',
+'mimesearch-summary' => 'Questa pagina consente di filtrare i file in base al tipo MIME. Inserire la stringa di ricerca nella forma tipo/sottotipo, ad es. <tt>image/jpeg</tt>.',
+'mimetype'           => 'Tipo MIME:',
+'download'           => 'download',
+
+# Unwatched pages
+'unwatchedpages' => 'Pagine non osservate',
+
+# List redirects
+'listredirects' => 'Elenco dei redirect',
+
+# Unused templates
+'unusedtemplates'     => 'Template non utilizzati',
+'unusedtemplatestext' => 'In questa pagina vengono elencati tutti i template (pagine del namespace Template) che non sono inclusi in nessuna pagina. Prima di cancellarli è opportuno verificare che i singoli template non abbiano altri collegamenti entranti.',
+'unusedtemplateswlh'  => 'altri collegamenti',
+
+# Random redirect
+'randomredirect' => 'Un redirect a caso',
+
+# Statistics
+'statistics'             => 'Statistiche',
+'sitestats'              => 'Statistiche relative a {{SITENAME}}',
+'userstats'              => 'Statistiche relative agli utenti',
+'sitestatstext'          => "Il database contiene complessivamente '''\$1''' {{PLURAL:\$1|pagina|pagine}}.
+Questa cifra comprende anche le pagine di discussione, quelle di servizio di {{SITENAME}}, le voci più esigue (\"stub\"), i redirect e altre pagine che probabilmente non vanno considerate tra i contenuti del sito. Escludendo le pagine sopra descritte, ve ne sono '''\$2''' di contenuti veri e propri.
+
+{{PLURAL:\$8|È stato inoltre caricato|Sono stati inoltre caricati}} '''\$8''' file.
+
+Dall'installazione del sito sino a questo momento {{PLURAL:\$3|è stata visitata '''1''' pagina|sono state visitate '''\$3''' pagine}} ed {{PLURAL:\$4|eseguita '''1''' modifica|eseguite '''\$4''' modifiche}}, pari a una media di '''\$5''' modifiche per pagina e '''\$6''' richieste di lettura per ciascuna modifica.
+
+La coda dei processi da eseguire in background contiene {{PLURAL:\$7|'''1''' elemento|'''\$7''' elementi}}.",
+'userstatstext'          => "In questo momento {{PLURAL:$1|è registrato '''1''' utente|sono registrati '''$1''' utenti}}. Il gruppo $5 è composto da '''$2''' {{PLURAL:$2|utente|utenti}}, pari al '''$4%''' dei registrati.",
+'statistics-mostpopular' => 'Pagine più visitate',
+
+'disambiguations'      => 'Pagine di disambiguazione',
+'disambiguationspage'  => 'Template:Disambigua',
+'disambiguations-text' => "Le pagine nella lista che segue contengono dei collegamenti a '''pagine di disambiguazione''' e non all'argomento cui dovrebbero fare riferimento.<br />Vengono considerate pagine di disambiguazione tutte quelle che contengono i template elencati in [[MediaWiki:disambiguationspage]]",
+
+'doubleredirects'     => 'Redirect doppi',
+'doubleredirectstext' => '<b>Attenzione:</b> Questa lista può contenere risultati errati, ad esempio nel caso in cui il comando #REDIRECT sia seguito da altro testo o collegamenti.<br />
+Ciascuna riga contiene i collegamenti al primo ed al secondo redirect, oltre alla prima riga di testo del secondo redirect che di solito contiene la pagina di destinazione "corretta" alla quale dovrebbe puntare anche il primo redirect.',
+
+'brokenredirects'        => 'Redirect errati',
+'brokenredirectstext'    => 'I seguenti redirect puntano a pagine inesistenti:',
+'brokenredirects-edit'   => '(modifica)',
+'brokenredirects-delete' => '(cancella)',
+
+# Miscellaneous special pages
+'nbytes'                  => '$1 byte',
+'ncategories'             => '$1 {{PLURAL:$1|categoria|categorie}}',
+'nlinks'                  => '$1 {{PLURAL:$1|collegamento|collegamenti}}',
+'nmembers'                => '$1 {{PLURAL:$1|elemento|elementi}}',
+'nrevisions'              => '$1 {{PLURAL:$1|revisione|revisioni}}',
+'nviews'                  => '$1 {{PLURAL:$1|visita|visite}}',
+'specialpage-empty'       => 'Pagina vuota.',
+'lonelypages'             => 'Pagine orfane',
+'lonelypagestext'         => 'Le pagine indicate di seguito sono prive di collegamenti che provengono da altre pagine del sito.',
+'uncategorizedpages'      => 'Pagine prive di categorie',
+'uncategorizedcategories' => 'Categorie prive di categorie',
+'uncategorizedimages'     => 'Immagini prive di categorie',
+'unusedcategories'        => 'Categorie non utilizzate',
+'unusedimages'            => 'File non utilizzati',
+'popularpages'            => 'Pagine più visitate',
+'wantedcategories'        => 'Categorie richieste',
+'wantedpages'             => 'Pagine più richieste',
+'mostlinked'              => 'Pagine più richiamate',
+'mostlinkedcategories'    => 'Categorie più richiamate',
+'mostcategories'          => 'Voci con più categorie',
+'mostimages'              => 'Immagini più richiamate',
+'mostrevisions'           => 'Voci con più revisioni',
+'allpages'                => 'Tutte le pagine',
+'prefixindex'             => 'Indice delle voci per lettere iniziali',
+'randompage'              => 'Una pagina a caso',
+'shortpages'              => 'Pagine più corte',
+'longpages'               => 'Pagine più lunghe',
+'deadendpages'            => 'Pagine senza uscita',
+'deadendpagestext'        => 'Le pagine indicate di seguito sono prive di collegamenti verso altre pagine del sito.',
+'protectedpages'          => 'Pagine protette',
+'protectedpagestext'      => 'Di seguito viene presentato un elenco di pagine protette, di cui è impedita la modifica o lo spostamento',
+'protectedpagesempty'     => 'Al momento non vi sono pagine protette',
+'listusers'               => 'Elenco degli utenti',
+'specialpages'            => 'Pagine speciali',
+'spheading'               => 'Pagine speciali non riservate',
+'restrictedpheading'      => 'Pagine speciali riservate',
+'rclsub'                  => '(alle pagine collegate a "$1")',
+'newpages'                => 'Pagine più recenti',
+'newpages-username'       => 'Nome utente:',
+'ancientpages'            => 'Pagine meno recenti',
+'intl'                    => 'Collegamenti tra lingue diverse',
+'move'                    => 'Sposta',
+'movethispage'            => 'Sposta questa pagina',
+'unusedimagestext'        => "<p>Si noti che è possibile realizzare collegamenti ai file da altri siti, usando direttamente la URL; questi potrebbero quindi essere utilizzati anche se compaiono nell'elenco.</p>",
+'unusedcategoriestext'    => 'Le pagine delle categorie indicate di seguito sono state create ma non contengono nessuna pagina né sottocategoria.',
+
+# Book sources
+'booksources'               => 'Fonti librarie',
+'booksources-search-legend' => 'Ricerca di fonti librarie',
+'booksources-isbn'          => 'Codice ISBN:',
+'booksources-go'            => 'Vai',
+'booksources-text'          => 'Di seguito viene presentato un elenco di collegamenti verso siti esterni che vendono libri nuovi e usati, attraverso i quali è possibile ottenere maggiori informazioni sul testo cercato.',
+
+'categoriespagetext' => 'Elenco completo delle categorie presenti sul sito.',
+'data'               => 'Dati',
+'userrights'         => 'Gestione dei permessi relativi agli utenti',
+'groups'             => 'Gruppi di utenti',
+'isbn'               => 'ISBN',
+'alphaindexline'     => 'da $1 a $2',
+'version'            => 'Versione',
+
+# Special:Logs
+'log'                  => 'Log',
+'alllogstext'          => 'Presentazione unificata dei log relativi alle operazioni di caricamento, cancellazione, protezione, blocco e amministrazione del sito. Riempiendo gli appositi campi si può limitare la visualizzazione a uno specifico log, nome utente o pagina.',
+'logempty'             => 'Il log non contiene elementi corrispondenti alla ricerca.',
+'specialloguserlabel'  => 'Utente:',
+'speciallogtitlelabel' => 'Titolo:',
+
+# Special:Allpages
+'nextpage'          => 'Pagina successiva ($1)',
+'prevpage'          => 'Pagina precedente ($1)',
+'allpagesfrom'      => 'Mostra le pagine a partire da:',
+'allarticles'       => 'Tutte le voci',
+'allinnamespace'    => 'Tutte le pagine del namespace $1',
+'allnotinnamespace' => 'Tutte le pagine, escluso il namespace $1',
+'allpagesprev'      => 'Precedenti',
+'allpagesnext'      => 'Successive',
+'allpagessubmit'    => 'Vai',
+'allpagesprefix'    => 'Mostra le pagine che iniziano con:',
+'allpagesbadtitle'  => 'Il titolo indicato per la pagina non è valido o contiene prefissi interlingua o interwiki. Potrebbe inoltre contenere uno o più caratteri il cui uso non è ammesso nei titoli.',
+
+# Special:Listusers
+'listusersfrom'      => 'Mostra gli utenti a partire da:',
+'listusers-submit'   => 'Mostra',
+'listusers-noresult' => 'Nessun utente risponde ai criteri impostati.',
+
+# E-mail user
+'mailnologin'     => 'Nessun indirizzo cui inviare il messaggio',
+'mailnologintext' => 'Per inviare messaggi e-mail ad altri utenti è necessario [[Special:Userlogin|accedere al sito]] e aver registrato un indirizzo valido nelle proprie [[Special:Preferences|preferenze]].',
+'emailuser'       => "Scrivi all'utente",
+'emailpage'       => "Invia un messaggio e-mail all'utente",
+'emailpagetext'   => "Se l'utente ha registrato un indirizzo e-mail valido nelle proprie preferenze, il modulo qui sotto consente di scrivere allo stesso un solo messaggio. L'indirizzo indicato nelle preferenze del mittente apparirà nel campo \"Da:\" del messaggio per consentire al destinatario l'eventuale risposta.",
+'usermailererror' => "L'oggetto mail ha restituito l'errore:",
+'defemailsubject' => 'Messaggio da {{SITENAME}}',
+'noemailtitle'    => 'Nessun indirizzo e-mail',
+'noemailtext'     => 'Questo utente non ha indicato un indirizzo e-mail valido, oppure ha scelto di non ricevere messaggi di posta elettronica dagli altri utenti.',
+'emailfrom'       => 'Da',
+'emailto'         => 'A',
+'emailsubject'    => 'Oggetto',
+'emailmessage'    => 'Messaggio',
+'emailsend'       => 'Invia',
+'emailccme'       => 'Invia in copia al mio indirizzo.',
+'emailccsubject'  => 'Copia del messaggio inviato a $1: $2',
+'emailsent'       => 'Messaggio inviato',
+'emailsenttext'   => 'Il messaggio e-mail è stato inviato.',
+
+# Watchlist
+'watchlist'            => 'Osservati speciali',
+'mywatchlist'            => 'Osservati speciali',
+'watchlistfor'         => "(per '''$1''')",
+'nowatchlist'          => 'La lista degli osservati speciali è vuota.',
+'watchlistanontext'    => "Per visualizzare e modificare l'elenco degli osservati speciali è necessario $1.",
+'watchlistcount'       => "'''La lista degli osservati speciali contiene {{PLURAL:$1|una pagina|$1 pagine}} (e le rispettive pagine di discussione).'''",
+'clearwatchlist'       => 'Svuota la lista degli osservati speciali',
+'watchlistcleartext'   => 'Conferma la rimozione di tutti gli elementi.',
+'watchlistclearbutton' => 'Svuota la lista',
+'watchlistcleardone'   => 'La lista degli osservati speciali è stata svuotata. {{PLURAL:$1|È stato eliminato 1 elemento|Sono stati eliminati $1 elementi}}.',
+'watchnologin'         => 'Accesso non effettuato',
+'watchnologintext'     => "Per modificare la lista degli osservati speciali è necessario prima eseguire l'[[Special:Userlogin|accesso al sito]].",
+'addedwatch'           => 'Pagina aggiunta alla lista degli osservati speciali',
+'addedwatchtext'       => "La pagina  \"[[:\$1]]\" è stata aggiunta alla propria [[Special:Watchlist|lista degli osservati speciali]]. D'ora in poi, le modifiche apportate alla pagina e alla sua discussione verranno elencate in quella sede; il titolo della pagina apparirà in '''grassetto''' nella pagina delle [[Special:Recentchanges|ultime modifiche]] per renderlo più visibile.
+
+Se in un secondo tempo si desidera eliminare la pagina dalla lista degli osservati speciali, fare clic su \"non seguire\" nella barra in alto.",
+'removedwatch'         => 'Pagina eliminata dalla lista degli osservati speciali',
+'removedwatchtext'     => 'La pagina  "[[:$1]]" è stata eliminata dalla lista degli osservati speciali.',
+'watch'                => 'Segui',
+'watchthispage'        => 'Segui questa pagina',
+'unwatch'              => 'Non seguire',
+'unwatchthispage'      => 'Smetti di seguire',
+'notanarticle'         => 'Questa pagina non è una voce',
+'watchnochange'        => 'Nessuna delle pagine osservate è stata modificata nel periodo considerato.',
+'watchdetails'         => '* La lista degli osservati speciali contiene {{PLURAL:$1|una pagina (e la rispettiva pagina di discussione)|$1 pagine (e le rispettive pagine di discussione)}}.
+* [[Special:Watchlist/edit|Mostra e modifica la lista completa]] delle pagine osservate.
+* [[Special:Watchlist/clear|Svuota la lista]] delle pagine osservate.',
+'wlheader-enotif'      => '* La notifica via e-mail è attiva.',
+'wlheader-showupdated' => "* Le pagine che sono state modificate dopo l'ultima visita sono evidenziate in '''grassetto'''",
+'watchmethod-recent'   => 'controllo delle modifiche recenti per gli osservati speciali',
+'watchmethod-list'     => 'controllo degli osservati speciali per modifiche recenti',
+'removechecked'        => 'Elimina elementi selezionati dalla lista',
+'watchlistcontains'    => 'La lista degli osservati speciali contiene {{PLURAL:$1|una pagina|$1 pagine}}.',
+'watcheditlist'        => "Di seguito sono elencate tutte le pagine osservate, in ordine alfabetico. Selezionare le caselle relative alle pagine che si desidera eliminare dalla lista e fare clic sul pulsante 'Elimina elementi selezionati dalla lista' in fondo all'elenco per rimuoverle. Quando viene eliminata una pagina dalla lista, anche la corrispondente pagina di discussione cessa di essere osservata (e viceversa).",
+'removingchecked'      => 'Eliminazione degli elementi richiesti dalla lista degli osservati speciali...',
+'couldntremove'        => "Non è possibile rimuovere la pagina '$1'...",
+'iteminvalidname'      => "Problemi con la pagina '$1', nome non valido...",
+'wlnote'               => "Di seguito {{PLURAL:$1|è elencata la modifica più recente apportata|sono elencate le '''$1''' modifiche più recenti apportate}} {{PLURAL:$2|nella scorsa ora|nelle scorse '''$2''' ore}}.",
+'wlshowlast'           => 'Mostra le ultime $1 ore $2 giorni $3',
+'wlsaved'              => 'Questa è una versione salvata della lista personale delle pagine osservate.',
+'watchlist-show-bots'  => 'Mostra le modifiche dei bot',
+'watchlist-hide-bots'  => 'Nascondi le modifiche dei bot',
+'watchlist-show-own'   => 'Mostra le mie modifiche',
+'watchlist-hide-own'   => 'Nascondi le mie modifiche',
+'watchlist-show-minor' => 'Mostra le modifiche minori',
+'watchlist-hide-minor' => 'Nascondi le modifiche minori',
+'wldone'               => 'Fatto.',
+
+# Displayed when you click the "watch" button and it's in the process of watching
+'watching'   => 'Aggiunta agli osservati speciali...',
+'unwatching' => 'Eliminazione dagli osservati speciali...',
+
+'enotif_mailer'      => 'Sistema di notifica via e-mail di {{SITENAME}}',
+'enotif_reset'       => 'Segna tutte le pagine come già visitate',
+'enotif_newpagetext' => 'Questa è una nuova pagina.',
+'changed'            => 'modificata',
+'created'            => 'creata',
+'enotif_subject'     => 'La pagina $PAGETITLE di {{SITENAME}} è stata $CHANGEDORCREATED da $PAGEEDITOR',
+'enotif_lastvisited' => 'Consulta $1 per vedere tutte le modifiche dalla tua ultima visita.',
+'enotif_body'        => 'Gentile $WATCHINGUSERNAME,
+
+la pagina $PAGETITLE di {{SITENAME}} è stata $CHANGEDORCREATED in data $PAGEEDITDATE da $PAGEEDITOR; la versione attuale si trova all\'indirizzo $PAGETITLE_URL.
+
+$NEWPAGE
+
+Riassunto della modifica, inserito dall\'autore: $PAGESUMMARY $PAGEMINOREDIT
+
+Contatta l\'autore della modifica:
+via e-mail: $PAGEEDITOR_EMAIL
+sul sito: $PAGEEDITOR_WIKI
+
+Non verranno inviate altre notifiche in caso di ulteriori cambiamenti, a meno che tu non visiti la pagina. Inoltre, è possibile reimpostare l\'avviso di notifica per tutte le pagine nella lista degli osservati speciali.
+
+             Il sistema di notifica di {{SITENAME}}, al tuo servizio
+
+--
+Per modificare le impostazioni della lista degli osservati speciali, visita
+{{fullurl:Special:Watchlist/edit}}
+
+Per dare il tuo feedback e ricevere ulteriore assistenza:
+{{fullurl:Help:Aiuto}}',
+
+# Delete/protect/revert
+'deletepage'                  => 'Cancella pagina',
+'confirm'                     => 'Conferma',
+'excontent'                   => "il contenuto era: '$1'",
+'excontentauthor'             => "il contenuto era: '$1' (e l'unico contributore era '$2')",
+'exbeforeblank'               => "Il contenuto prima dello svuotamento era: '$1'",
+'exblank'                     => 'la pagina era vuota',
+'confirmdelete'               => 'Conferma cancellazione',
+'deletesub'                   => '(Cancellazione di "$1")',
+'historywarning'              => 'Attenzione: La pagina che si sta per cancellare ha una cronologia:',
+'confirmdeletetext'           => 'Stai per cancellare permanentemente dal database una pagina o una immagine, insieme a tutta la sua cronologia. Per cortesia, conferma che è tua intenzione procedere a tale cancellazione, che hai piena consapevolezza delle conseguenze della tua azione e che essa è conforme alle linee guida stabilite in [[{{MediaWiki:policy-url}}]].',
+'actioncomplete'              => 'Azione completata',
+'deletedtext'                 => 'La pagina "$1" è stata cancellata. Consultare il $2 per un elenco delle pagine cancellate di recente.',
+'deletedarticle'              => 'ha cancellato "[[$1]]"',
+'dellogpage'                  => 'Cancellazioni',
+'dellogpagetext'              => 'Di seguito sono elencate le pagine cancellate di recente.',
+'deletionlog'                 => 'Log delle cancellazioni',
+'reverted'                    => 'Ripristinata la versione precedente',
+'deletecomment'               => 'Motivo della cancellazione',
+'imagereverted'               => 'Versione precedente ripristinata correttamente.',
+'rollback'                    => 'Annulla le modifiche',
+'rollback_short'              => 'Rollback',
+'rollbacklink'                => 'rollback',
+'rollbackfailed'              => 'Rollback non riuscito',
+'cantrollback'                => "Impossibile annullare le modifiche; l'utente che le ha effettuate è l'unico ad aver contribuito alla pagina.",
+'alreadyrolled'               => 'Non è possibile annullare le modifiche apportate alla pagina [[:$1]] da parte di [[User:$2|$2]] ([[User talk:$2|discussione]]); un altro utente ha già modificato la pagina oppure ha effettuato il rollback. 
+
+La modifica più recente alla pagina è stata apportata da [[User:$3|$3]] ([[User talk:$3|discussione]]).',
+'editcomment'                 => 'Il commento alla modifica era: "<i>$1</i>".', # only shown if there is an edit comment
+'revertpage'                  => 'Annullate le modifiche di [[Special:Contributions/$2|$2]] ([[User talk:$2|discussione]]), riportata alla versione precedente di [[User:$1|$1]]',
+'sessionfailure'              => "Si è verificato un problema nella sessione che identifica l'accesso; il sistema non ha eseguito il comando impartito per precauzione. Tornare alla pagina precedente con il tasto 'Indietro' del proprio browser, ricaricare la pagina e riprovare.",
+'protectlogpage'              => 'Protezioni',
+'protectlogtext'              => 'Di seguito sono elencate le azioni di protezione e sblocco delle pagine.',
+'protectedarticle'            => 'ha protetto "[[$1]]"',
+'unprotectedarticle'          => 'ha sbloccato "[[$1]]"',
+'protectsub'                  => '(Protezione di "$1")',
+'confirmprotecttext'          => 'Proteggere questa pagina?',
+'confirmprotect'              => 'Conferma la protezione',
+'protectmoveonly'             => 'Proteggi solo dallo spostamento',
+'protectcomment'              => 'Motivo della protezione',
+'protectexpiry'               => 'Scadenza',
+'protect_expiry_invalid'      => 'Scadenza non valida.',
+'protect_expiry_old'          => 'Scadenza già trascorsa.',
+'unprotectsub'                => '(Sblocco di "$1")',
+'confirmunprotecttext'        => 'Sbloccare questa pagina?',
+'confirmunprotect'            => 'Conferma lo sblocco',
+'unprotectcomment'            => 'Motivo dello sblocco',
+'protect-unchain'             => 'Scollega i permessi di spostamento',
+'protect-text'                => 'Questo modulo consente di vedere e modificare il livello di protezione per la pagina <strong>$1</strong>.',
+'protect-viewtext'            => 'Questo account non ha le autorizzazioni necessarie per modificare il livello di protezione della pagina. Le impostazioni attuali per la pagina <strong>$1</strong> sono:',
+'protect-cascadeon'           => 'Al momento questa pagina è bloccata perché viene inclusa nelle pagine indicate di seguito, per le quali è attivata la protezione ricorsiva. È possibile modificare il livello di protezione individuale della pagina, ma le impostazioni derivanti dalla protezione ricorsiva non saranno modificate.',
+'protect-default'             => '(predefinito)',
+'protect-level-autoconfirmed' => 'Solo utenti registrati',
+'protect-level-sysop'         => 'Solo amministratori',
+'protect-summary-cascade'     => 'ricorsiva',
+'protect-expiring'            => 'scadenza: $1 (UTC)',
+'protect-cascade'             => 'Protezione ricorsiva (estende la protezione a tutte le pagine incluse in questa).',
+
+# Restrictions (nouns)
+'restriction-edit' => 'Modifica',
+'restriction-move' => 'Spostamento',
+
+# Restriction levels
+'restriction-level-sysop'         => 'protetta',
+'restriction-level-autoconfirmed' => 'semi-protetta',
+
+# Undelete
+'undelete'                 => 'Visualizza pagine cancellate',
+'undeletepage'             => 'Visualizza e recupera le pagine cancellate',
+'viewdeletedpage'          => 'Visualizza le pagine cancellate',
+'undeletepagetext'         => "Le pagine indicate di seguito sono state cancellate, ma sono ancora in archivio e pertanto possono essere recuperate. L'archivio può essere svuotato periodicamente.",
+'undeleteextrahelp'        => "Per recuperare l'intera pagina, lasciare tutte le caselle deselezionate e fare clic su '''''Ripristina'''''. Per effettuare un ripristino selettivo, selezionare le caselle corrispondenti alle revisioni da ripristinare e fare clic su '''''Ripristina'''''. Facendo clic su '''''Reset''''' verranno deselezionate tutte le caselle e svuotato lo spazio per il commento.",
+'undeleterevisions'        => '$1 revisioni in archivio',
+'undeletehistory'          => 'Recuperando questa pagina, tutte le sue revisioni verranno inserite di nuovo nella relativa cronologia. Se dopo la cancellazione è stata creata una nuova pagina con lo stesso titolo, le revisioni recuperate saranno inserite nella cronologia e la versione attualmente online della pagina non verrà modificata.',
+'undeletehistorynoadmin'   => 'La pagina è stata cancellata. Il motivo della cancellazione è indicato di seguito, assieme ai dati degli utenti che avevano modificato la pagina prima della cancellazione. Il testo contenuto nelle revisioni cancellate è disponibile solo agli amministratori.',
+'undelete-revision'        => 'Revisione cancellata della pagina $1, inserita il $2',
+'undeleterevision-missing' => "Revisione errata o mancante. Il collegamento è errato oppure la revisione è stata già ripristinata o eliminata dall'archivio.",
+'undeletebtn'              => 'Ripristina',
+'undeletereset'            => 'Reset',
+'undeletecomment'          => 'Commento:',
+'undeletedarticle'         => 'ha recuperato "[[$1]]"',
+'undeletedrevisions'       => '$1 revisioni recuperate',
+'undeletedrevisions-files' => '$1 revisioni e $2 file recuperati',
+'undeletedfiles'           => '$1 file recuperati',
+'cannotundelete'           => 'Ripristino non riuscito; è possibile che la pagina sia già stata recuperata da un altro utente.',
+'undeletedpage'            => "<big>'''$1 è stata recuperata'''</big>
+
+Consultare il [[Special:Log/delete|log delle cancellazioni]] per vedere le cancellazioni e i recuperi più recenti.",
+'undelete-header'          => 'Consultare il [[Special:Log/delete|log delle cancellazioni]] per vedere le cancellazioni più recenti.',
+'undelete-search-box'      => 'Ricerca nelle pagine cancellate',
+'undelete-search-prefix'   => 'Mostra le pagine il cui titolo inizia con:',
+'undelete-search-submit'   => 'Cerca',
+'undelete-no-results'      => "Nessuna pagina corrispondente nell'archivio dele cancellazioni.",
+
+# Namespace form on various pages
+'namespace' => 'Namespace:',
+'invert'    => 'inverti la selezione',
+
+# Contributions
+'contributions' => 'Contributi utente',
+'mycontris'     => 'Miei contributi',
+'contribsub2'    => 'Per $1 ($2)',
+'nocontribs'    => 'Non sono state trovate modifiche che soddisfino i criteri di ricerca.',
+'ucnote'        => "Di seguito sono elencate le <b>$1</b> modifiche più recenti effettuate dall'utente negli ultimi <b>$2</b> giorni.",
+'uclinks'       => 'Mostra le ultime $1 modifiche; mostra gli ultimi $2 giorni.',
+'uctop'         => ' (ultima per la pagina)',
+
+'sp-contributions-newest'      => 'Ultimi',
+'sp-contributions-oldest'      => 'Primi',
+'sp-contributions-newer'       => '$1 più recenti',
+'sp-contributions-older'       => '$1 meno recenti',
+'sp-contributions-newbies'     => 'Mostra solo i contributi dei nuovi utenti',
+'sp-contributions-newbies-sub' => 'Per i nuovi utenti',
+'sp-contributions-blocklog'    => 'Blocchi',
+'sp-contributions-search'      => 'Ricerca contributi',
+'sp-contributions-username'    => 'Indirizzo IP o nome utente:',
+'sp-contributions-submit'      => 'Ricerca',
+
+'sp-newimages-showfrom' => 'Mostra le immagini più recenti a partire da $1',
+
+# What links here
+'whatlinkshere' => 'Puntano qui',
+'notargettitle' => 'Dati mancanti',
+'notargettext'  => "Non è stata indicata una pagina o un utente in relazione al quale eseguire l'operazione richiesta.",
+'linklistsub'   => '(Lista dei collegamenti)',
+'linkshere'     => "Le seguenti pagine contengono dei collegamenti a '''[[:$1]]''':",
+'nolinkshere'   => "Nessuna pagina contiene collegamenti che puntano a '''[[:$1]]'''.",
+'isredirect'    => 'redirect',
+'istemplate'    => 'inclusione',
+
+# Block/unblock
+'blockip'                     => 'Blocco utente',
+'blockiptext'                 => "Usare il modulo sottostante per bloccare l'accesso in scrittura ad uno specifico utente o indirizzo IP. Il blocco dev'essere operato per prevenire atti di vandalismo e in stretta osservanza della [[{{MediaWiki:policy-url}}|policy di {{SITENAME}}]]. Specificare in dettaglio il motivo del blocco nel campo seguente (ad es. indicando i titoli delle pagine oggetto di vandalismo).",
+'ipaddress'                   => 'Indirizzo IP',
+'ipadressorusername'          => 'Indirizzo IP o nome utente',
+'ipbexpiry'                   => 'Scadenza del blocco',
+'ipbreason'                   => 'Motivo del blocco',
+'ipbanononly'                 => 'Blocca solo utenti anonimi',
+'ipbcreateaccount'            => 'Impedisci la creazione di altri account',
+'ipbenableautoblock'          => "Blocca automaticamente l'ultimo indirizzo IP usato dall'utente e i successivi con cui vengono  tentate modifiche",
+'ipbsubmit'                   => "Blocca l'utente",
+'ipbother'                    => 'Durata non in elenco',
+'ipboptions'                  => '2 ore:2 hours,1 giorno:1 day,3 giorni:3 days,1 settimana:1 week,2 settimane:2 weeks,1 mese:1 month,3 mesi:3 months,6 mesi:6 months,1 anno:1 year,infinito:infinite',
+'ipbotheroption'              => 'altro',
+'badipaddress'                => 'Indirizzo IP non valido.',
+'blockipsuccesssub'           => 'Blocco eseguito',
+'blockipsuccesstext'          => '[[Special:Contributions/$1|$1]] è stato bloccato.
+<br />Consultare la [[Special:Ipblocklist|lista degli IP bloccati]] per vedere i blocchi attivi.',
+'ipb-unblock-addr'            => 'Sblocca $1',
+'ipb-unblock'                 => 'Sblocca un utente o un indirizzo IP',
+'ipb-blocklist-addr'          => 'Elenca i blocchi attivi per $1',
+'ipb-blocklist'               => 'Elenca i blocchi attivi',
+'unblockip'                   => "Sblocca l'utente",
+'unblockiptext'               => "Usare il modulo sottostante per restituire l'accesso in scrittura ad un utente o indirizzo IP bloccato.",
+'ipusubmit'                   => "Sblocca l'utente",
+'unblocked'                   => "L'utente [[User:$1|$1]] è stato sbloccato",
+'ipblocklist'                 => 'Lista degli utenti e indirizzi IP bloccati',
+'ipblocklist-submit'          => 'Ricerca',
+'blocklistline'               => '$1, $2 ha bloccato $3 ($4)',
+'infiniteblock'               => 'senza scadenza',
+'expiringblock'               => 'fino al $1',
+'anononlyblock'               => 'solo anonimi',
+'noautoblockblock'            => 'senza blocco automatico',
+'createaccountblock'          => 'creazione account bloccata',
+'ipblocklistempty'            => 'La lista dei blocchi è vuota.',
+'blocklink'                   => 'blocca',
+'unblocklink'                 => 'sblocca',
+'contribslink'                => 'contributi',
+'autoblocker'                 => "Bloccato automaticamente perché l'indirizzo IP è condiviso con l'utente \"[[User:\$1|\$1]]\". Il blocco dell'utente \$1 è stato imposto per il seguente motivo: \"'''\$2'''\".",
+'blocklogpage'                => 'Blocchi',
+'blocklogentry'               => 'ha bloccato "[[$1]]"; scadenza $2 $3',
+'blocklogtext'                => "Questo è l'elenco delle azioni di blocco e sblocco utenti. Gli indirizzi IP bloccati automaticamente non sono elencati. Consultare l'[[Special:Ipblocklist|elenco IP bloccati]] per l'elenco degli indirizzi e nomi utente il cui blocco è operativo.",
+'unblocklogentry'             => 'ha sbloccato $1',
+'block-log-flags-anononly'    => 'solo utenti anonimi',
+'block-log-flags-nocreate'    => 'creazione account bloccata',
+'block-log-flags-autoblock'   => 'con blocco automatico',
+'range_block_disabled'        => 'La possibilità di bloccare intervalli di indirizzi IP non è attiva al momento.',
+'ipb_expiry_invalid'          => 'Durata o scadenza del blocco non valida.',
+'ipb_already_blocked'         => 'L\'utente "$1" è già bloccato',
+'ip_range_invalid'            => 'Intervallo di indirizzi IP non valido.',
+'proxyblocker'                => 'Blocco dei proxy aperti',
+'ipb_cant_unblock'            => 'Errore: Impossibile trovare il blocco con ID $1. Il blocco potrebbe essere già stato rimosso.',
+'proxyblockreason'            => 'Questo indirizzo IP è stato bloccato perché è risulta essere un proxy aperto. Si prega di contattare il proprio fornitore di accesso a Internet o il supporto tecnico e informarli di questo grave problema di sicurezza.',
+'proxyblocksuccess'           => 'Blocco eseguito.',
+'sorbs'                       => 'SORBS DNSBL',
+'sorbsreason'                 => 'Questo indirizzo IP è elencato come proxy aperto nella blacklist DNSBL di [http://www.sorbs.net SORBS].',
+'sorbs_create_account_reason' => 'Non è possibile creare nuovi accessi da questo indirizzo IP perché è elencato come proxy aperto nella blacklist DNSBL di [http://www.sorbs.net SORBS].',
+
+# Developer tools
+'lockdb'              => 'Blocca il database',
+'unlockdb'            => 'Sblocca il database',
+'lockdbtext'          => "Il blocco del database comporta l'interruzione, per tutti gli utenti, della possibilità di modificare le pagine o di crearne di nuove, di cambiare le preferenze e modificare le liste degli osservati speciali, e in generale di tutte le operazioni che richiedono modifiche al database. Per cortesia, conferma che ciò corrisponde effettivamente all'azione da te richiesta e che al termine della manutenzione provvederai allo sblocco del database.",
+'unlockdbtext'        => "Lo sblocco del database consente di nuovo a tutti gli utenti di modificare le pagine o di crearne di nuove, di cambiare le preferenze e modificare le liste degli osservati speciali, e in generale di compiere tutte le operazioni che richiedono modifiche al database. Per cortesia, conferma che ciò corrisponde effettivamente all'azione da te richiesta.",
+'lockconfirm'         => 'Sì, intendo effettivamente bloccare il database.',
+'unlockconfirm'       => 'Sì, intendo effettivamente sbloccare il database.',
+'lockbtn'             => 'Blocca il database',
+'unlockbtn'           => 'Sblocca il database',
+'locknoconfirm'       => 'Non è stata spuntata la casellina di conferma.',
+'lockdbsuccesssub'    => 'Blocco del database eseguito',
+'unlockdbsuccesssub'  => 'Sblocco del database eseguito',
+'lockdbsuccesstext'   => 'Il database è stato bloccato.
+<br />Ricorda di rimuovere il blocco dopo aver terminato le operazioni di manutenzione.',
+'unlockdbsuccesstext' => ' Il database è stato sbloccato.',
+'lockfilenotwritable' => "Impossibile scrivere sul file di ''lock'' del database. L'accesso in scrittura a tale file da parte del server web è necessario per bloccare e sbloccare il database.",
+'databasenotlocked'   => 'Il database non è bloccato.',
+
+# Move page
+'movepage'                => 'Spostamento di pagina',
+'movepagetext'            => "Questo modulo consente di rinominare una pagina, spostando tutta la sua cronologia al nuovo nome. La pagina attuale diverrà automaticamente un redirect al nuovo titolo. I collegamenti esistenti non saranno aggiornati; verificare che lo spostamento non abbia creato doppi redirect o redirect errati. L'onere di garantire che i collegamenti alla pagina restino corretti spetta a chi la sposta.
+
+Si noti che la pagina '''non''' sarà spostata se ne esiste già una con il nuovo nome, a meno che non sia vuota o costituita solo da un redirect alla vecchia e sia priva di versioni precedenti. In caso di spostamento errato si può quindi tornare subito al vecchio titolo, e non è possibile sovrascrivere per errore una pagina già esistente.
+
+<b>ATTENZIONE:</b>
+Un cambiamento così drastico può creare contrattempi e problemi, soprattutto per le pagine più visitate. Accertarsi di aver valutato le conseguenze dello spostamento prima di procedere.",
+'movepagetalktext'        => "La corrispondente pagina di discussione sarà spostata automaticamente insieme alla pagina principale, '''tranne che nei seguenti casi:'''
+* Lo spostamento della pagina è tra namespace diversi
+* In corrispondenza del nuovo titolo esiste già una pagina di discussione (non vuota)
+* La casella qui sotto è stata deselezionata.
+
+In questi casi, se lo si ritiene opportuno, occorre spostare o aggiungere manualmente le informazioni contenute nella pagina di discussione.",
+'movearticle'             => 'Sposta la pagina',
+'movenologin'             => 'Accesso non effettuato',
+'movenologintext'         => "Lo spostamento delle pagine è consentito solo agli utenti registrati che hanno eseguito l'[[Special:Userlogin|accesso]] al sito.",
+'newtitle'                => 'Nuovo titolo:',
+'move-watch'              => 'Aggiungi agli osservati speciali',
+'movepagebtn'             => 'Sposta la pagina',
+'pagemovedsub'            => 'Spostamento effettuato con successo',
+'pagemovedtext'           => 'La pagina "[[$1]]" è stata spostata al titolo "[[$2]]".',
+'articleexists'           => 'Una pagina con questo nome esiste già, oppure il nome scelto non è valido. Scegliere un altro titolo.',
+'talkexists'              => "'''La pagina è stata spostata correttamente, ma non è stato possibile spostare la pagina di discussione perché ne esiste già un'altra con il nuovo titolo. Integrare manualmente i contenuti delle due pagine.'''",
+'movedto'                 => 'spostata a',
+'movetalk'                => 'Sposta anche la pagina di discussione.',
+'talkpagemoved'           => 'Anche la rispettiva pagina di discussione è stata spostata.',
+'talkpagenotmoved'        => 'La rispettiva pagina di discussione <strong>non</strong> è stata spostata.',
+'1movedto2'               => 'ha spostato [[$1]] a [[$2]]',
+'1movedto2_redir'         => '[[$1]] spostata a [[$2]] tramite redirect',
+'movelogpage'             => 'Spostamenti',
+'movelogpagetext'         => "Questo è l'elenco delle pagine spostate.",
+'movereason'              => 'Motivo',
+'revertmove'              => 'ripristina',
+'delete_and_move'         => 'Cancella e sposta',
+'delete_and_move_text'    => '==Richiesta di cancellazione==
+
+La pagina di destinazione [[$1]] esiste già. Si desidera cancellarla per rendere possibile lo spostamento?',
+'delete_and_move_confirm' => 'Sì, sovrascrivi la pagina esistente',
+'delete_and_move_reason'  => 'Cancellata per rendere possibile lo spostamento',
+'selfmove'                => 'Il nuovo titolo è uguale al vecchio; impossibile spostare la pagina su se stessa.',
+'immobile_namespace'      => 'Il nuovo titolo corrisponde a una pagina speciale; impossibile spostare pagine in quel namespace.',
+
+# Export
+'export'            => 'Esporta pagine',
+'exporttext'        => "È possibile esportare il testo e la cronologia delle modifiche di una pagina o di un gruppo di pagine in formato XML per importarle in altri siti che utilizzano il software MediaWiki, attraverso la pagina Special:Import.
+
+Per esportare le pagine indicare i titoli nella casella di testo sottostante, uno per riga, e specificare se si desidera ottenere la versione corrente e tutte le versioni precedenti, con i dati della cronologia della pagina, oppure soltanto l'ultima versione e i dati corrispondenti all'ultima modifica.
+
+In quest'ultimo caso si può anche utilizzare un collegamento, ad esempio [[Special:Export/{{Mediawiki:mainpage}}]] per esportare {{Mediawiki:mainpage}}.",
+'exportcuronly'     => "Includi solo la revisione attuale, non l'intera cronologia",
+'exportnohistory'   => "----
+'''Nota:''' l'esportazione dell'intera cronologia delle pagine attraverso questa interfaccia è stata disattivata per motivi legati alle prestazioni del sistema.",
+'export-submit'     => 'Esporta',
+'export-addcattext' => 'Aggungi pagine dalla categoria:',
+'export-addcat'     => 'Aggiungi',
+
+# Namespace 8 related
+'allmessages'               => 'Messaggi di sistema',
+'allmessagesname'           => 'Nome',
+'allmessagesdefault'        => 'Testo predefinito',
+'allmessagescurrent'        => 'Testo attuale',
+'allmessagestext'           => 'Questa è la lista di tutti i messaggi di sistema disponibili nel namespace MediaWiki:',
+'allmessagesnotsupportedUI' => "La lingua selezionata per l'interfaccia, <b>$1</b>, non è supportata da Special:Allmessages su questo sito.",
+'allmessagesnotsupportedDB' => "'''Special:Allmessages''' non è supportato perché il flag '''\$wgUseDatabaseMessages''' non è attivo.",
+'allmessagesfilter'         => 'Filtro sui messaggi:',
+'allmessagesmodified'       => 'Mostra solo quelli modificati',
+
+# Thumbnails
+'thumbnail-more'  => 'Ingrandisci',
+'missingimage'    => '<b>Immagine mancante</b><br /><i>$1</i>',
+'filemissing'     => 'File mancante',
+'thumbnail_error' => 'Errore nella creazione della miniatura: $1',
+
+# Special:Import
+'import'                     => 'Importa pagine',
+'importinterwiki'            => 'Importazione transwiki',
+'import-interwiki-text'      => 'Selezionare un progetto wiki e il titolo della pagina da importare.
+Le date di pubblicazione e i nomi degli autori delle varie versioni saranno conservati.
+Tutte le operazioni di importazione trans-wiki sono registrate nel [[Special:Log/import|log di importazione]].',
+'import-interwiki-history'   => "Copia l'intera cronologia di questa pagina",
+'import-interwiki-submit'    => 'Importa',
+'import-interwiki-namespace' => 'Trasferisci le pagine nel namespace:',
+'importtext'                 => 'Si prega di esportare il file dal sito wiki di origine con la funzione Special:Export, salvarlo sul proprio disco e poi caricarlo qui.',
+'importstart'                => 'Importazione delle pagine in corso...',
+'import-revision-count'      => '{{PLURAL:$1|una revisione importata|$1 revisioni importate}}',
+'importnopages'              => 'Nessuna pagina da importare.',
+'importfailed'               => 'Importazione non riuscita: $1',
+'importunknownsource'        => "Tipo di origine sconosciuto per l'importazione",
+'importcantopen'             => 'Impossibile aprire il file di importazione',
+'importbadinterwiki'         => 'Collegamento inter-wiki errato',
+'importnotext'               => 'Testo vuoto o mancante',
+'importsuccess'              => 'Importazione riuscita.',
+'importhistoryconflict'      => 'La cronologia contiene delle versioni in conflitto (questa pagina potrebbe essere già stata importata)',
+'importnosources'            => "Non è stata definita una fonte per l'importazione transwiki; l'importazione diretta della cronologia non è attiva.",
+'importnofile'               => "Non è stato caricato nessun file per l'importazione,",
+'importuploaderror'          => "Caricamento del file per l'importazione non riuscita; è possibile che il file sia di dimensioni superiori a quelle ammesse per gli upload.",
+
+# Import log
+'importlogpage'                    => 'Importazioni',
+'importlogpagetext'                => "Registro delle importazioni d'ufficio di pagine provenienti da altre wiki, complete di cronologia.",
+'import-logentry-upload'           => 'ha importato [[$1]] tramite upload',
+'import-logentry-upload-detail'    => '{{PLURAL:$1|una revisione importata|$1 revisioni importate}}',
+'import-logentry-interwiki'        => 'ha trasferito da altra wiki la pagina $1',
+'import-logentry-interwiki-detail' => '{{PLURAL:$1|una revisione importata|$1 revisioni importate}} da $2',
+
+# Tooltip help for the actions
+'tooltip-pt-userpage'             => 'La tua pagina utente',
+'tooltip-pt-anonuserpage'         => 'La pagina utente di questo indirizzo IP',
+'tooltip-pt-mytalk'               => 'La tua pagina di discussione',
+'tooltip-pt-anontalk'             => 'Discussioni sulle modifiche fatte da questo indirizzo IP',
+'tooltip-pt-preferences'          => 'Le tue preferenze',
+'tooltip-pt-watchlist'            => 'La lista delle pagine che stai tenendo sotto osservazione',
+'tooltip-pt-mycontris'            => "L'elenco dei tuoi contributi",
+'tooltip-pt-login'                => 'La registrazione è consigliata, anche se non obbligatoria',
+'tooltip-pt-anonlogin'            => 'La registrazione è consigliata, anche se non obbligatoria',
+'tooltip-pt-logout'               => 'Uscita (logout)',
+'tooltip-ca-talk'                 => 'Vedi le discussioni relative a questa pagina',
+'tooltip-ca-edit'                 => 'Puoi modificare questa pagina. Per favore usa il pulsante di anteprima prima di salvare',
+'tooltip-ca-addsection'           => 'Aggiungi un commento a questa discussione',
+'tooltip-ca-viewsource'           => 'Questa pagina è protetta, ma puoi vedere il suo codice sorgente',
+'tooltip-ca-history'              => 'Versioni precedenti di questa pagina',
+'tooltip-ca-protect'              => 'Proteggi questa pagina',
+'tooltip-ca-delete'               => 'Cancella questa pagina',
+'tooltip-ca-undelete'             => "Ripristina la pagina com'era prima della cancellazione",
+'tooltip-ca-move'                 => 'Sposta questa pagina (cambia titolo)',
+'tooltip-ca-watch'                => 'Aggiungi questa pagina alla tua lista di osservati speciali',
+'tooltip-ca-unwatch'              => 'Elimina questa pagina dalla tua lista di osservati speciali',
+'tooltip-search'                  => "Cerca all'interno di {{SITENAME}}",
+'tooltip-p-logo'                  => 'Pagina principale',
+'tooltip-n-mainpage'              => 'Visita la pagina principale',
+'tooltip-n-portal'                => 'Descrizione del progetto, cosa puoi fare, dove trovare le cose',
+'tooltip-n-currentevents'         => 'Informazioni sugli eventi di attualità',
+'tooltip-n-recentchanges'         => 'Elenco delle ultime modifiche del sito',
+'tooltip-n-randompage'            => 'Mostra una pagina a caso',
+'tooltip-n-help'                  => 'Pagine di aiuto',
+'tooltip-n-sitesupport'           => 'Aiutaci',
+'tooltip-t-whatlinkshere'         => 'Elenco di tutte le pagine che sono collegate a questa',
+'tooltip-t-recentchangeslinked'   => 'Elenco delle ultime modifiche alle pagine collegate a questa',
+'tooltip-feed-rss'                => 'Feed RSS per questa pagina',
+'tooltip-feed-atom'               => 'Feed Atom per questa pagina',
+'tooltip-t-contributions'         => 'Lista dei contributi di questo utente',
+'tooltip-t-emailuser'             => 'Invia un messaggio e-mail a questo utente',
+'tooltip-t-upload'                => 'Carica immagini o file multimediali',
+'tooltip-t-specialpages'          => 'Lista di tutte le pagine speciali',
+'tooltip-ca-nstab-main'           => 'Vedi la voce',
+'tooltip-ca-nstab-user'           => 'Vedi la pagina utente',
+'tooltip-ca-nstab-media'          => 'Vedi la pagina del file multimediale',
+'tooltip-ca-nstab-special'        => 'Questa è una pagina speciale, non può essere modificata',
+'tooltip-ca-nstab-project'        => 'Vedi la pagina di servizio',
+'tooltip-ca-nstab-image'          => "Vedi la pagina dell'immagine",
+'tooltip-ca-nstab-mediawiki'      => 'Vedi il messaggio di sistema',
+'tooltip-ca-nstab-template'       => 'Vedi il template',
+'tooltip-ca-nstab-help'           => 'Vedi la pagina di aiuto',
+'tooltip-ca-nstab-category'       => 'Vedi la pagina della categoria',
+'tooltip-minoredit'               => 'Segnala come modifica minore',
+'tooltip-save'                    => 'Salva le modifiche',
+'tooltip-preview'                 => 'Anteprima delle modifiche (consigliata, prima di salvare!)',
+'tooltip-diff'                    => 'Guarda le modifiche apportate al testo.',
+'tooltip-compareselectedversions' => 'Guarda le differenze tra le due versioni selezionate di questa pagina.',
+'tooltip-watch'                   => 'Aggiungi questa pagina alla lista degli osservati speciali',
+'tooltip-recreate'                => 'Ricrea la pagina anche se è stata cancellata',
+
+# Stylesheets
+'common.css'   => '/* Gli stili CSS inseriti qui si applicano a tutte le skin */',
+'monobook.css' => '/* Gli stili CSS inseriti qui si applicano agli utenti che usano la skin Monobook */',
+
+# Scripts
+'common.js'   => '/* Il codice JavaScript inserito qui viene caricato da ciascuna pagina, per tutti gli utenti. */',
+'monobook.js' => "/* L'uso di questo messaggio è deprecato; preferire [[MediaWiki:common.js]] */",
+
+# Metadata
+'nodublincore'      => 'Metadati Dublin Core RDF non attivi su questo server.',
+'nocreativecommons' => 'Metadati Commons RDF non attivi su questo server.',
+'notacceptable'     => 'Il server wiki non è in grado di fornire i dati in un formato leggibile dal client utilizzato.',
+
+# Attribution
+'anonymous'        => 'uno o più utenti anonimi di {{SITENAME}}',
+'siteuser'         => '$1, utente di {{SITENAME}}',
+'lastmodifiedatby' => "Questa pagina è stata modificata per l'ultima volta il $2, $1 da $3.", # $1 date, $2 time, $3 user
+'and'              => 'e',
+'othercontribs'    => 'Il testo attuale è basato su contributi di $1.',
+'others'           => 'altri',
+'siteusers'        => '$1, utenti di {{SITENAME}}',
+'creditspage'      => 'Autori della pagina',
+'nocredits'        => 'Nessuna informazione sugli autori disponibile per questa pagina.',
+
+# Spam protection
+'spamprotectiontitle'    => 'Filtro anti-spam',
+'spamprotectiontext'     => 'La pagina che si è tentato di salvare è stata bloccata dal filtro anti-spam. Ciò è probabilmente dovuto alla presenza di un collegamento a un sito esterno bloccato.',
+'spamprotectionmatch'    => 'Il filtro anti-spam è stato attivato dal seguente testo: $1',
+'subcategorycount'       => 'Questa categoria contiene {{PLURAL:$1|una sottocategoria|$1 sottocategorie}}.',
+'categoryarticlecount'   => 'Questa categoria contiene {{PLURAL:$1|una pagina|$1 pagine}}.',
+'category-media-count'   => 'Questa categoria contiene {{PLURAL:$1|un file|$1 file}}.',
+'listingcontinuesabbrev' => ' cont.',
+'spambot_username'       => 'MediaWiki - sistema di rimozione spam',
+'spam_reverting'         => "Ripristinata l'ultima versione priva di collegamenti a $1",
+'spam_blanking'          => 'Pagina svuotata, tutte le versioni contenevano collegamenti a $1',
+
+# Info page
+'infosubtitle'   => 'Informazioni per la pagina',
+'numedits'       => 'Numero di modifiche (pagina): $1',
+'numtalkedits'   => 'Numero di modifiche (pagina di discussione): $1',
+'numwatchers'    => 'Numero di osservatori: $1',
+'numauthors'     => 'Numero di autori distinti (pagina): $1',
+'numtalkauthors' => 'Numero di autori distinti (pagina di discussione): $1',
+
+# Math options
+'mw_math_png'    => 'Mostra sempre in PNG',
+'mw_math_simple' => 'HTML se molto semplice, altrimenti PNG',
+'mw_math_html'   => 'HTML se possibile, altrimenti PNG',
+'mw_math_source' => 'Lascia in formato TeX (per browser testuali)',
+'mw_math_modern' => 'Formato consigliato per i browser moderni',
+'mw_math_mathml' => 'Usa MathML se possibile (sperimentale)',
+
+# Patrolling
+'markaspatrolleddiff'                 => 'Segna la modifica come verificata',
+'markaspatrolledtext'                 => 'Segna questa voce come verificata',
+'markedaspatrolled'                   => 'Segnato come verificato',
+'markedaspatrolledtext'               => 'La revisione selezionata è stata segnata come verificata.',
+'rcpatroldisabled'                    => 'La verifica delle ultime modifiche è disattivata',
+'rcpatroldisabledtext'                => 'La funzione di verifica delle ultime modifiche al momento non è attiva.',
+'markedaspatrollederror'              => 'Impossibile contrassegnare la voce come verificata',
+'markedaspatrollederrortext'          => 'Occorre specificare una revisione da contrassegnare come verificata.',
+'markedaspatrollederror-noautopatrol' => 'Non si dispone dei permessi necessari per segnare le proprie modifiche come verificate.',
+
+# Patrol log
+'patrol-log-page' => 'Modifiche verificate',
+'patrol-log-line' => 'ha segnato la $1 alla pagina $2 come verificata $3',
+'patrol-log-auto' => '(verifica automatica)',
+'patrol-log-diff' => 'modifica $1',
+
+# Image deletion
+'deletedrevision' => 'Revisione precedente, cancellata: $1.',
+
+# Browsing diffs
+'previousdiff' => '← Differenza precedente',
+'nextdiff'     => 'Differenza successiva →',
+
+# Media information
+'mediawarning'         => "'''Attenzione''': Questo file può contenere codice maligno; la sua esecuzione può danneggiare il proprio sistema informatico.<hr />",
+'imagemaxsize'         => 'Dimensione massima delle immagini sulle relative pagine di discussione:',
+'thumbsize'            => 'Grandezza delle miniature:',
+'file-info'            => 'Dimensioni: $1, tipo MIME: $2',
+'file-info-size'       => '($1 × $2 pixel, dimensioni: $3, tipo MIME: $4)',
+'file-nohires'         => '<small>Non sono disponibili versioni a risoluzione più elevata.</small>',
+'file-svg'             => '<small>Immagine vettoriale scalabile senza perdita di risoluzione. Dimensioni di base: $1 × $2 pixel.</small>',
+'show-big-image'       => 'Versione ad alta risoluzione',
+'show-big-image-thumb' => '<small>Dimensioni di questa anteprima: $1 × $2 pixel</small>',
+
+'newimages'    => 'Galleria dei nuovi file',
+'showhidebots' => '($1 i bot)',
+'noimages'     => "Non c'è nulla da vedere.",
+
+'passwordtooshort' => 'La password inserita è troppo breve. Deve contenere almeno $1 caratteri.',
+
+# Metadata
+'metadata'          => 'Metadati',
+'metadata-help'     => 'Questo file contiene informazioni aggiuntive, probabilmente aggiunte dalla fotocamera o dallo scanner usati per crearla o digitalizzarla. Se il file è stato modificato, alcuni dettagli potrebbero non corrispondere alle modifiche apportate.',
+'metadata-expand'   => 'Mostra dettagli',
+'metadata-collapse' => 'Nascondi dettagli',
+'metadata-fields'   => "I campi relativi ai metadati EXIF elencati in questo messaggio verranno mostrati sulla pagina dell'immagine quando la tabella dei metadati è presentata nella forma breve. Per impostazione predefinita, gli altri campi verranno nascosti.
+* make
+* model
+* datetimeoriginal
+* exposuretime
+* fnumber
+* focallength",
+
+# EXIF tags
+'exif-imagewidth'                  => 'Larghezza',
+'exif-imagelength'                 => 'Altezza',
+'exif-bitspersample'               => 'Bit per campione',
+'exif-compression'                 => 'Meccanismo di compressione',
+'exif-photometricinterpretation'   => 'Struttura dei pixel',
+'exif-orientation'                 => 'Orientamento',
+'exif-samplesperpixel'             => 'Numero delle componenti',
+'exif-planarconfiguration'         => 'Disposizione dei dati',
+'exif-ycbcrsubsampling'            => 'Rapporto di campionamento Y / C',
+'exif-ycbcrpositioning'            => 'Posizionamento componenti Y e C',
+'exif-xresolution'                 => 'Risoluzione orizzontale',
+'exif-yresolution'                 => 'Risoluzione verticale',
+'exif-resolutionunit'              => 'Unità di misura risoluzione X e Y',
+'exif-stripoffsets'                => 'Posizione dei dati immagine',
+'exif-rowsperstrip'                => 'Numero righe per striscia',
+'exif-stripbytecounts'             => 'Numero di byte per striscia compressa',
+'exif-jpeginterchangeformat'       => 'Posizione byte SOI JPEG',
+'exif-jpeginterchangeformatlength' => 'Numero di byte di dati JPEG',
+'exif-transferfunction'            => 'Funzione di trasferimento',
+'exif-whitepoint'                  => 'Coordinate cromatiche del punto di bianco',
+'exif-primarychromaticities'       => 'Coordinate cromatiche dei colori primari',
+'exif-ycbcrcoefficients'           => 'Coefficienti matrice di trasformazione spazi dei colori',
+'exif-referenceblackwhite'         => 'Coppia di valori di riferimento (nero e bianco)',
+'exif-datetime'                    => 'Data e ora di modifica del file',
+'exif-imagedescription'            => "Descrizione dell'immagine",
+'exif-make'                        => 'Produttore fotocamera',
+'exif-model'                       => 'Modello fotocamera',
+'exif-software'                    => 'Software',
+'exif-artist'                      => 'Autore',
+'exif-copyright'                   => 'Informazioni sul copyright',
+'exif-exifversion'                 => 'Versione del formato Exif',
+'exif-flashpixversion'             => 'Versione Flashpix supportata',
+'exif-colorspace'                  => 'Spazio dei colori',
+'exif-componentsconfiguration'     => 'Significato di ciascuna componente',
+'exif-compressedbitsperpixel'      => 'Modalità di compressione immagine',
+'exif-pixelydimension'             => 'Larghezza effettiva immagine',
+'exif-pixelxdimension'             => 'Altezza effettiva immagine',
+'exif-makernote'                   => 'Note del produttore',
+'exif-usercomment'                 => "Note dell'utente",
+'exif-relatedsoundfile'            => 'File audio collegato',
+'exif-datetimeoriginal'            => 'Data e ora di creazione dei dati',
+'exif-datetimedigitized'           => 'Data e ora di digitalizzazione',
+'exif-subsectime'                  => 'Data e ora, frazioni di secondo',
+'exif-subsectimeoriginal'          => 'Data e ora di creazione, frazioni di secondo',
+'exif-subsectimedigitized'         => 'Data e ora di digitalizzazione, frazioni di secondo',
+'exif-exposuretime'                => 'Tempo di esposizione',
+'exif-exposuretime-format'         => '$1 s ($2)',
+'exif-fnumber'                     => 'Rapporto focale',
+'exif-fnumber-format'              => 'f/$1',
+'exif-exposureprogram'             => 'Programma di esposizione',
+'exif-spectralsensitivity'         => 'Sensibilità spettrale',
+'exif-isospeedratings'             => 'Sensibilità ISO',
+'exif-oecf'                        => 'Fattore di conversione optoelettronica',
+'exif-shutterspeedvalue'           => 'Tempo di esposizione',
+'exif-aperturevalue'               => 'Apertura',
+'exif-brightnessvalue'             => 'Luminosità',
+'exif-exposurebiasvalue'           => 'Correzione esposizione',
+'exif-maxaperturevalue'            => 'Apertura massima',
+'exif-subjectdistance'             => 'Distanza del soggetto',
+'exif-meteringmode'                => 'Metodo di misurazione',
+'exif-lightsource'                 => 'Sorgente luminosa',
+'exif-flash'                       => 'Caratteristiche e stato del flash',
+'exif-focallength'                 => 'Distanza focale obiettivo',
+'exif-focallength-format'          => '$1 mm',
+'exif-subjectarea'                 => 'Area inquadrante il soggetto',
+'exif-flashenergy'                 => 'Potenza del flash',
+'exif-spatialfrequencyresponse'    => 'Risposta in frequenza spaziale',
+'exif-focalplanexresolution'       => 'Risoluzione X sul piano focale',
+'exif-focalplaneyresolution'       => 'Risoluzione Y sul piano focale',
+'exif-focalplaneresolutionunit'    => 'Unità di misura risoluzione sul piano focale',
+'exif-subjectlocation'             => 'Posizione del soggetto',
+'exif-exposureindex'               => 'Sensibilità impostata',
+'exif-sensingmethod'               => 'Metodo di rilevazione',
+'exif-filesource'                  => 'Origine del file',
+'exif-scenetype'                   => 'Tipo di inquadratura',
+'exif-cfapattern'                  => 'Disposizione filtro colore',
+'exif-customrendered'              => 'Elaborazione personalizzata',
+'exif-exposuremode'                => 'Modalità di esposizione',
+'exif-whitebalance'                => 'Bilanciamento del bianco',
+'exif-digitalzoomratio'            => 'Rapporto zoom digitale',
+'exif-focallengthin35mmfilm'       => 'Focale equivalente su 35 mm',
+'exif-scenecapturetype'            => 'Tipo di acquisizione',
+'exif-gaincontrol'                 => 'Controllo inquadratura',
+'exif-contrast'                    => 'Controllo contrasto',
+'exif-saturation'                  => 'Controllo saturazione',
+'exif-sharpness'                   => 'Controllo nitidezza',
+'exif-devicesettingdescription'    => 'Descrizione impostazioni dispositivo',
+'exif-subjectdistancerange'        => 'Scala distanza soggetto',
+'exif-imageuniqueid'               => 'ID univoco immagine',
+'exif-gpsversionid'                => 'Versione dei tag GPS',
+'exif-gpslatituderef'              => 'Latitudine Nord/Sud',
+'exif-gpslatitude'                 => 'Latitudine',
+'exif-gpslongituderef'             => 'Longitudine Est/Ovest',
+'exif-gpslongitude'                => 'Longitudine',
+'exif-gpsaltituderef'              => "Riferimento per l'altitudine",
+'exif-gpsaltitude'                 => 'Altitudine',
+'exif-gpstimestamp'                => 'Ora GPS (orologio atomico)',
+'exif-gpssatellites'               => 'Satelliti usati per la misurazione',
+'exif-gpsstatus'                   => 'Stato del ricevitore',
+'exif-gpsmeasuremode'              => 'Modalità di misurazione',
+'exif-gpsdop'                      => 'Precisione della misurazione',
+'exif-gpsspeedref'                 => 'Unità di misura della velocità',
+'exif-gpsspeed'                    => 'Velocità del ricevitore GPS',
+'exif-gpstrackref'                 => 'Riferimento per la direzione movimento',
+'exif-gpstrack'                    => 'Direzione del movimento',
+'exif-gpsimgdirectionref'          => "Riferimento per la direzione dell'immagine",
+'exif-gpsimgdirection'             => "Direzione dell'immagine",
+'exif-gpsmapdatum'                 => 'Rilevamento geodetico usato',
+'exif-gpsdestlatituderef'          => 'Riferimento per la latitudine della destinazione',
+'exif-gpsdestlatitude'             => 'Latitudine della destinazione',
+'exif-gpsdestlongituderef'         => 'Riferimento per la longitudine della destinazione',
+'exif-gpsdestlongitude'            => 'Longitudine della destinazione',
+'exif-gpsdestbearingref'           => 'Riferimento per la direzione della destinazione',
+'exif-gpsdestbearing'              => 'Direzione della destinazione',
+'exif-gpsdestdistanceref'          => 'Riferimento per la distanza della destinazione',
+'exif-gpsdestdistance'             => 'Distanza della destinazione',
+'exif-gpsprocessingmethod'         => 'Nome del metodo di elaborazione GPS',
+'exif-gpsareainformation'          => 'Nome della zona GPS',
+'exif-gpsdatestamp'                => 'Data GPS',
+'exif-gpsdifferential'             => 'Correzione differenziale GPS',
+
+# EXIF attributes
+'exif-compression-1' => 'Nessuno',
+'exif-compression-6' => 'JPEG',
+
+'exif-photometricinterpretation-2' => 'RGB',
+'exif-photometricinterpretation-6' => 'YCbCr',
+
+'exif-unknowndate' => 'Data sconosciuta',
+
+'exif-orientation-1' => 'Normale', # 0th row: top; 0th column: left
+'exif-orientation-2' => 'Capovolto orizzontalmente', # 0th row: top; 0th column: right
+'exif-orientation-3' => 'Ruotato di 180°', # 0th row: bottom; 0th column: right
+'exif-orientation-4' => 'Capovolto verticalmente', # 0th row: bottom; 0th column: left
+'exif-orientation-5' => 'Ruotato 90° in senso antiorario e capovolto verticalmente', # 0th row: left; 0th column: top
+'exif-orientation-6' => 'Ruotato 90° in senso orario', # 0th row: right; 0th column: top
+'exif-orientation-7' => 'Ruotato 90° in senso orario e capovolto verticalmente', # 0th row: right; 0th column: bottom
+'exif-orientation-8' => 'Ruotato 90° in senso antiorario', # 0th row: left; 0th column: bottom
+
+'exif-planarconfiguration-1' => 'a blocchi (chunky)',
+'exif-planarconfiguration-2' => 'lineare (planar)',
+
+'exif-xyresolution-i' => '$1 punti per pollice (dpi)',
+'exif-xyresolution-c' => '$1 punti per centimetro (dpc)',
+
+'exif-colorspace-1'      => 'sRGB',
+'exif-colorspace-ffff.h' => 'Non calibrato',
+
+'exif-componentsconfiguration-0' => 'assente',
+'exif-componentsconfiguration-1' => 'Y',
+'exif-componentsconfiguration-2' => 'Cb',
+'exif-componentsconfiguration-3' => 'Cr',
+'exif-componentsconfiguration-4' => 'R',
+'exif-componentsconfiguration-5' => 'G',
+'exif-componentsconfiguration-6' => 'B',
+
+'exif-exposureprogram-0' => 'Non definito',
+'exif-exposureprogram-1' => 'Manuale',
+'exif-exposureprogram-2' => 'Standard',
+'exif-exposureprogram-3' => 'Priorità al diaframma',
+'exif-exposureprogram-4' => "Priorità all'esposizione",
+'exif-exposureprogram-5' => 'Artistico (orientato alla profondità di campo)',
+'exif-exposureprogram-6' => 'Sportivo (orientato alla velocità di ripresa)',
+'exif-exposureprogram-7' => 'Ritratto (soggetti vicini con sfondo fuori fuoco)',
+'exif-exposureprogram-8' => 'Panorama (soggetti lontani con sfondo a fuoco)',
+
+'exif-subjectdistance-value' => '$1 metri',
+
+'exif-meteringmode-0'   => 'Sconosciuto',
+'exif-meteringmode-1'   => 'Media',
+'exif-meteringmode-2'   => 'Media pesata centrata',
+'exif-meteringmode-3'   => 'Spot',
+'exif-meteringmode-4'   => 'MultiSpot',
+'exif-meteringmode-5'   => 'Pattern',
+'exif-meteringmode-6'   => 'Parziale',
+'exif-meteringmode-255' => 'Altro',
+
+'exif-lightsource-0'   => 'Sconosciuta',
+'exif-lightsource-1'   => 'Luce diurna',
+'exif-lightsource-2'   => 'Lampada a fluorescenza',
+'exif-lightsource-3'   => 'Lampada al tungsteno (a incandescenza)',
+'exif-lightsource-4'   => 'Flash',
+'exif-lightsource-9'   => 'Bel tempo',
+'exif-lightsource-10'  => 'Nuvoloso',
+'exif-lightsource-11'  => 'In ombra',
+'exif-lightsource-12'  => 'Daylight fluorescent (D 5700 - 7100K)',
+'exif-lightsource-13'  => 'Day white fluorescent (N 4600 - 5400K)',
+'exif-lightsource-14'  => 'Cool white fluorescent (W 3900 - 4500K)',
+'exif-lightsource-15'  => 'White fluorescent (WW 3200 - 3700K)',
+'exif-lightsource-17'  => 'Luce standard A',
+'exif-lightsource-18'  => 'Luce standard B',
+'exif-lightsource-19'  => 'Luce standard C',
+'exif-lightsource-20'  => 'Illuminante D55',
+'exif-lightsource-21'  => 'Illuminante D65',
+'exif-lightsource-22'  => 'Illuminante D75',
+'exif-lightsource-23'  => 'Illuminante D50',
+'exif-lightsource-24'  => 'Lampada da studio ISO al tungsteno',
+'exif-lightsource-255' => 'Altra sorgente luminosa',
+
+'exif-focalplaneresolutionunit-2' => 'pollici',
+
+'exif-sensingmethod-1' => 'Non definito',
+'exif-sensingmethod-2' => 'Sensore area colore a 1 chip',
+'exif-sensingmethod-3' => 'Sensore area colore a 2 chip',
+'exif-sensingmethod-4' => 'Sensore area colore a 3 chip',
+'exif-sensingmethod-5' => 'Sensore area colore sequenziale',
+'exif-sensingmethod-7' => 'Sensore trilineare',
+'exif-sensingmethod-8' => 'Sensore lineare colore sequenziale',
+
+'exif-filesource-3' => 'DSC',
+
+'exif-scenetype-1' => 'Fotografia diretta',
+
+'exif-customrendered-0' => 'Processo normale',
+'exif-customrendered-1' => 'Processo personalizzato',
+
+'exif-exposuremode-0' => 'Esposizione automatica',
+'exif-exposuremode-1' => 'Esposizione manuale',
+'exif-exposuremode-2' => 'Bracketing automatico',
+
+'exif-whitebalance-0' => 'Bilanciamento del bianco automatico',
+'exif-whitebalance-1' => 'Bilanciamento del bianco manuale',
+
+'exif-scenecapturetype-0' => 'Standard',
+'exif-scenecapturetype-1' => 'Panorama',
+'exif-scenecapturetype-2' => 'Ritratto',
+'exif-scenecapturetype-3' => 'Notturna',
+
+'exif-gaincontrol-0' => 'Nessuno',
+'exif-gaincontrol-1' => 'Enfasi per basso guadagno',
+'exif-gaincontrol-2' => 'Enfasi per alto guadagno',
+'exif-gaincontrol-3' => 'Deenfasi per basso guadagno',
+'exif-gaincontrol-4' => 'Deenfasi per alto guadagno',
+
+'exif-contrast-0' => 'Normale',
+'exif-contrast-1' => 'Alto contrasto',
+'exif-contrast-2' => 'Basso contrasto',
+
+'exif-saturation-0' => 'Normale',
+'exif-saturation-1' => 'Bassa saturazione',
+'exif-saturation-2' => 'Alta saturazione',
+
+'exif-sharpness-0' => 'Normale',
+'exif-sharpness-1' => 'Minore nitidezza',
+'exif-sharpness-2' => 'Maggiore nitidezza',
+
+'exif-subjectdistancerange-0' => 'Sconosciuta',
+'exif-subjectdistancerange-1' => 'Macro',
+'exif-subjectdistancerange-2' => 'Soggetto vicino',
+'exif-subjectdistancerange-3' => 'Soggetto lontano',
+
+# Pseudotags used for GPSLatitudeRef and GPSDestLatitudeRef
+'exif-gpslatitude-n' => 'Latitudine Nord',
+'exif-gpslatitude-s' => 'Latitudine Sud',
+
+# Pseudotags used for GPSLongitudeRef and GPSDestLongitudeRef
+'exif-gpslongitude-e' => 'Longitudine Est',
+'exif-gpslongitude-w' => 'Longitudine Ovest',
+
+'exif-gpsstatus-a' => 'Misurazione in corso',
+'exif-gpsstatus-v' => 'Misurazione interoperabile',
+
+'exif-gpsmeasuremode-2' => 'Misurazione bidimensionale',
+'exif-gpsmeasuremode-3' => 'Misurazione tridimensionale',
+
+# Pseudotags used for GPSSpeedRef and GPSDestDistanceRef
+'exif-gpsspeed-k' => 'Chilometri orari',
+'exif-gpsspeed-m' => 'Miglia orarie',
+'exif-gpsspeed-n' => 'Nodi',
+
+# Pseudotags used for GPSTrackRef, GPSImgDirectionRef and GPSDestBearingRef
+'exif-gpsdirection-t' => 'Direzione reale',
+'exif-gpsdirection-m' => 'Direzione magnetica',
+
+# External editor support
+'edit-externally'      => 'Modifica questo file usando un programma esterno',
+'edit-externally-help' => 'Per maggiori informazioni consultare le [http://meta.wikimedia.org/wiki/Help:External_editors istruzioni] (in inglese)',
+
+# 'all' in various places, this might be different for inflected languages
+'recentchangesall' => 'tutte',
+'imagelistall'     => 'tutte',
+'watchlistall1'    => 'tutte',
+'watchlistall2'    => 'tutte',
+'namespacesall'    => 'Tutti',
+
+# E-mail address confirmation
+'confirmemail'            => 'Conferma indirizzo e-mail',
+'confirmemail_noemail'    => 'Non è stato indicato un indirizzo e-mail valido nelle proprie [[Special:Preferences|preferenze]].',
+'confirmemail_text'       => "Questo sito richiede la verifica dell'indirizzo e-mail prima di poter usare le funzioni connesse all'email. Premere il pulsante qui sotto per inviare una richiesta di conferma al proprio indirizzo; nel messaggio è presente un collegamento che contiene un codice. Visitare il collegamento con il proprio browser per confermare che l'indirizzo e-mail è valido.",
+'confirmemail_pending'    => '<div class="error">
+Il codice di conferma è già stato spedito via posta elettronica; se l\'account è stato 
+creato di recente, si prega di attendere l\'arrivo del codice per qualche minuto prima 
+di tentare di richiederne uno nuovo.
+</div>',
+'confirmemail_send'       => 'Invia un codice di conferma via e-mail.',
+'confirmemail_sent'       => 'Messaggio e-mail di conferma inviato.',
+'confirmemail_oncreate'   => "Un codice di conferma è stato spedito all'indirizzo
+di posta elettronica indicato. Il codice non è necessario per accedere al sito,
+ma è necessario fornirlo per poter abilitare tutte le funzioni del sito che fanno
+uso della posta elettronica.",
+'confirmemail_sendfailed' => "Impossibile inviare il messaggio e-mail di conferma. Verificare che l'indirizzo non contenga caratteri non validi.
+
+Messaggio di errore del mailer: $1",
+'confirmemail_invalid'    => 'Codice di conferma non valido. Il codice potrebbe essere scaduto.',
+'confirmemail_needlogin'  => 'È necessario $1 per confermare il proprio indirizzo e-mail.',
+'confirmemail_success'    => "L'indirizzo e-mail è confermato. Ora è possibile eseguire l'accesso e fare pieno uso del sito.",
+'confirmemail_loggedin'   => "L'indirizzo e-mail è stato confermato.",
+'confirmemail_error'      => 'Errore nel salvataggio della conferma.',
+'confirmemail_subject'    => "{{SITENAME}}: richiesta di conferma dell'indirizzo",
+'confirmemail_body'       => 'Qualcuno, probabilmente tu stesso dall\'indirizzo IP $1, ha registrato l\'account "$2" su {{SITENAME}} indicando questo indirizzo e-mail.
+
+Per confermare che l\'account ti appartiene e attivare le funzioni relative all\'invio di e-mail su {{SITENAME}}, apri il collegamento seguente con il tuo browser:
+
+$3
+
+Se l\'account *non* ti appartiene, non seguire il collegamento. Questo codice di conferma scadrà automaticamente alle $4.',
+
+# Inputbox extension, may be useful in other contexts as well
+'tryexact'       => 'Cerca corrispondenza esatta',
+'searchfulltext' => 'Ricerca nel testo',
+'createarticle'  => 'Crea voce',
+
+# Scary transclusion
+'scarytranscludedisabled' => "[L'inclusione di pagine tra siti wiki non è attiva]",
+'scarytranscludefailed'   => '[Errore: Impossibile ottenere il template $1]',
+'scarytranscludetoolong'  => '[Errore: URL troppo lunga]',
+
+# Trackbacks
+'trackbackbox'      => '<div id="mw_trackbacks">
+Informazioni di trackback per questa voce:<br />
+$1
+</div>',
+'trackbackremove'   => ' ([$1 Elimina])',
+'trackbacklink'     => 'Trackback',
+'trackbackdeleteok' => 'Informazioni di trackback eliminate correttamente.',
+
+# Delete conflict
+'deletedwhileediting' => 'Attenzione: Questa pagina è stata cancellata dopo che hai iniziato a modificarla.',
+'confirmrecreate'     => "L'utente [[User:$1|$1]] ([[User talk:$1|discussioni]]) ha cancellato questa pagina dopo che hai iniziato a modificarla, per il seguente motivo: ''$2''
+Per favore, conferma che desideri veramente ricreare questa pagina.",
+'recreate'            => 'Ricrea',
+
+'unit-pixel' => 'px',
+
+# HTML dump
+'redirectingto' => 'Reindirizzamento a [[$1]]...',
+
+# action=purge
+'confirm_purge'        => 'Si desidera pulire la cache di questa pagina?
+
+$1',
+'confirm_purge_button' => 'Conferma',
+
+'youhavenewmessagesmulti' => 'Hai nuovi messaggi su $1',
+
+'searchcontaining' => "Ricerca delle voci che contengono ''$1''.",
+'searchnamed'      => "Ricerca delle voci con titolo ''$1''.",
+'articletitles'    => "Ricerca delle voci che iniziano con ''$1''",
+'hideresults'      => 'Nascondi i risultati',
+
+# DISPLAYTITLE
+'displaytitle' => '(Per i collegamenti a questa pagina, usare [[$1]])',
+
+'loginlanguagelabel' => 'Lingua: $1',
+
+# Multipage image navigation
+'imgmultipageprev'   => '← pagina precedente',
+'imgmultipagenext'   => 'pagina seguente →',
+'imgmultigo'         => 'Vai',
+'imgmultigotopre'    => 'Vai alla pagina',
+'imgmultiparseerror' => "Il file immagine è errato o danneggiato; {{SITENAME}} non è in grado di presentare l'elenco delle pagine.",
+
+# Table pager
+'ascending_abbrev'         => 'cresc',
+'descending_abbrev'        => 'decresc',
+'table_pager_next'         => 'Pagina successiva',
+'table_pager_prev'         => 'Pagina precedente',
+'table_pager_first'        => 'Prima pagina',
+'table_pager_last'         => 'Ultima pagina',
+'table_pager_limit'        => 'Mostra $1 file per pagina',
+'table_pager_limit_submit' => 'Vai',
+'table_pager_empty'        => 'Nessun risultato',
+
+# Auto-summaries
+'autosumm-blank'   => 'Pagina svuotata completamente',
+'autosumm-replace' => "Pagina sostituita con '$1'",
+'autoredircomment' => 'Redirect alla pagina [[$1]]', # This should be changed to the new naming convention, but existed beforehand
+'autosumm-new'     => 'Nuova pagina: $1',
+
+# Size units
+'size-bytes'     => '$1 byte',
+'size-kilobytes' => '$1 KB',
+'size-megabytes' => '$1 MB',
+'size-gigabytes' => '$1 GB',
+
+# Live preview
+'livepreview-loading' => 'Caricamento in corso…',
+'livepreview-ready'   => 'Caricamento in corso… Pronto.',
+'livepreview-failed'  => "Errore nella funzione Live preview.
+Usare l'anteprima standard.",
+'livepreview-error'   => 'Impossibile effettuare il collegamento: $1 "$2"
+Usare l\'anteprima standard.',
+
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesJa.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesJa.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesJa.php	(revision 1280)
@@ -0,0 +1,2069 @@
+<?php
+/**
+ * Japanese (日本語)
+ *
+ * @addtogroup Language
+ */
+
+$skinNames = array(
+	'standard' => "標準",
+	'nostalgia' => "ノスタルジア",
+	'cologneblue' => "ケルンブルー",
+);
+
+$datePreferences = array(
+	'default',
+	'ISO 8601',
+);
+
+$defaultDateFormat = 'ja';
+
+$dateFormats = array(
+	'ja time' => 'H:i',
+	'ja date' => 'Y年n月j日 (D)',
+	'ja both' => 'Y年n月j日 (D) H:i',
+);
+
+$namespaceNames = array(
+	NS_MEDIA          => "Media", /* Media */
+	NS_SPECIAL        => "特別", /* Special */
+	NS_MAIN           => "",
+	NS_TALK           => "ノート", /* Talk */
+	NS_USER           => "利用者", /* User */
+	NS_USER_TALK      => "利用者‐会話", /* User_talk */
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK   => '$1‐ノート', /* Wikipedia_talk */
+	NS_IMAGE          => "画像", /* Image */
+	NS_IMAGE_TALK     => "画像‐ノート", /* Image_talk */
+	NS_MEDIAWIKI      => "MediaWiki", /* MediaWiki */
+	NS_MEDIAWIKI_TALK => "MediaWiki‐ノート", /* MediaWiki_talk */
+	NS_TEMPLATE       => "Template", /* Template */
+	NS_TEMPLATE_TALK  => "Template‐ノート", /* Template_talk */
+	NS_HELP           => "Help", /* Help */
+	NS_HELP_TALK      => "Help‐ノート", /* Help_talk */
+	NS_CATEGORY       => "Category", /* Category */
+	NS_CATEGORY_TALK  => "Category‐ノート" /* Category_talk */
+);
+
+$messages = array(
+# User preference toggles
+'tog-underline'               => 'リンクの下線:',
+'tog-highlightbroken'         => '未作成のページへのリンクをハイライトする',
+'tog-justify'                 => '段落を均等割り付けする',
+'tog-hideminor'               => '最近更新したページから細部の編集を隠す',
+'tog-extendwatchlist'         => 'ウォッチリストを拡張する',
+'tog-usenewrc'                => '最近更新したページを拡張する（ブラウザによっては使えないことがあります）',
+'tog-numberheadings'          => '見出しに番号を振る',
+'tog-showtoolbar'             => '編集ボタンを表示する',
+'tog-editondblclick'          => 'ダブルクリックで編集する (JavaScript)',
+'tog-editsection'             => 'セクション編集用リンクを有効にする',
+'tog-editsectiononrightclick' => 'セクションタイトルの右クリックでセクション編集を行えるようにする (JavaScript)',
+'tog-showtoc'                 => '目次を表示する (4つ以上の見出しがあるページ)',
+'tog-rememberpassword'        => 'セッションを越えてパスワードを記憶する',
+'tog-editwidth'               => 'テキストボックスを横幅いっぱいに表示する',
+'tog-watchcreations'          => '自分で作成したページをウォッチリストに追加する',
+'tog-watchdefault'            => '編集したページをウォッチリストに追加する',
+'tog-watchmoves'              => '自分が移動したページをウォッチリストに追加する',
+'tog-watchdeletion'           => '自分が削除したページをウォッチリストに追加する',
+'tog-minordefault'            => '細部の編集をデフォルトでチェックする',
+'tog-previewontop'            => 'プレビューをテキストボックスの前に配置する',
+'tog-previewonfirst'          => '編集開始時にもプレビューを表示する',
+'tog-nocache'                 => 'ページをキャッシュしない',
+'tog-enotifwatchlistpages'    => 'ウォッチリストにあるページが更新されたときにメールを受け取る',
+'tog-enotifusertalkpages'     => '自分の会話ページが更新されたときにメールを受け取る',
+'tog-enotifminoredits'        => '細部の編集でもメールを受け取る',
+'tog-enotifrevealaddr'        => 'あなた以外に送られる通知メールにあなたのメールアドレスを記載する',
+'tog-shownumberswatching'     => 'ページをウォッチしている利用者数を表示する',
+'tog-fancysig'                => '署名を自動的に利用者ページへリンクさせない',
+'tog-externaleditor'          => '編集に外部アプリケーションを使う',
+'tog-externaldiff'            => '差分表示に外部アプリケーションを使う',
+'tog-showjumplinks'           => 'アクセシビリティのための "{{int:jumpto}}" リンクを有効にする',
+'tog-uselivepreview'          => 'ライブプレビューを使用する (JavaScript, 試験中の機能)',
+'tog-forceeditsummary'        => '要約欄が空欄の場合に警告する',
+'tog-watchlisthideown'        => '自分の編集を表示しない',
+'tog-watchlisthidebots'       => 'ボットによる編集を表示しない',
+'tog-watchlisthideminor'      => '細部の編集を表示しない',
+'tog-nolangconversion'        => '字形変換を無効にする',
+'tog-ccmeonemails'            => '他ユーザーに送信したメールの控えを自分にも送る',
+'tog-diffonly'                => '差分表示の下に記事本文を表示しない',
+
+'underline-always'  => '常に付ける',
+'underline-never'   => '常に付けない',
+'underline-default' => 'WWWブラウザに従う',
+
+'skinpreview' => '（プレビュー）',
+
+# Dates
+'sunday'        => '日曜日',
+'monday'        => '月曜日',
+'tuesday'       => '火曜日',
+'wednesday'     => '水曜日',
+'thursday'      => '木曜日',
+'friday'        => '金曜日',
+'saturday'      => '土曜日',
+'sun'           => '日',
+'mon'           => '月',
+'tue'           => '火',
+'wed'           => '水',
+'thu'           => '木',
+'fri'           => '金',
+'sat'           => '土',
+'january'       => '1月',
+'february'      => '2月',
+'march'         => '3月',
+'april'         => '4月',
+'may_long'      => '5月',
+'june'          => '6月',
+'july'          => '7月',
+'august'        => '8月',
+'september'     => '9月',
+'october'       => '10月',
+'november'      => '11月',
+'december'      => '12月',
+'january-gen'   => '1月',
+'february-gen'  => '2月',
+'march-gen'     => '3月',
+'april-gen'     => '4月',
+'may-gen'       => '5月',
+'june-gen'      => '6月',
+'july-gen'      => '7月',
+'august-gen'    => '8月',
+'september-gen' => '9月',
+'october-gen'   => '10月',
+'november-gen'  => '11月',
+'december-gen'  => '12月',
+'jan'           => '1月',
+'feb'           => '2月',
+'mar'           => '3月',
+'apr'           => '4月',
+'may'           => '5月',
+'jun'           => '6月',
+'jul'           => '7月',
+'aug'           => '8月',
+'sep'           => '9月',
+'oct'           => '10月',
+'nov'           => '11月',
+'dec'           => '12月',
+
+# Bits of text used by many pages
+'categories'            => 'カテゴリ',
+'pagecategories'        => 'カテゴリ',
+'category_header'       => 'カテゴリ “$1” にあるページ',
+'subcategories'         => 'サブカテゴリ',
+'category-media-header' => 'カテゴリ “$1” にあるメディア',
+
+'mainpagetext'      => 'MediaWikiが正常にインストールされました。',
+'mainpagedocfooter' => '[http://meta.wikimedia.org/wiki/MediaWiki_localisation インターフェースの変更方法]や、そのほかの使い方・設定に関しては[http://meta.wikimedia.org/wiki/Help:Contents ユーザーズガイド]を参照してください。',
+
+'about'          => '解説',
+'article'        => '本文',
+'newwindow'      => '（新しいウィンドウが開きます）',
+'cancel'         => '中止',
+'qbfind'         => '検索',
+'qbbrowse'       => '閲覧',
+'qbedit'         => '編集',
+'qbpageoptions'  => '個人用ツール',
+'qbpageinfo'     => 'ページ情報',
+'qbmyoptions'    => 'オプション',
+'qbspecialpages' => '特別ページ',
+'moredotdotdot'  => 'すべて表示する',
+'mypage'         => 'マイ・ページ',
+'mytalk'         => 'マイ・トーク',
+'anontalk'       => 'このIP利用者の会話',
+'navigation'     => 'ナビゲーション',
+
+# Metadata in edit box
+'metadata_help' => 'メタデータ（[[{{int:metadata-url}}]]を参照）',
+
+'errorpagetitle'    => 'エラー',
+'returnto'          => '$1 に戻る。',
+'tagline'           => '出典: {{SITENAME}}',
+'help'              => 'ヘルプ',
+'search'            => '検索',
+'searchbutton'      => '検索',
+'go'                => '表示',
+'searcharticle'     => '表示',
+'history'           => '履歴',
+'history_short'     => '履歴',
+'updatedmarker'     => '最後の訪問から更新されています',
+'info_short'        => 'ページ情報',
+'printableversion'  => '印刷用バージョン',
+'permalink'         => 'この版への固定リンク',
+'print'             => '印刷',
+'edit'              => '編集',
+'editthispage'      => 'このページを編集',
+'delete'            => '削除',
+'deletethispage'    => 'このページを削除',
+'undelete_short'    => '削除済$1版',
+'protect'           => '保護',
+'protectthispage'   => 'このページを保護',
+'unprotect'         => '保護解除',
+'unprotectthispage' => 'ページ保護解除',
+'newpage'           => '新規ページ',
+'talkpage'          => 'このページのノート',
+'talkpagelinktext'  => '会話',
+'specialpage'       => '特別ページ',
+'personaltools'     => '個人用ツール',
+'postcomment'       => '新規にコメントを投稿',
+'articlepage'       => '項目を表示',
+'talk'              => 'ノート',
+'views'             => '表示',
+'toolbox'           => 'ツールボックス',
+'userpage'          => '利用者ページを表示',
+'projectpage'       => 'プロジェクトページを表示',
+'imagepage'         => '画像のページを表示',
+'mediawikipage'     => 'インターフェースページを表示',
+'templatepage'      => 'テンプレートページを表示',
+'viewhelppage'      => 'ヘルプページを表示',
+'categorypage'      => 'カテゴリページを表示',
+'viewtalkpage'      => 'ノートを表示',
+'otherlanguages'    => '他の言語',
+'redirectedfrom'    => '（$1 から転送）',
+'redirectpagesub'   => 'リダイレクトページ',
+'lastmodifiedat'    => '最終更新 $2, $1。', # $1 date, $2 time
+'viewcount'         => 'このページは $1 回アクセスされました。',
+'protectedpage'     => '保護されたページ',
+'jumpto'            => '移動:',
+'jumptonavigation'  => 'ナビゲーション',
+'jumptosearch'      => '検索',
+
+# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
+'aboutsite'         => '{{SITENAME}}について',
+'aboutpage'         => 'Project:{{SITENAME}}について',
+'bugreports'        => 'バグの報告',
+'bugreportspage'    => 'Project:バグの報告',
+'copyright'         => 'コンテンツは$1のライセンスで利用することができます。',
+'copyrightpagename' => '{{SITENAME}}の著作権',
+'copyrightpage'     => 'Project:著作権',
+'currentevents'     => '最近の出来事',
+'currentevents-url' => '最近の出来事',
+'disclaimers'       => '免責事項',
+'disclaimerpage'    => 'Project:免責事項',
+'edithelp'          => '編集の仕方',
+'edithelppage'      => 'Help:編集の仕方',
+'faq'               => 'FAQ',
+'faqpage'           => 'Project:FAQ',
+'helppage'          => 'Help:目次',
+'mainpage'          => 'メインページ',
+'policy-url'        => '{{ns:project}}:方針',
+'portal'            => 'コミュニティ・ポータル',
+'portal-url'        => 'Project:コミュニティ・ポータル',
+'privacy'           => 'プライバシー・ポリシー',
+'privacypage'       => 'Project:プライバシー・ポリシー',
+'sitesupport'       => '寄付',
+'sitesupport-url'   => 'Project:Site support',
+
+'badaccess'        => '権限がありません',
+'badaccess-group0' => 'あなたはこの処理を行う権限を持っていません。',
+'badaccess-group1' => 'この処理は $1 の権限を持った利用者のみが実行できます。',
+'badaccess-group2' => 'この処理は $1 のうちどちらかの権限を持った利用者のみが実行できます。',
+'badaccess-groups' => 'この処理は $1 のうちいずれかの権限を持った利用者のみが実行できます。',
+
+'versionrequired'     => 'MediaWiki バージョン $1 が必要',
+'versionrequiredtext' => 'このページの利用には MediaWiki Version $1 が必要です。[[Special:Version|{{int:version}}]]を確認してください。',
+
+'ok'                  => 'OK',
+'pagetitle'           => '$1 - {{SITENAME}}',
+'retrievedfrom'       => ' "$1" より作成',
+'youhavenewmessages'  => 'あなた宛の$1が届いています。（$2）',
+'newmessageslink'     => '新しいメッセージ',
+'newmessagesdifflink' => '差分',
+'editsection'         => '編集',
+'editold'             => '編集',
+'editsectionhint'     => '節を編集: $1',
+'toc'                 => '目次',
+'showtoc'             => '表示',
+'hidetoc'             => '非表示',
+'thisisdeleted'       => '$1 を参照または復帰する。',
+'viewdeleted'         => '$1の削除記録と履歴を確認する',
+'restorelink'         => '削除された $1 編集',
+'feedlinks'           => 'フィード:',
+'feed-invalid'        => 'フィード形式の指定が間違っています。',
+
+# Short words for each namespace, by default used in the 'article' tab in monobook
+'nstab-main'      => '本文',
+'nstab-user'      => '利用者ページ',
+'nstab-media'     => 'Media',
+'nstab-special'   => '特別ページ',
+'nstab-project'   => '解説',
+'nstab-image'     => '画像',
+'nstab-mediawiki' => 'インターフェース',
+'nstab-template'  => 'テンプレート',
+'nstab-help'      => 'ヘルプ',
+'nstab-category'  => 'カテゴリ',
+
+# Main script and global functions
+'nosuchaction'      => 'そのような動作はありません',
+'nosuchactiontext'  => 'このURIで指定された動作は{{SITENAME}}で認識できません。',
+'nosuchspecialpage' => 'そのような特別ページはありません',
+'nospecialpagetext' => '要求された特別ページは存在しません。有効な特別ページの一覧は[[Special:Specialpages]]にあります。',
+
+# General errors
+'error'                => 'エラー',
+'databaseerror'        => 'データベース・エラー',
+'dberrortext'          => 'データベース検索の文法エラー。これは恐らくソフトウェアのバグを表しています。
+
+最後に実行を試みた問い合わせ:
+<blockquote><tt>$1</tt></blockquote>
+
+from within function "<tt>$2</tt>". MySQL returned error "<tt>$3: $4</tt>".',
+'dberrortextcl'        => 'データベースクエリの文法エラーが発生しました。
+----
+A database query syntax error has occurred.
+The last attempted database query was:
+"$1"
+from within function "$2".
+MySQL returned error "$3: $4"',
+'noconnect'            => '申し訳ありません。何らかの問題によりデータベースに接続できません。<br />$1',
+'nodb'                 => 'データベース $1 を選択できません。',
+'cachederror'          => 'あなたがアクセスしたページのコピーを保存したものを表示しています。また、コピーは更新されません。',
+'laggedslavemode'      => '警告: ページに最新の編集が反映されていない可能性があります。反映されるまでしばらくお待ちください。',
+'readonly'             => 'データベースはロックされています',
+'enterlockreason'      => 'ロックする理由を入力してください。ロックが解除されるのがいつになるかの見積もりについても述べてください。',
+'readonlytext'         => 'データベースは現在、新しいページの追加や編集を受け付けない「ロック状態」になっています。これはおそらく定期的なメンテナンスのためで、メンテナンス終了後は正常な状態に復帰します。データベースをロックしたサーバー管理者は次のような説明をしています:
+
+$1
+
+----
+The database is currently locked to new entries and other modifications, probably for routine database maintenance, after which it will be back to normal. The administrator who locked it offered this explanation:
+
+$1',
+'missingarticle'       => '<p>"$1" という題のページは見つかりませんでした。すでに削除された版を参照しようとしている可能性があります。これがソフトウェアのバグだと思われる場合は、URIと共にサーバー管理者に報告して下い。</p>',
+'readonly_lag'         => 'データベースはスレーブ・サーバーがマスタ・サーバーに同期するまで自動的にロックされています。しばらくお待ちください。',
+'internalerror'        => '内部処理エラー',
+'filecopyerror'        => 'ファイル "$1" から "$2" へのコピーに失敗しました。',
+'filerenameerror'      => 'ファイル名を "$1" から "$2" へ変更できませんでした。',
+'filedeleteerror'      => 'ファイル "$1" の削除に失敗しました。',
+'filenotfound'         => 'ファイル "$1" が見つかりません。',
+'unexpected'           => '値が異常です: $1 = "$2"',
+'formerror'            => 'エラー: フォームの送信に失敗しました。',
+'badarticleerror'      => 'このページでは要求された処理を行えません。',
+'cannotdelete'         => '指定されたページ、または画像の削除に失敗しました。',
+'badtitle'             => 'ページタイトルの間違い',
+'badtitletext'         => '要求されたページは無効か、何もないか、正しくない inter-language または inter-wiki のタイトルです。',
+'perfdisabled'         => 'この機能はデータベースの負荷を軽くするために現在使えなくなっています。',
+'perfdisabledsub'      => 'ここには $1 のコピーを表示しています。', # obsolete?
+'perfcached'           => '以下のデータはキャッシュであり、しばらく更新されていません。',
+'perfcachedts'         => '以下のデータは $1 に最終更新されたキャッシュです。',
+'querypage-no-updates' => 'ページの更新は無効になっています。以下のデータの更新は現在行われていません。',
+'wrong_wfQuery_params' => 'wfQuery()へ誤った引数が渡されました。<br />
+関数: $1<br />
+クエリ: $2',
+'viewsource'           => 'ソースを表示',
+'viewsourcefor'        => '$1 のソース',
+'protectedpagetext'    => 'このページは編集できないように保護されています。',
+'viewsourcetext'       => '以下にソースを表示しています:',
+'protectedinterface'   => 'このページはソフトウェアのインターフェースに使用されるテキストが保存されおり、問題回避のために保護されています。',
+'editinginterface'     => "'''警告:''' あなたはソフトウェアのインターフェースに使用されているテキストを編集しています。このページの変更はすべての利用者に影響します。",
+'sqlhidden'            => '（SQLクエリー非表示）',
+'cascadeprotected'     => 'このページはカスケード保護されている以下のページから呼び出されているため、編集できないように保護されています。',
+
+# Login and logout pages
+'logouttitle'                => 'ログアウト',
+'logouttext'                 => '<p><strong>ログアウトしました。</strong>このまま{{SITENAME}}を匿名で使い続けることができます。もう一度ログインして元の、あるいは別の利用者として使うこともできます。</p>
+<p>※いくつかのページはブラウザのキャッシュをクリアするまでログインしているかのように表示されることがあります。</p>',
+'welcomecreation'            => '== $1 さん、ようこそ! ==
+あなたのアカウントができました。お好みに合わせて[[Special:Preferences|オプション]]を変更することをお忘れなく。',
+'loginpagetitle'             => 'ログイン',
+'yourname'                   => '利用者名',
+'yourpassword'               => 'パスワード',
+'yourpasswordagain'          => 'パスワード再入力',
+'remembermypassword'         => 'セッションを越えてパスワードを記憶する',
+'yourdomainname'             => 'あなたのドメイン',
+'externaldberror'            => '外部の認証データベースでエラーが発生たか、または外部アカウント情報の更新が許可されていません。',
+'loginproblem'               => '<b>ログインでエラーが発生しました。</b><br />再度実行してください。',
+'alreadyloggedin'            => '<strong>利用者 $1 は、すでにログイン済みです。</strong><br />',
+'login'                      => 'ログイン',
+'loginprompt'                => '{{SITENAME}}にログインするにはクッキーを有効にする必要があります。',
+'userlogin'                  => 'ログインまたはアカウント作成',
+'logout'                     => 'ログアウト',
+'userlogout'                 => 'ログアウト',
+'notloggedin'                => 'ログインしていません',
+'nologin'                    => 'アカウントはお持ちですか? $1',
+'nologinlink'                => 'アカウントを作成',
+'createaccount'              => 'アカウント作成',
+'gotaccount'                 => 'すでにアカウントをお持ちの場合: $1',
+'gotaccountlink'             => 'ログイン',
+'createaccountmail'          => 'メールで送信',
+'badretype'                  => '両方のパスワードが一致しません。',
+'userexists'                 => 'その利用者名はすでに使われています。ほかの名前をお選びください。',
+'youremail'                  => 'メールアドレス*:',
+'username'                   => '利用者名:',
+'uid'                        => '利用者ID:',
+'yourrealname'               => '本名*:',
+'yourlanguage'               => 'インターフェース言語:',
+'yourvariant'                => '字体変換',
+'yournick'                   => 'ニックネーム（署名用）:',
+'badsig'                     => '署名が正しくありません。HTMLタグを見直してください。',
+'email'                      => 'メールアドレス',
+'prefs-help-email-enotif'    => 'このアドレスはあなたが有効にした各種メール通知の送信先としても利用されます。',
+'prefs-help-realname'        => '* 本名 (任意): 本名を入力すると、ページ・クレジットに利用者名（アカウント名）の代わりに本名が表示されます。',
+'loginerror'                 => 'ログイン失敗',
+'prefs-help-email'           => '* メールアドレス (任意): メールアドレスを入力すると、他の利用者からのウィキメールを受け取ることができるようになります。この時点ではあなたのメールアドレスはその利用者に知られることはありません。ただし、あなたから送信すれば、あなたのメールアドレスは先方に通知されます。',
+'nocookiesnew'               => '利用者のアカウントは作成されましたが、ログインしていません。{{SITENAME}}ではログインにクッキーを使います。あなたはクッキーを無効な設定にしているようです。クッキーを有効にしてから作成した利用者名とパスワードでログインしてください。',
+'nocookieslogin'             => '{{SITENAME}}ではログインにクッキーを使います。あなたはクッキーを無効な設定にしているようです。クッキーを有効にして、もう一度試してください。',
+'noname'                     => '利用者名を正しく指定していません。',
+'loginsuccesstitle'          => 'ログイン成功',
+'loginsuccess'               => "'''{{SITENAME}} に \"\$1\" としてログインしました。'''",
+'nosuchuser'                 => '"$1" という利用者は見当たりません。綴りが正しいことを再度確認するか、下記のフォームを使ってアカウントを作成してください。',
+'nosuchusershort'            => '"$1" という利用者は見当たりません。綴りが正しいことを再度確認してください。',
+'nouserspecified'            => '利用者名を指定してください。',
+'wrongpassword'              => 'パスワードが間違っています。再度入力してください。',
+'wrongpasswordempty'         => 'パスワードを空にすることはできません。再度入力してください。',
+'mailmypassword'             => '新しいパスワードをメールで送る',
+'passwordremindertitle'      => '{{SITENAME}} パスワード再送通知',
+'passwordremindertext'       => 'どなたか（$1 のIPアドレスの使用者）が{{SITENAME}} ($4) のログイン用パスワードの再発行を依頼しました。
+
+利用者 "$2" のパスワードを "$3" に変更しました。
+ログインして別のパスワードに変更してください。',
+'noemail'                    => '利用者 "$1" のメールアドレスは登録されていません。',
+'passwordsent'               => '新しいパスワードを "$1" さんの登録済みメールアドレスに送信しました。メールを受け取ったら、再度ログインしてください。',
+'blocked-mailpassword'       => 'あなたの使用しているIPアドレスからの編集はブロックされています。悪用防止のため、パスワードの再発行は無効化されています。',
+'eauthentsent'               => '指定されたメールアドレスにアドレス確認のためのメールを送信しました。このアカウントが本当にあなたのものであるか確認するため、あなたがメールの内容に従わない限り、その他のメールはこのアカウント宛には送信されません。',
+'throttled-mailpassword'     => '新しいパスワードは $1 時間以内に送信済みです。悪用防止のため、パスワードは $1 時間間隔で再発行可能となります。',
+'mailerror'                  => 'メールの送信中にエラーが発生しました: $1',
+'acct_creation_throttle_hit' => 'あなたは既に $1 アカウントを作成しています。これ以上作成できません。',
+'emailauthenticated'         => 'あなたのメールアドレスは $1 に確認されています。',
+'emailnotauthenticated'      => 'あなたのメールアドレスは確認されていません。確認されるまで以下のいかなるメールも送られません。',
+'noemailprefs'               => '<strong>これらの機能を有効にするにはメールアドレスを登録してください。</strong>',
+'emailconfirmlink'           => 'メールアドレスを確認する',
+'invalidemailaddress'        => '入力されたメールアドレスが正しい形式に従っていないため、受け付けられません。正しい形式で入力し直すか、メールアドレス欄を空にしてください。',
+'accountcreated'             => 'アカウントを作成しました',
+'accountcreatedtext'         => '利用者 $1 が作成されました。',
+
+# Password reset dialog
+'resetpass'               => 'パスワードの再設定',
+'resetpass_announce'      => 'メールで送信した臨時パスワードでログインしています。ログインを完了するには、新しいパスワードを設定しなおす必要があります。',
+'resetpass_text'          => '<!-- ここにテキストを挿入 -->',
+'resetpass_header'        => 'パスワードを設定しなおす',
+'resetpass_submit'        => '再設定してログイン',
+'resetpass_success'       => 'あなたのパスワードは変更されました。ログインしています...',
+'resetpass_bad_temporary' => '無効な臨時パスワードです。パスワードは既に再設定されているか、再びパスワード通知メールが送信されています。',
+'resetpass_forbidden'     => 'このウィキでは、パスワードの変更は許可されていません。',
+'resetpass_missing'       => 'データがセットされていません。',
+
+# Edit page toolbar
+'bold_sample'     => '強い強調（太字）',
+'bold_tip'        => '強い強調（太字）',
+'italic_sample'   => '弱い強調（斜体）',
+'italic_tip'      => '弱い強調（斜体）',
+'link_sample'     => '項目名',
+'link_tip'        => '内部リンク',
+'extlink_sample'  => 'http://www.example.com リンクのタイトル',
+'extlink_tip'     => '外部リンク（http:// を忘れずにつけてください）',
+'headline_sample' => '見出し',
+'headline_tip'    => '標準の見出し',
+'math_sample'     => '\int f(x)dx',
+'math_tip'        => '数式 (LaTeX)',
+'nowiki_sample'   => 'そのまま表示させたい文字を入力',
+'nowiki_tip'      => '入力文字をそのまま表示',
+'image_sample'    => 'Example.jpg',
+'image_tip'       => '埋め込み画像',
+'media_sample'    => 'Example.mp3',
+'media_tip'       => 'メディアファイル（音声）へのリンク',
+'sig_tip'         => '時刻つきの署名',
+'hr_tip'          => '水平線（利用は控えめに）',
+
+# Edit pages
+'summary'                   => '編集内容の要約',
+'subject'                   => '題名・見出し',
+'minoredit'                 => 'これは細部の編集です',
+'watchthis'                 => 'ウォッチリストに追加',
+'savearticle'               => '保存する',
+'preview'                   => 'プレビュー',
+'showpreview'               => 'プレビューを実行',
+'showlivepreview'           => 'ライブプレビュー',
+'showdiff'                  => '差分を表示',
+'anoneditwarning'           => 'あなたはログインしていません。あなたのIPアドレスはこの項目の履歴に記録されます。',
+'missingsummary'            => "'''注意:''' 要約欄が空欄です。投稿ボタンをもう一度押すと、要約なしのまま投稿されます。",
+'missingcommenttext'        => '以下にコメントを入力してください。',
+'missingcommentheader'      => "'''注意:''' 題名・見出しが空欄です。投稿ボタンをもう一度押すと、要約なしのまま投稿されます。",
+'summary-preview'           => '要約のプレビュー',
+'subject-preview'           => '題名・見出しのプレビュー',
+'blockedtitle'              => '投稿ブロック',
+'blockedtext'               => 'ご使用の利用者名またはIPアドレスは $1 によって投稿をブロックされています。その理由は次の通りです。
+:$2
+
+$1 または他の[[{{int:grouppage-sysop}}|{{int:group-sysop}}]]にこの件についてメールで問い合わせることができます。ただし、[[Special:Preferences|オプション]]に正しいメールアドレスが登録されていない場合、「{{int:emailuser}}」機能が使えないことに注意してください。
+
+あなたのIPアドレスは「$3」、ブロックIDは &#x23;$5 です。問い合わせを行う際には、この情報を必ず書いてください。',
+'blockedoriginalsource'     => "以下に '''$1''' のソースを示します:",
+'blockededitsource'         => "'''$1''' への '''あなたの編集''' を以下に示します:",
+'whitelistedittitle'        => '編集にはログインが必要',
+'whitelistedittext'         => 'このページを編集するには $1 する必要があります。',
+'whitelistreadtitle'        => '閲覧にはログインが必要',
+'whitelistreadtext'         => 'このページを閲覧するには[[Special:Userlogin|ログイン]]する必要があります。',
+'whitelistacctitle'         => 'アカウントの作成は許可されていません',
+'whitelistacctext'          => '{{SITENAME}}のアカウントを作成するには、適切な権限を持った利用者名で[[Special:Userlogin|ログイン]]する必要があります。',
+'confirmedittitle'          => '編集にはメールアドレスの確認が必要です。',
+'confirmedittext'           => 'ページの編集を始める前にメールアドレスの確認をする必要があります。[[Special:Preferences|オプション]]でメールアドレスを設定し、確認を行ってください。',
+'nosuchsectiontitle'        => 'セクションが存在しません',
+'nosuchsectiontext'         => "指定されたセクションはありません。セクション $1 はありませんでしたので、セクション編集は無効となります。編集内容は保存されません。",
+'loginreqtitle'             => 'ログインが必要',
+'loginreqlink'              => 'ログイン',
+'loginreqpagetext'          => '他のページを閲覧するには$1する必要があります。',
+'accmailtitle'              => 'パスワードを送信しました',
+'accmailtext'               => '"$1" のパスワードを $2 に送信しました。',
+'newarticle'                => '（新規）',
+'newarticletext'            => 'ページを新規に作成するには新しい内容を書き込んでください。',
+'anontalkpagetext'          => "----
+''これはアカウントをまだ作成していないか、あるいは使っていない匿名利用者のための会話ページです。{{SITENAME}}では匿名利用者の識別は利用者名のかわりにIPアドレスを用います。IPアドレスは何人かで共有されることがあります。もしも、あなたが匿名利用者で無関係なコメントがここに寄せられる場合は、[[Special:Userlogin|アカウントを作成するかログインして]]他の匿名利用者と間違えられないようにしてくださるようお願いします。",
+'noarticletext'             => '現在このページには内容がありません。他のページから[[{{ns:special}}:Search/{{PAGENAME}}|このページタイトルを検索する]]か、[{{fullurl:{{FULLPAGENAME}}|action=edit}} このページを編集]できます。',
+'clearyourcache'            => "'''お知らせ:''' 保存した後、ブラウザのキャッシュをクリアする必要があります。'''Mozilla / Firefox / Safari:''' [Shift] を押しながら [再読み込み] をクリック、または [Shift]-[Ctrl]-[R] (Macでは [Cmd]-[Shift]-[R]); '''IE:''' [Ctrl] を押しながら [更新] をクリック、または [Ctrl]-[F5]; '''Konqueror:''' [再読み込み] をクリック、または [F5]; '''Opera:''' 「ツール」→「設定」からキャッシュをクリア。",
+'usercssjsyoucanpreview'    => '<strong>ヒント:</strong> 「{{int:showpreview}}」ボタンを使うと保存前に新しいスタイルシート・スクリプトをテストできます。',
+'usercsspreview'            => "'''あなたはユーザースタイルシートをプレビューしています。まだ保存されていないので注意してください。'''",
+'userjspreview'             => "'''あなたはユーザースクリプトをテスト・プレビューしています。まだ保存されていないので注意してください。'''",
+'userinvalidcssjstitle'     => "'''警告:''' \"\$1\" という外装はありません。.css と .js ページを編集する際にはタイトルを小文字にすることを忘れないでください。例えば {{ns:user}}:Hoge/Monobook.css ではなく {{ns:user}}:Hoge/monobook.css となります。",
+'updated'                   => '（更新）',
+'note'                      => '<strong>お知らせ:</strong>',
+'previewnote'               => 'これはプレビューです。まだ保存されていません!',
+'previewconflict'           => 'このプレビューは、上の文章編集エリアの文章を保存した場合にどう見えるようになるかを示すものです。',
+'session_fail_preview'      => '<strong>セッションが切断されたため編集を保存できません。もう一度やりなおしてください。それでも失敗する場合、ログアウトしてからログインし直してください。</strong>',
+'session_fail_preview_html' => '<strong>セッションデータが見つからないため、あなたの編集を保存することができませんでした。</strong>
+
+このウィキでは raw HTML の記述を許可しており、JavaScript でのアタックを予防するためにプレビューを隠しています。
+
+<strong>この編集が問題ないものであるならば再度保存してください。それでもうまくいかない際には一度ログアウトして、もう一度ログインしてみてください。</strong>',
+'importing'                 => '$1 をインポート中',
+'editing'                   => '$1 を編集中',
+'editinguser'               => '$1 を編集中',
+'editingsection'            => '$1 を編集中（節単位編集）',
+'editingcomment'            => '$1 を編集中（新規コメント）',
+'editconflict'              => '編集競合: $1',
+'explainconflict'           => 'あなたがこのページを編集し始めた後に、他の誰かがこのページを変更しました。上側のテキストエリアは現在の最新の状態です。あなたの編集していた文章は下側のテキストエリアに示されています。編集していた文章を、上側のテキストエリアの文章に組み込んでください。<strong>上側のテキストエリアの内容だけ</strong>が、「{{int:Savearticle}}」をクリックした時に実際に保存されます。',
+'yourtext'                  => 'あなたの文章',
+'storedversion'             => '保存された版',
+'nonunicodebrowser'         => '<strong>警告: あなたの使用しているブラウザはUnicode互換ではありません。項目を編集する前にブラウザを変更してください。</strong>',
+'editingold'                => '<strong>警告: あなたはこのページの古い版を編集しています。もしこの文章を保存すると、この版以降に追加された全ての変更が無効になってしまいます。</strong>',
+'yourdiff'                  => 'あなたの更新内容',
+'copyrightwarning'          => "'''■投稿する前に以下を確認してください■'''
+* {{SITENAME}}に投稿された文書は、すべて$2（詳細は$1を参照）によって公開されることに同意してください。
+* あなたの文章が他人によって自由に編集、配布されることを望まない場合は、投稿を控えてください。
+* あなたの投稿する文章はあなた自身によって書かれたものであるか、パブリック・ドメインかそれに類する自由なリソースからの複製であることを約束してください。'''あなたが著作権を保持していない作品を許諾なしに投稿してはいけません!'''",
+'copyrightwarning2'         => "'''■投稿する前に以下を確認してください■'''
+* あなたの文章が他人によって自由に編集、配布されることを望まない場合は、投稿を控えてください。
+* あなたの投稿する文章はあなた自身によって書かれたものであるか、パブリック・ドメインかそれに類する自由なリソースからの複製であることを約束してください（詳細は$1を参照）。'''あなたが著作権を保持していない作品を許諾なしに投稿してはいけません!'''",
+'longpagewarning'           => "'''警告:''' このページのサイズは $1 キロバイトです。一部の古いブラウザでは 32 キロバイト以上のページを編集すると問題が起きるものがあります。ページを節に分けることを検討してください。",
+'longpageerror'             => '<strong>エラー: あなたが投稿したテキストは $1 キロバイトの長さがあります。これは投稿できる最大の長さである $2 キロバイトを超えています。この編集を保存することはできません。</strong>',
+'readonlywarning'           => '<strong>警告: データベースがメンテナンスのためにロックされています。現在は編集結果を保存できません。文章をカットアンドペーストしてローカルファイルとして保存し、後ほど保存をやり直してください。</strong>',
+'protectedpagewarning'      => "'''警告:''' このページは保護されています。{{int:group-sysop}}しか編集できません。",
+'semiprotectedpagewarning'  => "'''お知らせ:''' このページは登録利用者のみが編集できるよう保護されています。",
+'cascadeprotectedwarning'   => "'''警告:''' このページはカスケード保護されている以下のページから呼び出されているため、{{int:group-sysop}}しか編集できません。",
+'templatesused'             => 'このページで使われているテンプレート:',
+'templatesusedpreview'      => 'このプレビューで使われているテンプレート:',
+'templatesusedsection'      => 'この節で使われているテンプレート:',
+'template-protected'        => '（保護）',
+'template-semiprotected'    => '（半保護）',
+'edittools'                 => '<!-- ここに書いたテキストは編集及びアップロードのフォームの下に表示されます。 -->',
+'nocreatetitle'             => 'ページを作成できません',
+'nocreatetext'              => 'このサイトではページの新規作成を制限しています。元のページに戻って既存のページを編集するか、[[Special:Userlogin|ログイン]]してください。',
+
+# "Undo" feature
+'undo-success' => '編集の取り消しに成功しました。保存ボタンを押すと変更が確定されます。',
+'undo-failure' => '中間の版での編集と競合したため、自動取り消しできませんでした。',
+'undo-summary' => '[[Special:Contributions/$2|$2]] ([[User talk:$2|会話]]) の編集 ( $1 版 ) を取り消し',
+
+# Account creation failure
+'cantcreateaccounttitle' => 'アカウントを作成できません',
+'cantcreateaccounttext'  => 'このIPアドレス (<b>$1</b>) からのアカウント作成はブロックされています。',
+
+# History pages
+'revhistory'          => '変更履歴',
+'viewpagelogs'        => 'このページに関するログを見る',
+'nohistory'           => 'このページには変更履歴がありません。',
+'revnotfound'         => '要求された版が見つかりません。',
+'revnotfoundtext'     => '要求されたこのページの旧版は見つかりませんでした。このページにアクセスしたURLをもう一度確認してください。',
+'loadhist'            => '変更履歴の読み込み中',
+'currentrev'          => '最新版',
+'revisionasof'        => '$1の版',
+'revision-info'       => '$1; $2 による版',
+'previousrevision'    => '←前の版',
+'nextrevision'        => '次の版→',
+'currentrevisionlink' => '最新版を表示',
+'cur'                 => '最新版',
+'next'                => '次の版',
+'last'                => '前の版',
+'orig'                => '最古版',
+'page_first'          => '先頭',
+'page_last'           => '末尾',
+'histlegend'          => '凡例:（最新版）= 最新版との比較、（前の版）= 直前の版との比較、<strong>{{int:minoreditletter}}</strong> = 細部の編集',
+'deletedrev'          => '[削除済み]',
+'histfirst'           => '最古',
+'histlast'            => '最新',
+'historysize'         => '（$1 バイト）',
+'historyempty'        => '（空です）',
+
+# Revision feed
+'history-feed-title'          => '変更履歴',
+'history-feed-description'    => 'このウィキのこのページに関する変更履歴',
+'history-feed-item-nocomment' => '$2 における $1 による編集', # user at time
+'history-feed-empty'          => '要求したページは存在しません。既に削除されたか移動された可能性があります。 [[Special:Search|このウィキの検索]]で関連する新しいページを探してみてください。',
+
+# Revision deletion
+'rev-deleted-comment'         => '（要約は削除されています）',
+'rev-deleted-user'            => '（投稿者名は削除されています）',
+'rev-deleted-text-permission' => '<div class="mw-warning plainlinks">
+この版は公の履歴から削除されました。[{{fullurl:Special:Log/delete|page={{PAGENAMEE}}}} 削除記録]におそらくログがあります。</div>',
+'rev-deleted-text-view'       => '<div class="mw-warning plainlinks">
+この版は公の履歴から削除されており、このサイトの{{int:group-sysop}}だけが内容を見ることができます。削除の詳細は[{{fullurl:Special:Log/delete|page={{PAGENAMEE}}}} 削除記録]を参照してください。
+</div>',
+'rev-delundel'                => '復帰/削除',
+'revisiondelete'              => '版の削除と復帰',
+'revdelete-nooldid-title'     => '対象版がありません',
+'revdelete-nooldid-text'      => '操作の完了に必要な版が指定されていません。',
+'revdelete-selected'          => '[[:$1]]の、以下の選択された版に対する操作:',
+'revdelete-text'              => '版の削除ではページの履歴にその版は表示されます。しかしその版に含まれるテキストにはアクセスできなくなります。
+
+サーバー管理者にこれ以上の制限をかけられない限り、他の{{int:group-sysop}}は隠れた版を読んだり、元に戻したりできます。',
+'revdelete-legend'            => '版の削除の適用',
+'revdelete-hide-text'         => '版のテキストを隠す',
+'revdelete-hide-comment'      => '編集の要約を隠す',
+'revdelete-hide-user'         => '版の投稿者を隠す',
+'revdelete-hide-restricted'   => 'これらの制限を{{int:group-sysop}}にも適用する',
+'revdelete-log'               => '要約:',
+'revdelete-submit'            => '隠蔽の設定を適用',
+'revdelete-logentry'          => '[[$1]]の版の削除情報を操作しました',
+
+# Diffs
+'difference'                => '版間での差分',
+'loadingrev'                => '差分をとるために古い版を読み込んでいます',
+'lineno'                    => '$1 行',
+'editcurrent'               => 'このページの最新版を編集',
+'selectnewerversionfordiff' => '比較する新しい版を選択',
+'selectolderversionfordiff' => '比較する古い版を選択',
+'compareselectedversions'   => '選択した版同士を比較',
+'editundo'                  => '取り消し',
+'diff-multi'                => '（間の $1 版分が非表示です）',
+
+# Search results
+'searchresults'         => '検索結果',
+'searchresulttext'      => '{{SITENAME}}の検索に関する詳しい情報は、[[{{int:Searching-url}}]]をご覧ください。',
+'searchsubtitle'        => '問い合わせ: "[[:$1]]"',
+'searchsubtitleinvalid' => '問い合わせ: "$1"',
+'badquery'              => 'おかしな形式の検索問い合わせ',
+'badquerytext'          => '問い合わせを処理できませんでした。おそらく3文字未満の語を検索しようとしたためですが、まだ対応していません。例えば「魚 and and 大きさ」のように、表現を誤記しているのかもしれません。',
+'matchtotals'           => '"$1" を検索し、 $2 の項目名及び $3 ページの本文と一致しました。',
+'noexactmatch'          => '"$1" という名称のページは存在しませんでした。[[:$1|新規作成する]]。',
+'titlematches'          => '項目名と一致',
+'notitlematches'        => '項目名とは一致しませんでした',
+'textmatches'           => 'ページ内本文と一致',
+'notextmatches'         => 'ページ内本文とは一致しませんでした',
+'prevn'                 => '前 $1',
+'nextn'                 => '次 $1',
+'viewprevnext'          => '（$1）（$2）（$3）を見る',
+'showingresults'        => '<b>$2</b> 件目から <b>$1</b> 件を表示しています。',
+'showingresultsnum'     => '<b>$2</b> 件目から <b>$3</b> 件を表示しています。',
+'nonefound'             => "'''※'''検索がうまくいかないのは、「ある」や「から」のような一般的な語で索引付けがされていないか、複数の検索語を指定している（全ての検索語を含むページだけが結果に示されます）などのためかもしれません。",
+'powersearch'           => '検索',
+'powersearchtext'       => '検索する名前空間 :<br />
+$1<br />
+$2リダイレクトを含める &nbsp; &nbsp; &nbsp; $3 $9',
+'searchdisabled'        => '<p>全文検索はサーバー負荷の都合から、一時的に使用停止しています。元に戻るまでGoogleでの全文検索を利用してください。検索結果は少し古い内容となります。</p>',
+'blanknamespace'        => '（標準）',
+
+# Preferences page
+'preferences'              => 'オプション',
+'mypreferences'            => 'オプション',
+'prefsnologin'             => 'ログインしていません',
+'prefsnologintext'         => 'オプションを変更するためには、[[Special:Userlogin|ログイン]]する必要があります。',
+'prefsreset'               => 'オプションは初期化されました。',
+'qbsettings'               => 'クイックバー設定',
+'qbsettings-none'          => 'なし',
+'qbsettings-fixedleft'     => '左端',
+'qbsettings-fixedright'    => '右端',
+'qbsettings-floatingleft'  => 'ウィンドウの左上に固定',
+'qbsettings-floatingright' => 'ウィンドウの右上に固定',
+'changepassword'           => 'パスワード変更',
+'skin'                     => '外装',
+'math'                     => '数式',
+'dateformat'               => '日付の書式',
+'datedefault'              => '選択なし',
+'datetime'                 => '日付と時刻',
+'math_failure'             => '構文解析失敗',
+'math_unknown_error'       => '不明なエラー',
+'math_unknown_function'    => '不明な関数',
+'math_lexing_error'        => '字句解析エラー',
+'math_syntax_error'        => '構文エラー',
+'math_image_error'         => 'PNGへの変換に失敗しました。latex, dvips, gs, convertが正しくインストールされているか確認してください。',
+'math_bad_tmpdir'          => 'TeX一時ディレクトリを作成または書き込みできません',
+'math_bad_output'          => 'TeX出力用ディレクトリを作成または書き込みできません',
+'math_notexvc'             => 'texvcプログラムが見つかりません。math/READMEを読んで正しく設定してください。',
+'prefs-personal'           => '利用者情報',
+'prefs-rc'                 => '最近更新したページ',
+'prefs-watchlist'          => 'ウォッチリスト',
+'prefs-watchlist-days'     => 'ウォッチリストに表示する日数:',
+'prefs-watchlist-edits'    => '拡張したウォッチリストに表示する件数:',
+'prefs-misc'               => 'その他',
+'saveprefs'                => '設定の保存',
+'resetprefs'               => '設定の初期化',
+'oldpassword'              => '古いパスワード:',
+'newpassword'              => '新しいパスワード:',
+'retypenew'                => '新しいパスワードを再入力:',
+'textboxsize'              => '編集画面',
+'rows'                     => '縦:',
+'columns'                  => '横:',
+'searchresultshead'        => '検索',
+'resultsperpage'           => '1ページあたりの表示件数:',
+'contextlines'             => '1件あたりの行数:',
+'contextchars'             => '1行あたりの文字数:',
+'stubthreshold'            => 'スタブ表示にする閾値:',
+'recentchangesdays'        => '最近更新したページの表示日数:',
+'recentchangescount'       => '最近更新したページの表示件数:',
+'savedprefs'               => 'オプションを保存しました',
+'timezonelegend'           => 'タイムゾーン',
+'timezonetext'             => 'UTCとあなたの地域の標準時間との差を入力してください（日本国内は9:00）。',
+'localtime'                => 'あなたの現在時刻',
+'timezoneoffset'           => '時差¹',
+'servertime'               => 'サーバーの現在時刻',
+'guesstimezone'            => '自動設定',
+'allowemail'               => '他の利用者からのメールの受け取りを許可する',
+'defaultns'                => '標準で検索する名前空間:',
+'default'                  => 'デフォルト',
+'files'                    => '画像等',
+
+# User rights
+'userrights-lookup-user'     => '利用者の所属グループの管理',
+'userrights-user-editname'   => '利用者名:',
+'editusergroup'              => '編集',
+'userrights-editusergroup'   => '利用者の所属グループ',
+'saveusergroups'             => '利用者の所属グループを保存',
+'userrights-groupsmember'    => '所属グループ:',
+'userrights-groupsavailable' => '有効なグループ:',
+'userrights-groupshelp'      => 'この利用者から削除したい、またはこの利用者に追加したいグループを選択してください。選択されていないグループは変更されません。選択を解除するには [CTRL]+[左クリック] です。',
+'userrights-reason'          => '変更理由:',
+
+# Groups
+'group'            => 'グループ:',
+'group-bot'        => 'ボット',
+'group-sysop'      => '管理者',
+'group-bureaucrat' => 'ビューロクラット',
+'group-all'        => '（すべて）',
+
+'group-bot-member'        => '{{int:group-bot}}',
+'group-sysop-member'      => '{{int:group-sysop}}',
+'group-bureaucrat-member' => '{{int:group-bureaucrat}}',
+
+'grouppage-bot'        => 'Project:{{int:group-bot}}',
+'grouppage-sysop'      => 'Project:{{int:group-sysop}}',
+'grouppage-bureaucrat' => 'Project:{{int:group-bureaucrat}}',
+
+# User rights log
+'rightslog'      => '権限変更記録',
+'rightslogtext'  => '以下は利用者権限変更の一覧です。',
+'rightslogentry' => '$1 の権限を $2 から $3 へ変更しました。',
+'rightsnone'     => '（権限なし）',
+
+# Recent changes
+'nchanges'                          => '$1 回の更新',
+'recentchanges'                     => '最近更新したページ',
+'recentchangestext'                 => '最近付け加えられた変更はこのページで確認できます。',
+'recentchanges-feed-description'    => '最近付け加えられた変更はこのフィードで確認できます。',
+'rcnote'                            => '以下は $3 までの <strong>$2</strong> 日間に編集された <strong>$1</strong> ページです（<strong>{{int:newpageletter}}</strong>=新規項目、<strong>{{int:minoreditletter}}</strong>=細部の編集、<strong>{{int:boteditletter}}</strong>=ボットの編集、日時はオプションで未設定ならUTC）',
+'rcnotefrom'                        => '以下は <b>$2</b> までの更新です。（最大 <b>$1</b> 件）',
+'rclistfrom'                        => '$1以後現在までの更新を表示',
+'rcshowhideminor'                   => '細部の編集を$1',
+'rcshowhidebots'                    => 'ボットの編集を$1',
+'rcshowhideliu'                     => '登録利用者の編集を$1',
+'rcshowhideanons'                   => '匿名利用者の編集を$1',
+'rcshowhidepatr'                    => 'パトロールされた編集を$1',
+'rcshowhidemine'                    => '自分の編集を$1',
+'rclinks'                           => '最近 $2 日間の $1 件分を表示する<br />$3',
+'diff'                              => '差分',
+'hist'                              => '履歴',
+'hide'                              => '隠す',
+'show'                              => '表示',
+'minoreditletter'                   => 'M',
+'newpageletter'                     => 'N',
+'boteditletter'                     => 'b',
+'sectionlink'                       => '→',
+'number_of_watching_users_pageview' => '[$1人がウォッチしています]',
+'rc_categories'                     => 'カテゴリを制限（"|" で区切る）',
+'rc_categories_any'                 => 'すべて',
+
+# Recent changes linked
+'recentchangeslinked' => 'リンク先の更新状況',
+'recentchangeslinked-noresult' => '指定期間中に指定ページのリンク先に更新はありませんでした。',
+
+# Upload
+'upload'                      => 'アップロード',
+'uploadbtn'                   => 'アップロード',
+'reupload'                    => '再アップロード',
+'reuploaddesc'                => 'アップロードのフォームへ戻る',
+'uploadnologin'               => 'ログインしていません',
+'uploadnologintext'           => 'ファイルをアップロードするには[[Special:Userlogin|ログイン]]する必要があります。',
+'upload_directory_read_only'  => 'アップロード先のディレクトリ ($1) にウェブサーバーが書き込めません。',
+'uploaderror'                 => 'アップロード エラー',
+'uploadtext'                  => "ファイルを新しくアップロードする場合には、以下のフォームを利用してください。
+* 過去にアップロードされた画像は[[Special:Imagelist|{{int:imagelist}}]]で閲覧したり探したりできます。
+* アップロードや削除は[[Special:Log|ログ]]に記録されます。
+* 「{{int:uploadbtn}}」ボタンを押すと、アップロードが完了します。
+ページに画像を挿入するには
+* '''&#91;&#91;{{ns:image}}:File.jpg]]'''
+* '''&#91;&#91;{{ns:image}}:File.png|thumb|代替テキスト]]'''
+といった書式を使います。<br />画像ページではなくファイルに直接リンクするには
+* '''&#91;&#91;{{ns:media}}:File.ogg]]'''
+とします。",
+'uploadlog'                   => 'アップロードログ',
+'uploadlogpage'               => 'アップロード記録',
+'uploadlogpagetext'           => '以下は最近のファイルのアップロードのログです。',
+'filename'                    => 'ファイル名',
+'filedesc'                    => 'ファイルの概要',
+'fileuploadsummary'           => 'ファイルの概要:',
+'filestatus'                  => '著作権情報',
+'filesource'                  => 'ファイルの出典',
+'uploadedfiles'               => 'アップロードされたファイル',
+'ignorewarning'               => '警告を無視し、保存してしまう',
+'ignorewarnings'              => '警告を無視',
+'minlength'                   => 'ファイル名は3文字以上である必要があります。',
+'illegalfilename'             => 'ファイル名 "$1" にページ・タイトルとして使えない文字が含まれています。ファイル名を変更してからもう一度アップロードしてください。',
+'badfilename'                 => 'ファイル名は "$1" へ変更されました。',
+'filetype-badmime'            => 'MIME タイプ "$1" のファイルのアップロードは許可されていません。',
+'filetype-badtype'            => "'''\".\$1\"''' is an unwanted file type
+: List of allowed file types: \$2",
+'filetype-missing'            => 'ファイルに拡張子 (".jpg" など）がありません。',
+'large-file'                  => 'ファイルサイズは $1 バイト以下に抑えることが推奨されています。このファイルは $2 バイトです。',
+'largefileserver'             => 'ファイルが大きすぎます。サーバー設定で許されている最大値を超過しました。',
+'emptyfile'                   => 'あなたがアップロードしようとしているファイルは内容が空であるか、もしくはファイル名の指定が間違っています。もう一度、ファイル名が正しいか、あるいはアップロードしようとしたファイルであるかどうかを確認してください。',
+'fileexists'                  => 'この名前のファイルは既に存在しています。$1と置き換えるかどうかお確かめください。',
+'fileexists-extension'        => '類似した名前のファイルが既に存在しています:<br />
+アップロード中のファイル: <strong><tt>$1</tt></strong><br />
+既存のファイル: <strong><tt>$2</tt></strong><br />
+相違点が拡張子の大文字・小文字だけである。ファイルが本当に違うものであるか、確認してください。',
+'fileexists-thumb'            => "'''<center>既存の画像</center>'''",
+'fileexists-thumbnail-yes'    => 'このファイルは既存の画像のサイズ縮小版（サムネール）である可能性があります。以下のファイルを確認してください: <strong><tt>$1</tt></strong><br />
+確認した画像がオリジナルサイズにおける元画像である場合、追加でサムネールを登録する必要はありません。',
+'file-thumbnail-no'           => 'ファイル名が <strong><tt>$1</tt></strong> から始まっています。画像が縮小版（サムネール）である場合があります。
+より高精細な画像をお持ちの場合は、フルサイズ版をアップロードしてください。そうでない場合はファイル名を変更してください。',
+'fileexists-forbidden'        => 'この名前のファイルは既に存在しています。前のページに戻り、別のファイル名でアップロードし直してください。
+[[Image:$1|thumb|center|$1]]',
+'fileexists-shared-forbidden' => 'この名前のファイルは共有リポジトリに既に存在しています。前のページに戻り、別のファイル名でアップロードし直してください。
+[[Image:$1|thumb|center|$1]]',
+'successfulupload'            => 'アップロード成功',
+'fileuploaded'                => 'ファイル "$1" は無事にアップロードされました。
+
+画像詳細ページ $2 に行き、ファイルについての情報―出典、製作者や時期、その他知っている情報を書き込んでください。
+
+この画像をページに貼り付ける際にはページ内に <tt>&#91;&#91;{{ns:image}}:$1|thumb|画像の説明]]</tt> を挿入してください。',
+'uploadwarning'               => 'アップロード 警告',
+'savefile'                    => 'ファイルを保存',
+'uploadedimage'               => '"$1" をアップロードしました。',
+'uploaddisabled'              => '申し訳ありませんが、アップロードは現在使用できません。',
+'uploaddisabledtext'          => 'このウィキではファイルのアップロードは禁止されています。',
+'uploadscripted'              => 'このファイルはウェブブラウザが誤って解釈してしまうおそれのあるHTMLまたはスクリプトコードを含んでいます。',
+'uploadcorrupt'               => '指定したファイルは壊れているか拡張子が正しくありません。ファイルを確認の上再度アップロードをしてください。',
+'uploadvirus'                 => 'このファイルにはウイルスが含まれています!! &nbsp;詳細: $1',
+'sourcefilename'              => 'ファイル名',
+'destfilename'                => '掲載するファイル名',
+'watchthisupload'             => '画像をウォッチ',
+'filewasdeleted'              => 'アップロードしようとしているファイル名のファイルが以前削除されています。再びアップロードする前に $1 を確認してください。',
+
+'upload-proto-error'      => '不正なプロトコル',
+'upload-proto-error-text' => 'アップロード元のURLは <code>http://</code> か <code>ftp://</code> で始まっている必要があります。',
+'upload-file-error'       => '内部エラー',
+'upload-file-error-text'  => 'サーバーの内部エラーのため、一時ファイルの作成に失敗しました。システムの管理者に連絡してください。',
+'upload-misc-error'       => '不明なエラー',
+'upload-misc-error-text'  => 'アップロード時に不明なエラーが検出されました。指定したURLがアクセス可能で有効なものであるかを再度確認してください。それでもこのエラーが発生する場合は、システムの管理者に連絡してください。',
+
+# Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
+'upload-curl-error6'       => 'URLに到達不能',
+'upload-curl-error6-text'  => '指定したURLに到達できませんでした。URLが正しいものであるか、指定したサイトが現在使用可能かを再度確認してください。',
+'upload-curl-error28'      => 'タイムアウト',
+'upload-curl-error28-text' => '相手サイトからの応答がありませんでした。指定したサイトが現在使用可能かを確認した上で、しばらく待ってもう一度お試しください。また、インターネットが混雑していない時間帯に実行することを推奨します。',
+
+'license'            => 'ライセンス',
+'nolicense'          => 'ライセンス情報を選択してください:',
+'upload_source_url'  => '（インターネット上のURL）',
+'upload_source_file' => '（あなたのコンピューター上のファイル）',
+
+# Image list
+'imagelist'                 => '画像リスト',
+'imagelisttext'             => '$1 枚の画像を $2 に表示しています',
+'imagelistforuser'          => '$1 によってアップロードされた画像のみ表示しています。',
+'getimagelist'              => '画像リストを取得',
+'ilsubmit'                  => '検索',
+'showlast'                  => '$2に $1 枚の画像を表示',
+'byname'                    => '名前順',
+'bydate'                    => '日付順',
+'bysize'                    => 'サイズ順',
+'imgdelete'                 => '削除',
+'imgdesc'                   => '詳細',
+'imgfile'                   => 'ファイル',
+'imglegend'                 => '凡例: （詳細）= 画像の詳細を表示/編集',
+'imghistory'                => '画像の履歴',
+'revertimg'                 => '差戻',
+'deleteimg'                 => '削除',
+'deleteimgcompletely'       => '全版削除',
+'imghistlegend'             => '凡例:（最新）= 最新版の画像、（削除）= この版の画像を削除、（差戻）= この版の画像に差し戻す<br />
+<b>アップロードされた画像を見るには日付をクリックします。</b>',
+'imagelinks'                => 'リンク',
+'linkstoimage'              => 'この画像にリンクしているページの一覧:',
+'nolinkstoimage'            => 'この画像にリンクしているページはありません。',
+'sharedupload'              => 'このファイルは共有されており、他のプロジェクトで使用されている可能性があります。',
+'shareduploadwiki'          => '詳しい情報は$1を参照してください。',
+'shareduploadwiki-linktext' => 'ファイルの詳細ページ',
+'noimage'                   => 'このファイル名の画像はありません。$1。',
+'noimage-linktext'          => 'このファイル名でアップロードする',
+'uploadnewversion-linktext' => 'このファイルの新しいバージョンをアップロードする',
+'imagelist_date'            => '日時',
+'imagelist_name'            => '名前',
+'imagelist_user'            => '利用者',
+'imagelist_size'            => 'サイズ（バイト）',
+'imagelist_description'     => '概要',
+'imagelist_search_for'      => '画像名で検索:',
+
+# MIME search
+'mimesearch'         => 'MIMEタイプ検索',
+'mimesearch-summary' => '指定したMIMEタイプに合致するファイルを検索します。contenttype/subtype の形式で指定してください（例: <tt>image/jpeg</tt>）。',
+'mimetype'           => 'MIMEタイプ:',
+'download'           => 'ダウンロード',
+
+# Unwatched pages
+'unwatchedpages' => 'ウォッチされていないページ',
+
+# List redirects
+'listredirects' => 'リダイレクトの一覧',
+
+# Unused templates
+'unusedtemplates'     => '使われていないテンプレート',
+'unusedtemplatestext' => 'このページでは {{ns:template}} 名前空間にあって他のページから使用されていないものを一覧にしています。削除する前にリンク元を確認してください。',
+'unusedtemplateswlh'  => 'リンク元',
+
+# Random redirect
+'randomredirect' => 'おまかせリダイレクト',
+
+# Statistics
+'statistics'             => 'アクセス統計',
+'sitestats'              => 'サイト全体の統計',
+'userstats'              => '利用者登録統計',
+'sitestatstext'          => "データベース内には'''$1'''ページのデータがあります。この数字には「ノートページ」や「{{SITENAME}}関連のページ」、「書きかけのページ」、「リダイレクト」など、記事とはみなせないページが含まれています。これらを除いた、記事とみなされるページ数は約'''$2'''ページになります。
+
+'''$8'''個のファイルがアップロードされました。
+
+ページの総閲覧回数は'''$3'''回です。また、'''$4'''回の編集が行われました。平均すると、1ページあたり'''$5'''回の編集が行われ、1編集あたり'''$6'''回閲覧されています。
+
+[http://meta.wikimedia.org/wiki/Help:Job_queue job queue] の長さは '''$7''' です。",
+'userstatstext'          => "登録済みの利用者は'''$1'''人で、内'''$2'''人 ('''$4%''') が$5権限を持っています。($3を参照)",
+'statistics-mostpopular' => '最も閲覧されているページ',
+
+'disambiguations'      => '曖昧さ回避ページ',
+'disambiguationspage'  => 'Template:aimai',
+'disambiguations-text' => "以下のページは'''曖昧さ回避ページ'''へリンクしています。これらのページはより適した主題のページへリンクされるべきです。<br />
+[[MediaWiki:disambiguationspage]] からリンクされたテンプレートを使用しているページは曖昧さ回避ページと見なされます。",
+
+'doubleredirects'     => '二重リダイレクト',
+'doubleredirectstext' => '以下はリダイレクトにリンクしているリダイレクトの一覧です。最も左のリダイレクトは二番目のリダイレクトが指している、恐らく「真に」リダイレクトしたいページを指すよう、変更されるべきです。',
+
+'brokenredirects'        => '迷子のリダイレクト',
+'brokenredirectstext'    => '以下は存在しないページにリンクしているリダイレクトです。',
+'brokenredirects-edit'   => '(編集)',
+'brokenredirects-delete' => '(削除)',
+
+'withoutinterwiki'         => '言語間リンクを持たないページ',
+'withoutinterwiki-header'  => '以下のページには多言語版へのリンクがありません:',
+
+'fewestrevisions'         => '編集履歴の少ないページ',
+
+# Miscellaneous special pages
+'nbytes'                  => '$1 バイト',
+'ncategories'             => '$1 のカテゴリ',
+'nlinks'                  => '$1 個のリンク',
+'nmembers'                => '$1 項目',
+'nrevisions'              => '$1 の版',
+'nviews'                  => '$1 回表示',
+'specialpage-empty'       => '合致するものがありません。',
+'lonelypages'             => '孤立しているページ',
+'lonelypagestext'         => '以下のページは、どこからもリンクされていない孤立したページです。',
+'uncategorizedpages'      => 'カテゴリ未導入のページ',
+'uncategorizedcategories' => 'カテゴリ未導入のカテゴリ',
+'uncategorizedimages'     => 'カテゴリ未導入の画像',
+'unusedcategories'        => '使われていないカテゴリ',
+'unusedimages'            => '使われていない画像',
+'popularpages'            => '人気のページ',
+'wantedcategories'        => '作成が望まれているカテゴリ',
+'wantedpages'             => '投稿が望まれているページ',
+'mostlinked'              => '被リンクの多いページ',
+'mostlinkedcategories'    => '項目の多いカテゴリ',
+'mostcategories'          => 'カテゴリの多い項目',
+'mostimages'              => 'リンクの多い画像',
+'mostrevisions'           => '版の多い項目',
+'allpages'                => '全ページ',
+'prefixindex'             => '全ページ (ページ指定)',
+'randompage'              => 'おまかせ表示',
+'shortpages'              => '短いページ',
+'longpages'               => '長いページ',
+'deadendpages'            => '有効なページへのリンクがないページ',
+'deadendpagestext'        => '以下のページは、このウィキの他のページにリンクしていないページです。',
+'protectedpages'          => '保護されているページ',
+'protectedpagestext'      => '以下のページは移動や編集が禁止されています。',
+'protectedpagesempty'     => '現在保護中のページがありません。',
+'listusers'               => '登録利用者の一覧',
+'specialpages'            => '特別ページ',
+'spheading'               => '特別ページ',
+'restrictedpheading'      => '制限のある特別ページ',
+'rclsub'                  => '"$1" からリンクされているページ',
+'newpages'                => '新しいページ',
+'newpages-username'       => '利用者名:',
+'ancientpages'            => '更新されていないページ',
+'intl'                    => '言語間リンク',
+'move'                    => '移動',
+'movethispage'            => 'このページを移動',
+'unusedimagestext'        => '<p>他のウェブサイトがURLを直接用いて画像にリンクしている場合もあります。以下の画像一覧には、そのような形で利用されている画像が含まれている可能性があります。</p>',
+'unusedcategoriestext'    => '以下のカテゴリページはどの項目・カテゴリからも使われていません。',
+
+# Book sources
+'booksources'               => '文献資料',
+'booksources-search-legend' => '文献資料を検索',
+'booksources-isbn'          => 'ISBN:',
+'booksources-go'            => '検索',
+'booksources-text'          => '以下のリストは、新本、古本などを販売している外部サイトへのリンクです。あなたがお探しの本について、更に詳しい情報が提供されている場合もあります。',
+
+'categoriespagetext' => '{{SITENAME}}には以下のカテゴリが存在します。',
+'data'               => 'データ',
+'userrights'         => '利用者権限の管理',
+'groups'             => 'ユーザーグループ',
+'isbn'               => 'ISBN',
+'alphaindexline'     => '$1―$2',
+'version'            => 'バージョン情報',
+
+# Special:Log
+'specialloguserlabel'  => '利用者名:',
+'speciallogtitlelabel' => 'タイトル:',
+'log'                  => 'ログ',
+'alllogstext'          => 'アップロード、削除、保護、投稿ブロック、権限変更のログがまとめて表示されています。ログの種類、実行した利用者、影響を受けたページ（利用者）による絞り込みができます。',
+'logempty'             => '条件にマッチする記録はありません。',
+
+# Special:Allpages
+'nextpage'          => '次のページ（$1）',
+'prevpage'          => '前のページ（$1）',
+'allpagesfrom'      => '表示開始ページ:',
+'allarticles'       => '全ページ',
+'allinnamespace'    => '全ページ ($1 名前空間)',
+'allnotinnamespace' => '全ページ ($1 名前空間を除く)',
+'allpagesprev'      => '前へ',
+'allpagesnext'      => '次へ',
+'allpagessubmit'    => '表示',
+'allpagesprefix'    => '次の文字列から始まるページを表示:',
+'allpagesbadtitle'  => '指定したタイトルは無効か、正しくない inter-language または inter-wiki のタイトルです。ページタイトルに使用できない文字が含まれている可能性があります。',
+
+# Special:Listusers
+'listusersfrom'      => 'この文字から表示:',
+'listusers-submit'   => '表示',
+'listusers-noresult' => '利用者が見つかりませんでした。大文字・小文字の区別を確認してください。',
+
+# E-mail user
+'mailnologin'     => '送信先のアドレスがありません。',
+'mailnologintext' => '他の利用者宛てにメールを送信するためには、[[Special:Userlogin|ログイン]]し、あなたのメールアドレスを[[Special:Preference|オプション]]に設定する必要があります。',
+'emailuser'       => 'この利用者にメールを送信',
+'emailpage'       => 'メール送信ページ',
+'emailpagetext'   => 'メールを送る先の利用者が有効なメールアドレスを{{int:preferences}}で登録していれば、下のフォームを通じてメールを送ることができます。
+あなたが登録したご自分のメールアドレスはFrom:の欄に自動的に組み込まれ、受け取った相手が返事を出せるようになっています。',
+'usermailererror' => 'メール送信時に以下のエラーが発生しました:',
+'defemailsubject' => '{{SITENAME}} (ja) e-mail',
+'noemailtitle'    => '送り先のメールアドレスがありません。',
+'noemailtext'     => 'この利用者は有効なメールアドレスを登録していないか、メールを受け取りたくないというオプションを選択しています。',
+'emailfrom'       => 'あなたのアドレス',
+'emailto'         => 'あて先',
+'emailsubject'    => '題名',
+'emailmessage'    => '本文',
+'emailsend'       => 'メール送信',
+'emailccme'       => '自分宛に控えを送信する',
+'emailccsubject'  => '$1宛てウィキメールの控え: $2',
+'emailsent'       => 'メールを送りました',
+'emailsenttext'   => 'メールは無事送信されました。',
+
+# Watchlist
+'watchlist'            => 'ウォッチリスト',
+'mywatchlist'            => 'ウォッチリスト',
+'watchlistfor'         => "'''$1'''",
+'nowatchlist'          => 'あなたのウォッチリストは空です。',
+'watchlistanontext'    => 'ウォッチリストを確認あるいは編集するには $1 してください。',
+'watchlistcount'       => "'''あなたのウォッチリストにはノートも含めて $1 ページ登録されています。'''",
+'clearwatchlist'       => 'ウォッチリストを消去する',
+'watchlistcleartext'   => 'これらを削除してもよろしいですか?',
+'watchlistclearbutton' => 'ウォッチリストを消去',
+'watchlistcleardone'   => 'あなたのウォッチリストを消去しました。$1 項目を消去しました。',
+'watchnologin'         => 'ログインしていません',
+'watchnologintext'     => 'ウォッチリストを変更するためには、[[Special:Userlogin|ログイン]]している必要があります。',
+'addedwatch'           => 'ウォッチリストに追加しました',
+'addedwatchtext'       => "ページ \"\$1\" をあなたの[[Special:Watchlist|ウォッチリスト]]に追加しました。
+
+このページと、付属のノートのページに変更があった際にはそれをウォッチリストで知ることができます。また、[[Special:Recentchanges|最近更新したページ]]ではウォッチリストに含まれているページは'''ボールド体'''で表示され、見つけやすくなります。
+
+ウォッチリストから特定のページを削除したい場合には、サイドバーかタブにある \"{{int:unwatch}}\" のリンクをクリックしてください。",
+'removedwatch'         => 'ウォッチリストから削除しました',
+'removedwatchtext'     => 'ページ "$1" をウォッチリストから削除しました。',
+'watch'                => 'ウォッチリストに追加',
+'watchthispage'        => 'ウォッチリストに追加',
+'unwatch'              => 'ウォッチリストから削除',
+'unwatchthispage'      => 'ウォッチリストから削除',
+'notanarticle'         => 'これは記事ではありません。',
+'watchnochange'        => 'その期間内にウォッチリストにあるページはどれも編集されていません。',
+'watchdetails'         => '* ウォッチリストに入っているページ数（ノート除く）: $1
+* [[Special:Watchlist/edit|ウォッチリストの一覧・編集]]',
+'wlheader-enotif'      => '* メール通知が有効になっています',
+'wlheader-showupdated' => "* あなたが最後に訪問したあとに変更されたページは'''ボールド体'''で表示されます",
+'watchmethod-recent'   => 'ウォッチリストの中から最近編集されたものを抽出',
+'watchmethod-list'     => '最近編集された中からウォッチしているページを抽出',
+'removechecked'        => 'チェックした項目をウォッチリストから削除',
+'watchlistcontains'    => 'あなたのウォッチリストには $1 ページ登録されています。',
+'watcheditlist'        => 'ウォッチリストに登録しているページを文字コード順に表示しています。
+チェックボックスにチェックし、「{{int:removechecked}}」ボタンをクリックするとウォッチリストから削除されます。
+
+* ウォッチリストからページを削除すると、付随するノートページも削除されます。',
+'removingchecked'      => '要求された項目をウォッチリストから削除しています:',
+'couldntremove'        => '"$1" をウォッチリストから削除できません。',
+'iteminvalidname'      => '"$1" をウォッチリストから削除できません。ページ名が不正です。',
+'wlnote'               => '以下は最近 <strong>$2</strong> 時間に編集された <strong>$1</strong> ページです。',
+'wlshowlast'           => '最近の [$1時間] [$2日間] [$3] のものを表示する',
+'wlsaved'              => '現在、バックアップされたウォッチリストのみの表示となっています。',
+'watchlist-show-bots'  => 'ボットの編集を表示',
+'watchlist-hide-bots'  => 'ボットの編集を隠す',
+'watchlist-show-own'   => '自分の編集を表示',
+'watchlist-hide-own'   => '自分の編集を隠す',
+'watchlist-show-minor' => '細部の編集を表示',
+'watchlist-hide-minor' => '細部の編集を隠す',
+'wldone'               => '終了しました。',
+
+# Displayed when you click the "watch" button and it's in the process of watching
+'watching'   => 'ウォッチリストに追加しています...',
+'unwatching' => 'ウォッチリストから削除しています...',
+
+'enotif_mailer'      => '{{SITENAME}} 通知メール',
+'enotif_reset'       => 'すべてのページを訪問済みにする',
+'enotif_newpagetext' => '(新規ページ)',
+'changed'            => '変更',
+'created'            => '作成',
+'enotif_subject'     => '{{SITENAME}} のページ "$PAGETITLE" が $PAGEEDITOR によって$CHANGEDORCREATEDされました',
+'enotif_lastvisited' => '
+あなたが最後に閲覧してからの差分を見るには以下のURLにアクセスしてください:
+$1',
+'enotif_body'        => 'Dear $WATCHINGUSERNAME,
+
+{{SITENAME}}のページ $PAGETITLE が $PAGEEDITDATE に
+$PAGEEDITOR によって$CHANGEDORCREATEDされました。
+現在の版を見るには次のURLにアクセスしてください:
+$PAGETITLE_URL
+$NEWPAGE
+
+編集内容の要約: $PAGESUMMARY ($PAGEMINOREDIT)
+
+投稿者:
+メール: $PAGEEDITOR_EMAIL
+ウィキ: $PAGEEDITOR_WIKI
+
+あなたがこのページを訪れない限り、これ以上の通知は送信されません。
+ウォッチリストからすべての通知フラグをリセットすることもできます。
+
+                         {{SITENAME}} 通知システム
+
+--
+ウォッチリストの設定を変更する:
+{{fullurl:Special:Watchlist/edit}}
+
+助けが必要ですか:
+{{fullurl:Help:Contents}}',
+
+# Delete/protect/revert
+'deletepage'                  => 'ページを削除',
+'confirm'                     => '確認',
+'excontent'                   => "内容: '$1'",
+'excontentauthor'             => "内容: '$1' (投稿者 $2 のみ)",
+'exbeforeblank'               => "白紙化前の内容: '$1'",
+'exblank'                     => '白紙ページ',
+'confirmdelete'               => '削除の確認',
+'deletesub'                   => '"$1" を削除',
+'historywarning'              => '警告: 削除しようとしているページには履歴があります:',
+'confirmdeletetext'           => '指定されたページまたは画像は、その変更履歴と共にデータベースから永久に削除されようとしています。あなたが削除を望んでおり、それがもたらす帰結を理解しており、かつあなたのしようとしていることが[[{{int:policy-url}}|方針]]に即したものであることを確認してください。',
+'actioncomplete'              => '完了しました',
+'deletedtext'                 => '"$1" は削除されました。最近の削除に関しては $2 を参照してください。',
+'deletedarticle'              => '"$1" を削除しました。',
+'dellogpage'                  => '削除記録',
+'dellogpagetext'              => '以下は最近の削除と復帰の記録です。',
+'deletionlog'                 => '削除記録',
+'reverted'                    => '以前のバージョンへの差し戻し',
+'deletecomment'               => '削除の理由',
+'imagereverted'               => '以前のバージョンへの差し戻しに成功しました。',
+'rollback'                    => '編集の差し戻し',
+'rollback_short'              => '差し戻し',
+'rollbacklink'                => '差し戻し',
+'rollbackfailed'              => '差し戻しに失敗しました',
+'cantrollback'                => '投稿者がただ一人であるため、編集を差し戻せません。',
+'alreadyrolled'               => 'ページ [[:$1]] の [[User:$2|$2]] ([[User_talk:$2|会話]] | [[Special:Contributions/$2|履歴]]) による編集の差し戻しに失敗しました。誰か他の利用者が編集を行ったか差し戻しされたのかもしれません。
+
+このページの最後の編集は [[User:$3|$3]] ([[User_talk:$3|会話]] | [[Special:Contributions/$3|履歴]]) によるものです。',
+'editcomment'                 => '編集内容の要約: <i>$1</i>', # only shown if there is an edit comment
+'revertpage'                  => '$2 による編集を $1 による版へと差し戻しました。',
+'sessionfailure'              => 'あなたのログイン・セッションに問題が発生しました。この動作はセッションハイジャックを防ぐために取り消されました。ブラウザの「戻る」を押してからページを再読込し、もう一度送信してください。',
+'protectlogpage'              => '保護記録',
+'protectlogtext'              => '以下はページの保護・保護解除の一覧です。',
+'protectedarticle'            => '"$1" を保護しました。',
+'unprotectedarticle'          => '"$1" の保護を解除しました。',
+'protectsub'                  => '"$1" の保護',
+'confirmprotecttext'          => '本当にこのページを保護しますか?',
+'confirmprotect'              => '保護の確認',
+'protectmoveonly'             => 'ページの移動のみを差し止める',
+'protectcomment'              => '保護・保護解除の理由',
+'protectexpiry'               => '期間',
+'protect_expiry_invalid'      => '期間の指定が無効です。',
+'protect_expiry_old'          => '保護期限が過去の時刻です。',
+'unprotectsub'                => '"$1" の保護解除',
+'confirmunprotecttext'        => '本当にこのページの保護を解除しますか?',
+'confirmunprotect'            => '保護解除の確認',
+'unprotectcomment'            => '保護解除の理由',
+'protect-unchain'             => '移動権限を操作',
+'protect-text'                => "ページ \"'''\$1'''\" の保護レベルを表示・操作できます。",
+'protect-cascadeon'           => 'このページはカスケード保護されている以下のページから呼び出されているため、編集できないように保護されています。保護レベルを変更することは可能ですが、このカスケード保護には影響しません。',
+'protect-default'             => '（解除）',
+'protect-level-autoconfirmed' => '新規利用者と匿名利用者を禁止',
+'protect-level-sysop'         => '{{int:group-sysop}}のみ',
+'protect-summary-cascade'     => 'カスケード',
+'protect-expiring'            => '$1 に解除',
+'protect-cascade'             => 'カスケード保護 - このページで取り込んでいる全ての他ページも保護されます。',
+
+'minimum-size'                => '最小サイズ (bytes)',
+
+# Restrictions (nouns)
+'restriction-edit' => '編集',
+'restriction-move' => '移動',
+
+# Restriction levels
+'restriction-level-sysop'         => '全保護',
+'restriction-level-autoconfirmed' => '半保護',
+
+# Undelete
+'undelete'                 => '削除されたページを参照する',
+'undeletepage'             => '削除された編集の参照と復帰',
+'viewdeletedpage'          => '削除されたページの削除記録と履歴',
+'undeletepagetext'         => '以下のページは削除されていますが、アーカイブに残っているため、復帰できます。アーカイブは定期的に消去されます。',
+'undeleteextrahelp'        => '全ての版を復帰する場合は、全ての版のチェックボックスを選択していない状態で「{{int:undeletebtn}}」ボタンをクリックしてください。
+特定の版を復帰する場合は、復帰する版のチェックボックスを選択した状態で「{{int:undeletebtn}}」ボタンをクリックしてください。
+「{{int:undeletereset}}」ボタンををクリックするとコメント欄と全てのチェックボックスがクリアされます。',
+'undeleterevisions'        => '$1版保管',
+'undeletehistory'          => 'ページの復帰を行うと、通常は履歴にある全ての編集が復帰します。特定版の復帰を行う場合は、{{int:undeletebtn}}ボタンを押す前に復帰対象版のチェックボックスを選択してください。',
+'undeletehistorynoadmin'   => '過去にこのページの全てもしくは一部が削除されています。以下に示すのは削除記録と削除された版の履歴です。削除された各版の内容は{{int:group-sysop}}のみが閲覧できます。',
+'undelete-revision'        => '$1 の削除された版 $2 :',
+'undeleterevision-missing' => '無効、あるいは誤った版です。当該版は既に復帰されたか、アーカイブから削除された可能性があります。',
+'undeletebtn'              => '復帰',
+'undeletereset'            => 'リセット',
+'undeletecomment'          => 'コメント:',
+'undeletedarticle'         => '"$1" を復帰しました。',
+'undeletedrevisions'       => '$1 版を復帰しました。',
+'undeletedrevisions-files' => '$1 版のページと $2 ファイルを復帰しました',
+'undeletedfiles'           => '$1 ファイルを復帰しました',
+'cannotundelete'           => '復帰に失敗しました。誰かがすでにこのページを復帰しています。',
+'undeletedpage'            => "<big>'''$1 を復帰しました。'''</big>
+
+最近の削除と復帰については[[Special:Log/delete|削除記録]]を参照してください。",
+'undelete-header'          => '最近の削除されたページは[[Special:Log/delete|削除記録]]で確認できます。',
+'undelete-search-box'      => '削除されたページを検索',
+'undelete-search-prefix'   => '表示するページ名の先頭:',
+'undelete-search-submit'   => '検索',
+'undelete-no-results'      => '一致する削除済みページのアーカイブが見つかりませんでした。',
+
+# Namespace form on various pages
+'namespace' => '名前空間:',
+'invert'    => '選択した名前空間を隠す',
+
+# Contributions
+'contributions' => '利用者の投稿記録',
+'mycontris'     => '自分の投稿記録',
+'contribsub2'    => '利用者名: $1 ($2)',
+'nocontribs'    => '利用者の投稿記録は見つかりませんでした。',
+'ucnote'        => '利用者 <b>$1</b> によるここ <b>$2</b> 日間の編集です。',
+'uclinks'       => '過去 $2 日間の $1 編集',
+'uctop'         => '（最新）',
+
+'sp-contributions-newest'      => '最新',
+'sp-contributions-oldest'      => '最古',
+'sp-contributions-newer'       => '前 $1',
+'sp-contributions-older'       => '次 $1',
+'sp-contributions-newbies'     => '新規利用者の投稿のみ表示',
+'sp-contributions-newbies-sub' => '新規利用者',
+'sp-contributions-blocklog'    => '投稿ブロック記録',
+'sp-contributions-search'      => '投稿履歴の検索',
+'sp-contributions-username'    => '利用者名または IPアドレス:',
+'sp-contributions-submit'      => '検索',
+
+'sp-newimages-showfrom' => '$1 以後現在までの新着画像を表示',
+
+# What links here
+'whatlinkshere' => 'リンク元',
+'notargettitle' => '対象となるページが存在しません',
+'notargettext'  => '対象となるページ又は利用者が指定されていません',
+'linklistsub'   => 'リンクの一覧',
+'linkshere'     => '[[:$1]] は以下のページからリンクされています',
+'nolinkshere'   => '[[:$1]] にリンクしているページはありません。',
+'nolinkshere-ns'        => "指定された名前空間中で、'''[[:$1]]''' にリンクしているページはありません。",
+'isredirect'    => 'リダイレクトページ',
+'istemplate'    => 'テンプレート呼出',
+'whatlinkshere-prev'    => '前 $1',
+'whatlinkshere-next'    => '次 $1',
+
+# Block/unblock
+'blockip'                     => '投稿ブロック',
+'blockiptext'                 => '指定した利用者やIPアドレスからの投稿をブロックすることができます。',
+'ipaddress'                   => 'IPアドレス',
+'ipadressorusername'          => '利用者名 / IPアドレス',
+'ipbexpiry'                   => '期間',
+'ipbreason'                   => '理由',
+'ipbanononly'                 => '匿名利用者のみブロック',
+'ipbcreateaccount'            => 'アカウント作成をブロック',
+'ipbenableautoblock'          => 'この利用者が最後に使用したIPアドレスを自動的にブロック（ブロック後に使用したIPアドレスも含む）',
+'ipbsubmit'                   => '投稿ブロックする',
+'ipbother'                    => '期間 (その他のとき)',
+'ipboptions'                  => '15分:15 minutes,30分:30 minutes,2時間:2 hours,1日:1 day,3日:3 days,1週間:1 week,2週間:2 weeks,1ヶ月:1 month,3ヶ月:3 months,6ヶ月:6 months,1年:1 year,無期限:infinite',
+'ipbotheroption'              => 'その他',
+'badipaddress'                => 'IPアドレスが異常です。',
+'blockipsuccesssub'           => 'ブロックに成功しました。',
+'blockipsuccesstext'          => '利用者またはIPアドレス "$1" の投稿をブロックしました。<br />
+[[Special:Ipblocklist|{{int:ipblocklist}}]]で確認できます。',
+'ipb-unblock-addr'            => '$1 のブロックを解除',
+'ipb-unblock'                 => '利用者またはIPアドレスのブロックを解除する',
+'ipb-blocklist-addr'          => '$1 の現在有効なブロックを表示',
+'ipb-blocklist'               => '現在有効なブロックを表示',
+'unblockip'                   => '投稿ブロックを解除する',
+'unblockiptext'               => '以下のフォームで利用者またはIPアドレスの投稿ブロックを解除できます。',
+'ipusubmit'                   => '投稿ブロックを解除する',
+'unblocked'                   => '[[User:$1|$1]] の投稿ブロックを解除しました',
+'ipblocklist'                 => '投稿ブロック中の利用者やIPアドレス',
+'ipblocklist-submit'          => '検索',
+'blocklistline'               => '$1, $2 は $3 をブロック （$4）',
+'infiniteblock'               => '無期限',
+'expiringblock'               => '$1 に解除',
+'anononlyblock'               => '匿名のみ',
+'noautoblockblock'            => '自動ブロックなし',
+'createaccountblock'          => 'アカウント作成のブロック',
+'ipblocklistempty'            => '{{int:ipblocklist}}はありません。',
+'blocklink'                   => 'ブロック',
+'unblocklink'                 => 'ブロック解除',
+'contribslink'                => '投稿記録',
+'autoblocker'                 => '投稿ブロックされている利用者 "$1" と同じIPアドレスのため、自動的にブロックされています。ブロックの理由は "$2" です。',
+'blocklogpage'                => '投稿ブロック記録',
+'blocklogentry'               => '"$1" を $2 ブロックしました $3',
+'blocklogtext'                => 'このページは投稿ブロックと解除の記録です。自動的に投稿ブロックされたIPアドレスは記録されていません。現時点で有効な投稿ブロックは[[Special:Ipblocklist|{{int:ipblocklist}}]]をご覧ください。',
+'unblocklogentry'             => '"$1" をブロック解除しました',
+'block-log-flags-anononly'    => '匿名のみ',
+'block-log-flags-nocreate'    => 'アカウント作成のブロック',
+'block-log-flags-autoblock'   => '自動ブロック有効',
+'range_block_disabled'        => '広域ブロックは無効に設定されています。',
+'ipb_expiry_invalid'          => '不正な期間です。',
+'ipb_already_blocked'         => '"$1" は既にブロックされています。',
+'ip_range_invalid'            => '不正なIPアドレス範囲です。',
+'proxyblocker'                => 'プロクシブロッカー',
+'ipb_cant_unblock'            => 'エラー: ブロックされた ID $1 が見つかりません。おそらく既にブロック解除されています。',
+'proxyblockreason'            => 'Your IP address has been blocked because it is an open proxy. Please contact your Internet service provider or tech support and inform them of this serious security problem.
+
+:あなたの使用しているIPアドレスはオープン・プロクシであるため投稿ブロックされています。あなたのインターネット・サービス・プロバイダ、もしくは技術担当者に連絡を取り、これが深刻なセキュリティ問題であることを伝えてください。',
+'proxyblocksuccess'           => '終了しました。',
+'sorbs'                       => 'DNSBL',
+'sorbsreason'                 => 'あなたのIPアドレスはオープンプロクシであると、[http://www.sorbs.net/ SORBS] DNSBLに掲載されています。',
+'sorbs_create_account_reason' => 'あなたのIPアドレスがオープンプロクシであると、[http://www.sorbs.net/ SORBS] DNSBLに掲載されているため、アカウントを作成できません。',
+
+# Developer tools
+'lockdb'              => 'データベースのロック',
+'unlockdb'            => 'データベースのロック解除',
+'lockdbtext'          => 'データベースをロックすると全ての利用者はページを編集できなくなり、オプションを変更できなくなり、ウォッチリストを編集できなくなるなど、データベースに書き込む全ての作業ができなくなります。本当にデータベースをロックして良いかどうか確認してください。メンテナンスが終了したらロックを解除してください。',
+'unlockdbtext'        => 'データベースのロックを解除することで利用者はページを編集できるようになり、オプションを変更できるようになり、ウォッチリストを編集できるようになるなど、データベースに書き込む全ての作業ができるようになります。本当にデータベースのロックを解除していいかどうか確認してください。',
+'lockconfirm'         => '本当にデータベースをロックする',
+'unlockconfirm'       => 'ロックを解除する',
+'lockbtn'             => 'ロック',
+'unlockbtn'           => 'ロック解除',
+'locknoconfirm'       => 'チェックボックスにチェックされていません。',
+'lockdbsuccesssub'    => 'データベースはロックされました。',
+'unlockdbsuccesssub'  => 'データベースのロックは解除されました',
+'lockdbsuccesstext'   => 'データベースをロックしました。メンテナンスが終了したら忘れずにロックを解除してください。',
+'unlockdbsuccesstext' => 'データベースのロックは解除されました。',
+'lockfilenotwritable' => 'データベースのロックファイルに書き込めません。データベースのロック・解除をするには、サーバー上のロックファイルに書き込める必要があります。',
+'databasenotlocked'   => 'データベースはロックされていません。',
+
+# Move page
+'movepage'                => 'ページの移動',
+'movepagetext'            => '下のフォームを利用すると、ページ名を変更し、その履歴も変更先へ移動することができます。古いページは変更先へのリダイレクトページとなります。ページの中身と変更前のページに張られたリンクは変わりません。ですから、二重になったり壊れてしまったリダイレクトをチェックする必要があります。
+
+変更先がすでに存在する場合には、履歴が移動元ページへのリダイレクトただ一つである場合を除いて、移動できません。つまり、間違えてページ名を変更した場合には元に戻せます。
+
+よく閲覧されるページや、他の多くのページからリンクされているページを移動すると予期せぬ結果が起こるかもしれません。ページの移動に伴う影響をよく考えてから踏み切るようにしてください。',
+'movepagetalktext'        => '付随するノートのページがある場合には、基本的には、一緒に移動されることになります。
+
+但し、以下の場合については別です。
+*名前空間をまたがる移動の場合
+*移動先に既に履歴のあるノートページが存在する場合
+*下のチェックボックスのチェックマークを消した場合
+
+これらの場合、ノートページを移動する場合には、別に作業する必要があります。',
+'movearticle'             => '移動するページ',
+'movenologin'             => 'ログインしていません',
+'movenologintext'         => 'ページを移動するためには、アカウント作成の上、[[Special:Userlogin|ログイン]]している必要があります。',
+'newtitle'                => '新しいページ名',
+'move-watch'              => '移動するページをウォッチ',
+'movepagebtn'             => 'ページを移動',
+'pagemovedsub'            => '無事移動しました。',
+'pagemovedtext'           => 'ページ "[[$1]]" は "[[$2]]" に移動しました。',
+'articleexists'           => '指定された移動先には既にページが存在するか、名前が不適切です。',
+'talkexists'              => 'ページ自身は移動されましたが、付随のノートページは移動先のページが存在したため移動できませんでした。手動で内容を統合してください。',
+'movedto'                 => '移動先:',
+'movetalk'                => 'ノートページが付随する場合には、それも一緒に移動する',
+'talkpagemoved'           => '付随のノートのページも移動しました。',
+'talkpagenotmoved'        => '付随のノートのページは<strong>移動されませんでした。</strong>',
+'1movedto2'               => 'ページ [[$1]] を [[$2]] へ移動',
+'1movedto2_redir'         => 'ページ [[$1]] をこのページあてのリダイレクト [[$2]] へ移動',
+'movelogpage'             => '移動記録',
+'movelogpagetext'         => '以下はページ移動の記録です。',
+'movereason'              => '理由',
+'revertmove'              => '差し戻し',
+'delete_and_move'         => '削除して移動する',
+'delete_and_move_text'    => '== 削除が必要です ==
+移動先 "[[$1]]" は既に存在しています。このページを移動のために削除しますか?',
+'delete_and_move_confirm' => 'ページ削除の確認',
+'delete_and_move_reason'  => '移動のための削除',
+'selfmove'                => '移動元と移動先のページ名が同じです。自分自身へは移動できません。',
+'immobile_namespace'      => '移動先のページ名は特別なページです。その名前空間にページを移動することはできません。',
+
+# Export
+'export'          => 'ページデータの書き出し',
+'exporttext'      => 'ここでは単独のまたは複数のページのテキストと編集履歴をXMLの形で書き出すことができます。書き出されたXML文書は他のMediaWikiで動いているウィキに取り込んだり、変換したり、個人的な楽しみに使ったりできます。
+
+ページデータを書き出すには下のテキストボックスに書き出したいページのタイトルを一行に一ページずつ記入してください。また編集履歴とともに全ての古い版を含んで書き出すのか、最新版のみを書き出すのか選択してください。
+
+後者のケースではリンクの形で使うこともできます。例: [[メインページ]]の最新版を取得するには[[Special:Export/メインページ]]を使用します。',
+'exportcuronly'   => 'すべての履歴を含ませずに、最新版のみを書き出す',
+'exportnohistory' => "'''お知らせ:''' パフォーマンス上の理由により、このフォームによるページの完全な履歴の書き出しは行えません。",
+'export-submit'   => '書き出し',
+
+# Namespace 8 related
+'allmessages'               => '表示メッセージの一覧',
+'allmessagesname'           => 'メッセージ名',
+'allmessagesdefault'        => '既定の文章',
+'allmessagescurrent'        => '現在の文章',
+'allmessagestext'           => 'これは{{ns:mediawiki}}名前空間にある全てのシステムメッセージの一覧です。',
+'allmessagesnotsupportedUI' => 'このサイトでは、あなたの現在のインターフェース言語 <b>$1</b> における {{ns:special}}:Allmessages はサポートされていません。',
+'allmessagesnotsupportedDB' => 'wgUseDatabaseMessages が無効のため、[[Special:Allmessages]] はサポートされません。',
+'allmessagesfilter'         => 'メッセージ名フィルタ:',
+'allmessagesmodified'       => '条件に当てはまるものを表示',
+
+# Thumbnails
+'thumbnail-more'  => '拡大',
+'missingimage'    => '<b>以下の画像が見つかりません。</b><br /><i>$1</i>',
+'filemissing'     => '<i>ファイルがありません</i>',
+'thumbnail_error' => 'サムネイルの作成中にエラーが発生しました: $1',
+
+# Special:Import
+'import'                     => 'ページデータの取り込み',
+'importinterwiki'            => 'Transwikiインポート',
+'import-interwiki-text'      => 'インポートするウィキとページ名を選択してください。変更履歴の日付と編集者が保存されます。すべてのtranswikiは[[Special:Log/import|インポート記録]]に記録されます。',
+'import-interwiki-history'   => 'このページの全ての版を複製する',
+'import-interwiki-submit'    => '取り込み',
+'import-interwiki-namespace' => '次の名前空間に取り込む:',
+'importtext'                 => '元となるウィキから {{ns:special}}:Export を使ってXMLファイルを書き出し、ここでアップロードしてください。',
+'importstart'                => 'ページを取り込んでいます...',
+'import-revision-count'      => '$1 版',
+'importnopages'              => 'インポートするページがありません',
+'importfailed'               => '取り込みに失敗しました: $1',
+'importunknownsource'        => 'インポートするソースのファイルタイプが不明です',
+'importcantopen'             => 'インポートするファイルを開けません',
+'importbadinterwiki'         => 'interwiki リンクが正しくありません',
+'importnotext'               => '内容が空か、テキストがありません。',
+'importsuccess'              => '取り込みに成功しました。',
+'importhistoryconflict'      => '取り込み時にいくつかの版が競合しました（以前に同じページを取り込んでいませんか）。',
+'importnosources'            => 'Transwikiの読み込み元が定義されていないため、履歴の直接アップロードは無効になっています。',
+'importnofile'               => 'ファイルがアップロードされませんでした',
+'importuploaderror'          => 'ファイルの取り込みに失敗しました。恐らく、許可されている最大ファイルサイズより大きなファイルをアップロードしようとしています。',
+
+# Import log
+'importlogpage'                    => 'インポート記録',
+'importlogpagetext'                => '以下は管理者による他ウィキからのページデータの取り込み記録です。',
+'import-logentry-upload'           => 'ファイルのアップロードにより [[$1]] をインポートしました',
+'import-logentry-upload-detail'    => '$1 版',
+'import-logentry-interwiki'        => '$1 をtranswikiしました',
+'import-logentry-interwiki-detail' => '$2 の $1 版',
+
+# Tooltip help for the actions
+'tooltip-pt-userpage'             => '自分の利用者ページ',
+'tooltip-pt-anonuserpage'         => 'あなたのIPアドレス用の利用者ページ',
+'tooltip-pt-mytalk'               => '自分の会話ページ',
+'tooltip-pt-anontalk'             => 'あなたのIPアドレスからなされた編集の会話ページ',
+'tooltip-pt-preferences'          => 'オプションの変更',
+'tooltip-pt-watchlist'            => '変更を監視しているページの一覧',
+'tooltip-pt-mycontris'            => '自分の投稿記録',
+'tooltip-pt-login'                => 'ログインすることが推奨されますが、しなくても構いません。',
+'tooltip-pt-anonlogin'            => 'ログインすることが推奨されますが、しなくても構いません。',
+'tooltip-pt-logout'               => 'ログアウト',
+'tooltip-ca-talk'                 => '項目のノート',
+'tooltip-ca-edit'                 => 'このページを編集できます。投稿の前に「{{int:showpreview}}」ボタンを使ってください。',
+'tooltip-ca-addsection'           => 'このページにコメントを加える',
+'tooltip-ca-viewsource'           => 'このページは保護されています。ページのソースを閲覧できます。',
+'tooltip-ca-history'              => 'このページの過去の版',
+'tooltip-ca-protect'              => 'このページを保護',
+'tooltip-ca-delete'               => 'このページを削除',
+'tooltip-ca-undelete'             => '削除されたページを復帰する',
+'tooltip-ca-move'                 => 'このページを移動',
+'tooltip-ca-watch'                => 'このページをウォッチリストに追加',
+'tooltip-ca-unwatch'              => 'このページをウォッチリストから外す',
+'tooltip-search'                  => 'ウィキ内を検索',
+'tooltip-p-logo'                  => 'メインページ',
+'tooltip-n-mainpage'              => 'メインページに移動',
+'tooltip-n-portal'                => 'このプロジェクトについて、あなたのできることを探す場所です',
+'tooltip-n-currentevents'         => '最近の出来事',
+'tooltip-n-recentchanges'         => '最近更新が行われたページの一覧',
+'tooltip-n-randompage'            => 'ランダムに記事を選んで表示',
+'tooltip-n-help'                  => 'ヘルプ・使い方',
+'tooltip-n-sitesupport'           => '私たちをサポートしてください',
+'tooltip-t-whatlinkshere'         => 'このページにリンクしているページの一覧',
+'tooltip-t-recentchangeslinked'   => '最近更新が行われたこのページのリンク先',
+'tooltip-feed-rss'                => 'このページのRSSフィード',
+'tooltip-feed-atom'               => 'このページのAtomフィード',
+'tooltip-t-contributions'         => '利用者の投稿記録',
+'tooltip-t-emailuser'             => '{{int:emailuser}}',
+'tooltip-t-upload'                => '画像やメディアファイルをアップロード',
+'tooltip-t-specialpages'          => '特別ページの一覧',
+'tooltip-ca-nstab-main'           => '本文を表示',
+'tooltip-ca-nstab-user'           => '利用者ページを表示',
+'tooltip-ca-nstab-media'          => 'メディアページを表示',
+'tooltip-ca-nstab-special'        => 'これは特別ページです。編集することはできません。',
+'tooltip-ca-nstab-project'        => 'プロジェクトページを表示',
+'tooltip-ca-nstab-image'          => '画像ページを表示',
+'tooltip-ca-nstab-mediawiki'      => 'インターフェースを表示',
+'tooltip-ca-nstab-template'       => 'テンプレートを表示',
+'tooltip-ca-nstab-help'           => 'ヘルプページを表示',
+'tooltip-ca-nstab-category'       => 'カテゴリページを表示',
+'tooltip-minoredit'               => 'この編集を細部の変更とマーク',
+'tooltip-save'                    => '編集を保存します。',
+'tooltip-preview'                 => '編集結果を確認します。保存前に是非使用してください。',
+'tooltip-diff'                    => 'あなたが編集した版の変更点を表示します。[alt-v]',
+'tooltip-compareselectedversions' => '選択された二つの版の差分を表示します。',
+'tooltip-watch'                   => 'このページをウォッチリストへ追加します。',
+'tooltip-recreate'                => 'このままこのページを新規作成する',
+
+# Stylesheets
+'common.css'   => '/* ここに書いた CSS は全ての外装に反映されます */',
+
+# Metadata
+'nodublincore'      => 'このサーバーでは Dublin Core RDF メタデータが許可されていません。',
+'nocreativecommons' => 'このサーバーではクリエイティブ・コモンズの RDF メタデータが許可されていません。',
+'notacceptable'     => 'ウィキサーバーはあなたの使用しているクライアントが読める形式で情報を提供できません。',
+
+# Attribution
+'anonymous'        => '{{SITENAME}}の匿名利用者',
+'siteuser'         => '{{SITENAME}}の利用者$1',
+'lastmodifiedatby' => '最終更新は $3 による $2, $1 の編集です。', # $1 date, $2 time, $3 user
+'and'              => 'および',
+'othercontribs'    => '$1の版に基づきます。',
+'others'           => 'その他の利用者',
+'siteusers'        => '{{SITENAME}}の利用者$1',
+'creditspage'      => 'ページ・クレジット',
+'nocredits'        => 'このページには有効なクレジット情報がありません。',
+
+# Spam protection
+'spamprotectiontitle'    => 'スパム防御フィルター',
+'spamprotectiontext'     => 'あなたが保存しようとしたページはスパム・フィルターによって保存をブロックされました。これは主に外部サイトへのリンクが原因です。',
+'spamprotectionmatch'    => '以下はスパム・フィルターによって検出されたテキストです: $1',
+'subcategorycount'       => 'このカテゴリには $1 のサブカテゴリがあります。',
+'categoryarticlecount'   => 'このカテゴリには $1 のページがあります。',
+'category-media-count'   => 'このカテゴリには $1 のファイルがあります。',
+'listingcontinuesabbrev' => ' の続き',
+'spambot_username'       => 'MediaWiki スパム除去',
+'spam_reverting'         => '$1 へのリンクを含まない以前の版に差し戻し',
+'spam_blanking'          => 'すべての版から $1 へのリンクを削除',
+
+# Info page
+'infosubtitle'   => 'ページ情報',
+'numedits'       => '編集数（項目）: $1',
+'numtalkedits'   => '編集数（ノート）: $1',
+'numwatchers'    => 'ウォッチしている利用者数: $1',
+'numauthors'     => '投稿者数（項目）: $1',
+'numtalkauthors' => '投稿者数（ノート）: $1',
+
+# Math options
+'mw_math_png'    => '常にPNG',
+'mw_math_simple' => 'シンプルな数式はHTML、それ以外はPNG',
+'mw_math_html'   => 'できる限りHTML、さもなければPNG',
+'mw_math_source' => 'TeXのままにする (テキストブラウザ向け)',
+'mw_math_modern' => '最近のブラウザで推奨',
+'mw_math_mathml' => '可能ならばMathMLを使う (実験中の機能)',
+
+# Patrolling
+'markaspatrolleddiff'                 => 'パトロール済みにする',
+'markaspatrolledtext'                 => 'この項目をパトロール済みにする',
+'markedaspatrolled'                   => 'パトロール済みにしました。',
+'markedaspatrolledtext'               => '選択された編集をパトロール済みにしました。',
+'rcpatroldisabled'                    => 'RCパトロールが無効です',
+'rcpatroldisabledtext'                => '最近更新されたページのパトロール機能は現在無効になっています。',
+'markedaspatrollederror'              => 'パトロール済みにできません。',
+'markedaspatrollederrortext'          => 'パトロール済みにするためにはどの版かを指定する必要があります。',
+'markedaspatrollederror-noautopatrol' => '自分自身による編集をパトロール済みにする権限がありません。',
+
+# Patrol log
+'patrol-log-page' => 'パトロール記録',
+'patrol-log-line' => '$2 の $1 をパトロール済みにマーク$3',
+'patrol-log-auto' => '（自動）',
+'patrol-log-diff' => '第$1版',
+
+# Image deletion
+'deletedrevision' => '古い版 $1 を削除しました。',
+
+# Browsing diffs
+'previousdiff' => '←前の差分',
+'nextdiff'     => '次の差分→',
+
+# Media information
+'mediawarning'         => "'''警告:''' このファイルは悪意のあるコードを含んでいる可能性があり、実行するとコンピューターが危害を被る場合があります。
+----",
+'imagemaxsize'         => '画像ページで表示する画像の最大サイズ:',
+'thumbsize'            => 'サムネイルの大きさ:',
+'file-info'            => '(ファイルサイズ: $1, MIMEタイプ: $2)',
+'file-info-size'       => '($1 × $2 ピクセル, ファイルサイズ: $3, MIMEタイプ: $4)',
+'file-svg'             => '<small>この画像は劣化せずに拡大縮小可能なベクトル画像です。元サイズ: $1 × $2 ピクセル</small>',
+'show-big-image'       => '高解像度での画像',
+'show-big-image-thumb' => '<small>このプレビューのサイズ: $1 × $2 pixels</small>',
+
+'newimages'    => '新着画像ギャラリー',
+'showhidebots' => '（ボットを$1）',
+'noimages'     => '画像がありません。',
+
+/*
+Short names for language variants used for language conversion links.
+To disable showing a particular link, set it to 'disable', e.g.
+'variantname-zh-sg' => 'disable',
+Variants for Chinese language
+*/
+'variantname-zh-cn' => '簡体（中国）',
+'variantname-zh-tw' => '正字（台湾）',
+'variantname-zh-hk' => '正字（香港）',
+'variantname-zh-sg' => '簡体（シンガポール）',
+'variantname-zh'    => '無変換',
+
+'passwordtooshort' => 'パスワードが短すぎます。$1文字以上の文字列にしてください。',
+
+# Metadata
+'metadata'          => 'メタデータ',
+'metadata-help'     => 'このファイルはデジタルカメラ・スキャナなどが付加した追加情報を含んでいます。このファイルがオリジナルの状態から変更されている場合、いくつかの項目は変更を完全に反映していないかもしれません。',
+'metadata-expand'   => '拡張項目を表示',
+'metadata-collapse' => '拡張項目を隠す',
+'metadata-fields'   => 'ここに挙げたEXIF情報のフィールドのみが標準で表示されます。
+* make
+* model
+* datetimeoriginal
+* exposuretime
+* fnumber
+* focallength',
+
+# EXIF tags
+'exif-imagewidth'                  => '画像の幅',
+'exif-imagelength'                 => '画像の高さ',
+'exif-bitspersample'               => 'ビット深度',
+'exif-compression'                 => '圧縮形式',
+'exif-photometricinterpretation'   => '画素構成',
+'exif-orientation'                 => '画像方向',
+'exif-samplesperpixel'             => 'コンポーネント数',
+'exif-planarconfiguration'         => 'データ格納形式',
+'exif-ycbcrsubsampling'            => 'YCCの画素構成（Cの間引き率）',
+'exif-ycbcrpositioning'            => 'YCCの画素構成（YとCの位置）',
+'exif-xresolution'                 => '水平解像度',
+'exif-yresolution'                 => '垂直解像度',
+'exif-resolutionunit'              => '解像度の単位',
+'exif-stripoffsets'                => '画像データの場所',
+'exif-rowsperstrip'                => 'ストリップのライン数',
+'exif-stripbytecounts'             => 'ストリップのデータ量',
+'exif-jpeginterchangeformat'       => 'JPEGのSOIへのオフセット',
+'exif-jpeginterchangeformatlength' => 'JPEGデータのバイト数',
+'exif-transferfunction'            => '再生階調カーブ特性',
+'exif-whitepoint'                  => '参照白色点の色度座標値',
+'exif-primarychromaticities'       => '原色の色度座標値',
+'exif-ycbcrcoefficients'           => '色変換マトリックス係数',
+'exif-referenceblackwhite'         => '参照黒色点値・参照白色点値',
+'exif-datetime'                    => 'ファイル変更日時',
+'exif-imagedescription'            => '画像の説明',
+'exif-make'                        => '画像入力機器のメーカー',
+'exif-model'                       => '画像入力機器の機種',
+'exif-software'                    => 'ファームウェアのバージョン',
+'exif-artist'                      => '作成者',
+'exif-copyright'                   => '著作権者',
+'exif-exifversion'                 => 'Exifバージョン',
+'exif-flashpixversion'             => '対応フラッシュピックスバージョン',
+'exif-colorspace'                  => '色空間',
+'exif-componentsconfiguration'     => '各コンポーネントの構成',
+'exif-compressedbitsperpixel'      => '画像圧縮モード',
+'exif-pixelydimension'             => '実効画像幅',
+'exif-pixelxdimension'             => '実効画像高さ',
+'exif-makernote'                   => 'メーカーノート',
+'exif-usercomment'                 => 'ユーザーコメント',
+'exif-relatedsoundfile'            => '関連音声ファイル',
+'exif-datetimeoriginal'            => '画像データ生成日時',
+'exif-datetimedigitized'           => 'デジタルデータ作成日時',
+'exif-subsectime'                  => 'ファイル変更日時 (秒未満)',
+'exif-subsectimeoriginal'          => '画像データ生成日時 (秒未満)',
+'exif-subsectimedigitized'         => 'デジタルデータ作成日時 (秒未満)',
+'exif-exposuretime'                => '露出時間',
+'exif-exposuretime-format'         => '$1秒 ($2)',
+'exif-fnumber'                     => 'F値',
+'exif-fnumber-format'              => 'f/$1',
+'exif-exposureprogram'             => '露出プログラム',
+'exif-spectralsensitivity'         => 'スペクトル感度',
+'exif-isospeedratings'             => 'ISOスピードレート',
+'exif-oecf'                        => '光電変換関数',
+'exif-shutterspeedvalue'           => 'シャッタースピード',
+'exif-aperturevalue'               => '絞り値',
+'exif-brightnessvalue'             => '明るさ',
+'exif-exposurebiasvalue'           => '露出補正値',
+'exif-maxaperturevalue'            => 'レンズ最小F値',
+'exif-subjectdistance'             => '被写体距離',
+'exif-meteringmode'                => '測光方式',
+'exif-lightsource'                 => '光源',
+'exif-flash'                       => 'フラッシュ',
+'exif-focallength'                 => 'レンズの焦点距離',
+'exif-focallength-format'          => '$1 mm',
+'exif-subjectarea'                 => '主要被写体の位置',
+'exif-flashenergy'                 => 'フラッシュ強度',
+'exif-spatialfrequencyresponse'    => '空間周波数応答',
+'exif-focalplanexresolution'       => '水平方向の焦点面解像度',
+'exif-focalplaneyresolution'       => '垂直方向の焦点面解像度',
+'exif-focalplaneresolutionunit'    => '焦点面解像度の単位',
+'exif-subjectlocation'             => '被写体の場所',
+'exif-exposureindex'               => '露出インデックス',
+'exif-sensingmethod'               => 'センサー方式',
+'exif-filesource'                  => 'ファイルソース',
+'exif-scenetype'                   => 'シーンタイプ',
+'exif-cfapattern'                  => 'CFAパターン',
+'exif-customrendered'              => '画像処理',
+'exif-exposuremode'                => '露出モード',
+'exif-whitebalance'                => 'ホワイトバランス',
+'exif-digitalzoomratio'            => 'デジタルズーム倍率',
+'exif-focallengthin35mmfilm'       => 'レンズの焦点距離（35mmフィルム換算）',
+'exif-scenecapturetype'            => '被写体の種別',
+'exif-gaincontrol'                 => 'ゲインコントロール',
+'exif-contrast'                    => 'コントラスト',
+'exif-saturation'                  => '彩度',
+'exif-sharpness'                   => 'シャープネス',
+'exif-devicesettingdescription'    => '機器設定',
+'exif-subjectdistancerange'        => '被写体距離の範囲',
+'exif-imageuniqueid'               => 'ユニーク画像ID',
+'exif-gpsversionid'                => 'GPSタグのバージョン',
+'exif-gpslatituderef'              => '北緯/南緯',
+'exif-gpslatitude'                 => '緯度',
+'exif-gpslongituderef'             => '東経/西経',
+'exif-gpslongitude'                => '経度',
+'exif-gpsaltituderef'              => '高度の基準',
+'exif-gpsaltitude'                 => '高度',
+'exif-gpstimestamp'                => 'GPS時刻（原子時計）',
+'exif-gpssatellites'               => '測位に用いた衛星信号',
+'exif-gpsstatus'                   => 'GPS受信機の状態',
+'exif-gpsmeasuremode'              => 'GPS測位方法',
+'exif-gpsdop'                      => '測位精度',
+'exif-gpsspeedref'                 => '速度の単位',
+'exif-gpsspeed'                    => '速度',
+'exif-gpstrackref'                 => '進行方向の基準',
+'exif-gpstrack'                    => '進行方向',
+'exif-gpsimgdirectionref'          => '撮影方向の基準',
+'exif-gpsimgdirection'             => '撮影方向',
+'exif-gpsmapdatum'                 => '測地系',
+'exif-gpsdestlatituderef'          => '目的地の北緯/南緯',
+'exif-gpsdestlatitude'             => '目的地の緯度',
+'exif-gpsdestlongituderef'         => '目的地の東経/西経',
+'exif-gpsdestlongitude'            => '目的地の経度',
+'exif-gpsdestbearingref'           => '目的地の方角の基準',
+'exif-gpsdestbearing'              => '目的地の方角',
+'exif-gpsdestdistanceref'          => '目的地までの距離の単位',
+'exif-gpsdestdistance'             => '目的地までの距離',
+'exif-gpsprocessingmethod'         => 'GPS処理方法',
+'exif-gpsareainformation'          => 'GPSエリア名',
+'exif-gpsdatestamp'                => 'GPS測位日時',
+'exif-gpsdifferential'             => 'ディファレンシャル補正',
+
+# EXIF attributes
+'exif-compression-1' => '非圧縮',
+'exif-compression-6' => 'JPEG圧縮',
+
+'exif-photometricinterpretation-2' => 'RGB',
+'exif-photometricinterpretation-6' => 'YCbCr',
+
+'exif-unknowndate' => '不明な日付',
+
+'exif-orientation-1' => '通常', # 0th row: top; 0th column: left
+'exif-orientation-2' => '左右反転', # 0th row: top; 0th column: right
+'exif-orientation-3' => '180°回転', # 0th row: bottom; 0th column: right
+'exif-orientation-4' => '上下反転', # 0th row: bottom; 0th column: left
+'exif-orientation-5' => '反時計回りに90°回転 上下反転', # 0th row: left; 0th column: top
+'exif-orientation-6' => '時計回りに90°回転', # 0th row: right; 0th column: top
+'exif-orientation-7' => '時計回りに90°回転 上下反転', # 0th row: right; 0th column: bottom
+'exif-orientation-8' => '反時計回りに90°回転', # 0th row: left; 0th column: bottom
+
+'exif-planarconfiguration-1' => '点順次フォーマット',
+'exif-planarconfiguration-2' => '面順次フォーマット',
+
+'exif-xyresolution-i' => '$1 dpi',
+'exif-xyresolution-c' => '$1 dpc',
+
+'exif-colorspace-1'      => 'sRGB',
+'exif-colorspace-ffff.h' => 'その他',
+
+'exif-componentsconfiguration-0' => 'なし',
+'exif-componentsconfiguration-1' => 'Y',
+'exif-componentsconfiguration-2' => 'Cb',
+'exif-componentsconfiguration-3' => 'Cr',
+'exif-componentsconfiguration-4' => 'R',
+'exif-componentsconfiguration-5' => 'G',
+'exif-componentsconfiguration-6' => 'B',
+
+'exif-exposureprogram-0' => '未定義',
+'exif-exposureprogram-1' => 'マニュアル',
+'exif-exposureprogram-2' => 'ノーマルプログラム',
+'exif-exposureprogram-3' => '露出優先',
+'exif-exposureprogram-4' => 'シャッター速度優先',
+'exif-exposureprogram-5' => 'クリエイティブ・プログラム',
+'exif-exposureprogram-6' => 'アクション・プログラム',
+'exif-exposureprogram-7' => 'ポートレイトモード（近景）',
+'exif-exposureprogram-8' => 'ランドスケープモード（遠景）',
+
+'exif-subjectdistance-value' => '$1 メートル',
+
+'exif-meteringmode-0'   => '不明',
+'exif-meteringmode-1'   => '平均',
+'exif-meteringmode-2'   => '中央重点',
+'exif-meteringmode-3'   => 'スポット',
+'exif-meteringmode-4'   => 'マルチスポット',
+'exif-meteringmode-5'   => '分割測光',
+'exif-meteringmode-6'   => '部分測光',
+'exif-meteringmode-255' => 'その他',
+
+'exif-lightsource-0'   => '不明',
+'exif-lightsource-1'   => '昼光',
+'exif-lightsource-2'   => '蛍光灯',
+'exif-lightsource-3'   => 'タングステン（白熱灯）',
+'exif-lightsource-4'   => 'フラッシュ',
+'exif-lightsource-9'   => '晴天',
+'exif-lightsource-10'  => '曇天',
+'exif-lightsource-11'  => '日陰',
+'exif-lightsource-12'  => '昼光色蛍光灯 (D 5700 - 7100K)',
+'exif-lightsource-13'  => '昼白色蛍光灯 (N 4600 - 5400K)',
+'exif-lightsource-14'  => '白色蛍光灯 (W 3900 - 4500K)',
+'exif-lightsource-15'  => '温白色蛍光灯 (WW 3200 - 3700K)',
+'exif-lightsource-17'  => '標準光A',
+'exif-lightsource-18'  => '標準光B',
+'exif-lightsource-19'  => '標準光C',
+'exif-lightsource-20'  => 'D55',
+'exif-lightsource-21'  => 'D65',
+'exif-lightsource-22'  => 'D75',
+'exif-lightsource-23'  => 'D50',
+'exif-lightsource-24'  => 'ISOスタジオタングステン',
+'exif-lightsource-255' => 'その他',
+
+'exif-focalplaneresolutionunit-2' => 'インチ',
+
+'exif-sensingmethod-1' => '未定義',
+'exif-sensingmethod-2' => '単板カラーセンサー',
+'exif-sensingmethod-3' => '2板カラーセンサー',
+'exif-sensingmethod-4' => '3板カラーセンサー',
+'exif-sensingmethod-5' => '色順次カラーセンサー',
+'exif-sensingmethod-7' => '3線リニアセンサー',
+'exif-sensingmethod-8' => '色順次リニアセンサー',
+
+'exif-filesource-3' => 'デジタルスチルカメラ',
+
+'exif-scenetype-1' => '直接撮影された画像',
+
+'exif-customrendered-0' => '通常',
+'exif-customrendered-1' => 'カスタム',
+
+'exif-exposuremode-0' => '自動',
+'exif-exposuremode-1' => 'マニュアル',
+'exif-exposuremode-2' => 'オートブラケット',
+
+'exif-whitebalance-0' => '自動',
+'exif-whitebalance-1' => 'マニュアル',
+
+'exif-scenecapturetype-0' => '標準',
+'exif-scenecapturetype-1' => '風景',
+'exif-scenecapturetype-2' => '人物',
+'exif-scenecapturetype-3' => '夜景',
+
+'exif-gaincontrol-0' => 'なし',
+'exif-gaincontrol-1' => '弱増感',
+'exif-gaincontrol-2' => '強増感',
+'exif-gaincontrol-3' => '弱減感',
+'exif-gaincontrol-4' => '強増感',
+
+'exif-contrast-0' => '標準',
+'exif-contrast-1' => '軟調',
+'exif-contrast-2' => '硬調',
+
+'exif-saturation-0' => '標準',
+'exif-saturation-1' => '低彩度',
+'exif-saturation-2' => '高彩度',
+
+'exif-sharpness-0' => '標準',
+'exif-sharpness-1' => '弱',
+'exif-sharpness-2' => '強',
+
+'exif-subjectdistancerange-0' => '不明',
+'exif-subjectdistancerange-1' => 'マクロ',
+'exif-subjectdistancerange-2' => '近景',
+'exif-subjectdistancerange-3' => '遠景',
+
+# Pseudotags used for GPSLatitudeRef and GPSDestLatitudeRef
+'exif-gpslatitude-n' => '北緯',
+'exif-gpslatitude-s' => '南緯',
+
+# Pseudotags used for GPSLongitudeRef and GPSDestLongitudeRef
+'exif-gpslongitude-e' => '東経',
+'exif-gpslongitude-w' => '西経',
+
+'exif-gpsstatus-a' => '測位中',
+'exif-gpsstatus-v' => '未測位',
+
+'exif-gpsmeasuremode-2' => '2次元測位',
+'exif-gpsmeasuremode-3' => '3次元測位',
+
+# Pseudotags used for GPSSpeedRef and GPSDestDistanceRef
+'exif-gpsspeed-k' => 'キロメートル毎時',
+'exif-gpsspeed-m' => 'マイル毎時',
+'exif-gpsspeed-n' => 'ノット',
+
+# Pseudotags used for GPSTrackRef, GPSImgDirectionRef and GPSDestBearingRef
+'exif-gpsdirection-t' => '真方位',
+'exif-gpsdirection-m' => '磁方位',
+
+# External editor support
+'edit-externally'      => '外部アプリケーションを使ってこのファイルを編集する',
+'edit-externally-help' => '詳しい情報は[http://meta.wikimedia.org/wiki/Help:External_editors 外部エディタに関する説明（英語）]をご覧ください。',
+
+# 'all' in various places, this might be different for inflected languages
+'recentchangesall' => 'すべて',
+'imagelistall'     => 'すべて',
+'watchlistall1'    => 'すべて',
+'watchlistall2'    => 'すべて',
+'namespacesall'    => 'すべて',
+
+# E-mail address confirmation
+'confirmemail'            => 'メールアドレスの確認',
+'confirmemail_noemail'    => '[[{{ns:special}}:Preferences|オプション設定]]で有効なメールアドレスが指定されていません。',
+'confirmemail_text'       => 'このウィキではメール通知を受け取る前にメールアドレスの確認が必要です。以下のボタンを押すと「{{int:Confirmemail_subject}}」という件名の確認メールがあなたのメールアドレスに送られます。メールには確認用コードを含むリンクが書かれています。そのリンクを開くことによってメールアドレスの正当性が確認されます。',
+'confirmemail_pending'    => '<div class="error">
+確認メールは既に送信されています。あなたがこのアカウントを作成したばかりであれば、数分待って既にメールが送信されていないかを確かめてください。
+</div>',
+'confirmemail_send'       => '確認用コードを送信する',
+'confirmemail_sent'       => '確認メールを送信しました。',
+'confirmemail_oncreate'   => 'メールアドレスの正当性を確認するためのコードを含んだメールを送信しました。この確認を行わなくてもログインはできますが、確認するまでメール通知の機能は無効化されます。',
+'confirmemail_sendfailed' => '確認メールを送信できませんでした。メールアドレスに不正な文字が含まれていないかどうか確認してください。
+
+メールサーバーからの返答: $1',
+'confirmemail_invalid'    => '確認用コードが正しくありません。このコードは期限切れです。',
+'confirmemail_needlogin'  => 'メールアドレスを確認するために$1が必要です。',
+'confirmemail_success'    => 'あなたのメールアドレスは確認されました。ログインしてウィキを使用できます。',
+'confirmemail_loggedin'   => 'あなたのメールアドレスは確認されました。',
+'confirmemail_error'      => 'あなたの確認を保存する際に内部エラーが発生しました。',
+'confirmemail_subject'    => '{{SITENAME}} メールアドレスの確認',
+'confirmemail_body'       => 'This is a E-mail confirmation of *{{SITENAME}}*.
+If you can not read this message below,
+you can not read wikimail either.
+Then, please change a mailer
+or address which can read UTF-8 mail, and retry.
+Thank you.
+
+--
+
+どなたか（IPアドレス $1 の使用者）がこのメールアドレスを
+{{SITENAME}} のアカウント "$2" に登録しました。
+
+このアカウントがあなたのものであるか確認してください。
+あなたの登録したアカウントであるならば、{{SITENAME}}
+のメール通知機能を有効にするために、以下のURLにアクセスしてください:
+
+$3
+
+もし {{SITENAME}} について身に覚えがない場合は、リンクを開かないでください。
+確認用コードは $4 に期限切れになります。
+
+-- 
+{{SITENAME}}
+{{SERVER}}/',
+
+# Inputbox extension, may be useful in other contexts as well
+'tryexact'       => '一致する項目を検索',
+'searchfulltext' => '全文検索',
+'createarticle'  => '項目を作成',
+
+# Scary transclusion
+'scarytranscludedisabled' => '[Interwiki transcluding は無効になっています]',
+'scarytranscludefailed'   => '[テンプレート $1 の取得に失敗しました]',
+'scarytranscludetoolong'  => '[URLが長すぎます]',
+
+# Trackbacks
+'trackbackbox'      => '<div id="mw_trackbacks">
+この項目へのトラックバック:
+$1
+</div>',
+'trackbackremove'   => ' ([$1 削除])',
+'trackbacklink'     => 'トラックバック',
+'trackbackdeleteok' => 'トラックバックを削除しました。',
+
+# Delete conflict
+'deletedwhileediting' => "'''警告:''' このページはあなたが編集し始めた後、削除されました!!",
+'confirmrecreate'     => 'あなたがこのページを編集し始めた後に、このページは[[User:$1|$1]] ([[User_talk:$1|会話]]) によって削除されました。その理由は次の通りです:
+:$2
+このままこのページを新規作成して良いか確認してください。',
+'recreate'            => '新規作成する',
+
+'unit-pixel' => 'px',
+
+# HTML dump
+'redirectingto' => '[[$1]]へ転送しています...',
+
+# action=purge
+'confirm_purge'        => 'ページのキャッシュを破棄します。よろしいですか?
+
+$1',
+'confirm_purge_button' => 'はい',
+
+'youhavenewmessagesmulti' => '$1 に新しいメッセージが届いています',
+
+'searchcontaining' => "'''$1''' を含むページの検索。",
+'searchnamed'      => "ページ名が '''$1''' の項目の検索。",
+'articletitles'    => "''$1'' からはじまる項目",
+'hideresults'      => '結果を隠す',
+
+# DISPLAYTITLE
+'displaytitle' => '（このページへリンクするには [[$1]] を使用）',
+
+'loginlanguagelabel' => '言語: $1',
+
+# Multipage image navigation
+'imgmultipageprev'   => '&larr; 前ページ',
+'imgmultipagenext'   => '次ページ &rarr;',
+'imgmultigo'         => '表示',
+'imgmultigotopost'   => 'ページ目を',
+'imgmultiparseerror' => '画像ファイルが壊れているか正しくないため、ページのリストを生成できませんでした。',
+
+# Table pager
+'ascending_abbrev'         => '昇順',
+'descending_abbrev'        => '降順',
+'table_pager_next'         => '次のページ',
+'table_pager_prev'         => '前のページ',
+'table_pager_first'        => '最初のページ',
+'table_pager_last'         => '最後のページ',
+'table_pager_limit'        => '1ページに $1 個表示',
+'table_pager_limit_submit' => '実行',
+'table_pager_empty'        => '結果なし',
+
+# Auto-summaries
+'autosumm-blank'   => 'ページの白紙化',
+'autosumm-replace' => "ページの置換: '$1'",
+'autoredircomment' => '[[$1]]へのリダイレクト', # This should be changed to the new naming convention, but existed beforehand
+'autosumm-new'     => "新しいページ: '$1'",
+
+# Size units
+'size-bytes'     => '$1 バイト',
+'size-kilobytes' => '$1 キロバイト',
+'size-megabytes' => '$1 メガバイト',
+'size-gigabytes' => '$1 ギガバイト',
+
+# Live preview
+'livepreview-loading' => '読み込み中…',
+'livepreview-ready'   => '読み込み中… 完了',
+'livepreview-failed'  => 'ライブプレビューが失敗しました。
+通常のプレビューを試みてください。',
+'livepreview-error'   => '接続に失敗しました: $1 "$2"
+通常のプレビューを試みてください。',
+
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesJbo.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesJbo.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesJbo.php	(revision 1280)
@@ -0,0 +1,23 @@
+<?php
+/** Lojban (Lojban)
+  *
+  * @addtogroup Language
+  */
+
+$messages = array(
+
+'1movedto2'		=> 'le pu se cmene lu [[$1]] li\'u cu ca se cmene lu [[$2]] li\'u',
+'categories'		=> 'klesi',
+'pagecategories'	=> '{{PLURAL:$1|klesi|klesi}}',
+'currentevents'		=> 'nuzba ckupau',
+'currentevents-url'	=> 'nuzba ckupau',
+'help'			=> 'sidju ckupau',
+'mainpage'		=> 'ralju ckupau',
+'movedto'		=> 'te muvdu',
+'pagemovedtext'		=> '[[$1]] te muvdu [[$2]] le vreji',
+'portal'		=> 'bende ckupau',
+'randompage'		=> 'cunso ckupau'
+
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesJv.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesJv.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesJv.php	(revision 1280)
@@ -0,0 +1,489 @@
+<?php
+/** Javanese (Basa Jawa)
+ *
+ * @addtogroup Language
+ *
+ * @author Niklas Laxström
+ *
+ * @copyright Copyright © 2006, Niklas Laxström
+ * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
+ */
+$fallback = 'id';
+
+$namespaceNames = array(
+	NS_MEDIA            => 'Media',
+	NS_SPECIAL          => 'Astamiwa',
+	NS_MAIN             => '',
+	NS_TALK             => 'Dhiskusi',
+	NS_USER             => 'Panganggo',
+	NS_USER_TALK        => 'Dhiskusi_Panganggo',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK     => 'Dhiskusi_$1',
+	NS_IMAGE            => 'Gambar',
+	NS_IMAGE_TALK       => 'Dhiskusi_Gambar',
+	NS_MEDIAWIKI        => 'MediaWiki',
+	NS_MEDIAWIKI_TALK   => 'Dhiskusi_MediaWiki',
+	NS_TEMPLATE         => 'Cithakan',
+	NS_TEMPLATE_TALK    => 'Dhiskusi_Cithakan',
+	NS_HELP             => 'Pitulung',
+	NS_HELP_TALK        => 'Dhiskusi_Pitulung',
+	NS_CATEGORY         => 'Kategori',
+	NS_CATEGORY_TALK    => 'Dhiskusi_Kategori'
+);
+
+$namespaceAliases = array(
+	'Gambar_Dhiskusi' => NS_IMAGE_TALK,
+	'MediaWiki_Dhiskusi' => NS_MEDIAWIKI_TALK,
+	'Cithakan_Dhiskusi' => NS_TEMPLATE_TALK,
+	'Pitulung_Dhiskusi' => NS_HELP_TALK,
+	'Kategori_Dhiskusi' => NS_CATEGORY_TALK,
+);
+
+$messages = array(
+# User preference toggles
+'tog-rememberpassword' => 'Éling tembung sandhi ing saben sèsi',
+
+'underline-always' => 'Tansah',
+
+# Dates
+'sunday'       => 'Minggu',
+'monday'       => 'Senèn',
+'tuesday'      => 'Slasa',
+'wednesday'    => 'Rebo',
+'thursday'     => 'Kemis',
+'friday'       => 'Jemuwah',
+'saturday'     => 'Setu',
+'sun'          => 'Min',
+'mon'          => 'Sen',
+'tue'          => 'Sel',
+'wed'          => 'Rab',
+'thu'          => 'Kam',
+'fri'          => 'Jum',
+'sat'          => 'Sab',
+'january'      => 'Januari',
+'february'     => 'Februari',
+'march'        => 'Maret',
+'may_long'     => 'Mei',
+'june'         => 'Juni',
+'july'         => 'Juli',
+'august'       => 'Agustus',
+'october'      => 'Oktober',
+'december'     => 'Desember',
+'january-gen'  => 'Januari',
+'february-gen' => 'Februari',
+'march-gen'    => 'Maret',
+'may-gen'      => 'Mei',
+'june-gen'     => 'Juni',
+'july-gen'     => 'Juli',
+'august-gen'   => 'Agustus',
+'october-gen'  => 'Oktober',
+'december-gen' => 'Desember',
+'may'          => 'Mei',
+'aug'          => 'Agu',
+'oct'          => 'Okt',
+'dec'          => 'Des',
+
+# Bits of text used by many pages
+'categories'      => 'Kategori Kaca',
+'category_header' => 'Artikel-artikel wonten ing kategori "$1"',
+
+'about'          => 'Prakawis',
+'cancel'         => 'Batal',
+'qbfind'         => 'Golèk',
+'qbspecialpages' => 'Kaca-kaca Astamiwa',
+'mypage'         => 'Panggonanku',
+'mytalk'         => 'Gunemanku',
+'anontalk'       => 'Dhiskusi IP puniki',
+'navigation'     => 'Pandhu Arah',
+
+'returnto'         => 'Wangsul dumugi $1.',
+'tagline'          => 'Saka {{SITENAME}}',
+'help'             => 'Pitulung',
+'search'           => 'Golek',
+'searchbutton'     => 'Golèk',
+'go'               => 'Menyang',
+'searcharticle'    => 'Tumuju',
+'history'          => 'Sejarah Kaca',
+'history_short'    => 'Sejarah Kaca',
+'printableversion' => 'Versi Cithak',
+'editthispage'     => 'Sunting kaca iki',
+'delete'           => 'Ilangana',
+'deletethispage'   => 'Busak kaca iki',
+'protect'          => 'Reksanen',
+'unprotect'        => 'apus reksa',
+'newpage'          => 'Kaca Anyar',
+'talkpage'         => 'Diskuseke kaca iki',
+'specialpage'      => 'Kaca Astamiwa',
+'articlepage'      => 'Mirsani isinipun kaca',
+'talk'             => 'Dhiskusi',
+'toolbox'          => 'kothak piranti',
+'categorypage'     => 'Cobi pirsani kaca kategori',
+'otherlanguages'   => 'Basa liyane',
+'redirectedfrom'   => '(Dipindhah saka $1)',
+'lastmodifiedat'   => 'Kaca iki pungkasan diowahi nalika $2, $1.', # $1 date, $2 time
+'jumptonavigation' => 'pandhu arah',
+'jumptosearch'     => 'golèk',
+
+# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
+'aboutsite'         => 'Prakawis {{SITENAME}}',
+'aboutpage'         => 'Project:Prakawis',
+'bugreports'        => 'Laporan kasalahan',
+'copyright'         => 'Kabèh teks kasedyaaké ing ngisoré $1.',
+'currentevents'     => 'Warta wigati',
+'currentevents-url' => 'Warta wigati',
+'disclaimers'       => 'Panyangkalan',
+'edithelp'          => 'Pitulung panyuntingan',
+'mainpage'          => 'Kaca Utama',
+'portal'            => 'Gapura komunitas',
+'sitesupport'       => 'Nyumbang dana',
+
+'badaccess'        => 'mBoten angsal',
+'badaccess-group0' => 'Panjenengan mboten pareng nglakoaken tindhakan ingkang panjenengan gayuh.',
+'badaccess-group1' => 'Pratingkah ingkang panjenengan suwun namung saged kangge pangguna kelompok $1.',
+'badaccess-group2' => 'Pratingkah ingkang panjenengan suwun dipun-watesi kanggé pangguna ing kelompok $1.',
+'badaccess-groups' => 'Pratingkah panjenengan dipun-watesi tumrap panganggé ing kelompokipun $1.',
+
+'retrievedfrom'       => 'Sumber artikel iki saka kaca situs web: "$1"',
+'youhavenewmessages'  => 'Panjenengan gadhah $1 ($2).',
+'newmessageslink'     => 'warta enggal',
+'newmessagesdifflink' => 'mirsani bédanipun saking revisi sadèrèngipun',
+'toc'                 => 'Bab lan Paragraf',
+'hidetoc'             => 'delikna',
+
+# Short words for each namespace, by default used in the 'article' tab in monobook
+'nstab-user'      => 'Kaca panganggo',
+'nstab-mediawiki' => 'Pariwara',
+
+# General errors
+'filerenameerror' => 'Mboten saged ngowahi saking "$1" dados "$2".',
+'badarticleerror' => 'Aksi punika mboten saged katindhaaken ing kaca punika.',
+'cannotdelete'    => 'mBoten saged mbusak kaca utawi berkas ingkang dipunsuwun.',
+'badtitle'        => 'Judhulipun mboten sah',
+'badtitletext'    => 'Judhul kaca ingkang panjenengan suwun mboten saged kacakaken, kosong, utawi dados judhul antar-basa utawi judhul antar-wiki. Punika saged ugi wonten satunggal utawi luwih aksara ingkang mboten saged kadadosaken judhul.',
+'viewsource'      => 'Tuduhna Sumber',
+
+# Login and logout pages
+'logouttitle'                => 'Metu log panganggo',
+'logouttext'                 => "Panjenengan sampun medal (oncat) saking cathetan sistem. Panjenengan saged migunaaken {{SITENAME}} kanthi anonim, utawi panjenengan saged mlebet malih . Supados dipun mangertosi bilih wonten kaca ingkang taksih nganggpe panjenengan kacathet ing sistem amargi panjenengan dèrèng mbusak <em>cache</em> ''browser'' panjenengan.",
+'loginpagetitle'             => 'Mlebu log panganggo',
+'yourname'                   => 'Asma pangageman',
+'yourpassword'               => 'tembung sandhi',
+'remembermypassword'         => 'Éling tembung sandhi',
+'loginproblem'               => '<strong>Ana masalah ing proses mlebu log panjenengan.</strong><br />Sumangga nyoba manèh!',
+'alreadyloggedin'            => '<strong>Penganggé $1, panjenengan sejatosipun sampun mlebet!</strong><br />',
+'login'                      => 'Mlebu',
+'loginprompt'                => "Panjenengan kudu ngaktifaké ''cookies'' supaya bisa mlebu (log in) ing {{SITENAME}}.",
+'userlogin'                  => 'Mlebu log / gawé rékening (akun)',
+'logout'                     => 'Oncat',
+'userlogout'                 => 'Metu log',
+'nologin'                    => 'Durung kagungan asma panganggo? $1.',
+'createaccount'              => 'Damel akun énggal',
+'gotaccount'                 => 'Sampun gadhah akun? $1.',
+'gotaccountlink'             => 'Mlebet',
+'createaccountmail'          => "liwat layang-e (''e-mail'')",
+'badretype'                  => 'Sandhi panjenengan mboten gathuk',
+'yourrealname'               => 'Asma sejatosipun *',
+'yourlanguage'               => 'Basa ingkang kaginaaken:',
+'yournick'                   => 'Asma sesinglon/samaran (kagem tapak asma):',
+'badsig'                     => 'Tapak asmanipun klentu; cek tag HTML.',
+'loginerror'                 => 'Kesalahan mlebu log',
+'nocookiesnew'               => "Rékening utawa akun panganggo panjenengan wis digawé, nanging panjenengan durung mlebu log. {{SITENAME}} nggunakaké ''cookies'' kanggo  log panganggo. ''Cookies'' ing panjelajah web panjengengan dipatèni. Mangga diaktifaké lan mlebu log manèh mawa jeneng panganggo lan tembung sandhi panjenengan.",
+'loginsuccesstitle'          => 'Bisa suksès mlebu log',
+'loginsuccess'               => "'''Panjenengan sapunika mlebet ing {{SITENAME}} kanthi asma \"\$1\".'''",
+'nosuchuser'                 => 'Mboten wonten panganggé mawi nami "$1". Cobi dipunpriksa malih éjaanipun, utawi mangga ngagem formulir ing andhap punika kanggé mbikak akun/rékening énggal.',
+'passwordsent'               => 'Tembung sandhi anyar wis dikirim menyang alamat e-mail panjenengan sing wis didaftar kanggo "$1". Mangga mlebu log manèh sawisé nampa e-mail iku.',
+'acct_creation_throttle_hit' => 'Nuwun sèwu, panjenengan sampun damel akun $1. Panjenengan mboten saged damel malih.',
+'accountcreated'             => 'Akun sampun kacipta.',
+'accountcreatedtext'         => 'Akun kanggé $1 sampun kacipta.',
+
+# Edit page toolbar
+'bold_sample' => 'Seratan puniki bakal dipun-cithak kandel',
+'bold_tip'    => 'Cithak kandel',
+
+# Edit pages
+'summary'               => 'Ringkesan',
+'minoredit'             => 'Suntingan sithik',
+'watchthis'             => 'Tonton artikel iki',
+'savearticle'           => 'Simpen',
+'preview'               => 'Pratilik',
+'showpreview'           => 'Tuduhna dhisik',
+'anoneditwarning'       => "'''Kedah dipun-gatèaken:''' Panjenengan mboten mlebet dados panganggé. Alamat internet (IP) panjenengan kacathet wonten ing sajarah kaca punika.",
+'blockedtitle'          => 'Panganggem (anggota) punika dipun-blok.',
+'blockedtext'           => 'Asma panjenengan utawi alamat IP-nipun sampun dipun-blok dening  $1.
+Alesanipun:<br />\'\'$2\'\'<p>Panjengengan saged ngubungi $1 utawi salah satunggalipun saking
+[[Project:Administrators|pengurus]] kanggé ngrembag prakawis blok punika.
+Cathetan bilih panjenengan mboten kepareng nganggé fitur "ngirim layang elektronik panganggé punika" kejawi panjenengan sampun validasi layak elektronik ing [[{{ns:special}}:Preferences|preferensiku]].
+Alamat IP panjenengan inggih punika $3. Dipun-aturi nglebetaken alamat punika ing sedanten pitakènan ingkang dipun-ajoaken.',
+'blockedoriginalsource' => "Isi sumber saking '''$1''' kapacak kados ing ngandhap punika:",
+'blockededitsource'     => "Teks '''suntingan panjenengan''' ing '''$1''' kapacak kados ing ngandhap punika:",
+'whitelistedittitle'    => 'Perlu mlebu log kanggo nyunting',
+'whitelistreadtitle'    => 'Perlu mlebu log kanggo maca',
+'loginreqlink'          => 'mlebu log',
+'loginreqpagetext'      => 'Panjenengan kudu $1 bèn bisa ndeleng kaca liyané.',
+'accmailtitle'          => 'Sandhinipun sampun kakirim',
+'accmailtext'           => 'Sandhi kanggé "$1" sampun kakirim dugi $2.',
+'newarticle'            => '(Anyar)',
+'newarticletext'        => "Katonane panjenengan ngetutake pranala artikel sing durung ana.
+Manawa arep manulis artikel iki, manggaa. (Tontonen
+[[{{ns:project}}:Help|Pitulung]] kanggo informasi sabanjure).
+Yen ora sengaja tekan kene, bisa ngeklik pencetan '''back''' wae.",
+'previewnote'           => 'Mugi dipun gatekaken menawi punika namung pratilik kemawon, dereng dipun simpen!',
+'session_fail_preview'  => '<strong>Nuwun sèwu, suntingan panjenengan ora bisa diolah amarga dhata sèsi kabusak. Coba kirim dhata manèh. Yèn tetep ora bisa, coba log metua lan mlebu log manèh.</strong>',
+'editing'               => 'Nyunting $1',
+'editconflict'          => 'Konflik sunting: $1',
+'yourtext'              => 'Seratan Panjenengan',
+'yourdiff'              => 'Bentenipun',
+'copyrightwarning'      => 'Tulung dipun-gatosaken menawi sedaya kontribusi kanggé {{SITENAME}} punika dipunanggep dipunluncuraken miturut $2 GNU (mangga priksanen $1 kangge detailipun).
+Menawi panjenengan mboten kersa menawi seratan panjenengan bakal dipunsunting kaliyan dipunsebar, sampun dipundèkèk ing ngriki.<br>
+Panjenengan ugi janji menawi punapa-punapa ingkang kaserat ing ngriki, karyanipun panjenengan piyambak, utawi dipunsalin saking sumber bébas. <strong>SAMPUN NDEKEK KARYA INGKANG DIPUNREKSA DENING UNDANG-UNDANG HAK CIPTA TANPA IDIN!</strong>',
+'protectedpagewarning'  => '<strong>PÈNGET:  Kaca puniki dipunkunci dados namung para pangurus kémawon ingkang saged nyunting puniki.</strong>',
+'nocreatetext'          => 'Situs iki ngwatesi panjengan ndamel kaca anyar. Panjenengan bisa bali lan nyunting kaca sing wis ana, utawa mangga [[{{ns:special}}:Userlogin|mlebu log utawa ndaftar]]',
+
+# History pages
+'deletedrev' => '[kabusak]',
+'histfirst'  => 'Paling lawas',
+
+# Diffs
+'difference'              => '(Bedané antarrevisi)',
+'compareselectedversions' => 'Mbandhingaken versi ingkang kapilih',
+
+# Search results
+'searchresults'     => 'Pituwas pamadosan',
+'searchsubtitle'    => "Panjengan madosi '''[[:$1]]'''",
+'badquery'          => 'Format panjaluk pamadosan panjenengan klentu',
+'showingresults'    => 'Ing ngandhap punika dipuntuduhaken <strong>$1</strong> kasil, wiwitanipun saking #<strong>$2</strong>.',
+'showingresultsnum' => 'Ing ngandhap punika dipuntuduhaken <strong>$3</strong> kasil, wiwitanipun saking #<strong>$2</strong>.',
+'powersearch'       => 'Golek',
+'powersearchtext'   => "Golèk ing bilik jeneng (''namespace''):<br />$1<br />$2 Uga tuduhna kaca pangalihan<br />Golèk $3 $9",
+
+# Preferences page
+'preferences'             => 'Konfigurasi',
+'mypreferences'           => 'Preferensiku',
+'prefsnologin'            => 'Durung mlebu log',
+'prefsnologintext'        => 'Panjenengan kudu [[{{ns:special}}:Userlogin|mlebu log]] kanggo nyimpen préférèsi njenengan.',
+'qbsettings-none'         => 'Ora ana',
+'qbsettings-fixedleft'    => 'Tetep sisih kiwa',
+'qbsettings-fixedright'   => 'Tetep sisih tengen',
+'qbsettings-floatingleft' => 'Ngambang sisih kiwa',
+'changepassword'          => 'Ganti tembung sandhi',
+'searchresultshead'       => 'Pamadosan',
+'allowemail'              => 'Marengaken panganggé sanèsipun ngirim layang èlèktronik (email).',
+'defaultns'               => "Golèk ing bilik jeneng (''namespace'') iki mawa baku:",
+
+# User rights log
+'rightsnone' => '(mboten wonten)',
+
+# Recent changes
+'recentchanges'   => 'Owah-owahan',
+'rcnote'          => 'Ing ngisor iki kapacak owahan-owahan <strong>$1</strong> pungkasan ing  <strong>$2</strong> dina pungkasan iki $3.',
+'rcnotefrom'      => 'Ing ngisor iki owah-owahan wiwit <strong>$2</strong> (kapacak nganti <strong>$1</strong> owah-owahan).',
+'rclistfrom'      => 'Saiki nuduhaké owah-owahan wiwit tanggal $1',
+'rcshowhideminor' => '$1 suntingan sithik',
+'rcshowhideliu'   => '$1 panganggo mlebu log',
+'rcshowhidemine'  => '$1 suntinganku',
+'rclinks'         => 'Tuduhna owah-owahan pungkasan $1 ing $2 dina pungkasan iki.<br />$3',
+'diff'            => 'béda',
+'hist'            => 'sajarah',
+'hide'            => 'Delikna',
+'minoreditletter' => 's',
+'newpageletter'   => 'A',
+
+# Recent changes linked
+'recentchangeslinked' => 'Pranala Pilihan',
+
+# Upload
+'upload'            => 'Unggah',
+'reuploaddesc'      => 'Wangsul ing formulir pamotan',
+'uploadnologin'     => 'Durung mlebu log',
+'uploadnologintext' => 'Panjenengan kudu [[{{ns:special}}:Userlogin|mlebu log]] supaya olèh ngunggahaké gambar utawa berkas liyané.',
+'filedesc'          => 'Ringkesan',
+'badfilename'       => 'Berkas sampun dipunowahi dados "$1".',
+'largefileserver'   => 'Berkas puniki langkung ageng tinimbang ingkang saged kaparengaken server.',
+'uploadedimage'     => 'gambar "[[$1]]" kaminggahaken',
+'destfilename'      => 'Asma berkas ingkang dipun tuju',
+
+# Image list
+'ilsubmit'             => 'Golek',
+'byname'               => 'miturut jeneng',
+'bydate'               => 'miturut tanggal',
+'bysize'               => 'miturut ukuran',
+'deleteimg'            => 'bsk',
+'imagelist_search_for' => 'Golèk jeneng berkas:',
+
+# MIME search
+'download' => 'undhuh',
+
+# Statistics
+'userstats'     => 'Statistik panganggé',
+'sitestatstext' => "Sapunika wonten '''\$1''' kaca total ing ''database''. Ing punika kalebet kaca-kaca \"talk\", prakawis {{SITENAME}}, artikel \"stub\" (rintisan), kaca pangalih (''redirect''), kaliyan kaca-kaca ingkang sanès kaca isi.
+Sasanèsipun punika, wonten '''\$2''' kaca ingkang mbokmenawi sah.
+Sampun naté wonten '''\$3''' kaca dipun tontonaken kaliyan '''\$4''' kaca naté dipun sunting sasampunipun wiki punika dipun adegaken.
+Dados tegesipun rata-rata wonten '''\$5''' suntingan per kaca kaliyan '''\$6''' tayangan per suntingan.",
+'userstatstext' => "Wonten '''$1''' panganggé ingkang sampun ndaftar. '''$2''' (utawi '''$4%''') antawisipun punika $5.",
+
+'disambiguations' => 'Kaca disambiguasi',
+
+'brokenredirects'     => 'Pengalihanipun risak',
+'brokenredirectstext' => 'Pengalihanipun kaca punika mboten kepanggih sambunganipun.',
+
+# Miscellaneous special pages
+'lonelypages'         => 'Kaca tanpa dijagani',
+'allpages'            => 'Kabèh kaca',
+'prefixindex'         => 'Indeks awalan',
+'randompage'          => 'Sembarang Kaca',
+'deadendpages'        => 'Kaca-kaca buntu (tanpa pranala)',
+'deadendpagestext'    => 'kaca-kaca punika mboten gadhah pranala dumugi pundi mawon wonten ing wiki puniki..',
+'protectedpagesempty' => 'Saat ini tidak ada halaman yang sedang dilindungi.',
+'specialpages'        => 'Kaca-kaca astamiwa',
+'newpages'            => 'Kaca énggal',
+'newpages-username'   => 'Asma panganggo:',
+'ancientpages'        => 'Kaca-kaca langkung sepuh',
+'move'                => 'pindhahen',
+
+'categoriespagetext' => 'Kategori-kategori punika wonten ing wiki.',
+'alphaindexline'     => '$1 tumuju $2',
+
+# Special:Allpages
+'allpagesfrom'      => 'Kaca-kaca kawiwitan kanthi:',
+'allarticles'       => 'Kabèh artikel',
+'allinnamespace'    => 'Kabeh kaca ($1 namespace)',
+'allnotinnamespace' => 'Sedaya kaca (mboten panggènan asma $1)',
+'allpagesprev'      => 'Sadèrèngipun',
+'allpagesnext'      => 'Salajengipun',
+'allpagessubmit'    => 'Madosi',
+'allpagesprefix'    => 'Kapacak kaca-kaca ingkang mawi ater-ater:',
+'allpagesbadtitle'  => 'Irah-irahan (judhul) ingkang dipun-gunaaken boten sah utawi nganggé ater-ater (awalan) antar-basa utawi antar-wiki. Irah-irahan punika saged ugi nganggé setunggal aksara utawi luwih ingkang boten saged kagunaaken dados irah-irahan.',
+
+# E-mail user
+'mailnologintext' => 'Panjenengan kudu [[{{ns:special}}:Userlogin|mlebu log]] lan kagungan alamat e-mail sing sah ing [[{{ns:special}}:Preferences|preféèrensi]] yèn kersa ngirim layang e-mail kanggo panganggo liya.',
+
+# Watchlist
+'clearwatchlist'     => 'Ngosongaken daftar artikel pilihan',
+'watchlistcleartext' => 'Apa panjenengan manteb arep mbusak?',
+'watchnologin'       => 'Durung mlebu log',
+'watchnologintext'   => 'Panjenengan kudu [[{{ns:special}}:Userlogin|mlebu log]] kanggo ngowahi daftar artikel pilihan.',
+'addedwatch'         => 'Sampun katambahaken wonten ing daftar artikel pilihan.',
+'watch'              => 'tutana',
+'watchthispage'      => 'Periksa kaca iki',
+
+'changed' => 'kaubah',
+'created' => 'kadamel',
+
+# Delete/protect/revert
+'deletepage'      => 'Busak kaca',
+'confirm'         => 'Dhedhes (konfirmasi)',
+'excontent'       => "isi sadurungé: '$1'",
+'excontentauthor' => "isiné mung arupa: '$1' (lan siji-sijiné sing nyumbang yaiku '$2')",
+'confirmdelete'   => 'Konfirmasi pambusakan',
+'deletesub'       => '(mBusak "$1")',
+'actioncomplete'  => 'Proses tuntas',
+'deletedtext'     => '"$1" sampun kabusak. Coba pirsani $2 kanggé log paling énggal kaca ingkang kabusak.',
+'deletedarticle'  => 'mbusak "[[$1]]"',
+'dellogpage'      => 'Cathetan pambusakan',
+'deletionlog'     => 'Cathetan sing dibusak',
+'deletecomment'   => 'Alesan dipun-busak',
+'rollback'        => 'Mangsulaken suntingan',
+'rollbacklink'    => 'balèaké',
+'revertpage'      => 'Suntingan [[{{ns:special}}:Contributions/$2|$2]] ([[{{ns:user_talk}}:$2|dhiskusi]]) dipunwangsulaken dhateng ing vèrsi pungkasan déning [[{{ns:user}}:$1|$1]]',
+'sessionfailure'  => 'Katoné ana masalah karo sèsi log panjenengan; log panjenengan wis dibatalaké kanggo nyegah pambajakan. Mangga mencèt tombol "back" lan unggahaké manèh kaca sadurungé mlebu log, lan coba manèh.',
+
+# Restrictions (nouns)
+'restriction-edit' => 'Panyuntingan',
+'restriction-move' => 'Pamindhahan',
+
+# Undelete
+'undelete'        => 'Kembalikan halaman yang telah dihapus',
+'undeletepage'    => 'Lihat dan kembalikan halaman yang telah dihapus',
+'undeletehistory' => 'Jika Anda mengembalikan halaman tersebut, semua revisi akan dikembalikan ke dalam sejarah. Jika sebuah halaman baru dengan nama yang sama telah dibuat sejak penghapusan, revisi yang telah dikembalikan akan kelihatan dalam sejarah dahulu, dan revisi terkini halaman tersebut tidak akan ditimpa secara otomatis.',
+
+# Contributions
+'contributions' => 'Sumbangan panganggo',
+'mycontris'     => 'Kontribusiku',
+'contribsub2'    => 'Kagem $1 ($2)',
+
+# What links here
+'whatlinkshere' => 'Pranala menyang kaca iki',
+
+# Block/unblock
+'badipaddress'       => 'Alamat IP klèntu',
+'blocklistline'      => '$1, $2 mblokir $3 ($4)',
+'anononlyblock'      => 'namung anon',
+'createaccountblock' => 'ndamelipun akun dipunblokir',
+'contribslink'       => 'sumbangan',
+'autoblocker'        => 'Panjenengan otomatis dipun-blok amargi nganggé alamat protokol internet (IP) ingkang sami kaliyan "[[User:$1|$1]]". Alesanipun $1 dipun blok inggih punika "\'\'\'$2\'\'\'"',
+'blocklogentry'      => 'mblokir "[[$1]]" dipun watesi wedalipun $2 $3',
+'blocklogtext'       => 'This is a log of user blocking and unblocking actions. Automatically
+blocked IP addresses are not listed. See the [[{{ns:special}}:Ipblocklist|IP block list]] for
+the list of currently operational bans and blocks.',
+
+# Move page
+'movepage'                => 'Mindhah kaca',
+'movearticle'             => 'Pindhah kaca',
+'movenologin'             => 'Durung mlebu log',
+'movenologintext'         => 'Panjenengan kudu dadi panganggo sing wis ndaftar lan wis [[{{ns:special}}:Userlogin|mlebu log]] kanggo mindhah kaca.',
+'articleexists'           => 'Satunggalipun kaca kanthi asma punika sampun wonten, utawi asma ingkang panjenengan pendhet mboten leres. Sumangga nyobi asma sanèsipun.',
+'movedto'                 => 'dipindhah menyang',
+'1movedto2'               => '$1 dipun-alihaken menyang $2',
+'1movedto2_redir'         => '[[$1]] dipunalihaken menyang [[$2]] via pangalihan',
+'revertmove'              => 'balèaké',
+'delete_and_move'         => 'busak lan kapindahaken',
+'delete_and_move_confirm' => 'Ya, busak kaca iku.',
+
+# Namespace 8 related
+'allmessages'               => 'Kabeh Laporan',
+'allmessagesname'           => 'Asma (jeneng)',
+'allmessagescurrent'        => 'Teks saiki',
+'allmessagestext'           => 'Punika pesen-pesen saking sistem ingkang kacawisaken wonten ing  MediaWiki namespace.',
+'allmessagesnotsupportedUI' => 'Basa tampilan panjenengan saiki, <strong>$1</strong> mboten kareksa dèning {{ns:special}}:AllMessages ing situs punika.',
+'allmessagesfilter'         => 'Saringan jeneng pesen:',
+'allmessagesmodified'       => 'Namung tampilanipun ingkang owah',
+
+# Attribution
+'anonymous'        => 'Panganggé {{SITENAME}} ingkang mboten kinawruhan.',
+'lastmodifiedatby' => 'Kaca iki pungkasan diowahi  $2, $1 déning $3.', # $1 date, $2 time, $3 user
+'and'              => 'lan',
+
+# Spam protection
+'categoryarticlecount' => 'Wonten $1 artikel ing kategori punika.',
+
+# Image deletion
+'deletedrevision' => 'Revisi dangu ingkang dipunbusak $1.',
+
+# E-mail address confirmation
+'confirmemail_success' => 'Alamat e-mail panjenengan wis dikonfirmasi. Saiki panjenengan bisa log mlebu lan wiwit nganggo wiki.',
+
+# Inputbox extension, may be useful in other contexts as well
+'searchfulltext' => 'Golèk ing tèks jangkep',
+'createarticle'  => 'Damel artikel',
+
+# Delete conflict
+'deletedwhileediting' => 'Wara-wara: Kaca punika sampun kabusak sasampunipun panjenengan miwiti nyunting!',
+
+# HTML dump
+'redirectingto' => 'Dipun-alihaken tumuju [[$1]]...',
+
+# action=purge
+'confirm_purge' => "Ngilangaken ''cache'' kaca punika?
+
+$1",
+
+'youhavenewmessagesmulti' => 'Panjenengan angsal pesen-pesen ènggal $1',
+
+'articletitles' => "Artikel ingkang dipun-wiwiti nganggé ''$1''",
+
+'loginlanguagelabel' => 'Basa: $1',
+
+# Multipage image navigation
+'imgmultigo' => 'Golèk!',
+
+# Table pager
+'ascending_abbrev'         => 'minggah',
+'table_pager_limit_submit' => 'Golèk',
+
+# Auto-summaries
+'autoredircomment' => 'Kaalihaken tumuju [[$1]]', # This should be changed to the new naming convention, but existed beforehand
+'autosumm-new'     => 'Kaca énggal: $1',
+
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesKa.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesKa.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesKa.php	(revision 1280)
@@ -0,0 +1,887 @@
+<?php
+/** Georgian (ქართული)
+  *
+  * @addtogroup Language
+  */
+$namespaceNames = array(
+	NS_MEDIA            => 'მედია',
+	NS_SPECIAL          => 'სპეციალური',
+	NS_MAIN             => '',
+	NS_TALK             => 'განხილვა',
+	NS_USER             => 'მომხმარებელი',
+	NS_USER_TALK        => 'მომხმარებელი_განხილვა',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK     => '$1_განხილვა',
+	NS_IMAGE            => 'სურათი',
+	NS_IMAGE_TALK       => 'სურათი_განხილვა',
+	NS_MEDIAWIKI        => 'მედიავიკი',
+	NS_MEDIAWIKI_TALK   => 'მედიავიკი_განხილვა',
+	NS_TEMPLATE         => 'თარგი',
+	NS_TEMPLATE_TALK    => 'თარგი_განხილვა',
+	NS_HELP             => 'დახმარება',
+	NS_HELP_TALK        => 'დახმარება_განხილვა',
+	NS_CATEGORY         => 'კატეგორია',
+	NS_CATEGORY_TALK    => 'კატეგორია_განხილვა'
+);
+
+$linkPrefixExtension = true;
+
+$linkTrail = '/^([a-zაბგდევზთიკლმნოპჟრსტუფქღყშჩცძწჭხჯჰ“»]+)(.*)$/sDu';
+
+$messages = array(
+
+# User preference toggles
+'tog-underline' => 'ბმულებზე გაზის გასმა:',
+'tog-highlightbroken' => 'აჩვენე არარსებული ბმულები <a href="" class="new">როგორც ეს</a> (ალტერნატივა: როგორც ეს<a href="" class="internal">?</a>).',
+#TODO: 'tog-justify'	=> 'Justify paragraphs',
+'tog-hideminor' => 'უკანასკნელ ცვლილებებში მცირე რედაქტირებების დამალვა',
+'tog-extendwatchlist' => 'განავრცეთ კონტროლის სია ისე, რომ აჩვენოთ ყველა შესაძლებელი ცვლილება',
+'tog-usenewrc' => 'გაზარდეთ ბოლო ცვლილებების სია (ჯავასკრიპტი)',
+'tog-numberheadings' => 'სათაურების ავტომატურად გადანომვრა',
+'tog-showtoolbar'		=> 'სარედაქტორო ინსტრუმენტების პანელის (ჯავასკრიპტი) ჩვენება',
+'tog-editondblclick' => 'გვერდების რედაქტირება მოახდინეთ ორმაგი დაჭერით (ჯავასკრიპტი)',
+'tog-editsection'		=> 'ნება დართეთ სექციის რედაქტირებაზე \'[რედაქტირება]\' ბმულების გავლით',
+'tog-editsectiononrightclick'	=> 'ნება დართეთ სექციის რედაქტირებაზე მარჯვენა ღილაკზე დაჭერით<br />სექციის სათაურებზე (ჯავასკრიპტი)',
+'tog-showtoc'			=> 'აჩვენეთ სარჩევი ცხრილი (იმ გვერდებისათვის, რომელსაც სამზე მეტი სათაური აქვთ)',
+'tog-rememberpassword' => 'სესიებს შორის პაროლის დამახსოვრება',
+'tog-editwidth' => 'სარედაქტირო ყუთს აქვს სრული სიგანე',
+'tog-watchcreations' => 'გვერდები, რომელიც მე გავხსენი, დაამატეთ ჩემს საკონტროლო სიას',
+'tog-watchdefault' => 'დამალეთ რობოტის რედაქტირებები საკონტროლო სიიდან',
+#TODO: 'tog-watchmoves' => 'Add pages I move to my watchlist',
+#TODO: 'tog-watchdeletion' => 'Add pages I delete to my watchlist',
+#TODO: 'tog-minordefault' => 'Mark all edits minor by default',
+'tog-previewontop' => 'რედაქტირების ფანჯრამდე წინასწარი ხედვის ჩვენება',
+'tog-previewonfirst' => 'პირველი რედაქტიებისას წინასწარი გადახედვის ჩვენება',
+#TODO: 'tog-nocache' => 'Disable page caching',
+'tog-enotifwatchlistpages' 	=> 'მომწერეთ როდესაც გვერდი, რომელსაც მე ვაკონტროლებ შეიცვლება',
+'tog-enotifusertalkpages' 	=> 'მომწერეთ, როდესაც ჩემი მომხმარებლის განხილვის გვერდი შეიცვლება',
+'tog-enotifminoredits' 		=> 'მომწერეთ ასევე მცირე რედაქტირებების შესახებ გვერდებზე',
+'tog-enotifrevealaddr' 		=> 'ჩემი ელ. ფოსტის მისამართი შეხსენებების წერილებში აჩვენეთ',
+'tog-shownumberswatching' 	=> 'კონტროლის ქვეშ მყოფი მომხმარებელთა რაოდენობის ჩვენება',
+'tog-fancysig' => 'გამოუყენებელი ხელმოწერები (ავტომატური ბმულის გარეშე)',
+#TODO: 'tog-externaleditor' => 'Use external editor by default',
+#TODO: 'tog-externaldiff' => 'Use external diff by default',
+'tog-showjumplinks' => 'დამხმარე ბმულების "გადასვლა -კენ" ჩართვა',
+'tog-uselivepreview' => 'გამოიყენეთ ახალი წინასწარი გადახედვა (ჯავასკრიპტი) (ექსპერიმენტული)',
+#TODO: 'tog-forceeditsummary' => 'Prompt me when entering a blank edit summary',
+'tog-watchlisthideown' => 'დამალეთ საკონტროლო სიიდან ჩემი რედაქტირებები',
+'tog-watchlisthidebots' => 'დამალეთ საკონტროლო სიიდან ჩემი რედაქტირებები',
+'tog-watchlisthideminor' => 'დამალეთ საკონტროლო სიიდან მცირე რედაქტირებები',
+#TODO: 'tog-nolangconversion'		=> 'Disable variants conversion',
+#TODO: 'tog-ccmeonemails' => 'Send me copies of emails I send to other users',
+#TODO: 'tog-diffonly' => "Don't show page content below diffs",
+
+'underline-always' => 'ყოველთვის',
+'underline-never' => 'არასოდეს',
+#TODO: 'underline-default' => 'Browser default',
+
+'skinpreview' => '(წინასწარი გადახედვა)',
+
+# Dates
+'sunday'	=> 'კვირა',
+'monday'	=> 'ორშაბათი',
+'tuesday'	=> 'სამშაბათი',
+'wednesday'	=> 'ოთხშაბათი',
+'thursday'	=> 'ხუთშაბათი',
+'friday'	=> 'პარასკევი',
+'saturday'	=> 'შაბათი',
+'sun'		=> 'კვი',
+'mon'		=> 'ორშ',
+'tue'		=> 'სამ',
+'wed'		=> 'ოთხ',
+'thu'		=> 'ხუთ',
+'fri'		=> 'პარ',
+'sat'		=> 'შაბ',
+'january'	=> 'იანვარი',
+'february'	=> 'თებერვალი',
+'march'		=> 'მარტი',
+'april'		=> 'აპრილი',
+'may_long'	=> 'მაისი',
+'june'		=> 'ივნისი',
+'july'		=> 'ივლისი',
+'august'	=> 'აგვისტო',
+'september'	=> 'სექტემბერი',
+'october'	=> 'ოქტომბერი',
+'november'	=> 'ნოემბერი',
+'december'	=> 'დეკემბერი',
+'january-gen'	=> 'იანვრის',
+'february-gen'	=> 'თებერვლის',
+'march-gen'	=> 'მარტის',
+'april-gen'	=> 'აპრილის',
+'may-gen'	=> 'მაისის',
+'june-gen'	=> 'ივნისის',
+'july-gen'	=> 'ივლისის',
+'august-gen'	=> 'აგვისტოს',
+'september-gen'	=> 'სექტემბრის',
+'october-gen'	=> 'ოქტომბრის',
+'november-gen'	=> 'ნოემბრის',
+'december-gen'	=> 'დეკემბრის',
+'jan'		=> 'იან',
+'feb'		=> 'თებ',
+'mar'		=> 'მარ',
+'apr'		=> 'აპრ',
+'may'		=> 'მაი',
+'jun'		=> 'ივნ',
+'jul'		=> 'ივლ',
+'aug'		=> 'აგვ',
+'sep'		=> 'სექ',
+'oct'		=> 'ოქტ',
+'nov'		=> 'ნოე',
+'dec'		=> 'დეკ',
+
+# Bits of text used by many pages:
+'categories' => 'კატეგორიები',
+'pagecategories' => '{{PLURAL:$1|კატეგორია|კატეგორიები}}',
+'category_header' => 'სტატიები კატეგორიაში "$1"',
+'subcategories' => 'ქვეკატეგორიები',
+
+
+'linkprefix' => '/^(.*?)(„|«)$/sD',
+'mainpage'		=> 'მთავარი გვერდი',
+#TODO: 'mainpagetext'	=> "<big>'''MediaWiki has been successfully installed.'''</big>",
+/*TODO: 'mainpagedocfooter' => "Consult the [http://meta.wikimedia.org/wiki/Help:Contents User's Guide] for information on using the wiki software.
+
+== Getting started ==
+
+* [http://www.mediawiki.org/wiki/Help:Configuration_settings Configuration settings list]
+* [http://www.mediawiki.org/wiki/Help:FAQ MediaWiki FAQ]
+* [http://mail.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]",*/
+
+'portal'		=> 'საზოგადოების პორტალი',
+'portal-url'		=> '{{ns:project}}:საზოგადოების პორტალი',
+'about'			=> 'შესახებ',
+'aboutsite'		=> '{{SITENAME}}-ის შესახებ',
+'aboutpage'		=> 'პროექტი:შესახებ',
+'article'		=> 'სტატია',
+'help'			=> 'დახმარება',
+'helppage'		=> '{{ns:project}}:დახმარება',
+'bugreports'	=> 'ანგარიში შეცდომის შესახებ',
+'bugreportspage' => '{{ns:project}}:ანგარიში შეცდომის შესახებ',
+'sitesupport'   => 'შეწირულობები',
+'sitesupport-url' => '{{ns:project}}:შეწირულობები',
+'faq'			=> 'ხშირი შეკითხვები',
+'faqpage'		=> '{{ns:project}}:ხშირი შეკითხვები',
+'edithelp'		=> 'რედაქტირების დახმარება',
+'newwindow'		=> '(ახალ ფანჯარაში)',
+'edithelppage'	=> '{{ns:project}}:რედაქტირების დახმარება',
+'cancel'		=> 'გაუქმება',
+'qbfind'		=> 'ძებნა',
+'qbbrowse'		=> 'მიმოხილვა',
+'qbedit'		=> 'რედაქტირება',
+'qbpageoptions' => 'ეს გვერდი',
+'qbpageinfo'	=> 'კონტექსტი',
+'qbmyoptions'	=> 'ჩემი გვერდები',
+'qbspecialpages'	=> 'სპეციალური გვერდები',
+'moredotdotdot'	=> 'მეტი...',
+'mypage'		=> 'ჩემი გვერდი',
+'mytalk'		=> 'ჩემი განხილვა',
+'anontalk'		=> 'ამ IP-ს განხილვა',
+'navigation' => 'ნავიგაცია',
+
+# Metadata in edit box
+#TODO: 'metadata_help' => 'Metadata (see [[{{ns:project}}:Metadata]] for an explanation):',
+
+'currentevents' => 'ახალი ამბები',
+'currentevents-url' => 'ახალი ამბები',
+
+'disclaimers' => 'პასუხისმგებლობის უარყოფა',
+'disclaimerpage' => '{{ns:project}}:პასუხისმგებლობის უარყოფა',
+'privacy' => 'კონფიდენციალურობის პოლიტიკა',
+'privacypage' => '{{ns:project}}:კონფიდენციალურობის პოლიტიკა',
+'errorpagetitle' => 'შეცდომა',
+'returnto'		=> '$1-ზე დაბრუნება.',
+'tagline'      	=> '{{SITENAME}}დან',
+'help'			=> 'დახმარება',
+'search'		=> 'ძიება',
+'searchbutton'		=> 'ძიება',
+'go'		=> 'გვერდი',
+'searcharticle'		=> 'გვერდი',
+'history'		=> 'გვერდის ისტორია',
+'history_short' => 'ისტორია',
+'updatedmarker' => 'ჩემი უკანასკნელი შემოსვლიდან ცვლილებები',
+'info_short'	=> 'ინფორმაცია',
+'printableversion' => 'დასაბეჭდი ვერსია',
+'permalink'     => 'მუდმივი ბმული',
+'print' => 'ბეჭდვა',
+'edit' => 'რედაქტირება',
+'editthispage'	=> 'ამ გვერდის რედაქტირება',
+'delete' => 'წაშლა',
+'deletethispage' => 'ამ გვერდის წაშლა',
+'undelete_short' => '$1 ცვლილების აღდგენა',
+'protect' => 'დაცვა',
+#TODO: 'protectthispage' => 'Protect this page',
+'unprotect' => 'დაცვის მოხსნა',
+'unprotectthispage' => 'გვერდის დაცვის მოხსნა',
+'newpage' => 'ახალი გვერდი',
+'talkpage'		=> 'განიხილეთ ეს გვერდი',
+'specialpage' => 'სპეციალური გვერდი',
+#TODO: 'personaltools' => 'Personal tools',
+'postcomment'   => 'დაურთეთ კომენტარი',
+
+'articlepage'	=> 'სტატიის ნახვა',
+'talk' => 'განხილვა',
+#TODO: 'views' => 'Views',
+'toolbox' => 'ხელსაწყოები',
+'userpage' => 'მომხმარებლის გვერდის ხილვა',
+'projectpage' => 'პროექტის გვერდის ხილვა',
+'imagepage' => 	'სურათის გვერდის ნახვა',
+#TODO: 'mediawikipage' => 	'View message page',
+#TODO: #'templatepage' => 	'View template page',
+#TODO: 'viewhelppage' => 	'View help page',
+'categorypage' => 	'კატეგორიის გვერდის ხილვა',
+#TODO: 'viewtalkpage' => 'View discussion',
+'otherlanguages' => 'სხვა ენებზე',
+#TODO: 'redirectedfrom' => '(Redirected from $1)',
+'autoredircomment' => 'გადამისამართება [[$1]]-ზე',
+'redirectpagesub' => 'გადამისამართების გვერდი',
+'lastmodifiedat'		=> 'ეს გვერდი ბოლოს განახლდა $2, $1.',	//$1 date, $2 time
+#TODO: 'viewcount'		=> 'This page has been accessed {{plural:$1|one time|$1 times}}.',
+#TODO: 'copyright'	=> 'Content is available under $1.',
+#TODO: 'protectedpage' => 'Protected page',
+#TODO: 'jumpto' => 'Jump to:',
+'jumptonavigation' => 'ნავიგაცია',
+'jumptosearch' => 'ძიება',
+
+'badaccess'        => 'აკრძალული მოქმედება',
+#'badaccess-group0' => 'You are not allowed to execute the action you have requested.',
+#'badaccess-group1' => 'The action you have requested is limited to users in the group $1.',
+#'badaccess-group2' => 'The action you have requested is limited to users in one of the groups $1.',
+#'badaccess-groups' => 'The action you have requested is limited to users in one of the groups $1.',
+
+#'versionrequired' => 'Version $1 of MediaWiki required',
+#'versionrequiredtext' => 'Version $1 of MediaWiki is required to use this page. See [[Special:Version]]',
+
+#DONT: 'widthheight'		=> '$1×$2',
+#'ok'			=> 'OK',
+#'sitetitle'		=> '{{SITENAME}}',
+#'pagetitle'		=> '$1 - {{SITENAME}}',
+#'sitesubtitle'	=> '',
+#'retrievedfrom' => 'Retrieved from "$1"',
+'youhavenewmessages' => 'თქვენ გაქვთ $1 ($2).',
+'newmessageslink' => 'ახალი შეტყობინებები',
+'newmessagesdifflink' => 'განსხვავება უკანასკნელ მდგომარეობას შორის',
+'editsection'=>'რედაქტირება',
+'editold'=>'რედაქტირება',
+'editsectionhint' => 'სექციის რედაქტირება: $1',
+'toc' => 'სარჩევი',
+'showtoc' => 'ჩვენება',
+'hidetoc' => 'დამალვა',
+'thisisdeleted' => 'გსურთ განიხილოთ ან აღადგინოთ $1?',
+'viewdeleted' => 'იხილე $1?',
+'restorelink' => '{{PLURAL:$1|ერთი წაშლილი რედაქტირება|$1 წაშლილი რედაქტირება}}',
+#'feedlinks' => 'Feed:',
+#'feed-invalid' => 'Invalid subscription feed type.',
+#'sitenotice'	=> '-', # the equivalent to wgSiteNotice
+#'anonnotice' => '-',
+
+# Short words for each namespace, by default used in the 'article' tab in monobook
+'nstab-main' => 'სტატია',
+'nstab-user' => 'მომხმარებლის გვერდი',
+'nstab-media' => 'მედია',
+'nstab-special' => 'სპეციალური',
+'nstab-project' => 'პროექტის გვერდი',
+'nstab-image' => 'ფაილი',
+'nstab-mediawiki' => 'შეტყობინება',
+'nstab-template' => 'თარგი',
+'nstab-help' => 'დახმარება',
+'nstab-category' => 'კატეგორია',
+
+# Main script and global functions
+
+# General errors
+
+# Login and logout pages
+
+# Edit page toolbar
+
+# Edit pages
+
+# History pages
+
+# Revision deletion
+
+# Diffs
+'difference'    => '(სხვაობა ვერსიებს შორის)',
+#TODO: 'loadingrev'	=> 'loading revision for diff',
+'lineno'                => "ხაზი $1:",
+'editcurrent'   => 'ამ გვერდის ამჟამინდელი ვერსიის რედაქტირება',
+#TODO: 'selectnewerversionfordiff' => 'Select a newer version for comparison',
+#TODO: 'selectolderversionfordiff' => 'Select an older version for comparison',
+'compareselectedversions' => 'არჩეული ვერსიების შედარება',
+
+# Search results
+#
+#TODO: 'searchresults' => 'Search results',
+#TODO: 'searchresulttext' => "For more information about searching {{SITENAME}}, see [[{{MediaWiki:helppage}}|{{int:help}}]].",
+#TODO: 'searchsubtitle' => "You searched for '''[[:$1]]'''",
+#TODO: 'searchsubtitleinvalid' => "You searched for '''$1'''",
+#TODO: 'badquery'		=> 'Badly formed search query',
+/*#TODO: 'badquerytext'	=> 'We could not process your query.
+This is probably because you have attempted to search for a
+word fewer than three letters long, which is not yet supported.
+It could also be that you have mistyped the expression, for
+example "fish and and scales".
+Please try another query.',*/
+/*#TODO: 'matchtotals'	=> "The query \"$1\" matched $2 page titles
+and the text of $3 pages.",*/
+#TODO: 'noexactmatch' => "'''There is no page titled \"$1\".''' You can [[:$1|create this page]].",
+#TODO: 'titlematches'	=> 'Article title matches',
+#TODO: 'notitlematches' => 'No page title matches',
+#TODO: 'textmatches'	=> 'Page text matches',
+#TODO: 'notextmatches'	=> 'No page text matches',
+#TODO: 'prevn'			=> "previous $1",
+#TODO: 'nextn'			=> "next $1",
+#TODO: 'viewprevnext'	=> "View ($1) ($2) ($3).",
+#TODO: 'showingresults' => "Showing below up to <b>$1</b> results starting with #<b>$2</b>.",
+#TODO: 'showingresultsnum' => "Showing below <b>$3</b> results starting with #<b>$2</b>.",
+/*#TODO: 'nonefound'		=> "'''Note''': Unsuccessful searches are
+often caused by searching for common words like \"have\" and \"from\",
+which are not indexed, or by specifying more than one search term (only pages
+containing all of the search terms will appear in the result).",*/
+#TODO: 'powersearch' => 'Search',
+#TODO: 'powersearchtext' => "Search in namespaces:<br />$1<br />$2 List redirects<br />Search for $3 $9",
+#TODO: 'searchdisabled' => '{{SITENAME}} search is disabled. You can search via Google in the meantime. Note that their indexes of {{SITENAME}} content may be out of date.',
+
+/*#TODO: 'googlesearch' => '
+<form method="get" action="http://www.google.com/search" id="googlesearch">
+    <input type="hidden" name="domains" value="{{SERVER}}" />
+    <input type="hidden" name="num" value="50" />
+    <input type="hidden" name="ie" value="$2" />
+    <input type="hidden" name="oe" value="$2" />
+
+    <input type="text" name="q" size="31" maxlength="255" value="$1" />
+    <input type="submit" name="btnG" value="$3" />
+  <div>
+    <input type="radio" name="sitesearch" id="gwiki" value="{{SERVER}}" checked="checked" /><label for="gwiki">{{SITENAME}}</label>
+    <input type="radio" name="sitesearch" id="gWWW" value="" /><label for="gWWW">WWW</label>
+  </div>
+</form>',*/
+'blanknamespace' => '(მთავარი)',
+
+# Preferences page
+'preferences'	=> 'კონფიგურაცია',
+'mypreferences'	=> 'ჩემი კონფიგურაცია',
+#TODO: 'prefsnologin' => 'Not logged in',
+#TODO: 'prefsnologintext'	=> "You must be [[Special:Userlogin|logged in]] to set user preferences.",
+#TODO: 'prefsreset'	=> 'Preferences have been reset from storage.',
+'qbsettings'	=> 'სწრაფი ზოლი',
+'changepassword' => 'პაროლის შეცვლა',
+#TODO: 'skin'			=> 'Skin',
+#TODO: 'math'			=> 'Math',
+'dateformat'		=> 'თარიღის ფორმატი',
+#TODO: 'datedefault'		=> 'No preference',
+'datetime'		=> 'თარიღი და დრო',
+#TODO: 'math_failure'		=> 'Failed to parse',
+#TODO: 'math_unknown_error'	=> 'unknown error',
+#TODO: 'math_unknown_function'	=> 'unknown function',
+#TODO: 'math_lexing_error'	=> 'lexing error',
+#TODO: 'math_syntax_error'	=> 'syntax error',
+#TODO: 'math_image_error'	=> 'PNG conversion failed; check for correct installation of latex, dvips, gs, and convert',
+#TODO: 'math_bad_tmpdir'	=> 'Can\'t write to or create math temp directory',
+#TODO: 'math_bad_output'	=> 'Can\'t write to or create math output directory',
+#TODO: 'math_notexvc'	=> 'Missing texvc executable; please see math/README to configure.',
+'prefs-personal' => 'მომხმარებლის მონაცემები',
+'prefs-rc' => 'ბოლო ცვლილებები',
+'prefs-watchlist' => 'კონტროლის სია',
+#TODO: 'prefs-watchlist-days' => 'Number of days to show in watchlist:',
+#TODO: 'prefs-watchlist-edits' => 'Number of edits to show in expanded watchlist:',
+#TODO: 'prefs-misc' => 'Misc',
+'saveprefs'		=> 'შენახვა',
+'resetprefs'	=> 'გადატვირთვა',
+'oldpassword'	=> 'ძველი პაროლი:',
+'newpassword'	=> 'ახალი პაროლი:',
+#TODO: 'retypenew'		=> 'Retype new password:',
+'textboxsize'	=> 'რედაქტირება',
+'rows'			=> 'რიგები:',
+'columns'		=> 'სვეტები:',
+'searchresultshead' => 'ძიება',
+#TODO: 'resultsperpage' => 'Hits per page:',
+'contextlines'	=> 'სტრიქონები შედეგის მიხედვით:',
+'contextchars'	=> 'კონტექსტი სტრიქონების მიხედვით:',
+#TODO: 'stubthreshold' => 'Threshold for stub display:',
+#TODO: 'recentchangescount' => 'Titles in recent changes:',
+'savedprefs'	=> 'თქვენს მიერ შერჩეული პარამეტრები დამახსოვრებულია.',
+#TODO: 'timezonelegend' => 'Time zone',
+#TODO: 'timezonetext'	=> 'The number of hours your local time differs from server time (UTC).',
+'localtime'	=> 'ლოკალური დრო',
+#TODO: 'timezoneoffset' => 'Offset¹',
+#TODO: 'servertime'	=> 'Server time',
+'guesstimezone' => 'ბრაუზერიდან შევსება',
+'allowemail'		=> 'შესაძლებელია ელ. წერილების მიღება სხვა მომხმარებლებისაგან',
+'defaultns'		=> 'სტანდარტული ძიება ამ სახელთა სივრცეებში:',
+'default'		=> 'სტანდარტული',
+'files'			=> 'ფაილები',
+
+# User rights
+
+# Groups
+'group'                   => 'ჯგუფი:',
+'group-bot'               => 'რობოტები',
+'group-sysop'             => 'ადმინისტრატორები',
+'group-bureaucrat'        => 'ბიუროკრატები',
+'group-all'               => '(ყველა)',
+
+'group-bot-member'        => 'რობოტი',
+'group-sysop-member'      => 'ადმინისტრატორი',
+'group-bureaucrat-member' => 'ბიუროკრატი',
+
+'grouppage-bot' => '{{ns:project}}:რობოტები',
+'grouppage-sysop' => '{{ns:project}}:ადმინისტრატორები',
+'grouppage-bureaucrat' => '{{ns:project}}:ბიუროკრატები',
+
+# Recent changes
+'changes' => 'ცვლილებები',
+'recentchanges' => 'ბოლო ცვლილებები',
+#DONT: 'recentchanges-url' => 'Special:Recentchanges',
+#TODO: 'recentchangestext' => 'Track the most recent changes to the wiki on this page.',
+#TODO: 'rcnote'		=> "Below are the last <strong>$1</strong> changes in the last <strong>$2</strong> days, as of $3.",
+#TODO: 'rcnotefrom'	=> "Below are the changes since <b>$2</b> (up to <b>$1</b> shown).",
+'rclistfrom'	=> "ახალი ცვლილებების ჩვენება დაწყებული $1-დან",
+'rcshowhideminor' => 'მცირე რედაქტირების $1',
+'rcshowhidebots' => 'რობოტების $1',
+'rcshowhideliu' => 'რეგისტრირებული მომხმარებლების $1',
+'rcshowhideanons' => 'ანონიმური მომხმარებლების $1',
+#TODO: 'rcshowhidepatr' => '$1 patrolled edits',
+'rcshowhidemine' => 'ჩემი რედაქტირების $1',
+'rclinks'		=> "ბოლო $1 ცვლილების ჩვენება უკანასკნელი $2 დღის მანძილზე<br />$3",
+'diff'			=> 'განსხ.',
+'hist'			=> 'ისტ.',
+'hide'			=> 'დამალვა',
+'show'			=> 'ჩვენება',
+'minoreditletter' => 'მ',
+'newpageletter' => 'ა',
+'boteditletter' => 'რ',
+'sectionlink' => '→',
+#TODO: 'number_of_watching_users_RCview' 	=> '[$1]',
+#TODO: 'number_of_watching_users_pageview' 	=> '[$1 watching user/s]',
+#TODO: 'rc_categories'	=> 'Limit to categories (separate with "|")',
+#TODO: 'rc_categories_any'	=> 'Any',
+
+# Upload
+
+# Image list
+'imagelist'		=> 'ფაილების სია',
+'imagelisttext' => "ქვემოთ მოცემულია '''$1''' ფაილის სია დახარისხებული მომხმარებლის $2 მიერ.",
+'imagelistforuser' => "აქ მხოლოდ ნაჩვენებია მომხმარებლის $1 მიერ ჩატვირთული სურათები.",
+'getimagelist'	=> 'ფაილთა სიის ჩამოტვირთვა',
+'ilsubmit'		=> 'ძიება',
+#TODO: 'showlast'		=> 'Show last $1 files sorted $2.',
+'byname'		=> 'სახელით',
+'bydate'		=> 'თარიღით',
+'bysize'		=> 'ზომით',
+'imgdelete'		=> 'წაშ.',
+'imgdesc'		=> 'აღწ.',
+'imgfile'       => 'ფაილი',
+#TODO: 'imglegend'		=> 'Legend: (desc) = show/edit file description.',
+'imghistory'	=> 'ფაილის ისტორია',
+#TODO: 'revertimg'		=> 'rev',
+'deleteimg'		=> 'წაშ.',
+#TODO: 'deleteimgcompletely'		=> 'Delete all revisions of this file',
+/*TODO: 'imghistlegend' => 'Legend: (cur) = this is the current file, (del) = delete
+this old version, (rev) = revert to this old version.
+<br /><i>Click on date to see the file uploaded on that date</i>.',*/
+'imagelinks'	=> 'ბმულები',
+'linkstoimage'	=> 'ამ ფაილზე ბმული მოცემულია შემდეგ გვერდებზე:',
+'nolinkstoimage' => 'არ არსებობს ამ ფაილთან დაკავშირებული გვერდები.',
+#TODO: 'sharedupload' => 'This file is a shared upload and may be used by other projects.',
+'shareduploadwiki' => 'გთხოვთ, იხილოთ $1 შემდგომი ინფორმაციის მისაღებად.',
+#TODO: 'shareduploadwiki-linktext' => 'file description page',
+#DONT: 'shareddescriptionfollows' => '-',
+'noimage'       => 'ამ სახელის მქონე ფაილი არ არსებობს, თქვენ შეგიძლიათ $1.',
+'noimage-linktext'       => 'ფაილის ატვირთვა',
+'uploadnewversion-linktext' => 'ამ ფაილის ახალი ვერსიის ატვირთვა',
+'imagelist_date' => 'თარიღი',
+'imagelist_name' => 'სახელი',
+'imagelist_user' => 'მომხმარებელი',
+'imagelist_size' => 'ზომა (ბაიტები)',
+'imagelist_description' => 'აღწერილობა',
+'imagelist_search_for' => 'ძიება სურათის სახელის მიხედვით:',
+
+# Mime search
+
+# Unwatchedpages
+
+# List redirects
+
+# Unused templates
+
+# Random redirect
+'randomredirect' => 'ნებისმიერი გადამისამართება',
+
+# Statistics
+
+# Miscellaneous special pages
+#
+'nbytes'		=> '$1 ბაიტი',
+'ncategories'		=> '$1 კატეგორია',
+'nlinks'		=> '$1 ბმული',
+'nmembers'		=> '$1 წევრი',
+#TODO: 'nrevisions'		=> '$1 {{PLURAL:$1|revision|revisions}}',
+#TODO: 'nviews'		=> '$1 {{PLURAL:$1|view|views}}',
+#TODO: 'specialpage-empty'     => 'This page is empty.',
+#TODO: 'lonelypages'	=> 'Orphaned pages',
+#'lonelypages-summary'	=> '',
+#TODO: 'lonelypagestext'	=> 'The following pages are not linked from other pages in this wiki.',
+'uncategorizedpages'	=> 'გვერდები კატეგორიის გარეშე',
+#'uncategorizedpages-summary' => '',
+'uncategorizedcategories'	=> 'კატეგორიები კატეგორიის გარეშე',
+#'uncategorizedcategories-summary' => '',
+'uncategorizedimages' => 'სურათები კატეგორიის გარეშე',
+#'uncategorizedimages-summary' => '',
+'unusedcategories' => 'გამოუყენებელი კატეგორიები',
+'unusedimages'	=> 'გამოუყენებელი სურათები',
+'popularpages'	=> 'პოპულარული გვერდები',
+#'popularpages-summary' => '',
+'wantedcategories' => 'მოთხოვნილი კატეგორიები',
+#'wantedcategories-summary' => '',
+'wantedpages'	=> 'მოთხოვნილი გვერდები',
+#'wantedpages-summary' => '',
+#TODO: 'mostlinked'	=> 'Most linked to pages',
+#'mostlinked-summary' => '',
+#TODO: 'mostlinkedcategories' => 'Most linked to categories',
+#'mostlinkedcategories-summary' => '',
+'mostcategories' => 'ყველაზე მეტი კატეგორიის მქონე სტატიები',
+#'mostcategories-summary' => '',
+#TODO: 'mostimages'	=> 'Most linked to images',
+#'mostimages-summary' => '',
+'mostrevisions' => 'ყველაზე მეტად რედაქტირებული სტატიები',
+#'mostrevisions-summary' => '',
+'allpages'		=> 'ყველა გვერდი',
+#'allpages-summary'	=> '',
+#TODO: 'prefixindex'   => 'Prefix index',
+#'prefixindex-summary' => '',
+'randompage'	=> 'ნებისმიერი გვერდი',
+#DONT: 'randompage-url'=> 'სპეციალური:Random',
+'shortpages'	=> 'მოკლე გვერდები',
+#'shortpages-summary'     => '',
+'longpages'		=> 'გრძელი გვერდები',
+#'longpages-summary'	=> '',
+'deadendpages'  => 'ჩიხის გვერდები',
+#'deadendpages-summary'	=> '',
+#TODO: 'deadendpagestext'	=> 'The following pages do not link to other pages in this wiki.',
+#TODO: 'protectedpages' => 'Protected pages',
+#'protectedpages-summary' => '',
+#TODO: 'protectedpagestext' => 'The following pages are protected from moving or editing',
+#TODO: 'protectedpagesempty' => 'No pages are currently protected',
+'listusers'		=> 'მომხმარებლების სია',
+#'listusers-summary'	=> '',
+'specialpages'	=> 'სპეციალური გვერდები',
+#'specialpages-summary'	=> '',
+'spheading'		=> 'სპეციალური გვერდები ყველა მომხმარებლისათვის',
+'restrictedpheading'	=> 'შეზღუდული სპეციალური გვერდები',
+'recentchangeslinked' => 'დაკავშირებული ცვლილებები',
+#TODO: 'rclsub'		=> "(to pages linked from \"$1\")",
+'newpages'		=> 'ახალი გვერდები',
+#'newpages-summary'	=> '',
+'newpages-username' => 'მომხმარებლის სახელი:',
+'ancientpages'		=> 'ხანდაზმული გვერდები',
+#'ancientpages-summary'	=> '',
+'intl'		=> 'ენათშორისი ბმულები',
+'move' => 'გადატანა',
+'movethispage'	=> 'ამ გვერდის გადატანა',
+'unusedimagestext' => '<p>გთხოვთ გაითვალისწინოთ, რომ შეიძლება სხვა ვიკი ზოგიერთ ამ გამოსახულებას იყენებს.</p>',
+#TODO: 'unusedcategoriestext' => 'The following category pages exist although no other article or category make use of them.',
+
+# Special:Allpages
+'nextpage'          => 'შემდეგი გვერდი ($1)',
+'prevpage'          => 'წინა გვერდი ($1)',
+'allpagesfrom'		=> 'გვერდების ჩვენება დაწყებული:',
+'allarticles'		=> 'ყველა სტატია',
+'allinnamespace'	=> 'ყველა გვერდი ($1 სახელთა სივრცეში)',
+'allnotinnamespace'	=> 'ყველა გვერდი ($1 სახელთა სივრცის გარეშე)',
+'allpagesprev'		=> 'წინა',
+'allpagesnext'		=> 'შემდეგი',
+'allpagessubmit'	=> 'ჩვენება',
+'allpagesprefix'	=> 'ასახე გვერდები პრეფიქსით:',
+'allpagesbadtitle'	=> 'მოცემული გვერდის სათაური არასწორია ან აქვს ინტერვიკი ან ნათშორისი პრეფიქსი. 
+იგი შესაძლოა შეიცავდეს ერთ ან მეტ სიმბოლოს, რომელიც არ შეიძლება გამოყენებულ იქნას სათაურში.',
+
+# Special:Listusers
+
+# Email this user
+
+# Watchlist
+
+# Delete/protect/revert
+
+# restrictions (nouns)
+'restriction-edit' => 'რედაქტირება',
+#TODO: 'restriction-move' => 'Move',
+
+# restriction levels
+
+
+# Undelete
+'undelete' => 'აჩვენე წაშლილი გვერდები',
+'undeletepage' => 'იხილეთ და აღადგინეთ წაშლილი გვერდები',
+'viewdeletedpage' => 'იხილეთ წაშლილი გვერდები',
+'undeletepagetext' => 'მომდევნო გვრდები წაშლილია, მაგრამ ჯერ კიდევ არქივშია და 
+შესაძლებელია აღდგენა. არქივი შესაძლებელია პერიოდულად გასუფთავდეს.',
+'undeleteextrahelp' => "ამ მთლიანი გვერდის აღსადგენად, დატოვეთ ყველა მოსანიშნი უჯრა მოუნიშნავად და 
+დააწკაპუნეთ '''''აღდგენა'''''. იმისათვის, რომ მოახდინოთ შერჩევითი აღდგენა მონიშნეთ უჯრები ჩასატარებელი 
+ვერსიების შესაბამისად და დააწკაპუნეთ '''''აღდგენა'''''. '''''გადატვირთვაზე''''' დაწკაპუნებით გაუქმდება ყველა 
+კომენტარის ველი და ყველა მოსანიშნი უჯრა.",
+'undeletearticle' => 'აღადგინე წაშლილი გვერდი',
+'undeleterevisions' => "$1 ვერსიები დაარქივებულია",
+'undeletehistory' => 'თუ თქვენ აღადგენთ გვერდს, ყველა ვერსია აღდგება ისტორიაში. 
+თუ ახალი გვერდი იგივე სახელით შეიქმნა მისი წაშლის შემდეგ, აღდგენილი 
+ვერსიები გამოჩნდება წინა ისტორიაში და მიმდინარე ვერსია 
+ავტომატურად არ ჩანაცვლდება.',
+'undeletehistorynoadmin' => 'ეს სტატია წაშლილია. წაშლის მიზეზი ნაჩვენებია მოკლე ანოტაციაში ქვემოთ, იმ 
+მომხმარებელთა დეტალებთან ერთად ვინც რედაქტირება გაუკეთა ამ გვერდს წაშლის წინ. 
+იმ წაშლილი ტექსტების აქტუალური ვერსიები მიღწევადია მხოლოდ ადმინისტრატორებისათვის.',
+#TODO: 'undelete-revision' => 'Deleted revision of $1 from $2:',
+/*#TODO: 'undeleterevision-missing' => "Invalid or missing revision. You may have a bad link, or the
+revision may have been restored or removed from the archive.",*/
+'undeletebtn' => 'აღდგენა',
+'undeletereset' => 'გადატვირთეთ',
+'undeletecomment' => 'კომენტარი:',
+'undeletedarticle' => 'აღდგენილია "[[$1]]"',
+'undeletedrevisions' => "$1 ვერსია აღდგენილია",
+'undeletedrevisions-files' => "$1 ვერსია და $2 ფაილი აღდგენილია",
+'undeletedfiles' => "$1 ფაილი აღდგენილია",
+'cannotundelete' => 'აღდგენა ვერ შედგა; შესაძლოა უკვე ვიღაცამ აღადგინა ეს გვერდი.',
+'undeletedpage' => "<big>'''$1 აღდგენილია'''</big>
+
+უკანასკნელი წაშლილთა და აღდგენის სია შეგიძლიათ ნახოთ [[Special:Log/delete|წაშლილთა სიაში]].",
+#TODO: 'undelete-header' => 'See [[Special:Log/delete|the deletion log]] for recently deleted pages.',
+#TODO: 'undelete-search-box' => 'Search deleted pages',
+#TODO: 'undelete-search-prefix' => 'Show pages starting with:',
+'undelete-search-submit' => 'ძიება',
+#TODO: 'undelete-no-results' => 'No matching pages found in the deletion archive.',
+
+# Namespace form on various pages
+'namespace' => 'სახელთა სივრცე:',
+'invert' => 'ყველა, მონიშნულის გარდა',
+
+# Contributions
+
+# What links here
+#
+'whatlinkshere'	=> 'სადაა მითითებული ეს გვერდი',
+#'whatlinkshere-summary'	=> '',
+#'whatlinkshere-barrow' => '&lt;',
+'notargettitle' => 'სამიზნე არაა',
+'notargettext'	=> 'თქვენ არ მიუთითეთ სამიზნე გვერდი ან მომხმარებელი 
+ამ ფუნქციის შესასრულებლად.',
+#TODO: 'linklistsub'	=> '(List of links)',
+#TODO: 'linkshere' => "The following pages link to '''[[:$1]]''':",
+'nolinkshere' => "'''[[:$1]]'''-ზე ბმული არ არის.",
+#TODO: 'isredirect'	=> 'redirect page',
+#TODO: 'istemplate'	=> 'inclusion',
+
+# Block/unblock IP
+
+# Developer tools
+
+# Make sysop
+
+# Move page
+#
+'movepage'		=> 'გვერდის გადატანა',
+/*TODO: 'movepagetext'	=> 'Using the form below will rename a page, moving all
+of its history to the new name.
+The old title will become a redirect page to the new title.
+Links to the old page title will not be changed; be sure to
+check for double or broken redirects.
+You are responsible for making sure that links continue to
+point where they are supposed to go.
+
+Note that the page will \'\'\'not\'\'\' be moved if there is already
+a page at the new title, unless it is empty or a redirect and has no
+past edit history. This means that you can rename a page back to where
+it was just renamed from if you make a mistake, and you cannot overwrite
+an existing page.
+
+<b>WARNING!</b>
+This can be a drastic and unexpected change for a popular page;
+please be sure you understand the consequences of this before
+proceeding.',*/
+/*TODO: 'movepagetalktext' => 'The associated talk page will be automatically moved along with it \'\'\'unless:\'\'\'
+*A non-empty talk page already exists under the new name, or
+*You uncheck the box below.
+
+In those cases, you will have to move or merge the page manually if desired.',*/
+'movearticle'	=> 'გვერდის გადატანა',
+'movenologin'	=> 'რეგისტრაცია ვერ გაიარა',
+/*TODO: 'movenologintext' => "You must be a registered user and [[Special:Userlogin|logged in]]
+to move a page.",*/
+'newtitle'		=> 'ახალი სათაური',
+#TODO: 'move-watch' => 'Watch this page',
+'movepagebtn'	=> 'გვერდის გადატანა',
+#TODO: 'pagemovedsub'	=> 'Move succeeded',
+'pagemovedtext' => "გვერდი \"[[$1]]\" გადავიდა \"[[$2]]\".",
+'articleexists' => 'ამ დასახელების გვერდი უკვე არსებობს, 
+ან თქვენს მიერ მითითებული დასახელება არასწორია. 
+თუ შეიძლება, მიუთითეთ სხვა სახელი.',
+#TODO: 'talkexists'	=> "'''The page itself was moved successfully, but the talk page could not be moved because one already exists at the new title. Please merge them manually.'''",
+'movedto'		=> 'გადატანილია',
+'movetalk'		=> 'დაკავშირებული განხილვის გადატანა',
+#TODO: 'talkpagemoved' => 'The corresponding talk page was also moved.',
+#TODO: 'talkpagenotmoved' => 'The corresponding talk page was <strong>not</strong> moved.',
+'1movedto2'		=> '[[$1]] გადატანილია [[$2]]-ზე',
+'1movedto2_redir' => '[[$1]] გადატანილია [[$2]]-ზე გადამისამართებულ გვერდში',
+'movelogpage' => 'გადატანის ჟურნალი',
+#TODO: 'movelogpagetext' => 'Below is a list of page moved.',
+'movereason'	=> 'მიზეზი',
+#TODO: 'revertmove'	=> 'revert',
+'delete_and_move' => 'წაშლა და გადატანა',
+'delete_and_move_text'	=>
+'==საჭიროა წაშლა==
+
+სტატია დასახელებით "[[$1]]" უკვე არსებობს. გსურთ მისი წაშლა გადატანისთვის ადგილის დასათმობად?',
+'delete_and_move_confirm' => 'დიახ, წაშალეთ ეს გვერდი',
+'delete_and_move_reason' => 'წაშლილია გადატანისთვის ადგილის დასათმობად',
+#TODO: 'selfmove' => "Source and destination titles are the same; can't move a page over itself.",
+#TODO: 'immobile_namespace' => "Source or destination title is of a special type; cannot move pages from and into that namespace.",*/
+
+# Export
+
+# Namespace 8 related
+
+'allmessages'   => 'სისტემური შეტყობინება',
+'allmessagesname' => 'დასახელება',
+'allmessagesdefault' => 'სტანდარტული ტექსტი',
+'allmessagescurrent' => 'მიმდინარე ტექსტი',
+'allmessagestext'       => 'ეს არის სახელთა სივრცე მედიავიკიში არსებული სისტემური შეტყობინებების ჩამონათვალი.',
+'allmessagesnotsupportedUI' => 'თქვენს ამჟამინდელ ინტერფეისის ენას <b>$1</b> არ აქვს სპეციალური:AllMessages-ის უზრუნველყოფა ამ საიტზე.',
+'allmessagesnotsupportedDB' => 'სპეციალური:AllMessages-ის უზრუნველყოფა არ ხდება, ვინაიდან wgUseDatabaseMessages გამორთულია.',
+'allmessagesfilter' => 'ფილტრი შეტყობინების სახელის მიხედვით:',
+'allmessagesmodified' => 'აჩვენე მხოლოდ შეცვლილი',
+
+# Thumbnails
+'thumbnail-more'	=> 'გაზარდეთ',
+#TODO: 'missingimage'		=> '<b>Missing image</b><br /><i>$1</i>',
+'filemissing'		=> 'ფაილი ვერ მოიძებნა',
+'thumbnail_error'   => 'ესკიზის შექმნის შეცდომა: $1',
+
+# Special:Import
+
+# import log
+
+# tooltip help for some actions, most are in Monobook.js
+
+# stylesheets
+
+# Metadata
+
+# Attribution
+'anonymous' => '{{SITENAME}}-ის ანონიმური მომხმარებლები',
+'siteuser' => '{{SITENAME}} მომხმარებელი $1',
+#TODO: 'lastmodifiedatby' => 'This page was last modified $2, $1 by $3.',	// $1 date, $2 time. $3 user
+'and' => 'და',
+#TODO: 'othercontribs' => 'Based on work by $1.',
+'others' => 'სხვები',
+'siteusers' => '{{SITENAME}} მომხმარებლები $1',
+#TODO: 'creditspage' => 'წვლილი',
+#TODO: 'nocredits' => 'There is no credits info available for this page.',
+
+# Spam protection
+
+# Info page
+
+# Math options
+
+# Patrolling
+
+# Monobook.js: tooltips and access keys for monobook
+
+# image deletion
+
+# browsing diffs
+
+# labels for User: and Title: on Special:Log pages
+'specialloguserlabel' => 'მომხმარებელი:',
+'speciallogtitlelabel' => 'სათაური:',
+
+'passwordtooshort' => 'თქვენი პაროლი ძალიან მოკლეა. მასში უნდა შედიოდეს არანაკლებ $1 ასო-ნიშანი.',
+
+# Media Warning
+#TODO: 'mediawarning' => '\'\'\'Warning\'\'\': This file may contain malicious code, by executing it your system may be compromised.<hr />',
+
+'fileinfo' => '$1KB, MIME ტიპი: <code>$2</code>',
+
+# Metadata
+
+# Exif tags
+
+# Make & model, can be wikified in order to link to the camera and model name
+
+# Exif attributes
+
+# external editor support
+
+# 'all' in various places, this might be different for inflected languages
+'recentchangesall' => 'ყველა',
+'imagelistall' => 'ყველა',
+'watchlistall1' => 'ყველა',
+'watchlistall2' => 'ყველა',
+'namespacesall' => 'ყველა',
+
+# E-mail address confirmation
+
+# Inputbox extension, may be useful in other contexts as well
+'tryexact' => 'სცადეთ ზუსტი ძიება',
+'searchfulltext' => 'სრული ტექსტის ძიება',
+'createarticle' => 'სტატიის შექმნა',
+
+# Scary transclusion
+
+# Trackbacks
+
+# delete conflict
+
+'deletedwhileediting' => '[[მომხმარებელი:$1|$1]] მომხმარებელმა ([[მომხმარებელი განხილვა:$1|განხილვა]]) წაშალა თქვენი რედაქტირების შემდეგ. მიზეზი:
+: \'\'$2\'\'
+გთხოვთ დაადასტუროთ რომ ნამდვილად გსურთ ამ გვერდის თავიდან შექმნა.',
+#TODO: 'recreate' => 'Recreate',
+
+#TODO: 'unit-pixel' => 'px',
+
+# HTML dump
+
+# action=purge
+#TODO: 'confirm_purge' => "Clear the cache of this page?\n\n$1",
+#TODO: 'confirm_purge_button' => 'OK',
+
+'youhavenewmessagesmulti' => "თქვენ გაქვთ ახალი შეტყობინება $1-ზე",
+
+#TODO: 'searchcontaining' => "Search for articles containing ''$1''.",
+#TODO: 'searchnamed' => "Search for articles named ''$1''.",
+'articletitles' => "სტატიები დაწყებული ''$1''-ით",
+'hideresults' => 'შედეგების დამალვა',
+
+# DISPLAYTITLE
+'displaytitle' => '(ამ გვერდის ბმული როგორც [[$1]])',
+
+'loginlanguagelabel' => 'ენა: $1',
+
+# Multipage image navigation
+
+# Table pager
+#TODO: 'ascending_abbrev' => 'asc',
+#TODO: 'descending_abbrev' => 'desc',
+'table_pager_next' => 'შემდეგი გვერდი',
+'table_pager_prev' => 'წინა გვერდი',
+'table_pager_first' => 'პირველი გვერდი',
+'table_pager_last' => 'ბოლო გვერდი',
+#TODO: 'table_pager_limit' => 'Show $1 items per page',
+'table_pager_limit_submit' => 'აჩვენე',
+'table_pager_empty' => 'შედეგები არაა',
+
+# Auto-summaries
+'autosumm-blank' => 'გვერდი დაცარიელდა',
+'autosumm-replace' => 'შინაარსი შეიცვალა \'$1\'-ით',
+'autoredircomment' => 'გადამისამართება [[$1]]-ზე', # This should be changed to the new naming convention, but existed beforehand.
+'autosumm-new' => 'ახალი გვერდი: $1',
+
+# Size units
+'size-bytes' => '$1 ბ',
+'size-kilobytes' => '$1 კბ',
+'size-megabytes' => '$1 მბ',
+'size-gigabytes' => '$1 გბ',
+
+
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesKaa.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesKaa.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesKaa.php	(revision 1280)
@@ -0,0 +1,10 @@
+<?php
+/**
+ * Karakalpak (Qaraqalpaqsha)
+ *
+ * @addtogroup Language
+ */
+
+$linkTrail = '/^([a-zʻ`]+)(.*)$/sDu';
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesKab.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesKab.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesKab.php	(revision 1280)
@@ -0,0 +1,1639 @@
+<?php
+/** Kabyle (Taqbaylit)
+ *
+ * @addtogroup Language
+ */
+
+
+$namespaceNames = array(
+	NS_MEDIA            => 'Media',
+	NS_SPECIAL          => 'Uslig',
+	NS_MAIN             => '',
+	NS_TALK             => 'Mmeslay',
+	NS_USER             => 'Amseqdac',
+	NS_USER_TALK        => 'Amyannan_umsqedac',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK     => 'Amyannan_n_$1',
+	NS_IMAGE            => 'Tugna',
+	NS_IMAGE_TALK       => 'Amyannan_n_tugna',
+	NS_MEDIAWIKI        => 'MediaWiki',
+	NS_MEDIAWIKI_TALK   => 'Amyannan_n_MediaWiki',
+	NS_TEMPLATE         => 'Talγa',
+	NS_TEMPLATE_TALK    => 'Amyannan_n_talγa',
+	NS_HELP             => 'Tallat',
+	NS_HELP_TALK        => 'Amyannan_n_tallat',
+	NS_CATEGORY         => 'Taggayt',
+	NS_CATEGORY_TALK    => 'Amyannan_n_taggayt'
+);
+
+$messages = array(
+# User preference toggles
+'tog-underline'               => 'Derrer izdayen:',
+'tog-highlightbroken'         => 'Mel izdayen imerẓa <a href="" class="new">akkagi</a> (neγ: akkagi<a href="" class="internal">?</a>).',
+'tog-justify'                 => 'Err tehri ger awalen kif-kif',
+'tog-hideminor'               => 'Ffer ibeddlen ifessasen deg yibeddlen imaynuten',
+'tog-extendwatchlist'         => 'Ssemγer amuγ uεessi iwakken ad muqleγ akk n wayen zemreγ ad beddleγ',
+'tog-usenewrc'                => 'Sselhu ibeddlen ifessasen (JavaScript)',
+'tog-numberheadings'          => 'Izwal γur-sen imḍanen mebla ma serseγ-iten',
+'tog-showtoolbar'             => 'Mel tanuga n dduzan n ubeddel (JavaScript)',
+'tog-editondblclick'          => 'Beddel isebtaren asmi wekkiγ snat tikwal (JavaScript)',
+'tog-editsection'             => 'Eğğ abeddel n umur s yizdayen [beddel]',
+'tog-editsectiononrightclick' => 'Eğğ abeddel n amur asmi wekkiγ ayeffus<br /> γef yizwal n umur (JavaScript)',
+'tog-showtoc'                 => 'Mel agbur (i isebtaren i yesεan kter n 3 izwalen)',
+'tog-rememberpassword'        => 'Cfu γef yisem n umseqdac inu di uselkim-agi',
+'tog-editwidth'               => 'Tankult ubeddel tesεa tehri ettmam',
+'tog-watchcreations'          => 'Rnu isebtaren i xelqeγ di umuruγ n uεessi inu',
+'tog-watchdefault'            => 'Rnu isebtaren i beddleγ di umuruγ n uεessi inu',
+'tog-watchmoves'              => 'Rnu isebtaren i smimḍeγ di umuruγ n uεessi inu',
+'tog-watchdeletion'           => 'Rnu isebtaren i mḥiγ di umuγ n uεessi inu',
+'tog-minordefault'            => 'Rcem akk ibeddlen am ibeddlen ifessasen d ameslugen',
+'tog-previewontop'            => 'Mel pre-timeẓriwt uqbel tankult ubeddel',
+'tog-previewonfirst'          => 'Mel pre-timeẓriwt akk d ubeddel amezwaru',
+'tog-nocache'                 => 'Kkes lkac n usebtar',
+'tog-enotifwatchlistpages'    => 'Azen-iyi-d e-mail asmi yettubeddel asebtar i ttεassaγ',
+'tog-enotifusertalkpages'     => 'Azen-iyi e-mail asmi sεiγ izen amaynut',
+'tog-enotifminoredits'        => 'Azen-iyi-d e-mail i ibeddlen ifessasen',
+'tog-enotifrevealaddr'        => 'Mel e-mail inu asmi yettwazen email n talγut',
+'tog-shownumberswatching'     => 'Mel geddac yellan n yimseqdac iεessasen',
+'tog-fancysig'                => 'Eğğ azmul am yettili (mebla azday otomatik)',
+'tog-externaleditor'          => 'Sseqdec ambeddl n berra d ameslugen',
+'tog-externaldiff'            => 'Seqdec ambeddel n berra iwakken ad ẓreγ imgerraden',
+'tog-showjumplinks'           => 'Eğğ izdayen "neggez ar"',
+'tog-uselivepreview'          => 'Sseqdec pre-timeẓriwt tağiḥbuṭ (JavaScript) (Experimental)',
+'tog-forceeditsummary'        => 'Ini-iyi-d asmi sskecmeγ agzul amecluc',
+'tog-watchlisthideown'        => 'Ffer ibeddlen inu seg umuruγ n uεessi inu',
+'tog-watchlisthidebots'       => 'Ffer ibeddlen n iboṭiyen seg umuruγ n uεessi inu',
+'tog-watchlisthideminor'      => 'Ffer ibeddlen ifessasen seg umuruγ n uεessi inu',
+'tog-nolangconversion'        => 'Kkes abeddel n yimeskilen',
+'tog-ccmeonemails'            => 'Azen-iyi email n wayen uzneγ i iseqdacen wiyaḍ',
+'tog-diffonly'                => 'Ur temliḍ-iyi-d ara ayen yellan seddaw imgerraden',
+
+'underline-always'  => 'Daymen',
+'underline-never'   => 'Abaden',
+'underline-default' => 'Browser/Explorateur ameslugen',
+
+'skinpreview' => '(Pre-timeẓriwt)',
+
+# Dates
+'sunday'        => 'Lḥedd',
+'monday'        => 'Letnayen',
+'tuesday'       => 'Ttlata',
+'wednesday'     => 'Larebεa',
+'thursday'      => 'Lexmis',
+'friday'        => 'Lğemεa',
+'saturday'      => 'Ssebt',
+'sun'           => 'Lḥedd',
+'mon'           => 'Letnayen',
+'tue'           => 'Ttlata',
+'wed'           => 'Larebεa',
+'thu'           => 'Lexmis',
+'fri'           => 'Lğemεa',
+'sat'           => 'Ssebt',
+'january'       => 'Yennayer',
+'february'      => 'Furar',
+'march'         => 'Meγres',
+'april'         => 'Ibrir',
+'may_long'      => 'Mayu',
+'june'          => 'Yunyu',
+'july'          => 'Yulyu',
+'august'        => 'Γuct',
+'september'     => 'Ctember',
+'october'       => 'Tuber',
+'november'      => 'Wamber',
+'december'      => 'Jember',
+'january-gen'   => 'Yennayer',
+'february-gen'  => 'Furar',
+'march-gen'     => 'Meγres',
+'april-gen'     => 'Ibrir',
+'may-gen'       => 'Mayu',
+'june-gen'      => 'Yunyu',
+'july-gen'      => 'Yulyu',
+'august-gen'    => 'Γuct',
+'september-gen' => 'Ctember',
+'october-gen'   => 'Tuber',
+'november-gen'  => 'Wamber',
+'december-gen'  => 'Jember',
+'jan'           => 'Yennayer',
+'feb'           => 'Ibrir',
+'mar'           => 'Meγres',
+'apr'           => 'Ibrir',
+'may'           => 'Mayu',
+'jun'           => 'Yunyu',
+'jul'           => 'Yulyu',
+'aug'           => 'Γuct',
+'sep'           => 'Ctember',
+'oct'           => 'Tuber',
+'nov'           => 'Wamber',
+'dec'           => 'Jember',
+
+# Bits of text used by many pages
+'categories'            => 'Taggayin',
+'pagecategories'        => '{{PLURAL:$1|Taggayt|Taggayin}}',
+'category_header'       => 'Imagraden deg taggayt "$1"',
+'subcategories'         => 'Taggayin tizellumin',
+'category-media-header' => 'Media deg taggayt "$1"',
+
+'about'          => 'Awal γef...',
+'article'        => 'Ayen yella deg usebtar',
+'newwindow'      => '(teldi deg ttaq amaynut)',
+'cancel'         => 'Eğğ-it am yella',
+'qbfind'         => 'Af',
+'qbbrowse'       => 'Ẓer isebtaren',
+'qbedit'         => 'Beddel',
+'qbpageoptions'  => 'Asebtar-agi',
+'qbpageinfo'     => 'Asatal',
+'qbmyoptions'    => 'Isebtaren inu',
+'qbspecialpages' => 'Isebtaren usligen',
+'moredotdotdot'  => 'Ugar...',
+'mypage'         => 'Asebtar inu',
+'mytalk'         => 'Amyannan inu',
+'anontalk'       => 'Amyannan n IP-yagi',
+'navigation'     => 'Ẓer isebtaren',
+
+'errorpagetitle'    => 'Agul',
+'returnto'          => 'Uγal ar $1.',
+'tagline'           => 'Seg {{SITENAME}}',
+'help'              => 'Tallat',
+'search'            => 'Nadi',
+'searchbutton'      => 'Nadi',
+'go'                => 'Ruḥ',
+'searcharticle'     => 'Ruḥ',
+'history'           => 'Amezruy n usebtar',
+'history_short'     => 'Amezruy',
+'updatedmarker'     => 'yettubeddel segmi tarzeft taneggarut inu',
+'info_short'        => 'Talγut',
+'printableversion'  => 'Tasiwelt iwakken timprimiḍ',
+'permalink'         => 'Azday ur yettbeddil ara',
+'print'             => 'Imprimi',
+'edit'              => 'Beddel',
+'editthispage'      => 'Beddel asebtar-agi',
+'delete'            => 'Mḥu',
+'deletethispage'    => 'Mḥu asebtar-agi',
+'undelete_short'    => 'Fakk amḥay n {{PLURAL:$1|yiwen ubeddel|$1 yibeddlen}}',
+'protect'           => 'Ḥrez',
+'protect_change'    => 'beddel tiḥḥerzi',
+'protectthispage'   => 'Ḥrez asebtar-agi',
+'unprotect'         => 'fakk tiḥḥerzi',
+'unprotectthispage' => 'Fakk tiḥḥerzi n usebtar-agi',
+'newpage'           => 'Asebtar amaynut',
+'talkpage'          => 'Mmeslay γef usebtar-agi',
+'talkpagelinktext'  => 'Mmeslay',
+'specialpage'       => 'Asebtar uslig',
+'personaltools'     => 'Dduzan inu',
+'postcomment'       => 'Azen awennit',
+'articlepage'       => 'Ẓer ayen yellan deg usebtar',
+'talk'              => 'Amyannan',
+'views'             => 'Tuẓrin',
+'toolbox'           => 'Dduzan',
+'userpage'          => 'Ẓer asebtar n umseqdac',
+'projectpage'       => 'Ẓer asebtar n usenfar',
+'imagepage'         => 'Ẓer asebtar n tugna',
+'mediawikipage'     => 'Ẓer asebtar n izen',
+'templatepage'      => 'Ẓer asebtar n talγa',
+'viewhelppage'      => 'Ẓer asebtar n tallat',
+'categorypage'      => 'Ẓer asebtar n taggayin',
+'viewtalkpage'      => 'Ẓer amyannan',
+'otherlanguages'    => 'S tutlayin tiyaḍ',
+'redirectedfrom'    => '(Yettusmimeḍ seg $1)',
+'redirectpagesub'   => 'Asebtar usemmimeḍ',
+'lastmodifiedat'    => 'Tikelt taneggarut i yettubeddel asebtar-agi $2, $1.', # $1 date, $2 time
+'viewcount'         => 'Asebtar-agi yettwakcem {{plural:$1|yiwet tikelt|$1 tikwal}}.',
+'protectedpage'     => 'Asebtar yettwaḥerzen',
+'jumpto'            => 'Neggez ar:',
+'jumptonavigation'  => 'ẓer isebtaren',
+'jumptosearch'      => 'anadi',
+
+# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
+'aboutsite'         => 'Awal γef {{SITENAME}}',
+'aboutpage'         => '{{ns:project}}:Awal γef...',
+'bugreports'        => "In'aγ ibugiyen (bug)",
+'bugreportspage'    => "{{ns:project}}:In'aγ ibugiyen",
+'copyright'         => 'Tzemreḍ ad twaliḍ ayen yella deg $1.',
+'copyrightpagename' => 'Copyright n {{SITENAME}}',
+'copyrightpage'     => 'Asenfar:Copyrights',
+'currentevents'     => 'Isallen',
+'currentevents-url' => 'Isallen',
+'disclaimers'       => 'Iγtalen',
+'disclaimerpage'    => '{{ns:project}}:Iγtalen',
+'edithelp'          => 'Tallat deg ubeddel',
+'edithelppage'      => '{{ns:help}}:Abeddel',
+'faq'               => 'Isteqsiyen',
+'faqpage'           => '{{ns:project}}:Isteqsiyen',
+'helppage'          => '{{ns:help}}:Agbur',
+'mainpage'          => 'Asebtar amenzawi',
+'policy-url'        => 'Project:Policy',
+'portal'            => 'Awwur n timetti',
+'portal-url'        => '{{ns:project}}:Awwur n timetti',
+'privacy'           => 'Tudert tusligt',
+'privacypage'       => '{{ns:project}}:Tudert tusligt',
+'sitesupport'       => 'Efk-aγ idrimen',
+'sitesupport-url'   => '{{ns:project}}:Efk-aγ idrimen',
+
+'badaccess'        => 'Agul n turagt',
+'badaccess-group0' => 'Ur tettalaseḍ ara ad texedmeḍ tigawt i tseqsiḍ.',
+'badaccess-group1' => 'Tigawt i steqsiḍ, llan ala imseqdacen n adrum n $1 i zemren a t-xedmen.',
+'badaccess-group2' => 'Tigawt i steqsiḍ, llan ala imseqdacen seg yiwen n yiderman n $1 i zemren a t-xedmen.',
+'badaccess-groups' => 'Tigawt i steqsiḍ, llan ala imseqdacen seg yiwen n yiderman n $1 i zemren a t-xedmen.',
+
+'versionrequired'     => 'Yessefk tesεiḍ tasiwelt $1 n MediaWiki',
+'versionrequiredtext' => 'Yessefk tesεiḍ tasiwelt $1 n MediaWiki iwekken tesseqdceḍ asebtar-agi. Ẓer [[Special:Version|tasiwelt usebtar]].',
+
+'retrievedfrom'       => 'Yettwaddem seg "$1"',
+'youhavenewmessages'  => 'Γur-k $1 ($2).',
+'newmessageslink'     => 'Izen amaynut',
+'newmessagesdifflink' => 'Abeddel aneggaru',
+'editsection'         => 'beddel',
+'editold'             => 'beddel',
+'editsectionhint'     => 'Beddel amur: $1',
+'toc'                 => 'Agbur',
+'showtoc'             => 'Mel',
+'hidetoc'             => 'Ffer',
+'thisisdeleted'       => 'Ẓer neγ err $1?',
+'viewdeleted'         => 'Ẓer $1?',
+'restorelink'         => '{{PLURAL:$1|Yiwen abeddel yettumḥan|$1 Ibeddlen yettumḥan}}',
+'feedlinks'           => 'Asuddem:',
+'feed-invalid'        => 'Anaw n usuddem mačči ṣaḥiḥ.',
+
+# Short words for each namespace, by default used in the 'article' tab in monobook
+'nstab-main'      => 'Amagrad',
+'nstab-user'      => 'Asebtar n umseqdac',
+'nstab-media'     => 'Asebtar n media',
+'nstab-special'   => 'Uslig',
+'nstab-project'   => 'Awal γef...',
+'nstab-image'     => 'Afaylu',
+'nstab-mediawiki' => 'Izen',
+'nstab-template'  => 'Talγa',
+'nstab-help'      => 'Tallat',
+'nstab-category'  => 'Taggayt',
+
+# Main script and global functions
+'nosuchaction'      => 'Tigawt ulac-itt',
+'nosuchactiontext'  => 'Wiki ur teεqil ara tigawt-nni n URL',
+'nosuchspecialpage' => 'Asebtar uslig am wagi ulac-it.',
+'nospecialpagetext' => 'Tseqdsiḍ γef asebtar uslig ulac-it, yella umuγ n yisebtaren usligen dagi [[Special:Specialpages|umuγ n yisebtaren usligen]].',
+
+# General errors
+'error'                => 'Agul',
+'databaseerror'        => 'Agul n database',
+'dberrortext'          => 'Yella ugul n tseddast deg database.
+Waqila yella bug deg software.
+Query n database taneggarut hatt::
+<blockquote><tt>$1</tt></blockquote>
+seg tawuri  "<tt>$2</tt>".
+MySQL yerra-d agul "<tt>$3: $4</tt>".',
+'dberrortextcl'        => 'Yella ugul n tseddast deg database.
+Query n database taneggarut hatt:
+"$1"
+seg tawuri "$2".
+MySQL yerra-d agul "$3: $4"',
+'noconnect'            => 'Suref-aγ! Wiki-yagi tesεa igna, ur tezmir ara temmeslay akk d database. <br />
+$1',
+'nodb'                 => 'Ur yezmir ara ad yextar database $1',
+'cachederror'          => 'Wagi d alsaru n lkac n usebtar, waqila ur yesεa ara akk ibeddlen imaynuten.',
+'laggedslavemode'      => 'Aγtal: Ahat asebtar ur yesεi akk ibeddlen imaynuten.',
+'readonly'             => 'Database d tamsekkert',
+'enterlockreason'      => 'Ini ayγer tsekkreḍ database, ini daγen melmi ara ifukk asekker',
+'readonlytext'         => 'Database d tamsekkert, ahat tettuseggem, qrib ad tuγal-d.
+
+Win (anedbal) isekker-itt yenna-d: $1',
+'missingarticle'       => 'Database ur tufi ara aḍris n usebtar i yessefk ad taf, isem-is "$1".
+
+S umata, wagi yeḍran asmi yettumḥa azady n umezruy/umgerrad ar asebtar.
+
+Lukan mačči akka, waqila yella bug deg software.
+G leεnayek, ini-yas-t-id i unedbal, ur tettuḍ ara ad tefkiḍ tansa n URL.',
+'readonly_lag'         => 'Database d tamsekkert (weḥdes) axaṭer kra n serveur εeṭṭlen',
+'internalerror'        => 'Agul zdaxel',
+'filecopyerror'        => 'Ur yezmir ara yexdem alsaru n ufaylu "$1" ar "$2".',
+'filerenameerror'      => 'Ur yezmir ara ad ibeddel isem ufaylu "$1" ar "$2".',
+'filedeleteerror'      => 'Ur yezmir ara ad yemḥu afaylu "$1".',
+'filenotfound'         => 'Ur yezmir ara ad yaf afaylu "$1".',
+'unexpected'           => 'Agul: "$1"="$2".',
+'formerror'            => 'Agul: ur yezmir ara ad yazen talγa',
+'badarticleerror'      => 'Ur yezmir ara yexdem tigawt-agi deg usebtar-agi.',
+'cannotdelete'         => 'Ur yezmir ara ad yemḥu asebtar nepq afaylu i tebγiḍ. (Ahat amdan wayeḍ yemḥu-t.)',
+'badtitle'             => 'Azwel ur yelhi',
+'badtitletext'         => 'Asebtar i testeqsiḍ fell-as mačči ṣaḥiḥ, d ilem, neγ yella agul deg uzday seg wikipedia s tutlayt tayeḍ neγ deg uzday n wiki nniḍen. Ahat tesεa asekkil ur yezmir ara ad yettuseqdac deg uzwel.',
+'perfdisabled'         => 'Suref-aγ! aḍaγar-agi ur yettuseqdac ara tura axaṭer iεeṭṭel aṭas database.',
+'perfdisabledsub'      => 'Hatt alsaru seg $1:', # obsolete?
+'perfcached'           => 'Talγut-agi seg lkac u waqila mačči d tasiwelt taneggarut.',
+'perfcachedts'         => 'Talγut-adi seg lkac, tasiwelt taneggarut n wass $1.',
+'querypage-no-updates' => 'Ibeddlen n usebtar-agi ur banen ara tura. Tilγa ines qrib ad banen-d.',
+'wrong_wfQuery_params' => 'Imsektayen mačči ṣaḥiḥ deg wfQuery()<br />
+Tawuri: $1<br />
+Query: $2',
+'viewsource'           => 'Ẓer aγbalu',
+'viewsourcefor'        => 'n $1',
+'protectedpagetext'    => 'Asebtar-agi d amsekker.',
+'viewsourcetext'       => 'Tzemreḍ ad twaliḍ u txedmeḍ alsaru n uγbalu n usebtar-agi:',
+'protectedinterface'   => 'Asebtar-agi d amsekker axaṭer yettuseqdac i weḍris n software.',
+'editinginterface'     => "'''Aγtal:''' Aqla-k tettbeddileḍ asebtar i yettuseqdac i weḍris n software. Tagmett n software i ẓren yimseqdacen wiyaḍ ad tbeddel akk d ibeddlen inek.",
+'sqlhidden'            => '(Query n SQL tettwaffer)',
+'cascadeprotected'     => 'Asebtar-agi yettwaḥrez seg ubeddil, axaṭer yettusekcem deg isebtaren i ttwaḥerzen ula d nutni (acercur), ahaten:',
+
+# Login and logout pages
+'logouttitle'                => 'Tuffγa',
+'logouttext'                 => '<strong>Tura teffγeḍ.</strong><br />
+Tzemreḍ ad tesseqdceḍ {{SITENAME}} d udrig, neγ tzemreḍ ad tkecmeḍ daγen s yisem umseqdac inek (neγ nniḍen). Kra n yisebtaren zemren ad mlen belli mazal-ik s yisem umseqdac inek armi temḥuḍ lkac.',
+'welcomecreation'            => '== Ansuf yis-k, $1! ==
+
+Isem n umseqdac inek yettwaxleq. Ur tettuḍ ara ad tbeddleḍ Isemyifiyen n {{SITENAME}} inek.',
+'loginpagetitle'             => 'Takcemt',
+'yourname'                   => 'Isem n umseqdac',
+'yourpassword'               => 'Awal n tbaḍnit',
+'yourpasswordagain'          => 'Σiwed ssekcem awal n tbaḍnit',
+'remembermypassword'         => 'Cfu γef wawal n tbaḍnit inu di uselkim-agi.',
+'yourdomainname'             => 'Taγult inek',
+'externaldberror'            => 'Yella ugul aberrani n database neγ ur tettalaseḍ ara ad tbeddleḍ isem an umseqdac aberrani inek.',
+'loginproblem'               => '<b>Yella ugur akk d ukcam inek.</b><br />Σreḍ daγen!',
+'alreadyloggedin'            => '<strong>A(y) $1, tkecmeḍ yagi!</strong><br />',
+'login'                      => 'Kcem',
+'loginprompt'                => 'Yessefk teğğiḍ ikukiyen (cookies) iwakken ad tkecmeḍ ar {{SITENAME}}.',
+'userlogin'                  => 'Kcem / xleq isem n umseqdac',
+'logout'                     => 'Ffeγ',
+'userlogout'                 => 'Ffeγ',
+'notloggedin'                => 'Ur tekcimeḍ ara',
+'nologin'                    => 'Ur tesεiḍ ara isem n umseqdac? $1.',
+'nologinlink'                => 'Xleq isem n umseqdac',
+'createaccount'              => 'Xleq isem n umseqdac',
+'gotaccount'                 => 'Tesεiḍ yagi isem n umseqdac? $1.',
+'gotaccountlink'             => 'Kcem',
+'createaccountmail'          => 's e-mail',
+'badretype'                  => 'Awal n tbaḍnit amezwaru d wis sin mačči d kif-kif.',
+'userexists'                 => 'Isem umseqdac yeddem-as amdan wayeḍ. Fren yiwen nniḍen.',
+'username'                   => 'Isem n umseqdac:',
+'uid'                        => 'Amseqdac ID:',
+'yourrealname'               => 'Isem n ṣṣeḥ *:',
+'yourlanguage'               => 'Tutlayt:',
+'yourvariant'                => 'Ameskil',
+'yournick'                   => 'Isem wis sin (mačči d amenṣib):',
+'badsig'                     => 'Azmul mačči d ṣaḥiḥ; Ssenqed tags n HTML.',
+'prefs-help-email-enotif'    => 'Tansa-agi tettuseqdac daγen iwakken a nazen-ak email n talγut (xtar-it di iḍaγaren).',
+'prefs-help-realname'        => '* Isem n ṣṣeḥ (am tebγiḍ): ma textareḍ ad t-tefkeḍ, ad yettuseqdac iwakken medden ad snen anwa yura tikkin inek.',
+'loginerror'                 => 'Agul n ukcam',
+'prefs-help-email'           => '* E-mail (am tebγiḍ): Teğği imseqdacen wiyaḍ a k-aznen email mebla ma ẓren tansa email inek.',
+'nocookiesnew'               => 'Isem umseqdac-agi yettwaxleq, meεna ur tekcimeḍ ara. {{SITENAME}} yesseqdac ikukiyen (cookies) iwakken ad tkecmeḍ. Tekseḍ ikukiyen-nni. Eğğ-aten, umbeεd kecm s yisem umseqdac akk d awal n tbaḍnit inek.',
+'nocookieslogin'             => '{{SITENAME}} yesseqdac ikukiyen (cookies) iwakken tkecmeḍ. Tekseḍ ikukiyen-nni. Eğğ-aten iwakken ad tkecmeḍ.',
+'noname'                     => 'Ur tefkiḍ ara isem n umseqdac ṣaḥiḥ.',
+'loginsuccesstitle'          => 'Tkecmeḍ!',
+'loginsuccess'               => "'''Tkecmeḍ ar {{SITENAME}} s yisem umseqdac \"\$1\".'''",
+'nosuchuser'                 => 'Ulac isem umseqdac s yisem "$1". Ssenqed tira n yisem-nni, neγ xelq isem umseqdac amaynut.',
+'nosuchusershort'            => 'Ulac isem umseqdac s yisem "$1". Ssenqed tira n yisem-nni.',
+'nouserspecified'            => 'Yessefk ad tefkeḍ isem n umseqdac.',
+'wrongpassword'              => 'Awal n tbaḍnit γaleṭ. Σreḍ daγen.',
+'wrongpasswordempty'         => 'Awal n tbaḍnit ulac-it. Σreḍ daγen.',
+'mailmypassword'             => 'Awal n tbaḍnit n e-mail',
+'passwordremindertitle'      => 'Asmekti n wawal n tbaḍnit seg {{SITENAME}}',
+'passwordremindertext'       => 'Amdan (waqila d kečč, seg tansa IP $1)
+yesteqsa iwakken a nazen awal n tbaḍnit amaynut i {{SITENAME}} ($4).
+Awal n tbaḍnit iumseqdac "$2" yuγal-d tura "$3".
+Mliḥ lukan tkecmeḍ u tbeddleḍ awal n tbaḍnit tura.
+
+Lukan mačči d kečč i yesteqsatn neγ tecfiḍ γef awal n tbaḍnit, tzemreḍ ad tkemmleḍ mebla ma tbeddleḍ awal n tbaḍnit.',
+'noemail'                    => '"$1" ur yesεa ara email.',
+'passwordsent'               => 'Awal n tbaḍnit amaynut yettwazen i emal inek, aylaw n "$1".
+G leεnaya-k, kcem tikelt nniḍen yis-s.',
+'blocked-mailpassword'       => 'Tansa n IP inek tεekkel, ur tezmireḍ ara ad txedmeḍ abeddel,
+ur tezmireḍ ara ad tesεuḍ awal n tbaḍnit i tettuḍ.',
+'eauthentsent'               => 'Yiwen e-mail yettwazen-ak iwakken tsenteḍ.
+Qbel kulci, ḍfer ayen yenn-ak deg e-mail,
+iwakken tbeyyneḍ belli tansa email inek.',
+'throttled-mailpassword'     => 'Asmekti n wawal n tbaḍnit yettwazen yagi deg $1 sswayeε i iεeddan. Asmekti n wawal n tbaḍnit yettwazen tikelt kan mkul $1 swayeε.',
+'mailerror'                  => 'Agul asmi yettwazen e-mail: $1',
+'acct_creation_throttle_hit' => 'Surf-aγ, txelqeḍ aṭas n ysimawen umseqdac ($1). Ur tettalaseḍ ara txelqeḍ kter.',
+'emailauthenticated'         => 'Tansa e-mail inek tettuεqel deg $1.',
+'emailnotauthenticated'      => 'Tansa e-mail inek mazal ur tettuεqel. Ḥedd e-mail ur ttwazen i ulaḥedd n iḍaγaren-agi.',
+'noemailprefs'               => 'Efk tansa e-mail iwakken ad leḥḥun iḍaγaren-nni.',
+'emailconfirmlink'           => 'Sentem tansa e-mail inek',
+'invalidemailaddress'        => 'Tansa e-mail-agi ur telhi, ur tesεi ara taseddast n lεali. Ssekcem tansa e-mail s taseddast n lεali neγ ur tefkiḍ acemma.',
+'accountcreated'             => 'Isem umseqdac yettwaxleq',
+'accountcreatedtext'         => 'Isem umseqdac i $1 yettwaxleq.',
+
+# Password reset dialog
+'resetpass'               => 'Iεawed awal n tbaḍnit',
+'resetpass_announce'      => 'Tkecmeḍ s ungal yettwazen-ak s e-mail (ungal-nni qrib yemmut). Iwekken tkemmleḍ, yessefk ad textareḍ awal n tbaḍnit amaynut dagi:',
+'resetpass_text'          => '<!-- Rnu aḍris dagi -->',
+'resetpass_header'        => 'Σiwed awal n tbaḍnit',
+'resetpass_submit'        => 'Eg awal n tbaḍnit u kcem',
+'resetpass_success'       => 'Awal n tbaḍnit yettubeddel! Qrib ad tkecmeḍ...',
+'resetpass_bad_temporary' => 'Ungal mačči d ṣaḥiḥ. Ahat tbeddleḍ awal n tbaḍnit inek neγ tetseqsiḍ γef awal n tbaḍnit amaynut.',
+'resetpass_forbidden'     => 'Ur tezmireḍ ara ad tbeddleḍ awal n tbaḍnit deg wiki-yagi',
+'resetpass_missing'       => 'Ulac talγut.',
+
+# Edit page toolbar
+'bold_sample'     => 'Aḍris aberbuz',
+'bold_tip'        => 'Aḍris aberbuz',
+'italic_sample'   => 'Aḍris aṭalyani',
+'italic_tip'      => 'Aḍris aṭalyani',
+'link_sample'     => 'Azwel n uzday',
+'link_tip'        => 'Azday zdaxel',
+'extlink_sample'  => 'http://www.amedya.com azwel n uzday',
+'extlink_tip'     => 'Azday aberrani (cfu belli yessefk at tebduḍ s http://)',
+'headline_sample' => 'Aḍris n uzwel azellum',
+'headline_tip'    => 'Aswir 2 n uzwel azellum',
+'math_sample'     => 'Ssekcem tasemselt dagi',
+'math_tip'        => 'Tasemselt tusnakt (LaTeX)',
+'nowiki_sample'   => 'Ssekcem aḍris mebla taseddast n wiki dagi',
+'nowiki_tip'      => 'Ttu taseddast n wiki',
+'image_sample'    => 'Amedya.jpg',
+'image_tip'       => 'Tugna yettussekcmen',
+'media_sample'    => 'Amedya.ogg',
+'media_tip'       => 'Azday n ufaylu media',
+'sig_tip'         => 'Azmul inek s uzemz',
+'hr_tip'          => 'Ajerriḍ aglawan (ur teččerεiḍ ara)',
+
+# Edit pages
+'summary'                   => 'Agzul',
+'subject'                   => 'Asentel/Azwel azellum',
+'minoredit'                 => 'Wagi abeddel afessas',
+'watchthis'                 => 'Σass asebtar-agi',
+'savearticle'               => 'Beddel asebtar',
+'preview'                   => 'Pre-Ẓer',
+'showpreview'               => 'Mel pre-timeẓriwt',
+'showlivepreview'           => 'Pre-timeẓriwt tağiḥbuṭ',
+'showdiff'                  => 'Mel ibeddlen',
+'anoneditwarning'           => "'''Aγtal:''' Ur tkecmiḍ ara. Tansa IP inek ad tettusmekti deg amezruy n usebtar-agi.",
+'missingsummary'            => "'''Ur tettuḍ ara:''' Ur tefkiḍ ara azwel i ubeddel inek. Lukan twekkiḍ ''Smekti'' tikelt nniḍen, abeddel inek ad yettusmekti mebla azwel.",
+'missingcommenttext'        => 'Ssekcem awennit deg ukessar.',
+'missingcommentheader'      => "'''Ur tettuḍ ara:''' Ur tefkiḍ ara azwel-azellum i ubeddel inek. Lukan twekkiḍ ''Smekti'' tikelt nniḍen, abeddel inek ad yettusmekti mebla azwel-azellum.",
+'summary-preview'           => 'Pre-timeẓriwt n ugzul',
+'subject-preview'           => 'Pre-timeẓriwt asentel/azwel azellum',
+'blockedtitle'              => 'Amseqdac iεekkel',
+'blockedtext'               => "<big>'''Isem umseqdac neγ tansa n IP inek εekkelen.'''</big>
+
+$1 iεekkel-it u yenna-d ''$2''.
+
+Tzemreḍ ad tmeslayeḍ akk d $1 neγ [[{{MediaWiki:grouppage-sysop}}|anedbal]] nniḍen iwakken ad tsmelayem γef uεekkil-nni.
+Lukan ur tefkiḍ ara email saḥih deg [[Special:Preferences|isemyifiyen umseqdac]], ur tezmireḍ ara ad tazneḍ email. Tansa n IP inek n tura d $3, ID n upεekkil d #$5. Smekti-ten u fka-ten i unedbal-nni.",
+'blockedoriginalsource'     => "Aγablu n '''$1''' hat deg ukessar:",
+'blockededitsource'         => "Aḍris n '''ubeddel inek''' i '''$1''' hat deg ukessar:",
+'whitelistedittitle'        => 'Yessefk ad tkecmeḍ iwakken ad tbeddleḍ',
+'whitelistedittext'         => 'Yessefk ad $1 iwakken ad tbeddleḍ isebtaren.',
+'whitelistreadtitle'        => 'Yessefk ad tkecmeḍ iwakken ad teqqareḍ',
+'whitelistreadtext'         => 'Yessefk ad [[Special:Userlogin|tkecmeḍ]] iwakken ad teqqareḍ isebtaren.',
+'whitelistacctitle'         => 'Ur tettalaseḍ ara txelqeḍ isem n umseqdac',
+'whitelistacctext'          => 'Iwakken txelqeḍ isem umseqdac deg wiki-yagi yessefk ad [[Special:Userlogin|tkecmeḍ]] u tesεa izerfan usligen.',
+'confirmedittitle'          => 'Yessef ad tsentmeḍ e-mail inek iwakken ad tbeddleḍ',
+'confirmedittext'           => 'Yessefl ad tsentmeḍ tansa e-mail inek uqbel abeddel. Xtar tansa e-mail di [[Special:Preferences|isemyifiyen umseqdac]].',
+'nosuchsectiontitle'        => 'Amur ulac-it',
+'nosuchsectiontext'         => 'Tεerḍeḍ ad tbeddleḍ amur ulac-it. Ulac amur am akka deg usebtar $1.',
+'loginreqtitle'             => 'Yessefk ad tkecmeḍ',
+'loginreqlink'              => 'Kcem',
+'loginreqpagetext'          => 'Yessefk $1 iwakken ad teẓriḍ isebtaren wiyaḍ.',
+'accmailtitle'              => 'Awal n tbaḍnit yettwazen.',
+'accmailtext'               => 'Awal n tbaḍnit n "$1" yettwazen ar $2.',
+'newarticle'                => '(Amaynut)',
+'newarticletext'            => 'Tḍefreḍ azday γer usebtar mazal ma yettwaxleq.
+Akken txelqeḍ asebtar-nni, aru deg tankult i tella deg ukessar
+(ẓer [[{{MediaWiki:helppage}}|asebtar n tallat]] akken tessneḍ kter).
+Mi tεelṭeḍ, wekki kan γef tqeffalt "Back/Précédent" n browser/explorateur inek.',
+'anontalkpagetext'          => "----''Wagi d asebtar n umyennan n umseqdac adrig. Ihi, yessef a nefk-as ID, nesseqdac tansa n IP ines akken a t-neεqel. Tansa n IP nni ahat tettuseqdac sγur aṭṭas n yimdanen. Lukan ula d kečč aqla-k amseqdac adrig u ur tebγiḍ ara ad tettwabcreḍ izen am wigini, ihi [[Special:Userlogin|xleq isem umseqdac neγ kcem]].''",
+'noarticletext'             => 'Ulac aḍris deg usebtar-agi, tzemreḍ ad [[Special:Search/{{PAGENAME}}|tnadiḍ γef uzwel n usebtar-agi]] deg isebtaren wiyaḍ neγ [{{fullurl:{{FULLPAGENAME}}|action=edit}} tettbeddileḍ asebtar-agi].',
+'clearyourcache'            => "'''Tamawt:''' Beεd asmekti, ahat yessefk ad temḥuḍ lkac n browser/explorateur inek akken teẓriḍ ibeddlen. '''Mozilla / Firefox / Safari:''' qqim twekkiḍ ''Shift'' u wekki γef ''Reload/Recharger'', neγ wekki γef ''Ctrl-Shift-R'' (''Cmd-Shift-R'' deg Apple Mac); '''IE:''' qqim twekkiḍ γef ''Ctrl'' u wekki γef ''Refresh/Actualiser'', neγ wekki γef ''Ctrl-F5''; '''Konqueror:''': wekki kan γef taqeffalt ''Reload'', neγ wekki γef ''F5''; '''Opera''' yessefk ad tesseqdceḍ ''Tools→Preferences/Outils→Préférences'' akken ad temḥud akk lkac.",
+'usercssjsyoucanpreview'    => "<strong>Tixidest:</strong> Sseqdec taqeffalt 'Mel pre-timeẓriwt' iwakken tεerḍeḍ CSS/JS amynut inek uqbel ma tesmektiḍ.",
+'usercsspreview'            => "'''Smekti belli aql-ak twaliḍ CSS inek kan, mazal ur yettusmekti ara!'''",
+'userjspreview'             => "'''Smekti belli aql-ak tεerḍeḍ JavaScript inek kan, mazal ur yettusmekti ara!'''",
+'userinvalidcssjstitle'     => '\'\'\'Aγtal:\'\'\' Aglim "$1" ulac-it. Ur tettuḍ ara belli isebtaren ".css" d ".js" i txedmeḍ sseqdacen azwel i yesεan isekkilen imecṭuḥen, s umedya: {{ns:user}}:Foo/monobook.css akk d {{ns:user}}:Foo/Monobook.css.',
+'updated'                   => '(Yettubeddel)',
+'note'                      => '<strong>Tamawt:</strong>',
+'previewnote'               => '<strong>Tagi pre-timeẓriwt kan, ibeddlen mazal ur ttusmektin ara!</strong>',
+'previewconflict'           => 'Pre-timeẓriwt-agi tmel aḍris i yellan deg d assawen ma tebγiḍ a tt-tesmektiḍ.',
+'session_fail_preview'      => '<strong>Suref-aγ! ur nezmir ara a nesmekti abeddil inek axaṭer yella ugur.
+G leεnayek εreḍ tikelt nniḍen. Lukan mazal yella ugur, ffeγ umbeεd kcem.</strong>',
+'session_fail_preview_html' => "<strong>Suref-aγ! ur nezmir ara a nesmekti abeddel inek axaṭer yella ugur.</strong>
+
+''Awaṭer wiki-yagi teğğa HTML, teffer pre-timeẓriwt akken teğğanez antag n JavaScript.''
+
+<strong>Lukan abeddel agi d aḥeqqani, g leεnayek εreḍ tikelt nniḍen.. Lukan mazal yella ugur, ffeγ umbeεd kcem.</strong>",
+'importing'                 => 'Asekcam n $1',
+'editing'                   => 'Abeddel n $1',
+'editinguser'               => 'Abeddel n umseqdac <b>$1</b>',
+'editingsection'            => 'Abeddel n $1 (amur)',
+'editingcomment'            => 'Abeddel n $1 (awennit)',
+'editconflict'              => 'Amennuγ deg ubeddel: $1',
+'explainconflict'           => 'Amdan nniḍen ibeddel asebtar-agi asmi telliḍ tettbeddileḍ.
+Aḍris n d asawen yesεa asebtar am yewğed tura.
+Ibeddlen inek ahaten deg ukessar.
+Yesfek ad txelṭeḍ ibeddlen inek akk usebtar i yellan.
+<b>Ala</b> aḍris n d asawen i yettusmekta asmi twekkiḍ "Smekti asebtar".<br />',
+'yourtext'                  => 'Aḍris inek',
+'storedversion'             => 'Tasiwelt yettusmketen',
+'nonunicodebrowser'         => '<strong>AΓTAL: Browser/Explorateur inek ur yebil ara unicode. Nexdem akken ad tzemreḍ ad tbeddleḍ mebla amihi: isekkilin i mačči ASCII ttbanen deg tankult ubeddel s ungilen hexadecimal.</strong>',
+'editingold'                => '<strong>AΓTAL: Aqlak tettbeddileḍ tasiwelt taqdimt n usebtar-agi.
+Ma ara t-tesmektiḍ, akk ibeddlen i yexdmen seg tasiwelt-agi ruḥen.</strong>',
+'yourdiff'                  => 'Imgerraden',
+'copyrightwarning'          => 'Ssen belli akk tikkin deg {{SITENAME}} hatent ttwaznen seddaw $2 (Ẓer $1 akken ad tessneḍ kter). Lukan ur tebγiḍ ara aru inek yettubeddel neγ yettwazen u yettwaru deg imkanen nniḍen, ihi ur t-tazneḍ ara dagi.<br />
+Aqlak teggaleḍ belli tureḍ wagi d kečč, neγ teddmiḍ-t seg taγult azayez neγ iγbula tilelliyin.
+<strong>UR TEFKIḌ ARA AXDAM S COPYRIGHT MEBLA TURAGT!</strong>',
+'copyrightwarning2'         => 'Ssen belli akk tikkin deg {{SITENAME}} zemren ad ttubeddlen neγ ttumḥan sγur imdanen wiyaḍ. Lukan ur tebγiḍ ara aru inek yettubeddel neγ yettwazen u yettwaru deg imkanen nniḍen, ihi ur t-tazneḍ ara dagi.<br />
+Aqlak teggaleḍ belli tureḍ wagi d kečč, neγ teddmiḍ-t seg taγult azayez neγ iγbula tilelliyin (ẓer $1 akken ad tessneḍ kter).
+<strong>UR TEFKIḌ ARA AXDAM S COPYRIGHT MEBLA TURAGT!</strong>',
+'longpagewarning'           => '<strong>AΓTAL: Asebtar-agi yesεa $1 kilobytes/kilooctets; kra n browsers/explorateur ur zemren ara ad beddlen isebtaren i yesεan 32kB/ko neγ kter.
+G leεnayek frec asebtar-nni.</strong>',
+'longpageerror'             => '<strong>AGUL: Aḍris i tefkiḍ yesεa $1 kB/ko, tiddi-yagi kter n $2 kB/ko, ur yezmir ara ad yesmekti.</strong>',
+'readonlywarning'           => '<strong>AΓTAL: Database d tamsekker akken ad teddwaxdem,
+ihi ur tezmireḍ ara ad tesmektiḍ ibeddlen inek tura. Smekti aḍris inek
+deg afaylu nniḍen akken tesseqdceḍ-it umbeεd.</strong>',
+'protectedpagewarning'      => '<strong>AΓTAL:  Asebtar-agi yettwaḥrez, ala inedbalen i zemren a t-beddlen</strong>',
+'semiprotectedpagewarning'  => "'''Tamawt:''' Asebtar-agi yettwaḥrez, ala imseqdacen i yesεan isem umseqdac i zemren a t-beddlen.",
+'cascadeprotectedwarning'   => "'''Aγtal:''' Asebtar-agi iεekkel akken ad zemren ala sysop i t-beddlen, axaṭer yettwassekcem deg isebtaren i yettwaḥerzen agi (acercur):",
+'templatesused'             => 'Talγiwin ttuseqdacen deg usebtar-agi:',
+'templatesusedpreview'      => 'Talγiwin ttuseqdacen deg pre-timeẓriwt-agi:',
+'templatesusedsection'      => 'Talγiwin ttuseqdacen deg amur-agi:',
+'template-protected'        => '(yettwaḥrez)',
+'template-semiprotected'    => '(nnefṣ-yettwaḥrez)',
+'edittools'                 => '<!-- Aḍris yettbanen-d seddaw talγa n ubeddil d uzen. -->',
+'nocreatetitle'             => 'Axleq n yisebtaren meḥdud',
+'nocreatetext'              => 'Adeg in internet agi iḥedd axleq n yisebtaren imaynuten.
+Tzemreḍ ad d-uγaleḍ u tbeddleḍ asebtar i yellan, neγ ad [[Special:Userlogin|tkecmeḍ neγ ad txelqeḍ isem umseqdac]].',
+
+# "Undo" feature
+'undo-success' => 'Tzemreḍ ad tessefsuḍ abeddil. Ssenqed asidmer akken ad tessneḍ ayen tebγiḍ ad txdmeḍ d ṣṣeḥ, umbeεd smekti ibeddlen u tkemmleḍ ad tessefsuḍ abeddil.',
+'undo-failure' => 'Ur yezmir ara yessefu abeddel axaṭer yella amennuγ abusari deg ubeddel.',
+'undo-summary' => 'Ssefsu tasiwelt $1 sγur [[Special:Contributions/$2|$2]] ([[User talk:$2|Meslay]])',
+
+# Account creation failure
+'cantcreateaccounttitle' => 'Ur yezmir ara yexleq isem umseqdac',
+'cantcreateaccounttext'  => 'Yeεkel axleq n isem umseqdac n tansa n IP agi : (<b>$1</b>). 
+Ahat llan aṭas n yimidanen icerrεen seg lakul inek neγ provider inek.',
+
+# History pages
+'revhistory'          => 'Amezruy n tsiwelt',
+'viewpagelogs'        => 'Ẓer aγmis n usebtar-agi',
+'nohistory'           => 'Ulac amezruy n yibeddlen i usebtar-agi.',
+'revnotfound'         => 'Ur yezmir ara ad yaf tasiwelt',
+'revnotfoundtext'     => 'Tasiwelt taqdimt n usebtar-agi i testeqsiḍ ulac-it.
+Ssenqed URL i tesseqdac.',
+'loadhist'            => 'Assisi n umezruy n usebtar',
+'currentrev'          => 'Tasiwelt n tura',
+'revisionasof'        => 'Tasiwelt n wass $1',
+'revision-info'       => 'Tasiwelt n wass $1 sγur $2',
+'previousrevision'    => '←Tasiwelt taqdimt',
+'nextrevision'        => 'Tasiwelt tamaynut→',
+'currentrevisionlink' => 'Tasiwelt n tura',
+'cur'                 => 'tura',
+'next'                => 'ameḍfir',
+'last'                => 'amgerrad',
+'orig'                => 'ameẓwer',
+'page_first'          => 'amezwaru',
+'page_last'           => 'aneggaru',
+'histlegend'          => 'Axtiri n umgerrad: rcem tankulin akken ad teẓreḍ imgerraden ger tisiwal u wekki γef enter/entrée neγ γef taqeffalt deg ukessar.<br />
+Tabadut: (tura) = amgerrad akk d tasiwelt n tura,
+(amgerrad) = amgerrad akk d tasiwelt ssabeq, M = abeddel afessas.',
+'deletedrev'          => '[yettumḥa]',
+'histfirst'           => 'Tikkin timezwura',
+'histlast'            => 'Tikkin tineggura',
+'historysize'         => '($1 bytes/octets)',
+'historyempty'        => '(amecluc)',
+
+# Revision feed
+'history-feed-title'          => 'Amezruy n tsiwelt',
+'history-feed-description'    => 'Amezruy n tsiwelt n usebtar-agi deg wiki',
+'history-feed-item-nocomment' => '$1 deg $2', # user at time
+'history-feed-empty'          => 'Asebtar i tebγiḍ ulac-it.
+Waqila yettumḥa neγ yettbeddel isem-is.
+Σreḍ [[Special:Search|ad tnadiḍ deg wiki]] γef isebtaren imaynuten.',
+
+# Revision deletion
+'rev-deleted-comment'         => '(awennit yettwakes)',
+'rev-deleted-user'            => '(isem umseqdac yettwakes)',
+'rev-deleted-event'           => '(asekcem yettwakkes)',
+'rev-deleted-text-permission' => '<div class="mw-warning plainlinks">
+Tasiwelt-agi n tettwakkes seg weγbar azayez.
+Waqila yella kter n talγut deg [{{fullurl:Special:Log/delete|page={{FULLPAGENAMEE}}}} aγmis n umḥay].
+</div>',
+'rev-deleted-text-view'       => '<div class="mw-warning plainlinks">
+Tasiwelt-agi n tettwakkes seg weγbar azayez.
+Kečč d anedbal, tzemreḍ a t-twaliḍ
+Waqila yella kter n talγut [{{fullurl:Special:Log/delete|page={{FULLPAGENAMEE}}}} aγmis n umḥay].
+</div>',
+'rev-delundel'                => 'mel/ffer',
+'revisiondelete'              => 'Mḥu/kkes amḥay tisiwal',
+'revdelete-nooldid-title'     => 'Ulac nnican i tasiwelt',
+'revdelete-nooldid-text'      => 'Ur textareḍ ara tasiwelt nnican akken ad txedmeḍ tawuri fell-as.',
+'revdelete-selected'          => "{{PLURAL:$2|Tasiwelt tettwafren|Tisiwal ttwafernen}} n '''$1:'''",
+'logdelete-selected'          => "{{PLURAL:$2|Tamirt n uγmis tettwafren|Isallen n uγmis ttwafernen}} n '''$1:'''",
+'revdelete-text'              => 'Tisiwal i yettumḥan ad baben deg umezruy n usebtar d weγmis,
+meεna imuren seg-sen zemren imdanen a ten-ẓren.
+
+Inedbalen wiyaḍ deg wiki-yagi zemren ad ẓren imuren i yettwafren u zemren a ten-mḥan, ḥaca ma llan icekkilen.',
+'revdelete-legend'            => 'Eg icekkilen:',
+'revdelete-hide-text'         => 'Ffer aḍris n tsiwelt',
+'revdelete-hide-name'         => 'Ffer tigawt d nnican',
+'revdelete-hide-comment'      => 'Ffer abeddel n uwennit',
+'revdelete-hide-user'         => 'Ffer Isem-umseqdac/IP n umeskar',
+'revdelete-hide-restricted'   => 'Eg icekkilen i inedbalen d yimdanen wiyaḍ',
+'revdelete-suppress'          => 'Kkes talγut seg inedbalen d yimdanen wiyaḍ',
+'revdelete-hide-image'        => 'Ffer ayen yellan deg ufaylu',
+'revdelete-unsuppress'        => 'Kkes icekkilen γef tisiwal i yuγalen-d',
+'revdelete-log'               => 'Awennit n uγmis:',
+'revdelete-submit'            => 'Eg-it i tasiwelt tettwafren',
+'revdelete-logentry'          => 'asekkud n tasiwelt tettubeddel i  [[$1]]',
+'logdelete-logentry'          => 'asekkud n tamirt tettubeddel i [[$1]]',
+'revdelete-logaction'         => '$1 {{plural:$1|tasiwelt tettuxdem|tisiwal ttuxedment}} i anaw $2',
+'logdelete-logaction'         => '$1 {{plural:$1|tamirt|isallen}} n [[$3]] {{plural:$1|tettuxdem|ttuxedmen}} i anaw $2',
+'revdelete-success'           => 'Asekkud n tasiwelt yettuxdem.',
+'logdelete-success'           => 'Asekkud n tamirt yettuxdem.',
+
+# Oversight log
+'oversightlog'    => 'Aγmis n oversight',
+'overlogpagetext' => 'Deg ukessar, d amuγ n umḥay d uεekkil ineggura n wayen yettwaffren seg inedbalen. Ẓer [[Special:Ipblocklist|amuγ n uεekkil n IP]].',
+
+# Diffs
+'difference'                => '(Imgerraden seg tisiwal)',
+'loadingrev'                => 'Assisi tasiwelt n yimgerraden',
+'lineno'                    => 'Ajerriḍ $1:',
+'editcurrent'               => 'Beddel tasiwelt n tura n usebtar-agi',
+'selectnewerversionfordiff' => 'Xtar tasiwelt tamaynut iwakken ad twaliḍ imgerraden',
+'selectolderversionfordiff' => 'Xtar tasiwelt taqdimt iwakken ad twaliḍ imgerraden',
+'compareselectedversions'   => 'Ẓer imgerraden ger tisiwal i textareḍ',
+'editundo'                  => 'ssefsu',
+'diff-multi'                => '({{plural:$1|Yiwen tasiwelt tabusarit|$1 n tisiwal tibusarin}} ur ttumlalent ara.)',
+
+# Search results
+'searchresults'         => 'Igmad n unadi',
+'searchresulttext'      => 'Akken ad tessneḍ amek ara tnadiḍ deg {{SITENAME}}, ẓer [[{{MediaWiki:helppage}}|{{int:help}}]].',
+'searchsubtitle'        => "Tnadiḍ γef '''[[:$1]]'''",
+'searchsubtitleinvalid' => "Tnadiḍ γef '''$1'''",
+'badquery'              => 'Anadi ur yelhi',
+'badquerytext'          => 'Ur nezmir ara ad naf ayen tebγiḍ.
+Axaṭer balak tnadiḍ γef awal yesεan qell n 3 isekkilen,
+Neγ ur turiḍ ara mliḥ γef wayen tnadiḍ,
+s umedya : "izem d d wuccen".
+Σreḍ d wawal nniḍen.',
+'matchtotals'           => 'Ayen tnadiḍ : "$1" yecban $2 n yizwal n usebtar
+d updris n $3 n yisebtaren.',
+'noexactmatch'          => "'''Asebtar s yisem \"\$1\" ulac-it.''' Tzemreḍ ad [[:\$1|txelqeḍ asebtar-agi]].",
+'titlematches'          => 'Ayen yecban azwel n umegrad',
+'notitlematches'        => 'Ulac ayen yecban azwel n umegrad',
+'textmatches'           => 'Ayen yecban azwel n usebtar',
+'notextmatches'         => 'ulac ayen yecban azwel n usebtar',
+'prevn'                 => '$1 ssabeq',
+'nextn'                 => '$1 ameḍfir',
+'viewprevnext'          => 'Ẓer ($1) ($2) ($3).',
+'showingresults'        => "Tamuli n {{PLURAL:$1|'''Yiwen''' wegmud|'''$1''' n yigmad}} seg  #'''$2'''.",
+'showingresultsnum'     => "Tamuli n {{PLURAL:$3|'''Yiwen''' wegmud|'''$3''' n yigmad}} seg  #'''$2'''.",
+'nonefound'             => "'''Tamawt''': S umata, asmi ur tufiḍ acemma
+d ilmen awalen am \"ala\" and \"seg\",
+awalen-agi mačči deg tasmult, neγ tefkiḍ kter n yiwen n wawal (ala isebtaren
+i yesεan akk awalen i banen-d).",
+'powersearch'           => 'Nadi',
+'powersearchtext'       => 'Nadi deg yismawen n taγult:<br />$1<br />$2 Amuγ n yisemmimḍen<br />Nadi γef $3 $9',
+'searchdisabled'        => 'Anadi deg {{SITENAME}} yettwakkes. Tzemreḍ ad tnadiḍ s Google. Meεna ur tettuḍ ara, tasmult n google taqdimt.',
+'blanknamespace'        => '(Amenzawi)',
+
+# Preferences page
+'preferences'              => 'Isemyifiyen',
+'mypreferences'            => 'Isemyifiyen inu',
+'prefsnologin'             => 'Ur tekcimeḍ ara',
+'prefsnologintext'         => 'Yessefk ad [[Special:Userlogin|tkecmeḍ]] iwakken textareḍ isemyifiyen inek.',
+'prefsreset'               => 'Iεawed ad yexdem isemyifiyen inek.',
+'qbsettings'               => 'Tanuga tağiḥbuṭ',
+'qbsettings-none'          => 'Ulaḥedd',
+'qbsettings-fixedleft'     => 'Aẓelmaḍ',
+'qbsettings-fixedright'    => 'Ayeffus',
+'qbsettings-floatingleft'  => 'Tufeg aẓelmaḍ',
+'qbsettings-floatingright' => 'Tufeg ayeffus',
+'changepassword'           => 'Beddel awal n tbaḍnit',
+'skin'                     => 'Aglim',
+'math'                     => 'Tusnakt',
+'dateformat'               => 'talγa n uzemz',
+'datedefault'              => 'Ur sεiq ara asemyifi',
+'datetime'                 => 'Azemz d ukud',
+'math_failure'             => 'Agul n tusnakt',
+'math_unknown_error'       => 'Agul mačči d aḍahri',
+'math_unknown_function'    => 'Tawuri mačči d taḍahrit',
+'math_lexing_error'        => 'Agul n tmawalt',
+'math_syntax_error'        => 'Agul n tseddast',
+'math_image_error'         => 'Abeddil γer PNG yexser; ssenqed installation n latex, dvips, gs, umbeεd eg abeddil',
+'math_bad_tmpdir'          => 'Ur yezmir ara ad yaru γef/γer tusnakt n temp directory/dossier',
+'math_bad_output'          => 'Ur yezmir ara ad yaru γef/γer tusnakt n tuffγa directory/dossier',
+'math_notexvc'             => 'texvc executable/executable texvc ulac-it; ẓer math/README akken a textareḍ isemyifiyen.',
+'prefs-personal'           => 'Profile n umseqdac',
+'prefs-rc'                 => 'Ibeddlen imaynuten',
+'prefs-watchlist'          => 'Amuγ uεessi',
+'prefs-watchlist-days'     => 'Geddac n wussan yessefk ad imel deg umuγ uεessi:',
+'prefs-watchlist-edits'    => 'Geddac n yibeddlen yessefk ad imel deg umuγ uεessi ameqqran:',
+'prefs-misc'               => 'Isemyifiyen wiyaḍ',
+'saveprefs'                => 'Smekti',
+'resetprefs'               => 'Reset/réinitialiser isemyifiyen',
+'oldpassword'              => 'Awal n tbaḍnit aqdim:',
+'newpassword'              => 'Awal n tbaḍnit amaynut:',
+'retypenew'                => 'Σiwed ssekcem n tbaḍnit amaynut:',
+'textboxsize'              => 'Abedddil',
+'rows'                     => 'Ijerriḍen:',
+'columns'                  => 'Tigejda:',
+'searchresultshead'        => 'Anadi',
+'resultsperpage'           => 'Geddac n tiririyin i mkul usebtar:',
+'contextlines'             => 'Geddac n ijerriḍen i mkul tiririt:',
+'contextchars'             => 'Geddac n isekkilen n usatal i mkul ajjeriḍ:',
+'stubthreshold'            => 'Tiddi taddayt i imagraden imecṭuḥen:',
+'recentchangescount'       => 'Geddac n izwal deg ibeddilen imaynuten:',
+'savedprefs'               => 'Isemyifiyen inek yettusmektan.',
+'timezonelegend'           => 'Iẓḍi n ukud',
+'timezonetext'             => 'Amgerrad ger akud inek d akud n server (UTC) [s swayeε].',
+'localtime'                => 'Akud inek',
+'timezoneoffset'           => 'Amgerrad n ukud',
+'servertime'               => 'Akud n server',
+'guesstimezone'            => 'Sseqdec azal n browser/explorateur',
+'allowemail'               => 'Eğğ imseqdacen wiyaḍ ad azen-ik email',
+'defaultns'                => 'Nadi deg yismawen n taγult s umeslugen:',
+'default'                  => 'ameslugen',
+'files'                    => 'Ifayluwen',
+
+# User rights
+'userrights-lookup-user'     => 'Laεej iderman n yimseqdacen',
+'userrights-user-editname'   => 'Ssekcem isem n umseqdac:',
+'editusergroup'              => 'Beddel iderman n yimseqdacen',
+'userrights-editusergroup'   => 'Beddel iderman n umseqdac',
+'saveusergroups'             => 'Smekti iderman n yimseqdacen',
+'userrights-groupsmember'    => 'Amaslad deg:',
+'userrights-groupsavailable' => 'Iderman i yellan:',
+'userrights-groupshelp'      => 'Xtar anda amseqdac yettwakkes/yettnerni seg/deg iderman.
+Iderman ayen ur textareḍ ara ur ttbeddlen ara. Tzemreḍ ad tekkseḍ adrum s CTRL + Click aẓelmaḍ',
+
+# Groups
+'group'       => 'Adrum:',
+'group-sysop' => 'Inedbalen',
+'group-all'   => '(akk)',
+
+'group-sysop-member' => 'Anedbal',
+
+'grouppage-sysop' => '{{ns:project}}:Inedbalen',
+
+# User rights log
+'rightslog'      => 'Aγmis n yizerfan n umseqdac',
+'rightslogtext'  => 'Wagi d aγmis n yibeddlen n yizerfan n umseqdac',
+'rightslogentry' => 'Yettubeddel izerfan n umseqdac $1 seg $2 ar $3',
+'rightsnone'     => '(ulaḥedd)',
+
+# Recent changes
+'nchanges'                          => '$1 {{PLURAL:$1|Abeddel|Ibeddlen}}',
+'recentchanges'                     => 'Ibeddlen imaynuten',
+'recentchangestext'                 => 'Ḍfer ibeddilen imaynuten n {{SITENAME}}.',
+'recentchanges-feed-description'    => 'Ḍfer ibeddilen imaynuten n wiki-yagi deg usuddem-agi.',
+'rcnote'                            => "Deg ukessar {{PLURAL:$1|yella '''yiwen''' ubeddel aneggaru|llan '''$1''' n yibeddlen ineggura}} deg {{PLURAL:$2|wass aneggaru|'''$2''' ussan ineggura}}, deg azemz $3.",
+'rcnotefrom'                        => 'Deg ukessar llan ibeddlen seg wasmi <b>$2</b> (ar <b>$1</b>).',
+'rclistfrom'                        => 'Mel ibeddlen imaynuten seg $1',
+'rcshowhideminor'                   => '$1 ibeddlen ifessasen',
+'rcshowhideliu'                     => '$1 n yimseqdacen i ikecmen',
+'rcshowhideanons'                   => '$1 n yimseqdacen udrigen',
+'rcshowhidepatr'                    => '$1 n yibeddlen yettwassenqden',
+'rcshowhidemine'                    => '$1 ibeddlen inu',
+'rclinks'                           => 'Mel $1 n yibeddlen ineggura di $2 ussan ineggura<br />$3',
+'diff'                              => 'amgerrad',
+'hist'                              => 'Amezruy',
+'hide'                              => 'Ffer',
+'show'                              => 'Mel',
+'number_of_watching_users_pageview' => '[$1 aεessas/iεessasen]',
+'rc_categories'                     => 'Ḥedded i taggayin (ferreq s "|")',
+'rc_categories_any'                 => 'Ulayγer',
+
+# Recent changes linked
+'recentchangeslinked'          => 'Ibeddlen imaynuten n yisebtaren myezdin',
+'recentchangeslinked-noresult' => 'Ulac abeddel deg isebtaren myezdin deg tawala i textareḍ.',
+
+# Upload
+'upload'                      => 'Azen afaylu',
+'uploadbtn'                   => 'Azen afaylu',
+'reupload'                    => 'Σiwed azen',
+'reuploaddesc'                => 'Uγal-d ar talγa n tuznin.',
+'uploadnologin'               => 'Ur tekcimeḍ ara',
+'uploadnologintext'           => 'Yessefk [[Special:Userlogin|ad tkecmeḍ]]
+iwakken ad tazneḍ afaylu.',
+'upload_directory_read_only'  => 'Weserver/serveur Web ur yezmir ara ad yaru deg ($1).',
+'uploaderror'                 => 'Agul deg usekcam',
+'uploadtext'                  => "Sseqdec talγa deg ukessar akken ad tazeneḍ tugnawin, akken ad teẓred neγ ad tnadiḍ tugnawin yettwaznen, ruḥ γer [[Special:Imagelist|amuγ n usekcam n tugnawin]], Amezruy n usekcam d umḥay hatent daγen deg [[Special:Log/upload|amezruy n usekcam]].
+
+Akken ad tessekcmeḍ tugna deg usebtar, seqdec azay am wagi
+'''<nowiki>[[</nowiki>{{ns:image}}<nowiki>:Afaylu.jpg]]</nowiki>''',
+'''<nowiki>[[</nowiki>{{ns:image}}<nowiki>:Afaylu.png|aḍris]]</nowiki>''' neγ
+'''<nowiki>[[</nowiki>{{ns:media}}<nowiki>:Afaylu.ogg]]</nowiki>''' akken ad iruḥ wezday qbala ar ufaylu.",
+'uploadlog'                   => 'amezruy n usekcam',
+'uploadlogpage'               => 'Amezruy n usekcam',
+'uploadlogpagetext'           => 'Deg ukessar, d amuγ n n usekcam n ufayluwen imaynuten.',
+'filename'                    => 'Isem n ufaylu',
+'filedesc'                    => 'Agzul',
+'fileuploadsummary'           => 'Agzul:',
+'filestatus'                  => 'Aẓayer n copyright',
+'filesource'                  => 'Seg way yekka',
+'uploadedfiles'               => 'Ifayluwen yettwaznen',
+'ignorewarning'               => 'Ttu aγtal u smekti afaylu',
+'ignorewarnings'              => 'Ttu iγtalen',
+'minlength'                   => 'Isem n ufaylu yessefk ad yesεu 3 isekkilen neγ kter.',
+'illegalfilename'             => 'Isem n ufaylu "$1" yesεa isekkilen i ur tettalaseḍ ara tesseqdceḍ deg yizwal n yisebtaren. G leεnayek beddel isem n ufaylu u azen-it tikelt nniḍen.',
+'badfilename'                 => 'Isem ufaylu yettubeddel ar "$1".',
+'filetype-badmime'            => 'Ur tettalaseḍ ara tazneḍ ufayluwen n anaw n MIME "$1".',
+'filetype-badtype'            => "Ur neqbil ara ufayluwen n anwan am '''\".\$1\"'''
+: Amuγ n inawen i neqbel: \$2",
+'filetype-missing'            => 'Afaylu ur yesεi ara taseggiwit (am ".jpg").',
+'large-file'                  => 'Ilaq tiddi n ufayluwen ur tettili kter n $1; tiddi n ufaylu-agi $2.',
+'largefileserver'             => 'Afaylu meqqer aṭṭas, server ur t-yebil ara.',
+'emptyfile'                   => 'Afaylu i tazneḍ d ilem. Waqila tγelṭeḍ deg isem-is. G leεnayek ssenqed-it.',
+'fileexists'                  => 'Afaylu s yisem-agi yewğed yagi, ssenqed <strong><tt>$1</tt></strong> ma telliḍ mačči meḍmun akken a t-tbeddleḍ.',
+'fileexists-extension'        => 'Afaylu s yisem-agi yewğed:<br />
+Isem n ufaylu i tazneḍ: <strong><tt>$1</tt></strong><br />
+Isem n ufaylu i yewğed: <strong><tt>$2</tt></strong><br />
+Amgerrad i yella kan deg isekkilen imecṭuḥen/imeqqranen deg taseggiwit (am ".jpg"/".jPg"). G leεnayek ssenqed-it.',
+'fileexists-thumb'            => "'''<center>Tugna i tewğed</center>'''",
+'fileexists-thumbnail-yes'    => 'Iban-d belli tugna-nni d tugna tamecṭuht n tugna nniḍen <i>(thumbnail)</i>. G leεnayek ssenqed tugna-agi <strong><tt>$1</tt></strong>.<br />
+Ma llant kif-kif ur tt-taznepd ara.',
+'file-thumbnail-no'           => 'Isem n tugna yebda s <strong><tt>$1</tt></strong>. Waqila tugna-nni d tugna tamecṭuht n tugna nniḍen <i>(thumbnail)</i>.
+Ma tesεiḍ tugna-nni s resolution tameqqrant, azen-it, ma ulac beddel isem-is.',
+'fileexists-forbidden'        => 'Tugna s yisem kif-kif tewğed yagi; g leεnayek uγal u beddel isem-is. [[Image:$1|thumb|center|$1]]',
+'fileexists-shared-forbidden' => 'Tugna s yisem kif-kif tewğed yagi; g leεnayek uγal u beddel isem-is. [[Image:$1|thumb|center|$1]]',
+'successfulupload'            => 'Azen yekfa',
+'fileuploaded'                => 'Afaylu $1 yettwazen.
+Ḍfer azday-agi: $2 γer usebtar n uglam u ččar talγa γef ufaylu,
+S umedya, n wansi-t, melmi texleq, anwa ixelq-it u taγawsa nniḍen.
+Lukan afaylu d tugna, tzemreḍ a tt-tkecmiḍ am akka: <tt><nowiki>[[</nowiki>{{ns:image}}<nowiki>:$1|thumb|Description]]</nowiki></tt>',
+'uploadwarning'               => 'Aγtal deg wazan n ufayluwen',
+'savefile'                    => 'Smekti afaylu',
+'uploadedimage'               => '"[[$1]]" yettwazen',
+'uploaddisabled'              => 'Suref-aγ, azen n ufayluwen yettwakkes',
+'uploaddisabledtext'          => 'Azen n ufayluwen yettwakkes deg wiki-yagi',
+'uploadscripted'              => 'Afaylu-agi yesεa angal n HTML/script i yexdem agula deg browser/explorateur.',
+'uploadcorrupt'               => 'Afaylu-yagi yexser neγ yesεa taseggiwit (am ".jpg") mačči ṣaḥiḥ. G leεnayek ssenqed-it.',
+'uploadvirus'                 => 'Afaylu-nni yesεa anfafad asenselkim (virus)! Ẓer kter: $1',
+'sourcefilename'              => 'And yella afyalu',
+'destfilename'                => 'Anda iruḥ afaylu',
+'watchthisupload'             => 'Σass usebtar-agi',
+'filewasdeleted'              => 'Afaylu s yisem-agi yettwazen umbeεd yettumḥa. Ssenqed $1 qbel ma tazniḍ tikelt nniḍen.',
+
+'upload-proto-error'      => 'Agul deg protokol',
+'upload-proto-error-text' => 'Assekcam yenṭerr URL i yebdan s <code>http://</code> neγ <code>ftp://</code>.',
+'upload-file-error'       => 'Agul zdaxel',
+'upload-file-error-text'  => 'Agul n daxel yeḍran asmi yeεreḍ ad yexleq afaylu temporaire deg server.  G leεnayek, meslay akk d unedbal n system.',
+'upload-misc-error'       => 'Agul mačči mechur asmi yettwazen ufaylu',
+'upload-misc-error-text'  => 'Agul mačči mechur asmi yettwazen afaylu.  G leεnayek sseqed belli URL d ṣaḥiḥ u εreḍ tikelt nniḍen.  Ma yella daγen wagul, meslay akk d unedbal n system.',
+
+# Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
+'upload-curl-error6'       => 'Ur yezmir ara ad yessglu URL',
+'upload-curl-error6-text'  => 'Ur yezmir ara ad yessglu URL.  Ssenqed URL-nni.',
+'upload-curl-error28'      => 'Yekfa wakud n wazen n ufaylu',
+'upload-curl-error28-text' => 'Adeg n internet-agi iεetṭel aṭas. G leεnayek ssenqed adeg-nni, ggun cwiṭ umbeεd εreḍ tikelt nniḍen.',
+
+'license'            => 'Turagt',
+'nolicense'          => 'Ur textareḍ acemma',
+'upload_source_url'  => ' (URL saḥiḥ)',
+'upload_source_file' => ' (afaylu deg uselkim inek)',
+
+# Image list
+'imagelist'                 => 'Amuγ n tugniwin',
+'imagelisttext'             => "Deg ukessar yella umuγ n '''$1''' {{plural:$1|ufaylu|yifayluwen}} $2.",
+'imagelistforuser'          => 'Wagi yemli tugniwin i yazen $1 kan.',
+'getimagelist'              => 'Yeddem amuγ n tugniwin',
+'ilsubmit'                  => 'Nadi',
+'showlast'                  => 'Mel $1 n yifayluwen ineggura $2.',
+'byname'                    => 's yisem',
+'bydate'                    => 's uzemz',
+'bysize'                    => 's tiddi',
+'imgdelete'                 => 'mḥu',
+'imgdesc'                   => 'aglam',
+'imgfile'                   => 'afaylu',
+'imglegend'                 => 'Tabadut: (desc) = mel/beddel aglam n ufaylu.',
+'imghistory'                => 'amezruy n ufaylu',
+'revertimg'                 => 'ssuγal',
+'deleteimg'                 => 'mḥu',
+'deleteimgcompletely'       => 'Mḥu akk tisiwal n ufaylu-yagi',
+'imghistlegend'             => 'Tabdut: (tura) = afaylu n tura, (mḥu) = mḥu tasiwelt taqdimt,
+(ssuγal) = ssuγal γer tasiwlt taqdimt-agi.
+<br /><i>Wekki γef uzemz akken ad teẓriḍ afaylu deg wass-nni</i>.',
+'imagelinks'                => 'Izdayen',
+'linkstoimage'              => 'Isebtaren-agi sεan azday ar afaylu-agi',
+'nolinkstoimage'            => 'Ulaḥedd seg yisebtaren sεan azday ar afaylu-agi.',
+'sharedupload'              => 'Afaylu-yagi yettuseqdac sγur wiki tiyaḍ.',
+'shareduploadwiki'          => 'Ẓer $1 iwakken ad tessneḍ kter.',
+'shareduploadwiki-linktext' => 'Asebtar n uglam n ufaylu',
+'noimage'                   => 'Afaylu s yisem-agi ulac-it, tzemreḍ ad $1.',
+'noimage-linktext'          => 't-tazneḍ',
+'uploadnewversion-linktext' => 'tazneḍ tasiwelt tamaynut n ufaylu-yagi',
+'imagelist_date'            => 'Azemz',
+'imagelist_name'            => 'Isem',
+'imagelist_user'            => 'Amseqdac',
+'imagelist_size'            => 'Tiddi (bytes/octets)',
+'imagelist_description'     => 'Aglam',
+'imagelist_search_for'      => 'Nadi γef yisem n tugna:',
+
+# MIME search
+'mimesearch'         => 'Anadi n MIME',
+'mimesearch-summary' => 'Asebtar-agi yeğğa astay n ifayluwen n unaw n MIME ines. Asekcem: ayen yella/anaw azellum, e.g. <tt>tugna/jpeg</tt>.',
+'mimetype'           => 'Anaw n MIME:',
+'download'           => 'Ddem-it γer uselkim inek',
+
+# Unwatched pages
+'unwatchedpages' => 'Isebtaren mebla iεessasen',
+
+# List redirects
+'listredirects' => 'Amuγ isemmimḍen',
+
+# Unused templates
+'unusedtemplates'     => 'Talγiwin mebla aseqdac',
+'unusedtemplatestext' => 'Asebtar-agi yesεa amuγ n akk isebtaren n isem n taγult s yisem "talγa" iwumi ulca-iten deg ḥedd asebtar. Ur tettuḍ ara ad tessenqdeḍ isebtaren n talγa wiyaḍ qbel ma temḥuḍ.',
+'unusedtemplateswlh'  => 'izdayen wiyaḍ',
+
+# Random redirect
+'randomredirect' => 'Asemmimeḍ menwala',
+
+# Statistics
+'statistics'             => 'Tisnaddanin',
+'sitestats'              => 'Tisnaddanin n {{SITENAME}}',
+'userstats'              => 'Tisnaddanin n umseqdac',
+'sitestatstext'          => "{{PLURAL:\$1|Yella '''yiwen''' usebtar|Llan '''\$1''' n yisebtaren}} deg database.
+Azwil-agi yesεa daγen akk isebtaren \"amyannan\", d yisebtaren γef {{SITENAME}}, d yisebtaren \"imecṭuḥen\", isebtaren ismimḍen, d wiyaḍ.
+Asmi yettwakkes wigini, {{PLURAL:\$2|yella '''yiwen''' asebtar|llan '''\$2''' n yisebtaren}} d {{PLURAL:\$2|asebtar amliḥ|isebtaren imliḥen}} . 
+
+'''\$8''' {{PLURAL:\$8|afaylu|ifayluwen}} ttwaznen.
+
+{{PLURAL:\$3|tella|llant}} '''\$3''' n {{PLURAL:\$3|timeẓriwt|timeẓriwin}}, '''\$4''' n {{PLURAL:\$4|ubeddel|yibeddlen}} n usebtar segwasmi {{SITENAME}} yettwaxleq.
+Ihi, {{PLURAL:\$5|yella|llan}} '''\$5''' n {{PLURAL:\$5|ubeddel|yibeddlen}} i mkul asebtar, d '''\$6''' timeẓriwin i mkul abeddel.
+
+Ṭul n [http://meta.wikimedia.org/wiki/Help:Job_queue umuti n wexdam] '''\$7'''.",
+'userstatstext'          => "{{PLURAL:$1|Yella '''yiwen''' umseqdac|Llan '''$1''' n yimseqdacen}}, seg-sen
+'''$2''' (neγ '''$4%''') {{PLURAL:$2|yesεa|sεan}} $5 n yizerfan.",
+'statistics-mostpopular' => 'Isebtaren mmeẓren aṭṭas',
+
+'disambiguations'      => 'Isebtaren n usefham',
+'disambiguationspage'  => 'Talγa:asefham',
+'disambiguations-text' => "Isebtaren-agi sεan azday γer '''usebtar n usefham'''. Yessfak ad yesεun azday γer uzwel ṣaḥiḥ mačči γer usebtar n usefham.",
+
+'doubleredirects'     => 'Asemmimeḍ yeḍra snat tikwal',
+'doubleredirectstext' => 'Mkull ajerriḍ yesεa azday γer asmimeḍ amezwaru d wis sin, ajerriḍ amezwaru n uḍris n usebtar wis sin
+daγen, iwumi yefkan asmimeḍ ṣaḥiḥ i yessefk ad sεan isebtaren azday γur-s.',
+
+'brokenredirects'        => 'Isemmimḍen imerẓa',
+'brokenredirectstext'    => 'Isemmimḍen-agi sεan izdayen ar isebtaren ulac-iten:',
+'brokenredirects-edit'   => '(beddel)',
+'brokenredirects-delete' => '(mḥu)',
+
+'withoutinterwiki'        => 'Isebtaren mebla izdayen ar isebtaren n wikipedia s tutlayin tiyaḍ',
+'withoutinterwiki-header' => 'Isebtaren-agi ur sεan ara izdayen ar isebtaren n wikipedia s tutlayin tiyaḍ:',
+
+# Miscellaneous special pages
+'nbytes'                  => '$1 {{PLURAL:$1|byte/octet|bytes/octets}}',
+'ncategories'             => '$1 {{PLURAL:$1|Taggayt|Taggayin}}',
+'nlinks'                  => '$1 {{PLURAL:$1|azday|izdayen}}',
+'nmembers'                => '$1 {{PLURAL:$1|amaslad|imasladen}}',
+'nrevisions'              => '$1 {{PLURAL:$1|tasiwelt|tisiwal}}',
+'nviews'                  => '$1 {{PLURAL:$1|timeẓriwt|tuẓrin}}',
+'specialpage-empty'       => 'Asebtar-agi d ilem.',
+'lonelypages'             => 'Isebtaren igujilen',
+'lonelypagestext'         => 'Isebtaren-agi ur myezdin ara seg isebtaren wiyaḍ deg wiki-yagi.',
+'uncategorizedpages'      => 'Isebtaren mebla taggayt',
+'uncategorizedcategories' => 'Taggayin mebla taggayt',
+'uncategorizedimages'     => 'Tugna mebla taggayt',
+'unusedcategories'        => 'Taggayin ur nettwaseqdac ara',
+'unusedimages'            => 'Ifayluwin ur nettwaseqdac ara',
+'popularpages'            => 'Isebtaren iγerfanen',
+'wantedcategories'        => 'Taggayin mmebγant',
+'wantedpages'             => 'Isebtaren mmebγan',
+'mostlinked'              => 'Isebtaren myezdin aṭas',
+'mostlinkedcategories'    => 'Taggayin myezdint aṭas',
+'mostcategories'          => 'Isebtaren i yesεan aṭṭas taggayin',
+'mostimages'              => 'Tugniwin myezdin aṭas',
+'mostrevisions'           => 'Isebtaren i yettubedlen aṭas',
+'allpages'                => 'Akk isebtaren',
+'prefixindex'             => 'Akk isebtaren s yisekkilen imezwura',
+'randompage'              => 'Asebtar menwala',
+'shortpages'              => 'Isebtaren imecṭuḥen',
+'longpages'               => 'Isebtaren imeqqranen',
+'deadendpages'            => 'isebtaren mebla izdayen',
+'deadendpagestext'        => 'Isebtaren-agi ur sεan ara azday γer isebtaren wiyaḍ deg wiki-yagi.',
+'protectedpages'          => 'Isebtaren yettwaḥerzen',
+'protectedpagestext'      => 'Isebtaren-agi yettwaḥerzen seg ubeddel neγ asemmimeḍ',
+'protectedpagesempty'     => 'Isebtaren-agi ttwaḥerzen s imsektayen -agi.',
+'listusers'               => 'Amuγ n yimseqdacen',
+'specialpages'            => 'Isebtaren usligen',
+'spheading'               => 'Isebtaren usligen i akk iseqdacen',
+'restrictedpheading'      => 'Isebtaren usligen gedlen',
+'rclsub'                  => '(ar isebtaren myezdin seg "$1")',
+'newpages'                => 'Isebtaren imaynuten',
+'newpages-username'       => 'Isem n umseqdac:',
+'ancientpages'            => 'Isebtaren iqdimen',
+'intl'                    => 'Izdayen ar tutlayin nniḍen zdaxel wikipedia',
+'move'                    => 'Smimeḍ',
+'movethispage'            => 'Smimeḍ asebtar-agit',
+'unusedimagestext'        => '<p>Ssen belli ideggen n internet sεan izadeyen γer tugna-agi s URL n qbala, γas akken tugna-nni hatt da.</p>',
+'unusedcategoriestext'    => 'Taggayin-agi weğden meεna ulac isebtaren neγ taggayin i sseqdacen-iten.',
+
+# Book sources
+'booksources'               => 'Iγbula n yidlisen',
+'booksources-search-legend' => 'Nadi γef iγbula n yidlisen',
+'booksources-go'            => 'Ruḥ',
+'booksources-text'          => 'Deg ukessar, amuγ n yizdayen iberraniyen izzenzen idlisen (imaynuten akk d uqdimen), yernu ahat sεan kter talγut γef idlisen i tettnadiḍ fell-asen:',
+
+'categoriespagetext' => 'Llant taggayin-agi deg wiki-yagi.',
+'data'               => 'Talγut',
+'userrights'         => 'Laεej iserfan n umseqdac',
+'groups'             => 'Iderman n yimseqdacen',
+'alphaindexline'     => '$1 ar $2',
+'version'            => 'Tasiwelt',
+
+# Special:Log
+'specialloguserlabel'  => 'Amseqdac:',
+'speciallogtitlelabel' => 'Azwel:',
+'log'                  => 'Aγmis',
+'log-search-legend'    => 'Nadi γef yiγmisen',
+'log-search-submit'    => 'Ruḥ',
+'alllogstext'          => 'Mel akk iγmisen n {{SITENAME}}.
+Tzemreḍ ad textareḍ cwiṭ seg-sen ma tebγiḍ.',
+'logempty'             => 'Ur yufi ara deg uγmis.',
+'log-title-wildcard'   => 'Nadi γef izwal i yebdan s uḍris-agi',
+
+# Special:Allpages
+'nextpage'          => 'Asebtar ameḍfir ($1)',
+'prevpage'          => 'Asebtar ssabeq ($1)',
+'allpagesfrom'      => 'Mel isebtaren seg:',
+'allarticles'       => 'Akk imagraden',
+'allinnamespace'    => 'Akk isebtaren ($1 isem n taγult)',
+'allnotinnamespace' => 'Akk isebtaren (mačči deg $1 isem n taγult)',
+'allpagesprev'      => 'Ssabeq',
+'allpagesnext'      => 'Ameḍfir',
+'allpagessubmit'    => 'Ruḥ',
+'allpagesprefix'    => 'Mel isebtaren s uzwir:',
+'allpagesbadtitle'  => 'Azwel n usebtar mačči ṣaḥiḥ neγ yesεa azwir inter-wiki. Waqila yesεa isekkilen ur ttuseqdacen ara deg izwal.',
+
+# Special:Listusers
+'listusersfrom'      => 'Mel imseqdacen seg:',
+'listusers-submit'   => 'Mel',
+'listusers-noresult' => 'Ur yufi ḥedd (amseqdac).',
+
+# E-mail user
+'mailnologin'     => 'Ur yufi ḥedd (tansa)',
+'mailnologintext' => 'Yessefk ad [[Special:Userlogin|tkecmeḍ]] u tesεiḍ tansa e-mail ṭaṣhiḥt deg [[Special:Preferences|isemyifiyen]] inek
+iwakken ad tazneḍ email i imseqdacen wiyaḍ.',
+'emailuser'       => 'Azen e-mail i umseqdac-agi',
+'emailpage'       => 'Azen e-mail i umseqdac',
+'emailpagetext'   => 'Lukan amseqdac-agi yefka-d tansa n email ṣaḥiḥ
+deg imsifiyen ines, talγa deg ukessar ad t-tazen izen.
+Tansa n email i tefkiḍ deg imisifyen inek ad tban-d
+deg « Expéditeur» n izen inek iwakken amseqdac-nni yezmer a k-yerr.',
+'usermailererror' => 'Yella ugul deg uzwel n email:',
+'defemailsubject' => 'e-mail n {{SITENAME}}',
+'noemailtitle'    => 'E-mail ulac-it',
+'noemailtext'     => 'Amseqdac-agi ur yefki ara e-mail ṣaḥiḥ, neγ ur yebγi ara e-mailiyen seg medden.',
+'emailfrom'       => 'Seg',
+'emailto'         => 'i',
+'emailsubject'    => 'Asentel',
+'emailmessage'    => 'Izen',
+'emailsend'       => 'Azen',
+'emailccme'       => 'Azen-iyi-d e-mail n ulsaru n izen inu.',
+'emailccsubject'  => 'Alsaru n izen inek i $1: $2',
+'emailsent'       => 'E-mail yettwazen',
+'emailsenttext'   => 'Izen n e-mail inek yettwazen.',
+
+# Watchlist
+'watchlist'            => 'Amuγ uεessi inu',
+'mywatchlist'            => 'Amuγ uεessi inu',
+'watchlistfor'         => "(n '''$1''')",
+'nowatchlist'          => 'Amuγ uεessi inek d ilem.',
+'watchlistanontext'    => 'G leεnaya-k $1 iwakken ad twalaḍ neγ tbeddleḍ iferdas deg umuγ uεessi inek.',
+'watchlistcount'       => "'''Γur-k {{PLURAL:$1|$1 aferdis|$1 iferdas}} deg umuγ uεessi inek (s yisebtaren umyannan).'''",
+'clearwatchlist'       => 'Mḥu amuγ uεessi',
+'watchlistcleartext'   => 'Ṣeḥ tebγiḍ a ten-tekkseḍ?',
+'watchlistclearbutton' => 'Mḥu amuγur uεessi',
+'watchlistcleardone'   => 'Amuγ uεessi inek yettumḥa. {{PLURAL:$1|$1 aferdis yettwakes|$1 iferdas ttwaksen}}.',
+'watchnologin'         => 'Ur tekcimeḍ ara',
+'watchnologintext'     => 'Yessefk ad [[Special:Userlogin|tkecmeḍ]] iwekken ad tbeddleḍ amuγ uεessi inek.',
+'addedwatch'           => 'Yerna ar amuγ uεessi',
+'addedwatchtext'       => "Asebtar \"[[:\$1]]\" yettwarnu deg [[Special:Watchlist|umuγ uεessi]] inek.
+Ma llan ibeddlen deg usebtar-nni neγ deg usbtar umyennan ines, ad banen dagi,
+Deg [[Special:Recentchanges|umuγ n yibeddlen imaynuten]] ad banen s '''yisekkilen ibberbuzen''' (akken ad teẓriḍ).
+
+Ma tebγiḍ ad tekkseḍ asebtar seg umuγ uεessi inek, wekki γef \"Fakk aεessi\".",
+'removedwatch'         => 'Yettwakkes seg umuγ uεessi',
+'removedwatchtext'     => 'Asebtar "[[:$1]]" yettwakkes seg umuγ uεessi inek.',
+'watch'                => 'Σass',
+'watchthispage'        => 'Σass asebtar-agi',
+'unwatch'              => 'Fakk aεassi',
+'unwatchthispage'      => 'Fakk aεassi',
+'notanarticle'         => 'Mačči d amagrad',
+'watchnochange'        => 'Ulaḥedd n yiferdas n umuγ n uεessi inek ma yettubeddel deg tawala i textareḍ.',
+'watchdetails'         => '* ttεassaγ {{PLURAL:$1|$1 usebtar|$1 n yisebtaren}} mebla isebtaren "amyannan"
+* [[Special:Watchlist/edit|Mel u beddel amuγ uεesi]]
+* [[Special:Watchlist/clear|Kkes akk isebtaren]]',
+'wlheader-enotif'      => '* Yeğğa Email n talγut.',
+'wlheader-showupdated' => "* Isebtaren ttubeddlen segwasmi tkecmeḍ tikelt taneggarut ttbanen-d s '''uḍris aberbuz'''",
+'watchmethod-recent'   => 'yessenqed ibeddlen imaynuten n isebtaren i ttεasseγ',
+'watchmethod-list'     => 'yessenqed isebtaren i ttεassaγ i ibeddlen imaynuten',
+'removechecked'        => 'Kkes iferdas i textareḍ seg umuγ uεessi',
+'watchlistcontains'    => 'Amuγ uεessi inek yesεa $1 n {{PLURAL:$1|usebtar|yisebtaren}}.',
+'watcheditlist'        => "Wagi d amuγ uεessi (s ugemmay) n isebtaren i tettεweḍ.
+Xtar tankulin n yisebtaren i tebγiḍ ad tekseḍ seg umuγ uεessi inek umbeεd wekki γef taqeffalt 'kkes ayen xtareγ deg ukessar (wagi ad yemḥu daγen isebtaren 'amyannan' nsen d vice versa).",
+'removingchecked'      => 'Ttwakksen iferdas i textareḍ seg umuγ uεessi...',
+'couldntremove'        => "Ur yezmir ara ad yemḥu '$1'...",
+'iteminvalidname'      => "Agnu akk d uferdis '$1', isem mačči ṣaḥiḥ...",
+'wlnote'               => "Deg ukessar {{PLURAL:$1|yella yiwen ubeddel aneggaru|llan '''$1''' n yibeddlen ineggura}} deg {{PLURAL:$2|saεa taneggarut|'''$2''' swayeε tineggura}}.",
+'wlshowlast'           => 'Mel $1 n swayeε $2 n wussan neγ $3 ineggura',
+'wlsaved'              => 'Tagi d tasiwelt tettusmekta n umuγ uεessi inek.',
+'watchlist-show-bots'  => 'Mel ibeddlen n yiboṭiyen (bots)',
+'watchlist-hide-bots'  => 'Ffer ibeddlen n yiboṭiyen (bots)',
+'watchlist-show-own'   => 'Mel ibeddlen inu',
+'watchlist-hide-own'   => 'Ffer ibeddlen inu',
+'watchlist-show-minor' => 'Mel ibeddlen ifessasen',
+'watchlist-hide-minor' => 'Ffer ibeddlen ifessasen',
+'wldone'               => 'D ayen.',
+
+# Displayed when you click the "watch" button and it's in the process of watching
+'watching'   => 'Ad iεass...',
+'unwatching' => 'Ad ifakk aεessi...',
+
+'enotif_mailer'      => 'Email n talγut n {{SITENAME}}',
+'enotif_reset'       => 'Rcem akk isebtaren mmeẓren',
+'enotif_newpagetext' => 'Wagi d asebtar amaynut.',
+'changed'            => 'yettubeddel',
+'created'            => 'yettwaxleq',
+'enotif_subject'     => 'Asebtar $PAGETITLE n {{SITENAME}} $CHANGEDORCREATED sγur $PAGEEDITOR',
+'enotif_lastvisited' => 'Ẓer $1 i akk ibeddlen segwasmi tkecmeḍ tikelt taneggarut.',
+'enotif_body'        => 'Ay $WATCHINGUSERNAME,
+
+Asebtar n {{SITENAME}} $PAGETITLE $CHANGEDORCREATED deg wass $PAGEEDITDATE sγur $PAGEEDITOR, ẓer $PAGETITLE_URL i tasiwelt n tura.
+
+$NEWPAGE
+
+Abeddel n wegzul: $PAGESUMMARY $PAGEMINOREDIT
+
+Meslay akk d ambeddel:
+email: $PAGEEDITOR_EMAIL
+wiki: $PAGEEDITOR_WIKI
+
+Ur yelli ara email n talγut asmi llan ibeddlen deg usebtar ala lukan teẓreḍ asebtar-nni. Tzemreḍ ad terreḍ i zero email n talγut i akk isebraen i tettεasseḍ.
+
+             email n talγut n {{SITENAME}}
+
+--
+Akken ad tbeddleḍ n umuγ uεessi inek settings, ruḥ γer
+{{fullurl:{{ns:special}}:Watchlist/edit}}
+
+Tadhelt:
+{{fullurl:{{MediaWiki:helppage}}}}',
+
+# Delete/protect/revert
+'deletepage'              => 'Mḥu asebtar',
+'confirm'                 => 'Sentem',
+'excontent'               => "Ayen yella: '$1'",
+'excontentauthor'         => "Ayen yella: '$1' ('[[Special:Contributions/$2|$2]]' kan i yekken deg-s)",
+'exbeforeblank'           => "Ayen yella uqbal ma yettumḥa: '$1'",
+'exblank'                 => 'asebtar yella d ilem',
+'confirmdelete'           => 'Validi amḥay',
+'deletesub'               => '(Ad yemḥu "$1")',
+'historywarning'          => 'Aγtal: Asebtar i ara temḥuḍ yesεa amezruy:',
+'actioncomplete'          => 'Axdam yekfa',
+'deletedtext'             => '"$1" yettumḥa.
+Ẓer $2 i aγmis n yimḥayin imaynuten.',
+'deletedarticle'          => '"[[$1]]" yettumḥa',
+'dellogpage'              => 'Aγmis n umḥay',
+'dellogpagetext'          => 'Deg ukessar, d amuγ n yimḥayin imaynuten.',
+'deletionlog'             => 'Aγmis n umḥay',
+'reverted'                => 'Asuγal i tasiwel taqdimt',
+'deletecomment'           => 'Ayγer tebγiḍ ad temḥuḍ',
+'imagereverted'           => 'Asuγal i tasiwel taqdimt yekfa.',
+'cantrollback'            => 'Ur yezmir ara ad yessuγal; yella yiwen kan amseqdac iwumi ibeddel/yexleq asebtar-agi.',
+'editcomment'             => 'Agzul n ubeddel yella: "<i>$1</i>".', # only shown if there is an edit comment
+'revertpage'              => 'Yessuγal ibeddlen n [[Special:Contributions/$2|$2]] ([[User talk:$2|Meslay]]); yettubeddel γer tasiwelt taneggarut n [[User:$1|$1]]',
+'sessionfailure'          => 'Yella ugul akk d takmect inek;
+Axdam-agi yebṭel axaṭer waqila yella wemdan nniḍen i yeddem isem umseqdac inek.
+G leεnayek wekki γef taqeffalt "Back/Précédent" n browser/explorateur inek, umbeεd wekki γef "Actualiser/reload" akk ad tεerḍeḍ tikelt nniḍen.',
+'protectlogpage'          => 'Aγmis n wemḥay',
+'protectedarticle'        => '"[[$1]]" yettwaḥrez',
+'protectsub'              => '(Ad yeḥrez "$1")',
+'protect-default'         => '(ameslugen)',
+'protect-level-sysop'     => 'Inedbalen kan',
+'protect-summary-cascade' => 'acercur',
+'protect-expiring'        => 'yemmut deg $1 (UTC)',
+'restriction-type'        => 'Turagt',
+'minimum-size'            => 'Tiddi minimum (bytes/octets)',
+
+# Restrictions (nouns)
+'restriction-edit' => 'Beddel',
+'restriction-move' => 'Smimeḍ',
+
+# Undelete
+'viewdeletedpage'        => 'Ẓer isebtaren yettumḥan',
+'undeletecomment'        => 'Awennit:',
+'undelete-header'        => 'Ẓer [[Special:Log/delete|aγmis n umḥay]] i isebtaren ttumḥan tura.',
+'undelete-search-box'    => 'Nadi γef isebtaren yettumḥan',
+'undelete-search-prefix' => 'Mel isebtaren i yebdan s:',
+'undelete-search-submit' => 'Nadi',
+'undelete-no-results'    => 'Ur yufi ara ulaḥedd n wawalen i tnadiḍ γef isebtaren deg iγbaren.',
+
+# Namespace form on various pages
+'namespace' => 'Isem n taγult:',
+'invert'    => 'Snegdam ayen textareḍ',
+
+# Contributions
+'contributions' => 'Tikkin n umseqdac',
+'mycontris'     => 'Tikkin inu',
+'contribsub2'    => 'n $1 ($2)',
+'nocontribs'    => 'Ur yufi ara abddel i tebγiḍ.',
+'ucnote'        => 'Deg ukessar llan <b>$1</b> n yibeddlen ineggura deg <b>$2</b> n wussan ineggura.',
+'uclinks'       => 'Ẓer $1 n yibeddlen ineggura; ẓer $2 n wussan ineggura.',
+'uctop'         => ' (taneggarut)',
+
+'sp-contributions-newest'      => 'Tikkin tineggura',
+'sp-contributions-oldest'      => 'Tikkin timezwura',
+'sp-contributions-newer'       => '$1 ssabeq',
+'sp-contributions-older'       => '$1 imeḍfiren',
+'sp-contributions-newbies'     => 'Mel tikkin n yimseqdacen imaynuten kan',
+'sp-contributions-newbies-sub' => 'I yisem yimseqdacen imaynuten',
+'sp-contributions-blocklog'    => 'Aγmis n uεeṭṭil',
+'sp-contributions-search'      => 'Nadi i tikkin',
+'sp-contributions-username'    => 'Tansa IP neγ isem umseqdac:',
+'sp-contributions-submit'      => 'Nadi',
+
+'sp-newimages-showfrom' => 'Mel tugniwin timaynuten seg $1',
+
+# What links here
+'whatlinkshere'      => 'Ayen yewwi-d γer dagi',
+'notargettitle'      => 'Ulac nnican',
+'notargettext'       => 'Ur textareḍ ara asebtar d nnican neγ umseqdac d nnican.',
+'linklistsub'        => '(Amuγ n yizdayen)',
+'linkshere'          => "Isebtaren-agi sεan azday γer '''[[:$1]]''':",
+'nolinkshere'        => "Ulac asebtar i yesεan azday γer '''[[:$1]]'''.",
+'nolinkshere-ns'     => "Ulac asebtar i yesεan azday γer '''[[:$1]]''' deg n isem n taγult i textareḍ.",
+'isredirect'         => 'Asebtar usemmimeḍ',
+'istemplate'         => 'asekcam',
+'whatlinkshere-prev' => '{{PLURAL:$1|ssabeq|$1 ssabeq}}',
+'whatlinkshere-next' => '{{PLURAL:$1|ameḍfir|$1 imeḍfiren}}',
+
+# Block/unblock
+'ipaddress'                   => 'Tansa IP',
+'ipadressorusername'          => 'Tansa IP neγ isem umseqdac',
+'ipbreason'                   => 'Ayγer',
+'ipbotheroption'              => 'nniḍen',
+'badipaddress'                => 'Tansa IP mačči d ṣaḥiḥ',
+'ipblocklist-submit'          => 'Nadi',
+'contribslink'                => 'tikkin',
+'block-log-flags-anononly'    => 'Imseqdacen udrigen kan',
+'proxyblockreason'            => 'Tansa n IP inek teεkel axaṭer nettat "open proxy". G leεnayek, meslay akk d provider inek.',
+'proxyblocksuccess'           => 'D ayen.',
+'sorbsreason'                 => 'Tansa n IP inek teεkel axaṭer nettat "open proxy" deg DNSBL yettuseqdac da.',
+'sorbs_create_account_reason' => 'Tansa n IP inek teεkel axaṭer nettat "open proxy" deg DNSBL yettuseqdac da. Ur tezmireḍ ara ad txelqeḍ isem umseqdac',
+
+# Move page
+'movepage'                => 'Smimeḍ asebtar',
+'movepagetext'            => "Mi tedsseqdceḍ talγa deg ukessar ad ibddel isem n usebtar, yesmimeḍ akk
+umezruy-is γer isem amaynut.
+Azwel aqdim ad yuγal azady n wesmimeḍ γer azwel amaynut.
+Izdayen γer azwel aqdim ur ttubeddlen ara; ssenqd-iten
+u ssenqed izdayen n snat d tlata tikkwal.
+D kečč i yessefk a ten-yessenqed.
+
+Meεna, ma yella amagrad deg azwel amaynut neγ azday n wamsmimeḍ
+mebla amezruy, asebtar-inek '''ur''' yettusmimeḍ '''ara'''.
+Yernu, tzemreḍ ad tesmimeḍ asebtar γer isem-is aqdim ma tγelṭeḍ.",
+'movepagetalktext'        => "Asebtar \"Amyannan\" yettusmimeḍ ula d netta '''ma ulac:'''
+*Yella asebtar \"Amyannan\" deg isem amaynut, neγ
+*Trecmeḍ tankult deg ukessar.
+
+Lukan akka, yessefk ad t-tedmeḍ weḥdek.",
+'movearticle'             => 'Smimeḍ asebtar',
+'movenologin'             => 'Ur tekcimeḍ ara',
+'movenologintext'         => 'Yessefk ad tesεuḍ isem n umseqdac u [[Special:Userlogin|tkecmeḍ]]
+iwakken ad tesmimḍeḍ asebtar.',
+'newtitle'                => 'Ar azwel amaynut',
+'move-watch'              => 'Σass asebtar-agi',
+'movepagebtn'             => 'Smimeḍ asebtar',
+'pagemovedsub'            => 'Asemmimeḍ yekfa',
+'pagemovedtext'           => 'Asebtar "[[$1]]" yettwasmimeḍ ar "[[$2]]".',
+'articleexists'           => 'Yella yagi yisem am wagi, neγ 
+isem ayen textareḍ mačči d ṣaḥiḥ.
+Xtar yiwen nniḍen.',
+'talkexists'              => "'''Asemmimeḍ n usebtar yekfa, meεna asebtar umyannan ines ur yettusemmimeḍ ara axaṭer yella yagi yiwen s yisem kif-kif. G leεnayek, xdem-it weḥd-ek.'''",
+'movedto'                 => 'yettusmimeḍ ar',
+'movetalk'                => 'Smimeḍ asebtar umyannan (n umagrad-nni)',
+'talkpagemoved'           => 'Asebtar umyannan yettusmimeḍ daγen',
+'talkpagenotmoved'        => 'Asebtar umyannan (n umagrad-nni) <strong>ur</strong> yettusmimeḍ <strong>ara</strong>.',
+'1movedto2'               => '[[$1]] yettusmimeḍ ar [[$2]]',
+'1movedto2_redir'         => '[[$1]] yettusmimeḍ ar [[$2]] s redirect',
+'movelogpage'             => 'Aγmis n usemmimeḍ',
+'movelogpagetext'         => 'Akessar yella umuγ n yisebtaren yettusmimeḍen.',
+'movereason'              => 'Ayγer',
+'revertmove'              => 'Uγal ar tasiwelt ssabeq',
+'delete_and_move'         => 'Mḥu u smimeḍ',
+'delete_and_move_text'    => '==Amḥay i tebγiḍ==
+
+Anda tebγiḍ tesmimeḍ "[[$1]]" yella yagi. tebγiḍ ad temḥuḍ iwakken yeqqim-d wemkan i usmimeḍ?',
+'delete_and_move_confirm' => 'Ih, mḥu asebtar',
+'delete_and_move_reason'  => 'Mḥu iwakken yeqqim-d wemkan i usmimeḍ',
+'selfmove'                => 'Izwal amezwaru d uneggaru kif-kif; ur yezmir ara yesmimeḍ asebtar γur iman-is.',
+'immobile_namespace'      => 'Azwel n uγbalu neγ anda tebγiḍ tesmimeḍ d anaw aslig; ur yezmir ara yesmimeḍ isebtaren seg/γer isem n taγult-agi.',
+
+# Export
+'export'            => 'Ssufeγ isebtaren',
+'exportcuronly'     => 'Ssekcem tasiwelt n tura kan, mačči akk amezruy-is',
+'export-submit'     => 'Ssufeγ',
+'export-addcattext' => 'Rnu isebtaren seg taggayt:',
+'export-addcat'     => 'Rnu',
+
+# Namespace 8 related
+'allmessages'               => 'Izen n system',
+'allmessagesname'           => 'Isem',
+'allmessagesdefault'        => 'Aḍris ameslugen',
+'allmessagescurrent'        => 'Aḍris n tura',
+'allmessagestext'           => 'Wagi d amuγ n izen n system i yellan di isem n taγult.',
+'allmessagesnotsupportedUI' => 'Interface n tutlayt inek <b>$1</b> ulaci-tt sγur {{ns:special}}:Allmessages deg udeg-agi.',
+'allmessagesnotsupportedDB' => "'''{{ns:special}}:Allmessages''' ut yezmir ara ad yettuseqdac axaṭer '''\$wgUseDatabaseMessages''' yettwakkes.",
+'allmessagesfilter'         => 'Tastayt n yisem n izen:',
+'allmessagesmodified'       => 'Mel win yettubeddlen kan',
+
+# Thumbnails
+'thumbnail-more'  => 'Ssemγer',
+'missingimage'    => '<b>Tugna ulac-itt</b><br /><i>$1</i>',
+'filemissing'     => 'Afaylu ulac-it',
+'thumbnail_error' => 'Agul asmi yexleq tugna tamecṭuḥt: $1',
+
+# Special:Import
+'import'                     => 'Ssekcem isebtaren',
+'importinterwiki'            => 'Assekcem n transwiki',
+'import-interwiki-history'   => 'Xdem alsaru n akk tisiwal umezruy n usebtar-agi',
+'import-interwiki-submit'    => 'Ssekcem',
+'import-interwiki-namespace' => 'Azen isebtaren ar isem n taγult:',
+'importstart'                => 'Asekcem n isebtaren...',
+'import-revision-count'      => '$1 {{PLURAL:$1|tasiwelt|tisiwal}}',
+'importnopages'              => 'Ulac isebtaren iwekken ad ttussekcmen.',
+'importfailed'               => 'Asekcem yexser: $1',
+'importunknownsource'        => 'Anaw n uγbalu n usekcem mačči d mechur',
+'importcantopen'             => 'Ur yezmir ara ad yexdem asekcem n ufaylu',
+'importbadinterwiki'         => 'Azday n interwiki ur yelhi',
+'importnotext'               => 'D ilem neγ ulac aḍris',
+'importsuccess'              => 'Asekcem yekfa!',
+'importhistoryconflict'      => 'Amennuγ ger tisiwal n umezruy (waqila asebtar-agi yettwazen yagi)',
+'importnosources'            => 'Asekcam n transwiki ur yexdim ara u amezruy n usekcam yettwakkes.',
+'importnofile'               => 'ulaḥedd afaylu usekcam ur yettwazen.',
+'importuploaderror'          => 'Ur yezmir ara yazen ufaylu n usekcam; waqila ufaylu meqqer aṭṭas.',
+
+# Import log
+'importlogpage'                    => 'Aγmis n usekcam',
+'importlogpagetext'                => 'Adeblan n usekcam n isebtaren i yesεan amezruy ubeddel seg wiki tiyaḍ.',
+'import-logentry-upload'           => 'Yessekcem [[$1]] s usekcam n ufaylu',
+'import-logentry-upload-detail'    => '$1 tasiwelt(tisiwal)',
+'import-logentry-interwiki'        => '$1 s transwiki',
+'import-logentry-interwiki-detail' => '$1 tasiwelt(tisiwal) seg $2',
+
+# Tooltip help for the actions
+'tooltip-pt-userpage'             => 'Asebtar n umseqdac inu',
+'tooltip-pt-anonuserpage'         => 'Asebtar umseqdac n IP wukud tekkiḍ',
+'tooltip-pt-mytalk'               => 'Asebtar n umyannan inu',
+'tooltip-pt-anontalk'             => 'Amyannan γef yibeddlen n tansa ip-yagi',
+'tooltip-pt-preferences'          => 'Isemyifiyen inu',
+'tooltip-pt-watchlist'            => 'Amuγ uεessi n yisebtaren i ttεessiγ asmi ttubeddlen',
+'tooltip-pt-mycontris'            => 'Amuγ n tikkin inu',
+'tooltip-pt-login'                => 'Lukan tkecmeḍ xir, meεna am tebγiḍ.',
+'tooltip-pt-anonlogin'            => 'Lukan tkecmeḍ xir, meεna am tebγiḍ.',
+'tooltip-pt-logout'               => 'Ffeγ',
+'tooltip-ca-talk'                 => 'Amyannan γef ayen yella deg usebtar',
+'tooltip-ca-edit'                 => 'Tzemreḍ ad tbeddleḍ asebtar-agi. Sseqdec pre-timeẓriwt qbel.',
+'tooltip-ca-addsection'           => 'Rnu awennit i amyannan-agi.',
+'tooltip-ca-viewsource'           => 'Asebtar-agi yettwaḥrez. Tzemreḍ ad twaliḍ aγbalu-ines.',
+'tooltip-ca-history'              => 'Tisiwal ssabeq n usebtar-agi.',
+'tooltip-ca-protect'              => 'Ḥrez asebtar-agi',
+'tooltip-ca-delete'               => 'Mḥu asebtar-agi',
+'tooltip-ca-undelete'             => 'Err akk ibeddlen n usebtar-agi i yellan uqbel ma yettwamḥu usebtar',
+'tooltip-ca-move'                 => 'Smimeḍ asebtar-agi',
+'tooltip-ca-watch'                => 'Rnu asebtar-agi i umuγ uεessi inek',
+'tooltip-ca-unwatch'              => 'Kkes asebtar-agi seg umuγ uεessi inek',
+'tooltip-search'                  => 'Nadi {{SITENAME}}',
+'tooltip-p-logo'                  => 'Asebtar amenzawi',
+'tooltip-n-mainpage'              => 'Ẓer asebtar amenzawi',
+'tooltip-n-portal'                => 'Γef usenfar, ayen tzemrḍ ad txedmeḍ, anda tafeḍ tiγawsiwin',
+'tooltip-n-currentevents'         => 'Af ayen yeḍran tura',
+'tooltip-n-recentchanges'         => 'Amuγ n yibeddlen imaynuten deg wiki.',
+'tooltip-n-randompage'            => 'Ẓer asebtar menwala',
+'tooltip-n-help'                  => 'Amkan ideg tafeḍ.',
+'tooltip-n-sitesupport'           => 'Ellil-aγ',
+'tooltip-t-whatlinkshere'         => 'Amuγ n akk isebtaren i yesεan azday ar dagi',
+'tooltip-t-recentchangeslinked'   => 'Ibeddlen imaynuten deg yisebtaren myezdin seg asebtar-agi',
+'tooltip-feed-rss'                => 'RSS feed n usebtar-agi',
+'tooltip-feed-atom'               => 'Atom feed n usebtar-agi',
+'tooltip-t-contributions'         => 'Ẓer amuγ n tikkin n umseqdac-agi',
+'tooltip-t-emailuser'             => 'Azen e-mail i umseqdac-agi',
+'tooltip-t-upload'                => 'Azen tugna neγ afaylu nniḍen',
+'tooltip-t-specialpages'          => 'Amuγ n akk isebtaren usligen',
+'tooltip-ca-nstab-main'           => 'Ẓer ayen yellan deg usebtar',
+'tooltip-ca-nstab-user'           => 'Ẓer asebtar umseqdac',
+'tooltip-ca-nstab-media'          => 'Ẓer asebtar n media',
+'tooltip-ca-nstab-special'        => 'Wagi asebtar uslig, ur tezmireḍ ara a t-tbeddleḍ',
+'tooltip-ca-nstab-project'        => 'Ẓer asebtar usenfar',
+'tooltip-ca-nstab-image'          => 'Ẓer asebtar n tugna',
+'tooltip-ca-nstab-mediawiki'      => 'Ẓer izen n system',
+'tooltip-ca-nstab-template'       => 'Ẓer talγa',
+'tooltip-ca-nstab-help'           => 'Ẓer asebtar n tallat',
+'tooltip-ca-nstab-category'       => 'Ẓer asebtar n taggayt',
+'tooltip-minoredit'               => 'Wagi d abeddel afessas',
+'tooltip-save'                    => 'Smekti ibeddlen inek',
+'tooltip-preview'                 => 'G leεnaya-k, pre-ẓer ibeddlen inek uqbel ma tesmektiḍ!',
+'tooltip-diff'                    => 'Mel ayen tbeddleḍ deg uḍris.',
+'tooltip-compareselectedversions' => 'Ẓer amgerrad ger snat tisiwlini (i textareḍ) n usebtar-agi.',
+'tooltip-watch'                   => 'Rnu asebtar-agi i umuγ uεessi inu',
+'tooltip-recreate'                => 'Σiwed xleq asebtar γas akken yettumḥu',
+
+# Attribution
+'anonymous'        => 'Amseqdac udrig (Imseqdacen udrigen) n {{SITENAME}}',
+'siteuser'         => '{{SITENAME}} amseqdac $1',
+'lastmodifiedatby' => 'Tikelt taneggarut asmi yettubeddel asebtar-agi $2, $1 sγur $3.', # $1 date, $2 time, $3 user
+'and'              => 'u',
+'othercontribs'    => 'Tikkin n umseqdac-agi.',
+'others'           => 'wiyaḍ',
+'siteusers'        => '{{SITENAME}} amseqdac(imseqdacen) $1',
+'creditspage'      => 'Win ixedmen asebtar',
+'nocredits'        => 'Ulac talγut γef wayen ixedmen asebtar-agi.',
+
+# Spam protection
+'spamprotectiontitle'  => 'Aḥraz amgel "Spam"',
+'spamprotectiontext'   => "Asebtar i tebγiḍ ad tesmektiḍ iεekkel-it ''aḥraz amgel \"Spam\"''. Waqila yella azday aberrani.",
+'spamprotectionmatch'  => 'Aḍris-agi ur iεeğ-it \'\'"aḥraz amgel "Spam"\'\': $1',
+'subcategorycount'     => '{{PLURAL:$1|Tella yiwen taggayt tazellumt|Llant $1 taggayin tizellumin}} deg taggayt-agi.',
+'categoryarticlecount' => '{{PLURAL:$1|Yella yiwen amagrad|Llan $1 imagraden}} deg taggayt-agi.',
+'category-media-count' => '{{PLURAL:$1|Yella yiwen afaylu|Llan $1 ifayluwen}} deg taggayt-agi.',
+'spam_reverting'       => 'Asuγal i tasiwel taneggarut i ur tesεi ara izdayen γer $1',
+'spam_blanking'        => 'Akk tisiwal sεan izdayen γer $1, ad yemḥu',
+
+# Info page
+'infosubtitle'   => 'Talγut i usebtar',
+'numedits'       => 'Geddac n yibeddlen (amagrad): $1',
+'numtalkedits'   => 'Geddac n yibeddlen (asebtar n umyannan): $1',
+'numwatchers'    => 'Geddac n yiεessasen: $1',
+'numauthors'     => 'Geddac n yimsedac i yuran (amagrad): $1',
+'numtalkauthors' => 'Geddac n yimsedac i yuran (asebtar umyennan): $1',
+
+# Math options
+'mw_math_png'    => 'Daymen err-it PNG',
+'mw_math_simple' => 'HTML ma yella amraḍi, ma ulac PNG',
+'mw_math_html'   => 'HTML ma yezmer neγ PNG ma ulac',
+'mw_math_source' => 'Eğğ-it s TeX (i browsers/explorateurs n weḍris)',
+'mw_math_modern' => 'Mliḥ i browsers/explorateurs imaynuten',
+'mw_math_mathml' => 'MathML ma yezmer (experimental)',
+
+# Patrolling
+'markaspatrolleddiff'                 => 'Rcem "yettwassenqden"',
+'markaspatrolledtext'                 => 'Rcem amagrad-agi "yettwassenqden"',
+'markedaspatrolled'                   => 'Rcem belli yettwasenqed',
+'markedaspatrolledtext'               => 'Tasiwelt i textareḍ tettwassenqed.',
+'rcpatroldisabled'                    => 'Yettwakkes asenqad n ibeddlen imaynuten',
+'rcpatroldisabledtext'                => 'Yettwakkes asenqad n ibeddlen imaynuten',
+'markedaspatrollederror'              => 'Ur yezmir ara ad yercem "yettwassenqden"',
+'markedaspatrollederrortext'          => 'Yessefk ad textareḍ tasiwelt akken a tt-trecmeḍ "yettwassenqden".',
+'markedaspatrollederror-noautopatrol' => 'Ur tezmireḍ ara ad trecmeḍ ibeddilen inek "yettwassenqden".',
+
+# Patrol log
+'patrol-log-page' => 'Aγmis n wasenqad',
+'patrol-log-line' => 'Yercem tasiwelt $1 n $2 "yettwassenqden" $3',
+'patrol-log-auto' => '(otomatik)',
+
+# Image deletion
+'deletedrevision' => 'Tasiwelt taqdimt $1 tettymḥa.',
+
+# Browsing diffs
+'previousdiff' => '← Amgerrad ssabeq',
+'nextdiff'     => 'amgerrad ameḍfir →',
+
+# Media information
+'mediawarning'         => "'''Aγtal''': Waqila afaylu-yagi yesεa angal aḥraymi, lukan a t-tesseqdceḍ yezmer ad ixesser aselkim inek.<hr />",
+'imagemaxsize'         => 'Ḥedded tiddi n tugniwin deg yiglamen n tugniwim i:',
+'thumbsize'            => 'Tiddi n tugna tamecṭuḥt:',
+'file-info'            => '(tiddi n ufaylu: $1, anaw n MIME: $2)',
+'file-info-size'       => '($1 × $2 pixel, tiddi n ufaylu: $3, anaw n MIME: $4)',
+'file-nohires'         => '<small>Ur tella ara resolution i tameqqrant fell-as.</small>',
+'file-svg'             => '<small>Wagi d tugna s lvecteur iwumi truḥ ara taγarfa ines. Tiddi n ubuḍ: $1 × $2 pixels.</small>',
+'show-big-image'       => 'Resolution tameqqrant',
+'show-big-image-thumb' => '<small>Tiddi n pre-timeẓriwt-agi: $1 × $2 pixels</small>',
+
+'newimages' => 'Amuγ n ifayluwen imaynuten',
+'noimages'  => 'Tugna ulac-itt.',
+
+'passwordtooshort' => 'Awal n tbaḍnit inek d amecṭuḥ bezzaf. Yessefk ad yesεu $1 isekkilen neγ kter.',
+
+# External editor support
+'edit-externally'      => 'Beddel afaylu-yagi s usnas aberrani.',
+'edit-externally-help' => 'Ẓer [http://meta.wikimedia.org/wiki/Help:External_editors taknut] iwakken tessneḍ kter.',
+
+# 'all' in various places, this might be different for inflected languages
+'recentchangesall' => 'akk',
+'imagelistall'     => 'akk',
+'watchlistall1'    => 'akk',
+'watchlistall2'    => 'akk',
+'namespacesall'    => 'akk',
+
+# E-mail address confirmation
+'confirmemail'            => 'Sentem tansa n e-mail',
+'confirmemail_noemail'    => 'Ur tesεiḍ ara tansa n email ṣaḥiḥ deg [[Special:Preferences|isemyifiyen umseqdac]] inek.',
+'confirmemail_text'       => 'Feg wiki-yagi, yessefk ad tvalidiḍ tansa n email inek
+qbel ma tesseqdceḍ iḍaγaren n email. Tella taqeffalt d akessar, wekki fell-as
+iwakken yettwazen ungal n usentem semail. Email-nni yesεa azady, ldi-t.',
+'confirmemail_pending'    => '<div class="error">
+Yettwazen-ak yagi ungal n usentem; lukan txelqeḍ isem umseqdac tura kan,
+ahat yessefk ad tegguniḍ cwiṭ qbel ma teεreḍ ad testeqsiḍ γef ungal amaynut.
+</div>',
+'confirmemail_send'       => 'Azen-iyi-d angal n usentem s e-mail iwakken ad snetmeγ.',
+'confirmemail_sent'       => 'E-mail yettwazen iwakken ad tsentmeḍ.',
+'confirmemail_oncreate'   => 'Angal n usentem yettwazen ar tansa n e-mail inek.
+Yessefk tesseqdceḍ angal-agi iwakken ad tkecmeḍ, meεna yessefk ad t-tefkeḍ
+iwakken ad xedmen yiḍaγaren n email deg wiki-yagi.',
+'confirmemail_sendfailed' => 'Ur yezmir ara ad yazen asentem n email. Ssenqed tansa n email inek.
+
+Email yuγal-d: $1',
+'confirmemail_invalid'    => 'Angal n usentem mačči ṣaḥiḥ. Waqila yemmut.',
+'confirmemail_needlogin'  => 'Yessefk $1 iwakken tesnetmeḍ tansa n email inek.',
+'confirmemail_success'    => 'Asentem n tansa n email inek yekfa. Tura tzemreḍ ad tkecmeḍ.',
+'confirmemail_loggedin'   => 'Asentem n tansa n email inek yekfa tura.',
+'confirmemail_error'      => 'Yella ugur s usmekti n usentem inek.',
+'confirmemail_subject'    => 'Asentem n tansa n email seg {{SITENAME}}',
+'confirmemail_body'       => 'Amdan, waqila d kečč, seg tansa IP $1, yexleq
+isem umseqdac "$2" s tansa n e-mail deg {{SITENAME}}.
+
+Iwakken tbeyyneḍ belli isem umseqdac inek u terreḍ
+iḍaγaren n email ad xdemen deg {{SITENAME}}, ldi azday agi:
+
+$3
+
+Lukan mačči d *kečč*, ur teḍfireḍ ara azday. Angal n usentem-agi
+ad yemmut ass $4.',
+
+# Inputbox extension, may be useful in other contexts as well
+'tryexact'       => 'Nadi γef uzwel kif-kif',
+'searchfulltext' => 'Nadi aḍris ettmam',
+'createarticle'  => 'Xleq amagrad',
+
+# Scary transclusion
+'scarytranscludedisabled' => '[Yettwakkes assekcam n yisebtaren seg wiki wiyaḍ]',
+'scarytranscludefailed'   => '[Ur yezmir ara yewwi-d talγa n $1; suref-aγ]',
+'scarytranscludetoolong'  => '[URL d aγezfan bezzaf; suref-aγ]',
+
+# Trackbacks
+'trackbackbox'      => '<div id="mw_trackbacks">
+Izdayen n zdeffir n umagrad-agi:<br />
+$1
+</div>',
+'trackbackremove'   => ' ([$1 Mḥu])',
+'trackbacklink'     => 'Azday n zdeffir',
+'trackbackdeleteok' => 'Azday n zdeffir yettumḥa.',
+
+# Delete conflict
+'deletedwhileediting' => 'Aγtal: Asebtar-agi yettumḥa qbel ma tebdiḍ ad tt-tbeddleḍ!',
+'confirmrecreate'     => "Amseqdac [[User:$1|$1]] ([[User talk:$1|Meslay]]) yemḥu asebtar-agi beεda ma tebdiḍ abeddel axaṭer:
+: ''$2''
+G leεnaya-k sentem belli ṣaḥḥ tebγiḍ ad tεiwedeḍ axlaq n usebtar-agi.",
+'recreate'            => 'Σiwed xleq',
+
+# HTML dump
+'redirectingto' => 'Asemmimeḍ ar [[$1]]...',
+
+# action=purge
+'confirm_purge' => 'Mḥu lkac n usebtar-agi?
+
+$1',
+
+'youhavenewmessagesmulti' => 'Tesεiḍ izen amaynut deg $1',
+
+'searchcontaining' => "Inadi isebtaren i isεan ''$1''.",
+'searchnamed'      => "Nadi γef imagraden ttusemman ''$1''.",
+'articletitles'    => "Imagraden i yebdan s ''$1''",
+'hideresults'      => 'Ffer igmad',
+
+# DISPLAYTITLE
+'displaytitle' => '(Xdem azday ar asebtar-agi akka [[$1]])',
+
+'loginlanguagelabel' => 'Tutlayt: $1',
+
+# Multipage image navigation
+'imgmultipageprev'   => '&larr; asebtar ssabeq',
+'imgmultipagenext'   => 'asebtar ameḍfir &rarr;',
+'imgmultigo'         => 'Ruḥ!',
+'imgmultigotopre'    => 'Ruḥ s asebtar',
+'imgmultiparseerror' => 'Afaylu n tugna yexser, ihi {{SITENAME}} ur yezmir ara ad yaf amuγ n yisebtaren.',
+
+# Table pager
+'ascending_abbrev'         => 'asawen',
+'descending_abbrev'        => 'akessar',
+'table_pager_next'         => 'Asebtar ameḍfir',
+'table_pager_prev'         => 'Asebtar ssabeq',
+'table_pager_first'        => 'Asebtar amezwaru',
+'table_pager_last'         => 'Asebtar aneggaru',
+'table_pager_limit'        => 'Mel $1 iferdas di mkul asebtar',
+'table_pager_limit_submit' => 'Ruḥ',
+'table_pager_empty'        => 'Ulac igmad',
+
+# Auto-summaries
+'autosumm-blank'   => 'Yekkes akk aḍris seg usebtar',
+'autosumm-replace' => "Ibeddel asebtar s '$1'",
+'autoredircomment' => 'Asemmimeḍ ar [[$1]]', # This should be changed to the new naming convention, but existed beforehand
+'autosumm-new'     => 'Asebtar amaynut: $1',
+
+# Size units
+'size-bytes'     => '$1 B/O',
+'size-kilobytes' => '$1 KB/KO',
+'size-megabytes' => '$1 MB/MO',
+'size-gigabytes' => '$1 GB/GO',
+
+# Live preview
+'livepreview-loading' => 'Assisi…',
+'livepreview-ready'   => 'Assisi… D ayen!',
+'livepreview-failed'  => 'Pre-timeẓriwt tağiḥbuṭ texser!
+Σreḍ pre-timeẓriwt tamagnut.',
+'livepreview-error'   => 'Pre-timeẓriwt tağiḥbuṭ texser: $1 "$2"
+Σreḍ pre-timeẓriwt tamagnut.',
+
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesKg.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesKg.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesKg.php	(revision 1280)
@@ -0,0 +1,98 @@
+<?php
+/** Kongo (Kikongo)
+ *
+ * @addtogroup Language
+ */
+
+$messages = array(
+
+# dates
+'sunday'                => 'Lumingu',
+'monday'                => 'Kimosi',
+'tuesday'               => 'Kizole',
+'wednesday'             => 'Kitatu',
+'thursday'              => 'Kiya',
+'friday'                => 'Kitanu',
+'saturday'              => 'Sabala',
+
+# months
+'january'               => 'ngonda ya ntete',
+'february'              => 'ngonda ya zole',
+'march'                 => 'ngonda ya tatu',
+'april'                 => 'ngonda ya iya',
+'may_long'              => 'ngonda ya tanu',
+'june'                  => 'ngonda ya sambanu',
+'july'                  => 'ngonda ya nsambwadi',
+'august'                => 'ngonda ya nana',
+'september'             => 'ngonda ya uvwa',
+'october'               => 'ngonda ya kumi',
+'november'              => 'ngonda ya kumi na mosi',
+'december'              => 'ngonda ya kumi na zole',
+
+# Bits of text used by many pages:
+'categories'            => 'Bakalasi',
+'pagecategories'        => '{{PLURAL:$1|Kalasi|Bakalasi}}',
+'category_header'       => 'Mikanda na kalasi "$1"',
+'mainpage'              => 'Lukaya ya mfumu',
+
+'article'               => 'Pagina contenta continens',
+'help'                  => 'Nsadisa',
+'mytalk'                => 'Disolo ya munu',
+'currentevents'         => 'Mambu ya mpa',
+'currentevents-url'     => 'Mambu ya mpa',
+'search'                => 'Sosa',
+'searchbutton'          => 'Sosa',
+'searcharticle'         => 'Kwenda',
+'history'               => 'Bampaluka ya lukaya',
+'history_short'         => 'Bampaluka',
+'edit'                  => 'Sonika',
+'talk'                  => 'Disolo',
+'toolbox'               => 'Bisadilu',
+'otherlanguages'        => 'Bandinga ya nkaka',
+'redirectedfrom'        => '(Balulama tuka $1)',
+'retrievedfrom'         => 'Receptum de "$1"',
+
+# nstab
+'nstab-main'            => 'Mukanda',
+'nstab-category'        => 'Kalasi',
+
+
+'yourlanguage'          => 'Ndinga:',
+
+# Login and logout pages
+'loginlanguagelabel'    => 'Ndinga: $1',
+'logout'                => 'Basika',
+'userlogout'            => 'Basika',
+
+'histfirst'             => 'Ya ntete',
+'histlast'              => 'Ya nsuka',
+
+'prevn'                 => 'biyita $1',
+'nextn'                 => 'bilandi $1',
+'viewprevnext'          => 'Mona ($1) ($2) ($3).',
+
+'powersearch'           => 'Sosa',
+
+'mypreferences'         => 'Konte ya munu',
+
+# Recentchanges
+'recentchanges'         => 'Bampaluka ya mpa',
+
+
+'ncategories'           => '{{PLURAL:$1|kalasi|bakalasi}} $1',
+
+'randompage'            => 'Lukaya na kintulumukini',
+'mycontris'             => 'Makabu ya munu',
+'whatlinkshere'         => 'Balukaya ke songa awa',
+
+'categoryarticlecount'  => '{{PLURAL:$1|Mukanda mosi|Mikanda $1 }} ni na kalasi yayi.', //
+
+# Table pager
+'table_pager_first'     => 'Lukaya ya ntete',
+'table_pager_last'      => 'Lukaya ya nsuka',
+'table_pager_next'      => 'Lukaya ya kulanda',
+'table_pager_prev'      => 'Lukaya ya kuyita',
+
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesKk.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesKk.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesKk.php	(revision 1280)
@@ -0,0 +1,12 @@
+<?php
+/**
+  * Kazakh (Қазақша)
+  *
+  * @addtogroup Language
+  */
+
+$fallback = 'kk-kz';
+
+$linkTrail = '/^([a-zäçéğıïñöşüýа-яёәғіқңөұүһʺʹ“»]+)(.*)$/sDu';
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesKk_cn.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesKk_cn.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesKk_cn.php	(revision 1280)
@@ -0,0 +1,2585 @@
+<?php
+/**
+ * Kazakh (قازاقشا)
+ *
+ * @addtogroup Language
+ *
+ */
+
+$fallback = 'kk-kz';
+$rtl = true;
+
+$separatorTransformTable = array(
+	',' => "\xc2\xa0",
+	'.' => ',',
+);
+$defaultUserOptionOverrides = array(
+	# Swap sidebar to right side by default
+	'quickbar' => 2,
+	# Underlines seriously harm legibility. Force off:
+	'underline' => 0,
+);
+
+$extraUserToggles = array(
+	'nolangconversion'
+);
+
+$fallback8bitEncoding = 'windows-1256';
+
+$linkPrefixExtension = true;
+
+$namespaceNames = array(
+	NS_MEDIA            => 'تاسپا',
+	NS_SPECIAL          => 'ارنايى',
+	NS_MAIN	            => '',
+	NS_TALK	            => 'تالقىلاۋ',
+	NS_USER             => 'قاتىسۋشى',
+	NS_USER_TALK        => 'قاتىسۋشى_تالقىلاۋى',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK     => '$1_تالقىلاۋى',
+	NS_IMAGE            => 'سۋرەت',
+	NS_IMAGE_TALK       => 'سۋرەت_تالقىلاۋى',
+	NS_MEDIAWIKI        => 'مەدياۋيكي',
+	NS_MEDIAWIKI_TALK   => 'مەدياۋيكي_تالقىلاۋى',
+	NS_TEMPLATE         => 'ٷلگٸ',
+	NS_TEMPLATE_TALK    => 'ٷلگٸ_تالقىلاۋى',
+	NS_HELP             => 'انىقتاما',
+	NS_HELP_TALK        => 'انىقتاما_تالقىلاۋى',
+	NS_CATEGORY         => 'سانات',
+	NS_CATEGORY_TALK    => 'سانات_تالقىلاۋى'
+);
+
+$namespaceAliases = array(
+	# Aliases to renamed kk-cn namespaces
+	'ٴۇلگٴى'              => NS_TEMPLATE,
+	'ٴۇلگٴى_تالقىلاۋى'    => NS_TEMPLATE_TALK,
+	# Aliases to kk-kz namespaces
+	'Таспа'               => NS_MEDIA,
+	'Арнайы'              => NS_SPECIAL,
+	'Талқылау'            => NS_TALK,
+	'Қатысушы'            => NS_USER,
+	'Қатысушы_талқылауы'  => NS_USER_TALK,
+	'$1_талқылауы'        => NS_PROJECT_TALK,
+	'Сурет'               => NS_IMAGE,
+	'Сурет_талқылауы'     => NS_IMAGE_TALK,
+	'МедиаУики'           => NS_MEDIAWIKI,
+	'МедиаУики_талқылауы' => NS_MEDIAWIKI_TALK,
+	'Үлгі'                => NS_TEMPLATE,
+	'Үлгі_талқылауы'      => NS_TEMPLATE_TALK,
+	'Анықтама'            => NS_HELP,
+	'Анықтама_талқылауы'  => NS_HELP_TALK,
+	'Санат'               => NS_CATEGORY,
+	'Санат_талқылауы'     => NS_CATEGORY_TALK,
+	# Aliases to kk-tr namespaces
+	'Taspa'               => NS_MEDIA,
+	'Arnaýı'              => NS_SPECIAL,
+	'Talqılaw'            => NS_TALK,
+	'Qatıswşı'            => NS_USER,
+	'Qatıswşı_talqılawı'  => NS_USER_TALK,
+	'$1_talqılawı'        => NS_PROJECT_TALK,
+	'Swret'               => NS_IMAGE,
+	'Swret_talqılawı'     => NS_IMAGE_TALK,
+	'MedïaWïkï'           => NS_MEDIAWIKI,
+	'MedïaWïkï_talqılawı' => NS_MEDIAWIKI_TALK,
+	'Ülgi'                => NS_TEMPLATE,
+	'Ülgi_talqılawı'      => NS_TEMPLATE_TALK,
+	'Anıqtama'            => NS_HELP,
+	'Anıqtama_talqılawı'  => NS_HELP_TALK,
+	'Sanat'               => NS_CATEGORY,
+	'Sanat_talqılawı'     => NS_CATEGORY_TALK,
+
+);
+
+$skinNames = array(
+	'standard'    => 'داعدىلى',
+	'nostalgia'   => 'اڭساۋ',
+	'cologneblue' => 'كٶلن زەڭگٸرلٸگٸ',
+	'davinci'     => 'دا ۆينچي',
+	'mono'        => 'دارا',
+	'monobook'    => 'دارا كٸتاپ',
+	'myskin'      => 'ٶز مٵنەرٸم',
+	'chick'       => 'بالاپان',
+	'simple'      => 'كٵدٸمگٸ'
+);
+
+$datePreferences = array(
+	'default',
+	'mdy',
+	'dmy',
+	'ymd',
+	'ISO 8601',
+);
+
+$defaultDateFormat = 'ymd';
+
+$datePreferenceMigrationMap = array(
+	'default',
+	'mdy',
+	'dmy',
+	'ymd'
+);
+
+$dateFormats = array(
+	'mdy time' => 'H:i',
+	'mdy date' => 'xg j, Y',
+	'mdy both' => 'H:i, xg j, Y',
+
+	'dmy time' => 'H:i',
+	'dmy date' => 'j F, Y',
+	'dmy both' => 'H:i, j F, Y',
+
+	'ymd time' => 'H:i',
+	'ymd date' => 'Y "ج." xg j',
+	'ymd both' => 'H:i, Y "ج." xg j',
+
+	'ISO 8601 time' => 'xnH:xni:xns',
+	'ISO 8601 date' => 'xnY-xnm-xnd',
+	'ISO 8601 both' => 'xnY-xnm-xnd"T"xnH:xni:xns',
+);
+
+/**
+ * Magic words
+ * Customisable syntax for wikitext and elsewhere
+ *
+ * Note to translators:
+ *   Please include the English words as synonyms.  This allows people
+ *   from other wikis to contribute more easily.
+ *   Please don't remove deprecated values, them should be keeped for backward compatibility.
+ *
+ * This array can be modified at runtime with the LanguageGetMagic hook
+ */
+$magicWords = array(
+#   ID                                 CASE  SYNONYMS
+	'redirect'               => array( 0,    '#ايداۋ', '#REDIRECT' ),
+	'notoc'                  => array( 0,    '__مازمۇنسىز__', '__مسىز__', '__NOTOC__' ),
+	'nogallery'              => array( 0,    '__قويماسىز__', '__قسىز__', '__NOGALLERY__' ),
+	'forcetoc'               => array( 0,    '__مازمۇنداتقىزۋ__', '__مقىزۋ__', '__FORCETOC__' ),
+	'toc'                    => array( 0,    '__مازمۇنى__', '__مزمن__', '__TOC__' ),
+	'noeditsection'          => array( 0,    '__بٶلٸمٶندەتكٸزبەۋ__', '__NOEDITSECTION__' ),
+	'start'                  => array( 0,    '__باستاۋ__', '__START__' ),
+	'currentmonth'           => array( 1,    'اعىمداعىاي', 'CURRENTMONTH' ),
+	'currentmonthname'       => array( 1,    'اعىمداعىاياتاۋى', 'CURRENTMONTHNAME' ),
+	'currentmonthnamegen'    => array( 1,    'اعىمداعىايٸلٸكاتاۋى', 'CURRENTMONTHNAMEGEN' ),
+	'currentmonthabbrev'     => array( 1,    'اعىمداعىايجيىر', 'اعىمداعىايقىسقا', 'CURRENTMONTHABBREV' ),
+	'currentday'             => array( 1,    'اعىمداعىكٷن', 'CURRENTDAY' ),
+	'currentday2'            => array( 1,    'اعىمداعىكٷن2', 'CURRENTDAY2' ),
+	'currentdayname'         => array( 1,    'اعىمداعىكٷناتاۋى', 'CURRENTDAYNAME' ),
+	'currentyear'            => array( 1,    'اعىمداعىجىل', 'CURRENTYEAR' ),
+	'currenttime'            => array( 1,    'اعىمداعىۋاقىت', 'CURRENTTIME' ),
+	'currenthour'            => array( 1,    'اعىمداعىساعات', 'CURRENTHOUR' ),
+	'localmonth'             => array( 1,    'جەرگٸلٸكتٸاي', 'LOCALMONTH' ),
+	'localmonthname'         => array( 1,    'جەرگٸلٸكتٸاياتاۋى', 'LOCALMONTHNAME' ),
+	'localmonthnamegen'      => array( 1,    'جەرگٸلٸكتٸايٸلٸكاتاۋى', 'LOCALMONTHNAMEGEN' ),
+	'localmonthabbrev'       => array( 1,    'جەرگٸلٸكتٸايجيىر', 'جەرگٸلٸكتٸايقىسقا', 'LOCALMONTHABBREV' ),
+	'localday'               => array( 1,    'جەرگٸلٸكتٸكٷن', 'LOCALDAY' ),
+	'localday2'              => array( 1,    'جەرگٸلٸكتٸكٷن2', 'LOCALDAY2'  ),
+	'localdayname'           => array( 1,    'جەرگٸلٸكتٸكٷناتاۋى', 'LOCALDAYNAME' ),
+	'localyear'              => array( 1,    'جەرگٸلٸكتٸجىل', 'LOCALYEAR' ),
+	'localtime'              => array( 1,    'جەرگٸلٸكتٸۋاقىت', 'LOCALTIME' ),
+	'localhour'              => array( 1,    'جەرگٸلٸكتٸساعات', 'LOCALHOUR' ),
+	'numberofpages'          => array( 1,    'بەتسانى', 'NUMBEROFPAGES' ),
+	'numberofarticles'       => array( 1,    'ماقالاسانى', 'NUMBEROFARTICLES' ),
+	'numberoffiles'          => array( 1,    'فايلسانى', 'NUMBEROFFILES' ),
+	'numberofusers'          => array( 1,    'قاتىسۋشىسانى', 'NUMBEROFUSERS' ),
+	'numberofedits'          => array( 1,    'تٷزەتۋسانى', 'NUMBEROFEDITS' ),
+	'pagename'               => array( 1,    'بەتاتاۋى', 'PAGENAME' ),
+	'pagenamee'              => array( 1,    'بەتاتاۋى2', 'PAGENAMEE' ),
+	'namespace'              => array( 1,    'ەسٸماياسى', 'NAMESPACE' ),
+	'namespacee'             => array( 1,    'ەسٸماياسى2', 'NAMESPACEE' ),
+	'talkspace'              => array( 1,    'تالقىلاۋاياسى', 'TALKSPACE' ),
+	'talkspacee'             => array( 1,    'تالقىلاۋاياسى2', 'TALKSPACEE' ),
+	'subjectspace'           => array( 1,    'تاقىرىپبەتٸ', 'ماقالابەتٸ', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+	'subjectspacee'          => array( 1,    'تاقىرىپبەتٸ2', 'ماقالابەتٸ2', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+	'fullpagename'           => array( 1,    'تولىقبەتاتاۋى', 'FULLPAGENAME' ),
+	'fullpagenamee'          => array( 1,    'تولىقبەتاتاۋى2', 'FULLPAGENAMEE' ),
+	'subpagename'            => array( 1,    'استىڭعىبەتاتاۋى', 'SUBPAGENAME' ),
+	'subpagenamee'           => array( 1,    'استىڭعىبەتاتاۋى2', 'SUBPAGENAMEE' ),
+	'basepagename'           => array( 1,    'نەگٸزگٸبەتاتاۋى', 'BASEPAGENAME' ),
+	'basepagenamee'          => array( 1,    'نەگٸزگٸبەتاتاۋى2', 'BASEPAGENAMEE' ),
+	'talkpagename'           => array( 1,    'تالقىلاۋبەتاتاۋى', 'TALKPAGENAME' ),
+	'talkpagenamee'          => array( 1,    'تالقىلاۋبەتاتاۋى2', 'TALKPAGENAMEE' ),
+	'subjectpagename'        => array( 1,    'تاقىرىپبەتاتاۋى', 'ماقالابەتاتاۋى', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+	'subjectpagenamee'       => array( 1,    'تاقىرىپبەتاتاۋى2', 'ماقالابەتاتاۋى2', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
+	'msg'                    => array( 0,    'حبر:', 'MSG:' ),
+	'subst'                  => array( 0,    'بٵدەل:', 'SUBST:' ),
+	'msgnw'                  => array( 0,    'ۋيكيسٸزحبر:', 'MSGNW:' ),
+	'img_thumbnail'          => array( 1,    'نوباي', 'thumbnail', 'thumb' ),
+	'img_manualthumb'        => array( 1,    'نوباي=$1', 'thumbnail=$1', 'thumb=$1'),
+	'img_right'              => array( 1,    'وڭعا', 'وڭ', 'right' ),
+	'img_left'               => array( 1,    'سولعا', 'سول', 'left' ),
+	'img_none'               => array( 1,    'ەشقانداي', 'جوق', 'none' ),
+	'img_width'              => array( 1,    '$1 px', '$1px' ),
+	'img_center'             => array( 1,    'ورتاعا', 'ورتا', 'center', 'centre' ),
+	'img_framed'             => array( 1,    'سٷرمەلٸ', 'framed', 'enframed', 'frame' ),
+	'img_page'               => array( 1,    'بەت=$1', 'بەت $1', 'page=$1', 'page $1' ),
+	'img_baseline'           => array( 1,    'نەگٸزجول', 'baseline' ),
+	'img_sub'                => array( 1,    'استىلىعى', 'است', 'sub'),
+	'img_super'              => array( 1,    'ٷستٸلٸگٸ', 'ٷست', 'sup', 'super', 'sup' ),
+	'img_top'                => array( 1,    'ٷستٸنە', 'top' ),
+	'img_text-top'           => array( 1,    'مٵتٸن-ٷستٸندە', 'text-top' ),
+	'img_middle'             => array( 1,    'ارالىعىنا', 'middle' ),
+	'img_bottom'             => array( 1,    'استىنا', 'bottom' ),
+	'img_text-bottom'        => array( 1,    'مٵتٸن-استىندا', 'text-bottom' ),
+	'int'                    => array( 0,    'ٸشكٸ:', 'INT:' ),
+	'sitename'               => array( 1,    'توراپاتاۋى', 'SITENAME' ),
+	'ns'                     => array( 0,    'ەا:', 'NS:' ),
+	'localurl'               => array( 0,    'جەرگٸلٸكتٸجاي:', 'LOCALURL:' ),
+	'localurle'              => array( 0,    'جەرگٸلٸكتٸجاي2:', 'LOCALURLE:' ),
+	'server'                 => array( 0,    'سەرۆەر', 'SERVER' ),
+	'servername'             => array( 0,    'سەرۆەراتاۋى', 'SERVERNAME' ),
+	'scriptpath'             => array( 0,    'ٵمٸرجولى', 'SCRIPTPATH' ),
+	'grammar'                => array( 0,    'سەپتٸك:', 'GRAMMAR:' ),
+	'notitleconvert'         => array( 0,    '__اتاۋالماستىرعىزباۋ__', '__ااباۋ__', '__NOTITLECONVERT__', '__NOTC__' ),
+	'nocontentconvert'       => array( 0,    '__ماعلۇماتالماستىرعىزباۋ__', '__ماباۋ__', '__NOCONTENTCONVERT__', '__NOCC__' ),
+	'currentweek'            => array( 1,    'اعىمداعىاپتا', 'CURRENTWEEK' ),
+	'currentdow'             => array( 1,    'اعىمداعىاپتاكٷنٸ', 'CURRENTDOW' ),
+	'localweek'              => array( 1,    'جەرگٸلٸكتٸاپتا', 'LOCALWEEK' ),
+	'localdow'               => array( 1,    'جەرگٸلٸكتٸاپتاكٷنٸ', 'LOCALDOW' ),
+	'revisionid'             => array( 1,    'نۇسقانٶمٸرٸ', 'REVISIONID' ),
+	'revisionday'            => array( 1,    'نۇسقاكٷنٸ' , 'REVISIONDAY' ),
+	'revisionday2'           => array( 1,    'نۇسقاكٷنٸ2', 'REVISIONDAY2' ),
+	'revisionmonth'          => array( 1,    'نۇسقاايى', 'REVISIONMONTH' ),
+	'revisionyear'           => array( 1,    'نۇسقاجىلى', 'REVISIONYEAR' ),
+	'revisiontimestamp'      => array( 1,    'نۇسقاۋاقىتتٷيٸندەمەسٸ', 'REVISIONTIMESTAMP' ),
+	'plural'                 => array( 0,    'كٶپشە:', 'PLURAL:' ),
+	'fullurl'                => array( 0,    'تولىقجاي:', 'FULLURL:' ),
+	'fullurle'               => array( 0,    'تولىقجاي2:', 'FULLURLE:' ),
+	'lcfirst'                => array( 0,    'كٵ1:', 'LCFIRST:' ),
+	'ucfirst'                => array( 0,    'بٵ1:', 'UCFIRST:' ),
+	'lc'                     => array( 0,    'كٵ:', 'LC:' ),
+	'uc'                     => array( 0,    'بٵ:', 'UC:' ),
+	'raw'                    => array( 0,    'قام:', 'RAW:' ),
+	'displaytitle'           => array( 1,    'كٶرسەتٸلەتٸناتاۋ', 'DISPLAYTITLE' ),
+	'rawsuffix'              => array( 1,    'ق', 'R' ),
+	'newsectionlink'         => array( 1,    '__جاڭابٶلٸمسٸلتەمەسٸ__', '__NEWSECTIONLINK__' ),
+	'currentversion'         => array( 1,    'باعدارلامانۇسقاسى', 'CURRENTVERSION' ),
+	'urlencode'              => array( 0,    'جايدىمۇقامداۋ:', 'URLENCODE:' ),
+	'anchorencode'           => array( 0,    'جٵكٸردٸمۇقامداۋ', 'ANCHORENCODE' ),
+	'currenttimestamp'       => array( 1,    'اعىمداعىۋاقىتتٷيٸندەمەسٸ', 'اعىمداعىۋاقىتتٷيٸن', 'CURRENTTIMESTAMP' ),
+	'localtimestamp'         => array( 1,    'جەرگٸلٸكتٸۋاقىتتٷيٸندەمەسٸ', 'جەرگٸلٸكتٸۋاقىتتٷيٸن', 'LOCALTIMESTAMP' ),
+	'directionmark'          => array( 1,    'باعىتبەلگٸسٸ', 'DIRECTIONMARK', 'DIRMARK' ),
+	'language'               => array( 0,    '#تٸل:', '#LANGUAGE:' ),
+	'contentlanguage'        => array( 1,    'ماعلۇماتتٸلٸ', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+	'pagesinnamespace'       => array( 1,    'ەسٸمايابەتسانى:', 'ەابەتسانى:', 'ايابەتسانى:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+	'numberofadmins'         => array( 1,    'ٵكٸمشٸسانى', 'NUMBEROFADMINS' ),
+	'formatnum'              => array( 0,    'سانپٸشٸمٸ', 'FORMATNUM' ),
+	'padleft'                => array( 0,    'سولىعىس', 'PADLEFT' ),
+	'padright'               => array( 0,    'وڭىعىس', 'PADRIGHT' ),
+	'special'                => array( 0,    'ارنايى', 'special',  ),
+	'defaultsort'            => array( 1,    'ٵدەپكٸسۇرىپتاۋ:', 'ٵدەپكٸسۇرىپ:', 'DEFAULTSORT:' ),
+);
+
+$specialPageAliases = array(
+        'DoubleRedirects'           => array( 'شىنجىرلى_ايداتۋلار' ),
+        'BrokenRedirects'           => array( 'جارامسىز_ايداتۋلار' ),
+        'Disambiguations'           => array( 'ايرىقتى_بەتتەر' ),
+        'Userlogin'                 => array( 'قاتىسۋشى_كٸرۋٸ' ),
+        'Userlogout'                => array( 'قاتىسۋشى_شىعۋى' ),
+        'Preferences'               => array( 'باپتاۋ' ),
+        'Watchlist'                 => array( 'باقىلاۋ_تٸزٸمٸ' ),
+        'Recentchanges'             => array( 'جۋىقتاعى_ٶزگەرٸستەر' ),
+        'Upload'                    => array( 'قوتارۋ' ),
+        'Imagelist'                 => array( 'سۋرەت_تٸزٸمٸ' ),
+        'Newimages'                 => array( 'جاڭا_سۋرەتتەر' ),
+        'Listusers'                 => array( 'قاتىسۋشىلار' ),
+        'Statistics'                => array( 'ساناق' ),
+        'Randompage'                => array( 'كەزدەيسوق_بەت', 'كەزدەيسوق' ),
+        'Lonelypages'               => array( 'ساياق_بەتتەر' ),
+        'Uncategorizedpages'        => array( 'ساناتسىز_بەتتەر' ),
+        'Uncategorizedcategories'   => array( 'ساناتسىز_ساناتتار' ),
+        'Uncategorizedimages'       => array( 'ساناتسىز_سۋرەتتەر' ),
+        'Unusedcategories'          => array( 'پايدالانىلماعان_ساناتتار' ),
+        'Unusedimages'              => array( 'پايدالانىلماعان_سۋرەتتەر' ),
+        'Wantedpages'               => array( 'تولتىرىلماعان_بەتتەر' ),
+        'Wantedcategories'          => array( 'تولتىرىلماعان_ساناتتار' ),
+        'Mostlinked'                => array( 'ەڭ_كٶپ_سٸلتەنگەن_بەتتەر' ),
+        'Mostlinkedcategories'      => array( 'ەڭ_كٶپ_سٸلتەنگەن_ساناتتار' ),
+        'Mostcategories'            => array( 'ەڭ_كٶپ_ساناتتار_بارى' ),
+        'Mostimages'                => array( 'ەڭ_كٶپ_سۋرەتتەر_بارى' ),
+        'Mostrevisions'             => array( 'ەڭ_كٶپ_نۇسقالار_بارى' ),
+        'Fewestrevisions'           => array( 'ەڭ_از_تٷزەتٸلگەن ' ),
+        'Shortpages'                => array( 'قىسقا_بەتتەر' ),
+        'Longpages'                 => array( 'ٷلكەن_بەتتەر' ),
+        'Newpages'                  => array( 'جاڭا_بەتتەر' ),
+        'Ancientpages'              => array( 'ەسكٸ_بەتتەر' ),
+        'Deadendpages'              => array( 'تۇيىق_بەتتەر' ),
+        'Protectedpages'            => array( 'قورعالعان_بەتتەر' ),
+        'Allpages'                  => array( 'بارلىق_بەتتەر' ),
+        'Prefixindex'               => array( 'باستاۋىش_تٸزٸمٸ' ) ,
+        'Ipblocklist'               => array( 'بۇعاتتالعاندار' ),
+        'Specialpages'              => array( 'ارنايى_بەتتەر' ),
+        'Contributions'             => array( 'ٷلەسٸ' ),
+        'Emailuser'                 => array( 'حات_جٸبەرۋ' ),
+        'Whatlinkshere'             => array( 'مىندا_سٸلتەگەندەر' ),
+        'Recentchangeslinked'       => array( 'سٸلتەنگەندەردٸڭ_ٶزگەرٸستەرٸ' ),
+        'Movepage'                  => array( 'بەتتٸ_جىلجىتۋ' ),
+        'Blockme'                   => array( 'ٶزدٸك_بۇعاتتاۋ' ),
+        'Booksources'               => array( 'كٸتاپ_قاينارلارى' ),
+        'Categories'                => array( 'ساناتتار' ),
+        'Export'                    => array( 'سىرتقا_بەرۋ' ),
+        'Version'                   => array( 'نۇسقاسى' ),
+        'Allmessages'               => array( 'بارلىق_حابارلار' ),
+        'Log'                       => array( 'جۋرنالدار', 'جۋرنال' ),
+        'Blockip'                   => array( 'جايدى_بۇعاتتاۋ' ),
+        'Undelete'                  => array( 'جويىلعاندى_قايتارۋ' ),
+        'Import'                    => array( 'سىرتتان_الۋ' ),
+        'Lockdb'                    => array( 'دەرەكقوردى_قۇلىپتاۋ' ),
+        'Unlockdb'                  => array( 'دەرەكقوردى_قۇلىپتاماۋ' ),
+        'Userrights'                => array( 'قاتىسۋشى_قۇقىقتارى' ),
+        'MIMEsearch'                => array( 'MIME_تٷرٸمەن_ٸزدەۋ' ),
+        'Unwatchedpages'            => array( 'باقىلانىلماعان_بەتتەر' ),
+        'Listredirects'             => array( 'ايداتۋ_تٸزٸمٸ' ),
+        'Revisiondelete'            => array( 'نۇسقانى_جويۋ' ),
+        'Unusedtemplates'           => array( 'پايدالانىلماعان_ٷلگٸلەر' ),
+        'Randomredirect'            => array( 'كەدەيسوق_ايداتۋ' ),
+        'Mypage'                    => array( 'جەكە_بەتٸم' ),
+        'Mytalk'                    => array( 'تالقىلاۋىم' ),
+        'Mycontributions'           => array( 'ٷلەسٸم' ),
+        'Listadmins'                => array( 'ٵكٸمشٸلەر'),
+        'Popularpages'              => array( 'ٵيگٸلٸ_بەتتەر' ),
+        'Search'                    => array( 'ٸزدەۋ' ),
+        'Resetpass'                 => array( 'قۇپييا_سٶزدٸ_قايتارۋ' ),
+        'Withoutinterwiki'          => array( 'ۋيكي-ارالىقسىزدار' ),
+);
+
+#-------------------------------------------------------------------
+# Default messages
+#-------------------------------------------------------------------
+
+$messages = array(
+# User preference toggles
+'tog-underline'               => 'سٸلتەمەنٸ استىنان سىز:',
+'tog-highlightbroken'         => 'جوقتالعان سٸلتەمەلەردٸ <a href="" class="new">بىلاي</a> پٸشٸمدە (باسقاشا: بىلاي <a href="" class="internal">؟</a> سيياقتى).',
+'tog-justify'                 => 'ەجەلەردٸ ەنٸ بويىنشا تۋرالاۋ',
+'tog-hideminor'               => 'جۋىقتاعى ٶزگەرٸستەردە شاعىن تٷزەتۋدٸ جاسىر',
+'tog-extendwatchlist'         => 'باقىلاۋ تٸزٸمدٸ ۇلعايت (بارلىق جارامدى ٶزگەرٸستەردٸ كٶرسەت)',
+'tog-usenewrc'                => 'كەڭەيتٸلگەن جۋىقتاعى ٶزگەرٸستەر (JavaScript)',
+'tog-numberheadings'          => 'بٶلٸم تاقىرىپتارىن ٶزدٸك تٷردە نومٸرلە',
+'tog-showtoolbar'             => 'ٶڭدەۋ قۋرالدار جولاعىن كٶرسەت (JavaScript)',
+'tog-editondblclick'          => 'قوس نۇقىمداپ ٶڭدەۋ (JavaScript)',
+'tog-editsection'             => 'بٶلٸمدەردٸ [ٶڭدەۋ] سٸلتەمەسٸمەن ٶڭدەۋٸن ەندٸر',
+'tog-editsectiononrightclick' => 'بٶلٸم اتاۋىن وڭ جاق نۇقۋمەن<br />ٶڭدەۋٸن ەندٸر (JavaScript)',
+'tog-showtoc'                 => 'مازمۇنىن كٶرسەت (3-تەن ارتىق بٶلٸمٸ بارىلارعا)',
+'tog-rememberpassword'        => 'كٸرگەنٸمدٸ بۇل كومپييۋتەردە ۇمىتپا',
+'tog-editwidth'               => 'ٶڭدەۋ اۋماعى تولىق ەنٸمەن',
+'tog-watchcreations'          => 'مەن باستاعان بەتتەردٸ باقىلاۋ تٸزٸمٸمە قوس',
+'tog-watchdefault'            => 'مەن ٶڭدەگەن بەتتەردٸ باقىلاۋ تٸزٸمٸمە قوس',
+'tog-watchmoves'              => 'مەن جىلجىتقان بەتتەردٸ باقىلاۋ تٸزٸمٸمە قوس',
+'tog-watchdeletion'           => 'مەن جويعان بەتتەردٸ باقىلاۋ تٸزٸمٸمە قوس',
+'tog-minordefault'            => 'ٵدەپكٸدەن بارلىق تٷزەتۋلەردٸ شاعىن دەپ بەلگٸلەۋ',
+'tog-previewontop'            => 'قاراپ شىعۋ اۋماعى ٶڭدەۋ اۋماعى الدىندا',
+'tog-previewonfirst'          => 'بٸرٸنشٸ ٶڭدەگەندە قاراپ شىعۋ',
+'tog-nocache'                 => 'بەت قوسالقى قالتاسىن ٶشٸر',
+'tog-enotifwatchlistpages'    => 'باقىلانعان بەت ٶزگەرگەندە ماعان حات جٸبەر',
+'tog-enotifusertalkpages'     => 'تالقىلاۋىم ٶزگەرگەندە ماعان حات جٸبەر',
+'tog-enotifminoredits'        => 'شاعىن تٷزەتۋ تۋرالى دا ماعان حات جٸبەر',
+'tog-enotifrevealaddr'        => 'ە-پوشتا جايىمدى ەسكەرتۋ حاتتا اشىق كٶرسەت',
+'tog-shownumberswatching'     => 'باقىلاپ تۇرعان قاتىسۋشىلاردىڭ سانىن كٶرسەت',
+'tog-fancysig'                => 'قام قولتاڭبا (ٶزدٸك سٸلتەمەسٸز;)',
+'tog-externaleditor'          => 'سىرتقى ٶڭدەۋٸشتٸ ٵدەپكٸدەن قولدان',
+'tog-externaldiff'            => 'سىرتقى ايىرماعىشتى ٵدەپكٸدەن قولدان',
+'tog-showjumplinks'           => '«ٶتٸپ كەتۋ» قاتىناۋ سٸلتەمەلەرٸن ەندٸر',
+'tog-uselivepreview'          => 'تۋرا قاراپ شىعۋدى قولدانۋ (JavaScript) (سىناق تٷرٸندە)',
+'tog-forceeditsummary'        => 'ٶڭدەۋ سيپاتتاماسى بوس قالعاندا ماعان ەسكەرت',
+'tog-watchlisthideown'        => 'تٷزەتۋٸمدٸ باقىلاۋ تٸزٸمنەن جاسىر',
+'tog-watchlisthidebots'       => 'بوت تٷزەتۋٸن باقىلاۋ تٸزٸمنەن جاسىر',
+'tog-watchlisthideminor'      => 'شاعىن تٷزەتۋلەردٸ باقىلاۋ تٸزٸمٸندە كٶرسەتپەۋ',
+'tog-nolangconversion'        => 'تٸل تٷرٸن اۋدارماۋ',
+'tog-ccmeonemails'            => 'باسقا قاتىسۋشىعا جٸبەرگەن حاتىمنىڭ كٶشٸرمەسٸن ماعان دا جٸبەر',
+'tog-diffonly'                => 'ايىرما استىندا بەت ماعلۇماتىن كٶرسەتپە',
+
+'underline-always'  => 'ٵرقاشان',
+'underline-never'   => 'ەشقاشان',
+'underline-default' => 'شولعىش بويىنشا',
+
+'skinpreview' => '(قاراپ شىعۋ)',
+
+# Dates
+'sunday'        => 'جەكسەنبٸ',
+'monday'        => 'دٷيسەنبٸ',
+'tuesday'       => 'سەيسەنبٸ',
+'wednesday'     => 'سٵرسەنبٸ',
+'thursday'      => 'بەيسەنبٸ',
+'friday'        => 'جۇما',
+'saturday'      => 'سەنبٸ',
+'sun'           => 'جەك',
+'mon'           => 'دٷي',
+'tue'           => 'بەي',
+'wed'           => 'سٵر',
+'thu'           => 'بەي',
+'fri'           => 'جۇم',
+'sat'           => 'سەن',
+'january'       => 'قاڭتار',
+'february'      => 'اقپان',
+'march'         => 'ناۋرىز',
+'april'         => 'cٵۋٸر',
+'may_long'      => 'مامىر',
+'june'          => 'ماۋسىم',
+'july'          => 'شٸلدە',
+'august'        => 'تامىز',
+'september'     => 'قىركٷيەك',
+'october'       => 'قازان',
+'november'      => 'قاراشا',
+'december'      => 'جەلتوقسان',
+'january-gen'   => 'قانتاردىڭ',
+'february-gen'  => 'اقپاننىڭ',
+'march-gen'     => 'ناۋرىزدىڭ',
+'april-gen'     => 'سٵۋٸردٸڭ',
+'may-gen'       => 'مامىردىڭ',
+'june-gen'      => 'ماۋسىمنىڭ',
+'july-gen'      => 'شٸلدەنٸڭ',
+'august-gen'    => 'تامىزدىڭ',
+'september-gen' => 'قىركٷيەكتٸڭ',
+'october-gen'   => 'قازاننىڭ',
+'november-gen'  => 'قاراشانىڭ',
+'december-gen'  => 'جەلتوقساننىڭ',
+'jan'           => 'قان',
+'feb'           => 'اقپ',
+'mar'           => 'ناۋ',
+'apr'           => 'cٵۋ',
+'may'           => 'مام',
+'jun'           => 'ماۋ',
+'jul'           => 'شٸل',
+'aug'           => 'تام',
+'sep'           => 'قىر',
+'oct'           => 'قاز',
+'nov'           => 'قار',
+'dec'           => 'جەل',
+
+# Bits of text used by many pages
+'categories'            => 'بارلىق سانات تٸزٸمٸ',
+'pagecategories'        => '{{PLURAL:$1|سانات|ساناتتار}}',
+'category_header'       => '«$1» ساناتىنداعى بەتتەر',
+'subcategories'         => 'تٶمەنگٸ ساناتتار',
+'category-media-header' => '«$1» ساناتىنداعى تاسپالار',
+
+'linkprefix'        => '/^(.*?)([a-zäçéğıïñöşüýа-яёәіңғүұқөһA-ZÄÇÉĞİÏÑÖŞÜÝА-ЯЁӘІҢҒҮҰҚӨҺʺʹ«„]+)$/sDu',
+'mainpagetext'      => "<big>'''مەدياۋيكي باعدارلاماسى سٵتتٸ ورناتىلدى.'''</big>",
+'mainpagedocfooter' => 'ۋيكي باعدارلاماسىن پايدالانۋ اقپاراتى ٷشٸن [http://meta.wikimedia.org/wiki/Help:Contents پايدالانۋشى نۇسقاۋلارىمەن] تانىسىڭىز.
+
+== باستاۋ ==
+
+* [http://www.mediawiki.org/wiki/Help:Configuration_settings باپتاۋ قالاۋلارى تٸزٸمٸ]
+* [http://www.mediawiki.org/wiki/Help:FAQ مەدياۋيكي جقس]
+* [http://mail.wikimedia.org/mailman/listinfo/mediawiki-announce مەدياۋيكي حات تاراتۋ تٸزٸمٸ]',
+
+'article'        => 'ماعلۇمات بەتٸ',
+'newwindow'      => '(جاڭا تەرەزەدە اشىلادى)',
+'cancel'         => 'بولدىرماۋ',
+'qbfind'         => 'تابۋ',
+'qbbrowse'       => 'شولۋ',
+'qbedit'         => 'ٶڭدەۋ',
+'qbpageoptions'  => 'وسى بەت',
+'qbpageinfo'     => 'مٵتٸن ارالىعى',
+'qbmyoptions'    => 'بەتتەرٸم',
+'qbspecialpages' => 'ارنايى بەتتەر',
+'moredotdotdot'  => 'كٶبٸرەك…',
+'mypage'         => 'جەكە بەتٸم',
+'mytalk'         => 'تالقىلاۋىم',
+'anontalk'       => 'IP تالقىلاۋى',
+'navigation'     => 'باعىتتاۋ',
+
+# Metadata in edit box
+'metadata_help' => 'مەتا-دەرەكتەر:',
+
+'errorpagetitle'    => 'قاتە',
+'returnto'          => '$1 دەگەنگە ورالۋ.',
+'tagline'           => '{{GRAMMAR:ablative|{{SITENAME}}}}',
+'search'            => 'ٸزدەۋ',
+'searchbutton'      => 'ٸزدەۋ',
+'go'                => 'ٶتۋ',
+'searcharticle'     => 'ٶتۋ',
+'history'           => 'بەت تاريحى',
+'history_short'     => 'تاريحى',
+'updatedmarker'     => 'سوڭعى كٸرٸستەن بەرٸ جاڭارتىلعان',
+'info_short'        => 'اقپارات',
+'printableversion'  => 'باسىپ شىعارۋعا',
+'permalink'         => 'تۇراقتى سٸلتەمە',
+'print'             => 'باسىپ شىعارۋ',
+'edit'              => 'ٶڭدەۋ',
+'editthispage'      => 'بەتتٸ ٶڭدەۋ',
+'delete'            => 'جويۋ',
+'deletethispage'    => 'بەتتٸ جويۋ',
+'undelete_short'    => '{{PLURAL:$1|بٸر|$1}} تٷزەتۋدٸ قايتارۋ',
+'protect'           => 'قورعاۋ',
+'protect_change'    => 'قورعاۋدى ٶزگەرتۋ',
+'protectthispage'   => 'بەتتٸ قورعاۋ',
+'unprotect'         => 'قورعاماۋ',
+'unprotectthispage' => 'بەتتٸ قورعاماۋ',
+'newpage'           => 'جاڭا بەت',
+'talkpage'          => 'بەتتٸ تالقىلاۋ',
+'talkpagelinktext'  => 'تالقىلاۋى',
+'specialpage'       => 'ارنايى بەت',
+'personaltools'     => 'جەكە قۇرالدار',
+'postcomment'       => 'مٵندەمە جٸبەرۋ',
+'articlepage'       => 'ماعلۇمات بەتٸن قاراۋ',
+'talk'              => 'تالقىلاۋ',
+'views'             => 'كٶرٸنٸس',
+'toolbox'           => 'قۇرالدار',
+'userpage'          => 'قاتىسۋشىنىڭ بەتٸن قاراۋ',
+'projectpage'       => 'جوبا بەتٸن قاراۋ',
+'imagepage'         => 'سۋرەت بەتٸن قاراۋ',
+'mediawikipage'     => 'حابار بەتٸن قاراۋ',
+'templatepage'      => 'ٷلگٸ بەتٸن قاراۋ',
+'viewhelppage'      => 'انىقتاما بەتٸن قاراۋ',
+'categorypage'      => 'سانات بەتٸن قاراۋ',
+'viewtalkpage'      => 'تالقىلاۋ بەتٸن قاراۋ',
+'otherlanguages'    => 'باسقا تٸلدەردە',
+'redirectedfrom'    => '($1 بەتٸنەن ايداتىلعان)',
+'redirectpagesub'   => 'ايداتۋ بەتٸ',
+'lastmodifiedat'    => 'بۇل بەتتٸڭ ٶزگەرتٸلگەن سوڭعى كەزٸ: $2, $1.', # $1 date, $2 time
+'viewcount'         => 'بۇل بەت {{plural:$1|بٸر|$1}} رەت قارالعان.',
+'protectedpage'     => 'قورعاۋلى بەت',
+'jumpto'            => 'مىناعان ٶتٸپ كەتۋ:',
+'jumptonavigation'  => 'باعىتتاۋ',
+'jumptosearch'      => 'ٸزدەۋ',
+
+# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
+'about'             => 'بٸز تۋرالى',
+'aboutsite'         => '{{SITENAME}} تۋرالى',
+'aboutpage'         => '{{ns:project}}:بٸز_تۋرالى',
+'bugreports'        => 'قاتە ەسەپتەمەلەرٸ',
+'bugreportspage'    => '{{ns:project}}:قاتە_ەسەپتەمەلەرٸ',
+'copyright'         => 'ماعلۇمات $1 قۇجاتى بويىنشا قاتىناۋلى.',
+'copyrightpagename' => '{{SITENAME}} اۋتورلىق قۇقىقتارى',
+'copyrightpage'     => '{{ns:project}}:اۋتورلىق قۇقىقتار',
+'currentevents'     => 'اعىمداعى وقيعالار',
+'currentevents-url' => 'اعىمداعى_وقيعالار',
+'disclaimers'       => 'جاۋاپكەرشٸلٸكتەن باس تارتۋ',
+'disclaimerpage'    => '{{ns:project}}:جاۋاپكەرشٸلٸكتەن_باس_تارتۋ',
+'edithelp'          => 'ٶندەۋ انىقتاماسى',
+'edithelppage'      => '{{ns:help}}:ٶڭدەۋ',
+'faq'               => 'جقس',
+'faqpage'           => '{{ns:project}}:جقس',
+'help'              => 'انىقتاما',
+'helppage'          => '{{ns:help}}:مازمۇنى',
+'mainpage'          => 'باستى بەت',
+'portal'            => 'قاۋىم پورتالى',
+'portal-url'        => '{{ns:project}}:قاۋىم_پورتالى',
+'privacy'           => 'جەكە قۇپيياسىن ساقتاۋ',
+'privacypage'       => '{{ns:project}}:جەكە_قۇپيياسىن_ساقتاۋ',
+'sitesupport'       => 'دەمەۋشٸلٸك',
+'sitesupport-url'   => '{{ns:project}}:جٵردەم',
+
+'badaccess'        => 'رۇقسات قاتەسٸ',
+'badaccess-group0' => 'سۇرانىسقان ٵرەكەتٸڭٸزدٸ جەگۋٸڭٸزگە رۇقسات ەتٸلمەيدٸ.',
+'badaccess-group1' => 'سۇرانىسقان ٵرەكەتٸڭٸز $1 توبىنىڭ قاتىسۋشىلارىنا شەكتەلەدٸ.',
+'badaccess-group2' => 'سۇرانىسقان ٵرەكەتٸڭٸز $1 توپتارى بٸرٸنٸڭ قاتۋسىشىلارىنا شەكتەلەدٸ.',
+'badaccess-groups' => 'سۇرانىسقان ٵرەكەتٸڭٸز $1 توپتارى بٸرٸنٸڭ قاتۋسىشىلارىنا شەكتەلەدٸ.',
+
+'versionrequired'     => 'MediaWiki $1 نۇسقاسى قاجەت',
+'versionrequiredtext' => 'وسى بەتتٸ قولدانۋ ٷشٸن MediaWiki $1 نۇسقاسى قاجەت. [[{{ns:special}}:Version|جٷيە نۇسقاسى بەتٸن]] قاراڭىز.',
+
+'ok'                  => 'جارايدى',
+'pagetitle'           => '$1 — {{SITENAME}}',
+'retrievedfrom'       => '«$1» دەگەننەن الىنعان',
+'youhavenewmessages'  => 'سٸزدە $1 بار ($2).',
+'newmessageslink'     => 'جاڭا حابارلار',
+'newmessagesdifflink' => 'سوڭعى ٶزگەرٸسٸنە',
+'editsection'         => 'ٶڭدەۋ',
+'editold'             => 'ٶڭدەۋ',
+'editsectionhint'     => 'بٶلٸمدٸ ٶڭدەۋ: $1',
+'toc'                 => 'مازمۇنى',
+'showtoc'             => 'كٶرسەت',
+'hidetoc'             => 'جاسىر',
+'thisisdeleted'       => 'قارايمىز با, نە قايتارامىز با؟: $1',
+'viewdeleted'         => 'قارايمىز با؟: $1',
+'restorelink'         => 'جويىلعان {{PLURAL:$1|بٸر|$1}} تٷزەتۋ',
+'feedlinks'           => 'ارنا:',
+'feed-invalid'        => 'جارامسىز جازىلىم ارنا تٷرٸ.',
+'feed-atom'           => 'Atom',
+'feed-rss'            => 'RSS',
+
+# Short words for each namespace, by default used in the 'article' tab in monobook
+'nstab-main'      => 'ماعلۇمات',
+'nstab-user'      => 'جەكە بەتٸ',
+'nstab-media'     => 'تاسپا بەتٸ',
+'nstab-special'   => 'ارنايى',
+'nstab-project'   => 'جوبا بەتٸ',
+'nstab-image'     => 'فايل',
+'nstab-mediawiki' => 'جٷيە حابارى',
+'nstab-template'  => 'ٷلگٸ',
+'nstab-help'      => 'انىقتاما',
+'nstab-category'  => 'سانات',
+
+# Main script and global functions
+'nosuchaction'      => 'مۇنداي ٵرەكەت جوق',
+'nosuchactiontext'  => 'وسى URL جايىمەن ەنگٸزٸلگەن ٵرەكەتتٸ
+وسى ۋيكي جورامالداپ بٸلمەدٸ.',
+'nosuchspecialpage' => 'بۇل ارنايى بەت ەمەس',
+'nospecialpagetext' => 'سٸز سۇرانىسقان ارنايى بەت جارامسىز. بارلىق جارامدى ارنايى بەتتەردٸ [[{{ns:special}}:Specialpages|ارنايى بەتتەر تٸزٸمٸندە]] تابا الاسىز.',
+
+# General errors
+'error'                => 'قاتە',
+'databaseerror'        => 'دەرەكقوردىڭ قاتەسٸ',
+'dberrortext'          => 'دەرەكقورعا سۇرانىس جاسالعاندا سينتاكسيس قاتەسٸ كەزدەستٸ.
+بۇل باعدارلامانىڭ قاتەسٸن كٶرسەتۋ مٷمكٸن.
+دەرەكقورعا سوڭعى بولعان سۇرانىس:
+<blockquote><tt>$1</tt></blockquote>
+مىنا فۋنكتسيياسىنان «<tt>$2</tt>».
+MySQL قايتارعان قاتەسٸ «<tt>$3: $4</tt>».',
+'dberrortextcl'        => 'دەرەكقورعا سۇرانىس جاسالعاندا سينتاكسيس قاتەسٸ كەزدەستٸ.
+دەرەكقورعا سوڭعى بولعان سۇرانىس:
+«$1»
+مىنا فۋنكتسيياسىنان: «$2».
+MySQL قايتارعان قاتەسٸ «$3: $4»',
+'noconnect'            => 'عافۋ ەتٸڭٸز! بۇل ۋيكيدە كەيبٸر تەحنيكالىق قيىنشىلىقتار كەزدەستٸ, سوندىقتان دەرەكقور سەرۆەرٸنە قاتىناسۋ المايدى. <br />
+$1',
+'nodb'                 => '$1 دەرەكقورى تالعانبادى',
+'cachederror'          => 'تٶمەندە سۇرانعان بەتتٸڭ قوسالقى قالتاداعى كٶشٸرمەسٸ, وسى بەت جاڭارتىلماعان بولۋى مٷمكٸن.',
+'laggedslavemode'      => 'نازار سالىڭىز: بەتتە جۋىقتاعى جاڭالاۋلار بولماۋى مٷمكٸن.',
+'readonly'             => 'دەرەكقورى قۇلىپتالعان',
+'enterlockreason'      => 'قۇلىپتاۋ سەبەبٸن ەنگٸزٸڭٸز, قاي ۋاقىتقا دەيٸن
+قۇلىپتالعانىن قوسا',
+'readonlytext'         => 'اعىمدا دەرەكقور جاڭا جازبا جٵنە تاعى باسقا ٶزگەرٸستەر جاساۋدان قۇلىپتالىنعان. بۇل دەرەكقوردى جٶندەتۋ باعدارلامالارىن ورىنداۋ ٷشٸن بولۋى مٷمكٸن, بۇنى بٸتٸرگەننەن سوڭ قالٸپتٸ ٸسكە قايتارىلادى.
+
+قۇلىپتاعان ٵكٸمشٸ بۇنى بىلاي تٷسٸندٸرەدٸ: $1',
+'missingarticle'       => 'ٸزدەستٸرٸلگەن «$1» اتاۋلى بەت مٵتٸنٸ دەرەكقوردا تابىلمادى.
+
+بۇل داعدىدا ەسكٸرگەن ايىرما سٸلتەمەسٸنە نەمەسە جويىلعان بەت تاريحىنىڭ سٸلتەمەسٸنە
+ەرگەننەن بولۋى مٷمكٸن.
+
+ەگەر بۇل بولجام دۇرىس سەبەپ بولماسا, باعدارلامامىزداعى قاتەگە تاپ بولۋىڭىز مٷمكٸن.
+بۇل تۋرالى ناقتى URL جايىن كٶرسەتٸپ ٵكٸمشٸگە ەسەپتەمە جٸبەرٸڭٸز.',
+'readonly_lag'         => 'جەتەك دەرەكقور سەرۆەرلەر باستاۋىشپەن قاداملانعاندا وسى دەرەكقور ٶزدٸك تٷرٸندە قۇلىپتالىنعان',
+'internalerror'        => 'ٸشكٸ قاتە',
+'filecopyerror'        => '«$1» فايلى «$2» فايلىنا كٶشٸرٸلمەدٸ.',
+'filerenameerror'      => '«$1» فايل اتى «$2» اتىنا ٶزگەرتٸلمەدٸ.',
+'filedeleteerror'      => '«$1» فايلى جويىلمايدى.',
+'filenotfound'         => '«$1» فايلى تابىلمادى.',
+'unexpected'           => 'كٷتٸلمەگەن ماعىنا: «$1» = «$2».',
+'formerror'            => 'قاتە: جٸبەرۋ ٷلگٸتٸ ەمەس',
+'badarticleerror'      => 'وسىنداي ٵرەكەت مىنا بەتتە اتقارىلمايدى.',
+'cannotdelete'         => 'ايتىلمىش بەت نە سۋرەت جويىلمايدى. (بۇنى باسقا بٸرەۋ جويعان شىعار.)',
+'badtitle'             => 'جارامسىز اتاۋ',
+'badtitletext'         => 'سۇرانىسقان بەت اتاۋى جارامسىز, بوس, تٸلارا سٸلتەمەسٸ نە ۋيكي-ارا اتاۋى مٷلتٸك بولعان. اتاۋلاردا سٷەمەلدەمەگەن بٸرقاتار ٵرٸپتەر بولۋى مٷمكٸن.',
+'perfdisabled'         => 'عافۋ ەتٸڭٸز! وسى قاسيەت, دەرەكقوردىڭ جىلدامىلىعىنا ٵسەر ەتٸپ, ەشكٸمگە ۋيكيدٸ پايدالانۋعا بەرمەگەسٸن, ۋاقىتشا ٶشٸرٸلگەن.',
+'perfdisabledsub'      => 'مىندا $1 بەتٸنٸڭ ساقتالعان كٶشٸرمەسٸ:', # obsolete؟
+'perfcached'           => 'كەلەسٸ دەرەك قوسالقى قالتاسىنان الىنعان, سوندىقتان تولىقتاي جاڭالانماعان بولۋى مٷمكٸن.',
+'perfcachedts'         => 'كەلەسٸ دەرەك قوسالقى قالتاسىنان الىنعان, سوڭعى جاڭالانلعان كەزٸ: $1.',
+'querypage-no-updates' => 'بۇل بەتتٸڭ جاڭارتىلۋى اعىمدا ٶشٸرٸلگەن. دەرەكتەرٸ قازٸر ٶزگەرتٸلمەيدٸ.',
+'wrong_wfQuery_params' => 'wfQuery() فۋنكتسيياسىندا جارامسىز باپتار<br />
+فۋنكتسييا: $1<br />
+سۇرانىس: $2',
+'viewsource'           => 'قاينارىن قاراۋ',
+'viewsourcefor'        => '$1 دەگەن ٷشٸن',
+'protectedpagetext'    => 'بۇل بەت ٶڭدەۋ بولدىرماۋ ٷشٸن قۇلىپتالىنعان.',
+'viewsourcetext'       => 'بۇل بەتتٸڭ قاينارىن قاراۋىڭىزعا جٵنە كٶشٸرٸپ الۋڭىزعا بولادى:',
+'protectedinterface'   => 'بۇل بەت باعدارلامانىڭ تٸلدەسۋ مٵتٸنٸن جەتٸستٸرەدٸ, سوندىقتان قييانات كەلتٸرمەۋ ٷشٸن ٶزگەرتۋٸ قۇلىپتالعان.',
+'editinginterface'     => "'''نازار سالىڭىز:''' باعدارلاماعا تٸلدەسۋ مٵتٸنٸن جەتٸستٸرەتٸن MediaWiki بەتٸن ٶڭدەپ جاتىرسىز. بۇل بەتتٸڭ ٶزگەرتۋٸ بارلىق پايدالانۋشىلار تٸلدەسۋٸنە ٵسەر ەتەدٸ.",
+'sqlhidden'            => '(SQL سۇرانىسى جاسىرىلدى)',
+'cascadeprotected'     => 'بۇل بەت ٶڭدەۋدەن قورعالعان, سەبەبٸ: ول مىنا «باۋلى» قورعاۋى ەندٸرٸلگەن {{PLURAL:$1|بەتكە|بەتتەرگە}} كٸرٸكتٸرٸلگەن:',
+
+# Login and logout pages
+'logouttitle'                => 'قاتىسۋشى شىعۋى',
+'logouttext'                 => '<strong>ەندٸ جٷيەدەن شىقتىڭىز.</strong><br />
+بۇل كومپييۋتەردەن ٵلٸ دە جٷيەگە كٸرمەستەن {{SITENAME}} جوباسىن
+شولۋىڭىز مٷمكٸن, نەمەسە باسقا پايدالانۋشىنىڭ جٷيەگە كٸرۋٸ مٷمكٸن.
+كەيبٸر بەتتەردە ٵلٸ دە جٷيەگە كٸرگەنٸڭٸزدەي كٶرٸنۋٸ مٷمكٸندٸگٸن
+ەسكەرتەمٸز; بۇل شولعىشتىڭ قوسالقى قالتاسىن بوساتۋ ارقىلى شەشٸلەدٸ.',
+'welcomecreation'            => '== قوش كەلدٸڭٸز, $1! ==
+
+تٸركەلگٸڭٸز جاسالدى. {{SITENAME}} باپتاۋىڭىزدى قالاۋىڭىزبەن ٶزگەرتۋدٸ ۇمىتپاڭىز.',
+'loginpagetitle'             => 'قاتىسۋشى كٸرۋٸ',
+'yourname'                   => 'قاتىسۋشى اتىڭىز',
+'yourpassword'               => 'قۇپييا سٶزٸڭٸز',
+'yourpasswordagain'          => 'قۇپييا سٶزدٸ قايتالاپ ەنگٸزٸڭٸز',
+'remembermypassword'         => 'مەنٸڭ كٸرگەنٸمدٸ بۇل كومپييۋتەردە ۇمىتپا',
+'yourdomainname'             => 'جەلٸ ٷيشٸگٸڭٸز',
+'externaldberror'            => 'وسىندا سىرتقى تەڭدەستٸرۋ دەرەكقورىندا قاتە بولدى, نەمەسە سىرتقى تٸركەلگٸڭٸزدٸ جاڭالاۋعا رۇقسات جوق.',
+'loginproblem'               => '<b>كٸرۋٸڭٸز كەزٸندە وسىندا قيىندىققا تاپ بولدىق.</b><br />تاعى دا قايتالاپ قاراڭىز.',
+'alreadyloggedin'            => '<strong>$1 دەگەن قاتىسۋشى, كٸرٸپسٸز تٷگە!</strong><br />',
+
+'login'                      => 'كٸرۋ',
+'loginprompt'                => '{{SITENAME}} تورابىنا كٸرۋ ٷشٸن «cookies» قاسيەتٸن ەندٸرۋٸڭٸز قاجەت.',
+'userlogin'                  => 'كٸرۋ / تٸركەلگٸ جاساۋ',
+'logout'                     => 'شىعۋ',
+'userlogout'                 => 'شىعۋ',
+'notloggedin'                => 'كٸرمەگەنسٸز',
+'nologin'                    => 'تٸركەلگٸڭٸز جوق پا؟ $1.',
+'nologinlink'                => 'جاساڭىز',
+'createaccount'              => 'تٸركەلگٸ جاسا',
+'gotaccount'                 => 'تٸركەلگٸڭٸز بار ما؟  $1.',
+'gotaccountlink'             => 'كٸرٸڭٸز',
+'createaccountmail'          => 'ە-پوشتامەن',
+'badretype'                  => 'ەنگٸزگەن قۇپييا سٶزدەرٸڭٸز بٸر بٸرٸنە سٵيكەس ەمەس.',
+'userexists'                 => 'ەنگٸزگەن قاتىسۋشى اتىڭىزدى بٸرەۋ پايدالانىپ جاتىر. باسقا اتاۋ تانداڭىز.',
+'youremail'                  => 'ە-پوشتا جايىڭىز *:',
+'username'                   => 'قاتىسۋشى اتىڭىز:',
+'uid'                        => 'قاتىسۋشى تەڭدەستٸرۋٸڭٸز:',
+'yourrealname'               => 'شىن اتىڭىز *:',
+'yourlanguage'               => 'تٸلٸڭٸز:',
+'yourvariant'                => 'تٷرٸ',
+'yournick'                   => 'لاقاپ اتىڭىز:',
+'badsig'                     => 'قام قولتاڭباڭىز جارامسىز; HTML بەلگٸشەلەرٸن تەكسەرٸڭٸز.',
+'email'                      => 'ە-پوشتاڭىز',
+'prefs-help-email-enotif'    => 'ەگەر سونى باپتاساڭىز, وسى ە-پوشتا جايى سٸزگە ەسكەرتۋ حات جٸبەرۋگە قولدانىلادى.',
+'prefs-help-realname'        => '* شىن اتىڭىز (مٸندەتتٸ ەمەس): ەنگٸزسەڭٸز, شىعارماڭىزدىڭ اۋتورلىعىن بەلگٸلەۋٸ ٷشٸن قولدانىلادى.',
+'loginerror'                 => 'كٸرۋ قاتەسٸ',
+'prefs-help-email'           => '* ە-پوشتاڭىز (مٸندەتتٸ ەمەس): «قاتىسۋشى» نەمەسە «قاتىسۋشى تالقىلاۋ» بەتٸڭٸزدەر ارقىلى باسقالارعا بايلانىسۋ مٷمكٸندٸك بەرەدٸ. ٶزٸڭٸزدٸڭ كٸم ەكەنٸڭٸزدٸ بٸلدٸرتپەيدٸ.',
+'nocookiesnew'               => 'قاتىسۋشى تٸركەلگٸسٸ جاسالدى, تەك ٵلٸ كٸرمەگەنسٸز. {{SITENAME}} جوباسىنا قاتىسۋشى كٸرۋ ٷشٸن «cookies» قاسيەتٸ قاجەت. شولعىشىڭىزدا «cookies» قاسيەتٸ ٶشٸرٸلگەن. سونى ەندٸرٸڭٸز دە جاڭا قاتىسۋشى اتىڭىزدى جٵنە قۇپييا سٶزٸڭٸزدٸ ەنگٸزٸپ كٸرٸڭٸز.',
+'nocookieslogin'             => 'قاتىسۋشى كٸرۋ ٷشٸن {{SITENAME}} جوباسى «cookies» قاسيەتٸن قولدانادى. شولعىشىڭىزدا «cookies» قاسيەتٸ ٶشٸرٸلگەن. سونى ەندٸرٸڭٸز دە قايتالاپ كٸرٸڭٸز.',
+'noname'                     => 'قاتىسۋشى اتىن دۇرىس ەنگٸزبەدٸڭٸز.',
+'loginsuccesstitle'          => 'كٸرۋٸڭٸز سٵتتٸ ٶتتٸ',
+'loginsuccess'               => "'''سٸز ەندٸ {{SITENAME}} جوباسىنا «$1» رەتٸندە كٸرٸپ وتىرسىز.'''",
+'nosuchuser'                 => 'مىندا «$1» اتاۋلى قاتىسۋشى جوق. ەملەڭٸزدٸ تەكسەرٸڭٸز, نەمەسە جاڭا تٸركەلگٸ جاساڭىز.',
+'nosuchusershort'            => 'مىندا «$1» دەگەن قاتىسۋشى اتاۋى جوق. ەملەڭٸزدٸ تەكسەرٸڭٸز.',
+'nouserspecified'            => 'قاتىسۋشى اتىن ەنگٸزٸۋٸڭٸز قاجەت.',
+'wrongpassword'              => 'ەنگٸزگەن قۇپييا سٶز جارامسىز. قايتالاپ كٶرٸڭٸز.',
+'wrongpasswordempty'         => 'قۇپييا سٶز بوستى بوپتى. قايتالاپ كٶرٸڭٸز.',
+'mailmypassword'             => 'قۇپييا سٶزٸمدٸ حاتپەن جٸبەر',
+'passwordremindertitle'      => 'قۇپييا سٶز تۋرالى {{SITENAME}} جوباسىنىڭ ەسكەرتۋٸ',
+'passwordremindertext'       => 'كەيبٸرەۋ (IP جايى: $1, بٵلكٸم, ٶزٸڭٸز بولارسىز)
+{{SITENAME}} ٷشٸن بٸزدەن جاڭا قۇپييا سٶزٸن جٸبەرۋٸن سۇرانىسقان ($4).
+«$2» قاتىسۋشىنىڭ قۇپييا سٶزٸ «$3» بولدى ەندٸ.
+قازٸر كٸرۋٸڭٸز جٵنە قۇپييا سٶزٸڭٸزدٸ اۋىسترۋىڭىز قاجەت.
+
+ەگەر باسقا بٸرەۋ بۇل سۇرانىستى جاساسا, نەمەسە قۇپييا سٶزٸڭٸزدٸ ۇمىتساڭىز دا,
+جٵنە بۇنى ٶزگەرتكٸڭٸز كەلمەسە دە, وسى حابارلاماعا اڭعارماۋىڭىزعا دا بولادى,
+ەسكٸ قۇپييا سٶزٸڭٸزدٸ ٵرٸعاراي قولدانىپ.',
+'noemail'                    => 'مىندا «$1» قاتىسۋشىنىڭ ە-پوشتاسى جوق.',
+'passwordsent'               => 'جاڭا قۇپييا سٶز «$1» ٷشٸن
+تٸركەلگەن ە-پوشتا جايىنا جٸبەرٸلدٸ.
+قابىلداعاننان كەيٸن كٸرگەندە سونى ەنگٸزٸڭٸز.',
+'blocked-mailpassword'       => 'IP جايىڭىزدان ٶڭدەۋ بۇعاتتالعان, سوندىقتان
+قيياناتشىلىقتان ساقتانۋ ٷشٸن قۇپييا سٶز جٸبەرۋ قىزمەتٸنٸڭ ٵرەكەتٸ رۇقسات ەتٸلمەيدٸ.',
+'eauthentsent'               => 'كۋٵلاندىرۋ حاتى اتالعان ە-پوشتا جايىنا جٸبەرٸلدٸ.
+باسقا ە-پوشتا حاتىن جٸبەرۋدٸڭ الدىنان, تٸركەلگٸ شىنىنان سٸزدٸكٸ ەكەنٸن
+كۋٵلاندىرۋ ٷشٸن حاتتاعى نۇسقاۋلارعا ەرٸڭٸز.',
+'throttled-mailpassword'     => 'سوڭعى $1 ساعاتتا قۇپييا سٶز ەسكەرتۋ حاتى جٸبەرٸلدٸ تٷگە.
+قيياناتشىلىققا كەدەرگٸ بولۋ ٷشٸن, $1 ساعات سايىن تەك بٸر عانا قۇپييا سٶز ەسكەرتۋ
+حاتى جٸبەرٸلەدٸ.',
+'mailerror'                  => 'حات جٸبەرۋ قاتەسٸ: $1',
+'acct_creation_throttle_hit' => 'عافۋ ەتٸڭٸز, سٸز $1 تٸركەلگٸ جاساپسىز تٷگە. ونان ارتىق ٸستەي المايسىز.',
+'emailauthenticated'         => 'ە-پوشتا جايىڭىز كۋٵلاندىرىلعان كەزٸ: $1.',
+'emailnotauthenticated'      => 'ە-پوشتا جايىڭىز ٵلٸ كۋٵلاندىرعان جوق.
+تٶمەندەگٸ قاسيەتتتەر ٷشٸن ەشقانداي حات جٸبەرٸلمەيدٸ.',
+'noemailprefs'               => 'وسى قاسيەتتەر ٸستەۋٸ ٷشٸن ە-پوشتا جايىڭىزدى ەنگٸزٸڭٸز.',
+'emailconfirmlink'           => 'ە-پوشتا جايىڭىزدى كۋٵلاندىرىڭىز',
+'invalidemailaddress'        => 'وسى ە-پوشتا جايدا جارامسىز پٸشٸم بولعان, قابىل ەتٸلمەيدٸ.
+دۇرىس پٸشٸمدەلگەن جايدى ەنگٸزٸڭٸز, نە اۋماقتى بوس قالدىرىڭىز.',
+'accountcreated'             => 'تٸركەلگٸ جاسالدى',
+'accountcreatedtext'         => '$1 ٷشٸن قاتىسۋشى تٸركەلگٸسٸ جاسالدى.',
+
+# Password reset dialog
+'resetpass'               => 'تٸركەلگٸنٸڭ قۇپييا سٶزٸن بۇرىنعى قالىپىنا كەلتٸرۋ',
+'resetpass_announce'      => 'حاتپەن جٸبەرٸلگەن ۋاقىتشا بەلگٸلەمەمەن كٸرٸپسٸز. تٸركەلۋدٸ بٸتٸرۋ ٷشٸن جاڭا قۇپييا سٶزٸڭٸزدٸ مىندا ەنگٸزٸڭٸز:',
+'resetpass_header'        => 'قۇپييا سٶزدٸ بۇرىنعى قالىپىنا كەلتٸرۋ',
+'resetpass_submit'        => 'قۇپييا سٶزدٸ قالاڭىز دا كٸرٸڭٸز',
+'resetpass_success'       => 'قۇپييا سٶزٸڭٸز سٵتتٸ ٶزگەرتٸلدٸ! ەندٸ كٸرٸڭٸز…',
+'resetpass_bad_temporary' => 'ۋاقىتشا قۇپييا سٶز جارامسىز. مٷمكٸن قۇپييا سٶزٸڭٸزدٸ ٶزگەرتكەن بولارسىز نەمەسە جاڭا ۋاقىتشا قۇپييا سٶز سۇراعان بولارسىز.',
+'resetpass_forbidden'     => 'بۇل ۋيكيدە قۇپييا سٶزدەر ٶزگەرتٸلمەيدٸ',
+'resetpass_missing'       => 'ٷلگٸت دەرەكتەرٸ جوق.',
+
+# Edit page toolbar
+'bold_sample'     => 'جۋان مٵتٸن',
+'bold_tip'        => 'جۋان مٵتٸن',
+'italic_sample'   => 'قيعاش مٵتٸن',
+'italic_tip'      => 'قيعاش مٵتٸن',
+'link_sample'     => 'سٸلتەمە اتاۋى',
+'link_tip'        => 'ٸشكٸ سٸلتەمە',
+'extlink_sample'  => 'http://www.example.com سٸلتەمە اتاۋى',
+'extlink_tip'     => 'سىرتقى سٸلتەمە (الدىنان http:// ەنگٸزۋٸن ۇمىتپاڭىز)',
+'headline_sample' => 'تاقىرىپ مٵتٸنٸ',
+'headline_tip'    => '1-شٸ دەڭگەيلٸ تاقىرىپ',
+'math_sample'     => 'فورمۋلانى مىندا ەنگٸزٸڭٸز',
+'math_tip'        => 'ماتەماتيكا فورمۋلاسى (LaTeX)',
+'nowiki_sample'   => 'پٸشٸمدەلمەيتٸن مٵتٸندٸ وسىندا ەنگٸزٸڭٸز',
+'nowiki_tip'      => 'ۋيكي پٸشٸمٸن ەلەمەۋ',
+'image_sample'    => 'Example.jpg',
+'image_tip'       => 'كٸرٸكتٸرٸلگەن سۋرەت',
+'media_sample'    => 'Example.ogg',
+'media_tip'       => 'تاسپا فايلىنىڭ سٸلتەمەسٸ',
+'sig_tip'         => 'قولتاڭباڭىز جٵنە ۋاقىت بەلگٸسٸ',
+'hr_tip'          => 'دەرەلەي سىزىق (ٷنەمدٸ قولدانىڭىز)',
+
+# Edit pages
+'summary'                   => 'سيپاتتاماسى',
+'subject'                   => 'تاقىرىبى/باسى',
+'minoredit'                 => 'بۇل شاعىن تٷزەتۋ',
+'watchthis'                 => 'بەتتٸ باقىلاۋ',
+'savearticle'               => 'بەتتٸ ساقتا!',
+'preview'                   => 'قاراپ شىعۋ',
+'showpreview'               => 'قاراپ شىعۋ',
+'showlivepreview'           => 'تۋرا قاراپ شىعۋ',
+'showdiff'                  => 'ٶزگەرٸستەردٸ كٶرسەت',
+'anoneditwarning'           => "'''نازار سالىڭىز:''' سٸز جٷيەگە كٸرمەگەنسٸز. IP جايىڭىز بۇل بەتتٸڭ ٶڭدەۋ تاريحىندا جازىلىپ الىنادى.",
+'missingsummary'            => "'''ەسكەرتۋ:''' تٷزەتۋ سيپاتتاماسىن ەنگٸزبەپسٸز. «ساقتاۋ» تٷيمەسٸن تاعى باسساڭىز, تٷزەتۋٸڭٸز مٵندەمەسٸز ساقتالادى.",
+'missingcommenttext'        => 'تٶمەندە مٵندەمەڭٸزدٸ ەنگٸزٸڭٸز.',
+'missingcommentheader'      => "'''ەسكەرتۋ:''' بۇل مٵندەمەگە تاقىرىپ/باسجول جەتٸستٸرمەپسٸز. ەگەر تاعى دا ساقتاۋ تٷيمەسٸن نۇقىساڭىز, تٷزەتۋٸڭٸز سولسىز ساقتالادى.",
+'summary-preview'           => 'سيپاتتاماسىن قاراپ شىعۋ',
+'subject-preview'           => 'تاقىرىبىن/باسىن قاراپ شىعۋ',
+'blockedtitle'              => 'پايدالانۋشى بۇعاتتالعان',
+'blockedtext'               => "<big>'''قاتىسۋشى اتىڭىز نە IP جايىڭىز بۇعاتتالعان.'''</big>
+
+بۇعاتتاۋدى $1 ٸستەگەن. بەلگٸلەنگەن سەبەبٸ: ''$2''.
+
+وسى بۇعاتتاۋدى تالقىلاۋ ٷشٸن $1 دەگەنمەن نە باسقا [[{{{{ns:mediawiki}}:grouppage-sysop}}|ٵكٸمشٸمەن]] قاتىناسۋىڭىزعا بولادى.
+[[{{ns:special}}:Preferences|تٸركەلگٸ باپتاۋلارىن]] قولدانىپ جارامدى ە-پوشتا جايىن ەنگٸزگەنشە دەيٸن
+«قاتىسۋشىعا حات جازۋ» قاسيەتٸن پايدالانىلمايسىز. اعىمدىق IP جايىڭىز: $3, جٵنە بۇعاتاۋى نٶمٸرٸ: $5. سونىڭ بٸرەۋٸن, نەمەسە ەكەۋٸن دە ٵربٸر سۇرانىسىڭىزعا قوسىڭىز.",
+'blockedoriginalsource'     => "تٶمەندە '''$1''' دەگەننٸڭ قاينارى كٶرسەتٸلەدٸ:",
+'blockededitsource'         => "تٶمەندە '''$1''' دەگەنگە جاسالعان '''تٷزەتۋڭٸزدٸڭ''' مٵتٸنٸ كٶرسەتٸلەدٸ:",
+'whitelistedittitle'        => 'ٶڭدەۋ ٷشٸن كٸرۋٸڭٸز جٶن.',
+'whitelistedittext'         => 'بەتتەردٸ ٶڭدەۋ ٷشٸن $1 جٶن.',
+'whitelistreadtitle'        => 'وقۋ ٷشٸن كٸرۋٸڭٸز جٶن',
+'whitelistreadtext'         => 'بەتتەردٸ وقۋ ٷشٸن [[{{ns:special}}:Userlogin|كٸرۋٸڭٸز]] جٶن.',
+'whitelistacctitle'         => 'سٸزگە تٸركەلگٸ جاساۋعا رۇقسات بەرٸلمەگەن',
+'whitelistacctext'          => 'وسى ۋيكيدە باسقالارعا تٸركەلگٸ جاساۋ ٷشٸن [[{{ns:special}}:Userlogin|كٸرۋٸڭٸز]] قاجەت جٵنە جاناسىمدى رۇقساتتارىن بيلەۋ قاجەت.',
+'confirmedittitle'          => 'ە-پوشتا جايىن كۋٵلاندىرۋ حاتىن قايتا ٶڭدەۋ قاجەت',
+'confirmedittext'           => 'بەتتەردٸ ٶڭدەۋ ٷشٸن الدىن الا ە-پوشتا جايىڭىزدى كۋٵلاندىرۋىڭىز قاجەت. جايىڭىزدى [[{{ns:Special}}:Preferences|قاتىسۋشى باپتاۋى]] ارقىلى ەنگٸزٸڭٸز جٵنە تەكسەرتكٸڭٸز.',
+'nosuchsectiontitle'        => 'بۇل بٶلٸم ەمەس',
+'nosuchsectiontext'         => "جوق بٶلٸمدٸ ٶڭدەۋدٸ تالاپ ەتٸپسٸز. مىندا \$1 دەگەن بٶلٸم جوق ەكەن, ٶڭدەۋلەرٸڭٸزدٸ ساقتاۋ ٷشٸن ورىن جوق.",
+'loginreqtitle'             => 'كٸرۋٸڭٸز قاجەت',
+'loginreqlink'              => 'كٸرۋ',
+'loginreqpagetext'          => 'باسقا بەتتەردٸ كٶرۋ ٷشٸن سٸز $1 بولۋىڭىز قاجەت.',
+'accmailtitle'              => 'قۇپييا سٶز جٸبەرٸلدٸ.',
+'accmailtext'               => '$2 جايىنا «$1» قۇپييا سٶزٸ جٸبەرٸلدٸ.',
+'newarticle'                => '(جاڭا)',
+'newarticletext'            => 'سٸلتەمەگە ەرٸپ ٵلٸ باستالماعان بەتكە
+كەلٸپسٸز. بەتتٸ باستاۋ ٷشٸن, تٶمەندەگٸ اۋماقتا مٵتٸنٸڭٸزدٸ
+تەرٸڭٸز (كٶبٸرەك اقپارات ٷشٸن [[{{{{ns:mediawiki}}:helppage}}|انىقتاما بەتٸن]]
+قاراڭىز).ەگەر جاڭىلعاننان وسىندا كەلگەن بولساڭىز, شولعىشىڭىز
+«ارتقا» دەگەن تٷيمەسٸن نۇقىڭىز.',
+'anontalkpagetext'          => "----''بۇل تٸركەلگٸسٸز (نەمەسە تٸركەلگٸسٸن قولدانباعان) پايدالانۋشىنىڭ تالقىلاۋ بەتٸ. وسى پايدالانۋشىنى بٸز تەك ساندىق IP جايىمەن تەڭدەستٸرەمٸز. وسىنداي IP جايلار بٸرنەشە پايدالانۋشىعا ورتاق بولۋى مٷمكٸن. ەگەر سٸز تٸركەلگٸسٸز پايدالانۋشى بولساڭىز جٵنە سٸزگە قاتىسسىز مٵندەمەلەر جٸبەرٸلگەنٸن سەزسەڭٸز, باسقا تٸركەلگٸسٸز پايدالانۋشىلارمەن ارالاستىرماۋى ٷشٸن [[{{ns:special}}:Userlogin|تٸركەلگٸ جاساڭىز نە كٸرٸڭٸز]].''",
+'noarticletext'             => 'بۇل بەتتە اعىمدا ەش مٵتٸن جوق, باسقا بەتتەردەن وسى بەت اتاۋىن [[{{ns:special}}:Search/{{PAGENAME}}|ٸزدەپ كٶرۋٸڭٸزگە]] نەمەسە وسى بەتتٸ [{{fullurl:{{FULLPAGENAME}}|action=edit}} تٷزەتۋٸڭٸزگە] بولادى.',
+'clearyourcache'            => "'''اڭعارتپا:''' ساقتاعاننان كەيٸن ٶزگەرٸستەردٸ كٶرۋ ٷشٸن شولعىش قوسالقى قالتاسىن بوساتۋ كەرەگٸ مٷمكٸن. '''Mozilla  / Safari:''' ''Shift'' پەرنەسٸن باسىپ تۇرىپ ''Reload'' (''قايتا جٷكتەۋ'') تٷيمەسٸن نۇقىڭىز (نە ''Ctrl-Shift-R'' باسىڭىز); ''IE:'' ''Ctrl-F5'' باسىڭىز; '''Opera / Konqueror''' ''F5'' پەرنەسٸن باسىڭىز.",
+'usercssjsyoucanpreview'    => '<strong>باسالقى:</strong> ساقتاۋ الدىندا جاڭا CSS/JS فايلىن تەكسەرۋ ٷشٸن «قاراپ شىعۋ» تٷيمەسٸن قولدانىڭىز.',
+'usercsspreview'            => "'''مىناۋ CSS مٵتٸنٸن تەك قاراپ شىعۋ ەكەنٸن ۇمىتپاڭىز, ول ٵلٸ ساقتالعان جوق!'''",
+'userjspreview'             => "'''مىناۋ JavaScript قاتىسۋشى باعدارلاماسىن تەكسەرۋ/قاراپ شىعۋ ەكەنٸن ۇمىتپاڭىز, ول ٵلٸ ساقتالعان جوق!'''",
+'userinvalidcssjstitle'     => "'''نازار سالىڭىز:''' بۇل «$1» دەگەن بەزەندٸرۋ مٵنەرٸ ەمەس. پايدالانۋشىنىڭ .css جٵنە .js فايل اتاۋى كٸشٸ ٵرٸپپپەن جازىلۋ تيٸستٸ ەكەنٸن ۇمىتپاڭىز, مىسالعا {{ns:user}}:Foo/monobook.css دەگەندٸ {{ns:user}}:Foo/Monobook.css دەگەنمەن سالىستىرىپ قاراڭىز.",
+'updated'                   => '(جاڭارتىلعان)',
+'note'                      => '<strong>اڭعارتپا:</strong>',
+'previewnote'               => '<strong>مىناۋ تەك قاراپ شىعۋ ەكەنٸن ۇمىتپاڭىز; تٷزەتۋلەر ٵلٸ ساقتالعان جوق!</strong>',
+'previewconflict'           => 'بۇل قاراپ شىعۋ جوعارىداعى ٶڭدەۋ اۋماعىنداعى مٵتٸنگە ساقتاعان كەزٸندەگٸ دەي ىقپال ەتەدٸ.',
+'session_fail_preview'      => '<strong>عافۋ ەتٸڭٸز! سەسسييا دەرەكتەرٸ ىسىراپ قالعاندىقتان ٶڭدەۋٸڭٸزدٸ جٶندەي المايمىز.
+مٵتٸنٸڭٸزدٸ ساقتاپ قايتالاپ كٶرٸڭٸز. ەگەر ٵلٸ ٸس ٶتپەيتٸن بولسا, شىعىپ جٵنە كەرٸ كٸرٸپ كٶرٸڭٸز.</strong>',
+'session_fail_preview_html' => "<strong>عافۋ ەتٸڭٸز! سەسسييا دەرەكتەرٸ ىسىراپ قالعاندىقتان ٶڭدەۋٸڭٸزدٸ جٶندەي المايمىز.</strong>
+
+''وسى ۋيكيدە قام HTML ەندٸرٸلگەن, JavaScript شابۋىلداردان قورعانۋ ٷشٸن الدىن الا قاراپ شىعۋ جاسىرىلعان.''
+
+<strong>ەگەر بۇل ٶڭدەۋ ادال تالاپ بولسا, قايتارىپ كٶرٸڭٸز. ەگەر ٵلٸ دە ٸستەمەسە, شىعىپ, سوسىن كەرٸ كٸرٸپ كٶرٸڭٸز.</strong>",
+'importing'                 => 'سىرتتان الۋدا: $1',
+'editing'                   => 'ٶڭدەلۋدە: $1',
+'editinguser'               => 'ٶڭدەلۋدە: <b>$1</b> دەگەن قاتىسۋشى',
+'editingsection'            => 'ٶڭدەلۋدە: $1 (بٶلٸمٸ)',
+'editingcomment'            => 'ٶڭدەلۋدە: $1 (مٵندەمەسٸ)',
+'editconflict'              => 'ٶڭدەۋ قاقتىعىسى: $1',
+'explainconflict'           => 'وسى بەتتٸ سٸز ٶڭدەي باستاعاندا باسقا كەيبٸرەۋ بەتتٸ ٶزگەرتكەن.
+جوعارعى اۋماقتا بەتتٸڭ اعىمدىق مٵتٸنٸ بار.
+تٶمەنگٸ اۋماقتا سٸز ٶزگەرتكەن مٵتٸنٸ كٶرسەتٸلەدٸ.
+ٶزگەرتۋٸڭٸزدٸ اعىمدىق مٵتٸنگە ٷستەۋٸڭٸز جٶن.
+"بەتتٸ ساقتا!" تٷيمەسٸنە باسقاندا
+<b>تەك</b> جوعارعى اۋماقتاعى مٵتٸن ساقتالادى.<br />',
+'yourtext'                  => 'مٵتٸنٸڭٸز',
+'storedversion'             => 'ساقتالعان نۇسقاسى',
+'nonunicodebrowser'         => '<strong>اڭعارتپا: شولعىشىڭىز Unicode بەلگٸلەۋٸنە ٷيلەسٸمدٸ ەمەس, سوندىقتان لاتىن ەمەس ٵرٸپتەرٸ بار بەتتەردٸ ٶڭدەۋ زٸل بولۋ مٷمكٸن. جۇمىس ٸستەۋگە ىقتيمالدىق بەرۋ ٷشٸن, تٶمەنگٸ ٶڭدەۋ اۋماعىندا ASCII ەمەس ٵرٸپتەر ونالتىلىق سانىمەن كٶرسەتٸلەدٸ</strong>.',
+'editingold'                => '<strong>اڭعارتپا: وسى بەتتٸڭ ەرتەرەك نۇسقاسىن
+ٶڭدەپ جاتىرسىز.
+بۇنى ساقتاساڭىز, وسى نۋسقادان سوڭعى بارلىق تٷزەتۋلەر جويىلادى.</strong>',
+'yourdiff'                  => 'ايىرمالار',
+'copyrightwarning'          => '{{SITENAME}} جوباسىنا قوسىلعان بٷكٸل ٷلەس $2 (كٶبٸرەك اقپارات ٷشٸن: $1) قۇجاتىنا ساي جٸبەرٸلگەن بولىپ سانالادى. ەگەر جازۋىڭىزدىڭ ەركٸن كٶشٸرٸلٸپ تٷزەتٸلۋٸن قالاماساڭىز, مىندا ۇسىنباۋىڭىز جٶن.<br />
+تاعى, قوسقان ٷلەسٸڭٸز - ٶزٸڭٸزدٸڭ جازعانىعىز, نە اشىق اقپارات كٶزدەرٸنەن الىنعان ماعلۇمات بولعانىن ۋٵدە ەتەسٸز.<br />
+<strong>اۆتورلىق قۇقىقپەن قورعاۋلى اقپاراتتى رۇقساتسىز قوسپاڭىز!</strong>',
+'copyrightwarning2'         => 'ەستە تۇرسىن: بارلىق {{SITENAME}} جوباسىنا بەرٸلگەن ٷلەستەر باسقا ۋلەس بەرۋشٸلەرمەن تٷزەتۋگە, ٶزگەرتۋگە, نە الاستانۋعا مٷمكٸن. العىسسىز تٷزەتۋگە ەنجارلان بولساڭىز, وندا شىعارماڭىزدى مىندا جارييالاماڭىز.<br />
+تاعى, وسىنى ٶزٸڭٸز جازعانىڭىزدى, نە بارشا قازىناسىنان, نەمەسە سونداي-اق اقىسىز اشىق قاينارىنان كٶشٸرگەنٸڭٸزدٸ
+دٵل وسىنداي بٸزگە مٸندەتتەمە بەرەسٸز (كٶبٸرەك اقپارات ٷشٸن $1 قۋجاتىن قاراڭىز).<br />
+<strong>اۋتورلىق قۇقىقپەن قورعاۋلى اقپاراتتى رۇقساتسىز قوسپاڭىز!</strong>',
+'longpagewarning'           => '<strong>نازار سالىڭىز: بۇل بەتتٸڭ مٶلشەرٸ — $1 KB; كەيبٸر
+شولعىشتاردا بەت مٶلشەرٸ 32 KB جەتسە نە ونى اسسا ٶڭدەۋ كٷردەلٸ بولۋى مٷمكٸن.
+بەتتٸ بٸرنەشە كٸشكٸن بٶلٸمدەرگە بٶلٸپ كٶرٸڭٸز.</strong>',
+'longpageerror'             => '<strong>قاتە: جٸبەرەتٸن مٵتٸنٸڭٸزدٸن مٶلشەرٸ — $1 KB, ەڭ كٶبٸ $2 KB
+رۇقسات ەتٸلگەن مٶلشەرٸنەن اسقان. بۇل ساقتاي الىنبايدى.</strong>',
+'readonlywarning'           => '<strong>نازار سالىڭىز: دەرەكقور جٶندەتۋ ٷشٸن قۇلىپتالعان,
+سوندىقتان دٵل قازٸر تٷزەتۋٸڭٸزدٸ ساقتاي المايسىز. سوسىن قولدانۋعا ٷشٸن مٵتٵنٸڭٸزدٸ كٶشٸرٸپ,
+ٶز كومپٷتەرٸڭٸزدە فايلعا ساقتاڭىز.</strong>',
+'protectedpagewarning'      => '<strong>نازار سالىڭىز: بۇل بەت قورعالعان. تەك ٵكٸمشٸ رۇقساتى بار قاتىسۋشىلار ٶڭدەۋ جاساي الادى.</strong>',
+'semiprotectedpagewarning'  => "'''اڭعارتپا:''' بەت جارتىلاي قورعالعان, سوندىقتان وسىنى تەك رۇقساتى بار قاتىسۋشىلار ٶڭدەي الادى.",
+'cascadeprotectedwarning'   => "'''نازار سالىڭىز''': بۇل بەت قۇلىپتالعان, ەندٸ تەك ٵكٸمشٸ قۇقىقتارى بار پايدالانۋشىلار بۇنى ٶڭدەي الادى.بۇنىڭ سەبەبٸ: بۇل بەت «باۋلى قورعاۋى» بار كەلەسٸ {{PLURAL:$1|بەتكە|بەتتەرگە}} كٸرٸكتٸرٸلگەن:",
+'templatesused'             => 'بۇل بەتتە قولدانىلعان ٷلگٸلەر:',
+'templatesusedpreview'      => 'بۇنى قاراپ شىعۋعا قولدانىلعان ٷلگٸلەر:',
+'templatesusedsection'      => 'بۇل بٶلٸمدە قولدانىلعان ٷلگٸلەر:',
+'template-protected'        => '(قورعالعان)',
+'template-semiprotected'    => '(جارتىلاي قورعالعان)',
+'edittools'                 => '<!-- مىنداعى ماعلۇمات ٶڭدەۋ جٵنە قوتارۋ ٷلگٸتترٸڭٸڭ استىندا كٶرسەتٸلەدٸ. -->',
+'nocreatetitle'             => 'بەتتٸ باستاۋ شەكتەلگەن',
+'nocreatetext'              => 'بۇل توراپتا جاڭا بەت باستاۋى شەكتەلگەن.
+كەرٸ قايتىپ بار بەتتٸ ٶڭدەۋٸڭٸزگە بولادى, نەمەسە [[{{ns:special}}:Userlogin|كٸرۋٸڭٸزگە نە تٸركەلگٸ جاساۋعا]] بولادى.',
+
+# "Undo" feature
+'undo-success' => 'بۇل ٶڭدەۋدٸڭ بولدىرماۋى اتقارىلادى. تالابىڭىزدى بٸلٸپ تۇرىپ الدىن الا تٶمەندەگٸ سالىستىرۋدى تەكسەرٸپ شىعىڭىز دا, تٷزەتۋ بولدىرماۋىن بٸتٸرۋ ٷشٸن تٶمەندەگٸ ٶزگەرٸستەردٸ ساقتاڭىز.',
+'undo-failure' => 'بۇل ٶڭدەۋدٸڭ بولدىرماۋى اتقارىلمايدى, سەبەبٸ: كەدەرگٸ جاساعان ارالاس تٷزەتۋلەر بار.',
+'undo-summary' => '[[{{ns:special}}:Contributions/$2|$2]] ([[{{ns:user_talk}}:$2|تالقىلاۋى]]) ٸستەگەن $1 نۇسقاسىن بولدىرماۋ',
+
+# Account creation failure
+'cantcreateaccounttitle' => 'تٸركەلگٸ جاسالمادى',
+'cantcreateaccounttext'  => 'وسى IP جايدان (<b>$1</b>) تٸركەلگٸ جاساۋى بۇعاتتالعان.
+بٵلكٸم سەبەبٸ, وقۋ ورنىڭىزدان, نەمەسە ينتەرنەت جەتكٸزۋشٸدەن
+ٷزبەي بۇزاقىلىق بولعانى.',
+
+# History pages
+'revhistory'                  => 'نۇسقالار تاريحى',
+'viewpagelogs'                => 'وسى بەتكە قاتىستى جۋرنالداردى قاراۋ',
+'nohistory'                   => 'وسى بەتتٸنٸڭ نۇسقالار تاريحى جوق.',
+'revnotfound'                 => 'نۇسقا تابىلمادى',
+'revnotfoundtext'             => 'وسى سۇرانىسقان بەتتٸڭ ەسكٸ نۇسقاسى تابىلعان جوق.
+وسى بەتتٸ اشۋعا پايدالانعان URL جايىن قايتا تەكسەرٸپ شىعىڭىز.',
+'loadhist'                    => 'بەت تاريحىن جٷكتەۋٸ',
+'currentrev'                  => 'اعىمدىق نۇسقاسى',
+'revisionasof'                => '$1 كەزٸندەگٸ نۇسقاسى',
+'revision-info'               => '$1 كەزٸندەگٸ $2 جاساعان نۇسقاسى',
+'previousrevision'            => '← ەسكٸلەۋ نۇسقاسى',
+'nextrevision'                => 'جاڭالاۋ نۇسقاسى →',
+'currentrevisionlink'         => 'اعىمدىق نۇسقاسى',
+'cur'                         => 'اعىم.',
+'next'                        => 'كەل.',
+'last'                        => 'سوڭ.',
+'orig'                        => 'تٷپ.',
+'page_first'                  => 'العاشقىسىنا',
+'page_last'                   => 'سوڭعىسىنا',
+'histlegend'                  => 'ايىرماسىن كٶرۋ: سالىستىرامىن دەگەن نۇسقالاردى تاڭداپ, نە <Enter> پەرنەسٸن, نە تٶمەندەگٸ تٷيمەنٸ باسىڭىز.<br />
+شارتتى بەلگٸلەر: (اعىم.) = اعىمدىق نۇسقامەن ايىرماسى,
+(سوڭ.) = الدىڭعى نۇسقامەن ايىرماسى, ش = شاعىن تٷزەتۋ',
+'deletedrev'                  => '[جويىلعان]',
+'histfirst'                   => 'ەڭ العاشقىسىنا',
+'histlast'                    => 'ەڭ سوڭعىسىنا',
+'historysize'                 => '($1 B)',
+'historyempty'                => '(بوس)',
+
+# Revision feed
+'history-feed-title'          => 'نۇسقا تاريحى',
+'history-feed-description'    => 'مىنا ۋيكيدەگٸ بۇل بەتتٸڭ نۇسقا تاريحى',
+'history-feed-item-nocomment' => '$2 كەزٸندەگٸ $1 دەگەن', # user at time
+'history-feed-empty'          => 'سۇرانىسقان بەت جوق بولدى.
+ول مىنا ۋيكيدەن جويىلعان, نەمەسە اتاۋى اۋىستىرىلعان.
+وسىعان قاتىستى جاڭا بەتتەردٸ [[{{ns:special}}:Search|بۇل ۋيكيدەن ٸزدەپ]] كٶرٸڭٸز.',
+
+# Revision deletion
+'rev-deleted-comment'         => '(مٵندەمە الاستاتىلدى)',
+'rev-deleted-user'            => '(قاتىسۋشى اتى الاستاتىلدى)',
+'rev-deleted-event'           => '(جازبا جويىلدى)',
+'rev-deleted-text-permission' => '<div class="mw-warning plainlinks">
+وسى بەتتٸڭ نۇسقاسى جارييا مۇراعاتتارىنان الاستاتىلعان.
+بۇل جايتقا [{{fullurl:{{ns:special}}:Log/delete|page={{FULLPAGENAMEE}}}} جويۋ جۋرنالىندا] ەگجەي-تەگجەي مٵلٸمەتتەرٸ بولۋى مٷمكٸن.
+</div>',
+'rev-deleted-text-view'       => '<div class="mw-warning plainlinks">
+وسى بەتتٸڭ نۇسقاسى جارييا مۇراعاتتارىنان الاستاتىلعان.
+سونى وسى توراپتىڭ ٵكٸمشٸسٸ بوپ كٶرۋٸڭٸز مٷمكٸن;
+بۇل جايتقا [{{fullurl:{{ns:special}}:Log/delete|page={{FULLPAGENAMEE}}}} جويۋ جۋرنالىندا] ەگجەي-تەگجەي مٵلمەتتەرٸ بولۋى مٷمكٸن.
+</div>',
+'rev-delundel'                => 'كٶرسەت/جاسىر',
+'revisiondelete'            => 'نۇسقالاردى جويۋ/قايتارۋ',
+'revdelete-nooldid-title'   => 'نىسانا نۇسقاسى جوق',
+'revdelete-nooldid-text'      => 'وسى ٵرەكەتتٸ ورىنداۋ ٷشٸن اقىرعى نۇسقاسىننە نۇسقالارىن ەنگٸزبەپسٸز.',
+'revdelete-selected'          => "'''$1:''' دەگەننٸڭ {{PLURAL:$2|تالعانىلعان نۇسقاسى|تالعانىلعان نۇسقالارى}}:",
+'logdelete-selected'          => "'''$1:''' دەگەننٸڭ {{PLURAL:$2|تالعانىلعان جۋرنال جازباسى|تالعانىلعان جۋرنال جازبالارى}}:",
+'revdelete-text'              => 'جويىلعان نۇسقالار مەن جازبالاردى ٵلٸ دە بەت تاريحىندا جٵنە جۋرنالداردا تابۋعا بولادى,
+بٸراق ولاردىڭ ماعلۇمات بٶلشەكتەرٸ بارشاعا قاتىنالمايدى.
+
+وسى ۋيكيدٸڭ باسقا ٵكٸمشٸلەرٸ جاسىرىن ماعلۇماتقا قاتىناي الادى, جٵنە قوسىمشا شەكتەۋ
+ەندٸرٸلگەنشە دەيٸن, وسى تٸلدەسۋ ارقىلى جويىلعان ماعلۇماتتى كەرٸ قايتارا الادى.',
+'revdelete-legend'            => 'شەكتەۋلەردٸ ورناتۋ:',
+'revdelete-hide-text'         => 'نۇسقا مٵتٸنٸن جاسىر',
+'revdelete-hide-name'         => 'ٵرەكەت پەن ماقساتىن جاسىر',
+'revdelete-hide-comment'      => 'تٷزەتۋ مٵندەمەسٸن جاسىر',
+'revdelete-hide-user'         => 'ٶڭدەۋشٸ اتىن (IP جايىن) جاسىر',
+'revdelete-hide-restricted'   => 'وسى شەكتەۋلەردٸ بارشاعا سيياقتى ٵكٸمشٸلەرگە دە قولدانۋ',
+'revdelete-suppress'          => 'ٵكٸمشٸلەر جاساعان ماعلۇماتتى باسقالارشا پەردەلەۋ',
+'revdelete-hide-image'      => 'فايل ماعلۇماتىن جاسىر',
+'revdelete-unsuppress'        => 'قايتارىلعان نۇسقالاردان شەكتەۋلەردٸ الاستاتۋ',
+'revdelete-log'               => 'جۋرنال مٵندەمەسٸ:',
+'revdelete-submit'          => 'تالعانعان نۇسقاعا قولدانۋ',
+'revdelete-logentry'          => '[[$1]] دەگەننٸڭ نۇسقا كٶرٸنٸسٸن ٶزگەرتتٸ',
+'logdelete-logentry'          => '[[$1]] دەگەننٸڭ جازبا كٶرٸنٸسٸن ٶزگەرتتٸ',
+'revdelete-logaction'         => '{{plural:$1|نۇسقانى|$1 نۇسقانى}} $2 كٷيٸنە قويدى',
+'logdelete-logaction'         => '[[$3]] دەگەننٸڭ {{plural:$1|جازباسىن|$1 جازباسىن}} $2 كٷيٸنە قويدى',
+'revdelete-success'           => 'نۇسقا كٶرٸنٸسٸ سٵتتٸ قويىلدى.',
+'logdelete-success'           => 'جازبا كٶرٸنٸسٸ سٵتتٸ قويىلدى.',
+
+# Oversight log
+'oversightlog'              => 'تەكسەرۋشٸ جۋرنالى',
+'overlogpagetext'           => 'تٶمەندە ٵكٸمشٸلەر جاسىرعان ماعلۇماتقا ىقپال ەتەتٸن جۋىقتاعى بولعان جويۋ جٵنە بۇعاتتاۋ
+تٸزٸمٸ بەرٸلەدٸ. اعىمداعى امالدى بۇعاتتاۋ مەن تيىم ٷشٸن [[{{ns:special}}:Ipblocklist|IP بۇعاتتاۋ تٸزٸمٸن]] قاراڭىز.',
+
+# Diffs
+'difference'                => '(نۇسقالار اراسىنداعى ايىرماشىلىق)',
+'loadingrev'                => 'ايىرما ٷشٸن نۇسقا جٷكتەۋ',
+'lineno'                    => 'جول $1:',
+'editcurrent'               => 'وسى بەتتٸڭ اعىمدىق نۇسقاسىن ٶڭدەۋ',
+'selectnewerversionfordiff' => 'سالىستىرۋ ٷشٸن جاڭالاۋ نۇسقاسىن تالعاڭىز',
+'selectolderversionfordiff' => 'سالىستىرۋ ٷشٸن ەسكٸلەۋ نۇسقاسىن تالعاڭىز',
+'compareselectedversions'   => 'تاڭداعان نۇسقالاردى سالىستىرۋ',
+'editundo'                  => 'بولدىرماۋ',
+'diff-multi'                => '(اراداعى {{plural:$1|بٸر نۇسقا|$1 نۇسقا}} كٶرسەتٸلمەدٸ.)',
+
+# Search results
+'searchresults'         => 'ٸزدەستٸرۋ نٵتيجەلەرٸ',
+'searchresulttext'      => '{{SITENAME}} جوباسىندا ٸزدەستٸرۋ تۋرالى كٶبٸرەك اقپارات ٷشٸن, [[{{{{ns:mediawiki}}:helppage}}|{{int:help}}]] قاراڭىز.',
+'searchsubtitle'        => "ٸزدەستٸرۋ سۇرانىسىڭىز: '''[[:$1]]'''",
+'searchsubtitleinvalid' => "ٸزدەستٸرۋ سۇرانىسىڭىز: '''$1'''",
+'badquery'              => 'ٸزدەستٸرۋ سۇرانىس جارامسىز پٸشٸمدەلگەن',
+'badquerytext'          => 'عافۋ ەتٸڭٸز, سۇرانىسىڭىزدى ورىنداي المادىق.
+بۇل ٷش ٵرٸپتەن كەم سٶزدٸ ٸزدەستٸرۋگە تالاپتانعانىڭىزدان
+بولۋعا مٷمكٸن, ول ٵلٸ دە سٷيەمەلدەنبەگەن.
+تاعى دا بۇل سٶيلەمدٸ دۇرىس ەنگٸزبەگەندٸكتەن دە بولۋعا مٷمكٸن,
+مىسالى, «بالىق جٵنە جٵنە قابىرشاق».
+باسقا سۇرانىس جاساپ كٶرٸڭٸز',
+'matchtotals'           => '«$1» ٸزدەستٸرۋ سۇرانىسى $2 بەتتٸڭ اتاۋىنا
+جٵنە $3 بەتتٸڭ مٵتٸنٸنە سٵيكەس.',
+'noexactmatch'          => "'''وسىندا «$1» اتاۋلى بەت جوق.''' بۇل بەتتٸ ٶزٸڭٸز '''[[:$1|باستاي  الاسىز]].'''",
+'titlematches'          => 'بەت اتاۋى سٵيكەسٸ',
+'notitlematches'        => 'ەش بەت اتاۋى سٵيكەس ەمەس',
+'textmatches'           => 'بەت مٵتٸنٸڭ سٵيكەسٸ',
+'notextmatches'         => 'ەش بەت مٵتٸنٸ سٵيكەس ەمەس',
+'prevn'                 => 'الدىڭعى $1',
+'nextn'                 => 'كەلەسٸ $1',
+'viewprevnext'          => 'كٶرسەتٸلۋٸ: ($1) ($2) ($3) جازبا.',
+'showingresults'        => "تٶمەندە نٶمٸر '''$2''' ورنىنان باستاپ, جەتكەنشە {{PLURAL:$1|'''1''' نٵتيجە|'''$1''' نٵتيجە}} كٶرسەتٸلگەن.",
+'showingresultsnum'     => "تٶمەندە نٶمٸر '''$2''' ورنىنان باستاپ {{PLURAL:$3|'''1''' نٵتيجە|'''$3''' نٵتيجە}} كٶرسەتٸلگەن.",
+'nonefound'             => "'''اڭعارتپا''': تابۋ سٵتسٸز بٸتۋٸ جيٸ «بولعان» جٵنە «دەگەن» سيياقتى
+تٸزٸمدەلمەيتٸن جالپى سٶزدەرمەن ٸزدەستٸرۋدەن بولۋى مٷمكٸن,
+نەمەسە بٸردەن ارتىق ٸزدەستٸرۋ شارت سٶزدەرٸن ەگٸزگەننەن (نٵتيجەلەردە تەك
+بارلىق شارت سٶزدەر كەدەسسە كٶرسەتٸلەدٸ) بولۋى مٷمكٸن.",
+'powersearch'           => 'ٸزدەۋ',
+'powersearchtext'       => 'مىنا ەسٸم ايالاردا ٸزدەۋ:<br />$1<br />$2 ايداتۋلاردى تٸزٸمدەۋ<br />ٸزدەستٸرۋ سۇرانىسى: $3 $9',
+'searchdisabled'        => '{{SITENAME}} جوباسىندا ٸشكٸ ٸزدەۋٸ ٶشٸرٸلگەن. ٵزٸرشە Google نەمەسە Yahoo! ارقىلى ٸزدەۋگە بولادى. اڭعارتپا: {{SITENAME}} ماعلۇمات تٸزٸمٸدەۋلەرٸ ولاردا ەسكٸرگەن بولۋعا مٷمكٸن.',
+'blanknamespace'        => '(نەگٸزگٸ)',
+
+# Preferences page
+'preferences'              => 'باپتاۋلار',
+'mypreferences'            => 'باپتاۋىم',
+'prefsnologin'             => 'كٸرمەگەنسٸز',
+'prefsnologintext'         => 'باپتاۋلاردى قالاۋ ٷشٸن الدىن الا [[{{ns:special}}:Userlogin|كٸرۋٸڭٸز]] قاجەت.',
+'prefsreset'               => 'باپتاۋلار ارقاۋدان قايتا ورناتىلدى.',
+'qbsettings'               => 'مٵزٸر ايماعى',
+'qbsettings-none'          => 'ەشقانداي',
+'qbsettings-fixedleft'     => 'سولعا بەكٸتٸلگەن',
+'qbsettings-fixedright'    => 'وڭعا بەكٸتٸلگەن',
+'qbsettings-floatingleft'  => 'سولعا قالقىعان',
+'qbsettings-floatingright' => 'وڭعا قالقىعان',
+'changepassword'           => 'قۇپييا سٶز ٶزگەرتۋ',
+'skin'                     => 'بەزەندٸرۋ',
+'math'                     => 'ماتەماتيكا',
+'dateformat'               => 'كٷن-اي پٸشٸمٸ',
+'datedefault'              => 'ەش قالاۋسىز',
+'datetime'                 => 'ۋاقىت',
+'math_failure'             => 'ٶڭدەتۋ سٵتسٸز بٸتتٸ',
+'math_unknown_error'       => 'بەلگٸسٸز قاتە',
+'math_unknown_function'    => 'بەلگٸسٸز فۋنكتسييا',
+'math_lexing_error'        => 'لەكسيكا قاتەسٸ',
+'math_syntax_error'        => 'سينتاكسيس قاتەسٸ',
+'math_image_error'         => 'PNG اۋدارىسى سٵتسٸز بٸتتٸ; latex, dvips, gs جٵنە convert باعدارلامالارىنىڭ مٷلتٸكسٸز ورناتۋىن تەكسەرٸڭٸز',
+'math_bad_tmpdir'          => 'ماتەماتيكانىڭ ۋاقىتشا قالتاسىنا جازىلمادى, نە قالتا جاسالمادى',
+'math_bad_output'          => 'ماتەماتيكانىڭ بەرٸس قالتاسىنا جازىلمادى, نە قالتا جاسالمادى',
+'math_notexvc'             => 'texvc باعدارلاماسى جوعالتىلعان; باپتاۋ ٷشٸن math/README قۇجاتىن قاراڭىز.',
+'prefs-personal'           => 'جەكە دەرەكتەرٸ',
+'prefs-rc'                 => 'جۋىقتاعى ٶزگەرٸستەر',
+'prefs-watchlist'          => 'باقىلاۋ',
+'prefs-watchlist-days'     => 'باقىلاۋ تٸزٸمٸندە كٶرسەتەرٸن كٷن سانى:',
+'prefs-watchlist-edits'    => 'كەڭەيتٸلگەن باقىلاۋ تٸزٸمٸ تٷزەتۋ كٶرسەتەرٸن سانى:',
+'prefs-misc'               => 'قوسىمشا',
+'saveprefs'                => 'ساقتا',
+'resetprefs'               => 'تاستا',
+'oldpassword'              => 'اعىمدىق قۇپييا سٶز:',
+'newpassword'              => 'جاڭا قۇپييا سٶز:',
+'retypenew'                => 'جاڭا قۇپييا سٶزدٸ قايتالاڭىز:',
+'textboxsize'              => 'ٶڭدەۋ',
+'rows'                     => 'جولدار:',
+'columns'                  => 'باعاندار:',
+'searchresultshead'        => 'ٸزدەۋ',
+'resultsperpage'           => 'بەت سايىن نٵتيجە سانى:',
+'contextlines'             => 'نٵتيجە سايىن جول سانى:',
+'contextchars'             => 'جول سايىن ٵرٸپ سانى:',
+'stubthreshold'            => 'بٸتەمە كٶرستەتۋٸن انىقتاۋ تابالدىرىعى:',
+'recentchangesdays'        => 'جٷىقتاعى ٶزگەرٸستەردەگٸ كٶرسەتٸلەتٸن كٷندەر:',
+'recentchangescount'       => 'جۋىقتاعى ٶزگەرٸستەردەگٸ كٶرسەتٸلەتٸن تٷزەتۋلەر:',
+'savedprefs'               => 'باپتاۋلارىڭىز ساقتالدى.',
+'timezonelegend'           => 'ۋاقىت بەلدەۋٸ',
+'timezonetext'             => 'جەرگٸلٸكتٸ ۋاقىتىڭىزبەن سەرۆەر ۋاقىتىنىڭ (UTC) اراسىنداعى ساعات سانى.',
+'localtime'                => 'جەرگٸلٸكتٸ ۋاقىت',
+'timezoneoffset'           => 'ىعىستىرۋ¹',
+'servertime'               => 'سەرۆەر ۋاقىتى',
+'guesstimezone'            => 'شولعىشتان الىپ تولتىرۋ',
+'allowemail'               => 'باسقادان حات قابىلداۋىن ەندٸرۋ',
+'defaultns'                => 'مىنا ەسٸم ايالاردا ٵدەپكٸدەن ٸزدەۋ:',
+'default'                  => 'ٵدەپكٸ',
+'files'                    => 'فايلدار',
+
+# User rights
+'userrights-lookup-user'     => 'قاتىسۋشى توپتارىن مەڭگەرۋ',
+'userrights-user-editname'   => 'قاتىسۋشى اتىن ەنگٸزٸڭٸز:',
+'editusergroup'              => 'قاتىسۋشى توپتارىن ٶڭدەۋ',
+'userrights-editusergroup'   => 'قاتىسۋشى توپتارىن ٶڭدەۋ',
+'saveusergroups'             => 'قاتىسۋشى توپتارىن ساقتاۋ',
+'userrights-groupsmember'    => 'مٷشەلٸگٸ:',
+'userrights-groupsavailable' => 'قاتىناۋلى توپتار:',
+'userrights-groupshelp'      => 'قاتىسۋشىنى ٷستەيتٸن نە الاستاتىن توپتاردى تالعاڭىز.
+تالعاۋى ٶشٸرٸلگەن توپتار ٶزگەرتٸلٸمەيدٸ. توپتاردىڭ تالعاۋىن CTRL + سول جاق نۇقۋمەن ٶشٸرۋٸڭٸزگە بولادى.',
+'userrights-reason'          => 'ٶزگەرتۋ سەبەبٸ:',
+
+# Groups
+'group'            => 'توپ:',
+'group-bot'        => 'بوتتار',
+'group-sysop'      => 'ٵكٸمشٸلەر',
+'group-bureaucrat' => 'تٶرەشٸلەر',
+'group-all'        => '(بارلىعى)',
+
+'group-bot-member'        => 'بوت',
+'group-sysop-member'      => 'ٵكٸمشٸ',
+'group-bureaucrat-member' => 'تٶرەشٸ',
+
+'grouppage-bot'        => '{{ns:project}}:بوتتار',
+'grouppage-sysop'      => '{{ns:project}}:ٵكٸمشٸلەر',
+'grouppage-bureaucrat' => '{{ns:project}}:تٶرەشٸلەر',
+
+# User rights log
+'rightslog'      => 'قاتىسۋشى_قۇقىقتارى_جۋرنالى',
+'rightslogtext'  => 'بۇل پايدالانۋشىلار قۇقىقتارىن ٶزگەرتۋ جۋرنالى.',
+'rightslogentry' => ' $1 توپ مٷشەلگٸن $2 دەگەننەن $3 دەگەنگە ٶزگەرتتٸ',
+'rightsnone'     => '(ەشقانداي)',
+
+# Recent changes
+'nchanges'                          => '{{PLURAL:$1|بٸر تٷزەتۋ|$1 تٷزەتۋ}}',
+'recentchanges'                     => 'جۋىقتاعى ٶزگەرٸستەر',
+'recentchangestext'                 => 'بۇل بەتتە وسى ۋيكيدەگٸ بولعان جۋىقتاعى ٶزگەرٸستەر بايقالادى.',
+'recentchanges-feed-description'    => 'بۇل ارنامەنەن ۋيكيدەگٸ ەڭ سوڭعى ٶزگەرٸستەر قاداعالانادى.',
+'rcnote'                            => "$3 كەزٸنە دەيٸن — تٶمەندە سوڭعى {{PLURAL:$2|كٷندەگٸ|'''$2''' كٷندەگٸ}}, سوڭعى {{PLURAL:$1|'''1''' ٶزگەرٸس|'''$1''' ٶزگەرٸس}} كٶرسەتٸلگەن.",
+'rcnotefrom'                        => '<b>$2</b> كەزٸنەن بەرٸ — تٶمەندە ٶزگەرٸستەر <b>$1</b> دەيٸن كٶرسەتٸلگەن.',
+'rclistfrom'                        => '$1 كەزٸنەن بەرٸ — جاڭا ٶزگەرٸستەردٸ كٶرسەت.',
+'rcshowhideminor'                   => 'شاعىن تٷزەتۋدٸ $1',
+'rcshowhidebots'                    => 'بوتتاردى $1',
+'rcshowhideliu'                     => 'تٸركەلگەندٸ $1',
+'rcshowhideanons'                   => 'تٸركەلگٸسٸزدٸ $1',
+'rcshowhidepatr'                    => 'كٷزەتتەگٸ تٷزەتۋلەردٸ $1',
+'rcshowhidemine'                    => 'تٷزەتۋٸمدٸ $1',
+'rclinks'                           => 'سوڭعى $2 كٷندە بولعان, سوڭعى $1 ٶزگەرٸستٸ كٶرسەت<br />$3',
+'diff'                              => 'ايىرم.',
+'hist'                              => 'تار.',
+'hide'                              => 'جاسىر',
+'show'                              => 'كٶرسەت',
+'minoreditletter'                   => 'ش',
+'newpageletter'                     => 'ج',
+'boteditletter'                     => 'ب',
+'sectionlink'                       => '→',
+'number_of_watching_users_pageview' => '[باقىلاعان $1 قاتىسۋشى]',
+'rc_categories'                     => 'ساناتتارعا شەكتەۋ ("|" بەلگٸسٸمەن بٶلٸكتەڭٸز)',
+'rc_categories_any'                 => 'قايسىبٸر',
+
+# Recent changes linked
+'recentchangeslinked'          => 'قاتىستى تٷزەتۋلەر',
+'recentchangeslinked-noresult' => 'سٸلتەگەن بەتتەردە ايتىلمىش مەرزٸمدە ەشقانداي ٶزگەرٸس بولماعان.',
+'recentchangeslinked-summary'  => "بۇل ارنايى بەتتە سٸلتەگەن بەتتەردەگٸ جۋىقتاعى ٶزگەرٸستەر تٸزٸمٸ بەرٸلەدٸ. باقىلاۋ تٸزٸمٸڭٸزدەگٸ بەتتەر '''جۋان''' ٵرپٸمەن بەلگٸلەنەدٸ.",
+
+# Upload
+'upload'                      => 'فايل قوتارۋ',
+'uploadbtn'                   => 'قوتار!',
+'reupload'                    => 'قايتالاپ قوتارۋ',
+'reuploaddesc'                => 'قوتارۋ ٷلگٸتٸنە ورالۋ.',
+'uploadnologin'               => 'كٸرمەگەنسٸز',
+'uploadnologintext'           => 'فايل قوتارۋ ٷشٸن
+[[{{ns:special}}:Userlogin|كٸرۋٸڭٸز]] قاجەت.',
+'upload_directory_read_only'  => 'قوتارۋ قالتاسىنا ($1) جازۋعا ۆەب-سەرۆەرگە رۇقسات بەرٸلمەگەن.',
+'uploaderror'                 => 'قوتارۋ قاتەسٸ',
+'uploadtext'                  => "تٶمەندەگٸ ٷلگٸت فايل قوتارۋعا قولدانىلادى, الدىنداعى سۋرەتتەردٸ قاراۋ ٷشٸن نە ٸزدەۋ ٷشٸن [[{{ns:special}}:Imagelist|قوتارىلعان فايلدار تٸزٸمٸنە]] بارىڭىز, قوتارۋ مەن جويۋ تاعى دا [[{{ns:special}}:Log/upload|قوتارۋ جۋرنالىنا]] جازىلىپ الىنادى.
+
+سۋرەتتەردٸ بەتكە كٸرگٸزۋ ٷشٸن, فايلعا تۋرا بايلانىستراتىن
+'''<nowiki>[[</nowiki>{{ns:image}}<nowiki>:File.jpg]]</nowiki>''',
+'''<nowiki>[[</nowiki>{{ns:image}}<nowiki>:File.png|بالاما مٵتٸنٸ]]</nowiki>''' نەمەسە
+'''<nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki>''' سٸلتەمە پٸشٸمٸن قولدانىڭىز.",
+'uploadlog'                   => 'قوتارۋ جۋرنالى',
+'uploadlogpage'               => 'قوتارۋ جۋرنالى',
+'uploadlogpagetext'           => 'تٶمەندە جۋىقتاعى قوتارىلعان فايل تٸزٸمٸ.',
+'filename'                    => 'فايل اتى',
+'filedesc'                    => 'سيپاتتاماسى',
+'fileuploadsummary'           => 'سيپاتتاماسى:',
+'filestatus'                  => 'اۋتورلىق قۇقىقتارى كٷيٸ',
+'filesource'                  => 'فايل قاينارى',
+'uploadedfiles'               => 'قوتارىلعان فايلدار',
+'ignorewarning'               => 'نازار سالۋدى ەلەمەۋ جٵنە فايلدى ٵردەقاشان ساقتاۋ.',
+'ignorewarnings'              => 'ٵرقايسى نازار سالۋلاردى ەلەمەۋ',
+'minlength'                   => 'فايل اتىندا ەڭ كەمٸندە ٷش ٵرٸپ بولۋى كەرەك.',
+'illegalfilename'             => '«$1» فايل اتاۋىندا بەت اتاۋلارىندا رۇقسات ەتٸلمەگەن نىشاندار بار. فايلدى قايتا اتاڭىز, سوسىن قايتا جۋكتەپ كٶرٸڭٸز.',
+'badfilename'                 => 'فايلدىڭ اتى «$1» بوپ ٶزگەرتٸلدٸ.',
+'filetype-badmime'            => '«$1» دەگەن MIME تٷرٸ بار فايلداردى قوتارۋعا رۇقسات ەتٸلمەيدٸ.',
+'filetype-badtype'            => "'''«.$1»''' دەگەن كٷتٸلمەگەن فايل تٷرٸ
+: رٷقسات ەتٸلگەن فايل تٷر تٸزٸمٸ: $2",
+'filetype-missing'            => 'بۇل فايلدىڭ («.jpg» سيياقتى) كەڭەيتٸمٸ جوق.',
+'large-file'                  => 'فايلدى $1 مٶلشەردەن اسپاۋىنا تىرىسىڭىز; بۇل فايل مٶلشەرٸ — $2.',
+'largefileserver'             => 'وسى فايلدىڭ مٶلشەرٸ سەرۆەردٸڭ قالاۋىنان اسىپ كەتكەن.',
+'emptyfile'                   => 'قوتارىلعان فايلىڭىز بوس سيياقتى. بۇل فايل اتاۋى جانساق ەنگٸزٸلگەنٸنەن بولۋى مٷمكٸن. قوتارعىڭىز كەلگەن فايل شىنىندا دا وسى فايل بولعانىن تەكسەرٸپ الىڭىز.',
+'fileexists'                  => 'وسىنداي اتاۋلى فايل بار تٷگە. قايتا جازۋدىڭ الدىنان $1 تەكسەرٸپ شىعىڭىز.',
+'fileexists-extension'        => 'بۇنداي اتاۋىمەن فايل بار تٷگە:<br />
+قوتارىلاتىن فايل اتاۋى: <strong><tt>$1</tt></strong><br />
+بار بولعان فايل اتاۋى: <strong><tt>$2</tt></strong><br />
+ايىرماشلىعى تەك كەڭەيتٸمٸ باس/كٸشٸ ٵرپٸمەن جازىلۋىندا. فايلداردىڭ بٸردەيلٸگٸن سىناپ شىعىڭىز.',
+'fileexists-thumb'            => "'''<center>بار بولعان سۋرەت</center>'''",
+'fileexists-thumbnail-yes'    => "وسى فايل — مٶلشەرٸ كٸشٸرٸتٸلگەن سۋرەت <i>(نوباي)</i> سيياقتى. بۇل <strong><tt>$1</tt></strong> دەگەن فايلدى سىناپ شىعىڭىز.<br />
+ەگەر سىنالعان فايل تٷپنۇسقالى مٶلشەرٸ بار دٵلمە-دٵل سۋرەت بولسا, قوسىسمشا نوبايدى قوتارۋ قاجەتٸ جوق.",
+'file-thumbnail-no'           => "فايل اتاۋى <strong><tt>$1</tt></strong> دەگەنمەن باستالادى. بۇل — مٶلشەرٸ كٸشٸرٸتٸلگەن سۋرەت <i>(نوباي)</i> سيياقتى.
+ەگەر تولىق اجىراتىلىمدىعى بار سۋرەتٸڭٸز بولسا, سونى قوتارىڭىز, ٵيتپەسە فايل اتاۋىن ٶزگەرتٸڭٸز.",
+'fileexists-forbidden'        => 'وسىنداي اتاۋلى فايل بار تٷگە. كەرٸ قايتىڭىز دا, جٵنە وسى فايلدى باسقا اتىمەن قوتارىڭىز. [[{{ns:image}}:$1|thumb|center|$1]]',
+'fileexists-shared-forbidden' => 'وسىنداي اتاۋلى فايل ورتاق فايل ارقاۋىندا بار تٷگە. كەرٸ قايتىڭىز دا, وسى فايلدى جاڭا اتىمەن قوتارىڭىز. [[{{ns:image}}:$1|thumb|center|$1]]',
+'successfulupload'            => 'قوتارۋ سٵتتٸ ٶتتٸ',
+'fileuploaded'                => '«$1» فايلى سٵتتٸ قوتارىلدى!
+وسى سٸلتەمەگە ەرٸپ — $2, سيپاتتاما بەتٸنە بارىڭىز دا, جٵنە وسى فايل تۋرالى
+اقپارات تولتىرىڭىز: قايدان الىنعانىن, قاشان جاسالعانىن, كٸم جاساعانىن,
+تاعى باسقا بٸلەتٸڭٸزدٸ. بۇل سۋرەت بولسا, مىناداي پٸشٸمٸمەن كٸرٸستٸرۋگە بولادى: <tt><nowiki>[[</nowiki>{{ns:image}}<nowiki>:$1|thumb|سيپاتتاماسى]]</nowiki></tt>',
+'uploadwarning'               => 'قوتارۋ تۋرالى نازار سالۋ',
+'savefile'                    => 'فايلدى ساقتاۋ',
+'uploadedimage'               => '«[[$1]]» فايلىن قوتاردى',
+'uploaddisabled'              => 'فايل قوتارۋى ٶشٸرٸلگەن',
+'uploaddisabledtext'          => 'وسى ۋيكيدە فايل قوتارۋى ٶشٸرٸلگەن.',
+'uploadscripted'              => 'وسى فايلدا, ۆەب شولعىشتى اعات تٷسٸندٸككە كەلتٸرەتٸڭ HTML بەلگٸلەۋ, نە سكريپت كودى بار.',
+'uploadcorrupt'               => 'وسى فايل بٷلدٸرٸلگەن, نە ٵدەپسٸز كەڭەيتٸمٸ بار. فايلدى تەكسەرٸپ, قوتارۋىن قايتالاڭىز.',
+'uploadvirus'                 => 'وسى فايلدا ۆيرۋس بولۋى مٷمكٸن! ەگجەي-تەگجەي اقپاراتى: $1',
+'sourcefilename'              => 'قاينارداعى فايل اتى',
+'destfilename'                => 'اقىرعى فايل اتى',
+'watchthisupload'             => 'وسى بەتتٸ باقىلاۋ',
+'filewasdeleted'              => 'وسى اتاۋى بار فايل بۇرىن قوتارىلعان, سوسىن جويىلدىرىلعان. قايتا قوتارۋ الدىنان $1 دەگەندٸ تەكسەرٸڭٸز.',
+
+'upload-proto-error'      => 'جارامسىز حاتتامالىق',
+'upload-proto-error-text' => 'سىرتتان قوتارۋ ٷشٸن URL جايلارى <code>http://</code> نەمەسە <code>ftp://</code> دەگەندەردەن باستالۋ قاجەت.',
+'upload-file-error'       => 'ٸشكٸ قاتە',
+'upload-file-error-text'  => 'سەرۆەردە ۋاقىتشا فايل جاساۋى ٸشكٸ قاتەگە ۇشىراستى. بۇل جٷيەنٸڭ ٵكٸمشٸمەن قاتىناسىڭىز.',
+'upload-misc-error'       => 'بەلگٸسٸز قوتارۋ قاتەسٸ',
+'upload-misc-error-text'  => 'قوتارۋ كەزٸندە بەلگٸسٸز قاتە ۇشىراستى. قايسى URL جايى جارامدى جٵنە قاتىناۋلى ەكەنٸن تەكسەرٸپ شىعىڭىز دا قايتالاپ كٶرٸڭٸز. ەگەر بۇل مٵسەلە ٵلدە دە قالسا, جٷيە ٵكٸمشٸمەن قاتىناسىڭىز.',
+
+# Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
+'upload-curl-error6'       => 'URL جايى جەتٸلمەدٸ',
+'upload-curl-error6-text'  => 'بەرٸلگەن URL جايى جەتٸلمەدٸ. قايسى URL جايى دۇرىس ەكەنٸن جٵنە توراپ ٸستە ەكەنٸن قايتالاپ قاتاڭ تەكسەرٸڭٸز.',
+'upload-curl-error28'      => 'قوتارۋعا بەرٸلگەن ۋاقىت بٸتتٸ',
+'upload-curl-error28-text' => 'توراپتىڭ جاۋاپ بەرۋٸ تىم ۇزاق ۋاقىتقا سوزىلدى. بۇل توراپ ٸستە ەكەنٸن تەكسەرٸپ شىعىڭىز, از ۋاقىت كٸدٸرە تۇرىڭىز دا تاعى قايتالاپ كٶرٸڭٸز. تالابىڭىزدى جٷكتەلۋٸ ازداۋ كەزٸندە قايتالاۋعا بولمىس.',
+
+'license'            => 'ليتسەنزيياسى',
+'nolicense'          => 'ەشتەڭە تالعانباعان',
+'upload_source_url'  => ' (جارامدى, بارشاعا قاتىناۋلى URL جاي)',
+'upload_source_file' => ' (كومپييۋتەرٸڭٸزدەگٸ فايل)',
+
+# Image list
+'imagelist'                 => 'فايل تٸزٸمٸ',
+'imagelisttext'             => "تٶمەندە ''$2'' سۇرىپتالعان '''$1''' فايل تٸزٸمٸ.",
+'imagelistforuser'          => 'مىندا تەك $1 جٷكتەگەن سۋرەتتەر كٶرسەتٸلەدٸ.',
+'getimagelist'              => 'فايل تٸزٸمدەۋٸ',
+'ilsubmit'                  => 'ٸزدەۋ',
+'showlast'                  => 'سوڭعى $1 فايل $2 سۇرىپتاپ كٶرسەت.',
+'byname'                    => 'اتىمەن',
+'bydate'                    => 'كٷن-ايمەن',
+'bysize'                    => 'مٶلشەرٸمەن',
+'imgdelete'                 => 'جويۋ',
+'imgdesc'                   => 'سيپپ.',
+'imgfile'                   => 'فايل',
+'imglegend'                 => 'شارتتى بەلگٸلەر: (سيپپ.) — فايل سيپاتتاماسىن كٶرسەتۋ/ٶڭدەۋ.',
+'imghistory'                => 'فايل تاريحى',
+'revertimg'                 => 'قايت.',
+'deleteimg'                 => 'جويۋ',
+'deleteimgcompletely'       => 'وسى فايلدىڭ بارلىق نۇسقالارىن جوي',
+'imghistlegend'             => 'شارتتى بەلگٸلەر: (اعىم.) = اعىمدىق فايل, (جويۋ) = ەسكٸ نۇسقاسىن
+جويۋ, (قاي.) = ەسكٸ نۇسقاسىنا قايتارۋ.
+<br /><i>قوتارىلعان فايلدى كٶرۋ ٷشٸن كٷن-ايىنا نۇقىڭىز</i>.',
+'imagelinks'                => 'سٸلتەمەلەرٸ',
+'linkstoimage'              => 'بۇل فايلعا كەلەسٸ بەتتەر سٸلتەيدٸ:',
+'nolinkstoimage'            => 'بۇل فايلعا ەش بەت سٸلتەمەيدٸ.',
+'sharedupload'              => 'بۇل فايل ورتاق ارقاۋىنا قوتارىلعان سوندىقتان باسقا جوبالاردا قولدانۋى مٷمكٸن.',
+'shareduploadwiki'          => 'بىلايعى اقپارات ٷشٸن $1 دەگەندٸ قاراڭىز.',
+'shareduploadwiki-linktext' => 'فايل سيپاتتاماسى بەتٸ',
+'noimage'                   => 'مىناداي اتاۋلى فايل جوق, $1 مٷمكٸندٸگٸڭٸز بار.',
+'noimage-linktext'          => 'وسىنى قوتارۋ',
+'uploadnewversion-linktext' => 'بۇل فايلدىڭ جاڭا نۇسقاسىن قوتارۋ',
+'imagelist_date'            => 'كٷن-ايى',
+'imagelist_name'            => 'اتاۋى',
+'imagelist_user'            => 'قاتىسۋشى',
+'imagelist_size'            => 'مٶلشەرٸ (B)',
+'imagelist_description'     => 'سيپاتتاماسى',
+'imagelist_search_for'      => 'سۋرەتتٸ اتىمەن ٸزدەۋ:',
+
+# MIME search
+'mimesearch'         => 'فايلدى MIME تٷرٸمەن ٸزدەۋ',
+'mimesearch-summary' => 'بۇل بەت فايلداردى MIME تٷرٸمەن سٷزگٸلەۋ مٷمكٸندٸگٸن بەرەدٸ. كٸرٸسٸ: «ماعلۇمات تٷرٸ»/«تاراۋ تٷرٸ», مىسالى <tt>image/jpeg</tt>.',
+'mimetype'           => 'MIME تٷرٸ:',
+'download'           => 'جٷكتەۋ',
+
+# Unwatched pages
+'unwatchedpages'         => 'باقىلانباعان بەتتەر',
+
+# List redirects
+'listredirects'         => 'ايداتۋ بەت تٸزٸمٸ',
+
+# Unused templates
+'unusedtemplates'         => 'پايدالانىلماعان ٷلگٸلەر',
+'unusedtemplatestext'     => 'بۇل بەت باسقا بەتكە كٸرٸcتٸرٸلمەگەن ٷلگٸ ەسٸم اياىسىنداعى بارلىق بەتتەردٸ تٸزٸمدەيدٸ. ٷلگٸلەردٸ جويۋ الدىنان بۇنىڭ باسقا سٸلتەمەلەرٸن تەكسەرٸپ شىعۋىن ۇمىتپاڭىز',
+'unusedtemplateswlh'      => 'باسقا سٸلتەمەلەر',
+
+# Random redirect
+'randomredirect' => 'كەزدەيسوق ايداتۋ',
+'randomredirect-nopages' => 'بۇل ەسٸم اياسىندا ەش ايداتۋ جوق.',
+# Statistics
+'statistics'             => 'جوبا ساناعى',
+'sitestats'              => '{{SITENAME}} ساناعى',
+'userstats'              => 'قاتىسۋشى ساناعى',
+'sitestatstext'          => "دەرەكقوردا {{PLURAL:$1|'''1''' بەت|بۇلايشا '''$1''' بەت}} بار.
+بۇنىڭ ٸشٸندە: «تالقىلاۋ» بەتتەرٸ, {{SITENAME}} جوباسى تۋرالى بەتتەر, ەڭ از «بٸتەمە»
+بەتتەرٸ, ايداتۋلار, تاعى دا باسقا ماعلۇمات دەپ تانىلمايتىن بەتتەر بولۋى مٷمكٸن .
+سولاردى ەسەپتەن شىعارعاندا, مىندا ماعلۇمات دەپ سانالاتىن
+{{PLURAL:$2|'''1'''|'''$2'''}} بەت بار شىعار.
+
+قوتارىلعان {{PLURAL:$8|'''1''' فايل|'''$8''' فايل}} ساقتالادى.
+
+{{SITENAME}} جوباسى ورناتىلعاننان بەرٸ بەتتەر {{PLURAL:$3|'''1''' رەت|بۇلايشا '''$3''' رەت}} قارالعان,
+جٵنە بەتتەر {{PLURAL:$4|'''1''' رەت|'''$4''' رەت}} تٷزەتٸلگەن.
+بۇنىڭ نٵتيجەسٸندە ورتا ەسەپپەن ٵربٸر بەتكە '''$5''' رەت تٷزەتۋ كەلەدٸ, جٵنە ٵربٸر تٷزەتۋگە '''$6''' رەت قاراۋ كەلەدٸ.
+
+اعىمدىق [http://meta.wikimedia.org/wiki/Help:Job_queue تاپسىرىم كەزەگٸ] ۇزىندىلىعى: '''$7'''.",
+'userstatstext'          => "مىندا {{PLURAL:$1|'''1''' تٸركەلگەن قاتىسۋشى|'''$1''' تٸركەلگەن قاتىسۋشى}} بار, سونىڭ ٸشٸندە
+ {{PLURAL:$2|'''1''' قاتىسۋشىدا|'''$2''' قاتىسۋشىدا}} (نەمەسە '''$4 ٪''') $5 قۇقىقتارى بار",
+'statistics-mostpopular' => 'ەڭ كٶپ قارالعان بەتتەر',
+
+'disambiguations'         => 'ايرىقتى بەتتەر',
+'disambiguationspage'     => '{{ns:template}}:Disambig',
+'disambiguations-text'    => "كەلەسٸ بەتتەر '''ايرىقتى بەتكە''' سٸلتەيدٸ. بۇنىڭ ورنىنا بەلگٸلٸ تاقىرىپقا سٸلتەۋٸ قاجەت.<br />ەگەر [[{{ns:mediawiki}}:disambiguationspage]] تٸزٸمٸندەگٸ ٷلگٸ قولدانىلسا, بەت ايرىقتى دەپ سانالادى.",
+
+'doubleredirects'         => 'شىنجىرلى ايداتۋلار',
+'doubleredirectstext'     => 'ٵربٸر جولداعى بٸرٸنشٸ مەن ەكٸنشٸ ايداتۋ سٸلتەمەلەرٸ بار, سونىمەن بٸرگە ەكٸنشٸ ايداتۋ مٵتٸننٸڭ بٸرٸنشٸ جولى بار. ٵدەتتە بٸرٸنشٸ سٸلتەمە ايدايتىن «شىن» اقىرعى بەتتٸڭ اتاۋى بولۋى قاجەت.',
+
+'brokenredirects'         => 'ەش بەتكە كەلتٸرمەيتٸن ايداتۋلار',
+'brokenredirectstext'     => 'كەلەسٸ ايداتۋلار جوق بەتتەرگە سٸلتەيدٸ:',
+'brokenredirects-edit'    => '(ٶڭدەۋ)',
+'brokenredirects-delete'  => '(جويۋ)',
+
+'withoutinterwiki'        => 'ەش تٸلگە سٸلتeمەگەن بەتتەر',
+'withoutinterwiki-header' => 'كەلەسٸ بەتتەر باسقا تٸلدەرگە سٸلتەمەيدٸ:',
+
+'fewestrevisions'         => 'ەڭ از تٷزەتٸلگەن بەتتەر',
+# Miscellaneous special pages
+'nbytes'                          => '$1 B',
+'ncategories'                     => '$1 سانات',
+'nlinks'                          => '$1 سٸلتەمە',
+'nmembers'                        => '$1 بۋىن',
+'nrevisions'                      => '$1 نۇسقا',
+'nviews'                          => '$1 رەت قارالعان',
+'specialpage-empty'               => 'بۇل بەت بوس.',
+'lonelypages'                     => 'ەش بەت سٸلتەمەگەن بەتتەر',
+'lonelypagestext'                 => 'كەلەسٸ بەتتەرگە وسى جوباداعى باسقا بەتتەر سٸلتەمەيدٸ.',
+'uncategorizedpages'              => 'ەش ساناتقا كٸرمەگەن بەتتەر',
+'uncategorizedcategories'         => 'ەش ساناتقا كٸرمەگەن ساناتتار',
+'uncategorizedimages'             => 'ەش ساناتقا كٸرمەگەن سۋرەتتەر',
+'unusedcategories'                => 'پايدالانىلماعان ساناتتار',
+'unusedimages'                    => 'پايدالانىلماعان فايلدار',
+'popularpages'                    => 'ٵيگٸلٸ بەتتەر',
+'wantedcategories'                => 'باستالماعان ساناتتار',
+'wantedpages'                     => 'باستالماعان بەتتەر',
+'mostlinked'                      => 'ەڭ كٶپ سٸلتەنگەن بەتتەر',
+'mostlinkedcategories'            => 'ەڭ كٶپ سٸلتەنگەن ساناتتار',
+'mostcategories'                  => 'ەڭ كٶپ ساناتتارعا كٸرگەن بەتتەر',
+'mostimages'                      => 'ەڭ كٶپ سٸلتەنگەن سۋرەتتەر',
+'mostrevisions'                   => 'ەڭ كٶپ تٷزەتٸلگەن بەتتەر',
+'allpages'                        => 'بارلىق بەت تٸزٸمٸ',
+'prefixindex'                     => 'بەت باستاۋ تٸزٸمٸ',
+'randompage'                      => 'كەزدەيسوق بەت',
+'randompage-nopages'              => 'بۇل ەسٸم اياسىندا بەتتەر جوق.',
+'shortpages'                      => 'ەڭ قىسقا بەتتەر',
+'longpages'                       => 'ەڭ ٷلكەن بەتتەر',
+
+'deadendpages'                    => 'ەش بەتكە سٸلتەمەيتٸن بەتتەر',
+'deadendpagestext'                => 'كەلەسٸ بەتتەر وسى جوباداعى باسقا بەتتەرگە سٸلتەمەيدٸ.',
+'protectedpages'                  => 'قورعالعان بەتتەر',
+'protectedpagestext'              => 'كەلەسٸ بەتتەر ٶڭدەۋدەن نەمەسە جىلجىتۋدان قورعالعان',
+'protectedpagesempty'             => 'اعىمدا وسىنداي باپتاۋلارىمەن ەشبٸر بەت قورعالماعان',
+'listusers'                       => 'بارلىق قاتىسۋشى تٸزٸمٸ',
+'specialpages'                    => 'ارنايى بەتتەر',
+'spheading'                       => 'بارشانىڭ ارنايى بەتتەرٸ',
+'restrictedpheading'              => 'شەكتەۋلٸ ارنايى بەتتەر',
+'rclsub'                          => '(«$1» بەتٸنەن سٸلتەنگەن بەتتەرگە)',
+'newpages'                        => 'ەڭ جاڭا بەتتەر',
+'newpages-username'               => 'قاتىسۋشى اتى:',
+'ancientpages'                    => 'ەڭ ەسكٸ بەتتەر',
+'intl'                            => 'تٸلارالىق سٸلتەمەلەر',
+'move'                            => 'جىلجىتۋ',
+'movethispage'                    => 'بەتتٸ جىلجىتۋ',
+'unusedimagestext'                => '<p>ەسكەرتۋ: باسقا ۆەب توراپتار فايلدىڭ
+URL جايىنا تٸكەلەي سٸلتەۋٸ مٷمكٸن. سوندىقتان, بەلسەندٸ پايدالانۋىنا اڭعارماي,
+وسى تٸزٸمدە قالۋى مٷمكٸن.</p>',
+'unusedcategoriestext'            => 'كەلەسٸ سانات بەتتەر بار بولىپ تۇر, بٸراق وعان ەشقانداي بەت, نە سانات كٸرمەيدٸ.',
+
+# Book sources
+'booksources'               => 'كٸتاپ قاينارلارى',
+'booksources-search-legend' => 'كٸتاپ قاينارلارىن ٸزدەۋ',
+'booksources-isbn'          => 'ISBN بەلگٸسٸ:',
+'booksources-go'            => 'ٶتۋ',
+'booksources-text'          => 'تٶمەندە جاڭا جٵنە قولدانعان كٸتاپتار ساتاتىنتوراپتارىنىڭ سٸلتەمەلەرٸ تٸزٸمدەلگەن.
+بۇل توراپتاردا ٸزدەلگەن كٸتاپتار تۋرالى بىلايعى اقپارات بولۋعا مٷمكٸن.',
+
+'categoriespagetext' => 'وسىندا ۋيكيدەگٸ بارلىق ساناتتارىنىڭ تٸزٸمٸ بەرٸلٸپ تۇر.',
+'data'               => 'دەرەكتەر',
+'userrights'         => 'قاتىسۋشىلار قۇقىقتارىن مەڭگەرۋ',
+'groups'             => 'قاتىسۋشى توپتارى',
+'isbn'               => 'ISBN',
+'alphaindexline'     => '$1 — $2',
+'version'            => 'جٷيە نۇسقاسى',
+
+# Special:Logs
+'specialloguserlabel'  => 'قاتىسۋشى:',
+'speciallogtitlelabel' => 'اتاۋ:',
+'log'                => 'جۋرنالدار',
+'log-search-legend'    => 'جۋرنالداردان ٸزدەۋ',
+'log-search-submit'    => 'ٶتۋ',
+'alllogstext'          => '{{SITENAME}} جوباسىنىڭ بارلىق قاتىناۋلى جۋرنالدارىن بٸرٸكتٸرٸپ كٶرسەتۋٸ.
+جۋرنال تٷرٸن, قاتىسۋشى اتىن, نە تيٸستٸ بەتٸن تالعاپ, تارىلتىپ قاراۋىڭىزعا بولادى.',
+'logempty'             => 'جۋرنالدا سٵيكەس دانالار جوق.',
+'log-title-wildcard'   => 'مىناداي مٵتٸننەڭ باستالىتىن اتاۋلاردان ٸزدەۋ',
+
+# Special:Allpages
+'nextpage'          => 'كەلەسٸ بەتكە ($1)',
+'prevpage'          => 'الدىڭعى بەتكە ($1)',
+'allpagesfrom'      => 'مىنا بەتتەن باستاپ كٶرسەتۋ:',
+'allarticles'       => 'بارلىق بەت تٸزٸمٸ',
+'allinnamespace'    => 'بارلىق بەت ($1 ەسٸم اياسى)',
+'allnotinnamespace' => 'بارلىق بەت ($1 ەسٸم اياسىنان تىس)',
+'allpagesprev'      => 'الدىڭعىعا',
+'allpagesnext'      => 'كەلەسٸگە',
+'allpagessubmit'    => 'ٶتۋ',
+'allpagesprefix'    => 'مىنادان باستالعان بەتتەردٸ كٶرسەتۋ:',
+'allpagesbadtitle'  => 'الىنعان بەت اتاۋى جارامسىز بولعان, نەمەسە تٸل-ارالىق نە ۋيكي-ارالىق باستاۋى بار بولدى. اتاۋدا قولدانۋعا بولمايتىن نىشاندار بولۋى مٷمكٸن.',
+
+# Special:Listusers
+'listusersfrom' => 'مىنا قاتىسۋشىدان باستاپ كٶرسەتۋ:',
+'listusers-submit'   => 'كٶرسەت',
+'listusers-noresult' => 'قاتىسۋشى تابىلعان جوق.',
+
+# E-mail user
+'mailnologin'     => 'ە-پوشتا جايى جٸبەرٸلگەن جوق',
+'mailnologintext' => 'باسقا قاتىسۋشىعا حات جٸبەرۋ ٷشٸن
+[[{{ns:special}}:Userlogin|كٸرۋٸڭٸز]] قاجەت, جٵنە [[{{ns:special}}:Preferences|باپتاۋىڭىزدا]]
+كۋٵلاندىرىلعان ە-پوشتا جايى بولۋى جٶن.',
+'emailuser'       => 'قاتىسۋشىعا حات جازۋ',
+'emailpage'       => 'قاتىسۋشىعا حات جٸبەرۋ',
+'emailpagetext'   => 'ەگەر بۇل قاتىسۋشى باپتاۋلارىندا كۋٵلاندىرعان ە-پوشتا
+جايىن ەنگٸزسە, تٶمەندەگٸ ٷلگٸت ارقىلى بۇعان جالعىز ە-پوشتا حاتىن جٸبەرۋگە بولادى.
+قاتىسۋشى باپتاۋىڭىزدا ەنگٸزگەن ە-پوشتا جايىڭىز
+«كٸمنەن» دەگەن باس جولاعىندا كٶرٸنەدٸ, سوندىقتان
+حات الۋشىسى تۋرا جاۋاپ بەرە الادى.',
+'usermailererror' => 'Mail نىسانى قاتە قايتاردى:',
+'defemailsubject' => '{{SITENAME}} ە-پوشتاسىنىڭ حاتى',
+'noemailtitle'    => 'بۇل ە-پوشتا جايى ەمەس',
+'noemailtext'     => 'وسى قاتىسۋشى جارامدى ە-پوشتا جايىن ەنگٸزبەگەن,
+نەمەسە باسقالاردان حات قابىلداۋىن ٶشٸرگەن.',
+'emailfrom'       => 'كٸمنەن',
+'emailto'         => 'كٸمگە',
+'emailsubject'    => 'تاقىرىبى',
+'emailmessage'    => 'حات',
+'emailsend'       => 'جٸبەرۋ',
+'emailccme'       => 'حاتىمدىڭ كٶشٸرمەسٸن ماعان دا جٸبەر.',
+'emailccsubject'  => '$1 دەگەنگە جٸبەرٸلگەن حاتىڭىزدىڭ كٶشٸرمەسٸ: $2',
+'emailsent'       => 'حات جٸبەرٸلدٸ',
+'emailsenttext'   => 'ە-پوشتا حاتىڭىز جٸبەرٸلدٸ.',
+
+# Watchlist
+'watchlist'            => 'باقىلاۋ تٸزٸمٸ',
+'mywatchlist'          => 'باقىلاۋىم',
+'watchlistfor'         => "('''$1''' باقىلاۋلارى)",
+'nowatchlist'          => 'باقىلاۋ تٸزٸمٸڭٸزدە ەشبٸر دانا جوق',
+'watchlistanontext'    => 'باقىلاۋ تٸزٸمٸڭٸزدەگٸ دانالاردى قاراۋ, نە ٶڭدەۋ ٷشٸن $1 قاجەت.',
+'watchlistcount'       => "'''باقىلاۋ تٸزٸمٸڭٸزدە (تالقىلاۋ بەتتەردٸ قوسا) $1 دانا بار.'''",
+'clearwatchlist'       => 'باقىلاۋ تٸزٸمٸن تازالاۋ',
+'watchlistcleartext'   => 'سولاردى تولىق الاستاتۋعا باتىلسىز با؟',
+'watchlistclearbutton' => 'باقىلاۋ تٸزٸمٸن تازالاۋ',
+'watchlistcleardone'   => 'باقىلاۋ تٸزٸمٸڭٸز تازارتىلدى. $1 دانا الاستاتىلدى.',
+'watchnologin'         => 'كٸرمەگەنسٸز',
+'watchnologintext'     => 'باقىلاۋ تٸزٸمٸڭٸزدٸ ٶزگەرتۋ ٷشٸن [[{{ns:special}}:Userlogin|كٸرۋٸڭٸز]] جٶن.',
+'addedwatch'           => 'باقىلاۋ تٸزٸمٸنە قوسىلدى',
+'addedwatchtext'       => "«[[:$1]]» بەتٸ [[{{ns:special}}:Watchlist|باقىلاۋ تٸزٸمٸڭٸزگە]] قوسىلدى.
+وسى بەتتٸڭ جٵنە سونىڭ تالقىلاۋ بەتٸنٸڭ كەلەشەكتەگٸ ٶزگەرٸستەرٸ مىندا تٸزٸمدەلەدٸ.
+سوندا بەتتٸڭ اتاۋى تابۋعا جەڭٸلدەتٸپ [[{{ns:special}}:Recentchanges|جۋىقتاعى ٶزگەرٸستەر تٸزٸمٸندە]]
+'''جۋان ٵرپٸمەن''' كٶرسەتٸلەدٸ.
+
+وسى بەتتٸ سوڭىنان باقىلاۋ تٸزٸمنەن الاستاتىڭىز كەلسە «باقىلاماۋ» پاراعىن نۇقىڭىز.",
+'removedwatch'         => 'باقىلاۋ تٸزٸمٸڭٸزدەن الاستاتىلدى',
+'removedwatchtext'     => '«[[:$1]]» بەتٸ باقىلاۋ تٸزٸمٸڭٸزدەن الاستاتىلدى.',
+'watch'                => 'باقىلاۋ',
+'watchthispage'        => 'بەتتٸ باقىلاۋ',
+'unwatch'              => 'باقىلاماۋ',
+'unwatchthispage'      => 'باقىلاۋدى توقتاتۋ',
+'notanarticle'         => 'ماعلۇمات بەتٸ ەمەس',
+'watchnochange'        => 'كٶرسەتٸلگەن مەرزٸمدە ەشبٸر باقىلانعان دانا ٶڭدەلگەن جوق.',
+'watchdetails'         => "* باقىلاۋ تٸزٸمٸندە (تالقىلاۋ بەتتەرٸسٸز) '''$1''' بەت بار.
+* [[{{ns:special}}:Watchlist/edit|بٷكٸل تٸزٸمدٸ قاراۋ جٵنە ٶزگەرتۋ]].
+* [[{{ns:special}}:Watchlist/clear|تٸزٸمدەگٸ بارلىق دانا الاستاتۋ]].",
+'wlheader-enotif'      => '* ەسكەرتۋ حات جٸبەرۋٸ ەندٸرٸلگەن.',
+'wlheader-showupdated' => "* سوڭعى كٸرگەنٸمنەن بەرٸ تٷزەتٸلگەن بەتتەردٸ '''جۋان''' مٵتٸنمەن كٶرسەت",
+'watchmethod-recent'   => 'باقىلاۋلى بەتتەردٸڭ جۋىقتاعى ٶزگەرٸستەرٸن تەكسەرۋ',
+'watchmethod-list'     => 'جۋىقتاعى ٶزگەرٸستەردە باقىلاۋلى بەتتەردٸ تەكسەرۋ',
+'removechecked'        => 'بەلگٸلەنگەندٸ باقىلاۋ تٸزٸمٸنەن الاستاتۋ',
+'watchlistcontains'    => 'باقىلاۋ تٸزٸمٸڭٸزدە {{PLURAL:$1|1 بەت|$1 بەت}} بار.',
+'watcheditlist'        => "وسىندا ٵلٸپپەم سۇرىپتالعان باقىلانعان ماعلۇمات بەتتەرٸڭٸز تٸزٸمدەلٸنگەن.
+بەتتەردٸ الاستاتۋ ٷشٸن ونىڭ قاسىنداعى قاباشاقتاردى بەلگٸلەپ, تٶمەندەگٸ ''بەلگٸلەنگەندٸ الاستات'' تٷيمەسٸن نۇقىڭىز
+(ماعلۇمات بەتٸن جويعاندا تالقىلاۋ بەتٸ دە بٸرگە جويىلادى).",
+'removingchecked'      => 'سۇرانعان دانالاردى باقىلاۋ تٸزٸمنەن الاستاۋى…',
+'couldntremove'        => '«$1» دەگەن دانا الاستاتىلمادى…',
+'iteminvalidname'      => '«$1» داناسىنىڭ جارامسىز اتاۋىنان شاتاق تۋدى…',
+'wlnote'               => "تٶمەندە سوڭعى {{PLURAL:$2|ساعاتتا|'''$2''' ساعاتتا}} بولعان, {{PLURAL:$1|جۋىقتاعى ٶزگەرٸس|جۋىقتاعى '''$1''' ٶزگەرٸس}} كٶرسەتٸلگەن.",
+'wlshowlast'           => 'سوڭعى $1 ساعاتتاعى, $2 كٷندەگٸ, $3 بولعان ٶزگەرٸستٸ كٶرسەتۋ',
+'wlsaved'              => 'بۇل باقىلۋ تٸزٸمٸڭٸزدٸڭ ساقتالعان نۇسقاسى.',
+'watchlist-show-bots'  => 'بوتتاردى كٶرسەت',
+'watchlist-hide-bots'  => 'بوتتاردى جاسىر',
+'watchlist-show-own'   => 'تٷزەتۋٸمدٸ كٶرسەت',
+'watchlist-hide-own'   => 'تٷزەتۋٸمدٸ جاسىر',
+'watchlist-show-minor' => 'شاعىن تٷزەتۋدٸ كٶرسەت',
+'watchlist-hide-minor' => 'شاعىن تٷزەتۋدٸ جاسىر',
+'wldone'               => 'ٸس بٸتتٸ.',
+
+# Displayed when you click the "watch" button and it's in the process of watching
+'watching'   => 'باقىلاۋ…',
+'unwatching' => 'باقىلاماۋ…',
+
+'enotif_mailer'      => '{{SITENAME}} ەسكەرتۋ حات جٸبەرۋ قىزمەتٸ',
+'enotif_reset'       => 'بارلىق بەت كارالدٸ دەپ بەلگٸلە',
+'enotif_newpagetext' => 'مىناۋ جاڭا بەت.',
+'changed'            => 'ٶزگەرتتٸ',
+'created'            => 'جاسادى',
+'enotif_subject'     => '{{SITENAME}} جوباسىندا $PAGEEDITOR $PAGETITLE اتاۋلى بەتتٸ $CHANGEDORCREATED',
+'enotif_lastvisited' => 'سوڭعى كٸرۋٸڭٸزدەن بەرٸ بولعان ٶزگەرٸستەر ٷشٸن $1 دەگەندٸ قاراڭىز.',
+'enotif_body'        => 'قۇرمەتتٸ $WATCHINGUSERNAME,
+
+{{SITENAME}} جوباسىدا $PAGEEDITDATE كەزٸندە $PAGEEDITOR $PAGETITLE اتاۋلى بەتتٸ $CHANGEDORCREATED, اعىمدىق نۇسقاسىن $PAGETITLE_URL جايىنان قاراڭىز.
+
+$NEWPAGE
+
+ٶڭدەۋشٸ سيپاتتاماسى: $PAGESUMMARY $PAGEMINOREDIT
+
+ٶڭدەۋشٸمەن قاتىناسۋ:
+ە-پوشتا: $PAGEEDITOR_EMAIL
+ۋيكي: $PAGEEDITOR_WIKI
+
+بىلايعى ٶزگەرٸستەر بولعاندا دا سٸز وسى بەتكە بارعانشا دەيٸن ەشقانداي باسقا ەسكەرتۋ حاتتار جٸبەرٸلمەيدٸ. سونىمەن قاتار باقىلاۋ تٸزٸمٸڭٸزدەگٸ بەت ەسكەرتپەلٸك بەلگٸسٸن ٵدەپكە كٷيٸنە كەلتٸرٸڭٸز.
+
+             سٸزدٸڭ دوستى {{SITENAME}} ەسكەرتۋ قىزمەتٸ
+
+----
+باقىلاۋ تٸزٸمٸڭٸزدٸ باپتاۋ ٷشٸن, مىندا بارىڭىز
+{{fullurl:{{ns:special}}:Watchlist/edit}}
+
+سىن-پٸكٸر بەرۋ جٵنە بىلايعى جٵردەم الۋ ٷشٸن:
+{{fullurl:{{{{ns:mediawiki}}:helppage}}}}',
+
+# Delete/protect/revert
+'deletepage'                  => 'بەتتٸ جويۋ',
+'confirm'                     => 'راستاۋ',
+'excontent'                   => 'بولعان ماعلۇماتى: «$1»',
+'excontentauthor'             => 'بولعان ماعلۇماتى: «$1» (تەك «[[Special:Contributions/$2|$2]]» ٷلەسٸ)',
+'exbeforeblank'               => 'تازارتۋ الدىنداعى بولعان ماعلۇماتى: «$1»',
+'exblank'                     => 'بەت بوستى بولدى',
+'confirmdelete'               => 'جويۋدى راستاۋ',
+'deletesub'                   => '(«$1» جويۋى)',
+'historywarning'              => 'نازار سالىڭىز: جويۋعا ارنالعان بەتتە ٶز تاريحى بار:',
+'confirmdeletetext'           => 'بەتتٸ نەمەسە سۋرەتتٸ بارلىق تاريحىمەن
+بٸرگە دەرەكقوردان ٵردايىم جويىعىڭىز كەلەتٸن سيياقتى.
+بۇنى جويۋدىڭ زاردابىن تٷسٸنٸپ شىن نيەتتەنگەنٸڭٸزدٸ, جٵنە
+[[{{{{ns:mediawiki}}:policy-url}}]] دەگەنگە لايىقتى دەپ
+سەنگەنٸڭٸزدٸ راستاڭىز.',
+'policy-url'                 => '{{ns:project}}:ەرەجەلەر',
+'actioncomplete'              => 'ٵرەكەت بٸتتٸ',
+'deletedtext'                 => '«$1» جويىلدى.
+جۋىقتاعى جويۋلار تۋرالى جازبالارىن $2 دەگەننەن قاراڭىز.',
+'deletedarticle'              => '«[[$1]]» بەتٸن جويدى',
+'dellogpage'                  => 'جويۋ_جۋرنالى',
+'dellogpagetext'              => 'تٶمەندە جۋىقتاعى جويۋلاردىڭ تٸزٸمٸ بەرٸلگەن.',
+'deletionlog'                 => 'جويۋ جۋرنالى',
+'reverted'                    => 'ەرتەرەك نۇسقاسىنا قايتارىلعان',
+'deletecomment'               => 'جويۋدىڭ سەبەبٸ',
+'imagereverted'               => 'ەرتەرەك نۇسقاسىنا قايتارۋ سٵتتٸ ٶتتٸ.',
+'rollback'                    => 'تٷزەتۋلەردٸ قايتارۋ',
+'rollback_short'              => 'قايتارۋ',
+'rollbacklink'                => 'قايتارۋ',
+'rollbackfailed'              => 'قايتارۋ سٵتسٸز اياقتالدى',
+'cantrollback'                => 'تٷزەتۋ قايتارىلمايدى. بۇل بەتتٸڭ سوڭعى ٷلەسكەرٸ تەك باستاۋىش اۋتورى.',
+'alreadyrolled'               => '[[{{ns:user}}:$2|$2]] ([[{{ns:user_talk}}:$2|تالقىلاۋى]]) جاساعان [[:$1]]
+دەگەننٸڭ سوڭعى ٶڭدەۋٸ قايتارىلمادى; كەيبٸرەۋ وسى قازٸر بەتتٸ ٶڭدەپ نە قايتارىپ جاتىر تٷگە.
+
+سوڭعى ٶڭدەۋدٸ [[{{ns:user}}:$3|$3]] ([[{{ns:user_talk}}:$3|تالقىلاۋى]]) دەگەندٸ جاساعان.',
+'editcomment'                 => 'تٷزەتۋدٸڭ بولعان مٵندەمەسٸ: «<i>$1</i>».', # only shown if there is an edit comment
+'revertpage'                  => '[[{{ns:special}}:Contributions/$2|$2]] ([[{{ns:user_talk}}:$2|تالقىلاۋى]]) تٷزەتۋلەرٸن [[{{ns:user}}:$1|$1]] سوڭعى نۇسقاسىنا قايتاردى',
+'sessionfailure'              => 'كٸرۋ سەسسيياسىندا شاتاق بولعان سيياقتى;
+سەسسيياعا شابۋىلداۋداردان قورعانۋ ٷشٸن, وسى ٵرەكەت توقتاتىلدى.
+«ارتقا» تٷيمەسٸن باسىڭىز, جٵنە بەتتٸ كەرٸ جٷكتەڭٸز, سوسىن قايتالاپ كٶرٸڭٸز.',
+'protectlogpage'              => 'قورعاۋ_جۋرنالى',
+'protectlogtext'              => 'تٶمەندە بەتتەردٸڭ قورعاۋ/قورعاماۋ تٸزٸمٸ بەرٸلگەن. اعىمداعى قورعاۋ ٵرەكتتەر بار بەتتەر ٷشٸن [[{{ns:special}}:Protectedpages|قورعالعان بەت تٸزٸمٸن]] قاراڭىز.',
+'protectedarticle'            => '«$1» قورعالدى',
+'unprotectedarticle'          => '«[[$1]]» قورعالمادى',
+'protectsub'                  => '(«$1» قورعاۋدا)',
+'confirmprotecttext'          => 'وسى بەتتٸ راسىندا دا قورعاۋ قاجەت پە؟',
+'confirmprotect'              => 'قورعاۋدى راستاۋ',
+'protectmoveonly'             => 'تەك جىلجىتۋدان قورعاۋ',
+'protectcomment'              => 'قورعاۋ سەبەبٸ',
+'protectexpiry'               => 'بٸتەتٸن مەرزٸمٸ',
+'protect_expiry_invalid'      => 'بٸتەتٸن ۋاقىتى جارامسىز.',
+'protect_expiry_old'          => 'بٸتەتٸن ۋاقىتى ٶتٸپ كەتكەن.',
+'unprotectsub'                => '(«$1» قورعاماۋدا)',
+'confirmunprotecttext'        => 'وسى بەتتٸ راستان قورعاماۋ قاجەت پە؟',
+'confirmunprotect'            => 'قورعاماۋدى راستاۋ',
+'unprotectcomment'            => 'قورعاماۋ سەبەبٸ',
+'protect-unchain'             => 'جىلجىتۋعا رۇقسات بەرۋ',
+'protect-text'                => '<strong>$1</strong> بەتٸنٸڭ قورعاۋ دەڭگەيٸن قاراي جٵنە ٶزگەرتە الاسىز.',
+'protect-locked-blocked'      => 'بۇعاتتاۋىڭىز ٶشٸرٸلگەنشە دەيٸن قورعاۋ دەڭگەيٸن ٶزگەرتە المايسىز.
+مىنا <strong>$1</strong> بەتتٸڭ اعىمدىق باپتاۋلارى:',
+'protect-locked-dblock'       => 'دەرەكقوردىڭ قۇلىپتاۋى بەلسەندٸ بولعاندىقتان قورعاۋ دەڭگەيلەرٸ ٶزگەرتٸلمەيدٸ.
+مىنا <strong>$1</strong> بەتتٸڭ اعىمدىق باپتاۋلارى:',
+'protect-locked-access'       => 'تٸركەلگٸڭٸزگە بەت قورعاۋ دەنگەيلەرٸن ٶزگەرتۋٸنە رۇقسات جوق.
+مىنا <strong>$1</strong> بەتتٸڭ اعىمدىق باپتاۋلارى:',
+'protect-cascadeon'           => 'بۇل بەت اعىمدا قورعالعان, سەبەبٸ: وسى بەت باۋلى قورعاۋى بار كەلەسٸ {{PLURAL:$1|بەتكە|بەتتەرگە}} كٸرٸستٸرٸلگەن. بۇل بەتتٸڭ قورعاۋ دەڭگەيٸن ٶزگەرتە الاسىز, بٸراق بۇل باۋلى قورعاۋعا ىقپال ەتپەيدٸ.',
+'protect-default'             => '(ٵدەپكٸ)',
+'protect-level-autoconfirmed' => 'تٸركەلگٸسٸز پايدالانۋشىلارعا تيىم',
+'protect-level-sysop'         => 'تەك ٵكٸمشٸلەرگە رۇقسات',
+'protect-summary-cascade'     => 'باۋلى',
+'protect-expiring'            => 'بٸتۋٸ: $1 (UTC)',
+'protect-cascade'             => 'باۋلى قورعاۋ — بۇل بەتكە كٸرٸستٸرٸلگەن ٵرقايسى بەتتەردٸ قورعاۋ.',
+'restriction-type'            => 'رۇقسات',
+'restriction-level'           => 'رۇقسات دەڭگەيٸ',
+'minimum-size'                => 'ەڭ از مٶلشەرٸ (بايت)',
+
+# Restrictions (nouns)
+'restriction-edit' => 'ٶڭدەۋ',
+'restriction-move' => 'جىلجىتۋ',
+
+# Restriction levels
+'restriction-level-sysop'         => 'تولىق قورعالعان',
+'restriction-level-autoconfirmed' => 'جارتىلاي قورعالعان',
+'restriction-level-all'           => 'ٵرقايسى دەڭگەيدە',
+
+# Undelete
+'undelete'                 => 'جويىلعان بەتتەردٸ قاراۋ',
+'undeletepage'             => 'جويىلعان بەتتەردٸ قاراۋ جٵنە قايتارۋ',
+'viewdeletedpage'          => 'جويىلعان بەتتەردٸ قاراۋ',
+'undeletepagetext'         => 'كەلەسٸ بەتتەر جويىلدى دەپ بەلگٸلەنگەن, بٸراق ماعلۇماتى مۇراعاتتا جاتقان,
+سوندىقتان كەرٸ قايتارۋعا ٵزٸر. مۇراعات مەرزٸم بويىنشا تازالانىپ تۇرۋى مٷمكٸن.',
+'undeleteextrahelp'        => "بٷكٸل بەتتٸ قايتارۋ ٷشٸن, بارلىق قاباشاقتاردى بوس قالدىرىپ
+'''''قايتار!''''' تٷيمەسٸن نۇقىڭىز. بٶلەكشە قايتارۋ ورىنداۋ ٷشٸن, قايتارايىن دەگەن نۇسقالارىنا سٵيكەس
+قاباشاقتارىن بەلگٸلەڭٸز دە, جٵنە '''''قايتار!''''' تٷيمەسٸن نۇقىڭىز. '''''تاستا''''' تٷيمەسٸن
+نۇقىعاندا مٵندەمە اۋماعى مەن بارلىق قاباشاقتار تازالانادى.",
+'undeleterevisions'        => '{{PLURAL:$1|بٸر نۇسقا|$1 نۇسقا}} مۇراعاتتالدى',
+'undeletehistory'          => 'ەگەر بەت ماعلۇماتىن قايتارساڭىز,تاريحىندا بارلىق نۇسقالار دا
+قايتارىلادى. ەگەر جويۋدان سوڭ دٵل سولاي اتاۋىمەن جاڭا بەت جاسالسا, قايتارىلعان نۇسقالار
+تاريحتىڭ ەڭ ادىندا كٶرسەتٸلەدٸ, جٵنە كٶرسەتٸلٸپ تۇرعان بەتتٸڭ اعىمدىق نۇسقاسى
+ٶزدٸكتٸ الماستىرىلمايدى. فايل نۇسقالارىنىڭ قايتارعاندا شەكتەۋلەرٸ جويىلاتىن ۇمىتپاڭىز.',
+'undeleterevdel'           => 'ەگەر بەتتٸڭ ٷستٸڭگٸ نۇسقاسى جارىم-جارتىلاي جويىلعان بولسا جويىلعان قايتارۋى
+ اتقارىلمايدى. وسىنداي جاعدايلاردا, ەڭ جاڭا جويىلعان نۇسقا بەلگٸلەۋٸن نەمەسە جاسىرۋىن الاستاتىڭىز.
+كٶرۋٸڭٸزگە رۇقسات ەتٸلمەگەن فايل نۇسقالارى قايتارىلمايدى.',
+'undeletehistorynoadmin'   => 'بۇل بەت جويىلعان. جويۋ سەبەبٸ الدىنداعى ٶڭدەگەن قاتىسۋشىلار
+ەگجەي-تەگجەيلەرٸمەن بٸرگە تٶمەندەگٸ سيپاتتاماسىندا كٶرسەتٸلگەن.
+وسى جويىلعان نۇسقالاردىڭ مٵتٸنٸ تەك ٵكٸمشٸلەرگە قاتىناۋلى.',
+'undelete-revision'        => '$2 كەزٸندەگٸ $1 دەگەننٸڭ جويىلعان نۇسقاسى:',
+'undeleterevision-missing' => 'جارامسىز نە جوعالعان نۇسقا. سٸلتەمەڭٸز جارامسىز بولۋى مٷمكٸن, نە
+نۇسقا قايتارىلعان تٷگە نەمەسە مۇراعاتتان الاستاتىلعان.',
+'undeletebtn'              => 'قايتار!',
+'undeletereset'            => 'تاستا',
+'undeletecomment'          => 'مٵندەمەسٸ:',
+'undeletedarticle'         => '«[[$1]]» قايتاردى',
+'undeletedrevisions'       => '{{plural:$1|نۇسقانى|$1 نۇسقانى}} قايتاردى',
+'undeletedrevisions-files' => '{{plural:$1|نۇسقانى|$1 نۇسقانى}} جٵنە {{plural:$2|فايلدى|$2 فايلدى}} قايتاردى',
+'undeletedfiles'           => '{{plural:$1|1 فايل|$1 فايل}} قايتاردى',
+'cannotundelete'           => 'قايتارۋ سٵتسٸز بٸتتٸ; تاعى بٸرەۋ سٸزدەن بۇرىن سول بەتتٸ قايتارعان بولار.',
+'undeletedpage'            => "<big>'''$1 قايتارىلدى'''</big>
+
+جۋىقتاعى جويۋ مەن قايتارۋ جٶنٸندە [[{{ns:special}}:Log/delete|جويۋ جۋرنالىن]] قاراڭىز.",
+'undelete-header'          => 'جۋىقتاعى جويىلعان بەتتەر جٶنٸندە [[{{ns:special}}:Log/delete|جويۋ جۋرنالىن]] قاراڭىز.',
+'undelete-search-box'      => 'جويىلعان بەتتەردٸ ٸزدەۋ',
+'undelete-search-prefix'   => 'مىنادان باستالعان بەتتەردٸ كٶرسەت:',
+'undelete-search-submit'   => 'ٸزدەۋ',
+'undelete-no-results'      => 'جويۋ مۇراعاتىندا ەشقانداي سٵيكەس بەتتەر تابىلمادى.',
+
+# Namespace form on various pages
+'namespace' => 'ەسٸم اياسى:',
+'invert'    => 'تالعاۋدى كەرٸلەۋ',
+
+# Contributions
+'contributions' => 'قاتىسۋشى ٷلەسٸ',
+'mycontris'     => 'ٷلەسٸم',
+'contribsub2'    => '$1 ($2) ٷلەسٸ',
+'nocontribs'    => 'وسى ٸزدەۋ شارتىنا سٵيكەس ٶزگەرٸستەر تابىلعان جوق.',
+'ucnote'        => 'تٶمەندە وسى قاتىسۋشىنىڭ سوڭعى <b>$2</b> كٷندەگٸ, سوڭعى <b>$1</b> ٶزگەرٸسٸ كٶرسەتلەدٸ.',
+'uclinks'       => 'سوڭعى $2 كٷندەگٸ, سوڭعى $1 ٶزگەرٸسٸن قاراۋ.',
+'uctop'         => ' (ٷستٸ)',
+
+'sp-contributions-newest'      => 'ەڭ جاڭاسىنا',
+'sp-contributions-oldest'      => 'ەڭ ەسكٸسٸنە',
+'sp-contributions-newer'       => 'جاڭالاۋ $1',
+'sp-contributions-older'       => 'ەسكٸلەۋ $1',
+'sp-contributions-newbies'     => 'تەك جاڭا تٸركەلگٸدەن جاساعان ٷلەستەردٸ كٶرسەت',
+'sp-contributions-newbies-sub' => 'جاڭادان تٸركەلگٸ جاساعاندار ٷشٸن',
+'sp-contributions-blocklog'    => 'بۇعاتتاۋ جۋرنالى',
+'sp-contributions-search'      => 'ٷلەس ٷشٸن ٸزدەۋ',
+'sp-contributions-username'    => 'IP جاي نە قاتىسۋشى اتى:',
+'sp-contributions-submit'      => 'ٸزدەۋ',
+
+'sp-newimages-showfrom'        => '$1 كەزٸنەن بەرٸ — جاڭا سۋرەتتەردٸ كٶرسەت',
+
+# What links here
+'whatlinkshere'         => 'سٸلتەگەن بەتتەر',
+'whatlinkshere-barrow'  => '&lt;',
+'notargettitle'         => 'اقىرعى اتاۋ جوق',
+'notargettext'          => 'وسى ٵرەكەت ورىندالاتىن نىسانا بەت,
+نە قاتىسۋشى كٶرسەتٸلمەگەن.',
+'linklistsub'           => '(سٸلتەمەلەر تٸزٸمٸ)',
+'linkshere'             => "'''[[:$1]]''' دەگەنگە مىنا بەتتەر سٸلتەيدٸ:",
+'nolinkshere'           => "'''[[:$1]]''' دەگەنگە ەش بەت سٸلتەمەيدٸ.",
+'nolinkshere-ns'        => "تالعانعان ەسٸم اياسىندا '''[[:$1]]''' دەگەنگە ەشقانداي بەت سٸلتەمەيدٸ.",
+'isredirect'            => 'ايداتۋ بەتٸ',
+'istemplate'            => 'كٸرٸكتٸرۋ',
+'whatlinkshere-prev'    => '{{PLURAL:$1|الدىڭعى|الدىڭعى $1}}',
+'whatlinkshere-next'    => '{{PLURAL:$1|كەلەسٸ|كەلەسٸ $1}}',
+
+# Block/unblock
+'blockip'                     => 'پايدالانۋشىنى بۇعاتتاۋ',
+'blockiptext'                 => 'تٶمەندەگٸ ٷلگٸت پايدالانۋشىنىڭ جازۋ 
+رۇقساتىن بەلگٸلٸ IP جايىمەن نە اتاۋىمەن بۇعاتتاۋ ٷشٸن قولدانىلادى.
+بۇنى تەك بۇزاقىلىققا كەدەرگٸ ٸستەۋ ٷشٸن جٵنە دە
+[[{{{{ns:mediawiki}}:policy-url}}|ەرەجەلەر]] بويىنشا اتقارۋىڭىز جٶن.
+تٶمەندە تيٸستٸ سەبەبٸن تولتىرىپ كٶرسەتٸڭٸز (مىسالى, دٵيەككە بۇزاقىلىقپەن
+ٶزگەرتكەن بەتتەردٸ كەلتٸرٸپ).',
+'ipaddress'                   => 'IP جاي',
+'ipadressorusername'          => 'IP جاي نە اتى',
+'ipbexpiry'                   => 'بٸتەتٸن مەرزٸمٸ',
+'ipbreason'                   => 'سەبەبٸ',
+'ipbreasonotherlist'          => 'باسقا سەبەپ',
+// These are examples only. They can be translated but should be adjusted via
+// [[MediaWiki:ipbreason-list]] by the local community
+// defines a block reason not part of a group
+// * defines a block reason group in the drow down menu
+// ** defines a block reason
+// To disable this drop down menu enter '-' in [[MediaWiki:ipbreason-dropdown]].
+'ipbreason-dropdown'    => '
+* بۇعاتتاۋدىڭ جالپى سەبەبتەرٸ 
+** بۇزاقىلىق: جالعان مٵلٸمەت ەنگٸزۋ 
+** بۇزاقىلىق: بەتتەردەگٸ ماعلۇماتتى جويۋ 
+** بۇزاقىلىق: سىرتقى توراپتار سٸلتەمەلەرٸن جاۋدىرۋ 
+** بۇزاقىلىق: بەتتەرگە بٶستەكٸلٸك/قيسىنسىزدىق كٸرٸسترٸرۋ 
+** قوقانداۋ/قۋعىنداۋ مٸنەزقۇلىق 
+** كٶپتەگەن تٸركەلگٸلەردٸ جاساپ قيياناتتاۋ 
+** قولايسىز قاتىسۋشى اتاۋى',
+'ipbanononly'                 => 'تەك تٸركەلگٸسٸز پايدالانۋشىلاردى بۇعاتتاۋ',
+'ipbcreateaccount'            => 'تٸركەلگٸ جاساۋىن كەدەرگٸلەۋ',
+'ipbenableautoblock'          => 'بۇل پايدالانۋشى سوڭعى قولدانعان IP جايى, جٵنە كەيٸن تٷزەتۋ ٸستەۋگە بايقاپ قارالعان ٵرقايسى IP جايلارى ٶزدٸكتٸ بۇعاتتالسىن',
+'ipbsubmit'                   => 'پايدالانۋشىنى بۇعاتتاۋ',
+'ipbother'                    => 'باسقا مەرزٸم',
+'ipboptions'                  => '2 ساعات:2 hours,1 كٷن:1 day,3 كٷن:3 days,1 اپتا:1 week,2 اپتا:2 weeks,1 اي:1 month,3 اي:3 months,6 اي:6 months,1 جىل:1 year,مٵنگٸ:infinite',
+'ipbotheroption'              => 'باسقا',
+'ipbotherreason'              => 'باسقا/قوسىمشا سەبەپ',
+'ipbhidename'                 => 'بۇعاتتاۋ جۋرنالىنداعى, بەلسەندٸ بۇعاتتاۋ تٸزٸمٸندەگٸ, قاتىسۋشى تٸزٸمٸننەگٸ اتى/IP جاسىرىلسىن',
+'badipaddress'                => 'جارامسىز IP جاي',
+'blockipsuccesssub'           => 'بۇعاتتاۋ سٵتتٸ ٶتتٸ',
+'blockipsuccesstext'          => '[[{{ns:special}}:Contributions/$1|$1]] دەگەن بۇعاتتالعان.
+<br />بۇعاتتاردى شولىپ شىعۋ ٷشٸن [[{{ns:special}}:Ipblocklist|IP بۇعاتتاۋ تٸزٸمٸن]] قاراڭىز.',
+'ipb-edit-dropdown'           => 'بۇعاتتاۋ سەبەپتەرٸن ٶڭدەۋ',
+'ipb-unblock-addr'            => '$1 دەگەندٸ بۇعاتتاماۋ',
+'ipb-unblock'                 => 'قاتىسۋشى اتىن نەمەسە IP جايىن بۇعاتتاماۋ',
+'ipb-blocklist-addr'          => '$1 ٷشٸن بار بۇعاتتاۋلاردى قاراۋ',
+'ipb-blocklist'               => 'بار بۇعاتتاۋلاردى قاراۋ',
+'unblockip'                   => 'پايدالانۋشىنى بۇعاتتاماۋ',
+'unblockiptext'               => 'تٶمەندەگٸ ٷلگٸت بەلگٸلٸ IP جايىمەن نە اتاۋىمەن
+بۇرىن بۇعاتتالعان پايدالانۋشىنىڭ جازۋ رۇقساتىن قايتارۋ ٷشٸن قولدانىلادى.',
+'ipusubmit'                   => 'وسى جايدى بۇعاتتاماۋ',
+'unblocked'                   => '[[{{ns:user}}:$1|$1]] بۇعاتتاۋى ٶشٸرٸلدٸ',
+'ipblocklist'                 => 'بۇعاتتالعان پايدالانۋشى / IP- جاي تٸزٸمٸ',
+'ipblocklist-submit'          => 'ٸزدەۋ',
+'blocklistline'               => '$1, $2 «$3» دەگەندٸ بۇعاتتادى ($4)',
+'infiniteblock'               => 'مٵنگٸ',
+'expiringblock'               => 'بٸتۋٸ: $1',
+'anononlyblock'               => 'تەك تٸركەلگٸسٸزدٸ',
+'noautoblockblock'            => 'ٶزدٸك بۇعاتتاۋ ٶشٸرٸلەنگەن',
+'createaccountblock'          => 'تٸركەلگٸ جاساۋى بۇعاتتالعان',
+'ipblocklistempty'            => 'بۇعاتتاۋ تٸزٸمٸ بوس, نەمەسەرۇرانىسقان IP جاي/قاتىسۋشى اتى بۇعاتتالعان جوق.',
+'blocklink'                   => 'بۇعاتتاۋ',
+'unblocklink'                 => 'بۇعاتتاماۋ',
+'contribslink'                => 'ٷلەسٸ',
+'autoblocker'                 => "IP جايىڭىزدى جۋىقتا «[[{{ns:user}}:1|$1]]» پايدالانعان, سوندىقتان ٶزدٸك تٷردە بۇعاتتالعان. $1 بۇعاتتاۋ سەبەبٸ: «$2».",
+'blocklogpage'                => 'بۇعاتتاۋ_جۋرنالى',
+'blocklogentry'               => '«[[$1]]» دەگەندٸ $2 مەرزٸمگە بۇعاتتادى $3',
+'blocklogtext'                => 'بۇل پايدالانۋشىلاردى بۇعاتتاۋ/بۇعاتتاماۋ ٵرەكەتتەرٸنٸڭ جۋرنالى. ٶزدٸك تٷردە
+بۇعاتتالعان IP جايلار وسىندا تٸزٸمدەلگەمەگەن. اعىمداعى بەلسەندٸ بۇعاتتاۋلارىن
+[[{{ns:special}}:Ipblocklist|IP بۇعاتتاۋ تٸزٸمٸنەن]] قاراۋعا بولادى.',
+'unblocklogentry'             => '«$1» دەگەننٸڭ بۇعاتتاۋىن ٶشٸردٸ',
+'block-log-flags-anononly'    => 'تەك تٸركەلمەگەندەر',
+'block-log-flags-nocreate'    => 'تٸركەلگٸ جاساۋ ٶشٸرٸلگەن',
+'block-log-flags-noautoblock'   => 'ٶزدٸكتٸ بۇعاتتاعىش ٶشٸرٸلگەن',
+'range_block_disabled'        => 'اۋقىم بۇعاتتاۋىن جاساۋ ٵكٸمشٸلٸك مٷمكٸندٸگٸ ٶشٸرٸلگەن.',
+'ipb_expiry_invalid'          => 'بٸتەتٸن ۋاقىتى جارامسىز.',
+'ipb_already_blocked'         => '«$1» بۇعاتتالعان تٷگە',
+'ip_range_invalid'            => 'IP جاي اۋقىمى جارامسىز.',
+'proxyblocker'                => 'پروكسي سەرۆەرلەردٸ بۇعاتتاۋىش',
+'ipb_cant_unblock'            => 'قاتە: IP $1 بۇعاتتاۋى تابىلمادى. ونىڭ بۇعاتتاۋى ٶشٸرلگەن سيياقتى.',
+'proxyblockreason'            => 'IP جايىڭىز اشىق پروكسي سەرۆەرگە جاتاتىندىقتان بۇعاتتالعان. ينتەرنەت قىزمەتٸن جابدىقتاۋشىڭىزبەن, نە تەحنيكالىق مەدەۋ قىزمەتٸمەن قاتىناسىڭىز, جٵنە ولارعا وسى وتە كٷردەلٸ قاۋىپسٸزدٸك شاتاق تۋرالى اقپارات بەرٸڭٸز.',
+'proxyblocksuccess'           => 'بٸتتٸ.',
+'sorbs'                       => 'DNSBL قارا تٸزٸمٸ',
+'sorbsreason'                 => 'سٸزدٸڭ IP جايىڭىز وسى توراپتا قولدانىلعان DNSBL قارا تٸزٸمٸندەگٸ اشىق پروكسي-سەرۆەر دەپ تابىلادى.',
+'sorbs_create_account_reason' => 'سٸزدٸڭ IP جايىڭىز وسى توراپتا قولدانىلعان DNSBL قارا تٸزٸمٸندەگٸ اشىق پروكسي-سەرۆەر دەپ تابىلادى. تٸركەلگٸ جاساي المايسىز.',
+
+# Developer tools
+'lockdb'              => 'دەرەكقوردى قۇلىپتاۋ',
+'unlockdb'            => 'دەرەكقوردى قۇلىپتاماۋ',
+'lockdbtext'          => 'دەرەكقوردىن قۇلىپتالۋى بارلىق پايدالانۋشىنىڭ
+بەت ٶڭدەۋ, باپتاۋىن قالاۋ, باقىلاۋ تٸزٸمٸن, تاعى باسقا
+دەرەكقوردى ٶزگەرتەتٸن مٷمكٸندٸكتەرٸن توقتاتا تۇرادى.
+وسى ماقساتىڭىزدى, جٵنە جٶندەۋٸڭٸز بٸتكەندە
+دەرەكقوردى اشاتىڭىزدى راستاڭىز.',
+'unlockdbtext'        => 'دەرەكقودىن اشىلۋى بارلىق پايدالانۋشىنىڭ بەت ٶڭدەۋ,
+باپتاۋىن قالاۋ, باقىلاۋ تٸزٸمٸن, تاعى باسقا دەرەكقوردى ٶزگەرتەتٸن
+مٷمكٸندٸكتەرٸن قايتا اشادى.
+وسى ماقساتىڭىزدى راستاڭىز.',
+'lockconfirm'         => 'يٵ, مەن دەرەكقوردى راستان قۇلىپتايمىن.',
+'unlockconfirm'       => 'يٵ, مەن دەرەكقوردى راستان قۇلىپتامايمىن.',
+'lockbtn'             => 'دەرەكقوردى قۇلىپتا',
+'unlockbtn'           => 'دەرەكقوردى قۇلىپتاما',
+'locknoconfirm'       => 'راستاۋ بەلگٸسٸن قويماپسىز.',
+'lockdbsuccesssub'    => 'دەرەكقوردى قۇلىپتاۋ سٵتتٸ ٶتتٸ',
+'unlockdbsuccesssub'  => 'قۇلىپتالعان دەرەكقور اشىلدى',
+'lockdbsuccesstext'   => 'دەرەكقور قۇلىپتالدى.
+<br />جٶندەۋٸڭٸز بٸتكەننەن كەيٸن [[{{ns:special}}:Unlockdb|قۇلىپتاۋىن ٶشٸرۋگە]] ۇمىتپاڭىز.',
+'unlockdbsuccesstext' => 'قۇلىپتالعان دەرەكقور سٵتتٸ اشىلدى.',
+'lockfilenotwritable' => 'دەرەكقور قۇلىپتاۋ فايلى جازىلمايدى. دەرەكقوردى قۇلىپتاۋ نە اشۋ ٷشٸن, ۆەب-سەرۆەر فايلعا جازۋ رۇقساتى بولۋ قاجەت.',
+'databasenotlocked'   => 'دەرەكقور قۇلىپتالعان جوق.',
+
+# Move page
+'movepage'                => 'بەتتٸ جىلجىتۋ',
+'movepagetext'            => "تٶمەندەگٸ ٷلگٸتتٸ قولدانىپ بەتتەردٸ قايتا اتايدى,
+بارلىق تاريحىن جاڭا اتاۋعا جىلجىتادى.
+بۇرىنعى بەت اتاۋى جاڭا اتاۋعا ايداتاتىن بەت بولادى.
+ەسكٸ اتاۋىنا سٸلتەيتٸن  سٸلتەمەلەر ٶزگەرتٸلمەيدٸ; جىلجىتۋدان سوڭ
+شىنجىرلى ايداتۋلار بار-جوعىن تەكسەرٸڭٸز.
+سٸلتەمەلەر بۇرىنعى جولداۋىمەن بىلايعى ٶتۋٸن تەكسەرۋٸنە
+سٸز مٸندەتتٸ بولاسىز.
+
+ەسكەرٸڭٸز, ەگەر جىلجىتىلاتىن اتاۋدا بەت بولسا, سول ەسكٸ بەتكە ايداتۋ
+بولعانشا جٵنە تاريحى بولسا, بەت '''جىلجىتىلمايدى'''.
+وسىنىڭ ماعىناسى: ەگەر بەتتٸ قاتەلٸك پەن قايتا اتالسا,
+بۇرىنعى اتاۋىنا قايتا اتاۋعا بولادى,
+بٸراق بار بەتتٸڭ ٷستٸنە جازۋعا بولمايدى.
+
+<b>نازار سالىڭىز!</b>
+بۇل دٵرٸپتٸ بەتكە قاتاڭ جٵنە كەنەت ٶزگەرٸس جاساۋعا مٷمكٸن;
+ٵرەكەتتٸڭ الدىنان وسىنىڭ زارداپتارىن تٷسٸنگەنٸڭٸزگە باتىل
+بولىڭىز.",
+'movepagetalktext'        => "كەلەسٸ سەبەپتەر '''بولعانشا''' دەيٸن, تالقىلاۋ بەتٸ ٶزدٸك تٷردە بٸرگە جىلجىتىلادى:
+* بوس ەمەس تالقىلاۋ بەتٸ جاڭا اتاۋدا بولعاندا, نەمەسە
+* تٶمەندەگٸ قابىشاقتا بەلگٸنٸ الاستاتقاندا.
+
+وسى ورايدا, قالاۋىڭىز بولسا, بەتتٸ قولدان جىلجىتا نە قوسا الاسىز.",
+'movearticle'             => 'بەتتٸ جىلجىتۋ',
+'movenologin'             => 'جٷيەگە كٸرمەگەنسٸز',
+'movenologintext'         => 'بەتتٸ جىلجىتۋ ٷشٸن تٸركەلگەن بولۋىڭىز جٵنە
+ [[{{ns:special}}:Userlogin|كٸرۋٸڭٸز]] قاجەت.',
+'newtitle'                => 'جاڭا اتاۋعا',
+'move-watch'              => 'بۇل بەتتٸ باقىلاۋ',
+'movepagebtn'             => 'بەتتٸ جىلجىت',
+'pagemovedsub'            => 'جىلجىتۋ سٵتتٸ اياقتالدى',
+'pagemovedtext'           => '«[[$1]]» بەتٸ «[[$2]]» بەتٸنە جىلجىتىلدى.',
+'articleexists'           => 'بىلاي اتاۋلى بەت بار بولدى, نە تاڭداعان
+اتاۋىڭىز جارامدى ەمەس.
+باسقا اتاۋ تانداڭىز',
+'talkexists'              => "'''بەتتٸڭ ٶزٸ سٵتتٸ جىلجىتىلدى, بٸراق تالقىلاۋ بەتٸ بٸرگە جىلجىتىلمادى, ونىڭ سەبەبٸ جاڭا اتاۋدىڭ تالقىلاۋ بەتٸ بار تٷگە. بۇنى قولمەن قوسىڭىز.'''",
+'movedto'                 => 'مىناعان جىلجىتىلدى:',
+'movetalk'                => 'قاتىستى تالقىلاۋ بەتٸمەن بٸرگە جىلجىتۋ',
+'talkpagemoved'           => 'قاتىستى تالقىلاۋ بەتٸ دە جىلجىتىلدى.',
+'talkpagenotmoved'        => 'قاتىستى تالقىلاۋ بەتٸ <strong>جىلجىتىلمادى</strong>.',
+'1movedto2'               => '«[[$1]]» بەتٸندە ايداتۋ قالدىرىپ «[[$2]]» بەتٸنە جىلجىتتى',
+'1movedto2_redir'         => '«[[$1]]» بەتٸن «[[$2]]» ايداتۋ بەتٸنٸڭ ٷستٸنە جىلجىتتى',
+'movelogpage'             => 'جىلجىتۋ جۋرنالى',
+'movelogpagetext'         => 'تٶمەندە جىلجىتىلعان بەتتەردٸڭ تٸزٸمٸ بەرٸلٸپ تۇر.',
+'movereason'              => 'سەبەبٸ',
+'revertmove'              => 'قايتارۋ',
+'delete_and_move'         => 'جويۋ جٵنە جىلجىتۋ',
+'delete_and_move_text'    => '==جويۋ قاجەت==
+
+اقىرعى «[[$1]]» بەت اتاۋى بار تٷگە.
+جىلجىتۋعا جول بەرۋ ٷشٸن جويامىز با؟',
+'delete_and_move_confirm' => 'يٵ, وسى بەتتٸ جوي',
+'delete_and_move_reason'  => 'جىلجىتۋعا جول بەرۋ ٷشٸن جويىلعان',
+'selfmove'                => 'قاينار جٵنە اقىرعى اتاۋى بٸردەي; بەت ٶزٸنە جىلجىتىلمايدى.',
+'immobile_namespace'      => 'قاينار نەمەسە اقىرعى اتاۋى ارنايى تٷرٸندە بولدى; وسىنداي ەسٸم اياسى جاعىنا جٵنە جاعىنان بەتتەر جىلجىتىلمايدى.',
+
+# Export
+'export'          => 'بەتتەردٸ سىرتقا بەرۋ',
+'exporttext'      => 'XML پٸشٸمٸنە قاپتالعان بٶلەك بەت نە بەتتەر بۋماسى
+مٵتٸنٸڭ جٵنە ٶڭدەۋ تاريحىن سىرتقا بەرە الاسىز. وسىنى, باسقا ۋيكيگە
+جٷيەنٸڭ [[{{ns:special}}:Import|سىرتتان الۋ بەتٸن]] پايدالانىپ, الۋعا بولادى.
+
+بەتتەردٸ سىرتقا بەرۋ ٷشٸن, اتاۋلارىن تٶمەندەگٸ مٵتٸن اۋماعىنا ەنگٸزٸڭٸز,
+بٸر جولدا بٸر اتاۋ, جٵنە تانداڭىز: نە اعىمدىق نۇسقاسىن, بارلىق ەسكٸ نۇسقالارى مەن
+جٵنە تاريحى جولدارى مەن بٸرگە, نە دٵل اعىمدىق نۇسقاسىن, سوڭعى ٶڭدەۋ تۋرالى اقپاراتى مەن بٸرگە.
+
+سوڭعى جاعدايدا سٸلتەمەنٸ دە, مىسالى {{{{ns:mediawiki}}:mainpage}} بەتٸ ٷشٸن [[{{ns:special}}:Export/{{MediaWiki:mainpage}}]] قولدانۋعا بولادى.',
+'exportcuronly'   => 'تولىق تاريحىن ەمەس, تەك اعىمدىق نۇسقاسىن كٸرٸستٸرٸڭٸز',
+'exportnohistory' => "----
+'''اڭعارتپا:''' ٶنٸمدٸلٸك ٵسەرٸ سەبەپتەرٸنەن, بەتتەر تولىق تاريحىن سىرتقا بەرۋٸ ٶشٸرٸلگەن.",
+'export-submit'   => 'سىرتقا بەر',
+'export-addcattext' => 'مىنا ساناتتاعى بەتتەردٸ ٷستەۋ:',
+'export-addcat' => 'ٷستە',
+
+# Namespace 8 related
+'allmessages'               => 'جٷيە حابارلارى',
+'allmessagesname'           => 'اتاۋى',
+'allmessagesdefault'        => 'ٵدەپكٸ مٵتٸنٸ',
+'allmessagescurrent'        => 'اعىمدىق مٵتٸنٸ',
+'allmessagestext'           => 'مىندا «MediaWiki:» ەسٸم اياسىنداعى بارلىق قاتىناۋلى جٷيە حابار تٸزٸمٸ بەرٸلٸپ تۇر.',
+'allmessagesnotsupportedUI' => 'Your current interface language <b>$1</b> is not supported by Special:Allmessages at this site.',
+'allmessagesnotsupportedDB' => "'''wgUseDatabaseMessages''' بابى ٶشٸرٸلگەن سەبەبٸنەن '''{{ns:special}}:AllMessages''' سيپاتى سٷەمەلدەنبەيدٸ.",
+'allmessagesfilter'         => 'حاباردى اتاۋى بويىنشا سٷزگٸلەۋ:',
+'allmessagesmodified'       => 'تەك ٶزگەرتٸلگەندٸ كٶرسەت',
+
+# Thumbnails
+'thumbnail-more'           => 'ٷلكەيتۋ',
+'missingimage'    => '<b>جوعالعان سۋرەت </b><br /><i>$1</i>',
+'filemissing'     => 'جوعالعان فايل',
+'thumbnail_error'          => 'نوباي قۇرۋ قاتەسٸ: $1',
+'djvu_page_error'          => 'DjVu بەتٸ مٷمكٸندٸ اۋماقتىڭ سىرتىنددا',
+'djvu_no_xml'              => 'DjVu فايلىنا XML كەلتٸرۋگە بولمايدى',
+'thumbnail_invalid_params' => 'نوبايدىڭ باپتارى جارامسىز',
+'thumbnail_dest_directory' => 'اقىرعى قالتا جاسالمادى',
+# Special:Import
+'import'                     => 'بەتتەردٸ سىرتتان الۋ',
+'importinterwiki'            => 'ۋيكي-تاسىمالداپ سىرتتان الۋ',
+'import-interwiki-text'      => 'سىرتتان الاتىن ۋيكي جوباسىن جٵنە بەت اتاۋىن تانداڭىز.
+نۇسقا كٷن-ايى جٵنە ٶڭدەۋشٸ اتتارى ساقتالادى.
+بارلىق ۋيكي-تاسىمالداپ سىرتتان الۋ ٵرەكەتتەر [[{{ns:special}}:Log/import|سىرتتان الۋ جۋرنالىنا]] جازىلىپ الىنادى.',
+'import-interwiki-history'   => 'وسى بەتتٸڭ بارلىق تاريحي نۇسقالارىن كٶشٸرۋ',
+'import-interwiki-submit'    => 'سىرتتان الۋ',
+'import-interwiki-namespace' => 'مىنا ەسٸم اياسىنا بەتتەردٸ تاسىمالداۋ:',
+'importtext'                 => 'قاينار ۋيكيدەن «Special:Export» قۋرالىن قولدانىپ, فايلدى سىرتقا بەرٸڭٸز, ديسكٸڭٸزگە ساقتاڭىز, سوسىن مىندا قوتارىڭىز.',
+'importstart'                => 'بەتتەردٸ سىرتتان الۋى…',
+'import-revision-count'      => '$1 نۇسقا',
+'importnopages'              => 'سىرتتان الىناتىن بەتتەر جوق.',
+'importfailed'               => 'سىرتتان الۋ سٵتسٸز بٸتتٸ: $1',
+'importunknownsource'        => 'Cىرتتان الۋ قاينار تٷرٸ تانىمالسىز',
+'importcantopen'             => 'سىرتتان الۋ فايلى اشىلمايدى',
+'importbadinterwiki'         => 'جارامسىز ۋيكي-ارالىق سٸلتەمە',
+'importnotext'               => 'بوستى, نە مٵتٸنٸ جوق',
+'importsuccess'              => 'سىرتتان الۋ سٵتتٸ اياقتالدى!',
+'importhistoryconflict'      => 'تاريحىنىڭ ەگەس نۇسقالارى بار (بۇل بەتتٸ الدىندا سىرتتان الىنعان سيياقتى)',
+'importnosources'            => 'ەشقانداي ۋيكي-تاسىمالداپ سىرتتان الۋ قاينارى بەلگٸلەنمەگەن, جٵنە تاريحىن تٸكەلەي قوتارۋى ٶشٸرٸلگەن.',
+'importnofile'               => 'سىرتتان الىناتىن فايل قوتارىلعان جوق.',
+'importuploaderror'          => 'سىرتتان الۋ فايلدىڭ قوتارۋى سٵتسٸز بٸتتٸ; وسى فايل مٶلشەرٸ رۇقسات ەتٸلگەن مٶلشەردەن اسۋى مٷمكٸن.',
+
+# Import log
+'importlogpage'                    => 'سىرتتان الۋ جۋرنالى',
+'importlogpagetext'                => 'باسقا ۋيكيلەردەن ٶڭدەۋ تاريحىمەن بٸرگە بەتتەردٸ ٵكٸمشٸلٸك رەتٸندە سىرتتان الۋ.',
+'import-logentry-upload'           => 'فايل قوتارۋىمەن سىرتتان «[[$1]]» بەتٸ الىندى',
+'import-logentry-upload-detail'    => '$1 نۇسقا',
+'import-logentry-interwiki'        => 'ۋيكي-تاسىمالدانعان $1',
+'import-logentry-interwiki-detail' => '$2 دەگەننەن $1 نۇسقا',
+
+# Tooltip help for the actions
+'tooltip-pt-userpage'             => 'جەكە بەتٸم',
+'tooltip-pt-anonuserpage'         => 'وسى IP جايدىڭ جەكە بەتٸ',
+'tooltip-pt-mytalk'               => 'تالقىلاۋ بەتٸم',
+'tooltip-pt-anontalk'             => 'وسى IP جاي تٷزەتۋلەرٸن تالقىلاۋ',
+'tooltip-pt-preferences'          => 'باپتاۋىم',
+'tooltip-pt-watchlist'            => 'ٶزگەرٸستەرٸن باقىلاپ تۇرعان بەتتەر تٸزٸمٸم.',
+'tooltip-pt-mycontris'            => 'ٷلەستەرٸمدٸڭ تٸزٸمٸ',
+'tooltip-pt-login'                => 'كٸرۋٸڭٸزدٸ ۇسىنامىز, ول مٸندەتتٸ ەمەس.',
+'tooltip-pt-anonlogin'            => 'كٸرۋٸڭٸزدٸ ۇسىنامىز, بٸراق, ول مٸندەتتٸ ەمەس.',
+'tooltip-pt-logout'               => 'شىعۋ',
+'tooltip-ca-talk'                 => 'ماعلۇمات بەتتٸ تالقىلاۋ',
+'tooltip-ca-edit'                 => 'بۇل بەتتٸ ٶڭدەي الاسىز. ساقتاۋدىڭ الدىندا «قاراپ شىعۋ» تٷيمەسٸن نۇقىڭىز.',
+'tooltip-ca-addsection'           => 'بۇل تالقىلاۋ بەتٸندە جاڭا تاراۋ باستاۋ.',
+'tooltip-ca-viewsource'           => 'بۇل بەت قورعالعان, بٸراق, قاينارىن قاراۋعا بولادى.',
+'tooltip-ca-history'              => 'بۇل بەتتٸن جۋىقتاعى نۇسقالارى.',
+'tooltip-ca-protect'              => 'بۇل بەتتٸ قورعاۋ',
+'tooltip-ca-delete'               => 'بۇل بەتتٸ جويۋ',
+'tooltip-ca-undelete'             => 'بۇل بەتتٸڭ جويۋدىڭ الدىنداعى بولعان تٷزەتۋلەرٸن قايتارۋ',
+'tooltip-ca-move'                 => 'بۇل بەتتٸ جىلجىتۋ',
+'tooltip-ca-watch'                => 'بۇل بەتتٸ باقىلاۋ تٸزٸمٸڭٸزگە ٷستەۋ',
+'tooltip-ca-unwatch'              => 'بۇل بەتتٸ باقىلاۋ تٸزٸمٸڭٸزدەن الاستاتۋ',
+'tooltip-search'                  => '{{SITENAME}} جوباسىنان ٸزدەستٸرۋ',
+'tooltip-p-logo'                  => 'باستى بەتكە',
+'tooltip-n-mainpage'              => 'باستى بەتكە بارىپ كەتٸڭٸز',
+'tooltip-n-portal'                => 'جوبا تۋرالى, نە ٸستەۋٸڭٸزگە بولاتىن, قايدان تابۋعا بولاتىن تۋرالى',
+'tooltip-n-currentevents'         => 'اعىمداعى وقيعالارعا قاتىستى اقپارات',
+'tooltip-n-recentchanges'         => 'وسى ۋيكيدەگٸ جۋىقتاعى ٶزگەرٸستەر تٸزٸمٸ.',
+'tooltip-n-randompage'            => 'كەزدەيسوق بەتتٸ جٷكتەۋ',
+'tooltip-n-help'                  => 'انىقتاما تابۋ ورنى.',
+'tooltip-n-sitesupport'           => 'بٸزگە جٵردەم ەتٸڭٸز',
+'tooltip-t-whatlinkshere'         => 'مىندا سٸلتەگەن بارلىق بەتتەردٸڭ تٸزٸمٸ',
+'tooltip-t-recentchangeslinked'   => 'مىننان سٸلتەنگەن بەتتەردٸڭ جۋىقتاعى ٶزگەرٸستەرٸ',
+'tooltip-feed-rss'                => 'بۇل بەتتٸڭ RSS ارناسى',
+'tooltip-feed-atom'               => 'بۇل بەتتٸڭ Atom ارناسى',
+'tooltip-t-contributions'         => 'وسى قاتىسۋشىنىڭ ٷلەس تٸزٸمٸن قاراۋ',
+'tooltip-t-emailuser'             => 'وسى قاتىسۋشىعا email جٸبەرۋ',
+'tooltip-t-upload'                => 'سۋرەت نە مەديا فايلدارىن قوتارۋ',
+'tooltip-t-specialpages'          => 'بارلىق ارنايى بەتتەر تٸزٸمٸ',
+'tooltip-ca-nstab-main'           => 'ماعلۇمات بەتٸن قاراۋ',
+'tooltip-ca-nstab-user'           => 'قاتىسۋشى بەتٸن قاراۋ',
+'tooltip-ca-nstab-media'          => 'تاسپا بەتٸن قاراۋ',
+'tooltip-ca-nstab-special'        => 'بۇل ارنايى بەت, بەتتٸڭ ٶزٸ ٶڭدەلٸنبەيدٸ.',
+'tooltip-ca-nstab-project'        => 'جوبا بەتٸن قاراۋ',
+'tooltip-ca-nstab-image'          => 'سۋرەت بەتٸن قاراۋ',
+'tooltip-ca-nstab-mediawiki'      => 'جٷيە حابارىن قاراۋ',
+'tooltip-ca-nstab-template'       => 'ٷلگٸنٸ قاراۋ',
+'tooltip-ca-nstab-help'           => 'انىقتىما بەتٸن قاراۋ',
+'tooltip-ca-nstab-category'       => 'سانات بەتٸن قاراۋ',
+'tooltip-minoredit'               => 'وسىنى شاعىن تٷزەتۋ دەپ بەلگٸلەۋ',
+'tooltip-save'                    => 'تٷزەتۋٸڭٸزدٸ ساقتاۋ',
+'tooltip-preview'                 => 'ساقتاۋدىڭ الدىنان تٷزەتۋٸڭٸزدٸ قاراپ شىعىڭىز!',
+'tooltip-diff'                    => 'مٵتٸنگە قانداي ٶزگەرٸستەردٸ جاساعانىڭىزدى قاراۋ.',
+'tooltip-compareselectedversions' => 'بەتتٸڭ ەكٸ نۇسقاسىنىڭ ايىرماسىن قاراۋ.',
+'tooltip-watch'                   => 'بۇل بەتتٸ باقىلاۋ تٸزٸمٸڭٸزگە ٷستەۋ',
+'tooltip-recreate'                => 'بەت جويىلعانىنا قاراماستان قايتا جاساۋ',
+
+# Stylesheets
+'common.css'   => '/* مىنداعى CSS ٵمٸرلەرٸ بارلىق بەزەندٸرۋ مٵنەرٸندەردە قولدانىلادى */',
+'monobook.css' => '/* مىنداعى CSS ٵمٸرلەرٸ «دارا كٸتاپ» بەزەندٸرۋ مٵنەرٸن پايدالانۋشىلارعا ٵسەر ەتەدٸ */',
+
+# Scripts
+'common.js'   => '/* Мындағы JavaScript әмірлері әрқайсы бет қаралғанда барлық пайдаланушыларға жүктеледі. */
+
+/* Workaround for language variants */
+
+// Set user-defined "lang" attributes for the document element (from zh)
+var htmlE=document.documentElement;
+if (wgUserLanguage == "kk"){ variant = "kk"; }
+if (wgUserLanguage == "kk-kz"){ variant = "kk-Cyrl"; }
+if (wgUserLanguage == "kk-tr"){ variant = "kk-Latn"; }
+if (wgUserLanguage == "kk-cn"){ variant = "kk-Arab"; htmlE.setAttribute("dir","rtl"); }
+htmlE.setAttribute("lang",variant);
+htmlE.setAttribute("xml:lang",variant);
+
+// Switch language variants of messages (from zh)
+function wgULS(kz,tr,cn){
+        //
+        kk=kz||tr||cn;
+        kz=kz;
+        tr=tr;
+        cn=cn;
+        switch(wgUserLanguage){
+                case "kk": return kk;
+                case "kk-kz": return kz;
+                case "kk-tr": return tr;
+                case "kk-cn": return cn;
+                default: return "";
+        }
+}
+
+// workaround for RTL ([[bugzilla:6756]])  and for [[bugzilla:02020]] & [[bugzilla:04295]]
+if (wgUserLanguage == "kk-cn") 
+{
+  document.direction="rtl";
+  document.write(\'<link rel="stylesheet" type="text/css" href="\'+stylepath+\'/common/common_rtl.css">\');
+  document.write(\'<style type="text/css">html {direction:rtl;} body {direction:rtl; unicode-bidi:embed; lang:kk-Arab; font-family:"Arial Unicode MS",Arial,Tahoma; font-size: 75%; letter-spacing: 0.001em;} html > body div#content ol {clear: left;} ol {margin-left:2.4em; margin-right:2.4em;} ul {margin-left:1.5em; margin-right:1.5em;} h1.firstHeading {background-position: bottom right; background-repeat: no-repeat;} h3 {font-size:110%;} h4 {font-size:100%;} h5 {font-size:90%;} #catlinks {width:100%;} #userloginForm {float: right !important;}</style>\');
+
+  if (skin == "monobook"){
+     document.write(\'<link rel="stylesheet" type="text/css" href="\'+stylepath+\'/monobook/rtl.css">\');
+  }
+}',
+'monobook.js' => '/* Бостекі болды; орнына мынаны [[MediaWiki:common.js]] пайдалаңыз */',
+
+# Metadata
+'nodublincore'      => 'وسى سەرۆەرگە «Dublin Core RDF» مەتا-دەرەكتەرٸ ٶشٸرٸلگەن.',
+'nocreativecommons' => 'وسى سەرۆەرگە «Creative Commons RDF» مەتا-دەرەكتەرٸ ٶشٸرٸلگەن.',
+'notacceptable'     => 'وسى ۋيكي سەرۆەرٸ سٸزدٸڭ «پايدالانۋشى ٵرەكەتكٸشٸ» وقي الاتىن پٸشٸمٸ بار دەرەكتەردٸ جٸبەرە المايدى.',
+
+# Attribution
+'anonymous'        => '{{SITENAME}} تٸركەلگٸسٸز پايدالانۋشى(لار)ى',
+'siteuser'         => '{{SITENAME}} قاتىسۋشى $1',
+'lastmodifiedatby' => 'بۇل بەتتٸ $3 قاتىسۋشى سوڭعى ٶزگەرتكەن كەزٸ: $2, $1.', # $1 date, $2 time, $3 user
+'and'              => 'جٵنە',
+'othercontribs'    => 'شىعارما نەگٸزٸن $1 جازعان.',
+'others'           => 'باسقالار',
+'siteusers'        => '{{SITENAME}} قاتىسۋشى(لار) $1',
+'creditspage'      => 'بەتتٸ جازعاندار',
+'nocredits'        => 'بۇل بەتتٸ جازعاندار تۋرالى اقپارات جوق.',
+
+# Spam protection
+'spamprotectiontitle'    => '«سپام»-نان قورعايتىن سٷزگٸ',
+'spamprotectiontext'     => 'بۇل بەتتٸڭ ساقتاۋىن «سپام» سٷزگٸسٸ بۇعاتتادى. بۇنىڭ سەبەبٸ سىرتقى توراپ سٸلتەمەسٸنەن بولۋى مٷمكٸن.',
+'spamprotectionmatch'    => 'كەلەسٸ «سپام» مٵتٸنٸ سٷزگٸلەنگەن: $1',
+'subcategorycount'       => 'بۇل ساناتتا {{PLURAL:$1|بٸر|$1}} تٶمەنگٸ سانات بار.',
+'categoryarticlecount'   => 'بۇل ساناتتا {{PLURAL:$1|بٸر|$1}} بەت بار.',
+'category-media-count'   => 'بۇل ساناتتا {{PLURAL:$1|بٸر|$1}} فايل بار.',
+'listingcontinuesabbrev' => ' (جالع.)',
+'spambot_username'       => 'MediaWiki spam cleanup',
+'spam_reverting'         => '$1 دەگەنگە سٸلتەمەسٸ جوق سوڭعى نۇسقاسىنا قايتارىلدى',
+'spam_blanking'          => '$1 دەگەنگە سٸلتەمەسٸ بار بارلىق نۇسقالار تازارتىلدى',
+
+# Info page
+'infosubtitle'   => 'بەت تۋرالى اقپارات',
+'numedits'       => 'تٷزەتۋ سانى (نەگٸزگٸ بەت): $1',
+'numtalkedits'   => 'تٷزەتۋ سانى (تالقىلاۋ بەتٸ): $1',
+'numwatchers'    => 'باقىلاۋشى سانى: $1',
+'numauthors'     => 'ٵرتٷرلٸ اۋتورلار سانى (نەگٸزگٸ بەتٸ): $1',
+'numtalkauthors' => 'ٵرتٷرلٸ اۋتور سانى (تالقىلاۋ بەتٸ): $1',
+
+# Math options
+'mw_math_png'    => 'ٵرقاشان PNG تٷرٸمەن كٶرسەت',
+'mw_math_simple' => 'كٵدٸمگٸ بولسا HTML پٸشٸمٸمەن, باسقاشا PNG تٷرٸمەن',
+'mw_math_html'   => 'ىقتيمال بولسا HTML پٸشٸمٸمەن, باسقاشا PNG تٷرٸمەن',
+'mw_math_source' => 'TeX پٸشٸمٸندە قالدىرۋ (مٵتٸندٸك شولعىشتارىنا)',
+'mw_math_modern' => 'وسى زاماننىڭ شولعىشتارىنا ۇسىنىلعان',
+'mw_math_mathml' => 'ىقتيمال بولسا MathML پشٸمٸمەن (سىناق تٷرٸندە)',
+
+# Patrolling
+'markaspatrolleddiff'                 => 'كٷزەتتە دەپ بەلگٸلەۋ',
+'markaspatrolledtext'                 => 'وسى بەتتٸ كٷزەتۋدە دەپ بەلگٸلەۋ',
+'markedaspatrolled'                   => 'كٷزەتتە دەپ بەلگٸلەندٸ',
+'markedaspatrolledtext'               => 'تالعانعان نۇسقا كٷزەتتە دەپ بەلگٸلەندٸ.',
+'rcpatroldisabled'                    => 'جۋىقتاعى ٶزگەرٸستەر كٷزەتٸ ٶشٸرٸلگەن',
+'rcpatroldisabledtext'                => 'جۋىقتاعى ٶزگەرٸستەر كٷزەتٸ قاسيەتٸ اعىمدا ٶشٸرٸلگەن.',
+'markedaspatrollederror'              => 'كٷزەتتە دەپ بەلگٸلەنبەيدٸ',
+'markedaspatrollederrortext'          => 'كٷزەتتە دەپ بەلگٸلەۋ ٷشٸن نۇسقاسىن ەنگٸزٸڭٸز.',
+'markedaspatrollederror-noautopatrol' => 'ٶزٸڭٸزدٸڭ ٶزگەرٸستەرٸڭٸزدٸ كٷزەتكە قويا المايسىز.',
+
+# Patrol log
+'patrol-log-page' => 'كٷزەت جۋرنالى',
+'patrol-log-line' => '$2 كەزٸندە $1 دەگەندٸ كٷزەتتە دەپ بەلگٸلەدٸ $3',
+'patrol-log-auto' => '(ٶزدٸك)',
+'patrol-log-diff' => 'r$1',
+
+# Image deletion
+'deletedrevision' => 'مىنا ەسكٸ نۇسقاسىن جويدى: $1.',
+
+# Browsing diffs
+'previousdiff' => '← الدىڭعىمەن ايىرماسى',
+'nextdiff'     => 'كەلەسٸمەن ايىرماسى →',
+
+# Media information
+'mediawarning'          => "'''نازار سالىڭىز''': بۇل فايل تٷرٸندە قاسكٷنەمدٸ ٵمٸردٸڭ بار بولۋى ىقتيمال; فايلدى جەگٸپ جٷيەڭٸزگە زييان كەلتٸرۋٸڭٸز مٷمكٸن.<hr />",
+'imagemaxsize'          => 'سۋرەت تٷيٸندەمە بەتٸندەگٸ سۋرەتتٸڭ مٶلشەرٸن شەكتەۋٸ:',
+'thumbsize'             => 'نوباي مٶلشەرٸ:',
+'widthheight'           => '$1 × $2',
+'file-info'             => 'فايل مٶلشەرٸ: $1, MIME تٷرٸ: $2',
+'file-info-size'        => '($1 × $2 پيكسەل, فايل مٶلشەرٸ: $3, MIME تٷرٸ: $4)',
+'file-nohires'          => '<small>جوعارى اجىراتىلىمدىعى جەتٸمسٸز.</small>',
+'file-svg'              => '<small>بۇل شىعىنسىز سوزىلعىش ۆەكتورلىق سۋرەتٸ. نەگٸزگٸ مٶلشەرٸ: $1 × $2 پيكسەل.</small>',
+'show-big-image'        => 'جوعارى اجىراتىلىمدى',
+'show-big-image-thumb'  => '<small>قاراپ شىعۋ مٶلشەرٸ: $1 × $2 پيكسەل</small>',
+
+'newimages'         => 'ەڭ جاڭا فايلدار قويماسى',
+'showhidebots'      => '(بوتتاردى $1)',
+'noimages'          => 'كٶرەتٸن ەشتەڭە جوق.',
+
+# Variants for Kazakh language
+'variantname-kk-tr' => 'Latın',
+'variantname-kk-kz' => 'Кирил',
+'variantname-kk-cn' => 'توتە',
+'variantname-kk'    => 'disable',
+
+'passwordtooshort' => 'قۇپييا سٶزٸڭٸز جارامسىز نە تىم قىسقا. ەڭ كەمٸندە $1 ٵرٸپ جٵنە قاتىسۋشى اتىڭىزدان باسقا بولۋى قاجەت.',
+
+# Metadata
+'metadata'          => 'مەتا-دەرەكتەرٸ',
+'metadata-help'     => 'وسى فايلدا قوسىمشا اقپارات بار. بٵلكٸم, وسى اقپارات فايلدى جاساپ شىعارۋ, نە ساندىلاۋ ٷشٸن پايدالانعان ساندىق كامەرا, نە مٵتٸنالعىردان الىنعان. ەگەر وسى فايل نەگٸزگٸ كٷيٸنەن ٶزگەرتٸلگەن بولسا, كەيبٸر ەجەلەلەرٸ ٶزگەرتٸلگەن فوتوسۋرەتكە لايىق بولماس.',
+'metadata-expand'   => 'ەگجەي-تەگجەيٸن كٶرسەت',
+'metadata-collapse' => 'ەگجەي-تەگجەيٸن جاسىر',
+'metadata-fields'   => 'وسى حاباردا تٸزٸمدەلگەن EXIF مەتا-دەرەك اۋماقتارى,
+سۋرەت بەتٸ كٶرسەتۋ كەزٸندە مەتا-دەرەك كەستە جاسىرىلىعاندا كٸرٸستٸرلەدٸ.
+باسقاسى ٵدەپكٸدەن جاسىرىلادى.
+* make
+* model
+* datetimeoriginal
+* exposuretime
+* fnumber
+* focallength',
+
+# EXIF tags
+'exif-imagewidth'                  => 'ەنٸ',
+'exif-imagelength'                 => 'بيٸكتٸگٸ',
+'exif-bitspersample'               => 'قۇراش سايىن بيت سانى',
+'exif-compression'                 => 'قىسىم سۇلباسى',
+'exif-photometricinterpretation'   => 'پيكسەل قيىسۋى',
+'exif-orientation'                 => 'مەگزەۋٸ',
+'exif-samplesperpixel'             => 'قۇراش سانى',
+'exif-planarconfiguration'         => 'دەرەك رەتتەۋٸ',
+'exif-ycbcrsubsampling'            => 'Y قۇراشىنىڭ C قۇراشىنا جارناقتاۋى',
+'exif-ycbcrpositioning'            => 'Y قۇراشى جٵنە C قۇراشى مەكەندەۋٸ',
+'exif-xresolution'                 => 'دەرەلەي اجىراتىلىمدىعى',
+'exif-yresolution'                 => 'تٸرەلەي اجىراتىلىمدىعى',
+'exif-resolutionunit'              => 'X جٵنە Y اجىراتىلىمدىقتارىعىنىڭ ٶلشەمٸ',
+'exif-stripoffsets'                => 'سۋرەت دەرەرەكتەرٸنٸڭ جايعاسۋى',
+'exif-rowsperstrip'                => 'بەلدٸك سايىن جول سانى',
+'exif-stripbytecounts'             => 'قىسىمدالعان بەلدٸك سايىن بايت سانى',
+'exif-jpeginterchangeformat'       => 'JPEG SOI دەگەننەن ىعىسۋى',
+'exif-jpeginterchangeformatlength' => 'JPEG دەرەكتەرٸنٸڭ بايت سانى',
+'exif-transferfunction'            => 'تاسىمالداۋ فۋنكتسيياسى',
+'exif-whitepoint'                  => 'اق نٷكتە تٷستٸلٸگٸ',
+'exif-primarychromaticities'       => 'العى شەپتەگٸ تٷستٸلٸكتەرٸ',
+'exif-ycbcrcoefficients'           => 'تٷس اياسىن تاسىمالداۋ ماتريتسالىق ەسەلٸكتەرٸ',
+'exif-referenceblackwhite'         => 'قارا جٵنە اق انىقتاۋىش قوس كولەمدەرٸ',
+'exif-datetime'                    => 'فايلدىڭ ٶزگەرتٸلگەن كٷن-ايى',
+'exif-imagedescription'            => 'سۋرەت اتاۋى',
+'exif-make'                        => 'كامەرا ٶندٸرۋشٸسٸ',
+'exif-model'                       => 'كامەرا ٷلگٸسٸ',
+'exif-software'                    => 'قولدانىلعان باعدارلاما',
+'exif-artist'                      => 'جىعارماشىسى',
+'exif-copyright'                   => 'جىعارماشىلىق قۇقىقتار يەسٸ',
+'exif-exifversion'                 => 'Exif نۇسقاسى',
+'exif-flashpixversion'             => 'سٷيەمدەلٸنگەن Flashpix نۇسقاسى',
+'exif-colorspace'                  => 'تٷس اياسى',
+'exif-componentsconfiguration'     => 'ٵرقايسى قۇراش مٵنٸ',
+'exif-compressedbitsperpixel'      => 'سۋرەت قىسىمداۋ تٵرتٸبٸ',
+'exif-pixelydimension'             => 'سۋرەتتٸڭ جارامدى ەنٸ',
+'exif-pixelxdimension'             => 'سۋرەتتٸڭ جارامدى بيٸكتٸگٸ',
+'exif-makernote'                   => 'ٶندٸرۋشٸ ەسكەرتپەلەرٸ',
+'exif-usercomment'                 => 'پايدالانۋشى مٵندەمەلەرٸ',
+'exif-relatedsoundfile'            => 'قاتىستى دىبىس فايلى',
+'exif-datetimeoriginal'            => 'جاسالعان كەزٸ',
+'exif-datetimedigitized'           => 'ساندىقتاۋ كەزٸ',
+'exif-subsectime'                  => 'جاسالعان كەزٸنٸڭ سەكۋند بٶلشەكتەرٸ',
+'exif-subsectimeoriginal'          => 'تٷپنۇسقا كەزٸنٸڭ سەكۋند بٶلشەكتەرٸ',
+'exif-subsectimedigitized'         => 'ساندىقتاۋ كەزٸنٸڭ سەكۋند بٶلشەكتەرٸ',
+'exif-exposuretime'                => 'ۇستالىم ۋاقىتى',
+'exif-exposuretime-format'         => '$1 س ($2)',
+'exif-fnumber'                     => 'ساڭىلاۋ مٶلشەرٸ',
+'exif-fnumber-format'              => 'f/$1',
+'exif-exposureprogram'             => 'ۇستالىم باعدارلاماسى',
+'exif-spectralsensitivity'         => 'سپەكتر بويىنشا سەزگٸشتٸگٸ',
+'exif-isospeedratings'             => 'ISO جىلدامدىق جارناقتاۋى (جارىق سەزگٸشتٸگٸ)',
+'exif-oecf'                        => 'وپتوەلەكتروندى تٷرلەتۋ ىقپالى',
+'exif-shutterspeedvalue'           => 'جاپقىش جىلدامدىلىعى',
+'exif-aperturevalue'               => 'ساڭىلاۋلىق',
+'exif-brightnessvalue'             => 'اشىقتىق',
+'exif-exposurebiasvalue'           => 'ۇستالىم ٶتەمٸ',
+'exif-maxaperturevalue'            => 'بارىنشا ساڭىلاۋ اشۋى',
+'exif-subjectdistance'             => 'نىسانا قاشىقتىعى',
+'exif-meteringmode'                => 'ٶلشەۋ تٵرتٸبٸ',
+'exif-lightsource'                 => 'جارىق كٶزٸ',
+'exif-flash'                       => 'جارقىلداعىش',
+'exif-focallength'                 => 'شوعىرلاۋ الشاقتىعى',
+'exif-focallength-format'          => '$1 mm',
+'exif-subjectarea'                 => 'نىسانا اۋقىمى',
+'exif-flashenergy'                 => 'جارقىلداعىش قارقىنى',
+'exif-spatialfrequencyresponse'    => 'كەڭٸستٸك-جيٸلٸك ٵسەرشٸلٸگٸ',
+'exif-focalplanexresolution'       => 'ح بويىنشا شوعىرلاۋ جايپاقتىقتىڭ اجىراتىلىمدىعى',
+'exif-focalplaneyresolution'       => 'Y بويىنشا شوعىرلاۋ جايپاقتىقتىڭ اجىراتىلىمدىعى',
+'exif-focalplaneresolutionunit'    => 'شوعىرلاۋ جايپاقتىقتىڭ اجىراتىلىمدىق ٶلشەمٸ',
+'exif-subjectlocation'             => 'نىسانا مەكەندەۋٸ',
+'exif-exposureindex'               => 'ۇستالىم ايقىنداۋى',
+'exif-sensingmethod'               => 'سەنسوردٸڭ ٶلشەۋ ٵدٸسٸ',
+'exif-filesource'                  => 'فايل قاينارى',
+'exif-scenetype'                   => 'ساحنا تٷرٸ',
+'exif-cfapattern'                  => 'CFA سٷزگٸ كەيٸپٸ',
+'exif-customrendered'              => 'قوسىمشا سۋرەت ٶڭدەتۋٸ',
+'exif-exposuremode'                => 'ۇستالىم تٵرتٸبٸ',
+'exif-whitebalance'                => 'اق تٷسٸنٸڭ تەندەستٸگٸ',
+'exif-digitalzoomratio'            => 'ساندىق اۋقىمداۋ جارناقتاۋى',
+'exif-focallengthin35mmfilm'       => '35 mm تاسپاسىنىڭ شوعىرلاۋ الشاقتىعى',
+'exif-scenecapturetype'            => 'تٷسٸرگەن ساحنا تٷرٸ',
+'exif-gaincontrol'                 => 'ساحنانى مەڭگەرۋ',
+'exif-contrast'                    => 'قاراما-قارسىلىق',
+'exif-saturation'                  => 'قانىقتىق',
+'exif-sharpness'                   => 'ايقىندىق',
+'exif-devicesettingdescription'    => 'جابدىق باپتاۋ سيپاتتارى',
+'exif-subjectdistancerange'        => 'ساحنا قاشىقتىعىنىڭ كٶلەمٸ',
+'exif-imageuniqueid'               => 'سۋرەتتٸڭ بٸرەگەي نٶمٸرٸ (ID)',
+'exif-gpsversionid'                => 'GPS بەلگٸشەسٸنٸڭ نۇسقاسى',
+'exif-gpslatituderef'              => 'سولتٷستٸك نەمەسە وڭتٷستٸك بويلىعى',
+'exif-gpslatitude'                 => 'بويلىعى',
+'exif-gpslongituderef'             => 'شىعىس نەمەسە باتىس ەندٸگٸ',
+'exif-gpslongitude'                => 'ەندٸگٸ',
+'exif-gpsaltituderef'              => 'بيٸكتٸك كٶرسەتۋٸ',
+'exif-gpsaltitude'                 => 'بيٸكتٸك',
+'exif-gpstimestamp'                => 'GPS ۋاقىتى (اتوم ساعاتى)',
+'exif-gpssatellites'               => 'ٶلشەۋگە پيدالانىلعان جەر سەرٸكتەرٸ',
+'exif-gpsstatus'                   => 'قابىلداعىش كٷيٸ',
+'exif-gpsmeasuremode'              => 'ٶلشەۋ تٵرتٸبٸ',
+'exif-gpsdop'                      => 'ٶلشەۋ دٵلدٸگٸ',
+'exif-gpsspeedref'                 => 'جىلدامدىلىق ٶلشەمٸ',
+'exif-gpsspeed'                    => 'GPS قابىلداعىشتىڭ جىلدامدىلىعى',
+'exif-gpstrackref'                 => 'قوزعالىس باعىتىن كٶرسەتۋٸ',
+'exif-gpstrack'                    => 'قوزعالىس باعىتى',
+'exif-gpsimgdirectionref'          => 'سۋرەت باعىتىن كٶرسەتۋٸ',
+'exif-gpsimgdirection'             => 'سۋرەت باعىتى',
+'exif-gpsmapdatum'                 => 'پايدالانىلعان گەودەزييالىق تٷسٸرمە دەرەكتەرٸ',
+'exif-gpsdestlatituderef'          => 'نىسانا بويلىعىن كٶرسەتۋٸ',
+'exif-gpsdestlatitude'             => 'نىسانا بويلىعى',
+'exif-gpsdestlongituderef'         => 'نىسانا ەندٸگٸن كٶرسەتۋٸ',
+'exif-gpsdestlongitude'            => 'نىسانا ەندٸگٸ',
+'exif-gpsdestbearingref'           => 'نىسانا ازيمۋتىن كٶرسەتۋٸ',
+'exif-gpsdestbearing'              => 'نىسانا ازيمۋتى',
+'exif-gpsdestdistanceref'          => 'نىسانا قاشىقتىعىن كٶرسەتۋٸ',
+'exif-gpsdestdistance'             => 'نىسانا قاشىقتىعى',
+'exif-gpsprocessingmethod'         => 'GPS ٶڭدەتۋ ٵدٸسٸنٸڭ اتاۋى',
+'exif-gpsareainformation'          => 'GPS اۋماعىنىڭ اتاۋى',
+'exif-gpsdatestamp'                => 'GPS كٷن-ايى',
+'exif-gpsdifferential'             => 'GPS سارالانعان تٷزەتۋ',
+
+# EXIF attributes
+'exif-compression-1' => 'ۇلعايتىلعان',
+'exif-compression-6' => 'JPEG',
+
+'exif-unknowndate' => 'بەلگٸسٸز كٷن-ايى',
+'exif-photometricinterpretation-2' => 'RGB',
+'exif-photometricinterpretation-6' => 'YCbCr',
+
+
+'exif-orientation-1' => 'قالىپتى', # 0th row: top; 0th column: left
+'exif-orientation-2' => 'دەرەلەي شاعىلىسقان', # 0th row: top; 0th column: right
+'exif-orientation-3' => '180° بۇرىشقا اينالعان', # 0th row: bottom; 0th column: right
+'exif-orientation-4' => 'تٸرەلەي شاعىلىسقان', # 0th row: bottom; 0th column: left
+'exif-orientation-5' => 'ساعات تٸلشەسٸنە قارسى 90° بۇرىشقا اينالعان جٵنە تٸرەلەي شاعىلىسقان', # 0th row: left; 0th column: top
+'exif-orientation-6' => 'ساعات تٸلشە بويىنشا 90° بۇرىشقا اينالعان', # 0th row: right; 0th column: top
+'exif-orientation-7' => 'ساعات تٸلشە بويىنشا 90° بۇرىشقا اينالعان جٵنە تٸرەلەي شاعىلىسقان', # 0th row: right; 0th column: bottom
+'exif-orientation-8' => 'ساعات تٸلشەسٸنە قارسى 90° بۇرىشقا اينالعان', # 0th row: left; 0th column: bottom
+
+'exif-planarconfiguration-1' => 'تالپاق پٸشٸم',
+'exif-planarconfiguration-2' => 'تايپاق پٸشٸم',
+
+'exif-xyresolution-i' => '$1 dpi',
+'exif-xyresolution-c' => '$1 dpc',
+
+'exif-colorspace-1'      => 'sRGB',
+'exif-colorspace-ffff.h' => 'FFFF.H',
+
+'exif-componentsconfiguration-0' => 'بار بولمادى',
+'exif-componentsconfiguration-1' => 'Y',
+'exif-componentsconfiguration-2' => 'Cb',
+'exif-componentsconfiguration-3' => 'Cr',
+'exif-componentsconfiguration-4' => 'R',
+'exif-componentsconfiguration-5' => 'G',
+'exif-componentsconfiguration-6' => 'B',
+
+'exif-exposureprogram-0' => 'انىقتالماعان',
+'exif-exposureprogram-1' => 'قولمەن',
+'exif-exposureprogram-2' => 'باعدارلامالى ٵدٸس (قالىپتى)',
+'exif-exposureprogram-3' => 'ساڭىلاۋ باسىڭقىلىعى',
+'exif-exposureprogram-4' => 'ىسىرما باسىڭقىلىعى',
+'exif-exposureprogram-5' => 'ٶنەر باعدارلاماسى (انىقتىق تەرەندٸگٸنە ساناسقان)',
+'exif-exposureprogram-6' => 'قيمىل باعدارلاماسى (جاپقىش شاپشاندىلىعىنا ساناسقان)',
+'exif-exposureprogram-7' => 'تٸرەلەي ٵدٸسٸ (ارتى شوعىرلاۋسىز تاياۋ تٷسٸرمەلەر)',
+'exif-exposureprogram-8' => 'دەرەلەي ٵدٸسٸ (ارتى شوعىرلانعان دەرەلەي تٷسٸرمەلەر)',
+
+'exif-subjectdistance-value' => '$1 m',
+
+'exif-meteringmode-0'   => 'بەلگٸسٸز',
+'exif-meteringmode-1'   => 'بٸركەلكٸ',
+'exif-meteringmode-2'   => 'بۇلدىر داق',
+'exif-meteringmode-3'   => 'بٸرداقتى',
+'exif-meteringmode-4'   => 'كٶپداقتى',
+'exif-meteringmode-5'   => 'ٶرنەكتٸ',
+'exif-meteringmode-6'   => 'جىرتىندى',
+'exif-meteringmode-255' => 'باسقا',
+
+'exif-lightsource-0'   => 'بەلگٸسٸز',
+'exif-lightsource-1'   => 'كٷن جارىعى',
+'exif-lightsource-2'   => 'كٷنجارىقتى شام',
+'exif-lightsource-3'   => 'قىزدىرعىشتى شام',
+'exif-lightsource-4'   => 'جارقىلداعىش',
+'exif-lightsource-9'   => 'اشىق كٷن',
+'exif-lightsource-10'  => 'بۇلىنعىر كٷن',
+'exif-lightsource-11'  => 'كٶلەنكەلٸ',
+'exif-lightsource-12'  => 'كٷنجارىقتى شام (D 5700–7100 K)',
+'exif-lightsource-13'  => 'كٷنجارىقتى شام (N 4600–5400 K)',
+'exif-lightsource-14'  => 'كٷنجارىقتى شام (W 3900–4500 K)',
+'exif-lightsource-15'  => 'كٷنجارىقتى شام (WW 3200–3700 K)',
+'exif-lightsource-17'  => 'قالىپتى جارىق قاينارى A',
+'exif-lightsource-18'  => 'قالىپتى جارىق قاينارى B',
+'exif-lightsource-19'  => 'قالىپتى جارىق قاينارى C',
+'exif-lightsource-20'  => 'D55',
+'exif-lightsource-21'  => 'D65',
+'exif-lightsource-22'  => 'D75',
+'exif-lightsource-23'  => 'D50',
+'exif-lightsource-24'  => 'ستۋدييالىق ISO كٷنجارىقتى شام',
+'exif-lightsource-255' => 'باسقا جارىق قاينارى',
+
+'exif-focalplaneresolutionunit-2' => 'ديۋيم',
+
+'exif-sensingmethod-1' => 'انىقتالماعان',
+'exif-sensingmethod-2' => '1-چيپتٸ اۋماقتى تٷسسەزگٸش',
+'exif-sensingmethod-3' => '2-چيپتٸ اۋماقتى تٷسسەزگٸش',
+'exif-sensingmethod-4' => '3-چيپتٸ اۋماقتى تٷسسەزگٸش',
+'exif-sensingmethod-5' => 'كەزەكتٸ اۋماقتى تٷسسەزگٸش',
+'exif-sensingmethod-7' => '3-سىزىقتى تٷسسەزگٸش',
+'exif-sensingmethod-8' => 'كەزەكتٸ سىزىقتى تٷسسەزگٸش',
+
+'exif-filesource-3' => 'DSC',
+
+'exif-scenetype-1' => 'تٸكەلەي تٷسٸرٸلگەن فوتوسۋرەت',
+
+'exif-customrendered-0' => 'قالىپتى ٶڭدەتۋ',
+'exif-customrendered-1' => 'قوسىمشا ٶڭدەتۋ',
+
+'exif-exposuremode-0' => 'ٶزدٸك ۇستالىمداۋ',
+'exif-exposuremode-1' => 'قولمەن ۇستالىمداۋ',
+'exif-exposuremode-2' => 'ٶزدٸك جارقىلداۋ',
+
+'exif-whitebalance-0' => 'اق تٷسٸنٸڭ ٶزدٸك تەندەستٸرۋ',
+'exif-whitebalance-1' => 'اق تٷسٸنٸڭ قولمەن تەندەستٸرۋ',
+
+'exif-scenecapturetype-0' => 'قالىپتى',
+'exif-scenecapturetype-1' => 'دەرەلەي',
+'exif-scenecapturetype-2' => 'تٸرەلەي',
+'exif-scenecapturetype-3' => 'تٷنگٸ ساحنا',
+
+'exif-gaincontrol-0' => 'جوق',
+'exif-gaincontrol-1' => 'تٶمەن زورايۋ',
+'exif-gaincontrol-2' => 'جوعارى زورايۋ',
+'exif-gaincontrol-3' => 'تٶمەن باياۋلاۋ',
+'exif-gaincontrol-4' => 'جوعارى باياۋلاۋ',
+
+'exif-contrast-0' => 'قالىپتى',
+'exif-contrast-1' => 'ۇيان',
+'exif-contrast-2' => 'تۇرپايى',
+
+'exif-saturation-0' => 'قالىپتى',
+'exif-saturation-1' => 'تٶمەن قانىقتى',
+'exif-saturation-2' => 'جوعارى قانىقتى',
+
+'exif-sharpness-0' => 'قالىپتى',
+'exif-sharpness-1' => 'ۇيان',
+'exif-sharpness-2' => 'تۇرپايى',
+
+'exif-subjectdistancerange-0' => 'بەلگٸسٸز',
+'exif-subjectdistancerange-1' => 'تاياۋ تٷسٸرٸلگەن',
+'exif-subjectdistancerange-2' => 'جاقىن تٷسٸرٸلگەن',
+'exif-subjectdistancerange-3' => 'الىس تٷسٸرٸلگەن',
+
+# Pseudotags used for GPSLatitudeRef and GPSDestLatitudeRef
+'exif-gpslatitude-n' => 'سولتٷستٸك بويلىعى',
+'exif-gpslatitude-s' => 'وڭتٷستٸك بويلىعى',
+
+# Pseudotags used for GPSLongitudeRef and GPSDestLongitudeRef
+'exif-gpslongitude-e' => 'شىعىس ەندٸگٸ',
+'exif-gpslongitude-w' => 'باتىس ەندٸگٸ',
+
+'exif-gpsstatus-a' => 'ٶلشەۋ ۇلاسۋدا',
+'exif-gpsstatus-v' => 'ٶلشەۋ ٶزارا ٵرەكەتتە',
+
+'exif-gpsmeasuremode-2' => '2-باعىتتىق ٶلشەم',
+'exif-gpsmeasuremode-3' => '3-باعىتتىق ٶلشەم',
+
+# Pseudotags used for GPSSpeedRef and GPSDestDistanceRef
+'exif-gpsspeed-k' => 'km/h',
+'exif-gpsspeed-m' => 'mil/h',
+'exif-gpsspeed-n' => 'ج. تٷيٸن',
+
+# Pseudotags used for GPSTrackRef, GPSImgDirectionRef and GPSDestBearingRef
+'exif-gpsdirection-t' => 'شىن باعىت',
+'exif-gpsdirection-m' => 'ماگنيتتى باعىت',
+
+# External editor support
+'edit-externally'      => 'بۇل فايلدى سىرتقى قۇرال/باعدارلاما ارقىلى ٶڭدەۋ',
+'edit-externally-help' => 'كٶبٸرەك اقپارات ٷشٸن [http://meta.wikimedia.org/wiki/Help:External_editors ورناتۋ نۇسقاۋلارىن] قاراڭىز.',
+
+# 'all' in various places, this might be different for inflected languages
+'recentchangesall' => 'بارلىعىن',
+'imagelistall'     => 'بارلىعى',
+'watchlistall1'    => 'بارلىعى',
+'watchlistall2'    => 'بارلىق',
+'namespacesall'    => 'بارلىعى',
+
+# E-mail address confirmation
+'confirmemail'            => 'ە-پوشتا جايىن كۋٵلاندىرۋ',
+'confirmemail_noemail'    => '[[{{ns:special}}:Preferences|قاتىسۋشى باپتاۋىڭىزدا]] جارامدى ە-پوشتا جايىن ەنگٸزبەپسٸز.',
+'confirmemail_text'       => 'بۇل ۋيكيدە ە-پوشتا قاسيەتتەرٸن پايدالانۋدىڭ الدىنان ە-پوشتا جايىڭىزدى
+كۋٵلاندىرۋ قاجەت. ٶزٸڭٸزدٸڭ جايىڭىزعا كۋٵلاندىرۋ حاتىن جٸبەرۋ ٷشٸن تٶمەندەگٸ تٷيمەنٸ نۇقىڭىز.
+حاتتىڭ ٸشٸندە ارنايى كودى بار سٸلتەمە كٸرٸستٸرلەدٸ;	ە-پوشتا جايىڭىزدىڭ جارامدىعىن كۋٵلاندىرۋ ٷشٸن
+سٸلتەمەنٸ شولعىشتىڭ مەكەن-جاي جولاعىنا ەنگٸزٸپ اشىڭىز.',
+'confirmemail_pending'    => '<div class="error">
+راستاۋ بەلگٸلەمەڭٸز حاتپەن جٸبەرٸلٸپتٸ تٷگە; ەگەر تٸركەلگٸڭٸزدٸ 
+جۋىقتا ٸستەسەڭٸز, جاڭا بەلگٸلە سۇرانىسىن جٸبەرۋ الدىنان 
+حات كەلۋٸن بٸرشاما مينٶت كٷتە تۇرىڭىز.
+</div>',
+'confirmemail_send'       => 'كۋٵلاندىرۋ كودىن جٸبەرۋ',
+'confirmemail_sent'       => 'كۋٵلاندىرۋ حاتى جٸبەرٸلدٸ.',
+'confirmemail_oncreate'   => 'راستاۋ بەلگٸلەمەسٸ ە-پوشتا ادرەسٸڭٸزگە جٸبەرٸلدٸ.
+بۇل بەلگٸلەمە كٸرۋ ٷدٸرٸسٸنە كەرەگٸ جوق, بٸراق ول ە-پوشتا نەگٸزٸندەگٸ
+ۋيكي قاسيەتتەردٸ ەندٸرۋ ٷشٸن جەتٸستٸرۋٸڭٸز قاجەت.',
+'confirmemail_sendfailed' => 'كۋٵلاندىرۋ حاتى جٸبەرٸلمەدٸ. ەنگٸزٸلگەن جايدى جارامسىز ٵرٸتەرٸنە تەكسەرٸپ شىعىڭىز.
+
+پوشتا جٸبەرگٸشتٸڭ قايتارعانى: $1',
+'confirmemail_invalid'    => 'كۋٵلاندىرۋ كودى جارامسىز. كودتىڭ مەرزٸمٸ بٸتكەن شىعار.',
+'confirmemail_needlogin'  => 'ە-پوشتا جايىڭىزدى كۋٵلاندىرۋ ٷشٸن $1 قاجەت.',
+'confirmemail_success'    => 'ە-پوشتا جايىڭىز كۋٵلاندىرىلدى. ەندٸ ۋيكيگە كٸرٸپ جۇمىسقا كٸرٸسۋگە بولادى',
+'confirmemail_loggedin'   => 'ە-پوشتا جايىڭىز كۋٵلاندىرىلدى.',
+'confirmemail_error'      => 'كۋٵلاندىرۋىڭىزدى ساقتاعاندا بەلگٸسٸز قاتە بولدى.',
+'confirmemail_subject'    => '{{SITENAME}} تورابىنان ە-پوشتا جايىڭىزدى كۋٵلاندىرۋ حاتى',
+'confirmemail_body'       => "كەيبٸرەۋ, مىنا $1 IP جايىنان, ٶزٸڭٸز بولۋى مٷمكٸن,
+{{SITENAME}} جوباسىنداعى ە-پوشتا جايىن قولدانىپ «$2» تٸركەلگٸ جاساپتى.
+
+وسى تٸركەلگٸ راستان سٸزدٸكٸ ەكەنٸن كۋٵلاندىرۋ ٷشٸن, جٵنە {{SITENAME}} جوباسىنىڭ
+ە-پوشتا قاسيەتتەرٸن بەلسەندٸرۋ ٷشٸن, مىنا سٸلتەمەنٸ شولعىشپەن اشىڭىز:
+
+$3
+
+بۇل سٸزدٸكٸ '''ەمەس''' بولسا, سٸلتەمەگە ەرمەڭٸز. كۋٵلاندىرۋ كودىنىڭ
+مەرزٸمٸ $4 كەزٸندە بٸتەدٸ.",
+
+# Inputbox extension, may be useful in other contexts as well
+'tryexact'       => 'دٵل سٵيكەسٸن سىناپ كٶرٸڭٸز',
+'searchfulltext' => 'تولىق مٵتٸنٸمەن ٸزدەۋ',
+'createarticle'  => 'بەتتٸ باستاۋ',
+
+# Scary transclusion
+'scarytranscludedisabled' => '[ۋيكي-ارا كٸرەگۋ ٶشٸرٸلگەن]',
+'scarytranscludefailed'   => '[$1 بەتٸنە ٷلگٸ ٶڭدەتۋ سٵتسٸز بٸتتٸ; كەشٸرٸڭٸز]',
+'scarytranscludetoolong'  => '[URL جايى تىم ۇزىن; كەشٸرٸڭٸز]',
+
+# Trackbacks
+'trackbackbox'      => '<div id="mw_trackbacks">
+بۇل بەتتٸڭ اڭىستاۋلارى:<br />
+$1
+</div>',
+'trackbackremove'   => '([$1 جويىلدى])',
+'trackbacklink'     => 'اڭىستاۋ',
+'trackbackdeleteok' => 'اڭىستاۋ جويۋى سٵتتٸ ٶتتٸ.',
+
+# Delete conflict
+'deletedwhileediting' => 'نازار سالىڭىز:سٸز بۇل بەتتٸڭ ٶڭدەۋٸن باستاعاندا, وسى بەت جويىلدى!',
+'confirmrecreate'     => "سٸز بۇل بەتتٸڭ ٶندەۋٸن باستاعاندا [[{{ns:user}}:$1|$1]] ([[{{ns:user_talk}}:$1|تالقىلاۋى]]) وسى بەتتٸ جويدى, كٶرسەتكەن سەبەبٸ:
+: ''$2''
+وسى بەتتٸ شىنىنان قايتا جاساۋىن راستاڭىز.",
+'recreate'            => 'قايتا جاساۋ',
+
+'unit-pixel' => ' px',
+
+# HTML dump
+'redirectingto' => '[[$1]] بەتٸنە ايداتۋدا…',
+
+# action=purge
+'confirm_purge'        => 'قوسالقى قالتاداعى وسى بەتٸن تازالايمىز با؟<br /><br />$1',
+'confirm_purge_button' => 'جارايدى',
+
+'youhavenewmessagesmulti' => '$1 دەگەنگە جاڭا حابارلار تٷستٸ',
+
+'searchcontaining' => "مىنا سٶزٸ بار بەت اراسىنان ٸزدەۋ: ''$1''.",
+'searchnamed'      => "مىنا اتاۋلى بەت اراسىنان ٸزدەۋ: ''$1''.",
+'articletitles'    => "اتاۋلارى مىنادان باستالعان بەتتەر: ''$1''",
+'hideresults'      => 'نٵتيجەلەردٸ جاسىر',
+
+# DISPLAYTITLE
+'displaytitle' => '(بۇل بەتتٸڭ سٸلتەمەسٸ: [[$1]])',
+
+'loginlanguagelabel' => 'تٸل: $1',
+
+# Multipage image navigation
+'imgmultipageprev'   => '← الدىڭعى بەتكە',
+'imgmultipagenext'   => 'كەلەسٸ بەتكە →',
+'imgmultigo'         => 'ٶتۋ!',
+'imgmultigotopre'    => 'مىنا بەتكە ٶتۋ',
+'imgmultiparseerror' => 'سۋرەت فايلى قيراعان نەمەسە دۇرىس ەمەس, سوندىقتان {{SITENAME}} بەت تٸزٸمٸن كٶرسەتە المايدى.',
+
+# Table pager
+'ascending_abbrev'         => 'ٶسۋ',
+'descending_abbrev'        => 'كەمۋ',
+'table_pager_next'         => 'كەلەسٸ بەتكە',
+'table_pager_prev'         => 'الدىڭعى بەتكە',
+'table_pager_first'        => 'العاشقى بەتكە',
+'table_pager_last'         => 'سوڭعى بەتكە',
+'table_pager_limit'        => 'بەت سايىن $1 دانا كٶرسەت',
+'table_pager_limit_submit' => 'ٶتۋ',
+'table_pager_empty'        => 'ەش نٵتيجە جوق',
+
+# Auto-summaries
+'autosumm-blank'   => 'بەتتٸڭ بارلىق ماعلۇماتىن الاستاتتى',
+'autosumm-replace' => "بەتتٸ «$1» دەگەنمەن الماستىردى",
+'autoredircomment' => '[[$1]] دەگەنگە ايدادى', # This should be changed to the new naming convention, but existed beforehand
+'autosumm-new'     => 'جاڭا بەتتە: $1',
+
+# Size units
+'size-bytes'     => '$1 B',
+'size-kilobytes' => '$1 KB',
+'size-megabytes' => '$1 MB',
+'size-gigabytes' => '$1 GB',
+
+# Live preview
+'livepreview-loading' => 'جٷكتەۋدە…',
+'livepreview-ready'   => 'جٷكتەۋدە… دايىن!',
+'livepreview-failed'  => "تۋرا قاراپ شىعۋ امالى بولمادى!\nكٵدٸمگٸ قاراپ شىعۋ ٵدٸسٸن بايقاپ كٶرٸڭٸز.",
+'livepreview-error'   => "مىناعان قوسىلۋ امالى بولمادى: $1 «$2»\nكٵدٸمگٸ قاراپ شىعۋ ٵدٸسٸن بايقاپ كٶرٸڭٸز.",
+
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesKk_kz.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesKk_kz.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesKk_kz.php	(revision 1280)
@@ -0,0 +1,2583 @@
+<?php
+/**
+ * Kazakh (Қазақша)
+ *
+ * @addtogroup Language
+ *
+ */
+
+
+$separatorTransformTable = array(
+	',' => "\xc2\xa0",
+	'.' => ',',
+);
+
+$extraUserToggles = array(
+	'nolangconversion'
+);
+
+$fallback8bitEncoding = 'windows-1251';
+
+$linkPrefixExtension = true;
+
+$namespaceNames = array(
+	NS_MEDIA            => 'Таспа',
+	NS_SPECIAL          => 'Арнайы',
+	NS_MAIN	            => '',
+	NS_TALK	            => 'Талқылау',
+	NS_USER             => 'Қатысушы',
+	NS_USER_TALK        => 'Қатысушы_талқылауы',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK     => '$1_талқылауы',
+	NS_IMAGE            => 'Сурет',
+	NS_IMAGE_TALK       => 'Сурет_талқылауы',
+	NS_MEDIAWIKI        => 'МедиаУики',
+	NS_MEDIAWIKI_TALK   => 'МедиаУики_талқылауы',
+	NS_TEMPLATE         => 'Үлгі',
+	NS_TEMPLATE_TALK    => 'Үлгі_талқылауы',
+	NS_HELP             => 'Анықтама',
+	NS_HELP_TALK        => 'Анықтама_талқылауы',
+	NS_CATEGORY         => 'Санат',
+	NS_CATEGORY_TALK    => 'Санат_талқылауы'
+);
+
+$namespaceAliases = array(
+	# Aliases to kk-tr namespaces
+	'Taspa'               => NS_MEDIA,
+	'Arnaýı'              => NS_SPECIAL,
+	'Talqılaw'            => NS_TALK,
+	'Qatıswşı'            => NS_USER,
+	'Qatıswşı_talqılawı'  => NS_USER_TALK,
+	'$1_talqılawı'        => NS_PROJECT_TALK,
+	'Swret'               => NS_IMAGE,
+	'Swret_talqılawı'     => NS_IMAGE_TALK,
+	'MedïaWïkï'           => NS_MEDIAWIKI,
+	'MedïaWïkï_talqılawı' => NS_MEDIAWIKI_TALK,
+	'Ülgi'                => NS_TEMPLATE,
+	'Ülgi_talqılawı'      => NS_TEMPLATE_TALK,
+	'Anıqtama'            => NS_HELP,
+	'Anıqtama_talqılawı'  => NS_HELP_TALK,
+	'Sanat'               => NS_CATEGORY,
+	'Sanat_talqılawı'     => NS_CATEGORY_TALK,
+
+	# Aliases to kk-cn namespaces
+	'تاسپا'              => NS_MEDIA,
+	'ارنايى'              => NS_SPECIAL,
+	'تالقىلاۋ'            => NS_TALK,
+	'قاتىسۋشى'          => NS_USER,
+	'قاتىسۋشى_تالقىلاۋى'=> NS_USER_TALK,
+	'$1_تالقىلاۋى'        => NS_PROJECT_TALK,
+	'سۋرەت'              => NS_IMAGE,
+	'سۋرەت_تالقىلاۋى'    => NS_IMAGE_TALK,
+	'مەدياۋيكي'           => NS_MEDIAWIKI,
+	'مەدياۋيكي_تالقىلاۋى' => NS_MEDIAWIKI_TALK,
+	'ٷلگٸ'              => NS_TEMPLATE,
+	'ٷلگٸ_تالقىلاۋى'    => NS_TEMPLATE_TALK,
+	'ٴۇلگٴى'              => NS_TEMPLATE,
+	'ٴۇلگٴى_تالقىلاۋى'    => NS_TEMPLATE_TALK,
+	'انىقتاما'            => NS_HELP,
+	'انىقتاما_تالقىلاۋى'  => NS_HELP_TALK,
+	'سانات'              => NS_CATEGORY,
+	'سانات_تالقىلاۋى'    => NS_CATEGORY_TALK,
+);
+
+$skinNames = array(
+	'standard'    => 'Дағдылы',
+	'nostalgia'   => 'Аңсау',
+	'cologneblue' => 'Көлн зеңгірлігі',
+	'davinci'     => 'Да Винчи',
+	'mono'        => 'Дара',
+	'monobook'    => 'Дара кітап',
+	'myskin'      => 'Өз мәнерім',
+	'chick'       => 'Балапан',
+	'simple'      => 'Кәдімгі'
+);
+
+$datePreferences = array(
+	'default',
+	'mdy',
+	'dmy',
+	'ymd',
+	'ISO 8601',
+);
+
+$defaultDateFormat = 'ymd';
+
+$datePreferenceMigrationMap = array(
+	'default',
+	'mdy',
+	'dmy',
+	'ymd'
+);
+
+$dateFormats = array(
+	'mdy time' => 'H:i',
+	'mdy date' => 'xg j, Y',
+	'mdy both' => 'H:i, xg j, Y',
+
+	'dmy time' => 'H:i',
+	'dmy date' => 'j F, Y',
+	'dmy both' => 'H:i, j F, Y',
+
+	'ymd time' => 'H:i',
+	'ymd date' => 'Y "ж." xg j',
+	'ymd both' => 'H:i, Y "ж." xg j',
+
+	'ISO 8601 time' => 'xnH:xni:xns',
+	'ISO 8601 date' => 'xnY-xnm-xnd',
+	'ISO 8601 both' => 'xnY-xnm-xnd"T"xnH:xni:xns',
+);
+
+/**
+ * Magic words
+ * Customisable syntax for wikitext and elsewhere
+ *
+ * Note to translators:
+ *   Please include the English words as synonyms.  This allows people
+ *   from other wikis to contribute more easily.
+ *   Please don't remove deprecated values, them should be keeped for backward compatibility.
+ *
+ * This array can be modified at runtime with the LanguageGetMagic hook
+ */
+$magicWords = array(
+#   ID                                 CASE  SYNONYMS
+	'redirect'               => array( 0,    '#АЙДАУ', '#REDIRECT' ),
+	'notoc'                  => array( 0,    '__МАЗМҰНСЫЗ__', '__МСЫЗ__', '__NOTOC__' ),
+	'nogallery'              => array( 0,    '__ҚОЙМАСЫЗ__', '__ҚСЫЗ__', '__NOGALLERY__' ),
+	'forcetoc'               => array( 0,    '__МАЗМҰНДАТҚЫЗУ__', '__МҚЫЗУ__', '__FORCETOC__' ),
+	'toc'                    => array( 0,    '__МАЗМҰНЫ__', '__МЗМН__', '__TOC__' ),
+	'noeditsection'          => array( 0,    '__БӨЛІМӨНДЕТКІЗБЕУ__', '__NOEDITSECTION__' ),
+	'start'                  => array( 0,    '__БАСТАУ__', '__START__' ),
+	'currentmonth'           => array( 1,    'АҒЫМДАҒЫАЙ', 'CURRENTMONTH' ),
+	'currentmonthname'       => array( 1,    'АҒЫМДАҒЫАЙАТАУЫ', 'CURRENTMONTHNAME' ),
+	'currentmonthnamegen'    => array( 1,    'АҒЫМДАҒЫАЙІЛІКАТАУЫ', 'CURRENTMONTHNAMEGEN' ),
+	'currentmonthabbrev'     => array( 1,    'АҒЫМДАҒЫАЙЖИЫР', 'АҒЫМДАҒЫАЙҚЫСҚА', 'CURRENTMONTHABBREV' ),
+	'currentday'             => array( 1,    'АҒЫМДАҒЫКҮН', 'CURRENTDAY' ),
+	'currentday2'            => array( 1,    'АҒЫМДАҒЫКҮН2', 'CURRENTDAY2' ),
+	'currentdayname'         => array( 1,    'АҒЫМДАҒЫКҮНАТАУЫ', 'CURRENTDAYNAME' ),
+	'currentyear'            => array( 1,    'АҒЫМДАҒЫЖЫЛ', 'CURRENTYEAR' ),
+	'currenttime'            => array( 1,    'АҒЫМДАҒЫУАҚЫТ', 'CURRENTTIME' ),
+	'currenthour'            => array( 1,    'АҒЫМДАҒЫСАҒАТ', 'CURRENTHOUR' ),
+	'localmonth'             => array( 1,    'ЖЕРГІЛІКТІАЙ', 'LOCALMONTH' ),
+	'localmonthname'         => array( 1,    'ЖЕРГІЛІКТІАЙАТАУЫ', 'LOCALMONTHNAME' ),
+	'localmonthnamegen'      => array( 1,    'ЖЕРГІЛІКТІАЙІЛІКАТАУЫ', 'LOCALMONTHNAMEGEN' ),
+	'localmonthabbrev'       => array( 1,    'ЖЕРГІЛІКТІАЙЖИЫР', 'ЖЕРГІЛІКТІАЙҚЫСҚА', 'LOCALMONTHABBREV' ),
+	'localday'               => array( 1,    'ЖЕРГІЛІКТІКҮН', 'LOCALDAY' ),
+	'localday2'              => array( 1,    'ЖЕРГІЛІКТІКҮН2', 'LOCALDAY2'  ),
+	'localdayname'           => array( 1,    'ЖЕРГІЛІКТІКҮНАТАУЫ', 'LOCALDAYNAME' ),
+	'localyear'              => array( 1,    'ЖЕРГІЛІКТІЖЫЛ', 'LOCALYEAR' ),
+	'localtime'              => array( 1,    'ЖЕРГІЛІКТІУАҚЫТ', 'LOCALTIME' ),
+	'localhour'              => array( 1,    'ЖЕРГІЛІКТІСАҒАТ', 'LOCALHOUR' ),
+	'numberofpages'          => array( 1,    'БЕТСАНЫ', 'NUMBEROFPAGES' ),
+	'numberofarticles'       => array( 1,    'МАҚАЛАСАНЫ', 'NUMBEROFARTICLES' ),
+	'numberoffiles'          => array( 1,    'ФАЙЛСАНЫ', 'NUMBEROFFILES' ),
+	'numberofusers'          => array( 1,    'ҚАТЫСУШЫСАНЫ', 'NUMBEROFUSERS' ),
+	'numberofedits'          => array( 1,    'ТҮЗЕТУСАНЫ', 'NUMBEROFEDITS' ),
+	'pagename'               => array( 1,    'БЕТАТАУЫ', 'PAGENAME' ),
+	'pagenamee'              => array( 1,    'БЕТАТАУЫ2', 'PAGENAMEE' ),
+	'namespace'              => array( 1,    'ЕСІМАЯСЫ', 'NAMESPACE' ),
+	'namespacee'             => array( 1,    'ЕСІМАЯСЫ2', 'NAMESPACEE' ),
+	'talkspace'              => array( 1,    'ТАЛҚЫЛАУАЯСЫ', 'TALKSPACE' ),
+	'talkspacee'             => array( 1,    'ТАЛҚЫЛАУАЯСЫ2', 'TALKSPACEE' ),
+	'subjectspace'           => array( 1,    'ТАҚЫРЫПБЕТІ', 'МАҚАЛАБЕТІ', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+	'subjectspacee'          => array( 1,    'ТАҚЫРЫПБЕТІ2', 'МАҚАЛАБЕТІ2', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+	'fullpagename'           => array( 1,    'ТОЛЫҚБЕТАТАУЫ', 'FULLPAGENAME' ),
+	'fullpagenamee'          => array( 1,    'ТОЛЫҚБЕТАТАУЫ2', 'FULLPAGENAMEE' ),
+	'subpagename'            => array( 1,    'АСТЫҢҒЫБЕТАТАУЫ', 'SUBPAGENAME' ),
+	'subpagenamee'           => array( 1,    'АСТЫҢҒЫБЕТАТАУЫ2', 'SUBPAGENAMEE' ),
+	'basepagename'           => array( 1,    'НЕГІЗГІБЕТАТАУЫ', 'BASEPAGENAME' ),
+	'basepagenamee'          => array( 1,    'НЕГІЗГІБЕТАТАУЫ2', 'BASEPAGENAMEE' ),
+	'talkpagename'           => array( 1,    'ТАЛҚЫЛАУБЕТАТАУЫ', 'TALKPAGENAME' ),
+	'talkpagenamee'          => array( 1,    'ТАЛҚЫЛАУБЕТАТАУЫ2', 'TALKPAGENAMEE' ),
+	'subjectpagename'        => array( 1,    'ТАҚЫРЫПБЕТАТАУЫ', 'МАҚАЛАБЕТАТАУЫ', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+	'subjectpagenamee'       => array( 1,    'ТАҚЫРЫПБЕТАТАУЫ2', 'МАҚАЛАБЕТАТАУЫ2', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
+	'msg'                    => array( 0,    'ХБР:', 'MSG:' ),
+	'subst'                  => array( 0,    'БӘДЕЛ:', 'SUBST:' ),
+	'msgnw'                  => array( 0,    'УИКИСІЗХБР:', 'MSGNW:' ),
+	'img_thumbnail'          => array( 1,    'нобай', 'thumbnail', 'thumb' ),
+	'img_manualthumb'        => array( 1,    'нобай=$1', 'thumbnail=$1', 'thumb=$1'),
+	'img_right'              => array( 1,    'оңға', 'оң', 'right' ),
+	'img_left'               => array( 1,    'солға', 'сол', 'left' ),
+	'img_none'               => array( 1,    'ешқандай', 'жоқ', 'none' ),
+	'img_width'              => array( 1,    '$1 px', '$1px' ),
+	'img_center'             => array( 1,    'ортаға', 'орта', 'center', 'centre' ),
+	'img_framed'             => array( 1,    'сүрмелі', 'framed', 'enframed', 'frame' ),
+	'img_page'               => array( 1,    'бет=$1', 'бет $1', 'page=$1', 'page $1' ),
+	'img_baseline'           => array( 1,    'негізжол', 'baseline' ),
+	'img_sub'                => array( 1,    'астылығы', 'аст', 'sub'),
+	'img_super'              => array( 1,    'үстілігі', 'үст', 'sup', 'super', 'sup' ),
+	'img_top'                => array( 1,    'үстіне', 'top' ),
+	'img_text-top'           => array( 1,    'мәтін-үстінде', 'text-top' ),
+	'img_middle'             => array( 1,    'аралығына', 'middle' ),
+	'img_bottom'             => array( 1,    'астына', 'bottom' ),
+	'img_text-bottom'        => array( 1,    'мәтін-астында', 'text-bottom' ),
+	'int'                    => array( 0,    'ІШКІ:', 'INT:' ),
+	'sitename'               => array( 1,    'ТОРАПАТАУЫ', 'SITENAME' ),
+	'ns'                     => array( 0,    'ЕА:', 'NS:' ),
+	'localurl'               => array( 0,    'ЖЕРГІЛІКТІЖАЙ:', 'LOCALURL:' ),
+	'localurle'              => array( 0,    'ЖЕРГІЛІКТІЖАЙ2:', 'LOCALURLE:' ),
+	'server'                 => array( 0,    'СЕРВЕР', 'SERVER' ),
+	'servername'             => array( 0,    'СЕРВЕРАТАУЫ', 'SERVERNAME' ),
+	'scriptpath'             => array( 0,    'ӘМІРЖОЛЫ', 'SCRIPTPATH' ),
+	'grammar'                => array( 0,    'СЕПТІК:', 'GRAMMAR:' ),
+	'notitleconvert'         => array( 0,    '__АТАУАЛМАСТЫРҒЫЗБАУ__', '__ААБАУ__', '__NOTITLECONVERT__', '__NOTC__' ),
+	'nocontentconvert'       => array( 0,    '__МАҒЛҰМАТАЛМАСТЫРҒЫЗБАУ__', '__МАБАУ__', '__NOCONTENTCONVERT__', '__NOCC__' ),
+	'currentweek'            => array( 1,    'АҒЫМДАҒЫАПТА', 'CURRENTWEEK' ),
+	'currentdow'             => array( 1,    'АҒЫМДАҒЫАПТАКҮНІ', 'CURRENTDOW' ),
+	'localweek'              => array( 1,    'ЖЕРГІЛІКТІАПТА', 'LOCALWEEK' ),
+	'localdow'               => array( 1,    'ЖЕРГІЛІКТІАПТАКҮНІ', 'LOCALDOW' ),
+	'revisionid'             => array( 1,    'НҰСҚАНӨМІРІ', 'REVISIONID' ),
+	'revisionday'            => array( 1,    'НҰСҚАКҮНІ' , 'REVISIONDAY' ),
+	'revisionday2'           => array( 1,    'НҰСҚАКҮНІ2', 'REVISIONDAY2' ),
+	'revisionmonth'          => array( 1,    'НҰСҚААЙЫ', 'REVISIONMONTH' ),
+	'revisionyear'           => array( 1,    'НҰСҚАЖЫЛЫ', 'REVISIONYEAR' ),
+	'revisiontimestamp'      => array( 1,    'НҰСҚАУАҚЫТТҮЙІНДЕМЕСІ', 'REVISIONTIMESTAMP' ),
+	'plural'                 => array( 0,    'КӨПШЕ:', 'PLURAL:' ),
+	'fullurl'                => array( 0,    'ТОЛЫҚЖАЙ:', 'FULLURL:' ),
+	'fullurle'               => array( 0,    'ТОЛЫҚЖАЙ2:', 'FULLURLE:' ),
+	'lcfirst'                => array( 0,    'КӘ1:', 'LCFIRST:' ),
+	'ucfirst'                => array( 0,    'БӘ1:', 'UCFIRST:' ),
+	'lc'                     => array( 0,    'КӘ:', 'LC:' ),
+	'uc'                     => array( 0,    'БӘ:', 'UC:' ),
+	'raw'                    => array( 0,    'ҚАМ:', 'RAW:' ),
+	'displaytitle'           => array( 1,    'КӨРСЕТІЛЕТІНАТАУ', 'DISPLAYTITLE' ),
+	'rawsuffix'              => array( 1,    'Қ', 'R' ),
+	'newsectionlink'         => array( 1,    '__ЖАҢАБӨЛІМСІЛТЕМЕСІ__', '__NEWSECTIONLINK__' ),
+	'currentversion'         => array( 1,    'БАҒДАРЛАМАНҰСҚАСЫ', 'CURRENTVERSION' ),
+	'urlencode'              => array( 0,    'ЖАЙДЫМҰҚАМДАУ:', 'URLENCODE:' ),
+	'anchorencode'           => array( 0,    'ЖӘКІРДІМҰҚАМДАУ', 'ANCHORENCODE' ),
+	'currenttimestamp'       => array( 1,    'АҒЫМДАҒЫУАҚЫТТҮЙІНДЕМЕСІ', 'АҒЫМДАҒЫУАҚЫТТҮЙІН', 'CURRENTTIMESTAMP' ),
+	'localtimestamp'         => array( 1,    'ЖЕРГІЛІКТІУАҚЫТТҮЙІНДЕМЕСІ', 'ЖЕРГІЛІКТІУАҚЫТТҮЙІН', 'LOCALTIMESTAMP' ),
+	'directionmark'          => array( 1,    'БАҒЫТБЕЛГІСІ', 'DIRECTIONMARK', 'DIRMARK' ),
+	'language'               => array( 0,    '#ТІЛ:', '#LANGUAGE:' ),
+	'contentlanguage'        => array( 1,    'МАҒЛҰМАТТІЛІ', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+	'pagesinnamespace'       => array( 1,    'ЕСІМАЯБЕТСАНЫ:', 'ЕАБЕТСАНЫ:', 'АЯБЕТСАНЫ:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+	'numberofadmins'         => array( 1,    'ӘКІМШІСАНЫ', 'NUMBEROFADMINS' ),
+	'formatnum'              => array( 0,    'САНПІШІМІ', 'FORMATNUM' ),
+	'padleft'                => array( 0,    'СОЛЫҒЫС', 'PADLEFT' ),
+	'padright'               => array( 0,    'ОҢЫҒЫС', 'PADRIGHT' ),
+	'special'                => array( 0,    'арнайы', 'special',  ),
+	'defaultsort'            => array( 1,    'ӘДЕПКІСҰРЫПТАУ:', 'ӘДЕПКІСҰРЫП:', 'DEFAULTSORT:' ),
+);
+
+$specialPageAliases = array(
+        'DoubleRedirects'           => array( 'Шынжырлы_айдатулар' ),
+        'BrokenRedirects'           => array( 'Жарамсыз_айдатулар' ),
+        'Disambiguations'           => array( 'Айрықты_беттер' ),
+        'Userlogin'                 => array( 'Қатысушы_кіруі' ),
+        'Userlogout'                => array( 'Қатысушы_шығуы' ),
+        'Preferences'               => array( 'Баптау' ),
+        'Watchlist'                 => array( 'Бақылау_тізімі' ),
+        'Recentchanges'             => array( 'Жуықтағы_өзгерістер' ),
+        'Upload'                    => array( 'Қотару' ),
+        'Imagelist'                 => array( 'Сурет_тізімі' ),
+        'Newimages'                 => array( 'Жаңа_суреттер' ),
+        'Listusers'                 => array( 'Қатысушылар' ),
+        'Statistics'                => array( 'Санақ' ),
+        'Randompage'                => array( 'Кездейсоқ_бет', 'Кездейсоқ' ),
+        'Lonelypages'               => array( 'Саяқ_беттер' ),
+        'Uncategorizedpages'        => array( 'Санатсыз_беттер' ),
+        'Uncategorizedcategories'   => array( 'Санатсыз_санаттар' ),
+        'Uncategorizedimages'       => array( 'Санатсыз_суреттер' ),
+        'Unusedcategories'          => array( 'Пайдаланылмаған_санаттар' ),
+        'Unusedimages'              => array( 'Пайдаланылмаған_суреттер' ),
+        'Wantedpages'               => array( 'Толтырылмаған_беттер' ),
+        'Wantedcategories'          => array( 'Толтырылмаған_санаттар' ),
+        'Mostlinked'                => array( 'Ең_көп_сілтенген_беттер' ),
+        'Mostlinkedcategories'      => array( 'Ең_көп_сілтенген_санаттар' ),
+        'Mostcategories'            => array( 'Ең_көп_санаттар_бары' ),
+        'Mostimages'                => array( 'Ең_көп_суреттер_бары' ),
+        'Mostrevisions'             => array( 'Ең_көп_нұсқалар_бары' ),
+        'Fewestrevisions'           => array( 'Ең_аз_түзетілген ' ),
+        'Shortpages'                => array( 'Қысқа_беттер' ),
+        'Longpages'                 => array( 'Үлкен_беттер' ),
+        'Newpages'                  => array( 'Жаңа_беттер' ),
+        'Ancientpages'              => array( 'Ескі_беттер' ),
+        'Deadendpages'              => array( 'Тұйық_беттер' ),
+        'Protectedpages'            => array( 'Қорғалған_беттер' ),
+        'Allpages'                  => array( 'Барлық_беттер' ),
+        'Prefixindex'               => array( 'Бастауыш_тізімі' ) ,
+        'Ipblocklist'               => array( 'Бұғатталғандар' ),
+        'Specialpages'              => array( 'Арнайы_беттер' ),
+        'Contributions'             => array( 'Үлесі' ),
+        'Emailuser'                 => array( 'Хат_жіберу' ),
+        'Whatlinkshere'             => array( 'Мында_сілтегендер' ),
+        'Recentchangeslinked'       => array( 'Сілтенгендердің_өзгерістері' ),
+        'Movepage'                  => array( 'Бетті_жылжыту' ),
+        'Blockme'                   => array( 'Өздік_бұғаттау' ),
+        'Booksources'               => array( 'Кітап_қайнарлары' ),
+        'Categories'                => array( 'Санаттар' ),
+        'Export'                    => array( 'Сыртқа_беру' ),
+        'Version'                   => array( 'Нұсқасы' ),
+        'Allmessages'               => array( 'Барлық_хабарлар' ),
+        'Log'                       => array( 'Журналдар', 'Журнал' ),
+        'Blockip'                   => array( 'Жайды_бұғаттау' ),
+        'Undelete'                  => array( 'Жойылғанды_қайтару' ),
+        'Import'                    => array( 'Сырттан_алу' ),
+        'Lockdb'                    => array( 'Дерекқорды_құлыптау' ),
+        'Unlockdb'                  => array( 'Дерекқорды_құлыптамау' ),
+        'Userrights'                => array( 'Қатысушы_құқықтары' ),
+        'MIMEsearch'                => array( 'MIME_түрімен_іздеу' ),
+        'Unwatchedpages'            => array( 'Бақыланылмаған_беттер' ),
+        'Listredirects'             => array( 'Айдату_тізімі' ),
+        'Revisiondelete'            => array( 'Нұсқаны_жою' ),
+        'Unusedtemplates'           => array( 'Пайдаланылмаған_үлгілер' ),
+        'Randomredirect'            => array( 'Кедейсоқ_айдату' ),
+        'Mypage'                    => array( 'Жеке_бетім' ),
+        'Mytalk'                    => array( 'Талқылауым' ),
+        'Mycontributions'           => array( 'Үлесім' ),
+        'Listadmins'                => array( 'Әкімшілер'),
+        'Popularpages'              => array( 'Әйгілі_беттер' ),
+        'Search'                    => array( 'Іздеу' ),
+        'Resetpass'                 => array( 'Құпия_сөзді_қайтару' ),
+        'Withoutinterwiki'          => array( 'Уики-аралықсыздар' ),
+);
+
+#-------------------------------------------------------------------
+# Default messages
+#-------------------------------------------------------------------
+
+$messages = array(
+# User preference toggles
+'tog-underline'               => 'Сілтемені астынан сыз:',
+'tog-highlightbroken'         => 'Жоқталған сілтемелерді <a href="" class="new">былай</a> пішімде (басқаша: былай <a href="" class="internal">?</a> сияқты).',
+'tog-justify'                 => 'Ежелерді ені бойынша туралау',
+'tog-hideminor'               => 'Жуықтағы өзгерістерде шағын түзетуді жасыр',
+'tog-extendwatchlist'         => 'Бақылау тізімді ұлғайт (барлық жарамды өзгерістерді көрсет)',
+'tog-usenewrc'                => 'Кеңейтілген Жуықтағы өзгерістер (JavaScript)',
+'tog-numberheadings'          => 'Бөлім тақырыптарын өздік түрде номірле',
+'tog-showtoolbar'             => 'Өңдеу қуралдар жолағын көрсет (JavaScript)',
+'tog-editondblclick'          => 'Қос нұқымдап өңдеу (JavaScript)',
+'tog-editsection'             => 'Бөлімдерді [өңдеу] сілтемесімен өңдеуін ендір',
+'tog-editsectiononrightclick' => 'Бөлім атауын оң жақ нұқумен<br />өңдеуін ендір (JavaScript)',
+'tog-showtoc'                 => 'Мазмұнын көрсет (3-тен артық бөлімі барыларға)',
+'tog-rememberpassword'        => 'Кіргенімді бұл компьютерде ұмытпа',
+'tog-editwidth'               => 'Өңдеу аумағы толық енімен',
+'tog-watchcreations'          => 'Мен бастаған беттерді бақылау тізіміме қос',
+'tog-watchdefault'            => 'Мен өңдеген беттерді бақылау тізіміме қос',
+'tog-watchmoves'              => 'Мен жылжытқан беттерді бақылау тізіміме қос',
+'tog-watchdeletion'           => 'Мен жойған беттерді бақылау тізіміме қос',
+'tog-minordefault'            => 'Әдепкіден барлық түзетулерді шағын деп белгілеу',
+'tog-previewontop'            => 'Қарап шығу аумағы өңдеу аумағы алдында',
+'tog-previewonfirst'          => 'Бірінші өңдегенде қарап шығу',
+'tog-nocache'                 => 'Бет қосалқы қалтасын өшір',
+'tog-enotifwatchlistpages'    => 'Бақыланған бет өзгергенде маған хат жібер',
+'tog-enotifusertalkpages'     => 'Талқылауым өзгергенде маған хат жібер',
+'tog-enotifminoredits'        => 'Шағын түзету туралы да маған хат жібер',
+'tog-enotifrevealaddr'        => 'Е-пошта жайымды ескерту хатта ашық көрсет',
+'tog-shownumberswatching'     => 'Бақылап тұрған қатысушылардың санын көрсет',
+'tog-fancysig'                => 'Қам қолтаңба (өздік сілтемесіз;)',
+'tog-externaleditor'          => 'Сыртқы өңдеуішті әдепкіден қолдан',
+'tog-externaldiff'            => 'Сыртқы айырмағышты әдепкіден қолдан',
+'tog-showjumplinks'           => '«Өтіп кету» қатынау сілтемелерін ендір',
+'tog-uselivepreview'          => 'Тура қарап шығуды қолдану (JavaScript) (Сынақ түрінде)',
+'tog-forceeditsummary'        => 'Өңдеу сипаттамасы бос қалғанда маған ескерт',
+'tog-watchlisthideown'        => 'Түзетуімді бақылау тізімнен жасыр',
+'tog-watchlisthidebots'       => 'Бот түзетуін бақылау тізімнен жасыр',
+'tog-watchlisthideminor'      => 'Шағын түзетулерді бақылау тізімінде көрсетпеу',
+'tog-nolangconversion'        => 'Тіл түрін аудармау',
+'tog-ccmeonemails'            => 'Басқа қатысушыға жіберген хатымның көшірмесін маған да жібер',
+'tog-diffonly'                => 'Айырма астында бет мағлұматын көрсетпе',
+
+'underline-always'  => 'Әрқашан',
+'underline-never'   => 'Ешқашан',
+'underline-default' => 'Шолғыш бойынша',
+
+'skinpreview' => '(Қарап шығу)',
+
+# Dates
+'sunday'        => 'Жексенбі',
+'monday'        => 'Дүйсенбі',
+'tuesday'       => 'Сейсенбі',
+'wednesday'     => 'Сәрсенбі',
+'thursday'      => 'Бейсенбі',
+'friday'        => 'Жұма',
+'saturday'      => 'Сенбі',
+'sun'           => 'Жек',
+'mon'           => 'Дүй',
+'tue'           => 'Бей',
+'wed'           => 'Сәр',
+'thu'           => 'Бей',
+'fri'           => 'Жұм',
+'sat'           => 'Сен',
+'january'       => 'қаңтар',
+'february'      => 'ақпан',
+'march'         => 'наурыз',
+'april'         => 'cәуір',
+'may_long'      => 'мамыр',
+'june'          => 'маусым',
+'july'          => 'шілде',
+'august'        => 'тамыз',
+'september'     => 'қыркүйек',
+'october'       => 'қазан',
+'november'      => 'қараша',
+'december'      => 'желтоқсан',
+'january-gen'   => 'қантардың',
+'february-gen'  => 'ақпанның',
+'march-gen'     => 'наурыздың',
+'april-gen'     => 'сәуірдің',
+'may-gen'       => 'мамырдың',
+'june-gen'      => 'маусымның',
+'july-gen'      => 'шілденің',
+'august-gen'    => 'тамыздың',
+'september-gen' => 'қыркүйектің',
+'october-gen'   => 'қазанның',
+'november-gen'  => 'қарашаның',
+'december-gen'  => 'желтоқсанның',
+'jan'           => 'қан',
+'feb'           => 'ақп',
+'mar'           => 'нау',
+'apr'           => 'cәу',
+'may'           => 'мам',
+'jun'           => 'мау',
+'jul'           => 'шіл',
+'aug'           => 'там',
+'sep'           => 'қыр',
+'oct'           => 'қаз',
+'nov'           => 'қар',
+'dec'           => 'жел',
+
+# Bits of text used by many pages
+'categories'            => 'Барлық санат тізімі',
+'pagecategories'        => '{{PLURAL:$1|Санат|Санаттар}}',
+'category_header'       => '«$1» санатындағы беттер',
+'subcategories'         => 'Төменгі санаттар',
+'category-media-header' => '«$1» санатындағы таспалар',
+
+'linkprefix'        => '/^(.*?)([a-zäçéğıïñöşüýа-яёәіңғүұқөһA-ZÄÇÉĞİÏÑÖŞÜÝА-ЯЁӘІҢҒҮҰҚӨҺʺʹ«„]+)$/sDu',
+'mainpagetext'      => "<big>'''МедиаУики бағдарламасы сәтті орнатылды.'''</big>",
+'mainpagedocfooter' => 'Уики бағдарламасын пайдалану ақпараты үшін [http://meta.wikimedia.org/wiki/Help:Contents Пайдаланушы нұсқауларымен] танысыңыз.
+
+== Бастау ==
+
+* [http://www.mediawiki.org/wiki/Help:Configuration_settings Баптау қалаулары тізімі]
+* [http://www.mediawiki.org/wiki/Help:FAQ МедиаУики ЖҚС]
+* [http://mail.wikimedia.org/mailman/listinfo/mediawiki-announce МедиаУики хат тарату тізімі]',
+
+'article'        => 'Мағлұмат беті',
+'newwindow'      => '(жаңа терезеде ашылады)',
+'cancel'         => 'Болдырмау',
+'qbfind'         => 'Табу',
+'qbbrowse'       => 'Шолу',
+'qbedit'         => 'Өңдеу',
+'qbpageoptions'  => 'Осы бет',
+'qbpageinfo'     => 'Мәтін аралығы',
+'qbmyoptions'    => 'Беттерім',
+'qbspecialpages' => 'Арнайы беттер',
+'moredotdotdot'  => 'Көбірек…',
+'mypage'         => 'Жеке бетім',
+'mytalk'         => 'Талқылауым',
+'anontalk'       => 'IP талқылауы',
+'navigation'     => 'Бағыттау',
+
+# Metadata in edit box
+'metadata_help' => 'Мета-деректер:',
+
+'errorpagetitle'    => 'Қате',
+'returnto'          => '$1 дегенге оралу.',
+'tagline'           => '{{GRAMMAR:ablative|{{SITENAME}}}}',
+'search'            => 'Іздеу',
+'searchbutton'      => 'Іздеу',
+'go'                => 'Өту',
+'searcharticle'     => 'Өту',
+'history'           => 'Бет тарихы',
+'history_short'     => 'Тарихы',
+'updatedmarker'     => 'соңғы кірістен бері жаңартылған',
+'info_short'        => 'Ақпарат',
+'printableversion'  => 'Басып шығаруға',
+'permalink'         => 'Тұрақты сілтеме',
+'print'             => 'Басып шығару',
+'edit'              => 'Өңдеу',
+'editthispage'      => 'Бетті өңдеу',
+'delete'            => 'Жою',
+'deletethispage'    => 'Бетті жою',
+'undelete_short'    => '{{PLURAL:$1|Бір|$1}} түзетуді қайтару',
+'protect'           => 'Қорғау',
+'protect_change'    => 'қорғауды өзгерту',
+'protectthispage'   => 'Бетті қорғау',
+'unprotect'         => 'Қорғамау',
+'unprotectthispage' => 'Бетті қорғамау',
+'newpage'           => 'Жаңа бет',
+'talkpage'          => 'Бетті талқылау',
+'talkpagelinktext'  => 'Талқылауы',
+'specialpage'       => 'Арнайы бет',
+'personaltools'     => 'Жеке құралдар',
+'postcomment'       => 'Мәндеме жіберу',
+'articlepage'       => 'Мағлұмат бетін қарау',
+'talk'              => 'Талқылау',
+'views'             => 'Көрініс',
+'toolbox'           => 'Құралдар',
+'userpage'          => 'Қатысушының бетін қарау',
+'projectpage'       => 'Жоба бетін қарау',
+'imagepage'         => 'Сурет бетін қарау',
+'mediawikipage'     => 'Хабар бетін қарау',
+'templatepage'      => 'Үлгі бетін қарау',
+'viewhelppage'      => 'Анықтама бетін қарау',
+'categorypage'      => 'Санат бетін қарау',
+'viewtalkpage'      => 'Талқылау бетін қарау',
+'otherlanguages'    => 'Басқа тілдерде',
+'redirectedfrom'    => '($1 бетінен айдатылған)',
+'redirectpagesub'   => 'Айдату беті',
+'lastmodifiedat'    => 'Бұл беттің өзгертілген соңғы кезі: $2, $1.', # $1 date, $2 time
+'viewcount'         => 'Бұл бет {{plural:$1|бір|$1}} рет қаралған.',
+'protectedpage'     => 'Қорғаулы бет',
+'jumpto'            => 'Мынаған өтіп кету:',
+'jumptonavigation'  => 'бағыттау',
+'jumptosearch'      => 'іздеу',
+
+# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
+'about'             => 'Біз туралы',
+'aboutsite'         => '{{SITENAME}} туралы',
+'aboutpage'         => '{{ns:project}}:Біз_туралы',
+'bugreports'        => 'Қате есептемелері',
+'bugreportspage'    => '{{ns:project}}:Қате_есептемелері',
+'copyright'         => 'Мағлұмат $1 құжаты бойынша қатынаулы.',
+'copyrightpagename' => '{{SITENAME}} ауторлық құқықтары',
+'copyrightpage'     => '{{ns:project}}:Ауторлық құқықтар',
+'currentevents'     => 'Ағымдағы оқиғалар',
+'currentevents-url' => 'Ағымдағы_оқиғалар',
+'disclaimers'       => 'Жауапкершіліктен бас тарту',
+'disclaimerpage'    => '{{ns:project}}:Жауапкершіліктен_бас_тарту',
+'edithelp'          => 'Өндеу анықтамасы',
+'edithelppage'      => '{{ns:help}}:Өңдеу',
+'faq'               => 'ЖҚС',
+'faqpage'           => '{{ns:project}}:ЖҚС',
+'help'              => 'Анықтама',
+'helppage'          => '{{ns:help}}:Мазмұны',
+'mainpage'          => 'Басты бет',
+'portal'            => 'Қауым порталы',
+'portal-url'        => '{{ns:project}}:Қауым_порталы',
+'privacy'           => 'Жеке құпиясын сақтау',
+'privacypage'       => '{{ns:project}}:Жеке_құпиясын_сақтау',
+'sitesupport'       => 'Демеушілік',
+'sitesupport-url'   => '{{ns:project}}:Жәрдем',
+
+'badaccess'        => 'Рұқсат қатесі',
+'badaccess-group0' => 'Сұранысқан әрекетіңізді жегуіңізге рұқсат етілмейді.',
+'badaccess-group1' => 'Сұранысқан әрекетіңіз $1 тобының қатысушыларына шектеледі.',
+'badaccess-group2' => 'Сұранысқан әрекетіңіз $1 топтары бірінің қатусышыларына шектеледі.',
+'badaccess-groups' => 'Сұранысқан әрекетіңіз $1 топтары бірінің қатусышыларына шектеледі.',
+
+'versionrequired'     => 'MediaWiki $1 нұсқасы қажет',
+'versionrequiredtext' => 'Осы бетті қолдану үшін MediaWiki $1 нұсқасы қажет. [[{{ns:special}}:Version|Жүйе нұсқасы бетін]] қараңыз.',
+
+'ok'                  => 'Жарайды',
+'pagetitle'           => '$1 — {{SITENAME}}',
+'retrievedfrom'       => '«$1» дегеннен алынған',
+'youhavenewmessages'  => 'Сізде $1 бар ($2).',
+'newmessageslink'     => 'жаңа хабарлар',
+'newmessagesdifflink' => 'соңғы өзгерісіне',
+'editsection'         => 'өңдеу',
+'editold'             => 'өңдеу',
+'editsectionhint'     => 'Бөлімді өңдеу: $1',
+'toc'                 => 'Мазмұны',
+'showtoc'             => 'көрсет',
+'hidetoc'             => 'жасыр',
+'thisisdeleted'       => 'Қараймыз ба, не қайтарамыз ба?: $1',
+'viewdeleted'         => 'Қараймыз ба?: $1',
+'restorelink'         => 'жойылған {{PLURAL:$1|бір|$1}} түзету',
+'feedlinks'           => 'Арна:',
+'feed-invalid'        => 'Жарамсыз жазылым арна түрі.',
+'feed-atom'           => 'Atom',
+'feed-rss'            => 'RSS',
+
+# Short words for each namespace, by default used in the 'article' tab in monobook
+'nstab-main'      => 'Мағлұмат',
+'nstab-user'      => 'Жеке беті',
+'nstab-media'     => 'Таспа беті',
+'nstab-special'   => 'Арнайы',
+'nstab-project'   => 'Жоба беті',
+'nstab-image'     => 'Файл',
+'nstab-mediawiki' => 'Жүйе хабары',
+'nstab-template'  => 'Үлгі',
+'nstab-help'      => 'Анықтама',
+'nstab-category'  => 'Санат',
+
+# Main script and global functions
+'nosuchaction'      => 'Мұндай әрекет жоқ',
+'nosuchactiontext'  => 'Осы URL жайымен енгізілген әрекетті
+осы уики жорамалдап білмеді.',
+'nosuchspecialpage' => 'Бұл арнайы бет емес',
+'nospecialpagetext' => 'Сіз сұранысқан арнайы бет жарамсыз. Барлық жарамды арнайы беттерді [[{{ns:special}}:Specialpages|арнайы беттер тізімінде]] таба аласыз.',
+
+# General errors
+'error'                => 'Қате',
+'databaseerror'        => 'Дерекқордың қатесі',
+'dberrortext'          => 'Дерекқорға сұраныс жасалғанда синтаксис қатесі кездесті.
+Бұл бағдарламаның қатесін көрсету мүмкін.
+Дерекқорға соңғы болған сұраныс:
+<blockquote><tt>$1</tt></blockquote>
+мына функциясынан «<tt>$2</tt>».
+MySQL қайтарған қатесі «<tt>$3: $4</tt>».',
+'dberrortextcl'        => 'Дерекқорға сұраныс жасалғанда синтаксис қатесі кездесті.
+Дерекқорға соңғы болған сұраныс:
+«$1»
+мына функциясынан: «$2».
+MySQL қайтарған қатесі «$3: $4»',
+'noconnect'            => 'Ғафу етіңіз! Бұл уикиде кейбір техникалық қиыншылықтар кездесті, сондықтан дерекқор серверіне қатынасу алмайды. <br />
+$1',
+'nodb'                 => '$1 дерекқоры талғанбады',
+'cachederror'          => 'Төменде сұранған беттің қосалқы қалтадағы көшірмесі, осы бет жаңартылмаған болуы мүмкін.',
+'laggedslavemode'      => 'Назар салыңыз: Бетте жуықтағы жаңалаулар болмауы мүмкін.',
+'readonly'             => 'Дерекқоры құлыпталған',
+'enterlockreason'      => 'Құлыптау себебін енгізіңіз, қай уақытқа дейін
+құлыпталғанын қоса',
+'readonlytext'         => 'Ағымда дерекқор жаңа жазба және тағы басқа өзгерістер жасаудан құлыпталынған. Бұл дерекқорды жөндету бағдарламаларын орындау үшін болуы мүмкін, бұны бітіргеннен соң қаліпті іске қайтарылады.
+
+Құлыптаған әкімші бұны былай түсіндіреді: $1',
+'missingarticle'       => 'Іздестірілген «$1» атаулы бет мәтіні дерекқорда табылмады.
+
+Бұл дағдыда ескірген айырма сілтемесіне немесе жойылған бет тарихының сілтемесіне
+ергеннен болуы мүмкін.
+
+Егер бұл болжам дұрыс себеп болмаса, бағдарламамыздағы қатеге тап болуыңыз мүмкін.
+Бұл туралы нақты URL жайын көрсетіп әкімшіге есептеме жіберіңіз.',
+'readonly_lag'         => 'Жетек дерекқор серверлер бастауышпен қадамланғанда осы дерекқор өздік түрінде құлыпталынған',
+'internalerror'        => 'Ішкі қате',
+'filecopyerror'        => '«$1» файлы «$2» файлына көшірілмеді.',
+'filerenameerror'      => '«$1» файл аты «$2» атына өзгертілмеді.',
+'filedeleteerror'      => '«$1» файлы жойылмайды.',
+'filenotfound'         => '«$1» файлы табылмады.',
+'unexpected'           => 'Күтілмеген мағына: «$1» = «$2».',
+'formerror'            => 'Қате: жіберу үлгіті емес',
+'badarticleerror'      => 'Осындай әрекет мына бетте атқарылмайды.',
+'cannotdelete'         => 'Айтылмыш бет не сурет жойылмайды. (Бұны басқа біреу жойған шығар.)',
+'badtitle'             => 'Жарамсыз атау',
+'badtitletext'         => 'Сұранысқан бет атауы жарамсыз, бос, тілара сілтемесі не уики-ара атауы мүлтік болған. Атауларда сүемелдемеген бірқатар әріптер болуы мүмкін.',
+'perfdisabled'         => 'Ғафу етіңіз! Осы қасиет, дерекқордың жылдамылығына әсер етіп, ешкімге уикиді пайдалануға бермегесін, уақытша өшірілген.',
+'perfdisabledsub'      => 'Мында $1 бетінің сақталған көшірмесі:', # obsolete?
+'perfcached'           => 'Келесі дерек қосалқы қалтасынан алынған, сондықтан толықтай жаңаланмаған болуы мүмкін.',
+'perfcachedts'         => 'Келесі дерек қосалқы қалтасынан алынған, соңғы жаңаланлған кезі: $1.',
+'querypage-no-updates' => 'Бұл беттің жаңартылуы ағымда өшірілген. Деректері қазір өзгертілмейді.',
+'wrong_wfQuery_params' => 'wfQuery() функциясында жарамсыз баптар<br />
+Функция: $1<br />
+Сұраныс: $2',
+'viewsource'           => 'Қайнарын қарау',
+'viewsourcefor'        => '$1 деген үшін',
+'protectedpagetext'    => 'Бұл бет өңдеу болдырмау үшін құлыпталынған.',
+'viewsourcetext'       => 'Бұл беттің қайнарын қарауыңызға және көшіріп алуңызға болады:',
+'protectedinterface'   => 'Бұл бет бағдарламаның тілдесу мәтінін жетістіреді, сондықтан қиянат келтірмеу үшін өзгертуі құлыпталған.',
+'editinginterface'     => "'''Назар салыңыз:''' Бағдарламаға тілдесу мәтінін жетістіретін MediaWiki бетін өңдеп жатырсыз. Бұл беттің өзгертуі барлық пайдаланушылар тілдесуіне әсер етеді.",
+'sqlhidden'            => '(SQL сұранысы жасырылды)',
+'cascadeprotected'     => 'Бұл бет өңдеуден қорғалған, себебі: ол мына «баулы» қорғауы ендірілген {{PLURAL:$1|бетке|беттерге}} кіріктірілген:',
+
+# Login and logout pages
+'logouttitle'                => 'Қатысушы шығуы',
+'logouttext'                 => '<strong>Енді жүйеден шықтыңыз.</strong><br />
+Бұл компьютерден әлі де жүйеге кірместен {{SITENAME}} жобасын
+шолуыңыз мүмкін, немесе басқа пайдаланушының жүйеге кіруі мүмкін.
+Кейбір беттерде әлі де жүйеге кіргеніңіздей көрінуі мүмкіндігін
+ескертеміз; бұл шолғыштың қосалқы қалтасын босату арқылы шешіледі.',
+'welcomecreation'            => '== Қош келдіңіз, $1! ==
+
+Тіркелгіңіз жасалды. {{SITENAME}} баптауыңызды қалауыңызбен өзгертуді ұмытпаңыз.',
+'loginpagetitle'             => 'Қатысушы кіруі',
+'yourname'                   => 'Қатысушы атыңыз',
+'yourpassword'               => 'Құпия сөзіңіз',
+'yourpasswordagain'          => 'Құпия сөзді қайталап енгізіңіз',
+'remembermypassword'         => 'Менің кіргенімді бұл компьютерде ұмытпа',
+'yourdomainname'             => 'Желі үйшігіңіз',
+'externaldberror'            => 'Осында сыртқы теңдестіру дерекқорында қате болды, немесе сыртқы тіркелгіңізді жаңалауға рұқсат жоқ.',
+'loginproblem'               => '<b>Кіруіңіз кезінде осында қиындыққа тап болдық.</b><br />Тағы да қайталап қараңыз.',
+'alreadyloggedin'            => '<strong>$1 деген қатысушы, кіріпсіз түге!</strong><br />',
+
+'login'                      => 'Кіру',
+'loginprompt'                => '{{SITENAME}} торабына кіру үшін «cookies» қасиетін ендіруіңіз қажет.',
+'userlogin'                  => 'Кіру / Тіркелгі жасау',
+'logout'                     => 'Шығу',
+'userlogout'                 => 'Шығу',
+'notloggedin'                => 'Кірмегенсіз',
+'nologin'                    => 'Тіркелгіңіз жоқ па? $1.',
+'nologinlink'                => 'Жасаңыз',
+'createaccount'              => 'Тіркелгі жаса',
+'gotaccount'                 => 'Тіркелгіңіз бар ма?  $1.',
+'gotaccountlink'             => 'Кіріңіз',
+'createaccountmail'          => 'е-поштамен',
+'badretype'                  => 'Енгізген құпия сөздеріңіз бір біріне сәйкес емес.',
+'userexists'                 => 'Енгізген қатысушы атыңызды біреу пайдаланып жатыр. Басқа атау тандаңыз.',
+'youremail'                  => 'Е-пошта жайыңыз *:',
+'username'                   => 'Қатысушы атыңыз:',
+'uid'                        => 'Қатысушы теңдестіруіңіз:',
+'yourrealname'               => 'Шын атыңыз *:',
+'yourlanguage'               => 'Тіліңіз:',
+'yourvariant'                => 'Түрі',
+'yournick'                   => 'Лақап атыңыз:',
+'badsig'                     => 'Қам қолтаңбаңыз жарамсыз; HTML белгішелерін тексеріңіз.',
+'email'                      => 'Е-поштаңыз',
+'prefs-help-email-enotif'    => 'Егер соны баптасаңыз, осы е-пошта жайы сізге ескерту хат жіберуге қолданылады.',
+'prefs-help-realname'        => '* Шын атыңыз (міндетті емес): енгізсеңіз, шығармаңыздың ауторлығын белгілеуі үшін қолданылады.',
+'loginerror'                 => 'Кіру қатесі',
+'prefs-help-email'           => '* Е-поштаңыз (міндетті емес): «Қатысушы» немесе «қатысушы талқылау» бетіңіздер арқылы басқаларға байланысу мүмкіндік береді. Өзіңіздің кім екеніңізді білдіртпейді.',
+'nocookiesnew'               => 'Қатысушы тіркелгісі жасалды, тек әлі кірмегенсіз. {{SITENAME}} жобасына қатысушы кіру үшін «cookies» қасиеті қажет. Шолғышыңызда «cookies» қасиеті өшірілген. Соны ендіріңіз де жаңа қатысушы атыңызды және құпия сөзіңізді енгізіп кіріңіз.',
+'nocookieslogin'             => 'Қатысушы кіру үшін {{SITENAME}} жобасы «cookies» қасиетін қолданады. Шолғышыңызда «cookies» қасиеті өшірілген. Соны ендіріңіз де қайталап кіріңіз.',
+'noname'                     => 'Қатысушы атын дұрыс енгізбедіңіз.',
+'loginsuccesstitle'          => 'Кіруіңіз сәтті өтті',
+'loginsuccess'               => "'''Сіз енді {{SITENAME}} жобасына «$1» ретінде кіріп отырсыз.'''",
+'nosuchuser'                 => 'Мында «$1» атаулы қатысушы жоқ. Емлеңізді тексеріңіз, немесе жаңа тіркелгі жасаңыз.',
+'nosuchusershort'            => 'Мында «$1» деген қатысушы атауы жоқ. Емлеңізді тексеріңіз.',
+'nouserspecified'            => 'Қатысушы атын енгізіуіңіз қажет.',
+'wrongpassword'              => 'Енгізген құпия сөз жарамсыз. Қайталап көріңіз.',
+'wrongpasswordempty'         => 'Құпия сөз босты бопты. Қайталап көріңіз.',
+'mailmypassword'             => 'Құпия сөзімді хатпен жібер',
+'passwordremindertitle'      => 'Құпия сөз туралы {{SITENAME}} жобасының ескертуі',
+'passwordremindertext'       => 'Кейбіреу (IP жайы: $1, бәлкім, өзіңіз боларсыз)
+{{SITENAME}} үшін бізден жаңа құпия сөзін жіберуін сұранысқан ($4).
+«$2» қатысушының құпия сөзі «$3» болды енді.
+Қазір кіруіңіз және құпия сөзіңізді ауыструыңыз қажет.
+
+Егер басқа біреу бұл сұранысты жасаса, немесе құпия сөзіңізді ұмытсаңыз да,
+және бұны өзгерткіңіз келмесе де, осы хабарламаға аңғармауыңызға да болады,
+ескі құпия сөзіңізді әріғарай қолданып.',
+'noemail'                    => 'Мында «$1» қатысушының е-поштасы жоқ.',
+'passwordsent'               => 'Жаңа құпия сөз «$1» үшін
+тіркелген е-пошта жайына жіберілді.
+Қабылдағаннан кейін кіргенде соны енгізіңіз.',
+'blocked-mailpassword'       => 'IP жайыңыздан өңдеу бұғатталған, сондықтан
+қиянатшылықтан сақтану үшін құпия сөз жіберу қызметінің әрекеті рұқсат етілмейді.',
+'eauthentsent'               => 'Куәландыру хаты аталған е-пошта жайына жіберілді.
+Басқа е-пошта хатын жіберудің алдынан, тіркелгі шынынан сіздікі екенін
+куәландыру үшін хаттағы нұсқауларға еріңіз.',
+'throttled-mailpassword'     => 'Соңғы $1 сағатта құпия сөз ескерту хаты жіберілді түге.
+Қиянатшылыққа кедергі болу үшін, $1 сағат сайын тек бір ғана құпия сөз ескерту
+хаты жіберіледі.',
+'mailerror'                  => 'Хат жіберу қатесі: $1',
+'acct_creation_throttle_hit' => 'Ғафу етіңіз, сіз $1 тіркелгі жасапсыз түге. Онан артық істей алмайсыз.',
+'emailauthenticated'         => 'Е-пошта жайыңыз куәландырылған кезі: $1.',
+'emailnotauthenticated'      => 'Е-пошта жайыңыз әлі куәландырған жоқ.
+Төмендегі қасиетттер үшін ешқандай хат жіберілмейді.',
+'noemailprefs'               => 'Осы қасиеттер істеуі үшін е-пошта жайыңызды енгізіңіз.',
+'emailconfirmlink'           => 'Е-пошта жайыңызды куәландырыңыз',
+'invalidemailaddress'        => 'Осы е-пошта жайда жарамсыз пішім болған, қабыл етілмейді.
+Дұрыс пішімделген жайды енгізіңіз, не аумақты бос қалдырыңыз.',
+'accountcreated'             => 'Тіркелгі жасалды',
+'accountcreatedtext'         => '$1 үшін қатысушы тіркелгісі жасалды.',
+
+# Password reset dialog
+'resetpass'               => 'Тіркелгінің құпия сөзін бұрынғы қалыпына келтіру',
+'resetpass_announce'      => 'Хатпен жіберілген уақытша белгілемемен кіріпсіз. Тіркелуді бітіру үшін жаңа құпия сөзіңізді мында енгізіңіз:',
+'resetpass_header'        => 'Құпия сөзді бұрынғы қалыпына келтіру',
+'resetpass_submit'        => 'Құпия сөзді қалаңыз да кіріңіз',
+'resetpass_success'       => 'Құпия сөзіңіз сәтті өзгертілді! Енді кіріңіз…',
+'resetpass_bad_temporary' => 'Уақытша құпия сөз жарамсыз. Мүмкін құпия сөзіңізді өзгерткен боларсыз немесе жаңа уақытша құпия сөз сұраған боларсыз.',
+'resetpass_forbidden'     => 'Бұл уикиде құпия сөздер өзгертілмейді',
+'resetpass_missing'       => 'Үлгіт деректері жоқ.',
+
+# Edit page toolbar
+'bold_sample'     => 'Жуан мәтін',
+'bold_tip'        => 'Жуан мәтін',
+'italic_sample'   => 'Қиғаш мәтін',
+'italic_tip'      => 'Қиғаш мәтін',
+'link_sample'     => 'Сілтеме атауы',
+'link_tip'        => 'Ішкі сілтеме',
+'extlink_sample'  => 'http://www.example.com сілтеме атауы',
+'extlink_tip'     => 'Сыртқы сілтеме (алдынан http:// енгізуін ұмытпаңыз)',
+'headline_sample' => 'Тақырып мәтіні',
+'headline_tip'    => '1-ші деңгейлі тақырып',
+'math_sample'     => 'Формуланы мында енгізіңіз',
+'math_tip'        => 'Математика формуласы (LaTeX)',
+'nowiki_sample'   => 'Пішімделмейтін мәтінді осында енгізіңіз',
+'nowiki_tip'      => 'Уики пішімін елемеу',
+'image_sample'    => 'Example.jpg',
+'image_tip'       => 'Кіріктірілген сурет',
+'media_sample'    => 'Example.ogg',
+'media_tip'       => 'Таспа файлының сілтемесі',
+'sig_tip'         => 'Қолтаңбаңыз және уақыт белгісі',
+'hr_tip'          => 'Дерелей сызық (үнемді қолданыңыз)',
+
+# Edit pages
+'summary'                   => 'Сипаттамасы',
+'subject'                   => 'Тақырыбы/басы',
+'minoredit'                 => 'Бұл шағын түзету',
+'watchthis'                 => 'Бетті бақылау',
+'savearticle'               => 'Бетті сақта!',
+'preview'                   => 'Қарап шығу',
+'showpreview'               => 'Қарап шығу',
+'showlivepreview'           => 'Тура қарап шығу',
+'showdiff'                  => 'Өзгерістерді көрсет',
+'anoneditwarning'           => "'''Назар салыңыз:''' Сіз жүйеге кірмегенсіз. IP жайыңыз бұл беттің өңдеу тарихында жазылып алынады.",
+'missingsummary'            => "'''Ескерту:''' Түзету сипаттамасын енгізбепсіз. «Сақтау» түймесін тағы бассаңыз, түзетуіңіз мәндемесіз сақталады.",
+'missingcommenttext'        => 'Төменде мәндемеңізді енгізіңіз.',
+'missingcommentheader'      => "'''Ескерту:''' Бұл мәндемеге тақырып/басжол жетістірмепсіз. Егер тағы да Сақтау түймесін нұқысаңыз, түзетуіңіз солсыз сақталады.",
+'summary-preview'           => 'Сипаттамасын қарап шығу',
+'subject-preview'           => 'Тақырыбын/басын қарап шығу',
+'blockedtitle'              => 'Пайдаланушы бұғатталған',
+'blockedtext'               => "<big>'''Қатысушы атыңыз не IP жайыңыз бұғатталған.'''</big>
+
+бұғаттауды $1 істеген. Белгіленген себебі: ''$2''.
+
+Осы бұғаттауды талқылау үшін $1 дегенмен не басқа [[{{{{ns:mediawiki}}:grouppage-sysop}}|әкімшімен]] қатынасуыңызға болады.
+[[{{ns:special}}:Preferences|Тіркелгі баптауларын]] қолданып жарамды е-пошта жайын енгізгенше дейін
+«Қатысушыға хат жазу» қасиетін пайдаланылмайсыз. Ағымдық IP жайыңыз: $3, және бұғатауы нөмірі: $5. Соның біреуін, немесе екеуін де әрбір сұранысыңызға қосыңыз.",
+'blockedoriginalsource'     => "Төменде '''$1''' дегеннің қайнары көрсетіледі:",
+'blockededitsource'         => "Төменде '''$1''' дегенге жасалған '''түзетуңіздің''' мәтіні көрсетіледі:",
+'whitelistedittitle'        => 'Өңдеу үшін кіруіңіз жөн.',
+'whitelistedittext'         => 'Беттерді өңдеу үшін $1 жөн.',
+'whitelistreadtitle'        => 'Оқу үшін кіруіңіз жөн',
+'whitelistreadtext'         => 'Беттерді оқу үшін [[{{ns:special}}:Userlogin|кіруіңіз]] жөн.',
+'whitelistacctitle'         => 'Сізге тіркелгі жасауға рұқсат берілмеген',
+'whitelistacctext'          => 'Осы уикиде басқаларға тіркелгі жасау үшін [[{{ns:special}}:Userlogin|кіруіңіз]] қажет және жанасымды рұқсаттарын билеу қажет.',
+'confirmedittitle'          => 'Е-пошта жайын куәландыру хатын қайта өңдеу қажет',
+'confirmedittext'           => 'Беттерді өңдеу үшін алдын ала Е-пошта жайыңызды куәландыруыңыз қажет. Жайыңызды [[{{ns:Special}}:Preferences|қатысушы баптауы]] арқылы енгізіңіз және тексерткіңіз.',
+'nosuchsectiontitle'        => 'Бұл бөлім емес',
+'nosuchsectiontext'         => "Жоқ бөлімді өңдеуді талап етіпсіз. Мында \$1 деген бөлім жоқ екен, өңдеулеріңізді сақтау үшін орын жоқ.",
+'loginreqtitle'             => 'Кіруіңіз қажет',
+'loginreqlink'              => 'кіру',
+'loginreqpagetext'          => 'Басқа беттерді көру үшін сіз $1 болуыңыз қажет.',
+'accmailtitle'              => 'Құпия сөз жіберілді.',
+'accmailtext'               => '$2 жайына «$1» құпия сөзі жіберілді.',
+'newarticle'                => '(Жаңа)',
+'newarticletext'            => 'Сілтемеге еріп әлі басталмаған бетке
+келіпсіз. Бетті бастау үшін, төмендегі аумақта мәтініңізді
+теріңіз (көбірек ақпарат үшін [[{{{{ns:mediawiki}}:helppage}}|анықтама бетін]]
+қараңыз).Егер жаңылғаннан осында келген болсаңыз, шолғышыңыз
+«Артқа» деген түймесін нұқыңыз.',
+'anontalkpagetext'          => "----''Бұл тіркелгісіз (немесе тіркелгісін қолданбаған) пайдаланушының талқылау беті. Осы пайдаланушыны біз тек сандық IP жайымен теңдестіреміз. Осындай IP жайлар бірнеше пайдаланушыға ортақ болуы мүмкін. Егер сіз тіркелгісіз пайдаланушы болсаңыз және сізге қатыссыз мәндемелер жіберілгенін сезсеңіз, басқа тіркелгісіз пайдаланушылармен араластырмауы үшін [[{{ns:special}}:Userlogin|тіркелгі жасаңыз не кіріңіз]].''",
+'noarticletext'             => 'Бұл бетте ағымда еш мәтін жоқ, басқа беттерден осы бет атауын [[{{ns:special}}:Search/{{PAGENAME}}|іздеп көруіңізге]] немесе осы бетті [{{fullurl:{{FULLPAGENAME}}|action=edit}} түзетуіңізге] болады.',
+'clearyourcache'            => "'''Аңғартпа:''' Сақтағаннан кейін өзгерістерді көру үшін шолғыш қосалқы қалтасын босату керегі мүмкін. '''Mozilla  / Safari:''' ''Shift'' пернесін басып тұрып ''Reload'' (''Қайта жүктеу'') түймесін нұқыңыз (не ''Ctrl-Shift-R'' басыңыз); ''IE:'' ''Ctrl-F5'' басыңыз; '''Opera / Konqueror''' ''F5'' пернесін басыңыз.",
+'usercssjsyoucanpreview'    => '<strong>Басалқы:</strong> Сақтау алдында жаңа CSS/JS файлын тексеру үшін «Қарап шығу» түймесін қолданыңыз.',
+'usercsspreview'            => "'''Мынау CSS мәтінін тек қарап шығу екенін ұмытпаңыз, ол әлі сақталған жоқ!'''",
+'userjspreview'             => "'''Мынау JavaScript қатысушы бағдарламасын тексеру/қарап шығу екенін ұмытпаңыз, ол әлі сақталған жоқ!'''",
+'userinvalidcssjstitle'     => "'''Назар салыңыз:''' Бұл «$1» деген безендіру мәнері емес. Пайдаланушының .css және .js файл атауы кіші әріпппен жазылу тиісті екенін ұмытпаңыз, мысалға {{ns:user}}:Foo/monobook.css дегенді {{ns:user}}:Foo/Monobook.css дегенмен салыстырып қараңыз.",
+'updated'                   => '(Жаңартылған)',
+'note'                      => '<strong>Аңғартпа:</strong>',
+'previewnote'               => '<strong>Мынау тек қарап шығу екенін ұмытпаңыз; түзетулер әлі сақталған жоқ!</strong>',
+'previewconflict'           => 'Бұл қарап шығу жоғарыдағы өңдеу аумағындағы мәтінге сақтаған кезіндегі дей ықпал етеді.',
+'session_fail_preview'      => '<strong>Ғафу етіңіз! Сессия деректері ысырап қалғандықтан өңдеуіңізді жөндей алмаймыз.
+Мәтініңізді сақтап қайталап көріңіз. Егер әлі іс өтпейтін болса, шығып және кері кіріп көріңіз.</strong>',
+'session_fail_preview_html' => "<strong>Ғафу етіңіз! Сессия деректері ысырап қалғандықтан өңдеуіңізді жөндей алмаймыз.</strong>
+
+''Осы уикиде қам HTML ендірілген, JavaScript шабуылдардан қорғану үшін алдын ала қарап шығу жасырылған.''
+
+<strong>Егер бұл өңдеу адал талап болса, қайтарып көріңіз. Егер әлі де істемесе, шығып, сосын кері кіріп көріңіз.</strong>",
+'importing'                 => 'Сырттан алуда: $1',
+'editing'                   => 'Өңделуде: $1',
+'editinguser'               => 'Өңделуде: <b>$1</b> деген қатысушы',
+'editingsection'            => 'Өңделуде: $1 (бөлімі)',
+'editingcomment'            => 'Өңделуде: $1 (мәндемесі)',
+'editconflict'              => 'Өңдеу қақтығысы: $1',
+'explainconflict'           => 'Осы бетті сіз өңдей бастағанда басқа кейбіреу бетті өзгерткен.
+Жоғарғы аумақта беттің ағымдық мәтіні бар.
+Төменгі аумақта сіз өзгерткен мәтіні көрсетіледі.
+Өзгертуіңізді ағымдық мәтінге үстеуіңіз жөн.
+"Бетті сақта!" түймесіне басқанда
+<b>тек</b> жоғарғы аумақтағы мәтін сақталады.<br />',
+'yourtext'                  => 'Мәтініңіз',
+'storedversion'             => 'Сақталған нұсқасы',
+'nonunicodebrowser'         => '<strong>АҢҒАРТПА: Шолғышыңыз Unicode белгілеуіне үйлесімді емес, сондықтан латын емес әріптері бар беттерді өңдеу зіл болу мүмкін. Жұмыс істеуге ықтималдық беру үшін, төменгі өңдеу аумағында ASCII емес әріптер оналтылық санымен көрсетіледі</strong>.',
+'editingold'                => '<strong>АҢҒАРТПА: Осы беттің ертерек нұсқасын
+өңдеп жатырсыз.
+Бұны сақтасаңыз, осы нусқадан соңғы барлық түзетулер жойылады.</strong>',
+'yourdiff'                  => 'Айырмалар',
+'copyrightwarning'          => '{{SITENAME}} жобасына қосылған бүкіл үлес $2 (көбірек ақпарат үшін: $1) құжатына сай жіберілген болып саналады. Егер жазуыңыздың еркін көшіріліп түзетілуін қаламасаңыз, мында ұсынбауыңыз жөн.<br />
+Тағы, қосқан үлесіңіз - өзіңіздің жазғанығыз, не ашық ақпарат көздерінен алынған мағлұмат болғанын уәде етесіз.<br />
+<strong>АВТОРЛЫҚ ҚҰҚЫҚПЕН ҚОРҒАУЛЫ АҚПАРАТТЫ РҰҚСАТСЫЗ ҚОСПАҢЫЗ!</strong>',
+'copyrightwarning2'         => 'Есте тұрсын: барлық {{SITENAME}} жобасына берілген үлестер басқа улес берушілермен түзетуге, өзгертуге, не аластануға мүмкін. Алғыссыз түзетуге енжарлан болсаңыз, онда шығармаңызды мында жарияламаңыз.<br />
+Тағы, осыны өзіңіз жазғаныңызды, не барша қазынасынан, немесе сондай-ақ ақысыз ашық қайнарынан көшіргеніңізді
+дәл осындай бізге міндеттеме бересіз (көбірек ақпарат үшін $1 қужатын қараңыз).<br />
+<strong>АУТОРЛЫҚ ҚҰҚЫҚПЕН ҚОРҒАУЛЫ АҚПАРАТТЫ РҰҚСАТСЫЗ ҚОСПАҢЫЗ!</strong>',
+'longpagewarning'           => '<strong>НАЗАР САЛЫҢЫЗ: Бұл беттің мөлшері — $1 KB; кейбір
+шолғыштарда бет мөлшері 32 KB жетсе не оны асса өңдеу күрделі болуы мүмкін.
+Бетті бірнеше кішкін бөлімдерге бөліп көріңіз.</strong>',
+'longpageerror'             => '<strong>ҚАТЕ: Жіберетін мәтініңіздін мөлшері — $1 KB, ең көбі $2 KB
+рұқсат етілген мөлшерінен асқан. Бұл сақтай алынбайды.</strong>',
+'readonlywarning'           => '<strong>НАЗАР САЛЫҢЫЗ: Дерекқор жөндету үшін құлыпталған,
+сондықтан дәл қазір түзетуіңізді сақтай алмайсыз. Сосын қолдануға үшін мәтәніңізді көшіріп,
+өз компүтеріңізде файлға сақтаңыз.</strong>',
+'protectedpagewarning'      => '<strong>НАЗАР САЛЫҢЫЗ: Бұл бет қорғалған. Тек әкімші рұқсаты бар қатысушылар өңдеу жасай алады.</strong>',
+'semiprotectedpagewarning'  => "'''Аңғартпа:''' Бет жартылай қорғалған, сондықтан осыны тек рұқсаты бар қатысушылар өңдей алады.",
+'cascadeprotectedwarning'   => "'''Назар салыңыз''': Бұл бет құлыпталған, енді тек әкімші құқықтары бар пайдаланушылар бұны өңдей алады.Бұның себебі: бұл бет «баулы қорғауы» бар келесі {{PLURAL:$1|бетке|беттерге}} кіріктірілген:",
+'templatesused'             => 'Бұл бетте қолданылған үлгілер:',
+'templatesusedpreview'      => 'Бұны қарап шығуға қолданылған үлгілер:',
+'templatesusedsection'      => 'Бұл бөлімде қолданылған үлгілер:',
+'template-protected'        => '(қорғалған)',
+'template-semiprotected'    => '(жартылай қорғалған)',
+'edittools'                 => '<!-- Мындағы мағлұмат өңдеу және қотару үлгіттріңің астында көрсетіледі. -->',
+'nocreatetitle'             => 'Бетті бастау шектелген',
+'nocreatetext'              => 'Бұл торапта жаңа бет бастауы шектелген.
+Кері қайтып бар бетті өңдеуіңізге болады, немесе [[{{ns:special}}:Userlogin|кіруіңізге не тіркелгі жасауға]] болады.',
+
+# "Undo" feature
+'undo-success' => 'Бұл өңдеудің болдырмауы атқарылады. Талабыңызды біліп тұрып алдын ала төмендегі салыстыруды тексеріп шығыңыз да, түзету болдырмауын бітіру үшін төмендегі өзгерістерді сақтаңыз.',
+'undo-failure' => 'Бұл өңдеудің болдырмауы атқарылмайды, себебі: кедергі жасаған аралас түзетулер бар.',
+'undo-summary' => '[[{{ns:special}}:Contributions/$2|$2]] ([[{{ns:user_talk}}:$2|талқылауы]]) істеген $1 нұсқасын болдырмау',
+
+# Account creation failure
+'cantcreateaccounttitle' => 'Тіркелгі жасалмады',
+'cantcreateaccounttext'  => 'Осы IP жайдан (<b>$1</b>) тіркелгі жасауы бұғатталған.
+Бәлкім себебі, оқу орныңыздан, немесе Интернет жеткізушіден
+үзбей бұзақылық болғаны.',
+
+# History pages
+'revhistory'                  => 'Нұсқалар тарихы',
+'viewpagelogs'                => 'Осы бетке қатысты журналдарды қарау',
+'nohistory'                   => 'Осы беттінің нұсқалар тарихы жоқ.',
+'revnotfound'                 => 'Нұсқа табылмады',
+'revnotfoundtext'             => 'Осы сұранысқан беттің ескі нұсқасы табылған жоқ.
+Осы бетті ашуға пайдаланған URL жайын қайта тексеріп шығыңыз.',
+'loadhist'                    => 'Бет тарихын жүктеуі',
+'currentrev'                  => 'Ағымдық нұсқасы',
+'revisionasof'                => '$1 кезіндегі нұсқасы',
+'revision-info'               => '$1 кезіндегі $2 жасаған нұсқасы',
+'previousrevision'            => '← Ескілеу нұсқасы',
+'nextrevision'                => 'Жаңалау нұсқасы →',
+'currentrevisionlink'         => 'Ағымдық нұсқасы',
+'cur'                         => 'ағым.',
+'next'                        => 'кел.',
+'last'                        => 'соң.',
+'orig'                        => 'түп.',
+'page_first'                  => 'алғашқысына',
+'page_last'                   => 'соңғысына',
+'histlegend'                  => 'Айырмасын көру: салыстырамын деген нұсқаларды таңдап, не <Enter> пернесін, не төмендегі түймені басыңыз.<br />
+Шартты белгілер: (ағым.) = ағымдық нұсқамен айырмасы,
+(соң.) = алдыңғы нұсқамен айырмасы, ш = шағын түзету',
+'deletedrev'                  => '[жойылған]',
+'histfirst'                   => 'Ең алғашқысына',
+'histlast'                    => 'Ең соңғысына',
+'historysize'                 => '($1 B)',
+'historyempty'                => '(бос)',
+
+# Revision feed
+'history-feed-title'          => 'Нұсқа тарихы',
+'history-feed-description'    => 'Мына уикидегі бұл беттің нұсқа тарихы',
+'history-feed-item-nocomment' => '$2 кезіндегі $1 деген', # user at time
+'history-feed-empty'          => 'Сұранысқан бет жоқ болды.
+Ол мына уикиден жойылған, немесе атауы ауыстырылған.
+Осыған қатысты жаңа беттерді [[{{ns:special}}:Search|бұл уикиден іздеп]] көріңіз.',
+
+# Revision deletion
+'rev-deleted-comment'         => '(мәндеме аластатылды)',
+'rev-deleted-user'            => '(қатысушы аты аластатылды)',
+'rev-deleted-event'           => '(жазба жойылды)',
+'rev-deleted-text-permission' => '<div class="mw-warning plainlinks">
+Осы беттің нұсқасы жария мұрағаттарынан аластатылған.
+Бұл жайтқа [{{fullurl:{{ns:special}}:Log/delete|page={{FULLPAGENAMEE}}}} жою журналында] егжей-тегжей мәліметтері болуы мүмкін.
+</div>',
+'rev-deleted-text-view'       => '<div class="mw-warning plainlinks">
+Осы беттің нұсқасы жария мұрағаттарынан аластатылған.
+Соны осы тораптың әкімшісі боп көруіңіз мүмкін;
+бұл жайтқа [{{fullurl:{{ns:special}}:Log/delete|page={{FULLPAGENAMEE}}}} жою журналында] егжей-тегжей мәлметтері болуы мүмкін.
+</div>',
+'rev-delundel'                => 'көрсет/жасыр',
+'revisiondelete'              => 'Нұсқаларды жою/қайтару',
+'revdelete-nooldid-title'     => 'Нысана нұсқасы жоқ',
+'revdelete-nooldid-text'      => 'Осы әрекетті орындау үшін ақырғы нұсқасынне нұсқаларын енгізбепсіз.',
+'revdelete-selected'          => "'''$1:''' дегеннің {{PLURAL:$2|талғанылған нұсқасы|талғанылған нұсқалары}}:",
+'logdelete-selected'          => "'''$1:''' дегеннің {{PLURAL:$2|талғанылған журнал жазбасы|талғанылған журнал жазбалары}}:",
+'revdelete-text'              => 'Жойылған нұсқалар мен жазбаларды әлі де бет тарихында және журналдарда табуға болады,
+бірақ олардың мағлұмат бөлшектері баршаға қатыналмайды.
+
+Осы уикидің басқа әкімшілері жасырын мағлұматқа қатынай алады, және қосымша шектеу
+ендірілгенше дейін, осы тілдесу арқылы жойылған мағлұматты кері қайтара алады.',
+'revdelete-legend'            => 'Шектеулерді орнату:',
+'revdelete-hide-text'         => 'Нұсқа мәтінін жасыр',
+'revdelete-hide-name'         => 'Әрекет пен мақсатын жасыр',
+'revdelete-hide-comment'      => 'Түзету мәндемесін жасыр',
+'revdelete-hide-user'         => 'Өңдеуші атын (IP жайын) жасыр',
+'revdelete-hide-restricted'   => 'Осы шектеулерді баршаға сияқты әкімшілерге де қолдану',
+'revdelete-suppress'          => 'Әкімшілер жасаған мағлұматты басқаларша перделеу',
+'revdelete-hide-image'        => 'Файл мағлұматын жасыр',
+'revdelete-unsuppress'        => 'Қайтарылған нұсқалардан шектеулерді аластату',
+'revdelete-log'               => 'Журнал мәндемесі:',
+'revdelete-submit'            => 'Талғанған нұсқаға қолдану',
+'revdelete-logentry'          => '[[$1]] дегеннің нұсқа көрінісін өзгертті',
+'logdelete-logentry'          => '[[$1]] дегеннің жазба көрінісін өзгертті',
+'revdelete-logaction'         => '{{plural:$1|Нұсқаны|$1 нұсқаны}} $2 күйіне қойды',
+'logdelete-logaction'         => '[[$3]] дегеннің {{plural:$1|жазбасын|$1 жазбасын}} $2 күйіне қойды',
+'revdelete-success'           => 'Нұсқа көрінісі сәтті қойылды.',
+'logdelete-success'           => 'Жазба көрінісі сәтті қойылды.',
+
+# Oversight log
+'oversightlog'              => 'Тексеруші журналы',
+'overlogpagetext'           => 'Төменде әкімшілер жасырған мағлұматқа ықпал ететін жуықтағы болған жою және бұғаттау
+тізімі беріледі. Ағымдағы амалды бұғаттау мен тиым үшін [[{{ns:special}}:Ipblocklist|IP бұғаттау тізімін]] қараңыз.',
+
+# Diffs
+'difference'                => '(Нұсқалар арасындағы айырмашылық)',
+'loadingrev'                => 'айырма үшін нұсқа жүктеу',
+'lineno'                    => 'Жол $1:',
+'editcurrent'               => 'Осы беттің ағымдық нұсқасын өңдеу',
+'selectnewerversionfordiff' => 'Салыстыру үшін жаңалау нұсқасын талғаңыз',
+'selectolderversionfordiff' => 'Салыстыру үшін ескілеу нұсқасын талғаңыз',
+'compareselectedversions'   => 'Таңдаған нұсқаларды салыстыру',
+'editundo'                  => 'болдырмау',
+'diff-multi'                => '(Арадағы {{plural:$1|бір нұсқа|$1 нұсқа}} көрсетілмеді.)',
+
+# Search results
+'searchresults'         => 'Іздестіру нәтижелері',
+'searchresulttext'      => '{{SITENAME}} жобасында іздестіру туралы көбірек ақпарат үшін, [[{{{{ns:mediawiki}}:helppage}}|{{int:help}}]] қараңыз.',
+'searchsubtitle'        => "Іздестіру сұранысыңыз: '''[[:$1]]'''",
+'searchsubtitleinvalid' => "Іздестіру сұранысыңыз: '''$1'''",
+'badquery'              => 'Іздестіру сұраныс жарамсыз пішімделген',
+'badquerytext'          => 'Ғафу етіңіз, сұранысыңызды орындай алмадық.
+Бұл үш әріптен кем сөзді іздестіруге талаптанғаныңыздан
+болуға мүмкін, ол әлі де сүйемелденбеген.
+Тағы да бұл сөйлемді дұрыс енгізбегендіктен де болуға мүмкін,
+мысалы, «балық және және қабыршақ».
+Басқа сұраныс жасап көріңіз',
+'matchtotals'           => '«$1» іздестіру сұранысы $2 беттің атауына
+және $3 беттің мәтініне сәйкес.',
+'noexactmatch'          => "'''Осында «$1» атаулы бет жоқ.''' Бұл бетті өзіңіз '''[[:$1|бастай  аласыз]].'''",
+'titlematches'          => 'Бет атауы сәйкесі',
+'notitlematches'        => 'Еш бет атауы сәйкес емес',
+'textmatches'           => 'Бет мәтінің сәйкесі',
+'notextmatches'         => 'Еш бет мәтіні сәйкес емес',
+'prevn'                 => 'алдыңғы $1',
+'nextn'                 => 'келесі $1',
+'viewprevnext'          => 'Көрсетілуі: ($1) ($2) ($3) жазба.',
+'showingresults'        => "Төменде нөмір '''$2''' орнынан бастап, жеткенше {{PLURAL:$1|'''1''' нәтиже|'''$1''' нәтиже}} көрсетілген.",
+'showingresultsnum'     => "Төменде нөмір '''$2''' орнынан бастап {{PLURAL:$3|'''1''' нәтиже|'''$3''' нәтиже}} көрсетілген.",
+'nonefound'             => "'''Аңғартпа''': Табу сәтсіз бітуі жиі «болған» және «деген» сияқты
+тізімделмейтін жалпы сөздермен іздестіруден болуы мүмкін,
+немесе бірден артық іздестіру шарт сөздерін егізгеннен (нәтижелерде тек
+барлық шарт сөздер кедессе көрсетіледі) болуы мүмкін.",
+'powersearch'           => 'Іздеу',
+'powersearchtext'       => 'Мына есім аяларда іздеу:<br />$1<br />$2 Айдатуларды тізімдеу<br />Іздестіру сұранысы: $3 $9',
+'searchdisabled'        => '{{SITENAME}} жобасында ішкі іздеуі өшірілген. Әзірше Google немесе Yahoo! арқылы іздеуге болады. Аңғартпа: {{SITENAME}} мағлұмат тізімідеулері оларда ескірген болуға мүмкін.',
+'blanknamespace'        => '(Негізгі)',
+
+# Preferences page
+'preferences'              => 'Баптаулар',
+'mypreferences'            => 'Баптауым',
+'prefsnologin'             => 'Кірмегенсіз',
+'prefsnologintext'         => 'Баптауларды қалау үшін алдын ала [[{{ns:special}}:Userlogin|кіруіңіз]] қажет.',
+'prefsreset'               => 'Баптаулар арқаудан қайта орнатылды.',
+'qbsettings'               => 'Мәзір аймағы',
+'qbsettings-none'          => 'Ешқандай',
+'qbsettings-fixedleft'     => 'Солға бекітілген',
+'qbsettings-fixedright'    => 'Оңға бекітілген',
+'qbsettings-floatingleft'  => 'Солға қалқыған',
+'qbsettings-floatingright' => 'Оңға қалқыған',
+'changepassword'           => 'Құпия сөз өзгерту',
+'skin'                     => 'Безендіру',
+'math'                     => 'Математика',
+'dateformat'               => 'Күн-ай пішімі',
+'datedefault'              => 'Еш қалаусыз',
+'datetime'                 => 'Уақыт',
+'math_failure'             => 'Өңдету сәтсіз бітті',
+'math_unknown_error'       => 'белгісіз қате',
+'math_unknown_function'    => 'белгісіз функция',
+'math_lexing_error'        => 'лексика қатесі',
+'math_syntax_error'        => 'синтаксис қатесі',
+'math_image_error'         => 'PNG аударысы сәтсіз бітті; latex, dvips, gs және convert бағдарламаларының мүлтіксіз орнатуын тексеріңіз',
+'math_bad_tmpdir'          => 'Математиканың уақытша қалтасына жазылмады, не қалта жасалмады',
+'math_bad_output'          => 'Математиканың беріс қалтасына жазылмады, не қалта жасалмады',
+'math_notexvc'             => 'texvc бағдарламасы жоғалтылған; баптау үшін math/README құжатын қараңыз.',
+'prefs-personal'           => 'Жеке деректері',
+'prefs-rc'                 => 'Жуықтағы өзгерістер',
+'prefs-watchlist'          => 'Бақылау',
+'prefs-watchlist-days'     => 'Бақылау тізімінде көрсетерін күн саны:',
+'prefs-watchlist-edits'    => 'Кеңейтілген бақылау тізімі түзету көрсетерін саны:',
+'prefs-misc'               => 'Қосымша',
+'saveprefs'                => 'Сақта',
+'resetprefs'               => 'Таста',
+'oldpassword'              => 'Ағымдық құпия сөз:',
+'newpassword'              => 'Жаңа құпия сөз:',
+'retypenew'                => 'Жаңа құпия сөзді қайталаңыз:',
+'textboxsize'              => 'Өңдеу',
+'rows'                     => 'Жолдар:',
+'columns'                  => 'Бағандар:',
+'searchresultshead'        => 'Іздеу',
+'resultsperpage'           => 'Бет сайын нәтиже саны:',
+'contextlines'             => 'Нәтиже сайын жол саны:',
+'contextchars'             => 'Жол сайын әріп саны:',
+'stubthreshold'            => 'Бітеме көрстетуін анықтау табалдырығы:',
+'recentchangesdays'        => 'Жүықтағы өзгерістердегі көрсетілетін күндер:',
+'recentchangescount'       => 'Жуықтағы өзгерістердегі көрсетілетін түзетулер:',
+'savedprefs'               => 'Баптауларыңыз сақталды.',
+'timezonelegend'           => 'Уақыт белдеуі',
+'timezonetext'             => 'Жергілікті уақытыңызбен сервер уақытының (UTC) арасындағы сағат саны.',
+'localtime'                => 'Жергілікті уақыт',
+'timezoneoffset'           => 'Ығыстыру¹',
+'servertime'               => 'Сервер уақыты',
+'guesstimezone'            => 'Шолғыштан алып толтыру',
+'allowemail'               => 'Басқадан хат қабылдауын ендіру',
+'defaultns'                => 'Мына есім аяларда әдепкіден іздеу:',
+'default'                  => 'әдепкі',
+'files'                    => 'Файлдар',
+
+# User rights
+'userrights-lookup-user'     => 'Қатысушы топтарын меңгеру',
+'userrights-user-editname'   => 'Қатысушы атын енгізіңіз:',
+'editusergroup'              => 'Қатысушы топтарын өңдеу',
+'userrights-editusergroup'   => 'Қатысушы топтарын өңдеу',
+'saveusergroups'             => 'Қатысушы топтарын сақтау',
+'userrights-groupsmember'    => 'Мүшелігі:',
+'userrights-groupsavailable' => 'Қатынаулы топтар:',
+'userrights-groupshelp'      => 'Қатысушыны үстейтін не аластатын топтарды талғаңыз.
+Талғауы өшірілген топтар өзгертілімейді. Топтардың талғауын CTRL + Сол жақ нұқумен өшіруіңізге болады.',
+'userrights-reason'          => 'Өзгерту себебі:',
+
+# Groups
+'group'            => 'Топ:',
+'group-bot'        => 'Боттар',
+'group-sysop'      => 'Әкімшілер',
+'group-bureaucrat' => 'Төрешілер',
+'group-all'        => '(барлығы)',
+
+'group-bot-member'        => 'бот',
+'group-sysop-member'      => 'әкімші',
+'group-bureaucrat-member' => 'төреші',
+
+'grouppage-bot'        => '{{ns:project}}:Боттар',
+'grouppage-sysop'      => '{{ns:project}}:Әкімшілер',
+'grouppage-bureaucrat' => '{{ns:project}}:Төрешілер',
+
+# User rights log
+'rightslog'      => 'Қатысушы_құқықтары_журналы',
+'rightslogtext'  => 'Бұл пайдаланушылар құқықтарын өзгерту журналы.',
+'rightslogentry' => ' $1 топ мүшелгін $2 дегеннен $3 дегенге өзгертті',
+'rightsnone'     => '(ешқандай)',
+
+# Recent changes
+'nchanges'                          => '{{PLURAL:$1|бір түзету|$1 түзету}}',
+'recentchanges'                     => 'Жуықтағы өзгерістер',
+'recentchangestext'                 => 'Бұл бетте осы уикидегі болған жуықтағы өзгерістер байқалады.',
+'recentchanges-feed-description'    => 'Бұл арнаменен уикидегі ең соңғы өзгерістер қадағаланады.',
+'rcnote'                            => "$3 кезіне дейін — төменде соңғы {{PLURAL:$2|күндегі|'''$2''' күндегі}}, соңғы {{PLURAL:$1|'''1''' өзгеріс|'''$1''' өзгеріс}} көрсетілген.",
+'rcnotefrom'                        => '<b>$2</b> кезінен бері — төменде өзгерістер <b>$1</b> дейін көрсетілген.',
+'rclistfrom'                        => '$1 кезінен бері — жаңа өзгерістерді көрсет.',
+'rcshowhideminor'                   => 'Шағын түзетуді $1',
+'rcshowhidebots'                    => 'Боттарды $1',
+'rcshowhideliu'                     => 'Тіркелгенді $1',
+'rcshowhideanons'                   => 'Тіркелгісізді $1',
+'rcshowhidepatr'                    => 'Күзеттегі түзетулерді $1',
+'rcshowhidemine'                    => 'Түзетуімді $1',
+'rclinks'                           => 'Соңғы $2 күнде болған, соңғы $1 өзгерісті көрсет<br />$3',
+'diff'                              => 'айырм.',
+'hist'                              => 'тар.',
+'hide'                              => 'жасыр',
+'show'                              => 'көрсет',
+'minoreditletter'                   => 'ш',
+'newpageletter'                     => 'Ж',
+'boteditletter'                     => 'б',
+'sectionlink'                       => '→',
+'number_of_watching_users_pageview' => '[бақылаған $1 қатысушы]',
+'rc_categories'                     => 'Санаттарға шектеу ("|" белгісімен бөліктеңіз)',
+'rc_categories_any'                 => 'Қайсыбір',
+
+# Recent changes linked
+'recentchangeslinked'          => 'Қатысты түзетулер',
+'recentchangeslinked-noresult' => 'Сілтеген беттерде айтылмыш мерзімде ешқандай өзгеріс болмаған.',
+'recentchangeslinked-summary'  => "Бұл арнайы бетте сілтеген беттердегі жуықтағы өзгерістер тізімі беріледі. Бақылау тізіміңіздегі беттер '''жуан''' әрпімен белгіленеді.",
+
+# Upload
+'upload'                      => 'Файл қотару',
+'uploadbtn'                   => 'Қотар!',
+'reupload'                    => 'Қайталап қотару',
+'reuploaddesc'                => 'Қотару үлгітіне оралу.',
+'uploadnologin'               => 'Кірмегенсіз',
+'uploadnologintext'           => 'Файл қотару үшін
+[[{{ns:special}}:Userlogin|кіруіңіз]] қажет.',
+'upload_directory_read_only'  => 'Қотару қалтасына ($1) жазуға веб-серверге рұқсат берілмеген.',
+'uploaderror'                 => 'Қотару қатесі',
+'uploadtext'                  => "Төмендегі үлгіт файл қотаруға қолданылады, алдындағы суреттерді қарау үшін не іздеу үшін [[{{ns:special}}:Imagelist|қотарылған файлдар тізіміне]] барыңыз, қотару мен жою тағы да [[{{ns:special}}:Log/upload|қотару журналына]] жазылып алынады.
+
+Суреттерді бетке кіргізу үшін, файлға тура байланыстратын
+'''<nowiki>[[</nowiki>{{ns:image}}<nowiki>:File.jpg]]</nowiki>''',
+'''<nowiki>[[</nowiki>{{ns:image}}<nowiki>:File.png|балама мәтіні]]</nowiki>''' немесе
+'''<nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki>''' сілтеме пішімін қолданыңыз.",
+'uploadlog'                   => 'қотару журналы',
+'uploadlogpage'               => 'Қотару журналы',
+'uploadlogpagetext'           => 'Төменде жуықтағы қотарылған файл тізімі.',
+'filename'                    => 'Файл аты',
+'filedesc'                    => 'Сипаттамасы',
+'fileuploadsummary'           => 'Сипаттамасы:',
+'filestatus'                  => 'Ауторлық құқықтары күйі',
+'filesource'                  => 'Файл қайнары',
+'uploadedfiles'               => 'Қотарылған файлдар',
+'ignorewarning'               => 'Назар салуды елемеу және файлды әрдеқашан сақтау.',
+'ignorewarnings'              => 'Әрқайсы назар салуларды елемеу',
+'minlength'                   => 'Файл атында ең кемінде үш әріп болуы керек.',
+'illegalfilename'             => '«$1» файл атауында бет атауларында рұқсат етілмеген нышандар бар. Файлды қайта атаңыз, сосын қайта жуктеп көріңіз.',
+'badfilename'                 => 'Файлдың аты «$1» боп өзгертілді.',
+'filetype-badmime'            => '«$1» деген MIME түрі бар файлдарды қотаруға рұқсат етілмейді.',
+'filetype-badtype'            => "'''«.$1»''' деген күтілмеген файл түрі
+: Рүқсат етілген файл түр тізімі: $2",
+'filetype-missing'            => 'Бұл файлдың («.jpg» сияқты) кеңейтімі жоқ.',
+'large-file'                  => 'Файлды $1 мөлшерден аспауына тырысыңыз; бұл файл мөлшері — $2.',
+'largefileserver'             => 'Осы файлдың мөлшері сервердің қалауынан асып кеткен.',
+'emptyfile'                   => 'Қотарылған файлыңыз бос сияқты. Бұл файл атауы жансақ енгізілгенінен болуы мүмкін. Қотарғыңыз келген файл шынында да осы файл болғанын тексеріп алыңыз.',
+'fileexists'                  => 'Осындай атаулы файл бар түге. Қайта жазудың алдынан $1 тексеріп шығыңыз.',
+'fileexists-extension'        => 'Бұндай атауымен файл бар түге:<br />
+Қотарылатын файл атауы: <strong><tt>$1</tt></strong><br />
+Бар болған файл атауы: <strong><tt>$2</tt></strong><br />
+Айырмашлығы тек кеңейтімі бас/кіші әрпімен жазылуында. Файлдардың бірдейлігін сынап шығыңыз.',
+'fileexists-thumb'            => "'''<center>Бар болған сурет</center>'''",
+'fileexists-thumbnail-yes'    => "Осы файл — мөлшері кішірітілген сурет <i>(нобай)</i> сияқты. Бұл <strong><tt>$1</tt></strong> деген файлды сынап шығыңыз.<br />
+Егер сыналған файл түпнұсқалы мөлшері бар дәлме-дәл сурет болса, қосысмша нобайды қотару қажеті жоқ.",
+'file-thumbnail-no'           => "Файл атауы <strong><tt>$1</tt></strong> дегенмен басталады. Бұл — мөлшері кішірітілген сурет <i>(нобай)</i> сияқты.
+Егер толық ажыратылымдығы бар суретіңіз болса, соны қотарыңыз, әйтпесе файл атауын өзгертіңіз.",
+'fileexists-forbidden'        => 'Осындай атаулы файл бар түге. Кері қайтыңыз да, және осы файлды басқа атымен қотарыңыз. [[{{ns:image}}:$1|thumb|center|$1]]',
+'fileexists-shared-forbidden' => 'Осындай атаулы файл ортақ файл арқауында бар түге. Кері қайтыңыз да, осы файлды жаңа атымен қотарыңыз. [[{{ns:image}}:$1|thumb|center|$1]]',
+'successfulupload'            => 'Қотару сәтті өтті',
+'fileuploaded'                => '«$1» файлы сәтті қотарылды!
+Осы сілтемеге еріп — $2, сипаттама бетіне барыңыз да, және осы файл туралы
+ақпарат толтырыңыз: қайдан алынғанын, қашан жасалғанын, кім жасағанын,
+тағы басқа білетіңізді. Бұл сурет болса, мынадай пішімімен кірістіруге болады: <tt><nowiki>[[</nowiki>{{ns:image}}<nowiki>:$1|thumb|Сипаттамасы]]</nowiki></tt>',
+'uploadwarning'               => 'Қотару туралы назар салу',
+'savefile'                    => 'Файлды сақтау',
+'uploadedimage'               => '«[[$1]]» файлын қотарды',
+'uploaddisabled'              => 'Файл қотаруы өшірілген',
+'uploaddisabledtext'          => 'Осы уикиде файл қотаруы өшірілген.',
+'uploadscripted'              => 'Осы файлда, веб шолғышты ағат түсіндікке келтіретің HTML белгілеу, не скрипт коды бар.',
+'uploadcorrupt'               => 'Осы файл бүлдірілген, не әдепсіз кеңейтімі бар. Файлды тексеріп, қотаруын қайталаңыз.',
+'uploadvirus'                 => 'Осы файлда вирус болуы мүмкін! Егжей-тегжей ақпараты: $1',
+'sourcefilename'              => 'Қайнардағы файл аты',
+'destfilename'                => 'Ақырғы файл аты',
+'watchthisupload'             => 'Осы бетті бақылау',
+'filewasdeleted'              => 'Осы атауы бар файл бұрын қотарылған, сосын жойылдырылған. Қайта қотару алдынан $1 дегенді тексеріңіз.',
+
+'upload-proto-error'      => 'Жарамсыз хаттамалық',
+'upload-proto-error-text' => 'Сырттан қотару үшін URL жайлары <code>http://</code> немесе <code>ftp://</code> дегендерден басталу қажет.',
+'upload-file-error'       => 'Ішкі қате',
+'upload-file-error-text'  => 'Серверде уақытша файл жасауы ішкі қатеге ұшырасты. Бұл жүйенің әкімшімен қатынасыңыз.',
+'upload-misc-error'       => 'Белгісіз қотару қатесі',
+'upload-misc-error-text'  => 'Қотару кезінде белгісіз қате ұшырасты. Қайсы URL жайы жарамды және қатынаулы екенін тексеріп шығыңыз да қайталап көріңіз. Егер бұл мәселе әлде де қалса, жүйе әкімшімен қатынасыңыз.',
+
+# Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
+'upload-curl-error6'       => 'URL жайы жетілмеді',
+'upload-curl-error6-text'  => 'Берілген URL жайы жетілмеді. Қайсы URL жайы дұрыс екенін және торап істе екенін қайталап қатаң тексеріңіз.',
+'upload-curl-error28'      => 'Қотаруға берілген уақыт бітті',
+'upload-curl-error28-text' => 'Тораптың жауап беруі тым ұзақ уақытқа созылды. Бұл торап істе екенін тексеріп шығыңыз, аз уақыт кідіре тұрыңыз да тағы қайталап көріңіз. Талабыңызды жүктелуі аздау кезінде қайталауға болмыс.',
+
+'license'            => 'Лицензиясы',
+'nolicense'          => 'Ештеңе талғанбаған',
+'upload_source_url'  => ' (жарамды, баршаға қатынаулы URL жай)',
+'upload_source_file' => ' (компьютеріңіздегі файл)',
+
+# Image list
+'imagelist'                 => 'Файл тізімі',
+'imagelisttext'             => "Төменде ''$2'' сұрыпталған '''$1''' файл тізімі.",
+'imagelistforuser'          => 'Мында тек $1 жүктеген суреттер көрсетіледі.',
+'getimagelist'              => 'файл тізімдеуі',
+'ilsubmit'                  => 'Іздеу',
+'showlast'                  => 'Соңғы $1 файл $2 сұрыптап көрсет.',
+'byname'                    => 'атымен',
+'bydate'                    => 'күн-аймен',
+'bysize'                    => 'мөлшерімен',
+'imgdelete'                 => 'жою',
+'imgdesc'                   => 'сипп.',
+'imgfile'                   => 'файл',
+'imglegend'                 => 'Шартты белгілер: (сипп.) — файл сипаттамасын көрсету/өңдеу.',
+'imghistory'                => 'Файл тарихы',
+'revertimg'                 => 'қайт.',
+'deleteimg'                 => 'жою',
+'deleteimgcompletely'       => 'Осы файлдың барлық нұсқаларын жой',
+'imghistlegend'             => 'Шартты белгілер: (ағым.) = ағымдық файл, (жою) = ескі нұсқасын
+жою, (қай.) = ескі нұсқасына қайтару.
+<br /><i>Қотарылған файлды көру үшін күн-айына нұқыңыз</i>.',
+'imagelinks'                => 'Сілтемелері',
+'linkstoimage'              => 'Бұл файлға келесі беттер сілтейді:',
+'nolinkstoimage'            => 'Бұл файлға еш бет сілтемейді.',
+'sharedupload'              => 'Бұл файл ортақ арқауына қотарылған сондықтан басқа жобаларда қолдануы мүмкін.',
+'shareduploadwiki'          => 'Былайғы ақпарат үшін $1 дегенді қараңыз.',
+'shareduploadwiki-linktext' => 'файл сипаттамасы беті',
+'noimage'                   => 'Мынадай атаулы файл жоқ, $1 мүмкіндігіңіз бар.',
+'noimage-linktext'          => 'осыны қотару',
+'uploadnewversion-linktext' => 'Бұл файлдың жаңа нұсқасын қотару',
+'imagelist_date'            => 'Күн-айы',
+'imagelist_name'            => 'Атауы',
+'imagelist_user'            => 'Қатысушы',
+'imagelist_size'            => 'Мөлшері (B)',
+'imagelist_description'     => 'Сипаттамасы',
+'imagelist_search_for'      => 'Суретті атымен іздеу:',
+
+# MIME search
+'mimesearch'         => 'Файлды MIME түрімен іздеу',
+'mimesearch-summary' => 'Бұл бет файлдарды MIME түрімен сүзгілеу мүмкіндігін береді. Кірісі: «мағлұмат түрі»/«тарау түрі», мысалы <tt>image/jpeg</tt>.',
+'mimetype'           => 'MIME түрі:',
+'download'           => 'жүктеу',
+
+# Unwatched pages
+'unwatchedpages'         => 'Бақыланбаған беттер',
+
+# List redirects
+'listredirects'         => 'Айдату бет тізімі',
+
+# Unused templates
+'unusedtemplates'         => 'Пайдаланылмаған үлгілер',
+'unusedtemplatestext'     => 'Бұл бет басқа бетке кіріcтірілмеген үлгі есім аяысындағы барлық беттерді тізімдейді. Үлгілерді жою алдынан бұның басқа сілтемелерін тексеріп шығуын ұмытпаңыз',
+'unusedtemplateswlh'      => 'басқа сілтемелер',
+
+# Random redirect
+'randomredirect'         => 'Кездейсоқ айдату',
+'randomredirect-nopages' => 'Бұл есім аясында еш айдату жоқ.',
+
+
+# Statistics
+'statistics'             => 'Жоба санағы',
+'sitestats'              => '{{SITENAME}} санағы',
+'userstats'              => 'Қатысушы санағы',
+'sitestatstext'          => "Дерекқорда {{PLURAL:$1|'''1''' бет|бұлайша '''$1''' бет}} бар.
+Бұның ішінде: «талқылау» беттері, {{SITENAME}} жобасы туралы беттер, ең аз «бітеме»
+беттері, айдатулар, тағы да басқа мағлұмат деп танылмайтын беттер болуы мүмкін .
+Соларды есептен шығарғанда, мында мағлұмат деп саналатын
+{{PLURAL:$2|'''1'''|'''$2'''}} бет бар шығар.
+
+Қотарылған {{PLURAL:$8|'''1''' файл|'''$8''' файл}} сақталады.
+
+{{SITENAME}} жобасы орнатылғаннан бері беттер {{PLURAL:$3|'''1''' рет|бұлайша '''$3''' рет}} қаралған,
+және беттер {{PLURAL:$4|'''1''' рет|'''$4''' рет}} түзетілген.
+Бұның нәтижесінде орта есеппен әрбір бетке '''$5''' рет түзету келеді, және әрбір түзетуге '''$6''' рет қарау келеді.
+
+Ағымдық [http://meta.wikimedia.org/wiki/Help:Job_queue тапсырым кезегі] ұзындылығы: '''$7'''.",
+'userstatstext'          => "Мында {{PLURAL:$1|'''1''' тіркелген қатысушы|'''$1''' тіркелген қатысушы}} бар, соның ішінде
+ {{PLURAL:$2|'''1''' қатысушыда|'''$2''' қатысушыда}} (немесе '''$4 %''') $5 құқықтары бар",
+'statistics-mostpopular' => 'Ең көп қаралған беттер',
+
+'disambiguations'         => 'Айрықты беттер',
+'disambiguationspage'     => '{{ns:template}}:Disambig',
+'disambiguations-text'    => "Келесі беттер '''айрықты бетке''' сілтейді. Бұның орнына белгілі тақырыпқа сілтеуі қажет.<br />Егер [[{{ns:mediawiki}}:disambiguationspage]] тізіміндегі үлгі қолданылса, бет айрықты деп саналады.",
+
+'doubleredirects'         => 'Шынжырлы айдатулар',
+'doubleredirectstext'     => 'Әрбір жолдағы бірінші мен екінші айдату сілтемелері бар, сонымен бірге екінші айдату мәтіннің бірінші жолы бар. Әдетте бірінші сілтеме айдайтын «шын» ақырғы беттің атауы болуы қажет.',
+
+'brokenredirects'         => 'Еш бетке келтірмейтін айдатулар',
+'brokenredirectstext'     => 'Келесі айдатулар жоқ беттерге сілтейді:',
+'brokenredirects-edit'    => '(өңдеу)',
+'brokenredirects-delete'  => '(жою)',
+
+'withoutinterwiki'        => 'Еш тілге сілтeмеген беттер',
+'withoutinterwiki-header' => 'Келесі беттер басқа тілдерге сілтемейді:',
+
+'fewestrevisions'         => 'Ең аз түзетілген беттер',
+
+
+# Miscellaneous special pages
+'nbytes'                          => '$1 B',
+'ncategories'                     => '$1 санат',
+'nlinks'                          => '$1 сілтеме',
+'nmembers'                        => '$1 буын',
+'nrevisions'                      => '$1 нұсқа',
+'nviews'                          => '$1 рет қаралған',
+'specialpage-empty'               => 'Бұл бет бос.',
+'lonelypages'                     => 'Еш бет сілтемеген беттер',
+'lonelypagestext'                 => 'Келесі беттерге осы жобадағы басқа беттер сілтемейді.',
+'uncategorizedpages'              => 'Еш санатқа кірмеген беттер',
+'uncategorizedcategories'         => 'Еш санатқа кірмеген санаттар',
+'uncategorizedimages'             => 'Еш санатқа кірмеген суреттер',
+'unusedcategories'                => 'Пайдаланылмаған санаттар',
+'unusedimages'                    => 'Пайдаланылмаған файлдар',
+'popularpages'                    => 'Әйгілі беттер',
+'wantedcategories'                => 'Басталмаған санаттар',
+'wantedpages'                     => 'Басталмаған беттер',
+'mostlinked'                      => 'Ең көп сілтенген беттер',
+'mostlinkedcategories'            => 'Ең көп сілтенген санаттар',
+'mostcategories'                  => 'Ең көп санаттарға кірген беттер',
+'mostimages'                      => 'Ең көп сілтенген суреттер',
+'mostrevisions'                   => 'Ең көп түзетілген беттер',
+'allpages'                        => 'Барлық бет тізімі',
+'prefixindex'                     => 'Бет бастау тізімі',
+'randompage'                      => 'Кездейсоқ бет',
+'randompage-nopages'              => 'Бұл есім аясында беттер жоқ.',
+'shortpages'                      => 'Ең қысқа беттер',
+'longpages'                       => 'Ең үлкен беттер',
+
+'deadendpages'                    => 'Еш бетке сілтемейтін беттер',
+'deadendpagestext'                => 'Келесі беттер осы жобадағы басқа беттерге сілтемейді.',
+'protectedpages'                  => 'Қорғалған беттер',
+'protectedpagestext'              => 'Келесі беттер өңдеуден немесе жылжытудан қорғалған',
+'protectedpagesempty'             => 'Ағымда осындай баптауларымен ешбір бет қорғалмаған',
+'listusers'                       => 'Барлық қатысушы тізімі',
+'specialpages'                    => 'Арнайы беттер',
+'spheading'                       => 'Баршаның арнайы беттері',
+'restrictedpheading'              => 'Шектеулі арнайы беттер',
+'rclsub'                          => '(«$1» бетінен сілтенген беттерге)',
+'newpages'                        => 'Ең жаңа беттер',
+'newpages-username'               => 'Қатысушы аты:',
+'ancientpages'                    => 'Ең ескі беттер',
+'intl'                            => 'Тіларалық сілтемелер',
+'move'                            => 'Жылжыту',
+'movethispage'                    => 'Бетті жылжыту',
+'unusedimagestext'                => '<p>Ескерту: Басқа веб тораптар файлдың
+URL жайына тікелей сілтеуі мүмкін. Сондықтан, белсенді пайдалануына аңғармай,
+осы тізімде қалуы мүмкін.</p>',
+'unusedcategoriestext'            => 'Келесі санат беттер бар болып тұр, бірақ оған ешқандай бет, не санат кірмейді.',
+
+# Book sources
+'booksources'               => 'Кітап қайнарлары',
+'booksources-search-legend' => 'Кітап қайнарларын іздеу',
+'booksources-isbn'          => 'ISBN белгісі:',
+'booksources-go'            => 'Өту',
+'booksources-text'          => 'Төменде жаңа және қолданған кітаптар сататынтораптарының сілтемелері тізімделген.
+Бұл тораптарда ізделген кітаптар туралы былайғы ақпарат болуға мүмкін.',
+
+'categoriespagetext' => 'Осында уикидегі барлық санаттарының тізімі беріліп тұр.',
+'data'               => 'Деректер',
+'userrights'         => 'Қатысушылар құқықтарын меңгеру',
+'groups'             => 'Қатысушы топтары',
+'isbn'               => 'ISBN',
+'alphaindexline'     => '$1 — $2',
+'version'            => 'Жүйе нұсқасы',
+
+# Special:Logs
+'specialloguserlabel'  => 'Қатысушы:',
+'speciallogtitlelabel' => 'Атау:',
+'log'                  => 'Журналдар',
+'log-search-legend'    => 'Журналдардан іздеу',
+'log-search-submit'    => 'Өту',
+'alllogstext'          => '{{SITENAME}} жобасының барлық қатынаулы журналдарын біріктіріп көрсетуі.
+Журнал түрін, қатысушы атын, не тиісті бетін талғап, тарылтып қарауыңызға болады.',
+'logempty'             => 'Журналда сәйкес даналар жоқ.',
+'log-title-wildcard'   => 'Мынадай мәтіннең басталытын атаулардан іздеу',
+
+# Special:Allpages
+'nextpage'          => 'Келесі бетке ($1)',
+'prevpage'          => 'Алдыңғы бетке ($1)',
+'allpagesfrom'      => 'Мына беттен бастап көрсету:',
+'allarticles'       => 'Барлық бет тізімі',
+'allinnamespace'    => 'Барлық бет ($1 есім аясы)',
+'allnotinnamespace' => 'Барлық бет ($1 есім аясынан тыс)',
+'allpagesprev'      => 'Алдыңғыға',
+'allpagesnext'      => 'Келесіге',
+'allpagessubmit'    => 'Өту',
+'allpagesprefix'    => 'Мынадан басталған беттерді көрсету:',
+'allpagesbadtitle'  => 'Алынған бет атауы жарамсыз болған, немесе тіл-аралық не уики-аралық бастауы бар болды. Атауда қолдануға болмайтын нышандар болуы мүмкін.',
+
+# Special:Listusers
+'listusersfrom' => 'Мына қатысушыдан бастап көрсету:',
+'listusers-submit'   => 'Көрсет',
+'listusers-noresult' => 'Қатысушы табылған жоқ.',
+
+# E-mail user
+'mailnologin'     => 'Е-пошта жайы жіберілген жоқ',
+'mailnologintext' => 'Басқа қатысушыға хат жіберу үшін
+[[{{ns:special}}:Userlogin|кіруіңіз]] қажет, және [[{{ns:special}}:Preferences|баптауыңызда]]
+куәландырылған е-пошта жайы болуы жөн.',
+'emailuser'       => 'Қатысушыға хат жазу',
+'emailpage'       => 'Қатысушыға хат жіберу',
+'emailpagetext'   => 'Егер бұл қатысушы баптауларында куәландырған е-пошта
+жайын енгізсе, төмендегі үлгіт арқылы бұған жалғыз е-пошта хатын жіберуге болады.
+Қатысушы баптауыңызда енгізген е-пошта жайыңыз
+«Кімнен» деген бас жолағында көрінеді, сондықтан
+хат алушысы тура жауап бере алады.',
+'usermailererror' => 'Mail нысаны қате қайтарды:',
+'defemailsubject' => '{{SITENAME}} е-поштасының хаты',
+'noemailtitle'    => 'Бұл е-пошта жайы емес',
+'noemailtext'     => 'Осы қатысушы жарамды Е-пошта жайын енгізбеген,
+немесе басқалардан хат қабылдауын өшірген.',
+'emailfrom'       => 'Кімнен',
+'emailto'         => 'Кімге',
+'emailsubject'    => 'Тақырыбы',
+'emailmessage'    => 'Хат',
+'emailsend'       => 'Жіберу',
+'emailccme'       => 'Хатымдың көшірмесін маған да жібер.',
+'emailccsubject'  => '$1 дегенге жіберілген хатыңыздың көшірмесі: $2',
+'emailsent'       => 'Хат жіберілді',
+'emailsenttext'   => 'Е-пошта хатыңыз жіберілді.',
+
+# Watchlist
+'watchlist'            => 'Бақылау тізімі',
+'mywatchlist'          => 'Бақылауым',
+'watchlistfor'         => "('''$1''' бақылаулары)",
+'nowatchlist'          => 'Бақылау тізіміңізде ешбір дана жоқ',
+'watchlistanontext'    => 'Бақылау тізіміңіздегі даналарды қарау, не өңдеу үшін $1 қажет.',
+'watchlistcount'       => "'''Бақылау тізіміңізде (талқылау беттерді қоса) $1 дана бар.'''",
+'clearwatchlist'       => 'Бақылау тізімін тазалау',
+'watchlistcleartext'   => 'Соларды толық аластатуға батылсыз ба?',
+'watchlistclearbutton' => 'Бақылау тізімін тазалау',
+'watchlistcleardone'   => 'Бақылау тізіміңіз тазартылды. $1 дана аластатылды.',
+'watchnologin'         => 'Кірмегенсіз',
+'watchnologintext'     => 'Бақылау тізіміңізді өзгерту үшін [[{{ns:special}}:Userlogin|кіруіңіз]] жөн.',
+'addedwatch'           => 'Бақылау тізіміне қосылды',
+'addedwatchtext'       => "«[[:$1]]» беті [[{{ns:special}}:Watchlist|бақылау тізіміңізге]] қосылды.
+Осы беттің және соның талқылау бетінің келешектегі өзгерістері мында тізімделеді.
+Сонда беттің атауы табуға жеңілдетіп [[{{ns:special}}:Recentchanges|жуықтағы өзгерістер тізімінде]]
+'''жуан әрпімен''' көрсетіледі.
+
+Осы бетті соңынан бақылау тізімнен аластатыңыз келсе «Бақыламау» парағын нұқыңыз.",
+'removedwatch'         => 'Бақылау тізіміңізден аластатылды',
+'removedwatchtext'     => '«[[:$1]]» беті бақылау тізіміңізден аластатылды.',
+'watch'                => 'Бақылау',
+'watchthispage'        => 'Бетті бақылау',
+'unwatch'              => 'Бақыламау',
+'unwatchthispage'      => 'Бақылауды тоқтату',
+'notanarticle'         => 'Мағлұмат беті емес',
+'watchnochange'        => 'Көрсетілген мерзімде ешбір бақыланған дана өңделген жоқ.',
+'watchdetails'         => "* Бақылау тізімінде (талқылау беттерісіз) '''$1''' бет бар.
+* [[{{ns:special}}:Watchlist/edit|Бүкіл тізімді қарау және өзгерту]].
+* [[{{ns:special}}:Watchlist/clear|Тізімдегі барлық дана аластату]].",
+'wlheader-enotif'      => '* Ескерту хат жіберуі ендірілген.',
+'wlheader-showupdated' => "* Соңғы кіргенімнен бері түзетілген беттерді '''жуан''' мәтінмен көрсет",
+'watchmethod-recent'   => 'бақылаулы беттердің жуықтағы өзгерістерін тексеру',
+'watchmethod-list'     => 'жуықтағы өзгерістерде бақылаулы беттерді тексеру',
+'removechecked'        => 'Белгіленгенді бақылау тізімінен аластату',
+'watchlistcontains'    => 'Бақылау тізіміңізде {{PLURAL:$1|1 бет|$1 бет}} бар.',
+'watcheditlist'        => "Осында әліппем сұрыпталған бақыланған мағлұмат беттеріңіз тізімделінген.
+Беттерді аластату үшін оның қасындағы қабашақтарды белгілеп, төмендегі ''Белгіленгенді аластат'' түймесін нұқыңыз
+(мағлұмат бетін жойғанда талқылау беті де бірге жойылады).",
+'removingchecked'      => 'Сұранған даналарды бақылау тізімнен аластауы…',
+'couldntremove'        => '«$1» деген дана аластатылмады…',
+'iteminvalidname'      => '«$1» данасының жарамсыз атауынан шатақ туды…',
+'wlnote'               => "Төменде соңғы {{PLURAL:$2|сағатта|'''$2''' сағатта}} болған, {{PLURAL:$1|жуықтағы өзгеріс|жуықтағы '''$1''' өзгеріс}} көрсетілген.",
+'wlshowlast'           => 'Соңғы $1 сағаттағы, $2 күндегі, $3 болған өзгерісті көрсету',
+'wlsaved'              => 'Бұл бақылу тізіміңіздің сақталған нұсқасы.',
+'watchlist-show-bots'  => 'Боттарды көрсет',
+'watchlist-hide-bots'  => 'Боттарды жасыр',
+'watchlist-show-own'   => 'Түзетуімді көрсет',
+'watchlist-hide-own'   => 'Түзетуімді жасыр',
+'watchlist-show-minor' => 'Шағын түзетуді көрсет',
+'watchlist-hide-minor' => 'Шағын түзетуді жасыр',
+'wldone'               => 'Іс бітті.',
+
+# Displayed when you click the "watch" button and it's in the process of watching
+'watching'   => 'Бақылау…',
+'unwatching' => 'Бақыламау…',
+
+'enotif_mailer'      => '{{SITENAME}} ескерту хат жіберу қызметі',
+'enotif_reset'       => 'Барлық бет каралді деп белгіле',
+'enotif_newpagetext' => 'Мынау жаңа бет.',
+'changed'            => 'өзгертті',
+'created'            => 'жасады',
+'enotif_subject'     => '{{SITENAME}} жобасында $PAGEEDITOR $PAGETITLE атаулы бетті $CHANGEDORCREATED',
+'enotif_lastvisited' => 'Соңғы кіруіңізден бері болған өзгерістер үшін $1 дегенді қараңыз.',
+'enotif_body'        => 'Құрметті $WATCHINGUSERNAME,
+
+{{SITENAME}} жобасыда $PAGEEDITDATE кезінде $PAGEEDITOR $PAGETITLE атаулы бетті $CHANGEDORCREATED, ағымдық нұсқасын $PAGETITLE_URL жайынан қараңыз.
+
+$NEWPAGE
+
+Өңдеуші сипаттамасы: $PAGESUMMARY $PAGEMINOREDIT
+
+Өңдеушімен қатынасу:
+е-пошта: $PAGEEDITOR_EMAIL
+уики: $PAGEEDITOR_WIKI
+
+Былайғы өзгерістер болғанда да сіз осы бетке барғанша дейін ешқандай басқа ескерту хаттар жіберілмейді. Сонымен қатар бақылау тізіміңіздегі бет ескертпелік белгісін әдепке күйіне келтіріңіз.
+
+             Сіздің досты {{SITENAME}} ескерту қызметі
+
+----
+Бақылау тізіміңізді баптау үшін, мында барыңыз
+{{fullurl:{{ns:special}}:Watchlist/edit}}
+
+Сын-пікір беру және былайғы жәрдем алу үшін:
+{{fullurl:{{{{ns:mediawiki}}:helppage}}}}',
+
+# Delete/protect/revert
+'deletepage'                  => 'Бетті жою',
+'confirm'                     => 'Растау',
+'excontent'                   => 'болған мағлұматы: «$1»',
+'excontentauthor'             => 'болған мағлұматы: «$1» (тек «[[Special:Contributions/$2|$2]]» үлесі)',
+'exbeforeblank'               => 'тазарту алдындағы болған мағлұматы: «$1»',
+'exblank'                     => 'бет босты болды',
+'confirmdelete'               => 'Жоюды растау',
+'deletesub'                   => '(«$1» жоюы)',
+'historywarning'              => 'Назар салыңыз: Жоюға арналған бетте өз тарихы бар:',
+'confirmdeletetext'           => 'Бетті немесе суретті барлық тарихымен
+бірге дерекқордан әрдайым жойығыңыз келетін сияқты.
+Бұны жоюдың зардабын түсініп шын ниеттенгеніңізді, және
+[[{{{{ns:mediawiki}}:policy-url}}]] дегенге лайықты деп
+сенгеніңізді растаңыз.',
+'policy-url'                 => '{{ns:project}}:Ережелер',
+'actioncomplete'              => 'Әрекет бітті',
+'deletedtext'                 => '«$1» жойылды.
+Жуықтағы жоюлар туралы жазбаларын $2 дегеннен қараңыз.',
+'deletedarticle'              => '«[[$1]]» бетін жойды',
+'dellogpage'                  => 'Жою_журналы',
+'dellogpagetext'              => 'Төменде жуықтағы жоюлардың тізімі берілген.',
+'deletionlog'                 => 'жою журналы',
+'reverted'                    => 'Ертерек нұсқасына қайтарылған',
+'deletecomment'               => 'Жоюдың себебі',
+'imagereverted'               => 'Ертерек нұсқасына қайтару сәтті өтті.',
+'rollback'                    => 'Түзетулерді қайтару',
+'rollback_short'              => 'Қайтару',
+'rollbacklink'                => 'қайтару',
+'rollbackfailed'              => 'Қайтару сәтсіз аяқталды',
+'cantrollback'                => 'Түзету қайтарылмайды. Бұл беттің соңғы үлескері тек бастауыш ауторы.',
+'alreadyrolled'               => '[[{{ns:user}}:$2|$2]] ([[{{ns:user_talk}}:$2|талқылауы]]) жасаған [[:$1]]
+дегеннің соңғы өңдеуі қайтарылмады; кейбіреу осы қазір бетті өңдеп не қайтарып жатыр түге.
+
+Соңғы өңдеуді [[{{ns:user}}:$3|$3]] ([[{{ns:user_talk}}:$3|талқылауы]]) дегенді жасаған.',
+'editcomment'                 => 'Түзетудің болған мәндемесі: «<i>$1</i>».', # only shown if there is an edit comment
+'revertpage'                  => '[[{{ns:special}}:Contributions/$2|$2]] ([[{{ns:user_talk}}:$2|талқылауы]]) түзетулерін [[{{ns:user}}:$1|$1]] соңғы нұсқасына қайтарды',
+'sessionfailure'              => 'Кіру сессиясында шатақ болған сияқты;
+сессияға шабуылдаудардан қорғану үшін, осы әрекет тоқтатылды.
+«Артқа» түймесін басыңыз, және бетті кері жүктеңіз, сосын қайталап көріңіз.',
+'protectlogpage'              => 'Қорғау_журналы',
+'protectlogtext'              => 'Төменде беттердің қорғау/қорғамау тізімі берілген. Ағымдағы қорғау әректтер бар беттер үшін [[{{ns:special}}:Protectedpages|қорғалған бет тізімін]] қараңыз.',
+'protectedarticle'            => '«$1» қорғалды',
+'unprotectedarticle'          => '«[[$1]]» қорғалмады',
+'protectsub'                  => '(«$1» қорғауда)',
+'confirmprotecttext'          => 'Осы бетті расында да қорғау қажет пе?',
+'confirmprotect'              => 'Қорғауды растау',
+'protectmoveonly'             => 'Тек жылжытудан қорғау',
+'protectcomment'              => 'Қорғау себебі',
+'protectexpiry'               => 'Бітетін мерзімі',
+'protect_expiry_invalid'      => 'Бітетін уақыты жарамсыз.',
+'protect_expiry_old'          => 'Бітетін уақыты өтіп кеткен.',
+'unprotectsub'                => '(«$1» қорғамауда)',
+'confirmunprotecttext'        => 'Осы бетті растан қорғамау қажет пе?',
+'confirmunprotect'            => 'Қорғамауды растау',
+'unprotectcomment'            => 'Қорғамау себебі',
+'protect-unchain'             => 'Жылжытуға рұқсат беру',
+'protect-text'                => '<strong>$1</strong> бетінің қорғау деңгейін қарай және өзгерте аласыз.',
+'protect-locked-blocked'      => 'Бұғаттауыңыз өшірілгенше дейін қорғау деңгейін өзгерте алмайсыз.
+Мына <strong>$1</strong> беттің ағымдық баптаулары:',
+'protect-locked-dblock'       => 'Дерекқордың құлыптауы белсенді болғандықтан қорғау деңгейлері өзгертілмейді.
+Мына <strong>$1</strong> беттің ағымдық баптаулары:',
+'protect-locked-access'       => 'Тіркелгіңізге бет қорғау денгейлерін өзгертуіне рұқсат жоқ.
+Мына <strong>$1</strong> беттің ағымдық баптаулары:',
+'protect-cascadeon'           => 'Бұл бет ағымда қорғалған, себебі: осы бет баулы қорғауы бар келесі {{PLURAL:$1|бетке|беттерге}} кірістірілген. Бұл беттің қорғау деңгейін өзгерте аласыз, бірақ бұл баулы қорғауға ықпал етпейді.',
+'protect-default'             => '(әдепкі)',
+'protect-level-autoconfirmed' => 'Тіркелгісіз пайдаланушыларға тиым',
+'protect-level-sysop'         => 'Тек әкімшілерге рұқсат',
+'protect-summary-cascade'     => 'баулы',
+'protect-expiring'            => 'бітуі: $1 (UTC)',
+'protect-cascade'             => 'Баулы қорғау — бұл бетке кірістірілген әрқайсы беттерді қорғау.',
+'restriction-type'            => 'Рұқсат',
+'restriction-level'           => 'Рұқсат деңгейі',
+'minimum-size'                => 'Ең аз мөлшері (байт)',
+
+# Restrictions (nouns)
+'restriction-edit' => 'Өңдеу',
+'restriction-move' => 'Жылжыту',
+
+# Restriction levels
+'restriction-level-sysop'         => 'толық қорғалған',
+'restriction-level-autoconfirmed' => 'жартылай қорғалған',
+'restriction-level-all'           => 'әрқайсы деңгейде',
+
+# Undelete
+'undelete'                 => 'Жойылған беттерді қарау',
+'undeletepage'             => 'Жойылған беттерді қарау және қайтару',
+'viewdeletedpage'          => 'Жойылған беттерді қарау',
+'undeletepagetext'         => 'Келесі беттер жойылды деп белгіленген, бірақ мағлұматы мұрағатта жатқан,
+сондықтан кері қайтаруға әзір. Мұрағат мерзім бойынша тазаланып тұруы мүмкін.',
+'undeleteextrahelp'        => "Бүкіл бетті қайтару үшін, барлық қабашақтарды бос қалдырып
+'''''Қайтар!''''' түймесін нұқыңыз. Бөлекше қайтару орындау үшін, қайтарайын деген нұсқаларына сәйкес
+қабашақтарын белгілеңіз де, және '''''Қайтар!''''' түймесін нұқыңыз. '''''Таста''''' түймесін
+нұқығанда мәндеме аумағы мен барлық қабашақтар тазаланады.",
+'undeleterevisions'        => '{{PLURAL:$1|Бір нұсқа|$1 нұсқа}} мұрағатталды',
+'undeletehistory'          => 'Егер бет мағлұматын қайтарсаңыз,тарихында барлық нұсқалар да
+қайтарылады. Егер жоюдан соң дәл солай атауымен жаңа бет жасалса, қайтарылған нұсқалар
+тарихтың ең адында көрсетіледі, және көрсетіліп тұрған беттің ағымдық нұсқасы
+өздікті алмастырылмайды. Файл нұсқаларының қайтарғанда шектеулері жойылатын ұмытпаңыз.',
+'undeleterevdel'           => 'Егер беттің үстіңгі нұсқасы жарым-жартылай жойылған болса жойылған қайтаруы
+ атқарылмайды. Осындай жағдайларда, ең жаңа жойылған нұсқа белгілеуін немесе жасыруын аластатыңыз.
+Көруіңізге рұқсат етілмеген файл нұсқалары қайтарылмайды.',
+'undeletehistorynoadmin'   => 'Бұл бет жойылған. Жою себебі алдындағы өңдеген қатысушылар
+егжей-тегжейлерімен бірге төмендегі сипаттамасында көрсетілген.
+Осы жойылған нұсқалардың мәтіні тек әкімшілерге қатынаулы.',
+'undelete-revision'        => '$2 кезіндегі $1 дегеннің жойылған нұсқасы:',
+'undeleterevision-missing' => 'Жарамсыз не жоғалған нұсқа. Сілтемеңіз жарамсыз болуы мүмкін, не
+нұсқа қайтарылған түге немесе мұрағаттан аластатылған.',
+'undeletebtn'              => 'Қайтар!',
+'undeletereset'            => 'Таста',
+'undeletecomment'          => 'Мәндемесі:',
+'undeletedarticle'         => '«[[$1]]» қайтарды',
+'undeletedrevisions'       => '{{plural:$1|Нұсқаны|$1 нұсқаны}} қайтарды',
+'undeletedrevisions-files' => '{{plural:$1|Нұсқаны|$1 нұсқаны}} және {{plural:$2|файлды|$2 файлды}} қайтарды',
+'undeletedfiles'           => '{{plural:$1|1 файл|$1 файл}} қайтарды',
+'cannotundelete'           => 'Қайтару сәтсіз бітті; тағы біреу сізден бұрын сол бетті қайтарған болар.',
+'undeletedpage'            => "<big>'''$1 қайтарылды'''</big>
+
+Жуықтағы жою мен қайтару жөнінде [[{{ns:special}}:Log/delete|жою журналын]] қараңыз.",
+'undelete-header'          => 'Жуықтағы жойылған беттер жөнінде [[{{ns:special}}:Log/delete|жою журналын]] қараңыз.',
+'undelete-search-box'      => 'Жойылған беттерді іздеу',
+'undelete-search-prefix'   => 'Мынадан басталған беттерді көрсет:',
+'undelete-search-submit'   => 'Іздеу',
+'undelete-no-results'      => 'Жою мұрағатында ешқандай сәйкес беттер табылмады.',
+
+# Namespace form on various pages
+'namespace' => 'Есім аясы:',
+'invert'    => 'Талғауды керілеу',
+
+# Contributions
+'contributions' => 'Қатысушы үлесі',
+'mycontris'     => 'Үлесім',
+'contribsub2'    => '$1 ($2) үлесі',
+'nocontribs'    => 'Осы іздеу шартына сәйкес өзгерістер табылған жоқ.',
+'ucnote'        => 'Төменде осы қатысушының соңғы <b>$2</b> күндегі, соңғы <b>$1</b> өзгерісі көрсетледі.',
+'uclinks'       => 'Соңғы $2 күндегі, соңғы $1 өзгерісін қарау.',
+'uctop'         => ' (үсті)',
+
+'sp-contributions-newest'      => 'Ең жаңасына',
+'sp-contributions-oldest'      => 'Ең ескісіне',
+'sp-contributions-newer'       => 'Жаңалау $1',
+'sp-contributions-older'       => 'Ескілеу $1',
+'sp-contributions-newbies'     => 'Тек жаңа тіркелгіден жасаған үлестерді көрсет',
+'sp-contributions-newbies-sub' => 'Жаңадан тіркелгі жасағандар үшін',
+'sp-contributions-blocklog'    => 'Бұғаттау журналы',
+'sp-contributions-search'      => 'Үлес үшін іздеу',
+'sp-contributions-username'    => 'IP жай не қатысушы аты:',
+'sp-contributions-submit'      => 'Іздеу',
+
+'sp-newimages-showfrom'        => '$1 кезінен бері — жаңа суреттерді көрсет',
+
+# What links here
+'whatlinkshere'         => 'Сілтеген беттер',
+'whatlinkshere-barrow'  => '&lt;',
+'notargettitle'         => 'Ақырғы атау жоқ',
+'notargettext'          => 'Осы әрекет орындалатын нысана бет,
+не қатысушы көрсетілмеген.',
+'linklistsub'           => '(Сілтемелер тізімі)',
+'linkshere'             => "'''[[:$1]]''' дегенге мына беттер сілтейді:",
+'nolinkshere'           => "'''[[:$1]]''' дегенге еш бет сілтемейді.",
+'nolinkshere-ns'        => "Талғанған есім аясында '''[[:$1]]''' дегенге ешқандай бет сілтемейді.",
+'isredirect'            => 'айдату беті',
+'istemplate'            => 'кіріктіру',
+'whatlinkshere-prev'    => '{{PLURAL:$1|алдыңғы|алдыңғы $1}}',
+'whatlinkshere-next'    => '{{PLURAL:$1|келесі|келесі $1}}',
+
+# Block/unblock
+'blockip'                     => 'Пайдаланушыны бұғаттау',
+'blockiptext'                 => 'Төмендегі үлгіт пайдаланушының жазу 
+рұқсатын белгілі IP жайымен не атауымен бұғаттау үшін қолданылады.
+Бұны тек бұзақылыққа кедергі істеу үшін және де
+[[{{{{ns:mediawiki}}:policy-url}}|ережелер]] бойынша атқаруыңыз жөн.
+Төменде тиісті себебін толтырып көрсетіңіз (мысалы, дәйекке бұзақылықпен
+өзгерткен беттерді келтіріп).',
+'ipaddress'                   => 'IP жай',
+'ipadressorusername'          => 'IP жай не аты',
+'ipbexpiry'                   => 'Бітетін мерзімі',
+'ipbreason'                   => 'Себебі',
+'ipbreasonotherlist'          => 'Басқа себеп',
+
+// These are examples only. They can be translated but should be adjusted via
+// [[MediaWiki:ipbreason-list]] by the local community
+// defines a block reason not part of a group
+// * defines a block reason group in the drow down menu
+// ** defines a block reason
+// To disable this drop down menu enter '-' in [[MediaWiki:ipbreason-dropdown]].
+'ipbreason-dropdown'    => '
+* Бұғаттаудың жалпы себебтері 
+** Бұзақылық: жалған мәлімет енгізу 
+** Бұзақылық: беттердегі мағлұматты жою 
+** Бұзақылық: сыртқы тораптар сілтемелерін жаудыру 
+** Бұзақылық: беттерге бөстекілік/қисынсыздық кірістріру 
+** Қоқандау/қуғындау мінезқұлық 
+** Көптеген тіркелгілерді жасап қиянаттау 
+** Қолайсыз қатысушы атауы',
+'ipbanononly'                 => 'Тек тіркелгісіз пайдаланушыларды бұғаттау',
+'ipbcreateaccount'            => 'Тіркелгі жасауын кедергілеу',
+'ipbenableautoblock'          => 'Бұл пайдаланушы соңғы қолданған IP жайы, және кейін түзету істеуге байқап қаралған әрқайсы IP жайлары өздікті бұғатталсын',
+'ipbsubmit'                   => 'Пайдаланушыны бұғаттау',
+'ipbother'                    => 'Басқа мерзім',
+'ipboptions'                  => '2 сағат:2 hours,1 күн:1 day,3 күн:3 days,1 апта:1 week,2 апта:2 weeks,1 ай:1 month,3 ай:3 months,6 ай:6 months,1 жыл:1 year,мәнгі:infinite',
+'ipbotheroption'              => 'басқа',
+'ipbotherreason'              => 'Басқа/қосымша себеп',
+'ipbhidename'                 => 'Бұғаттау журналындағы, белсенді бұғаттау тізіміндегі, қатысушы тізіміннегі аты/IP жасырылсын',
+'badipaddress'                => 'Жарамсыз IP жай',
+'blockipsuccesssub'           => 'Бұғаттау сәтті өтті',
+'blockipsuccesstext'          => '[[{{ns:special}}:Contributions/$1|$1]] деген бұғатталған.
+<br />Бұғаттарды шолып шығу үшін [[{{ns:special}}:Ipblocklist|IP бұғаттау тізімін]] қараңыз.',
+'ipb-edit-dropdown'           => 'Бұғаттау себептерін өңдеу',
+'ipb-unblock-addr'            => '$1 дегенді бұғаттамау',
+'ipb-unblock'                 => 'Қатысушы атын немесе IP жайын бұғаттамау',
+'ipb-blocklist-addr'          => '$1 үшін бар бұғаттауларды қарау',
+'ipb-blocklist'               => 'Бар бұғаттауларды қарау',
+'unblockip'                   => 'Пайдаланушыны бұғаттамау',
+'unblockiptext'               => 'Төмендегі үлгіт белгілі IP жайымен не атауымен
+бұрын бұғатталған пайдаланушының жазу рұқсатын қайтару үшін қолданылады.',
+'ipusubmit'                   => 'Осы жайды бұғаттамау',
+'unblocked'                   => '[[{{ns:user}}:$1|$1]] бұғаттауы өшірілді',
+'ipblocklist'                 => 'Бұғатталған пайдаланушы / IP- жай тізімі',
+'ipblocklist-submit'          => 'Іздеу',
+'blocklistline'               => '$1, $2 «$3» дегенді бұғаттады ($4)',
+'infiniteblock'               => 'мәнгі',
+'expiringblock'               => 'бітуі: $1',
+'anononlyblock'               => 'тек тіркелгісізді',
+'noautoblockblock'            => 'өздік бұғаттау өшіріленген',
+'createaccountblock'          => 'тіркелгі жасауы бұғатталған',
+'ipblocklistempty'            => 'Бұғаттау тізімі бос, немесерұранысқан IP жай/қатысушы аты бұғатталған жоқ.',
+'blocklink'                   => 'бұғаттау',
+'unblocklink'                 => 'бұғаттамау',
+'contribslink'                => 'үлесі',
+'autoblocker'                 => "IP жайыңызды жуықта «[[{{ns:user}}:1|$1]]» пайдаланған, сондықтан өздік түрде бұғатталған. $1 бұғаттау себебі: «$2».",
+'blocklogpage'                => 'Бұғаттау_журналы',
+'blocklogentry'               => '«[[$1]]» дегенді $2 мерзімге бұғаттады $3',
+'blocklogtext'                => 'Бұл пайдаланушыларды бұғаттау/бұғаттамау әрекеттерінің журналы. Өздік түрде
+бұғатталған IP жайлар осында тізімделгемеген. Ағымдағы белсенді бұғаттауларын
+[[{{ns:special}}:Ipblocklist|IP бұғаттау тізімінен]] қарауға болады.',
+'unblocklogentry'             => '«$1» дегеннің бұғаттауын өшірді',
+'block-log-flags-anononly'    => 'тек тіркелмегендер',
+'block-log-flags-nocreate'    => 'тіркелгі жасау өшірілген',
+'block-log-flags-noautoblock'   => 'өздікті бұғаттағыш өшірілген',
+'range_block_disabled'        => 'Ауқым бұғаттауын жасау әкімшілік мүмкіндігі өшірілген.',
+'ipb_expiry_invalid'          => 'Бітетін уақыты жарамсыз.',
+'ipb_already_blocked'         => '«$1» бұғатталған түге',
+'ip_range_invalid'            => 'IP жай ауқымы жарамсыз.',
+'proxyblocker'                => 'Прокси серверлерді бұғаттауыш',
+'ipb_cant_unblock'            => 'Қате: IP $1 бұғаттауы табылмады. Оның бұғаттауы өшірлген сияқты.',
+'proxyblockreason'            => 'IP жайыңыз ашық прокси серверге жататындықтан бұғатталған. Интернет қызметін жабдықтаушыңызбен, не техникалық медеу қызметімен қатынасыңыз, және оларға осы оте күрделі қауыпсіздік шатақ туралы ақпарат беріңіз.',
+'proxyblocksuccess'           => 'Бітті.',
+'sorbs'                       => 'DNSBL қара тізімі',
+'sorbsreason'                 => 'Сіздің IP жайыңыз осы торапта қолданылған DNSBL қара тізіміндегі ашық прокси-сервер деп табылады.',
+'sorbs_create_account_reason' => 'Сіздің IP жайыңыз осы торапта қолданылған DNSBL қара тізіміндегі ашық прокси-сервер деп табылады. Тіркелгі жасай алмайсыз.',
+
+# Developer tools
+'lockdb'              => 'Дерекқорды құлыптау',
+'unlockdb'            => 'Дерекқорды құлыптамау',
+'lockdbtext'          => 'Дерекқордын құлыпталуы барлық пайдаланушының
+бет өңдеу, баптауын қалау, бақылау тізімін, тағы басқа
+дерекқорды өзгертетін мүмкіндіктерін тоқтата тұрады.
+Осы мақсатыңызды, және жөндеуіңіз біткенде
+дерекқорды ашатыңызды растаңыз.',
+'unlockdbtext'        => 'Дерекқодын ашылуы барлық пайдаланушының бет өңдеу,
+баптауын қалау, бақылау тізімін, тағы басқа дерекқорды өзгертетін
+мүмкіндіктерін қайта ашады.
+Осы мақсатыңызды растаңыз.',
+'lockconfirm'         => 'Иә, мен дерекқорды растан құлыптаймын.',
+'unlockconfirm'       => 'Иә, мен дерекқорды растан құлыптамаймын.',
+'lockbtn'             => 'Дерекқорды құлыпта',
+'unlockbtn'           => 'Дерекқорды құлыптама',
+'locknoconfirm'       => 'Растау белгісін қоймапсыз.',
+'lockdbsuccesssub'    => 'Дерекқорды құлыптау сәтті өтті',
+'unlockdbsuccesssub'  => 'Құлыпталған дерекқор ашылды',
+'lockdbsuccesstext'   => 'Дерекқор құлыпталды.
+<br />Жөндеуіңіз біткеннен кейін [[{{ns:special}}:Unlockdb|құлыптауын өшіруге]] ұмытпаңыз.',
+'unlockdbsuccesstext' => 'Құлыпталған дерекқор сәтті ашылды.',
+'lockfilenotwritable' => 'Дерекқор құлыптау файлы жазылмайды. Дерекқорды құлыптау не ашу үшін, веб-сервер файлға жазу рұқсаты болу қажет.',
+'databasenotlocked'   => 'Дерекқор құлыпталған жоқ.',
+
+# Move page
+'movepage'                => 'Бетті жылжыту',
+'movepagetext'            => "Төмендегі үлгітті қолданып беттерді қайта атайды,
+барлық тарихын жаңа атауға жылжытады.
+Бұрынғы бет атауы жаңа атауға айдататын бет болады.
+Ескі атауына сілтейтін  сілтемелер өзгертілмейді; жылжытудан соң
+шынжырлы айдатулар бар-жоғын тексеріңіз.
+Сілтемелер бұрынғы жолдауымен былайғы өтуін тексеруіне
+сіз міндетті боласыз.
+
+Ескеріңіз, егер жылжытылатын атауда бет болса, сол ескі бетке айдату
+болғанша және тарихы болса, бет '''жылжытылмайды'''.
+Осының мағынасы: егер бетті қателік пен қайта аталса,
+бұрынғы атауына қайта атауға болады,
+бірақ бар беттің үстіне жазуға болмайды.
+
+<b>НАЗАР САЛЫҢЫЗ!</b>
+Бұл дәріпті бетке қатаң және кенет өзгеріс жасауға мүмкін;
+әрекеттің алдынан осының зардаптарын түсінгеніңізге батыл
+болыңыз.",
+'movepagetalktext'        => "Келесі себептер '''болғанша''' дейін, талқылау беті өздік түрде бірге жылжытылады:
+* Бос емес талқылау беті жаңа атауда болғанда, немесе
+* Төмендегі қабышақта белгіні аластатқанда.
+
+Осы орайда, қалауыңыз болса, бетті қолдан жылжыта не қоса аласыз.",
+'movearticle'             => 'Бетті жылжыту',
+'movenologin'             => 'Жүйеге кірмегенсіз',
+'movenologintext'         => 'Бетті жылжыту үшін тіркелген болуыңыз және
+ [[{{ns:special}}:Userlogin|кіруіңіз]] қажет.',
+'newtitle'                => 'Жаңа атауға',
+'move-watch'              => 'Бұл бетті бақылау',
+'movepagebtn'             => 'Бетті жылжыт',
+'pagemovedsub'            => 'Жылжыту сәтті аяқталды',
+'pagemovedtext'           => '«[[$1]]» беті «[[$2]]» бетіне жылжытылды.',
+'articleexists'           => 'Былай атаулы бет бар болды, не таңдаған
+атауыңыз жарамды емес.
+Басқа атау тандаңыз',
+'talkexists'              => "'''Беттің өзі сәтті жылжытылды, бірақ талқылау беті бірге жылжытылмады, оның себебі жаңа атаудың талқылау беті бар түге. Бұны қолмен қосыңыз.'''",
+'movedto'                 => 'мынаған жылжытылды:',
+'movetalk'                => 'Қатысты талқылау бетімен бірге жылжыту',
+'talkpagemoved'           => 'Қатысты талқылау беті де жылжытылды.',
+'talkpagenotmoved'        => 'Қатысты талқылау беті <strong>жылжытылмады</strong>.',
+'1movedto2'               => '«[[$1]]» бетінде айдату қалдырып «[[$2]]» бетіне жылжытты',
+'1movedto2_redir'         => '«[[$1]]» бетін «[[$2]]» айдату бетінің үстіне жылжытты',
+'movelogpage'             => 'Жылжыту журналы',
+'movelogpagetext'         => 'Төменде жылжытылған беттердің тізімі беріліп тұр.',
+'movereason'              => 'Себебі',
+'revertmove'              => 'қайтару',
+'delete_and_move'         => 'Жою және жылжыту',
+'delete_and_move_text'    => '==Жою қажет==
+
+Ақырғы «[[$1]]» бет атауы бар түге.
+Жылжытуға жол беру үшін жоямыз ба?',
+'delete_and_move_confirm' => 'Иә, осы бетті жой',
+'delete_and_move_reason'  => 'Жылжытуға жол беру үшін жойылған',
+'selfmove'                => 'Қайнар және ақырғы атауы бірдей; бет өзіне жылжытылмайды.',
+'immobile_namespace'      => 'Қайнар немесе ақырғы атауы арнайы түрінде болды; осындай есім аясы жағына және жағынан беттер жылжытылмайды.',
+
+# Export
+'export'          => 'Беттерді сыртқа беру',
+'exporttext'      => 'XML пішіміне қапталған бөлек бет не беттер бумасы
+мәтінің және өңдеу тарихын сыртқа бере аласыз. Осыны, басқа уикиге
+жүйенің [[{{ns:special}}:Import|сырттан алу бетін]] пайдаланып, алуға болады.
+
+Беттерді сыртқа беру үшін, атауларын төмендегі мәтін аумағына енгізіңіз,
+бір жолда бір атау, және тандаңыз: не ағымдық нұсқасын, барлық ескі нұсқалары мен
+және тарихы жолдары мен бірге, не дәл ағымдық нұсқасын, соңғы өңдеу туралы ақпараты мен бірге.
+
+Соңғы жағдайда сілтемені де, мысалы {{{{ns:mediawiki}}:mainpage}} беті үшін [[{{ns:special}}:Export/{{MediaWiki:mainpage}}]] қолдануға болады.',
+'exportcuronly'   => 'Толық тарихын емес, тек ағымдық нұсқасын кірістіріңіз',
+'exportnohistory' => "----
+'''Аңғартпа:''' Өнімділік әсері себептерінен, беттер толық тарихын сыртқа беруі өшірілген.",
+'export-submit'   => 'Сыртқа бер',
+'export-addcattext' => 'Мына санаттағы беттерді үстеу:',
+'export-addcat' => 'Үсте',
+
+# Namespace 8 related
+'allmessages'               => 'Жүйе хабарлары',
+'allmessagesname'           => 'Атауы',
+'allmessagesdefault'        => 'Әдепкі мәтіні',
+'allmessagescurrent'        => 'Ағымдық мәтіні',
+'allmessagestext'           => 'Мында «MediaWiki:» есім аясындағы барлық қатынаулы жүйе хабар тізімі беріліп тұр.',
+'allmessagesnotsupportedUI' => 'Your current interface language <b>$1</b> is not supported by Special:Allmessages at this site.',
+'allmessagesnotsupportedDB' => "'''wgUseDatabaseMessages''' бабы өшірілген себебінен '''{{ns:special}}:AllMessages''' сипаты сүемелденбейді.",
+'allmessagesfilter'         => 'Хабарды атауы бойынша сүзгілеу:',
+'allmessagesmodified'       => 'Тек өзгертілгенді көрсет',
+
+# Thumbnails
+'thumbnail-more'           => 'Үлкейту',
+'missingimage'             => '<b>Жоғалған сурет </b><br /><i>$1</i>',
+'filemissing'              => 'Жоғалған файл',
+'thumbnail_error'          => 'Нобай құру қатесі: $1',
+'djvu_page_error'          => 'DjVu беті мүмкінді аумақтың сыртындда',
+'djvu_no_xml'              => 'DjVu файлына XML келтіруге болмайды',
+'thumbnail_invalid_params' => 'Нобайдың баптары жарамсыз',
+'thumbnail_dest_directory' => 'Ақырғы қалта жасалмады',
+
+
+# Special:Import
+'import'                     => 'Беттерді сырттан алу',
+'importinterwiki'            => 'Уики-тасымалдап сырттан алу',
+'import-interwiki-text'      => 'Сырттан алатын уики жобасын және бет атауын тандаңыз.
+Нұсқа күн-айы және өңдеуші аттары сақталады.
+Барлық уики-тасымалдап сырттан алу әрекеттер [[{{ns:special}}:Log/import|сырттан алу журналына]] жазылып алынады.',
+'import-interwiki-history'   => 'Осы беттің барлық тарихи нұсқаларын көшіру',
+'import-interwiki-submit'    => 'Сырттан алу',
+'import-interwiki-namespace' => 'Мына есім аясына беттерді тасымалдау:',
+'importtext'                 => 'Қайнар уикиден «Special:Export» қуралын қолданып, файлды сыртқа беріңіз, дискіңізге сақтаңыз, сосын мында қотарыңыз.',
+'importstart'                => 'Беттерді сырттан алуы…',
+'import-revision-count'      => '$1 нұсқа',
+'importnopages'              => 'Сырттан алынатын беттер жоқ.',
+'importfailed'               => 'Сырттан алу сәтсіз бітті: $1',
+'importunknownsource'        => 'Cырттан алу қайнар түрі танымалсыз',
+'importcantopen'             => 'Сырттан алу файлы ашылмайды',
+'importbadinterwiki'         => 'Жарамсыз уики-аралық сілтеме',
+'importnotext'               => 'Босты, не мәтіні жоқ',
+'importsuccess'              => 'Сырттан алу сәтті аяқталды!',
+'importhistoryconflict'      => 'Тарихының егес нұсқалары бар (бұл бетті алдында сырттан алынған сияқты)',
+'importnosources'            => 'Ешқандай уики-тасымалдап сырттан алу қайнары белгіленмеген, және тарихын тікелей қотаруы өшірілген.',
+'importnofile'               => 'Сырттан алынатын файл қотарылған жоқ.',
+'importuploaderror'          => 'Сырттан алу файлдың қотаруы сәтсіз бітті; осы файл мөлшері рұқсат етілген мөлшерден асуы мүмкін.',
+
+# Import log
+'importlogpage'                    => 'Сырттан алу журналы',
+'importlogpagetext'                => 'Басқа уикилерден өңдеу тарихымен бірге беттерді әкімшілік ретінде сырттан алу.',
+'import-logentry-upload'           => 'файл қотаруымен сырттан «[[$1]]» беті алынды',
+'import-logentry-upload-detail'    => '$1 нұсқа',
+'import-logentry-interwiki'        => 'уики-тасымалданған $1',
+'import-logentry-interwiki-detail' => '$2 дегеннен $1 нұсқа',
+
+# Tooltip help for the actions
+'tooltip-pt-userpage'             => 'Жеке бетім',
+'tooltip-pt-anonuserpage'         => 'Осы IP жайдың жеке беті',
+'tooltip-pt-mytalk'               => 'Талқылау бетім',
+'tooltip-pt-anontalk'             => 'Осы IP жай түзетулерін талқылау',
+'tooltip-pt-preferences'          => 'Баптауым',
+'tooltip-pt-watchlist'            => 'Өзгерістерін бақылап тұрған беттер тізімім.',
+'tooltip-pt-mycontris'            => 'Үлестерімдің тізімі',
+'tooltip-pt-login'                => 'Кіруіңізді ұсынамыз, ол міндетті емес.',
+'tooltip-pt-anonlogin'            => 'Кіруіңізді ұсынамыз, бірақ, ол міндетті емес.',
+'tooltip-pt-logout'               => 'Шығу',
+'tooltip-ca-talk'                 => 'Мағлұмат бетті талқылау',
+'tooltip-ca-edit'                 => 'Бұл бетті өңдей аласыз. Сақтаудың алдында «Қарап шығу» түймесін нұқыңыз.',
+'tooltip-ca-addsection'           => 'Бұл талқылау бетінде жаңа тарау бастау.',
+'tooltip-ca-viewsource'           => 'Бұл бет қорғалған, бірақ, қайнарын қарауға болады.',
+'tooltip-ca-history'              => 'Бұл беттін жуықтағы нұсқалары.',
+'tooltip-ca-protect'              => 'Бұл бетті қорғау',
+'tooltip-ca-delete'               => 'Бұл бетті жою',
+'tooltip-ca-undelete'             => 'Бұл беттің жоюдың алдындағы болған түзетулерін қайтару',
+'tooltip-ca-move'                 => 'Бұл бетті жылжыту',
+'tooltip-ca-watch'                => 'Бұл бетті бақылау тізіміңізге үстеу',
+'tooltip-ca-unwatch'              => 'Бұл бетті бақылау тізіміңізден аластату',
+'tooltip-search'                  => '{{SITENAME}} жобасынан іздестіру',
+'tooltip-p-logo'                  => 'Басты бетке',
+'tooltip-n-mainpage'              => 'Басты бетке барып кетіңіз',
+'tooltip-n-portal'                => 'Жоба туралы, не істеуіңізге болатын, қайдан табуға болатын туралы',
+'tooltip-n-currentevents'         => 'Ағымдағы оқиғаларға қатысты ақпарат',
+'tooltip-n-recentchanges'         => 'Осы уикидегі жуықтағы өзгерістер тізімі.',
+'tooltip-n-randompage'            => 'Кездейсоқ бетті жүктеу',
+'tooltip-n-help'                  => 'Анықтама табу орны.',
+'tooltip-n-sitesupport'           => 'Бізге жәрдем етіңіз',
+'tooltip-t-whatlinkshere'         => 'Мында сілтеген барлық беттердің тізімі',
+'tooltip-t-recentchangeslinked'   => 'Мыннан сілтенген беттердің жуықтағы өзгерістері',
+'tooltip-feed-rss'                => 'Бұл беттің RSS арнасы',
+'tooltip-feed-atom'               => 'Бұл беттің Atom арнасы',
+'tooltip-t-contributions'         => 'Осы қатысушының үлес тізімін қарау',
+'tooltip-t-emailuser'             => 'Осы қатысушыға email жіберу',
+'tooltip-t-upload'                => 'Сурет не медиа файлдарын қотару',
+'tooltip-t-specialpages'          => 'Барлық арнайы беттер тізімі',
+'tooltip-ca-nstab-main'           => 'Мағлұмат бетін қарау',
+'tooltip-ca-nstab-user'           => 'Қатысушы бетін қарау',
+'tooltip-ca-nstab-media'          => 'Таспа бетін қарау',
+'tooltip-ca-nstab-special'        => 'Бұл арнайы бет, беттің өзі өңделінбейді.',
+'tooltip-ca-nstab-project'        => 'Жоба бетін қарау',
+'tooltip-ca-nstab-image'          => 'Сурет бетін қарау',
+'tooltip-ca-nstab-mediawiki'      => 'Жүйе хабарын қарау',
+'tooltip-ca-nstab-template'       => 'Үлгіні қарау',
+'tooltip-ca-nstab-help'           => 'Анықтыма бетін қарау',
+'tooltip-ca-nstab-category'       => 'Санат бетін қарау',
+'tooltip-minoredit'               => 'Осыны шағын түзету деп белгілеу',
+'tooltip-save'                    => 'Түзетуіңізді сақтау',
+'tooltip-preview'                 => 'Сақтаудың алдынан түзетуіңізді қарап шығыңыз!',
+'tooltip-diff'                    => 'Мәтінге қандай өзгерістерді жасағаныңызды қарау.',
+'tooltip-compareselectedversions' => 'Беттің екі нұсқасының айырмасын қарау.',
+'tooltip-watch'                   => 'Бұл бетті бақылау тізіміңізге үстеу',
+'tooltip-recreate'                => 'Бет жойылғанына қарамастан қайта жасау',
+
+# Stylesheets
+'common.css'   => '/* Мындағы CSS әмірлері барлық безендіру мәнеріндерде қолданылады */',
+'monobook.css' => '/* Мындағы CSS әмірлері «Дара кітап» безендіру мәнерін пайдаланушыларға әсер етеді */',
+
+# Scripts
+'common.js'   => '/* Мындағы JavaScript әмірлері әрқайсы бет қаралғанда барлық пайдаланушыларға жүктеледі. */
+
+/* Workaround for language variants */
+
+// Set user-defined "lang" attributes for the document element (from zh)
+var htmlE=document.documentElement;
+if (wgUserLanguage == "kk"){ variant = "kk"; }
+if (wgUserLanguage == "kk-kz"){ variant = "kk-Cyrl"; }
+if (wgUserLanguage == "kk-tr"){ variant = "kk-Latn"; }
+if (wgUserLanguage == "kk-cn"){ variant = "kk-Arab"; htmlE.setAttribute("dir","rtl"); }
+htmlE.setAttribute("lang",variant);
+htmlE.setAttribute("xml:lang",variant);
+
+// Switch language variants of messages (from zh)
+function wgULS(kz,tr,cn){
+        //
+        kk=kz||tr||cn;
+        kz=kz;
+        tr=tr;
+        cn=cn;
+        switch(wgUserLanguage){
+                case "kk": return kk;
+                case "kk-kz": return kz;
+                case "kk-tr": return tr;
+                case "kk-cn": return cn;
+                default: return "";
+        }
+}
+
+// workaround for RTL ([[bugzilla:6756]])  and for [[bugzilla:02020]] & [[bugzilla:04295]]
+if (wgUserLanguage == "kk-cn") 
+{
+  document.direction="rtl";
+  document.write(\'<link rel="stylesheet" type="text/css" href="\'+stylepath+\'/common/common_rtl.css">\');
+  document.write(\'<style type="text/css">html {direction:rtl;} body {direction:rtl; unicode-bidi:embed; lang:kk-Arab; font-family:"Arial Unicode MS",Arial,Tahoma; font-size: 75%; letter-spacing: 0.001em;} html > body div#content ol {clear: left;} ol {margin-left:2.4em; margin-right:2.4em;} ul {margin-left:1.5em; margin-right:1.5em;} h1.firstHeading {background-position: bottom right; background-repeat: no-repeat;} h3 {font-size:110%;} h4 {font-size:100%;} h5 {font-size:90%;} #catlinks {width:100%;} #userloginForm {float: right !important;}</style>\');
+
+  if (skin == "monobook"){
+     document.write(\'<link rel="stylesheet" type="text/css" href="\'+stylepath+\'/monobook/rtl.css">\');
+}
+}',
+'monobook.js' => '/* Бостекі болды; орнына мынаны [[MediaWiki:common.js]] пайдалаңыз */',
+
+# Metadata
+'nodublincore'      => 'Осы серверге «Dublin Core RDF» мета-деректері өшірілген.',
+'nocreativecommons' => 'Осы серверге «Creative Commons RDF» мета-деректері өшірілген.',
+'notacceptable'     => 'Осы уики сервері сіздің «пайдаланушы әрекеткіші» оқи алатын пішімі бар деректерді жібере алмайды.',
+
+# Attribution
+'anonymous'        => '{{SITENAME}} тіркелгісіз пайдаланушы(лар)ы',
+'siteuser'         => '{{SITENAME}} қатысушы $1',
+'lastmodifiedatby' => 'Бұл бетті $3 қатысушы соңғы өзгерткен кезі: $2, $1.', # $1 date, $2 time, $3 user
+'and'              => 'және',
+'othercontribs'    => 'Шығарма негізін $1 жазған.',
+'others'           => 'басқалар',
+'siteusers'        => '{{SITENAME}} қатысушы(лар) $1',
+'creditspage'      => 'Бетті жазғандар',
+'nocredits'        => 'Бұл бетті жазғандар туралы ақпарат жоқ.',
+
+# Spam protection
+'spamprotectiontitle'    => '«Спам»-нан қорғайтын сүзгі',
+'spamprotectiontext'     => 'Бұл беттің сақтауын «спам» сүзгісі бұғаттады. Бұның себебі сыртқы торап сілтемесінен болуы мүмкін.',
+'spamprotectionmatch'    => 'Келесі «спам» мәтіні сүзгіленген: $1',
+'subcategorycount'       => 'Бұл санатта {{PLURAL:$1|бір|$1}} төменгі санат бар.',
+'categoryarticlecount'   => 'Бұл санатта {{PLURAL:$1|бір|$1}} бет бар.',
+'category-media-count'   => 'Бұл санатта {{PLURAL:$1|бір|$1}} файл бар.',
+'listingcontinuesabbrev' => ' (жалғ.)',
+'spambot_username'       => 'MediaWiki spam cleanup',
+'spam_reverting'         => '$1 дегенге сілтемесі жоқ соңғы нұсқасына қайтарылды',
+'spam_blanking'          => '$1 дегенге сілтемесі бар барлық нұсқалар тазартылды',
+
+# Info page
+'infosubtitle'   => 'Бет туралы ақпарат',
+'numedits'       => 'Түзету саны (негізгі бет): $1',
+'numtalkedits'   => 'Түзету саны (талқылау беті): $1',
+'numwatchers'    => 'Бақылаушы саны: $1',
+'numauthors'     => 'Әртүрлі ауторлар саны (негізгі беті): $1',
+'numtalkauthors' => 'Әртүрлі аутор саны (талқылау беті): $1',
+
+# Math options
+'mw_math_png'    => 'Әрқашан PNG түрімен көрсет',
+'mw_math_simple' => 'Кәдімгі болса HTML пішімімен, басқаша PNG түрімен',
+'mw_math_html'   => 'Ықтимал болса HTML пішімімен, басқаша PNG түрімен',
+'mw_math_source' => 'TeX пішімінде қалдыру (мәтіндік шолғыштарына)',
+'mw_math_modern' => 'Осы заманның шолғыштарына ұсынылған',
+'mw_math_mathml' => 'Ықтимал болса MathML пшімімен (сынақ түрінде)',
+
+# Patrolling
+'markaspatrolleddiff'                 => 'Күзетте деп белгілеу',
+'markaspatrolledtext'                 => 'Осы бетті күзетуде деп белгілеу',
+'markedaspatrolled'                   => 'Күзетте деп белгіленді',
+'markedaspatrolledtext'               => 'Талғанған нұсқа күзетте деп белгіленді.',
+'rcpatroldisabled'                    => 'Жуықтағы өзгерістер Күзеті өшірілген',
+'rcpatroldisabledtext'                => 'Жуықтағы өзгерістер Күзеті қасиеті ағымда өшірілген.',
+'markedaspatrollederror'              => 'Күзетте деп белгіленбейді',
+'markedaspatrollederrortext'          => 'Күзетте деп белгілеу үшін нұсқасын енгізіңіз.',
+'markedaspatrollederror-noautopatrol' => 'Өзіңіздің өзгерістеріңізді күзетке қоя алмайсыз.',
+
+# Patrol log
+'patrol-log-page' => 'Күзет журналы',
+'patrol-log-line' => '$2 кезінде $1 дегенді күзетте деп белгіледі $3',
+'patrol-log-auto' => '(өздік)',
+'patrol-log-diff' => 'r$1',
+
+# Image deletion
+'deletedrevision' => 'Мына ескі нұсқасын жойды: $1.',
+
+# Browsing diffs
+'previousdiff' => '← Алдыңғымен айырмасы',
+'nextdiff'     => 'Келесімен айырмасы →',
+
+# Media information
+'mediawarning'          => "'''Назар салыңыз''': Бұл файл түрінде қаскүнемді әмірдің бар болуы ықтимал; файлды жегіп жүйеңізге зиян келтіруіңіз мүмкін.<hr />",
+'imagemaxsize'          => 'Сурет түйіндеме бетіндегі суреттің мөлшерін шектеуі:',
+'thumbsize'             => 'Нобай мөлшері:',
+'widthheight'           => '$1 × $2',
+'file-info'             => 'Файл мөлшері: $1, MIME түрі: $2',
+'file-info-size'        => '($1 × $2 пиксел, файл мөлшері: $3, MIME түрі: $4)',
+'file-nohires'          => '<small>Жоғары ажыратылымдығы жетімсіз.</small>',
+'file-svg'              => '<small>Бұл шығынсыз созылғыш векторлық суреті. Негізгі мөлшері: $1 × $2 пиксел.</small>',
+'show-big-image'        => 'Жоғары ажыратылымды',
+'show-big-image-thumb'  => '<small>Қарап шығу мөлшері: $1 × $2 пиксел</small>',
+
+'newimages'         => 'Ең жаңа файлдар қоймасы',
+'showhidebots'      => '(боттарды $1)',
+'noimages'          => 'Көретін ештеңе жоқ.',
+
+# Variants for Kazakh language
+'variantname-kk-tr' => 'Latın',
+'variantname-kk-kz' => 'Кирил',
+'variantname-kk-cn' => 'توتە',
+'variantname-kk'    => 'disable',
+
+'passwordtooshort' => 'Құпия сөзіңіз жарамсыз не тым қысқа. Ең кемінде $1 әріп және қатысушы атыңыздан басқа болуы қажет.',
+
+# Metadata
+'metadata'          => 'Мета-деректері',
+'metadata-help'     => 'Осы файлда қосымша ақпарат бар. Бәлкім, осы ақпарат файлды жасап шығару, не сандылау үшін пайдаланған сандық камера, не мәтіналғырдан алынған. Егер осы файл негізгі күйінен өзгертілген болса, кейбір ежелелері өзгертілген фотосуретке лайық болмас.',
+'metadata-expand'   => 'Егжей-тегжейін көрсет',
+'metadata-collapse' => 'Егжей-тегжейін жасыр',
+'metadata-fields'   => 'Осы хабарда тізімделген EXIF мета-дерек аумақтары,
+сурет беті көрсету кезінде мета-дерек кесте жасырылығанда кірістірледі.
+Басқасы әдепкіден жасырылады.
+* make
+* model
+* datetimeoriginal
+* exposuretime
+* fnumber
+* focallength',
+
+# EXIF tags
+'exif-imagewidth'                  => 'Ені',
+'exif-imagelength'                 => 'Биіктігі',
+'exif-bitspersample'               => 'Құраш сайын бит саны',
+'exif-compression'                 => 'Қысым сұлбасы',
+'exif-photometricinterpretation'   => 'Пиксел қиысуы',
+'exif-orientation'                 => 'Мегзеуі',
+'exif-samplesperpixel'             => 'Құраш саны',
+'exif-planarconfiguration'         => 'Дерек реттеуі',
+'exif-ycbcrsubsampling'            => 'Y құрашының C құрашына жарнақтауы',
+'exif-ycbcrpositioning'            => 'Y құрашы және C құрашы мекендеуі',
+'exif-xresolution'                 => 'Дерелей ажыратылымдығы',
+'exif-yresolution'                 => 'Тірелей ажыратылымдығы',
+'exif-resolutionunit'              => 'X және Y ажыратылымдықтарығының өлшемі',
+'exif-stripoffsets'                => 'Сурет дереректерінің жайғасуы',
+'exif-rowsperstrip'                => 'Белдік сайын жол саны',
+'exif-stripbytecounts'             => 'Қысымдалған белдік сайын байт саны',
+'exif-jpeginterchangeformat'       => 'JPEG SOI дегеннен ығысуы',
+'exif-jpeginterchangeformatlength' => 'JPEG деректерінің байт саны',
+'exif-transferfunction'            => 'Тасымалдау функциясы',
+'exif-whitepoint'                  => 'Ақ нүкте түстілігі',
+'exif-primarychromaticities'       => 'Алғы шептегі түстіліктері',
+'exif-ycbcrcoefficients'           => 'Түс аясын тасымалдау матрицалық еселіктері',
+'exif-referenceblackwhite'         => 'Қара және ақ анықтауыш қос колемдері',
+'exif-datetime'                    => 'Файлдың өзгертілген күн-айы',
+'exif-imagedescription'            => 'Сурет атауы',
+'exif-make'                        => 'Камера өндірушісі',
+'exif-model'                       => 'Камера үлгісі',
+'exif-software'                    => 'Қолданылған бағдарлама',
+'exif-artist'                      => 'Жығармашысы',
+'exif-copyright'                   => 'Жығармашылық құқықтар иесі',
+'exif-exifversion'                 => 'Exif нұсқасы',
+'exif-flashpixversion'             => 'Сүйемделінген Flashpix нұсқасы',
+'exif-colorspace'                  => 'Түс аясы',
+'exif-componentsconfiguration'     => 'Әрқайсы құраш мәні',
+'exif-compressedbitsperpixel'      => 'Сурет қысымдау тәртібі',
+'exif-pixelydimension'             => 'Суреттің жарамды ені',
+'exif-pixelxdimension'             => 'Суреттің жарамды биіктігі',
+'exif-makernote'                   => 'Өндіруші ескертпелері',
+'exif-usercomment'                 => 'Пайдаланушы мәндемелері',
+'exif-relatedsoundfile'            => 'Қатысты дыбыс файлы',
+'exif-datetimeoriginal'            => 'Жасалған кезі',
+'exif-datetimedigitized'           => 'Сандықтау кезі',
+'exif-subsectime'                  => 'Жасалған кезінің секунд бөлшектері',
+'exif-subsectimeoriginal'          => 'Түпнұсқа кезінің секунд бөлшектері',
+'exif-subsectimedigitized'         => 'Сандықтау кезінің секунд бөлшектері',
+'exif-exposuretime'                => 'Ұсталым уақыты',
+'exif-exposuretime-format'         => '$1 с ($2)',
+'exif-fnumber'                     => 'Саңылау мөлшері',
+'exif-fnumber-format'              => 'f/$1',
+'exif-exposureprogram'             => 'Ұсталым бағдарламасы',
+'exif-spectralsensitivity'         => 'Спектр бойынша сезгіштігі',
+'exif-isospeedratings'             => 'ISO жылдамдық жарнақтауы (жарық сезгіштігі)',
+'exif-oecf'                        => 'Оптоелектронды түрлету ықпалы',
+'exif-shutterspeedvalue'           => 'Жапқыш жылдамдылығы',
+'exif-aperturevalue'               => 'Саңылаулық',
+'exif-brightnessvalue'             => 'Ашықтық',
+'exif-exposurebiasvalue'           => 'Ұсталым өтемі',
+'exif-maxaperturevalue'            => 'Барынша саңылау ашуы',
+'exif-subjectdistance'             => 'Нысана қашықтығы',
+'exif-meteringmode'                => 'Өлшеу тәртібі',
+'exif-lightsource'                 => 'Жарық көзі',
+'exif-flash'                       => 'Жарқылдағыш',
+'exif-focallength'                 => 'Шоғырлау алшақтығы',
+'exif-focallength-format'          => '$1 mm',
+'exif-subjectarea'                 => 'Нысана ауқымы',
+'exif-flashenergy'                 => 'Жарқылдағыш қарқыны',
+'exif-spatialfrequencyresponse'    => 'Кеңістік-жиілік әсершілігі',
+'exif-focalplanexresolution'       => 'Х бойынша шоғырлау жайпақтықтың ажыратылымдығы',
+'exif-focalplaneyresolution'       => 'Y бойынша шоғырлау жайпақтықтың ажыратылымдығы',
+'exif-focalplaneresolutionunit'    => 'Шоғырлау жайпақтықтың ажыратылымдық өлшемі',
+'exif-subjectlocation'             => 'Нысана мекендеуі',
+'exif-exposureindex'               => 'Ұсталым айқындауы',
+'exif-sensingmethod'               => 'Сенсордің өлшеу әдісі',
+'exif-filesource'                  => 'Файл қайнары',
+'exif-scenetype'                   => 'Сахна түрі',
+'exif-cfapattern'                  => 'CFA сүзгі кейіпі',
+'exif-customrendered'              => 'Қосымша сурет өңдетуі',
+'exif-exposuremode'                => 'Ұсталым тәртібі',
+'exif-whitebalance'                => 'Ақ түсінің тендестігі',
+'exif-digitalzoomratio'            => 'Сандық ауқымдау жарнақтауы',
+'exif-focallengthin35mmfilm'       => '35 mm таспасының шоғырлау алшақтығы',
+'exif-scenecapturetype'            => 'Түсірген сахна түрі',
+'exif-gaincontrol'                 => 'Сахнаны меңгеру',
+'exif-contrast'                    => 'Қарама-қарсылық',
+'exif-saturation'                  => 'Қанықтық',
+'exif-sharpness'                   => 'Айқындық',
+'exif-devicesettingdescription'    => 'Жабдық баптау сипаттары',
+'exif-subjectdistancerange'        => 'Сахна қашықтығының көлемі',
+'exif-imageuniqueid'               => 'Суреттің бірегей нөмірі (ID)',
+'exif-gpsversionid'                => 'GPS белгішесінің нұсқасы',
+'exif-gpslatituderef'              => 'Солтүстік немесе Оңтүстік бойлығы',
+'exif-gpslatitude'                 => 'Бойлығы',
+'exif-gpslongituderef'             => 'Шығыс немесе Батыс ендігі',
+'exif-gpslongitude'                => 'Ендігі',
+'exif-gpsaltituderef'              => 'Биіктік көрсетуі',
+'exif-gpsaltitude'                 => 'Биіктік',
+'exif-gpstimestamp'                => 'GPS уақыты (атом сағаты)',
+'exif-gpssatellites'               => 'Өлшеуге пйдаланылған Жер серіктері',
+'exif-gpsstatus'                   => 'Қабылдағыш күйі',
+'exif-gpsmeasuremode'              => 'Өлшеу тәртібі',
+'exif-gpsdop'                      => 'Өлшеу дәлдігі',
+'exif-gpsspeedref'                 => 'Жылдамдылық өлшемі',
+'exif-gpsspeed'                    => 'GPS қабылдағыштың жылдамдылығы',
+'exif-gpstrackref'                 => 'Қозғалыс бағытын көрсетуі',
+'exif-gpstrack'                    => 'Қозғалыс бағыты',
+'exif-gpsimgdirectionref'          => 'Сурет бағытын көрсетуі',
+'exif-gpsimgdirection'             => 'Сурет бағыты',
+'exif-gpsmapdatum'                 => 'Пайдаланылған геодезиялық түсірме деректері',
+'exif-gpsdestlatituderef'          => 'Нысана бойлығын көрсетуі',
+'exif-gpsdestlatitude'             => 'Нысана бойлығы',
+'exif-gpsdestlongituderef'         => 'Нысана ендігін көрсетуі',
+'exif-gpsdestlongitude'            => 'Нысана ендігі',
+'exif-gpsdestbearingref'           => 'Нысана азимутын көрсетуі',
+'exif-gpsdestbearing'              => 'Нысана азимуты',
+'exif-gpsdestdistanceref'          => 'Нысана қашықтығын көрсетуі',
+'exif-gpsdestdistance'             => 'Нысана қашықтығы',
+'exif-gpsprocessingmethod'         => 'GPS өңдету әдісінің атауы',
+'exif-gpsareainformation'          => 'GPS аумағының атауы',
+'exif-gpsdatestamp'                => 'GPS күн-айы',
+'exif-gpsdifferential'             => 'GPS сараланған түзету',
+
+# EXIF attributes
+'exif-compression-1' => 'Ұлғайтылған',
+'exif-compression-6' => 'JPEG',
+
+'exif-unknowndate' => 'Белгісіз күн-айы',
+
+'exif-photometricinterpretation-2' => 'RGB',
+'exif-photometricinterpretation-6' => 'YCbCr',
+
+'exif-orientation-1' => 'Қалыпты', # 0th row: top; 0th column: left
+'exif-orientation-2' => 'Дерелей шағылысқан', # 0th row: top; 0th column: right
+'exif-orientation-3' => '180° бұрышқа айналған', # 0th row: bottom; 0th column: right
+'exif-orientation-4' => 'Тірелей шағылысқан', # 0th row: bottom; 0th column: left
+'exif-orientation-5' => 'Сағат тілшесіне қарсы 90° бұрышқа айналған және тірелей шағылысқан', # 0th row: left; 0th column: top
+'exif-orientation-6' => 'Сағат тілше бойынша 90° бұрышқа айналған', # 0th row: right; 0th column: top
+'exif-orientation-7' => 'Сағат тілше бойынша 90° бұрышқа айналған және тірелей шағылысқан', # 0th row: right; 0th column: bottom
+'exif-orientation-8' => 'Сағат тілшесіне қарсы 90° бұрышқа айналған', # 0th row: left; 0th column: bottom
+
+'exif-planarconfiguration-1' => 'талпақ пішім',
+'exif-planarconfiguration-2' => 'тайпақ пішім',
+
+'exif-xyresolution-i' => '$1 dpi',
+'exif-xyresolution-c' => '$1 dpc',
+
+'exif-colorspace-1'      => 'sRGB',
+'exif-colorspace-ffff.h' => 'FFFF.H',
+
+'exif-componentsconfiguration-0' => 'бар болмады',
+'exif-componentsconfiguration-1' => 'Y',
+'exif-componentsconfiguration-2' => 'Cb',
+'exif-componentsconfiguration-3' => 'Cr',
+'exif-componentsconfiguration-4' => 'R',
+'exif-componentsconfiguration-5' => 'G',
+'exif-componentsconfiguration-6' => 'B',
+
+'exif-exposureprogram-0' => 'Анықталмаған',
+'exif-exposureprogram-1' => 'Қолмен',
+'exif-exposureprogram-2' => 'Бағдарламалы әдіс (қалыпты)',
+'exif-exposureprogram-3' => 'Саңылау басыңқылығы',
+'exif-exposureprogram-4' => 'Ысырма басыңқылығы',
+'exif-exposureprogram-5' => 'Өнер бағдарламасы (анықтық терендігіне санасқан)',
+'exif-exposureprogram-6' => 'Қимыл бағдарламасы (жапқыш шапшандылығына санасқан)',
+'exif-exposureprogram-7' => 'Тірелей әдісі (арты шоғырлаусыз таяу түсірмелер)',
+'exif-exposureprogram-8' => 'Дерелей әдісі (арты шоғырланған дерелей түсірмелер)',
+
+'exif-subjectdistance-value' => '$1 m',
+
+'exif-meteringmode-0'   => 'Белгісіз',
+'exif-meteringmode-1'   => 'Біркелкі',
+'exif-meteringmode-2'   => 'Бұлдыр дақ',
+'exif-meteringmode-3'   => 'БірДақты',
+'exif-meteringmode-4'   => 'КөпДақты',
+'exif-meteringmode-5'   => 'Өрнекті',
+'exif-meteringmode-6'   => 'Жыртынды',
+'exif-meteringmode-255' => 'Басқа',
+
+'exif-lightsource-0'   => 'Белгісіз',
+'exif-lightsource-1'   => 'Күн жарығы',
+'exif-lightsource-2'   => 'Күнжарықты шам',
+'exif-lightsource-3'   => 'Қыздырғышты шам',
+'exif-lightsource-4'   => 'Жарқылдағыш',
+'exif-lightsource-9'   => 'Ашық күн',
+'exif-lightsource-10'  => 'Бұлынғыр күн',
+'exif-lightsource-11'  => 'Көленкелі',
+'exif-lightsource-12'  => 'Күнжарықты шам (D 5700–7100 K)',
+'exif-lightsource-13'  => 'Күнжарықты шам (N 4600–5400 K)',
+'exif-lightsource-14'  => 'Күнжарықты шам (W 3900–4500 K)',
+'exif-lightsource-15'  => 'Күнжарықты шам (WW 3200–3700 K)',
+'exif-lightsource-17'  => 'Қалыпты жарық қайнары A',
+'exif-lightsource-18'  => 'Қалыпты жарық қайнары B',
+'exif-lightsource-19'  => 'Қалыпты жарық қайнары C',
+'exif-lightsource-20'  => 'D55',
+'exif-lightsource-21'  => 'D65',
+'exif-lightsource-22'  => 'D75',
+'exif-lightsource-23'  => 'D50',
+'exif-lightsource-24'  => 'Студиялық ISO күнжарықты шам',
+'exif-lightsource-255' => 'Басқа жарық қайнары',
+
+'exif-focalplaneresolutionunit-2' => 'дюйм',
+
+'exif-sensingmethod-1' => 'Анықталмаған',
+'exif-sensingmethod-2' => '1-чипті аумақты түссезгіш',
+'exif-sensingmethod-3' => '2-чипті аумақты түссезгіш',
+'exif-sensingmethod-4' => '3-чипті аумақты түссезгіш',
+'exif-sensingmethod-5' => 'Кезекті аумақты түссезгіш',
+'exif-sensingmethod-7' => '3-сызықты түссезгіш',
+'exif-sensingmethod-8' => 'Кезекті сызықты түссезгіш',
+
+'exif-filesource-3' => 'DSC',
+
+'exif-scenetype-1' => 'Тікелей түсірілген фотосурет',
+
+'exif-customrendered-0' => 'Қалыпты өңдету',
+'exif-customrendered-1' => 'Қосымша өңдету',
+
+'exif-exposuremode-0' => 'Өздік ұсталымдау',
+'exif-exposuremode-1' => 'Қолмен ұсталымдау',
+'exif-exposuremode-2' => 'Өздік жарқылдау',
+
+'exif-whitebalance-0' => 'Ақ түсінің өздік тендестіру',
+'exif-whitebalance-1' => 'Ақ түсінің қолмен тендестіру',
+
+'exif-scenecapturetype-0' => 'Қалыпты',
+'exif-scenecapturetype-1' => 'Дерелей',
+'exif-scenecapturetype-2' => 'Тірелей',
+'exif-scenecapturetype-3' => 'Түнгі сахна',
+
+'exif-gaincontrol-0' => 'Жоқ',
+'exif-gaincontrol-1' => 'Төмен зораю',
+'exif-gaincontrol-2' => 'Жоғары зораю',
+'exif-gaincontrol-3' => 'Төмен баяулау',
+'exif-gaincontrol-4' => 'Жоғары баяулау',
+
+'exif-contrast-0' => 'Қалыпты',
+'exif-contrast-1' => 'Ұян',
+'exif-contrast-2' => 'Тұрпайы',
+
+'exif-saturation-0' => 'Қалыпты',
+'exif-saturation-1' => 'Төмен қанықты',
+'exif-saturation-2' => 'Жоғары қанықты',
+
+'exif-sharpness-0' => 'Қалыпты',
+'exif-sharpness-1' => 'Ұян',
+'exif-sharpness-2' => 'Тұрпайы',
+
+'exif-subjectdistancerange-0' => 'Белгісіз',
+'exif-subjectdistancerange-1' => 'Таяу түсірілген',
+'exif-subjectdistancerange-2' => 'Жақын түсірілген',
+'exif-subjectdistancerange-3' => 'Алыс түсірілген',
+
+# Pseudotags used for GPSLatitudeRef and GPSDestLatitudeRef
+'exif-gpslatitude-n' => 'Солтүстік бойлығы',
+'exif-gpslatitude-s' => 'Оңтүстік бойлығы',
+
+# Pseudotags used for GPSLongitudeRef and GPSDestLongitudeRef
+'exif-gpslongitude-e' => 'Шығыс ендігі',
+'exif-gpslongitude-w' => 'Батыс ендігі',
+
+'exif-gpsstatus-a' => 'Өлшеу ұласуда',
+'exif-gpsstatus-v' => 'Өлшеу өзара әрекетте',
+
+'exif-gpsmeasuremode-2' => '2-бағыттық өлшем',
+'exif-gpsmeasuremode-3' => '3-бағыттық өлшем',
+
+# Pseudotags used for GPSSpeedRef and GPSDestDistanceRef
+'exif-gpsspeed-k' => 'km/h',
+'exif-gpsspeed-m' => 'mil/h',
+'exif-gpsspeed-n' => 'Ж. түйін',
+
+# Pseudotags used for GPSTrackRef, GPSImgDirectionRef and GPSDestBearingRef
+'exif-gpsdirection-t' => 'Шын бағыт',
+'exif-gpsdirection-m' => 'Магнитты бағыт',
+
+# External editor support
+'edit-externally'      => 'Бұл файлды сыртқы құрал/бағдарлама арқылы өңдеу',
+'edit-externally-help' => 'Көбірек ақпарат үшін [http://meta.wikimedia.org/wiki/Help:External_editors орнату нұсқауларын] қараңыз.',
+
+# 'all' in various places, this might be different for inflected languages
+'recentchangesall' => 'барлығын',
+'imagelistall'     => 'барлығы',
+'watchlistall1'    => 'барлығы',
+'watchlistall2'    => 'барлық',
+'namespacesall'    => 'барлығы',
+
+# E-mail address confirmation
+'confirmemail'            => 'Е-пошта жайын куәландыру',
+'confirmemail_noemail'    => '[[{{ns:special}}:Preferences|Қатысушы баптауыңызда]] жарамды е-пошта жайын енгізбепсіз.',
+'confirmemail_text'       => 'Бұл уикиде е-пошта қасиеттерін пайдаланудың алдынан е-пошта жайыңызды
+куәландыру қажет. Өзіңіздің жайыңызға куәландыру хатын жіберу үшін төмендегі түймені нұқыңыз.
+Хаттың ішінде арнайы коды бар сілтеме кірістірледі;	е-пошта жайыңыздың жарамдығын куәландыру үшін
+сілтемені шолғыштың мекен-жай жолағына енгізіп ашыңыз.',
+'confirmemail_pending'    => '<div class="error">
+Растау белгілемеңіз хатпен жіберіліпті түге; егер тіркелгіңізді 
+жуықта істесеңіз, жаңа белгіле сұранысын жіберу алдынан 
+хат келуін біршама минөт күте тұрыңыз.
+</div>',
+'confirmemail_send'       => 'Куәландыру кодын жіберу',
+'confirmemail_sent'       => 'Куәландыру хаты жіберілді.',
+'confirmemail_oncreate'   => 'Растау белгілемесі е-пошта адресіңізге жіберілді.
+Бұл белгілеме кіру үдірісіне керегі жоқ, бірақ ол е-пошта негізіндегі
+уики қасиеттерді ендіру үшін жетістіруіңіз қажет.',
+'confirmemail_sendfailed' => 'Куәландыру хаты жіберілмеді. Енгізілген жайды жарамсыз әрітеріне тексеріп шығыңыз.
+
+Пошта жібергіштің қайтарғаны: $1',
+'confirmemail_invalid'    => 'Куәландыру коды жарамсыз. Кодтың мерзімі біткен шығар.',
+'confirmemail_needlogin'  => 'Е-пошта жайыңызды куәландыру үшін $1 қажет.',
+'confirmemail_success'    => 'Е-пошта жайыңыз куәландырылды. Енді Уикиге кіріп жұмысқа кірісуге болады',
+'confirmemail_loggedin'   => 'Е-пошта жайыңыз куәландырылды.',
+'confirmemail_error'      => 'Куәландыруыңызды сақтағанда белгісіз қате болды.',
+'confirmemail_subject'    => '{{SITENAME}} торабынан е-пошта жайыңызды куәландыру хаты',
+'confirmemail_body'       => "Кейбіреу, мына $1 IP жайынан, өзіңіз болуы мүмкін,
+{{SITENAME}} жобасындағы Е-пошта жайын қолданып «$2» тіркелгі жасапты.
+
+Осы тіркелгі растан сіздікі екенін куәландыру үшін, және {{SITENAME}} жобасының
+е-пошта қасиеттерін белсендіру үшін, мына сілтемені шолғышпен ашыңыз:
+
+$3
+
+Бұл сіздікі '''емес''' болса, сілтемеге ермеңіз. Куәландыру кодының
+мерзімі $4 кезінде бітеді.",
+
+# Inputbox extension, may be useful in other contexts as well
+'tryexact'       => 'Дәл сәйкесін сынап көріңіз',
+'searchfulltext' => 'Толық мәтінімен іздеу',
+'createarticle'  => 'Бетті бастау',
+
+# Scary transclusion
+'scarytranscludedisabled' => '[Уики-ара кірегу өшірілген]',
+'scarytranscludefailed'   => '[$1 бетіне үлгі өңдету сәтсіз бітті; кешіріңіз]',
+'scarytranscludetoolong'  => '[URL жайы тым ұзын; кешіріңіз]',
+
+# Trackbacks
+'trackbackbox'      => '<div id="mw_trackbacks">
+Бұл беттің аңыстаулары:<br />
+$1
+</div>',
+'trackbackremove'   => '([$1 Жойылды])',
+'trackbacklink'     => 'Аңыстау',
+'trackbackdeleteok' => 'Аңыстау жоюы сәтті өтті.',
+
+# Delete conflict
+'deletedwhileediting' => 'Назар салыңыз:Сіз бұл беттің өңдеуін бастағанда, осы бет жойылды!',
+'confirmrecreate'     => "Сіз бұл беттің өндеуін бастағанда [[{{ns:user}}:$1|$1]] ([[{{ns:user_talk}}:$1|талқылауы]]) осы бетті жойды, көрсеткен себебі:
+: ''$2''
+Осы бетті шынынан қайта жасауын растаңыз.",
+'recreate'            => 'Қайта жасау',
+
+'unit-pixel' => ' px',
+
+# HTML dump
+'redirectingto' => '[[$1]] бетіне айдатуда…',
+
+# action=purge
+'confirm_purge'        => 'Қосалқы қалтадағы осы бетін тазалаймыз ба?<br /><br />$1',
+'confirm_purge_button' => 'Жарайды',
+
+'youhavenewmessagesmulti' => '$1 дегенге жаңа хабарлар түсті',
+
+'searchcontaining' => "Мына сөзі бар бет арасынан іздеу: ''$1''.",
+'searchnamed'      => "Мына атаулы бет арасынан іздеу: ''$1''.",
+'articletitles'    => "Атаулары мынадан басталған беттер: ''$1''",
+'hideresults'      => 'Нәтижелерді жасыр',
+
+# DISPLAYTITLE
+'displaytitle' => '(Бұл беттің сілтемесі: [[$1]])',
+
+'loginlanguagelabel' => 'Тіл: $1',
+
+# Multipage image navigation
+'imgmultipageprev'   => '← алдыңғы бетке',
+'imgmultipagenext'   => 'келесі бетке →',
+'imgmultigo'         => 'Өту!',
+'imgmultigotopre'    => 'Мына бетке өту',
+'imgmultiparseerror' => 'Сурет файлы қираған немесе дұрыс емес, сондықтан {{SITENAME}} бет тізімін көрсете алмайды.',
+
+# Table pager
+'ascending_abbrev'         => 'өсу',
+'descending_abbrev'        => 'кему',
+'table_pager_next'         => 'Келесі бетке',
+'table_pager_prev'         => 'Алдыңғы бетке',
+'table_pager_first'        => 'Алғашқы бетке',
+'table_pager_last'         => 'Соңғы бетке',
+'table_pager_limit'        => 'Бет сайын $1 дана көрсет',
+'table_pager_limit_submit' => 'Өту',
+'table_pager_empty'        => 'Еш нәтиже жоқ',
+
+# Auto-summaries
+'autosumm-blank'   => 'Беттің барлық мағлұматын аластатты',
+'autosumm-replace' => "Бетті «$1» дегенмен алмастырды",
+'autoredircomment' => '[[$1]] дегенге айдады', # This should be changed to the new naming convention, but existed beforehand
+'autosumm-new'     => 'Жаңа бетте: $1',
+
+# Size units
+'size-bytes'     => '$1 B',
+'size-kilobytes' => '$1 KB',
+'size-megabytes' => '$1 MB',
+'size-gigabytes' => '$1 GB',
+
+# Live preview
+'livepreview-loading' => 'Жүктеуде…',
+'livepreview-ready'   => 'Жүктеуде… Дайын!',
+'livepreview-failed'  => "Тура қарап шығу амалы болмады!\nКәдімгі қарап шығу әдісін байқап көріңіз.",
+'livepreview-error'   => "Мынаған қосылу амалы болмады: $1 «$2»\nКәдімгі қарап шығу әдісін байқап көріңіз.",
+
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesKk_tr.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesKk_tr.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesKk_tr.php	(revision 1280)
@@ -0,0 +1,2577 @@
+<?php
+/**
+ * Kazakh (Qazaqşa)
+ *
+ * @addtogroup Language
+ *
+ */
+
+$fallback = 'kk-kz';
+
+$separatorTransformTable = array(
+	',' => "\xc2\xa0",
+	'.' => ',',
+);
+
+$extraUserToggles = array(
+	'nolangconversion'
+);
+
+$fallback8bitEncoding = 'windows-1254';
+
+$linkPrefixExtension = true;
+
+$namespaceNames = array(
+	NS_MEDIA            => 'Taspa',
+	NS_SPECIAL          => 'Arnaýı',
+	NS_MAIN	            => '',
+	NS_TALK	            => 'Talqılaw',
+	NS_USER             => 'Qatıswşı',
+	NS_USER_TALK        => 'Qatıswşı_talqılawı',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK     => '$1_talqılawı',
+	NS_IMAGE            => 'Swret',
+	NS_IMAGE_TALK       => 'Swret_talqılawı',
+	NS_MEDIAWIKI        => 'MedïaWïkï',
+	NS_MEDIAWIKI_TALK   => 'MedïaWïkï_talqılawı',
+	NS_TEMPLATE         => 'Ülgi',
+	NS_TEMPLATE_TALK    => 'Ülgi_talqılawı',
+	NS_HELP             => 'Anıqtama',
+	NS_HELP_TALK        => 'Anıqtama_talqılawı',
+	NS_CATEGORY         => 'Sanat',
+	NS_CATEGORY_TALK    => 'Sanat_talqılawı'
+);
+
+$namespaceAliases = array(
+	# Aliases to kk-kz namespaces
+	'Таспа'               => NS_MEDIA,
+	'Арнайы'              => NS_SPECIAL,
+	'Талқылау'            => NS_TALK,
+	'Қатысушы'            => NS_USER,
+	'Қатысушы_талқылауы'  => NS_USER_TALK,
+	'$1_талқылауы'        => NS_PROJECT_TALK,
+	'Сурет'               => NS_IMAGE,
+	'Сурет_талқылауы'     => NS_IMAGE_TALK,
+	'МедиаУики'           => NS_MEDIAWIKI,
+	'МедиаУики_талқылауы' => NS_MEDIAWIKI_TALK,
+	'Үлгі'                => NS_TEMPLATE,
+	'Үлгі_талқылауы'      => NS_TEMPLATE_TALK,
+	'Анықтама'            => NS_HELP,
+	'Анықтама_талқылауы'  => NS_HELP_TALK,
+	'Санат'               => NS_CATEGORY,
+	'Санат_талқылауы'     => NS_CATEGORY_TALK,
+
+	# Aliases to kk-cn namespaces
+	'تاسپا'              => NS_MEDIA,
+	'ارنايى'              => NS_SPECIAL,
+	'تالقىلاۋ'            => NS_TALK,
+	'قاتىسۋشى'          => NS_USER,
+	'قاتىسۋشى_تالقىلاۋى'=> NS_USER_TALK,
+	'$1_تالقىلاۋى'        => NS_PROJECT_TALK,
+	'سۋرەت'              => NS_IMAGE,
+	'سۋرەت_تالقىلاۋى'    => NS_IMAGE_TALK,
+	'مەدياۋيكي'           => NS_MEDIAWIKI,
+	'مەدياۋيكي_تالقىلاۋى' => NS_MEDIAWIKI_TALK,
+	'ٷلگٸ'              => NS_TEMPLATE,
+	'ٷلگٸ_تالقىلاۋى'    => NS_TEMPLATE_TALK,
+	'ٴۇلگٴى'              => NS_TEMPLATE,
+	'ٴۇلگٴى_تالقىلاۋى'    => NS_TEMPLATE_TALK,
+	'انىقتاما'            => NS_HELP,
+	'انىقتاما_تالقىلاۋى'  => NS_HELP_TALK,
+	'سانات'              => NS_CATEGORY,
+	'سانات_تالقىلاۋى'    => NS_CATEGORY_TALK,
+);
+
+$skinNames = array(
+	'standard'    => 'Dağdılı',
+	'nostalgia'   => 'Añsaw',
+	'cologneblue' => 'Köln zeñgirligi',
+	'davinci'     => 'Da Vïnçï',
+	'mono'        => 'Dara',
+	'monobook'    => 'Dara kitap',
+	'myskin'      => 'Öz mänerim',
+	'chick'       => 'Balapan',
+	'simple'      => 'Kädimgi'
+);
+
+$datePreferences = array(
+	'default',
+	'mdy',
+	'dmy',
+	'ymd',
+	'ISO 8601',
+);
+
+$defaultDateFormat = 'ymd';
+
+$datePreferenceMigrationMap = array(
+	'default',
+	'mdy',
+	'dmy',
+	'ymd'
+);
+
+$dateFormats = array(
+	'mdy time' => 'H:i',
+	'mdy date' => 'xg j, Y',
+	'mdy both' => 'H:i, xg j, Y',
+
+	'dmy time' => 'H:i',
+	'dmy date' => 'j F, Y',
+	'dmy both' => 'H:i, j F, Y',
+
+	'ymd time' => 'H:i',
+	'ymd date' => 'Y "j." xg j',
+	'ymd both' => 'H:i, Y "j." xg j',
+
+	'ISO 8601 time' => 'xnH:xni:xns',
+	'ISO 8601 date' => 'xnY-xnm-xnd',
+	'ISO 8601 both' => 'xnY-xnm-xnd"T"xnH:xni:xns',
+);
+
+/**
+ * Magic words
+ * Customisable syntax for wikitext and elsewhere
+ *
+ * Note to translators:
+ *   Please include the English words as synonyms.  This allows people
+ *   from other wikis to contribute more easily.
+ *   Please don't remove deprecated values, them should be keeped for backward compatibility.
+ *
+ * This array can be modified at runtime with the LanguageGetMagic hook
+ */
+$magicWords = array(
+#   ID                                 CASE  SYNONYMS
+	'redirect'               => array( 0,    '#AÝDAW', '#REDIRECT' ),
+	'notoc'                  => array( 0,    '__MAZMUNSIZ__', '__MSIZ__', '__NOTOC__' ),
+	'nogallery'              => array( 0,    '__QOÝMASIZ__', '__QSIZ__', '__NOGALLERY__' ),
+	'forcetoc'               => array( 0,    '__MAZMUNDATQIZW__', '__MQIZW__', '__FORCETOC__' ),
+	'toc'                    => array( 0,    '__MAZMUNI__', '__MZMN__', '__TOC__' ),
+	'noeditsection'          => array( 0,    '__BÖLİMÖNDETKİZBEW__', '__NOEDITSECTION__' ),
+	'start'                  => array( 0,    '__BASTAW__', '__START__' ),
+	'currentmonth'           => array( 1,    'AĞIMDAĞIAÝ', 'CURRENTMONTH' ),
+	'currentmonthname'       => array( 1,    'AĞIMDAĞIAÝATAWI', 'CURRENTMONTHNAME' ),
+	'currentmonthnamegen'    => array( 1,    'AĞIMDAĞIAÝİLİKATAWI', 'CURRENTMONTHNAMEGEN' ),
+	'currentmonthabbrev'     => array( 1,    'AĞIMDAĞIAÝJÏIR', 'AĞIMDAĞIAÝQISQA', 'CURRENTMONTHABBREV' ),
+	'currentday'             => array( 1,    'AĞIMDAĞIKÜN', 'CURRENTDAY' ),
+	'currentday2'            => array( 1,    'AĞIMDAĞIKÜN2', 'CURRENTDAY2' ),
+	'currentdayname'         => array( 1,    'AĞIMDAĞIKÜNATAWI', 'CURRENTDAYNAME' ),
+	'currentyear'            => array( 1,    'AĞIMDAĞIJIL', 'CURRENTYEAR' ),
+	'currenttime'            => array( 1,    'AĞIMDAĞIWAQIT', 'CURRENTTIME' ),
+	'currenthour'            => array( 1,    'AĞIMDAĞISAĞAT', 'CURRENTHOUR' ),
+	'localmonth'             => array( 1,    'JERGİLİKTİAÝ', 'LOCALMONTH' ),
+	'localmonthname'         => array( 1,    'JERGİLİKTİAÝATAWI', 'LOCALMONTHNAME' ),
+	'localmonthnamegen'      => array( 1,    'JERGİLİKTİAÝİLİKATAWI', 'LOCALMONTHNAMEGEN' ),
+	'localmonthabbrev'       => array( 1,    'JERGİLİKTİAÝJÏIR', 'JERGİLİKTİAÝQISQA', 'LOCALMONTHABBREV' ),
+	'localday'               => array( 1,    'JERGİLİKTİKÜN', 'LOCALDAY' ),
+	'localday2'              => array( 1,    'JERGİLİKTİKÜN2', 'LOCALDAY2'  ),
+	'localdayname'           => array( 1,    'JERGİLİKTİKÜNATAWI', 'LOCALDAYNAME' ),
+	'localyear'              => array( 1,    'JERGİLİKTİJIL', 'LOCALYEAR' ),
+	'localtime'              => array( 1,    'JERGİLİKTİWAQIT', 'LOCALTIME' ),
+	'localhour'              => array( 1,    'JERGİLİKTİSAĞAT', 'LOCALHOUR' ),
+	'numberofpages'          => array( 1,    'BETSANI', 'NUMBEROFPAGES' ),
+	'numberofarticles'       => array( 1,    'MAQALASANI', 'NUMBEROFARTICLES' ),
+	'numberoffiles'          => array( 1,    'FAÝLSANI', 'NUMBEROFFILES' ),
+	'numberofusers'          => array( 1,    'QATISWŞISANI', 'NUMBEROFUSERS' ),
+	'numberofedits'          => array( 1,    'TÜZETWSANI', 'NUMBEROFEDITS' ),
+	'pagename'               => array( 1,    'BETATAWI', 'PAGENAME' ),
+	'pagenamee'              => array( 1,    'BETATAWI2', 'PAGENAMEE' ),
+	'namespace'              => array( 1,    'ESİMAYASI', 'NAMESPACE' ),
+	'namespacee'             => array( 1,    'ESİMAYASI2', 'NAMESPACEE' ),
+	'talkspace'              => array( 1,    'TALQILAWAYASI', 'TALKSPACE' ),
+	'talkspacee'             => array( 1,    'TALQILAWAYASI2', 'TALKSPACEE' ),
+	'subjectspace'           => array( 1,    'TAQIRIPBETİ', 'MAQALABETİ', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+	'subjectspacee'          => array( 1,    'TAQIRIPBETİ2', 'MAQALABETİ2', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+	'fullpagename'           => array( 1,    'TOLIQBETATAWI', 'FULLPAGENAME' ),
+	'fullpagenamee'          => array( 1,    'TOLIQBETATAWI2', 'FULLPAGENAMEE' ),
+	'subpagename'            => array( 1,    'ASTIÑĞIBETATAWI', 'SUBPAGENAME' ),
+	'subpagenamee'           => array( 1,    'ASTIÑĞIBETATAWI2', 'SUBPAGENAMEE' ),
+	'basepagename'           => array( 1,    'NEGİZGİBETATAWI', 'BASEPAGENAME' ),
+	'basepagenamee'          => array( 1,    'NEGİZGİBETATAWI2', 'BASEPAGENAMEE' ),
+	'talkpagename'           => array( 1,    'TALQILAWBETATAWI', 'TALKPAGENAME' ),
+	'talkpagenamee'          => array( 1,    'TALQILAWBETATAWI2', 'TALKPAGENAMEE' ),
+	'subjectpagename'        => array( 1,    'TAQIRIPBETATAWI', 'MAQALABETATAWI', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+	'subjectpagenamee'       => array( 1,    'TAQIRIPBETATAWI2', 'MAQALABETATAWI2', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
+	'msg'                    => array( 0,    'XBR:', 'MSG:' ),
+	'subst'                  => array( 0,    'BÄDEL:', 'SUBST:' ),
+	'msgnw'                  => array( 0,    'WÏKÏSİZXBR:', 'MSGNW:' ),
+	'img_thumbnail'          => array( 1,    'nobaý', 'thumbnail', 'thumb' ),
+	'img_manualthumb'        => array( 1,    'nobaý=$1', 'thumbnail=$1', 'thumb=$1'),
+	'img_right'              => array( 1,    'oñğa', 'oñ', 'right' ),
+	'img_left'               => array( 1,    'solğa', 'sol', 'left' ),
+	'img_none'               => array( 1,    'eşqandaý', 'joq', 'none' ),
+	'img_width'              => array( 1,    '$1 px', '$1px' ),
+	'img_center'             => array( 1,    'ortağa', 'orta', 'center', 'centre' ),
+	'img_framed'             => array( 1,    'sürmeli', 'framed', 'enframed', 'frame' ),
+	'img_page'               => array( 1,    'bet=$1', 'bet $1', 'page=$1', 'page $1' ),
+	'img_baseline'           => array( 1,    'negizjol', 'baseline' ),
+	'img_sub'                => array( 1,    'astılığı', 'ast', 'sub'),
+	'img_super'              => array( 1,    'üstiligi', 'üst', 'sup', 'super', 'sup' ),
+	'img_top'                => array( 1,    'üstine', 'top' ),
+	'img_text-top'           => array( 1,    'mätin-üstinde', 'text-top' ),
+	'img_middle'             => array( 1,    'aralığına', 'middle' ),
+	'img_bottom'             => array( 1,    'astına', 'bottom' ),
+	'img_text-bottom'        => array( 1,    'mätin-astında', 'text-bottom' ),
+	'int'                    => array( 0,    'İŞKİ:', 'INT:' ),
+	'sitename'               => array( 1,    'TORAPATAWI', 'SITENAME' ),
+	'ns'                     => array( 0,    'EA:', 'NS:' ),
+	'localurl'               => array( 0,    'JERGİLİKTİJAÝ:', 'LOCALURL:' ),
+	'localurle'              => array( 0,    'JERGİLİKTİJAÝ2:', 'LOCALURLE:' ),
+	'server'                 => array( 0,    'SERVER', 'SERVER' ),
+	'servername'             => array( 0,    'SERVERATAWI', 'SERVERNAME' ),
+	'scriptpath'             => array( 0,    'ÄMİRJOLI', 'SCRIPTPATH' ),
+	'grammar'                => array( 0,    'SEPTİK:', 'GRAMMAR:' ),
+	'notitleconvert'         => array( 0,    '__ATAWALMASTIRĞIZBAW__', '__AABAW__', '__NOTITLECONVERT__', '__NOTC__' ),
+	'nocontentconvert'       => array( 0,    '__MAĞLUMATALMASTIRĞIZBAW__', '__MABAW__', '__NOCONTENTCONVERT__', '__NOCC__' ),
+	'currentweek'            => array( 1,    'AĞIMDAĞIAPTA', 'CURRENTWEEK' ),
+	'currentdow'             => array( 1,    'AĞIMDAĞIAPTAKÜNİ', 'CURRENTDOW' ),
+	'localweek'              => array( 1,    'JERGİLİKTİAPTA', 'LOCALWEEK' ),
+	'localdow'               => array( 1,    'JERGİLİKTİAPTAKÜNİ', 'LOCALDOW' ),
+	'revisionid'             => array( 1,    'NUSQANÖMİRİ', 'REVISIONID' ),
+	'revisionday'            => array( 1,    'NUSQAKÜNİ' , 'REVISIONDAY' ),
+	'revisionday2'           => array( 1,    'NUSQAKÜNİ2', 'REVISIONDAY2' ),
+	'revisionmonth'          => array( 1,    'NUSQAAÝI', 'REVISIONMONTH' ),
+	'revisionyear'           => array( 1,    'NUSQAJILI', 'REVISIONYEAR' ),
+	'revisiontimestamp'      => array( 1,    'NUSQAWAQITTÜÝİNDEMESİ', 'REVISIONTIMESTAMP' ),
+	'plural'                 => array( 0,    'KÖPŞE:', 'PLURAL:' ),
+	'fullurl'                => array( 0,    'TOLIQJAÝ:', 'FULLURL:' ),
+	'fullurle'               => array( 0,    'TOLIQJAÝ2:', 'FULLURLE:' ),
+	'lcfirst'                => array( 0,    'KÄ1:', 'LCFIRST:' ),
+	'ucfirst'                => array( 0,    'BÄ1:', 'UCFIRST:' ),
+	'lc'                     => array( 0,    'KÄ:', 'LC:' ),
+	'uc'                     => array( 0,    'BÄ:', 'UC:' ),
+	'raw'                    => array( 0,    'QAM:', 'RAW:' ),
+	'displaytitle'           => array( 1,    'KÖRSETİLETİNATAW', 'DISPLAYTITLE' ),
+	'rawsuffix'              => array( 1,    'Q', 'R' ),
+	'newsectionlink'         => array( 1,    '__JAÑABÖLİMSİLTEMESİ__', '__NEWSECTIONLINK__' ),
+	'currentversion'         => array( 1,    'BAĞDARLAMANUSQASI', 'CURRENTVERSION' ),
+	'urlencode'              => array( 0,    'JAÝDIMUQAMDAW:', 'URLENCODE:' ),
+	'anchorencode'           => array( 0,    'JÄKİRDİMUQAMDAW', 'ANCHORENCODE' ),
+	'currenttimestamp'       => array( 1,    'AĞIMDAĞIWAQITTÜÝİNDEMESİ', 'AĞIMDAĞIWAQITTÜÝİN', 'CURRENTTIMESTAMP' ),
+	'localtimestamp'         => array( 1,    'JERGİLİKTİWAQITTÜÝİNDEMESİ', 'JERGİLİKTİWAQITTÜÝİN', 'LOCALTIMESTAMP' ),
+	'directionmark'          => array( 1,    'BAĞITBELGİSİ', 'DIRECTIONMARK', 'DIRMARK' ),
+	'language'               => array( 0,    '#TİL:', '#LANGUAGE:' ),
+	'contentlanguage'        => array( 1,    'MAĞLUMATTİLİ', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+	'pagesinnamespace'       => array( 1,    'ESİMAYABETSANI:', 'EABETSANI:', 'AYABETSANI:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+	'numberofadmins'         => array( 1,    'ÄKİMŞİSANI', 'NUMBEROFADMINS' ),
+	'formatnum'              => array( 0,    'SANPİŞİMİ', 'FORMATNUM' ),
+	'padleft'                => array( 0,    'SOLIĞIS', 'PADLEFT' ),
+	'padright'               => array( 0,    'OÑIĞIS', 'PADRIGHT' ),
+	'special'                => array( 0,    'arnaýı', 'special',  ),
+	'defaultsort'            => array( 1,    'ÄDEPKİSURIPTAW:', 'ÄDEPKİSURIP:', 'DEFAULTSORT:' ),
+);
+
+$specialPageAliases = array(
+        'DoubleRedirects'           => array( 'Şınjırlı_aýdatwlar' ),
+        'BrokenRedirects'           => array( 'Jaramsız_aýdatwlar' ),
+        'Disambiguations'           => array( 'Aýrıqtı_better' ),
+        'Userlogin'                 => array( 'Qatıswşı_kirwi' ),
+        'Userlogout'                => array( 'Qatıswşı_şığwı' ),
+        'Preferences'               => array( 'Baptaw' ),
+        'Watchlist'                 => array( 'Baqılaw_tizimi' ),
+        'Recentchanges'             => array( 'Jwıqtağı_özgerister' ),
+        'Upload'                    => array( 'Qotarw' ),
+        'Imagelist'                 => array( 'Swret_tizimi' ),
+        'Newimages'                 => array( 'Jaña_swretter' ),
+        'Listusers'                 => array( 'Qatıswşılar' ),
+        'Statistics'                => array( 'Sanaq' ),
+        'Randompage'                => array( 'Kezdeýsoq_bet', 'Kezdeýsoq' ),
+        'Lonelypages'               => array( 'Sayaq_better' ),
+        'Uncategorizedpages'        => array( 'Sanatsız_better' ),
+        'Uncategorizedcategories'   => array( 'Sanatsız_sanattar' ),
+        'Uncategorizedimages'       => array( 'Sanatsız_swretter' ),
+        'Unusedcategories'          => array( 'Paýdalanılmağan_sanattar' ),
+        'Unusedimages'              => array( 'Paýdalanılmağan_swretter' ),
+        'Wantedpages'               => array( 'Toltırılmağan_better' ),
+        'Wantedcategories'          => array( 'Toltırılmağan_sanattar' ),
+        'Mostlinked'                => array( 'Eñ_köp_siltengen_better' ),
+        'Mostlinkedcategories'      => array( 'Eñ_köp_siltengen_sanattar' ),
+        'Mostcategories'            => array( 'Eñ_köp_sanattar_barı' ),
+        'Mostimages'                => array( 'Eñ_köp_swretter_barı' ),
+        'Mostrevisions'             => array( 'Eñ_köp_nusqalar_barı' ),
+        'Fewestrevisions'           => array( 'Eñ_az_tüzetilgen ' ),
+        'Shortpages'                => array( 'Qısqa_better' ),
+        'Longpages'                 => array( 'Ülken_better' ),
+        'Newpages'                  => array( 'Jaña_better' ),
+        'Ancientpages'              => array( 'Eski_better' ),
+        'Deadendpages'              => array( 'Tuýıq_better' ),
+        'Protectedpages'            => array( 'Qorğalğan_better' ),
+        'Allpages'                  => array( 'Barlıq_better' ),
+        'Prefixindex'               => array( 'Bastawış_tizimi' ) ,
+        'Ipblocklist'               => array( 'Buğattalğandar' ),
+        'Specialpages'              => array( 'Arnaýı_better' ),
+        'Contributions'             => array( 'Ülesi' ),
+        'Emailuser'                 => array( 'Xat_jiberw' ),
+        'Whatlinkshere'             => array( 'Mında_siltegender' ),
+        'Recentchangeslinked'       => array( 'Siltengenderdiñ_özgeristeri' ),
+        'Movepage'                  => array( 'Betti_jıljıtw' ),
+        'Blockme'                   => array( 'Özdik_buğattaw' ),
+        'Booksources'               => array( 'Kitap_qaýnarları' ),
+        'Categories'                => array( 'Sanattar' ),
+        'Export'                    => array( 'Sırtqa_berw' ),
+        'Version'                   => array( 'Nusqası' ),
+        'Allmessages'               => array( 'Barlıq_xabarlar' ),
+        'Log'                       => array( 'Jwrnaldar', 'Jwrnal' ),
+        'Blockip'                   => array( 'Jaýdı_buğattaw' ),
+        'Undelete'                  => array( 'Joýılğandı_qaýtarw' ),
+        'Import'                    => array( 'Sırttan_alw' ),
+        'Lockdb'                    => array( 'Derekqordı_qulıptaw' ),
+        'Unlockdb'                  => array( 'Derekqordı_qulıptamaw' ),
+        'Userrights'                => array( 'Qatıswşı_quqıqtarı' ),
+        'MIMEsearch'                => array( 'MIME_türimen_izdew' ),
+        'Unwatchedpages'            => array( 'Baqılanılmağan_better' ),
+        'Listredirects'             => array( 'Aýdatw_tizimi' ),
+        'Revisiondelete'            => array( 'Nusqanı_joyw' ),
+        'Unusedtemplates'           => array( 'Paýdalanılmağan_ülgiler' ),
+        'Randomredirect'            => array( 'Kedeýsoq_aýdatw' ),
+        'Mypage'                    => array( 'Jeke_betim' ),
+        'Mytalk'                    => array( 'Talqılawım' ),
+        'Mycontributions'           => array( 'Ülesim' ),
+        'Listadmins'                => array( 'Äkimşiler'),
+        'Popularpages'              => array( 'Äýgili_better' ),
+        'Search'                    => array( 'İzdew' ),
+        'Resetpass'                 => array( 'Qupïya_sözdi_qaýtarw' ),
+        'Withoutinterwiki'          => array( 'Wïkï-aralıqsızdar' ),
+);
+
+#-------------------------------------------------------------------
+# Default messages
+#-------------------------------------------------------------------
+
+$messages = array(
+# User preference toggles
+'tog-underline'               => 'Siltemeni astınan sız:',
+'tog-highlightbroken'         => 'Joqtalğan siltemelerdi <a href="" class="new">bılaý</a> pişimde (basqaşa: bılaý <a href="" class="internal">?</a> sïyaqtı).',
+'tog-justify'                 => 'Ejelerdi eni boýınşa twralaw',
+'tog-hideminor'               => 'Jwıqtağı özgeristerde şağın tüzetwdi jasır',
+'tog-extendwatchlist'         => 'Baqılaw tizimdi ulğaýt (barlıq jaramdı özgeristerdi körset)',
+'tog-usenewrc'                => 'Keñeýtilgen Jwıqtağı özgerister (JavaScript)',
+'tog-numberheadings'          => 'Bölim taqırıptarın özdik türde nomirle',
+'tog-showtoolbar'             => 'Öñdew qwraldar jolağın körset (JavaScript)',
+'tog-editondblclick'          => 'Qos nuqımdap öñdew (JavaScript)',
+'tog-editsection'             => 'Bölimderdi [öñdew] siltemesimen öñdewin endir',
+'tog-editsectiononrightclick' => 'Bölim atawın oñ jaq nuqwmen<br />öñdewin endir (JavaScript)',
+'tog-showtoc'                 => 'Mazmunın körset (3-ten artıq bölimi barılarğa)',
+'tog-rememberpassword'        => 'Kirgenimdi bul komp′ywterde umıtpa',
+'tog-editwidth'               => 'Öñdew awmağı tolıq enimen',
+'tog-watchcreations'          => 'Men bastağan betterdi baqılaw tizimime qos',
+'tog-watchdefault'            => 'Men öñdegen betterdi baqılaw tizimime qos',
+'tog-watchmoves'              => 'Men jıljıtqan betterdi baqılaw tizimime qos',
+'tog-watchdeletion'           => 'Men joýğan betterdi baqılaw tizimime qos',
+'tog-minordefault'            => 'Ädepkiden barlıq tüzetwlerdi şağın dep belgilew',
+'tog-previewontop'            => 'Qarap şığw awmağı öñdew awmağı aldında',
+'tog-previewonfirst'          => 'Birinşi öñdegende qarap şığw',
+'tog-nocache'                 => 'Bet qosalqı qaltasın öşir',
+'tog-enotifwatchlistpages'    => 'Baqılanğan bet özgergende mağan xat jiber',
+'tog-enotifusertalkpages'     => 'Talqılawım özgergende mağan xat jiber',
+'tog-enotifminoredits'        => 'Şağın tüzetw twralı da mağan xat jiber',
+'tog-enotifrevealaddr'        => 'E-poşta jaýımdı eskertw xatta aşıq körset',
+'tog-shownumberswatching'     => 'Baqılap turğan qatıswşılardıñ sanın körset',
+'tog-fancysig'                => 'Qam qoltañba (özdik siltemesiz;)',
+'tog-externaleditor'          => 'Sırtqı öñdewişti ädepkiden qoldan',
+'tog-externaldiff'            => 'Sırtqı aýırmağıştı ädepkiden qoldan',
+'tog-showjumplinks'           => '«Ötip ketw» qatınaw siltemelerin endir',
+'tog-uselivepreview'          => 'Twra qarap şığwdı qoldanw (JavaScript) (Sınaq türinde)',
+'tog-forceeditsummary'        => 'Öñdew sïpattaması bos qalğanda mağan eskert',
+'tog-watchlisthideown'        => 'Tüzetwimdi baqılaw tizimnen jasır',
+'tog-watchlisthidebots'       => 'Bot tüzetwin baqılaw tizimnen jasır',
+'tog-watchlisthideminor'      => 'Şağın tüzetwlerdi baqılaw tiziminde körsetpew',
+'tog-nolangconversion'        => 'Til türin awdarmaw',
+'tog-ccmeonemails'            => 'Basqa qatıswşığa jibergen xatımnıñ köşirmesin mağan da jiber',
+'tog-diffonly'                => 'Aýırma astında bet mağlumatın körsetpe',
+
+'underline-always'  => 'Ärqaşan',
+'underline-never'   => 'Eşqaşan',
+'underline-default' => 'Şolğış boýınşa',
+
+'skinpreview' => '(Qarap şığw)',
+
+# Dates
+'sunday'        => 'Jeksenbi',
+'monday'        => 'Düýsenbi',
+'tuesday'       => 'Seýsenbi',
+'wednesday'     => 'Särsenbi',
+'thursday'      => 'Beýsenbi',
+'friday'        => 'Juma',
+'saturday'      => 'Senbi',
+'sun'           => 'Jek',
+'mon'           => 'Düý',
+'tue'           => 'Beý',
+'wed'           => 'Sär',
+'thu'           => 'Beý',
+'fri'           => 'Jum',
+'sat'           => 'Sen',
+'january'       => 'qañtar',
+'february'      => 'aqpan',
+'march'         => 'nawrız',
+'april'         => 'cäwir',
+'may_long'      => 'mamır',
+'june'          => 'mawsım',
+'july'          => 'şilde',
+'august'        => 'tamız',
+'september'     => 'qırküýek',
+'october'       => 'qazan',
+'november'      => 'qaraşa',
+'december'      => 'jeltoqsan',
+'january-gen'   => 'qantardıñ',
+'february-gen'  => 'aqpannıñ',
+'march-gen'     => 'nawrızdıñ',
+'april-gen'     => 'säwirdiñ',
+'may-gen'       => 'mamırdıñ',
+'june-gen'      => 'mawsımnıñ',
+'july-gen'      => 'şildeniñ',
+'august-gen'    => 'tamızdıñ',
+'september-gen' => 'qırküýektiñ',
+'october-gen'   => 'qazannıñ',
+'november-gen'  => 'qaraşanıñ',
+'december-gen'  => 'jeltoqsannıñ',
+'jan'           => 'qan',
+'feb'           => 'aqp',
+'mar'           => 'naw',
+'apr'           => 'cäw',
+'may'           => 'mam',
+'jun'           => 'maw',
+'jul'           => 'şil',
+'aug'           => 'tam',
+'sep'           => 'qır',
+'oct'           => 'qaz',
+'nov'           => 'qar',
+'dec'           => 'jel',
+
+# Bits of text used by many pages
+'categories'            => 'Barlıq sanat tizimi',
+'pagecategories'        => '{{PLURAL:$1|Sanat|Sanattar}}',
+'category_header'       => '«$1» sanatındağı better',
+'subcategories'         => 'Tömengi sanattar',
+'category-media-header' => '«$1» sanatındağı taspalar',
+
+'linkprefix'        => '/^(.*?)([a-zäçéğıïñöşüýа-яёәіңғүұқөһA-ZÄÇÉĞİÏÑÖŞÜÝА-ЯЁӘІҢҒҮҰҚӨҺʺʹ«„]+)$/sDu',
+'mainpagetext'      => "<big>'''MedïaWïkï bağdarlaması sätti ornatıldı.'''</big>",
+'mainpagedocfooter' => 'Wïkï bağdarlamasın paýdalanw aqparatı üşin [http://meta.wikimedia.org/wiki/Help:Contents Paýdalanwşı nusqawlarımen] tanısıñız.
+
+== Bastaw ==
+
+* [http://www.mediawiki.org/wiki/Help:Configuration_settings Baptaw qalawları tizimi]
+* [http://www.mediawiki.org/wiki/Help:FAQ MedïaWïkï JQS]
+* [http://mail.wikimedia.org/mailman/listinfo/mediawiki-announce MedïaWïkï xat taratw tizimi]',
+
+'article'        => 'Mağlumat beti',
+'newwindow'      => '(jaña terezede aşıladı)',
+'cancel'         => 'Boldırmaw',
+'qbfind'         => 'Tabw',
+'qbbrowse'       => 'Şolw',
+'qbedit'         => 'Öñdew',
+'qbpageoptions'  => 'Osı bet',
+'qbpageinfo'     => 'Mätin aralığı',
+'qbmyoptions'    => 'Betterim',
+'qbspecialpages' => 'Arnaýı better',
+'moredotdotdot'  => 'Köbirek…',
+'mypage'         => 'Jeke betim',
+'mytalk'         => 'Talqılawım',
+'anontalk'       => 'IP talqılawı',
+'navigation'     => 'Bağıttaw',
+
+# Metadata in edit box
+'metadata_help' => 'Meta-derekter:',
+
+'errorpagetitle'    => 'Qate',
+'returnto'          => '$1 degenge oralw.',
+'tagline'           => '{{GRAMMAR:ablative|{{SITENAME}}}}',
+'search'            => 'İzdew',
+'searchbutton'      => 'İzdew',
+'go'                => 'Ötw',
+'searcharticle'     => 'Ötw',
+'history'           => 'Bet tarïxı',
+'history_short'     => 'Tarïxı',
+'updatedmarker'     => 'soñğı kiristen beri jañartılğan',
+'info_short'        => 'Aqparat',
+'printableversion'  => 'Basıp şığarwğa',
+'permalink'         => 'Turaqtı silteme',
+'print'             => 'Basıp şığarw',
+'edit'              => 'Öñdew',
+'editthispage'      => 'Betti öñdew',
+'delete'            => 'Joyw',
+'deletethispage'    => 'Betti joyw',
+'undelete_short'    => '{{PLURAL:$1|Bir|$1}} tüzetwdi qaýtarw',
+'protect'           => 'Qorğaw',
+'protect_change'    => 'qorğawdı özgertw',
+'protectthispage'   => 'Betti qorğaw',
+'unprotect'         => 'Qorğamaw',
+'unprotectthispage' => 'Betti qorğamaw',
+'newpage'           => 'Jaña bet',
+'talkpage'          => 'Betti talqılaw',
+'talkpagelinktext'  => 'Talqılawı',
+'specialpage'       => 'Arnaýı bet',
+'personaltools'     => 'Jeke quraldar',
+'postcomment'       => 'Mändeme jiberw',
+'articlepage'       => 'Mağlumat betin qaraw',
+'talk'              => 'Talqılaw',
+'views'             => 'Körinis',
+'toolbox'           => 'Quraldar',
+'userpage'          => 'Qatıswşınıñ betin qaraw',
+'projectpage'       => 'Joba betin qaraw',
+'imagepage'         => 'Swret betin qaraw',
+'mediawikipage'     => 'Xabar betin qaraw',
+'templatepage'      => 'Ülgi betin qaraw',
+'viewhelppage'      => 'Anıqtama betin qaraw',
+'categorypage'      => 'Sanat betin qaraw',
+'viewtalkpage'      => 'Talqılaw betin qaraw',
+'otherlanguages'    => 'Basqa tilderde',
+'redirectedfrom'    => '($1 betinen aýdatılğan)',
+'redirectpagesub'   => 'Aýdatw beti',
+'lastmodifiedat'    => 'Bul bettiñ özgertilgen soñğı kezi: $2, $1.', # $1 date, $2 time
+'viewcount'         => 'Bul bet {{plural:$1|bir|$1}} ret qaralğan.',
+'protectedpage'     => 'Qorğawlı bet',
+'jumpto'            => 'Mınağan ötip ketw:',
+'jumptonavigation'  => 'bağıttaw',
+'jumptosearch'      => 'izdew',
+
+# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
+'about'             => 'Biz twralı',
+'aboutsite'         => '{{SITENAME}} twralı',
+'aboutpage'         => '{{ns:project}}:Biz_twralı',
+'bugreports'        => 'Qate eseptemeleri',
+'bugreportspage'    => '{{ns:project}}:Qate_eseptemeleri',
+'copyright'         => 'Mağlumat $1 qujatı boýınşa qatınawlı.',
+'copyrightpagename' => '{{SITENAME}} awtorlıq quqıqtarı',
+'copyrightpage'     => '{{ns:project}}:Awtorlıq quqıqtar',
+'currentevents'     => 'Ağımdağı oqïğalar',
+'currentevents-url' => 'Ağımdağı_oqïğalar',
+'disclaimers'       => 'Jawapkerşilikten bas tartw',
+'disclaimerpage'    => '{{ns:project}}:Jawapkerşilikten_bas_tartw',
+'edithelp'          => 'Öndew anıqtaması',
+'edithelppage'      => '{{ns:help}}:Öñdew',
+'faq'               => 'JQS',
+'faqpage'           => '{{ns:project}}:JQS',
+'help'              => 'Anıqtama',
+'helppage'          => '{{ns:help}}:Mazmunı',
+'mainpage'          => 'Bastı bet',
+'portal'            => 'Qawım portalı',
+'portal-url'        => '{{ns:project}}:Qawım_portalı',
+'privacy'           => 'Jeke qupïyasın saqtaw',
+'privacypage'       => '{{ns:project}}:Jeke_qupïyasın_saqtaw',
+'sitesupport'       => 'Demewşilik',
+'sitesupport-url'   => '{{ns:project}}:Järdem',
+
+'badaccess'        => 'Ruqsat qatesi',
+'badaccess-group0' => 'Suranısqan äreketiñizdi jegwiñizge ruqsat etilmeýdi.',
+'badaccess-group1' => 'Suranısqan äreketiñiz $1 tobınıñ qatıswşılarına şekteledi.',
+'badaccess-group2' => 'Suranısqan äreketiñiz $1 toptarı biriniñ qatwsışılarına şekteledi.',
+'badaccess-groups' => 'Suranısqan äreketiñiz $1 toptarı biriniñ qatwsışılarına şekteledi.',
+
+'versionrequired'     => 'MediaWiki $1 nusqası qajet',
+'versionrequiredtext' => 'Osı betti qoldanw üşin MediaWiki $1 nusqası qajet. [[{{ns:special}}:Version|Jüýe nusqası betin]] qarañız.',
+
+'ok'                  => 'Jaraýdı',
+'pagetitle'           => '$1 — {{SITENAME}}',
+'retrievedfrom'       => '«$1» degennen alınğan',
+'youhavenewmessages'  => 'Sizde $1 bar ($2).',
+'newmessageslink'     => 'jaña xabarlar',
+'newmessagesdifflink' => 'soñğı özgerisine',
+'editsection'         => 'öñdew',
+'editold'             => 'öñdew',
+'editsectionhint'     => 'Bölimdi öñdew: $1',
+'toc'                 => 'Mazmunı',
+'showtoc'             => 'körset',
+'hidetoc'             => 'jasır',
+'thisisdeleted'       => 'Qaraýmız ba, ne qaýtaramız ba?: $1',
+'viewdeleted'         => 'Qaraýmız ba?: $1',
+'restorelink'         => 'joýılğan {{PLURAL:$1|bir|$1}} tüzetw',
+'feedlinks'           => 'Arna:',
+'feed-invalid'        => 'Jaramsız jazılım arna türi.',
+'feed-atom'           => 'Atom',
+'feed-rss'            => 'RSS',
+
+# Short words for each namespace, by default used in the 'article' tab in monobook
+'nstab-main'      => 'Mağlumat',
+'nstab-user'      => 'Jeke beti',
+'nstab-media'     => 'Taspa beti',
+'nstab-special'   => 'Arnaýı',
+'nstab-project'   => 'Joba beti',
+'nstab-image'     => 'Faýl',
+'nstab-mediawiki' => 'Jüýe xabarı',
+'nstab-template'  => 'Ülgi',
+'nstab-help'      => 'Anıqtama',
+'nstab-category'  => 'Sanat',
+
+# Main script and global functions
+'nosuchaction'      => 'Mundaý äreket joq',
+'nosuchactiontext'  => 'Osı URL jaýımen engizilgen äreketti
+osı wïkï joramaldap bilmedi.',
+'nosuchspecialpage' => 'Bul arnaýı bet emes',
+'nospecialpagetext' => 'Siz suranısqan arnaýı bet jaramsız. Barlıq jaramdı arnaýı betterdi [[{{ns:special}}:Specialpages|arnaýı better tiziminde]] taba alasız.',
+
+# General errors
+'error'                => 'Qate',
+'databaseerror'        => 'Derekqordıñ qatesi',
+'dberrortext'          => 'Derekqorğa suranıs jasalğanda sïntaksïs qatesi kezdesti.
+Bul bağdarlamanıñ qatesin körsetw mümkin.
+Derekqorğa soñğı bolğan suranıs:
+<blockquote><tt>$1</tt></blockquote>
+mına fwnkcïyasınan «<tt>$2</tt>».
+MySQL qaýtarğan qatesi «<tt>$3: $4</tt>».',
+'dberrortextcl'        => 'Derekqorğa suranıs jasalğanda sïntaksïs qatesi kezdesti.
+Derekqorğa soñğı bolğan suranıs:
+«$1»
+mına fwnkcïyasınan: «$2».
+MySQL qaýtarğan qatesi «$3: $4»',
+'noconnect'            => 'Ğafw etiñiz! Bul wïkïde keýbir texnïkalıq qïınşılıqtar kezdesti, sondıqtan derekqor serverine qatınasw almaýdı. <br />
+$1',
+'nodb'                 => '$1 derekqorı talğanbadı',
+'cachederror'          => 'Tömende suranğan bettiñ qosalqı qaltadağı köşirmesi, osı bet jañartılmağan bolwı mümkin.',
+'laggedslavemode'      => 'Nazar salıñız: Bette jwıqtağı jañalawlar bolmawı mümkin.',
+'readonly'             => 'Derekqorı qulıptalğan',
+'enterlockreason'      => 'Qulıptaw sebebin engiziñiz, qaý waqıtqa deýin
+qulıptalğanın qosa',
+'readonlytext'         => 'Ağımda derekqor jaña jazba jäne tağı basqa özgerister jasawdan qulıptalınğan. Bul derekqordı jöndetw bağdarlamaların orındaw üşin bolwı mümkin, bunı bitirgennen soñ qalipti iske qaýtarıladı.
+
+Qulıptağan äkimşi bunı bılaý tüsindiredi: $1',
+'missingarticle'       => 'İzdestirilgen «$1» atawlı bet mätini derekqorda tabılmadı.
+
+Bul dağdıda eskirgen aýırma siltemesine nemese joýılğan bet tarïxınıñ siltemesine
+ergennen bolwı mümkin.
+
+Eger bul boljam durıs sebep bolmasa, bağdarlamamızdağı qatege tap bolwıñız mümkin.
+Bul twralı naqtı URL jaýın körsetip äkimşige esepteme jiberiñiz.',
+'readonly_lag'         => 'Jetek derekqor serverler bastawışpen qadamlanğanda osı derekqor özdik türinde qulıptalınğan',
+'internalerror'        => 'İşki qate',
+'filecopyerror'        => '«$1» faýlı «$2» faýlına köşirilmedi.',
+'filerenameerror'      => '«$1» faýl atı «$2» atına özgertilmedi.',
+'filedeleteerror'      => '«$1» faýlı joýılmaýdı.',
+'filenotfound'         => '«$1» faýlı tabılmadı.',
+'unexpected'           => 'Kütilmegen mağına: «$1» = «$2».',
+'formerror'            => 'Qate: jiberw ülgiti emes',
+'badarticleerror'      => 'Osındaý äreket mına bette atqarılmaýdı.',
+'cannotdelete'         => 'Aýtılmış bet ne swret joýılmaýdı. (Bunı basqa birew joýğan şığar.)',
+'badtitle'             => 'Jaramsız ataw',
+'badtitletext'         => 'Suranısqan bet atawı jaramsız, bos, tilara siltemesi ne wïkï-ara atawı mültik bolğan. Atawlarda süemeldemegen birqatar äripter bolwı mümkin.',
+'perfdisabled'         => 'Ğafw etiñiz! Osı qasïet, derekqordıñ jıldamılığına äser etip, eşkimge wïkïdi paýdalanwğa bermegesin, waqıtşa öşirilgen.',
+'perfdisabledsub'      => 'Mında $1 betiniñ saqtalğan köşirmesi:', # obsolete?
+'perfcached'           => 'Kelesi derek qosalqı qaltasınan alınğan, sondıqtan tolıqtaý jañalanmağan bolwı mümkin.',
+'perfcachedts'         => 'Kelesi derek qosalqı qaltasınan alınğan, soñğı jañalanlğan kezi: $1.',
+'querypage-no-updates' => 'Bul bettiñ jañartılwı ağımda öşirilgen. Derekteri qazir özgertilmeýdi.',
+'wrong_wfQuery_params' => 'wfQuery() fwnkcïyasında jaramsız baptar<br />
+Fwnkcïya: $1<br />
+Suranıs: $2',
+'viewsource'           => 'Qaýnarın qaraw',
+'viewsourcefor'        => '$1 degen üşin',
+'protectedpagetext'    => 'Bul bet öñdew boldırmaw üşin qulıptalınğan.',
+'viewsourcetext'       => 'Bul bettiñ qaýnarın qarawıñızğa jäne köşirip alwñızğa boladı:',
+'protectedinterface'   => 'Bul bet bağdarlamanıñ tildesw mätinin jetistiredi, sondıqtan qïyanat keltirmew üşin özgertwi qulıptalğan.',
+'editinginterface'     => "'''Nazar salıñız:''' Bağdarlamağa tildesw mätinin jetistiretin MediaWiki betin öñdep jatırsız. Bul bettiñ özgertwi barlıq paýdalanwşılar tildeswine äser etedi.",
+'sqlhidden'            => '(SQL suranısı jasırıldı)',
+'cascadeprotected'     => 'Bul bet öñdewden qorğalğan, sebebi: ol mına «bawlı» qorğawı endirilgen {{PLURAL:$1|betke|betterge}} kiriktirilgen:',
+
+# Login and logout pages
+'logouttitle'                => 'Qatıswşı şığwı',
+'logouttext'                 => '<strong>Endi jüýeden şıqtıñız.</strong><br />
+Bul komp′ywterden äli de jüýege kirmesten {{SITENAME}} jobasın
+şolwıñız mümkin, nemese basqa paýdalanwşınıñ jüýege kirwi mümkin.
+Keýbir betterde äli de jüýege kirgeniñizdeý körinwi mümkindigin
+eskertemiz; bul şolğıştıñ qosalqı qaltasın bosatw arqılı şeşiledi.',
+'welcomecreation'            => '== Qoş keldiñiz, $1! ==
+
+Tirkelgiñiz jasaldı. {{SITENAME}} baptawıñızdı qalawıñızben özgertwdi umıtpañız.',
+'loginpagetitle'             => 'Qatıswşı kirwi',
+'yourname'                   => 'Qatıswşı atıñız',
+'yourpassword'               => 'Qupïya söziñiz',
+'yourpasswordagain'          => 'Qupïya sözdi qaýtalap engiziñiz',
+'remembermypassword'         => 'Meniñ kirgenimdi bul komp′ywterde umıtpa',
+'yourdomainname'             => 'Jeli üýşigiñiz',
+'externaldberror'            => 'Osında sırtqı teñdestirw derekqorında qate boldı, nemese sırtqı tirkelgiñizdi jañalawğa ruqsat joq.',
+'loginproblem'               => '<b>Kirwiñiz kezinde osında qïındıqqa tap boldıq.</b><br />Tağı da qaýtalap qarañız.',
+'alreadyloggedin'            => '<strong>$1 degen qatıswşı, kiripsiz tüge!</strong><br />',
+'login'                      => 'Kirw',
+'loginprompt'                => '{{SITENAME}} torabına kirw üşin «cookies» qasïetin endirwiñiz qajet.',
+'userlogin'                  => 'Kirw / Tirkelgi jasaw',
+'logout'                     => 'Şığw',
+'userlogout'                 => 'Şığw',
+'notloggedin'                => 'Kirmegensiz',
+'nologin'                    => 'Tirkelgiñiz joq pa? $1.',
+'nologinlink'                => 'Jasañız',
+'createaccount'              => 'Tirkelgi jasa',
+'gotaccount'                 => 'Tirkelgiñiz bar ma?  $1.',
+'gotaccountlink'             => 'Kiriñiz',
+'createaccountmail'          => 'e-poştamen',
+'badretype'                  => 'Engizgen qupïya sözderiñiz bir birine säýkes emes.',
+'userexists'                 => 'Engizgen qatıswşı atıñızdı birew paýdalanıp jatır. Basqa ataw tandañız.',
+'youremail'                  => 'E-poşta jaýıñız *:',
+'username'                   => 'Qatıswşı atıñız:',
+'uid'                        => 'Qatıswşı teñdestirwiñiz:',
+'yourrealname'               => 'Şın atıñız *:',
+'yourlanguage'               => 'Tiliñiz:',
+'yourvariant'                => 'Türi',
+'yournick'                   => 'Laqap atıñız:',
+'badsig'                     => 'Qam qoltañbañız jaramsız; HTML belgişelerin tekseriñiz.',
+'email'                      => 'E-poştañız',
+'prefs-help-email-enotif'    => 'Eger sonı baptasañız, osı e-poşta jaýı sizge eskertw xat jiberwge qoldanıladı.',
+'prefs-help-realname'        => '* Şın atıñız (mindetti emes): engizseñiz, şığarmañızdıñ awtorlığın belgilewi üşin qoldanıladı.',
+'loginerror'                 => 'Kirw qatesi',
+'prefs-help-email'           => '* E-poştañız (mindetti emes): «Qatıswşı» nemese «qatıswşı talqılaw» betiñizder arqılı basqalarğa baýlanısw mümkindik beredi. Öziñizdiñ kim ekeniñizdi bildirtpeýdi.',
+'nocookiesnew'               => 'Qatıswşı tirkelgisi jasaldı, tek äli kirmegensiz. {{SITENAME}} jobasına qatıswşı kirw üşin «cookies» qasïeti qajet. Şolğışıñızda «cookies» qasïeti öşirilgen. Sonı endiriñiz de jaña qatıswşı atıñızdı jäne qupïya söziñizdi engizip kiriñiz.',
+'nocookieslogin'             => 'Qatıswşı kirw üşin {{SITENAME}} jobası «cookies» qasïetin qoldanadı. Şolğışıñızda «cookies» qasïeti öşirilgen. Sonı endiriñiz de qaýtalap kiriñiz.',
+'noname'                     => 'Qatıswşı atın durıs engizbediñiz.',
+'loginsuccesstitle'          => 'Kirwiñiz sätti ötti',
+'loginsuccess'               => "'''Siz endi {{SITENAME}} jobasına «$1» retinde kirip otırsız.'''",
+'nosuchuser'                 => 'Mında «$1» atawlı qatıswşı joq. Emleñizdi tekseriñiz, nemese jaña tirkelgi jasañız.',
+'nosuchusershort'            => 'Mında «$1» degen qatıswşı atawı joq. Emleñizdi tekseriñiz.',
+'nouserspecified'            => 'Qatıswşı atın engiziwiñiz qajet.',
+'wrongpassword'              => 'Engizgen qupïya söz jaramsız. Qaýtalap köriñiz.',
+'wrongpasswordempty'         => 'Qupïya söz bostı boptı. Qaýtalap köriñiz.',
+'mailmypassword'             => 'Qupïya sözimdi xatpen jiber',
+'passwordremindertitle'      => 'Qupïya söz twralı {{SITENAME}} jobasınıñ eskertwi',
+'passwordremindertext'       => 'Keýbirew (IP jaýı: $1, bälkim, öziñiz bolarsız)
+{{SITENAME}} üşin bizden jaña qupïya sözin jiberwin suranısqan ($4).
+«$2» qatıswşınıñ qupïya sözi «$3» boldı endi.
+Qazir kirwiñiz jäne qupïya söziñizdi awıstrwıñız qajet.
+
+Eger basqa birew bul suranıstı jasasa, nemese qupïya söziñizdi umıtsañız da,
+jäne bunı özgertkiñiz kelmese de, osı xabarlamağa añğarmawıñızğa da boladı,
+eski qupïya söziñizdi äriğaraý qoldanıp.',
+'noemail'                    => 'Mında «$1» qatıswşınıñ e-poştası joq.',
+'passwordsent'               => 'Jaña qupïya söz «$1» üşin
+tirkelgen e-poşta jaýına jiberildi.
+Qabıldağannan keýin kirgende sonı engiziñiz.',
+'blocked-mailpassword'       => 'IP jaýıñızdan öñdew buğattalğan, sondıqtan
+qïyanatşılıqtan saqtanw üşin qupïya söz jiberw qızmetiniñ äreketi ruqsat etilmeýdi.',
+'eauthentsent'               => 'Kwälandırw xatı atalğan e-poşta jaýına jiberildi.
+Basqa e-poşta xatın jiberwdiñ aldınan, tirkelgi şınınan sizdiki ekenin
+kwälandırw üşin xattağı nusqawlarğa eriñiz.',
+'throttled-mailpassword'     => 'Soñğı $1 sağatta qupïya söz eskertw xatı jiberildi tüge.
+Qïyanatşılıqqa kedergi bolw üşin, $1 sağat saýın tek bir ğana qupïya söz eskertw
+xatı jiberiledi.',
+'mailerror'                  => 'Xat jiberw qatesi: $1',
+'acct_creation_throttle_hit' => 'Ğafw etiñiz, siz $1 tirkelgi jasapsız tüge. Onan artıq isteý almaýsız.',
+'emailauthenticated'         => 'E-poşta jaýıñız kwälandırılğan kezi: $1.',
+'emailnotauthenticated'      => 'E-poşta jaýıñız äli kwälandırğan joq.
+Tömendegi qasïettter üşin eşqandaý xat jiberilmeýdi.',
+'noemailprefs'               => 'Osı qasïetter istewi üşin e-poşta jaýıñızdı engiziñiz.',
+'emailconfirmlink'           => 'E-poşta jaýıñızdı kwälandırıñız',
+'invalidemailaddress'        => 'Osı e-poşta jaýda jaramsız pişim bolğan, qabıl etilmeýdi.
+Durıs pişimdelgen jaýdı engiziñiz, ne awmaqtı bos qaldırıñız.',
+'accountcreated'             => 'Tirkelgi jasaldı',
+'accountcreatedtext'         => '$1 üşin qatıswşı tirkelgisi jasaldı.',
+
+# Password reset dialog
+'resetpass'               => 'Tirkelginiñ qupïya sözin burınğı qalıpına keltirw',
+'resetpass_announce'      => 'Xatpen jiberilgen waqıtşa belgilememen kiripsiz. Tirkelwdi bitirw üşin jaña qupïya söziñizdi mında engiziñiz:',
+'resetpass_header'        => 'Qupïya sözdi burınğı qalıpına keltirw',
+'resetpass_submit'        => 'Qupïya sözdi qalañız da kiriñiz',
+'resetpass_success'       => 'Qupïya söziñiz sätti özgertildi! Endi kiriñiz…',
+'resetpass_bad_temporary' => 'Waqıtşa qupïya söz jaramsız. Mümkin qupïya söziñizdi özgertken bolarsız nemese jaña waqıtşa qupïya söz surağan bolarsız.',
+'resetpass_forbidden'     => 'Bul wïkïde qupïya sözder özgertilmeýdi',
+'resetpass_missing'       => 'Ülgit derekteri joq.',
+
+# Edit page toolbar
+'bold_sample'     => 'Jwan mätin',
+'bold_tip'        => 'Jwan mätin',
+'italic_sample'   => 'Qïğaş mätin',
+'italic_tip'      => 'Qïğaş mätin',
+'link_sample'     => 'Silteme atawı',
+'link_tip'        => 'İşki silteme',
+'extlink_sample'  => 'http://www.example.com silteme atawı',
+'extlink_tip'     => 'Sırtqı silteme (aldınan http:// engizwin umıtpañız)',
+'headline_sample' => 'Taqırıp mätini',
+'headline_tip'    => '1-şi deñgeýli taqırıp',
+'math_sample'     => 'Formwlanı mında engiziñiz',
+'math_tip'        => 'Matematïka formwlası (LaTeX)',
+'nowiki_sample'   => 'Pişimdelmeýtin mätindi osında engiziñiz',
+'nowiki_tip'      => 'Wïkï pişimin elemew',
+'image_sample'    => 'Example.jpg',
+'image_tip'       => 'Kiriktirilgen swret',
+'media_sample'    => 'Example.ogg',
+'media_tip'       => 'Taspa faýlınıñ siltemesi',
+'sig_tip'         => 'Qoltañbañız jäne waqıt belgisi',
+'hr_tip'          => 'Dereleý sızıq (ünemdi qoldanıñız)',
+
+# Edit pages
+'summary'                   => 'Sïpattaması',
+'subject'                   => 'Taqırıbı/bası',
+'minoredit'                 => 'Bul şağın tüzetw',
+'watchthis'                 => 'Betti baqılaw',
+'savearticle'               => 'Betti saqta!',
+'preview'                   => 'Qarap şığw',
+'showpreview'               => 'Qarap şığw',
+'showlivepreview'           => 'Twra qarap şığw',
+'showdiff'                  => 'Özgeristerdi körset',
+'anoneditwarning'           => "'''Nazar salıñız:''' Siz jüýege kirmegensiz. IP jaýıñız bul bettiñ öñdew tarïxında jazılıp alınadı.",
+'missingsummary'            => "'''Eskertw:''' Tüzetw sïpattamasın engizbepsiz. «Saqtaw» tüýmesin tağı bassañız, tüzetwiñiz mändemesiz saqtaladı.",
+'missingcommenttext'        => 'Tömende mändemeñizdi engiziñiz.',
+'missingcommentheader'      => "'''Eskertw:''' Bul mändemege taqırıp/basjol jetistirmepsiz. Eger tağı da Saqtaw tüýmesin nuqısañız, tüzetwiñiz solsız saqtaladı.",
+'summary-preview'           => 'Sïpattamasın qarap şığw',
+'subject-preview'           => 'Taqırıbın/basın qarap şığw',
+'blockedtitle'              => 'Paýdalanwşı buğattalğan',
+'blockedtext'               => "<big>'''Qatıswşı atıñız ne IP jaýıñız buğattalğan.'''</big>
+
+buğattawdı $1 istegen. Belgilengen sebebi: ''$2''.
+
+Osı buğattawdı talqılaw üşin $1 degenmen ne basqa [[{{{{ns:mediawiki}}:grouppage-sysop}}|äkimşimen]] qatınaswıñızğa boladı.
+[[{{ns:special}}:Preferences|Tirkelgi baptawların]] qoldanıp jaramdı e-poşta jaýın engizgenşe deýin
+«Qatıswşığa xat jazw» qasïetin paýdalanılmaýsız. Ağımdıq IP jaýıñız: $3, jäne buğatawı nömiri: $5. Sonıñ birewin, nemese ekewin de ärbir suranısıñızğa qosıñız.",
+'blockedoriginalsource'     => "Tömende '''$1''' degenniñ qaýnarı körsetiledi:",
+'blockededitsource'         => "Tömende '''$1''' degenge jasalğan '''tüzetwñizdiñ''' mätini körsetiledi:",
+'whitelistedittitle'        => 'Öñdew üşin kirwiñiz jön.',
+'whitelistedittext'         => 'Betterdi öñdew üşin $1 jön.',
+'whitelistreadtitle'        => 'Oqw üşin kirwiñiz jön',
+'whitelistreadtext'         => 'Betterdi oqw üşin [[{{ns:special}}:Userlogin|kirwiñiz]] jön.',
+'whitelistacctitle'         => 'Sizge tirkelgi jasawğa ruqsat berilmegen',
+'whitelistacctext'          => 'Osı wïkïde basqalarğa tirkelgi jasaw üşin [[{{ns:Special}}:Userlogin|kirwiñiz]] qajet jäne janasımdı ruqsattarın bïlew qajet.',
+'confirmedittitle'          => 'E-poşta jaýın kwälandırw xatın qaýta öñdew qajet',
+'confirmedittext'           => 'Betterdi öñdew üşin aldın ala E-poşta jaýıñızdı kwälandırwıñız qajet. Jaýıñızdı [[{{ns:Special}}:Preferences|qatıswşı baptawı]] arqılı engiziñiz jäne teksertkiñiz.',
+'nosuchsectiontitle'        => 'Bul bölim emes',
+'nosuchsectiontext'         => "Joq bölimdi öñdewdi talap etipsiz. Mında \$1 degen bölim joq eken, öñdewleriñizdi saqtaw üşin orın joq.",
+'loginreqtitle'             => 'Kirwiñiz qajet',
+'loginreqlink'              => 'kirw',
+'loginreqpagetext'          => 'Basqa betterdi körw üşin siz $1 bolwıñız qajet.',
+'accmailtitle'              => 'Qupïya söz jiberildi.',
+'accmailtext'               => '$2 jaýına «$1» qupïya sözi jiberildi.',
+'newarticle'                => '(Jaña)',
+'newarticletext'            => 'Siltemege erip äli bastalmağan betke
+kelipsiz. Betti bastaw üşin, tömendegi awmaqta mätiniñizdi
+teriñiz (köbirek aqparat üşin [[{{{{ns:mediawiki}}:helppage}}|anıqtama betin]]
+qarañız).Eger jañılğannan osında kelgen bolsañız, şolğışıñız
+«Artqa» degen tüýmesin nuqıñız.',
+'anontalkpagetext'          => "----''Bul tirkelgisiz (nemese tirkelgisin qoldanbağan) paýdalanwşınıñ talqılaw beti. Osı paýdalanwşını biz tek sandıq IP jaýımen teñdestiremiz. Osındaý IP jaýlar birneşe paýdalanwşığa ortaq bolwı mümkin. Eger siz tirkelgisiz paýdalanwşı bolsañız jäne sizge qatıssız mändemeler jiberilgenin sezseñiz, basqa tirkelgisiz paýdalanwşılarmen aralastırmawı üşin [[{{ns:special}}:Userlogin|tirkelgi jasañız ne kiriñiz]].''",
+'noarticletext'             => 'Bul bette ağımda eş mätin joq, basqa betterden osı bet atawın [[{{ns:special}}:Search/{{PAGENAME}}|izdep körwiñizge]] nemese osı betti [{{fullurl:{{FULLPAGENAME}}|action=edit}} tüzetwiñizge] boladı.',
+'clearyourcache'            => "'''Añğartpa:''' Saqtağannan keýin özgeristerdi körw üşin şolğış qosalqı qaltasın bosatw keregi mümkin. '''Mozilla  / Safari:''' ''Shift'' pernesin basıp turıp ''Reload'' (''Qaýta jüktew'') tüýmesin nuqıñız (ne ''Ctrl-Shift-R'' basıñız); ''IE:'' ''Ctrl-F5'' basıñız; '''Opera / Konqueror''' ''F5'' pernesin basıñız.",
+'usercssjsyoucanpreview'    => '<strong>Basalqı:</strong> Saqtaw aldında jaña CSS/JS faýlın tekserw üşin «Qarap şığw» tüýmesin qoldanıñız.',
+'usercsspreview'            => "'''Mınaw CSS mätinin tek qarap şığw ekenin umıtpañız, ol äli saqtalğan joq!'''",
+'userjspreview'             => "'''Mınaw JavaScript qatıswşı bağdarlamasın tekserw/qarap şığw ekenin umıtpañız, ol äli saqtalğan joq!'''",
+'userinvalidcssjstitle'     => "'''Nazar salıñız:''' Bul «$1» degen bezendirw mäneri emes. Paýdalanwşınıñ .css jäne .js faýl atawı kişi äripppen jazılw tïisti ekenin umıtpañız, mısalğa {{ns:user}}:Foo/monobook.css degendi {{ns:user}}:Foo/Monobook.css degenmen salıstırıp qarañız.",
+'updated'                   => '(Jañartılğan)',
+'note'                      => '<strong>Añğartpa:</strong>',
+'previewnote'               => '<strong>Mınaw tek qarap şığw ekenin umıtpañız; tüzetwler äli saqtalğan joq!</strong>',
+'previewconflict'           => 'Bul qarap şığw joğarıdağı öñdew awmağındağı mätinge saqtağan kezindegi deý ıqpal etedi.',
+'session_fail_preview'      => '<strong>Ğafw etiñiz! Sessïya derekteri ısırap qalğandıqtan öñdewiñizdi jöndeý almaýmız.
+Mätiniñizdi saqtap qaýtalap köriñiz. Eger äli is ötpeýtin bolsa, şığıp jäne keri kirip köriñiz.</strong>',
+'session_fail_preview_html' => "<strong>Ğafw etiñiz! Sessïya derekteri ısırap qalğandıqtan öñdewiñizdi jöndeý almaýmız.</strong>
+
+''Osı wïkïde qam HTML endirilgen, JavaScript şabwıldardan qorğanw üşin aldın ala qarap şığw jasırılğan.''
+
+<strong>Eger bul öñdew adal talap bolsa, qaýtarıp köriñiz. Eger äli de istemese, şığıp, sosın keri kirip köriñiz.</strong>",
+'importing'                 => 'Sırttan alwda: $1',
+'editing'                   => 'Öñdelwde: $1',
+'editinguser'               => 'Öñdelwde: <b>$1</b> degen qatıswşı',
+'editingsection'            => 'Öñdelwde: $1 (bölimi)',
+'editingcomment'            => 'Öñdelwde: $1 (mändemesi)',
+'editconflict'              => 'Öñdew qaqtığısı: $1',
+'explainconflict'           => 'Osı betti siz öñdeý bastağanda basqa keýbirew betti özgertken.
+Joğarğı awmaqta bettiñ ağımdıq mätini bar.
+Tömengi awmaqta siz özgertken mätini körsetiledi.
+Özgertwiñizdi ağımdıq mätinge üstewiñiz jön.
+"Betti saqta!" tüýmesine basqanda
+<b>tek</b> joğarğı awmaqtağı mätin saqtaladı.<br />',
+'yourtext'                  => 'Mätiniñiz',
+'storedversion'             => 'Saqtalğan nusqası',
+'nonunicodebrowser'         => '<strong>AÑĞARTPA: Şolğışıñız Unicode belgilewine üýlesimdi emes, sondıqtan latın emes äripteri bar betterdi öñdew zil bolw mümkin. Jumıs istewge ıqtïmaldıq berw üşin, tömengi öñdew awmağında ASCII emes äripter onaltılıq sanımen körsetiledi</strong>.',
+'editingold'                => '<strong>AÑĞARTPA: Osı bettiñ erterek nusqasın
+öñdep jatırsız.
+Bunı saqtasañız, osı nwsqadan soñğı barlıq tüzetwler joýıladı.</strong>',
+'yourdiff'                  => 'Aýırmalar',
+'copyrightwarning'          => '{{SITENAME}} jobasına qosılğan bükil üles $2 (köbirek aqparat üşin: $1) qujatına saý jiberilgen bolıp sanaladı. Eger jazwıñızdıñ erkin köşirilip tüzetilwin qalamasañız, mında usınbawıñız jön.<br />
+Tağı, qosqan ülesiñiz - öziñizdiñ jazğanığız, ne aşıq aqparat közderinen alınğan mağlumat bolğanın wäde etesiz.<br />
+<strong>AVTORLIQ QUQIQPEN QORĞAWLI AQPARATTI RUQSATSIZ QOSPAÑIZ!</strong>',
+'copyrightwarning2'         => 'Este tursın: barlıq {{SITENAME}} jobasına berilgen ülester basqa wles berwşilermen tüzetwge, özgertwge, ne alastanwğa mümkin. Alğıssız tüzetwge enjarlan bolsañız, onda şığarmañızdı mında jarïyalamañız.<br />
+Tağı, osını öziñiz jazğanıñızdı, ne barşa qazınasınan, nemese sondaý-aq aqısız aşıq qaýnarınan köşirgeniñizdi
+däl osındaý bizge mindetteme beresiz (köbirek aqparat üşin $1 qwjatın qarañız).<br />
+<strong>AWTORLIQ QUQIQPEN QORĞAWLI AQPARATTI RUQSATSIZ QOSPAÑIZ!</strong>',
+'longpagewarning'           => '<strong>NAZAR SALIÑIZ: Bul bettiñ mölşeri — $1 KB; keýbir
+şolğıştarda bet mölşeri 32 KB jetse ne onı assa öñdew kürdeli bolwı mümkin.
+Betti birneşe kişkin bölimderge bölip köriñiz.</strong>',
+'longpageerror'             => '<strong>QATE: Jiberetin mätiniñizdin mölşeri — $1 KB, eñ köbi $2 KB
+ruqsat etilgen mölşerinen asqan. Bul saqtaý alınbaýdı.</strong>',
+'readonlywarning'           => '<strong>NAZAR SALIÑIZ: Derekqor jöndetw üşin qulıptalğan,
+sondıqtan däl qazir tüzetwiñizdi saqtaý almaýsız. Sosın qoldanwğa üşin mätäniñizdi köşirip,
+öz kompüteriñizde faýlğa saqtañız.</strong>',
+'protectedpagewarning'      => '<strong>NAZAR SALIÑIZ: Bul bet qorğalğan. Tek äkimşi ruqsatı bar qatıswşılar öñdew jasaý aladı.</strong>',
+'semiprotectedpagewarning'  => "'''Añğartpa:''' Bet jartılaý qorğalğan, sondıqtan osını tek ruqsatı bar qatıswşılar öñdeý aladı.",
+'cascadeprotectedwarning'   => "'''Nazar salıñız''': Bul bet qulıptalğan, endi tek äkimşi quqıqtarı bar paýdalanwşılar bunı öñdeý aladı.Bunıñ sebebi: bul bet «bawlı qorğawı» bar kelesi {{PLURAL:$1|betke|betterge}} kiriktirilgen:",
+'templatesused'             => 'Bul bette qoldanılğan ülgiler:',
+'templatesusedpreview'      => 'Bunı qarap şığwğa qoldanılğan ülgiler:',
+'templatesusedsection'      => 'Bul bölimde qoldanılğan ülgiler:',
+'template-protected'        => '(qorğalğan)',
+'template-semiprotected'    => '(jartılaý qorğalğan)',
+'edittools'                 => '<!-- Mındağı mağlumat öñdew jäne qotarw ülgittriñiñ astında körsetiledi. -->',
+'nocreatetitle'             => 'Betti bastaw şektelgen',
+'nocreatetext'              => 'Bul torapta jaña bet bastawı şektelgen.
+Keri qaýtıp bar betti öñdewiñizge boladı, nemese [[{{ns:special}}:Userlogin|kirwiñizge ne tirkelgi jasawğa]] boladı.',
+
+# "Undo" feature
+'undo-success' => 'Bul öñdewdiñ boldırmawı atqarıladı. Talabıñızdı bilip turıp aldın ala tömendegi salıstırwdı tekserip şığıñız da, tüzetw boldırmawın bitirw üşin tömendegi özgeristerdi saqtañız.',
+'undo-failure' => 'Bul öñdewdiñ boldırmawı atqarılmaýdı, sebebi: kedergi jasağan aralas tüzetwler bar.',
+'undo-summary' => '[[{{ns:special}}:Contributions/$2|$2]] ([[{{ns:user_talk}}:$2|talqılawı]]) istegen $1 nusqasın boldırmaw',
+
+# Account creation failure
+'cantcreateaccounttitle' => 'Tirkelgi jasalmadı',
+'cantcreateaccounttext'  => 'Osı IP jaýdan (<b>$1</b>) tirkelgi jasawı buğattalğan.
+Bälkim sebebi, oqw ornıñızdan, nemese Ïnternet jetkizwşiden
+üzbeý buzaqılıq bolğanı.',
+
+# History pages
+'revhistory'                  => 'Nusqalar tarïxı',
+'viewpagelogs'                => 'Osı betke qatıstı jwrnaldardı qaraw',
+'nohistory'                   => 'Osı bettiniñ nusqalar tarïxı joq.',
+'revnotfound'                 => 'Nusqa tabılmadı',
+'revnotfoundtext'             => 'Osı suranısqan bettiñ eski nusqası tabılğan joq.
+Osı betti aşwğa paýdalanğan URL jaýın qaýta tekserip şığıñız.',
+'loadhist'                    => 'Bet tarïxın jüktewi',
+'currentrev'                  => 'Ağımdıq nusqası',
+'revisionasof'                => '$1 kezindegi nusqası',
+'revision-info'               => '$1 kezindegi $2 jasağan nusqası',
+'previousrevision'            => '← Eskilew nusqası',
+'nextrevision'                => 'Jañalaw nusqası →',
+'currentrevisionlink'         => 'Ağımdıq nusqası',
+'cur'                         => 'ağım.',
+'next'                        => 'kel.',
+'last'                        => 'soñ.',
+'orig'                        => 'tüp.',
+'page_first'                  => 'alğaşqısına',
+'page_last'                   => 'soñğısına',
+'histlegend'                  => 'Aýırmasın körw: salıstıramın degen nusqalardı tañdap, ne <Enter> pernesin, ne tömendegi tüýmeni basıñız.<br />
+Şarttı belgiler: (ağım.) = ağımdıq nusqamen aýırması,
+(soñ.) = aldıñğı nusqamen aýırması, ş = şağın tüzetw',
+'deletedrev'                  => '[joýılğan]',
+'histfirst'                   => 'Eñ alğaşqısına',
+'histlast'                    => 'Eñ soñğısına',
+'historysize'                 => '($1 B)',
+'historyempty'                => '(bos)',
+
+# Revision feed
+'history-feed-title'          => 'Nusqa tarïxı',
+'history-feed-description'    => 'Mına wïkïdegi bul bettiñ nusqa tarïxı',
+'history-feed-item-nocomment' => '$2 kezindegi $1 degen', # user at time
+'history-feed-empty'          => 'Suranısqan bet joq boldı.
+Ol mına wïkïden joýılğan, nemese atawı awıstırılğan.
+Osığan qatıstı jaña betterdi [[{{ns:special}}:Search|bul wïkïden izdep]] köriñiz.',
+
+# Revision deletion
+
+'rev-deleted-comment'         => '(mändeme alastatıldı)',
+'rev-deleted-user'            => '(qatıswşı atı alastatıldı)',
+'rev-deleted-event'           => '(jazba joýıldı)',
+'rev-deleted-text-permission' => '<div class="mw-warning plainlinks">
+Osı bettiñ nusqası jarïya murağattarınan alastatılğan.
+Bul jaýtqa [{{fullurl:{{ns:special}}:Log/delete|page={{FULLPAGENAMEE}}}} joyw jwrnalında] egjeý-tegjeý mälimetteri bolwı mümkin.
+</div>',
+'rev-deleted-text-view'       => '<div class="mw-warning plainlinks">
+Osı bettiñ nusqası jarïya murağattarınan alastatılğan.
+Sonı osı toraptıñ äkimşisi bop körwiñiz mümkin;
+bul jaýtqa [{{fullurl:{{ns:special}}:Log/delete|page={{FULLPAGENAMEE}}}} joyw jwrnalında] egjeý-tegjeý mälmetteri bolwı mümkin.
+</div>',
+'rev-delundel'                => 'körset/jasır',
+'revisiondelete'            => 'Nusqalardı joyw/qaýtarw',
+'revdelete-nooldid-title'   => 'Nısana nusqası joq',
+'revdelete-nooldid-text'      => 'Osı äreketti orındaw üşin aqırğı nusqasınne nusqaların engizbepsiz.',
+'revdelete-selected'          => "'''$1:''' degenniñ {{PLURAL:$2|talğanılğan nusqası|talğanılğan nusqaları}}:",
+'logdelete-selected'          => "'''$1:''' degenniñ {{PLURAL:$2|talğanılğan jwrnal jazbası|talğanılğan jwrnal jazbaları}}:",
+'revdelete-text'            => 'Joýılğan nusqalar men jazbalardı äli de bet tarïxında jäne jwrnaldarda tabwğa boladı,
+biraq olardıñ mağlumat bölşekteri barşağa qatınalmaýdı.
+
+Osı wïkïdiñ basqa äkimşileri jasırın mağlumatqa qatınaý aladı, jäne qosımşa şektew
+endirilgenşe deýin, osı tildesw arqılı joýılğan mağlumattı keri qaýtara aladı.',
+'revdelete-legend'            => 'Şektewlerdi ornatw:',
+'revdelete-hide-text'       => 'Nusqa mätinin jasır',
+'revdelete-hide-name'       => 'Äreket pen maqsatın jasır',
+'revdelete-hide-comment'    => 'Tüzetw mändemesin jasır',
+'revdelete-hide-user'       => 'Öñdewşi atın (IP jaýın) jasır',
+'revdelete-hide-restricted' => 'Osı şektewlerdi barşağa sïyaqtı äkimşilerge de qoldanw',
+'revdelete-suppress'        => 'Äkimşiler jasağan mağlumattı basqalarşa perdelew',
+'revdelete-hide-image'      => 'Faýl mağlumatın jasır',
+'revdelete-unsuppress'      => 'Qaýtarılğan nusqalardan şektewlerdi alastatw',
+'revdelete-log'             => 'Jwrnal mändemesi:',
+'revdelete-submit'          => 'Talğanğan nusqağa qoldanw',
+'revdelete-logentry'        => '[[$1]] degenniñ nusqa körinisin özgertti',
+'logdelete-logentry'        => '[[$1]] degenniñ jazba körinisin özgertti',
+'revdelete-logaction'         => '{{plural:$1|Nusqanı|$1 nusqanı}} $2 küýine qoýdı',
+'logdelete-logaction'         => '[[$3]] degenniñ {{plural:$1|jazbasın|$1 jazbasın}} $2 küýine qoýdı',
+'revdelete-success'         => 'Nusqa körinisi sätti qoýıldı.',
+'logdelete-success'         => 'Jazba körinisi sätti qoýıldı.',
+
+# Oversight log
+'oversightlog'              => 'Tekserwşi jwrnalı',
+'overlogpagetext'           => 'Tömende äkimşiler jasırğan mağlumatqa ıqpal etetin jwıqtağı bolğan joyw jäne buğattaw
+tizimi beriledi. Ağımdağı amaldı buğattaw men tïım üşin [[{{ns:special}}:Ipblocklist|IP buğattaw tizimin]] qarañız.',
+
+# Diffs
+'difference'                => '(Nusqalar arasındağı aýırmaşılıq)',
+'loadingrev'                => 'aýırma üşin nusqa jüktew',
+'lineno'                    => 'Jol $1:',
+'editcurrent'               => 'Osı bettiñ ağımdıq nusqasın öñdew',
+'selectnewerversionfordiff' => 'Salıstırw üşin jañalaw nusqasın talğañız',
+'selectolderversionfordiff' => 'Salıstırw üşin eskilew nusqasın talğañız',
+'compareselectedversions'   => 'Tañdağan nusqalardı salıstırw',
+'editundo'                  => 'boldırmaw',
+'diff-multi'                => '(Aradağı {{plural:$1|bir nusqa|$1 nusqa}} körsetilmedi.)',
+
+# Search results
+'searchresults'         => 'İzdestirw nätïjeleri',
+'searchresulttext'      => '{{SITENAME}} jobasında izdestirw twralı köbirek aqparat üşin, [[{{{{ns:mediawiki}}:helppage}}|{{int:help}}]] qarañız.',
+'searchsubtitle'        => "İzdestirw suranısıñız: '''[[:$1]]'''",
+'searchsubtitleinvalid' => "İzdestirw suranısıñız: '''$1'''",
+'badquery'              => 'İzdestirw suranıs jaramsız pişimdelgen',
+'badquerytext'          => 'Ğafw etiñiz, suranısıñızdı orındaý almadıq.
+Bul üş äripten kem sözdi izdestirwge talaptanğanıñızdan
+bolwğa mümkin, ol äli de süýemeldenbegen.
+Tağı da bul söýlemdi durıs engizbegendikten de bolwğa mümkin,
+mısalı, «balıq jäne jäne qabırşaq».
+Basqa suranıs jasap köriñiz',
+'matchtotals'           => '«$1» izdestirw suranısı $2 bettiñ atawına
+jäne $3 bettiñ mätinine säýkes.',
+'noexactmatch'          => "'''Osında «$1» atawlı bet joq.''' Bul betti öziñiz '''[[:$1|bastaý  alasız]].'''",
+'titlematches'          => 'Bet atawı säýkesi',
+'notitlematches'        => 'Eş bet atawı säýkes emes',
+'textmatches'           => 'Bet mätiniñ säýkesi',
+'notextmatches'         => 'Eş bet mätini säýkes emes',
+'prevn'                 => 'aldıñğı $1',
+'nextn'                 => 'kelesi $1',
+'viewprevnext'          => 'Körsetilwi: ($1) ($2) ($3) jazba.',
+'showingresults'        => "Tömende nömir '''$2''' ornınan bastap, jetkenşe {{PLURAL:$1|'''1''' nätïje|'''$1''' nätïje}} körsetilgen.",
+'showingresultsnum'     => "Tömende nömir '''$2''' ornınan bastap {{PLURAL:$3|'''1''' nätïje|'''$3''' nätïje}} körsetilgen.",
+'nonefound'             => "'''Añğartpa''': Tabw sätsiz bitwi jïi «bolğan» jäne «degen» sïyaqtı
+tizimdelmeýtin jalpı sözdermen izdestirwden bolwı mümkin,
+nemese birden artıq izdestirw şart sözderin egizgennen (nätïjelerde tek
+barlıq şart sözder kedesse körsetiledi) bolwı mümkin.",
+'powersearch'           => 'İzdew',
+'powersearchtext'       => 'Mına esim ayalarda izdew:<br />$1<br />$2 Aýdatwlardı tizimdew<br />İzdestirw suranısı: $3 $9',
+'searchdisabled'        => '{{SITENAME}} jobasında işki izdewi öşirilgen. Äzirşe Google nemese Yahoo! arqılı izdewge boladı. Añğartpa: {{SITENAME}} mağlumat tizimidewleri olarda eskirgen bolwğa mümkin.',
+'blanknamespace'        => '(Negizgi)',
+
+# Preferences page
+'preferences'              => 'Baptawlar',
+'mypreferences'            => 'Baptawım',
+'prefsnologin'             => 'Kirmegensiz',
+'prefsnologintext'         => 'Baptawlardı qalaw üşin aldın ala [[{{ns:special}}:Userlogin|kirwiñiz]] qajet.',
+'prefsreset'               => 'Baptawlar arqawdan qaýta ornatıldı.',
+'qbsettings'               => 'Mäzir aýmağı',
+'qbsettings-none'          => 'Eşqandaý',
+'qbsettings-fixedleft'     => 'Solğa bekitilgen',
+'qbsettings-fixedright'    => 'Oñğa bekitilgen',
+'qbsettings-floatingleft'  => 'Solğa qalqığan',
+'qbsettings-floatingright' => 'Oñğa qalqığan',
+'changepassword'           => 'Qupïya söz özgertw',
+'skin'                     => 'Bezendirw',
+'math'                     => 'Matematïka',
+'dateformat'               => 'Kün-aý pişimi',
+'datedefault'              => 'Eş qalawsız',
+'datetime'                 => 'Waqıt',
+'math_failure'             => 'Öñdetw sätsiz bitti',
+'math_unknown_error'       => 'belgisiz qate',
+'math_unknown_function'    => 'belgisiz fwnkcïya',
+'math_lexing_error'        => 'leksïka qatesi',
+'math_syntax_error'        => 'sïntaksïs qatesi',
+'math_image_error'         => 'PNG awdarısı sätsiz bitti; latex, dvips, gs jäne convert bağdarlamalarınıñ mültiksiz ornatwın tekseriñiz',
+'math_bad_tmpdir'          => 'Matematïkanıñ waqıtşa qaltasına jazılmadı, ne qalta jasalmadı',
+'math_bad_output'          => 'Matematïkanıñ beris qaltasına jazılmadı, ne qalta jasalmadı',
+'math_notexvc'             => 'texvc bağdarlaması joğaltılğan; baptaw üşin math/README qujatın qarañız.',
+'prefs-personal'           => 'Jeke derekteri',
+'prefs-rc'                 => 'Jwıqtağı özgerister',
+'prefs-watchlist'          => 'Baqılaw',
+'prefs-watchlist-days'     => 'Baqılaw tiziminde körseterin kün sanı:',
+'prefs-watchlist-edits'    => 'Keñeýtilgen baqılaw tizimi tüzetw körseterin sanı:',
+'prefs-misc'               => 'Qosımşa',
+'saveprefs'                => 'Saqta',
+'resetprefs'               => 'Tasta',
+'oldpassword'              => 'Ağımdıq qupïya söz:',
+'newpassword'              => 'Jaña qupïya söz:',
+'retypenew'                => 'Jaña qupïya sözdi qaýtalañız:',
+'textboxsize'              => 'Öñdew',
+'rows'                     => 'Joldar:',
+'columns'                  => 'Bağandar:',
+'searchresultshead'        => 'İzdew',
+'resultsperpage'           => 'Bet saýın nätïje sanı:',
+'contextlines'             => 'Nätïje saýın jol sanı:',
+'contextchars'             => 'Jol saýın ärip sanı:',
+'stubthreshold'            => 'Biteme körstetwin anıqtaw tabaldırığı:',
+'recentchangesdays'        => 'Jüıqtağı özgeristerdegi körsetiletin künder:',
+'recentchangescount'       => 'Jwıqtağı özgeristerdegi körsetiletin tüzetwler:',
+'savedprefs'               => 'Baptawlarıñız saqtaldı.',
+'timezonelegend'           => 'Waqıt beldewi',
+'timezonetext'             => 'Jergilikti waqıtıñızben server waqıtınıñ (UTC) arasındağı sağat sanı.',
+'localtime'                => 'Jergilikti waqıt',
+'timezoneoffset'           => 'Iğıstırw¹',
+'servertime'               => 'Server waqıtı',
+'guesstimezone'            => 'Şolğıştan alıp toltırw',
+'allowemail'               => 'Basqadan xat qabıldawın endirw',
+'defaultns'                => 'Mına esim ayalarda ädepkiden izdew:',
+'default'                  => 'ädepki',
+'files'                    => 'Faýldar',
+
+# User rights
+'userrights-lookup-user'     => 'Qatıswşı toptarın meñgerw',
+'userrights-user-editname'   => 'Qatıswşı atın engiziñiz:',
+'editusergroup'              => 'Qatıswşı toptarın öñdew',
+'userrights-editusergroup'   => 'Qatıswşı toptarın öñdew',
+'saveusergroups'             => 'Qatıswşı toptarın saqtaw',
+'userrights-groupsmember'    => 'Müşeligi:',
+'userrights-groupsavailable' => 'Qatınawlı toptar:',
+'userrights-groupshelp'      => 'Qatıswşını üsteýtin ne alastatın toptardı talğañız.
+Talğawı öşirilgen toptar özgertilimeýdi. Toptardıñ talğawın CTRL + Sol jaq nuqwmen öşirwiñizge boladı.',
+'userrights-reason'          => 'Özgertw sebebi:',
+
+# Groups
+'group'            => 'Top:',
+'group-bot'        => 'Bottar',
+'group-sysop'      => 'Äkimşiler',
+'group-bureaucrat' => 'Töreşiler',
+'group-all'        => '(barlığı)',
+
+'group-bot-member'        => 'bot',
+'group-sysop-member'      => 'äkimşi',
+'group-bureaucrat-member' => 'töreşi',
+
+'grouppage-bot'        => '{{ns:project}}:Bottar',
+'grouppage-sysop'      => '{{ns:project}}:Äkimşiler',
+'grouppage-bureaucrat' => '{{ns:project}}:Töreşiler',
+
+# User rights log
+'rightslog'      => 'Qatıswşı_quqıqtarı_jwrnalı',
+'rightslogtext'  => 'Bul paýdalanwşılar quqıqtarın özgertw jwrnalı.',
+'rightslogentry' => ' $1 top müşelgin $2 degennen $3 degenge özgertti',
+'rightsnone'     => '(eşqandaý)',
+
+# Recent changes
+'nchanges'                          => '{{PLURAL:$1|bir tüzetw|$1 tüzetw}}',
+'recentchanges'                     => 'Jwıqtağı özgerister',
+'recentchangestext'                 => 'Bul bette osı wïkïdegi bolğan jwıqtağı özgerister baýqaladı.',
+'recentchanges-feed-description'    => 'Bul arnamenen wïkïdegi eñ soñğı özgerister qadağalanadı.',
+'rcnote'                            => "$3 kezine deýin — tömende soñğı {{PLURAL:$2|kündegi|'''$2''' kündegi}}, soñğı {{PLURAL:$1|'''1''' özgeris|'''$1''' özgeris}} körsetilgen.",
+'rcnotefrom'                        => '<b>$2</b> kezinen beri — tömende özgerister <b>$1</b> deýin körsetilgen.',
+'rclistfrom'                        => '$1 kezinen beri — jaña özgeristerdi körset.',
+'rcshowhideminor'                   => 'Şağın tüzetwdi $1',
+'rcshowhidebots'                    => 'Bottardı $1',
+'rcshowhideliu'                     => 'Tirkelgendi $1',
+'rcshowhideanons'                   => 'Tirkelgisizdi $1',
+'rcshowhidepatr'                    => 'Küzettegi tüzetwlerdi $1',
+'rcshowhidemine'                    => 'Tüzetwimdi $1',
+'rclinks'                           => 'Soñğı $2 künde bolğan, soñğı $1 özgeristi körset<br />$3',
+'diff'                              => 'aýırm.',
+'hist'                              => 'tar.',
+'hide'                              => 'jasır',
+'show'                              => 'körset',
+'minoreditletter'                   => 'ş',
+'newpageletter'                     => 'J',
+'boteditletter'                     => 'b',
+'sectionlink'                       => '→',
+'number_of_watching_users_pageview' => '[baqılağan $1 qatıswşı]',
+'rc_categories'                     => 'Sanattarğa şektew ("|" belgisimen bölikteñiz)',
+'rc_categories_any'                 => 'Qaýsıbir',
+
+# Recent changes linked
+'recentchangeslinked' => 'Qatıstı tüzetwler',
+'recentchangeslinked-noresult' => 'Siltegen betterde aýtılmış merzimde eşqandaý özgeris bolmağan.',
+'recentchangeslinked-summary'  => "Bul arnaýı bette siltegen betterdegi jwıqtağı özgerister tizimi beriledi. Baqılaw tizimiñizdegi better '''jwan''' ärpimen belgilenedi.",
+
+# Upload
+'upload'                      => 'Faýl qotarw',
+'uploadbtn'                   => 'Qotar!',
+'reupload'                    => 'Qaýtalap qotarw',
+'reuploaddesc'                => 'Qotarw ülgitine oralw.',
+'uploadnologin'               => 'Kirmegensiz',
+'uploadnologintext'           => 'Faýl qotarw üşin
+[[{{ns:special}}:Userlogin|kirwiñiz]] qajet.',
+'upload_directory_read_only'  => 'Qotarw qaltasına ($1) jazwğa veb-serverge ruqsat berilmegen.',
+'uploaderror'                 => 'Qotarw qatesi',
+'uploadtext'                  => "Tömendegi ülgit faýl qotarwğa qoldanıladı, aldındağı swretterdi qaraw üşin ne izdew üşin [[{{ns:special}}:Imagelist|qotarılğan faýldar tizimine]] barıñız, qotarw men joyw tağı da [[{{ns:special}}:Log/upload|qotarw jwrnalına]] jazılıp alınadı.
+
+Swretterdi betke kirgizw üşin, faýlğa twra baýlanıstratın
+'''<nowiki>[[</nowiki>{{ns:image}}<nowiki>:File.jpg]]</nowiki>''',
+'''<nowiki>[[</nowiki>{{ns:image}}<nowiki>:File.png|balama mätini]]</nowiki>''' nemese
+'''<nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki>''' silteme pişimin qoldanıñız.",
+'uploadlog'                   => 'qotarw jwrnalı',
+'uploadlogpage'               => 'Qotarw jwrnalı',
+'uploadlogpagetext'           => 'Tömende jwıqtağı qotarılğan faýl tizimi.',
+'filename'                    => 'Faýl atı',
+'filedesc'                    => 'Sïpattaması',
+'fileuploadsummary'           => 'Sïpattaması:',
+'filestatus'                  => 'Awtorlıq quqıqtarı küýi',
+'filesource'                  => 'Faýl qaýnarı',
+'uploadedfiles'               => 'Qotarılğan faýldar',
+'ignorewarning'               => 'Nazar salwdı elemew jäne faýldı ärdeqaşan saqtaw.',
+'ignorewarnings'              => 'Ärqaýsı nazar salwlardı elemew',
+'minlength'                   => 'Faýl atında eñ keminde üş ärip bolwı kerek.',
+'illegalfilename'             => '«$1» faýl atawında bet atawlarında ruqsat etilmegen nışandar bar. Faýldı qaýta atañız, sosın qaýta jwktep köriñiz.',
+'badfilename'                 => 'Faýldıñ atı «$1» bop özgertildi.',
+'filetype-badmime'            => '«$1» degen MIME türi bar faýldardı qotarwğa ruqsat etilmeýdi.',
+'filetype-badtype'            => "'''«.$1»''' degen kütilmegen faýl türi
+: Rüqsat etilgen faýl tür tizimi: $2",
+'filetype-missing'            => 'Bul faýldıñ («.jpg» sïyaqtı) keñeýtimi joq.',
+'large-file'                  => 'Faýldı $1 mölşerden aspawına tırısıñız; bul faýl mölşeri — $2.',
+'largefileserver'             => 'Osı faýldıñ mölşeri serverdiñ qalawınan asıp ketken.',
+'emptyfile'                   => 'Qotarılğan faýlıñız bos sïyaqtı. Bul faýl atawı jansaq engizilgeninen bolwı mümkin. Qotarğıñız kelgen faýl şınında da osı faýl bolğanın tekserip alıñız.',
+'fileexists'                  => 'Osındaý atawlı faýl bar tüge. Qaýta jazwdıñ aldınan $1 tekserip şığıñız.',
+'fileexists-extension'        => 'Bundaý atawımen faýl bar tüge:<br />
+Qotarılatın faýl atawı: <strong><tt>$1</tt></strong><br />
+Bar bolğan faýl atawı: <strong><tt>$2</tt></strong><br />
+Aýırmaşlığı tek keñeýtimi bas/kişi ärpimen jazılwında. Faýldardıñ birdeýligin sınap şığıñız.',
+'fileexists-thumb'            => "'''<center>Bar bolğan swret</center>'''",
+'fileexists-thumbnail-yes'    => "Osı faýl — mölşeri kişiritilgen swret <i>(nobaý)</i> sïyaqtı. Bul <strong><tt>$1</tt></strong> degen faýldı sınap şığıñız.<br />
+Eger sınalğan faýl tüpnusqalı mölşeri bar dälme-däl swret bolsa, qosısmşa nobaýdı qotarw qajeti joq.",
+'file-thumbnail-no'           => "Faýl atawı <strong><tt>$1</tt></strong> degenmen bastaladı. Bul — mölşeri kişiritilgen swret <i>(nobaý)</i> sïyaqtı.
+Eger tolıq ajıratılımdığı bar swretiñiz bolsa, sonı qotarıñız, äýtpese faýl atawın özgertiñiz.",
+'fileexists-forbidden'        => 'Osındaý atawlı faýl bar tüge. Keri qaýtıñız da, jäne osı faýldı basqa atımen qotarıñız. [[{{ns:image}}:$1|thumb|center|$1]]',
+'fileexists-shared-forbidden' => 'Osındaý atawlı faýl ortaq faýl arqawında bar tüge. Keri qaýtıñız da, osı faýldı jaña atımen qotarıñız. [[{{ns:image}}:$1|thumb|center|$1]]',
+'successfulupload'            => 'Qotarw sätti ötti',
+'fileuploaded'                => '«$1» faýlı sätti qotarıldı!
+Osı siltemege erip — $2, sïpattama betine barıñız da, jäne osı faýl twralı
+aqparat toltırıñız: qaýdan alınğanın, qaşan jasalğanın, kim jasağanın,
+tağı basqa biletiñizdi. Bul swret bolsa, mınadaý pişimimen kiristirwge boladı: <tt><nowiki>[[</nowiki>{{ns:image}}<nowiki>:$1|thumb|Sïpattaması]]</nowiki></tt>',
+'uploadwarning'               => 'Qotarw twralı nazar salw',
+'savefile'                    => 'Faýldı saqtaw',
+'uploadedimage'               => '«[[$1]]» faýlın qotardı',
+'uploaddisabled'              => 'Faýl qotarwı öşirilgen',
+'uploaddisabledtext'          => 'Osı wïkïde faýl qotarwı öşirilgen.',
+'uploadscripted'              => 'Osı faýlda, veb şolğıştı ağat tüsindikke keltiretiñ HTML belgilew, ne skrïpt kodı bar.',
+'uploadcorrupt'               => 'Osı faýl büldirilgen, ne ädepsiz keñeýtimi bar. Faýldı tekserip, qotarwın qaýtalañız.',
+'uploadvirus'                 => 'Osı faýlda vïrws bolwı mümkin! Egjeý-tegjeý aqparatı: $1',
+'sourcefilename'              => 'Qaýnardağı faýl atı',
+'destfilename'                => 'Aqırğı faýl atı',
+'watchthisupload'             => 'Osı betti baqılaw',
+'filewasdeleted'              => 'Osı atawı bar faýl burın qotarılğan, sosın joýıldırılğan. Qaýta qotarw aldınan $1 degendi tekseriñiz.',
+
+'upload-proto-error'      => 'Jaramsız xattamalıq',
+'upload-proto-error-text' => 'Sırttan qotarw üşin URL jaýları <code>http://</code> nemese <code>ftp://</code> degenderden bastalw qajet.',
+'upload-file-error'       => 'İşki qate',
+'upload-file-error-text'  => 'Serverde waqıtşa faýl jasawı işki qatege uşırastı. Bul jüýeniñ äkimşimen qatınasıñız.',
+'upload-misc-error'       => 'Belgisiz qotarw qatesi',
+'upload-misc-error-text'  => 'Qotarw kezinde belgisiz qate uşırastı. Qaýsı URL jaýı jaramdı jäne qatınawlı ekenin tekserip şığıñız da qaýtalap köriñiz. Eger bul mäsele älde de qalsa, jüýe äkimşimen qatınasıñız.',
+
+# Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
+'upload-curl-error6'       => 'URL jaýı jetilmedi',
+'upload-curl-error6-text'  => 'Berilgen URL jaýı jetilmedi. Qaýsı URL jaýı durıs ekenin jäne torap iste ekenin qaýtalap qatañ tekseriñiz.',
+'upload-curl-error28'      => 'Qotarwğa berilgen waqıt bitti',
+'upload-curl-error28-text' => 'Toraptıñ jawap berwi tım uzaq waqıtqa sozıldı. Bul torap iste ekenin tekserip şığıñız, az waqıt kidire turıñız da tağı qaýtalap köriñiz. Talabıñızdı jüktelwi azdaw kezinde qaýtalawğa bolmıs.',
+
+'license'            => 'Lïcenzïyası',
+'nolicense'          => 'Eşteñe talğanbağan',
+'upload_source_url'  => ' (jaramdı, barşağa qatınawlı URL jaý)',
+'upload_source_file' => ' (komp′ywteriñizdegi faýl)',
+
+# Image list
+'imagelist'                 => 'Faýl tizimi',
+'imagelisttext'             => "Tömende ''$2'' surıptalğan '''$1''' faýl tizimi.",
+'imagelistforuser'          => 'Mında tek $1 jüktegen swretter körsetiledi.',
+'getimagelist'              => 'faýl tizimdewi',
+'ilsubmit'                  => 'İzdew',
+'showlast'                  => 'Soñğı $1 faýl $2 surıptap körset.',
+'byname'                    => 'atımen',
+'bydate'                    => 'kün-aýmen',
+'bysize'                    => 'mölşerimen',
+'imgdelete'                 => 'joyw',
+'imgdesc'                   => 'sïpp.',
+'imgfile'                   => 'faýl',
+'imglegend'                 => 'Şarttı belgiler: (sïpp.) — faýl sïpattamasın körsetw/öñdew.',
+'imghistory'                => 'Faýl tarïxı',
+'revertimg'                 => 'qaýt.',
+'deleteimg'                 => 'joyw',
+'deleteimgcompletely'       => 'Osı faýldıñ barlıq nusqaların joý',
+'imghistlegend'             => 'Şarttı belgiler: (ağım.) = ağımdıq faýl, (joyw) = eski nusqasın
+joyw, (qaý.) = eski nusqasına qaýtarw.
+<br /><i>Qotarılğan faýldı körw üşin kün-aýına nuqıñız</i>.',
+'imagelinks'                => 'Siltemeleri',
+'linkstoimage'              => 'Bul faýlğa kelesi better silteýdi:',
+'nolinkstoimage'            => 'Bul faýlğa eş bet siltemeýdi.',
+'sharedupload'              => 'Bul faýl ortaq arqawına qotarılğan sondıqtan basqa jobalarda qoldanwı mümkin.',
+'shareduploadwiki'          => 'Bılaýğı aqparat üşin $1 degendi qarañız.',
+'shareduploadwiki-linktext' => 'faýl sïpattaması beti',
+'noimage'                   => 'Mınadaý atawlı faýl joq, $1 mümkindigiñiz bar.',
+'noimage-linktext'          => 'osını qotarw',
+'uploadnewversion-linktext' => 'Bul faýldıñ jaña nusqasın qotarw',
+'imagelist_date'            => 'Kün-aýı',
+'imagelist_name'            => 'Atawı',
+'imagelist_user'            => 'Qatıswşı',
+'imagelist_size'            => 'Mölşeri (B)',
+'imagelist_description'     => 'Sïpattaması',
+'imagelist_search_for'      => 'Swretti atımen izdew:',
+
+# MIME search
+'mimesearch'         => 'Faýldı MIME türimen izdew',
+'mimesearch-summary' => 'Bul bet faýldardı MIME türimen süzgilew mümkindigin beredi. Kirisi: «mağlumat türi»/«taraw türi», mısalı <tt>image/jpeg</tt>.',
+'mimetype'           => 'MIME türi:',
+'download'           => 'jüktew',
+
+# Unwatched pages
+'unwatchedpages'         => 'Baqılanbağan better',
+
+# List redirects
+'listredirects'         => 'Aýdatw bet tizimi',
+
+# Unused templates
+'unusedtemplates'         => 'Paýdalanılmağan ülgiler',
+'unusedtemplatestext'     => 'Bul bet basqa betke kirictirilmegen ülgi esim ayaısındağı barlıq betterdi tizimdeýdi. Ülgilerdi joyw aldınan bunıñ basqa siltemelerin tekserip şığwın umıtpañız',
+'unusedtemplateswlh'      => 'basqa siltemeler',
+
+# Random redirect
+'randomredirect' => 'Kezdeýsoq aýdatw',
+'randomredirect-nopages' => 'Bul esim ayasında eş aýdatw joq.',
+# Statistics
+'statistics'             => 'Joba sanağı',
+'sitestats'              => '{{SITENAME}} sanağı',
+'userstats'              => 'Qatıswşı sanağı',
+'sitestatstext'          => "Derekqorda {{PLURAL:$1|'''1''' bet|bulaýşa '''$1''' bet}} bar.
+Bunıñ işinde: «talqılaw» betteri, {{SITENAME}} jobası twralı better, eñ az «biteme»
+betteri, aýdatwlar, tağı da basqa mağlumat dep tanılmaýtın better bolwı mümkin .
+Solardı esepten şığarğanda, mında mağlumat dep sanalatın
+{{PLURAL:$2|'''1'''|'''$2'''}} bet bar şığar.
+
+Qotarılğan {{PLURAL:$8|'''1''' faýl|'''$8''' faýl}} saqtaladı.
+
+{{SITENAME}} jobası ornatılğannan beri better {{PLURAL:$3|'''1''' ret|bulaýşa '''$3''' ret}} qaralğan,
+jäne better {{PLURAL:$4|'''1''' ret|'''$4''' ret}} tüzetilgen.
+Bunıñ nätïjesinde orta eseppen ärbir betke '''$5''' ret tüzetw keledi, jäne ärbir tüzetwge '''$6''' ret qaraw keledi.
+
+Ağımdıq [http://meta.wikimedia.org/wiki/Help:Job_queue tapsırım kezegi] uzındılığı: '''$7'''.",
+'userstatstext'          => "Mında {{PLURAL:$1|'''1''' tirkelgen qatıswşı|'''$1''' tirkelgen qatıswşı}} bar, sonıñ işinde
+ {{PLURAL:$2|'''1''' qatıswşıda|'''$2''' qatıswşıda}} (nemese '''$4 %''') $5 quqıqtarı bar",
+'statistics-mostpopular' => 'Eñ köp qaralğan better',
+
+'disambiguations'         => 'Aýrıqtı better',
+'disambiguationspage'     => '{{ns:template}}:Disambig',
+'disambiguations-text'    => "Kelesi better '''aýrıqtı betke''' silteýdi. Bunıñ ornına belgili taqırıpqa siltewi qajet.<br />Eger [[{{ns:mediawiki}}:disambiguationspage]] tizimindegi ülgi qoldanılsa, bet aýrıqtı dep sanaladı.",
+
+'doubleredirects'         => 'Şınjırlı aýdatwlar',
+'doubleredirectstext'     => 'Ärbir joldağı birinşi men ekinşi aýdatw siltemeleri bar, sonımen birge ekinşi aýdatw mätinniñ birinşi jolı bar. Ädette birinşi silteme aýdaýtın «şın» aqırğı bettiñ atawı bolwı qajet.',
+
+'brokenredirects'         => 'Eş betke keltirmeýtin aýdatwlar',
+'brokenredirectstext'     => 'Kelesi aýdatwlar joq betterge silteýdi:',
+'brokenredirects-edit'    => '(öñdew)',
+'brokenredirects-delete'  => '(joyw)',
+
+'withoutinterwiki'        => 'Eş tilge siltemegen better',
+'withoutinterwiki-header' => 'Kelesi better basqa tilderge siltemeýdi:',
+
+'fewestrevisions' => 'Eñ az tüzetilgen better',
+# Miscellaneous special pages
+'nbytes'                          => '$1 B',
+'ncategories'                     => '$1 sanat',
+'nlinks'                          => '$1 silteme',
+'nmembers'                        => '$1 bwın',
+'nrevisions'                      => '$1 nusqa',
+'nviews'                          => '$1 ret qaralğan',
+'specialpage-empty'               => 'Bul bet bos.',
+'lonelypages'                     => 'Eş bet siltemegen better',
+'lonelypagestext'                 => 'Kelesi betterge osı jobadağı basqa better siltemeýdi.',
+'uncategorizedpages'              => 'Eş sanatqa kirmegen better',
+'uncategorizedcategories'         => 'Eş sanatqa kirmegen sanattar',
+'uncategorizedimages'             => 'Eş sanatqa kirmegen swretter',
+'unusedcategories'                => 'Paýdalanılmağan sanattar',
+'unusedimages'                    => 'Paýdalanılmağan faýldar',
+'popularpages'                    => 'Äýgili better',
+'wantedcategories'                => 'Bastalmağan sanattar',
+'wantedpages'                     => 'Bastalmağan better',
+'mostlinked'                      => 'Eñ köp siltengen better',
+'mostlinkedcategories'            => 'Eñ köp siltengen sanattar',
+'mostcategories'                  => 'Eñ köp sanattarğa kirgen better',
+'mostimages'                      => 'Eñ köp siltengen swretter',
+'mostrevisions'                   => 'Eñ köp tüzetilgen better',
+'allpages'                        => 'Barlıq bet tizimi',
+'prefixindex'                     => 'Bet bastaw tizimi',
+'randompage'                      => 'Kezdeýsoq bet',
+'randompage-nopages'              => 'Bul esim ayasında better joq.',
+'shortpages'                      => 'Eñ qısqa better',
+'longpages'                       => 'Eñ ülken better',
+
+'deadendpages'                    => 'Eş betke siltemeýtin better',
+'deadendpagestext'                => 'Kelesi better osı jobadağı basqa betterge siltemeýdi.',
+'protectedpages'                  => 'Qorğalğan better',
+'protectedpagestext'              => 'Kelesi better öñdewden nemese jıljıtwdan qorğalğan',
+'protectedpagesempty'             => 'Ağımda osındaý baptawlarımen eşbir bet qorğalmağan',
+'listusers'                       => 'Barlıq qatıswşı tizimi',
+'specialpages'                    => 'Arnaýı better',
+'spheading'                       => 'Barşanıñ arnaýı betteri',
+'restrictedpheading'              => 'Şektewli arnaýı better',
+'rclsub'                          => '(«$1» betinen siltengen betterge)',
+'newpages'                        => 'Eñ jaña better',
+'newpages-username'               => 'Qatıswşı atı:',
+'ancientpages'                    => 'Eñ eski better',
+'intl'                            => 'Tilaralıq siltemeler',
+'move'                            => 'Jıljıtw',
+'movethispage'                    => 'Betti jıljıtw',
+'unusedimagestext'                => '<p>Eskertw: Basqa veb toraptar faýldıñ
+URL jaýına tikeleý siltewi mümkin. Sondıqtan, belsendi paýdalanwına añğarmaý,
+osı tizimde qalwı mümkin.</p>',
+'unusedcategoriestext'            => 'Kelesi sanat better bar bolıp tur, biraq oğan eşqandaý bet, ne sanat kirmeýdi.',
+
+# Book sources
+'booksources'               => 'Kitap qaýnarları',
+'booksources-search-legend' => 'Kitap qaýnarların izdew',
+'booksources-isbn'          => 'ISBN belgisi:',
+'booksources-go'            => 'Ötw',
+'booksources-text'          => 'Tömende jaña jäne qoldanğan kitaptar satatıntoraptarınıñ siltemeleri tizimdelgen.
+Bul toraptarda izdelgen kitaptar twralı bılaýğı aqparat bolwğa mümkin.',
+
+'categoriespagetext' => 'Osında wïkïdegi barlıq sanattarınıñ tizimi berilip tur.',
+'data'               => 'Derekter',
+'userrights'         => 'Qatıswşılar quqıqtarın meñgerw',
+'groups'             => 'Qatıswşı toptarı',
+'isbn'               => 'ISBN',
+'alphaindexline'     => '$1 — $2',
+'version'            => 'Jüýe nusqası',
+
+# Special:Logs
+'specialloguserlabel'  => 'Qatıswşı:',
+'speciallogtitlelabel' => 'Ataw:',
+'log'                => 'Jwrnaldar',
+'log-search-legend'    => 'Jwrnaldardan izdew',
+'log-search-submit'    => 'Ötw',
+'alllogstext'          => '{{SITENAME}} jobasınıñ barlıq qatınawlı jwrnaldarın biriktirip körsetwi.
+Jwrnal türin, qatıswşı atın, ne tïisti betin talğap, tarıltıp qarawıñızğa boladı.',
+'logempty'           => 'Jwrnalda säýkes danalar joq.',
+'log-title-wildcard'   => 'Mınadaý mätinneñ bastalıtın atawlardan izdew',
+
+# Special:Allpages
+'nextpage'          => 'Kelesi betke ($1)',
+'prevpage'          => 'Aldıñğı betke ($1)',
+'allpagesfrom'      => 'Mına betten bastap körsetw:',
+'allarticles'       => 'Barlıq bet tizimi',
+'allinnamespace'    => 'Barlıq bet ($1 esim ayası)',
+'allnotinnamespace' => 'Barlıq bet ($1 esim ayasınan tıs)',
+'allpagesprev'      => 'Aldıñğığa',
+'allpagesnext'      => 'Kelesige',
+'allpagessubmit'    => 'Ötw',
+'allpagesprefix'    => 'Mınadan bastalğan betterdi körsetw:',
+'allpagesbadtitle'  => 'Alınğan bet atawı jaramsız bolğan, nemese til-aralıq ne wïkï-aralıq bastawı bar boldı. Atawda qoldanwğa bolmaýtın nışandar bolwı mümkin.',
+
+# Special:Listusers
+'listusersfrom' => 'Mına qatıswşıdan bastap körsetw:',
+'listusers-submit'   => 'Körset',
+'listusers-noresult' => 'Qatıswşı tabılğan joq.',
+
+# E-mail user
+'mailnologin'     => 'E-poşta jaýı jiberilgen joq',
+'mailnologintext' => 'Basqa qatıswşığa xat jiberw üşin
+[[{{ns:special}}:Userlogin|kirwiñiz]] qajet, jäne [[{{ns:special}}:Preferences|baptawıñızda]]
+kwälandırılğan e-poşta jaýı bolwı jön.',
+'emailuser'       => 'Qatıswşığa xat jazw',
+'emailpage'       => 'Qatıswşığa xat jiberw',
+'emailpagetext'   => 'Eger bul qatıswşı baptawlarında kwälandırğan e-poşta
+jaýın engizse, tömendegi ülgit arqılı buğan jalğız e-poşta xatın jiberwge boladı.
+Qatıswşı baptawıñızda engizgen e-poşta jaýıñız
+«Kimnen» degen bas jolağında körinedi, sondıqtan
+xat alwşısı twra jawap bere aladı.',
+'usermailererror' => 'Mail nısanı qate qaýtardı:',
+'defemailsubject' => '{{SITENAME}} e-poştasınıñ xatı',
+'noemailtitle'    => 'Bul e-poşta jaýı emes',
+'noemailtext'     => 'Osı qatıswşı jaramdı E-poşta jaýın engizbegen,
+nemese basqalardan xat qabıldawın öşirgen.',
+'emailfrom'       => 'Kimnen',
+'emailto'         => 'Kimge',
+'emailsubject'    => 'Taqırıbı',
+'emailmessage'    => 'Xat',
+'emailsend'       => 'Jiberw',
+'emailccme'       => 'Xatımdıñ köşirmesin mağan da jiber.',
+'emailccsubject'  => '$1 degenge jiberilgen xatıñızdıñ köşirmesi: $2',
+'emailsent'       => 'Xat jiberildi',
+'emailsenttext'   => 'E-poşta xatıñız jiberildi.',
+
+# Watchlist
+'watchlist'            => 'Baqılaw tizimi',
+'mywatchlist'          => 'Baqılawım',
+'watchlistfor'         => "('''$1''' baqılawları)",
+'nowatchlist'          => 'Baqılaw tizimiñizde eşbir dana joq',
+'watchlistanontext'    => 'Baqılaw tizimiñizdegi danalardı qaraw, ne öñdew üşin $1 qajet.',
+'watchlistcount'       => "'''Baqılaw tizimiñizde (talqılaw betterdi qosa) $1 dana bar.'''",
+'clearwatchlist'       => 'Baqılaw tizimin tazalaw',
+'watchlistcleartext'   => 'Solardı tolıq alastatwğa batılsız ba?',
+'watchlistclearbutton' => 'Baqılaw tizimin tazalaw',
+'watchlistcleardone'   => 'Baqılaw tizimiñiz tazartıldı. $1 dana alastatıldı.',
+'watchnologin'         => 'Kirmegensiz',
+'watchnologintext'     => 'Baqılaw tizimiñizdi özgertw üşin [[{{ns:special}}:Userlogin|kirwiñiz]] jön.',
+'addedwatch'           => 'Baqılaw tizimine qosıldı',
+'addedwatchtext'       => "«[[:$1]]» beti [[{{ns:special}}:Watchlist|baqılaw tizimiñizge]] qosıldı.
+Osı bettiñ jäne sonıñ talqılaw betiniñ keleşektegi özgeristeri mında tizimdeledi.
+Sonda bettiñ atawı tabwğa jeñildetip [[{{ns:special}}:Recentchanges|jwıqtağı özgerister tiziminde]]
+'''jwan ärpimen''' körsetiledi.
+
+Osı betti soñınan baqılaw tizimnen alastatıñız kelse «Baqılamaw» parağın nuqıñız.",
+'removedwatch'         => 'Baqılaw tizimiñizden alastatıldı',
+'removedwatchtext'     => '«[[:$1]]» beti baqılaw tizimiñizden alastatıldı.',
+'watch'                => 'Baqılaw',
+'watchthispage'        => 'Betti baqılaw',
+'unwatch'              => 'Baqılamaw',
+'unwatchthispage'      => 'Baqılawdı toqtatw',
+'notanarticle'         => 'Mağlumat beti emes',
+'watchnochange'        => 'Körsetilgen merzimde eşbir baqılanğan dana öñdelgen joq.',
+'watchdetails'         => "* Baqılaw tiziminde (talqılaw betterisiz) '''$1''' bet bar.
+* [[{{ns:special}}:Watchlist/edit|Bükil tizimdi qaraw jäne özgertw]].
+* [[{{ns:special}}:Watchlist/clear|Tizimdegi barlıq dana alastatw]].",
+'wlheader-enotif'      => '* Eskertw xat jiberwi endirilgen.',
+'wlheader-showupdated' => "* Soñğı kirgenimnen beri tüzetilgen betterdi '''jwan''' mätinmen körset",
+'watchmethod-recent'   => 'baqılawlı betterdiñ jwıqtağı özgeristerin tekserw',
+'watchmethod-list'     => 'jwıqtağı özgeristerde baqılawlı betterdi tekserw',
+'removechecked'        => 'Belgilengendi baqılaw tiziminen alastatw',
+'watchlistcontains'    => 'Baqılaw tizimiñizde {{PLURAL:$1|1 bet|$1 bet}} bar.',
+'watcheditlist'        => "Osında älippem surıptalğan baqılanğan mağlumat betteriñiz tizimdelingen.
+Betterdi alastatw üşin onıñ qasındağı qabaşaqtardı belgilep, tömendegi ''Belgilengendi alastat'' tüýmesin nuqıñız
+(mağlumat betin joýğanda talqılaw beti de birge joýıladı).",
+'removingchecked'      => 'Suranğan danalardı baqılaw tizimnen alastawı…',
+'couldntremove'        => '«$1» degen dana alastatılmadı…',
+'iteminvalidname'      => '«$1» danasınıñ jaramsız atawınan şataq twdı…',
+'wlnote'               => "Tömende soñğı {{PLURAL:$2|sağatta|'''$2''' sağatta}} bolğan, {{PLURAL:$1|jwıqtağı özgeris|jwıqtağı '''$1''' özgeris}} körsetilgen.",
+'wlshowlast'           => 'Soñğı $1 sağattağı, $2 kündegi, $3 bolğan özgeristi körsetw',
+'wlsaved'              => 'Bul baqılw tizimiñizdiñ saqtalğan nusqası.',
+'watchlist-show-bots'  => 'Bottardı körset',
+'watchlist-hide-bots'  => 'Bottardı jasır',
+'watchlist-show-own'   => 'Tüzetwimdi körset',
+'watchlist-hide-own'   => 'Tüzetwimdi jasır',
+'watchlist-show-minor' => 'Şağın tüzetwdi körset',
+'watchlist-hide-minor' => 'Şağın tüzetwdi jasır',
+'wldone'               => 'İs bitti.',
+
+# Displayed when you click the "watch" button and it's in the process of watching
+'watching'   => 'Baqılaw…',
+'unwatching' => 'Baqılamaw…',
+
+'enotif_mailer'      => '{{SITENAME}} eskertw xat jiberw qızmeti',
+'enotif_reset'       => 'Barlıq bet karaldi dep belgile',
+'enotif_newpagetext' => 'Mınaw jaña bet.',
+'changed'            => 'özgertti',
+'created'            => 'jasadı',
+'enotif_subject'     => '{{SITENAME}} jobasında $PAGEEDITOR $PAGETITLE atawlı betti $CHANGEDORCREATED',
+'enotif_lastvisited' => 'Soñğı kirwiñizden beri bolğan özgerister üşin $1 degendi qarañız.',
+'enotif_body'        => 'Qurmetti $WATCHINGUSERNAME,
+
+{{SITENAME}} jobasıda $PAGEEDITDATE kezinde $PAGEEDITOR $PAGETITLE atawlı betti $CHANGEDORCREATED, ağımdıq nusqasın $PAGETITLE_URL jaýınan qarañız.
+
+$NEWPAGE
+
+Öñdewşi sïpattaması: $PAGESUMMARY $PAGEMINOREDIT
+
+Öñdewşimen qatınasw:
+e-poşta: $PAGEEDITOR_EMAIL
+wïkï: $PAGEEDITOR_WIKI
+
+Bılaýğı özgerister bolğanda da siz osı betke barğanşa deýin eşqandaý basqa eskertw xattar jiberilmeýdi. Sonımen qatar baqılaw tizimiñizdegi bet eskertpelik belgisin ädepke küýine keltiriñiz.
+
+             Sizdiñ dostı {{SITENAME}} eskertw qızmeti
+
+----
+Baqılaw tizimiñizdi baptaw üşin, mında barıñız
+{{fullurl:{{ns:special}}:Watchlist/edit}}
+
+Sın-pikir berw jäne bılaýğı järdem alw üşin:
+{{fullurl:{{{{ns:mediawiki}}:helppage}}}}',
+
+# Delete/protect/revert
+'deletepage'                  => 'Betti joyw',
+'confirm'                     => 'Rastaw',
+'excontent'                   => 'bolğan mağlumatı: «$1»',
+'excontentauthor'             => 'bolğan mağlumatı: «$1» (tek «[[Special:Contributions/$2|$2]]» ülesi)',
+'exbeforeblank'               => 'tazartw aldındağı bolğan mağlumatı: «$1»',
+'exblank'                     => 'bet bostı boldı',
+'confirmdelete'               => 'Joywdı rastaw',
+'deletesub'                   => '(«$1» joywı)',
+'historywarning'              => 'Nazar salıñız: Joywğa arnalğan bette öz tarïxı bar:',
+'confirmdeletetext'           => 'Betti nemese swretti barlıq tarïxımen
+birge derekqordan ärdaýım joýığıñız keletin sïyaqtı.
+Bunı joywdıñ zardabın tüsinip şın nïettengeniñizdi, jäne
+[[{{{{ns:mediawiki}}:policy-url}}]] degenge laýıqtı dep
+sengeniñizdi rastañız.',
+'policy-url'                 => '{{ns:project}}:Erejeler',
+'actioncomplete'              => 'Äreket bitti',
+'deletedtext'                 => '«$1» joýıldı.
+Jwıqtağı joywlar twralı jazbaların $2 degennen qarañız.',
+'deletedarticle'              => '«[[$1]]» betin joýdı',
+'dellogpage'                  => 'Joyw_jwrnalı',
+'dellogpagetext'              => 'Tömende jwıqtağı joywlardıñ tizimi berilgen.',
+'deletionlog'                 => 'joyw jwrnalı',
+'reverted'                    => 'Erterek nusqasına qaýtarılğan',
+'deletecomment'               => 'Joywdıñ sebebi',
+'imagereverted'               => 'Erterek nusqasına qaýtarw sätti ötti.',
+'rollback'                    => 'Tüzetwlerdi qaýtarw',
+'rollback_short'              => 'Qaýtarw',
+'rollbacklink'                => 'qaýtarw',
+'rollbackfailed'              => 'Qaýtarw sätsiz ayaqtaldı',
+'cantrollback'                => 'Tüzetw qaýtarılmaýdı. Bul bettiñ soñğı üleskeri tek bastawış awtorı.',
+'alreadyrolled'               => '[[{{ns:user}}:$2|$2]] ([[{{ns:user_talk}}:$2|talqılawı]]) jasağan [[:$1]]
+degenniñ soñğı öñdewi qaýtarılmadı; keýbirew osı qazir betti öñdep ne qaýtarıp jatır tüge.
+
+Soñğı öñdewdi [[{{ns:user}}:$3|$3]] ([[{{ns:user_talk}}:$3|talqılawı]]) degendi jasağan.',
+'editcomment'                 => 'Tüzetwdiñ bolğan mändemesi: «<i>$1</i>».', # only shown if there is an edit comment
+'revertpage'                  => '[[{{ns:special}}:Contributions/$2|$2]] ([[{{ns:user_talk}}:$2|talqılawı]]) tüzetwlerin [[{{ns:user}}:$1|$1]] soñğı nusqasına qaýtardı',
+'sessionfailure'              => 'Kirw sessïyasında şataq bolğan sïyaqtı;
+sessïyağa şabwıldawdardan qorğanw üşin, osı äreket toqtatıldı.
+«Artqa» tüýmesin basıñız, jäne betti keri jükteñiz, sosın qaýtalap köriñiz.',
+'protectlogpage'              => 'Qorğaw_jwrnalı',
+'protectlogtext'              => 'Tömende betterdiñ qorğaw/qorğamaw tizimi berilgen. Ağımdağı qorğaw ärektter bar better üşin [[{{ns:special}}:Protectedpages|qorğalğan bet tizimin]] qarañız.',
+'protectedarticle'            => '«$1» qorğaldı',
+'unprotectedarticle'          => '«[[$1]]» qorğalmadı',
+'protectsub'                  => '(«$1» qorğawda)',
+'confirmprotecttext'          => 'Osı betti rasında da qorğaw qajet pe?',
+'confirmprotect'              => 'Qorğawdı rastaw',
+'protectmoveonly'             => 'Tek jıljıtwdan qorğaw',
+'protectcomment'              => 'Qorğaw sebebi',
+'protectexpiry'               => 'Bitetin merzimi',
+'protect_expiry_invalid'      => 'Bitetin waqıtı jaramsız.',
+'protect_expiry_old'          => 'Bitetin waqıtı ötip ketken.',
+'unprotectsub'                => '(«$1» qorğamawda)',
+'confirmunprotecttext'        => 'Osı betti rastan qorğamaw qajet pe?',
+'confirmunprotect'            => 'Qorğamawdı rastaw',
+'unprotectcomment'            => 'Qorğamaw sebebi',
+'protect-unchain'             => 'Jıljıtwğa ruqsat berw',
+'protect-text'                => '<strong>$1</strong> betiniñ qorğaw deñgeýin qaraý jäne özgerte alasız.',
+'protect-locked-blocked'      => 'Buğattawıñız öşirilgenşe deýin qorğaw deñgeýin özgerte almaýsız.
+Mına <strong>$1</strong> bettiñ ağımdıq baptawları:',
+'protect-locked-dblock'       => 'Derekqordıñ qulıptawı belsendi bolğandıqtan qorğaw deñgeýleri özgertilmeýdi.
+Mına <strong>$1</strong> bettiñ ağımdıq baptawları:',
+'protect-locked-access'       => 'Tirkelgiñizge bet qorğaw dengeýlerin özgertwine ruqsat joq.
+Mına <strong>$1</strong> bettiñ ağımdıq baptawları:',
+'protect-cascadeon'           => 'Bul bet ağımda qorğalğan, sebebi: osı bet bawlı qorğawı bar kelesi {{PLURAL:$1|betke|betterge}} kiristirilgen. Bul bettiñ qorğaw deñgeýin özgerte alasız, biraq bul bawlı qorğawğa ıqpal etpeýdi.',
+'protect-default'             => '(ädepki)',
+'protect-level-autoconfirmed' => 'Tirkelgisiz paýdalanwşılarğa tïım',
+'protect-level-sysop'         => 'Tek äkimşilerge ruqsat',
+'protect-summary-cascade'     => 'bawlı',
+'protect-expiring'            => 'bitwi: $1 (UTC)',
+'protect-cascade'             => 'Bawlı qorğaw — bul betke kiristirilgen ärqaýsı betterdi qorğaw.',
+'restriction-type'            => 'Ruqsat',
+'restriction-level'           => 'Ruqsat deñgeýi',
+'minimum-size'                => 'Eñ az mölşeri (baýt)',
+
+# Restrictions (nouns)
+'restriction-edit' => 'Öñdew',
+'restriction-move' => 'Jıljıtw',
+
+# Restriction levels
+'restriction-level-sysop'         => 'tolıq qorğalğan',
+'restriction-level-autoconfirmed' => 'jartılaý qorğalğan',
+'restriction-level-all'           => 'ärqaýsı deñgeýde',
+
+# Undelete
+'undelete'                 => 'Joýılğan betterdi qaraw',
+'undeletepage'             => 'Joýılğan betterdi qaraw jäne qaýtarw',
+'viewdeletedpage'          => 'Joýılğan betterdi qaraw',
+'undeletepagetext'         => 'Kelesi better joýıldı dep belgilengen, biraq mağlumatı murağatta jatqan,
+sondıqtan keri qaýtarwğa äzir. Murağat merzim boýınşa tazalanıp turwı mümkin.',
+'undeleteextrahelp'        => "Bükil betti qaýtarw üşin, barlıq qabaşaqtardı bos qaldırıp
+'''''Qaýtar!''''' tüýmesin nuqıñız. Bölekşe qaýtarw orındaw üşin, qaýtaraýın degen nusqalarına säýkes
+qabaşaqtarın belgileñiz de, jäne '''''Qaýtar!''''' tüýmesin nuqıñız. '''''Tasta''''' tüýmesin
+nuqığanda mändeme awmağı men barlıq qabaşaqtar tazalanadı.",
+'undeleterevisions'        => '{{PLURAL:$1|Bir nusqa|$1 nusqa}} murağattaldı',
+'undeletehistory'          => 'Eger bet mağlumatın qaýtarsañız,tarïxında barlıq nusqalar da
+qaýtarıladı. Eger joywdan soñ däl solaý atawımen jaña bet jasalsa, qaýtarılğan nusqalar
+tarïxtıñ eñ adında körsetiledi, jäne körsetilip turğan bettiñ ağımdıq nusqası
+özdikti almastırılmaýdı. Faýl nusqalarınıñ qaýtarğanda şektewleri joýılatın umıtpañız.',
+'undeleterevdel'           => 'Eger bettiñ üstiñgi nusqası jarım-jartılaý joýılğan bolsa joýılğan qaýtarwı
+ atqarılmaýdı. Osındaý jağdaýlarda, eñ jaña joýılğan nusqa belgilewin nemese jasırwın alastatıñız.
+Körwiñizge ruqsat etilmegen faýl nusqaları qaýtarılmaýdı.',
+'undeletehistorynoadmin'   => 'Bul bet joýılğan. Joyw sebebi aldındağı öñdegen qatıswşılar
+egjeý-tegjeýlerimen birge tömendegi sïpattamasında körsetilgen.
+Osı joýılğan nusqalardıñ mätini tek äkimşilerge qatınawlı.',
+'undelete-revision'        => '$2 kezindegi $1 degenniñ joýılğan nusqası:',
+'undeleterevision-missing' => 'Jaramsız ne joğalğan nusqa. Siltemeñiz jaramsız bolwı mümkin, ne
+nusqa qaýtarılğan tüge nemese murağattan alastatılğan.',
+'undeletebtn'              => 'Qaýtar!',
+'undeletereset'            => 'Tasta',
+'undeletecomment'          => 'Mändemesi:',
+'undeletedarticle'         => '«[[$1]]» qaýtardı',
+'undeletedrevisions'       => '{{plural:$1|Nusqanı|$1 nusqanı}} qaýtardı',
+'undeletedrevisions-files' => '{{plural:$1|Nusqanı|$1 nusqanı}} jäne {{plural:$2|faýldı|$2 faýldı}} qaýtardı',
+'undeletedfiles'           => '{{plural:$1|1 faýl|$1 faýl}} qaýtardı',
+'cannotundelete'           => 'Qaýtarw sätsiz bitti; tağı birew sizden burın sol betti qaýtarğan bolar.',
+'undeletedpage'            => "<big>'''$1 qaýtarıldı'''</big>
+
+Jwıqtağı joyw men qaýtarw jöninde [[{{ns:special}}:Log/delete|joyw jwrnalın]] qarañız.",
+'undelete-header'          => 'Jwıqtağı joýılğan better jöninde [[{{ns:special}}:Log/delete|joyw jwrnalın]] qarañız.',
+'undelete-search-box'      => 'Joýılğan betterdi izdew',
+'undelete-search-prefix'   => 'Mınadan bastalğan betterdi körset:',
+'undelete-search-submit'   => 'İzdew',
+'undelete-no-results'      => 'Joyw murağatında eşqandaý säýkes better tabılmadı.',
+
+# Namespace form on various pages
+'namespace' => 'Esim ayası:',
+'invert'    => 'Talğawdı kerilew',
+
+# Contributions
+'contributions' => 'Qatıswşı ülesi',
+'mycontris'     => 'Ülesim',
+'contribsub2'    => '$1 ($2) ülesi',
+'nocontribs'    => 'Osı izdew şartına säýkes özgerister tabılğan joq.',
+'ucnote'        => 'Tömende osı qatıswşınıñ soñğı <b>$2</b> kündegi, soñğı <b>$1</b> özgerisi körsetledi.',
+'uclinks'       => 'Soñğı $2 kündegi, soñğı $1 özgerisin qaraw.',
+'uctop'         => ' (üsti)',
+
+'sp-contributions-newest'      => 'Eñ jañasına',
+'sp-contributions-oldest'      => 'Eñ eskisine',
+'sp-contributions-newer'       => 'Jañalaw $1',
+'sp-contributions-older'       => 'Eskilew $1',
+'sp-contributions-newbies'     => 'Tek jaña tirkelgiden jasağan ülesterdi körset',
+'sp-contributions-newbies-sub' => 'Jañadan tirkelgi jasağandar üşin',
+'sp-contributions-blocklog'    => 'Buğattaw jwrnalı',
+'sp-contributions-search'      => 'Üles üşin izdew',
+'sp-contributions-username'    => 'IP jaý ne qatıswşı atı:',
+'sp-contributions-submit'      => 'İzdew',
+
+'sp-newimages-showfrom' => '$1 kezinen beri — jaña swretterdi körset',
+
+# What links here
+'whatlinkshere'         => 'Siltegen better',
+'whatlinkshere-barrow'  => '&lt;',
+'notargettitle'         => 'Aqırğı ataw joq',
+'notargettext'          => 'Osı äreket orındalatın nısana bet,
+ne qatıswşı körsetilmegen.',
+'linklistsub'           => '(Siltemeler tizimi)',
+'linkshere'             => "'''[[:$1]]''' degenge mına better silteýdi:",
+'nolinkshere'           => "'''[[:$1]]''' degenge eş bet siltemeýdi.",
+'nolinkshere-ns'        => "Talğanğan esim ayasında '''[[:$1]]''' degenge eşqandaý bet siltemeýdi.",
+'isredirect'            => 'aýdatw beti',
+'istemplate'            => 'kiriktirw',
+'whatlinkshere-prev'    => '{{PLURAL:$1|aldıñğı|aldıñğı $1}}',
+'whatlinkshere-next'    => '{{PLURAL:$1|kelesi|kelesi $1}}',
+
+# Block/unblock
+'blockip'                     => 'Paýdalanwşını buğattaw',
+'blockiptext'                 => 'Tömendegi ülgit paýdalanwşınıñ jazw 
+ruqsatın belgili IP jaýımen ne atawımen buğattaw üşin qoldanıladı.
+Bunı tek buzaqılıqqa kedergi istew üşin jäne de
+[[{{{{ns:mediawiki}}:policy-url}}|erejeler]] boýınşa atqarwıñız jön.
+Tömende tïisti sebebin toltırıp körsetiñiz (mısalı, däýekke buzaqılıqpen
+özgertken betterdi keltirip).',
+'ipaddress'                   => 'IP jaý',
+'ipadressorusername'          => 'IP jaý ne atı',
+'ipbexpiry'                   => 'Bitetin merzimi',
+'ipbreason'                   => 'Sebebi',
+'ipbreasonotherlist'          => 'Basqa sebep',
+// These are examples only. They can be translated but should be adjusted via
+// [[MediaWiki:ipbreason-list]] by the local community
+// defines a block reason not part of a group
+// * defines a block reason group in the drow down menu
+// ** defines a block reason
+// To disable this drop down menu enter '-' in [[MediaWiki:ipbreason-dropdown]].
+'ipbreason-dropdown'    => '
+* Buğattawdıñ jalpı sebebteri 
+** Buzaqılıq: jalğan mälimet engizw 
+** Buzaqılıq: betterdegi mağlumattı joyw 
+** Buzaqılıq: sırtqı toraptar siltemelerin jawdırw 
+** Buzaqılıq: betterge böstekilik/qïsınsızdıq kiristrirw 
+** Qoqandaw/qwğındaw minezqulıq 
+** Köptegen tirkelgilerdi jasap qïyanattaw 
+** Qolaýsız qatıswşı atawı',
+'ipbanononly'                 => 'Tek tirkelgisiz paýdalanwşılardı buğattaw',
+'ipbcreateaccount'            => 'Tirkelgi jasawın kedergilew',
+'ipbenableautoblock'          => 'Bul paýdalanwşı soñğı qoldanğan IP jaýı, jäne keýin tüzetw istewge baýqap qaralğan ärqaýsı IP jaýları özdikti buğattalsın',
+'ipbsubmit'                   => 'Paýdalanwşını buğattaw',
+'ipbother'                    => 'Basqa merzim',
+'ipboptions'                  => '2 sağat:2 hours,1 kün:1 day,3 kün:3 days,1 apta:1 week,2 apta:2 weeks,1 aý:1 month,3 aý:3 months,6 aý:6 months,1 jıl:1 year,mängi:infinite',
+'ipbotheroption'              => 'basqa',
+'ipbotherreason'              => 'Basqa/qosımşa sebep',
+'ipbhidename'                 => 'Buğattaw jwrnalındağı, belsendi buğattaw tizimindegi, qatıswşı tiziminnegi atı/IP jasırılsın',
+'badipaddress'                => 'Jaramsız IP jaý',
+'blockipsuccesssub'           => 'Buğattaw sätti ötti',
+'blockipsuccesstext'          => '[[{{ns:special}}:Contributions/$1|$1]] degen buğattalğan.
+<br />Buğattardı şolıp şığw üşin [[{{ns:special}}:Ipblocklist|IP buğattaw tizimin]] qarañız.',
+'ipb-edit-dropdown'           => 'Buğattaw sebepterin öñdew',
+'ipb-unblock-addr'            => '$1 degendi buğattamaw',
+'ipb-unblock'                 => 'Qatıswşı atın nemese IP jaýın buğattamaw',
+'ipb-blocklist-addr'          => '$1 üşin bar buğattawlardı qaraw',
+'ipb-blocklist'               => 'Bar buğattawlardı qaraw',
+'unblockip'                   => 'Paýdalanwşını buğattamaw',
+'unblockiptext'               => 'Tömendegi ülgit belgili IP jaýımen ne atawımen
+burın buğattalğan paýdalanwşınıñ jazw ruqsatın qaýtarw üşin qoldanıladı.',
+'ipusubmit'                   => 'Osı jaýdı buğattamaw',
+'unblocked'                   => '[[{{ns:user}}:$1|$1]] buğattawı öşirildi',
+'ipblocklist'                 => 'Buğattalğan paýdalanwşı / IP- jaý tizimi',
+'ipblocklist-submit'          => 'İzdew',
+'blocklistline'               => '$1, $2 «$3» degendi buğattadı ($4)',
+'infiniteblock'               => 'mängi',
+'expiringblock'               => 'bitwi: $1',
+'anononlyblock'               => 'tek tirkelgisizdi',
+'noautoblockblock'            => 'özdik buğattaw öşirilengen',
+'createaccountblock'          => 'tirkelgi jasawı buğattalğan',
+'ipblocklistempty'            => 'Buğattaw tizimi bos, nemeseruranısqan IP jaý/qatıswşı atı buğattalğan joq.',
+'blocklink'                   => 'buğattaw',
+'unblocklink'                 => 'buğattamaw',
+'contribslink'                => 'ülesi',
+'autoblocker'                 => "IP jaýıñızdı jwıqta «[[{{ns:user}}:1|$1]]» paýdalanğan, sondıqtan özdik türde buğattalğan. $1 buğattaw sebebi: «$2».",
+'blocklogpage'                => 'Buğattaw_jwrnalı',
+'blocklogentry'               => '«[[$1]]» degendi $2 merzimge buğattadı $3',
+'blocklogtext'                => 'Bul paýdalanwşılardı buğattaw/buğattamaw äreketteriniñ jwrnalı. Özdik türde
+buğattalğan IP jaýlar osında tizimdelgemegen. Ağımdağı belsendi buğattawların
+[[{{ns:special}}:Ipblocklist|IP buğattaw tiziminen]] qarawğa boladı.',
+'unblocklogentry'             => '«$1» degenniñ buğattawın öşirdi',
+'block-log-flags-anononly'    => 'tek tirkelmegender',
+'block-log-flags-nocreate'    => 'tirkelgi jasaw öşirilgen',
+'block-log-flags-noautoblock'   => 'özdikti buğattağış öşirilgen',
+'range_block_disabled'        => 'Awqım buğattawın jasaw äkimşilik mümkindigi öşirilgen.',
+'ipb_expiry_invalid'          => 'Bitetin waqıtı jaramsız.',
+'ipb_already_blocked'         => '«$1» buğattalğan tüge',
+'ip_range_invalid'            => 'IP jaý awqımı jaramsız.',
+'proxyblocker'                => 'Proksï serverlerdi buğattawış',
+'ipb_cant_unblock'            => 'Qate: IP $1 buğattawı tabılmadı. Onıñ buğattawı öşirlgen sïyaqtı.',
+'proxyblockreason'            => 'IP jaýıñız aşıq proksï serverge jatatındıqtan buğattalğan. Ïnternet qızmetin jabdıqtawşıñızben, ne texnïkalıq medew qızmetimen qatınasıñız, jäne olarğa osı ote kürdeli qawıpsizdik şataq twralı aqparat beriñiz.',
+'proxyblocksuccess'           => 'Bitti.',
+'sorbs'                       => 'DNSBL qara tizimi',
+'sorbsreason'                 => 'Sizdiñ IP jaýıñız osı torapta qoldanılğan DNSBL qara tizimindegi aşıq proksï-server dep tabıladı.',
+'sorbs_create_account_reason' => 'Sizdiñ IP jaýıñız osı torapta qoldanılğan DNSBL qara tizimindegi aşıq proksï-server dep tabıladı. Tirkelgi jasaý almaýsız.',
+
+# Developer tools
+'lockdb'              => 'Derekqordı qulıptaw',
+'unlockdb'            => 'Derekqordı qulıptamaw',
+'lockdbtext'          => 'Derekqordın qulıptalwı barlıq paýdalanwşınıñ
+bet öñdew, baptawın qalaw, baqılaw tizimin, tağı basqa
+derekqordı özgertetin mümkindikterin toqtata turadı.
+Osı maqsatıñızdı, jäne jöndewiñiz bitkende
+derekqordı aşatıñızdı rastañız.',
+'unlockdbtext'        => 'Derekqodın aşılwı barlıq paýdalanwşınıñ bet öñdew,
+baptawın qalaw, baqılaw tizimin, tağı basqa derekqordı özgertetin
+mümkindikterin qaýta aşadı.
+Osı maqsatıñızdı rastañız.',
+'lockconfirm'         => 'Ïä, men derekqordı rastan qulıptaýmın.',
+'unlockconfirm'       => 'Ïä, men derekqordı rastan qulıptamaýmın.',
+'lockbtn'             => 'Derekqordı qulıpta',
+'unlockbtn'           => 'Derekqordı qulıptama',
+'locknoconfirm'       => 'Rastaw belgisin qoýmapsız.',
+'lockdbsuccesssub'    => 'Derekqordı qulıptaw sätti ötti',
+'unlockdbsuccesssub'  => 'Qulıptalğan derekqor aşıldı',
+'lockdbsuccesstext'   => 'Derekqor qulıptaldı.
+<br />Jöndewiñiz bitkennen keýin [[{{ns:special}}:Unlockdb|qulıptawın öşirwge]] umıtpañız.',
+'unlockdbsuccesstext' => 'Qulıptalğan derekqor sätti aşıldı.',
+'lockfilenotwritable' => 'Derekqor qulıptaw faýlı jazılmaýdı. Derekqordı qulıptaw ne aşw üşin, veb-server faýlğa jazw ruqsatı bolw qajet.',
+'databasenotlocked'   => 'Derekqor qulıptalğan joq.',
+
+# Move page
+'movepage'                => 'Betti jıljıtw',
+'movepagetext'            => "Tömendegi ülgitti qoldanıp betterdi qaýta ataýdı,
+barlıq tarïxın jaña atawğa jıljıtadı.
+Burınğı bet atawı jaña atawğa aýdatatın bet boladı.
+Eski atawına silteýtin  siltemeler özgertilmeýdi; jıljıtwdan soñ
+şınjırlı aýdatwlar bar-joğın tekseriñiz.
+Siltemeler burınğı joldawımen bılaýğı ötwin tekserwine
+siz mindetti bolasız.
+
+Eskeriñiz, eger jıljıtılatın atawda bet bolsa, sol eski betke aýdatw
+bolğanşa jäne tarïxı bolsa, bet '''jıljıtılmaýdı'''.
+Osınıñ mağınası: eger betti qatelik pen qaýta atalsa,
+burınğı atawına qaýta atawğa boladı,
+biraq bar bettiñ üstine jazwğa bolmaýdı.
+
+<b>NAZAR SALIÑIZ!</b>
+Bul däripti betke qatañ jäne kenet özgeris jasawğa mümkin;
+ärekettiñ aldınan osınıñ zardaptarın tüsingeniñizge batıl
+bolıñız.",
+'movepagetalktext'        => "Kelesi sebepter '''bolğanşa''' deýin, talqılaw beti özdik türde birge jıljıtıladı:
+* Bos emes talqılaw beti jaña atawda bolğanda, nemese
+* Tömendegi qabışaqta belgini alastatqanda.
+
+Osı oraýda, qalawıñız bolsa, betti qoldan jıljıta ne qosa alasız.",
+'movearticle'             => 'Betti jıljıtw',
+'movenologin'             => 'Jüýege kirmegensiz',
+'movenologintext'         => 'Betti jıljıtw üşin tirkelgen bolwıñız jäne
+ [[{{ns:special}}:Userlogin|kirwiñiz]] qajet.',
+'newtitle'                => 'Jaña atawğa',
+'move-watch'              => 'Bul betti baqılaw',
+'movepagebtn'             => 'Betti jıljıt',
+'pagemovedsub'            => 'Jıljıtw sätti ayaqtaldı',
+'pagemovedtext'           => '«[[$1]]» beti «[[$2]]» betine jıljıtıldı.',
+'articleexists'           => 'Bılaý atawlı bet bar boldı, ne tañdağan
+atawıñız jaramdı emes.
+Basqa ataw tandañız',
+'talkexists'              => "'''Bettiñ özi sätti jıljıtıldı, biraq talqılaw beti birge jıljıtılmadı, onıñ sebebi jaña atawdıñ talqılaw beti bar tüge. Bunı qolmen qosıñız.'''",
+'movedto'                 => 'mınağan jıljıtıldı:',
+'movetalk'                => 'Qatıstı talqılaw betimen birge jıljıtw',
+'talkpagemoved'           => 'Qatıstı talqılaw beti de jıljıtıldı.',
+'talkpagenotmoved'        => 'Qatıstı talqılaw beti <strong>jıljıtılmadı</strong>.',
+'1movedto2'               => '«[[$1]]» betinde aýdatw qaldırıp «[[$2]]» betine jıljıttı',
+'1movedto2_redir'         => '«[[$1]]» betin «[[$2]]» aýdatw betiniñ üstine jıljıttı',
+'movelogpage'             => 'Jıljıtw jwrnalı',
+'movelogpagetext'         => 'Tömende jıljıtılğan betterdiñ tizimi berilip tur.',
+'movereason'              => 'Sebebi',
+'revertmove'              => 'qaýtarw',
+'delete_and_move'         => 'Joyw jäne jıljıtw',
+'delete_and_move_text'    => '==Joyw qajet==
+
+Aqırğı «[[$1]]» bet atawı bar tüge.
+Jıljıtwğa jol berw üşin joyamız ba?',
+'delete_and_move_confirm' => 'Ïä, osı betti joý',
+'delete_and_move_reason'  => 'Jıljıtwğa jol berw üşin joýılğan',
+'selfmove'                => 'Qaýnar jäne aqırğı atawı birdeý; bet özine jıljıtılmaýdı.',
+'immobile_namespace'      => 'Qaýnar nemese aqırğı atawı arnaýı türinde boldı; osındaý esim ayası jağına jäne jağınan better jıljıtılmaýdı.',
+
+# Export
+'export'          => 'Betterdi sırtqa berw',
+'exporttext'      => 'XML pişimine qaptalğan bölek bet ne better bwması
+mätiniñ jäne öñdew tarïxın sırtqa bere alasız. Osını, basqa wïkïge
+jüýeniñ [[{{ns:special}}:Import|sırttan alw betin]] paýdalanıp, alwğa boladı.
+
+Betterdi sırtqa berw üşin, atawların tömendegi mätin awmağına engiziñiz,
+bir jolda bir ataw, jäne tandañız: ne ağımdıq nusqasın, barlıq eski nusqaları men
+jäne tarïxı joldarı men birge, ne däl ağımdıq nusqasın, soñğı öñdew twralı aqparatı men birge.
+
+Soñğı jağdaýda siltemeni de, mısalı {{{{ns:mediawiki}}:mainpage}} beti üşin [[{{ns:special}}:Export/{{MediaWiki:mainpage}}]] qoldanwğa boladı.',
+'exportcuronly'   => 'Tolıq tarïxın emes, tek ağımdıq nusqasın kiristiriñiz',
+'exportnohistory' => "----
+'''Añğartpa:''' Önimdilik äseri sebepterinen, better tolıq tarïxın sırtqa berwi öşirilgen.",
+'export-submit'   => 'Sırtqa ber',
+'export-addcattext' => 'Mına sanattağı betterdi üstew:',
+'export-addcat' => 'Üste',
+
+# Namespace 8 related
+'allmessages'               => 'Jüýe xabarları',
+'allmessagesname'           => 'Atawı',
+'allmessagesdefault'        => 'Ädepki mätini',
+'allmessagescurrent'        => 'Ağımdıq mätini',
+'allmessagestext'           => 'Mında «MediaWiki:» esim ayasındağı barlıq qatınawlı jüýe xabar tizimi berilip tur.',
+'allmessagesnotsupportedUI' => 'Your current interface language <b>$1</b> is not supported by Special:Allmessages at this site.',
+'allmessagesnotsupportedDB' => "'''wgUseDatabaseMessages''' babı öşirilgen sebebinen '''{{ns:special}}:AllMessages''' sïpatı süemeldenbeýdi.",
+'allmessagesfilter'         => 'Xabardı atawı boýınşa süzgilew:',
+'allmessagesmodified'       => 'Tek özgertilgendi körset',
+
+# Thumbnails
+'thumbnail-more'  => 'Ülkeýtw',
+'missingimage'    => '<b>Joğalğan swret </b><br /><i>$1</i>',
+'filemissing'     => 'Joğalğan faýl',
+'thumbnail_error' => 'Nobaý qurw qatesi: $1',
+'djvu_page_error'          => 'DjVu beti mümkindi awmaqtıñ sırtındda',
+'djvu_no_xml'              => 'DjVu faýlına XML keltirwge bolmaýdı',
+'thumbnail_invalid_params' => 'Nobaýdıñ baptarı jaramsız',
+'thumbnail_dest_directory' => 'Aqırğı qalta jasalmadı',
+# Special:Import
+'import'                     => 'Betterdi sırttan alw',
+'importinterwiki'            => 'Wïkï-tasımaldap sırttan alw',
+'import-interwiki-text'      => 'Sırttan alatın wïkï jobasın jäne bet atawın tandañız.
+Nusqa kün-aýı jäne öñdewşi attarı saqtaladı.
+Barlıq wïkï-tasımaldap sırttan alw äreketter [[{{ns:special}}:Log/import|sırttan alw jwrnalına]] jazılıp alınadı.',
+'import-interwiki-history'   => 'Osı bettiñ barlıq tarïxï nusqaların köşirw',
+'import-interwiki-submit'    => 'Sırttan alw',
+'import-interwiki-namespace' => 'Mına esim ayasına betterdi tasımaldaw:',
+'importtext'                 => 'Qaýnar wïkïden «Special:Export» qwralın qoldanıp, faýldı sırtqa beriñiz, dïskiñizge saqtañız, sosın mında qotarıñız.',
+'importstart'                => 'Betterdi sırttan alwı…',
+'import-revision-count'      => '$1 nusqa',
+'importnopages'              => 'Sırttan alınatın better joq.',
+'importfailed'               => 'Sırttan alw sätsiz bitti: $1',
+'importunknownsource'        => 'Cırttan alw qaýnar türi tanımalsız',
+'importcantopen'             => 'Sırttan alw faýlı aşılmaýdı',
+'importbadinterwiki'         => 'Jaramsız wïkï-aralıq silteme',
+'importnotext'               => 'Bostı, ne mätini joq',
+'importsuccess'              => 'Sırttan alw sätti ayaqtaldı!',
+'importhistoryconflict'      => 'Tarïxınıñ eges nusqaları bar (bul betti aldında sırttan alınğan sïyaqtı)',
+'importnosources'            => 'Eşqandaý wïkï-tasımaldap sırttan alw qaýnarı belgilenmegen, jäne tarïxın tikeleý qotarwı öşirilgen.',
+'importnofile'               => 'Sırttan alınatın faýl qotarılğan joq.',
+'importuploaderror'          => 'Sırttan alw faýldıñ qotarwı sätsiz bitti; osı faýl mölşeri ruqsat etilgen mölşerden aswı mümkin.',
+
+# Import log
+'importlogpage'                    => 'Sırttan alw jwrnalı',
+'importlogpagetext'                => 'Basqa wïkïlerden öñdew tarïxımen birge betterdi äkimşilik retinde sırttan alw.',
+'import-logentry-upload'           => 'faýl qotarwımen sırttan «[[$1]]» beti alındı',
+'import-logentry-upload-detail'    => '$1 nusqa',
+'import-logentry-interwiki'        => 'wïkï-tasımaldanğan $1',
+'import-logentry-interwiki-detail' => '$2 degennen $1 nusqa',
+
+# Tooltip help for the actions
+'tooltip-pt-userpage'             => 'Jeke betim',
+'tooltip-pt-anonuserpage'         => 'Osı IP jaýdıñ jeke beti',
+'tooltip-pt-mytalk'               => 'Talqılaw betim',
+'tooltip-pt-anontalk'             => 'Osı IP jaý tüzetwlerin talqılaw',
+'tooltip-pt-preferences'          => 'Baptawım',
+'tooltip-pt-watchlist'            => 'Özgeristerin baqılap turğan better tizimim.',
+'tooltip-pt-mycontris'            => 'Ülesterimdiñ tizimi',
+'tooltip-pt-login'                => 'Kirwiñizdi usınamız, ol mindetti emes.',
+'tooltip-pt-anonlogin'            => 'Kirwiñizdi usınamız, biraq, ol mindetti emes.',
+'tooltip-pt-logout'               => 'Şığw',
+'tooltip-ca-talk'                 => 'Mağlumat betti talqılaw',
+'tooltip-ca-edit'                 => 'Bul betti öñdeý alasız. Saqtawdıñ aldında «Qarap şığw» tüýmesin nuqıñız.',
+'tooltip-ca-addsection'           => 'Bul talqılaw betinde jaña taraw bastaw.',
+'tooltip-ca-viewsource'           => 'Bul bet qorğalğan, biraq, qaýnarın qarawğa boladı.',
+'tooltip-ca-history'              => 'Bul bettin jwıqtağı nusqaları.',
+'tooltip-ca-protect'              => 'Bul betti qorğaw',
+'tooltip-ca-delete'               => 'Bul betti joyw',
+'tooltip-ca-undelete'             => 'Bul bettiñ joywdıñ aldındağı bolğan tüzetwlerin qaýtarw',
+'tooltip-ca-move'                 => 'Bul betti jıljıtw',
+'tooltip-ca-watch'                => 'Bul betti baqılaw tizimiñizge üstew',
+'tooltip-ca-unwatch'              => 'Bul betti baqılaw tizimiñizden alastatw',
+'tooltip-search'                  => '{{SITENAME}} jobasınan izdestirw',
+'tooltip-p-logo'                  => 'Bastı betke',
+'tooltip-n-mainpage'              => 'Bastı betke barıp ketiñiz',
+'tooltip-n-portal'                => 'Joba twralı, ne istewiñizge bolatın, qaýdan tabwğa bolatın twralı',
+'tooltip-n-currentevents'         => 'Ağımdağı oqïğalarğa qatıstı aqparat',
+'tooltip-n-recentchanges'         => 'Osı wïkïdegi jwıqtağı özgerister tizimi.',
+'tooltip-n-randompage'            => 'Kezdeýsoq betti jüktew',
+'tooltip-n-help'                  => 'Anıqtama tabw ornı.',
+'tooltip-n-sitesupport'           => 'Bizge järdem etiñiz',
+'tooltip-t-whatlinkshere'         => 'Mında siltegen barlıq betterdiñ tizimi',
+'tooltip-t-recentchangeslinked'   => 'Mınnan siltengen betterdiñ jwıqtağı özgeristeri',
+'tooltip-feed-rss'                => 'Bul bettiñ RSS arnası',
+'tooltip-feed-atom'               => 'Bul bettiñ Atom arnası',
+'tooltip-t-contributions'         => 'Osı qatıswşınıñ üles tizimin qaraw',
+'tooltip-t-emailuser'             => 'Osı qatıswşığa email jiberw',
+'tooltip-t-upload'                => 'Swret ne medïa faýldarın qotarw',
+'tooltip-t-specialpages'          => 'Barlıq arnaýı better tizimi',
+'tooltip-ca-nstab-main'           => 'Mağlumat betin qaraw',
+'tooltip-ca-nstab-user'           => 'Qatıswşı betin qaraw',
+'tooltip-ca-nstab-media'          => 'Taspa betin qaraw',
+'tooltip-ca-nstab-special'        => 'Bul arnaýı bet, bettiñ özi öñdelinbeýdi.',
+'tooltip-ca-nstab-project'        => 'Joba betin qaraw',
+'tooltip-ca-nstab-image'          => 'Swret betin qaraw',
+'tooltip-ca-nstab-mediawiki'      => 'Jüýe xabarın qaraw',
+'tooltip-ca-nstab-template'       => 'Ülgini qaraw',
+'tooltip-ca-nstab-help'           => 'Anıqtıma betin qaraw',
+'tooltip-ca-nstab-category'       => 'Sanat betin qaraw',
+'tooltip-minoredit'               => 'Osını şağın tüzetw dep belgilew',
+'tooltip-save'                    => 'Tüzetwiñizdi saqtaw',
+'tooltip-preview'                 => 'Saqtawdıñ aldınan tüzetwiñizdi qarap şığıñız!',
+'tooltip-diff'                    => 'Mätinge qandaý özgeristerdi jasağanıñızdı qaraw.',
+'tooltip-compareselectedversions' => 'Bettiñ eki nusqasınıñ aýırmasın qaraw.',
+'tooltip-watch'                   => 'Bul betti baqılaw tizimiñizge üstew',
+'tooltip-recreate'                => 'Bet joýılğanına qaramastan qaýta jasaw',
+
+# Stylesheets
+'common.css'   => '/* Mındağı CSS ämirleri barlıq bezendirw mänerinderde qoldanıladı */',
+'monobook.css' => '/* Mındağı CSS ämirleri «Dara kitap» bezendirw mänerin paýdalanwşılarğa äser etedi */',
+
+# Scripts
+'common.js'   => '/* Мындағы JavaScript әмірлері әрқайсы бет қаралғанда барлық пайдаланушыларға жүктеледі. */
+
+/* Workaround for language variants */
+
+// Set user-defined "lang" attributes for the document element (from zh)
+var htmlE=document.documentElement;
+if (wgUserLanguage == "kk"){ variant = "kk"; }
+if (wgUserLanguage == "kk-kz"){ variant = "kk-Cyrl"; }
+if (wgUserLanguage == "kk-tr"){ variant = "kk-Latn"; }
+if (wgUserLanguage == "kk-cn"){ variant = "kk-Arab"; htmlE.setAttribute("dir","rtl"); }
+htmlE.setAttribute("lang",variant);
+htmlE.setAttribute("xml:lang",variant);
+
+// Switch language variants of messages (from zh)
+function wgULS(kz,tr,cn){
+        //
+        kk=kz||tr||cn;
+        kz=kz;
+        tr=tr;
+        cn=cn;
+        switch(wgUserLanguage){
+                case "kk": return kk;
+                case "kk-kz": return kz;
+                case "kk-tr": return tr;
+                case "kk-cn": return cn;
+                default: return "";
+        }
+}
+
+// workaround for RTL ([[bugzilla:6756]])  and for [[bugzilla:02020]] & [[bugzilla:04295]]
+if (wgUserLanguage == "kk-cn") 
+{
+  document.direction="rtl";
+  document.write(\'<link rel="stylesheet" type="text/css" href="\'+stylepath+\'/common/common_rtl.css">\');
+  document.write(\'<style type="text/css">html {direction:rtl;} body {direction:rtl; unicode-bidi:embed; lang:kk-Arab; font-family:"Arial Unicode MS",Arial,Tahoma; font-size: 75%; letter-spacing: 0.001em;} html > body div#content ol {clear: left;} ol {margin-left:2.4em; margin-right:2.4em;} ul {margin-left:1.5em; margin-right:1.5em;} h1.firstHeading {background-position: bottom right; background-repeat: no-repeat;} h3 {font-size:110%;} h4 {font-size:100%;} h5 {font-size:90%;} #catlinks {width:100%;} #userloginForm {float: right !important;}</style>\');
+
+  if (skin == "monobook"){
+     document.write(\'<link rel="stylesheet" type="text/css" href="\'+stylepath+\'/monobook/rtl.css">\');
+  }
+}',
+'monobook.js' => '/* Бостекі болды; орнына мынаны [[MediaWiki:common.js]] пайдалаңыз */',
+
+# Metadata
+'nodublincore'      => 'Osı serverge «Dublin Core RDF» meta-derekteri öşirilgen.',
+'nocreativecommons' => 'Osı serverge «Creative Commons RDF» meta-derekteri öşirilgen.',
+'notacceptable'     => 'Osı wïkï serveri sizdiñ «paýdalanwşı äreketkişi» oqï alatın pişimi bar derekterdi jibere almaýdı.',
+
+# Attribution
+'anonymous'        => '{{SITENAME}} tirkelgisiz paýdalanwşı(lar)ı',
+'siteuser'         => '{{SITENAME}} qatıswşı $1',
+'lastmodifiedatby' => 'Bul betti $3 qatıswşı soñğı özgertken kezi: $2, $1.', # $1 date, $2 time, $3 user
+'and'              => 'jäne',
+'othercontribs'    => 'Şığarma negizin $1 jazğan.',
+'others'           => 'basqalar',
+'siteusers'        => '{{SITENAME}} qatıswşı(lar) $1',
+'creditspage'      => 'Betti jazğandar',
+'nocredits'        => 'Bul betti jazğandar twralı aqparat joq.',
+
+# Spam protection
+'spamprotectiontitle'    => '«Spam»-nan qorğaýtın süzgi',
+'spamprotectiontext'     => 'Bul bettiñ saqtawın «spam» süzgisi buğattadı. Bunıñ sebebi sırtqı torap siltemesinen bolwı mümkin.',
+'spamprotectionmatch'    => 'Kelesi «spam» mätini süzgilengen: $1',
+'subcategorycount'       => 'Bul sanatta {{PLURAL:$1|bir|$1}} tömengi sanat bar.',
+'categoryarticlecount'   => 'Bul sanatta {{PLURAL:$1|bir|$1}} bet bar.',
+'category-media-count'   => 'Bul sanatta {{PLURAL:$1|bir|$1}} faýl bar.',
+'listingcontinuesabbrev' => ' (jalğ.)',
+'spambot_username'       => 'MediaWiki spam cleanup',
+'spam_reverting'         => '$1 degenge siltemesi joq soñğı nusqasına qaýtarıldı',
+'spam_blanking'          => '$1 degenge siltemesi bar barlıq nusqalar tazartıldı',
+
+# Info page
+'infosubtitle'   => 'Bet twralı aqparat',
+'numedits'       => 'Tüzetw sanı (negizgi bet): $1',
+'numtalkedits'   => 'Tüzetw sanı (talqılaw beti): $1',
+'numwatchers'    => 'Baqılawşı sanı: $1',
+'numauthors'     => 'Ärtürli awtorlar sanı (negizgi beti): $1',
+'numtalkauthors' => 'Ärtürli awtor sanı (talqılaw beti): $1',
+
+# Math options
+'mw_math_png'    => 'Ärqaşan PNG türimen körset',
+'mw_math_simple' => 'Kädimgi bolsa HTML pişimimen, basqaşa PNG türimen',
+'mw_math_html'   => 'Iqtïmal bolsa HTML pişimimen, basqaşa PNG türimen',
+'mw_math_source' => 'TeX pişiminde qaldırw (mätindik şolğıştarına)',
+'mw_math_modern' => 'Osı zamannıñ şolğıştarına usınılğan',
+'mw_math_mathml' => 'Iqtïmal bolsa MathML pşimimen (sınaq türinde)',
+
+# Patrolling
+'markaspatrolleddiff'                 => 'Küzette dep belgilew',
+'markaspatrolledtext'                 => 'Osı betti küzetwde dep belgilew',
+'markedaspatrolled'                   => 'Küzette dep belgilendi',
+'markedaspatrolledtext'               => 'Talğanğan nusqa küzette dep belgilendi.',
+'rcpatroldisabled'                    => 'Jwıqtağı özgerister Küzeti öşirilgen',
+'rcpatroldisabledtext'                => 'Jwıqtağı özgerister Küzeti qasïeti ağımda öşirilgen.',
+'markedaspatrollederror'              => 'Küzette dep belgilenbeýdi',
+'markedaspatrollederrortext'          => 'Küzette dep belgilew üşin nusqasın engiziñiz.',
+'markedaspatrollederror-noautopatrol' => 'Öziñizdiñ özgeristeriñizdi küzetke qoya almaýsız.',
+
+# Patrol log
+'patrol-log-page' => 'Küzet jwrnalı',
+'patrol-log-line' => '$2 kezinde $1 degendi küzette dep belgiledi $3',
+'patrol-log-auto' => '(özdik)',
+'patrol-log-diff' => 'r$1',
+
+# Image deletion
+'deletedrevision' => 'Mına eski nusqasın joýdı: $1.',
+
+# Browsing diffs
+'previousdiff' => '← Aldıñğımen aýırması',
+'nextdiff'     => 'Kelesimen aýırması →',
+
+# Media information
+'mediawarning' => "'''Nazar salıñız''': Bul faýl türinde qaskünemdi ämirdiñ bar bolwı ıqtïmal; faýldı jegip jüýeñizge zïyan keltirwiñiz mümkin.<hr />",
+'imagemaxsize' => 'Swret tüýindeme betindegi swrettiñ mölşerin şektewi:',
+'thumbsize'    => 'Nobaý mölşeri:',
+'widthheight'           => '$1 × $2',
+'file-info'             => 'Faýl mölşeri: $1, MIME türi: $2',
+'file-info-size'        => '($1 × $2 pïksel, faýl mölşeri: $3, MIME türi: $4)',
+'file-nohires'          => '<small>Joğarı ajıratılımdığı jetimsiz.</small>',
+'file-svg'              => '<small>Bul şığınsız sozılğış vektorlıq swreti. Negizgi mölşeri: $1 × $2 pïksel.</small>',
+'show-big-image'        => 'Joğarı ajıratılımdı',
+'show-big-image-thumb'  => '<small>Qarap şığw mölşeri: $1 × $2 pïksel</small>',
+
+'newimages'         => 'Eñ jaña faýldar qoýması',
+'showhidebots'      => '(bottardı $1)',
+'noimages'          => 'Köretin eşteñe joq.',
+
+# Variants for Kazakh language
+'variantname-kk-tr' => 'Latın',
+'variantname-kk-kz' => 'Кирил',
+'variantname-kk-cn' => 'توتە',
+'variantname-kk'    => 'disable',
+
+'passwordtooshort' => 'Qupïya söziñiz jaramsız ne tım qısqa. Eñ keminde $1 ärip jäne qatıswşı atıñızdan basqa bolwı qajet.',
+
+# Metadata
+'metadata'          => 'Meta-derekteri',
+'metadata-help'     => 'Osı faýlda qosımşa aqparat bar. Bälkim, osı aqparat faýldı jasap şığarw, ne sandılaw üşin paýdalanğan sandıq kamera, ne mätinalğırdan alınğan. Eger osı faýl negizgi küýinen özgertilgen bolsa, keýbir ejeleleri özgertilgen fotoswretke laýıq bolmas.',
+'metadata-expand'   => 'Egjeý-tegjeýin körset',
+'metadata-collapse' => 'Egjeý-tegjeýin jasır',
+'metadata-fields'   => 'Osı xabarda tizimdelgen EXIF meta-derek awmaqtarı,
+swret beti körsetw kezinde meta-derek keste jasırılığanda kiristirledi.
+Basqası ädepkiden jasırıladı.
+* make
+* model
+* datetimeoriginal
+* exposuretime
+* fnumber
+* focallength',
+
+# EXIF tags
+'exif-imagewidth'                  => 'Eni',
+'exif-imagelength'                 => 'Bïiktigi',
+'exif-bitspersample'               => 'Quraş saýın bït sanı',
+'exif-compression'                 => 'Qısım sulbası',
+'exif-photometricinterpretation'   => 'Pïksel qïıswı',
+'exif-orientation'                 => 'Megzewi',
+'exif-samplesperpixel'             => 'Quraş sanı',
+'exif-planarconfiguration'         => 'Derek rettewi',
+'exif-ycbcrsubsampling'            => 'Y quraşınıñ C quraşına jarnaqtawı',
+'exif-ycbcrpositioning'            => 'Y quraşı jäne C quraşı mekendewi',
+'exif-xresolution'                 => 'Dereleý ajıratılımdığı',
+'exif-yresolution'                 => 'Tireleý ajıratılımdığı',
+'exif-resolutionunit'              => 'X jäne Y ajıratılımdıqtarığınıñ ölşemi',
+'exif-stripoffsets'                => 'Swret dererekteriniñ jaýğaswı',
+'exif-rowsperstrip'                => 'Beldik saýın jol sanı',
+'exif-stripbytecounts'             => 'Qısımdalğan beldik saýın baýt sanı',
+'exif-jpeginterchangeformat'       => 'JPEG SOI degennen ığıswı',
+'exif-jpeginterchangeformatlength' => 'JPEG derekteriniñ baýt sanı',
+'exif-transferfunction'            => 'Tasımaldaw fwnkcïyası',
+'exif-whitepoint'                  => 'Aq nükte tüstiligi',
+'exif-primarychromaticities'       => 'Alğı şeptegi tüstilikteri',
+'exif-ycbcrcoefficients'           => 'Tüs ayasın tasımaldaw matrïcalıq eselikteri',
+'exif-referenceblackwhite'         => 'Qara jäne aq anıqtawış qos kolemderi',
+'exif-datetime'                    => 'Faýldıñ özgertilgen kün-aýı',
+'exif-imagedescription'            => 'Swret atawı',
+'exif-make'                        => 'Kamera öndirwşisi',
+'exif-model'                       => 'Kamera ülgisi',
+'exif-software'                    => 'Qoldanılğan bağdarlama',
+'exif-artist'                      => 'Jığarmaşısı',
+'exif-copyright'                   => 'Jığarmaşılıq quqıqtar ïesi',
+'exif-exifversion'                 => 'Exif nusqası',
+'exif-flashpixversion'             => 'Süýemdelingen Flashpix nusqası',
+'exif-colorspace'                  => 'Tüs ayası',
+'exif-componentsconfiguration'     => 'Ärqaýsı quraş mäni',
+'exif-compressedbitsperpixel'      => 'Swret qısımdaw tärtibi',
+'exif-pixelydimension'             => 'Swrettiñ jaramdı eni',
+'exif-pixelxdimension'             => 'Swrettiñ jaramdı bïiktigi',
+'exif-makernote'                   => 'Öndirwşi eskertpeleri',
+'exif-usercomment'                 => 'Paýdalanwşı mändemeleri',
+'exif-relatedsoundfile'            => 'Qatıstı dıbıs faýlı',
+'exif-datetimeoriginal'            => 'Jasalğan kezi',
+'exif-datetimedigitized'           => 'Sandıqtaw kezi',
+'exif-subsectime'                  => 'Jasalğan keziniñ sekwnd bölşekteri',
+'exif-subsectimeoriginal'          => 'Tüpnusqa keziniñ sekwnd bölşekteri',
+'exif-subsectimedigitized'         => 'Sandıqtaw keziniñ sekwnd bölşekteri',
+'exif-exposuretime'                => 'Ustalım waqıtı',
+'exif-exposuretime-format'         => '$1 s ($2)',
+'exif-fnumber'                     => 'Sañılaw mölşeri',
+'exif-fnumber-format'              => 'f/$1',
+'exif-exposureprogram'             => 'Ustalım bağdarlaması',
+'exif-spectralsensitivity'         => 'Spektr boýınşa sezgiştigi',
+'exif-isospeedratings'             => 'ISO jıldamdıq jarnaqtawı (jarıq sezgiştigi)',
+'exif-oecf'                        => 'Optoelektrondı türletw ıqpalı',
+'exif-shutterspeedvalue'           => 'Japqış jıldamdılığı',
+'exif-aperturevalue'               => 'Sañılawlıq',
+'exif-brightnessvalue'             => 'Aşıqtıq',
+'exif-exposurebiasvalue'           => 'Ustalım ötemi',
+'exif-maxaperturevalue'            => 'Barınşa sañılaw aşwı',
+'exif-subjectdistance'             => 'Nısana qaşıqtığı',
+'exif-meteringmode'                => 'Ölşew tärtibi',
+'exif-lightsource'                 => 'Jarıq közi',
+'exif-flash'                       => 'Jarqıldağış',
+'exif-focallength'                 => 'Şoğırlaw alşaqtığı',
+'exif-focallength-format'          => '$1 mm',
+'exif-subjectarea'                 => 'Nısana awqımı',
+'exif-flashenergy'                 => 'Jarqıldağış qarqını',
+'exif-spatialfrequencyresponse'    => 'Keñistik-jïilik äserşiligi',
+'exif-focalplanexresolution'       => 'X boýınşa şoğırlaw jaýpaqtıqtıñ ajıratılımdığı',
+'exif-focalplaneyresolution'       => 'Y boýınşa şoğırlaw jaýpaqtıqtıñ ajıratılımdığı',
+'exif-focalplaneresolutionunit'    => 'Şoğırlaw jaýpaqtıqtıñ ajıratılımdıq ölşemi',
+'exif-subjectlocation'             => 'Nısana mekendewi',
+'exif-exposureindex'               => 'Ustalım aýqındawı',
+'exif-sensingmethod'               => 'Sensordiñ ölşew ädisi',
+'exif-filesource'                  => 'Faýl qaýnarı',
+'exif-scenetype'                   => 'Saxna türi',
+'exif-cfapattern'                  => 'CFA süzgi keýipi',
+'exif-customrendered'              => 'Qosımşa swret öñdetwi',
+'exif-exposuremode'                => 'Ustalım tärtibi',
+'exif-whitebalance'                => 'Aq tüsiniñ tendestigi',
+'exif-digitalzoomratio'            => 'Sandıq awqımdaw jarnaqtawı',
+'exif-focallengthin35mmfilm'       => '35 mm taspasınıñ şoğırlaw alşaqtığı',
+'exif-scenecapturetype'            => 'Tüsirgen saxna türi',
+'exif-gaincontrol'                 => 'Saxnanı meñgerw',
+'exif-contrast'                    => 'Qarama-qarsılıq',
+'exif-saturation'                  => 'Qanıqtıq',
+'exif-sharpness'                   => 'Aýqındıq',
+'exif-devicesettingdescription'    => 'Jabdıq baptaw sïpattarı',
+'exif-subjectdistancerange'        => 'Saxna qaşıqtığınıñ kölemi',
+'exif-imageuniqueid'               => 'Swrettiñ biregeý nömiri (ID)',
+'exif-gpsversionid'                => 'GPS belgişesiniñ nusqası',
+'exif-gpslatituderef'              => 'Soltüstik nemese Oñtüstik boýlığı',
+'exif-gpslatitude'                 => 'Boýlığı',
+'exif-gpslongituderef'             => 'Şığıs nemese Batıs endigi',
+'exif-gpslongitude'                => 'Endigi',
+'exif-gpsaltituderef'              => 'Bïiktik körsetwi',
+'exif-gpsaltitude'                 => 'Bïiktik',
+'exif-gpstimestamp'                => 'GPS waqıtı (atom sağatı)',
+'exif-gpssatellites'               => 'Ölşewge pýdalanılğan Jer serikteri',
+'exif-gpsstatus'                   => 'Qabıldağış küýi',
+'exif-gpsmeasuremode'              => 'Ölşew tärtibi',
+'exif-gpsdop'                      => 'Ölşew däldigi',
+'exif-gpsspeedref'                 => 'Jıldamdılıq ölşemi',
+'exif-gpsspeed'                    => 'GPS qabıldağıştıñ jıldamdılığı',
+'exif-gpstrackref'                 => 'Qozğalıs bağıtın körsetwi',
+'exif-gpstrack'                    => 'Qozğalıs bağıtı',
+'exif-gpsimgdirectionref'          => 'Swret bağıtın körsetwi',
+'exif-gpsimgdirection'             => 'Swret bağıtı',
+'exif-gpsmapdatum'                 => 'Paýdalanılğan geodezïyalıq tüsirme derekteri',
+'exif-gpsdestlatituderef'          => 'Nısana boýlığın körsetwi',
+'exif-gpsdestlatitude'             => 'Nısana boýlığı',
+'exif-gpsdestlongituderef'         => 'Nısana endigin körsetwi',
+'exif-gpsdestlongitude'            => 'Nısana endigi',
+'exif-gpsdestbearingref'           => 'Nısana azïmwtın körsetwi',
+'exif-gpsdestbearing'              => 'Nısana azïmwtı',
+'exif-gpsdestdistanceref'          => 'Nısana qaşıqtığın körsetwi',
+'exif-gpsdestdistance'             => 'Nısana qaşıqtığı',
+'exif-gpsprocessingmethod'         => 'GPS öñdetw ädisiniñ atawı',
+'exif-gpsareainformation'          => 'GPS awmağınıñ atawı',
+'exif-gpsdatestamp'                => 'GPS kün-aýı',
+'exif-gpsdifferential'             => 'GPS saralanğan tüzetw',
+
+# EXIF attributes
+'exif-compression-1' => 'Ulğaýtılğan',
+'exif-compression-6' => 'JPEG',
+
+'exif-unknowndate' => 'Belgisiz kün-aýı',
+'exif-photometricinterpretation-2' => 'RGB',
+'exif-photometricinterpretation-6' => 'YCbCr',
+
+
+'exif-orientation-1' => 'Qalıptı', # 0th row: top; 0th column: left
+'exif-orientation-2' => 'Dereleý şağılısqan', # 0th row: top; 0th column: right
+'exif-orientation-3' => '180° burışqa aýnalğan', # 0th row: bottom; 0th column: right
+'exif-orientation-4' => 'Tireleý şağılısqan', # 0th row: bottom; 0th column: left
+'exif-orientation-5' => 'Sağat tilşesine qarsı 90° burışqa aýnalğan jäne tireleý şağılısqan', # 0th row: left; 0th column: top
+'exif-orientation-6' => 'Sağat tilşe boýınşa 90° burışqa aýnalğan', # 0th row: right; 0th column: top
+'exif-orientation-7' => 'Sağat tilşe boýınşa 90° burışqa aýnalğan jäne tireleý şağılısqan', # 0th row: right; 0th column: bottom
+'exif-orientation-8' => 'Sağat tilşesine qarsı 90° burışqa aýnalğan', # 0th row: left; 0th column: bottom
+
+'exif-planarconfiguration-1' => 'talpaq pişim',
+'exif-planarconfiguration-2' => 'taýpaq pişim',
+
+'exif-xyresolution-i' => '$1 dpi',
+'exif-xyresolution-c' => '$1 dpc',
+
+'exif-colorspace-1'      => 'sRGB',
+'exif-colorspace-ffff.h' => 'FFFF.H',
+
+'exif-componentsconfiguration-0' => 'bar bolmadı',
+'exif-componentsconfiguration-1' => 'Y',
+'exif-componentsconfiguration-2' => 'Cb',
+'exif-componentsconfiguration-3' => 'Cr',
+'exif-componentsconfiguration-4' => 'R',
+'exif-componentsconfiguration-5' => 'G',
+'exif-componentsconfiguration-6' => 'B',
+
+'exif-exposureprogram-0' => 'Anıqtalmağan',
+'exif-exposureprogram-1' => 'Qolmen',
+'exif-exposureprogram-2' => 'Bağdarlamalı ädis (qalıptı)',
+'exif-exposureprogram-3' => 'Sañılaw basıñqılığı',
+'exif-exposureprogram-4' => 'Isırma basıñqılığı',
+'exif-exposureprogram-5' => 'Öner bağdarlaması (anıqtıq terendigine sanasqan)',
+'exif-exposureprogram-6' => 'Qïmıl bağdarlaması (japqış şapşandılığına sanasqan)',
+'exif-exposureprogram-7' => 'Tireleý ädisi (artı şoğırlawsız tayaw tüsirmeler)',
+'exif-exposureprogram-8' => 'Dereleý ädisi (artı şoğırlanğan dereleý tüsirmeler)',
+
+'exif-subjectdistance-value' => '$1 m',
+
+'exif-meteringmode-0'   => 'Belgisiz',
+'exif-meteringmode-1'   => 'Birkelki',
+'exif-meteringmode-2'   => 'Buldır daq',
+'exif-meteringmode-3'   => 'BirDaqtı',
+'exif-meteringmode-4'   => 'KöpDaqtı',
+'exif-meteringmode-5'   => 'Örnekti',
+'exif-meteringmode-6'   => 'Jırtındı',
+'exif-meteringmode-255' => 'Basqa',
+
+'exif-lightsource-0'   => 'Belgisiz',
+'exif-lightsource-1'   => 'Kün jarığı',
+'exif-lightsource-2'   => 'Künjarıqtı şam',
+'exif-lightsource-3'   => 'Qızdırğıştı şam',
+'exif-lightsource-4'   => 'Jarqıldağış',
+'exif-lightsource-9'   => 'Aşıq kün',
+'exif-lightsource-10'  => 'Bulınğır kün',
+'exif-lightsource-11'  => 'Kölenkeli',
+'exif-lightsource-12'  => 'Künjarıqtı şam (D 5700–7100 K)',
+'exif-lightsource-13'  => 'Künjarıqtı şam (N 4600–5400 K)',
+'exif-lightsource-14'  => 'Künjarıqtı şam (W 3900–4500 K)',
+'exif-lightsource-15'  => 'Künjarıqtı şam (WW 3200–3700 K)',
+'exif-lightsource-17'  => 'Qalıptı jarıq qaýnarı A',
+'exif-lightsource-18'  => 'Qalıptı jarıq qaýnarı B',
+'exif-lightsource-19'  => 'Qalıptı jarıq qaýnarı C',
+'exif-lightsource-20'  => 'D55',
+'exif-lightsource-21'  => 'D65',
+'exif-lightsource-22'  => 'D75',
+'exif-lightsource-23'  => 'D50',
+'exif-lightsource-24'  => 'Stwdïyalıq ISO künjarıqtı şam',
+'exif-lightsource-255' => 'Basqa jarıq qaýnarı',
+
+'exif-focalplaneresolutionunit-2' => 'dywým',
+
+'exif-sensingmethod-1' => 'Anıqtalmağan',
+'exif-sensingmethod-2' => '1-çïpti awmaqtı tüssezgiş',
+'exif-sensingmethod-3' => '2-çïpti awmaqtı tüssezgiş',
+'exif-sensingmethod-4' => '3-çïpti awmaqtı tüssezgiş',
+'exif-sensingmethod-5' => 'Kezekti awmaqtı tüssezgiş',
+'exif-sensingmethod-7' => '3-sızıqtı tüssezgiş',
+'exif-sensingmethod-8' => 'Kezekti sızıqtı tüssezgiş',
+
+'exif-filesource-3' => 'DSC',
+
+'exif-scenetype-1' => 'Tikeleý tüsirilgen fotoswret',
+
+'exif-customrendered-0' => 'Qalıptı öñdetw',
+'exif-customrendered-1' => 'Qosımşa öñdetw',
+
+'exif-exposuremode-0' => 'Özdik ustalımdaw',
+'exif-exposuremode-1' => 'Qolmen ustalımdaw',
+'exif-exposuremode-2' => 'Özdik jarqıldaw',
+
+'exif-whitebalance-0' => 'Aq tüsiniñ özdik tendestirw',
+'exif-whitebalance-1' => 'Aq tüsiniñ qolmen tendestirw',
+
+'exif-scenecapturetype-0' => 'Qalıptı',
+'exif-scenecapturetype-1' => 'Dereleý',
+'exif-scenecapturetype-2' => 'Tireleý',
+'exif-scenecapturetype-3' => 'Tüngi saxna',
+
+'exif-gaincontrol-0' => 'Joq',
+'exif-gaincontrol-1' => 'Tömen zorayw',
+'exif-gaincontrol-2' => 'Joğarı zorayw',
+'exif-gaincontrol-3' => 'Tömen bayawlaw',
+'exif-gaincontrol-4' => 'Joğarı bayawlaw',
+
+'exif-contrast-0' => 'Qalıptı',
+'exif-contrast-1' => 'Uyan',
+'exif-contrast-2' => 'Turpaýı',
+
+'exif-saturation-0' => 'Qalıptı',
+'exif-saturation-1' => 'Tömen qanıqtı',
+'exif-saturation-2' => 'Joğarı qanıqtı',
+
+'exif-sharpness-0' => 'Qalıptı',
+'exif-sharpness-1' => 'Uyan',
+'exif-sharpness-2' => 'Turpaýı',
+
+'exif-subjectdistancerange-0' => 'Belgisiz',
+'exif-subjectdistancerange-1' => 'Tayaw tüsirilgen',
+'exif-subjectdistancerange-2' => 'Jaqın tüsirilgen',
+'exif-subjectdistancerange-3' => 'Alıs tüsirilgen',
+
+# Pseudotags used for GPSLatitudeRef and GPSDestLatitudeRef
+'exif-gpslatitude-n' => 'Soltüstik boýlığı',
+'exif-gpslatitude-s' => 'Oñtüstik boýlığı',
+
+# Pseudotags used for GPSLongitudeRef and GPSDestLongitudeRef
+'exif-gpslongitude-e' => 'Şığıs endigi',
+'exif-gpslongitude-w' => 'Batıs endigi',
+
+'exif-gpsstatus-a' => 'Ölşew ulaswda',
+'exif-gpsstatus-v' => 'Ölşew özara ärekette',
+
+'exif-gpsmeasuremode-2' => '2-bağıttıq ölşem',
+'exif-gpsmeasuremode-3' => '3-bağıttıq ölşem',
+
+# Pseudotags used for GPSSpeedRef and GPSDestDistanceRef
+'exif-gpsspeed-k' => 'km/h',
+'exif-gpsspeed-m' => 'mil/h',
+'exif-gpsspeed-n' => 'J. tüýin',
+
+# Pseudotags used for GPSTrackRef, GPSImgDirectionRef and GPSDestBearingRef
+'exif-gpsdirection-t' => 'Şın bağıt',
+'exif-gpsdirection-m' => 'Magnïttı bağıt',
+
+# External editor support
+'edit-externally'      => 'Bul faýldı sırtqı qural/bağdarlama arqılı öñdew',
+'edit-externally-help' => 'Köbirek aqparat üşin [http://meta.wikimedia.org/wiki/Help:External_editors ornatw nusqawların] qarañız.',
+
+# 'all' in various places, this might be different for inflected languages
+'recentchangesall' => 'barlığın',
+'imagelistall'     => 'barlığı',
+'watchlistall1'    => 'barlığı',
+'watchlistall2'    => 'barlıq',
+'namespacesall'    => 'barlığı',
+
+# E-mail address confirmation
+'confirmemail'            => 'E-poşta jaýın kwälandırw',
+'confirmemail_noemail'    => '[[{{ns:special}}:Preferences|Qatıswşı baptawıñızda]] jaramdı e-poşta jaýın engizbepsiz.',
+'confirmemail_text'       => 'Bul wïkïde e-poşta qasïetterin paýdalanwdıñ aldınan e-poşta jaýıñızdı
+kwälandırw qajet. Öziñizdiñ jaýıñızğa kwälandırw xatın jiberw üşin tömendegi tüýmeni nuqıñız.
+Xattıñ işinde arnaýı kodı bar silteme kiristirledi;	e-poşta jaýıñızdıñ jaramdığın kwälandırw üşin
+siltemeni şolğıştıñ meken-jaý jolağına engizip aşıñız.',
+'confirmemail_pending'    => '<div class="error">
+Rastaw belgilemeñiz xatpen jiberilipti tüge; eger tirkelgiñizdi 
+jwıqta isteseñiz, jaña belgile suranısın jiberw aldınan 
+xat kelwin birşama mïnöt küte turıñız.
+</div>',
+'confirmemail_send'       => 'Kwälandırw kodın jiberw',
+'confirmemail_sent'       => 'Kwälandırw xatı jiberildi.',
+'confirmemail_oncreate'   => 'Rastaw belgilemesi e-poşta adresiñizge jiberildi.
+Bul belgileme kirw üdirisine keregi joq, biraq ol e-poşta negizindegi
+wïkï qasïetterdi endirw üşin jetistirwiñiz qajet.',
+'confirmemail_sendfailed' => 'Kwälandırw xatı jiberilmedi. Engizilgen jaýdı jaramsız äriterine tekserip şığıñız.
+
+Poşta jibergiştiñ qaýtarğanı: $1',
+'confirmemail_invalid'    => 'Kwälandırw kodı jaramsız. Kodtıñ merzimi bitken şığar.',
+'confirmemail_needlogin'  => 'E-poşta jaýıñızdı kwälandırw üşin $1 qajet.',
+'confirmemail_success'    => 'E-poşta jaýıñız kwälandırıldı. Endi Wïkïge kirip jumısqa kiriswge boladı',
+'confirmemail_loggedin'   => 'E-poşta jaýıñız kwälandırıldı.',
+'confirmemail_error'      => 'Kwälandırwıñızdı saqtağanda belgisiz qate boldı.',
+'confirmemail_subject'    => '{{SITENAME}} torabınan e-poşta jaýıñızdı kwälandırw xatı',
+'confirmemail_body'       => "Keýbirew, mına $1 IP jaýınan, öziñiz bolwı mümkin,
+{{SITENAME}} jobasındağı E-poşta jaýın qoldanıp «$2» tirkelgi jasaptı.
+
+Osı tirkelgi rastan sizdiki ekenin kwälandırw üşin, jäne {{SITENAME}} jobasınıñ
+e-poşta qasïetterin belsendirw üşin, mına siltemeni şolğışpen aşıñız:
+
+$3
+
+Bul sizdiki '''emes''' bolsa, siltemege ermeñiz. Kwälandırw kodınıñ
+merzimi $4 kezinde bitedi.",
+
+# Inputbox extension, may be useful in other contexts as well
+'tryexact'       => 'Däl säýkesin sınap köriñiz',
+'searchfulltext' => 'Tolıq mätinimen izdew',
+'createarticle'  => 'Betti bastaw',
+
+# Scary transclusion
+'scarytranscludedisabled' => '[Wïkï-ara kiregw öşirilgen]',
+'scarytranscludefailed'   => '[$1 betine ülgi öñdetw sätsiz bitti; keşiriñiz]',
+'scarytranscludetoolong'  => '[URL jaýı tım uzın; keşiriñiz]',
+
+# Trackbacks
+'trackbackbox'      => '<div id="mw_trackbacks">
+Bul bettiñ añıstawları:<br />
+$1
+</div>',
+'trackbackremove'   => '([$1 Joýıldı])',
+'trackbacklink'     => 'Añıstaw',
+'trackbackdeleteok' => 'Añıstaw joywı sätti ötti.',
+
+# Delete conflict
+'deletedwhileediting' => 'Nazar salıñız:Siz bul bettiñ öñdewin bastağanda, osı bet joýıldı!',
+'confirmrecreate'     => "Siz bul bettiñ öndewin bastağanda [[{{ns:user}}:$1|$1]] ([[{{ns:user_talk}}:$1|talqılawı]]) osı betti joýdı, körsetken sebebi:
+: ''$2''
+Osı betti şınınan qaýta jasawın rastañız.",
+'recreate'            => 'Qaýta jasaw',
+
+'unit-pixel' => ' px',
+
+# HTML dump
+'redirectingto' => '[[$1]] betine aýdatwda…',
+
+# action=purge
+'confirm_purge'        => 'Qosalqı qaltadağı osı betin tazalaýmız ba?<br /><br />$1',
+'confirm_purge_button' => 'Jaraýdı',
+
+'youhavenewmessagesmulti' => '$1 degenge jaña xabarlar tüsti',
+
+'searchcontaining' => "Mına sözi bar bet arasınan izdew: ''$1''.",
+'searchnamed'      => "Mına atawlı bet arasınan izdew: ''$1''.",
+'articletitles'    => "Atawları mınadan bastalğan better: ''$1''",
+'hideresults'      => 'Nätïjelerdi jasır',
+
+# DISPLAYTITLE
+'displaytitle' => '(Bul bettiñ siltemesi: [[$1]])',
+
+'loginlanguagelabel' => 'Til: $1',
+
+# Multipage image navigation
+'imgmultipageprev'   => '← aldıñğı betke',
+'imgmultipagenext'   => 'kelesi betke →',
+'imgmultigo'         => 'Ötw!',
+'imgmultigotopre'    => 'Mına betke ötw',
+'imgmultiparseerror' => 'Swret faýlı qïrağan nemese durıs emes, sondıqtan {{SITENAME}} bet tizimin körsete almaýdı.',
+
+# Table pager
+'ascending_abbrev'         => 'ösw',
+'descending_abbrev'        => 'kemw',
+'table_pager_next'         => 'Kelesi betke',
+'table_pager_prev'         => 'Aldıñğı betke',
+'table_pager_first'        => 'Alğaşqı betke',
+'table_pager_last'         => 'Soñğı betke',
+'table_pager_limit'        => 'Bet saýın $1 dana körset',
+'table_pager_limit_submit' => 'Ötw',
+'table_pager_empty'        => 'Eş nätïje joq',
+
+# Auto-summaries
+'autosumm-blank'   => 'Bettiñ barlıq mağlumatın alastattı',
+'autosumm-replace' => "Betti «$1» degenmen almastırdı",
+'autoredircomment' => '[[$1]] degenge aýdadı', # This should be changed to the new naming convention, but existed beforehand
+'autosumm-new'     => 'Jaña bette: $1',
+
+# Size units
+'size-bytes'     => '$1 B',
+'size-kilobytes' => '$1 KB',
+'size-megabytes' => '$1 MB',
+'size-gigabytes' => '$1 GB',
+
+# Live preview
+'livepreview-loading' => 'Jüktewde…',
+'livepreview-ready'   => 'Jüktewde… Daýın!',
+'livepreview-failed'  => "Twra qarap şığw amalı bolmadı!\nKädimgi qarap şığw ädisin baýqap köriñiz.",
+'livepreview-error'   => "Mınağan qosılw amalı bolmadı: $1 «$2»\nKädimgi qarap şığw ädisin baýqap köriñiz.",
+
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesKm.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesKm.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesKm.php	(revision 1280)
@@ -0,0 +1,21 @@
+<?php
+/** Khmer (ភាសាខ្មែរ)
+  *
+  * @addtogroup Language
+  *
+  * @author Ævar Arnfjörð Bjarmason <avarab@gmail.com>
+  */
+$digitTransformTable = array(
+	'0' => '០',
+	'1' => '១',
+	'2' => '២',
+	'3' => '៣',
+	'4' => '៤',
+	'5' => '៥',
+	'6' => '៦',
+	'7' => '៧',
+	'8' => '៨',
+	'9' => '៩'
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesKn.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesKn.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesKn.php	(revision 1280)
@@ -0,0 +1,376 @@
+<?php
+/**
+ * Language file for Kannada.
+ * Mosty done by:
+ *   Hari Prasad Nadig <hpnadig@gmail.com>
+ *     http://en.wikipedia.org/wiki/User:Hpnadig
+ *   Ashwath Mattur <ashwatham@gmail.com>
+ *     http://en.wikipedia.org/wiki/User:Ashwatham
+ *
+ * Also see the Kannada Localisation Initiative at:
+ *      http://kannada.sourceforge.net/
+ *
+ * @addtogroup Language
+ */
+
+$namespaceNames = array(
+	NS_MEDIA            => 'ಮೀಡಿಯ',
+	NS_SPECIAL          => 'ವಿಶೇಷ',
+	NS_MAIN             => '',
+	NS_TALK             => 'ಚರ್ಚೆಪುಟ',
+	NS_USER             => 'ಸದಸ್ಯ',
+	NS_USER_TALK        => 'ಸದಸ್ಯರ_ಚರ್ಚೆಪುಟ',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK     => '$1_ಚರ್ಚೆ',
+	NS_IMAGE            => 'ಚಿತ್ರ',
+	NS_IMAGE_TALK       => 'ಚಿತ್ರ_ಚರ್ಚೆಪುಟ',
+	NS_MEDIAWIKI        => 'ಮೀಡಿಯವಿಕಿ',
+	NS_MEDIAWIKI_TALK   => 'ಮೀಡೀಯವಿಕಿ_ಚರ್ಚೆ',
+	NS_TEMPLATE         => 'ಟೆಂಪ್ಲೇಟು',
+	NS_TEMPLATE_TALK    => 'ಟೆಂಪ್ಲೇಟು_ಚರ್ಚೆ',
+	NS_HELP             => 'ಸಹಾಯ',
+	NS_HELP_TALK        => 'ಸಹಾಯ_ಚರ್ಚೆ',
+	NS_CATEGORY         => 'ವರ್ಗ',
+	NS_CATEGORY_TALK    => 'ವರ್ಗ_ಚರ್ಚೆ'
+);
+
+$digitTransformTable = array(
+	'0' => '೦',
+	'1' => '೧',
+	'2' => '೨',
+	'3' => '೩',
+	'4' => '೪',
+	'5' => '೫',
+	'6' => '೬',
+	'7' => '೭',
+	'8' => '೮',
+	'9' => '೯'
+);
+
+$messages = array(
+'jan' => 'ಜನವರಿ',
+'feb' => 'ಫೆಬ್ರುವರಿ',
+'mar' => 'ಮಾರ್ಚ್',
+'apr' => 'ಎಪ್ರಿಲ್',
+'may' => 'ಮೇ',
+'jun' => 'ಜೂನ್',
+'jul' => 'ಜುಲೈ',
+'aug' => 'ಆಗಸ್ಟ್',
+'sep' => 'ಸೆಪ್ಟೆಂಬರ್',
+'oct' => 'ಅಕ್ಟೋಬರ್',
+'nov' => 'ನವೆಂಬರ್',
+'dec' => 'ಡಿಸೆಂಬರ್',
+
+
+'1movedto2' => "$1 - $2 ಕ್ಕೆ ಸ್ಥಳಾಂತರಿಸಲಾಗಿದೆ",
+'1movedto2_redir' => "$1 - $2 ಕ್ಕೆ ರಿಡೈರೆಕ್ಟ್ ಮೂಲಕ ಸ್ಥಳಾಂತರಿಸಲಾಗಿದೆ",
+'about' => "ನಮ್ಮ ಬಗ್ಗೆ",
+'aboutpage' => "ವಿಕಿಪೀಡಿಯಾ:ನಮ್ಮ ಬಗ್ಗೆ",
+'accmailtext' => "'$1'ನ ಪ್ರವೇಶ ಪದ $2 ಗೆ ಕಳುಹಿಸಲಾಗಿದೆ",
+'accmailtitle' => "ಪ್ರವೇಶ ಪದ ಕಳುಹಿಸಲಾಯಿತು.",
+'acct_creation_throttle_hit' => "ಕ್ಷಮಿಸಿ, ನೀವಾಗಲೇ $1 ಖಾತೆಗಳನ್ನು ತೆರೆದಿದ್ದೀರಿ. ಇನ್ನು ಖಾತೆಗಳನ್ನು ತೆರೆಯಲಾಗುವುದಿಲ್ಲ.",
+'actioncomplete' => "ಕಾರ್ಯ ಸಂಪೂರ್ಣ",
+'addedwatch' => "ವೀಕ್ಷಣಾ ಪಟ್ಟಿಗೆ ಸೇರಿಸಲಾಯಿತು",
+'addedwatchtext' => "\"$1\" ಪುಟವನ್ನು ನಿಮ್ಮ [[Special:Watchlist|ವೀಕ್ಷಣಾಪಟ್ಟಿಗೆ]] ಸೇರಿಸಲಾಗಿದೆ. ಈ ಪುಟದ ಮತ್ತು ಇದರ ಚರ್ಚಾ ಪುಟದ ಮು೦ದಿನ ಬದಲಾವಣೆಗಳು ವೀಕ್ಷಣಾ ಪಟ್ಟಿಯಲ್ಲಿ ಕಾಣಸಿಗುತ್ತವೆ, ಮತ್ತು [[Special:Recentchanges|ಇತ್ತೀಚೆಗಿನ ಬದಲಾವಣೆಗಳ]] ಪಟ್ಟಿಯಲ್ಲಿ ಈ ಪುಟಗಳನ್ನು ದಪ್ಪಕ್ಷರಗಳಲ್ಲಿ ಕಾಣಿಸಲಾಗುವುದು.
+
+<p>ಈ ಪುಟವನ್ನು ವೀಕ್ಷಣಾ ಪಟ್ಟಿಯಿ೦ದ ತೆಗೆಯಬಯಸಿದಲ್ಲಿ, ಮೇಲ್ಪಟ್ಟಿಯಲ್ಲಿ ಕಾಣಿಸಿರುವ \"ವೀಕ್ಷಣಾ ಪುಟದಿ೦ದ ತೆಗೆ\" ಅನ್ನು ಕ್ಲಿಕ್ಕಿಸಿ.",
+'alphaindexline' => "$1 ಇಂದ $2",
+'ancientpages' => "ಹಳೆಯ ಪುಟಗಳು",
+'and' => "ಮತ್ತು",
+'anontalk' => "ಈ ಐ.ಪಿ ಗೆ ಮಾತನಾಡಿ",
+'anonymous' => "ವಿಕಿಪೀಡಿಯಾದ ಅನಾಮಿಕ ಸದಸ್ಯರು",
+'apr' => "ಎಪ್ರಿಲ್",
+'article' => "ಲೇಖನ ಪುಟ",
+'articlepage' => "ಲೇಖನ ಪುಟವನ್ನು ವೀಕ್ಷಿಸಿ",
+
+
+'badarticleerror' => "ಈ ಪುಟದ ಮೇಲೆ ನೀವು ಪ್ರಯತ್ನಿಸಿದ ಕಾರ್ಯವನ್ನು ನಡೆಸಲಾಗದು.",
+'badfilename' => "ಚಿತ್ರದ ಹೆಸರನ್ನು $1 ಗೆ ಬದಲಾಯಿಸಲಾಗಿದೆ.",
+'badfiletype' => "\".$1\" ಚಿತ್ರಗಳಿಗೆ ಸೂಚಿತ ಫಾರ್ಮ್ಯಾಟ್ ಅಲ್ಲ.",
+'badretype' => "ನೀವು ಕೊಟ್ಟ ಪ್ರವೇಶಪದಗಳು ಬೇರೆಬೇರೆಯಾಗಿವೆ.",
+'badtitle' => "ಸರಿಯಿಲ್ಲದ ಹೆಸರು",
+'blockedtitle' => "ಈ ಸದಸ್ಯರನ್ನು ತಡೆ ಹಿಡಿಯಲಾಗಿದೆ.",
+'blockip' => "ಈ ಸದಸ್ಯನನ್ನು ತಡೆ ಹಿಡಿಯಿರಿ",
+'blockipsuccesssub' => "ತಡೆಹಿಡಿಯುವಿಕೆ ಯಶಸ್ವಿಯಾಯಿತು.",
+'blocklink' => "ತಡೆ ಹಿಡಿಯಿರಿ",
+'blocklogentry' => "\"$1\" ಅನ್ನು $2 ರ ಸಮಯದವರೆಗೆ ತಡೆಹಿಡಿಯಲಾಗಿದೆ",
+'blocklogpage' => "ತಡೆಹಿಡಿದ ಸದಸ್ಯರ ದಿನಚರಿ",
+'bold_sample' => "ದಪ್ಪಗಿನ ಅಚ್ಚು",
+'bold_tip' => "ದಪ್ಪಗಿನ ಅಚ್ಚು",
+'booksources' => "ಪುಸ್ತಕಗಳ ಮೂಲ",
+'brokenredirects' => "ಮುರಿದ ರಿಡೈರೆಕ್ಟ್‌ಗಳು",
+'bydate' => "ದಿನಾಂಕಕ್ಕನುಗುಣವಾಗಿ",
+'byname' => "ಹೆಸರಿಗನುಗುಣವಾಗಿ",
+'bysize' => "ಗಾತ್ರಕ್ಕನುಗುಣವಾಗಿ",
+
+'cancel' => "ವಜಾ ಮಾಡಿ",
+'cannotdelete' => "ಈ ಪುಟ ಅಥವಾ ಚಿತ್ರವನ್ನು ಅಳಿಸಲಾಗಲಿಲ್ಲ. (ಬೇರೊಬ್ಬ ಸದಸ್ಯರಿ೦ದ ಆಗಲೇ ಅಳಿಸಲ್ಪಟ್ಟಿರಬಹುದು.)",
+'categories' => "ವರ್ಗಗಳು",
+'categoriespagetext' => "ವಿಕಿಯಲ್ಲಿ ಈ ಕೆಳಗಿನ ವರ್ಗಗಳಿವೆ",
+'category_header' => "\"$1\" ವರ್ಗದಲ್ಲಿರುವ ಲೇಖನಗಳು",
+'categoryarticlecount' => "ಈ ವರ್ಗದಲ್ಲಿ $1 ಲೇಖನಗಳಿವೆ.",
+'changepassword' => "ಪ್ರವೇಶ ಪದ ಬದಲಾಯಿಸಿ",
+'changes' => "ಬದಲಾವಣೆಗಳು",
+'compareselectedversions' => "ಆಯ್ಕೆ ಮಾಡಿದ ಆವೃತ್ತಿಗಳನ್ನು ಹೊಂದಾಣಿಕೆ ಮಾಡಿ ನೋಡಿ",
+'confirm' => "ಧೃಡಪಡಿಸು",
+'confirmdelete' => "ಅಳಿಸುವಿಕೆ ಧೃಡಪಡಿಸು",
+'confirmdeletetext' => "ಪುಟ ಅಥವಾ ಚಿತ್ರ ಮತ್ತು ಅದರ ಸ೦ಪೂರ್ಣ ಇತಿಹಾಸವನ್ನು ನೀವು ಶಾಶ್ವತವಾಗಿ ಅಳಿಸಿಹಾಕುತ್ತಿದ್ದೀರಿ. ಇದನ್ನು ನೀವು ಮಾಡಬಯಸುವಿರಿ, ಇದರ ಪರಿಣಾಮಗಳನ್ನು ಬಲ್ಲಿರಿ, ಮತ್ತು [[{{ns:project}}:Policy]] ನ ಅನುಸಾರ ಇದನ್ನು ಮಾಡುತ್ತಿದ್ದೀರಿ ಎ೦ದು ದೃಢಪಡಿಸಿ.",
+'confirmprotect' => "ಸಂರಕ್ಷಣೆ ಧೃಡಪಡಿಸಿ",
+'confirmprotecttext' => "ಈ ಪುಟವನ್ನು ನಿಜಕ್ಕೂ ಸ೦ರಕ್ಷಿಸಬಯಸುತ್ತೀರಾ?",
+'confirmunprotect' => "ಸ೦ರಕ್ಷಣೆ ತೆಗೆಯಬೇಕೆ೦ದು ದೃಢಪಡಿಸಿ",
+'confirmunprotecttext' => "ಈ ಪುಟದ ಸ೦ರಕ್ಷಣೆಯನ್ನು ನಿಜಕ್ಕೂ ತೆಗೆಯಬಯಸುತ್ತೀರಾ?",
+'contribslink' => "ಕಾಣಿಕೆಗಳು",
+'contribsub2' => "$1 ($2) ಗೆ",
+'contributions' => "ಸದಸ್ಯರ ಕಾಣಿಕೆಗಳು",
+'copyright' => "ಇದು ಈ ಕಾಪಿರೈಟ್‌ನಲ್ಲಿ ಲಭ್ಯವಿದೆ $1.",
+'copyrightpage' => "ವಿಕಿಪೀಡಿಯ: ಕೃತಿಸ್ವಾಮ್ಯತೆಗಳು",
+'copyrightpagename' => "{{SITENAME}} ಕಾಪಿರೈಟ್",
+'createaccount' => "ಹೊಸ ಖಾತೆ ತೆರೆಯಿರಿ",
+'createaccountmail' => "ಇ-ಅಂಚೆಯ ಮೂಲಕ",
+'creditspage' => "ಪುಟದ ಗೌರವಗಳು",
+'cur' => "ಸದ್ಯದ",
+'currentevents' => "ಪ್ರಚಲಿತ",
+'currentrev' => "ಈಗಿನ ತಿದ್ದುಪಡಿ",
+
+
+'databaseerror' => "ಡೇಟಬೇಸ್ ದೋಷ",
+'dateformat' => "ದಿನಾಂಕದ ಫಾರ್ಮ್ಯಾಟ್",
+'deadendpages' => "ಕೊನೆಯಂಚಿನ ಪುಟಗಳು",
+'dec' => "ಡಿಸೆಂಬರ್",
+'defemailsubject' => "ವಿಕಿಪೀಡಿಯ ವಿ-ಅ೦ಚೆ",
+'delete' => "ಅಳಿಸಿ",
+'deletecomment' => "ಅಳಿಸುವುದರ ಕಾರಣ",
+'deletedarticle' => "\"$1\" ಅಳಿಸಲಾಯಿತು",
+'deletedtext' => "\"$1\" ಅನ್ನು ಅಳಿಸಲಾಯಿತು.
+ಇತ್ತೀಚೆಗಿನ ಅಳಿಸುವಿಕೆಗಳ ಪಟ್ಟಿಗಾಗಿ $2 ಅನ್ನು ನೋಡಿ.",
+'deleteimg' => "ಅಳಿಸಿ",
+'deletepage' => "ಪುಟವನ್ನು ಅಳಿಸಿ",
+'deletesub' => "(\"$1\" ಅನ್ನು ಅಳಿಸಲಾಗುತ್ತಿದೆ)",
+'deletethispage' => "ಈ ಪುಟವನ್ನು ಅಳಿಸಿ",
+'deletionlog' => "ಅಳಿಸುವಿಕೆ ದಿನಚರಿ",
+'diff' => "ವ್ಯತ್ಯಾಸ",
+'difference' => "(ಆವೃತ್ತಿಗಳ ನಡುವಿನ ವ್ಯತ್ಯಾಸ)",
+
+
+'edit' => "ಸಂಪಾದಿಸಿ",
+'editcurrent' => "ಈ ಪುಟದ ಪ್ರಸಕ್ತ ಆವೃತ್ತಿಯನ್ನು ಸ೦ಪಾದಿಸಿ",
+'edithelp' => "ಸಂಪಾದನೆಗೆ ಸಹಾಯ",
+'edithelppage' => "ಸಹಾಯ:ಸ೦ಪಾದನೆ",
+'editing' => "'$1' ಲೇಖನ ಬದಲಾಯಿಸಲಾಗುತ್ತಿದೆ",
+'editinguser' => "'$1' ಲೇಖನ ಬದಲಾಯಿಸಲಾಗುತ್ತಿದೆ",
+'editingold' => "<strong>ಎಚ್ಚರಿಕೆ: ಈ ಪುಟದ ಹಳೆಯ ಆವೃತ್ತಿಯನ್ನು ಬದಲಾಯಿಸುತ್ತಿದ್ದೀರಿ. ಈ ಬದಲಾವಣೆಗಳನ್ನು ಉಳಿಸಿದಲ್ಲಿ, ನ೦ತರದ ಆವೃತ್ತಿಗಳೆಲ್ಲವೂ ಕಳೆದುಹೋಗುತ್ತವೆ.</strong>",
+'editsection' => "ಬದಲಾಯಿಸಿ",
+'editold' => "ಬದಲಾಯಿಸಿ",
+'editthispage' => "ಈ ಪುಟವನ್ನು ಬದಲಾಯಿಸಿ",
+'emailfrom' => "ಇಂದ",
+'emailmessage' => "ಸಂದೇಶ",
+'emailpage' => "ಸದಸ್ಯರಿಗೆ ವಿ-ಅ೦ಚೆ ಕಳಿಸಿ",
+'emailsend' => "ಕಳುಹಿಸಿ",
+'emailsent' => "ಇ-ಅಂಚೆ ಕಳುಹಿಸಲಾಯಿತು",
+'emailsenttext' => "ನಿಮ್ಮ ವಿ-ಅ೦ಚೆ ಸ೦ದೇಶವನ್ನು ಕಳುಹಿಸಲಾಯಿತು.",
+'emailsubject' => "ವಿಷಯ",
+'emailto' => "ಗೆ",
+'emailuser' => "ಈ ಸದಸ್ಯರಿಗೆ ವಿ-ಅ೦ಚೆ ಕಳಿಸಿ",
+'error' => "ದೋಷ",
+'errorpagetitle' => "ದೋಷ",
+'exblank' => "ಪುಟ ಖಾಲಿ ಇತ್ತು",
+'export' => "ಪುಟಗಳನ್ನು ರಫ್ತು ಮಾಡಿ",
+
+
+'feb' => "ಫೆಬ್ರುವರಿ",
+'feedlinks' => "ಫೀಡ್:",
+'filecopyerror' => "\"$1\" ಫೈಲ್ ಅನ್ನು \"$2\" ಗೆ ನಕಲಿಸಲಾಗಲಿಲ್ಲ.",
+'filedeleteerror' => "\"$1\" ಫೈಲ್ ಅನ್ನು ಅಳಿಸಲಾಗಲಿಲ್ಲ.",
+'filedesc' => "ಸಾರಾಂಶ",
+'fileexists' => "ಈ ಹೆಸರಿನ ಫೈಲ್ ಆಗಲೇ ಅಸ್ತಿತ್ವದಲ್ಲಿದೆ. ಈ ಹೆಸರನ್ನು ಬದಲಾಯಿಸಲು ಇಚ್ಛೆಯಿಲ್ಲದಿದ್ದರೆ, ದಯವಿಟ್ಟು $1 ಅನ್ನು ಪರೀಕ್ಷಿಸಿ.",
+'filename' => "ಕಡತದ ಹೆಸರು",
+'filenotfound' => "\"$1\" ಫೈಲನ್ನು ಹುಡುಕಲಾಗಲಿಲ್ಲ.",
+'filesource' => "ಆಕರ",
+'fileuploaded' => "ಫೈಲ್ \"$1\" ಯಶಸ್ವಿಯಾಗಿ ಅಪ್‍ಲೋಡ್ ಆಯಿತು. ದಯವಿಟ್ಟು ಕೆಳಗಿನ ಸ೦ಪರ್ಕವನ್ನು ಕ್ಲಿಕ್ಕಿಸಿ ಈ ಫೈಲ್ ನ ಬಗ್ಗೆ ಮಾಹಿತಿಯನ್ನು ತು೦ಬಿಸಿ. ಉದಾಹರಣೆಗೆ: ಈ ಫೈಲ್ ಎಲ್ಲಿ೦ದ ಬ೦ದಿತು, ಯಾವಾಗ ಯಾರಿ೦ದ ಸೃಷ್ಟಿಯಾದದ್ದು, ಮತ್ತು ನಿಮಗೆ ತಿಳಿದಿರುವ ಇತರ ಯಾವುದೇ ಮಾಹಿತಿ.
+
+$2",
+'formerror' => "ದೋಷ: ಅರ್ಜಿ ಕಳುಹಿಸಲಾಗಲಿಲ್ಲ",
+
+
+'getimagelist' => "ಚಿತ್ರಗಳ ಪಟ್ಟಿಯನ್ನು ಪಡೆಯಲಾಗುತ್ತಿದೆ",
+'go' => "ಹೋಗು",
+'searcharticle' => "ಹೋಗು",
+
+
+'headline_sample' => "ಶಿರೋಲೇಖ",
+'help' => "ಸಹಾಯ",
+'helppage' => "ಸಹಾಯ:ಪರಿವಿಡಿ",
+'hide' => "ಅಡಗಿಸು",
+'hidetoc' => "ಅಡಗಿಸು",
+'hist' => "ಇತಿಹಾಸ",
+'history' => "ಪುಟದ ಚರಿತ್ರೆ",
+'history_short' => "ಇತಿಹಾಸ",
+
+
+'ilsubmit' => "ಹುಡುಕು",
+'imagelist' => "ಚಿತ್ರಗಳ ಪಟ್ಟಿ",
+'imagepage' => "ಚಿತ್ರದ ಪುಟವನ್ನು ವೀಕ್ಷಿಸಿ",
+'import' => "ಪುಟಗಳನ್ನು ಅಮದು ಮಾಡಿ",
+'importfailed' => "ಆಮದು ಯಶಸ್ವಿಯಾಗಲಿಲ್ಲ: $1",
+'importnotext' => "ಖಾಲಿ ಅಥವಾ ಯಾವುದೇ ಶಬ್ಧಗಳಿಲ್ಲ",
+'importsuccess' => "ಆಮದು ಯಶಸ್ವಿಯಾಯಿತು!",
+'info_short' => "ಮಾಹಿತಿ",
+'internalerror' => "ಆ೦ತರಿಕ ದೋಷ",
+'ipblocklist' => "ಬ್ಲಾಕ್ ಮಾಡಲಾದ ಐಪಿ ವಿಳಾಸಗಳ ಹಾಗೂ ಬಳಕೆಯ ಹೆಸರುಗಳ ಪಟ್ಟಿ",
+'ipbreason' => "ಕಾರಣ",
+'ipbsubmit' => "ಈ ಸದಸ್ಯರನ್ನು ತಡೆಹಿಡಿಯಿರಿ",
+
+'last' => "ಕೊನೆಯ",
+'lastmodifiedat' => "ಈ ಪುಟವನ್ನು ಕೊನೆಯಾಗಿ $2, $1 ರಂದು ಬದಲಾಯಿಸಲಾಗಿತ್ತು.",
+'lineno' => "$1 ನೇ ಸಾಲು:",
+'link_sample' => "ಸಂಪರ್ಕದ ಹೆಸರು",
+'link_tip' => "ಆಂತರಿಕ ಸಂಪರ್ಕ",
+'linklistsub' => "(ಸ೦ಪರ್ಕಗಳ ಪಟ್ಟಿ)",
+'linkstoimage' => "ಈ ಕೆಳಗಿನ ಪುಟಗಳು ಈ ಚಿತ್ರಕ್ಕೆ ಸಂಪರ್ಕ ಹೊಂದಿವೆ:",
+'login' => "ಲಾಗ್ ಇನ್",
+'loginerror' => "ಲಾಗಿನ್ ದೋಷ",
+'loginproblem' => "<b>ನಿಮ್ಮ ಲಾಗಿನ್ ನಲ್ಲಿ ತೊ೦ದರೆಯಾಯಿತು.</b><br />ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ!",
+'loginreqtitle' => "ಲಾಗಿನ್ ಆಗಬೇಕು",
+'loginsuccess' => "ನೀವು ಈಗ \"$1\" ಆಗಿ ವಿಕಿಪೀಡಿಯಕ್ಕೆ ಲಾಗಿನ್ ಆಗಿದ್ದೀರಿ.",
+'loginsuccesstitle' => "ಲಾಗಿನ್ ಯಶಸ್ವಿ",
+'logout' => "ಲಾಗ್ ಔಟ್",
+'logouttitle' => "ಸದಸ್ಯ ಲಾಗೌಟ್",
+'lonelypages' => "ಒಬ್ಬಂಟಿ ಪುಟಗಳು",
+'longpages' => "ಉದ್ದನೆಯ ಪುಟಗಳು",
+
+
+'mailmypassword' => "ಹೊಸ ಪ್ರವೇಶ ಪದವನ್ನು ಇ-ಅಂಚೆ ಮೂಲಕ ಕಳುಹಿಸಿ",
+'mainpagetext' => "ವಿಕಿ ತ೦ತ್ರಾ೦ಶವನ್ನು ಯಶಸ್ವಿಯಾಗಿ ಅನುಸ್ಥಾಪಿಸಲಾಯಿತು.",
+'makesysopname' => "ಸದಸ್ಯನ ಹೆಸರು:",
+'minlength' => "ಚಿತ್ರಗಳ ಹೆಸರಿನಲ್ಲಿ ಕನಿಷ್ಟ ಮೂರು ಅಕ್ಷರಗಳಿರಬೇಕು.",
+'minoredit' => "ಇದು ಚುಟುಕಾದ ಬದಲಾವಣೆ",
+'moredotdotdot' => "ಇನ್ನಷ್ಟು...",
+'move' => "ಸ್ಥಳಾಂತರಿಸಿ",
+'movearticle' => "ಪುಟವನ್ನು ಸ್ಥಳಾಂತರಿಸಿ",
+'movenologintext' => "ಪುಟವನ್ನು ಸ್ಥಳಾ೦ತರಿಸಲು ನೀವು ನೋ೦ದಾಯಿತ ಸದಸ್ಯರಾಗಿದ್ದು <a href=\"/wiki/Special:Userlogin\">ಲಾಗಿನ್</a> ಆಗಿರಬೇಕು.",
+'movepage' => "ಪುಟವನ್ನು ಸ್ಥಳಾಂತರಿಸಿ",
+'movepagebtn' => "ಪುಟವನ್ನು ಸ್ಥಳಾಂತರಿಸಿ",
+'movethispage' => "ಈ ಪುಟವನ್ನು ಸ್ಥಳಾಂತರಿಸಿ",
+'mycontris' => "ನನ್ನ ಕಾಣಿಕೆಗಳು",
+'mypage' => "ನನ್ನ ಪುಟ",
+'mytalk' => "ನನ್ನ ಚರ್ಚೆ",
+
+
+'navigation' => "ಸಂಚರಣೆ",
+'newarticle' => "(ಹೊಸತು)",
+'newmessageslink' => "ಹೊಸ ಸಂದೇಶಗಳು",
+'newpage' => "ಹೊಸ ಪುಟ",
+'newpageletter' => "ಹೊ",
+'newpages' => "ಹೊಸ ಪುಟಗಳು",
+'newpassword' => "ಹೊಸ ಪ್ರವೇಶ ಪದ",
+'newwindow' => "(ಹೊಸ ಕಿಟಕಿಯನ್ನು ತೆರೆಯುತ್ತದೆ)",
+'next' => "ಮುಂದಿನದು",
+'nextn' => "ಮು೦ದಿನ $1",
+'nextpage' => "ಮು೦ದಿನ ಪುಟ ($1)",
+'nlinks' => "$1 ಸ೦ಪರ್ಕಗಳು",
+'noarticletext' => "(ಈ ಪುಟದಲ್ಲಿ ಸದ್ಯಕ್ಕೆ ಏನೂ ಇಲ್ಲ)",
+'nosuchuser' => "\"$1\" ಹೆಸರಿನ ಯಾವ ಸದಸ್ಯರೂ ಇಲ್ಲ.
+ಕಾಗುಣಿತವನ್ನು ಪರೀಕ್ಷಿಸಿ, ಅಥವಾ ಕೆಳಗಿನ ಫಾರ್ಮ್ ಅನ್ನು ಉಪಯೋಗಿಸಿ ಹೊಸ ಸದಸ್ಯತ್ವವನ್ನು ಸೃಷ್ಟಿಸಿ.",
+'note' => "<strong>ಸೂಚನೆ:</strong>",
+'notloggedin' => "ಲಾಗಿನ್ ಆಗಿಲ್ಲ",
+'nstab-category' => "ವರ್ಗ",
+'nstab-help' => "ಸಹಾಯ",
+'nstab-image' => "ಚಿತ್ರ",
+'nstab-main' => "ಲೇಖನ",
+'nstab-mediawiki' => "ಸಂದೇಶ",
+'nstab-special' => "ವಿಶೇಷ",
+'nstab-user' => "ಸದಸ್ಯರ ಪುಟ",
+'nstab-project' => "ಬಗ್ಗೆ",
+
+
+'ok' => "ಸರಿ",
+'oldpassword' => "ಹಳೆಯ ಪ್ರವೇಶ ಪದ",
+'othercontribs' => "$1 ರ ಕೆಲಸವನ್ನು ಆಧರಿಸಿ.",
+'otherlanguages' => "ಇತರ ಭಾಷೆಗಳು",
+
+
+'pagecategories' => "ವರ್ಗಗಳು",
+'pagemovedsub' => "ಸ್ಥಳಾ೦ತರಿಸುವಿಕೆ ಯಶಸ್ವಿಯಾಯಿತು",
+'popularpages' => "ಜನಪ್ರಿಯ ಪುಟಗಳು",
+'portal' => "ಸಮುದಾಯ ಪುಟ",
+'postcomment' => "ನಿಮ್ಮ ಮಾತನ್ನು ಲಗತ್ತಿಸಿ",
+'powersearch' => "ಹುಡುಕಿ",
+'preview' => "ಮುನ್ನೋಟ",
+'previewnote' => "ಇದು ಕೇವಲ ಮುನ್ನೋಟ, ಪುಟವನ್ನು ಇನ್ನೂ ಉಳಿಸಲಾಗಿಲ್ಲ ಎ೦ಬುದನ್ನು ಮರೆಯದಿರಿ!",
+'protect' => "ಸಂರಕ್ಷಿಸು",
+'protectcomment' => "ಸ೦ರಕ್ಷಿಸಲು ಕಾರಣ",
+'protectedpage' => "ಸ೦ರಕ್ಷಿತ ಪುಟ",
+
+
+'randompage' => "ಯಾದೃಚ್ಛಿಕ ಪುಟ",
+'rclinks' => "ಕೊನೆಯ $2 ದಿನಗಳಲ್ಲಿ ಮಾಡಿದ $1 ಕೊನೆಯ ಬದಲಾವಣೆಗಳನ್ನು ನೋಡಿ <br />$3",
+'rclistfrom' => "$1 ಇಂದ ಪ್ರಾರಂಭಿಸಿ ಮಾಡಲಾದ ಬದಲಾವಣೆಗಳನ್ನು ನೋಡಿ",
+'rcnote' => "ಕೊನೆಯ <strong>$2</strong> ದಿನಗಳಲ್ಲಿ ಮಾಡಿದ <strong>$1</strong> ಬದಲಾವಣೆಗಳು ಕೆಳಗಿನಂತಿವೆ.",
+'recentchanges' => "ಇತ್ತೀಚೆಗಿನ ಬದಲಾವಣೆಗಳು",
+'recentchangescount' => "ಇತ್ತೀಚೆಗಿನ ಬದಲಾವಣೆಗಳಲ್ಲಿರುವ ವಿಷಯಗಳ ಸಂಖ್ಯೆ",
+'recentchangeslinked' => "ಸಂಬಂಧಪಟ್ಟ ಬದಲಾವಣೆಗಳು",
+'recentchangestext' => "ವಿಕಿಗೆ ಮಾಡಲ್ಪಟ್ಟ ಇತ್ತೀಚಿನ ಬದಲಾವಣೆಗಳನ್ನು ಈ ಪುಟದಲ್ಲಿ ನೀವು ಕಾಣಬಹುದು.",
+'returnto' => "$1 ಗೆ ಹಿಂತಿರುಗಿ.",
+'rights' => "ಹಕ್ಕುಗಳು:",
+
+
+'savearticle' => "ಪುಟವನ್ನು ಉಳಿಸಿ",
+'savefile' => "ಕಡತವನ್ನು ಉಳಿಸಿ",
+'search' => "ಹುಡುಕು",
+'searchbutton' => "ಹುಡುಕು",
+'searchresults' => "ಶೋಧನೆಯ ಫಲಿತಾಂಶಗಳು",
+'shortpages' => "ಪುಟ್ಟ ಪುಟಗಳು",
+'show' => "ತೋರಿಸು",
+'showpreview' => "ಮುನ್ನೋಟ",
+'showtoc' => "ತೋರಿಸು",
+'sitestats' => "ತಾಣದ ಅಂಕಿಅಂಶಗಳು",
+'sitestatstext' => "ಒಟ್ಟು '''$1''' ಪುಟಗಳು ಡೇಟಾಬೇಸ್‌ನಲ್ಲಿವೆ.
+ಈ ಸಂಖ್ಯೆ \"ಚರ್ಚೆ\" ಪುಟಗಳನ್ನು, ವಿಕಿಪೀಡಿಯಾದ ಬಗೆಗಿನ ಪುಟಗಳನ್ನು, ಹಾಗೂ ಪುಟ್ಟ \"ಚುಟುಕು\" ಪುಟಗಳನ್ನೂ, ರೆಡೈರೆಕ್ಟ್ ಮಾಡಿದ ಪುಟಗಳನ್ನು ಹಾಗೂ ಬೇರೆಲ್ಲೂ ಸೇರಿಸಲಾಗದ ಕೆಲವು ಇತರೆ ಪುಟಗಳನ್ನು ಒಳಗೊಂಡಿದೆ.
+
+ಇವುಗಳನ್ನು ಬಿಟ್ಟು, ಒಟ್ಟು '''$2''' ಬಹುಶಃ ನಿಜವಾದ ಲೇಖನಗಳಿಂದ ಕೂಡಿದ ಪುಟಗಳಿವೆ.",
+'sitesupport' => "ದೇಣಿಗೆ",
+'specialpage' => "ವಿಶೇಷ ಪುಟ",
+'specialpages' => "ವಿಶೇಷ ಪುಟಗಳು",
+'spheading' => "ಎಲ್ಲಾ ಸದಸ್ಯರಿಗೂ ಇರುವ ವಿಶೇಷ ಪುಟಗಳು",
+'statistics' => "ಅಂಕಿ ಅಂಶಗಳು",
+'storedversion' => "ಈಗಾಗಲೇ ಉಳಿಸಲಾಗಿರುವ ಆವೃತ್ತಿ",
+'subcategories' => "ಉಪವಿಭಾಗಗಳು",
+'subcategorycount' => "ಒಟ್ಟು $1 ಉಪವಿಭಾಗಗಳು ಈ ವರ್ಗದಡಿ ಇವೆ.",
+'summary' => "ಸಾರಾಂಶ",
+
+
+'talkpage' => "ಈ ಪುಟದ ಬಗ್ಗೆ ಚರ್ಚೆ ಮಾಡಿ",
+'timezonelegend' => "ಟೈಮ್ ಝೋನ್",
+'toc' => "ಪರಿವಿಡಿ",
+'toolbox' => "ಉಪಕರಣ",
+
+
+'uctop' => " (ಮೇಲಕ್ಕೆ)",
+'uncategorizedpages' => "ವರ್ಗ ಗೊತ್ತು ಮಾಡದ ಪುಟಗಳು",
+'unprotect' => "ಸಂರಕ್ಷಣೆ ತೆಗೆ",
+'unusedimages' => "ಉಪಯೋಗಿಸದ ಚಿತ್ರಗಳು",
+'unwatch' => "ವೀಕ್ಷಣಾ ಪಟ್ಟಿಯಿಂದ ತೆಗೆ",
+'upload' => "ಫೈಲ್ ಅಪ್ಲೋಡ್",
+'userlogin' => "ಲಾಗ್ ಇನ್",
+'userlogout' => "ಲಾಗ್ ಔಟ್",
+'userstats' => "ಸದಸ್ಯರ ಅಂಕಿ ಅಂಶ",
+'userstatstext' => "ಒಟ್ಟು '''$1''' ನೊಂದಾಯಿಸಿದ ಸದಸ್ಯರಿದ್ದಾರೆ. ಇವರಲ್ಲಿ '''$2''' ಮಂದಿ ನಿರ್ವಾಹಕರಿದ್ದಾರೆ ($3 ನೋಡಿ).",
+
+
+'version' => "ಆವೃತ್ತಿ",
+'viewsource' => "ಆಕರ ವೀಕ್ಷಿಸು",
+
+
+'wantedpages' => "ಬೇಕಾಗಿರುವ ಪುಟಗಳು",
+'watch' => "ವೀಕ್ಷಿಸಿ",
+'watchthis' => "ಈ ಪುಟವನ್ನು ವೀಕ್ಷಿಸಿ",
+'watchthispage' => "ಈ ಪುಟವನ್ನು ವೀಕ್ಷಿಸಿ",
+'whatlinkshere' => "ಇಲ್ಲಿಗೆ ಯಾವ ಸಂಪರ್ಕ ಕೂಡುತ್ತದೆ",
+
+
+'yourname' => "ನಿಮ್ಮ ಬಳಕೆಯ ಹೆಸರು",
+'yourpassword' => "ನಿಮ್ಮ ಪ್ರವೇಶಪದ",
+);
+
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesKo.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesKo.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesKo.php	(revision 1280)
@@ -0,0 +1,1475 @@
+<?php
+/** Korean (한국어)
+  *
+  * @addtogroup Language
+  */
+$namespaceNames = array(
+	NS_MEDIA          => 'Media',
+	NS_SPECIAL        => '특수기능',
+	NS_MAIN           => '',
+	NS_TALK           => '토론',
+	NS_USER           => '사용자',
+	NS_USER_TALK      => '사용자토론',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK   => '$1토론',
+	NS_IMAGE          => '그림',
+	NS_IMAGE_TALK     => '그림토론',
+	NS_MEDIAWIKI      => 'MediaWiki',
+	NS_MEDIAWIKI_TALK => 'MediaWiki토론',
+	NS_TEMPLATE       => '틀',
+	NS_TEMPLATE_TALK  => '틀토론',
+	NS_HELP           => '도움말',
+	NS_HELP_TALK      => '도움말토론',
+	NS_CATEGORY       => '분류',
+	NS_CATEGORY_TALK  => '분류토론',
+);
+
+$skinNames = array(
+	'standard' => '표준',
+	'davinci' => '다빈치',
+	'mono' => '모노',
+	'monobook' => '모노북',
+	'my skin' => '내 스킨',
+);
+
+$bookstoreList = array(
+	'Aladdin.co.kr' => 'http://www.aladdin.co.kr/catalog/book.asp?ISBN=$1',
+	'inherit' => true,
+);
+
+$datePreferences = false;
+$defaultDateFormat = 'ko';
+$dateFormats = array(
+	'ko time' => 'H:i',
+	'ko date' => 'Y년 M월 j일 (D)',
+	'ko both' => 'Y년 M월 j일 (D) H:i',
+);
+
+$messages = array(
+# User preference toggles
+'tog-underline'               => '링크에 밑줄치기:',
+'tog-highlightbroken'         => '없는 문서로 연결된 링크를 <a href="" class="new">이렇게</a> 보이기(선택하지 않으면 이렇게<a href="" class="internal">?</a> 보임)',
+'tog-justify'                 => '문단 정렬하기',
+'tog-hideminor'               => '사소한 편집을 최근 바뀜에서 숨기기',
+'tog-extendwatchlist'         => '주시 문서를 모든 변경 목록에 적용하기',
+'tog-usenewrc'                => '향상된 최근 바뀜 (자바스크립트)',
+'tog-numberheadings'          => '머릿글 번호 매기기',
+'tog-showtoolbar'             => '편집창에 툴바 보이기 (자바스크립트)',
+'tog-editondblclick'          => '더블클릭으로 문서 편집하기 (자바스크립트)',
+'tog-editsection'             => '"편집" 부분을 눌러 부분을 편집하기',
+'tog-editsectiononrightclick' => '제목을 오른쪽 클릭해서 부분 편집하기 (자바스크립트)',
+'tog-showtoc'                 => '문서의 차례 보여주기 (머릿글이 4개 이상인 경우)',
+'tog-rememberpassword'        => '자동 로그인',
+'tog-editwidth'               => '편집상자의 너비를 최대로 맞추기',
+'tog-watchcreations'          => '내가 처음 만드는 문서를 주시 목록에 추가하기',
+'tog-watchdefault'            => '내가 편집하는 문서를 주시문서 목록에 추가하기',
+'tog-watchmoves'              => '내가 이동하는 문서를 주시문서 목록에 추가하기',
+'tog-watchdeletion'           => '내가 삭제하는 문서를 주시문서 목록에 추가하기',
+'tog-minordefault'            => '‘사소한 편집’을 항상 선택하기',
+'tog-previewontop'            => '편집상자 앞에 미리 보기 화면을 보여주기',
+'tog-previewonfirst'          => '처음 편집할 때 미리 보기 화면을 보여주기',
+'tog-nocache'                 => '문서 캐시 끄기',
+'tog-enotifwatchlistpages'    => '문서가 바뀌면 이메일을 보내기',
+'tog-enotifusertalkpages'     => '내 토론 문서가 바뀌면 이메일을 보내기',
+'tog-enotifminoredits'        => '사소한 편집에도 이메일을 보내기',
+'tog-enotifrevealaddr'        => '알림 메일에 내 이메일 주소를 밝히기',
+'tog-shownumberswatching'     => '주시 사용자 수를 보여주기',
+'tog-fancysig'                => '서명에 링크를 걸지 않기',
+'tog-externaleditor'          => '외부 입력기를 기본값으로 사용하기',
+'tog-externaldiff'            => '외부 비교 툴을 기본값으로 사용하기',
+'tog-uselivepreview'          => '실시간 미리 보기 사용하기 (자바스크립트) (실험적 기능)',
+'tog-forceeditsummary'        => '편집 요약을 쓰지 않았을 때 알려주기',
+'tog-watchlisthideown'        => '주시문서 목록에서 내 편집을 숨기기',
+'tog-watchlisthidebots'       => '주시문서 목록에서 봇 편집을 숨기기',
+'tog-watchlisthideminor'      => '주시문서 목록에서 사소한 편집을 숨기기',
+'tog-ccmeonemails'            => '이메일을 보낼 때 내 이메일로 복사본을 보내기',
+'tog-diffonly'                => '편집 차이를 비교할 때 문서 내용을 보여주지 않기',
+
+'underline-always'  => '항상',
+'underline-never'   => '치지 않음',
+'underline-default' => '브라우저 설정을 따르기',
+
+'skinpreview' => '(미리 보기)',
+
+# Dates
+'sunday'        => '일요일',
+'monday'        => '월요일',
+'tuesday'       => '화요일',
+'wednesday'     => '수요일',
+'thursday'      => '목요일',
+'friday'        => '금요일',
+'saturday'      => '토요일',
+'sun'           => '일',
+'mon'           => '월',
+'tue'           => '화',
+'wed'           => '수',
+'thu'           => '목',
+'fri'           => '금',
+'sat'           => '토',
+'january'       => '1월',
+'february'      => '2월',
+'march'         => '3월',
+'april'         => '4월',
+'may_long'      => '5월',
+'june'          => '6월',
+'july'          => '7월',
+'august'        => '8월',
+'september'     => '9월',
+'october'       => '10월',
+'november'      => '11월',
+'december'      => '12월',
+'january-gen'   => '1월',
+'february-gen'  => '2월',
+'march-gen'     => '3월',
+'april-gen'     => '4월',
+'may-gen'       => '5월',
+'june-gen'      => '6월',
+'july-gen'      => '7월',
+'august-gen'    => '8월',
+'september-gen' => '9월',
+'october-gen'   => '10월',
+'november-gen'  => '11월',
+'december-gen'  => '12월',
+'jan'           => '1',
+'feb'           => '2',
+'mar'           => '3',
+'apr'           => '4',
+'may'           => '5',
+'jun'           => '6',
+'jul'           => '7',
+'aug'           => '8',
+'sep'           => '9',
+'oct'           => '10',
+'nov'           => '11',
+'dec'           => '12',
+
+# Bits of text used by many pages
+'categories'            => '분류',
+'pagecategories'        => '분류',
+'category_header'       => '‘$1’ 분류에 속해 있는 문서',
+'subcategories'         => '하위 분류',
+'category-media-header' => '‘$1’ 분류에 속해 있는 자료',
+
+'mainpage'          => '대문',
+'mainpagetext'      => "<big>'''미디어위키가 성공적으로 설치되었습니다.'''</big>",
+'mainpagedocfooter' => '위키 프로그램에 대한 정보는[http://meta.wikimedia.org/wiki/Help:Contents 이곳]에서 얻을 수 있습니다.
+
+== 시작하기 ==
+
+* [http://www.mediawiki.org/wiki/Help:Configuration_settings 설정하기]
+* [http://www.mediawiki.org/wiki/Help:FAQ 미디어위키 FAQ]
+* [http://mail.wikimedia.org/mailman/listinfo/mediawiki-announce 미디어위키 발표 메일링 리스트]',
+
+'portal'          => '사용자 모임',
+'portal-url'      => 'Project:사용자 모임',
+'about'           => '소개',
+'aboutsite'       => '{{SITENAME}} 소개',
+'aboutpage'       => 'Project:소개',
+'article'         => '문서 내용',
+'help'            => '도움말',
+'helppage'        => 'Help:목차',
+'bugreports'      => '버그 신고',
+'bugreportspage'  => 'Project:버그 신고',
+'sitesupport'     => '기부 안내',
+'sitesupport-url' => 'Project:사이트 지원',
+'faq'             => 'FAQ',
+'faqpage'         => 'Project:FAQ',
+'edithelp'        => '편집 도움말',
+'newwindow'       => '(새 창으로 열림)',
+'edithelppage'    => 'Project:문서 편집 도움말',
+'cancel'          => '취소',
+'qbfind'          => '찾기',
+'qbbrowse'        => '탐색',
+'qbedit'          => '편집',
+'qbpageoptions'   => '문서 기능',
+'qbpageinfo'      => '문서 정보',
+'qbmyoptions'     => '내 문서',
+'qbspecialpages'  => '특수 문서',
+'moredotdotdot'   => '더 보기...',
+'mypage'          => '내 사용자 문서',
+'mytalk'          => '내 사용자 토론',
+'anontalk'        => '익명 사용자 토론',
+'navigation'      => '둘러보기',
+
+# Metadata in edit box
+'metadata_help' => '메타데이터([[Project:메타데이터]]에서 자세한 설명을 볼 수 있습니다):',
+
+'currentevents'     => '요즘 화제',
+'currentevents-url' => '요즘 화제',
+
+'disclaimers'       => '면책 조항',
+'disclaimerpage'    => 'Project:면책 조항',
+'privacy'           => '개인정보 정책',
+'privacypage'       => 'Project:개인정보 정책',
+'errorpagetitle'    => '오류',
+'returnto'          => '$1(으)로 돌아가기',
+'tagline'           => '{{SITENAME}}',
+'search'            => '찾기',
+'searchbutton'      => '찾기',
+'go'                => '가기',
+'searcharticle'     => '가기',
+'history'           => '문서 역사',
+'history_short'     => '역사',
+'updatedmarker'     => '마지막으로 방문한 후 변경됨',
+'info_short'        => '정보',
+'printableversion'  => '인쇄용 문서',
+'permalink'         => '고유링크',
+'print'             => '인쇄',
+'edit'              => '편집',
+'editthispage'      => '이 문서 편집하기',
+'delete'            => '삭제',
+'deletethispage'    => '이 문서 삭제하기',
+'undelete_short'    => '$1개의 편집 되살리기',
+'protect'           => '보호',
+'protectthispage'   => '이 문서 보호하기',
+'unprotect'         => '보호 해제',
+'unprotectthispage' => '이 문서 보호 해제하기',
+'newpage'           => '새 문서',
+'talkpage'          => '토론 문서',
+'specialpage'       => '특수 문서',
+'personaltools'     => '개인 도구',
+'postcomment'       => '의견 쓰기',
+'articlepage'       => '문서 보기',
+'talk'              => '토론',
+'views'             => '보기',
+'toolbox'           => '도구모음',
+'userpage'          => '사용자 문서 보기',
+'projectpage'       => '프로젝트 문서 보기',
+'imagepage'         => '그림 문서 보기',
+'mediawikipage'     => '메시지 문서 보기',
+'templatepage'      => '틀 문서 보기',
+'viewhelppage'      => '도움말 문서 보기',
+'categorypage'      => '분류 문서 보기',
+'viewtalkpage'      => '토론 보기',
+'otherlanguages'    => '다른 언어',
+'redirectedfrom'    => '($1에서 넘어옴)',
+'redirectpagesub'   => '넘겨주기 문서',
+'lastmodifiedat'    => '이 문서는 $2, $1에 마지막으로 바뀌었습니다.', # $1 date, $2 time
+'viewcount'         => '이 문서는 총 $1번 읽혔습니다.',
+'copyright'         => '문서는 $1 저작권 하에 있습니다.',
+'protectedpage'     => '보호된 문서',
+'jumptosearch'      => '찾기',
+
+'badaccess'        => '권한 오류',
+'badaccess-group0' => '요청한 동작을 실행할 권한이 없습니다.',
+'badaccess-group1' => '요청한 동작은 $1 권한을 가진 사용자에게만 가능합니다.',
+'badaccess-group2' => '요청한 동작은 $1 중 하나의 권한을 가진 사용자에게만 가능합니다.',
+'badaccess-groups' => '요청한 동작은 $1 중 하나의 권한을 가진 사용자에게만 가능합니다.',
+
+'versionrequired'     => '미디어위키 $1 버전 필요',
+'versionrequiredtext' => '이 문서를 보기 위해서는 미디어위키 $1 버전이 필요합니다. [[Special:Version|설치되어 있는 미디어위키의 버전]]을 확인해주세요.',
+
+'ok'                  => '확인',
+'pagetitle'           => '$1 - {{SITENAME}}',
+'retrievedfrom'       => '원본 주소 ‘$1’',
+'youhavenewmessages'  => '$1 란에 누군가 글을 남겼습니다. ($2)',
+'newmessageslink'     => '사용자 토론',
+'newmessagesdifflink' => '바뀐 내용 비교',
+'editsection'         => '편집',
+'editold'             => '편집',
+'editsectionhint'     => '부분 편집: $1',
+'toc'                 => '목차',
+'showtoc'             => '보이기',
+'hidetoc'             => '숨기기',
+'thisisdeleted'       => '$1을 보거나 되살리겠습니까?',
+'viewdeleted'         => '$1을 보겠습니까?',
+'restorelink'         => '$1개의 삭제된 편집',
+'feedlinks'           => '피드:',
+'feed-invalid'        => '잘못된 구독 피드 방식입니다.',
+
+# Short words for each namespace, by default used in the 'article' tab in monobook
+'nstab-main'      => '문서',
+'nstab-user'      => '사용자 문서',
+'nstab-media'     => '자료',
+'nstab-special'   => '특수 문서',
+'nstab-project'   => '프로젝트 문서',
+'nstab-image'     => '그림',
+'nstab-mediawiki' => '메시지',
+'nstab-template'  => '틀',
+'nstab-help'      => '도움말',
+'nstab-category'  => '분류',
+
+# Main script and global functions
+'nosuchaction'      => '해당하는 동작이 없습니다.',
+'nosuchactiontext'  => 'URL로 요청한 동작을 위키에서 판별할 수 없습니다.',
+'nosuchspecialpage' => '해당하는 특수기능이 없습니다.',
+'nospecialpagetext' => '요청한 특수 문서가 존재하지 않습니다. 특수 문서의 목록은 [[Special:Specialpages|여기]]에서 볼 수 있습니다.',
+
+# General errors
+'error'                => '오류',
+'databaseerror'        => '데이터베이스 오류',
+'dberrortext'          => '데이터베이스 쿼리 구문 오류가 발생했습니다. 소프트웨어의 버그가 있을 수 있습니다. 마지막으로 요청한 데이터베이스 쿼리는 "<tt>$2</tt>" 함수에서 쓰인 <blockquote><tt>$1</tt></blockquote>입니다. MySQL은 "<tt>$3: $4</tt>" 오류를 냈습니다.',
+'dberrortextcl'        => '데이터베이스 쿼리 구문 오류가 발생했습니다. 마지막으로 요청한 데이터베이스 쿼리는 "$2" 함수에서 쓰인 "$1"입니다. MySQL은 "$3: $4" 오류를 냈습니다.',
+'noconnect'            => '죄송합니다. 위키의 기술적인 문제로 인해 데이터베이스 서버에 접근할 수 없습니다.<br />$1',
+'nodb'                 => '$1 데이터베이스를 선택할 수 없습니다.',
+'cachederror'          => '아래는 요청한 문서의 캐시 복사본으로, 최신이 아닐 수 있습니다.',
+'laggedslavemode'      => '주의: 문서가 최근 것이 아닐 수 있습니다.',
+'readonly'             => '데이터베이스 잠김',
+'enterlockreason'      => '데이터베이스를 잠그는 이유와 예상되는 기간을 적어 주세요.',
+'readonlytext'         => '현재 데이터베이스는 편집을 하지 못하도록 잠겨 있습니다. 데이터베이스 관리가 끝난 후에는 다시 정상으로 돌아올 것입니다.
+
+관리자가 데이터베이스를 잠근 이유는 다음과 같습니다: $1',
+'missingarticle'       => '데이터베이스에서 "$1" 문서를 찾지 못했습니다.
+
+보통 이것은 삭제된 문서의 비교/역사를 가리키는 링크일 것입니다.
+
+만약 그런 경우가 아니라면, 프로그램에 버그가 있을 수도 있습니다. 관리자에게 이 URL을 보내 주세요.',
+'readonly_lag'         => '슬레이브 서버에서 마스터 서버를 따라잡을 때까지 데이터베이스가 자동적으로 잠깁니다.',
+'internalerror'        => '내부 오류',
+'filecopyerror'        => '‘$1’ 파일을 ‘$2’(으)로 복사할 수 없습니다.',
+'filerenameerror'      => '‘$1’ 파일을 ‘$2’ 이름으로 바꿀 수 없습니다.',
+'filedeleteerror'      => '‘$1’ 파일을 삭제할 수 없습니다.',
+'filenotfound'         => '‘$1’ 파일을 찾을 수 없습니다.',
+'unexpected'           => '예상되지 않은 값: "$1"="$2"',
+'formerror'            => '오류: 양식을 제출할 수 없습니다.',
+'badarticleerror'      => '지금의 명령은 이 문서에서는 실행할 수 없습니다.',
+'cannotdelete'         => '문서나 파일을 삭제할 수 없습니다. 이미 삭제되었을 수도 있습니다.',
+'badtitle'             => '잘못된 제목',
+'badtitletext'         => '문서 제목이 잘못되었거나 비어있습니다.',
+'perfdisabled'         => '이 기능을 쓰면 아무도 위키를 쓸 수 없을 정도로 데이터베이스가 느려지기 때문에 임시로 비활성화되었습니다.',
+'perfdisabledsub'      => '이것은 $1에서의 복사본입니다.', # obsolete?
+'perfcached'           => '다음 자료는 캐시된 것이므로 현재 상황을 반영하지 않을 수 있습니다.',
+'perfcachedts'         => '다음 자료는 캐시된 것으로, $1에 마지막으로 갱신되었습니다.',
+'querypage-no-updates' => '이 문서의 갱신이 현재 비활성화되어 있습니다. 자료가 잠시 갱신되지 않을 것입니다.',
+'wrong_wfQuery_params' => 'wfQuery()에서 잘못된 매개변수 발생<br />함수: $1<br />쿼리: $2',
+'viewsource'           => '내용 보기',
+'protectedpagetext'    => '이 문서는 문서 편집이 불가능하도록 보호되어 있습니다.',
+'viewsourcetext'       => '문서의 원본을 보거나 복사할 수 있습니다:',
+'protectedinterface'   => '이 문서는 소프트웨어 인터페이스에 쓰이는 문서로, 잠겨 있습니다.',
+'editinginterface'     => "'''경고''': 소프트웨어에서 사용하는 메시지 문서를 고치고 있습니다. 이것은 모든 사용자에게 영향을 끼칩니다.",
+'sqlhidden'            => '(SQL 쿼리 숨겨짐)',
+'cascadeprotected'     => '다음의 문서에서 이 문서를 사용하고 있고 그 문서에 연쇄적 보호 설정이 걸려 있어, 이 문서도 편집에서 보호됩니다:',
+
+# Login and logout pages
+'logouttitle'                => '로그아웃',
+'logouttext'                 => "'''{{SITENAME}}에서 로그아웃했습니다.''' 이대로 이름없이 {{SITENAME}}을(를) 이용하거나, 방금 사용했던 계정이나 다른 계정으로 다시 로그인해서 이용할 수 있습니다. 웹 브라우저의 캐시를 지우지 않으면 몇몇 문서에서 로그인이 되어 있는 것처럼 보일 수 있다는 점을 유의해 주세요.",
+'welcomecreation'            => '== $1 님, 환영합니다! ==
+
+계정이 만들어졌습니다. [[Special:Preferences|사용자 환경 설정]]에서 당신의 {{SITENAME}} 사용자 환경 설정을 바꿀 수 있습니다.',
+'loginpagetitle'             => '로그인',
+'yourname'                   => '이름',
+'yourpassword'               => '암호',
+'yourpasswordagain'          => '암호 확인',
+'remembermypassword'         => '로그인 상태를 저장하기',
+'yourdomainname'             => '도메인 이름',
+'externaldberror'            => '외부 인증 데이터베이스에 오류가 있거나, 외부 계정을 갱신할 권한이 없습니다.',
+'loginproblem'               => "'''로그인에 문제가 발생했습니다.'''<br />다시 시도해 보세요.",
+'alreadyloggedin'            => '당신은 이미 $1 사용자로 로그인했습니다!',
+'login'                      => '로그인',
+'loginprompt'                => '{{SITENAME}}에 로그인하려면 쿠키를 사용할 수 있어야 합니다.',
+'userlogin'                  => '로그인 / 계정 만들기',
+'logout'                     => '로그아웃',
+'userlogout'                 => '로그아웃',
+'notloggedin'                => '로그인하지 않음',
+'nologin'                    => '계정이 없나요? $1.',
+'nologinlink'                => '계정을 만들 수 있습니다',
+'createaccount'              => '계정 만들기',
+'gotaccount'                 => '계정이 이미 있나요? $1.',
+'gotaccountlink'             => '로그인하세요',
+'createaccountmail'          => '이메일로 하기',
+'badretype'                  => '암호가 서로 다릅니다.',
+'userexists'                 => '사용자 이름이 이미 등록되어 있습니다. 다른 이름으로 만들어주십시오.',
+'youremail'                  => '이메일 *',
+'username'                   => '사용자 이름:',
+'uid'                        => '사용자 ID:',
+'yourrealname'               => '실명 *',
+'yourlanguage'               => '언어:',
+'yournick'                   => '닉네임:',
+'badsig'                     => '서명이 잘못되었습니다. HTML 태그를 확인해주세요.',
+'email'                      => '이메일',
+'prefs-help-email-enotif'    => '이 주소는 이메일 알림을 설정했을 때 이메일을 받는 데에도 사용됩니다.',
+'loginerror'                 => '로그인 오류',
+'prefs-help-email'           => '* 이메일(선택): 당신의 메일 주소를 공개하지 않고 다른 사용자들과 이야기를 할 수 있습니다.',
+'nocookiesnew'               => '사용자 계정이 생성되었지만 로그인하고 있지는 않습니다. {{SITENAME}}은 로그인을 위해 쿠키를 사용하고, 현재 당신의 웹 브라우저에서는 쿠키 사용이 비활성되어 있습니다. 쿠키 사용을 활성화한 다음 로그인해 주세요.',
+'nocookieslogin'             => '{{SITENAME}}에서는 로그인을 위해 쿠키를 사용합니다. 당신의 웹 브라우저에서 쿠키가 비활성되어 있습니다. 쿠키 사용을 활성화한 다음 로그인해 주세요.',
+'noname'                     => '사용자 이름이 올바르지 않습니다.',
+'loginsuccesstitle'          => '로그인 성공',
+'loginsuccess'               => "'''\"\$1\" 계정으로 {{SITENAME}}에 로그인했습니다.'''",
+'nosuchuser'                 => '‘$1’ 사용자가 존재하지 않습니다. 철자가 맞는지 확인해주세요. 또는 새 계정을 만들 수 있습니다.',
+'nosuchusershort'            => '‘$1’ 사용자가 존재하지 않습니다. 철자가 맞는지 확인해 주세요.',
+'nouserspecified'            => '사용자 이름을 입력하지 않았습니다.',
+'wrongpassword'              => '암호가 틀립니다. 다시 시도해 주세요.',
+'wrongpasswordempty'         => '비밀번호가 비었습니다. 다시 시도해 주세요.',
+'mailmypassword'             => '새 암호를 이메일로 보내기',
+'passwordremindertitle'      => '{{SITENAME}}에서 보내는 새 암호',
+'passwordremindertext'       => 'IP 주소 $1에게서 당신에게 {{SITENAME}}의 새 암호를 보내달라는 요청이 왔습니다. ($4)
+
+사용자 "$2"의 암호는 이제 "$3"입니다. 로그인한 후에 암호를 변경해 주세요.
+
+만약 다른 사람이 암호 요청을 했거나 예전 암호를 기억해냈다면 이 메시지를 무시하고 예전 암호를 계속 사용할 수 있습니다.',
+'noemail'                    => '사용자 ‘$1’에 등록된 이메일 주소가 없습니다.',
+'passwordsent'               => '‘$1’ 계정의 새로운 암호를 이메일로 보냈습니다. 암호를 받고 다시 로그인해 주세요.',
+'blocked-mailpassword'       => '당신의 IP 주소는 편집에서 차단되어 있습니다. 따라서 암호 되살리기 기능은 악용 방지를 위해 금지됩니다.',
+'eauthentsent'               => '확인 이메일을 보냈습니다. 이메일 내용의 지시대로 계정 확인 절차를 실행해 주십시오.',
+'throttled-mailpassword'     => '비밀번호 확인 이메일을 이미 최근 $1시간 안에 보냈습니다. 악용을 방지하기 위해 확인 이메일은 $1시간당 한 개만을 보낼 수 있습니다.',
+'mailerror'                  => '메일 보내기 오류: $1',
+'acct_creation_throttle_hit' => '당신은 이미 $1개의 계정이 있습니다. 더 이상 만들 수 없습니다.',
+'emailauthenticated'         => '당신의 이메일 주소는 $1에 인증되었습니다.',
+'emailnotauthenticated'      => '당신의 이메일 주소가 아직 <strong>확인되지 않았습니다</strong>. 이메일 확인 절차를 거치지 않으면 다음 이메일 기능을 사용할 수 없습니다.',
+'noemailprefs'               => '이 기능을 사용하기 위해서는 이메일 주소를 기입해야 합니다.',
+'emailconfirmlink'           => '이메일 주소 확인',
+'invalidemailaddress'        => '이메일 주소 입력이 잘못되었습니다. 정상적인 이메일을 입력하거나, 칸을 비워 주세요.',
+'accountcreated'             => '계정 만들어짐',
+'accountcreatedtext'         => '‘$1’ 사용자 계정이 만들어졌습니다.',
+
+# Password reset dialog
+'resetpass' => '계정 비밀번호 초기화',
+
+# Edit page toolbar
+'bold_sample'     => '굵은 글씨',
+'bold_tip'        => '굵은 글씨',
+'italic_sample'   => '기울인 글씨',
+'italic_tip'      => '기울인 글씨',
+'link_sample'     => '링크 제목',
+'link_tip'        => '내부 링크',
+'extlink_sample'  => 'http://www.example.com 사이트 이름',
+'extlink_tip'     => '외부 사이트 링크 (앞에 <nowiki>http://</nowiki>를 붙여야 합니다.)',
+'headline_sample' => '제목',
+'headline_tip'    => '두번째로 큰 문단 제목',
+'math_sample'     => '여기에 수식을 쓰세요',
+'math_tip'        => '수식 (LaTeX)',
+'nowiki_sample'   => '여기에 위키 문법을 사용하지 않을 글을 적어 주세요',
+'nowiki_tip'      => '위키 문법 무시하기',
+'image_sample'    => 'Example.jpg',
+'image_tip'       => '그림 추가하기',
+'media_sample'    => 'Example.ogg',
+'media_tip'       => '미디어 파일 링크',
+'sig_tip'         => '내 서명과 현재 시각',
+'hr_tip'          => '가로줄(되도록 사용하지 말아 주세요)',
+
+# Edit pages
+'summary'                   => '편집 요약',
+'subject'                   => '주제/제목',
+'minoredit'                 => '사소한 편집',
+'watchthis'                 => '이 문서 주시하기',
+'savearticle'               => '저장',
+'preview'                   => '미리 보기',
+'showpreview'               => '미리 보기',
+'showlivepreview'           => '실시간 미리 보기',
+'showdiff'                  => '차이 보기',
+'anoneditwarning'           => "'''주의''': 로그인하고 있지 않습니다. 당신의 IP 주소가 문서 역사에 남게 됩니다.",
+'missingsummary'            => "'''알림:''' 편집 요약을 적지 않았습니다. 그대로 저장하면 편집 요약 없이 저장됩니다.",
+'summary-preview'           => '편집 요약 미리 보기',
+'subject-preview'           => '주제/제목 미리 보기',
+'blockedtitle'              => '사용자 차단됨',
+'blockedtext'               => "<big>'''당신의 계정 혹은 IP 주소가 차단되었습니다.'''</big>
+
+계정을 차단한 사람은 \$1입니다. 차단한 이유는 다음과 같습니다: \"\$2\"
+
+\$1, 또는 [[Project:{{MediaWiki:Administrators}}|다른 관리자]]에게 차단에 대해 토론할 수 있습니다. [[Special:Preferences|계정 환경 설정]]에 올바른 이메일 주소가 있지 않다면 '이메일 보내기' 기능을 사용할 수 없습니다. 당신의 현재 IP 주소는 \$3이고, 차단 ID는 #\$5입니다. 이메일을 보낼 때에 이 주소를 같이 알려주세요.",
+'blockedoriginalsource'     => "아래에 '''$1'''의 내용이 나와 있습니다:",
+'blockededitsource'         => "아래에 '''$1'''에서의 '''당신의 편집'''이 나와 있습니다:",
+'whitelistedittitle'        => '편집하려면 로그인 필요',
+'whitelistedittext'         => '문서를 편집하려면 $1해야 합니다.',
+'whitelistreadtitle'        => '문서를 보려면 로그인 필요',
+'whitelistreadtext'         => '문서를 읽기 위해서는 [[Special:Userlogin|로그인]]해야 합니다.',
+'whitelistacctitle'         => '계정을 만들도록 허용되어 있지 않습니다.',
+'confirmedittitle'          => '편집하려면 이메일 인증 필요',
+'confirmedittext'           => '문서를 고치려면 이메일 인증 절차가 필요합니다. [[Special:Preferences|사용자 환경 설정]]에서 이메일 주소를 입력하고 이메일 주소 인증을 해 주시기 바랍니다.',
+'loginreqtitle'             => '로그인 필요',
+'loginreqlink'              => '로그인',
+'loginreqpagetext'          => '다른 문서를 보기 위해서는 $1해야 합니다.',
+'accmailtitle'              => '암호를 보냈습니다.',
+'accmailtext'               => '‘$1’의 암호를 $2로 보냈습니다.',
+'newarticle'                => '(새 문서)',
+'newarticletext'            => "이 문서는 아직 만들어지지 않았습니다. 문서를 만들기 위해서는 아래의 상자에 내용을 입력하면 됩니다. (자세한 내용은 [[{{MediaWiki:helppage}}|도움말 문서]]를 읽어 주시기 바랍니다.) 만약 잘못 찾아온 문서라면 브라우저의 '''뒤로''' 버튼을 눌러 주세요.",
+'anontalkpagetext'          => '----
+여기는 계정에 로그인하지 않은 익명 사용자를 위한 토론 문서입니다. 익명 사용자의 사용자 이름은 IP 주소로 나오기 때문에, 한 IP 주소를 여러 명이 같이 쓰거나 유동 IP를 사용하는 경우 엉뚱한 사람에게 의견이 전달될 수 있습니다. 이러한 문제를 피하려면 [[Special:Userlogin|계정을 만들거나 로그인해 주시기 바랍니다]].',
+'noarticletext'             => '현재 문서는 비어 있습니다. 이 제목으로 [[Special:Search/{{PAGENAME}}|검색]]하거나 문서를 [{{fullurl:{{FULLPAGENAME}}|action=edit}} 편집]할 수 있습니다.',
+'clearyourcache'            => "'''참고''': 설정을 저장한 후에 바뀐 점을 확인하기 위해서는 브라우저의 캐시를 갱신해야 합니다. '''모질라 / 파이어폭스 / 사파리''': ‘시프트’ 키를 누르면서 ‘새로 고침’을 클릭하거나, ''Ctrl-F5''를 입력; '''컨커러''': 단순히 '새로고침'을 클릭하거나 ''F5''를 입력; '''오페라''' 사용자는 ‘도구→설정’에서 캐시를 완전히 비워야 합니다.",
+'usercssjsyoucanpreview'    => "'''안내''': CSS/JS 문서를 저장하기 전에 ‘미리 보기’ 기능을 통해 작동을 확인해주세요.",
+'usercsspreview'            => "'''이것은 CSS 미리 보기로, 아직 저장하지 않았다는 것을 주의해 주세요!'''",
+'userjspreview'             => "'''이것은 자바스크립트 미리 보기로, 아직 저장하지 않았다는 것을 주의해 주세요!'''",
+'userinvalidcssjstitle'     => "'''경고''': ‘$1’ 스킨이 존재하지 않습니다. css와 js 문서의 제목은 {{ns:user}}:홍길동/monobook.css처럼 소문자로 씁니다.",
+'updated'                   => '(바뀜)',
+'note'                      => "'''주의''':",
+'previewnote'               => "'''지금 미리 보기로 보고 있는 내용은 아직 저장되지 않았습니다!'''",
+'previewconflict'           => '이 미리 보기는 저장할 때의 모습, 즉 위쪽 편집창의 문서를 반영합니다.',
+'session_fail_preview'      => "'''죄송합니다. 세션 데이터가 없어져 편집을 저장하지 못했습니다. 다시 시도해도 되지 않으면 로그아웃한 다음 다시 로그인해 보십시오.'''",
+'session_fail_preview_html' => "'''죄송합니다. 세션 데이터가 없어져 편집을 저장하지 못했습니다.'''
+
+문서에 HTML 태그가 사용되었기 때문에, 자바스크립트 공격을 막기 위해 미리 보기는 숨겨져 있습니다.
+
+'''다시 시도해도 되지 않으면 로그아웃한 다음 다시 로그인해 보십시오.'''",
+'importing'                 => '$1 가져오는 중',
+'editing'                   => '$1 편집하기',
+'editinguser'               => '$1 편집하기',
+'editingsection'            => '$1 편집하기 (부분)',
+'editingcomment'            => '$1 편집하기 (덧붙이기)',
+'editconflict'              => '편집 충돌: $1',
+'explainconflict'           => "문서를 편집하는 도중에 누군가가 이 문서를 바꾸었습니다. 위쪽에 있는 문서가 현재 바뀐 문서이고, 아래쪽의 문서가 당신이 편집한 문서입니다. 아래쪽의 내용을 위쪽에 적절히 합쳐 주시기 바랍니다. '''위쪽의 편집 내역만이''' 저장됩니다.",
+'yourtext'                  => '당신의 편집',
+'storedversion'             => '현재 문서',
+'nonunicodebrowser'         => "'''주의: 당신의 웹 브라우저가 유니코드를 완벽하게 지원하지 않습니다. 몇몇 문자가 16진수 코드로 나타날 수 있습니다.'''",
+'editingold'                => "'''경고''': 지금 옛날 버전의 문서를 고치고 있습니다. 이것을 저장하면 최근에 편집된 부분이 사라질 수 있습니다.",
+'yourdiff'                  => '차이',
+'copyrightwarning'          => "{{SITENAME}}의 모든 기여는 $2 라이선스에 따라 배포된다는 점을 유의해 주시기 바랍니다. ($1에서 자세한 사항을 읽어 주세요.) 만약 당신이 이에 대해 찬성하지 않는다면, 여기에 편집 내역을 저장하지 말아 주세요. 또한 당신의 기여는 직접 작성했거나, 또는 퍼블릭 도메인과 같은 자유 문서에서 가져온 것을 보증해야 합니다. '''저작권이 있는 내용을 허가 없이 저장하지 마세요!'''",
+'copyrightwarning2'         => "{{SITENAME}}의 모든 기여는 $2 라이선스에 따라 배포된다는 점을 유의해 주시기 바랍니다. 만약 당신이 이에 대해 찬성하지 않는다면, 여기에 편집 내역을 저장하지 말아 주세요.<br />또한 당신의 기여는 직접 작성했거나, 또는 퍼블릭 도메인과 같은 자유 문서에서 가져온 것을 보증해야 합니다. ($1에서 자세한 사항을 읽어 주세요.) '''저작권이 있는 내용을 허가 없이 저장하지 마세요!'''",
+'longpagewarning'           => "'''주의: 이 문서의 용량이 $1킬로바이트입니다. 몇몇 웹 브라우저에서는 32킬로바이트 이상의 문서를 편집할 때 문제가 발생할 수 있습니다. 만약의 경우를 대비하여, 문서를 여러 문단으로 나누어서 편집할 수 있습니다.'''",
+'longpageerror'             => "'''오류: 문서의 크기가 $1킬로바이트로, 최대 가능한 크기인 $2킬로바이트보다 큽니다. 저장할 수 없습니다.'''",
+'readonlywarning'           => "'''주의: 데이터베이스가 관리를 위해 잠겨 있습니다. 따라서 문서를 편집한 내용을 지금 저장할 없습니다. 편집 내용을 다른 곳에 저장한 후, 나중에 다시 시도해 주세요.'''",
+'protectedpagewarning'      => "'''주의: 이 문서는 관리자만 편집할 수 있도록 보호되어 있습니다. [[Project:문서 보호 정책|문서 보호 정책]]을 참고하십시오.'''",
+'semiprotectedpagewarning'  => "'''주의:''' 이 문서는 잠겨 있습니다. 등록된 사용자만이 편집할 수 있습니다.",
+'cascadeprotectedwarning'   => '<strong>주의: 다음의 문서에서 이 문서를 사용하고 있고 그 문서에 연쇄적 보호 설정이 걸려 있어, 이 문서도 편집에서 보호되어 관리자만이 편집할 수 있습니다</strong>:',
+'templatesused'             => '이 문서에서 사용한 틀:',
+'templatesusedpreview'      => '이 미리 보기에서 사용한 틀:',
+'templatesusedsection'      => '이 부분에서 사용한 틀:',
+'template-protected'        => '(보호됨)',
+'template-semiprotected'    => '(준보호됨)',
+'edittools'                 => '<!-- 이 문서는 편집 창과 파일 올리기 창에 출력됩니다. -->',
+'nocreatetitle'             => '문서 생성 제한',
+'nocreatetext'              => '이 사이트에서는 새로운 문서를 생성하는 것에 제한을 두고 있습니다. 이미 존재하는 문서를 편집하거나, [[Special:Userlogin|로그인하거나 계정을 만들 수 있습니다]].',
+
+# "Undo" feature
+'undo-summary' => '[[Special:Contributions/$2|$2]]([[User talk:$2|토론]])의 $1판 편집을 되돌림',
+
+# Account creation failure
+'cantcreateaccounttitle' => '계정을 만들 수 없음',
+'cantcreateaccounttext'  => "이 IP 주소('''$1''')에서 계정을 만드는 것이 금지되어 있습니다. 학교나 인터넷 서비스 공급자를 통한 반달행위로 인한 것일 수도 있습니다.",
+
+# History pages
+'revhistory'          => '문서 역사',
+'viewpagelogs'        => '이 문서의 기록 보기',
+'nohistory'           => '이 문서는 편집 역사가 없습니다.',
+'revnotfound'         => '버전 없음',
+'revnotfoundtext'     => '문서의 해당 버전을 찾지 못했습니다. 접속할 때 사용한 URL을 확인해 주세요.',
+'loadhist'            => '문서 역사 불러오는 중',
+'currentrev'          => '현재 버전',
+'revisionasof'        => '$1 버전',
+'revision-info'       => '$2 사용자의 $1 버전',
+'previousrevision'    => '←이전 버전',
+'nextrevision'        => '다음 버전→',
+'currentrevisionlink' => '현재 문서',
+'cur'                 => '현재',
+'next'                => '다음',
+'last'                => '이전',
+'orig'                => '처음',
+'histlegend'          => '비교하려는 버전들을 선택한 다음 버튼을 누르세요.<br />설명: (현재) = 현재 버전과의 차이, (이전) = 바로 이전 버전과의 차이, 잔글 = 사소한 편집',
+'deletedrev'          => '[삭제됨]',
+'histfirst'           => '처음',
+'histlast'            => '마지막',
+'rev-delundel'        => '보이기/숨기기',
+
+'history-feed-title'       => '편집 역사',
+'history-feed-description' => '이 문서의 편집 역사',
+
+# Revision deletion
+'revisiondelete' => '버전 삭제/복구',
+
+# Diffs
+'difference'                => '(버전 사이의 차이)',
+'loadingrev'                => '버전 간의 차이를 받고 있습니다.',
+'lineno'                    => '$1번째 줄:',
+'editcurrent'               => '현재 버전의 문서를 편집합니다',
+'selectnewerversionfordiff' => '비교할 최근 버전을 선택해 주세요.',
+'selectolderversionfordiff' => '비교할 과거 버전을 선택해 주세요.',
+'compareselectedversions'   => '선택된 버전들을 비교하기',
+'diff-multi'                => '(중간 $1개의 편집이 숨겨짐)',
+
+# Search results
+'searchresults'         => '검색 결과',
+'searchresulttext'      => '{{SITENAME}} 찾기 기능에 대한 자세한 정보는 [[Project:찾기|{{SITENAME}} 찾기]]를 보세요.',
+'searchsubtitle'        => "열쇠말 '''[[:$1]]'''",
+'searchsubtitleinvalid' => "열쇠말 '$1'",
+'badquery'              => '잘못된 질의 구문',
+'badquerytext'          => '당신의 질의 구문을 실행하지 못했습니다. 3글자보다 짧은 문자열 검색은 지원하지 않습니다. 입력한 문장에 오타가 없는지도 확인해 주시기 바랍니다. 다른 문장을 입력해주세요.',
+'matchtotals'           => '열쇠말 ‘$1’이 문서 제목 $2개, 문서 내용 $3개에 들어있습니다.',
+'noexactmatch'          => "'''$1 문서가 없습니다.''' 문서를 [[:$1|만들 수]] 있습니다.",
+'titlematches'          => '문서 제목 일치',
+'notitlematches'        => '해당하는 제목 없음',
+'textmatches'           => '문서 내용 일치',
+'notextmatches'         => '해당하는 문서 없음',
+'prevn'                 => '이전 $1개',
+'nextn'                 => '다음 $1개',
+'viewprevnext'          => '보기: ($1) ($2) ($3).',
+'showingresults'        => '<strong>$2</strong>번 부터 <strong>$1</strong>개의 결과입니다.',
+'showingresultsnum'     => "'''$2'''번 부터 '''$3'''개의 결과입니다.",
+'nonefound'             => "'''참고''': \"have\"와 \"from\"과 같은 일반적인 단어는 검색에 포함되지 않고, 이런 단어를 포함한 경우 검색이 효과적이지 못할 수 있습니다. 또는 여러 단어를 동시에 검색한 경우에도 효과적인 검색이 되지 않습니다(검색하려는 단어가 모두 들어 있는 문서만이 결과에 나타납니다).",
+'powersearch'           => '찾기',
+'powersearchtext'       => '다음의 네임스페이스에서 찾기:<br />$1<br />$2 넘겨주기 표시<br />$3를 $9',
+'searchdisabled'        => '{{SITENAME}} 검색 기능이 비활성화되어 있습니다. 기능이 작동하지 않는 동안에는 Google을 이용해 검색할 수 있습니다. 검색 엔진의 내용은 최근 것이 아닐 수 있다는 점을 주의해주세요.',
+'blanknamespace'        => '(일반)',
+
+# Preferences page
+'preferences'           => '사용자 환경 설정',
+'mypreferences'         => '사용자 환경 설정',
+'prefsnologin'          => '로그인하지 않음',
+'prefsnologintext'      => '사용자 환경 설정을 바꾸려면 먼저 [[Special:Userlogin|로그인]]해야 합니다.',
+'prefsreset'            => '사용자 환경 설정을 기본값으로 되돌렸습니다.',
+'qbsettings'            => '빨리가기 맞춤',
+'qbsettings-none'	=> '없음',
+'qbsettings-fixedleft'	=> '왼쪽',
+'qbsettings-fixedright'	=> '오른쪽',
+'qbsettings-floatingleft'	=> '왼쪽 고정',
+'qbsettings-floatingright'	=> '오른쪽 고정',
+'changepassword'        => '암호 바꾸기',
+'skin'                  => '스킨',
+'math'                  => '수식',
+'dateformat'            => '날짜 형식',
+'datedefault'           => '기본값',
+'datetime'              => '날짜와 시각',
+'math_failure'          => '해석 실패',
+'math_unknown_error'    => '알 수 없는 오류',
+'math_unknown_function' => '알 수 없는 함수',
+'math_syntax_error'     => '구문 오류',
+'math_image_error'      => 'PNG 변환 실패 - latex, dvips, gs가 올바르게 설치되어 있는지 확인해 주세요.',
+'math_bad_tmpdir'       => '수식을 임시 폴더에 저장하거나 폴더를 만들 수 없습니다.',
+'math_bad_output'       => '수식을 출력 폴더에 저장하거나 폴더를 만들 수 없습니다.',
+'math_notexvc'          => '실행할 수 있는 texvc이 없습니다. 설정을 위해 math/README를 읽어 주세요.',
+'prefs-personal'        => '사용자 정보',
+'prefs-rc'              => '최근 바뀜',
+'prefs-watchlist'       => '주시문서 목록',
+'prefs-watchlist-days'  => '주시문서 목록에 보이는 날짜 수:',
+'prefs-watchlist-edits' => '주시문서 목록에 보이는 편집 갯수:',
+'prefs-misc'            => '기타',
+'saveprefs'             => '저장',
+'resetprefs'            => '기본 설정으로',
+'oldpassword'           => '현재 암호',
+'newpassword'           => '새 암호',
+'retypenew'             => '새 암호 확인',
+'textboxsize'           => '편집상자 크기',
+'rows'                  => '줄 수:',
+'columns'               => '열:',
+'searchresultshead'     => '찾기',
+'resultsperpage'        => '쪽마다 보이는 결과 수:',
+'contextlines'          => '결과마다 보이는 줄 수:',
+'contextchars'          => '각 줄에 보이는 글 수:',
+'stubthreshold'         => '토막글을 표시할 한계값:',
+'recentchangescount'    => '최근 바뀜에 보이는 항목 수',
+'savedprefs'            => '설정을 저장했습니다.',
+'timezonelegend'        => '시간대',
+'timezonetext'          => '현지 시각과 서버 시각(UTC) 사이의 시차를 써 주세요.',
+'localtime'             => '현지 시각',
+'timezoneoffset'        => '시차¹',
+'servertime'            => '서버 시각',
+'guesstimezone'         => '웹 브라우저 설정에서 가져오기',
+'allowemail'            => '다른 사용자로부터의 이메일 허용',
+'defaultns'             => '기본으로 다음의 네임스페이스에서 찾기:',
+'default'               => '기본값',
+'files'                 => '파일',
+
+# User rights
+'userrights-lookup-user'     => '사용자 권한 관리',
+'userrights-user-editname'   => '사용자 이름:',
+'editusergroup'              => '사용자 그룹 편집',
+'userrights-editusergroup'   => '사용자 그룹 편집',
+'saveusergroups'             => '사용자 권한 저장',
+'userrights-groupsmember'    => '현재 권한:',
+'userrights-groupsavailable' => '가능한 권한:',
+'userrights-groupshelp'      => '현재 권한에서 제거하려는 권한이나, 가능한 권한에서 추가하려는 권한을 선택해 주세요. 선택하지 않은 권한은 변경되지 않습니다. CTRL을 누른 채 클릭하면 선택을 해제할 수 있습니다.',
+
+# Groups
+'group'            => '권한:',
+'group-bot'        => '봇',
+'group-sysop'      => '관리자',
+'group-bureaucrat' => '뷰로크랫',
+'group-all'        => '(모두)',
+
+'group-bot-member'        => '봇',
+'group-sysop-member'      => '관리자',
+'group-bureaucrat-member' => '뷰로크랫',
+
+'grouppage-bot'        => 'Project:봇',
+'grouppage-sysop'      => 'Project:관리자',
+'grouppage-bureaucrat' => 'Project:뷰로크랫',
+
+# User rights log
+'rightslog'      => '사용자 권한 기록',
+'rightslogtext'  => '사용자 권한 조정 기록입니다.',
+'rightslogentry' => '$1의 권한을 $2에서 $3으로 변경',
+'rightsnone'     => '(없음)',
+
+# Recent changes
+'changes'                           => '변경',
+'recentchanges'                     => '최근 바뀜',
+'recentchangestext'                 => '위키의 최근 바뀜 내역이 나와 있습니다.',
+'rcnote'                            => '다음은 $3까지 <strong>$2</strong>일간 바뀐 <strong>$1</strong>개의 문서입니다.',
+'rcnotefrom'                        => '다음은 <strong>$2</strong>에서부터 바뀐 <strong>$1</strong>개의 문서입니다.',
+'rclistfrom'                        => '$1 이래로 바뀐 문서',
+'rcshowhideminor'                   => '사소한 편집을 $1',
+'rcshowhidebots'                    => '봇을 $1',
+'rcshowhideliu'                     => '로그인한 사용자를 $1',
+'rcshowhideanons'                   => '익명 사용자를 $1',
+'rcshowhidepatr'                    => '검토된 편집을 $1',
+'rcshowhidemine'                    => '내 편집을 $1',
+'rclinks'                           => '최근 $2일 동안에 바뀐 $1개의 문서를 봅니다.<br />$3',
+'diff'                              => '차이',
+'hist'                              => '역사',
+'hide'                              => '숨기기',
+'show'                              => '보이기',
+'minoreditletter'                   => '잔글',
+'newpageletter'                     => '새글',
+'boteditletter'                     => 'b',
+'sectionlink'                       => '→',
+'number_of_watching_users_pageview' => '[$1 명이 주시하고 있음]',
+'rc_categories'                     => '다음 분류로 제한 (‘|’로 구분)',
+'rc_categories_any'                 => '모두',
+
+# Upload
+'upload'                      => '파일 올리기',
+'uploadbtn'                   => '파일 올리기',
+'reupload'                    => '다시 올리기',
+'reuploaddesc'                => '올리기 양식으로 돌아가기',
+'uploadnologin'               => '로그인하지 않음',
+'uploadnologintext'           => '파일을 올리려면 [[Special:Userlogin|로그인]]해야 합니다.',
+'upload_directory_read_only'  => '파일 저장 디렉토리($1)에 쓰기 권한이 없습니다.',
+'uploaderror'                 => '올리기 오류',
+'uploadtext'                  => "파일을 올리기 위해서는 아래의 양식을 채워주세요. 또는 예전에 올라온 그림을 찾으려면 [[Special:Imagelist|파일 목록]]을 사용할 수 있습니다. [[Special:Log/upload|올리기 기록]]에서 파일이 올라온 기록과 삭제된 기록을 볼 수 있습니다.
+
+문서에 그림을 집어넣으려면 '''<nowiki>[[</nowiki>{{ns:image}}<nowiki>:File.jpg]]</nowiki>''', '''<nowiki>[[</nowiki>{{ns:image}}<nowiki>:File.png|대체 설명]]</nowiki>'''과 같이 사용합니다. 또는 파일에 직접 링크하려면 '''<nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki>'''와 같이 씁니다.",
+'uploadlog'                   => '올리기 기록',
+'uploadlogpage'               => '올리기 기록',
+'uploadlogpagetext'           => '최근 올라온 그림 목록입니다.',
+'filename'                    => '파일이름',
+'filedesc'                    => '파일의 설명',
+'fileuploadsummary'           => '설명:',
+'filestatus'                  => '저작권 상태',
+'filesource'                  => '출처',
+'copyrightpage'               => 'Project:저작권',
+'copyrightpagename'           => '{{SITENAME}} 저작권',
+'uploadedfiles'               => '파일 올리기',
+'ignorewarning'               => '경고를 무시하고 저장합니다.',
+'ignorewarnings'              => '모든 경고 무시하기',
+'minlength'                   => '파일 이름은 세 글자 이상이어야 합니다.',
+'illegalfilename'             => '파일명 "$1"에는 문서 제목으로 허용되지 않는 글자가 포함되어 있습니다. 이름을 바꾸어 다시 시도해 주세요.',
+'badfilename'                 => '파일 이름이 "$1"로 바뀌었습니다.',
+'badfiletype'                 => '".$1" 형식은 권장하지 않습니다.',
+'large-file'                  => '파일 크기는 $1을 넘지 않는 것을 추천합니다. 이 파일의 크기는 $2입니다.',
+'largefileserver'             => '이 파일의 크기가 서버에서 허용된 설정보다 큽니다.',
+'emptyfile'                   => '당신이 올린 파일이 빈 파일입니다. 파일명을 잘못 입력했을 수도 있습니다. 다시 한 번 확인해 주시기 바랍니다.',
+'fileexists'                  => '같은 이름의 파일이 이미 있습니다. 파일을 바꾸고 싶지 않다면 $1을 확인해 주시기 바랍니다.',
+'fileexists-forbidden'        => '같은 이름의 파일이 이미 있습니다. 뒤로 돌아가서 다른 이름으로 시도해 주시기 바랍니다. [[Image:$1|thumb|center|$1]]',
+'fileexists-shared-forbidden' => '같은 이름의 파일이 이미 공용 파일 저장소에 있습니다. 뒤로 돌아가서 다른 이름으로 시도해 주시기 바랍니다. [[Image:$1|thumb|center|$1]]',
+'successfulupload'            => '올리기 성공',
+'fileuploaded'                => '파일 $1을 올렸습니다. $2에서 파일의 정보, 출처, 파일이 만들어진 시기와 만든 사람의 정보 등을 추가해 주시기 바랍니다. 만약 그림이라면, 다음과 같은 내용을 추가할 수 있습니다: <tt><nowiki>[[</nowiki>{{ns:Image}}<nowiki>:$1|thumb|설명]]</nowiki></tt>',
+'uploadwarning'               => '올리기 경고',
+'savefile'                    => '파일 저장',
+'uploadedimage'               => '"[[$1]]"을(를) 올렸습니다.',
+'uploaddisabled'              => '올리기 비활성화됨',
+'uploaddisabledtext'          => '이 위키에서는 파일 올리기 기능이 비활성화되어 있습니다.',
+'uploadscripted'              => '이 파일에는 HTML이나 다른 스크립트 코드가 포함되어 있어, 웹 브라우저에서 오류를 일으킬 수 있습니다.',
+'uploadcorrupt'               => '이 파일은 잘못된 형식을 가지고 있습니다. 파일을 확인하고 다시 시도해 주세요.',
+'uploadvirus'                 => '파일이 바이러스를 포함하고 있습니다! 상세 설명: $1',
+'sourcefilename'              => '원본 파일 이름',
+'destfilename'                => '파일의 새 이름',
+'watchthisupload'             => '이 문서 주시하기',
+'filewasdeleted'              => '같은 이름을 가진 파일이 올라온 적이 있었고, 그 후에 삭제되었습니다. 올리기 전에 $1을 확인해 주시기 바랍니다.',
+
+'license'   => '저작권',
+'nolicense' => '선택하지 않음',
+
+# Image list
+'imagelist'                 => '그림 목록',
+'imagelisttext'             => '$1개의 파일이 $2 순으로 정렬되어 있습니다.',
+'imagelistforuser'          => '$1 사용자가 올린 그림만을 보여줍니다.',
+'getimagelist'              => '그림 목록 가져오기',
+'ilsubmit'                  => '찾기',
+'showlast'                  => '최근의 $1개 파일이 $2 순으로 정렬되어 있습니다.',
+'byname'                    => '이름',
+'bydate'                    => '날짜',
+'bysize'                    => '크기',
+'imgdelete'                 => '삭제',
+'imgdesc'                   => '설명',
+'imglegend'                 => '상세 설명: (설명) = 그림 설명을 보거나 편집합니다.',
+'imghistory'                => '파일 역사',
+'revertimg'                 => '되돌리기',
+'deleteimg'                 => '삭제',
+'deleteimgcompletely'       => '이 파일의 과거 버전을 모두 삭제하기',
+'imghistlegend'             => '상세 설명: (현재) = 현재의 그림입니다. (삭제) = 옛 버전을 삭제합니다. (돌림) = 옛 버전으로 되돌려 놓습니다.<br />특정 날짜에 올라온 그림을 보려면, 날짜를 선택해주세요.',
+'imagelinks'                => '그림 링크',
+'linkstoimage'              => '다음 문서들이 이 그림을 사용하고 있습니다:',
+'nolinkstoimage'            => '이 그림을 사용하는 문서가 없습니다.',
+'sharedupload'              => '이 파일은 공용 저장소에 있습니다. 다른 프로젝트에서 사용하고 있을 가능성이 있습니다.',
+'shareduploadwiki'          => '$1에서 더 자세한 정보를 얻을 수 있습니다.',
+'shareduploadwiki-linktext' => '파일 설명 문서',
+'noimage'                   => '파일이 없습니다. $1할 수 있습니다.',
+'noimage-linktext'          => '업로드',
+'uploadnewversion-linktext' => '이 파일의 새로운 버전을 올리기',
+
+# MIME search
+'mimesearch' => 'MIME 검색',
+'mimetype'   => 'MIME 종류:',
+'download'   => '다운로드',
+
+# Unwatched pages
+'unwatchedpages' => '주시되지 않는 문서 목록',
+
+# List redirects
+'listredirects' => '넘겨주기 문서 목록',
+
+# Unused templates
+'unusedtemplates'     => '사용하지 않는 틀 목록',
+'unusedtemplatestext' => '다른 문서에 사용되지 않는 틀을 모아 놓았습니다. 삭제하기 전에 쓰이지 않는지를 다시 한번 확인해 주세요.',
+'unusedtemplateswlh'  => '다른 링크',
+
+# Random redirect
+'randomredirect' => '임의 넘겨주기 문서로',
+
+# Statistics
+'statistics'             => '통계',
+'sitestats'              => '{{SITENAME}} 통계',
+'userstats'              => '사용자 통계',
+'sitestatstext'          => "현재 데이터베이스에는 '''\$1'''개의 문서가 있습니다. 이것은 토론 문서, {{SITENAME}} 문서, \"토막글\" 문서, 넘겨주기 문서 등을 포함하고 있습니다. 이것들을 제외하면 '''\$2'''개의 문서가 있습니다.
+
+'''\$8'''개의 파일이 올라와 있습니다.
+
+위키가 설치된 후 문서는 전체 '''\$3'''번 읽혔고, '''\$4'''번 편집되었습니다. 문서당 평균 편집 횟수는 '''\$5'''번이고, 한번 편집할 때마다 평균 '''\$6'''번 문서를 보았습니다.
+
+[http://meta.wikimedia.org/wiki/Help:Job_queue job queue]의 길이는 '''\$7'''입니다.",
+'userstatstext'          => "'''$1'''명의 사용자가 등록되어 있고, 이 중 $5 수는 '''$2'''명('''$4%''')입니다. ($3 참조)",
+'statistics-mostpopular' => '가장 많이 읽힌 문서',
+
+'disambiguations'     => '동음이의 문서 목록',
+'disambiguationspage' => 'Template:Disambig',
+
+'doubleredirects'     => '이중 넘겨주기 목록',
+'doubleredirectstext' => '각 열의 첫번째 문서는 두번째 문서로, 두번째 문서는 세번째 문서로 연결됩니다. 첫번째 문서를 마지막 문서로 연결해 주어야 합니다.',
+
+'brokenredirects'     => '끊긴 넘겨주기 목록',
+'brokenredirectstext' => '존재하지 않는 문서로 넘겨주기가 되어 있는 문서의 목록입니다:',
+
+# Miscellaneous special pages
+'nbytes'                  => '$1 바이트',
+'ncategories'             => '$1개의 분류',
+'nlinks'                  => '$1개의 링크',
+'nmembers'                => '$1명의 사용자',
+'nrevisions'              => '$1개의 판',
+'nviews'                  => '$1번 읽음',
+'lonelypages'             => '외톨이 문서 목록',
+'lonelypagestext'         => '다른 문서에서 연결하지 않는 문서의 목록입니다.',
+'uncategorizedpages'      => '분류되지 않은 문서 목록',
+'uncategorizedcategories' => '분류되지 않은 분류 목록',
+'uncategorizedimages'     => '분류되지 않은 그림 목록',
+'unusedcategories'        => '사용하지 않는 분류 목록',
+'unusedimages'            => '사용하지 않는 그림 목록',
+'popularpages'            => '인기있는 문서 목록',
+'wantedcategories'        => '필요한 분류 목록',
+'wantedpages'             => '필요한 문서 목록',
+'mostlinked'              => '가장 많이 연결된 문서 목록',
+'mostlinkedcategories'    => '가장 많이 연결된 분류 목록',
+'mostcategories'          => '가장 많이 분류된 문서 목록',
+'mostimages'              => '가장 많이 연결된 그림 목록',
+'mostrevisions'           => '가장 많이 편집된 문서 목록',
+'allpages'                => '모든 문서 목록',
+'prefixindex'             => '접두어 목록',
+'randompage'              => '임의 문서로',
+'shortpages'              => '짧은 문서 목록',
+'longpages'               => '긴 문서 목록',
+'deadendpages'            => '막다른 문서 목록',
+'deadendpagestext'        => '다른 문서로 연결하지 않는 문서의 목록입니다.',
+'listusers'               => '사용자 목록',
+'specialpages'            => '특수 문서 목록',
+'spheading'               => '일반 특수 문서',
+'restrictedpheading'      => '제한된 특수 문서',
+'recentchangeslinked'     => '가리키는 글의 바뀜',
+'rclsub'                  => '(‘$1’에서 링크된 문서들)',
+'newpages'                => '새 문서 목록',
+'newpages-username'       => '이름:',
+'ancientpages'            => '오래된 문서 목록',
+'intl'                    => '인터위키',
+'move'                    => '이동',
+'movethispage'            => '문서 이동하기',
+'unusedimagestext'        => '<p>다른 사이트에서 그림의 URL을 사용하고 있을 가능성이 있고, 따라서 이 목록에 있는 그림도 사용하고 있을 수 있습니다.</p>',
+'unusedcategoriestext'    => '사용하지 않는 분류 문서들의 목록입니다.',
+
+# Book sources
+'booksources' => '책의 출처',
+
+'categoriespagetext' => '위키에 존재하는 분류의 목록입니다.',
+'data'               => '자료',
+'userrights'         => '사용자 권한 관리',
+'groups'             => '사용자 권한 목록',
+'isbn'               => 'ISBN',
+'alphaindexline'     => '$1에서 $2까지',
+'version'            => '버전',
+'log'                => '로그 목록',
+'alllogstext'        => '파일 올리기, 문서 삭제, 보호, 사용자 차단, 관리자 기록이 모두 나와 있습니다. 원하는 기록을 선택해서 볼 수 있습니다.',
+'logempty'           => '일치하는 항목이 없습니다.',
+
+# Special:Allpages
+'nextpage'          => '다음 문서 ($1)',
+'allpagesfrom'      => '다음으로 시작하는 문서들을 보여주기:',
+'allarticles'       => '모든 문서',
+'allinnamespace'    => '$1 네임스페이스의 모든 문서',
+'allnotinnamespace' => '$1 네임스페이스를 제외한 모든 문서 목록',
+'allpagesprev'      => '이전',
+'allpagesnext'      => '다음',
+'allpagessubmit'    => '표시',
+'allpagesprefix'    => '다음 접두어로 시작하는 문서 목록:',
+'allpagesbadtitle'  => '문서 제목이 잘못되었거나 다른 사이트로 연결되는 인터위키를 가지고 있습니다. 문서 제목에 사용할 수 없는 문자를 사용했을 수 있습니다.',
+
+# Special:Listusers
+'listusersfrom' => '다음으로 시작하는 사용자 보이기:',
+
+# E-mail user
+'mailnologin'     => '보낼 이메일 주소가 없음',
+'mailnologintext' => '다른 사용자에게 이메일을 보내려면 {{SITENAME}}에 [[Special:Userlogin|로그인]]한 상태에서 [[Special:Preferences|사용자 환경 설정]]에 자신의 이메일 주소를 저장해야 합니다.',
+'emailuser'       => '이 사용자에게 이메일 보내기',
+'emailpage'       => '사용자에게 이메일 보내기',
+'emailpagetext'   => '이 사용자가 환경설정에 올바른 이메일 주소를 적었다면, 아래 양식을 통해 이메일을 보낼 수 있습니다. 받는이가 바로 답장할 수 있도록, 당신의 설정에 적힌 주소가 ‘보낸이’ 주소에 들어갑니다.',
+'usermailererror' => '메일 객체에서 오류 발생:',
+'defemailsubject' => '{{SITENAME}} 이메일',
+'noemailtitle'    => '이메일 주소 없음',
+'noemailtext'     => '이 사용자는 올바른 이메일 주소를 입력하지 않았거나, 이메일을 받지 않도록 설정해 놓았습니다.',
+'emailfrom'       => '이메일 발신자',
+'emailto'         => '수신자',
+'emailsubject'    => '제목',
+'emailmessage'    => '내용',
+'emailsend'       => '보내기',
+'emailsent'       => '이메일 보냄',
+'emailsenttext'   => '이메일을 보냈습니다.',
+
+# Watchlist
+'watchlist'            => '주시문서 목록',
+'mywatchlist'            => '주시문서 목록',
+'watchlistfor'         => "('''$1'''의 목록)",
+'nowatchlist'          => '주시하는 문서가 아직 없습니다.',
+'watchlistanontext'    => '주시문서 목록의 항목들을 보거나 편집하려면 $1을(를) 보세요.',
+'watchlistcount'       => "'''주시문서 목록에는 토론 문서를 포함해 $1개의 문서가 있습니다.'''",
+'clearwatchlist'       => '주시문서 목록 비우기',
+'watchlistcleartext'   => '정말로 이 항목들을 제거할까요?',
+'watchlistclearbutton' => '목록 초기화',
+'watchlistcleardone'   => '목록이 초기화되었습니다. $1개의 항목이 제거되었습니다.',
+'watchnologin'         => '로그인하지 않음',
+'watchnologintext'     => '[[Special:Userlogin|로그인]]을 해야만 주시문서 목록을 볼 수 있습니다.',
+'addedwatch'           => '주시문서 목록에 추가',
+'addedwatchtext'       => "‘[[:$1]]’ 문서가 주시문서 목록에 추가되었습니다. 앞으로 이 문서나 토론 문서가 변경되면 [[Special:Recentchanges|최근 바뀜]]에서 변경점들이 '''굵은 글씨'''로 나타날 것입니다. 더 이상 주시하지 않으려면 ‘주시 해제’를 누르면 됩니다.",
+'removedwatch'         => '주시문서 목록에서 제거',
+'removedwatchtext'     => '‘[[:$1]]’ 문서를 주시문서 목록에서 제거했습니다.',
+'watch'                => '주시',
+'watchthispage'        => '주시하기',
+'unwatch'              => '주시 해제',
+'unwatchthispage'      => '주시 해제하기',
+'notanarticle'         => '문서가 아님',
+'watchnochange'        => '주어진 기간 중에 바뀐 주시문서가 없습니다.',
+'watchdetails'         => '* $1개(토론 제외)의 문서를 주시하고 있습니다.
+* [[Special:Watchlist/edit|주시문서 목록 전체 보기·편집]]
+* [[Special:Watchlist/clear|모두 주시문서 목록에서 삭제]]',
+'wlheader-enotif'      => '* 이메일 알림 기능이 활성화되었습니다.',
+'wlheader-showupdated' => "* 마지막으로 방문한 이후에 바뀐 문서들은 '''굵은 글씨'''로 표시됩니다.",
+'removechecked'        => '선택한 문서를 주시문서 목록에서 삭제',
+'watchlistcontains'    => '$1개의 문서를 주시하고 있습니다.',
+'watcheditlist'        => '주시문서 목록이 순서대로 정렬되어 있습니다. 주시하지 않을 문서들을 선택하고 아래의 버튼을 누르면 주시문서 목록에서 제거됩니다. (일반 문서를 주시 해제하면 토론 문서도 자동으로 해제되고, 반대의 경우도 마찬가지입니다.)',
+'removingchecked'      => '주시문서 목록에서 항목들을 삭제하는 중입니다...',
+'couldntremove'        => '‘$1’ 문서를 삭제할 수 없습니다.',
+'iteminvalidname'      => '"$1" 항목에 문제가 발생했습니다. 이름이 잘못되었습니다...',
+'wlnote'               => "다음은 최근 '''$2'''시간 동안에 바뀐 $1개의 문서입니다.",
+'wlshowlast'           => '$3 최근 $1 시간 $2 일 동안에 바뀐 문서',
+'wlsaved'              => '이것은 주시문서 목록에 저장되어 있는 판입니다.',
+'watchlist-show-bots'  => '봇의 편집을 보이기',
+'watchlist-hide-bots'  => '봇의 편집을 숨기기',
+'watchlist-show-own'   => '나의 편집을 보이기',
+'watchlist-hide-own'   => '나의 편집을 숨기기',
+'watchlist-show-minor' => '사소한 편집을 보이기',
+'watchlist-hide-minor' => '사소한 편집을 숨기기',
+'wldone'               => '완료.',
+
+'enotif_mailer'      => '{{SITENAME}} 자동 알림 메일',
+'enotif_reset'       => '모든 문서를 방문한 것으로 표시하기',
+'enotif_newpagetext' => '이것은 새 문서입니다.',
+'changed'            => '바뀜',
+'created'            => '만들어짐',
+'enotif_subject'     => '{{SITENAME}}의 문서 $PAGETITLE이 $PAGEEDITOR에 의해 $CHANGEDORCREATED되었습니다',
+'enotif_lastvisited' => '당신의 마지막 방문 이후의 모든 변경사항을 보려면 $1을(를) 보십시오.',
+'enotif_body'        => '$WATCHINGUSERNAME에게,
+
+{{SITENAME}}의 문서 $PAGETITLE이 $PAGEEDITOR에 의해 $CHANGEDORCREATED되었습니다. 현재의 문서는 $PAGETITLE_URL에서 볼 수 있습니다.
+
+$NEWPAGE
+
+편집 요약: $PAGESUMMARY $PAGEMINOREDIT
+
+다음을 통해 편집자와 대화를 할 수 있습니다:
+이메일: $PAGEEDITOR_EMAIL
+위키: $PAGEEDITOR_WIKI
+
+이 문서를 방문하기 전까지는 알림 이메일은 발송되지 않습니다.
+
+             {{SITENAME}} 알림 시스템
+
+--
+주시문서 설정을 바꾸려면 다음을 사용하세요:
+{{fullurl:{{ns:special}}:Watchlist/edit}}
+
+도움말:
+{{fullurl:{{ns:help}}:Contents}}',
+
+# Delete/protect/revert
+'deletepage'                  => '문서 삭제하기',
+'confirm'                     => '확인',
+'excontent'                   => '내용: ‘$1’',
+'excontentauthor'             => '내용: ‘$1’ (그리고 편집한 사람은 ‘$2’뿐)',
+'exbeforeblank'               => '비우기 전의 내용: ‘$1’',
+'exblank'                     => '빈 문서',
+'confirmdelete'               => '삭제 확인',
+'deletesub'                   => '($1 삭제)',
+'historywarning'              => '주의: 현재 삭제하려는 문서에는 문서 역사가 있습니다:',
+'confirmdeletetext'           => '문서나 그림, 그리고 이 문서의 역사를 삭제하려고 합니다. 삭제하기 전에 다시 한번 문서 역사를 확인해 주시기 바랍니다.',
+'actioncomplete'              => '명령완료',
+'deletedtext'                 => '$1 문서가 삭제되었습니다. $2에서 최근의 삭제 기록을 볼 수 있습니다.',
+'deletedarticle'              => '[[$1]] 삭제됨',
+'dellogpage'                  => '삭제 기록',
+'dellogpagetext'              => '아래의 목록은 최근에 삭제된 문서들입니다.',
+'deletionlog'                 => '삭제 기록',
+'reverted'                    => '이전 버전으로 되돌렸습니다.',
+'deletecomment'               => '삭제 이유',
+'imagereverted'               => '이전 버전으로 되돌렸습니다.',
+'rollback'                    => '편집 되돌리기',
+'rollback_short'              => '되돌리기',
+'rollbacklink'                => '되돌리기',
+'rollbackfailed'              => '되돌리기 실패',
+'cantrollback'                => '편집을 되돌릴 수 없습니다. 문서를 편집한 사용자가 한명뿐입니다.',
+'alreadyrolled'               => '[[$1]]에서 [[User:$2|$2]]([[User talk:$2|토론]])의 편집을 되돌릴 수 없습니다. 누군가가 문서를 고치거나 되돌렸습니다.
+
+마지막으로 문서를 편집한 사람은[[User:$3|$3]]([[User talk:$3|토론]])입니다.',
+'revertpage'                  => '[[Special:Contributions/$2|$2]]([[User talk:$2|토론]])의 편집을 [[Special:Contributions/$1|$1]]의 버전으로 되돌림',
+'sessionfailure'              => '로그인 세션에 문제가 발생한 것 같습니다. 세션 하이재킹을 막기 위해 동작이 취소되었습니다. 브라우저의 "뒤로" 버튼을 누르고 문서를 새로고침한 후에 다시 시도해 주세요.',
+'protectlogpage'              => '문서 보호 기록',
+'protectlogtext'              => '아래의 목록은 문서 보호와 보호 해제 기록입니다.',
+'protectedarticle'            => '[[$1]] 문서가 보호됨',
+'unprotectedarticle'          => '"[[$1]]" 문서가 보호 해제되었음',
+'protectsub'                  => '("$1" 보호하기)',
+'confirmprotecttext'          => '이 문서를 정말로 보호하겠습니까?',
+'confirmprotect'              => '보호 확인',
+'protectmoveonly'             => '문서 이동만 보호하기',
+'protectcomment'              => '보호 이유',
+'unprotectsub'                => '("$1" 보호 해제하기)',
+'confirmunprotecttext'        => '이 문서를 정말로 보호 해제하겠습니까?',
+'confirmunprotect'            => '보호 해제 확인',
+'unprotectcomment'            => '보호 해제 이유',
+'protect-unchain'             => '이동 권한을 수동으로 조정',
+'protect-text'                => "'''$1''' 문서의 보호 수준을 보거나 변경할 수 있습니다.",
+'protect-viewtext'            => "문서 보호 권한이 없습니다. 다음은 현재 '''$1''' 문서의 보호 설정입니다:",
+'protect-default'             => '(기본값)',
+'protect-level-autoconfirmed' => '등록된 사용자만 가능',
+'protect-level-sysop'         => '관리자만 가능',
+'protect-summary-cascade'     => '연쇄적',
+'protect-cascade'             => '연쇄적 보호 - 이 문서에서 사용되는 다른 문서를 함께 보호합니다.',
+
+# Restrictions (nouns)
+'restriction-edit' => '편집',
+'restriction-move' => '이동',
+
+# Undelete
+'undelete'                 => '삭제된 문서 보기',
+'undeletepage'             => '삭제된 문서를 보거나 되살리기',
+'viewdeletedpage'          => '삭제된 문서 보기',
+'undeletepagetext'         => '다음의 문서는 삭제되었지만 보관되어 있고, 되살릴 수 있습니다. 보관된 문서들은 주기적으로 삭제될 것입니다.',
+'undeleteextrahelp'        => "문서 역사 전체를 복구하려면 모든 체크박스를 선택 해제한 뒤 '''복구'''를 누르세요.
+특정한 버전만을 복구하려면 복구하려는 버전들을 선택한 뒤 '''복구'''를 누르세요. '''초기화'''를 누르면 모든 선택이 취소됩니다.",
+'undeletearticle'          => '삭제된 문서 되살리기',
+'undeleterevisions'        => '$1개의 버전 보관중',
+'undeletehistory'          => '문서를 되살리면 모든 역사가 같이 복구됩니다. 문서가 삭제된 후에 같은 이름의 문서가 만들어졌다면, 복구되는 버전들은 역사의 과거 부분에 나타날 것입니다.',
+'undeletehistorynoadmin'   => '이 문서는 삭제되어 있습니다. 삭제된 이유와 삭제되기 전에 이 문서를 편집한 사용자들이 아래에 나와 있습니다. 삭제된 문서를 보려면 관리자 권한이 필요합니다.',
+'undeletebtn'              => '복구',
+'undeletereset'            => '초기화',
+'undeletedarticle'         => '"[[$1]]" 복구됨',
+'undeletedrevisions'       => '$1개의 버전이 복구되었습니다.',
+'undeletedrevisions-files' => '$1개의 버전과 $2개의 파일이 복구되었습니다.',
+'undeletedfiles'           => '$1개의 파일이 복구되었습니다.',
+'cannotundelete'           => '복구에 실패했습니다. 다른 누군가가 이미 복구했을 수도 있습니다.',
+'undeletedpage'            => "<big>'''$1이(가) 복구되었습니다.'''</big>
+
+[[Special:Log/delete|삭제 기록]]에서 최근의 삭제/복구 기록을 볼 수 있습니다.",
+
+# Namespace form on various pages
+'namespace' => '네임스페이스:',
+'invert'    => '선택 반전',
+
+# Contributions
+'contributions' => '사용자 기여',
+'mycontris'     => '내 기여 목록',
+'contribsub2'    => '$1 ($2)의',
+'nocontribs'    => '이 사용자는 어디에도 기여하지 않았습니다.',
+'ucnote'        => "이 사용자가 '''$2'''일 동안에 바꾼 '''$1'''개의 목록입니다.",
+'uclinks'       => '최근 $1개 보기; 최근 $2일 보기',
+'uctop'         => ' (최신)',
+
+'sp-contributions-blocklog' => '차단 기록',
+
+'sp-newimages-showfrom' => '$1부터 올라온 그림 목록 보기',
+
+# What links here
+'whatlinkshere' => '여기를 가리키는 글',
+'notargettitle' => '해당하는 문서 없음',
+'notargettext'  => '기능을 수행할 목표 문서나 목표 사용자를 지정하지 않았습니다.',
+'linklistsub'   => '(링크 목록)',
+'linkshere'     => "다음의 문서들이 '''[[:$1]]''' 문서를 가리키고 있습니다:",
+'nolinkshere'   => "'''[[:$1]]''' 문서를 가리키는 문서가 없습니다.",
+'isredirect'    => '넘겨주기 문서',
+'istemplate'    => '포함',
+
+# Block/unblock
+'blockip'                     => '사용자 차단',
+'blockiptext'                 => '차단할 IP 주소나 사용자 이름을 아래에 적어 주세요. 차단은 반드시 반달행위를 막기 위해서, 혹은 {{SITENAME}} 정책에 의해서만 이루어져야 합니다. 차단 이유도 같이 적어 주시기 바랍니다.',
+'ipaddress'                   => 'IP 주소',
+'ipadressorusername'          => 'IP 주소 또는 사용자 이름',
+'ipbexpiry'                   => '기간',
+'ipbreason'                   => '이유',
+'ipbanononly'                 => '익명 사용자만 차단',
+'ipbcreateaccount'            => '계정 생성을 막기',
+'ipbenableautoblock'          => '이 사용자가 최근에 사용했거나 앞으로 사용하는 IP를 자동으로 막기',
+'ipbsubmit'                   => '이 사용자를 차단하기',
+'ipbother'                    => '지정 기간',
+'ipboptions'                  => '2시간:2 hours,1일:1 day,3일:3 days,1주일:1 week,2주일:2 weeks,1개월:1 month,3개월:3 months,6개월:6 months,1년:1 year,무기한:infinite',
+'ipbotheroption'              => '수동으로 지정',
+'badipaddress'                => '잘못된 IP 주소',
+'blockipsuccesssub'           => '차단 완료',
+'blockipsuccesstext'          => '[[Special:Contributions/$1|$1]] 사용자가 차단되었습니다. 차단된 사용자 목록은 [[Special:Ipblocklist|여기]]에서 볼 수 있습니다.',
+'unblockip'                   => '사용자 차단 해제',
+'unblockiptext'               => '아래의 양식에 차단 해제하려는 IP 주소나 사용자 이름을 입력하세요.',
+'ipusubmit'                   => '차단 해제',
+'unblocked'                   => '[[User:$1|$1]] 사용자 차단 해제됨',
+'ipblocklist'                 => '차단된 IP 주소와 사용자 목록',
+'blocklistline'               => '$1, $2 사용자는 $3을 차단함 ($4)',
+'infiniteblock'               => '무기한',
+'expiringblock'               => '$1에 해제',
+'ipblocklistempty'            => '차단 목록이 비어 있습니다.',
+'blocklink'                   => '차단',
+'unblocklink'                 => '차단 해제',
+'contribslink'                => '기여',
+'autoblocker'                 => "당신의 IP 주소는 최근 ‘[[User:$1|$1]]’이(가) 사용하였기 때문에 자동으로 차단되었습니다. $1의 차단 이유는 다음과 같습니다: '''$2'''",
+'blocklogpage'                => '차단 기록',
+'blocklogentry'               => '[[$1]] 사용자를 $2 $3 차단함',
+'blocklogtext'                => '이 목록은 사용자 차단/차단 해제 기록입니다. 자동으로 차단된 IP 주소는 여기에 나오지 않습니다. [[Special:Ipblocklist|여기]]에서 현재 차단된 사용자 목록을 볼 수 있습니다.',
+'unblocklogentry'             => '$1을 차단 해제했습니다.',
+'range_block_disabled'        => 'IP 범위 차단 기능이 비활성화되어 있습니다.',
+'ipb_expiry_invalid'          => '차단 기간이 잘못되었습니다.',
+'ipb_already_blocked'         => '$1 사용자는 이미 차단됨',
+'ip_range_invalid'            => 'IP 범위가 잘못되었습니다.',
+'proxyblocker'                => '프록시 차단',
+'ipb_cant_unblock'            => '오류: 차단 ID $1이(가) 존재하지 않습니다. 이미 차단 해제되었을 수 있습니다.',
+'proxyblockreason'            => '당신의 IP 주소는 공개 프록시로 밝혀져 자동으로 차단됩니다. 만약 인터넷 사용에 문제가 있다면 인터넷 서비스 공급자에게 문의해주세요.',
+'proxyblocksuccess'           => '완료.',
+'sorbs'                       => 'SORBS DNSBL',
+'sorbsreason'                 => '당신의 IP 주소는 [http://www.sorbs.net SORBS] DNSBL의 공개 프록시 목록에 들어있습니다.',
+'sorbs_create_account_reason' => '당신의 IP 주소는 [http://www.sorbs.net SORBS] DNSBL의 공개 프록시 목록에 들어있습니다. 계정을 만들 수 없습니다.',
+
+# Developer tools
+'lockdb'              => '데이터베이스 잠그기',
+'unlockdb'            => '데이터베이스 잠금 해제',
+'lockdbtext'          => '데이터베이스를 잠그면 모든 사용자의 편집 권한, 환경 설정 변경 권한, 주시문서 편집 권한 등의 모든 기능이 정지됩니다. 정말로 잠가야 하는지를 다시 한번 확인해주세요.',
+'unlockdbtext'        => '데이터베이스를 잠금 해제하면 모든 사용자의 편집 권한, 환경 설정 변경 권한, 주시문서 편집 권한 등의 모든 기능이 복구됩니다. 정말로 잠금을 해제하려는지를 다시 한번 확인해주세요.',
+'lockconfirm'         => '네, 데이터베이스를 잠급니다.',
+'unlockconfirm'       => '네, 데이터베이스를 잠금 해제합니다.',
+'lockbtn'             => '데이터베이스 잠그기',
+'unlockbtn'           => '데이터베이스 잠금 해제',
+'locknoconfirm'       => '확인 체크박스를 선택하지 않았습니다.',
+'lockdbsuccesssub'    => '데이터베이스 잠김',
+'unlockdbsuccesssub'  => '데이터베이스 잠금 해제됨',
+'lockdbsuccesstext'   => '데이터베이스가 잠겼습니다.<br />관리가 끝나면 잠금을 해제하는 것을 잊지 말아 주세요.',
+'unlockdbsuccesstext' => '데이터베이스 잠금 상태가 해제되었습니다.',
+'lockfilenotwritable' => '데이터베이스 잠금 파일에 쓰기 권한이 없습니다. 데이터베이스를 잠그거나 잠금 해제하려면, 웹 서버에서 이 파일의 쓰기 권한을 설정해야 합니다.',
+'databasenotlocked'   => '데이터베이스가 잠겨 있지 않습니다.',
+
+# Move page
+'movepage'                => '문서 이동하기',
+'movepagetext'            => "아래 틀을 채워 문서의 이름을 바꿀 수 있습니다. 문서의 역사도 모두 새 문서로 옮겨집니다. 기존의 문서는 새 문서로 넘겨주는 문서가 됩니다. 기존 문서에서의 링크는 바뀌지 않습니다. 이중 넘겨주기와 끊긴 넘겨주기에 주의해주세요.
+
+만약 문서의 새 이름으로 된 문서가 존재할 때, 이 문서가 비었거나 넘겨주기 문서이고 문서 역사가 없을 때에만 이동합니다. 그렇지 않을 경우에는 이동하지 '''않습니다'''. 이것은 실수로 이동한 문서를 되돌릴 수는 있지만, 이미 존재하는 문서 위에 덮어씌울 수는 없다는 것을 의미합니다.
+
+'''주의!''' 자주 사용하는 문서를 이동하면 위험한 결과를 가져올 수 있습니다. 이동하기 전에, 이 문서를 이동해도 문제가 없다는 것을 확인해주세요.",
+'movepagetalktext'        => "딸린 토론 문서도 자동으로 이동합니다. 다음의 경우는 '''이동하지 않습니다''':
+* 이동할 이름으로 된 문서가 이미 있는 경우
+* 아래의 선택을 해제하는 경우
+이 경우에는 문서를 직접 이동하거나 두 문서를 합쳐야 합니다.",
+'movearticle'             => '문서 이동하기',
+'movenologin'             => '로그인하지 않음',
+'movenologintext'         => '[[Special:Userlogin|로그인]]해야만 문서를 이동할 수 있습니다.',
+'newtitle'                => '새 문서 이름',
+'movepagebtn'             => '이동',
+'pagemovedsub'            => '문서 옮겨짐',
+'pagemovedtext'           => '[[$1]] 문서를 [[$2]] 문서로 이동했습니다.',
+'articleexists'           => '문서가 이미 존재하거나, 문서 이름이 올바르지 않습니다. 다른 제목으로 시도해주세요.',
+'talkexists'              => "'''문서는 이동되었습니다. 하지만 딸린 토론 문서의 새 이름으로 된 문서가 이미 존재해서, 토론 문서는 이동하지 않았습니다. 직접 문서를 합쳐 주세요.'''",
+'movedto'                 => '새 이름',
+'movetalk'                => '딸린 토론도 함께 이동합니다.',
+'talkpagemoved'           => '딸린 토론도 이동했습니다.',
+'talkpagenotmoved'        => "딸린 토론은 이동하지 '''않았습니다'''.",
+'1movedto2'               => '[[$1]]을(를) [[$2]](으)로 옮김',
+'1movedto2_redir'         => '[[$1]]을(를) [[$2]](으)로 옮기면서 넘겨주기를 덮어 씀',
+'movelogpage'             => '이동 기록',
+'movelogpagetext'         => '아래는 옮겨진 문서의 목록입니다.',
+'movereason'              => '이유',
+'revertmove'              => '되돌리기',
+'delete_and_move'         => '삭제하고 이동',
+'delete_and_move_text'    => '== 삭제 필요 ==
+
+이동하려는 제목으로 된 문서 [[$1]]이(가) 이미 존재합니다. 삭제하고 이동할까요?',
+'delete_and_move_confirm' => '네. 문서를 삭제합니다',
+'delete_and_move_reason'  => '문서를 이동하기 위해 삭제함',
+'selfmove'                => '이동하려는 제목이 원래 제목과 같습니다. 이동할 수 없습니다.',
+'immobile_namespace'      => '특수한 네임스페이스로는 이동할 수 없습니다.',
+
+# Export
+'export'          => '문서 내보내기',
+'exporttext'      => '문서와 편집 역사들을 XML 형식으로 만들 수 있습니다. 이렇게 만들어지는 파일은 다른 미디어위키에서 Special:Import page를 통해 가져올 수 있습니다.
+
+문서를 내보내기 위해서는, 아래의 상자에 문서의 제목들을 한 줄에 한 제목씩 쓰면 됩니다. 그리고 현재의 버전만을 내보낼지, 또는 전체 역사, 최근의 내역 등을 내보낼지 선택해 주시기 바랍니다.
+
+특정 문서를 내보내려면, 예를 들어 {{Mediawiki:Mainpage}} 문서를 내보내려면 [[Special:Export/{{Mediawiki:Mainpage}}]] 문서를 사용할 수도 있습니다.',
+'exportcuronly'   => '현재 버전만 포함하고, 전체 역사는 포함하지 않음',
+'exportnohistory' => "----
+'''주의:''' 전체 문서 역사를 내보내는 기능은 성능 문제로 인해 비활성되어 있습니다.",
+'export-submit'   => '내보내기',
+
+# Namespace 8 related
+'allmessages'               => '시스템 메시지 목록',
+'allmessagesname'           => '이름',
+'allmessagesdefault'        => '기본 내용',
+'allmessagescurrent'        => '현재 내용',
+'allmessagestext'           => 'MediaWiki 네임스페이스에 있는 모든 시스템 메시지의 목록입니다.',
+'allmessagesnotsupportedUI' => "Special:Allmessages에서는 현재 인터페이스 언어 '''$1'''을(를) 지원하지 않습니다.",
+'allmessagesnotsupportedDB' => "'''\$wgUseDatabaseMessages'''가 해제되어 있어서 '''Special:Allmessages'''를 사용할 수 없습니다.",
+'allmessagesfilter'         => '다음 메시지만 보이기:',
+'allmessagesmodified'       => '변경된 것만 보여주기',
+
+# Thumbnails
+'thumbnail-more'  => '실제 크기로',
+'missingimage'    => "'''사라진 그림'''<br />''$1''",
+'filemissing'     => '파일 사라짐',
+'thumbnail_error' => '섬네일을 만드는 중 오류 발생: $1',
+
+# Special:Import
+'import'            => '문서 가져오기',
+'importuploaderror' => '파일 올리기를 실패했습니다. 파일의 크기가 허용치를 넘었을 수 있습니다.',
+
+# Tooltip help for the actions
+'tooltip-pt-userpage'             => '내 사용자 문서',
+'tooltip-pt-anonuserpage'         => '당신이 사용하는 IP를 위한 사용자 문서',
+'tooltip-pt-mytalk'               => '내 토론 문서',
+'tooltip-pt-anontalk'             => '당신이 사용하는 IP를 위한 사용자 토론 문서',
+'tooltip-pt-preferences'          => '사용자 환경 설정',
+'tooltip-pt-watchlist'            => '주시문서 목록',
+'tooltip-pt-mycontris'            => '내가 편집한 글',
+'tooltip-pt-login'                => 'You are encouraged to log in, it is not mandatory however.',
+'tooltip-pt-anonlogin'            => '꼭 필요한 것은 아니지만, 로그인을 하면 편리한 점이 많습니다.',
+'tooltip-pt-logout'               => '로그아웃',
+'tooltip-ca-talk'                 => '문서의 내용에 대한 토론 문서',
+'tooltip-ca-edit'                 => '문서를 편집할 수 있습니다. 저장하기 전에 미리보기를 해 주세요.',
+'tooltip-ca-addsection'           => '내용 추가하기',
+'tooltip-ca-viewsource'           => '문서가 잠겨 있습니다. 문서의 소스만 볼 수 있습니다.',
+'tooltip-ca-history'              => '문서의 과거 버전들',
+'tooltip-ca-protect'              => '문서 보호하기',
+'tooltip-ca-delete'               => '문서 삭제하기',
+'tooltip-ca-undelete'             => '삭제된 문서 복구하기',
+'tooltip-ca-move'                 => '문서 이동하기',
+'tooltip-ca-watch'                => '이 문서를 주시문서 목록에 추가합니다.',
+'tooltip-ca-unwatch'              => '이 문서를 주시문서 목록에서 제거합니다.',
+'tooltip-search'                  => '{{SITENAME}} 찾기',
+'tooltip-p-logo'                  => '대문',
+'tooltip-n-mainpage'              => '대문으로',
+'tooltip-n-portal'                => '이 프로젝트에 대해',
+'tooltip-n-currentevents'         => '최근의 소식을 봅니다.',
+'tooltip-n-recentchanges'         => '이 위키에서 최근 바뀐 점의 목록입니다.',
+'tooltip-n-randompage'            => '임의 문서로 갑니다.',
+'tooltip-n-help'                  => '도움말',
+'tooltip-n-sitesupport'           => '지원을 기다립니다.',
+'tooltip-t-whatlinkshere'         => '여기로 연결된 모든 문서의 목록',
+'tooltip-t-recentchangeslinked'   => '여기로 연결된 모든 문서의 변경 내역',
+'tooltip-feed-rss'                => '이 문서의 RSS 피드입니다.',
+'tooltip-feed-atom'               => '이 문서의 Atom 피드입니다.',
+'tooltip-t-contributions'         => '이 사용자의 기여 목록을 봅니다.',
+'tooltip-t-emailuser'             => '이 사용자에게 이메일을 보냅니다.',
+'tooltip-t-upload'                => '파일을 올립니다.',
+'tooltip-t-specialpages'          => '모든 특수 문서의 목록입니다.',
+'tooltip-ca-nstab-main'           => '문서 내용을 봅니다.',
+'tooltip-ca-nstab-user'           => '사용자 문서 내용을 봅니다.',
+'tooltip-ca-nstab-media'          => '미디어 문서 내용을 봅니다.',
+'tooltip-ca-nstab-special'        => '이것은 특수 문서로, 편집할 수 없습니다.',
+'tooltip-ca-nstab-project'        => '프로젝트 문서 내용을 봅니다.',
+'tooltip-ca-nstab-image'          => '그림 문서 내용을 봅니다.',
+'tooltip-ca-nstab-mediawiki'      => '시스템 메시지 내용을 봅니다.',
+'tooltip-ca-nstab-template'       => '틀 문서 내용을 봅니다.',
+'tooltip-ca-nstab-help'           => '도움말 문서 내용을 봅니다.',
+'tooltip-ca-nstab-category'       => '분류 문서 내용을 봅니다.',
+'tooltip-minoredit'               => '사소한 편집으로 표시하기',
+'tooltip-save'                    => '편집 내용을 저장하기',
+'tooltip-preview'                 => '편집 미리보기. 저장하기 전에 꼭 미리보기를 해주세요.',
+'tooltip-diff'                    => '원래의 문서와 현재 편집하는 문서를 비교하기',
+'tooltip-compareselectedversions' => '이 문서에서 선택한 두 버전간의 차이를 비교',
+'tooltip-watch'                   => '이 문서를 주시문서 목록에 추가',
+'tooltip-recreate'                => '문서를 편집하는 중 삭제되어도 새로 만들기',
+
+# Stylesheets
+'common.css'   => '/** 이 CSS 설정은 모든 스킨에 적용됩니다 */',
+'monobook.css' => '/* 이 CSS 설정은 모든 모노북 스킨에 적용됩니다 */',
+
+# Scripts
+'common.js'   => '/* 이 자바스크립트 설정은 모든 문서, 모든 사용자에게 적용됩니다. */',
+'monobook.js' => '/* Deprecated; use [[MediaWiki:common.js]] */',
+
+# Metadata
+'nodublincore'      => '더블린 코어 RDF 메타데이터 기능은 비활성되어 있습니다.',
+'nocreativecommons' => '크리에이티브 커먼즈 RDF 메타데이터 기능은 비활성되어 있습니다.',
+
+# Attribution
+'anonymous'        => '{{SITENAME}}의 익명 사용자',
+'siteuser'         => '{{SITENAME}} 사용자 $1',
+'lastmodifiedatby' => '이 문서는 $3에 의해 $2, $1에 마지막으로 바뀌었습니다.', # $1 date, $2 time, $3 user
+'and'              => '그리고',
+'othercontribs'    => '$1의 작업을 바탕으로 함.',
+'others'           => '기타',
+'siteusers'        => '{{SITENAME}} 사용자 $1',
+'creditspage'      => '문서 기여자들',
+
+# Spam protection
+'spamprotectiontitle'    => '스팸 방지 필터',
+'spamprotectiontext'     => '스팸 필터가 문서 저장을 막았습니다. 다른 사이트로 연결하는 링크 중에 문제가 되는 사이트가 있을 것입니다.',
+'spamprotectionmatch'    => '문제가 되는 부분은 다음과 같습니다: $1',
+'subcategorycount'       => '이 분류에 $1개의 하위 분류가 있습니다.',
+'categoryarticlecount'   => '이 분류에 $1개의 문서가 있습니다.',
+'category-media-count'   => '이 분류에 $1개의 자료가 있습니다.',
+'listingcontinuesabbrev' => ' (계속)',
+'spambot_username'       => 'MediaWiki 스팸 제거',
+'spam_reverting'         => '$1을 포함하지 않는 최신 버전으로 되돌림',
+'spam_blanking'          => '모든 버전에 $1 링크를 포함하고 있어 문서를 비움',
+
+# Info page
+'infosubtitle'   => '문서 정보',
+'numedits'       => '편집 횟수(문서): $1',
+'numtalkedits'   => '편집 횟수(토론 문서): $1',
+'numwatchers'    => '주시하는 사용자 수: $1',
+'numauthors'     => '기여한 사용자 수(문서): $1',
+'numtalkauthors' => '기여한 사용자 수(토론 문서): $1',
+
+# Math options
+'mw_math_png'    => '항상 PNG로 표시',
+'mw_math_simple' => '아주 간단한 것은 HTML로, 나머지는 PNG로',
+'mw_math_html'   => '가능한 한 HTML로, 나머지는 PNG로',
+'mw_math_source' => 'TeX로 남겨둠 (텍스트 브라우저용)',
+'mw_math_modern' => '최신 웹 브라우저인 경우 추천',
+'mw_math_mathml' => '가능하면 MathML로 (시험판)',
+
+# Patrolling
+'markaspatrolleddiff'                 => '검토된 것으로 표시',
+'markaspatrolledtext'                 => '이 문서를 검토된 것으로 표시',
+'markedaspatrolled'                   => '검토된 것으로 표시',
+'markedaspatrolledtext'               => '선택한 버전이 검토된 것으로 표시되었습니다.',
+'rcpatroldisabled'                    => '최근 바뀜 검토 기능 비활성화됨',
+'rcpatroldisabledtext'                => '최근 바뀜 검토 기능은 현재 비활성화되어 있습니다.',
+'markedaspatrollederror'              => '검토된 것으로 표시할 수 없습니다.',
+'markedaspatrollederrortext'          => '검토된 것으로 표시할 버전을 지정해야 합니다.',
+'markedaspatrollederror-noautopatrol' => '자신의 편집을 스스로 검토된 것으로 표시하는 것은 허용되지 않습니다.',
+
+# Patrol log
+'patrol-log-page' => '검토 기록',
+
+# Image deletion
+'deletedrevision' => '예전 버전 $1이(가) 삭제되었습니다.',
+
+# Browsing diffs
+'previousdiff' => '← 이전 비교',
+'nextdiff'     => '다음 비교 →',
+
+'imagemaxsize' => '그림 설명 문서에 그림 크기를 다음으로 제한:',
+'thumbsize'    => '섬네일 크기:',
+'showbigimage' => '고해상도 버전 보기 ($1x$2, $3 KB)',
+
+'newimages'    => '새 그림 파일 목록',
+'showhidebots' => '(봇을 $1)',
+'noimages'     => '그림이 없습니다.',
+
+# Labels for User: and Title: on Special:Log pages
+'specialloguserlabel'  => '이름:',
+'speciallogtitlelabel' => '제목:',
+
+'passwordtooshort' => '암호가 너무 짧습니다. 암호 길이는 적어도 $1글자 이상이어야 합니다.',
+
+# Media Warning
+'mediawarning' => "'''경고''': 이 파일에는 시스템을 위험하게 만드는 악성 코드가 들어있을 수 있습니다.<br />",
+
+'fileinfo' => '$1KB, MIME 종류: <code>$2</code>',
+
+# Metadata
+'metadata'          => '메타데이터',
+'metadata-help'     => '이 파일은 카메라/스캐너 정보와 같은 부가적인 정보를 담고 있습니다. 파일을 변경한다면 몇몇 세부 사항은 변경된 그림에 적용되지 않을 수 있습니다.',
+'metadata-expand'   => '자세한 정보 보이기',
+'metadata-collapse' => '자세한 정보 숨기기',
+
+# External editor support
+'edit-externally'      => '이 파일을 외부 프로그램을 사용해서 편집하기',
+'edit-externally-help' => '[http://meta.wikimedia.org/wiki/Help:External_editors 여기]에서 외부 편집기에 대한 정보를 얻을 수 있습니다.',
+
+# 'all' in various places, this might be different for inflected languages
+'recentchangesall' => '모두',
+'imagelistall'     => '모두',
+'watchlistall1'    => '모두',
+'watchlistall2'    => '모두',
+'namespacesall'    => '모두',
+
+# E-mail address confirmation
+'confirmemail'            => '이메일 주소 확인',
+'confirmemail_text'       => '이 위키에서는 이메일과 관련된 기능을 사용하기 전에, 이메일 인증을 받아야 합니다. 아래의 버튼을 눌러 인증 메일을 보내세요. 메일에는 인증 코드를 포함한 링크가 들어 있을 것입니다. 링크를 브라우저에서 열면 인증이 됩니다.',
+'confirmemail_send'       => '인증 코드를 메일로 보내기',
+'confirmemail_sent'       => '인증 이메일을 보냈습니다.',
+'confirmemail_sendfailed' => '인증 이메일을 보낼 수 없습니다. 잘못된 주소인지 확인해 주십시오.
+
+메일 서버로부터의 응답: $1',
+'confirmemail_invalid'    => '인증 코드가 올바르지 않습니다. 코드가 소멸되었을 수도 있습니다.',
+'confirmemail_needlogin'  => '이메일 주소를 인증하려면 $1이 필요합니다.',
+'confirmemail_success'    => '당신의 이메일 주소가 인증되었습니다. 이제 로그인해서 위키를 사용하세요.',
+'confirmemail_loggedin'   => '당신의 이메일 주소는 이제 인증되었습니다.',
+'confirmemail_error'      => '당신의 인증을 저장하는 도중 오류가 발생했습니다.',
+'confirmemail_subject'    => '{{SITENAME}} 이메일 주소 인증',
+'confirmemail_body'       => '$1 아이피 주소를 사용하는 사용자가 "$2" 계정의 이메일 인증 신청을 했습니다.
+
+만약 이 계정이 당신의 계정이고 이메일 인증을 하려면, 다음 주소를 열어 주세요:
+
+$3
+
+만약 당신의 계정이 아니라면, 문서를 열지 마세요. 인증 코드는 $4에 만료됩니다.',
+
+# Inputbox extension, may be useful in other contexts as well
+'searchfulltext' => '전체 글 검색',
+'createarticle'  => '문서 만들기',
+
+# Scary transclusion
+'scarytranscludedisabled' => '[인터위키가 비활성되어 있습니다]',
+'scarytranscludefailed'   => '[$1 틀을 불러오는 데에 실패했습니다]',
+'scarytranscludetoolong'  => '[URL이 너무 깁니다]',
+
+# Trackbacks
+'trackbackbox'      => '<div id="mw_trackbacks">이 문서에 달린 트랙백:<br />$1</div>',
+'trackbackremove'   => ' ([$1 삭제])',
+'trackbacklink'     => '트랙백',
+'trackbackdeleteok' => '트랙백이 삭제되었습니다.',
+
+# Delete conflict
+'deletedwhileediting' => '주의: 당신이 이 문서를 편집하던 중에 이 문서가 삭제되었습니다.',
+'confirmrecreate'     => '[[User:$1|$1]]([[User talk:$1|토론]]) 사용자가 당신의 편집 도중 문서를 지웠습니다. 삭제 이유는 다음과 같습니다:
+: $2
+문서를 다시 되살릴 필요가 있는지를 확인해주세요.',
+'recreate'            => '새로 만들기',
+
+'unit-pixel' => 'px',
+
+# HTML dump
+'redirectingto' => '[[$1]]로 넘어가는 중...',
+
+# action=purge
+'confirm_purge'        => '문서의 캐시를 지울까요?
+
+$1',
+'confirm_purge_button' => '확인',
+
+'youhavenewmessagesmulti' => '$1 란에 누군가 글을 남겼습니다.',
+
+'searchcontaining' => '"$1"이 포함된 글을 검색합니다.',
+'searchnamed'      => '"$1" 이름을 가진 문서를 검색합니다.',
+'articletitles'    => "''$1''로 시작하는 문서들",
+'hideresults'      => '결과 숨기기',
+
+'loginlanguagelabel' => '언어: $1',
+
+# Table pager
+'table_pager_limit'        => '문서당 $1개 항목 보이기',
+'table_pager_limit_submit' => '확인',
+'table_pager_empty'        => '결과 없음',
+
+# Auto-summaries
+'autoredircomment' => '[[$1]](으)로 넘겨주기', # This should be changed to the new naming convention, but existed beforehand
+
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesKs.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesKs.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesKs.php	(revision 1280)
@@ -0,0 +1,23 @@
+<?php
+/** Kashmiri language file ( कश्मीरी - (ﻚﺸﻤﻳﺮﻳ) )
+  *
+  * @addtogroup Language
+  */
+
+#FIXME: inherit almost everything for now
+$rtl = true;
+
+$digitTransformTable = array(
+	'0' => '०',
+	'1' => '१',
+	'2' => '२',
+	'3' => '३',
+	'4' => '४',
+	'5' => '५',
+	'6' => '६',
+	'7' => '७',
+	'8' => '८',
+	'9' => '९',
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesKsh.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesKsh.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesKsh.php	(revision 1280)
@@ -0,0 +1,2122 @@
+<?php
+/**
+ * This is the default Ripuarian localisation file for ksh
+ * Version: 17. January 2007
+ * The majority of users are bilingual in Kölsch plus German, so use German as fallback.
+ */
+/**
+ * Sources:
+ * The following expressions are based on the Kölsch dictionaries: 
+ * Das Kölsche Wörterbuch, written by Christa Bhatt and Alice Herrwegen, 
+ * published by: Akademie för uns kölsche Sproch, Cologne 2005,
+ * ISBN 3-7616-1942-1
+ * and
+ * Neuer Kölnischer Sprachschatz in 3 Bänden, written by Adam Wrede, Cologne 1958, 
+ * ISBN 3-7743-0155-7  ISBN 3-7743-0156-5  ISBN 3-7743-0157-3
+ *
+ * The grammar (especially: conjugation) is taken from: 
+ * De kölsche Sproch - Kurzgrammatik Kölsch / Deutsch, written by Alice Tiling-Herrwegen, 
+ * published by: Akademie för uns kölsche Sproch, Cologne 2002,
+ * ISBN 3-7616-1604-X
+ *
+ * Special feature: Because of utilization in modern ripuarian literature
+ * (for example: Asterix op kölsch - Däm Asterix singe Jung, ISBN 3-7704-0468-8) the rules for the letters G and J 
+ * are taken from Adam Wrede (for example: Jedöns, jeeße, jejovve, adich, iggelich, nüdich ) 
+ * and not from the Akademie (for example: Gedöns, geeße, gegovve, aadig, iggelig, nüdig)
+ * Otherwise most part of the following expressions are taken from the Akademie.
+ *
+ * @addtogroup Language
+ *
+ * @author Caesius noh en Idee vum Manes
+ */
+/** 
+ * Hints for editing
+ * Avoid Ã¤ and other special codings because of legibility for those users, 
+ * who will take this as a basis for further ripuarian message interfaces
+ * Ã¤ => ä, Ã¶ => ö, Ã¼ => ü, Ã„ => Ä, Ã– => Ö, Ãœ => Ü, ÃŸ => ß
+ * â€ž => „, â€œ => “
+ */
+/**
+ * Fallback language, used for all unspecified messages and behaviour. This
+ * is English by default, for all files other than this one.
+ */
+$fallback = 'de';
+
+$namespaceNames = array(
+        NS_MEDIA            => 'Medie',
+        NS_SPECIAL          => 'Spezial',
+        NS_MAIN             => '',
+        NS_TALK             => 'Klaaf',
+        NS_USER             => 'Metmaacher',
+        NS_USER_TALK        => 'Metmaacher_Klaaf',
+        # NS_PROJECT set by $wgMetaNamespace
+        NS_PROJECT_TALK     => '$1_Klaaf',
+        NS_IMAGE            => 'Beld',
+        NS_IMAGE_TALK       => 'Belder_Klaaf',
+        NS_MEDIAWIKI        => 'MediaWiki',
+        NS_MEDIAWIKI_TALK   => 'MediaWiki_Klaaf',
+        NS_TEMPLATE         => 'Schablon',
+        NS_TEMPLATE_TALK    => 'Schablone_Klaaf',
+        NS_HELP             => 'Hölp',
+        NS_HELP_TALK        => 'Hölp_Klaaf',
+        NS_CATEGORY         => 'Saachjrupp',
+        NS_CATEGORY_TALK    => 'Saachjrupp_Klaaf',
+);
+
+/**
+ * Array of namespace aliases, mapping from name to NS_xxx index
+ */
+$namespaceAliases = array(
+	'Meedije'           => NS_MEDIA,
+	'Shpezjal'          => NS_SPECIAL,
+	'Medmaacher'        => NS_USER,
+	'Medmaacher_Klaaf'  => NS_USER_TALK,
+	'Belld'             => NS_IMAGE,
+	'Bellder_Klaaf'     => NS_IMAGE_TALK,
+	'MedijaWikki'       => NS_MEDIAWIKI,
+	'MedijaWikki_Klaaf' => NS_MEDIAWIKI_TALK,
+	'Hülp'              => NS_HELP,
+	'Hülp_Klaaf'        => NS_HELP_TALK,
+	'Sachjrop'          => NS_CATEGORY,
+	'Sachjrop_Klaaf'    => NS_CATEGORY_TALK,
+	'Saachjropp'        => NS_CATEGORY,
+	'Saachjroppe_Klaaf' => NS_CATEGORY_TALK,
+	'Kattejori'         => NS_CATEGORY,
+	'Kattejori_Klaaf'   => NS_CATEGORY_TALK,
+	'Kategorie'         => NS_CATEGORY,
+	'Kategorie_Klaaf'   => NS_CATEGORY_TALK,
+	'Katejori'          => NS_CATEGORY,
+	'Katejorije_Klaaf'  => NS_CATEGORY_TALK,
+);
+
+$separatorTransformTable = array(',' => "\xc2\xa0", '.' => ',' );
+
+/**
+ * Skin names. If any key is not specified, the English one will be used.
+ */
+$skinNames = array(
+        'standard'      => 'Standaad',
+        'nostalgia'     => 'Nostaljesch',
+        'cologneblue'   => 'Kölsch Blau',
+        'smarty'        => 'Päddington',
+        'montparnasse'  => 'Mont Panass',
+        'davinci'       => 'Da_Vintschi',
+        'mono'          => 'Mono',
+        'monobook'      => 'MonoBoch',
+        'myskin'        => 'Ming Skin',
+        'chick'         => 'Höhnche'
+);
+
+$messages = array(
+/*
+ * The sidebar for MonoBook is generated from this message, lines that do not
+ * begin with * or ** are discarded, furthermore lines that do begin with ** and
+ * do not contain | are also discarded, but don't depend on this behaviour for
+ * future releases. Also note that since each list value is wrapped in a unique
+ * XHTML id it should only appear once and include characters that are legal
+ * XHTML id names.
+ */
+# User preference toggles
+        'tog-underline'         => 'Dun de Links ungerstriche:',
+        'tog-highlightbroken'   => 'Zeich de Links op Sigge, die et noch nit jitt, esu met: „<a href="" class="new">Lemma</a>“ aan.<br />Wann De dat nit wells, weed et esu: „Lemma<a href="" class="internal">?</a>“ jezeich.',
+        'tog-justify'           => 'Dun de Avschnedde em Blocksatz aanzeije',
+        'tog-hideminor'         => 'Dun de klein Mini-Änderunge (<strong>M</strong>) en de Liss  met „Neuste Änderunge“ <strong>nit</strong> aanzeije',
+        'tog-extendwatchlist'   => 'Verjrößer de Oppassliss för jede Aat vun möchliche Änderunge ze zeije',
+        'tog-usenewrc'          => 'Dun de opgemotzte Liss met „Neuste Änderunge“ aanzeije (bruch Java_Skripp)',
+        'tog-numberheadings'    => 'Dun de Üvverschrefte automatisch nummereere',
+        'tog-showtoolbar'       => 'Zeich de Werkzeuchliss zom Ändere aan (bruch Java_Skripp)',
+        'tog-editondblclick'    => 'Sigge met Dubbel-Klicke ändere (bruch Java_Skripp)',
+        'tog-editsection'       => 'Maach [Ändere]-Links aan de Avschnedde dran',
+        'tog-editsectiononrightclick'=> 'Avschnedde met Räächs-Klicke op de Üvverschrefte ändere (bruch Java_Skripp)',
+        'tog-showtoc'           => 'Zeich en Enhaldsüvversich bei Sigge met mieh wie drei Üvverschrefte dren',
+        'tog-rememberpassword'  => 'Op Duur aanmelde',
+        'tog-editwidth'         => 'Maach dat Feld zom Tex enjevve su breid wie et jeiht',
+        'tog-watchcreations'    => 'Dun de Sigge, die ich neu aanläje, för ming Oppassliss vürschlage',
+        'tog-watchdefault'      => 'Dun de Sigge för ming Oppassliss vürschlage, die ich aanpacke un ändere',
+        'tog-minordefault'      => 'Dun all ming Änderunge jedes Mol als klein Mini-Änderunge vürschlage',
+        'tog-previewontop'      => 'Zeich de Vör-Aansich üvver däm Feld för dä Tex enzejevve aan.',
+        'tog-previewonfirst'    => 'Zeich de Vör-Aansich tirek för et eetste Mol beim Bearbeide aan',
+        'tog-nocache'           => 'Dun et Sigge Zweschespeichere - et Caching - avschalte',
+        'tog-enotifwatchlistpages'=> 'Scheck en E-Mail, wann en Sigg us ming Oppassliss jeändert wood',
+        'tog-enotifusertalkpages'=> 'Scheck mer en E-Mail, wann ming Klaaf Sigg jeändert weed',
+        'tog-enotifminoredits'  => 'Scheck mer och en E-Mail för klein Mini-Änderunge',
+        'tog-enotifrevealaddr'  => 'Zeich ming E-Mail Adress aan, en de Benohrichtijunge per E-Mail',
+        'tog-shownumberswatching'=> 'Zeich de Aanzahl Metmaacher, die op die Sigg am oppasse sin',
+        'tog-fancysig'          => 'Ungerschreff ohne automatische Link',
+        'tog-externaleditor'    => 'Nemm jedes Mol en extern Editor-Projramm',
+        'tog-externaldiff'      => 'Nemm jedes Mol en extern Diff-Projramm',
+        'tog-showjumplinks'     => 'Links usjevve, die däm „Zojang ohne Barrikad“ helfe dun',
+        'tog-uselivepreview'    => 'Zeich de „Lebendije Vör-Aansich zeije“ (bruch Java_Skripp) (em Usprobierstadium)',
+        'tog-autopatrol'        => 'Wann ich jet änder, dann jild die Sigg als kontrolleet.',
+        'tog-forceeditsummary'  => 'Froch noh, wann en däm Feld „Koot zosammejefass, Quell“ beim Avspeichere nix dren steiht',
+        'tog-watchlisthideown'  => 'Dun ming eije Änderunge <strong>nit</strong> en minger Oppassliss aanzeije',
+        'tog-watchlisthidebots' => 'Dun jedes Mol dä Bots ehr Änderunge <strong>nit</strong> en minger Oppassliss zeije',
+        'tog-nolangconversion'          => 'Disable variants conversion',
+
+        'underline-always' => 'jo, jedes Mol',
+        'underline-never' => 'nä',
+        'underline-default' => 'nemm dem Brauser sing Enstellung',
+
+        'skinpreview' => '(Preview)',
+
+# dates
+'sunday'                => 'Sonndaach',
+'monday'                => 'Mondaach',
+'tuesday'               => 'Dingsdaach',
+'wednesday'             => 'Meddwoch',
+'thursday'              => 'Donnersdaach',
+'friday'                => 'Friedaach',
+'saturday'              => 'Samsdaach',
+'sun'                   => 'So.',
+'mon'                   => 'Mo.',
+'tue'                   => 'Di.',
+'wed'                   => 'Me.',
+'thu'                   => 'Do.',
+'fri'                   => 'Fr.',
+'sat'                   => 'Sa.',
+'january'               => 'Janewar',
+'february'              => 'Febrewar',
+'march'                 => 'Määz',
+'april'                 => 'Aprel',
+'may_long'              => 'Mai',
+'june'                  => 'Juni',
+'july'                  => 'Juli',
+'august'                => 'Aujuss',
+'september'             => 'September',
+'october'               => 'Oktober',
+'november'              => 'November',
+'december'              => 'Dezember',
+'january-gen'           => 'Janewar',
+'february-gen'          => 'Febrewar',
+'march-gen'             => 'Määz',
+'april-gen'             => 'Aprel',
+'may_long-gen'          => 'Mai',
+'june-gen'              => 'Juni',
+'july-gen'              => 'Juli',
+'august-gen'            => 'Aujuss',
+'september-gen'         => 'September',
+'october-gen'           => 'Oktober',
+'november-gen'          => 'November',
+'december-gen'          => 'Dezember',
+'jan'                   => 'Jan',
+'feb'                   => 'Feb',
+'mar'                   => 'Mäz',
+'apr'                   => 'Apr',
+'may'                   => 'Mai',
+'jun'                   => 'Jun',
+'jul'                   => 'Jul',
+'aug'                   => 'Auj',
+'sep'                   => 'Sep',
+'oct'                   => 'Okt',
+'nov'                   => 'Nov',
+'dec'                   => 'Dez',
+# Bits of text used by many pages:
+#
+'categories'            => 'Saachjruppe',
+'pagecategories'        => '{{PLURAL:$1|Saachjrupp|Saachjruppe}}',
+'pagecategorieslink'    => 'Special:Saachjruppe',
+'category_header'       => 'Atikkele in de Saachjrupp „$1“',
+'subcategories'         => 'Ungerjruppe',
+'category-media-header' => 'Medie en de Saachjrupp "$1"',
+
+
+'linkprefix'            => '/^(.*?)([a-zA-Z\x80-\xff]+)$/sD',
+'mainpage'              => 'Haupsigg',
+'mainpagetext'          => "<big>'''MediaWiki es jetz enstalleet.'''</big>",
+'mainpagedocfooter'     => "Luur en dä [http://meta.wikimedia.org/wiki/Help:Contents Benutzerhandbuch] wann De wesse wells wie de Wiki-Soffwär jebruch un bedeent wääde muss.
+
+== Getting started ==
+
+* [http://www.mediawiki.org/wiki/Help:Configuration_settings Configuration settings list]
+* [http://www.mediawiki.org/wiki/Help:FAQ MediaWiki FAQ]
+* [http://mail.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]",
+
+'portal'                => 'Üvver {{SITENAME}}',
+'portal-url'            => '{{ns:project}}:Metmaacher Pooz',
+'about'                 => 'Üvver {{SITENAME}}',
+'aboutsite'             => 'Üvver de {{SITENAME}}',
+'aboutpage'             => '{{ns:project}}:Üvver de {{SITENAME}}',
+'article'               => 'Atikkel',
+'help'                  => 'Hölp',
+'helppage'              => '{{ns:project}}:Hölp',
+'bugreports'            => 'Fähler melde',
+'bugreportspage'        => '{{ns:project}}:Kontak',
+'sitesupport'           => 'Spende',
+'sitesupport-url'       => '{{ns:project}}:Spende',
+'faq'                   => 'FAQ',
+'faqpage'               => '{{ns:project}}:FAQ',
+'edithelp'              => 'Hölp för et Bearbeide',
+'newwindow'             => '(Mäht e neu Finster op, wann Dinge Brauser dat kann)',
+'edithelppage'          => '{{ns:project}}:Hölp',
+'cancel'                => 'Stopp! Avbreche!',
+'qbfind'                => 'Fingk',
+'qbbrowse'              => 'Aanluure',
+'qbedit'                => 'Ändere',
+'qbpageoptions'         => 'Sigge Enstellunge',
+'qbpageinfo'            => 'Zosammehang',
+'qbmyoptions'           => 'Ming Sigge',
+'qbspecialpages'        => 'Spezial Sigge',
+'moredotdotdot'         => 'Miehâ€¦',
+'mypage'                => 'Ming Sigg',
+'mytalk'                => 'ming Klaafsigg',
+'anontalk'              => 'Klaaf för de IP-Adress',
+'navigation'            => 'Jangk noh',
+
+# Metadata in edit box
+'metadata_help'         => 'Däm Beld sing Meta-Daate ([[{{ns:project}}:Meta-Daate vun Belder|hee sin se usenanderposementeet]])',
+'currentevents'         => 'Et Neuste',
+'currentevents-url'     => '{{ns:project}}:Et Neuste',
+'disclaimers'           => 'Hinwies',
+'disclaimerpage'        => '{{ns:project}}:Impressum',
+'privacy'               => 'Daateschotz un Jeheimhaldung',
+'privacypage'           => '{{ns:project}}:Daateschotz un Jeheimhaldung',
+'errorpagetitle'        => 'Fähler',
+'returnto'              => 'Jangk widder noh: „$1“.',
+'tagline'               => 'Us de {{SITENAME}}',
+
+'search'                => 'Söke',
+'searchbutton'          => 'em Tex',
+'go'                    => 'Loss Jonn',
+'searcharticle'         => 'Atikkel',
+'history'               => 'Versione',
+'history_short'         => 'Versione',
+'updatedmarker'         => '(verändert)',
+'info_short'            => 'Information',
+'printableversion'      => 'För ze Drocke',
+'permalink'             => 'Als Permalink',
+'print'                 => 'För ze Drocke',
+'edit'                  => 'Ändere',
+'editthispage'          => 'De Sigg ändere',
+'delete'                => 'Fottschmieße',
+'deletethispage'        => 'De Sigg fottschmieße',
+'undelete_short'        => '{{PLURAL:$1|ein Änderung|$1 Änderunge}} zeröckholle',
+'protect'               => 'Schötze',
+'protectthispage'       => 'De Sigg schötze',
+'unprotect'             => 'Schotz ophevve',
+'unprotectthispage'     => 'Dä Schotz för de Sigg ophevve',
+'newpage'               => 'Neu Sigg',
+'talkpage'              => 'Üvver die Sigg hee schwaade',
+'specialpage'           => 'Sondersigg',
+'personaltools'         => 'Metmaacher Werkzeuch',
+'postcomment'           => 'Neu Avschnedd op de Klaafsigg',
+'addsection'            => '+',
+'articlepage'           => 'Aanluure wat op dä Sigg drop steiht',
+'talk'                  => 'Klaaf',
+'views'                 => 'Aansichte',
+'toolbox'               => 'Werkzeuch',
+'userpage'              => 'Däm Metmaacher sing Sigg aanluure',
+'projectpage'           => 'De Projeksigg aanluure',
+'imagepage'             => 'Beldsigg aanluure',
+'mediawikipage'         => 'De Mediasigg aanluure',
+'templatepage'          => 'De Schablon ehr Sigg aanluure',
+'viewhelppage'          => 'De Hölpsigg aanluure',
+'categorypage'          => 'De Saachjruppesigg aanluure',
+'viewtalkpage'          => 'Klaaf aanluure',
+'otherlanguages'        => 'En ander Sproche',
+'redirectedfrom'        => '(Ömjeleit vun $1)',
+'redirectpagesub'       => 'Ömleitungssigg',
+'lastmodified'          => 'Stand vum $1',
+'viewcount'             => 'De Sigg es bes jetz {{PLURAL:$1|eimol|$1 Mol}} avjerofe woode.',
+'copyright'             => 'Dä Enhald steiht unger de $1.',
+'protectedpage'         => 'Jeschötzte Sigg',
+'jumpto'                => 'Jangk noh:',
+'jumptonavigation'      => 'Noh de Navigation',
+'jumptosearch'          => 'Jangk Söke!',
+
+'badaccess'             => 'Nit jenoch Räächde',
+'badaccess-group0'      => 'Do häs nit jenoch Räächde.',
+'badaccess-group1'      => 'Wat Do wells, dat dürfe nor Metmaacher, die $1 sin.',
+'badaccess-group2'      => 'Wat Do wells, dat dürfe nor de Metmaacher us dä Jruppe: $1.',
+'badaccess-groups'      => 'Wat Do wells, dat dürfe nor de Metmaacher us dä Jruppe: $1.',
+
+'versionrequired'       => 'De Version $1 vun MediaWiki Soffwär es nüdich',
+'versionrequiredtext'   => 'De Version $1 vun MediaWiki Soffwär es nüdich, öm die Sigg hee bruche ze künne. Süch op [[Special:Version|de Versionssigg]], wat mer hee för ene Soffwärstand han.',
+
+'widthheight'           => '$1Ã—$2',
+'ok'                    => 'OK',
+'sitetitle'             => '{{SITENAME}}',
+'pagetitle'             => '$1 - {{SITENAME}}',
+#'sitesubtitle' => '',
+'retrievedfrom'         => 'Die Sigg hee stamp us „$1“.',
+'youhavenewmessages'    => 'Do häs $1 ($2).',
+'newmessageslink'       => 'neu Metdeilunge op Dinger Klaafsigg',
+'newmessagesdifflink'   => 'Ungerscheed zor vürletzte Version',
+'editsection'           => 'Ändere',
+'editold'               => 'Hee die Version ändere',
+'editsectionhint'       => 'Avschnedd ändere: $1',
+'toc'                   => 'Enhaldsüvversich',
+'showtoc'               => 'enblende',
+'hidetoc'               => 'usblende',
+'thisisdeleted'         => '$1 - aanluure oder widder zeröckholle?',
+'viewdeleted'           => '$1 aanzeije?',
+'restorelink'           => '{{PLURAL:$1|eije fottjeschmesse Änderung|$1 fottjeschmesse Änderunge}}',
+'feedlinks'             => 'Feed:',
+'feed-invalid'          => 'Esu en Zoot Abonnemang jitt et nit.',
+
+'feed-atom'             => 'Atom',
+'feed-rss'              => 'RSS',
+'sitenotice'            => '-', # the equivalent to wgSiteNotice
+'anonnotice'            => '-',
+
+# Short words for each namespace, by default used in the 'article' tab in monobook
+'nstab-main'            => 'Atikkel',
+'nstab-user'            => 'Metmaachersigg',
+'nstab-media'           => 'Mediasigg',
+'nstab-special'         => 'Spezial',
+'nstab-project'         => 'Projeksigg',
+'nstab-image'           => 'Beld',
+'nstab-mediawiki'       => 'Tex',
+'nstab-template'        => 'Schablon',
+'nstab-help'            => 'Hölp',
+'nstab-category'        => 'Saachjrupp',
+
+
+# Main script and global functions
+#
+'nosuchaction'          => 'Die Aufgab (action) kenne mer nit',
+'nosuchactiontext'      => '<strong>Na su jet:</strong> De Aufgab us dä URL, die do hinger „<code>action=</code>“ dren steiht, jo die kennt hee dat Wiki jar nit.',
+'nosuchspecialpage'     => 'Esu en Sondersigg ha\'mer nit',
+'nospecialpagetext'     => 'De aanjefrochte Sondersigg jitt et nit, de [[Special:Specialpages|Liss met de Sondersigge]] helfe dir wigger.',
+
+# General errors
+#
+'error'                 => 'Fähler',
+'databaseerror'         => 'Fähler en de Daatebank',
+'dberrortext'           => 'Ene Fähler es opjefalle en dä Syntax vun enem Befähl för de Daatebank. Dat künnt ene Fähler en de Soffwär vum Wiki sin.
+De letzte Daatebankbefähl es jewäse:
+<blockquote><code>$1</code></blockquote>
+us däm Projramm singe Funktion: „<code>$2</code>“.<br />
+MySQL meld dä Fähler: „<code>$3: $4</code>“.',
+'dberrortextcl'         => 'Ene Fähler es opjefalle en dä Syntax vun enem Befähl för de Daatebank.
+Dä letzte Befähl för de Daatebank es jewäse:
+<blockquote><code>$1</code></blockquote>
+us däm Projramm sing Funktion: „<code>$2</code>“.<br />
+MySQL meld dä Fähler: „<code>$3: $4</code>“.',
+'noconnect'             => 'Schad! Mer kunnte kein Verbindung met däm Daatebanksörver op „$1“ krije.',
+'nodb'                  => 'Kunnt de Daatebank „$1“ nit uswähle',
+'cachederror'           => 'Dat hee es en Kopie vun dä Sigg us em Cache. Möchlich, se es nit aktuell.',
+'laggedslavemode'       => '<strong>Opjepass:</strong> Künnt sin, dat hee nit dä neuste Stand vun dä Sigg aanjezeich weed.',
+'readonly'              => 'De Daatebank es jesperrt',
+'enterlockreason'       => 'Jevv aan, woröm un för wie lang dat de Daatebank jesperrt wääde soll',
+'readonlytext'          => 'De Daatebank es jesperrt. Neu Saache dren avspeichere jeiht jrad nit, un ändere och nit. Dä Jrund: „$1“',
+#Et weed wall öm de normale Waadung jonn. Dun et einfach en e paar  Minutte widder versöke.
+#The administrator who locked it offered this explanation: $1',
+'missingarticle'        => 'Dä Tex för de Sigg „$1“ kunnte mer nit en de Daatebank finge.
+De Sigg es villeich fottjeschmesse oder ömjenannt woode.
+Wann dat esu nit sin sollt, dann hadder villeich ene Fähler en de Soffwär jefunge.
+Verzällt et enem Wiki_Köbes,
+un doht em och de URL vun dä Sigg hee sage.',
+'readonly_lag'          => 'De Daatebank es för en koote Zigg jesperrt, för de Daate avzejliche.',
+'internalerror'         => 'De Wiki-Soffwär hät ene Fähler jefunge',
+'filecopyerror'         => 'Kunnt de Datei „$1“ nit noh „$2“ kopeere.',
+'filerenameerror'       => 'Kunnt de Datei „$1“ nit op „$2“ ömdäufe.',
+'filedeleteerror'       => 'Kunnt de Datei „$1“ nit fottschmieße.',
+'filenotfound'          => 'Kunnt de Datei „$1“ nit finge.',
+'unexpected'            => 'Domet hät keiner jerechnet: „$1“=„$2“',
+'formerror'             => 'Dat es donevve jejange: Wor nix, met däm Fomular.',
+'badarticleerror'       => 'Dat jeiht met hee dä Sigg nit ze maache.',
+'cannotdelete'          => 'De Sigg oder de Datei hee fottzeschmieße es nit möchlich. Möchlich, dat ene andere Metmaacher flöcker wor, hät et vürher hee jo ald jedon, un jetz es die Sigg ald fott.',
+'badtitle'              => 'Verkihrte Üvverschreff',
+'badtitletext'          => 'De Üvverschreff es esu nit en Odenung. Et muss jet dren stonn.
+Et künnt sin, dat ein vun de speziell Zeiche dren steiht,
+wat en Üvverschrefte nit erlaub es.
+Et künnt ussinn, wie ene InterWikiLink,
+dat jeiht ävver nit.
+Muss De repareere.',
+'perfdisabled'          => '<strong>\'\'\'Opjepass:\'\'\'</strong> Dat maache mer jetz nit - dä Sörver hät jrad zovill Lass - do si\'mer jet vürsichtich.',
+'perfdisabledsub'       => 'Hee kütt en jespeicherte Kopie vun $1:',
+'perfcached'            => 'De Daate heenoh kumme usem Zweschespeicher (Cache) un künnte nit mieh janz de allerneuste sin.',
+'perfcachedts'          => 'De Daate heenoh kumme usem Zweschespeicher (Cache) un woodte $1 opjenumme. Se künnte nit janz de allerneuste sin.',
+'wrong_wfQuery_params'  => 'Verkihrte Parameter för: <strong><code>wfQuery()</code></strong><br />
+De Funktion es: „<code>$1</code>“<br />
+De Aanfroch es: „<code>$2</code>“<br />',
+'viewsource'            => 'Wikitex aanluure',
+'viewsourcefor'         => 'för de Sigg: „$1“',
+'protectedtext'         => 'Die Sigg hee es jäje Veränderunge jeschötz.
+Do künnt et en Aanzahl vun Ursaache för jevve. Villeich fingk mer jet em <span 
+class="plainlinks">[{{FULLURL:Special:Log/protect|page={{FULLPAGENAMEE}}}} Logboch]</span> dodrüvver.
+Jeder kann sich ävver dä Wikitex vun dä Sigg aanluure un och kopeere. Hee kütt e:',
+'protectedinterface'    => 'Op dä Sigg hee steiht Tex usem Interface vun de Wiki-Soffwär. Dröm es die jäje Änderunge jeschötz, domet keine Mess domet aanjestallt weed.',
+'editinginterface'      => '<strong>Opjepass:</strong> 
+Op dä Sigg hee steiht Tex usem Interface vun de Wiki-Soffwär. Dröm es die jäje Änderunge jeschötz, domet keine Mess domet aanjestallt weed. Nor de Wiki-Köbese künne 
+se ändere. Denk dran, hee ändere deit et Ussinn un de Wööt ändere met dänne et Wiki op de Metmaacher un de Besöker drop aankütt!',
+'sqlhidden'             => '(Dä SQL_Befähl du\'mer nit zeije)',
+
+# Login and logout pages
+#
+'logouttitle'           => 'Uslogge',
+'logouttext'            => 'Jetz bes de usjelogg.
+
+* Do künnts op de {{SITENAME}} wigger maache, als ene namelose Metmaacher.
+
+* Do kanns De ävver och widder [[Special:Userlogin|enlogge]], als däselve oder och ene andere Metmaacher.
+
+* Un Do kanns met <span class="plainlinks">[{{FULLURL:Special:Userlogin|type=signup}} ene neue Metmaacher 
+aanmelde]</span>.
+
+<strong>Opjepass:</strong>
+
+Es möchlich, dat De de ein oder ander Sigg immer wigger aanjezeich kriss, wie wann de noch enjelogg wörs. Dun Dingem Brauser singe Cache fottschmieße oder leddich maache, öm us dä Nummer erus ze kumme!<br />',
+
+'welcomecreation' => "== Dach, $1! ==
+
+Dinge Zojang för hee es do. Do bes jetz aanjemeldt. Denk dran, Do künnts der Ding [[Special:Preferences|Enstellunge]] hee op de {{SITENAME}} zeräächmaache.",
+'loginpagetitle'        => 'Enlogge',
+'yourname'              => 'Metmaacher Name',
+'yourpassword'          => 'Passwood',
+'yourpasswordagain'     => 'Noch ens dat Passwood',
+'remembermypassword'    => 'Op Duur Aanmelde',
+'yourdomainname'        => 'Ding Domain',
+'externaldberror'       => 'Do wor ene Fähler en de externe Daatebank, oder Do darfs Ding extern Daate nit ändere. Dat Aanmelde jingk donevve.',
+'loginproblem'          => '<strong>Met däm Enlogge es jet scheiv jelaufe.</strong><br />Bes esu jod, un dun et noch ens versöke!',
+'alreadyloggedin'       => 'Do bes ald enjelogg, als dä Metmaacher „<strong>$1</strong>“.',
+
+'login'                 => 'Enlogge',
+'loginprompt'           => 'Öm op de {{SITENAME}} [[Special:Userlogin|enlogge]] ze künne, muss De de Cookies en Dingem Brauser enjeschalt han.',
+'userlogin'             => 'Enlogge / Metmaacher wääde',
+'logout'                => 'Uslogge',
+'userlogout'            => 'Uslogge',
+'notloggedin'           => 'Nit enjelogg',
+'nologin'               => 'Wann De Dich noch nit aanjemeldt häs, dann dun Dich $1.',
+'nologinlink'           => 'Neu Aanmelde',
+'createaccount'         => 'Aanmelde als ene neue Metmaacher',
+'gotaccount'            => 'Do häs ald en Aanmeldung op de {{SITENAME}}? Dann jangk nohm $1.',
+'gotaccountlink'        => 'Enlogge',
+'createaccountmail'     => 'Passwood met E-Mail Schecke',
+'badretype'             => 'Ding zwei enjejovve Passwööder sin ungerscheedlich. Do muss De Dich för ein entscheide.',
+'userexists'            => 'Ene Metmaacher met däm Name: „<strong>$1</strong>“ jitt et ald. Schad. Do muss De Der ene andere Name usdenke.',
+'youremail'             => 'E-Mail *',
+'username'              => 'Metmaacher_Name:',
+'uid'                   => 'Metmaacher ID:',
+'yourrealname'          => 'Dinge richtije Name *',
+'yourlanguage'          => '<span title="Sök de Sproch us, die et Wiki kalle soll!">Sproch:<span>',
+'yourvariant'           => 'Ding Variant',
+'yournick'              => 'Name för en Ding Ungerschreff:',
+'badsig'                => 'De Ungeschreff jeiht esu nit - luur noh dem HTML dodren un maach et richtich.',
+'email'                 => 'E-Mail',
+'prefs-help-email-enotif'=> 'De E-Mail Adress weed och jebruch, öm Der üvver Änderunge bescheid ze sage, wann De dat usjewählt häs, en Ding Enstellunge.',
+'prefs-help-realname'   => '* Dinge richtije Name - kanns De fott looße - wann De en nenne wells, dann weed hee jebruch, öm Ding Beidräch domet ze schmöcke.',
+'loginerror'            => 'Fähler beim Enlogge',
+'prefs-help-email'      => '* E-mail - kanns De fottlooße, un es för Andre nit ze sinn - mäht et ävver möchlich, dat mer met Dir en Kontak kumme kann, ohne dat mer Dinge Name oder Ding E-Mail Adress kenne dät.',
+'nocookiesnew'          => 'Dinge neue Metmaacher Name es enjerich, ävver dat automatisch Enlogge wor dann nix. 
+Schad. De {{SITENAME}} bruch Cookies, öm ze merke, wä 
+enjelogg es. Wann De Cookies avjeschald häs en Dingem Brauser, dann kann 
+dat nit laufe. Sök Der ene Brauser, dä et kann, dun se enschalte, un dann log Dich noch ens neu en, met Dingem neue Metmaacher Name un Passwood.',
+'nocookieslogin'        => 'De {{SITENAME}} bruch Cookies för et Enlogge. Et süht esu us, als hätts de Cookies avjeschalt. Dun se aanschalte un dann versök et noch ens.',
+'noname'                => 'Dat jeiht nit als ene Metmaacher Name. Jetz muss De et noch ens versöke.',
+'loginsuccesstitle'     => 'Dat Enlogge hät jeflupp.',
+'loginsuccess'          => '<br />Do bes jetz enjelogg bei de <strong>{{SITENAME}}</strong>, un Dinge Metmaacher Name es „<strong>$1</strong>“.<br />',
+'nosuchuser'            => 'Dat Passwood oder dä Metmaacher Name „$1“ wor verkihrt. Jetz muss De et noch ens versöke. Oder_<span class="plainlinks">[{{FULLURL:Special:Userlogin|type=signup}} ene neue Metmaacher aanmelde]</span>.',
+'nosuchusershort'       => 'Dä Metmaacher Name „$1“ wor verkihrt. Jetz muss De et noch ens versöke.',
+'nouserspecified'       => 'Dat jeiht nit als ene Metmaacher Name',
+'wrongpassword'         => 'Dat Passwood oder dä Metmaacher Name wor verkihrt. Jetz muss De et noch ens versöke.',
+'wrongpasswordempty'    => 'Dat Passwood ka\'mer nit fottlooße. Jetz muss De et noch ens versöke.',
+'mailmypassword'        => 'Passwood verjesse?',
+'passwordremindertitle' => 'Login op {{SITENAME}}',
+'passwordremindertext'  => 'Jod möchlich, Do wors et selver,
+vun de IP Adress $1,
+jedenfalls hät eine aanjefroch, dat
+mer Dir e neu Passwood zoschecke soll,
+för et Enlogge en de {{SITENAME}} op
+{{FULLURL:{{MediaWiki:Mainpage}}}}
+($4)
+
+Alsu, e neu Passwood för "$2"
+es jetz vürjemerk: "$3".
+Do solls De tirek jlich enlogge,
+un dat Passwood widder ändere.
+Dä Transport üvver et Netz met E-Mail
+es unsecher, do künne Fremde metlese,
+un winnichstens de Jeheimdeenste dun
+dat och. Usserdäm es "$3" 
+villeich nit esu jod ze merke?
+
+Wann nit Do, söndern söns wä noh däm
+neue Passwood verlank hät, wann De 
+Dich jetz doch widder aan Ding ahl Passwood
+entsenne kanns, jo do bruchs de jar nix
+ze dun, do kanns De Ding ahl Passwood wigger 
+bruche, un die E-Mail hee, die kanns De 
+jlatt verjesse.
+
+Ene schöne Jroß vun de {{SITENAME}}.
+
+-- 
+{{SITENAME}}: {{fullurl:{{Mediawiki:mainpage}}}}',
+'noemail'               => 'Dä Metmaacher hät en de $1 kein E-Mail Adress aanjejovve.',
+'passwordsent'          => 'E neu Passwood es aan de E-Mail Adress vun däm Metmaacher „$1“ ungerwähs. Meld dich domet aan, wann De et häs. Dat ahle Passwood bliev erhalde un kann och noch jebruch wääde, bes dat De Dich et eetste Mol met däm Neue enjelogg häs.',
+'blocked-mailpassword' => 'Ding IP Adress es blockeet.',
+'eauthentsent'          => 'En E-Mail es jetz ungerwähs aan de Adress, die en de Enstellunge vum Metmaacher $1 steiht.
+Ih dat E-Mails üvver de {{SITENAME}} ehre E-Mail-Knopp verscheck wääde künne, muss de E-Mail Adress 
+eets  ens bestätich woode sin. Wat mer doför maache muss, steiht en dä E-Mail dren, die jrad avjescheck woode es. 
+
+Alsu luur do eren, un dun et.',
+'throttled-mailpassword' => 'En Erennerung för di Passwood es ungerwähs. Domet ene fiese Möpp keine Dress fabrizeet, passeet dat hüchstens eimol en $1 Stunde.',
+#'loginend'                         => '',
+'signupend'                         => '{{int:loginend}}',
+'mailerror'             => 'Fähler beim E-Mail Verschecke: $1.',
+'acct_creation_throttle_hit'=> '<b>Schad.</b> Do häs ald {{PLURAL:$1|eine|$1}} Metmaacher Name aanjelaht. Mieh sin nit möchlich.',
+'emailauthenticated'    => 'Ding E-Mail Adress wood bestätich om: <strong>$1</strong>.',
+'emailnotauthenticated' => 'Ding E-Mail Adress es <strong>nit</strong> bestätich. Dröm kann kein E-Mail aan Dich jescheck wääde för:',
+'noemailprefs'          => 'Dun en E-Mail Adress endrage, domet dat et all fluppe kann.',
+'emailconfirmlink'      => 'Dun Ding E-Mail Adress bestätije looße',
+'invalidemailaddress'   => 'Wat De do als en E-Mail Adress aanjejovve häs, süht noh Dress us. En E-Mail Adress en däm Format, dat jitt et nit. Muss De repareere - oder Do mähs dat Feld leddich un schrievs nix eren. Un dann versök  et noch ens.',
+'accountcreated'        => 'Aanjemeldt',
+'accountcreatedtext'    => 'De Aanmeldung för dä Metmaacher „<strong>$1</strong>“ es durch, kann jetz enlogge.',
+
+# Edit page toolbar
+'bold_sample'           => 'Fett Schreff',
+'bold_tip'              => 'Fett Schreff',
+'italic_sample'         => 'Scheive Schreff',
+'italic_tip'            => 'Scheive Schreff',
+'link_sample'           => 'Anker Tex',
+'link_tip'              => 'Ene Link en de {{SITENAME}}',
+'extlink_sample'        => 'http://www.example.com/ Dä Anker Tex',
+'extlink_tip'           => 'Ene Link noh drusse (denk dran, http:// aan dr Aanfang!)',
+'headline_sample'       => 'Üvverschreff',
+'headline_tip'          => 'Üvverschreff op de bövverschte Ebene',
+'math_sample'           => 'Hee schriev de Formel eren',
+'math_tip'              => 'För mathematisch Formele nemm „LaTeX“',
+'nowiki_sample'         => 'Hee kütt dä Tex hen, dä vun de Wiki-Soffwär nit bearbeid, un en Rauh jelooße wääde soll',
+'nowiki_tip'            => 'De Wiki Code üvverjonn',
+'image_sample'          => 'Beispill.jpg',
+'image_tip'             => 'E Beldche enbaue',
+'media_sample'          => 'Beispill.ogg',
+'media_tip'             => 'Ene Link op en Tondatei, e Filmche, oder esu jet',
+'sig_tip'               => 'Dinge Name, met de Uhrzigg un em Datum',
+'hr_tip'                => 'En Querlinnich',
+
+# Edit pages
+#
+'summary'               => 'Koot Zosammejefass, Quell',
+'subject'               => 'Üvverschreff - wodröm jeiht et?',
+'minoredit'             => 'Dat es en klein Änderung (mini)',
+'watchthis'             => 'Op die Sigg hee oppasse',
+'savearticle'           => 'De Sigg Avspeichere',
+'preview'               => 'Vör-Aansich',
+'showpreview'           => 'Vör-Aansich zeije',
+'showlivepreview'       => 'Lebendije Vör-Aansich zeije',
+'showdiff'              => 'De Ungerscheed zeije',
+'anoneditwarning'       => 'Weil De nit aanjemeldt bes, weed Ding IP-Adress opjezeichnet wääde.',
+'missingsummary'        => '<strong>Opjepass:</strong> Do häs nix bei „Koot Zosammejefass, Quell“ enjejovve. Dun noch ens op „<b style="padding:2px; background-color:#ddd; color:black">De Sigg Avspeichere</b>“ klicke, öm Ding Änderunge ohne de Zosammefassung ze Speicheree. Ävver besser jiss De do jetz tirek ens jet en!',
+'missingcommenttext'    => 'Jevv en „Koot Zosammejefass, Quell“ aan!',
+'missingcommentheader' => '\'\'\'Opjepass:\'\'\' Do häs kein Üvverschreff för Dinge Beidrach enjejovve. Wann De noch ens op „De Sigg Avspeichere“ dröcks, weed dä Beidrach ohne Üvverschreff avjespeichert.',
+'summary-preview' => 'Vör-Aansich vun „Koot Zosammejefass, Quell“',
+'subject-preview' => 'Vör-Aansich vun de Üvverschreff', 
+'blockedtitle'          => 'Dä Metmaacher es jesperrt',
+'blockedtext'           => '<big><b>Dinge Metmaacher Name oder IP Adress es vun „$1“ jesperrt woode.</b></big>
+Als Jrund es enjedrage: „<i>$2</i>“
+Do kanns met „$1“ oder ene andere Wiki-Köbes üvver dat Sperre schwaade, wann 
+de wells.
+Do kanns ävver nor dann dat „<i>E-Mail aan dä Metmaacher</i>“ aanwende, wann de ald en E-Mail Adress en Ding 
+[[Special:Preferences|ming Enstellunge]] enjedrage un freijejovve häs.
+
+Ding IP Adress es de „$3“. Dun se en Ding Aanfroge nenne.',
+'blockedoriginalsource' => 'Dä orjenal Wiki Tex vun dä Sigg „<strong>$1</strong>“ steiht hee drunger:',
+'blockededitsource'     => 'Dä Wiki Tex vun <strong>Dinge Änderunge</strong> aan dä Sigg „<strong>$1</strong>“ steiht hee drunger:',
+'whitelistedittitle'    => 'Enlogge nüdich för Sigge ze Ändere',
+'whitelistedittext'     => 'Do mööts ald $1, öm hee em Wiki Sigge ändere ze dürfe.',
+'whitelistreadtitle'    => 'Enlogge nüdich för ze Lese',
+'whitelistreadtext'     => 'Do mööts ald_[[Special:Userlogin|enjelogg sin]], öm hee Sigge lese ze dürfe.',
+'whitelistacctitle'     => 'Kei Rääch för Metmaacher aanzeläje.',
+'whitelistacctext'      => 'Do mööts ald [[Special:Userlogin|enjelogg sin]] un speziell et Rääch doför han, öm hee en däm Wiki Metmaacher enrichte un aanläje ze dürfe.',
+'confirmedittitle'      => 'För et Sigge Ändere muss De Ding E-Mail Adress ald bestätich han.',
+'confirmedittext'       => 'Do muss Ding E-Mail Adress ald bestätich han, ih dat De hee Sigge ändere darfs. Drag Ding E-Mail Adress en Ding [[{{ns:special}}:Preferences|ming Enstellunge]] en, un dun „<span style="padding:2px; background-color:#ddd; color:black">Dun Ding E-Mail Adress bestätije looße</span>“ klicke.',
+'loginreqtitle'         => 'Enlogge es nüdich',
+'loginreqlink'          => 'enjelogg sin',
+'loginreqpagetext'      => 'Do mööts eets ens $1, öm ander Sigge aanzeluure.',
+'accmailtitle'          => 'Passwood verscheck',
+'accmailtext'           => 'Dat Passwood för dä Metmaacher „$1“ es aan „$2“ jescheck woode.',
+'newarticle'            => '(Neu)',
+
+'newarticletext'        => 'Ene Link op en Sigg, wo noch nix drop steiht, weil et se noch jar nit jitt, hät Dich 
+noh hee jebraht.<br />
+<small>Öm die Sigg aanzeläje, schriev hee unge en dat Feld eren, un dun et dann avspeichere. (Luur op de 
+[[int:MediaWiki:Helppage|Sigge met Hölp]] noh, wann De mieh dodrüvver wesse wells)<br />Wann De jar nit hee hen 
+kumme wollts, dann jangk zeröck op die Sigg, wo De herjekumme bes, Dinge Brauser hät ene Knopp doför.</small>',
+'newarticletextanon' => '{{int:newarticletext}}',
+'talkpagetext' => '<!-- MediaWiki:talkpagetext -->',
+'anontalkpagetext'      => '----
+<i>Dat hee es de Klaaf Sigg för ene namenlose Metmaacher. Dä hät sich noch keine Metmaacher Name jejovve un 
+enjerich, ov deit keine bruche. Dröm bruche mer sing IP Adress öm It oder In en uns Lisste fasszehalde. 
+Su en IP Adress kann vun janz vill Metmaacher jebruch wääde, un eine Metmaacher kann janz flöck 
+zwesche de ungerscheedlichste IP Adresse wähßele, womöchlich ohne dat hä et merk. Wann Do jetz ene namenlose 
+Metmaacher bes, un fings, dat hee Saache an Dich jeschrevve wääde, wo Do jar nix met am Hot häs, dann bes Do 
+wahrscheinlich och nit jemeint. Denk villeich ens drüvver noh, datte Dich [[Special:Userlogin|anmelde]] deis, 
+domet De dann donoh nit mieh met esu en Ömständ ze dun häs, wie de andere namenlose Metmaacher hee.</i>',
+'noarticletext'         => 'Hee es jetz em Momang keine Tex op dä Sigg.<br />Jangk en de Texte vun ander Sigge 
+[[Special:Search/{{PAGENAME}}|noh däm Titel söke]], oder jangk, un <span 
+class="plainlinks">[{{FULLURL:{{FULLPAGENAME}}|action=edit}} fang die Sigg aan]</span> ze schrieve.<br 
+/><small>Oder jangk zeröck wo de her koms. Dinge Brauser hät ene Knopp doför.</small>',
+'noarticletextanon' => '{{int:noarticletext}}',
+'clearyourcache'        => '<br clear="all" style="clear:both">
+\'\'\'Opjepass:\'\'\'
+Noh em Speichere, künnt et sin, datte Dingem Brauser singe Cache Speicher 
+üvverlisste muss, ih datte de Änderunge och ze sinn kriss.
+Beim \'\'\'Mozilla\'\'\' un  \'\'\'Firefox\'\'\' un \'\'\'Safari\'\'\', dröck de \'\'Jroß Schreff Knopp\'\' un 
+Klick op \'\'Refresh\'\' / \'\'Aktualisieren\'\', oder dröck \'\'Ctrl-Shift-R\'\' / \'\'Strg+Jroß Schreff+R\'\', oder 
+dröck \'\'Ctrl-F5\'\' / \'\'Strg/F5\'\' / \'\'Cmd+Shift+R\'\' / \'\'Cmd+Jroß Schreff+R\'\', je noh Ding Tastatur 
+un Dingem Kompjuter.
+Beim \'\'\'Internet Explorer\'\'\' dröck op \'\'Ctrl\'\' / \'\'Strg\'\' un Klick op \'\'Refresh\'\', oder dröck 
+\'\'Ctrl-F5\'\' / \'\'Strg+F5\'\'.
+Beim \'\'\'Konqueror:\'\'\' klick dä \'\'Reload\'\'-Knopp oder dröck dä \'\'F5\'\'-Knopp.
+Beim  \'\'\'Opera\'\'\' kanns De üvver et Menue jonn un 
+däm janze Cache singe Enhald üvver \'\'Tools?Preferences\'\' fottschmieße.',
+'usercssjsyoucanpreview'=> '<b>Tipp:</b> Dun met däm <b style="padding:2px; background-color:#ddd; 
+color:black">Vör-Aansich Zeije</b>-Knopp usprobeere, wat Ding neu 
+Metmaacher_CSS/Java_Skripp mäht, ih dat et avspeichere deis!',
+'usercsspreview'        => '<b>Opjepass: Do bes hee nor am Usprobeere, wat Ding 
+Metmaacher_CSS mäht, et es noch nit jesechert!</b>',
+'userjspreview'         => '<b>Opjepass: Do bes hee nor am Usprobeere, wat Ding 
+Metmaacher_Java_Skripp mäht, et es noch nit jesechert!</b>',
+'userinvalidcssjstitle' => '<strong>Opjepass:</strong> Et jitt kein Ussinn met däm Name: „<strong>$1</strong>“ - 
+denk dran, dat ene Metmaacher eije Dateie för et Ussinn han kann, un dat die met kleine Buchstave 
+aanfange dun, alsu etwa: {{ns:User}}:Name/monobook.css, un {{ns:User}}:Name/monobook.js heiße.',
+'updated'               => '(Aanjepack)',
+'note'                  => '<strong>Opjepass:</strong>',
+'previewnote'           => '<strong>Hee kütt nor de Vör-Aansich - Ding Änderunge sin noch nit jesechert!</strong>',
+'session_fail_preview'  => '<strong>Schad: Ding Änderunge kunnte mer su nix met aanfange.
+
+De Daate vun Dinge Login-Säschen sin nit öntlich erüvver jekumme, oder einfach ze alt.
+Versök et jrad noch ens. Wann dat widder nit flupp, dann versök et ens met [[Special:Userlogout|Uslogge]] 
+un widder Enlogge. Ävver pass op, datte Ding Änderunge dobei behälds! Zor Nud dun se eets ens bei Dir om Rechner 
+avspeichere.</strong>',
+'previewconflict'       => 'Hee die Vör-Aansich zeich dä Enhald vum bovvere Texfeld. Esu wööd dä Atikkel 
+ussinn, wann De n jetz avspeichere däts.',
+'session_fail_preview_html'=> '<strong>Schad: Ding Änderunge kunnte mer su nix met aanfange.<br />De Daate vun 
+Dinge Login-Säschen sin nit öntlich erüvver jekumme, oder einfach ze alt.</strong>
+Dat Wiki hee hät <i>rüh HTML</i> zojelooße, dröm weed de Vör-Aansich nit jezeich. Domet solls De jeschötz wääde - 
+hoffe mer - un Aanjreffe met Java_Skripp jäje Dinge Kompjuter künne Der nix aandun.
+<strong>Falls för Dich söns alles jod ussüht, versök et jrad noch ens. Wann dat widder nit flupp, dann versök et 
+ens met [[Special:Userlogout|Uslogge]] un widder Enlogge. Ävver pass op, datte Ding Änderunge dobei behälds! 
+Zor Nud dun se eets ens bei Dir om Rechner avspeichere.</strong>',
+'importing'             => '„$1“ am Importeere',
+'editing'               => 'De Sigg „$1“ ändere',
+'editinguser' => 'Metmaacher <b>$1</b> ändere',
+'editingsection'        => 'Ne Avschnedd vun dä Sigg: „$1“ ändere',
+'editingcomment'        => '„$1“ Ändere (ene neue Avschnedd schrieve)',
+'editconflict'          => 'Problemche: „$1“ dubbelt bearbeidt.',
+'explainconflict'       => '<br />Ene andere Metmaacher hät aan dä Sigg och jet jeändert, un zwar nohdäm Do et Ändere aanjefange häs. Jetz ha\'mer dr Dress am Jang, un Do darfs et widder uszoteere.
+<strong>Opjepass:</strong>
+<ul><li>Dat bovvere Texfeld zeich die Sigg esu, wie se jetz em Momang jespeichert es, alsu met de Änderunge vun alle andere Metmaacher, die flöcker wie Do jespeichert han.</li><li>Dat ungere Texfeld zeich die Sigg esu, wie De se selver zoletz zerääch jebraselt häs.</li></ul>
+Do muss jetz Ding Änderunge och in dat <strong>bovvere</strong> Texxfeld eren bränge. Natörlich ohne dä 
+Andere ihr Saache kapott ze maache.
+<strong>Nor wat em bovvere Texfeld steiht,</strong> dat weed üvvernomme un avjespeichert, wann De „<b 
+style="padding:2px; background-color:#ddd; color:black">De Sigg Avspeichere</b>“ klicks. Bes dohin kanns De esu off 
+wie De wells op „<b style="padding:2px; background-color:#ddd; color:black">Vör-Aansich zeije</b>“ un „<b 
+style="padding:2px; background-color:#ddd; color:black">De Ungerscheed zeije</b>“ klicke, öm ze pröfe, watte ald 
+jods jemaat häs.
+
+Alles Klor?<br /><br />',
+'yourtext'              => 'Dinge Tex',
+'storedversion'         => 'De jespeicherte Version',
+'nonunicodebrowser'     => '<strong>Opjepass:</strong> Dinge Brauser kann nit 
+öntlich met däm Unicode un singe Buchstave ömjonn. Bes esu jod un 
+nemm ene andere Brauser för hee die Sigg!',
+'editingold'            => '<strong>Opjepass!<br />
+Do bes en ahle, üvverhollte Version vun dä Sigg hee am Ändere.
+Wann De die avspeichere deis,
+wie se es,
+dann jonn all die Änderunge fleute,
+die zickdäm aan dä Sigg jemaht woode sin.
+Alsu:
+Bes De secher, watte mähs?
+</strong>',
+'yourdiff'              => 'Ungerscheede',
+'copyrightwarning'      => 'Ding Beidräch stonn unger de [[$2]], süch $1. Wann De nit han wells, dat Dinge Tex ömjemodelt weed, un söns wohin verdeilt, dun en hee nit speichere. Mem Avspeichere sähs De och zo, dat et vun Dir selvs es, un/oder Do dat Rääch häs, en hee zo verbreide. Wann et nit stemmp, oder Do kanns et nit nohwiese, kann Dich dat en dr Bau bränge!',
+'copyrightwarning2'     => 'De Beidräch en de {{SITENAME}} künne vun andere Metmaacher ömjemodelt 
+oder fottjeschmesse wääde. Wann Der dat nit rääch es, schriev nix. Et es och nüdich, dat et vun Dir selvs es, oder dat Do dat Rääch häs, et hee öffentlich wigger ze jevve. Süch $1. Wann et nit stemmp, oder Do kanns et nit nohwiese, künnt Dich dat en dr Bau bränge!',
+'longpagewarning'       => '<strong>Oppjepass:</strong> Dä Tex, dä De hee jescheck häs, dä es <strong>$1</strong> 
+Kilobyte jroß. Manch Brauser kütt nit domet klor, wann et mieh wie <strong>32</strong> Kilobyte sin. Do künnts De drüvver nohdenke, dat Dinge en kleiner Stöckche ze zerkloppe.',
+'longpageerror'         => '<big><strong>Janz schlemme Fähler:</strong></big>
+Dä Tex, dä De hee jescheck häs, dä es <strong>$1</strong> Kilobyte jroß. 
+Dat sin mieh wie <strong>$2</strong> Kilobyte. Dat künne mer nit speichere!
+<strong>Maach kleiner Stöcke drus.</strong><br />',
+'readonlywarning'       => '<strong>Opjepass:</strong> De Daatebank es jesperrt woode, wo Do ald am Ändere wors. 
+Dä. Jetz kanns De Ding Änderunge nit mieh avspeichere. Dun se bei Dir om Rechner fasshalde un versök et späder 
+noch ens.',
+'protectedpagewarning'  => '<strong>Opjepass:</strong> Die Sigg hee es jäje Veränderunge jeschötz - wieso weed em <span 
+class="plainlinks">[{{FULLURL:Special:Log/protect|page={{FULLPAGENAMEE}}}} Logboch]</span> stonn. Nor de  
+Wiki-Köbese künne se ändere. Bes esu jod un hald Dich aan de Rejele för 
+dä Fall!',
+'semiprotectedpagewarning'=> '<strong>Opjepass:</strong> Die Sigg hee es halv jesperrt, wie mer sage, dat heiß, Do muss [[Special:Userlogin|aanjemeldt un enjelogg]] sin, wann De dran ändere wells.',
+'templatesused'         => 'De Schablone, die vun dä Sigg hee jebruch wääde, sinn:',
+'templatesusedpreview' => 'Schablone en dä Vör-Aansich hee: ',
+'templatesusedsection' => 'Schablone en däm Avschnedd hee: ',
+'edittools'             => '<!-- Dä Tex hee zeich et Wiki unger däm Texfeld zom „Ändere/Bearbeide“ un beim Texfeld vum „Huhlade“. -->',
+'nocreatetitle'         => 'Enlogge es nüdich',
+'nocreatetext'          => 'Sigge neu aanläje es nor möchlich, wann de [[Special:Userlogin|enjelogg]] bes. Der ohne kanns De ävver Sigge ändere, die ald do sin.',
+'undofailed' => 'Undo donevve jejange',
+'explainundofailed' => 'Dat Undo hät nit jeflupp. Enzwesche han andere dä Tex bearbeid. Bes esu jod un maach dat Undo vun Hand.',
+
+# Account creation failure
+'cantcreateaccounttitle'=> 'Kann keine Zojang enrichte',
+'cantcreateaccounttext' => 'Aanmeldunge vun Ding IP-Adress [<strong>$1</strong>] sin jesperrt. Dat hät för jewöhnlich ene Jrund. Zom Beispill künnt sin, dat 
+vill ze vill SPAM vun däm Bereich vun dä Adresse jekumme es.',
+
+# History pages
+#
+'revhistory'            => 'De Versione',
+'viewpagelogs'          => 'De LogBöcher för hee die Sigg',
+'nohistory'             => 'Et jitt kein Versione vun dä Sigg.',
+'revnotfound'           => 'Die Version ha\'mer nit jefunge.',
+'revnotfoundtext'       => '<b>Dä.</b> Die ählere Version vun dä Sigg, wo De noh frochs, es nit do. Schad. Luur ens 
+op die URL, die Dich herjebraht hät, die weed verkihrt sin, oder se es villeich üvverhollt, weil einer die Sigg 
+fottjeschmesse hät?',
+'loadhist'              => 'Dun de Liss met ahl Versione lade',
+'currentrev'            => 'Neuste Version',
+'revisionasof'          => 'Version vum $1',
+'revision-info' => 'Revision as of $1 by $2',
+'revision-nav' => '($1) $2 | $3 ($4) | $5 ($6)',
+'previousrevision'      => 'â† De Revision dovör zeije',
+'nextrevision'          => 'De Version donoh zeije â†’',
+'currentrevisionlink'   => 'De neuste Version',
+'cur'                   => 'neu',
+'next'                  => 'wigger',
+'last'                  => 'letz',
+'orig'                  => 'Orjenal',
+'histlegend'            => 'Hee kanns De Versione för et Verjliche ussöke: Dun met dä Knöpp die zweij markiere, 
+zwesche dänne De de Ungerscheed jezeich krije wells, dann dröck „<b style="padding:2px; background-color:#ddd; 
+color:black">Dun de markeete Versione verjliche</b>“ bei Dinge Taste, oder klick op ein vun dä Knöpp üvver oder 
+unger de Liss.
+Erklärung: (neu) = Verjliche met de neuste Version, (letz) = Verjliche met de Version ein doför, <b>M</b> = en 
+kleine <b>M</b>ini-Änderung.',
+'history_copyright'    => '-',
+'deletedrev'            => '[fott]',
+'histfirst'             => 'Ählste',
+'histlast'              => 'Neuste',
+'rev-deleted-comment'   => '(„Koot Zosammejefass, Quell“ usjeblendt)',
+'rev-deleted-user'      => '(Metmaacher Name usjeblendt)',
+'rev-deleted-text-permission'=> '<div class="mw-warning plainlinks">Die Version es fottjeschmesse woode. Jetz ka\'mer 
+se nit mieh beluure. Ene Wiki Köbes künnt se ävver zeröck holle. Mieh drüvver, wat met däm Fottschmieße vun dä Sigg 
+jewäse es, künnt Ehr em [{{FULLURL:Spezial:Log/delete|page={{PAGENAMEE}}}} Logboch] nohlese.</div>',
+'rev-deleted-text-view' => '<div class="mw-warning plainlinks">Die Version es fottjeschmesse woode. Jetz ka\'mer se nit 
+mieh beluure. Als ene Wiki-Köbes kriss De se ävver doch ze sinn, un künnts se 
+och zeröck holle. Mieh drüvver, wat met däm Fottschmieße vun dä Sigg jewäse es, künnt Ehr em 
+[{{FULLURL:Spezial:Log/delete|page={{PAGENAMEE}}}} Logboch] nohlese.</div>',
+'rev-delundel'          => 'zeije/usblende',
+'history-feed-title'    => 'Versione',
+'history-feed-description'=> 'Ählere Versione vun dä Sigg en de {{SITENAME}}',
+'history-feed-item-nocomment'=> '$1 öm $2',
+'history-feed-empty'    => 'De aanjefrochte Sigg jitt et nit. Künnt sin, dat se enzwesche fottjeschmesse oder ömjenannt woode es. Kanns jo ens [[Special:Search|em Wiki söke looße]], öm zopass neu Sigge ze finge.',
+
+# Revision deletion
+#
+'revisiondelete'        => 'Versione fottschmieße un widder zeröck holle',
+'revdelete-nooldid-title' => 'Kein Version aanjejovve',
+'revdelete-nooldid-text' => 'Do häs kein Version aanjejovve.',
+'revdelete-selected'    => 'Usjewählte Version vun [[:$1]]:',
+'revdelete-text'        => 'Dä fottjeschmesse Sigge ehre Enhald kanns De nit mieh aanluure. Se blieve ävver en de Liss met de Versione dren.
+
+Ene Wiki Köbes kann de fottjeschmessene Krom immer noch aanluere un kann en och widder herholle, usser wann bei 
+dem Wiki singe Installation dat anders fassjelaht woode es.',
+'revdelete-legend'      => 'Dä öffentlije Zojang enschränke, för die Version:',
+'revdelete-hide-text'   => 'Dä Tex vun dä Version usblende',
+'revdelete-hide-comment'=> 'Dä Enhald vun „Koot Zosammejefass, Quell“ usblende',
+'revdelete-hide-user'   => 'Däm Bearbeider sing IP Adress oder Metmaacher Name usblende',
+'revdelete-hide-restricted'=> 'Dun dat och för de Wiki Köbese esu maache wie  för jede Andere',
+'revdelete-log'         => 'Bemerkung för et LogBoch:',
+'revdelete-submit'      => 'Op de aanjekrützte Version aanwende',
+'revdelete-logentry'    => 'Zojang zo de Version verändert för [[$1]]',
+
+# Diffs
+#
+'difference'            => '(Ungerscheed zwesche de Versione)',
+'loadingrev'            => 'ben en Version för et Verjliche am lade',
+'lineno'                => 'Reih $1:',
+'editcurrent'           => 'Dun de neuste Version vun däm Atikkel ändere',
+'selectnewerversionfordiff'=> 'Dun en neuere Version för et Verjliche ussöke',
+'selectolderversionfordiff'=> 'Dun en ählere Version för et Verjliche ussöke',
+'compareselectedversions'=> 'Dun de markeete Version verjliche',
+'editundo' => 'undo',
+
+# Search results
+#
+'searchresults'         => 'Wat beim Söke eruskom',
+'searchresulttext'      => 'Luur op de Sigg üvver et [[{{ns:project}}:Söke en de {{SITENAME}}|Söke en de {{SITENAME}}]] noh, wann de mieh drüvver wesse wells, wie mer en de {{SITENAME}} jet fingk.',
+'searchsubtitle'        => 'För Ding Froch noh „[[:$1]]“.',
+'searchsubtitleinvalid' => 'För Ding Froch noh „$1“.',
+'badquery'              => 'Verkihrte Aanfroch för et Söke',
+'badquerytext'          => 'För Ding Froch för et Söke hät dat nix jebraht.
+Zem Beispill künnt et sin, dat De noh enem janz koote Wood jefroch häs - kööter wie vier Buchstave künne mer 
+einfach nit. Oder Do häs Dich vertipp, un noh „Kölle am am Rhing“ söke looße. Un et künnt sin, dat mer Ding 
+Schrievwies nit en de Daatebank han. Wann et jeiht, dann dun doför jlich en Ömleitung enjevve!',
+'matchtotals'           => '„$1“ kütt en <strong>$2</strong> Üvverschrefte un em Tex vun <strong>$3</strong> Atikkele för.',
+'noexactmatch'          => 'Mer han kein Sigg met jenau däm Name „<strong>$1</strong>“ jefunge. Do kanns  se [[:$1|aanläje]], wann De wells.',
+'titlematches'          => 'Zopass Üvverschrefte',
+'notitlematches'        => 'Kein zopass Üvverschrefte',
+'textmatches'           => 'Sigge met däm Täx',
+'notextmatches'         => 'Kein Sigg met däm Tex',
+'prevn'                 => 'de $1 doför zeije',
+'nextn'                 => 'de nächste $1 zeije',
+'viewprevnext'          => 'Bläddere: ($1) ($2) ($3).',
+'showingresults'        => 'Unge wääde bes <strong>$1</strong> vun de jefunge Endräch jezeich, vun de Nummer <strong>$2</strong> av.',
+'showingresultsnum'     => 'Unge sin <strong>$3</strong> vun de jefunge Endräch opjeliss, vun de Nummer <strong>$2</strong> av.',
+'nonefound'             => '<strong>Opjepass:</strong> Wann beim Söke nix erus kütt, do kann dat dran lije, dat 
+mer esu janz jewöhnliche Wööd, wie „hät“, „alsu“, „wääde“, un „sin“, uew. jar nit esu en de Daatebank dren han, 
+dat se jefonge wääde künnte.',
+'powersearch'           => 'Söke',
+'powersearchtext'       => 'Sök en de Appachtemengs:<br />$1<br />$2 Zeich Ömleitunge<br />Sök noh $3 $9',
+'searchdisabled'        => 'Dat Söke hee op de {{SITENAME}} es em Momang avjeschalt.
+Dat weed vun dänne Sörver ad ens jemaat, domet de Lass op inne nit ze jroß weed,
+un winnichstens dat normale Sigge Oprofe flöck jenoch jeiht.
+
+Ehr künnt esu lang üvver en Sökmaschin vun usserhalv immer noch
+Sigge op de {{SITENAME}} finge.
+Et es nit jesaht,
+dat dänne ihr Daate topaktuell sin,
+ävver et es besser wie jar nix.',
+
+'googlesearch' => '
+<form method="get" action="http://www.google.com/search" id="googlesearch">
+    <input type="hidden" name="domains" value="{{SERVER}}" />
+    <input type="hidden" name="num" value="50" />
+    <input type="hidden" name="ie" value="$2" />
+    <input type="hidden" name="oe" value="$2" />
+
+    <input type="text" name="q" size="31" maxlength="255" value="$1" />
+    <input type="submit" name="btnG" value="$3" />
+  <div>
+    <input type="radio" name="sitesearch" id="gwiki" value="{{SERVER}}" checked="checked" /><label for="gwiki">{{SITENAME}}</label>
+    <input type="radio" name="sitesearch" id="gWWW" value="" /><label for="gWWW">WWW</label>
+  </div>
+</form>',
+'blanknamespace'        => '(Atikkele)',
+
+# Preferences page
+#
+'preferences'           => 'ming Enstellunge',
+#'preferences-summary'  => '',
+'mypreferences' => 'My preferences',
+'prefsnologin'          => 'Nit Enjelogg',
+'prefsnologintext'      => 'Do mööts ald [[Special:Userlogin|enjelogg]] sin, öm Ding Enstellunge ze ändere.',
+'prefsreset'            => 'De Enstellunge woodte jetz op Standard zeröck jesatz.',
+'qbsettings'            => '„Flöcke Links“',
+'qbsettings-none'	=> 'Fottlooße, dat well ich nit sinn',
+'qbsettings-fixedleft'	=> 'Am linke Rand fass aanjepapp',
+'qbsettings-fixedright'	=> 'Am rächte Rand fass aanjepapp',
+'qbsettings-floatingleft'	=> 'Am linke Rand am Schwevve',
+'qbsettings-floatingright'	=> 'Am rächte Rand am Schwevve',
+'changepassword'        => 'Passwood ändere',
+'skin'                  => 'Et Ussinn',
+'math'                  => 'Mathematisch Formele',
+'dateformat'            => 'Em Datum sing Fomat',
+'datedefault'           => 'Ejaal - kein Vörliebe',
+'datetime'              => 'Datum un Uhrzigge',
+'math_failure'          => 'Fähler vum Parser',
+'math_unknown_error'    => 'Fähler, dä mer nit kenne',
+'math_unknown_function' => 'en Funktion, die mer nit kenne',
+'math_lexing_error'     => 'Fähler beim Lexing',
+'math_syntax_error'     => 'Fähler en de Syntax',
+'math_image_error'      => 'De Ömwandlung noh PNG es donevve jejange. Dun ens noh de richtije Enstallation 
+luure bei <i>latex</i>, <i>dvips</i>, <i>gs</i>, un <i>convert</i>. Oder sag et enem Sörver-Admin, oder enem 
+Wiki Köbes.',
+'math_bad_tmpdir'       => 'Dat Zwescheverzeichnis för de mathematische Formele lööt sich nit aanläje oder nix 
+eren schrieve. Dat es Dress. Sag et enem Wiki-Köbes oder enem
+Sörver-Minsch.',
+'math_bad_output'       => 'Dat Verzeichnis för de mathematische Formele lööt sich nit aanläje oder nix 
+eren schrieve. Dat es Dress. Sag et enem Wiki-Köbes oder enem 
+Sörver-Minsch.',
+'math_notexvc'          => 'Dat Projamm <code>texvc</code> ha\'mer nit jefunge. Sag et enem 
+Wiki-Köbes, enem Sörver-Minsch, oder luur ens en de 
+<code>math/README</code>.',
+'prefs-personal'        => 'De Enstellunge',
+'prefs-rc'              => 'Neuste Änderunge',
+'prefs-watchlist'       => 'De Oppassliss',
+'prefs-watchlist-days'  => 'Aanzahl Dage för en ming Oppassliss aanzezeije:',
+'prefs-watchlist-edits' => 'Aanzahl Änderunge för en ming verjrößerte Oppassliss aanzezeije:',
+'prefs-misc'            => 'Söns',
+'saveprefs'             => 'Fasshalde',
+'resetprefs'            => 'Zeröck setze',
+'oldpassword'           => 'Et ahle Passwood:',
+'newpassword'           => 'Neu Passwood:',
+'retypenew'             => 'Noch ens dat neue Passwood:',
+'textboxsize'           => 'Beim Bearbeide',
+'rows'                  => 'Reihe:',
+'columns'               => 'Spalte:',
+'searchresultshead'     => 'Beim Söke',
+'resultsperpage'        => 'Zeich Treffer pro Sigg:',
+'contextlines'          => 'Reihe för jede Treffer:',
+'contextchars'          => 'Zeiche us de Ömjevvung, pro Reih:',
+'stubthreshold'         => 'Aanzahl Zeiche vun wo av en Sigg als ene Atikkel zällt:',
+'recentchangescount'    => 'Endräch en de Liss met de „Neuste Änderunge“:',
+'savedprefs'            => 'Ding Enstellunge sin jetz jesechert.',
+'timezonelegend'        => 'Ziggzone Ungerscheed',
+'timezonetext'          => '<!-- Â¹ -->Dat sin de Stunde un Minutte zwesche de Zigg op de Uhre bei Dir am Oot un däm Sörver, dä met UTC läuf.',
+'localtime'             => 'De Zigg op Dingem Kompjuter:',
+'timezoneoffset'        => 'Dä Ungerscheed Â¹ es:',
+'servertime'            => 'De Uhrzigg om Sörver es jetz:',
+'guesstimezone'         => 'Fing et erus üvver dä Brauser',
+'allowemail'            => 'E-Mail vun andere Metmaacher zolooße',
+'defaultns'             => 'Dun standaadmäßich en hee dä 
+[[{{ns:project}}:Appachtemeng_%E2%80%94_Wat_es_dat%3F|Appachtemengs]] söke:',
+'default'               => 'Standaad',
+'files'                 => 'Dateie',
+
+# User rights
+'userrights-lookup-user'=> 'Metmaacher Jruppe verwalte',
+'userrights-user-editname'=> 'Metmaacher Name: <!-- -->',
+'editusergroup'         => 'Däm Metmaacher sing Jruppe Räächde bearbeide',
+
+'userrights-editusergroup'=> 'Metmaacher Jruppe aanpasse',
+'saveusergroups'        => 'Metmaacher Jruppe avspeichere',
+'userrights-groupsmember'=> 'Es en de Metmaacher Jruppe:<br />',
+'userrights-groupsavailable'=> 'Es nit en de Metmaacher Jruppe:<br />',
+'userrights-groupshelp' => 'Sök de Jruppe us, wo dä Metmaacher bei kumme soll oder druss erus soll. Jruppe, die De 
+hee nit ussöks, blieve, wie se sin. Dat Ussöke kanns De bei de miehste Brausere met \'\'\'Ctrl + Links Klicke\'\'\' / \'\'\'Strg + Links Klicke\'\'\' maache.',
+
+# Groups
+'group'                 => 'Jrupp:',
+'group-bot'             => 'Bots',
+'group-sysop'           => 'Wiki Köbese',
+'group-bureaucrat'      => 'Bürrokrade',
+'group-all'             => '(all)',
+'group-bot-member'      => 'Bot',
+'group-sysop-member'    => 'Wiki Köbes',
+'group-bureaucrat-member'=> 'Bürrokrad',
+'grouppage-bot'         => '{{ns:project}}:Bots',
+'grouppage-sysop'       => '{{ns:project}}:Wiki Köbes',
+'grouppage-bureaucrat'  => '{{ns:project}}:Bürrokrad',
+
+# Recent changes
+#
+'changes'               => 'Änderunge',
+'recentchanges'         => 'Neuste Änderunge',
+'recentchanges-url' => 'Special:Recentchanges',
+'recentchangestext'     => 'Op dä Sigg hee sin de neuste Änderunge am Wiki opjeliss.',
+'rcnote'                => 'Hee sin de letzte <strong>$1</strong> Änderunge us de letzte <strong>$2</strong> Dage vum $3 aan.',
+'rcnotefrom'            => 'Hee sin bes op <strong>$1</strong> Änderunge zick <strong>$2</strong> opjeliss.',
+'rclistfrom'            => 'Zeich de neu Änderunge vum $1 av',
+'rcshowhideminor'       => '$1 klein Mini-Änderunge',
+'rcshowhidebots'        => '$1 de Bots ehr Änderunge',
+'rcshowhideliu'         => '$1 de aanjemeldte Metmaacher ehr Änderunge',
+'rcshowhideanons'       => '$1 de namenlose Metmaacher ehr Änderunge',
+'rcshowhidepatr'        => '$1 de aanjeluurte Änderunge',
+'rcshowhidemine'        => '$1 ming eije Änderunge',
+'rclinks'               => 'Zeich de letzte | $1 | Änderunge us de letzte | $2 | Dage, un dun | $3 |',
+'diff'                  => 'Ungerscheed',
+'hist'                  => 'Versione',
+'hide'                  => 'Usblende:',
+'show'                  => 'Zeije:',
+'minoreditletter'       => 'M',
+'newpageletter'         => 'N',
+'boteditletter'         => 'B',
+'sectionlink'           => '?',
+'number_of_watching_users_RCview'       => '[$1]',
+'number_of_watching_users_pageview'=> '[$1 Oppasser]',
+'rc_categories'         => 'Nor de Saachjruppe (met „|“ dozwesche):',
+'rc_categories_any'     => 'All, wat mer han',
+
+# Upload
+#
+'upload'                => 'Daate huhlade',
+'uploadbtn'             => 'Huhlade!',
+'reupload'              => 'Noch ens huhlade',
+'reuploaddesc'          => 'Zeröck noh de Sigg zem Huhlade.',
+'uploadnologin'         => 'Nit Enjelogg',
+'uploadnologintext'     => 'Do mööts ald [[Special:Userlogin|enjelogg]] sin, öm Daate huhzelade.',
+'upload_directory_read_only'=> '<b>Doof:</b> En dat Verzeichnis <code>$1</code> för Dateie dren huhzelade, do kann dat Websörver Projramm nix erenschrieve.',
+'uploaderror'           => 'Fähler beim Huhlade',
+'uploadtext'            => '<div dir="ltr">Met däm Formular unge kanns de Belder oder ander Daate huhlade. Do 
+kanns dann Ding Werk tirek enbinge, en dä Aate:<ul style="list-style:none outside none; 
+list-style-position:outside; list-style-image:none; list-style-type:none"><li style="list-style:none outside none; 
+list-style-position:outside; list-style-image:none; 
+list-style-type:none"><code>\'\'\'[[{{ns:Image}}:\'\'\'\'\'Beldche\'\'\'\'\'.jpg]]\'\'\'</code></li><li
+style="list-style:none outside none; list-style-position:outside; list-style-image:none; 
+list-style-type:none"><code>\'\'\'[[{{ns:Image}}:\'\'\'\'\'Esu süht dat us\'\'\'\'\'.png | \'\'\'\'\'ene Tex, dä die
+Brausere zeije, die kein Belder künne\'\'\'\'\']]\'\'\'</code></li><li style="list-style:none outside none; 
+list-style-position:outside; list-style-image:none; 
+list-style-type:none"><code>\'\'\'[[{{ns:Media}}:\'\'\'\'\'Su hürt sich dat aan\'\'\'\'\'.ogg]]\'\'\'</code></li></ul>
+Usführlich met alle Möchlichkeite fings de dat bei de Hölp.
+Wann De jetz entschlosse bes, dat De et hee huhlade wells:
+* Aanluure, wat mer hee en de {{SITENAME}} ald han, kanns De en uns [[Special:Imagelist|Belder Liss]].
+* Wenn De jet söke wells, eets ens nohluure wells, wat ald huhjelade, oder villeich widder fottjeschmesse wood, 
+dat steiht em [[Special:Log/upload|Logboch vum Huhlade]].
+Esu, un jetz loss jonn:</div>
+== <span dir="ltr">Daate en de {{SITENAME}} lade</span> ==',
+'uploadlog'             => 'LogBoch vum Dateie Huhlade',
+'uploadlogpage'         => 'Logboch met de huhjelade Dateie',
+'uploadlogpagetext'     => 'Hee sin de Neuste huhjelade Dateie opjeliss un wä dat jedon hät.',
+'filename'              => 'Name vun dä Datei',
+'filedesc'              => 'Beschrievungstex un Zosammefassung',
+'fileuploadsummary'     => 'Beschrievungstex un Zosammefassung:',
+'filestatus'            => 'Urhevver Räächsstatus',
+'filesource'            => 'Quell',
+'copyrightpage'         => '{{ns:project}}:Lizenz',
+'copyrightpagename'     => 'Lizenz',
+'uploadedfiles'         => 'Huhjelade Dateie',
+'ignorewarning'         => 'Warnung üvverjonn, un Datei trotzdäm avspeichere.',
+'ignorewarnings'        => 'Alle Warnunge üvverjonn',
+'minlength'             => 'De Name vun de Dateie künne nit kööter wie drei Buchstave sin.',
+'illegalfilename'       => 'Schad:
+<br />
+En däm Name vun dä Datei sin Zeiche enthallde,
+die mer en Titele vun Sigge nit bruche kann.
+<br />
+Sök Der statt „$1“ jet anders us,
+un dann muss de dat Dinge noch ens huhlade.',
+'badfilename'           => 'De Datei es en „$1“ ömjedäuf.',
+'badfiletype'           => '„.$1“ es kein vun de Fomate vun Belder, wo mer jetz jet met aanfange künnte.',
+'largefile'             => 'De Datei es <strong>$2</strong> Byte jroß. Dateie huhzelade, die jrößer wie <strong>$1</strong> Byte sin, doför du\'mer avrode.',
+'largefileserver'       => 'De Datei es ze jroß. Jrößer wie däm Sörver sing Enstellung erlaub.',
+'emptyfile'             => 'Wat De hee jetz huhjelade häs, hät kein Daate dren jehatt. Künnt sin, dat De Dich 
+verdon häs, un dä Name wo verkihrt jeschrevve. Luur ens ov De wirklich <strong>die</strong> Dateie hee 
+huhlade wells.',
+'fileexists'            => 'Et jitt ald en Datei met däm Name. Wann De op „<span style="padding:2px; 
+background-color:#ddd; color:black">Datei avspeichere</span>“ klicks, weed se ersetz. Bes esu jod  un luur Der $1 
+aan, wann De nit 100% secher bes.',
+'fileexists-forbidden'  => 'Et jitt ald en Datei met däm Name. Jangk zeröck un lad se unger enem andere Name huh. [[{{ns:Image}}:$1|thumb|center|$1]]',
+'fileexists-shared-forbidden'=> 'Et jitt ald en Datei met däm Name em jemeinsame Speicher. Jangk zeröck un lad se unger enem andere Name huh. [[{{ns:Image}}:$1|thumb|center|$1]]',
+'successfulupload'      => 'Et Huhlade hät jeflupp',
+'fileuploaded'          => 'De Datei „$1“ es jetz huhjelade.
+Jangk op die Sigg met dä Datei ehr Beschrievung un do drach alles en wat De üvver se weiß.
+Wo se her kom, Wä se jemaht hät un wann, un wat De Dich söns noch dran entsenne kanns.
+Do küss De hen üvver dä Link: $2
+
+Wann dat e Beld wor, do kanns De met:
+:<code><nowiki>[[{{NS:Image}}:$1|thumb|Tex för unger dat Beld ze dun]]</code>
+e Breefmarkebeldche op dä Sigg mole looße.',
+'uploadwarning'         => 'Warnung beim Huhlade',
+'savefile'              => 'Datei avspeichere',
+'uploadedimage'         => 'hät huhjelade: „[[$1]]“',
+'uploaddisabled'        => 'Huhlade jesperrt',
+'uploaddisabledtext'    => 'Et Huhlade es jesperrt hee en däm Wiki.',
+'uploadscripted'        => 'En dä Datei es HTML dren oder Code vun enem 
+Skripp, dä künnt Dinge Brauser en do verkihrte Hals krije un usführe.',
+'uploadcorrupt'         => 'Schad.
+<br />
+De Datei es kapott, hät en verkihrte File Name Extention, oder irjends ene andere Dress es passeet.
+<br />
+<br />
+Luur ens noh dä Datei, un dann muss de et noch ens versöke.',
+'uploadvirus'           => 'Esu ene Dress:
+<br />
+En dä Datei stich e Kompjutervirus!
+<br />
+De Einzelheite: $1',
+'sourcefilename'        => 'Datei zem huhlade',
+'destfilename'          => 'Unger däm Dateiname avspeichere',
+'watchthisupload'       => 'Watch this page',
+'filewasdeleted'        => 'Unger däm Name wood ald ens en Datei huhjelade. Die es enzwesche ävver widder fottjeschmesse woode. Luur leever eets ens en et $1 ih dat De se dann avspeichere deis.',
+
+'upload-proto-error' => 'Verkihrt Protokoll',
+'upload-proto-error-text' => 'Remote upload requires URLs beginning with <code>http://</code> or <code>ftp://</code>.',
+'upload-file-error' => 'Internal error',
+'upload-file-error-text' => 'Ene internal error es passeet beim Aanläje vun en Datei om Server.  Verzäll et enem system administrator.',
+'upload-misc-error' => 'Dat Huhlaade jing donevve',
+'upload-misc-error-text' => 'Dat Huhlaade jing donevve. Mer wesse nit woröm.  Pröf de URL un versök et noch ens.  Wann et nit flupp, verzäll et enem system administrator.',
+
+# Some likely curl errors.  More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
+'upload-curl-error6' => "Couldn't reach URL",
+'upload-curl-error6-text' => 'The URL provided could not be reached.  Please double-check that the URL is correct and the site is up.',
+'upload-curl-error28' => 'Upload timeout',
+'upload-curl-error28-text' => 'The site took too long to respond. Please check the site is up, wait a short while and try again. You may want to try at a less busy time.',
+
+'license'               => 'Lizenz',
+'nolicense'             => 'Nix usjesök',
+
+'upload_source_url'     => ' (richtije öffentlije URL)',
+'upload_source_file' => ' (en Datei op Dingem Kompjuter)',
+
+# Image list
+#
+'imagelist'             => 'Belder, Tön, uew. (all)',
+#'imagelist-summary' => '',
+'imagelisttext'         => 'Hee küt en Liss vun <strong>$1</strong> Datei{{PLURAL:$1||e}}, zoteet $2.',
+'imagelistforuser'      => 'Hee sühs De nor de Belder, die dä Metmaacher „$1“ huhjelade hät.',
+'getimagelist'          => 'ben de Liss met de Dateiname am lade',
+'ilsubmit'              => 'Sök',
+'showlast'              => 'Zeich de letzte | $1 | Dateie, zoteet $2.',
+'byname'                => 'nohm Name',
+'bydate'                => 'nohm Datum',
+'bysize'                => 'noh de Dateijröße',
+'imgdelete'             => 'fott!',
+'imgdesc'               => 'tex',
+'imgfile'               => 'Datei',
+'imglegend'             => 'Legende: (tex) = änder oder zeich de Beschrievungstex för die Datei.',
+'imghistory'            => 'Versione',
+'revertimg'             => 'retour',
+'deleteimg'             => 'Fottschmieße',
+'deleteimgcompletely'   => 'All Versione vun dä Datei fottschmieße',
+'imghistlegend'         => 'Legende:
+(neu) = dat es de Neuste Version -
+(fott!) = schmieß de ahl Version fott! -
+(retour) = jangk zeröck op de ahl Version -
+Op et Datum klicke = Zeich de Version vun domols aan.',
+'imagelinks'            => 'Links',
+'linkstoimage'          => 'Hee kumme de Sigge, die op die Datei linke dun:',
+'nolinkstoimage'        => 'Nix link op hee die Datei.',
+'sharedupload'          => 'De Datei es esu parat jelaht, dat se en diverse, ungerscheedlije Projekte jebruch wääde kann.',
+'shareduploadwiki'      => 'Mieh Informatione fings De hee: $1.',
+'shareduploadwiki-linktext'=> 'Hee es en Datei beschrevve',
+'shareddescriptionfollows' => '-',
+'noimage'               => 'Mer han kein Datei met däm Name, kanns De ävver $1.',
+'noimage-linktext'      => 'Kanns De huhlade!',
+'uploadnewversion-linktext'=> 'Dun en neu Version vun dä Datei huhlade',
+'imagelist_date'        => 'Datum',
+'imagelist_name'        => 'Name',
+'imagelist_user'        => 'Metmaacher',
+'imagelist_size'        => 'Byte',
+'imagelist_description' => 'Wat es op däm Beld drop?',
+'imagelist_search_for'  => 'Sök noh däm Name vun däm Beld:',
+
+# Mime search
+#
+'mimesearch'            => 'Belder, Tön, uew. üvver ehr MIME-Typ söke',
+#'mimesearch-summary' => '',
+'mimetype'              => 'MIME-Typ:',
+'download'              => 'Erungerlade',
+
+# Unwatchedpages
+#
+'unwatchedpages'        => 'Sigge, wo keiner drop oppass',
+#'unwatchedpages-summary' => '',
+
+# List redirects
+'listredirects'         => 'Ömleitunge',
+#'listredirects-summary' => '',
+
+# Unused templates
+'unusedtemplates'       => 'Schablone oder Baustein, die nit jebruch wääde',
+#'unusedtemplates-summary' => '',
+'unusedtemplatestext'   => 'Hee sin all de Schablone opjeliss, die em Appachtemeng „Schablon“ sin, die nit en 
+ander Sigge enjefüg wääde. Ih De jet dovun fottschmieß, denk dran, se künnte och op en ander Aat jebruch 
+wääde, un luur Der die ander Links aan!',
+'unusedtemplateswlh'    => 'ander Links',
+
+# Random redirect
+'randomredirect'        => 'Zofällije Ömleitung',
+
+# Statistics
+#
+'statistics'            => 'Statistike',
+'sitestats'             => 'Statistike üvver de {{SITENAME}}',
+'userstats'             => 'Statistike üvver de Metmaacher',
+'sitestatstext'         => '* Et jitt en etwa <strong>$2</strong> richtije Atikkele hee.
+* En de Daatebank sinner ävver <strong>$1</strong> Sigge, aan dänne bes jetz zosamme <strong>$4</strong> Mol jet 
+jeändert woode es.  Em Schnedd woodte alsu <strong>$5</strong> Änderunge pro Sigg jemaht. <br /><small> (Do sin 
+ävver de Klaafsigge metjezallt, de Sigge üvver de {{SITENAME}}, un usserdäm jede kleine Futz un Stümpchenssigg, 
+Ömleitunge, Schablone, Saachjruppe, un ander Zeuch, wat mer nit jod als ene Atikkel zälle kann)</small>
+
+* <strong>$8</strong> Belder, Tön, un esun ähnlije Daate woodte ald huhjelade.
+
+* Et {{PLURAL:$7|es noch <strong>ein</strong> Aufgab|sin noch <strong>$7</strong> Aufgabe|es <strong>kein</strong> 
+Aufgab mieh}} en de Liss.
+
+* <strong>$3</strong> mol wood en Sigg hee avjerofe, dat sin <strong>$6</strong> Avrofe pro Sigg.',
+'userstatstext'         => '* <strong>$1</strong> Metmaacher han sich bes jetz aanjemeldt.
+* <strong>$2</strong> dovun sin $5, dat sinner <strong>$4%</strong>.',
+'statistics-mostpopular'=> 'De miets beluurte Sigge',
+
+'disambiguations'       => '„(Wat es dat?)“-Sigge',
+#'disambiguations-summary'      => '',
+'disambiguationspage'   => 'Template:Disambig',
+'disambiguationstext'   => 'De Sigge,
+die heenoh oppjeliss wääde, han Links op „(Wat es dat?)“-Sigge.
+
+Als „(Wat es dat?)“-Sigge wääde all die jezallt, die de Schablon <strong>„$1“</strong> bruche.
+
+Vill vun dänne sollte wall besser op en Sigg linke,
+wo tirek de richtije Enhalde drop stonn.
+Ävver nit unbedingk jede, et kütt op dä Link drop  aan.
+
+Links us ander Appachtemengs wääde hee nit jezeich.',
+'doubleredirects'       => 'Ömleitunge op Ömleitunge (Dubbel Ömleitunge sin verkihrt)',
+#'doubleredirects-summary'      => '',
+'doubleredirectstext'   => 'Dubbel Ömleitunge sin immer verkihrt, weil däm Wiki sing Soffwär de eetse Ömleitung 
+folg, de zweite Ömleitung ävver dann aanzeije deit - un dat well mer jo normal nit han.
+Hee fings De en jede Reih ene Link op de iertste un de zweite Ömleitung, donoh ene Link op de Sigg, wo de 
+zweite Ömleitung hin jeiht. För jewöhnlich es dat dann och de richtije Sigg, wo de iertste Ömleitung ald hin 
+jonn sollt.
+Met däm „(Ändere)“-link kanns De de eetste Sigg tirek aanpacke. Tipp: Merk Der dat Lemma - de Üvverschreff - 
+vun dä Sigg dovör.',
+'brokenredirects'       => 'Ömleitunge, die en et Leere jonn (kapott oder op Vörrod aanjelaht)',
+#'brokenredirects-summary'      => '',
+'brokenredirectstext'   => 'Die Ömleitunge hee jonn op Sigge, die mer
+[[#ast|<small>noch\'\'\'<sup>*</sup>?\'\'\'</small>]]
+jar nit han.
+<small id="ast">\'\'\'<sup>*</sup>?\'\'\' Die künnte op Vörrod aanjelaht sin.
+Die alsu jod ussinn,
+un wo die Sigge wo se drop zeije,
+späder wall noch kumme wääde,
+die sollt mer behalde.</small>',
+
+# Miscellaneous special pages
+#
+'nbytes'                => '$1 Byte',
+'ncategories'           => '{{PLURAL:$1| ein Saachjrupp | $1 Saachjruppe }}',
+'nlinks'                => '{{PLURAL:$1|eine Link|$1 Links}}',
+'nmembers'              => 'met {{PLURAL:$1|ein Sigg|$1 Sigge}} dren',
+'nrevisions'            => '{{PLURAL:$1|ein Änderung|$1 Änderunge}}',
+'nviews'                => '{{PLURAL:$1|1 Avrof|$1 Avrofe}}',
+
+'lonelypages'           => 'Sigge, wo nix drop link',
+#'lonelypages-summary'  => '',
+'lonelypagestext'       => 'The following pages are not linked from other pages in this wiki.',
+'uncategorizedpages'    => 'Sigge, die en kein Saachjrupp sin',
+#'uncategorizedpages-summary' => '',
+'uncategorizedcategories'=> 'Saachjruppe, die selvs en kein Saachjruppe sin',
+#'uncategorizedcategories-summary' => '',
+'uncategorizedimages'   => 'Belder, Tön, uew., die en kein Saachjruppe dren sin',
+#'uncategorizedimages-summary' => '',
+'unusedcategories'      => 'Saachjruppe met nix dren',
+'unusedimages'          => 'Belder, Tön, uew., die nit en Sigge dren stäche',
+'popularpages'          => 'Sigge, die off avjerofe wääde',
+#'popularpages-summary' => '',
+'wantedcategories'      => 'Saachjruppe, die mer noch nit han, die noch jebruch wääde',
+#'wantedcategories-summary' => '',
+'wantedpages'           => 'Sigge, die mer noch nit han, die noch jebruch wääde',
+#'wantedpages-summary' => '',
+'mostlinked'            => 'Sigge met de miehste Links drop',
+#'mostlinked-summary' => '',
+'mostlinkedcategories'  => 'Saachjruppe met de miehste Links drop',
+#'mostlinkedcategories-summary' => '',
+'mostcategories'        => 'Atikkele met de miehste Saachjruppe',
+#'mostcategories-summary' => '',
+'mostimages'            => 'Belder, Tön, uew. met de miehste Links drop',
+#'mostimages-summary' => '',
+'mostrevisions'         => 'Atikkele met de miehste Änderunge',
+#'mostrevisions-summary' => '',
+'allpages'              => 'All Sigge',
+#'allpages-summary'     => '',
+'prefixindex'           => 'All Sigge, die dänne ehr Name met enem bestemmte Wood oder Tex aanfange deit',
+#'prefixindex-summary' => '',
+'randompage'            => 'Zofällije Sigg',
+'randompage-url'=> 'Special:Random',
+'shortpages'            => 'Sigge zoteet vun koot noh lang',
+#'shortpages-summary'     => '',
+'longpages'             => 'Sigge zoteet vun lang noh koot',
+#'longpages-summary'    => '',
+'deadendpages'          => 'Sigge ohne Links dren',
+#'deadendpages-summary' => '',
+'deadendpagestext'      => 'The following pages do not link to other pages in this wiki.',
+'listusers'             => 'Metmaacher',
+#'listusers-summary'    => '',
+'specialpages'          => 'Sondersigge',
+#'specialpages-summary' => '',
+'spheading'             => 'Sondersigge för all Metmaacher',
+'restrictedpheading'    => 'Sondersigge met beschränkte Zojangsräächde',
+'recentchangeslinked'   => 'Verlinkte Änderunge',
+'rclsub'                => '(aan Sigge, noh dänne de Sigg: „$1“ hin link)',
+'newpages'              => 'Neu Sigge',
+#'newpages-summary'     => '',
+'newpages-username'     => 'Metmaacher Name:',
+'ancientpages'          => 'Sigge zoteet vun Ahl noh Neu',
+#'ancientpages-summary' => '',
+'intl'                  => 'Interwiki Links',
+'move'                  => 'Ömnenne',
+'movethispage'          => 'De Sigg ömnenne',
+'unusedimagestext'      => '<p><strong>Opjepass:</strong> Ander Websigge künnte immer noch de Dateie hee tirek 
+per URL aanspreche. Su künnt et sin, dat en 
+Datei hee en de Liss steiht, ävver doch jebruch weed. Usserdäm, winnichstens bei neue Dateie, künnt sin, 
+dat se noch nit en enem Atikkel enjebaut sin, weil noch Einer dran am brasselle es.</p>',
+'unusedcategoriestext'  => 'De Saachjruppe hee sin enjerich, ävver jetz em Momang, es keine Atikkel un 
+kein Saachjrupp dren ze finge.',
+
+'booksources'           => 'Böcher',
+#'booksources-summary'  => '',
+'categoriespagetext'    => 'Dat sin de Saachjruppe vun däm Wiki hee.',
+'data'                  => 'Daate',
+'userrights'            => 'Metmaacher ehr Räächde verwalte',
+#'userrights-summary' => '',
+'groups' => 'User groups',
+
+'booksourcetext'        => 'Hee noh kütt en Liss met Websigge,
+wo mer vun de {{SITENAME}} nix wigger met ze dun han,
+wo mer jet üvver Böcher erfahre
+un zom Deil och Böcher kaufe kann.
+Doför muss De Dich mänchmol allerdings eets ens aanmelde,
+wat Koste und andere Jefahre met sich bränge künnt.
+Wo et jeiht, jonn de
+Links hee tirek op dat Boch,
+wadder am Söke sid.',
+'isbn'                  => 'ISBN',
+'rfcurl' =>  'http://www.ietf.org/rfc/rfc$1.txt',
+'pubmedurl' =>  'http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=Retrieve&db=pubmed&dopt=Abstract&list_uids=$1',
+'alphaindexline'        => '$1 â€¦ $2',
+'version'               => 'Version vun de Wiki Soffwär zeije',
+'log'                   => 'Logböcher ehr Opzeichnunge (all)',
+'alllogstext'           => 'Dat hee es en jesamte Liss us all dä Logböcher för et [[Special:Log/block|Metmaacher 
+oder IP Adress Sperre]], et [[Special:Log/protect|Sigge Sperre]], [[Special:Log/delete|et Sigge Fottschmieße]], et 
+[[Special:Log/move|Sigge Ömnenne]], et [[Special:Log/renameuser|Metmaacher Ömnenne]], oder 
+[[Special:Log/newusers|neue Metmaacher ehr Aanmeldunge]], et [[Special:Log/upload|Daate Huhlade]], 
+[[Special:Log/rights|de Bürrokrade ehre Krom]], un de [[Special:Log/makebot|Bots ehr Status Änderunge]].
+Dä Logböcher ehre Enhald ka\'mer all noh de Aat, de Metmaacher, oder de Sigge ehr Name, un esu, einzel zoteet 
+aanluure.',
+'logempty'              => '<i>Mer han kein passende Endräch en däm Logboch.</i>',
+
+# Special:Allpages
+'nextpage'              => 'De nächste Sigg: „$1“',
+'allpagesfrom'          => 'Sigge aanzeije av däm Name:',
+'allarticles'           => 'All Atikkele',
+'allinnamespace'        => 'All Sigge (Em Appachtemeng „$1“)',
+'allnotinnamespace'     => 'All Sigge (usser em Appachtemeng "$1")',
+'allpagesprev'          => 'Zeröck',
+'allpagesnext'          => 'Nächste',
+'allpagessubmit'        => 'Loss Jonn!',
+'allpagesprefix'        => 'Sigge zeije, wo dä Name aanfängk met:',
+'allpagesbadtitle'      => 'Dä Siggename es nit ze jebruche. Dä hät e Köözel för en Sproch oder för ne 
+Interwiki Link am Aanfang, oder et kütt e Zeiche dren för, wat en Siggename nit jeiht, villeich och mieh wie 
+eins vun all däm op eimol.',
+
+# Special:Listusers
+'listusersfrom'         => 'Zeich de Metmaacher vun:',
+
+# Email this user
+#
+'mailnologin'           => 'Do bes nit enjelogg.',
+'mailnologintext'       => 'Do mööts ald aanjemeldt un [[Special:Userlogin|enjelogg]] sin, un en jode E-Mail 
+Adress en Dinge [[Special:Preferences|ming Enstellunge]] stonn han, öm en E-Mail aan andere Metmaacher ze 
+schecke.',
+'emailuser'             => 'E-mail aan dä Metmaacher',
+'emailpage'             => 'E-mail aan ene Metmaacher',
+'emailpagetext'         => 'Wann dä Metmaacher en E-mail Adress aanjejovve hätt en singe Enstellunge, un die 
+deit et och, dann kanns De met däm Fomular hee unge, en einzelne E-Mail aan dä Metmaacher schecke. Ding E-mail 
+Adress, die De en Ding eije Enstellunge aanjejovve häs, die weed als de Avsender Adress en die E-Mail 
+enjedrage. Domet kann, wä die E-Mail kritt, drop antwoode, un die Antwood jeiht tirek aan Dich.
+Alles klor?',
+'usermailererror'       => 'Dat E-Mail-Objek jov ene Fähler us:',
+'defemailsubject'       => 'E-Mail üvver de {{SITENAME}}.',
+'noemailtitle'          => 'Kein E-Mail Adress',
+'noemailtext'           => 'Dä Metmaacher hät kein E-Mail Adress enjedrage, oder hä well kein E-Mail krije.',
+'emailfrom'             => 'Vun',
+'emailto'               => 'Aan',
+'emailsubject'          => 'Üvver',
+'emailmessage'          => 'Dä Tex',
+'emailsend'             => 'Avschecke',
+'emailccme' => 'Scheck mer en Kopie vun dä E-Mail. ',
+'emailccsubject' => 'En Kopie vun Dinger E-Mail aan $1: $2',
+'emailsent'             => 'E-Mail es ungerwähs',
+'emailsenttext'         => 'Ding E-Mail es jetz lossjescheck woode.',
+
+# Watchlist
+'watchlist'             => 'ming Oppassliss',
+'mywatchlist'             => 'ming Oppassliss',
+'watchlistfor'          => '(för <strong>$1</strong>)',
+'nowatchlist'           => 'En Ding Oppassliss es nix dren.',
+'watchlistanontext'     => 'Do muss $1, domet de en Ding Oppassliss erenluure kanns, oder jet dran ändere.',
+'watchlistcount'        => '<strong>En Ding Oppassliss {{PLURAL:$1|es eine Endrach|sinner $1 Endräch|es keine Endrach}} dren, de Klaafsigge metjezallt.</strong>',
+'clearwatchlist'        => 'De Oppassliss fottschmieße',
+'watchlistcleartext'    => 'Bes De secher, dat De Ding janze Oppassliss fottschmieße wells?',
+'watchlistclearbutton'  => 'De janze Oppassliss fottschmieße',
+'watchlistcleardone'    => 'Ding Oppassliss wood fottjeschmesse. {{PLURAL:$1|Dä Endrach es|De <strong>$1</strong> Endräch sin}} beim Düüvel.',
+'watchnologin'          => 'Nit enjelogg',
+'watchnologintext'      => 'Öm Ding Oppassliss ze ändere, mööts de ald [[Special:Userlogin|enjelogg]] sin.',
+'addedwatch'            => 'En de Oppassliss jedon',
+'addedwatchtext'        => 'Die Sigg „[[$1]]“ es jetz en Ding [[Special:Watchlist|Oppassliss]]. Av jetz, wann die Sigg 
+verändert weed, oder ehr Klaafsigg, dann weed dat en de Oppassliss jezeich. Dä Endrach för die Sigg kütt en 
+Fettschreff en de „[[Special:Recentchanges|Neuste Änderunge]]“, domet De dä do och flöck fings.
+Wann de dä widder loss wääde wells us Dinger Oppassliss, dann klick op „Nimieh drop oppasse“ wann De die Sigg om 
+Schirm häs.',
+'removedwatch'          => 'Us de Oppassliss jenomme',
+'removedwatchtext'      => 'Die Sigg „[[$1]]“ es jetz us de Oppassliss erusjenomme.',
+'watch'                 => 'Drop Oppasse',
+'watchthispage'         => 'Op die Sigg oppasse',
+'unwatch'               => 'Nimieh drop Oppasse',
+'unwatchthispage'       => 'Nimieh op die Sigg oppasse',
+'notanarticle'          => 'Keine Atikkel',
+'watchnochange'         => 'Keine Atikkel en Dinger Oppassliss es en dä aanjezeichte Zick verändert woode.',
+'watchdetails'          => '*  <strong>$1</strong> Sigge sin en dä Oppassliss, ohne de Klaafsigge
+* [[Special:Watchlist/edit|Zeich de janze Oppassliss aan, kanns De och ändere]]
+* [[Special:Watchlist/clear|Schmieß dä janze Krom fott, un pass op nix mieh op]]',
+'wlheader-enotif'       => '* Et E-mail Schecke es enjeschalt.',
+'wlheader-showupdated'  => '* Wann se Einer jeändert hätt, zickdäm De se et letzte Mol aanjeluurt häs, sin die Sigge <strong>extra markeet</strong>.',
+'watchmethod-recent'    => 'Ben de letzte Änderunge jäje de Oppassliss am pröfe',
+'watchmethod-list'      => 'Ben de Oppassliss am pröfe, noh de letzte Änderung',
+'removechecked'         => 'Schmieß de Sigge met Hökche us de Oppassliss erus',
+'watchlistcontains'     => 'En de Oppassliss sinner <strong>$1</strong> Sigge.',
+'watcheditlist'         => 'Hee en dä Liss met dä Sigge en Dinger Oppassliss, do dun e Hökche maache bei dänne 
+Sigge, wo De nimieh drop oppasse wells. Wann De fäädich bes, dun unge op dä Knopp „<span style="padding:2px; 
+background-color:#ddd; color:black">Schmieß de Sigge met Hökche us de Oppassliss erus</span>“ klicke, öm Ding Liss 
+dann wirklich esu avzespeichere. Wann De hee en Sigg fottlööß, dann deit dä ehr Klaafsigg och erusfleeje, 
+un ömjedriht.<br /><br /><hr />',
+'removingchecked'       => 'Ben de ussjewählte Sigge us dä Oppassliss erus am schmieße',
+'couldntremove'         => 'Kunnt „$1“ nit fottschmieße',
+'iteminvalidname'       => 'Dä Endrach „$1“ hät ene kapodde Name.',
+'wlnote'                => 'Hee sin de letzte <strong>$1</strong> Änderunge us de letzte <strong>$2</strong> Stund.',
+'wlshowlast'            => 'Zeich de letzte | $1 | Stunde | $2 | Dage | $3 | aan, dun',
+'wlsaved'               => 'Dat es en jesecherte Version vun Dinger Oppassliss.',
+'wlhideshowown'         => '$1 ming eije Änderunge',
+'wlhideshowbots'        => '$1 de Bots ehr Änderunge',
+'wldone'                => 'Fäädich.',
+
+'enotif_mailer'         => 'Dä {{SITENAME}} Nachrichte Versand',
+'enotif_reset'          => 'Setz all Änderunge op „Aanjeluurt“ un Erledich.',
+'enotif_newpagetext'    => 'Dat es en neu aanjelahte Sigg.',
+'changed'               => 'jeändert',
+'created'               => 'neu aanjelaht',
+'enotif_subject'        => '{{SITENAME}}: Sigg "$PAGETITLE" vun "$PAGEEDITOR" $CHANGEDORCREATED.',
+'enotif_lastvisited'    => 'Luur unger „$1“ - do fings de all die Änderunge zick Dingem letzte Besoch hee.',
+'enotif_body'           => 'Leeven $WATCHINGUSERNAME,
+en de {{SITENAME}} wood die Sigg „$PAGETITLE“ am $PAGEEDITDATE vun „$PAGEEDITOR“ $CHANGEDORCREATED, unger 
+$PAGETITLE_URL fings Do de Neuste Version.
+$NEWPAGE
+Koot Zosammejefass, Quell: „$PAGESUMMARY“ $PAGEMINOREDIT
+Do kanns dä Metmaacher „$PAGEEDITOR“ aanspreche:
+* E-Mail: $PAGEEDITOR_EMAIL
+* wiki: $PAGEEDITOR_WIKI
+Do kriss vun jetz aan kein E-Mail mieh, bes dat Do Der die Sigg aanjeluurt häs. Do kanns ävver och all die E-Mail 
+
+Merker för die Sigge en Dinger Oppassliss op eimol ändere.
+
+Ene schöne Jroß vun de {{SITENAME}}.
+
+--
+Do kanns hee Ding Oppassliss ändere:
+{{FULLURL:Special:Watchlist/edit}}
+
+Do kanns hee noh Hölp luure:
+{{FULLURL:int:MediaWiki:Helppage}}',
+
+# Delete/protect/revert
+#
+'deletepage'            => 'Schmieß die Sigg jetz fott',
+'confirm'               => 'Dä Schotz för die Sigg ändere',
+'excontent'             => 'drop stundt: „$1“',
+'excontentauthor'       => 'drop stundt: „$1“ un dä einzije Schriever woh: „$2“',
+'exbeforeblank'         => 'drop stundt vörher: „$1“',
+'exblank'               => 'drop stundt nix',
+'confirmdelete'         => 'Dat Fottschmieße muss bestätich wääde:',
+'deletesub'             => '(De Sigg „$1“ soll fottjeschmesse wääde)',
+'historywarning'        => '<strong>Opjepass:</strong> Die Sigg hät ene janze Püngel Versione',
+'confirmdeletetext'     => 'Do bes koot dovör, en Sigg för iwich fottzeschmieße. Dobei verschwind och de janze Verjangenheit vun dä Sigg us de Daatebank, met all ehr Änderunge un Metmaacher Name, un all dä Opwand, dä do dren stich. Do muss hee jetz bestätije, dat de versteihs, wat dat bedügg, un dat De weiß, wat Do do mähs.
+<strong>Dun et nor, wann De met de [[{{ns:project}}:Üvver et Sigge Fottschmieße|Rejele doför]] wirklich zosamme 
+jeihs!</strong>',
+'actioncomplete'        => 'Erledich',
+'deletedtext'           => 'De Sigg „$1“ es jetz fottjeschmesse woode. Luur Der „$2“ aan, do häs De en Liss met de Neuste fottjeschmesse Sigge.',
+'deletedarticle'        => 'hät fottjeschmesse: „[[$1]]“',
+'dellogpage'            => 'Logboch met de fottjeschmesse Sigge',
+'dellogpagetext'        => 'Hee sin de Sigge oppjeliss, die et neus fottjeschmesse woodte.',
+'deletionlog'           => 'Dat Logboch met de fottjeschmesse Sigge dren',
+'reverted'              => 'Han de ählere Version vun dä Sigg zoröck jehollt.',
+'deletecomment'         => 'Aanlass för et Fottschmieße',
+'imagereverted'         => 'Dat Beld es jetz op de Version vun fröher zeröckjesatz.',
+'rollback'              => 'Änderunge Zeröcknemme',
+'rollback_short'        => 'Zeröcknemme',
+'rollbacklink'          => 'Zeröcknemme',
+'rollbackfailed'        => 'Dat Zeröcknemme jingk sheiv',
+'cantrollback'          => 'De letzte Änderung zeröckzenemme es nit möchlich. Dä letzte Schriever es dä einzije, dä aan dä Sigg hee jet jedon hät!',
+'alreadyrolled'         => '<strong>Dat wor nix!</strong>
+Mer künne de letzte Änderunge vun dä Sigg „[[$1]]“ vum Metmaacher „[[User:$2|$2]]“ (?[[User talk:$2|däm sing Klaafs]]) nimieh zeröcknemme, dat hät ene Andere enzwesche ald jedon.
+De Neuste letzte Änderung es jetz vun däm Metmaacher „[[User:$3|$3]]“ (?[[User talk:$3|däm sing Klaafs]]).',
+'editcomment'           => 'Bei dä Änderung stundt: „<i>$1</i>“.',
+'revertpage'            => 'Änderunge vun däm Metmaacher „[[User:$2|$2]]“ (?[[User talk:$2|däm sing Klaafs]]) fottjeschmesse, un doför de letzte Version vum „[[User:$1|$1]]“ widder zeröckjehollt',
+'sessionfailure'        => 'Et jov wall e technisch Problem met Dingem Login. Dröm ha\'mer dat us Vörsich jetz nit jemaht, domet mer nit villeich Ding Änderung däm verkihrte Metmaacher ungerjubele. Jangk zeröck un versök et noch ens.',
+'protectlogpage'        => 'Logboch vum Sigge Schötze',
+'protectlogtext'        => 'Hee es de Liss vun Sigge, die jeschötz oder frei jejovve woode sin.',
+'protectedarticle'      => 'hät jeschötz: „[[$1]]“',
+'unprotectedarticle'    => 'Schotz för „[[$1]]“ opjehovve',
+'protectsub'            => '(Sigge Schotz för „$1“ ändere)',
+'confirmprotecttext'    => 'Wells De die Sigg schötze?',
+'confirmprotect'        => 'Sigg schötze',
+'protectmoveonly'       => 'Nor jäje et Ömnenne schötze',
+'protectcomment'        => 'Dä Jrund oder Aanlass för et Schötze',
+'unprotectsub'          => '(Schotz för „$1“ ophevve)',
+'confirmunprotecttext'  => 'Wells De die Sigg frei jevve un dä ehre Schotz ophevve?',
+'confirmunprotect'      => 'Sigg frei jevve',
+'unprotectcomment'      => 'Dä Aanlass för dä Schotz opzehevve',
+'protect-unchain'       => 'Et Schötze jäje Ömnenne extra enstelle looße',
+'protect-text'          => 'Hee kanns De dä Schotz jäje Veränderunge för de Sigg „$1“ aanluure un ändere. Em <span class="plainlinks">[{{FULLURL:Special:Log/protect|page={{FULLPAGENAMEE}}}} Logboch]</span> fings De ählere Änderunge vun däm Schotz, wann et se jitt. Bes esu jod un hald Dich aan de Rejele för esu Fäll!',
+'protect-viewtext'      => 'Ding Berechtijung als ene Metmaacher es nit jenoch, öm dä Siggeschotz ze ändere.
+
+Hee de aktuell Enstellunge för die Sigg „<strong>$1</strong>“:',
+'protect-default'       => '-(Standaad)-',
+'protect-level-autoconfirmed'=> 'nor Metmaacher dranlooße, die sich aanjemeldt han',
+'protect-level-sysop'   => 'Nor de Wiki Köbese dranlooße',
+
+# restrictions (nouns)
+'restriction-edit'      => 'An et Ändere â€¦',
+'restriction-move'      => 'An et Ömnenne â€¦',
+
+# Undelete
+'undelete'              => 'Fottjeschmessene Krom aanluure/zeröckholle',
+'undeletepage'          => 'Fottjeschmesse Sigge aanluure un widder zeröckholle',
+'viewdeletedpage'       => 'Fottjeschmesse Sigge aanzeije',
+'undeletepagetext'      => 'De Sigge heenoh sin fottjeschmesse, mer künne se ävver immer noch usem Müllemmer eruskrose.',
+'undeleteextrahelp'     => 'Öm de janze Sigg met all ehre Versione widder ze holle, looß all de Versione ohne Hökche, un klick op „<b style="padding:2px; background-color:#ddd; color:black">Zeröckholle!</b>“.
+Öm bloß einzel Versione zeröckzeholle, maach Hökche aan die Versione, die De widder han wells, un dann dun „<b style="padding:2px; background-color:#ddd; color:black">Zeröckholle!</b>“ klicke.
+Op „<b style="padding:2px; background-color:#ddd; color:black">De Felder usleere</b>“
+klick, wann De all Ding Hökche un Ding „Erklärung (för en et Logboch):“ widder fott han wells.',
+'undeletearticle'       => 'Ene fottjeschmessene Atikkel widder zeröckholle',
+'undeleterevisions'     => '<strong>$1</strong> Versione en et Archiv jedon',
+'undeletehistory'       => 'Wann De die Sigg widder zeröckholls,
+dann kriss De all fottjeschmesse Versione widder.
+Wann enzwesche en neu Sigg unger däm ahle Name enjerich woode es,
+dann wääde de zeröckjehollte Versione einfach als zosätzlije äldere Versione för die neu Sigg enjerich.
+Die neu Sigg weed nit ersetz.',
+'undeletehistorynoadmin'=> 'Die Sigg es fottjeschmesse woode. Dä Jrund döför es en de Liss unge ze finge, jenau esu wie de Metmaacher, wo de Sigg verändert han, ih dat se fottjeschmesse wood. Wat op dä Sigg ehre fottjeschmesse ahle Versione stundt, dat künne nor de Wiki Köbese noch aansinn (un och widder zeröckholle)',
+'undeleterevision'      => 'Fottjeschmesse Versione nohm Stand vum $1',
+'undeleterevision-missing' => 'De Version stemmp nit. Dat wor ene verkihrte Link, oder de Version wood usem Archiv zeröck jehollt, oder fottjeschmesse.',
+'undeletebtn'           => 'Zeröckholle!',
+'undeletereset'         => 'De Felder usleere',
+'undeletecomment'       => 'Erklärung (för en et Logboch):',
+'undeletedarticle'      => '„$1“ zeröckjehollt',
+'undeletedrevisions'    => '{{PLURAL:$1|ein Version|$1 Versione}} zeröckjehollt',
+'undeletedrevisions-files'=> 'Zesammejenomme <strong>$1</strong> Versione vun <strong>$2</strong> Dateie zeröckjehollt',
+'undeletedfiles'        => '<strong>$1</strong> Dateie zeröckjehollt',
+'cannotundelete'        => '<strong>Dä.</strong> Dat Zeröckholle jing donevve. Möchlich, dat ene andere Metmaacher flöcker wor, un et ald et eets jedon hät, un jetz es die Sigg ald widder do jewäse.',
+'undeletedpage'         => '<big><strong>De Sigg „$1“ es jetz widder do</strong></big>
+Luur Der et [[Special:Log/delete|Logboch met de fottjeschmesse Sigge]] aan, do häs De de Neuste fottjeschmesse 
+un widder herjehollte Sigge.',
+
+# Namespace form on various pages
+'namespace'             => 'Appachtemeng:',
+'invert'                => 'dun de Uswahl ömdrije',
+
+# Contributions
+#
+'contributions'         => 'Däm Metmaacher sing Beidräch',
+'mycontris'             => 'ming Beidräch',
+'contribsub2'            => 'För dä Metmaacher: $1 ($2)',
+'nocontribs'            => 'Mer han kein Änderunge jefonge, en de Logböcher, die do passe däte.',
+'ucnote'                => 'Hee sin däm Metmaacher sing letzte <strong>$1</strong> Änderunge vun de letzte <strong>$2</strong> Dage.',
+'uclinks'               => 'Zeich de letzte <strong>$1</strong> Beidräch, Zeich de letzte <strong>$2</strong> Dage.',
+'uctop'                 => ' (Neuste)',
+'newbies'               => 'Neu Metmaacher',
+
+'sp-newimages-showfrom' => 'Zeich de neu Belder av däm $1',
+
+'sp-newimages-showfrom' => 'Zeich de neu Belder av däm $1',
+'sp-contributions-newest'=> 'Neuste',
+'sp-contributions-oldest'=> 'Ählste',
+'sp-contributions-newer'=> 'Neuste $1',
+'sp-contributions-older'=> 'Ähler $1',
+'sp-contributions-newbies-sub'=> 'För neu Metmaacher',
+
+# What links here
+#
+'whatlinkshere'         => 'Wat noh hee link',
+'notargettitle'         => 'Keine Bezoch op e Ziel',
+'notargettext'          => 'Et fählt ene Metmaacher oder en Sigg, wo mer jet zo erusfinge oder oplisste solle.',
+'linklistsub'           => '(Liss met de Links)',
+'linkshere'             => 'Dat sin de Sigge, die op <strong>„[[:$1]]“</strong> linke dun:',
+'nolinkshere'           => 'Kein Sigg link noh <strong>„[[:$1]]“</strong>.',
+'isredirect'            => 'Ömleitungssigg',
+'istemplate'            => 'weed enjeföch',
+
+# Block/unblock IP
+#
+'blockip'               => 'Block user',
+'blockiptext'   => "Use the form below to block write access
+from a specific IP address or username.
+This should be done only only to prevent vandalism, and in
+accordance with [[{{ns:project}}:Policy|policy]].
+Fill in a specific reason below (for example, citing particular
+pages that were vandalized).",
+'blockip'               => 'Metmaacher sperre',
+'blockiptext'           => 'Hee kanns De bestemmte Metmaacher oder 
+IP-Adresse sperre, su dat se hee em Wiki nit mieh 
+schrieve und Sigge ändere künne. Dat sollt nor jedon wääde om sujenannte 
+Vandaale ze bremse. Un mer müsse uns dobei natörlich aan uns 
+[[{{ns:project}}:Policy|Rejele]] för sun Fäll halde.
+Drag bei „Aanlass“ ene möchlichs jenaue Jrund en, wöröm dat Sperre passeet. Nenn un Link op de Sigge wo Einer kapott jemaat hät, zem Beispill.
+Luur op [[Special:Ipblocklist|de Liss met jesperrte IP_Adresse]] wann de ne Üvverbleck üvver de Sperrunge han wells, un och wann De se ändere wells.',
+'ipaddress'             => 'IP-Adress',
+'ipadressorusername'    => 'IP Adress oder Metmaacher Name',
+'ipbexpiry'             => 'Duur för wie lang',
+'ipbreason'             => 'Aanlass',
+'ipbanononly'           => 'Nor de namelose Metmaacher sperre',
+'ipbcreateaccount'      => 'Neu aanmelde verbeede',
+'ipbenableautoblock'    => 'Dun automatisch de letzte IP-Adress sperre, die dä Metmaacher jehatt hät, un och all die IP-Adresse, vun wo dä versök, jet ze ändere.',
+'ipbsubmit'             => 'Dun dä Metmaacher sperre',
+'ipbother'              => 'En ander Zigg',
+'ipboptions'            => '1 Stund:1 hour,2 Stund:2 hours,3 Stund:3 hours,6 Stund:6 hours,12 Stund:12 
+hours,1 Dach:1 day,3 Däch:3 days,1 Woch:1 week,2 Woche:2 weeks,3 Woche:3 weeks,1 Mond:1 month,3 Mond:3 
+months,6 Mond:6 months,9 Mond:9 months,1 Johr:1 year,2 Johre:2 years,3 Johre:3 years,Unbejrenz:infinite',
+'ipbotheroption'        => 'Söns wie lang',
+'badipaddress'          => 'Wat De do jeschrevve häs, dat es kein öntlije 
+IP-Adress.',
+'blockipsuccesssub'     => 'De IP-Adress es jesperrt',
+'blockipsuccesstext'    => '[[Special:Contributions/$1|$1]] es jetz jesperrt.
+Luur op [[Special:Ipblocklist|de Liss met jesperrte IP_Adresse]] wann de ne Üvverbleck üvver de Sperrunge han wells, 
+un och wann De se ändere wells.',
+'unblockip'             => 'Dä Medmacher widder maache looße',
+'unblockiptext'         => 'Hee kanns De vörher jesperrte IP_Adresse oder Metmaacher widder freijevve, un dänne esu dat Rääch för ze Schrieve hee em Wiki widder jevve.
+Luur op [[Special:Ipblocklist|de Liss met jesperrte IP_Adresse]] wann de ne Üvverbleck üvver de Sperrunge han wells, 
+un och wann De se ändere wells.',
+'ipusubmit'             => 'Dun de Sperr för die Adress widder ophevve',
+'unblocked'             => '[[User:$1|$1]] wood widder zojelooße',
+'ipblocklist'           => 'Liss met jesperrte IP-Adresse un Metmaacher Name',
+#'ipblocklist-summary'  => '',
+'blocklistline'         => '$1, $2 hät „$3“ jesperrt ($4)',
+'infiniteblock'         => 'för iwich',
+'expiringblock'         => 'endt am $1',
+'anononlyblock'         => 'nor anonyme',
+'noautoblockblock' => 'automatisch Sperre avjeschalt',
+'createaccountblock'    => 'Aanmelde nit möchlich',
+'ipblocklistempty'      => 'Et es nix en de Liss met  jesperrte IP-Adresse un Metmaacher Name.',
+'blocklink'             => 'Sperre',
+'unblocklink'           => 'widder freijevve',
+'contribslink'          => 'Beidräch',
+'autoblocker'           => 'Automatich jesperrt. Ding IP_Adress wood vör kootem vun däm Metmaacher „[[User:$1|$1]]“ jebruch. Dä es jesperrt woode wäje: „<i>$2</i>“',
+'blocklogpage'          => 'Logboch met Metmaacher-Sperre',
+'blocklogentry'         => '„[[$1]]“ jesperrt, för $2',
+'blocklogtext'          => 'Hee es dat Logboch för et Metmaacher Sperre un Freijevve. Automatich jesperrte 
+IP-Adresse sin nit hee, ävver em 
+[[Special:Ipblocklist|Logboch met jesperrte IP-Adresse]] ze finge.',
+'unblocklogentry'       => 'Metmaacher „[[User:$1|$1]]“ freijejovve',
+'range_block_disabled'  => 'Adresse Jebeede ze sperre, es nit erlaub.',
+'ipb_expiry_invalid'    => 'De Duur es Dress. Jevv se richtich aan.',
+'ipb_already_blocked'   => '„$1“ es ald jesperrt',
+'ip_range_invalid'      => 'Dä Bereich vun IP_Adresse es nit en Oodnung.',
+'proxyblocker'          => 'Proxy_Blocker',
+'ipb_cant_unblock'      => 'Ene Fähler: De Sperr Nummer $1 es nit ze finge. Se künnt ald widder freijejovve woode sin.',
+'proxyblockreason'      => 'Unger Ding IP_Adress 
+läuf ene offe Proxy. Dröm kanns De hee em Wiki nix maache. Schwaad met Dingem System-Minsch oder Netzwerk-Techniker (ISP Internet Service Provider) un 
+verzäll dänne vun däm Risiko för ehr Secherheit!',
+'proxyblocksuccess'     => 'Fäädich',
+'sorbs'                 => 'SORBS DNSbl',
+'sorbsreason'           => 'Ding IP-Adress weed en de 
+[http://www.sorbs.net SORBS] DNSbl als ene offe 
+Proxy jeliss. Schwaad met Dingem System-Minsch oder Netzwerk-Techniker 
+(ISP Internet Service Provider) drüvver, un verzäll dänne vun däm Risiko för ehr Secherheit!',
+'sorbs_create_account_reason'=> 'Ding IP-Adress weed en 
+[http://www.sorbs.net SORBS] DNSbl als ene offe 
+Proxy jeliss. Dröm kanns De Dich hee em Wiki nit als ene neue Metmaacher aanmelde. Schwaad met Dingem System-Minsch oder Netzwerk-Techniker oder (ISP Internet Service Provider) drüvver, un verzäll dänne vun däm Risiko för ehr Secherheit!',
+
+# Developer tools
+#
+'lockdb'                => 'Daatebank sperre',
+'unlockdb'              => 'Daatebank freijevve',
+'lockdbtext'            => 'Nohm Sperre kann keiner mieh Änderunge maache an sing Oppassliss, aan Enstellunge, Atikelle, uew. un neu Metmaacher jitt et och nit. Bes de secher, datte dat wells?',
+'unlockdbtext'          => 'Nohm Freijevve es de Daatebank nit mieh jesperrt, un all de normale Änderunge wääde widder möchlich. Bes de secher, datte dat wells?',
+'lockconfirm'           => 'Jo, ich well de Daatebank jesperrt han.',
+'unlockconfirm'         => 'Jo, ich well de Daatebank freijevve.',
+'lockbtn'               => 'Daatebank sperre',
+'unlockbtn'             => 'Daatebank freijevve',
+'locknoconfirm'         => 'Do häs kei Hökche en däm Feld zem Bestätije jemaht.',
+'lockdbsuccesssub'      => 'De Daatebank es jetz jesperrt',
+'unlockdbsuccesssub'    => 'De Daatebank es jetz freijejovve',
+'lockdbsuccesstext'     => 'De Daatebank vun de {{SITENAME}} jetz jesperrt.<br /> Dun se widder freijevve, wann Ding Waadung durch es.',
+'unlockdbsuccesstext'   => 'De Daatebank es jetz freijejovve.',
+'lockfilenotwritable'   => 'De Datei, wo de Daatebank met jesperrt wääde wööd, künne mer nit aanläje, oder nit dren schrieve. Esu ene Dress! Dat mööt dä Websörver ävver künne! Verzäll dat enem Verantwortliche för de Installation vun däm Sörver oder repareer et selvs, wann De et kanns.',
+'databasenotlocked'     => '<strong>Opjepass:</strong> De Daatebank es <strong>nit</strong> jesperrt.',
+
+# Rights log
+'rightslog'             => 'Logboch för Änderunge aan Metmaacher-Räächde',
+'rightslogtext'         => 'Hee sin de Änderunge an Metmaacher ehre Räächde opjeliss. Op de Sigge üvver 
+Metmaacher, Wiki_Köbese, 
+Bürrokrade, Stewards, â€¦ kanns De nohlese, wat domet es.',
+'rightslogentry'        => 'hät däm Metmaacher „$1“ sing Räächde vun „$2“ op „$3“ ömjestallt',
+'rightsnone'            => '(nix)',
+
+# Move page
+#
+'movepage'              => 'Sigg Ömnenne',
+'movepagetext'          => 'Hee kanns De en Sigg en de {{SITENAME}} ömnenne. Domet kritt die Sigg ene neue Name, un 
+all vörherije Versione vun dä Sigg och. Unger däm ahle Name weed automatisch en 
+Ömleitung op dä neue Name enjedrage. Links op dä 
+ahle Name blieve ävver wie se wore. Dat heiß, Do muss selver nohluure, ov do jetz 
+[[Special:Doubleredireects|dubbelde]] oder [[Special:Doubleredireects|kapodde]] Ömleitunge bei eruskumme. 
+Wann De en Sigg ömnenne deis, häs Do och doför ze sorje, dat de betroffene Links do henjonn, wo se hen jonn solle. 
+Alsu holl Der de Liss „Wat noh hee link“ un jangk se durch!
+De Sigg weed <strong>nit</strong> ömjenannt, wann et met däm neue Name ald en Sigg jitt, <strong>usser</strong> do 
+es nix drop, oder et es en Ömleitung un se es noch nie jeändert woode. Esu ka\'mer en Sigg jlich widder zeröck 
+ömnenne, wa\'mer sich mem Ömnenne verdonn hät, un mer kann och kein Sigge kapottmaache, wo ald jet drop steiht.
+<strong>Oppjepass!</strong> Wat beim Ömnenne erus kütt, künnt en opfällije un villeich stürende Änderung am Wiki 
+sin, besonders bei off jebruchte Sigge. Alsu bes secher, datte versteihs, watte hee am maache bes, ih dattet mähs!',
+'movepagetalktext'      => 'Dä Sigg ehr Klaafsigg, wann se ein hät, weed automatisch met  ömjenannt, 
+
+\'\'\'usser\'\'\' wann:
+* de Sigg en en ander Appachtemeng kütt,
+* en Klaafsigg met däm neue Name ald do es, un et steiht och jet drop,
+* De unge en däm Kääsje \'\'\'kei\'\'\' Hökche aan häs.
+
+En dänne Fäll, muss De Der dä Enhald vun dä Klaafsigge selvs vörnemme, un eröm kopeere
+watte bruchs.',
+'movearticle'           => 'Sigg Ömnenne',
+'movenologin'           => 'Nit Enjelogg',
+'movenologintext'       => 'Do mööts ald aanjemeldt un [[Special:Userlogin|enjelogg]] sin, öm en Sigg ömzenenne.',
+'newtitle'              => 'op dä neue Name',
+'movepagebtn'           => 'Ömnenne',
+'pagemovedsub'          => 'Dat Ömnenne hät jeflupp',
+'pagemovedtext'         => 'De Sigg „[[$1]]“ es jetz ömjenannt en „[[$2]]“.',
+'articleexists'         => 'De Sigg met däm Name jitt et ald, oder dä Name ka\'mer oder darf mer nit bruche.<br />Do muss Der ene andere Name ussöke.',
+'talkexists'            => '<strong>Opjepass:</strong> De Sigg selver woodt jetz ömjenannt, ävver dä ehr Klaafsigg kunnte mer nit met ömnenne. Et jitt ald ein met däm neue Name. Bes esu jod un dun die zwei vun Hand zosamme läje!',
+'movedto'               => 'ömjenannt en',
+'movetalk'              => 'dä ehr Klaafsigg met ömnenne',
+'talkpagemoved'         => 'De Klaafsigg dozo wood met ömjenannt.',
+'talkpagenotmoved'      => 'De Klaafsigg dozo wood <strong>nit</strong> ömjenannt.',
+'1movedto2'             => 'hät de Sigg vun „[[$1]]“ en „[[$2]]“ ömjenannt.',
+'1movedto2_redir'       => 'hät de Sigg vun „[[$1]]“ en „[[$2]]“ ömjenannt un doför de ahl Ömleitungs-Sigg fottjeschmesse.',
+'movelogpage'           => 'Logboch met de ömjenannte Sigge',
+'movelogpagetext'       => 'Hee sin de Neuste ömjenannte Sigge opjeliss, un wä et jedon hät.',
+'movereason'            => 'Aanlass',
+'revertmove'            => 'Et Ömnenne zeröcknemme',
+'delete_and_move'       => 'Fottschmieße un Ömnenne',
+'delete_and_move_text'  => '== Dä! Dubbelte Name ==
+Dä Atikkel „[[$1]]“ jitt et ald. Wollts De en fottschmieße, öm hee dä Atikkel ömnenne ze künne?',
+'delete_and_move_confirm'=> 'Jo, dun dä Atikkel fottschmieße.',
+'delete_and_move_reason'=> 'Fottjeschmesse, öm Platz för et Ömnenne ze maache',
+'selfmove'              => 'Du Doof! - dä ahle Name un dä neue Name es däselve - do hät et Ömnenne winnich Senn.',
+'immobile_namespace'    => 'Do künne mer Sigge nit hen ömnenne, dat Appachtemeng es speziell, un dä neue Name för de Sigg jeiht deswäje nit.',
+
+# Export
+
+'export'                => 'Sigge Exporteere',
+'exporttext'            => 'Hee exportees De dä Tex un de Eijeschaffte vun ener Sigg, oder vun enem Knubbel Sigge, de aktuelle Version, met oder ohne ehr ählere Versione.
+Dat Janze es enjepack en XML.
+Dat ka\'mer en en ander Wiki
+- wann et och met dä MediaWiki-Soffwär läuf -
+üvver de Sigg „[[Special:Import|Import]]“ do widder importeere.
+
+* Schriev de Titele vun dä Sigge en dat Feld för Tex enzejevve, unge, eine Titel en jede Reih.
+* Dann dun onoch ussöke, ov De all de vörherije Versione vun dä Sigge han wells, oder nor de aktuelle met dä 
+Informatione vun de letzte Änderung. (En däm Fall künns De, för en einzelne Sigg, och ene tirekte Link bruche, 
+zom Beispill „[[{{ns:Special}}:Export/{{int:mainpage}}]]“ för de Sigg „[[{{int:mainpage}}]]“ ze exporteere)
+
+Denk dran, datte dat Zeuch em Unicode Format avspeichere muss,
+wann De jet domet aanfange künne wells.',
+'exportcuronly'         => 'Bloß de aktuelle Version usjevve (un <strong>nit</strong> de janze ahle Versione onoch met dobei dun)',
+'exportnohistory'       => '----
+<strong>Opjepass:</strong> de janze Versione Exporteere es hee em Wiki avjeschalt. Schad, ävver et wör en 
+zo jroße Lass för dä Sörver.',
+'export-submit'         => 'Loss_Jonn!',
+
+# Namespace 8 related
+
+'allmessages'           => 'All Tex, Baustein un Aanzeije vum Wiki-System',
+'allmessagesname'       => 'Name',
+'allmessagesdefault'    => 'Dä standaadmäßije Tex',
+'allmessagescurrent'    => 'Esu es dä Tex jetz',
+'allmessagestext'       => 'Hee kütt en Liss met Texte, Texstöck, un Nachrichte em Appachtemeng „MediaWiki:“',
+'allmessagesnotsupportedUI'=> 'Mer künne „Special:Allmessages“ nit met dä Interface Sproch <strong>$1</strong> zosamme, die De jrad enjestallt häs. Sök Der en ander Sproch us, wo et met jonn künnt!',
+'allmessagesnotsupportedDB'=> '<strong>Dat wor nix!</strong> Mer künne „Special:Allmessages“ nit zeije, <code>wgUseDatabaseMessages</code> es usjeschalt!',
+'allmessagesfilter'     => 'Fingk dat Stöck hee em Name:',
+'allmessagesmodified'   => 'Dun nor de Veränderte aanzeije',
+
+# Thumbnails
+
+'thumbnail-more'        => 'Jrößer aanzeije',
+'missingimage'          => '<b>Dat Beld es nit do:</b><br />„$1“',
+'filemissing'           => 'Datei es nit do',
+'thumbnail_error'       => 'Ene Fähler es opjetauch beim Maache vun enem Breefmarke/Thumbnail-Beldche: „$1“',
+
+# Special:Import
+'import'                => 'Sigge Emporteere',
+'importinterwiki'       => 'Trans Wiki Emport',
+'import-interwiki-text' => 'Wähl en Wiki un en Sigg zem Emporteere us. Et Datum vun de Versione un de 
+Metmaacher Name vun de Schriever wääde dobei metjenomme. All de Trans Wiki Emporte wääde em 
+[[{{ns:special}}:Log/import|Emport_Logboch]] fassjehallde.',
+'import-interwiki-history'=> 'All de Versione vun dä Sigg hee kopeere',
+'import-interwiki-submit'=> 'Huhlade!',
+'import-interwiki-namespace'=> 'Dun de Sigge emporteere em Appachtemeng:',
+'importtext'            => 'Dun de Daate met däm „[[Special:Export|Export]]“ vun do vun enem Wiki Exporteere, dobei dun et - etwa bei Dir om Rechner - avspeichere, un dann hee huhlade.',
+'importstart'           => 'Ben Sigge am emporteere â€¦',
+'import-revision-count' => '({{PLURAL:$1|ein Version|$1 Versione|kein Version}})',
+'importnopages'         => 'Kein Sigg för ze Emporteere jefunge.',
+'importfailed'          => 'Dat Importeere es donevve jejange: $1',
+'importunknownsource'   => 'Die Zoot Quell för et Emporteere kenne mer nit',
+'importcantopen'        => 'Kunnt op de Datei för dä Emport nit zojriefe',
+'importbadinterwiki'    => 'Verkihrte Interwiki Link',
+'importnotext'          => 'En dä Datei wor nix dren enthallde, oder winnichstens keine Tex',
+'importsuccess'         => 'Dat Emporteere hät jeflupp!',
+'importhistoryconflict' => 'Mer han zwei ahle Versione jefunge, die dun sich bieße - die ein wor ald do - de ander en dä Emport Datei. möchlich, Ehr hatt die Daate ald ens emporteet.',
+'importnosources'       => 'Hee sin kein Quell för dä Trans Wiki Emport enjerich. Dat ahle Versione Huhlade es avjeschalt  un nit möchlich.',
+'importnofile'          => 'Et wood kein Datei huhjelade för ze Emporteere.',
+'importuploaderror'     => 'Dat Huhlade es donevve jejange. möchlich, dat de Datei ze jroß wor, jrößer wie mer huhlade darf.',
+
+# import log
+'importlogpage'         => 'Logboch met emporteerte Sigge',
+'importlogpagetext'     => 'Sigge met ehre Versione vun ander Wikis emporteere.',
+'import-logentry-upload'=> '„[[$1]]“ emporteet',
+'import-logentry-upload-detail'=> '{{PLURAL:$1|ein Version|$1 Versione|kein Version}} emporteet',
+'import-logentry-interwiki'=> 'trans_wiki_emporteet: „$1“',
+'import-logentry-interwiki-detail'=> '{{PLURAL:$1|ein Version|$1 Versione|kein Version}} vun „$2“',
+
+# Keyboard access keys for power users
+'accesskey-search'      => 'f',
+'accesskey-minoredit'   => 'm',
+'accesskey-save'        => 's',
+'accesskey-preview'     => 'p',
+'accesskey-diff'        => 'd',
+'accesskey-compareselectedversions'=> 'v',
+'accesskey-watch'       => 'w',
+
+# tooltip help for some actions, most are in Monobook.js
+'tooltip-search'        => 'En de {{SITENAME}} söke [alt-f]',
+'tooltip-minoredit'     => 'Deit Ding Änderunge als klein Mini-Änderunge markeere. [alt-m]',
+'tooltip-save'          => 'Deit Ding Änderunge avspeichere. [alt-s]',
+'tooltip-preview'       => 'Liss de Vör-Aansich vun dä Sigg un vun Dinge Änderunge ih datte en Avspeichere deis! [alt-p]',
+'tooltip-diff'          => 'Zeich Ding Änderunge am Tex aan. [alt-d]',
+'tooltip-compareselectedversions'=> 'Dun de Ungerscheed zwesche dä beids usjewählde Versione zeije. [alt-v]',
+'tooltip-watch'         => 'Op die Sigg hee oppasse. [alt-w]',
+
+# stylesheets
+'common.css'            => '/** CSS hee aan dä Stell hät Uswirkunge op alle Skins */',
+'monobook.css'          => '/** CSS hee aan dä Stell hät Uswirkunge op alle Monobook Skins vun de janze Site */',
+ 
+# Metadata
+'nodublincore'          => 'De RDF_Meta_Daate vun de „Dublin Core“ Aat sin avjeschalt.',
+'nocreativecommons'     => 'De RDF_Meta_Daate vun de „Creative Commons“ Aat sin avjeschalt.',
+'notacceptable'         => '<strong>Blöd:</strong> Dä Wiki_Sörver kann de Daate nit en einem Format erüvverjevve, 
+wat Dinge Client oder Brauser verstonn künnt.',
+
+# Attribution
+
+'anonymous'             => 'Namelose Metmaacher vun de {{SITENAME}}',
+'siteuser'              => '{{SITENAME}}-Metmaacher $1',
+'lastmodifiedby'        => 'Hee die Sigg wood et letz jeändert vun $2 om $1',
+'and'                   => 'un',
+'othercontribs'         => 'Baut op de Arbeid vun „<strong>$1</strong>“ op.',
+'others'                => 'andere',
+'siteusers'             => '{{SITENAME}}-Metmaacher $1',
+'creditspage'           => 'Üvver de Metmaacher un ehre Beidräch för die Sigg',
+'nocredits'             => 'För die Sigg ha\'mer nix en de Liss.',
+
+# Spam protection
+
+'spamprotectiontitle'   => 'SPAM_Schotz',
+'spamprotectiontext'    => 'De Sigg, die de avspeichere wells, die weed vun unsem SPAM_Schotz nit durchjelooße. Dat kütt miehts vun enem Link op en fremde Sigg.',
+'spamprotectionmatch'   => 'Hee dä Tex hät dä SPAM_Schotz op de Plan jerofe: „<code>$1</code>“',
+'subcategorycount'      => 'Hee {{PLURAL:$1|weed ein Ungerjrupp|wääde $1 Ungerjruppe}} jezeich <small>  (Et künnt mieh op de vörije un nächste Sigge jevve)</small>',
+'categoryarticlecount'  => 'Hee {{PLURAL:$1|weed eine Atikkel|wääde $1 Atikkele}} jezeich <small>  (Et künnt mieh op de vörije un nächste Sigge jevve)</small>',
+'category-media-count' => "There {{PLURAL:$1|is one file|are $1 files}} in this category.",
+'listingcontinuesabbrev'=> ' wigger',
+'spambot_username'      => 'SPAM fottschmieße',
+'spam_reverting'        => 'De letzte Version es ohne de Links op  „$1“ widder zerröckjehollt.',
+'spam_blanking'         => 'All die Versione hatte Links op „$1“, die sin jetz erus jemaht.',
+
+# Info page
+'infosubtitle'          => 'Üvver de Sigg',
+'numedits'              => 'Aanzahl Änderunge aan däm Atikkel: <strong>$1</strong>',
+'numtalkedits'          => 'Aanzahl Änderunge aan de Klaafsigg: <strong>$1</strong>',
+'numwatchers'           => 'Aanzahl Oppasser: <strong>$1</strong>',
+'numauthors'            => 'Aanzahl Metmaacher, die aan däm Atikkel jeschrevve han: <strong>$1</strong>',
+'numtalkauthors'        => 'Aanzahl Metmaacher beim Klaaf: <strong>$1</strong>',
+
+# Math options
+'mw_math_png'           => 'Immer nor PNG aanzeije',
+'mw_math_simple'        => 'En einfache Fäll maach HTML, söns PNG',
+'mw_math_html'          => 'Maach HTML wann möchlich, un söns PNG',
+'mw_math_source'        => 'Luur et als TeX (jod för de Tex-Brausere)',
+'mw_math_modern'        => 'De bess Enstellung för de Brauser vun hück',
+'mw_math_mathml'        => 'Nemm „MathML“ wann möchlich (em Probierstadium)',
+
+# Patrolling
+'markaspatrolleddiff'   => 'Nohjeluurt. Dun dat fasshallde',
+'markaspatrolledlink'   => "[$1]",
+'markaspatrolledtext'   => 'De Änderung es nohjeluert, dun dat fasshallde',
+'markedaspatrolled'     => 'Et Kennzeiche „Nohjeluurt“ speichere',
+'markedaspatrolledtext' => 'Et es jetz fassjehallde, datte usjewählte Änderunge nohjeluurt woode sin.',
+'rcpatroldisabled'      => 'Et Nohluure vun de letzte Änderunge es avjeschalt',
+'rcpatroldisabledtext'  => 'Et Nohluure fun de letzte Änderunge es em Momang nit möchlich.',
+'markedaspatrollederror'=> 'Kann dat Kennzeiche „Nohjeluurt“ nit avspeichere.',
+'markedaspatrollederrortext'=> 'Do muss en bestemmte Version ussöke.',
+
+# Monobook.js: tooltips and access keys for monobook
+'monobook.js' => '',
+
+# Common.js: contains nothing but a placeholder comment
+'common.js' => '/* Any JavaScript here will be loaded for all users on every page load. */',
+
+# image deletion
+'deletedrevision'       => 'De ahl Version „$1“ es fottjeschmesse.',
+
+# browsing diffs
+'previousdiff'          => '? De Ungerscheede dovör zeije',
+'nextdiff'              => 'De Ungerscheede donoh zeije ?',
+
+'imagemaxsize'          => 'Belder op de Sigge, wo se beschrevve wääde, nit jrößer maache wie:',
+'thumbsize'             => 'Esu breid solle de klein Beldche (Thumbnails/Breefmarke) sin:',
+'showbigimage'          => 'Dun de Version met de hüchste Oplösung eravlade, dat es <strong>$1</strong> x <strong>$2</strong> Pixele, un die es <strong>$3</strong> Kilobyte jroß.',
+
+'newimages'             => 'Belder, Tön, uew. als Jalerie',
+#'newimages-summary' => '',
+'showhidebots'          => '(Bots $1)',
+'noimages'              => 'Kein Dateie jefunge.',
+
+# short names for language variants used for language conversion links.
+# to disable showing a particular link, set it to 'disable', e.g.
+# 'variantname-zh-sg' => 'disable',
+'variantname-zh-cn' => 'cn',
+'variantname-zh-tw' => 'tw',
+'variantname-zh-hk' => 'hk',
+'variantname-zh-sg' => 'sg',
+'variantname-zh' => 'zh',
+# variants for Serbian language
+'variantname-sr-ec' => 'sr-ec',
+'variantname-sr-el' => 'sr-el',
+'variantname-sr-jc' => 'sr-jc',
+'variantname-sr-jl' => 'sr-jl',
+'variantname-sr' => 'sr',
+# variants for Kazakh language
+'variantname-kk-tr' => 'kk-tr',
+'variantname-kk-kz' => 'kk-kz',
+'variantname-kk-cn' => 'kk-cn',
+'variantname-kk' => 'kk',
+
+# labels for User: and Title: on Special:Log pages
+'specialloguserlabel'   => 'Metmaacher:',
+'speciallogtitlelabel'  => ' Siggename:',
+
+'passwordtooshort'      => 'Dat Passwood es jet koot - et mööte ald winnichstens <strong>$1</strong> Zeiche, Zeffere, un Buchstave dodren sin.',
+
+# Media Warning
+'mediawarning'          => '<strong>Opjepass</strong>: En dä Datei künnt en <b>jefährlich Projrammstöck</b> dren stecke. Wa\'mer et laufe looße dät, do künnt dä Sörver met för de Cracker opjemaht wääde. <hr />',
+'fileinfo'              => '<strong>$1</strong> Kilobyte, MIME-Typ: <code>$2</code>',
+
+# Metadata
+'metadata'              => 'Metadaate',
+'metadata-help'         => 'En dä Datei stich noh mieh an Daate dren. Dat sin Metadaate, die normal vum Opnahmejerät 
+kumme. Wat en Kamera, ne Scanner, un esu, do fassjehallde han, dat kann ävver späder met enem Projramm 
+bearbeidt un usjetuusch woode sin.',
+'metadata-expand'       => 'Mieh zeije',
+'metadata-collapse'     => 'Daate Versteche',
+'metadata-fields'       => 'EXIF metadata fields listed in this message will
+be included on image page display when the metadata table
+is collapsed. Others will be hidden by default.
+* make
+* model
+* datetimeoriginal
+* exposuretime
+* fnumber
+* focallength',
+ 
+# external editor support
+'edit-externally'       => 'Dun de Datei met enem externe Projramm bei Dr om Rechner bearbeide',
+'edit-externally-help'  => 'Luur op [http://meta.wikimedia.org/wiki/Help:External_editors Installationsanweisungen] noh Hinwies, wie mer esu en extern Projramm opsetz un installeere deit.',
+
+# 'all' in various places, this might be different for inflected languages
+'recentchangesall'      => 'all',
+'imagelistall'          => 'all',
+'watchlistall1'         => 'all',
+'watchlistall2'         => 'Alles',
+'namespacesall'         => 'all',
+
+# E-mail address confirmation
+'confirmemail'          => 'E-Mail Adress bestätije',
+'confirmemail_noemail'  => 'En [[Special:Preferences||Ding Enstellunge]] es kein öntlich E-Mail Adress.',
+'confirmemail_text'     => 'Ih datte en däm Wiki hee de E-Mail bruche kanns, muss De Ding E-Mail Adress bestätich 
+han, dat se en Oodnung es un dat se och Ding eijene es. Klick op dä Knopp un Do kriss en E-Mail jescheck. Do 
+steiht ene Link met enem Code dren. Wann De met Dingem Brauser op dä Link jeihs, dann deis De domet 
+bestätije, dat et wirklich Ding E-Mail Adress es. Dat es nit allzo secher, alsu wör nix för Die 
+Bankkonto oder bei de Sparkass, ävver et sorg doför, dat nit jede Peijaß met Dinger E-Mail oder Dingem 
+Metmaachername eröm maache kann.',
+'confirmemail_send'     => 'Scheck en E-Mail zem Bestätije',
+'confirmemail_sent'     => 'En E-Mail zem Bestätije es ungerwähs.',
+'confirmemail_sendfailed'=> 'Beim E-Mail Adress Bestätije es jet donevve jejange, dä Sörver hatt e Problem met 
+sing Konfijuration, oder en Dinger E-Mail Adress es e Zeiche verkihrt, oder esu jet.',
+
+'confirmemail_invalid'  => 'Beim E-Mail Adress Bestätije es jet donevve jejange, dä Code es verkihrt, künnt 
+avjelaufe jewäse sin.',
+'confirmemail_needlogin'=> 'Do muss Dich $1, för de E-Mail Adress ze bestätije.',
+'confirmemail_success'  => 'Ding E-Mail Adress es jetz bestätich. Jetz künns De och noch 
+
+[[Special:Userlogin|enlogge]]. Vill Spass!',
+'confirmemail_loggedin' => 'Ding E-Mail Adress es jetz bestätich!',
+'confirmemail_error'    => 'Beim E-Mail Adress Bestätije es jet donevve jejange, de Bestätijung kunnt nit 
+avjespeichert wääde.',
+'confirmemail_subject'  => 'Dun Ding E-Mail Adress bestätije för de {{SITENAME}}.',
+'confirmemail_body'     => 'Jod möchlich, Do wors et selver,
+vun de IP_Adress $1,
+hät sich jedenfalls einer aanjemeldt,
+un well dä Metmaacher „$2“ op de {{SITENAME}}
+wääde, un hät en E-Mail Adress aanjejovve.
+Öm jetz klor ze krije, dat die E-Mail
+Adress un dä neue Metmaacher och beienander
+jehüre, muss dä Neue en singem Brauser
+dä Link:
+
+$3
+
+opmaache. Noch för em $4. 
+Alsu dun dat, wann de et selver bes.
+
+Wann nit Do, sondern söns wer Ding E-Mail
+Adress aanjejovve hät, do bruchs de jar nix
+ze dun. De E-Mail Adress kann nit jebruch
+wääde, ih dat se nit bestätich es.
+
+Wann de jetz neujeerich jewoode bes un wells
+wesse, wat met de {{SITENAME}} loss es,
+do  jang met Dingem Brauser noh:
+{{FULLURL:{{MediaWiki:Mainpage}}}}
+un luur Der et aan.
+
+Ene schöne Jroß vun de {{SITENAME}}.
+
+-- 
+{{SITENAME}}: {{fullurl:{{Mediawiki:mainpage}}}}',
+
+# Inputbox extension, may be useful in other contexts as well
+'tryexact'              => 'Versök en akkurate Üvvereinstimmung:',
+'searchfulltext'        => 'Sök durch dä janze Tex',
+'createarticle'         => 'Atikkel enrichte',
+
+# Scary transclusion
+'scarytranscludedisabled'=> '[Et Enbinge per Interwiki es avjeschalt]',
+'scarytranscludefailed' => '[De Schablon „$1“ enzebinge hät nit jeflupp]',
+'scarytranscludetoolong'=> '[Schad, de URL es ze lang]',
+
+# Trackbacks
+'trackbackbox'          => '<div id="mw_trackbacks">
+Trackbacks för dä Atikkel hee:<br />
+„<strong>$1</strong>“
+</div>',
+'trackback' => '; $4$5 : [$2 $1]',
+'trackbackexcerpt' => '; $4$5 : [$2 $1]: <nowiki>$3',
+'trackbackremove'       => ' ([$1 Fottschmieße])',
+'trackbacklink'         => 'Trackback',
+'trackbackdeleteok'     => 'Trackback es fottjeschmesse.',
+
+
+# delete conflict
+'deletedwhileediting'   => '<strong>Opjepass:</strong> De Sigg wood fottjeschmesse, nohdäm Do ald aanjefange häs, dran ze Ändere.',
+'confirmrecreate'       => 'Dä Metmaacher [[User:$1|$1]] (?[[User talk:$1|däm sing Klaafs]]) hät die Sigg 
+fottjeschmesse, nohdäm Do do dran et Ändere aanjefange häs. Dä Jrund:
+: „<i>$2</i>“
+Wells Do jetz met en neu Version die Sigg neu aanläje?',
+'recreate'              => 'Zeröckholle',
+'tooltip-recreate'      => 'En fottjeschmesse Sigg widder zeröckholle',
+'unit-pixel'            => 'px',
+
+# HTML dump
+'redirectingto'         => 'Leit öm op „[[$1]]“...',
+
+# action=purge
+'confirm_purge'         => 'Dä Zweschespeicher för die Sigg fottschmieße?
+
+$1',
+'confirm_purge_button'  => 'Jo - loss jonn!',
+'youhavenewmessagesmulti'=> 'Do häs neu Nachrichte op $1',
+'newtalkseperator'      => ',_',
+'searchcontaining'      => 'Sök noh Atikkele, wo „$1“ em Tex vörkütt.',
+'searchnamed'           => 'Sök noh Atikkele, wo „$1“ em Name vörkütt.',
+'articletitles'         => 'Atikkele, die met „$1“ aanfange',
+'hideresults'           => 'Dat Resultat versteche',
+
+# DISPLAYTITLE
+'displaytitle'          => '(Links op die Sigg als [[$1]])',
+
+'loginlanguagelabel'    => 'Sproch: $1',
+
+# Multipage image navigation
+'imgmultipageprev'      => 'â† de Sigg dovör',
+'imgmultipagenext'      => 'de Sigg donoh â†’',
+'imgmultigo'            => 'Loss jonn!',
+'imgmultigotopre'       => 'Jangk op de Sigg',
+#'imgmultigotopost'      => '',
+
+# Table pager
+'ascending_abbrev'      => 'opwääts zoteet',
+'descending_abbrev'     => 'raffkaz zoteet',
+'table_pager_next'      => 'De nächste Sigg',
+'table_pager_prev'      => 'De Sigg dovör',
+'table_pager_first'     => 'De eetste Sigg',
+'table_pager_last'      => 'De letzte Sigg',
+'table_pager_limit'     => 'Zeich $1 pro Sigg',
+'table_pager_limit_submit' => 'Loss jonn!',
+'table_pager_empty'     => 'Nix erus jekumme',
+
+# Auto-summaries
+'autosumm-blank'    => 'Dä janze Enhald vun dä Sigg fottjemaht',
+'autosumm-replace'  => 'De Sigg met „$1“ jetuusch',
+'autosumm-replace'  => 'Replacing page with \'$1\'',
+'autoredircomment'  => 'Leit öm op „[[$1]]“', # This should be changed to the new naming convention, but existed beforehand.
+'autosumm-new'      => 'Neu Sigg: $1',
+'autosumm-shortnew' => 'Neu Sigg: „$1“',
+
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesKu.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesKu.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesKu.php	(revision 1280)
@@ -0,0 +1,740 @@
+<?php
+/** Kurdish (Kurdî / كوردي)
+  *
+  * @addtogroup Language
+  */
+
+$namespaceNames = array(
+	NS_MEDIA            => 'Medya',
+	NS_SPECIAL          => 'Taybet',
+	NS_MAIN             => '',
+	NS_TALK             => 'Nîqaş',
+	NS_USER             => 'Bikarhêner',
+	NS_USER_TALK        => 'Bikarhêner_nîqaş',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK     => '$1_nîqaş',
+	NS_IMAGE            => 'Wêne',
+	NS_IMAGE_TALK       => 'Wêne_nîqaş',
+	NS_MEDIAWIKI        => 'MediaWiki',
+	NS_MEDIAWIKI_TALK   => 'MediaWiki_nîqaş',
+	NS_TEMPLATE         => 'Şablon',
+	NS_TEMPLATE_TALK    => 'Şablon_nîqaş',
+	NS_HELP             => 'Alîkarî',
+	NS_HELP_TALK        => 'Alîkarî_nîqaş',
+	NS_CATEGORY         => 'Kategorî',
+	NS_CATEGORY_TALK    => 'Kategorî_nîqaş'
+);
+
+$messages = array(
+'skinpreview'           => '(Pêşdîtin)',
+'sunday'                => 'yekşem',
+'monday'                => 'duşem',
+'tuesday'               => 'Sêşem',
+'wednesday'             => 'Çarşem',
+'thursday'              => 'Pêncşem',
+'friday'                => 'În',
+'saturday'              => 'şemî',
+'january'               => 'Rêbendan',
+'february'              => 'reşemî',
+'march'                 => 'adar',
+'april'                 => 'avrêl',
+'may_long'              => 'gulan',
+'june'                  => 'pûşper',
+'july'                  => 'Tîrmeh',
+'august'                => 'tebax',
+'september'             => 'rezber',
+'october'               => 'kewçêr',
+'november'              => 'sermawez',
+'december'              => 'Berfanbar',
+'jan'                   => 'rêb',
+'feb'                   => 'reş',
+'mar'                   => 'adr',
+'apr'                   => 'avr',
+'may'                   => 'gul',
+'jun'                   => 'pşr',
+'jul'                   => 'tîr',
+'aug'                   => 'teb',
+'sep'                   => 'rez',
+'oct'                   => 'kew',
+'nov'                   => 'ser',
+'dec'                   => 'ber',
+'categories'            => 'Kategorî',
+'pagecategories'        => '{{PLURAL:$1|Kategorî|Kategorî}}',
+'category_header'       => 'Gotarên di kategoriya "$1" de',
+'subcategories'         => 'Binkategorî',
+'mainpage'              => 'Destpêk',
+'portal'                => 'Portala komê',
+'portal-url'            => 'Project:Portala komê',
+'about'                 => 'Der barê',
+'aboutsite'             => 'Der barê {{SITENAME}}',
+'aboutpage'             => '{{SITENAME}}:Der barê',
+'article'               => 'Gotar',
+'help'                  => 'Alîkarî',
+'helppage'              => 'Help:Alîkarî',
+'bugreports'            => 'Raporên çewtiyan',
+'bugreportspage'        => 'Project:Raporên çewtiyan',
+'sitesupport'           => 'Ji bo Weqfa Wikimedia Beş',
+'faq'                   => 'Pirs û Bersîv (FAQ)',
+'faqpage'               => 'Project:Pirs û Bersîv',
+'edithelp'              => 'Alîkarî ji bo guherandin',
+'edithelppage'          => 'Help:Rûpeleke çawa biguherînim',
+'cancel'                => 'Betal',
+'qbfind'                => 'Bibîne',
+'qbbrowse'              => 'Bigere',
+'qbedit'                => 'Biguherîne',
+'qbpageoptions'         => 'Ev rûpel',
+'qbmyoptions'           => 'Rûpelên min',
+'qbspecialpages'        => 'Rûpelên taybet',
+'moredotdotdot'         => 'Zêde...',
+'mypage'                => 'Rûpela min',
+'mytalk'                => 'Rûpela guftûgo ya min',
+'anontalk'              => 'Guftûgo ji bo vê IPê',
+'navigation'            => 'Navîgasyon',
+'currentevents'         => 'Bûyerên rojane',
+'currentevents-url'     => 'Bûyerên rojane',
+'disclaimers'           => 'Ferexetname',
+'errorpagetitle'        => 'Çewtî (Error)',
+'returnto'              => 'Bizivire $1.',
+'tagline'               => 'Ji {{SITENAME}}',
+'search'                => 'Lêbigere',
+'searchbutton'          => 'Lêbigere',
+'go'                    => 'Gotar',
+'searcharticle'                    => 'Gotar',
+'history'               => 'Dîroka rûpelê',
+'history_short'         => 'Dîrok',
+'info_short'            => 'Zanyarî',
+'printableversion'      => 'Versiyon ji bo çapkirinê',
+'print'                 => 'Çap',
+'edit'                  => 'Biguherîne',
+'editthispage'          => 'Vê rûpelê biguherîne',
+'delete'                => 'Jê bibe',
+'deletethispage'        => 'Vê rûpelê jê bibe',
+'protect'               => 'Biparêze',
+'protectthispage'       => 'Vê rûpelê biparêze',
+'unprotect'             => 'Parastinê rake',
+'unprotectthispage'     => 'Parastina vê rûpelê rake',
+'newpage'               => 'Rûpela nû',
+'talkpage'              => 'Vê rûpelê guftûgo bike',
+'specialpage'           => 'Rûpela taybet',
+'personaltools'         => 'Amûrên şexsî',
+'postcomment'           => 'Şîroveyekê bişîne',
+'articlepage'           => 'Li naveroka rûpelê binêre',
+'talk'                  => 'Guftûgo',
+'views'                 => 'Dîtin',
+'toolbox'               => 'Qutiya amûran',
+'userpage'              => 'Rûpelê vê/vî bikarhênerê/î temaşe bike',
+'viewtalkpage'          => 'Guftûgoyê temaşe bike',
+'otherlanguages'        => 'Zimanên din',
+'redirectedfrom'        => '(Hat ragihandin ji $1)',
+'lastmodifiedat'          => 'Ev rûpel carî dawî di $2, $1 de hat guherandin.',
+'viewcount'             => 'Ev rûpel $1 car hat xwestin.',
+'copyright'             => 'Ji bo naverokê $1 derbas dibe.',
+'protectedpage'         => 'Rûpela parastî',
+'badaccess'             => 'Eror li bi dest Hînan',
+'ok'                    => 'Temam',
+'retrievedfrom'         => 'Ji "$1" hatiye standin.',
+'youhavenewmessages'    => '$1 yên te hene ($2).',
+'newmessageslink'       => 'Nameyên nû',
+'newmessagesdifflink'   => 'Ciyawazî ji revîzyona berê re',
+'editsection'           => 'biguherîne',
+'editold'               => 'biguherîne',
+'toc'                   => 'Tabloya Naverokê',
+'showtoc'               => 'nîşan bide',
+'hidetoc'               => 'veşêre',
+'nstab-main'            => 'Gotar',
+'nstab-user'            => 'Bikarhêner',
+'nstab-media'           => 'Medya',
+'nstab-special'         => 'Taybet',
+'nstab-image'           => 'Wêne',
+'nstab-mediawiki'       => 'Mesaj',
+'nstab-template'        => 'Şablon',
+'nstab-help'            => 'Alîkarî',
+'nstab-category'        => 'Kategorî',
+'nosuchaction'          => 'Çalakiyek bi vê rengê tune',
+'nosuchspecialpage'     => 'Rûpeleke taybet bi vê rengê tune',
+'error'                 => 'Çewtî (Error)',
+'noconnect'             => 'Bibexşîne! Çend pirsgrêkên teknîkî heye, girêdan ji pêşkêşvanê (suxrekirê, server) re niha ne gengaz e. <br />
+$1',
+'enterlockreason'       => 'Hoyek ji bo bestin binav bike, herweha zemaneke mezende kirî ji bo helgirtina bestinê!',
+'filerenameerror'       => 'Navê faylê "$1" nebû "$2".',
+'filenotfound'          => 'Dosya bi navê "$1" nehat dîtin.',
+'badarticleerror'       => 'Ev çalakî di vê rûpelê de nabe.',
+'badtitle'              => 'Sernivîsa nebaş',
+'perfcached'            => 'The following data is cached and may not be completely up to date:',
+'viewsource'            => 'Çavkanî',
+'protectedtext'         => 'Ew rûpel hat qefl kirin û nayê guherandin. Ew jî sedemên xwe heye.
+Binihêre:
+[[Project:Rûpela parastî]].
+
+Hûn dikarin çavkaniya wê rûpelê bibînin û kopî bikin. Heke hûn dixwazin tiştekî zêde bikin, ji kerema xwe di rûpela guftugoyê binivîsin.',
+'logouttitle'           => 'Derketina bikarhêner',
+'logouttext'            => '<strong>Tu niha derketî (logged out).</strong><br />
+Tu dikarî {{SITENAME}} niha weke bikarhênerekî nediyarkirî bikarbînî, yan jî tu dikarî dîsa bi vî navê xwe yan navekî din wek bikarhêner têkevî. Bila di bîra te de be ku gengaz e hin rûpel mîna ku tu hîn bi navê xwe qeyd kiriyî werin nîşandan, heta ku tu nîşanên çavlêgerandina (browser) xwe jênebî.',
+'welcomecreation'       => '<h2>Bi xêr hatî, $1!</h2><p>Hesaba te hat afirandin. Tu dikarî niha tercîhên xwe eyar bikî.',
+'loginpagetitle'        => 'Qeyda bikarhêner (User login)',
+'yourname'              => 'Navê te wek bikarhêner (user name)',
+'yourpassword'          => 'Şîfreya te (password)',
+'yourpasswordagain'     => 'Şîfreya xwe careke din binîvîse',
+'remembermypassword'    => 'Şifreya min di her rûniştdemê de bîne bîra xwe.',
+'loginproblem'          => '<b>Di qeyda te (login) de pirsgirêkek derket.</b><br />Careke din biceribîne!',
+'alreadyloggedin'       => '<strong>Bikarhêner $1, tu jixwe têketî!</strong><br />',
+'login'                 => 'Têkeve (login)',
+'loginprompt'           => '<b>Eger tu xwe nû qeyd bikî, nav û şîfreya xwe hilbijêre.</b> Ji bo xwe qeyd kirinê di {{SITENAME}} de divê ku \'\'cookies\'\' gengaz be.',
+'userlogin'             => 'Têkeve an hesabeke nû çêke',
+'logout'                => 'Derkeve (log out)',
+'userlogout'            => 'Derkeve',
+'notloggedin'           => 'Xwe qeyd nekir (not logged in)',
+'nologin'               => 'Tu hêj ne endamî? $1.',
+'nologinlink'           => 'Bibe endam',
+'createaccount'         => 'Hesabê nû çêke',
+'gotaccount'            => 'Hesabê te heye? $1.',
+'gotaccountlink'        => 'Têkeve (login)',
+'createaccountmail'     => 'bi e-name',
+'badretype'             => 'Herdu şîfreyên ku te nivîsîn hevûdin nagirin.',
+'youremail'             => 'E-maila te*',
+'username'              => 'Navê bikarhêner:',
+'yourrealname'          => 'Navê te yê rastî*',
+'yourlanguage'          => 'Ziman:',
+'yournick'              => 'Leqeba te (ji bo îmza)',
+'loginerror'            => 'Çewtî (Login error)',
+'prefs-help-email'      => '* E-mail (optional): Enables others to contact you through your user or user_talk page without the need of revealing your identity.',
+'nocookieslogin'        => 'Ji bo qeydkirina bikarhêneran {{SITENAME}} "cookies" bi kar tîne. Te fonksiyona "cookies" girt. Ji kerema xwe "cookies" gengaz bike û careke din biceribîne.',
+'noname'                => 'Navê ku te nivîsand derbas nabe.',
+'loginsuccesstitle'     => 'Têketin serkeftî!',
+'loginsuccess'          => 'Tu niha di {{SITENAME}} de qeydkirî yî wek "$1".',
+'nosuchuser'            => 'Bikarhênera/ê bi navê "$1" tune. Navê rast binivîse an bi vê formê <b>hesabeke nû çêke</b>. (Ji bo hevalên nû "Têkeve" çênabe!)',
+'wrongpassword'         => 'Şifreya ku te nivîsand şaş e. Ji kerema xwe careke din biceribîne.',
+'mailmypassword'        => 'Şîfreyeke nû bi e-mail ji min re bişîne',
+'noemail'               => 'Navnîşana bikarhênerê/î "$1" nehat tomar kirine.',
+'passwordsent'          => 'Ji navnîşana e-mail ku ji bo "$1" hat tomarkirin şîfreyekê nû hat şandin. Vê bistîne û dîsa têkeve.',
+'acct_creation_throttle_hit'=> 'Biborîne! Te hesab $1 vekirine. Tu êdî nikarî hesabên din vekî.',
+'bold_sample'           => 'Nivîsa estûr',
+'bold_tip'              => 'Nivîsa estûr',
+'italic_sample'         => 'Nivîsa xwar (îtalîk)',
+'italic_tip'            => 'Nivîsa xwar (îtalîk)',
+'link_sample'           => 'Navê lînkê',
+'link_tip'              => 'Lînka hundir',
+'extlink_sample'        => 'http://www.minak.com navê lînkê',
+'extlink_tip'           => 'Lînka derve (http:// di destpêkê de ji bîr neke)',
+'headline_sample'       => 'Nivîsara sernameyê',
+'headline_tip'          => 'Sername asta 2',
+'nowiki_sample'         => 'Nivîs ku nebe formatkirin',
+'image_sample'          => 'Mînak.jpg',
+'image_tip'             => 'Wêne li hundirê gotarê',
+'media_sample'          => 'Mînak.ogg',
+'sig_tip'               => 'Îmze û demxeya wext ya te',
+'hr_tip'                => 'Rastexêza berwarî (kêm bi kar bîne)',
+'summary'               => 'Kurte û çavkanî (Te çi kir?)',
+'subject'               => 'Mijar/sernivîs',
+'minoredit'             => 'Ev guheraniyekê biçûk e',
+'watchthis'             => 'Vê gotarê bişopîne',
+'savearticle'           => 'Rûpelê tomar bike',
+'preview'               => 'Pêşdîtin',
+'showpreview'           => 'Pêşdîtin',
+'showdiff'              => 'Guherandinê nîşan bide',
+'anoneditwarning'       => 'Tu ne têketî. Navnîşana IP ya te wê di dîroka guherandina vê rûpelê de bê tomar kirin.',
+'blockedtitle'          => 'Bikarhêner hat asteng kirin',
+'blockedtext'           => 'Navê bikarhêner an jî navnîşana IP ya te ji aliyê $1 hat asteng kirin. Sedema vê ev  e:<br />\'\'$2\'\'<br />Tu dikarî bi $1 an yek ji [[Project:Koordînator|koordînatorên din]] re ser vê blokê guftûgo bikî. 
+
+Têbînî: Tu nikarî fonksiyona "Ji vê bikarhêner re E-mail bişîne" bi kar bîne eger te navnîşana email a xwe di "[[Special:Preferences|Tercîhên min]]" de nenivîsand.
+
+Navnîşana te ya IP $3 ye. Ji kerema xwe eger pirsên te hebe vê navnîşanê bibêje.',
+'whitelistedittext'     => 'Ji bo guherandina rûpelan, $1 pêwîst e.',
+'loginreqtitle'         => 'Têketin pêwîst e',
+'loginreqlink'          => 'login',
+'accmailtitle'          => 'Şîfre hat şandin.',
+'accmailtext'           => 'Şîfreya \'$1\' hat şandin ji $2 re.',
+'newarticle'            => '(Nû)',
+'newarticletext'        => '<div style="font-size:small;color:#003333;border-width:1px;border-style:solid;border-color:#aaaaaa;padding:3px">
+Ev rûpel hîn tune. Eger tu bixwazî vê rûpelê çêkî, dest bi nivîsandinê bike û piştre qeyd bike. \'\'\'Wêrek be\'\'\', biceribîne!<br />
+Ji bo alîkarî binêre: [[Help:Alîkarî|Alîkarî]].<br />
+Eger tu bi şaştî hatî, bizivire rûpela berê.
+</div>',
+'anontalkpagetext'      => '----
+\'\'Ev rûpela guftûgo ye ji bo bikarhênerên nediyarkirî ku hîn hesabekî xwe çênekirine an jî bikarnaînin. Ji ber vê yekê divê em wan bi [[IP address|navnîşana IP]] ya hejmarî nîşan bikin. Navnîşaneke IP dikare ji aliyê gelek kesan ve were bikaranîn. Heger tu bikarhênerekî nediyarkirî bî û bawerdikî ku nirxandinên bê peywend di der barê te de hatine kirin ji kerema xwe re [[Special:Userlogin|hesabekî xwe veke an jî têkeve]] da ku tu xwe ji tevlîheviyên bi bikarhênerên din re biparêzî.\'\'',
+'noarticletext'         => 'Ev rûpel niha vala ye, tu dikarî
+[[Special:Search/{{PAGENAME}}|Di nav gotarên din de li "{{PAGENAME}}" bigere]] an
+[{{fullurl:{{FULLPAGENAME}}|action=edit}} vê rûpelê biguherînî].',
+'updated'               => '(Hat taze kirin)',
+'note'                  => '<strong>Not:</strong>',
+'previewnote'           => 'Ji bîr neke ku ev bi tenê çavdêriyek e, ev rûpel hîn nehat qeyd kirin!',
+'editing'               => 'Biguherîne: "$1"',
+'editinguser'               => 'Biguherîne: "$1"',
+'editingsection'        => 'Tê guherandin: $1 (beş)',
+'editingcomment'        => '$1 (şîrove) tê guherandin.',
+'editconflict'          => 'Têkçûna guherandinan: $1',
+'explainconflict'       => 'Ji dema te dest bi guherandinê kir heta niha kesekê/î din ev rûpel guherand.
+
+Jor guhartoya heyî tê dîtîn. Guherandinên te jêr tên nîşan dan. Divê tû wan bikî yek. Heke niha tomar bikî, <b>bi tene</b> nivîsara qutiya jor wê bê tomarkirin. <p>',
+'yourtext'              => 'Nivîsara te',
+'storedversion'         => 'Versiyona qeydkirî',
+'editingold'            => '<strong>HÎŞYAR: Tu ser revîsyoneke kevn a vê rûpelê dixebitî.
+Eger tu qeyd bikî, hemû guhertinên ji vê revîzyonê piştre winda dibin.
+</strong>',
+'yourdiff'              => 'Ciyawazî',
+'copyrightwarning'      => 'Dîqat bike: Hemû tevkariyên {{SITENAME}} di bin $2 de tên belav kirin (ji bo hûragahiyan li $1 binêre). Eger tu nexwazî ku nivîsên te bê dilrehmî bên guherandin û li gora keyfa herkesî bên belavkirin, li vir neweşîne.<br />
+Tu soz didî ku te ev bi xwe nivîsand an jî ji çavkaniyekê azad an geliyane \'\'(public domain)\'\' girt.
+<strong>BERHEMÊN MAFÊN WAN PARASTÎ (©) BÊ DESTÛR NEWEŞÎNE!</strong>',
+'longpagewarning'       => 'HIŞYAR: Drêjahiya vê rûpelê $1 kB (kilobayt) e, ev pir e. Dibe ku çend \'\'browser\'\'
+baş nikarin rûpelên ku ji 32 kB drêjtir in biguherînin. Eger tu vê rûpelê beş beş bikî gelo ne çêtir e?',
+'protectedpagewarning'  => 'ŞIYARÎ:  Ev rûpel hat qefl kirin. Bi tenê bikarhênerên ku xwediyên mafan "sysop" ne dikarin vê rûpelê biguherînin.<br />
+Be sure you are following the
+[[Project:Protected page guidelines|protected page guidelines]].',
+'revhistory'            => 'Dîroka revîzyonan',
+'nohistory'             => 'Ew rûpel dîroka guherandinê tune.',
+'revnotfound'           => 'Revîzyon nehat dîtin',
+'currentrev'            => 'Revîzyona niha',
+'revisionasof'          => 'Revîzyon a $1',
+'previousrevision'      => '←Rêvîzyona kevintir',
+'nextrevision'          => 'Revîzyona nûtir→',
+'currentrevisionlink'   => 'Revîzyona niha nîşan bide',
+'cur'                   => 'ferq',
+'next'                  => 'pêş',
+'last'                  => 'berê',
+'orig'                  => 'orîj',
+'histlegend'            => 'Legend: (ferq) = cudayî nav vê û versiyon a niha,
+(berê) = cudayî nav vê û yê berê vê, B = guhêrka biçûk',
+'histfirst'             => 'Kevintirîn',
+'histlast'              => 'Nûtirîn',
+'rev-delundel'          => 'nîşan bide/veşêre',
+'difference'            => '(Ciyawaziya nav revîzyonan)',
+'lineno'                => 'Dêrra $1:',
+'compareselectedversions'=> 'Guhartoyan Helsengêne',
+'searchresults'         => 'Encamên lêgerînê',
+'searchresulttext'      => 'Ji bo zêdetir agahî der barê lêgerînê di {{SITENAME}} de, binêre [[Project:Searching|Searching {{SITENAME}}]].',
+'searchsubtitle'           => 'Ji bo query "[[:$1]]"',
+'searchsubtitleinvalid'           => 'Ji bo query "$1"',
+'titlematches'          => 'Dîtinên di sernivîsên gotaran de',
+'notitlematches'        => 'Di nav sernivîsan de nehat dîtin.',
+'textmatches'           => 'Dîtinên di nivîsara rûpelan de',
+'notextmatches'         => 'Di nivîsarê de nehat dîtin.',
+'prevn'                 => '$1 paş',
+'nextn'                 => '$1 pêş',
+'viewprevnext'          => '($1) ($2) ($3).',
+'showingresults'        => '<b>$1</b> encam, bi #<b>$2</b> dest pê dike.',
+'showingresultsnum'     => '<b>$3</b> encam, bi #<b>$2</b> dest pê dike.',
+'powersearch'           => 'Lêbigere',
+'powersearchtext'       => 'Lêgerîn di nav cihên navan de:<br />
+$1<br />
+$2 Ragihandinan nîşan bide   Lêbigere: $3 $9',
+'searchdisabled'        => '<p>Tu dikarî li {{SITENAME}} bi Google an Yahoo! bigere. Têbînî: Dibe ku encamen lêgerîne ne yên herî nû ne.
+</p>',
+'blanknamespace'        => '(Serekî)',
+'preferences'           => 'Tercîhên min',
+'prefsnologin'          => 'Xwe qeyd nekir',
+'changepassword'        => 'Şîfre biguherîne',
+'skin'                  => 'Pêste',
+'datetime'              => 'Dem û rêkewt',
+'prefs-personal'        => 'Agahiyên bikarhênerê/î',
+'prefs-rc'              => 'Guherandinên dawî',
+'prefs-misc'            => 'Eyaren cuda',
+'saveprefs'             => 'Tercîhan qeyd bike',
+'oldpassword'           => 'Şîfreya kevn',
+'newpassword'           => 'Şîfreya nû',
+'retypenew'             => 'Şîfreya nû careke din binîvîse',
+'rows'                  => 'Rêz',
+'columns'               => 'stûn',
+'searchresultshead'     => 'Eyarên encamên lêgerinê',
+'savedprefs'            => 'Tercîhên te qeyd kirî ne.',
+'default'               => 'asayî',
+'files'                 => 'Dosya',
+'changes'               => 'guherandin',
+'recentchanges'         => 'Guherandinên dawî',
+'recentchangestext'     => '<!-- please translate: -->Track the most recent changes to the wiki on this page.',
+'rcnote'                => 'Jêr <strong>$1</strong> guherandinên dawî di <strong>$2</strong> rojên dawî de, ji $3 şûnde tên nîşan dan.',
+'rclistfrom'            => 'an jî guherandinên ji $1 şûnda nîşan bide.',
+'rclinks'               => '$1 guherandinên di $2 rojên dawî de nîşan bide<br />$3',
+'diff'                  => 'ciyawazî',
+'hist'                  => 'dîrok',
+'hide'                  => 'veşêre',
+'show'                  => 'nîşan bide',
+'minoreditletter'       => 'B',
+'newpageletter'         => 'Nû',
+'upload'                => 'Wêneyê barbike',
+'uploadbtn'             => 'Dosyayê barbike',
+'uploadnologin'         => 'Xwe qeyd nekir',
+'uploadnologintext'     => 'Ji bo barkirina wêneyan divê ku tu [[Special:Userlogin|têkevî]].',
+'uploadtext'            => 'Berê tu wêneyên nû bar bikî, ji bo dîtin an vedîtina wêneyên ku ji xwe hene binêre: [[Special:Imagelist|lîsteya wêneyên barkirî]]. Herwisa wêneyên ku hatine barkirin an jî jê birin li vir dikarî bibînî: [[Special:Log/upload|reşahiya barkiriyan]]. 
+
+Yek ji lînkên jêr ji bo bikarhînana wêne an faylê di gotarê de bikar bihîne:
+
+* \'\'\'<nowiki>[[{{ns:Image}}:File.jpg]]</nowiki>\'\'\'
+* \'\'\'<nowiki>[[{{ns:Image}}:File.png|alt text]]</nowiki>\'\'\'
+anjî ji bo faylên dengî
+* \'\'\'<nowiki>[[{{ns:Media}}:File.ogg]]</nowiki>\'\'\'',
+'filename'              => 'Navê dosyayê',
+'filedesc'              => 'Kurte',
+'fileuploadsummary'     => 'Kurte:',
+'filesource'            => 'Çavkanî',
+'copyrightpage'         => 'Project:Mafên nivîsanê',
+'copyrightpagename'     => 'Mafên nivîsanê',
+'uploadedfiles'         => 'Dosyayên bar kirî',
+'ignorewarning'         => 'Hişyarê qebûl neke û dosyayê qeyd bike.',
+'ignorewarnings'        => 'goh nede hîşyaran!',
+'minlength'             => 'Navê wêne bi lanî kêm dive ji 3 tîpan pêtir be.',
+'badfilename'           => 'Navê wêneyê hat guherandin û bû "$1".',
+'badfiletype'           => 'Formata ".$1" naye tawsiye kirin. (Ji bo wêne .png û .jpg tên tawsiye kirin.)',
+'largefile'             => 'Pêşniyara me ewe ku wêneyan ji $1 bayt mezintir nebe, ew wêne $2 bayt e.',
+'successfulupload'      => 'Barkirin serkeftî',
+'fileuploaded'          => 'Barkirina dosyaya bi navê $1 serkeftî.
+Ji kerema xwe, biçe: $2 û agahî li der barê dosyayê binivîse (ji ku derê hat girtin, kîngê hat çêkirin, kê çêkir û hwd.)
+
+Heke ev dosya wêneyek be, bi vî rengî bi kar bîne:
+<br />
+<tt><nowiki>[[{{ns:Image}}:$1|thumb|Binnivîs]]</nowiki></tt>',
+'uploadwarning'         => 'Hişyara barkirinê',
+'savefile'              => 'Dosyayê tomar bike',
+'uploadedimage'         => '"$1" barkirî',
+'destfilename'          => 'Navê faylê xwastî',
+'imagelist'             => 'Listeya wêneyan',
+'imagelisttext'         => 'Below is a list of $1 files sorted $2.',
+'ilsubmit'              => 'Lêbigere',
+'showlast'              => '$1 wêneyên dawî bi rêz kirî $2 nîşan bide.',
+'byname'                => 'li gor navê',
+'bydate'                => 'li gor dîrokê',
+'bysize'                => 'li gor mezinayiyê',
+'imghistory'            => 'Dîroka wêneyê',
+'deleteimg'             => 'jêbibe',
+'imagelinks'            => 'Lînkên wêneyê',
+'linkstoimage'          => 'Di van rûpelên de lînkek ji vê wêneyê re heye:',
+'nolinkstoimage'        => 'Rûpeleke ku ji vê wêneyê re lînk dike tune.',
+'download'              => 'dabezandin',
+'statistics'            => 'Statîstîk',
+'sitestats'             => 'Statîstîkên sîteyê',
+'userstats'             => 'Statistîkên bikarhêneran',
+'sitestatstext'         => 'Di \'\'database\'\' de \'\'\'$1\'\'\' rûpel hene.
+Tê de rûpelên guftûgoyê, rûpelên der barê {{SITENAME}}, rûpelên pir kurt (stub), rûpelên ragihandinê (redirect) û rûpelên din ku qey ne gotar in hene.
+Derve wan, \'\'\'$2\'\'\' rûpel hene ku qey \'\'\'gotarên rewa\'\'\' ne. 
+
+\'\'\'$8\'\'\' dosya hatin barkirin.
+
+Ji afirandina Wîkiyê heta roja îro \'\'\'$3\'\'\' carî rûpel hatin mezekirin û \'\'\'$4\'\'\' carî rûpel hatin guherandin
+since the wiki was setup.
+Ji ber wê di nîvî de her rûpel \'\'\'$5\'\'\' carî hatiye guherandin, û nîspeta dîtun û guherandinan \'\'\'$6\'\'\' e.
+
+Dirêjahiya [http://meta.wikimedia.org/wiki/Help:Job_queue job queue] \'\'\'$7\'\'\' e.',
+'userstatstext'         => '\'\'\'$1\'\'\' bikarhênerên qeydkirî hene. Ji wan \'\'\'$2\'\'\' (an \'\'\'$4\'\'\') administrator/koordînator in. (Binêre $3).',
+'disambiguations'       => 'Rûpelên cudakirinê',
+'brokenredirects'       => 'Ragihandinên jê bûye',
+'nbytes'                => '$1 bayt',
+'nlinks'                => '$1 lînk',
+'nmembers'              => '$1 {{PLURAL:$1|endam|endam}}',
+'nviews'                => '$1 {{PLURAL:$1|dîtin|dîtin}}',
+'lonelypages'           => 'Rûpelên sêwî',
+'uncategorizedpages'    => 'Rûpelên bê kategorî',
+'uncategorizedcategories'=> 'Kategoriyên bê kategorî',
+'unusedcategories'      => 'Kategoriyên ku nayên bi kar anîn',
+'unusedimages'          => 'Wêneyên ku nayên bi kar anîn',
+'popularpages'          => 'Rûpelên populer',
+'wantedcategories'      => 'Kategoriyên tên xwestin',
+'wantedpages'           => 'Rûpelên ku tên xwestin',
+'allpages'              => 'Hemû rûpel',
+'randompage'            => 'Rûpelek bi helkeft',
+'shortpages'            => 'Rûpelên kurt',
+'longpages'             => 'Rûpelên dirêj',
+'deadendpages'          => 'Rûpelên bê dergeh',
+'listusers'             => 'Lîsteya bikarhêneran',
+'specialpages'          => 'Rûpelên taybet',
+'spheading'             => 'Rûpelên taybet ji bo hemû bikarhêneran',
+'recentchangeslinked'   => 'Guherandinên peywend',
+'newpages'              => 'Rûpelên nû',
+'ancientpages'          => 'Gotarên kevintirîn',
+'move'                  => 'Navê rûpelê biguherîne',
+'movethispage'          => 'Vê rûpelê bigerîne',
+'booksources'           => 'Çavkaniyên pirtûkan',
+'categoriespagetext'    => 'Di vê wîkiyê de ev kategorî hene:',
+'booksourcetext'        => 'Li jêr lîsteyek ji linkan bo sîteyên din ku pertûkên nû û destî dû difrotin hatiye û belkî zanyarî yên pêtir jî derbarî wan pertûkên ku tu dixwazî hebin.',
+'alphaindexline'        => '$1 heta $2',
+'version'               => 'Guherto',
+'log'                   => 'Reşahiyan',
+'nextpage'              => 'Rûpela pêşî ($1)',
+'allpagesfrom'          => 'Pêşdîtina rûpelan bi dest pê kirin ji',
+'allarticles'           => 'Hemû gotar',
+'allinnamespace'        => 'Hemû rûpelan ($1 boşahî a nav)',
+'allpagesprev'          => 'Pêş',
+'allpagesnext'          => 'Paş',
+'allpagessubmit'        => 'Biçe',
+'allpagesprefix'        => 'Nîşan bide rûpelên bi pêşgira:',
+'mailnologin'           => 'Navnîşan neşîne',
+'emailuser'             => 'Ji vê/î bikarhênerê/î re e-name bişîne',
+'emailpage'             => 'E-name bikarhêner',
+'defemailsubject'       => '{{SITENAME}} e-name',
+'noemailtitle'          => 'Navnîşana e-name tune',
+'emailfrom'             => 'Ji',
+'emailto'               => 'Bo',
+'emailsubject'          => 'Mijar',
+'emailmessage'          => 'Name',
+'emailsend'             => 'Bişîne',
+'emailsent'             => 'E-name hat şandin',
+'emailsenttext'         => 'E-nameya te hat şandin.',
+'watchlist'             => 'Lîsteya min ya şopandinê',
+'mywatchlist'             => 'Lîsteya min ya şopandinê',
+'watchlistfor'          => '(ji bo \'\'\'$1\'\'\')',
+'watchnologin'          => 'Xwe qeyd nekir',
+'addedwatch'            => 'Hat îlawekirinî listeya şopandinê',
+'addedwatchtext'        => 'Rûpela "$1" çû ser [[Special:Watchlist|lîsteya te ya şopandinê]].
+Li dahatû de her guhartoyek li wê rûpelê û rûpela guftûgo ya wê were kirin li vir dêt nîşan dan,
+ 
+Li rûpela [[Special:Recentchanges|Guherandinên dawî]] jî ji bo hasan dîtina wê, ew rûpel bi \'\'\'Nivîsa estûr\'\'\' dê nîşan dayîn.
+
+
+<p>Her dem tu bixwazî ew rûpel li nav lîsteya te ya şopandinê derbikî, li ser wê rûpelê, klîk bike "êdî neşopîne".</p>',
+'removedwatchtext'      => 'The page "$1" has been removed from your watchlist.',
+'watch'                 => 'Bişopîne',
+'watchthispage'         => 'Vê rûpelê bişopîne',
+'unwatch'               => 'Êdî neşopîne',
+'notanarticle'          => 'Ne gotar e',
+'watchdetails'          => '* $1 rûpel tên şopandin, rûpelên guftûgoyê nayên jimartin
+* [[Special:Watchlist/edit|Lîsteya şopandinê bibîne û temam bike]]
+* [[Special:Watchlist/clear|Hemû rûpelan derxe]]',
+'watchlistcontains'     => 'Di lîsteya şopandina te de $1 rûpel hene.',
+'couldntremove'         => '\'$1\' naye jêbirin...',
+'wlhideshowown'         => '$1 my edits.',
+'wlhideshowbots'        => '$1 bot edits.',
+'wldone'                => 'Çêbû.',
+'enotif_newpagetext'    => 'Ev rûpeleke nû ye.',
+'changed'               => 'guhart',
+'created'               => 'afirandî',
+'deletepage'            => 'Rûpelê jê bibe',
+'confirm'               => 'Pesend bike',
+'excontent'             => 'Naveroka berê: \'$1\'',
+'excontentauthor'       => 'Nawerokê wê rûpelê ew bû: \'$1\' (û tenya bikarhêner \'$2\' bû)',
+'exbeforeblank'         => 'Nawerok berî betal kirinê ew bû: \'$1\'',
+'exblank'               => 'rûpel vala bû',
+'confirmdelete'         => 'Teyîda jêbirinê',
+'deletesub'             => '("$1" tê jêbirin)',
+'historywarning'        => 'Hîşyar: Ew rûpel ku tu dixwazî jê bibî dîrokek heye:',
+'actioncomplete'        => 'Çalakî temam',
+'deletedtext'           => '"$1" hat jêbirin. Ji bo qeyda rûpelên ku di dema nêzîk de hatin jêbirin binêre $2.',
+'deletedarticle'        => '"$1" hat jêbirin',
+'dellogpage'            => 'Reşahiya_jêbirin',
+'dellogpagetext'        => 'Li jêr lîsteyek ji jêbirinên dawî heye.',
+'deletionlog'           => 'reşahiya jêbirin',
+'deletecomment'         => 'Sedema jêbirinê',
+'rollback_short'        => 'Bizivirîne pêş',
+'rollbacklink'          => 'bizivirîne pêş',
+'cantrollback'          => 'Guharto naye vegerandin; bikarhêrê dawî, \'\'\'tenya\'\'\' nivîskarê wê rûpelê ye.',
+'alreadyrolled'         => 'Guherandina dawiya [[:$1]]
+bi [[User:$2|$2]] ([[User talk:$2|guftûgo]]) venizivre; keseke din wê rûpelê zivrandiye an guherandiye.
+
+Guhartoya dawî bi [[User:$3|$3]] ([[User talk:$3|guftûgo]]).',
+'revertpage'            => 'Guherandina $2 hat betal kirin, vegerand guhartoya dawî ya $1',
+'protectlogpage'        => 'Reşahiya _parastiyan',
+'protectedarticle'      => 'parastî [[$1]]',
+'confirmprotecttext'    => 'Tu bi rastî dixwazî wê rûpelê biparêzî?',
+'confirmprotect'        => 'Parastinê teyîd bike',
+'protectcomment'        => 'Sedema parastinê',
+'unprotectcomment'      => 'Sedem ji bo rakirina parastinê',
+'restriction-edit'      => 'Biguherîne',
+'restriction-move'      => 'Nav biguherîne',
+'undeletebtn'           => 'Restore!',
+'namespace'             => 'Boşahiya nav:',
+'invert'                => 'Hilbijardinê pêçewane bike',
+'contributions'         => 'Beşdariyên vê bikarhêner',
+'mycontris'             => 'Beşdariyên min',
+'contribsub2'            => 'Ji bo $1 ($2)',
+'uclinks'               => '$1 guherandinên dawî; $2 rojên dawî',
+'uctop'                 => ' (ser)',
+'newbies'               => 'ecemî',
+'sp-contributions-newest'=> 'Nûtirîn',
+'sp-contributions-oldest'=> 'Kevintirîn',
+'sp-contributions-newer'=> '$1 yên nûtir',
+'sp-contributions-older'=> '$1 yên kevintir',
+'whatlinkshere'         => 'Lînkên ji vê rûpelê re',
+'notargettitle'         => 'Hedef tune',
+'linklistsub'           => '(Listeya lînkan)',
+'linkshere'             => 'Di van rûpelên de lînkek ji vê re heye:',
+'nolinkshere'           => 'Ji hîç rûpel ji vê re lînk tune.',
+'isredirect'            => 'rûpela ragihandinê',
+'blockip'               => 'Bikarhêner asteng bike',
+'ipbreason'             => 'Sedem',
+'ipbsubmit'             => 'Vê bikarhêner asteng bike',
+'badipaddress'          => 'Bikarhêner bi vî navî tune',
+'blockipsuccesssub'     => 'Blok serkeftî',
+'blockipsuccesstext'    => '"$1" hat asteng kirin.
+<br />Bibîne [[Special:Ipblocklist|Lîsteya IP\'yan hatî asteng kirin]] ji bo lîsteya blokan.',
+'blocklistline'         => '$1, $2 $3 asteng kir ($4)',
+'blocklink'             => 'asteng bike',
+'unblocklink'           => 'betala astengê',
+'contribslink'          => 'Beşdarî',
+'autoblocker'           => 'Otomatîk hat bestin jiberku IP-ya we û ya "[[User:$1|$1]]" yek in. Sedem: "\'\'\'$2\'\'\'"',
+'blocklogpage'          => 'Reşahiya_asteng kiriyan',
+'blocklogentry'         => '"[[$1]]" ji bo dema $2 hatiye asteng kirin',
+'unblocklogentry'       => 'astenga "$1" hat betal kirin',
+'proxyblocksuccess'     => 'Çêbû.',
+'makesysopname'         => 'Navê bikarhêner:',
+'rightsnone'            => '(tune)',
+'movepage'              => 'Vê rûpelê bigerîne',
+'movepagetalktext'      => 'Rûpela \'\'\'guftûgoyê giredayî ji vê rûpelê re wê bê gerandin jî. 
+\'\'\'Îstisna:\'\'\'
+*You are moving the page across namespaces,
+*A non-empty talk page already exists under the new name, or
+*You uncheck the box below.
+
+In those cases, you will have to move or merge the page manually if desired.',
+'movearticle'           => 'Rûpelê bigerîne',
+'movenologin'           => 'Xwe qeyd nekir',
+'movenologintext'       => 'Tu dive bikarhênereke qeydkirî bî û [[Special:Userlogin|werî nav sîstemê]]
+da bikarî navê wê rûpelê biguherînî.',
+'newtitle'              => 'Sernivîsa nû',
+'movepagebtn'           => 'Vê rûpelê bigerîne',
+'pagemovedsub'          => 'Gerandin serkeftî',
+'pagemovedtext'         => 'Rûpela "[[$1]]" çû cihê "[[$2]]".',
+'articleexists'         => 'Rûpela bi vî navî heye, an navê ku te hilbijart derbas nabe. Navekî din hilbijêre.',
+'movedto'               => 'bû',
+'movetalk'              => 'Rûpela \'\'\'guftûgo\'\'\' ya wê jî bigerîne, eger gengaz be.',
+'1movedto2'             => '$1 çû cihê $2',
+'1movedto2_redir'       => '$1 çû cihê $2 ser redirect',
+'movelogpage'           => 'Reşahiya nav guherandin',
+'movelogpagetext'       => 'Li jêr lîsteyek ji rûpelan ku navê wan hatiye guherandin heye.',
+'movereason'            => 'Sedem',
+'allmessages'           => 'Hemû mesajên sîstemê',
+'allmessagesname'       => 'Nav',
+'allmessagescurrent'    => 'Texta niha',
+'allmessagestext'       => 'Ev lîsteya hemû mesajên di namespace a MediaWiki: de ye.',
+'allmessagesnotsupportedUI'=> 'Your current interface language <b>$1</b> is not supported by Special:Allmessages at this site.',
+'allmessagesnotsupportedDB'=> '\'\'\'Special:Allmessages\'\'\' cannot be used because \'\'\'$wgUseDatabaseMessages\'\'\' is switched off.',
+'thumbnail-more'        => 'Mezin bike',
+'importnotext'          => 'Vala an nivîs tune',
+'tooltip-diff'          => 'Show which changes you made to the text.',
+'tooltip-compareselectedversions'=> 'Cudatiyên guhartoyên hilbijartî yên vê rûpelê bibîne.',
+'monobook.css'          => '*.rtl 
+ {
+  dir:rtl;
+  text-align:right;
+  font-family: "Tahoma", "Unikurd Web", "Arial Unicode MS", "DejaVu Sans", "Lateef", "Scheherazade", "ae_Rasheeq", sans-serif, sans; 
+ }
+
+ /*Make the site more suitable for Soranî users */
+ h1 {font-family: "Tahoma", "Arial Unicode MS", sans-serif, sans, "Unikurd Web", "Scheherazade";}
+ h2 {font-family: "Tahoma", "Arial Unicode MS", sans-serif, sans, "Unikurd Web", "Scheherazade";}
+ h3 {font-family: "Tahoma", "Arial Unicode MS", sans-serif, sans, "Unikurd Web", "Scheherazade";}
+ body {font-family: "Tahoma", "Arial Unicode MS", sans-serif, sans, "Unikurd Web", "Scheherazade";}
+ textarea {font-family: Lucida Console, Tahoma;}
+ pre {font-family: Lucida Console, Tahoma;}',
+'anonymous'             => 'Bikarhênera/ê nediyarkirî ya/yê {{SITENAME}}',
+'siteuser'              => 'Bikarhênera/ê $1 a/ê {{SITENAME}}',
+'and'                   => 'û',
+'others'                => 'ên din',
+'siteusers'             => 'Bikarhênerên $1 yên {{SITENAME}}',
+'subcategorycount'      => 'Di vê kategoriyê de $1 binkategorî hene.',
+'categoryarticlecount'  => 'Di vê kategoriyê de $1 gotar hene.',
+'listingcontinuesabbrev'=> ' dewam',
+'monobook.js' => '/* Deprecated; use [[MediaWiki:common.js]] */',
+ 
+'accesskey-pt-userpage' => '.',
+'tooltip-pt-userpage' => 'Rûpela min a şexsî',
+'accesskey-pt-anonuserpage' => '.',
+'tooltip-pt-anonuserpage' => 'The user page for the ip you',
+'accesskey-pt-mytalk' => 'n',
+'tooltip-pt-mytalk' => 'Rûpela guftûgo ya min',
+'accesskey-pt-anontalk' => 'n',
+'tooltip-pt-anontalk' => 'Discussion about edits from this ip address',
+'accesskey-pt-preferences' => '',
+'tooltip-pt-preferences' => ',Tercîhên min',
+'accesskey-pt-watchlist' => 'l',
+'tooltip-pt-watchlist' => 'The list of pages you',
+'accesskey-pt-mycontris' => 'y',
+'tooltip-pt-mycontris' => 'Lîsteya tevkariyên min',
+'accesskey-pt-login' => 'o',
+'tooltip-pt-login' => 'You are encouraged to log in, it is not mandatory however.',
+'accesskey-pt-anonlogin' => 'o',
+'tooltip-pt-anonlogin' => 'You are encouraged to log in, it is not mandatory however.',
+'accesskey-pt-logout' => '',
+'tooltip-pt-logout' => 'Derkeve (Log out)',
+'accesskey-ca-talk' => 't',
+'tooltip-ca-talk' => 'guftûgo û şîrove ser vê rûpelê',
+'accesskey-ca-edit' => 'e',
+'tooltip-ca-edit' => 'Vê rûpelê biguherîne! Berê qeydkirinê bişkoka "Pêşdîtin',
+'accesskey-ca-addsection' => '+',
+'tooltip-ca-addsection' => 'Beşekê zêde bike.',
+'accesskey-ca-viewsource' => 'e',
+'tooltip-ca-viewsource' => 'This page is protected. You can view its source.',
+'accesskey-ca-history' => 'h',
+'tooltip-ca-history' => 'Versyonên berê yên vê rûpelê.',
+'accesskey-ca-protect' => '=',
+'tooltip-ca-protect' => 'Vê rûplê biparêze',
+'accesskey-ca-delete' => 'd',
+'tooltip-ca-delete' => 'Vê rûpelê jê bibe',
+'accesskey-ca-undelete' => 'd',
+'tooltip-ca-undelete' => 'Restore the edits done to this page before it was deleted',
+'accesskey-ca-move' => 'm',
+'tooltip-ca-move' => 'Navekî nû bide vê rûpelê',
+'accesskey-ca-nomove' => '',
+'tooltip-ca-nomove' => 'You don',
+'accesskey-ca-watch' => 'w',
+'tooltip-ca-watch' => 'Add this page to your watchlist',
+'accesskey-ca-unwatch' => 'w',
+'tooltip-ca-unwatch' => 'Remove this page from your watchlist',
+'accesskey-search' => 'f',
+'tooltip-search' => 'Li vê wikiyê bigêre',
+'accesskey-p-logo' => '',
+'tooltip-p-logo' => 'Destpêk',
+'accesskey-n-mainpage' => 'z',
+'tooltip-n-mainpage' => 'Biçe Destpêkê',
+'accesskey-n-portal' => '',
+'tooltip-n-portal' => 'About the project, what you can do, where to find things',
+'accesskey-n-currentevents' => '',
+'tooltip-n-currentevents' => 'Find background information on current events',
+'accesskey-n-recentchanges' => 'r',
+'tooltip-n-recentchanges' => 'The list of recent changes in the wiki.',
+'accesskey-n-randompage' => 'x',
+'tooltip-n-randompage' => 'Load a random page',
+'accesskey-n-help' => '',
+'tooltip-n-help' => 'Bersivên ji bo pirsên te.',
+'accesskey-n-sitesupport' => '',
+'tooltip-n-sitesupport' => 'Support us',
+'accesskey-t-whatlinkshere' => 'j',
+'tooltip-t-whatlinkshere' => 'Lîsteya hemû rûpelên ku ji vê re grêdidin.',
+'accesskey-t-recentchangeslinked' => 'k',
+'tooltip-t-recentchangeslinked' => 'Recent changes in pages linking to this page',
+'accesskey-feed-rss' => '',
+'tooltip-feed-rss' => 'RSS feed for this page',
+'accesskey-feed-atom' => '',
+'tooltip-feed-atom' => 'Atom feed for this page',
+'accesskey-t-contributions' => '',
+'tooltip-t-contributions' => 'View the list of contributions of this user',
+'accesskey-t-emailuser' => '',
+'tooltip-t-emailuser' => 'Jê re name bişîne',
+'accesskey-t-upload' => 'u',
+'tooltip-t-upload' => 'Upload images or media files',
+'accesskey-t-specialpages' => 'q',
+'tooltip-t-specialpages' => 'List of all special pages',
+'accesskey-ca-nstab-main' => 'c',
+'tooltip-ca-nstab-main' => 'View the content page',
+'accesskey-ca-nstab-user' => 'c',
+'tooltip-ca-nstab-user' => 'Rûpela bikarhênerê/î temaşe bike',
+'accesskey-ca-nstab-media' => 'c',
+'tooltip-ca-nstab-media' => 'View the media page',
+'accesskey-ca-nstab-special' => '',
+'tooltip-ca-nstab-special' => 'This is a special page, you can',
+'accesskey-ca-nstab-project' => 'a',
+'tooltip-ca-nstab-project' => 'View the project page',
+'accesskey-ca-nstab-image' => 'c',
+'tooltip-ca-nstab-image' => 'View the image page',
+'accesskey-ca-nstab-mediawiki' => 'c',
+'tooltip-ca-nstab-mediawiki' => 'View the system message',
+'accesskey-ca-nstab-template' => 'c',
+'tooltip-ca-nstab-template' => 'View the template',
+'accesskey-ca-nstab-help' => 'c',
+'tooltip-ca-nstab-help' => 'View the help page',
+'accesskey-ca-nstab-category' => 'c',
+'tooltip-ca-nstab-category' => 'View the category page',
+'previousdiff'          => '← Ciyawaziya pêştir',
+'nextdiff'              => 'Ciyawaziya paştir →',
+'thumbsize'             => 'Thumbnail size :',
+'showbigimage'          => 'Versyona mezin bibîne an daxe ($1x$2, $3 KB).',
+'newimages'             => 'Pêşangeha wêneyên nû',
+'specialloguserlabel'   => 'Bikarhêner:',
+'recentchangesall'      => 'hemû',
+'imagelistall'          => 'hemû',
+'watchlistall1'         => 'hemû',
+'watchlistall2'         => 'hemû',
+'namespacesall'         => 'Hemû',
+'createarticle'         => 'Gotarê biafirîne',
+'scarytranscludefailed' => '[Anîna şablona $1 biserneket; biborîne]',
+'deletedwhileediting'   => 'Hîşyar: Piştî te guherandinê dest pê kir ew rûpel hat jêbirin!',
+'confirm_purge_button'  => 'Temam',
+'loginlanguagelabel'    => 'Ziman: $1',
+);
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesKv.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesKv.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesKv.php	(revision 1280)
@@ -0,0 +1,8 @@
+<?php
+/** Komi (Коми)
+  *
+  * @addtogroup Language
+  */
+
+$fallback = 'ru';
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesLa.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesLa.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesLa.php	(revision 1280)
@@ -0,0 +1,1191 @@
+<?php
+/** Latin (lingua Latina)
+  *
+  * @addtogroup Language
+  */
+
+$skinNames = array(
+	'standard' => 'Norma',
+	'cologneblue' => 'Caerulus Colonia'
+);
+
+$namespaceNames = array(
+	NS_SPECIAL        => 'Specialis',
+	NS_MAIN           => '',
+	NS_TALK           => 'Disputatio',
+	NS_USER           => 'Usor',
+	NS_USER_TALK      => 'Disputatio_Usoris',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK   => 'Disputatio_{{grammar:genitive|$1}}',
+	NS_IMAGE          => 'Imago',
+	NS_IMAGE_TALK     => 'Disputatio_Imaginis',
+	NS_MEDIAWIKI      => 'MediaWiki',
+	NS_MEDIAWIKI_TALK => 'Disputatio_MediaWiki',
+	NS_TEMPLATE       => 'Formula',
+	NS_TEMPLATE_TALK  => 'Disputatio_Formulae',
+	NS_HELP           => 'Auxilium',
+	NS_HELP_TALK      => 'Disputatio_Auxilii',
+	NS_CATEGORY       => 'Categoria',
+	NS_CATEGORY_TALK  => 'Disputatio_Categoriae',
+);
+
+$dateFormats = array(
+	'mdy time' => 'H:i',
+	'mdy date' => 'xg j, Y',
+	'mdy both' => 'H:i, xg j, Y',
+	
+	'dmy time' => 'H:i',
+	'dmy date' => 'j xg Y',
+	'dmy both' => 'H:i, j xg Y',
+	
+	'ymd time' => 'H:i',
+	'ymd date' => 'Y xg j',
+	'ymd both' => 'H:i, Y xg j',
+	
+	'ISO 8601 time' => 'xnH:xni:xns',
+	'ISO 8601 date' => 'xnY-xnm-xnd',
+	'ISO 8601 both' => 'xnY-xnm-xnd"T"xnH:xni:xns',
+);
+
+$messages = array(
+# User preference toggles
+'tog-underline'               => 'Nexus cum linea subscribere:',
+'tog-highlightbroken'         => 'Formare nexos fractos <a href="" class="new">sici</a> (alioqui: sic<a href="" class="internal">?</a>).',
+'tog-justify'                 => 'Iustificare paragrapha',
+'tog-hideminor'               => 'Celare recensiones minores in nuper mutatibus',
+'tog-extendwatchlist'         => 'Extendere indicem paginarum custoditarum ut omnes emendationes monstrentur',
+'tog-usenewrc'                => 'Nuper mutata amplificata (JavaScript)',
+'tog-numberheadings'          => 'Numerare indices necessario',
+'tog-showtoolbar'             => 'Instrumenta pro recensendo monstrare (JavaScript)',
+'tog-editondblclick'          => 'Premere bis ad paginam recensendum (JavaScript)',
+'tog-editsection'             => 'Licere paginarum partibus recensier via nexus [recensere]',
+'tog-editsectiononrightclick' => 'Licere paginarum partibus recensier si<br />dextram murem premam in titulis partum (JavaScript)',
+'tog-showtoc'                 => 'Indicem contenta monstrare (paginis in quibus sunt plus quam 3 partes)',
+'tog-rememberpassword'        => 'Recordare tesseram inter conventa (utere cookies)',
+'tog-editwidth'               => 'Capsa recensitorum totam latitudinem habet',
+'tog-watchcreations'          => 'Paginas quas creavi in paginarum custoditarum indicem addere',
+'tog-watchdefault'            => 'Paginas quas emendavi in paginarum custoditarum indicem addere',
+'tog-watchmoves'              => 'Paginas quas movi in paginarum custoditarum indicem addere',
+'tog-watchdeletion'           => 'Paginas quas delevi in paginarum custoditarum indicem addere',
+'tog-minordefault'            => 'Notare omnes recensiones quasi minores',
+'tog-previewontop'            => 'Monstrare praevisum ante capsam recensiti, non post ipsam',
+'tog-previewonfirst'          => 'Praevisum monstrare recensione incipiente',
+'tog-enotifwatchlistpages'    => 'Mittere mihi litteras electronicas si pagina a me custodita mutatur',
+'tog-enotifusertalkpages'     => 'Mittere mihi litteras electronicas si mea disputatio mutatur',
+'tog-enotifminoredits'        => 'Mittere mihi litteras electronicas etiam pro recensionibus minoribus',
+'tog-enotifrevealaddr'        => 'Monstrare inscriptio mea electronica in nuntiis notificantibus',
+'tog-shownumberswatching'     => 'Numerum usorum custodientium monstrare',
+'tog-fancysig'                => 'Subscriptio cruda (sine nexu automatico)',
+'tog-externaleditor'          => 'Utere editore externo semper',
+'tog-externaldiff'            => 'Utere dissimilitudine externa semper',
+'tog-uselivepreview'          => 'Praevisum viventem adhibere (JavaScript)',
+'tog-forceeditsummary'        => 'Si recensionem non summatim descripsero, me roga si continuare velim',
+'tog-watchlisthideown'        => 'Celare meas recensiones in paginarum custoditarum indice',
+'tog-watchlisthidebots'       => 'Celare recensiones automatarias in paginarum custoditarum indice',
+'tog-watchlisthideminor'      => 'Celare recensiones minores in paginarum custoditarum indice',
+
+'underline-always'  => 'Semper',
+'underline-never'   => 'Numquam',
+'underline-default' => 'Defalta navigatri interretialis',
+
+'skinpreview' => '(Praevisum)',
+
+# Dates
+'sunday'        => 'dies Solis',
+'monday'        => 'dies Lunae',
+'tuesday'       => 'dies Martis',
+'wednesday'     => 'dies Mercurii',
+'thursday'      => 'dies Iovis',
+'friday'        => 'dies Veneris',
+'saturday'      => 'dies Saturni',
+'january'       => 'Ianuarius',
+'february'      => 'Februarius',
+'march'         => 'Martius',
+'april'         => 'Aprilis',
+'may_long'      => 'Maius',
+'june'          => 'Iunius',
+'july'          => 'Iulius',
+'august'        => 'Augustus',
+'january-gen'   => 'Ianuarii',
+'february-gen'  => 'Februarii',
+'march-gen'     => 'Martii',
+'april-gen'     => 'Aprilis',
+'may-gen'       => 'Maii',
+'june-gen'      => 'Iunii',
+'july-gen'      => 'Iulii',
+'august-gen'    => 'Augusti',
+'september-gen' => 'Septembris',
+'october-gen'   => 'Octobris',
+'november-gen'  => 'Novembris',
+'december-gen'  => 'Decembris',
+'jan'           => 'Ian',
+'may'           => 'Mai',
+'jun'           => 'Iun',
+'jul'           => 'Iul',
+
+# Bits of text used by many pages
+'categories'      => 'Categoriae',
+'pagecategories'  => '{{PLURAL:$1|Categoria|Categoriae}}',
+'category_header' => 'Paginae in categoria "$1"',
+'subcategories'   => 'Subcategoriae',
+
+'about'          => 'De',
+'article'        => 'Pagina contenta continens',
+'newwindow'      => '(in fenestra nova aperietur)',
+'cancel'         => 'Abrogare',
+'qbfind'         => 'Invenire',
+'qbbrowse'       => 'Perspicere',
+'qbedit'         => 'Recensere',
+'qbpageoptions'  => 'Optiones paginae',
+'qbpageinfo'     => 'Indicium paginae',
+'qbmyoptions'    => 'Optiones meae',
+'qbspecialpages' => 'Paginae speciales',
+'moredotdotdot'  => 'Plus...',
+'mypage'         => 'Pagina mea',
+'mytalk'         => 'Disputatum meum',
+'anontalk'       => 'Disputatio huius IP',
+'navigation'     => 'Navigatio',
+
+'returnto'          => 'Redire ad $1.',
+'tagline'           => 'E {{grammar:ablative|{{SITENAME}}}}',
+'help'              => 'Adiutatum',
+'search'            => 'Quaerere',
+'searchbutton'      => 'Quaerere',
+'go'                => 'Ire',
+'searcharticle'     => 'Ire',
+'history'           => 'Historia paginae',
+'history_short'     => 'Historia',
+'printableversion'  => 'Forma impressibilis',
+'permalink'         => 'Nexus perpetuus',
+'print'             => 'Imprimere',
+'edit'              => 'Recensere',
+'editthispage'      => 'Recensere hanc paginam',
+'delete'            => 'Delere',
+'deletethispage'    => 'Delere hanc paginam',
+'protect'           => 'Protegere',
+'protectthispage'   => 'Protegere hanc paginam',
+'unprotect'         => 'Deprotegere',
+'unprotectthispage' => 'Deprotegere hanc paginam',
+'newpage'           => 'Nova pagina',
+'talkpage'          => 'Disputare hanc paginam',
+'specialpage'       => 'Pagina specialis',
+'postcomment'       => 'Adnotare',
+'articlepage'       => 'Videre rem',
+'talk'              => 'Disputatio',
+'toolbox'           => 'Arca ferramentorum',
+'userpage'          => 'Videre paginam usoris',
+'projectpage'       => 'Vide paginam coeptorum',
+'imagepage'         => 'Videre paginam fasciculi',
+'categorypage'      => 'Videre categoriam',
+'viewtalkpage'      => 'Videre disputatum',
+'otherlanguages'    => 'Linguis aliis',
+'redirectedfrom'    => '(Redirectum de $1)',
+'redirectpagesub'   => 'Pagina redirectionis',
+'lastmodifiedat'    => 'Ultima mutatio: $2, $1.', # $1 date, $2 time
+'protectedpage'     => 'Pagina protecta',
+'jumpto'            => 'Salire ad:',
+'jumptonavigation'  => 'navigationem',
+'jumptosearch'      => 'quaerere',
+
+# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
+'aboutsite'         => 'De {{grammar:ablative|{{SITENAME}}}}',
+'aboutpage'         => 'Project:De {{grammar:ablative|{{SITENAME}}}}',
+'bugreports'        => 'Renuntiare errores',
+'bugreportspage'    => 'Project:Renuntiare errores',
+'copyright'         => 'Res ad manum sub $1.',
+'copyrightpagename' => '{{grammar:genitive|{{SITENAME}}}} verba privata',
+'copyrightpage'     => 'Project:Verba privata',
+'currentevents'     => 'Novissima',
+'currentevents-url' => 'Nuntii',
+'disclaimers'       => 'Repudiationes',
+'edithelp'          => 'Opes pro recensendo',
+'edithelppage'      => 'Project:Quam paginam recensere',
+'faq'               => 'Quaestiones frequentes',
+'faqpage'           => 'Project:Quaestiones frequentes',
+'helppage'          => 'Project:Auxilium pro editione',
+'mainpage'          => 'Pagina prima',
+'portal'            => 'Porta communis',
+'portal-url'        => 'Project:Porta communis',
+'privacy'           => 'Consilium de secreto',
+'sitesupport'       => 'Donationes',
+
+'badaccess'        => 'Error permissu',
+'badaccess-group0' => 'Non licet tibi actum quod petivisti agere.',
+'badaccess-group1' => 'Actum quod petivisti solum potest agi ab usoribus ex grege $1.',
+'badaccess-group2' => 'Actum quod petivisti solum potest agi ab usoribus ex uno gregum $1.',
+'badaccess-groups' => 'Actum quod petivisti solum potest agi ab usoribus ex uno gregum $1.',
+
+'retrievedfrom'       => 'Receptum de "$1"',
+'youhavenewmessages'  => 'Habes $1 ($2).',
+'newmessageslink'     => 'nuntia nova',
+'newmessagesdifflink' => 'dissimilia post mutationem ultimam',
+'editsection'         => 'recensere',
+'editold'             => 'recensere',
+'toc'                 => 'Index',
+'showtoc'             => 'monstrare',
+'hidetoc'             => 'celare',
+'thisisdeleted'       => 'Videre aut restituere $1?',
+'restorelink'         => '{{PLURAL:$1|unam emendationem deletam|$1 emendationes deletas}}',
+
+# Short words for each namespace, by default used in the 'article' tab in monobook
+'nstab-main'      => 'Res',
+'nstab-user'      => 'Pagina usoris',
+'nstab-media'     => 'Media',
+'nstab-special'   => 'Specialis',
+'nstab-project'   => 'Consilium',
+'nstab-image'     => 'Fasciculus',
+'nstab-mediawiki' => 'Nuntium',
+'nstab-template'  => 'Formula',
+'nstab-help'      => 'Help',
+'nstab-category'  => 'Categoria',
+
+# Main script and global functions
+'nosuchaction'      => 'Actio non est',
+'nosuchactiontext'  => 'Actio in URL designata non agnoscitur a hoc vici.',
+'nosuchspecialpage' => 'Pagina specialis non est',
+'nospecialpagetext' => 'Paginam specialem invalidam petivisti. Pro indice paginarum specialum validarum, vide [[Special:Specialpages|{{MediaWiki:specialpages}}]].',
+
+# General errors
+'databaseerror'      => 'Error in basi datorum',
+'noconnect'          => 'Nos paenitet! {{SITENAME}} per aerumnas technicas agit, et server basis datorum invenire non potest. <br />
+$1',
+'cachederror'        => 'Quae sequuntur sunt ex exemplo conditivo paginae quaesitae, fortasse non recente.',
+'badarticleerror'    => 'Haec actio non perfici potest in hac pagina.',
+'cannotdelete'       => 'Pagina vel fasciculus deleri non potuit. (Fortasse usor alius iam deleverat.)',
+'badtitle'           => 'Titulus malus',
+'badtitletext'       => 'Nomen paginae quaestae fuit invalidum, vacuum, aut praeverbium interlingualem vel intervicialem habuit. Fortasse insunt una aut plus litterarum quae in titulis non possunt inscribier.',
+'viewsource'         => 'Fontem videre',
+'viewsourcefor'      => 'pro $1',
+'protectedpagetext'  => 'Haec pagina protecta est, ut emendationes prohibeantur.',
+'viewsourcetext'     => 'Fontem videas et exscribeas:',
+'protectedinterface' => 'Haec pagina dat textum interfaciei pro logiciali, et est protecta ad vandalismum vetandum.',
+'editinginterface'   => "'''Caveat censor:''' Emendas iam paginam quae textum interfaciei logicialem dat. Mutationes vultum {{grammar:genitive|{{SITENAME}}}} omnibus usoribus afficient.",
+
+# Login and logout pages
+'logouttitle'                => 'Conventum concludere',
+'logouttext'                 => '<strong>Conventum tuum conclusum est.</strong><br />
+Ignote continues {{grammar:ablative|{{SITENAME}}}} uti, aut conventum novum vel sub eodem vel novo nomine aperias. Nota bene paginas fortasse videantur quasi tuum conventum esset apertum, priusquam navigatrum purgaveris.',
+'welcomecreation'            => '== Salve, $1! ==
+
+Ratio tua iam creata est. Noli oblivisci praeferentias tuas mutare.',
+'loginpagetitle'             => 'Conventum aperire',
+'yourname'                   => 'Nomen tuum usoris',
+'yourpassword'               => 'Tessera tua',
+'yourpasswordagain'          => 'Tesseram tuam adfirmare',
+'remembermypassword'         => 'Tesseram meam inter conventa memento',
+'yourdomainname'             => 'Regnum tuum',
+'loginproblem'               => '<b>Problema erat aperiens conventum tuum.</b><br />Conare denuo!',
+'alreadyloggedin'            => '<strong>Usor $1, conventum tuum iam apertum est!</strong><br />',
+'login'                      => 'Conventum aperire',
+'loginprompt'                => 'Cookies potestatem facere debes ut conventum aperire.',
+'userlogin'                  => 'Conventum aperire',
+'logout'                     => 'Conventum concludere',
+'userlogout'                 => 'Conventum concludere',
+'notloggedin'                => 'Conventum non apertum est',
+'nologin'                    => 'Num rationem non habes? $1!',
+'nologinlink'                => 'Eam crea',
+'createaccount'              => 'Rationem novam creare',
+'gotaccount'                 => 'Habesne iam rationem? $1.',
+'gotaccountlink'             => 'Conventum aperi',
+'createaccountmail'          => 'ab inscriptione electronica',
+'badretype'                  => 'Tesserae quas scripsisti inter se non congruunt.',
+'userexists'                 => 'Nomen usoris quod selegisti iam est. Nomen usoris alium selige.',
+'youremail'                  => 'Inscriptio tua electronica *:',
+'username'                   => 'Nomen usoris:',
+'uid'                        => 'ID usoris:',
+'yourrealname'               => 'Nomen tuum verum *:',
+'yourlanguage'               => 'Lingua tua:',
+'yourvariant'                => 'Differentia',
+'yournick'                   => 'Agnomen tuum (in subscriptionibus):',
+'badsig'                     => 'Subscriptio cruda non est valida; scrutina HTML textos.',
+'email'                      => 'Litterae electronicae',
+'prefs-help-realname'        => '* Nomen verum (non necesse): si vis id dare, opera tua tibi ascribantur.',
+'loginerror'                 => 'Error factus est in aperiendo conventum',
+'prefs-help-email'           => '* Inscriptio tua electronica (non necesse): Sinit aliis tecum loqui per tuam paginam usoris, nisi te reveles.',
+'nocookiesnew'               => "Ratio usoris creata est, sed conventum non apertum est. {{SITENAME}} ''Cookies'' utitur in usorum conventa aperiendo. Cookies tua debiles sunt. Eis potestatem fac, tum conventum aperi cum nomine usoris tesseraque tua nova.",
+'nocookieslogin'             => "{{SITENAME}} ''Cookies'' utitur in usorum conventa aperiendo. Cookies tua debiles sunt. Eis potestatem fac, tum conare denuo.",
+'noname'                     => 'Nominem usoris ratum non designavisti.',
+'loginsuccesstitle'          => 'Conventum prospere apertum est',
+'loginsuccess'               => 'Apud {{grammar:accusative|{{SITENAME}}}} agnosceris ut "$1".',
+'nosuchuser'                 => 'Nomen usoris "$1" non est. Orthographiam confirma, aut novam rationem usoris crea.',
+'nosuchusershort'            => 'Nomen usoris "$1" non est. Orthographiam confirma.',
+'wrongpassword'              => 'Tessera quam scripsisti non constat. Conare denuo.',
+'wrongpasswordempty'         => 'Tesseram vacuam scripsisti. Conare denuo.',
+'mailmypassword'             => 'Tesseram novam per litteras electronicas petere',
+'passwordremindertitle'      => 'Nova tessera apud {{grammar:accusative|{{SITENAME}}}}',
+'passwordremindertext'       => 'Aliquis (tu probabiliter, cum loco de IP $1)
+tesseram novam petivit pro {{grammar:ablative|{{SITENAME}}}} ($4).
+Tessera usoris "$2" nunc est "$3".
+Conventum aperias et statim tesseram tuam mutes.
+
+Si non ipse hanc petitionem fecisti, aut si tesseram tuam
+meministi et etiam nolis eam mutare, potes hunc nuntium
+ignorare, et tessera seni uti continuare.',
+'acct_creation_throttle_hit' => 'Nos paenitet, etiam rationes $1 creavisti. Plurimas non tibi licet creare.',
+'emailauthenticated'         => 'Tua inscriptio electronica recognita est $1.',
+'accountcreated'             => 'Ratio creata',
+'accountcreatedtext'         => 'Ratio pro usore $1 creata est.',
+
+# Password reset dialog
+'resetpass' => 'Tesseram novam creare',
+
+# Edit page toolbar
+'bold_sample'    => 'Litterae pingues',
+'bold_tip'       => 'Litterae pingues',
+'italic_sample'  => 'Textus litteris italicis scriptus',
+'italic_tip'     => 'Textus litteris italicis scriptus',
+'link_sample'    => 'Titulum nexere',
+'link_tip'       => 'Nexus internus',
+'extlink_sample' => 'http://www.example.com titulus nexus externi',
+'extlink_tip'    => 'Nexus externus (memento praefixi http://)',
+'math_sample'    => 'Hic inscribe formulam',
+'math_tip'       => 'Formula mathematica (LaTeX)',
+'image_tip'      => 'Imago in pagina imposita',
+'media_tip'      => 'Nexus ad fasciculum mediorum',
+'sig_tip'        => 'Subscriptio tua cum indicatione temporis',
+'hr_tip'         => 'Linea horizontalis (noli saepe uti)',
+
+# Edit pages
+'summary'                => 'Summarium',
+'subject'                => 'Res/titulus',
+'minoredit'              => 'Haec est recensio minor',
+'watchthis'              => 'Custodire hanc paginam',
+'savearticle'            => 'Servare hanc rem',
+'preview'                => 'Praevidere',
+'showpreview'            => 'Monstrare praevisum',
+'showlivepreview'        => 'Monstrare praevisum viventem',
+'showdiff'               => 'Mutata ostendere',
+'anoneditwarning'        => "'''Monitio:''' Conventum tuum non apertum. Locus IP tuus in historia huius paginae notabitur.",
+'missingcommenttext'     => 'Sententiam subter inscribe.',
+'summary-preview'        => 'Praevisum summarii',
+'subject-preview'        => 'Praevisum rei/tituli',
+'blockedtitle'           => 'Usor obstructus est',
+'blockedtext'            => "<big>'''Nomen usoris aut locus IP tuus obstructus est'''</big> a magistratu \$1.
+
+Ratio data est: ''\$2''.
+
+Potes ad \$1 aut [[{{MediaWiki:grouppage-sysop}}|magistratum]] alium nuntium mittere ad impedimentum disputandum.
+Nota bene te non posse proprietate \"Litteras electronicas usori mittere\" uti, nisi tibi est inscriptio electronica confirmata apud [[Special:Preferences|praeferentias usoris tuas]]. Locus IP tuus est \$3, et numerus obstructionis est #\$5. Quaeso te eos scripturum si quaestiones ullas roges.",
+'blockedoriginalsource'  => "Fons '''$1''' subter monstratur:",
+'blockededitsource'      => "Textus '''tuarum emendationum''' in '''$1''' subter monstratur:",
+'whitelistedittitle'     => 'Conventum aperiendum ut recenseas',
+'whitelistedittext'      => 'Necesse est tibi $1 priusquam paginas recenseas.',
+'whitelistreadtitle'     => 'Conventum aperiendum ut legas',
+'whitelistreadtext'      => 'Necesse est tibi [[Special:Userlogin|conventum aperire]] priusquam paginas legas.',
+'whitelistacctitle'      => 'Non licet tibi rationem creare',
+'confirmedittitle'       => 'Adfirmanda est inscriptio tua electronica prisuquam recenseas',
+'confirmedittext'        => 'Tua inscriptio electronica est adfirmanda priusquam paginas recenseas. Quaesumus eam selige et adfirma per tuas [[Special:Preferences|praeferentias]].',
+'loginreqtitle'          => 'Conventum aperiendum',
+'loginreqlink'           => 'conventum aperire',
+'loginreqpagetext'       => 'Necesse est tibi $1 priusquam paginas alias legas.',
+'accmailtitle'           => 'Tessera missa est.',
+'accmailtext'            => 'Tessera usoris "$1" ad $2 missa est.',
+'newarticle'             => '(Nova)',
+'newarticletext'         => "Per nexum progressus es ad paginam quae nondum exsistit. Novam paginam si vis creare, in capsam infra praebitam scribe. Vide [[{{MediaWiki:helppage}}|paginam auxilii]] si plura cognoscere vis. Si hic es propter errorem, solum '''Retrorsum''' in navigatro tuo preme.",
+'anontalkpagetext'       => "---- ''Haec est pagina disputationis usoris anonymi, solum a loco IP suo noti. Memento locos IP aliquando mutaturos, et a usoribus multis fortasse adhibitos. Si es usor ignotus, et tibi querulae sine ratione datae sunt, conventum [[Special:Userlogin|aperi vel crea]] ad confusionem solvendam. Nota locum IP tuum concelatum esse convento aperto si de rebus privatis tuis es sollicitatus.''",
+'noarticletext'          => 'In hac pagina nondum litterae sunt. Potes etiam [[Special:Search/{{PAGENAME}}|hanc rem in aliis paginis quaerere]] aut [{{fullurl:{{FULLPAGENAME}}|action=edit}} hanc paginam creare].',
+'updated'                => '(Novata)',
+'note'                   => '<strong>Nota:</strong>',
+'previewnote'            => '<strong>Memento hanc paginam solum praevisum esse, neque iam servatam!</strong>',
+'editing'                => 'Recensio paginae "$1"',
+'editinguser'            => 'Recensio <b>$1</b>',
+'editingsection'         => 'Recensens $1 (partem)',
+'editingcomment'         => 'Recensens $1 (adnotum)',
+'editconflict'           => 'Contentio recensionis: $1',
+'explainconflict'        => 'Alius hanc paginam mutavit postquam eadem mutare incipiebas.
+Capsa superior paginae verba recentissima continet.
+Mutationes tuae in capsa inferiore monstrantur.
+Mutationes tuae in verbam superiorem adiungare debes.
+<b>Solum</b> verba capsae superioris servabuntur quando "Servare hanc rem" premes.<br />',
+'yourtext'               => 'Sententia tua',
+'storedversion'          => 'Verba recentissima',
+'nonunicodebrowser'      => '<strong>CAVETO: Navigatorium retiale tuum systemati UNICODE morem non gerit. Modum habemus quo commentationes sine damno recenseas: litterae non-ASCII in capsa sub veste hexadecimali ostendentur.</strong>',
+'editingold'             => '<strong>MONITIO: Formam obsoletam huius paginae mutas.
+Si eam servaveris, omnes mutationes recentiores obrogatae peribunt!</strong>',
+'yourdiff'               => 'Dissimilitudo',
+'copyrightwarning'       => 'Nota bene omnia contributa divulgari sub \'\'$2\'\' (vide singula apud $1).
+Nisi vis verba tua crudelissime recenseri, mutari, et ad libidinem redistribui, noli ea submittere.<br />
+Nobis etiam spondes te esse ipsum horum verborum scriptorem primum, aut ex opere in "dominio publico" exscripsisse.
+<strong>NOLI OPERIBUS SUB IURE DIVULGANDI UTI SINE POTESTATE!</strong>',
+'copyrightwarning2'      => 'Nota bene omnia contributa divulgari sub \'\'$2\'\' (vide singula apud $1).
+Nisi vis verba tua crudelissime recenseri, mutari, et ad libidinem redistribui, noli ea submittere.<br />
+Nobis etiam spondes te esse ipsum horum verborum scriptorem primum, aut ex opere in "dominio publico" exscripsisse.
+<strong>NOLI OPERIBUS SUB IURE DIVULGANDI UTI SINE POTESTATE!</strong>',
+'longpagewarning'        => 'MONITIO: Haec pagina est $1 chilioctetis longa;
+aliquae navigatra paginas longiores quam 32 chiliocteti recensere non possunt.
+Considera paginam in partes minores frangere.',
+'protectedpagewarning'   => '<strong>CAVE: Haec pagina protecta est ut magistratus soli eam recenseant.</strong>',
+'templatesused'          => 'Formulae hac in pagina adhibitae:',
+'templatesusedpreview'   => 'Formulae hoc in praeviso adhibitae:',
+'templatesusedsection'   => 'Formulae hac in parte adhibitae:',
+'template-protected'     => '(protecta)',
+'template-semiprotected' => '(semi-protecta)',
+
+# "Undo" feature
+'undo-summary' => 'abrogans recensionem $1 ab usore [[User:$2|$2]] ([[User talk:$2|Disputatio]] | [[Special:Contributions/$2|conlationes]])',
+
+# Account creation failure
+'cantcreateaccounttitle' => 'Ratio creari non potest',
+'cantcreateaccounttext'  => 'Creatio rationum ab hoc loco IP (<b>$1</b>) obstructa est, probabiliter ob vandalismum iteratum de tua schola aut provisore interretiali.',
+
+# History pages
+'revhistory'          => 'Historia formarum',
+'viewpagelogs'        => 'Vide acta huius paginae',
+'nohistory'           => 'Huic paginae non est historia.',
+'revnotfound'         => 'Emendatio non inventa',
+'revnotfoundtext'     => 'Emendatio quem rogavisti non inventa est. 
+Confirma URL paginae.',
+'loadhist'            => 'Onerans historiam paginae',
+'currentrev'          => 'Emendatio recentissima',
+'revisionasof'        => 'Emendatio ex $1',
+'revision-info'       => 'Emendatio ex $1 ab $2',
+'previousrevision'    => '← Emendatio senior',
+'nextrevision'        => 'Emendatio novior →',
+'currentrevisionlink' => 'Emendatio currens',
+'cur'                 => 'nov',
+'next'                => 'seq',
+'last'                => 'prox',
+'page_first'          => 'prim',
+'page_last'           => 'ult',
+'histlegend'          => 'Selige pro dissimilitudine: indica in botones radiales et "intrare" in claviatura imprime ut conferas.
+
+Titulus: (nov) = dissimilis ab forma novissima, (prox) = dissimilis ab forma proxima, M = recensio minor',
+'deletedrev'          => '[deleta]',
+
+# Revision deletion
+'revisiondelete' => 'Emendationem delere',
+
+# Diffs
+'difference'              => '(Dissimilitudo inter emendationes)',
+'loadingrev'              => 'Onerans emendationem pro diss',
+'editcurrent'             => 'Recensere formam recentissimam huius paginae',
+'compareselectedversions' => 'Conferre versiones selectas',
+'editundo'                => 'abrogare',
+
+# Search results
+'searchresults'         => 'Eventum investigationis',
+'searchresulttext'      => 'Pro plurimis nuntiis de investigatione in {{grammar:ablative|{{SITENAME}}}}, vide [[{{MediaWiki:helppage}}|{{MediaWiki:help}}]].',
+'searchsubtitle'        => "Pro investigatione '''[[:$1]]'''",
+'searchsubtitleinvalid' => "Pro investigatione '''$1'''",
+'badquery'              => 'Quaestio male formata',
+'badquerytext'          => 'Investigatio tua procedere non poterat.
+Fortasse verba minora quam tres litteras longa quaerere conatus es, vel fortasse error in quaestione erat. Conare denuo.',
+'matchtotals'           => 'Investigatio "$1" indicibus $2 rerum 
+et verbis $3 rerum congruit.',
+'noexactmatch'          => "'''Nulla pagina cum titulo \"\$1\" exacto existit.''' Potes [[:\$1|eam creare]].",
+'titlematches'          => 'Exaequata indicibus rerum',
+'notitlematches'        => 'Nulla exaequata',
+'prevn'                 => '$1 superiores',
+'nextn'                 => '$1 proxima',
+'viewprevnext'          => 'Videre ($1) ($2) ($3).',
+'showingresults'        => 'Subter monstrans <b>$1</b> eventibus tenus incipiens ab #<b>$2</b>.',
+'showingresultsnum'     => 'Subter monstrans <b>$3</b> eventus incipiens ab #<b>$2</b>.',
+'nonefound'             => "'''Nota''': investigationes saepe infelices sunt propter verba frequentes huiusmodi \"que\" et \"illo\", aut quod plus unum verba quaerere designavisti (solae paginae qui tota verba investigationis continent in evento apparebit).",
+'powersearch'           => 'Quaerere',
+'powersearchtext'       => 'Quaerere in spatiis nominalibus:<br />$1<br />$2 Monstrare redirectiones<br />Quaerere $3 $9',
+'searchdisabled'        => 'Per {{grammar:accusative|{{SITENAME}}}} ad tempus non potes quaerere. Interea per [http://www.google.com Googlem] quaeras. Nota indices {{grammar:genitive|{{SITENAME}}}} contentorum apud Googlem fortasse antiquiores esse.',
+
+# Preferences page
+'preferences'           => 'Praeferentiae',
+'mypreferences'         => 'Praeferentiae meae',
+'prefsnologin'          => 'Conventum non apertum',
+'prefsnologintext'      => '[[Special:Userlogin|Conventum aperire]] debes ut praeferentiae tuae perscribere.',
+'prefsreset'            => 'Praeferentiae tuae reperscriptus est.',
+'qbsettings'            => 'Figuratio claustri celeris',
+'qbsettings-none'	=> 'Nullus',
+'qbsettings-fixedleft'	=> 'Constituere a sinistra',
+'qbsettings-fixedright'	=> 'Constituere a dextra',
+'qbsettings-floatingleft'	=> 'Innens a sinistra',
+'qbsettings-floatingright'	=> 'Innens a dextra',
+'changepassword'        => 'Mutare tesseram',
+'skin'                  => 'Aspectum',
+'math'                  => 'Interpretatio artis mathematicae',
+'dateformat'            => 'Forma diei',
+'datedefault'           => 'Nullum praeferentiae',
+'datetime'              => 'Dies et tempus',
+'math_failure'          => 'Excutare non potest',
+'math_unknown_error'    => 'error ignotus',
+'math_unknown_function' => 'functio ignota',
+'prefs-personal'        => 'Minutiae rationis',
+'prefs-rc'              => 'Nuper mutata',
+'prefs-watchlist'       => 'Paginae custoditae',
+'prefs-watchlist-days'  => 'Numerus dierum displicandus in paginis tuis custoditis:',
+'prefs-watchlist-edits' => 'Numerus recensionum displicandus in paginis tuis custoditis extensis:',
+'saveprefs'             => 'Servare praeferentias',
+'resetprefs'            => 'Reddere praeferentias',
+'oldpassword'           => 'Tessera vetus:',
+'newpassword'           => 'Tessera nova:',
+'retypenew'             => 'Adfirmare tesseram novam:',
+'textboxsize'           => 'Mensura capsae verbi',
+'rows'                  => 'Lineae:',
+'columns'               => 'Columnae:',
+'searchresultshead'     => 'Figuratio eventorum investigationis',
+'resultsperpage'        => 'Eventa per paginam:',
+'contextlines'          => 'Lineae per eventum:',
+'contextchars'          => 'Litterae contexti per lineam:',
+'stubthreshold'         => 'Limen ostentationis rei parvae:',
+'recentchangescount'    => 'Quantum rerum in nuper mutatis:',
+'savedprefs'            => 'Praeferentiae tuae servatae sunt.',
+'timezonetext'          => 'Scribere numerum horae inter horam tuam et illam moderatri (UTC).',
+'localtime'             => 'Hora indigena',
+'timezoneoffset'        => 'Dissimilitudo cinguli horae',
+'servertime'            => 'Hora moderatri nunc est',
+'guesstimezone'         => 'Hora ex navigatro scribere',
+'allowemail'            => 'Sinere litteras electronicas mitti tuae inscriptioni electronicae',
+'defaultns'             => 'Quaerere per haec spatia nominalia a defalta:',
+'files'                 => 'Fasciculi',
+
+# Groups
+'group-sysop'      => 'Magistratus',
+'group-bureaucrat' => 'Grapheocrates',
+
+'group-sysop-member'      => 'Magistratus',
+'group-bureaucrat-member' => 'Grapheocrates',
+
+'grouppage-bot'        => '{{ns:project}}:Bots',
+'grouppage-sysop'      => '{{ns:project}}:Magistratus',
+'grouppage-bureaucrat' => '{{ns:project}}:Grapheocrates',
+
+# User rights log
+'rightslog'     => 'Index mutationum iuribus usorum',
+'rightslogtext' => 'Haec est index mutationum iuribus usorum.',
+
+# Recent changes
+'changes'           => 'mutata',
+'recentchanges'     => 'Nuper mutata',
+'recentchangestext' => 'Inspice mutationes recentes huic vici in hac pagina.',
+'rcnote'            => 'Subter sunt <strong>$1</strong> nuperrime mutata in <strong>$2</strong> diebus proximis, ad $3 tempus.',
+'rcnotefrom'        => 'Subter sunt <b>$1</b> nuperrime mutata in proxima <b>$2</b> die.',
+'rclistfrom'        => 'Monstrare mutata nova incipiens ab $1',
+'rcshowhideminor'   => '$1 recensiones minores',
+'rcshowhideliu'     => '$1 usores notos',
+'rcshowhideanons'   => '$1 usores ignotos',
+'rcshowhidemine'    => '$1 conlationes meas',
+'rclinks'           => 'Monstrare $1 nuperrime mutata in $2 diebus proximis.<br />$3',
+'diff'              => 'diss',
+'hide'              => 'celare',
+'show'              => 'monstrare',
+'rc_categories_any' => 'Ulla',
+
+# Upload
+'upload'            => 'Fasciculos onerare',
+'uploadbtn'         => 'Fasciculum onerare',
+'reupload'          => 'Reonerare',
+'reuploaddesc'      => 'Redire ad formulam onerationis.',
+'uploadnologin'     => 'Conventum non apertum est',
+'uploadnologintext' => '[[Special:Userlogin|Aperire conventum]] debes ut fasciculos oneres.',
+'uploaderror'       => 'Error onerati',
+'uploadtext'        => "Utere formam subter ad fasciculos onerandos. Ut videas aut quaeras fasciculos oneratos antea, adi [[Special:Imagelist|indicem fasciculorum oneratorum]].
+Onerata et deleta in [[Special:Log/upload|notatione oneratorum]] notata sunt.
+
+Ad imaginem includendum in pagina, utere nexum
+'''<nowiki>[[</nowiki>{{ns:image}}:File.jpg]]''' aut
+'''<nowiki>[[</nowiki>{{ns:image}}:File.png|verba alia]]''' aut
+'''<nowiki>[[</nowiki>{{ns:media}}:File.ogg]]''' pro nexum directum ad fasciculum.",
+'uploadlog'         => 'Notatio onerati',
+'uploadlogpage'     => 'Notatio onerati',
+'uploadlogpagetext' => 'Subter est index fasciculorum recentissimorum oneratorum.',
+'filename'          => 'Nomen fasciculi',
+'filedesc'          => 'Descriptio',
+'fileuploadsummary' => 'Descriptio:',
+'filestatus'        => 'Locus verborum privatorum',
+'filesource'        => 'Fons',
+'uploadedfiles'     => 'Fasciculi onerati',
+'ignorewarning'     => 'Ignorare monita et servare fasciculum.',
+'ignorewarnings'    => 'Ignorare monita omnes',
+'minlength'         => 'Nomina fasciculorum saltem tres litteras habere debent.',
+'badfilename'       => 'Nomen fasciculi ad "$1" mutatum est.',
+'badfiletype'       => '".$1" forma fasciculi non est suasa.',
+'large-file'        => 'Suasum est ut fasciculi $1 magnitudine non excedant; magnitudo huius fasciculi est $2.',
+'successfulupload'  => 'Oneratum perfectum',
+'uploadwarning'     => 'Monitus onerati',
+'savefile'          => 'Servare fasciculum',
+'uploadedimage'     => 'oneravit "[[$1]]"',
+'uploadvirus'       => 'Fasciculi huic est virus! Singula: $1',
+'watchthisupload'   => 'Custodire hanc paginam',
+
+# Image list
+'imagelist'           => 'Fasciculi',
+'imagelisttext'       => "Subter est index {{plural:$1|'''unius''' fasciculi|'''$1''' fasciculorum}} digestus $2.",
+'getimagelist'        => 'onerans indicem fasciculorum',
+'ilsubmit'            => 'Quaerere',
+'byname'              => 'ex nomine',
+'bydate'              => 'ex die',
+'bysize'              => 'ex magnitudine',
+'imgfile'             => 'fasciculus',
+'imglegend'           => 'Titulus: (desc) = monstrare vel recensere descriptionem fasciculi.',
+'imghistory'          => 'Historia fasciculi',
+'deleteimgcompletely' => 'Delere omnes emendationes huius fasciculi',
+'imghistlegend'       => 'Titulus: (nov) = hic est fasciculus recentissimus, (del) = delere hanc formam veterem, (rev) = reverte ad hanc formam veterem.
+<br /><i>Premere in diem ut fasciculum illo die oneratum vides.</i>',
+'imagelinks'          => 'Nexus',
+'linkstoimage'        => 'Paginae sequentes ad hunc fasciculum nectunt:',
+'nolinkstoimage'      => 'Nullae paginae ad hunc fasciculum nectunt.',
+'noimage'             => 'Fasciculus huius nominis non est. $1 potes.',
+'noimage-linktext'    => 'Fasciculum huius nominis onerare',
+
+# MIME search
+'mimesearch' => 'Quaerere per MIME',
+
+# Unwatched pages
+'unwatchedpages' => 'Paginae incustoditae',
+
+# List redirects
+'listredirects' => 'Redirectiones',
+
+# Unused templates
+'unusedtemplates' => 'Formulae non in usu',
+
+# Random redirect
+'randomredirect' => 'Redirectio fortuita',
+
+# Statistics
+'statistics'    => 'Census',
+'sitestats'     => 'Census {{grammar:genitive|{{SITENAME}}}}',
+'userstats'     => 'Census usorum',
+'sitestatstext' => "Basis datorum '''$1''' paginas habet.
+Hic numerus paginas disputationum includit, paginas de {{grammar:ablative|{{SITENAME}}}}, stipulas, paginas redirectionum, et paginas alias quae probabiliter non sunt paginae contenta habentes legitimae.
+His exclusis, sunt '''$2''' paginae quae contenta recta habere putantur.
+
+'''$8''' imagines oneratae sunt.
+
+Paginae '''$3''' visae sunt, et '''$4''' recensiones paginarum factae sunt 
+ab initio huius vici.
+Hoc aequat fere '''$5''' mutationes per paginam, et '''$6''' visae per mutationem. 
+
+'''$7''' operationes etiam exspectant perfacier.",
+'userstatstext' => "'''$1''' usores relati sunt,
+quorum '''$2''' (vel '''$4%''') sunt $5.",
+
+'disambiguations'      => 'Paginae disambiguationis',
+'disambiguationspage'  => 'Template:Discretiva',
+'disambiguations-text' => "Paginae subsequentes ad '''paginam discretivam''' nectunt. Ad aptam paginam nectere debent.<br />Pagina discretivam esse putatur si formulam adhibet ad quem [[MediaWiki:disambiguationspage]] nectit.",
+
+'doubleredirects' => 'Redirectiones duplices',
+
+'brokenredirects'        => 'Redirectiones fractae',
+'brokenredirectstext'    => 'Redirectiones sequentes ad paginas inexistentes nectunt:',
+'brokenredirects-edit'   => '(recensere)',
+'brokenredirects-delete' => '(delere)',
+
+# Miscellaneous special pages
+'nbytes'                  => '$1 {{PLURAL:$1|octetum|octeti}}',
+'ncategories'             => '$1 {{PLURAL:$1|categoria|categoriae}}',
+'nlinks'                  => '$1 {{PLURAL:$1|nexus|nexus}}',
+'nrevisions'              => '$1 {{PLURAL:$1|emendatio|emendationes}}',
+'lonelypages'             => 'Paginae non annexae',
+'uncategorizedpages'      => 'Paginae sine categoriis',
+'uncategorizedcategories' => 'Categoriae sine categoriis',
+'uncategorizedimages'     => 'Fasciculi sine categoriis',
+'unusedcategories'        => 'Categoriae non in usu',
+'unusedimages'            => 'Fasciculi non in usu',
+'popularpages'            => 'Paginae saepe monstratae',
+'wantedcategories'        => 'Categoriae desideratae',
+'wantedpages'             => 'Paginae desideratae',
+'mostlinked'              => 'Paginae maxime annexae',
+'mostlinkedcategories'    => 'Categoriae maxime annexae',
+'mostcategories'          => 'Paginae plurimis categoriis',
+'mostimages'              => 'Fasciculi maxime annexi',
+'mostrevisions'           => 'Paginae plurimum mutatae',
+'allpages'                => 'Paginae omnes',
+'prefixindex'             => 'Quaerere per praefixa',
+'randompage'              => 'Pagina fortuita',
+'shortpages'              => 'Paginae breves',
+'longpages'               => 'Paginae longae',
+'deadendpages'            => 'Paginae sine nexu',
+'deadendpagestext'        => 'Paginae hae sequentes non nectunt ad alias paginas ullas.',
+'protectedpages'          => 'Paginae protectae',
+'protectedpagestext'      => 'Paginae sequentes protectae sunt a movendo ac recensendo',
+'listusers'               => 'Usores',
+'specialpages'            => 'Paginae speciales',
+'spheading'               => 'Paginae speciales',
+'restrictedpheading'      => 'Paginae speciales propriae',
+'recentchangeslinked'     => 'Nuper mutata annexorum',
+'rclsub'                  => '(Paginis nexis ex "$1")',
+'newpages'                => 'Paginae novae',
+'newpages-username'       => 'Nomen usoris:',
+'ancientpages'            => 'Paginae veterrimae',
+'intl'                    => 'Nexus inter linguas',
+'move'                    => 'Movere',
+'movethispage'            => 'Movere hanc paginam',
+
+# Book sources
+'booksources' => 'Librorum fontes',
+
+'categoriespagetext' => 'Huic vici sunt hae categoriae.',
+'userrights'         => 'Usorum potestas',
+'alphaindexline'     => '$1 ad $2',
+'version'            => 'Versio',
+'log'                => 'Acta',
+'alllogstext'        => 'Ostentantur mixte indices onerationum, deletionum, protectionum, obstructionum, et administratorum.
+Adspectum graciliorem potes facere modum indicum, nomen usoris, vel paginam petitam seligendo.',
+
+# Special:Allpages
+'nextpage'          => 'Pagina proxima ($1)',
+'prevpage'          => 'Pagina superior ($1)',
+'allpagesfrom'      => 'Monstrare paginas ab:',
+'allarticles'       => 'Omnes paginae',
+'allinnamespace'    => 'Omnes paginae (in spatio nominali $1)',
+'allnotinnamespace' => 'Omnes paginae (quibus in spatio nominali $1 exclusis)',
+'allpagesprev'      => 'Superior',
+'allpagesnext'      => 'Proxima',
+'allpagessubmit'    => 'Ire',
+'allpagesprefix'    => 'Monstrare paginas quibus est praeverbium:',
+'allpagesbadtitle'  => 'Nomen paginae datum fuit invalidum aut praverbium interlinguale vel interviciale habuit. Fortasse insunt una aut plus litterarum quae in titulis non possunt inscribier.',
+
+# E-mail user
+'emailuser'       => 'Litteras electronicas usori mittere',
+'emailpage'       => 'Mittere litteras electronicas huic usori',
+'emailpagetext'   => 'Si hic usor inscriptionem electronicam ratum in praeferentias usorum eius dedit, forma subter nuntium mittet.
+Inscriptio electronica qui in praeferentiis tuis dedis ut "Ab" inscriptione apparebit. Hoc modo usor tibi respondere poterit.',
+'defemailsubject' => '{{SITENAME}} - Litterae electronicae',
+'noemailtitle'    => 'Nulla inscriptio electronica',
+'noemailtext'     => 'Hic usor inscriptionem electronicam ratam non dedit, aut nuntia ab aliis usoribus non vult.',
+'emailfrom'       => 'Ab',
+'emailto'         => 'Ad',
+'emailsubject'    => 'Res',
+'emailmessage'    => 'Nuntium',
+'emailsend'       => 'Mittere',
+'emailsent'       => 'Litterae electronicae missae sunt',
+'emailsenttext'   => 'Nuntium tuum missum est.',
+
+# Watchlist
+'watchlist'            => 'Paginae custoditae',
+'mywatchlist'            => 'Paginae custoditae',
+'watchlistfor'         => "(pro usore '''$1''')",
+'nowatchlist'          => 'Nullas paginas custodis.',
+'watchlistanontext'    => 'Necesse est $1 ad indicem paginarum custoditarum inspiciendum vel recensendum.',
+'clearwatchlist'       => 'Indicem paginarum custoditarum purgare',
+'watchlistcleartext'   => 'Certus esne ut has paginas removere vis?',
+'watchnologin'         => 'Conventum non est apertum',
+'watchnologintext'     => '[[Special:Userlogin|Conventum aperire]] debes ut indicem paginarum custoditarum mutes.',
+'addedwatch'           => 'Pagina custodita',
+'addedwatchtext'       => "Pagina \"[[:\$1]]\" in [[Special:Watchlist|paginas tuas custoditas]] addita est. Mutationes posthac huic paginae et paginae disputationis ibi notabuntur, et pagina '''litteris pinguibus''' apparebit in [[Special:Recentchanges|nuper mutatorum]] indice, ut sit facilius electu.
+
+Si paginam ex indice paginarum custoditarum removere vis, imprime \"decustodire\" ab summa pagina.",
+'removedwatch'         => 'Non iam custodita',
+'removedwatchtext'     => 'Pagina "[[:$1]]" non iam custodita est.',
+'watch'                => 'custodire',
+'watchthispage'        => 'Custodire hanc paginam',
+'unwatch'              => 'Decustodire',
+'unwatchthispage'      => 'Abrogare custoditum',
+'notanarticle'         => 'Res non est',
+'watchnochange'        => 'Nullae paginarum custoditarum tuarum recensitae sunt in hoc tempore.',
+'watchdetails'         => '* {{PLURAL:$1|$1 pagina custodita|$1 paginae custoditae}} sine paginis disputationis
+* [[Special:Watchlist/edit|Monstrare et recensere indicem totum paginarum custoditarum]]
+* [[Special:Watchlist/clear|{{MediaWiki:clearwatchlist}}]]',
+'watchmethod-recent'   => 'recensita recenta quaerens pro pagina custodita',
+'watchmethod-list'     => 'paginas custoditas quaerens pro recensitis recentibus',
+'removechecked'        => 'Removere paginas selectas ex indice paginarum custoditarum',
+'watchlistcontains'    => 'Index paginarum custoditarum tuus $1 paginas habet.',
+'watcheditlist'        => 'Hic est litterarum ordine index tuarum paginarum custoditarum. Indica in capsis paginarum quas removere velis "removere" imprime. Nota quoque disputationes paginarum remotarum removendas esse.',
+'removingchecked'      => 'Removens res notatas ex indice paginarum custoditarum...',
+'couldntremove'        => "Pagina '$1' removeri non potuit...",
+'iteminvalidname'      => "Aerumna cum pagina '$1', nomen non est rectum...",
+'wlnote'               => 'Subter proximae $1 mutationes sunt in proximis <b>$2</b> horis.',
+'wlshowlast'           => 'Monstrare proximas $1 horas $2 dies $3',
+'wlsaved'              => 'Haec est versio servata indicis paginarum custoditarum tuae.',
+'watchlist-show-bots'  => 'Monstrare recensiones automatarias',
+'watchlist-hide-bots'  => 'Celare recensiones automatarias',
+'watchlist-show-own'   => 'Monstrare recensiones meas',
+'watchlist-hide-own'   => 'Celare recensiones meas',
+'watchlist-show-minor' => 'Monstrare recensiones minores',
+'watchlist-hide-minor' => 'Celare recensiones minores',
+'wldone'               => 'Factum.',
+
+# Displayed when you click the "watch" button and it's in the process of watching
+'watching'   => 'Custodiens...',
+'unwatching' => 'Decustodiens...',
+
+'changed' => 'mutata',
+'created' => 'creata',
+
+# Delete/protect/revert
+'deletepage'             => 'Delere paginam',
+'confirm'                => 'Adfirmare',
+'excontent'              => "contenta erant: '$1'",
+'excontentauthor'        => "contenta erant: '$1' (et contributor unicus erat '[[Special:Contributions/$2|$2]]')",
+'exbeforeblank'          => "contenta priusquam pagina facta vacua erant: '$1'",
+'exblank'                => 'pagina vacua erat',
+'confirmdelete'          => 'Adfirmare deletionem',
+'deletesub'              => '(Deletio de "$1")',
+'historywarning'         => 'Monitio: Pagina quam delere vis historiam habet:',
+'confirmdeletetext'      => 'Paginam imaginemve perpetuo delebis ex base datorum, cum tota historia eius.
+Adfirma quaeso te paginam delere velle, consequentias intellere, et deletionem  [[{{MediaWiki:policy-url}}|consilio]] congruere.',
+'actioncomplete'         => 'Actum perfectum',
+'deletedtext'            => '"$1" deletum est.
+Vide $2 pro indice deletionum recentum.',
+'deletedarticle'         => 'delevit "[[$1]]"',
+'dellogpage'             => 'Index deletionum',
+'dellogpagetext'         => 'Subter est index deletionum recentissimarum.',
+'deletionlog'            => 'index deletionum',
+'reverted'               => 'Reversum ad emendationem proximam',
+'deletecomment'          => 'Ratio deletionis',
+'imagereverted'          => 'Prospere reversum est ad formam proximam.',
+'rollback'               => 'Reverti mutationes',
+'rollback_short'         => 'Reverti',
+'rollbacklink'           => 'reverti',
+'rollbackfailed'         => 'Reversum defecit',
+'cantrollback'           => 'Haec non potest reverti; conlator proximus solus auctor huius rei est.',
+'alreadyrolled'          => 'Ad mutationem proximam paginae [[:$1]] ab usore [[User:$2|$2]] ([[User talk:$2|Disputatio]]) reverti non potest; alius paginam iam recensuit vel revertit.
+
+Mutatio proxima ab usore [[User:$3|$3]] ([[User talk:$3|Disputatio]]) effecta est.',
+'editcomment'            => 'Dictum recensiti erat: "<i>$1</i>".', # only shown if there is an edit comment
+'revertpage'             => 'Reverti recensiones ab usore [[User:$2|$2]] ([[User talk:$2|Disputatio]] | [[Special:Contributions/$2|conlationes]]) ad mutationem proximam ab [[User:$1|$1]]',
+'protectlogpage'         => 'Index protectionum',
+'protectlogtext'         => 'Subter est index protectionum et deprotectionum paginarum. Vide [[Special:Protectedpages|indicem paginarum nunc protectarum]].',
+'protectedarticle'       => 'protegit "[[$1]]"',
+'unprotectedarticle'     => 'deprotegit "[[$1]]"',
+'protectsub'             => '(Protegere "$1")',
+'confirmprotecttext'     => 'Re vera hanc paginam visne protegere?',
+'confirmprotect'         => 'Protectionem adfirmare',
+'protectmoveonly'        => 'Protegere a motibus solum',
+'protectcomment'         => 'Ratio protegendo',
+'protectexpiry'          => 'Exitus',
+'protect_expiry_invalid' => 'Tempus exeundo invalidum fuit.',
+'unprotectsub'           => '(Deprotegere "$1")',
+'confirmunprotecttext'   => 'Re vera hanc paginam visne deprotegere?',
+'confirmunprotect'       => 'Deprotectionem adfirmare',
+'unprotectcomment'       => 'Ratio deprotegendo',
+'protect-level-sysop'    => 'Magistratus soli',
+'protect-expiring'       => 'exit $1',
+
+# Restrictions (nouns)
+'restriction-edit' => 'Recensio',
+'restriction-move' => 'Motio',
+
+# Restriction levels
+'restriction-level-sysop'         => 'protecta',
+'restriction-level-autoconfirmed' => 'semi-protecta',
+
+# Undelete
+'undelete'               => 'Paginam restituere',
+'undeletepage'           => 'Videre et restituere paginas deletas',
+'viewdeletedpage'        => 'Paginas deletas inspicere',
+'undeletepagetext'       => 'Paginae sequentes deletae sunt sed in tabulis sunt et eas restituere posse. Tabulae nonnumquam deletae sunt.',
+'undeletearticle'        => 'Paginam deletam restituere',
+'undeleterevisions'      => '$1 {{PLURAL:$1|emendatio servata|emendationes servatae}}',
+'undeletehistory'        => 'Si paginam restituis, tota recensita restituentur ad historiam.
+Si pagina nova cum ipso nomine post deletionem creata est, recensita restituta in historia prior apparebit, et recensitum recentissimum paginae necessario non renovabitur.',
+'undelete-revision'      => 'Emendatio deleta paginae $1 ex $2:',
+'undeletebtn'            => 'Restituere',
+'undeletedarticle'       => 'restituit "[[$1]]"',
+'cannotundelete'         => 'Abrogatio deletionis fefellit; fortasse alterus iam paginam restituit.',
+'undelete-header'        => 'Pro paginis nuper deletis, vide [[Special:Log/delete|indicem deletionum]].',
+'undelete-search-box'    => 'Quaerere inter paginas iam deletas',
+'undelete-search-prefix' => 'Monstrare paginas quibus est praeverbium:',
+'undelete-search-submit' => 'Quaerere',
+'undelete-no-results'    => 'Nullae paginae inventae sunt ex his indicibus deletionum.',
+
+# Namespace form on various pages
+'namespace' => 'Spatium nominale:',
+'invert'    => 'Selectionem invertere',
+
+# Contributions
+'contributions' => 'Conlationes usoris',
+'mycontris'     => 'Conlationes meae',
+'contribsub2'    => 'Pro $1 ($2)',
+'nocontribs'    => 'Nullae mutationes inventae sunt ex his indiciis.',
+'ucnote'        => 'Subter sunt <b>$1</b> mutationes proximae huius usoris in <b>$2</b> diebus proximis.',
+'uclinks'       => 'Videre $1 mutationes proximas; videre $2 dies proximos.',
+'uctop'         => ' (vertex)',
+'newbies'       => 'tirones',
+
+'sp-contributions-blocklog' => 'Acta obstructionum',
+
+# What links here
+'whatlinkshere' => 'Nexus ad paginam',
+'notargettitle' => 'Nullus scopus',
+'notargettext'  => 'Paginam aut usorem non notavisti.',
+'linklistsub'   => '(Index nexuum)',
+'linkshere'     => "Paginae sequentes ad '''[[:$1]]''' nectunt:",
+'nolinkshere'   => "Nullae paginae ad '''[[:$1]]''' nectunt.",
+'isredirect'    => 'pagina redirectionis',
+'istemplate'    => 'inclusio',
+
+# Block/unblock
+'blockip'                  => 'Usorem obstruere',
+'blockiptext'              => 'Forma infera utere ut quendam usorem vel locum IP obstruas ne plus scribere potest.
+Hoc non nisi secundum [[{{MediaWiki:policy-url}}|consilium]] fieri potest.
+Rationem certam subscribe.',
+'ipaddress'                => 'Locus IP',
+'ipadressorusername'       => 'Locus IP aut nomen usoris',
+'ipbexpiry'                => 'Exitus',
+'ipbreason'                => 'Ratio',
+'ipbsubmit'                => 'Obstruere hunc locum',
+'badipaddress'             => 'Locus IP male formatus',
+'blockipsuccesssub'        => 'Locus prospere obstructus est',
+'blockipsuccesstext'       => '[[Special:Contributions/$1|$1]] obstructus est.
+<br />Vide [[Special:Ipblocklist|indicem usorum obstructorum]] ut obstructos revideas.',
+'ipb-unblock-addr'         => 'Deobstruere $1',
+'ipb-unblock'              => 'Deobstruere nomen usoris vel locum IP',
+'unblockip'                => 'Deobstruere locum IP',
+'unblockiptext'            => 'Formam inferam usere ut locum IP deobstruere.',
+'ipusubmit'                => 'Deobstruere hanc locum',
+'ipblocklist'              => 'Usores obstructi',
+'blocklistline'            => '$1, $2 obstruxit $3 (exire $4)',
+'infiniteblock'            => 'infinita',
+'expiringblock'            => 'exit $1',
+'anononlyblock'            => 'solum usores ignoti',
+'createaccountblock'       => 'Creatio rationum obstructa',
+'blocklink'                => 'obstruere',
+'unblocklink'              => 'deobstruere',
+'contribslink'             => 'conlationes',
+'autoblocker'              => 'Obstructus es automatice quia "[[User:$1|$1]]" nuper tuum locum IP adhibuit. Ratio data ob obstructionem usoris $1 est "\'\'\'$2\'\'\'".',
+'blocklogpage'             => 'Index obstructionum',
+'blocklogentry'            => 'obstruxit "[[$1]]", exire $2 $3',
+'blocklogtext'             => 'Hic est index actorum obstructionis deobstructionisque. Loci IP qui automatice obstructi sunt non enumerantur. Vide [[Special:Ipblocklist|indicem usorum locorumque IP obstructorum]] pro indice toto.',
+'unblocklogentry'          => 'deobstruxit "$1"',
+'block-log-flags-nocreate' => 'creatio rationum obstructa',
+'ipb_expiry_invalid'       => 'Tempus exeundo invalidum fuit.',
+'proxyblocksuccess'        => 'Factum.',
+
+# Developer tools
+'lockdb'              => 'Basem datorum obstruere',
+'unlockdb'            => 'Basem datorum deobstruere',
+'lockdbtext'          => 'Obstructio basis datorum potestatem omnium usorum suspendebit paginas recensendi et praeferentiarum earum et indicem paginarum custoditarum mutandi.
+Adfirma te basem datorum obstruere velle, et te dein basem datorum deobstruendum.',
+'lockconfirm'         => 'Ita, vere basem datorum obstruere volo.',
+'unlockconfirm'       => 'Ita, vere basem datorum deobstruere volo.',
+'lockbtn'             => 'Basem datorum obstruere',
+'unlockbtn'           => 'Basem datorum deobstruere',
+'locknoconfirm'       => 'Capsam non notavis.',
+'lockdbsuccesssub'    => 'Basis datorum prospere obstructa est',
+'unlockdbsuccesssub'  => 'Basis datorum prospere deobstructa est',
+'lockdbsuccesstext'   => 'Basis datorum obstructa est.
+<br />Memento eam dein [[Special:Unlockdb|deobstruere]].',
+'unlockdbsuccesstext' => 'Basis datorum deobstructa est.',
+'databasenotlocked'   => 'Basis datorum non obstructa est.',
+
+# Move page
+'movepage'                => 'Paginam movere',
+'movepagetext'            => "Formam inferam utere ad paginam renominandum et ad historiam eius ad nomen novum movendum.
+Index vetus paginam redirectionis ad indicem novum fiet.
+Nexus ad paginam veterem non mutabuntur;
+redectiones duplices aut fractas quaerere et figere debebis.
+
+Pagina '''non''' movebitur si pagina sub indice novo iam est, nisi est vacua aut pagina redirectionis et nullam historiam habet.
+
+<b>MONITUM!</b>
+Haec mutatio vehemens et improvisa potest esse pro pagina populare;
+adfirma te consequentias intellegere antequam procedis.",
+'movepagetalktext'        => "Pagina disputationis huius paginae, si est, etiam necessario motabitur '''nisi''':
+
+*Disputatio sub paginae novae nomine contenta habet, aut
+*Capsam subter non nota.
+
+Ergo manu necesse disputationes motare vel contribuere erit, si vis.",
+'movearticle'             => 'Paginam movere',
+'movenologin'             => 'Conventum non apertum',
+'movenologintext'         => 'Rationem usoris habere et [[Special:Userlogin|conventum aperire]] debes ad movendum paginam.',
+'newtitle'                => 'Ad indicem novum',
+'move-watch'              => 'Hanc paginam custodire',
+'movepagebtn'             => 'Paginam movere',
+'pagemovedsub'            => 'Pagina mota est',
+'pagemovedtext'           => 'Pagina "[[$1]]" mota est ad "[[$2]]".',
+'articleexists'           => "'''Non licet hanc paginam movere:''' pagina cum hoc nomine iam est, aut invalidum est nomen electum. 
+
+Quaesumus, nomen alterum elege aut opem pete [[{{MediaWiki:grouppage-sysop}}|magistratum]].",
+'talkexists'              => "'''Pagina prospere mota est, sed pagina disputationis not moveri potuit quia iam est pagina disputationis sub titulo novo. Disputationes recensendo iunge.'''",
+'movedto'                 => 'mota ad',
+'movetalk'                => 'Movere etiam paginam disputationis',
+'talkpagemoved'           => 'Pagina disputationis etiam mota est.',
+'talkpagenotmoved'        => 'Pagina disputationis <strong>non</strong> mota est.',
+'1movedto2'               => 'movit [[$1]] ad [[$2]]',
+'1movedto2_redir'         => 'movit [[$1]] ad [[$2]] praeter redirectionem',
+'movereason'              => 'Ratio',
+'revertmove'              => 'reverti',
+'delete_and_move'         => 'Delere et movere',
+'delete_and_move_text'    => '==Deletio necesse est==
+
+Quaesitum "[[$1]]" etiam existit. Vin tu eam delere ut moveas?',
+'delete_and_move_confirm' => 'Ita, paginam delere',
+'delete_and_move_reason'  => 'Deleta ut moveatur',
+
+# Export
+'export'        => 'Paginas exportare',
+'export-submit' => 'Exportare',
+
+# Namespace 8 related
+'allmessages'               => 'Nuntia systematis',
+'allmessagesname'           => 'Nomen',
+'allmessagesdefault'        => 'Textus originalis',
+'allmessagescurrent'        => 'Textus recens',
+'allmessagestext'           => 'Hic est index omnium nuntiorum in MediaWiki.',
+'allmessagesnotsupportedUI' => 'Apud hunc situm linguam <b>$1</b> tuae interfaciei non sustinet pagina {{ns:special}}:Allmessages.',
+'allmessagesnotsupportedDB' => "'''{{ns:special}}:Allmessages''' non adhibier potest, quia '''\$wgUseDatabaseMessages''' non iam agitur.",
+'allmessagesfilter'         => 'Colum nominibus nuntiorum:',
+'allmessagesmodified'       => 'Ea modificata sola monstrare',
+
+# Special:Import
+'import'                     => 'Paginas importare',
+'import-interwiki-submit'    => 'Importare',
+'import-interwiki-namespace' => 'Transferre paginas in spatium nominale:',
+'importbadinterwiki'         => 'Nexus intervicus malus',
+
+# Tooltip help for the actions
+'tooltip-pt-userpage'             => 'Pagina usoris mea',
+'tooltip-pt-mytalk'               => 'Disputatum meum',
+'tooltip-pt-preferences'          => 'Praeferentiae meae',
+'tooltip-pt-watchlist'            => 'Paginae quae custodis ut eorum mutationes facilius vides',
+'tooltip-pt-mycontris'            => 'Index conlationum mearum',
+'tooltip-pt-login'                => 'Te conventum aperire hortamur, non autem requisitum',
+'tooltip-pt-anonlogin'            => 'Te conventum aperire hortamur, non autem requisitum',
+'tooltip-pt-logout'               => 'Conventum concludere',
+'tooltip-ca-talk'                 => 'Disputatio de hac pagina',
+'tooltip-ca-edit'                 => 'Hanc paginam recensere potes. Quaesumus praevisum inspice antequam servas.',
+'tooltip-ca-addsection'           => 'Huic disputationi adnotare',
+'tooltip-ca-viewsource'           => 'Haec pagina protecta est. Fontem inspicere potes.',
+'tooltip-ca-history'              => 'Emendationes huius paginae veteres',
+'tooltip-ca-protect'              => 'Protegere hanc paginam',
+'tooltip-ca-delete'               => 'Delere hanc paginam',
+'tooltip-ca-undelete'             => 'Restituere emendationes huic paginae conlatas antequam haec pagina deleta esset',
+'tooltip-ca-move'                 => 'Movere hanc paginam',
+'tooltip-ca-watch'                => 'Addere hanc paginam tuis paginis custoditis',
+'tooltip-ca-unwatch'              => 'Removere hanc paginam ex tuis paginis custoditis',
+'tooltip-search'                  => 'Quaerere aliquid in {{grammar:ablative|{{SITENAME}}}}',
+'tooltip-p-logo'                  => 'Pagina prima',
+'tooltip-n-mainpage'              => 'Ire ad paginam primam',
+'tooltip-n-portal'                => 'De hoc incepto',
+'tooltip-n-currentevents'         => 'Eventa novissima',
+'tooltip-n-recentchanges'         => 'Index nuper mutatorum in hac vici',
+'tooltip-n-randompage'            => 'Ire ad paginam fortuitam',
+'tooltip-n-help'                  => 'Adiutatum de hoc vici',
+'tooltip-n-sitesupport'           => 'Adiuvare hunc vici',
+'tooltip-t-whatlinkshere'         => 'Index paginarum quae hic nectunt',
+'tooltip-t-recentchangeslinked'   => 'Nuper mutata in paginis quibus haec pagina nectit',
+'tooltip-feed-rss'                => 'RSS feed',
+'tooltip-feed-atom'               => 'Atom feed',
+'tooltip-t-contributions'         => 'Videre conlationes huius usoris',
+'tooltip-t-emailuser'             => 'Mittere litteras electronicas huic usori',
+'tooltip-t-upload'                => 'Fasciculos vel imagines onerare',
+'tooltip-t-specialpages'          => 'Index paginarum specialium',
+'tooltip-ca-nstab-main'           => 'Videre paginam',
+'tooltip-ca-nstab-user'           => 'Videre paginam usoris',
+'tooltip-ca-nstab-special'        => 'Haec est pagina specialis. Pagina ipsa recenseri non potest.',
+'tooltip-ca-nstab-project'        => 'Videre paginam inceptorum',
+'tooltip-ca-nstab-image'          => 'Videre paginam imaginis',
+'tooltip-ca-nstab-mediawiki'      => 'Videre nuntium systematis',
+'tooltip-ca-nstab-template'       => 'Videre formulam',
+'tooltip-ca-nstab-help'           => 'Videre paginam adiutatam',
+'tooltip-ca-nstab-category'       => 'Videre paginam categoriae',
+'tooltip-minoredit'               => 'Indicare hanc recensionem minorem',
+'tooltip-save'                    => 'Servare mutationes tuas',
+'tooltip-preview'                 => 'Praevidere mutationes tuas, quaesumus hoc utere antequam servas!',
+'tooltip-diff'                    => 'Monstrare mutationes textui tuas',
+'tooltip-compareselectedversions' => 'Videre dissimilitudinem inter ambas emendationes selectas huius paginae',
+'tooltip-watch'                   => 'Addere hanc paginam tuis paginis custoditis',
+'tooltip-recreate'                => 'Recreare hanc paginam etiamsi deleta est',
+
+# Attribution
+'anonymous'        => 'Usor ignotus {{grammar:genitive|{{SITENAME}}}}',
+'lastmodifiedatby' => 'Ultima mutatio: $2, $1 ab $3.', # $1 date, $2 time, $3 user
+'and'              => 'et',
+
+# Spam protection
+'subcategorycount'     => 'Huic categoriae {{PLURAL:$1|est una subcategoria|sunt $1 subcategoriae}}.',
+'categoryarticlecount' => 'Huic categoriae {{PLURAL:$1|est una pagina|sunt $1 paginae}}.',
+'category-media-count' => 'Huic categoriae {{PLURAL:$1|est unus fasciculus|sunt $1 fasciculi}}.',
+
+# Math options
+'mw_math_png'    => 'Semper vertere PNG',
+'mw_math_simple' => 'HTML si admodum simplex, alioqui PNG',
+'mw_math_html'   => 'HTML si fieri potest, alioqui PNG',
+'mw_math_source' => 'Stet ut TeX (pro navigatri texti)',
+'mw_math_modern' => 'Commendatum pro navigatri recentes',
+'mw_math_mathml' => 'MathML',
+
+# Image deletion
+'deletedrevision' => 'Delevit emendationem $1 veterem.',
+
+# Browsing diffs
+'previousdiff' => '← Dissimilitudo superior',
+'nextdiff'     => 'Dissimilitudo proxima →',
+
+'imagemaxsize' => 'Terminare imagines in paginis imaginum ad:',
+'thumbsize'    => 'Magnitudo pollicisunguis:',
+
+'newimages' => 'Fasciculi novi',
+'noimages'  => 'Nullum videndum.',
+
+# Labels for User: and Title: on Special:Log pages
+'specialloguserlabel'  => 'Usor:',
+'speciallogtitlelabel' => 'Titulus:',
+
+# 'all' in various places, this might be different for inflected languages
+'recentchangesall' => 'omnes',
+'watchlistall1'    => 'omnes',
+'watchlistall2'    => 'omnes',
+
+# E-mail address confirmation
+'confirmemail'            => 'Inscriptionem electronicam adfirmare',
+'confirmemail_noemail'    => 'Non est tibi inscriptio electronica valida in [[Special:Preferences|tuis praeferentiis]] posita.',
+'confirmemail_text'       => 'Hoc vici te postulat inscriptionem tuam electronicam adfirmare priusquam proprietatibus litterarum electronicarum fruaris. Imprime botonem subter ut nuntium adfirmationis tibi mittatur. Nuntio nexus inerit quod est scribendus in tuo navigatro interretiali ut validum adfirmes tuam inscriptionem electronicam.',
+'confirmemail_send'       => 'Mittere codicem adfirmationis',
+'confirmemail_sent'       => 'Missae sunt litterae electronicae adfirmationis.',
+'confirmemail_sendfailed' => 'Litteras electronicas adfirmationis non potuimus mittere. Inspice inscriptionem tuam electronicam ut errores invenias.
+
+Nuntius reddidit: $1',
+'confirmemail_invalid'    => 'Codex adfirmationis invalidus. Fortasse id exitum est.',
+'confirmemail_needlogin'  => 'Necesse est tibi $1 ut inscriptionem tuam electronicam adfirmes.',
+'confirmemail_success'    => 'Tua inscriptio electronica adfirmata est. Libenter utaris {{grammar:ablative|{{SITENAME}}}}.',
+'confirmemail_loggedin'   => 'Inscriptio tua electronica iam adfirmata est.',
+'confirmemail_error'      => 'Aliquid erravit quando adfirmationem tuam servabamus.',
+'confirmemail_subject'    => '{{SITENAME}} - Adfirmatio inscriptionis electronicae',
+'confirmemail_body'       => 'Aliquis (tu probabiliter, cum loco de IP $1) rationem "$2" creavit apud {{grammar:accusative|{{SITENAME}}}} sub hac inscriptione electronica.
+
+Ut adfirmas te esse ipsum et proprietates inscriptionum electronicarum licere fieri apud {{grammar:accusative|{{SITENAME}}}}, hunc nexum aperi in tuo navigatro interretiali:
+
+$3
+
+Si *non* tu hoc fecisti, noli nexum sequi. Hic codex adfirmationis exibit $4.',
+
+# Inputbox extension, may be useful in other contexts as well
+'createarticle' => 'Paginam creare',
+
+# Delete conflict
+'deletedwhileediting' => 'Caveat censor: Haec pagina deleta est postquam inceperis eam recensere!',
+'confirmrecreate'     => "Usor [[User:$1|$1]] ([[User talk:$1|disputatio]]) delevit hanc paginam postquam eam emendare inceperis cum ratione:
+: ''$2''
+Quaesumus, adfirma ut iterum hanc paginam crees.",
+'recreate'            => 'Recreare',
+
+# action=purge
+'confirm_purge_button' => 'Licet',
+
+'youhavenewmessagesmulti' => 'Habes nuntia nova in $1',
+
+'articletitles' => "Paginae ab ''$1''",
+
+'loginlanguagelabel' => 'Lingua: $1',
+
+# Multipage image navigation
+'imgmultipageprev'   => '← pagina superior',
+'imgmultipagenext'   => 'pagina proxima →',
+'imgmultigo'         => 'I!',
+'imgmultigotopre'    => 'Ire ad paginam',
+'imgmultiparseerror' => 'Imago corrupta vel invalida videtur, ergo {{SITENAME}} indicem paginarum extrahere non potest.',
+
+# Table pager
+'table_pager_next' => 'Pagina proxima',
+'table_pager_prev' => 'Pagina superior',
+
+# Auto-summaries
+'autosumm-blank'   => 'paginam vacuavit',
+'autosumm-replace' => "multa contenta ex pagina removit, contenta nova: '$1'",
+'autoredircomment' => 'Redirigens ad [[$1]]', # This should be changed to the new naming convention, but existed beforehand
+'autosumm-new'     => 'Nova pagina: $1',
+
+# Size units
+'size-bytes'     => '$1 octeti',
+'size-kilobytes' => '$1 chiliocteti',
+'size-megabytes' => '$1 megaocteti',
+'size-gigabytes' => '$1 gigaocteti',
+
+# Live preview
+'livepreview-loading' => 'Onerans…',
+'livepreview-ready'   => 'Onerans… Factum!',
+
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesLg.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesLg.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesLg.php	(revision 1280)
@@ -0,0 +1,287 @@
+<?php
+/** Luganda
+ *
+ * @addtogroup Language
+ */
+
+$messages = array(
+# Dates
+'sunday'       => 'Sande',
+'monday'       => 'Bbalaza',
+'tuesday'      => 'Lwakubiri',
+'wednesday'    => 'Lwakusatu',
+'thursday'     => 'Lwakuna',
+'friday'       => 'Lwakutaano',
+'saturday'     => 'Lwamukaaga',
+'january'      => 'Gatonnya',
+'february'     => 'Mukutulansanja',
+'march'        => 'Mugulansigo',
+'april'        => 'Kafuumuulampawu',
+'june'         => 'Ssebo-aseka',
+'july'         => 'Kasambula',
+'august'       => 'Muwakanya',
+'september'    => 'Mutunda',
+'october'      => 'Mukulukusa',
+'november'     => 'Museenene',
+'december'     => 'Ntenvu',
+'january-gen'  => 'Gatonnya',
+'february-gen' => 'Mukutulansanja',
+'march-gen'    => 'Mugulansigo',
+'june-gen'     => 'Ssebo-aseka',
+'july-gen'     => 'Kasambula',
+'august-gen'   => 'Muwakanya',
+'december-gen' => 'Ntenvu',
+'jan'          => 'Gatonnya',
+'feb'          => 'Mukutulansanja',
+'mar'          => 'Mugulansigo',
+'apr'          => 'Kafuumuulampawu',
+'may'          => 'Muzigo',
+'jun'          => 'Ssebo-aseka',
+'jul'          => 'Kasambula',
+'aug'          => 'Muwakanya',
+'sep'          => 'Mutunda',
+'oct'          => 'Mukulukusa',
+'nov'          => 'Museenene',
+'dec'          => 'Ntenvu',
+
+# Bits of text used by many pages
+'categories' => 'Amatuluba',
+
+'about'          => 'Okutangaaza',
+'newwindow'      => '(bijjira mu kadirisa kapya)',
+'cancel'         => 'Biveeko',
+'qbedit'         => 'Kyuusa',
+'qbspecialpages' => 'Emiko emyawule',
+'mypage'         => 'Enfo yange',
+'mytalk'         => 'Yogera nange',
+'navigation'     => 'Endagiriro',
+
+'returnto'         => 'Dda ku $1.',
+'help'             => 'Buyambi',
+'search'           => 'Noonya',
+'searchbutton'     => 'Noonya',
+'go'               => 'Nona',
+'searcharticle'    => 'Nona',
+'history_short'    => 'Ennanda',
+'printableversion' => 'Entereeza eyanguya okukubisa',
+'permalink'        => 'Omuko guno guyunge okuva wano',
+'edit'             => 'Kyusa',
+'delete'           => 'Gyawo',
+'protect'          => 'Ssiba',
+'protectthispage'  => 'Siba olupapula luno',
+'talk'             => 'Emboozi',
+'toolbox'          => 'Ebikozesebwa',
+'otherlanguages'   => 'Mu nnimi endala',
+'lastmodifiedat'   => 'Luno olupapula lwasemba okukyuusibwamu ku $2, $1.', # $1 date, $2 time
+'jumptonavigation' => 'Endagiriro',
+
+# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
+'aboutsite'     => 'Okutangaaza ku {{SITENAME}}',
+'aboutpage'     => 'Project:Okutangaaza',
+'copyright'     => 'Ebiri kuno bifugibwa $1.',
+'currentevents' => 'Ebibindabinda',
+'edithelp'      => 'Obuyambi mu kukyusa',
+'mainpage'      => 'Omuko Ogusooka',
+'portal'        => 'Embuga',
+
+'editsection'   => 'kyuusa',
+'editold'       => 'kyuusa',
+'toc'           => 'Ebirimu',
+'hidetoc'       => 'kweka',
+'thisisdeleted' => 'Oyagala okulaba oba okuzzawo $1?',
+
+# Short words for each namespace, by default used in the 'article' tab in monobook
+'nstab-main'    => 'Muko',
+'nstab-user'    => 'Enfo ya memba',
+'nstab-special' => 'Olupapula olwawule',
+
+# General errors
+'editinginterface' => "'''Kulabula:''' Okyusa olupapula sofutiweya kw'egya ebigambo byayo. Enkyukakyuka z'okola wano zigyakubaako engeri gye zikola ku ngeri abantu gye bakozesaamu enfo eno.",
+
+# Login and logout pages
+'logouttitle'                => 'Kuvaamu',
+'logouttext'                 => "<strong>Kati ovuddemu.</strong><br />
+Osobola okusigala nga okozesa {{SITENAME}} nga atamanyise, ate osobola
+n'okuddamu okuyingira nga bw'obadde oba nga okozesezza ery'obwa memba
+eddala. Wekkaanye, empapula ezimu ziyinza okukweyolekera nga bwe
+zibadde nga oyingidde - okutuusa lw'okunkumula eggwanika ezzibizi erya
+kalambula-neti yo.",
+'loginpagetitle'             => 'Kuyingira - memba',
+'yourname'                   => "Ery'obwa memba",
+'yourpassword'               => 'Ekigambo ekikuumi',
+'yourpasswordagain'          => 'Ddamu ekigambo ekikuumi',
+'remembermypassword'         => 'Tereka ekigambo kyange ekikuumi ku kompyuta eno',
+'login'                      => 'Yingira',
+'loginprompt'                => 'Okuyingira {{SITENAME}}, kalambula-neti yo erina okukkirizako kuki.',
+'userlogin'                  => 'Yingira / kolawo akawunti',
+'logout'                     => 'Vaamu',
+'userlogout'                 => 'Vaamu',
+'nologin'                    => 'Toli memba? $1.',
+'nologinlink'                => 'Funa akawunti',
+'createaccount'              => 'Kolawo akawunti',
+'gotaccount'                 => 'Akawunti wafuna? $1.',
+'gotaccountlink'             => 'Yingira',
+'username'                   => "Ery'obwa memba:",
+'prefs-help-email'           => "* E-mail (ssi kya tteeka): Bw'ogiwayo, basobola okukutuukirira nga bayitira ku enfo yo ey'obwa memba oba olupapula lwo
+olwa 'yogera nange' nga ggwe tewetaaze kulaga bikufaako.",
+'loginsuccesstitle'          => 'Oyingidde',
+'loginsuccess'               => "'''Kati oyingidde mu {{SITENAME}} nga okozesa erinnya \"\$1\".'''",
+'mailmypassword'             => 'Nsindikira ekigambo ekikuumi ekipya',
+'acct_creation_throttle_hit' => 'Omaze okukolawo akawunti $1. Tokkirizibwa kwongera ndala.',
+'accountcreated'             => 'Akawunti ekoleddwa',
+'accountcreatedtext'         => "Akawunti ey'obwa memba eya $1 ekoleddwa.",
+
+# Edit pages
+'minoredit'        => 'Eno nkyukakyuka ntono',
+'watchthis'        => 'Goberera olupapula luno',
+'savearticle'      => 'Kaza olupapula',
+'showpreview'      => 'Sooka ondageko',
+'showdiff'         => 'Ndaga bwe bikyuse',
+'anoneditwarning'  => "'''Kulabula:''' Owandiiika toyingidde mu sisitemu. Tujjakuwandiika endagiriro eya kompyuta kwosinzidde
+mu lukalala lw'enkuykakyuka ez'omu lupapula luno.",
+'loginreqlink'     => 'Yingira',
+'accmailtitle'     => 'Ekigambo ekikuumi kisindikiddwa',
+'accmailtext'      => 'Ekigambo ekikuumi ekya "$1" kisindikiddwa ku $2.',
+'newarticletext'   => "Enyunzi gy'ogenzeko egguka ku lupapula olutannakolebwawo.
+Oba gwe oyagala okulukolawo, wandiika mu kabokisi wammanga.
+(okuyiga ebisingawo, genda ku [[{{MediaWiki:helppage}}|lupapula olw'obuyambi]]).
+Bw'obanga tewagenderedde kutuuka wano, nyigabunyizi eppeesa ery'omu kalambula-neti yo
+erya '''ddayo'''.",
+'editing'          => 'Kukyuusa $1',
+'editinguser'      => 'Kukyuusa ebya memba <b>$1</b>',
+'editingsection'   => 'Kukyuusa $1 (kitundu)',
+'editingcomment'   => 'Kukyuusa $1 (obubaka)',
+'yourtext'         => 'Ebigambo ebibyo',
+'copyrightwarning' => "Genderera nti buli kyowandiika muno mu {{SITENAME}} kibalibwa ng'ekifugibwa $2 (okuyiga ebisingawo, laba $1).
+Obanga tewetegese okulaba by'owandiise nga babikyusakyusa n'okubisaasaanya nga bwe balaba, tobiwandiika muno.<br />
+Tukwesiga nti by'owandiika muno bibyo oba wabigya mu kya bonna oba awalala gye batalina bikugizo eby'obwa nannyini.
+<strong>TOTEEKAMU EBIRIKO EBIKUGIZO EBY'OBWA NANNYINI NGA BA NYINI BYO TEBAKUWADDE LUKUSA!</strong>",
+
+# History pages
+'revhistory'   => 'Enkyukakyuka',
+'viewpagelogs' => "Kebera likooda ez'olupapula luno",
+'currentrev'   => 'Ebisangiddwawo',
+'cur'          => 'erw',
+'last'         => 'eku',
+'histlegend'   => "'''Ebyokugerageranizibwa:''' nyiga obutonnyeze ku likooda zoyagala okugerageranya olyoke onyige eppeesa erya 'Enter'<br />
+oba ku gano agali ku lupapula luno.<br />
+'''Ebigambo:''' (erw) = enjawulo ku ebiriwo, (eku) = enjawulo ku egikulembera, N = enkyukakyuka entono.",
+'histfirst'    => 'Eyasooka',
+'histlast'     => "Esing'obupya",
+
+# Diffs
+'compareselectedversions' => 'Gerageranya likooda zenonze',
+
+# Search results
+'prevn'        => '$1 ezikulembedde zino',
+'nextn'        => '$1 eziddako',
+'viewprevnext' => 'Laga ($1) ($2) ($3).',
+
+# Preferences page
+'mypreferences'     => 'Enteekateeka yange',
+'oldpassword'       => 'Ekigambo ekikuumi ekikadde:',
+'newpassword'       => 'Ekigambo ekikuumi ekipya:',
+'searchresultshead' => 'Noonya',
+
+# Recent changes
+'recentchanges'     => 'Ebyakakyuusibwa',
+'recentchangestext' => "Goberera enkyuukakyuuka empya ez'oku muko guno",
+'hide'              => 'Kweka',
+'minoreditletter'   => 'n',
+
+# Recent changes linked
+'recentchangeslinked' => 'Ebikyusiddwa ebyekuusa ku muko guno',
+
+# Upload
+'upload' => 'Teekayo fayiro',
+
+# Image list
+'imagelist_user' => 'Memba',
+
+# Miscellaneous special pages
+'allpages'          => 'Empapula zonna',
+'randompage'        => 'Londa omuko muwawa',
+'specialpages'      => 'Emiko emyawule',
+'newpages-username' => "Ery'obwa memba:",
+'move'              => 'Simbuliza',
+
+# Book sources
+'booksources-go' => 'Nona',
+
+# Special:Log
+'specialloguserlabel' => 'Memba:',
+
+# Special:Allpages
+'allarticles'       => 'Emiko gyonna',
+'allinnamespace'    => 'Empapula zonna (mu kkunngaanizo erya $1)',
+'allnotinnamespace' => 'Empapula zonna (ezitali mu kkunngaanizo erya $1)',
+'allpagessubmit'    => 'Nona',
+
+# Watchlist
+'watchlist'      => 'Emiko gyengoberera',
+'mywatchlist'      => 'Emiko gyengoberera',
+'addedwatch'     => "Kigattiddwa ku by'ogoberera",
+'addedwatchtext' => 'Olupapula "[[:$1]]" kati luli mu [[Special:Watchlist|by\'ogoberera]].
+Buli olupapula olwo oba olw\'emboozi lwalwo lwe binaakyuusibwamu, enkyuukakyuka ezo
+zijjakulabika wano. Era erinnya lyalwo mu [[Special:Recentchanges|lukalala olw\'ebyakakyuuisbwa]]
+lijja okuba mu nukuta enziggumivu oyanguyirwe okuliraba.
+
+Bw\'oba oyagala okulekerawo okulugoberera, nyiga ku kigambo "Suula" awo ku bbali.',
+'watch'          => 'Goberera',
+'unwatch'        => 'Suula',
+
+# Delete/protect/revert
+'confirm'        => 'Kakasa',
+'actioncomplete' => 'Kiwedde',
+
+# Restrictions (nouns)
+'restriction-edit' => 'Kyuusa',
+
+# Contributions
+'mycontris' => 'Byempaddeyo',
+
+# What links here
+'whatlinkshere' => 'Emiko egikuggusa ku guno',
+
+# Block/unblock
+'blockip'           => 'Gaana memba okuwandiika',
+'blockipsuccesssub' => 'Memba agaaniddwa okuwandika',
+'blocklink'         => 'Ono agaanibwe okuwandiika',
+'contribslink'      => 'byawaddeyo',
+
+# Move page
+'movepage'    => 'Simbuliza olupapula luno',
+'movearticle' => 'Simbuliza olupapula luno',
+'move-watch'  => 'Goberera olupapula luno',
+'movepagebtn' => 'Lusimbulize',
+
+# Namespace 8 related
+'allmessages'         => 'Bubaka bwa sisitemu',
+'allmessagesname'     => 'Erinnya',
+'allmessagesdefault'  => 'Ebigambo ebya bulijjo',
+'allmessagescurrent'  => 'Ebiriwo kakano',
+'allmessagestext'     => "Luno lwe lukalala olw'obubaka obwa sisitemu obw'omu kkunngaanizo erya MediaWiki.",
+'allmessagesfilter'   => "Amannya ag'obubaka gasunsuze:",
+'allmessagesmodified' => 'Lagako ebikyusidwa byokka',
+
+# Tooltip help for the actions
+'tooltip-pt-logout'  => 'Vaamu',
+'tooltip-ca-protect' => 'Siba olupapula luno',
+
+# Attribution
+'siteuser'  => '{{SITENAME}} memba $1',
+'siteusers' => '{{SITENAME}} (ba)memba $1',
+
+# Inputbox extension, may be useful in other contexts as well
+'createarticle' => 'Wandika omuko',
+
+# action=purge
+'confirm_purge_button' => 'Kale',
+
+# Multipage image navigation
+'imgmultigo'      => 'Nona!',
+'imgmultigotopre' => 'Genda ku lupapula',
+
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesLi.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesLi.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesLi.php	(revision 1280)
@@ -0,0 +1,1044 @@
+<?php
+/** Limburgian (Limburgs)
+  *
+  * @addtogroup Language
+ */
+
+$skinNames = array(
+	'standard' => 'Standaard',
+	'nostalgia' => 'Nostalgie',
+	'cologneblue' => 'Keuls blauw',
+);
+
+$namespaceNames = array(
+	NS_MEDIA          => 'Media',
+	NS_SPECIAL        => 'Speciaal',
+	NS_MAIN           => '',
+	NS_TALK           => 'Euverlèk',
+	NS_USER           => 'Gebroeker',
+	NS_USER_TALK      => 'Euverlèk_gebroeker',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK   => 'Euverlèk_$1',
+	NS_IMAGE          => 'Plaetje',
+	NS_IMAGE_TALK     => 'Euverlèk_plaetje',
+	NS_MEDIAWIKI      => 'MediaWiki',
+	NS_MEDIAWIKI_TALK => 'Euverlèk_MediaWiki',
+	NS_TEMPLATE       => 'Sjabloon',
+	NS_TEMPLATE_TALK  => 'Euverlèk_sjabloon',
+	NS_HELP           => 'Help',
+	NS_HELP_TALK      => 'Euverlèk_help',
+	NS_CATEGORY       => 'Categorie',
+	NS_CATEGORY_TALK  => 'Euverlèk_categorie'
+);
+
+$namespaceAliases = array(
+	'Kategorie'           => NS_CATEGORY,
+	'Euverlèk_kategorie'  => NS_CATEGORY_TALK,
+	'Aafbeilding'         => NS_IMAGE,
+	'Euverlèk_afbeelding' => NS_IMAGE_TALK,
+);
+
+$dateFormats = array(	
+	'mdy time' => 'H:i',
+	'mdy date' => 'M j, Y',
+	'mdy both' => 'M j, Y H:i',
+
+	'dmy time' => 'H:i',
+	'dmy date' => 'j M Y',
+	'dmy both' => 'j M Y H:i',
+
+	'ymd time' => 'H:i',
+	'ymd date' => 'Y M j',
+	'ymd both' => 'Y M j H:i',
+);
+
+$messages = array(
+# User preference toggles
+'tog-underline'               => 'Links ongersjtreipe',
+'tog-highlightbroken'         => 'Formatteer gebraoke links <a href="" class="new">op dees meneer</a> (angesj: zoe<a href="" class="internal">?</a>).',
+'tog-justify'                 => 'Paragrafe oetvulle',
+'tog-hideminor'               => 'Verbèrg klein bewirking bie recènte verangeringe',
+'tog-usenewrc'                => 'Oetgebreide recènte vervangeringe (neet vuur alle browsers)',
+'tog-numberheadings'          => 'Köpkes automatisch nummere',
+'tog-showtoolbar'             => 'Laot edit toolbar zeen',
+'tog-editondblclick'          => "Bewirk pazjena's bie 'ne dubbelklik (JavaScript)",
+'tog-editsection'             => 'Bewirke van secties via [bewirke] links',
+'tog-editsectiononrightclick' => 'Sècties bewirke mit inne rechtermoesklik op sèctietitels (JavaScript)',
+'tog-showtoc'                 => "Inhawdsopgaaf vuur pazjena's mit mië as 3 köpkes",
+'tog-rememberpassword'        => "Wachwaord ónthauwe bie 't aafmèlde",
+'tog-editwidth'               => 'Edit boks haet de vol breidte',
+'tog-watchdefault'            => "Voog pazjena's die se bewirks toe aan dien volglies",
+'tog-minordefault'            => 'Merkeer sjtandaard alle bewirke as klein',
+'tog-previewonfirst'          => 'Preview laote zien bie de iesjte bewirking',
+'tog-nocache'                 => 'Pazjena cache oetzitte',
+'tog-fancysig'                => 'Handjteikening zónger link nao dien gebroekerspazjena',
+
+# Dates
+'sunday'    => 'zondig',
+'monday'    => 'maondig',
+'tuesday'   => 'dinsdig',
+'wednesday' => 'goonsdag',
+'thursday'  => 'donderdig',
+'friday'    => 'vriedig',
+'saturday'  => 'zaoterdig',
+'january'   => 'jannewarie',
+'february'  => 'fibberwari',
+'march'     => 'maart',
+'april'     => 'april',
+'may_long'  => 'mei',
+'june'      => 'juni',
+'july'      => 'juli',
+'august'    => 'augustus',
+'september' => 'september',
+'october'   => 'oktober',
+'november'  => 'november',
+'december'  => 'december',
+'jan'       => 'jan',
+'feb'       => 'feb',
+'mar'       => 'mrt',
+'apr'       => 'apr',
+'may'       => 'mei',
+'jun'       => 'jun',
+'jul'       => 'jul',
+'aug'       => 'aug',
+'sep'       => 'sep',
+'oct'       => 'okt',
+'nov'       => 'nov',
+'dec'       => 'dec',
+
+# Bits of text used by many pages
+'categories'      => 'Categorieë',
+'pagecategories'  => '{{PLURAL:$1|Categorie|Categorieë}}',
+'category_header' => 'Artikele in categorie "$1"',
+'subcategories'   => 'Subkattegorië',
+
+'mainpagetext' => 'Wiki software succesvol geïnsjtalleerd.',
+
+'about'          => 'Info',
+'article'        => 'Contentpazjena',
+'newwindow'      => '(in nuui venster)',
+'cancel'         => 'Aafbraeke',
+'qbfind'         => 'Zeuke',
+'qbbrowse'       => 'Bladere',
+'qbedit'         => 'Bewirke',
+'qbpageoptions'  => 'Pazjena-opties',
+'qbpageinfo'     => 'Pazjena-informatie',
+'qbmyoptions'    => 'mien opties',
+'qbspecialpages' => "Speciaal pazjena's",
+'moredotdotdot'  => 'Miè...',
+'mypage'         => 'Mien gebroekerspazjena',
+'mytalk'         => 'Mien euverlikpazjena',
+'anontalk'       => 'Euverlèk veur dit IP adres',
+'navigation'     => 'Navegatie',
+
+'errorpagetitle'    => 'Fout',
+'returnto'          => 'Truuk nao $1.',
+'tagline'           => 'Van {{SITENAME}}',
+'help'              => 'Hulp',
+'search'            => 'Zeuke',
+'searchbutton'      => 'Zeuke',
+'go'                => 'OK',
+'searcharticle'     => 'OK',
+'history'           => 'Historie',
+'history_short'     => 'Historie',
+'printableversion'  => 'Printer-vruntelike versie',
+'edit'              => 'Bewirk',
+'editthispage'      => 'Pazjena bewirke',
+'delete'            => 'Wisse',
+'deletethispage'    => 'Wisse',
+'protect'           => 'Besjerm',
+'protectthispage'   => 'Beveilige',
+'unprotect'         => 'vriegaeve',
+'unprotectthispage' => 'Besjerming opheffe',
+'newpage'           => 'Nuuj pazjena',
+'talkpage'          => 'euverlikpazjena',
+'specialpage'       => 'Speciaal Pazjena',
+'personaltools'     => 'Persoenlike hulpmiddele',
+'articlepage'       => 'Artikel',
+'talk'              => 'Euverlèk',
+'toolbox'           => 'Gereidsjapskis',
+'userpage'          => 'gebroekerspazjena',
+'imagepage'         => 'Besjrievingspazjena',
+'viewtalkpage'      => 'Bekiek euverlik',
+'otherlanguages'    => 'Anger tale',
+'redirectedfrom'    => '(Doorverweze van $1)',
+'redirectpagesub'   => 'Redirectpazjena',
+'lastmodifiedat'    => "Dees pazjena is 't litst verangert op $2, $1.", # $1 date, $2 time
+'viewcount'         => 'Dees pazjena is $1 kier bekeke.',
+'protectedpage'     => 'Beveiligde pazjena',
+
+# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
+'aboutsite'         => 'Euver {{SITENAME}}',
+'aboutpage'         => '{{ns:project}}:Info',
+'bugreports'        => 'Fouterapportaasj',
+'bugreportspage'    => '{{ns:project}}:Fouterapportaasj',
+'copyright'         => 'De inhawd is besjikbaar ónger de $1.',
+'copyrightpagename' => '{{SITENAME}} auteursrechte',
+'copyrightpage'     => '{{ns:project}}:Auteursrechte',
+'currentevents'     => "In 't nuujs",
+'currentevents-url' => "In 't nuujs",
+'disclaimers'       => 'Aafwiezinge aansjprakelikheid',
+'disclaimerpage'    => '{{SITENAME}}: Algemein aafwiezing aansjprakelikheid',
+'edithelp'          => 'Hulp bie bewirke',
+'edithelppage'      => '{{ns:help}}:Instructies',
+'faqpage'           => '{{ns:project}}:Veulgestjilde vraoge',
+'helppage'          => '{{ns:project}}:Help',
+'mainpage'          => 'Huidpazjena',
+'portal'            => 'Gebroekersportaol',
+'portal-url'        => '{{ns:project}}:Gebroekersportaol',
+'privacypage'       => '{{ns:project}}:Privacy_policy',
+'sitesupport'       => 'Donaties',
+'sitesupport-url'   => '{{ns:project}}:Gifte',
+
+'badaccess' => 'Toeganksfout',
+
+'retrievedfrom'       => 'Aafkómstig van "$1"',
+'youhavenewmessages'  => 'Doe höbs $1 ($2).',
+'newmessageslink'     => 'nuuj berichte',
+'newmessagesdifflink' => 'Lèste verangering',
+'editsection'         => 'bewirk',
+'toc'                 => 'Inhawd',
+'hidetoc'             => 'verberg',
+'thisisdeleted'       => '$1 bekieke of trökzètte?',
+'restorelink'         => '$1 verwiederde versies',
+
+# Short words for each namespace, by default used in the 'article' tab in monobook
+'nstab-main'      => 'Artikel',
+'nstab-user'      => 'Gebroeker',
+'nstab-image'     => 'Aafbeilding',
+'nstab-mediawiki' => 'Berich',
+'nstab-template'  => 'Sjabloon',
+'nstab-category'  => 'Kategorie',
+
+# Main script and global functions
+'nosuchaction'      => 'Gevraagde handeling bestjit neet',
+'nosuchactiontext'  => 'De door de URL gespecifieerde handeling wordt neet herkend door de MediaWiki software',
+'nosuchspecialpage' => "D'r besjteit gein speciaal pazjena mit deze naam",
+'nospecialpagetext' => 'U heeft een speciale pagina aangevraagd die neet wordt herkend door de MediaWiki software',
+
+# General errors
+'error'           => 'Fout',
+'databaseerror'   => 'Databasefout',
+'dberrortext'     => 'Bie \'t zeuke is \'n syntaxfout in de database opgetreje.
+Dit kint zien veroorzaak door \'n óngeljige zeukactie (zuug $5),
+of \'t duujt op \'n fout in de software. 
+De lètste zeukpoeging in de database waor:
+<blockquote><tt>$1</tt></blockquote>
+vanoet de functie "<tt>$2</tt>".
+MySQL gaof de foutmèlling "<tt>$3: $4</tt>".',
+'dberrortextcl'   => 'Dao is \'n syntaxfout opgetreje bie \'t zeuke in de database.
+De lèste opgevraogde zeukactie waor:
+"$1"
+vanoet de functie "$2".
+MySQL brach fout "$3" nao veure: "$4"',
+'noconnect'       => 'Verbinden met de database op $1 was neet mogelijk',
+'nodb'            => 'Selectie van database $1 neet mogelijk',
+'cachederror'     => "Dit is 'n gearsjiveerde kopie van de gevraogde pazjena, en is mesjien neet gans actueel.",
+'readonly'        => 'Database geblokkeerd',
+'enterlockreason' => "Gaef 'n rae veur de blokkering en wie lank 't dinkelik zal dore. De ingegaeve rae zal aan de gebroekers getuind waere.",
+'readonlytext'    => 'De database van {{SITENAME}} is momenteel gesloten voor nieuwe bewerkingen en wijzigingen, waarschijnlijk voor bestandsonderhoud.
+De verantwoordelijke systeembeheerder gaf hiervoor volgende reden op:
+<p>$1',
+'missingarticle'  => 'De database haet \'n pazjenatèks ("$1") die \'t zou motte vinge neet gevonge. Dit is gein fout in de database, mer waarscjienlik in de software. Meld dit estebleef aan inne adminstrator, mit vermèlding van de URL.',
+'internalerror'   => 'Interne fout',
+'filecopyerror'   => 'Besjtand "$1" nao "$2" kopiëre neet mugelik.',
+'filerenameerror' => 'Verangere van de titel van \'t besjtand "$1" in "$2" neet meugelik.',
+'filedeleteerror' => 'Kos bestjand "$1" neet weghaole.',
+'filenotfound'    => 'Kos bestjand "$1" neet vinge.',
+'unexpected'      => 'Onverwachte waarde: "$1"="$2".',
+'formerror'       => 'Fout: kos formeleer neet verzende',
+'badarticleerror' => 'Dees hanjeling kint neet weure oetgeveurd op dees pazjena.',
+'cannotdelete'    => 'Kós de pazjena of aafbeilding neet wisse.',
+'badtitle'        => 'Óngeljige pazjenatitel',
+'badtitletext'    => 'De opgevraogde pazjena is neet besjikbaar of laeg.',
+'perfdisabled'    => 'Om te veurkomme dat de database weurd euverbelast is dees pazjena allein tusje 03:00 en 15:00 (Wes-Europiese zoemertied) besjikbaar.',
+'perfdisabledsub' => "Hie is 'n opgesjlage kopie van $1:", # obsolete?
+'perfcached'      => 'De volgende data is gecachet en is mesjien neet gans up to date:',
+'viewsource'      => 'Bekiek brónteks',
+
+# Login and logout pages
+'logouttitle'                => 'Aafmèlde gebroeker',
+'logouttext'                 => 'De bis noe aafgemèld. De kins {{SITENAME}} noe anoniem (mit vermèlding van IP adres) gebroeke, of opnuui aanmèlde onger dezelfde of ein anger naam.',
+'welcomecreation'            => '<h2>Wilkóm, $1!</h2><p>Dien gebroekersprofiel is vaerdig. De kins noe dien persuunlike veurkäöre insjtèlle.',
+'loginpagetitle'             => 'gebroekersnaam',
+'yourname'                   => 'Diene gebroekersnaam',
+'yourpassword'               => 'Die wachwaord',
+'yourpasswordagain'          => 'Wachwaord opnuuj intype',
+'remembermypassword'         => 'Mien wachwaord onthouwe veur later sessies.',
+'yourdomainname'             => 'Die domein',
+'loginproblem'               => "<b>D'r is 'n prebleim mèt 't aanmèlde.</b><br />Probeer estebleef nog es.",
+'alreadyloggedin'            => '<span style="color:#ff0000"><b>Gebroeker $1, de bis al aangemèld.</b></span><br />',
+'login'                      => 'Aanmèlde',
+'loginprompt'                => "Diene browser mót ''cookies'' acceptere óm in te logge op {{SITENAME}}.",
+'userlogin'                  => 'Aanmèlde',
+'logout'                     => 'Aafmèlde',
+'userlogout'                 => 'Aafmèlde',
+'nologin'                    => 'Höbs te nog geine gebroekersnaam? $1.',
+'nologinlink'                => "Maak 'ne gebroekersnaam aan",
+'createaccount'              => 'Nuuj gebroekersprofiel aanmake.',
+'gotaccount'                 => "Höbs te al 'ne gebroekersnaam? $1.",
+'createaccountmail'          => 'per e-mail',
+'badretype'                  => 'De ingeveurde wachwäörd versjille vanein.',
+'userexists'                 => "De gebroekersnaam dae se höbs ingeveurd weurt al gebroek. Kees estebleef 'n anger naam.",
+'youremail'                  => 'Dien e-mailadres',
+'username'                   => 'Gebroekersnaam:',
+'uid'                        => 'Gebroekersnómmer:',
+'yourrealname'               => 'Dienen echte naam*',
+'yourlanguage'               => 'Taal van de gebroekersinterface',
+'yourvariant'                => 'Taalvariant',
+'yournick'                   => "Diene bienaam (veur ''handjteikeninge'')",
+'badsig'                     => 'Óngeljige roew handjteikening; zuug de HTML-tags nao.',
+'loginerror'                 => 'Inlogfout',
+'prefs-help-email'           => '* E-mail (optioneel): Hiedoor kan me contak mit diech opnumme zónger dats te dien identiteit hoofs vrie te gaeve.',
+'noname'                     => "De mos 'n gebroekersnaam opgaeve.",
+'loginsuccesstitle'          => 'Aanmèlde geluk.',
+'loginsuccess'               => 'De bis noe es "$1" aangemèld bie {{SITENAME}}.',
+'nosuchuser'                 => 'Er bestaat geen gebroeker met de naam "$1". Controleer uw spelling, of gebruik onderstaand formulier om een nieuw gebroekersprofiel aan te maken.',
+'wrongpassword'              => "'t Ingegaeve wachwaord is neet zjus. Perbeer 't obbenuujts.",
+'wrongpasswordempty'         => "'t Ingegaeve wachwoord waor laeg. Perbeer 't obbenuujts.",
+'mailmypassword'             => "Sjik mich 'n nuuj wachwaord",
+'passwordremindertitle'      => 'Wachwaordherinnering van {{SITENAME}}',
+'passwordremindertext'       => 'Emes (waarsjienliek dich zelf) vanaaf IP-adres $1 haet verzoch u een nieuw wachtwoord voor {{SITENAME}} toe te zenden ($4). Het nieuwe wachtwoord voor gebroeker "$2" is "$3". Advies: nu aanmelden en uw wachtwoord wijzigigen.',
+'noemail'                    => 'D\'r is gein geregistreerd e-mailadres veur "$1".',
+'passwordsent'               => 'D\'r is \'n nuui wachwaord verzonde nao \'t e-mailadres dat geregistreerd sjtit veur "$1".
+Gelieve na ontvangst opnieuw aan te melden.',
+'eauthentsent'               => "Dao is 'ne bevèstigingse-mail nao 't genomineerd e-mailadres gesjik.
+Iedat anger mail nao dat account versjik kan weure, mós te de insjtructies in daen e-mail volge,
+óm te bevèstige dat dit wirkelik dien account is.",
+'mailerror'                  => "Fout bie 't versjture van mail: $1",
+'acct_creation_throttle_hit' => "Sorry, de höbs al $1 accounts aangemak. De kins d'r gein mië aanmake.",
+'emailauthenticated'         => 'Dien e-mailadres is op $1 geauthentiserd.',
+'emailnotauthenticated'      => 'Dien e-mailadres is nog neet geauthentiseerd. De zals gein
+e-mail óntvange veur alle volgende toepassinge.',
+'emailconfirmlink'           => 'Bevèstig dien e-mailadres',
+
+# Edit page toolbar
+'bold_sample'    => 'Vetten teks',
+'bold_tip'       => 'Vetten teks',
+'italic_sample'  => 'Italic tèks',
+'italic_tip'     => 'Italic tèks',
+'link_sample'    => 'Link titel',
+'link_tip'       => 'Interne link',
+'extlink_sample' => 'http://www.example.com link titel',
+'extlink_tip'    => 'Externe link (mit de http:// prefix)',
+'math_tip'       => 'Wiskundige formule (LaTeX)',
+
+# Edit pages
+'summary'              => 'Samevatting',
+'minoredit'            => "Dit is 'n klein verangering",
+'watchthis'            => 'Volg dees pazjena',
+'savearticle'          => 'Pazjena opsjlaon',
+'preview'              => 'Naokieke',
+'showpreview'          => 'Bekiek dees bewirking',
+'showdiff'             => 'Toen verangeringe',
+'anoneditwarning'      => "You are not logged in. Your IP address will be recorded in this page's edit history.",
+'blockedtitle'         => 'Gebroeker is geblokkeerd',
+'blockedtext'          => 'Diene gebroekersnaam of IP-adres is geblokkeerd door $1. De opgegaeve raeje:<br />$2<br />De kins veur euverlik kontak opnumme mit de [[{{MediaWiki:grouppage-sysop}}|systeemwèrkers]].
+
+Your IP address is $3. Please include this address in any queries you make.',
+'whitelistedittitle'   => 'Geer mót óch inlogke óm te bewirke',
+'whitelistedittext'    => 'Geer mót uch $1 óm pajzená te bewirke.',
+'whitelistreadtitle'   => 'Geer mót óch inlogke óm dit te kónne laeze',
+'whitelistreadtext'    => "Geer mót óch [[Special:Userlogin|inlogke]] óm pazjena's te laeze.",
+'whitelistacctitle'    => 'Geer maag gein account aanmake',
+'whitelistacctext'     => 'Óm accounts op dees wiki aan te make mót geer [[Special:Userlogin|ingelog]] zeen en de zjuste permissies höbbe.',
+'loginreqlink'         => 'inglogge',
+'loginreqpagetext'     => 'De mos $1 om anger pazjenas te bekieke.',
+'accmailtitle'         => 'Wachwaord versjtuurd.',
+'accmailtext'          => "'t Wachwaord veur '$1' is nao $2 versjtuurd.",
+'newarticle'           => '(Nuuj)',
+'newarticletext'       => "De höbs 'ne link gevolg nao 'n pazjena die nog neet besjteit. 
+Type in de box hiejónger óm de pazjena te beginne (zuug de [[Help:Contents|helppazjena]] veur mier informatie). Es te hie per óngelök terech bis gekómme, klik dan op de '''trök'''-knóp van diene browser.",
+'anontalkpagetext'     => "----''Dit is de euverlikpazjena veur 'ne anonieme gebroeker dae nog gein account haet aangemak of dae 't neet gebroek. Daorom gebroeke v'r 't IP adres om de gebroeker te identificere. Dat adres kint weure gedeild doer miedere gebroekers. As e 'ne anonieme gebroeker bis en de höbs 't geveul dat 'r onrillevante commentare aan dich gericht zint, kins e 't biste [[Special:Userlogin|'n account crëere of inlogge]] om toekomstige verwarring mit angere anonieme gebroekers te veurkomme.''",
+'noarticletext'        => "(Dees pazjena bevat op 't moment gein teks)",
+'clearyourcache'       => "'''Lèt op:''' Nao 't opsjlaon mós te diene browserbuffer wisse óm de verangeringe te zeen: '''Mozilla:''' klik ''Reload'' (of ''Ctrl-R''), '''Firefox / IE / Opera:''' ''Ctrl-F5'', '''Safari:''' ''Cmd-R'', '''Konqueror''' ''Ctrl-R''.",
+'updated'              => '(Biegewèrk)',
+'note'                 => '<strong>Opmirking:</strong>',
+'previewnote'          => "Lèt op: dit is 'n controlepazjena; dien tèks is nog neet opgesjlage!",
+'previewconflict'      => "Dees versie toent wie de tèks in 't bôvesjte vèld oet git zeen es e zouws opsjlaon.",
+'editing'              => 'Bewirkingspazjena: $1',
+'editinguser'          => 'Bewirkingspazjena: $1',
+'editingsection'       => 'Bewirke van sectie van $1',
+'editingcomment'       => 'Bewirk $1 (commentair)',
+'editconflict'         => 'Bewirkingsconflik: $1',
+'explainconflict'      => "Jemes angers haet dees pazjena verangerd naodats doe aan dees bewèrking bis begos. 't Ierste teksveld tuint de hujige versie van de pazjena. De mós dien eige verangeringe dao-in inpasse. Allein d'n tèks in 't ierste teksveld weurt opgesjlaoge wens te noe op \"Pazjena opsjlaon\" duujs.<br />",
+'yourtext'             => 'Euren teks',
+'storedversion'        => 'Opgesjlage versie',
+'nonunicodebrowser'    => '<strong>WAARSJUWING: Diene browser is voldit neet aan de unicode sjtandaarde, gebroek estebleef inne angere browser veurdas e artikele gis bewirke.</strong>',
+'editingold'           => "<strong>WAARSJUWING: De bis 'n aw versie van dees pazjena aan 't bewirke. Es e dees bewirking opjsleis, gaon alle verangeringe die na dees versie zien aangebrach verlore.</strong>",
+'yourdiff'             => 'Verangeringe',
+'copyrightwarning'     => "Opgelèt: Alle biedrage aan {{SITENAME}} weure geach te zeen vriegegaeve ónger de $2 (zuug $1 veur details). Wens te neet wils dat dienen teks door angere bewirk en versjpreid weurt, kees dan neet veur 'Pazjena opsjlaon'.<br /> Hiebie belaofs te ós ouch dats te dees teks zelf höbs gesjreve, of höbs euvergenómme oet 'n vriej, openbaar brón.<br /> <strong>GEBROEK GEI MATERIAAL DAT BESJIRMP WEURT DOOR AUTEURSRECH, BEHAUVE WENS TE DAO TOESJTÖMMING VEUR HÖBS!</strong>",
+'copyrightwarning2'    => "Mèrk op dat alle biedrages aan {{SITENAME}} kinne weure verangerd, aangepas of weggehaold door anger luuj. As te neet wils dat dienen tèks zoemer kint weure aangepas mós te 't hie neet plaatsje.<br />
+De beluifs ós ouch dats te dezen tèks zelf höbs gesjreve, of gekopieerd van 'n brón in 't publiek domein of get vergliekbaars (zuug $1 veur details).
+<strong>HIE GEIN AUTEURSRECHTELIK BESJIRMP WERK ZÓNGER TOESJTUMMING!</strong>",
+'longpagewarning'      => "WAARSJOEWING: Dees pazjena is $1 kilobytes lank; 'n aantal browsers kint probleme höbbe mit 't verangere van pazjena's in de buurt van of groeter es 32 kB. Kiek ofs te sjtökker van de pazjena mesjiens kins verplaatse nao 'n nuuj pazjena.",
+'readonlywarning'      => "WAARSJUWING: De database is vasgezèt veur ongerhoud, dus op 't mement kins e dien verangeringe neet opsjlaon. De kins dien tèks 't biste opsjlaon in 'n tèksbesjtand om 't later hie nog es te prebere.",
+'protectedpagewarning' => 'WAARSJUWING:  Dees pazjena is besjermd zoedat ze allein doer gebroekers mit administratorrechte kint weure verangerd.',
+'templatesused'        => 'Sjablone gebroek in dees pazjena:',
+'edittools'            => 'literal translation',
+
+# History pages
+'revhistory'          => 'Bewirkingshistorie',
+'nohistory'           => 'Dees pazjena is nog neet bewirk.',
+'revnotfound'         => 'Wieziging neet gevonge',
+'revnotfoundtext'     => 'De opgevraogde aw versie van dees pazjena is verzjwónde. Kontroleer estebleef de URL dieste gebroek höbs óm nao dees pazjena te gaon.',
+'loadhist'            => "Bezig met 't laje van de pazjenahistorie",
+'currentrev'          => 'Hujige versie',
+'revisionasof'        => 'Versie op $1',
+'previousrevision'    => '← Awwer versie',
+'currentrevisionlink' => 'zuug hujige versie',
+'cur'                 => 'hujig',
+'next'                => 'volgende',
+'last'                => 'vörrige',
+'histlegend'          => 'Verklaoring aafkortinge: (wijz) = versjil mit actueile versie, (vörrige) = versjil mit vörrige versie, K = kleine verangering',
+'deletedrev'          => '[gewis]',
+
+# Diffs
+'difference'                => '(Versjil tösje bewirkinge)',
+'loadingrev'                => "bezig mit 't laje van de pazjenaversie",
+'lineno'                    => 'Regel $1:',
+'editcurrent'               => 'De hujige versie van dees pazjena bewirke.',
+'selectnewerversionfordiff' => "Kees 'n nuuiere versie om te vergelieke",
+'selectolderversionfordiff' => "Kees 'n auwere versie om te vergelieke",
+'compareselectedversions'   => 'Vergeliek geselecteerde versies',
+
+# Search results
+'searchresults'         => 'Zeukresultate',
+'searchresulttext'      => 'Veur mier informatie euver zeuke op {{SITENAME}}, zuug [[{{MediaWiki:helppage}}|Zeuke op {{SITENAME}}]].',
+'searchsubtitleinvalid' => 'Voor zoekopdracht "$1"',
+'badquery'              => 'Ónzjus geformuleerde zeukopdrach',
+'badquerytext'          => "Diene zeukopdrach kós neet oetgeveurd weure. Waarsjienlik kump dit doordas te höbs geperbeerd e woord van minder as drie lètters te zeuke; dat weurt neet doer de software óngersjteundj.  't Is ouch meugelik dats te de zeuktèrm verkierd höbs ingegaeve.",
+'matchtotals'           => 'De zeukterm "$1" is gevonge in $2 pazjenatitels en in de tèks van $3 pazjena\'s.',
+'titlematches'          => 'Overeinkoms mèt volgende titels',
+'notitlematches'        => 'Geen enkele paginatitel gevonden met de opgegeven zoekterm',
+'textmatches'           => 'Euvereinkoms mèt artikelinhoud',
+'notextmatches'         => 'Geen artikel gevonden met opgegeven zoekterm',
+'prevn'                 => 'vörrige $1',
+'nextn'                 => 'volgende $1',
+'viewprevnext'          => '($1) ($2) ($3) bekieke.',
+'showingresults'        => 'Hieonger de <b>$1</b> resultate, vanaaf #<b>$2</b>.',
+'showingresultsnum'     => 'Hieonger de <b>$3</b> resultate vanaaf #<b>$2</b>.',
+'nonefound'             => '<strong>Lèt op:</strong> \'n zeukopdrach kan mislökke door \'t gebroek van (in \'t Ingelsj) väöl veurkómmende wäörd wie "of" en "be", die neet geïndexeerd zint, of door versjillende zeukterme tegeliek op te gaeve (de kries dan allein pazjena\'s te zeen woerin alle opgegaeve terme veurkómme).',
+'powersearch'           => 'Zeuke',
+'powersearchtext'       => '   
+ Zeuk in naomroemdes :<br />
+$1<br />
+$2 Toen redirects   Zeuk: $3 $9',
+'searchdisabled'        => '<p style="margin: 1.5em 2em 1em">Zeuke op {{SITENAME}} is oetgesjakeld vanweige gebrek aan servercapaciteit. Zoelang as de servers nog neet sjterk genog zunt kins e zeuke bie Google.
+<span style="font-size: 89%; display: block; margin-left: .2em">Mèrk op dat hun indexe van {{SITENAME}} content e bietje gedatierd kint zien.</span></p>',
+'blanknamespace'        => '(huidnaamruumde)',
+
+# Preferences page
+'preferences'              => 'Veurkäöre',
+'prefsnologin'             => 'Neet aangemèld',
+'prefsnologintext'         => 'De mos zien [[Special:Userlogin|aangemèld]] om veurkäöre te kinne insjtèlle.',
+'prefsreset'               => 'Sjtandaardveurkäöre hersjtèld.',
+'qbsettings'               => 'Menubalkinsjtèllinge',
+'qbsettings-none'          => 'Oetgesjakeld',
+'qbsettings-fixedleft'     => 'Links vas',
+'qbsettings-fixedright'    => 'Rechts vas',
+'qbsettings-floatingleft'  => 'Links zwevend',
+'qbsettings-floatingright' => 'Rechts zwevend',
+'changepassword'           => 'Wachwaord verangere',
+'skin'                     => '{{SITENAME}}-uterlik',
+'math'                     => 'Mattemetik rendere',
+'dateformat'               => 'Datumformaat',
+'datedefault'              => 'Gein veurkäör',
+'datetime'                 => 'Datum en tied',
+'math_unknown_error'       => 'onbekènde fout',
+'math_unknown_function'    => 'onbekènde functie',
+'math_bad_output'          => 'Kin neet sjrieve nao de output directory veur mattematik',
+'prefs-personal'           => 'Gebroekersinfo',
+'prefs-rc'                 => 'Recènte verangeringe en weergaaf van sjtumpkes',
+'prefs-misc'               => 'Anger insjtèllinge',
+'saveprefs'                => 'Veurkäöre opsjlaon',
+'resetprefs'               => 'Sjtandaardveurkäöre hersjtèlle',
+'oldpassword'              => 'Hujig wachwaord',
+'newpassword'              => 'Nuuj wachwaord',
+'retypenew'                => "Veur 't nuuj wachwaord nogins in",
+'textboxsize'              => 'Aafmeitinge tèksveld',
+'rows'                     => 'Raegels',
+'columns'                  => 'Kolomme',
+'searchresultshead'        => 'Insjtèllinge veur zeukresultate',
+'resultsperpage'           => 'Aantal te toene zeukresultate per pazjena',
+'contextlines'             => 'Aantal reigels per gevónje pazjena',
+'contextchars'             => 'Aantal teikes van de conteks per reigel',
+'stubthreshold'            => "Een pazjena weurd als 'sjtumpke' besjauwd mit 'n groette kleiner as",
+'recentchangescount'       => 'Aantal titels in lies recènte verangeringe',
+'savedprefs'               => 'Dien veurkäöre zint opgesjlage.',
+'timezonelegend'           => 'Tiedzone',
+'timezonetext'             => "'t Aantal oere dat diene lokale tied versjilt van de servertied (UTC).",
+'localtime'                => 'Plaotsjelike tied',
+'timezoneoffset'           => 'tiedsverschil',
+'servertime'               => 'Server tied is noe',
+'guesstimezone'            => 'Invulle van browser',
+'allowemail'               => 'E-mail van anger gebroekers toesjtaon',
+'defaultns'                => 'Zeuk sjtandaard in dees naomruumdes:',
+'default'                  => 'sjtandaard',
+
+# Recent changes
+'recentchanges'     => 'Recènte verangeringe',
+'recentchangestext' => 'literal translation',
+'rcnote'            => 'Hiejónger sjtaon de <strong>$1</strong> lètste verangeringe van de aafgeloupe <strong>$2</strong> daag, $3.',
+'rcnotefrom'        => "Verangeringe sins <b>$2</b> (mit 'n maximum van <b>$1</b> verangeringe).",
+'rclistfrom'        => 'Toen de verangeringe vanaaf $1',
+'rclinks'           => 'Bekiek de $1 litste verangeringe van de aafgelaupe $2 daag.<br />$3',
+'diff'              => 'vera',
+'hide'              => 'verberg',
+'show'              => 'toen',
+'minoreditletter'   => 'K',
+
+# Recent changes linked
+'recentchangeslinked' => 'Volg links',
+
+# Upload
+'upload'            => 'Upload',
+'uploadbtn'         => 'upload file',
+'reupload'          => 'Opnuui uploade',
+'reuploaddesc'      => "Truuk nao 't uploadformeleer.",
+'uploadnologin'     => 'Neet aangemèld',
+'uploadnologintext' => 'De mos [[Special:Userlogin|zien aangemèld]] om besjtande te uploade.',
+'uploaderror'       => 'upload fout',
+'uploadtext'        => "Gebroek 't óngersjtaonde formuleer óm besjtande op te laje. Óm ierder opgelaje besjtande te bekieke of te zeuke, gank nao de [[Special:Imagelist|lies van opgelaje besjtande]]. Uploads en verwiederinge waere ouch biegehauwte in 't [[Special:Log/upload|uploadlogbook]]. 
+
+Gebroek óm 'n plaetje of 'n besjtand in 'n pazjena op te numme 'ne link in de vörm:
+* '''<nowiki>[[</nowiki>{{ns:Image}}<nowiki>:Besjtand.jpg]]</nowiki>'''
+* '''<nowiki>[[</nowiki>{{ns:Image}}<nowiki>:Besjtand.png|alternatief teks]]</nowiki>'''
+of veur mediabesjtande:
+* '''<nowiki>[[</nowiki>{{ns:Media}}<nowiki>:Besjtand.ogg]]</nowiki>'''",
+'uploadlog'         => 'uploadlogbook',
+'uploadlogpage'     => 'Uploadlogbook',
+'uploadlogpagetext' => 'Hieonger de lies mit de meist recent ge-uploade besjtande. Alle tiede zunt servertiede (UTC).
+<ul>
+</ul>',
+'filename'          => 'Besjtandsnaom',
+'filedesc'          => 'Besjrieving',
+'filesource'        => 'Bron',
+'uploadedfiles'     => 'Ge-uploade bestanden',
+'minlength'         => "De naom van 't besjtand mot oet minstes drie teikes besjtaon.",
+'badfilename'       => 'De naom van \'t besjtand is verangerd in "$1".',
+'emptyfile'         => "'t Besjtand wats re höbs geupload is laeg. Dit kump waorsjienliek door 'n typfout in de besjtandsnaom. Kiek estebleef ofs te dit besjtand wirkelik wils uploade.",
+'fileexists'        => "D'r is al e besjtand mit dees naam, bekiek $1 of se dat besjtand mesjien wils vervange.",
+'successfulupload'  => 'De upload is geluk',
+'fileuploaded'      => '<b>Het uploaden van bestand "$1" is geslaagd.</b> Gelieve deze link naar de omschrijvingspagina te volgen: ($2). Vul daar informatie in over dit bestand, bijvoorbeeld de oorsprong, wanneer en door wie het gemaakt is en wat u verder er nog over te vertellen heeft.',
+'uploadwarning'     => 'Upload waarsjuwing',
+'savefile'          => 'Bestand opsjlaon',
+'uploadedimage'     => 'haet ge-upload: [[$1]]',
+'destfilename'      => 'Doeltitel',
+
+# Image list
+'imagelist'           => 'Lies van aafbeildinge',
+'imagelisttext'       => "Hie volgt 'n lies mit $1 afbeildinge geordend $2.",
+'getimagelist'        => 'Lies van aafbeildinge ophaole',
+'ilsubmit'            => 'Zeuk',
+'showlast'            => 'Toen de litste $1 aafbeildinge geordend $2.',
+'byname'              => 'op naom',
+'bydate'              => 'op datum',
+'bysize'              => 'op gruutde',
+'imgdelete'           => 'verw',
+'imgdesc'             => 'besc',
+'imglegend'           => 'Oetlik: (besc) = toen/veranger besjrieving van de aafbeilding, (verw) = wis de aafbeilding.',
+'imghistory'          => 'Historie van de aafbeilding',
+'deleteimg'           => 'wis',
+'deleteimgcompletely' => 'Wis al versies',
+'imghistlegend'       => 'Oetlik: (cur)= huidige aafbeilding, (verw) = wis de aw versie, (rev) = zit aw versie truuk.<br />
+<i>Klik op de datum om de aafbeildinge die ge-upload zint op die datum te zeen</i>.',
+'imagelinks'          => 'Aafbeildingsverwiezinge',
+'linkstoimage'        => "Dees aafbeilding weurt op de volgende pazjena's gebroek:",
+'nolinkstoimage'      => 'Gein enkele pazjena gebroek dees aafbeilding.',
+'sharedupload'        => 'literal translation',
+
+# Statistics
+'statistics'    => 'Sjtattestieke',
+'sitestats'     => 'Sjtatistieke euver {{SITENAME}}',
+'userstats'     => 'Stattestieke euver gebroekers',
+'sitestatstext' => "D'r zunt in totaal '''\$1''' pazjena's in de database.
+Dit is inclusief \"euverlik\"-pazjena's, pazjena's euver {{SITENAME}}, extreem korte \"sjtumpkes\", redirects, en anger pazjena's die waarsjienlik neet as inhoud mote waere getèld. 't Aantal pazjena's mit content weurt gesjat op '''\$2'''.
+
+D'r zunt '''\$8''' besjtande opgelaje.
+
+D'r is in totaal '''\$3''' kier 'n pazjena bekeke en '''\$4''' kier 'n pazjena bewirk sins de wiki is opgezat. Dat geuf e gemiddelde van '''\$5''' bewirkinge per pazjena en '''\$6''' getuinde pazjena's per bewirking.
+
+De lengde van de [http://meta.wikimedia.org/wiki/Help:Job_queue job queue] is '''\$7'''.",
+'userstatstext' => "D'r zeen '''$1''' geregistreerde gebroekers; '''$2''' (of '''$4''') hievan zeen systeemwèrkers (zuug $3).",
+
+'disambiguations'     => "Verdudelikingspazjena's",
+'disambiguationspage' => 'Template:Verdudeliking',
+
+'doubleredirects'     => 'Dobbel redirects',
+'doubleredirectstext' => '<b>Kiek oet:</b> In dees lies kanne redirects sjtaon die neet dao-in toeshure. Dat kump meistal doordat nao de #REDIRECT nog anger links op de pazjena sjtaon.<br />
+Op eder raegel vings te de ierste redirectpazjena, de twiede redirectpazjena en de iesjte raegel van de twiede redirectpazjena. Normaal bevat dees litste de pazjena woe de iesjte redirect naotoe zouw mótte verwieze.',
+
+'brokenredirects'     => 'Gebraoke redirects',
+'brokenredirectstext' => "De óngersjtaonde redirectpazjena's bevatte 'n redirect nao 'n neet-besjtaonde pazjena.",
+
+# Miscellaneous special pages
+'nbytes'                  => '$1 bytes',
+'ncategories'             => '$1 categories',
+'nlinks'                  => '$1 verwiezinge',
+'nrevisions'              => '$1 revisions',
+'nviews'                  => '$1 kier bekeke',
+'lonelypages'             => "Weispazjena's",
+'uncategorizedpages'      => "Ongekattegoriseerde pazjena's",
+'uncategorizedcategories' => 'Ongekattegoriseerde kattegorië',
+'unusedcategories'        => 'Óngebroekde kategorieë',
+'unusedimages'            => 'Ongebroekde aafbeildinge',
+'popularpages'            => 'Populaire artikels',
+'wantedcategories'        => 'Gewunsjde categorieë',
+'wantedpages'             => "Gewunsjde pazjena's",
+'mostlinked'              => "Meis gelinkde pazjena's",
+'mostcategories'          => 'Artikele mit de meiste kategorieë',
+'mostimages'              => 'Meis gelinkde aafbeildinge',
+'mostrevisions'           => 'Artikele mit de meiste bewirkinge',
+'allpages'                => "Alle pazjena's",
+'randompage'              => 'Willekäörige pazjena',
+'shortpages'              => 'Korte artikele',
+'longpages'               => 'Lang artikele',
+'deadendpages'            => "Doedloupende pazjena's",
+'listusers'               => 'Lies van gebroekers',
+'specialpages'            => "Speciaal pazjena's",
+'spheading'               => "Speciaal pazjena's",
+'rclsub'                  => '(van pazjena\'s woe "$1" heen verwiest)',
+'newpages'                => "Nuuj pazjena's",
+'ancientpages'            => 'Artikele die lank neet bewèrk zeen',
+'move'                    => 'Verplaats',
+'movethispage'            => 'Verplaats dees pazjena',
+'unusedimagestext'        => "<p>Lèt op! 't Zou kinne dat er via een directe link verweze weurt nao 'n aafbeilding, bevoorbild vanoet 'n angesjtalige {{SITENAME}}. Het is daorom meugelijk dat 'n aafbeilding hie vermeld sjtit terwiel e toch gebroek weurt.",
+
+# Book sources
+'booksources' => 'Bookwinkele',
+
+'categoriespagetext' => 'De wiki haet de volgende categorieë:',
+'data'               => 'Gegaeves',
+'alphaindexline'     => '$1 nao $2',
+'version'            => 'Versie',
+
+# Special:Log
+'specialloguserlabel'  => 'Gebroeker:',
+'speciallogtitlelabel' => 'Titel:',
+'log'                  => 'Logbeuk',
+'alllogstext'          => "Dit is 't gecombineerd logbook. De kins ouch 'n bepaald logbook keze, of filtere op gebroekersnaam of  pazjena.",
+
+# Special:Allpages
+'nextpage'          => 'Volgende pazjena ($1)',
+'allpagesfrom'      => "Tuin pazjena's vanaaf:",
+'allarticles'       => 'Alle artikele',
+'allinnamespace'    => "Alle pazjena's (naamruumde $1)",
+'allnotinnamespace' => "Alle pazjena's (neet in naamruumde $1)",
+'allpagesprev'      => 'Veurige',
+'allpagesnext'      => 'Volgende',
+'allpagessubmit'    => 'OK',
+'allpagesprefix'    => "Tuin pazjena's mèt 't veurvoogsel:",
+
+# E-mail user
+'mailnologin'     => 'Gein e-mailadres bekènd veur deze gebroeker',
+'mailnologintext' => "De mos zien [[Special:Userlogin|aangemèld]] en 'n gèldig e-mailadres in bie dien [[Special:Preferences|veurkäöre]] höbbe ingevuld om mail nao anger gebroekers te sjture.",
+'emailuser'       => "Sjik deze gebroeker 'nen e-mail",
+'emailpage'       => "Sjik gebroeker 'nen e-mail",
+'emailpagetext'   => "As deze gebroeker e geljig e-mailadres heet opgegaeve dan kant geer via dit formuleer e berich sjikke. 't E-mailadres wat geer heet opgegeve bie eur veurkäöre zal as versjikker aangegaeve waere.",
+'noemailtitle'    => 'Gein e-mailadres bekènd veur deze gebroeker',
+'noemailtext'     => 'Deze gebroeker haet gein gèldig e-mailadres opgegaeve of haet dees functie oetgesjakeld.',
+'emailfrom'       => 'Van',
+'emailto'         => 'Aan',
+'emailsubject'    => 'Óngerwerp',
+'emailmessage'    => 'Berich',
+'emailsend'       => 'Sjik berich',
+'emailsent'       => 'E-mail sjikke',
+'emailsenttext'   => 'Die berich is versjik.',
+
+# Watchlist
+'watchlist'            => 'Volglies',
+'mywatchlist'            => 'Volglies',
+'nowatchlist'          => "D'r sjtit niks op dien volglies.",
+'watchnologin'         => 'De bis neet aangemèld',
+'watchnologintext'     => "De mós [[Special:Userlogin|aangemèld]] zeen veur 't verangere van dien volglies.",
+'addedwatch'           => 'Aan volglies toegeveug',
+'addedwatchtext'       => 'De pazjena "$1" is aan dien [[Special:Watchlist|volglies]] toegeveug.
+Toekomstige verangeringe aan deze pazjena en de biebehurende euverlikpazjena weure hie vermèld. 
+Ouch versjiene gevolgde pazjena\'s in \'t <b>vet</b> in de [[Special:Recentchanges|liest van recènte verangeringe]]. <!-- zodat u ze eenvoudiger kan opmerken.-->
+
+<!-- huh? Wen se ein pazjena van dien volgliest wils haole mos e op "sjtop volge"  -- pagina wenst te verwijderen van uw volgliest klik dan op "Van volgliest verwijderen" in de menubalk. -->',
+'removedwatch'         => 'Van volglies aafhoale',
+'removedwatchtext'     => 'De pazjena "$1" is van dien volglies aafgehaold.',
+'watch'                => 'Volg',
+'watchthispage'        => 'Volg dees pazjena',
+'unwatch'              => 'Sjtop volge',
+'unwatchthispage'      => 'Neet mië volge',
+'notanarticle'         => 'Is gein artikel',
+'watchnochange'        => 'Gein van dien gevolgde items is aangepas in dees periode.',
+'watchdetails'         => "Dao sjtaon $1 pazjena's op dien volglies mèt oetzunjering van de euverlikpazjena's. De kèns dien kómplete volglies [[Special:Watchlist/edit|bekieke en verangere]].",
+'wlheader-showupdated' => "* Pazjena's die verangerd zeen saers doe ze veur 't lètste bezaogs sjtaon '''vet'''",
+'watchmethod-recent'   => "Controleer recènte verangere veur gevolgde pazjena's",
+'watchmethod-list'     => "controlere van gevolgde pazjena's veur recènte verangeringe",
+'removechecked'        => "Verwieder aangevinkde pazjena's van dien volglies",
+'watchlistcontains'    => "Dien volglies bevat $1 pazjena's.",
+'watcheditlist'        => 'Hie is ein alfabetische lies van de door dich gevolgde pazjena\'s. Vink de veerkentjes van de pazjena\'s dies te van dien volglies wils haole aan en klik op de "wisse"-knop hieonger.',
+'removingchecked'      => "Pazjena's van volglies aafgehaold...",
+'couldntremove'        => "Kós item '$1' neet wisse...",
+'wlnote'               => 'Hieonger de lètste $1 verangeringe van de lètste <b>$2</b> oor.',
+'wlshowlast'           => 'Tuin lètste $1 ore $2 daag $3',
+'wlsaved'              => "Dit is 'n opgesjlage versie van dien volglies.",
+
+'enotif_mailer'      => '{{SITENAME}} notificatiemail',
+'enotif_reset'       => "Mèrk alle bezochde pazjena's aan.",
+'enotif_newpagetext' => "DIt is 'n nuuj pazjena.",
+'changed'            => 'verangerd',
+'created'            => 'aangemaak',
+'enotif_subject'     => 'De {{SITENAME}}pazjena $PAGETITLE is $CHANGEDORCREATED door $PAGEEDITOR',
+'enotif_lastvisited' => 'Zuug $1 veur al verangeringe saer dien lèste bezeuk.',
+'enotif_body'        => 'Bèste $WATCHINGUSERNAME,
+
+De {{SITENAME}}-pazjena "$PAGETITLE" is $CHANGEDORCREATED op $PAGEEDITDATE door $PAGEEDITOR, zuug $PAGETITLE_URL veur de hujige versie.
+
+$NEWPAGE
+
+Bewirkingssamevatting: $PAGESUMMARY $PAGEMINOREDIT
+
+Contacteer de bewirker:
+mail: $PAGEEDITOR_EMAIL
+wiki: $PAGEEDITOR_WIKI
+
+Dao zalle bie volgende verangeringe gein nuuj berichte kómme tenzies te dees pazjena obbenuujts bezeuks. De kans ouch de notificatievlegskes op dien volglies verzètte.
+
+             \'t {{SITENAME}}-notificatiesysteem
+
+--
+Óm de insjtèllinge van dien volglies te verangere, zuug
+{{fullurl:Special:Watchlist/edit}}
+
+Commentaar en wiejer assistentie:
+{{fullurl:Help:Contents}}',
+
+# Delete/protect/revert
+'deletepage'           => 'Pazjena wisse',
+'confirm'              => 'Bevèstig',
+'excontent'            => "inhawd waor: '$1'",
+'excontentauthor'      => "inhawd waor: '$1' (aangemaak door [[Special:Contributions/$2|$2]])",
+'exbeforeblank'        => "inhawd veur 't wisse waor: '$1'",
+'exblank'              => 'pazjena waor laeg',
+'confirmdelete'        => 'Bevèstig wisse',
+'deletesub'            => '(Wisse "$1")',
+'confirmdeletetext'    => "De sjteis op 't punt 'n pazjena of e plaetje veur ummer te wisse. Dit haolt allen inhawd en historie oet de database eweg. Bevèstig hieónger dat dit welzeker dien bedoeling is, dats te de gevolge begrieps.",
+'actioncomplete'       => 'Actie voltoeid',
+'deletedtext'          => '"$1" is gewis. Zuug $2 vuur \'n euverzich van recèntelik gewisde pazjena\'s.',
+'deletedarticle'       => '"$1" is gewis',
+'dellogpage'           => 'Wislogbook',
+'dellogpagetext'       => "Hie volg 'n lies van de meis recèntelik gewisde pazjena's en plaetjes.",
+'deletionlog'          => 'Wislogbook',
+'reverted'             => 'Iedere versie hersjtèld',
+'deletecomment'        => 'Rae veur wisactie',
+'imagereverted'        => 'De omzetting naar de oudere versie is geslaagd.',
+'rollback'             => 'Wijzigingen ongedaan maken',
+'rollbacklink'         => 'Trukdrieje',
+'cantrollback'         => 'Trökdrejje van verangeringe neet meugelik: Dit artikel haet mer einen auteur.',
+'alreadyrolled'        => "'t Is neet meugelik óm de lèste verangering van [[:$1]]
+door [[User:$2|$2]] ([[User talk:$2|euverlik]]) óngedaon te make. Emes angers haet de pazjena al hersjtèld of haet 'n anger bewèrking gedaon. 
+
+De lèste bewèrking is gedaon door [[User:$3|$3]] ([[User talk:$3|euverlik]]).",
+'editcomment'          => '\'t Bewirkingscommentair waor: "<i>$1</i>".', # only shown if there is an edit comment
+'revertpage'           => 'Wieziginge door [[Special:Contributions/$2|$2]] ([[User_talk:$2|Euverlèk]]) trukgedriejd tot de lètste versie door [[User:$1|$1]]',
+'protectlogpage'       => "Logbook besjermde pazjena's",
+'protectedarticle'     => '$1 besjermd',
+'unprotectedarticle'   => 'besjerming van $1 opgeheve',
+'protectsub'           => '(Besjerme van "$1")',
+'confirmprotecttext'   => 'Wits te zeker dats te dees pazjena wils besjèrme?',
+'confirmprotect'       => 'Bevèstig besjerme',
+'protectmoveonly'      => 'Besjerm allein taenge verplaatse',
+'protectcomment'       => 'Rede veur besjerming',
+'unprotectsub'         => '(Besjerming van "$1" opheve)',
+'confirmunprotecttext' => 'Wits e zeker das de besjèrming van dees pazjena wils opheffe?',
+'confirmunprotect'     => 'Bevèstig vriegaeve van pazjena',
+'unprotectcomment'     => 'Rede veur opheffe van besjerming',
+
+# Undelete
+'undelete'           => 'Verwiederde pazjena trukplaatse',
+'undeletepage'       => "Verwiederde pazjena's bekieke en trukplaatse",
+'undeletepagetext'   => "De ongersjtaande pazjena's zint verwiederd, meh bevinge zich nog sjteeds in 't archief, en kinne weure truukgeplaatsj.",
+'undeleterevisions'  => "$1 versies in 't archief",
+'undeletehistory'    => 'Als u een pagina terugplaatst, worden alle versies als oude versies teruggeplaatst. Als er al een nieuwe pagina met dezelfde naam is aangemaakt, zullen deze versies als oude versies worden teruggeplaatst, maar de huidige versie neet gewijzigd worden.',
+'undeletebtn'        => 'Trökzètte!',
+'undeletedarticle'   => '"$1" is truukgeplaatsj.',
+'undeletedrevisions' => '$1 versies truukgeplaatsj',
+
+# Namespace form on various pages
+'namespace' => 'Naamruumde:',
+'invert'    => 'Ómgedriejde selectie',
+
+# Contributions
+'contributions' => 'Biedrages per gebroeker',
+'mycontris'     => 'Mien biedraag',
+'contribsub2'    => 'Veur $1 ($2)',
+'nocontribs'    => 'Gein wijzigingen gevonden die aan de gestelde criteria voldoen.',
+'ucnote'        => 'Hieonger sjtont de litste <b>$1</b> verangeringe van deze gebroeker in de litste <b>$2</b> daag.',
+'uclinks'       => 'Bekiek de litste <b>$1</b> verangeringe; bekiek de litste <b>$2</b> daag.',
+'uctop'         => ' (litste verangering)',
+
+# What links here
+'whatlinkshere' => 'Links nao dees pazjena',
+'notargettitle' => 'Gein doelpagina',
+'notargettext'  => 'Ger hubt neet gezag veur welleke pagina ger deze functie wilt bekieke.',
+'linklistsub'   => '(lies van verwiezinge)',
+'linkshere'     => "De volgende pazjena's verwieze hieheen:",
+'nolinkshere'   => "D'r zint gein pazjena's mit links hiehaer.",
+'isredirect'    => 'redirect pazjena',
+
+# Block/unblock
+'blockip'            => 'Blokkeer dit IP-adres',
+'blockiptext'        => "Gebroek 't óngerstjaondj formeleer óm sjrieftoegank van e zeker IP-adres te verbeje. Dit maag allein gedaon weure om vandalisme te veurkómme.",
+'ipaddress'          => 'IP-adres',
+'ipbreason'          => 'Reden',
+'ipbsubmit'          => 'Blokkeer dit IP-adres',
+'ipboptions'         => '2 hours,1 day,3 days,1 week,2 weeks,1 month,3 months,6 months,1 year,infinite',
+'badipaddress'       => "'t IP-adres haet 'n ongeldige opmaak.",
+'blockipsuccesssub'  => 'Blokkaad gelök',
+'blockipsuccesstext' => '\'t IP-adres "$1" is geblokkeerd.<br />
+Zuug de [[Special:Ipblocklist|lies van geblokkeerde IP-adresse]].',
+'unblockip'          => 'Deblokkeer IP adres',
+'unblockiptext'      => 'Gebroek het ongersjtaonde formeleer om weer sjrieftoegang te gaeve aan e geblokkierd IP adres.',
+'ipusubmit'          => 'Deblokkeer dit IP-adres.',
+'ipblocklist'        => 'Lies van geblokkeerde IP-adressen',
+'blocklistline'      => 'Op $1 blokkeerde $2 $3 ($4)',
+'ipblocklistempty'   => 'De blokkeerlies ies laeg.',
+'blocklink'          => 'Blokkeer',
+'unblocklink'        => 'deblokkeer',
+'contribslink'       => 'biedrages',
+'autoblocker'        => 'Ómdets te \'n IP-adres deils mit "$1" (geblokkeerd mit raeje "$2") bis te automatisch geblokkeerd.',
+'blocklogpage'       => 'Blokkeerlogbook',
+'blocklogentry'      => '"$1" is geblokkeerd veur d\'n tied van $2',
+'blocklogtext'       => "Dit is 'n log van blokkades van gebroekers. Automatisch geblokkeerde IP-adresse sjtoon hie neet bie. Zuug de [[Special:Ipblocklist|Lies van geblokkeerde IP-adresse]] veur de lies van op dit mement wèrkende blokkades.",
+'proxyblockreason'   => "Dien IP-adres is geblokkeerd ómdat 't 'n aope proxy is. Contacteer estebleef diene internet service provider of technische óngersjteuning en informeer ze euver dit serjeus veiligheidsprebleem.",
+'proxyblocksuccess'  => 'Klaor.',
+
+# Developer tools
+'lockdb'              => 'Blokkeer de database',
+'unlockdb'            => 'Deblokkeer de database',
+'lockdbtext'          => "Waarsjoewing: De database blokkere haet 't gevolg dat nemes nog pazjena's kint bewirke, veurkäöre kint verangere of get angers kint doon woeveur d'r verangeringe in de database nudig zint.",
+'unlockdbtext'        => "Het de-blokkeren van de database zal de gebroekers de mogelijkheid geven om wijzigingen aan pagina's op te slaan, hun voorkeuren te wijzigen en alle andere bewerkingen waarvoor er wijzigingen in de database nodig zijn. Is dit inderdaad wat u wilt doen?.",
+'lockconfirm'         => 'Jao, ich wil de database blokkere.',
+'unlockconfirm'       => 'Ja, ik wil de database de-blokkeren.',
+'lockbtn'             => 'Blokkeer de database',
+'unlockbtn'           => 'Deblokkeer de database',
+'locknoconfirm'       => "De höbs 't vekske neet aangevink om dien keuze te bevèstige.",
+'lockdbsuccesssub'    => 'Blokkering database succesvol',
+'unlockdbsuccesssub'  => 'Blokkering van de database opgeheven',
+'lockdbsuccesstext'   => "De database van {{SITENAME}} is geblokkeerd. Vergaet neet de database opnuuj te deblokkere wens te klaor bis mit 't óngerhaud.",
+'unlockdbsuccesstext' => 'Blokkering van de database van {{SITENAME}} is opgeheven.',
+
+# Move page
+'movepage'               => 'Verplaats pazjena',
+'movepagetext'           => "Mit 't óngersjtaond formuleer kans te 'n pazjena verplaatse. De historie van de ouw pazjena zal nao de nuuj mitgaon. De ouwe titel zal automatisch 'ne redirect nao de nuuj pazjena waere. Doe kans 'n pazjena allein verplaatse, es gein pazjena besjteit mit de nuje naam, of es op die pazjena allein 'ne redirect zónger historie sjteit.",
+'movepagetalktext'       => "De biebehurende euverlikpazjena weurt ouch verplaats, mer '''neet''' in de volgende gevalle:
+* es de pazjena nao 'n anger naamruumde verplaats weurt
+* es al 'n euverlikpazjena besjteit ónger de angere naam
+* es doe 't óngersjtaond vekske neet aanvinks",
+'movearticle'            => 'Verplaats pazjena',
+'movenologin'            => 'Neet aangemèld',
+'movenologintext'        => "Veur 't verplaatsje van 'n pazjena mos e zien [[Special:Userlogin|aangemèld]].",
+'newtitle'               => 'Nao de nuje titel',
+'movepagebtn'            => 'Verplaats pazjena',
+'pagemovedsub'           => 'De verplaatsing is gelök',
+'pagemovedtext'          => 'Pazjena "[[$1]]" verplaats nao "[[$2]]".',
+'articleexists'          => "Dao is al 'n pazjena mit dees titel of de titel is óngeljig. <br />Kees estebleef 'n anger titel.",
+'talkexists'             => "De pazjena zelf is verplaats, meh de euverlikpazjena kós neet verplaats waere, ómdat d'r al 'n euverlikpazjena mit de nuje titel besjtóng. Combineer de euverlikpazjena's estebleef mit de hand.",
+'movedto'                => 'verplaats nao',
+'movetalk'               => 'Verplaats de euverlikpazjena ouch.',
+'talkpagemoved'          => 'De biebehurende euverlikpazjena is ouch verplaats.',
+'talkpagenotmoved'       => 'De biebehurende euverlikpazjena is <strong>neet</strong> verplaats.',
+'1movedto2'              => '[[$1]] verplaats nao [[$2]]',
+'1movedto2_redir'        => '[[$1]] euver redirect verplaats nao [[$2]]',
+'movelogpage'            => "Logbook verplaatsde pazjena's",
+'movelogpagetext'        => "Dit is de lies van verplaatsde pazjena's.",
+'movereason'             => 'Lèk oet woeróm',
+'revertmove'             => 'trökdrieje',
+'delete_and_move'        => 'Wis en verplaats',
+'delete_and_move_text'   => '==Wisse vereis==
+
+De doeltitel "[[$1]]" besjteit al. Wils te dit artikel wisse óm ruumde te make veur de verplaatsing?',
+'delete_and_move_reason' => 'Gewis óm artikel te kónne verplaatse',
+
+# Export
+'export' => "Exporteer pazjena's",
+
+# Namespace 8 related
+'allmessages'               => 'Alle systeemberichte',
+'allmessagesname'           => 'Naam',
+'allmessagesdefault'        => 'Obligaten teks',
+'allmessagescurrent'        => 'Hujige teks',
+'allmessagestext'           => "Dit is 'n lies van alle systeemberichte besjikbaar in de MediaWiki:-naamruumde.",
+'allmessagesnotsupportedUI' => 'Dien huidige interface taol <b>$1</b> weurt bie dees site neet ongerstjeund doer special:Allmessages.',
+'allmessagesnotsupportedDB' => 'special:Allmessages neet óngersjteundj ómdat wgUseDatabaseMessages oet (off) sjteit.',
+
+# Thumbnails
+'thumbnail-more' => 'Vergroete',
+'missingimage'   => '<b>Plaetsje neet besjikbaar</b><br /><i>$1</i>',
+'filemissing'    => 'Besjtand ontbrik',
+
+# Tooltip help for the actions
+'tooltip-pt-userpage'             => 'Mien gebroekerspazjena',
+'tooltip-pt-anonuserpage'         => 'De gebroekerspazjena veur dit IP adres',
+'tooltip-pt-mytalk'               => 'Mien euverlikpazjena',
+'tooltip-pt-anontalk'             => 'Euverlèk euver verangeringe doer dit IP addres',
+'tooltip-pt-preferences'          => 'Mien veurkäöre',
+'tooltip-pt-watchlist'            => 'De liest van gevolgde pazjenas.',
+'tooltip-pt-mycontris'            => 'Liest van mien biedraag',
+'tooltip-pt-login'                => 'De weurs aangemodigd om in te logge, meh t is neet verplich.',
+'tooltip-pt-anonlogin'            => 'De weurs aangemodigd om in te logge, meh t is neet verplich.',
+'tooltip-pt-logout'               => 'Aafmèlde',
+'tooltip-ca-talk'                 => 'Euverlèk euver dit artikel',
+'tooltip-ca-edit'                 => 'De kins dees pazjena verangere.',
+'tooltip-ca-addsection'           => 'Opmèrking toevoge aan dees discussie.',
+'tooltip-ca-viewsource'           => 'Dees pazjena is besjermd. De kins häör brontèks bekieke.',
+'tooltip-ca-history'              => 'Auw versies van dees pazjena.',
+'tooltip-ca-protect'              => 'Besjerm dees pazjena',
+'tooltip-ca-delete'               => 'Verwieder dees pazjena',
+'tooltip-ca-undelete'             => 'Hersjtèl de verangeringe van dees pazjena van veurdat ze gewist woerd',
+'tooltip-ca-move'                 => 'Verplaats dees pazjena',
+'tooltip-ca-watch'                => 'Dees pazjena toeveuge aan volgliest',
+'tooltip-ca-unwatch'              => 'Dees pazjena van volgliest aafhaole',
+'tooltip-search'                  => 'Doerzeuk dizze wiki',
+'tooltip-p-logo'                  => 'Huidpazjena',
+'tooltip-n-mainpage'              => 'Bezeuk de huidpazjena',
+'tooltip-n-portal'                => 'Euver t projèk, was e kins doon, woe se dinger kins vinge',
+'tooltip-n-currentevents'         => 'Achtergrondinfo van t nuuis',
+'tooltip-n-recentchanges'         => 'De lies van recènte verangeringe in de wiki.',
+'tooltip-n-randompage'            => 'Laadt n willekäörige pazjena',
+'tooltip-n-help'                  => 'De plek om informatie euver dit projèk te vinge.',
+'tooltip-n-sitesupport'           => 'Sjteun os',
+'tooltip-t-whatlinkshere'         => 'Liest van alle wiki pazjenas die hieheen linke',
+'tooltip-t-recentchangeslinked'   => 'Recènte verangeringe in pazjenas woeheen gelinkt weurd',
+'tooltip-feed-rss'                => 'RSS feed veur dees pazjena',
+'tooltip-feed-atom'               => 'Atom feed veur dees pazjena',
+'tooltip-t-contributions'         => 'Bekiek de liest van contributies van dizze gebroeker',
+'tooltip-t-emailuser'             => 'Sjtuur inne mail noa dizze gebroeker',
+'tooltip-t-upload'                => 'Upload plaetsjes of media besjtande',
+'tooltip-t-specialpages'          => 'Liest van alle speciale pazjenas',
+'tooltip-ca-nstab-main'           => 'Bekiek de pazjena',
+'tooltip-ca-nstab-user'           => 'Bekiek de gebroekerspazjena',
+'tooltip-ca-nstab-media'          => 'Bekiek de mediapazjena',
+'tooltip-ca-nstab-special'        => 'Dit is n speciaal pazjena, de kins dees pazjena neet zelf editte.',
+'tooltip-ca-nstab-project'        => 'Bekiek de projèkpazjena',
+'tooltip-ca-nstab-image'          => 'Bekiek de plaetsjespazjena',
+'tooltip-ca-nstab-mediawiki'      => 'Bekiek t systeimberich',
+'tooltip-ca-nstab-template'       => 'Bekiek t sjabloon',
+'tooltip-ca-nstab-help'           => 'Bekiek de helppazjena',
+'tooltip-ca-nstab-category'       => 'Bekiek de kattegoriepazjena',
+'tooltip-minoredit'               => "Markeer dit as 'n kleine verangering",
+'tooltip-save'                    => 'Bewaar dien verangeringe',
+'tooltip-preview'                 => 'Bekiek dien verangeringe veurdets te ze definitief opsjleis!',
+'tooltip-diff'                    => 'Bekiek dien verangeringe in de teks.',
+'tooltip-compareselectedversions' => 'Bekiek de versjille tusje de twie geselectierde versies van dees pazjena.',
+'tooltip-watch'                   => 'Voog dees pazjena toe aan dien volglies',
+
+# Attribution
+'anonymous'        => 'Anoniem(e) gebroeker(s) van {{SITENAME}}',
+'siteuser'         => '{{SITENAME}} gebroeker $1',
+'lastmodifiedatby' => "Dees pazjena is 't litst verangert op $2, $1 doer $3.", # $1 date, $2 time, $3 user
+'and'              => 'en',
+'siteusers'        => '{{SITENAME}} gebroekers(s) $1',
+'creditspage'      => 'Sjrievers van dees pazjena',
+
+# Spam protection
+'subcategorycount'     => 'Dees categorie haet {{PLURAL:$1|ein subcategorie|$1 subcategorieë}}.',
+'categoryarticlecount' => 'Dao zeen $1 artikele in dees categorie.',
+
+# Math options
+'mw_math_png'    => 'Ummer PNG rendere',
+'mw_math_simple' => 'HTML in erg simpele gevalle en angesj PNG',
+'mw_math_html'   => 'HTML woe meugelik en angesj PNG',
+'mw_math_source' => 'Laot de TeX code sjtaon (vuur tèksbrowsers)',
+'mw_math_modern' => 'Aangeroaje vuur nuui browsers',
+'mw_math_mathml' => 'MathML woe meugelik (experimenteil)',
+
+# Image deletion
+'deletedrevision' => 'Aw versie $1 gewis.',
+
+# Browsing diffs
+'previousdiff' => '← Gank nao de vurrige diff',
+'nextdiff'     => 'Gank nao de volgende diff →',
+
+# Media information
+'imagemaxsize' => "Bepèrk plaetsjes op de besjrievingspazjena's van aafbeildinge tot:",
+'thumbsize'    => 'Thumbnail size :',
+
+'newimages' => 'Nuuj plaetjes',
+'noimages'  => 'Niks te zeen.',
+
+# EXIF tags
+'exif-bitspersample'            => 'Bits per componènt',
+'exif-compression'              => 'Cómpressiesjema',
+'exif-datetime'                 => 'Datum en momènt besjtandjsverangering',
+'exif-artist'                   => 'Auteur',
+'exif-copyright'                => 'Copyrighthawter',
+'exif-colorspace'               => 'Kläörruumde',
+'exif-componentsconfiguration'  => 'Beteikenis van edere componènt',
+'exif-compressedbitsperpixel'   => 'Cómpressiemeneer bie dit plaetje',
+'exif-pixelxdimension'          => 'Valind image height',
+'exif-datetimeoriginal'         => 'Datum en momint van verwèkking',
+'exif-datetimedigitized'        => 'Datum en momènt van digitizing',
+'exif-aperturevalue'            => 'Eupening',
+'exif-brightnessvalue'          => 'Heljerheid',
+'exif-cfapattern'               => 'CFA-patroen',
+'exif-contrast'                 => 'Contras',
+'exif-devicesettingdescription' => 'Besjrieving methode-opties',
+
+# EXIF attributes
+'exif-compression-1' => 'Óngecómprimeerd',
+
+'exif-componentsconfiguration-0' => 'besjteit neet',
+
+'exif-customrendered-0' => 'Normaal perces',
+
+'exif-contrast-0' => 'Normaal',
+'exif-contrast-1' => 'Weik',
+'exif-contrast-2' => 'Hel',
+
+# External editor support
+'edit-externally'      => "Bewirk dit bestand mit 'n extern toepassing",
+'edit-externally-help' => 'Zuug de [http://meta.wikimedia.org/wiki/Help:External_editors setupinsjtructies] veur mier informatie.',
+
+# E-mail address confirmation
+'confirmemail'            => 'Bevèstig e-mailadres',
+'confirmemail_text'       => "Deze wiki vereis dats te dien e-mailadres instèls iedats te e-mailfuncties
+gebroeks. Klik op de knop hieónger óm e bevèstegingsberich nao dien adres te
+sjikke. D'n e-mail zal 'ne link mèt 'n code bevatte; eupen de link in diene
+browser óm te bevestege dat dien e-mailadres werk.",
+'confirmemail_send'       => "Sjik 'n bevèstegingcode",
+'confirmemail_sent'       => 'Bevèstegingsberich versjik.',
+'confirmemail_sendfailed' => "Kós 't bevèstegingsberich neet versjikke. Zuug dien e-mailadres nao op óngeljige karakters.",
+'confirmemail_invalid'    => 'Óngeljige bevèstigingscode. De code is meugelik verloupe.',
+'confirmemail_success'    => 'Dien e-mailadres is bevesteg. De kins noe inlogke en van de wiki genete.',
+'confirmemail_loggedin'   => 'Dien e-mailadres is noe vasgelag.',
+'confirmemail_error'      => "Bie 't opsjlaon van eur bevèstiging is get fout gegange.",
+'confirmemail_subject'    => 'Bevèstiging e-mailadres veur {{SITENAME}}',
+'confirmemail_body'       => "Emes, waorsjienlik doe vanaaf 't IP-adres $1, heet 'n account $2
+aangemaak mit dit e-mailadres op {{SITENAME}}.
+
+Eupen óm te bevèstige dat dit account wirkelik van dich is en de
+e-mailgegaeves op {{SITENAME}} te activere deze link in diene browser:
+
+$3
+
+Es geer dit *neet* zeet, dan volg de link neet. Dees bevèstigingscode
+blief geljig tot $4",
+
+# Inputbox extension, may be useful in other contexts as well
+'createarticle' => 'Maak artikel aan',
+
+# Scary transclusion
+'scarytranscludefailed' => '[Sjabloon $1 kós neet opgehaold waere; sorry]',
+
+# Delete conflict
+'deletedwhileediting' => 'Waorsjoewing: dees pazjena is gewis naodats doe bis begós mit bewirke.',
+'confirmrecreate'     => "Gebroeker [[User:$1|$1]] ([[User talk:$1|euverlèk]]) heet dit artikel gewis naodats doe mèt bewirke begós mèt de rae:
+: ''$2''
+Bevèsteg estebleef dats te dees pazjena ech obbenuujts wils make.",
+'recreate'            => 'Pazjena obbenuujts make',
+
+# action=purge
+'confirm_purge' => 'Wils te de buffer vaan dees paas wisse?
+
+$1',
+
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesLn.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesLn.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesLn.php	(revision 1280)
@@ -0,0 +1,16 @@
+<?php
+
+/**
+ * Lingala language
+ *
+ * @addtogroup Language
+ */
+
+$linkPrefixExtension = true;
+
+# Same as the French (bug 8485)
+$separatorTransformTable = array( ',' => "\xc2\xa0", '.' => ',' );
+
+$messages = array( 'linkprefix' => '/^(.*?)([a-zA-Z\x80-\xff]+)$/sD' );
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesLo.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesLo.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesLo.php	(revision 1280)
@@ -0,0 +1,21 @@
+<?php
+/** Lao (ພາສາລາວ)
+  *
+  * @addtogroup Language
+  *
+  * @author Ævar Arnfjörð Bjarmason <avarab@gmail.com>
+  */
+$digitTransformTable = array(
+	'0' => '໐',
+	'1' => '໑',
+	'2' => '໒',
+	'3' => '໓',
+	'4' => '໔',
+	'5' => '໕',
+	'6' => '໖',
+	'7' => '໗',
+	'8' => '໘',
+	'9' => '໙'
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesLt.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesLt.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesLt.php	(revision 1280)
@@ -0,0 +1,2202 @@
+<?php
+/** Lithuanian (Lietuvių)
+ *
+ * @addtogroup Language
+ *
+ */
+
+$namespaceNames = array(
+	NS_MEDIA            => 'Medija',
+	NS_SPECIAL          => 'Specialus',
+	NS_MAIN	            => '',
+	NS_TALK	            => 'Aptarimas',
+	NS_USER             => 'Naudotojas',
+	NS_USER_TALK        => 'Naudotojo_aptarimas',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK     => '$1_aptarimas',
+	NS_IMAGE            => 'Vaizdas',
+	NS_IMAGE_TALK       => 'Vaizdo_aptarimas',
+	NS_MEDIAWIKI        => 'MediaWiki',
+	NS_MEDIAWIKI_TALK   => 'MediaWiki_aptarimas',
+	NS_TEMPLATE         => 'Šablonas',
+	NS_TEMPLATE_TALK    => 'Šablono_aptarimas',
+	NS_HELP             => 'Pagalba',
+	NS_HELP_TALK        => 'Pagalbos_aptarimas',
+	NS_CATEGORY         => 'Kategorija',
+	NS_CATEGORY_TALK    => 'Kategorijos_aptarimas',
+);
+
+$skinNames = array(
+	'standard' => 'Klasikinė',
+	'nostalgia' => 'Nostalgija',
+	'cologneblue' => 'Kelno mėlyna',
+	'davinci' => 'Da Vinči',
+	'monobook' => 'MonoBook',
+	'myskin' => 'Mano išvaizda',
+	'chick' => 'Chick',
+	'simple' => 'Paprasta',
+);
+$fallback8bitEncoding = 'windows-1257';
+$separatorTransformTable = array(',' => "\xc2\xa0", '.' => ',' );
+
+$dateFormats = array(
+	'mdy time' => 'H:i',
+	'mdy date' => 'F j, Y',
+	'mdy both' => 'H:i, F j, Y',
+
+	'dmy time' => 'H:i',
+	'dmy date' => 'Y F j',
+	'dmy both' => 'H:i, Y F j',
+
+	'ymd time' => 'H:i',
+	'ymd date' => 'Y F j',
+	'ymd both' => 'Y F j, H:i',
+
+	'ISO 8601 time' => 'xnH:xni:xns',
+	'ISO 8601 date' => 'xnY-xnm-xnd',
+	'ISO 8601 both' => 'xnY-xnm-xnd"T"xnH:xni:xns',
+);
+
+$messages = array(
+# User preference toggles
+'tog-underline'               => 'Pabraukti nuorodas:',
+'tog-highlightbroken'         => 'Formuoti nesančių puslapių nuorodas <a href="#" class="new">šitaip</a> (priešingai - šitaip <a href="#" class="internal">?</a>).',
+'tog-justify'                 => 'Lygiuoti pastraipas pagal abi puses',
+'tog-hideminor'               => 'Slėpti smulkius pakeitimus naujausių keitimų sąraše',
+'tog-extendwatchlist'         => 'Išplėsti stebimų sąrašą, kad rodytų visus tinkamus keitimus',
+'tog-usenewrc'                => 'Pažangiai rodomi naujausi keitimai (JavaScript)',
+'tog-numberheadings'          => 'Automatiškai numeruoti skyrelius',
+'tog-showtoolbar'             => 'Rodyti redagavimo įrankinę (JavaScript)',
+'tog-editondblclick'          => 'Puslapių redagavimas dvigubu spustelėjimu (JavaScript)',
+'tog-editsection'             => 'Įjungti skyrelių redagavimą naudojant nuorodas [taisyti]',
+'tog-editsectiononrightclick' => 'Įjungti skyrelių redagavimą paspaudus skyrelio pavadinimą<br />dešiniuoju pelės klavišu (JavaScript)',
+'tog-showtoc'                 => 'Rodyti turinį, jei puslapyje daugiau nei 3 skyreliai',
+'tog-rememberpassword'        => 'Prisiminti prisijungimo informaciją šiame kompiuteryje',
+'tog-editwidth'               => 'Pilno pločio redagavimo laukas',
+'tog-watchcreations'          => 'Pridėti puslapius, kuriuos sukuriu, į stebimų sąrašą',
+'tog-watchdefault'            => 'Pridėti puslapius, kuriuos redaguoju, į stebimų sąrašą',
+'tog-watchmoves'              => 'Pridėti puslapius, kuriuos perkeliu, į stebimų sąrašą',
+'tog-watchdeletion'           => 'Pridėti puslapius, kuriuos ištrinu, į stebimų sąrašą',
+'tog-minordefault'            => 'Pagal nutylėjimą pažymėti redagavimus kaip smulkius',
+'tog-previewontop'            => 'Rodyti peržiūrą virš redagavimo lauko',
+'tog-previewonfirst'          => 'Rodyti straipsnio peržiūrą pirmu redagavimu',
+'tog-nocache'                 => 'Nenaudoti puslapių kaupimo (caching)',
+'tog-enotifwatchlistpages'    => 'Siųsti man laišką, kai pakeičiamas puslapis, kurį stebiu',
+'tog-enotifusertalkpages'     => 'Siųsti man laišką, kai pakeičiamas mano naudotojo aptarimo puslapis',
+'tog-enotifminoredits'        => 'Siųsti man laišką, kai puslapio keitimas yra smulkus',
+'tog-enotifrevealaddr'        => 'Rodyti mano el. pašto adresą priminimo laiškuose',
+'tog-shownumberswatching'     => 'Rodyti stebinčių naudotojų skaičių',
+'tog-fancysig'                => 'Parašas be automatinių nuorodų',
+'tog-externaleditor'          => 'Pagal nutylėjimą naudoti išorinį redaktorių',
+'tog-externaldiff'            => 'Pagal nutylėjimą naudoti išorinę skirtumų rodymo programą',
+'tog-showjumplinks'           => 'Įjungti „peršokti į“ pasiekiamumo nuorodas',
+'tog-uselivepreview'          => 'Naudoti tiesioginę peržiūrą (JavaScript) (Eksperimentinis)',
+'tog-forceeditsummary'        => 'Klausti, kai palieku tuščią keitimo komentarą',
+'tog-watchlisthideown'        => 'Slėpti mano keitimus stebimų sąraše',
+'tog-watchlisthidebots'       => 'Slėpti robotų keitimus stebimų sąraše',
+'tog-watchlisthideminor'      => 'Slėpti smulkius keitimus stebimų sąraše',
+'tog-nolangconversion'        => 'Išjungti variantų keitimą',
+'tog-ccmeonemails'            => 'Siųsti man laiškų kopijas, kuriuos siunčiu kitiems naudotojams',
+'tog-diffonly'                => 'Nerodyti puslapio turinio po skirtumais',
+
+'underline-always'  => 'Visada',
+'underline-never'   => 'Niekada',
+'underline-default' => 'Pagal naršyklės nustatymus',
+
+'skinpreview' => '(Peržiūra)',
+
+# Dates
+'sunday'        => 'sekmadienis',
+'monday'        => 'pirmadienis',
+'tuesday'       => 'antradienis',
+'wednesday'     => 'trečiadienis',
+'thursday'      => 'ketvirtadienis',
+'friday'        => 'penktadienis',
+'saturday'      => 'šeštadienis',
+'sun'           => 'Sek',
+'mon'           => 'Pir',
+'tue'           => 'Ant',
+'wed'           => 'Tre',
+'thu'           => 'Ket',
+'fri'           => 'Pen',
+'sat'           => 'Šeš',
+'january'       => 'sausio',
+'february'      => 'vasario',
+'march'         => 'kovo',
+'april'         => 'balandžio',
+'may_long'      => 'gegužės',
+'june'          => 'birželio',
+'july'          => 'liepos',
+'august'        => 'rugpjūčio',
+'september'     => 'rugsėjo',
+'october'       => 'spalio',
+'november'      => 'lapkričio',
+'december'      => 'gruodžio',
+'january-gen'   => 'Sausis',
+'february-gen'  => 'Vasaris',
+'march-gen'     => 'Kovas',
+'april-gen'     => 'Balandis',
+'may-gen'       => 'Gegužė',
+'june-gen'      => 'Birželis',
+'july-gen'      => 'Liepa',
+'august-gen'    => 'Rugpjūtis',
+'september-gen' => 'Rugsėjis',
+'october-gen'   => 'Spalis',
+'november-gen'  => 'Lapkritis',
+'december-gen'  => 'Gruodis',
+'jan'           => 'sau',
+'feb'           => 'vas',
+'mar'           => 'kov',
+'apr'           => 'bal',
+'may'           => 'geg',
+'jun'           => 'bir',
+'jul'           => 'lie',
+'aug'           => 'rgp',
+'sep'           => 'rgs',
+'oct'           => 'spa',
+'nov'           => 'lap',
+'dec'           => 'grd',
+
+# Bits of text used by many pages
+'categories'            => 'Kategorijos',
+'pagecategories'        => '{{PLURAL:$1|Kategorija|Kategorijos|Kategorijų}}',
+'category_header'       => 'Kategorijos „$1“ straipsniai',
+'subcategories'         => 'Subkategorijos',
+'category-media-header' => 'Media kategorijoje „$1“',
+
+'mainpagetext'      => "<big>'''MediaWiki sėkmingai įdiegta.'''</big>",
+'mainpagedocfooter' => 'Informacijos apie wiki programinės įrangos naudojimą, ieškokite [http://meta.wikimedia.org/wiki/Help:Contents žinyne].
+
+== Pradžiai ==
+
+* [http://www.mediawiki.org/wiki/Help:Configuration_settings Konfigūracijos nustatymų sąrašas]
+* [http://www.mediawiki.org/wiki/Help:FAQ MediaWiki DUK]
+* [http://mail.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki pranešimai paštu apie naujas versijas]',
+
+'about'          => 'Apie',
+'article'        => 'Turinys',
+'newwindow'      => '(atsidaro naujame lange)',
+'cancel'         => 'Atšaukti',
+'qbfind'         => 'Paieška',
+'qbbrowse'       => 'Naršymas',
+'qbedit'         => 'Redagavimas',
+'qbpageoptions'  => 'Šis puslapis',
+'qbpageinfo'     => 'Kontekstas',
+'qbmyoptions'    => 'Mano puslapiai',
+'qbspecialpages' => 'Specialieji puslapiai',
+'moredotdotdot'  => 'Daugiau...',
+'mypage'         => 'Mano puslapis',
+'mytalk'         => 'Mano aptarimas',
+'anontalk'       => 'Šio IP aptarimas',
+'navigation'     => 'Navigacija',
+
+# Metadata in edit box
+'metadata_help' => 'Metaduomenys:',
+
+'errorpagetitle'    => 'Klaida',
+'returnto'          => 'Grįžti į $1.',
+'tagline'           => 'Straipsnis iš {{SITENAME}}.',
+'help'              => 'Pagalba',
+'search'            => 'Paieška',
+'searchbutton'      => 'Paieška',
+'go'                => 'Rodyti',
+'searcharticle'     => 'Rodyti',
+'history'           => 'Puslapio istorija',
+'history_short'     => 'Istorija',
+'updatedmarker'     => 'atnaujinta nuo paskutinio mano apsilankymo',
+'info_short'        => 'Informacija',
+'printableversion'  => 'Versija spausdinimui',
+'permalink'         => 'Nuolatinė nuoroda',
+'print'             => 'Spausdinti',
+'edit'              => 'Redaguoti',
+'editthispage'      => 'Redaguoti šį puslapį',
+'delete'            => 'Trinti',
+'deletethispage'    => 'Ištrinti šį puslapį',
+'undelete_short'    => 'Atstatyti $1 {{plural:$1:redagavimą|redagavimus|redagavimų}}',
+'protect'           => 'Užrakinti',
+'protect_change'    => 'keisti apsaugą',
+'protectthispage'   => 'Rakinti šį puslapį',
+'unprotect'         => 'Atrakinti',
+'unprotectthispage' => 'Atrakinti šį puslapį',
+'newpage'           => 'Naujas puslapis',
+'talkpage'          => 'Aptarti šį puslapį',
+'talkpagelinktext'  => 'Aptarimas',
+'specialpage'       => 'Specialusis puslapis',
+'personaltools'     => 'Asmeniniai įrankiai',
+'postcomment'       => 'Rašyti komentarą',
+'articlepage'       => 'Rodyti turinio puslapį',
+'talk'              => 'Aptarimas',
+'views'             => 'Žiūrėti',
+'toolbox'           => 'Įrankiai',
+'userpage'          => 'Rodyti naudotojo puslapį',
+'projectpage'       => 'Rodyti projekto puslapį',
+'imagepage'         => 'Žiūrėti paveikslėlio puslapį',
+'mediawikipage'     => 'Rodyti pranešimo puslapį',
+'templatepage'      => 'Rodyti šablono puslapį',
+'viewhelppage'      => 'Rodyti pagalbos puslapį',
+'categorypage'      => 'Rodyti kategorijos puslapį',
+'viewtalkpage'      => 'Rodyti aptarimo puslapį',
+'otherlanguages'    => 'Kitomis kalbomis',
+'redirectedfrom'    => '(Nukreipta iš $1)',
+'redirectpagesub'   => 'Nukreipimo puslapis',
+'lastmodifiedat'    => 'Šis puslapis paskutinį kartą keistas $1 $2.', # $1 date, $2 time
+'viewcount'         => 'Šis puslapis buvo atvertas $1 {{plural:$1|kartą|kartus|kartų}}.',
+'protectedpage'     => 'Užrakintas puslapis',
+'jumpto'            => 'Peršokti į:',
+'jumptonavigation'  => 'navigaciją',
+'jumptosearch'      => 'paiešką',
+
+# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
+'aboutsite'         => 'Apie {{SITENAME}}',
+'aboutpage'         => '{{ns:project}}:Apie',
+'bugreports'        => 'Pranešti apie klaidą',
+'bugreportspage'    => '{{ns:project}}:Klaidų pranešimai',
+'copyright'         => 'Turinys pateikiamas su $1 licencija.',
+'copyrightpagename' => '{{SITENAME}} autorystės teisės',
+'copyrightpage'     => '{{ns:project}}:Autorystės teisės',
+'currentevents'     => 'Naujienos',
+'currentevents-url' => 'Naujienos',
+'disclaimers'       => 'Atsakomybės apribojimas',
+'disclaimerpage'    => '{{ns:project}}:Jokių garantijų',
+'edithelp'          => 'Kaip redaguoti',
+'edithelppage'      => '{{ns:help}}:Redagavimas',
+'faq'               => 'DUK',
+'faqpage'           => '{{ns:project}}:DUK',
+'helppage'          => '{{ns:help}}:Turinys',
+'mainpage'          => 'Pradžia',
+'policy-url'        => '{{ns:project}}:Politika',
+'portal'            => 'Bendruomenė',
+'portal-url'        => '{{ns:project}}:Bendruomenė',
+'privacy'           => 'Privatumo politika',
+'privacypage'       => '{{ns:project}}:Privatumo politika',
+'sitesupport'       => 'Parama',
+'sitesupport-url'   => '{{ns:project}}:Svetainės palaikymas',
+
+'badaccess'        => 'Teisių klaida',
+'badaccess-group0' => 'Jums neleidžiama įvykdyti veiksmo, kurio prašėte.',
+'badaccess-group1' => 'Veiksmas, kurio prašėte, galimas tik $1 grupės naudotojams.',
+'badaccess-group2' => 'Veiksmas, kurio prašėte, galimas tik naudotojams, esantiems vienoje iš šių grupių $1.',
+'badaccess-groups' => 'Veiksmas, kurio prašėte, galimas tik naudotojams, esantiems vienoje iš šių grupių $1.',
+
+'versionrequired'     => 'Reikalinga $1 MediaWiki versija',
+'versionrequiredtext' => 'Reikalinga $1 MediaWiki versija, kad pamatytumėte šį puslapį. Žiūrėkite [[{{ns:special}}:Version|versijos puslapį]].',
+
+'ok'                  => 'Gerai',
+'pagetitle'           => '$1 - {{SITENAME}}',
+'retrievedfrom'       => 'Gauta iš „$1“',
+'youhavenewmessages'  => 'Jūs turite $1 ($2).',
+'newmessageslink'     => 'naujų žinučių',
+'newmessagesdifflink' => 'paskutinis pakeitimas',
+'editsection'         => 'taisyti',
+'editold'             => 'taisyti',
+'editsectionhint'     => 'Redaguoti skyrelį: $1',
+'toc'                 => 'Turinys',
+'showtoc'             => 'rodyti',
+'hidetoc'             => 'slėpti',
+'thisisdeleted'       => 'Žiūrėti ar atkurti $1?',
+'viewdeleted'         => 'Rodyti $1?',
+'restorelink'         => '$1 {{plural:$1|ištrintą keitimą|ištrintus keitimus|ištrintų keitimų}}',
+'feedlinks'           => 'Kanalas:',
+'feed-invalid'        => 'Neleistinas kanalo tipas.',
+
+# Short words for each namespace, by default used in the 'article' tab in monobook
+'nstab-main'      => 'Straipsnis',
+'nstab-user'      => 'Naudotojo puslapis',
+'nstab-media'     => 'Media puslapis',
+'nstab-special'   => 'Specialus',
+'nstab-project'   => 'Projekto puslapis',
+'nstab-image'     => 'Failas',
+'nstab-mediawiki' => 'Pranešimas',
+'nstab-template'  => 'Šablonas',
+'nstab-help'      => 'Pagalbos puslapis',
+'nstab-category'  => 'Kategorija',
+
+# Main script and global functions
+'nosuchaction'      => 'Nėra tokio veiksmo',
+'nosuchactiontext'  => 'Veiksmas, nurodytas adrese, neatpažintas',
+'nosuchspecialpage' => 'Nėra tokio specialiojo puslapio',
+'nospecialpagetext' => 'Jūs prašėte neleistino specialiojo puslapio, leistinų specialiųjų puslapių sąrašą rasite [[{{ns:special}}:Specialpages|specialiųjų puslapių sąraše]].',
+
+# General errors
+'error'                => 'Klaida',
+'databaseerror'        => 'Duomenų bazės klaida',
+'dberrortext'          => 'Įvyko duomenų bazės užklausos sintaksės klaida.
+Tai gali reikšti klaidą programinėje įrangoje.
+Paskutinė mėginta duomenų bazės užklausa buvo:
+<blockquote><tt>$1</tt></blockquote>
+iš funkcijos: „<tt>$2</tt>“.
+MySQL grąžino klaidą „<tt>$3: $4</tt>“.',
+'dberrortextcl'        => 'Įvyko duomenų bazės užklausos sintaksės klaida.
+Paskutinė mėginta duomenų bazės užklausa buvo:
+„$1“
+iš funkcijos: „$2“.
+MySQL grąžino klaidą „$3: $4“.',
+'noconnect'            => 'Atsiprašome, bet projektas turi techninių nesklandumų, ir negali prisijungti prie duomenų bazės. <br />
+$1',
+'nodb'                 => 'Nepavyksta pasirinkti duomenų bazės $1',
+'cachederror'          => 'Pateiktas išsaugota prašomo puslapio kopija, ji gali būti pasenusi.',
+'laggedslavemode'      => 'Dėmesio: Puslapyje gali nesimatyti naujausių pakeitimų.',
+'readonly'             => 'Duomenų bazė užrakinta',
+'enterlockreason'      => 'Įveskite užrakinimo priežastį, taip pat maždaug kada bus atrakinta',
+'readonlytext'         => 'Duomenų bazė šiuo metu yra užrakinta naujiems įrašams ar kitiems keitimams, 
+turbūt duomenų bazės techninei profilaktikai,
+po to viskas vėl veiks kaip įprasta.
+
+Užrakinusiojo administratoriaus pateiktas rakinimo paaiškinimas: $1',
+'missingarticle'       => 'Duomenų bazei nepavyksta rasti puslapio „$1“ teksto.
+
+Paprastai tai sukelia pasenusi skirtumų ar istorijos nuoroda į puslapį, kuris buvo ištrintas.
+
+Jei tai ne toks atvejis, galbūt jūs aptikote klaidą programinėje įrangoje.
+Prašome pranešti apie tai administratoriui, taip pat nurodant ir URL.',
+'readonly_lag'         => 'Duomenų bazė buvo automatiškai užrakinta, kol pagalbinės duomenų bazės prisivys pagrindinę',
+'internalerror'        => 'Vidinė klaida',
+'filecopyerror'        => 'Nepavyksta kopijuoti failo iš „$1“ į „$2“.',
+'filerenameerror'      => 'Nepavyksta pervardinti failo iš „$1“ į „$2“.',
+'filedeleteerror'      => 'Nepavyksta ištrinti failo „$1“.',
+'filenotfound'         => 'Nepavyksta rasti failo „$1“.',
+'unexpected'           => 'Netikėta reikšmė: „$1“=„$2“.',
+'formerror'            => 'Klaida: nepavyko apdoroti formos duomenų',
+'badarticleerror'      => 'Veiksmas negalimas šiam puslapiui.',
+'cannotdelete'         => 'Nepavyko ištrinti nurodyto puslapio ar failo. (Galbūt jį jau kažkas ištrynė)',
+'badtitle'             => 'Blogas pavadinimas',
+'badtitletext'         => 'Nurodytas puslapio pavadinimas buvo neleistinas, tuščias arba neteisingai sujungtas tarpkalbinis arba tarpprojektinis pavadinimas. Jame gali būti vienas ar daugiau simbolių, neleistinų pavadinimuose',
+'perfdisabled'         => 'Atsiprašome, bet ši funkcija yra laikinai išjungta, nes tai ypač sulėtina duomenų bazę taip, kad daugiau niekas negali naudotis projektu.',
+'perfdisabledsub'      => 'Tai išsaugota puslapio kopija iš $1:', # obsolete?
+'perfcached'           => 'Rodoma išsaugota duomenų kopija, todėl duomenys gali būti ne patys naujausi.',
+'perfcachedts'         => 'Rodoma išsaugota duomenų kopija, kuri buvo atnaujinta $1.',
+'querypage-no-updates' => 'Atnaujinimai šiam puslapiui dabar yra išjungti. Duomenys čia dabar nebus atnaujinti.',
+'wrong_wfQuery_params' => 'Neteisingi parametrai į funkciją wfQuery()<br />
+Funkcija: $1<br />
+Užklausa: $2',
+'viewsource'           => 'Žiūrėti kodą',
+'viewsourcefor'        => 'puslapiui $1',
+'protectedpagetext'    => 'Šis puslapis yra užrakintas, saugant jį nuo redagavimo.',
+'viewsourcetext'       => 'Jūs galite žiūrėti ir kopijuoti puslapio kodą:',
+'protectedinterface'   => 'Šiame puslapyje yra programinės įrangos sąsajos tekstas ir yra apsaugotas, kad būtų apsisaugota nuo piktnaudžiavimo.',
+'editinginterface'     => "'''Dėmesio:''' Jūs redaguojate puslapį, kuris yra naudojamas programinės įrangos sąsajos tekste. Pakeitimai šiame puslapyje taip pat pakeis naudotojo sąsajos išvaizdą ir kitiems naudojams.",
+'sqlhidden'            => '(SQL užklausa paslėpta)',
+'cascadeprotected'     => 'Šis puslapis buvo apsaugotas nuo redagavimo, kadangi jis yra įtrauktas į {{PLURAL:$1|šį puslapį, apsaugotą|šiuos puslapius, apsaugotus}} „pakopinės apsaugos“ pasirinktimi:',
+
+# Login and logout pages
+'logouttitle'                => 'Naudotojo atsijungimas',
+'logouttext'                 => '<strong>Dabar jūs esate atsijungęs.</strong><br />
+Galite toliau naudoti {{SITENAME}} anonimiškai arba prisijunkite iš naujo tuo pačiu ar kitu naudotoju.
+Pastaba: kai kuriuose puslapiuose ir toliau gali rodyti lyg būtumėte prisijungęs iki tol, kol išvalysite savo naršyklės podėlį',
+'welcomecreation'            => '== Sveiki, $1! ==
+
+Jūsų paskyra buvo sukurta. Nepamirškite pakeisti savo {{SITENAME}} nustatymų.',
+'loginpagetitle'             => 'Prisijungimas',
+'yourname'                   => 'Naudotojo vardas',
+'yourpassword'               => 'Slaptažodis',
+'yourpasswordagain'          => 'Pakartokite slaptažodį',
+'remembermypassword'         => 'Prisiminti šią informaciją šiame kompiuteryje',
+'yourdomainname'             => 'Jūsų domenas',
+'externaldberror'            => 'Yra arba išorinė autorizacijos duomenų bazės klaida arba jums neleidžiama atnaujinti jūsų išorinės paskyros.',
+'loginproblem'               => '<b>Problemos su jūsų prisijungimu.</b><br />Pabandykite iš naujo!',
+'alreadyloggedin'            => '<strong>Jūs jau esate prisijungęs kaip naudotojas $1!</strong><br />',
+'login'                      => 'Prisijungti',
+'loginprompt'                => 'Įjunkite slapukus, jei norite prisijungti prie {{SITENAME}}.',
+'userlogin'                  => 'Prisijungti / sukurti paskyrą',
+'logout'                     => 'Atsijungti',
+'userlogout'                 => 'Atsijungti',
+'notloggedin'                => 'Neprisijungęs',
+'nologin'                    => 'Neturite prisijungimo vardo? $1.',
+'nologinlink'                => 'Sukurkite paskyrą',
+'createaccount'              => 'Sukurti paskyrą',
+'gotaccount'                 => 'Jau turite paskyrą? $1.',
+'gotaccountlink'             => 'Prisijunkite',
+'createaccountmail'          => 'el. paštu',
+'badretype'                  => 'Įvesti slaptažodžiai nesutampa.',
+'userexists'                 => 'Įvestasis naudotojo vardas jau naudojamas. Prašome pasirinkti kitą vardą.',
+'youremail'                  => 'El. pašto adresas *:',
+'username'                   => 'Naudotojo vardas:',
+'uid'                        => 'Naudotojo ID:',
+'yourrealname'               => 'Jūsų tikras vardas *:',
+'yourlanguage'               => 'Sąsajos kalba:',
+'yourvariant'                => 'Variantas',
+'yournick'                   => 'Slapyvardis:',
+'badsig'                     => 'Neteisingas parašas; patikrinkite HTML žymes.',
+'email'                      => 'El. paštas',
+'prefs-help-email-enotif'    => 'Šis adresas tai pat naudojamas siųsti pranešimus, jei pasirinkote tokius pranešimus gauti.',
+'prefs-help-realname'        => '* Tikras vardas (neprivaloma): jei jūs jį įvesite, jis bus naudojamas jūsų darbo pažymėjimui.',
+'loginerror'                 => 'Prisijungimo klaida',
+'prefs-help-email'           => '* El. paštas (neprivalomas): Leidžia kitiems pasiekti jus per naudotojo ar naudotojo aptarimą neatskleidžiant jūsų tapatybės.',
+'nocookiesnew'               => 'Naudotojo paskyra buvo sukurta, bet jūs nesate prisijungęs. {{SITENAME}} naudoja slapukus, kad prijungtų naudotojus. Jūs esate išjungę slapukus. Prašome įjungti juos, tada prisijunkite su savo naujuoju naudotojo vardu ir slaptažodžiu.',
+'nocookieslogin'             => '{{SITENAME}} naudoja slapukus, kad prijungtų naudotojus. Jūs esate išjungę slapukus. Prašome įjungti juos ir pamėginkite vėl.',
+'noname'                     => 'Jūs nesate nurodęs teisingo naudotojo vardo.',
+'loginsuccesstitle'          => 'Sėkmingai prisijungėte',
+'loginsuccess'               => "'''Dabar jūs prisijungęs prie {{SITENAME}} kaip „$1“.'''",
+'nosuchuser'                 => 'Nėra jokio naudotojo pavadinto „$1“. Patikrinkite rašybą, arba sukurkite naują paskyrą.',
+'nosuchusershort'            => 'Nėra jokio naudotojo pavadinto „$1“. Patikrinkite rašybą.',
+'nouserspecified'            => 'Jums reikia nurodyti naudotojo vardą.',
+'wrongpassword'              => 'Įvestas neteisingas slaptažodis. Pamėginkite dar kartą.',
+'wrongpasswordempty'         => 'Įvestas slaptažodis yra tuščias. Pamėginkite vėl.',
+'mailmypassword'             => 'Atsiųsti slaptažodį paštu',
+'passwordremindertitle'      => 'Slaptažodžio priminimas iš {{SITENAME}}',
+'passwordremindertext'       => 'Kažkas (tikriausiai jūs, IP adresu $1)
+paprašė, kad atsiųstumėte naują slaptažodį projektui {{SITENAME}} ($4).
+Naudotojo „$2“ slaptažodis dabar yra „$3“.
+Jūs turėtumėte prisijungti ir dabar pakeisti savo slaptažodį.
+
+Jei kažkas kitas atliko šį prašymą arba jūs prisiminėte savo slaptažodį ir
+nebenorite jo pakeisti, jūs galite tiesiog nekreipti dėmėsio į šį laišką ir toliau
+naudotis savo senuoju slaptažodžiu.',
+'noemail'                    => 'Nėra jokio el. pašto adreso įvesto naudotojui „$1“.',
+'passwordsent'               => 'Naujas slaptažodis buvo nusiųstas į el. pašto adresą,
+užregistruotą naudotojo „$1“.
+Prašome prisijungti vėl, kai jūs jį gausite.',
+'blocked-mailpassword'       => 'Jūsų IP adresas yra užblokuotas nuo redagavimo, taigi neleidžiama naudoti slaptažodžio priminimo funkcijos, kad apsisaugotume nuo piktnaudžiavimo.',
+'eauthentsent'               => 'Patvirtinimo laiškas buvo nusiųstas į paskirtąjį el. pašto adresą.
+Prieš išsiunčiant kitą laišką į jūsų dėžutę, jūs turite vykdyti nurodymus laiške, kad patvirtintumėte, kad dėžutė tikrai yra jūsų.',
+'throttled-mailpassword'     => 'Slaptažodžio priminimas jau buvo išsiųstas, per paskutinias $1 valandas. Norint apsisaugoti nuo piktnaudžiavimo, slaptažodžio priminimas gali būti išsiųstas tik kas $1 valandas.',
+'mailerror'                  => 'Klaida siunčiant paštą: $1',
+'acct_creation_throttle_hit' => 'Atleiskite, bet jūs jau sukūrėte $1 paskyras. Daugiau nebegalima.',
+'emailauthenticated'         => 'Jūsų el. pašto adresas buvo patvirtintas $1.',
+'emailnotauthenticated'      => 'Jūsų el. pašto adresas dar nėra patvirtintas. Jokie laiškai
+nebus siunčiami nei vienai žemiau išvardintai paslaugai.',
+'noemailprefs'               => 'Nurodykite el. pašto adresą, kad šios funkcijos veiktų.',
+'emailconfirmlink'           => 'Patvirtinkite savo el. pašto adresą',
+'invalidemailaddress'        => 'El. pašto adresas negali būti priimtas, nes atrodo, kad jis nėra teisingo formato. Prašome įvesti gerai suformuotą adresą arba palikite tą laukelį tuščią.',
+'accountcreated'             => 'Paskyra sukurta',
+'accountcreatedtext'         => 'Naudotojo paskyra $1 buvo sukurta.',
+
+# Password reset dialog
+'resetpass'               => 'Paskyros slaptažodžio atstatymas',
+'resetpass_announce'      => 'Jūs prisijungėte su atsiųstu laikinuoju kodu. Norėdami užbaigti prisijungimą, čia jums reikia nustatyti naująjį slaptažodį:',
+'resetpass_text'          => '<!-- Įterpkite čia tekstą -->',
+'resetpass_header'        => 'Atstatyti slaptažodį',
+'resetpass_submit'        => 'Nustatyti slaptažodį ir prisijungti',
+'resetpass_success'       => 'Jūsų slaptažodis pakeistas sėkmingai! Dabar prisijungiama...',
+'resetpass_bad_temporary' => 'Neteisingas laikinasis slaptažodis. Galbūt jūs jau sėkmingai pakeitėte savo slaptažodį arba paprašėte naujo laikino slaptažodžio.',
+'resetpass_forbidden'     => 'Šiame projekte slaptažodžiai negali būti pakeisti',
+'resetpass_missing'       => 'Nėra formos duomenų.',
+
+# Edit page toolbar
+'bold_sample'     => 'Paryškintas tekstas',
+'bold_tip'        => 'Paryškinti tekstą',
+'italic_sample'   => 'Tekstas kursyvu',
+'italic_tip'      => 'Tekstas kursyvu',
+'link_sample'     => 'Nuorodos pavadinimas',
+'link_tip'        => 'Vidinė nuoroda',
+'extlink_sample'  => 'http://www.pavyzdys.lt nuorodos pavadinimas',
+'extlink_tip'     => 'Išorinė nuoroda (nepamirškite http:// priedėlio)',
+'headline_sample' => 'Skyriaus pavadinimas',
+'headline_tip'    => 'Antro lygio skyriaus pavadinimas',
+'math_sample'     => 'Įveskite formulę',
+'math_tip'        => 'Matematinė formulė (LaTeX formatu)',
+'nowiki_sample'   => 'Čia įterpkite neformuotą tekstą',
+'nowiki_tip'      => 'Ignoruoti wiki formatą',
+'image_sample'    => 'Pavyzdys.jpg',
+'image_tip'       => 'Įdėti paveiksėlį',
+'media_sample'    => 'Pavyzdys.ogg',
+'media_tip'       => 'Nuoroda į media failą',
+'sig_tip'         => 'Jūsų parašas bei laikas',
+'hr_tip'          => 'Horizontali linija (naudokite taupiai)',
+
+# Edit pages
+'summary'                   => 'Komentaras',
+'subject'                   => 'Tema/antraštė',
+'minoredit'                 => 'Tai smulkus pataisymas',
+'watchthis'                 => 'Stebėti šį puslapį',
+'savearticle'               => 'Išsaugoti puslapį',
+'preview'                   => 'Peržiūra',
+'showpreview'               => 'Rodyti peržiūrą',
+'showlivepreview'           => 'Tiesioginė peržiūra',
+'showdiff'                  => 'Rodyti skirtumus',
+'anoneditwarning'           => "'''Dėmesio:''' Jūs nesate prisijungęs. Jūsų IP adresas bus įrašytas į šio puslapio istoriją.",
+'missingsummary'            => "'''Priminimas:''' Jūs nenurodėte  keitimo komentaro. Jei vėl paspausite Saugoti, jūsų keitimas bus išsaugotas be jo.",
+'missingcommenttext'        => 'Prašome įvesti komentarą.',
+'missingcommentheader'      => "'''Priminimas:''' Jūs nenurodėte skyrelio/antraštės šiam komentarui. Jei vėl paspausite Saugoti, jūsų keitimas bus išsaugotas be jo.",
+'summary-preview'           => 'Komentaro peržiūra',
+'subject-preview'           => 'Skyrelio/antraštės peržiūra',
+'blockedtitle'              => 'Naudotojas yra užblokuotas',
+'blockedtext'               => "<big>'''Jūsų naudotojo vardas arba IP adresas yra užblokuotas.'''</big>
+
+Užblokavo $1. Nurodyta priežastis yra ''$2''.
+
+Jūs galite susisiekti su $1 arba kitu
+[[{{MediaWiki:grouppage-sysop}}|administratoriumi]] aptarti užblokavimą.
+Jūs negalite naudoti funkcija 'Rašyti laišką šiam naudotojui', jei nesate pateikę tikro savo el. pašto adreso savo [[{{ns:special}}:Preferences|paskyros nustatymuose]]. Jūsų IP adresas yra $3, o bloko ID yra #$5. Prašome nurodyti vieną ar abu juos, kai kreipiatės dėl blokavimo.",
+'blockedoriginalsource'     => "Žemiau yra rodomas '''$1''' turinys:",
+'blockededitsource'         => "''Jūsų keitimų''' tekstas puslapiui '''$1''' yra rodomas žemiau:",
+'whitelistedittitle'        => 'Norint redaguoti reikia prisijungti',
+'whitelistedittext'         => 'Jūs turite $1, kad redaguotumėte puslapius.',
+'whitelistreadtitle'        => 'Norint skaityti reikia prisijungti',
+'whitelistreadtext'         => 'Jums reikia [[{{ns:special}}:Userlogin|prisijungti]], kad skaitytumėte puslapius.',
+'whitelistacctitle'         => 'Jums neleidžiama kurti paskyros',
+'whitelistacctext'          => 'Norėdami leisti kurti paskyras šiame projekte, jums reikia [[{{ns:special}}:Userlogin|prisijungti]] ir turėti atitinkamas teises.',
+'confirmedittitle'          => 'Reikalingas el. pašto patvirtinimas, kad redaguotumėte',
+'confirmedittext'           => 'Jums reikia patvirtinti el. pašto adresą, prieš redaguojant puslapius. Prašome nurodyti ir patvirtinti jūsų el. pašto adresą per jūsų [[{{ns:special}}:Preferences|naudotojo nustatymus]].',
+'nosuchsectiontitle'        => 'Nėra tokio skyriaus',
+'nosuchsectiontext'         => 'Jūs mėginote redaguoti skyrių, kuris neegzistuoja. Kadangi nėra skyriaus „$1“, tai nėra kur išsaugoti jūsų keitimo.',
+'loginreqtitle'             => 'Reikalingas prisijungimas',
+'loginreqlink'              => 'prisijungti',
+'loginreqpagetext'          => 'Jums reikia $1, kad matytumėte kitus puslapius.',
+'accmailtitle'              => 'Slaptažodis išsiųstas.',
+'accmailtext'               => 'Naudotojo „$1“ slaptažodis nusiųstas į $2.',
+'newarticle'                => '(Naujas)',
+'newarticletext'            => "Jūs patekote į dar neegzistuojantį puslapį.
+Norėdami sukurti puslapį, pradėkite rašyti žemiau esančiame įvedimo lauke
+(plačiau [[{{MediaWiki:helppage}}|pagalbos puslapyje]]).
+Jei patekote čia per klaidą, paprasčiausiai spustelkite  naršyklės mygtuką '''atgal'''.",
+'anontalkpagetext'          => "----''Tai yra anoniminio naudotojo, nesusikūrusio arba nenaudojančio paskyros, aptarimų puslapis. Dėl to naudojamas IP adresas jo identifikavimui. Šis IP adresas gali būti dalinamas keliems naudotojams. Jeigu Jūs esate anoniminis naudotojas ir atrodo, kad komentarai nėra skirti Jums, [[{{ns:special}}:Userlogin|sukurkite paskyrą arba prisijunkite]], ir nebūsite tapatinamas su kitais anoniminiais naudotojais.''",
+'noarticletext'             => 'Šiuo metu šiame puslapyje nėra jokio teksto, jūs galite [[Special:Search/{{PAGENAME}}|ieškoti šio puslapio pavadinimo]] kituose puslapiuose arba [{{fullurl:{{FULLPAGENAME}}|action=edit}} redaguoti šį puslapį].',
+'clearyourcache'            => "'''Dėmesio:''' Išsaugoję jums gali prireikti išvalyti jūsų naršyklės podėlį, kad pamatytumėte pokyčius. '''Mozilla / Safari / Konqueror:''' laikydami ''Shift'' pasirinkite ''Atsiųsti iš naujo'', arba paspauskite ''Ctrl-Shift-R'' (sistemoje Apple Mac ''Cmd-Shift-R''); '''IE:''' laikydami ''Ctrl'' paspauskite ''Atnaujinti'', arba paspauskite ''Ctrl-F5''; '''Konqueror:''' tiesiog paspauskite ''Perkrauti'' mygtuką, arba paspauskite ''F5''; '''Opera''' naudotojams gali prireikti pilnai išvalyti jų podėlį ''Priemonės→Nuostatos''.",
+'usercssjsyoucanpreview'    => '<strong>Patarimas:</strong> Naudokite „Rodyti peržiūrą“ mygtuką, kad išmėgintumėte savo naująjį CSS/JS prieš išsaugant.',
+'usercsspreview'            => "'''Nepamirškite, kad jūs tik peržiūrit savo naudotojo CSS, jis dar nebuvo išsaugotas!'''",
+'userjspreview'             => "'''Nepamirškite, kad jūs tik testuojat/peržiūrit savo naudotojo JavaScript, jis dar nebuvo išsaugotas!'''",
+'userinvalidcssjstitle'     => "'''Dėmesio:''' Nėra jokios išvaizdos „$1“. Nepamirškite, kad savo .css ir .js puslapiai naudoja pavadinimą mažosiomis raidėmis, pvz., {{ns:user}}:Foo/monobook.css, o ne {{ns:user}}:Foo/Monobook.css.",
+'updated'                   => '(Atnaujinta)',
+'note'                      => '<strong>Pastaba:</strong>',
+'previewnote'               => '<strong>Nepamirškite, kad tai tik peržiūra, pakeitimai dar nėra išsaugoti!</strong>',
+'previewconflict'           => 'Ši peržiūra parodo tekstą iš viršutiniojo teksto redagavimo lauko taip, kaip jis bus rodomas, jei pasirinksite išsaugoti.',
+'session_fail_preview'      => '<strong>Atsiprašome! Mes negalime vykdyti jūsų keitimo dėl sesijos duomenų praradimo.
+Prašome pamėginti vėl. Jei tai nepadeda, pamėginkite atsijungti ir prisijungti atgal.</strong>',
+'session_fail_preview_html' => "<strong>Atsiprašome! Mes negalime apdoroti jūsų keitimo dėl sesijos duomenų praradimo.</strong>
+
+''Kadangi šiame projekte grynasis HTML yra įjungtas, peržiūra yra paslėpta kaip atsargumo priemonė prieš JavaScript atakas.''
+
+<strong>Jei tai teisėtas keitimo bandymas, prašome pamėginti vėl. Jei tai nepadeda, pamėginkite atsijungti ir prisijungti atgal.</strong>",
+'importing'                 => 'Importuojama $1',
+'editing'                   => 'Taisomas $1',
+'editinguser'               => 'Taisomas naudotojas <b>$1</b>',
+'editingsection'            => 'Taisomas $1 (skyrelis)',
+'editingcomment'            => 'Taisomas $1 (komentaras)',
+'editconflict'              => 'Išpręskite konfliktą: $1',
+'explainconflict'           => 'Kažkas kitas jau pakeitė puslapį nuo tada, kai jūs pradėjote jį redaguoti.
+Viršutiniame tekstiniame lauke pateikta šiuo metu esanti puslapio versija.
+Jūsų keitimai pateikti žemiau esančiame lauke.
+Jums reikia sujungti jūsų pakeitimus su esančia versija.
+Paspaudus „Išsaugoti“, užsaugotas bus
+<b>tik</b> tekstas viršutiniame tekstiniame lauke.<br />',
+'yourtext'                  => 'Jūsų tekstas',
+'storedversion'             => 'Išsaugota versija',
+'nonunicodebrowser'         => '<strong>ĮSPĖJIMAS: Jūsų naršyklė nepalaiko unikodo. Todėl, tam kad saugiai redaguotumėte straipsnį, redagavimo lauke vietoj ne ASCII simbolių bus rodomi šešioliktainiai kodai.</strong>',
+'editingold'                => '<strong>ĮSPĖJIMAS: Jūs keičiate ne naujausią puslapio versiją.
+Jei išsaugosite savo keitimus, po to daryti pakeitimai pradings.</strong>',
+'yourdiff'                  => 'Skirtumai',
+'copyrightwarning'          => 'Primename, kad viskas, kas patenka į {{SITENAME}}, yra laikoma paskelbtu pagal $2 (detaliau - $1). Jei nenorite, kad jūsų indėlis būtų be gailesčio redaguojamas ir platinamas, čia nerašykite.<br />
+Jūs taip pat pasižadate, kad tai jūsų pačių rašytas turinys arba kopijuotas iš viešų ar panašių nemokamų šaltinių.
+<strong>NEKOPIJUOKITE AUTORINĖMIS TEISĖMIS APSAUGOTŲ DARBŲ BE LEIDIMO!</strong>',
+'copyrightwarning2'         => 'Primename, kad viskas, kas patenka į {{SITENAME}} gali būti redaguojama, perdaroma, ar pašalinama kitų naudotojų. Jei nenorite, kad jūsų indėlis būtų be gailesčio redaguojamas, čia nerašykite.<br />
+Taip pat jūs pasižadate, kad tai jūsų pačių rašytas tekstas arba kopijuotas
+iš viešų ar panašių nemokamų šaltinių (detaliau - $1).
+<strong>NEKOPIJUOKITE AUTORINĖMIS TEISĖMIS APSAUGOTŲ DARBŲ BE LEIDIMO!</strong>',
+'longpagewarning'           => '<strong>DĖMESIO: Šis puslapis yra $1 kilobaitų ilgio; kai kurios
+naršyklės gali turėti problemų redaguojant puslapius beveik ar virš 32 KB.
+Prašome pamėginti puslapį padalinti į keletą smulkesnių dalių.</strong>',
+'longpageerror'             => '<strong>KLAIDA: Tekstas, kurį pateikėte, yra $1 kilobaitų ilgio,
+kuris yra didesnis nei daugiausiai leistini $2 kilobaitai. Jis nebus išsaugotas.</strong>',
+'readonlywarning'           => '<strong>DĖMESIO: Duomenų bazė buvo užrakinta techninei profilaktikai,
+taigi negalėsite išsaugoti savo pakeitimų dabar. Jūs gali nusikopijuoti tekstą į tekstinį failą
+ir vėliau įkelti jį čia.</strong>',
+'protectedpagewarning'      => '<strong>DĖMESIO:  Šis puslapis yra užrakintas ir jį redaguoti gali tik administratoriaus teises turintys naudotojai.</strong>',
+'semiprotectedpagewarning'  => "'''Pastaba:''' Šis puslapis buvo užrakintas ir jį gali redaguoti tik registruoti naudotojai.",
+'cascadeprotectedwarning'   => "'''Dėmesio''': Šis puslapis buvo užrakintas taip, kad tik naudotojai su administratoriaus teisėmis galėtų jį redaguoti, nes jis yra įtrauktas į {{PLURAL:$1|šį puslapį, apsaugotą|šiuos puslapius, apsaugotus}} „pakopinės apsaugos“ pasirinktimi:",
+'templatesused'             => 'Straipsnyje naudojami šablonai:',
+'templatesusedpreview'      => 'Šablonai, naudoti šioje peržiūroje:',
+'templatesusedsection'      => 'Šablonai, naudoti šiame skyrelyje:',
+'template-protected'        => '(apsaugotas)',
+'template-semiprotected'    => '(pusiau apsaugotas)',
+'edittools'                 => '<!-- Šis tekstas bus rodomas po redagavimo ir įkėlimo formomis. -->',
+'nocreatetitle'             => 'Puslapių kūrimas apribotas',
+'nocreatetext'              => 'Šioje svetainėje yra apribota galimybė kurti naujus puslapius.
+Jūs galite grįžti ir redaguoti jau esantį puslapį, arba [[{{ns:special}}:Userlogin|prisijungti arba sukurti paskyrą]].',
+
+# "Undo" feature
+'undo-success' => 'Keitimas gali būti atšauktas. Prašome patikrinti palyginimą, esantį žemiau, kad patvirtintumėte, kad jūs tai ir norite padaryti, ir tada išsaugokite pakeitimus, esančius žemiau, kad užbaigtumėte keitimo atšaukimą.',
+'undo-failure' => 'Keitimas negali būti atšauktas dėl konfliktuojančių tarpinių keitimų.',
+'undo-summary' => 'Atšaukti [[{{ns:special}}:Contributions/$2|$2]] ([[{{ns:user_talk}}:$2|Aptarimas]]) versiją $1',
+
+# Account creation failure
+'cantcreateaccounttitle' => 'Paskyrų kūrimas negalimas',
+'cantcreateaccounttext'  => 'Paskyrų kūrimas iš šio IP adreso (<b>$1</b>) yra užbluokuotas.
+Tai gali būti dėl dažno vandalizmo iš jūsų mokyklos ar interneto tiekėjo.',
+
+# History pages
+'revhistory'          => 'Versijų istorija',
+'viewpagelogs'        => 'Rodyti šio puslapio specialiuosius veiksmus',
+'nohistory'           => 'Šis puslapis neturi keitimų istorijos.',
+'revnotfound'         => 'Versija nerasta',
+'revnotfoundtext'     => 'Norima puslapio versija nerasta.
+Patikrinkite URL, kuriuo patekote į šį puslapį.',
+'loadhist'            => 'Įkeliama puslapio istorija',
+'currentrev'          => 'Dabartinė versija',
+'revisionasof'        => '$1 versija',
+'revision-info'       => '$1 versija naudotojo $2',
+'previousrevision'    => '←Ankstesnė versija',
+'nextrevision'        => 'Vėlesnė versija→',
+'currentrevisionlink' => 'Dabartinė versija',
+'cur'                 => 'dab',
+'next'                => 'kitas',
+'last'                => 'pask',
+'orig'                => 'orig',
+'page_first'          => 'pirm',
+'page_last'           => 'pask',
+'histlegend'          => "Skirtumai tarp versijų: pažymėkite lyginamas versijas ir spustelkite ''Enter'' klavišą arba mygtuką apačioje.<br />
+Žymėjimai: (dab) = palyginimas su naujausia versija,
+(pask) = palyginimas su prieš tai buvusia versija, S = smulkus keitimas.",
+'deletedrev'          => '[ištrinta]',
+'histfirst'           => 'Seniausi',
+'histlast'            => 'Paskutiniai',
+'historysize'         => '($1 baitų)',
+'historyempty'        => '(tuščia)',
+
+# Revision feed
+'history-feed-title'          => 'Versijų istorija',
+'history-feed-description'    => 'Šio puslapio versijų istorija projekte',
+'history-feed-item-nocomment' => '$1 $2', # user at time
+'history-feed-empty'          => 'Prašomas puslapis neegzistuoja.
+Jis galėjo būti ištrintas iš projekto, arba pervardintas.
+Pamėginkite [[{{ns:special}}:Search|ieškoti projekte]] susijusių naujų puslapių.',
+
+# Revision deletion
+'rev-deleted-comment'         => '(komentaras pašalintas)',
+'rev-deleted-user'            => '(naudotojo vardas pašalintas)',
+'rev-deleted-event'           => '(įrašas pašalintas)',
+'rev-deleted-text-permission' => '<div class="mw-warning plainlinks">Ši puslapio versija buvo pašalinta iš viešųjų archyvų.
+[{{fullurl:{{ns:special}}:Log/delete|page={{FULLPAGENAMEE}}}} Trynimo istorijoje] gali būti detalių.</div>',
+'rev-deleted-text-view'       => '<div class="mw-warning plainlinks">
+Ši puslapio versija buvo pašalinta iš viešųjų archyvų.
+Kaip šios svetainės administratorius, jūs galite jį pamatyti;
+[{{fullurl:{{ns:special}}:Log/delete|page={{FULLPAGENAMEE}}}} trynimo istorijoje] gali būti detalių.
+</div>',
+'rev-delundel'                => 'rodyti/slėpti',
+'revisiondelete'              => 'Trinti/atkurti versijas',
+'revdelete-nooldid-title'     => 'Nenurodyta versija',
+'revdelete-nooldid-text'      => 'Nenurodėte versijos ar versijų, kurioms įvykdyti šią funkciją.',
+'revdelete-selected'          => "{{PLURAL:$2|Pasirinkta|Pasirinktos|Pasirinktos}} '''$1''' {{PLURAL:$2|versija|versijos|versijos}}:",
+'logdelete-selected'          => "{{PLURAL:$2|Pasirinktas|Pasirinkti|Pasirinkti}} '''$1''' istorijos {{PLURAL:$2|įvykis|įvykiai|įvykiai}}:",
+'revdelete-text'              => 'Ištrintos versijos bei įvykiai vistiek dar bus rodomi puslapio istorijoje ir specialiųjų veiksmų istorijoje, bet jų turinio dalys nebus viešai prieinamos.
+
+Kiti administratoriai šiame projekte vis dar galės pasiekti paslėptą turinį ir galės jį atkurti vėl per tą pačią sąsają, nebent yra nustatyti papildomi apribojimai.',
+'revdelete-legend'            => 'Nustatyti apribojimus:',
+'revdelete-hide-text'         => 'Slėpti versijos tekstą',
+'revdelete-hide-name'         => 'Slėpti veiksmą ir paskirtį',
+'revdelete-hide-comment'      => 'Slėpti redagavimo komentarą',
+'revdelete-hide-user'         => 'Slėpti redagavusiojo naudotojo vardą ar IP adresą',
+'revdelete-hide-restricted'   => 'Taikyti šiuos apribojimus ir administratoriams kaip ir kitiems',
+'revdelete-suppress'          => 'Slėpti duomenis nuo administratorių kaip ir nuo kitų',
+'revdelete-hide-image'        => 'Slėpti failo turinį',
+'revdelete-unsuppress'        => 'Šalinti apribojimus atkurtose versijose',
+'revdelete-log'               => 'Komentaras:',
+'revdelete-submit'            => 'Taikyti pasirinktai versijai',
+'revdelete-logentry'          => 'pakeistas versijos [[$1]] matomumas',
+'logdelete-logentry'          => 'pakeistas [[$1]] įvykio matomumas',
+'revdelete-logaction'         => '$1 {{PLURAL:$1|versija|versijos|versijų}} nustatyta į $2 režimą',
+'logdelete-logaction'         => '$1 {{PLURAL:$1|įvykis|įvykiai|įvykių}} puslapiui [[$3]] nustatyta į $2 režimą',
+'revdelete-success'           => 'Versijos matomumas sėkmingai nustatytas.',
+'logdelete-success'           => 'Įvykio matomumas sėkmingai nustatytas.',
+
+# Oversight log
+'oversightlog'    => 'Priežiūros istorija',
+'overlogpagetext' => 'Žemiau yra paskutinių trynimų ir blokavimų, įskaitant turinio slėpimą nuo administratorių, sąrašas. [[{{ns:special}}:Ipblocklist|IP blokavimų istorijoje]] rasite šiuo metu veikiančių draudimų ir blokavimų sąrašą.',
+
+# Diffs
+'difference'                => '(Skirtumai tarp versijų)',
+'loadingrev'                => 'įkeliama versija palyginimui',
+'lineno'                    => 'Eilutė $1:',
+'editcurrent'               => 'Redaguoti dabartinę puslapio versiją',
+'selectnewerversionfordiff' => 'Pasirinkite naujesnę versiją palyginimui',
+'selectolderversionfordiff' => 'Pasirinkite senesnę versiją palyginimui',
+'compareselectedversions'   => 'Palyginti pasirinktas versijas',
+'editundo'                  => 'atšaukti',
+'diff-multi'                => '($1 {{plural:$1|tarpinis keitimas nėra rodomas|tarpiniai keitimai nėra rodomi|tarpinių keitimų nėra rodoma}}.)',
+
+# Search results
+'searchresults'         => 'Paieškos rezultatai',
+'searchresulttext'      => 'Daugiau informacijos apie paiešką projekte {{SITENAME}} rasite [[{{MediaWiki:helppage}}|{{int:help}}]].',
+'searchsubtitle'        => 'Ieškoma „[[:$1]]“',
+'searchsubtitleinvalid' => 'Ieškoma „$1“',
+'badquery'              => 'Blogai suformuota paieškos užklausa',
+'badquerytext'          => 'Nepavyko apdoroti Jūsų užklausos.
+Tai galėjo būti dėl trumpesnio nei trijų simbolių paieškos rakto, arba neteisingai suformuotos užklausos (pavyzdžiui „tigras and and liūtas“).
+Pamėginkite kitokią užklausą.',
+'matchtotals'           => 'Užklausa „$1“ atitiko $2 puslapių pavadinimus
+ir $3 puslapių turinius.',
+'noexactmatch'          => "'''Nėra jokio puslapio, pavadinto „$1“.''' Jūs galite [[:$1|sukurti šį puslapį]].",
+'titlematches'          => 'Straipsnių pavadinimų atitikmenys',
+'notitlematches'        => 'Jokių pavadinimo atitikmenų',
+'textmatches'           => 'Puslapio turinio atitikmenys',
+'notextmatches'         => 'Jokių puslapių teksto atitikmenų',
+'prevn'                 => 'ankstesnius $1',
+'nextn'                 => 'tolimesnius $1',
+'viewprevnext'          => 'Žiūrėti ($1) ($2) ($3).',
+'showingresults'        => "Žemiau rodoma iki '''$1''' {{PLURAL:$1|rezultato|rezultatų|rezultatų}} pradedant #'''$2'''.",
+'showingresultsnum'     => "Žemiau rodoma '''$3''' {{PLURAL:$3|rezultato|rezultatų|rezultatų}}rezultatų pradedant #'''$2'''.",
+'nonefound'             => "'''Pastaba''': Nesėkminga paieška dažnai būna dėl ieškomų
+dažnai naudojamų žodžių, tokių kaip „yra“ ar „iš“, kurie yra
+neindeksuojami, arba nurodžius daugiau nei vieną paieškos žodį (rezultatuose
+bus tik tie straipsniai, kuriuose bus visi paieškos žodžiai).",
+'powersearch'           => 'Ieškoti',
+'powersearchtext'       => 'Ieškoti šiose vardų srityse:<br />$1<br /><label>$2 Rodyti peradresavimus</label><br />Ieškoti $3 $9',
+'searchdisabled'        => 'Projekto {{SITENAME}} paieška yra uždrausta. Galite pamėginti ieškoti Google paieškos sistemoje. Paieškos sistemoje projekto {{SITENAME}} duomenys gali būti pasenę.',
+'blanknamespace'        => '(Pagrindinė)',
+
+# Preferences page
+'preferences'              => 'Nustatymai',
+'mypreferences'            => 'Mano nustatymai',
+'prefsnologin'             => 'Neprisijungęs',
+'prefsnologintext'         => 'Jums reikia būti [[Special:Userlogin|prisijungusiam]], kad galėtumėte keisti savo nustatymus.',
+'prefsreset'               => 'Nustatymai buvo atstatyti iš saugyklos.',
+'qbsettings'               => 'Greitasis pasirinkimas',
+'qbsettings-none'          => 'Nerodyti',
+'qbsettings-fixedleft'     => 'Fiksuoti kairėje',
+'qbsettings-fixedright'    => 'Fiksuoti dešinėje',
+'qbsettings-floatingleft'  => 'Plaukiojantis kairėje',
+'qbsettings-floatingright' => 'Plaukiojantis dešinėje',
+'changepassword'           => 'Pakeisti slaptažodį',
+'skin'                     => 'Išvaizda',
+'math'                     => 'Matematika',
+'dateformat'               => 'Datos formatas',
+'datedefault'              => 'Jokio pasirinkimo',
+'datetime'                 => 'Data ir laikas',
+'math_failure'             => 'Nepavyko apdoroti',
+'math_unknown_error'       => 'nežinoma klaida',
+'math_unknown_function'    => 'nežinoma funkcija',
+'math_lexing_error'        => 'leksikos klaida',
+'math_syntax_error'        => 'sintaksės klaida',
+'math_image_error'         => 'PNG konvertavimas nepavyko; patikrinkite, ar teisingai įdiegta latex, dvips, gs, ir convert',
+'math_bad_tmpdir'          => 'Nepavyksta sukurti arba rašyti į matematikos laikinąjį aplanką',
+'math_bad_output'          => 'Nepavyksta sukurti arba rašyti į matematikos išvesties aplanką',
+'math_notexvc'             => 'Trūksta texvc vykdomojo failo; pažiūrėkite math/README kaip konfigūruoti.',
+'prefs-personal'           => 'Naudotojo profilis',
+'prefs-rc'                 => 'Paskutiniai keitimai',
+'prefs-watchlist'          => 'Stebimų sąrašas',
+'prefs-watchlist-days'     => 'Kiek dienų rodyti stebimų sąraše:',
+'prefs-watchlist-edits'    => 'Kiek keitimų rodyti išplėstiniame stebimų sąraše:',
+'prefs-misc'               => 'Įvairūs nustatymai',
+'saveprefs'                => 'Išsaugoti',
+'resetprefs'               => 'Atstatyti nustatymus',
+'oldpassword'              => 'Senas slaptažodis:',
+'newpassword'              => 'Naujas slaptažodis:',
+'retypenew'                => 'Pakartokite naują slaptažodį:',
+'textboxsize'              => 'Redagavimas',
+'rows'                     => 'Eilutės:',
+'columns'                  => 'Stulpeliai:',
+'searchresultshead'        => 'Paieškos nustatymai',
+'resultsperpage'           => 'Rezultatų puslapyje:',
+'contextlines'             => 'Eilučių rezultate:',
+'contextchars'             => 'Konteksto simbolių eilutėje:',
+'stubthreshold'            => 'Žymėti puslapį kaip nepilną, jei mažesnis nei:',
+'recentchangesdays'        => 'Rodomos dienos paskutinių keitimų sąraše:',
+'recentchangescount'       => 'Keitimų skaičius rodomas naujausių keitimų sąraše:',
+'savedprefs'               => 'Nustatymai sėkmingai išsaugoti.',
+'timezonelegend'           => 'Laiko juosta',
+'timezonetext'             => 'Įveskite kiek valandų jūsų vietinis laikas skiriasi nuo serverio laiko (UTC).',
+'localtime'                => 'Vietinis laikas',
+'timezoneoffset'           => 'Skirtumas¹',
+'servertime'               => 'Serverio laikas',
+'guesstimezone'            => 'Paimti iš naršyklės',
+'allowemail'               => 'Leisti siųsti el. laiškus iš kitų naudotojų',
+'defaultns'                => 'Pagal nutylėjimą ieškoti šiose vardų srityse:',
+'default'                  => 'pagal nutylėjimą',
+'files'                    => 'Failai',
+
+# User rights
+'userrights-lookup-user'     => 'Tvarkyti naudotojo grupes',
+'userrights-user-editname'   => 'Įveskite naudotojo vardą:',
+'editusergroup'              => 'Redaguoti naudotojo grupes',
+'userrights-editusergroup'   => 'Redaguoti naudotojų grupes',
+'saveusergroups'             => 'Saugoti naudotojų grupes',
+'userrights-groupsmember'    => 'Narys:',
+'userrights-groupsavailable' => 'Galimos grupės:',
+'userrights-groupshelp'      => 'Pasirinkite grupes, į kurias pridėti ar iš kurių pašalinti naudotoją.
+Nepasirinktos grupės nebus pakeistos. Galite atžymėti grupę laikydami Ctrl ir paspausdami kairiuoju pelės klavišu',
+'userrights-reason'          => 'Keitimo priežastis:',
+
+# Groups
+'group'            => 'Grupė:',
+'group-bot'        => 'Robotai',
+'group-sysop'      => 'Administratoriai',
+'group-bureaucrat' => 'Biurokratai',
+'group-all'        => '(visi)',
+
+'group-bot-member'        => 'Robotas',
+'group-sysop-member'      => 'Administratorius',
+'group-bureaucrat-member' => 'Biurokratas',
+
+'grouppage-bot'        => '{{ns:project}}:Robotai',
+'grouppage-sysop'      => '{{ns:project}}:Administratoriai',
+'grouppage-bureaucrat' => '{{ns:project}}:Biurokratai',
+
+# User rights log
+'rightslog'      => 'Naudotojų teisių istorija',
+'rightslogtext'  => 'Pateikiamas naudotojų teisių pakeitimų sąrašas.',
+'rightslogentry' => 'pakeista $1 grupės narystė iš $2 į $3',
+'rightsnone'     => '(jokių)',
+
+# Recent changes
+'nchanges'                          => '$1 {{PLURAL:$1|pakeitimas|pakeitimai|pakeitimų}}',
+'recentchanges'                     => 'Paskutiniai keitimai',
+'recentchangestext'                 => 'Šiame puslapyje yra patys naujausi pakeitimai šiame projekte.',
+'recentchanges-feed-description'    => 'Sekite pačius paskiausius keitimus projektui šiame kanale.',
+'rcnote'                            => "Žemiau yra '''$1''' {{PLURAL:$1|paskutinis pakeitimas|paskutiniai pakeitimai|paskutinių pakeitimų}} per $2 {{PLURAL:$2|paskutiniąją dieną|paskutiniąsias dienas|paskutiniųjų dienų}} skaičiuojant nuo $3.",
+'rcnotefrom'                        => 'Žemiau yra pakeitimai pradedant <b>$2</b> (rodoma iki <b>$1</b> pakeitimų).',
+'rclistfrom'                        => 'Rodyti naujus pakeitimus pradedant $1',
+'rcshowhideminor'                   => '$1 smulkius keitimus',
+'rcshowhidebots'                    => '$1 robotus',
+'rcshowhideliu'                     => '$1 prisijungusius naudotojus',
+'rcshowhideanons'                   => '$1 anoniminius naudotojus',
+'rcshowhidepatr'                    => '$1 patikrintus keitimus',
+'rcshowhidemine'                    => '$1 mano keitimus',
+'rclinks'                           => 'Rodyti paskutinius $1 pakeitimų per paskutiniąsias $2 dienų<br />$3',
+'diff'                              => 'skirt',
+'hist'                              => 'ist',
+'hide'                              => 'Slėpti',
+'show'                              => 'Rodyti',
+'minoreditletter'                   => 'S',
+'newpageletter'                     => 'N',
+'boteditletter'                     => 'R',
+'sectionlink'                       => '→',
+'number_of_watching_users_pageview' => '[$1 stebintys naudotojai]',
+'rc_categories'                     => 'Rodyti tik šias kategorijas (atskirkite naudodami „|“)',
+'rc_categories_any'                 => 'Bet kokia',
+
+# Recent changes linked
+'recentchangeslinked'          => 'Susiję keitimai',
+'recentchangeslinked-noresult' => 'Nėra jokių pakeitimų susietuose puslapiuose duotu periodu.',
+'recentchangeslinked-summary'  => "Šiame specialiajame puslapyje rodomi paskutiniai keitimai puslapiuose, į kuriuos yra nurodoma. Puslapiai iš jūsų stebimųjų sąrašo yra '''paryškinti'''.",
+
+# Upload
+'upload'                      => 'Įkelti failą',
+'uploadbtn'                   => 'Įkelti failą',
+'reupload'                    => 'Pakartoti įkėlimą',
+'reuploaddesc'                => 'Grįžti į įkėlimo formą.',
+'uploadnologin'               => 'Neprisijungęs',
+'uploadnologintext'           => 'Norėdami įkelti failą, turite būti [[{{ns:special}}:Userlogin|prisijungęs]].',
+'upload_directory_read_only'  => 'Tinklapio serveris negali rašyti į įkėlimo aplanką ($1).',
+'uploaderror'                 => 'Įkėlimo klaida',
+'uploadtext'                  => "Naudokitės žemiau pateikta forma failų įkėlimui, norėdami peržiūrėti ar ieškoti anksčiau įkeltų paveikslėlių,
+eikite į [[{{ns:special}}:Imagelist|įkeltų failų sąrašą]], įkėlimai ir trynimai yra registruojami [[{{ns:special}}:Log/upload|įkėlimų istorijoje]].
+
+Norėdami panaudoti įkeltą paveikslėlį puslapyje, naudokite tokias nuorodas
+'''<nowiki>[[</nowiki>{{ns:image}}<nowiki>:Failas.jpg]]</nowiki>''',
+'''<nowiki>[[</nowiki>{{ns:image}}<nowiki>:Failas.png|alternatyvusis tekstas]]</nowiki>''' arba
+'''<nowiki>[[</nowiki>{{ns:media}}<nowiki>:Failas.ogg]]</nowiki>''' tiesioginei nuorodai į failą.",
+'uploadlog'                   => 'įkėlimų istorija',
+'uploadlogpage'               => 'Įkėlimų istorija',
+'uploadlogpagetext'           => 'Žemiau pateikiamas paskutinių failų įkėlimų istorija.',
+'filename'                    => 'Failo vardas',
+'filedesc'                    => 'Komentaras',
+'fileuploadsummary'           => 'Komentaras:',
+'filestatus'                  => 'Autorystės teisės',
+'filesource'                  => 'Šaltinis',
+'uploadedfiles'               => 'Įkelti failai',
+'ignorewarning'               => 'Ignoruoti įspėjimą ir išsaugoti failą vistiek.',
+'ignorewarnings'              => 'Ignuoruoti bet kokius įspėjimus',
+'minlength'                   => 'Failo pavadinimas turi būti bent trijų raidžių ilgio.',
+'illegalfilename'             => 'Failo varde „$1“ yra simbolių, neleidžiamų puslapio pavadinimuose. Prašome pervadint failą ir mėginkite įkelti jį iš naujo.',
+'badfilename'                 => 'Failo pavadinimas pakeistas į „$1“.',
+'filetype-badmime'            => 'Neleidžiama įkelti „$1“ MIME tipo failų.',
+'filetype-badtype'            => "'''„.$1“''' yra nepageidaujamas failo tipas
+: Leistinų failų tipų sąrašas: $2",
+'filetype-missing'            => 'Failas neturi galūnės (pavyzdžiui „.jpg“).',
+'large-file'                  => 'Rekomenduojama, kad failų dydis būtų nedidesnis nei $1; šio failo dydis yra $2.',
+'largefileserver'             => 'Šis failas yra didesnis nei serveris yra sukonfigūruotas leisti.',
+'emptyfile'                   => 'Panašu, kad failas, kurį įkėlėte yra tuščias. Tai gali būti dėl klaidos failo pavadinime. Pasitikrinkite ar tikrai norite įkelti šitą failą.',
+'fileexists'                  => 'Failas tuo pačiu vardu jau egzistuoja, prašome pažiūrėti <strong><tt>$1</tt></strong>, jei nesate tikras, ar norite perrašyti šį failą.',
+'fileexists-extension'        => 'Failas su panašiu pavadinimu jau yra:<br />
+Įkeliamo failo pavadinimas: <strong><tt>$1</tt></strong><br />
+Jau esančio failo pavadinimas: <strong><tt>$2</tt></strong><br />
+Vienintelis skirtumas yra galūnės raidžių dydis. Prašome peržiūrėti failus dėl tapatumo.',
+'fileexists-thumb'            => "'''<center>Egzistuojantis paveikslėlis</center>'''",
+'fileexists-thumbnail-yes'    => 'Failas turbūt yra sumažinto dydžio failas <i>(miniatiūra)</i>. Prašome peržiūrėti failą  <strong><tt>$1</tt></strong>.<br />
+Jeigu tai yra toks pats pradinio dydžio paveikslėlis, tai įkelti papildomos miniatūros nereikia.',
+'file-thumbnail-no'           => 'Failo pavadinimas prasideda  <strong><tt>$1</tt></strong>. Atrodo, kad yra sumažinto dydžio paveikslėlis <i>(miniatiūra)</i>.
+Jei jūs turite šį paveisklėlį pilna raiška, įkelkite šitą, priešingu atveju prašome pakeisti failo pavadinimą.',
+'fileexists-forbidden'        => 'Failas tokiu pačiu vardu jau egzistuoja; prašome eiti atgal ir įkelti šį failą kitu vardu. [[{{ns:image}}:$1|thumb|center|$1]]',
+'fileexists-shared-forbidden' => 'Failas tokiu vardu jau egzistuoja bendrojoje failų saugykloje; prašome eiti atgal ir įkelti šį failą kitu vardu. [[{{ns:image}}:$1|thumb|center|$1]]',
+'successfulupload'            => 'Įkelta sėkmingai',
+'fileuploaded'                => 'Failas $1 sėkmingai įkeltas.
+Prašome nueiti šia nuoroda: $2 į aprašymo puslapį ir įrašyti
+informaciją apie failą, iš kokio šaltinio paimtas, kada buvo sukurtas,
+kas jo autorius, bei kitą susijusią informaciją. Jei tai
+paveikslėlis, jūs galite jį įterpti šitaip: <tt><nowiki>[[</nowiki>{{ns:image}}<nowiki>:$1|thumb|Aprašymas]]</nowiki></tt>',
+'uploadwarning'               => 'Dėmesio',
+'savefile'                    => 'Išsaugoti failą',
+'uploadedimage'               => 'įkėlė „[[$1]]“',
+'uploaddisabled'              => 'Įkėlimai uždrausti',
+'uploaddisabledtext'          => 'Šiame projekte failų įkėlimai yra uždrausti.',
+'uploadscripted'              => 'Šis failas turi HTML arba programinį kodą, kuris gali būti klaidingai suprastas interneto naršyklės.',
+'uploadcorrupt'               => 'Failas yra pažeistas arba turi neteisingą galūnę. Prašome patikrinti failą ir įkeltį jį vėl.',
+'uploadvirus'                 => 'Šiame faile yra virusas! Smulkiau: $1',
+'sourcefilename'              => 'Įkeliamas failas',
+'destfilename'                => 'Norimas failo vardas',
+'watchthisupload'             => 'Stebėti šį puslapį',
+'filewasdeleted'              => 'Failas šiuo vardu anksčiau buvo įkeltas, o paskui ištrintas. Jums reikėtų patikrinti $1 prieš bandant įkelti jį vėl.',
+
+'upload-proto-error'      => 'Neteisingas protokolas',
+'upload-proto-error-text' => 'Nuotoliniai įkėlimas reikalauja, kad URL prasidėtų <code>http://</code> arba <code>ftp://</code>.',
+'upload-file-error'       => 'Vidinė klaida',
+'upload-file-error-text'  => 'Įvyko vidinė klaida bandant sukurti laikinąjį failą serveryje. Prašome susisiekti su sistemos administratoriumi.',
+'upload-misc-error'       => 'Nežinoma įkėlimo klaida',
+'upload-misc-error-text'  => 'Įvyko nežinoma klaida vykstant įkėlimui. Prašome patikrinti, kad URL teisingas bei pasiekiamas ir pamėginkite vėl. Jei problema lieka, susisiekite su sistemos administratoriumi.',
+
+# Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
+'upload-curl-error6'       => 'Nepavyksta pasiekti URL',
+'upload-curl-error6-text'  => 'Pateiktas URL negali būti pasiektas. Prašome patikrinti, kad URL yra teisingas ir svetainė veikia.',
+'upload-curl-error28'      => 'Per ilgai įkeliama',
+'upload-curl-error28-text' => 'Atsakant svetainė užtrunka per ilgai. Patikrinkite, ar svetainė veikia, palaukite truputį ir vėl pamėginkite. Galbūt jums reikėtų pamėginti ne tokiu apkrautu metu.',
+
+'license'            => 'Licensija',
+'nolicense'          => 'Nepasirinkta',
+'upload_source_url'  => ' (tikras, viešai prieinamas URL)',
+'upload_source_file' => ' (failas jūsų kompiuteryje)',
+
+# Image list
+'imagelist'                 => 'Failų sąrašas',
+'imagelisttext'             => "Žemiau yra '''$1''' {{plural:$1|failo|failų}} sąrašas, surūšiuotas $2.",
+'imagelistforuser'          => 'Čia rodomi tik paveikslėliai, kuriuos įkelė $1.',
+'getimagelist'              => 'gauti failų sąrašą',
+'ilsubmit'                  => 'Ieškoti',
+'showlast'                  => 'Rodyti paskutinius $1 paveikslėlių, rūšiuojant $2.',
+'byname'                    => 'pagal vardą',
+'bydate'                    => 'pagal datą',
+'bysize'                    => 'pagal dydį',
+'imgdelete'                 => 'trint',
+'imgdesc'                   => 'apr',
+'imgfile'                   => 'failas',
+'imglegend'                 => 'Žymėjimai: (apr) = žiūrėti/redaguoti failo aprašymą.',
+'imghistory'                => 'Paveikslėlio istorija',
+'revertimg'                 => 'atst',
+'deleteimg'                 => 'trinti',
+'deleteimgcompletely'       => 'Ištrinti visas šio failo versijas',
+'imghistlegend'             => 'Žymėjimai: (dab) = dabartinė failo versija, (trinti) = ištrinti
+seną versiją, (atst) = atstatyti seną versiją.
+<br /><i>Spustelkite ant datos norėdami pažiūrėti tuo metu buvusią versiją</i>.',
+'imagelinks'                => 'Nuorodos',
+'linkstoimage'              => 'Šie puslapiai nurodo į šį failą:',
+'nolinkstoimage'            => 'Į failą nenurodo joks puslapis.',
+'sharedupload'              => 'Šis failas yra įkeltas bendram naudojimui ir gali būti naudojamas kituose projektuose.',
+'shareduploadwiki'          => 'Žiūrėkite $1 tolimesnei informacijai.',
+'shareduploadwiki-linktext' => 'failo aprašymo puslapį',
+'noimage'                   => 'Failas tokiu pavadinimu neegzistuoja. Jūs galite $1',
+'noimage-linktext'          => 'įkelti jį',
+'uploadnewversion-linktext' => 'Įkelti naują failo versiją',
+'imagelist_date'            => 'Data',
+'imagelist_name'            => 'Pavadinimas',
+'imagelist_user'            => 'Naudotojas',
+'imagelist_size'            => 'Dydis (baitais)',
+'imagelist_description'     => 'Aprašymas',
+'imagelist_search_for'      => 'Ieškoti paveikslėlio pavadinimo:',
+
+# MIME search
+'mimesearch'         => 'MIME paieška',
+'mimesearch-summary' => 'Šis puslapis leidžia rodyti failus pagal jų MIME tipą. Įveskite: turiniotipas/potipis, pvz. <tt>image/jpeg</tt>.',
+'mimetype'           => 'MIME tipas:',
+'download'           => 'parsisiųsti',
+
+# Unwatched pages
+'unwatchedpages' => 'Nestebimi puslapiai',
+
+# List redirects
+'listredirects' => 'Peradresavimų sąrašas',
+
+# Unused templates
+'unusedtemplates'     => 'Nenaudojami šablonai',
+'unusedtemplatestext' => 'Šis puslapis rodo sąrašą puslapių, esančių šablonų vardų srityje, kurie nėra įterpti į jokį kitą puslapį. Nepamirškite patikrinti kitų nuorodų prieš juos ištrinant.',
+'unusedtemplateswlh'  => 'kitos nuorodos',
+
+# Random redirect
+'randomredirect'         => 'Atsitiktinis peradresavimas',
+'randomredirect-nopages' => 'Šioje vardų srityje nėra jokių peradresavimų.',
+
+# Statistics
+'statistics'             => 'Statistika',
+'sitestats'              => '{{SITENAME}} statistika',
+'userstats'              => 'Naudotojų statistika',
+'sitestatstext'          => "Duomenų bazėje yra '''$1''' {{PLURAL:$1|puslapis|puslapiai|puslapių}}.
+Į šį skaičių įeina aptarimų puslapiai, puslapiai apie {{SITENAME}}, peradresavimo puslapiai ir kiti, nelaikomi straipsniais.
+Be šių puslapių, yra '''$2''' {{PLURAL:$2|puslapis|puslapiai|puslapių}} pripažįstami kaip turinio puslapiai.
+
+Buvo įkelta '''$8''' {{PLURAL:$8|failas|failai|failų}}.
+
+Nuo {{SITENAME}} pradžios iš viso buvo parodyta '''$3''' {{PLURAL:$3|puslapis|puslapiai|puslapių}} ir atlikta '''$4''' puslapių {{PLURAL:$4|keitimas|keitimai|keitimų}}.
+Iš to išeina, kad vidutiniškai kiekvienas puslapis keistas '''$5''' karto, bei parodytas '''$6''' karto per pakeitimą.
+
+[http://meta.wikimedia.org/wiki/Help:Job_queue Užduočių eilės] ilgis yra '''$7'''.",
+'userstatstext'          => "Šiuo metu yra '''$1''' {{plural:$1|registruotas naudotojas|registruoti naudotojai|registruotų naudotojų}}, iš jų
+'''$2''' (arba '''$4%''') yra $5.",
+'statistics-mostpopular' => 'Daugiausiai rodyti puslapiai',
+
+'disambiguations'      => 'Daugiaprasmių žodžių puslapiai',
+'disambiguationspage'  => '{{ns:template}}:Daugiareikšmis',
+'disambiguations-text' => "Žemiau išvardinti puslapiai nurodo į '''daugiaprasmių žodžių puslapius'''. Nuorodos turėtų būti patikslintos, kad rodytų į konkretų straipsnį.<br />Puslapis laikomas daugiaprasmiu puslapiu, jei jis naudoja šabloną, kuris yra nurodomas iš [[MediaWiki:disambiguationspage]].",
+
+'doubleredirects'     => 'Dvigubi peradresavimai',
+'doubleredirectstext' => 'Kiekvienoje eilutėje išvardintas pirmasis ir antrasis peradresavimai, taip pat pirma antrojo peradresavimo eilutė, paprastai rodanti į „teisingą“ puslapį, į kurį pirmasis peradresavimas turėtų rodyti.',
+
+'brokenredirects'        => 'Peradresavimai į niekur',
+'brokenredirectstext'    => 'Žemiau išvardinti peradresavimo puslapiai rodo į neegzistuojančius puslapius:',
+'brokenredirects-edit'   => '(redaguoti)',
+'brokenredirects-delete' => '(trinti)',
+
+'withoutinterwiki'        => 'Puslapiai be kalbų nuorodų',
+'withoutinterwiki-header' => 'Šie puslapiai nenurodo į kitų kalbų versijas:',
+
+'fewestrevisions' => 'Straipsniai su mažiausiai keitimų',
+
+# Miscellaneous special pages
+'nbytes'                  => '$1 {{PLURAL:$1|baitas|baitai|baitų}}',
+'ncategories'             => '$1 {{PLURAL:$1|kategorija|kategorijos|kategorijų}}',
+'nlinks'                  => '$1 {{PLURAL:$1|nuoroda|nuorodos|nuorodų}}',
+'nmembers'                => '$1 {{PLURAL:$1|narys|nariai|narių}}',
+'nrevisions'              => '$1 {{PLURAL:$1|keitimas|keitimai|keitimų}}',
+'nviews'                  => '$1 {{PLURAL:$1|parodymas|parodymai|parodymų}}',
+'specialpage-empty'       => 'Šis puslapis yra tuščias.',
+'lonelypages'             => 'Vieniši straipsniai',
+'lonelypagestext'         => 'Į šiuos puslapius nėra nuorodų iš kitų šio projekto puslapių.',
+'uncategorizedpages'      => 'Puslapiai, nepriskirti jokiai kategorijai',
+'uncategorizedcategories' => 'Kategorijos, nepriskirtos jokiai kategorijai',
+'uncategorizedimages'     => 'Paveikslėliai, nepriskirti jokiai kategorijai',
+'unusedcategories'        => 'Nenaudojamos kategorijos',
+'unusedimages'            => 'Nenaudojami failai',
+'popularpages'            => 'Populiarūs puslapiai',
+'wantedcategories'        => 'Geidžiamiausios kategorijos',
+'wantedpages'             => 'Geidžiamiausi puslapiai',
+'mostlinked'              => 'Daugiausiai nurodomi straipsniai',
+'mostlinkedcategories'    => 'Daugiausiai nurodomos kategorijos',
+'mostcategories'          => 'Straipsniai su daugiausiai kategorijų',
+'mostimages'              => 'Daugiausiai nurodomi paveikslėliai',
+'mostrevisions'           => 'Straipsniai su daugiausiai keitimų',
+'allpages'                => 'Visi puslapiai',
+'prefixindex'             => 'Rodyklė pagal pavadinimo pradžią',
+'randompage'              => 'Atsitiktinis puslapis',
+'randompage-nopages'      => 'Šioje vardų srityje nėra jokių puslapių.',
+'shortpages'              => 'Trumpiausi puslapiai',
+'longpages'               => 'Ilgiausi puslapiai',
+'deadendpages'            => 'Straipsniai-aklavietės',
+'deadendpagestext'        => 'Šie puslapiai neturi nuorodų į kitus puslapius šiame projekte.',
+'protectedpages'          => 'Apsaugoti puslapiai',
+'protectedpagestext'      => 'Šie puslapiai yra apsaugoti nuo perkėlimo ar redagavimo',
+'protectedpagesempty'     => 'Šiuo metu nėra apsaugotas joks failas su šiais parametrais.',
+'listusers'               => 'Naudotojų sąrašas',
+'specialpages'            => 'Specialieji puslapiai',
+'spheading'               => 'Specialieji puslapiai visiems naudotojams',
+'restrictedpheading'      => 'Apribotieji specialieji puslapiai',
+'rclsub'                  => '(puslapiuose, pasiekiamuose iš „$1“)',
+'newpages'                => 'Naujausi puslapiai',
+'newpages-username'       => 'Naudotojo vardas:',
+'ancientpages'            => 'Seniausi puslapiai',
+'intl'                    => 'Tarpkalbinės nuorodos',
+'move'                    => 'Pervadinti',
+'movethispage'            => 'Pervadinti šį puslapį',
+'unusedimagestext'        => '<p>Primename, kad kitos svetainės gali būti nurodžiusios į paveikslėlį tiesioginiu URL, bet vistiek gali būti šiame sąraše, nors ir yra aktyviai naudojamas.</p>',
+'unusedcategoriestext'    => 'Šie kategorijų puslapiai sukurti, nors joks kitas straipsnis ar kategorija jo nenaudoja.',
+
+# Book sources
+'booksources'               => 'Knygų šaltiniai',
+'booksources-search-legend' => 'Knygų šaltinių paieška',
+'booksources-isbn'          => 'ISBN:',
+'booksources-go'            => 'Rodyti',
+'booksources-text'          => 'Žemiau yra nuorodų sąrašas į kitas svetaines, kurios parduoda naujas ar naudotas knygas, bei galbūt turinčias daugiau informacijos apie knygas, kurių ieškote:',
+
+'categoriespagetext' => 'Projekte yra šios kategorijos.',
+'data'               => 'Duomenys',
+'userrights'         => 'Naudotojų teisių valdymas',
+'groups'             => 'Naudotojų grupės',
+'isbn'               => 'ISBN',
+'alphaindexline'     => 'Nuo $1 iki $2',
+'version'            => 'Versija',
+
+# Special:Log
+'specialloguserlabel'  => 'Naudotojas:',
+'speciallogtitlelabel' => 'Pavadinimas:',
+'log'                  => 'Specialiųjų veiksmų istorija',
+'log-search-legend'    => 'Ieškoti istorijose',
+'log-search-submit'    => 'Rodyti',
+'alllogstext'          => 'Bendras visų galimų „{{SITENAME}}“ specialiųjų veiksmų istorijų rodinys.
+Galima sumažinti rezultatų skaičių patikslinant veiksmo rūšį, naudotoją ar susijusį puslapį.',
+'logempty'             => 'Istorijoje nėra jokių atitinkančių įvykių.',
+'log-title-wildcard'   => 'Ieškoti pavadinimų, prasidedančių šiuo tekstu',
+
+# Special:Allpages
+'nextpage'          => 'Kitas puslapis ($1)',
+'prevpage'          => 'Ankstesnis puslapis ($1)',
+'allpagesfrom'      => 'Rodyti puslapius pradedant nuo:',
+'allarticles'       => 'Visi straipsniai',
+'allinnamespace'    => 'Visi puslapiai ($1 vardų sritis)',
+'allnotinnamespace' => 'Visi puslapiai (nesantys $1 vardų srityje)',
+'allpagesprev'      => 'Atgal',
+'allpagesnext'      => 'Pirmyn',
+'allpagessubmit'    => 'Rodyti',
+'allpagesprefix'    => 'Rodyti puslapiu su priedėliu:',
+'allpagesbadtitle'  => 'Duotas puslapio pavadinimas yra neteisingas arba turi tarpkalbininį arba tarpprojektinį priedėlį. Jame yra vienas ar keli simboliai, kurių negalima naudoti pavadinimuose.',
+
+# Special:Listusers
+'listusersfrom'      => 'Rodyti naudotojus pradedant nuo:',
+'listusers-submit'   => 'Rodyti',
+'listusers-noresult' => 'Nerasta jokių naudotojų.',
+
+# E-mail user
+'mailnologin'     => 'Nėra adreso',
+'mailnologintext' => 'Jums reikia būti [[{{ns:special}}:Userlogin|prisijungusiam]]
+ir turi būti įvestas teisingas el. pašto adresas jūsų [[{{ns:special}}:Preferences|nustatymuose]],
+kad siųstumėte el. laiškus kitiems nautotojams.',
+'emailuser'       => 'Rašyti laišką šiam naudotojui',
+'emailpage'       => 'Siųsti el. laišką naudotojui',
+'emailpagetext'   => 'Jei šis naudotojas yra įvedęs teisingą el. pašto adresą
+savo nustatymuose, ši forma nusiųs vieną laišką.
+El. pašto adresas, nurodytas jūsų nustatymuose, bus rodomas
+kaip laiško adresas „Nuo“, kad gavėjas galėtų jums atsakyti.',
+'usermailererror' => 'Pašto objektas grąžino klaidą::',
+'defemailsubject' => '{{SITENAME}} el. paštas',
+'noemailtitle'    => 'Nėra el. pašto adreso',
+'noemailtext'     => 'Šis naudotojas yra nenurodęs teisingo el. pašto adreso, arba yra pasirinkęs negauti el. pašto iš kitų naudotojų.',
+'emailfrom'       => 'Nuo',
+'emailto'         => 'Kam',
+'emailsubject'    => 'Tema',
+'emailmessage'    => 'Tekstas',
+'emailsend'       => 'Siųsti',
+'emailccme'       => 'Siųsti man mano laiško kopiją.',
+'emailccsubject'  => 'Laiško kopija naudotojui $1: $2',
+'emailsent'       => 'El. laiškas išsiųstas',
+'emailsenttext'   => 'Jūsų el. pašto žinutė išsiųsta.',
+
+# Watchlist
+'watchlist'            => 'Stebimi straipsniai',
+'mywatchlist'          => 'Stebimi straipsniai',
+'watchlistfor'         => "(naudotojo '''$1''')",
+'nowatchlist'          => 'Neturite nei vieno stebimo puslapio.',
+'watchlistanontext'    => 'Prašome $1, kad peržiūrėtumėte ar pakeistumėte elementus savo stebimųjų sąraše.',
+'watchlistcount'       => "'''Jūs turite $1 {{PLURAL:$1|elementą|elementus|elementų}} stebimųjų sąraše įskaitant aptarimo puslapius.'''",
+'clearwatchlist'       => 'Išvalyti stebimų sąrašą',
+'watchlistcleartext'   => 'Ar tikrai norite juos pašalinti?',
+'watchlistclearbutton' => 'Išvalyti stebimų sąrašą',
+'watchlistcleardone'   => 'Jūsų stebimųjų sąrašas išvalytas. Pašalinta $1 {{PLURAL:$1|elementas|elementai|elementų}}.',
+'watchnologin'         => 'Neprisijungęs',
+'watchnologintext'     => 'Jums reikia būti [[{{ns:special}}:Userlogin|prisijungusiam]], kad pakeistumėte savo stebimųjų sąrašą.',
+'addedwatch'           => 'Pridėta prie Stebimų',
+'addedwatchtext'       => "Puslapis „[[:$1]]“ pridėtas į [[Special:Watchlist|stebimųjų sąrašą]].
+Būsimi puslapio bei atitinkamo aptarimo puslapio pakeitimai bus rodomi stebimųjų puslapių sąraše,
+taip pat bus '''paryškinti''' [[Special:Recentchanges|naujausių keitimų sąraše]], kad išsiskirtų iš kitų straipsnių.
+
+Jei vėliau užsinorėtumėte nustoti stebėti straipsnį, spustelkite „Nebestebėti“ viršutiniame meniu.",
+'removedwatch'         => 'Pašalinta iš stebimų',
+'removedwatchtext'     => 'Puslapis „[[:$1]]“ pašalintas iš jūsų stebimų sąrašo.',
+'watch'                => 'Stebėti',
+'watchthispage'        => 'Stebėti šį puslapį',
+'unwatch'              => 'Nebestebėti',
+'unwatchthispage'      => 'Nustoti stebėti',
+'notanarticle'         => 'Ne turinio puslapis',
+'watchnochange'        => 'Pasirinktu laikotarpiu nebuvo redaguotas nei vienas stebimas straipsnis.',
+'watchdetails'         => '* Stebima $1 {{plural:$1|puslapis|puslapiai|puslapių}} neskaičiuojant aptarimų puslapių
+* [[{{ns:special}}:Watchlist/edit|Parodyti ir redaguoti pilną sąrašą]]
+* [[{{ns:special}}:Watchlist/clear|Pašalinti visus puslapius]]',
+'wlheader-enotif'      => '* El. pašto priminimai yra įjungti.',
+'wlheader-showupdated' => "* Puslapiai pakeisti nuo tada, kai paskutinį kartą apsilankėte juose, yra pažymėti '''pastorintai'''",
+'watchmethod-recent'   => 'tikrinami paskutiniai keitimai stebimiems puslapiams',
+'watchmethod-list'     => 'ieškoma naujausių keitimų stebimuose puslapiuose',
+'removechecked'        => 'Išmesti pažymėtus elementus iš stebimų sąrašo',
+'watchlistcontains'    => 'Jūsų stebimųjų sąraše yra $1 {{PLURAL:$1|puslapis|puslapiai|puslapių}}.',
+'watcheditlist'        => 'Tai abėcėlės tvarka surikiuotas stebimų puslapių sąrašas. Pažymėkite puslapius, kuriuos norite pašalinti iš jūsų stebimųjų sąrašo ir paspauskite žemiau 
+esantį mygtuką „Išmesti pažymėtus“ (pašalinus turinio puslapį bus pašalintas ir susijęs aptarimo puslapis ir atvirkščiai).',
+'removingchecked'      => 'Pasirinkti elementai išmetami iš stebimų sąrašo...',
+'couldntremove'        => 'Nepavyko pašalinti „$1“...',
+'iteminvalidname'      => 'Problema su elementu „$1“, neteisingas vardas...',
+'wlnote'               => "{{PLURAL:$1|Rodomas '''$1''' paskutinis pakeitimas, atliktas|Rodomi '''$1''' paskutiniai pakeitimai, atlikti|Rodoma '''$1''' paskutinių pakeitimų, atliktų}} per {{PLURAL:$2|'''$2''' paskutinę valandą|'''$2''' paskutines valandas|'''$2''' paskutinių valandų}}.",
+'wlshowlast'           => 'Rodyti paskutinių $1 valandų, $2 dienų ar $3 pakeitimus',
+'wlsaved'              => 'Tai išsaugota jūsų stebimųjų sąrašo versija.',
+'watchlist-show-bots'  => 'Rodyti robotų keitimus',
+'watchlist-hide-bots'  => 'Slėpti robotų keitimus',
+'watchlist-show-own'   => 'Rodyti mano keitimus',
+'watchlist-hide-own'   => 'Slėpti mano keitimus',
+'watchlist-show-minor' => 'Rodyti smulkius keitimus',
+'watchlist-hide-minor' => 'Slėpti smulkius keitimus',
+'wldone'               => 'Atlikta.',
+
+# Displayed when you click the "watch" button and it's in the process of watching
+'watching'   => 'Įtraukiama į stebimųjų sąrašą...',
+'unwatching' => 'Šalinama iš stebimųjų sąrašo...',
+
+'enotif_mailer'      => '{{SITENAME}} Pranešimų sistema',
+'enotif_reset'       => 'Pažymėti visus puslapius kaip aplankytus',
+'enotif_newpagetext' => 'Tai naujas puslapis.',
+'changed'            => 'pakeitė',
+'created'            => 'sukurė',
+'enotif_subject'     => 'Projekte {{SITENAME}} naudotojas $PAGEEDITOR $CHANGEDORCREATED $PAGETITLE',
+'enotif_lastvisited' => 'Užeikite į $1, jei norite matyti pakeitimus nuo paskutiniojo apsilankymo.',
+'enotif_body'        => '$WATCHINGUSERNAME,
+
+$PAGEEDITDATE projekte {{SITENAME}} naudotojas $PAGEEDITOR $CHANGEDORCREATED puslapį $PAGETITLE, dabartinę versiją rasite adresu $PAGETITLE_URL.
+
+$NEWPAGE
+
+Redaguotojo komentaras: $PAGESUMMARY $PAGEMINOREDIT
+
+Susisiekti su redaguotoju:
+el. paštu: $PAGEEDITOR_EMAIL
+wiki: $PAGEEDITOR_WIKI
+
+Daugiau pranešimų apie vėlesnius pakeitimus nebus siunčiama, jei neapsilankysite puslapyje. Jūs taip pat galite išjungti pranešimo žymę visiems jūsų stebimiems puslapiams savo stebimųjų sąraše.
+
+      Jūsų draugiškoji projekto {{SITENAME}} pranešimų sistema
+
+--
+Norėdami pakeisti stebimų puslapių nustatymus, užeikite į
+{{fullurl:{{ns:special}}:Watchlist/edit}}
+
+Atsiliepimai ir pagalba:
+{{fullurl:{{MediaWiki:helppage}}}}',
+
+# Delete/protect/revert
+'deletepage'                  => 'Trinti puslapį',
+'confirm'                     => 'Tvirtinu',
+'excontent'                   => 'buvęs turinys: „$1“',
+'excontentauthor'             => 'buvęs turinys: „$1“ (redagavo tik „[[{{ns:special}}:Contributions/$2|$2]]“)',
+'exbeforeblank'               => 'prieš ištrinant turinys buvo: „$1“',
+'exblank'                     => 'puslapis buvo tuščias',
+'confirmdelete'               => 'Trynimo patvirtinimas',
+'deletesub'                   => '(Trinama „$1“)',
+'historywarning'              => 'Dėmesio: Trinamas puslapis turi istoriją:',
+'confirmdeletetext'           => 'Jūs pasirinkote ištrinti puslapį ar paveikslėlį
+kartu su visa jo istorija iš duomenų bazės.
+Prašome patvirtinti, kad jūs norite tai padaryti,
+žinote apie galimas pasėkmes, ir kad jūs tai darote pagal 
+[[{{MediaWiki:policy-url}}]].',
+'actioncomplete'              => 'Veiksmas atliktas',
+'deletedtext'                 => '„$1“ ištrintas.
+Paskutinių šalinimų istorija - $2.',
+'deletedarticle'              => 'ištrynė „[[$1]]“',
+'dellogpage'                  => 'Šalinimų istorija',
+'dellogpagetext'              => 'Žemiau pateikiamas paskutinių trynimų sąrašas.',
+'deletionlog'                 => 'šalinimų istorija',
+'reverted'                    => 'Atkurta į ankstesnę versiją',
+'deletecomment'               => 'Trynimo priežastis',
+'imagereverted'               => 'Atstatymas į ankstesnę versiją pavyko.',
+'rollback'                    => 'Atmesti keitimus',
+'rollback_short'              => 'Atmesti',
+'rollbacklink'                => 'atmesti',
+'rollbackfailed'              => 'Atmetimas nepavyko',
+'cantrollback'                => 'Negalima atmesti redagavimo; paskutinis keitęs naudotojas yra šio puslapio autorius.',
+'alreadyrolled'               => 'Nepavyko atmesti paskutinio [[{{ns:user}}:$2|$2]] ([[{{ns:user_talk}}:$2|Aptarimas]]) daryto straipsnio [[:$1]] keitimo; kažkas jau pakeitė straipsnį arba suspėjo pirmas atmesti keitimą.
+
+Paskutimas keitimas darytas naudotojo [[{{ns:user}}:$3|$3]] ([[{{ns:user_talk}}:$3|Aptarimas]]).',
+'editcomment'                 => 'Redagavimo komentaras: „<i>$1</i>“.', # only shown if there is an edit comment
+'revertpage'                  => 'Atmestas [[{{ns:special}}:Contributions/$2|$2]] ([[{{ns:user_talk}}:$2|Aptarimas]]) pakeitimas; sugrąžinta naudotojo [[{{ns:user}}:$1|$1]] versija',
+'sessionfailure'              => 'Atrodo yra problemų su jūsų prisijungimo sesija; šis veiksmas buvo atšauktas kaip atsargumo priemonė prieš sesijos vogimą.
+Prašome paspausti „atgal“ ir perkraukite puslapį iš kurio atėjote, ir pamėginkite vėl.',
+'protectlogpage'              => 'Rakinimų istorija',
+'protectlogtext'              => 'Žemiau yra puslapių užrakinimų bei atrakinimų istorija. Dabar veikiančių puslapių apsaugų sąrašą rasite [[{{ns:special}}:Protectedpages|apsaugotų puslapių sąraše]].',
+'protectedarticle'            => 'užrakino „[[$1]]“',
+'unprotectedarticle'          => 'atrakino „[[$1]]“',
+'protectsub'                  => '(Rakinamas „$1“)',
+'confirmprotecttext'          => 'Ar jūs tikrai norite užrakinti šį straipsnį?',
+'confirmprotect'              => 'Užrakinimo patvirtinimas',
+'protectmoveonly'             => 'Uždrausti tik perkėlimus',
+'protectcomment'              => 'Rakinimo priežastis',
+'protectexpiry'               => 'Galiojimo laikas',
+'protect_expiry_invalid'      => 'Galiojimo laikas neteisingas.',
+'protect_expiry_old'          => 'Galiojimo laikas yra praeityje.',
+'unprotectsub'                => '(Atrakinamas „$1“)',
+'confirmunprotecttext'        => 'Ar tikrai norite atrakinti šį straipsnį?',
+'confirmunprotect'            => 'Atrakinimo patvirtinimas',
+'unprotectcomment'            => 'Atrakinimo priežastis',
+'protect-unchain'             => 'Atrakinti pervardinimo teises',
+'protect-text'                => 'Čia jūs gali matyti ir keisti apsaugos lygį puslapiui <strong>$1</strong>.',
+'protect-locked-blocked'      => 'Jūs negalite keisti apsaugos lygių, kol esate užbluokuotas.
+Čia yra dabartiniai nustatymai puslapiui <strong>$1</strong>:',
+'protect-locked-dblock'       => 'Apsaugos lygiai negali būti pakeisti dėl duomenų bazės užrakinimo.
+Čia yra dabartiniai nustatymai puslapiui <strong>$1</strong>:',
+'protect-locked-access'       => 'Jūsų paskyra neturi teisių keisti puslapių apsaugos lygių.
+Čia yra dabartiniai nustatymai puslapiui <strong>$1</strong>:',
+'protect-cascadeon'           => 'Šis puslapis dabar yra apsaugotas, nes jis yra įtrauktas į {{PLURAL:$1|šį puslapį, apsaugotą|šiuos puslapius, apsaugotus}} „pakopinės apsaugos“ pasirinktimi. Jūs galite pakeisti šio puslapio apsaugos lygį, bet tai nepaveiks pakopinės apsaugos.',
+'protect-default'             => '(pagal nutylėjimą)',
+'protect-level-autoconfirmed' => 'Blokuoti neregistruotus naudotojus',
+'protect-level-sysop'         => 'Tik administratoriai',
+'protect-summary-cascade'     => 'pakopinė apsauga',
+'protect-expiring'            => 'baigia galioti $1 (UTC)',
+'protect-cascade'             => 'Pakopinė apsauga - apsaugoti visus puslapius, įtrauktus į šį puslapį.',
+'restriction-type'            => 'Leidimas',
+'restriction-level'           => 'Apribojimo lygis',
+'minimum-size'                => 'Minimalus dydis (baitais)',
+
+# Restrictions (nouns)
+'restriction-edit' => 'Redagavimas',
+'restriction-move' => 'Pervardinimas',
+
+# Restriction levels
+'restriction-level-sysop'         => 'pilnai apsaugota',
+'restriction-level-autoconfirmed' => 'pusiau apsaugota',
+'restriction-level-all'           => 'bet koks',
+
+# Undelete
+'undelete'                 => 'Atstatyti ištrintą puslapį',
+'undeletepage'             => 'Rodyti ir atkurti ištrintus puslapius',
+'viewdeletedpage'          => 'Rodyti ištrintus puslapius',
+'undeletepagetext'         => 'Žemiau išvardinti puslapiai yra ištrinti, bet dar laikomi
+archyve, todėl jie gali būti atstatyti. Archyvas gali būti periodiškai valomas.',
+'undeleteextrahelp'        => "Norėdami atkurti visą puslapį, palikite visas varneles nepažymėtas ir
+spauskite '''''Atkurti'''''. Norėdami atlikti pasirinktinį atstatymą, pažymėkite varneles tų versijų, kurias norėtumėte atstatyti, ir spauskite '''''Atkurti'''''. Paspaudus
+'''''Iš naujo''''' bus išvalytos visos varnelės bei komentaro laukas.",
+'undeleterevisions'        => '$1 {{plural:$1|versija|versijos|versijų}} suarchyvuota',
+'undeletehistory'          => 'Jei atstatysite straipsnį, istorijoje bus atstatytos visos versijos.
+Jei po ištrynimo buvo sukurtas straipsnis tokiu pačiu pavadinimu,
+atstatytos versijos atsiras ankstesnėje istorijoje, o dabartinė
+versija liks nepakeista. Atkuriant yra prarandami apribojimai failų versijoms.',
+'undeleterevdel'           => 'Atkūrimas nebus įvykdytas, jei tai nulems paskutinės puslapio versijos dalinį ištrynimą. 
+Tokiais atvejais, jums reikia atžymėti arba atslėpti naujausias ištrintas versijas.
+Failų versijos, kurių neturite teisių žiūrėti, nebus atkurtos.',
+'undeletehistorynoadmin'   => 'Šis straipsnis buvo ištrintas. Trynimo priežastis yra
+rodoma žemiau, taip pat kas redagavo puslapį
+iki trynimo. Ištrintų puslapių tekstas yra galimas tik administratoriams.',
+'undelete-revision'        => 'Ištrinta $1 versija iš $2:',
+'undeleterevision-missing' => 'Neteisinga arba dingusi versija. Jūs turbūt turite blogą nuorodą, arba versija buvo atkurta arba pašalinta iš archyvo.',
+'undeletebtn'              => 'Atkurti',
+'undeletereset'            => 'Iš naujo',
+'undeletecomment'          => 'Komentaras:',
+'undeletedarticle'         => 'atkurta „[[$1]]“',
+'undeletedrevisions'       => 'atkurta $1 {{PLURAL:$1|versija|versijos|versijų}}',
+'undeletedrevisions-files' => 'atkurta $1 {{PLURAL:$1|versija|versijos|versijų}} ir $2 {{PLURAL:$2|failas|failai|failų}}',
+'undeletedfiles'           => 'atkurta $1 {{PLURAL:$1|failas|failai|failų}}',
+'cannotundelete'           => 'Atkūrimas nepavyko; kažkas kitas pirmas galėjo atkurti puslapį.',
+'undeletedpage'            => "<big>'''$1 buvo atkurtas'''</big>
+
+Peržiūrėkite [[{{ns:special}}:Log/delete|trynimų sąrašą]], norėdami rasti paskutinių trynimų ir atkūrimų sąrašą.",
+'undelete-header'          => 'Žiūrėkite [[Special:Log/delete|trynimo istorijoje]] paskiausiai ištrintų puslapių.',
+'undelete-search-box'      => 'Ieškoti ištrintų puslapių',
+'undelete-search-prefix'   => 'Rodyti puslapius pradedant su:',
+'undelete-search-submit'   => 'Ieškoti',
+'undelete-no-results'      => 'Nebuvo rasta jokio atitinkančio puslapio ištrynimo archyve.',
+
+# Namespace form on various pages
+'namespace' => 'Vardų sritis:',
+'invert'    => 'Žymėti priešingai',
+
+# Contributions
+'contributions' => 'Naudotojo įnašas',
+'mycontris'     => 'Mano įnašas',
+'contribsub2'   => 'Naudotojo $1 ($2)',
+'nocontribs'    => 'Jokie keitimai neatitiko šių kriterijų.',
+'ucnote'        => 'Žemiau yra šio naudotojo paskutiniai <b>$1</b> keitimai per pastarąsias <b>$2</b> dienas.',
+'uclinks'       => 'Rodyti paskutinius $1 pakeitimus; rodyti paskutines $2 dienas.',
+'uctop'         => ' (paskutinis)',
+
+'sp-contributions-newest'      => 'Naujausi',
+'sp-contributions-oldest'      => 'Seniausi',
+'sp-contributions-newer'       => '$1 naujesnių',
+'sp-contributions-older'       => '$1 senesnių',
+'sp-contributions-newbies'     => 'Rodyti tik naujų paskyrų įnašus',
+'sp-contributions-newbies-sub' => 'Naujoms paskyroms',
+'sp-contributions-blocklog'    => 'Blokavimų istorija',
+'sp-contributions-search'      => 'Ieškoti įnašo',
+'sp-contributions-username'    => 'IP adresas arba naudotojo vardas:',
+'sp-contributions-submit'      => 'Ieškoti',
+
+'sp-newimages-showfrom' => 'Rodyti naujus paveikslėlius pradedant nuo $1',
+
+# What links here
+'whatlinkshere'      => 'Susiję puslapiai',
+'notargettitle'      => 'Nenurodytas objektas',
+'notargettext'       => 'Jūs nenurodėte norimo puslapio ar naudotojo,
+kuriam įvykdyti šią funkciją.',
+'linklistsub'        => '(Nuorodų sąrašas)',
+'linkshere'          => "Šie puslapiai rodo į '''[[:$1]]''':",
+'nolinkshere'        => "Į '''[[:$1]]''' nuorodų nėra.",
+'nolinkshere-ns'     => "Nurodytoje vardų srityje nei vienas puslapis nenurodo į '''[[:$1]]'''.",
+'isredirect'         => 'nukreipiamasis puslapis',
+'istemplate'         => 'įterpimas',
+'whatlinkshere-prev' => '$1 {{PLURAL:$1|ankstesnis|ankstesni}}',
+'whatlinkshere-next' => '$1 {{PLURAL:$1|kitas|kiti}}',
+
+# Block/unblock
+'blockip'                     => 'Blokuoti naudotoją',
+'blockiptext'                 => 'Naudokite šią formą norėdami uždrausti rašymo teises nurodytui IP adresui ar naudotojui. Tai turėtų būti atliekama tam, kad sustabdytumėte vandalizmą, ir pagal [[{{MediaWiki:policy-url}}|politiką]].
+Žemiau nurodykite tikslią priežastį (pavyzdžiui, nurodydami sugadintus puslapius).',
+'ipaddress'                   => 'IP adresas',
+'ipadressorusername'          => 'IP adresas arba naudotojo vardas',
+'ipbexpiry'                   => 'Galiojimo laikas',
+'ipbreason'                   => 'Priežastis',
+'ipbreasonotherlist'          => 'Kita priežastis',
+'ipbreason-dropdown'          => '
+*Bendrosios blokavimo priežastys
+** Melagingos informacijos įterpimas
+** Turinio šalinimas iš puslapių
+** Kitų svetainių reklamavimas
+** Nesąmonių/bet ko įterpimas į puslapius
+** Gąsdinimai/Įžeidinėjimai
+** Piktnaudžiavimas keliomis paskyromis
+** Nepriimtinas naudotojo vardas',
+'ipbanononly'                 => 'Blokuoti tik anoniminius naudotojus',
+'ipbcreateaccount'            => 'Neleisti kurti paskyrų',
+'ipbenableautoblock'          => 'Automatiškai blokuoti šio naudotojo paskiausiai naudotą IP adresą, bei bet kokius vėlesnius IP adresus, iš kurių jie mėgina redaguoti',
+'ipbsubmit'                   => 'Blokuoti šį naudotoją',
+'ipbother'                    => 'Kitoks laikas',
+'ipboptions'                  => '2 valandos:2 hours,1 diena:1 day,3 dienos:3 days,1 savaitė:1 week,2 savaitės:2 weeks,1 mėnesis:1 month,3 mėnesiai:3 months,6 mėnesiai:6 months,1 metai:1 year,neribotai:infinite',
+'ipbotheroption'              => 'kita',
+'ipbotherreason'              => 'Kita/papildoma priežastis',
+'ipbhidename'                 => 'Slėpti naudotojo vardą/IP adresą iš blokavimų istorijos, aktyvių blokavimų sąrašo ir naudotojų sąrašo',
+'badipaddress'                => 'Neleistinas IP adresas',
+'blockipsuccesssub'           => 'Užblokavimas pavyko',
+'blockipsuccesstext'          => '[[{{ns:Special}}:Contributions/$1|$1]] buvo užblokuotas.
+<br />Aplankykite [[{{ns:special}}:Ipblocklist|IP blokavimų istoriją]] norėdami jį peržiūrėti.',
+'ipb-edit-dropdown'           => 'Redaguoti blokavimų priežastis',
+'ipb-unblock-addr'            => 'Atblokuoti $1',
+'ipb-unblock'                 => 'Atblokuoti naudotojo vardą arba IP adresą',
+'ipb-blocklist-addr'          => 'Rodyti egzistuojančius $1 blokavimus',
+'ipb-blocklist'               => 'Rodyti egzistuončius blokavimus',
+'unblockip'                   => 'Atblokuoti naudotoją',
+'unblockiptext'               => 'Naudokite šią formą, kad atkurtumėte rašymo teises
+ankščiau užblokuotam IP adresui ar naudotojui.',
+'ipusubmit'                   => 'Atblokuoti šį adresą',
+'unblocked'                   => '[[{{ns:user}}:$1|$1]] buvo atblokuotas',
+'ipblocklist'                 => 'Blokuotų IP adresų bei naudotojų sąrašas',
+'ipblocklist-submit'          => 'Ieškoti',
+'blocklistline'               => '$1, $2 blokavo $3 ($4)',
+'infiniteblock'               => 'neribotai',
+'expiringblock'               => 'baigia galioti $1',
+'anononlyblock'               => 'tik anonimai',
+'noautoblockblock'            => 'automatinis blokavimas išjungtas',
+'createaccountblock'          => 'paskyrų kūrimas uždraustas',
+'ipblocklistempty'            => 'Blokavimų istorija tuščia arba prašomas IP adresas/naudotojo vardas nėra užblokuotas.',
+'blocklink'                   => 'blokuoti',
+'unblocklink'                 => 'atblokuoti',
+'contribslink'                => 'įnašas',
+'autoblocker'                 => 'Jūs buvote automatiškai užblokuotas, nes jūsų IP neseniai naudojo „[[{{ns:user}}:$1|$1]]“. Duota priežastis naudotojo $1 užblokavimui: „$2“.',
+'blocklogpage'                => 'Blokavimų istorija',
+'blocklogentry'               => 'blokavo „[[$1]]“, blokavimo laikas - $2 $3',
+'blocklogtext'                => 'Čia yra naudotojų blokavimo ir atblokavimo sąrašas. Automatiškai blokuoti IP adresai nėra išvardinti. Jei norite pamatyti dabar blokuojamus adresus, žiūrėkite [[{{ns:special}}:Ipblocklist|IP blokavimų istoriją]].',
+'unblocklogentry'             => 'atblokavo $1',
+'block-log-flags-anononly'    => 'tik anoniminiai naudotojai',
+'block-log-flags-nocreate'    => 'paskyrų kūrimas išjungtas',
+'block-log-flags-noautoblock' => 'automatinis blokiklis išjungtas',
+'range_block_disabled'        => 'Administratoriaus galimybė kurti intevalinius blokus yra išjungta.',
+'ipb_expiry_invalid'          => 'Galiojimo laikas neleistinas.',
+'ipb_already_blocked'         => '„$1“ jau užblokuotas',
+'ip_range_invalid'            => 'Neleistina IP sritis.',
+'proxyblocker'                => 'Tarpinių serverių blokuotojas',
+'ipb_cant_unblock'            => 'Klaida: Blokavimo ID $1 nerastas. Galbūt jis jau atblokuotas.',
+'proxyblockreason'            => 'Jūsų IP adresas yra užblokuotas, nes jis yra atvirasis tarpinis serveris. Prašome susisiekti su savo interneto paslaugų tiekėju ar technine pagalba ir praneškite jiems apie šią svarbią saugumo problemą.',
+'proxyblocksuccess'           => 'Atlikta.',
+'sorbs'                       => 'DNSBL',
+'sorbsreason'                 => 'Jūsų IP adresas yra įtrauktas į atvirųjų tarpinių serverių DNSBL sąrašą, naudojamą šios svetainės.',
+'sorbs_create_account_reason' => 'Jūsų IP adresas yra įtrauktas į atvirųjų tarpinių serverių DNSBL sąrašą, naudojamą šios svetainės. Jūs negalite sukurti paskyros',
+
+# Developer tools
+'lockdb'              => 'Užrakinti duomenų bazę',
+'unlockdb'            => 'Atrakinti duomenų bazę',
+'lockdbtext'          => 'Užrakinus duomenų bazę sustabdys galimybę visiems
+naudotojams redaguoti puslapius, keisti jų nustatymus, keisti jų stebimųjų sąrašą bei
+kitus dalykus, reikalaujančius pakeitimų duomenų bazėje.
+Prašome patvirtinti, kad tai, ką ketinate padaryti, ir kad jūs
+atrakinsite duomenų bazę, kai techninė profilaktika bus baigta.',
+'unlockdbtext'        => 'Atrakinus duomenų bazę grąžins galimybę visiems
+naudotojams redaguoti puslapius, keisti jų nustatymus, keisti jų stebimųjų sąrašą bei
+kitus dalykus, reikalaujančius pakeitimų duomenų bazėje.
+Prašome patvirtinti tai, ką ketinate padaryti.',
+'lockconfirm'         => 'Taip, aš tikrai noriu užrakinti duomenų bazę.',
+'unlockconfirm'       => 'Taip, aš tikrai noriu atrakinti duomenų bazę.',
+'lockbtn'             => 'Užrakinti duomenų bazę',
+'unlockbtn'           => 'Atrakinti duomenų bazę',
+'locknoconfirm'       => 'Jūs neuždėjote patvirtinimo varnelės.',
+'lockdbsuccesssub'    => 'Duomenų bazės užrakinimas pavyko',
+'unlockdbsuccesssub'  => 'Duomenų bazės užrakinimas pašalintas',
+'lockdbsuccesstext'   => 'Duomenų bazė buvo užrakinta.
+<br />Nepamirškite [[Special:Unlockdb|pašalinti užraktą]], kai techninė profilaktika bus baigta.',
+'unlockdbsuccesstext' => 'Duomenų bazė buvo atrakinta.',
+'lockfilenotwritable' => 'Duomenų bazės užrakto failas nėra įrašomas. Norint užrakinti ar atrakinti duomenų bazę, tinklapio serveris privalo turėti įrašymo teises šiam failui.',
+'databasenotlocked'   => 'Duomenų bazė neužrakinta.',
+
+# Move page
+'movepage'                => 'Puslapio pervadinimas',
+'movepagetext'            => "Naudodamiesi žemiau pateikta forma, pervadinsite puslapį
+neprarasdami jo istorijos.
+Senasis pavadinimas taps nukreipiamuoju - rodys į naująjį.
+Nuorodos į senąjį puslapį nebus automatiškai pakeistos, todėl būtinai
+patikrinkite ar nesukūrėte dvigubų ar
+neveikiančių nukreipimų.
+Jūs esate atsakingas už tai, kad nuorodos rodytų į ten, kur ir norėta.
+
+Primename, kad puslapis '''nebus''' pervadintas, jei jau yra puslapis
+nauju pavadinimu, nebent tas puslapis tuščias arba nukreipiamasis ir
+neturi redagavimo istorijos. Taigi, jūs galite pervadinti puslapį
+seniau naudotu vardu, jei prieš tai jis buvo per klaidą pervadintas,
+o egzistuojančių puslapių sugadinti negalite.
+
+<b>DĖMESIO!</b>
+Jei pervadinate populiarų puslapį, tai gali sukelti nepageidaujamų
+šalutinių efektų, dėl to šį veiksmą vykdykite tik įsitikinę,
+kad suprantate visas pasekmes.",
+'movepagetalktext'        => "Susietas aptarimo puslapis bus automatiškai perkeltas kartu su juo, '''išskyrus:''':
+*Puslapis nauju pavadinimu jau turi netuščią aptarimo puslapį, arba
+*Paliksite žemiau esančia varnelę nepažymėtą.
+
+Šiais atvejais jūs savo nuožiūra turite perkelti arba apjungti aptarimo puslapį.",
+'movearticle'             => 'Puslapio pervadinimas',
+'movenologin'             => 'Neprisijungęs',
+'movenologintext'         => 'Norėdami pervadinti puslapį, turite būti užsiregistravęs naudotojas ir būti  [[{{ns:special}}:Userlogin|prisijungęs]].',
+'newtitle'                => 'Naujas pavadinimas',
+'move-watch'              => 'Stebėti šį puslapį',
+'movepagebtn'             => 'Pervadinti puslapį',
+'pagemovedsub'            => 'Pervadinta sėkmingai',
+'pagemovedtext'           => 'Puslapis „[[$1]]“ pervadintas į „[[$2]]“.',
+'articleexists'           => 'Puslapis tokiu pavadinimu jau egzistuoja
+arba pasirinktas vardas yra neteisingas.
+Pasirinkite kitą pavadinimą.',
+'talkexists'              => "'''Pats puslapis buvo sėkmingai pervadintas, bet aptarimų puslapis nebuvo perkeltas, kadangi naujo
+pavadinimo straipsnis jau turėjo aptarimų puslapį.
+Prašome sujungti šiuos puslapius.'''",
+'movedto'                 => 'pervardintas į',
+'movetalk'                => 'Perkelti susijusį aptarimo puslapį.',
+'talkpagemoved'           => 'Susietas aptarimo puslapis buvo taip pat perkeltas.',
+'talkpagenotmoved'        => 'Susietas aptarimo puslapis <strong>nebuvo</strong> perkeltas.',
+'1movedto2'               => '[[$1]] pervadintas į [[$2]]',
+'1movedto2_redir'         => '[[$1]] pervadintas į [[$2]] (anksčiau buvo nukreipiamasis)',
+'movelogpage'             => 'Pervardinimų istorija',
+'movelogpagetext'         => 'Pervardintų puslapių sąrašas.',
+'movereason'              => 'Priežastis',
+'revertmove'              => 'atmesti',
+'delete_and_move'         => 'Ištrinti ir perkelti',
+'delete_and_move_text'    => '==Reikalingas ištrynimas==
+
+Paskirties straipsnis „[[$1]]“ jau yra. Ar norite jį ištrinti, kad galėtumėte pervardinti?',
+'delete_and_move_confirm' => 'Taip, trinti puslapį',
+'delete_and_move_reason'  => 'Ištrinta dėl perkėlimo',
+'selfmove'                => 'Šaltinio ir paskirties pavadinimai yra tokie patys; negalima pervardinti puslapio į save.',
+'immobile_namespace'      => 'Šaltinio arba paskirties pavadinimas yra specialiojo tipo; negalima pervadinti iš ir į tą vardų sritį.',
+
+# Export
+'export'            => 'Eksportuoti puslapius',
+'exporttext'        => 'Galite eksportuoti vieno puslapio tekstą ir istoriją ar kelių puslapių vienu metu
+tame pačiame XML atsakyme. Šie puslapiai galės būti importuojami į kitą
+projektą, veikiantį MediaWiki pagrindu, per [[{{ns:special}}:Import|importo puslapį]].
+
+Norėdami eksportuoti puslapius, įveskite pavadinimus žemiau esančiame tekstiniame lauke
+po vieną pavadinimą eilutėje, taip pat pasirinkite ar norite eksportuoti ir istoriją
+ar tik dabartinę versiją su paskutinio redagavimo informacija.
+
+Pastaruoju atveju, jūs taip pat galite naudoti nuorodą, pvz. [[{{ns:Special}}:Export/{{MediaWiki:mainpage}}]] straipsniui [[{{MediaWiki:mainpage}}]].',
+'exportcuronly'     => 'Eksportuoti tik dabartinę versiją, neįtraukiant istorijos',
+'exportnohistory'   => "----
+'''Pastaba:''' Pilnos puslapių istorijos eksportavimas naudojantis šia forma yra išjungtas dėl spartos.",
+'export-submit'     => 'Ekportuoti',
+'export-addcattext' => 'Pridėti puslapius iš kategorijos:',
+'export-addcat'     => 'Pridėti',
+
+# Namespace 8 related
+'allmessages'               => 'Sistemos pranešimų sąrašas',
+'allmessagesname'           => 'Pavadinimas',
+'allmessagesdefault'        => 'Pradinis tekstas',
+'allmessagescurrent'        => 'Dabartinis tekstas',
+'allmessagestext'           => 'Čia pateikiamas sisteminių pranešimų sąrašas, esančių MediaWiki vardų srityje.',
+'allmessagesnotsupportedUI' => 'Jūsų pasirinkta kalba <b>$1</b> nėra palaikoma puslapyje {{ns:special}}:Allmessages šioje svetainėje.',
+'allmessagesnotsupportedDB' => "'''{{ns:special}}:Allmessages''' nepalaikoma, nes nustatymas '''\$wgUseDatabaseMessages''' yra išjungtas.",
+'allmessagesfilter'         => 'Tekstų pavadinimo filtras:',
+'allmessagesmodified'       => 'Rodyti tik pakeistus',
+
+# Thumbnails
+'thumbnail-more'           => 'Padidinti',
+'missingimage'             => '<b>Trūkstamas paveikslėlis</b><br /><i>$1</i>',
+'filemissing'              => 'Dingęs failas',
+'thumbnail_error'          => 'Klaida kuriant sumažintą paveikslėlį: $1',
+'djvu_page_error'          => 'DjVu puslapis nepasiekiamas',
+'djvu_no_xml'              => 'Nepavyksta gauti XML DjVu failui',
+'thumbnail_invalid_params' => 'Neleistini miniatiūros parametrai',
+'thumbnail_dest_directory' => 'Nepavyksta sukurti paskirties aplanko',
+
+# Special:Import
+'import'                     => 'Importuoti puslapius',
+'importinterwiki'            => 'Tarpprojektinis importas',
+'import-interwiki-text'      => 'Pasirinkite projektą ir puslapio pavadinimą importavimui.
+Versijų datos ir redaktorių vardai bus išlaikyti.
+Visi tarpprojektiniai importo veiksmai yra registruojami  [[Special:Log/import|importo istorijoje]].',
+'import-interwiki-history'   => 'Kopijuoti visas istorijos versijas šiam puslapiui',
+'import-interwiki-submit'    => 'Importuoti',
+'import-interwiki-namespace' => 'Perkelti puslapius į vardų sritį:',
+'importtext'                 => 'Prašome eksportuoti failą iš projekto-šaltinio naudojantis {{ns:special}}:Export priemone, išsaugokite jį savo diske ir įkelkite jį čia.',
+'importstart'                => 'Imporuojami puslapiai...',
+'import-revision-count'      => '$1 {{PLURAL:$1|versija|versijos|versijų}}',
+'importnopages'              => 'Nėra puslapių importavimui.',
+'importfailed'               => 'Importavimas nepavyko: $1',
+'importunknownsource'        => 'Nežinomas importo šaltinio tipas',
+'importcantopen'             => 'Nepavyksta atverti importo failo',
+'importbadinterwiki'         => 'Bloga tarpprojektinė nuoroda',
+'importnotext'               => 'Tuščia arba jokio teksto',
+'importsuccess'              => 'Importas pavyko!',
+'importhistoryconflict'      => 'Yra konfliktuojanti istorijos versija (galbūt šis puslapis buvo importuotas anksčiau)',
+'importnosources'            => 'Nenustatyti transwiki importo šaltiniai, o tiesioginis praeities įkėlimas uždraustas.',
+'importnofile'               => 'Nebuvo įkeltas joks importo failas.',
+'importuploaderror'          => 'Importo failo įkelimas nepavyko; galbūt failas yra didesnis nei leidžiamas įkėlimo dydis.',
+
+# Import log
+'importlogpage'                    => 'Importo istorija',
+'importlogpagetext'                => 'Administraciniai puslapių importai su keitimų istorija iš kitų wiki projektų.',
+'import-logentry-upload'           => 'importuota $1 įkėliant failą',
+'import-logentry-upload-detail'    => '$1 {{plural:$1|keitimas|keitimai|keitimų}}',
+'import-logentry-interwiki'        => 'tarpprojektinis $1',
+'import-logentry-interwiki-detail' => '$1 {{plural:$1|keitimas|keitimai|keitimų}} iš $2',
+
+# Tooltip help for the actions
+'tooltip-pt-userpage'             => 'Mano naudotojo puslapis',
+'tooltip-pt-anonuserpage'         => 'Naudotojo puslapis jūsų IP adresui',
+'tooltip-pt-mytalk'               => 'Mano aptarimo puslapis',
+'tooltip-pt-anontalk'             => 'Pakeitimų aptarimas, darytus naudojant šį IP adresą',
+'tooltip-pt-preferences'          => 'Mano nustatymai',
+'tooltip-pt-watchlist'            => 'Puslapių sąrašas, kuriuos jūs pasirinkote stebėti.',
+'tooltip-pt-mycontris'            => 'Mano darytų keitimų sąrašas',
+'tooltip-pt-login'                => 'Rekomenduojame prisijungti, nors tai nėra privaloma.',
+'tooltip-pt-anonlogin'            => 'Rekomenduojame prisijungti, nors tai nėra privaloma.',
+'tooltip-pt-logout'               => 'Atsijungti',
+'tooltip-ca-talk'                 => 'Puslapio turinio aptarimas',
+'tooltip-ca-edit'                 => 'Jūs galite redaguoti šį puslapį. Nepamirškite paspausti peržiūros mygtuka prieš išsaugodami.',
+'tooltip-ca-addsection'           => 'Pridėti komentarą į aptarimą.',
+'tooltip-ca-viewsource'           => 'Puslapis yra užrakintas. Galite pažiūrėti turinį.',
+'tooltip-ca-history'              => 'Ankstesnės puslapio versijos.',
+'tooltip-ca-protect'              => 'Užrakinti šį puslapį',
+'tooltip-ca-delete'               => 'Ištrinti šį puslapį',
+'tooltip-ca-undelete'             => 'Atkurti puslapį su visais darytais keitimais',
+'tooltip-ca-move'                 => 'Pervadinti puslapį',
+'tooltip-ca-watch'                => 'Pridėti puslapį į stebimųjų sąrašą',
+'tooltip-ca-unwatch'              => 'Pašalinti puslapį iš stebimųjų sąrašo',
+'tooltip-search'                  => 'Ieškoti šiame projekte',
+'tooltip-p-logo'                  => 'Pradinis puslapis',
+'tooltip-n-mainpage'              => 'Eiti į pradinį puslapį',
+'tooltip-n-portal'                => 'Apie projektą, ką galima daryti, kur ką rasti',
+'tooltip-n-currentevents'         => 'Raskite naujausią informaciją',
+'tooltip-n-recentchanges'         => 'Paskutinių keitimų sąrašas šiame projekte.',
+'tooltip-n-randompage'            => 'Atidaryti atsitiktinį puslapį',
+'tooltip-n-help'                  => 'Vieta, kur rasite rūpimus atsakymus.',
+'tooltip-n-sitesupport'           => 'Padėkite mums',
+'tooltip-t-whatlinkshere'         => 'Puslapių sąrašas, rodančių į čia',
+'tooltip-t-recentchangeslinked'   => 'Paskutiniai keitimai straipsniuose, pasiekiamuose iš šio straipsnio',
+'tooltip-feed-rss'                => 'Šio puslapio RSS kanalas',
+'tooltip-feed-atom'               => 'Šio puslapio Atom kanalas',
+'tooltip-t-contributions'         => 'Rodyti šio naudotojo keitimų sąrašą',
+'tooltip-t-emailuser'             => 'Siųsti laišką šiam naudotojui',
+'tooltip-t-upload'                => 'Įdėti paveikslėlius ar media failus',
+'tooltip-t-specialpages'          => 'Specialiųjų puslapių sąrašas',
+'tooltip-ca-nstab-main'           => 'Rodyti puslapio turinį',
+'tooltip-ca-nstab-user'           => 'Rodyti naudotojo puslapį',
+'tooltip-ca-nstab-media'          => 'Rodyti media puslapį',
+'tooltip-ca-nstab-special'        => 'Šis puslapis yra specialusis - jo negalima redaguoti.',
+'tooltip-ca-nstab-project'        => 'Rodyti projekto puslapį',
+'tooltip-ca-nstab-image'          => 'Rodyti paveikslėlio puslapį',
+'tooltip-ca-nstab-mediawiki'      => 'Rodyti sisteminį pranešimą',
+'tooltip-ca-nstab-template'       => 'Rodyti šabloną',
+'tooltip-ca-nstab-help'           => 'Rodyti pagalbos puslapį',
+'tooltip-ca-nstab-category'       => 'Rodyti kategorijos puslapį',
+'tooltip-minoredit'               => 'Pažymėti keitimą kaip smulkų',
+'tooltip-save'                    => 'Išsaugoti pakeitimus',
+'tooltip-preview'                 => 'Pakeitimų peržiūra, prašome pažiūrėti prieš išsaugant!',
+'tooltip-diff'                    => 'Rodo, kokius pakeitimus padarėte tekste.',
+'tooltip-compareselectedversions' => 'Žiūrėti dviejų pasirinktų puslapio versijų skirtumus.',
+'tooltip-watch'                   => 'Pridėti šį puslapį į stebimųjų sąrašą',
+'tooltip-recreate'                => 'Atkurti puslapį nepaisant to, kad jis buvo ištrintas',
+
+# Stylesheets
+'common.css'   => '/** Čia įdėtas CSS bus taikomas visoms išvaizdoms */',
+'monobook.css' => '/* Čia įdėtas CSS bus rodomas Monobook išvaizdos naudotojams */',
+
+# Scripts
+'common.js'   => '/* Bet koks čia parašytas JavaScript bus paleistas kieviename puslapyje kievienam naudotojui. */',
+'monobook.js' => '/* Nebenaudojama; naudokite [[MediaWiki:common.js]] */',
+
+# Metadata
+'nodublincore'      => 'Dublin Core RDF metaduomenys yra išjungti šiame serveryje.',
+'nocreativecommons' => 'Creative Commons RDF metaduomenys yra išjungti šiame serveryje.',
+'notacceptable'     => 'Projekto serveris negali pateikti duomenų formatu, kurį jūsų klientas galėtų skaityti.',
+
+# Attribution
+'anonymous'        => 'neregistruotų {{SITENAME}} naudotojų',
+'siteuser'         => '{{SITENAME}} naudotojas $1',
+'lastmodifiedatby' => 'Šį puslapį paskutinį kartą redagavo $3 $2, $1.', # $1 date, $2 time, $3 user
+'and'              => 'ir',
+'othercontribs'    => 'Paremta $1 darbu.',
+'others'           => 'kiti',
+'siteusers'        => '{{SITENAME}} naudotojas(-ai) $1',
+'creditspage'      => 'Puslapio kūrėjai',
+'nocredits'        => 'Kūrėjų informacija negalima šiam puslapiui.',
+
+# Spam protection
+'spamprotectiontitle'    => 'Priešreklaminis filtras',
+'spamprotectiontext'     => 'Puslapis, kurį norėjote išsaugoti buvo užblokuotas priešreklaminio filtro. Tai turbūt sukėlė nuoroda į kitą svetainę.',
+'spamprotectionmatch'    => 'Šis tekstas buvo atpažintas priešreklaminio filtro: $1',
+'subcategorycount'       => 'Kategorijoje yra $1 {{PLURAL:$1|subkategorija|subkategorijos|subkategorijų}}',
+'categoryarticlecount'   => 'Kategorijoje yra $1 {{plural:$1|straipsnis|straipsniai|straipsnių}}',
+'category-media-count'   => 'Kategorijoje yra $1 {{PLURAL:$1|failas|failai|failų}}.',
+'listingcontinuesabbrev' => ' tęs.',
+'spambot_username'       => 'MediaWiki reklamų šalinimas',
+'spam_reverting'         => 'Atkuriama į ankstesnę versiją, neturinčios nuorodų į $1',
+'spam_blanking'          => 'Visos versijos turėjo nuorodų į $1, išvaloma',
+
+# Info page
+'infosubtitle'   => 'Puslapio informacija',
+'numedits'       => 'Keitimų skaičius (straipsnis): $1',
+'numtalkedits'   => 'Keitimų skaičius (aptarimo puslapis): $1',
+'numwatchers'    => 'Stebinčiųjų skaičius: $1',
+'numauthors'     => 'Skirtingų autorių skaičius (straipsnis): $1',
+'numtalkauthors' => 'Skirtingų autorių skaičius (aptarimo puslapis): $1',
+
+# Math options
+'mw_math_png'    => 'Visada formuoti PNG',
+'mw_math_simple' => 'HTML paprastais atvejais, kitaip - PNG',
+'mw_math_html'   => 'HTML kai įmanoma, kitaip - PNG',
+'mw_math_source' => 'Palikti TeX formatą (tekstinėms naršyklėms)',
+'mw_math_modern' => 'Rekomenduojama modernioms naršyklėms',
+'mw_math_mathml' => 'MathML jei įmanoma (eksperimentinis)',
+
+# Patrolling
+'markaspatrolleddiff'                 => 'Žymėti, kad patikrinta',
+'markaspatrolledtext'                 => 'Pažymėti, kad straipsnis patikrintas',
+'markedaspatrolled'                   => 'Pažymėtas kaip patikrintas',
+'markedaspatrolledtext'               => 'Pasirinkta versija sėkmingai pažymėta kaip patikrinta',
+'rcpatroldisabled'                    => 'Paskutinių keitimų tikrinimas išjungtas',
+'rcpatroldisabledtext'                => 'Paskutinių keitimų tikrinimo funkcija šiuo metu išjungta.',
+'markedaspatrollederror'              => 'Negalima pažymėti, kad patikrinta',
+'markedaspatrollederrortext'          => 'Jums reikia nurodyti versiją, kurią pažymėti kaip patikrintą.',
+'markedaspatrollederror-noautopatrol' => 'Jums neleidžiama pažymėti savo paties keitimų kaip patikrintų.',
+
+# Patrol log
+'patrol-log-page' => 'Patikrinimo istorija',
+'patrol-log-line' => 'Puslapio „$2“ $1 pažymėta kaip patikrinta $3',
+'patrol-log-auto' => '(automatiškai)',
+'patrol-log-diff' => 'versija $1',
+
+# Image deletion
+'deletedrevision' => 'Ištrinta sena versija $1.',
+
+# Browsing diffs
+'previousdiff' => '← Ankstesnis keitimas',
+'nextdiff'     => 'Vėlesnis pakeitimas →',
+
+# Media information
+'mediawarning'         => "'''Dėmesio''': Šis failas gali turėti kenksmingą kodą, jį paleidus jūsų sistema gali būti pažeista.<hr />",
+'imagemaxsize'         => 'Riboti paveikslėlių dydį jų aprašymo puslapyje iki:',
+'thumbsize'            => 'Sumažintų paveikslėlių dydis:',
+'file-info'            => '(failo dydis: $1, MIME tipas: $2)',
+'file-info-size'       => '($1 × $2 taškų, failo dydis: $3, MIME tipas: $4)',
+'file-nohires'         => '<small>Geresnė raiška negalima.</small>',
+'file-svg'             => '<small>Tai vektorinis paveikslėlis, neprarandantis duomenų keičiant dydį. Pagrindinis dydis: $1 × $2 taškų.</small>',
+'show-big-image'       => 'Pilna raiška',
+'show-big-image-thumb' => '<small>Šios peržiūros dydis: $1 × $2 taškų</small>',
+
+'newimages'    => 'Naujausių failų galerija',
+'showhidebots' => '($1 robotus)',
+'noimages'     => 'Nėra ką parodyti.',
+
+'passwordtooshort' => 'Jūsų slaptažodis yra neleistinas arba per trumpas. Jis turi būti bent $1 simbolių ilgio ir skirtis nuo jūsų naudotojo vardo.',
+
+# Metadata
+'metadata'          => 'Metaduomenys',
+'metadata-help'     => 'Šiame faile yra papildomos informacijos, tikriausiai pridėtos skaitmeninės kameros ar skaitytuvo, naudoto jam sukurti ar perkelti į skaitmeninį formatą. Jei failas buvo pakeistas iš pradinės versijos, kai kurios detalės gali nepilnai atspindėti naują failą.',
+'metadata-expand'   => 'Rodyti išplėstinę informaciją',
+'metadata-collapse' => 'Slėpti išplėstinę informaciją',
+'metadata-fields'   => 'EXIF metaduomenų laukai, nurodyti šiame pranešime, bus įtraukti į paveikslėlio puslapį, kai metaduomenų lentelė bus suskleista. Pagal nutylėjimą kiti laukai bus paslėpti.
+* make
+* model
+* datetimeoriginal
+* exposuretime
+* fnumber
+* focallength',
+
+# EXIF tags
+'exif-imagewidth'                  => 'Plotis',
+'exif-imagelength'                 => 'Aukštis',
+'exif-bitspersample'               => 'Bitai komponente',
+'exif-compression'                 => 'Suspaudimo tipas',
+'exif-photometricinterpretation'   => 'Taškų struktūra',
+'exif-orientation'                 => 'Pasukimas',
+'exif-samplesperpixel'             => 'Komponentų skaičius',
+'exif-planarconfiguration'         => 'Duomenų išdėstymas',
+'exif-ycbcrsubsampling'            => 'Y iki C atrankos santykis',
+'exif-ycbcrpositioning'            => 'Y ir C pozicija',
+'exif-xresolution'                 => 'Horizontali raiška',
+'exif-yresolution'                 => 'Vertikali raiška',
+'exif-resolutionunit'              => 'X ir Y raiškos matavimo vienetai',
+'exif-stripoffsets'                => 'Paveikslėlio duomenų vieta',
+'exif-rowsperstrip'                => 'Eilių skaičius juostoje',
+'exif-stripbytecounts'             => 'Baitai suspaustje juostoje',
+'exif-jpeginterchangeformat'       => 'JPEG SOI pozicija',
+'exif-jpeginterchangeformatlength' => 'JPEG duomenų baitai',
+'exif-transferfunction'            => 'Perkėlimo funkcija',
+'exif-whitepoint'                  => 'Balto taško chromatiškumas',
+'exif-primarychromaticities'       => 'Pagrindinių spalvų chromiškumas',
+'exif-ycbcrcoefficients'           => 'Spalvų pristatym matricos matricos koeficientai',
+'exif-referenceblackwhite'         => 'Juodos ir baltos poros nuorodos reikšmės',
+'exif-datetime'                    => 'Failo keitimo data ir laikas',
+'exif-imagedescription'            => 'Paveikslėlio pavadinimas',
+'exif-make'                        => 'Kameros gamintojas',
+'exif-model'                       => 'Kameros modelis',
+'exif-software'                    => 'Naudota programinė įranga',
+'exif-artist'                      => 'Autorius',
+'exif-copyright'                   => 'Autorystės teisių savininkas',
+'exif-exifversion'                 => 'Exif versija',
+'exif-flashpixversion'             => 'Palaikoma Flashpix versija',
+'exif-colorspace'                  => 'Spalvų pristatymas',
+'exif-componentsconfiguration'     => 'kiekvieno komponento reikšmė',
+'exif-compressedbitsperpixel'      => 'Paveikslėlio suspaudimo režimas',
+'exif-pixelydimension'             => 'Leistinas paveikslėlio plotis',
+'exif-pixelxdimension'             => 'Leistinas paveikslėlio aukštis',
+'exif-makernote'                   => 'Gamintojo pastabos',
+'exif-usercomment'                 => 'Naudotojo komentarai',
+'exif-relatedsoundfile'            => 'Susijusi garso byla',
+'exif-datetimeoriginal'            => 'Duomenų generavimo data ir laikas',
+'exif-datetimedigitized'           => 'Pervedimo į skaitmeninį formatą data ir laikas',
+'exif-subsectime'                  => 'Datos ir laiko sekundės dalys',
+'exif-subsectimeoriginal'          => 'Duomenų generavimo datos ir laiko sekundės dalys',
+'exif-subsectimedigitized'         => 'Pervedimo į skaitmeninį formatą datos ir laiko sekundės dalys',
+'exif-exposuretime'                => 'Išlaikymo laikas',
+'exif-exposuretime-format'         => '$1 sek. ($2)',
+'exif-fnumber'                     => 'F numeris',
+'exif-fnumber-format'              => 'f/$1',
+'exif-exposureprogram'             => 'Išlaikymo programa',
+'exif-spectralsensitivity'         => 'Spektrinis jautrumas',
+'exif-isospeedratings'             => 'ISO greitis',
+'exif-oecf'                        => 'Optoelektronikos konversijos daugiklis',
+'exif-shutterspeedvalue'           => 'Užrakto greitis',
+'exif-aperturevalue'               => 'Diafragma',
+'exif-brightnessvalue'             => 'Šviesumas',
+'exif-exposurebiasvalue'           => 'Išlaikymo paklaida',
+'exif-maxaperturevalue'            => 'Mažiausias lešio F numeris',
+'exif-subjectdistance'             => 'Objekto atstumas',
+'exif-meteringmode'                => 'Matavimo režimas',
+'exif-lightsource'                 => 'Šviesos šaltinis',
+'exif-flash'                       => 'Blykstė',
+'exif-focallength'                 => 'Židinio nuotolis',
+'exif-focallength-format'          => '$1 mm',
+'exif-subjectarea'                 => 'Objekto zona',
+'exif-flashenergy'                 => 'Blykstės energija',
+'exif-spatialfrequencyresponse'    => 'Erdvės dažnio atsakas',
+'exif-focalplanexresolution'       => 'Židinio projekcijos X raiška',
+'exif-focalplaneyresolution'       => 'Židinio projekcijos Y raiška',
+'exif-focalplaneresolutionunit'    => 'Židinio projekcijos raiškos matavimo vienetai',
+'exif-subjectlocation'             => 'Objekto vieta',
+'exif-exposureindex'               => 'Išlaikymo indeksas',
+'exif-sensingmethod'               => 'Jutimo režimas',
+'exif-filesource'                  => 'Failo šaltinis',
+'exif-scenetype'                   => 'Scenos tipas',
+'exif-cfapattern'                  => 'CFA raštas',
+'exif-customrendered'              => 'Pasirinktinis vaizdo apdorojimas',
+'exif-exposuremode'                => 'Išlaikymo režimas',
+'exif-whitebalance'                => 'Baltumo balansas',
+'exif-digitalzoomratio'            => 'Skaitmeninio priartinimo koeficientas',
+'exif-focallengthin35mmfilm'       => 'Židinio nuotolis 35 mm juostoje',
+'exif-scenecapturetype'            => 'Scenos fiksavimo tipas',
+'exif-gaincontrol'                 => 'Scenos kontrolė',
+'exif-contrast'                    => 'Kontrastas',
+'exif-saturation'                  => 'Sodrumas',
+'exif-sharpness'                   => 'Aštrumas',
+'exif-devicesettingdescription'    => 'Įrenginio nustatymų aprašas',
+'exif-subjectdistancerange'        => 'Objekto nuotolis',
+'exif-imageuniqueid'               => 'Unikalusis paveikslėlio ID',
+'exif-gpsversionid'                => 'GPS versija',
+'exif-gpslatituderef'              => 'Šiaurės ar pietų platuma',
+'exif-gpslatitude'                 => 'Platuma',
+'exif-gpslongituderef'             => 'Rytų ar vakarų ilguma',
+'exif-gpslongitude'                => 'Ilguma',
+'exif-gpsaltituderef'              => 'Aukščio nuoroda',
+'exif-gpsaltitude'                 => 'Aukštis',
+'exif-gpstimestamp'                => 'GPS laikas (atominis laikrodis)',
+'exif-gpssatellites'               => 'Palydovai, naudoti matavimui',
+'exif-gpsstatus'                   => 'Gaviklio būsena',
+'exif-gpsmeasuremode'              => 'Matavimo režimas',
+'exif-gpsdop'                      => 'Matavimo tikslumas',
+'exif-gpsspeedref'                 => 'Greičio vienetai',
+'exif-gpsspeed'                    => 'GPS gaviklio greitis',
+'exif-gpstrackref'                 => 'Nuoroda judėjimo krypčiai',
+'exif-gpstrack'                    => 'Judėjimo kryptis',
+'exif-gpsimgdirectionref'          => 'Nuoroda vaizdo krypčiai',
+'exif-gpsimgdirection'             => 'Nuotraukos kryptis',
+'exif-gpsmapdatum'                 => 'Panaudoti geodeziniai apžvalgos duomenys',
+'exif-gpsdestlatituderef'          => 'Nuoroda paskirties platumai',
+'exif-gpsdestlatitude'             => 'Paskirties platuma',
+'exif-gpsdestlongituderef'         => 'Nuoroda paskirties ilgumai',
+'exif-gpsdestlongitude'            => 'Paskirties ilguma',
+'exif-gpsdestbearingref'           => 'Nuoroda į paskirties pelengą',
+'exif-gpsdestbearing'              => 'Paskirties pelengas',
+'exif-gpsdestdistanceref'          => 'Nuoroda atstumui iki paskirties',
+'exif-gpsdestdistance'             => 'Atstumas iki paskirties',
+'exif-gpsprocessingmethod'         => 'GPS apdorojimo metodo pavadinimas',
+'exif-gpsareainformation'          => 'GPS zonos pavadinimas',
+'exif-gpsdatestamp'                => 'GPS data',
+'exif-gpsdifferential'             => 'GPS diferiancialo pataisymas',
+
+# EXIF attributes
+'exif-compression-1' => 'Nesuspausta',
+'exif-compression-6' => 'JPEG',
+
+'exif-photometricinterpretation-2' => 'RGB',
+'exif-photometricinterpretation-6' => 'YCbCr',
+
+'exif-unknowndate' => 'Nežinoma data',
+
+'exif-orientation-1' => 'Standartinis', # 0th row: top; 0th column: left
+'exif-orientation-2' => 'Apversta horizontaliai', # 0th row: top; 0th column: right
+'exif-orientation-3' => 'Pasukta 180°', # 0th row: bottom; 0th column: right
+'exif-orientation-4' => 'Apversta vertikaliai', # 0th row: bottom; 0th column: left
+'exif-orientation-5' => 'Pasukta 90° prieš laikrodžio rodyklę ir apversta vertikaliai', # 0th row: left; 0th column: top
+'exif-orientation-6' => 'Pasukta 90° laikrodžio rodyklės kryptimi', # 0th row: right; 0th column: top
+'exif-orientation-7' => 'Pasukta 90° laikrodžio rodyklės kryptimi ir apversta vertikaliai', # 0th row: right; 0th column: bottom
+'exif-orientation-8' => 'Pasukta 90° prieš laikrodžio rodyklę', # 0th row: left; 0th column: bottom
+
+'exif-planarconfiguration-1' => 'stambusis formatas',
+'exif-planarconfiguration-2' => 'plokštuminis formatas',
+
+'exif-xyresolution-i' => '$1 taškai colyje',
+'exif-xyresolution-c' => '$1 taškai centimetre',
+
+'exif-colorspace-1'      => 'sRGB',
+'exif-colorspace-ffff.h' => 'FFFF.H',
+
+'exif-componentsconfiguration-0' => 'neegzistuoja',
+'exif-componentsconfiguration-1' => 'Y',
+'exif-componentsconfiguration-2' => 'Cb',
+'exif-componentsconfiguration-3' => 'Cr',
+'exif-componentsconfiguration-4' => 'R',
+'exif-componentsconfiguration-5' => 'G',
+'exif-componentsconfiguration-6' => 'B',
+
+'exif-exposureprogram-0' => 'Nenurodyta',
+'exif-exposureprogram-1' => 'Rankinė',
+'exif-exposureprogram-2' => 'Paprasta programa',
+'exif-exposureprogram-3' => 'Diafragmos pirmenybė',
+'exif-exposureprogram-4' => 'Užrakto pirmenybė',
+'exif-exposureprogram-5' => 'Kūrybos programa (linkusi į lauko gylį)',
+'exif-exposureprogram-6' => 'Veiksmo programa (linkusi link greito užrakto greičio)',
+'exif-exposureprogram-7' => 'Portreto režimas (nuotraukoms iš arti nepabrėžiant fono)',
+'exif-exposureprogram-8' => 'Peizažo režimas (peizažo nuotraukoms pabrėžiant foną)',
+
+'exif-subjectdistance-value' => '$1 metrų',
+
+'exif-meteringmode-0'   => 'Nežinoma',
+'exif-meteringmode-1'   => 'Vidurkis',
+'exif-meteringmode-2'   => 'Centruotas vidurkis',
+'exif-meteringmode-3'   => 'Taškas',
+'exif-meteringmode-4'   => 'Daugiataškis',
+'exif-meteringmode-5'   => 'Raštas',
+'exif-meteringmode-6'   => 'Dalinis',
+'exif-meteringmode-255' => 'Kita',
+
+'exif-lightsource-0'   => 'Nežinomas',
+'exif-lightsource-1'   => 'Dienos šviesa',
+'exif-lightsource-2'   => 'Fluorescentinis',
+'exif-lightsource-3'   => 'Volframas (kaitinamoji lempa)',
+'exif-lightsource-4'   => 'Blykstė',
+'exif-lightsource-9'   => 'Giedras oras',
+'exif-lightsource-10'  => 'Debesuotas oras',
+'exif-lightsource-11'  => 'Šešėlis',
+'exif-lightsource-12'  => 'Dienos šviesos fluorescentinis (D 5700 – 7100K)',
+'exif-lightsource-13'  => 'Dienos baltumo fluorescentinis (N 4600 – 5400K)',
+'exif-lightsource-14'  => 'Šalto baltumo fluorescentinis (W 3900 – 4500K)',
+'exif-lightsource-15'  => 'Baltas fluorescentinis (WW 3200 – 3700K)',
+'exif-lightsource-17'  => 'Standartinis apšvietimas A',
+'exif-lightsource-18'  => 'Standartinis apšvietimas B',
+'exif-lightsource-19'  => 'Standartinis apšvietimas C',
+'exif-lightsource-20'  => 'D55',
+'exif-lightsource-21'  => 'D65',
+'exif-lightsource-22'  => 'D75',
+'exif-lightsource-23'  => 'D50',
+'exif-lightsource-24'  => 'ISO studijos volframas',
+'exif-lightsource-255' => 'Kitas šviesos šaltinis',
+
+'exif-focalplaneresolutionunit-2' => 'coliai',
+
+'exif-sensingmethod-1' => 'Nenurodytas',
+'exif-sensingmethod-2' => 'Vienalustis spalvų zonos jutiklis',
+'exif-sensingmethod-3' => 'Dvilustis spalvų zonos jutiklis',
+'exif-sensingmethod-4' => 'Trilustis spalvų zonos jutiklis',
+'exif-sensingmethod-5' => 'Nuoseklusis spalvų zonos jutiklis',
+'exif-sensingmethod-7' => 'Trilinijinis jutiklis',
+'exif-sensingmethod-8' => 'Spalvų nuoseklusis linijinis jutiklis',
+
+'exif-filesource-3' => 'DSC',
+
+'exif-scenetype-1' => 'Tiesiogiai fotografuotas vaizdas',
+
+'exif-customrendered-0' => 'Standartinis procesas',
+'exif-customrendered-1' => 'Pasirinktinis procesas',
+
+'exif-exposuremode-0' => 'Automatinis išlaikymas',
+'exif-exposuremode-1' => 'Rankinis išlaikymas',
+'exif-exposuremode-2' => 'Automatinis skliaustas',
+
+'exif-whitebalance-0' => 'Automatinis baltumo balansas',
+'exif-whitebalance-1' => 'Rankinis baltumo balansas',
+
+'exif-scenecapturetype-0' => 'Paprastas',
+'exif-scenecapturetype-1' => 'Peizažas',
+'exif-scenecapturetype-2' => 'Portretas',
+'exif-scenecapturetype-3' => 'Nakties vaizdas',
+
+'exif-gaincontrol-0' => 'Jokia',
+'exif-gaincontrol-1' => 'Nedidelis pakėlimas',
+'exif-gaincontrol-2' => 'Didelis pakėlimas',
+'exif-gaincontrol-3' => 'Mažas nuleidimas',
+'exif-gaincontrol-4' => 'Didelis nuleidimas',
+
+'exif-contrast-0' => 'Paprastas',
+'exif-contrast-1' => 'Mažas',
+'exif-contrast-2' => 'Didelis',
+
+'exif-saturation-0' => 'Paprastas',
+'exif-saturation-1' => 'Mažas sodrumas',
+'exif-saturation-2' => 'Didelis sodrumas',
+
+'exif-sharpness-0' => 'Paprastas',
+'exif-sharpness-1' => 'Mažas',
+'exif-sharpness-2' => 'Didelis',
+
+'exif-subjectdistancerange-0' => 'Nežinomas',
+'exif-subjectdistancerange-1' => 'Macro',
+'exif-subjectdistancerange-2' => 'Artimas vaizdas',
+'exif-subjectdistancerange-3' => 'Tolimas vaizdas',
+
+# Pseudotags used for GPSLatitudeRef and GPSDestLatitudeRef
+'exif-gpslatitude-n' => 'Šiaurės platuma',
+'exif-gpslatitude-s' => 'Pietų platuma',
+
+# Pseudotags used for GPSLongitudeRef and GPSDestLongitudeRef
+'exif-gpslongitude-e' => 'Rytų ilguma',
+'exif-gpslongitude-w' => 'Vakarų ilguma',
+
+'exif-gpsstatus-a' => 'Matavimas vykdyme',
+'exif-gpsstatus-v' => 'Matuojamas programinis sąveikumas',
+
+'exif-gpsmeasuremode-2' => 'Dvimatis matavimas',
+'exif-gpsmeasuremode-3' => 'Trimatis matavimas',
+
+# Pseudotags used for GPSSpeedRef and GPSDestDistanceRef
+'exif-gpsspeed-k' => 'Kilometrai per valandą',
+'exif-gpsspeed-m' => 'Mylios per valandą',
+'exif-gpsspeed-n' => 'Mazgai',
+
+# Pseudotags used for GPSTrackRef, GPSImgDirectionRef and GPSDestBearingRef
+'exif-gpsdirection-t' => 'Tikroji kryptis',
+'exif-gpsdirection-m' => 'Magnetinė kryptis',
+
+# External editor support
+'edit-externally'      => 'Atidaryti išoriniame redaktoriuje',
+'edit-externally-help' => 'Norėdami gauti daugiau informacijos, žiūrėkite [http://meta.wikimedia.org/wiki/Help:External_editors diegimo instrukcijas].',
+
+# 'all' in various places, this might be different for inflected languages
+'recentchangesall' => 'visos',
+'imagelistall'     => 'visi',
+'watchlistall1'    => 'visi',
+'watchlistall2'    => 'visus',
+'namespacesall'    => 'visos',
+
+# E-mail address confirmation
+'confirmemail'            => 'Patvirtinkite el. pašto adresą',
+'confirmemail_noemail'    => 'Jūs neturite nurodę teisingo el. pašto adreso [[{{ns:special}}:Preferences|savo nustatymuose]].',
+'confirmemail_text'       => 'Šiame projekte būtina patvirtinti el. pašto adresą prieš naudojant el. pašto funkcijas. Spustelkite žemiau esantį mygtuką,
+kad jūsų el. pašto adresu būtų išsiųstas patvirtinimo kodas.
+Laiške bus atsiųsta nuoroda su kodu, kuria nuėjus, el. pašto adresas bus patvirtintas.',
+'confirmemail_pending'    => '<div class="error">
+Patvirtinimo kodas jau nusiųstas jums; jei neseniai sukūrėte savo paskyrą, jūs turėtumėte palaukti jo dar kelias minutes prieš prašant naujo kodo.
+</div>',
+'confirmemail_send'       => 'Išsiųsti patvirtinimo kodą',
+'confirmemail_sent'       => 'Patvirtinimo laiškas išsiųstas.',
+'confirmemail_oncreate'   => 'Patvirtinimo kodas buvo išsiųstas jūsų el. pašto adresu.
+Šis kodas nėra būtinas, kad prisijungtumėte, bet jums reikės jį duoti prieš įjungiant el. pašto paslaugas projekte.',
+'confirmemail_sendfailed' => 'Nepavyko išsiųsti patvirtinamojo laiško. Patikrinkite, ar adrese nėra klaidingų simbolių.
+
+Pašto tarnyba atsakė: $1',
+'confirmemail_invalid'    => 'Neteisingas patvirtinimo kodas. Kodo galiojimas gali būti jau pasibaigęs.',
+'confirmemail_needlogin'  => 'Jums reikia $1, kad patvirtintumėte savo el. pašto adresą.',
+'confirmemail_success'    => 'Jūsų el. pašto adresas patvirtintas. Dabar galite prisijungti ir mėgautis projektu.',
+'confirmemail_loggedin'   => 'Jūsų el. pašto adresas patvirtintas.',
+'confirmemail_error'      => 'Patvirtinimo metu įvyko neatpažinta klaida.',
+'confirmemail_subject'    => '{{SITENAME}} el. pašto adreso patvirtinimas',
+'confirmemail_body'       => 'Kažkas, tikriausiai jūs IP adresu $1, užregistravo
+paskyrą „$2“ susietą su šiuo el. pašto adresu projekte {{SITENAME}}.
+
+Kad patvirtintumėte, kad ši dėžutė tikrai priklauso jums, ir aktyvuotumėte
+el. pašto paslaugas projekte {{SITENAME}}, atverkite šią nuorodą savo naršyklėje:
+
+$3
+
+Jei naudotoją registravote *ne* jūs, neatidarykite šio adreso. Patvirtinimo kodas
+baigs galioti $4.',
+
+# Inputbox extension, may be useful in other contexts as well
+'tryexact'       => 'Mėginti tikslų atitikimą',
+'searchfulltext' => 'Ieškoti pilno teksto',
+'createarticle'  => 'Kurti straipsnį',
+
+# Scary transclusion
+'scarytranscludedisabled' => '[Tarpprojektinis įterpimas yra išjungtas]',
+'scarytranscludefailed'   => '[Šablono gavimas iš $1 nepavyko; atsiprašome]',
+'scarytranscludetoolong'  => '[URL per ilgas; atsiprašome]',
+
+# Trackbacks
+'trackbackbox'      => '<div id="mw_trackbacks">
+Trackback šiam straipsniui:<br />
+$1
+</div>',
+'trackbackremove'   => ' ([$1 Trinti])',
+'trackbacklink'     => 'Trackback',
+'trackbackdeleteok' => 'Trackback buvo sėkmingai ištrintas.',
+
+# Delete conflict
+'deletedwhileediting' => 'Dėmesio: Šis puslapis ištrintas po to, kai pradėjote redaguoti!',
+'confirmrecreate'     => "Naudotojas [[{{ns:user}}:$1|$1]] ([[{{ns:user_talk}}:$1|aptarimas]]) ištrynė šį puslapį po to, kai pradėjote jį redaguoti. Trynimo priežastis:
+: ''$2''
+Prašome patvirtinti, kad tikrai norite iš naujo sukurti straipsnį.",
+'recreate'            => 'Atkurti',
+
+'unit-pixel' => 'px',
+
+# HTML dump
+'redirectingto' => 'Peradresuojama į [[$1]]...',
+
+# action=purge
+'confirm_purge'        => 'Išvalyti šio puslapio podėlį?
+
+$1',
+'confirm_purge_button' => 'Gerai',
+
+'youhavenewmessagesmulti' => 'Turite naujų žinučių $1',
+
+'searchcontaining' => "Ieškoti straipsnių, prasidedančių ''$1''.",
+'searchnamed'      => "Ieškoti straipsnių, pavadintų ''$1''.",
+'articletitles'    => "Straipsniai, pradedant nuo ''$1''",
+'hideresults'      => 'Slėpti rezultatus',
+
+# DISPLAYTITLE
+'displaytitle' => '(Nurodyti šį puslapį kaip [[$1]])',
+
+'loginlanguagelabel' => 'Kalba: $1',
+
+# Multipage image navigation
+'imgmultipageprev'   => '← ankstesnis puslapis',
+'imgmultipagenext'   => 'kitas puslapis →',
+'imgmultigo'         => 'Eiti!',
+'imgmultigotopre'    => 'Pereiti į puslapį',
+'imgmultiparseerror' => 'Paveikslėlio failas atrodo yra pažeistas arba neteisingas, taigi {{SITENAME}} negali gauti puslapių sąrašo.',
+
+# Table pager
+'ascending_abbrev'         => 'didėjanti tvarka',
+'descending_abbrev'        => 'mažėjanti tvarka',
+'table_pager_next'         => 'Kitas puslapis',
+'table_pager_prev'         => 'Ankstesnis puslapis',
+'table_pager_first'        => 'Pirmas puslapis',
+'table_pager_last'         => 'Paskutinis puslapis',
+'table_pager_limit'        => 'Rodyti $1 elementų per puslapį',
+'table_pager_limit_submit' => 'Rodyti',
+'table_pager_empty'        => 'Jokių rezultatų',
+
+# Auto-summaries
+'autosumm-blank'   => 'Šalinamas visas turinys iš puslapio',
+'autosumm-replace' => 'Puslapis keičiamas su „$1“',
+'autoredircomment' => 'Nukreipiama į [[$1]]', # This should be changed to the new naming convention, but existed beforehand
+'autosumm-new'     => 'Naujas puslapis: $1',
+
+# Size units
+'size-bytes'     => '$1 B',
+'size-kilobytes' => '$1 KiB',
+'size-megabytes' => '$1 MiB',
+'size-gigabytes' => '$1 GiB',
+
+# Live preview
+'livepreview-loading' => 'Įkeliama…',
+'livepreview-ready'   => 'Įkeliama… Paruošta!',
+'livepreview-failed'  => 'Nepavyko tiesioginė peržiūra!
+Pamėginkite paprastąją peržiūrą.',
+'livepreview-error'   => 'Nepavyko prisijungti: $1 „$2“
+Pamėginkite paprastąją peržiūrą.',
+
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesLv.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesLv.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesLv.php	(revision 1280)
@@ -0,0 +1,1113 @@
+<?php
+/** Latvian (Latviešu)
+ *
+ * @addtogroup Language
+ *
+ * @author Niklas Laxström
+ *
+ * @copyright Copyright © 2006, Niklas Laxström
+ * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
+ */
+
+$namespaceNames = array(
+	NS_MEDIA            => 'Media',
+	NS_SPECIAL          => 'Special',
+	NS_MAIN             => '',
+	NS_TALK             => 'Diskusija',
+	NS_USER             => 'Lietotājs',
+	NS_USER_TALK        => 'Lietotāja_diskusija',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK     => '{{grammar:ģenitīvs|$1}}_diskusija',
+	NS_IMAGE            => 'Attēls',
+	NS_IMAGE_TALK       => 'Attēla_diskusija',
+	NS_MEDIAWIKI        => 'MediaWiki',
+	NS_MEDIAWIKI_TALK   => 'MediaWiki_diskusija',
+	NS_TEMPLATE         => 'Veidne',
+	NS_TEMPLATE_TALK    => 'Veidnes_diskusija',
+	NS_HELP             => 'Palīdzība',
+	NS_HELP_TALK        => 'Palīdzības_diskusija',
+	NS_CATEGORY         => 'Kategorija',
+	NS_CATEGORY_TALK    => 'Kategorijas_diskusija',
+);
+$separatorTransformTable = array(',' => "\xc2\xa0", '.' => ',' );
+
+
+$messages = array(
+# User preference toggles
+'tog-underline'               => 'Pasvītrot saites:',
+'tog-highlightbroken'         => 'Saites uz neesošām lapām rādīt <a href="" class="new">šādi</a> (alternatīva: šādi<a href="" class="internal">?</a>).',
+'tog-justify'                 => 'Taisnot rindkopas',
+'tog-hideminor'               => 'Paslēpt maznozīmīgus labojumus pēdējo izmaiņu lapā',
+'tog-extendwatchlist'         => 'Izvērst uzraugāmo sarakstu, lai parādītu visas veiktās izmaiņas',
+'tog-usenewrc'                => "Uzlabotas pēdējās izmaiņas (izmanto ''JavaScript'')",
+'tog-numberheadings'          => 'Automātiski numurēt virsrakstus.',
+'tog-showtoolbar'             => 'Rādīt rediģēšanas rīkjoslu',
+'tog-editondblclick'          => "Atvērt rediģēšanas lapu ar dubultklikšķi (izmanto ''JavaScript'')",
+'tog-editsection'             => 'Rādīt sadaļu izmainīšanas saites "izmainīt šo sadaļu"',
+'tog-editsectiononrightclick' => 'Atvērt sadaļas izmainīšanas lapu, uzklikšķinot ar labo pogu uz sadaļas virsraksta (JavaScript)',
+'tog-showtoc'                 => 'Parādīt satura rādītāju (lapām, kurās ir vairāk par 3 virsrakstiem)',
+'tog-rememberpassword'        => 'Atcerēties paroli pēc pārlūka aizvēršanas',
+'tog-editwidth'               => 'Parādīt izmainīšanas logu pilnā platumā',
+'tog-watchcreations'          => 'Pievienot tevis radītās lapas uzraugāmo lapu sarakstam',
+'tog-watchdefault'            => 'Pievienot tevis izmainītās lapas uzraugāmo lapu sarakstam',
+'tog-minordefault'            => 'Atzīmēt visus labojumus jau sākotnēji par maznozīmīgiem',
+'tog-previewontop'            => 'Parādīt priekšskatījumu virs rediģēšanas loga, nevis zem.',
+'tog-previewonfirst'          => 'Parādīt priekšskatījumu jau sākotnējā labošanā.',
+'tog-nocache'                 => 'Neļaut pārlūkam saglabāt lapas kešatmiņā',
+'tog-enotifwatchlistpages'    => 'Paziņot pa e-pastu par rakstu izmaiņām',
+'tog-enotifusertalkpages'     => 'Paziņot pa e-pastu par izmaiņām manā diskusiju lapā',
+'tog-enotifminoredits'        => 'Paziņot pa e-pastu arī par maznozīmīgiem rakstu labojumiem',
+'tog-enotifrevealaddr'        => 'Atklāt manu e-pasta adresi paziņojumu vēstulēs',
+'tog-shownumberswatching'     => 'Rādīt uzraudzītāju skaitu',
+'tog-fancysig'                => 'Vienkāršs paraksts (bez automātiskās saites)',
+'tog-externaleditor'          => 'Pēc noklusējuma izmantot ārēju programmu lapu izmainīšanai',
+'tog-externaldiff'            => 'Pēc noklusējuma izmantot ārēju programmu izmaiņu parādīšanai',
+'tog-showjumplinks'           => 'Rādīt pārlēkšanas saites',
+'tog-uselivepreview'          => 'Lietot tūlītējo priekšskatījumu (izmanto "JavaScript"; eksperimentāla iespēja).',
+'tog-forceeditsummary'        => 'Atgādināt man, ja kopsavilkuma ailīte ir tukša',
+'tog-watchlisthideown'        => 'Paslēpt manus labojumus manā uzraugāmo sarakstā.',
+'tog-watchlisthidebots'       => 'Paslēpt botu labojumus manā uzraugāmo sarakstā.',
+
+'underline-always'  => 'vienmēr',
+'underline-never'   => 'nekad',
+'underline-default' => 'Kā pārlūkā',
+
+'skinpreview' => '(Priekšskats)',
+
+# Dates
+'sunday'    => 'svētdiena',
+'monday'    => 'Pirmdiena',
+'tuesday'   => 'otrdiena',
+'wednesday' => 'trešdiena',
+'thursday'  => 'ceturtdiena',
+'friday'    => 'piektdiena',
+'saturday'  => 'sestdiena',
+'january'   => 'janvārī',
+'february'  => 'februārī',
+'march'     => 'martā',
+'april'     => 'aprīlī',
+'may_long'  => 'maijā',
+'june'      => 'jūnijā',
+'july'      => 'jūlijā',
+'august'    => 'augustā',
+'september' => 'septembrī',
+'october'   => 'oktobrī',
+'november'  => 'novembrī',
+'december'  => 'decembrī',
+'jan'       => 'janvārī,',
+'feb'       => 'februārī,',
+'mar'       => 'martā,',
+'apr'       => 'aprīlī,',
+'may'       => 'maijā,',
+'jun'       => 'jūnijā,',
+'jul'       => 'jūlijā,',
+'aug'       => 'augustā,',
+'sep'       => 'septembrī,',
+'oct'       => 'oktobrī,',
+'nov'       => 'novembrī,',
+'dec'       => 'decembrī,',
+
+# Bits of text used by many pages
+'categories'      => '{{PLURAL:$1|Kategorija|Kategorijas}}',
+'pagecategories'  => '{{PLURAL:$1|Kategorija|Kategorijas}}',
+'category_header' => 'Raksti, kas ietverti kategorijā "$1".',
+'subcategories'   => 'Apakškategorijas',
+
+'mainpagetext' => "<big>'''MediaWiki veiksmīgi ieinstalēts'''</big>",
+
+'about'          => 'Par',
+'article'        => 'Raksts',
+'newwindow'      => '(atveras jaunā logā)',
+'cancel'         => 'Atcelt',
+'qbfind'         => 'Meklēšana',
+'qbbrowse'       => 'Navigācija',
+'qbedit'         => 'Izmainīšana',
+'qbpageoptions'  => 'Šī lapa',
+'qbpageinfo'     => 'Konteksts',
+'qbmyoptions'    => 'Manas lapas',
+'qbspecialpages' => 'Īpašās lapas',
+'moredotdotdot'  => 'Vairāk...',
+'mypage'         => 'Mana lapa',
+'mytalk'         => 'Mana diskusija',
+'anontalk'       => 'Šīs IP adreses diskusija',
+'navigation'     => 'Navigācija',
+
+'errorpagetitle'    => 'Kļūda',
+'returnto'          => 'Atgriezties: $1.',
+'tagline'           => "No ''{{grammar:ģenitīvs|{{SITENAME}}}}''",
+'help'              => 'Palīdzība',
+'search'            => 'Meklēt',
+'searchbutton'      => 'Meklēt',
+'go'                => 'Aiziet!',
+'searcharticle'     => 'Aiziet!',
+'history'           => 'hronoloģija',
+'history_short'     => 'Hronoloģija',
+'updatedmarker'     => 'atjaunināti kopš pēdējā apmeklējuma',
+'info_short'        => 'Informācija',
+'printableversion'  => 'Drukājama versija',
+'permalink'         => 'Pastāvīgā saite',
+'print'             => 'Drukāt',
+'edit'              => 'Izmainīt šo lapu',
+'editthispage'      => 'Izmainīt šo lapu',
+'delete'            => 'Dzēst',
+'deletethispage'    => 'Dzēst šo lapu',
+'undelete_short'    => 'Atjaunot $1 versijas',
+'protect'           => 'Aizsargāt',
+'protectthispage'   => 'Aizsargāt šo lapu',
+'unprotect'         => 'Neaizsargāt',
+'unprotectthispage' => 'Neaizsargāt šo lapu',
+'newpage'           => 'Jauna lapa',
+'talkpage'          => 'Diskusija par šo lapu',
+'specialpage'       => 'Īpašā Lapa',
+'personaltools'     => 'Lietotāja rīki',
+'postcomment'       => 'Pievienot komentāru',
+'articlepage'       => 'Apskatīt rakstu',
+'talk'              => 'Diskusija',
+'views'             => 'Apskates',
+'toolbox'           => 'Rīki',
+'userpage'          => 'Skatīt lietotāja lapu',
+'projectpage'       => 'Skatīt projekta lapu',
+'imagepage'         => 'Aplūkot attēla lapu',
+'viewtalkpage'      => 'Skatīt diskusiju',
+'otherlanguages'    => 'Citās valodās',
+'redirectedfrom'    => '(Pāradresēts no $1)',
+'redirectpagesub'   => 'Pāradresācijas lapa',
+'lastmodifiedat'    => 'Šajā lapā pēdējās izmaiņas izdarītas $2, $1.', # $1 date, $2 time
+'viewcount'         => 'Šī lapa ir tikusi apskatīta $1 reizes.',
+'protectedpage'     => 'Aizsargāta lapa',
+'jumpto'            => 'Pārlēkt uz:',
+'jumptonavigation'  => 'navigācija',
+'jumptosearch'      => 'meklēt',
+
+# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
+'aboutsite'         => 'Par {{grammar:akuzatīvs|{{SITENAME}}}}',
+'bugreports'        => 'Kļūdu paziņojumi',
+'copyright'         => 'Saturs ir pieejams saskaņā ar $1.',
+'copyrightpagename' => '{{grammar:ģenitīvs|{{SITENAME}}}} autortiesības',
+'copyrightpage'     => 'Project:Autortiesības',
+'currentevents'     => 'Aktualitātes',
+'currentevents-url' => 'Aktualitātes',
+'disclaimers'       => 'Saistību atrunas',
+'edithelp'          => 'Palīdzība izmaiņām',
+'faq'               => 'FAQ',
+'mainpage'          => 'Sākumlapa',
+'portal'            => 'Kopienas portāls',
+'portal-url'        => 'Project:Kopienas portāls',
+'privacy'           => 'Privātuma politika',
+'privacypage'       => 'Project:Privātuma politika',
+'sitesupport'       => 'Ziedojumi',
+'sitesupport-url'   => 'Project:Ziedojumi',
+
+'badaccess' => 'Atļaujas kļūda',
+
+'versionrequired'     => "Nepieciešamā ''MediaWiki'' versija: $1.",
+'versionrequiredtext' => "Lai lietotu šo lapu, nepieciešama ''MediaWiki'' versija $1. Sk. [[Special:versija]].",
+
+'ok'                  => 'Labi',
+'pagetitle'           => '$1 - {{SITENAME}}',
+'retrievedfrom'       => 'Saturs iegūts no "$1"',
+'youhavenewmessages'  => 'Tev ir $1 (skat. $2).',
+'newmessageslink'     => 'jauns vēstījums',
+'newmessagesdifflink' => 'izmaiņu lapu, lai redzētu, kas jauns',
+'editsection'         => 'izmainīt šo sadaļu',
+'editold'             => 'rediģēt',
+'editsectionhint'     => 'Rediģēt sadaļu: $1',
+'toc'                 => 'Satura rādītājs',
+'showtoc'             => 'parādīt',
+'hidetoc'             => 'paslēpt',
+'thisisdeleted'       => 'Apskatīt vai atjaunot $1?',
+'viewdeleted'         => 'Skatīt $1?',
+'restorelink'         => '$1 dzēstās versijas',
+'feedlinks'           => 'Barotne:',
+
+# Short words for each namespace, by default used in the 'article' tab in monobook
+'nstab-main'      => 'Raksts',
+'nstab-user'      => 'Lietotāja lapa',
+'nstab-media'     => 'Multivides lapa',
+'nstab-project'   => 'Projekta lapa',
+'nstab-image'     => 'Attēls',
+'nstab-mediawiki' => 'paziņojums',
+'nstab-template'  => 'Veidne',
+'nstab-help'      => 'palīdzība',
+'nstab-category'  => 'Kategorija',
+
+# Main script and global functions
+'nosuchaction'      => 'Šādas darbības nav.',
+'nosuchactiontext'  => 'Wiki neatpazīst URL norādīto darbību',
+'nosuchspecialpage' => 'Nav tādas īpašās lapas',
+'nospecialpagetext' => 'Tu esi pieprasījis īpašo lapu, ko wiki neatpazīst.',
+
+# General errors
+'error'              => 'Kļūda',
+'databaseerror'      => 'Datu bāzes kļūda',
+'noconnect'          => 'Atvainojiet, šajā wiki ir radušās tehniskas grūtības un nav iespējams savienoties ar datubāžu serveri. <br />
+$1',
+'cachederror'        => 'Šī ir lapas saglabātā versija, iespējams, ka tā nav atjaunināta.',
+'laggedslavemode'    => 'Uzmanību: Iespējams, šajā lapā nav redzami nesen izdarītie papildinājumi.',
+'readonly'           => 'Datubāze bloķēta',
+'readonlytext'       => 'Datubāze šobrīd ir bloķēta pret jauniem ierakstiem un citām izmaiņām. Visdrīzāk iemesls ir parasts datubāzes uzturēšanas pasākums, pēc kura tā tiks atjaunota normālā stāvoklī. Administrators, kurš nobloķēja datubāzi, norādīja šādu iemeslu:
+<p>$1',
+'internalerror'      => 'Iekšēja kļūda',
+'filecopyerror'      => 'Nav iespējams nokopēt failu "$1" uz "$2"',
+'filerenameerror'    => 'Neizdevās pārdēvēt failu "$1" par "$2".',
+'filedeleteerror'    => 'Nevar izdzēst failu "$1".',
+'filenotfound'       => 'Neizdevās atrast failu "$1".',
+'formerror'          => 'Kļūda: neizdevās nosūtīt saturu',
+'badarticleerror'    => 'Šo darbību nevar veikt šajā lapā.',
+'cannotdelete'       => 'Nevar izdzēst norādīto lapu vai failu. (Iespējams, to jau ir izdzēsis kāds cits)',
+'badtitle'           => 'Nepiemērots nosaukums',
+'perfcached'         => 'Šie dati ir no servera kešatmiņas un var būt novecojuši:',
+'viewsource'         => 'Aplūkot kodu',
+'viewsourcefor'      => 'Lapa: $1',
+'protectedinterface' => 'Šī lapa satur programmatūras interfeisā lietotu tekstu un ir bloķēta pret izmaiņām, lai pasargātu no bojājumiem.',
+'editinginterface'   => "'''Brīdinājums:''' Tu izmaini lapu, kuras saturu izmanto wiki programmatūras lietotāja saskarnē (''interfeisā''). Šīs lapas izmaiņas ietekmēs lietotāja saskarni citiem lietotājiem.",
+
+# Login and logout pages
+'logouttitle'                => 'Lietotāja iziešana',
+'logouttext'                 => 'Tu esi izgājis no {{grammar:ģenitīvs|{{SITENAME}}}}.
+Vari turpināt to izmantot anonīmi, vari atgriezties kā cits lietotājs vai varbūt tas pats. 
+Ņem vērā, ka arī pēc iziešanas no {{grammar:ģenitīvs|{{SITENAME}}}} dažas lapas var tikt parādītas tā, it kā tu vēl būtu iekšā, līdz tiks iztīrīta pārlūka kešatmiņa.',
+'welcomecreation'            => "== Laipni lūdzam, $1! ==
+
+Tavs lietotāja konts ir izveidots. Neaizmirsti, ka ir iespējams mainīt ''{{grammar:ģenitīvs|{{SITENAME}}}}'' izmantošanas izvēles.",
+'loginpagetitle'             => 'Lietotāja ieiešana',
+'yourname'                   => 'Tavs lietotājvārds',
+'yourpassword'               => 'Tava parole',
+'yourpasswordagain'          => 'Atkārto paroli',
+'remembermypassword'         => 'Atcerēties manu paroli pēc pārlūka aizvēršanas.',
+'yourdomainname'             => 'Tavs domēns',
+'externaldberror'            => 'Notikusi vai nu ārējās autentifikācijas datubāzes kļūda, vai arī tev nav atļauts izmainīt savu ārējo kontu.',
+'loginproblem'               => '<b>Radās problēma ar ieiešanu.</b><br />Mēģini vēlreiz!',
+'alreadyloggedin'            => '<span style="color:#ff0000"><b>Lietotāj $1, tu jau esi iegājis!</b></span><br />',
+'login'                      => 'Ieiet',
+'loginprompt'                => 'Lai ieietu {{grammar:lokatīvs|{{SITENAME}}}}, tavam datoram ir jāpieņem sīkdatnes (<i>cookies</i>).',
+'userlogin'                  => 'Izveidot jaunu lietotāju vai doties iekšā',
+'logout'                     => 'Iziet',
+'userlogout'                 => 'Iziet',
+'notloggedin'                => 'Neesi iegājis',
+'nologin'                    => 'Nav lietotājvārda? $1.',
+'nologinlink'                => 'Reģistrējies',
+'createaccount'              => 'Izveidot jaunu lietotāju',
+'gotaccount'                 => 'Tev jau ir lietotājvārds? $1!',
+'gotaccountlink'             => 'Dodies iekšā',
+'createaccountmail'          => 'pa e-pastu',
+'badretype'                  => 'Tevis ievadītās paroles nesakrīt.',
+'userexists'                 => 'Šāds lietotāja vārds jau eksistē. Lūdzu izvēlies citu vārdu.',
+'youremail'                  => 'Tava e-pasta adrese*',
+'username'                   => 'Lietotājvārds:',
+'uid'                        => 'Lietotāja ID:',
+'yourrealname'               => 'Tavs īstais vārds*',
+'yourlanguage'               => 'Lietotāja saskarnes valoda:',
+'yournick'                   => 'Tavs paraksts (iesauka):',
+'badsig'                     => "Kļūdains ''paraksta'' kods; pārbaudi HTML (ja tāds ir lietots).",
+'email'                      => 'E-pasts',
+'prefs-help-email-enotif'    => 'Šo adresi lieto arī lai sūtītu paziņojumus pa e-pastu, ja tādi ir nodefinēti.',
+'loginerror'                 => 'Neveiksmīga ieiešana',
+'prefs-help-email'           => '* E-pasts (nav obligāti jānorāda): Ļauj citiem sazināties ar tevi, izmantojot tavu lietotāja lapu vai lietotāja diskusiju lapu, tev nekur neatklājot savu identitāti.',
+'nocookiesnew'               => 'Lietotājvārds tika izveidots, bet tu neesi iegājis iekšā. {{SITENAME}} izmanto sīkdatnes (<i>cookies</i>), lai lietotāji varētu tajā ieiet. Tavs pārlūks nepieņem tās. Lūdzu, atļauj to pieņemšanu un tad nāc iekšā ar savu lietotājvārdu un paroli.',
+'nocookieslogin'             => '{{SITENAME}} izmanto sīkdatnes (<i>cookies</i>), lai lietotāji varētu ieiet tajā. Diemžēl tavs pārlūks tos nepieņem. Lūdzu, atļauj to pieņemšanu un mēģini vēlreiz.',
+'noname'                     => 'Tu neesi norādījis derīgu lietotāja vārdu.',
+'loginsuccesstitle'          => 'Ieiešana veiksmīga',
+'loginsuccess'               => 'Tu esi ienācis {{grammar:lokatīvs|{{SITENAME}}}} kā "$1".',
+'nosuchuser'                 => 'Šeit nav lietotāja ar vārdu "$1". Pārbaudi, vai pareizi uzrakstīts, vai arī izveido jaunu kontu.',
+'nosuchusershort'            => 'Šeit nav lietotāja ar vārdu "$1". Pārbaudi vai pareizi uzrakstīts.',
+'nouserspecified'            => 'Tev jānorāda lietotājvārds.',
+'wrongpassword'              => 'Tu ievadīji nepareizu paroli. Lūdzu, mēģini vēlreiz.',
+'wrongpasswordempty'         => 'Parole bija tukša. Lūdzu mēģini vēlreiz.',
+'mailmypassword'             => 'Atsūtīt man jaunu paroli',
+'passwordremindertitle'      => 'Paroles atgadinajums no {{SITENAME}}s',
+'passwordremindertext'       => 'Kads (iespejams, Tu pats, no IP adreses $1)
+ludza, lai nosutam Tev jaunu {{SITENAME}} ({{SERVER}}) ($4) paroli.
+Lietotajam $2 parole tagad ir $3.
+Ludzu, nomaini paroli, kad esi veiksmigi iekluvis ieksa.',
+'noemail'                    => 'Lietotājs "$1" nav reģistrējis e-pasta adresi.',
+'passwordsent'               => 'Esam nosūtījuši jaunu paroli uz e-pasta adresi, kuru ir norādījis lietotājs $1. Lūdzu, nāc iekšā ar jauno paroli, kad būsi to saņēmis.',
+'eauthentsent'               => "Apstiprinājuma e-pasts tika nosūtīts uz norādīto e-pasta adresi. Lai varētu saņemt citus ''meilus'', izpildi vēstulē norādītās instrukcijas, lai apstiprinātu, ka šī tiešām ir tava e-pasta adrese.",
+'mailerror'                  => 'E-pasta sūtīšanas kļūda: $1',
+'acct_creation_throttle_hit' => 'Tu jau esi izveidojis $1 kontus. Vairāk nevar.',
+'emailauthenticated'         => 'Tava e-pasta adrese tika apstiprināta $1.',
+'emailnotauthenticated'      => 'Tava e-pasta adrese <strong>vēl nav apstiprināta</strong> un zemāk norādītās iespējas nav pieejamas.',
+'noemailprefs'               => '<strong>Norādi e-pasta adresi, lai lietotu šīs iespējas.</strong>',
+'emailconfirmlink'           => 'Apstiprināt tavu e-pasta adresi',
+'invalidemailaddress'        => 'E-pasta adrese nevar tikt apstiprināta, jo izskatās nederīga. Lūdzu ievadi korekti noformētu e-pasta adresi, vai arī atstāj to lauku tukšu.',
+'accountcreated'             => 'Konts izveidots',
+'accountcreatedtext'         => 'Lietotāja konts priekš $1 tika izveidots.',
+
+# Edit page toolbar
+'bold_sample'     => 'Teksts boldā',
+'bold_tip'        => 'Teksts boldā',
+'italic_sample'   => 'Teksts kursīvā',
+'italic_tip'      => 'Teksts kursīvā',
+'link_sample'     => 'Lapas nosaukums',
+'link_tip'        => 'Iekšējā saite',
+'extlink_sample'  => 'http://www.piemers.lv saites apraksts',
+'extlink_tip'     => 'Ārējā saite (neaizmirsti sākumā pierakstīt "http://")',
+'headline_sample' => 'Virsraksta teksts',
+'headline_tip'    => '2. līmeņa virsraksts',
+'math_sample'     => 'Šeit ievieto formulu',
+'math_tip'        => 'Matemātikas formula (LaTeX)',
+'nowiki_sample'   => 'Šeit raksti neformatētu tekstu',
+'nowiki_tip'      => 'Ignorēt wiki formatējumu',
+'image_sample'    => 'Piemers.jpg',
+'image_tip'       => 'Ievietots attēls',
+'media_sample'    => 'Piemers.ogg',
+'media_tip'       => 'Saite uz multimēdiju failu',
+'sig_tip'         => 'Tavs paraksts ar laika atzīmi',
+'hr_tip'          => 'Horizontāla līnija (neizmanto lieki)',
+
+# Edit pages
+'summary'                  => 'Kopsavilkums',
+'subject'                  => 'Tēma/virsraksts',
+'minoredit'                => 'maznozīmīgs labojums',
+'watchthis'                => 'uzraudzīt',
+'savearticle'              => 'Saglabāt lapu',
+'preview'                  => 'Pirmskats',
+'showpreview'              => 'Rādīt pirmskatu',
+'showlivepreview'          => 'Tūlītējs pirmskats',
+'showdiff'                 => 'Rādīt izmaiņas',
+'anoneditwarning'          => "'''Uzmanību:''' tu neesi iegājis. Lapas hronoloģijā tiks ierakstīta tava IP adrese.",
+'missingsummary'           => "'''Atgādinājums''': Tu neesi norādījis izmaiņu kopsavilkumu. Vēlreiz klikšķinot uz \"Saglabāt lapu\", Tavas izmaiņas tiks saglabātas bez kopsavilkuma.",
+'missingcommenttext'       => 'Lūdzu, ievadi tekstu zemāk redzamajā logā!',
+'blockedtitle'             => 'Lietotājs ir bloķēts.',
+'blockedtext'              => '$1 ir nobloķējis tavu lietotāja vārdu vai IP adresi. Iemesls tam ir:<br />\'\'$2\'\'<br />. Tu vari sazināties ar $1 vai kādu citu [[{{MediaWiki:grouppage-sysop}}|administratoru]] lai apspriestu šo bloku.
+
+Pievērs uzmanību, tam, ka ja tu neesi norādījis derīgu e-pasta adresi [[Special:Preferences|user preferences]], tev nedarbosies "sūtīt e-pastu" iespēja.
+
+Tava IP adrese ir $3. Lūdzu iekļauj to visos turpmākajos pieprasījumos.',
+'whitelistedittitle'       => 'Lai varētu rediģēt, šeit jāielogojas.',
+'whitelistedittext'        => 'Tev $1 lai varētu rediģēt lapas.',
+'whitelistreadtitle'       => 'Jāielogojas, lai varētu lasīt',
+'whitelistreadtext'        => 'Tev [[Special:Userlogin|jāielogojas]] lai varētu lasīt lapas.',
+'whitelistacctitle'        => 'Tev nav atļauts izveidot kontu',
+'loginreqtitle'            => 'Nepieciešama ieiešana',
+'loginreqlink'             => 'login',
+'accmailtitle'             => 'Parole izsūtīta.',
+'accmailtext'              => '$1 parole tika nosūtīta uz $2.',
+'newarticle'               => '(Jauns raksts)',
+'newarticletext'           => "<div style=\"border: 1px solid #ccc; padding: 7px;\">'''{{grammar:lokatīvs|{{SITENAME}}}} vēl nav tāda {{NAMESPACE}} raksta ar virsrakstu \"{{PAGENAME}}\".'''
+* Lai izveidotu šo lapu, raksti tekstu zemāk redzamajā logā. Kad esi pabeidzis, spied pogu \"Saglabāt lapu\". Ja viss būs kārtībā, izmaiņām vajadzētu būt tūlīt redzamām.
+* '''Ja esi izveidojis šo lapu dažu pēdējo minūšu laikā un nekas nav parādījies, iespējams, ir aizkavējusies informācijas saglabāšana datubāzē.''' Lūdzam mazliet pagaidīt un tad vēlreiz pārbaudīt - visdrīzāk, pēc kāda brīža lapa būs redzama un nebūs jāraksta viss vēlreiz.
+* Ja šis ir raksts (nevis, piemēram, diskusiju lapa), tad
+** lūdzam neveidot rakstu, kurā būtu reklamēts vai slavināts tu pats, kāda weblapa, produkts vai uzņēmums (skat. \"[[Project:Kas {{SITENAME}} nav|Kas {{SITENAME}} nav]]\").
+** ja tie ir tavi pirmie soļi {{grammar:lokatīvs|{{SITENAME}}}}, lūdzam vispirms izlasīt [[Project:Pamācība|pamācību]] un eksperimentiem izmantot tikai [[Project:Smilšu kaste|smilšu kasti]]. Paldies!
+** [[Special:Search/{{PAGENAME}}|spied šeit]], lai meklētu {{grammar:lokatīvs|{{SITENAME}}}} informāciju par jēdzienu \"{{PAGENAME}}\".
+</div>",
+'anontalkpagetext'         => "----''Šī ir diskusiju lapa anonīmam lietotājam, kurš vēl nav kļuvis par reģistrētu lietotāju vai arī neizmanto savu lietotājvārdu. Tādēļ mums ir jāizmanto skaitliskā [[IP adrese]], lai viņu identificētu. Šāda IP adrese var būt vairākiem lietotājiem. Ja tu esi anonīms lietotājs un uzskati, ka tev ir adresēti neatbilstoši komentāri, lūdzu, [[Special:Userlogin|kļūsti par lietotāju vai arī izmanto jau izveidotu lietotājvārdu]], lai izvairītos no turpmākām neskaidrībām un tu netiktu sajaukts ar citiem anonīmiem lietotājiem.''",
+'noarticletext'            => '(Šajā lapā šobrīd nav nekāda teksta)',
+'clearyourcache'           => "'''Piezīme:''' Pēc saglabāšanas iztīri pārlūka kešatmiņu, lai pārmaiņas būtu redzamas: Mozilla/Safari/Konqueror: turi nospiestu '''Shift''' un klikšķini '''Reload''' (vai spied '''Ctrl-Shift-r'''), IE: spied '''Ctrl-F5''', Opera: spied '''F5'''.",
+'usercssjsyoucanpreview'   => '<strong>Ieteikums:</strong> Lieto pirmsskata pogu, lai pārbaudītu savu jauno CSS/JS pirms saglabāšanas.',
+'usercsspreview'           => "'''Atceries, ka šis ir tikai tava lietotāja CSS pirmskats, lapa vēl nav saglabāta!'''",
+'userjspreview'            => "'''Atceries, ka šis ir tikai tava lietotāja JavaScript pirmskats/tests, lapa vēl nav saglabāta!'''",
+'note'                     => '<strong>Piezīme: </strong>',
+'previewnote'              => "'''Atceries, ka šis ir tikai pirmskats un vēl nav saglabāts!'''",
+'editing'                  => 'Izmainīt $1',
+'editinguser'              => 'Izmainīt $1',
+'editingsection'           => 'Izmainīt $1 (sadaļa)',
+'editingcomment'           => 'Izmainīt $1 (komentārs)',
+'editconflict'             => 'Izmaiņu konflikts: $1',
+'explainconflict'          => 'Kāds cits ir izmainījis šo lapu pēc tam, kad tu sāki to mainīt. Augšējā teksta logā ir lapas teksts tā pašreizējā versijā. Tevis veiktās izmaiņas ir redzamas apakšējā teksta logā. Lai saglabātu savas izmaiņas, tev ir jāapvieno savs teksts ar saglabāto pašreizējo variantu. Kad spiedīsi pogu "Saglabāt lapu", tiks saglabāts <b>tikai</b> teksts, kas ir augšējā teksta logā.',
+'yourtext'                 => 'Tavs teksts',
+'storedversion'            => 'Saglabātā versija',
+'editingold'               => '<strong>BRĪDINĀJUMS: Saglabājot šo lapu, tu izmainīsi šīs lapas novecojušu versiju, un ar to tiks dzēstas visas izmaiņas, kas izdarītas pēc šīs versijas.</strong>',
+'yourdiff'                 => 'Atšķirības',
+'copyrightwarning'         => 'Lūdzu, ņem vērā, ka viss ieguldījums, kas veikts {{grammar:lokatīvs|{{SITENAME}}}}, ir uzskatāms par publiskotu saskaņā ar $2 (vairāk info skat. $1). 
+Ja nevēlies, lai Tevis rakstīto kāds rediģē un izplata tālāk, tad, lūdzu, nepievieno to šeit!<br />
+
+Izvēloties "Saglabāt lapu", Tu apliecini, ka šo rakstu esi rakstījis vai papildinājis pats vai izmantojis informāciju no darba, ko neaizsargā autortiesības, vai tamlīdzīga brīvi pieejama resursa.<br />
+
+<strong>BEZ ATĻAUJAS NEPIEVIENO DARBU, KO AIZSARGĀ AUTORTIESĪBAS!</strong>',
+'copyrightwarning2'        => "Lūdz ņem vērā, ka visu ieguldījumu {{grammar:lokatīvs|{{SITENAME}}}} var rediģēt, mainīt vai izdzēst citi lietotāji. Ja negribi lai ar tavu rakstīto tā izrīkojas, nepievieno to šeit.
+
+Tu apliecini, ka šo rakstu esi rakstījis vai papildinājis pats vai izmantojis informāciju no darba, ko neaizsargā autortiesības, vai tamlīdzīga brīvi pieejama resursa (sīkāk skatīt $1).
+
+'''BEZ ATĻAUJAS NEPIEVIENO DARBU, KO AIZSARGĀ AUTORTIESĪBAS!'''",
+'longpagewarning'          => '<strong>Šī lapa ir $1 kilobaitus liela. Tas var būt vairāk par lapas optimālo izmēru. Lūdzu apsver iespēju sašķelt to mazākās sekcijās.</strong>',
+'protectedpagewarning'     => "'''BRĪDINĀJUMS: Šī lapa ir bloķēta pret izmaiņām, tikai lietotāji ar admina privilēģijām var to izmainīt. To darot, noteikti ievēro [[Project:Norādījumi par aizsargātajām lapām|norādījumus par aizsargātajām lapām]].'''",
+'semiprotectedpagewarning' => "'''Piezīme:''' Izmaiņu veikšana šajā lapā ir atļauta tikai reģistrētiem lietotājiem.",
+'templatesused'            => '<br />Šajā lapā izmantotās veidnes:',
+
+# History pages
+'revhistory'          => 'Versiju hronoloģija',
+'nohistory'           => 'Šai lapai nav pieejama versiju hronoloģija.',
+'revnotfound'         => 'Versija nav atrasta',
+'revnotfoundtext'     => 'Meklētā vecā lapas versija netika atrasta. Lūdzu pārbaudi lietoto URL.',
+'loadhist'            => 'Ielādē lapas hronoloģiju',
+'currentrev'          => 'Pašreizējā versija',
+'revisionasof'        => 'Versija, kas saglabāta $1',
+'previousrevision'    => '←Senāka versija',
+'nextrevision'        => 'Jaunāka versija→',
+'currentrevisionlink' => 'skatīt pašreizējo versiju',
+'cur'                 => 'ar pašreizējo',
+'next'                => 'nākamais',
+'last'                => 'ar iepriekšējo',
+'histlegend'          => 'Atšķirību izvēle: atzīmē vajadzīgo versiju apaļās pogas un spied "Salīdzināt izvēlētās versijas".<br />
+Apzīmējumi: 
+"ar pašreizējo" = salīdzināt ar pašreizējo versiju,
+"ar iepriekšējo" = salīdzināt ar iepriekšējo versiju, 
+m = maznozīmīgs labojums.',
+'deletedrev'          => '[izdzēsta]',
+'histfirst'           => 'Senākās',
+'histlast'            => 'Jaunākās',
+
+# Revision feed
+'history-feed-title'       => 'Versiju hronoloģija',
+'history-feed-description' => 'Šīs wiki lapas versiju hronoloģija',
+
+# Revision deletion
+'rev-deleted-comment' => '(komentārs nodzēsts)',
+'rev-deleted-user'    => '(lietotāja vārds nodzēsts)',
+'rev-delundel'        => 'rādīt/slēpt',
+
+# Diffs
+'difference'                => '(Atšķirības starp versijām)',
+'loadingrev'                => 'ielādē atšķirību versiju',
+'lineno'                    => '$1. rindiņa:',
+'editcurrent'               => 'Izmainīt šīs lapas pašreizējo versiju',
+'selectolderversionfordiff' => 'Izvēlies vecāku versiju, ar kuru salīdzināt',
+'compareselectedversions'   => 'Salīdzināt izvēlētās versijas',
+
+# Search results
+'searchresults'         => 'Meklēšanas rezultāti',
+'searchresulttext'      => 'Lai iegūtu vairāk informācijas par meklēšanu {{grammar:akuzatīvs|{{SITENAME}}}}, skat. [[Project:Searching|{{grammar:ģenitīvs|{{SITENAME}}}} meklēšana]].',
+'searchsubtitle'        => 'Pieprasījums: [[$1]] [[Special:Allpages/$1|&#x5B;Indekss&#x5D;]]',
+'searchsubtitleinvalid' => 'Pieprasījums: $1',
+'badquery'              => 'Nepareizi noformulēts meklēšanas pieprasījums',
+'badquerytext'          => 'Mēs nevarējām apstrādāt tavu pieprasījumu. Iespējams, tāpēc, ka tu mēģināji meklēt vārdu, kas ir īsāks par trim burtiem, kas vēl nav iespējams. Varbūt tu nepareizi ierakstīji kādu frāzi, piemēram "fish and and scales". Lūdzu, mēģini citus atslēgvārdus.',
+'noexactmatch'          => "'''Lapas ar nosaukumu \"\$1\" šeit nav.''' Tu vari to [[:\$1|izveidot]].",
+'titlematches'          => 'Rezultāti virsrakstos',
+'notitlematches'        => 'Neviena rezultāta, meklējot lapas virsrakstā',
+'textmatches'           => 'Rezultāti lapu tekstos',
+'notextmatches'         => 'Neviena rezultāta, meklējot lapas tekstā',
+'prevn'                 => 'iepriekšējās $1',
+'nextn'                 => 'nākamās $1',
+'viewprevnext'          => 'Skatīt ($1) ($2) ($3 vienā lapā).',
+'showingresults'        => 'Šobrīd ir redzamas <b>$1</b> lapas, sākot ar #<b>$2</b>.',
+'showingresultsnum'     => 'Šobrīd ir redzamas <b>$3</b> lapas, sākot ar #<b>$2</b>.',
+'nonefound'             => '<strong>Piezīme:</strong> bieži vien meklēšana ir neveiksmīga, meklējot plaši izplatītus vārdus, piemēram, "un" vai "ir", jo tie netiek iekļauti meklēšanas datubāzē, vai arī meklējot vairāk par vienu vārdu (jo rezultātos parādīsies tikai lapas, kurās ir visi meklētie vārdi).',
+'powersearch'           => 'Meklēt',
+'powersearchtext'       => 'Meklēt šādās palīglapās :<br />
+$1<br />
+$2 Parādīt pāradresācijas lapas   Meklēt $3 $9',
+'searchdisabled'        => '<p style="margin: 1.5em 2em 1em">Meklēšana {{grammar:lokatīvs|{{SITENAME}}}} šobrīd ir atslēgta darbības traucējumu dēļ. Pagaidām vari meklēt, izmantojot Google vai Yahoo.
+<span style="font-size: 89%; display: block; margin-left: .2em">Ņem vērā, ka meklētāju indeksētais {{grammar:ģenitīvs|{{SITENAME}}}} saturs var būt novecojis.</span></p>',
+'blanknamespace'        => '(Pamatlapa)',
+
+# Preferences page
+'preferences'           => 'Izvēles',
+'prefsnologin'          => 'Neesi iegājis',
+'prefsnologintext'      => 'Tev jābūt [[Special:Userlogin|iegājušam]], lai mainītu lietotāja izvēles.',
+'prefsreset'            => 'Sākotnējās izvēles ir atjaunotas.',
+'qbsettings'            => 'Rīku joslas stāvoklis',
+'changepassword'        => 'Mainīt paroli',
+'skin'                  => 'Apdare',
+'math'                  => 'Formulas',
+'dateformat'            => 'Datuma formāts',
+'datedefault'           => 'Vienalga',
+'datetime'              => 'Datums un laiks',
+'math_unknown_error'    => 'nezināma kļūda',
+'math_unknown_function' => 'nezināma funkcija',
+'math_syntax_error'     => 'sintakses kļūda',
+'prefs-personal'        => 'Lietotāja dati',
+'prefs-rc'              => 'Pēdējās izmaiņas',
+'prefs-watchlist'       => 'Uzraugāmie raksti',
+'prefs-watchlist-days'  => 'Dienu skaits, kuras parādīt uzraugāmo rakstu sarakstā:',
+'prefs-watchlist-edits' => 'Izmaiņu skaits, kuras rādīt izvērstajā uzraugāmo rakstu sarakstā:',
+'prefs-misc'            => 'Dažādi',
+'saveprefs'             => 'Saglabāt izvēles',
+'resetprefs'            => 'Atjaunot sākotnējās izvēles',
+'oldpassword'           => 'Vecā parole',
+'newpassword'           => 'Jaunā parole',
+'retypenew'             => 'Atkārto jauno paroli',
+'textboxsize'           => 'Rediģēšana',
+'rows'                  => 'Rindiņas',
+'columns'               => 'Simbolu skaits rindiņā',
+'searchresultshead'     => 'Meklēšana',
+'resultsperpage'        => 'Lappusē parādāmo rezultātu skaits',
+'contextlines'          => 'Cik rindiņas parādīt katram atrastajam rezultātam',
+'contextchars'          => 'Konteksta simbolu skaits vienā rindiņā',
+'stubthreshold'         => 'Aizmetņu izmēra slieksnis',
+'recentchangescount'    => 'Virsrakstu skaits pēdējo izmaiņu lapā',
+'savedprefs'            => 'Tavas izvēles ir saglabātas.',
+'timezonelegend'        => 'Laika josla',
+'timezonetext'          => 'Ieraksti, par cik stundām tavs vietējais laiks atšķiras no servera laika (UTC).',
+'localtime'             => 'Attēlotais vietējais laiks',
+'timezoneoffset'        => 'Starpība¹',
+'servertime'            => 'Servera laiks šobrīd',
+'guesstimezone'         => 'Izmantot datora sistēmas laiku',
+'allowemail'            => 'Atļaut saņemt e-pastus no citiem lietotājiem.',
+'defaultns'             => 'Meklēt šajās palīglapās pēc noklusējuma:',
+'default'               => 'pēc noklusējuma',
+'files'                 => 'Attēli',
+
+# User rights
+'userrights-user-editname' => 'Ievadi lietotājvārdu:',
+
+# Recent changes
+'recentchanges'                     => 'Pēdējās izmaiņas',
+'recentchangestext'                 => '{{Pēdējās izmaiņas}}',
+'rcnote'                            => 'Šobrīd ir redzamas pēdējās <strong>$1</strong> izmaiņas, kas izdarītas {{PLURAL:$2|pēdējā|pēdējās}} <strong>$2</strong> {{PLURAL:$2|dienā|dienās}} (līdz $3).',
+'rcnotefrom'                        => 'Šobrīd redzamas izmaiņas kopš <b>$2</b> (parādītas ne vairāk par <b>$1</b>).',
+'rclistfrom'                        => 'Parādīt jaunas izmaiņas kopš $1',
+'rcshowhideminor'                   => '$1 maznozīmīgus',
+'rcshowhidebots'                    => '$1 botus',
+'rcshowhideliu'                     => '$1 reģistrētos',
+'rcshowhideanons'                   => '$1 anonīmos',
+'rcshowhidemine'                    => '$1 manus',
+'rclinks'                           => 'Parādīt pēdējās $1 izmaiņas {{PLURAL:$2|pēdējā|pēdējās}} $2 {{PLURAL:$2|dienā|dienās}}.<br />$3',
+'diff'                              => 'izmaiņas',
+'hist'                              => 'hronoloģija',
+'hide'                              => 'paslēpt',
+'show'                              => 'parādīt',
+'minoreditletter'                   => 'm',
+'newpageletter'                     => 'J',
+'boteditletter'                     => 'b',
+'number_of_watching_users_pageview' => '[šo lapu uzrauga $1 {{plural:$1|lietotājs|lietotāji}}]',
+
+# Recent changes linked
+'recentchangeslinked' => 'Saistītās izmaiņas',
+
+# Upload
+'upload'               => 'Augšuplādēt failu',
+'uploadbtn'            => 'Augšuplādēt',
+'reupload'             => 'Vēlreiz augšuplādēt',
+'reuploaddesc'         => 'Atgriezties pie augšupielādes veidnes.',
+'uploadnologin'        => 'Neesi iegājis',
+'uploadnologintext'    => 'Tev jābūt [[Special:Userlogin|iegājušam]], lai augšuplādētu failus.',
+'uploaderror'          => 'Augšupielādes kļūda',
+'uploadtext'           => "'''STOP!''' Pirms tu kaut ko augšupielādē, noteikti izlasi un ievēro [[Project:Attēlu izmantošanas noteikumi|attēlu izmantošanas noteikumus]].
+
+Lai aplūkotu vai meklētu agrāk augšuplādētus attēlus,
+dodies uz [[Special:Imagelist|augšupielādēto attēlu sarakstu]].
+Augšupielādes un dzēšanas tiek reģistrētas [[Special:Log/upload|augšupielādes reģistrā]].
+
+Izmanto šo veidni, lai augšupielādētu jaunus attēlu failus, ar kuriem ilustrēt tevis izmainītās lapas.
+Gandrīz visos pārlūkos tev vajadzētu redzēt pogu '''\"Choose...\",''' kuru spiežot parādīsies faila atvēršanas dialogs.
+Izvēloties kādu failu, tā adrese parādīsies ailītē blakus šai pogai.
+Tev ir arī jāatzīmē ailīte, kas apstiprina, ka tu nepārkāp nekādas autortiesības, augšupielādējot šo failu.
+Spied pogu '''Augšuplādēt''', lai pabeigtu augšupielādi.
+Tas var ieilgt, ja tavs interneta pieslēgums ir lēns.
+
+Ieteicamie formāti ir:
+* JPEG - ja tā ir fotogrāfija, 
+* PNG - ja tas ir zīmējums vai kāda ikona, un 
+* OGG - ja tas ir skaņas fails.
+
+Lūdzu, pārliecinies, ka faila nosaukums ir pietiekami aprakstošs, lai izvairītos no neskaidrībām. Lai attēlu pēc tam ievietotu kādā lapā, izmanto šādi noformētu linkus:
+* '''<nowiki>[[</nowiki>{{ns:Image}}<nowiki>:Fails.jpg|paskaidrojošs teksts]]</nowiki>'''
+* '''<nowiki>[[</nowiki>{{ns:Image}}<nowiki>:Fails.png|paskaidrojošs teksts]]</nowiki>'''
+vai skaņām
+* '''<nowiki>[[</nowiki>{{ns:Media}}<nowiki>:Fails.ogg]]</nowiki>'''
+
+Lūdzu, ņem vērā, ka tāpat kā citas wiki lapas arī tevis augšuplādētos failus citi var mainīt vai dzēst, ja uzskata, ka tas nāktu par labu šim projektam, kā arī atceries, ka tev var tikt liegta augšupielādes iespēja, ja tu šo sistēmu.",
+'uploadlog'            => 'augšupielādes reģistrs',
+'uploadlogpage'        => 'Augšupielādes reģistrs',
+'uploadlogpagetext'    => 'Failu augšupielādes reģistrs.',
+'filename'             => 'Faila nosaukums',
+'filedesc'             => 'Kopsavilkums',
+'fileuploadsummary'    => 'Informācija par failu:',
+'filestatus'           => 'Autortiesību statuss',
+'filesource'           => 'Izejas kods',
+'uploadedfiles'        => 'Augšupielādēja failus',
+'ignorewarning'        => 'Ignorēt brīdinājumu un saglabāt failu.',
+'ignorewarnings'       => 'Ignorēt visus brīdinājumus',
+'minlength'            => 'Failu vārdiem ir jābūt vismaz trīs simbolus gariem.',
+'illegalfilename'      => 'Faila nosaukumā "$1" ir simboli, kas nav atļauti virsrakstos. Lūdzu, pārdēvē failu un mēģini to vēlreiz augšuplādēt.',
+'badfilename'          => 'Attēla nosaukums ir nomainīts, tagad tas ir "$1".',
+'largefileserver'      => 'Šis fails ir lielāks nekā serveris ņem pretī.',
+'emptyfile'            => 'Šķiet, ka tu esi augšuplādējis tukšu failu. Iespējams, faila nosaukumā esi pieļāvis kļūdu. Lūdzu, pārbaudi, vai tiešām tu vēlies augšuplādēt tieši šo failu.',
+'fileexists'           => 'Fails ar šādu nosaukumu jau pastāv, lūdzu, pārbaudi $1, ja neesi drošs, ka vēlies to mainīt.',
+'fileexists-forbidden' => 'Fails ar šādu nosaukumu jau eksistē, mēģini kādu citu nosaukumu. [[Image:$1|thumb|center|$1]]',
+'successfulupload'     => 'Augšupielāde veiksmīga',
+'fileuploaded'         => 'Fails "$1" augšuplādēts veiksmīgi.
+Lūdzu, dodies uz šo lapu - $2 - un aizpildi faila aprakstu, piemēram, no kurienes tas fails ir, kad tas ir izveidots un kurš to izveidojis, kā arī citu informāciju par to.',
+'uploadwarning'        => 'Augšupielādes brīdinājums',
+'savefile'             => 'Saglabāt failu',
+'uploadedimage'        => 'augšupielādēju "$1"',
+'uploaddisabled'       => 'Augšupielāde atslēgta',
+'uploaddisabledtext'   => 'Falu augšupielāde šajā wiki ir atslēgta.',
+'uploadcorrupt'        => 'Šis fails ir bojāts, vai arī tam ir nekorekts paplašinājums. Lūdzu pārbaudi failu un augšupielādē vēlreiz.',
+'uploadvirus'          => 'Šis fails satur vīrusu! Sīkāk: $1',
+'sourcefilename'       => 'Augšuplādējamais fails',
+'destfilename'         => 'Vajadzīgais faila nosaukums',
+
+'license' => 'Licence',
+
+# Image list
+'imagelist'                 => 'Attēlu uzskaitījums',
+'imagelisttext'             => 'Šobrīd redzams $1 attēlu uzskaitījums, kas sakārtots $2.',
+'ilsubmit'                  => 'Meklēt',
+'showlast'                  => 'Parādīt pēdējos $1 attēlus, kas sakārtoti $2.',
+'byname'                    => '<b>pēc nosaukuma</b>',
+'bydate'                    => '<b>pēc datuma</b>',
+'bysize'                    => '<b>pēc izmēra</b>',
+'imgdelete'                 => 'dzēst',
+'imgdesc'                   => 'apraksts',
+'imglegend'                 => 'Apzīmējumi: (apraksts) = parādīt vai mainīt attēla aprakstu.',
+'imghistory'                => 'Attēla hronoloģija',
+'revertimg'                 => 'atjaunot',
+'deleteimg'                 => 'dzēst',
+'deleteimgcompletely'       => 'Dzēst visas versijas',
+'imghistlegend'             => 'Apzīmējumi: (pašreizējais) = šā attēla pašreizējā versija, (dzēst) = dzēst šo veco versiju, 
+(atjaunot) = nomainīt pret šo veco versiju.
+<br /><i>Klikšķini uz datuma, lai aplūkotu tajā datumā augšuplādēto failu.</i>.',
+'imagelinks'                => 'Attēlu saites',
+'linkstoimage'              => 'Attēls ir izmantots šajās lapās:',
+'nolinkstoimage'            => 'Nevienā lapā nav norāžu uz šo attēlu.',
+'sharedupload'              => 'Šis fails ir no *** [[literal]] translation',
+'noimage'                   => 'Ar šādu nosaukumu nav neviena faila, tu vari [$1].',
+'noimage-linktext'          => 'augšuplādēt to',
+'uploadnewversion-linktext' => 'Augšupielādēt jaunu šī faila versiju',
+
+# List redirects
+'listredirects' => 'Pāradresāciju uzskaitījums',
+
+# Unused templates
+'unusedtemplates' => 'Neizmantotās veidnes',
+
+# Statistics
+'statistics'    => 'Statistika',
+'sitestats'     => '{{grammar:ģenitīvs|{{SITENAME}}}} statistika',
+'userstats'     => 'Statistika par lietotājiem',
+'sitestatstext' => "Datubāzē kopā ir '''\$1''' {{plural:\$1|lapa|lapas}}, ieskaitot diskusiju lapas, lapas par {{GRAMMAR:akuzatīvs|{{SITENAME}}}}, nelielas \"aizmetņu\" lapas (''stubs''), pāradresācijas lapas, kā arī citas lapas, kuras, iespējams, nevar nosaukt par pilnvērtīgām satura lapām. Neskaitot iepriekš minētās, {{grammar:lokatīvs|{{SITENAME}}}} ir '''\$2''' {{plural:\$2|lapa|lapas}}, {{plural:\$2|kuru|kuras}} var uzskatīt par pamatsatura {{plural:\$2|lapu|lapām}}.
+
+Augšupielādēti '''\$8''' faili.
+
+Kopš {{grammar:ģenitīvs|{{SITENAME}}}} izveidošanas lapas ir tikušas apskatītas '''\$3''' reizes un lietotāji ir izdarījuši '''\$4''' {{plural:\$4|labojumu|labojumus}} (katra lapa ir labota vidēji '''\$5''' reizes).
+Vidēji tas ir '''\$5''' labojumi uz lapu un apskatīšanas/labojumu attiecība ir '''\$6'''.
+
+The [http://meta.wikimedia.org/wiki/Help:Job_queue job queue] length is '''\$7'''.",
+'userstatstext' => "Reģistrēto lietotāju skaits ir '''$1'''. No tiem '''$2''' (jeb '''$4%''') ir administratori (skat. $3).",
+
+'disambiguations'     => 'Nozīmju atdalīšanas lapas',
+'disambiguationspage' => 'Template:Disambig',
+
+'doubleredirects'     => 'Divkāršas pāradresācijas lapas',
+'doubleredirectstext' => 'Katrā rindiņā ir saites uz pirmo un otro pāradresācijas lapu, kā arī pirmā rindiņa no otrās pāradresācijas lapas teksta, kas parasti ir faktiskā "gala" lapa, uz kuru vajadzētu būt saitei pirmajā lapā.',
+
+'brokenredirects'     => 'Kļūdainas pāradresācijas',
+'brokenredirectstext' => 'Šīs ir pāradresācijas lapas uz neesošām lapām.',
+
+# Miscellaneous special pages
+'nbytes'                  => '$1 baitu',
+'ncategories'             => '$1 categories',
+'nlinks'                  => '$1 {{PLURAL:$1|saite|saites}}',
+'nrevisions'              => '$1 {{PLURAL:$1|versija|versijas}}',
+'nviews'                  => '$1 views',
+'lonelypages'             => 'Lapas bez saitēm uz tām',
+'uncategorizedpages'      => 'Nekategorizētās lapas',
+'uncategorizedcategories' => 'Nekategorizētās kategorijas',
+'uncategorizedimages'     => 'Nekategorizētie attēli',
+'unusedcategories'        => 'Neizmantotas kategorijas',
+'unusedimages'            => 'Neizmantoti attēli',
+'popularpages'            => 'Populārākās lapas',
+'wantedcategories'        => 'Sarkanas kategorijas',
+'wantedpages'             => 'Pieprasītās lapas',
+'mostlinked'              => 'Lapas, uz kurām ir visvairāk norāžu',
+'mostlinkedcategories'    => 'Kategorijas, uz kurām ir visvairāk saišu',
+'mostcategories'          => 'Raksti ar visvairāk kategorijām',
+'mostimages'              => 'Attēli, uz kuriem ir visvairāk saišu',
+'mostrevisions'           => 'Raksti, kuriem ir visvairāk iepriekšēju versiju',
+'allpages'                => 'Visas lapas',
+'prefixindex'             => 'Meklēt pēc virsraksta pirmajiem burtiem',
+'randompage'              => 'Nejauša lapa',
+'shortpages'              => 'Īsākās lapas',
+'longpages'               => 'Garākās lapas',
+'deadendpages'            => 'Lapas bez izejošām saitēm',
+'listusers'               => 'Lietotāju uzskaitījums',
+'specialpages'            => 'Īpašās lapas',
+'spheading'               => 'Visiem lietotājiem pieejamās īpašās lapas',
+'restrictedpheading'      => 'Ierobežotās īpašās lapas',
+'rclsub'                  => '(lapās, kurās ir norādes uz "$1")',
+'newpages'                => 'Jaunas lapas',
+'ancientpages'            => 'Senākās lapas',
+'move'                    => 'Pārvietot',
+'movethispage'            => 'Pārvietot šo lapu',
+'unusedcategoriestext'    => 'Šīs kategorijas eksistē, tomēr nevienā rakstā vai kategorijās tās nav izmantotas.',
+
+# Book sources
+'booksources' => 'Grāmatu avoti',
+
+'categoriespagetext' => 'Wiki ir atrodamas šādas kategorijas.',
+'version'            => 'Versija',
+
+# Special:Log
+'specialloguserlabel'  => 'Lietotājs:',
+'speciallogtitlelabel' => 'Virsraksts:',
+'log'                  => 'Reģistri',
+'alllogstext'          => 'Augšupielādes, dzēšanas, aizsargāšanas, bloķēšanas un adminu reģistru apvienotais reģistrs.
+Tu vari sašaurināt aplūkojamo reģistru, izvēloties reģistra veidu, lietotāja vārdu vai reģistrēto lapu.',
+
+# Special:Allpages
+'allarticles'    => 'Visi raksti',
+'allpagessubmit' => 'Aiziet!',
+'allpagesprefix' => 'Parādīt lapas ar šādu virsraksta sākumu:',
+
+# E-mail user
+'mailnologin'     => 'Nav adreses, uz kuru sūtīt',
+'mailnologintext' => 'Tev jābūt [[Special:Userlogin|iegājušam]], kā arī tev jābūt [[Special:Preferences|norādītai]] derīgai e-pasta adresei, lai sūtītu e-pastu citiem lietotājiem.',
+'emailuser'       => 'Sūtīt e-pastu šim lietotājam',
+'emailpage'       => 'Sūtīt e-pastu lietotājam',
+'emailpagetext'   => 'Ja šis lietotājs ir norādījis reālu e-pasta adresi savu izvēļu lapā, tad ar šo veidni ir iespējams tam nosūtīt e-pastu. Tā e-pasta adrese, kuru tu esi norādījis savā izvēļu lapā, parādīsies e-pasta "From" lauciņā, tādēļ saņēmējs varēs tev atbildēt.',
+'defemailsubject' => 'E-pasts par {{grammar:akuzatīvs|{{SITENAME}}}}',
+'noemailtitle'    => 'Nav e-pasta adreses',
+'noemailtext'     => 'Šis lietotājs nav norādījis derīgu e-pasta adresi vai arī ir izvēlējies nesaņemt e-pastu no citiem lietotājiem.',
+'emailfrom'       => 'No',
+'emailto'         => 'Kam',
+'emailsubject'    => 'Temats',
+'emailmessage'    => 'Vēstījums',
+'emailsend'       => 'Nosūtīt',
+'emailsent'       => 'E-pasts nosūtīts',
+'emailsenttext'   => 'Tavs e-pasts ir nosūtīts.',
+
+# Watchlist
+'watchlist'            => 'Mani uzraugāmie raksti',
+'mywatchlist'            => 'Mani uzraugāmie raksti',
+'nowatchlist'          => 'Tavā uzraugāmo rakstu sarakstā nav neviena raksta.',
+'watchlistcount'       => "'''Tavā uzraugāmo sarakstā ir $1 vienumi, ieskaitot diskusiju lapas.'''",
+'clearwatchlist'       => 'Tīrīt uzraugāmo sarakstu',
+'watchlistcleartext'   => 'Vai esi pārliecināts, ka vēlies noņemt visus saraksta vienumus?',
+'watchlistclearbutton' => 'Tīrīt uzraugāmo sarakstu',
+'watchlistcleardone'   => 'Tavs uzraugāmo rakstu saraksts tika iztīrīts. Tika izmesti $1 raksti.',
+'watchnologin'         => 'Neesi iegājis',
+'watchnologintext'     => 'Tev ir [[Special:Userlogin|jāieiet]], lai mainītu uzraugāmo lapu sarakstu.',
+'addedwatch'           => 'Pievienots uzraugāmo sarakstam.',
+'removedwatch'         => 'Lapa vairs netiek uzraudzīta',
+'removedwatchtext'     => 'Lapa "$1" ir izņemta no tava uzraugāmo lapu saraksta.',
+'watch'                => 'Uzraudzīt',
+'watchthispage'        => 'Uzraudzīt šo lapu',
+'unwatch'              => 'Neuzraudzīt',
+'unwatchthispage'      => 'Pārtraukt uzraudzīšanu',
+'watchnochange'        => 'Neviena no tevis uzraudzītajām lapām nav mainīta parādītajā laika posmā.',
+'watchdetails'         => '* (Tu uzraugi $1 lapas, neieskaitot diskusiju lapas;
+* [[Special:Watchlist/edit|parādīt un mainīt visu sarakstu]];
+* [[Special:Watchlist/clear|Novākt visas lapas]]',
+'removechecked'        => 'Izņemt no uzraugāmajām lapām',
+'watchlistcontains'    => 'Tavā uzraugāmo lapu sarakstā ir $1 {{PLURAL:$1|lapa|lapas}}.',
+'watcheditlist'        => "Šajā lapā ir tevis uzraudzītās lapas, sakārtotas pēc alfabēta.<br />
+Atzīmē tās lapas, kuras tu vairs nevēlies uzraudzīt,<br />
+un klikšķini uz pogas \"'''Izņemt no uzraugāmajām lapām'''\".",
+'removingchecked'      => 'No uzraugāmo lapu saraksta izņemam atzīmētās lapas...',
+'wlshowlast'           => 'Parādīt izmaiņas pēdējo $1 stundu laikā vai $2 dienu laikā, vai arī $3.',
+
+# Delete/protect/revert
+'deletepage'           => 'Dzēst lapu',
+'confirm'              => 'Apstiprināt',
+'excontent'            => "lapas saturs bija: '$1'",
+'excontentauthor'      => 'saturs bija: "$1" (vienīgais autors: [[Special:Contributions/$2|$2]])',
+'exbeforeblank'        => "lapas saturs pirms satura dzēšanas bija šāds: '$1'",
+'exblank'              => 'lapa bija tukša',
+'confirmdelete'        => 'Apstiprināt dzēšanu',
+'deletesub'            => '(Dzēst "$1")',
+'historywarning'       => 'Brīdinājums: Tu dzēsīsi lapu, kurai ir saglabātas iepriekšējas versijas.',
+'confirmdeletetext'    => 'Tu tūlīt no datubāzes dzēsīsi lapu vai attēlu, kā arī to iepriekšējās versijas. Lūdzu, apstiprini, ka tu tiešām to vēlies darīt, ka tu apzinies sekas un ka tu to dari saskaņā ar [[Project:Vadlīnijas|vadlīnijām]].',
+'deletedtext'          => 'Lapa "$1" ir izdzēsta.
+Šeit var apskatīties pēdējos izdzēstos: "$2".',
+'deletedarticle'       => 'izdzēsu "$1"',
+'dellogpage'           => 'Dzēšanas reģistrs',
+'dellogpagetext'       => 'Šajā lapā ir pēdējo dzēsto lapu saraksts.',
+'deletionlog'          => 'dzēšanas reģistrs',
+'reverted'             => 'Atjaunots uz iepriekšējo versiju',
+'deletecomment'        => 'Dzēšanas iemesls',
+'rollback'             => 'Novērst labojumus',
+'rollback_short'       => 'Novērst',
+'rollbacklink'         => 'novērst',
+'rollbackfailed'       => 'Novēršana neizdevās',
+'cantrollback'         => 'Nav iespējams novērst labojumu; iepriekšējais labotājs ir vienīgais lapas autors.',
+'alreadyrolled'        => 'Nav iespējams novērst pēdējās izmaiņas, ko lapā [[$1]] saglabāja [[User:$2|$2]] ([[User talk:$2|Diskusija]]). Kāds cits jau ir rediģējis šo lapu vai novērsis izmaiņas.
+
+Pēdējās izmaiņas saglabāja [[User:$3|$3]] ([[User talk:$3|diskusija]])',
+'revertpage'           => 'Novērsu izmaiņas, ko izdarīja [[Special:Contributions/$2|$2]], atjaunoju versiju, ko saglabāja $1',
+'sessionfailure'       => "Ir radusies problēma ar sesijas autentifikāciju;
+šī darbība ir atcelta, lai novērstu lietotājvārda iespējami ļaunprātīgu izmantošanu.
+Lūdzu, spied \"''back''\" un atjaunini iepriekšējo lapu. Tad mēģini vēlreiz.",
+'protectlogpage'       => 'Aizsargāšanas reģistrs',
+'protectedarticle'     => 'aizsargāja $1',
+'unprotectedarticle'   => 'atcēla aizsardzību: $1',
+'protectsub'           => '(Aizsargāt "$1"?)',
+'confirmprotecttext'   => 'Vai tu tiešām vēlies aizsargāt šo lapu?',
+'confirmprotect'       => 'Apstiprināt aizsargāšanu',
+'protectmoveonly'      => 'Aizsargāt tikai pret pārdēvēšanu',
+'protectcomment'       => 'Aizsargāšanas iemesls',
+'unprotectsub'         => '(Neaizsargāt "$1"?)',
+'confirmunprotecttext' => 'Vai tu tiešām vēlies atcelt šīs lapas aizsardzību?',
+'confirmunprotect'     => 'Apstiprināt aizsardzības atcelšanu',
+'unprotectcomment'     => 'Aizsardzības atcelšanas iemesls',
+
+# Undelete
+'undelete'           => 'Atjaunot dzēstu lapu',
+'undeletepage'       => 'Skatīt un atjaunot dzēstās lapas',
+'undeletepagetext'   => 'Šīs lapas ir dzēstas, bet ir saglabātas arhīvā. Tās ir iespējams atjaunot, bet ņemiet vērā, ka arhīvs reizēm tiek tīrīts.',
+'undeleterevisions'  => '$1 {{PLURAL:$1|versija|versijas}} {{PLURAL:$1|arhivēta|arhivētas}}',
+'undeletehistory'    => 'Ja tu atjauno lapu, visas versijas tiks atjaunotas tās hronoloģijā.
+Ja pēc dzēšanas ir izveidota jauna lapa ar tādu pašu nosaukumu, atjaunotās versijas tiks ievietotas lapas hronoloģijā attiecīgā secībā un konkrētās lapas pašreizējā versija netiks automātiski nomainīta.',
+'undeletebtn'        => 'Atjaunot!',
+'undeletedarticle'   => 'atjaunoju "$1"',
+'undeletedrevisions' => '$1 {{PLURAL:$1|versija|versijas}} {{PLURAL:$1|atjaunota|atjaunotas}}',
+
+# Namespace form on various pages
+'namespace' => 'Lapas veids:',
+'invert'    => 'Izvēlēties pretēji',
+
+# Contributions
+'contributions' => 'Lietotāja devums',
+'mycontris'     => 'Mans devums',
+'contribsub2'    => 'Lietotājs: $1 ($2)',
+'nocontribs'    => 'Netika atrastas izmaiņas, kas atbilstu šiem kritērijiem.',
+'uctop'         => '(pēdējā izmaiņa)',
+
+'sp-contributions-newest' => 'jaunākās',
+'sp-contributions-oldest' => 'senākās',
+'sp-contributions-newer'  => 'jaunākas $1',
+'sp-contributions-older'  => 'senākas $1',
+
+# What links here
+'whatlinkshere' => 'Norādes uz šo rakstu',
+'linklistsub'   => '(Saišu uzskaitījums)',
+'linkshere'     => 'Šajās lapās ir norādes uz šo lapu:',
+'nolinkshere'   => 'Nevienā lapā nav norāžu uz šo lapu.',
+'isredirect'    => 'pāradresācijas lapa',
+'istemplate'    => 'izsaukts',
+
+# Block/unblock
+'blockip'            => 'Bloķēt lietotāju',
+'blockiptext'        => 'Šo veidni izmanto, lai bloķētu kādas IP adreses vai lietotājvārda piekļuvi wiki lapu saglabāšanai. Dari to tikai, lai novērstu vandālismu atbilstoši [[Project:Vadlīnijas|noteikumiem]].
+Norādi konkrētu iemeslu (piemēram, linkus uz vandalizētajām lapām).',
+'ipaddress'          => 'IP adrese/lietotājvārds',
+'ipadressorusername' => 'IP adrese vai lietotājvārds',
+'ipbexpiry'          => 'Termiņš',
+'ipbreason'          => 'Iemesls',
+'ipbsubmit'          => 'Bloķēt šo lietotāju',
+'ipbother'           => 'Cits laiks',
+'ipboptions'         => '2 stundas:2 hours,1 diena:1 day,3 dienas:3 days,1 nedēļa:1 week,2 nedēļas:2 weeks,1 mēnesis:1 month,3 mēneši:3 months,6 mēneši:6 months,1 gads:1 year,uz nenoteiktu laiku:infinite',
+'ipbotheroption'     => 'cits',
+'badipaddress'       => 'Nederīga IP adrese',
+'blockipsuccesssub'  => 'Nobloķēts veiksmīgi',
+'ipblocklist'        => 'Bloķēto IP adrešu un lietotājvārdu uzskaitījums',
+'blocklistline'      => '$1 $2 bloķēja $3 (termiņš $4)',
+'expiringblock'      => 'beidzas $1',
+'blocklink'          => 'bloķēt',
+'unblocklink'        => 'atbloķēt',
+'contribslink'       => 'devums',
+'blocklogpage'       => 'Bloķēšanas reģistrs',
+'ipb_expiry_invalid' => 'Nederīgs beigu termiņš',
+'ip_range_invalid'   => 'Nederīgs IP diapazons',
+'proxyblocker'       => 'Starpniekservera bloķētājs',
+'proxyblocksuccess'  => 'Darīts.',
+
+# Move page
+'movepage'         => 'Pārvietot lapu',
+'movepagetext'     => "Šajā lapā tu vari pārdēvēt vai pārvietot lapu, kopā tās izmaiņu hronoloģiju pārvietojot to uz citu nosaukumu.
+Iepriekšējā lapa kļūs par lapu, kas pāradresēs uz jauno lapu.
+Saites uz iepriekšējo lapu netiks mainītas, bet noteikti pārbaudi un izlabo, izskaužot dubultu pāradresāciju vai pāradresāciju uz neesošu lapu.
+Tev ir jāpārliecinās, vai saites vēl aizvien ved tur, kur tās ir paredzētas.
+
+Ņem vērā, ka lapa '''netiks''' pārvietota, ja jau eksistē kāda cita lapa ar vēlamo nosaukumu (izņemot gadījumus, kad tā ir tukša vai kad tā ir pāradresācijas lapa, kā arī tad, ja tai nav izmaiņu hronoloģijas). Tas nozīmē, ka tu vari pārvietot lapu atpakaļ, no kurienes tu jau reiz to esi pārvietojis, ja būsi kļūdījies, bet tu nevari pārrakstīt jau esošu lapu.
+
+<b>BRĪDINĀJUMS!</b>
+Populārām lapām tā var būt krasa un negaidīta pārmaiņa; pirms turpināšanas vēlreiz pārdomā, vai tu izproti visas iespējamās sekas.",
+'movepagetalktext' => "Saistītā diskusiju lapa, ja tāda eksistē, tiks automātiski pārvietota, '''izņemot gadījumus, kad''':
+*tu pārvieto lapu uz citu palīglapu (piemēram, [[Project talk:{{SITENAME}}]] uz [[Project:{{SITENAME}}]]),
+*ar jauno nosaukumu jau eksistē diskusiju lapa, vai arī
+*atzīmēsi zemāk atrodamo lauciņu.
+
+Ja tomēr vēlēsies, tad tev šī diskusiju lapa būs jāpārvieto vai jāapvieno pašam.",
+'movearticle'      => 'Pārvietot lapu',
+'movenologin'      => 'Neesi iegājis kā reģistrēts lietotājs',
+'movenologintext'  => 'Tev ir jābūt reģistrētam lietotājam un jābūt [[Special:Userlogin|iegājušam]] {{grammar:lokatīvs|{{SITENAME}}}}, lai pārvietotu lapu.',
+'newtitle'         => 'Uz šādu lapu',
+'movepagebtn'      => 'Pārvietot lapu',
+'pagemovedsub'     => 'Pārvietošana notikusi veiksmīgi',
+'pagemovedtext'    => 'Lapa "[[$1]]" ir pārvietota uz "[[$2]]".
+
+
+\'\'\'Lūdzu [[Special:Whatlinkshere/$2|pārbaudi]]\'\'\', vai šī pārvietošana nav radījusi [[Project:Dubulta pāradresācija|dubultu pāradresāciju]] un pēc vajadzības izlabo to.',
+'articleexists'    => 'Lapa ar tādu nosaukumu jau pastāv vai arī tevis izvēlētais nosaukums ir nederīgs. Lūdzu, izvēlies citu nosaukumu.',
+'movedto'          => 'pārvietota uz',
+'movetalk'         => 'Pārvietot arī diskusiju lapu, ja tāda ir.',
+'talkpagemoved'    => 'Tika pārvietota arī atbilstošā diskusiju lapa.',
+'talkpagenotmoved' => 'Atbilstošā diskusiju lapa <strong>netika</strong> pārvietota.',
+'1movedto2'        => '"[[$1]]" pārdēvēju par "[[$2]]"',
+'1movedto2_redir'  => '$1 pārdēvēju par $2, izmantojot pāradresāciju',
+'movelogpage'      => 'Pārvietošanas reģistrs',
+'movelogpagetext'  => 'Lapu pārvietošanas (pārdēvēšanas) reģistrs.',
+'movereason'       => 'Iemesls',
+'revertmove'       => 'atcelt',
+
+# Export
+'export' => 'Eksportēt lapas',
+
+# Namespace 8 related
+'allmessages'               => 'Visi sistēmas paziņojumi',
+'allmessagesname'           => 'Nosaukums',
+'allmessagesdefault'        => 'Sākotnējais teksts',
+'allmessagescurrent'        => 'Pašreizējais teksts',
+'allmessagestext'           => "Šajā lapā ir visu \"'''Mediawiki:'''\" lapās atrodamo sistēmas paziņojumu uzskaitījums.",
+'allmessagesnotsupportedUI' => 'Your current interface language <b>$1</b> is not supported by special:Allmessages at this site.',
+'allmessagesnotsupportedDB' => 'special:Allmessages not supported because wgUseDatabaseMessages is off.',
+
+# Thumbnails
+'thumbnail-more' => 'Palielināt',
+'missingimage'   => '<b>Trūkst attēla</b><br /><i>$1</i>',
+'filemissing'    => 'Trūkst faila',
+
+# Tooltip help for the actions
+'tooltip-pt-userpage'             => 'Mana lietotāja lapa',
+'tooltip-pt-anonuserpage'         => 'Manas IP adreses lietotāja lapa',
+'tooltip-pt-mytalk'               => 'Mana diskusiju lapa',
+'tooltip-pt-anontalk'             => 'Diskusija par labojumiem, kas izdarīti no šīs IP adreses',
+'tooltip-pt-preferences'          => 'Manas izvēles',
+'tooltip-pt-watchlist'            => 'Manis uzraudzītās lapas.',
+'tooltip-pt-mycontris'            => 'Mani ieguldījumi',
+'tooltip-pt-login'                => 'Aicinām tevi ieiet {{grammar:lokatīvs|{{SITENAME}}}}, tomēr tas nav obligāti.',
+'tooltip-pt-anonlogin'            => 'Aicinām tevi ieiet {{grammar:lokatīvs|{{SITENAME}}}}, tomēr tas nav obligāti.',
+'tooltip-pt-logout'               => 'Iziet',
+'tooltip-ca-talk'                 => 'Diskusija par šī raksta lapu',
+'tooltip-ca-edit'                 => 'Izmainīt šo lapu. Lūdzam izmantot pirmskatu pirms lapas saglabāšanas.',
+'tooltip-ca-addsection'           => 'Pievienot komentāru šai diskusijai.',
+'tooltip-ca-viewsource'           => 'Šī lapa ir aizsargāta. Tu vari apskatīties tās izejas kodu.',
+'tooltip-ca-history'              => 'Šīs lapas iepriekšējās versijas.',
+'tooltip-ca-protect'              => 'Aizsargāt šo lapu',
+'tooltip-ca-delete'               => 'Dzēst šo lapu',
+'tooltip-ca-undelete'             => 'Atjaunot labojumus, kas izdarīti šajā lapā pirms lapas dzēšanas.',
+'tooltip-ca-move'                 => 'Pārvietot šo lapu',
+'tooltip-ca-watch'                => 'Pievienot šo lapu manis uzraudzītajām lapām',
+'tooltip-ca-unwatch'              => 'Izņemt šo lapu no uzraudzītajām lapām',
+'tooltip-search'                  => 'Meklēt šajā wiki',
+'tooltip-p-logo'                  => 'Sākumlapa',
+'tooltip-n-mainpage'              => 'Iet uz sākumlapu',
+'tooltip-n-portal'                => 'Par šo projektu, par to, ko tu vari šeit darīt un kur ko atrast',
+'tooltip-n-currentevents'         => 'Uzzini papildinformāciju par šobrīd aktuālajiem notikumiem',
+'tooltip-n-recentchanges'         => 'Izmaiņas, kas nesen izdarītas šajā wiki.',
+'tooltip-n-randompage'            => 'Iet uz nejauši izvēlētu lapu',
+'tooltip-n-help'                  => 'Vieta, kur uzzināt.',
+'tooltip-n-sitesupport'           => 'Atbalsti mūs',
+'tooltip-t-whatlinkshere'         => 'Visas wiki lapas, kurās ir saites uz šejieni',
+'tooltip-t-recentchangeslinked'   => 'Izmaiņas, kas nesen izdarītas lapās, kurās ir saites uz šo lapu',
+'tooltip-feed-rss'                => 'Šīs lapas RSS barotne',
+'tooltip-feed-atom'               => 'Šīs lapas Atom barotne',
+'tooltip-t-contributions'         => 'Apskatīt šā lietotāja ieguldījumu uzskaitījumu.',
+'tooltip-t-emailuser'             => 'Sūtīt e-pastu šim lietotājam',
+'tooltip-t-upload'                => 'Augšuplādēt attēlus vai multimēdiju failus',
+'tooltip-t-specialpages'          => 'Visu īpašo lapu uzskaitījums',
+'tooltip-ca-nstab-main'           => 'Apskatīt rakstu',
+'tooltip-ca-nstab-user'           => 'Apskatīt lietotāja lapu',
+'tooltip-ca-nstab-media'          => 'Apskatīt multimēdiju lapu',
+'tooltip-ca-nstab-special'        => 'Šī ir īpašā lapa, tu nevari izmainīt pašu lapu.',
+'tooltip-ca-nstab-project'        => 'Apskatīt projekta lapu',
+'tooltip-ca-nstab-image'          => 'Apskatīt attēla lapu',
+'tooltip-ca-nstab-mediawiki'      => 'Apskatīt sistēmas paziņojumu',
+'tooltip-ca-nstab-template'       => 'Apskatīt veidni',
+'tooltip-ca-nstab-help'           => 'Apskatīt palīdzības lapu',
+'tooltip-ca-nstab-category'       => 'Apskatīt kategorijas lapu',
+'tooltip-minoredit'               => 'Atzīmēt šo par maznozīmīgu labojumu',
+'tooltip-save'                    => 'Saglabāt veiktās izmaiņas',
+'tooltip-preview'                 => 'Parādīt izmaiņu priekšskatījumu. Lūdzam izmantot šo iespēju pirms saglabāšanas.',
+'tooltip-diff'                    => 'Parādīt, kā esi izmainījis tekstu.',
+'tooltip-compareselectedversions' => 'Aplūkot atšķirības starp divām izvēlētajām lapas versijām.',
+'tooltip-watch'                   => 'Pievienot šo lapu uzraugāmo lapu sarakstam',
+
+# Attribution
+'anonymous' => 'Anonīmie {{grammar:ģenitīvs|{{SITENAME}}}} lietotāji(s)',
+'siteuser'  => '{{grammar:ģenitīvs|{{SITENAME}}}} lietotājs $1',
+'and'       => 'un',
+
+# Spam protection
+'subcategorycount'       => 'Šajā kategorijā ir $1 {{PLURAL:$1|apakškategorija|apakškategorijas}}.',
+'categoryarticlecount'   => 'Šajā kategorijā ir $1 {{PLURAL:$1|raksts|raksti}}.',
+'listingcontinuesabbrev' => ' (turpinājums)',
+
+# Math options
+'mw_math_png'    => 'Vienmēr attēlot PNG',
+'mw_math_simple' => 'HTML, ja ļoti vienkārši, vai arī PNG',
+'mw_math_html'   => 'HTML, ja iespējams, vai arī PNG',
+'mw_math_source' => 'Saglabāt kā TeX (teksta pārlūkiem)',
+'mw_math_modern' => 'Moderniem pārlūkiem ieteiktais variants',
+'mw_math_mathml' => 'MathML, ja iespējams (eksperimentāla iespēja)',
+
+# Browsing diffs
+'previousdiff' => '← Salīdzināt ar iepriekšējo versiju',
+'nextdiff'     => 'Salīdzināt ar nākamo versiju →',
+
+# Media information
+'imagemaxsize' => 'Attēlu apraksta lappusēs parādāmo attēlu maksimālais izmērs:',
+'thumbsize'    => 'Sīkbildes (<i>thumbnail</i>) izmērs:',
+
+'newimages'    => 'Jauno attēlu galerija',
+'showhidebots' => '($1 botus)',
+'noimages'     => 'Nav nekā ko redzēt.',
+
+'passwordtooshort' => 'Tava parole ir pārāk īsa. Tajā jābūt vismaz $1 zīmēm.',
+
+# Metadata
+'metadata-expand'   => 'Parādīt papildu detaļas',
+'metadata-collapse' => 'Paslēpt papildu detaļas',
+
+# EXIF tags
+'exif-imagewidth'       => 'platums',
+'exif-imagelength'      => 'augstums',
+'exif-bitspersample'    => 'biti komponentē',
+'exif-compression'      => 'Saspiešanas veids',
+'exif-xresolution'      => 'Horizontālā izšķirtspēja',
+'exif-yresolution'      => 'Vertikālā izšķirtspēja',
+'exif-resolutionunit'   => 'X un Y izšķirtspējas mērvienība',
+'exif-make'             => 'Fotoaparāta ražotājs',
+'exif-exifversion'      => 'EXIF versija',
+'exif-pixelxdimension'  => 'Valind image height',
+'exif-datetimeoriginal' => 'Izveidošanas datums un laiks',
+'exif-gpslatituderef'   => 'Ziemeļu vai dienvidu platums',
+'exif-gpslatitude'      => 'Platums',
+'exif-gpslongituderef'  => 'Austrumu vai rietumu garums',
+'exif-gpslongitude'     => 'Garums',
+'exif-gpsaltitude'      => 'Augstums',
+
+# External editor support
+'edit-externally'      => 'Izmainīt šo failu ar ārēju programmu',
+'edit-externally-help' => 'Skat. [http://meta.wikimedia.org/wiki/Help:External_editors instrukcijas] Meta-Wiki, lai iegūtu vairāk informācijas.',
+
+# 'all' in various places, this might be different for inflected languages
+'recentchangesall' => 'visi',
+'imagelistall'     => 'visas',
+'watchlistall1'    => 'visas',
+'watchlistall2'    => 'visas',
+'namespacesall'    => 'visas',
+
+# E-mail address confirmation
+'confirmemail'            => 'Apstiprini e-pasta adresi',
+'confirmemail_text'       => 'Šajā wiki ir nepieciešams apstiprināt savu e-pasta adresi, lai izmantotu e-pasta funkcijas. Spied uz zemāk esošās pogas, lai uz tavu e-pasta adresi nosūtītu apstiprināšanas e-pastu. Tajā būs saite ar kodu; spied uz tās saites vai atver to savā interneta pārlūkā, lai apstiprinātu tavas e-pasta adreses derīgumu.',
+'confirmemail_send'       => 'Nosūtīt apstiprināšanas kodu',
+'confirmemail_sent'       => 'Apstiprināšanas e-pasts nosūtīts.',
+'confirmemail_sendfailed' => 'Nevarējām nosūtīt apstiprināšanas e-pastu. Pārbaudi, vai adresē nav kāds nepareizs simbols.',
+'confirmemail_invalid'    => 'Nederīgs apstiprināšanas kods. Iespējams, beidzies tā termiņš.',
+'confirmemail_success'    => 'Tava e-pasta adrese ir apstiprināta. Tagad vari doties iekšā ar savu lietotājvārdu un pilnvērtīgi izmantot wiki iespējas.',
+'confirmemail_loggedin'   => 'Tava e-pasta adrese tagad ir apstiprināta.',
+'confirmemail_error'      => 'Notikusi kāda kļūme ar tava apstiprinājuma saglabāšanu.',
+'confirmemail_subject'    => 'E-pasta adreses apstiprinajums no {{grammar:ģenitīvs|{{SITENAME}}}}',
+'confirmemail_body'       => 'Kads, iespejams, tu pats, no IP adreses $1 ir registrejis {{grammar:ģenitīvs|{{SITENAME}}}} lietotaja vardu "$2" ar so e-pasta adresi.
+
+Lai apstiprinatu, ka so lietotaja vardu esi izveidojis tu pats, un aktivizetu e-pasta izmantosanu {{SITENAME}}, atver so saiti sava interneta parluka:
+
+$3
+
+Ja tu *neesi* registrejis sadu lietotaja vardu, nespied uz saites. Si apstiprinajuma kods deriguma termins ir $4.',
+
+# Inputbox extension, may be useful in other contexts as well
+'createarticle' => 'Izveidot rakstu',
+
+# Scary transclusion
+'scarytranscludedisabled' => '[Starpviki saišu iekļaušana ir atspējota.]',
+'scarytranscludefailed'   => '[Atvaino, neizdevās ienest veidni $1.]',
+'scarytranscludetoolong'  => '[Atvaino, URL adrese ir pārāk gara.]',
+
+'searchcontaining' => "Meklēt rakstus, kas satur ''$1''.",
+'searchnamed'      => "Meklēt rakstus ar nosaukumu ''$1''.",
+'articletitles'    => "Raksti, kas sākas ar ''$1''",
+'hideresults'      => 'Paslēpt rezultātus',
+
+'loginlanguagelabel' => 'Valoda: $1',
+
+# Auto-summaries
+'autoredircomment' => 'Pāradresē uz [[$1]]', # This should be changed to the new naming convention, but existed beforehand
+
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesMi.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesMi.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesMi.php	(revision 1280)
@@ -0,0 +1,111 @@
+<?php
+/** Maori (Māori)
+ *
+ * @addtogroup Language
+ */
+
+$messages = array(
+# Dates
+'sunday'    => 'Rātapu',
+'monday'    => 'Rāhina',
+'tuesday'   => 'Rātū',
+'wednesday' => 'Rāapa',
+'thursday'  => 'Rāpare',
+'friday'    => 'Rāmere',
+'saturday'  => 'Rāhoroi',
+'january'   => 'Kohi-tātea',
+'february'  => 'Hui-tanguru',
+'march'     => 'Poutū-te-rangi',
+'april'     => 'Paenga-whāwhā',
+'may_long'  => 'Haratua',
+'june'      => 'Pipiri',
+'july'      => 'Hōngongoi',
+'august'    => 'Here-turi-kōkā',
+'september' => 'Mahuru',
+'october'   => 'Whiringa-ā-nuku',
+'november'  => 'Whiringa-ā-rangi',
+'december'  => 'Hakihea',
+
+'mainpage' => 'Hau Kāinga',
+
+'portal'         => 'Tomokanga hapori',
+'portal-url'     => 'Project:Tomokanga hapori',
+'help'           => 'Whakamārama',
+'sitesupport'    => 'Koha',
+'cancel'         => 'Whakakore',
+'qbspecialpages' => 'Whārangi motuhake',
+'mytalk'         => 'Karere mōku',
+'navigation'     => 'Huarahi',
+
+'currentevents'     => 'Kōrero',
+'currentevents-url' => 'Project:Kōrero',
+
+'search'           => 'Rapua',
+'go'               => 'Haere',
+'history'          => 'Kōrero Nehe',
+'history_short'    => 'Tuhinga/kaituhi',
+'printableversion' => 'Tāia',
+'permalink'        => 'Hononga toitū',
+'edit'             => 'Whakatika',
+'delete'           => 'tangohia',
+'protect'          => 'Whakangungua',
+'talk'             => 'Kōrerorero',
+'toolbox'          => 'Pouaka utauta',
+
+'toc'     => 'Rārangi kōrero',
+'showtoc' => 'whakakite',
+'hidetoc' => 'hunaia',
+
+# Short words for each namespace, by default used in the 'article' tab in monobook
+'nstab-main'     => 'tuhi pānui',
+'nstab-template' => 'papa tauira',
+'nstab-help'     => 'Āwhina',
+'nstab-category' => 'Wāhanga',
+
+# Login and logout pages
+'userlogout' => 'Whakarere',
+
+# Edit pages
+'savearticle' => 'Tiaki',
+'showdiff'    => 'Tiro rerekētanga',
+
+# Preferences page
+'preferences' => 'Kōwhiringa',
+
+# Recent changes
+'recentchanges' => 'Rerekētanga hōu',
+'hide'          => 'Hunaia',
+'show'          => 'Whakaaturia',
+
+# Upload
+'upload' => 'Tuku atu',
+
+# Miscellaneous special pages
+'allpages'            => 'Ngā whārangi katoa',
+'randompage'          => 'Tipihaere',
+'specialpages'        => 'Whārangi motuhake',
+'recentchangeslinked' => 'Rerekētanga pū tahi',
+'move'                => 'Nekehia',
+
+# Special:Allpages
+'allpagessubmit' => 'Haere',
+
+# Watchlist
+'watchlist' => 'Rārangi mātaki',
+'mywatchlist' => 'Rārangi mātaki',
+'watch'     => 'Mātaki',
+'unwatch'   => 'kāti te mātaki',
+
+# Contributions
+'contributions' => 'Ngā mahi a tēnei mema',
+'mycontris'     => 'āku mahi',
+
+# What links here
+'whatlinkshere' => 'Ngā hononga mai',
+
+# Namespace 8 related
+'allmessages' => 'Pānui pūnaha',
+
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesMk.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesMk.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesMk.php	(revision 1280)
@@ -0,0 +1,1743 @@
+<?php
+/** Macedonian (Македонски)
+ *
+ * @addtogroup Language
+ */
+
+$skinNames = array(
+	'standard'    => 'Класика',
+	'nostalgia'   => 'Носталгија',
+	'cologneblue' => 'Келнско сино',
+	'davinci'     => 'ДаВинчи',
+	'mono'        => 'Моно',
+	'monobook'    => 'Monobook',
+	'myskin'      => 'Моја маска',
+	'chick'       => 'Шик'
+);
+
+$magicWords = array(
+	'redirect'              => array( 0, '#redirect', '#пренасочување', '#види' ),
+	'notoc'                 => array( 0, '__NOTOC__', '__БЕЗСОДРЖИНА__' ),
+	'forcetoc'              => array( 0, '__FORCETOC__', '__СОСОДРЖИНА__' ),
+	'toc'                   => array( 0, '__TOC__', '__СОДРЖИНА__' ),
+	'noeditsection'         => array( 0, '__NOEDITSECTION__' , '__БЕЗ_УРЕДУВАЊЕ_НА_СЕКЦИИ__'),
+	'start'                 => array( 0, '__START__' , '__ПОЧЕТОК__' ),
+	'currentmonth'          => array( 1, 'CURRENTMONTH', 'СЕГАШЕНМЕСЕЦ' ),
+	'currentmonthname'      => array( 1, 'CURRENTMONTHNAME', 'СЕГАШЕНМЕСЕЦИМЕ' ),
+	'currentmonthnamegen'   => array( 1, 'CURRENTMONTHNAMEGEN', 'СЕГАШЕНМЕСЕЦИМЕРОД' ),
+	'currentmonthabbrev'    => array( 1, 'CURRENTMONTHABBREV', 'СЕГАШЕНМЕСЕЦСКР' ),
+	'currentday'            => array( 1, 'CURRENTDAY', 'СЕГАШЕНДЕН' ),
+	'currentdayname'        => array( 1, 'CURRENTDAYNAME', 'СЕГАШЕНДЕНИМЕ' ),
+	'currentyear'           => array( 1, 'CURRENTYEAR', 'СЕГАШНАГОДИНА' ),
+	'currenttime'           => array( 1, 'CURRENTTIME', 'СЕГАШНОВРЕМЕ' ),
+	'numberofarticles'      => array( 1, 'NUMBEROFARTICLES', 'БРОЈСТАТИИ' ),
+	'pagename'              => array( 1, 'PAGENAME', 'СТРАНИЦА' ),
+	'pagenamee'             => array( 1, 'PAGENAMEE', 'СТРАНИЦАИ' ),
+	'namespace'             => array( 1, 'NAMESPACE', 'ИМЕПРОСТОР' ),
+	'subst'                 => array( 0, 'SUBST:', 'ЗАМЕСТ:' ),
+	'msgnw'                 => array( 0, 'MSGNW:', 'ИЗВЕШТNW:' ),
+	'end'                   => array( 0, '', '__КРАЈ__' ),
+	'img_thumbnail'         => array( 1, 'thumbnail', 'thumb', 'мини' ),
+	'img_right'             => array( 1, 'right', 'десно', 'д' ),
+	'img_left'              => array( 1, 'left', 'лево', 'л' ),
+	'img_none'              => array( 1, 'none', 'н' ),
+	'img_width'             => array( 1, '$1px', '$1пкс' , '$1п' ),
+	'img_center'            => array( 1, 'center', 'centre', 'центар', 'ц' ),
+	'img_framed'            => array( 1, 'framed', 'enframed', 'frame', 'рамка', 'ворамка' ),
+	'int'                   => array( 0, 'INT:' ),
+	'sitename'              => array( 1, 'SITENAME', 'ИМЕНАСАЈТ' ),
+	'ns'                    => array( 0, 'NS:' ),
+	'localurl'              => array( 0, 'LOCALURL:', 'ЛОКАЛНААДРЕСА:' ),
+	'localurle'             => array( 0, 'LOCALURLE:', 'ЛОКАЛНААДРЕСАИ:' ),
+	'server'                => array( 0, 'SERVER', 'СЕРВЕР' ),
+	'grammar'               => array( 0, 'GRAMMAR:', 'ГРАМАТИКА:' ),
+	'notitleconvert'        => array( 0, '__NOTITLECONVERT__', '__NOTC__'),
+	'nocontentconvert'      => array( 0, '__NOCONTENTCONVERT__', '__NOCC__'),
+	'currentweek'           => array( 1, 'CURRENTWEEK', 'СЕГАШНАСЕДМИЦА'),
+	'currentdow'            => array( 1, 'CURRENTDOW' ),
+	'revisionid'            => array( 1, 'REVISIONID' ),
+);
+
+$namespaceNames = array(
+	NS_MEDIA          => 'Медија',
+	NS_SPECIAL        => 'Специјални',
+	NS_MAIN           => '',
+	NS_TALK           => 'Разговор',
+	NS_USER           => 'Корисник',
+	NS_USER_TALK      => 'Разговор_со_корисник',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK   => 'Разговор_за_$1',
+	NS_IMAGE          => 'Слика',
+	NS_IMAGE_TALK     => 'Разговор_за_слика',
+	NS_MEDIAWIKI      => 'МедијаВики',
+	NS_MEDIAWIKI_TALK => 'Разговор_за_МедијаВики',
+	NS_TEMPLATE       => 'Шаблон',
+	NS_TEMPLATE_TALK  => 'Разговор_за_шаблон',
+	NS_HELP           => 'Помош',
+	NS_HELP_TALK      => 'Разговор_за_помош',
+	NS_CATEGORY       => 'Категорија',
+	NS_CATEGORY_TALK  => 'Разговор_за_категорија',
+);
+
+$linkTrail = '/^([a-zабвгдѓежзѕијклљмнњопрстќуфхцчџш]+)(.*)$/sDu';
+$separatorTransformTable = array(',' => '.', '.' => ',' );
+
+$messages = array(
+'tog-underline'         => 'Потцртај ги врските',
+'tog-highlightbroken'   => 'Покажи ги неправилните врски <a href="" class="new">вака</a> (алтернативно: вака<a href="" class="internal">?</a>).',
+'tog-justify'           => 'Двостранично порамнување на параграфите',
+'tog-hideminor'         => 'Сокриј ги ситните уредувања во скорешните промени',
+'tog-extendwatchlist'   => 'Прошири ја листа на набљудувања за да ги прикаже сите можни промени',
+'tog-usenewrc'          => 'Подобри ги скорешните промени (JavaScript)',
+'tog-numberheadings'    => 'Нумерирај ги заглавијата',
+'tog-showtoolbar'       => 'Алатник за уредување (JavaScript)',
+'tog-editondblclick'    => 'Уредување при двојно кликнување (JavaScript)',
+'tog-editsection'       => 'Овозможи уредување на секција преку (уредување) врски',
+'tog-editsectiononrightclick'=> 'Овозможи уредување при десен клик<br /> на насловите на секциите (JavaScript)',
+'tog-showtoc'           => 'Покажи содржина<br />(за страници со повеќе од 3 заглавија)',
+'tog-rememberpassword'  => 'Запомни ја лозинката меѓу сесии',
+'tog-editwidth'         => 'Максимална ширина на кутијата за уредување',
+'tog-watchcreations'    => 'Додади ги страниците што ги креирам јас во мојата набљудувана листа',
+'tog-watchdefault'      => 'Додади ги страниците што ги уредуваш во набљудувани страници',
+'tog-minordefault'      => 'Обележи ги сите уредувања како ситни по основно',
+'tog-previewontop'      => 'Прикажи го прегледот пред кутијата за уредување, а не после неа',
+'tog-previewonfirst'    => 'Прикажи преглед на првото уредување',
+'tog-nocache'           => 'Без складирање на страниците',
+'tog-enotifwatchlistpages'=> 'Испрати ми е-пошта при промена на страницата',
+'tog-enotifusertalkpages'=> 'Испрати ми е-пошта при промена на мојата страница за разговор',
+'tog-enotifminoredits'  => 'Испрати ми, исто така, е-пошта за ситни промени на страници',
+'tog-enotifrevealaddr'  => 'Откриј ја мојата е-поштенска адреса во пораките за известување',
+'tog-shownumberswatching'=> 'Прикажи го бројот на корисници кои набљудуваат',
+'tog-fancysig'          => 'Чист потпис (без автоматска врска)',
+'tog-externaleditor'    => 'Користи надворешен уредувач по основно',
+'tog-externaldiff'      => 'Користи надворешна програма за разлики по основно',
+'tog-showjumplinks'     => 'Овозможи „скокни до“ врски на пристапност',
+'tog-uselivepreview'    => 'Користи преглед во живо (JavaScript) (Експериментално)',
+'tog-autopatrol'        => 'Моите промени означи ги како проверени',
+'tog-forceeditsummary'  => 'Извести ме кога нема опис на промените',
+'tog-watchlisthideown'  => 'Сокриј ги моите уредувања од набљудуваната листа',
+'tog-watchlisthidebots' => 'Сокриј промени од ботови во набљудуваната листа',
+'underline-always'      => 'Секогаш',
+'underline-never'       => 'Никогаш',
+'underline-default'     => 'Според прилагодувањата на прелистувачот',
+'skinpreview'           => '(Прегледај)',
+'sunday'                => 'недела',
+'monday'                => 'понеделник',
+'tuesday'               => 'вторник',
+'wednesday'             => 'среда',
+'thursday'              => 'четврток',
+'friday'                => 'петок',
+'saturday'              => 'сабота',
+'sun'                   => 'нед',
+'mon'                   => 'пон',
+'tue'                   => 'вто',
+'wed'                   => 'сре',
+'thu'                   => 'чет',
+'fri'                   => 'пет',
+'sat'                   => 'саб',
+'january'               => 'јануари',
+'february'              => 'февруари',
+'march'                 => 'март',
+'april'                 => 'април',
+'may_long'              => 'мај',
+'june'                  => 'јуни',
+'july'                  => 'јули',
+'august'                => 'август',
+'september'             => 'септември',
+'october'               => 'октомври',
+'november'              => 'ноември',
+'december'              => 'декември',
+'january-gen'           => 'јануари',
+'february-gen'          => 'февруари',
+'march-gen'             => 'март',
+'april-gen'             => 'април',
+'may-gen'               => 'мај',
+'june-gen'              => 'јуни',
+'july-gen'              => 'јули',
+'august-gen'            => 'август',
+'september-gen'         => 'септември',
+'october-gen'           => 'октомври',
+'november-gen'          => 'ноември',
+'december-gen'          => 'декември',
+'jan'                   => 'јан',
+'feb'                   => 'фев',
+'mar'                   => 'мар',
+'apr'                   => 'апр',
+'may'                   => 'мај',
+'jun'                   => 'јун',
+'jul'                   => 'јул',
+'aug'                   => 'авг',
+'sep'                   => 'сеп',
+'oct'                   => 'окт',
+'nov'                   => 'ное',
+'dec'                   => 'дек',
+'categories'            => 'Категории',
+'pagecategories'        => '{{PLURAL:$1|Категорија|Категории}}',
+'category_header'       => 'Статии во категоријата "$1"',
+'subcategories'         => 'Подкатегории',
+'mainpage'              => 'Главна страница',
+'mainpagetext'          => 'Вики софтверот е успешно инсталиран.',
+'mainpagedocfooter'     => 'Ве молиме, видете ја [http://meta.wikimedia.org/wiki/MediaWiki_i18n документацијата] и [http://meta.wikimedia.org/wiki/MediaWiki_User%27s_Guide водичот] за подетална информација односно МедијаВики. Актуелната верзија на македонската јазична датотека можете да најдете на [http://meta.wikimedia.org/wiki/LanguageMk.php Мета].',
+'portal'                => 'Портал',
+'portal-url'            => 'Project:Портал',
+'about'                 => 'За',
+'aboutsite'             => 'За {{SITENAME}}',
+'aboutpage'             => 'Project:За {{SITENAME}}',
+'article'               => 'Статија',
+'help'                  => 'Помош',
+'helppage'              => 'Help:Содржина',
+'bugreports'            => 'Извештаи за грешки',
+'bugreportspage'        => 'Project:Извештаи за грешки',
+'sitesupport'           => 'Донации',
+'sitesupport-url'       => 'Project:Поддршка',
+'faq'                   => 'ЧПП',
+'faqpage'               => 'Project:ЧПП',
+'edithelp'              => 'Помош за уредување',
+'newwindow'             => '(се отвара во нов прозорец)',
+'edithelppage'          => 'Help:Како се уредуваат страници',
+'cancel'                => 'Откажи',
+'qbfind'                => 'Најди',
+'qbbrowse'              => 'Прелистај',
+'qbedit'                => 'Уреди',
+'qbpageoptions'         => 'Оваа страница',
+'qbpageinfo'            => 'Информации за страницата',
+'qbmyoptions'           => 'Моите страници',
+'qbspecialpages'        => 'Специјални страници',
+'moredotdotdot'         => 'Повеќе...',
+'mypage'                => 'Мојата страница',
+'mytalk'                => 'Мојот разговор',
+'anontalk'              => 'Разговор за таа IP адреса',
+'navigation'            => 'Навигација',
+'metadata_help'         => 'Метаподатоци (видете [[Project:Метаподатоци]] за објаснување):',
+'currentevents'         => 'Тековни настани',
+'currentevents-url'     => 'Project:Тековни настани',
+'disclaimers'           => 'Услови на употреба',
+'disclaimerpage'        => 'Project:Услови на употреба',
+'privacy'               => 'Заштита на личните податоци',
+'privacypage'           => 'Project:Заштита на личните податоци',
+'errorpagetitle'        => 'Грешка',
+'returnto'              => 'Врати се на $1.',
+'tagline'               => 'Од {{SITENAME}}',
+'search'                => 'Пребарај',
+'searchbutton'          => 'Пребарај',
+'go'                    => 'Оди',
+'searcharticle'         => 'Оди',
+'history'               => 'Историја на страницата',
+'history_short'         => 'Историја',
+'updatedmarker'         => 'ажурирано од мојата последна посета',
+'info_short'            => 'Информација',
+'printableversion'      => 'Верзија за печатење',
+'permalink'             => 'Перманентна врска',
+'print'                 => 'Печати',
+'edit'                  => 'Уреди',
+'editthispage'          => 'Уреди ја оваа страница',
+'delete'                => 'Избриши',
+'deletethispage'        => 'Избриши ја оваа страница',
+'undelete_short'        => 'Враќање на {{PLURAL:$1|едно избришано уредување|$1 избришани уредувања}}',
+'protect'               => 'Заштити',
+'protectthispage'       => 'Заштити ја оваа страница',
+'unprotect'             => 'Отстрани ја заштитата',
+'unprotectthispage'     => 'Отстрани ја заштитата на оваа страница',
+'newpage'               => 'Нова страница',
+'talkpage'              => 'Дискутирај за оваа страница',
+'specialpage'           => 'Специјална страница',
+'personaltools'         => 'Лични алатки',
+'postcomment'           => 'Испрати коментар',
+'articlepage'           => 'Види статија',
+'talk'                  => 'Разговор',
+'views'                 => 'Прегледи',
+'toolbox'               => 'Алатник',
+'userpage'              => 'Види ја страницата на корисникот',
+'projectpage'           => 'Види ја страницата на проектот',
+'imagepage'             => 'Види ја страницата на сликата',
+'mediawikipage'         => 'Види ја страницата за порака',
+'templatepage'          => 'Види ја страницата на шаблонот',
+'viewhelppage'          => 'Види ја страницата за помош',
+'categorypage'          => 'Види ја страницата за категорија',
+'viewtalkpage'          => 'Видете го разговорот',
+'otherlanguages'        => 'Други јазици',
+'redirectedfrom'        => '(Пренасочено од $1)',
+'autoredircomment'      => 'Пренасочување кон [[$1]]',
+'redirectpagesub'       => 'Страница за пренасочување',
+'lastmodifiedat'        => 'Оваа страница последен пат е изменета на $2, $1.',
+'viewcount'             => 'Оваа страница била посетена {{plural:$1|еднаш|$1 пати}}.',
+'copyright'             => 'Сите текстови се достапни под условите на $1.',
+'protectedpage'         => 'Заштитена страница',
+'jumpto'                => 'Скокни на:',
+'jumptonavigation'      => 'навигација',
+'jumptosearch'          => 'барај',
+'badaccess'             => 'Грешка во пермисии',
+'badaccess-group0'      => 'Немате дозвола да ја извршите бараната акција.',
+'badaccess-group1'      => 'Акцијата што ја баравте е ограничена само на корисниците во групата $1.',
+'badaccess-group2'      => 'Акцијата што ја баравте е ограничена само на корисниците во една од групите $1.',
+'badaccess-groups'      => 'Акцијата што ја баравте е ограничена само на корисниците во една од групите $1.',
+'versionrequired'       => 'Верзијата $1 од МедијаВики е задолжителна',
+'versionrequiredtext'   => 'Мора да имате верзија $1 од МедијаВики за да ја користите оваа страница. Видете [[Special:Version]]',
+'ok'                    => 'Во ред',
+'retrievedfrom'         => 'Преземено од "$1"',
+'youhavenewmessages'    => 'Имате $1 ($2).',
+'newmessageslink'       => 'нови пораки',
+'newmessagesdifflink'   => 'разлики со последната видена верзија',
+'editsection'           => 'уреди',
+'editold'               => 'уреди',
+'editsectionhint'       => 'Уредување на секција: $1',
+'toc'                   => 'Содржина',
+'showtoc'               => 'прикажи',
+'hidetoc'               => 'сокриј',
+'thisisdeleted'         => 'Погледни или врати $1?',
+'viewdeleted'           => 'Прегледај $1?',
+'restorelink'           => '$1 избришани промени',
+'feedlinks'             => 'Фид:',
+'feed-invalid'          => 'Лош тип на фид пријава',
+'nstab-main'            => 'Статија',
+'nstab-user'            => 'Корисник',
+'nstab-media'           => 'Медија',
+'nstab-special'         => 'Специјална страница',
+'nstab-project'         => 'проект',
+'nstab-image'           => 'Слика',
+'nstab-mediawiki'       => 'МедијаВики',
+'nstab-template'        => 'Шаблон',
+'nstab-help'            => 'Помош',
+'nstab-category'        => 'Категорија',
+'nosuchaction'          => 'Не постои таква функција',
+'nosuchactiontext'      => 'Функцијата од УРЛ-то не е подржана од Вики',
+'nosuchspecialpage'     => 'Не постои таква специјална страница',
+'nospecialpagetext'     => 'Баравте невалидна [[Special:Specialpages|специјална страница]].',
+'error'                 => 'Грешка',
+'databaseerror'         => 'Грешка во базата',
+'dberrortext'           => 'Грешка во прашалникот кон базата. Ова може да значи грешка во софтверот.
+Последниот прашалник кон базата беше: 
+<blockquote><tt>"$1"</tt></blockquote>
+од функцијата "<tt>$2</tt>". 
+MySQL ја врати следната грешка "<tt>$3: $4</tt>".',
+'dberrortextcl'         => 'Грешка во прашалникот кон базата. Последниот прашалник кон базата беше: "$1" од функцијата "$2". MySQL ја врати следната грешка "$3: $4".',
+'noconnect'             => 'Извинете! Викито има некои технички проблеми и не може да пристапи кон серверот. 
+<br /> 
+$1',
+'nodb'                  => 'Не можам да изберам база $1',
+'cachederror'           => 'Следува зачувана копија на бараната страница, која можеби е застарена.',
+'laggedslavemode'       => 'Предупредување: Страницата може да не ги содржи скорешните ажурирања.',
+'readonly'              => 'Базата е заклучена',
+'enterlockreason'       => 'Внесете причина за заклучувањето, вклулувајќи и време на отклучување (приближно)',
+'readonlytext'          => 'Базата е моментално затворена за нови статии и други модификации, најверојатно за рутинска проверка, по која ќе се врати во нормалната состојба. Администраторот кој ја заклучи го понуди следното објаснување: <p>$1',
+'missingarticle'        => 'Базата на податоци не го најде текстот што требаше да го најде, наречен "$1". 
+
+Најчеста причина е застарена разлика во верзиите или врска кон 
+страница која била избришана. 
+
+Доколку причина е нешто друго, можеби најдовте грешка во софтверот. Ве молиме пријавете го ова на администратор, наведувајќи ја URL адресата.',
+'readonly_lag'          => 'Базата е автоматски заклучена додека помошните сервери не се синхронизираат',
+'internalerror'         => 'Внатрешна грешка',
+'filecopyerror'         => 'Не можам да ја копирам датотеката "$1" во "$2".',
+'filerenameerror'       => 'Не можам да ја преименувам датотеката "$1" во "$2".',
+'filedeleteerror'       => 'Не можам да ја избришам датотеката "$1".',
+'filenotfound'          => 'Не можам да ја најдам датотеката "$1".',
+'unexpected'            => 'Неочекувана вредност: "$1"="$2".',
+'formerror'             => 'Грешка: не можам да го испратам формуларот',
+'badarticleerror'       => 'Ова дејство не може да се спроведе на наведената страница.',
+'cannotdelete'          => 'Не можам да ја избришам страницата или сликата. (Можеби е веќе избришана од некој друг.)',
+'badtitle'              => 'Лош наслов',
+'badtitletext'          => 'Бараниот наслов е грешен, празен или погрешно поврзан меѓујазичен или интер-вики наслов. Може да содржи еден или повеќе знаци што не можат да се користат во наслови.',
+'perfdisabled'          => 'Извинете! Оваа можност е привремено исклучена бидејќи ја успорува базата до ниво на кое никој не може да го користи викито.',
+'perfdisabledsub'       => 'Овде е зачувана копија од $1:',
+'perfcached'            => 'Следните податоци се кеширани и може да не бидат целосно ажурирани:',
+'perfcachedts'          => 'Следните податоци се кеширани, и последен пат ажурирани на $1.',
+'wrong_wfQuery_params'  => 'Грешни параметри до wfQuery()<br /> Функција: $1<br /> Прашалник: $2',
+'viewsource'            => 'Видете го кодот',
+'viewsourcefor'         => 'за $1',
+'protectedtext'         => 'Оваа страница е заклучена; има повеќе причини за тоа, 
+ве молиме погледнете [[Project:Заштитена страница]].
+
+Можете да го гледате и да го ископирате кодот на оваа страница:',
+'protectedinterface'    => 'Оваа страница содржи текст од интерфејсот на софтверот и е заклучена заради можна злоупотреба.',
+'editinginterface'      => '\'\'\'Предупредување:\'\'\' Уредувате страница која се користи за приказ на текст од интерфејсот на софтверот. Промените на оваа страница ќе се одразат на изгледот на сајтот кај сите корисници.',
+'sqlhidden'             => '(Скриен SQL прашалник)',
+'logouttitle'           => 'Одјави се',
+'logouttext'            => 'Сега си одјавен.<br /> Можеш да продолжиш да го користиш {{SITENAME}} анонимно, или можеш да се најавиш под истото или различно корисничко име. Некои страници може да продолжат да се прикажуваат како да сте најавени, се додека не го исчистите кеш-от на вашиот пребарувач',
+'welcomecreation'       => '== Добредојдовте, $1! == 
+
+Сега сте регистрирани. Не заборавајте да ги промените прилагодувањата за {{SITENAME}}.',
+'loginpagetitle'        => 'Најавување',
+'yourname'              => 'Корисничко име',
+'yourpassword'          => 'Лозинка',
+'yourpasswordagain'     => 'Повторете ја лозинката',
+'remembermypassword'    => 'Запамти ја лозинката за повеќе сесии.',
+'yourdomainname'        => 'Вашиот домен',
+'externaldberror'       => 'Настана грешка при надворешното најавување на базата или немате дозвола да ја ажурирате вашата надворешна сметка.',
+'loginproblem'          => '<b>Има проблем со вашето најавување.</b><br />Обидете се повторно!',
+'alreadyloggedin'       => '<strong>Корисник $1, веќе сте најавени!</strong><br />',
+'login'                 => 'Најавување',
+'loginprompt'           => 'Морате да користите колачиња за да се најавите на {{SITENAME}}.',
+'userlogin'             => 'Најавете се',
+'logout'                => 'Одјави се',
+'userlogout'            => 'Одјавете се',
+'notloggedin'           => 'Не сте најавени',
+'nologin'               => 'Немате сметка? $1.',
+'nologinlink'           => 'Креирајте нова сметка',
+'createaccount'         => 'Регистрирај се',
+'gotaccount'            => 'Веќе имате сметка? $1.',
+'gotaccountlink'        => 'Најавете се',
+'createaccountmail'     => 'по е-пошта',
+'badretype'             => 'Внесените лозинки не се исти.',
+'userexists'            => 'Корисничкото име што го внесовте веќе се користи. Изберете друго име.',
+'youremail'             => 'Вашата е-пошта*',
+'username'              => 'Корисничко име:',
+'uid'                   => 'Кориснички ID:',
+'yourrealname'          => 'Вистинско име *',
+'yourlanguage'          => 'Јазик:',
+'yourvariant'           => 'Варијанта',
+'yournick'              => 'Прекар:',
+'badsig'                => 'Грешка во потписот, проверете ги HTML таговите.',
+'email'                 => 'Е-пошта',
+'prefs-help-email-enotif'=> 'Оваа адреса истотака се користи за испраќање на известувања по е-пошта доколку ја имате дозволено таа можност.',
+'prefs-help-realname'   => '* Вистинско име (опција). Доколку изберете да го дадете вашето име, тоа може да се искористи за давање на заслуги за вашата работа.',
+'loginerror'            => 'Грешка при најавување',
+'prefs-help-email'      => '* Е-пошта (опционално): Им овозможува на другите да контактираат со вас преку вашата корисничка страница или вашата страница за разговор, без да биде потребно да го откриете вашиот идентитет.',
+'nocookiesnew'          => 'Регистрирани сте, но не сте најавени. {{SITENAME}} користи колачиња за најавување на корисници. Вие имате оневозможено користењето на колачиња. Ве молиме активирајте ги, па потоа најавете се со вашето корисничко име и лозинка.',
+'nocookieslogin'        => '{{SITENAME}} користи колачиња за најавување на корисници. Вие го имате оневозможено користењето на колачиња. Ве молиме активирајте ги и обидете се повторно.',
+'noname'                => 'Внесовте грешно корисничко име.',
+'loginsuccesstitle'     => 'Успешно најавување',
+'loginsuccess'          => 'Сега сте најавени на {{SITENAME}} како "$1".',
+'nosuchuser'            => 'Нема корисник со името "$1". Проверете ја синтаксата, или искористете го долниот формулар да се регистрирате.',
+'nosuchusershort'       => 'Нема корисник со името "$1". Проверете ја синтаксата.',
+'nouserspecified'       => 'Мора да назначите корисничко име.',
+'wrongpassword'         => 'Внесовте погрешна лозинка. Обидете се повторно.',
+'wrongpasswordempty'    => 'Внесената лозинка е празна. Обидете се повторно.',
+'mailmypassword'        => 'Испрати ми нова лозинка по е-пошта',
+'passwordremindertitle' => 'Потсетник за лозинка од {{SITENAME}}',
+'passwordremindertext'  => 'Некој (најверојатно вие, од IP адреса $1) побара да ви испратиме нова {{SITENAME}} лозинка. Лозинката за корисникот "$2" сега е "$4". Треба да се најавите и да ја промените лозинката сега. Сега можете да се логирате со оваа привремена позинка, која е валидна само за едно логирање. Можете да продолжите да ја користите старата лозинка ако ја памтите или да поставите нова. {{fullurl:Special:Userlogin|wpName=$3&wpPassword=$4&returnto=Special:Preferences}}',
+'noemail'               => 'Не е внесена е-поштенската адреса за корисникот "$1".',
+'passwordsent'          => 'Нова лозинка е испратена на корисникот "$1". Најавете се повторно откако ќе ја примите пораката.',
+'eauthentsent'          => 'Е-пошта е испратена на назначената е-поштенска адреса. Пред било која пошта да се прати на сметката, ќе мората да ги следите инструкциите во е-поштата, за да потврдите дека таа е навистина ваша.',
+'mailerror'             => 'Грешка при испраќање на е-поштата: $1',
+'acct_creation_throttle_hit'=> 'Извинете, веќе имате создадено $1 сметки. Не можете да создавате повеќе.',
+'emailauthenticated'    => 'Автентичноста на вашата е-поштенска адреса е проверена на $1.',
+'emailnotauthenticated' => 'Автентичноста на вашата е-поштенска адреса сеуште не е проверена. Нема да биде испратена е-пошта за никоја од следните содржини.',
+'noemailprefs'          => '<strong>Не беше наведена е-поштенска адреса</strong>, следните содржини нема да работат.',
+'emailconfirmlink'      => 'Потврдете ја вашата е-поштенска адреса',
+'invalidemailaddress'   => 'Е-поштенската адреса не може да биде прифатена бидејќи има неважечки формат. Ве молиме, внесете важечки формат или испразнете го тоа поле.',
+'accountcreated'        => 'Сметката е направена',
+'accountcreatedtext'    => 'Сметката за $1 е направена.',
+'bold_sample'           => 'Задебелен текст',
+'bold_tip'              => 'Закосен текст',
+'italic_sample'         => 'Закосен текст',
+'italic_tip'            => 'Закосен текст',
+'link_sample'           => 'Наслов на врска',
+'link_tip'              => 'Внатрешна врска',
+'extlink_sample'        => 'http://www.example.com наслов на врска',
+'extlink_tip'           => 'Надворешна врска (користи http:// префикс)',
+'headline_sample'       => 'Наслов',
+'headline_tip'          => 'Ниво 2 наслов',
+'math_sample'           => 'Овде вметни формула',
+'math_tip'              => 'Математичка формула (LaTeX)',
+'nowiki_sample'         => 'Овде внесете неформатиран текст',
+'nowiki_tip'            => 'Игнорирај вики форматирање',
+'image_sample'          => 'пример.jpg',
+'image_tip'             => 'Вметната слика',
+'media_sample'          => 'Пример.mp3',
+'media_tip'             => 'Врска кон мултимедијална датотека',
+'sig_tip'               => 'Вашиот потпис со време',
+'hr_tip'                => 'Хоризонтална линија',
+'summary'               => 'Опис',
+'subject'               => 'Наслов',
+'minoredit'             => 'Ова е ситна промена',
+'watchthis'             => 'Набљудувајте ја оваа страница',
+'savearticle'           => 'Зачувај ја страницата',
+'preview'               => 'Преглед',
+'showpreview'           => 'Прегледај',
+'showlivepreview'       => 'Преглед во живо',
+'showdiff'              => 'Прикажи ги промените',
+'anoneditwarning'       => '\'\'\'Предупредување:\'\'\' Не сте најавени. Вашата IP адреса ќе биде забележана во историјата на страницата.',
+'missingsummary'        => '\'\'\'Потсетник:\'\'\' Не внесовте опис на измените. Ако притиснете Зачувај повторно, вашите измени ќе се зачуваат без опис.',
+'missingcommenttext'    => 'Ве молиме внесете коментар подолу.',
+'blockedtitle'          => 'Корисникот е блокиран',
+'blockedtext'           => 'Вашето корисничко име или IP адреса беше блокирано од $1.
+
+Дадена беше следнава причина:<br />\'\'$2\'\'<br />Можете да контактирате со $1 или еден од другите [[Project:Администратори|администратори]] за блокадата. 
+
+Забелешка: Не можете да ја користите опцијата "е-пошта до корисникот" ако немате внесено валидна адреса во вашите [[Special:Прилагодувања|прилагодувања]]. Вашата IP адреса е $3. Ве молиме вклучете ја оваа адреса во сите барања што ќе ги приложите.',
+'blockedoriginalsource' => 'Кодот на \'\'\'$1\'\'\' е прикажан подолу:',
+'blockededitsource'     => 'Текстот на \'\'\'вашите уредувања\'\'\' на \'\'\'$1\'\'\' е прикажан подолу:',
+'whitelistedittitle'    => 'Мора да сте најавени за менување на статии',
+'whitelistedittext'     => 'Мора да сте $1 за да уредувате страници.',
+'whitelistreadtitle'    => 'Мора да сте најавени за да читате статии',
+'whitelistreadtext'     => 'Мора да сте [[Special:Userlogin|најавени]] за да читате статии.',
+'whitelistacctitle'     => 'Немате дозвола да додавате корисници',
+'whitelistacctext'      => 'За да можете да додавате корисници во ова Вики мора да се [[Special:Userlogin|најавите]] и да имате соодветна дозвола.',
+'confirmedittitle'      => 'Потребна е потврда за е-поштенската адреса за уредување',
+'confirmedittext'       => 'Морате да ја потврдите вашата е-поштенска адреса пред да уредувате страници. Поставете ја и валидирајте ја вашата е-поштенска адреса преку вашите [[Special:Preferences|прилагодувања]].',
+'loginreqtitle'         => 'Потребно најавување',
+'loginreqlink'          => 'најавување',
+'loginreqpagetext'      => 'Морате да се $1 за да ги видите другите страници.',
+'accmailtitle'          => 'Лозинката е испратена.',
+'accmailtext'           => 'Лозинката за \'$1\' е испратена на $2.',
+'newarticle'            => '(нова)',
+'newarticletext'        => 'Следевте врска која води до страница која сеуште не постои. За да ја креирате страницата, почнете со типкање во долното прозорче (видете ја страницата за [[Project:Помош|помош]] за повеќе информации). Ако сте овде по грешка, само притиснете го копчето \'\'\'назад\'\'\' во вашиот прелистувач.',
+'anontalkpagetext'      => '---- \'\'Ова е страница за разговор за анонимен корисник кој сеуште не е регистриран или не ја користи. Затоа мораме да ја користиме неговата нумеричка [[IP адреса]] за идентификација. Една IP адреса може да биде делена од повеќе корисници. Ако сте анонимен корисник и сметате дека кон вас се упатени ирелевантни коментари, ве молиме [[Special:Userlogin|Регистрирајте или најавете се]] за да избегнете забуна со други корисници.\'\'',
+'noarticletext'         => '(Моментално нема текст на оваа страница)',
+'clearyourcache'        => '\'\'\'Забелешка:\'\'\' По зачувување морате да го исчистите кешот на вашиот прелистувач за да ги видите промените: \'\'\'Mozilla / Firefox:\'\'\' \'\'Ctrl-Shift-R\'\', \'\'\'IE:\'\'\' \'\'Ctrl-F5\'\', \'\'\'Safari:\'\'\' \'\'Cmd-Shift-R\'\', \'\'\'Konqueror\'\'\' \'\'F5\'\'.',
+'usercssjsyoucanpreview'=> '<strong>Совет:</strong> Користете го копчето Прегледај за да го испробате новиот CSS/JS код пред зачувувањето.',
+'usercsspreview'        => '\'\'\'Запомнете дека ова е само преглед на вашиот CSS код, и дека страницата сеуште не е зачувана!\'\'\'',
+'userjspreview'         => '\'\'\'Запомнете дека ова е само преглед на вашиот JavaScript код, и страницата сеуште не е зачувана!\'\'\'',
+'userinvalidcssjstitle' => '\'\'\'Предупредување:\'\'\' Нема маска "$1". Запамтете дека сопствените .css и .js страници имаат имиња со мали букви, пр. Корисник:Некој/monobook.css наместо Корисник:Некој/Monobook.css.',
+'updated'               => '(Освежено)',
+'note'                  => '<strong>Забелешка:</strong>',
+'previewnote'           => 'Запомнете дека ова е само преглед, и страницата сеуште не е зачувана!',
+'session_fail_preview'  => '<strong>Извинете! Не можевме да го процесираме вашето уредување заради губење на сесиски податоци.
+Обидете се повторно. Ако сеуште не функционира, пробајте да се одјавите и повторно да се најавите.</strong>',
+'previewconflict'       => 'Овој преглед прикажува како ќе изгледа текстот 
+внесен во горниот дел кога ќе се зачува страницата.',
+'session_fail_preview_html'=> '<strong>Извинете! Не можевме да го процесираме вашето уредување заради губење на сесиски податоци. </strong>
+
+\'\'Поради тоа што викито има овозможено raw HTML, прегледот е скриен како обезбедување JavaScript напади.\'\'
+
+<strong>Ако е ова е дозволен обид за уредување, ве молиме обидете се повторно. Ако сеуште не функционира, пробајте да се одјавите и повторно да се најавите.</strong>',
+'importing'             => 'Увоз во тек $1',
+'editing'               => 'Уредување на $1',
+'editinguser'           => 'Уредување на $1',
+'editingsection'        => 'Уредување на $1 (секција)',
+'editingcomment'        => 'Уредување на $1 (коментар)',
+'editconflict'          => 'Конфликтни уредувања: $1',
+'explainconflict'       => 'Некој друг ја променил страницата откако почнавте да ја уредувате. 
+Горниот дел за текст ја содржи страницата како што сега постои. 
+Вашите промени се прикажани во долниот дел. 
+Ќе морате да ги внесете вашите промени со постоечкиот текст. 
+<b>Само</b> текстот во горниот дел ќе биде зачуван кога 
+ќе притиснете на "Зачувај". <br />',
+'yourtext'              => 'Вашиот текст',
+'storedversion'         => 'Зачувана верзија',
+'nonunicodebrowser'     => '<strong>ПРЕДУПРЕДУВАЊЕ: Вашиот прелистувач не е Уникод компатибилен, ве молиме променете го пред да уредувате статија.</strong>',
+'editingold'            => '<strong>ПРЕДУПРЕДУВАЊЕ: Менувате застарена 
+верзија на оваа страница.
+Ако ја зачувате, сите промени по оваа верзија ќе бидат изгубени.</strong>',
+'yourdiff'              => 'Разлики',
+'copyrightwarning'      => '<div style="display:block;vertical-align: top;width:100%; background:blue; color:#fff; text-align:center; font-weight:bold; font-size:100%;margin-bottom:5px;margin-top:0;margin-left:-5px;margin-right:-4px;">НЕ ПРАЌАЈТЕ ТЕКСТОВИ ЗАШТИТЕНИ СО АВТОРСКИ ПРАВА БЕЗ ДОЗВОЛА!</div><br />
+Имајте во предвив дека сите придонеси кон {{SITENAME}} се смета дека се издадени под $2 (видете $1 за детали). Ако не сакате вашите текстови да бидат слободно уредувани и разменувани, не ги праќајте овде.<br />
+Исто така потврдувате дека вие сте автори на текстот, или сте го копирале од некој слободен извор.',
+'copyrightwarning2'     => 'Ве молиме, имајте во предвид дека сите придонеси кон {{SITENAME}} можат да бидат уредувани, менувани или отстранети од други корисници. Ако не сакате вашиот текст да биде менуван и редистрибуиран слободно, не го испраќајте овде.<br />
+Исто така потврдувате дека текстот сте го напишале сами, или сте го копирале од јавен домен или сличен слободен извор (видетe $1 за детали).<br />
+<strong>НЕ ПРАЌАЈТЕ ТЕКСТОВИ ЗАШТИТЕНИ СО АВТОРСКИ ПРАВА БЕЗ ДОЗВОЛА!</strong>',
+'longpagewarning'       => '<strong>ПРЕДУПРЕДУВАЊЕ: Оваа страница има $1 килобајти; некои 
+прелистувачи може да имаат проблеми со уредување на страниците поголеми од 32kb. 
+Размислете за разделување на страницата во помали делови.</strong>',
+'longpageerror'         => '<strong>ГРЕШКА: Текстот што го внесовте е голем $1 килобајти, 
+што е повеќе од максималните $2 килобајти. Не може да се зачува.</strong>',
+'readonlywarning'       => '<strong>ПРЕДУПРЕДУВАЊЕ: Базата е заклучена заради одржување, 
+па нема да можете да ги зачувате вашите промени сега. Пробајте да го зачувате 
+текстот локално и да го пратите подоцна.</strong>',
+'protectedpagewarning'  => 'ПРЕДУПРЕДУВАЊЕ: Оваа страница е заклучена па само корисници со администраторски привилегии може да ја менуваат. Прочитајте го *** [[Project:Protected page guidelines|упатството за заштитени страници]].',
+'semiprotectedpagewarning'=> '\'\'\'Забелешка:\'\'\' Оваа страница е заклучена и само регистрирани корисници може да ја уредуваат.',
+'templatesused'         => 'Шаблони користени на оваа страница:',
+'edittools'             => '<!-- Овој текст ќе се прикаже под формите за уредување и подигнување датотеки. -->',
+'nocreatetitle'         => 'Креирањето на нови страници е ограничено',
+'nocreatetext'          => 'Овој сајт ја ограничил можноста за креирање нови страници.
+Можете да се вратите назад и да уредите постоечка страница, или [[Special:Userlogin|најавете се или креирајте нова сметка]].',
+'cantcreateaccounttitle'=> 'Неможам да направам сметка',
+'cantcreateaccounttext' => 'Креирањето сметки од оваа IP адреса (<b>$1</b>) е блокирано. 
+Ова е најверојатно заради константен вандализам од вашето училиште или Интернет провајдер.',
+'revhistory'            => 'Историја на верзиите',
+'viewpagelogs'          => 'Види ја историјата за оваа страница',
+'nohistory'             => 'Не постои историја на верзии за оваа страница.',
+'revnotfound'           => 'Верзијата не е пронајдена',
+'revnotfoundtext'       => 'Старата верзија на оваа страница не може да се пронајде. 
+Проверете ја URL адресата што ја користевте за пристап до оваа страница.',
+'loadhist'              => 'Се вчитува историјата за страницата',
+'currentrev'            => 'Тековна верзија',
+'revisionasof'          => 'Верзија од $1',
+'revision-info' => 'Ревизии од $1; $2',
+'previousrevision'      => '<Претходна ревизија',
+'nextrevision'          => 'Следна верзија>',
+'currentrevisionlink'   => 'видете ја тековната верзија',
+'cur'                   => 'мом',
+'next'                  => 'след',
+'last'                  => 'посл',
+'orig'                  => 'ориг',
+'histlegend'            => 'Легенда: (мом) = разлика со моменталната верзија,
+(последна) = разлика со претходната верзија, С = ситна промена.',
+'deletedrev'            => '[избришана]',
+'histfirst'             => 'Први',
+'histlast'              => 'Последни',
+'rev-deleted-comment'   => '(коментарот е избришан)',
+'rev-deleted-user'      => '(корисничкото име е избришано)',
+'rev-deleted-text-permission'=> '<div class="mw-warning plainlinks">
+Верзијата на оваа страница е избришана од јавните архиви.
+Можеби има повеќе информации во [{{fullurl:Special:Log/delete|page={{PAGENAMEE}}}} историјата на избришани статии].
+</div>',
+'rev-deleted-text-view' => '<div class="mw-warning plainlinks">
+Верзијата на оваа страница беше избришана од јавните архиви.
+Како администратор вие можете да ја погледнете;
+можеби има повеќе информации во [{{fullurl:Special:Log/delete|page={{PAGENAMEE}}}} историјата на избришани статии].
+</div>',
+'rev-delundel'          => 'прикажи/сокриј',
+'history-feed-title'    => 'Историја на верзиите',
+'history-feed-description'=> 'Историја на верзиите на оваа страница на викито',
+'history-feed-item-nocomment'=> '$1, $2',
+'history-feed-empty'    => 'Бараната страница не постои.
+Може била избришана од викито, или преименувана.
+Обидете се да го [[Special:Search|пребарате викито]] за релевантните нови страници.',
+'revisiondelete'        => 'Избриши/врати верзии',
+'revdelete-nooldid-title'=> 'Нема барана ревизија',
+'revdelete-nooldid-text'=> 'Не избравте ревизија/и за да ја извршите функцијата.',
+'revdelete-selected'    => 'Избрани верзии од [[:$1]]:',
+'revdelete-text'        => 'Избришаните верзии сеуште ќе се прикажуваат во историјата на страницата,
+но нивната содржина нема да биде пристапна за јавноста.
+
+Другите администратори на ова вики сеуште ќе можат да го пристапат скриениот текст 
+и можат да го вратат преку истиот интерфејс, освен ако не постојат дополнителни
+ограничувања.',
+'revdelete-legend'      => 'Постави ограничувања на верзијата:',
+'revdelete-hide-text'   => 'Сокриј го текстот на верзијата',
+'revdelete-hide-comment'=> 'Сокриј го описот на измената',
+'revdelete-hide-user'   => 'Сокриј име/адреса на уредувачот',
+'revdelete-hide-restricted'=> 'Примени ги овие ограничувања на администраторите исто како и на другите корисници',
+'revdelete-log'         => 'Коментар за лог:',
+'revdelete-submit'      => 'Примени на следните верзии:',
+'revdelete-logentry'    => 'променет приказ на верзија за [[$1]]',
+'difference'            => '(Разлика меѓу верзии)',
+'loadingrev'            => 'се вчитуваат верзиите за функцијата <em>разл</em>',
+'lineno'                => 'Линија $1:',
+'editcurrent'           => 'Промени ја моментална верзија на оваа страница',
+'selectnewerversionfordiff'=> 'Изберете понова верзија за споредба',
+'selectolderversionfordiff'=> 'Изберете постара верзија за споредба',
+'compareselectedversions'=> 'Споредете ги избраните верзии',
+'searchresults'         => 'Резултати од пребарувањето',
+'searchresulttext'      => 'За повеќе информации за пребарување на {{SITENAME}}, видете [[Project:Пребарување|Пребарување на  {{SITENAME}}]].',
+'searchsubtitle'        => 'За прашалникот "[[:$1]]"',
+'searchsubtitleinvalid' => 'За прашалникот "$1"',
+'badquery'              => 'Лошо формиран прашалник за пребарување',
+'badquerytext'          => 'Не можевме да го процесираме вашето барање. Најверојатно баравте збор со помалку од три букви, што не е уште подржано. Исто така можеби лошо сте го внесе изразот, како "риба ии коски". Обидете се повторно.',
+'matchtotals'           => 'Прашалникот "$1" најде $2 наслови на страници
+и текст од $3 страници.',
+'noexactmatch'          => '\'\'\'Нема статија со наслов „$1“.\'\'\' Можете да ја [[:$1|креирате оваа статија]].',
+'titlematches'          => 'Насловот на статијата одговара',
+'notitlematches'        => 'Ниеден текст на насловите не одговара',
+'textmatches'           => 'Текстот на статијата одговара',
+'notextmatches'         => 'Ниеден текст во статиите не одговара',
+'prevn'                 => 'претходни $1',
+'nextn'                 => 'следни $1',
+'viewprevnext'          => 'Видете ($1) ($2) ($3).',
+'showingresults'        => 'Прикажувам под <b>$1</b> резултати почнувајќи од #<b>$2</b>.',
+'showingresultsnum'     => 'Прикажувам под <b>$3</b> резултати во #<b>$2</b>.',
+'nonefound'             => '<strong>Забелешка</strong>: неуспешни барања 
+најчесто се предизвикани од барање на чести зборови како "има" и "од", 
+кои не се индексираат, или пак, со внесување на повеќе од еден критериуми (се прикажуваат 
+само страници кои ги содржат сите барани зборови).',
+'powersearch'           => 'Барај',
+'powersearchtext'       => 'Барајте во именските простори :<br />$1<br />$2 Листа на пренасочувања<br />Барај $3 $9',
+'searchdisabled'        => '{{SITENAME}}пребарувањето е привремено исклучено. Во меѓувреме, можете да барате преку Google (подолу), што може да даде застарени резултати.',
+'blanknamespace'        => '(Главна)',
+'preferences'           => 'Прилагодувања',
+'mypreferences'         => 'мои прилагодувања',
+'prefsnologin'          => 'Не сте најавени',
+'prefsnologintext'      => 'Мора да бидете [[Special:Userlogin|најавени]] за промена на прилагодувањата.',
+'prefsreset'            => 'Воспоставени се стандардните прилагодувања.',
+'qbsettings'            => 'Лента за брз избор',
+'qbsettings-none'	=> 'Без мени',
+'qbsettings-fixedleft'	=> 'Фиксирано лево',
+'qbsettings-fixedright'	=> 'Фиксирано десно',
+'qbsettings-floatingleft'	=> 'Пловечко лево',
+'changepassword'        => 'Промени лозинка',
+'skin'                  => 'Маска',
+'math'                  => 'Математички операции',
+'dateformat'            => 'Приказ на време',
+'datedefault'           => 'Небитно',
+'datetime'              => 'Дата и време',
+'math_failure'          => 'Неможам да парсирам',
+'math_unknown_error'    => 'непозната грешка',
+'math_unknown_function' => 'непозната функција',
+'math_lexing_error'     => 'лексичка грешка',
+'math_syntax_error'     => 'синтаксна грешка',
+'math_image_error'      => 'неуспешна PNG конверзија',
+'math_bad_tmpdir'       => 'Невозможно е создавањето на привремен директориум за математичките операции',
+'math_bad_output'       => 'Невозможно е создавањето на аутпут директориум за математичките операции',
+'math_notexvc'          => 'Недостасува извршната датотека texvc; ве молиме видете math/README за подесувања.',
+'prefs-personal'        => 'Кориснички податоци',
+'prefs-rc'              => 'Скорешни промени и никулци',
+'prefs-watchlist'       => 'Список на набљудувања',
+'prefs-watchlist-days'  => 'Број на денови за прикажување во листата на набљудување:',
+'prefs-watchlist-edits' => 'Број на уредувања за прикажување во проширената листа на набљудување:',
+'prefs-misc'            => 'Разно',
+'saveprefs'             => 'Запамти ги прилагодувањата',
+'resetprefs'            => 'Ресетирај ги прилагодувањата',
+'oldpassword'           => 'Стара лозинка',
+'newpassword'           => 'Нова лозинка:',
+'retypenew'             => 'Повторно внесување на нова лозинка',
+'textboxsize'           => 'Димензии на кутијата за текст',
+'rows'                  => 'Редови:',
+'columns'               => 'Колони',
+'searchresultshead'     => 'Опции за пребарување',
+'resultsperpage'        => 'Резултати по страница',
+'contextlines'          => 'Линии по резултати',
+'contextchars'          => 'Карактери од содржината по линија',
+'stubthreshold'         => 'Граница за прикажување на никулци:',
+'recentchangescount'    => 'Број на наслови во скорешни промени',
+'savedprefs'            => 'Вашите прилагодувања се зачувани.',
+'timezonelegend'        => 'Временска зона',
+'timezonetext'          => 'Внесете колку часови вашето локално време се разликува од серверското време (UTC).',
+'localtime'             => 'Локално време',
+'timezoneoffset'        => 'Отстапка',
+'servertime'            => 'Серверското време е',
+'guesstimezone'         => 'Пополни од прелистувачот',
+'allowemail'            => 'Дозволи е-пошта од други корисници',
+'defaultns'             => 'Барај во овие именски простори по основно:',
+'default'               => 'по основно',
+'files'                 => 'Датотеки',
+'userrights-lookup-user'=> 'Управувај со корисничките групи',
+'userrights-user-editname'=> 'Внеси корисничко име:',
+'editusergroup'         => 'Уреди кориснички групи',
+'userrights-editusergroup'=> 'Уреди ги корисничките групи',
+'saveusergroups'        => 'Зачувај ги корисничките групи',
+'userrights-groupsmember'=> 'Член на:',
+'userrights-groupsavailable'=> 'Достапни групи:',
+'userrights-groupshelp' => 'Изберете групи од кои сакате да го отстраните корисникот или да го додадете. Групите што не се избрани нема да бидат променети. Можете да деселектирате група со CTRL + лев клик',
+'group'                 => 'Група:',
+'group-bot'             => 'Ботови',
+'group-sysop'           => 'Администратори',
+'group-bureaucrat'      => 'Бирократи',
+'group-all'             => '(сите)',
+'group-bot-member'      => 'Бот',
+'group-sysop-member'    => 'Администратор',
+'group-bureaucrat-member'=> 'Бирократ',
+'grouppage-bot'         => 'Project:Ботови',
+'grouppage-sysop'       => 'Project:Администратори',
+'grouppage-bureaucrat'  => 'Project:Бирократи',
+'changes'               => 'промени',
+'recentchanges'         => 'Скорешни промени',
+'recentchangestext'     => 'Забележете ги најновите промени на викито на оваа страница.',
+'rcnote'                => 'Подолу е листа на последните <strong>$1</strong> промени во последните <strong>$2</strong> дена, почнувајќи од $3.',
+'rcnotefrom'            => 'Подолу се промените од <b>$2</b> (се прикажуваат до <b>$1</b>).',
+'rclistfrom'            => 'Прикажи ги новите промени почнувајќи од $1',
+'rcshowhideminor'       => '$1 ситни промени',
+'rcshowhidebots'        => '$1 ботови',
+'rcshowhideliu'         => '$1 најавени корисници',
+'rcshowhideanons'       => '$1 анонимни корисници',
+'rcshowhidepatr'        => '$1 проверени уредувања',
+'rcshowhidemine'        => '$1 мои уредувања',
+'rclinks'               => 'Прикажи ги последните $1 промени во последните $2 дена<br />$3',
+'diff'                  => 'разл',
+'hist'                  => 'ист',
+'hide'                  => 'Сокриј',
+'show'                  => 'Прикажи',
+'minoreditletter'       => 'с',
+'newpageletter'         => 'Н',
+'number_of_watching_users_pageview'=> '[$1 корисници кои набљудуваат]',
+'rc_categories'         => 'Ограничи на категории (раздели со "|")',
+'rc_categories_any'     => 'Било кои',
+'upload'                => 'Подигни датотека',
+'uploadbtn'             => 'Подигни датотека',
+'reupload'              => 'Повторно подигни',
+'reuploaddesc'          => 'Врати се во формуларот за подигнување.',
+'uploadnologin'         => 'Не сте најавени',
+'uploadnologintext'     => 'Морате да бидете [[Special:Userlogin|најавени]] за да подигнувате датотеки.',
+'upload_directory_read_only'=> 'Веб серверот не може да запишува во папката за подигнување ($1).',
+'uploaderror'           => 'Грешка во подигнувањето',
+'uploadtext'            => 'Користете го долниот формулар за да подигнете нови датотеки, а за да гледате или пребарувате претходно подигнати слики одете на [[Special:Imagelist|листата на подигнати датотеки]], подигнувањата и бришењата се истотака запишани во [[Special:Log|дневникот на проектот]]. Исто така мора да го штиклирате полето дека не прекршувате некои авторски права со подигнувањето на датотеката. Притиснете го копчето "Подигни датотека"  за да го завршите подигнувањето. За да внесете слика во страница, користете врска во обликот
+
+* \'\'\'<nowiki>[[</nowiki>{{ns:Image}}<nowiki>:File.jpg]]</nowiki>\'\'\'
+* \'\'\'<nowiki>[[</nowiki>{{ns:Image}}<nowiki>:File.png|alt text]]</nowiki>\'\'\'
+или за директно поврзување со датотеката
+* \'\'\'<nowiki>[[</nowiki>{{ns:Media}}<nowiki>:File.ogg]]</nowiki>\'\'\'',
+'uploadlog'             => 'дневник на подигнувањата',
+'uploadlogpage'         => 'Дневник на подигнувањата',
+'uploadlogpagetext'     => 'Подолу е листа на најновите подигнувања на датотеки.',
+'filename'              => 'Име на датотеката',
+'filedesc'              => 'Опис',
+'fileuploadsummary'     => 'Опис (автор, извор, итн):',
+'filestatus'            => 'Авторски права',
+'filesource'            => 'Извор',
+'copyrightpage'         => 'Project:Авторски права',
+'copyrightpagename'     => '{{SITENAME}} авторски права',
+'uploadedfiles'         => 'Подигнати датотеки',
+'ignorewarning'         => 'Игнорирај ги предупредувањата и зачувај ја датотеката.',
+'ignorewarnings'        => 'Игнорирај ги сите предупредувања',
+'minlength'             => 'Имињата на сликите мораат да имаат барем три букви.',
+'illegalfilename'       => 'Името на датотеката "$1" содржи знаци што не се дозволени во наслов на страници. Ве молиме преименувајте ја датотеката и подигнете ја пак.',
+'badfilename'           => 'Името на сликата е променето во "$1".',
+'badfiletype'           => '".$1" не е препорачано име за слика.',
+'largefile'             => 'Се препорачува датотеките да не бидат поголеми од $1 бајти; оваа датотека тежи $2 бајти',
+'largefileserver'       => 'Датотеката е поголема од максималната дозволена големина.',
+'emptyfile'             => 'Датотеката што ја подигнавте е празна. Ова може да е поради грешка во името на датотеката. Ве молиме проверете дали навистина сакате да ја подигнете оваа датотека.',
+'fileexists'            => 'Датотека со ова име веќе постои, проверете $1 ако не сте сигурни дали сакате да го промените.',
+'fileexists-forbidden'  => 'Датотека со тоа име веќе постои; ве молиме вратете се и подигнете ја оваа датотека под друго име.
+[[Image:$1|thumb|center|$1]]',
+'fileexists-shared-forbidden'=> 'Датотека со ова име веќе постои во заедничкиот склад; ве молиме вратете се и повторно подигнете ја датотеката под ново име. [[Image:$1|thumb|center|$1]]',
+'successfulupload'      => 'Успешно подигнување',
+'fileuploaded'          => 'Датотеката "$1" е успешно подигната. 
+Ве молиме следете ја оваа врска: ($2) до страницата за опис и пополнете 
+ги информациите за датотеката - од каде доаѓа, кога е 
+направена, и од кого, и било што друго што знаете за неа. Ако ова е слика, може да ја вметнете на 
+следниов начин: <tt><nowiki>[[{{ns:Image}}:$1|мини|Опис]]</nowiki></tt>',
+'uploadwarning'         => 'Предупредување при подигнување',
+'savefile'              => 'Зачувај',
+'uploadedimage'         => 'подигнато "[[$1]]"',
+'uploaddisabled'        => 'Извинете, подигнувањето е забрането.',
+'uploaddisabledtext'    => 'Подигнувања на датотеки не се дозволени на ова вики.',
+'uploadscripted'        => 'Датотеката содржи HTML код или скрипта што може да биде погрешно интерпретира од прелистувачот.',
+'uploadcorrupt'         => 'Датотеката е неисправна или има неточна наставка. Ве молиме проверете ја датотеката и подигнете ја повторно.',
+'uploadvirus'           => 'Оваа датотека содржи вирус! Детално: $1',
+'sourcefilename'        => 'Изворно име',
+'destfilename'          => 'Целно име',
+'watchthisupload'       => 'Набљудувај ја оваа страница',
+'filewasdeleted'        => 'Датотека со ова име претходно била подигната и потоа избришана. Погледнете го $1 пред да продолжите со подигнувањето.',
+'license'               => 'Лиценца',
+'nolicense'             => 'Нема',
+'upload_source_url'     => ' (валидна, јавно достапна адреса (URL))',
+'upload_source_file'    => ' (датотека на вашиот компјутер)',
+'imagelist'             => 'Листа на слики',
+'imagelisttext'         => 'Подолу е листа на $1 подредени слики $2.',
+'imagelistforuser'      => 'Ова ги прикажува само сликите подигнати од $1.',
+'getimagelist'          => 'вчитување на листата',
+'ilsubmit'              => 'Барај',
+'showlast'              => 'Прикажи ги последните $1 подредени слики по $2.',
+'byname'                => 'по име',
+'bydate'                => 'по време',
+'bysize'                => 'по големина',
+'imgdelete'             => 'избр',
+'imgdesc'               => 'опис',
+'imgfile'               => 'датотека',
+'imglegend'             => 'Легенда: (опис) = прикажи/промени го описот на сликата.',
+'imghistory'            => 'Историја на сликата',
+'revertimg'             => 'врт',
+'deleteimg'             => 'избр',
+'deleteimgcompletely'   => 'Избриши ги сите верзии',
+'imghistlegend'         => 'Легенда: (мом) = ова е моменталната слика, (избр) = ја брише оваа стара верзија, (врт) = врати кон оваа стара верзија. <br /><i>Притиснете на датум за да ги видите сите слики пратени на тој датум</i>.',
+'imagelinks'            => 'Врски кон сликата',
+'linkstoimage'          => 'Следните страници ја користат оваа слика:',
+'nolinkstoimage'        => 'Нема страници кои ја користат оваа слика',
+'sharedupload'          => 'Оваа датотека е заедничка и може да се користи од други проекти.',
+'shareduploadwiki'      => 'Ве молиме видете $1 за понатамошна информација.',
+'shareduploadwiki-linktext'=> 'страница за опис на датотеката',
+'noimage'               => 'Не постои датотека со тоа име, можете $1',
+'noimage-linktext'      => 'да го подигнете',
+'uploadnewversion-linktext'=> 'Подигни нова верзија на оваа датотека',
+'imagelist_date'        => 'Датум',
+'imagelist_name'        => 'Име',
+'imagelist_user'        => 'Корисник',
+'imagelist_size'        => 'Големина (бајти)',
+'imagelist_description' => 'Опис',
+'imagelist_search_for'  => 'Барај име на слика:',
+'mimesearch'            => 'MIME пребарување',
+'mimetype'              => 'MIME тип:',
+'download'              => 'преземи',
+'unwatchedpages'        => 'Ненабљудувани страници',
+'listredirects'         => 'Листа на пренасочувања',
+'unusedtemplates'       => 'Неискористени шаблони',
+'unusedtemplatestext'   => 'Оваа страница ги прикажува сите страници во шаблонскиот именски простор кои не се вклучени во некоја друга страница. Не заборавајте да ги проверите другите врски во шаблоните пред да ги избришете.',
+'unusedtemplateswlh'    => 'други врски',
+'randomredirect'        => 'Случајно пренасочување',
+'statistics'            => 'Статистики',
+'sitestats'             => 'Статистики за {{SITENAME}}',
+'userstats'             => 'Статистики за корисници',
+'sitestatstext'         => 'Има вкупно \'\'\'$1\'\'\' страници во базата. 
+Оваа бројка вклучува "разговор" страници, страници за {{SITENAME}}, минимални 
+"никулци", пренасочувања, и други страници кои најверојатно не се сметаат за статии. 
+Без нив, има \'\'\'$2\'\'\' стрници кои се вистински статии. 
+
+\'\'\'$8\'\'\' датотеки се подигнати.
+
+Има вкупно \'\'\'$3\'\'\' прегледи на страници, и \'\'\'$4\'\'\' промени на страници откако овој 
+софтвер беше поставен. 
+Тоа се сведува на \'\'\'$5\'\'\' просечни менувања по страница, и \'\'\'$6\'\'\' прегледувања по страница.
+
+Должината на [http://meta.wikimedia.org/wiki/Help:Job_queue редицата за работи] изнесува \'\'\'$7\'\'\'.',
+'userstatstext'         => 'Има вкупно \'\'\'$1\'\'\' регистрирани корисници. 
+\'\'\'$2\'\'\' (или \'\'\'$4%\'\'\') од нив се $5.',
+'statistics-mostpopular'=> 'Најгледани страници',
+'disambiguations'       => 'Страници за појаснување',
+'disambiguationspage'   => 'Project:Врски до страници за појаснување',
+'disambiguationstext'   => 'Следните статии посочуваат кон <i>појаснителна страница</i>. Тие треба да посочуваат кон соодветниот наслов.<br />Страница се третира како појаснителна ако е поврзана од $1.<br />Овде <i>НЕ</i> се прикажуваат врски од други именски простори.',
+'doubleredirects'       => 'Двојни пренасочувања',
+'doubleredirectstext'   => 'Секој ред содржи врски кон првото и второто пренасочување, којшто обично ја посочува <i>вистинската</i> целна страница кон кое првото пренасочување би требало да насочува.',
+'brokenredirects'       => 'Прекинати пренасочувања',
+'brokenredirectstext'   => 'Следните пренасочувања покажуваат кон непостоечка статија.',
+'nbytes'                => '$1 бајти',
+'ncategories'           => '$1 категории',
+'nlinks'                => '$1 врски',
+'nmembers'              => '$1 {{PLURAL:$1|член|членови}}',
+'nrevisions'            => '$1 верзија',
+'nviews'                => '$1 прегледувања',
+'lonelypages'           => 'Осамени страници',
+'uncategorizedpages'    => 'Некатегоризирани страници',
+'uncategorizedcategories'=> 'Некатегоризирани категории',
+'uncategorizedimages'   => 'Некатегоризирани слики',
+'unusedcategories'      => 'Неискористени категории',
+'unusedimages'          => 'Неискористени слики',
+'popularpages'          => 'Популарни страници',
+'wantedcategories'      => 'Барани категории',
+'wantedpages'           => 'Барани страници',
+'mostlinked'            => 'Најмногу врски до страници',
+'mostlinkedcategories'  => 'Најмногу врски до категории',
+'mostcategories'        => 'Статии со најмногу категории',
+'mostimages'            => 'Најмногу врски до слики',
+'mostrevisions'         => 'Статии со најмногу верзии',
+'allpages'              => 'Сите страници',
+'prefixindex'           => 'Список на префикси',
+'randompage'            => 'Случајна страница',
+'shortpages'            => 'Кратки страници',
+'longpages'             => 'Долги страници',
+'deadendpages'          => 'Ќорсокак страници',
+'listusers'             => 'Листа на корисници',
+'specialpages'          => 'Специјални страници',
+'spheading'             => 'Специјални страници за сите корисници',
+'restrictedpheading'    => 'Специјални страници со ограничен пристап',
+'recentchangeslinked'   => 'Поврзани промени',
+'rclsub'                => '(до страници поврзани од "$1")',
+'newpages'              => 'Нови страници',
+'newpages-username'     => 'Корисничко име:',
+'ancientpages'          => 'Најстари статии',
+'intl'                  => 'Меѓујазични врски',
+'move'                  => 'Премести',
+'movethispage'          => 'Премести ја оваа страница',
+'unusedimagestext'      => '<p>Имајте во предвид дека други веб сајтови може да имаат врска кон слика 
+со директна URL, па може сеуште да се прикажуваат иако 
+активно се користат.</p>',
+'unusedcategoriestext'  => 'Следните категории постојат и покрај тоа што ниедна статија и категорија не ги користи.',
+'booksources'           => 'Печатени извори',
+'categoriespagetext'    => 'Во викито постојат следниве категории.',
+'data'                  => 'Податоци',
+'userrights'            => 'Управување со кориснички права',
+'groups'                => 'Кориснички групи',
+'booksourcetext'        => 'Подолу имате листа на сите врски до други веб сајтови кои 
+продаваат нови или користени книги, и може да имаат повеќе информации 
+за книгите што ги барате.',
+'alphaindexline'        => '$1 во $2',
+'version'               => 'Верзија',
+'log'                   => 'Дневници',
+'alllogstext'           => 'Комбиниран приказ на дневници на подигнувања, бришења, заштита, блокирање и администраторски. Можете да го стесните прегледот преку избор на вид на дневник, име на корисник, или односната страница.',
+'logempty'              => 'Нема одговарачки записи во дневникот.',
+'nextpage'              => 'Следна страница ($1)',
+'allpagesfrom'          => 'Прикажи страници кои започнуваат од:',
+'allarticles'           => 'Сите статии',
+'allinnamespace'        => 'Сите страници (именски простор $1)',
+'allnotinnamespace'     => 'Сите страници (кои не се во именскиот простор $1)',
+'allpagesprev'          => 'Претходна',
+'allpagesnext'          => 'Следна',
+'allpagessubmit'        => 'Оди',
+'allpagesprefix'        => 'Прикажи страници со префикс:',
+'allpagesbadtitle'      => 'Дадениот наслов е невалиден или има интер-јазичен или интер-вики префикс. Може да содржи повеќе карактери кои несмеат да се користат во наслови.',
+'listusersfrom'         => 'Прикажни корисници почнувајќи од:',
+'mailnologin'           => 'Нема адреса за праќање',
+'mailnologintext'       => 'Мора да бидете [[Special:Userlogin|најавени]] и да имате валидна е-поштенска адреса во вашите [[Special:Preferences|прилагодувања]] за да испратите е-пошта до други корисници.',
+'emailuser'             => 'Е-пошта до овој корисник',
+'emailpage'             => 'Е-пошта до корисникот',
+'emailpagetext'         => 'Ако овој корисник внесол валидна е-адреса во неговите или нејзините прилагодувања, долниот формулар ќе прати една порака. Е-поштенската адреса што ја внесовте во вашите прилагодувања ќе се прикаже во "Од" полето на пораката, со што примачот ќе може да ви одговори.',
+'usermailererror'       => 'Настана следната грешка:',
+'defemailsubject'       => '{{SITENAME}} е-пошта',
+'noemailtitle'          => 'Нема е-поштенска адреса',
+'noemailtext'           => 'Овој корисник нема наведено валидна е-поштенска адреса, или избрал да не прима е-пошта од други корисници.',
+'emailfrom'             => 'Од',
+'emailto'               => 'До',
+'emailsubject'          => 'Тема',
+'emailmessage'          => 'Порака',
+'emailsend'             => 'Прати',
+'emailsent'             => 'Е-поштата е пратена',
+'emailsenttext'         => 'Вашата е-пошта е пратена.',
+'watchlist'             => 'Моите набљудувани страници',
+'mywatchlist'             => 'Моите набљудувани страници',
+'watchlistfor'          => '(за \'\'\'$1\'\'\')',
+'nowatchlist'           => 'Немате елементи во вашите набљудувани страници.',
+'watchlistanontext'     => 'Ве молиме $1 за да гледате или менувате елементи во вашата листа на набљудувани страници.',
+'watchlistcount'        => '\'\'\'Имате $1 записи во вашата набљудувана листа, заедно со страници за разговор.\'\'\'',
+'clearwatchlist'        => 'Избриши ја листата за набљудување',
+'watchlistcleartext'    => 'Сигурно сакате да ги избришете?',
+'watchlistclearbutton'  => 'Избриши ја листата на набљудувани страници',
+'watchlistcleardone'    => 'Вашата листа на набљудувани страници е избришана. $1 записи беа избришани.',
+'watchnologin'          => 'Не сте најавени',
+'watchnologintext'      => 'Мора да бидете [[Special:Userlogin|најавени]] за да се модифицира вашата листа на набљудувани страници.',
+'addedwatch'            => 'Додадено во набљудувани страници',
+'addedwatchtext'        => 'Страницата"$1" е додадена во вашите [[Special:Watchlist|набљудувани страници]]. Идните промени на оваа страница и поврзаните со неа Страници за разговор ќе бидат прикажани овде и страницата ќе се прикаже \'\'\'задебелена\'\'\' во [[Special:Recentchanges|листата на скорешни промени]] за да можете полесно да ја изберете. <p>Ако подоцна сакате да ја отстраните страницата од набљудувани страници, притиснете на "Престани набљудување" .',
+'removedwatch'          => 'Отстрани ја страницата од набљудуваните страници',
+'removedwatchtext'      => 'Страницата "$1" е отстранета од набљудуваните страници.',
+'watch'                 => 'Набљудувај',
+'watchthispage'         => 'Набљудувајте ја оваа страница',
+'unwatch'               => 'Престани набљудување',
+'unwatchthispage'       => 'Престани набљудување',
+'notanarticle'          => 'Не е статија',
+'watchnochange'         => 'Ниедна од вашите набљудувани страници не беше уредувана во прикажаниот период.',
+'watchdetails'          => '* $1 набљудувани страници неброејќи ги страниците за разговор;
+* [[Special:Watchlist/edit|Прикажи и промени ја целосната листа на набљудувани страници]]
+* [[Special:Watchlist/clear|Ибриши ги сите страници]]',
+'wlheader-enotif'       => '* Известувањето по е-пошта е вклучено.',
+'wlheader-showupdated'  => '* Страниците кои се променети од вашата последна посета се прикажани со \'\'\'задебелени\'\'\' букви',
+'watchmethod-recent'    => 'Проверување на скорешните уредувања на набљудуваните страници',
+'watchmethod-list'      => 'Проверување на скорешните уредувања на набљудуваните страници',
+'removechecked'         => 'Отстрани ги означените елементи од набљудуваните страници',
+'watchlistcontains'     => 'Вие набљудувате $1 страници.',
+'watcheditlist'         => 'Ова е азбучна листа на вашите 
+набљудувани страници. Означете ги полињата на страниците кои сакате да ги остраните од вашата листа и притиснете го копчето \'Отстрани го избраното\' 
+на дното на екранот (бришењето на страница исто така ги брише и поврзаните статии за разговор, и обратно).',
+'removingchecked'       => 'Отстранување на избраните елементи од списокот...',
+'couldntremove'         => 'Не може да се отстрани елементот \'$1\'...',
+'iteminvalidname'       => 'Проблем со елементот \'$1\', неважечко име...',
+'wlnote'                => 'Подолу се последните $1 промени во последните <b>$2</b> часа.',
+'wlshowlast'            => 'Прикажи ги последните $1 часа $2 денови $3',
+'wlsaved'               => 'Ова е зачувана верзија од листата на набљудувани страници.',
+'wlhideshowown'         => '$1 мои уредувања',
+'wlhideshowbots'        => '$1 уредувања на ботови',
+'wldone'                => 'Готово.',
+'enotif_mailer'         => '{{SITENAME}} Систем за известување',
+'enotif_reset'          => 'Означи ги сите страници како посетени',
+'enotif_newpagetext'    => 'Ова е нова страница.',
+'changed'               => 'променет',
+'created'               => 'создадена',
+'enotif_subject'        => '{{SITENAME}} страницата $PAGETITLE беше $CHANGEDORCREATED од $PAGEEDITOR',
+'enotif_lastvisited'    => 'Видете $1 за сите промени од вашата последна посета.',
+'enotif_body'           => 'Драги $WATCHINGUSERNAME,
+
+страницата $PAGETITLE на {{SITENAME}} беше $CHANGEDORCREATED на $PAGEEDITDATE од $PAGEEDITOR, видете $PAGETITLE_URL за сегашната верзија.
+
+$NEWPAGE
+
+Резиме: $PAGESUMMARY $PAGEMINOREDIT
+
+Контактирајте го уредувачот:
+е-пошта: $PAGEEDITOR_EMAIL
+вики: $PAGEEDITOR_WIKI
+
+Веќе нема да има известувања за следните промени освен ако не ја посетите оваа страница. Исто така треба да ги ресетирате знаменцата за известување за сите ваши набљудувани страни во соодветната листа.
+
+             Вашиот пријателски {{SITENAME}} систем за известување
+
+--
+За да ги промените прилагодувањата за набљудување, посетете 
+{{fullurl:Special:Watchlist/edit}}
+
+Фидбек и помош:
+{{fullurl:Help:Содржина}}',
+'deletepage'            => 'Избриши ја страницата',
+'confirm'               => 'Потврди',
+'excontent'             => 'содржината беше: \'$1\'',
+'excontentauthor'       => 'содржината беше: \'$1\' (и единствениот автор беше \'$2\')',
+'exbeforeblank'         => 'содржината пред бришењето беше: \'$1\'',
+'exblank'               => 'страницата беше празна',
+'confirmdelete'         => 'Потврди го бришењето',
+'deletesub'             => '(Бришам "$1")',
+'historywarning'        => 'Предупредување: Страницата која сакате да ја избришете има историја:',
+'confirmdeletetext'     => 'На пат сте трајно да избришете страница или слика заедно со нејзината историја од базата на податоци. Ве молиме потврдете дека имате намера да го направите ова, и дека ги разбирате последиците, и дека го правите ова во согласност со [[Project:Википедија политика|нашата политика на однесување]].',
+'actioncomplete'        => 'Дејството беше извршено',
+'deletedtext'           => '"$1" беше избришана. Видете $2 за досие на скорешните бришења.',
+'deletedarticle'        => 'избришано "[[$1]]"',
+'dellogpage'            => 'Дневник на бришењата',
+'dellogpagetext'        => 'Подолу имате листа на последните бришења.',
+'deletionlog'           => 'дневник на бришењата',
+'reverted'              => 'Вратено на претходната верзија',
+'deletecomment'         => 'Причина за бришење',
+'imagereverted'         => 'Враќањето на претходната верзија е успешно.',
+'rollback'              => 'Врати промени',
+'rollback_short'        => 'Врати',
+'rollbacklink'          => 'Врати',
+'rollbackfailed'        => 'Враќањето беше неуспешно',
+'cantrollback'          => 'Не може да се врати последната промена, последниот автор е истовремено и единствен.',
+'alreadyrolled'         => 'Не може да се врати последната верзија [[:$1]] на [[User:$2|$2]] ([[User talk:$2|Разговор]]); некој веќе ја уредил или ги вратил промените на страницата. 
+
+Последното уредување беше на [[User:$3|$3]] ([[User talk:$3|Разговор]]).',
+'editcomment'           => 'Коментарот на уредувањето беше: "<i>$1</i>".',
+'revertpage'            => 'Отстрането уредување на [[Special:Contributions/$2|$2]], вратено на последната верзија на [[User:$1|$1]]',
+'sessionfailure'        => 'Има проблем со вашата сесија;
+оваа акција е откажана како превентива против преземање сесии.
+Притиснете го копчето „назад“ и повторно вчитајте ја страницата 
+од која дојдовте и обидете се повторно.',
+'protectlogpage'        => 'Дневник на заштитата',
+'protectlogtext'        => 'Подолу е листа на отклучувања/заклучувања на страницата. Видете [[Project:Заштитена страница]] за повеќе информации.',
+'protectedarticle'      => 'заштитена "[[$1]]"',
+'unprotectedarticle'    => 'отстранета заштита на "[[$1]]"',
+'protectsub'            => '(Заштитување "$1")',
+'confirmprotecttext'    => 'Дали навистина сакате да ја заштитите оваа страница?',
+'confirmprotect'        => 'Потврдете ја заштитата',
+'protectmoveonly'       => 'Заштити само од преместувања',
+'protectcomment'        => 'Причина за заштитување',
+'unprotectsub'          => '(Отстранување на заштитата на "$1")',
+'confirmunprotecttext'  => 'Дали навистина сакате да ја отстраните заштитата на оваа страница?',
+'confirmunprotect'      => 'Потврдете го отстранувањето на заштитата',
+'unprotectcomment'      => 'Причина за отстранување на заштитата',
+'protect-unchain'       => 'Отклучи ја можноста за преместување',
+'protect-text'          => 'Овде можете да го погледнете или смените нивото на заштита за страницата <strong>$1</strong>.
+Ве молиме прво прочитајте ги *** [[Project:Protected page|упатствата]].',
+'protect-viewtext'      => 'Вашата сметка нема дозвола за промена на нивоа
+на заштита за страници. Еве ги моменталните подесувања за страницата <strong>$1</strong>:',
+'protect-default'       => '(по основно)',
+'protect-level-autoconfirmed'=> 'Блокирај ги нерегистрираните корисници',
+'protect-level-sysop'   => 'Само администратори',
+'restriction-edit'      => 'Уреди',
+'restriction-move'      => 'Премести',
+'undelete'              => 'Врати ја избришаната страница',
+'undeletepage'          => 'Погледај и врати ги избришаните страници',
+'viewdeletedpage'       => 'Прегледај ги избришаните страници',
+'undeletepagetext'      => 'Следните страници се избришани, но сеуште се во архивата и можат да бидат обновени. Архивата може периодично да се чисти.',
+'undeleteextrahelp'     => 'За да ја вратите целата страница, одселектирајте ги сите полиња
+и притиснете на \'\'\'\'\'Врати\'\'\'\'\'. За да извршите селективно враќање, 
+селектирајте ги полињата до соодветните верзии за враќање и притиснете
+на \'\'\'\'\'Врати\'\'\'\'\'. Со притиснување на \'\'\'\'\'Ресетирај\'\'\'\'\' ги бришете
+коментарот и сите полиња за штиклирање.',
+'undeletearticle'       => 'Обновување на избришана страница',
+'undeleterevisions'     => '$1 архивирани верзии',
+'undeletehistory'       => 'Ако ја обновите страницата, сите верзии ќе бидат вратени во историјата. 
+Ако нова страница со исто име е создадена по бришењето, обновените 
+верзии ќе се појават во претходната историја, и тековната верзија на постоечката страница 
+нема да биде автоматски заменета.',
+'undeletehistorynoadmin'=> 'Оваа статија беше избришана. Причината за бришењето е наведена подолу,
+заедно со информации за корисникот кој ја уредувал страницата пред бришењето. Целиот текст
+од избришаните верзии е достапен само за администраторите.',
+'undeleterevision'      => 'Избришана ревизија на $1',
+'undeletebtn'           => 'Обнови!',
+'undeletereset'         => 'Ресетирај',
+'undeletecomment'       => 'Коментар:',
+'undeletedarticle'      => 'обновена "[[$1]]"',
+'undeletedrevisions'    => '$1 обновени верзии',
+'undeletedrevisions-files'=> 'вратени $1 ревизии и $2 датотеки',
+'undeletedfiles'        => 'Вратени $1 датотеки',
+'cannotundelete'        => 'Враќањето не успеа, некој друг можеби ја вратил страницата претходно.',
+'undeletedpage'         => '<big>\'\'\'$1 е обновена\'\'\'</big>
+
+Видете ја [[Special:Log/delete|историјата на бришења]] за листа на скоро избришани и обновени страници.',
+'namespace'             => 'Именски простор:',
+'invert'                => 'Обратен избор',
+'contributions'         => 'Придонеси',
+'mycontris'             => 'Моите придонеси',
+'contribsub2'            => 'За $1 ($2)',
+'nocontribs'            => 'Не се пронајдени промени што одговараат на овој критериум.',
+'ucnote'                => 'Подолу се последните <b>$1</b> промени на корисникот, во последните <b>$2</b> дена.',
+'uclinks'               => 'Гледај ги последните $1 промени; гледај ги последните $2 дена.',
+'uctop'                 => ' (врв)',
+'newbies'               => 'новајлија',
+'sp-newimages-showfrom' => 'Прикажи ги новите слики почнувајќи од $1',
+'sp-contributions-newest'=> 'Најнови',
+'sp-contributions-oldest'=> 'Најстари',
+'sp-contributions-newer'=> 'Нови $1',
+'sp-contributions-older'=> 'Стари $1',
+'sp-contributions-newbies-sub'=> 'За новајлии',
+'whatlinkshere'         => 'Што е поврзано со ова',
+'notargettitle'         => 'Нема цел',
+'notargettext'          => 'Не одредивте целна страница или корисник 
+на кој би се применила функцијата.',
+'linklistsub'           => '(Листа на врски)',
+'linkshere'             => 'Следните страници покажуваат кон \'\'\'[[:$1]]\'\'\':',
+'nolinkshere'           => 'Ниедна страница не е поврзана со \'\'\'[[:$1]]\'\'\'.',
+'isredirect'            => 'пренасочувачка страница',
+'istemplate'            => 'вклучување',
+'blockip'               => 'Блокирај го корисникот',
+'blockiptext'           => 'Користете го долниот формулар да го забраните пристапот за пишување
+од одредена IP адреса или корисничко име. 
+Ова единствено треба да се прави за да се спречи вандализам, и во 
+согласност со [[Project:Википедија политика|политиката]]. 
+Пополнете конкретна причина подолу (на пример, цитирање на конкретни 
+страници што биле вандализирани).',
+'ipaddress'             => 'IP адреса',
+'ipadressorusername'    => 'IP адреса или корисничко име',
+'ipbexpiry'             => 'Истек на рокот',
+'ipbreason'             => 'Причина',
+'ipbanononly'           => 'Блокирај само анонимни корисници',
+'ipbcreateaccount'      => 'Оневозможи креирање сметки',
+'ipbsubmit'             => 'Блокирај го овој корисник',
+'ipbother'              => 'Друг рок',
+'ipboptions'            => '2 часа:2 hours,1 ден:1 day,3 дена:3 days,1 недела:1 week,2 недели:2 weeks,1 месец:1 month,3 месеци:3 months,6 месеци:6 months,1 година:1 year,бесконечно:infinite',
+'ipbotheroption'        => 'друго',
+'badipaddress'          => 'Невалидна IP адреса',
+'blockipsuccesssub'     => 'Успешно блокирање',
+'blockipsuccesstext'    => '"$1" беше блокиран. 
+<br />Видете ја [[Special:Ipblocklist|листата на блокирани IP адреси]] за преглед на блокирањата.',
+'unblockip'             => 'Деблокирај го корисникот',
+'unblockiptext'         => 'Користете го долниот формулар да го обновите правото на пишување на претходно блокирана IP адреса или корисничко име.',
+'ipusubmit'             => 'Деблокирај ја оваа адреса',
+'unblocked'             => '[[User:$1|$1]] беше одблокиран',
+'ipblocklist'           => 'Листа на блокирани IP адреси и кориснички имиња',
+'blocklistline'         => '$1, $2 го блокираше $3 ($4)',
+'infiniteblock'         => 'бесконечно',
+'expiringblock'         => 'истекува на $1',
+'anononlyblock'         => 'само анон.',
+'createaccountblock'    => 'забрането креирање сметки',
+'ipblocklistempty'      => 'Листата на блокирања е празна.',
+'blocklink'             => 'блокирај',
+'unblocklink'           => 'деблокирај',
+'contribslink'          => 'придонеси',
+'autoblocker'           => 'Автоматски сте блокирани бидејќи делите IP адреса со "$1". Причина "$2".',
+'blocklogpage'          => 'Дневник на блокирања',
+'blocklogentry'         => 'блокиран "[[$1]]" со истек на рокот $2',
+'blocklogtext'          => 'Ова е дневник на блокирањата и деблокирањата, извршени од овој корисник. Автоматски 
+блокираните IP адреси не се наведени. Видете ја [[Special:Ipblocklist|листата на блокирани IP адреси]] за листа на тековни забрани и блокирања.',
+'unblocklogentry'       => 'деблокиран "$1"',
+'range_block_disabled'  => 'Администраторската можност да блокираат IP групи е исклучена.',
+'ipb_expiry_invalid'    => 'Неважечки истек на рок.',
+'ipb_already_blocked'   => '"$1" е веќе блокиран',
+'ip_range_invalid'      => 'Неважечки интервал за IP адреси.',
+'proxyblocker'          => 'Прокси блокирач',
+'ipb_cant_unblock'      => 'Грешка: $1 не постои. Можеби веќе е одблокиран.',
+'proxyblockreason'      => 'Вашата IP адреса е блокирана бидејќи е отворено прокси. Ве молиме контактирајте со вашиот доставувач на Интернет услуги или техничката поддршка и информирајте ги за овој сериозен безбедносен проблем.',
+'proxyblocksuccess'     => 'Готово.',
+'sorbsreason'           => 'Вашата IP адреса е запишана како отворено прокси во [http://www.sorbs.net SORBS] DNSBL.',
+'sorbs_create_account_reason'=> 'Вашата IP адреса е наведена како отворено прокси во [http://www.sorbs.net SORBS] DNSBL. Не можете да креирате сметка',
+'lockdb'                => 'Заклучи ја базата',
+'unlockdb'              => 'Отклучи ја базата',
+'lockdbtext'            => 'Заклучувањето на базата ќе им ја укине можноста на сите корисници да уредуваат страници, да ги менуваат нивните прилагодувања, да ги уредуваат нивните листи на набљудувани страници, и се останато што бара промени во базата. Ве молиме потврдете дека ова е вашата намера, и дека ќе ја отклучите базата кога ќе ја завршите работата околу нејзиното одржување.',
+'unlockdbtext'          => 'Отклучувањето на базата ќе им ја врати можноста на сите 
+корисници да уредуваат страници, да ги менуваат нивните прилагодувања, да ги уредуваат нивните листи на набљудувани страници, и се останато што бара промени во базата. 
+Ве молиме потврдете дека ова е вашата намера.',
+'lockconfirm'           => 'Да, навистина сакам да ја заклучам базата.',
+'unlockconfirm'         => 'Да, навистина сакам да ја отклучам базата.',
+'lockbtn'               => 'Заклучи ја базата',
+'unlockbtn'             => 'Отклучи ја базата',
+'locknoconfirm'         => 'Не ја потврдивте вашата намера.',
+'lockdbsuccesssub'      => 'Базата е заклучена',
+'unlockdbsuccesssub'    => 'Базата е отклучена',
+'lockdbsuccesstext'     => 'Базата е заклучена. <br />Сетете се да ја отклучите кога ќе завршите со нејзиното одржување.',
+'unlockdbsuccesstext'   => 'Базата е отклучена.',
+'lockfilenotwritable'   => 'Датотеката за заклучување на базата не е отворен за пишување. За да ја заклучите/отклучите базата, датотеката мора да биде достапна за пишување од веб серверот.',
+'databasenotlocked'     => 'Базата не е заклучена.',
+'rightslog'             => 'Историја на корисничките права',
+'rightslogtext'         => 'Ова е дневник на промени на кориснички права.',
+'rightslogentry'        => 'променето групно членство за $1 од $2 во $3',
+'rightsnone'            => '(нема)',
+'movepage'              => 'Премести ја страницата',
+'movepagetext'          => 'Со користењето на долниот формулар можете да преименувате страница, преместувајќи ја целата нејзина историја на новото име. Стариот наслов ќе стане страница за пренасочување кон новиот наслов.<br />
+\'\'\'Врските кон стариот наслов на страницата нема да бидат сменети;\'\'\' проверете дали постојат двојни или прекинати пренасочувања.<br />
+На вас е одговорноста да се осигурате дека врските ќе продолжат да насочуваат таму за каде се предвидени. 
+Имајте во предвид дека страницата НЕМА да биде преместена ако постои страница со новиот наслов, освен ако е празна или ако е пренасочување и нема историја на минати уредувања.<br />
+<b>ПРЕДУПРЕДУВАЊЕ!</b><br />
+Ова може да биде драстична и неочекувана промена за популарна страница; осигурајте се дека сте ги разбрале последиците од ова пред да продолжите.',
+'movepagetalktext'      => 'Соодветната страница за разговор, доколку постои, ќе биде автоматски преместена заедно со неа, освен ако: 
+*Ја преместувате страницата низ именски простори, 
+*Непразна страница за разговор веќе постои за новиот наслов, или 
+*Не сте го одштиклирале долното поле. Во тие случаи, вие ќе треба да ја преместите или споите страницата рачно, доколку сакате.',
+'movearticle'           => 'Премести ја страницата',
+'movenologin'           => 'Не сте најавени',
+'movenologintext'       => 'Мора да бидете регистриран корисник и [[Special:Userlogin|најавен]] да преместите страница.',
+'newtitle'              => 'Кон новиот наслов',
+'movepagebtn'           => 'Премести ја страницата',
+'pagemovedsub'          => 'Преместувањето успеа',
+'pagemovedtext'         => 'Страницата "[[$1]]" е преместена на "[[$2]]".',
+'articleexists'         => 'Страница со тоа име веќе постои, или името што го избравте не е валидно. Ве молиме изберете друго име.',
+'talkexists'            => 'Самата страница беше преместена успешно, но страницата за разговор не можеше да биде преместена бидејќи веќе постои таква на новиот наслов. Ве молиме спојте ги рачно.',
+'movedto'               => 'преместена како',
+'movetalk'              => 'Премести ја и страницата за разговор, ако е возможно.',
+'talkpagemoved'         => 'Соодветната страница за разговор исто така беше преместена.',
+'talkpagenotmoved'      => 'Соодветната страница за разговор <strong>не беше</strong> преместена.',
+'1movedto2'             => '[[$1]] преместена како [[$2]]',
+'1movedto2_redir'       => '[[$1]] преместена како [[$2]] преку пренасочување',
+'movelogpage'           => 'Дневник на преместувања',
+'movelogpagetext'       => 'Подолу е листа на преместени страници.',
+'movereason'            => 'Причина',
+'revertmove'            => 'врати',
+'delete_and_move'       => 'Избриши и премести',
+'delete_and_move_text'  => '==Потребно бришење== Целната статија "[[$1]]" веќе постои. Дали сакате да ја избришете за да ослободите место за преместувањето?',
+'delete_and_move_confirm'=> 'Да, избриши ја страницата',
+'delete_and_move_reason'=> 'Избришано за да се ослободи место за преместувањето',
+'selfmove'              => 'Страницата не може да биде преместена бидејќи целниот наслов се совпаѓа со првобитниот наслов.',
+'immobile_namespace'    => 'Целниот наслов е од специјален тип; не може да се преместуваат страници во тој именски простор.',
+'export'                => 'Извезување на страници',
+'exporttext'            => 'Можете да извезете како XML текст, така и историја на една или група страници. Добиените податоци може да: 
+*ги искористите во друг сајт, кој го користи МедијаВики софтверот ,
+*ги обработите или 
+*едноставно да ги искористите за лични потреби.
+
+За да извезете неколку страници, секоја нова секција ставајте ја во \'\'\'нов ред\'\'\'. Потоа изберете дали ја сакате само тековната верзија (заедно со информацијата за последното уредување) или сите верзии (заедно со тековната) на страницата.
+
+Ако ја сакате само тековната верзија, би можеле да искористите врска од видот [[Special:Export/Шах]] за страницата [[Шах]].',
+'exportcuronly'         => 'Вклучи ја само тековната верзија, не целосната историја',
+'exportnohistory'       => '----
+\'\'\'Забелешка:\'\'\' извезувањето на целата историја на страниците преку овој формулар е оневозможено заради подобри перформанси.',
+'export-submit'         => 'Извези',
+'allmessages'           => 'Системски пораки',
+'allmessagesname'       => 'Име',
+'allmessagesdefault'    => 'Текст по основно',
+'allmessagescurrent'    => 'Сегашен текст',
+'allmessagestext'       => 'Ова е листа на сите системски пораки досапни во МедијаВики: именскиот простор.',
+'allmessagesnotsupportedUI'=> 'Моменталниот интерфејс јазик <b>$1</b> не е поддржан од Special:AllMessages на овој сајт.',
+'allmessagesnotsupportedDB'=> 'Special:AllMessages не е поддржан бидејќи wgUseDatabaseMessages е исклучен.',
+'allmessagesfilter'     => 'Филтер за регуларни изрази:',
+'allmessagesmodified'   => 'Прикажи само изменети',
+'thumbnail-more'        => 'Зголеми',
+'missingimage'          => '<b>Недостасува слика</b><br /><i>$1</i>',
+'filemissing'           => 'Датотеката недостасува',
+'thumbnail_error'       => 'Грешка во креирањето на мини-слика: $1',
+'import'                => 'Увезување на страници',
+'importinterwiki'       => 'Трансвики увезување',
+'import-interwiki-text' => 'Изберете вики и наслов на страница за внесување.
+Времињата и авторите на ревизиите ќе се зачуваат.
+Сите трансвики акции за внесување се бележат во [[Special:Log/import|историјата за внесување]].',
+'import-interwiki-history'=> 'Копирај ги сите постари верзии за оваа страница',
+'import-interwiki-submit'=> 'Внеси',
+'import-interwiki-namespace'=> 'Премести страница во именски простор:',
+'importtext'            => 'Ве молиме извезете ја датотеката од изворното вики со користење на алатката Special:Export, зачувајте ја на вашиот диск и подигнете ја овде.',
+'importstart'           => 'Внесувам страници...',
+'import-revision-count' => '$1 {{PLURAL:$1|ревизија|ревизии}}',
+'importnopages'         => 'Нема страници за внесување.',
+'importfailed'          => 'Увозот не успеа: $1',
+'importunknownsource'   => 'Непознат тип за внесување',
+'importcantopen'        => 'Неможам да ја отворам датотеката за внесување',
+'importbadinterwiki'    => 'Лоша интервики врска',
+'importnotext'          => 'Празно или без текст',
+'importsuccess'         => 'Увозот успеа!',
+'importhistoryconflict' => 'Постои конфликтна историја на верзиите (можно е страницата веќе да била внесена)',
+'importnosources'       => 'Нема дефинирано трансвики извори за увезување и директните подигнувања на историја се оневозможени.',
+'importnofile'          => 'Нема подигнато увозна датотека.',
+'importuploaderror'     => 'Подигнувањето на увозната датотека не успеа; можеби датотеката е поголема од максималната дозволена големина.',
+'importlogpage'         => 'Дневник на внесувања',
+'importlogpagetext'     => 'Административно внесување на страници со историја од други викија.',
+'import-logentry-upload'=> 'внесена [[$1]] со подигнување',
+'import-logentry-upload-detail'=> '$1 ревизија(и)',
+'import-logentry-interwiki'=> 'трансвикифиран $1',
+'import-logentry-interwiki-detail'=> '$1 ревизија(и) од $2',
+'accesskey-diff'        => 'v',
+'tooltip-search'        => 'Пребарајте на {{SITENAME}}',
+'tooltip-minoredit'     => 'Обележете ја промената како ситна',
+'tooltip-save'          => 'Зачувајте ги вашите промени',
+'tooltip-preview'       => 'Прегледајте ги вашите промени, ве молиме користете го ова пред зачувување!',
+'tooltip-diff'          => 'Покажи кои промени ги направи во текстот.',
+'tooltip-compareselectedversions'=> 'Видете ги разликите меѓу двете избрани верзии на страницата.',
+'tooltip-watch'         => 'Додај ја оваа страница во набљудуваните страници',
+'common.css'            => '/** CSS кодот на оваа страница ќе се примени на сите маски */',
+'monobook.css'          => '/* преку уредување на оваа датотека можете да ја прилагодите Monobook маската за целиот сајт */',
+'nodublincore'          => 'Dublin Core RDF метаподатоци се оневозможени за овој сервер.',
+'nocreativecommons'     => 'Creative Commons RDF метаподатоци се оневозможени за овој сервер.',
+'notacceptable'         => 'Вики серверот не може да генерира податоци во формат погоден за вашиот клиент.',
+'anonymous'             => 'Анонимен корисник од {{SITENAME}}',
+'siteuser'              => 'корисник на {{SITENAME}} $1',
+'lastmodifiedatby'      => 'Последната промена на страницата е извршена од $3, на $2, $1.',
+'and'                   => 'и',
+'othercontribs'         => 'Засновано на делото на $1.',
+'others'                => 'други',
+'siteusers'             => 'корисници на {{SITENAME}} $1',
+'creditspage'           => 'Библиографија и извори',
+'nocredits'             => 'Не постојат библиографија и извори за оваа страница.',
+'spamprotectiontitle'   => 'Филтер за заштита од спам',
+'spamprotectiontext'    => 'Страницата која сакавте да ја зачувате беше блокирана од филтерот за спам. Ова најверојатно е предизвикано од врска кон надворешен сајт.',
+'spamprotectionmatch'   => 'Следниот текст е она што го предизвика нашиот филтер за спам: $1',
+'subcategorycount'      => '{{PLURAL:$1|Постои една подкатегорија|Постојат $1 подкатегории}} во оваа категорија.',
+'categoryarticlecount'  => '{{PLURAL:$1|Постои една статија|Постојат $1 статии}} во оваа категорија.',
+'listingcontinuesabbrev'=> 'продолжува',
+'spambot_username'      => 'МедијаВики чистач на спам',
+'spam_reverting'        => 'Враќам на последната верзија што не содржи врска до $1',
+'spam_blanking'         => 'Сите верзии содржеа врски до $1, бришам',
+'infosubtitle'          => 'Информација за страницата',
+'numedits'              => 'Број на уредувања (статија): $1',
+'numtalkedits'          => 'Број на уредувања (страница за разговор): $1',
+'numwatchers'           => 'Број на набљудувачи: $1',
+'numauthors'            => 'Број на различни автори (статија): $1',
+'numtalkauthors'        => 'Број на различни автори (страница за разговор): $1',
+'mw_math_png'           => 'Секогаш исцртувај во PNG',
+'mw_math_simple'        => 'HTML ако е многу едноставно ако не во PNG',
+'mw_math_html'          => 'HTML ако е можно ако не PNG',
+'mw_math_source'        => 'Остави го како TeX (за теx прелистувачите)',
+'mw_math_modern'        => 'Препорачливо за современи прелистувачи',
+'mw_math_mathml'        => 'MathML ако е можно (експериментално)',
+'markaspatrolleddiff'   => 'Означи како проверена верзија',
+'markaspatrolledtext'   => 'Означи ја верзијата како проверена',
+'markedaspatrolled'     => 'Проверена верзија',
+'markedaspatrolledtext' => 'Избраната верзија е означена како проверена.',
+'rcpatroldisabled'      => 'Патролирањето е деактивирано',
+'rcpatroldisabledtext'  => 'Патролирањето на Скорешните промени е деактивирано.',
+'markedaspatrollederror'=> 'Не можам да означам како проверена',
+'markedaspatrollederrortext'=> 'Морате да внесете верзија за да ја означите како проверена.',
+'monobook.js' => '/* Deprecated; use [[MediaWiki:common.js]] */',
+ 
+'accesskey-pt-userpage' => '.',
+'tooltip-pt-userpage' => 'Мојата корисничка страница',
+'accesskey-pt-anonuserpage' => '.',
+'tooltip-pt-anonuserpage' => 'Корисничка страница за IP адресата од која уредувате',
+'accesskey-pt-mytalk' => 'n',
+'tooltip-pt-mytalk' => 'Мојата страница за разговор ',
+'accesskey-pt-anontalk' => 'n',
+'tooltip-pt-anontalk' => 'Разговор за уредувањата од оваа IP адреса',
+'accesskey-pt-preferences' => '',
+'tooltip-pt-preferences' => 'Мои прилагодувања',
+'accesskey-pt-watchlist' => 'l',
+'tooltip-pt-watchlist' => 'Листа на страници кои сте избрале да ги набљудувате.',
+'accesskey-pt-mycontris' => 'y',
+'tooltip-pt-mycontris' => 'Листа на моите придонеси',
+'accesskey-pt-login' => 'o',
+'tooltip-pt-login' => 'Ве охрабруваме да се најавите, иако тоа не е задолжително.',
+'accesskey-pt-anonlogin' => 'o',
+'tooltip-pt-anonlogin' => 'Ве охрабруваме да се најавите, иако тоа не е задолжително.',
+'accesskey-pt-logout' => '',
+'tooltip-pt-logout' => 'Одјавете се',
+'accesskey-ca-talk' => 't',
+'tooltip-ca-talk' => 'Разговор за страницата',
+'accesskey-ca-edit' => 'e',
+'tooltip-ca-edit' => 'Можете да ја уредите оваа страница. Ве молиме користете го копчето за преглед пред зачувување.',
+'accesskey-ca-addsection' => '+',
+'tooltip-ca-addsection' => 'Додадете коментар во овој разговор.',
+'accesskey-ca-viewsource' => 'e',
+'tooltip-ca-viewsource' => 'Оваа страница е заштитена. Можете да го видите изворниот код.',
+'accesskey-ca-history' => 'h',
+'tooltip-ca-history' => 'Претходни верзии на оваа страница.',
+'accesskey-ca-protect' => '=',
+'tooltip-ca-protect' => 'Заштитете ја оваа страница',
+'accesskey-ca-delete' => 'd',
+'tooltip-ca-delete' => 'Избришете ја оваа страница',
+'accesskey-ca-undelete' => 'd',
+'tooltip-ca-undelete' => 'Обновете ги уредувањата направени на оваа страница што постоеле пред да биде избришана',
+'accesskey-ca-move' => 'm',
+'tooltip-ca-move' => 'Преместете ја оваа страница',
+'accesskey-ca-watch' => 'w',
+'tooltip-ca-watch' => 'Додајте ја оваа страница во набљудувани страници',
+'accesskey-ca-unwatch' => 'w',
+'tooltip-ca-unwatch' => 'Отстранете ја оваа страница од набљудувани страници',
+'accesskey-search' => 'f',
+'tooltip-search' => 'Пребарајте го викито',
+'accesskey-p-logo' => '',
+'tooltip-p-logo' => 'Главна страница',
+'accesskey-n-mainpage' => 'z',
+'tooltip-n-mainpage' => 'Посетете ја главната страница',
+'accesskey-n-portal' => '',
+'tooltip-n-portal' => 'За проектот, што можете да направите, каде да најдете некои работи',
+'accesskey-n-currentevents' => '',
+'tooltip-n-currentevents' => 'Најдете информации за тековните настани',
+'accesskey-n-recentchanges' => 'r',
+'tooltip-n-recentchanges' => 'Листа на скорешни промени на викито.',
+'accesskey-n-randompage' => 'x',
+'tooltip-n-randompage' => 'Случајна страница',
+'accesskey-n-help' => '',
+'tooltip-n-help' => 'Место каде што може да се информирате.',
+'accesskey-n-sitesupport' => '',
+'tooltip-n-sitesupport' => 'Поддржете ја Википедија',
+'accesskey-t-whatlinkshere' => 'j',
+'tooltip-t-whatlinkshere' => 'Листа на сите вики страници поврзани овде',
+'accesskey-t-recentchangeslinked' => 'k',
+'tooltip-t-recentchangeslinked' => 'Скорешни промени поврзани од оваа страница',
+'accesskey-feed-rss' => '',
+'tooltip-feed-rss' => 'RSS feed за страницата',
+'accesskey-feed-atom' => '',
+'tooltip-feed-atom' => 'Atom feed за страницата',
+'accesskey-t-contributions' => '',
+'tooltip-t-contributions' => 'Видете ја листата на придонеси на овој корисник',
+'accesskey-t-emailuser' => '',
+'tooltip-t-emailuser' => 'Пратете е-пошта на овој корисник',
+'accesskey-t-upload' => 'u',
+'tooltip-t-upload' => 'Подигнете слики или медија датотеки',
+'accesskey-t-specialpages' => 'q',
+'tooltip-t-specialpages' => 'Листа на сите специјални страници',
+'accesskey-ca-nstab-main' => 'c',
+'tooltip-ca-nstab-main' => 'Видете ја основната страница',
+'accesskey-ca-nstab-user' => 'c',
+'tooltip-ca-nstab-user' => 'Видете ја корисничката страница',
+'accesskey-ca-nstab-media' => 'c',
+'tooltip-ca-nstab-media' => 'Видете ја медија страницата',
+'accesskey-ca-nstab-special' => '',
+'tooltip-ca-nstab-special' => 'Ова е специјална страница, не можете да ја уредувате.',
+'accesskey-ca-nstab-project' => 'a',
+'tooltip-ca-nstab-project' => 'Видете ја проектната страница',
+'accesskey-ca-nstab-image' => 'c',
+'tooltip-ca-nstab-image' => 'Видете ја страницата на сликата',
+'accesskey-ca-nstab-mediawiki' => 'c',
+'tooltip-ca-nstab-mediawiki' => 'Видете ја системската порака',
+'accesskey-ca-nstab-template' => 'c',
+'tooltip-ca-nstab-template' => 'Видете го шаблонот',
+'accesskey-ca-nstab-help' => 'c',
+'tooltip-ca-nstab-help' => 'Видете ја помошната страница',
+'accesskey-ca-nstab-category' => 'c',
+'tooltip-ca-nstab-category' => 'Видете ја страницата со категории',
+'deletedrevision'       => 'Избришана стара верзија $1.',
+'previousdiff'          => '< Претходна разлика',
+'nextdiff'              => 'Следна разлика >',
+'imagemaxsize'          => 'Ограничи ги сликите на нивните описни страници до:',
+'thumbsize'             => 'Големина на мини-слика:',
+'showbigimage'          => 'Преземете ја верзијата со висока резолуција ($1x$2, $3 KB)',
+'newimages'             => 'Галерија на нови слики',
+'showhidebots'          => '($1 ботови)',
+'noimages'              => 'Нема ништо.',
+'specialloguserlabel'   => 'Корисник:',
+'speciallogtitlelabel'  => 'Наслов:',
+'passwordtooshort'      => 'Вашата лозинка е прекратка. Мора да има најмалку $1 знаци.',
+'mediawarning'          => '\'\'\'Предупредување\'\'\': Оваа датотека може да содржи штетен код, нејзиното извршување може да му наштети на вашиот систем<hr />',
+'fileinfo'              => '$1KB, MIME тип: <code>$2</code>',
+'metadata'              => 'Метаподатоци',
+'metadata-help'         => 'Оваа датотека содржи дополнителни информации, најверојатно додадени од дигитален апарат или скенер користен за нивното креирање или дигитализација. Ако датотеката се промени, некои детали може да не одговараат на модифицираната слика.',
+'metadata-expand'       => 'Прикажи ги проширените информации',
+'metadata-collapse'     => 'Сокриј ги проширените информации',
+'exif-imagewidth'       => 'Ширина',
+'exif-imagelength'      => 'Висина',
+'exif-bitspersample'    => 'Битови по компонента',
+'exif-compression'      => 'Шема на компресијата',
+'exif-photometricinterpretation'=> 'Колор модел',
+'exif-orientation'      => 'Ориентација на кадарот',
+'exif-samplesperpixel'  => 'Број на колор компоненти',
+'exif-planarconfiguration'=> 'Принцип на распоредот на податоците',
+'exif-ycbcrsubsampling' => 'Однос на компонентата Y спрема C',
+'exif-ycbcrpositioning' => 'Распоред на компонентите Y и C',
+'exif-xresolution'      => 'Хоризонтална резолуција',
+'exif-yresolution'      => 'Вертикална резолуција',
+'exif-resolutionunit'   => 'Единица за резолуција',
+'exif-stripoffsets'     => 'Положба на блокот на податоци',
+'exif-rowsperstrip'     => 'Број на редови во блокот',
+'exif-stripbytecounts'  => 'Големина на компресираниот блок',
+'exif-jpeginterchangeformat'=> 'Оддалеченост на JPEG прегледот од почетокот на фајлот',
+'exif-jpeginterchangeformatlength'=> 'Количина на бајтови во JPEG прегледот',
+'exif-transferfunction' => 'Функција на преобликување на колор просторот',
+'exif-whitepoint'       => 'Хромацитет на белата точка',
+'exif-primarychromaticities'=> 'Хроматичност на примарните бои',
+'exif-ycbcrcoefficients'=> 'Матрични коефициенти на трансформација на колор просторот',
+'exif-referenceblackwhite'=> 'Место на белата и црната точка',
+'exif-datetime'         => 'Датум на последната промена на датотеката',
+'exif-imagedescription' => 'Име на сликата',
+'exif-make'             => 'Производител на камерата',
+'exif-model'            => 'Модел на камерата',
+'exif-software'         => 'Користен софтвер',
+'exif-artist'           => 'Автор',
+'exif-copyright'        => 'Носител на авторските права',
+'exif-exifversion'      => 'Exif верзија',
+'exif-flashpixversion'  => 'Поддржана верзија на Flashpix',
+'exif-colorspace'       => 'Простор на бојата',
+'exif-componentsconfiguration'=> 'Значење на секоја од компонентите.',
+'exif-compressedbitsperpixel'=> 'Мод на компресирање на сликата',
+'exif-pixelydimension'  => 'Полна висина на сликата',
+'exif-pixelxdimension'  => 'Полна ширина на сликата',
+'exif-makernote'        => 'Забелешки на производителот',
+'exif-usercomment'      => 'Коментар на корисникот',
+'exif-relatedsoundfile' => 'Поврзана звучна датотека',
+'exif-datetimeoriginal' => 'Датум и време на сликање',
+'exif-datetimedigitized'=> 'Датум и време на дигитализација',
+'exif-subsectime'       => 'Дел од секундата во кој е сликано',
+'exif-subsectimeoriginal'=> 'Дел од секундата во кој е фотографирано',
+'exif-subsectimedigitized'=> 'Дел од секундата во кој е дигитализирано',
+'exif-exposuretime'     => 'Експозиција',
+'exif-fnumber'          => 'F број на отворот на блендата',
+'exif-exposureprogram'  => 'Програм за експозиција',
+'exif-spectralsensitivity'=> 'Спектрална осетливост',
+'exif-isospeedratings'  => 'ИСО вредност',
+'exif-oecf'             => 'Оптоелектронски фактор на конверзија',
+'exif-shutterspeedvalue'=> 'Брзина на затворачот',
+'exif-aperturevalue'    => 'Отвор на блендата',
+'exif-brightnessvalue'  => 'Светлост',
+'exif-exposurebiasvalue'=> 'Компензација на експозицијата',
+'exif-maxaperturevalue' => 'Минимален број на отворот на блендата',
+'exif-subjectdistance'  => 'Оддалеченост до објектот',
+'exif-meteringmode'     => 'Режим на мерачот на времето',
+'exif-lightsource'      => 'Светлосен извор',
+'exif-flash'            => 'Блиц',
+'exif-focallength'      => 'Фокусна далечина на леќата',
+'exif-subjectarea'      => 'Положба и површина на објектот',
+'exif-flashenergy'      => 'Енергија на блицот',
+'exif-spatialfrequencyresponse'=> 'Просторна фреквенциска карактеристика',
+'exif-focalplanexresolution'=> 'Хоризонтална резолуција на фокусната рамнина',
+'exif-focalplaneyresolution'=> 'Вертикална резолуција на фокусната рамнина',
+'exif-focalplaneresolutionunit'=> 'Единица за резолуција на фокусната рамнина',
+'exif-subjectlocation'  => 'Положба на субјектот',
+'exif-exposureindex'    => 'Индекс на експозицијата',
+'exif-sensingmethod'    => 'Тип на сензори',
+'exif-filesource'       => 'Извор на датотеката',
+'exif-scenetype'        => 'Тип на сцена',
+'exif-cfapattern'       => 'CFA шаблон',
+'exif-customrendered'   => 'Додатна обработка на сликата',
+'exif-exposuremode'     => 'Режим за избор на експозицијата',
+'exif-whitebalance'     => 'Баланс на белата боја',
+'exif-digitalzoomratio' => 'Однос на дигиталниот зум',
+'exif-focallengthin35mmfilm'=> 'Еквивалент на фокусната далечина за 35 mm филм',
+'exif-scenecapturetype' => 'Тип на сцена на снимката',
+'exif-gaincontrol'      => 'Контрола на осветленоста',
+'exif-contrast'         => 'Контраст',
+'exif-saturation'       => 'Сатурација',
+'exif-sharpness'        => 'Острина',
+'exif-devicesettingdescription'=> 'Опис на подесувањата на апаратот',
+'exif-subjectdistancerange'=> 'Распон на оддалеченоста на субјектот',
+'exif-imageuniqueid'    => 'Единствен идентификатор на сликата',
+'exif-gpsversionid'     => 'Верзија на блокот на GPS информации',
+'exif-gpslatituderef'   => 'Северна или Јужна ширина',
+'exif-gpslatitude'      => 'Ширина',
+'exif-gpslongituderef'  => 'Источна или западна должина',
+'exif-gpslongitude'     => 'Должина',
+'exif-gpsaltituderef'   => 'Висина под или над морето',
+'exif-gpsaltitude'      => 'Висина',
+'exif-gpstimestamp'     => 'GPS време (атомски часовник)',
+'exif-gpssatellites'    => 'Употребени сателити',
+'exif-gpsstatus'        => 'Статус на приемникот',
+'exif-gpsmeasuremode'   => 'Режим на мерењето',
+'exif-gpsdop'           => 'Прецизност на мерењето',
+'exif-gpsspeedref'      => 'Единица за брзината',
+'exif-gpsspeed'         => 'Брзина на GPS приемникот',
+'exif-gpstrackref'      => 'Тип на азимутот на приемникот (вистински или магнетен)',
+'exif-gpstrack'         => 'Азимут на приемникот',
+'exif-gpsimgdirectionref'=> 'Тип на азимутот на сликата (вистински или магнетен)',
+'exif-gpsimgdirection'  => 'Азимут на сликата',
+'exif-gpsmapdatum'      => 'Користен геодетски координатен систем',
+'exif-gpsdestlatituderef'=> 'Индекс за географската ширина на објектот',
+'exif-gpsdestlatitude'  => 'Географска ширина на објектот',
+'exif-gpsdestlongituderef'=> 'Индекс за географската должина на објектот',
+'exif-gpsdestlongitude' => 'Географска должина на објектот',
+'exif-gpsdestbearingref'=> 'Индекс на азимутот на објектот',
+'exif-gpsdestbearing'   => 'Азимут на објектот',
+'exif-gpsdestdistanceref'=> 'Мерна единица за оддалеченоста на објектот',
+'exif-gpsdestdistance'  => 'Оддалеченост на објектот',
+'exif-gpsprocessingmethod'=> 'Име на методот за обработка на GPS податоците',
+'exif-gpsareainformation'=> 'Има на GPS зоната',
+'exif-gpsdatestamp'     => 'GPS датум',
+'exif-gpsdifferential'  => 'GPS диференцијална корекција',
+'exif-compression-1'    => 'Некомпресиран',
+'exif-orientation-1'    => 'Нормално',
+'exif-orientation-2'    => 'Обратно по хоризонтала',
+'exif-orientation-3'    => 'Ротирано 180°',
+'exif-orientation-4'    => 'Обратно по вертикала',
+'exif-orientation-5'    => 'Ротирано 90° спротивно од правецот на стрелките на часовникот и обратно по вертикала',
+'exif-orientation-6'    => 'Ротирано 90° во правец на стрелките на часовникот',
+'exif-orientation-7'    => 'Ротирано 90° во правец на стрелките на часовникот и обратно по вертикала',
+'exif-orientation-8'    => 'Ротирано 90° спротивно од правецот на стрелките на часовникот',
+'exif-planarconfiguration-1'=> 'делумен формат',
+'exif-planarconfiguration-2'=> 'планарен формат',
+'exif-componentsconfiguration-0'=> 'не постои',
+'exif-exposureprogram-0'=> 'Недефинирано',
+'exif-exposureprogram-1'=> 'Рачно',
+'exif-exposureprogram-2'=> 'Нормална програма',
+'exif-exposureprogram-3'=> 'Приоритет на отворот на блендата',
+'exif-exposureprogram-4'=> 'Приоритет на затворачот',
+'exif-exposureprogram-5'=> 'Уметничка програма (на база на нужната длабочина на полето)',
+'exif-exposureprogram-6'=> 'Спортска програма (на база на што побрз затворач)',
+'exif-exposureprogram-7'=> 'Портретен режим (за крупни кадри со неоцтра позадина)',
+'exif-exposureprogram-8'=> 'Пејсажен режим (за слики на пејсажи со остра позадина)',
+'exif-subjectdistance-value'=> '$1 метри',
+'exif-meteringmode-0'   => 'Непознато',
+'exif-meteringmode-1'   => 'Просек',
+'exif-meteringmode-2'   => 'Просек со тежиште на средина',
+'exif-meteringmode-3'   => 'Точка',
+'exif-meteringmode-4'   => 'Повеќе точки',
+'exif-meteringmode-5'   => 'Матричен',
+'exif-meteringmode-6'   => 'Делумен',
+'exif-meteringmode-255' => 'Друго',
+'exif-lightsource-0'    => 'Непознато',
+'exif-lightsource-1'    => 'Дневна светлина',
+'exif-lightsource-2'    => 'Флуоресцентно',
+'exif-lightsource-3'    => 'Волфрам (светло)',
+'exif-lightsource-4'    => 'Блиц',
+'exif-lightsource-9'    => 'Убаво време',
+'exif-lightsource-10'   => 'Облачно време',
+'exif-lightsource-11'   => 'Сенка',
+'exif-lightsource-12'   => 'Флуоресцентна светлина (D 5700 – 7100K)',
+'exif-lightsource-13'   => 'Флуоресцентна светлина (N 4600 – 5400K)',
+'exif-lightsource-14'   => 'Флуоресцентна светлина (W 3900 – 4500K)',
+'exif-lightsource-15'   => 'Бела флуоресцентност (WW 3200 – 3700K)',
+'exif-lightsource-17'   => 'Стандардна светлина A',
+'exif-lightsource-18'   => 'Стандардна светлина B',
+'exif-lightsource-19'   => 'Стандардна светлина C',
+'exif-lightsource-24'   => 'ISO студиски волфрам',
+'exif-lightsource-255'  => 'Друг светлосен извор',
+'exif-focalplaneresolutionunit-2'=> 'инчи',
+'exif-sensingmethod-1'  => 'Недефинирано',
+'exif-sensingmethod-2'  => 'Еднокристален матричен сензор',
+'exif-sensingmethod-3'  => 'Двокристален матричен сензор',
+'exif-sensingmethod-4'  => 'Трокристален матричен сензор',
+'exif-sensingmethod-5'  => 'Секвенцијален матричен сензор',
+'exif-sensingmethod-7'  => 'Тробоен линеарен сензор',
+'exif-sensingmethod-8'  => 'Секвенцијален линеарен сензор',
+'exif-filesource-3'     => 'Дигитален фотоапарат',
+'exif-scenetype-1'      => 'Директно фотографирана слика',
+'exif-customrendered-0' => 'Нормален процес',
+'exif-customrendered-1' => 'Нестандарден процес',
+'exif-exposuremode-0'   => 'Автоматска експозиција',
+'exif-exposuremode-1'   => 'Рачна експозиција',
+'exif-exposuremode-2'   => 'Автоматски со зададен распон',
+'exif-whitebalance-0'   => 'Автоматски',
+'exif-whitebalance-1'   => 'Рачно',
+'exif-scenecapturetype-0'=> 'Стандардно',
+'exif-scenecapturetype-1'=> 'Пејсаж',
+'exif-scenecapturetype-2'=> 'Портрет',
+'exif-scenecapturetype-3'=> 'Ноќна сцена',
+'exif-gaincontrol-0'    => 'Нема',
+'exif-gaincontrol-1'    => 'Мало зголемување',
+'exif-gaincontrol-2'    => 'Големо зголемување',
+'exif-gaincontrol-3'    => 'Мало смалување',
+'exif-gaincontrol-4'    => 'Големо смалување',
+'exif-contrast-0'       => 'Нормално',
+'exif-contrast-1'       => 'Меко',
+'exif-contrast-2'       => 'Грубо',
+'exif-saturation-0'     => 'Нормално',
+'exif-saturation-1'     => 'Ниска сатурација',
+'exif-saturation-2'     => 'Висока сатурација',
+'exif-sharpness-0'      => 'Нормално',
+'exif-sharpness-1'      => 'Меко',
+'exif-sharpness-2'      => 'Тврдо',
+'exif-subjectdistancerange-0'=> 'Непознато',
+'exif-subjectdistancerange-1'=> 'Крупен кадар (макро)',
+'exif-subjectdistancerange-2'=> 'Близок кадар',
+'exif-subjectdistancerange-3'=> 'Далечен кадар',
+'exif-gpslatitude-n'    => 'Север',
+'exif-gpslatitude-s'    => 'Југ',
+'exif-gpslongitude-e'   => 'Исток',
+'exif-gpslongitude-w'   => 'Запад',
+'exif-gpsstatus-a'      => 'Мерење во тек',
+'exif-gpsstatus-v'      => 'Подготвен за пренос',
+'exif-gpsmeasuremode-2' => 'Дводимензионално мерење',
+'exif-gpsmeasuremode-3' => 'Тродимензионално мерење',
+'exif-gpsspeed-k'       => 'Километри на час',
+'exif-gpsspeed-m'       => 'Милји на час',
+'exif-gpsspeed-n'       => 'Јазли',
+'exif-gpsdirection-t'   => 'Вистински правец',
+'exif-gpsdirection-m'   => 'Магнетен правец',
+'edit-externally'       => 'Уредете ја оваа датотека со надворешна апликација',
+'edit-externally-help'  => 'Видете [http://meta.wikimedia.org/wiki/Help:External_editors setup instructions] за повеќе информации.',
+'recentchangesall'      => 'сите',
+'imagelistall'          => 'сите',
+'watchlistall1'         => 'сите',
+'watchlistall2'         => 'сите',
+'namespacesall'         => 'сите',
+'confirmemail'          => 'Потврди е-поштенска адреса',
+'confirmemail_noemail'  => 'Немате поставено валидна е-поштенска адреса во вашите [[Special:Preferences|прилагодувања]].',
+'confirmemail_text'     => 'Ова вики бара да ја валидирате вашата е-поштенска адреса 
+пред да ги користите можностите за е-пошта. Активирајте го копчето подолу за да
+пратите потврдна порака до вашата адреса. Оваа порака ќе содржи врска со код; 
+отворете ја врската во вашиот прелистувач за да потврдите дека вашата е-поштенска 
+адреса е валидна.',
+'confirmemail_send'     => 'Прати код за потврда',
+'confirmemail_sent'     => 'Пораката за потврда е пратена.',
+'confirmemail_sendfailed'=> 'Не можам да пратам порака со код за потврда. Проверете дали адресата содржи неважечки знаци.',
+'confirmemail_invalid'  => 'Неточен код за потврда. Кодот можеби е истечен.',
+'confirmemail_needlogin'=> 'Морате да $1 за да ја потврдите вашата е-поштенска адреса.',
+'confirmemail_success'  => 'Вашата е-поштенска адреса сега е потврдена. Можете да се најавите и да уживате во викито.',
+'confirmemail_loggedin' => 'Вашата е-поштенска адреса сега е потврдена.',
+'confirmemail_error'    => 'Нешто тргна наопаку при снимањето на вашата потврда.',
+'confirmemail_subject'  => '{{SITENAME}} потврда за е-поштенска адреса',
+'confirmemail_body'     => 'Некој, најверојатно вие, од IP адресата $1, ја регистрираше 
+сметката "$2" со оваа е-поштенска адреса на {{SITENAME}}.
+
+За да потврдите дека оваа сметка навистина ви припаѓа вам и да ги 
+активирате е-поштенските можности на {{SITENAME}}, отворете ја оваа 
+врска во вашиот прелистувач:
+
+$3
+
+Ако ова *не* сте вие, не одете на врската. Овој код за потврда ќе
+истече на $4.',
+'tryexact'              => 'Обиди се точно',
+'searchfulltext'        => 'Барај низ целиот текст',
+'createarticle'         => 'Создади статија',
+'scarytranscludedisabled'=> '[Интервики вклучувањето е оневозможено]',
+'scarytranscludefailed' => '[Преземањето на шаблонот за $1 не успеа]',
+'scarytranscludetoolong'=> '[Адресата е предолга; жалиме]',
+'trackbackbox'          => '<div id="mw_trackbacks">
+Враќања за оваа статија:<br />
+$1
+</div>',
+'trackbackremove'       => ' ([$1 Бришење])',
+'trackbacklink'         => 'Враќање',
+'trackbackdeleteok'     => 'Враќањето беше успешно избришано.',
+'deletedwhileediting'   => 'Предупредување: Оваа страница беше избришана откако почнавте со уредување!',
+'confirmrecreate'       => 'Корисникот [[User:$1|$1]] ([[User talk:$1|talk]]) ја избриша оваа статија откако почнавте да ја уредувате заради:
+: \'\'$2\'\'
+Потврдете дека навистина сакате повторно да ја креирате оваа статија.',
+'recreate'              => 'Повторно направи',
+'tooltip-recreate'      => 'Повторно креирај ја страницата иако беше избришана',
+'unit-pixel'            => 'п',
+'redirectingto'         => 'Пренасочувам на [[$1]]...',
+'confirm_purge'         => 'Да се исчисти кешот на оваа страница?
+
+$1',
+'confirm_purge_button'  => 'Да',
+'youhavenewmessagesmulti'=> 'Имате нови пораки на $1',
+'searchcontaining'      => 'Барам статии што содржат \'\'$1\'\'.',
+'searchnamed'           => 'Статии со име: \'\'$1\'\'.',
+'articletitles'         => 'Статии кои почнуваат со \'\'$1\'\'',
+'hideresults'           => 'Сокриј резултати',
+'displaytitle'          => '(Врски до оваа страница како [[$1]])',
+'loginlanguagelabel'    => 'Јазик: $1',
+'imgmultipageprev'      => '&larr; претходна страница',
+'imgmultipagenext'      => 'следна страница &rarr;',
+'imgmultigo'            => 'Оди!',
+'imgmultigotopre'       => 'Оди на страница',
+'ascending_abbrev'      => 'раст',
+'descending_abbrev'     => 'опаѓ',
+'table_pager_next'      => 'Следна страница',
+'table_pager_prev'      => 'Претходна страница',
+'table_pager_first'     => 'Прва страница',
+'table_pager_last'      => 'Последна страница',
+'table_pager_limit'     => 'Прикажи $1 записи по страница',
+'table_pager_limit_submit'=> 'Оди',
+'table_pager_empty'     => 'Нема резултати',
+);
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesMl.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesMl.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesMl.php	(revision 1280)
@@ -0,0 +1,22 @@
+<?php
+/** Malayalam (മലയാളം)
+  *
+  * @addtogroup Language
+  *
+  * @author Ævar Arnfjörð Bjarmason <avarab@gmail.com>
+  */
+
+$digitTransformTable = array(
+	'0' => '൦',
+	'1' => '൧',
+	'2' => '൨',
+	'3' => '൩',
+	'4' => '൪',
+	'5' => '൫',
+	'6' => '൬',
+	'7' => '൭',
+	'8' => '൮',
+	'9' => '൯'
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesMr.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesMr.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesMr.php	(revision 1280)
@@ -0,0 +1,272 @@
+<?php
+
+$namespaceNames = array(
+	NS_MEDIA          => 'Media',
+	NS_SPECIAL        => 'विशेष',
+	NS_MAIN           => '',
+	NS_TALK           => 'चर्चा',
+	NS_USER           => 'सदस्य',
+	NS_USER_TALK      => 'सदस्य_चर्चा',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK   => '$1_चर्चा',
+	NS_IMAGE          => 'चित्र',
+	NS_IMAGE_TALK     => 'चित्र_चर्चा',
+	NS_MEDIAWIKI      => 'MediaWiki',
+	NS_MEDIAWIKI_TALK => 'MediaWiki_talk',
+	NS_TEMPLATE       => 'साचा',
+	NS_TEMPLATE_TALK  => 'साचा_चर्चा',
+	NS_CATEGORY       => 'वर्ग',
+	NS_CATEGORY_TALK  => 'वर्ग_चर्चा',
+);
+
+$digitTransformTable = array(
+	"0" => "०",
+	"1" => "१",
+	"2" => "२",
+	"3" => "३",
+	"4" => "४",
+	"5" => "५",
+	"6" => "६",
+	"7" => "७",
+	"8" => "८",
+	"9" => "९"
+);
+$linkTrail = "/^([\xE0\xA4\x80-\xE0\xA5\xA3\xE0\xA5\xB1-\xE0\xA5\xBF\xEF\xBB\xBF\xE2\x80\x8D]+)(.*)$/sDu";
+
+$messages = array(
+'about'         => 'च्या विषयी',
+'cancel'        => 'रद्द करा',
+'qbfind'        => 'शोध',
+'qbbrowse'      => 'विचरण',
+'qbedit'        => 'संपादन',
+'qbpageoptions' => 'पृष्ठ विकल्प',
+'qbpageinfo'    => 'पृष्ठ जानकारी',
+'qbmyoptions'   => 'माझे विकल्प',
+'mypage'        => 'माझे पृष्ठ',
+'mytalk'        => 'माझ्या चर्चा',
+
+'errorpagetitle'    => 'चुक',
+'returnto'          => '$1 कडे परत चला.',
+'help'              => 'साहाय्य',
+'search'            => 'शोधा',
+'go'                => 'चला',
+'history'           => 'जुन्या आवृत्ती',
+'printableversion'  => 'छापन्यायोग्य आवर्तन',
+'editthispage'      => 'हे पृष्ठ संपादित करा',
+'deletethispage'    => 'हे पृष्ठ काढून टाका',
+'protectthispage'   => 'हे पृष्ठ सुरक्षित करा',
+'unprotectthispage' => 'हे पृष्ठ असुरक्षित करा',
+'newpage'           => 'नवीन पृष्ठ',
+'talkpage'          => 'चर्चा पृष्ठ',
+'articlepage'       => 'लेख पृष्ठ',
+'userpage'          => 'सदस्य पृष्ठ',
+'imagepage'         => 'चित्र पृष्ठ',
+'viewtalkpage'      => 'चर्चा पृष्ठ पहा',
+'otherlanguages'    => 'इतर भाषा',
+'redirectedfrom'    => '($1 पासून पुनर्निर्देशित)',
+'protectedpage'     => 'सुरक्षित पृष्ठ',
+
+# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
+'aboutpage'      => '{{ns:project}}:माहितीपृष्ठ',
+'bugreports'     => 'दोष अहवाल',
+'bugreportspage' => '{{ns:project}}:दोष अहवाल',
+'edithelp'       => 'संपादन साहाय्य',
+'edithelppage'   => '{{ns:project}} संपादन:साहाय्य',
+'faq'            => 'नेहमीची प्रश्नावली',
+'faqpage'        => '{{ns:project}}:प्रश्नावली',
+'helppage'       => '{{ns:project}}:साहाय्य पृष्ठ',
+'mainpage'       => 'मुखपृष्ठ',
+
+'ok'              => 'ठीक',
+'retrievedfrom'   => '"$1" पासून मिळविले',
+'newmessageslink' => 'नवीन संदेश',
+
+# Main script and global functions
+'nosuchaction'      => 'अशी कृती अस्तित्वात नाही',
+'nosuchspecialpage' => 'असे कोणतेही विशेष पृष्ठ अस्तित्वात नाही',
+
+# General errors
+'error'         => 'त्रुटी',
+'databaseerror' => 'माहितीसंग्रहातील त्रुटी',
+'dberrortextcl' => 'चुकीच्या प्रश्नलेखनामुळे माहितीसंग्रह त्रुटी.
+शेवटची माहितीसंग्रहाला पाठविलेला प्रश्न होता:
+"$1"
+"$2" या कार्यकृतीमधून .
+MySQL returned error "$3: $4".',
+
+# Login and logout pages
+'logouttitle'        => 'बाहेर पडा',
+'loginpagetitle'     => 'सदस्य नोंदणी',
+'yourname'           => 'तुमचे नाव',
+'yourpassword'       => 'तुमचा परवलीचा शब्द',
+'yourpasswordagain'  => 'तुमचा परवलीचा शब्द पुन्हा लिहा',
+'remembermypassword' => 'माझा परवलीचा पुढच्या खेपेसाठी शब्द लक्षात ठेवा.',
+'loginproblem'       => '<b>तुमच्या प्रवेशप्रक्रियेमध्ये चुक झाली आहे.</b><br />कृपया पुन्हा प्रयत्न करा!',
+'login'              => 'प्रवेश करा',
+'userlogin'          => 'सदस्य प्रवेश',
+'logout'             => 'बाहेर पडा',
+'userlogout'         => 'बाहेर पडा',
+'notloggedin'        => 'प्रवेशाची नोंदणी झालेली नाही!',
+'createaccount'      => 'नवीन खात्याची नोंदणी करा',
+'createaccountmail'  => 'इमेल द्वारे',
+'badretype'          => 'आपला परवलीचा शब्द चुकीचा आहे.',
+'userexists'         => 'या नावाने सदस्याची नोंदणी झालेली आहे, कृपया दुसरे सदस्य नाव निवडा.',
+'youremail'          => 'आपला इमेल *',
+'yournick'           => 'आपले उपनाव (सहीसाठी)',
+'loginerror'         => 'आपल्या प्रवेश नोंदणीमध्ये चुक झाली आहे',
+'noname'             => 'आपण नोंदणीसाठी सदस्याचे योग्य नाव लिहिले नाही.',
+'loginsuccesstitle'  => 'आपल्या प्रवेशाची नोंदणी यशस्वीरित्या पूर्ण झाली',
+'wrongpassword'      => 'आपला परवलीचा शब्द चुकीचा आहे, पुन्हा एकदा प्रयत्न करा.',
+'mailmypassword'     => 'कृपया परवलीचा नवीन शब्द माझ्या इमेल पत्त्यावर पाठविणे.',
+'noemail'            => '"$1" सदस्यासाठी कोणताही इमेल पत्ता दिलेला नाही.',
+'passwordsent'       => '"$1" सदस्याच्या इमेल पत्त्यावर परवलीचा नवीन शब्द पाठविण्यात आलेला आहे.
+तो शब्द वापरुन पुन्हा प्रवेश करा.',
+
+# Edit pages
+'summary'            => 'सारांश',
+'subject'            => 'विषय',
+'minoredit'          => 'हा एक छोटा बदल आहे',
+'watchthis'          => 'या लेखावर लक्ष ठेवा',
+'savearticle'        => 'हा लेख साठवून ठेवा',
+'preview'            => 'झलक',
+'showpreview'        => 'झलक दाखवा',
+'blockedtitle'       => 'या सदस्यासाठी प्रवेश नाकारण्यात आलेला आहे.',
+'whitelistedittitle' => 'संपादनासाठी सदस्य म्हणून प्रवेश आवश्यक आहे.',
+'whitelistreadtitle' => 'हा लेख वाचण्यासाठी [[Special:Userlogin|सदस्य म्हणून प्रवेश करावा लागेल]].',
+'whitelistreadtext'  => 'हा लेख वाचण्यासाठी [[Special:Userlogin|सदस्य म्हणून प्रवेश करावा लागेल]].',
+'whitelistacctitle'  => 'आपणास नवीन खात्याची नोंदणी करण्यास मनाई आहे.',
+'whitelistacctext'   => 'आपणास नवीन खात्याची नोंदणी करण्यास मनाई आहे, कृपया व्यवस्थापक सूचीमधील कोणात्याही व्यवस्थापकाशी संपर्क करावा',
+'accmailtitle'       => 'परवलीचा शब्द पाठविण्यात आलेला आहे.',
+'accmailtext'        => "'$1' चा परवलीचा शब्द $2 पाठविण्यात आलेला आहे.",
+'newarticle'         => '(नवीन लेख)',
+'anontalkpagetext'   => "---- ''हे बोलपान  अशा अज्ञात सदस्यासाठी आहे ज्यांनी खाते तयार केले नाही आहे
+ किंवा त्याचा वापर करत नाही आहे. त्याच्या ओळखीसाठी आम्ही आंतरजाल अंकपत्ता वापरतो आहे. असा अंकपत्ता 
+बऱ्याच लोकांच्यात एकच असू शकतो जर आपण अज्ञात सदस्य असाल आणि आपल्याला काही अप्रासंगिक  संदेश
+ मिळाला असेल तर  कृपया [[Special:Userlogin| खाते तयार करा किंवा प्रवेश करा]] ज्यामुळे पुढे असा गैरसमज होणार नाही.''",
+'updated'            => '(बदल झाला आहे.)',
+'note'               => '<strong>सूचना:</strong>',
+'previewnote'        => 'लक्षात ठेवा की ही फक्त झलक आहे, बदल अजून सुरक्षित केले नाहीत.',
+'editing'            => '$1 चे संपादन होत आहे.',
+'editconflict'       => 'वादग्रस्त संपादन: $1',
+'explainconflict'    => 'तुम्ही संपादनाला सुरूवात केल्यानंतर इतर कोणीतरी बदल केला आहे.
+वरील पाठ्यभागामध्ये सध्या अस्तिवात असलेल्या पृष्ठातील पाठ्य आहे, तर तुमचे बदल खालील 
+पाठ्यभागात दर्शविलेले आहेत. तुम्हाला हे बदल सध्या अस्तिवात असणाऱ्या पाठ्यासोबत एकत्रित करावे 
+लागतील.
+<b>केवळ</b> वरील पाठ्यभागामध्ये असलेले पाठ्य साठविण्यात येईल जर तुम्ही "साठवून ठेवा" ही
+कळ दाबली.
+<p>',
+'yourtext'           => 'तुमचे पाठ्य',
+'storedversion'      => 'साठविलेली आवृत्ती',
+'editingold'         => '<strong>इशारा: तुम्ही मूळ पृष्ठाची एक कालबाह्य आवृत्ती संपादित करीत आहात.
+जर आपण बदल साठवून ठेवण्यात आले तर या नंतरच्या सर्व आवृत्त्यांमधील साठविण्यात आलेले बदल नष्ठ होतील.</strong>',
+'yourdiff'           => 'फरक',
+'longpagewarning'    => 'इशारा: या पृष्ठ $1 kilobytes लांबीचे आहे; काही विचरकांना
+सुमारे ३२ किलोबाईट्स् आणि त्यापेक्षा जास्त लांबीच्या पृष्ठांना संपादित करण्यास अडचण येऊ शकते.
+कृपया या पृष्ठाचे त्याहून छोट्या भागात रुपांतर करावे',
+
+# History pages
+'revhistory'      => 'आवृत्ती इतिहास',
+'nohistory'       => 'या पृष्ठासाठी आवृत्ती इतिहास अस्तित्वात नाही.',
+'revnotfound'     => 'आवृत्ती सापडली नाही',
+'revnotfoundtext' => 'या पृष्ठाची तुम्ही मागविलेली जुनी आवृत्ती सापडली नाही.
+कृपया URL तपासून पहा.',
+'loadhist'        => 'पृष्ठाचा इतिहास दाखवित आहोत',
+'currentrev'      => 'चालू आवृत्ती',
+'revisionasof'    => '$1 नुसारची आवृत्ती',
+'cur'             => 'चालू',
+'next'            => 'पुढील',
+'last'            => 'मागील',
+'orig'            => 'मूळ',
+'histlegend'      => 'Legend: (चालू) = चालू आवृत्तीशी फरक,
+(मागील) = पूर्वीच्या आवृत्तीशी फरक, M = छोटा बदल',
+
+# Diffs
+'difference'  => '(आवर्तनांमधील फरक)',
+'loadingrev'  => 'फरकासाठी आवर्तने भरत(लोड करत) आहे',
+'lineno'      => 'ओळ $1:',
+'editcurrent' => 'या पृष्ठाची सध्याची आवृत्ती संपादित करा',
+
+# Image list
+'imagelist'      => 'चित्र यादी',
+'getimagelist'   => 'चित्र यादी खेचत आहे',
+'ilsubmit'       => 'शोधा',
+'showlast'       => '$2 क्रमबद्ध शेवटची $1 चित्रे पहा.',
+'byname'         => 'नावानुसार',
+'bydate'         => 'तारखेनुसार',
+'bysize'         => 'आकारानुसार',
+'imgdelete'      => 'पुसा',
+'imgdesc'        => 'वर्णन',
+'imglegend'      => 'अर्थ: (वर्णन) = चित्र वर्णन पहा/बदला.',
+'imghistory'     => 'चित्र इतिहास',
+'revertimg'      => 'उलट',
+'deleteimg'      => 'पुसा',
+'imghistlegend'  => 'अर्थ: (सद्य) = हे सध्याचे चित्र आहे, (पुसा) = ही जुनी
+आवृत्ती पुसून टाका, (उलट) = या जुन्या आवृत्तीवर उलटवा.
+<br /><i>तारखेवर टिचकी मारुन त्या दिवशी चढवलेली चित्रे पहा</i>.',
+'imagelinks'     => 'चित्र दुवे',
+'linkstoimage'   => 'खालील पाने या चित्राशी जोडली आहेत:',
+'nolinkstoimage' => 'या चित्राशी जोडलेली पृष्ठे नाही आहेत.',
+
+# Statistics
+'statistics' => 'सांख्यिकी',
+'sitestats'  => 'स्थळ सांख्यिकी',
+'userstats'  => 'सदस्य सांख्यिकी',
+
+# Contributions
+'contributions' => 'सदस्याचे योगदान',
+'mycontris'     => 'माझे योगदान',
+'contribsub2'    => '$1 ($2) साठी',
+'nocontribs'    => 'या मानदंडाशी जुळणारे बदल सापडले नाहीत.',
+'ucnote'        => 'या सदस्याचे गेल्या <b>$2</b> दिवसातील शेवटचे <b>$1</b> बदल दिले आहेत.',
+'uclinks'       => 'शेवटचे $1 बदल पहा;शेवटचे $2 दिवस पहा.',
+'uctop'         => ' (वर)',
+
+# What links here
+'whatlinkshere' => 'येथे काय जोडले आहे',
+'notargettitle' => 'कर्म(target) नाही',
+'notargettext'  => 'ही क्रिया करण्यासाठी तुम्ही सदस्य किंवा पृष्ठ लिहिले नाही.',
+'linklistsub'   => '(दुव्यांची यादी)',
+'isredirect'    => 'पुनर्निर्देशित पान',
+
+# Block/unblock
+'blockip'           => 'हा अंकपत्ता आडवा',
+'ipaddress'         => 'अंकपत्ता',
+'ipbreason'         => 'कारण',
+'ipbsubmit'         => 'हा पत्ता आडवा',
+'badipaddress'      => 'अंकपत्ता बरोबर नाही.',
+'blockipsuccesssub' => 'आडवणूक यशस्वी झाली',
+'unblockip'         => 'अंकपत्ता सोडवा',
+'unblockiptext'     => 'खाली दिलेला फॉर्म वापरून पुर्वी आडवलेल्या अंकपत्त्याला लेखनासाठी आधिकार द्या.',
+'ipusubmit'         => 'हा पत्ता सोडवा',
+'ipblocklist'       => 'आडवलेल्या अंकपत्त्यांची यादी',
+'blocklink'         => 'आडवा',
+'unblocklink'       => 'सोडवा',
+'contribslink'      => 'योगदान',
+
+# Move page
+'movepage'         => 'पृष्ठ स्थानांतरण',
+'movepagetalktext' => "संबंधित चर्चा पृष्ठ याबरोबर स्थानांतरीत होणार नाही '''जर:'''
+* तुम्ही पृष्ठ दुसऱ्या नामावकाशात  स्थानांतरीत करत असाल
+* या नावाचे चर्चा अगोदरच अस्तित्वात असेल तर, किंवा 
+* खालील चेकबॉक्स तुम्ही काढुन टाकला तर.
+
+या बाबतीत तुम्हाला स्वतःला ही पाने एकत्र करावी लागतील.",
+'movearticle'      => 'पृष्ठाचे स्थानांतरण',
+'movenologin'      => 'प्रवेश केलेला नाही',
+'newtitle'         => 'नवीन शिर्षकाकडे',
+'movepagebtn'      => 'स्थानांतरण करा',
+'pagemovedsub'     => 'स्थानांतरण यशस्वी',
+'pagemovedtext'    => 'पृष्ठ "[[$1]]" "[[$2]]" नावाने स्थानांतरीत केले.',
+'articleexists'    => 'त्या नावाचे पृष्ठ अगोदरच अस्तित्वात आहे, किंवा तुम्ही निवडलेले
+नाव योग्य नाही आहे.
+कृपया दुसरे नाव शोधा.',
+'talkexists'       => 'पृष्ठ यशस्वीरीत्या स्थानांतरीत झाले पण चर्चा पृष्ठ स्थानांतरीत होवू
+शकले नाही कारण त्या नावाचे पृष्ठ आधीच अस्तित्वात होते. कृपया तुम्ही स्वतः ती पृष्ठे एकत्र करा.',
+'movedto'          => 'कडे स्थानांतरण केले',
+'movetalk'         => 'शक्य असल्यास "चर्चा पृष्ठ" स्थानांतरीत करा',
+'talkpagemoved'    => 'संबंधित चर्चा पृष्ठही स्थानांतरीत केले.',
+'talkpagenotmoved' => 'संबंधित चर्चा पृष्ठ स्थानांतरीत केले <strong>नाही</strong>',
+
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesMs.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesMs.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesMs.php	(revision 1280)
@@ -0,0 +1,818 @@
+<?php
+/** Malay (Bahasa Melayu)
+ *
+ * @addtogroup Language
+ */
+
+# This localisation is based on a file kindly donated by the folks at MIMOS
+# http://www.asiaosc.org/enwiki/page/Knowledgebase_Home.html
+
+$namespaceNames = array(
+	NS_MEDIA          => 'Media',
+	NS_SPECIAL        => 'Istimewa', #Special
+	NS_MAIN           => '',
+	NS_TALK           => 'Perbualan',#Talk
+	NS_USER           => 'Pengguna',#User
+	NS_USER_TALK      => 'Perbualan_Pengguna',#User_talk
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK   => 'Perbualan_$1',#Wikipedia_talk
+	NS_IMAGE          => 'Imej',#Image
+	NS_IMAGE_TALK     => 'Imej_Perbualan',#Image_talk
+	NS_MEDIAWIKI      => 'MediaWiki',#MediaWiki
+	NS_MEDIAWIKI_TALK => 'MediaWiki_Perbualan',#MediaWiki_talk
+	NS_TEMPLATE       => 'Templat',#Template
+	NS_TEMPLATE_TALK  => 'Perbualan_Templat',#Template_talk
+	NS_CATEGORY       => 'Kategori',#Category
+	NS_CATEGORY_TALK  => 'Perbualan_Kategori',#Category_talk
+	NS_HELP           => 'Bantuan',#Help
+	NS_HELP_TALK      => 'Perbualan_Bantuan' #Help_talk
+);
+
+$datePreferences = false;
+
+
+$messages = array(
+
+# User Toggles
+
+"tog-underline" => "Gariskan pautan", #"Underline links",
+"tog-highlightbroken" => 'Formatkan pautan rosak <a href="" class="new">seperti ini</a> (ataupun seperti ini<a href="" class="internal">?</a>)', #'Format broken links <a href="" class="new">like this</a> (alternative: like this<a href="" class="internal">?</a>).',
+"tog-justify" => "Selaraskan perenggan", #"Justify paragraphs",
+"tog-hideminor" => "Sembunyikan suntingan kecil untuk perubahan terkini", #"Hide minor edits in recent changes",
+"tog-usenewrc" => "Pertingkatkan perubahan terkini (Javaskrip)",
+"tog-numberheadings" => "Nomborkan tajuk secara automatik", #"Auto-number headings",
+"tog-showtoolbar" => "Paparkan alat penyuntingan", #"Show edit toolbar",
+"tog-editsection"=> "Benarkan penyuntingan bahagian melalui pautan [sunting]",
+"tog-editsectiononrightclick" => "Benarkan penyuntingan melalui klik kanan<br /> pada tajuk bahagian (JavaSkrip)", #'Enable section editing by right clicking<br /> on section titles (JavaScript)',
+"tog-showtoc"=> "Paparkan jadual kandungan bagi rencana melebihi 3 tajuk", # "Show table of contents for articles with more than 3 headings",
+"tog-rememberpassword" => "Ingatkan kata laluan bagi setiap sesi", #"Remember password across sessions",
+"tog-editwidth" => "Kotak penyuntingan mencapai lebar penuh", #"Edit box has full width",
+"tog-editondblclick" => "Suntingkan halaman melalui dwiklik (JavaSkrip)", #"Edit pages on double click (JavaScript)"
+"tog-watchdefault" => "Masukkan halaman yang anda sunting ke senarai pantau", #"Add pages you edit to your watchlist",
+"tog-minordefault" => "Tandakan semua suntingan kecil secara lalai",#"Mark all edits minor by default"
+"tog-previewontop" => "Paparkan pratonton sebelum kotak penyuntingan dan bukan selepasnya", #"Show preview before edit box and not after it",
+"tog-previewonfirst"  => "Paparkan penyuntingan pertama", #'Show preview on first edit'
+"tog-nocache"         => "Matikan ingatan cache",
+'tog-enotifwatchlistpages' => "Emelkan saya jika terdapat perubahan halaman", #'Send me an email on page changes',
+'tog-enotifusertalkpages'  => "Emelkan saya jika terdapat perubahan halaman perbualan saya", #'Send me an email when my user talk page is changed',
+'tog-enotifminoredits'     => "Emelkan saya juga jika terdapat suntingan kecil pada halaman-halaman", #'Send me an email also for minor edits of pages',
+'tog-enotifrevealaddr'     => "Tunjukkan alamat emel saya dalam emel pemberitahuan", #"Reveal my email address in notification mails",
+'tog-shownumberswatching'  => "Paparkan bilangan pengguna yang memantau", #'Show the number of watching users',
+'tog-fancysig'             => "Tandatangan mentah (tanpa pautan automatik)", #'Raw signatures (without automatic link)',
+'tog-externaleditor'       => "Gunakan penyunting luar secara lalai", #'Use external editor by default',
+'tog-externaldiff'         => "Gunakan perbezaan luar secara lalai", #'Use external diff by default',
+'underline-always'         => "Sentiasa", #'Always',
+'underline-never'          => "Jangan", #'Never',
+'underline-default'        => "Lalai pelayar", #'Browser default',
+'skinpreview'              => "Paparkan", #'(Preview)',
+
+
+# Dates
+
+'sunday' => 'Ahad', #'Sunday',
+'monday' => 'Isnin', #'Monday',
+'tuesday' => 'Selasa', #'Tuesday',
+'wednesday' => 'Rabu', #'Wednesday',
+'thursday' => 'Khamis', #'Thursday',
+'friday' => 'Jumaat', #'Friday',
+'saturday' => 'Sabtu', #'Saturday',
+'january' => 'Januari', #'January',
+'february' => 'Februari', #'February',
+'march' => 'Mac', #'March',
+'april' => 'April',
+'may_long' => 'Mei', #'May',
+'june' => 'Jun', #'June',
+'july' => 'Julai', #'July',
+'august' => 'Ogos', #'August',
+'september' => 'September',
+'october' => 'Oktober', #'October',
+'november' => 'November',
+'december' => 'Disember', #'December',
+'jan' => 'Jan',
+'feb' => 'Feb',
+'mar' => 'Mac', #'Mar',
+'apr' => 'Apr',
+'may' => 'Mei', #'May',
+'jun' => 'Jun',
+'jul' => 'Jul',
+'aug' => 'Ogo', #'Ogo',
+'sep' => 'Sep',
+'oct' => 'Okt', #'Oct',
+'nov' => 'Nov',
+'dec' => 'Dis', #'Dec',
+
+
+
+# Bits of text used by many pages:
+#
+"mainpage"            => "Halaman Utama", #"Main Page",
+"mainpagetext"                => "Atur cara Wiki berjaya dipasang.",
+"portal"              => "Portal Masyarakat",
+"portal-url"          => "{{ns:project}}:Portal Masyarakat",
+"about"                       => "Perihal",
+"aboutsite"             => "Tentang {{SITENAME}}",
+"aboutpage"           => "{{ns:project}}:Perihal", #"{{ns:project}}:About",
+"help"                        => "Bantuan",
+"helppage"            => "{{ns:project}}:Bantuan",
+"bugreports"          => "Laporan Pepijat",
+"bugreportspage"        => "{{ns:project}}:Laporan Pepijat",
+"faq"                 => "FAQ",
+"faqpage"             => "{{ns:project}}:FAQ",
+"edithelp"            => "Bantuan menyunting",
+"edithelppage"                => "{{ns:project}}:Menyunting",
+"newwindow"             => "(terbuka dalam tetingkap baru)",
+"cancel"              => "Batal",
+"qbfind"              => "Cari",
+"qbbrowse"            => "Tinjau", #"Browse",
+"qbedit"              => "Sunting",
+"qbpageoptions"         => "Halaman Ini", #"This page",
+"qbpageinfo"          => "Konteks", #"Context",
+"qbmyoptions"         => "Pilihan saya",
+"qbspecialpages"        => "Halaman Istimewa",
+"moredotdotdot"         => "Lebih lanjut...",
+"mypage"              => "Halaman saya",
+"mytalk"              => "Perbualan saya",
+"anontalk"              => "Perbualan untuk IP ini",
+"navigation"            => "Pelayaran",
+"currentevents"         => "Peristiwa Semasa",
+"currentevents-url"     => "{{ns:project}}:Hal Semasa",
+"disclaimers"           => "Penafian",
+"disclaimerpage"        => "Project:Penafian_umum",
+"errorpagetitle"        => "Ralat Tajuk Halaman",
+"returnto"            => "Kembali ke $1.", #"Return to $1.",
+//"tagline"                     => "Dari Wikipedia, ensiklopedia bebas", # "From {{ns:project}}, the free encyclopedia",
+"whatlinkshere"               => "Halaman yang dipautkan ke sini", #"Pages that link here",
+"help"                        => "Bantuan",
+"search"              => "Cari",
+"searchbutton"        => "Cari",
+"go"                  => "Paparkan",
+'searcharticle'                  => "Paparkan",
+"history"             => "Sejarah Halaman",
+"history_short"         => "Sejarah",
+"info_short"            => "Maklumat",
+"printableversion"      => "Versi untuk dicetak",
+"editthispage"                => "Sunting halaman ini",
+"delete"                => "Hapus",
+"deletethispage"        => "Hapuskan halaman ini", #"Delete this page",
+"protect"               => "Lindung",
+"protectthispage"       => "Lindungi halaman ini", #"Protect this page",
+"unprotectthispage"     => "Nyahlindung halaman ini", #"Unprotect this page",
+"newpage"               => "(cipta) Halaman baru", #'(create) "New page"',
+"talkpage"            => "Halaman Perbualan",
+"specialpage"           => "Halaman Istimewa",
+"personaltools"         => "Alatan Peribadi",
+"postcomment"           => "Kirimkan komen",
+"toolbox"               => "Kotak Peralatan",
+"articlepage"         => "Lihat rencana", #"View article",
+"userpage"              => "Lihat halaman pengguna", #"View user page",
+"projectpage"         => "Lihat halaman meta", #"View meta page",
+"imagepage"             => "Paparkan halaman imej",
+"viewtalkpage"          => "Lihat perbualan", #"View discussion",
+"otherlanguages"        => "Bahasa Lain",
+"redirectedfrom"        => "(Dialihkan dari $1)", #"(Redirected from $1)",
+"lastmodifiedat"                => "Halaman ini diubah kali terakhir pada $2, $1.", #"The page was last modified $2, $1.",
+"copyright"             => "Kandungan tersedia di bawah $1.",
+"viewcount"           => "Halaman ini telah dicapai sebanyak $1 kali.", #"This page has been accessed $1 times.",
+"protectedpage"         => "Halaman Dilindungi", #"Protected page",
+"nbytes"              => "$1 bait",
+"ok"                  => "OK",
+"retrievedfrom"         => "Diperolehi daripada \"$1\"", #"Retrieved from \"$1\"",
+"editsection"           => "Sunting",
+"editold"           => "Sunting",
+"toc"                   => "Jadual Kandungan",
+"showtoc"               => "Paparkan",
+"hidetoc"               => "sorok",
+"thisisdeleted"         => "Lihat atau kembalikan $1?",
+"restorelink"           => "$1 suntingan dipadam",
+"feedlinks"             => "Menyuap:",
+"categories"            => "Kategori",
+"pagecategories"        => "Kategori",
+"category_header"       => "Rencana dalam kategori \"$1\"",
+"subcategories"         => "Subkategori",
+
+
+# Main script and global functions
+#
+"nosuchaction"                => "Tiada tindakan tersebut", #"No such action",
+"nosuchactiontext"      => "Tindakan yang ditetapkan oleh URL tidak dikenalpasti oleh perisian {{SITENAME}}.",
+"nosuchspecialpage"     => "Tiada halaman istimewa tersebut", #"No such special page",
+"nospecialpagetext"     => "Anda memintai halaman istimewa yang tidak dikenalpasti oleh perisian {{SITENAME}}.",
+
+
+# General errors        =>Ralat umum
+#
+"error"                       => "Ralat",
+"databaseerror"         => "Ralat Pangkalan Data", #"Database error",
+"dberrortext"         => "Kesalahan sintaks anda ini mungkin disebabkan oleh pepijat pangkalan data. Pertanyaan anda yang terakhir adalah: <blockquote><tt>$1</tt></blockquote> dari fungsi \"<tt>$2</tt>\". MySQL mengembalikan ralat \"<tt>$3: $4</tt>\".",
+"dberrortextcl"               => "Kesalahan sintaks anda ini mungkin disebabkan oleh pepijat pangkalan data. Pertanyaan anda yang terakhir adalah \"$1\ dari fungsi \"$2\". MySQL mengembalikan ralat  \"$3: $4\".<br />",
+"noconnect"           =>  "Maaf! Wiki ini mengalami masalah teknikal dan tidak dapat menghubungi pelayan pangkalan data. <br />", #"Sorry! The wiki is experiencing some technical difficulties, and cannot contact the database server. <br />",
+"nodb"                        => "Tidak dapat mencapai pangkalan data $1", #"Could not select database $1",
+"cachederror"           => "Berikut ini adalah salinan ingatan cache dari halaman yang dimintai. Salinan ini mungkin bukan versi yang terbaru.",
+"laggedslavemode"       => "<strong>AMARAN:</strong>: Halaman ini mungkin tidak mengandungi perubahan yang terbaru.",
+"readonly"            => "Pangkalan data terkunci", #"Database locked",
+"enterlockreason"       => "Masukkan alasan penguncian serta anggaran bila kunci akan dibuka",
+"readonlytext"                => "Pangkalan data {{SITENAME}} terkunci, mungkin untuk penyelenggaraan rutin, dan akan dibuka semula. Penyelia yang berkenaan memberi penjelasan berikut: <p>$1", #"The database is currently locked to new entries and other modifications, probably for routine database maintenance, after which it will be back to normal. The administrator who locked it offered this explanation: $1",
+"missingarticle"        => "Pangkalan data tidak dapat mencari teks \"$1\" yang sepatutnya wujud. Ini biasa berlaku kerana anda telah mengikuti pautan 'Perbezaan' yang lapuk ataupun pautan 'Sejarah' ke halaman terpadam.", #"The database did not find the text of a page that it should have found, named \"$1\". This is usually caused by following an outdated diff or history link to a page that has been deleted."
+"internalerror"         => "Ralat dalaman", #"Internal error",
+"filecopyerror"         => "Tidak dapat menyalinkan fail \"$1\" ke \"$2\".", #"Could not copy file \"$1\" to \"$2\".",
+"filerenameerror"       => "Tidak dapat menukarkan nama fail \"$1\" menjadi \"$2\".", #"Could not rename file \"$1\" to \"$2\".",
+"filedeleteerror"       => "Tidak dapat memadamkan fail \"$1\".", #"Could not delete file \"$1\".",
+"filenotfound"                => "Tidak dapat mencari fail \"$1\".", #"Could not find file \"$1\".",
+"unexpected"          => "Nilai di luar jangkaan: \"$1\"=\"$2\".", #"Unexpected value: \"$1\"=\"$2\".",
+"formerror"           => "Ralat: Tidak dapat mengirimkan borang", #"Error: could not submit form",
+"badarticleerror"       => "Tindakan ini tidak boleh dilaksanakan di halaman ini.", #"This action cannot be performed on this page.",
+"cannotdelete"                => "Tidak dapat memadamkan halaman atau imej yang dipilih.",
+"badtitle"            => "Tajuk tidak sah", #"Bad title",
+"badtitletext"                => "Tajuk halaman yang dimintai tidak sah, kosong, ataupun tajuk antara bahasa atau tajuk antara wiki salah dipaut.", #The requested page title was invalid, empty, or an incorrectly linked inter-language or inter-wiki title.",
+"perfdisabled"          => "Maaf! Ciri ini telah dimatikan buat sementara kerana ia melambatkan pangkalan data sehingga tidak dapat digunakan.", #"Sorry! This feature has been temporarily disabled because it slows the database down to the point that no one can use the wiki.",
+"perfdisabledsub"       => "Ini adalah salinan yang tersimpan di $1:", #"Here's a saved copy from $1:",
+"perfcached"            => "Data ini daripada ingatan cache dan mungkin bukan terkini:",
+"wrong_wfQuery_params"  => "Terdapat parameter yang salah ke wfQuery()<br />Fungsi: $1<br />Kueri: $2",
+"viewsource"            => "Lihat sumber",
+"protectedtext"         => "Halaman ini telah dikunci untuk menghalang penyuntingan. Sila lihat [[{{ns:project}}:Halaman Dilindungi]] untuk alasannya.\n\n Bagaimanapun, anda boleh melihat dan menyalin sumber halaman ini:", #"This page has been locked to prevent editing; there are a number of reasons why this may be so, please see [[Project:Protected page]].\n\n You can view and copy the source of this page:",
+'sqlhidden'             => '(Pertanyaan SQL disembunyikan)',
+
+
+# Login and logout pages
+#
+"logouttitle"   => "Pengguna keluar", #"User logout",
+"logouttext"            => "Anda telah keluar dari sistem. Anda masih boleh menggunakan {{SITENAME}} sebagai pengguna tanpa nama jika anda tidak ingin masuk semula. Perhatikan bahawa beberapa halaman mungkin masih dipaparkan sehingga anda membersihkan ingatan cache pelayar anda.<br />",
+"welcomecreation" => "<h2>Selamat datang, $1!</h2><p>Akaun anda telah dibuka. Sila memperibadikan \"Tatarajah\" {{SITENAME}} anda.</p>",
+"loginpagetitle"  => "Pengguna masuk", #"User login",
+"yourname"      => "Nama Pengguna", #"Your user name",
+"yourpassword"          => "Kata Laluan", #"Your password",
+"yourpasswordagain" => "Ulangi kata laluan", #"Retype password",
+"remembermypassword" => "Sentiasa ingati kata laluan saya.", #"Remember my password across sessions.",
+"yourdomainname"  => "Domain anda.", #"Your domain",
+"externaldberror" => "Kesalahan ini disebabkan oleh ralat pengesahan pangkalan data yang luar ataupun anda tidak mempunyai kebenaran untuk mengemaskinikan akaun luaran.", #'There was either an external authentication database error or you are not allowed to update your external account.',
+"loginproblem"          => "<b>Terdapat masalah dalam pendaftaran masuk anda.</b><br />Cuba semula!", #"There has been a problem with your login.</b><br />Try again!",
+"alreadyloggedin" => "<strong>$1, anda telah berjaya masuk!</strong><br />",
+"login"                 => "Masuk", #"Log in",
+"userlogin"     => "Buka akaun atau log masuk", #"Create an account or log in",
+"loginprompt"     => "Anda harus menghidupkan cookie untuk masuk ke {{SITENAME}}.", #"You must have cookies enabled to log in to {{SITENAME}}.",
+"logout"        => "Keluar",
+"userlogout"      => "Log keluar", #"Log out",
+"notloggedin"   => "Belum log masuk",
+"createaccount"         => "Buka akaun baru", #Create new account",
+"badretype"     => "Anda memasukkan kata laluan yang salah.", #"The passwords you entered do not match.",
+"userexists"    => "Nama pengguna yang anda masukkan telah digunakan. Sila pilih nama yang lain.",
+"youremail"     => "Emel anda", #"Your e-mail",
+"yourrealname"    => "Nama sebenar", #"Real name",
+"yourlanguage"    => "Bahasa", #"Language",
+'yourvariant'     => "Kelainan", #"Variant",
+'email'           => "Emel", #"Email",
+"yournick"      => "Nama Samaran (untuk tandatangan)", #"Your nickname (for signatures)",
+"prefs-help-realname" => "* Nama benar (tidak wajib): Jika anda memberikan nama yang benar, pengakuan akan diberikan kepada karya anda.", #"* Real name (optional): if you choose to provide it this will be used for giving you attribution for your work.",
+"prefs-help-email" => "Emel (tidak wajib): Alamat emel anda memungkinkan pengguna lain untuk menghubungi anda melalui laman web tanpa mengetahui alamat emel anda. Alamat emel ini juga digunakan untuk mengirimkan kata laluan kepada anda jika anda terlupa.",
+"prefs-help-email-enotif" => 'Alamat emel ini juga boleh digunakan untuk mengirimkan pemberitahuan emel jika anda menghidupkan pilihan tersebut.', #'This address is also used to send you email notifications if you enabled the options.',
+"loginerror"    => "Gagal log masuk", #"Login error",
+"nocookiesnew"    => "Akaun pengguna anda telah dibuka tetapi anda masih belum didaftar masuk. Anda telah mematikan cookie anda. {{SITENAME}} menggunakan cookie untuk mendaftar masuk pengguna. Sila hidupkannya dan log masuk semula dengan nama pengguna serta laluan kata anda.", #"The user account was created, but you are not logged in. {{SITENAME}} uses cookies to log in users. You have cookies disabled. Please enable them, then log in with your new username and password.",
+"nocookieslogin"  => "Anda telah mematikan cookie anda. {{SITENAME}} menggunakan cookie untuk mendaftar masuk pengguna. Sila hidupkannya dan cuba semula.", #"{{SITENAME}} uses cookies to log in users. You have cookies disabled. Please enable them and try again."
+"noname"        => "Nama pengguna tidak sah.", #"You have not specified a valid user name.",
+"loginsuccesstitle" => "Berjaya masuk",  #"Login successful",
+"loginsuccess"          => "Anda berjaya log masuk ke {{SITENAME}} sebagai \"$1\".",
+"nosuchuser"    => "Tiada pengguna dengan nama \"$1\".", #"There is no user by the name \"$1\".",
+'nosuchusershort' => "Tiada pengguna dengan nama \"$1\". Semak ejaan anda.", #"There is no user by the name \"$1\". Check your spelling.",
+"wrongpassword"       => "Anda memasukkan kata laluan yang salah. Sila masukkan semula.",
+"mailmypassword" => "Sila emelkan kata laluan baru kepada saya", #"Mail me a new password",
+"passwordremindertitle" => "Peringatan kata laluan daripada {{SITENAME}}",
+"passwordremindertext"  => "Anda dari alamat IP $1 mungkin telah memohon kata laluan {{SITENAME}} yang baru. Kata laluan terkini untuk pengguna \"$2\" ialah \"$3\". Anda disarankan log masuk dengan segera untuk menukarkan kata laluan anda.",
+"noemail"             => "Tiada alamat emel dalam rekod untuk pengguna \"$1\".",
+"passwordsent"                => "Kata laluan baru telah diemelkan kepada \"$1\". Sila log masuk semula setelah penerimaannya.", #"A new password has been sent to the e-mail address registered for \"$1\". Please log in again after you receive it.",
+"eauthentsent"          => "Emel pengesahan telah dikirimkan ke alamat emel anda. Sebelum kami mengirimkan emel yang lain kepada anda, anda dikehendaki mematuhi arahan-arahan dalam emel ini untuk membuktikan pemilikan.", #"A confirmation email has been sent to the nominated email address. Before any other mail is sent to the account, you will have to follow the instructions in the email, to confirm that the account is actually yours.",
+'mailerror'             => "Ralat dalam pengiriman emel: $1", #"Error sending mail: $1",
+'acct_creation_throttle_hit' => "Maaf, anda telah membuka akaun $1. Oleh sebab itu, anda tidak dibenarkan membuka akaun lagi.", #"Sorry, you have already created $1 accounts. You can\'t make any more.",
+'emailauthenticated'    => "Alamat emel anda telah disahkan pada $1.", #"Your email address was authenticated on $1.",
+'emailnotauthenticated' => "Alamat emel anda masih belum disahkan. Oleh sebab itu, emel untuk ciri-ciri berikut tidak akan dikirimkan:", #"Your email address is not yet authenticated. No email will be sent for any of the following features.",
+'noemailprefs'          => "<strong>Tiada alamat emel ditetapkan</strong>. Oleh sebab itu, anda tidak boleh menggunakan ciri-ciri yang berikut:", #"<strong>No email address has been specified</strong>, the following features will not work.",
+'emailconfirmlink'      => "Sahkan alamat emel anda.", #"Confirm your e-mail address.",
+'invalidemailaddress'   => "Format alamat emel tidak sah. Sila masukkan semula ataupun kosongkan sahaja medan tersebut.", #"The email address cannot be accepted as it appears to have an invalid format. Please enter a well-formatted address or empty that field.",
+
+
+# Edit pages
+#
+"summary"             => "Ringkasan", #"Summary",
+"subject"             => "Tajuk/tajuk bahagian", #"Subject/headline",
+"minoredit"           => "Suntingan kecil.", #"This is a minor edit.",
+"watchthis"           => "Pantau rencana ini.", #"Watch this article",
+"savearticle"         => "Simpan", #"Save page",
+"preview"             => "Paparan", #"Preview",
+"showpreview"         => "Tunjuk paparan", #"Show preview",
+"blockedtitle"                => "Pengguna ini telah disekat", #"User is blocked",
+"blockedtext"         => "Nama pengguna atau alamat IP anda telah disekat oleh $1. Alasannya: <br />$2. <p>Sila hubungi $1 atau [[{{MediaWiki:grouppage-sysop}}|penyelia]] yang lain untuk membincangkan sekatan ini. <p>Sila ambil perhatian bahawa anda tidak dapat menggunakan ciri \"Emelkan pengguna ini\" kecuali anda mempunyai alamat emel yang sah di dalam [[Special:Preferences|Tatarajah]] anda.", #'Your user name or IP address has been blocked by $1. The reason given is this:<br />''$2''<p>You may contact $1 or one of the other [[Project:Administrators|administrators]] to discuss the block. <p>Note that you may not use the \"email this user\" feature unless you have a valid email address registered in your [[Special:Preferences|user preferences]].',
+"whitelistedittitle"    => "Pendaftaran masuk diperlukan untuk menyunting",
+"whitelistedittext"     => "Anda harus [[{{ns:special}}:Userlogin|log masuk]] untuk dapat menyunting rencana.",
+"whitelistreadtitle"    => "Pendaftaran masuk diperlukan untuk membaca",
+"whitelistreadtext"     => "Anda harus [[{{ns:special}}:Userlogin|log masuk]] untuk dapat membaca rencana.",
+"whitelistacctitle"     => "Anda tidak dibenarkan membuka akaun",
+"whitelistacctext"      => "Untuk dibenarkan membuka akaun dalam Wiki ini, anda harus [[{{ns:special}}:Userlogin|log masuk]] dan mempunyai kebenaran yang wajar.",
+"loginreqtitle"         => "Pendaftaran masuk diperlukan",
+'loginreqlink'           => 'log masuk',
+"loginreqpagetext"      => "Anda harus $1 untuk dapat melihat halaman yang lain.",
+"accmailtitle"          => "Kata laluan dikirimkan",
+"accmailtext"           => "Kata laluan untuk '$1' telah dikirimkan ke $2.",
+"newarticle"          => "(Baru)", #"(New)",
+"newarticletext"        => "Anda telah mengikuti pautan ke halaman yang masih belum wujud. Untuk memulakannya, masukkan teks anda ke dalam kotak di bawah (sila lihat [[Project:Bantuan|Bantuan]] untuk maklumat lanjut).\n Jika anda mengunjungi halaman ini tanpa sengaja, klik butang '''balik''' di pelayar anda.", #"You've followed a link to a page that doesn't exist yet. To create the page, start typing in the box below (see the [[Project:Help|help page]] for more info). If you are here by mistake, just click your browser's '''back''' button.",
+"anontalkpagetext"      => "---- Ini adalah halaman perbualan untuk pengguna tanpa nama, iaitu pengguna yang tidak log masuk ataupun masih belum membuka akaun. Kami terpaksa menggunakan alamat IP untuk mengesan pengguna tersebut. Alamat IP ini mungkin digunakan oleh ramai pengguna. Sekiranya anda adalah pengguna tanpa nama dan berasa bahawa komen yang tidak kena mengena telah ditujui kepada anda, sila [[{{ns:special}}:Userlogin|menggunakan nama pengguna anda atau membuka akaun]] bagi mengelakkan sebarang kekeliruan dengan pengguna tanpa nama yang lain.", #"---- ''This is the discussion page for an anonymous user who has not created an account yet or who does not use it. We therefore have to use the numerical [[IP address]] to identify him/her. Such an IP address can be shared by several users. If you are an anonymous user and feel that irrelevant comments have been directed at you, please [[Special:Userlogin|create an account or log in]] to avoid future confusion with other anonymous users.''",
+'clearyourcache'        => "'''Nota:''' Selepas menyimpan, anda mungkin perlu memirau ingatan cache pelayar anda untuk melihat perubahan. '''Mozilla /Firefox/Safari:''' ''Ctrl-Shift-R''; '''IE:''' ''Ctrl-F5''; '''Konqueror:''' ''F5''. Pengguna '''Opera''' mungkin perlu membersihkan kesemua ingatan cachenya di dalam ''Alatan: Tatarajah'' (''Tools?Preferences'').", #"'''Note:''' After saving, you may have to bypass your browser's cache to see the changes. '''Mozilla / Firefox / Safari:''' hold down ''Shift'' while clicking ''Reload'', or press ''Ctrl-Shift-R'' (''Cmd-Shift-R'' on Apple Mac); '''IE:''' hold ''Ctrl'' while clicking ''Refresh'', or press ''Ctrl-F5''; '''Konqueror:''': simply click the ''Reload'' button, or press ''F5''; '''Opera''' users may need to completely clear their cache in ''Tools?Preferences''.",
+"usercssjsyoucanpreview" => "'''Petua:''' Gunakan butang \"Tunjuk paparan\" untuk menguji CSS/JS anda yang baru sebelum menyimpan.", #"<strong>Tip:</strong> Use the 'Show preview' button to test your new CSS/JS before saving.",
+"usercsspreview" => "'''Ingatan bahawa ini hanyalah paparan CSS pengguna anda dan masih belum disimpan lagi!'''", #"'''Remember that you are only previewing your user CSS, it has not yet been saved!'''",
+"noarticletext"         => "(Tiada teks di dalam halaman ini buat sekarang)",
+"updated"             => "(Dikemaskini)", #"(Updated)",
+"note"                        => "<strong>Catatan:</strong>",
+"previewnote"         => "Ingatan bahawa ini hanyalah paparan dan masih belum disimpan lagi!", #"Remember that this is only a preview, and has not yet been saved!",
+"previewconflict"       => "Paparan ini merupakan teks di bahagian atas dalam kotak penyuntingan teks. Teks ini akan disimpan sekiranya anda memilih berbuat demikian.",
+"editing"             => "Menyunting $1", #"Editing $1",
+'editinguser'             => "Menyunting $1", #"Editing $1",
+"editingsection"      => "Menyunting $1 (bahagian)",
+"editingcomment"      => "Menyunting $1 (komen)",
+"editconflict"        => "Konflik penyuntingan: $1", #"Edit conflict: $1",
+"explainconflict"       => "Pengguna lain telah menyunting halaman ini sejak anda bermula. Bahagian atas di kawasan teks mengandungi teks yang terkini. Perubahan anda dipaparkan di bahagian bawah dalam kawasan teks. Anda perlu menggabungkan perubahan anda dengan teks terkini. <b>Hanya</b> teks pada bahagian atas di kawasan teks akan disimpan jika anda menekan \"Simpan\".<br />", #"Someone else has changed this page since you started editing it. The upper text area contains the page text as it currently exists. Your changes are shown in the lower text area. You will have to merge your changes into the existing text. <b>Only</b> the text in the upper text area will be saved when you press \"Save page\".<br />",
+"yourtext"            => "Teks Anda", #"Your text",
+"storedversion"         => "Versi Tersimpan", #"Stored version",
+'nonunicodebrowser'     => "<strong>AMARAN: Pelayar anda tidak mendukung Unikod. Bagaimanapun, terdapatnya kaedah untuk membenarkan anda menyunting rencana dengan selamat: huruf-huruf yang bukan huruf ASCII akan dipaparkan dalam kotak penyuntingan sebagai kod perenambelasan.</strong>", #"<strong>WARNING: Your browser is not unicode compliant. A workaround is in place to allow you to safely edit articles: non-ASCII characters will appear in the edit box as hexadecimal codes.</strong>",
+"editingold" => "<strong>PERINGATAN: Anda menyunting semakan lama. Jika anda menyimpannya, perubahan yang dibuat sejak semakan ini akan hilang.</strong>",
+"yourdiff"            => "Perbezaan", #"Differences",
+"copyrightwarning"      => "Semua sumbangan kepada {{SITENAME}} adalah tertakluk kepada $2 (sila lihat $1 untuk maklumat lanjut). Oleh sebab itu, jika anda tidak ingin rencana anda disunting atau disebarkan secara bebas, jangan hantar rencana anda ke sini. Anda juga perlu mengakui bahawa ini adalah karya anda sendiri, ataupun anda telah menyalinkannya daripada domain umum atau sumber bebas yang serupa. <p><strong>JANGAN HANTAR SEBARANG KARYA HAK CIPTA ORANG LAIN TANPA KEBENARAN.</strong></p>", 
+"longpagewarning"       => "<strong>AMARAN: Panjangnya halaman ini $1 kilobait. Terdapat beberapa pelayar yang mengalami masalah terhadap penyuntingan halaman yang mendekati ataupun melebihi 32kB. Sila bahagikan rencana ini, jika boleh.</strong>", #"<strong>WARNING: This page is $1 kilobytes long; some browsers may have problems editing pages approaching or longer than 32kb. Please consider breaking the page into smaller sections.</strong>",
+"readonlywarning"       => "<strong>AMARAN: Pangkalan data ini telah dikunci untuk penyelenggaraan. Oleh sebab itu, anda tidak dapat menyimpan suntingan anda buat sekarang. Anda mungkin ingin 'gunting-dan-tampal' teks anda dan menyimpannya dalam fail teks untuk kegunaan kemudian.</strong>", #"<strong>WARNING: The database has been locked for maintenance, so you will not be able to save your edits right now. You may wish to cut-n-paste the text into a text file and save it for later.</strong>",
+"protectedpagewarning" => "<strong>AMARAN: Halaman ini telah dikunci supaya penyelia sahaja yang boleh mengemaskinikannya. Sila mematuhi [[Project:Polisi perlindungan|panduan untuk halaman dilindungi]]</strong>", #"<strong>WARNING:  This page has been locked so that only users with sysop privileges can edit it. Be sure you are following the [[Project:Protected_page_guidelines|protected page guidelines]].</strong>",
+"templatesused"       => "Templat yang digunakan di halaman ini.", #'Templates used on this page:',
+
+
+# History pages
+#
+"revhistory"    => "Sejarah Penyemakan", #"Revision history",
+"nohistory"     => "Tiada sejarah penyuntingan untuk halaman ini", #"There is no edit history for this page.",
+"revnotfound"   => "Semakan tidak dapat dijumpai", #"Revision not found",
+"revnotfoundtext" => "Semakan lama untuk halaman yang anda pinta tidak dapat dijumpai. Sila semak URL yang anda gunakan untuk mencapai halaman ini.", #"The old revision of the page you asked for could not be found. Please check the URL you used to access this page.",
+"loadhist"      => "Muat turun halaman sejarah", #"Loading page history",
+"currentrev"    => "Semakan terkini", #"Current revision",
+"revisionasof"          => "Semakan sejak $1", #"Revision as of $1",
+"previousrevision"     => "Semakan terdahulu",
+"cur"           => "kini", #"cur",
+"next"                  => "berikut",
+"last"                  => "akhir",
+"orig"                  => "asal",
+"histlegend"    => "Cara untuk pembandingan: Tandakan butang radio versi-versi untuk dibanding, lalu tekan butang ''enter'' atau butang di bawah. <br />Legenda: (kini) = perbezaan dengan versi terkini, (akhir) = perbezaan dengan versi terakhir, K = suntingan kecil", #'Diff selection: mark the radio boxes of the versions to compare and hit enter or the button at the bottom.<br />Legend: (cur) = difference with current version, (last) = difference with preceding version, K = minor edit.',
+"deletedrev"        => "[dipadam]", #'[deleted]',
+"histfirst"         => "Terawal", #'Earliest'
+"histlast"          => "Terkini", #'Latest'
+
+
+# Search results
+#
+"searchresults"    => "Hasil Carian",
+"searchresulttext" => "Untuk maklumat lanjut mengenai pencarian di {{SITENAME}}, sila lihat [[Project:Mencari|pencarian di {{SITENAME}}]].",
+"searchsubtitle"    => "Untuk pertanyaan \"$1\"", #"For query \"[[:$1]]\"",
+"searchsubtitleinvalid"    => "Untuk pertanyaan \"$1\"", #"For query \"$1\"",
+"badquery"       => "Format pertanyaan untuk pencarian adalah salah", #"Badly formed search query",
+"badquerytext"           => "Kami tidak dapat melaksanakan pertanyaan anda. Hal ini mungkin disebabkan kerana anda cuba mencari perkataan yang mengandungi kurang daripada tiga huruf (perisian sistem masih belum dapat mendukungnya buat sekarang), ataupun anda tersalah taip ungkapan untuk pertanyaan; contohnya \"ikan dan dan udang\". Sila cuba pertanyaan yang lain.",
+"matchtotals"    => "Pertanyaan \"$1\" sepadan dengan tajuk halaman $2 dan teks halaman $3.", #"The query \"$1\" matched $2 page titles and the text of $3 pages.",
+"noexactmatch"        => "Tiada halaman yang mempunyai tajuk tepat ini. Sila cuba mencari melalui teks yang penuh.", #"No page with this exact title exists, trying full text search.",
+"titlematches"           => "Tajuk rencana yang sepadan", #"Article title matches",
+"notitlematches"   => "Tiada tajuk halaman yang sepadan", #"No page title matches",
+"textmatches"    => "Teks rencana yang sepadan", #"Article text matches",
+"notextmatches"          => "Tiada teks halaman yang sepadan", #No page text matches",
+"prevn"                  => "sebelum $1", #"previous $1",
+"nextn"                  => "selepas $1", #"next $1",
+"viewprevnext"           => "Lihat ($1) ($2) ($3).", #"View ($1) ($2) ($3).",
+"showingresults"   => "Terpapar di bawah adalah hasil pencarian dari <b>$1</b> hingga <b>$2</b>.",
+"showingresultsnum"=> "Terpapar di bawah <b>$3</b> adalah hasil pencarian yang bermula dengan #<b>$2</b>.",
+"nonefound"      => "<strong>Catatan</strong>: Kegagalan enjin carian biasanya disebabkan oleh pencarian perkataan-perkataan yang umum, seperti \"ada\" dan \"dari\", yang tidak wujud dalam senarai indeks ataupun kerana anda menetapkan lebih daripada satu perkataan pencarian (hanya halaman yang mengandungi kesemua perkataan pencarian akan dipaparkan).",
+"powersearch"      => "Cari", #"Search",
+"powersearchtext"  => "Cari dalam ruang nama:<br />$1<br />$2 Paparkan peralihan   Cari $3 $9",
+"searchdisabled"   => "Pencarian {{SITENAME}} telah dimatikan. Anda boleh mencari melalui Google buat sekarang. Sila ambil perhatian bahawa hasil daripada pencarian Google mungkin bukan merupakan halaman yang terkini.",
+"blanknamespace" => "(Utama)",
+
+
+
+# Preferences page
+#
+"preferences"         => "Tatarajah", #"Preferences",
+"prefsnologin"          => "Belum log masuk", #"Not logged in",
+"prefsnologintext"      => "Anda mesti [[{{ns:special}}:Userlogin|log masuk]] untuk menetapkan butir-butir kecenderungan anda dalam [[{{ns:special}}:Preferences|Tatarajah]].",
+"prefsreset"          => "Tatarajah anda telah dikembalikan dari storan", #"Preferences have been reset from storage.",
+"qbsettings"          => "Konfigurasi palang pantas", #"Quickbar settings",
+'qbsettings-none'	=> 'Tiada',
+'qbsettings-fixedleft'	=> 'Tetap sebelah kiri',
+'qbsettings-fixedright'	=> 'Tetap sebelah kanan',
+'qbsettings-floatingleft'	=> 'Berubah-ubah sebelah kiri',
+'qbsettings-floatingright'	=> 'Berubah-ubah sebelah kanan',
+"changepassword"        => "Tukar kata laluan", #"Change password",
+"skin"                        => "Kulit", #"Skin",
+"math"                        => "Matematik",
+"dateformat"          => "Format tarikh", #"Date format",
+"math_failure"                => "Huraian tergagal", #"Failed to parse",
+"math_unknown_error"  => "Ralat yang tidak dapat dikesan", #"unknown error",
+"math_unknown_function"       => "Fungsi yang tidak dapat diketahui", #"unknown function",
+"math_lexing_error"   => "Ralat leksing", #"lexing error",
+"math_syntax_error"   => "Ralat sintaks", #"syntax error",
+"math_image_error"      => "Penukaran kepada PNG gagal; semak pemasangan latex, dvips, gs, dan tukarkan semula.",
+"math_bad_tmpdir"       => "Tidak dapat menulis atau membuat direktori matematik sementara",
+"math_bad_output"       => "Tidak dapat menulis atau membuat direktori keluaran matematik",
+"math_notexvc"          => "Texvc boleh laku terhilang; sila lihat matematik/fail README untuk cara membuat tatarajah.",
+"prefs-personal"        => "Data Pengguna",
+"prefs-rc"              => "Perubahan terkini dan rencana stub",
+'prefs-misc'            => 'Pelbagai',
+"saveprefs"           => "Simpan", #"Save preferences",
+"resetprefs"          => "Kembalikan", #"Reset preferences",
+"oldpassword"         => "Kata laluan lama", #"Old password",
+"newpassword"         => "Kata laluan baru", #"New password",
+"retypenew"           => "Ulangi kata laluan baru", #"Retype new password",
+"textboxsize"         => "Menyunting", #"Editing",
+"rows"                        => "Baris", #"Rows",
+"columns"             => "Lajur", #"Columns",
+"searchresultshead"     => "Cari", #"Search result settings",
+"resultsperpage"        => "Bilangan capaian untuk dipaparkan bagi setiap halaman", #"Hits to show per page",
+"contextlines"                => "Bilangan baris untuk dipaparkan bagi setiap capaian", #"Lines to show per hit",
+"contextchars"                => "Bilangan huruf konteks bagi setiap baris", #"Characters of context per line",
+"stubthreshold"         => "Ambang untuk paparan rencana stub", #"Threshold for stub display",
+"recentchangescount"    => "Bilangan tajuk dalam perubahan terkini", #"Number of titles in recent changes",
+"savedprefs"          => "Tatarajah anda telah disimpan", #"Your preferences have been saved.",
+"timezonelegend"        => "Zon waktu", #'Time zone',
+"timezonetext"        => "Masukkan perbezaan waktu (dalam jam) antara waktu tempatan anda dengan waktu pelayan (GMT+8 untuk Kuala Lumpur).", #"Enter number of hours your local time differs from server time (Kuala Lumpur, which is GMT+8).",
+"localtime"           => "Waktu tempatan", #"Local time",
+"timezoneoffset"        => "Ofset", #"Offset",
+"servertime"          => "Waktu pelayan sekarang adalah", #"Server time is now",
+"guesstimezone"         => "Isikan dari pelayar", #"Fill in from browser",
+"defaultns"           => "Cari dalam ruang nama secara lalai:", #"Search in these namespaces by default:",
+"default"             => 'lalai',
+"files"                       => "Fail",
+
+
+# Recent changes
+#
+"changes" => "perubahan",
+"recentchanges" => "Perubahan Terkini",
+"recentchangestext" => "Kenalpasti perubahan wiki yang terkini dalam halaman ini.",
+"rcnote"              => "Di bawah adalah <strong>$1</strong> perubahan terbaru pada <strong>$2</strong> hari yang lalu.", #"Below are the last <strong>$1</strong> changes in last <strong>$2</strong> days.",
+"rcnotefrom"  => "Di bawah adalah perubahan sejak <b>$2</b> (sehingga <b>$1</b>).",
+"rclistfrom"  => "Paparkan perubahan baru mulai dari $1",
+"rclinks"             => "Paparkan $1 perubahan pada $2 hari yang lalu.", #"Show last $1 changes in last $2 days.",
+"diff"                        => "perbezaan", #"diff",
+"hist"                        => "sejarah", #"hist",
+"hide"                        => "sorok", #"hide",
+"show"                        => "papar", #"show",
+"minoreditletter"       => "k", #"m",
+"newpageletter"         => "B",
+
+
+# Upload
+#
+"upload"          => "Muat naik",
+"uploadbtn"       => "Muat naik fail", #"Upload file",
+"reupload"        => "Muat naik semula", #"Re-upload",
+"reuploaddesc"            => "Kembali ke borang muat naik", #"Return to the upload form.",
+"uploadnologin"     => "Belum log masuk", #"Not logged in",
+"uploadnologintext" => "Anda mesti [[{{ns:special}}:Userlogin|log masuk]] untuk memuat naik fail.",
+"uploaderror"     => "Ralat muat naik", #"Upload error",
+"uploadtext"      => "Borang di bawah adalah untuk memuat naik fail yang baru. Ia juga boleh digunakan untuk mecapai [[{{ns:special}}:Imagelist|senarai imej]]. Setiap pemuatan naik dan pemadaman di halaman ini juga dicatat dalam [[{{ns:special}}:Log|log]]. <p>Anda juga dikehendaki menandakan kotak untuk mengesahkan bahawa anda tidak melanggarkan sebarang hak cipta dengan pemuatan naik fail ini. Tekan butang \"Muat naik\" untuk menyelesaikan pemuatan naik.</p><p>Untuk memasukkan imej yang anda baru muat naik ke dalam halaman rencana, gunakan pautan dalam bentuk '''[[{{ns:image}}:fail.jpg]]''', '''[[{{ns:image}}:fail.png|teks alt]]''' atau '''[[{{ns:media}}:fail.ogg]]''' untuk mengaitkan fail imej secara langsung.</p>",
+"uploadlog"       => "Log muat naik", #"upload log",
+"uploadlogpage"     => "Log muat naik", #"Upload_log",
+"uploadlogpagetext" => "Di bawah ini adalah senarai terkini bagi fail yang dimuat naik. Segala waktu yang dipaparkan adalah waktu pelayan (UTC).",
+"filename"        => "Nama Fail", #"Filename",
+"filedesc"        => "Ringkasan", #"Summary",
+"filestatus"        => "Taraf hak cipta",
+"filesource"        => "Sumber",
+"copyrightpage"     => "{{ns:project}}:Hak cipta",
+"copyrightpagename" => "Hak cipta {{SITENAME}}",
+"uploadedfiles"           => "Fail yang telah dimuat naik", #"Uploaded files",
+"ignorewarning"           => "Abaikan amaran dan simpankan fail sahaja", #"Ignore warning and save file anyway.",
+"minlength"       => "Nama imej harus mempunyai sekurang-kurangnya tiga huruf.", #"Image names must be at least three letters.",
+"illegalfilename"   => "Nama fail \"$1\" mengandungi huruf-huruf yang tidak dibenarkan dalam tajuk halaman. Sila tukarkan nama fail dan cuba memuat naik semula.",
+"badfilename"     => "Nama imej telah ditukarkan menjadi \"$1\".", #"Image name has been changed to \"$1\".",
+"badfiletype"     => "\".$1\" adalah format fail imej yang tidak dibenarkan.",
+"emptyfile"       => "Fail yang anda cuba memuat naik kelihatannya kosong. Ini mungkin disebabkan oleh kesilapan menaip nama fail. Sila pastikan adakah anda betul-betul ingin memuat naik fail ini.",
+"fileexists"      => "Terdapat satu fail dengan nama ini. Sila semakkan $1 jika anda tidak pasti bahawa anda hendak menukarkannya.",
+"largefile"       => "Saiz fail ini $2 bait. Saiz imej yang tidak melebihi $1 disarankan.",
+"successfulupload"  => "Pemuatan naik berjaya", #"Successful upload",
+"fileuploaded"      => "Fail \"$1\" berjaya dimuat naik. Sila ikuti pautan ini: ($2) ke halaman huraian dan isikan maklumat fail ini (contoh: keasalan fail, bila dibuat serta oleh siapa, dan butir-butir lain yang anda ketahui). Jika fail ini merupakan fail imej, anda boleh memasukkannya melalui:<br /><tt><nowiki>[[</nowiki>Imej:$1|thumb|right|300px|Huraian]]</tt>.",
+"uploadwarning"     => "Amaran pemuatan naik", #"Upload warning",
+"savefile"          => "Simpan", #"Save file",
+"uploadedimage"     => "Telah dimuat naik \"[[$1]]\"",
+"uploaddisabled"    => "Maaf, kemudahan muat naik dimatikan.",
+"uploadscripted"    => "Fail ini mengandungi kod HTML atau kod skrip yang mungkin boleh disalah tafsir oleh pelayar web.",
+"uploadcorrupt"     => "Fail ini rosak ataupun mempunyai ekstensi yang salah. Sila semakkan fail dan muat naik semula.",
+"uploadvirus"       => "Fail in mengandungi virus! Butir-butir: $1",
+"sourcefilename"    => "Sumber nama fail",
+"destfilename"      => "Destinasi nama fail",
+
+
+# Image list
+#
+"imagelist"       => "Senarai imej", #"Image list",
+"imagelisttext"           => "Di bawah adalah senarai $1 imej yang terisih $2.", #"Below is a list of $1 images sorted $2.",
+"getimagelist"            => "Memperolehi senarai imej", #"fetching image list",
+"ilsubmit"        => "Cari", #"Search",
+"showlast"        => "Paparkan $1 imej terbaru yang telah diisih $2.", #"Show last $1 images sorted $2.",
+"byname"          => "berdasarkan nama", #"by name",
+"bydate"          => "berdasarkan tarikh", #by date",
+"bysize"          => "berdasarkan saiz",  #"by size",
+"imgdelete"       => "padam", #"del",
+"imgdesc"         => "huraian", #"desc",
+"imglegend"       => "Legenda: (huraian) = paparkan/suntingkan huraian imej.", #"Legend: (desc) = show/edit image description.",
+"imghistory"      => "Sejarah imej",  #"Image history",
+"revertimg"       => "kembali",
+"deleteimg"       => "padam", #"del",
+"deleteimgcompletely" => "Hapuskan semua semakan fail ini",
+"imghistlegend"     => "Legenda: (terkini) = ini merupakan imej terkini, (padam) = padamkan versi yang lama, (kembali) = kembalikan versi lama.<br /><i>Klikkan pada tarikh untuk melihat imej yang telah dimuat naik pada tarikh itu</i>.", #"Legend: (cur) = this is the current image, (del) = delete this old version, (rev) = revert to this old version. <br /><i>Click on date to see image uploaded on that date</i>.",
+"imagelinks"      => "Pautan imej",  #"Image links",
+"linkstoimage"            => "Halaman-halaman berikut berpaut ke imej ini:", #"The following pages link to this image:",
+"nolinkstoimage"    => "Tiada halaman yang berpaut ke imej ini.", #"There are no pages that link to this image.",
+"sharedupload"      => "Fail ini merupakan pemuatan naik berkongsi dan boleh dipergunakan untuk projek lain.",
+"shareduploadwiki"  => "Sila lihat [halaman huraian fail $1] untuk maklumat lanjut.",
+"noimage"           => "Tiada fail yang mengandungi nama ini. Anda boleh muat naik $1.",
+"uploadnewversion-linktext"  => "Muat naik versi baru untuk fail ini",
+
+
+# Statistics
+#
+"statistics"      => "Statistik", #"Statistics",
+"sitestats"       => "Statistik laman",    #"Site statistics",
+"userstats"       => "Statistik pengguna",  #"User statistics",
+"sitestatstext"     =>  "<p>Ketika ini, {{SITENAME}} mempunyai <b>$2</b> buah rencana.</p><p>Selain itu, terdapat juga laman perbualan, laman penerangan imej, laman pengguna, laman {{SITENAME}}, laman ringkas/buntu, laman pengalihan dan templat. Kesemua laman ini menjadikan jumlah keseluruhan halaman di {{SITENAME}} sebanyak <b>$1</b> halaman.</p><p>Sebanyak <b>$4</b> suntingan telah dilakukan sejak permulaannya wiki ini; iaitu purata <b>$5</b> suntingan bagi setiap halaman.</p>",
+"userstatstext"     => "Terdapat <b>$1</b> pengguna berdaftar. <b>$2</b> daripadanya adalah penyelia (lihat {{ns:project}}:Penyelia).",
+
+
+"disambiguations"     => "Halaman Nyahkekaburan", #"Disambiguation pages",
+"disambiguationspage" => "{{ns:project}}:Pautan_ke_halaman_nyahkekaburan", #"{{ns:project}}:Links_to_disambiguating_pages",
+"disambiguationstext" => "Halaman-halaman yang berikut berpaut ke <i>halaman nyahkekaburan</i>. Halaman-halaman ini sepatutnya kena dipaut ke halaman yang wajar. <br />Satu halaman dianggap sebagai 'halaman nyahkekaburan' jika halaman itu dikaitkan dari $1. <br />Pautan dari ruang nama yang lain <i>tidak</i> tersenarai di sini.",
+
+"doubleredirects"     => "Peralihan Berganda", #"Double Redirects",
+"doubleredirectstext" => "Setiap baris mengandungi pautan ke halaman peralihan pertama dan peralihan kedua, serta ayat pertama dalam halaman peralihan kedua. Biasanya, baris tersebut akan memberikan halaman \"benar\" yang sepatutnya ditujui oleh peralihan pertama.",
+
+"brokenredirects"     => "Peralihan Rosak", #"Broken Redirects",
+"brokenredirectstext" => "Peralihan berikut berpaut ke halaman yang tidak wujud", #"The following redirects link to a non-existing page.",
+
+
+# Miscellaneous special pages
+#
+"lonelypages"           => "Halaman Yatim", #"Orphaned pages",
+'uncategorizedpages'      => 'Halaman Tak Berkategori',
+'uncategorizedcategories' => 'Kategori Tak Berkategori',
+"unusedcategories"      => "Kategori Tidak Digunakan",
+"unusedimages"                  => "Imej Tidak Digunakan",
+"popularpages"                  => "Halaman Popular",
+"nviews"                => "$1 capaian", #"$1 views",
+"wantedpages"           => "Halaman Dikehendaki",
+"mostlinked"            => "Halaman Paling Banyak Dipaut",
+"nlinks"                => "$1 pautan",  #"$1 links",
+"allpages"              => "Semua Halaman",
+"nextpage"              => 'Halaman yang berikut ($1)',
+"randompage"            => "Halaman Rawak",
+"shortpages"            => "Halaman Pendek",
+"longpages"             => "Halaman Panjang",
+"deadendpages"            => "Halaman Buntu",
+"listusers"             => "Senarai Pengguna",
+"specialpages"                  => "Halaman Istimewa",
+"spheading"             => "Halaman Istimewa Umum",
+"restrictedpheading"    => "Halaman Istimewa Terhad",
+"recentchangeslinked"     => "Perubahan berkaitan",
+"recentchangeslinked"     => "Perubahan terkini yang dipaut",
+"rclsub"                => "(Untuk halaman yang berpaut dari \"$1\")",   #"(to pages linked from \"$1\")",
+"newpages"              => "Halaman Baru",
+"ancientpages"                  => "Rencana Lama",
+"intl"                          => "Pautan Antarabahasa",
+"movethispage"                  => "Pindahkan halaman ini",
+"unusedimagestext"        => "<p>Walaupun imej ini disenaraikan di sini, imej ini mungkin masih sentiasa digunakan. Keadaan ini tertimbul kerana laman web yang lain mungkin berpaut kepada imej yang mengandungi URL langsung.</p>",
+"categoriespagetext"      => "Kategori-kategori berikut wujud di wiki ini.",
+"unusedcategoriestext"    => "Kategori di bawah ini wujud walaupun tiada rencana atau kategori lain di dalamnya.",
+"data"                    => "Data",
+"booksources"           => "Sumber Buku",
+"booksourcetext"          => "Di bawah ini adalah senarai pautan ke laman lain yang menjual buku,baik buku baru ataupun buku terpakai, dan mungkin mempunyai maklumat lanjut tentang buku yang anda sedang mencari. {{SITENAME}} tidak bergabung dengan mana-mana perniagaan di atas, dan senarai ini bukan merupakan penyokongan.",
+"isbn"                          => "ISBN",
+"alphaindexline"          => "$1 ke $2",
+"version"               => "Versi",
+"log"                   => "Log",
+"alllogstext"           => "Paparan gabungan untuk log pemuatan naik, pemadaman, perlindungan, penyekatan, dan penyelia. Anda boleh menyempitkan paparan dengan memilihkan jenis log, nama pengguna ataupun nama halaman yang berkaitan.",
+
+
+# Email this user
+#
+"mailnologin"           => "Tiada alamat emel.", #"No send address",
+"mailnologintext"         => "Anda harus [[{{ns:special}}:Userlogin|log masuk]] dan mempunyai alamat emel yang sah di dalam [[{{ns:special}}:Preferences|Tatarajah]] anda untuk mengirimkan emel kepada pengguna lain.",
+"emailuser"             => "Emelkan pengguna ini", #"E-mail this user",
+"emailpage"             => "Emelkan pengguna", #"E-mail user",
+"emailpagetext"                 => "Jika pengguna ini memasukkan alamat emel yang sah dalam Tatarajahnya, borang di bawah akan mengirimkan satu pesanan. Alamat emel di dalam Tatarajah anda akan dipaparkan sebagai alamat emel \"Daripada\", jadi penerima boleh membalas emel tersebut.", #"If this user has entered a valid e-mail address in is user preferences, the form below will send a single message. The e-mail address you entered in your user preferences will appear as the \"From\" address of the mail, so the recipient wi#ll be able to reply.",
+'usermailererror'         => "Objek emel mengembalikan ralat:",
+'defemailsubject'         => "Emel {{SITENAME}}",
+"noemailtitle"                  => "Tiada alamat emel", #"No e-mail address",
+"noemailtext"           => "Pengguna ini tidak menetapkan alamat emel yang sah, atau telah memilih untuk tidak mendapat emel daripada pengguna yang lain.", #"This user has not specified a valid e-mail address, or has chosen not to receive e-mail from other users.",
+"emailfrom"             => "Daripada", #"From",
+"emailto"               => "Kepada",  #"To",
+"emailsubject"                  => "Perkara",  #"Subject",
+"emailmessage"                  => "Pesanan", #"Message",
+"emailsend"             => "Kirim", #"Send",
+"emailsent"             => "Emel telah dikirim", #"E-mail sent",
+"emailsenttext"           => "Emel anda telah dikirim.", #"Your e-mail message has been sent.",
+
+
+# Watchlist
+#
+"watchlist"             => "Senarai Pantau",
+"mywatchlist"             => "Senarai Pantau",
+"nowatchlist"           => "Tiada sebarang rencana dalam senarai pantau anda.", #"You have no items on your watchlist.",
+"watchnologin"                  => "Belum log masuk", #"Not logged in",
+"watchnologintext"      => "Anda mesti [[{{ns:special}}:Userlogin|log masuk]] untuk mengubahkan senarai pantau.",
+"addedwatch"            => "Telah ditambah ke senarai pantau",
+"addedwatchtext"          => "Halaman \"[[:$1]]\" telah ditambah ke [[Special:Watchlist|Senarai pantau]]. Semua perubahan pada masa hadapan di halaman tersebut dan halaman perbualannya akan disenaraikan di sini. Tajuk halaman tersebut juga akan <b>dicetak tebal</b> dalam [[Special:Recentchanges|senarai perubahan terkini]] supaya lebih mudah dilihat. <p>Jika anda ingin memadamkan halaman dari senarai pantau, klik \"Nyahpantau\" pada palang di atas.",
+"removedwatch"                  => "Telah dipadam dari senarai pantau",   #"Removed from watchlist",
+"removedwatchtext"        => "Halaman \"$1\"telah dipadam dari senarai pantau.",
+"watch"                         => "Pantau",
+"watchthispage"                 => "Pantau rencana ini",
+"unwatchthispage"         => "Nyahpantau", #"Stop watching",
+"notanarticle"                  => "Bukan rencana.", #"Not a page",
+"watchnochange"           => "Tiada sebarang perubahan pada halaman-halaman dalam tempoh yang dipaparkan.",
+"watchdetails"            => "* $1 halaman dipantau (tidak termasuk halaman perbualan). [[{{ns:-1}}:Watchlist/edit|Paparkan senarai pantauan yang lengkap]].",
+"wlheader-enotif"         => "* Pemberitahuan emel telah dihidupkan.",
+"wlheader-showupdated"    => "* Halaman yang telah diubah sejak capaian terakhir anda dipaparkan dalam cetak '''tebal'''",
+"watchmethod-recent"      => "Semakkan suntingan terkini untuk mengesan halaman pantau",
+"watchmethod-list"        => "Semakkan halaman pantau untuk mengesan penyuntingan terkini",
+"removechecked"           => "Hapuskan halaman yang ditandakan dari senarai pantau",
+"watchlistcontains"       => "Senarai pantau anda mengandungi $1 halaman.",
+"watcheditlist"           => "Berikut ini merupakan senarai halaman pantauan anda mengikut susunan abjad. Tandakan kotak halaman-halaman yang anda ingin padamkan dari senarai pantauan dan tekan butang \"Hapuskan halaman yang ditanda\" yang terletak di bahagian bawah skrin (pemadaman halaman rencana akan menyebabkan pemadaman halaman perbualan yang berkaitan dan sebaliknya).",
+"removingchecked"         => "Memadamkan halaman-halaman yang dipilih dari senarai pantau anda...",
+"couldntremove"           => "Tidak dapat memadamkan halaman '$1'...",
+"iteminvalidname"         => "Terdapat masalah dengan halaman '$1' (namanya tidak sah)...",
+"wlnote"                  => "Di bawah ini adalah $1 perubahan terbaru dalam <b>$2</b> jam yang lalu.",
+"wlshowlast"              => "Paparkan $1 jam $2 hari $3 yang lalu",
+"wlsaved"                 => "Ini adalah versi tersimpan bagi senarai pantau anda.",
+'wlhideshowown'           => "$1 suntingan saya.",
+
+# Delete/protect/revert
+#
+"deletepage"            => "Hapus", #"Delete page",
+"confirm"               => "Sahkan", #"Confirm",
+"excontent"               => "Kandungan dahulu: '$1'",
+"exbeforeblank"           => "Kandungan sebelum dikosongkan adalah: '$1'",
+"exblank"                 => "Halaman Kosong",
+"confirmdelete"           => "Sahkan pemadaman", #"Confirm delete",
+"deletesub"             => "(Memadam \"$1\")", #"(Deleting \"$1\")",
+"historywarning"          => "<b>AMARAN</b>: Halaman yang anda ingin padamkan mempunyai sejarah:",
+"confirmdeletetext"       => "Anda akan memadamkan secara kekal halaman atau imej ini bersama-sama sejarahnya dari pangkalan data. Sila pastikan bahawa anda memang hendak berbuat demikian, dan anda faham akan segala akibatnya. Pastikan juga bahawa apa yang anda hendak melakukan adalah selaras dengan [[{{ns:project}}:Polisi dan garis panduan|dasar {{SITENAME}}]].",
+"actioncomplete"          => "Tindakan berjaya", #"Action complete",
+"deletedtext"           => "\"$1\" telah dipadam. Sila lihat $2 untuk rekod terkini bagi halaman yang telah dipadam.",
+"deletedarticle"          => "\"$1\" telah dipadam", #"deleted \"$1\"",
+"dellogpage"            => "Log Pemadaman", #"Deletion log",
+"dellogpagetext"          => "Di bawah ini adalah senarai terkini untuk halaman yang telah dipadam. Semua waktu yang ditunjukkan adalah waktu pelayan (UTC).",
+"deletionlog"           => "Log Pemadaman", #"deletion log",
+"reverted"              => "Telah dikembalikan ke semakan sebelumnya", #"Reverted to earlier revision",
+"deletecomment"                 => "Alasan pemadaman", #"Reason for deletion",
+"imagereverted"           => "Pengembalian ke versi sebelumnya berjaya", #"Revert to earlier version was successful.",
+"rollback"              => "Kembalikan ke asal",
+'rollback_short'          => "Kembali asal",
+"rollbacklink"                  => "Kembalikan ke asal",
+"rollbackfailed"          => "Pengembalian ke asal tergagal.",
+"cantrollback"                  => "Tidak dapat mengembalikan suntingan terakhir; penyumbang akhir adalah pengarang tunggal untuk rencana ini.", #"Cannot revert edit; last contributor is only author of this article.",
+"alreadyrolled"                 => "Tidak dapat mengembalikan suntingan terakhir dari [[$1]] oleh [[Pengguna:$2|$2]] ([[Perbualan Pengguna:$2|Perbualan]]); terdapat pengguna yang telah berbuat demikian ataupun telah menyuntingnya. Suntingan terakhir telah dibuat oleh [[Pengguna:$3|$3]] ([[Perbualan Pengguna:$3|Perbualan]]).", #"Cannot rollback last edit of [[:$1]] by [[User:$2|$2]] ([[User talk:$2|Talk]]); someone else has edited or rolled back the article already. Last edit was by [[User:$3|$3]] ([[User talk:$3|Talk]]).",
+#   only shown if there is an edit comment
+"editcomment"             => "Komen penyuntingan: \"<i>$1</i>\".", #"The edit comment was: \"<i>$1</i>\".",
+"revertpage"            => "Suntingan $1 dikembalikan ke versi terakhir oleh $1",
+'sessionfailure'          => "Terdapat masalah terhadap pendaftaran masuk anda; tindakan ini telah dibatalkan sebagai langkah untuk mencegah perampasan sesi. Sila tekan butang \"balik\", lalu muatkan semula halaman yang anda telah mengunjungi sebelum ini dan cuba semula.",
+"protectlogpage"          => "Log perlindungan",
+"protectlogtext"          => "Di bawah ini adalah senarai untuk halaman yang telah dikunci/dibuka semula. Sila lihat [[{{ns:project}}:Halaman Dilindungi]] untuk maklumat lanjut.",
+"protectedarticle"        => "Melindungi [[$1]]",
+"unprotectedarticle"      => "Nyahkan perlindungan [[$1]]",
+"protectsub"              => "(Melindungi \"$1\")",
+"confirmprotecttext"      => "Adakah anda benar-benar ingin melindungi halaman ini?",
+"confirmprotect"          => "Pengesahan Perlindungan",
+'protectmoveonly'         => "Lindungi dari perpindahan sahaja",
+"protectcomment"          => "Alasan perlindungan",
+"unprotectsub"            => "(Nyahkan perlindungan bagi \"$1\")",
+"confirmunprotecttext"    => "Adakah anda benar-benar hendak mengenyahkan perlindungan bagi halaman ini?",
+"confirmunprotect"        => "Pengesahan nyahlindung",
+"unprotectcomment"        => "Alasan nyahlindung",
+
+
+# Undelete
+"undelete"          => "Pulihkan halaman terpadam", #"Restore deleted page",
+"undeletepage"      => "Lihat dan pulihkan halaman terpadam", #"View and restore deleted pages",
+"undeletepagetext"  => "Halaman-halaman terpadam yang berikut masih berada di dalam arkib dan boleh lagi dipulihkan, jika perlu. Arkib ini boleh dibersihkan dari semasa ke semasa.", #"The following pages have been deleted but are still in the archive and can be restored. The archive may be periodically cleaned out.",
+"undeletearticle"   => "Pulihkan rencana terpadam", #"Restore deleted article",
+"undeleterevisions" => "$1 semakan telah diarkib.", #"$1 revisions archived",
+"undeletehistory"   => "Jika anda memulihkan halaman tersebut, semua semakan akan dipulihkan ke  sejarahnya. Jika terdapat halaman baru yang mempunyai nama yang sama telah dibuat sejak pemadaman, semakan yang dipulihkan akan wujud dalam sejarah dahulu, dan halaman semakan terkini tidak akan digantikan secara automatik.", #"If you restore the page, all revisions will be restored to the history. If a new page with the same name has been created since the deletion, the restored revisions will appear in the prior history, and the current revision of the live page will not be automatically replaced.",
+"undeleterevision"  => "Semakan terpadam sejak $1", #"Deleted revision as of $1",
+"undeletebtn" => "Terpulih!",
+"undeletedarticle" => "\"$1\" telah dipulih",
+'undeletedrevisions' => "$1 semakan telah dipulih",
+"undeletebtn"       => "Pemulihan berjaya!", #"Restore!",
+"undeletedarticle"  => "telah dipulih", #"restored \"$1\"",
+
+
+# Contributions
+#
+"contributions"           => "Sumbangan pengguna", #"User contributions",
+"mycontris"         => "Sumbangan saya", #"My contributions",
+"contribsub2"      => "Untuk $1", #"For $1 ($2)",
+"nocontribs"              => "Tiada sebarang perubahan yang sepadan dengan kriteria-kriteria ini.", #"No changes were found matching these criteria.",
+"ucnote"          => "Di bawah ini adalah <b>$1</b> perubahan terbaru yang dibuat oleh pengguna ini sejak <b>$2</b> hari yang lalu.", #"Below are this user's last <b>$1</b> changes in the last <b>$2</b> days.",
+"uclinks"         => "Paparkan $1 perubahan terkini; paparkan $2 hari yang lalu", #"View the last $1 changes; view the last $2 days.",
+"uctop"                   => "(atas)", #"(top)",
+'newbies'           => "Pengguna baru",
+
+
+# What links here
+#
+"whatlinkshere"           =>  "Pautan ke halaman ini", #"Pages that link here,
+"notargettitle"     => "Tiada sasaran", #"No target",
+"notargettext"      => "Anda tidak menetapkan halaman atau pengguna sasaran untuk melaksanakan fungsi ini.",
+"linklistsub"     => "(Senarai Pautan)", #"(List of links)",
+"linkshere"       => "Halaman-halaman berikut berpaut ke sini:", #"The following pages link to here:",
+"nolinkshere"     => "Tiada halaman yang berpaut ke sini.", #"No pages link to here.",
+"isredirect"      => "Halaman peralihan", #"redirect page",
+
+
+# Block/unblock IP
+#
+"blockip"         => "Sekatkan IP", #"Block IP",
+"blockiptext"     => "Gunakan borang di bawah untuk menyekatkan capaian tulis dari alamat IP atau pengguna tertentu. Ini hanya dilakukan untuk mencegah laku musnah selaras dengan [[{{ns:project}}:Polisi dan garis panduan|Dasar {{SITENAME}}]]. Masukkan alasan tertentu di bawah (umpamannya, sebutkan halaman yang telah dilaku musnahkan).",
+"ipaddress"       => "Alamat IP atau Nama Pengguna", #"IP Address or Username",
+"ipbreason"       => "Alasan", #"Reason",
+"ipbsubmit"       => "Kirim", #"Submit",
+'ipbother'          => "Waktu lain",
+'ipboptions'        => "1 jam:1 hour, 2 jam:2 hours, 1 hari:1 day, 3 hari:3 days, 1 minggu:1 week, 2 minggu:2 week, 1 bulan:1 month, 3 bulan:3 months, 6 bulan:6 months,1 tahun:1 year,tak terbatas:infinite",
+'ipbotheroption'    => "lain-lain",
+"badipaddress"            => "Format alamat IP atau nama pengguna tidak betul.", #"The IP address or username is badly formed.",
+"blockipsuccesssub" => "Penyekatan berjaya", #"Block succeeded",
+"blockipsuccesstext" => "Alamat IP atau nama pengguna \"$1\" telah disekat. <br />Sila lihat [[{{ns:special}}:Ipblocklist|Senarai Sekatan]] untuk meninjau penyekatan semula.",
+"unblockip"       => "Nyahkan sekatan alamat IP atau pengguna", #"Unblock IP address or user",
+"unblockiptext"           => "Gunakan borang di bawah untuk memulihkan capaian tulis kepada alamat IP atau nama pengguna yang telah disekat.",
+"ipusubmit"       => "Nyahkan sekatan bagi alamat ini.", #"Unblock this address",
+"ipblocklist"     => "Senarai alamat IP dan nama pengguna yang tersekat", #"List of blocked IP addresses and users",
+'infiniteblock'     => "tak terbatas",
+'expiringblock'     => "$1 tamat tempohnya",
+'ipblocklistempty'  => "Senarai sekatan adalah kosong.",
+"blocklistline"           => "$1, $2 menyekati $3 ($4)",
+"blocklink"       => "sekat", #"block",
+"unblocklink"     => "nyahsekat", #"unblock",
+"contribslink"            => "sumbangan",
+"autoblocker"       => "Disekat secara automatik kerana alamat IP baru-baru ini digunakan oleh '[[Pengguna:$1|$1]]'. Alasan untuk menyekatkan $1\ adalah: \"$2\".",
+"blocklogpage"      => "Log sekatan",
+"blocklogentry"     => "Sekatkan '$1' sehingga $2",
+"blocklogtext"      => "Ini adalah log tindakan sekat dan nyahsekat. Penyekatan secara automatik tidak tersenarai. Sila lihat [[{{ns:special}}:Ipblocklist|Senarai Sekatan IP]] untuk penyekatan terkini.",
+"unblocklogentry"   => "nyahsekat '$1'",
+"range_block_disabled" => "Kebolehan penyelia untuk membuat penyekatan julat dimatikan.",
+"ipb_expiry_invalid"=> "Waktu habis tempoh tidak sah.",
+"ip_range_invalid"  => "Julat IP tidak sah.",
+"proxyblocker"      => "Penyekat proksi",
+"proxyblockreason"  => "Alamat IP anda telah disekat kerana ia merupakan proksi terbuka. Sila hubungi Penyedia Perkhidmatan Internet atau bantuan teknikal anda untuk memberitahu masalah keselamatan yang teruk ini.",
+"proxyblocksuccess" => "Berjaya.",
+'sorbs'             => 'SORBS DNSBL',
+'sorbsreason'       => "Alamat IP anda telah disenaraikan sebagai proksi terbuka di [http://www.sorbs.net SORBS] DNSBL.",
+'sorbs_create_account_reason' => "Alamat IP anda telah disenaraikan sebagai proksi terbuka di [http://www.sorbs.net SORBS] DNSBL. Oleh sebab itu, anda tidak dapat membuka akaun.",
+
+
+# Developer tools
+#
+"lockdb"              => "Kuncikan pangkalan data", #"Lock database",
+"unlockdb"            => "Nyahkan kunci pangkalan data", #"Unlock database",
+"lockdbtext"  => "Mengunci pangkalan data akan menyekati pengguna daripada penyuntingan halaman, penukaran tatarajah mereka serta lain-lain perkara yang melibatkan pengemaskinan pangkalan data. Sila pastikan anda memang hendak berbuat demikian, dan anda akan membuka semula pangkalan data apabila penyelenggaraan telah selesai.",
+"unlockdbtext"        => "Nyahkan kunci pangkalan data akan membolehkan pengguna daripada penyuntingan halaman, penukaran tatarajah mereka serta lain-lain perkara yang melibatkan pengemaskinian pangkalan data. Sila pastikan anda memang hendak berbuat demikian.",
+"lockconfirm" => "Ya, saya memang hendak menguncikan pangkalan data ini.", #"Yes, I really want to lock the database.",
+"unlockconfirm"       => "Ya, saya memang hendak mengenyahkan kunci pangkalan data ini.", #"Yes, I really want to unlock the database.",
+"lockbtn"             => "Kuncikan pangkalan data", #"Lock database",
+"unlockbtn"           => "Nyahkan kunci pangkalan data", #"Unlock database",
+"locknoconfirm" => "Anda tidak menandakan kotak pengesahan.", #"You did not check the confirmation box.",
+"lockdbsuccesssub" => "Penguncian pangkalan data berjaya", #"Database lock succeeded",
+"unlockdbsuccesssub" => "Pangkalan data telah dibuka semula", #"Database lock removed",
+"lockdbsuccesstext" => "Pangkalan data {{SITENAME}} telah dikunci.<br />Pastikan anda membukanya semula selepas penyelenggaraan telah selesai.",
+"unlockdbsuccesstext" => "Pangkalan data {{SITENAME}} telah dibuka semula.",
+
+
+
+# Move page
+#
+"movepage"    => "Alih halaman",  #"Move page",
+"movepagetext"        => "Borang di bawah ini adalah untuk mengubahkan nama halaman dan memindahkan semua data sejarahnya ke nama baru. Tajuk yang lama akan menjadi halaman peralihan yang menuju ke tajuk yang baru. Pautan-pautan ke tajuk yang lama tidak akan berubah. Sila semak bagi mengelakkan peralihan berganda atau peralihan rosak. Anda adalah bertanggung jawab untuk memastikan bahawa pautan-pautan masih berkait ke halaman yang seharusnya. <p>Sila perhatikan bahawa halaman <b>tidak</b> akan dipindah jika terdapatnya halaman yang mempunyai tajuk yang sama (kecuali halaman itu kosong atau merupakan halaman peralihan dan tidak mempunyai sejarah penyuntingan). Ini bererti bahawa anda dapat mengubahkan kembali nama halaman ke nama asalnya. Anda tidak boleh menindih atas halaman yang telah wujud.</p> <p><b>AMARAN!</b> Ini boleh merupakan perubahan yang drastik dan menyebabkan akibat yang tidak dijangka, khususnya bagi halaman yang popular. Sila pastikan bahawa anda faham akan selok belok borang ini sebelum anda meneruskan.</p>",
+'movepagetalktext'=> "Halaman perbualan yang berkaitan, jika ada, akan dipindahkan bersama-sama secara automatik kecuali:\n * Anda memindahkan halaman melampaui ruangnama;\n * Halaman perbualan yang berisi sedia ada di bawah nama baru; atau\n * Anda mengenyahkan tanda di bawah.\n Dalam kes tersebut, anda terpaksa memindahkan atau menggabungkan halaman secara manual sekiranya diperlukan.",
+
+"movearticle"   => "Alih halaman", #"Move page",
+"movenologin"   => "Belum log masuk", #"Not logged in",
+"movenologintext" => "Anda harus [[{{ns:special}}:Userlogin|log masuk]] untuk mengalihkan halaman.",
+"newtitle"      => "Ke tajuk baru",   #"To new title",
+"movepagebtn"   => "Alih halaman", #"Move page",
+"pagemovedsub"          => "Pengalihan berjaya",  #"Move succeeded",
+"pagemovedtext"   => "Halaman \"[[$1]]\" dialihkan ke \"[[$2]]\".", #"Page \"[[$1]]\" moved to \"[[$2]]\".",
+"articleexists"   => "Halaman dengan nama tersebut telah wujud, atau nama yang dipilih tidak sah.
+Sila pilihkan nama lain.",
+"talkexists"    => "Halaman ini sahaja berjaya dialihkan. Halaman perbualan tidak dapat dialih kerana halaman itu telah wujud. Sila gabungkan secara manual.", #"The page itself was moved successfully, but the talk page could not be moved because one already exists at the new title. Please merge them manually.",
+"movedto"       => "Alihkan ke",  #"moved to",
+"movetalk"      => "Alihkan halaman \"perbualan\" juga, jika sesuai.", #"Move \"talk\" page as well, if applicable.",
+"talkpagemoved"   => "Halaman perbualan yang berkaitan juga turut dialihkan.", #"The corresponding talk page was also moved.",
+"talkpagenotmoved" => "Halaman perbualan yang berkaitan <b>tidak</b> turut dialihkan.",
+'1movedto2'       => "$1 dialihkan ke $2",
+'movelogpage'     => "Log pengalihan",
+'movelogpagetext' => "Di bawah adalah senarai halaman yang telah dialih.",
+'movereason'      => "Alasan",
+'revertmove'      => "Kembali",
+'delete_and_move' => "Hapus dan alih",
+'delete_and_move_text'  =>
+"==Pemadaman diperlu==
+Rencana destinasi \"[[$1]]\" sudah wujud. Adakah anda ingin memadamkannya supaya dapat membolehkan peralihan?",
+'delete_and_move_reason' => "Terpadam untuk membolehkan peralihan",
+'selfmove' => "Tajuk sumber dan tajuk destinasi adalah sama; tidak dapat mengalihkan halaman ke halaman kendiri.", #"Source and destination titles are the same; can't move a page over itself.",
+'immobile_namespace' => "Tajuk destinasi merupakan jenis yang istimewa; tidak dapat mengalihkan halaman-halaman ke ruang nama itu.", #"Destination title is of a special type; cannot move pages into that namespace."
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesMt.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesMt.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesMt.php	(revision 1280)
@@ -0,0 +1,99 @@
+<?php
+/** Maltese (Malti)
+ *
+ * @addtogroup Language
+ */
+
+$messages = array(
+'mainpage' => 'Paġna prinċipali',
+
+'portal'          => 'Portal tal-komunità',
+'portal-url'      => 'Project:Portal tal-komunità',
+'aboutsite'       => 'Dwar {{SITENAME}}',
+'help'            => 'Għajnuna',
+'sitesupport'     => 'Donazzjonijiet',
+'sitesupport-url' => 'Project:Donazzjonijiet',
+'mytalk'          => 'Diskussjonijiet tiegħi',
+'navigation'      => 'Navigazzjoni',
+
+'currentevents'     => 'Ġrajjiet kurrenti',
+'currentevents-url' => 'Project:Ġrajjiet kurrenti',
+
+'disclaimers'      => 'Ċaħdiet',
+'search'           => 'Fittex',
+'go'               => 'Mur',
+'history_short'    => 'Kronoloġija',
+'printableversion' => 'Verżjoni għall-ipprintjar',
+'permalink'        => 'Link permanenti',
+'edit'             => 'Editja',
+'delete'           => 'Ħassar',
+'protect'          => 'Ipproteġi',
+'unprotect'        => 'Tibqax tipproteġi',
+'personaltools'    => 'Strumenti personali',
+'talk'             => 'Diskussjoni',
+'toolbox'          => 'Għodda',
+
+'youhavenewmessages' => 'Għandek $1 ($2).',
+
+# Short words for each namespace, by default used in the 'article' tab in monobook
+'nstab-main'      => 'Artiklu',
+'nstab-mediawiki' => 'Messaġġ',
+
+# General errors
+'viewsource' => 'Ara l-fonti',
+
+# Login and logout pages
+'userlogin'  => 'Idħol jew oħloq kont ġdid',
+'userlogout' => 'Oħroġ',
+
+# Edit pages
+'savearticle'    => 'Salva l-paġna',
+'editing'        => 'Qed jiġi editjat l-artiklu $1',
+'editingcomment' => 'Edit $1 (kumment)',
+
+# Preferences page
+'preferences' => 'Preferenzi',
+
+# Recent changes
+'recentchanges' => 'Tibdil riċenti',
+
+# Upload
+'upload' => "Tella' file",
+
+# Miscellaneous special pages
+'allpages'            => 'Il-paġni kollha',
+'randompage'          => 'Paġna kwalunkwe',
+'specialpages'        => 'Paġni speċjali',
+'recentchangeslinked' => 'Tibdil relatat',
+'move'                => 'Mexxi',
+
+'version' => 'Verżjoni',
+
+# E-mail user
+'emailuser' => 'Ibgħat e-mail lil dan l-utent',
+
+# Watchlist
+'watchlist' => "Lista t'osservazzjoni tiegħi",
+'mywatchlist' => "Lista t'osservazzjoni tiegħi",
+'watch'     => 'Segwi',
+'unwatch'   => 'Tibqax issegwi',
+
+# Undelete
+'undelete' => 'Irkupra l-paġna mħassra',
+
+# Contributions
+'contributions' => 'Kontribuzzjonijiet tal-user',
+'mycontris'     => 'Kontribuzzjonijiet tiegħi',
+
+# What links here
+'whatlinkshere' => 'Links li jwasslu hawn',
+
+# Block/unblock
+'blockip' => 'Ibblokkja l-utent',
+
+# Namespace 8 related
+'allmessages' => 'Il-messaġġi kollha tas-sistema',
+
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesMzn.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesMzn.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesMzn.php	(revision 1280)
@@ -0,0 +1,22 @@
+<?php
+/** Mazandarani
+  *
+  * Minimalistic setup, needed to switch to right-to-left writing.
+  *
+  * @addtogroup Language
+  */
+
+$linkPrefixExtension = true;
+$fallback8bitEncoding = 'windows-1256';
+
+$rtl = true;
+$defaultUserOptionOverrides = array(
+	# Swap sidebar to right side by default
+	'quickbar' => 2,
+	# Underlines seriously harm legibility. Force off:
+	'underline' => 0,
+);
+
+$fallback = 'fa';
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesNah.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesNah.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesNah.php	(revision 1280)
@@ -0,0 +1,50 @@
+<?php
+/** Nahuatl
+  *
+  * @addtogroup Language
+  *
+  * @author Rob Church <robchur@gmail.com>
+  *
+  * @copyright Copyright © 2006, Rob Church
+  * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
+ */
+
+# Per conversation with a user in IRC, we inherit from Spanish and work from there
+# Nahuatl was the language of the Aztecs, and a modern speaker is most likely to
+# understand Spanish if a Nah translation is not available
+$fallback = 'es';
+
+$messages = array(
+
+	# Month names
+	'january' => 'Tlacenti',
+	'february' => 'Tlaonti',
+	'march' => 'Tlayeti',
+	'april' => 'Tlanauhtl',
+	'may' => 'Tlamacuilti',
+	'june' => 'Tlachicuazti',
+	'august' => 'Tlachiconti',
+	'september' => 'Tlachicnauhti',
+	'october' => 'Tlamatlacti',
+	'november' => 'Tlamactlihuanceti',
+	'december' => 'Tlamactlihuanonti',
+	
+	# Days of the week
+	'monday' => 'Metztlitonal',
+	'tuesday' => 'Huitzilopochtonal',
+	'wednesday' => 'Yacatlipotonal',
+	'thursday' => 'Tezcatlipotonal',
+	'friday' => 'Quetzalcoatonal',
+	'saturday' => 'Tlaloctitonal',
+	'sunday' => 'Tonatiutonal',
+	
+	# Preferences etc.
+	'userlogin' => 'Calaqui / Registrarse',
+	'yourlanguage' => 'Tlahtolli:',
+	'yourpassword' => 'Tlahtolichtacayo',
+	'yourpasswordagain' => 'Tlahtolichtacayo zapa'
+
+);
+
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesNap.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesNap.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesNap.php	(revision 1280)
@@ -0,0 +1,9 @@
+<?php
+/** Neapolitan (Nnapulitano)
+  *
+  * @addtogroup Language
+  */
+
+$fallback = 'it';
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesNds.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesNds.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesNds.php	(revision 1280)
@@ -0,0 +1,1503 @@
+<?php
+/** Low Saxon (Plattdüütsch)
+ *
+ * @addtogroup Language
+ */
+$magicWords = array(
+	#   ID                                 CASE  SYNONYMS
+	'redirect'               => array( 0, '#redirect',                   '#wiederleiden'          ),
+	'notoc'                  => array( 0, '__NOTOC__',                   '__KEENINHOLTVERTEKEN__' ),
+	'forcetoc'               => array( 0, '__FORCETOC__',                '__WIESINHOLTVERTEKEN__' ),
+	'toc'                    => array( 0, '__TOC__',                     '__INHOLTVERTEKEN__'     ),
+	'noeditsection'          => array( 0, '__NOEDITSECTION__',           '__KEENÄNNERNLINK__'     ),
+	'start'                  => array( 0, '__START__'                                             ),
+	'currentmonth'           => array( 1, 'CURRENTMONTH',                'AKTMAAND'               ),
+	'currentmonthname'       => array( 1, 'CURRENTMONTHNAME',            'AKTMAANDNAAM'           ),
+	'currentday'             => array( 1, 'CURRENTDAY',                  'AKTDAG'                 ),
+	'currentdayname'         => array( 1, 'CURRENTDAYNAME',              'AKTDAGNAAM'             ),
+	'currentyear'            => array( 1, 'CURRENTYEAR',                 'AKTJOHR'                ),
+	'currenttime'            => array( 1, 'CURRENTTIME',                 'AKTTIED'                ),
+	'numberofarticles'       => array( 1, 'NUMBEROFARTICLES',            'ARTIKELTALL'            ),
+	'currentmonthnamegen'    => array( 1, 'CURRENTMONTHNAMEGEN',         'AKTMAANDNAAMGEN'        ),
+	'pagename'               => array( 1, 'PAGENAME',                    'SIETNAAM'               ),
+	'pagenamee'              => array( 1, 'PAGENAMEE',                   'SIETNAAME'              ),
+	'namespace'              => array( 1, 'NAMESPACE',                   'NAAMRUUM'               ),
+	'subst'                  => array( 0, 'SUBST:'                                                ),
+	'msgnw'                  => array( 0, 'MSGNW:'                                                ),
+	'img_thumbnail'          => array( 1, 'thumbnail', 'thumb',          'duum'                   ),
+	'img_right'              => array( 1, 'right',                       'rechts'                 ),
+	'img_left'               => array( 1, 'left',                        'links'                  ),
+	'img_none'               => array( 1, 'none',                        'keen'                   ),
+	'img_width'              => array( 1, '$1px',                        '$1px'                   ),
+	'img_center'             => array( 1, 'center', 'centre',            'merrn'                  ),
+	'img_framed'             => array( 1, 'framed', 'enframed', 'frame', 'rahmt'                  ),
+	'int'                    => array( 0, 'INT:'                                                  ),
+	'sitename'               => array( 1, 'SITENAME',                    'STEEDNAAM'              ),
+	'ns'                     => array( 0, 'NS:',                         'NR:'                    ),
+	'localurl'               => array( 0, 'LOCALURL:',                   'STEEDURL:'              ),
+	'localurle'              => array( 0, 'LOCALURLE:',                  'STEEDURLE:'             ),
+	'server'                 => array( 0, 'SERVER',                      'SERVER'                 ),
+	'grammar'                => array( 0, 'GRAMMAR:',                    'GRAMMATIK:'             )
+);
+
+$skinNames = array(
+	'standard'      => 'Klassik',
+	'nostalgia'     => 'Nostalgie',
+	'cologneblue'   => 'Kölsch Blau',
+	'smarty'        => 'Paddington',
+	'chick'         => 'Küken'
+);
+
+
+$bookstoreList = array(
+	'Verteken vun leverbore Böker'  => 'http://www.buchhandel.de/sixcms/list.php?page=buchhandel_profisuche_frameset&suchfeld=isbn&suchwert=$1=0&y=0',
+	'abebooks.de'                   => 'http://www.abebooks.de/servlet/BookSearchPL?ph=2&isbn=$1',
+	'Amazon.de'                     => 'http://www.amazon.de/exec/obidos/ISBN=$1',
+	'Lehmanns Fachbuchhandlung'     => 'http://www.lob.de/cgi-bin/work/suche?flag=new&stich1=$1',
+);
+
+$namespaceNames = array(
+	NS_MEDIA            => 'Media',
+	NS_SPECIAL          => 'Spezial',
+	NS_MAIN             => '',
+	NS_TALK             => 'Diskuschoon',
+	NS_USER             => 'Bruker',
+	NS_USER_TALK        => 'Bruker_Diskuschoon',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK     => '$1_Diskuschoon',
+	NS_IMAGE            => 'Bild',
+	NS_IMAGE_TALK       => 'Bild_Diskuschoon',
+	NS_MEDIAWIKI        => 'MediaWiki',
+	NS_MEDIAWIKI_TALK   => 'MediaWiki_Diskuschoon',
+	NS_TEMPLATE         => 'Vörlaag',
+	NS_TEMPLATE_TALK    => 'Vörlaag_Diskuschoon',
+	NS_HELP             => 'Hülp',
+	NS_HELP_TALK        => 'Hülp_Diskuschoon',
+	NS_CATEGORY         => 'Kategorie',
+	NS_CATEGORY_TALK    => 'Kategorie_Diskuschoon'
+);
+$linkTrail = '/^([äöüßa-z]+)(.*)$/sDu';
+$separatorTransformTable = array(',' => '.', '.' => ',' );
+
+$dateFormats = array(
+	'mdy time' => 'H:i',
+	'mdy date' => 'M j., Y',
+	'mdy both' => 'H:i, M j., Y',
+
+	'dmy time' => 'H:i',
+	'dmy date' => 'j. M Y',
+	'dmy both' => 'H:i, j. M Y',
+
+	'ymd time' => 'H:i',
+	'ymd date' => 'Y M j.',
+	'ymd both' => 'H:i, Y M j.',
+);
+
+$messages = array(
+# User preference toggles
+'tog-underline'               => 'Verwies ünnerstrieken',
+'tog-highlightbroken'         => 'Verwies op leddige Sieten hervörheven',
+'tog-justify'                 => 'Text as Blocksatz',
+'tog-hideminor'               => 'Kene lütten Ännern in letzte Ännern wiesen',
+'tog-usenewrc'                => 'Erwiederte letzte Ännern (nich för alle Browser bruukbor)',
+'tog-numberheadings'          => 'Överschrieven automatsch nummereern',
+'tog-showtoolbar'             => 'Editeer-Warktüüchlist wiesen',
+'tog-editondblclick'          => 'Sieten mit Dubbelklick bearbeiden (JavaScript)',
+'tog-editsection'             => 'Links för dat Bearbeiden vun en Afsatz wiesen',
+'tog-editsectiononrightclick' => 'En Afsatz mit en Rechtsklick bearbeiden (Javascript)',
+'tog-showtoc'                 => "Wiesen vun'n Inholtsverteken bi Sieten mit mehr as dree Överschriften",
+'tog-rememberpassword'        => 'Duersam Inloggen',
+'tog-editwidth'               => 'Text-Ingaavfeld mit vulle Breed',
+'tog-watchcreations'          => 'Nee schrevene Sieden op miene Oppasslist setten',
+'tog-watchdefault'            => 'Op ne’e un ännerte Sieden oppassen',
+'tog-watchmoves'              => 'Sieden, de ik schuuv, to de Oppasslist todoon',
+'tog-watchdeletion'           => 'Sieden, de ik wegsmiet, to de Oppasslist todoon',
+'tog-minordefault'            => 'Alle Ännern as lütt markeern',
+'tog-previewontop'            => 'Vörschau vör dat Editeerfinster wiesen',
+'tog-previewonfirst'          => "Vörschau bi'n eersten Ännern wiesen",
+'tog-nocache'                 => 'Sietencache deaktiveern',
+'tog-enotifwatchlistpages'    => 'Schriev mi en Nettbreef, wenn ene Siet, op de ik oppass, ännert warrt',
+'tog-enotifusertalkpages'     => 'Schriev mi en Nettbreef, wenn ik ne’e Narichten heff',
+'tog-enotifminoredits'        => 'Schriev mi en Nettbreef, ok wenn dat blots en lütte Ännern weer',
+'tog-enotifrevealaddr'        => 'Miene Nettbreefadress in Bestätigungsnettbreven wiesen',
+'tog-shownumberswatching'     => 'Wies de Tall vun Brukers, de op disse Siet oppasst',
+'tog-fancysig'                => 'eenfache Signatur (ahn Lenk)',
+'tog-externaldiff'            => 'Extern Warktüüch to’n Wiesen vun Ünnerscheden as Standard bruken',
+'tog-uselivepreview'          => 'Live-Vörschau bruken (JavaScript) (Experimental)',
+'tog-forceeditsummary'        => 'Segg mi bescheid, wenn ik keen Tosamenfaten geven heff, wat ik allens ännert heff',
+'tog-watchlisthideown'        => 'Ännern vun mi sülvs op de Oppasslist nich wiesen',
+'tog-watchlisthidebots'       => 'Ännern vun Bots op de Oppasslist nich wiesen',
+'tog-nolangconversion'        => 'Variantenkonverschoon utschalten',
+'tog-ccmeonemails'            => 'vun Nettbreven, de ik wegschick, an mi sülvst Kopien schicken',
+
+'underline-always'  => 'Jümmer',
+'underline-never'   => 'Nienich',
+'underline-default' => 'so as in’n Nettkieker instellt',
+
+'skinpreview' => '(Vörschau)',
+
+# Dates
+'sunday'        => 'Sünndag',
+'monday'        => 'Maandag',
+'tuesday'       => 'Dingsdag',
+'wednesday'     => 'Merrweek',
+'thursday'      => 'Dunnersdag',
+'friday'        => 'Freedag',
+'saturday'      => 'Sünnavend',
+'sun'           => 'Sü',
+'mon'           => 'Ma',
+'tue'           => 'Di',
+'wed'           => 'Mi',
+'thu'           => 'Du',
+'fri'           => 'Fr',
+'sat'           => 'Sa',
+'january'       => 'Januar',
+'february'      => 'Februar',
+'march'         => 'März',
+'april'         => 'April',
+'may_long'      => 'Mai',
+'june'          => 'Juni',
+'july'          => 'Juli',
+'august'        => 'August',
+'september'     => 'September',
+'october'       => 'Oktober',
+'november'      => 'November',
+'december'      => 'Dezember',
+'january-gen'   => 'Januar',
+'february-gen'  => 'Februar',
+'march-gen'     => 'März',
+'april-gen'     => 'April',
+'may-gen'       => 'Mai',
+'june-gen'      => 'Juni',
+'july-gen'      => 'Juli',
+'august-gen'    => 'August',
+'september-gen' => 'September',
+'october-gen'   => 'Oktober',
+'november-gen'  => 'November',
+'december-gen'  => 'Dezember',
+'jan'           => 'Jan',
+'feb'           => 'Feb',
+'mar'           => 'Mär',
+'apr'           => 'Apr',
+'may'           => 'Mai',
+'jun'           => 'Jun',
+'jul'           => 'Jul',
+'aug'           => 'Aug',
+'sep'           => 'Sep',
+'oct'           => 'Okt',
+'nov'           => 'Nov',
+'dec'           => 'Dez',
+
+# Bits of text used by many pages
+'categories'            => '{{PLURAL:$1|Kategorie|Kategorien}}',
+'pagecategories'        => '{{PLURAL:$1|Kategorie|Kategorien}}',
+'category_header'       => 'Sieden in de Kategorie „$1“',
+'subcategories'         => 'Ünnerkategorien',
+'category-media-header' => 'Mediendatein in de Kategorie „$1“',
+
+'mainpagetext'      => 'De Wiki-Software is mit Spood installeert worrn.',
+'mainpagedocfooter' => 'Kiek de [http://meta.wikimedia.org/wiki/MediaWiki_i18n Dokumentatschoon för dat Anpassen vun de Brukerböversiet]
+un dat [http://meta.wikimedia.org/wiki/MediaWiki_User%27s_Guide Brukerhandbook] för Hülp to de Bruuk un Konfiguratschoon.',
+
+'about'          => 'Över',
+'article'        => 'Artikel',
+'newwindow'      => '(apent sik in en nieg Finster)',
+'cancel'         => 'Afbreken',
+'qbfind'         => 'Finnen',
+'qbbrowse'       => 'Blädern',
+'qbedit'         => 'Ännern',
+'qbpageoptions'  => 'Sietenoptschonen',
+'qbpageinfo'     => 'Sietendaten',
+'qbmyoptions'    => 'Instellen',
+'qbspecialpages' => 'Spezialsieten',
+'moredotdotdot'  => 'Mehr...',
+'mypage'         => 'Mien Siet',
+'mytalk'         => 'Mien Diskuschoon',
+'anontalk'       => 'Diskuschoonssiet vun disse IP',
+'navigation'     => 'Navigatschoon',
+
+'errorpagetitle'    => 'Fehler',
+'returnto'          => 'Trüch to $1.',
+'tagline'           => 'Vun {{SITENAME}}',
+'help'              => 'Hülp',
+'search'            => 'Söken',
+'searchbutton'      => 'Söken',
+'go'                => 'Gah',
+'searcharticle'     => 'Los',
+'history'           => 'Historie',
+'history_short'     => 'Historie',
+'updatedmarker'     => 'bearbeidt, in de Tiet sietdem ik toletzt dor weer',
+'info_short'        => 'Informatschoon',
+'printableversion'  => 'Druckversion',
+'permalink'         => 'Duurlenk',
+'print'             => 'Drucken',
+'edit'              => 'Ännern',
+'editthispage'      => 'Siet bearbeiden',
+'delete'            => 'Wegsmieten',
+'deletethispage'    => 'Disse Siet wegsmieten',
+'undelete_short'    => '{{PLURAL:$1|ene Version|$1 Versionen}} wedderhalen',
+'protect'           => 'Schulen',
+'protectthispage'   => 'Siet schulen',
+'unprotect'         => 'Freegeven',
+'unprotectthispage' => 'Schuul opheben',
+'newpage'           => 'Niege Siet',
+'talkpage'          => 'Diskuschoon',
+'specialpage'       => 'Spezialsiet',
+'personaltools'     => 'Persönliche Warktüüch',
+'postcomment'       => 'Kommentar hentofögen',
+'articlepage'       => 'Artikel',
+'talk'              => 'Diskuschoon',
+'toolbox'           => 'Warktüüch',
+'userpage'          => 'Brukersiet',
+'projectpage'       => 'Meta-Text',
+'imagepage'         => 'Bildsiet',
+'mediawikipage'     => 'Systemnaricht ankieken',
+'templatepage'      => 'Vörlaag ankieken',
+'viewhelppage'      => 'Helpsiet ankieken',
+'categorypage'      => 'Kategorie ankieken',
+'viewtalkpage'      => 'Diskuschoon',
+'otherlanguages'    => 'Annere Spraken',
+'redirectedfrom'    => '(Wiederleiden vun $1)',
+'redirectpagesub'   => 'Redirectsiet',
+'lastmodifiedat'    => 'Disse Siet is toletzt üm $2, $1 ännert worrn.', # $1 date, $2 time
+'viewcount'         => 'Disse Siet is $1 Maal opropen worrn.',
+'protectedpage'     => 'Schulte Sieten',
+'jumpto'            => 'Wesseln na:',
+'jumptonavigation'  => 'Navigatschoon',
+'jumptosearch'      => 'Söök',
+
+# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
+'aboutsite'         => 'Över {{SITENAME}}',
+'aboutpage'         => '{{ns:project}}:Över_{{SITENAME}}',
+'bugreports'        => 'Kontakt',
+'bugreportspage'    => '{{ns:project}}:Kontakt',
+'copyright'         => 'Inholt is verfögbor ünner de $1.',
+'copyrightpagename' => '{{SITENAME}} Copyright',
+'copyrightpage'     => '{{ns:project}}:Lizenz',
+'currentevents'     => 'Aktuell Schehn',
+'currentevents-url' => '{{ns:project}}:Aktuell Schehn',
+'disclaimers'       => 'Lizenzbestimmen',
+'disclaimerpage'    => '{{ns:project}}:Lizenzbestimmen',
+'edithelp'          => 'Bearbeidenshülp',
+'edithelppage'      => '{{ns:project}}:Editeerhülp',
+'faq'               => 'Faken stellte Fragen',
+'faqpage'           => '{{ns:project}}:Faken stellte Fragen',
+'helppage'          => '{{ns:help}}:Hülp',
+'mainpage'          => 'Hööftsiet',
+'portal'            => '{{SITENAME}}-Portal',
+'portal-url'        => '{{ns:project}}:{{SITENAME}}-Portal',
+'sitesupport'       => 'Spennen',
+
+'badaccess' => 'Fehler bi de Rechten',
+
+'versionrequired' => 'Version $1 vun MediaWiki nödig',
+
+'ok'                  => 'OK',
+'pagetitle'           => '$1 - {{SITENAME}}',
+'retrievedfrom'       => 'Vun „$1“',
+'youhavenewmessages'  => 'Du hest $1 ($2).',
+'newmessageslink'     => 'Ne’e Narichten',
+'newmessagesdifflink' => 'Ünnerscheed to vörher',
+'editsection'         => 'bearbeiden',
+'editold'             => 'bearbeiden',
+'editsectionhint'     => 'Ännere Afsnitt: $1',
+'toc'                 => 'Inholtsverteken',
+'showtoc'             => 'wiesen',
+'hidetoc'             => 'Nich wiesen',
+'thisisdeleted'       => 'Ankieken oder weerholen vun $1?',
+'viewdeleted'         => '$1 ankieken?',
+'restorelink'         => '$1 löscht Bearbeidensvörgäng',
+
+# Short words for each namespace, by default used in the 'article' tab in monobook
+'nstab-main'      => 'Artikel',
+'nstab-user'      => 'Siet vun den Bruker',
+'nstab-media'     => 'Media',
+'nstab-special'   => 'Spezial',
+'nstab-project'   => 'Över',
+'nstab-image'     => 'Bild',
+'nstab-mediawiki' => 'Naricht',
+'nstab-template'  => 'Vörlaag',
+'nstab-help'      => 'Hülp',
+'nstab-category'  => 'Kategorie',
+
+# Main script and global functions
+'nosuchaction'      => 'Disse Aktschoon gifft dat nich',
+'nosuchactiontext'  => 'Disse Aktschoon warrt vun de MediaWiki-Software nich ünnerstütt',
+'nosuchspecialpage' => 'Disse Spezialsiet gifft dat nich',
+'nospecialpagetext' => 'Disse Spezialsiet warrt vun de MediaWiki-Software nich ünnerstütt',
+
+# General errors
+'error'                => 'Fehler',
+'databaseerror'        => 'Fehler in de Datenbank',
+'dberrortext'          => 'Dor weer en Syntaxfehler in de Datenbankaffraag.
+De letzte Datenbankaffraag weer:
+
+<blockquote><tt>$1</tt></blockquote>
+
+ut de Funktschoon <tt>$2</tt>.
+MySQL mell den Fehler <tt>$3: $4</tt>.',
+'dberrortextcl'        => 'Dor weer en Syntaxfehler in de Datenbankaffraag.
+De letzte Datenbankaffraag weer: $1 ut de Funktschoon <tt>$2</tt>.
+MySQL mell den Fehler: <tt>$3: $4</tt>.',
+'noconnect'            => 'De Software kunn keen Verbinnen to de Datenbank op $1 opnehmen',
+'nodb'                 => 'De Software kunn de Datenbank $1 nich utwählen',
+'cachederror'          => "Disse Siet is en Kopie ut'n Cache un is mööglicherwies nich aktuell.",
+'laggedslavemode'      => 'Wohrschau: Disse Siet is villicht nich mehr op den ne’esten Stand.',
+'readonly'             => 'Datenbank is sparrt',
+'enterlockreason'      => 'Giff den Grund an, worüm de Datenbank sparrt warrn schall un taxeer, wo lang de Sparr duert',
+'readonlytext'         => 'De Datenbank vun {{SITENAME}} is opstunns sparrt. Versöök dat later noch eenmal, duert meist nich lang, denn geiht dat wedder.
+
+As Grund för de Sparr is angeven: $1',
+'missingarticle'       => "De Text för de Siet '$1' kunn nich in de Datenbank funnen warrn. Dat is wohrschienlich en Fehler in de Software. Bitte mell dat an enen Administrater un giff ok den Sietennaam an.",
+'internalerror'        => 'Internen Fehler',
+'filecopyerror'        => "De Software kunn Datei '$1' nich no '$2' kopeern.",
+'filerenameerror'      => "De Software kunn Datei '$1' nich no '$2' ümnömen.",
+'filedeleteerror'      => "De Software kunn Datei '$1' nich löschen.",
+'filenotfound'         => "De Software kunn Datei '$1' nich finnen.",
+'unexpected'           => "Unvermodten Weert: '$1'='$2'.",
+'formerror'            => 'Fehler: De Software kunn dat Formular nich verarbeiden',
+'badarticleerror'      => 'Disse Aktschoon kann op disse Siet nich anwennt warrn.',
+'cannotdelete'         => 'De Software kunn de spezifizeerte Siet nich löschen. (Mööglicherwies is de al vun en annern löscht worrn.)',
+'badtitle'             => 'Ungülligen Titel',
+'badtitletext'         => 'De Titel vun de födderte Siet weer ungüllig, leddig, oder en ungülligen Spraaklink vun en annern Wiki.',
+'perfdisabled'         => 'Disse Funktschoon is wegen Överlast vun de Servers för enige Tied deaktiveert. Versöök dat doch twüschen 02:00 un 14:00 UTC noch eenmal<br />(Aktuelle Servertied: 21:06:12 UTC).',
+'perfdisabledsub'      => 'Hier is en spiekerte Kopie vun $1:', # obsolete?
+'perfcached'           => 'Disse Daten kamen ut den Cache un sünd mööglicherwies nich aktuell:',
+'wrong_wfQuery_params' => 'Falschen Parameter för wfQuery()<br />
+Funktschoon: $1<br />
+Query: $2',
+'viewsource'           => 'Dokmentborn ankieken',
+'viewsourcefor'        => 'för $1',
+'protectedinterface'   => 'Op disse Siet staht Narichtentexte för dat System un de Siet is dorüm sparrt.',
+'sqlhidden'            => '(SQL-Affraag versteken)',
+
+# Login and logout pages
+'logouttitle'                => 'Bruker-Afmellen',
+'logouttext'                 => 'Du büst nu afmellt. Du kannst {{SITENAME}} nu anonym wiederbruken oder di ünner en annern Brukernaam wedder anmellen.',
+'welcomecreation'            => '<h2>Willkomen, $1!</h2><p>Dien Brukerkonto is nu inricht.
+Vergeet nich, dien [[Special:Preferences|Instellen]] antopassen.',
+'loginpagetitle'             => 'Bruker-Anmellen',
+'yourname'                   => 'Dien Brukernaam',
+'yourpassword'               => 'Dien Passwoort',
+'yourpasswordagain'          => 'Password nochmal ingeven',
+'remembermypassword'         => 'Duersam inloggen',
+'loginproblem'               => '<b>Dor weer en Problem mit dien Anmellen.</b><br />Versöök dat noch eenmal!',
+'alreadyloggedin'            => '<strong>Bruker $1, du büst al anmellt!</strong><br />',
+'login'                      => 'Anmellen',
+'loginprompt'                => 'Üm di bi {{SITENAME}} antomellen, musst du Cookies anstellt hebben.',
+'userlogin'                  => 'Nee Konto anleggen oder anmellen',
+'logout'                     => 'Afmellen',
+'userlogout'                 => 'Afmellen',
+'notloggedin'                => 'Nich anmellt',
+'nologin'                    => 'Wenn du noch keen Brukerkonto hest, denn kannst di anmellen: $1.',
+'nologinlink'                => 'Brukerkonto inrichten',
+'createaccount'              => 'Nieg Brukerkonto anleggen',
+'gotaccount'                 => 'Hebbt Se al en Konto? $1.',
+'createaccountmail'          => 'över E-Mail',
+'badretype'                  => 'De beiden Passwöör stimmt nich övereen.',
+'userexists'                 => 'Dissen Brukernaam is al vergeven. Bitte wähl en annern.',
+'youremail'                  => 'Dien E-Mail (kene Plicht) *',
+'username'                   => 'Brukernaam:',
+'uid'                        => 'Bruker-ID:',
+'yourrealname'               => 'Dien echten Naam (kene Plicht)',
+'yourlanguage'               => 'Snittstellenspraak',
+'yourvariant'                => 'Dien Spraak',
+'yournick'                   => 'Dien Ökelnaam (för dat Ünnerschrieven)',
+'badsig'                     => 'De Signatur is nich korrekt, kiek nochmal na de HTML-Tags.',
+'email'                      => 'Nettbreef',
+'loginerror'                 => 'Fehler bi dat Anmellen',
+'nocookiesnew'               => 'De Brukertogang is anleggt, aver du büst nich inloggt. {{SITENAME}} bruukt för disse Funktschoon Cookies, aktiveer de Cookies un logg di denn mit dien nieg Brukernaam un den Password in.',
+'nocookieslogin'             => '{{SITENAME}} bruukt Cookies för dat Inloggen vun de Bruker. Du hest Cookies deaktiveert, aktiveer de Cookies un versöök dat noch eenmal.',
+'noname'                     => 'Du muttst en Brukernaam angeven.',
+'loginsuccesstitle'          => 'Anmellen hett Spood',
+'loginsuccess'               => 'Du büst nu as „$1“ bi {{SITENAME}} anmellt.',
+'nosuchuser'                 => 'De Brukernaam „$1“ existeert nich.
+Prööv de Schrievwies oder mell di as niegen Bruker an.',
+'nosuchusershort'            => 'De Brukernaam „$1“ existeert nich. Prööv de Schrievwies.',
+'nouserspecified'            => 'Du musst en Brukernaam angeven',
+'wrongpassword'              => 'Dat Passwoort, wat du ingeven hest, is verkehrt. Kannst dat aver noch wedder versöken.',
+'wrongpasswordempty'         => 'Dat ingevene Passwoort is leddig, versöök dat noch wedder.',
+'mailmypassword'             => 'En nieg Password sennen',
+'passwordremindertitle'      => '{{SITENAME}} Password',
+'passwordremindertext'       => 'Een (IP-Adress $1) hett för en nee Passwoort to’n Anmellen bi {{SITENAME}} beden ($4).
+Dat Passwoort för Bruker „$2“ is nu „$3“. Bitte mell di nu an un änner dien Passwoort.
+
+Wenn du nich sülvst för en nee Passwoort beden hest, denn bruukst di wegen disse Naricht nich to kümmern un kannst dien oolt Passwoort wiederbruken.',
+'noemail'                    => 'Bruker „$1“ hett kene E-Mail-Adress angeven.',
+'passwordsent'               => 'En nieg Password is an de E-Mail-Adress vun Bruker „$1“ send worrn. Mell di an, wenn du dat Password kriegt hest.',
+'mailerror'                  => 'Fehler bi dat Sennen vun de E-Mail: $1',
+'acct_creation_throttle_hit' => 'Du hest al $1 Brukerkontos anleggt. Du kannst nich noch mehr anleggen.',
+'emailconfirmlink'           => 'Nettbreef-Adress bestätigen',
+'accountcreated'             => 'Brukerkonto inricht',
+
+# Password reset dialog
+'resetpass_header' => 'Passwoort trüchsetten',
+
+# Edit page toolbar
+'bold_sample'     => 'Fetten Text',
+'bold_tip'        => 'Fetten Text',
+'italic_sample'   => 'Kursiven Text',
+'italic_tip'      => 'Kursiven Text',
+'link_sample'     => 'Link-Text',
+'link_tip'        => 'Internen Link',
+'extlink_sample'  => 'http://www.bispeel.com Link-Text',
+'extlink_tip'     => 'Externen Link (http:// is wichtig)',
+'headline_sample' => 'Evene 2 Överschrift',
+'headline_tip'    => 'Evene 2 Överschrift',
+'math_sample'     => 'Formel hier infögen',
+'math_tip'        => 'Mathematsche Formel (LaTeX)',
+'nowiki_sample'   => 'Unformateerten Text hier infögen',
+'nowiki_tip'      => 'Unformateerten Text',
+'image_sample'    => 'Bispeel.jpg',
+'image_tip'       => 'Bild-Verwies',
+'media_sample'    => 'Bispeel.mp3',
+'media_tip'       => 'Mediendatei-Verwies',
+'sig_tip'         => 'Diene Signatur mit Tietstempel',
+'hr_tip'          => 'Waagrechte Lien (sporsam bruken)',
+
+# Edit pages
+'summary'                => 'Tosamenfaten',
+'subject'                => 'Bedrap',
+'minoredit'              => 'Blots lütte Ännern.',
+'watchthis'              => 'Op disse Siet oppassen',
+'savearticle'            => 'Siet spiekern',
+'preview'                => 'Vörschau',
+'showpreview'            => 'Vörschau wiesen',
+'showlivepreview'        => 'Live-Vörschau',
+'showdiff'               => 'Ännern wiesen',
+'blockedtitle'           => 'Bruker is blockt',
+'blockedtext'            => 'Dien Brukernaam oder dien IP-Adress is vun $1 blockt worrn.
+As Grund is angeven:
+
+:$2
+
+De Duer steiht in’t [[Special:Log/block|Logbook]]. Wenn du glöövst, dat Sparren weer unrecht, denn mell di bi een vun de [[{{MediaWiki:grouppage-sysop}}|Administraters]]. Geev bi Fragen jümmer ok dien IP-Adress ($3) oder de ID vun dien Block (#$5) mit an.',
+'whitelistedittitle'     => 'üm de Siet to Bearbeiden is dat neudig anmellt to ween',
+'whitelistedittext'      => 'Du musst di $1, dat du Sieden ännern kannst.',
+'whitelistreadtitle'     => 'üm to Lesen is dat neudig anmellt to ween',
+'whitelistreadtext'      => 'Du musst di [[{{ns:special}}:Userlogin|hier anmellen]], dat du Sieden lesen kannst.',
+'whitelistacctitle'      => 'Du hest nich de Rechten en Konto antoleggen',
+'whitelistacctext'       => 'Üm in dissen Wiki Kontos anleggen to könen muttst du di [[Special:Userlogin|hier anmellen]] un de neudigen Rechten hebben.',
+'loginreqtitle'          => 'Anmellen nödig',
+'loginreqlink'           => 'anmellen',
+'loginreqpagetext'       => 'Du muttst di $1, üm annere Sieten ankieken to könen.',
+'accmailtitle'           => 'Passwort is send worrn.',
+'accmailtext'            => 'Dat Passwort vun $1 is an $2 send worrn.',
+'newarticle'             => '(Nieg)',
+'newarticletext'         => 'Hier den Text vun de niegen Siet indregen. Jümmer in ganze Sätz schrieven un kene Texten vun annern, de enen Oorheverrecht ünnerliggt, hierher kopeern.',
+'anontalkpagetext'       => "---- ''Dit is de Diskuschoonssiet vun en nich anmellt Bruker. Wi mööt hier de numerische [[IP-Adress]]
+verwennen, üm den Bruker to identifizeern. So en Adress kann vun verscheden Brukern bruukt warrn. Wenn du en anonymen Bruker büst un meenst,
+dat disse Kommentaren nich an di richt sünd, denn [[Special:Userlogin|mell di doch an]], dormit dat Problem nich mehr besteiht.''",
+'noarticletext'          => 'Dor is keen Text op disse Siet. [[{{ns:special}}:Search/{{PAGENAME}}|Na dissen Utdruck in annere Sieden söken]].',
+'clearyourcache'         => "'''Denk doran:''' No den Spiekern muttst du dien Browser noch seggen, de niege Version to laden: '''Mozilla/Firefox:''' ''Strg-Shift-R'', '''IE:''' ''Strg-F5'', '''Safari:''' ''Cmd-Shift-R'', '''Konqueror:''' ''F5''.",
+'usercssjsyoucanpreview' => '<strong>Tipp:</strong> Bruuk den Vörschau-Knoop, üm dien nieg CSS/JS vör dat Spiekern to testen.',
+'usercsspreview'         => "'''Denk doran, dat du blots en Vörschau vun dien CSS ankiekst, dat is noch nich spiekert!'''",
+'userjspreview'          => "'''Denk doran, dat du blots en Vörschau vun dien JS ankiekst, dat is noch nich spiekert!'''",
+'updated'                => '(Ännert)',
+'note'                   => '<strong>Wohrschau:</strong>',
+'previewnote'            => 'Dit is blots en Vörschau, de Siet is noch nich spiekert!',
+'previewconflict'        => 'Disse Vörschau wiest den Inholt vun dat Textfeld baven; so warrt de Siet utseihn, wenn du nu spiekerst.',
+'editing'                => 'Ännern vun $1',
+'editinguser'            => 'Ännern vun $1',
+'editingsection'         => 'Ännern vun $1 (Afsatz)',
+'editingcomment'         => 'Ännern vun $1 (Kommentar)',
+'editconflict'           => 'Konflikt bi dat Bearbeiden: $1',
+'explainconflict'        => 'En anner Bruker hett disse Siet ännert, no de Tied dat du anfungen hest, de Siet to bearbeiden.
+Dat Textfeld baven wiest de aktuelle Siet.
+Dat Textfeld nerrn wiest diene Ännern.
+Föög diene Ännern in dat Textfeld baven in.
+
+<b>Blots</b> de Text in dat Textfeld baven warrt spiekert, wenn du op Spiekern klickst!<br />',
+'yourtext'               => 'Dien Text',
+'storedversion'          => 'Spiekerte Version',
+'nonunicodebrowser'      => '<strong>Wohrscho: Dien Browser ünnerstütt keen Unicode, wähl en annern Browser, wenn du en Siet ännern wullst.</strong>',
+'editingold'             => '<strong>Wohrscho: Du bearbeidst en ole Version vun disse Siet.
+Wenn du spiekerst, warrn alle niegeren Versionen överschrieven.</strong>',
+'yourdiff'               => 'Ünnerscheed',
+'copyrightwarning2'      => "Dien Text, de du op {{SITENAME}} stellen wullst, könnt vun elkeen ännert oder wegmaakt warrn.
+Wenn du dat nich wullst, dröffst du dien Text hier nich apentlich maken.<br />
+
+Du bestätigst ok, dat du den Text sülvst schreven hest oder ut en „Public Domain“-Born oder en annere fre'e Born kopeert hest (Kiek ok $1 för Details).
+<strong>Kopeer kene Warken, de enen Oorheverrecht ünnerliggt, ahn Verlööv vun de Copyright-Inhebbers!</strong>",
+'longpagewarning'        => '<strong>Wohrscho: Disse Siet is $1 KB groot; en poor Browser köönt Probleme hebben, Sieten to bearbeiden, de grötter as 32 KB sünd.
+Bedenk of disse Siet vilicht in lüttere Afsnitten opdeelt warrn kann.</strong>',
+'readonlywarning'        => '<strong>Wohrscho: De Datenbank is wiel dat Ännern vun de
+Siet för Pleegarbeiden sparrt worrn, so dat du de Siet en Stoot nich
+spiekern kannst. Seker di den Text un versöök later weer de Ännern to spiekern.</strong>',
+'protectedpagewarning'   => '<strong>Wohrscho: Disse Siet is sparrt worrn, so dat blots
+Bruker mit Sysop-Rechten doran arbeiden könnt.</strong>',
+'template-protected'     => '(schuult)',
+'template-semiprotected' => '(half-schuult)',
+
+# Account creation failure
+'cantcreateaccounttitle' => 'Brukerkonto kann nich anleggt warrn',
+
+# History pages
+'revhistory'       => 'Fröhere Versionen',
+'viewpagelogs'     => 'Logbook för disse Siet',
+'nohistory'        => 'Dor sünd kene fröheren Versionen vun disse Siet.',
+'revnotfound'      => 'Kene fröheren Versionen funnen',
+'revnotfoundtext'  => 'De Version vun disse Siet, no de du söökst, kunn nich funnen warrn. Prööv de URL vun disse Siet.',
+'loadhist'         => 'Lade List mit freuhere Versionen',
+'currentrev'       => 'Aktuelle Version',
+'revisionasof'     => "Version vun'n $1",
+'revision-info'    => '<div id="viewingold-warning" style="background: #ffbdbd; border: 1px solid #BB7979; font-weight: bold; padding: .5em 1em;">
+Dit is en ole Version vun disse Siet, so as <span id="mw-revision-name">$2</span> de <span id="mw-revision-date">$1</span> ännert hett. De Version kann temlich stark vun de <a href="{{FULLURL:{{FULLPAGENAME}}}}" title="{{FULLPAGENAME}}">aktuelle Version</a> afwieken.
+</div>',
+'previousrevision' => 'Nächstöllere Version→',
+'nextrevision'     => '←Nächstjüngere Version',
+'cur'              => 'Aktuell',
+'next'             => 'Tokamen',
+'last'             => 'Letzte',
+'orig'             => 'Original',
+'histlegend'       => "Ünnerscheed-Utwahl: De Boxen vun de wünschten
+Versionen markeern un 'Enter' drücken oder den Knoop nerrn klicken/alt-v.<br />
+Legende:
+(Aktuell) = Ünnerscheed to de aktuelle Version,
+(Letzte) = Ünnerscheed to de vörige Version,
+L = Lütte Ännern",
+
+# Diffs
+'difference'                => '(Ünnerscheed twischen de Versionen)',
+'loadingrev'                => 'laad Versionen üm Ünnerscheden to wiesen',
+'lineno'                    => 'Reeg $1:',
+'editcurrent'               => 'De aktuelle Version vun disse Siet bearbeiden',
+'selectnewerversionfordiff' => 'En niegere Version för en Vergliek utwählen',
+'selectolderversionfordiff' => 'En öllere Version för en Vergliek utwählen',
+'compareselectedversions'   => 'Wählte Versionen verglieken',
+'editundo'                  => 'rutnehmen',
+
+# Search results
+'searchresults'         => 'Söökresultaten',
+'searchresulttext'      => 'För mehr Informatschonen över {{SITENAME}}, kiek [[{{MediaWiki:helppage}}|{{SITENAME}} dörsöken]].',
+'searchsubtitle'        => 'För de Söökanfraag „[[:$1]]“',
+'searchsubtitleinvalid' => 'För de Söökanfraag „$1“',
+'badquery'              => 'Falsche Söökanfraag',
+'badquerytext'          => "De Söökanfraag kunn nich verarbeid warrn.
+Sachts hest du versöökt, en Word to söken, dat kötter as twee Bookstaven is.
+Dit funktschoneert in'n Momang noch nich.
+Mööglicherwies hest du ok de Anfraag falsch formuleert, to'n Bispeel 'Lohn un un Stüern'. Versöök en anners formuleerte Anfraag.",
+'matchtotals'           => 'De Anfraag „$1“ stimmt mit $2 Sietenöverschriften un den Text vun $3 Sieten överein.',
+'noexactmatch'          => 'Dor existeert kene Siet mit dissen Naam. Versöök de Vulltextsöök oder legg de Siet [[:$1|nieg]] an.',
+'titlematches'          => 'Övereenstimmen mit Överschriften',
+'notitlematches'        => 'Kene Övereenstimmen',
+'textmatches'           => 'Övereenstimmen mit Texten',
+'notextmatches'         => 'Kene Övereenstimmen',
+'prevn'                 => 'vörige $1',
+'nextn'                 => 'tokamen $1',
+'viewprevnext'          => 'Wies ($1) ($2) ($3).',
+'showingresults'        => 'Hier sünd <b>$1</b> Resultaten, anfungen mit #<b>$2</b>.',
+'showingresultsnum'     => 'Hier sünd <b>$3</b> Resultaten, anfungen mit #<b>$2</b>.',
+'nonefound'             => '<strong>Henwies</strong>:
+Söökanfragen ahn Spood hebbt faken de Oorsaak, dat no kotte oder gemeene Wöör söökt warrt, de nich indizeert sünd.',
+'powersearch'           => 'Söken',
+'powersearchtext'       => '
+Söök in Naamrüüm:<br />
+
+
+$1<br />
+$2 Wies ok Wiederleiden   Söök no $3 $9',
+'searchdisabled'        => '<p>De Vulltextsöök is wegen Överlast en Stoot deaktiveert. In disse Tied kannst du disse Google-Söök verwennen,
+de aver nich jümmer den aktuellsten Stand weerspegelt.<p>',
+'blanknamespace'        => '(Hööft-)',
+
+# Preferences page
+'preferences'              => 'Instellen',
+'prefsnologin'             => 'Nich anmellt',
+'prefsnologintext'         => 'Du muttst [[Special:Userlogin|anmellt]] ween, üm dien Instellen to ännern.',
+'prefsreset'               => 'Instellen sünd op Standard trüchsett.',
+'qbsettings'               => 'Sietenliest',
+'qbsettings-none'          => 'Keen',
+'qbsettings-fixedleft'     => 'Links, fast',
+'qbsettings-fixedright'    => 'Rechts, fast',
+'qbsettings-floatingleft'  => 'Links, sweven',
+'qbsettings-floatingright' => 'Rechts, sweven',
+'changepassword'           => 'Passwoort ännern',
+'skin'                     => 'Utsehn vun de Steed',
+'math'                     => 'TeX',
+'dateformat'               => 'Datumsformat',
+'datetime'                 => 'Datum un Tiet',
+'math_failure'             => 'Parser-Fehler',
+'math_unknown_error'       => 'Unbekannten Fehler',
+'math_unknown_function'    => 'Unbekannte Funktschoon',
+'math_lexing_error'        => "'Lexing'-Fehler",
+'math_syntax_error'        => 'Syntaxfehler',
+'math_image_error'         => 'dat Konverteern no PNG hett kenen Spood.',
+'math_bad_tmpdir'          => 'Kann dat Temporärverteken för mathematsche Formeln nich anleggen oder beschrieven.',
+'math_bad_output'          => 'Kann dat Teelverteken för mathematsche Formeln nich anleggen oder beschrieven.',
+'math_notexvc'             => 'Dat texvc-Programm kann nich funnen warrn. Kiek ok math/README.',
+'prefs-personal'           => 'Brukerdaten',
+'prefs-rc'                 => 'Letzte Ännern un Wiesen vun kotte Sieten',
+'prefs-watchlist'          => 'Oppasslist',
+'prefs-misc'               => 'Verscheden Instellen',
+'saveprefs'                => 'Instellen spiekern',
+'resetprefs'               => 'Instellen trüchsetten',
+'oldpassword'              => 'Oolt Passwoort:',
+'newpassword'              => 'Nee Passwoort',
+'retypenew'                => 'Nieg Password (nochmal)',
+'textboxsize'              => 'Textfeld-Grött',
+'rows'                     => 'Regen',
+'columns'                  => 'Spalten',
+'searchresultshead'        => 'Söökresultaten',
+'resultsperpage'           => 'Treffer pro Siet',
+'contextlines'             => 'Lienen pro Treffer',
+'contextchars'             => 'Teken pro Lien',
+'stubthreshold'            => 'Kotte Sieten markeeren bet',
+'recentchangescount'       => 'Antall „Letzte Ännern“',
+'savedprefs'               => 'Dien Instellen sünd spiekert.',
+'timezonelegend'           => 'Tietrebeet',
+'timezonetext'             => 'Giff de Antall vun de Stünnen an, de twüschen dien Tiedrebeet un UTC liggen.',
+'localtime'                => 'Oortstied',
+'timezoneoffset'           => 'Ünnerscheed',
+'servertime'               => 'Aktuelle Tied op den Server',
+'guesstimezone'            => 'Ut den Browser övernehmen',
+'allowemail'               => 'Nettbreven vun annere Brukers annehmen',
+'defaultns'                => 'In disse Naamrüüm schall standardmatig söökt warrn:',
+'files'                    => 'Datein',
+
+# User rights
+'editusergroup'            => 'Brukergruppen bearbeiden',
+'userrights-editusergroup' => 'Brukergruppen ännern',
+'saveusergroups'           => 'Brukergruppen spiekern',
+
+# Groups
+'group'            => 'Grupp:',
+'group-bot'        => 'Bots',
+'group-bureaucrat' => 'Bürokraten',
+
+'group-bot-member'        => 'Bot',
+'group-bureaucrat-member' => 'Bürokraat',
+
+'grouppage-bot' => '{{ns:project}}:Bots',
+
+# User rights log
+'rightslog'  => 'Brukerrechten-Logbook',
+'rightsnone' => '(kene)',
+
+# Recent changes
+'nchanges'          => '$1 {{PLURAL:$1|Ännern|Ännern}}',
+'recentchanges'     => 'Niegest Ännern',
+'recentchangestext' => '
+Disse Siet warrt wiel dat Laden automatsch aktualiseert. Wiest warrn Sieten, de toletzt bearbeid worrn sünd, dorto de Tied un de Naam vun de Autor.',
+'rcnote'            => "Hier sünd de letzten '''$1''' Ännern vun de letzten {{PLURAL:$2|Dag|'''$2''' Daag}} (Stand $3). ('''N''' - Ne’e Sieden; '''L''' - Lütte Ännern)",
+'rcnotefrom'        => 'Dit sünd de Ännern siet <b>$2</b> (bet to <b>$1</b> wiest).',
+'rclistfrom'        => 'Wies niege Ännern siet $1',
+'rcshowhidebots'    => '$1 Bots',
+'rcshowhideliu'     => '$1 inloggte Brukers',
+'rcshowhideanons'   => '$1 anonyme Brukers',
+'rcshowhidepatr'    => '$1 nakekene Ännern',
+'rcshowhidemine'    => '$1 miene Ännern',
+'rclinks'           => "Wies de letzten '''$1''' Ännern vun de letzten '''$2''' Daag. ('''N''' - Ne’e Sieden; '''L''' - Lütte Ännern)<br />$3",
+'diff'              => 'Ünnerscheed',
+'hist'              => 'Versionen',
+'hide'              => 'Nich wiesen',
+'show'              => 'Wiesen',
+'minoreditletter'   => 'L',
+'newpageletter'     => 'N',
+'boteditletter'     => 'b',
+'sectionlink'       => '→',
+
+# Recent changes linked
+'recentchangeslinked' => 'Ännern an lenkte Sieden',
+
+# Upload
+'upload'             => 'Hoochladen',
+'uploadbtn'          => 'Datei hoochladen',
+'reupload'           => 'Nieg hoochladen',
+'reuploaddesc'       => 'Trüch to de Hoochladen-Siet.',
+'uploadnologin'      => 'Nich anmellt',
+'uploadnologintext'  => 'Du muttst [[Spezial:Userlogin|anmellt ween]] üm Datein hoochladen to könen.',
+'uploaderror'        => 'Fehler bi dat Hoochladen',
+'uploadtext'         => "
+Üm hoochladene Biller to söken un antokieken,
+geih to de [[Special:Imagelist|List vun hoochladene Biller]].
+
+Bruuk dat Formular, üm niege Biller hoochtoladen un disse in Sieten to bruken.
+In de mehrsten Browser warrt en „Durchsuchen“-Feld wiest, dat en Standard-Dateidialog apent.
+Wähl de Datei ut, de du hoochladen wullst. De Dateinaam warrt denn in dat Textfeld wiest.
+Bestätig dann den Copyright-Henwies.
+Toletzt muttst du den „Hoochladen“-Knopp klicken.
+Dat kann en Stoot duern, sünnerlich bi en langsamen Internet-Verbinnen.
+
+För Fotos is dat JPEG-Format, för Grafiken un Symbolen dat PNG-Format best.
+Üm en Bild in en Siet to bruken, schriev an Stell vun dat Bild
+'''[[Image:datei.jpg]]''' oder
+'''[[Image:datei.jpg|Beschrieven]]'''.
+
+Denk doran, dat, lieks as bi de annern Sieten, annere Bruker dien Datein löschen oder ännern könen.',
+'uploadlog'                => 'Datei-Logbook',
+'uploadlogpage'     => 'Datei-Logbook',
+'uploadlogpagetext' => 'Hier is de List vun de letzten hoochladenen Datein.
+Alle Tieden sünd UTC.",
+'uploadlog'          => 'Hoochlade-Logbook',
+'uploadlogpage'      => 'Hoochlade-Logbook',
+'uploadlogpagetext'  => 'Ünnen steiht de List vun de ne’esten hoochladenen Datein.',
+'filename'           => 'Dateinaam',
+'filedesc'           => 'Beschrieven',
+'filestatus'         => 'Copyright-Status',
+'filesource'         => 'Born',
+'uploadedfiles'      => 'Hoochladene Datein',
+'minlength'          => 'Bilddatein möten tominnst dree Bookstaven hebben.',
+'badfilename'        => 'De Bildnaam is na „$1“ ännert worrn.',
+'emptyfile'          => 'De hoochladene Datei is leddig. De Grund kann en Tippfehler in de Dateinaam ween. Kontrolleer, of du de Datei redig hoochladen wullst.',
+'fileexists'         => 'En Datei mit dissen Naam existeert al, prööv $1, wenn du di nich seker büst of du dat ännern wullst.',
+'successfulupload'   => 'Datei hoochladen hett Spood',
+'fileuploaded'       => 'Dat Hoochladen vun de Datei „$1“ hett Spood.
+Disse ($2) Link föhrt to de Bildsiet. Dor kann indregen warrn, woneem dat Bild kummt, welkeen dat wann mookt hett un wenn neudig, welkeen Copyright-Status dat Bild hett.',
+'uploadwarning'      => 'Wohrscho',
+'savefile'           => 'Datei spiekern',
+'uploadedimage'      => '„$1“ hoochladen',
+'uploaddisabled'     => 'Dat Hoochladen is deaktiveert.',
+'uploaddisabledtext' => 'Op dit Wiki is dat Hoochladen vun Datein utschalt.',
+'uploadcorrupt'      => 'De Datei is korrupt oder hett en falsch Ennen. Datei pröven un nieg hoochladen.',
+'uploadvirus'        => 'In de Datei stickt en Virus! Mehr: $1',
+'sourcefilename'     => 'Dateinaam op dien Reekner',
+'destfilename'       => 'Dateinaam, so as dat hier spiekert warrn schall',
+'watchthisupload'    => 'Op disse Siet oppassen',
+
+'upload-proto-error' => 'Verkehrt Protokoll',
+'upload-file-error'  => 'Internen Fehler',
+'upload-misc-error'  => 'Unbekannt Fehler bi dat Hoochladen',
+
+'nolicense' => 'nix utwählt',
+
+# Image list
+'imagelist'           => 'Billerlist',
+'imagelisttext'       => 'Hier is en List vun $1 Biller, sorteert $2.',
+'getimagelist'        => 'Billerlist laden',
+'ilsubmit'            => 'Söök',
+'showlast'            => 'Wies de letzten $1 Biller, sorteert $2.',
+'byname'              => 'na Naam',
+'bydate'              => 'na Datum',
+'bysize'              => 'na Grött',
+'imgdelete'           => 'Löschen',
+'imgdesc'             => 'Beschrieven',
+'imgfile'             => 'Datei',
+'imglegend'           => 'Legende: (Beschrieven) = Wies/Änner Bildbeschrieven.',
+'imghistory'          => 'Bild-Versionen',
+'revertimg'           => 'trüchsetten',
+'deleteimg'           => 'Löschen',
+'deleteimgcompletely' => 'Löschen',
+'imghistlegend'       => 'Legende: (cur) = Dit is dat aktuelle Bild, (Löschen) = lösch
+disse ole Version, (Trüchsetten) = bruuk weer disse ole Version.',
+'imagelinks'          => 'Bildverwiesen',
+'linkstoimage'        => 'Disse Sieden bruukt dit Bild:',
+'nolinkstoimage'      => 'Kene Siet bruukt dat Bild.',
+'sharedupload'        => 'Disse Datei is en Datei, de mööglicherwies ok vun annere Wikis bruukt warrt.',
+'noimage-linktext'    => 'Hoochladen',
+'imagelist_date'      => 'Datum',
+'imagelist_name'      => 'Naam',
+'imagelist_user'      => 'Bruker',
+'imagelist_size'      => 'Grött (Bytes)',
+
+# MIME search
+'mimetype' => 'MIME-Typ:',
+
+# Unwatched pages
+'unwatchedpages' => 'Sieden, de op kene Oppasslist staht',
+
+# Unused templates
+'unusedtemplates' => 'nich bruukte Vörlagen',
+
+# Statistics
+'statistics'    => 'Statistik',
+'sitestats'     => 'Sietenstatistik',
+'userstats'     => 'Brukerstatistik',
+'sitestatstext' => "Dat gifft allens tosamen {{PLURAL:$1|ene Siet|'''$1''' Sieden}} in de Datenbank.
+Dat slött Diskuschoonsieden, Sieden över {{SITENAME}}, bannig korte Sieden, Wiederleiden un annere Sieden in, de nich as richtige Sieden gellen köönt.
+Disse utnahmen, gifft dat {{PLURAL:$2|ene Siet, de as Artikel gellen kann|'''$2''' Sieden, de as Artikels gellen köönt}}.
+
+'''$8''' hoochladene {{PLURAL:$8|Datei|Datein}} gifft dat.
+
+De Lüüd hebbt {{PLURAL:$3|ene Siet|'''$3'''× Sieden}} opropen, un {{PLURAL:$4|ene Siet ännert|'''$4'''× Sieden ännert}}.
+Dat heet, jede Siet is '''$5''' Maal ännert un '''$6''' maal ankeken worrn.
+
+De List, mit de Opgaven, de de Software noch maken mutt, hett {{PLURAL:$7|een Indrag|'''$7''' Indrääg}}.",
+'userstatstext' => "Dat gifft {{PLURAL:$1|'''een''' anmellt Bruker|'''$1''' anmellt Brukers}}.
+Dorvun {{PLURAL:$2|hett '''een'''|hebbt '''$2'''}} {{PLURAL:$1||($4 %)}} $5-Rechten (kiek $3).",
+
+'disambiguations'     => 'Mehrdüdige Begrepen',
+'disambiguationspage' => "Op disse Siet schöölt all Vörlagen un Redirects na sone Vörlagen indragen warrn, de bi Begrepen staht, de mehrdüdig sünd un den Leser op de richtige Siet wiederwiest. Op Sieden mit disse Vörlagen schall keen Lenk wiesen. Lenken, de dor doch op wiest, warrt denn op de Siet [[Special:Disambiguations]] optellt.
+
+<small>Vun disse Siet warrt blots de Lenken na den Vörlagen-Naamruum utleest ('''<nowiki>[[</nowiki>{{ns:10}}<nowiki>:...]]</nowiki>''') un allens annere kann geern ännert warrn.</small>
+
+* [[{{ns:10}}:mehrdüdig Begreep]]",
+
+'doubleredirects'     => 'Dubbelte Wiederleiden',
+'doubleredirectstext' => '<b>Wohrscho:</b> Disse List kann „falsche Positive“ bargen.
+Dat passeert denn, wenn en Wiederleiden blangen de Wiederleiden-Verwies noch mehr Text mit annere Verwiesen hett.
+De schallen denn löscht warrn. Elk Reeg wiest de eerste un tweete Wiederleiden un de eerste Reeg Text ut de Siet,
+to den vun den tweeten Wiederleiden wiest warrt, un to den de eerste Wiederleiden mehrst wiesen schall.',
+
+'brokenredirects'     => 'Kaputte Wiederleiden',
+'brokenredirectstext' => 'Disse Wiederleiden wiesen to en Siet, de nich existeert',
+
+# Miscellaneous special pages
+'nbytes'                  => '$1 Bytes',
+'ncategories'             => '$1 {{PLURAL:$1|Kategorie|Kategorien}}',
+'nlinks'                  => '$1 Verwies',
+'nviews'                  => '$1 Affragen',
+'specialpage-empty'       => 'Disse Siet is leddig.',
+'lonelypages'             => 'Weetsieden',
+'uncategorizedpages'      => 'Sieden ahn Kategorie',
+'uncategorizedcategories' => 'Kategorien ahn Kategorie',
+'uncategorizedimages'     => 'Unkategoriseerte Biller',
+'unusedcategories'        => 'Kategorien ahn insorteerte Artikels oder Ünnerkategorien',
+'unusedimages'            => 'Weetbiller',
+'popularpages'            => 'Faken opropene Sieten',
+'wantedcategories'        => 'Kategorien, de veel bruukt warrt, aver noch keen Text hebbt (nich anleggt sünd)',
+'wantedpages'             => 'Wünschte Sieten',
+'mostlinked'              => 'Sieden, op de vele Lenken wiest',
+'mostcategories'          => 'Artikels mit vele Kategorien',
+'mostimages'              => 'Biller, de veel bruukt warrt',
+'allpages'                => 'Alle Sieden',
+'randompage'              => 'Tofällige Siet',
+'shortpages'              => 'Korte Sieden',
+'longpages'               => 'Lange Sieden',
+'deadendpages'            => 'Sackstraatsieten',
+'protectedpages'          => 'Schuulte Sieden',
+'protectedpagestext'      => 'Disse Sieden sünd vör dat Schuven oder Ännern schuult',
+'protectedpagesempty'     => 'No pages are currently protected',
+'listusers'               => 'Brukerlist',
+'specialpages'            => 'Sünnerliche Sieden',
+'spheading'               => 'Spezialsieten för alle Bruker',
+'rclsub'                  => '(op Artikel vun „$1“)',
+'newpages'                => 'Ne’e Sieden',
+'newpages-username'       => 'Brukernaam:',
+'ancientpages'            => 'Öllste Sieden',
+'intl'                    => 'Interwiki-Links',
+'move'                    => 'Schuven',
+'movethispage'            => 'Siet schuven',
+'unusedimagestext'        => 'Denk doran, dat annere Wikis mööglicherwies en poor vun disse Biller bruken.',
+
+# Book sources
+'booksources'      => 'Bookhannel',
+'booksources-isbn' => 'ISBN:',
+
+'categoriespagetext' => 'In dit Wiki gifft dat disse Kategorien:',
+'data'               => 'Daten',
+'groups'             => 'Brukergruppen',
+'isbn'               => 'ISBN',
+'alphaindexline'     => '$1 bet $2',
+
+# Special:Log
+'specialloguserlabel'  => 'Bruker:',
+'speciallogtitlelabel' => 'Titel:',
+'log'                  => 'Logböker',
+'alllogstext'          => 'Kombineerte Ansicht vun all Logböker bi {{SITENAME}}.
+Du kannst de List körter maken, wenn du den Logbook-Typ, den Brukernaam oder de Siet angiffst.',
+
+# Special:Allpages
+'nextpage'       => 'tokamen Siet ($1)',
+'allpagesfrom'   => 'Sieden wiesen, de mit disse Bookstaven anfangt:',
+'allarticles'    => 'Alle Artikels',
+'allinnamespace' => 'Alle Sieten ($1 Naamruum)',
+'allpagesprev'   => 'vörig',
+'allpagesnext'   => 'tokamen',
+'allpagessubmit' => 'Los',
+
+# Special:Listusers
+'listusersfrom' => 'Wies de Brukers, de anfangt mit:',
+
+# E-mail user
+'mailnologin'     => 'Du büst nich anmellt.',
+'mailnologintext' => 'Du muttst [[Spezial:Userlogin|anmellt ween]] un en güllige E-Mail-Adress hebben, dormit du en annern Bruker en E-Mail sennen kannst.',
+'emailuser'       => 'E-Mail an dissen Bruker',
+'emailpage'       => 'E-Mail an Bruker',
+'emailpagetext'   => 'Wenn disse Bruker en güllige E-Mail-Adress angeven hett, kannst du em mit den nerrn stahn Formular en E-Mail sennen. As Afsenner warrt de E-Mail-Adress ut dien Instellen indregen, dormit de Bruker di antern kann.',
+'usermailererror' => 'Dat Mail-Objekt hett en Fehler trüchgeven:',
+'defemailsubject' => '{{SITENAME}} E-Mail',
+'noemailtitle'    => 'Kene E-Mail-Adress',
+'noemailtext'     => 'Disse Bruker hett kene güllige E-Mail-Adress angeven, oder will kene E-Mail vun annere Bruker sennt kriegen.',
+'emailfrom'       => 'Vun',
+'emailto'         => 'An',
+'emailsubject'    => 'Bedrap',
+'emailmessage'    => 'Noricht',
+'emailsend'       => 'Sennen',
+'emailccsubject'  => 'Kopie vun diene Naricht an $1: $2',
+'emailsent'       => 'E-Mail afsennt',
+'emailsenttext'   => 'Dien E-Mail is afsennt worrn.',
+
+# Watchlist
+'watchlist'            => 'Mien Oppasslist',
+'mywatchlist'            => 'Mien Oppasslist',
+'nowatchlist'          => 'Du hest kene Indreeg op dien Oppasslist.',
+'clearwatchlist'       => 'Oppasslist lerrig maken',
+'watchlistcleartext'   => 'Würklich rutnehmen?',
+'watchlistclearbutton' => 'Oppasslist leddig maken',
+'watchlistcleardone'   => 'Diene Oppasslist is nu leddig maakt. {{PLURAL:$1|Ene Siet|$1 Sieden}} rutnahmen.',
+'watchnologin'         => 'Du büst nich anmellt',
+'watchnologintext'     => 'Du muttst [[Spezial:Userlogin|anmellt]] ween, wenn du dien Oppasslist ännern willst.',
+'addedwatch'           => 'To de Oppasslist toföögt',
+'addedwatchtext'       => 'De Siet „$1“ is to diene [[Special:Watchlist|Oppasslist]] tofögt worrn.
+Ännern, de in Tokumst an disse Siet un an de tohörige Diskuschoonssiet maakt warrt, sünd dor op list un de Siet is op de [[Special:Recentchanges|List vun de letzten Ännern]] fett markt. Wenn du de Siet nich mehr op diene Oppasslist hebben willst, klick op „Nich mehr oppassen“ in de Linklist.',
+'removedwatch'         => 'De Siet is nich mehr op de Oppasslist',
+'removedwatchtext'     => 'De Siet „$1“ is nich mehr op de Oppasslist.',
+'watch'                => 'Oppassen',
+'watchthispage'        => 'Op disse Siet oppassen',
+'unwatch'              => 'nich mehr oppassen',
+'unwatchthispage'      => 'Nich mehr oppassen',
+'notanarticle'         => 'Keen Artikel',
+'watchnochange'        => 'Kene Siet, op de du oppasst, is in den wiesten Tiedruum bearbeid worrn.',
+'watchdetails'         => '($1 Sieten sünd op de Oppasslist (ahn Diskuschoonssieten);
+$2 Sieten werrn in de instellte Tied bearbeid;
+$3... [$4 komplette List wiesen un bearbeiden].)',
+'watchmethod-recent'   => 'letzte Ännern no Oppasslist pröven',
+'watchmethod-list'     => 'Oppasslist no letzte Ännern pröven',
+'removechecked'        => 'Markeerte Indreeg löschen',
+'watchlistcontains'    => 'Dien Oppasslist bargt $1 Sieten.',
+'watcheditlist'        => "Hier is ene alphabetsche List vun de Sieten op de du oppasst. Markeer de Sieten, de vun de Oppasslist löscht warrn schallt un klick den 'markeerte Indreeg löschen'-Knoop.",
+'removingchecked'      => 'Indreeg warrt vun de Oppasslist löscht...',
+'couldntremove'        => "De Indrag '$1' kann nich löscht warrn...",
+'iteminvalidname'      => "Problem mit den Indrag '$1', ungülligen Naam...",
+'wlnote'               => "Ünnen staht de letzten Ännern vun de {{PLURAL:$2|letzte Stünn|letzten '''$2''' Stünnen}}.",
+'wlshowlast'           => 'Wies de letzten $1 Stünnen $2 Daag $3',
+'wlsaved'              => 'Dit is en spiekerte Version vun dien Oppasslist.',
+'wldone'               => 'Trech.',
+
+'enotif_newpagetext' => 'Dit is en ne’e Siet.',
+
+# Delete/protect/revert
+'deletepage'           => 'Siet löschen',
+'confirm'              => 'Bestätigen',
+'excontent'            => 'Olen Inholt: ‚$1‘',
+'exbeforeblank'        => 'Inholt vör dat Leddigmaken vun de Siet: ‚$1‘',
+'exblank'              => 'Siet weer leddig',
+'confirmdelete'        => 'Löschen bestätigen',
+'deletesub'            => '(Lösche „$1“)',
+'historywarning'       => 'Wohrscho: De Siet, de du versöökst to löschen, hett en Versionshistorie:',
+'confirmdeletetext'    => 'Du büst dorbi, en Siet oder en Bild un alle ölleren Versionen duersam ut de Datenbank to löschen.
+Segg to, dat du över de Folgen Bescheed weetst un dat du in Övereenstimmen mit uns [[Special:Leidlienen|Leidlienen]] hannelst.',
+'actioncomplete'       => 'Aktschoon beennt',
+'deletedtext'          => '„$1“ is löscht.
+In $2 kannst du en List vun de letzten Löschen finnen.',
+'deletedarticle'       => '„$1“ löscht',
+'dellogpage'           => 'Lösch-Logbook',
+'dellogpagetext'       => 'Hier is en List vun de letzten Löschen (UTC).
+
+<ul>
+
+</ul>',
+'deletionlog'          => 'Lösch-Logbook',
+'reverted'             => 'Op en ole Version trüchsett',
+'deletecomment'        => 'Grund för dat Löschen',
+'imagereverted'        => 'Op en ole Version trüchsett.',
+'rollback'             => 'Trüchnahm vun de Ännern',
+'rollback_short'       => 'Trüchnehmen',
+'rollbacklink'         => 'Trüchnehmen',
+'rollbackfailed'       => 'Trüchnahm hett kenen Spood',
+'cantrollback'         => 'De Ännern kann nich trüchnahmen warrn; de letzte Autor is de eenzige.',
+'alreadyrolled'        => 'Dat Trüchnehmen vun de Ännern an de Siet [[:$1]] vun [[User:$2|$2]]
+([[User_talk:$2|Diskuschoonssiet]]) is nich mööglich, vun wegen dat dor en annere Ännern oder Trüchnahm ween is.
+
+De letzte Ännern is vun [[User:$3|$3]]
+([[User talk:$3|Diskuschoon]])',
+'editcomment'          => 'De Ännerkommentar weer: <i>$1</i>.', # only shown if there is an edit comment
+'revertpage'           => 'Ännern vun [[Special:Contributions/$2|$2]] rut un de Version vun [[{{ns:user}}:$1]] wedderhaalt',
+'protectlogpage'       => 'Sietenschuul-Logbook',
+'protectlogtext'       => 'Dit is en List vun de blockten Sieten. Kiek [[Special:Protectedpages|Schulte Sieten]] för mehr Informatschonen.',
+'protectedarticle'     => 'Siet $1 schuult',
+'unprotectedarticle'   => 'Siet $1 freegeven',
+'protectsub'           => '(Sparren vun „$1“)',
+'confirmprotecttext'   => 'Schall disse Siet redig schuult warrn?',
+'confirmprotect'       => 'Sparr bestätigen',
+'protectmoveonly'      => 'Blots dat Schuven sparren',
+'protectcomment'       => 'Grund för de Sparr',
+'unprotectsub'         => '(Beennen vun de Sparr vun „$1“)',
+'confirmunprotecttext' => 'Schall de Sparr vun disse Siet redig beennt warrn?',
+'confirmunprotect'     => 'De Sparr beennen',
+'unprotectcomment'     => 'Grund för dat Beennen vun de Sparr',
+
+# Undelete
+'undelete'          => 'Löschte Siet weerholen',
+'undeletepage'      => 'Löschte Sieten weerholen',
+'undeletepagetext'  => 'Disse Sieten sünd löscht worrn, aver jümmer noch
+spiekert un könnt weerholt warrn.',
+'undeleterevisions' => '$1 Versionen archiveert',
+'undeletehistory'   => 'Wenn du disse Siet weerholst, warrt ok alle olen Versionen weerholt. Wenn siet dat Löschen en nieg Siet mit lieken
+Naam schreven worrn is, warrt de weerholten Versionen as ole Versionen vun disse Siet wiest.',
+'undeletebtn'       => 'Weerholen!',
+'undeletedarticle'  => '„$1“ weerholt',
+
+# Namespace form on various pages
+'namespace' => 'Naamruum:',
+
+# Contributions
+'contributions' => 'Bidrääg vun den Bruker',
+'mycontris'     => 'Mien Arbeid',
+'contribsub2'    => 'För $1 ($2)',
+'nocontribs'    => 'Kene Ännern för disse Kriterien funnen.',
+'ucnote'        => 'Dit sünd de letzten <b>$1</b> Bidreeg vun de Bruker in de letzten <b>$2</b> Doog.',
+'uclinks'       => 'Wies de letzten $1 Bidreeg; wies de letzten $2 Daag.',
+'uctop'         => ' (aktuell)',
+
+'sp-contributions-blocklog' => 'Sparr-Logbook',
+
+# What links here
+'whatlinkshere' => 'Wat wiest na disse Siet hen',
+'notargettitle' => 'Kene Siet angeven',
+'notargettext'  => 'Du hest nich angeven, op welke Siet du disse Funktschoon anwennen willst.',
+'linklistsub'   => '(List vun de Verwiesen)',
+'linkshere'     => 'Disse Sieden wiest hierher:',
+'nolinkshere'   => 'Kene Siet wiest hierher.',
+'isredirect'    => 'Wiederleiden',
+
+# Block/unblock
+'blockip'                  => 'IP-Adress blocken',
+'blockiptext'              => 'Bruuk dat Formular, üm en IP-Adress to blocken.
+Dit schall blots maakt warrn, üm Vandalismus to vermasseln, aver jümmer in Övereenstimmen mit uns [[Project:Leidlienen|Leidlienen]].
+Ok den Grund för dat Blocken indregen.',
+'ipaddress'                => 'IP-Adress',
+'ipbexpiry'                => 'Aflöptied',
+'ipbreason'                => 'Grund',
+'ipbsubmit'                => 'Adress blocken',
+'badipaddress'             => 'De IP-Adress hett en falsch Format.',
+'blockipsuccesssub'        => 'Blocken hett Spood',
+'blockipsuccesstext'       => 'De IP-Adress „$1“ is nu blockt.
+
+<br />Op de [[Special:Ipblocklist|IP-Blocklist]] is en List vun alle Blocks to finnen.',
+'unblockip'                => 'IP-Adress freegeven',
+'unblockiptext'            => 'Bruuk dat Formular, üm en blockte IP-Adress freetogeven.',
+'ipusubmit'                => 'Disse Adress freegeven',
+'ipblocklist'              => 'List vun blockte IP-Adressen',
+'blocklistline'            => '$1, $2 hett $3 blockt ($4)',
+'blocklink'                => 'blocken',
+'unblocklink'              => 'freegeven',
+'contribslink'             => 'Bidrääg',
+'autoblocker'              => 'Automatisch Block, vun wegen dat du en IP-Adress bruukst mit „$1“. Grund: „$2“.',
+'blocklogpage'             => 'Brukerblock-Logbook',
+'blocklogentry'            => 'block [[User:$1]] - ([[Special:Contributions/$1|Bidreeg]]) för en Tiedruum vun: $2',
+'blocklogtext'             => 'Dit is en Logbook över Blocks un Freegaven vun Brukern. Automatisch blockte IP-Adressen sünd nich opföhrt.
+Kiek [[Special:Ipblocklist|IP-Blocklist]] för en List vun den blockten Brukern.',
+'unblocklogentry'          => 'Block vun [[User:$1]] ophoven',
+'block-log-flags-anononly' => 'blots anonyme Brukers',
+'range_block_disabled'     => 'De Mööglichkeit, ganze Adressrüüm to sparren, is nich aktiveert.',
+'ipb_expiry_invalid'       => 'De angeven Aflöptied is ungüllig.',
+'ipb_already_blocked'      => '„$1“ is al blockt',
+'ip_range_invalid'         => 'Ungüllig IP-Addressrebeet.',
+'proxyblocker'             => 'Proxyblocker',
+'proxyblockreason'         => 'Dien IP-Adress is blockt, vun wegen dat se en apenen Proxy is.
+Kontakteer dien Provider oder diene Systemtechnik un informeer se över dat möögliche Sekerheitsproblem.',
+'proxyblocksuccess'        => 'Fardig.',
+
+# Developer tools
+'lockdb'              => 'Datenbank sparren',
+'unlockdb'            => 'Datenbank freegeven',
+'lockdbtext'          => 'Mit de Sparr vun de Datenbank warrt alle Ännern an de Brukerinstellen, Oppasslisten, Sieten un so wieder verhinnert.
+Schall de Datenbank redig sparrt warrn?',
+'unlockdbtext'        => 'Dat Beennen vun de Datenbank-Sparr maakt alle Ännern weer mööglich.
+Schall de Datenbank-Sparr redig beennt warrn?',
+'lockconfirm'         => 'Ja, ik will de Datenbank sparren.',
+'unlockconfirm'       => 'Ja, ik will de Datenbank freegeven.',
+'lockbtn'             => 'Datenbank sparren',
+'unlockbtn'           => 'Datenbank freegeven',
+'locknoconfirm'       => 'Du hest dat Bestätigungsfeld nich markeert.',
+'lockdbsuccesssub'    => 'Datenbanksparr hett Spood',
+'unlockdbsuccesssub'  => 'Datenbankfreegaav hett Spood',
+'lockdbsuccesstext'   => 'De {{SITENAME}}-Datenbank is sparrt.
+<br />Du muttst de Datenbank weer freegeven, wenn de Pleegarbeiden beennt sünd.',
+'unlockdbsuccesstext' => 'De {{SITENAME}}-Datenbank is weer freegeven.',
+
+# Move page
+'movepage'                => 'Siet schuven',
+'movepagetext'            => 'Mit dissen Formular kannst du en Siet ümnömen, tosamen mit allen Versionen. De ole Titel warrt to den niegen wiederleid. Verwies op den olen Titel warrn nich ännert un de Diskuschoonssiet warrt ok nich mitschuven.',
+'movepagetalktext'        => "De tohören Diskuschoonssiet warrt, wenn een dor is, mitschuuvt, '''mit disse Utnahmen:''
+* Du schuuvst de Siet in en annern Naamruum oder
+* dat existeert al en Diskuschoonssiet mit dissen Naam, oder
+* du wählst de nerrn stahn Optschoon af
+
+In disse Fäll muttst du de Siet, wenn du dat wullst, vun Hand schuven.",
+'movearticle'             => 'Siet schuven',
+'movenologin'             => 'Du büst nich anmellt',
+'movenologintext'         => 'Du muttst en registreert Bruker un
+[[Special:Userlogin|anmellt]] ween,
+üm en Siet to schuven.',
+'newtitle'                => 'To niegen Titel',
+'movepagebtn'             => 'Siet schuven',
+'pagemovedsub'            => 'Schuven hett Spood',
+'pagemovedtext'           => 'Siet „[[$1]]“ no „[[$2]]“ schuuvt.',
+'articleexists'           => 'Ünner dissen Naam existeert al en Siet.
+Bitte wähl en annern Naam.',
+'talkexists'              => 'Dat Schuven vun de Siet sülvst hett Spood, aver dat Schuven vun de
+Diskuschoonssiet nich, vun wegen dat dor al en Siet mit dissen Titel existeert. De Inholt muss vun Hand anpasst warrn.',
+'movedto'                 => 'schaven na',
+'movetalk'                => 'De Diskuschoonssiet ok schuven, wenn mööglich.',
+'talkpagemoved'           => 'De Diskuschoonssiet is ok schuven worrn.',
+'talkpagenotmoved'        => 'De Diskuschoonssiet is <strong>nich</strong> schuven worrn.',
+'1movedto2'               => '[[$1]] is nu na [[$2]] verschaven.',
+'1movedto2_redir'         => '[[$1]] is nu na [[$2]] verschaven un hett den olen Redirect överschreven.',
+'movelogpage'             => 'Schuuv-Logbook',
+'movereason'              => 'Grund',
+'delete_and_move_confirm' => 'Jo, de Siet wegsmieten',
+
+# Export
+'export'        => 'Sieden exporteren',
+'exporttext'    => 'Du kannst de Text un de Bearbeidenshistorie vun een oder mehr Sieten no XML exporteern. Dat Resultat kann in en annern Wiki mit Mediawiki-Software inspeelt warrn, bearbeid oder archiveert warrn.',
+'exportcuronly' => 'Blots de aktuelle Version vun de Siet exporteern',
+
+# Namespace 8 related
+'allmessages'               => 'Alle Systemnarichten',
+'allmessagesname'           => 'Naam',
+'allmessagesdefault'        => 'Standardtext',
+'allmessagescurrent'        => 'Text nu',
+'allmessagestext'           => 'Dit is de List vun all de Systemnarichten, de dat in den Mediawiki-Naamruum gifft.',
+'allmessagesnotsupportedUI' => 'Dien aktuelle Snittstellenspraak <b>$1</b> warrt vun special:Allmessages op disse Steed nich ünnerstütt.',
+'allmessagesnotsupportedDB' => 'special:Allmessages is nich ünnerstütt, vun wegen dat wgUseDatabaseMessages utstellt is.',
+
+# Thumbnails
+'thumbnail-more'  => 'grötter maken',
+'missingimage'    => '<b>Bild fehlt</b><br /><i>$1</i>',
+'filemissing'     => 'Datei fehlt',
+'thumbnail_error' => 'Fehler bi dat Maken vun’t Duumnagel-Bild: $1',
+
+# Special:Import
+'import'                => 'Import vun Sieden',
+'importtext'            => 'Exporteer de Siet vun dat Utgangswiki mit Special:Export un laad de Datei denn över disse Siet weer hooch.',
+'importstart'           => 'Sieden warrt rinhaalt...',
+'importnopages'         => 'Gifft kene Sieden to’n Rinhalen.',
+'importfailed'          => 'Import hett kenen Spood: $1',
+'importcantopen'        => 'Kunn de Import-Datei nich apen maken',
+'importnotext'          => 'Leddig oder keen Text',
+'importsuccess'         => 'Import hett Spood!',
+'importhistoryconflict' => 'Dor sünd al öllere Versionen, de mit dissen kollideert. (Mööglicherwies is de Siet al vörher importeert worrn)',
+'importnofile'          => 'Kene Import-Datei hoochladen.',
+'importuploaderror'     => 'Hoochladen vun de Import-Datei wull nich klappen; kann angahn de Datei is grötter as de maximale Dateigrött för’t Hoochladen.',
+
+# Import log
+'importlogpage' => 'Import-Logbook',
+
+# Tooltip help for the actions
+'tooltip-pt-userpage'             => 'Mien Brukersiet',
+'tooltip-pt-anonuserpage'         => 'De Brukersiet för de IP-Adress ünner de du schriffst',
+'tooltip-pt-mytalk'               => 'Mien Diskuschoonssiet',
+'tooltip-pt-anontalk'             => 'Diskuschoon över Ännern vun disse IP-Adress',
+'tooltip-pt-preferences'          => 'Mien Instellen',
+'tooltip-pt-watchlist'            => 'Mien Oppasslist',
+'tooltip-pt-mycontris'            => 'List vun mien Bidreeg',
+'tooltip-pt-login'                => 'Du kannst di geern anmellen, dat is aver nich neudig, üm Sieten to bearbeiden.',
+'tooltip-pt-anonlogin'            => 'Du kannst di geern anmellen, dat is aver nich neudig, üm Sieten to bearbeiden.',
+'tooltip-pt-logout'               => 'Afmellen',
+'tooltip-ca-talk'                 => 'Diskuschoon över disse Siet',
+'tooltip-ca-edit'                 => 'Du kannst disse Siet ännern. Bruuk dat vör dat Spiekern.',
+'tooltip-ca-addsection'           => 'En Kommentar to disse Diskuschoonssiet hentofögen.',
+'tooltip-ca-viewsource'           => 'Disse Siet is schuult. Du kannst den Borntext ankieken.',
+'tooltip-ca-history'              => 'Historie vun disse Siet.',
+'tooltip-ca-protect'              => 'Disse Siet schulen',
+'tooltip-ca-delete'               => 'Disse Siet löschen',
+'tooltip-ca-undelete'             => 'Weerholen vun de Siet, so as se vör dat löschen ween is',
+'tooltip-ca-move'                 => 'Disse Siet schuven',
+'tooltip-ca-watch'                => 'Disse Siet to de Oppasslist hentofögen',
+'tooltip-ca-unwatch'              => 'Disse Siet vun de Oppasslist löschen',
+'tooltip-search'                  => 'Söken in dit Wiki',
+'tooltip-p-logo'                  => 'Hööftsiet',
+'tooltip-n-mainpage'              => 'Besöök de Hööftsiet',
+'tooltip-n-portal'                => 'över dat Projekt, wat du doon kannst, woans du de Saken finnen kannst',
+'tooltip-n-currentevents'         => 'Achtergrünn to aktuellen Schehn finnen',
+'tooltip-n-recentchanges'         => 'List vun de letzten Ännern in dissen Wiki.',
+'tooltip-n-randompage'            => 'Tofällige Siet',
+'tooltip-n-help'                  => 'Hier kriegst du Hülp.',
+'tooltip-n-sitesupport'           => 'Gaven',
+'tooltip-t-whatlinkshere'         => 'Wat wiest hierher',
+'tooltip-t-recentchangeslinked'   => 'Verlinkte Sieten',
+'tooltip-feed-rss'                => 'RSS-Feed för disse Siet',
+'tooltip-feed-atom'               => 'Atom-Feed för disse Siet',
+'tooltip-t-contributions'         => 'List vun de Bidreeg vun dissen Bruker',
+'tooltip-t-emailuser'             => 'En E-Mail an dissen Bruker sennen',
+'tooltip-t-upload'                => 'Biller oder Mediendatein hoochladen',
+'tooltip-t-specialpages'          => 'List vun alle Spezialsieten',
+'tooltip-ca-nstab-main'           => 'Siet ankieken',
+'tooltip-ca-nstab-user'           => 'Brukersiet ankieken',
+'tooltip-ca-nstab-media'          => 'Mediensiet ankieken',
+'tooltip-ca-nstab-special'        => 'Dit is en Spezialsiet, du kannst disse Siet nich ännern.',
+'tooltip-ca-nstab-project'        => 'Portalsiet ankieken',
+'tooltip-ca-nstab-image'          => 'Bildsiet ankieken',
+'tooltip-ca-nstab-mediawiki'      => 'Systemnorichten ankieken',
+'tooltip-ca-nstab-template'       => 'Vörlaag ankieken',
+'tooltip-ca-nstab-help'           => 'Hülpsiet ankieken',
+'tooltip-ca-nstab-category'       => 'Kategoriesiet ankieken',
+'tooltip-minoredit'               => 'Dit as en lütt Ännern markeern',
+'tooltip-save'                    => 'Sekern, wat du ännert hest',
+'tooltip-preview'                 => 'Vörschau för dien Ännern, bruuk dat vör dat Spiekern.',
+'tooltip-diff'                    => 'Den Ünnerscheed to vörher ankieken.',
+'tooltip-compareselectedversions' => 'De Ünnerscheed twüschen de twee wählten Versionen vun disse Siet ankieken.',
+'tooltip-watch'                   => 'Op disse Siet oppassen.',
+'tooltip-recreate'                => 'Siet wedder nee anleggen, ok wenn se wegsmeten worrn is',
+
+# Stylesheets
+'monobook.css' => '/* disse Datei editeern üm den Monobook-Skin för de ganze Siet antopassen */',
+
+# Metadata
+'nodublincore'      => 'Dublin-Core-RDF-Metadaten sünd för dissen Server nich aktiveert.',
+'nocreativecommons' => 'Creative-Commons-RDF-Metadaten sünd för dissen Server nich aktiveert.',
+'notacceptable'     => 'Dat Wiki-Server kann kene Daten in enen Format levern, dat dien Klient lesen kann.',
+
+# Attribution
+'anonymous'        => 'Anonyme Bruker vun {{SITENAME}}',
+'siteuser'         => '{{SITENAME}}-Bruker $1',
+'lastmodifiedatby' => 'Disse Siet weer dat letzte Maal $2, $1 vun $3 ännert.', # $1 date, $2 time, $3 user
+'and'              => 'un',
+'othercontribs'    => 'Grünnt op Arbeid vun $1.',
+'others'           => 'annere',
+'siteusers'        => '{{SITENAME}}-Bruker $1',
+'creditspage'      => 'Sieten-Autoren',
+'nocredits'        => 'Dor is keen Autorenlist för disse Siet verfögbor.',
+
+# Spam protection
+'spamprotectiontitle'    => 'Spamschild',
+'spamprotectiontext'     => 'De Siet, de du spiekern wullst, weer vun de Spamschild blockt. Dat kann vun en Link to en externe Siet kamen.',
+'spamprotectionmatch'    => 'Dit Text hett den Spamschild utlöst: $1',
+'subcategorycount'       => 'Disse Kategorie hett $1 Ünnerkategorien.',
+'categoryarticlecount'   => 'To disse Kategorie höört {{PLURAL:$1|ene Siet|$1 Sieden}} to.',
+'listingcontinuesabbrev' => ' wieder',
+
+# Info page
+'infosubtitle'   => 'Informatschonen för de Siet',
+'numedits'       => 'Antall vun Ännern (Siet): $1',
+'numtalkedits'   => 'Antall vun Ännern (Diskuschoonssiet): $1',
+'numwatchers'    => 'Antall vun Oppassers: $1',
+'numauthors'     => 'Antall vun verschedene Autoren (Siet): $1',
+'numtalkauthors' => 'Antall vun verschedene Autoren (Diskuschoonssiet): $1',
+
+# Math options
+'mw_math_png'    => 'Jümmer as PNG dorstellen',
+'mw_math_simple' => 'Eenfach TeX as HTML dorstellen, sünst PNG',
+'mw_math_html'   => 'Wenn mööglich as HTML dorstellen, sünst PNG',
+'mw_math_source' => 'As TeX laten (för Textbrowser)',
+'mw_math_modern' => 'Anratenswert för moderne Browser',
+'mw_math_mathml' => 'MathML (experimentell)',
+
+# Patrolling
+'markaspatrolleddiff'                 => 'As nakeken marken',
+'markaspatrolledtext'                 => 'Disse Siet as nakeken marken',
+'markedaspatrolled'                   => 'As nakeken marken',
+'markedaspatrolledtext'               => 'Disse Version is as nakeken markt.',
+'rcpatroldisabled'                    => 'Nakieken vun Letzte Ännern nich anstellt',
+'rcpatroldisabledtext'                => 'Dat Nakieken vun de Letzten Ännern is in’n Momang nich anstellt.',
+'markedaspatrollederror'              => 'As nakeken marken klappt nich',
+'markedaspatrollederrortext'          => 'Du musst ene Version angeven, dat du de as nakeken marken kannst.',
+'markedaspatrollederror-noautopatrol' => 'Du kannst de Saken, de du sülvst ännert hest, nich as nakeken marken.',
+
+# Patrol log
+'patrol-log-page' => 'Nakiek-Logbook',
+'patrol-log-line' => '$1 vun $2 as nakeken markt $3',
+'patrol-log-auto' => '(automaatsch)',
+'patrol-log-diff' => 'r$1',
+
+# Image deletion
+'deletedrevision' => 'Löschte ole Version $1.',
+
+# Browsing diffs
+'previousdiff' => '← Gah to den vörigen Ünnerscheed',
+'nextdiff'     => 'Gah to den tokamen Ünnerscheed →',
+
+# Media information
+'imagemaxsize'         => 'Biller op de Bildbeschrievensiet begrenzen op:',
+'thumbsize'            => 'Grött vun dat Duumnagel-Bild:',
+'file-info'            => '(Grött: $1, MIME-Typ: $2)',
+'file-info-size'       => '($1 × $2 Pixel, Grött: $3, MIME-Typ: $4)',
+'file-nohires'         => '<small>Gifft dat Bild nich grötter.</small>',
+'file-svg'             => '<small>Dit is en gröttenännerbor Vektorbild (SVG). De vörinstellte Grött is: $1 × $2 Pixels.</small>',
+'show-big-image'       => 'Dat Bild wat grötter',
+'show-big-image-thumb' => '<small>Grött vun disse Vörschau: $1 × $2 Pixels</small>',
+
+'newimages'    => 'Ne’e Biller',
+'showhidebots' => '($1 Bots)',
+'noimages'     => 'Kene Biller.',
+
+'passwordtooshort' => 'Dat Passwoort is to kort. Dat schall woll beter $1 Teken lang oder noch länger wesen.',
+
+# EXIF tags
+'exif-imagewidth'          => 'Breed',
+'exif-imagelength'         => 'Hööchd',
+'exif-orientation'         => 'Utrichtung',
+'exif-model'               => 'Kameramodell',
+'exif-software'            => 'bruukte Software',
+'exif-artist'              => 'Autor',
+'exif-exifversion'         => 'Exif-Version',
+'exif-colorspace'          => 'Farvruum',
+'exif-exposuretime-format' => '$1 Sek. ($2)',
+'exif-fnumber'             => 'F-Nummer',
+'exif-flash'               => 'Blitz',
+'exif-focallength-format'  => '$1 mm',
+'exif-whitebalance'        => 'Wittutgliek',
+'exif-contrast'            => 'Kontrast',
+'exif-gpslatitude'         => 'Breed',
+'exif-gpslongitude'        => 'Läng',
+'exif-gpsaltitude'         => 'Hööch',
+'exif-gpsspeedref'         => 'Tempo-Eenheit',
+
+# EXIF attributes
+'exif-compression-6' => 'JPEG',
+
+'exif-photometricinterpretation-2' => 'RGB',
+'exif-photometricinterpretation-6' => 'YCbCr',
+
+'exif-orientation-1' => 'Normal', # 0th row: top; 0th column: left
+'exif-orientation-2' => 'waagrecht kippt', # 0th row: top; 0th column: right
+'exif-orientation-3' => '180° dreiht', # 0th row: bottom; 0th column: right
+'exif-orientation-4' => 'Vertikal kippt', # 0th row: bottom; 0th column: left
+'exif-orientation-5' => '90° gegen de Klock dreiht un vertikal kippt', # 0th row: left; 0th column: top
+'exif-orientation-6' => '90° mit de Klock dreiht', # 0th row: right; 0th column: top
+'exif-orientation-7' => '90° mit de Klock dreiht un vertikal kippt', # 0th row: right; 0th column: bottom
+'exif-orientation-8' => '90° gegen de Klock dreiht', # 0th row: left; 0th column: bottom
+
+'exif-xyresolution-i' => '$1 dpi',
+'exif-xyresolution-c' => '$1 dpc',
+
+'exif-colorspace-1'      => 'sRGB',
+'exif-colorspace-ffff.h' => 'FFFF.H',
+
+'exif-componentsconfiguration-0' => 'gifft dat nich',
+'exif-componentsconfiguration-1' => 'Y',
+'exif-componentsconfiguration-2' => 'Cb',
+'exif-componentsconfiguration-3' => 'Cr',
+'exif-componentsconfiguration-4' => 'R',
+'exif-componentsconfiguration-5' => 'G',
+'exif-componentsconfiguration-6' => 'B',
+
+'exif-subjectdistance-value' => '$1 Meter',
+
+'exif-lightsource-0'  => 'unbekannt',
+'exif-lightsource-1'  => 'Daglicht',
+'exif-lightsource-4'  => 'Blitz',
+'exif-lightsource-9'  => 'Good Weder',
+'exif-lightsource-11' => 'Schatten',
+
+'exif-whitebalance-0' => 'Automaatsch Wittutgliek',
+'exif-whitebalance-1' => 'Wittutgliek vun Hand',
+
+'exif-scenecapturetype-0' => 'Standard',
+'exif-scenecapturetype-1' => 'Landschop',
+'exif-scenecapturetype-2' => 'Porträt',
+'exif-scenecapturetype-3' => 'Nacht',
+
+'exif-contrast-0' => 'Normal',
+'exif-contrast-1' => 'Wiek',
+'exif-contrast-2' => 'Hart',
+
+'exif-sharpness-0' => 'Normal',
+'exif-sharpness-1' => 'Wiek',
+'exif-sharpness-2' => 'Hart',
+
+'exif-subjectdistancerange-0' => 'unbekannt',
+'exif-subjectdistancerange-1' => 'Makro',
+'exif-subjectdistancerange-2' => 'Nahopnahm',
+'exif-subjectdistancerange-3' => 'Feernopnahm',
+
+# Pseudotags used for GPSLatitudeRef and GPSDestLatitudeRef
+'exif-gpslatitude-n' => 'Breed Noord',
+'exif-gpslatitude-s' => 'Breed Süüd',
+
+# Pseudotags used for GPSLongitudeRef and GPSDestLongitudeRef
+'exif-gpslongitude-e' => 'Läng Oost',
+'exif-gpslongitude-w' => 'Läng West',
+
+# Pseudotags used for GPSSpeedRef and GPSDestDistanceRef
+'exif-gpsspeed-k' => 'Kilometers in’e Stünn',
+'exif-gpsspeed-m' => 'Mielen in’e Stünn',
+'exif-gpsspeed-n' => 'Knoten',
+
+# E-mail address confirmation
+'confirmemail'            => 'Nettbreefadress bestätigen',
+'confirmemail_noemail'    => 'Du hest kene bestätigte Nettbreefadress in diene [[Special:Preferences|Instellen]] angeven.',
+'confirmemail_text'       => 'Du musst diene Nettbreefadress bestätigen, ehrder du de Nettbreeffunkschonen bruken kannst. Klick op den Knopp wieder ünnen, dat die en Bestätigungskood schickt warrt.',
+'confirmemail_send'       => 'Bestätigungskood schicken.',
+'confirmemail_sent'       => 'Bestätigungsnettbreef afschickt.',
+'confirmemail_sendfailed' => 'Bestätigungsnettbreef kunn nich sennt warrn. Schasst man nakieken, wat de Adress ok nich verkehrt schreven is.
+
+Fehler bi’t Versennen: $1',
+'confirmemail_invalid'    => 'Bestätigungskood weer nich korrekt. De Kood is villicht to oolt.',
+'confirmemail_needlogin'  => 'Du musst $1, dat diene Nettbreefadress bestätigt warrt.',
+'confirmemail_success'    => 'Diene Nettbreefadress is nu bestätigt.',
+'confirmemail_loggedin'   => 'Diene Nettbreefadress is nu bestätigt.',
+'confirmemail_error'      => 'Dat Spiekern vun diene Bestätigung hett nich klappt.',
+'confirmemail_subject'    => '{{SITENAME}} Nettbreefadress-Bestätigung',
+'confirmemail_body'       => 'Een, villicht du vun de IP-Adress $1 ut, hett dat Brukerkonto „$2“ mit disse Nettbreefadress op {{SITENAME}} anmellt.
+
+Dat wi weet, dat dit Brukerkonto würklich di tohöört un dat wi de Nettbreeffunkschonen freeschalten köönt, roop dissen Lenk op:
+
+$3
+
+Wenn du dat nich sülvst wesen büst, denn folg den Lenk nich. De Bestätigungskood warrt $4 ungüllig.',
+
+# Inputbox extension, may be useful in other contexts as well
+'tryexact'       => 'exakte Söök versöken',
+'searchfulltext' => 'in’n Vulltext söken',
+'createarticle'  => 'Artikel anleggen',
+
+# Scary transclusion
+'scarytranscludefailed'  => '[Vörlaag halen för $1 hett nich klappt]',
+'scarytranscludetoolong' => '[URL is to lang]',
+
+# Trackbacks
+'trackbackbox'      => '<div id="mw_trackbacks">
+Trackbacks för dissen Artikel:<br />
+$1
+</div>',
+'trackbackdeleteok' => 'Trackback mit Spood wegsmeten.',
+
+# Delete conflict
+'deletedwhileediting' => 'Wohrschau: Disse Siet is wegsmeten worrn, as du se graad ännert hest!',
+'confirmrecreate'     => "De Bruker [[{{NS:2}}:$1|$1]] ([[{{NS:3}}:$1|talk]]) hett disse Siet wegsmeten, nadem du dat Ännern anfungen hest. He hett as Grund schreven:
+: ''$2''
+Wist du de Siet würklich nee anleggen?",
+'recreate'            => 'wedder nee anleggen',
+
+'unit-pixel' => 'px',
+
+# HTML dump
+'redirectingto' => 'Redirect sett na [[$1]]...',
+
+# action=purge
+'confirm_purge'        => 'Den Cache vun disse Siet leddig maken?
+
+$1',
+'confirm_purge_button' => 'Jo',
+
+'youhavenewmessagesmulti' => 'Du hest ne’e Narichten op $1',
+
+'searchcontaining' => "Na Artikels söken, in de ''$1'' binnen is.",
+'searchnamed'      => "Na Artikels söken, de ''$1'' heten doot.",
+'articletitles'    => 'Artikels, de mit „$1“ anfangt',
+'hideresults'      => 'Resultaten verstecken',
+
+'loginlanguagelabel' => 'Spraak: $1',
+
+# Multipage image navigation
+'imgmultipageprev' => '← vörige Siet',
+'imgmultipagenext' => 'nächste Siet →',
+'imgmultigo'       => 'Los!',
+'imgmultigotopre'  => 'Gah na de Siet',
+
+# Table pager
+'table_pager_next'         => 'Nächste Siet',
+'table_pager_prev'         => 'Vörige Siet',
+'table_pager_first'        => 'Eerste Siet',
+'table_pager_last'         => 'Letzte Siet',
+'table_pager_limit'        => 'Wies $1 Indrääg je Siet',
+'table_pager_limit_submit' => 'Los',
+'table_pager_empty'        => 'Kene Resultaten',
+
+# Auto-summaries
+'autosumm-blank'   => '[[{{ns:12}}:Autokommentar|AK]]: Siet leddig maakt',
+'autosumm-replace' => '[[{{ns:12}}:Autokommentar|AK]]: Siet leddig maakt un ‚$1‘ rinschreven',
+'autoredircomment' => '[[{{ns:12}}:Autokommentar|AK]]: Redirect sett na [[$1]]', # This should be changed to the new naming convention, but existed beforehand
+'autosumm-new'     => '[[{{ns:12}}:Autokommentar|AK]]: Ne’e Siet: ‚$1‘',
+
+# Size units
+'size-bytes'     => '$1 B',
+'size-kilobytes' => '$1 KB',
+'size-megabytes' => '$1 MB',
+'size-gigabytes' => '$1 GB',
+
+# Live preview
+'livepreview-loading' => 'Läädt…',
+'livepreview-ready'   => 'Läädt… Trech!',
+'livepreview-failed'  => 'Live-Vörschau klapp nich!
+Versöök de normale Vörschau.',
+'livepreview-error'   => 'Verbinnen klapp nich: $1 „$2“
+Versöök de normale Vörschau.',
+
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesNds_nl.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesNds_nl.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesNds_nl.php	(revision 1280)
@@ -0,0 +1,63 @@
+<?php
+/** Dutch Lower Saxon (Nedersaksisch)
+  *
+  * @addtogroup Language
+  *
+  * @author Ævar Arnfjörð Bjarmason <avarab@gmail.com>, Jens Frank
+  * @copyright Copyright © 2005, Ævar Arnfjörð Bjarmason, Jens Frank
+  * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
+  */
+
+$fallback = 'nds';
+
+$skinNames = array(
+	'standard'      => 'Klassiek',
+	'nostalgia'     => 'Nostalgie',
+	'cologneblue'   => 'Keuls blauw',
+	'smarty'        => 'Paddington',
+	'chick'         => 'Sjiek'
+);
+
+$namespaceNames = array(
+	NS_MEDIA            => 'Media',
+	NS_SPECIAL          => 'Speciaal',
+	NS_MAIN             => '',
+	NS_TALK             => 'Overleg',
+	NS_USER             => 'Gebruker',
+	NS_USER_TALK        => 'Overleg_gebruker',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK     => 'Overleg_$1',
+	NS_IMAGE            => 'Ofbeelding',
+	NS_IMAGE_TALK       => 'Overleg_ofbeelding',
+	NS_MEDIAWIKI        => 'MediaWiki',
+	NS_MEDIAWIKI_TALK   => 'Overleg_MediaWiki',
+	NS_TEMPLATE         => 'Sjabloon',
+	NS_TEMPLATE_TALK    => 'Overleg_sjabloon',
+	NS_HELP             => 'Hulpe',
+	NS_HELP_TALK        => 'Overleg_hulpe',
+	NS_CATEGORY         => 'Kattegerie',
+	NS_CATEGORY_TALK    => 'Overleg_kattegerie'
+);
+
+$namespaceAliases = array(
+	'Speciaol'          => NS_SPECIAL,
+	'Categorie'         => NS_CATEGORY,
+	'Overleg_categorie' => NS_CATEGORY_TALK,
+	'Overleg_help'      => NS_HELP_TALK,
+);
+
+$dateFormats = array(
+	'mdy time' => 'H:i',
+	'mdy date' => 'M j, Y',
+	'mdy both' => 'H:i, M j, Y',
+
+	'dmy time' => 'H:i',
+	'dmy date' => 'j M Y',
+	'dmy both' => 'H:i, j M Y',
+
+	'ymd time' => 'H:i',
+	'ymd date' => 'Y M j',
+	'ymd both' => 'H:i, Y M j',
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesNe.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesNe.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesNe.php	(revision 1280)
@@ -0,0 +1,20 @@
+<?php
+/** Nepali (नेपाली)
+  *
+  * @addtogroup Language
+  */
+
+$digitTransformTable = array(
+	'0' => '०',
+	'1' => '१',
+	'2' => '२',
+	'3' => '३',
+	'4' => '४',
+	'5' => '५',
+	'6' => '६',
+	'7' => '७',
+	'8' => '८',
+	'9' => '९',
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesNew.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesNew.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesNew.php	(revision 1280)
@@ -0,0 +1,39 @@
+<?php
+/** Nepal Bhasa (नेपाल भाषा)
+  *
+  * @addtogroup Language
+  */
+
+$namespaceNames = array(
+	NS_MEDIA            => 'माध्यम',
+	NS_SPECIAL          => 'विशेष',
+	NS_MAIN             => '',
+	NS_TALK             => 'खँलाबँला',
+	NS_USER             => 'छ्येलेमि',
+	NS_USER_TALK        => 'छ्येलेमि_खँलाबँला',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK     => '$1_खँलाबँला',
+	NS_IMAGE            => 'किपा',
+	NS_IMAGE_TALK       => 'किपा_खँलाबँला',
+	NS_MEDIAWIKI        => 'मिडियाविकि',
+	NS_MEDIAWIKI_TALK   => 'मिडियाविकि_खँलाबँला',
+	NS_HELP             => 'ग्वाहालि',
+	NS_HELP_TALK        => 'ग्वाहालि_खँलाबँला',
+	NS_CATEGORY         => 'पुचः',
+	NS_CATEGORY_TALK    => 'पुचः_खँलाबँला'
+);
+
+$digitTransformTable = array(
+	'0' => '०',
+	'1' => '१',
+	'2' => '२',
+	'3' => '३',
+	'4' => '४',
+	'5' => '५',
+	'6' => '६',
+	'7' => '७',
+	'8' => '८',
+	'9' => '९',
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesNl.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesNl.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesNl.php	(revision 1280)
@@ -0,0 +1,2207 @@
+<?php
+/** Dutch (Nederlands)
+ * This is the Dutch localisation file
+ *
+ * @author Extended by Hendrik Maryns <hendrik.maryns@uni-tuebingen.de>, March 2007.
+ * 
+ * @addtogroup Language
+ */
+
+/**
+ * Transform table for decimal point '.' and thousands separator ','
+ */
+$separatorTransformTable = array(',' => '.', '.' => ',' );
+
+/**
+ * Namespace names. NS_PROJECT is always set to $wgMetaNamespace after the
+ * settings are loaded, it will be ignored even if you specify it here.
+ *
+ * NS_PROJECT_TALK will be set to $wgMetaNamespaceTalk if that variable is
+ * set, otherwise the string specified here will be used. The string may
+ * contain "$1", which will be replaced by the name of NS_PROJECT. It may
+ * also contain a grammatical transformation, e.g.
+ *
+ *     NS_PROJECT_TALK => 'Keskustelu_{{grammar:elative|$1}}'
+ *
+ * Only one grammatical transform may be specified in the string. For
+ * performance reasons, this transformation is done locally by the language
+ * module rather than by the full wikitext parser. As a result, no other
+ * parser features are available.
+ */
+$namespaceNames = array(
+	NS_MEDIA          => 'Media',
+	NS_SPECIAL        => 'Speciaal',
+	NS_MAIN           => '',
+	NS_TALK           => 'Overleg',
+	NS_USER           => 'Gebruiker',
+	NS_USER_TALK      => 'Overleg_gebruiker',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK   => 'Overleg_$1',
+	NS_IMAGE          => 'Afbeelding',
+	NS_IMAGE_TALK     => 'Overleg_afbeelding',
+	NS_MEDIAWIKI      => 'MediaWiki',
+	NS_MEDIAWIKI_TALK => 'Overleg_MediaWiki',
+	NS_TEMPLATE       => 'Sjabloon',
+	NS_TEMPLATE_TALK  => 'Overleg_sjabloon',
+	NS_HELP           => 'Help',
+	NS_HELP_TALK      => 'Overleg_help',
+	NS_CATEGORY       => 'Categorie',
+	NS_CATEGORY_TALK  => 'Overleg_categorie'
+);
+
+/**
+ * Skin names. If any key is not specified, the English one will be used.
+ */
+$skinNames = array(
+	'standard' => 'Klassiek',
+	'nostalgia' => 'Nostalgie',
+	'cologneblue' => 'Keuls blauw',
+	'myskin' => 'MijnSkin'
+);
+
+/**
+ * These are formats for dates generated by MediaWiki (as opposed to the wikitext
+ * DateFormatter). Documentation for the format string can be found in
+ * Language.php, search for sprintfDate.
+ *
+ * This array is automatically inherited by all subclasses. Individual keys can be
+ * overridden.
+ */
+$dateFormats = array(
+	'mdy time' => 'H:i',
+	'mdy date' => 'M j, Y',
+	'mdy both' => 'M j, Y H:i',
+
+	'dmy time' => 'H:i',
+	'dmy date' => 'j M Y',
+	'dmy both' => 'j M Y H:i',
+
+	'ymd time' => 'H:i',
+	'ymd date' => 'Y M j',
+	'ymd both' => 'Y M j H:i',
+);
+
+/**
+ * Default list of book sources
+ */
+$bookstoreList = array(
+	'Koninklijke Bibliotheek' => 'http://opc4.kb.nl/DB=1/SET=5/TTL=1/CMD?ACT=SRCH&IKT=1007&SRT=RLV&TRM=$1'
+);
+
+/**
+ * Magic words
+ * Customisable syntax for wikitext and elsewhere
+ *
+ * Note to translators:
+ *   Please include the English words as synonyms.  This allows people
+ *   from other wikis to contribute more easily.
+ *
+ * This array can be modified at runtime with the LanguageGetMagic hook
+ */
+$magicWords = array(
+#   ID                                 CASE  SYNONYMS
+	'redirect'               => array( 0,    '#REDIRECT', '#DOORVERWIJZING' ),
+	'notoc'                  => array( 0,    '__NOTOC__', '__GEENINHOUD__' ),
+	'nogallery'              => array( 0,    '__NOGALLERY__', '__GEEN_GALLERIJ__' ),
+	'forcetoc'               => array( 0,    '__FORCETOC__', '__FORCEERINHOUD__' ),
+	'toc'                    => array( 0,    '__TOC__', '__INHOUD__' ),
+	'noeditsection'          => array( 0,    '__NOEDITSECTION__', '__NIETBEWERKBARESECTIE__' ),
+	'start'                  => array( 0,    '__START__'              ),
+	'currentmonth'           => array( 1,    'CURRENTMONTH', 'HUIDIGEMAAND' ),
+	'currentmonthname'       => array( 1,    'CURRENTMONTHNAME', 'HUIDIGEMAANDNAAM' ),
+	'currentmonthnamegen'    => array( 1,    'CURRENTMONTHNAMEGEN', 'HUIDIGEMAANDGEN' ),
+	'currentmonthabbrev'     => array( 1,    'CURRENTMONTHABBREV', 'HUIDIGEMAANDAFK' ),
+	'currentday'             => array( 1,    'CURRENTDAY', 'HUIDIGEDAG' ),
+	'currentday2'            => array( 1,    'CURRENTDAY2', 'HUIDIGEDAG2' ),
+	'currentdayname'         => array( 1,    'CURRENTDAYNAME', 'HUIDIGEDAGNAAM' ),
+	'currentyear'            => array( 1,    'CURRENTYEAR', 'HUIDIGJAAR' ),
+	'currenttime'            => array( 1,    'CURRENTTIME', 'HUIDIGETIJD' ),
+	'currenthour'            => array( 1,    'CURRENTHOUR', 'HUIDIGUUR' ),
+	'localmonth'             => array( 1,    'LOCALMONTH', 'LOKALEMAAND' ),
+	'localmonthname'         => array( 1,    'LOCALMONTHNAME', 'LOKALEMAANDNAAM' ),
+	'localmonthnamegen'      => array( 1,    'LOCALMONTHNAMEGEN', 'LOKALEMAANDNAAMGEN' ),
+	'localmonthabbrev'       => array( 1,    'LOCALMONTHABBREV', 'LOKALEMAANDAFK' ),
+	'localday'               => array( 1,    'LOCALDAY', 'LOKALEDAG' ),
+	'localday2'              => array( 1,    'LOCALDAY2', 'LOKALEDAG2' ),
+	'localdayname'           => array( 1,    'LOCALDAYNAME', 'LOKALEDAGNAAM' ),
+	'localyear'              => array( 1,    'LOCALYEAR', 'LOKAALJAAR' ),
+	'localtime'              => array( 1,    'LOCALTIME', 'LOKALETIJD' ),
+	'localhour'              => array( 1,    'LOCALHOUR', 'LOKAALUUR' ),
+	'numberofpages'          => array( 1,    'NUMBEROFPAGES', 'AANTALPAGINAS', 'AANTALPAGINA\'S', 'AANTALPAGINA’S' ),
+	'numberofarticles'       => array( 1,    'NUMBEROFARTICLES', 'AANTALARTIKELEN' ),
+	'numberoffiles'          => array( 1,    'NUMBEROFFILES', 'AANTALBESTANDEN' ),
+	'numberofusers'          => array( 1,    'NUMBEROFUSERS', 'AANTALGEBRUIKERS' ),
+	'pagename'               => array( 1,    'PAGENAME', 'PAGINANAAM' ),
+	'pagenamee'              => array( 1,    'PAGENAMEE', 'PAGINANAAME' ),
+	'namespace'              => array( 1,    'NAMESPACE', 'NAAMRUIMTE' ),
+	'namespacee'             => array( 1,    'NAMESPACEE', 'NAAMRUIMTEE' ),
+	'talkspace'              => array( 1,    'TALKSPACE', 'OVERLEGRUIMTE' ),
+	'talkspacee'             => array( 1,    'TALKSPACEE', 'OVERLEGRUIMTEE' ),
+	'subjectspace'           => array( 1,    'SUBJECTSPACE', 'ARTICLESPACE', 'ONDERWERPRUIMTE', 'ARTIKELRUIMTE' ),
+	'subjectspacee'          => array( 1,    'SUBJECTSPACEE', 'ARTICLESPACEE', 'ONDERWERPRUIMTEE', 'ARTIKELRUIMTEE' ),
+	'fullpagename'           => array( 1,    'FULLPAGENAME', 'VOLLEDIGEPAGINANAAM' ),
+	'fullpagenamee'          => array( 1,    'FULLPAGENAMEE', 'VOLLEDIGEPAGINANAAME' ),
+	'subpagename'            => array( 1,    'SUBPAGENAME', 'DEELPAGINANAAM' ),
+	'subpagenamee'           => array( 1,    'SUBPAGENAMEE', 'DEELPAGINANAAME' ),
+	'basepagename'           => array( 1,    'BASEPAGENAME', 'BASISPAGINANAAM' ),
+	'basepagenamee'          => array( 1,    'BASEPAGENAMEE', 'BASISPAGINANAAME' ),
+	'talkpagename'           => array( 1,    'TALKPAGENAME', 'OVERLEGPAGINANAAM' ),
+	'talkpagenamee'          => array( 1,    'TALKPAGENAMEE', 'OVERLEGPAGINANAAME' ),
+	'subjectpagename'        => array( 1,    'SUBJECTPAGENAME', 'ARTICLEPAGENAME', 'ONDERWERPPAGINANAAM', 'ARTIKELPAGINANAAM' ),
+	'subjectpagenamee'       => array( 1,    'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE', 'ONDERWERPPAGINANAAME', 'ARTIKELPAGINANAAME' ),
+	'msg'                    => array( 0,    'MSG:', 'BERICHT:'       ),
+	'subst'                  => array( 0,    'SUBST:'                 ),
+	'msgnw'                  => array( 0,    'MSGNW:', 'BERICHTNW'    ),
+	'img_thumbnail'          => array( 1,    'thumbnail', 'thumb'     ),
+	'img_manualthumb'        => array( 1,    'thumbnail=$1', 'thumb=$1'),
+	'img_right'              => array( 1,    'right', 'rechts'        ),
+	'img_left'               => array( 1,    'left', 'links'          ),
+	'img_none'               => array( 1,    'none', 'geen'           ),
+	'img_width'              => array( 1,    '$1px'                   ),
+	'img_center'             => array( 1,    'center', 'centre', 'gecentreerd' ),
+	'img_framed'             => array( 1,    'framed', 'enframed', 'frame', 'omkaderd' ),
+	'img_page'               => array( 1,    'page=$1', 'page $1', 'pagina=$1', 'pagina $1' ),
+	'img_baseline'           => array( 1,    'baseline', 'grondlijn'  ),
+	'img_sub'                => array( 1,    'sub'                    ),
+	'img_super'              => array( 1,    'super', 'sup'           ),
+	'img_top'                => array( 1,    'top', 'boven'           ),
+	'img_text-top'           => array( 1,    'text-top', 'tekst-boven' ),
+	'img_middle'             => array( 1,    'middle', 'midden'       ),
+	'img_bottom'             => array( 1,    'bottom', 'beneden'      ),
+	'img_text-bottom'        => array( 1,    'text-bottom', 'tekst-beneden' ),
+	'int'                    => array( 0,    'INT:'                   ),
+	'sitename'               => array( 1,    'SITENAME', 'SITENAAM'   ),
+	'ns'                     => array( 0,    'NS:', 'NR:'             ),
+	'localurl'               => array( 0,    'LOCALURL:', 'LOKALEURL' ),
+	'localurle'              => array( 0,    'LOCALURLE:', 'LOKALEURLE' ),
+	'server'                 => array( 0,    'SERVER'                 ),
+	'servername'             => array( 0,    'SERVERNAME', 'SERVERNAAM' ),
+	'scriptpath'             => array( 0,    'SCRIPTPATH', 'SCRIPTPAD' ),
+	'grammar'                => array( 0,    'GRAMMAR:', 'GRAMMATICA:' ),
+	'notitleconvert'         => array( 0,    '__NOTITLECONVERT__', '__NOTC__', '__GEENTITELCONVERSIE__', '__GEENTC__' ),
+	'nocontentconvert'       => array( 0,    '__NOCONTENTCONVERT__', '__NOCC__', '__GEENINHOUDCONVERSIE__', '__GEENIC__' ),
+	'currentweek'            => array( 1,    'CURRENTWEEK', 'HUIDIGEWEEK' ),
+	'currentdow'             => array( 1,    'CURRENTDOW', 'HUIDIGEDVDW' ),
+	'localweek'              => array( 1,    'LOCALWEEK', 'LOKALEWEEK' ),
+	'localdow'               => array( 1,    'LOCALDOW', 'LOKALEDVDW' ),
+	'revisionid'             => array( 1,    'REVISIONID', 'REVISIEID', 'REVISIE-ID' ),
+	'revisionday'            => array( 1,    'REVISIONDAY', 'REVISIEDAG' ),
+	'revisionday2'           => array( 1,    'REVISIONDAY2', 'REVISIEDAG2' ),
+	'revisionmonth'          => array( 1,    'REVISIONMONTH', 'REVISIEMAAND' ),
+	'revisionyear'           => array( 1,    'REVISIONYEAR', 'REVISIEJAAR' ),
+	'revisiontimestamp'      => array( 1,    'REVISIONTIMESTAMP', 'REVISIETIJDSTEMPEL' ),
+	'plural'                 => array( 0,    'PLURAL:', 'MEERVOUD:'   ),
+	'fullurl'                => array( 0,    'FULLURL:', 'VOLLEDIGEURL' ),
+	'fullurle'               => array( 0,    'FULLURLE:', 'VOLLEDIGEURLE' ),
+	'lcfirst'                => array( 0,    'LCFIRST:', 'HLEERSTE:' ),
+	'ucfirst'                => array( 0,    'UCFIRST:', 'KLEERSTE:' ),
+	'lc'                     => array( 0,    'LC:', 'KL:'             ),
+	'uc'                     => array( 0,    'UC:', 'HL:'             ),
+	'raw'                    => array( 0,    'RAW:', 'RAUW:'          ),
+	'displaytitle'           => array( 1,    'DISPLAYTITLE', 'GETOONDETITEL' ),
+	'rawsuffix'              => array( 1,    'R'                      ),
+	'newsectionlink'         => array( 1,    '__NEWSECTIONLINK__', '__NIEUWESECTIELINK__', '__NIEUWESECTIEKOPPELING__' ),
+	'currentversion'         => array( 1,    'CURRENTVERSION', 'HUIDIGEVERSIE' ),
+	'urlencode'              => array( 0,    'URLENCODE:', 'CODEERURL' ),
+	'anchorencode'           => array( 0,    'ANCHORENCODE', 'CODEERANKER' ),
+	'currenttimestamp'       => array( 1,    'CURRENTTIMESTAMP', 'HUIDIGETIJDSTEMPEL' ),
+	'localtimestamp'         => array( 1,    'LOCALTIMESTAMP', 'LOKALETIJDSTEMPEL' ),
+	'directionmark'          => array( 1,    'DIRECTIONMARK', 'DIRMARK', 'RICHTINGMARKERING', 'RICHTINGSMARKERING' ),
+	'language'               => array( 0,    '#LANGUAGE:', '#TAAL:' ),
+	'contentlanguage'        => array( 1,    'CONTENTLANGUAGE', 'CONTENTLANG', 'INHOUDSTAAL', 'INHOUDTAAL' ),
+	'pagesinnamespace'       => array( 1,    'PAGESINNAMESPACE:', 'PAGESINNS:', 'PAGINASINNAAMRUIMTE', 'PAGINA’SINNAAMRUIMTE', 'PAGINA\'SINNAAMRUIMTE' ),
+	'numberofadmins'         => array( 1,    'NUMBEROFADMINS', 'AANTALADMINS'         ),
+	'formatnum'              => array( 0,    'FORMATNUM', 'FORMATTEERNUM'              ),
+	'padleft'                => array( 0,    'PADLEFT', 'LINKSOPVULLEN' ),
+	'padright'               => array( 0,    'PADRIGHT', 'RECHTSOPVULLEN' ),
+	'special'                => array( 0,    'special', 'speciaal'    ),
+	'defaultsort'            => array( 1,    'DEFAULTSORT:', 'STANDAARDSORTERING:' )
+);
+
+/**
+ * Alternate names of special pages. All names are case-insensitive. The first
+ * listed alias will be used as the default. Aliases from the fallback
+ * localisation (usually English) will be included by default.
+ *
+ * This array may be altered at runtime using the LangugeGetSpecialPageAliases
+ * hook.
+ */
+$specialPageAliases = array(
+	'DoubleRedirects'           => array( 'DubbeleDoorverwijzingen' ),
+	'BrokenRedirects'           => array( 'GebrokenDoorverwijzingen' ),
+	'Disambiguations'           => array( 'Disambigueringen' ),
+	'Userlogin'                 => array( 'InloggenGebruiker' ),
+	'Userlogout'                => array( 'UitloggenGebruiker' ),
+	'Preferences'               => array( 'Voorkeuren' ),
+	'Watchlist'                 => array( 'Volglijst' ),
+	'Recentchanges'             => array( 'RecenteWijzigingen' ),
+	'Upload'                    => array( 'Upload' ),
+	'Imagelist'                 => array( 'Afbeeldingenlijst' ),
+	'Newimages'                 => array( 'NieuweAfbeeldingen' ),
+	'Listusers'                 => array( 'Gebruikerlijst' ),
+	'Statistics'                => array( 'Statistieken' ),
+	'Randompage'                => array( 'Willekeurig', 'WillekeurigePagina' ),
+	'Lonelypages'               => array( 'WeesPaginas' ),
+	'Uncategorizedpages'        => array( 'NietGecategoriseerdePaginas', 'Niet-GecategoriseerdePagina’s', 'Niet-GecategoriseerdePagina\'s' ),
+	'Uncategorizedcategories'   => array( 'NietGecategoriseerdeCategorieën', 'Niet-GecategoriseerdeCategorieën' ),
+	'Uncategorizedimages'       => array( 'NietGecategoriseerdeAfbeeldingen', 'Niet-GecategoriseerdeAfbeeldingen' ),
+	'Unusedcategories'          => array( 'OngebruikteCategorieën' ),
+	'Unusedimages'              => array( 'OngebruikteAfbeeldingen' ),
+	'Wantedpages'               => array( 'GevraagdePaginas', 'GevraagdePagina\'s', 'GevraagdePagina’s' ),
+	'Wantedcategories'          => array( 'GevraagdeCategorieën' ),
+	'Mostlinked'                => array( 'MeestVerwezen' ),
+	'Mostlinkedcategories'      => array( 'MeestVerwezenCategorieën' ),
+	'Mostcategories'            => array( 'MeesteCategorieën' ),
+	'Mostimages'                => array( 'MeesteAfbeeldingen' ),
+	'Mostrevisions'             => array( 'MeesteRevisies' ),
+	'Shortpages'                => array( 'KortePaginas', 'KortePagina’s', 'KortePagina\'s' ),
+	'Longpages'                 => array( 'LangePaginas', 'LangePagina’s', 'LangePagina\'s' ),
+	'Newpages'                  => array( 'NieuwePaginas', 'NieuwePagina’s', 'NieuwePagina\'s' ),
+	'Ancientpages'              => array( 'OudstePaginas', 'OudstePagina’s', 'OudstePagina\'s' ),
+	'Deadendpages'              => array( 'VerwijslozePaginas', 'VerwijslozePagina’s', 'VerwijslozePagina\'s' ),
+	'Protectedpages'            => array( 'BeschermdePaginas', 'BeschermdePagina’s', 'BeschermdePagina\'s' ),
+	'Allpages'                  => array( 'AllePaginas', 'AllePagina’s', 'AllePagina\'s' ),
+	'Prefixindex'               => array( 'Prefixindex' ),
+	'Ipblocklist'               => array( 'IpBlokkeerlijst' ),
+	'Specialpages'              => array( 'SpecialePaginas', 'SpecialePagina’s', 'SpecialePagina\'s' ),
+	'Contributions'             => array( 'Bijdragen' ),
+	'Emailuser'                 => array( 'E-mailGebruiker' ),
+	'Whatlinkshere'             => array( 'VerwijzingenNaarHier', 'Verwijzingen' ),
+	'Recentchangeslinked'       => array( 'Recentchangeslinked' ),
+	'Movepage'                  => array( 'VerplaatsPagina' ),
+	'Blockme'                   => array( 'BlokkeerMij' ),
+	'Booksources'               => array( 'BoekBronnen' ),
+	'Categories'                => array( 'Categorieën' ),
+	'Export'                    => array( 'Exporteren' ),
+	'Version'                   => array( 'Versie' ),
+	'Allmessages'               => array( 'AlleBerichten' ),
+	'Log'                       => array( 'Log', 'Logs' ),
+	'Blockip'                   => array( 'BlokkeerIp' ),
+	'Undelete'                  => array( 'VerwijderenOngedaanMaken', 'Herstellen' ),
+	'Import'                    => array( 'Importeren' ),
+	'Lockdb'                    => array( 'DbBlokkeren', 'BlokkeerDB' ),
+	'Unlockdb'                  => array( 'DbVrijgeven', 'GeefDbVrij' ),
+	'Userrights'                => array( 'Gebruikerrechten' ),
+	'MIMEsearch'                => array( 'MIMEzoeken' ),
+	'Unwatchedpages'            => array( 'NietGevolgdePaginas', 'Niet-GevolgdePagina’s', 'Niet-GevolgdePagina\'s' ),
+	'Listredirects'             => array( 'Doorverwijzinglijst' ),
+	'Revisiondelete'            => array( 'VerwijderRevisie' ),
+	'Unusedtemplates'           => array( 'OngebruikteSjablonen' ),
+	'Randomredirect'            => array( 'WillekeurigeDoorverwijzing' ),
+	'Mypage'                    => array( 'MijnPagina' ),
+	'Mytalk'                    => array( 'MijnOverleg' ),
+	'Mycontributions'           => array( 'MijnBijdragen' ),
+	'Listadmins'                => array( 'Administratorlijst' ),
+	'Popularpages'              => array( 'PopulairePaginas', 'PopulairePagina’s', 'PopulairePagina\'s' ),
+	'Search'                    => array( 'Zoeken' ),
+	'Resetpass'                 => array( 'WachtwoordHerinitialiseren' ),
+	);
+
+/**
+ * Regular expression matching the "link trail", e.g. "ed" in [[Toast]]ed, as
+ * the first group, and the remainder of the string as the second group.
+ */
+$linkTrail = '/^([a-zäöüïëéèà]+)(.*)$/sDu';
+
+$messages = array(
+# User preference toggles
+'tog-underline'               => 'Links onderstrepen:',
+'tog-highlightbroken'         => 'Links naar lege pagina\'s <a href="" class="new">zo weergeven</a> (alternatief: zo weergeven<a href="" class="internal">?</a>).',
+'tog-justify'                 => 'Paragrafen uitvullen',
+'tog-hideminor'               => 'Kleine wijzigingen verbergen in recente wijzigingen',
+'tog-extendwatchlist'         => 'Toon alle wijzigingen in mijn volglijst',
+'tog-usenewrc'                => 'Gebruik de uitgebreide Recente Wijzigingen-pagina (vereist JavaScript)',
+'tog-numberheadings'          => 'Koppen automatisch nummeren',
+'tog-showtoolbar'             => 'Toon werkbalk boven bewerkingsveld (vereist JavaScript)',
+'tog-editondblclick'          => 'Dubbelklikken voor bewerken (vereist JavaScript)',
+'tog-editsection'             => "Maak het bewerken van deelpagina's mogelijk",
+'tog-editsectiononrightclick' => "Maak bewerken van deelpagina's mogelijk met een rechtermuisklik op een tussenkop (vereist JavaScript)",
+'tog-showtoc'                 => "Toon inhoudsopgave (voor pagina's met minstens 3 tussenkoppen)",
+'tog-rememberpassword'        => 'Wachtwoord onthouden',
+'tog-editwidth'               => 'Bewerkingsveld over volle breedte',
+'tog-watchcreations'          => "Pagina's die ik aanmaak automatisch volgen",
+'tog-watchdefault'            => "Pagina's die ik bewerk automatisch volgen",
+'tog-watchmoves'              => "Pagina's die ik verplaats automatisch volgen",
+'tog-watchdeletion'           => "Pagina's die ik verwijder automatisch volgen",
+'tog-minordefault'            => "Al mijn bewerkingen als 'klein' markeren",
+'tog-previewontop'            => 'Toon voorvertoning boven bewerkingsveld',
+'tog-previewonfirst'          => 'Toon voorvertoning bij eerste bewerking',
+'tog-nocache'                 => 'Gebruik geen caching',
+'tog-enotifwatchlistpages'    => "Verzend een e-mail bij bewerkingen van pagina's op mijn volglijst",
+'tog-enotifusertalkpages'     => 'Verzend een e-mail als mijn overlegpagina wijzigt',
+'tog-enotifminoredits'        => "Verzend ook een e-mail bij kleine bewerkingen op pagina's op mijn volglijst",
+'tog-enotifrevealaddr'        => 'Toon mijn e-mailadres in e-mailberichten',
+'tog-shownumberswatching'     => 'Toon aantal gebruikers dat deze pagina volgt',
+'tog-fancysig'                => 'Ondertekenen zonder link naar gebruikerspagina',
+'tog-externaleditor'          => 'Gebruik standaard een externe tekstbewerker',
+'tog-externaldiff'            => 'Gebruik standaard een extern vergelijkingsprogramma',
+'tog-showjumplinks'           => 'Maak "ga naar"-toegankelijkheidslinks mogelijk',
+'tog-uselivepreview'          => 'Gebruik "live voorvertoning" (vereist JavaScript - experimenteel)',
+'tog-forceeditsummary'        => 'Geef een melding bij een lege samenvatting',
+'tog-watchlisthideown'        => 'Verberg eigen bewerkingen op mijn volglijst',
+'tog-watchlisthidebots'       => 'Verberg botbewerkingen op mijn volglijst',
+'tog-watchlisthideminor'      => 'Verberg kleine bewerkingen op mijn volglijst',
+'tog-nolangconversion'        => 'Schakel variantconversie uit',
+'tog-ccmeonemails'            => 'Stuur mij een kopie van e-mail die ik naar andere gebruikers stuur',
+'tog-diffonly'                => 'Pagina-inhoud onder wijzigingen niet tonen',
+
+'underline-always'  => 'Altijd',
+'underline-never'   => 'Nooit',
+'underline-default' => 'Webbrowser-standaard',
+
+'skinpreview' => '(Voorvertoning)',
+
+# Dates
+'sunday'        => 'zondag',
+'monday'        => 'maandag',
+'tuesday'       => 'dinsdag',
+'wednesday'     => 'woensdag',
+'thursday'      => 'donderdag',
+'friday'        => 'vrijdag',
+'saturday'      => 'zaterdag',
+'sun'           => 'zon',
+'mon'           => 'maa',
+'tue'           => 'din',
+'wed'           => 'woe',
+'thu'           => 'don',
+'fri'           => 'vri',
+'sat'           => 'zat',
+'january'       => 'januari',
+'february'      => 'februari',
+'march'         => 'maart',
+'april'         => 'april',
+'may_long'      => 'mei',
+'june'          => 'juni',
+'july'          => 'juli',
+'august'        => 'augustus',
+'september'     => 'september',
+'october'       => 'oktober',
+'november'      => 'november',
+'december'      => 'december',
+'january-gen'   => 'januari',
+'february-gen'  => 'februari',
+'march-gen'     => 'maart',
+'april-gen'     => 'april',
+'may-gen'       => 'mei',
+'june-gen'      => 'juni',
+'july-gen'      => 'juli',
+'august-gen'    => 'augustus',
+'september-gen' => 'september',
+'october-gen'   => 'oktober',
+'november-gen'  => 'november',
+'december-gen'  => 'december',
+'jan'           => 'jan',
+'feb'           => 'feb',
+'mar'           => 'mrt',
+'apr'           => 'apr',
+'may'           => 'mei',
+'jun'           => 'jun',
+'jul'           => 'jul',
+'aug'           => 'aug',
+'sep'           => 'sep',
+'oct'           => 'okt',
+'nov'           => 'nov',
+'dec'           => 'dec',
+
+# Bits of text used by many pages
+'categories'            => 'Categorieën',
+'pagecategories'        => '{{PLURAL:$1|Categorie|Categorieën}}',
+'category_header'       => 'Pagina\'s in categorie "$1"',
+'subcategories'         => 'Ondercategorieën',
+'category-media-header' => 'Media in de categorie "$1"',
+
+'mainpage'          => 'Hoofdpagina',
+'mainpagetext'      => "<big>'''De installatie van MediaWiki is geslaagd.'''</big>",
+'mainpagedocfooter' => 'Raadpleeg de [http://meta.wikimedia.org/wiki/Help:Contents handleiding] voor informatie over het gebruik van de wikisoftware.
+
+== Meer hulp ==
+
+* [http://www.mediawiki.org/wiki/Help:Configuration_settings Lijst met instellingen]
+* [http://www.mediawiki.org/wiki/Help:FAQ MediaWiki FAQ]
+* [http://mail.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki mailinglijst voor nieuwe versies]',
+
+'portal'          => 'Gebruikersportaal',
+'portal-url'      => 'Project:Gebruikersportaal',
+'about'           => 'Info',
+'aboutsite'       => 'Over {{SITENAME}}',
+'aboutpage'       => 'Project:Info',
+'article'         => 'Pagina',
+'help'            => 'Hulp en contact',
+'helppage'        => 'Help:Inhoud',
+'bugreports'      => 'Foutrapporten',
+'bugreportspage'  => 'Project:Foutrapportage',
+'sitesupport'     => 'Financieel bijdragen',
+'sitesupport-url' => 'Project:Financieel bijdragen',
+'faq'             => 'FAQ (veelgestelde vragen)',
+'faqpage'         => 'Project:Veelgestelde vragen',
+'edithelp'        => 'Hulp bij bewerken',
+'newwindow'       => '(nieuw venster)',
+'edithelppage'    => 'Help:Bewerken',
+'cancel'          => 'Annuleren',
+'qbfind'          => 'Zoeken',
+'qbbrowse'        => 'Bladeren',
+'qbedit'          => 'Bewerken',
+'qbpageoptions'   => 'Pagina-opties',
+'qbpageinfo'      => 'Pagina-informatie',
+'qbmyoptions'     => 'Mijn opties',
+'qbspecialpages'  => "Speciale pagina's",
+'moredotdotdot'   => 'Meer...',
+'mypage'          => 'Mijn gebruikerspagina',
+'mytalk'          => 'Mijn overleg',
+'anontalk'        => 'Overlegpagina voor dit IP-adres',
+'navigation'      => 'Navigatie',
+
+# Metadata in edit box
+'metadata_help' => 'Metadata (zie [[Project:Metadata]] voor toelichting):',
+
+'currentevents'     => 'In het nieuws',
+'currentevents-url' => 'In het nieuws',
+
+'disclaimers'       => 'Voorbehoud',
+'disclaimerpage'    => 'Project:Algemeen voorbehoud',
+'privacy'           => 'Privacybeleid',
+'privacypage'       => 'Project:Privacybeleid',
+'errorpagetitle'    => 'Fout',
+'returnto'          => 'Terug naar $1.',
+'tagline'           => 'Van {{SITENAME}}',
+'search'            => 'Zoeken',
+'searchbutton'      => 'Zoeken',
+'go'                => 'OK',
+'searcharticle'     => 'OK',
+'history'           => 'Geschiedenis',
+'history_short'     => 'Geschiedenis',
+'updatedmarker'     => 'bewerkt sinds mijn laatste bezoek',
+'info_short'        => 'Informatie',
+'printableversion'  => 'Printervriendelijke versie',
+'permalink'         => 'Permalink',
+'print'             => 'Afdrukken',
+'edit'              => 'Bewerk',
+'editthispage'      => 'Bewerk deze pagina',
+'delete'            => 'Verwijder',
+'deletethispage'    => 'Verwijder deze pagina',
+'undelete_short'    => '$1 {{PLURAL:$1|bewerking|bewerkingen}} terugplaatsen',
+'protect'           => 'Beveilig',
+'protectthispage'   => 'Beveiligen',
+'unprotect'         => 'Beveiliging opheffen',
+'unprotectthispage' => 'Beveiliging opheffen',
+'newpage'           => 'Nieuwe pagina',
+'talkpage'          => 'Overlegpagina',
+'specialpage'       => 'Speciale pagina',
+'personaltools'     => 'Persoonlijke instellingen',
+'postcomment'       => 'Voeg opmerking toe',
+'articlepage'       => 'Toon pagina',
+'talk'              => 'Overleg',
+'views'             => 'Aspecten/acties',
+'toolbox'           => 'Hulpmiddelen',
+'userpage'          => 'Toon gebruikerspagina',
+'projectpage'       => 'Toon projectpagina',
+'imagepage'         => 'Toon afbeeldingspagina',
+'mediawikipage'     => 'Toon berichtpagina',
+'templatepage'      => 'Toon sjabloonpagina',
+'viewhelppage'      => 'Toon helppagina',
+'categorypage'      => 'Toon categoriepagina',
+'viewtalkpage'      => 'Toon overlegpagina',
+'otherlanguages'    => 'Andere talen',
+'redirectedfrom'    => '(Doorverwezen vanaf $1)',
+'redirectpagesub'   => 'Doorverwijspagina',
+'lastmodifiedat'    => 'Deze pagina is het laatst bewerkt op $2, $1.', # $1 date, $2 time
+'viewcount'         => 'Deze pagina is $1 maal bekeken.',
+'copyright'         => 'Inhoud is beschikbaar onder de $1.',
+'protectedpage'     => 'Beveiligde pagina',
+'jumpto'            => 'Ga naar:',
+'jumptonavigation'  => 'navigatie',
+'jumptosearch'      => 'zoek',
+
+'badaccess'        => 'Geen toestemming',
+'badaccess-group0' => 'U heeft geen rechten om de gevraagde handeling uit te voeren.',
+'badaccess-group1' => 'De gevraagde handeling is voorbehouden aan gebruikers in de groep $1.',
+'badaccess-group2' => 'De gevraagde handeling is voorbehouden aan gebruikers in een van de groepen $1.',
+'badaccess-groups' => 'De gevraagde handeling is voorbehouden aan gebruikers in een van de groepen $1.',
+
+'versionrequired'     => 'Versie $1 van MediaWiki is vereist',
+'versionrequiredtext' => 'Versie $1 van MediaWiki is vereist om deze pagina te gebruiken. Zie [[Special:Version]]',
+
+'retrievedfrom'       => 'Teruggeplaatst van "$1"',
+'youhavenewmessages'  => 'U heeft $1 ($2).',
+'newmessageslink'     => 'nieuwe berichten',
+'newmessagesdifflink' => 'laatste wijziging',
+'editsection'         => 'bewerk',
+'editold'             => 'bewerk',
+'editsectionhint'     => 'Bewerk deelpagina: $1',
+'toc'                 => 'Inhoud',
+'showtoc'             => 'tonen',
+'hidetoc'             => 'verbergen',
+'thisisdeleted'       => '$1 tonen of terugplaatsen?',
+'viewdeleted'         => '$1 tonen?',
+'restorelink'         => '$1 verwijderde {{PLURAL:$1|versie|versies}}',
+'feedlinks'           => 'Feed:',
+'feed-invalid'        => 'Feedtype wordt niet ondersteund.',
+
+# Short words for each namespace, by default used in the 'article' tab in monobook
+'nstab-main'      => 'Pagina',
+'nstab-user'      => 'Gebruiker',
+'nstab-media'     => 'Mediapagina',
+'nstab-special'   => 'Speciaal',
+'nstab-project'   => 'Projectpagina',
+'nstab-image'     => 'Bestand',
+'nstab-mediawiki' => 'Bericht',
+'nstab-template'  => 'Sjabloon',
+'nstab-help'      => 'Help',
+'nstab-category'  => 'Categorie',
+
+# Main script and global functions
+'nosuchaction'      => 'Opgegeven handeling bestaat niet',
+'nosuchactiontext'  => 'De opdracht in de URL is niet herkend door de wiki',
+'nosuchspecialpage' => 'Deze speciale pagina bestaat niet',
+'nospecialpagetext' => "U heeft een niet bestaande speciale pagina opgevraagd. Een lijst met speciale pagina's staat op [[Special:Specialpages]].",
+
+# General errors
+'error'                => 'Fout',
+'databaseerror'        => 'Databasefout',
+'dberrortext'          => 'Er is een syntaxisfout in de databasequery opgetreden.
+Mogelijk zit er een fout in de software.
+De laatste query naar de database was:
+<blockquote><tt>$1</tt></blockquote>
+vanuit de functie "<tt>$2</tt>".
+MySQL gaf the foutmelding "<tt>$3: $4</tt>".',
+'dberrortextcl'        => 'Er is een syntaxisfout in de databasequery opgetreden.
+De laatste query naar de database was:
+"$1"
+vanuit de functie "$2".
+MySQL gaf de volgende foutmelding: "$3: $4"',
+'noconnect'            => 'Sorry! De wiki ondervindt technische moeilijkheden en kan de database niet bereiken. <br />
+$1',
+'nodb'                 => 'Kon database $1 niet selecteren',
+'cachederror'          => 'De getoonde pagina is een kopie uit de cache en deze kan verouderd zijn.',
+'laggedslavemode'      => 'Waarschuwing: De pagina kan verouderd zijn.',
+'readonly'             => 'Database geblokkeerd',
+'enterlockreason'      => 'Geef een reden op voor de blokkade en geef op wanneer die waarschijnlijk wordt opgeheven.',
+'readonlytext'         => 'De database is op het moment geblokkeerd voor bewerkingen, waarschijnlijk vanwege regulier databaseonderhoud. Na afronding wordt de functionaliteit hersteld.
+
+De beheerder heeft de volgende reden opgegeven: $1',
+'missingarticle'       => 'In de database is geen tekst aangetroffen voor een pagina met de naam "$1".
+
+Dit wordt meestal veroorzaakt door het volgen van een verouderde link of een link uit de geschiedenis naar een pagina die is verwijderd.
+
+Als dit niet het geval is, dan heeft u een fout in de software gevonden.
+Rapporteer dit alstublieft aan een beheerder met vermelding van de URL.',
+'readonly_lag'         => 'De database is automatisch vergrendeld terwijl de slave databaseservers synchroniseren met de master.',
+'internalerror'        => 'Interne fout',
+'filecopyerror'        => 'Bestand "$1" kon niet gekopieerd worden naar "$2".',
+'filerenameerror'      => '"$1" kon niet hernoemd worden naar "$2".',
+'filedeleteerror'      => 'Bestand "$1" kon niet verwijderd worden.',
+'filenotfound'         => 'Bestand "$1" is niet gevonden.',
+'unexpected'           => 'Onverwachte waarde: "$1"="$2".',
+'formerror'            => 'Fout: formulier kon niet verzonden worden',
+'badarticleerror'      => 'Deze handeling kan niet op deze pagina worden uitgevoerd.',
+'cannotdelete'         => 'De pagina of het bestand kon niet verwijderd worden. Mogelijk is deze al door iemand anders verwijderd.',
+'badtitle'             => 'Ongeldige paginanaam',
+'badtitletext'         => 'De opgevraagde pagina was ongeldig, leeg, of een verkeerd gelinkte intertaal- of interwikinaam. Wellicht bevat de paginanaam niet toegestane karakters.',
+'perfdisabled'         => 'Sorry! Deze functionaliteit is tijdelijk uitgeschakeld omdat deze de database zo langzaam maakt dat niemand de wiki kan gebruiken.',
+'perfdisabledsub'      => 'Hieronder staat een opgeslagen kopie van $1:', # obsolete?
+'perfcached'           => 'De getoonde gegevens komen uit een cache en zijn mogelijk niet actueel.',
+'perfcachedts'         => 'De getoonde gegevens komen uit een cache en zijn voor het laatst bijgewerkt op $1.',
+'querypage-no-updates' => 'Deze pagina kan op het moment niet bijgewerkt worden. Deze gegevens worden niet ververst.',
+'wrong_wfQuery_params' => 'Onjuiste parameters voor wfQuery()<br />
+Functie: $1<br />
+Query: $2',
+'viewsource'           => 'Toon brontekst',
+'viewsourcefor'        => 'voor $1',
+'protectedpagetext'    => 'Deze pagina is beveiligd. Bewerken is niet mogelijk.',
+'viewsourcetext'       => 'U kunt de brontekst van deze pagina bekijken en kopiëren:',
+'protectedinterface'   => 'Deze pagina bevat tekst voor berichten van de software en is beveiligd om misbruik te voorkomen.',
+'editinginterface'     => "'''Waarschuwing:''' U bewerkt een pagina die gebruikt wordt door de software. Bewerkingen op deze pagina beïnvloeden de gebruikersinterface van iedereen.",
+'sqlhidden'            => '(SQL query verborgen)',
+'cascadeprotected'     => "Deze pagina kan niet bewerkt worden, omdat die is opgenomen in de volgende pagina's die beveiligd zijn met de cascade-optie:",
+
+# Login and logout pages
+'logouttitle'                => 'Gebruiker afmelden',
+'logouttext'                 => "<strong>U bent nu afgemeld.</strong><br />
+U kunt {{SITENAME}} nu anoniem gebruiken of weer aanmelden als dezelfde of een andere gebruiker. Mogelijk blijven een aantal pagina's getoond worden alsof u nog bent aangemeld totdat u de cache van uw browser leegt.",
+'welcomecreation'            => '== Welkom, $1! ==
+
+Uw account is aangemaakt. Vergeet niet uw voorkeuren voor {{SITENAME}} aan te passen.',
+'loginpagetitle'             => 'Gebruikersnaam',
+'yourname'                   => 'Gebruikersnaam',
+'yourpassword'               => 'Wachtwoord',
+'yourpasswordagain'          => 'Wachtwoord opnieuw ingeven',
+'remembermypassword'         => 'Aanmeldgegevens onthouden',
+'yourdomainname'             => 'Uw domein',
+'externaldberror'            => 'Er is een fout opgetreden bij het aanmelden bij de database of u heeft geen toestemming uw externe account bij te werken.',
+'loginproblem'               => '<b>Er was een probleem bij het aanmelden.</b><br />Probeer het a.u.b. opnieuw.',
+'alreadyloggedin'            => '<strong>Gebruiker $1, u bent al aangemeld.</strong><br />',
+'login'                      => 'Aanmelden',
+'loginprompt'                => 'U moet cookies accepteren om aan te kunnen melden bij {{SITENAME}}.',
+'userlogin'                  => 'Aanmelden / Inschrijven',
+'logout'                     => 'Afmelden',
+'userlogout'                 => 'Afmelden',
+'notloggedin'                => 'Niet aangemeld',
+'nologin'                    => 'Nog geen gebruikersnaam? $1.',
+'nologinlink'                => 'Maak een gebruiker aan',
+'createaccount'              => 'Gebruiker aanmaken',
+'gotaccount'                 => 'Heeft u al een gebruikersnaam? $1.',
+'gotaccountlink'             => 'Aanmelden',
+'createaccountmail'          => 'per e-mail',
+'badretype'                  => 'De ingevoerde wachtwoorden verschillen van elkaar.',
+'userexists'                 => 'De gekozen gebruikersnaam is al in gebruik. Kies a.u.b. een andere naam.',
+'youremail'                  => 'Uw e-mailadres (optioneel)*:',
+'username'                   => 'Gebruikersnaam:',
+'uid'                        => 'Gebruikersnummer:',
+'yourrealname'               => 'Uw echte naam *:',
+'yourlanguage'               => 'Taal:',
+'yourvariant'                => 'Taalvariant',
+'yournick'                   => 'Tekst voor ondertekening:',
+'badsig'                     => 'Ongeldige ondertekening; controleer de HTML-tags.',
+'email'                      => 'E-mail',
+'prefs-help-email-enotif'    => 'Dit e-mailadres wordt ook gebruikt om mededelingen naar u toe te sturen, als u die functies heeft ingesteld.',
+'prefs-help-realname'        => '* Echte naam (optioneel): als u deze opgeeft kan deze naam gebruikt worden om u erkenning te geven voor uw werk.',
+'loginerror'                 => 'Aanmeldfout',
+'prefs-help-email'           => '* E-mail (optioneel): Stelt anderen in staat contact met u op te nemen via uw gebruikers- of overlegpagina zonder dat u uw identiteit prijsgeeft.',
+'nocookiesnew'               => 'De gebruiker is aangemaakt maar nog niet aangemeld. {{SITENAME}} gebruikt cookies voor het aanmelden van gebruikers. Schakel die a.u.b. in en meld daarna aan met uw nieuwe gebruikersnaam en wachtwoord.',
+'nocookieslogin'             => '{{SITENAME}} gebruikt cookies voor het aanmelden van gebruikers. U accepteert geen cookies. Schakel deze optie a.u.b. aan en probeer het opnieuw.',
+'noname'                     => 'U heeft geen geldige gebruikersnaam opgegeven.',
+'loginsuccesstitle'          => 'Aanmelden geslaagd',
+'loginsuccess'               => "'''U bent nu aangemeld bij {{SITENAME}} als \"\$1\".'''",
+'nosuchuser'                 => 'De gebruiker "$1" bestaat niet. Controleer de schrijfwijze of maak een nieuwe gebruiker aan.',
+'nosuchusershort'            => 'De gebruiker "$1" bestaat niet. Controleer de schrijfwijze.',
+'nouserspecified'            => 'U dient een gebruikersnaam op te geven.',
+'wrongpassword'              => 'Wachtwoord onjuist. Probeer het opnieuw.',
+'wrongpasswordempty'         => 'Het opgegeven wachtwoord was leeg. Probeer het opnieuw.',
+'mailmypassword'             => 'E-mail wachtwoord',
+'passwordremindertitle'      => 'Wachtwoordherinnering van {{SITENAME}}',
+'passwordremindertext'       => 'Iemand, waarschijnlijk u, heeft vanaf  IP-adres $1 een verzoek gedaan tot het
+toezenden van het wachtwoord voor {{SITENAME}} ($4).
+Het wachtwoord voor gebruiker "$2" is "$3".
+Meld u nu aan en wijzig dan uw wachtwoord.
+
+Als iemand anders dan u dit verzoek heeft gedaan of als u zich inmiddels het wachtwoord herinnert en het niet langer wilt wijzigen, negeer dit bericht dan en blijf uw bestaande wachtwoord gebruiken.',
+'noemail'                    => 'Er is geen e-mailadres bekend voor gebruiker "$1".',
+'passwordsent'               => 'Het wachtwoord is verzonden naar het e-mailadres voor "$1".
+Meld u a.u.b. aan nadat u het heeft ontvangen.',
+'blocked-mailpassword'       => 'Uw IP-adres is geblokkeerd voor het maken van wijzigingen. Om misbruik te voorkomen is het niet mogelijk om een nieuw wachtwoord aan te vragen.',
+'eauthentsent'               => 'Er is een bevestigingsmail naar het opgegeven e-mailadres gezonden. Volg de instructies in de e-mail om aan te geven dat het uw e-mailadres is. Tot die tijd wordt er geen e-mail aan het adres gezonden.',
+'throttled-mailpassword'     => 'In de afgelopen $1 uur is er al een wachtwoordherinnering gestuurd. Om misbruik te voorkomen wordt er maximaal één wachtwoordherinnering per $1 uur verzonden.',
+'mailerror'                  => 'Fout bij het verzenden van e-mail: $1',
+'acct_creation_throttle_hit' => 'Sorry, er zijn al $1 accounts aangemaakt vanaf dit IP-adres. U kunt geen nieuwe gebruikers meer aanmaken.',
+'emailauthenticated'         => 'Uw e-mailadres is bevestigd op $1.',
+'emailnotauthenticated'      => 'Uw e-mailadres is nog niet bevestigd. U ontvangt geen e-mail voor de onderstaande functies.',
+'noemailprefs'               => 'Geef een e-mailadres op om deze functies te gebruiken.',
+'emailconfirmlink'           => 'Bevestig uw e-mailadres',
+'invalidemailaddress'        => 'Het e-mailadres is niet geaccepteerd omdat het een ongeldige opmaak heeft. Geef a.u.b. een geldig e-mailadres op of laat het veld leeg.',
+'accountcreated'             => 'Gebruiker aangemaakt',
+'accountcreatedtext'         => 'De gebruiker $1 is aangemaakt.',
+
+# Password reset dialog
+'resetpass'               => 'Wachtwoord opnieuw instellen',
+'resetpass_announce'      => 'U bent aangemeld met een tijdelijke code die per e-mail is toegezonden. Voer een nieuw wachtwoord in om het aanmelden te voltooien:',
+'resetpass_header'        => 'Wachtwoord opnieuw instellen',
+'resetpass_submit'        => 'Wachtwoord instellen en aanmelden',
+'resetpass_success'       => 'Uw wachtwoord is gewijzigd. Bezig met aanmelden...',
+'resetpass_bad_temporary' => 'Ongeldig tijdelijk wachtwoord. U heeft uw wachtwoord al gewijzigd of een nieuw tijdelijk wachtwoord aangevraagd.',
+'resetpass_forbidden'     => 'Wachtwoorden kunnen op deze wiki niet gewijzigd worden',
+'resetpass_missing'       => 'U heeft geen wachtwoord ingegeven.',
+
+# Edit page toolbar
+'bold_sample'     => 'Vetgedrukte tekst',
+'bold_tip'        => 'Vet',
+'italic_sample'   => 'Cursieve tekst',
+'italic_tip'      => 'Cursief',
+'link_sample'     => 'Onderwerp',
+'link_tip'        => 'Interne link',
+'extlink_sample'  => 'http://www.example.com linktekst',
+'extlink_tip'     => 'Externe link (vergeet http:// niet)',
+'headline_sample' => 'Deelonderwerp',
+'headline_tip'    => 'Tussenkopje (hoogste niveau)',
+'math_sample'     => 'Voer de formule in',
+'math_tip'        => 'Wiskundige formule (LaTeX)',
+'nowiki_sample'   => 'Voer hier de niet op te maken tekst in',
+'nowiki_tip'      => 'Negeer wiki-opmaak',
+'image_sample'    => 'Voorbeeld.png',
+'image_tip'       => 'Afbeelding',
+'media_sample'    => 'Voorbeeld.ogg',
+'media_tip'       => 'Link naar bestand',
+'sig_tip'         => 'Uw handtekening met datum en tijd',
+'hr_tip'          => 'Horizontale lijn (gebruik spaarzaam)',
+
+# Edit pages
+'summary'                   => 'Samenvatting',
+'subject'                   => 'Onderwerp/kop',
+'minoredit'                 => 'Dit is een kleine bewerking',
+'watchthis'                 => 'Volg deze pagina',
+'savearticle'               => 'Pagina opslaan',
+'preview'                   => 'Nakijken',
+'showpreview'               => 'Toon bewerking ter controle',
+'showlivepreview'           => 'Toon bewerking ter controle',
+'showdiff'                  => 'Toon wijzigingen',
+'anoneditwarning'           => "'''Waarschuwing:''' U bent niet aangemeld. Uw IP-adres wordt opgeslagen als u wijzigingen op deze pagina maakt.",
+'missingsummary'            => "'''Herinnering:''' U heeft geen samenvatting opgegeven voor uw bewerking. Als u nogmaals op ''Pagina opslaan'' klikt wordt de bewerking zonder samenvatting opgeslagen.",
+'missingcommenttext'        => 'Plaats uw opmerking hieronder, a.u.b.',
+'missingcommentheader'      => "''Let op:''' U heeft geen onderwerp/kopregel voor deze opmerking opgegeven. Als u weer \"opslaan\" kiest, wordt uw wijziging zonder kopregel opgeslagen.",
+'summary-preview'           => 'Nakijken samenvatting',
+'subject-preview'           => 'Nakijken onderwerp/kop',
+'blockedtitle'              => 'Gebruiker is geblokkeerd',
+'blockedtext'               => "<big>'''Uw gebruikersnaam of IP-adres is geblokkeerd.'''</big>
+De blokkade is ingesteld door $1. De opgegeven reden is ''$2''.
+U kunt contact opnemen met $1 of een andere [[Project:Administrators|beheerder]] om de blokkade te bespreken.
+U kunt geen gebruik maken van de functie 'E-mail gebruiker' tenzij u een een geldig e-mailadres heeft opgegeven in uw [[Special:Preferences|voorkeuren]].
+Uw huidige IP-adres is $3. Vermeld dit adres in eventuele correspondentie.
+Uw huidige IP-adres is $3 en uw blokkadenummer is #$5. Voeg deze informatie op als u contact opneemt.",
+'blockedoriginalsource'     => "Hieronder staat de brontekst van '''$1''':",
+'blockededitsource'         => "Hieronder staat de tekst van '''uw bewerkingen''' aan '''$1''':",
+'whitelistedittitle'        => 'Voor bewerken is aanmelden verplicht',
+'whitelistedittext'         => "U moet $1 om pagina's te bewerken.",
+'whitelistreadtitle'        => 'Voor leestoegang is aanmelden verplicht',
+'whitelistreadtext'         => "[[Special:Userlogin|Meld u aan]] voor leestoegang tot pagina's.",
+'whitelistacctitle'         => 'Het aanmaken van nieuwe gebruikers is niet toegestaan',
+'whitelistacctext'          => 'U dient [[Special:Userlogin|aangemeld]] te zijn en de juiste rechten te hebben om gebruikers aan te maken in deze Wiki.',
+'confirmedittitle'          => 'E-mailbevestiging is verplicht voordat u kunt bewerken',
+'confirmedittext'           => 'U moet uw e-mailadres bevestigen voor u kunt bewerken. Voer uw emailadres in en bevestig het via [[Special:Preferences|uw voorkeuren]].',
+'loginreqtitle'             => 'Aanmelden verplicht',
+'loginreqlink'              => 'aanmelden',
+'loginreqpagetext'          => "$1 is verplicht om andere pagina's te kunnen zien.",
+'accmailtitle'              => 'Wachtwoord verzonden.',
+'accmailtext'               => 'Het wachtwoord voor "$1" is verzonden naar $2.',
+'newarticle'                => '(Nieuw)',
+'newarticletext'            => "Deze pagina bestaat nog niet. Typ in het onderstaande veld om de pagina aan te maken (meer informatie staat op de [[Help:Inhoud|hulppagina]]).
+Gebruik te knop '''vorige''' in uw browser als u hier per ongeluk terecht bent gekomen.",
+'anontalkpagetext'          => "----''Deze overlegpagina hoort bij een anonieme gebruiker die hetzij geen loginnaam heeft, hetzij deze niet gebruikt. We gebruiken daarom het IP-adres ter identificatie. Het is mogelijk dat meerdere personen hetzelfde IP-adres gebruiken. Mogelijk ontvangt u hier berichten die niet voor u bedoeld zijn. Als u dat wilt voorkomen, [[Special:Userlogin|maak dan een gebruikersnaam aan of meld u aan]].''",
+'noarticletext'             => "Deze pagina bevat geen tekst. U kunt [[Special:Search/{{PAGENAME}}|naar deze term zoeken]] in andere pagina's of [{{fullurl:{{FULLPAGENAME}}|action=edit}} deze pagina bewerken].",
+'clearyourcache'            => '\'\'\'Let op!\'\'\' Leeg uw cache nadat u de wijzigingen heeft opgeslagen.
+
+{| border="1" cellpadding="3" class=toccolours style="border: 1px #AAAAAA solid; border-collapse: collapse;"
+| Mozilla/Safari/Konqueror || CTRL-SHIFT-R
+|-
+| IE || CTRL-F5
+|-
+| Opera || F5
+|-
+| Safari || CMD-R
+|-
+| Konqueror || F5
+|}',
+'usercssjsyoucanpreview'    => "<strong>Tip:</strong> Gebruik de knop 'Toon bewerking ter controle' om uw nieuwe css/js te testen alvorens op te slaan.",
+'usercsspreview'            => "'''Dit is alleen een voorvertoning van uw persoonlijke css, deze is nog niet opgeslagen!'''",
+'userjspreview'             => "'''Let op: u test nu uw persoonlijke  JavaScript. Het is nog niet opgeslagen!'''",
+'userinvalidcssjstitle'     => "'''Waarschuwing:''' er is geen skin \"\$1\". Let op: uw eigen .css- en .js-pagina's beginnen met een kleine letter, bijvoorbeeld User:Naam/monobook.css in plaats van User:Naam/Monobook.css.",
+'updated'                   => '(Bijgewerkt)',
+'note'                      => '<strong>Opmerking:</strong>',
+'previewnote'               => '<strong>Let op: dit is een controlepagina; uw tekst is nog niet opgeslagen!</strong>',
+'previewconflict'           => 'Deze voorvertoning geeft aan hoe de tekst in het bovenste veld eruit ziet als u deze opslaat.',
+'session_fail_preview'      => '<strong>Sorry! Uw bewerking is niet verwerkt omdat sessiegegevens verloren zijn gegaan.
+Probeer het opnieuw. Als het dan nog niet lukt, meldt u dan af en weer aan.</strong>',
+'session_fail_preview_html' => "<strong>Sorry! Uw bewerking is niet verwerkt omdat sessiegegevens verloren zijn gegaan.</strong>
+
+''Omdat in deze wiki ruwe HTML is ingeschakeld, is een voorvertoning niet mogelijk als bescherming tegen aanvallen met JavaScript.''
+
+<strong>Als dit een legitieme bewerking is, probeer het dan opnieuw. Als het dan nog niet lukt, meldt u dan af en weer aan.</strong>",
+'importing'                 => 'Bezig met importeren van $1',
+'editing'                   => 'Bezig met bewerken van $1',
+'editinguser'               => 'Bezig met bewerken van $1',
+'editingsection'            => 'Bezig met bewerken van $1 (deelpagina)',
+'editingcomment'            => 'Bezig met bewerken van $1 (opmerking)',
+'editconflict'              => 'Bewerkingsconflict: $1',
+'explainconflict'           => 'Een andere gebruiker heeft deze pagina bewerkt sinds u met uw bewerking bent begonnen.
+In het bovenste deel van het venster staat de tekst van de huidige pagina.
+Uw bewerking staat nog in het onderste gedeelte.
+U dient uw bewerkingen in te voegen in de bestaande tekst. 
+<b>Alleen</b> de tekst in het bovenste gedeelte wordt opgeslagen als u op "Pagina opslaan" klikt.<br />',
+'yourtext'                  => 'Uw tekst',
+'storedversion'             => 'Opgeslagen versie',
+'nonunicodebrowser'         => "<strong>WAARSCHUWING: Uw browser kan niet goed overweg met unicode. Hiermee wordt door de Mediawiki rekening gehouden zodat u toch zonder problemen pagina's kan bewerken: niet-ASCII karakters worden in het bewerkingsveld weergegeven als hexadecimale codes.</strong>",
+'editingold'                => '<strong>Waarschuwing! U bewerkt een oude versie van deze pagina. Als u uw bewerking opslaat, gaan alle wijzigingen die na deze versie gemaakt zijn verloren.</strong>',
+'yourdiff'                  => 'Wijzigingen',
+'copyrightwarning'          => "Opgelet: Alle bijdragen aan {{SITENAME}} worden geacht te zijn vrijgegeven onder de $2 (zie $1 voor details). Als u niet wilt dat uw tekst door anderen naar believen bewerkt en verspreid kan worden, kies dan niet voor 'Pagina Opslaan'.<br />
+Hierbij belooft u ons tevens dat u deze tekst zelf heeft geschreven, of overgenomen uit een vrije, openbare bron.<br />
+<strong>GEBRUIK GEEN MATERIAAL DAT BESCHERMD WORDT DOOR AUTEURSRECHT, TENZIJ U DAARTOE TOESTEMMING HEEFT!</strong>",
+'copyrightwarning2'         => 'Al uw bijdragen aan {{SITENAME}} kunnen bewerkt, gewijzigd of verwijderd worden door andere gebruikers. Als u niet wilt dat uw teksten rigoureus aangepast worden door anderen, plaats ze hier dan niet.<br />
+U belooft ook u dat u de oorspronkelijke auteur bent van dit materiaal, of dat u het heeft gekopieerd uit een bron in het publieke domein, of een soortgelijke vrije bron (zie $1 voor details).
+<strong>GEBRUIK GEEN MATERIAAL DAT BESCHERMD WORDT DOOR AUTEURSRECHT, TENZIJ U DAARTOE TOESTEMMING HEEFT!</strong>',
+'longpagewarning'           => "<strong>Deze pagina is $1 kilobyte groot; sommige browsers hebben problemen met het bewerken van pagina's die groter zijn dan 32kb. Wellicht kan deze pagina gesplitst worden in kleinere delen.</strong>",
+'longpageerror'             => '<strong>ERROR: De tekst die u heeft toegevoegd heeft is $1 kilobyte
+groot, wat groter is dan het maximum van $2 kilobyte. Opslaan is niet mogelijk.</strong>',
+'readonlywarning'           => '<strong>WAARSCHUWING: De database accepteert geen bewerkingen, dus u kunt deze nu niet opslaan. Het is misschien verstandig uw tekst lokaal op te slaan in een bestand met kopiëren en plakken zodat u die hier later weer kunt invoegen.</strong>',
+'protectedpagewarning'      => '<strong>WAARSCHUWING! Deze beveiligde pagina kan alleen door gebruikers met beheerdersrechten bewerkt worden.</strong>',
+'semiprotectedpagewarning'  => "'''Let op:''' Deze pagina is beveiligd en kan alleen door geregistreerde gebruikers bewerkt worden.",
+'cascadeprotectedwarning'   => "'''Waarschuwing:''' Deze pagina is beveiligd en kan alleen door beheerders bewerkt worden, omdat deze is opgenomen in de volgende pagina's die beveiligd zijn met de cascade-optie:",
+'templatesused'             => 'Op deze pagina gebruikte sjablonen:',
+'templatesusedpreview'      => 'In deze voorvertoning gebruikte sjablonen:',
+'templatesusedsection'      => 'In deze sectie gebruikte sjablonen:',
+'template-protected'        => '(beveiligd)',
+'template-semiprotected'    => '(semibeveiligd)',
+'edittools'                 => '<!-- Deze tekst wordt weergegeven onder bewerkings- en uploadformulieren. -->',
+'nocreatetitle'             => "Het aanmaken van pagina's is beperkt",
+'nocreatetext'              => "Deze website heeft de mogelijkheid om nieuwe pagina's te maken beperkt.
+U kunt reeds bestaande pagina's wijzigen, of u kunt [[Special:Userlogin|zich aanmelden of een gebruiker aanmaken]].",
+
+# "Undo" feature
+'undo-success' => 'Hieronder staat de tekst waarin de wijziging ongedaan is gemaakt. Controleer voor het opslaan of het resultaat gewenst is.',
+'undo-failure' => 'De wijziging kan niet ongedaan gemaakt worden vanwege andere strijdige wijzigingen.',
+'undo-summary' => 'Versie $1 van [[Special:Contributions/$2]] ([[User talk:$2]]) ongedaan gemaakt',
+
+# Account creation failure
+'cantcreateaccounttitle' => 'Kan gebruiker niet aanmaken',
+'cantcreateaccounttext'  => 'Het aanmaken van gebruikers vanaf dit IP-adres (<b>$1</b>) is geblokkeerd. Dit komt mogelijk door aanhoudend vandalisme vanuit uw onderwijsinstelling of Internet service provider.',
+
+# History pages
+'revhistory'                  => 'Bewerkingsgeschiedenis',
+'viewpagelogs'                => 'Toon logboek voor deze pagina',
+'nohistory'                   => 'Deze pagina is nog niet bewerkt.',
+'revnotfound'                 => 'Bewerking niet gevonden',
+'revnotfoundtext'             => 'De opgevraagde oude versie van deze pagina is onvindbaar. Controleer a.u.b. de URL die u gebruikte om naar deze pagina te gaan.',
+'loadhist'                    => 'Bezig met het laden van de paginageschiedenis',
+'currentrev'                  => 'Huidige versie',
+'revisionasof'                => 'Versie op $1',
+'revision-info'               => 'Versie op $1 van $2',
+'previousrevision'            => '←Oudere versie',
+'nextrevision'                => 'Nieuwere versie→',
+'currentrevisionlink'         => 'Huidige versie',
+'cur'                         => 'huidig',
+'next'                        => 'volgende',
+'last'                        => 'vorige',
+'histlegend'                  => 'Selectie voor diff: selecteer de te vergelijken versies en toets ENTER of de knop onderaan.<br />
+Verklaring afkortingen: (huidig) = verschil met huidige versie, (vorige) = verschil met voorgaande versie, k = kleine wijziging',
+'deletedrev'                  => '[verwijderd]',
+'histfirst'                   => 'Oudste',
+'histlast'                    => 'Nieuwste',
+'rev-deleted-comment'         => '(opmerking verwijderd)',
+'rev-deleted-user'            => '(gebruiker verwijderd)',
+'rev-deleted-text-permission' => '<div class="mw-warning plainlinks">
+De geschiedenis van deze pagina is verwijderd uit de publieke archieven.
+Er kunnen details aanwezig zijn in het [{{fullurl:Special:Log/delete|page={{PAGENAMEE}}}} verwijderlogboek].
+</div>',
+'rev-deleted-text-view'       => '<div class="mw-warning plainlinks">
+De geschiedenis van deze pagina is verwijderd uit de publieke archieven.
+Als beheerder van deze site kunt u deze zien;
+er kunnen details aanwezig zijn in het [{{fullurl:Special:Log/delete|page={{PAGENAMEE}}}} verwijderlogboek].
+</div>',
+'rev-delundel'                => 'toon/verberg',
+
+'history-feed-title'          => 'Bewerkingsoverzicht',
+'history-feed-description'    => 'Bewerkingsoverzicht voor deze pagina op de wiki',
+'history-feed-item-nocomment' => '$1 op $2', # user at time
+'history-feed-empty'          => "De gevraagde pagina bestaat niet.
+Wellicht is die verwijderd of hernoemd.
+[[Special:Search|Doorzoek de wiki]] voor relevante pagina's.",
+
+# Revision deletion
+'revisiondelete'            => 'Verwijder/Herstel bewerkingen',
+'revdelete-nooldid-title'   => 'Geen doelversie',
+'revdelete-nooldid-text'    => 'U heeft geen doelversie(s) voor deze handeling opgegeven.',
+'revdelete-selected'        => 'Geselecteerde bewerking van [[:$1]]:',
+'revdelete-text'            => 'Verwijderde bewerkingen zijn nog steeds zichtbaar in de geschiedenis, maar de inhoud is niet langer publiek toegankelijk.
+
+Andere beheerders van deze wiki kunnen nog steeds de verborgen inhoud benaderen en de verwijdering ongedaan maken met behulp van dit scherm, tenzij er additionele restricties gelden die zijn ingesteld door de systeembeheerder.',
+'revdelete-legend'          => 'Stel versiebeperkingen in:',
+'revdelete-hide-text'       => 'Verberg de bewerkte tekst',
+'revdelete-hide-comment'    => 'Verberg de bewerkingssamenvatting',
+'revdelete-hide-user'       => 'Verberg gebruikersnaam/IP van de gebruiker',
+'revdelete-hide-restricted' => 'Pas deze beperkingen toe op zowel beheerders als anderen',
+'revdelete-log'             => 'Opmerking in logboek:',
+'revdelete-submit'          => 'Pas toe op de geselecteerde bewerking',
+'revdelete-logentry'        => 'zichtbaarheid van bewerkingen is gewijzigd voor [[$1]]',
+
+# Diffs
+'difference'                => '(Verschil tussen bewerkingen)',
+'loadingrev'                => 'bezig versie voor diff te laden',
+'lineno'                    => 'Regel $1:',
+'editcurrent'               => 'Bewerk de huidige versie van deze pagina',
+'selectnewerversionfordiff' => 'Selecteer een nieuwere versie voor de vergelijking',
+'selectolderversionfordiff' => 'Selecteer een oudere versie voor de vergelijking',
+'compareselectedversions'   => 'Vergelijk geselecteerde versies',
+'editundo'                  => 'ongedaan maken',
+'diff-multi'                => '({{plural:$1|Eén tussenliggende versie wordt|$1 tussenliggende versies worden}} niet getoond)',
+
+# Search results
+'searchresults'         => 'Zoekresultaten',
+'searchresulttext'      => 'Voor meer informatie over zoeken op {{SITENAME}}, zie [[Project:Zoeken|Zoeken op {{SITENAME}}]].',
+'searchsubtitle'        => "U zocht naar '''[[:$1]]'''",
+'searchsubtitleinvalid' => 'Voor zoekopdracht "$1"',
+'badquery'              => 'Verkeerd geformuleerde zoekopdracht',
+'badquerytext'          => 'Uw vraag kan niet verwerkt worden.
+Dit komt waarschijnlijk doordat u heeft gezocht op woorden met minder dan drie letters, wat niet mogelijk is.
+Mogelijk heeft u een verkeerde zoekopdracht gebruikt, zoals bijvoorbeeld "fish and and scales".
+Probeer het nog een keer.',
+'matchtotals'           => 'De zoekterm "$1" is gevonden in $2 onderwerpen en in de tekst van $3 pagina\'s.',
+'noexactmatch'          => "'''Er bestaat geen pagina met onderwerp  $1.''' U kunt deze [[:$1|aanmaken]].",
+'titlematches'          => 'Overeenkomst met onderwerp',
+'notitlematches'        => 'Geen resultaten gevonden',
+'textmatches'           => 'Overeenkomst met inhoud',
+'notextmatches'         => "Geen pagina's gevonden",
+'prevn'                 => 'vorige $1',
+'nextn'                 => 'volgende $1',
+'viewprevnext'          => '($1) ($2) ($3) tonen.',
+'showingresults'        => 'Hieronder staan <b>$1</b> resultaten vanaf resultaat <b>$2</b>.',
+'showingresultsnum'     => 'Hieronder staan <b>$3</b> resultaten vanaf resultaat <b>$2</b>.',
+'nonefound'             => "'''Opmerking''': mislukte zoekopdrachten worden vaak veroorzaakt door zoeken naar veelvoorkomende woorden als \"van\" en \"het\", die niet in de indexen worden opgenomen, of door meer dan één zoekterm op te geven. Alleen pagina's die alle zoektermen bevatten worden opgenomen in de resultaten.",
+'powersearch'           => 'Zoeken',
+'powersearchtext'       => 'Zoek in naamruimten:<br />$1<br />$2 Toon redirects<br />Zoek naar $3 $9',
+'searchdisabled'        => 'Zoeken in {{SITENAME}} is niet mogelijk. U kunt gebruik maken van Google. De gegevens over {{SITENAME}} zijn mogelijk niet bijgewerkt.',
+'blanknamespace'        => '(Hoofdnaamruimte)',
+
+# Preferences page
+'preferences'           => 'Voorkeuren',
+'mypreferences'         => 'Mijn voorkeuren',
+'prefsnologin'          => 'Niet aangemeld',
+'prefsnologintext'      => 'U dient [[Special:Userlogin|aangemeld]] te zijn om uw voorkeuren te kunnen instellen.',
+'prefsreset'            => 'Standaardvoorkeuren hersteld.',
+'qbsettings'            => 'Menubalk',
+'qbsettings-none'	=> 'Uitgeschakeld',
+'qbsettings-fixedleft'	=> 'Links vast',
+'qbsettings-fixedright'	=> 'Rechts vast',
+'qbsettings-floatingleft'	=> 'Links zwevend',
+'qbsettings-floatingright'	=> 'Rechts zwevend',
+'changepassword'        => 'Wachtwoord wijzigen',
+'skin'                  => 'Vormgeving',
+'math'                  => 'Formules',
+'dateformat'            => 'Datumopmaak',
+'datedefault'           => 'Geen voorkeur',
+'datetime'              => 'Datum en tijd',
+'math_failure'          => 'Parsen mislukt',
+'math_unknown_error'    => 'onbekende fout',
+'math_unknown_function' => 'onbekende functie',
+'math_lexing_error'     => 'lexicografische fout',
+'math_syntax_error'     => 'syntactische fout',
+'math_image_error'      => 'PNG-conversie is mislukt. Ga na of latex, dvips en gs correct geïnstalleerd zijn en converteer nogmaals',
+'math_bad_tmpdir'       => 'De map voor tijdelijke bestanden voor wiskundige formules bestaat niet of kan niet gemaakt worden',
+'math_bad_output'       => 'De map voor bestanden met wiskundige formules bestaat niet of kan niet gemaakt worden.',
+'math_notexvc'          => 'Kan het programma texvc niet vinden; stel alles in volgens de beschrijving in math/README.',
+'prefs-personal'        => 'Gebruikersprofiel',
+'prefs-rc'              => 'Recente wijzigingen',
+'prefs-watchlist'       => 'Volglijst',
+'prefs-watchlist-days'  => 'Aantal dagen in de volglijst:',
+'prefs-watchlist-edits' => 'Aantal bewerkingen in de uitgebreide volglijst:',
+'prefs-misc'            => 'Diversen',
+'saveprefs'             => 'Opslaan',
+'resetprefs'            => 'Standaardvoorkeuren herstellen',
+'oldpassword'           => 'Huidige wachtwoord:',
+'newpassword'           => 'Nieuwe wachtwoord:',
+'retypenew'             => 'Herhaling nieuwe wachtwoord:',
+'textboxsize'           => 'Bewerken',
+'rows'                  => 'Regels:',
+'columns'               => 'Kolommen:',
+'searchresultshead'     => 'Zoeken',
+'resultsperpage'        => 'Resultaten per pagina:',
+'contextlines'          => 'Regels per resultaat:',
+'contextchars'          => 'Context per regel:',
+'stubthreshold'         => "Drempelwaarde voor markering als 'beginnetje':",
+'recentchangescount'    => "Aantal pagina's in Recente wijzigingen:",
+'savedprefs'            => 'Uw voorkeuren zijn opgeslagen.',
+'timezonelegend'        => 'Tijdzone',
+'timezonetext'          => 'Het aantal uren dat uw lokale tijd afwijkt van de servertijd (UTC).',
+'localtime'             => 'Plaatselijke tijd',
+'timezoneoffset'        => 'Tijdsverschil¹',
+'servertime'            => 'Servertijd',
+'guesstimezone'         => 'Vanuit de browser toevoegen',
+'allowemail'            => 'E-mail van andere gebruikers toestaan',
+'defaultns'             => 'Zoek standaard in deze naamruimten:',
+'default'               => 'standaard',
+'files'                 => 'Bestanden',
+
+# User rights
+'userrights-lookup-user'     => 'Beheer gebruikersgroepen',
+'userrights-user-editname'   => 'Voer een gebruikersnaam in:',
+'editusergroup'              => 'Bewerk gebruikersgroepen',
+'userrights-editusergroup'   => 'Bewerk gebruikersgroepen',
+'saveusergroups'             => 'Gebruikersgroepen opslaan',
+'userrights-groupsmember'    => 'Lid van:',
+'userrights-groupsavailable' => 'Beschikbare groepen:',
+'userrights-groupshelp'      => 'Selecteer de groepen waaruit u de gebruiker wilt verwijderen of aan toe wilt voegen.
+Niet geselecteerde groepen worden niet gewijzigd. Deselecteer een groep met "Ctrl + linkermuisknop".',
+
+# Groups
+'group'            => 'Groep:',
+'group-sysop'      => 'Beheerders',
+'group-bureaucrat' => 'Bureaucraten',
+'group-all'        => '(alles)',
+
+'group-sysop-member'      => 'Beheerder',
+'group-bureaucrat-member' => 'Bureaucraat',
+
+'grouppage-bot'        => 'Project:Bots',
+'grouppage-sysop'      => 'Project:Beheerders',
+'grouppage-bureaucrat' => 'Project:Bureaucraten',
+
+# User rights log
+'rightslog'      => 'Gebruikersrechtenlogboek',
+'rightslogtext'  => 'Hieronder staan de wijzigingen in gebruikersrechten.',
+'rightslogentry' => 'wijzigde de gebruikersrechten voor $1 van $2 naar $3',
+'rightsnone'     => '(geen)',
+
+# Recent changes
+'changes'                           => 'wijzigingen',
+'recentchanges'                     => 'Recente wijzigingen',
+'recentchangestext'                 => 'Toon de meest recente wijzigingen op de wiki op deze pagina.',
+'recentchanges-feed-description'    => 'Volg de meest recente bewerkingen in deze wiki via deze feed.',
+'rcnote'                            => 'Hieronder staan de <strong>$1</strong> laatste bewerkingen in de laatste <strong>$2</strong> dagen, per $3.',
+'rcnotefrom'                        => 'Wijzigingen sinds <b>$2</b> (met een maximum van <b>$1</b> wijzigingen).',
+'rclistfrom'                        => 'Toon de wijzigingen vanaf $1',
+'rcshowhideminor'                   => '$1 kleine wijzigingen',
+'rcshowhideliu'                     => '$1 aangemelde gebruikers',
+'rcshowhideanons'                   => '$1 anonieme gebruikers',
+'rcshowhidepatr'                    => '$1 gecontroleerde bewerkingen',
+'rcshowhidemine'                    => '$1 mijn bewerkingen',
+'rclinks'                           => 'Toon de $1 laatste wijzigingen in de laatste $2 dagen<br />$3',
+'diff'                              => 'wijz',
+'hist'                              => 'gesch',
+'hide'                              => 'Verberg',
+'show'                              => 'Toon',
+'minoreditletter'                   => 'k',
+'number_of_watching_users_pageview' => '[$1 keer op een volglijst]',
+'rc_categories'                     => 'Toon alleen categorieën (scheid met een "|")',
+'rc_categories_any'                 => 'Elke',
+
+# Upload
+'upload'                      => 'Upload bestand',
+'uploadbtn'                   => 'Upload bestand',
+'reupload'                    => 'Opnieuw uploaden',
+'reuploaddesc'                => 'Terug naar het uploadformulier.',
+'uploadnologin'               => 'Niet aangemeld',
+'uploadnologintext'           => 'U dient [[Special:Userlogin|aangemeld]] te zijn
+om bestanden te uploaden.',
+'upload_directory_read_only'  => 'De webserver kan niet schrijven in de uploadmap ($1).',
+'uploaderror'                 => 'Uploadfout',
+'uploadtext'                  => "Gebruik het onderstaande formulier om bestanden te uploaden. Om eerder geüploade bestanden te bekijken of te zoeken kunt u naar de [[Special:Imagelist|lijst van geüploade bestanden]] gaan. Uploads en verwijderingen worden bijgehouden in het [[Special:Log/upload|uploadlogboek]].
+
+Om de afbeelding of het bestand in te voegen in een pagina kunt u een van de volgende codes gebruiken, al naar gelang het bestandsformaat dat van toepassing is:
+
+* '''<nowiki>[[</nowiki>{{ns:Image}}<nowiki>:Bestand.jpg]]</nowiki>'''
+* '''<nowiki>[[</nowiki>{{ns:Image}}<nowiki>:Bestand.png|alternatieve tekst]]</nowiki>'''
+* '''<nowiki>[[</nowiki>{{ns:Media}}<nowiki>:Bestand.ogg]]</nowiki>'''
+
+De laatste link is bedoeld voor mediabestanden.",
+'uploadlog'                   => 'uploadlogboek',
+'uploadlogpage'               => 'Uploadlogboek',
+'uploadlogpagetext'           => 'Hieronder staan de nieuwste bestanden.',
+'filename'                    => 'Bestandsnaam',
+'filedesc'                    => 'Samenvatting',
+'fileuploadsummary'           => 'Samenvatting:',
+'filestatus'                  => 'Auteursrechtensituatie',
+'filesource'                  => 'Bron',
+'copyrightpage'               => 'Project:Auteursrechten',
+'copyrightpagename'           => '{{SITENAME}} auteursrechten',
+'uploadedfiles'               => 'Geüploade bestanden',
+'ignorewarning'               => 'Negeer deze waarschuwing en sla het bestand toch op.',
+'ignorewarnings'              => 'Negeer alle waarschuwingen',
+'minlength'                   => 'Bestandsnamen hebben een minimale lengte van drie letters.',
+'illegalfilename'             => 'De bestandsnaam "$1" bevat ongeldige karakters. Geef het bestand een andere naam, en probeer het dan opnieuw te uploaden.',
+'badfilename'                 => 'De naam van het bestand is gewijzigd in "$1".',
+'badfiletype'                 => '".$1" is geen aanbevolen bestandsformaat.',
+'large-file'                  => 'Aanbeveling: maak bestanden niet groter dan $1, dit bestand is $2.',
+'largefileserver'             => 'Het bestand is groter dan de instelling van de server toestaat.',
+'emptyfile'                   => 'Het bestand dat u heeft geüpload lijkt leeg te zijn. Dit zou kunnen komen door een typefout in de bestandsnaam. Ga a.u.b. na of u dit bestand werkelijk bedoelde te uploaden.',
+'fileexists'                  => 'Er bestaat al een bestand met deze naam. Controleer $1 als u niet zeker weet of u het huidige bestand wilt overschrijven.',
+'fileexists-forbidden'        => 'Er bestaat al een bestand met deze naam. Upload uw bestand onder een andere naam.
+[[Image:$1|thumb|center|$1]]',
+'fileexists-shared-forbidden' => 'Er bestaat al een bestand met deze naam bij de gedeelte bestanden. Upload het bestand onder een andere naam. [[Image:$1|thumb|center|$1]]',
+'successfulupload'            => 'De upload is geslaagd',
+'fileuploaded'                => 'De upload van bestand $1 is geslaagd.
+Volg alstublieft deze link: $2 naar de beschrijvingspagina en voeg informatie toe over het bestand, zoals waar het vandaan komt, wanneer en door wie het is gemaakt en wat u er nog meer over weet.
+
+Een afbeelding kunt u als volgt toevoegen: <tt><nowiki>[[Image:$1|thumb|Beschrijving]]</nowiki></tt>',
+'uploadwarning'               => 'Uploadwaarschuwing',
+'savefile'                    => 'Bestand opslaan',
+'uploadedimage'               => 'heeft "[[$1]]" geüpload',
+'uploaddisabled'              => 'Uploaden is uitgeschakeld',
+'uploaddisabledtext'          => 'Het uploaden van bestanden is uitgeschakeld op deze wiki.',
+'uploadscripted'              => 'Dit bestand bevat HTML- of scriptcode die foutief door uw browser kan worden weergegeven.',
+'uploadcorrupt'               => 'Het bestand is corrupt of heeft een onjuiste extensie. Controleer het bestand en upload het opnieuw.',
+'uploadvirus'                 => 'Het bestand bevat een virus! Details: $1',
+'sourcefilename'              => 'Oorspronkelijke bestandsnaam',
+'destfilename'                => 'Opslaan als',
+'watchthisupload'             => 'Volg deze pagina',
+'filewasdeleted'              => 'Er is eerder een bestand met deze naam verwijderd. Raadpleeg het $1 voordat u het opnieuw toevoegt.',
+
+'upload-proto-error'      => 'Onjuist protocol',
+'upload-proto-error-text' => "Uploads via deze methode vereisen URL's die beginnen met <code>http://</code> of <code>ftp://</code>.",
+'upload-file-error'       => 'Interne fout',
+'upload-file-error-text'  => 'Er is een interne fout opgetreden bij het aanmaken van een tijdelijk bestand op de server. Neem alstublieft contact op met een systeembeheerder.',
+'upload-misc-error'       => 'Onbekende uploadfout',
+'upload-misc-error-text'  => 'Er is tijdens het uploaden een onbekende fout opgetreden. Controleer alstublieft of de URL geldig en toegankelijk is en probeer het opnieuw. Als het probleem blijft bestaan, neem dan contact op met een systeembeheerder.',
+
+# Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
+'upload-curl-error6'       => 'De URL is niet bereikbaar',
+'upload-curl-error6-text'  => 'De opgegeven URL is niet bereikbaar. Controleer alstublieft of de URL juist is en de site beschikbaar is.',
+'upload-curl-error28'      => 'Upload timeout',
+'upload-curl-error28-text' => 'Het duurt te lang voordat antwoord van de site is ontvangen. Controleer alstublieft of de site beschikbaar is, wacht even en probeer het dan opnieuw. Probeer het anders op een minder druk tijdstip.',
+
+'license'            => 'Licentie',
+'nolicense'          => 'Maak een keuze',
+'upload_source_url'  => ' (een geldige, publiek toegankelijke URL)',
+'upload_source_file' => ' (een bestand op uw computer)',
+
+# Image list
+'imagelist'                 => 'Bestandslijst',
+'imagelisttext'             => "Hier volgt een lijst met '''$1''' {{plural:$1|bestand|bestanden}} gesorteerd $2.",
+'imagelistforuser'          => 'Hieronder staan alleen bestanden die door $1 zijn toegevoegd.',
+'getimagelist'              => 'bezig met ophalen bestandslijst',
+'ilsubmit'                  => 'Zoek',
+'showlast'                  => 'Toon de laatste $1 afbeeldingen gesorteerd $2.',
+'byname'                    => 'op naam',
+'bydate'                    => 'op datum',
+'bysize'                    => 'op grootte',
+'imgdelete'                 => 'verw',
+'imgdesc'                   => 'beschrijving',
+'imgfile'                   => 'bestand',
+'imglegend'                 => 'Verklaring: (desc) = toon/bewerk bestandsbeschrijving.',
+'imghistory'                => 'Bestandsgeschiedenis',
+'revertimg'                 => 'herstel',
+'deleteimg'                 => 'verw',
+'deleteimgcompletely'       => 'Verwijder alle versies van dit bestand',
+'imghistlegend'             => 'Verklaring: (huidig) = huidige afbeelding, (verw) = verwijder de oude versie, (herstel) = gebruik eerdere versie.<br />
+<i>Klik op het tijdstip om de versie van het bestand te zien die op dat tijdstip is geüpload.</i>.',
+'imagelinks'                => 'Bestandsverwijzingen',
+'linkstoimage'              => "Dit bestand wordt op de volgende pagina's gebruikt:",
+'nolinkstoimage'            => 'Geen enkele pagina gebruikt dit bestand.',
+'sharedupload'              => 'Dit bestand is een gedeelde upload en kan ook door andere projecten gebruikt worden.',
+'shareduploadwiki'          => 'Zie $1 voor verdere informatie.',
+'shareduploadwiki-linktext' => 'bestandsbeschrijving',
+'noimage'                   => 'Er bestaat nog geen bestand met deze naam. U kunt het $1.',
+'noimage-linktext'          => 'uploaden',
+'uploadnewversion-linktext' => 'Upload een nieuwe versie van dit bestand',
+'imagelist_date'            => 'Datum',
+'imagelist_name'            => 'Naam',
+'imagelist_user'            => 'Gebruiker',
+'imagelist_size'            => 'Grootte (bytes)',
+'imagelist_description'     => 'Beschrijving',
+'imagelist_search_for'      => 'Zoek naar bestand:',
+
+# MIME search
+'mimesearch' => 'Zoeken op MIME-type',
+'mimetype'   => 'MIME-type:',
+
+# Unwatched pages
+'unwatchedpages' => "Pagina's die niet op een volglijst staan",
+
+# List redirects
+'listredirects' => 'Lijst van doorverwijzingen',
+
+# Unused templates
+'unusedtemplates'     => 'Ongebruikte sjablonen',
+'unusedtemplatestext' => 'Deze pagina geeft alle pagina\'s weer in de naamruimte sjabloon die op geen enkele pagina gebruikt worden. Vergeet niet de "Links naar deze pagina" te controleren alvorens dit sjabloon te verwijderen.',
+'unusedtemplateswlh'  => 'andere links',
+
+# Random redirect
+'randomredirect' => 'Willekeurige doorverwijzing',
+
+# Statistics
+'statistics'             => 'Statistieken',
+'sitestats'              => 'Statistieken betreffende {{SITENAME}} NL',
+'userstats'              => 'Gebruikerstatistieken',
+'sitestatstext'          => "In de database staan '''$1''' pagina's, inclusief overlegpagina's, pagina's over {{SITENAME}}, beginnetjes, doorverwijzingen en andere pagina's die waarschijnlijk geen content zijn.
+Er zijn waarschijnlijk '''$2''' pagina's met echte content.
+
+Er zijn '''$8''' bestanden toegevoegd.
+
+Er zijn '''$3''' pagina's getoond en '''$4''' bewerkingen gemaakt sinds de wiki is opgezet.
+Dat komt uit op gemiddeld '''$5''' bewerkingen per pagina en '''$6''' getoonde pagina's per bewerking.
+
+De lengte van de [http://meta.wikimedia.org/wiki/Help:Job_queue job queue] is '''$7'''.",
+'userstatstext'          => "Er zijn $1 geregistreerde gebruikers; hiervan zijn er '''$2''' (of '''$4%''') $5.",
+'statistics-mostpopular' => "Meest bekeken pagina's",
+
+'disambiguations'      => "Doorverwijspagina's",
+'disambiguationspage'  => 'Template:Disambig',
+'disambiguations-text' => "Hieronder staan pagina's die verwijzen naar een '''doorverwijspagina'''. Deze horen waarschijnlijk direct naar het juiste onderwerp te verwijzen. <br />Een pagina wordt gezien als dooverwijspagina als er een sjabloon op staat dat gelinkt is vanaf [[MediaWiki:disambiguationspage]]",
+
+'doubleredirects'     => 'Dubbele doorverwijzingen',
+'doubleredirectstext' => 'Op elke regel staat de eerste doorverwijspagina, de tweede doorverwijspagina en de eerste regel van de tweede doorverwijzing. Meestal is laatste pagina het eigenlijke doel.',
+
+'brokenredirects'        => 'Onjuiste doorverwijzingen',
+'brokenredirectstext'    => "Hieronder staan doorverwijspagina's die een doorverwijzing bevatten naar een niet-bestaande pagina.",
+'brokenredirects-edit'   => '(bewerken)',
+'brokenredirects-delete' => '(verwijderen)',
+
+# Miscellaneous special pages
+'ncategories'             => '$1 {{PLURAL:$1|categorie|categorieën}}',
+'nlinks'                  => '$1 {{PLURAL:$1|verwijzing|verwijzingen}}',
+'nmembers'                => '$1 {{PLURAL:$1|item|items}}',
+'nrevisions'              => '$1 {{PLURAL:$1|versie|versies}}',
+'nviews'                  => '$1 keer bekeken',
+'lonelypages'             => "Weespagina's",
+'lonelypagestext'         => "Naar de onderstaande pagina's wordt vanuit deze wiki niet verwezen.",
+'uncategorizedpages'      => "Niet-gecategoriseerde pagina's",
+'uncategorizedcategories' => 'Niet-gecategoriseerde categorieën',
+'uncategorizedimages'     => 'Niet-gecatoriseerde afbeeldingen',
+'unusedcategories'        => 'Ongebruikte categorieën',
+'unusedimages'            => 'Ongebruikte bestanden',
+'popularpages'            => "Populaire pagina's",
+'wantedcategories'        => 'Niet-bestaande categorieën met de meeste verwijzingen',
+'wantedpages'             => "Niet-bestaande pagina's met de meeste verwijzingen",
+'mostlinked'              => "Pagina's waar het meest naar verwezen wordt",
+'mostlinkedcategories'    => 'Categorieën waar het meest naar verwezen wordt',
+'mostcategories'          => "Pagina's met de meeste categorieën",
+'mostimages'              => 'Meest gebruikte bestanden',
+'mostrevisions'           => "Pagina's met de meeste bewerkingen",
+'allpages'                => "Alle pagina's",
+'prefixindex'             => 'Prefix-index',
+'randompage'              => 'Willekeurige pagina',
+'shortpages'              => "Korte pagina's",
+'longpages'               => "Lange pagina's",
+'deadendpages'            => "Pagina's zonder links",
+'deadendpagestext'        => "De onderstaande pagina's verwijzen niet naar andere pagina's in deze wiki.",
+'protectedpages'          => "Beveiligde pagina's",
+'protectedpagestext'      => "De volgende pagina's zijn beveiligd en kunnen niet bewerkt of hernoemd worden",
+'listusers'               => 'Gebruikerslijst',
+'specialpages'            => "Speciale pagina's",
+'spheading'               => "Speciale pagina's voor alle gebruikers",
+'restrictedpheading'      => "Speciale pagina's met beperkte toegang",
+'recentchangeslinked'     => 'Verwante wijzigingen',
+'rclsub'                  => '(van pagina\'s waarnaar "$1" verwijst)',
+'newpages'                => "Nieuwe pagina's",
+'newpages-username'       => 'Gebruikersnaam:',
+'ancientpages'            => "Oudste pagina's",
+'intl'                    => 'Taallinks',
+'move'                    => 'Hernoem',
+'movethispage'            => 'Hernoem pagina',
+'unusedimagestext'        => '<p>Let op! Het is mogelijk dat er via een directe link verwezen wordt naar een bestand. Een bestand kan hier dus ten onrechte opgenomen zijn.',
+'unusedcategoriestext'    => 'Hieronder staan categorieën die zijn aangemaakt, maar door geen enkele pagina of andere categorie gebruikt worden.',
+
+# Book sources
+'booksources'               => 'Boekinformatie',
+'booksources-search-legend' => 'Zoek informatie over een boek',
+'booksources-go'            => 'Zoek',
+'booksources-text'          => 'Hieronder staat een lijst met koppelingen naar andere websites die nieuwe of gebruikte boeken verkopen, en die wellicht meer informatie over het boek dat u zoekt hebben:',
+
+'categoriespagetext' => 'Deze wiki kent de volgende categorieën.',
+'data'               => 'Gegevens',
+'userrights'         => 'Gebruikersrechtenbeheer',
+'groups'             => 'Gebruikersgroepen',
+'alphaindexline'     => '$1 tot $2',
+'version'            => 'Softwareversie',
+'log'                => 'Logboeken',
+'alllogstext'        => 'Dit is het gecombineerde logboek. U kunt ook kiezen voor specifieke logboeken en filteren op gebruiker en paginanaam.',
+'logempty'           => 'Er zijn geen regels in het logboek die voldoen aan deze criteria.',
+
+# Special:Allpages
+'nextpage'          => 'Volgende pagina ($1)',
+'prevpage'          => 'Vorige pagina ($1)',
+'allpagesfrom'      => "Toon pagina's vanaf:",
+'allarticles'       => "Alle pagina's",
+'allinnamespace'    => "Alle pagina's (naamruimte $1)",
+'allnotinnamespace' => "Alle pagina's (niet in naamruimte $1)",
+'allpagesprev'      => 'Vorige',
+'allpagesnext'      => 'Volgende',
+'allpagessubmit'    => 'OK',
+'allpagesprefix'    => "Toon pagina's die beginnen met:",
+'allpagesbadtitle'  => 'De opgegeven paginanaam is ongeldig of had een intertaal of interwiki voorvoegsel. Mogelijk bevatte de naam karakters die niet gebruikt mogen worden in paginanamen.',
+
+# Special:Listusers
+'listusersfrom' => 'Toon gebruikers vanaf:',
+
+# E-mail user
+'mailnologin'     => 'Geen verzendadres beschikbaar',
+'mailnologintext' => 'U dient [[Special:Userlogin|aangemeld]] te zijn en een geldig e-mailadres in uw [[Special:Preferences|voorkeuren]] te vermelden om andere gebruikers te mailen.',
+'emailuser'       => 'E-mail deze gebruiker',
+'emailpage'       => 'E-mail gebruiker',
+'emailpagetext'   => 'Als deze gebruiker een geldig e-mailadres heeft opgegeven dan kunt u via dit formulier een bericht verzenden. Het e-mailadres dat u heeft opgegeven bij uw voorkeuren wordt als afzender gebruikt.',
+'usermailererror' => 'Foutmelding bij het verzenden:',
+'defemailsubject' => '{{SITENAME}} e-mail',
+'noemailtitle'    => 'Van deze gebruiker is geen e-mailadres bekend',
+'noemailtext'     => 'Deze gebruiker heeft geen e-mailadres opgegeven of wil geen e-mail ontvangen van andere gebruikers.',
+'emailfrom'       => 'Van',
+'emailto'         => 'Aan',
+'emailsubject'    => 'Onderwerp',
+'emailmessage'    => 'Bericht',
+'emailsend'       => 'Verstuur',
+'emailccme'       => 'Stuur een kopie van dit bericht naar mijn e-mailadres.',
+'emailccsubject'  => 'Kopie van uw bericht aan $1: $2',
+'emailsent'       => 'E-mail verzonden',
+'emailsenttext'   => 'Uw e-mail is verzonden.',
+
+# Watchlist
+'watchlist'            => 'Volglijst',
+'mywatchlist'            => 'Volglijst',
+'watchlistfor'         => "(voor '''$1''')",
+'nowatchlist'          => 'Uw volglijst is leeg.',
+'watchlistanontext'    => '$1 is verplicht om uw volglijst in te zien of te wijzigen.',
+'watchlistcount'       => "'''Uw volglijst bevat {{PLURAL:$1|één pagina|$1 pagina's}}, inclusief overlegpagina's.'''",
+'clearwatchlist'       => 'Wis volglijst',
+'watchlistcleartext'   => 'Weet u zeker dat u ze wilt verwijderen?',
+'watchlistclearbutton' => 'Wis volglijst',
+'watchlistcleardone'   => "Uw volglijst is gewist. Er {{PLURAL:$1|is één pagina|zijn $1 pagina's}} verwijderd).",
+'watchnologin'         => 'U bent niet aangemeld',
+'watchnologintext'     => 'U dient [[Special:Userlogin|aangemeld]] te zijn om uw volglijst te bewerken.',
+'addedwatch'           => 'Toegevoegd aan volglijst',
+'addedwatchtext'       => "De pagina \"[[:\$1]]\" is toegevoegd aan uw [[Special:Watchlist|volglijst]].
+Toekomstige bewerkingen van deze pagina en de bijbehorende overlegpagina worden op [[Special:Watchlist|uw volglijst]] vermeld en worden '''vet''' weergegeven in de [[Special:Recentchanges|lijst van recente wijzigingen]].
+
+Indien u een pagina niet langer wilt volgen, ga dan naar de pagina en klik op \"Niet volgen\" in de menubalk.",
+'removedwatch'         => 'Verwijderd van volglijst',
+'removedwatchtext'     => 'De pagina "[[:$1]]" is van uw volglijst verwijderd.',
+'watch'                => 'Volg',
+'watchthispage'        => 'Volg deze pagina',
+'unwatch'              => 'Niet volgen',
+'unwatchthispage'      => 'Niet meer volgen',
+'notanarticle'         => 'Is geen pagina',
+'watchnochange'        => "Geen van de pagina's op uw volglijst is in deze periode bewerkt.",
+'watchdetails'         => "* Er {{PLURAL:$1|staat één pagina|staan $1 pagina's}} op uw volglijst, exclusief overlegpagina's
+* [[Special:Watchlist/edit|Toon en bewerk de volledige volglijst]]
+* [[Special:Watchlist/clear|Verwijder alle pagina's van de volglijst]]",
+'wlheader-enotif'      => '* U wordt per e-mail gewaarschuwd',
+'wlheader-showupdated' => "* Pagina's die zijn bewerkt sinds uw laatste bezoek worden '''vet''' weergegeven",
+'watchmethod-recent'   => "controleer recente wijzigingen op pagina's op volglijst",
+'watchmethod-list'     => "controleer pagina's op volglijst op wijzigingen",
+'removechecked'        => 'Verwijderen',
+'watchlistcontains'    => "Er staan $1 pagina's op uw volglijst.",
+'watcheditlist'        => "Hieronder staan alle pagina's op uw volglijst, alfabetisch gesorteerd. Vink de vakjes aan voor de pagina's die u wilt verwijderen en druk dan op 'Verwijderen' onderaan deze pagina. Door een pagina te verwijderen, verwijdert u ook het volgen van de bijbehorende overlegpagina en vice versa.",
+'removingchecked'      => "De aangegeven pagina's worden van uw volglijst verwijderd...",
+'couldntremove'        => "Het was niet mogelijk object '$1' te verwijderen...",
+'iteminvalidname'      => "Probleem met object '$1', ongeldige naam...",
+'wlnote'               => 'Hieronder staan de laatste $1 wijzigingen in de laatste $2 uur.',
+'wlshowlast'           => 'Toon de laatste $1 uur $2 dagen $3',
+'wlsaved'              => 'Dit is een opgeslagen versie van uw volglijst.',
+'watchlist-show-bots'  => 'Toon botbewerkingen',
+'watchlist-hide-bots'  => 'Verberg botbewerkingen',
+'watchlist-show-own'   => 'Toon mijn bewerkingen',
+'watchlist-hide-own'   => 'Verberg mijn bewerkingen',
+'watchlist-show-minor' => 'Toon kleine bewerkingen',
+'watchlist-hide-minor' => 'Verberg kleine bewerkingen',
+'wldone'               => 'Uitgevoerd.',
+
+# Displayed when you click the "watch" button and it's in the process of watching
+'watching'   => 'Bezig met plaatsen op de volglijst...',
+'unwatching' => 'Bezig met verwijderen van de volglijst...',
+
+'enotif_mailer'      => '{{SITENAME}} waarschuwingssysteem',
+'enotif_reset'       => "Markeer alle pagina's als bezocht",
+'enotif_newpagetext' => 'Dit is een nieuwe pagina.',
+'changed'            => 'gewijzigd',
+'created'            => 'aangemaakt',
+'enotif_subject'     => 'Pagina $PAGETITLE op {{SITENAME}} is $CHANGEDORCREATED door $PAGEEDITOR',
+'enotif_lastvisited' => 'Zie $1 voor alle wijzigingen sinds uw laatste bezoek.',
+'enotif_body'        => 'Beste $WATCHINGUSERNAME,
+
+De pagina $PAGETITLE op {{SITENAME}} is $CHANGEDORCREATED op $PAGEEDITDATE door $PAGEEDITOR, zie $PAGETITLE_URL voor de huidige versie.
+
+$NEWPAGE
+
+Samenvatting van de wijziging: $PAGESUMMARY $PAGEMINOREDIT
+
+Contactgegevens van de auteur:
+E-mail: $PAGEEDITOR_EMAIL
+Wiki: $PAGEEDITOR_WIKI
+
+Tenzij u deze pagina bezoekt komen er geen verdere berichten. Op uw volglijst kunt u voor alle gevolgde pagina\'s de waarschuwingsinstellingen opschonen.
+
+             Groet van uw {{SITENAME}} waarschuwingssysteem.
+
+--
+U kunt uw volglijstinstellingen wijzigen op:
+{{fullurl:Special:Watchlist/edit}}
+
+Feedback en andere assistentie:
+{{fullurl:Help:Contents}}',
+
+# Delete/protect/revert
+'deletepage'                  => 'Verwijder pagina',
+'confirm'                     => 'Bevestig',
+'excontent'                   => "De inhoud was: '$1'",
+'excontentauthor'             => "inhoud was: '$1' ('[[Special:Contributions/$2|$2]]' was de enige auteur)",
+'exbeforeblank'               => "De inhoud was: '$1'",
+'exblank'                     => 'pagina was leeg',
+'confirmdelete'               => 'Bevestig verwijdering',
+'deletesub'                   => '("$1" aan het verwijderen)',
+'historywarning'              => 'Waarschuwing: de pagina die u wilt verwijderen heeft meerdere versies:',
+'confirmdeletetext'           => 'U staat op het punt een pagina of bestand voorgoed te verwijderen, inclusief de geschiedenis. Bevestig hieronder dat dit inderdaad uw bedoeling is, dat u de gevolgen begrijpt en dat uw verwijdering overeenkomt met het beleid op deze wiki.',
+'actioncomplete'              => 'Handeling voltooid.',
+'deletedtext'                 => '"$1" is verwijderd. Zie $2 voor een overzicht van recente verwijderingen.',
+'deletedarticle'              => 'verwijderde "[[$1]]"',
+'dellogpage'                  => "Logboek verwijderde pagina's",
+'dellogpagetext'              => "Hieronder staan recent verwijderde pagina's en bestanden.",
+'deletionlog'                 => "logboek verwijderde pagina's",
+'reverted'                    => 'Eerdere versie hersteld',
+'deletecomment'               => 'Reden voor verwijderen',
+'imagereverted'               => 'Herstel naar de eerdere versie is geslaagd.',
+'rollback'                    => 'Wijzigingen ongedaan maken',
+'rollback_short'              => 'Terugdraaien',
+'rollbacklink'                => 'terugdraaien',
+'rollbackfailed'              => 'Ongedaan maken van wijzigingen mislukt.',
+'cantrollback'                => 'Ongedaan maken van wijzigingen onmogelijk: deze pagina heeft slechts 1 auteur.',
+'alreadyrolled'               => 'Het is niet mogelijk om de bewerking van de pagina [[:$1]] door [[User:$2|$2]] ([[User talk:$2|overleg]]) ongedaan te maken. Iemand anders heeft deze pagina al bewerkt of hersteld naar een eerdere versie. 
+
+De meest recente bewerking is gemaakt door [[User:$3|$3]] ([[User talk:$3|overleg]]).',
+'editcomment'                 => 'Bewerkingssamenvatting: "<i>$1</i>".', # only shown if there is an edit comment
+'revertpage'                  => 'Wijzigingen door [[Special:Contributions/$2|$2]] hersteld tot de laatste versie door [[User:$1|$1]].',
+'sessionfailure'              => 'Er lijkt een probleem te zijn met uw aanmeldsessie. Uw handeling is gestopt uit voorzorg tegen een beveiligingsrisico (dat bestaat uit mogelijke "hijacking" van deze sessie). Ga een pagina terug, laad die pagina opnieuw en probeer het nog eens.',
+'protectlogpage'              => "Logboek beveiligde pagina's",
+'protectlogtext'              => "Hieronder staan pagina's die recentelijk beveiligd zijn, of waarvan de beveiliging is opgeheven. Zie de [[Special:Protectedpages|lijst met beveiligde pagina's]] voor all huidige beveiligde pagina's.",
+'protectedarticle'            => '"[[$1]]" beveiligd',
+'unprotectedarticle'          => 'beveiliging "[[$1]]" opgeheven',
+'protectsub'                  => '(Beveilig "$1")',
+'confirmprotecttext'          => 'Wilt u deze pagina inderdaad beveiligen?',
+'confirmprotect'              => 'Bevestig beveiliging',
+'protectmoveonly'             => 'Alleen beveiligen tegen hernoemen',
+'protectcomment'              => 'Reden voor beveiligen',
+'protectexpiry'               => 'Duur',
+'protect_expiry_invalid'      => 'De aangegeven duur is ongeldig.',
+'unprotectsub'                => '(Beveiliging "$1" opgeheven)',
+'confirmunprotecttext'        => 'Wilt u inderdaad de beveiliging van deze pagina opheffen?',
+'confirmunprotect'            => 'Bevestig opheffen beveiliging',
+'unprotectcomment'            => 'Reden voor opheffen beveiliging',
+'protect-unchain'             => 'Maak hernoemen mogelijk',
+'protect-text'                => 'Hier kunt u het beveiligingsniveau voor de pagina <strong>$1</strong> bekijken en wijzigen.',
+'protect-viewtext'            => 'U heeft geen rechten om de beveiliging te wijzigen. Dit zijn de huidige beveiligingsinstellingen voor <strong>$1</strong>:',
+'protect-default'             => '(standaard)',
+'protect-level-autoconfirmed' => 'Blokkeer niet-geregistreerde gebruikers',
+'protect-level-sysop'         => 'Alleen beheerders',
+'protect-summary-cascade'     => 'cascade',
+'protect-expiring'            => 'verloopt op $1',
+'protect-cascade'             => "Cascadebeveiliging - beveilig alle pagina's en sjablonen die in deze pagina opgenomen zijn.",
+
+# Restrictions (nouns)
+'restriction-edit' => 'Bewerk',
+'restriction-move' => 'Hernoem',
+
+# Restriction levels
+'restriction-level-sysop'         => 'volledig beveiligd',
+'restriction-level-autoconfirmed' => 'semibeveiligd',
+
+# Undelete
+'undelete'                 => "Toon verwijderde pagina's",
+'undeletepage'             => "Verwijderde pagina's tonen en terugplaatsen",
+'viewdeletedpage'          => "Toon verwijderde pagina's",
+'undeletepagetext'         => "Hieronder staan pagina's die zijn verwijderd en vanuit het archief teruggeplaatst kunnen worden.",
+'undeleteextrahelp'        => "Om de hele pagina inclusief alle eerdere versies terug te plaatsen: laat alle hokjes onafgevinkt en klik op '''''Terugplaatsen'''''. Om slechts bepaalde versies terug te zetten: vink de terug te plaatsen versies aan en klik op '''''Terugplaatsen'''''. Als u op '''''Reset''''' klikt wordt het toelichtingsveld leeggemaakt en worden alle versies gedeselecteerd.",
+'undeletearticle'          => 'Verwijderde pagina terugplaatsen',
+'undeleterevisions'        => '$1 versi{{PLURAL:$1|e|es}} gearchiveerd',
+'undeletehistory'          => 'Als u een pagina terugplaatst, worden alle versies hersteld. Als er al een nieuwe pagina met dezelfde naam is aangemaakt, worden deze versies teruggeplaatst en blijft de huidige versie in tact.',
+'undeletehistorynoadmin'   => 'Deze pagina is verwijderd. De reden hiervoor staat hieronder, samen met de details van de gebruikers die deze pagina hebben bewerkt vóór de verwijdering. De verwijderde inhoud van de pagina is alleen zichtbaar voor beheerders.',
+'undelete-revision'        => 'Verwijderde versie van $1 van $2',
+'undeleterevision-missing' => 'Ongeldige of missende versie. Mogelijk heeft u een verkeerde verwijzing of is de versie hersteld of verwijderd uit het archief.',
+'undeletebtn'              => 'Terugplaatsen',
+'undeletecomment'          => 'Toelichting:',
+'undeletedarticle'         => '"[[$1]]" is teruggeplaatst',
+'undeletedrevisions'       => '$1 versies teruggeplaatst',
+'undeletedrevisions-files' => '$1 versies en $2 bestand(en) teruggeplaatst',
+'undeletedfiles'           => '$1 bestand(en) teruggeplaatst',
+'cannotundelete'           => 'Verwijderen mislukt. Misschien heeft een andere gebruiker de pagina al verwijderd.',
+'undeletedpage'            => "<big>'''$1 is teruggeplaatst'''</big>
+
+In het [[Special:Log/delete|verwijderlogboek]] staan recente verwijderingen en herstelhandelingen.",
+'undelete-header'          => "Zie [[Special:Log/delete|het logboek verwijderde pagina's]] voor recent verwijderde pagina's.",
+'undelete-search-box'      => "Doorzoek verwijderde pagina's",
+'undelete-search-prefix'   => "Toon pagina's die beginnen met:",
+'undelete-search-submit'   => 'Zoek',
+'undelete-no-results'      => "Geen pagina's gevonden in het archief met verwijderde pagina's.",
+
+# Namespace form on various pages
+'namespace' => 'Naamruimte:',
+'invert'    => 'Omgekeerde selectie',
+
+# Contributions
+'contributions' => 'Bijdragen gebruiker',
+'mycontris'     => 'Mijn bijdragen',
+'contribsub2'    => 'Voor $1 ($2)',
+'nocontribs'    => 'Geen wijzigingen gevonden die aan de gestelde criteria voldoen.',
+'ucnote'        => 'Hieronder staan de laatste <b>$1</b> wijzigingen van deze gebruiker in de laatste <b>$2</b> dagen.',
+'uclinks'       => 'Toon de laatste $1 wijzigingen; toon de laatste $2 dagen.',
+'uctop'         => ' (laatste wijziging)',
+'newbies'       => 'nieuwelingen',
+
+'sp-contributions-newest'      => 'Nieuwste',
+'sp-contributions-oldest'      => 'Oudste',
+'sp-contributions-newer'       => '$1 nieuwere',
+'sp-contributions-older'       => '$1 oudere',
+'sp-contributions-newbies-sub' => 'Voor nieuwelingen',
+'sp-contributions-blocklog'    => 'Blokkeerlogboek',
+
+'sp-newimages-showfrom' => 'Toon nieuwe afbeeldingen vanaf $1',
+
+# What links here
+'whatlinkshere' => 'Verwijzingen naar deze pagina',
+'notargettitle' => 'Geen doelpagina',
+'notargettext'  => 'U heeft niet opgegeven voor welke pagina of gebruiker u deze handeling wilt uitvoeren.',
+'linklistsub'   => '(Lijst van verwijzingen)',
+'linkshere'     => "De volgende pagina's verwijzen naar '''[[:$1]]''':",
+'nolinkshere'   => "Geen enkele pagina verwijst naar '''[[:$1]]'''.",
+'isredirect'    => 'redirectpagina',
+'istemplate'    => 'ingevoegd als sjabloon',
+
+# Block/unblock
+'blockip'                     => 'Gebruiker blokkeren',
+'blockiptext'                 => "Gebruik het onderstaande formulier om schrijftoegang voor een gebruiker of IP-adres in te trekken. Doe dit alleen als bescherming tegen vandalisme en in overeenstemming met het [[Project:Policy|beleid]].
+Geef hieronder een reden op (bijvoorbeeld welke pagina's gevandaliseerd zijn).",
+'ipaddress'                   => 'IP-adres',
+'ipadressorusername'          => 'IP-adres of gebruikersnaam',
+'ipbexpiry'                   => 'Duur (maak een keuze)',
+'ipbreason'                   => 'Reden',
+'ipbanononly'                 => 'Blokkeer alleen anonieme gebruikers',
+'ipbcreateaccount'            => 'Voorkomen aanmaken gebruikers',
+'ipbenableautoblock'          => 'Automatisch de IP-adressen van deze gebruiker blokkeren',
+'ipbsubmit'                   => 'Blokkeer deze gebruiker',
+'ipbother'                    => 'Andere duur',
+'ipboptions'                  => '15 minuten:15 min,1 uur:1 hour,2 uur:2 hours,6 uur:6 hours,12 uur:12 hours,1 dag:1 day,3 dagen:3 days,1 week:1 week,2 weken:2 weeks,1 maand:1 month,3 maanden:3 months,6 maanden:6 months,1 jaar:1 year,onbeperkt:infinite',
+'ipbotheroption'              => 'ander verloop',
+'badipaddress'                => 'Geen geldig IP-adres',
+'blockipsuccesssub'           => 'Blokkering geslaagd',
+'blockipsuccesstext'          => '[[Special:Contributions/$1|$1]] is geblokkeerd.<br />
+Zie de [[Special:Ipblocklist|Lijst van geblokkeerde IP-adressen]].',
+'ipb-unblock-addr'            => 'Deblokkeer $1',
+'ipb-unblock'                 => 'Deblokkeer een gebruiker of IP-adres',
+'ipb-blocklist-addr'          => 'Bekijk bestaande blokkades voor $1',
+'ipb-blocklist'               => 'Bekijk bestaande blokkades',
+'unblockip'                   => 'Deblokkeer gebruiker',
+'unblockiptext'               => 'Gebruik het onderstaande formulier om opnieuw schrijftoegang te geven aan een geblokkeerde gebruiker of IP-adres.',
+'ipusubmit'                   => 'Blokkade van dit adres opheffen.',
+'unblocked'                   => 'Blokkade van [[User:$1|$1]] is opgeheven',
+'ipblocklist'                 => 'Lijst van geblokkeerde gebruikers en IP-adressen.',
+'blocklistline'               => 'Op $1 blokkeerde $2: $3 ($4)',
+'infiniteblock'               => 'onbeperkt',
+'expiringblock'               => 'verloopt op $1',
+'anononlyblock'               => 'alleen anoniemen',
+'noautoblockblock'            => 'autoblok niet actief',
+'createaccountblock'          => 'gebruikers aanmaken geblokkeerd',
+'ipblocklistempty'            => 'Het blokkeerlogboek is leeg.',
+'blocklink'                   => 'blokkeer',
+'unblocklink'                 => 'deblokkeer',
+'contribslink'                => 'bijdragen',
+'autoblocker'                 => "Automatisch geblokkeerd omdat het IP-adres overeenkomt met dat van [[User:\$1|\$1]], die geblokkeerd is om de volgende reden: \"'''\$2'''\"",
+'blocklogpage'                => 'Blokkeerlogboek',
+'blocklogentry'               => '"[[$1]]" is geblokkeerd voor de duur van $2 $3.',
+'blocklogtext'                => 'Hier ziet u een lijst van de recente blokkeringen en deblokkeringen. Automatische blokkeringen en deblokkeringen komen niet in het logboek. Zie de [[Special:Ipblocklist|Ipblocklist]] voor op dit moment geblokkeerde adressen.',
+'unblocklogentry'             => 'blokkade van $1 opgeheven',
+'block-log-flags-anononly'    => 'alleen anoniemen',
+'block-log-flags-nocreate'    => 'aanmaken gebruikers geblokkeerd',
+'block-log-flags-autoblock'   => 'autoblok ingeschakeld',
+'range_block_disabled'        => 'De mogelijkheid voor beheerders om een groep IP-addressen te blokkeren is uitgeschakeld.',
+'ipb_expiry_invalid'          => 'Ongeldige duur.',
+'ipb_already_blocked'         => '"$1" is al geblokkeerd',
+'ip_range_invalid'            => 'Ongeldige IP-reeks.',
+'proxyblocker'                => 'Proxyblocker',
+'ipb_cant_unblock'            => 'Fout: BlokkadeID $1 niet aangetroffen. Wellicht is de blokkade al opgeheven.',
+'proxyblockreason'            => 'Dit is een automatische preventieve blokkade omdat u gebruik maakt van een open proxyserver. Neem a.u.b. contact op met uw Internet provider of uw helpdesk en stel die op de hoogte van dit ernstige beveiligingsprobleem.',
+'proxyblocksuccess'           => 'Geslaagd.',
+'sorbs'                       => 'SORBS DNS-blacklist',
+'sorbsreason'                 => 'Uw IP-adres is opgenomen als open proxyserver in de DNSBL die deze site gebruikt.',
+'sorbs_create_account_reason' => 'Uw IP-adres is opgenomen als open proxyserver in de DNSBL die deze site gebruikt. U kunt geen account aanmaken.',
+
+# Developer tools
+'lockdb'              => 'Blokkeer de database',
+'unlockdb'            => 'Blokkering van de database opheffen',
+'lockdbtext'          => "Waarschuwing: De database blokkeren heeft tot gevolg dat geen enkele gebruiker meer in staat is pagina's te bewerken, voorkeuren te wijzigen of iets anders te doen waarvoor wijzigingen in de database nodig zijn.
+
+Bevestig dat u deze handeling wilt uitvoeren en dat u de database vrijgeeft nadat het onderhoud is uitgevoerd.",
+'unlockdbtext'        => "Na het vrijgeven van de database kunnen gebruikers weer pagina's bewerken, hun voorkeuren wijzigen of iets anders te doen waarvoor er wijzigingen in de database nodig zijn.
+
+Bevestig dat u deze handeling wilt uitvoeren.",
+'lockconfirm'         => 'Ja, ik wil de database blokkeren.',
+'unlockconfirm'       => 'Ja, ik wil de database vrijgeven.',
+'lockbtn'             => 'Blokkeer de database',
+'unlockbtn'           => 'Geef de database vrij',
+'locknoconfirm'       => 'U heeft uw keuze niet bevestigd via het vinkvakje.',
+'lockdbsuccesssub'    => 'Blokkeren database geslaagd',
+'unlockdbsuccesssub'  => 'Database vrijgegeven.',
+'lockdbsuccesstext'   => 'De database is geblokkeerd.
+<br />Vergeet niet de database vrij te geven zodra u klaar bent met uw onderhoud.',
+'unlockdbsuccesstext' => 'De database is vrijgegeven.',
+'lockfilenotwritable' => 'Geen schrijfrechten op het databaselockbestand. Om de database te blokkeren of de blokkade op te heffen, dient er geschreven te kunnen worden door de webserver.',
+'databasenotlocked'   => 'De database is niet geblokkeerd.',
+
+# Move page
+'movepage'                => 'Hernoem pagina',
+'movepagetext'            => "Door middel van het onderstaande formulier kunt u een pagina hernoemen. De geschiedenis gaat mee naar de nieuwe pagina. De oude naam wordt automatisch een doorverwijzing naar de nieuwe pagina. Verwijzingen naar de oude pagina worden niet aangepast. Controleer na het hernoemen of er geen dubbele of onjuiste doorverwijzingen zijn onstaan. U bent verantwoordelijk voor de continuiteït van de verwijzingen.
+
+Een wijziging van de paginanaam kan '''alleen''' worden uitgevoerd als de nieuwe paginanaam:
+*nog niet bestaat, of
+*slechts een doorverwijspagina zonder verdere geschiedenis is.
+
+<b>WAARSCHUWING!</b>
+Voor populaire pagina's kan het hernoemen drastische en onvoorziene gevolgen hebben. Zorg ervoor dat u de consequenties overziet voordat u deze handeling uitvoert.",
+'movepagetalktext'        => "De bijbehorende overlegpagina krijgt automatisch een andere naam, '''tenzij''':
+* De overlegpagina onder de nieuwe naam al bestaat;
+* U het onderstaande vinkje deselecteert.",
+'movearticle'             => 'Hernoem pagina',
+'movenologin'             => 'Niet aangemeld',
+'movenologintext'         => 'U dient [[Special:Userlogin|aangemeld]] te zijn om een pagina te hernoemen.',
+'newtitle'                => 'Naar de nieuwe paginanaam',
+'move-watch'              => 'Volg deze pagina',
+'movepagebtn'             => 'Hernoem pagina',
+'pagemovedsub'            => 'Hernoemen pagina geslaagd',
+'pagemovedtext'           => 'Pagina "[[$1]]" is hernoemd naar "[[$2]]".',
+'articleexists'           => 'De pagina bestaat al of de paginanaam is ongeldig.
+Kies a.u.b. een andere paginanaam.',
+'talkexists'              => "'''De pagina is hernoemd, maar de overlegpagina kon niet hernoemd worden omdat er al een pagina met de nieuwe naam bestaat. Combineer de overlegpagina's a.u.b. handmatig.'''",
+'movedto'                 => 'hernoemd naar',
+'movetalk'                => 'Hernoem de bijbehorende overlegpagina',
+'talkpagemoved'           => 'De bijbehorende overlegpagina is ook hernoemd.',
+'talkpagenotmoved'        => 'De bijhorende overlegpagina is <strong>niet</strong> hernoemd.',
+'1movedto2'               => '[[$1]] hernoemd naar [[$2]]',
+'1movedto2_redir'         => '[[$1]] hernoemd over de doorverwijzing [[$2]]',
+'movelogpage'             => "Logboek hernoemde pagina's",
+'movelogpagetext'         => "Hieronder staan hernoemde pagina's.",
+'movereason'              => 'Reden',
+'revertmove'              => 'terugdraaien',
+'delete_and_move'         => 'Verwijderen en hernoemen',
+'delete_and_move_text'    => '==Verwijdering nodig== 
+Onder de naam "[[$1]]" bestaat al een pagina. Wilt u het verwijderen om plaats te maken voor de te hernoemen pagina?',
+'delete_and_move_confirm' => 'Ja, verwijder de pagina',
+'delete_and_move_reason'  => 'Verwijderd in verband met hernoeming',
+'selfmove'                => 'U kunt een pagina niet hernoemen naar dezelfde paginanaam.',
+'immobile_namespace'      => 'De bron- of doelpaginanaam is van een speciaal type. Een pagina kan niet hernoemd worden naar of van die naamruimte.',
+
+# Export
+'export'          => 'Exporteren',
+'exporttext'      => "U kunt de tekst en geschiedenis van een pagina of pagina's exporteren naar XML. Dit exportbestand is daarna te importeren in een andere MediaWiki via de pagina Special:Import.
+
+Geef in het onderstaande veld de namen van de te exporteren pagina's op, één pagina per regel, en geef aan of u alle versies met de bewerkingssamenvatting of alleen de huidige versies met de bewerkingssamenvatting wilt exporteren.
+
+In het laatste geval kunt u ook een link gebruiken, bijvoorbeeld [[Special:Export/{{Mediawiki:Mainpage}}]] voor de pagina {{Mediawiki:Mainpage}}.",
+'exportcuronly'   => 'Alleen de laatste versie, niet de volledige geschiedenis',
+'exportnohistory' => "---- 
+'''Let op:''' het exporteren van de gehele geschiedenis is uitgeschakeld wegens prestatieredenen.",
+'export-submit'   => 'Exporteer',
+
+# Namespace 8 related
+'allmessages'               => 'Systeemteksten',
+'allmessagesname'           => 'Naam',
+'allmessagesdefault'        => 'Standaardinhoud',
+'allmessagescurrent'        => 'Huidige inhoud',
+'allmessagestext'           => 'Hieronder staan de systeemberichten  uit de MediaWiki-naamruimte:',
+'allmessagesnotsupportedUI' => 'De taal die u heeft geselecteerd voor berichten (<b>$1</b>) wordt niet ondersteund door Special:Allmessages op deze wiki.',
+'allmessagesnotsupportedDB' => "Er is geen ondersteuning voor Special:AllMessages omdat '''\$wgUseDatabaseMessages''' is uitgeschakeld.",
+'allmessagesfilter'         => 'Bericht naamfilter:',
+'allmessagesmodified'       => 'Toon alleen gewijzigde systeemteksten',
+
+# Thumbnails
+'thumbnail-more'  => 'Groter',
+'missingimage'    => '<b>Afbeelding ontbreekt</b><br /><i>$1</i>',
+'filemissing'     => 'Bestand is zoek',
+'thumbnail_error' => 'Fout bij het aanmaken van thumbnail: $1',
+
+# Special:Import
+'import'                     => "Pagina's importeren",
+'importinterwiki'            => 'Transwiki-import',
+'import-interwiki-text'      => 'Selecteer een wiki en paginanaam om te importeren.
+Versie- en auteursgegevens blijven hierbij in tact.
+Alle transwiki-importhandelingen worden opgeslagen in het [[Special:Log/import|importlogboek]].',
+'import-interwiki-history'   => 'Kopieer de volledige geschiedenis van deze pagina',
+'import-interwiki-submit'    => 'Importeer',
+'import-interwiki-namespace' => "Plaats pagina's in de volgende naamruimte:",
+'importtext'                 => 'Gebruik de functie Special:Export in de wiki waar de informatie vandaan komt, sla de uitvoer op uw eigen systeem op, en voeg die daarna hier toe.',
+'importstart'                => "Pagina's aan het importeren...",
+'import-revision-count'      => '$1 {{PLURAL:$1|versie|versies}}',
+'importnopages'              => "Geen pagina's te importeren.",
+'importfailed'               => 'Import is mislukt: $1',
+'importunknownsource'        => 'Onbekend importbrontype',
+'importcantopen'             => 'Kon het importbestand niet openen',
+'importbadinterwiki'         => 'Verkeerde interwikilink',
+'importnotext'               => 'Leeg of geen tekst',
+'importsuccess'              => 'Import geslaagd.',
+'importhistoryconflict'      => 'Er zijn conflicten in de geschiedenis van de pagina (is misschien eerder geïmporteerd)',
+'importnosources'            => 'Er zijn geen transwiki-importbronnen gedefinieerd en directe geschiedenis-uploads zijn uitgeschakeld.',
+'importnofile'               => 'Er is geen importbestand geüpload.',
+'importuploaderror'          => 'Upload van het importbestand in mislukt; mogelijk is het bestand groter is dan de limiet.',
+
+# Import log
+'importlogpage'                    => 'Importlogboek',
+'importlogpagetext'                => "Administratieve import van pagina's met geschiedenis van andere wiki's.",
+'import-logentry-upload'           => '[[$1]] geïmporteerd via een bestandsupload',
+'import-logentry-upload-detail'    => '$1 versie(s)',
+'import-logentry-interwiki'        => 'transwiki voor $1 geslaagd',
+'import-logentry-interwiki-detail' => '$1 versie(s) van $2',
+
+# Tooltip help for the actions
+'tooltip-pt-userpage'             => 'Mijn gebruikerspagina',
+'tooltip-pt-anonuserpage'         => 'Gebruikerspagina voor uw IP-adres',
+'tooltip-pt-mytalk'               => 'Mijn overlegpagina',
+'tooltip-pt-anontalk'             => 'Overlegpagina van de anonieme gebruiker van dit IP-adres',
+'tooltip-pt-preferences'          => 'Mijn voorkeuren',
+'tooltip-pt-watchlist'            => 'Pagina',
+'tooltip-pt-mycontris'            => 'Mijn bijdragen',
+'tooltip-pt-login'                => 'U wordt van harte uitgenodigd om u aan te melden als gebruiker, maar dit is niet verplicht',
+'tooltip-pt-anonlogin'            => 'U wordt van harte uitgenodigd om u aan te melden als gebruiker, maar dit is niet verplicht',
+'tooltip-pt-logout'               => 'Afmelden',
+'tooltip-ca-talk'                 => 'Toon de overlegtekst bij deze pagina',
+'tooltip-ca-edit'                 => 'U kunt deze pagina bewerken. Gebruik a.u.b. de voorbeeldweergaveknop alvorens te bewaren',
+'tooltip-ca-addsection'           => 'Voeg uw opmerking toe aan de overlegpagina',
+'tooltip-ca-viewsource'           => 'Deze pagina is beveiligd tegen wijzigen. U kunt de pagina wel inzien',
+'tooltip-ca-history'              => 'Eerdere versies van deze pagina',
+'tooltip-ca-protect'              => 'Beveilig deze pagina tegen wijzigen',
+'tooltip-ca-delete'               => 'Verwijder deze pagina',
+'tooltip-ca-undelete'             => 'Plaats verwijderde versies van deze pagina terug',
+'tooltip-ca-move'                 => 'Hernoem deze pagina',
+'tooltip-ca-watch'                => 'Voeg deze pagina toe aan mijn volglijst',
+'tooltip-ca-unwatch'              => 'Verwijder deze pagina van mijn volglijst',
+'tooltip-search'                  => 'Doorzoek {{SITENAME}}',
+'tooltip-p-logo'                  => 'Hoofdpaginalogo',
+'tooltip-n-mainpage'              => 'Ga naar de Hoofdpagina',
+'tooltip-n-portal'                => 'Informatie over het project: wie, wat, hoe en waarom',
+'tooltip-n-currentevents'         => 'Achtergrondinformatie over actuele zaken',
+'tooltip-n-recentchanges'         => 'Toon recente wijzigingen',
+'tooltip-n-randompage'            => 'Toon een willekeurige pagina',
+'tooltip-n-help'                  => 'Hulpinformatie over deze wiki',
+'tooltip-n-sitesupport'           => 'Ondersteun ons financieel',
+'tooltip-t-whatlinkshere'         => 'Toon verwijzingen naar deze pagina',
+'tooltip-t-recentchangeslinked'   => 'Toon wijzigingen van pagina',
+'tooltip-feed-rss'                => 'RSS-feed voor deze pagina',
+'tooltip-feed-atom'               => 'Atom-feed voor deze pagina',
+'tooltip-t-contributions'         => 'Bijdragen van deze gebruiker',
+'tooltip-t-emailuser'             => 'Verzend een e-mail naar deze gebruiker',
+'tooltip-t-upload'                => 'Upload bestanden',
+'tooltip-t-specialpages'          => 'Toon alle speciale pagina',
+'tooltip-ca-nstab-main'           => 'Toon de paginatekst',
+'tooltip-ca-nstab-user'           => 'Toon de gebruikerspagina',
+'tooltip-ca-nstab-media'          => 'Toon de mediatekst',
+'tooltip-ca-nstab-special'        => 'Deze speciale pagina kunt u niet wijzigen',
+'tooltip-ca-nstab-project'        => 'Toon de projectpagina',
+'tooltip-ca-nstab-image'          => 'Toon de afbeeldingspagina',
+'tooltip-ca-nstab-mediawiki'      => 'Toon de systeemtekstpagina',
+'tooltip-ca-nstab-template'       => 'Toon de sjabloonpagina',
+'tooltip-ca-nstab-help'           => 'Toon de helppagina',
+'tooltip-ca-nstab-category'       => 'Toon de rubriekpagina',
+'tooltip-minoredit'               => 'Markeer dit als een kleine wijziging',
+'tooltip-save'                    => 'Sla uw wijzigingen op',
+'tooltip-preview'                 => 'Maak een voorvertoning. Gebruik dit!',
+'tooltip-diff'                    => 'Toon de gemaakte wijzigingen.',
+'tooltip-compareselectedversions' => 'Toon de verschillen tussen de geselecteerde versies.',
+'tooltip-watch'                   => 'Voeg deze pagina toe aan uw volglijst',
+'tooltip-recreate'                => 'Maak deze pagina opnieuw aan ondanks eerdere verwijdering',
+
+# Stylesheets
+'monobook.css' => '/* Een CSS die hier wordt geplaatst heeft invloed op alle gebruikers van de skin Monobook */',
+
+# Metadata
+'nodublincore'      => 'Dublin Core RDF metadata is uitgeschakeld op deze server.',
+'nocreativecommons' => 'Creative Commons RDF metadata is uitgeschakeld op deze server.',
+'notacceptable'     => 'De wikiserver kan de gegevens niet leveren in een vorm die uw client kan lezen.',
+
+# Attribution
+'anonymous'        => 'Anonieme gebruiker(s) van {{SITENAME}}',
+'siteuser'         => '{{SITENAME}} gebruiker $1',
+'lastmodifiedatby' => 'Deze pagina is het laatst bewerkt op $2, $1 door $3.', # $1 date, $2 time, $3 user
+'and'              => 'en',
+'othercontribs'    => 'Gebaseerd op werk van $1.',
+'others'           => 'anderen',
+'siteusers'        => '{{SITENAME}} gebruiker(s) $1',
+'creditspage'      => 'Auteurspagina',
+'nocredits'        => 'Er is geen auteursinformatie beschikbaar voor deze pagina.',
+
+# Spam protection
+'spamprotectiontitle'    => 'Spamfilter',
+'spamprotectiontext'     => 'De pagina die u wilde opslaan is geblokkeerd door het spamfilter. Meestal wordt dit door een externe link veroorzaakt.',
+'spamprotectionmatch'    => 'De volgende tekst veroorzaakte het alarm van de spamfilter: $1',
+'subcategorycount'       => 'Er {{PLURAL:$1|bestaat één ondercategorie|bestaan $1 ondercategorieën}} binnen deze categorie.',
+'categoryarticlecount'   => 'Er {{PLURAL:$1|staat één onderwerp|staan $1 onderwerpen}} in deze categorie.',
+'category-media-count'   => 'Er {{PLURAL:$1|staat één bestand|staan $1 bestanden}} in deze categorie.',
+'listingcontinuesabbrev' => ' meer',
+'spambot_username'       => 'MediaWiki opschoning spam',
+'spam_reverting'         => 'Bezig met terugdraaien naar de laatste versie die geen verwijzing heeft naar $1',
+'spam_blanking'          => 'Alle wijzigingen met een link naar $1 worden verwijderd',
+
+# Info page
+'infosubtitle'   => 'Informatie voor pagina',
+'numedits'       => 'Aantal bewerkingen (pagina): $1',
+'numtalkedits'   => 'Aantal bewerkingen (overlegpagina): $1',
+'numwatchers'    => 'Aantal volgers: $1',
+'numauthors'     => 'Aantal auteurs (pagina): $1',
+'numtalkauthors' => 'Aantal verschilende auteurs (overlegpagina): $1',
+
+# Math options
+'mw_math_png'    => 'Altijd als PNG weergeven',
+'mw_math_simple' => 'HTML voor eenvoudige formules, anders PNG',
+'mw_math_html'   => 'HTML indien mogelijk, anders PNG',
+'mw_math_source' => 'Toon de TeX broncode (voor tekstbrowsers)',
+'mw_math_modern' => 'Aanbevolen methode voor recente browsers',
+'mw_math_mathml' => 'MathML als mogelijk (experimenteel)',
+
+# Patrolling
+'markaspatrolleddiff'                 => 'Markeer als gecontroleerd',
+'markaspatrolledtext'                 => 'Markeer deze pagina als gecontroleerd',
+'markedaspatrolled'                   => 'Gemarkeerd als gecontroleerd',
+'markedaspatrolledtext'               => 'De gekozen versie is gemarkeerd als gecontroleerd.',
+'rcpatroldisabled'                    => 'De controlemogelijkheid op recente wijzigingen is uitgeschakeld.',
+'rcpatroldisabledtext'                => 'De mogelijkheid om recente wijzigingen als gecontroleerd aan te merken is op dit ogenblik uitgeschakeld.',
+'markedaspatrollederror'              => 'Kan niet als gecontroleerd worden aangemerkt',
+'markedaspatrollederrortext'          => 'Selecteer een versie om als gecontroleerd aan te merken.',
+'markedaspatrollederror-noautopatrol' => 'U kunt uw eigen wijzigingen niet als gecontroleerd markeren.',
+
+# Patrol log
+'patrol-log-page' => 'Markeerlogboek',
+'patrol-log-line' => 'markeerde versie $1 van $2 als gecontroleerd $3',
+'patrol-log-auto' => '(automatisch)',
+'patrol-log-diff' => '$1',
+
+# Image deletion
+'deletedrevision' => 'Oude versie $1 verwijderd.',
+
+# Browsing diffs
+'previousdiff' => '← Vorige wijziging',
+'nextdiff'     => 'Volgende wijziging →',
+
+'imagemaxsize' => 'Maximale grootte beelden op beschrijvingspagina:',
+'thumbsize'    => 'Grootte thumbnail:',
+'showbigimage' => 'Download afbeelding in origineel formaat ($1x$2 pixels, $3 kB)',
+
+'newimages' => 'Nieuwe afbeeldingen',
+'noimages'  => 'Niets te zien.',
+
+# Labels for User: and Title: on Special:Log pages
+'specialloguserlabel'  => 'Gebruiker:',
+'speciallogtitlelabel' => 'Paginanaam:',
+
+'passwordtooshort' => 'Uw wachtwoord is te kort. Het moet uit minstens $1 tekens bestaan.',
+
+# Media Warning
+'mediawarning' => "'''Waarschuwing''': dit bestand bevat mogelijk programmacode die uw systeem schade kan berokkenen.<hr />",
+
+'fileinfo' => '$1KB, MIME-type: <code>$2</code>',
+
+# Metadata
+'metadata-help'     => 'Dit bestand bevat aanvullende informatie, die door een fotocamera, scanner of fotobewerkingsprogramma toegevoegd kan zijn. Als het bestand is aangepast, dan komen details mogelijk niet overeen met de gewijzigde afbeelding.',
+'metadata-expand'   => 'Toon uitgebreide gegevens',
+'metadata-collapse' => 'Verberg uitgebreide gegevens',
+'metadata-fields'   => 'EXIF-gegevens in dit bericht zijn zichtbaar op de afbeeldingspagina als de tabel ingeklapt is. De overige gegevens zijn standaard verborgen
+* software
+* model
+* datetimeoriginal
+* exposuretime
+* fnumber
+* focallength
+* shutterspeedvalue',
+
+# EXIF tags
+'exif-imagewidth'                  => 'Breedte',
+'exif-imagelength'                 => 'Hoogte',
+'exif-bitspersample'               => 'Bits per component',
+'exif-compression'                 => 'Compressieschema',
+'exif-photometricinterpretation'   => 'Pixelcompositie',
+'exif-orientation'                 => 'Oriëntatie',
+'exif-samplesperpixel'             => 'Aantal componenten',
+'exif-planarconfiguration'         => 'Gegevensstructuur',
+'exif-ycbcrsubsampling'            => 'Subsampleverhouding van Y tot C',
+'exif-ycbcrpositioning'            => 'Y- en C-positionering',
+'exif-xresolution'                 => 'Horizontale resolutie',
+'exif-yresolution'                 => 'Verticale resolutie',
+'exif-resolutionunit'              => 'Eenheid X en Y resolutie',
+'exif-stripoffsets'                => 'Locatie afbeeldingsgegevens',
+'exif-rowsperstrip'                => 'Rijen per strip',
+'exif-stripbytecounts'             => 'Bytes per gecomprimeerde strip',
+'exif-jpeginterchangeformat'       => 'Afstand tot JPEG SOI',
+'exif-jpeginterchangeformatlength' => 'Bytes JPEG-gegevens',
+'exif-transferfunction'            => 'Transferfunctie',
+'exif-whitepoint'                  => 'Witpuntchromaticiteit',
+'exif-primarychromaticities'       => 'Chromaticities of primaries',
+'exif-ycbcrcoefficients'           => 'Transformatiematrixcoëfficiënten voor de kleurruimte',
+'exif-referenceblackwhite'         => 'Paar zwart en wit referentiewaarden',
+'exif-datetime'                    => 'Tijdstip laatste bestandswijziging',
+'exif-imagedescription'            => 'Omschrijving afbeelding',
+'exif-make'                        => 'Merk camera',
+'exif-model'                       => 'Cameramodel',
+'exif-software'                    => 'Gebruikte software',
+'exif-artist'                      => 'Auteur',
+'exif-copyright'                   => 'Copyrighthouder',
+'exif-exifversion'                 => 'Exif-versie',
+'exif-flashpixversion'             => 'Ondersteunde Flashpix-versie',
+'exif-colorspace'                  => 'Kleurruimte',
+'exif-componentsconfiguration'     => 'Betekenis van elke component',
+'exif-compressedbitsperpixel'      => 'Beeldcompressiemethode',
+'exif-pixelydimension'             => 'Bruikbare afbeeldingsbreedte',
+'exif-pixelxdimension'             => 'Bruikbare afbeeldingshoogte',
+'exif-makernote'                   => 'Opmerkingen maker',
+'exif-usercomment'                 => 'Opmerkingen',
+'exif-relatedsoundfile'            => 'Bijbehorend audiobestand',
+'exif-datetimeoriginal'            => 'Tijdstip gegevensaanmaak',
+'exif-datetimedigitized'           => 'Tijdstip digitalisering',
+'exif-subsectime'                  => 'Datum tijd subseconden',
+'exif-subsectimeoriginal'          => 'Subseconden tijdstip datageneratie',
+'exif-subsectimedigitized'         => 'Subseconden tijdstip digitalisatie',
+'exif-exposuretime'                => 'Belichtingstijd',
+'exif-fnumber'                     => 'F-getal',
+'exif-fnumber-format'              => 'f/$1',
+'exif-exposureprogram'             => 'Belichtingsprogramma',
+'exif-spectralsensitivity'         => 'Spectrale gevoeligheid',
+'exif-isospeedratings'             => 'ISO/ASA-waarde',
+'exif-oecf'                        => 'Opto-elektronische conversiefactor',
+'exif-shutterspeedvalue'           => 'Sluitersnelheid',
+'exif-aperturevalue'               => 'Diafragma',
+'exif-brightnessvalue'             => 'Helderheid',
+'exif-exposurebiasvalue'           => 'Belichtingscompensatie',
+'exif-maxaperturevalue'            => 'Maximale diafragma-opening',
+'exif-subjectdistance'             => 'Objectafstand',
+'exif-meteringmode'                => 'Methode lichtmeting',
+'exif-lightsource'                 => 'Lichtbron',
+'exif-flash'                       => 'Flitser',
+'exif-focallength'                 => 'Brandpuntsafstand',
+'exif-subjectarea'                 => 'Objectruimte',
+'exif-flashenergy'                 => 'Flitssterkte',
+'exif-focalplanexresolution'       => 'Brandpuntsvlak-X-resolutie',
+'exif-focalplaneyresolution'       => 'Brandpuntsvlak-Y-resolutie',
+'exif-focalplaneresolutionunit'    => 'Eenheid CCD-resolutie',
+'exif-subjectlocation'             => 'Objectlocatie',
+'exif-exposureindex'               => 'Belichtingsindex',
+'exif-sensingmethod'               => 'Opvangmethode',
+'exif-filesource'                  => 'Bestandsbron',
+'exif-scenetype'                   => 'Soort scene',
+'exif-cfapattern'                  => 'CFA-patroon',
+'exif-customrendered'              => 'Aangepaste beeldverwerking',
+'exif-exposuremode'                => 'Belichtingsinstelling',
+'exif-whitebalance'                => 'Witbalans',
+'exif-digitalzoomratio'            => 'Digitale zoomfactor',
+'exif-focallengthin35mmfilm'       => 'Brandpuntsafstand (35mm-equivalent)',
+'exif-scenecapturetype'            => 'Soort opname',
+'exif-gaincontrol'                 => 'Piekbeheersing',
+'exif-saturation'                  => 'Verzadiging',
+'exif-sharpness'                   => 'Scherpte',
+'exif-devicesettingdescription'    => 'Omschrijving apparaatinstellingen',
+'exif-subjectdistancerange'        => 'Bereik objectafstand',
+'exif-imageuniqueid'               => 'Uniek ID afbeelding',
+'exif-gpsversionid'                => 'GPS versienummer',
+'exif-gpslatituderef'              => 'Noorder- of zuiderbreedte',
+'exif-gpslatitude'                 => 'Breedtegraad',
+'exif-gpslongituderef'             => 'Ooster- of westerlengte',
+'exif-gpslongitude'                => 'Lengtegraad',
+'exif-gpsaltituderef'              => 'Hoogtereferentie',
+'exif-gpsaltitude'                 => 'Hoogte',
+'exif-gpstimestamp'                => 'GPS-tijd (atoomklok)',
+'exif-gpssatellites'               => 'Gebruikte satellieten voor meting',
+'exif-gpsstatus'                   => 'Ontvangerstatus',
+'exif-gpsmeasuremode'              => 'Meetmodus',
+'exif-gpsdop'                      => 'Meetprecisie',
+'exif-gpsspeedref'                 => 'Snelheid eenheid',
+'exif-gpsspeed'                    => 'Snelheid van GPS-ontvanger',
+'exif-gpstrackref'                 => 'Referentie voor bewegingsrichting',
+'exif-gpstrack'                    => 'Bewegingsrichting',
+'exif-gpsimgdirectionref'          => 'Referentie voor afbeeldingsrichting',
+'exif-gpsimgdirection'             => 'Afbeeldingsrichting',
+'exif-gpsmapdatum'                 => 'Gebruikte geodetische onderzoeksgegevens',
+'exif-gpsdestlatituderef'          => 'Referentie voor breedtegraad bestemming',
+'exif-gpsdestlatitude'             => 'Breedtegraad bestemming',
+'exif-gpsdestlongituderef'         => 'Referentie voor lengtegraad bestemming',
+'exif-gpsdestlongitude'            => 'Lengtegraad bestemming',
+'exif-gpsdestbearingref'           => 'Referentie voor richting naar bestemming',
+'exif-gpsdestbearing'              => 'Richting naar bestemming',
+'exif-gpsdestdistanceref'          => 'Referentie voor afstand tot bestemming',
+'exif-gpsdestdistance'             => 'Afstand tot bestemming',
+'exif-gpsprocessingmethod'         => 'GPS-verwerkingsmethode',
+'exif-gpsareainformation'          => 'Naam GPS-gebied',
+'exif-gpsdatestamp'                => 'GPS-datum',
+'exif-gpsdifferential'             => 'Differentiele GPS-correctie',
+
+# EXIF attributes
+'exif-compression-1' => 'Ongecomprimeerd',
+
+'exif-unknowndate' => 'Datum onbekend',
+
+'exif-orientation-1' => 'Normaal', # 0th row: top; 0th column: left
+'exif-orientation-2' => 'Horizontaal gespiegeld', # 0th row: top; 0th column: right
+'exif-orientation-3' => '180° gedraaid', # 0th row: bottom; 0th column: right
+'exif-orientation-4' => 'Verticaal gespiegeld', # 0th row: bottom; 0th column: left
+'exif-orientation-5' => 'Gespiegeld om as linksboven-rechtsonder', # 0th row: left; 0th column: top
+'exif-orientation-6' => '90° rechtsom gedraaid', # 0th row: right; 0th column: top
+'exif-orientation-7' => 'Gespiegeld om as linksonder-rechtsboven', # 0th row: right; 0th column: bottom
+'exif-orientation-8' => '90° linksom gedraaid', # 0th row: left; 0th column: bottom
+
+'exif-colorspace-ffff.h' => 'Niet gecalibreerd',
+
+'exif-componentsconfiguration-0' => 'bestaat niet',
+
+'exif-exposureprogram-0' => 'Niet gedefiniëerd',
+'exif-exposureprogram-1' => 'Handmatig',
+'exif-exposureprogram-2' => 'Normaal programma',
+'exif-exposureprogram-3' => 'Diafragmaprioriteit',
+'exif-exposureprogram-4' => 'Sluiterprioriteit',
+'exif-exposureprogram-5' => 'Creatief (voorkeur voor hoge scherpte/diepte)',
+'exif-exposureprogram-6' => 'Actie (voorkeur voor hoge sluitersnelheid)',
+'exif-exposureprogram-7' => 'Portret (detailopname met onscherpe achtergrond)',
+'exif-exposureprogram-8' => 'Landschap (scherpe achtergrond)',
+
+'exif-subjectdistance-value' => '$1 meter',
+
+'exif-meteringmode-0'   => 'Onbekend',
+'exif-meteringmode-1'   => 'Gemiddeld',
+'exif-meteringmode-2'   => 'Gemiddeld, nadruk op midden',
+'exif-meteringmode-4'   => 'Multi-spot',
+'exif-meteringmode-5'   => 'Multi-segment (patroon)',
+'exif-meteringmode-6'   => 'Deelmeting',
+'exif-meteringmode-255' => 'Anders',
+
+'exif-lightsource-0'   => 'Onbekend',
+'exif-lightsource-1'   => 'Daglicht',
+'exif-lightsource-2'   => 'TL-licht',
+'exif-lightsource-3'   => 'Tungsten (lamplicht)',
+'exif-lightsource-4'   => 'Flits',
+'exif-lightsource-9'   => 'Mooi weer',
+'exif-lightsource-10'  => 'Bewolkt',
+'exif-lightsource-11'  => 'Schaduw',
+'exif-lightsource-12'  => 'Daglicht fluorescerend (D 5700 – 7100K)',
+'exif-lightsource-13'  => 'Dagwit fluorescerend (N 4600 - 5400K)',
+'exif-lightsource-14'  => 'Koel wit fluorescerend (W 3900 - 4500K)',
+'exif-lightsource-15'  => 'Wit fluorescerend (WW 3200 - 3700K)',
+'exif-lightsource-17'  => 'Standaard licht A',
+'exif-lightsource-18'  => 'Standaard licht B',
+'exif-lightsource-19'  => 'Standaard licht C',
+'exif-lightsource-255' => 'Andere lichtbron',
+
+'exif-focalplaneresolutionunit-2' => 'inch',
+
+'exif-sensingmethod-1' => 'Niet gedefiniëerd',
+'exif-sensingmethod-2' => 'Eén-chip-kleursensor',
+'exif-sensingmethod-3' => 'Twee-chip-kleursensor',
+'exif-sensingmethod-4' => 'Drie-chip-kleursensor',
+
+'exif-scenetype-1' => 'Een direct gefotografeerde afbeelding',
+
+'exif-customrendered-0' => 'Normale verwerking',
+'exif-customrendered-1' => 'Aangepaste verwerking',
+
+'exif-exposuremode-0' => 'Automatische belichting',
+'exif-exposuremode-1' => 'Handmatige belichting',
+'exif-exposuremode-2' => 'Auto-Bracket',
+
+'exif-whitebalance-0' => 'Automatische witbalans',
+'exif-whitebalance-1' => 'Handmatige witbalans',
+
+'exif-scenecapturetype-0' => 'Standaard',
+'exif-scenecapturetype-1' => 'Landschap',
+'exif-scenecapturetype-2' => 'Portret',
+'exif-scenecapturetype-3' => 'Nachtscène',
+
+'exif-gaincontrol-0' => 'Geen',
+'exif-gaincontrol-1' => 'Lage pieken omhoog',
+'exif-gaincontrol-2' => 'Hoge pieken omhoog',
+'exif-gaincontrol-3' => 'Lage pieken omlaag',
+'exif-gaincontrol-4' => 'Hoge pieken omlaag',
+
+'exif-contrast-0' => 'Normaal',
+'exif-contrast-1' => 'Zacht',
+
+'exif-saturation-0' => 'Normaal',
+'exif-saturation-1' => 'Laag',
+'exif-saturation-2' => 'Hoog',
+
+'exif-sharpness-0' => 'Normaal',
+'exif-sharpness-1' => 'Zacht',
+
+'exif-subjectdistancerange-0' => 'Onbekend',
+'exif-subjectdistancerange-2' => 'Dichtbij',
+'exif-subjectdistancerange-3' => 'Ver weg',
+
+# Pseudotags used for GPSLatitudeRef and GPSDestLatitudeRef
+'exif-gpslatitude-n' => 'Noorderbreedte',
+'exif-gpslatitude-s' => 'Zuiderbreedte',
+
+# Pseudotags used for GPSLongitudeRef and GPSDestLongitudeRef
+'exif-gpslongitude-e' => 'Oosterlengte',
+'exif-gpslongitude-w' => 'Westerlengte',
+
+'exif-gpsstatus-a' => 'Bezig met meten',
+'exif-gpsstatus-v' => 'Meetinteroperabiliteit',
+
+'exif-gpsmeasuremode-2' => '2-dimensionale meting',
+'exif-gpsmeasuremode-3' => '3-dimensionale meting',
+
+# Pseudotags used for GPSSpeedRef and GPSDestDistanceRef
+'exif-gpsspeed-k' => 'Kilometer per uur',
+'exif-gpsspeed-m' => 'Mijl per uur',
+'exif-gpsspeed-n' => 'Knopen',
+
+# Pseudotags used for GPSTrackRef, GPSImgDirectionRef and GPSDestBearingRef
+'exif-gpsdirection-t' => 'Eigenlijke richting',
+'exif-gpsdirection-m' => 'Magnetische richting',
+
+# External editor support
+'edit-externally'      => 'Bewerk dit bestand in een extern programma',
+'edit-externally-help' => 'In de [http://meta.wikimedia.org/wiki/Help:External_editors handleiding voor instellingen] staat meer informatie.',
+
+# 'all' in various places, this might be different for inflected languages
+'recentchangesall' => 'alles',
+'imagelistall'     => 'alle',
+'watchlistall1'    => 'allemaal',
+'watchlistall2'    => 'alles',
+'namespacesall'    => 'alle',
+
+# E-mail address confirmation
+'confirmemail'            => 'Bevestig e-mailadres',
+'confirmemail_noemail'    => 'U heeft geen geldig e-mailadres ingegeven in uw [[Special:Preferences|gebruikersvoorkeuren]].',
+'confirmemail_text'       => 'Deze wiki vereist de bevestiging van uw e-mailadres voordat u de e-mailmogelijkheden kunt gebruiken. Klik op de onderstaande knop om een bevestigingsbericht te ontvangen. Dit bericht bevat een link met een code. Open die link om uw e-mailadres te bevestigen.',
+'confirmemail_pending'    => '<div class="error">Er is al een bevestigingsbericht aan u verzonden. Als u recentelijk uw gebruiker heeft aangemaakt, wacht dan een paar minuten totdat die aankomt voorda u opnieuw een e-mail laat sturen</div>',
+'confirmemail_send'       => 'Verzend een bevestigingscode',
+'confirmemail_sent'       => 'Bevestigingscode verzonden.',
+'confirmemail_oncreate'   => 'Er is een bevestigingscode is naar uw e-mailadres verzonden. Deze code is niet nodig om aan te melden, maar u dient deze wel te bevestigen voordat u de e-mailmogelijkheden van deze wiki kunt gebruiken.',
+'confirmemail_sendfailed' => 'Het was niet mogelijk een bevestigingscode te verzenden. Controleer het adres op ongeldige tekens.
+
+Het mailprogramma meldde: $1',
+'confirmemail_invalid'    => 'Ongeldige bevestigingscode. Mogelijk is de code verlopen.',
+'confirmemail_needlogin'  => 'U dient $1 om uw e-mailadres te bevestigen.',
+'confirmemail_success'    => 'Uw e-mailadres is bevestigd. U kunt zich nu aanmelden en {{SITENAME}} gebruiken.',
+'confirmemail_loggedin'   => 'Uw e-mailadres is nu bevestigd.',
+'confirmemail_error'      => 'Er is iets verkeerd gegaan tijdens het opslaan van uw bevestiging.',
+'confirmemail_subject'    => 'Bevestiging e-mailadres voor {{SITENAME}}',
+'confirmemail_body'       => 'Iemand, waarschijnlijk u, met het IP-adres $1, heeft zich met dit e-mailadres geregistreerd als gebruiker "$2" op {{SITENAME}}.
+
+Open de volgende link om te bevestigen dat u deze gebruiker bent en om de e-mailmogelijkheden op {{SITENAME}} te activeren:
+
+$3
+
+Als u zichzelf *niet* heeft aangemeld, open deze link dan niet. De bevestigingscode verloopt  op $4.',
+
+# Inputbox extension, may be useful in other contexts as well
+'tryexact'       => 'Zoek op exacte overeenkomst',
+'searchfulltext' => 'Volledige tekst doorzoeken',
+'createarticle'  => 'Maak nieuwe pagina',
+
+# Scary transclusion
+'scarytranscludedisabled' => '[Interwikitransclusie is uitgeschakeld]',
+'scarytranscludefailed'   => '[Sjabloon $1 kon niet opgehaald worden; sorry]',
+'scarytranscludetoolong'  => '[URL is te lang; sorry]',
+
+# Trackbacks
+'trackbackbox'      => "<div id='mw_trackbacks'>
+Trackbacks voor deze pagina:<br />
+$1
+</div>",
+'trackbackremove'   => ' ([$1 Verwijderen])',
+'trackbackdeleteok' => 'De trackback is verwijderd.',
+
+# Delete conflict
+'deletedwhileediting' => 'Let op: deze pagina is verwijderd terwijl u bezig was met uw bewerking!',
+'confirmrecreate'     => "Gebruiker [[User:$1|$1]] ([[User talk:$1|overleg]]) heeft deze pagina verwijderd nadat u begonnen bent met uw wijziging met opgaaf van de volgende reden:
+: ''$2''
+Bevestig alstublieft dat u de pagina opnieuw wilt aanmaken.",
+'recreate'            => 'Opnieuw aanmaken',
+
+# HTML dump
+'redirectingto' => 'Aan het doorverwijzen naar [[$1]]...',
+
+# action=purge
+'confirm_purge' => 'Wis de cache van deze pagina?
+
+$1',
+
+'youhavenewmessagesmulti' => 'U heeft nieuwe berichten op $1',
+
+'searchcontaining' => "Zoek naar pagina's die ''$1'' bevatten.",
+'searchnamed'      => "Zoek naar pagina's met de naam ''$1''.",
+'articletitles'    => "Pagina's die met ''$1'' beginnen",
+'hideresults'      => 'Verberg resultaten',
+
+# DISPLAYTITLE
+'displaytitle' => '(Link naar deze pagina als [[$1]])',
+
+'loginlanguagelabel' => 'Taal: $1',
+
+# Multipage image navigation
+'imgmultipageprev' => '&larr; vorige pagina',
+'imgmultipagenext' => 'volgende pagina &rarr;',
+'imgmultigo'       => 'OK',
+'imgmultigotopre'  => 'Ga naar pagina',
+
+# Table pager
+'ascending_abbrev'         => 'opl.',
+'descending_abbrev'        => 'afl.',
+'table_pager_next'         => 'Volgende pagina',
+'table_pager_prev'         => 'Vorige pagina',
+'table_pager_first'        => 'Eerste pagina',
+'table_pager_last'         => 'Laatste pagina',
+'table_pager_limit'        => 'Toon $1 resultaten per pagina',
+'table_pager_limit_submit' => 'OK',
+'table_pager_empty'        => 'Geen resultaten',
+
+# Auto-summaries
+'autosumm-blank'   => 'Pagina leeggehaald',
+'autosumm-replace' => "Tekst vervangen door '$1'",
+'autoredircomment' => 'Verwijst door naar [[$1]]', # This should be changed to the new naming convention, but existed beforehand
+'autosumm-new'     => 'Pagina aangemaakt: $1',
+
+);
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesNn.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesNn.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesNn.php	(revision 1280)
@@ -0,0 +1,1631 @@
+<?php
+/** Norwegian (Nynorsk)
+  *
+  * @license http://www.gnu.org/copyleft/fdl.html GNU Free Documentation License
+  * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License
+  *
+  * @author Olve Utne
+  * @author Guttorm Flatabø
+  * @link http://meta.wikimedia.org/w/index.php?title=LanguageNn.php&action=history
+  * @link http://nn.wikipedia.org/w/index.php?title=Brukar:Dittaeva/LanguageNn.php&action=history
+  *
+  * @addtogroup Language
+  */
+
+$skinNames = array(
+	'standard'        => 'Klassisk',
+	'nostalgia'       => 'Nostalgi',
+	'cologneblue'     => 'Kölnerblå',
+	'myskin'          => 'MiDrakt'
+);
+
+$datePreferences = array(
+	'default',
+	'dmyt',
+	'short dmyt',
+	'tdmy',
+	'short dmyt',
+	'ISO 8601',
+);
+
+$datePreferenceMigrationMap = array(
+	'default',
+	'dmyt',
+	'short dmyt',
+	'tdmy',
+	'short tdmy',
+);
+
+$dateFormats = array(
+	/*
+	'Standard',
+	'15. januar 2001 kl. 16:12',
+	'15. jan. 2001 kl. 16:12',
+	'16:12, 15. januar 2001',
+	'16:12, 15. jan. 2001',
+	'ISO 8601' => '2001-01-15 16:12:34'
+ */
+	'dmyt time' => 'H:i',
+	'dmyt date' => 'j. F Y',
+	'dmyt both' => 'j. F Y "kl." H:i',
+
+	'short dmyt time' => 'H:i',
+	'short dmyt date' => 'j. M. Y',
+	'short dmyt both' => 'j. M. Y "kl." H:i',
+
+	'tdmy time' => 'H:i',
+	'tdmy date' => 'j. F Y',
+	'tdmy both' => 'H:i, j. F Y',
+
+	'short tdmy time' => 'H:i',
+	'short tdmy date' => 'j. M. Y',
+	'short tdmy both' => 'H:i, j. M. Y',
+);
+
+$bookstoreList = array(
+	'Bibsys'       => 'http://ask.bibsys.no/ask/action/result?kilde=biblio&fid=isbn&lang=nn&term=$1',
+	'BokBerit'     => 'http://www.bokberit.no/annet_sted/bocker/$1.html',
+	'Bokkilden'    => 'http://www.bokkilden.no/ProductDetails.aspx?ProductId=$1',
+	'Haugenbok'    => 'http://www.haugenbok.no/resultat.cfm?st=hurtig&isbn=$1',
+	'Akademika'    => 'http://www.akademika.no/sok.php?isbn=$1',
+	'Gnist'        => 'http://www.gnist.no/sok.php?isbn=$1',
+	'Amazon.co.uk' => 'http://www.amazon.co.uk/exec/obidos/ISBN=$1',
+	'Amazon.de'    => 'http://www.amazon.de/exec/obidos/ISBN=$1',
+	'Amazon.com'   => 'http://www.amazon.com/exec/obidos/ISBN=$1'
+);
+
+# Note to translators:
+#   Please include the English words as synonyms.  This allows people
+#   from other wikis to contribute more easily.
+#
+$magicWords = array(
+	#   ID                                 CASE  SYNONYMS
+	'redirect'               => array( 0,    '#redirect', '#omdiriger'                                              ),
+	'notoc'                  => array( 0,    '__NOTOC__', '__INGAINNHALDSLISTE__', '__INGENINNHOLDSLISTE__'         ),
+	'forcetoc'               => array( 0,    '__FORCETOC__', '__ALLTIDINNHALDSLISTE__', '__ALLTIDINNHOLDSLISTE__'   ),
+	'toc'                    => array( 0,    '__TOC__', '__INNHALDSLISTE__', '__INNHOLDSLISTE__'                    ),
+	'noeditsection'          => array( 0,    '__NOEDITSECTION__', '__INGABOLKENDRING__', '__INGABOLKREDIGERING__', '__INGENDELENDRING__'),
+	'currentmonth'           => array( 1,    'CURRENTMONTH', 'MÅNADNO', 'MÅNEDNÅ'                                   ),
+	'currentmonthname'       => array( 1,    'CURRENTMONTHNAME', 'MÅNADNONAMN', 'MÅNEDNÅNAVN'                       ),
+	'currentmonthabbrev'     => array( 1,    'CURRENTMONTHABBREV', 'MÅNADNOKORT', 'MÅNEDNÅKORT'                     ),
+	'currentday'             => array( 1,    'CURRENTDAY', 'DAGNO', 'DAGNÅ'                                         ),
+	'currentdayname'         => array( 1,    'CURRENTDAYNAME', 'DAGNONAMN', 'DAGNÅNAVN'                             ),
+	'currentyear'            => array( 1,    'CURRENTYEAR', 'ÅRNO', 'ÅRNÅ'                                          ),
+	'currenttime'            => array( 1,    'CURRENTTIME', 'TIDNO', 'TIDNÅ'                                        ),
+	'numberofarticles'       => array( 1,    'NUMBEROFARTICLES', 'INNHALDSSIDETAL', 'INNHOLDSSIDETALL'              ),
+	'numberoffiles'          => array( 1,    'NUMBEROFFILES', 'FILTAL'                                              ),
+	'pagename'               => array( 1,    'PAGENAME', 'SIDENAMN', 'SIDENAVN'                                     ),
+	'pagenamee'              => array( 1,    'PAGENAMEE', 'SIDENAMNE', 'SIDENAVNE'                                  ),
+	'namespace'              => array( 1,    'NAMESPACE', 'NAMNEROM', 'NAVNEROM'                                    ),
+	'subst'                  => array( 0,    'SUBST:', 'LIMINN:'                                                    ),
+	'msgnw'                  => array( 0,    'MSGNW:', 'IKWIKMELD:'                                                 ),
+	'img_thumbnail'          => array( 1,    'thumbnail', 'thumb', 'mini', 'miniatyr'                               ),
+	'img_manualthumb'        => array( 1,    'thumbnail=$1', 'thumb=$1', 'mini=$1', 'miniatyr=$1'                   ),
+	'img_right'              => array( 1,    'right', 'høgre', 'høyre'                                              ),
+	'img_left'               => array( 1,    'left', 'venstre'                                                      ),
+	'img_none'               => array( 1,    'none', 'ingen'                                                        ),
+	'img_width'              => array( 1,    '$1px', '$1pk'                                                         ),
+	'img_center'             => array( 1,    'center', 'centre', 'sentrum'                                          ),
+	'img_framed'             => array( 1,    'framed', 'enframed', 'frame', 'ramme'                                 ),
+	'sitename'               => array( 1,    'SITENAME', 'NETTSTADNAMN'                                             ),
+	'ns'                     => array( 0,    'NS:', 'NR:'                                                           ),
+	'localurl'               => array( 0,    'LOCALURL:', 'LOKALLENKJE:', 'LOKALLENKE:'                             ),
+	'localurle'              => array( 0,    'LOCALURLE:', 'LOKALLENKJEE:', 'LOKALLENKEE:'                          ),
+	'server'                 => array( 0,    'SERVER', 'TENAR', 'TJENER'                                            ),
+	'servername'             => array( 0,    'SERVERNAME', 'TENARNAMN', 'TJENERNAVN'                                ),
+	'scriptpath'             => array( 0,    'SCRIPTPATH', 'SKRIPTSTI'                                              ),
+	'grammar'                => array( 0,    'GRAMMAR:', 'GRAMMATIKK:'                                              ),
+	'notitleconvert'         => array( 0,    '__NOTITLECONVERT__', '__NOTC__'                                       ),
+	'nocontentconvert'       => array( 0,    '__NOCONTENTCONVERT__', '__NOCC__'                                     ),
+	'currentweek'            => array( 1,    'CURRENTWEEK', 'VEKENRNO', 'UKENRNÅ'                                   ),
+	'currentdow'             => array( 1,    'CURRENTDOW', 'VEKEDAGNRNO', 'UKEDAGNRNÅ'                              ),
+	'revisionid'             => array( 1,    'REVISIONID', 'VERSJONSID'                                             )
+);
+
+$namespaceNames = array(
+	NS_MEDIA          => 'Filpeikar',
+	NS_SPECIAL        => 'Spesial',
+	NS_MAIN           => '',
+	NS_TALK           => 'Diskusjon',
+	NS_USER           => 'Brukar',
+	NS_USER_TALK      => 'Brukardiskusjon',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK   => '$1-diskusjon',
+	NS_IMAGE          => 'Fil',
+	NS_IMAGE_TALK     => 'Fildiskusjon',
+	NS_MEDIAWIKI      => 'MediaWiki',
+	NS_MEDIAWIKI_TALK => 'MediaWiki-diskusjon',
+	NS_TEMPLATE       => 'Mal',
+	NS_TEMPLATE_TALK  => 'Maldiskusjon',
+	NS_HELP           => 'Hjelp',
+	NS_HELP_TALK      => 'Hjelpdiskusjon',
+	NS_CATEGORY       => 'Kategori',
+	NS_CATEGORY_TALK  => 'Kategoridiskusjon'
+);
+
+$separatorTransformTable = array(
+	',' => "\xc2\xa0",
+	'.' => ','
+);
+$linkTrail = '/^([æøåa-z]+)(.*)$/sDu';
+
+
+#-------------------------------------------------------------------
+# Default messages
+#-------------------------------------------------------------------
+
+$messages = array(
+# User preference toggles
+'tog-underline'           => 'Strek under lenkjer:',
+'tog-highlightbroken'     => 'Vis lenkjer til tomme sider <a href="" class="new">slik</a> (alternativt slik<a href="" class="internal">?</a>)',
+'tog-justify'	          => 'Blokkjusterte avsnitt',
+'tog-hideminor'           => 'Skjul uviktige endringar på «siste endringar»',
+'tog-usenewrc'            => 'Utvida funksjonalitet på «siste endringar» (JavaScript)',
+'tog-numberheadings'      => 'Vis nummererte overskrifter',
+'tog-showtoolbar'         => 'Vis endringsknappar (JavaScript)',
+'tog-editondblclick'      => 'Endre sider med dobbelklikk (JavaScript)',
+'tog-editsection'         => 'Endre avsnitt med hjelp av [endre]-lenkje',
+'tog-editsectiononrightclick' => 'Endre avsnitt med å høgreklikke på avsnittsoverskrift (JavaScript)',
+'tog-showtoc'             => 'Vis innhaldsliste (for sider med meir enn tre bolkar)',
+'tog-rememberpassword'    => 'Hugs passordet til neste gong',
+'tog-editwidth'           => 'Gjev endringsboksen full breidd',
+'tog-watchdefault'        => 'Legg sider eg endrar i overvakingslista mi',
+'tog-minordefault'        => 'Merk endringar som «uviktige» som standard',
+'tog-previewontop'        => 'Vis førehandsvisinga føre endringsboksen',
+'tog-previewonfirst'      => 'Førehandsvis første endring',
+'tog-nocache'             => 'Ikkje bruk nettlesaren sitt mellomlager (cache)',
+'tog-enotifwatchlistpages' => 'Send e-post når dei overvaka sidene mine blir endra',
+'tog-enotifusertalkpages' => 'Send e-post når brukarsida mi blir endra',
+'tog-enotifminoredits'    => 'Send e-post òg for uviktige endringar',
+'tog-enotifrevealaddr'    => 'Vis e-postadressa mi i endrings-e-post',
+'tog-shownumberswatching' => 'Vis kor mange som overvakar sida',
+'tog-fancysig'            => 'Signatur utan automatisk lenkje',
+'tog-externaleditor'      => 'Eksternt handsamingsprogram som standard',
+'tog-externaldiff'        => 'Eksternt skilnadprogram som standard',
+
+'underline-always'        => 'Alltid',
+'underline-never'         => 'Aldri',
+'underline-default'       => 'Nettlesarstandard',
+
+'skinpreview'             => '(førehandsvis)',
+
+# Dates
+'sunday'                  => 'søndag',
+'monday'                  => 'måndag',
+'tuesday'                 => 'tysdag',
+'wednesday'               => 'onsdag',
+'thursday'                => 'torsdag',
+'friday'                  => 'fredag',
+'saturday'                => 'laurdag',
+'january'                 => 'januar',
+'february'                => 'februar',
+'march'                   => 'mars',
+'april'                   => 'april',
+'may_long'                => 'mai',
+'june'                    => 'juni',
+'july'                    => 'juli',
+'august'                  => 'august',
+'september'               => 'september',
+'october'                 => 'oktober',
+'november'                => 'november',
+'december'                => 'desember',
+'jan'                     => 'jan',
+'feb'                     => 'feb',
+'mar'                     => 'mar',
+'apr'                     => 'apr',
+'may'                     => 'mai',
+'jun'                     => 'jun',
+'jul'                     => 'jul',
+'aug'                     => 'aug',
+'sep'                     => 'sep',
+'oct'                     => 'okt',
+'nov'                     => 'nov',
+'dec'                     => 'des',
+
+# Bits of text used by many pages:
+'categories'              => 'Kategoriar',
+'pagecategories'          => 'Kategoriar',
+'category_header'         => 'Artiklar i kategorien «$1»',
+'subcategories'           => 'Underkategoriar',
+
+'mainpage'		  => 'Hovudside',
+'mainpagetext'	          => 'MediaWiki er no installert.',
+'mainpagedocfooter'       => 'Sjå [http://meta.wikimedia.org/wiki/MediaWiki_localization dokumentasjon for å tilpasse brukargrensesnittet] og [http://meta.wikimedia.org/wiki/Help:Contents brukarmanualen] for bruk og konfigurasjonshjelp.',
+
+'portal'		  => 'Brukarportal',
+'portal-url'		  => 'Project:Brukarportal',
+'about'			  => 'Om',
+'aboutsite'               => 'Om {{SITENAME}}',
+'aboutpage'		  => 'Project:Om',
+'article'                 => 'Innhaldsside',
+'help'			  => 'Hjelp',
+'helppage'		  => 'Help:Innhald',
+'bugreports'	          => 'Feilmeldingar',
+'bugreportspage'          => 'Project:Feilmeldingar',
+'sitesupport'             => 'Gåver',
+'sitesupport-url'         => 'Project:Gåver',
+'faq'			  => 'OSS',
+'faqpage'		  => 'Project:OSS',
+'edithelp'		  => 'Hjelp til endring',
+'newwindow'		  => '(blir opna i eit nytt vindauge)',
+'edithelppage'	          => 'Help:Endring',
+'cancel'		  => 'Avbryt',
+'qbfind'		  => 'Finn',
+'qbbrowse'		  => 'Bla gjennom',
+'qbedit'		  => 'Endre',
+'qbpageoptions'           => 'Denne sida',
+'qbpageinfo'	          => 'Samanheng',
+'qbmyoptions'	          => 'Sidene mine',
+'qbspecialpages'	  => 'Spesialsider',
+'moredotdotdot'	          => 'Meir...',
+'mypage'		  => 'Sida mi',
+'mytalk'		  => 'Diskusjonssida mi',
+'anontalk'		  => 'Diskusjonside for denne IP-adressa',
+'navigation'              => 'Navigering',
+
+# Metadata in edit box
+'metadata'                => '<b>Metadata</b> (for forklaring, sjå <a href="$1">her</a>)',
+
+'currentevents'           => 'Aktuelt',
+'currentevents-url'       => 'Aktuelt',
+
+'disclaimers'             => 'Vilkår',
+'disclaimerpage'	      => 'Project:Vilkår',
+'errorpagetitle'          => 'Feil',
+'returnto'		          => 'Attende til $1.',
+'tagline'      	          => 'Frå {{SITENAME}}',
+'whatlinkshere'	          => 'Sider med lenkjer hit',
+'help'			  => 'Hjelp',
+'search'		  => 'Søk',
+'searchbutton'	  => 'Søk',
+'go'		          => 'Vis',
+'searcharticle'		          => 'Vis',
+'history'		  => 'Sidehistorikk',
+'history_short'           => 'Historikk',
+'updatedmarker'           => 'oppdatert etter mitt siste besøk',
+'info_short'	          => 'Informasjon',
+'printableversion'        => 'Utskriftsversjon',
+'print'                   => 'Skriv ut',
+'edit'                    => 'Endre',
+'editthispage'	          => 'Endre sida',
+'delete'                  => 'Slett',
+'deletethispage'          => 'Slett side',
+'undelete_short'          => 'Attopprett $1 endringar',
+'protect'                 => 'Vern',
+'protectthispage'         => 'Vern denne sida',
+'unprotect'               => 'fjern vern',
+'unprotectthispage'       => 'Fjern vern av denne sida',
+'newpage'                 => 'Ny side',
+'talkpage'		  => 'Drøft sida',
+'specialpage'             => 'Spesialside',
+'personaltools'           => 'Personlege verktøy',
+'postcomment'             => 'Legg til kommentar',
+'articlepage'	          => 'Vis innhaldsside',
+'talk'                    => 'Diskusjon',
+'views'                   => 'Visningar',
+'toolbox'                 => 'Verktøy',
+'userpage'                => 'Vis brukarside',
+'projectpage'           => 'Vis prosjektside',
+'imagepage'               => 'Vis filside',
+'viewtalkpage'            => 'Vis diskusjon',
+'otherlanguages'          => 'På andre språk',
+'redirectedfrom'          => '(Omdirigert frå $1)',
+'lastmodifiedat'	          => 'Sist endra $2, $1.',
+'viewcount'		  => 'Vist $1 gonger.',
+'copyright'	          => 'Innhaldet er utgjeve under $1.',
+'protectedpage'           => 'Verna side',
+'badaccess'               => 'Tilgangsfeil',
+'versionrequired'         => 'MediaWiki versjon $1 trengst',
+'versionrequiredtext'     => 'For å bruke denne sida trengst MediaWiki versjon $1. Sjå [[{{ns:special}}:Version]]',
+'nbytes'		  => '$1 byte',
+'ok'			  => 'OK',
+'retrievedfrom'           => 'Henta frå «$1»',
+'newmessageslink'         => 'nye meldingar',
+'editsection'             => 'endre',
+'editold'             => 'endre',
+'toc'                     => 'Innhaldsliste',
+'showtoc'                 => 'vis',
+'hidetoc'                 => 'gøym',
+'thisisdeleted'           => 'Sjå eller attopprett $1?',
+'viewdeleted'             => 'Sjå historikk for $1?',
+'restorelink'             => '$1 sletta versjonar',
+'feedlinks'               => 'Mating:',
+
+# Short words for each namespace, by default used in the 'article' tab in monobook
+'nstab-main'              => 'Innhaldsside',
+'nstab-user'              => 'Brukarside',
+'nstab-media'             => 'Filside',
+'nstab-special'           => 'Spesial',
+'nstab-project'                => 'Prosjektside',
+'nstab-image'             => 'Fil',
+'nstab-mediawiki'         => 'Systemmelding',
+'nstab-template'          => 'Mal',
+'nstab-help'              => 'Hjelp',
+'nstab-category'          => 'Kategori',
+
+# Main script and global functions
+#
+'nosuchaction'	          => 'Funksjonen finst ikkje',
+'nosuchactiontext'        => 'Wikiprogramvaren kjenner ikkje att funksjonen som er spesifisert i nettadressa',
+'nosuchspecialpage'       => 'Ei slik spesialside finst ikkje',
+'nospecialpagetext'       => 'Du har bede om ei spesialside som ikkje finst, liste over spesialsider er [[Special:Specialpages|her]].',
+
+# General errors
+#
+'error'			  => 'Feil',
+'databaseerror'           => 'Databasefeil',
+'dberrortext'	          => 'Det oppstod ein syntaksfeil i databaseførespurnaden. Dette kan tyde på ein feil i programvaren. Den sist prøvde førespurnaden var: <blockquote><tt>$1</tt></blockquote> frå funksjonen «<tt>$2</tt>». MySQL returnerte feilen «<tt>$3: $4</tt>».',
+'dberrortextcl'           => 'Det oppstod ein syntaksfeil i databaseførespurnaden. Den sist prøvde førespurnaden var: «$1» frå funksjonen "$2".
+MySQL returnerte feilen «$3: $4».',
+'noconnect'		  => 'Wikien har tekniske problem og kunne ikkje kople til databasen.<br />$1',
+'nodb'			  => 'Kunne ikkje velja databasen $1',
+'cachederror'	          => 'Det følgjande er ein lagra kopi av den ønska sida, og er ikkje nødvendigvis oppdatert.',
+'laggedslavemode'          => 'Åtvaring: Det er mogleg at sida ikkje er heilt oppdatert.',
+'readonly'		          => 'Databasen er skriveverna',
+'enterlockreason'         => 'Skriv ein grunn for vernet, inkludert eit overslag for kva tid det vil bli oppheva',
+'readonlytext'	          => 'Databasen er akkurat no skriveverna, truleg for rutinemessig vedlikehald. Administratoren som verna han har gjeve denne forklaringa:<p>$1',
+'missingarticle'          => 'Databasen fann ikkje teksten til ei side med namnet «$1» som han skulle ha funne.
+
+Dette skjer oftast fordi du følgde ei lenkje til ei oppføring som har vorte sletta.
+Sletta oppføringar kan vanlegvis attopprettast.
+
+Dersom dette ikkje er tilfellet kan du ha funne ein feil i programvaren. Gje melding om dette til ein administrator, med adressa åt sida.',
+'readonly_lag'            => 'Databasen er mellombels skriveverna for at databasetenarane skal kunna synkronisere seg mot kvarandre',
+'internalerror'           => 'Intern feil',
+'filecopyerror'           => 'Kunne ikkje kopiere fila frå «$1» til «$2».',
+'filerenameerror'         => 'Kunne ikkje døype om fila frå «$1» til «$2».',
+'filedeleteerror'         => 'Kunne ikkje slette fila «$1».',
+'filenotfound'	          => 'Kunne ikkje finne fila «$1».',
+'unexpected'	          => 'Uventa verdi: «$1»=«$2».',
+'formerror'		  => 'Feil: Kunne ikkje sende skjema',
+'badarticleerror'         => 'Handlinga kan ikkje utførast på denne sida.',
+'cannotdelete'	          => 'Kunne ikkje slette fila. (Ho kan vera sletta av andre.)',
+'badtitle'	 	  => 'Feil i tittelen',
+'badtitletext'	          => 'Den ønska tittelen var ulovleg, tom eller feil lenka frå ei anna wiki.',
+'perfdisabled'            => 'Beklagar! Denne funksjonen er mellombels deaktivert for å spara tenarkapasitet.',
+'perfdisabledsub'         => 'Her er ein lagra kopi frå $1:',
+'perfcached'              => 'Det følgjande er frå mellomlageret åt tenaren og er ikkje nødvendigvis oppdatert.',
+'wrong_wfQuery_params'    => 'Feil parameter gjevne til wfQuery()<br />Funksjon: $1<br />Førespurnad: $2',
+'viewsource'              => 'Vis kjeldetekst',
+'protectedtext'           => 'Denne sida er verna for endring. Det kan vera fleire grunnar til dette, sjå [[{{ns:4}}:Verna side]].
+
+Du kan sjå og kopiere kjeldeteksten til denne sida:',
+'sqlhidden'               => '(SQL-førespurnaden er gøymd)',
+
+# Login and logout pages
+#
+'logouttitle'	          => 'Logg ut',
+'logouttext'	          => 'Du er no utlogga. Avhengig av innstillingane på tenaren kan nettlesaren no brukast anonymt på {{SITENAME}};
+du kan logge inn att med same kontoen eller ein annan brukar kan logge inn. Ver merksam på at nokre sider kan fortsetje å bli viste som om du er innlogga inntil du tømmer mellomlageret til nettlesaren din.',
+'welcomecreation'         => '== Hjarteleg velkommen til {{SITENAME}}, [[user:$1|$1]]! ==
+
+Brukarkontoen din har vorte oppretta. Det er tilrådd at du skriv litt om deg sjølv på [[user:$1|brukarsida di]] og ser gjennom [[special:preferences|brukarinnstillingane dine]].',
+'loginpagetitle'          => 'Logg inn',
+'yourname'		          => 'Brukarnamn',
+'yourpassword'	          => 'Passord',
+'yourpasswordagain'       => 'Skriv opp att passordet',
+'remembermypassword'      => 'Hugs passordet.',
+'yourdomainname'          => 'Domenet ditt',
+'externaldberror'         => 'Det var anten ein ekstern databasefeil i tilgjengekontrollen, eller du har ikkje løyve til å oppdatere den eksterne kontoen din.',
+'loginproblem'	          => '<b>Du vart ikkje innlogga.</b><br />Prøv om att!',
+'alreadyloggedin'         => '<strong>Brukar $1, du er allereie innlogga!</strong><br />',
+'login'			  => 'Logg inn',
+'loginprompt'             => 'Nettlesaren din må godta informasjonskapslar for at du skal kunna logge inn.',
+'userlogin'		  => 'Lag brukarkonto / logg inn',
+'logout'		  => 'Logg ut',
+'userlogout'	          => 'Logg ut',
+'notloggedin'	          => 'Ikkje innlogga',
+'createaccount'	          => 'Opprett ny konto',
+'createaccountmail'	  => 'over e-post',
+'badretype'		  => 'Passorda du skreiv inn er ikkje like.',
+'userexists'	          => 'Brukarnamnet er allereie i bruk. Vel eit nytt.',
+'youremail'		  => 'E-postadresse*',
+'yourrealname'		  => 'Namn*',
+'yourlanguage'	          => 'Språk for brukargrensesnittet',
+'yourvariant'             => 'Språkvariant',
+'yournick'		          => 'Kallenamn (for signaturar)',
+'email'                   => 'E-post',
+'prefs-help-email-enotif' => 'Denne adressa blir også brukt til å sende deg endringsmeldingar dersom du har valt å ta den funksjonen i bruk.',
+'prefs-help-realname'     => '* Namn (valfritt): Om du vel å fylle ut dette feltet, vil informasjonen bli brukt til å godskrive arbeid du har gjort.',
+'loginerror'	          => 'Innloggingsfeil',
+'prefs-help-email'        => '* E-post (valfritt): Gjer det mogleg for andre brukarar å ta kontakt med deg utan at du offentleggjer adressa.',
+'nocookiesnew'	          => 'Brukarkontoen vart oppretta, men du er ikkje innlogga. {{SITENAME}} bruker informasjonskapslar for å logge inn brukarar,
+nettlesaren din er innstilt for ikkje å godta desse. Etter at du har endra innstillingane slik at nettlesaren godtek informasjonskapslar, kan du logge inn med det nye brukarnamnet og passordet ditt.',
+'nocookieslogin'	  => '{{SITENAME}} bruker informasjonskapslar for å logge inn brukarar, nettlesaren din er innstilt for ikkje å godta desse.
+Etter at du har endra innstillingane slik at nettlesaren godtek informasjonskapslar kan du prøve å logge inn på nytt.',
+'noname'		  => 'Du har ikkje oppgjeve gyldig brukarnamn.',
+'loginsuccesstitle'       => 'Du er no innlogga',
+'loginsuccess'	          => 'Du er no innlogga som «$1».',
+'nosuchuser'	          => 'Det finst ikkje nokon brukar med brukarnamnet «$1». Sjekk at du har skrive rett eller bruk skjemaet under til å opprette ein ny konto.',
+'nosuchusershort'         => 'Det finst ikkje nokon brukar med brukarnamnet «$1». Sjekk at du har skrive rett.',
+'wrongpassword'	          => 'Du har oppgjeve eit ugyldig passord. Prøv om att.',
+'mailmypassword'          => 'Send meg nytt passord',
+'passwordremindertitle'   => 'Nytt passord til {{SITENAME}}',
+'passwordremindertext'    => 'Nokon (truleg du, frå IP-adressa $1) bad oss sende deg eit nytt passord til {{SITENAME}}. Passordet for brukaren «$2» er no «$3». Du bør logge inn og endre passordet så snart som råd.',
+'noemail'	         	  => 'Det er ikkje registrert noka e-postadresse åt brukaren «$1».',
+'passwordsent'	          => 'Eit nytt passord er sendt åt e-postadressa registrert på brukaren «$1».',
+'eauthentsent'            => 'Ein stadfestings-e-post er sendt til den oppgjevne e-postadressa. For at adressa skal kunna brukast, må du følgje instruksjonane i e-posten for å stadfeste at ho faktisk tilhøyrer deg.',
+'mailerror'               => 'Ein feil oppstod ved sending av e-post: $1',
+'acct_creation_throttle_hit' => 'Beklagar, du har allereie laga $1 brukarkontoar. Du har ikkje høve til å laga fleire.',
+'emailauthenticated'      => 'E-postadressa di vart stadfest $1.',
+'emailnotauthenticated'   => 'E-postadressa di er enno ikkje stadfest. Dei følgjande funksjonane kan ikkje bruke ho.',
+'noemailprefs'            => '<strong>Du har ikkje oppgjeve noko e-postadresse</strong>, dei følgjande funksjonane vil ikkje verke.',
+'emailconfirmlink'        => 'Stadfest e-post-adressa di',
+'invalidemailaddress'     => 'E-postadressa kan ikkje brukast sidan ho er feil oppbygd. Skriv ei rett oppbygd adresse eller tøm feltet.',
+
+# Edit page toolbar
+'bold_sample'             => 'Halvfeit skrift',
+'bold_tip'                => 'Halvfeit skrift',
+'italic_sample'           => 'Kursivskrift',
+'italic_tip'              => 'Kursivskrift',
+'link_sample'             => 'Lenkjetittel',
+'link_tip'                => 'Intern lenkje',
+'extlink_sample'          => 'http://www.eksempel.no lenkjetittel',
+'extlink_tip'             => 'Ekstern lenkje (hugs http:// prefiks)',
+'headline_sample'         => 'Overskriftstekst',
+'headline_tip'            => '2. nivå-overskrift',
+'math_sample'             => 'Skriv formel her',
+'math_tip'                => 'Matematisk formel (LaTeX)',
+'nowiki_sample'           => 'Skriv uformatert tekst her',
+'nowiki_tip'              => 'Sjå bort frå wikiformatering',
+'image_sample'            => 'Eksempel.jpg',
+'image_tip'               => 'Bilete eller lenkje til filomtale',
+'media_sample'            => 'Eksempel.ogg',
+'media_tip'               => 'Filpeikar',
+'sig_tip'                 => 'Signaturen din med tidsstempel',
+'hr_tip'                  => 'Vassrett line',
+
+# Edit pages
+#
+'summary'		  => 'Samandrag',
+'subject'		  => 'Emne/overskrift',
+'minoredit'		  => 'Uviktig endring',
+'watchthis'		  => 'Overvak side',
+'savearticle'	          => 'Lagre',
+'preview'		  => 'Førehandsvising',
+'showpreview'	          => 'Førehandsvis',
+'showdiff'                => 'Vis skilnad',
+'blockedtitle'	          => 'Brukaren er blokkert',
+'blockedtext'	          => 'Brukarnamnet ditt eller IP-adressa di er blokkert frå endring, av $1. Denne grunnen vart gjeven:<br />\'\'$2\'\'<p>Du kan kontakte $1 eller ein annan [[Project:Administratorar|administrator]] for å diskutere blokkeringa.
+
+Ver merksam på at du ikkje kan bruke «send e-post åt brukar»-funksjonen så lenge du ikkje har ei gyldig e-postadresse registrert i [[Special:Preferences|innstillingane dine]].
+
+IP-adressa di er $3. Legg henne ved eventuelle førespurnader.',
+'whitelistedittitle'      => 'Du lyt logge inn for å gjera endringar',
+'whitelistedittext'       => 'Du lyt [[{{ns:-1}}:Userlogin|logge inn]] for å endre sider.',
+'whitelistreadtitle'      => 'Du lyt logge inn for å lesa',
+'whitelistreadtext'       => 'Du lyt [[{{ns:-1}}:Userlogin|logge inn]] for å lesa sider.',
+'whitelistacctitle'       => 'Du har ikkje løyve til å laga brukarkonto',
+'whitelistacctext'        => 'For å laga brukarkontoar på denne wikien lyt du [[{{ns:-1}}:Userlogin|logge inn]] og ha rett type tilgang',
+'loginreqtitle'	          => 'Innlogging trengst',
+'loginreqlink'            => 'logge inn',
+'loginreqpagetext'        => 'Du lyt $1 for å lesa andre sider.',
+'accmailtitle'            => 'Passord er sendt.',
+'accmailtext'             => 'Passordet for «$1» er vorte sendt til $2.',
+'newarticle'	          => '(Ny)',
+'newarticletext'          => '\'\'\'{{SITENAME}} har ikkje noka side med namnet {{PAGENAME}} enno.\'\'\'
+* For å laga ei slik side kan du skrive i boksen under og klikke på «Lagre». Endringane vil vera synlege med det same.
+* Om du er ny her er det tilrådd å sjå på [[Project:Retningsliner|retningsliner]] og [[Help:Innhald|hjelp]] først.
+* Om du lagrar ei testside, vil du ikkje kunne slette ho sjølv. Ver difor venleg og bruk [[Project:Sandkasse|sandkassa]] til å eksperimentere.
+* Dersom du ikkje ønskjer å endre sida, kan du utan risiko klikke på \'\'\'attende\'\'\'-knappen i nettlesaren din.',
+'anontalkpagetext'        => '---- \'\'Dette er ei diskusjonsside for ein anonym brukar som ikkje har logga inn på eigen brukarkonto. Vi er difor nøydde til å bruke den numeriske IP-adressa knytt til internettoppkoplinga åt brukaren. Same IP-adressa kan vera knytt til fleire brukarar. Om du er ein anonym brukar og meiner at du har fått irrelevante kommentarar på ei slik side, [[{{ns:-1}}:Userlogin|logg inn]] slik at vi unngår framtidige forvekslingar med andre anonyme brukarar.\'\'',
+'noarticletext'           => '\'\'\'Sida «{{PAGENAME}}» finst ikkje på {{SITENAME}} enno.\'\'\'
+* Klikk på \'\'\'[{{fullurl:{{NAMESPACE}}:{{PAGENAME}}|action=edit}} endre]\'\'\' for å opprette sida.',
+'clearyourcache'          => '\'\'\'Merk:\'\'\' Etter lagring vil det kanskje vera naudsynt at nettlesaren omgår mellomlageret sitt for at endringane skal tre i kraft. \'\'\'Mozilla og Firefox:\'\'\' trykk \'\'Ctrl-Shift-R\'\', \'\'\'Internet Explorer:\'\'\' \'\'Ctrl-F5\'\', \'\'\'Safari:\'\'\' \'\'Cmd-Shift-R\'\', \'\'\'Konqueror:\'\'\' \'\'F5\'\'.',
+'usercssjsyoucanpreview'  => '<strong>Tip:</strong> Bruk «Førehandsvis»-knappen for å teste den nye CSS- eller JS-koden din føre du lagrar.',
+'usercsspreview'          => '\'\'\'Hugs at du berre testar ditt eige CSS, det har ikkje vorte lagra enno!\'\'\'',
+'userjspreview'           => '\'\'\'Hugs at du berre testar ditt eige JavaScript, det har ikkje vorte lagra enno!!\'\'\'',
+'updated'		  => '(Oppdatert)',
+'note'			  => '<strong>Merk:</strong>',
+'previewnote'	          => 'Hugs at dette berre er ei førehandsvising og at teksten ikkje er lagra!',
+'previewconflict'         => 'Dette er ei førehandsvising av teksten i endringsboksen over, slik han vil sjå ut om du lagrar han',
+'editing'		  => 'Endrar $1',
+'editinguser'		  => 'Endrar $1',
+'editingsection'          => 'Endrar $1 (bolk)',
+'editingcomment'          => 'Endrar $1 (kommentar)',
+'editconflict'	          => 'Endringskonflikt: $1',
+'explainconflict'         => 'Nokon annan har endra teksten sidan du byrja å skrive. Den øvste boksen inneheld den noverande teksten. Skilnaden mellom den lagra versjonen og din endra versjon er viste under. Versjonen som du har endra er i den nedste boksen. Du lyt flette endringane dine saman med den noverande teksten. <strong>Berre</strong> teksten i den øvste tekstboksen vil bli lagra når du klikkar på «Lagre».<br />',
+'yourtext'		  => 'Teksten din',
+'storedversion'           => 'Den lagra versjonen',
+'nonunicodebrowser'       => '<strong>ÅTVARING: Nettlesaren din støttar ikkje «Unicode». For å omgå problemet blir teikn utanfor ASCII-standarden viste som heksadesimale kodar. Det vil vera ein fordel om du byter nettlesar. Sjå [[hjelp:unicode]] for meir informasjon.</strong><br />',
+'editingold'	          => '<strong>ÅTVARING: Du endrar ein gammal versjon av denne sida. Om du lagrar ho, vil alle endringar gjorde etter denne versjonen bli overskrivne.</strong> (Men dei kan hentast fram att frå historikken.)<br />',
+'yourdiff'		  => 'Skilnad',
+'copyrightwarning'        => 'Merk deg at alle bidrag til {{SITENAME}} er å rekne som utgjevne under $2 (sjå $1 for detaljar). Om du ikkje vil ha teksten endra og kopiert under desse vilkåra, kan du ikkje leggje han her.<br />
+Teksten må du ha skrive sjølv, eller kopiert frå ein ressurs som er kompatibel med vilkåra eller ikkje verna av opphavsrett.
+
+<strong>LEGG ALDRI INN MATERIALE SOM ANDRE HAR OPPHAVSRETT TIL UTAN LØYVE FRÅ DEI!</strong>',
+'copyrightwarning2'       => 'Merk deg at alle bidrag til {{SITENAME}} kan bli endra, omskrive og fjerna av andre bidragsytarar. Om du ikkje vil ha teksten endra under desse vilkåra, kan du ikkje leggje han her.<br />
+Teksten må du ha skrive sjølv eller ha kopiert frå ein ressurs som er kompatibel med vilkåra eller ikkje verna av opphavsrett (sjå $1 for detaljar).
+
+<strong>LEGG ALDRI INN MATERIALE SOM ANDRE HAR OPPHAVSRETT TIL UTAN LØYVE FRÅ DEI!</strong>',
+'longpagewarning'         => '<strong>ÅTVARING: Denne sida er $1 KB lang; nokre nettlesarar kan ha problem med å handsama endringar av sider som nærmar seg eller er lengre enn 32 KB. Du bør vurdere å dele opp sida i mindre bolkar.</strong><br />',
+'readonlywarning'         => '<strong>ÅTVARING: Databasen er skriveverna på grunn av vedlikehald, difor kan du ikkje lagre endringane dine akkurat no. Det kan vera lurt å  kopiere teksten din åt ei tekstfil, så du kan lagre han her seinare.</strong><br />',
+'protectedpagewarning'    => '<strong>ÅTVARING: Denne sida er verna, slik at berre administratorar kan endre ho.</strong><br />',
+'templatesused'	          => 'Malar brukte på denne sida:',
+
+# History pages
+#
+'revhistory'	          => 'Historikk',
+'nohistory'		  => 'Det finst ikkje nokon historikk for denne sida.',
+'revnotfound'	          => 'Fann ikkje versjonen',
+'revnotfoundtext'         => 'Den gamle versjonen av sida du spurde etter finst ikkje. Sjekk nettadressa du brukte for å komma deg åt denne sida.',
+'loadhist'		  => 'Lastar historikk',
+'currentrev'	          => 'Noverande versjon',
+'revisionasof'	          => 'Versjonen frå $1',
+'previousrevision'        => '←Eldre versjon',
+'nextrevision'            => 'Nyare versjon→',
+'currentrevisionlink'     => 'Vis noverande versjon',
+'cur'			  => 'no',
+'next'			  => 'neste',
+'last'			  => 'førre',
+'orig'			  => 'orig',
+'histlegend'	          => 'Merk av for dei versjonane du vil samanlikne og trykk [Enter] eller klikk på knappen nedst på sida.<br />Forklaring: (no) = skilnad frå den noverande versjonen, (førre) = skilnad frå den førre versjonen, <b>u</b> = uviktig endring',
+'deletedrev'              => '[sletta]',
+'histfirst'               => 'Første',
+'histlast'                => 'Siste',
+
+# Diffs
+#
+'difference'	          => '(Skilnad mellom versjonar)',
+'loadingrev'	          => 'lastar versjon for å sjå skilnad',
+'lineno'		  => 'Line $1:',
+'editcurrent'	          => 'Endre den noverande versjonen av denne sida',
+'selectnewerversionfordiff' => 'Vel ein nyare versjon for samanlikning',
+'selectolderversionfordiff' => 'Vel ein eldre versjon for samanlikning',
+'compareselectedversions' => 'Samanlikn valde versjonar',
+
+# Search results
+#
+'searchresults'           => 'Søkjeresultat',
+'searchresulttext'        => 'For meir info om søkjefunksjonen i {{SITENAME}}, sjå [[Help:Søk|Hjelp]].',
+'searchsubtitle'	          => 'Du søkte etter «[[:$1]]»', // plain text
+'searchsubtitleinvalid'	          => 'Du søkte etter «$1»', // plain text
+'badquery'		  => 'Feil utforma førespurnad',
+'badquerytext'	          => 'Vi kunne ikkje svara på denne førespurnaden &mdash; Truleg fordi du prøvde å søkje etter eit ord med færre enn tre bokstavar, noko som ikkje er mogleg enno. Det kan òg vera du skreiv feil... Prøv om att.',
+'matchtotals'	          => 'Førespurnaden «$1» gav treff på $2 sidetitlar og på teksten på $3 sider.',
+'noexactmatch'               => '* \'\'\'{{SITENAME}} har ikkje noka side med [[:$1|dette namnet]].\'\'\'
+* <big>\'\'\'Du kan [[:$1|opprette ho no]]\'\'\'</big>.<br />
+(Men du bør søkje etter andre namnevariasjonar først, slik at du ikkje lagar ei side som allereie finst under eit anna namn!)',
+'titlematches'	          => 'Sidetitlar med treff på førespurnaden',
+'notitlematches'          => 'Ingen sidetitlar hadde treff på førespurnaden',
+'textmatches'	          => 'Sider med treff på førespurnaden',
+'notextmatches'	          => 'Ingen sider hadde treff på førespurnaden',
+'prevn'			  => 'førre $1',
+'nextn'			  => 'neste $1',
+'viewprevnext'	          => 'Vis ($1) ($2) ($3).',
+'showingresults'          => 'Nedanfor er opp til <strong>$1</strong> resultat som byrjar med nummer <strong>$2</strong> viste.',
+'showingresultsnum'       => 'Nedanfor er <strong>$3</strong> resultat som byrjar med nummer <strong>$2</strong> viste.',
+'nonefound'               => '\'\'\'Merk\'\'\': søk utan resultat kan komma av at du leitar etter alminnelege engelske ord som ikkje blir indekserte, eller det kan komma av at du har gjeve meir enn eitt søkjeord (berre sider som inneheld alle søkjeorda vil bli funne).',
+'powersearch'             => 'Søk',
+'powersearchtext'         => 'Søk i namnerom:<br />$1<br />$2<br />List omdirigeringar &nbsp; Søk etter: $3 $9',
+'searchdisabled'          => 'Søkjefunksjonen på {{SITENAME}} er deaktivert på grunn av for stort press på tenarane akkurat no. I mellomtida kan du søkje gjennom Google eller Yahoo! Ver merksam på at registra deira kan vera utdaterte.',
+'blanknamespace'        => '(Hovud)',
+
+# Preferences page
+#
+'preferences'	        => 'Innstillingar',
+'prefsnologin'          => 'Ikkje innlogga',
+'prefsnologintext'	    => 'Du lyt vera [[Special:Userlogin|innlogga]] for å endre brukarinnstillingane dine.',
+'prefsreset'	        => 'Innstillingane er tilbakestilte til siste lagra versjon.',
+'qbsettings'	        => 'Snøggmeny',
+'qbsettings-none'	=> 'Ingen',
+'qbsettings-fixedleft'	=> 'Venstre',
+'qbsettings-fixedright'	=> 'Høgre',
+'qbsettings-floatingleft'	=> 'Flytande venstre',
+'qbsettings-floatingright'	=> 'Flytande høgre',
+'changepassword'        => 'Skift passord',
+'skin'			=> 'Drakt',
+'math'			=> 'Matematiske formlar',
+'dateformat'            => 'Datoformat',
+'datedefault' => 'Standard',
+'math_failure'		    => 'Klarte ikkje å tolke formelen',
+'math_unknown_error'	=> 'ukjend feil',
+'math_unknown_function'	=> 'ukjend funksjon',
+'math_lexing_error'	    => 'lexerfeil',
+'math_syntax_error'	    => 'syntaksfeil',
+'math_image_error'	    => 'PNG-konverteringa var mislukka; sjekk at latex, dvips, gs, og convert er rett installerte',
+'math_bad_tmpdir'	    => 'Kan ikkje skrive til eller laga mellombels mattemappe',
+'math_bad_output'	    => 'Kan ikkje skrive til eller laga mattemappe',
+'math_notexvc'	        => 'Manglar texvc-program; sjå math/README for konfigurasjon.',
+'prefs-personal'        => 'Brukaropplysningar',
+'prefs-rc'              => 'Siste endringar og spirer',
+'prefs-misc'            => 'Andre',
+'saveprefs'		        => 'Lagre',
+'resetprefs'	        => 'Rull attende',
+'oldpassword'	        => 'Gammalt passord',
+'newpassword'	        => 'Nytt passord',
+'retypenew'		        => 'Nytt passord om att',
+'textboxsize'	        => 'Endring',
+'rows'			        => 'Rekkjer',
+'columns'		        => 'Kolonnar',
+'searchresultshead'     => 'Søk',
+'resultsperpage'        => 'Resultat per side',
+'contextlines'	        => 'Liner per resultat',
+'contextchars'	        => 'Teikn per line i resultatet',
+'stubthreshold'         => 'Grense (byte) for vising av spirer',
+'recentchangescount'    => 'Tal titlar på «siste endringar»',
+'savedprefs'	        => 'Brukarinnstillingane er lagra.',
+'timezonelegend'        => 'Tidssone',
+'timezonetext'	        => 'Tal timar lokal tid skil seg frå tenaren si tid.',
+'localtime'	            => 'Lokaltid',
+'timezoneoffset'        => 'Skilnad',
+'servertime'	        => 'Tenartid',
+'guesstimezone'         => 'Hent tidssone frå nettlesaren',
+'defaultns'		=> 'Søk som standard i desse namneromma:',
+'default'		=> 'standard',
+'files'                 => 'Filer',
+
+# User levels special page
+#
+
+# switching pan
+
+'userrights-lookup-user' => 'Administrer brukargrupper',
+'userrights-user-editname' => 'Skriv inn brukarnamn:',
+'editusergroup'         => 'Endre brukargrupper',
+
+# user groups editing
+#
+'userrights-editusergroup' => 'Endre brukargrupper',
+'saveusergroups'        => 'Lagre brukargrupper',
+'userrights-groupsmember' => 'Medlem av:',
+'userrights-groupsavailable' => 'Tilgjengelege grupper:',
+'userrights-groupshelp' => 'Vel grupper du vil at brukaren skal fjernast frå eller leggjast til. Grupper som ikkje er valde vil ikkje bli endra. Du kan velja vekk ei gruppe med [CTRL + venstreklikk]',
+
+# Recent changes
+#
+'changes'               => 'endringar',
+'recentchanges'         => 'Siste endringar',
+'recentchangestext'     => 'På denne sida ser du dei sist endra sidene i {{SITENAME}}.',
+'rcnote'		=> 'Nedanfor er dei siste <strong>$1</strong> endringane gjort dei siste <strong>$2</strong> dagane.',
+'rcnotefrom'	        => 'Nedanfor er endringane frå <b>$2</b> inntil <b>$1</b> viste.',
+'rclistfrom'	        => 'Vis nye endringar frå $1',
+'rclinks'		=> 'Vis siste $1 endringar dei siste $2 dagane<br />$3',
+'diff'			=> 'skil',
+'hist'			=> 'hist',
+'hide'			=> 'gøym',
+'show'			=> 'vis',
+'minoreditletter'       => 'u',
+'newpageletter'         => 'n',
+'sectionlink'           => '→',
+'number_of_watching_users_pageview'     => '[$1 brukar(ar) overvakar]',
+
+# Upload
+#
+'upload'		=> 'Last opp fil',
+'uploadbtn'		=> 'Last opp fil',
+'reupload'		=> 'Nytt forsøk',
+'reuploaddesc'	        => 'Attende til opplastingsskjemaet.',
+'uploadnologin'         => 'Ikkje innlogga',
+'uploadnologintext'	    => 'Du lyt vera [[Special:Userlogin|innlogga]] for å kunna laste opp filer.',
+'upload_directory_read_only' => 'Opplastingsmappa ($1) er skriveverna.',
+'uploaderror'	        => 'Feil under opplasting av fil',
+'uploadtext'	        => 'Dette er sida til å laste opp filer. Nyleg opplasta filer finn du på [[Special:Imagelist|filsida]]. Opplastingar og slettingar [[Special:Log|blir loggført]].
+
+* For å bruke eit bilete på ei side, skriv inn ei lenkje av dette slaget: <tt><nowiki>[[{{ns:6}}:Eksempelbilete.jpg]]</nowiki></tt> eller <tt><nowiki>[[{{ns:6}}:Eksempelbilete.png|bilettekst]]</nowiki></tt>, eller <tt><nowiki>[[{{ns:-2}}:Eksempelfil.ogg]]</nowiki></tt> for lydar og andre filer. For å leggje inn eit bilete som miniatyr, skriv <tt><nowiki>[[{{ns:6}}:Eksempelbilete.jpg|mini|Bilettekst]]</nowiki></tt>. Sjå [[Help:Biletsyntaks|biletesyntaks-hjelp]] for meir informasjon.
+* Om du lastar opp ei fil med same namn som ei eksisterande fil vil du bli beden om å stadfeste, og den eksisterande fila vil ikkje bli sletta.
+
+Sjå [[Help:Laste opp fil|hjelp for filopplasting]] for meir informasjon om korleis dette skjemaet verkar og korleis ein bruker filer på wikisider.
+
+For å laste opp ei fil bruker du «Bla gjennom...» eller «Browse...»-knappen som opnar ein standarddialog for val av fil. Når du vel ei fil, vil namnet på denne fila dukke opp i tekstfeltet ved sida av knappen. Skriv inn \'\'\'all\'\'\' nødvendig informasjon i \'\'Samandrag\'\'-feltet, kryss av at du ikkje bryt nokon sin opphavsrett, og klikk til slutt på \'\'Last opp fil\'\'.',
+'uploadlog'             => 'opplastingslogg',
+'uploadlogpage'         => 'Opplastingslogg',
+'uploadlogpagetext'     => 'Dette er ei liste over filer som nyleg er lasta opp.',
+'filename'		=> 'Filnamn',
+'filedesc'		        => 'Skildring',
+'fileuploadsummary'     => 'Skildring:',
+'filestatus'            => 'Opphavsrettsstatus',
+'filesource'            => 'Kjelde',
+'copyrightpage'         => '{{ns:4}}:Opphavsrett',
+'copyrightpagename'     => '{{SITENAME}} opphavsrett',
+'uploadedfiles'	        => 'Filer som er opplasta',
+'minlength'		=> 'Namnet på fila må ha minst tre teikn.',
+'illegalfilename'	=> 'Filnamnet «$1» inneheld teikn som ikkje er tillatne i sidetitlar. Skift namn på fila og prøv på nytt.',
+'badfilename'	        => 'Namnet på fila har vorte endra til «$1».',
+'badfiletype'	        => 'Filformatet «.$1» er ikkje tillete.',
+'largefile'		        => 'Det er frårådd å bruke filer som er større enn $1 byte, denne fila er $2 byte.',
+'emptyfile'		=> 'Det ser ut til at fila du lasta opp er tom. Dette kan komma av ein skrivefeil i filnamnet. Sjekk og tenk etter om du verkeleg vil laste opp fila.',
+'fileexists'		=> 'Ei fil med dette namnet finst allereie, sjekk $1 om du ikkje er sikker på om du vil endre namnet.',
+'successfulupload'      => 'Opplastinga er ferdig',
+'fileuploaded'	        => 'Fila «$1» er opplasta. Følg lenkja «$2» åt sida med skildring og fyll ut informasjon om fila &mdash; slik som kvar ho kom frå, kva tid ho vart laga og av kven, og andre ting du veit om fila.',
+'uploadwarning'         => 'Opplastingsåtvaring',
+'savefile'		        => 'Lagre fil',
+'uploadedimage'         => 'Lasta opp «[[$1]]»',
+'uploaddisabled'        => 'Beklagar, funksjonen for opplasting er deaktivert på denne nettenaren.',
+'uploadscripted'        => 'Fila inneheld HTML- eller skriptkode som feilaktig kan bli tolka og køyrd av nettlesarar.',
+'uploadcorrupt'         => 'Fila er øydelagd eller har feil etternamn. Sjekk fila og prøv på nytt.',
+'uploadvirus'           => 'Fila innheld virus! Detaljar: $1',
+'sourcefilename'        => 'Filsti',
+'destfilename'          => 'Målfilnamn',
+
+# Image list
+#
+'imagelist'		        => 'Filliste',
+'imagelisttext'	        => 'Her er ei liste med $1 filer sorterte $2.',
+'getimagelist'	        => 'hentar filliste',
+'ilsubmit'		=> 'Søk',
+'showlast'		=> 'Vis dei siste $1 filene sorterte $2.',
+'byname'		=> 'etter namn',
+'bydate'		=> 'etter dato',
+'bysize'		=> 'etter storleik',
+'imgdelete'		=> 'slett',
+'imgdesc'		=> 'skildring',
+'imglegend'		=> 'Forklaring: (skildring) = vis/endre filskildring.',
+'imghistory'	        => 'Filhistorikk',
+'revertimg'		=> 'rulltb',
+'deleteimg'		=> 'slett',
+'deleteimgcompletely'	=> 'Slett alle versjonar av fila',
+'imghistlegend'         => 'Forklaring: (no) = dette er den noverande versjonen av fila, (slett) = slett denne versjonen, (rulltb) = tilbake til denne versjonen.<br /><i>Klikk på ein dato for å sjå fila som vart opplasta då</i>.',
+'imagelinks'	        => 'Fillenkjer',
+'linkstoimage'	        => 'Dei følgjande sidene har lenkjer til denne fila:',
+'nolinkstoimage'        => 'Det finst ikkje noka side med lenkje til denne fila.',
+'sharedupload'          => 'Denne fila er ei delt opplasting og kan brukast av andre prosjekt.',
+'shareduploadwiki'      => 'Sjå $1 for meir informasjon.',
+'shareduploadwiki-linktext' => 'filskildringssida',
+'noimage'               => 'Det finst ikkje noka fil med dette namnet, men du kan $1',
+'noimage-linktext'      => 'laste ho opp',
+'uploadnewversion-linktext' => 'Last opp ny versjon av denne fila',
+
+# Statistics
+#
+'statistics'	        => 'Statistikk',
+'sitestats'		=> '{{SITENAME}}-statistikk',
+'userstats' 	        => 'Brukarstatistikk',
+'sitestatstext'         => 'Det er i alt \'\'\'$1\'\'\' sider i databasen. Dette inkluderer diskusjonssider, sider om {{SITENAME}}, småsider,
+omdirigeringssider, og andre som truleg ikkje kan kallast innhaldssider. Om ein ser bort frå desse sidene, er det \'\'\'$2\'\'\' sider som truleg er innhaldssider.
+
+Alle sidene er vortne viste \'\'\'$3\'\'\' gonger og endra \'\'\'$4\'\'\' gonger sidan programvaren vart installert. Det vil seie at kvar side gjennomsnittleg har vorte endra \'\'\'$5\'\'\' gonger, og vist \'\'\'$6\'\'\' gonger per endring.',
+'userstatstext'         => '{{SITENAME}} har \'\'\'$1\'\'\' registrerte brukarar. \'\'\'$2\'\'\' (eller \'\'\'$4%\'\'\') av desse er administratorar (sjå $3).',
+
+# Maintenance Page
+#
+'disambiguations'	=> 'Fleirtydingssider',
+'disambiguationspage'	=> 'Template:Fleirtyding',
+'disambiguationstext'	=> 'Dei følgjande artiklane har lenkjer til <i>artiklar med fleirtydige titlar</i>. Dei burde heller lenkje til ein ikkje-fleirtydig  tittel i staden.<br />Ein artikkeltittel blir handsama som fleirtydig om han har lenkjer frå $1.<br />Lenkjer frå andre namnerom er <i>ikkje</i> opprekna her.',
+'doubleredirects'	=> 'Doble omdirigeringar',
+'doubleredirectstext'	=> 'Kvar line inneheld lenkjer til den første og den andre omdirigeringa, og den første lina frå den andre omdirigeringsteksten. Det gjev som regel den «rette» målartikkelen, som den første omdirigeringa skulle ha peikt på.',
+'brokenredirects'	    => 'Blindvegsomdirigeringar',
+'brokenredirectstext'	=> 'Dei følgjande omdirigeringane viser til ei side som ikkje finst.',
+
+# Miscellaneous special pages
+#
+'lonelypages'	        => 'Foreldrelause sider',
+'uncategorizedpages'	=> 'Ikkje kategoriserte sider',
+'uncategorizedcategories' => 'Ikkje kategoriserte kategoriar',
+'unusedcategories'      => 'Ubrukte kategoriar',
+'unusedimages'	        => 'Ubrukte filer',
+'popularpages'	        => 'Populære sider',
+'nviews'		=> '$1 visingar',
+'wantedpages'	        => 'Etterspurde sider',
+'mostlinked'            => 'Sider mest lenkja til',
+'nlinks'		=> '$1 lenkjer',
+'allpages'		=> 'Alle sider',
+'prefixindex'           => 'Prefiksindeks',
+'randompage'	        => 'Tilfeldig side',
+'shortpages'	        => 'Korte sider',
+'longpages'		=> 'Lange sider',
+'deadendpages'          => 'Blindvegsider',
+'listusers'		=> 'Brukarliste',
+'specialpages'	        => 'Spesialsider',
+'spheading'		=> 'Spesialsider for alle brukarar',
+'restrictedpheading'    => 'Spesialsider med avgrensa tilgang',
+
+'recentchangeslinked'   => 'Relaterte endringar',
+'rclsub'		=> '(til sider med lenkje frå «$1»)',
+'newpages'		=> 'Nye sider',
+'ancientpages'		=> 'Eldste sider',
+'intl'		        => 'Språklenkjer',
+'move'                  => 'Flytt',
+'movethispage'	        => 'Flytt side',
+'unusedimagestext'      => '<p>Merk deg at andre internettsider kan ha lenkjer til filer som er lista her. Dei kan difor vera i aktiv bruk.</p>',
+'unusedcategoriestext'  => 'Dei følgjande kategorisidene er oppretta, sjølv om ingen artikkel eller kategori brukar dei.',
+
+'booksources'	        => 'Bokkjelder',
+'categoriespagetext'    => 'Wikien har følgjande kategoriar.',
+'data'                  => 'Data',
+'userrights'            => 'Administrering av brukartilgang',
+'groups'                => 'Brukargrupper',
+'booksourcetext'        => 'Her er ei liste over lenkjer til internettsider som låner ut og/eller sel nye og/eller brukte bøker, og som kanskje har meir informasjon om bøker du leitar etter. {{SITENAME}} er ikkje nødvendigvis assosiert med nokon av desse sidene, og lista er <b>ikkje</b> å rekne som ei spesifikk tilråding om å bruke dei.',
+'isbn'	                => 'ISBN',
+'alphaindexline'        => '$1 til $2',
+'version'		=> 'Versjon',
+'log'                   => 'Loggar',
+'alllogstext'	        => 'Kombinert vising av opplastings-, slette-, verne-, blokkerings- og administrator-loggar. Du kan avgrense visinga ved å velja loggtype, brukarnamn, og/eller sidnamn.',
+
+# Special:Allpages
+'nextpage'              => 'Neste side ($1)',
+'allpagesfrom'          => 'Vis sider frå:',
+'allarticles'           => 'Alle sider',
+'allinnamespace'        => 'Alle sider ($1 namnerom)',
+'allnotinnamespace'     => 'Alle sider (ikkje i $1-namnerommet)',
+'allpagesprev'          => 'Førre',
+'allpagesnext'          => 'Neste',
+'allpagessubmit'        => 'Vis',
+
+# Email this user
+#
+'mailnologin'	        => 'Inga avsendaradresse',
+'mailnologintext'       => 'Du lyt vera [[Special:Userlogin|innlogga]] og ha ei gyldig e-postadresse sett i [[Special:Preferences|brukarinnstillingane]] for å sende e-post åt andre brukarar.',
+'emailuser'		=> 'Send e-post åt denne brukaren',
+'emailpage'		=> 'Send e-post åt brukar',
+'emailpagetext'	        => 'Om denne brukaren har gjeve ei gyldig e-postadresse i brukarinnstillingane sine, vil dette skjemaet sende ei enkel melding. E-postadressa di frå brukarinnstillingane dine vil vera synleg i «Frå»-feltet i denne e-posten, slik at mottakaren kan svara deg.',
+'usermailererror'       => 'E-post systemet gav feilmelding:',
+'defemailsubject'       => '{{SITENAME}} e-post',
+'noemailtitle'	        => 'Inga e-postadresse',
+'noemailtext'	        => 'Denne brukaren har ikkje oppgjeve ei gyldig e-postadresse, eller har valt å ikkje opne for e-post frå andre brukarar.',
+'emailfrom'		=> 'Frå',
+'emailto'		=> 'Åt',
+'emailsubject'	        => 'Emne',
+'emailmessage'	        => 'Melding',
+'emailsend'		=> 'Send',
+'emailsent'		=> 'E-posten er sendt',
+'emailsenttext'         => 'E-posten er sendt.',
+
+# Watchlist
+#
+'watchlist'		=> 'Overvakingsliste',
+'mywatchlist'		=> 'Overvakingsliste',
+'nowatchlist'	        => 'Du har ikkje noko i overvakingslista di.',
+'watchnologin'	        => 'Ikkje innlogga',
+'watchnologintext'	    => 'Du lyt vera [[Special:Userlogin|innlogga]] for å kunna endre overvakingslista.',
+'addedwatch'	        => 'Lagt til overvakingslista',
+'addedwatchtext'        => 'Sida «$1» er lagt til [[Special:Watchlist|overvakingslista]] di. Framtidige endringar av denne sida og den tilhøyrande diskusjonssida vil bli oppførde her, og sida vil vera \'\'\'utheva\'\'\' på «[[Special:Recentchanges|siste endringar]]» for å gjera deg merksam på henne.
+
+Om du seinere vil fjerne sida frå overvakingslista, klikk på «Fjern overvaking» på den aktuelle sida.',
+'removedwatch'	        => 'Fjerna frå overvakingslista',
+'removedwatchtext'      => 'Sida «$1» er fjerna frå overvakingslista.',
+'watch'                 => 'Overvak',
+'watchthispage'	        => 'Overvak denne sida',
+'unwatch'               => 'Fjern overvaking',
+'unwatchthispage'       => 'Fjern overvaking',
+'notanarticle'	        => 'Ikkje innhaldsside',
+'watchnochange'         => 'Ingen av sidene i overvakingslista er endra i den valde perioden.',
+'watchdetails'          => 'Du har $1 sider i overvakingslista di (diskusjonssider ikkje medrekna); du kan [[Special:Watchlist/edit|vise og endre den fullstendige lista]].',
+'wlheader-enotif'       => '* Funksjonen for endringsmeldingar per e-post er på.',
+'wlheader-showupdated'  => '* Sider som har vorte endra sidan du sist såg på dei er \'\'\'utheva\'\'\'',
+'watchmethod-recent'    => 'sjekkar siste endringar for dei overvaka sidene',
+'watchmethod-list'      => 'sjekkar om dei overvaka sidene er vortne endra i det siste',
+'removechecked'         => 'Fjern dei valde sidene frå overvakingslista',
+'watchlistcontains'     => 'Overvakingslista inneheld $1 sider.',
+'watcheditlist'         => 'Dette er ei alfabetisk liste over sider du overvakar. For å fjerne sider frå lista må du velja dei sidene du vil fjerne og klikke på «Fjern overvaking»-knappen nedst på sida.',
+'removingchecked'       => 'Fjernar dei valde sidene frå overvakingslista ...',
+'couldntremove'         => 'Kunne ikkje fjerne «$1»...',
+'iteminvalidname'       => 'Problem med «$1», ugyldig namn...',
+'wlnote'                => 'Nedanfor er dei siste $1 endringane dei siste <b>$2</b> timane.',
+'wlshowlast' 		    => 'Vis siste $1 timar $2 dagar $3',
+'wlsaved'		        => 'Dette er ein mellomlagra versjon av overvakingslista di.',
+'wlhideshowown'         => '$1 eigne endringar.',
+
+'enotif_mailer'         => '{{SITENAME}}-endringsmeldingssendar',
+'enotif_reset'          => 'Merk alle sider som vitja',
+'enotif_newpagetext'    => 'Dette er ei ny side.',
+'changed'               => 'endra',
+'created'               => 'oppretta',
+'enotif_subject'        => '{{SITENAME}}-sida $PAGETITLE har vorte $CHANGEDORCREATED av $PAGEEDITOR',
+'enotif_lastvisited'    => 'Sjå $1 for alle endringane sidan siste vitjing.',
+'enotif_body'           => 'Hei $WATCHINGUSERNAME,
+
+{{SITENAME}}-sida $PAGETITLE har vorte $CHANGEDORCREATED $PAGEEDITDATE av $PAGEEDITOR, sjå $PAGETITLE_URL for den gjeldande versjonen.
+
+$NEWPAGE
+
+Bidragytaren sitt endringssamandrag: $PAGESUMMARY $PAGEMINOREDIT
+
+Du kan kontakte bidragsytaren gjennom:
+e-post: $PAGEEDITOR_EMAIL , eller
+wiki: $PAGEEDITOR_WIKI
+
+Du får ikkje fleire endringsmeldingar om denne sida før du har vitja henne på nytt. Du kan også tilbakestille endringsmeldingsstatus for alle sidene på overvakingslista di.
+
+             Helsing din overvakande {{SITENAME}}-endringsmeldingssystemven
+
+--
+For å endre innstillingane for overvakingslista di, gå til
+{{fullurl:Special:Watchlist/edit}}
+
+For hjelp og meir informasjon:
+{{fullurl:Hjelp:Overvaking}}',
+
+# Delete/protect/revert
+#
+'deletepage'	        => 'Slett side',
+'confirm'		=> 'Stadfest',
+'excontent'             => 'innhaldet var: «$1»',
+'excontentauthor'       => 'innhaldet var: «$1» (og den einaste bidragsytaren var «[[{{ns:2}}:$2|$2]]»)',
+'exbeforeblank'         => 'innhaldet før sida vart tømd var: «$1»',
+'exblank'               => 'sida var tom',
+'confirmdelete'         => 'Stadfest sletting',
+'deletesub'		=> '(Slettar «$1»)',
+'historywarning'        => 'Åtvaring: Sida du held på å slette har ein historikk:',
+'confirmdeletetext'     => 'Du held på å varig slette ei side eller eit bilete saman med heile den tilhøyrande historikken frå databasen. Stadfest at du verkeleg vil gjera dette, at du skjønner konsekvensane, og at du gjer dette i tråd med [[Project:Retningsliner|retningslinene]].',
+'actioncomplete'        => 'Ferdig',
+'deletedtext'	        => '«$1» er sletta. Sjå $2 for eit oversyn over dei siste slettingane.',
+'deletedarticle'        => 'sletta «[[$1]]»',
+'dellogpage'	        => 'Slettelogg',
+'dellogpagetext'        => 'Her er ei liste over dei siste slettingane.',
+'deletionlog'	        => 'slettelogg',
+'reverted'		=> 'Attenderulla til ein tidlegare versjon',
+'deletecomment'	        => 'Grunn for sletting',
+'imagereverted'         => 'Attenderulling av tidlegare versjon ferdig.',
+'rollback'		=> 'Rull attende endringar',
+'rollback_short'        => 'Rull attende',
+'rollbacklink'	        => 'rull attende',
+'rollbackfailed'        => 'Kunne ikkje rulle attende',
+'cantrollback'	        => 'Kan ikkje rulle attende fordi den siste brukaren er den einaste forfattaren.',
+'alreadyrolled'	        => 'Kan ikkje rulle attende den siste endringa av [[:$1]] gjort av [[{{ns:2}}:$2|$2]] ([[{{ns:3}}:$2|brukardiskusjon]]) fordi nokon andre allereie har endra sida att eller fjerna endringa.
+
+Den siste endringa vart gjort av [[{{ns:2}}:$3|$3]] ([[{{ns:3}}:$3|brukardiskusjon]]).',
+# only shown if there is an edit comment
+'editcomment'           => 'Samandraget for endringa var: "<i>$1</i>".',
+'revertpage'	        => 'Attenderulla endring gjort av [[{{ns:2}}:$2|$2]] til tidlegare versjon endra av [[{{ns:2}}:$1|$1]]',
+'sessionfailure'        => 'Det ser ut til å vera eit problem med innloggingsøkta di. Handlinga er vorten avbroten for å vera føre var mot kidnapping av økta. Bruk attendeknappen i nettlesaren din og prøv om att.',
+'protectlogpage'        => 'Vernelogg',
+'protectlogtext'        => 'Dette er ei liste over sider som er vortne verna eller har fått fjerna vern. Sjå [[{{ns:4}}:Verna side]] for meir info.',
+'protectedarticle'      => 'verna «[[$1]]»',
+'unprotectedarticle'    => 'fjerna vern av «[[$1]]»',
+'protectsub'            => '(Vernar «$1»)',
+'confirmprotecttext'    => 'Er du sikker på at du vil verne denne sida?',
+'confirmprotect'        => 'Stadfest vern',
+'protectmoveonly'       => 'Berre vern mot flytting',
+'protectcomment'        => 'Grunn til verning',
+'unprotectsub'          => '(Fjernar vern av «$1»)',
+'confirmunprotecttext'  => 'Er du sikker på at du vil fjerne vernet av denne sida?',
+'confirmunprotect'      => 'Stadfest fjerning av vern',
+'unprotectcomment'      => 'Grunn til fjerning av vern',
+
+# Undelete
+'undelete'              => 'Sletta sider',
+'undeletepage'          => 'Sletta sider',
+'viewdeletedpage'       => 'Sjå sletta sider',
+'undeletepagetext'      => 'Dei følgjande sidene er sletta, men dei finst enno i arkivet og kan attopprettast. Arkivet blir periodevis sletta.',
+'undeletearticle'       => 'Attopprett sletta side',
+'undeleterevisions'     => '$1 versjonar arkiverte',
+'undeletehistory'       => 'Om du attopprettar sida, vil alle versjonane i historikken også bli attoppretta. Dersom ei ny side med same namnet er oppretta sidan den gamle sida vart sletta, vil dei attoppretta versjonane dukke opp i historikken, og den nyaste versjonen vil bli verande som han er.',
+'undeletehistorynoadmin' => 'Ein eller fleire versjonar av denne sida har blitt sletta. Grunnlaget for sletting er oppgjeve under, saman med informasjon om kven som sletta og når versjonane vart sletta. Innhaldet i dei sletta versjonane er berre tilgjengeleg for [[special:listusers/sysop|administratorar]].',
+'undeleterevision'      => 'Sletta versjon frå $1',
+'undeletebtn'           => 'Attopprett!',
+'undeletedarticle'      => 'attoppretta «[[$1]]»',
+'undeletedrevisions'    => '$1 versjonar attoppretta',
+
+ # Namespace form on various pages
+'namespace'             => 'Namnerom:',
+'invert'                => 'Vreng val',
+
+# Contributions
+#
+'contributions'	        => 'Brukarbidrag',
+'mycontris'             => 'Eigne bidrag',
+'contribsub2'	        => 'For $1 ($2)',
+'nocontribs'	        => 'Det vart ikkje funne nokon endringar gjorde av denne brukaren.',
+'ucnote'	        => 'Her er dei siste <b>$1</b> endringane frå denne brukaren dei siste <b>$2</b> dagane.',
+'uclinks'	        => 'Vis dei siste $1 endringane; vis dei siste $2 dagane.',
+'uctop'		        => ' (øvst)' ,
+'newbies'               => 'ferskingar',
+
+# What links here
+#
+'whatlinkshere'	        => 'Lenkjer hit',
+'notargettitle'         => 'Inkje mål',
+'notargettext'	        => 'Du har ikkje spesifisert noka målside eller nokon brukar å bruke denne funksjonen på.',
+'linklistsub'	        => '(Liste over lenkjer)',
+'linkshere'	        => 'Desse sidene har lenkjer hit:',
+'nolinkshere'	        => 'Inga side har lenkje hit.',
+'isredirect'	        => 'omdirigeringsside',
+
+# Block/unblock IP
+#
+'blockip'		=> 'Blokker brukar',
+'blockiptext'	        => 'Bruk skjemaet nedanfor for å blokkere skrivetilgangen frå ei spesifikk IP-adresse eller brukarnamn. Dette bør berre gjerast for å hindre hærverk, og i samsvar med [[Project:Retningsliner|retningslinene]]. Skriv grunngjeving nedanfor (t.d. med sitat frå sider som er vortne utsette for hærverk). Opphørstid for blokkeringa skriv ein med GNU standardformat, som er skildra i [http://www.gnu.org/software/tar/manual/html_chapter/tar_7.html tar manualen] (engelsk), t.d. «1 hour», «2 days», «next Wednesday», «1 January 2017». Alternativt kan ei blokkering vera «indefinite» (ikkje fastsett) eller «infinite» (uendeleg).
+
+For informasjon om korleis ein kan blokkere seriar av IP-adresser, sjå [http://meta.wikimedia.org/wiki/Range_blocks] (engelsk). For å oppheve blokkering, sjå  [[Special:Ipblocklist|blokkeringslista]].',
+'ipaddress'		        => 'IP-adresse',
+'ipadressorusername'    => 'IP-adresse eller brukarnamn',
+'ipbreason'		=> 'Grunngjeving',
+'ipbsubmit'		=> 'Blokker denne brukaren',
+'ipbother'              => 'Anna tid',
+'ipboptions'            => '2 timar:2 hours,1 dag:1 day,3 dagar:3 days,1 veke:1 week,2 veker:2 weeks,1 månad:1 month,3 månader:3 months,6 månader:6 months,1 år:1 year,endelaus:infinite',
+'ipbotheroption'        => 'anna tid',
+'badipaddress'	        => 'IP-adressa var ugyldig eller brukarblokkering er deaktivert på tenaren.',
+'blockipsuccesssub'     => 'Blokkering utført',
+'blockipsuccesstext'    => '«[[User:$1|$1]]» er blokkert.<br />Sjå [[Special:Ipblocklist|blokkeringslista]] for alle blokkeringar.',
+'unblockip'		=> 'Opphev blokkering',
+'unblockiptext'	        => 'Bruk skjemaet nedanfor for å oppheve blokkeringa av ein tidlegare blokkert brukar.',
+'ipusubmit'		=> 'Opphev blokkering',
+'ipblocklist'	        => 'Blokkerte IP-adresser og brukarnamn',
+'blocklistline'	        => '$1, $2 blokkerte $3 ($4)',
+'infiniteblock'         => 'uendeleg opphørstid',
+'expiringblock'         => '$1 opphørstid',
+'ipblocklistempty'      => 'Blokkeringslista er tom.',
+'blocklink'		=> 'blokker',
+'unblocklink'	        => 'opphev blokkering',
+'contribslink'	        => 'bidrag',
+'autoblocker'	        => 'Automatisk blokkert fordi du deler IP-adresse med [[{{ns:2}}:$1|$1]]. Grunngjeving gjeve for blokkeringa av $1 var: «$2».',
+'blocklogpage'	        => 'Blokkeringslogg',
+'blocklogentry'	        => 'Blokkerte «[[$1]]» med opphørstid $2',
+'blocklogtext'	        => 'Dette er ein logg over blokkeringar og oppheving av blokkeringar gjorde av [[{{ns:4}}:Administratorar|administratorar]].
+IP-adresser som blir automatisk blokkerte er ikkje lista her. Sjå [[{{ns:-1}}:Ipblocklist|blokkeringslista]] for alle aktive blokkeringar.',
+'unblocklogentry'	=> 'oppheva blokkering av «$1»',
+'range_block_disabled'	=> 'Funksjonen for blokkering av IP-adresse-seriar er deaktivert på tenaren.',
+'ipb_expiry_invalid'	=> 'Ugyldig opphørstid.',
+'ip_range_invalid'	=> 'Ugyldig IP-adresseserie.',
+'proxyblocker'	        => 'Proxy-blokkerar',
+'proxyblockreason'	=> 'Du er blokkert frå å endre fordi IP-adressa di tilhøyrer ein open mellomtenar (proxy). Du bør kontakte internettleverandøren din eller kundesørvis og gje dei beskjed, ettersom dette er eit alvorleg sikkerheitsproblem.',
+'proxyblocksuccess'	=> 'Utført.',
+'sorbs'         => 'SORBS DNSBL',
+'sorbsreason'   => 'IP-adressa di er lista som ein open mellomtenar i [http://www.sorbs.net SORBS DNSBL].
+
+Dersom du er feilaktig blokkert kan http://www.sorbs.net/faq/retest.shtml vera til hjelp for å få IP-adressa di fjerna frå svartelista.',
+'sorbs_create_account_reason' => 'IP-adressa di er lista som ein open mellomtenar i [http://www.sorbs.net SORBS] DNSBL, og difor får du ikkje registrert deg.',
+
+# Developer tools
+#
+'lockdb'		=> 'Skrivevern (lock) database',
+'unlockdb'		=> 'Opphev skrivevern (unlock) av databasen',
+'lockdbtext'	        => 'Å skriveverne databasen vil gjere det umogleg for alle brukarar å endre sider, brukarinnstillingar, overvakingslister og andre ting som krev endringar i databasen. Stadfest at du ønskjer å gjera dette, og at du vil låse opp databasen att når vedlikehaldet er ferdig.',
+'unlockdbtext'	        => 'Å oppheva skrivevernet på databasen fører til at alle brukarar kan endre sider, brukarinnstillingar, overvakingslister og andre ting som krev endringar i databasen att. Stadfest at du ønskjer å gjera dette.',
+'lockconfirm'	        => 'Ja, eg vil verkeleg skriveverne databasen.',
+'unlockconfirm'	        => 'Ja, eg vil verkeleg oppheva skrivevernet på databasen.',
+'lockbtn'		=> 'Skrivevern databasen',
+'unlockbtn'		=> 'Opphev skrivevern på databasen',
+'locknoconfirm'         => 'Du har ikkje stadfest handlinga.',
+'lockdbsuccesssub'      => 'Databasen er no skriveverna',
+'unlockdbsuccesssub'    => 'Srivevernet på databasen er no oppheva',
+'lockdbsuccesstext'     => 'Databasen er no skriveverna. <br />Hugs å oppheve skrivevernet når du er ferdig med vedlikehaldet.',
+'unlockdbsuccesstext'   => 'Skrivevernet er oppheva.',
+
+# Make sysop
+'rightslogtext'         => 'Dette er ein logg over endringar av brukartilgang.',
+
+# Move page
+#
+'movepage'		=> 'Flytt side',
+'movepagetext'	        => 'Ved å bruke skjemaet nedanfor kan du få omdøypt ei side og flytt heile historikken til det nye namnet. Den gamle tittelen vil bli ei omdirigeringsside til den nye tittelen. Lenkjer til den gamle tittelen vil ikkje bli endra. Pass på å sjekke for doble eller dårlege omdirigeringar. Du er ansvarleg for at alle lenkjene stadig peiker dit det er meininga at dei skal peike.
+
+Merk at sida \'\'\'ikkje\'\'\' kan flyttast dersom det allereie finst ei side med den nye tittelen. Du kan likevel flytte ei side attende dit ho vart flytt frå dersom du gjer ein feil, så lenge den sida du flytter attende til ikkje er vorten endra sidan flyttinga.
+
+<b>ÅTVARING!</b> Dette kan vera ei drastisk og uventa endring for ei populær side; ver sikker på at du skjønner konsekvensane av dette før du fortset.',
+'movepagetalktext'      => 'Den tilhøyrande diskusjonssida, om ho finst, vil automatisk bli flytt med sida \'\'\'med mindre:\'\'\'
+*Du flytter sida til eit anna namnerom,
+*Ei diskusjonsside som ikkje er tom allereie finst under det nye namnet, eller
+*Du fjernar merkinga i boksen nedanfor.
+
+I desse falla lyt du flytte eller flette saman sida manuelt. Om det ikkje er mogleg for deg å gjera dette kan du kontakte ein [[{{ns:4}}:Administratorar|administrator]], men <b>ikkje</b> bruk klipp-og-lim metoden sidan dette ikkje tek vare på endringshistorikken.',
+'movearticle'	        => 'Flytt side',
+'movenologin'	        => 'Ikkje innlogga',
+'movenologintext'       => 'Du lyt vera registrert brukar og vera [[Special:Userlogin|innlogga]] for å flytte ei side.',
+'newtitle'		=> 'Til ny tittel',
+'movepagebtn'	        => 'Flytt side',
+'pagemovedsub'	        => 'Flyttinga er gjennomført',
+'pagemovedtext'         => 'Sida «[[$1]]» er flytt til «[[$2]]».',
+'articleexists'         => 'Ei side med det namnet finst allereie, eller det namnet du har valt er ikkje gyldig. Vel eit anna namn.',
+'talkexists'	        => '\'\'\'Innhaldssida vart flytt, men diskusjonssida som høyrer til kunne ikkje flyttast fordi det allereie finst ei side med den nye tittelen. Du lyt flette dei saman manuelt. Dersom det ikkje er mogleg for deg å gjera dette kan du kontakte ein <a href="{{localurl:Project:Administratorar}}">administrator</a> &#8212; men <b>ikkje</b> bruk klipp-og-lim metoden sidan dette ikkje tek vare på endringshistorikken.\'\'\'',
+'movedto'		=> 'er flytt til',
+'movetalk'		=> 'Flytt diskusjonssida òg om ho finst.',
+'talkpagemoved'         => 'Diskusjonssida som høyrer til vart òg flytt.',
+'talkpagenotmoved'      => 'Diskusjonssida som høyrer til vart <strong>ikkje</strong> flytt.',
+'1movedto2'		        => '«[[$1]]» flytt til «[[$2]]»',
+'1movedto2_redir'       => '«[[$1]]» flytt over omdirigering til «[[$2]]»',
+'movelogpage'           => 'Flyttelogg',
+'movelogpagetext'       => 'Under er ei liste over sider som er flytte.',
+'movereason'            => 'Grunngjeving',
+'revertmove'            => 'attende',
+'delete_and_move'       => 'Slett og flytt',
+'delete_and_move_text'  => '== Sletting påkrevd ==
+
+Målsida «[[$1]]» finst allereie. Vil du slette ho for å gje rom for flytting?',
+'delete_and_move_reason' => 'Sletta for å gje rom for flytting',
+'selfmove'              => 'Kjelde- og måltitlane er like; kan ikkje flytte sida over seg sjølv.',
+'immobile_namespace'    => 'Måltittelen høyrer til eit namnerom som gjer at sida ikkje kan flyttast dit.',
+
+# Export
+'export'		=> 'Eksporter sider',
+'exporttext'	        => 'Du kan eksportere teksten og endringshistorikken til ei side eller ein serie sider, pakka inn i litt XML. I framtida kan det hende at dette att kan bli importert til ei anna wiki som brukar MediaWiki-programvaren, men det er det ikkje støtte for dette i denne versjonen av MediaWiki.
+
+For å eksportere sider, skriv tittelen i tekstboksen nedanfor, ein tittel per line, og vel om du vil ha med alle versjonane eller berre siste versjon.
+
+Dersom du berre vil ha den siste versjonen kan du òg bruke ei lenkje, t.d. [[{{ns:Special}}:Export/MediaWiki]] for [[MediaWiki]] sida.',
+'exportcuronly'	        => 'Berre eksporter siste versjonen, ikkje med heile historikken.',
+
+# Namespace 8 related
+'allmessages'	        => 'Systemmeldingar',
+'allmessagesname' => 'Namn',
+'allmessagesdefault' => 'Standardtekst',
+'allmessagescurrent' => 'Noverande tekst',
+'allmessagestext'	=> 'Dette er ei liste over systemmeldingar i MediaWiki-namnerommet.',
+'allmessagesnotsupportedUI' => 'Det gjeldande språket for grensesnittet <b>$1</b>, støttar ikkje {{ns:-1}}:Allmessages.',
+'allmessagesnotsupportedDB' => '{{ns:-1}}:Allmessages er ikkje støtta fordi "wgUseDatabaseMessages" ikkje er aktivert på tenaren.',
+
+# Thumbnails
+'thumbnail-more'	=> 'Forstørr',
+'missingimage'		=> '<b>Bilete manglar</b><br /><i>$1</i>',
+'filemissing'           => 'Fil manglar',
+
+# Special:Import
+'import'	            => 'Importer sider',
+'importinterwiki'       => 'Transwikiimport',
+'importtext'	        => 'Du må først eksportere sida du vil importere til ei fil som du lagrar på maskina di, deretter kan du laste ho inn her.
+For å eksportere bruker du [[{{ns:-1}}:Export|eksportsida]] på kjeldewikien; hugs at kjelda òg må bruke MediaWiki-programvaren.',
+'importfailed'	        => 'Importeringa var mislukka: $1',
+'importnotext'	        => 'Tom eller ingen tekst',
+'importsuccess'	        => 'Importeringa er ferdig!',
+'importhistoryconflict' => 'Det kan vera at det er konflikt i historikken (kanskje sida vart importert før)',
+'importnosources'       => 'Ingen kjelder for transwikiimport er oppgjevne og funksjonen for opplasting av historikk er deaktivert.',
+
+# Keyboard access keys for power users
+'accesskey-search'      => 'f',
+'accesskey-minoredit'   => 'i',
+'accesskey-save'        => 's',
+'accesskey-preview'     => 'p',
+'accesskey-diff'        => 'v',
+'accesskey-compareselectedversions' => 'v',
+
+# tooltip help for some actions, most are in Monobook.js
+'tooltip-search'        => 'Søk i {{SITENAME}}',
+'tooltip-minoredit'     => 'Merk dette som ei uviktig endring',
+'tooltip-save'          => 'Lagre endringane dine',
+'tooltip-preview'       => 'Førehandsvis endringane dine, bruk denne funksjonen før du lagrar!',
+'tooltip-diff'          => 'Vis skilnaden mellom din versjon og lagra versjon, utan å lagre.',
+'tooltip-compareselectedversions' => 'Sjå endringane mellom dei valde versjonane av denne sida.',
+'tooltip-watch'         => 'Legg denne sida til i overvakingslista di',
+
+# Metadata
+'nodublincore'          => 'Funksjonen for Dublin Core RDF metadata er deaktivert på denne tenaren.',
+'nocreativecommons'     => 'Funksjonen for Creative Commons RDF er deaktivert på denne tenaren.',
+'notacceptable'         => 'Wikitenaren kan ikkje gje data i noko format som programmet ditt kan lesa.',
+
+# Attribution
+'anonymous'             => 'Anonym(e) brukar(ar) av {{SITENAME}}',
+'siteuser'              => '{{SITENAME}} brukar $1',
+'lastmodifiedatby'        => 'Denne sida vart sist endra $2, $1 av $3.',
+'and'                   => 'og',
+'othercontribs'         => 'Basert på arbeid av $1.',
+'others'                => 'andre',
+'siteusers'             => '{{SITENAME}} brukar(ar) $1',
+'creditspage'           => 'Sidegodskriving',
+'nocredits'             => 'Det finst ikkje ikkje nokon godskrivingsinformasjon for denne sida.',
+
+# Spam protection
+'spamprotectiontitle'   => 'Filter for vern mot reklame',
+'spamprotectiontext'    => 'Sida du prøvde å lagre vart blokkert av filteret for vern mot reklame (spam). Dette skjedde truleg på grunn av ei ekstern lenkje.',
+'spamprotectionmatch'   => 'Den følgjande teksten utløyste reklamefilteret: $1',
+'subcategorycount'      => 'Det er $1 underkategoriar av denne kategorien.',
+'categoryarticlecount'  => 'Det er $1 innhaldssider i denne kategorien.',
+'listingcontinuesabbrev' => ' vidare',
+
+# Info page
+'infosubtitle'          => 'Informasjon om side',
+'numedits'              => 'Tal endringar (innhaldsside): $1',
+'numtalkedits'          => 'Tal endringar (diskusjonsside): $1',
+'numwatchers'           => 'Tal brukarar som overvakar: $1',
+'numauthors'            => 'Tal ulike bidragsytarar (innhaldsside): $1',
+'numtalkauthors'        => 'Tal ulike bidragsytarar (diskusjonsside): $1',
+
+# Math options
+'mw_math_png'           => 'Vis alltid som PNG',
+'mw_math_simple'        => 'HTML om svært enkel, elles PNG',
+'mw_math_html'          => 'HTML om mogleg, elles PNG',
+'mw_math_source'        => 'Behald som TeX (for tekst-nettlesarar)',
+'mw_math_modern'        => 'Tilrådd for moderne nettlesarar',
+'mw_math_mathml'        => 'MathML dersom mogleg (eksperimentell)',
+
+# Patrolling
+'markaspatrolleddiff'   => 'Merk som patruljert',
+'markaspatrolledtext'   => 'Merk denne innhaldssida som patruljert',
+'markedaspatrolled'     => 'Merk som patruljert',
+'markedaspatrolledtext' => 'Den valde versjonen er vorten merkt som patruljert.',
+'rcpatroldisabled'      => 'Siste-endringar-patruljering er deaktivert',
+'rcpatroldisabledtext'  => 'Patruljeringsfunksjonen er deaktivert.',
+
+# stylesheets
+'monobook.js' => '/* Deprecated; use [[MediaWiki:common.js]] */',
+
+/* verktøytips og snøggtastar */
+
+'accesskey-pt-userpage' => '.',
+'tooltip-pt-userpage' => 'Brukarsida mi',
+'accesskey-pt-anonuserpage' => '.',
+'tooltip-pt-anonuserpage' => 'Brukarsida for ip-adressa du endrar under',
+'accesskey-pt-mytalk' => 'n',
+'tooltip-pt-mytalk' => 'Diskusjonssida mi',
+'accesskey-pt-anontalk' => 'n',
+'tooltip-pt-anontalk' => 'Diskusjon om endringar gjorde av denne ip-adressa',
+'accesskey-pt-preferences' => '',
+'tooltip-pt-preferences' => 'Innstillingane mine',
+'accesskey-pt-watchlist' => 'l',
+'tooltip-pt-watchlist' => 'Liste over sidene du overvakar.',
+'accesskey-pt-mycontris' => 'y',
+'tooltip-pt-mycontris' => 'Liste over bidraga mine',
+'accesskey-pt-login' => 'o',
+'tooltip-pt-login' => 'Det er ikkje obligatorisk å logga inn, men medfører mange fordelar.',
+'accesskey-pt-anonlogin' => 'o',
+'tooltip-pt-anonlogin' => 'Det er ikkje obligatorisk å logga inn, men medfører mange fordelar.',
+'accesskey-pt-logout' => '',
+'tooltip-pt-logout' => 'Logg ut',
+'accesskey-ca-talk' => 't',
+'tooltip-ca-talk' => 'Diskusjon om innhaldssida',
+'accesskey-ca-edit' => 'e',
+'tooltip-ca-edit' => 'Du kan endre denne sida. Bruk førehandsvisings-knappen før du lagrar.',
+'accesskey-ca-addsection' => '+',
+'tooltip-ca-addsection' => 'Legg til ein bolk på denne diskusjonssida.',
+'accesskey-ca-viewsource' => 'e',
+'tooltip-ca-viewsource' => 'Denne sida er verna, men du kan sjå kjeldeteksten.',
+'accesskey-ca-history' => 'h',
+'tooltip-ca-history' => 'Eldre versjonar av denne sida.',
+'accesskey-ca-protect' => '=',
+'tooltip-ca-protect' => 'Vern denne sida',
+'accesskey-ca-delete' => 'd',
+'tooltip-ca-delete' => 'Slett denne sida',
+'accesskey-ca-undelete' => 'd',
+'tooltip-ca-undelete' => 'Attopprett denne sida',
+'accesskey-ca-move' => 'm',
+'tooltip-ca-move' => 'Flytt denne sida',
+'accesskey-ca-watch' => 'w',
+'tooltip-ca-watch' => 'Legg denne sida til i overvakingslista di',
+'accesskey-ca-unwatch' => 'w',
+'tooltip-ca-unwatch' => 'Fjern denne sida frå overvakingslista di',
+'accesskey-search' => 'f',
+'tooltip-search' => 'Søk gjennom denne wikien',
+'accesskey-p-logo' => '',
+'tooltip-p-logo' => 'Hovudside',
+'accesskey-n-mainpage' => 'z',
+'tooltip-n-mainpage' => 'Gå til hovudsida',
+'accesskey-n-portal' => '',
+'tooltip-n-portal' => 'Om prosjektet, kva du kan gjera, kvar du finn saker og ting',
+'accesskey-n-currentevents' => '',
+'tooltip-n-currentevents' => 'Aktuelt',
+'accesskey-n-recentchanges' => 'r',
+'tooltip-n-recentchanges' => 'Liste over dei siste endringane som er gjort på wikien.',
+'accesskey-n-randompage' => 'x',
+'tooltip-n-randompage' => 'Vis ei tilfeldig side',
+'accesskey-n-help' => '',
+'tooltip-n-help' => 'Hjelp til å bruke alle funksjonane.',
+'accesskey-n-sitesupport' => '',
+'tooltip-n-sitesupport' => 'Støtt oss!',
+'accesskey-t-whatlinkshere' => 'j',
+'tooltip-t-whatlinkshere' => 'Liste over alle wikisidene som har lenkjer hit',
+'accesskey-t-recentchangeslinked' => 'k',
+'tooltip-t-recentchangeslinked' => 'Siste endringar på sider denne sida lenkjer til',
+'accesskey-feed-rss' => '',
+'tooltip-feed-rss' => 'RSS-mating for denne sida',
+'accesskey-feed-atom' => '',
+'tooltip-feed-atom' => 'Atom-mating for denne sida',
+'accesskey-t-contributions' => '',
+'tooltip-t-contributions' => 'Sjå liste over bidrag frå denne brukaren',
+'accesskey-t-emailuser' => '',
+'tooltip-t-emailuser' => 'Send ein e-post til denne brukaren',
+'accesskey-t-upload' => 'u',
+'tooltip-t-upload' => 'Last opp filer',
+'accesskey-t-specialpages' => 'q',
+'tooltip-t-specialpages' => 'Liste over spesialsider',
+'accesskey-ca-nstab-main' => 'c',
+'tooltip-ca-nstab-main' => 'Vis innhaldssida',
+'accesskey-ca-nstab-user' => 'c',
+'tooltip-ca-nstab-user' => 'Vis brukarsida',
+'accesskey-ca-nstab-media' => 'c',
+'tooltip-ca-nstab-media' => 'Direktelenkje (filpeikar) til fil',
+'accesskey-ca-nstab-special' => '',
+'tooltip-ca-nstab-special' => 'Dette er ei spesialside, du kan ikkje endre ho.',
+'accesskey-ca-nstab-project' => 'c',
+'tooltip-ca-nstab-project' => 'Vis prosjektside',
+'accesskey-ca-nstab-image' => 'c',
+'tooltip-ca-nstab-image' => 'Vis filside',
+'accesskey-ca-nstab-mediawiki' => 'c',
+'tooltip-ca-nstab-mediawiki' => 'Vis systemmelding',
+'accesskey-ca-nstab-template' => 'c',
+'tooltip-ca-nstab-template' => 'Vis mal',
+'accesskey-ca-nstab-help' => 'c',
+'tooltip-ca-nstab-help' => 'Vis hjelpeside',
+'accesskey-ca-nstab-category' => 'c',
+'tooltip-ca-nstab-category' => 'Vis kategoriside',
+
+# image deletion
+'deletedrevision'      => 'Slett gammal versjon $1.',
+
+# browsing diffs
+'previousdiff'         => '← Gå til førre skilnaden',
+'nextdiff'             => 'Gå til neste skilnaden →',
+'imagemaxsize'         => 'Avgrens bilete på filsider til (pikslar):',
+'thumbsize'            => 'Miniatyrstørrelse:',
+'showbigimage'         => 'Last ned høgoppløysingsversjon ($1x$2, $3 KB)',
+'newimages'            => 'Filgalleri',
+'showhidebots'         => '($1 bottar)',
+'noimages'             => 'Her er ingen filer som kan visast.',
+
+# labels for User: and Title: on Special:Log pages
+'specialloguserlabel'  => 'Brukar:',
+'speciallogtitlelabel' => 'Tittel:',
+
+'passwordtooshort'     => 'Passordet er for kort. Det må vera minst $1 teikn langt.',
+
+# Media Warning
+'mediawarning'         => '\'\'\'Åtvaring\'\'\': Denne fila kan innehalda skadelege program, ved å opna ho kan systemet ditt ta skade.
+<hr />',
+
+'fileinfo'             => '$1KB, MIME-type: <code>$2</code>',
+
+# Metadata
+'metadata'             => 'Metadata',
+
+# Exif tags
+'exif-imagewidth'      => 'Breidd',
+'exif-imagelength'     => 'Høgd',
+'exif-bitspersample'   => 'Bitar per komponent',
+'exif-compression'     => 'Komprimeringsteknikk',
+'exif-photometricinterpretation' => 'Pikselsamansetjing',
+'exif-orientation'     => 'Retning',
+'exif-samplesperpixel' => 'Tal komponentar',
+'exif-planarconfiguration' => 'Dataarrangement',
+'exif-ycbcrpositioning' => 'Y- og C-posisjon',
+'exif-xresolution'     => 'Oppløysing i breidda',
+'exif-yresolution'     => 'Oppløysing i høgda',
+'exif-resolutionunit'  => 'Eining for X- og Y-oppløysing',
+'exif-jpeginterchangeformatlength' => 'Byte JPEG-data',
+'exif-referenceblackwhite' => 'Svart og kvitt referanseverdipar',
+'exif-datetime'        => 'Dato og tid endra',
+'exif-imagedescription' => 'Tittel',
+'exif-make'            => 'Kameraprodusent',
+'exif-model'           => 'Kameramodell',
+'exif-software'        => 'Programvare brukt',
+'exif-artist'          => 'Skapar',
+'exif-copyright'       => 'Opphavsrettsleg eigar',
+'exif-exifversion'     => 'Exif-versjon',
+'exif-flashpixversion' => 'Støtta Flashpix versjon',
+'exif-colorspace'      => 'Fargerom',
+'exif-pixelydimension'  => 'Gyldig biletbreidd',
+'exif-pixelxdimension'  => 'Gyldig bilethøgd',
+'exif-makernote'        => 'Produsentnotat',
+'exif-usercomment'      => 'Brukarkommentarar',
+'exif-relatedsoundfile' => 'Tilknytt lydfil',
+'exif-datetimeoriginal' => 'Dato og tid laga',
+'exif-datetimedigitized' => 'Dato og tid digitalisert',
+'exif-subsectime'       => 'Dato og tid subsekund',
+'exif-subsectimeoriginal' => 'Dato og tid laga subsekund',
+'exif-subsectimedigitized' => 'Dato og tid digitalisert subsekund',
+'exif-exposuretime'     => 'Eksponeringstid',
+'exif-fnumber'          => 'F-nummer',
+'exif-exposureprogram'  => 'Eksponeringsprogram',
+'exif-isospeedratings'  => 'Lysfølsemd (ISO)',
+'exif-shutterspeedvalue' => 'Lukkarfart',
+'exif-aperturevalue'    => 'Blendartal',
+'exif-brightnessvalue'  => 'Lysstyrke',
+'exif-exposurebiasvalue' => 'Exposure bias',
+'exif-subjectdistance'  => 'Motivavstand',
+'exif-meteringmode'     => 'Lysmålarmodus',
+'exif-lightsource'      => 'Lyskjelde',
+'exif-flash'            => 'Blits',
+'exif-focallength'      => 'Linsefokallengd',
+'exif-subjectarea'      => 'Motivområde',
+'exif-flashenergy'      => 'Blitsstyrke',
+'exif-focalplaneresolutionunit' => 'Oppløysingseining for fokalplanet',
+'exif-subjectlocation'  => 'Motivplassering',
+'exif-exposureindex'    => 'Eksponeringsindeks',
+'exif-sensingmethod'    => 'Sensor',
+'exif-filesource'       => 'Filkjelde',
+'exif-scenetype'        => 'Scenetype',
+'exif-cfapattern'       => 'CFA-mønster',
+'exif-exposuremode'     => 'Eksponeringsmodus',
+'exif-whitebalance'     => 'Kvitbalanse',
+'exif-digitalzoomratio' => 'Digital zoom-rate',
+'exif-focallengthin35mmfilm' => '(Tilsvarande) brennvidd ved 35 mm film',
+'exif-scenecapturetype' => 'Motivtype',
+'exif-gaincontrol'      => 'Scene control',
+'exif-contrast'         => 'Kontrast',
+'exif-saturation'       => 'Metting',
+'exif-sharpness'        => 'Skarpleik',
+'exif-subjectdistancerange' => 'Motivavstandsområde',
+'exif-imageuniqueid'    => 'Unik bilete-ID',
+'exif-gpsversionid'     => 'GPS-merke-versjon',
+'exif-gpslatituderef'   => 'Nordleg eller sørleg breiddegrad',
+'exif-gpslatitude'      => 'Breiddegrad',
+'exif-gpslongituderef'  => 'Austleg eller vestleg lengdegrad',
+'exif-gpslongitude'     => 'Lengdegrad',
+'exif-gpsaltituderef'   => 'Høgdereferanse',
+'exif-gpsaltitude'      => 'Høgd over havet',
+'exif-gpstimestamp'     => 'GPS-tid (atomklokke)',
+'exif-gpssatellites'    => 'Satellittar brukt for å måle',
+'exif-gpsstatus'        => 'GPS-Mottakarstatus',
+'exif-gpsmeasuremode'   => 'Målemodus',
+'exif-gpsdop'           => 'Målepresisjon',
+'exif-gpsspeedref'      => 'Fartsmåleining',
+'exif-gpsspeed'         => 'Fart på GPS-mottakar',
+'exif-gpstrackref'      => 'Referanse for rørsleretning',
+'exif-gpstrack'         => 'Rørsleretning',
+'exif-gpsimgdirectionref' => 'Referanse for retning åt biletet',
+'exif-gpsimgdirection'  => 'Retninga åt biletet',
+'exif-gpsmapdatum'      => 'Geodetisk kartleggingsdata brukt',
+'exif-gpsdestlatituderef' => 'Referanse for målbreiddegrad',
+'exif-gpsdestlatitude'  => 'Målbreiddegrad',
+'exif-gpsdestlongituderef' => 'Referanse for mållengdegrad',
+'exif-gpsdestlongitude' => 'Mållengdegrad',
+'exif-gpsdestdistanceref' => 'Referanse for avstand til mål',
+'exif-gpsdestdistance'  => 'Avstand til mål',
+'exif-gpsprocessingmethod' => 'Namn på GPS-handsamingsmetode',
+'exif-gpsareainformation'  => 'Namn på GPS-område',
+'exif-gpsdatestamp'     => 'GPS-dato',
+'exif-gpsdifferential'  => 'GPS differential correction',
+
+# Exif attributes
+'exif-compression-1'    => 'Ukomprimert',
+
+'exif-orientation-1'    => 'Normal', // 0th row: top; 0th column: left
+'exif-orientation-2'    => 'Spegla vassrett', // 0th row: top; 0th column: right
+'exif-orientation-3'    => 'Rotert 180°', // 0th row: bottom; 0th column: right
+'exif-orientation-4'    => 'Spegla loddrett', // 0th row: bottom; 0th column: left
+'exif-orientation-5'    => 'Rotert 90° motsols og spegla vassrett', // 0th row: left; 0th column: top
+'exif-orientation-6'    => 'Rotert 90° medsols', // 0th row: right; 0th column: top
+'exif-orientation-7'    => 'Rotert 90° medsols og spegla loddrett', // 0th row: right; 0th column: bottom
+'exif-orientation-8'    => 'Rotert 90° motsols', // 0th row: left; 0th column: bottom
+
+'exif-componentsconfiguration-0' => 'finst ikkje',
+
+'exif-exposureprogram-0' => 'Ikkje bestemt',
+'exif-exposureprogram-1' => 'Manuelt',
+'exif-exposureprogram-2' => 'Normalt program',
+'exif-exposureprogram-3' => 'Blendarprioritet',
+'exif-exposureprogram-4' => 'Lukkarprioritet',
+'exif-exposureprogram-5' => 'Kreativt program (mest mogleg skarpt)',
+'exif-exposureprogram-6' => 'Handlingsprogram (med vekt på snøgg lukkar)',
+'exif-exposureprogram-7' => 'Portrettmodus (for nærbilete med uskarp bakgrunn)',
+'exif-exposureprogram-8' => 'Landskapsmodus (for landskapsbilete med skarp bakgrunn)',
+
+'exif-subjectdistance-value' => '$1 meter',
+
+'exif-meteringmode-0' => 'Ukjent',
+'exif-meteringmode-1' => 'Snittmåling',
+'exif-meteringmode-2' => 'Snittmåling med vekt på midten',
+'exif-meteringmode-3' => 'Punktmåling',
+'exif-meteringmode-4' => 'Fleirpunktsmåling',
+'exif-meteringmode-5' => 'Mønster',
+'exif-meteringmode-6' => 'Delvis',
+'exif-meteringmode-255' => 'Annan',
+
+'exif-lightsource-0' => 'Ukjent',
+'exif-lightsource-1' => 'Dagslys',
+'exif-lightsource-2' => 'Fluorescerande',
+'exif-lightsource-4' => 'Blits',
+'exif-lightsource-9' => 'Fint vêr',
+'exif-lightsource-10' => 'Overskya vêr',
+'exif-lightsource-11' => 'Skugge',
+'exif-lightsource-12' => 'Fluorescerande dagslys (D 5700 – 7100K)',
+'exif-lightsource-13' => 'Dag, kvitt, fluorescerande (N 4600 – 5400K)',
+'exif-lightsource-14' => 'Kjølig, kvitt, fluorescerande (W 3900 – 4500K)',
+'exif-lightsource-15' => 'Kvitt fluorescerande (WW 3200 – 3700K)',
+'exif-lightsource-17' => 'Standardlys A',
+'exif-lightsource-18' => 'Standardlys B',
+'exif-lightsource-19' => 'Standardlys C',
+'exif-lightsource-255' => 'Anna lyskjelde',
+
+'exif-focalplaneresolutionunit-2' => 'tommar',
+
+'exif-sensingmethod-1' => 'Ikkje bestemt',
+'exif-sensingmethod-2' => 'Einbrikka fargeområdesensor',
+'exif-sensingmethod-3' => 'Tobrikka fargeområdesensor',
+'exif-sensingmethod-4' => 'Trebrikka fargeområdesensor',
+'exif-sensingmethod-7' => 'Trilinær sensor',
+
+'exif-scenetype-1'     => 'Direkte fotografert bilete',
+
+'exif-customrendered-0' => 'Normal prosess',
+'exif-customrendered-1' => 'Tilpassa prosess',
+
+'exif-exposuremode-0'   => 'Autoeksponert',
+'exif-exposuremode-1'   => 'Manuelt eksponert',
+
+'exif-whitebalance-0'   => 'Automatisk kvitbalanse',
+'exif-whitebalance-1'   => 'Manuell kvitbalanse',
+
+'exif-scenecapturetype-0' => 'Standard',
+'exif-scenecapturetype-1' => 'Landskap',
+'exif-scenecapturetype-2' => 'Portrett',
+'exif-scenecapturetype-3' => 'Nattscene',
+
+'exif-gaincontrol-0'      => 'Ingen',
+
+'exif-contrast-0'         => 'Normal',
+'exif-contrast-1'         => 'Mjuk',
+'exif-contrast-2'         => 'Hard',
+
+'exif-saturation-0'       => 'Normal',
+'exif-saturation-1'       => 'Låg metting',
+'exif-saturation-2'       => 'Høg metting',
+
+'exif-sharpness-0'        => 'Normal',
+'exif-sharpness-1'        => 'Mjuk',
+'exif-sharpness-2'        => 'Hard',
+
+'exif-subjectdistancerange-0' => 'Ukjent',
+'exif-subjectdistancerange-1' => 'Makro',
+'exif-subjectdistancerange-2' => 'Nært',
+'exif-subjectdistancerange-3' => 'Fjernt',
+
+// Pseudotags used for GPSLatitudeRef and GPSDestLatitudeRef
+'exif-gpslatitude-n'      => 'Nordleg breiddegrad',
+'exif-gpslatitude-s'      => 'Sørleg breiddegrad',
+
+// Pseudotags used for GPSLongitudeRef and GPSDestLongitudeRef
+'exif-gpslongitude-e'     => 'Austleg lengdegrad',
+'exif-gpslongitude-w'     => 'Vestleg lengdegrad',
+
+'exif-gpsstatus-a'        => 'Måling pågår',
+
+'exif-gpsmeasuremode-2'   => 'todimensjonalt målt',
+'exif-gpsmeasuremode-3'   => 'tredimensjonalt målt',
+
+// Pseudotags used for GPSSpeedRef and GPSDestDistanceRef
+'exif-gpsspeed-k'         => 'Kilometer per time',
+'exif-gpsspeed-m'         => 'Engelsk mil per time',
+'exif-gpsspeed-n'         => 'Knop',
+
+// Pseudotags used for GPSTrackRef, GPSImgDirectionRef and GPSDestBearingRef
+'exif-gpsdirection-t'     => 'Verkeleg retning',
+'exif-gpsdirection-m'     => 'Magnetisk retning',
+
+# external editor support
+'edit-externally'         => 'Endre denne fila med eit eksternt program',
+'edit-externally-help'    => 'Sjå [[Help:Eksterne program|instruksjonane]] for meir informasjon.',
+
+# 'all' in various places, this might be different for inflected languages
+'recentchangesall'        => 'alle',
+'imagelistall'            => 'alle',
+'watchlistall1'           => 'alle',
+'watchlistall2'           => 'alle',
+'namespacesall'           => 'alle',
+
+# E-mail address confirmation
+'confirmemail'            => 'Stadfest e-postadresse',
+'confirmemail_text'       => '{{SITENAME}} krev at du stadfester e-postadressa di
+før du får brukt funksjonar knytt til e-post. Klikk på knappen under for å sende ei stadfestingsmelding
+til adressa di. E-posten kjem med ei lenkje som har ein kode; opne
+lenkja i nettlesaren din for å stadfeste at e-postadressa di er gyldig.',
+'confirmemail_send'       => 'Send stadfestingsmelding',
+'confirmemail_sent'       => 'Stadfestingsmelding er sendt.',
+'confirmemail_sendfailed' => 'Kunne ikkje sende stadfestingsmelding. Sjå til at adressa ikkje har ugyldige bokstavar.',
+'confirmemail_invalid'    => 'Feil stadfestingskode. Koden er kanskje for forelda.',
+'confirmemail_success'    => 'E-postadressa di er stadfest. Du kan no logge inn og kose deg med {{SITENAME}}.',
+'confirmemail_loggedin'   => 'E-postadressa di er stadfest.',
+'confirmemail_error'      => 'Noko gjekk gale når stadfestinga di skulle lagrast.',
+
+'confirmemail_subject'    => 'Stadfesting av e-postadresse frå {{SITENAME}}',
+'confirmemail_body'       => 'Nokon, truleg du, frå IP-adressa $1, har registrert kontoen «$2» med di e-postadresse på {{SITENAME}}.
+
+For å stadfeste at denne kontoen faktisk høyrer til deg og for å slå på
+funksjonar tilknytt e-post på {{SITENAME}} må du opne denne lenkja i nettlesaren din:
+
+$3
+
+Dersom dette *ikkje* er deg, må du ikkje opne lenkja. Denne stadfestingskoden
+blir forelda $4.',
+
+# Inputbox extension, may be useful in other contexts as well
+'tryexact'               => 'Prøv nøyaktig treff',
+'searchfulltext'         => 'Søk i all tekst',
+'createarticle'          => 'Lag side',
+
+# Scary transclusion
+'scarytranscludedisabled' => '[Interwiki transcluding is disabled]',
+'scarytranscludefailed'   => '[Henting av mal for $1 gjekk ikkje, beklagar]',
+'scarytranscludetoolong'  => '[Nettadressa er for lang, beklagar]',
+
+# Trackbacks
+'trackbackbox'           => "<div id='mw_trackbacks'>
+Attendelenkjer for denne sida:<br />
+$1
+</div>",
+'trackbackremove'        => ' ([$1 Slett])',
+'trackbacklink'          => 'Attendelenkje',
+'trackbackdeleteok'      => 'Attendelenkja vart sletta.',
+
+# delete conflict
+'deletedwhileediting'    => 'Åtvaring: Denne sida har blitt sletta medan du endra den!',
+'confirmrecreate'        => 'Brukaren «[[User:$1|$1]]» ([[User talk:$1|brukardiskusjon]]) sletta denne sida medan du endra den med denne grunngjevinga:
+: \'\'$2\'\'
+Du må stadfesta om du verkjeleg vil nyopprette denne sida.',
+'recreate'               => 'Nyopprett',
+'tooltip-recreate'       => 'Ved å trykkje på «Nyopprett» vert sida oppretta på nytt.',
+
+'unit-pixel' => 'px',
+
+);
+
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesNo.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesNo.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesNo.php	(revision 1280)
@@ -0,0 +1,1405 @@
+<?php
+/** Norwegian (Norsk (bokmål))
+ *
+ * @addtogroup Language
+ */
+
+$skinNames = array(
+	'standard'    => 'Standard',
+	'nostalgia'   => 'Nostalgi',
+	'cologneblue' => 'Kölnerblå'
+);
+
+$bookstoreList = array(
+	'Antikvariat.net' => 'http://www.antikvariat.net/',
+	'Frida' => 'http://wo.uio.no/as/WebObjects/frida.woa/wa/fres?action=sok&isbn=$1&visParametre=1&sort=alfabetisk&bs=50',
+	'Bibsys' => 'http://ask.bibsys.no/ask/action/result?cmd=&kilde=biblio&fid=isbn&term=$1&op=and&fid=bd&term=&arstall=&sortering=sortdate-&treffPrSide=50',
+	'Akademika' => 'http://www.akademika.no/sok.php?ts=4&sok=$1',
+	'Haugenbok' => 'http://www.haugenbok.no/resultat.cfm?st=extended&isbn=$1',
+	'Amazon.com' => 'http://www.amazon.com/exec/obidos/ISBN=$1'
+);
+
+$namespaceNames = array(
+	NS_MEDIA          => 'Medium',
+	NS_SPECIAL        => 'Spesial',
+	NS_MAIN           => '',
+	NS_TALK           => 'Diskusjon',
+	NS_USER           => 'Bruker',
+	NS_USER_TALK      => 'Brukerdiskusjon',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK   => '$1-diskusjon',
+	NS_IMAGE          => 'Bilde',
+	NS_IMAGE_TALK     => 'Bildediskusjon',
+	NS_MEDIAWIKI      => 'MediaWiki',
+	NS_MEDIAWIKI_TALK => 'MediaWiki-diskusjon',
+	NS_TEMPLATE       => 'Mal',
+	NS_TEMPLATE_TALK  => 'Maldiskusjon',
+	NS_HELP           => 'Hjelp',
+	NS_HELP_TALK      => 'Hjelpdiskusjon',
+	NS_CATEGORY       => 'Kategori',
+	NS_CATEGORY_TALK  => 'Kategoridiskusjon',
+);
+
+$separatorTransformTable = array(',' => "\xc2\xa0", '.' => ',' );
+$linkTrail = '/^([æøåa-z]+)(.*)$/sDu';
+
+$dateFormats = array(
+	'mdy time' => 'H:i',
+	'mdy date' => 'M j., Y',
+	'mdy both' => 'M j., Y "kl." H:i',
+
+	'dmy time' => 'H:i',
+	'dmy date' => 'j. M Y',
+	'dmy both' => 'j. M Y "kl." H:i',
+
+	'ymd time' => 'H:i',
+	'ymd date' => 'Y M j.',
+	'ymd both' => 'Y M j. "kl." H:i',
+);
+
+
+$messages = array(
+'tog-underline'         => 'Strek under lenker:',
+'tog-highlightbroken'   => 'Formater ødelagte lenker <a href="" class="new">slik</a> (alternativt: slik<a href="" class="internal">?</a>).',
+'tog-justify'           => 'Blokkjusterte avsnitt',
+'tog-hideminor'         => 'Skjul mindre endringer i siste endringer',
+'tog-extendwatchlist'   => 'Utvid overvåkningslista til å vise alle endringer i valgt tidsrom',
+'tog-usenewrc'          => 'Forbedret siste endringer (ikke for alle nettlesere)',
+'tog-numberheadings'    => 'Nummerer overskrifter',
+'tog-showtoolbar'       => 'Vis verktøylinje (JavaScript)',
+'tog-editondblclick'    => 'Rediger sider ved å dobbeltklikke (JavaScript)',
+'tog-editsection'       => 'Rediger avsnitt ved hjelp av [rediger]-lenke',
+'tog-editsectiononrightclick'=> 'Rediger avsnitt ved å høyreklikke på avsnittsoverskrift (JavaScript)',
+'tog-showtoc'           => 'Vis innholdsfortegnelse (for sider med mer enn tre seksjoner)',
+'tog-rememberpassword'  => 'Husk passordet',
+'tog-editwidth'         => 'Full bredde på redigeringsboksen',
+'tog-watchcreations'    => 'Overvåk sider du oppretter',
+'tog-watchdefault'      => 'Overvåk alle redigerte sider',
+'tog-minordefault'      => 'Merk i utgangspunktet alle redigeringer som mindre',
+'tog-previewontop'      => 'Flytt forhåndsvisningen foran redigeringsboksen',
+'tog-previewonfirst'    => 'Vis forhåndsvisning ved første redigering av en side',
+'tog-nocache'           => 'Skru av mellomlagring av sider («caching»)',
+'tog-enotifwatchlistpages'=> 'E-post med ved sideenringer',
+'tog-enotifusertalkpages'=> 'E-post meg ved endringer på brukerdiskusjonssiden min',
+'tog-enotifminoredits'  => 'E-post meg også ved mindre sideendringer',
+'tog-enotifrevealaddr'  => 'Vis e-postadressen min i e-poster',
+'tog-shownumberswatching'=> 'Vis antall overvåkende brukere',
+'tog-fancysig'          => 'Råsignatur (uten automatisk lenke)',
+'tog-externaleditor'    => 'Bruk ekstern behandler som standard',
+'tog-externaldiff'      => 'Bruk ekstern differanse som standard',
+'tog-showjumplinks'     => 'Slå på «gå til»-lenker',
+'tog-uselivepreview'    => 'Bruk levende forhåndsvisning (eksperimentell JavaScript)',
+'tog-autopatrol'        => 'Merk mine redigeringer som godkjente automatisk',
+'tog-forceeditsummary'  => 'Advar meg når jeg ikke har noen redigeringsforklaring',
+'tog-watchlisthideown'  => 'Skjul mine endringer fra overvåkningslista',
+'tog-watchlisthidebots' => 'Skjul robotendringer fra overvåkningslista',
+'underline-always'      => 'Alltid',
+'underline-never'       => 'Aldri',
+'underline-default'     => 'Bruk nettleserstandard',
+'skinpreview'           => '(forhåndsvisning)',
+'sunday'                => 'søndag',
+'monday'                => 'mandag',
+'tuesday'               => 'tirsdag',
+'wednesday'             => 'onsdag',
+'thursday'              => 'torsdag',
+'friday'                => 'fredag',
+'saturday'              => 'lørdag',
+'january'               => 'januar',
+'february'              => 'februar',
+'march'                 => 'mars',
+'april'                 => 'april',
+'may_long'              => 'mai',
+'june'                  => 'juni',
+'july'                  => 'juli',
+'august'                => 'august',
+'september'             => 'september',
+'october'               => 'oktober',
+'november'              => 'november',
+'december'              => 'desember',
+'jan'                   => 'jan',
+'feb'                   => 'feb',
+'mar'                   => 'mar',
+'apr'                   => 'apr',
+'may'                   => 'mai',
+'jun'                   => 'jun',
+'jul'                   => 'jul',
+'aug'                   => 'aug',
+'sep'                   => 'sep',
+'oct'                   => 'okt',
+'nov'                   => 'nov',
+'dec'                   => 'des',
+'categories'            => 'Kategorier',
+'pagecategories'        => '{{PLURAL:$1|Kategori|Kategorier}}',
+'category_header'       => 'Artikler i kategorien «$1»',
+'subcategories'         => 'Underkategorier',
+'mainpage'              => 'Hovedside',
+'mainpagetext'          => '<big>\'\'\'MediaWiki-programvaren er nå installert.\'\'\'</big>',
+'mainpagedocfooter'     => 'Se [http://meta.wikimedia.org/wiki/Help:Contents brukerveiledningen] for informasjon om hvordan du bruker wiki-programvaren.
+
+==Å starte==
+*[http://www.mediawiki.org/wiki/Help:Configuration_settings Konfigurasjonsliste]
+*[http://www.mediawiki.org/wiki/Help:FAQ Ofte spurte spørsmål]
+*[http://mail.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki e-postliste]',
+'portal'                => 'Prosjektportal',
+'portal-url'            => 'Project:Prosjektportal',
+'about'                 => 'Om',
+'aboutsite'             => 'Om {{SITENAME}}',
+'aboutpage'             => 'Project:Om',
+'article'               => 'Artikkel',
+'help'                  => 'Hjelp',
+'helppage'              => 'Help:Hjelp',
+'bugreports'            => 'Feilmeldinger',
+'bugreportspage'        => 'Project:Feilmeldinger',
+'sitesupport'           => 'Donasjoner',
+'sitesupport-url'       => 'Project:Donasjoner',
+'faq'                   => 'Ofte spurte spørsmål',
+'faqpage'               => 'Project:Ofte spurte spørsmål',
+'edithelp'              => 'Redigeringshjelp',
+'newwindow'             => '(åpner i nytt vindu)',
+'edithelppage'          => 'Help:Hvordan redigere',
+'cancel'                => 'Avbryt',
+'qbfind'                => 'Finn',
+'qbbrowse'              => 'Søk',
+'qbedit'                => 'Rediger',
+'qbpageoptions'         => 'Sideinnstillinger',
+'qbpageinfo'            => 'Sideinformasjon',
+'qbmyoptions'           => 'Egne innstillinger',
+'qbspecialpages'        => 'Spesialsider',
+'moredotdotdot'         => 'Mer…',
+'mypage'                => 'Min side',
+'mytalk'                => 'Min diskusjonsside',
+'anontalk'              => 'Brukerdiskusjon for denne IP-adressen',
+'navigation'            => 'Navigasjon',
+'metadata_help'         => 'Metadata (se [[Project:Metadata]] for en forklaring):',
+'currentevents'         => 'Aktuelt',
+'currentevents-url'     => 'Project:Aktuelt',
+'disclaimers'           => 'Opphavsrett',
+'disclaimerpage'        => 'Project:Opphavsrett',
+'privacy'               => 'Personvern',
+'privacypage'           => 'Project:Personvern',
+'errorpagetitle'        => 'Feil',
+'returnto'              => 'Tilbake til $1.',
+'tagline'               => 'Fra {{SITENAME}}',
+'search'                => 'Søk',
+'searchbutton'          => 'Søk',
+'go'                    => 'Gå',
+'searcharticle'                    => 'Gå',
+'history'               => 'Historikk',
+'history_short'         => 'Historikk',
+'updatedmarker'         => 'oppdatert siden mitt forrige besøk',
+'info_short'            => 'Informasjon',
+'printableversion'      => 'Utskriftsvennlig versjon',
+'permalink'             => 'Permanent lenke',
+'print'                 => 'Skriv ut',
+'edit'                  => 'Rediger',
+'editthispage'          => 'Rediger siden',
+'delete'                => 'Slett',
+'deletethispage'        => 'Slett side',
+'undelete_short'        => 'Gjenopprett $1 revisjoner',
+'protect'               => 'Lås',
+'protectthispage'       => 'Lås siden',
+'unprotect'             => 'Åpne',
+'unprotectthispage'     => 'Åpne siden',
+'newpage'               => 'Ny side',
+'talkpage'              => 'Diskuter siden',
+'specialpage'           => 'Spesialside',
+'personaltools'         => 'Personlige verktøy',
+'postcomment'           => 'Legg til en kommentar',
+'articlepage'           => 'Vis artikkel',
+'talk'                  => 'Diskusjon',
+'views'                 => 'Visninger',
+'toolbox'               => 'Verktøy',
+'userpage'              => 'Vis brukerside',
+'projectpage'           => 'Vis prosjektside',
+'imagepage'             => 'Bildeside',
+'viewtalkpage'          => 'Vis diskusjon',
+'otherlanguages'        => 'Andre språk',
+'redirectedfrom'        => '(Omdirigert fra $1)',
+'autoredircomment'      => 'Omdirigerer til [[$1]]',
+'redirectpagesub'       => 'Omdirigeringsside',
+'lastmodifiedat'          => 'Denne siden ble sist endret $2, $1.',
+'viewcount'             => 'Denne siden er vist $1 {{plural:$1|gang|ganger}}.',
+'copyright'             => 'Innholdet er tilgjengelig under $1.',
+'protectedpage'         => 'Låst side',
+'jumpto'                => 'Gå til:',
+'jumptonavigation'      => 'navigasjon',
+'jumptosearch'          => 'søk',
+'badaccess'             => 'Rettighetsfeil',
+'versionrequired'       => 'Versjon $1 av MediaWiki påtrengt',
+'versionrequiredtext'   => 'Versjon $1 av MediaWiki er nødvendig for å bruke denne siden. Se [[Special:Version]]',
+'ok'                    => 'OK',
+'pagetitle'             => '$1 - {{SITENAME}}',
+'retrievedfrom'         => 'Hentet fra «$1»',
+'youhavenewmessages'    => 'Du har $1 ($2).',
+'newmessageslink'       => 'nye meldinger',
+'newmessagesdifflink'   => 'forskjell fra forrige beskjed',
+'editsection'           => 'rediger',
+'editold'               => 'rediger',
+'editsectionhint'       => 'Rediger seksjon: $1',
+'toc'                   => 'Innhold',
+'showtoc'               => 'vis',
+'hidetoc'               => 'skjul',
+'thisisdeleted'         => 'Se eller gjenopprett $1?',
+'viewdeleted'           => 'Vis $1?',
+'restorelink'           => '{{plural:$1|én slettet revisjon|$1 slettede revisjoner}}',
+'feedlinks'             => 'Mating:',
+'feed-invalid'          => 'Ugyldig matingstype.',
+'nstab-main'            => 'Artikkel',
+'nstab-user'            => 'Brukerside',
+'nstab-media'           => 'Mediaside',
+'nstab-special'         => 'Spesial',
+'nstab-project'         => 'Prosjektside',
+'nstab-image'           => 'Fil',
+'nstab-mediawiki'       => 'Melding',
+'nstab-template'        => 'Mal',
+'nstab-help'            => 'Hjelp',
+'nstab-category'        => 'Kategori',
+'nosuchaction'          => 'Funksjonen finnes ikke',
+'nosuchactiontext'      => 'MediaWiki-programvaren kjenner ikke igjen funksjonen som er spesifisert i URL-en.',
+'nosuchspecialpage'     => 'En slik spesialside finnes ikke',
+'nospecialpagetext'     => 'Du har bedt om en ugyldig spesialside; en liste over gyldige spesialsider finnes på [[Special:Specialpages]].',
+'error'                 => 'Feil',
+'databaseerror'         => 'databasefeil',
+'dberrortext'           => 'Det har skjedd en syntaksfeil i databasen. Den sist forsøkte forespørsel var: <blockquote><tt>$1</tt></blockquote> fra funksjonen «<tt>$2</tt>». MySQL returnerte feilen «<tt>$3: $4</tt>».',
+'dberrortextcl'         => 'Det har skjedd en syntaksfeil i databasen. Den sist forsøkte forespørselen var: «$1» fra funksjonen «$2». MySQL returnerte feilen «$3: $4».',
+'noconnect'             => 'Beklager! Wikien har tekniske problemer, og kan ikke kontakte databasetjeneren.<br />$1',
+'nodb'                  => 'Kunne ikke velge databasen $1',
+'cachederror'           => 'Det følgende er en lagret kopi av den ønskede siden, og er ikke nødvendigvis oppdatert.',
+'laggedslavemode'       => 'Advarsel: Dette kan være en eldre versjon av siden.',
+'readonly'              => 'Databasen er skrivebeskyttet',
+'enterlockreason'       => 'Skriv en begrunnelse for skrivebeskyttelsen, inkludert et estimat angående når den vil bli opphevet',
+'readonlytext'          => 'Databasen er for øyeblikket skrivebeskyttet, sannsynligvis på grunn av rutinemessig vedlikehold.
+
+Administratoren som låste databasen ga forklaringen: $1',
+'missingarticle'        => 'Databasen fant ikke teksten til en side den skulle ha funnet, «$1».
+
+Hvis dette er en nylig endret side vil det vanligvis hjelpe å prøve igjen
+om et minutt eller to. Ellers er det mulig du har fulgt en lenke til en side
+som er blitt slettet.
+
+Hvis dette ikke er tilfelle er det mulig du har støtt på en programfeil.
+Send en rapport om dette til en administrator, og inkluder adressen (URL-en)
+til siden.',
+'readonly_lag'          => 'Databasen er automatisk skrivebeskyttet så slavetjenerne kan ta igjen mestertjeneren',
+'internalerror'         => 'Intern feil',
+'filecopyerror'         => 'Kunne ikke kopiere filen «$1» til «$2».',
+'filerenameerror'       => 'Kunne ikke omdøpe filen «$1» til «$2».',
+'filedeleteerror'       => 'Kunne ikke slette filen «$1».',
+'filenotfound'          => 'Kunne ikke finne filen «$1».',
+'unexpected'            => 'Uventet verdi: «$1»=«$2».',
+'formerror'             => 'Feil: kunne ikke sende skjema',
+'badarticleerror'       => 'Handlingen kan ikke utføres på denne siden.',
+'cannotdelete'          => 'Kunne ikke slette filen (den kan allerede være slettet av noen andre).',
+'badtitle'              => 'Ugyldig tittel',
+'badtitletext'          => 'Den ønskede tittelen var ugyldig, tom eller galt lenket fra et annet språk.',
+'perfdisabled'          => 'Denne funksjonen er midlertidig utilgjengelig av vedlikeholdsgrunner.',
+'perfdisabledsub'       => 'Her er en lagret kopi fra $1:',
+'perfcached'            => 'Følgende data er en lagret kopi, og ikke nødvendigvis den siste versjonen i databasen.',
+'perfcachedts'          => 'Følgende data er en lagret kopi, og ble sist oppdatert $1.',
+'viewsource'            => 'Vis kildekode',
+'viewsourcefor'         => 'for $1',
+'protectedtext'         => 'Denne siden er sperret for redigeringer; det kan være flere grunner til dette, se [[Project:Beskyttet side]].
+
+Du kan se og kopiere kildekoden til denne siden:',
+'protectedinterface'    => 'Denne siden viser brukergrensesnittet for programvaren, og er låst for å hindre misbruk.',
+'editinginterface'      => '\'\'\'Advarsel:\'\'\' Du redigerer en side som brukes i grensesnittet for programvaren. Endringer på denne siden vil påvirke hvordan grensesnittet vil se ut.',
+'sqlhidden'             => '(SQL-spørring skjult)',
+'logouttitle'           => 'Logg ut',
+'logouttext'            => '<strong>Du er nå logget ut.</strong><br />
+Du kan fortsette å bruke {{SITENAME}} anonymt, eller logge inn igjen som samme eller annen bruker.',
+'welcomecreation'       => '==Velkommen, $1!==
+
+Brukerkontoen din har blitt opprettet. Ikke glem å endre [[Special:Preferences|innstillingene dine]].',
+'loginpagetitle'        => 'Logg inn',
+'yourname'              => 'Brukernavn',
+'yourpassword'          => 'Passord',
+'yourpasswordagain'     => 'Gjenta passord',
+'remembermypassword'    => 'Husk passordet',
+'yourdomainname'        => 'Ditt domene',
+'loginproblem'          => '<strong>Du ble ikke logget inn.</strong><br />Prøv igjen!',
+'alreadyloggedin'       => '\'\'\'$1 er allerede logget inn!\'\'\'<br />',
+'login'                 => 'Logg inn',
+'loginprompt'           => 'Du må ha slått på cookies for å logge in på {{SITENAME}}.',
+'userlogin'             => 'Logg inn eller registrer deg',
+'logout'                => 'Logg ut',
+'userlogout'            => 'Logg ut',
+'notloggedin'           => 'Ikke innlogget',
+'nologin'               => 'Er du ikke registrert? $1.',
+'nologinlink'           => 'Registrer deg',
+'createaccount'         => 'Opprett ny konto',
+'gotaccount'            => 'Har du allerede et brukernavn? $1.',
+'gotaccountlink'        => 'Logg inn',
+'createaccountmail'     => 'per e-post',
+'badretype'             => 'Passordene samsvarte ikke.',
+'userexists'            => 'Brukernavnet er allerede i bruk. Velg et nytt.',
+'youremail'             => 'E-postadresse',
+'username'              => 'Brukernavn:',
+'uid'                   => 'Bruker-ID:',
+'yourrealname'          => 'Virkelig navn *',
+'yourlanguage'          => 'Språk:',
+'yourvariant'           => 'Variant',
+'yournick'              => 'Signatur',
+'badsig'                => 'Ugyldig råsignatur; sjekk HTML-tagger.',
+'email'                 => 'E-post',
+'prefs-help-email-enotif'=> 'Denne adressen brukes også til å sende e-postmeldinger dersom du har slått på dette.',
+'prefs-help-realname'   => '* Virkelig navn (valgfritt): dersom du velger å oppgi navnet, vil det bli brukt til å kreditere deg for ditt arbeid.',
+'loginerror'            => 'Innloggingsfeil',
+'prefs-help-email'      => '* E-post (valgfritt): Muliggjør at andre kan kontakte deg uten at identiteten din blir avslørt.',
+'nocookiesnew'          => 'Din brukerkonto er nå opprettet, men du har ikke logget på. {{SITENAME}} bruker informasjonskapsler («cookies») for å logge brukere på. Du har slått dem av. Slå dem p åfor å kunne logge på med ditt nye brukernavn og passord.',
+'nocookieslogin'        => '{{SITENAME}} bruker informasjonskapsler («cookies») for å logge brukere på. Du har slått dem av. Slå dem på og prøv igjen.',
+'noname'                => 'Du har ikke oppgitt et gyldig brukernavn.',
+'loginsuccesstitle'     => 'Du er nå logget inn',
+'loginsuccess'          => 'Du er nå logget inn på {{SITENAME}} som «$1».',
+'nosuchuser'            => 'Det eksisterer ingen bruker ved navn «$1». Sjekk stavemåten eller opprett en ny konto.',
+'nosuchusershort'       => 'Det finnes ingen bruker ved navn «$1». Kontroller stavemåten.',
+'nouserspecified'       => 'Du må oppgi et brukernavn.',
+'wrongpassword'         => 'Du har oppgitt et ugyldig passord. Prøv igjen.',
+'wrongpasswordempty'    => 'Du oppga ikke noe passord. Prøv igjen.',
+'mailmypassword'        => 'Send nytt passord.',
+'passwordremindertitle' => 'Nytt passord fra {{SITENAME}}',
+'passwordremindertext'  => 'Noen (antagelig deg, fra IP-adressen $1) ba oss sende deg et nytt passord til {{SITENAME}} ($4). Passordet for kontoen «$2» er nå «$3». Du bør logge inn og endre pasordet nå.
+
+Dersom noen andre gjorde denne forespørselen eller om du kom på passordet og ikke lenger ønsker å endre det, kan du ignorere denne beskjeden og fortsette å bruke det gamle passordet.',
+'noemail'               => 'Det er ikke registrert noen e-postadresse for brukeren «$1».',
+'passwordsent'          => 'Et nytt passord har blitt send til e-postadressen registrert på bruker «$1». Logg inn når du har mottatt det nye passordet.',
+'eauthentsent'          => 'En bekreftelses e-post har blitt sendt til den angitte e-postadressen. Før andre e-poster kan sendes til kontoen, må du følge instruksjonene i e-posten for å bekrefte at kontoen faktisk er din.',
+'mailerror'             => 'Feil under sending av e-post: $1',
+'acct_creation_throttle_hit'=> 'Beklager, du har allerede opprettet $1 kontoer. Du kan ikke opprette flere.',
+'emailauthenticated'    => 'E-postadressen ble bekreftet $1.',
+'emailnotauthenticated' => 'E-postadressen er ikke bekreftet. Ingen e-poster vil bli sendt for følgende tjenester.',
+'noemailprefs'          => '<strong>Ingen e-postadresse er oppgitt</strong>, så følgende funksjoner vil ikke fungere.',
+'emailconfirmlink'      => 'Bekreft e-postadressen din.',
+'invalidemailaddress'   => 'E-postadressen kan ikke aksepteres fordi den er ugyldig formatert. Skriv inn en fungerende e-postadresse eller tøm feltet.',
+'accountcreated'        => 'Brukerkonto opprettet',
+'accountcreatedtext'    => 'Brukerkonto for $1 har blitt opprettet.',
+'bold_sample'           => 'Fet tekst',
+'bold_tip'              => 'Fet tekst',
+'italic_sample'         => 'Kursiv tekst',
+'italic_tip'            => 'Kursiv tekst',
+'link_sample'           => 'Lenketittel',
+'link_tip'              => 'Intern lenke',
+'extlink_sample'        => '{{SERVER}} lenketittel',
+'extlink_tip'           => 'Ekstern lenke (husk prefikset http://)',
+'headline_sample'       => 'Overskrift',
+'headline_tip'          => 'Overskrift',
+'math_sample'           => 'Sett inn formel her',
+'math_tip'              => 'Matematisk formel (LaTeX)',
+'nowiki_sample'         => 'Sett inn uformatert tekst her',
+'nowiki_tip'            => 'Ignorer wikiformatering',
+'image_sample'          => 'Eksempel.jpg',
+'image_tip'             => 'Bilde',
+'media_sample'          => 'Eksempel.ogg',
+'media_tip'             => 'Mediafillenke',
+'sig_tip'               => 'Din signatur med dato',
+'hr_tip'                => 'Horisontal linje',
+'summary'               => 'Redigeringsforklaring',
+'subject'               => 'Overskrift',
+'minoredit'             => 'Mindre endring',
+'watchthis'             => 'Overvåk side',
+'savearticle'           => 'Lagre siden',
+'preview'               => 'Forhåndsvisning',
+'showpreview'           => 'Forhåndsvisning',
+'showlivepreview'       => 'Levende forhåndsvisning',
+'showdiff'              => 'Vis endringer',
+'anoneditwarning'       => '\'\'\'Advarsel:\'\'\' Du er ikke logget inn. Din IP-adresse vil bli bevart i sidens redigeringshistorikk.',
+'missingsummary'        => '\'\'\'Påminnelse:\'\'\' Du har ikke lagt inn en [[Help:Redigeringsforklaring|redigeringsforklaring]]. velger du \'\'Lagre siden\'\' en gang til blir endringene lagret uten forklaring.',
+'missingcommenttext'    => 'Vennligst legg inn en kommentar under.',
+'blockedtitle'          => 'Brukeren er blokkert',
+'blockedtext'           => 'Brukernavnet eller IP-adressen er blokkert av $1 med følgende begrunnelse:<br />\'\'$2\'\'
+
+Du kan kontakte $1 eller en annen [[Project:Administratorer|administrator]] for å diskutere utestengelsen.
+
+Din ip-adresse er $3. Vennligst inkluder denne i alle forespørsler du gjør.',
+'whitelistedittitle'    => 'Innlogging kreves for å redigere',
+'whitelistedittext'     => 'Du må [[Special:userlogin|logge inn]] for å redigere artikler.',
+'whitelistreadtitle'    => 'Innlogging kreves for å lese',
+'whitelistreadtext'     => 'Du må [[Special:Userlogin|logge inn]] for å lese artikler.',
+'whitelistacctitle'     => 'Du har ikke adgang til å opprette en konto',
+'whitelistacctext'      => 'For å få adgang til å opprette kontoer må du [[Special:Userlogin|logge inn]] og ha tilstrekkelige rettigheter.',
+'confirmedittitle'      => 'E-postbekreftelse nødvendig før du kan redigere',
+'confirmedittext'       => 'Du må bekrefte e-postadressen din før du kan redigere sider. Vennligst oppgi og valider e-postadressen din via [[Special:Preferences|innstillingene dine]].',
+'loginreqtitle'         => 'Innlogging kreves',
+'loginreqlink'          => 'logge inn',
+'loginreqpagetext'      => 'Du må [[Special:Userlogin|logge inn]] for å se andre sider.',
+'accmailtitle'          => 'Passord sendt',
+'accmailtext'           => 'Passordet for «$1» har blitt sendt til $2.',
+'newarticle'            => '(ny)',
+'newarticletext'        => 'Du har fulgt en lenke til en side som ikke finnes ennå. For å opprette siden, start å skrive i boksen under (se [[Project:Hjelp|hjelpesiden]] for mer informasjon). Om du kom hit ved en feil, trykk på nettleserens \'\'\'tilbake\'\'\'-knapp.',
+'anontalkpagetext'      => '----
+\'\'Dette er en diskusjonsside for en anonym bruker som ikke har opprettet konto eller ikke er logget inn. Vi er derfor nødt til å bruke den numeriske IP-adressen til å identifisere ham eller henne. En IP-adresse kan være delt mellom flere brukere. Hvis du er en anonym bruker og synes at du har fått irrelevante kommentarer på en slik side, [[Special:Userlogin|logg på]] så vi unngår framtidige forvekslinger med andre anonyme brukere.\'\'',
+'noarticletext'         => 'Det er ikke noe tekst på denne siden. Du kan [[Special:Search/{{PAGENAME}}|søke etter siden]] i andre sider, eller [{{fullurl:{{FULLPAGENAME}}|action=edit}} redigere siden].',
+'clearyourcache'        => '\'\'\'NB:\'\'\' Etter å ha lagret må du tømme nettleserens mellomlager («cache») for å kunne se endringene: \'\'\'Mozilla/Safari/Konqueror:\'\'\' hold nede \'\'Shift\'\' mens du klikker på \'\'Reload\'\' (eller trykk \'\'Ctrl-Shift-R\'\'), \'\'\'IE:\'\'\' trykk \'\'Ctrl-F5\'\', \'\'\'Opera:\'\'\' trykk \'\'F5\'\'.',
+'usercssjsyoucanpreview'=> '<strong>Tips:</strong> Bruk «Forhåndsvisning»-knappen for å teste din nye CSS/JS før du lagrer.',
+'usercsspreview'        => '\'\'\'Husk at dette bare er en forhåndsvisning av din bruker-CSS og at den ikke er lagret!\'\'\'',
+'userjspreview'         => '\'\'\'Husk at dette bare er en test eller forhåndsvisning av ditt bruker-JavaScript, og det ikke er lagret!\'\'\'',
+'userinvalidcssjstitle' => '\'\'\'Advarsel:\'\'\' Det finnes ikke noe utseende ved navn «$1». Husk at .css- og .js-sider bruker titler i små bokstaver, for eksempel User:Eksempel/monobook.css, ikke User:Eksempel/Monobook.css',
+'updated'               => '(Oppdatert)',
+'note'                  => '<strong>Merk:</strong>',
+'previewnote'           => '<strong>Dette er bare en forhåndsvisning; endringer har ikke blitt lagret!</strong>',
+'session_fail_preview'  => '<strong>Beklager! Redigeringen din kunne ikke lagres. Vennligst prøv igjen. Om det fortsetter å gå galt, prøv å logge ut og så inn igjen.</strong>',
+'previewconflict'       => 'Slik vil teksten i redigeringsvinduet se ut dersom du lagrer den.',
+'session_fail_preview_html'=> '<strong>Beklager! Redigeringen din kunne ikke lagres på grunn av tap av sesjonsdata.</strong>
+
+\'\'Fordi denne wikien har rå HTML slått på, er forhåndsvisningen skjult for å forhindre JavaScript-angrep.\'\'',
+'importing'             => 'Importerer $1',
+'editing'               => 'Redigerer $1',
+'editinguser'               => 'Redigerer $1',
+'editingsection'        => 'Redigerer $1 (seksjon)',
+'editingcomment'        => 'Redigerer $1 (kommentar)',
+'editconflict'          => 'Redigeringskonflikt: $1',
+'explainconflict'       => 'Noen andre har endret teksten siden du begynte å redigere.
+Den øverste boksen inneholder den nåværende tekst.
+Dine endringer vises i den nederste boksen.
+Du er nødt til å flette dine endringer sammen med den nåværende teksten.
+<b>Kun</b> teksten i den øverste tekstboksen vil bli lagret når du
+trykker «Lagre siden».<br />',
+'yourtext'              => 'Din tekst',
+'storedversion'         => 'Den lagrede versjonen',
+'nonunicodebrowser'     => '<strong>ADVARSEL: Nettleseren din har ikke støtte for nicode. Skru det på før du begynner å redigere artikler.</strong>',
+'editingold'            => '\'\'\'ADVARSEL: Du redigerer en gammel versjon av denne siden. Hvis du lagrer den, vil alle endringer foretatt siden denne versjonen bli overskrevet.\'\'\'',
+'yourdiff'              => 'Forskjeller',
+'copyrightwarning'      => 'Vennligst merk at alle bidrag til {{SITENAME}} anses som utgitt under $2 (se $1 for detaljer). Om du ikke vil at dine bidrag skal kunne redigeres og distribuert fritt, ikke legg det til her.<br />
+Du lover også at du har skrevet dette selv, eller kopiert det fra en ressurs som er i public domain eller lignende. <strong>IKKE LEGG TIL OPPHAVSBESKYTTET MATERIALE UTEN TILLATELSE!</strong>',
+'copyrightwarning2'     => 'Vennligst merk at alle bidrag til {{SITENAME}} kan bli redigert, endret eller fjernet av andre bidragsytere. Om du ikke vil at dine bidrag skal kunne redigeres fritt, ikke legg det til her.<br />
+Du lover også at du har skrevet dette selv, eller kopiert det fra en ressurs som er i public domain eller lignende (se $1 for detaljer). <strong>IKKE LEGG TIL OPPHAVSBESKYTTET MATERIALE UTEN TILLATELSE!</strong>',
+'longpagewarning'       => '<strong>ADVARSEL: Denne siden er $1&nbsp;kB lang; noen eldre nettlesere kan ha problemer med å redigere sider som nærmer seg eller er lengre enn 32&nbsp;kB. Overvei om ikke siden kan deles opp i mindre deler.</strong>',
+'longpageerror'         => '<strong>FEIL: Teksten du har forsøkt å lagre er $1&nbsp;kB lang, dvs. lenger enn det maksimale $2&nbsp;kB. Den kan ikke lagres.</strong>',
+'readonlywarning'       => '<strong>ADVARSEL: Databasen er låst på grunn av vedlikehold,
+så du kan ikke lagre dine endringer akkurat nå. Det kan være en god idé å
+kopiere teksten din til en tekstfil, så du kan lagre den til senere.</strong>',
+'protectedpagewarning'  => '<strong>ADVARSEL: Denne siden er låst slik at bare administratorer kan redigere den. Sørg for at du følger [[Project:Retningslinjer for låsing av sider|retningslinjer for låsing av sider]].</strong>',
+'semiprotectedpagewarning'=> '\'\'\'Merk:\'\'\' Denne siden har blitt låst slik at kun registrerte brukere kan endre den. Nyopprettede og anonyme brukere kan ikke redigere.',
+'templatesused'         => 'Maler i bruk på denne siden:',
+'edittools'             => '<!-- Teksten her vil vises under redigerings- og opplastingsboksene. -->',
+'nocreatetitle'         => 'Sideoppretting er begrenset',
+'nocreatetext'          => 'Denne siden har begrensede muligheter for oppretting av nye sider. Du kan gå tilbake og redigere en eksisterende side, eller [[Special:Userlogin|logge inn eller opprette en ny konto]].',
+'revhistory'            => 'Historikk',
+'nohistory'             => 'Denne siden har ingen historikk.',
+'revnotfound'           => 'Versjonen er ikke funnet',
+'revnotfoundtext'       => 'Den gamle versjonen av siden du etterspurte finnes ikke. Vennligst kontroller adressen du brukte for å få adgang til denne siden.',
+'loadhist'              => 'Laster historikk',
+'currentrev'            => 'Nåværende versjon',
+'revisionasof'          => 'Versjonen fra $1',
+'previousrevision'      => '← Eldre versjon',
+'nextrevision'          => 'Nyere versjon →',
+'currentrevisionlink'   => 'vis nåværende versjon',
+'cur'                   => 'nå',
+'next'                  => 'neste',
+'last'                  => 'forrige',
+'orig'                  => 'original',
+'histlegend'            => 'Forklaring: (nå) = forskjell fra nåværende versjon, (forrige) = forskjell fra forrige versjon, M = mindre endring.',
+'deletedrev'            => '[slettet]',
+'histfirst'             => 'Første',
+'histlast'              => 'Siste',
+'rev-deleted-comment'   => '(kommentar fjernet)',
+'rev-deleted-user'      => '(brukernavn fjernet)',
+'rev-deleted-text-permission'=> '<div class="mw-warning plainlinks">
+Denne sidehistorikken har blitt fjernet fra de offentlige arkivene. Det kan være detaljer i [{{fullurl:Special:Log/delete|page={{PAGENAMEE}}}} slettingsloggen].
+</div>',
+'rev-deleted-text-view' => '<div class="mw-warning plainlinks">
+Denne revisjonen har blitt fjernet fra det offentlige arkivet. Som administrator har du mulighet til å se den; det kan være detaljer i [{{fullurl:Special:Log/delete|page={{PAGENAMEE}}}} slettingsloggen].
+</div>',
+'rev-delundel'          => 'vis/skjul',
+'history-feed-title'    => 'Revisjonshistorikk',
+'history-feed-description'=> 'Revisjonshistorikk for denne siden',
+'history-feed-item-nocomment'=> '$1 på $2',
+'history-feed-empty'    => 'Den etterspurte siden finnes ikke. Den kan ha blitt slettet fra wikien, eller fått et nytt navn. Prøv å [[Special:Search|søke]] etter beslektede sider.',
+'revisiondelete'        => 'Slett/gjenopprett revisjoner',
+'revdelete-selected'    => 'Valgte revisjon av [[:$1]]:',
+'revdelete-text'        => 'Slettede revisjoner vil fortsatt vises i sidehistorikken, men innholdet vil ikke være tilgjengelig for offentligheten.
+
+Andre administratorer på denne wikien vil fortsatt kunne se det skjulte innholdet, og kan gjenopprette det, med mindre videre begrensninger blir gitt av sideoperatørene.',
+'revdelete-legend'      => 'Sett revisjonsbegrensninger:',
+'revdelete-hide-text'   => 'Skjul revisjonstekst',
+'revdelete-hide-comment'=> 'Skjul redigeringsforklaring',
+'revdelete-hide-user'   => 'Skjul bidragsyters brukernavn eller IP',
+'revdelete-hide-restricted'=> 'Disse restriksjonene gjelder også for administratorer',
+'revdelete-log'         => 'Loggkommentar:',
+'revdelete-submit'      => 'Utfør for valgte revisjoner',
+'revdelete-logentry'    => 'endre revisjonssynlighet for [[$1]]',
+'difference'            => '(Forskjeller mellom versjoner)',
+'loadingrev'            => 'laster revisjon for å se forskjeller',
+'lineno'                => 'Linje $1:',
+'editcurrent'           => 'Rediger nåværende versjon av denne siden',
+'selectnewerversionfordiff'=> 'Velg en nyere versjon for sammenligning',
+'selectolderversionfordiff'=> 'Velg en eldre versjon for sammenligning',
+'compareselectedversions'=> 'Sammenlign valgte versjoner',
+'searchresults'         => 'Søkeresultater',
+'searchresulttext'      => 'For mer informasjon om søking i {{SITENAME}}, se [[Project:Søking]].',
+'badquery'              => 'Ugyldig forespørsel',
+'badquerytext'          => 'Forespørselen kunne ikke bli utført. Det er sannsynligvis fordi du har prøvd å søke etter et ord med færre en tre bokstaver, noe som ikke fungerer ennå. Det kan også hende at du har skrevet feil. Prøv igjen.',
+'matchtotals'           => 'Forespørselen «$1» ga treff på {{plural:$2|én artikkel|$2 artikler}} og på teksten i {{plural:$3|én artikkel|$3 artikler}}.',
+'titlematches'          => 'Artikkeltitler med treff på forespørselen',
+'notitlematches'        => 'Ingen artikkeltitler hadde treff på forespørselen',
+'textmatches'           => 'Artikkeltekster med treff på forespørselen',
+'notextmatches'         => 'Ingen artikkeltekster hadde treff på forespørselen',
+'prevn'                 => 'forrige $1',
+'nextn'                 => 'neste $1',
+'viewprevnext'          => 'Vis ($1) ($2) ($3).',
+'showingresults'        => 'Nedenfor vises opptil \'\'\'$1\'\'\' resultater som starter med nummer \'\'\'$2\'\'\'.',
+'showingresultsnum'     => 'Nedenfor vises \'\'\'$3\'\'\' resultater som starter med nummer \'\'\'$2\'\'\'.',
+'nonefound'             => '\'\'\'Merk:\'\'\' Søk uten resultat skyldes ofte at man søker etter alminnelige ord som «i» eller «på», som ikke er indeksert, eller ved å spesifisere mer enn et søkeord (da kun sider som inneholder alle søkeordene blir funnet).',
+'powersearch'           => 'Søk',
+'powersearchtext'       => 'Søk i navnerom:<br />$1<br />$2 List opp omdirigeringer<br />Søk etter $3 $9',
+'searchdisabled'        => 'Søkefunksjonen er slått av. Du kan søke via Google i mellomtiden. Merk at Googles indeksering av {{SITENAME}} muligens er utdatert.',
+'blanknamespace'        => '(Hoved)',
+'preferences'           => 'Innstillinger',
+'prefsnologin'          => 'Ikke logget inn',
+'prefsnologintext'      => 'Du må være [[Special:Userlogin|logget inn]] for å endre brukerinnstillingene.',
+'prefsreset'            => 'Brukerinnstillingene er tilbakestilt.',
+'qbsettings'            => 'Brukerinnstillinger for hurtigmeny.',
+'qbsettings-none'	=> 'Ingen',
+'qbsettings-fixedleft'	=> 'Fast venstre',
+'qbsettings-fixedright'	=> 'Fast høyre',
+'qbsettings-floatingleft'	=> 'Flytende venstre',
+'changepassword'        => 'Endre passord',
+'skin'                  => 'Utseende',
+'math'                  => 'Matteformler',
+'dateformat'            => 'Datoformat',
+'datedefault'           => 'Ingen foretrukket',
+'datetime'              => 'Dato og tid',
+'math_failure'          => 'Feil i matematikken',
+'math_unknown_error'    => 'ukjent feil',
+'math_unknown_function' => 'ukjent funksjon',
+'math_lexing_error'     => 'lexerfeil',
+'math_syntax_error'     => 'syntaksfeil',
+'math_image_error'      => 'PNG-konversjon mislyktes',
+'math_bad_tmpdir'       => 'Kan ikke skrive til eller opprette midlertidig mappe',
+'math_bad_output'       => 'Kan ikke skrive til eller opprette resultatmappe',
+'prefs-personal'        => 'Brukerdata',
+'prefs-rc'              => 'Siste endringer',
+'prefs-watchlist'       => 'Overvåkningsliste',
+'prefs-watchlist-days'  => 'Antall dager vist i overvåkningslista:',
+'prefs-watchlist-edits' => 'Antall redigeringer som skal vises i utvidet overvåkningsliste:',
+'prefs-misc'            => 'Diverse',
+'saveprefs'             => 'Lagre innstillinger',
+'resetprefs'            => 'Tilbakestill instillinger',
+'oldpassword'           => 'Gammelt passord:',
+'newpassword'           => 'Nytt passord:',
+'retypenew'             => 'Gjenta nytt passord:',
+'textboxsize'           => 'Redigering',
+'rows'                  => 'Rader:',
+'columns'               => 'Kolonner',
+'searchresultshead'     => 'Søking',
+'resultsperpage'        => 'Resultater per side:',
+'contextlines'          => 'Linjer per resultat',
+'contextchars'          => 'Tegn per linje i resultatet',
+'stubthreshold'         => 'Grense for markering av småartikler:',
+'recentchangescount'    => 'Antall titler i «siste endringer»:',
+'savedprefs'            => 'Innstillingene har blitt lagret.',
+'timezonelegend'        => 'Tidssone',
+'timezonetext'          => 'Tast inn antall timer lokaltid differerer fra tjenertiden (UTC).',
+'localtime'             => 'Lokaltid',
+'timezoneoffset'        => 'Forskjell',
+'servertime'            => 'Tjenerens tid er nå',
+'guesstimezone'         => 'Hent tidssone fra nettleseren',
+'allowemail'            => 'Tillat andre å sende e-post til meg',
+'defaultns'             => 'Søk i disse navnerommene som standard:',
+'default'               => 'standard',
+'files'                 => 'Filer',
+'userrights-lookup-user'=> 'Ordne brukergrupper',
+'userrights-user-editname'=> 'Skriv inn et brukernavn:',
+'editusergroup'         => 'Endre brukergrupper',
+'userrights-editusergroup'=> 'Rediger brukergrupper',
+'saveusergroups'        => 'Lagre brukergrupper',
+'userrights-groupsmember'=> 'Medlem av:',
+'userrights-groupsavailable'=> 'Tilgjengelige grupper:',
+'userrights-groupshelp' => 'Velg grupper du vil at brukeren skal fjernes fra eller lagt til. Ikke valgte grupper vil ikke bli forandret. Du kan fjerne merkingen av en gruppe med Ctrl + Venstreklikk.',
+'group'                 => 'Gruppe:',
+'group-bot'             => 'Roboter',
+'group-sysop'           => 'Administratorer',
+'group-bureaucrat'      => 'Byråkrater',
+'group-all'             => '(alle)',
+'group-bot-member'      => 'Robot',
+'group-sysop-member'    => 'Administrator',
+'group-bureaucrat-member'=> 'Byråkrat',
+'grouppage-bot'         => 'Project:Roboter',
+'grouppage-sysop'       => 'Project:Administratorer',
+'grouppage-bureaucrat'  => 'Project:Byråkrater',
+'changes'               => 'endringer',
+'recentchanges'         => 'Siste endringer',
+'recentchangestext'     => 'Vis de siste endringene til denne siden',
+'rcnote'                => 'Nedenfor vises de siste <strong>$1</strong> endringene de siste <strong>$2</strong> dagene, fra $3.',
+'rcnotefrom'            => 'Nedenfor er endringene fra <strong>$2</strong> til <strong>$1</strong> vist.',
+'rclistfrom'            => 'Vis nye endringer med start fra $1',
+'rcshowhideminor'       => '$1 mindre endringer',
+'rcshowhidebots'        => '$1 roboter',
+'rcshowhideliu'         => '$1 innloggede brukere',
+'rcshowhideanons'       => '$1 anonyme brukere',
+'rcshowhidepatr'        => '$1 godkjente endringer',
+'rcshowhidemine'        => '$1 mine endringer',
+'rclinks'               => 'Vis siste $1 endringer i de siste $2 dagene<br />$3',
+'diff'                  => 'diff',
+'hist'                  => 'hist',
+'hide'                  => 'skjul',
+'show'                  => 'vis',
+'minoreditletter'       => 'm',
+'newpageletter'         => 'N',
+'sectionlink'           => '→',
+'number_of_watching_users_pageview'=> '[$1 overvåkende {{plural:$1|bruker|brukere}}]',
+'rc_categories'         => 'Begrens til kategorier (skilletegn: «|»)',
+'rc_categories_any'     => 'Alle',
+'upload'                => 'Last opp fil',
+'uploadbtn'             => 'Last opp fil',
+'reupload'              => 'Last opp fil igjen',
+'reuploaddesc'          => 'Tilbake til skjemaet for å laste opp filer.',
+'uploadnologin'         => 'Ikke logget inn',
+'uploadnologintext'     => 'Du må være [[Special:Userlogin|logget inn]] for å kunne laste opp filer.',
+'upload_directory_read_only'=> 'Opplastingsmappa ($1) er ikke skrivbar for tjeneren.',
+'uploaderror'           => 'Feil under opplasting av fil',
+'uploadtext'            => 'Bruk skjemaet under for å laste opp filer. For å se eller søke i tidligere opplastede filer, gå til [[Special:Imagelist|fillista]]. Opplastinger lagres også i [[Special:Log/upload|opplastingsloggen]].
+
+For å inkludere et bilde på en side, bruk ei slik lenke:
+*\'\'\'<nowiki>[[</nowiki>{{ns:Image}}:Filnavn.jpg<nowiki>]]</nowiki>\'\'\'
+*\'\'\'<nowiki>[[</nowiki>{{ns:Image}}:Filnavn.png|Alternativ tekst<nowiki>]]</nowiki>\'\'\'
+For å lenke direkte til bildet, skriv:
+*\'\'\'<nowiki>[[</nowiki>{{ns:Media}}:Filnavn.ogg<nowiki>]]</nowiki>\'\'\'',
+'uploadlog'             => 'opplastingslogg',
+'uploadlogpage'         => 'Opplastingslogg',
+'uploadlogpagetext'     => 'Her er en liste over de siste opplastede filene.',
+'filename'              => 'Filnavn',
+'filedesc'              => 'Beskrivelse',
+'fileuploadsummary'     => 'Filbeskrivelse:',
+'filestatus'            => 'Opphavsrettsstatus',
+'filesource'            => 'Kilde',
+'copyrightpage'         => 'Project:Opphavsrett',
+'copyrightpagename'     => 'Opphavsrett',
+'uploadedfiles'         => 'Filer som er lastet opp',
+'ignorewarning'         => 'Lagre filen likevel.',
+'ignorewarnings'        => 'Ignorer eventuelle advarsler',
+'minlength'             => 'Navnet på filen må bestå av minst tre bokstaver.',
+'illegalfilename'       => 'Filnavnet «$1» inneholder ugyldige tegn; gi filem et nytt navn og prøv igjen.',
+'badfilename'           => 'Navnet på filen er blitt endret til «$1».',
+'badfiletype'           => '«.$1» er ikke et tillatt filformat.',
+'largefile'             => 'Det anbefales at filer ikke er større enn $1&nbsp;bytes; denne filen er $2&nbsp;bytes',
+'largefileserver'       => 'Denne filen er større enn det tjeneren er konfigurert til å tillate.',
+'emptyfile'             => 'Filen du lastet opp ser ut til å være tom. Dette kan komme av en skrivefeil i filnavnet. Sjekk om du virkelig vil laste opp denne filen.',
+'fileexists'            => 'En fil med dette navnet finnes allerede. Sjekk $1 hvis du ikke er sikker på at du vil forandre den.',
+'fileexists-forbidden'  => 'En fil med dette navnet finnes fra før; gå tilbake og last opp filen under et nytt navn. [[Image:$1|thumb|center|$1]]',
+'fileexists-shared-forbidden'=> 'En fil med dette navnet finnes fra før i det delte fillageret; gå tilbake og last opp filen under et nytt navn. [[Image:$1|thumb|center|$1]]',
+'successfulupload'      => 'Opplastingen er gjennomført',
+'fileuploaded'          => 'Opplastingen av $1 var vellykket. Vennligst følg denne lenken $2 til beskrivelsessiden og fyll inn informasjon om filen, som hvor den kom fra, når og av hvem den ble laget, og annen informasjon. Om filen er et bilde, kan du sette det inn slik: <tt><nowiki>[[Image:$1|thumb|Beskrivelse]]</nowiki></tt>',
+'uploadwarning'         => 'Opplastingsadvarsel',
+'savefile'              => 'Lagre fil',
+'uploadedimage'         => 'Lastet opp «[[$1]]»',
+'uploaddisabled'        => 'Opplastingsfunksjonen er deaktivert',
+'uploaddisabledtext'    => 'Opplasting er slått av på denne wikien.',
+'uploadscripted'        => 'Denne filen inneholder HTML eller skripting som kan feiltolkes av en nettleser.',
+'uploadcorrupt'         => 'Denne filen er ødelagt eller er en ugyldig filtype. Sjekk filen og last den opp på nytt.',
+'uploadvirus'           => 'Denne filen inneholder virus! Detaljer: $1',
+'sourcefilename'        => 'Velg en fil',
+'destfilename'          => 'Ønsket filnavn',
+'filewasdeleted'        => 'En fil ved dette navnet har blitt lastet opp tidligere og så slettet. Sjekk $1 før du forsøker å laste det opp igjen.',
+'license'               => 'Lisensiering',
+'nolicense'             => 'Ingen spesifisert',
+'imagelist'             => 'Bildeliste',
+'imagelisttext'         => 'Her er en liste med <strong>$1</strong> filer sortert <strong>$2</strong>.',
+'imagelistforuser'      => 'Denne listen viser filer lastet opp av $1.',
+'getimagelist'          => 'henter filliste',
+'ilsubmit'              => 'Søk',
+'showlast'              => 'Vis de siste $1 filene sortert $2.',
+'byname'                => 'etter navn',
+'bydate'                => 'etter dato',
+'bysize'                => 'etter størrelse',
+'imgdelete'             => 'slett',
+'imgdesc'               => 'beskrivelse',
+'imglegend'             => 'Forklaring: (beskrivelse) = vis/rediger filbeskrivelse.',
+'imghistory'            => 'Filhistorikk',
+'revertimg'             => 'gjenopprett',
+'deleteimg'             => 'slett',
+'deleteimgcompletely'   => 'Slett alle revisjoner av denne filen',
+'imghistlegend'         => 'Forklaring: (nå) = dette er den nåværende filen, (slett) = slett denne gamle versjonen, (gjenopprett) = gjenopprett en gammel versjon.
+<br /><i>Klikk på en dato for å se filen som ble lastet opp</i>.',
+'imagelinks'            => 'Lenker',
+'linkstoimage'          => 'Følgende sider har lenker til denne filen:',
+'nolinkstoimage'        => 'Det er ingen sider som bruker denne filen.',
+'sharedupload'          => 'Denne filen deles av andre prosjekter.',
+'shareduploadwiki'      => 'Se $1 for mer informasjon.',
+'shareduploadwiki-linktext'=> 'filbeskrivelsesside',
+'noimage'               => 'Ingen fil ved dette navnet finnes, du kan $1.',
+'noimage-linktext'      => 'laste det opp',
+'uploadnewversion-linktext'=> 'Last opp en ny versjon av denne filen',
+'mimesearch'            => 'MIME-søk',
+'mimetype'              => 'MIME-type:',
+'download'              => 'last ned',
+'unwatchedpages'        => 'Sider som ikke er overvåket',
+'listredirects'         => 'Liste over omdirigeringer',
+'unusedtemplates'       => 'Ubrukte maler',
+'unusedtemplatestext'   => 'Denne siden lister opp alle sider i malnavnerommet som ikke er inkludert på en annen side. Husk å sjekke for andre slags lenker til malen før du sletter den.',
+'unusedtemplateswlh'    => 'andre lenker',
+'randomredirect'        => 'Tilfeldig omdirigering',
+'statistics'            => 'Statistikk',
+'sitestats'             => '{{SITENAME}}-statistikk',
+'userstats'             => 'Brukerstatistikk',
+'sitestatstext'         => 'Det er til sammen \'\'\'$1\'\'\' sider i databasen. Dette inkluderer diskusjonssider, sider om {{SITENAME}}, små stubbsider, omdirigeringer, og annet som antageligvis ikke gjelder som ordentlig innhold. Om man ikke regner med disse er det \'\'\'$2\'\'\' sider som sannsynligvis er ordentlige innholdssider.
+
+\'\'\'$8\'\'\' filer har blitt lastet opp.
+
+Det har vært totalt \'\'\'$3\'\'\' sidevisninger, og \'\'\'$4\'\'\' redigeringer siden wikien ble satt opp. Det blir i snitt \'\'\'$5\'\'\' redigeringer per side, og \'\'\'$6\'\'\' visninger per redigering.
+
+[http://meta.wikimedia.org/wiki/Help:Job_queue Arbeidskøen] er på \'\'\'$7\'\'\'.',
+'userstatstext'         => 'Det er \'\'\'$1\'\'\' registrerte brukere. \'\'\'$2\'\'\' av disse (eller $4 %) er administratorer (se $3).',
+'disambiguations'       => 'Artikler med flertydige titler',
+'disambiguationspage'   => 'Template:Peker',
+'disambiguationstext'   => 'Følgende artikler har lenker til \'\'artikler med flertydige titler\'\'. De bør ha en lenke til en entydig tittel i stedet. En artikkel blir behandlet som flertydig dersom den lenker til $1. Lenker fra andre navnerom listes \'\'ikke\'\' her.',
+'doubleredirects'       => 'Doble omdirigeringer',
+'doubleredirectstext'   => '\'\'\'NB:\'\'\' Denne listen kan inneholde gale resultater. Det er som regel fordi siden inneholder ekstra tekst under den første <tt>#redirect</tt>.<br />Hver linje inneholder lenker til den første og den andre omdirigeringen, og den første linjen fra den andre omdirigeringsteksten. Det gir som regel den «riktige» artikkelen, som den første omdirigeringen skulle ha pekt på.',
+'brokenredirects'       => 'Ødelagte omdirigeringer',
+'brokenredirectstext'   => 'Følgende omdirigeringer peker til ikke-eksisterende sider.',
+'nbytes'                => '$1 {{plural:$1|byte|bytes}}',
+'ncategories'           => '$1 {{plural:$1|kategori|kategorier}}',
+'nlinks'                => '$1 {{plural:$1|lenke|lenker}}',
+'nmembers'              => '$1 {{plural:$1|medlem|medlemmer}}',
+'nrevisions'            => '$1 {{plural:$1|revisjon|revisjoner}}',
+'nviews'                => '$1 {{plural:$1|visning|visninger}}',
+'lonelypages'           => 'Foreldreløse sider',
+'uncategorizedpages'    => 'Ukategoriserte sider',
+'uncategorizedcategories'=> 'Ukategoriserte kategorier',
+'unusedcategories'      => 'Ubrukte kategorier',
+'unusedimages'          => 'Ubrukte filer',
+'popularpages'          => 'Populære sider',
+'wantedcategories'      => 'Ønskede kategorier',
+'wantedpages'           => 'Etterspurte sider',
+'mostlinked'            => 'Sider med flest lenker til seg',
+'mostlinkedcategories'  => 'Kategorier med flest sider',
+'mostcategories'        => 'Sider med flest kategorier',
+'mostimages'            => 'Mest brukte bilder',
+'mostrevisions'         => 'Artikler med flest revisjoner',
+'allpages'              => 'Alle sider',
+'prefixindex'           => 'Prefiksindeks',
+'randompage'            => 'Tilfeldig side',
+'shortpages'            => 'Korte sider',
+'longpages'             => 'Lange sider',
+'deadendpages'          => 'Blindveisider',
+'listusers'             => 'Brukerliste',
+'specialpages'          => 'Spesialsider',
+'spheading'             => 'Spesialsider for alle brukere',
+'restrictedpheading'    => 'Spesialsider for administratorer',
+'recentchangeslinked'   => 'Relaterte endringer',
+'rclsub'                => '(til sider med lenke fra «$1»)',
+'newpages'              => 'Nye sider',
+'ancientpages'          => 'Eldste sider',
+'intl'                  => 'Språklenker',
+'move'                  => 'Flytt',
+'movethispage'          => 'Flytt siden',
+'unusedimagestext'      => '<p>Merk at andre sider kanskje lenker til et bilde med en direkte lenke, så bildet listes her selv om det faktisk er i bruk.</p>',
+'unusedcategoriestext'  => 'Følgende kategorier eksisterer, men det er ingen sider i dem.',
+'booksources'           => 'Bokkilder',
+'categoriespagetext'    => 'Følgende kategorier finnes i wikien.',
+'data'                  => 'data',
+'userrights'            => 'Brukerrettighetskontroll',
+'groups'                => 'Brukergrupper',
+'booksourcetext'        => 'Her er en liste over lenker til steder som låner ut og/eller selger nye og brukte bøker, og som kanskje også har ytterligere informasjon om bøker du leter etter.',
+'isbn'                  => 'ISBN',
+'alphaindexline'        => '$1 til $2',
+'version'               => 'Versjon',
+'log'                   => 'Logger',
+'alllogstext'           => 'Kombinert visning av alle loggene. Du kan begrense visningen ved å velge loggtype, bruker og/eller påvirket side.',
+'logempty'              => 'Ingen elementer i loggen.',
+'nextpage'              => 'Neste side ($1)',
+'allpagesfrom'          => 'Vis sider som starter med:',
+'allarticles'           => 'Alle artikler',
+'allinnamespace'        => 'Alle sider i $1-navnerommet',
+'allnotinnamespace'     => 'Alle sider (ikke i $1-navnerommet)',
+'allpagesprev'          => 'Forrige',
+'allpagesnext'          => 'Neste',
+'allpagessubmit'        => 'Gå',
+'allpagesprefix'        => 'Vis sider med prefikset:',
+'mailnologin'           => 'Ingen avsenderadresse',
+'mailnologintext'       => 'Du må være [[Special:Userlogin|logget inn]] og ha en gyldig e-postadresse satt i [[Special:Preferences|brukerinnstillingene]] for å sende e-post til andre brukere.',
+'emailuser'             => 'E-post til denne brukeren',
+'emailpage'             => 'E-post til bruker.',
+'emailpagetext'         => 'Hvis denne brukeren har oppgitt en gyldig e-postadresse i sine innstillinger, vil dette skjemaet sende en enkelt beskjed. Den e-postadressen du har satt i innstillingene dine vil dukke opp i «Fra»-feltet på denne e-posten, så mottakeren er i stand til å svare.',
+'defemailsubject'       => 'E-post fra {{SITENAME}}',
+'noemailtitle'          => 'Ingen e-postadresse',
+'noemailtext'           => 'Denne brukeren har ikke oppgitt en gyldig e-postadresse eller har valgt å ikke motta e-post fra andre brukere.',
+'emailfrom'             => 'Fra',
+'emailto'               => 'Til',
+'emailsubject'          => 'Emne',
+'emailmessage'          => 'Beskjed',
+'emailsend'             => 'Send',
+'emailsent'             => 'E-post sendt',
+'emailsenttext'         => 'E-postbeskjeden er sendt',
+'watchlist'             => 'Overvåkningsliste',
+'mywatchlist'             => 'Overvåkningsliste',
+'nowatchlist'           => 'Du har ingenting i overvåkningslista.',
+'watchlistcount'        => '\'\'\'Du har $1 {{plural:$1|objekt|objekter}} i overvåkningslista di, inkludert diskusjonssider.\'\'\'',
+'clearwatchlist'        => 'Nullstill overvåkningsliste',
+'watchlistcleartext'    => 'Er du sikker på at du vil fjerne dem?',
+'watchlistclearbutton'  => 'Nullstill overvåkningsliste',
+'watchlistcleardone'    => 'Overvåkningslisten din er nullstilt. $1 {{plural:$1|objekt|objekter}} ble fjernet.',
+'watchnologin'          => 'Ikke logget inn',
+'watchnologintext'      => 'Du må være [[Special:Userlogin|logget inn]] for å kunne endre overvåkningslisten.',
+'addedwatch'            => 'Lagt til overvåkningslista',
+'addedwatchtext'        => 'Siden «$1» er føyd til [[Special:Watchlist|overvåkningslistea]]. Fremtidige endringer til denne siden og den tilhørende diskusjonssiden vil bli listet opp her, og siden vil fremstå \'\'\'fremhevet\'\'\' i [[Special:Recentchanges|lista over de siste endringene]] for å gjøre det lettere å finne den.
+
+Hvis du senere vil fjerne siden fra overvåkningslista, klikk «Avslutt overvåkning» ute i siden.',
+'removedwatch'          => 'Fjernet fra overvåkningslista',
+'removedwatchtext'      => 'Siden «[[:$1]]» er fjernet fra overvåkningslista di.',
+'watch'                 => 'Overvåk',
+'watchthispage'         => 'Overvåk siden',
+'unwatch'               => 'Avslutt overvåkning',
+'unwatchthispage'       => 'Fjerner overvåkning',
+'notanarticle'          => 'Ikke en artikkel',
+'watchnochange'         => 'Ingen av sidene i overvåkningslista er endret i den valgte perioden.',
+'watchdetails'          => '* $1 sider overvåket, utenom diskusjonssider.
+* [[Special:Watchlist/edit|Vis og rediger hele lista]]
+* [[Special:Watchlist/clear|Fjern alle sider]]',
+'wlheader-enotif'       => '* E-postnotifikasjon er slått på.',
+'wlheader-showupdated'  => '* Sider som har blitt forandret siden du sist besøkte dem vises i \'\'\'fet tekst\'\'\'',
+'watchmethod-recent'    => 'sjekker siste endringer for sider overvåkningslista',
+'watchmethod-list'      => 'sjekker siste endringer for sider i overvåkningstlista',
+'removechecked'         => 'Fjern valgte sider fra overvåkningslista',
+'watchlistcontains'     => 'Overvåkningslista inneholder $1 {{plural:$1|side|sider}}.',
+'watcheditlist'         => 'Her er en alfabetisk liste over sidene i overvåkningslista. Velg sidene du vil fjerne fra overvåkningslista og klikk på knappen «fjern valgte sider fra overvåkningslista» nederst på denne siden.',
+'removingchecked'       => 'Fjerner de valgte sidene fra overvåkningslista…',
+'couldntremove'         => 'Kunne ikke fjerne «$1»…',
+'iteminvalidname'       => 'Problem med «$1», ugyldig navn…',
+'wlnote'                => 'Nedenfor er de siste $1 endringene de siste <b>$2</b> timene.',
+'wlshowlast'            => 'Vis siste $1 timer $2 dager $3',
+'wlsaved'               => 'Dette er en lagret versjon av overvåkningslista di. Den er ikke nødvendigvis oppdatert.',
+'wlhideshowown'         => '$1 mine endringer.',
+'wlhideshowbots'        => '$1 robotendringer',
+'wldone'                => 'Utført.',
+'enotif_mailer'         => '{{SITENAME}} påminnelsessystem',
+'enotif_reset'          => 'Merk alle sider som besøkt',
+'enotif_newpagetext'    => 'Dette er en ny side.',
+'changed'               => 'endret',
+'created'               => 'opprettet',
+'enotif_subject'        => '{{SITENAME}}-siden $PAGETITLE har blitt $CHANGEDORCREATED av $PAGEEDITOR',
+'enotif_lastvisited'    => 'Se $1 for alle endringer siden ditt forrige besøk.',
+'enotif_body'           => '$WATCHINGUSERNAME,
+
+{{SITENAME}}-siden $PAGETITLE har blitt $CHANGEDORCREATED $PAGEEDITDATE av $PAGEEDITOR, se $PAGETITLE_URL for den nåværende versjonen.
+
+$NEWPAGE
+
+Redigeringssammendrag: $PAGESUMMARY $PAGEMINOREDIT
+
+Kontakt brukeren:
+e-post: $PAGEEDITOR_EMAIL
+wiki: $PAGEEDITOR_WIKI
+
+Det vil ikke komme flere påminnelser om endringer på denne siden med mindre du besøker den. Du kan også fjerne påminnelsesflagg for alle sider i overvåkningslista di.
+
+Med vennlig hilsen,
+{{SITENAME}}s påminnelsessystem
+
+--
+For å endre innstillingene i overvåkningslista di, besøk {{fullurl:Special:Watchlist/edit}}
+
+Tilbakemeldinger og videre assistanse:
+{{fullurl:Project:Hjelp}}',
+'deletepage'            => 'Slett side',
+'confirm'               => 'Bekreft',
+'excontent'             => 'Innholdet var: «$1»',
+'excontentauthor'       => 'innholdet var «$1» (og eneste bidragsyter var [[{{ns:special}}:Contributions/$2|$2]])',
+'exbeforeblank'         => 'innholdet før siden ble tømt var: «$1»',
+'exblank'               => 'siden var tom',
+'confirmdelete'         => 'Bekreft sletting',
+'deletesub'             => '(Sletter «[[$1]]»)',
+'historywarning'        => 'Advarsel: Siden du er i ferd med å slette har en historikk:',
+'confirmdeletetext'     => 'Du holder på å slette en side eller et bilde sammen med historikken. Bilder som slettes kan ikke gjenopprettes, men alle andre sider som slettes på denne måten kan gjenopprettes. Bekreft at du virkelig vil slette denne siden, og at du gjør det i samsvar med [[Project:Retningslinjer for sletting|retningslinjene]].',
+'actioncomplete'        => 'Gjennomført',
+'deletedtext'           => '«[[$1]]» er slettet. Se $2 for en oversikt over de siste slettingene.',
+'deletedarticle'        => 'slettet «[[$1]]»',
+'dellogpage'            => 'Slettingslogg',
+'dellogpagetext'        => 'Under er ei liste over nylige slettinger.',
+'deletionlog'           => 'slettingslogg',
+'reverted'              => 'Gjenopprettet en tidligere versjon',
+'deletecomment'         => 'Begrunnelse for sletting',
+'imagereverted'         => 'Tilbakestilling til tidligere versjon gjennomført.',
+'rollback'              => 'Fjern redigeringer',
+'rollback_short'        => 'Tilbakestill',
+'rollbacklink'          => 'tilbakestill',
+'rollbackfailed'        => 'Kunne ikke tilbakestille',
+'cantrollback'          => 'Kan ikke fjerne redigering; den siste brukeren er den eneste forfatteren.',
+'alreadyrolled'         => 'Kan ikke fjerne den siste redigeringen på [[:$1]] av [[User:$2|$2]] ([[User talk:$2|diskusjon]]); en annen har allerede redigert siden eller fjernet redigeringen. Den siste redigeringen er foretatt av [[User:$3|$3]] ([[User talk:$3|diskusjon]]).',
+'editcomment'           => 'Redigeringskommentaren var: «\'\'$1\'\'»',
+'revertpage'            => 'Tilbakestilte endring av [[Special:Contributions/$2|$2]] ([[User talk:$2|diskusjon]] · [[Special:Blockip/$2|blokker]]) til siste versjon av $1',
+'sessionfailure'        => 'Det ser ut til å være et problem med innloggingen din, og den har blitt avbrutt av sikkerhetshensyn. Trykk \'\'Tilbake\'\' i nettleseren din, oppdater siden og prøv igjen.',
+'protectlogpage'        => 'Låsingslogg',
+'protectlogtext'        => 'Her er en liste over sider som er blitt beskyttet eller har fått fjernet beskyttelsen. Se [[Project:Beskyttet side]] for mer informasjon.',
+'protectedarticle'      => 'låste [[$1]]',
+'unprotectedarticle'    => 'åpnet [[$1]]',
+'protectsub'            => '(Låser «$1»)',
+'confirmprotecttext'    => 'Vil du virkelig låse siden?',
+'confirmprotect'        => 'Bekreft låsing',
+'protectmoveonly'       => 'Bare lås for flytting',
+'protectcomment'        => 'Låsingsbegrunnelse',
+'unprotectsub'          => '(Åpner «$1»)',
+'confirmunprotecttext'  => 'Vil du virkelig åpne denne siden?',
+'confirmunprotect'      => 'Bekreft åpning',
+'unprotectcomment'      => 'Åpningsbegrunnelse',
+'protect-unchain'       => 'Spesielle flyttingstillatelser',
+'protect-text'          => 'Du kan se og forandre beskyttelsesnivået for siden [[$1]] her. Vennligst følg [[Project:Beskyttelsesretningslinjer|beskyttelsesretningslinjene]].',
+'protect-viewtext'      => 'Kontoen din har ikke tillatelse til å forandre sidens beskyttelsesnivå. Dette er de nåværende innstillingene for siden <strong>$1</strong>:',
+'protect-default'       => '(standard)',
+'protect-level-autoconfirmed'=> 'Blokker uregistrerte brukere',
+'protect-level-sysop'   => 'Kun administratorer',
+'restriction-edit'      => 'Redigering',
+'restriction-move'      => 'Flytting',
+'undelete'              => 'Vis slettede sider',
+'undeletepage'          => 'Se og gjenopprett slettede sider',
+'viewdeletedpage'       => 'Vis slettede sider',
+'undeletepagetext'      => 'Følgende sider er slettet, men finnes fortsatt i arkivet og kan gjenopprettes. Arkivet blir periodevis slettet.',
+'undeleteextrahelp'     => 'For å gjenopprette hele siden, la alle boksene være som de er, og klikk \'\'\'Gjenopprett\'\'\'. For å gjenopprette kun deler, kryss av revisjonenes bokser, og klikk \'\'\'Gjenopprett\'\'\'.',
+'undeletearticle'       => 'Gjenopprett slettet side',
+'undeleterevisions'     => '$1 revisjoner arkivert',
+'undeletehistory'       => 'Hvis du gjenoppretter siden, vil alle de historiske
+revisjoner også bli gjenopprettet. Hvis en ny side med det samme navnet
+er opprettet siden denne ble slettet, vil de gjenopprettede revisjonene
+dukke opp i den tidligere historikken, og den nyeste revisjonen vil forbli
+på siden.',
+'undeletehistorynoadmin'=> 'Denne artikkelen har blitt slettet. Grunnen for slettingen vises i oppsummeringen nedenfor, sammen med detaljer om brukerne som redigerte siden før den ble slettet. Teksten i disse slettede revisjonene er kun tilgjengelig for [[Project:Administratorer|administratorer]].',
+'undeleterevision'      => 'Slettet revisjon fra $1',
+'undeletebtn'           => 'Gjenopprett',
+'undeletereset'         => 'Resett skjema',
+'undeletecomment'       => 'Forklaring:',
+'undeletedarticle'      => 'gjenopprettet «[[$1]]»',
+'undeletedrevisions'    => '$1 revisjoner gjenopprettet',
+'undeletedrevisions-files'=> '{{PLURAL:$1|Én revisjon|$1 revisjoner}} og {{PLURAL:$2|én fil|$2 filer}} gjenopprettet',
+'undeletedfiles'        => '{{PLURAL:$1|Én fil|$1 filer}} gjenopprettet',
+'cannotundelete'        => 'Gjenoppretting feilet; noen andre kan ha gjenopprettet siden først.',
+'undeletedpage'         => '<big>\'\'\'$1 har blitt gjenopprettet\'\'\'</big>
+
+Sjekk [[Special:Log/delete|slettingsloggen]] for en liste over nylige slettinger og gjenopprettelser.',
+'namespace'             => 'Navnerom:',
+'invert'                => 'Inverter',
+'contributions'         => 'Bidrag',
+'mycontris'             => 'Mine bidrag',
+'contribsub2'            => 'For $1 ($2)',
+'nocontribs'            => 'Ingen endringer er funnet som passer disse kriteriene.',
+'ucnote'                => 'Her er denne brukerens siste <b>$1</b> endringer i de siste <b>$2</b> dagene.',
+'uclinks'               => 'Vis de siste $1 endringene; vis de siste $2 dagene.',
+'uctop'                 => ' (topp)',
+'newbies'               => 'nybegynnere',
+'sp-newimages-showfrom' => 'Vis nye bilder fra og med $1',
+'sp-contributions-newest'=> 'Nyeste',
+'sp-contributions-oldest'=> 'Eldste',
+'sp-contributions-newer'=> '$1 nyere',
+'sp-contributions-older'=> '$1 eldre',
+'sp-contributions-newbies-sub'=> 'For nybegynnere',
+'whatlinkshere'         => 'Lenker hit',
+'notargettitle'         => 'Intet mål',
+'notargettext'          => 'Du har ikke spesifisert en målside eller bruker å utføre denne funksjonen på.',
+'linklistsub'           => '(Liste over lenker)',
+'linkshere'             => 'Følgende sider lenker hit:',
+'nolinkshere'           => 'Ingen sider lenker hit.',
+'isredirect'            => 'omdirigeringsside',
+'istemplate'            => 'inklusjon',
+'blockip'               => 'Blokker IP-adresse',
+'blockiptext'           => 'Bruk skjemaet under for å blokkere en IP-adresses tilgang til å redigere artikler. Dette må kun gjøres for å forhindre hærverk, og i overensstemmelse med [[Project:Retningslinjer for blokkering|retningslinjene]]. Fyll ut en spesiell begrunnelse under.',
+'ipaddress'             => 'IP-adresse',
+'ipadressorusername'    => 'IP-adresse eller brukernavn',
+'ipbexpiry'             => 'Utløper',
+'ipbreason'             => 'Begrunnelse',
+'ipbsubmit'             => 'Blokker denne adressen',
+'ipbother'              => 'Annen tid',
+'ipboptions'            => '2 timer:2 hours,1 dag:1 day,3 dager:3 days,1 uke:1 week,2 uker:2 weeks,1 måned:1 month,3 måneder:3 months,6 måneder:6 months,1 år:1 year,uendelig:infinite',
+'ipbotheroption'        => 'annet',
+'badipaddress'          => 'Ugyldig IP-adresse.',
+'blockipsuccesssub'     => 'Blokkering utført',
+'blockipsuccesstext'    => 'IP-adressen «$1» er blokkert. Se [[Special:Ipblocklist|blokkeringslista]] for alle blokkeringer.',
+'unblockip'             => 'Opphev blokkering',
+'unblockiptext'         => 'Bruk skjemaet under for å gjenopprette skriveadgangen for en tidligere blokkert adresse eller bruker.',
+'ipusubmit'             => 'Opphav blokkeringen av denne adressen',
+'unblocked'             => '[[User:$1|$1]] har blitt avblokkert',
+'ipblocklist'           => 'Liste over blokkerte IP-adresser og brukere',
+'blocklistline'         => '$1, $2 blokkerte $3 ($4)',
+'infiniteblock'         => 'uendelig',
+'expiringblock'         => 'utgår $1',
+'ipblocklistempty'      => 'Blokkeringslista er tom.',
+'blocklink'             => 'blokker',
+'unblocklink'           => 'opphev blokkering',
+'contribslink'          => 'bidrag',
+'autoblocker'           => 'Du har blitt automatisk blokkert fordi du deler IP-adresse med «[[User:$1|$1]]». Grunnen som ble gitt til at «$1» ble blokkert var: «$2».',
+'blocklogpage'          => 'Blokkeringslogg',
+'blocklogentry'         => 'Blokkerte «[[$1]]» med en utløpstid på $2',
+'blocklogtext'          => 'Dette er en logg som viser hvilke brukere som har blitt blokkert og avblokkert. Automatisk blokkerte IP-adresser vises ikke. Se [[Special:Ipblocklist|blokkeringslista]] for en liste over IP-adresser som er blokkert i nåværende tidspunkt.',
+'unblocklogentry'       => 'opphevet blokkeringen av $1',
+'range_block_disabled'  => 'Muligheten til å blokkere flere IP-adresser om gangen er slått av.',
+'ipb_expiry_invalid'    => 'Ugyldig utløpstid.',
+'ip_range_invalid'      => 'Ugyldig IP-rad.',
+'proxyblocker'          => 'Proxyblokker',
+'proxyblockreason'      => 'IP-adressen din har blitt blokkert fordi den er en åpen proxy. Kontakt internettleverandør eller teknisk støtte og informer dem om dette alvorlige sikkerhetsproblemet.',
+'proxyblocksuccess'     => 'Utført.',
+'sorbs'                 => 'SORBS DNSBL',
+'sorbsreason'           => 'IP-adressen din er oppgitt som åpen proxy i [http://sorbs.net/ SORBS]\' DNSBL.',
+'sorbs_create_account_reason'=> 'IP-adressen din oppgis som en åpen proxy i [http://sorbs.net/ SORBS]\' DNSBL. Du kan ikke opprette en konto.',
+'lockdb'                => 'Lås database',
+'unlockdb'              => 'Åpne database',
+'lockdbtext'            => 'Å låse databasen vil avbryte alle brukere fra å kunne
+redigere sider, endre deres innstillinger, redigere deres
+overvåkningsliste, og andre ting som krever endringer i databasen.
+Bekreft at du har til hensikt å gjøre dette, og at du vil
+låse opp databasen når vedlikeholdet er utført.',
+'unlockdbtext'          => 'Å låse opp databasen vil si at alle brukere igjen
+kan redigere sider, endre sine innstillinger, redigere sin
+overvåkningsliste, og andre ting som krever endringer i databasen.
+Bekreft at du har til hensikt å gjøre dette.',
+'lockconfirm'           => 'Ja, jeg vil virkelig låse databasen.',
+'unlockconfirm'         => 'Ja, jeg vil virkelig låse opp databasen.',
+'lockbtn'               => 'Lås databasen',
+'unlockbtn'             => 'Åpne databasen',
+'locknoconfirm'         => 'Du har ikke bekreftet handlingen.',
+'lockdbsuccesssub'      => 'Databasen er nå låst',
+'unlockdbsuccesssub'    => 'Databasen er nå lås opp',
+'lockdbsuccesstext'     => 'Databasen er låst.<br />Husk å fjerne låsen når du er ferdig med vedlikeholdet.',
+'unlockdbsuccesstext'   => 'Databasen er låst opp.',
+'rightslog'             => 'Rettighetslogg',
+'rightslogtext'         => 'Dette er en logg over forandringer i brukerrettigheter.',
+'rightslogentry'        => 'endret gruppe for $1 fra $2 til $3',
+'rightsnone'            => '(ingen)',
+'movepage'              => 'Flytt side',
+'movepagetext'          => 'Når du bruker skjemaet under, vil du få omdøpt en 
+side og flyttet hele historikken til det nye navnet.
+Den gamle tittelen vil bli en omdirigeringsside til den nye tittelen.
+Lenker til den gamle tittelen vil ikke bli endret. Eventuelle omdirigeringer vil bli brutt.
+
+<span style="color:#ff0000"><b>Det er <u>ditt ansvar</u> å rette alle omdirigeringer (bruk «Lenker hit» for å finne dem) hvis du flytter en side!</b></span>
+
+Legg merke til at siden \'\'\'ikke\'\'\' kan flyttes hvis det allerede finnes en side 
+med den nye tittelen, med mindre den siden er tom eller er en omdirigering 
+uten noen historikk. Det betyr at du kan flytte en side tilbake dit
+den kom fra hvis du gjør en feil.
+
+<b>ADVARSEL!</b>
+Dette kan være en drastisk og uventet endring for en populær side;
+vær sikker på at du forstår konsekvensene av dette før du
+fortsetter.',
+'movepagetalktext'      => 'Den tilhørende diskusjonssiden, hvis det finnes en,
+vil automatisk bli flyttet med siden \'\'\'med mindre:\'\'\'
+*En ikke-tom diskusjonsside allerede eksisterer under det nye navnet, eller
+*Du fjerner markeringen i boksen nedenunder.
+
+I disse tilfellene er du nødt til å flytte eller flette sammen siden manuelt.',
+'movearticle'           => 'Flytt side',
+'movenologin'           => 'Ikke logget inn',
+'movenologintext'       => 'Du må være registrert bruker og være [[Special:Userlogin|logget på]] for å flytte en side.',
+'newtitle'              => 'Til ny tittel',
+'movepagebtn'           => 'Flytt side',
+'pagemovedsub'          => 'Flytting gjennomført',
+'pagemovedtext'         => 'Siden «<span class="plainlinks">[{{fullurl:$1|redirect=no}} $1]</span>» er nå flyttet til «[[$2]]». \'\'\'Vennligst [[Special:Whatlinkshere/$2|sjekk]]\'\'\' om denne flyttingen har skapt noen [[Special:DoubleRedirects|doble omdirigeringssider]], og fiks dem om nødvendig.',
+'articleexists'         => 'En side med det navnet eksisterer allerede, eller valgte navn er ugyldig. Velg et annet navn.',
+'talkexists'            => '\'\'\'Siden ble flyttet korrekt, men den tilhørende diskusjonssiden kunne ikke flyttes, fordi det allerede eksisterer en med den nye tittelen. Du er nødt til å flette dem sammen manuelt.\'\'\'',
+'movedto'               => 'flyttet til',
+'movetalk'              => 'Flytt også diskusjonssiden, hvis den eksisterer.',
+'talkpagemoved'         => 'Den tilhørende diskusjonssiden ble også flyttet.',
+'talkpagenotmoved'      => 'Den tilhørende diskusjonssiden ble <strong>ikke</strong> flyttet.',
+'1movedto2'             => '[[$1]] flyttet til [[$2]]',
+'1movedto2_redir'       => '[[$1]] flyttet til [[$2]] over omdirigeringsside',
+'movelogpage'           => 'Flyttelogg',
+'movelogpagetext'       => 'Her er ei liste over sider som har blitt flyttet.',
+'movereason'            => 'Årsak',
+'revertmove'            => 'tilbakestill',
+'delete_and_move'       => 'Slett og flytt',
+'delete_and_move_text'  => '==Sletting nødvendig==
+Målsiden «[[$1]]» finnes allerede. Vil du slette den så denne siden kan flyttes dit?',
+'delete_and_move_confirm'=> 'Ja, slett siden',
+'delete_and_move_reason'=> 'Slettet grunnet flytting',
+'selfmove'              => 'Kilde- og destinasjonstittel er den samme; kan ikke flytte siden.',
+'immobile_namespace'    => 'Sider kan ikke flyttes til dette navnerommet.',
+'export'                => 'Eksportsider',
+'exporttext'            => 'Du kan eksportere teksten og redigeringshistorikken for en bestemt side eller en gruppe sider i XML. Dette kan senere importeres til en annen wiki som bruker MediaWiki ved hjelp av [[Special:Import]].
+
+For å eksportere sider, skriv inn titler i tekstboksen under, én tittel per linje, og velg om du vil ha kun nåværende versjon, eller alle versjoner i historikken. Dersom du bare vil ha nåværende versjon, kan du også bruke en lenke, for eksempel [[Special:Export/{{Mediawiki:Mainpage}}]] for siden «{{Mediawiki:Mainpage}}».',
+'exportcuronly'         => 'Inkluder kun den nåværende versjonen, ikke hele historikken.',
+'exportnohistory'       => '----
+\'\'\'Merk:\'\'\' Eksportering av hele historikken gjennom dette skjemaet har blitt slått av av ytelsesgrunner.',
+'export-submit'         => 'Eksporter',
+'allmessages'           => 'Systemmeldinger',
+'allmessagesname'       => 'Navn',
+'allmessagesdefault'    => 'Standardtekst',
+'allmessagescurrent'    => 'Nåværende tekst',
+'allmessagestext'       => 'Dette er en liste over tilgjengelige systemmeldinger i MediaWiki-navnerommet.',
+'allmessagesnotsupportedUI'=> 'Språket du bruker, \'\'\'$1\'\'\', støttes ikke av Special:Allmessages på denne siden.',
+'allmessagesnotsupportedDB'=> '\'\'\'Special:Allmessages\'\'\' kan ikke brukes fordi \'\'\'$wgUseDatabaseMessages\'\'\' er slått av.',
+'allmessagesfilter'     => 'Filter:',
+'allmessagesmodified'   => 'Vis kun endrede',
+'thumbnail-more'        => 'Forstørr',
+'missingimage'          => '<b>Bilde mangler</b><br /><i>$1</i>',
+'filemissing'           => 'Filen mangler',
+'thumbnail_error'       => 'Feil under oppretting av miniatyrbilde: $1',
+'import'                => 'Importer sider',
+'importinterwiki'       => 'Transwiki-importering',
+'import-interwiki-text' => 'Velg en wiki og en side å importere. Revisjonsdatoer og bidragsyteres navn vil bli bevart. Alle transwiki-importeringer spares i [[Special:Log/import|importloggen]].',
+'import-interwiki-history'=> 'Kopier all historikk for denne siden',
+'import-interwiki-submit'=> 'Importer',
+'importtext'            => 'Importer filen fra kildewikien med Special:Export-verktøyet, lagre den på den egen datamaskin, og last den opp hit.',
+'importstart'           => 'Importerer sider…',
+'import-revision-count' => '{{PLURAL:$1|Én revisjon|$1 revisjoner}}',
+'importnopages'         => 'Ingen sider å importere.',
+'importfailed'          => 'Importering mislyktes: $1',
+'importunknownsource'   => 'Ukjent importkildetype',
+'importcantopen'        => 'Kunne ikke åpne importfil',
+'importbadinterwiki'    => 'Ugyldig interwikilenke',
+'importnotext'          => 'Tom eller ingen tekst',
+'importsuccess'         => 'Import lyktes!',
+'importhistoryconflict' => 'Motstridende revisjoner finnes (siden kan ha blitt importert tidligere)',
+'importnosources'       => 'Ingen transwikiimportkilder er definert, og direkte historikkimporteringer er slått av.',
+'importnofile'          => 'Ingen importfil opplastet.',
+'importuploaderror'     => 'Opplasting av importfil feilet; kanskje filen er større en den tillatte opplastingsstørrelsen.',
+'importlogpage'         => 'Importlogg',
+'importlogpagetext'     => 'Administrativ import av sider med redigeringshistorikk fra andre wikier.',
+'import-logentry-upload'=> 'importerte [[$1]] ved opplasting',
+'import-logentry-upload-detail'=> '{{PLURAL:$1|Én revisjon|$1 revisjoner}}',
+'import-logentry-interwiki'=> 'transwikiimporterte $1',
+'import-logentry-interwiki-detail'=> '{{PLURAL:$1|Én revisjon|$1 revisjoner}} fra $2',
+'accesskey-search'      => 'f',
+'accesskey-minoredit'   => 'i',
+'accesskey-save'        => 's',
+'accesskey-preview'     => 'p',
+'accesskey-diff'        => 'v',
+'accesskey-compareselectedversions'=> 'v',
+'accesskey-watch'       => 'w',
+'tooltip-search'        => 'Søk i {{SITENAME}}',
+'tooltip-minoredit'     => 'Merk dette som en mindre endring',
+'tooltip-save'          => 'Lagre endringer',
+'tooltip-preview'       => 'Forhåndsvis endringene, vennligst bruk denne funksjonen før du lagrer!',
+'tooltip-diff'          => 'Vis hvilke endringer du har gjort på teksten.',
+'tooltip-compareselectedversions'=> 'Se forskjellene mellom de to valgte versjonene av denne siden.',
+'tooltip-watch'         => 'Legg denne siden til din overvåkningsliste',
+'common.css'            => '/* CSS plassert i denne filen vil gjelde for alle utseender. */',
+'monobook.css'          => '/* rediger denne filen for å tilpasse Monobook-skinnet for hele siden */',
+'nodublincore'          => 'Dublin Core RDF-metadata er slått av på denne tjeneren.',
+'nocreativecommons'     => 'Create Commons RDF-metadata er slått av på denne tjeneren.',
+'notacceptable'         => 'Tjeneren har ingen mulige måter å vise data i din nettleser.',
+'anonymous'             => 'Anonym(e) bruker(e) av {{SITENAME}}',
+'siteuser'              => '{{SITENAME}}-bruker $1',
+'lastmodifiedatby'        => 'Denne siden var sist redigert $2, $1 av $3.',
+'and'                   => 'og',
+'othercontribs'         => 'Basert på arbeid av $1.',
+'others'                => 'andre',
+'siteusers'             => '{{SITENAME}}-bruker(e) $1',
+'creditspage'           => 'Sidekreditteringer',
+'nocredits'             => 'Ingen krediteringer er tilgjengelig for denne siden.',
+'spamprotectiontitle'   => 'Søppelpostfilter',
+'spamprotectiontext'    => 'Siden du ønsket å lagre ble blokkert av spamfilteret. Dette er sannsynligvis forårsaket av en lenke til et eksternt nettsted.',
+'spamprotectionmatch'   => 'Følgende tekst er det som aktiverte spamfilteret: $1',
+'subcategorycount'      => 'Det er {{PLURAL:$1|én underkategori|$1 underkategorier}} i denne kategorien.',
+'categoryarticlecount'  => 'Det er {{PLURAL:$1|en artikkel|$1 artikler}} i denne kategorien.',
+'listingcontinuesabbrev'=> ' forts.',
+'spambot_username'      => 'MediaWikis spamopprydning',
+'spam_reverting'        => 'Tilbakestiller til siste versjon uten lenke til $1',
+'spam_blanking'         => 'Alle revisjoner inneholdt lenke til $1, tømmer siden',
+'infosubtitle'          => 'Sideinformasjon',
+'numedits'              => 'Antall redigeringer (artikkel): $1',
+'numtalkedits'          => 'Antall redigeringer (diskusjonsside): $1',
+'numwatchers'           => 'Antall overvåkere: $1',
+'numauthors'            => 'Antall forskjellige bidragsytere (artikkel): $1',
+'numtalkauthors'        => 'Antall forskjellige bidragsytere (diskusjonsside): $1',
+'mw_math_png'           => 'Vis alltid som PNG',
+'mw_math_simple'        => 'HTML hvis veldig enkel, ellers PNG',
+'mw_math_html'          => 'HTML vis mulig, ellers PNG',
+'mw_math_source'        => 'Behold som TeX (for tekst-nettlesere)',
+'mw_math_modern'        => 'Anbefalt for moderne nettlesere',
+'mw_math_mathml'        => 'MathML hvis mulig',
+'markaspatrolleddiff'   => 'Godkjenn endringen',
+'markaspatrolledtext'   => 'Godkjenn denne siden',
+'markedaspatrolled'     => 'Merket som godkjent',
+'markedaspatrolledtext' => 'Endringen er merket som godkjent.',
+'rcpatroldisabled'      => 'Siste endringer-patruljering er slått av',
+'rcpatroldisabledtext'  => 'Siste endringer-patruljeringsfunksjonen er slått av.',
+'markedaspatrollederror'=> 'Kan ikke merke som godkjent',
+'markedaspatrollederrortext'=> 'Du må spesifisere en versjon å merke som godkjent.',
+'monobook.js' => '/* Deprecated; use [[MediaWiki:common.js]] */',
+ 
+'accesskey-pt-userpage' => '.',
+'tooltip-pt-userpage' => 'Min brukerside',
+'accesskey-pt-anonuserpage' => '.',
+'tooltip-pt-anonuserpage' => 'Brukersiden for IP-adressen du redigerer fra',
+'accesskey-pt-mytalk' => 'n',
+'tooltip-pt-mytalk' => 'Min diskusjonsside',
+'accesskey-pt-anontalk' => 'n',
+'tooltip-pt-anontalk' => 'Diskusjon om redigeringer fra denne IP-adressen',
+'accesskey-pt-preferences' => '',
+'tooltip-pt-preferences' => 'Mine innstillinger',
+'accesskey-pt-watchlist' => 'l',
+'tooltip-pt-watchlist' => 'Liste over sider du overvåker for endringer.',
+'accesskey-pt-mycontris' => 'y',
+'tooltip-pt-mycontris' => 'Liste over mine bidrag',
+'accesskey-pt-login' => 'o',
+'tooltip-pt-login' => 'Du oppfordres til å logge inn, men det er ikke obligatorisk.',
+'accesskey-pt-anonlogin' => 'o',
+'tooltip-pt-anonlogin' => 'Du oppfordres til å logge inn, men det er ikke obligatorisk.',
+'accesskey-pt-logout' => '',
+'tooltip-pt-logout' => 'Logg ut',
+'accesskey-ca-talk' => 't',
+'tooltip-ca-talk' => 'Diskusjon om innholdssiden',
+'accesskey-ca-edit' => 'e',
+'tooltip-ca-edit' => 'Du kan redigere denne siden. Vennligst bruk Forhåndsvis-knappen før du lagrer.',
+'accesskey-ca-addsection' => '+',
+'tooltip-ca-addsection' => 'Legg til et diskusjonsinnlegg.',
+'accesskey-ca-viewsource' => 'e',
+'tooltip-ca-viewsource' => 'Denne siden er beskyttet. Du kan se kildeteksten.',
+'accesskey-ca-history' => 'h',
+'tooltip-ca-history' => 'Tidligere revisjoner av denne siden.',
+'accesskey-ca-protect' => '=',
+'tooltip-ca-protect' => 'Beskytt denne siden',
+'accesskey-ca-delete' => 'd',
+'tooltip-ca-delete' => 'Slette denne siden',
+'accesskey-ca-undelete' => 'd',
+'tooltip-ca-undelete' => 'Gjenopprett redigerenge som ble gjort på denne siden før den ble slettet.',
+'accesskey-ca-move' => 'm',
+'tooltip-ca-move' => 'Flytt denne siden',
+'accesskey-ca-nomove' => '',
+'tooltip-ca-nomove' => 'Du har ikke tillatelse til å flytte denne siden',
+'accesskey-ca-watch' => 'w',
+'tooltip-ca-watch' => 'Legg til denne siden til din overvåkningsliste.',
+'accesskey-ca-unwatch' => 'w',
+'tooltip-ca-unwatch' => 'Fjern denne siden fra din overvåkningsliste.',
+'accesskey-search' => 'f',
+'tooltip-search' => 'Søk i denne wikien',
+'accesskey-p-logo' => '',
+'tooltip-p-logo' => 'Hovedside',
+'accesskey-n-mainpage' => 'z',
+'tooltip-n-mainpage' => 'Gå til hovedsiden',
+'accesskey-n-portal' => '',
+'tooltip-n-portal' => 'Om prosjektet; hva du kan gjøre og hvor du kan finne ting',
+'accesskey-n-currentevents' => '',
+'tooltip-n-currentevents' => 'Finn bakgrunnsinformasjon om aktuelle hendelser',
+'accesskey-n-recentchanges' => 'r',
+'tooltip-n-recentchanges' => 'Liste over siste endringer på wikien.',
+'accesskey-n-randompage' => 'x',
+'tooltip-n-randompage' => 'Gå inn på en tilfeldig side',
+'accesskey-n-help' => '',
+'tooltip-n-help' => 'Stedet for å få hjelp.',
+'accesskey-n-sitesupport' => '',
+'tooltip-n-sitesupport' => 'Støtt oss',
+'accesskey-t-whatlinkshere' => 'j',
+'tooltip-t-whatlinkshere' => 'Liste over alle sider som lenker hit',
+'accesskey-t-recentchangeslinked' => 'k',
+'tooltip-t-recentchangeslinked' => 'Siste endringer i sider som blir lenket fra denne siden',
+'accesskey-feed-rss' => '',
+'tooltip-feed-rss' => 'RSS-føde for denne siden',
+'accesskey-feed-atom' => '',
+'tooltip-feed-atom' => 'Atom-føde for denne siden',
+'accesskey-t-contributions' => '',
+'tooltip-t-contributions' => 'Vis liste over bidrag fra denne brukeren',
+'accesskey-t-emailuser' => '',
+'tooltip-t-emailuser' => 'Send en e-post til denne brukeren',
+'accesskey-t-upload' => 'u',
+'tooltip-t-upload' => 'Last opp bilder eller mediafiler',
+'accesskey-t-specialpages' => 'q',
+'tooltip-t-specialpages' => 'Liste over alle spesialsider',
+'accesskey-ca-nstab-main' => 'c',
+'tooltip-ca-nstab-main' => 'Vis innholdssiden',
+'accesskey-ca-nstab-user' => 'c',
+'tooltip-ca-nstab-user' => 'Vis brukersiden',
+'accesskey-ca-nstab-media' => 'c',
+'tooltip-ca-nstab-media' => 'Vis mediasiden',
+'accesskey-ca-nstab-special' => '',
+'tooltip-ca-nstab-special' => 'Dette er en spesialside, og kan ikke redigeres.',
+'accesskey-ca-nstab-project' => 'a',
+'tooltip-ca-nstab-project' => 'Vis prosjektsiden',
+'accesskey-ca-nstab-image' => 'c',
+'tooltip-ca-nstab-image' => 'Vis bildesiden',
+'accesskey-ca-nstab-mediawiki' => 'c',
+'tooltip-ca-nstab-mediawiki' => 'Vis systembeskjeden',
+'accesskey-ca-nstab-template' => 'c',
+'tooltip-ca-nstab-template' => 'Vis malen',
+'accesskey-ca-nstab-help' => 'c',
+'tooltip-ca-nstab-help' => 'Vis hjelpesiden',
+'accesskey-ca-nstab-category' => 'c',
+'tooltip-ca-nstab-category' => 'Vis kategorisiden',
+'accesskey-history-prevlink' => '-',
+'tooltip-history-prevlink' => 'Forrige',
+'accesskey-history-nextlink' => '+',
+'tooltip-history-nextlink' => 'Neste',
+'deletedrevision'       => 'Slettet gammel revisjon $1.',
+'previousdiff'          => '← Gå til forrige revisjon',
+'nextdiff'              => 'Gå til neste diff →',
+'imagemaxsize'          => 'Begrens bilder på bildebeskrivelsessider til:',
+'thumbsize'             => 'Miniatyrbildestørrelse:',
+'showbigimage'          => 'Last ned versjon med høy opløsning ($1×$2, $3&nbsp;KB)',
+'newimages'             => 'Galleri over nye filer',
+'showhidebots'          => '($1 roboter)',
+'noimages'              => 'Ingenting å se.',
+'variantname-zh-cn'     => 'cn',
+'variantname-zh-tw'     => 'tw',
+'variantname-zh-hk'     => 'hk',
+'variantname-zh-sg'     => 'sg',
+'variantname-zh'        => 'zh',
+'variantname-sr-ec'     => 'sr-ec',
+'variantname-sr-el'     => 'sr-el',
+'variantname-sr-jc'     => 'sr-jc',
+'variantname-sr-jl'     => 'sr-jl',
+'variantname-sr'        => 'sr',
+'specialloguserlabel'   => 'Bruker:',
+'speciallogtitlelabel'  => 'Tittel:',
+'passwordtooshort'      => 'Passordet ditt er for kort. Det må ha minst $1 tegn.',
+'mediawarning'          => '\'\'\'Advarsel\'\'\': Denne filen kan inneholde farlig kode; ved å åpne den kan systemet ditt kompromitteres.<hr />',
+'fileinfo'              => '$1&nbsp;KB, MIME-type: <code>$2</code>',
+'metadata'              => 'Metadata',
+'metadata-help'         => 'Denne filen inneholder tilleggsinformasjon, antagligvis fra digitalkameraet eller skanneren brukt til å lage eller digitalisere det. Hvis filen har blitt forandret fra utgangspunktet kan enkelte detaljer være unøyaktige.',
+'metadata-expand'       => 'Vis detaljer',
+'metadata-collapse'     => 'Skjul detaljer',
+'exif-imagewidth'       => 'Bredde',
+'exif-imagelength'      => 'Høyde',
+'exif-bitspersample'    => 'Bits per komponent',
+'exif-photometricinterpretation'=> 'Pixelsammensetning',
+'exif-samplesperpixel'  => 'Antall komponenter',
+'exif-xresolution'      => 'Horisontal oppløsning',
+'exif-yresolution'      => 'Vertikal oppløsning',
+'exif-imagedescription' => 'Bildetittel',
+'exif-make'             => 'Kameraprodusent',
+'exif-model'            => 'Kameramodell',
+'exif-software'         => 'Programvare brukt',
+'exif-artist'           => 'Opphavsperson',
+'exif-copyright'        => 'Opphavsbeskyttelse tilhører',
+'exif-pixelydimension'  => 'Gyldig bildebredde',
+'exif-pixelxdimension'  => 'Gyldig bildehøyde',
+'exif-usercomment'      => 'Brukerkommentarer',
+'exif-relatedsoundfile' => 'Relatert lydfil',
+'edit-externally'       => 'Rediger denne filen med en ekstern applikasjon',
+'edit-externally-help'  => 'Se [http://meta.wikimedia.org/wiki/Help:External_editors oppsettsinstruksjonene] for mer informasjon.',
+'recentchangesall'      => 'alle',
+'imagelistall'          => 'alle',
+'watchlistall1'         => 'alle',
+'watchlistall2'         => 'alle',
+'namespacesall'         => 'alle',
+'confirmemail'          => 'Bekreft e-postadresse',
+'confirmemail_text'     => 'Denne wikien krever at du bekrefter e-postadressen din før e-posttjenester kan bli brukt. Trykk på knappen under for å sende en bekreftelsese-post til din adresse. E-posten vil inneholde en lenke med en kode; last lenken i nettleseren din for å bekrefte at e-postadressen er gyldig.',
+'confirmemail_send'     => 'Send en bekreftelseskode.',
+'confirmemail_sent'     => 'Bekreftelsese-post sendt.',
+'confirmemail_sendfailed'=> 'Kunne ikke sende bekreftelseskode. Sjekk e-postadressen for ugyldige tegn.',
+'confirmemail_invalid'  => 'Ugyldig bekreftelseskode. Koden kan ha utløpt.',
+'confirmemail_needlogin'=> 'Du må $1 for å bekrefte e-postadressen di.',
+'confirmemail_success'  => 'E-postadressen din har blitt bekreftet. Du kan nå logge inn og nyte wikien.',
+'confirmemail_loggedin' => 'E-postadressen din har blitt bekreftet.',
+'confirmemail_error'    => 'Noe gitt galt under registrering av din bekreftelse.',
+'confirmemail_subject'  => 'Bekreftelsese-post fra {{SITENAME}}',
+'confirmemail_body'     => 'Noen, antageligvis deg, fra IP-adressen $1, har registrert kontoen «$2» på {{SITENAME}}, og oppgitt denne e-post-adressen. For å bekrefte at kontoen virkelig tilhører deg og for å aktivere e-posttjenester på {{SITENAME}}, åpne denne lenken i din nettleser: $3
+
+Om dette ikke er deg, ikke følg lenken. Denne bekreftelseskoden vil utløpe $4.',
+'tryexact'              => 'Prøv nøyaktig treff',
+'searchfulltext'        => 'Søk full tekst',
+'createarticle'         => 'Opprett artikkel',
+'scarytranscludedisabled'=> '[Interwiki-transkludering er slått av]',
+'scarytranscludefailed' => '[Malen kunne ikke hentes for $1; beklager]',
+'scarytranscludetoolong'=> '[URL-en er for lang; beklager]',
+'trackbackbox'          => '<div id="mw_trackbacks">
+Tilbakesporinger for denne artikkelen:<br />
+$1
+</div>',
+'trackbackremove'       => ' ([$1 Slett])',
+'trackbacklink'         => 'Tilbakesporing',
+'trackbackdeleteok'     => 'Tilbakesporingen ble slettet.',
+'deletedwhileediting'   => 'Advarsel: Denne siden har blitt slettet etter at du begynte å redigere den!',
+'confirmrecreate'       => '«[[User:$1|$1]]» ([[User talk:$1|diskusjon]]) slettet siden etter at du begynte å redigere den, med begrunnelsen «$2». Vennligst bekreft at du vil gjenopprette siden.',
+'recreate'              => 'Gjenopprett',
+'tooltip-recreate'      => 'Gjenopprett siden til tross for at den har blitt slettet',
+'unit-pixel'            => 'px',
+'redirectingto'         => 'Omdirigerer til [[$1]]…',
+'confirm_purge'         => 'Vil du slette tjenerens mellomlagrede versjon (\'\'cache\'\') av denne siden? $1',
+'confirm_purge_button'  => 'OK',
+'youhavenewmessagesmulti'=> 'Du har nye beskjeder på $1',
+'searchcontaining'      => 'Søk etter artikler som inneholder \'\'$1\'\'.',
+'searchnamed'           => 'Søk for artikler ved navn \'\'$1\'\'.',
+'articletitles'         => 'Artikler som begynner med \'\'$1\'\'',
+'hideresults'           => 'Skjul resultater',
+'displaytitle'          => '(Lenke til denne siden som [[$1]])',
+'loginlanguagelabel'    => 'Språk: $1',
+);
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesNon.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesNon.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesNon.php	(revision 1280)
@@ -0,0 +1,10 @@
+<?php
+/** Old Norse (Norrǿna)
+  *
+  * Defaults to Icelandic instead of English.
+  *
+  * @addtogroup Language
+  */
+$fallback = 'is';
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesNv.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesNv.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesNv.php	(revision 1280)
@@ -0,0 +1,71 @@
+<?php
+/** Navajo (Diné bizaad)
+ *
+ * @addtogroup Language
+ */
+
+$skinNames = array(
+	'mono' => 'Łáa\'ígíí',
+	'monobook' => 'NaaltsoosŁáa\'ígíí'
+);
+
+$namespaceNames = array(
+	NS_MEDIA            => 'Media',
+	NS_SPECIAL          => 'Special',
+	NS_MAIN	            => '',
+	NS_TALK	            => 'Naaltsoos_baa_yinísht\'į́',
+	NS_USER             => 'Choinish\'įįhí',
+	NS_USER_TALK        => 'Choinish\'įįhí_baa_yinísht\'į́',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK     => '$1_baa_yinísht\'į́',
+	NS_IMAGE            => 'E\'elyaaígíí',
+	NS_IMAGE_TALK       => 'E\'elyaaígíí_baa_yinísht\'į́',
+	NS_MEDIAWIKI        => 'MediaWiki',
+	NS_MEDIAWIKI_TALK   => 'MediaWiki_baa_yinísht\'į́',
+	NS_TEMPLATE         => 'Template',
+	NS_TEMPLATE_TALK    => 'Template_talk',
+	NS_HELP             => 'Aná\'álwo\'',
+	NS_HELP_TALK        => 'Aná\'álwo\'_baa_yinísht\'į́',
+	NS_CATEGORY         => 'T\'ááłáhági_át\'éego',
+	NS_CATEGORY_TALK    => 'T\'ááłáhági_át\'éego_baa_yinísht\'į́'
+);
+
+$datePreferences = false;
+
+$messages = array(
+'sunday'                => 'Damóogo', 
+'monday'                => 'Damóo biiskání', 
+'tuesday'               => 'Damóodóó naakiską́o', 
+'wednesday'             => 'Damóodóó tágí jį́', 
+'thursday'              => 'Damóodóó dį́į́\' yiską́o',
+'friday'                => 'Nda\'iiníísh', 
+'saturday'              => 'Yiską́ damóo',
+
+'january'               => 'Yas Niłt\'ees', 
+'february'              => 'Atsá Biyáázh', 
+'march'                 => 'Wóózhch\'į́į́d', 
+'april'                 => 'T\'ą́ą́chil',
+'may_long'              => 'T\'ą́ą́tsoh', 
+'june'                  => 'Ya\'iishjááshchilí',
+'july'                  => 'Ya\'iishjáástsoh', 
+'august'                => 'Bini\'ant\'ą́ą́ts\'ózí',
+'september'             => 'Bini\'ant\'ą́ą́tsoh', 
+'october'               => 'Ghąąjį', 
+'november'              => 'Níłch\'its\'ósí',
+'december'              => 'Níłch\'itsoh',
+
+'jan'                   => 'Ynts', 
+'feb'                   => 'Atsb', 
+'mar'                   => 'Wozh', 
+'apr'                   => 'Tchi', 
+'may'                   => 'Ttso', 
+'jun'                   => 'Yjsh', 
+'jul'                   => 'Yjts', 
+'aug'                   => 'Btsz', 
+'sep'                   => 'Btsx', 
+'oct'                   => 'Ghąj', 
+'nov'                   => 'Ntss', 
+'dec'                   => 'Ntsx',
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesOc.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesOc.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesOc.php	(revision 1280)
@@ -0,0 +1,2009 @@
+<?php
+/** Occitan (Occitan)
+ *
+ * @addtogroup Language
+ */
+$skinNames = array(
+	'standard' => 'Normal',
+	'nostalgia' => 'Nostalgia',
+	'cologneblue' => 'Còlonha Blau',
+);
+
+$bookstoreList = array(
+	'Amazon.fr' => 'http://www.amazon.fr/exec/obidos/ISBN=$1'
+);
+
+$namespaceNames = array(
+	NS_SPECIAL        => 'Especial',
+	NS_MAIN           => '',
+	NS_TALK           => 'Discutir',
+	NS_USER           => 'Utilizaire',
+	NS_USER_TALK      => 'Discussion_Utilizaire',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK   => 'Discussion_$1',
+	NS_IMAGE          => 'Imatge',
+	NS_IMAGE_TALK     => 'Discussion_Imatge',
+	NS_MEDIAWIKI      => 'MediaWiki',
+	NS_MEDIAWIKI_TALK => 'Discussion_MediaWiki',
+	NS_TEMPLATE       => 'Modèl',
+	NS_TEMPLATE_TALK  => 'Discussion_Modèl',
+	NS_HELP           => 'Ajuda',
+	NS_HELP_TALK      => 'Discussion_Ajuda',
+	NS_CATEGORY       => 'Categoria',
+	NS_CATEGORY_TALK  => 'Discussion_Categoria',
+);
+$namespaceAliases = array(
+	'Utilisator'            => NS_USER,
+	'Discussion_Utilisator' => NS_USER_TALK,
+	'Discutida_Utilisator' => NS_USER_TALK,
+	//'Discutida_$1'         => NS_PROJECT_TALK, /// @fixme
+	'Discutida_Imatge'     => NS_IMAGE_TALK,
+	'Mediaòiqui'           => NS_MEDIAWIKI,
+	'Discussion_Mediaòiqui' => NS_MEDIAWIKI_TALK,
+	'Discutida_Mediaòiqui' => NS_MEDIAWIKI_TALK,
+	'Discutida_Modèl'      => NS_TEMPLATE_TALK,
+	'Discutida_Ajuda'      => NS_HELP_TALK,
+	'Discutida_Categoria'  => NS_CATEGORY_TALK,
+);
+$linkTrail = "/^([a-zàâçéèêîôû]+)(.*)\$/sDu";
+
+$dateFormats = array(
+	'mdy time' => 'H:i',
+	'mdy date' => 'M j, Y',
+	'mdy both' => 'M j, Y "a" H:i',
+
+	'dmy time' => 'H:i',
+	'dmy date' => 'j M Y',
+	'dmy both' => 'j M Y "a" H:i',
+
+	'ymd time' => 'H:i',
+	'ymd date' => 'Y M j',
+	'ymd both' => 'Y M j "a" H:i',
+);
+
+$separatorTransformTable = array( ',' => "\xc2\xa0", '.' => ',' );
+
+$messages = array(
+# User preference toggles
+'tog-underline'               => 'Soslinhar los ligams :',
+'tog-highlightbroken'         => 'Los ligams suls subjèctes non creats aparéisson en roge',
+'tog-justify'                 => 'Paragrafs justificats',
+'tog-hideminor'               => 'Amagar los <i>Darrièrs cambiaments</i> menors',
+'tog-extendwatchlist'         => 'Lista de seguit melhorada',
+'tog-usenewrc'                => 'Darrièrs cambiaments melhorats<br /> (pas per totes los navegaires)',
+'tog-numberheadings'          => 'Numerotacion automatica dels títols',
+'tog-showtoolbar'             => "Mostrar la barra de menut d'edicion",
+'tog-editondblclick'          => 'Editar las paginas amb un doble clic (JavaScript)',
+'tog-editsection'             => 'Editar una seccion via los ligams [editar]',
+'tog-editsectiononrightclick' => 'Editar una seccion en clicant a drecha<br /> sul títol de la seccion',
+'tog-showtoc'                 => 'Afichar la taula de las matièras<br /> (pels articles de mai de 3 seccions)',
+'tog-rememberpassword'        => 'Se remembrar de mon senhal (cookie)',
+'tog-editwidth'               => "La fenèstra d'edicion s'aficha en plena largor",
+'tog-watchcreations'          => 'Ajustar las paginas que suprimissi de ma lista de seguit',
+'tog-watchdefault'            => 'Seguir los articles que crei o modifiqui',
+'tog-watchmoves'              => 'Ajustar las paginas que renomeni a ma lista de seguit',
+'tog-watchdeletion'           => 'Ajustar las paginas que suprimissi de ma lista de seguit',
+'tog-minordefault'            => 'Mas modificacions son consideradas<br /> coma menoras per defaut',
+'tog-previewontop'            => "Mostrar la previsualizacion<br />al dessús de la boita d'edicion",
+'tog-previewonfirst'          => 'Mostrar la previsualizacion al moment de la primièra edicion',
+'tog-nocache'                 => "Desactivar l'amagatal de paginas",
+'tog-enotifwatchlistpages'    => 'Avertissètz-me per corrièr electronic en cas de modificacion de la pagina',
+'tog-enotifusertalkpages'     => "Desiri recebre un corrièr electronic quand ma pagina d'utilizaire es modificada.",
+'tog-enotifminoredits'        => "Mandatz-me un corrièr electronic quitament per d'edicions menoras de las paginas",
+'tog-enotifrevealaddr'        => 'Afichatz mon adreça electronica dins la notificacion dels corrièrs electronics',
+'tog-shownumberswatching'     => "Afichar lo nombre d'utilizaires que seguisson aquesta pagina",
+'tog-fancysig'                => 'Signatura bruta (sens ligam automatic)',
+'tog-externaleditor'          => 'Utilizar un editor extèrn per defaut',
+'tog-externaldiff'            => 'Utilizar un comparator extèrn per defaut',
+'tog-showjumplinks'           => 'Activar los ligams « navigacion » e « recèrca » en naut de pagina (aparéncias Myskin e autres)',
+'tog-uselivepreview'          => 'Utilizar la vista rapida (JavaScript) (Experimental)',
+'tog-forceeditsummary'        => "M'avertir quand ai pas modificat lo contengut de la boita de resumit.",
+'tog-watchlisthideown'        => 'Amagar mas pròprias modificacions dins la lista de seguit',
+'tog-watchlisthidebots'       => 'Amagar los cambiaments faches pels bòts dins la lista de seguit',
+'tog-watchlisthideminor'      => 'Amagar las modificacions menoras dins la lista de seguit',
+'tog-nolangconversion'        => 'Desactivar la conversion de las variantas de lenga',
+'tog-ccmeonemails'            => 'Mandatz-me una còpia dels corrièrs electronics que mandi als autres utilizaires',
+'tog-diffonly'                => 'Mostrar pas lo contengut de las paginas jos las difs',
+
+'underline-always'  => 'Totjorn',
+'underline-never'   => 'Pas jamai',
+'underline-default' => 'Segon lo navegaire',
+
+'skinpreview' => '(Previsualizar)',
+
+# Dates
+'sunday'        => 'dimenge',
+'monday'        => 'diluns',
+'tuesday'       => 'dimarts',
+'wednesday'     => 'dimècres',
+'thursday'      => 'dijòus',
+'friday'        => 'divendres',
+'saturday'      => 'dissabte',
+'sun'           => 'Dimg',
+'mon'           => 'Dil',
+'tue'           => 'Dima',
+'wed'           => 'Dimè',
+'thu'           => 'Dij',
+'fri'           => 'Div',
+'sat'           => 'Diss',
+'january'       => 'de genièr',
+'february'      => 'de febrièr',
+'march'         => 'de març',
+'april'         => "d'abril",
+'may_long'      => 'de mai',
+'june'          => 'de junh',
+'july'          => 'de julhet',
+'august'        => "d'agost",
+'september'     => 'de setembre',
+'october'       => "d'octobre",
+'november'      => 'de novembre',
+'december'      => 'de decembre',
+'january-gen'   => 'Genièr',
+'february-gen'  => 'Febrièr',
+'march-gen'     => 'Març',
+'april-gen'     => 'Abril',
+'may-gen'       => 'Mai',
+'june-gen'      => 'Junh',
+'july-gen'      => 'Julhet',
+'august-gen'    => 'Agost',
+'september-gen' => 'Setembre',
+'october-gen'   => 'Octobre',
+'november-gen'  => 'Novembre',
+'december-gen'  => 'Decembre',
+'jan'           => 'de gen',
+'feb'           => 'de feb',
+'mar'           => 'de març',
+'apr'           => "d'abr",
+'may'           => 'de mai',
+'jun'           => 'de junh',
+'jul'           => 'de julh',
+'aug'           => "d'ago",
+'sep'           => 'de set',
+'oct'           => "d'oct",
+'nov'           => 'de nov',
+'dec'           => 'de dec',
+
+# Bits of text used by many pages
+'categories'            => 'Categorias de la pagina',
+'pagecategories'        => '{{PLURAL:$1|Categoria|Categorias}} de la pagina',
+'category_header'       => 'Articles dins la categoria "$1"',
+'subcategories'         => 'Soscategorias',
+'category-media-header' => 'Fichièrs multimèdia dins la categoria "$1"',
+
+'mainpagetext'      => 'Logicial {{SITENAME}} installat.',
+'mainpagedocfooter' => "Referissètz-vos a [http://meta.wikimedia.org/wiki/Help:Contents User's Guide] a prepaus de la personalizacion de l'interfàcia.
+
+== Getting started ==
+
+* [http://www.mediawiki.org/wiki/Help:Configuration_settings Configuration settings list]
+* [http://www.mediawiki.org/wiki/Help:FAQ MediaWiki FAQ]
+* [http://mail.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]",
+
+'about'          => 'A prepaus',
+'article'        => 'Article',
+'newwindow'      => '(dobrís una fenèstra novèla)',
+'cancel'         => 'Anullar',
+'qbfind'         => 'Recercar',
+'qbbrowse'       => 'Far desfilar',
+'qbedit'         => 'Editar',
+'qbpageoptions'  => "Pagina d'opcion",
+'qbpageinfo'     => "Pagina d'informacion",
+'qbmyoptions'    => 'Mas opcions',
+'qbspecialpages' => 'Paginas especialas',
+'moredotdotdot'  => 'E mai...',
+'mypage'         => 'Ma pagina',
+'mytalk'         => 'Ma pagina de discussion',
+'anontalk'       => 'Discussion amb aquesta adreça IP',
+'navigation'     => 'Navigacion',
+
+# Metadata in edit box
+'metadata_help' => 'Metadonadas:',
+
+'errorpagetitle'    => 'Error',
+'returnto'          => 'Tornar a la pagina $1.',
+'help'              => 'Ajuda',
+'search'            => 'Recercar',
+'searchbutton'      => 'Recercar',
+'go'                => 'Legir',
+'searcharticle'     => 'Consultar',
+'history'           => 'Istoric',
+'history_short'     => 'Istoric',
+'updatedmarker'     => 'modificat dempuèi ma darrièra visita',
+'info_short'        => 'Informacions',
+'printableversion'  => 'Version imprimibla',
+'permalink'         => 'Ligam permanent',
+'print'             => 'Imprimir',
+'edit'              => 'Editar',
+'editthispage'      => 'Modificar aquesta pagina',
+'delete'            => 'Suprimir',
+'deletethispage'    => 'Suprimir aquesta pagina',
+'undelete_short'    => 'Restablir {{PLURAL:$1|1 modificacion| $1 modificacions}}',
+'protect'           => 'Protegir',
+'protect_change'    => 'cambiar la proteccion',
+'protectthispage'   => 'Protegir aquesta pagina',
+'unprotect'         => 'desprotegir',
+'unprotectthispage' => 'Desprotegir aquesta pagina',
+'newpage'           => 'Pagina novèla',
+'talkpage'          => 'Pagina de discussion',
+'specialpage'       => 'Pagina especiala',
+'personaltools'     => 'Espleches personals',
+'postcomment'       => 'Ajustar un comentari',
+'articlepage'       => "Vejatz l'article",
+'talk'              => 'Discussion',
+'views'             => 'Afichatges',
+'toolbox'           => "Boita d'espleches",
+'userpage'          => "Pagina d'utilizaire",
+'projectpage'       => 'Pagina meta',
+'imagepage'         => "Pagina d'imatge",
+'mediawikipage'     => 'Veire la pagina del messatge',
+'templatepage'      => 'Veire la pagina del modèl',
+'viewhelppage'      => "Veire la pagina d'ajuda",
+'categorypage'      => 'Veire la pagina de las categorias',
+'viewtalkpage'      => 'Pagina de discussion',
+'otherlanguages'    => 'Autras lengas',
+'redirectedfrom'    => '(Redirigit dempuèi $1)',
+'redirectpagesub'   => 'Pagina de redireccion',
+'lastmodifiedat'    => "Darrièr cambiament d'aquesta pagina : $2, $1.", # $1 date, $2 time
+'viewcount'         => 'Aquesta pagina es estada consultada {{plural:$1|un còp|$1 còps}}.',
+'protectedpage'     => 'Pagina protegida',
+'jumpto'            => 'Anar a:',
+'jumptonavigation'  => 'navigacion',
+'jumptosearch'      => 'Recercar',
+
+# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
+'aboutsite'         => 'A prepaus de {{SITENAME}}',
+'aboutpage'         => '{{ns:4}}:A prepaus',
+'bugreports'        => "Rapòrt d'errors",
+'bugreportspage'    => "{{ns:project}}:Rapòrt d'errors",
+'copyright'         => 'Lo contengut es disponible segon los tèrmes de la licéncia $1.',
+'copyrightpagename' => 'licéncia {{SITENAME}}',
+'copyrightpage'     => '{{ns:project}}:Copyright',
+'currentevents'     => 'Actualitats',
+'currentevents-url' => 'Project:Actualitats',
+'disclaimers'       => 'Avertiments',
+'disclaimerpage'    => '{{ns:4}}:Avertiments generals',
+'edithelp'          => 'Ajuda',
+'edithelppage'      => '{{ns:project}}:Cossí editar una pagina',
+'faq'               => 'FAQ',
+'faqpage'           => '{{ns:project}}:FAQ',
+'helppage'          => '{{ns:project}}:Ajuda',
+'mainpage'          => 'Acuèlh',
+'portal'            => 'Comunautat',
+'portal-url'        => '{{ns:4}}:Acuèlh',
+'privacy'           => 'Politica de confidencialitat',
+'privacypage'       => 'meta:Confidencialitat',
+'sitesupport'       => 'Participar en fasent un don',
+'sitesupport-url'   => 'Project:Fasètz un don',
+
+'badaccess'        => 'Error de permission',
+'badaccess-group0' => 'Avètz pas los dreches sufisents per realizar l’accion que demandatz.',
+'badaccess-group1' => "L’accion qu'ensajatz de realizar es pas accessibla qu’als utilizaires del grop $1.",
+'badaccess-group2' => "L’accion qu'ensajatz de realizar es pas accessibla qu’als utilizaires dels gropes $1.",
+'badaccess-groups' => "L’accion qu'ensajatz de realizar es pas accessibla qu’als utilizaires dels gropes $1.",
+
+'versionrequired'     => 'Version $1 de MediaWiki necessària',
+'versionrequiredtext' => 'La version $1 de MediaWiki es necessària per utilizar aquesta pagina. Consultatz [[Special:Version]]',
+
+'ok'                  => "D'acòrdi",
+'retrievedfrom'       => 'Recuperada de "$1"',
+'youhavenewmessages'  => 'Avètz $1 ($2).',
+'newmessageslink'     => 'messatge(s) novèl(s)',
+'newmessagesdifflink' => 'darrièr cambiament',
+'editsection'         => 'modificar',
+'editold'             => 'modificar',
+'editsectionhint'     => 'Modificar la seccion : $1',
+'toc'                 => 'Somari',
+'showtoc'             => 'mostrar',
+'hidetoc'             => 'amagar',
+'thisisdeleted'       => 'Afichar o restablir $1?',
+'viewdeleted'         => 'Veire $1?',
+'restorelink'         => '{{PLURAL:$1|una edicion escafada|$1 edicions escafadas}}',
+'feedlinks'           => 'Flus:',
+'feed-invalid'        => 'Tipe de flus invalid.',
+
+# Short words for each namespace, by default used in the 'article' tab in monobook
+'nstab-user'      => "Pagina d'utilizaire",
+'nstab-media'     => 'Pagina de mèdia',
+'nstab-special'   => 'Especial',
+'nstab-project'   => 'A prepaus',
+'nstab-image'     => 'Fichièr',
+'nstab-mediawiki' => 'Messatge',
+'nstab-template'  => 'Modèl',
+'nstab-help'      => 'Ajuda',
+'nstab-category'  => 'Categoria',
+
+# Main script and global functions
+'nosuchaction'      => 'Accion desconeguda',
+'nosuchactiontext'  => "L'accion especificada dins l'Url es pas reconeguda pel logicial {{SITENAME}}.",
+'nosuchspecialpage' => 'Pagina especiala inexistanta',
+'nospecialpagetext' => "Avètz demandat una pagina especiala qu'es pas reconeguda pel logicial {{SITENAME}}.",
+
+# General errors
+'error'                => 'Error',
+'databaseerror'        => 'Error banca de donadas',
+'dberrortext'          => 'Error de sintaxi dins la banca de donadas. La darrièra requèsta tractada per la banca de donadas èra :
+<blockquote><tt>$1</tt></blockquote>
+dempuèi la foncion "<tt>$2</tt>".
+MySQL a renviat l\'error "<tt>$3: $4</tt>".',
+'dberrortextcl'        => 'Una requèsta a la banca de donadas compòrta una error de sintaxi.
+La darrièra requèsta mandada èra :
+« $1 »
+efectuada per la foncion « $2 ».
+MySQL a retornat l\'error "$3: $4"',
+'noconnect'            => 'O planhem ! En seguida a de problèmas tecnics, es impossible de se connectar a la banca de donadas pel moment.',
+'nodb'                 => 'Seleccion impossibla de la banca de donadas $1',
+'cachederror'          => 'Aquò es una còpia de la pagina demandada e pòt pas èsser mesa a jorn',
+'laggedslavemode'      => 'Atencion, aquesta pagina pòt conténer pas las totes darrièrs cambiaments efectuats',
+'readonly'             => 'Mesas a jorn blocadas sus la banca de donadas',
+'enterlockreason'      => 'Indicatz la rason del blocatge, e mai una estimacion de la durada de blocatge',
+'readonlytext'         => "Los ajusts e mesas a jorn sus la banca de donadas {{SITENAME}} son actualament blocats, probablament per permetre la mantenença de la banca, aprèp aquò, tot dintrarà dins l'òrdre. Vaquí la rason per laquala l'administrator a blocat la banca :
+<p>$1",
+'missingarticle'       => 'La banca de donadas a pas pogut trobar lo tèxt d\'una pagina existenta, que lo títol es "$1".
+Es pas una error de la banca de donadas, mas mai probablament un bog del logicial {{SITENAME}}.
+Raportatz aquesta error a un administrator, en li indicant l\'adreça de la pagina fautiva.',
+'readonly_lag'         => 'La banca de donadas es estada automaticament clavada pendent que los serveires segondaris ratrapan lor retard sul serveire principal.',
+'internalerror'        => 'Error intèrna',
+'filecopyerror'        => 'Impossible de copiar "$1" vèrs "$2".',
+'filerenameerror'      => 'Impossible de renomenar "$1" en "$2".',
+'filedeleteerror'      => 'Impossible de suprimir "$1".',
+'filenotfound'         => 'Fichièr "$1" introbable.',
+'unexpected'           => 'Valor inesperada : "$1"="$2".',
+'formerror'            => 'Error: Impossible de sometre lo formulari',
+'badarticleerror'      => 'Aquesta accion pot pas èsser efectuada sus aquesta pagina.',
+'cannotdelete'         => "Impossible de suprimir la pagina o l'imatge indicat.",
+'badtitle'             => 'Marrit títol',
+'badtitletext'         => 'Lo títol de la pagina demandada es invalid, void o lo ligam interlenga es invalid',
+'perfdisabled'         => 'O planhem ! Aquesta foncionalitat es temporàriament desactivada
+perque alentís la banca de donadas a un punt tal que degun
+pòt pas mai utilizar lo wiki.',
+'perfdisabledsub'      => 'Aquò es una còpia de salvagarda de $1 :', # obsolete?
+'perfcached'           => 'Aquò es una version en amagatal e es benlèu pas a jorn.',
+'perfcachedts'         => 'Las donadas seguentas son en amagatal, son doncas pas obligatòriament a jorn. La darrièra actualizacion data del $1.',
+'querypage-no-updates' => 'Las mesas a jorn per aquesta pagina son actualamnt desactivadas. Las donadas çai jos son pas mesas a jorn.',
+'wrong_wfQuery_params' => 'Paramètres incorrèctes sus wfQuery()<br />
+Foncion : $1<br />
+Requèsta : $2',
+'viewsource'           => 'Veire lo tèxt font',
+'viewsourcefor'        => 'per $1',
+'protectedpagetext'    => 'Aquesta pagina es estada protegida per empachar sa modificacion.',
+'viewsourcetext'       => 'Podètz veire e copiar son còde font :',
+'protectedinterface'   => 'Aquesta pagina fornís de tèxt d’interfàcia pel logicial e es protegida per evitar los abuses.',
+'editinginterface'     => "'''Atencion:''' Sètz a editar una pagina qu'es utilizada per modificar lo tèxt de l'interfàcia del logicial. Los cambiaments sus aquesta pagina afectaràn l'aparéncia de l'interfàcia d'utilizaire pels autres utilizaires.",
+'sqlhidden'            => '(Requèsta SQL amagada)',
+'cascadeprotected'     => 'Aquesta pagina es actualament protegida perque es inclusa dins las paginas seguentas, que son estadas protegidas amb l’opcion « proteccion en cascada » activada :',
+
+# Login and logout pages
+'logouttitle'                => 'Desconnexion',
+'logouttext'                 => "Ara, sètz desconnectat(ada). Podètz contunhar d'utilizar {{SITENAME}} anonimament, o vos tornar connectar, eventualament amb un autre nom.",
+'welcomecreation'            => "<h2>Benvenguda, $1!</h2><p>Vòstre compte d'utilizaire es estat creat.
+Doblidetz pas de personalizar vòstre {{SITENAME}} en consultant la pagina Preferéncias.",
+'loginpagetitle'             => 'Vòstre identificant',
+'yourname'                   => "Vòstre nom d'utilizaire",
+'yourpassword'               => 'Vòstre senhal',
+'yourpasswordagain'          => 'Picatz tornarmai vòstre senhal',
+'remembermypassword'         => 'Se remembrar de mon senhal (cookie)',
+'yourdomainname'             => 'Vòstre domeni',
+'externaldberror'            => 'Siá una error s’es producha amb la banca de donadas d’autentificacion extèrna, siá sètz pas autorizat a metre a jorn vòstre compte extèrn.',
+'loginproblem'               => '<b>Problèma d’identificacion.</b><br />Ensajatz tornarmai !',
+'alreadyloggedin'            => '<strong>Utilizaire $1, sètz ja identificat !</strong><br />',
+'login'                      => 'Identificacion',
+'loginprompt'                => 'Devètz activar los cookies per vos connectar a {{SITENAME}}.',
+'userlogin'                  => 'Identificacion',
+'logout'                     => 'Desconnexion',
+'userlogout'                 => 'Desconnexion',
+'notloggedin'                => 'Pas connectat',
+'nologin'                    => 'Avètz pas de compte ? $1.',
+'nologinlink'                => 'Creatz un compte',
+'createaccount'              => 'Crear un compte novèl',
+'gotaccount'                 => 'Avètz ja un compte ? $1.',
+'gotaccountlink'             => 'Identificatz-vos',
+'createaccountmail'          => 'per corrièr electronic',
+'badretype'                  => "Los senhals qu'avètz picats son pas identics.",
+'userexists'                 => "Lo nom d'utilizaire qu'avètz picat es ja utilizat. Causissètz-ne un autre.",
+'youremail'                  => 'Mon adreça electronica',
+'username'                   => 'Nom d’utilizaire :',
+'uid'                        => 'Numèro d’utilizaire :',
+'yourrealname'               => 'Nom vertadièr *',
+'yourlanguage'               => 'Lenga:',
+'yourvariant'                => 'Varianta',
+'yournick'                   => 'Mon escais (per las signaturas)',
+'badsig'                     => 'Signatura bruta incorrècta ; Verificatz vòstras balisas HTML.',
+'email'                      => 'Corrièr electronic',
+'prefs-help-email-enotif'    => "Aquesta adreça es tanben utilizada per vos mandar de notificacions per corrièr electronic s'avètz activat las opcions correspondentas.",
+'prefs-help-realname'        => "* Nom vertadièr (facultatiu) : se l'especificatz, serà utilizat per l'atribucion de vòstras contribucions.",
+'loginerror'                 => "Problèma d'identificacion",
+'prefs-help-email'           => '*Adreça de corrièr electronic (facultatiu) : permet de vos contactar dempuèi lo sit sens desvelar vòstra identitat.',
+'nocookiesnew'               => "Lo compte d'utilizaire es estat creat, mas sètz pas connectat. {{SITENAME}} utiliza de cookies per la connexion mas los avètz desactivats. Activatz-los e reconnectatz-vos amb lo meteis nom e lo meteis senhal.",
+'nocookieslogin'             => '{{SITENAME}} utiliza de cookies per la connexion mas avètz los cookies desactivats. Activatz-los e reconnectatz-vos.',
+'noname'                     => "Avètz pas picat de nom d'utilizaire.",
+'loginsuccesstitle'          => 'Identificacion capitada.',
+'loginsuccess'               => 'Sètz actualament connectat(ada) sus {{SITENAME}} en tant que "$1".',
+'nosuchuser'                 => 'L\'utilizaire "$1" existís pas.
+Verificatz qu\'avètz plan ortografiat lo nom, o utilizatz lo formulari çai jos per crear un compte d\'utilizaire novèl.',
+'nosuchusershort'            => 'I a pas de contributor amb lo nom « $1 ». Verificatz l’ortografia.',
+'nouserspecified'            => 'Devètz picar un nom d’utilizaire.',
+'wrongpassword'              => 'Lo senhal es incorrècte. Ensajatz tornarmai.',
+'wrongpasswordempty'         => 'Avètz pas entrat de senhal. Ensajatz tornarmai.',
+'mailmypassword'             => 'Mandatz-me un senhal novèl',
+'passwordremindertitle'      => 'Vòstre senhal novèl sus {{SITENAME}}',
+'passwordremindertext'       => 'Qualqu\'un (probablament vos) amb l\'adreça IP $1 a demandat qu\'un senhal novèl vos siá mandat per vòstre accès a {{SITENAME}} ($4).
+Lo senhal de l\'utilizaire "$2" es a present "$3".
+
+Vos conselham de vos connectar e de modificar aqueste senhal tre que possible.',
+'noemail'                    => 'Cap adreça electronica es pas estada enregistrada per l\'utilizaire "$1".',
+'passwordsent'               => 'Un senhal novèl es estat mandat a l\'adreça electronica de l\'utilizaire "$1".
+Identificatz-vos tre que l\'aurètz recebut.',
+'blocked-mailpassword'       => 'Vòstra adreça IP es blocada en edicion, la foncion de rapèl del senhal es doncas desactivada per evitar los abuses.',
+'eauthentsent'               => 'Un corrièr de confirmacion es estat mandat a l’adreça indicada.
+Abans qu’un autre corrièr sià mandat a aqueste compte, devretz seguir las instruccions donadas dins lo messatge per confirmar que sètz plan lo titular.',
+'throttled-mailpassword'     => 'Un corrièr electronic de rapèl de vòstre senhal ja es estat mandat durant las $1 darrièras oras. Per evitar los abuses, un sol corrièr de rapèl serà mandat en $1 oras.',
+'mailerror'                  => 'Error en mandant lo corrièr electronic : $1',
+'acct_creation_throttle_hit' => "O planhèm, avètz ja $1 comptes creats. Podètz pas ne crear d'autres.",
+'emailauthenticated'         => 'Vòstra adreça de corrièr electronic es estada autentificada lo $1.',
+'emailnotauthenticated'      => 'Vòstra adreça de corrièr electronic es <strong>pas encara autentificada</strong>. Cap corrièr serà pas mandat per caduna de las foncions seguentas.',
+'noemailprefs'               => "Fornissetz una adreça de corrièr electronic pel bon foncionament d'aquestas foncionalitats.",
+'emailconfirmlink'           => 'Confirmatz vòstra adreça de corrièr electronic',
+'invalidemailaddress'        => 'Aquesta adreça de corrièr electronic pòt pas èsser acceptada perque sembla aver un format invalid. Entratz una adreça valida o daissatz aqueste camp void.',
+'accountcreated'             => 'Compte creat.',
+'accountcreatedtext'         => "Lo compte d'utilizaire de $1 es estat creat.",
+
+# Password reset dialog
+'resetpass'               => 'Remesa a zèro del senhal',
+'resetpass_announce'      => 'Vos sètz enregistrat amb un senhal temporari mandat per corrièr electronic. Per acabar l’enregistrament, devètz picar un senhal novèl aicí :',
+'resetpass_text'          => '<!-- Ajust de tèxt aicí -->',
+'resetpass_header'        => 'Remesa a zèro del senhal',
+'resetpass_submit'        => 'Cambiar lo senhal e s’enregistrar',
+'resetpass_success'       => 'Vòstre senhal es estat cambiat amb succès ! Enregistrament en cors...',
+'resetpass_bad_temporary' => 'Senhal temporari invalid. Benlèu avètz ja cambiat vòstre senhal amb succès, o demandat un senhal temporari novèl.',
+'resetpass_forbidden'     => 'Los senhals pòdon pas èsser cambiats sus aqueste wiki',
+'resetpass_missing'       => 'Cap de donada entrada.',
+
+# Edit page toolbar
+'bold_sample'     => 'Tèxt en gras',
+'bold_tip'        => 'Tèxt en gras',
+'italic_sample'   => 'Tèxt en italica',
+'italic_tip'      => 'Tèxt en italica',
+'link_sample'     => 'Títol del ligam',
+'link_tip'        => 'Ligam intèrn',
+'extlink_sample'  => 'http://www.example.com títol del ligam',
+'extlink_tip'     => 'Ligam extèrn (doblidez pas lo prefix http://)',
+'headline_sample' => 'Tèxt de sostítol',
+'headline_tip'    => 'Sostítol nivèl 2',
+'math_sample'     => 'Picatz vòstra formula aicí',
+'math_tip'        => 'Formula matematica (LaTeX)',
+'nowiki_sample'   => 'Picatz lo tèxt pas formatat aicí',
+'nowiki_tip'      => 'Ignorar la sintaxi wiki',
+'image_sample'    => 'Exemple.jpg',
+'image_tip'       => 'Imatge inserit',
+'media_sample'    => 'Exemple.ogg',
+'media_tip'       => 'Ligam vèrs un fichièr mèdia',
+'sig_tip'         => 'Vòstra signatura amb la data',
+'hr_tip'          => "Linha orizontala (n'abusetz pas)",
+
+# Edit pages
+'summary'                   => 'Resumit',
+'subject'                   => 'Subjècte/títol',
+'minoredit'                 => 'Cambiament menor.',
+'watchthis'                 => 'Seguir aqueste article',
+'savearticle'               => 'Salvagardar',
+'preview'                   => 'Previsualizar',
+'showpreview'               => 'Previsualizacion',
+'showlivepreview'           => 'Previsualizacion',
+'showdiff'                  => 'Cambiaments en cors',
+'anoneditwarning'           => "Utilizatz pas de [[Special:Userlogin|compte anonim]]. Sètz '''localizat per vòstra adreça IP''', que serà archivada publicament dins l’<span class=\"plainlinks\">[{{fullurl:{{FULLPAGENAME}}|action=history}} istoric]</span> se modificatz aquesta pagina. <br /><strong> Devètz previzualisar la pagina abans de salvagardar vòstra modificacion.</strong>",
+'missingsummary'            => "'''Atencion :''' avètz pas modificat lo resumit de vòstra modificacion. Se clicatz tornarmai sul boton « Salvagardar », la salvagarda serà facha sens avertiment novèl.",
+'missingcommenttext'        => 'Mercé de metre un comentari çai jos.',
+'missingcommentheader'      => "'''Rapèl :''' Avètz pas provesit de subjècte/títol per aqueste comentari. Se clicatz tornarmai sus ''Salvagardar'', vòstra edicion serà enregistrada sens aquò.",
+'summary-preview'           => 'Previsualizacion del resumit',
+'subject-preview'           => 'Previsualizacion del subjècte/títol',
+'blockedtitle'              => 'Utilizaire blocat',
+'blockedtext'               => "<big>'''Vòstre compte d'utilizaire o vòstra adreça IP son estadas blocadas'''</big> per $1 per la rason seguenta :<br />$2<p> Podètz contactar $1 o un autre [[{{MediaWiki:grouppage-sysop}}|administrator]] per ne discutir.
+Vòstra adreça IP actuala es $3, e lo blocatge d'adreça IP es #$5. Inclusissètz caduna d'aquestas entre-senha dins vòstra requèsta.",
+'blockedoriginalsource'     => "Lo còde font de '''$1''' es indicat çai jos :",
+'blockededitsource'         => "Lo tèxt de '''vòstras edicions''' sus '''$1''' es afichat çai jos :",
+'whitelistedittitle'        => 'Enregistrament necessari per modificar lo contengut',
+'whitelistedittext'         => 'Devètz vos $1 per editar las paginas.',
+'whitelistreadtitle'        => 'Enregistrament necessari per legir lo contengut',
+'whitelistreadtext'         => 'Devètz [[Special:Userlogin|vos identificar]] per legir las paginas.',
+'whitelistacctitle'         => 'Vos es pas permés de crear un compte',
+'whitelistacctext'          => 'Per èstre autorizat a crear de comptes dins aquesta Wiki devètz [[Special:Userlogin|vos identificar]] e aver las autorizacions apropriadas.',
+'confirmedittitle'          => "Confirmacion de l'adreça electronica demandada per editar",
+'confirmedittext'           => "Devètz confirmar vòstra adreça electronica abans de modificar l'enciclopèdia. Entratz e validatz vòstra adreça electronica amb l'ajuda de la pagina [[Special:Preferences|preferéncias]].",
+'nosuchsectiontitle'        => 'Seccion mancanta',
+'nosuchsectiontext'         => "Avètz ensajat de modificar una seccion qu’existís pas. Coma i a pas de seccion $1, i a pas d'endrech ont salvagardar vòstras modificacions.",
+'loginreqtitle'             => 'Enregistrament necessari',
+'loginreqlink'              => 'connectar',
+'loginreqpagetext'          => 'Devètz vos $1 per veire las autras paginas.',
+'accmailtitle'              => 'Senhal mandat.',
+'accmailtext'               => "Lo senhal de '$1' es estat mandat a $2.",
+'newarticle'                => '(Novèl)',
+'newarticletext'            => 'Picatz aicí lo tèxt de vòstre article.',
+'anontalkpagetext'          => "---- ''Aquò es la pagina de discussion per un utilizaire anonim qu'a pas encara creat un compte o que l'utiliza pas. Per aqueste rason, devem utilizar l'adreça IP numerica per l'identificar. Una adreça d'aqueste tope pòt èsser pertejada entre mantun utilizaires. Se sètz un utilizaire anonim e se constatatz que de comentaris que vos concernisson pas vos son estats adreçats, podètz [[Special:Userlogin|crear un compte o vos connectar]] per evitar tota confusion venenta.",
+'noarticletext'             => "Pel moment, i a pas cap de tèxt sus aquesta pagina ; podètz [[{{ns:special}}:Search/{{PAGENAME}}|lançar una recèrca sul títol d'aquesta pagina]] o [{{fullurl:{{NAMESPACE}}:{{FULLPAGENAME}}|action=edit}} modificar aquesta pagina].",
+'clearyourcache'            => 'Nòta : Aprèp aver salvagardat, devètz forçar lo recargament de la pagina per veire los cambiaments : Mozilla / Konqueror / Firefox : ctrl-shift-r, IE / Opera : ctrl-f5, Safari : cmd-r.',
+'usercssjsyoucanpreview'    => "'''Astúcia :''' utilisatz lo boton '''Previsualisacion''' per testar vòstra fuèlha novèla css/js abans de l'enregistrar.<br />Per importar vòstra fuèlha monobook dempuèi una URL, utilisatz ''@import url (VÒSTRA_URL_AICÍ&action=raw&ctype=text/css)''",
+'usercsspreview'            => "'''Remembratz-vos que sètz a previsualizar vòstra pròpria fuèlha CSS e qu’es pas encara estada enregistrada !'''",
+'userjspreview'             => "'''Remembrat-vos que sètz a visualizar o testar vòstre còde JavaScript e qu’es pas encara estat enregistrat !'''",
+'userinvalidcssjstitle'     => "'''Atencion :''' existís pas d'estil « $1 ». Remembratz-vos que las paginas personalas amb extensions .css e .js utilizan de títols en minusculas aprèp lo nom d'utilizaire e la barra de fraccion /.<br />Atal, Utilizaire:Foo/monobook.css es valid, alara que Utilizaire:Foo/Monobook.css serà una fuèlha d'estil invalida.",
+'updated'                   => '(Mes a jorn)',
+'note'                      => '<strong>Nòta :</strong>',
+'previewnote'               => "Atencion, aqueste tèxt es pas qu'una previsualizacion e es pas encara estat salvagardat !",
+'previewconflict'           => "La previsualizacion mòstra lo tèxt d'aquesta pagina tal coma apareisserà un còp salvagardat.",
+'session_fail_preview'      => '<strong>O planhem ! Podem pas enregistrar vòstra modificacion a causa d’una pèrda d’informacions concernent vòstra session. Ensajatz tornarmai. Se aquò capita pas encara, desconnectatz-vos, puèi reconnectatz-vos.</strong>',
+'session_fail_preview_html' => "<strong>O planhem ! Podem pas enregistrar vòstra modificacion a causa d’una pèrda d’informacions concernent vòstra session.</strong> ''L’HTML brut essent activat sus aqueste wiki, la previsualizacion es estada amagada per prevenir un atac per JavaScript.'' <strong>Se la tentativa de modificacion èra legitima, ensajatz tornarmai. Se aquò capita pas encara , desconnectatz-vos, puèi reconnectatz-vos.</strong>",
+'importing'                 => 'Impòrt de $1',
+'editing'                   => 'modificacion de $1',
+'editinguser'               => 'modificacion de $1',
+'editingsection'            => 'Modificacion de $1 (seccion)',
+'editingcomment'            => 'Modificacion de $1 (comentari)',
+'editconflict'              => 'Conflicte de modificacion : $1',
+'explainconflict'           => "<b>Aqueste pagina es estada salvagardada aprèp qu'avètz començat de la modificar.
+La zòna d'edicion superiora conten lo tèxt tal coma es enregistrat actualament dins la banca de donadas. Vòstras modificacions apareisson dins la zòna d'edicion inferiora. Anatz dever aportar vòstras modificacions al tèxt existent. Sol lo tèxt de la zòna superiora serà salvagardat.</b><br />",
+'yourtext'                  => 'Vòstre tèxt',
+'storedversion'             => 'Version enregistrada',
+'nonunicodebrowser'         => '<strong>Atencion : Vòstre navegaire supòrta pas l’unicode. Una solucion temporària es estada trobada per vos permetre de modificar en tota seguretat un article : los caractèrs non-ASCII apareisseràn dins vòstra boita de modificacion en tant que còdes exadecimals. Deuriatz utilizar un navegaire mai recent.</strong>',
+'editingold'                => "<strong>Atencion : sètz a modificar una version obsolèta d'aquesta pagina. Se salvagardatz, totas las modificacions efectuadas dempuèi aquesta version seràn perdudas.</strong>",
+'yourdiff'                  => 'Diferéncias',
+'longpagewarning'           => '<strong>AVERTIMENT : aquesta pagina a una longor de $1 ko. De delà de 32 ko, es preferible per cèrts navegaires de devesir aquesta pagina en seccions mai pichonas.</strong>',
+'longpageerror'             => "<strong>ERROR: Lo tèxt qu'avètz mandat es de $1 Ko, e despassa doncas lo limit autorizat dels $2 Ko. Lo tèxt pòt pas èsser salvagardat.</strong>",
+'readonlywarning'           => "<strong>AVERTIMENT : '''aquesta pagina es <span style=\"color:red\">protegida</span> <u>temporàriament</u> e <u>automaticament</u> per mantenença.'''<br />Doncas poiretz pas i salvagardar vòstras modificacions ara. Podètz copiar lo tèxt dins un fichièr e lo salvagardar per mai tard.</strong>",
+'protectedpagewarning'      => "<strong>ATENCION : Aquesta pagina es protegida. Sols los utilizaires amb l'estatut d'administrator la pòdon modificar. Asseguratz-vos que seguissètz las directivas concernent las paginas protegidas.</strong>",
+'semiprotectedpagewarning'  => "'''Nòta:''' Aquesta pagina es estada blocada, pòt èsser editada pas que pels utiliaires enregistats.",
+'cascadeprotectedwarning'   => '<strong>ATENCION : Aquesta pagina es estada protegida de biais que sols los [[{{MediaWiki:grouppage-sysop}}|administrators]] pòscan l’editar. Aquesta proteccion es estada facha perque aquesta pagina es inclusa dins una pagina protegida amb la « proteccion en cascada » activada.</strong>',
+'templatesused'             => 'Modèls utilizats sus aquesta pagina :',
+'templatesusedpreview'      => 'Modèls utilizats dins aquesta previsualizacion :',
+'templatesusedsection'      => 'Modèls utilizats dins aquesta seccion :',
+'template-protected'        => '(protegit)',
+'template-semiprotected'    => '(semiprotegit)',
+'edittools'                 => '<!-- Tot tèxt picat aicí serà afichat jos las boitas de modificacion o d’impòrt de fichièr. -->',
+'nocreatetitle'             => 'Creacion de pagina limitada',
+'nocreatetext'              => 'Aqueste sit a restrenhut la possibilitat de crear de paginas novèlas. Podètz tonar en arrièr e modificar una pagina existenta, [[Special:Userlogin|vos connectar o crear un compte]].',
+
+# "Undo" feature
+'undo-success' => 'Aquesta modificacion es estada desfacha. Confirmatz, e salvagardatz los cambiaments çai jos.',
+'undo-failure' => 'Aquesta modificacion a pas pogut èsser desfacha a causa de conflictes amb de modificacions intermediàrias.',
+'undo-summary' => 'Anullacion de las modificacions $1 de [[Special:Contributions/$2|$2]] ([[User talk:$2|discutir]])',
+
+# Account creation failure
+'cantcreateaccounttitle' => 'Podètz pas crear de compte.',
+'cantcreateaccounttext'  => 'La creacion de compte dempuèi aquesta adreça IP (<b>$1</b>) es estada blocada. Aquò es probablament la consequéncia d’un vandalisme repetit dempuèi vòstra escòla o vòstre fornidor d’accès a internet.',
+
+# History pages
+'revhistory'          => 'Versions precedentas',
+'viewpagelogs'        => "Vejatz lo jornal d'aquesta pagina",
+'nohistory'           => "Exitís pas d'istoric per aquesta pagina.",
+'revnotfound'         => 'Version introbabla',
+'revnotfoundtext'     => "La version precedenta d'aquesta pagina a pas pogut èsser retrobada. Verificatz l'URL qu'avètz utilizat per accedir a aquesta pagina.",
+'loadhist'            => "Cargament de l'istoric de la pagina",
+'currentrev'          => 'Version actuala',
+'revisionasof'        => 'Version del $1',
+'revision-info'       => 'Version del $1 per $2',
+'previousrevision'    => '←Version precedenta',
+'nextrevision'        => 'Version seguenta→',
+'currentrevisionlink' => 'vejatz la version correnta',
+'cur'                 => 'actu',
+'next'                => 'seg',
+'last'                => 'darr',
+'orig'                => 'orig',
+'page_first'          => 'prim',
+'page_last'           => 'darr',
+'histlegend'          => 'Legenda : (actu) = diferéncia amb la version actuala ,
+(darr) = diferéncia amb la version precedenta, M = modificacion menora',
+'deletedrev'          => '[suprimit]',
+'histfirst'           => 'Primièras contribucions',
+'histlast'            => 'Darrièras contribucions',
+'historysize'         => '($1 octets)',
+'historyempty'        => '(void)',
+
+# Revision feed
+'history-feed-title'          => 'Istoric de las versions',
+'history-feed-description'    => 'Istoric per aquesta pagina sul wiki',
+'history-feed-item-nocomment' => '$1 lo $2', # user at time
+'history-feed-empty'          => 'La pagina demandada existís pas. Benlèu es estada suprimida del wiki o renomenada. Podètz ensajar de [[Special:Search|recercar dins lo wiki]] de las paginas pertinentas recentas.',
+
+# Revision deletion
+'rev-deleted-comment'         => '(Comentari suprimit)',
+'rev-deleted-user'            => '(nom d’utilizaire suprimit)',
+'rev-deleted-text-permission' => '<div class="mw-warning plainlinks"> Aquesta version de la pagina es estada levada de las archius publicas. Pòt i aver de detalhs dins lo [{{fullurl:Special:Log/delete|page={{PAGENAMEE}}}} jornal de las supressions]. </div>',
+'rev-deleted-text-view'       => '<div class="mw-warning plainlinks"> Aquesta version de la pagina es estada levada de las archius publicas. En tant qu’administrator d\'aqueste sit, podètz la visualizar ; pòt i aver de detahls dins lo [{{fullurl:Special:Log/delete|page={{PAGENAMEE}}}} jornal de las supressions]. </div>',
+'rev-delundel'                => 'afichar/amagar',
+'revisiondelete'              => 'Suprimir/Restablir de versions',
+'revdelete-nooldid-title'     => 'Pas de cibla per la revision',
+'revdelete-nooldid-text'      => 'Avètz pas precisat la o las revision(s) cibla(s) per utilizar aquesta foncion.',
+'revdelete-selected'          => 'Version seleccionada de [[:$1]] :',
+'logdelete-selected'          => "{{PLURAL:$2|Eveniment de jornal seleccionat|Eveniments de jornal seleccionats}} per '''$1''' :",
+'revdelete-text'              => "Las versions suprimidas apareisseràn encara dins l’istoric de l’article, mas lor contengut textual serà inaccessible al public. 
+
+D’autres administrators sus aqueste wiki poiràn totjorn accedir al contengut amagat e lo restablir tornarmai a travèrs d'aquesta meteissa interfàcia, a mens qu’una restriccion suplementària siá mesa en plaça pels operators del sit.",
+'revdelete-legend'            => 'Metre en plaça de restriccions de version :',
+'revdelete-hide-text'         => 'Amagar lo tèxt de la version',
+'revdelete-hide-name'         => 'Amagar l’accion e la cibla',
+'revdelete-hide-comment'      => 'Amagar lo comentari de modificacion',
+'revdelete-hide-user'         => 'Amagar lo pseudonim o l’adreça IP del contributor.',
+'revdelete-hide-restricted'   => 'Aplicar aquestas restriccions als administrators e mai als autres utilizaires',
+'revdelete-suppress'          => 'Suprimir las donadas dels administrators e dels autres',
+'revdelete-hide-image'        => 'Amagar lo contengut del fichièr',
+'revdelete-unsuppress'        => 'Levar las restriccions sus las versions restablidas',
+'revdelete-log'               => 'Comentari pel jornal :',
+'revdelete-submit'            => 'La visibilitat de la version es estada modificada per [[$1]]',
+'revdelete-logentry'          => 'La visibilitat de la version es estada modificada per [[$1]]',
+'logdelete-logentry'          => 'La visibilitat de l’eveniment es estada modificada per [[$1]]',
+'revdelete-logaction'         => '$1 {{plural:$1|version cambiada|versions cambiadas}} en mòde $2',
+'logdelete-logaction'         => '$1 {{plural:$1|eveniment de [[$3]] cambiat|eveniments de [[$3]] cambiats}} en mòde $2',
+'revdelete-success'           => 'Visibilitat de las versions cambiadas amb succès.',
+'logdelete-success'           => 'Visibilitat dels eveniments cambiada amb succès.',
+
+# Oversight log
+'oversightlog'    => 'Jornal oversight',
+'overlogpagetext' => 'la lista çai jos mòstra las supressions e blocatges recents que lo contengut es amagat quitament pels administrators. Consultatz la [[Special:Ipblocklist|lista dels comptes blocats]] per la lista dels blocatges en cors.',
+
+# Diffs
+'difference'                => '(Diferéncias entre las versions)',
+'loadingrev'                => 'cargament de la version anciana per comparason',
+'lineno'                    => 'Linha $1:',
+'editcurrent'               => "Modificar la version actuala d'aquesta pagina",
+'selectnewerversionfordiff' => 'Causir una version mai recenta',
+'selectolderversionfordiff' => 'Causir una version mai anciana',
+'compareselectedversions'   => 'Comparar las versions seleccionadas',
+'editundo'                  => 'desfar',
+'diff-multi'                => '({{plural:$1|Una revision intermediària amagada|$1 revisions intermediàrias amagadas}})',
+
+# Search results
+'searchresults'         => 'Resultat de la recèrca',
+'searchresulttext'      => "Per mai d'informacions sus la recèrca dins {{SITENAME}}, vejatz [[Projècte:Recèrca|Cercar dins {{SITENAME}}]].",
+'searchsubtitle'        => 'Per la requèsta "[[:$1]]"',
+'searchsubtitleinvalid' => 'Per la requèsta "$1"',
+'badquery'              => 'Requèsta mal formulada',
+'badquerytext'          => 'Avèm pas pogut tractar vòstra requèsta.
+Avètz probablament recercat un mot d\'una longor inferiora
+a tres letras, çò qu\'es pas encara possible. Tanben avètz
+pogut far una error de sintaxi, coma "peis e
+e escatas".
+Ensajatz una autra requèsta.',
+'matchtotals'           => 'La requèsta "$1" correspond a $2 títol(s)
+d\'article e al tèxt de $3 article(s).',
+'noexactmatch'          => 'Cap de pagina amb lo títol "$1" existís pas, ensajatz amb la recèrca complèta. Si que non, podètz [[:$1|crear aquesta pagina]]',
+'titlematches'          => 'Correspondéncias dins los títols',
+'notitlematches'        => "Cap de títol d'article conten pas lo(s) mot(s) demandat(s)",
+'textmatches'           => 'Correspondéncias dins los tèxtes',
+'notextmatches'         => "Cap de tèxt d'article conten pas lo(s) mot(s) demandat(s)",
+'prevn'                 => '$1 precedents',
+'nextn'                 => '$1 seguents',
+'viewprevnext'          => 'Veire ($1) ($2) ($3).',
+'showingresults'        => 'Afichatge de <b>$1</b> resultats a partir del #<b>$2</b>.',
+'showingresultsnum'     => 'Afichatge de <b>$3</b> resultats a partir del #<b>$2</b>.',
+'nonefound'             => '<strong>Nòta</strong>: l\'abséncia de resultat es sovent deguda a l\'emplec de tèrmes de recèrca tròp corrents, coma "a" o "de",
+que son pas indexats, o a l\'emplec de mantun tèrme de recèrca (solas las paginas
+contenent totes los tèrmes apareisson dins los resultats).',
+'powersearch'           => 'Recèrca',
+'powersearchtext'       => 'Recercar dins los espacis :<br />
+$1<br />
+$2 Enclure las paginas de redireccions   Recercar $3 $9',
+'searchdisabled'        => 'La recèrca sus {{SITENAME}} es desactivada. En esperant la reactivacion, podètz efectuar una recèrca via Google. 
+Atencion, lor indexacion de contengut {{SITENAME}} benlèu es pas a jorn.',
+'blanknamespace'        => '(Principal)',
+
+# Preferences page
+'preferences'              => 'Preferéncias',
+'mypreferences'            => 'Mas preferéncias',
+'prefsnologin'             => 'Non connectat(da)',
+'prefsnologintext'         => "Devètz èsser [[Special:Userlogin|connectat]]
+per modificar vòstras preferéncias d'utilizaire.",
+'prefsreset'               => 'Las preferéncias son estadas restablidas a partir de la version enregistrada.',
+'qbsettings'               => "Personalizacion de la barra d'espleches",
+'qbsettings-none'          => 'Cap',
+'qbsettings-fixedleft'     => 'Esquèrra',
+'qbsettings-fixedright'    => 'Drecha',
+'qbsettings-floatingleft'  => 'Flotejant a esquèrra',
+'qbsettings-floatingright' => 'Flotanta a drecha',
+'changepassword'           => 'Modificacion del senhal',
+'skin'                     => 'Aparéncia',
+'math'                     => 'Rendut de las matas',
+'dateformat'               => 'Format de data',
+'datedefault'              => 'Cap de preferéncia',
+'datetime'                 => 'Data e ora',
+'math_failure'             => 'Error matas',
+'math_unknown_error'       => 'error indeterminada',
+'math_unknown_function'    => 'foncion desconeguda',
+'math_lexing_error'        => 'error lexicala',
+'math_syntax_error'        => 'error de sintaxi',
+'math_image_error'         => 'La conversion en PNG a pas capitat ; verificatz l’installacion de Latex, dvips, gs e convert',
+'math_bad_tmpdir'          => 'Impossible de crear o d’escriure dins lo repertòri math temporari',
+'math_bad_output'          => 'Impossible de crear o d’escriure dins lo repertòri math de sortida',
+'math_notexvc'             => 'L’executable « texvc » es introbable. Legissètz math/README per lo configurar.',
+'prefs-personal'           => 'Informacions personalas',
+'prefs-rc'                 => 'Darrièrs cambiaments',
+'prefs-watchlist'          => 'Lista de seguit',
+'prefs-watchlist-days'     => 'Nombre de jorns de mostrar dins la lista de seguit :',
+'prefs-watchlist-edits'    => "Nombre de modificacions d'afichar dins la lista de seguit espandida :",
+'prefs-misc'               => 'Preferéncias divèrsas',
+'saveprefs'                => 'Enregistrar las preferéncias',
+'resetprefs'               => 'Restablir las preferéncias',
+'oldpassword'              => 'Senhal ancian',
+'newpassword'              => 'Senhal novèl',
+'retypenew'                => 'Confirmar lo senhal novèl',
+'textboxsize'              => "Talha de la fenèstra d'edicion",
+'rows'                     => 'Rengadas',
+'columns'                  => 'Colomnas',
+'searchresultshead'        => 'Afichatge dels resultats de recèrca',
+'resultsperpage'           => 'Nombre de responsas per pagina',
+'contextlines'             => 'Nombre de linhas per responsa',
+'contextchars'             => 'Nombre de caractèrs de contèxt per linha',
+'stubthreshold'            => 'Talha minimala dels articles brèus',
+'recentchangescount'       => 'Nombre de títols dins los darrièrs cambiaments',
+'savedprefs'               => 'Las preferéncias son estadas salvagardadas.',
+'timezonelegend'           => 'Fus orari',
+'timezonetext'             => "Se precisatz pas de decalatge orari, es l'ora d'Euròpa de l'oèst que serà utilizada.",
+'localtime'                => 'Ora locala',
+'timezoneoffset'           => 'Decalatge orari',
+'servertime'               => 'Ora del serveire',
+'guesstimezone'            => 'Utilizar la valor del navegaire',
+'allowemail'               => 'Autorizar lo mandadís de corrièr electronic venent d’autres utilizaires',
+'defaultns'                => 'Per defaut, recercar dins aquestes espacis :',
+'default'                  => 'defaut',
+'files'                    => 'Fichièrs',
+
+# User rights
+'userrights-lookup-user'     => "Gestion dels dreches d'utilizaire",
+'userrights-user-editname'   => 'Entrar un nom d’utilizaire :',
+'editusergroup'              => "Modificacion dels gropes d'utilizaires",
+'userrights-editusergroup'   => 'Modificar los gropes de l’utilizaire',
+'saveusergroups'             => "Salvagardar los gropes d'utilizaire",
+'userrights-groupsmember'    => 'Membre de:',
+'userrights-groupsavailable' => 'Gropes disponibles:',
+'userrights-groupshelp'      => "Causissètz las permissions que volètz levar o ajustar a l'utilizaire.
+Los gropes pas seleccionats seràn pas modificats. Podètz deseleccionar un grop amb CTRL + Clic esquèrra.",
+
+# Groups
+'group'            => 'Grop:',
+'group-bot'        => 'Bòts',
+'group-sysop'      => 'Administrators',
+'group-bureaucrat' => 'Burocratas',
+'group-all'        => '(totes)',
+
+'group-bot-member'        => 'Bòt',
+'group-sysop-member'      => 'Administrator',
+'group-bureaucrat-member' => 'Burocrata',
+
+'grouppage-bot'        => '{{ns:project}}:Bòts',
+'grouppage-bureaucrat' => '{{ns:project}}:Burocratas',
+
+# User rights log
+'rightslog'      => "Istoric de las modificacions d'estatut",
+'rightslogtext'  => "Aquò es un jornal de las modificacions d'estatut d’utilizaire.",
+'rightslogentry' => 'a modificat los dreches de l’utilizaire « $1 » de $2 a $3',
+'rightsnone'     => '(cap)',
+
+# Recent changes
+'nchanges'                          => '$1 {{PLURAL:$1|cambiament|cambiaments}}',
+'recentchanges'                     => 'Darrièrs cambiaments',
+'recentchangestext'                 => 'Vaquí sus aquesta pagina, los darrièrs cambiaments de {{SITENAME}}.',
+'recentchanges-feed-description'    => "Seguissètz los darrièrs cambiaments d'aqueste wiki dins un flus.",
+'rcnote'                            => "Vaquí <strong>{{PLURAL:$1|lo cambiament|los '''$1''' cambiaments}}</strong> efectuats al cors <strong>{{PLURAL:$2|del darrièr jorn|dels '''$2''' darrièrs jorns}}</strong>.",
+'rcnotefrom'                        => 'Vaquí los cambiamtns efectuats dempuèi lo <strong>$2</strong> (<b>$1</b> al maximom).',
+'rclistfrom'                        => 'Afichar las modificacions novèlas dempuèi lo $1.',
+'rcshowhideminor'                   => '$1 modificacions menoras',
+'rcshowhidebots'                    => '$1 bòts',
+'rcshowhideliu'                     => '$1 utilizaires enregistrats',
+'rcshowhideanons'                   => '$1 utilizaires anonims',
+'rcshowhidepatr'                    => '$1 edicions susvelhadas',
+'rcshowhidemine'                    => '$1 mas edicions',
+'rclinks'                           => 'Afichar los $1 darrièrs cambiaments efectuats al cors dels $2 darrièrs jorns; $3 cambiaments menors.',
+'diff'                              => 'dif',
+'hist'                              => 'ist',
+'hide'                              => 'amagar',
+'show'                              => 'mostrar',
+'minoreditletter'                   => 'M',
+'newpageletter'                     => 'N',
+'number_of_watching_users_pageview' => '[$1 utilizaire(s) seguent(s)]',
+'rc_categories'                     => 'Limit de las categorias (separacion amb « | »)',
+'rc_categories_any'                 => 'Totas',
+
+# Recent changes linked
+'recentchangeslinked'          => 'Seguit dels ligams',
+'recentchangeslinked-noresult' => 'Cap de cambiament sus las paginas ligadas pendent lo periòde causit.',
+
+# Upload
+'upload'                      => 'Copiar sul serveire',
+'uploadbtn'                   => 'Copiar un fichièr',
+'reupload'                    => 'Copiar tornarmai',
+'reuploaddesc'                => 'Retorn al formulari.',
+'uploadnologin'               => 'Non connectat(ada)',
+'uploadnologintext'           => 'Devètz èsser [[Special:Userlogin|connectat(ada)]]
+per copiar de fichièrs sul serveire.',
+'upload_directory_read_only'  => 'Lo serveire Web pòt escriure dins lo dorsièr cibla ($1).',
+'uploaderror'                 => 'Error',
+'uploadtext'                  => "Utilizatz lo formulari çai jos per copiar d'imatges novèls sul serveire. Per veire los imatges ja plaçats sul serveire o per efectuar una recèrca demèst eles, anatz a [[Special:Imagelist|la lista dels imatges]]. Los uploads e las supressions son listats dins lo [[Special:Log/upload|jornal dels uploads]].
+
+Per inclure un imatge dins una pagina, utilizatz un dels modèls seguents:
+'''<nowiki>[[</nowiki>{{ns:image}}<nowiki>:File.jpg]]</nowiki>''',
+'''<nowiki>[[</nowiki>{{ns:image}}<nowiki>:File.png|alt text]]</nowiki>''' o
+'''<nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki>''' per un ligam dirèct vèrs lo fichièr.",
+'uploadlog'                   => 'Jornals dels telecargaments (uploads)',
+'uploadlogpage'               => "Log_d'upload",
+'uploadlogpagetext'           => "Vaquí la lista dels darrièrs fichièrs copiats sul serveire.
+L'ora indicada es la del serveire (UTC).
+<ul>
+</ul>",
+'filename'                    => 'Nom',
+'filedesc'                    => 'Descripcion',
+'fileuploadsummary'           => 'Resumit:',
+'filestatus'                  => 'Estatut del copyright',
+'filesource'                  => 'Font',
+'uploadedfiles'               => 'Fichièrs copiats',
+'ignorewarning'               => 'Ignorar l’avertiment e salvagardar lo fichièr.',
+'ignorewarnings'              => "Ignorar los avertiments a l'ocasion de l’impòrt",
+'minlength'                   => 'Los noms dels imatges devon comportar al mens tres letras.',
+'illegalfilename'             => 'Lo nom de fichièr « $1 » conten de caractèrs interdiches dins los títols de paginas. Mercé de lo renomenar e de lo copiar tornarmai.',
+'badfilename'                 => 'Imatge es estat torni nom "$1".',
+'filetype-badmime'            => 'Los fichièrs del tipe MIME « $1 » pòdon pas èsser importats.',
+'filetype-badtype'            => "'''« .$1 »''' es un tipe de fichièr non desirat 
+: Lista dels tipes de fichièrs autorizats : $2",
+'filetype-missing'            => "Lo fichièr a pas cap d'extension (coma « .jpg » per exemple).",
+'large-file'                  => 'Los fichièrs importats deurián pas èsser mai gros que $1 ; aqueste fichièr fa $2.',
+'largefileserver'             => "La talha d'aqueste fichièr es superiora al maximom autorizat.",
+'emptyfile'                   => 'Lo fichièr que volètz importar sembla void. Aquò pòt èsser degut a una error dins lo nom del fichièr. Verificatz que desiratz vertadièrament copiar aqueste fichièr.',
+'fileexists'                  => 'Un fichièr amb aqueste nom existís ja. Mercé de verificar $1. Sètz segur de voler modificar aqueste fichièr ?',
+'fileexists-extension'        => "Un fichièr amb un nom similar existís ja :<br /> Nom del fichièr d'importar : <strong><tt>$1</tt></strong><br /> Nom del fichièr existent : <strong><tt>$2</tt></strong><br /> la sola diferéncia es la cassa (majusculas / minusculas) de l’extension. Verificatz que lo fichièr es diferent e cambiatz son nom.",
+'fileexists-thumb'            => "'''<center>Imatge existent</center>'''",
+'fileexists-thumbnail-yes'    => 'Lo fichièr sembla èsser un imatge en talha reducha <i>(thumbnail)</i>. Verificatz lo fichièr <strong><tt>$1</tt></strong>.<br /> Se lo fichièr verificat es lo meteis imatge (dins una resolucion melhora), es pas de besonh d’importar una version reducha.',
+'file-thumbnail-no'           => 'Lo nom del fichièr comença per <strong><tt>$1</tt></strong>. Es possible que s’agisca d’una version reducha <i>(thumbnail)</i>. Se dispausatz del fichièr en resolucion nauta, importatz-lo, si que non cambiatz lo nom del fichièr.',
+'fileexists-forbidden'        => 'Un fichièr amb aqueste nom existís ja ; mercé de tornar en arrièr e de copiar lo fichièr jos un nom novèl. [[Image:$1|thumb|center|$1]]',
+'fileexists-shared-forbidden' => 'Un fichièr portant lo meteis nom existís ja dins la banca de donadas comuna ; tornatz en arrièr e mandatz-lo tornarmai jos un autre nom. [[Image:$1|thumb|center|$1]]',
+'successfulupload'            => 'Còpia capitada',
+'fileuploaded'                => 'Lo fichièr "$1" es estat copiat sul serveire.
+Seguissètz aqueste ligam: ($2) per accedir a la pagina de descripcion, e donar d\'informacions sul fichièr, per exemple son origina, sa data de creacion, son autor, o tot autra entre-senha en vòstra possession.',
+'uploadwarning'               => 'Atencion !',
+'savefile'                    => 'Salvagardar lo fichièr',
+'uploadedimage'               => ' "[[$1]]" copiat sul serveire',
+'uploaddisabled'              => 'O planhem, lo mandadís de fichièr es desactivat.',
+'uploaddisabledtext'          => 'La còpia de fichièrs es desactivada sus aqueste wiki.',
+'uploadscripted'              => "Aqueste fichièr conten de còde HTML o un escript que poiriá èsser interpretat d'un biais incorrècte per un navegaire Internet.",
+'uploadcorrupt'               => 'Aqueste fichièr es corromput, a una talha nulla o possedís una extension invalida. Verificatz lo fichièr.',
+'uploadvirus'                 => 'Aqueste fichièr conten un virús ! Per mai de detalhs, consultatz : $1',
+'sourcefilename'              => 'Nom del fichièr de mandar',
+'destfilename'                => 'Nom jolqual lo fichièr serà enregistrat',
+'watchthisupload'             => 'Seguir aqueste fichièr',
+'filewasdeleted'              => 'Un fichièr amb aqueste nom es estat copiat ja, puèi suprimit. Deuriatz verificar lo $1 abans de procedir a una còpia novèla.',
+
+'upload-proto-error'      => 'Protocòl incorrècte',
+'upload-proto-error-text' => "L’impòrt requerís d'URLs començant per <code>http://</code> o <code>ftp://</code>.",
+'upload-file-error'       => 'Error intèrna',
+'upload-file-error-text'  => 'Una error intèrna es subrevenguda en volent crear un fichièr temporari sul serveire. Contactatz un administrator de sistèma.',
+'upload-misc-error'       => 'Error d’impòrt desconeguda',
+'upload-misc-error-text'  => 'Una error desconeguda es subrevenguda pendent l’impòrt. Verificatz que l’URL es valida e accessibla, puèi ensajatz tornarmai. Se lo problèma persistís, contactatz un administrator del sistèma.',
+
+# Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
+'upload-curl-error6'       => 'Pòt pas aténher l’URL',
+'upload-curl-error6-text'  => 'L’URL fornida pòt pas èsser atenhuda. Verificatz que l’URL es corrècta e que lo sit es en linha.',
+'upload-curl-error28'      => 'Depassament de la sosta al moment de l’impòrt',
+'upload-curl-error28-text' => "Lo sit a mis tròp de temps per respondre. Verificatz que lo sit es en linha, esperatz un pauc e ensajatz tornarmai. Podètz tanben ensajar a una ora d'afluéncia mendra.",
+
+'license'            => 'Licéncia',
+'nolicense'          => 'Cap de licéncia seleccionada',
+'upload_source_url'  => ' (una URL valida e accessibla publicament)',
+'upload_source_file' => ' (un fichièr sus vòstre ordinator)',
+
+# Image list
+'imagelist'                 => 'Lista dels imatges',
+'imagelisttext'             => 'Vaquí una lista de $1 imatges classats $2.',
+'imagelistforuser'          => 'Aficha unicament los imatges importats per $1.',
+'getimagelist'              => 'Recuperacion de la lista dels imatges',
+'ilsubmit'                  => 'Cercar',
+'showlast'                  => 'Afichar los $1 darrièrs imatges classats $2.',
+'byname'                    => 'per nom',
+'bydate'                    => 'per data',
+'bysize'                    => 'per talha',
+'imgdelete'                 => 'supr',
+'imgdesc'                   => 'descr',
+'imgfile'                   => 'fichièr',
+'imglegend'                 => "Legenda: (descr) = afichar/modificar la descripcion de l'imatge.",
+'imghistory'                => "Istoric de l'imatge",
+'revertimg'                 => 'restab',
+'deleteimg'                 => 'supr',
+'deleteimgcompletely'       => 'supr',
+'imghistlegend'             => "Legenda: (actu) = aquò es l'imatge actuala, (supr) = suprimir
+aquesta version anciana, (restab) = restablir aquesta version anciana.
+<br /><i>Clicatz sus la data per veire l'imatge copiat a aquesta data</i>.",
+'imagelinks'                => "Ligams vèrs l'imatge",
+'linkstoimage'              => 'Las paginas çai jos compòrtan un ligam vèrs aqueste imatge:',
+'nolinkstoimage'            => 'Cap de pagina compòrta pas de ligam vèrs aqueste imatge.',
+'sharedupload'              => 'Aqueste fichièr es pertejat e pòt èsser utilizat per d’autres projèctes.',
+'shareduploadwiki'          => 'Reportatz-vos a la $1 per mai d’informacion.',
+'shareduploadwiki-linktext' => 'Pagina de descripcion del fichièr',
+'noimage'                   => 'Cap de fichièr possedissent aqueste nom existís pas, podètz $1.',
+'noimage-linktext'          => "n'importar un",
+'uploadnewversion-linktext' => "Copiar una version novèla d'aqueste fichièr",
+'imagelist_date'            => 'Data',
+'imagelist_name'            => 'Nom',
+'imagelist_user'            => 'Utilizaire',
+'imagelist_size'            => 'Talha (en octets)',
+'imagelist_description'     => 'Descripcion',
+'imagelist_search_for'      => 'Recèrca per l’imatge nomenat :',
+
+# MIME search
+'mimesearch' => 'Recèrca per tipe MIME',
+'mimetype'   => 'Tipe MIME:',
+'download'   => 'telecargament',
+
+# Unwatched pages
+'unwatchedpages' => 'Paginas pas seguidas',
+
+# List redirects
+'listredirects' => 'Lista de las redireccions',
+
+# Unused templates
+'unusedtemplates'     => 'Modèls inutilizats',
+'unusedtemplatestext' => 'Aquesta pagina lista totas las paginas de l’espaci de noms « Modèl » que son incluses dins cap autra pagina. Doblidetz pas de verificar se i a pas d’autre ligam vèrs los modèls abans de los suprimir.',
+'unusedtemplateswlh'  => 'autres ligams',
+
+# Random redirect
+'randomredirect' => "Una pagina de redireccion a l'azard",
+
+# Statistics
+'statistics'             => 'Estatisticas',
+'sitestats'              => 'Estatisticas del sit',
+'userstats'              => "Estatisticas d'utilizaire",
+'sitestatstext'          => "La banca de donadas conten actualament <b>{{PLURAL:\$1|'''1''' pagina|'''\$1''' paginas}}</b>.
+
+Aquesta chifra inclutz las paginas \"discussion\", las paginas relativas a {{SITENAME}}, las paginas minimalas (\"taps\"),  las paginas de redireccion, e mai d'autras paginas que pòdon sens dobte pas èsser consideradas coma d'articles.
+Se s'exclutz aquestes paginas,  <b>{{PLURAL:\$2|demòra '''1''' pagina qu'es|demòran '''\$2''' paginas que son}}</b> probablament d'articles vertadièrs.<p>
+'''\$8''' {{PLURAL:\$8|fichièr|fichièrs}} son estats telecargat.
+{{PLURAL:\$3|'''1''' pagina es estada consultada|'''\$3''' paginas son estadas consultadas}} e {{PLURAL:\$4| '''1''' pagina modificada|'''\$4''' paginas modificadas}} dempuèi la mesa a jorn del logicial (31 d'octobre de 2002).
+Aquò representa una mejana de <b>\$5</b> modificacions per pagina e de <b>\$6</b> consultacions per una modificacion.",
+'userstatstext'          => "I a {{PLURAL:$1|'''1''' utilizaire enregistrat|'''$1''' utilizaires enregistrats}}.
+Demest eles, <b>$2</b> (o '''$4%''') {{PLURAL:$2|a|an}} l'estatut d'administrator (vejatz $3).",
+'statistics-mostpopular' => 'Paginas mai consultadas',
+
+'disambiguations'      => "Paginas d'omonimia",
+'disambiguationspage'  => "{{ns:project}}:Ligams_a_las_paginas_d'omonimia",
+'disambiguations-text' => 'Las paginas seguentas ligan vèrs una <i>pagina d’omonimia</i>. Deurián puslèu ligar vèrs una pagina pertinenta.<br /> Una pagina es tractada coma una pagina d’omonimia se es ligada dempuèi $1.<br /> Los ligams dempuèi d’autres espacis de noms <i>son pas</i> listats aicí.',
+
+'doubleredirects'     => 'Redireccion dobla',
+'doubleredirectstext' => '<b>Atencion:</b> Aquesta lista pòt conténer de "positius falses". Dins aqueste cas, es probablament la pagina del primièr #REDIRECT conten tanben de tèxt.<br />Cada linha conten los ligams e la 1èra e 2nda pagina de redireccion, e mai la primièra linha d\'aquesta darrièra, que balha normalament la "vertadièra" destinacion. Lo primièr #REDIRECT deurià ligar vèrs aquesta destinacion.',
+
+'brokenredirects'        => 'Redireccions copadas',
+'brokenredirectstext'    => "Aquestas redireccions mènan a una pagina qu'existís pas.",
+'brokenredirects-edit'   => '(modificar)',
+'brokenredirects-delete' => '(suprimir)',
+
+'withoutinterwiki'        => 'Paginas sens ligams interlengas',
+'withoutinterwiki-header' => "Aquesta pagina a pas de ligams vèrs las versions dins d'autras lengas:",
+
+# Miscellaneous special pages
+'nbytes'                  => '$1 octets',
+'ncategories'             => '$1 {{PLURAL:$1|categoria|categorias}}',
+'nlinks'                  => '$1 referéncias',
+'nmembers'                => '$1 {{PLURAL:$1|membre|membres}}',
+'nrevisions'              => '$1 {{PLURAL:$1|revision|revisions}}',
+'nviews'                  => '$1 consultacions',
+'specialpage-empty'       => 'Aquesta pagina es voida.',
+'lonelypages'             => 'Paginas orfanèlas',
+'lonelypagestext'         => 'Las paginas seguentas son pas ligadas a partir d’autras paginas del wiki.',
+'uncategorizedpages'      => 'Paginas sens categorias',
+'uncategorizedcategories' => 'Categorias sens categorias',
+'uncategorizedimages'     => 'Imatges sens categorias',
+'unusedcategories'        => 'Categorias inutilizadas',
+'unusedimages'            => 'Imatges orfanèls',
+'popularpages'            => 'Paginas mai consultadas',
+'wantedcategories'        => 'Categorias mai demandadas',
+'wantedpages'             => 'Paginas mai demandadas',
+'mostlinked'              => 'Paginas mai ligadas',
+'mostlinkedcategories'    => 'Categorias mai utilizadas',
+'mostcategories'          => 'Articles utilizant mai de categorias',
+'mostimages'              => 'Imatges mai utilizats',
+'mostrevisions'           => 'Articles mai modificats',
+'allpages'                => 'Totas las paginas',
+'prefixindex'             => 'Totas las paginas per primièras letras',
+'randompage'              => "Una pagina a l'azard",
+'shortpages'              => 'Articles corts',
+'longpages'               => 'Articles longs',
+'deadendpages'            => "Paginas sul camin d'enlòc",
+'deadendpagestext'        => 'Las paginas seguentas contenon pas cap de ligam vèrs d’autras paginas del wiki.',
+'protectedpages'          => 'Paginas protegidas',
+'protectedpagestext'      => 'Las paginas seguentas son protegidas contra las modificacions e/o lo renomenatge :',
+'protectedpagesempty'     => 'Cap de pagina es pas protegida actualament.',
+'listusers'               => 'Lista dels participants',
+'specialpages'            => 'Paginas especialas',
+'spheading'               => 'Paginas especialas',
+'restrictedpheading'      => 'Paginas especialas reservadas',
+'rclsub'                  => '(de las paginas ligadas a "$1")',
+'newpages'                => 'Paginas novèlas',
+'newpages-username'       => 'Utilizaire :',
+'ancientpages'            => 'Articles mai ancians',
+'intl'                    => 'Ligams interlengas',
+'move'                    => 'Renomenar',
+'movethispage'            => 'Desplaçar la pagina',
+'unusedimagestext'        => "<p>Doblidetz pas que d'autres sits non occitanofònes, pòdon conténer un ligam dirèct vèrs aqueste imatge, e qu'aqueste pòt èsser plaçat dins aquesta lista alara qu'es en realitat utilizada.",
+'unusedcategoriestext'    => "Las categorias seguentas existisson mas cap d'article o de categoria los utilizan pas.",
+
+# Book sources
+'booksources'               => 'Obratges de referéncia',
+'booksources-search-legend' => "Recèrca demest d'obratges de referéncia",
+'booksources-isbn'          => 'ISBN:',
+'booksources-go'            => 'Validar',
+'booksources-text'          => "Vaquí una lista de ligams vèrs d’autres sites que vendon de libres nous e d’occasion e sulsquals trobarètz benlèu d'informacions suls obratges que cercatz. {{SITENAME}} es pas ligada a cap d'aquestas societats, a pas l’intencion de ne far la promocion.",
+
+'categoriespagetext' => 'Las categorias seguentas existisson dins lo wiki.',
+'data'               => 'Donadas',
+'userrights'         => "Gestion dels dreches d'utilizaire",
+'groups'             => "Gropes d'utilizaires",
+'alphaindexline'     => '$1 a $2',
+
+# Special:Log
+'specialloguserlabel'  => 'Utilizaire:',
+'speciallogtitlelabel' => 'Títol:',
+'log'                  => 'Jornals',
+'log-search-legend'    => "Recèrca d'istorics",
+'log-search-submit'    => 'Anar',
+'alllogstext'          => 'Afichatge combinat dels jornals de còpia, supression, proteccion, blocatge, e administrator. Podètz restrénher la vista en seleccionant un tipe de jornal, un nom d’utilizaire o la pagina concernida.',
+'logempty'             => 'I a pas res dins l’istoric per aquesta pagina.',
+'log-title-wildcard'   => 'Recercar de títols que començan per aqueste tèxt',
+
+# Special:Allpages
+'nextpage'          => 'Pagina seguenta ($1)',
+'prevpage'          => 'Pagina precedenta ($1)',
+'allpagesfrom'      => 'Afichar las paginas a partir de :',
+'allarticles'       => 'Totes los articles',
+'allinnamespace'    => 'Totas las paginas (espaci de noms $1)',
+'allnotinnamespace' => 'Totas las paginas (que son pas dins l’espaci de noms $1)',
+'allpagesprev'      => 'Precedent',
+'allpagesnext'      => 'Seguent',
+'allpagessubmit'    => 'Validar',
+'allpagesprefix'    => 'Afichar las paginas començant pel prefix :',
+'allpagesbadtitle'  => 'Lo títol rensenhat per la pagina es incorrècte o possedís un prefix reservat. Conten segurament un o mantun caractèr especial que pòt pas èsser utilizats dins los títols.',
+
+# Special:Listusers
+'listusersfrom'      => 'Afichar los utilizaires a partir de :',
+'listusers-submit'   => 'Mostrar',
+'listusers-noresult' => "S'es pas trobat de noms d'utilizaires correspondents. Cercatz tanben amb de majusculas e minusculas.",
+
+# E-mail user
+'mailnologin'     => "Pas d'adreça",
+'mailnologintext' => 'Devètz èsser [[Special:Userlogin|connectat(ada)]]
+e aver indicat una adreça electronica valida dins vòstras [[Special:Preferences|preferéncias]]
+per poder mandar un messatge a un autre utilizaire.',
+'emailuser'       => 'Mandar un messatge a aqueste utilizaire',
+'emailpage'       => 'Mandar un corrièr electronic a l’utilizaire',
+'emailpagetext'   => 'Se aqueste utilizaire a indicat una adreça electronica valida dins sas preferéncias, lo formulari çai jos li mandarà un messatge.
+L\'adreça electronica qu\'avètz indicada dins vòstras preferéncias apareisserà dins lo camp "Expeditor" de vòstre messatge, per que lo destinatari pòsca vos respondre.',
+'usermailererror' => 'Error dins lo subjècte del corrièr electronic :',
+'defemailsubject' => 'Corrièr electronic mandat dempuèi {{SITENAME}}',
+'noemailtitle'    => "Pas d'adreça electronica",
+'noemailtext'     => "Aquesta utilizaire a pas especificat d'adreça electronica valida o a causit de recebre pas de corrièr electronic dels autres utilizaires.",
+'emailfrom'       => 'Expeditor',
+'emailto'         => 'Destinatari',
+'emailsubject'    => 'Objècte',
+'emailmessage'    => 'Messatge',
+'emailsend'       => 'Mandar',
+'emailccme'       => 'Me mandar per corrièr electronic una còpia de mon messatge.',
+'emailccsubject'  => 'Còpia de vòstre messatge a $1 : $2',
+'emailsent'       => 'Messatge mandat',
+'emailsenttext'   => 'Vòstre messatge es estat mandat.',
+
+# Watchlist
+'watchlist'            => 'Lista de seguit',
+'mywatchlist'            => 'Lista de seguit',
+'watchlistfor'         => "(per l’utilizaire '''$1''')",
+'nowatchlist'          => "Vòstra lista de seguit conten pas cap d'article.",
+'watchlistanontext'    => 'Per poder afichar o editar los elements de vòstra lista de seguit, devètz vos $1.',
+'watchlistcount'       => '<b>Avètz $1 paginas dins vòstra lista de seguit, en incluissent las paginas de discussion</b>',
+'clearwatchlist'       => 'Viodar la lista de seguit',
+'watchlistcleartext'   => 'Sètz segur que volètz levar totes aquestes elements ?',
+'watchlistclearbutton' => 'Viodar la lista de seguit',
+'watchlistcleardone'   => 'Vòstra lista de seguit es estada viodada. $1 articles son estats levats.',
+'watchnologin'         => 'Non connectat',
+'watchnologintext'     => 'Devètz èsser [[Special:Userlogin|connectat(ada)]]
+per modificar vòstra lista.',
+'addedwatch'           => 'Ajustat a la lista',
+'addedwatchtext'       => 'La pagina "$1" es estada ajustada a vòstra [[Special:Watchlist|lista de seguit]].
+Las modificacions venetas d\'aquesta pagina e de la pagina de discussion associada seràn repertoriadas aicí, e la pagina apareisserà <b>en gras</b> dins la [[Special:Recentchanges|lista dels darrièrs cambiaments]] per èsser localisada mai aisidament.
+
+Per suprimir aquesta pagina de vòstra lista de seguida, clicatz sus "Arrestar de seguir" dins lo quadre de navigacion.',
+'removedwatch'         => 'Suprimida de la lista de seguit',
+'removedwatchtext'     => 'La pagina "[[:$1]]" es estada suprimida de vòstra lista de seguit.',
+'watch'                => 'Seguir',
+'watchthispage'        => 'Seguir aquesta pagina',
+'unwatch'              => 'Arrestar de seguir',
+'unwatchthispage'      => 'Arrestar de seguir',
+'notanarticle'         => "Cap d'article",
+'watchnochange'        => 'Cap de las paginas que seguissètz son pas estadas modificadas pendent lo periòde afichat.',
+'watchdetails'         => 'Seguissètz {{PLURAL:$1|$1 pagina|$1 paginas}}, sens comptar las paginas de discussion.
+* [[Special:Watchlist/edit|Mostrar la lista de seguit complèta]]
+* [[Special:Watchlist/clear|Suprimit totas las paginas]]',
+'wlheader-enotif'      => '* La notificacion per corrièr electronic es activada.',
+'wlheader-showupdated' => '* Las paginas que son estadas modificadas dempuèi vòstra darrièra visita son mostradas en <b>gras</b>',
+'watchmethod-recent'   => 'verificacion dels darrièrs cambiaments de las paginas seguidas',
+'watchmethod-list'     => 'verificacion de las paginas seguidas per de modificacions recentas',
+'removechecked'        => 'Levar los articles seleccionats de la lista de seguit',
+'watchlistcontains'    => 'Vòstra lista de seguit conten $1 {{PLURAL:$1|pagina|paginas}}.',
+'watcheditlist'        => 'Aquò es vòstra lista de seguit per òrdre alfabetic. Seleccionatz las paginas que volètz levar de la lista e clicatz lo boton "levar de la lista de seguit" en bas de l\'ecran.',
+'removingchecked'      => 'Los articles seleccionats son levats de vòstra lista de seguit...',
+'couldntremove'        => "Impossible de levar l'article '$1'...",
+'iteminvalidname'      => "Problèma amb l'article '$1': lo nom es invalid...",
+'wlnote'               => 'Los darrièrs cambiaments dempuèi las <br>$2</b> darrièras oras se tròban çai jos.',
+'wlshowlast'           => 'Mostrar las darrièras $1 oras, los darrièrs $2 jorns, o $3.',
+'wlsaved'              => 'La lista de seguit es remesa a jorn pas qu’un còp per ora per aleugerir la carga sul serveire.',
+'watchlist-show-bots'  => 'Afichar las contribucions dels bòts',
+'watchlist-hide-bots'  => 'Amagar las contribucions dels bòts',
+'watchlist-show-own'   => 'Afichar mas modificacions',
+'watchlist-hide-own'   => 'Amagar mas modificacions',
+'watchlist-show-minor' => 'Afichar las modificacions menoras',
+'watchlist-hide-minor' => 'Amagar las modificacions menoras',
+'wldone'               => 'Acabat.',
+
+# Displayed when you click the "watch" button and it's in the process of watching
+'watching'   => 'Seguit...',
+'unwatching' => 'Fin del seguit...',
+
+'enotif_mailer'      => 'Sistèma d’expedicion de notificacion de {{SITENAME}}',
+'enotif_reset'       => 'Marcar totas las paginas coma visitadas',
+'enotif_newpagetext' => 'Aquò es una pagina novèla.',
+'changed'            => 'modificada',
+'created'            => 'creada',
+'enotif_subject'     => 'La pagina $PAGETITLE de {{SITENAME}} es estada $CHANGEDORCREATED per $PAGEEDITORemailto',
+'enotif_lastvisited' => 'Consultatz $1 per totes los cambiaments dempuèi vòstra darrièra visita.',
+'enotif_body'        => 'Car $WATCHINGUSERNAME,
+
+la pagina de {{SITENAME}} $PAGETITLE es estada $CHANGEDORCREATED lo $PAGEEDITDATE per $PAGEEDITOR, vejatz $PAGETITLE_URL per la version actuala.
+
+$NEWPAGE
+
+Resumit de l’editor : $PAGESUMMARY $PAGEMINOREDIT
+
+Contactatz l’editor :
+corrièr electronic : $PAGEEDITOR_EMAIL
+wiki : $PAGEEDITOR_WIKI
+
+I aurà pas de notificacions novèlas en cas d’autras modificacions a mens que visitetz aquesta pagina. Podètz tanben remetre a zèro lo notificator per totas las paginas de vòstra lista de seguit.
+
+             Vòstre {{SITENAME}} sistèma de notificacion
+
+--
+Per modificar los paramètres de vòstra lista de seguit, visitatz
+{{fullurl:Special:Watchlist/edit}}
+
+Retorn e assisténcia :
+{{fullurl:{{MediaWiki:helppage}}}}',
+
+# Delete/protect/revert
+'deletepage'                  => 'Suprimir una pagina',
+'confirm'                     => 'Confirmar',
+'excontent'                   => "contenent '$1'",
+'excontentauthor'             => 'lo contengut èra : « $1 » (e lo sol contributor èra « [[Special:Contributions/$2|$2]] »)',
+'exbeforeblank'               => "lo contengut abans escafament èra :'$1'",
+'exblank'                     => 'pagina voida',
+'confirmdelete'               => 'Confirmar la supression',
+'deletesub'                   => '(Supression de "$1")',
+'historywarning'              => 'Atencion: La pagina que sètz a mand de suprimir a un istoric:',
+'confirmdeletetext'           => "Sètz a mand de suprimir definitivament de la banca de donadas una pagina
+o un imatge, e mai totas sas versions anterioras.
+Confirmatz qu'es plan çò que volètz far, que ne comprenètz las consequéncias e que fasètz aquò en acòrdi amb las [[{{MediaWiki:policy-url}}]].",
+'actioncomplete'              => 'Supression efectuada',
+'deletedtext'                 => '"$1" es estat suprimit.
+Vejatz $2 per una lista de las supressions recentas.',
+'deletedarticle'              => 'escafament de "[[$1]]"',
+'dellogpage'                  => 'Traça dels escafaments',
+'dellogpagetext'              => "Vaquí la lista de las supressions recentas.
+L'ora indicada es la del serveire (UTC).
+<ul>
+</ul>",
+'deletionlog'                 => 'traça dels escafaments',
+'reverted'                    => 'Restabliment de la version precedenta',
+'deletecomment'               => 'Motiu de la supression',
+'imagereverted'               => 'La version precedenta es estada restablida.',
+'rollback'                    => 'revocar las modificacions',
+'rollback_short'              => 'Revocar',
+'rollbacklink'                => 'revocar',
+'rollbackfailed'              => 'La revocacion a pas capitat',
+'cantrollback'                => 'Impossible de revocar: darrièr autor es lo sol a aver modificat aqueste article',
+'alreadyrolled'               => "Impossible de revocar la darrièra modificacion de [[:$1]]
+per  [[User:$2|$2]] ([[User talk:$2|Discussion]]); qualqu'un d'autre a ja modificat o revocat l'article.
+
+La darrièra modificacion èra de [[User:$3|$3]] ([[User talk:$3|Discussion]]).",
+'editcomment'                 => 'Lo resumit de la modificacion èra: "<i>$1</i>".', # only shown if there is an edit comment
+'revertpage'                  => 'restitucion de la darrièra modificacion de [[Special:Contributions/$2|$2]] ([[User talk:$2|Discussion]]); retorn a la darrièra version de [[User:$1|$1]]',
+'sessionfailure'              => 'Vòstra session de connexion sembla aver de problèmas ;
+aquesta accion es estada anullada en prevencion d’un piratatge de session.
+Clicatz sus « Precedent » e recargatz la pagina d’ont venètz, puèi ensajatz tornarmai.',
+'protectlogpage'              => 'Istoric de las proteccions',
+'protectlogtext'              => 'Vejatz las [[Special:Protectedpages|directivas]] per mai d’informacion.',
+'protectedarticle'            => 'a protegit « [[$1]] »',
+'unprotectedarticle'          => 'a desprotegit « [[$1]] »',
+'protectsub'                  => '(Protegir « $1 »)',
+'confirmprotecttext'          => 'Volètz vertadièrament protegir aquesta pagina ?',
+'confirmprotect'              => 'Confirmar la proteccion',
+'protectmoveonly'             => 'Protegir unicament los desplaçaments',
+'protectcomment'              => 'Rason de la proteccion',
+'protectexpiry'               => 'Expiracion (expira pas per defaut)',
+'protect_expiry_invalid'      => 'Lo temps d’expiracion es invalid',
+'protect_expiry_old'          => 'Lo temps d’expiracion ja es passat.',
+'unprotectsub'                => '(Desprotegir « $1 »)',
+'confirmunprotecttext'        => 'Volètz vertadièrament desprotegir aquesta pagina ?',
+'confirmunprotect'            => 'Rason de la desproteccion',
+'unprotectcomment'            => 'Rason del desblocatge',
+'protect-unchain'             => 'Desblocar las permissions de renomenatge',
+'protect-text'                => 'Podètz consultar e modificar lo nivèl de proteccion de la pagina <strong>$1</strong>. Asseguratz-vos que seguissètz las règlas intèrnas.',
+'protect-cascadeon'           => "Aquesta pagina es actualament protegida perque es inclusa dins las paginas seguentas, que son estadas protegidas amb l’opcion « proteccion en cascada » activada. Podètz cambiar lo nivèl de proteccion d'aquesta pagina sens qu'aquò afècte la proteccion en cascada.",
+'protect-default'             => 'Pas de proteccion',
+'protect-level-autoconfirmed' => 'Semiproteccion',
+'protect-level-sysop'         => 'Administrators unicament',
+'protect-summary-cascade'     => 'proteccion en cascada',
+'protect-expiring'            => 'expira lo $1',
+'protect-cascade'             => 'Proteccion en cascada - Protegís totas las paginas inclusas dins aquesta.',
+'restriction-level'           => 'Nivèl de restriccion',
+'minimum-size'                => 'Talha minimom (octets)',
+
+# Restrictions (nouns)
+'restriction-edit' => 'Modificacion',
+'restriction-move' => 'Renomenatge',
+
+# Restriction levels
+'restriction-level-sysop'         => 'Proteccion complèta',
+'restriction-level-autoconfirmed' => 'Semiproteccion',
+'restriction-level-all'           => 'Totes',
+
+# Undelete
+'undelete'                 => 'Restablir la pagina escafada',
+'undeletepage'             => 'Veire e restablir la pagina escafada',
+'viewdeletedpage'          => 'Istoric de la pagina suprimida',
+'undeletepagetext'         => 'Aquestas paginas son estadas escafadas e se tròban dins la corbelha, son totjorn dins la banca de donada e pòdon èsser restablidas.
+La corbelha pòt èsser escafada periodicament.',
+'undeleteextrahelp'        => "Per restablir totas las versions d'aquesta pagina, daissatz vèrjas totas las casas de marcar, puèi clicatz sus '''''Procedir al restabliment'''''.<br />Per procedir a un restabliment selectiu, marcatz las casas correspondent a las versions que son de restablir, puèi clicatz sus '''''Procedir a la restabliment'''''.<br />En clicant sul boton '''''Reinicializar''''', la boita de resumit e las casas marcadas seràn remesas a zèro.",
+'undeleterevisions'        => '$1 revisions archivadas',
+'undeletehistory'          => "Se restablissètz la pagina, totas las revisions seràn restablidas dins l'istoric.
+Se una pagina novèla amb lo meteis nom es estada creada dempuèi la supression,
+las revisions restablidas apareisseràn dins l'istoric anterior e la version correnta serà pas automaticament remplaçada.",
+'undeletehistorynoadmin'   => "Aqueste article es estat suprimit. Lo motiu de la supression es indicat dins lo resumit çai jos, amb los detalhs dels utilizaires que l’an modificat abans sa supression. Lo contengut d'aquestas versions es pas accessible qu’als administrators.",
+'undelete-revision'        => 'Version suprimida de $1, lo $2 :',
+'undeleterevision-missing' => 'Version invalida o mancanta. Benlèu avètz un ligam marrit, o la version es estada restablida o suprimida de l’archiu.',
+'undeletebtn'              => 'Restablir !',
+'undeletereset'            => 'Reinicializar',
+'undeletecomment'          => 'Comentari:',
+'undeletedarticle'         => 'restaurat "[[$1]]"',
+'undeletedrevisions'       => '$1 version(s) restablida(s)',
+'undeletedrevisions-files' => '$1 versions e $2 fichièr(s) restablits',
+'undeletedfiles'           => '$1 {{PLURAL:$1|fichièr restablit|fichièrs restablits}}',
+'cannotundelete'           => 'Lo restabliment a pas capitat. Un autre utilizaire a probablament restablit la pagina abans.',
+'undeletedpage'            => "<big>'''La pagina $1 es estada restablida'''.</big> 
+
+Consultatz l’[[Special:Log/delete|istoric de las supressions]] per veire las paginas recentament suprimidas e restablidas.",
+'undelete-header'          => 'Consultatz l’[[Special:Log/delete|istoric de las supressions]] per veire las paginas recentament suprimidas.',
+'undelete-search-box'      => 'Cercar una pagina suprimida',
+'undelete-search-prefix'   => 'Mostrar las paginas començant per :',
+'undelete-search-submit'   => 'Cercar',
+'undelete-no-results'      => 'Cap de pagina correspondent a la recèrca es pas estada trobada dins las archius.',
+
+# Namespace form on various pages
+'namespace' => 'Espaci de nom :',
+'invert'    => 'Inversar la seleccion',
+
+# Contributions
+'contributions' => "Contribucions d'aqueste contributor",
+'mycontris'     => 'Mas contribucions',
+'contribsub2'    => 'Per $1 ($2)',
+'nocontribs'    => 'Cap de modificacion correspondenta a aquestes critèris es pas estada trobada.',
+'ucnote'        => 'Vaquí los <b>$1</b> darrièrs cambiaments efectuats per aqueste utilizaire al cors dels <b>$2</b> darrièrs jorns.',
+'uclinks'       => 'Afichar los $1 darrièrs cambiaments; afichar los $2 darrièrs jorns.',
+'uctop'         => ' (darrièra)',
+
+'sp-contributions-newest'      => 'Darrièras contribucions',
+'sp-contributions-oldest'      => 'Primièras contribucions',
+'sp-contributions-newer'       => '$1 precedents',
+'sp-contributions-older'       => '$1 seguents',
+'sp-contributions-newbies'     => 'Mostrar pas que las contribucions dels utilizaires novèls',
+'sp-contributions-newbies-sub' => 'Lista de las contribucions dels utilizaires novèls. Las paginas que son estadas suprimidas son pas afichadas.',
+'sp-contributions-blocklog'    => 'Jornal dels blocatges',
+'sp-contributions-search'      => 'Cercar las contribucions',
+'sp-contributions-username'    => 'Adreça IP o nom d’utilizaire :',
+'sp-contributions-submit'      => 'Cercar',
+
+'sp-newimages-showfrom' => 'Afichar los imatges importats dempuèi lo $1',
+
+# What links here
+'whatlinkshere'      => 'Paginas ligadas a aquesta',
+'notargettitle'      => 'Pas de cibla',
+'notargettext'       => 'Indicatz una pagina cibla o un utilizaire cibla.',
+'linklistsub'        => '(Lista de ligams)',
+'linkshere'          => 'Las paginas çai jos contenon un ligam vèrs aquesta:',
+'nolinkshere'        => "Cap de pagina conten pas de ligam vèrs '''[[:$1]]'''.",
+'nolinkshere-ns'     => "Cap de pagina conten pas de ligam vèrs '''[[:$1]]''' dins l’espaci de nom causit.",
+'isredirect'         => 'pagina de redireccion',
+'whatlinkshere-prev' => '{{PLURAL:$1|precedent|$1 precedents}}',
+'whatlinkshere-next' => '{{PLURAL:$1|seguent|$1 seguents}}',
+
+# Block/unblock
+'blockip'                     => 'Blocar una adreça IP',
+'blockiptext'                 => "Utilizatz lo formulari çai jos per blocar l'accès en escritura a partir d'una adreça IP donada.
+Una tala mesura deu pas èsser presa pas que per empachar lo vandalisme e en acòrdi amb [[{{MediaWiki:policy-url}}]].
+Donatz çai jos una rason precisa (per exemple en indicant las paginas que son estadas vandalizadas).",
+'ipaddress'                   => 'Adreça IP',
+'ipadressorusername'          => 'Adreça IP o nom d’utilizaire',
+'ipbexpiry'                   => 'Durada del blocatge',
+'ipbreason'                   => 'Motiu',
+'ipbanononly'                 => 'Blocar unicament los utilizaires anonims',
+'ipbcreateaccount'            => 'Empachar la creacion de compte',
+'ipbenableautoblock'          => 'Blocar automaticament las adreças IP utilizadas per aqueste utilizaire',
+'ipbsubmit'                   => 'Blocar aquesta adreça',
+'ipbother'                    => 'Autra durada',
+'ipboptions'                  => '2 oras:2 hours,1 jorn:1 day,3 jorns:3 days,1 setmana:1 week,2 setmanas:2 weeks,1 mes:1 month,3 meses:3 months,6 meses:6 months,1 an:1 year,indefinidament:infinite',
+'ipbotheroption'              => 'autre',
+'ipbhidename'                 => "Amagar lo nom d’utilizaire o l’IP de l'istoric de blocatge, de la lista dels blocatges actius e de la lista dels utilizaires",
+'badipaddress'                => "L'adreça IP es pas corrècta.",
+'blockipsuccesssub'           => 'Blocatge capitat',
+'blockipsuccesstext'          => 'L\'adreça IP "$1" es estada blocada.
+<br />Podètz consultar sus aquesta [[Special:Ipblocklist|pagina]] la lista de las adreças IP blocadas.',
+'ipb-unblock-addr'            => 'Desblocar $1',
+'ipb-unblock'                 => "Desblocar un compte d'utilizaire o una adreça IP",
+'ipb-blocklist-addr'          => 'Veire los blocatges existents per $1',
+'ipb-blocklist'               => 'Veire los blocatges existents',
+'unblockip'                   => 'Desblocar una adreça IP',
+'unblockiptext'               => "Utilizatz lo formulari çai jos per restablir l'accès en escritura
+a partir d'una adreça IP precedentament blocada.",
+'ipusubmit'                   => 'Desblocar aquesta adreça',
+'unblocked'                   => '[[User:$1|$1]] es estat desblocat',
+'ipblocklist'                 => 'Lista de las adreças IP blocadas',
+'ipblocklist-submit'          => 'Recèrca',
+'blocklistline'               => '$1, $2 a blocat $3 ($4)',
+'infiniteblock'               => 'permanent',
+'expiringblock'               => 'expira lo $1',
+'anononlyblock'               => 'utilizaire non enregistrat unicament',
+'noautoblockblock'            => 'Blocatge automatic desactivat',
+'createaccountblock'          => 'La creacion de compte es blocada.',
+'ipblocklistempty'            => 'La lista de las adreças blocadas es actualament vioda.',
+'blocklink'                   => 'blocar',
+'unblocklink'                 => 'desblocar',
+'contribslink'                => 'contribucions',
+'autoblocker'                 => 'Autoblocat perque pertejatz una adreça IP amb "[[User:$1|$1]]". Rason : "\'\'\'$2\'\'\'".',
+'blocklogpage'                => 'Istoric dels blocatges',
+'blocklogentry'               => 'a blocat « [[$1]] » - durada : $2 $3',
+'blocklogtext'                => 'Aquò es la traça dels blocatges e desblocatges dels utiliaires. Las adreças IP automaticament blocadas son pas listadas. Consultatz la [[Special:Ipblocklist|lista dels utilizaires blocats]] per veire qui es actualament efectivament blocat.',
+'unblocklogentry'             => 'a desblocat « $1 »',
+'block-log-flags-anononly'    => 'utilizaires anonims solament',
+'block-log-flags-nocreate'    => 'creacion de compte interdicha',
+'block-log-flags-autoblock'   => 'autoblocatge de las IP activat',
+'range_block_disabled'        => "Lo blocatge de plajas d'IP es estat desactivat.",
+'ipb_expiry_invalid'          => 'Temps d’expiracion invalid.',
+'ipb_already_blocked'         => '« $1 » ja es blocat',
+'ip_range_invalid'            => 'Blòt IP incorrècte.',
+'proxyblocker'                => 'Blocaire de proxy',
+'ipb_cant_unblock'            => 'Error : Lo blocatge d’ID $1 existís pas. Es possible qu’un desblocatge ja siá estat efectuat.',
+'proxyblockreason'            => "Vòstra ip es estada blocada perque s’agís d’un proxy dobert. Mercé de contactar vòstre fornidor d’accès internet o vòstre supòrt tecnic e de l’informar d'aqueste problèma de seguretat.",
+'proxyblocksuccess'           => 'Acabat.',
+'sorbsreason'                 => 'Vòstra adreça IP es listada en tant que proxy dobert [http://www.sorbs.net SORBS] DNSBL.',
+'sorbs_create_account_reason' => 'Vòstra adreça IP es listada en tant que proxy dobert [http://www.sorbs.net SORBS] DNSBL. Podètz pas crear un compte',
+
+# Developer tools
+'lockdb'              => 'Varrolhar la banca',
+'unlockdb'            => 'Desvarrolhar la banca',
+'lockdbtext'          => "Lo clavatge de la banca de donadas empacharà totes los utilizaires de modificar las paginas, de salvagardar lors preferéncias, de modificar lor lista de seguit e d'efectuar totas las autras operacions necessitant de modificacions dins la banca de donadas.
+Confirmatz qu'es plan çò que volètz far e que desblocarètz la banca tre que vòstra operacion de mantenença serà acabada.",
+'unlockdbtext'        => "Lo desclavatge de la banca de donadas permetrà a totes los utilizaires de modificar tornarmai de paginas, de metre a jorn lors preferéncias e lor lista de seguit, e mai d'efectuar las autras operacions necessitant de modificacions dins la banca de donadas.
+Confirmatz qu'es plan çò que volètz far.",
+'lockconfirm'         => 'Òc, confirmi que desiri clavar la banca de donadas.',
+'unlockconfirm'       => 'Òc, confirmi que desiri desclavar la banca de donadas.',
+'lockbtn'             => 'Varrolhar la banca',
+'unlockbtn'           => 'Desvarrolhar la banca',
+'locknoconfirm'       => 'Avètz pas marcat la casa de confirmacion.',
+'lockdbsuccesssub'    => 'Varrolhatge de la banca capitat.',
+'unlockdbsuccesssub'  => 'Banca desvarrolhada.',
+'lockdbsuccesstext'   => 'La banca de donadas es clavada.
+
+<br />Doblidetz pas de la desclavar quand aurètz acabat vòstra operacion de mantenença.',
+'unlockdbsuccesstext' => 'La banca de donadas de {{SITENAME}} es desvarrolhada.',
+'lockfilenotwritable' => 'Lo fichièr de blocatge de la banca de donadas es pas inscriptible. Per blocar o desblocar la banca de donadas, devètz poder escriure sul serveire web.',
+'databasenotlocked'   => 'La banca de donadas es pas clavada.',
+
+# Move page
+'movepage'                => 'Desplaçar un article',
+'movepagetext'            => "Utilizatz lo formulari çai jos per renomenar un article, en desplaçant totas sas versions anterioras vèrs lo nom novèl.
+Lo títol precedent devendrà una pagina de redireccion vèrs lo títol novèl.
+Los ligams vèrs lo títol ancian seràn pas modificats e la pagina de discussion, s'existís, serà pas desplaçada.<br />
+<b>ATENCION !</b>
+Se pòt agir d'un cambiament radical e inesperat per un article sovent consultat;
+asseguratz-vos que ne comprenètz plan las consequéncias abans de procedir.",
+'movepagetalktext'        => "La pagina de discussion associada, se presenta, serà automaticament desplaçada amb '''en defòra de se:'''
+*Desplaçatz una pagina vèrs un autre espaci,
+*Una pagina de discussion existís ja amb lo nom novèl, o
+*Avètz deseleccionat lo boton çai jos.
+
+Dins aqueste cas, deurètz desplaçar o fusionar la pagina manualament se o volètz.",
+'movearticle'             => "Desplaçar l'article",
+'movenologin'             => 'Non connectat',
+'movenologintext'         => "Per poder desplaçar un article, devètz èsser [[Special:Userlogin|connectat]]
+en tant qu'utilizaire enregistrat.",
+'newtitle'                => 'Títol novèl',
+'move-watch'              => 'Seguir aquesta pagina',
+'movepagebtn'             => "Desplaçar l'article",
+'pagemovedsub'            => 'Desplaçament capitat',
+'pagemovedtext'           => 'L\'article "[[$1]]" es estat desplaçat vèrs "[[$2]]".',
+'articleexists'           => "Existís ja un article portant aqueste títol, o lo títol qu'avètz causit es pas valid.
+Causissètz-ne un autre.",
+'talkexists'              => "La pagina ela-meteissa es estada desplaçada amb succès, mas
+la pagina de discussion a pas pogut èsser desplaçada perque n'existissiá ja una
+jol nom novèl. Se vos plai, fusionatz-las manualament.",
+'movedto'                 => 'desplaçat vèrs',
+'movetalk'                => 'Desplaçar tanben la pagina "discussion", se fa mestièr.',
+'talkpagemoved'           => 'La pagina de discussion correspondenta tanben es estada desplaçada.',
+'talkpagenotmoved'        => 'La pagina de discussion correspondenta es <strong>pas</strong> estada desplaçada.',
+'1movedto2'               => 'a desplaçat [[$1]] vèrs [[$2]]',
+'1movedto2_redir'         => 'a redirigit [[$1]] vèrs [[$2]]',
+'movelogpage'             => 'Istoric dels renomenatges',
+'movelogpagetext'         => 'Vaquí la lista de las darrièras paginas renomenadas.',
+'movereason'              => 'Rason del renomenatge',
+'revertmove'              => 'anullar',
+'delete_and_move'         => 'Suprimir e renomenar',
+'delete_and_move_text'    => '==Supression requesida== 
+
+L’article de destinacion « [[$1]] » existís ja. Volètz lo suprimir per permetre lo renomenatge ?',
+'delete_and_move_confirm' => 'Òc, accèpti de suprimir la pagina de destinacion per permetre lo renomenatge.',
+'delete_and_move_reason'  => 'Pagina suprimida per permetre un renomenatge',
+'selfmove'                => 'Los títols d’origina e de destinacion son los meteisses : impossible de renomenar una pagina sus ela-meteissa.',
+'immobile_namespace'      => 'Lo títol de destinacion es d’un tipe especial ; es impossible de renomenar de paginas vèrs aqueste espaci de noms.',
+
+# Export
+'export'            => 'Exportar de paginas',
+'exporttext'        => "Podètz exportar en XML lo tèxt e l’istoric d’una pagina o d’un ensemble de paginas; lo resultat pòt alara èsser importat dins un autre wiki foncionant amb lo logicial MediaWiki.
+
+Per exportar de paginas, entratz lors títols dins la boita de tèxt çai jos, un títol per linha, e seleccionatz se o desiratz o pas la version actuala amb totas las versions ancianas, amb la pagina d’istoric, o simplament la pagina actuala amb d'informacions sus la darrièra modificacion.
+
+Dins aqueste darrièr cas, podètz tanben utilizar un ligam, coma [[{{ns:Special}}:Export/{{Mediawiki:mainpage}}]] per la pagina {{Mediawiki:mainpage}}.",
+'exportcuronly'     => 'Exportar unicament la version correnta sens l’istoric complet',
+'exportnohistory'   => "---- 
+'''Nòta :''' l’exportacion complèta de l’istoric de las paginas amb l’ajuda d'aqueste formulari es estada desactivada per de rasons de performàncias.",
+'export-submit'     => 'Exportar',
+'export-addcattext' => 'Ajustar las paginas de la categoria :',
+'export-addcat'     => 'Ajustar',
+
+# Namespace 8 related
+'allmessages'               => 'Lista dels messatges del sistèma',
+'allmessagesname'           => 'Nom del camp',
+'allmessagesdefault'        => 'Messatge per defaut',
+'allmessagescurrent'        => 'Messatge actual',
+'allmessagestext'           => 'Aquò es la lista de totes los messatges disponibles dins l’espaci MediaWiki',
+'allmessagesnotsupportedUI' => "''Special:Allmessages'' accèpta pas la lenga de vòstra interfàcia (<b>$1</b>) sus aqueste sit.",
+'allmessagesnotsupportedDB' => '<b>Special:Allmessages</b> es pas disponible perque <b>$wgUseDatabaseMessages</b> es desactivat.',
+'allmessagesfilter'         => 'Filtre d’expression racionala :',
+'allmessagesmodified'       => 'Afichar pas que las modificacions',
+
+# Thumbnails
+'thumbnail-more'  => 'Agrandir',
+'missingimage'    => '<b>Imatge mancant</b><br /><i>$1</i>',
+'filemissing'     => 'Fichièr absent',
+'thumbnail_error' => 'Error al moment de la creacion de la miniatura : $1',
+
+# Special:Import
+'import'                     => 'Importar de paginas',
+'importinterwiki'            => 'Impòrt inter-wiki',
+'import-interwiki-text'      => "Seleccionatz un wiki e un títol de pagina d'importar.
+Las datas de las versions e los noms dels editors seràn preservats.
+Totas las accions d’importacion interwiki son conservadas dins lo [[Special:Log/import|jornal d’impòrt]].",
+'import-interwiki-history'   => "Copiar totas las versions de l'istoric d'aquesta pagina",
+'import-interwiki-submit'    => 'Importar',
+'import-interwiki-namespace' => 'Transferir las paginas dins l’espaci de nom :',
+'importtext'                 => 'Exportatz lo fichièr dempuèi lo wiki d’origina en utilizant l’esplech Special:Export, lo salvagardar sus vòstre disc dur e lo copiar aicí.',
+'importstart'                => 'Impòrt de las paginas...',
+'import-revision-count'      => '$1 {{PLURAL:$1|revision|revisions}}',
+'importnopages'              => "Cap de pagina d'importar.",
+'importfailed'               => 'Fracàs de l’impòrt : $1',
+'importunknownsource'        => 'Tipe de la font d’impòrt desconegut',
+'importcantopen'             => "Impossible de dobrir lo fichièr d'importar",
+'importbadinterwiki'         => 'Marrit ligam interwiki',
+'importnotext'               => 'Void o sens tèxt',
+'importsuccess'              => "L'impòrt a capitat!",
+'importhistoryconflict'      => "I a un conflicte dins l'istoric de las versions (aquesta pagina a pogut èsser importada de per abans).",
+'importnosources'            => 'Cap de font inter-wiki es pas estada definida e la còpia dirècta d’istoric es desactivada.',
+'importnofile'               => 'Cap de fichièr es pas estat importat.',
+'importuploaderror'          => "L’impòrt del fichièr a pas capitat : es possible qu'aqueste depasse la talha autorizada.",
+
+# Import log
+'importlogpage'                    => 'Istoric de las importacions de paginas',
+'importlogpagetext'                => 'Impòrts administratius de paginas amb l’istoric a partir dels autres wikis.',
+'import-logentry-upload'           => 'a importat (telecargament) $1',
+'import-logentry-upload-detail'    => '$1 version(s)',
+'import-logentry-interwiki'        => '$1 version(s) dempuèi $2',
+'import-logentry-interwiki-detail' => '$1 version(s) dempuèi $2',
+
+# Tooltip help for the actions
+'tooltip-pt-userpage'             => "Ma pagina d'utilizaire",
+'tooltip-pt-anonuserpage'         => "La pagina d'utilizare de l’IP amb laquala contribuissètz",
+'tooltip-pt-mytalk'               => 'Ma pagina de discussion',
+'tooltip-pt-anontalk'             => 'La pagina de discussion per aquesta adreça IP',
+'tooltip-pt-preferences'          => 'Mas preferéncias',
+'tooltip-pt-watchlist'            => 'La lista de las paginas que seguissètz',
+'tooltip-pt-mycontris'            => 'Lista de mas contribucions',
+'tooltip-pt-login'                => 'Sètz convidat a vos identificar, mas es pas obligatòri.',
+'tooltip-pt-anonlogin'            => 'Sètz convidat a vos identificar, mas es pas obligatòri.',
+'tooltip-pt-logout'               => 'Se desconnectar',
+'tooltip-ca-talk'                 => "Discussion a prepais d'aquesta pagina",
+'tooltip-ca-edit'                 => 'Podètz modificar aquesta pagina. Mercé de previsualizar abans d’enregistrar.',
+'tooltip-ca-addsection'           => 'Ajustar un comentari a aquesta discussion.',
+'tooltip-ca-viewsource'           => 'Aquesta pagina es protegida. Podètz çaquelà ne veire lo contengut.',
+'tooltip-ca-history'              => "Los autors e versions precedentas d'aquesta pagina.",
+'tooltip-ca-protect'              => 'Protegir aquesta pagina',
+'tooltip-ca-delete'               => 'Suprimir aquesta pagina',
+'tooltip-ca-undelete'             => 'Restablir aquesta pagina',
+'tooltip-ca-move'                 => 'Renomenar aquesta pagina',
+'tooltip-ca-watch'                => 'Ajustatz aquesta pagina a vòstra lista de seguit',
+'tooltip-ca-unwatch'              => 'Levatz aquesta pagina de vòstra lista de seguit',
+'tooltip-search'                  => 'Cercar dins {{SITENAME}}',
+'tooltip-p-logo'                  => 'Pagina principala',
+'tooltip-n-mainpage'              => 'Visitatz la pagina principala',
+'tooltip-n-portal'                => 'A prepaus del projècte',
+'tooltip-n-currentevents'         => "Trobar d'informacions suls eveniments actuals",
+'tooltip-n-recentchanges'         => 'Lista dels darrièrs cambiaments sul wiki.',
+'tooltip-n-randompage'            => "Afichar una pagina a l'azard",
+'tooltip-n-help'                  => 'Ajuda.',
+'tooltip-n-sitesupport'           => 'Sostenètz lo projècte',
+'tooltip-t-whatlinkshere'         => 'Lista de las paginas ligadas a aquesta',
+'tooltip-t-recentchangeslinked'   => 'Lista dels darrièrs cambiaments de las paginas ligadas a aquesta',
+'tooltip-feed-rss'                => 'Flus RSS per aquesta pagina',
+'tooltip-feed-atom'               => 'Flus Atom per aquesta pagina',
+'tooltip-t-contributions'         => "Veire la lista de las contribucions d'aqueste utilizaire",
+'tooltip-t-emailuser'             => 'Mandar un corrièr electronic a aqueste utilizaire',
+'tooltip-t-upload'                => 'Importar un imatge o fichièr mèdia sul serveire',
+'tooltip-t-specialpages'          => 'Lista de totas las paginas especialas',
+'tooltip-ca-nstab-main'           => 'Veire l’article',
+'tooltip-ca-nstab-user'           => "Veire la pagina d'utilizaire",
+'tooltip-ca-nstab-media'          => 'Veire la pagina del mèdia',
+'tooltip-ca-nstab-special'        => 'Aquò es una pagina especiala, podètz pas la modificar.',
+'tooltip-ca-nstab-project'        => 'Veire la pagina del projècte',
+'tooltip-ca-nstab-image'          => 'Veire la pagina de l’imatge',
+'tooltip-ca-nstab-mediawiki'      => 'Veire lo messatge del sistèma',
+'tooltip-ca-nstab-template'       => 'Veire lo modèl',
+'tooltip-ca-nstab-help'           => 'Veire la pagina d’ajuda',
+'tooltip-ca-nstab-category'       => 'Veire la pagina de la categoria',
+'tooltip-minoredit'               => 'Marcar mas modificacions coma un cambiament menor',
+'tooltip-save'                    => 'Salvagardar vòstras modificacions',
+'tooltip-preview'                 => 'Mercé de previsualizar vòstras modificacions abans de salvagardar!',
+'tooltip-diff'                    => "Permet de visualizar los cambiaments qu'avètz efectuats",
+'tooltip-compareselectedversions' => "Afichar las diferéncias entre doas versions d'aquesta pagina",
+'tooltip-watch'                   => 'Ajustar aquesta pagina a vòstra lista de seguit',
+'tooltip-recreate'                => 'Recrear la pagina, quitament se es estada escafada',
+
+# Stylesheets
+'common.css'   => '/** Lo CSS plaçat aicí serà aplicat a totas las aparéncias. */',
+'monobook.css' => '/* Lo CSS plaçat aicí afectarà los utilizaires del skin Monobook */',
+
+# Scripts
+'common.js'   => '/* Un JavaScript quin que siá aicí serà cargat per un utilizaire quin que siá e per cada pagina accedida. */',
+'monobook.js' => '/* Deprecated; use [[MediaWiki:common.js]] */',
+
+# Metadata
+'nodublincore'      => 'Las metadonadas « Dublin Core RDF » son desactivadas sus aqueste serveire.',
+'nocreativecommons' => 'Las donadas meta « Creative Commons RDF » son desactivadas sus aqueste serveire.',
+'notacceptable'     => 'Aqueste serveire wiki pòt pas fornir las donadas dins un format que vòstre client es capable de legir.',
+
+# Attribution
+'anonymous'        => 'Utilizaire(s) pas enregistrat(s) de {{SITENAME}}',
+'siteuser'         => 'Utilizaire $1 de {{SITENAME}}',
+'lastmodifiedatby' => 'Aquesta pagina es estada modificada pel darrièr còp lo $1 a $2 per $3.', # $1 date, $2 time, $3 user
+'and'              => 'e',
+'othercontribs'    => "Contribucions de l'utilizaire $1.",
+'others'           => 'autres',
+'siteusers'        => 'Utilizaire(s) $1',
+'creditspage'      => 'Pagina de crèdits',
+'nocredits'        => 'I a pas d’informacions d’atribucion disponiblas per aquesta pagina.',
+
+# Spam protection
+'spamprotectiontitle'    => 'Pagina protegida automaticament per causa de spam',
+'spamprotectiontext'     => "La pagina qu'avètz ensajat de salvagardar es estada blocada pel filtre anti-spam. Aquò es probablament causat per un ligam vèrs un sit extèrn.",
+'spamprotectionmatch'    => 'Lo tèxt seguent a desenclavaat lo detector de spam : $1',
+'subcategorycount'       => '{{PLURAL:$1|Una soscategoria es listada |$1 soscategorias son listadas}} çai jos. Se un ligam « (200 precedents) » o « (200 seguents) » es present çai sus, pòt menar a d’autras soscategorias.',
+'categoryarticlecount'   => 'I a {{PLURAL:$1|un article|$1 articles}} dins aquesta categoria.',
+'category-media-count'   => 'I a {{plural:$1|un fichièr|$1 fichièrs}} multimèdia dins aquesta categoria.',
+'listingcontinuesabbrev' => '(seguida)',
+'spambot_username'       => 'Netejatge de spam MediaWiki',
+'spam_reverting'         => 'Restauracion de la darrièra version contenent pas de ligam vèrs $1',
+'spam_blanking'          => 'Totas las versions que contenon de ligams vèrs $1 son blanquidas',
+
+# Info page
+'infosubtitle'   => 'Informacions per la pagina',
+'numedits'       => 'Nombre de modificacions : $1',
+'numtalkedits'   => 'Nombre de modificacions (pagina de discussion) : $1',
+'numwatchers'    => "Nombre de contributors qu'an la pagina dins lor lista de seguit : $1",
+'numauthors'     => 'Nombre d’autors distints : $1',
+'numtalkauthors' => 'Nombre d’autors distints (pagina de discussion) : $1',
+
+# Math options
+'mw_math_png'    => 'Totjorn produire un imatge PNG',
+'mw_math_simple' => 'HTML se plan simpla, si que non PNG',
+'mw_math_html'   => 'HTML se possible, si que non PNG',
+'mw_math_source' => "Daissar lo còde TeX d'origina",
+'mw_math_modern' => 'Pels navegaires modèrnes',
+'mw_math_mathml' => 'MathML',
+
+# Patrolling
+'markaspatrolleddiff'                 => 'Marcar coma essent pas un vandalisme',
+'markaspatrolledtext'                 => 'Marcar aqueste article coma non vandalizat',
+'markedaspatrolled'                   => 'Marcat coma non vandalizat',
+'markedaspatrolledtext'               => 'La version seleccionada es estada marcada coma non vandalizada.',
+'rcpatroldisabled'                    => 'La foncion de patrolha dels darrièrs cambiaments es pas activada.',
+'rcpatroldisabledtext'                => 'La foncionalitat de susvelhança dels darrièrs cambiaments es pas activada.',
+'markedaspatrollederror'              => 'Pòt pas èsser marcat coma non vandalizat',
+'markedaspatrollederrortext'          => 'Devètz seleccionar una version per poder la marcar coma non vandalizada.',
+'markedaspatrollederror-noautopatrol' => 'Avètz pas lo drech de marcar vòstras pròprias modificacions coma susvelhadas.',
+
+# Patrol log
+'patrol-log-page' => 'Istoric de las versions patrolhadas',
+'patrol-log-line' => 'a marcat la version $1 de $2 coma verificada $3',
+'patrol-log-diff' => '$1',
+
+# Image deletion
+'deletedrevision' => 'La version anciana $1 es estada suprimida.',
+
+# Browsing diffs
+'previousdiff' => '← Dif precedenta',
+'nextdiff'     => 'Dif seguenta →',
+
+# Media information
+'mediawarning'         => '<b>Atencion</b>: Aqueste fichièr pòt conténer de còde malvolent, vòstre sistèma pòt èsser mes en dangièr per son execucion. <hr />',
+'imagemaxsize'         => 'Format maximal pels imatges dins las paginas de descripcion d’imatges :',
+'thumbsize'            => 'Talha de la miniatura :',
+'file-info'            => 'Talha del fichièr: $1, tipe MIME: $2',
+'file-info-size'       => '($1 × $2 pixel, talha del fichièr: $3, tipe MIME: $4)',
+'file-nohires'         => '<small>Pas de resolucion mai nauta disponibla.</small>',
+'file-svg'             => '<small>Aquò es un grafic vectorial, redimensionable sens pèrdas. Talha de basa : $1 × $2 pixels.</small>',
+'show-big-image'       => 'Imatge en resolucion mai nauta',
+'show-big-image-thumb' => "<small>Talha d'aqueste apercebut : $1 × $2 pixels</small>",
+
+'newimages'    => 'Galariá de fichièrs novèls',
+'showhidebots' => '($1 bòts)',
+'noimages'     => "Cap imatge d'afichar.",
+
+'passwordtooshort' => 'Vòstre senhal es tròp cort. Deu conténer al mens $1 caractèrs.',
+
+# Metadata
+'metadata'          => 'Metadonadas',
+'metadata-help'     => "Aqueste fichièr conten d'informacions suplementàrias probablament ajustadas per l’aparelh de fòto o l'escanèr que l’a producha. Se lo fichièr es estat modificat, cèrts detalhs pòdon refletar pas l’imatge modificat.",
+'metadata-expand'   => 'Mostrar las informacions detalhadas',
+'metadata-collapse' => 'Amagar las informacions detalhadas',
+'metadata-fields'   => 'Los camps de metadonadas d’EXIF listats dins aqueste message seràn incluses dins la pagina de descripcion de l’imatge quand la taula de metadonadas serà reduccha. Los autres camps seràn amagats per defaut.
+* make
+* model
+* datetimeoriginal
+* exposuretime
+* fnumber
+* focallength',
+
+# EXIF tags
+'exif-imagewidth'                  => 'Largor',
+'exif-imagelength'                 => 'Nautor',
+'exif-bitspersample'               => 'Bits per compausanta',
+'exif-compression'                 => 'Tipe de compression',
+'exif-photometricinterpretation'   => 'Composicion dels pixels',
+'exif-orientation'                 => 'Orientacion',
+'exif-samplesperpixel'             => 'Nombre de compausants',
+'exif-planarconfiguration'         => 'Arrengament de las donadas',
+'exif-ycbcrpositioning'            => 'Posicion YCbCr',
+'exif-xresolution'                 => 'Resolucion de l’imatge en largor',
+'exif-yresolution'                 => 'Resolucion de l’imatge en nautor',
+'exif-resolutionunit'              => 'Unitats de resolucion X e Y',
+'exif-jpeginterchangeformat'       => 'Posicion del SOI JPEG',
+'exif-jpeginterchangeformatlength' => 'Talha en octet de las donadas JPEG',
+'exif-transferfunction'            => 'Foncion de transferiment',
+'exif-ycbcrcoefficients'           => 'Coeficients de la matritz de transformacion de l’espaci colorimetric',
+'exif-referenceblackwhite'         => 'Valors de referéncia negre e blanc',
+'exif-datetime'                    => 'Data e ora de cambiament del fichièr',
+'exif-imagedescription'            => 'Títol de l’imatge',
+'exif-make'                        => 'Fabricant de l’aparelh',
+'exif-model'                       => 'Modèl de l’aparelh',
+'exif-software'                    => 'Logicial utilizat',
+'exif-artist'                      => 'Autor',
+'exif-copyright'                   => 'Detentor del copyright',
+'exif-exifversion'                 => 'Version exif',
+'exif-flashpixversion'             => 'Version Flashpix suportada',
+'exif-colorspace'                  => 'Espaci colorimetric',
+'exif-componentsconfiguration'     => 'Significacion de cada compausanta',
+'exif-compressedbitsperpixel'      => 'Mòde de compression de l’imatge',
+'exif-pixelydimension'             => 'Largor d’imatge valida',
+'exif-pixelxdimension'             => 'Nautor d’imatge valida',
+'exif-makernote'                   => 'Nòtas del fabricant',
+'exif-usercomment'                 => 'Comentaris',
+'exif-relatedsoundfile'            => 'Fichièr audiò associat',
+'exif-datetimeoriginal'            => 'Data e ora de la generacion de donadas',
+'exif-datetimedigitized'           => 'Data e ora de numerizacion',
+'exif-exposuretime'                => "Temps d'exposicion",
+'exif-exposuretime-format'         => '$1 seg ($2)',
+'exif-fnumber'                     => 'Focala',
+'exif-exposureprogram'             => 'Programa d’exposicion',
+'exif-spectralsensitivity'         => 'Sensibilitat espectrala',
+'exif-isospeedratings'             => 'Sensibilitat ISO',
+'exif-oecf'                        => 'Factor de conversion optoelectronic',
+'exif-shutterspeedvalue'           => 'Velocitat d’obturacion',
+'exif-aperturevalue'               => 'Dobertura',
+'exif-brightnessvalue'             => 'Luminositat',
+'exif-exposurebiasvalue'           => 'Correccion d’exposicion',
+'exif-maxaperturevalue'            => 'Camp de dobertura maximal',
+'exif-subjectdistance'             => 'Distància del subjècte',
+'exif-meteringmode'                => 'Mòde de mesura',
+'exif-lightsource'                 => 'Font de lutz',
+'exif-focallength'                 => 'Longor de focala',
+'exif-flashenergy'                 => 'Energia del flash',
+'exif-spatialfrequencyresponse'    => 'Responsa en frequéncia espaciala',
+'exif-focalplanexresolution'       => 'Resolucion X focala plana',
+'exif-focalplaneyresolution'       => 'Resolucion Y focala plana',
+'exif-focalplaneresolutionunit'    => 'Unitat de resolucion de focala plana',
+'exif-subjectlocation'             => 'Posicion del subjècte',
+'exif-exposureindex'               => 'Indèx d’exposicion',
+'exif-sensingmethod'               => 'Metòde de deteccion',
+'exif-filesource'                  => 'Font del fichièr',
+'exif-scenetype'                   => 'Tipe de scèna',
+'exif-cfapattern'                  => 'Matritz de filtratge de color',
+'exif-customrendered'              => 'Tractament d’imatge personalizat',
+'exif-exposuremode'                => 'Mòde d’exposicion',
+'exif-whitebalance'                => 'Balança dels blancs',
+'exif-digitalzoomratio'            => 'Taus d’agrandiment numeric (zoom)',
+'exif-focallengthin35mmfilm'       => 'Longor de focala per un filme 35 mm',
+'exif-gaincontrol'                 => 'Contraròtle de luminositat',
+'exif-saturation'                  => 'Saturacion',
+'exif-sharpness'                   => 'Netetat',
+'exif-devicesettingdescription'    => 'Descripcion de la configuracion del dispositiu',
+'exif-subjectdistancerange'        => 'Distància del subjècte',
+'exif-imageuniqueid'               => 'Identificant unic de l’imatge',
+'exif-gpsversionid'                => 'Version del tag GPS',
+'exif-gpslatituderef'              => 'Latitud Nòrd o Sud',
+'exif-gpslatitude'                 => 'Latitud',
+'exif-gpslongituderef'             => 'Longitud Èst o Oèst',
+'exif-gpslongitude'                => 'Longitud',
+'exif-gpsaltituderef'              => 'Referéncia d’altitud',
+'exif-gpsaltitude'                 => 'Altitud',
+'exif-gpstimestamp'                => 'Ora GPS (relòtge atomic)',
+'exif-gpssatellites'               => 'Satellits utilizats per la mesura',
+'exif-gpsstatus'                   => 'Estatut receptor',
+'exif-gpsmeasuremode'              => 'Mòde de mesura',
+'exif-gpsdop'                      => 'Precision de la mesura',
+'exif-gpsspeedref'                 => 'Unitat de velocitat',
+'exif-gpsspeed'                    => 'Velocitat del receptor GPS',
+'exif-gpstrackref'                 => 'Referéncia per la direccion del movement',
+'exif-gpstrack'                    => 'Direccion del movement',
+'exif-gpsimgdirectionref'          => 'Referéncia per l’orientacion de l’imatge',
+'exif-gpsimgdirection'             => 'Direccion de l’imatge',
+'exif-gpsdestlatituderef'          => 'Referéncia per la latitud de la destinacion',
+'exif-gpsdestlatitude'             => 'Latitud de la destinacion',
+'exif-gpsdestlongituderef'         => 'Referéncia per la longitud de la destinacion',
+'exif-gpsdestlongitude'            => 'Longitud de la destinacion',
+'exif-gpsdestbearingref'           => 'Referéncia pel relevament de la destinacion',
+'exif-gpsdestbearing'              => 'Relevament de la destinacion',
+'exif-gpsdestdistanceref'          => 'Referéncia per la distància de la destinacion',
+'exif-gpsdestdistance'             => 'Distància a la destinacion',
+'exif-gpsprocessingmethod'         => 'Nom del metòde de tractament del GPS',
+'exif-gpsareainformation'          => 'Nom de la zòna GPS',
+'exif-gpsdatestamp'                => 'Data GPS',
+'exif-gpsdifferential'             => 'Correccion diferenciala GPS',
+
+# EXIF attributes
+'exif-compression-1' => 'Pas compressat',
+
+'exif-unknowndate' => 'Data desconeguda',
+
+'exif-orientation-2' => 'Inversada orizontalament', # 0th row: top; 0th column: right
+'exif-orientation-3' => 'Virada de 180°', # 0th row: bottom; 0th column: right
+'exif-orientation-4' => 'Inversada verticalament', # 0th row: bottom; 0th column: left
+'exif-orientation-5' => 'Virada de 90° a esquèrra e inversada verticalament', # 0th row: left; 0th column: top
+'exif-orientation-6' => 'Virada de 90° a drecha', # 0th row: right; 0th column: top
+'exif-orientation-7' => 'Virada de 90° a drecha e inversada verticalament', # 0th row: right; 0th column: bottom
+'exif-orientation-8' => 'Virada de 90° a esquèrra', # 0th row: left; 0th column: bottom
+
+'exif-componentsconfiguration-0' => 'existís pas',
+
+'exif-exposureprogram-0' => 'Indefinit',
+'exif-exposureprogram-2' => 'Programa normal',
+'exif-exposureprogram-3' => 'Prioritat a la dobertura',
+'exif-exposureprogram-4' => 'Prioritat a l’obturacion',
+'exif-exposureprogram-5' => 'Programa creacion (preferéncia a la pregondor de camp)',
+'exif-exposureprogram-6' => 'Programa accion (preferéncia a la velocitat d’obturacion)',
+'exif-exposureprogram-7' => 'Mòde retrach (per clichats de prèp amb arrièr plan vague)',
+'exif-exposureprogram-8' => 'Mòde paisatge (per de clichats de paisatges nets)',
+
+'exif-subjectdistance-value' => '$1 mètres',
+
+'exif-meteringmode-0'   => 'Desconegut',
+'exif-meteringmode-1'   => 'Mejana',
+'exif-meteringmode-2'   => 'Mesura centrala mejana',
+'exif-meteringmode-3'   => 'Espòt',
+'exif-meteringmode-4'   => 'MultiEspòt',
+'exif-meteringmode-6'   => 'Parcial',
+'exif-meteringmode-255' => 'Autra',
+
+'exif-lightsource-0'   => 'Desconeguda',
+'exif-lightsource-1'   => 'Lutz del jorn',
+'exif-lightsource-3'   => 'Tungstèn (lum incandescent)',
+'exif-lightsource-9'   => 'Temps clar',
+'exif-lightsource-10'  => 'Temps ennivolat',
+'exif-lightsource-11'  => 'Ombra',
+'exif-lightsource-12'  => 'Esclairatge fluorescent lutz del jorn (D 5700 – 7100K)',
+'exif-lightsource-13'  => 'Esclairatge fluorescent blanc (N 4600 – 5400K)',
+'exif-lightsource-14'  => 'Esclairatge fluorescent blanc freg (W 3900 – 4500K)',
+'exif-lightsource-15'  => 'Esclairatge fluorescent blanc (WW 3200 – 3700K)',
+'exif-lightsource-17'  => 'Lum estandard A',
+'exif-lightsource-18'  => 'Lum estandard B',
+'exif-lightsource-19'  => 'Lum estandard C',
+'exif-lightsource-255' => 'Autra font de lum',
+
+'exif-focalplaneresolutionunit-2' => 'poces',
+
+'exif-sensingmethod-1' => 'Pas definit',
+'exif-sensingmethod-8' => "Esclairatge d'estudiò al tungstèn ISO",
+
+'exif-scenetype-1' => 'Imatge dirèctament fotografiat',
+
+'exif-customrendered-0' => 'Procediment normal',
+'exif-customrendered-1' => 'Procediment personalizat',
+
+'exif-exposuremode-0' => 'Exposicion automatica',
+'exif-exposuremode-1' => 'Exposicion manuala',
+'exif-exposuremode-2' => 'Bracketting automatic',
+
+'exif-whitebalance-0' => 'Balança dels blancs automatica',
+'exif-whitebalance-1' => 'Balança dels blancs manuala',
+
+'exif-scenecapturetype-0' => 'Estandard',
+'exif-scenecapturetype-1' => 'Paisatge',
+'exif-scenecapturetype-2' => 'Retrach',
+'exif-scenecapturetype-3' => 'Scèna nuechenca',
+
+'exif-gaincontrol-0' => 'Cap',
+
+'exif-contrast-1' => 'Feble',
+'exif-contrast-2' => 'Fòrt',
+
+'exif-saturation-1' => 'Saturacion febla',
+'exif-saturation-2' => 'Saturacion elevada',
+
+'exif-sharpness-0' => 'Normala',
+'exif-sharpness-1' => 'Doça',
+'exif-sharpness-2' => 'Dura',
+
+'exif-subjectdistancerange-0' => 'Desconegut',
+'exif-subjectdistancerange-1' => 'Macrò',
+'exif-subjectdistancerange-2' => 'Sarrat',
+'exif-subjectdistancerange-3' => 'Luenhenc',
+
+# Pseudotags used for GPSLatitudeRef and GPSDestLatitudeRef
+'exif-gpslatitude-n' => 'Latitud Nòrd',
+'exif-gpslatitude-s' => 'Latitud Sud',
+
+# Pseudotags used for GPSLongitudeRef and GPSDestLongitudeRef
+'exif-gpslongitude-e' => 'Longitud Èst',
+'exif-gpslongitude-w' => 'Longitud Oèst',
+
+'exif-gpsstatus-a' => 'Mesura en cors',
+'exif-gpsstatus-v' => 'Interoperabilitat de la mesura',
+
+'exif-gpsmeasuremode-2' => 'Mesura a 2 dimensions',
+'exif-gpsmeasuremode-3' => 'Mesura a 3 dimensions',
+
+# Pseudotags used for GPSSpeedRef and GPSDestDistanceRef
+'exif-gpsspeed-k' => 'Kilomètres/ora',
+'exif-gpsspeed-m' => 'Miles/ora',
+'exif-gpsspeed-n' => 'Noses',
+
+# Pseudotags used for GPSTrackRef, GPSImgDirectionRef and GPSDestBearingRef
+'exif-gpsdirection-t' => 'Direccion vertadièra',
+'exif-gpsdirection-m' => 'Nòrd magnetic',
+
+# External editor support
+'edit-externally'      => 'Modificar aqueste fichièr en utilizant una aplicacion extèrna',
+'edit-externally-help' => 'Vejatz [http://meta.wikimedia.org/wiki/Help:External_editors las instruccions] per mai d’informacions.',
+
+# 'all' in various places, this might be different for inflected languages
+'recentchangesall' => 'totes',
+'imagelistall'     => 'totes',
+'watchlistall1'    => 'tot',
+'watchlistall2'    => 'tot',
+'namespacesall'    => 'Totes',
+
+# E-mail address confirmation
+'confirmemail'            => "Confirmar l'adreça de corrièr electronic",
+'confirmemail_noemail'    => 'L’adreça de corrièr electronic configurada dins vòstras [[Special:Preferences|preferéncias]] es pas valida.',
+'confirmemail_text'       => 'Aqueste wiki necessita la verificacion de vòstra adreça de corrièr electronic abans de poder utilizar tota foncion de messatjariá. Utilizatz lo boton çai jos per mandar un corrièr electronic de confirmacion a vòstra adreça. Lo corrièr contendrà un ligam contenent un còde, cargatz aqueste ligam dins vòstre navegaire per validar vòstra adreça.',
+'confirmemail_pending'    => '<div class="error">
+Un còde de confirmacion ja vos es estat mandat per corrièr electronic ; se venètz de crear vòstre compte, esperatz qualques minutas que l’e-mail arribe abans de demandar un còde novèl. </div>',
+'confirmemail_send'       => 'Mandar un còde de confirmacion',
+'confirmemail_sent'       => 'Corrièr electronic de confirmacion mandat.',
+'confirmemail_oncreate'   => "Un còde de confirmacion es estat mandat a vòstra adreça de corrièr electronic.
+Aqueste còde es pas requesit per se connectar, mas n'aurètz besonh per activar las foncionalitats ligadas als corrièrs electronics sus aqueste wiki.",
+'confirmemail_sendfailed' => 'Impossible de mandar lo corrièr electronic de confirmacion.
+
+Verificatz vòstra adreça. Retorn del programa de corrièr electronic : $1',
+'confirmemail_invalid'    => 'Còde de confirmacion incorrècte. Benlèu lo còde a expirat.',
+'confirmemail_needlogin'  => 'Devètz vos $1 per confirmar vòstra adreça de corrièr electronic.',
+'confirmemail_success'    => 'Vòstra adreça de corrièr electronic es confirmada. Ara podètz vos connectar e profitar del wiki.',
+'confirmemail_loggedin'   => 'Vòstra adreça es ara confirmada',
+'confirmemail_error'      => 'Un problèma es subrevengut e volent enregistrar vòstra confirmacion',
+'confirmemail_subject'    => 'Confirmacion d’adreça de corrièr electronic per {{SITENAME}}',
+'confirmemail_body'       => "Qualqu’un, probablament vos amb l’adreça IP $1, a enregistrat un compte « $2 » amb aquesta adreça de corrièr electronic sul sit {{SITENAME}}.
+
+Per confirmar qu'aqueste compte vos aparten vertadièrament e activar las foncions de messatjariá sus {{SITENAME}}, seguissètz lo ligam çai jos dins vòstre navegaire : 
+
+$3 
+
+Se s’agís pas de vos, dobrissez pas lo ligam. Aqueste còde de confirmacion expirarà lo $4.",
+
+# Inputbox extension, may be useful in other contexts as well
+'tryexact'       => 'Ensajatz la correspondéncia exacta',
+'searchfulltext' => 'Recèrca en tèxt integral',
+'createarticle'  => 'Crear l’article',
+
+# Scary transclusion
+'scarytranscludedisabled' => '[La transclusion interwiki es desactivada]',
+'scarytranscludefailed'   => '[La recuperacion de modèl a pas capitat per $1 ; o planhem]',
+'scarytranscludetoolong'  => '[L’URL es tròp longa ; o planhem]',
+
+# Trackbacks
+'trackbackbox'      => '<div id="mw_trackbacks">
+Retroligams vèrs aqueste article :<br />
+$1
+</div>',
+'trackbackremove'   => '([$1 Suprimir])',
+'trackbacklink'     => 'Retroligam',
+'trackbackdeleteok' => 'Lo retroligam es estat suprimit amb succès.',
+
+# Delete conflict
+'deletedwhileediting' => "Atencion : aquesta pagina es estada suprimida aprèp qu'avètz començat de la modificar.",
+'confirmrecreate'     => "L'utilizaire [[User:$1|$1]] ([[User talk:$1|talk]]) a suprimit aquesta pagina, alara qu'aviatz començat de l'editar, pel motiu seguent:
+: ''$2''
+Confirmatz que desiratz recrear aqueste article.",
+'recreate'            => 'Recrear',
+
+# HTML dump
+'redirectingto' => 'Redireccion vèrs [[$1]]...',
+
+# action=purge
+'confirm_purge'        => "Volètz refrescar aquesta pagina (purgar l'amagatal) ?
+
+$1",
+'confirm_purge_button' => 'Confirmar',
+
+'youhavenewmessagesmulti' => 'Avètz de messatges novèls sus $1',
+
+'searchcontaining' => 'Cercar los articles contenent « $1 ».',
+'searchnamed'      => 'Cercar los articles nomenats « $1 ».',
+'articletitles'    => 'Articles començant per « $1 »',
+'hideresults'      => 'Amagar los resultats',
+
+# DISPLAYTITLE
+'displaytitle' => '(Ligar vèrs aquesta pagina coma [[$1]])',
+
+'loginlanguagelabel' => 'Lenga: $1',
+
+# Multipage image navigation
+'imgmultipageprev'   => '&larr; pagina precedenta',
+'imgmultipagenext'   => 'pagina seguenta &rarr;',
+'imgmultigo'         => 'Accedir !',
+'imgmultigotopre'    => 'Accedir a la pagina',
+'imgmultiparseerror' => 'Aqueste fichièr imatge es aparentament corromput o incorrècte, e {{SITENAME}} pòt pas fornir una lista de las paginas.',
+
+# Table pager
+'table_pager_next'         => 'Pagina seguenta',
+'table_pager_prev'         => 'Pagina precedenta',
+'table_pager_first'        => 'Primièra pagina',
+'table_pager_last'         => 'Darrièra pagina',
+'table_pager_limit'        => 'Mostrar $1 elements per pagina',
+'table_pager_limit_submit' => 'Accedir',
+'table_pager_empty'        => 'Cap de resultat',
+
+# Auto-summaries
+'autosumm-blank'   => 'Resumit automatic : blanquiment',
+'autosumm-replace' => "Resumit automatic : contengut remplaçat per '$1'",
+'autoredircomment' => 'Redireccion vèrs [[$1]]', # This should be changed to the new naming convention, but existed beforehand
+'autosumm-new'     => 'Pagina novèla: $1',
+
+# Size units
+'size-bytes'     => '$1 o',
+'size-kilobytes' => '$1 Ko',
+'size-megabytes' => '$1 Mo',
+'size-gigabytes' => '$1 Go',
+
+# Live preview
+'livepreview-loading' => 'Cargament…',
+'livepreview-ready'   => 'Cargament… Acabat!',
+'livepreview-failed'  => 'L’apercebut rapid a pas capitat!
+Ensajatz la previsualizacion normala.',
+'livepreview-error'   => 'Impossible de se connectar : $1 "$2"
+Ensajatz la previsualizacion normala.',
+
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesOr.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesOr.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesOr.php	(revision 1280)
@@ -0,0 +1,21 @@
+<?php
+/** Oriya (ଓଡ଼ିଆ)
+  *
+  * @addtogroup Language
+  *
+  * @author Ævar Arnfjörð Bjarmason <avarab@gmail.com>
+  */
+$digitTransformTable = array(
+	'0' => '୦',
+	'1' => '୧',
+	'2' => '୨',
+	'3' => '୩',
+	'4' => '୪',
+	'5' => '୫',
+	'6' => '୬',
+	'7' => '୭',
+	'8' => '୮',
+	'9' => '୯',
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesOs.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesOs.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesOs.php	(revision 1280)
@@ -0,0 +1,218 @@
+<?php
+/** Ossetic (Иронау)
+ *
+ * @addtogroup Language
+ */
+$fallback = 'ru';
+
+$skinNames = array(
+	'standard' => 'Стандартон',
+	'nostalgia' => 'Æнкъард',
+	'cologneblue' => 'Кёльны æрхæндæг',
+	'davinci' => 'Да Винчи',
+	'mono' => 'Моно',
+	'monobook' => 'Моно-чиныг',
+	'myskin' => 'Мæхи',
+	'chick' => 'Карк'
+);
+$namespaceNames = array(
+	NS_MEDIA            => 'Media', //чтоб не писать "Мультимедия"
+	NS_SPECIAL          => 'Сæрмагонд',
+	NS_MAIN             => '',
+	NS_TALK             => 'Дискусси',
+	NS_USER             => 'Архайæг',
+	NS_USER_TALK        => 'Архайæджы_дискусси',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK     => 'Дискусси_$1',
+	NS_IMAGE            => 'Ныв',
+	NS_IMAGE_TALK       => 'Нывы_тыххæй_дискусси',
+	NS_MEDIAWIKI        => 'MediaWiki',
+	NS_MEDIAWIKI_TALK   => 'Дискусси_MediaWiki',
+	NS_TEMPLATE         => 'Шаблон',
+	NS_TEMPLATE_TALK    => 'Шаблоны_тыххæй_дискусси',
+	NS_HELP             => 'Æххуыс',
+	NS_HELP_TALK        => 'Æххуысы_тыххæй_дискусси',
+	NS_CATEGORY         => 'Категори',
+	NS_CATEGORY_TALK    => 'Категорийы_тыххæй_дискусси',
+);
+
+$linkTrail = '/^((?:[a-z]|а|æ|б|в|г|д|е|ё|ж|з|и|й|к|л|м|н|о|п|р|с|т|у|ф|х|ц|ч|ш|щ|ъ|ы|ь|э|ю|я|“|»)+)(.*)$/sDu';
+$fallback8bitEncoding =  'windows-1251';
+
+
+$messages = array(
+'titlematches' => 'Статьяты сæргæндты æмцаутæ',
+'toc' => 'Сæргæндтæ',
+'addedwatch' => "Дæ цæст кæмæ дарыс, уыцы статьятæм бафтыд.",
+'allarticles' => "Æппæт статьятæ",
+'allmessages' => "Æппæт техникон фыстытæ",
+'allpages' => "Æппæт фæрстæ",
+'allpagesnext' => "дарддæр",
+'allpagesprev' => "фæстæмæ",
+'alphaindexline' => "$1 (уыдоны ’хсæн цы статьятæ ис, фен) $2",
+'ancientpages' => "Зæронддæр фæрстæ",
+'and' => "æмæ",
+'articlepage' => "Фен статья",
+'blanknamespace' => "(Сæйраг)",
+'bold_sample' => "Ацы текст бæзджын суыдзæн",
+'bold_tip' => "Бæзджын текст",
+'bydate' => "рæстæгмæ гæсгæ",
+'byname' => "номмæ гæсгæ",
+'bysize' => "асмæ гæсгæ",
+'categories' => "Категоритæ",
+'categoriespagetext' => "Мæнæ ахæм категоритæ ирон Википедийы ис.",
+'category_header' => "Категори \"$1\"",
+'categoryarticlecount' => "Ацы категорийы мидæг $1 статьяйы ис.",
+'contributions' => "Йæ бавæрд",
+'createaccountmail' => "адрисмæ гæсгæ",
+'currentevents' => "Ног хабæрттæ",
+'currentevents-url' => "Xabar",
+'diff' => "хицæн.",
+'edit' => "Баив æй",
+'editsection' => "баив æй",
+'editold' => "баив æй",
+'emailpage' => "Электронон фыстæг йæм барвит",
+'error' => "Рæдыд",
+'errorpagetitle' => "Рæдыд",
+'exblank' => "фарс афтид уыдис",
+'filename' => "Файлы ном",
+'go' => "Статьямæ",
+'searcharticle' => "Статьямæ",
+'headline_sample' => "Ам сæргонды текст уæд",
+'help' => "Æххуыс",
+'hide' => "бамбæхс",
+'hidetoc' => "бамбæхс",
+'hist' => "лог",
+'histlegend' => "Куыд æй æмбарын: (нырыккон) = нырыккон версийæ хъауджыдæрдзинад, (раздæры) = раздæры версийæ хъауджыдæрдзинад, Ч = чысыл ивддзинад.",
+'history_short' => "Истори",
+'ilsubmit' => "Агур",
+'imagelist' => "Нывты номхыгъд",
+'imghistory' => "Нывы ивддзинæдты лог",
+'importnotext' => "Афтид у кæнæ текст дзы нæй",
+'internalerror' => "Мидæг рæдыд",
+'intl' => "Æндæр æвзæгтæм æрвитæнтæ",
+'ipbreason' => "Аххос",
+'largefile' => "Сæдæ килобайтæй стырдæр файлтæ æгæр дынджыр сты.",
+'last' => "раздæры",
+'lastmodifiedat' => "<span style=\"white-space: normal;\">Кæд æмæ ацы статьяйы ссардтай рæдыд, уæд сраст æй кæн: ацы фарсы уæлæ ис æрвитæн «баив æй».
+<br /> Ацы фарс фæстаг хатт ивд æрцыд: $1.</span>",
+'lineno' => "Рæнхъ $1:",
+'linklistsub' => "(Æрвитæнты номхыгъд)",
+'linkstoimage' => "Ацы нывæй чи пайда кæны, ахæм статьятæ:",
+'listusers' => "Архайджыты номхыгъд",
+'localtime' => "Бынатон рæстæг",
+'login' => "Дæхи бавдис системæйæн",
+'loginpagetitle' => "Дæхи бацамон системæйæн",
+'loginsuccess' => "Ныр та Википедийы архайыс $1, зæгъгæ, ахæм номæй.",
+'logout' => "Номсусæг суын",
+'logouttitle' => "Номсусæг суын",
+'lonelypages' => "Сидзæр фæрстæ",
+'longpages' => "Даргъ фæрстæ",
+'mailnologintext' => "Фыстæгтæ æрвитынмæ хъуамæ [[Special:Userlogin|системæйæн дæхи бавдисай]] æмæ дæ бæлвырд электронон посты адрис [[Special:Preferences|ныффыссай]].",
+'mainpage' => "Сæйраг фарс",
+'makesysopname' => "Архайæджы ном:",
+'minoredit' => "Ай чысыл ивддзинад у.",
+'monday' => "Къуырисæр",
+'move' => "Ном баив",
+'movearticle' => "Статьяйы ном баив",
+'movenologin' => "Системæйæн дæхи нæ бавдыстай",
+'mycontris' => "Дæ бавæрд",
+'mypage' => "Дæхи фарс",
+'mytalk' => "Дæумæ цы дзурынц",
+'navigation' => "хъæугæ æрвитæнтæ",
+'nbytes' => "$1 байт(ы)",
+'newarticle' => "(Ног)",
+'newimages' => "Ног нывты галерей",
+'newmessageslink' => "ног фыстæгтæ",
+'newpage' => "Ног фарс",
+'newpageletter' => "Н",
+'newpages' => "Ног фæрстæ",
+'newpassword' => "Новый пароль",
+'newtitle' => "Ног ном",
+'nextn' => "$1 размæ",
+'nlinks' => "$1 æрвитæн(ы)",
+'nowatchlist' => "Иу статьямæ дæр дæ цæст нæ дарыс.",
+'nstab-image' => "Ныв",
+'nstab-mediawiki' => "Фыстаг",
+'nstab-special' => "Сæрмагонд фарс",
+'nstab-template' => "Шаблон",
+'nstab-user' => "Архайæджы фарс",
+'otherlanguages' => "Æндæр æвзæгтыл",
+'others' => "æндæртæ",
+'pagecategories' => "Категоритæ",
+'portal' => "Архайджыты æхсæнад",
+'prevn' => "$1 фæстæмæ",
+'printableversion' => "Мыхурмæ верси",
+'qbfind' => "Агур",
+'qbsettings-none'	=> 'Ма равдис',
+'qbsettings-fixedleft'	=> 'Галиуырдыгæй',
+'qbsettings-fixedright'	=> 'Рахизырдыгæй',
+'qbsettings-floatingleft'	=> 'Рахизырдыгæй ленккæнгæ',
+'qbspecialpages' => "Сæрмагонд фæрстæ",
+'randompage' => "Æнæбары æвзæрст фарс",
+'rclinks' => "Фæстаг $1 ивддзинæдтæ (афæстаг $2 боны дæргъы чи ’рцыдысты) равдис;
+$3",
+'rcnote' => "Дæлдæр нымад сты афæстаг <strong>$2</strong> боны дæргъы конд <strong>$1</strong> ивддзинад(ы).",
+'recentchanges' => "Фæстаг ивддзинæдтæ",
+'recentchangeslinked' => "Баст ивддзинæдтæ",
+'recentchangestext' => "Ацы фарсыл ирон Википедийы фæстаг ивддзинæдтæ фенæн ис.",
+'revhistory' => "Ивддзинæдты истори",
+'rights' => "Бартæ",
+'saturday' => "Сабат",
+'savearticle' => "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Афтæ!&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;",
+'savefile' => "Бавæр æй",
+'search' => "агур",
+'searchbutton' => "агур",
+'searchresults' => "Цы ссардæуы",
+'shortpages' => "Цыбыр фæрстæ",
+'showpreview' => "&nbsp;&nbsp;Фен уал æй&nbsp;&nbsp;",
+'showtoc' => "равдис",
+'show' => "равдис",
+'showpreview' => "&nbsp;&nbsp;Фен уал æй&nbsp;&nbsp;",
+'specialpage' => "Сæрмагонд фарс",
+'specialpages' => "Сæрмагонд фæрстæ",
+'spheading' => "Сæрмагонд фæрстæ",
+'subcategories' => "Дæлкатегоритæ",
+'subcategorycount' => "Ацы категорийы мидæг $1 дæлкатегорийы ис.",
+'sunday' => "Хуыцаубон",
+'tagline' => "Сæрибар энциклопеди Википедийы æрмæг.",
+'talk' => "Дискусси",
+'talkpage' => "Ацы фарсы тыххæй ныхас",
+'textmatches' => "Статьяты æмцаутæ",
+'thursday' => "Цыппарæм",
+'timezonelegend' => "Сахаты таг",
+'timezoneoffset' => "Хъауджыдæрдзинад",
+'titlematches' => "Статьяты сæргæндты æмцаутæ",
+'toc' => "Сæргæндтæ",
+'tog-underline' => "Æрвитæнты бын хахх",
+'toolbox' => "мигæнæнтæ",
+'tuesday' => "Дыццæг",
+'uctop' => "(уæле баззад)",
+'userlogin' => "Системæйæн дæхи бавдис",
+'userlogout' => "Номсусæг суын",
+'userpage' => "Ацы архайæджы фарс фен",
+'userstatstext' => "Регистрацигонд æрцыдысты <b>$1</b> архайджыты, уыдонæй <b>$2</b> — админтæ (кæс $3).",
+'wantedpages' => "Хъæугæ фæрстæ",
+'watch' => "Дæ цæст æрдар",
+'watchdetails' => "($1 фæрстæм дæ цæст дарыс, дискусситы фæстæмæ; $3... [$4 Æххæст номхыгъд фен].)",
+'watchlist' => "Дæ цæст кæмæ дарыс, уыцы фæрстæ",
+'mywatchlist' => "Дæ цæст кæмæ дарыс, уыцы фæрстæ",
+'watchlistcontains' => "Дæ цæст $1 фæрстæм дарыс.",
+'watchnologin' => "Системæйæн дæхи нæ бавдыстай",
+'watchnologintext' => "Ацы номхыгъд ивынмæ <a href=\"{{localurle:Специальные:Userlogin}}\">хъуамæ дæхи бавдисай системæйæн</a>.",
+'watchthis' => "Ацы фарсмæ дæ цæст æрдар",
+'watchthispage' => "Ацы фарсмæ дæ цæст æрдар",
+'wednesday' => "Æртыццæг",
+'welcomecreation' => "<h2>Æгас цу, $1!</h2><p>Регистрацигонд æрцыдтæ.",
+'whatlinkshere' => "Цавæр æрвитæнтæ цæуынц ардæм",
+'wlnote' => "Дæлæ афæстаг <b>$2</b> сахаты дæргъы цы $1 ивддзинад(ы) æрцыди, уыдон.",
+'wlshowlast' => "Фæстæг $1 сахаты, $2 боны дæргъы; $3.",
+'youremail' => "Дæ электронон посты адрис",
+'yourlanguage' => "Техникон фыстыты æвзаг",
+'yourname' => "Дæ ном кæнæ фæсномыг",
+'yourrealname' => "Дæ æцæг ном*",
+
+);
+
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesPa.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesPa.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesPa.php	(revision 1280)
@@ -0,0 +1,412 @@
+<?php
+/** Punjabi (Gurmukhi)
+  * @addtogroup Language
+  */
+# This file is dual-licensed under GFDL and GPL.
+#
+# See: http://bugzilla.wikimedia.org/show_bug.cgi?id=1478
+
+$skinNames = array(
+	'standard'      => 'ਮਿਆਰੀ',
+);
+
+$namespaceNames = array(
+	NS_MEDIA          => 'ਮੀਡੀਆ',
+	NS_SPECIAL        => 'ਖਾਸ',
+	NS_MAIN           => '',
+	NS_TALK           => 'ਚਰਚਾ',
+	NS_USER           => 'ਮੈਂਬਰ',
+	NS_USER_TALK      => 'ਮੈਂਬਰ_ਚਰਚਾ',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK   => '$1_ਚਰਚਾ',
+	NS_IMAGE          => 'ਤਸਵੀਰ',
+	NS_IMAGE_TALK     => 'ਤਸਵੀਰ_ਚਰਚਾ',
+	NS_MEDIAWIKI      => 'ਮੀਡੀਆਵਿਕਿ',
+	NS_MEDIAWIKI_TALK => 'ਮੀਡੀਆਵਿਕਿ_ਚਰਚਾ',
+	NS_TEMPLATE       => 'ਨਮੂਨਾ',
+	NS_TEMPLATE_TALK  => 'ਨਮੂਨਾ_ਚਰਚਾ',
+	NS_HELP           => 'ਮਦਦ',
+	NS_HELP_TALK      => 'ਮਦਦ_ਚਰਚਾ',
+	NS_CATEGORY       => 'ਸ਼੍ਰੇਣੀ',
+	NS_CATEGORY_TALK  => 'ਸ਼੍ਰੇਣੀ_ਚਰਚਾ'
+);
+
+$digitTransformTable = array(
+	'0' => '੦',
+	'1' => '੧',
+	'2' => '੨',
+	'3' => '੩',
+	'4' => '੪',
+	'5' => '੫',
+	'6' => '੬',
+	'7' => '੭',
+	'8' => '੮',
+	'9' => '੯'
+);
+$linkTrail = '/^([ਁਂਃਅਆਇਈਉਊਏਐਓਔਕਖਗਘਙਚਛਜਝਞਟਠਡਢਣਤਥਦਧਨਪਫਬਭਮਯਰਲਲ਼ਵਸ਼ਸਹ਼ਾਿੀੁੂੇੈੋੌ੍ਖ਼ਗ਼ਜ਼ੜਫ਼ੰੱੲੳa-z]+)(.*)$/sDu';
+
+
+$messages = array(
+# Bits of text used by many pages:
+#
+
+# Dates
+'sunday'		=> 'ਐਤਵਾਰ',
+'monday'		=> 'ਸੋਮਵਾਰ',
+'tuesday'		=> 'ਮੰਗਲਵਾਰ',
+'wednesday'		=> 'ਬੁਧਵਾਰ',
+'thursday'		=> 'ਵੀਰਵਾਰ',
+'friday'		=> 'ਸ਼ੁੱਕਰਵਾਰ',
+'saturday'		=> 'ਸ਼ਨੀਚਰਵਾਰ',
+'january'		=> 'ਜਨਵਰੀ',
+'february'		=> 'ਫ਼ਰਵਰੀ',
+'march'			=> 'ਮਾਰਚ',
+'april'			=> 'ਅਪ੍ਰੈਲ',
+'may_long'		=> 'ਮਈ',
+'june'			=> 'ਜੂਨ',
+'july'			=> 'ਜੁਲਾਈ',
+'august'		=> 'ਅਗਸਤ',
+'september'		=> 'ਸਤੰਬਰ',
+'october'		=> 'ਅਕਤੂਬਰ',
+'november'		=> 'ਨਵੰਬਰ',
+'december'		=> 'ਦਸੰਬਰ',
+'jan'			=> 'ਜਨਵਰੀ',
+'feb'			=> 'ਫ਼ਰਵਰੀ',
+'mar'			=> 'ਮਾਰਚ',
+'apr'			=> 'ਅਪ੍ਰੈਲ',
+'may'			=> 'ਮਈ',
+'jun'			=> 'ਜੂਨ',
+'jul'			=> 'ਜੁਲਾਈ',
+'aug'			=> 'ਅਗਸਤ',
+'sep'			=> 'ਸਤੰਬਰ',
+'oct'			=> 'ਅਕਤੂਬਰ',
+'nov'			=> 'ਨਵੰਬਰ',
+'dec'			=> 'ਦਸੰਬਰ',
+
+'categories'	=> 'ਸ਼੍ਰੇਣੀਆਂ',
+'pagecategories'	=> 'ਸ਼੍ਰੇਣੀਆਂ',
+'category_header'	=> 'ਸ਼੍ਰੇਣੀ \'$1\' ਵਾਲੇ ਲੇਖ',
+'subcategories'	=> 'ਉਪਸ਼੍ਰੇਣੀਆਂ',
+
+'mainpage'		=> 'ਮੁੱਖ ਪੰਨਾ',
+'mainpagetext'	=> 'ਵਿਕਿ ਸਾਫ਼ਟਵੇਅਰ ਚੰਗੀ ਤਰ੍ਹਾਂ ਇੰਸਟਾਲ ਹੋ ਗਿਆ ਹੈ',
+
+'portal'		=> 'ਸਮੂਹ ਦ੍ਵਾਰ',
+'portal-url'		=> 'Project:ਸਮੂਹ ਦ੍ਵਾਰ',
+'about'		=> 'ਜਾਣਕਾਰੀ',
+'aboutsite'		=> '{{SITENAME}} ਬਾਰੇ',
+'aboutpage'		=> 'Project:ਜਾਣਕਾਰੀ',
+'article'		=> 'ਵਿਸ਼ਾ-ਵਸਤੂ ਵਾਲਾ ਪੰਨਾ',
+'help'		=> 'ਮਦਦ',
+'helppage'		=> 'ਮਦਦ:ਵਿਸ਼ਾ-ਵਸਤੂ',
+'bugreports'		=> 'ਖਾਮੀ ਸੂਚਨਾ',
+'bugreportspage'	=> 'Project:ਖਾਮੀ_ਸੂਚਨਾ',
+'sitesupport'		=> 'ਦਾਨ',
+'sitesupport-url'	=> 'Project:ਦਾਨ',
+'faq'			=> 'ਪ੍ਰਸ਼ਨਾਵਲੀ - FAQ',
+'faqpage'		=> 'Project:ਪ੍ਰਸ਼ਨਾਵਲੀ',
+'edithelp'		=> 'ਬਦਲਾਵ ਮਦਦ',
+'newwindow'		=> '(ਨਵੀਂ window ਵਿੱਚ ਖੁੱਲੇਗਾ)',
+'edithelppage'	=> 'ਮਦਦ:ਬਦਲਾਵ',
+'cancel'		=> 'ਰੱਦ ਕਰੋ',
+'qbfind'		=> 'ਲੱਭੋ',
+'qbbrowse'		=> 'ਵੇਖੋ - Browse',
+'qbedit'		=> 'ਬਦਲੋ',
+'qbpageoptions'	=> 'ਪੰਨਾ ਵਿਕਲਪ - Options',
+'qbpageinfo'		=> 'ਪੰਨਾ ਜਾਣਕਾਰੀ',
+'qbmyoptions'		=> 'ਮੇਰੇ ਵਿਕਲਪ',
+'qbspecialpages'	=> 'ਖਾਸ ਪੰਨੇ',
+'moredotdotdot'	=> 'ਹੋਰ...',
+'mypage'		=> 'ਮੇਰਾ ਪੰਨਾ',
+'mytalk'		=> 'ਮੇਰੀ ਚਰਚਾ',
+'anontalk'		=> 'ਇੱਸ ਆਈ-ਪੀ (IP) ਦੀ ਚਰਚਾ',
+'navigation'		=> 'ਨੈਵੀਗੇਸ਼ੱਨ',
+
+
+
+'disclaimers'		=> 'ਡਿਸਕਲੇਮਰ',
+'disclaimerpage'	=> 'Project:General_disclaimer',
+'errorpagetitle'	=> 'ਗਲਤੀ',
+'returnto'		=> 'ਵਾਪਿਸ ਪਰਤੋ: $1.',
+'tagline'		=> '{{SITENAME}} ਤੋਂ',
+'whatlinkshere'	=> 'ਪੰਨੇ ਜੋ ਇੱਥੇ ਜੁੜਦੇ ਹਨ',
+'help'		=> 'ਮਦਦ',
+'search'		=> 'ਖੋਜ',
+'searchbutton'	=> 'ਖੋਜ',
+'go'			=> 'ਜਾਓ',
+'searcharticle'			=> 'ਜਾਓ',
+'history'		=> 'ਪੁਰਾਣੇ ਆਵਰਤਣ',
+'history_short'	=> 'ਇਤਿਹਾਸ',
+'info_short'		=> 'ਸੂਚਨਾ',
+'printableversion'	=> 'ਛਾਪਣ-ਯੋਗ ਆਵਰਤਣ',
+'edit'		=> 'ਬਦਲੋ',
+'editthispage'	=> 'ਇਸ ਪੰਨੇ ਨੂੰ ਬਦਲੋ',
+'delete'		=> 'ਹਟਾਓ',
+'deletethispage'	=> 'ਇਸ ਪੰਨੇ ਨੂੰ ਹਟਾਓ',
+'undelete_short'	=> '$1 ਬਦਲਾਵ ਮੁੜ ਵਾਪਿਸ ਲਿਆਓ',
+'protect'		=> 'ਰੱਖਿਆ ਕਰੋ',
+'protectthispage'	=> 'ਇਸ ਪੰਨੇ ਦੀ ਰੱਖਿਆ ਕਰੋ',
+'unprotect'		=> 'ਅਸੁਰੱਖਿਅਤ ਕਰੋ',
+'unprotectthispage'	=> 'ਇਸ ਪੰਨੇ ਨੂੰ ਅਸੁਰੱਖਿਅਤ ਕਰੋ',
+'newpage'		=> 'ਨਵਾਂ ਪੰਨਾ',
+'talkpage'		=> 'ਇਸ ਪੰਨੇ ਤੇ ਚਰਚਾ ਕਰੋ',
+'specialpage'		=> 'ਖ਼ਾਸ ਪੰਨਾ',
+'personaltools'	=> 'ਨਿਜੀ ਔਜ਼ਾਰ',
+'postcomment'		=> 'ਆਪਨੇ ਵਿਚਾਰ ਪੇਸ਼ ਕਰੋ',
+'articlepage'		=> 'ਵਿਸ਼ਾ-ਵਸਤੂ ਵਾਲਾ ਪੰਨਾ ਵੇਖੋ',
+'talk'		=> 'ਚਰਚਾ',
+'toolbox'		=> 'ਔਜ਼ਾਰ-ਡੱਬਾ',
+'userpage'		=> 'ਮੈਂਬਰ ਦਾ ਪੰਨਾ ਵੇਖੋ',
+'projectpage'	=> 'ਪਰਿਯੋਜਨਾ (project) ਵਾਲਾ ਪੰਨਾ ਵੇਖੋ',
+'imagepage'		=> 'ਤਸਵੀਰ ਵਾਲਾ ਪੰਨਾ ਵੇਖੋ',
+'viewtalkpage'	=> 'ਚਰਚਾ ਵਾਲਾ ਪੰਨਾ ਵੇਖੋ',
+'otherlanguages'	=> 'ਬਾਕੀ ਭਾਸ਼ਾਵਾਂ',
+'redirectedfrom'	=> '($1 ਤੋਂ ਭੇਜਿਆ ਗਿਆ ਹੈ)',
+'lastmodifiedat'	=> 'ਅਖੀਰਲਾ ਬਦਲਾਵ $2, $1',
+'viewcount'		=> 'ਇਹ ਪੰਨਾ $1 ਵਾਰ ਵੇਖਿਆ ਗਿਆ ਹੈ',
+'copyright'		=> 'ਵਿਸ਼ਾ-ਵਸਤੂ $1 ਤਹਿਤ ਉਪਲੱਬਧ ਹੈ',
+'protectedpage'	=> 'ਸੁਰੱਖਿਅਤ ਪੰਨਾ',
+'nbytes'		=> '$1 ਬਾਈਟ',
+'ok'			=> 'ਠੀਕ ਹੈ',
+'pagetitle'		=> '$1 - {{SITENAME}}',
+'retrievedfrom'	=> '\'$1\' ਤੋਂ ਪ੍ਰਾਪਤ ਕੀਤਾ ਗਿਆ ਹੈ',
+'newmessageslink'	=> 'ਨਵੇਂ ਸੰਦੇਸ਼',
+'editsection'		=> 'ਬਦਲੋ',
+'editold'		=> 'ਬਦਲੋ',
+'toc'			=> 'ਵਿਸ਼ਾ-ਸੂਚੀ',
+'showtoc'		=> 'ਦਿਖਾਓ',
+'hidetoc'		=> 'ਛੁਪਾਓ',
+'thisisdeleted'	=> 'ਵੇਖੋ ਜਾਂ ਮੁੜ ਵਾਪਿਸ ਲਿਆਓ $1?',
+
+# Short words for each namespace, by default used in the 'article' tab in monobook
+'nstab-main'		=> 'ਲੇਖ',
+'nstab-user'		=> 'ਮੈਂਬਰ ਦਾ ਪੰਨਾ',
+'nstab-media'		=> 'ਮੀਡੀਆ',
+'nstab-special'	=> 'ਖਾਸ',
+'nstab-project'		=> 'ਜਾਣਕਾਰੀ',
+'nstab-image'		=> 'ਤਸਵੀਰ',
+'nstab-mediawiki'	=> 'ਸੰਦੇਸ਼',
+'nstab-template'	=> 'ਨਮੂਨਾ',
+'nstab-help'		=> 'ਮਦਦ',
+'nstab-category'	=> 'ਸ਼੍ਰੇਣੀ',
+
+# Main script and global functions
+#
+'nosuchaction'	=> 'ਅਜੇਹੀ ਕੋਈ ਕਿਰਿਆ ਨਹੀਂ ਹੈ',
+'nosuchactiontext'	=> 'URL ਦੁਵਾਰਾ ਕੀਤੀ ਗਈ ਕਿਰਿਆ (action) ਤੋਂ ਵਿਕਿ ਸੋਫ਼ਟਵੇਅਰ ਜਾਣੂ ਨਹੀਂ ਹੈ',
+'nosuchspecialpage'	=> 'ਅਜੇਹਾ ਕੋਈ ਖਾਸ ਪੰਨਾ ਨਹੀਂ ਹੈ',
+'nospecialpagetext'	=> 'ਤੁਸੀਂ ਇੱਕ ਖਾਸ ਪੰਨੇ ਦੀ ਮੰਗ ਕੀਤੀ ਹੈ ਜਿਸ ਤੋਂ ਵਿਕਿ ਸੋਫ਼ਟਵੇਅਰ ਜਾਣੂ ਨਹੀਂ ਹੈ',
+
+# General errors
+#
+'error'		=> 'ਗਲਤੀ',
+'databaseerror'	=> 'ਡਾਟਾਬੇਸ ਨਾਲ ਸੰਬੰਧਤ ਗਲਤੀ',
+'dberrortext'		=> 'ਡਾਟਾਬੇਸ ਪੁੱਛਗਿੱਛ ਦੀ ਵਾਕ-ਰਚਨਾ ਵਿਚ ਕੋਈ ਗਲਤੀ ਹੋ ਗਈ ਹੈ।
+ਇਹ ਕਿਸੇ ਖੋਜ ਬਾਰੇ ਗਲਤ ਪੁੱਛਗਿੱਛ ਦੇ ਕਾਰਨ ਹੋ ਸਕਦਾ ਹੈ($5 ਦੇਖੋ),
+ਜਾਂ ਸ਼ਾਇਦ ਸੌਫ਼ਟਵੇਅਰ ਵਿਚ ਕੋਈ ਖ਼ਰਾਬੀ ਹੋ ਸਕਦੀ ਹੈ।
+ਪਿਛਲੀ ਵਾਰ ਕੋਸ਼ਿਸ਼ ਕੀਤੀ ਗਈ ਡਾਟਾਬੇਸ ਪੁੱਛਗਿੱਛ ਇਹ ਸੀ:
+<blockquote><tt>$1</tt></blockquote>
+\'<tt>$2</tt>\'ਇਸ ਫ਼ੰਕਸ਼ਨ ਦੇ ਵਿਚੋਂ।
+MySQL ਨੇ \'<tt>$3: $4</tt>\'ਗਲਤੀ ਦਿਖਾਈ।',
+'dberrortextcl' => 'ਡਾਟਾਬੇਸ ਪੁੱਛਗਿੱਛ ਦੀ ਵਾਕ-ਰਚਨਾ ਵਿਚ ਕੋਈ ਗਲਤੀ ਹੋ ਗਈ ਹੈ।
+ਪਿਛਲੀ ਵਾਰ ਕੋਸ਼ਿਸ਼ ਕੀਤੀ ਗਈ ਡਾਟਾਬੇਸ ਪੁੱਛਗਿੱਛ ਇਹ ਸੀ:
+<blockquote><tt>$1</tt></blockquote>
+\'$2\'ਇਸ ਫ਼ੰਕਸ਼ਨ ਦੇ ਵਿਚੋਂ।
+MySQL ਨੇ \'$3: $4\'ਗਲਤੀ ਦਿਖਾਈ।\n',
+'noconnect'		=> 'ਮਾਫ਼ ਕਰਨਾ! ਵਿਕਿ ਨੂੰ ਕੁਝ ਤਕਨੀਕੀ ਮੁਸ਼ਕਲਾਂ ਦਾ ਸਾਹਮਣਾ ਕਰਨਾ ਪੈ ਰਿਹਾ ਹੈ, ਅਤੇ ਇਹ ਡਾਟਾਬੇਸ ਸਰਵਰ ਨਾਲ ਸੰਪਰਕ ਨਹੀਂ ਬਣਾ ਸਕਦਾ ਹੈ। <br />$1',
+'nodb'		=> 'ਡਾਟਾਬੇਸ $1 ਨੂੰ ਚੁਣ ਨਹੀਂ ਸਕਿਆ',
+'internalerror'	=> 'ਅੰਦਰੂਨੀ ਗਲਤੀ',
+'filecopyerror'	=> 'ਫ਼ਾਈਲ \'$1\' ਨੂੰ ਫ਼ਾਈਲ \'$2\' ਤੇ ਨਕਲ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ',
+'filerenameerror'	=> 'ਫ਼ਾਈਲ \'$1\' ਦਾ ਨਾਮ \'$2\' ਨਹੀਂ ਕੀਤਾ ਜਾ ਸੱਕਿਆ',
+'filedeleteerror'	=> 'ਫ਼ਾਈਲ \'$1\' ਨੂੰ ਨਹੀਂ ਹਟਾਇਆ ਜਾ ਸੱਕਿਆ',
+'filenotfound'	=> 'ਫ਼ਾਈਲ \'$1\' ਨਹੀਂ ਲੱਭੀ ਜਾ ਸਕੀ',
+'unexpected'		=> 'Unexpected value: \'$1\'=\'$2\'.',
+'formerror'		=> 'Error: could not submit form',
+'badarticleerror'	=> 'ਇਹ ਕਿਰਿਆ ਇਸ ਪੰਨੇ ਤੇ ਸੰਪੰਨ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕਦੀ',
+'cannotdelete'	=> 'ਪੰਨੇ ਜਾਂ ਤਸਵੀਰ ਨੂੰ ਨਹੀਂ ਹਟਾ ਸੱਕਿਆ ਗਿਆ (ਇਹ ਸ਼ਾਇਦ ਪਿਹਲਾਂ ਹੀ ਕਿਸੇ ਦੁਆਰਾ ਹਟਾ ਦਿੱਤਾ ਗਿਆ ਹੈ)',
+'badtitle'		=> 'ਗਲਤ ਸਿਰਲੇਖ',
+'viewsource'		=> 'ਸ੍ਰੋਤ ਦੇਖੋ',
+'protectedtext'	=> 'This page has been locked to prevent editing; there are
+a number of reasons why this may be so, please see
+[[{{ns:4}}:Protected page]].
+
+You can view and copy the source of this page:',
+
+# Login and logout pages
+#
+'logouttitle'		=> 'ਮੈਂਬਰ ਲਾਗ ਆਊਟ',
+'logouttext'		=> 'ਹੁਣ ਤੁਸੀਂ ਲਾਗ ਆਊਟ ਹੋ ਚੁੱਕੇ ਹੋ। ਹੁਣ ਤੁਸੀਂ ਅਗਿਆਤ ਰੂਪ ਵਿੱਚ
+ {{SITENAME}} ਦੀ ਵਰਤੋਂ ਕਰ ਸਕਦੇ ਹੋ ਜਾਂ ਓਹੀ ਮੈਂਬਰ
+ਜਾਂ ਕਿਸੇ ਹੋਰ ਮੈਂਬਰ ਦੇ ਰੂਪ ਵਿੱਚ ਲਾਗ ਇਨ ਕਰ ਸਕਦੇ ਹੋ।
+Note that some pages may continue to be displayed as if you were
+still logged in, until you clear your browser cache\n',
+
+'welcomecreation'	=> '== ਜੀ ਆਇਆਂ ਨੂੰ, $1! ==
+
+ਤੁਹਾਡਾ ਖਾਤਾ ਬਣਾ ਦਿੱਤਾ ਗਿਆ ਹੈ, ਆਪਣੀਆਂ {{SITENAME}} ਪਸੰਦਾਂ (preferences) ਨੂੰ ਬਦਲਣਾ ਨਾ ਭੁਲਣਾ।',
+
+'loginpagetitle'	=> 'ਮੈਂਬਰ ਲਾਗ ਇਨ',
+'yourname'		=> 'ਤੁਹਾਡਾ ਨਾਮ',
+'yourpassword'	=> 'ਤੁਹਾਡਾ ਪਾਸਵਰਡ',
+'yourpasswordagain'	=> 'ਪਾਸਵਰਡ ਦੌਬਾਰਾ ਲਿੱਖੋ',
+'remembermypassword'	=> 'ਅੱਗੋਂ ਲਈ ਮੇਰਾ ਪਾਸਵਰਡ ਯਾਦ ਰੱਖੋ',
+'loginproblem'	=> '<b>ਤੁਹਾਡੇ ਲਾਗ ਇਨ ਵਿੱਚ ਕੁਝ ਸਮੱਸਿਆ ਹੈ,</b><br />ਦੌਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ!',
+'alreadyloggedin'	=> '<strong>$1, ਤੁਸੀਂ ਪਿਹਲਾਂ ਹੀ ਲਾਗ ਇਨ ਹੋ ਚੁੱਕੇ ਹੋ!</strong><br />\n',
+
+'login'		=> 'ਲਾਗ ਇਨ',
+'loginprompt'		=> '{{SITENAME}} ਵਿਚ ਲਾੱਗ-ਇਨ ਕਰਨ ਲਈ ਤੁਹਾਡੀਆਂ cookies enabled ਹੋਣੀਆਂ ਚਾਹੀਦੀਆਂ ਹਨ।',
+'userlogin'		=> 'ਨਵਾਂ ਖਾਤਾ ਬਨਾਓ ਜਾਂ ਲਾਗ ਇਨ ਕਰੋ',
+'logout'		=> 'ਲਾਗ ਆਊਟ',
+'userlogout'		=> 'ਲਾਗ ਆਊਟ',
+'notloggedin'		=> 'ਲਾਗ ਇਨ ਨਹੀਂ ਹੈ',
+'createaccount'	=> 'ਨਵਾਂ ਖਾਤਾ ਬਣਾਓ',
+'createaccountmail'	=> 'ਈ-ਮੇਲ (email) ਰਾਹੀਂ',
+'badretype'		=> 'ਪਾਸਵਰਡ ਇਕ ਦੂਜੇ ਨਾਲ ਮੇਲ ਨਹੀਂ ਖਾਂਦੇ',
+'userexists'		=> 'ਇਹ ਨਾਮ ਪਿਹਲਾਂ ਹੀ ਵਰਤੋਂ ਵਿੱਚ ਹੈ, ਕਿਰਪਾ ਕਰਕੇ ਕਿਸੇ ਹੋਰ ਨਾਮ ਦੀ ਵਰਤੋਂ ਕਰੋ',
+'youremail'		=> '* ਤੁਹਾਡਾ ਈ-ਮੇਲ (email)',
+'yourrealname'	=> '* ਤੁਹਾਡਾ ਨਾਮ',
+'yourlanguage'	=> 'Interface language',
+'yourvariant'		=> 'Language variant',
+'yournick'		=> 'ਤੁਹਾਡਾ ਉਪਨਾਮ (ਦਸਤਖ਼ਤ ਲਈ)',
+'prefs-help-realname'	=> '* <strong>ਅਸਲੀ ਨਾਮ</strong> (ਗੈਰ-ਜ਼ਰੂਰੀ): ਜੇ ਤੁਸੀਂ ਭਰਦੇ ਹੋ, ਤਾਂ ਤੁਹਾਡੇ ਕੰਮ ਨੂੰ attribution ਦੇਣ ਲਈ ਵਰਤਿਆ ਜਾਵੇਗਾ<br />',
+'prefs-help-email'	=> '* <strong>ਈ-ਮੇਲ</strong> (ਗੈਰ-ਜ਼ਰੂਰੀ): ਜੇ ਭਰਦੇ ਹੋ ਤਾਂ ਬਿਨਾਂ ਤੁਹਾਡੇ ਅਸਲੀ ਈ-ਮੇਲ ਨੂੰ ਜਾਣੇ, ਇਸ website ਦੁਆਰਾ ਲੋਗ ਤੁਹਾਨੂੰ ਸੰਪੰਰਕ ਕਰ ਸਕਦੇ ਹਨ
+ਅਤੇ ਜੇ ਕਦੀ ਤੁਸੀਂ ਆਪਣਾ ਪਾਸਵਰਡ ਭੁੱਲ ਜਾਓ, ਤਾਂ ਇਸ ਈ-ਮੇਲ ਤੇ ਤੁਹਾਨੂੰ ਨਵਾਂ ਪਾਸਵਰਡ ਭੇਜਿਆ ਜਾ ਸਕਦਾ ਹੈ.',
+'loginerror'		=> 'ਲਾਗ ਇਨ ਵਿੱਚ ਗਲਤੀ',
+'noname'		=> 'ਤੁਸੀਂ ਮੈਂਬਰ ਦਾ ਨਾਮ ਸਹੀ ਨਹੀਂ ਦੱਸਿਆ.',
+'loginsuccesstitle'	=> 'ਲਾਗ ਇਨ ਕਾਮਯਾਬ ਰਿਹਾ',
+'loginsuccess'	=> 'ਹੁਣ ਤੁਸੀਂ {{SITENAME}} ਵਿੱਚ \'$1\' ਨਾਮ ਨਾਲ ਲਾਗ ਇਨ ਹੋ',
+'nosuchuser'		=> '\'$1\' ਨਾਮ ਦਾ ਕੋਈ ਮੈਂਬਰ ਨਹੀਂ ਹੈ.
+ਕਿਰਪਾ ਕਰਕੇ ਨਾਮ ਸਹੀ ਲਿੱਖੋ ਜਾਂ ਨੀਚੇ ਦਿੱਤੇ ਗਏ ਫ਼ਾਰਮ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਇੱਕ ਨਵਾਂ ਖਾਤਾ ਬਣਾ ਲਓ.',
+'wrongpassword'	=> 'ਦਿੱਤਾ ਗਿਆ ਪਾਸਵਰਡ ਗਲਤ ਹੈ, ਕਿਰਪਾ ਕਰਕੇ ਦੋਬਾਰਾ ਯਤਨ ਕਰੋ',
+'mailmypassword'	=> 'ਮੈਨੂੰ ਇੱਕ ਨਵਾਂ ਪਾਸਵਰਡ ਈ-ਮੇਲ ਰਾਹੀਂ ਭੇਜ ਦਿਓ',
+'passwordremindertitle'	=> '{{SITENAME}} ਵਲੋਂ ਪਾਸਵਰਡ ਯਾਦਦਹਾਣੀ-ਪੱਤ੍ਰ (Password Reminder from {{SITENAME}})',
+'passwordremindertext'	=> 'ਕਿਸੇ ਨੇ (ਸ਼ਾਯਿਦ ਤੁਸੀਂ ਹੀ, $1 IP address ਤੋਂ)
+ {{SITENAME}} ਲਾਗ ਇਨ ਦਾ ਨਵਾਂ ਪਾਸਵਰਡ ਭੇਜਣ ਦੀ ਮੰਗ ਕੀਤੀ ਸੀ.
+ਮੈਂਬਰ \'$1\' ਦਾ ਹੁਣ ਨਵਾਂ ਪਾਸਵਰਡ \'$3\' ਹੈ.
+ਕਿਰਪਾ ਕਰਕੇ {{SITENAME}} ਵਿੱਚ ਲਾਗ ਇਨ ਕਰਕੇ ਹੁਣੇ ਆਪਣਾ ਪਾਸਵਰਡ ਬਦਲ ਲਓ.\n<br /><br />
+Someone (probably you, from IP address $1)
+requested that we send you a new {{SITENAME}} login password.
+The password for user \'$2\' is now \'$3\'.
+You should log in and change your password now.',
+'noemail'		=> 'ਮੈਂਬਰ \'$1\' ਲਈ ਕੋਈ ਈ-ਮੇਲ ਅਡ੍ਰੈੱਸ ਨਹੀਂ ਹੈ',
+'passwordsent'	=> '\'$1\' ਮੈਂਬਰ ਦੇ ਈ-ਮੇਲ ਅਡ੍ਰੈੱਸ ਤੇ ਇੱਕ ਨਵਾਂ ਪਾਸਵਰਡ ਭੇਜ ਦਿੱਤਾ ਗਿਆ ਹੈ.
+ਪਾਸਵਰਡ ਮਿਲੱਣ ਤੋਂ ਬਾਅਦ ਕਿਰਪਾ ਲਾਗ ਇਨ ਜ਼ਰੂਰ ਕਰੋ.',
+'mailerror'		=> 'ਮੇਲ (mail) $1 ਭੇਜਣ ਵਿੱਚ ਸਮੱਸਿਆ ਆ ਗਈ ਹੈ',
+'acct_creation_throttle_hit'	=> 'ਮਾਫ਼ੀ ਚਾਹੁੰਦੇ ਹਾਂ, ਤੁਸੀਂ ਪਿਹਲਾਂ ਹੀ $1 ਖਾਤੇ ਬਣਾ ਚੁੱਕੇ ਹੋ. ਤੁਸੀਂ ਇਸਤੋਂ ਜ਼ਿਆਦਾ ਨਹੀਂ ਬਣਾ ਸੱਕਦੇ ਹੋ',
+
+# Edit page toolbar
+'bold_sample'		=>'ਬੋਲਡ ਅੱਖਰ',
+'bold_tip'		=>'ਬੋਲਡ ਅੱਖਰ',
+'italic_sample'	=>'ਇਟੈਲਿਕ ਅੱਖਰ',
+'italic_tip'		=>'ਇਟੈਲਿਕ ਅੱਖਰ',
+'link_sample'		=>'Link title',
+'link_tip'		=>'ਅੰਦਰੂਨੀ ਕੜੀ',
+'extlink_tip'		=>'ਬਾਹਰੀ ਕੜੀ (ਪਹਿਲਾਂ http:// ਲਗਾਉਣਾ ਯਾਦ ਰੱਖੋ)',
+'math_tip'		=>'ਗਣਿਤ ਦਾ ਫਾਰਮੂਲਾ (LaTeX)',
+
+# Edit pages
+#
+'summary'		=> 'ਸਾਰ',
+'subject'		=> 'ਵਿਸ਼ਾ',
+'minoredit'		=> 'ਇਹ ਇਕ ਮਾਮੂਲੀ ਬਦਲਾਵ ਹੈ',
+'watchthis'		=> 'ਇਸ ਪੰਨੇ ਤੇ ਨਜ਼ਰ ਰਖੋ',
+'savearticle'		=> 'ਪੱਕਾ ਕਰ ਦਿਓ',
+'preview'		=> 'ਝਲਕ',
+'showpreview'		=> 'ਝਲਕ ਦਿਖਾਓ',
+'blockedtitle'	=> 'ਮੈਂਬਰ ਤੇ ਰੋਕ ਲਗਾ ਦਿੱਤੀ ਗਈ ਹੈ',
+'blockedtext'		=> 'ਤੁਹਾਡੇ ਮੈਂਬਰ ਨਾਮ ਜਾਂ IP address ਉੱਤੇ $1 ਦੁਆਰਾ ਰੋਕ ਲਗਾ ਦਿੱਤੀ ਗਈ ਹੈ.
+ਕਾਰਣ ਹੈ:<br />\'\'$2\'\'<p>ਇਸ ਰੋਕ ਦੇ ਬਾਰੇ ਵਿੱਚ ਚਰਚਾ ਕਰਨ ਲਈ
+$1 ਜਾਂ ਕਿਸੇ ਵੀ ਹੋਰ [[{{ns:4}}:ਪ੍ਰਸ਼ਾਸਕ]]
+ਨੂੰ ਸੰਪੰਰਕ ਕਰੋ. ਧਿਆਨ ਦਿਓ ਕਿ ਤੁਸੀਂ ਓਹਨਾਂ ਚਿਰ \'ਇਸ ਮੈਂਬਰ ਨੂੰ ਈ-ਮੇਲ ਕਰੋ\' ਸੁਵੀਧਾ ਦੀ ਵਰਤੋਂ
+ਨਹੀਂ ਕਰ ਸਕਦੇ, ਜਦੋਂ ਤੱਕ ਕਿ ਤੁਸੀਂ [[Special:Preferences|preferences]]
+ਵਿੱਚ ਆਪਣਾ ਈ-ਮੇਲ ਨਹੀਂ ਦਿੰਦੇ. ਤੁਹਾਡਾ IP address ਹੈ $3.
+ਕਿਰਪਾ ਕਰਕੇ ਪੁਛ-ਗਿੱਛ ਕਰਦੇ ਵਕਤ ਇਸ IP address ਦੀ ਵਰਤੋਂ ਜ਼ਰੂਰ ਕਰੋ.',
+'whitelistedittitle'	=> 'ਬਦਲਾਵ ਕਰਨ ਲਈ ਲਾੱਗ-ਇਨ ਹੋਣਾ ਜ਼ਰੂਰੀ ਹੈ',
+'whitelistedittext'	=> 'ਤੁਹਾਨੂੰ ਲੇਖਾਂ ਵਿੱਚ ਬਦਲਾਵ ਕਰਨ ਲਈ [[Special:Userlogin|login]] ਕਰਨਾ ਜ਼ਰੂਰੀ ਹੈ',
+'whitelistreadtitle'	=> 'ਪੜ੍ਹਨ ਲਈ ਲਾੱਗ-ਇਨ ਕਰਨਾ ਜ਼ਰੂਰੀ ਹੈ',
+'whitelistreadtext'	=> 'ਤੁਹਾਨੂੰ ਲੇਖ ਪੜਨ ਲਈ [[Special:Userlogin|login]] ਕਰਨਾ ਜ਼ਰੂਰੀ ਹੈ',
+'whitelistacctitle'	=> 'ਤੁਹਾਨੂੰ ਖਾਤਾ ਬਨਾਓਣ ਦੀ ਅਨੁਮਤੀ ਨਹੀਂ ਹੈ',
+'whitelistacctext'	=> 'ਇਸ ਵਿਕਿ ਵਿੱਚ ਖਾਤਾ ਬਨਾਓਣ ਲਈ ਤੁਹਾਨੂੰ [[Special:Userlogin|login]] ਕਰਨਾ ਜ਼ਰੂਰੀ ਹੈ ਅਤੇ ਨਾਲ ਹੀ ਉਪ੍ਯੁਕਤ ਅਨੁਮਤੀ ਵੀ ਹੋਣੀ ਚਾਹੀਦੀ ਹੈ',
+'loginreqtitle'	=> 'ਲਾਗ ਇਨ ਜ਼ਰੂਰੀ ਹੈ',
+'loginreqpagetext'	=> 'ਬਾਕੀ ਦੇ ਲੇਖ ਵੇਖਣ ਲਈ $1 ਕਰਨਾ ਜ਼ਰੂਰੀ ਹੈ',
+'accmailtitle'	=> 'ਪਾਸਵਰਡ ਭੇਜ ਦਿੱਤਾ ਗਿਆ ਹੈ',
+'accmailtext'		=> '\'$1\' ਦਾ ਪਾਸਵਰਡ $2 ਨੂੰ ਭੇਜ ਦਿੱਤਾ ਗਿਆ ਹੈ',
+'newarticle'		=> '(ਨਵਾਂ ਲੇਖ)',
+'newarticletext'	=> '
+ਤੁਸੀਂ ਅਜੇਹੇ ਪੰਨੇ ਤੇ ਪੁੱਜ ਗਏ ਹੋ ਜੋ ਅਜੇ ਲਿੱਖਿਆ ਨਹੀਂ ਗਿਆ ਹੈ.
+ਜੇ ਤੁਸੀਂ ਇਸ ਪੰਨੇ ਨੂੰ ਬਨਾਣਾ ਚਾਹੁੰਦੇ ਹੋ, ਤਾਂ ਹੇਠਾਂ ਦਿੱਤੀ
+ਥਾਂ ਵਿੱਚ ਲਿੱਖਣਾ ਸ਼ੁਰੂ ਕਰ ਦਿਓ(ਹੋਰ ਜਾਣਕਾਰੀ ਲਈ ਵੇਖੋ [[Project:Help|help page]]).
+ਜੇ ਤੁਸੀਂ ਗਲਤੀ ਨਾਲ ਇੱਥੇ ਆ ਗਏ ਹੋ, ਤਾਂ ਆਪਣੇ browser ਦਾ \'\'\'back\'\'\' button ਦਬਾਓ',
+'noarticletext'	=> '(ਅਜੇ ਇਹ ਪੰਨਾ ਖਾਲੀ ਹੈ)',
+'usercssjsyoucanpreview'	=> '<strong>ਨਸੀਹਤ:</strong>CSS/JS ਵਿੱਚ ਕੀਤੇ ਗਏ ਬਦਲਾਵ  ਨੂੰ ਪੱਕਾ ਕਰਨ ਤੋਂ ਪਿਹਲਾਂ, \'ਝਲਕ ਦਿਖਾਓ\' button ਦਾ ਇਸਤੇਮਾਲ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ',
+'usercsspreview'	=> '\'\'\'ਯਾਦ ਰੱਖੋ ਕਿ ਤੁਸੀਂ ਆਪਣੀ CSS ਦੀ ਸਿਰਫ਼ ਝਲਕ ਵੇਖ ਰਹੇ ਹੋ, ਅਜੇ ਇਸਨੂੰ ਪੱਕਾ ਨਹੀਂ ਕੀਤਾ ਗਿਆ ਹੈ!\'\'\'',
+'userjspreview'	=> '\'\'\'ਯਾਦ ਰੱਖੋ ਕਿ ਤੁਸੀਂ ਆਪਣੀ javascript ਦੀ ਸਿਰਫ਼ ਝਲਕ ਵੇਖ ਰਹੇ ਹੋ, ਅਜੇ ਇਸਨੂੰ ਪੱਕਾ ਨਹੀਂ ਕੀਤਾ ਗਿਆ ਹੈ!\'\'\'',
+'updated'		=> '(ਅੱਪਡੇਟ (update) ਹੋ ਗਿਆ ਹੈ)',
+'note'		=> '<strong>ਧਿਆਨ ਦਿਓ:</strong>',
+'previewnote'		=> 'ਯਾਦ ਰੱਖੋ ਕਿ ਇਹ ਸਿਰਫ਼ ਇਕ ਝਲਕ ਹੈ, ਅਜੇ ਇਸਨੂੰ ਪੱਕਾ ਨਹੀਂ ਕੀਤਾ ਗਿਆ ਹੈ!',
+'editing'		=> 'ਬਦਲ ਰਹੇ ਹਾਂ: $1',
+'editinguser'		=> 'ਬਦਲ ਰਹੇ ਹਾਂ: $1',
+'editconflict'	=> 'ਬਦਲਾਵ ਮੱਤਭੇਦ: $1',
+'yourdiff'		=> 'ਅੰਤਰ (Differences)',
+
+# History pages
+#
+'revhistory'		=> 'ਸੋਧ ਦਾ ਇਤਿਹਾਸ',
+'nohistory'		=> 'ਇਸ ਪੰਨੇ ਲਈ ਤਬਦੀਲ਼ੀ ਦਾ ਕੋਈ ੲਤਿਹਾਸ ਨਹੀਂ ਹੈ.',
+'revnotfound'		=> 'ਸੋਧ ਨਹੀਂ ਮਿਲੀ',
+'loadhist'		=> 'ਪੰਨੇ ਦਾ ਇਤਿਹਾਸ ਲੋਡ ਹੋ ਰਿਹਾ ਹੈ',
+'currentrev'		=> 'ਮੌਜੂਦਾ ਸੰਸ਼ੋਧਨ',
+'cur'			=> 'ਮੌਜੂਦਾ',
+'next'		=> 'ਅਗਲਾ',
+'last'		=> 'ਪਿਛਲਾ',
+'orig'		=> 'ਅਸਲ',
+
+# Diffs
+#
+'editcurrent'		=> 'ਇਸ ਪੰਨੇ ਦੇ ਮੌਜੂਦਾ ਰੁਪਾਂਤਰ ਵਿਚ ਤਬਦੀਲੀ ਕਰੋ',
+'selectnewerversionfordiff'	=> 'ਆਪਸ ਵਿਚ ਮਿਲਾਉਣ ਲਈ ਨਵਾਂ ਰੁਪਾਂਤਰ ਚੁਣੋ',
+'selectolderversionfordiff'	=> 'ਆਪਸ ਵਿਚ ਮਿਲਾਉਣ ਲਈ ਪੁਰਾਣਾ ਰੁਪਾਂਤਰ ਚੁਣੋ',
+'compareselectedversions'	=> 'ਚੁਣੇ ਹੋਏ ਰਪਾਂਤਰਾਂ ਨੂੰ ਆਪਸ ਵਿਚ ਮਿਲਾਓ',
+
+# Search results
+#
+'searchdisabled'	=> '<p>ਮੁਆਫ਼ੀ ਚਾਹੁੰਦੇ ਹਾਂ! Full text search, performance reasons ਕਰਕੇ ਕੁੱਝ ਦੇਰ ਲਈ ਬੰਦ ਕਰ ਦਿੱਤੀ ਗਈ ਹੈ. ਇਸ ਦਰਮਿਆਨ, ਚਾਹੋ ਤਾਂ ਤੁਸੀਂ Google search ਦੀ ਵਰਤੋਂ ਕਰ ਸਕਦੇ ਹੋ, ਜੋ ਕਿ ਹੋ ਸਕਦਾ ਹੈ ਪੂਰਾਣੀ ਹੋ ਚੁੱਕੀ ਹੋਵੇ</p>',
+
+# Preferences page
+#
+'qbsettings-none'	=> 'ਕੋਈ ਨਹੀਂ',
+'qbsettings-fixedleft'	=> 'ਸਥਿਰ ਖੱਬੇ',
+'qbsettings-fixedright'	=> 'ਸਥਿਰ ਸੱਜਾ',
+'qbsettings-floatingleft'	=> 'ਤੈਰਦਾ ਖੱਬੇ',
+
+# Recent changes
+#
+'changes'		=> 'ਬਦਲਾਵ',
+'recentchanges'	=> 'ਹਾਲ ਵਿੱਚ ਹੋਏ ਬਦਲਾਵ',
+'rcnote'		=> 'ਪਿੱਛਲੇ <strong>$2</strong> ਦਿਨਾਂ ਵਿੱਚ ਹੋਏ <strong>$1</strong> ਬਦਲਾਵ:',
+'rclistfrom'		=> '$1 ਤੋਂ ਸ਼ੁਰੂ ਹੋਣ ਵਾਲੇ ਨਵੇਂ ਬਦਲਾਵ ਦਿਖਾਓ',
+'rclinks'		=> 'ਪਿੱਛਲੇ $2 ਦਿਨਾਂ ਵਿੱਚ ਹੋਏ $1 ਬਦਲਾਵ ਦਿਖਾਓ<br />$3',
+'hide'		=> 'ਛੁਪਾਓ',
+'show'		=> 'ਦਿਖਾਓ',
+
+# tooltip help for some actions, most are in Monobook.js
+'tooltip-watch'	=> 'ਇਸ ਪੰਨੇ ਨੂੰ ਆਪਣੀ watchlist ਵਿੱਚ ਜਮਾਂ ਕਰੋ[alt-w]',
+'tooltip-search'	=> 'ਇਸ ਵਿਕਿ ਵਿੱਚ ਲੱਭੋ',
+'tooltip-minoredit'	=> 'ਮਾਮੂਲੀ ਬਦਲਾਵ ਦੀ ਨਿਸ਼ਾਨੀ ਲਗਾਓ (Mark this as a minor edit)',
+'tooltip-save'	=> 'ਕੀਤੇ ਗਏ ਬਦਲਾਵ ਪੱਕੇ ਕਰੋ',
+'tooltip-preview'	=> 'ਕੀਤੇ ਗਏ ਬਦਲਾਵਾਂ ਦੀ ਝਲਕ ਵੇਖੋ, ਕਿਰਪਾ ਕਰਕੇ ਪੱਕਾ ਕਰਨ ਤੋਂ ਪਿਹਲਾਂ ਇਸਦੀ ਵਰਤੋਂ ਜ਼ਰੂਰ ਕਰੋ!',
+
+# Attribution
+
+'lastmodifiedatby'	=> 'ਇਹ ਪੰਨਾ ਅਖੀਰਲੀ ਵਾਰ $2, $1 ਨੂੰ $3 ਦੁਆਰਾ ਬਦਲਿਆ ਗਿਆ ਸੀ',
+'and'			=> 'ਅਤੇ',
+'othercontribs'	=> '$1 ਦੁਆਰਾ ਕੰਮ ਤੇ ਅਧਾਰਤ।',
+
+# Info page
+'infosubtitle'	=> 'ਪੰਨੇ ਸੰਬੰਧੀ ਸੂਚਨਾ',
+'numedits'		=> 'ਤਬਦੀਲੀਆਂ ਦੀ ਗਿਣਤੀ (ਲੇਖ ਵਿਚਾਲੇ):',
+'numtalkedits'	=> 'ਤਬਦੀਲੀਆਂ ਦੀ ਗਿਣਤੀ (ਚਰਚਾ-ਪੰਨੇ ਵਿਚਾਲੇ):',
+);
+
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesPi.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesPi.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesPi.php	(revision 1280)
@@ -0,0 +1,20 @@
+<?php
+/** Pali (पािऴ)
+  *
+  * @addtogroup Language
+  */
+
+$digitTransformTable = array(
+	'0' => '०',
+	'1' => '१',
+	'2' => '२',
+	'3' => '३',
+	'4' => '४',
+	'5' => '५',
+	'6' => '६',
+	'7' => '७',
+	'8' => '८',
+	'9' => '९',
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesPl.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesPl.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesPl.php	(revision 1280)
@@ -0,0 +1,2056 @@
+<?php
+/** Polish (Polski)
+ *
+ * @addtogroup Language
+ */
+
+$namespaceNames = array(
+	NS_MEDIA            => 'Media',
+	NS_SPECIAL          => 'Specjalna',
+	NS_MAIN             => '',
+	NS_TALK             => 'Dyskusja',
+	NS_USER             => 'Użytkownik',
+	NS_USER_TALK        => 'Dyskusja_użytkownika',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK     => 'Dyskusja_$1',
+	NS_IMAGE            => 'Grafika',
+	NS_IMAGE_TALK       => 'Dyskusja_grafiki',
+	NS_MEDIAWIKI        => 'MediaWiki',
+	NS_MEDIAWIKI_TALK   => 'Dyskusja_MediaWiki',
+	NS_TEMPLATE         => 'Szablon',
+	NS_TEMPLATE_TALK    => 'Dyskusja_szablonu',
+	NS_HELP             => 'Pomoc',
+	NS_HELP_TALK        => 'Dyskusja_pomocy',
+	NS_CATEGORY         => 'Kategoria',
+	NS_CATEGORY_TALK    => 'Dyskusja_kategorii'
+);
+
+$skinNames = array(
+	'standard'	=> 'Standardowa',
+);
+
+$dateFormats = array(
+	'mdy time' => 'H:i',
+	'mdy date' => 'M j, Y',
+	'mdy both' => 'H:i, M j, Y',
+
+	'dmy time' => 'H:i',
+	'dmy date' => 'j M Y',
+	'dmy both' => 'H:i, j M Y',
+
+	'ymd time' => 'H:i',
+	'ymd date' => 'Y M j',
+	'ymd both' => 'H:i, Y M j',
+);
+
+$fallback8bitEncoding = 'iso-8859-2';
+$separatorTransformTable = array(
+	',' => "\xc2\xa0", // @bug 2749
+	'.' => ','
+);
+$linkTrail = '/^([a-zęóąśłżźćńĘÓĄŚŁŻŹĆŃ]+)(.*)$/sDu';
+
+$specialPageAliases = array(
+        'DoubleRedirects'           => array( 'Podwójne_przekierowania' ),
+        'BrokenRedirects'           => array( 'Zerwane_przekierowania' ),
+        'Disambiguations'           => array( 'Ujednoznacznienia' ),
+        'Userlogin'                 => array( 'Zaloguj' ),
+        'Userlogout'                => array( 'Wyloguj' ),
+        'Preferences'               => array( 'Preferencje' ),
+        'Watchlist'                 => array( 'Obserwowane' ),
+        'Recentchanges'             => array( 'Ostatnie_zmiany', 'OZ' ),
+        'Upload'                    => array( 'Prześlij' ),
+        'Imagelist'                 => array( 'Pliki' ),
+        'Newimages'                 => array( 'Nowe_pliki' ),
+        'Listusers'                 => array( 'Użytkownicy' ),
+        'Statistics'                => array( 'Statystyka' ),
+        'Randompage'                => array( 'Losowa_strona', 'Losowa' ),
+        'Lonelypages'               => array( 'Porzucone_strony' ),
+        'Uncategorizedpages'        => array( 'Nieskategoryzowane_strony' ),
+        'Uncategorizedcategories'   => array( 'Nieskategoryzowane_kategorie' ),
+        'Uncategorizedimages'       => array( 'Nieskategoryzowane_pliki' ),
+        'Unusedcategories'          => array( 'Nieużywane_kategorie' ),
+        'Unusedimages'              => array( 'Nieużywane_pliki' ),
+        'Wantedpages'               => array( 'Potrzebne_strony' ),
+        'Wantedcategories'          => array( 'Potrzebne_kategorie' ),
+        'Mostlinked'                => array( 'Najczęściej_linkowane' ),
+        'Mostlinkedcategories'      => array( 'Najczęściej_linkowane_kategorie' ),
+        'Mostcategories'            => array( 'Najwięcej_kategorii' ),
+        'Mostimages'                => array( 'Najczęściej_linkowane_pliki' ),
+        'Mostrevisions'             => array( 'Najczęściej_edytowane' ),
+        'Shortpages'                => array( 'Najkrótsze_strony' ),
+        'Longpages'                 => array( 'Najdłuższe_strony' ),
+        'Newpages'                  => array( 'Nowe_strony' ),
+        'Ancientpages'              => array( 'Stare_strony' ),
+        'Deadendpages'              => array( 'Bez_linków' ),
+        'Allpages'                  => array( 'Wszystkie_strony' ),
+        'Prefixindex'               => array( 'Strony_według_prefiksu' ) ,
+        'Ipblocklist'               => array( 'Zablokowani' ),
+        'Specialpages'              => array( 'Strony_specjalne' ),
+        'Contributions'             => array( 'Wkład' ),
+        'Emailuser'                 => array( 'E-Mail' ),
+        'Whatlinkshere'             => array( 'Linkujące' ),
+        'Recentchangeslinked'       => array( 'Zmiany_w_linkujących' ),
+        'Movepage'                  => array( 'Przenieś' ),
+        'Booksources'               => array( 'Książki' ),
+        'Categories'                => array( 'Kategorie' ),
+        'Export'                    => array( 'Eksport' ),
+        'Version'                   => array( 'Wersja' ),
+        'Allmessages'               => array( 'Wszystkie_komunikaty' ),
+        'Log'                       => array( 'Rejestr', 'Logi' ),
+        'Blockip'                   => array( 'Blokuj' ),
+        'Undelete'                  => array( 'Odtwórz' ),
+        'Lockdb'                    => array( 'Zablokuj_bazę' ),
+        'Unlockdb'                  => array( 'Odblokuj_bazę' ),
+        'Userrights'                => array( 'Prawa_użytkowników' ),
+        'MIMEsearch'                => array( 'Wyszukiwanie_MIME' ),
+        'Unwatchedpages'            => array( 'Nieobserwowane_strony' ),
+        'Listredirects'             => array( 'Przekierowania' ),
+        'Revisiondelete'            => array( 'Usuń_wersję' ),
+        'Unusedtemplates'           => array( 'Nieużywane_szablony' ),
+        'Randomredirect'            => array( 'Losowe_przekierowanie' ),
+        'Mypage'                    => array( 'Moja_strona' ),
+        'Mytalk'                    => array( 'Moja_dyskusja' ),
+        'Mycontributions'           => array( 'Mój_wkład' ),
+        'Listadmins'                => array( 'Administratorzy' ),
+        'Search'                    => array( 'Szukaj' ),
+);
+
+$messages = array(
+
+# User preference toggles
+'tog-underline' => 'Podkreślenie linków:',
+'tog-highlightbroken' => '<a href="" class="new">Podświetl</a> linki pustych stron (alternatywa: znak zapytania<a href="" class="internal">?</a>).',
+'tog-justify' => 'Wyrównuj tekst w akapitach do obu stron',
+'tog-hideminor' => 'Ukryj drobne zmiany w "Ostatnich zmianach"',
+'tog-extendwatchlist' => 'Rozszerzona lista obserwowanych',
+'tog-usenewrc' => 'Rozszerzenie ostatnich zmian (JavaScript)',
+'tog-numberheadings' => 'Automatyczna numeracja nagłówków',
+'tog-showtoolbar' => 'Pokaż pasek narzędzi (JavaScript)',
+'tog-editondblclick' => 'Podwójne kliknięcie rozpoczyna edycję (JavaScript)',
+'tog-editsection' => 'Możliwość edycji poszczególnych sekcji strony',
+'tog-editsectiononrightclick' => 'Kliknięcie prawym klawiszem na tytule sekcji<br />rozpoczyna jej edycję (JavaScript)',
+'tog-showtoc' => 'Pokaż spis treści (na stronach zawierających więcej niż 3 nagłówki)',
+'tog-rememberpassword' => 'Pamiętaj hasło między sesjami',
+'tog-editwidth' => 'Obszar edycji o pełnej szerokości',
+'tog-watchcreations' => 'Dodaj tworzone przeze mnie strony do obserwowanych',
+'tog-watchdefault' => 'Obserwuj strony, które będę edytować',
+'tog-watchmoves' => 'Obserwuj strony, które będę przenosić',
+'tog-watchdeletion' => 'Obserwuj strony, które będę usuwać',
+'tog-minordefault' => 'Wszystkie zmiany zaznaczaj domyślnie jako drobne',
+'tog-previewontop' => 'Pokazuj podgląd przed obszarem edycji',
+'tog-previewonfirst' => 'Pokaż podgląd strony podczas pierwszej edycji',
+'tog-nocache' => 'Wyłącz pamięć podręczną',
+'tog-enotifwatchlistpages' => 'Wyślij e-mail kiedy obserwowana przeze mnie strona ulegnie zmianie',
+'tog-enotifusertalkpages' => 'Wyślij e-mail kiedy moja strona dyskusji ulegnie zmianie',
+'tog-enotifminoredits' => 'Wyślij e-mail także w przypadku drobnych zmian na stronach',
+'tog-enotifrevealaddr' => 'Ujawnij mój adres e-mail w zawiadomieniach',
+'tog-shownumberswatching' => 'Pokaż liczbę obserwujących użytkowników',
+'tog-fancysig' => 'Podpis bez automatycznego linku',
+'tog-externaleditor' => 'Domyślnie używaj zewnętrznego edytora',
+'tog-externaldiff' => 'Domyślnie używaj zewnętrznego programu pokazującego zmiany',
+'tog-showjumplinks' => 'Włącz odnośniki "skocz do"',
+'tog-uselivepreview' => 'Używaj dynamicznego podglądu (JavaScript) (eksperymentalna)',
+'tog-forceeditsummary' => 'Informuj o niewypełnieniu pola opisu zmian',
+'tog-watchlisthideown' => 'Ukryj moje edycje w obserwowanych',
+'tog-watchlisthidebots' => 'Ukryj edycje botów w obserwowanych',
+'tog-watchlisthideminor' => 'Ukryj drobne zmiany w obserwowanych',
+'tog-nolangconversion' => 'Disable variants conversion',
+'tog-ccmeonemails' => 'Przesyłaj mi kopie wiadomości wysłanych do innych użytkowników',
+'tog-diffonly' => "Nie pokazuj treści stron pod porównaniami zmian",
+
+'underline-always' => 'Zawsze',
+'underline-never' => 'Nigdy',
+'underline-default' => 'Ustawienia przeglądarki',
+
+'skinpreview' => '(podgląd)',
+
+# dates
+'sunday' => 'niedziela',
+'monday' => 'poniedziałek',
+'tuesday' => 'wtorek',
+'wednesday' => 'środa',
+'thursday' => 'czwartek',
+'friday' => 'piątek',
+'saturday' => 'sobota',
+'sun' => 'Nie',
+'mon' => 'Pon',
+'tue' => 'Wto',
+'wed' => 'Śro',
+'thu' => 'Czw',
+'fri' => 'Pią',
+'sat' => 'Sob',
+'january' => 'styczeń',
+'february' => 'luty',
+'march' => 'marzec',
+'april' => 'kwiecień',
+'may_long' => 'maj',
+'june' => 'czerwiec',
+'july' => 'lipiec',
+'august' => 'sierpień',
+'september' => 'wrzesień',
+'october' => 'październik',
+'november' => 'listopad',
+'december' => 'grudzień',
+'january-gen' => 'stycznia',
+'february-gen' => 'lutego',
+'march-gen' => 'marca',
+'april-gen' => 'kwietnia',
+'may-gen' => 'maja',
+'june-gen' => 'czerwca',
+'july-gen' => 'lipca',
+'august-gen' => 'sierpnia',
+'september-gen' => 'września',
+'october-gen' => 'października',
+'november-gen' => 'listopada',
+'december-gen' => 'grudnia',
+'jan' => 'sty',
+'feb' => 'lut',
+'mar' => 'mar',
+'apr' => 'kwi',
+'may' => 'maj',
+'jun' => 'cze',
+'jul' => 'lip',
+'aug' => 'sie',
+'sep' => 'wrz',
+'oct' => 'paź',
+'nov' => 'lis',
+'dec' => 'gru',
+
+# Bits of text used by many pages:
+#
+'categories' => 'Kategorie',
+'pagecategories' => '{{PLURAL:$1|Kategoria|Kategorie}}',
+'category_header' => 'Artykuły w kategorii "$1"',
+'subcategories' => 'Podkategorie',
+'category-media-header' => 'Pliki w kategorii "$1"',
+
+'mainpage' => 'Strona główna',
+'mainpagetext' => "<big>'''Instalacja MediaWiki powiodła się.'''</big>",
+'mainpagedocfooter' => 'Zobacz [http://meta.wikimedia.org/wiki/Help:Contents przewodnik użytkownika] w celu uzyskania informacji o działaniu oprogramowania wiki.
+
+== Na początek ==
+
+* [http://www.mediawiki.org/wiki/Help:Configuration_settings Lista ustawień konfiguracyjnych]
+* [http://www.mediawiki.org/wiki/Help:FAQ MediaWiki FAQ]
+* [http://mail.wikimedia.org/mailman/listinfo/mediawiki-announce Ogłoszenia o wydaniach MediaWiki]',
+
+'portal' => 'Portal użytkowników',
+'portal-url' => '{{ns:Project}}:Portal użytkowników',
+'about' => 'O serwisie',
+'aboutsite' => 'O serwisie {{SITENAME}}',
+'aboutpage' => '{{ns:Project}}:O serwisie',
+'article' => 'Artykuł',
+'help' => 'Pomoc',
+'helppage' => '{{ns:Project}}:Pomoc',
+'bugreports' => 'Raport o błędach',
+'bugreportspage' => '{{ns:Project}}:Błędy',
+'sitesupport' => 'Dary pieniężne',
+'sitesupport-url' => '{{ns:Project}}:Dary pieniężne',
+'faq' => 'FAQ',
+'faqpage' => '{{ns:Project}}:FAQ',
+'edithelp' => 'Pomoc w edycji',
+'newwindow' => '(otwiera się w nowym oknie)',
+'edithelppage' => '{{ns:Project}}:Jak edytować stronę',
+'cancel' => 'Anuluj',
+'qbfind' => 'Znajdź',
+'qbbrowse' => 'Przeglądanie',
+'qbedit' => 'Edycja',
+'qbpageoptions' => 'Ta strona',
+'qbpageinfo' => 'Kontekst',
+'qbmyoptions' => 'Moje strony',
+'qbspecialpages' => 'Strony specjalne',
+'moredotdotdot' => 'Więcej...',
+'mypage' => 'Moja strona',
+'mytalk' => 'Moja dyskusja',
+'anontalk' => 'Dyskusja tego IP',
+'navigation' => 'Nawigacja',
+
+# Metadata in edit box
+'metadata_help' => 'Metadane (zobacz [[{{ns:Project}}:Metadane]]):',
+
+'currentevents' => 'Bieżące wydarzenia',
+'currentevents-url' => 'Bieżące wydarzenia',
+
+'disclaimers' => 'Informacje prawne',
+'disclaimerpage' => '{{ns:Project}}:Informacje_prawne',
+'privacy' => 'Zasady ochrony prywatności',
+'privacypage' => '{{ns:Project}}:Zasady ochrony prywatności',
+'errorpagetitle' => 'Błąd',
+'returnto' => 'Wróć do strony $1.',
+'help' => 'Pomoc',
+'search' => 'Szukaj',
+'searchbutton' => 'Szukaj',
+'go' => 'Przejdź',
+'searcharticle' => 'Przejdź',
+'history' => 'Historia strony',
+'history_short' => 'Historia',
+'updatedmarker' => 'zmienione od ostatniej wizyty',
+'info_short' => 'Informacja',
+'printableversion' => 'Wersja do druku',
+'permalink' => 'Bezpośredni link',
+'print' => 'Drukuj',
+'edit' => 'Edytuj',
+'editthispage' => 'Edytuj tę stronę',
+'delete' => 'Usuń',
+'deletethispage' => 'Usuń tę stronę',
+'undelete_short' => 'Odtwórz {{PLURAL:$1|jedną wersję|$1 wersji}}',
+'protect' => 'Zabezpiecz',
+'protectthispage' => 'Zabezpiecz tę stronę',
+'unprotect' => 'Odbezpiecz',
+'unprotectthispage' => 'Odbezpiecz tę stronę',
+'newpage' => 'Nowa strona',
+'talkpage' => 'Dyskusja',
+'specialpage' => 'Strona specjalna',
+'personaltools' => 'Osobiste',
+'postcomment' => 'Skomentuj',
+'articlepage' => 'Strona artykułu',
+'talk' => 'Dyskusja',
+'views' => 'Widok',
+'toolbox' => 'Narzędzia',
+'userpage' => 'Strona użytkownika',
+'projectpage' => 'Strona projektu',
+'imagepage' => 'Strona grafiki',
+'mediawikipage' => 'Strona komunikatu',
+'templatepage' => 'Strona szablonu',
+'viewhelppage' => 'Strona pomocy',
+'categorypage' => 'Strona kategorii',
+'viewtalkpage' => 'Strona dyskusji',
+'otherlanguages' => 'W innych językach',
+'redirectedfrom' => '(Przekierowano z $1)',
+'redirectpagesub' => 'Strona przekierowująca',
+'lastmodifiedat' => 'Tę stronę ostatnio zmodyfikowano $2, $1.',
+'viewcount' => 'Tę stronę obejrzano {{plural:$1|jeden raz|$1 razy}}.',
+'copyright' => 'Tekst udostępniany na licencji $1.',
+'protectedpage' => 'Strona zabezpieczona',
+'jumpto' => 'Skocz do:',
+'jumptonavigation' => 'nawigacji',
+'jumptosearch' => 'wyszukiwania',
+
+'badaccess' => 'Nieprawidłowe uprawnienia',
+'badaccess-group0' => 'Nie masz uprawnień wymaganych do wykonania tej operacji.',
+'badaccess-group1' => 'Wykonywanie tej operacji zostało ograniczone do użytkowników w grupie $1.',
+'badaccess-group2' => 'Wykonywanie tej operacji zostało ograniczone do użytkowników w jednej z grup $1.',
+'badaccess-groups' => 'Wykonywanie tej operacji zostało ograniczone do użytkowników w jednej z grup $1.',
+
+'versionrequired' => 'Wymagana MediaWiki w wersji $1',
+'versionrequiredtext' => 'Wymagana jest MediaWiki w wersji $1 aby skorzystać z tej strony. Zobacz [[Special:Version]]',
+
+'ok' => 'OK',
+'pagetitle'		=> '$1 - {{SITENAME}}',
+'retrievedfrom' => 'Źródło: "$1"',
+'youhavenewmessages' => 'Masz $1 ($2).',
+'newmessageslink' => 'nowe wiadomości',
+'newmessagesdifflink' => 'różnica z poprzednią wersją',
+'editsection' => 'edytuj',
+'editold' => 'edytuj',
+'editsectionhint' => 'Edytuj sekcję: $1',
+'toc' => 'Spis treści',
+'showtoc' => 'pokaż',
+'hidetoc' => 'ukryj',
+'thisisdeleted' => 'Pokaż/odtwórz $1',
+'viewdeleted' => 'Zobacz $1',
+'restorelink' => '{{PLURAL:$1|jedną skasowaną wersję|skasowane wersje (w sumie $1)}}',
+'feedlinks' => 'Kanały:',
+'feed-invalid' => 'Niewłaściwy typ kanału informacyjnego.',
+
+# Short words for each namespace, by default used in the 'article' tab in monobook
+'nstab-main' => 'Artykuł',
+'nstab-user' => 'Strona użytkownika',
+'nstab-media' => 'Media',
+'nstab-special' => 'Strona specjalna',
+'nstab-project' => 'Strona projektu',
+'nstab-image' => 'Plik',
+'nstab-mediawiki' => 'Komunikat',
+'nstab-template' => 'Szablon',
+'nstab-help' => 'Strona pomocy',
+'nstab-category' => 'Kategoria',
+
+# Main script and global functions
+#
+'nosuchaction' => 'Nie ma takiej operacji',
+'nosuchactiontext' => 'Oprogramowanie nie rozpoznaje operacji takiej jak podana w URL',
+'nosuchspecialpage' => 'Nie ma takiej strony specjalnej',
+'nospecialpagetext' => 'Oprogramowanie nie rozpoznaje takiej specjalnej strony. Listę stron specjalnych znajdziesz na [[{{ns:Special}}:Specialpages]]',
+
+# General errors
+#
+'error' => 'Błąd',
+'databaseerror' => 'Błąd bazy danych',
+'dberrortext' => 'Wystąpił błąd składni w zapytaniu do bazy danych.
+Ostatnie, nieudane zapytanie to:
+<blockquote><tt>$1</tt></blockquote>
+wysłane przez funkcję "<tt>$2</tt>".
+MySQL zgłosił błąd "<tt>$3: $4</tt>".',
+'dberrortextcl' => 'Wystąpił błąd składni w zapytaniu do bazy danych.
+Ostatnie, nieudane zapytanie to:
+"$1"
+wywołane zostało przez funkcję "$2".
+MySQL zgłosił błąd "$3: $4"',
+'noconnect' => 'Przepraszamy! {{SITENAME}} ma chwilowo problemy techniczne. Nie można połączyć się z serwerem bazy danych.<br />$1',
+'nodb' => 'Nie można odnaleźć bazy danych $1',
+'cachederror' => 'Poniższy tekst strony jest kopią znajdującą się w pamięci podręcznej i może być już nieaktualny.',
+'laggedslavemode' => 'Uwaga: Ta strona może nie zawierać najnowszych aktualizacji.',
+'readonly' => 'Baza danych jest zablokowana',
+'enterlockreason' => 'Podaj powód zablokowania bazy oraz szacunkowy czas jej odblokowania',
+'readonlytext' => 'Baza danych jest w tej chwili zablokowana
+- nie można wprowadzać nowych artykułów ani modyfikować istniejących. Powodem
+są prawdopodobnie czynności administracyjne. Po ich zakończeniu przywrócona
+zostanie pełna funkcjonalność bazy.
+Administrator, który zablokował bazę, podał następujące wyjaśnienie:<br /> $1',
+'missingarticle' => 'Oprogramowanie nie odnalazło tekstu strony, która powinna się znajdować w bazie, tzn. strony "$1".
+
+Zazwyczaj zdarza się to, gdy wybrane zostanie łącze do skasowanej strony, np. w starszej wersji innej ze stron.
+
+Inne okoliczności świadczyłyby o tym, że w oprogramowaniu jest błąd. W takim przypadku zgłoś, proszę, ten fakt
+administratorowi podając także powyższy adres.',
+'readonly_lag' => 'Baza danych została automatycznie zablokowana na czas potrzebny na synchronizację zmian między serwerem głównym i serwerami pośredniczącymi.',
+'internalerror' => 'Błąd wewnętrzny',
+'filecopyerror' => 'Nie można skopiować pliku "$1" do "$2".',
+'filerenameerror' => 'Nie można zmienić nazwy pliku "$1" na "$2".',
+'filedeleteerror' => 'Nie można skasować pliku "$1".',
+'filenotfound' => 'Nie można znaleźć pliku "$1".',
+'unexpected' => 'Niespodziewana wartość: "$1"="$2".',
+'formerror' => 'Błąd: nie można wysłać formularza',
+'badarticleerror' => 'Dla tej strony ta operacja nie może być wykonana.',
+'cannotdelete' => 'Nie można skasować podanej strony lub obrazka.',
+'badtitle' => 'Niepoprawny tytuł',
+'badtitletext' => 'Podano niepoprawny tytuł strony. Prawdopodobnie zawiera znaki, których użycie jest zabronione lub jest pusty.',
+'perfdisabled' => 'Przepraszamy! By odciążyć serwer w godzinach szczytu czasowo zablokowaliśmy wykonanie tej czynności.',
+'perfdisabledsub' => 'Zapisana kopia znajduje się w $1:', # obsolete?
+'perfcached' => 'Poniższe dane są kopią z pamięci podręcznej i mogą nie być do końca aktualne.',
+'perfcachedts' => 'Poniższe dane są kopią z pamięci podręcznej i zostały uaktualnione $1.',
+'querypage-no-updates' => 'Uaktualnienia dla tej strony są obecnie wyłączone. Znajdujące się tutaj dane nie zostaną odświeżone.',
+'wrong_wfQuery_params' => 'Nieprawidłowe parametry przekazane do wfQuery()<br />
+Funkcja: $1<br />
+Zapytanie: $2',
+'viewsource' => 'Tekst źródłowy',
+'viewsourcefor' => 'dla $1',
+
+'protectedpagetext' => 'Wyłączono możliwość edycji tej strony.',
+'viewsourcetext' => 'Tekst źródłowy strony można w dalszym ciągu podejrzeć i skopiować.',
+'protectedinterface' => 'Ta strona zawiera tekst interfejsu oprogramowania, dlatego możliwość jej edycji została zablokowana.',
+'editinginterface' => "'''Ostrzeżenie:''' Edytujesz stronę, która zawiera tekst interfejsu oprogramowania. Zmiany na tej stronie zmienią wygląd interfejsu dla innych użytkowników.",
+'sqlhidden' => '(ukryto zapytanie SQL)',
+'cascadeprotected' => 'Ta strona została zabezpieczona przed edycją, ponieważ jest ona zawarta na następujących stronach, które zostały zabezpieczone z włączoną opcją dziedziczenia:',
+
+# Login and logout pages
+#
+'logouttitle' => 'Wylogowanie użytkownika',
+'logouttext' => '<strong>Wylogowano Cię</strong>.<br />Możesz kontynuować pracę jako niezarejestrowany użytkownik albo zalogować się ponownie jako ten sam lub inny użytkownik.',
+
+'welcomecreation' => '== Witaj, $1! ==
+
+Właśnie utworzyliśmy dla Ciebie konto. Nie zapomnij dostosować [[{{ns:Special}}:Preferences|preferencji]].',
+
+'loginpagetitle' => 'Logowanie',
+'yourname' => 'Login',
+'yourpassword' => 'Hasło',
+'yourpasswordagain' => 'Powtórz hasło',
+'remembermypassword' => 'Zapamiętaj moje hasło na tym komputerze',
+'yourdomainname' => 'Twoja domena',
+'externaldberror' => 'Wystąpił błąd zewnętrznej bazy autentyfikacyjnej lub nie posiadasz uprawnień koniecznych do aktualizacji zewnętrznego konta.',
+'loginproblem' => '<b>Wystąpił problem przy próbie zalogowania się.</b><br />Spróbuj ponownie!',
+'alreadyloggedin' => '<strong>$1, jesteś już zalogowany!</strong><br />',
+
+'login' => 'Zaloguj mnie',
+'loginprompt' => 'Musisz mieć włączone cookies by móc się zalogować.',
+'userlogin' => 'Logowanie / rejestracja',
+'logout' => 'Wyloguj mnie',
+'userlogout' => 'Wylogowanie',
+'notloggedin' => 'Brak logowania',
+'nologin' => 'Nie masz konta? $1.',
+'nologinlink' => 'Zarejestruj się',
+'createaccount' => 'Załóż nowe konto',
+'gotaccount' => 'Masz już konto? $1.',
+'gotaccountlink' => 'Zaloguj się',
+'createaccountmail' => 'przez e-mail',
+'badretype' => 'Wprowadzone hasła różnią się między sobą.',
+'userexists' => 'Wybrana przez Ciebie nazwa użytkownika jest już zajęta. Wybierz, proszę, inną.',
+'youremail' => 'Twój E-mail *',
+'username' => 'Nazwa użytkownika:',
+'uid' => 'ID użytkownika:',
+'yourrealname' => 'Imię i nazwisko *',
+'yourlanguage' => 'Język interfejsu',
+'yourvariant' => 'Wariant',
+'yournick' => 'Twój podpis',
+'badsig' => 'Błędny podpis, sprawdź tagi HTML.',
+'email' => 'E-mail',
+'prefs-help-email-enotif' => 'Ten adres jest także używany do wysyłania powiadomień, jeśli włączysz tę opcję.',
+'prefs-help-realname' => '* Imię i nazwisko (opcjonalnie): jeśli zdecydujesz się je podać, zostaną użyte, aby zapewnić Twojej pracy atrybucję.',
+'loginerror' => 'Błąd logowania',
+'prefs-help-email' => '* E-mail (opcjonalnie): Podanie e-maila pozwala innym skontaktować się z tobą za pośrednictwem twojej strony użytkownika
+lub twojej strony dyskusji bez potrzeby ujawniania twoich danych identyfikacyjnych.',
+'nocookiesnew' => 'Konto użytkownika zostało utworzone, ale nie jesteś zalogowany. {{SITENAME}} używa ciasteczek do logowania. Masz wyłączone ciasteczka. Żeby się zalogować odblokuj ciasteczka i podaj nazwę i hasło swojego konta.',
+'nocookieslogin' => '{{SITENAME}} używa ciasteczek żeby zalogować użytkownika. Masz zablokowaną obsługę ciasteczek. Spróbuj ponownie po ich odblokowaniu.',
+'noname' => 'To nie jest poprawna nazwa użytkownika.',
+'loginsuccesstitle' => 'Udane logowanie',
+'loginsuccess' => 'Zalogowano Cię do serwisu {{SITENAME}} jako "$1".',
+'nosuchuser' => 'Nie ma użytkownika nazywającego się "$1". Sprawdź pisownię lub użyj poniższego formularza by utworzyć nowe konto.',
+'nosuchusershort' => 'Nie ma użytkownika nazywającego się "$1".',
+'nouserspecified' => 'Musisz podać nazwę użytkownika.',
+'wrongpassword' => 'Podane przez Ciebie hasło jest nieprawidłowe. Spróbuj jeszcze raz.',
+'wrongpasswordempty' => 'Wprowadzone hasło jest puste. Spróbuj ponownie.',
+'mailmypassword' => 'Wyślij mi nowe hasło',
+'passwordremindertitle' => 'Przypomnienie hasła w serwisie {{SITENAME}}',
+'passwordremindertext' => 'Ktoś (prawdopodobnie Ty, spod adresu $1)
+poprosił od nas o wysłanie nowego hasła dostępu do serwisu
+{{SITENAME}} ($4).
+Aktualne hasło dla użytkownika "$2" to "$3".
+Najlepiej będzie jak zalogujesz się teraz i od razu zmienisz hasło.',
+'noemail' => 'W bazie nie ma adresu e-mailowego dla użytkownika "$1".',
+'passwordsent' => 'Nowe hasło zostało wysłane na adres e-mailowy użytkownika "$1". Po otrzymaniu go zaloguj się ponownie.',
+'blocked-mailpassword' => 'Twój adres IP został zablokowany i nie możesz używać funkcji odzyskiwania hasła z powodu możliwości jej nadużywania.',
+'eauthentsent' => 'Potwierdzenie zostało wysłane na adres e-mail.
+Nim jakiekolwiek wiadomości zostaną wysłane na ten adres, należy wypełnić zawarte w nim instrukcje, by potwierdzić Twoją własność e-maila.',
+'throttled-mailpassword' => 'Przypomnienie hasła zostało już wysłane w ciągu ostatnich $1 godzin.
+W celu powstrzymania nadużyć możliwość wysyłania przypomnień została ograniczona do jednego na $1 godziny.',
+'mailerror' => 'Przy wysyłaniu e-maila nastąpił błąd: $1',
+'acct_creation_throttle_hit' => 'Przykro nam, założyłeś już $1 kont(a). Nie możesz założyć kolejnego.',
+'emailauthenticated' => 'Twój adres email został uwierzytelniony $1.',
+'emailnotauthenticated' => 'Twój adres e-mail nie jest potwierdzony. Poniższe funkcje poczty nie będą działały.',
+'noemailprefs' => 'Musisz podać adres e-mail, aby te funkcje działały.',
+'emailconfirmlink' => 'Potwierdź swój adres e-mail',
+'invalidemailaddress' => 'E-mail nie zostanie zaakceptowany: jego format nie spełnia formalnych wymagań. Proszę wpisać poprawny adres email lub wyczyścić pole.',
+'accountcreated' => 'Utworzono konto',
+'accountcreatedtext' => 'Konto dla $1 zostało utworzone.',
+
+# Password reset dialog
+'resetpass' => 'Resetuj hasło',
+'resetpass_announce' => 'Zalogowałeś się z tymczasowym kodem otrzymanym przez e-mail. Aby zakończyć proces logowania musisz ustawić nowe hasło:',
+'resetpass_text' => "<!-- Dodaj tekst -->",
+'resetpass_header' => 'Resetuj hasło',
+'resetpass_submit' => 'Ustaw hasło i zaloguj',
+'resetpass_success' => 'Twoje hasło zostało pomyślnie zmienione! Trwa logowanie...',
+'resetpass_bad_temporary' => 'Nieprawidłowe hasło tymczasowe. Być może zakończyłeś już proces zmiany hasła lub poprosiłeś o nowe hasło tymczasowe.',
+'resetpass_forbidden' => 'Hasła nie mogą być zmienione na tej wiki.',
+'resetpass_missing' => 'Brak danych formularza.',
+
+# Edit page toolbar
+'bold_sample' => 'Tekst wytłuszczony',
+'bold_tip' => 'Tekst wytłuszczony',
+'italic_sample' => 'Tekst pochylony',
+'italic_tip' => 'Tekst pochylony',
+'link_sample' => 'Tytuł linku',
+'link_tip' => 'Link wewnętrzny',
+'extlink_sample' => 'http://www.przyklad.pl tytuł strony',
+'extlink_tip' => 'Link zewnętrzny (pamiętaj o prefiksie http:// )',
+'headline_sample' => 'Tekst nagłówka',
+'headline_tip' => 'Nagłówek 2. poziomu',
+'math_sample' => 'W tym miejscu wprowadź wzór',
+'math_tip' => 'Wzór matematyczny (LaTeX)',
+'nowiki_sample' => 'Wstaw tu tekst niesformatowany',
+'nowiki_tip' => 'Zignoruj formatowanie wiki',
+'image_sample' => 'Przyklad.jpg',
+'image_tip' => 'Obrazek osadzony',
+'media_sample' => 'Przyklad.ogg',
+'media_tip' => 'Link do pliku',
+'sig_tip' => 'Twój podpis wraz z datą i czasem',
+'hr_tip' => 'Pozioma linia (używaj oszczędnie)',
+
+# Edit pages
+#
+'summary' => 'Opis zmian',
+'subject' => 'Temat/nagłówek',
+'minoredit' => 'To jest drobna zmiana',
+'watchthis' => 'Obserwuj tę stronę',
+'savearticle' => 'Zapisz',
+'preview' => 'Podgląd',
+'showpreview' => 'Pokaż podgląd',
+'showlivepreview' => 'Dynamiczny podgląd',
+'showdiff' => 'Pokaż zmiany',
+'anoneditwarning' => 'Nie jesteś zalogowany. Twój adres IP będzie zapisany w historii edycji strony.',
+'missingsummary' => "'''Przypomnienie:''' Nie wprowadziłeś opisu zmian. Jeżeli nie chcesz go wprowadzać naciśnij przycisk Zapisz jeszcze raz.",
+'missingcommenttext' => 'Wprowadź komentarz poniżej.',
+'missingcommentheader' => "'''Przypomnienie:''' Nie wprowadziłeś tematu/nagłówka dla tego komentarza. Jeżeli nie chcesz go wprowadzać naciśnij przycisk Zapisz jeszcze raz.",
+'summary-preview' => 'Podgląd opisu',
+'subject-preview' => 'Podgląd tematu/nagłówka',
+'blockedtitle' => 'Użytkownik jest zablokowany',
+'blockedtext' => "'''Twoje konto lub adres IP zostały zablokowane.'''
+
+Blokada została nałożona przez $1. Podany powód to: ''$2''.
+
+W celu wyjaśnienia sprawy zablokowania możesz się skontaktować z $1 lub innym [[{{ns:Project}}:Administratorzy|administratorem]].
+
+Twój obecny adres IP to $3, a numer identyfikacyjny blokady to #$5.",
+'blockedoriginalsource' => "Źródło '''$1''' zostało pokazane poniżej:",
+'blockededitsource' => "Tekst '''Twoich edycji''' na '''$1''' został pokazany poniżej:",
+'whitelistedittitle' => 'Przed edycją musisz się zalogować',
+'whitelistedittext' => 'Musisz $1 żeby móc edytować artykuły.',
+'whitelistreadtitle' => 'Przed przeczytaniem musisz się zalogować',
+'whitelistreadtext' => 'Musisz się [[{{ns:Special}}:Userlogin|zalogować]] żeby czytać strony.',
+'whitelistacctitle' => 'Nie jesteś dopuszczony do utworzenia konta',
+'whitelistacctext' => 'Aby móc zakładać konta na tej Wiki musisz [[{{ns:Special}}:Userlogin|zalogować się]] i mieć przyznane specjalne prawa.',
+'confirmedittitle' => 'Wymagane potwierdzenie e-maila by móc edytować',
+'confirmedittext' => 'Musisz podać i potwierdzić swój e-mail by móc edytować. Możesz to zrobić w [[{{ns:Special}}:Preferences|swoich ustawieniach]].',
+'loginreqtitle' => 'Musisz się zalogować',
+'loginreqlink' => 'zaloguj się',
+'loginreqpagetext' => 'Musisz $1 żeby móc przeglądać inne strony.',
+'accmailtitle' => 'Hasło wysłane.',
+'accmailtext' => 'Hasło dla użytkownika "$1" zostało wysłane pod adres $2.',
+'newarticle' => '(Nowy)',
+'newarticletext' => "Nie ma jeszcze artykułu o tym tytule. W poniższym polu można wpisać pierwszy jego fragment. Jeśli nie to było Twoim zamiarem, wciśnij po prostu ''Wstecz''.",
+'anontalkpagetext' => "---- ''To jest strona dyskusyjna dla użytkowników anonimowych - takich, którzy nie mają jeszcze swojego konta lub nie chcą go w tej chwili używać. By ich identyfikować używamy numerów IP. Jeśli jesteś anonimowym użytkownikiem i wydaje Ci się, że zamieszczone tu komentarze nie są skierowane do Ciebie, [[{{ns:Special}}:Userlogin|utwórz proszę konto albo zaloguj się]] - dzięki temu unikniesz w przyszłości podobnych nieporozumień.''",
+'noarticletext' => 'Nie ma jeszcze artykułu o tym tytule. Możesz [{{fullurl:{{NAMESPACE}}:{{PAGENAME}}|action=edit}} utworzyć artykuł {{FULLPAGENAME}}] lub [[{{ns:Special}}:Search/{{FULLPAGENAME}}|poszukać {{FULLPAGENAME}} w innych artykułach]].',
+'clearyourcache' => "'''Uwaga:''' po zapisaniu zmian musisz zaktualizować pamięć podręczną (cache) przeglądarki: '''Mozilla / Firefox:''' kliknij ''Reload'' (lub ''Ctrl-R''), '''IE / Opera:''' ''Ctrl-F5'', '''Safari:''' ''Cmd-R'', '''Konqueror''' ''Ctrl-R''.",
+'usercssjsyoucanpreview' => '<strong>Wskazówka:</strong> Użyj przycisku "Podgląd", aby przetestować Twój nowy arkusz stylów CSS lub kod JavaScript przed jego zapisaniem.',
+'usercsspreview' => "'''Pamiętaj, że to na razie tylko podgląd Twojego arkusza stylów - nic jeszcze nie zostało zapisane!'''",
+'userjspreview' => "'''Pamiętaj, że to na razie tylko podgląd Twojego JavaScriptu - nic jeszcze nie zostało zapisane!'''",
+'userinvalidcssjstitle' => "'''Uwaga:''' Nie ma skórki o nazwie \"$1\". Pamiętaj, że strony użytkownika zawierające CSS i JavaScript powinny zaczynać się małą literą, np. User:Foo/monobook.css.",
+'updated' => '(Zmodyfikowano)',
+'note' => '<strong>Uwaga:</strong>',
+'previewnote' => '<strong>To jest tylko podgląd - artykuł nie został jeszcze zapisany!</strong>',
+'session_fail_preview' => '<strong>Przepraszamy! Serwer nie może przetworzyć tej edycji z powodu utraty danych sesji. Spróbuj jeszcze raz. Jeśli to nie pomoże - wyloguj się i zaloguj ponownie.</strong>',
+'previewconflict' => 'Wersja podglądana odnosi się do tekstu z górnego pola edycji. Tak będzie wyglądać strona jeśli zdecydujesz się ją zapisać.',
+'session_fail_preview_html' => '<strong>Przepraszamy! Serwer nie może przetworzyć tej edycji z powodu utraty danych sesji.</strong>
+
+\'\'Ponieważ na tej wiki włączona została opcja "raw HTML", podgląd został ukryty w celu zabezpieczenia przed atakami JavaScript.\'\'
+
+<strong>Jeśli jest to prawidłowa próba dokonania edycji, spróbuj jeszcze raz. Jeśli to nie pomoże - wyloguj się i zaloguj ponownie.</strong>',
+'importing' => 'Importowanie $1',
+'editing' => 'Edytujesz "$1"',
+'editinguser' => 'Edytujesz "$1"',
+'editingsection' => 'Edytujesz "$1" (fragment)',
+'editingcomment' => 'Edytujesz "$1" (komentarz)',
+'editconflict' => 'Konflikt edycji: $1',
+'explainconflict' => 'Ktoś zdążył wprowadzić swoją wersję artykułu w trakcie Twojej edycji.
+Górne pole edycji zawiera tekst strony aktualnie zapisany w bazie danych.
+Twoje zmiany znajdują się w dolnym polu edycji.
+By wprowadzić swoje zmiany musisz zmodyfikować tekst z górnego pola.
+<b>Tylko</b> tekst z górnego pola będzie zapisany w bazie gdy wciśniesz "Zapisz".<br />',
+'yourtext' => 'Twój tekst',
+'storedversion' => 'Zapisana wersja',
+'nonunicodebrowser' => "<strong>Uwaga! Twoja przeglądarka nie umie poprawnie rozpoznawać kodowania UTF-8 (Unicode). Z tego powodu wszystkie znaki, których Twoja przeglądarka nie jest w stanie rozpoznać, zostały zastąpione ich kodami heksadecymalnymi.</strong>",
+'editingold' => "<strong>Ostrzeżenie: Edytujesz inną niż bieżąca wersję tej strony. Jeśli zapiszesz ją wszystkie późniejsze zmiany zostaną skasowane.</strong>",
+'yourdiff' => 'Różnice',
+'copyrightwarning' => "Proszę pamiętać o tym, że wszelki wkład do serwisu {{SITENAME}} jest udostępniany na zasadach $2 (szczegóły w $1). Jeśli nie chcesz, żeby Twój tekst był dowolnie zmieniany przez każdego i rozpowszechniany bez ograniczeń, nie umieszczaj go tutaj.<br />
+Niniejszym jednocześnie oświadczasz, że ten tekst jest Twoim dziełem lub pochodzi z materiałów dostępnych na zasadach ''public domain'' albo kompatybilnych.
+<strong>PROSZĘ NIE UŻYWAĆ BEZ POZWOLENIA MATERIAŁÓW OBJĘTYCH PRAWEM AUTORSKIM!</strong>",
+'copyrightwarning2' => "Proszę pamiętać o tym, że wszelki wkład do serwisu {{SITENAME}} może być edytowany, zmieniany lub usunięty przez innych użytkowników. Jeśli nie chcesz, żeby Twój tekst był dowolnie zmieniany przez każdego i rozpowszechniany bez ograniczeń, nie umieszczaj go tutaj.<br />
+Niniejszym jednocześnie oświadczasz, że ten tekst jest Twoim dziełem lub pochodzi z materiałów dostępnych na zasadach ''public domain'' albo kompatybilnych (zobacz także $1).
+<strong>PROSZĘ NIE UŻYWAĆ BEZ POZWOLENIA MATERIAŁÓW OBJĘTYCH PRAWEM AUTORSKIM!</strong>",
+'longpagewarning' => '<strong>Uwaga: Ta strona ma $1 kilobajt-y/-ów; w przypadku niektórych przeglądarek mogą wystąpić problemy w edycji stron mających więcej niż 32 kilobajty. Jeśli to możliwe, spróbuj podzielić tekst na mniejsze części.</strong>',
+'longpageerror' => '<strong>Błąd: Przesłany przez Ciebie tekst ma $1 kilobajtów. Maksymalna długość tekstu nie może przekraczać $2 kilobajtów. Twój tekst nie zostanie zapisany.</strong>',
+'readonlywarning' => '<strong>Uwaga: Baza danych została chwilowo zablokowana do celów administracyjnych. Nie można więc na razie zapisać nowej wersji artykułu. Proponujemy przenieść jej tekst do prywatnego pliku (wytnij/wklej) i zachować na później.</strong>',
+'protectedpagewarning' => '<strong>Uwaga: Modyfikacja tej strony została zablokowana. Mogą ją edytować jedynie użytkownicy z prawami administracyjnymi. Upewnij się, że postępujesz zgodnie z [[{{ns:Project}}:Blokowanie_stron|zasadami dotyczącymi zablokowanych stron]].</strong>',
+'semiprotectedpagewarning' => '<strong>Uwaga:</strong> Tę stronę mogą edytować tylko zarejestrowani użytkownicy.',
+'cascadeprotectedwarning' => "<strong>Uwaga: Tę stronę mogą edytować tylko użytkownicy z uprawnieniami administratora, ponieważ jest ona zawarta na następujących stronach, które zostały zabezpieczone z włączoną opcją dziedziczenia</strong>:",
+'templatesused' => 'Szablony użyte na tej stronie:',
+'templatesusedpreview'	=> 'Szablony użyte w tym podglądzie:',
+'templatesusedsection'	=> 'Szablony użyte w tej sekcji:',
+'template-protected' => '(zabezpieczony)',
+'template-semiprotected' => '(częściowo zabezpieczony)',
+'edittools' => '<!-- Znajdujący się tutaj tekst zostanie pokazany pod polem edycji i formularzem przesyłania plików. -->',
+'nocreatetitle' => 'Ograniczono tworzenie stron',
+'nocreatetext' => 'Ograniczono możliwość tworzenia nowych stron. Możesz edytować istniejące strony lub [[{{ns:Special}}:Userlogin|zalogować się albo utworzyć nowe konto]].',
+
+# "Undo" feature
+'undo-success' => 'Edycja została wycofana. Proszę porównać ukazane poniżej różnice między wersjami w celu ich zweryfikowania poprawności, a następnie zapisać zmiany w celu zakończenia operacji.',
+'undo-failure' => 'Edycja nie została wycofana z powodu konfliktu z wersjami pośrednimi.',
+'undo-summary' => 'Wycofanie wersji $1 utworzonej przez [[Special:Contributions/$2]] ([[User talk:$2]])',
+
+# Account creation failure
+'cantcreateaccounttitle' => 'Nie można utworzyć konta',
+'cantcreateaccounttext' => 'Możliwość utworzenia konta z tego adresu IP (<b>$1</b>) została zablokowana. Stało się to prawdopodobnie wskutek ciągłych aktów wandalizmu z Twojej szkoły/uczelni lub wandalizmów innych użytkowników Twojego providera internetowego.',
+
+# History pages
+#
+'revhistory' => 'Historia modyfikacji',
+'viewpagelogs' => 'Zobacz rejestry operacji dla tej strony',
+'nohistory' => 'Ta strona nie ma swojej historii edycji.',
+'revnotfound' => 'Wersja nie została odnaleziona',
+'revnotfoundtext' => 'Starsza wersja strony nie może zostać odnaleziona. Sprawdź, proszę, URL użyty przez Ciebie by uzyskać dostęp do tej strony.',
+'loadhist' => 'Pobieranie historii tej strony',
+'currentrev' => 'Aktualna wersja',
+'revisionasof' => 'Wersja z dnia $1',
+'revision-info' => 'Wersja z dnia $1; $2',
+'previousrevision' => '← Poprzednia wersja',
+'nextrevision' => 'Następna wersja →',
+'currentrevisionlink' => 'Aktualna wersja',
+'cur' => 'bież',
+'next' => 'następna',
+'last' => 'poprz',
+'orig' => 'oryginał',
+'histlegend' => 'Legenda: (bież) - różnice z wersją bieżącą, (poprz) - różnice z wersją poprzedzającą, d - drobne zmiany',
+'deletedrev' => '[usunięto]',
+'histfirst' => 'od początku',
+'histlast' => 'od końca',
+'rev-deleted-comment' => '(komentarz usunięty)',
+'rev-deleted-user' => '(użytkownik usunięty)',
+'rev-deleted-text-permission' => '<div class="mw-warning plainlinks">
+Wersja tej strony została usunięta i nie jest dostępna publicznie.
+Szczegóły mogą znajdować się w [{{fullurl:Special:Log/delete|page={{PAGENAMEE}}}} rejestrze usunięć].
+</div>',
+'rev-deleted-text-view' => '<div class="mw-warning plainlinks">
+Wersja tej strony została usunięta i nie jest dostępna publicznie.
+Jako administrator tego serwisu możesz ją obejrzeć.
+Szczegóły mogą znajdować się w [{{fullurl:Special:Log/delete|page={{PAGENAMEE}}}} rejestrze usunięć].
+</div>',
+'rev-delundel' => 'pokaż/ukryj',
+
+'history-feed-title' => 'Historia wersji',
+'history-feed-description' => 'Historia wersji tej strony wiki',
+'history-feed-item-nocomment' => '$1 o $2',
+'history-feed-empty' => 'Wybrana strona nie istnieje. Mogła ona zostać usunięta lub przeniesiona pod inną nazwę. Możesz także [[{{ns:special}}:Search|poszukać]] tej strony.',
+
+# Revision deletion
+# 
+'revisiondelete' => 'Skasuj/przywróć wersje',
+'revdelete-nooldid-title' => 'Nie wybrano wersji',
+'revdelete-nooldid-text' => 'Nie wybrano wersji na których ma zostać wykonana ta operacja.',
+'revdelete-selected' => 'Wybrano wersje strony [[:$1]]:',
+'revdelete-text' => "Usunięte wersje będą nadal widoczne w historii strony ale ich treść nie będzie publicznie dostępna.
+
+Inni administratorzy tej wiki nadal mają dostęp do ukrytych wersji i mogą je odtworzyć poprzez ten sam interfejs, chyba że operator serwisu nałożył dodatkowe ograniczenia.",
+'revdelete-legend' => 'Ustaw ograniczenia dla wersji:',
+'revdelete-hide-text' => 'Ukryj tekst wersji',
+'revdelete-hide-comment' => 'Ukryj komentarz edycji',
+'revdelete-hide-user' => 'Ukryj nazwę użytkownika/adres IP',
+'revdelete-hide-restricted' => 'Zaakceptuj te ograniczenia Apply these restrictions to sysops as well as others',
+'revdelete-log' => 'Komentarz:',
+'revdelete-submit' => 'Zaakceptuj dla wybranych wersji',
+'revdelete-logentry' => 'zmieniono widoczność wersji w [[$1]]',
+
+# Diffs
+#
+'difference' => '(Różnice między wersjami)',
+'loadingrev' => 'pobieranie wersji w celu porównania',
+'lineno' => "Linia $1:",
+'editcurrent' => 'Edytuj bieżącą wersję tej strony',
+'selectnewerversionfordiff' => 'Wybierz nowszą wersję do porównania',
+'selectolderversionfordiff' => 'Wybierz starszą wersję do porównania',
+'compareselectedversions' => 'porównaj wybrane wersje',
+'editundo' => 'anuluj zmianę',
+'diff-multi' => "(Nie pokazano {{plural:$1|jednej wersji pośredniej|$1 wersji pośrednich}}.)",
+
+# Search results
+#
+'searchresults' => 'Wyniki wyszukiwania',
+'searchresulttext' => 'Aby dowiedzieć się więcej o przeszukiwaniu serwisu {{SITENAME}}, zobacz stronę [[{{ns:Project}}:Przeszukiwanie|Przeszukiwanie]].',
+'searchsubtitle' => 'Dla zapytania "[[:$1]]"',
+'searchsubtitleinvalid' => 'Dla zapytania "$1"',
+'badquery' => 'Źle sformułowane zapytanie',
+'badquerytext' => 'Nie można zrealizować Twojego zapytania. Prawdopodobna przyczyna to obecność słowa krótszego niż trzyliterowe. Spróbuj, proszę, innego zapytania.',
+'matchtotals' => 'Zapytanie "$1", liczba znalezionych tytułów: $2,
+liczba znalezionych artykułów: $3.',
+'noexactmatch' => 'Nie ma stron zatytułowanych "$1". Możesz [[:$1|utworzyć tę stronę]] lub spróbować pełnego przeszukiwania.',
+'titlematches' => 'Znaleziono w tytułach:',
+'notitlematches' => 'Nie znaleziono w tytułach',
+'textmatches' => 'Znaleziono na stronach:',
+'notextmatches' => 'Nie znaleziono w tekście stron',
+'prevn' => 'poprzednie $1',
+'nextn' => 'następne $1',
+'viewprevnext' => 'Zobacz ($1) ($2) ($3).',
+'showingresults' => 'Oto lista <b>$1</b> pozycji, poczynając od numeru <b>$2</b>.',
+'showingresultsnum' => 'Oto lista <b>$3</b> pozycji, poczynając od numeru <b>$2</b>.',
+'nonefound' => "'''Uwaga''': brak rezultatów wyszukiwania spowodowany jest bardzo często szukaniem najpopularniejszych słów, takich jak \"jest\" czy \"nie\", które nie są indeksowane, albo z powodu podania w zapytaniu więcej niż jednego słowa (na liście odnalezionych stron znajdą się tylko te, które zawierają wszystkie podane słowa).",
+'powersearch' => 'Szukaj',
+'powersearchtext' => "Szukaj w przestrzeniach nazw:<br />$1<br />$2 Pokaż przekierowania<br />Szukany tekst $3 $9",
+'searchdisabled' => 'Wyszukiwanie w serwisie {{SITENAME}} zostało wyłączone. W międzyczasie możesz skorzystać z wyszukiwania Google.',
+'blanknamespace' => '(główna)',
+
+# Preferences page
+#
+'preferences' => 'Preferencje',
+'mypreferences' => 'Moje preferencje',
+'prefsnologin' => 'Nie jesteś zalogowany',
+'prefsnologintext' => 'Musisz się [[{{ns:Special}}:Userlogin|zalogować]] przed zmianą swoich preferencji.',
+'prefsreset' => 'Preferencje domyślne zostały odtworzone.',
+'qbsettings' => 'Pasek szybkiego dostępu',
+'qbsettings-none'	=> 'Brak',
+'qbsettings-fixedleft'	=> 'Stały, z lewej',
+'qbsettings-fixedright'	=> 'Stały, z prawej',
+'qbsettings-floatingleft'	=> 'Unoszący się, z lewej',
+'qbsettings-floatingright'	=> 'Unoszący się, z prawej',
+'changepassword' => 'Zmiana hasła',
+'skin' => 'Skórka',
+'math' => 'Wzory',
+'dateformat' => 'Format daty',
+'datedefault' => 'Domyślny',
+'datetime' => 'Data i czas',
+'math_failure' => 'Parser nie mógł rozpoznać',
+'math_unknown_error' => 'nieznany błąd',
+'math_unknown_function' => 'nieznana funkcja',
+'math_lexing_error' => 'błąd leksera',
+'math_syntax_error' => 'błąd składni',
+'math_image_error' => 'konwersja do formatu PNG niepowiodła się ; check for correct installation of latex, dvips, gs, and convert',
+'math_bad_tmpdir' => 'Nie można utworzyć lub zapisywać w tymczasowym katalogu dla wzorów matematycznych',
+'math_bad_output' => 'Nie można utworzyć lub zapisywać w wyjściowym katalogu dla wzorów matematycznych',
+'math_notexvc'	=> 'Brak texvc; zapoznaj się z math/README w celu konfiguracji.',
+'prefs-personal' => 'Dane użytkownika',
+'prefs-rc' => 'Ostatnie zmiany',
+'prefs-watchlist' => 'Obserwowane',
+'prefs-watchlist-days' => 'Liczba dni ukazywania się pozycji na liście:',
+'prefs-watchlist-edits' => 'Liczba edycji pokazywanych w rozszerzonej liście obserwowanych:',
+'prefs-misc' => 'Różne',
+'saveprefs' => 'Zapisz',
+'resetprefs' => 'Preferencje domyślne',
+'oldpassword' => 'Stare hasło',
+'newpassword' => 'Nowe hasło',
+'retypenew' => 'Powtórz nowe hasło',
+'textboxsize' => 'Edytowanie',
+'rows' => 'Wiersze:',
+'columns' => 'Kolumny:',
+'searchresultshead' => 'Wyszukiwanie',
+'resultsperpage' => 'Liczba wyników na stronie',
+'contextlines' => 'Pierwsze wiersze artykułu',
+'contextchars' => 'Litery kontekstu w linijce',
+'stubthreshold' => 'Maksymalny rozmiar artykułu prowizorycznego:',
+'recentchangescount' => 'Liczba pozycji na liście ostatnich zmian:',
+'savedprefs' => 'Twoje preferencje zostały zapisane.',
+'timezonelegend' => 'Strefa czasowa',
+'timezonetext' => 'Podaj liczbę godzin różnicy między Twoim czasem, a czasem uniwersalnym (UTC).',
+'localtime' => 'Twój czas:',
+'timezoneoffset' => 'Różnica ¹',
+'servertime' => 'Aktualny czas serwera',
+'guesstimezone' => 'Pobierz z przeglądarki',
+'allowemail' => 'Inni użytkownicy mogą przesyłać mi e-maile',
+'defaultns' => 'Przeszukuj następujące przestrzenie nazw domyślnie:',
+'default' => 'domyślnie',
+'files' => 'Pliki',
+
+# User rights
+'userrights-lookup-user' => 'Zarządzaj grupami użytkownika',
+'userrights-user-editname' => 'Wprowadź nazwę użytkownika:',
+'editusergroup' => 'Edytuj grupy użytkownika',
+
+'userrights-editusergroup' => 'Edytuj grupy użytkownika',
+'saveusergroups' => 'Zapisz',
+'userrights-groupsmember' => 'Członek grup:',
+'userrights-groupsavailable' => 'Dostępne grupy:',
+'userrights-groupshelp' => 'Zaznacz grupy do których użytkownik ma zostać dodany lub z których ma zostać usunięty. Niezaznaczone grupy nie zostaną zmienione. Możesz odznaczyć grupę za pomocą CTRL + lewy przycisk myszy.',
+
+# Groups
+'group' => 'Grupa:',
+'group-bot' => 'Boty',
+'group-sysop' => 'Administratorzy',
+'group-bureaucrat' => 'Biurokraci',
+'group-all' => '(wszyscy)',
+
+'group-bot-member' => 'Bot',
+'group-sysop-member' => 'Administrator',
+'group-bureaucrat-member' => 'Biurokrata',
+
+'grouppage-bot' => '{{ns:Project}}:Boty',
+'grouppage-sysop' => '{{ns:Project}}:Administratorzy',
+'grouppage-bureaucrat' => '{{ns:Project}}:Biurokraci',
+
+# User rights log
+'rightslog' => 'Uprawnienia',
+'rightslogtext' => 'Rejestr zmian uprawnień użytkowników.',
+'rightslogentry' => 'zmienił uprawnienia użytkownika $1 z "$2" na "$3"',
+'rightsnone' => '(podstawowe)',
+
+# Recent changes
+#
+'changes' => 'zmiany',
+'recentchanges' => 'Ostatnie zmiany',
+'recentchangestext' => 'Ta strona przedstawia historię ostatnich zmian w tej wiki.',
+'recentchanges-feed-description' => 'Obserwuj najświeższe zmiany w tej wiki.',
+'rcnote' => 'To ostatnie <strong>$1</strong> zmian dokonanych w ciągu ostatnich <strong>$2</strong> dni, poczynając od $3.',
+'rcnotefrom' => 'Poniżej pokazano zmiany dokonane po <b>$2</b> (nie więcej niż <b>$1</b> pozycji).',
+'rclistfrom' => 'Pokaż zmiany od $1',
+'rcshowhideminor' => '$1 drobne zmiany',
+'rcshowhidebots' => '$1 boty',
+'rcshowhideliu' => '$1 zalogowanych',
+'rcshowhideanons' => '$1 anonimowych',
+'rcshowhidepatr' => '$1 patrolowane',
+'rcshowhidemine' => '$1 moje edycje',
+'rclinks' => 'Wyświetl ostatnie $1 zmian w ciągu ostatnich $2 dni.<br />$3',
+'diff' => 'różn',
+'hist' => 'hist',
+'hide' => 'ukryj',
+'show' => 'pokaż',
+'minoreditletter' => 'd',
+'newpageletter' => 'N',
+'boteditletter' => 'b',
+'sectionlink' => '→',
+'number_of_watching_users_pageview' => '[$1 {{plural:$1|obserwujący użytkownik|obserwujących użytkowników}}/s]',
+'rc_categories' => 'Ogranicz do kategorii (oddzielaj za pomocą "|")',
+'rc_categories_any' => 'Wszystkie',
+
+# Upload
+#
+'upload' => 'Prześlij plik',
+'uploadbtn' => 'Prześlij plik',
+'reupload' => 'Prześlij ponownie',
+'reuploaddesc' => 'Wróć do formularza wysyłki.',
+'uploadnologin' => 'Brak logowania',
+'uploadnologintext' => 'Musisz się [[{{ns:Special}}:Userlogin|zalogować]] przed przesłaniem pików.',
+'upload_directory_read_only' => 'Serwer nie może zapisywać do katalogu ($1) przeznaczonego na przesyłane pliki.',
+'uploaderror' => 'Błąd przesyłki',
+'uploadtext' => 'Użyj poniższego formularza do przesłania plików. Jeśli chcesz przejrzeć lub przeszukać dotychczas przesłane pliki, przejdź do [[{{ns:Special}}:Imagelist|listy dołączonych plików]]. Wszystkie przesyłki są odnotowane w [[{{ns:Special}}:Log/upload|rejestrze przesyłanych plików]].',
+'uploadlog' => 'Wykaz przesyłek',
+'uploadlogpage' => 'Przesłane',
+'uploadlogpagetext' => 'Oto lista ostatnio przesłanych plików.',
+'filename' => 'Plik',
+'filedesc' => 'Opis',
+'fileuploadsummary' => 'Opis:',
+'filestatus' => 'Status prawny',
+'filesource' => 'Kod źródłowy',
+'copyrightpage' => "{{ns:Project}}:Prawa_autorskie",
+'copyrightpagename' => "prawami autorskimi serwisu {{SITENAME}}",
+'uploadedfiles' => 'Przesłane pliki',
+'ignorewarning' => 'Zignoruj ostrzeżenia i wymuś zapisanie pliku.',
+'ignorewarnings' => 'Ignoruj ostrzeżenia',
+'minlength' => 'Nazwa obrazku musi mieć co najmniej trzy litery.',
+'illegalfilename' => 'Nazwa pliku ("$1") zawiera znaki niedozwolone w tytułach stron. Proszę zmienić nazwę pliku i przesłać go ponownie.',
+'badfilename' => 'Nazwę obrazku zmieniona na "$1".',
+'badfiletype' => '".$1" nie jest zalecanym formatem pliku.',
+'large-file' => 'Zalecane jest aby rozmiar pliku z obrazkiem nie był większy niż $1 bajtów. Ten plik ma rozmiar $2 bajtów.',
+'largefileserver' => 'Plik jest większy niż maksymalny dozwolony rozmiar.',
+'emptyfile' => 'Plik, który przesłałeś wydaje się być pusty. Może być to spowodowane literówką w nazwie pliku. Sprawdź, czy nazwa jest prawidłowa.',
+'fileexists' => 'Plik o takiej nazwie już istnieje! Załadowanie nowej grafiki nieodwacalnie usunie już istniejącą ($1)! Upewnij się, że wiesz, co robisz.',
+'fileexists-forbidden' => 'Plik o tej nazwie już istnieje! Wróć i załaduj ten plik pod inną nazwą. [[Image:$1|thumb|center|$1]]',
+'fileexists-shared-forbidden' => 'Plik o tej nazwie już istnieje! Wróć i załaduj ten plik pod inną nazwą. [[Image:$1|thumb|center|$1]]',
+'successfulupload' => 'Przesłanie pliku powiodło się',
+'fileuploaded' => 'Plik "$1" został pomyślnie przesłany. Przejdź, proszę, do strony opisu pliku ($2) i podaj dotyczące go informacje takie jak: pochodzenie pliku, kiedy i przez kogo został utworzony i cokolwiek co wiesz o pliku, a wydaje Ci się ważne.',
+'uploadwarning' => 'Ostrzeżenie o przesyłce',
+'savefile' => 'Zapisz plik',
+'uploadedimage' => 'przesłano "[[$1]]"',
+'uploaddisabled' => 'Przesyłanie plików wyłączone',
+'uploaddisabledtext' => 'Możliwość przesyłania plików została wyłączona.',
+'uploadscripted' => 'Ten plik zawiera kod HTML lub skrypt który może zostać błędnie zinterpretowany przez przeglądarkę internetową.',
+'uploadcorrupt' => 'Ten plik jest uszkodzony lub ma nieprawidłowe rozszerzenie. Proszę sprawdzić plik i załadować poprawną wersję.',
+'uploadvirus' => 'W tym pliku jest wirus! Szczegóły: $1',
+'sourcefilename' => 'Nazwa oryginalna',
+'destfilename' => 'Nazwa docelowa',
+'watchthisupload' => 'Obserwuj tę stronę',
+'filewasdeleted' => 'Plik o tej nazwie istniał, ale został skasowany. Zanim załadujesz go ponownie, sprawdź $1.',
+
+'upload-proto-error' => 'Nieprawidłowy protokół',
+'upload-proto-error-text' => 'Zdalne przesyłanie plików wymaga podania adresu URL zaczynającego się na <code>http://</code> lub <code>ftp://</code>.',
+'upload-file-error' => 'Błąd wewnętrzny',
+'upload-file-error-text' => 'Wystąpił błąd wewnętrzny podczas próby utworzenia tymczasowego pliku na serwerze. Skontaktuj się z administratorem systemu.',
+'upload-misc-error' => 'Nieznany błąd przesyłania',
+'upload-misc-error-text' => 'Wystąpił nieznany błąd podczas przesyłania. Proszę, sprawdź czy podany URl jest poprawny i dostępny, a następnie spróbuj ponownie. Jeśli problem będzie się powtarzał skontaktuj się z administratorem systemu.',
+# Some likely curl errors.  More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
+'upload-curl-error6' => "URL jest nieosiągalny",
+'upload-curl-error6-text' => 'Podany URL jest nieosiągalny. Proszę, dokładnie sprawdź czy podany URL jest prawidłowy i czy dana strona działa.',
+'upload-curl-error28' => 'Upłynął limit czasu odpowiedzi',
+'upload-curl-error28-text' => 'Strona odpowiada zbyt wolno. Proszę, sprawdź czy strona działa, odczekaj kilka minut i spróbuj ponownie. Możesz także spróbować w czasie mniejszego obciążenia strony.',
+
+'license' => 'Licencja',
+'nolicense' => 'Nie wybrano (wpisz ręcznie!)',
+'upload_source_url' => ' (poprawny, publicznie dostępny URL)',
+'upload_source_file' => ' (plik na twoim komputerze)',
+
+# Image list
+#
+'imagelist' => 'Lista plików',
+'imagelisttext' => "Na poniższej liście znajduje się '''$1''' {{plural:$1|plik posortowany|plików posortowanych}} $2.",
+'imagelistforuser' => 'Lista grafik załadowanych przez $1.',
+'getimagelist' => 'pobieranie listy plików',
+'ilsubmit' => 'Szukaj',
+'showlast' => 'Pokaż ostatnie $1 plików posortowanych $2.',
+'byname' => 'według nazwy',
+'bydate' => 'według daty',
+'bysize' => 'według rozmiaru',
+'imgdelete' => 'usuń',
+'imgdesc' => 'opis',
+'imgfile' => 'plik',
+'imglegend' => 'Legenda: (opis) - pokaż/edytuj opis pliku.',
+'imghistory' => 'Historia pliku',
+'revertimg' => 'przywróć',
+'deleteimg' => 'usuń',
+'deleteimgcompletely' => 'Usuń wszystkie wersje tego pliku',
+'imghistlegend' => 'Legend: (bież) - to jest bieżący plik, (usuń) - usuń starszą wersję, (przywróć) - przywróc starszą wersję.<br /><i>Kliknij na datę aby zobaczyć przesłany plik</i>.',
+'imagelinks' => 'Odnośniki do pliku',
+'linkstoimage' => 'Następujące strony odwołują się do tego pliku:',
+'nolinkstoimage' => 'Żadna strona nie odwołuje się do tego pliku.',
+'sharedupload' => 'Plik [[Commons:Image:{{PAGENAME}}|{{PAGENAME}}]] umieszczony jest we wspólnym repozytorium i może być używany w innych projektach.',
+'shareduploadwiki' => 'Zobacz $1 aby dowiedzieć się więcej.',
+'shareduploadwiki-linktext' => 'stronę opisu grafiki',
+'noimage' => 'Nie istnieje plik o tej nazwie. Możesz go $1.',
+'noimage-linktext' => 'przesłać',
+'uploadnewversion-linktext' => 'Załaduj nowszą wersję tego pliku',
+'imagelist_date' => 'Data',
+'imagelist_name' => 'Nazwa',
+'imagelist_user' => 'Użytkownik',
+'imagelist_size' => 'Rozmiar (bajty)',
+'imagelist_description' => 'Opis',
+'imagelist_search_for' => 'Szukaj grafiki o nazwie:',
+
+# Mime search
+#
+'mimesearch' => 'Wyszukiwanie MIME',
+'mimetype' => 'Typ MIME:',
+'download' => 'pobierz',
+
+# Unwatchedpages
+#
+'unwatchedpages' => 'Nieobserwowane strony',
+'unwatchedpages-summary' => 'Poniżej znajduje się lista stron nieobserwowanych przez żadnego użytkownika.',
+
+# List redirects
+'listredirects' => 'Lista przekierowań',
+'listredirects-summary' => 'Poniżej znajduje się lista przekierowań.',
+
+# Unused templates
+'unusedtemplates' => 'Nieużywane szablony',
+'unusedtemplatestext' => 'Poniżej znajduje się lista szablonów nieużywanych na innych stronach.',
+'unusedtemplateswlh' => 'linkujące',
+
+# Random redirect
+'randomredirect' => 'Losowe przekierowanie',
+
+# Statistics
+#
+'statistics' => 'Statystyka',
+'sitestats' => 'Statystyka artykułów',
+'userstats' => 'Statystyka użytkowników',
+'sitestatstext' => "W bazie danych jest w sumie '''$1''' stron.
+
+Ta liczba uwzględnia strony dyskusji, strony na temat serwisu {{SITENAME}}, strony prowizorycznych (\"stub\"), strony przekierowujące oraz inne, które trudno uznać za artykuły. Wyłączając powyższe, jest prawdopodobnie '''$2''' stron, które można uznać za artykuły.
+
+Ilość przesłanych plików: '''$8'''.
+
+Użytkownicy od startu serwisu wykonali '''$4''' edycji, średnio '''$5''' edycji na stronę. W sumie było '''$3''' odwiedzin, średnio '''$6''' odwiedzin na edycję.
+
+Długość [http://meta.wikimedia.org/wiki/Help:Job_queue kolejki zadań] wynosi '''$7'''.",
+'userstatstext' => "Jest '''$1''' zarejestrowanych użytkowników. Spośród nich '''$2''' (czyli '''$4%''') ma status $5.",
+'statistics-mostpopular' => 'Najczęściej odwiedzane strony',
+
+'disambiguations' => 'Strony ujednoznaczniające',
+'disambiguations-summary' => 'Poniżej znajduje się lista stron ujednoznaczniających.',
+'disambiguationspage' => '{{ns:Template}}:disambig',
+'disambiguations-text' => "Poniższe artykuły odwołują się do '''stron ujednoznaczniających''', a powinny odwoływać się bezpośrednio do hasła związanego z treścią artykułu.<br />Strona uznawana jest za ujednoznaczniającą jeśli zawiera ona szablon określony w [[MediaWiki:disambiguationspage]].",
+
+'doubleredirects' => 'Podwójne przekierowania',
+'doubleredirectstext' => 'Na tej liście mogą znajdować się przekierowania pozorne. Oznacza to, że poniżej pierwszej linii artykułu, zawierającej "#REDIRECT ...", może znajdować się dodatkowy tekst.<br />Każdy wiersz listy zawiera odwołania do pierwszego i drugiego przekierowania oraz pierwszą linię tekstu drugiego przekierowania. Umożliwia to w większości przypadków odnalezienie właściwego artykułu, do którego powinno się przekierowywać.',
+
+'brokenredirects' => 'Zerwane przekierowania',
+'brokenredirectstext' => 'Poniższe przekierowania wskazują na nieistniejące artykuły.',
+'brokenredirects-edit' => '(edytuj)',
+'brokenredirects-delete' => '(usuń)',
+
+# Miscellaneous special pages
+#
+'nbytes' => '$1 {{PLURAL:$1|bajt|bajtów}}',
+'ncategories' => '$1 {{PLURAL:$1|kategoria|kategorii}}',
+'nlinks' => '$1 {{PLURAL:$1|link|linków}}',
+'nmembers' => '$1 {{PLURAL:$1|element|elementów}}',
+'nrevisions' => '$1 {{PLURAL:$1|wersja|wersji}}',
+'nviews' => 'odwiedzono $1 {{PLURAL:$1|raz|razy}}',
+
+'lonelypages' => 'Porzucone strony',
+'lonelypagestext' => 'Poniżej znajduje się lista stron do których nie odnosi się żadna inna strona na tej wiki.',
+'uncategorizedpages' => 'Nieskategoryzowane strony',
+'uncategorizedpages-summary' => 'Poniżej znajduje się lista stron nienależących do żadnej kategorii.',
+'uncategorizedcategories' => 'Nieskategoryzowane kategorie',
+'uncategorizedcategories-summary' => 'Poniżej znajduje się lista kategorii nienależących do żadnej kategorii.',
+'uncategorizedimages' => 'Nieskategoryzowane pliki',
+'uncategorizedimages-summary' => 'Poniżej znajduje się lista plików nienależących do żadnej kategorii.',
+'unusedcategories' => 'Nieużywane kategorie',
+'unusedimages' => 'Nie używane pliki',
+'popularpages' => 'Najpopularniejsze strony',
+'wantedcategories' => 'Potrzebne kategorie',
+'wantedpages' => 'Najpotrzebniejsze strony',
+'mostlinked' => 'Najczęściej linkowane',
+'mostlinkedcategories' => 'Kategorie o największej liczbie artykułów',
+'mostcategories' => 'Artykuły z największą liczbą kategorii',
+'mostcategories-summary' => 'Poniżej znajduje się lista stron zawierających największą liczbę kategorii.',
+'mostimages' => 'Najczęściej linkowane pliki',
+'mostrevisions' => 'Najczęściej edytowane artykuły',
+'mostrevisions-summary' => 'Poniżej znajduje się lista najczęściej edytowanych stron.',
+'allpages' => 'Wszystkie strony',
+'prefixindex' => 'Wszystkie strony według prefiksu',
+'randompage' => 'Losuj stronę',
+'shortpages' => 'Najkrótsze strony',
+'shortpages-summary' => 'Poniżej znajduje się lista najkrótszych stron.',
+'longpages' => 'Najdłuższe strony',
+'longpages-summary' => 'Poniżej znajduje się lista najdłuższych stron.',
+'deadendpages' => 'Strony bez linków',
+'deadendpagestext' => 'Poniższe strony nie posiadają odnośników do innych stron znajdujących się w tej wiki.',
+'listusers' => 'Lista użytkowników',
+'listusers-summary' => 'Poniżej znajduje się lista wszystkich użytkowników zarejestrowanych w tej wiki.',
+'specialpages' => 'Strony specjalne',
+'spheading' => 'Strony specjalne dla wszystkich użytkowników',
+'restrictedpheading' => 'Strony specjalne z ograniczonym dostępem',
+'recentchangeslinked' => 'Zmiany w dolinkowanych',
+'rclsub' => '(dla stron dolinkowanych do "$1")',
+'newpages' => 'Nowe strony',
+'newpages-username' => 'Nazwa użytkownika:',
+'ancientpages' => 'Najstarsze strony',
+'intl' => 'Linki interwiki',
+'move' => 'Przenieś',
+'movethispage' => 'Przenieś tę stronę',
+'unusedimagestext' => 'Pamiętaj, proszę, że inne witryny, np. projekty Wikimedia w innych językach, mogą odwoływać się do tych plików używając bezpośrednio URL. Dlatego też niektóre z plików mogą się znajdować na tej liście mimo, że żadna strona nie odwołuje się do nich.',
+'unusedcategoriestext' => 'Poniższe kategorie istnieją, choć nie korzysta z nich żaden artykuł ani kategoria.',
+
+# Book sources
+'booksources' => 'Książki',
+'booksources-search-legend' => 'Szukaj źródeł książek',
+'booksources-isbn' => 'ISBN:',
+'booksources-go' => 'Pokaż',
+'booksources-text' => 'Poniżej znajduje się lista odnośników do innych stron, które pośredniczą w sprzedaży nowych i używanych książek, a także mogą posiadać dalsze informacje na temat poszukiwanej przez ciebie książki.',
+
+'categoriespagetext' => 'Poniższe kategorie istnieją na wiki.',
+'data'	=> 'Dane',
+'userrights' => 'Zarządzanie prawami użytkowników',
+'groups' => 'Grupy użytkowników',
+
+'isbn' => 'ISBN',
+'alphaindexline' => "od $1 do $2",
+'version' => 'Wersja oprogramowania',
+'log' => 'Rejestry operacji',
+'alllogstext' => 'Połączone rejestry przesłanych plików, skasowanych stron, zabezpieczania, blokowania i nadawania uprawnień. Możesz zawęzić wynik przez wybranie typu rejestru, nazwy użytkownika albo nazwy interesującej Cię strony.',
+'logempty' => 'Brak pozycji w rejestrze.',
+
+# Special:Allpages
+'nextpage' => 'Następna strona ($1)',
+'prevpage' => 'Poprzednia strona ($1)',
+'allpagesfrom' => 'Strony zaczynające się na:',
+'allarticles' => 'Wszystkie artykuły',
+'allinnamespace' => 'Wszystkie strony (w przestrzeni $1)',
+'allnotinnamespace' => 'Wszystkie strony (oprócz przestrzeni nazw $1)',
+'allpagesprev' => 'Poprzednia',
+'allpagesnext' => 'Następna',
+'allpagessubmit' => 'Pokaż',
+'allpagesprefix' => 'Pokaż zaczynające się od:',
+'allpagesbadtitle' => 'Podana nazwa jest nieprawidłowa, zawiera prefiks międzyprojektowy lub międzyjęzykowy. Może ona także zawierać w sobie jeden lub więcej znaków których użycie w nazwach jest niedozwolone.',
+
+# Special:Listusers
+'listusersfrom' => 'Wyświetl użytkowników zaczynając od:',
+
+# Email this user
+#
+'mailnologin' => 'Brak adresu',
+'mailnologintext' => 'Musisz się [[{{ns:Special}}:Userlogin|zalogować]] i mieć wpisany aktualny adres e-mailowy w swoich [[{{ns:Special}}:Preferences|preferencjach]], aby móc wysłać e-mail do innych użytkowników.',
+'emailuser' => 'Wyślij e-mail do tego użytkownika',
+'emailpage' => 'Wyślij e-mail do użytkownika',
+'emailpagetext' => 'Jeśli ten użytkownik wpisał poprawny adres e-mailowy w swoich preferencjach, to poniższy formularz umożliwi Ci wysłanie jednej wiadomości. Adres e-mailowy, który został przez Ciebie wprowadzony w Twoich preferencjach pojawi się w polu "Od", dzięki temu odbiorca będzie mógł Ci odpowiedzieć.',
+'usermailererror' => 'Obiekt Mail zwrócił błąd:',
+'defemailsubject' => '{{SITENAME}} e-mail',
+'noemailtitle' => 'Brak adresu e-mailowego',
+'noemailtext' => 'Ten użytkownik nie podał poprawnego adresu e-mailowego, albo zadecydował, że nie chce otrzymywać e-maili od innych użytkowników.',
+'emailfrom' => 'Od',
+'emailto' => 'Do',
+'emailsubject' => 'Temat',
+'emailmessage' => 'Wiadomość',
+'emailsend' => 'Wyślij',
+'emailccme'     => 'Wyślij mi kopię mojej wiadomości.',
+'emailccsubject'=> 'Kopia twojej wiadomości do $1: $2',
+'emailsent' => 'Wiadomość została wysłana',
+'emailsenttext' => 'Twoja wiadomość została wysłana.',
+
+# Watchlist
+'watchlist' => 'Obserwowane',
+'mywatchlist' => 'Obserwowane',
+'watchlistfor' => "(dla użytkownika '''$1''')",
+'nowatchlist' => 'Nie ma żadnych pozycji na liście obserwowanych przez Ciebie stron.',
+'watchlistanontext' => '$1 aby obejrzeć lub edytować elementy listy obserwowanych.',
+'watchlistcount' => "'''Masz $1 {{PLURAL:$1|pozycję|pozycji}} na liście obserwowanych stron, włączając strony dyskusji.'''",
+'clearwatchlist' => 'Wyczyść listę obserwowanych',
+'watchlistcleartext' => 'Czy jesteś pewien, że chcesz je usunąć?',
+'watchlistclearbutton' => 'Wyczyść obserwowane',
+'watchlistcleardone' => 'Twoja lista stron obserwowanych została wyczyszczona. Liczba usuniętych obiektów: $1.',
+'watchnologin' => 'Brak logowania',
+'watchnologintext' => 'Musisz się [[{{ns:Special}}:Userlogin|zalogować]] przed modyfikacją listy obserwowanych artykułów.',
+'addedwatch' => 'Dodana do listy obserwowanych',
+'addedwatchtext' => "Strona \"[[:$1|$1]]\" została dodana do Twojej [[{{ns:Special}}:Watchlist|listy obserwowanych]]. Na tej liście znajdzie się rejestr przyszłych zmian tej strony i związanej z nią strony dyskusji, a nazwa samej strony zostanie '''wytłuszczona''' na [[{{ns:Special}}:Recentchanges|liście ostatnich zmian]], aby łatwiej było Ci sam fakt zmiany zauważyć.
+
+Jeśli chcesz usunąć stronę ze swojej listy obserwowanych, kliknij na \"Przestań obserwować\".",
+'removedwatch' => 'Usunięto z listy obserwowanych',
+'removedwatchtext' => 'Strona "[[:$1]]" została usunięta z Twojej listy obserwowanych.',
+'watch' => 'Obserwuj',
+'watchthispage' => 'Obserwuj tę stronę',
+'unwatch' => 'Nie obserwuj',
+'unwatchthispage' => 'Przestań obserwować',
+'notanarticle' => 'To nie artykuł',
+'watchnochange' => 'Żadna z obserwowanych stron nie była edytowana w podanym okresie.',
+'watchdetails' => '* Liczba obserwowanych przez Ciebie stron: $1, nie licząc stron dyskusji.
+* [[{{ns:Special}}:Watchlist/edit|Pokaż i edytuj pełną listę]]
+* [[{{ns:Special}}:Watchlist/clear|Wyczyść listę obserwowanych]]',
+'wlheader-enotif' => '* Wysyłanie powiadomień na adres e-mail jest włączone.',
+'wlheader-showupdated' => "* Strony które zostały zmienione od twojej ostatniej wizyty na nich zostały '''pogrubione'''",
+'watchmethod-recent'=> 'poszukiwanie ostatnich zmian wśród obserwowanych stron',
+'watchmethod-list' => 'poszukiwanie obserwowanych stron wśród ostatnich zmian',
+'removechecked' => 'Usuń zaznaczone pozycje z listy obserwowanych',
+'watchlistcontains' => 'Lista obserwowanych przez Ciebie stron zawiera $1 pozycji.',
+'watcheditlist' => "Oto alfabetyczna lista obserwowanych stron. Zaznacz, które z nich chcesz usunąć z listy i kliknij przycisk ''Usuń zaznaczone pozycje z listy obserwowanych'' znajdujący się na dole strony.",
+'removingchecked' => 'Usuwamy zaznaczone pozycje z listy obserwowanych...',
+'couldntremove' => 'Nie można było usunąć pozycji "$1"...',
+'iteminvalidname' => 'Problem z pozycją "$1", niepoprawna nazwa...',
+'wlnote' => 'Poniżej pokazano ostatnie $1 zmian dokonanych w ciągu ostatnich <b>$2</b> godzin.',
+'wlshowlast' => 'Pokaż ostatnie $1 godzin $2 dni ($3)',
+'wlsaved' => 'To jest ostatnia zapisana kopia Twojej listy obserwowanych.',
+'watchlist-show-bots' => 'pokaż edycje botów',
+'watchlist-hide-bots' => 'ukryj edycje botów',
+'watchlist-show-own' => 'pokaż moje edycje',
+'watchlist-hide-own' => 'ukryj moje edycje',
+'watchlist-show-minor' => 'pokaż drobne zmiany',
+'watchlist-hide-minor' => 'ukryj drobne zmiany',
+'wldone' => 'Wykonano.',
+# Displayed when you click the "watch" button and it's in the process of watching
+'watching' => 'Obserwuję...',
+'unwatching' => 'Przestaję obserwować...',
+
+'enotif_mailer' => 'Powiadomienie z serwisu {{SITENAME}}',
+'enotif_reset' => 'Zaznacz wszystkie strony jako odwiedzone',
+'enotif_newpagetext'=> 'To jest nowa strona.',
+'changed' => 'zmieniona',
+'created' => 'utworzona',
+'enotif_subject' => 'Strona $PAGETITLE w serwisie {{SITENAME}} została $CHANGEDORCREATED przez użytkownika $PAGEEDITOR',
+'enotif_lastvisited' => 'Zobacz $1 w celu obejrzenia wszystkich zmian od twojej ostatniej wizyty.',
+'enotif_body' => 'Drogi $WATCHINGUSERNAME,
+
+strona $PAGETITLE w serwisie {{SITENAME}} została $CHANGEDORCREATED o $PAGEEDITDATE przez użytkownika $PAGEEDITOR, zobacz $PAGETITLE_URL w celu obejrzenia aktualnej wersji.
+
+$NEWPAGE
+
+Opis zmiany: $PAGESUMMARY $PAGEMINOREDIT
+
+Skontaktuj się z autorem:
+mail: $PAGEEDITOR_EMAIL
+wiki: $PAGEEDITOR_WIKI
+
+W przypadku kolejnych zmian nowe powiadomienia nie zostaną wysłane dopóki nie odwiedzisz tej strony. Możesz także zresetować flagi powiadomień dla wszystkich obserwowanych przez ciebie stron.
+
+             Wiadomość systemu powiadomień serwisu {{SITENAME}}
+
+--
+W celu zmiany ustawień swojej listy obserwowanych odwiedź
+{{fullurl:{{ns:special}}:Watchlist/edit}}
+
+Pomoc:
+{{fullurl:{{ns:help}}:Contents}}',
+
+# Delete/protect/revert
+#
+'deletepage' => 'Usuń stronę',
+'confirm' => 'Potwierdź',
+'excontent' => 'Zawartość strony "$1"',
+'excontentauthor' => 'treść: "$1" (jedyny autor: [[{{ns:Special}}:Contributions/$2|$2]])',
+'exbeforeblank' => 'Poprzednia zawartość pustej strony "$1"',
+'exblank' => 'Strona była pusta',
+'confirmdelete' => 'Potwierdź usunięcie',
+'deletesub' => '(Usuwanie "$1")',
+'historywarning' => 'Uwaga! Strona, którą chcesz skasować ma starsze wersje:',
+'confirmdeletetext' => 'Zamierzasz trwale usunąć stronę lub plik z bazy danych razem z dotyczącą ich historią. Potwierdź, proszę, swoje zamiary, tzn., że rozumiesz konsekwencje, i że robisz to w zgodzie z [[{{ns:Project}}:Zasady i wskazówki|zasadami]].',
+'actioncomplete' => 'Operacja wykonana',
+'deletedtext' => 'Usunięto "$1". Rejestr ostatnio dokonanych kasowań możesz obejrzeć tutaj: $2.',
+'deletedarticle' => 'usunięto "[[$1]]"',
+'dellogpage' => 'Usunięte',
+'dellogpagetext' => 'To jest lista ostatnio wykonanych kasowań.',
+'deletionlog' => 'rejestr usunięć',
+'reverted' => 'Przywrócono poprzednią wersję',
+'deletecomment' => 'Powód usunięcia',
+'imagereverted' => 'Przywrócenie wcześniejszej wersji powiodło się.',
+'rollback' => 'Cofnij edycję',
+'rollback_short' => 'Cofnij',
+'rollbacklink' => 'cofnij',
+'rollbackfailed' => 'Nie udało się cofnąć zmiany',
+'cantrollback' => 'Nie można cofnąć edycji; jest tylko jedna wersja tej strony.',
+'alreadyrolled' => 'Nie można cofnąć ostatniej zmiany strony [[:$1|$1]], której autorem jest [[{{ns:user}}:$2|$2]] ([[{{ns:user_talk}}:$2|dyskusja]]). Ktoś inny zdążył już to zrobić lub wprowadził własne poprawki do treści strony. Autorem ostatniej zmiany jest teraz [[{{ns:user}}:$3|$3]] ([[{{ns:user_talk}}:$3|dyskusja]]).',
+# only shown if there is an edit comment
+'editcomment' => 'Opisano ją następująco: "<i>$1</i>".',
+'revertpage' => 'Wycofano edycję użytkownika [[{{ns:Special}}:Contributions/$2|$2]] ([[{{ns:user_talk}}:$2|dyskusja]]). Autor przywróconej wersji to [[{{ns:user}}:$1|$1]].',
+'sessionfailure' => 'Błąd weryfikacji sesji. Twoje polecenie zostało anulowane, aby uniknąć przechwycenia sesji.
+
+Naciśnij "wstecz", przeładuj stronę, po czym ponownie wydaj polecenie.',
+'protectlogpage' => 'Zabezpieczone',
+'protectlogtext' => 'Poniżej znajduje się lista blokad założonych i zdjętych z pojedynczych stron. By dowiedzieć się czegoś więcej o blokowaniu stron, przeczytaj [[{{ns:Project}}:Zabezpieczanie stron]].',
+'protectedarticle' => 'zabezpieczono "[[$1]]"',
+'unprotectedarticle' => 'odbezpieczono "[[$1]]"',
+'protectsub' => '(Zabezpieczanie "$1")',
+'confirmprotecttext' => 'Czy na pewno chcesz zabezpieczyć tę stronę?',
+'confirmprotect' => 'Potwierdź zabezpieczenie',
+'protectmoveonly' => 'Zabezpiecz tylko przed przenoszeniem',
+'protectcomment' => 'Powód zabezpieczenia',
+'unprotectsub' => '(Odbezpieczanie "$1")',
+'confirmunprotecttext' => 'Czy na pewno chcesz odbezpieczyć tę stronę?',
+'confirmunprotect' => 'Potwierdź odbezpieczenie',
+'unprotectcomment' => 'Powód odbezpieczenia',
+'protect-unchain' => 'Odblokowanie możliwości przenoszenia strony',
+'protect-text' => 'Możesz tu zobaczyć i zmienić poziom zabezpieczenia strony <strong>$1</strong>. Upewnij się, że przestrzegasz [[{{ns:Project}}:Blokowanie stron|zasad zabezpieczania stron]].',
+'protect-viewtext' => 'Nie masz uprawnień do zmiany poziomu zabezpieczenia strony. Obecne ustawienia dla strony <strong>$1</strong> to:',
+'protect-cascadeon' => "Ta strona jest obecnie zabezpieczona przed edycją, ponieważ jest ona zawarta na następujących stronach, które zostały zabezpieczone z włączoną opcją dziedziczenia. Możesz zmienić poziom zabezpieczenia strony, ale nie wpłynie to na dziedziczenie zabezpiecznia.",
+'protect-default' => '(wszyscy)',
+'protect-level-autoconfirmed' => 'tylko zarejestrowani',
+'protect-level-sysop' => 'tylko administratorzy',
+'protect-summary-cascade' => 'dziedziczenie',
+'protect-cascade' => 'Dziedziczenie zabezpieczenia - zabezpiecz wszystkie strony zawarte na tej stronie.',
+
+# restrictions (nouns)
+'restriction-edit' => 'Edytuj',
+'restriction-move' => 'Przenieś',
+
+# Undelete
+'undelete' => 'Odtwórz skasowaną stronę',
+'undeletepage' => 'Odtwarzanie skasowanych stron',
+'viewdeletedpage' => 'Zobacz skasowane wersje',
+'undeletepagetext' => 'Poniższe strony zostały skasowane, ale ich kopia wciąż znajduje się w archiwum. Archiwum co jakiś czas także jest kasowane.',
+'undeleteextrahelp' => "Aby odtworzyć całą stronę, pozostaw wszystkie pola niezaznaczone i kliknij '''Odtwórz'''. Aby wybrać częściowe odtworzenie należy zaznaczyć odpowiednie pole. Naciśnięcie '''Wyczyść''' wyczyści wszystkie pola, łącznie z opisem komentarza.",
+'undeletearticle' => 'Odtwórz skasowaną stronę',
+'undeleterevisions' => 'Liczba zarchiwizowanych wersji: $1',
+'undeletehistory' => 'Odtworzenie strony spowoduje przywrócenie także jej wszystkich poprzednich wersji. Jeśli od czasu skasowania ktoś utworzył nową stronę o tej nazwie, odtwarzane wersje znajdą się w jej historii, a obecna wersja pozostanie bez zmian.',
+'undeletehistorynoadmin' => 'Ten artykuł został skasowany. Przyczyna usunięcia podana jest w podsumowaniu poniżej, razem z danymi użytkownika, który edytował artykuł przed skasowaniem. Sama treść usuniętych wersji jest dostępna jedynie dla administratorów.',
+'undelete-revision' => 'Skasowano wersję $1 z $2:',
+'undeleterevision-missing' => "Nieprawidłowa lub brakująca wersja. Możesz mieć zły link lub wersja mogła zostać odtworzona lub usunięta z archiwum.",
+'undeletebtn' => 'Odtwórz',
+'undeletereset' => 'Wyczyść',
+'undeletecomment' => 'Powód odtworzenia:',
+'undeletedarticle' => 'odtworzono "$1"',
+'undeletedrevisions' => 'Liczba odtworzonych wersji: $1',
+'undeletedrevisions-files' => "Odtworzono $1 wersji i $2 plik(i)",
+'undeletedfiles' => "Odtworzono $1 plik(i)",
+'cannotundelete' => 'Odtworzenie nie powiodło się. Ktoś inny mógł odtworzyć stronę pierwszy.',
+'undeletedpage' => '<big>Odtworzono stronę $1.</big>
+
+Zobacz [[{{ns:Special}}:Log/delete]], jeśli chcesz przejrzeć rejestr ostatnio skasowanych i odtworzonych stron.',
+
+# Namespace form on various pages
+'namespace' => 'Przestrzeń nazw:',
+'invert' => 'Odwróć wybór',
+
+# Contributions
+#
+'contributions' => 'Wkład użytkownika',
+'mycontris' => 'Moje edycje',
+'contribsub2' => 'Dla użytkownika $1 ($2)',
+'nocontribs' => 'Brak zmian odpowiadających tym kryteriom.',
+'ucnote' => 'Oto lista ostatnich <b>$1</b> zmian dokonanych przez użytkownika w ciągu ostatnich <b>$2</b> dni.',
+'uclinks' => 'Zobacz ostatnie $1 zmian; zobacz ostatnie $2 dni.',
+'uctop' => ' (jako ostatnia)' ,
+'newbies' => 'początkujący',
+
+'sp-contributions-newest' => 'Najnowsze',
+'sp-contributions-oldest' => 'Najstarsze',
+'sp-contributions-newer' => 'nowsze $1',
+'sp-contributions-older' => 'starsze $1',
+'sp-contributions-newbies-sub' => 'Dla nowych użytkowników',
+'sp-contributions-blocklog'    => 'blokady',
+
+'sp-newimages-showfrom' => 'Pokaż nowe grafiki od $1',
+
+# What links here
+#
+'whatlinkshere' => 'Linkujące',
+'notargettitle' => 'Wskazywana strona nie istnieje',
+'notargettext' => 'Nie podano strony albo użytkownika, dla których ta operacja ma być wykonana.',
+'linklistsub' => '(Lista linków)',
+'linkshere' => "Następujące strony odwołują się do '''[[:$1]]''':",
+'nolinkshere' => "Żadna strona nie odwołuje się do '''[[:$1]]'''.",
+'isredirect' => 'strona przekierowująca',
+'istemplate' => 'dołączony szablon',
+
+# Block/unblock IP
+#
+'blockip' => 'Zablokuj użytkownika',
+'blockiptext' => 'Użyj poniższego formularza aby zablokować prawo zapisu spod określonego adresu IP. Powinno się to robić jedynie by zapobiec wandalizmowi, a zarazem w zgodzie z [[{{ns:Project}}:Zasady i wskazówki|zasadami]]. Podaj powód (np. umieszczając nazwy stron, na których dopuszczono się wandalizmu).',
+'ipaddress' => 'Adres IP',
+'ipadressorusername' => 'Adres IP lub nazwa użytkownika',
+'ipbexpiry' => 'Czas blokady',
+'ipbreason' => 'Powód',
+'ipbanononly' => 'Zablokuj tylko anonimowych użytkowników',
+'ipbcreateaccount' => 'Zapobiegnij utworzeniu konta',
+'ipbenableautoblock' => 'Automatycznie blokuj adresy IP, spod których łączył się ten użytkownik.',
+'ipbsubmit' => 'Zablokuj użytkownika',
+'ipbother' => 'Inny czas',
+'ipboptions' => '2 godziny:2 hours,1 dzień:1 day,3 dni:3 days,1 tydzień:1 week,2 tygodnie:2 weeks,1 miesiąc:1 month,3 miesiące:3 months,6 miesięcy:6 months,1 rok:1 year,nieskończony:infinite',
+'ipbotheroption' => 'inny',
+'badipaddress' => 'Adres IP jest źle utworzony',
+'blockipsuccesssub' => 'Zablokowanie powiodło się',
+'blockipsuccesstext' => 'Użytkownik [[{{ns:Special}}:Contributions/$1|$1]] został zablokowany. <br />Przejdź do [[{{ns:Special}}:Ipblocklist|listy zablokowanych adresów IP]] by przejrzeć blokady.',
+'ipb-unblock-addr' => 'Odblokuj $1',
+'ipb-unblock' => 'Odblokuj użytkownika lub adres IP',
+'ipb-blocklist-addr' => 'Zobacz istniejące blokady $1',
+'ipb-blocklist' => 'Zobacz istniejące blokady',
+'unblockip' => 'Odblokuj użytkownika',
+'unblockiptext' => 'Użyj poniższego formularza by przywrócić prawa zapisu dla poprzednio zablokowanego użytkownika lub adresu IP.',
+'ipusubmit' => 'Odblokuj użytkownika',
+'unblocked' => '[[{{ns:User}}:$1|$1]] został odblokowany.',
+'ipblocklist' => 'Lista zablokowanych użytkowników i adresów IP',
+'blocklistline' => '$1, $2 zablokował $3 ($4)',
+'infiniteblock' => 'na zawsze',
+'expiringblock' => 'wygasa $1',
+'anononlyblock' => 'tylko anonimowi',
+'noautoblockblock' => 'autoblock wyłączony',
+'createaccountblock' => 'blokada tworzenia kont',
+'ipblocklistempty' => 'Lista zablokowanych użytkowników i adresów IP jest pusta',
+'blocklink' => 'zablokuj',
+'unblocklink' => 'odblokuj',
+'contribslink' => 'wkład',
+'autoblocker' => 'Zablokowano Cię automatycznie ponieważ używasz tego samego adresu IP co użytkownik "[[{{ns:user}}:$1|$1]]". Powód: "\'\'\'$2\'\'\'".',
+'blocklogpage' => 'Zablokowani',
+'blocklogentry' => 'zablokowano "[[$1]]", czas blokady: $2',
+'blocklogtext' => 'Poniżej znajduje się lista blokad założonych i zdjętych z poszczególnych adresów IP. Na liście nie znajdą się adresy IP, które zablokowano w sposób automatyczny. By przejrzeć listę obecnie aktywnych blokad, przejdź na stronę [[{{ns:Special}}:Ipblocklist|Zablokowane adresy IP]].',
+'unblocklogentry' => 'odblokowano "$1"',
+'block-log-flags-anononly' => 'tylko anonimowi',
+'block-log-flags-nocreate' => 'blokada tworzenia konta',
+'block-log-flags-autoblock' => 'autoblock włączony',
+'range_block_disabled' => 'Możliwość blokowania zakresu numerów IP została wyłączona.',
+'ipb_expiry_invalid' => 'Błędny czas wygaśnięcia.',
+'ipb_already_blocked' => '"$1" jest już zablokowany.',
+'ip_range_invalid' => 'Niewłaściwy zakres adresów IP.',
+'proxyblocker'	=> 'Blokowanie proxy',
+'ipb_cant_unblock' => 'Błąd: Blokada o ID $1 nie została znaleziona. Mogła ona zostać odblokowana wcześniej.',
+'proxyblockreason' => 'Twój adres IP został zablokowany - jest to otwarte proxy. Sprawę należy rozwiązać u dostawcy Internetu.',
+'proxyblocksuccess' => 'Wykonane.',
+'sorbs' => 'DNSBL',
+'sorbsreason' => 'Twój adres IP znajduje się na liście serwerów open proxy w [http://www.sorbs.net SORBS] DNSBL.',
+'sorbs_create_account_reason' => 'Twój adres IP znajduje się na liście serwerów open proxy w [http://www.sorbs.net SORBS] DNSBL. Nie możesz utworzyć konta.',
+
+# Developer tools
+#
+'lockdb' => 'Zablokuj bazę danych',
+'unlockdb' => 'Odblokuj bazę danych',
+'lockdbtext' => 'Zablokowanie bazy danych uniemożliwi wszystkim użytkownikom edycję stron, zmianę preferencji, edycję list obserwowanych artykułów oraz inne czynności wymagające dostępu do bazy danych. Potwierdź, proszę, że to jest zgodne z Twoimi zamiarami, i że odblokujesz bazę danych, gdy tylko zakończysz zadania administracyjne.',
+'unlockdbtext' => 'Odblokowanie bazy danych umożliwi wszystkim użytkownikom edycję stron, zmianę preferencji, edycję list obserwowanych artykułów oraz inne czynności związane ze zmianami w bazie danych. Potwierdź, proszę, że to jest zgodne z Twoimi zamiarami.',
+'lockconfirm' => 'Tak, naprawdę chcę zablokować bazę danych.',
+'unlockconfirm' => 'Tak, naprawdę chcę odblokować bazę danych.',
+'lockbtn' => 'Zablokuj bazę danych',
+'unlockbtn' => 'Odblokuj bazę danych',
+'locknoconfirm' => 'Nie zaznaczyłeś pola potwierdzenia.',
+'lockdbsuccesssub' => 'Baza danych została pomyślnie zablokowana',
+'unlockdbsuccesssub' => 'Blokada bazy danych usunięta',
+'lockdbsuccesstext' => 'Baza danych została zablokowana.<br />Pamiętaj by [[{{ns:Special}}:Unlockdb|usunąć blokadę]] po zakończeniu działań administracyjnych.',
+'unlockdbsuccesstext' => 'Baza danych została odblokowana.',
+'lockfilenotwritable' => 'Nie można zapisać pliku blokady bazy danych. Aby móc blokować i odblokowywać bazę danych, plik musi mieć właściwe prawa dostępu.',
+'databasenotlocked' => 'Baza danych nie jest zablokowana.',
+
+# Move page
+#
+'movepage' => 'Przenieś stronę',
+'movepagetext' => "Za pomocą poniższego formularza zmienisz nazwę strony, przenosząc jednocześnie jej historię.
+Pod starym tytułem zostanie umieszczona strona przekierowująca. Linki do starego tytułu pozostaną niezmienione.
+Upewnij się, że uwzględniasz podwójne lub zerwane przekierowania. Odpowiadasz za to, żeby linki odnosiły się do właściwych artykułów!
+
+Strona '''nie''' będzie przeniesiona jeśli:
+*jest pusta i nigdy nie była edytowana
+*jest stroną przekierowującą
+*strona o nowej nazwie już istnieje
+
+'''UWAGA!'''
+Może to być drastyczna lub nieprzewidywalna zmiana w przypadku popularnych stron; upewnij się co do konsekwencji tej operacji zanim się na nią zdecydujesz.",
+'movepagetalktext' => "Odpowiednia strona dyskusji, jeśli istnieje, będzie przeniesiona automatycznie, pod warunkiem, że:
+*nie przenosisz strony do innej przestrzeni nazw
+*nie istnieje strona dyskusji o nowej nazwie
+W takich przypadkach tekst dyskusji trzeba przenieść, i ewentualnie połączyć z istniejącym, ręcznie. Możesz też zrezygnować z przeniesienia dyskusji (poniższy ''checkbox'').",
+'movearticle' => 'Przenieś stronę',
+'movenologin' => 'Brak logowania',
+'movenologintext' => 'Musisz być zarejestrowanym i [[{{ns:Special}}:Userlogin|zalogowanym]] użytkownikiem aby móc przenieść stronę.',
+'newtitle' => 'Nowy tytuł',
+'move-watch' => 'Obserwuj tę stronę',
+'movepagebtn' => 'Przenieś stronę',
+'pagemovedsub' => 'Przeniesienie powiodło się',
+'pagemovedtext' => 'Strona "[[:$1|$1]]" została przeniesiona do "[[:$2|$2]]".',
+'articleexists' => 'Strona o podanej nazwie już istnieje albo wybrana przez Ciebie nazwa nie jest poprawna. Wybierz, proszę, nową nazwę.',
+'talkexists' => 'Strona artykułu została przeniesiona, natomiast strona dyskusji nie - strona dyskusji o nowym tytule już istnieje. Połącz, proszę, teksty obu dyskusji ręcznie.',
+'movedto' => 'przeniesiono do',
+'movetalk' => 'Przenieś także stronę dyskusji, jeśli to możliwe.',
+'talkpagemoved' => 'Odpowiednia strona dyskusji także została przeniesiona.',
+'talkpagenotmoved' => 'Odpowiednia strona dyskusji <strong>nie</strong> została przeniesiona.',
+'1movedto2' => '[[$1]] przeniesiono do [[$2]]',
+'1movedto2_redir' => '[[$1]] przeniesiono do [[$2]] nad przekierowaniem',
+'movelogpage' => 'Przeniesione',
+'movelogpagetext' => 'Oto lista stron, które ostatnio zostały przeniesione.',
+'movereason' => 'Powód',
+'revertmove' => 'cofnij',
+'delete_and_move' => 'Usuń i przenieś',
+'delete_and_move_text' => '== Wymagane usunięcie ==
+
+Artykuł docelowy "[[:$1|$1]]" już istnieje. Czy chcesz go usunąć, by zrobić miejsce dla przenoszonego artykułu?',
+'delete_and_move_confirm' => 'Tak, usuń stronę',
+'delete_and_move_reason' => 'Usunięto by zrobić miejsce dla przenoszonego artykułu',
+'selfmove' => 'Nazwy stron źródłowej i docelowej są takie same. Strony nie można przenieść na nią samą!',
+'immobile_namespace' => 'Docelowy tytuł jest specjalnego typu. Nie można przenieść do tej przestrzeni nazw.',
+
+# Export
+
+'export' => 'Eksport stron',
+'exporttext' => 'Możesz wyeksportować tekst i historię edycji danej strony lub zestawu stron w postaci XML. Taki zrzut można potem (jak import już będzie działać) zaimportować do innej wiki działającej na oprogramowaniu MediaWiki, obrabiać lub po prostu trzymać dla zabawy.
+
+Żeby uzyskać kilka stron wpisz ich nazwy jedna pod drugą.
+
+Można również użyć łącza, np. [[{{ns:Special}}:Export/{{Mediawiki:mainpage}}]] dla strony {{Mediawiki:mainpage}}.',
+'exportcuronly' => 'Tylko bieżąca wersja, bez historii',
+'exportnohistory' => "----
+'''Uwaga:''' możliwość eksportowania pełnej historii stron została wyłączona.",
+'export-submit' => 'Eksportuj',
+
+# Namespace 8 related
+
+'allmessages' => 'Komunikaty systemowe',
+'allmessagesname' => 'Nazwa',
+'allmessagesdefault' => 'Tekst domyślny',
+'allmessagescurrent' => 'Tekst obecny',
+'allmessagestext' => 'Oto lista wszystkich komunikatów dostępnych w przestrzeni nazw MediaWiki:',
+'allmessagesnotsupportedUI' => 'Wybrany przez Ciebie język interfejsu <b>$1</b> nie jest wspierany przez stronę Special:Allmessages.',
+'allmessagesnotsupportedDB' => 'Strona \'\'\'Special:Allmessages\'\'\' nie może być użyta, ponieważ \'\'\'$wgUseDatabaseMessages\'\'\' jest wyłączone.',
+'allmessagesfilter' => 'Filtr nazw komunikatów:',
+'allmessagesmodified' => 'Pokaż tylko zmodyfikowane',
+
+# Thumbnails
+
+'thumbnail-more' => 'Powiększ',
+'missingimage' => '<b>Brak obrazka</b><br /><i>$1</i>',
+'filemissing' => 'Brak pliku',
+'thumbnail_error' => 'Błąd przy generowaniu miniatury: $1',
+
+# Special:Import
+'import' => 'Importuj strony',
+'importinterwiki' => 'Import transwiki',
+'import-interwiki-text' => 'Wybierz wiki i nazwę strony do importowania. Daty oraz nazwy autorów zostaną zachowane. Wszystkie operacje importu transwiki są odnotowywane w [[{{ns:Special}}:Log/import|rejestrze importu]].',
+'import-interwiki-history' => 'Kopiuj całą historię edycji tej strony',
+'import-interwiki-submit' => 'Importuj',
+'import-interwiki-namespace' => 'Przenieś strony do przestrzeni nazw:',
+'importtext' => 'Używając narzędzia Special:Export wyeksportuj plik ze źródłowej wiki, zapisz go na swoim dysku, a następnie prześlij go tutaj.',
+'importstart' => 'Trwa importowanie stron...',
+'import-revision-count' => '$1 {{PLURAL:$1|wersja|wersji}}',
+'importnopages' => 'Brak stron do importu.',
+'importfailed' => 'Import nie powiódł się: $1',
+'importunknownsource' => 'Nieznany format importu źródłowego',
+'importcantopen' => 'Nie można otworzyć importowanego pliku',
+'importbadinterwiki' => 'Błędny link interwiki',
+'importnotext' => 'Brak tekstu lub zawartości',
+'importsuccess' => 'Import zakończony powodzeniem!',
+'importhistoryconflict' => 'Wystąpił konflikt wersji (ta strona mogła zostać importowana już wcześniej)',
+'importnosources' => 'Możliwość bezpośredniego importu historii została wyłączona: nie zdefiniowano źródła.',
+'importnofile' => 'Importowany plik nie został załadowany.',
+'importuploaderror' => 'Przesłanie pliku nie powiodło się. Możliwe, że plik jest większy od dozwolonego limitu.',
+
+# import log
+'importlogpage' => 'Rejestr importu',
+'importlogpagetext' => 'Rejestr przeprowadzonych importów stron z innych serwisów wiki.',
+'import-logentry-upload' => 'zaimportowano [[$1]] przez przesłanie pliku',
+'import-logentry-upload-detail' => '$1 wersji',
+'import-logentry-interwiki' => 'zaimportowano $1 przez transwiki',
+'import-logentry-interwiki-detail' => '$1 wersji z $2',
+
+# Tooltip help for the actions
+'tooltip-pt-userpage' => 'Moja osobista strona',
+'tooltip-pt-anonuserpage' => 'Strona użytkownika dla numeru IP spod którego edytujesz',
+'tooltip-pt-mytalk' => 'Moja strona dyskusji',
+'tooltip-pt-anontalk' => 'Dyskusja użytkownika dla numeru IP spod którego edytujesz',
+'tooltip-pt-preferences' => 'Moje preferencje',
+'tooltip-pt-watchlist' => 'Lista stron przez Ciebie obserwowanych',
+'tooltip-pt-mycontris' => 'Lista moich edycji',
+'tooltip-pt-login' => 'Zachęcamy do zalogowania się, choć nie jest to obowiązkowe.',
+'tooltip-pt-anonlogin' => 'Zachęcamy do zalogowania się, choć nie jest to obowiązkowe',
+'tooltip-pt-logout' => 'Wyloguj się z wiki',
+'tooltip-ca-talk' => 'Dyskusja o zawartości tej strony.',
+'tooltip-ca-edit' => 'Możesz edytować tę stronę. Przed zapisaniem zmian użyj przycisku podgląd.',
+'tooltip-ca-addsection' => 'Dodaj swój komentarz do dyskusji',
+'tooltip-ca-viewsource' => 'Ta strona jest zabezpieczona. Możesz zobaczyć tekst źródłowy.',
+'tooltip-ca-history' => 'Starsze wersje tej strony.',
+'tooltip-ca-protect' => 'Zabezpiecz tę stronę.',
+'tooltip-ca-delete' => 'Usuń tę stronę',
+'tooltip-ca-undelete' => 'Przywróć wersję tej strony sprzed usunięcia',
+'tooltip-ca-move' => 'Przenieś tę stronę.',
+'tooltip-ca-watch' => 'Dodaj tę stronę do listy obserwowanych',
+'tooltip-ca-unwatch' => 'Usuń tę stronę z listy obserwowanych',
+'tooltip-search' => 'Przeszukaj serwis {{SITENAME}}',
+'tooltip-p-logo' => 'Strona główna',
+'tooltip-n-mainpage' => 'Zobacz stronę główną',
+'tooltip-n-portal' => 'O projekcie, co możesz zrobić, gdzie możesz znaleźć informacje',
+'tooltip-n-currentevents' => 'Informacje o aktualnych wydarzeniach',
+'tooltip-n-recentchanges' => 'Lista ostatnich zmian na wiki',
+'tooltip-n-randompage' => 'Pokaż losowo wybraną stronę',
+'tooltip-n-help' => 'Zapoznaj się z obsługą wiki',
+'tooltip-n-sitesupport' => 'Wesprzyj nas',
+'tooltip-t-whatlinkshere' => 'Pokaż listę stron linkujących do tego artykułu',
+'tooltip-t-recentchangeslinked' => 'Ostatnie zmiany w stronach linkujących do tej strony',
+'tooltip-feed-rss' => 'Kanał RSS dla tej strony',
+'tooltip-feed-atom' => 'Kanał Atom dla tej strony',
+'tooltip-t-contributions' => 'Pokaż listę edycji tego użytkownika',
+'tooltip-t-emailuser' => 'Wyślij e-mail do tego użytkownika',
+'tooltip-t-upload' => 'Wyślij plik na serwer',
+'tooltip-t-specialpages' => 'Lista wszystkich specjalnych stron',
+'tooltip-ca-nstab-main' => 'Zobacz stronę artykułu',
+'tooltip-ca-nstab-user' => 'Zobacz stronę osobistą użytkownika',
+'tooltip-ca-nstab-media' => 'Pokaż stronę pliku',
+'tooltip-ca-nstab-special' => 'To jest specjalna strona. Nie możesz jej edytować.',
+'tooltip-ca-nstab-project' => 'Zobacz stronę projektu',
+'tooltip-ca-nstab-image' => 'Zobacz stronę grafiki',
+'tooltip-ca-nstab-mediawiki' => 'Zobacz komunikat systemowy',
+'tooltip-ca-nstab-template' => 'Zobacz szablon',
+'tooltip-ca-nstab-help' => 'Zobacz stronę pomocy',
+'tooltip-ca-nstab-category' => 'Zobacz stronę kategorii',
+'tooltip-minoredit' => 'Oznacz zmianę jako drobną',
+'tooltip-save' => 'Zapisz zmiany',
+'tooltip-preview' => 'Obejrzyj efekt swojej edycji przed zapisaniem zmian!',
+'tooltip-diff' => 'Pokaż zmiany dokonane w tekście.',
+'tooltip-compareselectedversions' => 'Zobacz różnice między dwoma wybranymi wersjami strony.',
+'tooltip-watch' => 'Dodaj tę stronę do listy obserwowanych',
+'tooltip-recreate' => 'Odtworzono stronę pomimo jej wcześniejszego usunięcia.',
+
+# stylesheets
+'common.css' => '/* Umieszczony tutaj kod CSS zostanie zastosowany we wszystkich skórkach */',
+'monobook.css' => '/* Umieszczony tutaj kod CSS wpłynie na wygląd skórki Monobook */',
+
+# Scripts
+'common.js' => '/* Umieszczony tutaj kod JavaScript zostanie załadowany przez każdego użytkownika, podczas każdego ładowania strony. */',
+'monobook.js' => '/* Zobacz [[MediaWiki:common.js]] */',
+
+# Metadata
+'nodublincore' => 'Metadane zgodne z Dublin Core RDF zostały wyłączone dla tego serwera.',
+'nocreativecommons' => 'Metadane zgodne z Creative Commons RDF zostały wyłączone dla tego serwera.',
+'notacceptable' => 'Serwer wiki nie jest w stanie dostarczyć danych, które Twoja przeglądarka będzie w stanie odczytać.',
+
+# Attribution
+
+'anonymous' => 'Anonimowy użytkownicy serwisu {{SITENAME}}',
+'siteuser' => 'Użytkownik serwisu {{SITENAME}} - $1',
+'lastmodifiedatby' => 'Ostatnia edycja tej strony: $2, $1 (autor zmian: $3)',
+'and' => 'oraz',
+'othercontribs' => 'Inni autorzy: $1.',
+'others' => 'inni',
+'siteusers' => 'Użytkownicy serwisu {{SITENAME}} - $1',
+'creditspage' => 'Autorzy',
+'nocredits' => 'Nie ma informacji o autorach tej strony.',
+
+# Spam protection
+
+'spamprotectiontitle' => 'Filtr antyspamowy',
+'spamprotectiontext' => 'Strona, którą chciałeś zapisać została zablokowana przez filtr antyspamowy. Najprawdopodobniej zostało to spowodowane przez link do zewnętrznej strony internetowej.',
+'spamprotectionmatch' => 'Tekst, który uruchomił nasz filtr antyspamowy to: $1',
+'subcategorycount' => '{{PLURAL:$1|Jest jedna podkategoria|Liczba podkategorii: $1}}',
+'categoryarticlecount' => '{{PLURAL:$1|Jest jeden artykuł w tej kategorii|Liczba artykułów w tej kategorii: $1}}',
+'category-media-count' => "{{PLURAL:$1|Jest jeden plik w tej kategorii|Liczba plików w tej kategorii: $1}}",
+'listingcontinuesabbrev' => " c.d.",
+'spambot_username' => 'MediaWiki czyszczenie spamu',
+'spam_reverting' => 'Przywracanie ostatniej wersji nie zawierającej odnośników do $1',
+'spam_blanking' => 'Wszystkie wersje zawierały odnośniki do $1; czyszczenie strony',
+
+# Info page
+'infosubtitle' => 'Informacja o stronie',
+'numedits' => 'Liczba edycji (artykuł): $1',
+'numtalkedits' => 'Liczba edycji (strona dyskusji): $1',
+'numwatchers' => 'Liczba obserwujących: $1',
+'numauthors' => 'Liczba autorów (artykuł): $1',
+'numtalkauthors' => 'Liczba autorów (strona dyskusji): $1',
+
+# Math options
+'mw_math_png' => 'Zawsze jako PNG',
+'mw_math_simple' => 'HTML dla prostych, dla reszty PNG',
+'mw_math_html' => 'Spróbuj HTML; jeśli zawiedzie, to PNG',
+'mw_math_source' => 'Pozostaw w TeXu (dla przeglądarek tekstowych)',
+'mw_math_modern' => 'HTML, dla nowszych przeglądarek',
+'mw_math_mathml' => 'MathML (eksperymentalne)',
+
+# Patrolling
+'markaspatrolleddiff' => 'Oznacz jako sprawdzone',
+'markaspatrolledtext' => 'Oznacz ten artykuł jako sprawdzony',
+'markedaspatrolled' => 'Oznaczono jako sprawdzone',
+'markedaspatrolledtext' => 'Ta wersja została oznaczona jako sprawdzona.',
+'rcpatroldisabled' => 'Wyłączono patrolowanie na ostatnich zmianach',
+'rcpatroldisabledtext' => 'Patrolowanie ostatnich zmian jest obecnie wyłączone',
+'markedaspatrollederror' => 'Nie można oznaczyć jako sprawdzone',
+'markedaspatrollederrortext' => 'Musisz wybrać wersję żeby oznaczyć ją jako sprawdzoną.',
+'markedaspatrollederror-noautopatrol' => 'Nie masz uprawnień wymaganych do oznaczania swoich edycji jako sprawdzone.',
+
+# Patrol log
+'patrol-log-page' => 'Patrolowane',
+# 'patrol-log-line' => 'oznaczono $1 of $2 patrolled $3',
+'patrol-log-auto' => '(automatycznie)',
+'patrol-log-diff' => 'r$1',
+
+# image deletion
+'deletedrevision' => 'Skasowano poprzednie wersje $1.',
+
+# browsing diffs
+'previousdiff' => '← Poprzednia edycja',
+'nextdiff' => 'Następna edycja →',
+
+'imagemaxsize' => 'Na stronach opisu pokaż grafiki przeskalowane do rozdzielczości:',
+'thumbsize' => 'Rozmiar miniaturki:',
+'showbigimage' => 'Pobierz grafikę w wyższej rozdzielczości ($1x$2, $3 KB)',
+
+'newimages' => 'Najnowsze grafiki',
+'showhidebots' => '($1 boty)',
+'noimages' => 'Nic.',
+
+# labels for User: and Title: on Special:Log pages
+'specialloguserlabel' => 'Użytkownik:',
+'speciallogtitlelabel' => 'Tytuł:',
+
+'passwordtooshort' => 'Twoje hasło jest za krótkie. Musi mieć co najmniej $1 znaków.',
+
+# Media Warning
+'mediawarning' => "'''Uwaga:''' Ten plik może zawierać złośliwy kod, otwierając go możesz zarazić swój system.<hr />",
+
+'fileinfo' => '$1KB, typ MIME: <code>$2</code>',
+
+# Metadata
+'metadata' => 'Metadane',
+'metadata-help' => 'Niniejszy plik zawiera dodatkowe informacje, prawdopodobnie dodane przez aparat cyfrowy lub skaner. Jeśli plik był modyfikowany, dane mogą być częściowo błędne.',
+'metadata-expand' => 'Pokaż szczegóły',
+'metadata-collapse' => 'Ukryj szczegóły',
+'metadata-fields' => 'Wymienione poniżej pola EXIF zostaną wymienione na stronie grafiki. Pozostałe pola zostaną domyślnie ukryte.
+* producent aparatu
+* model aparatu
+* data i czas utworzenia
+* czas ekspozycji
+* wartość przesłony
+* długość ogniskowej',
+
+# Exif tags
+'exif-imagewidth' => 'Szerokość',
+'exif-imagelength' => 'Wysokość',
+'exif-compression' => 'Schemat kompresji',
+'exif-orientation' => 'Orientacja',
+'exif-planarconfiguration' => 'Rozkład danych',
+'exif-xresolution' => 'rozdzielczosć w poziomie',
+'exif-yresolution' => 'rozdzielczość w pionie',
+'exif-resolutionunit' => 'Jednostki rozdzielczośći X i Y',
+'exif-jpeginterchangeformat' =>'Przesunięcie JPEG SOI',
+'exif-jpeginterchangeformatlength' => 'Wielkość pliku JPEG',
+'exif-whitepoint' => 'Punkty bieli',
+'exif-ycbcrcoefficients' => 'Współczynniki macierzy transformacji przestrzeni barw',
+'exif-datetime' => 'Data i czas zmiany pliku',
+'exif-imagedescription' => 'Tytuł',
+'exif-make' => 'Producent aparatu',
+'exif-model' => 'Model aparatu',
+'exif-software' => 'Oprogramowanie',
+'exif-artist' => 'Autor',
+'exif-copyright' => 'Właściciel praw autorskich',
+'exif-exifversion' => 'Wersja EXIF',
+'exif-flashpixversion' => 'Obsługiwana wersja Flashpix',
+'exif-colorspace' => 'Przestrzeń kolorów',
+'exif-componentsconfiguration' => 'Znaczenie elementów',
+'exif-compressedbitsperpixel' => 'Tryb kompresji grafiki',
+'exif-makernote' => 'Informacje producenta',
+'exif-usercomment' => 'Komentarz',
+'exif-relatedsoundfile' => 'Zawiera plik audio',
+'exif-datetimeoriginal' => 'Data i czas utworzenia',
+'exif-datetimedigitized' => 'Data i czas utworzenia kopii cyfrowej',
+'exif-exposuretime' => 'Czas ekspozycji',
+'exif-exposuretime-format' => '$1 s. ($2)',
+'exif-fnumber' => 'Wartość przesłony',
+'exif-fnumber-format' =>'f/$1',
+'exif-exposureprogram' => 'Program ekspozycji',
+'exif-oecf' => 'Optyczno-elektroniczna zamiana wektora',
+'exif-shutterspeedvalue' => 'Czas naświetlania',
+'exif-aperturevalue' => 'Wartość przesłony',
+'exif-brightnessvalue' => 'Jasność',
+'exif-exposurebiasvalue' => 'Nastawienie ekspozycji',
+'exif-maxaperturevalue' => 'Maksymalna wartość przysłony',
+'exif-subjectdistance' => 'Odległość od obiektu',
+'exif-meteringmode' => 'Tryb pomiaru',
+'exif-lightsource' => 'Źródło światła',
+'exif-flash' => 'Lampa błyskowa',
+'exif-focallength' => 'Długość ogniskowej soczewki',
+'exif-focallength-format' =>'$1 mm',
+'exif-subjectarea' => 'Otoczenie obiektu',
+'exif-flashenergy' => 'Moc lampy błyskowej',
+'exif-focalplanexresolution' => 'Rozdzielczość w poziomie płaszczyzny odwzorowania obiektywu',
+'exif-focalplaneyresolution' => 'Rozdzielczość w pionie płaszczyzny odwzorowania obiektywu',
+'exif-focalplaneresolutionunit' => 'Jednostka rozdzielczości płaszczyzny odwzorowania obiektywu',
+'exif-subjectlocation' => 'Umiejscowienie obiektu',
+'exif-exposureindex' => 'Tabela ekspozycji',
+'exif-sensingmethod' => 'Metoda pomiaru',
+'exif-filesource' => 'Plik źródłowy',
+'exif-scenetype' => 'Typ sceny',
+'exif-cfapattern' => 'Wzór CFA',
+'exif-customrendered' => 'Rodzaj obróbki',
+'exif-exposuremode' => 'Ekspozycja',
+'exif-whitebalance' => 'Balans bieli',
+'exif-digitalzoomratio' => 'Przybliżenie cyfrowe',
+'exif-focallengthin35mmfilm' => 'Długość ogniskowej na filmie 35 mm',
+'exif-scenecapturetype' => 'Rodzaj sceny',
+'exif-gaincontrol' => 'Kontrola sceny',
+'exif-contrast' => 'Kontrast',
+'exif-saturation' => 'Nasycenie barw',
+'exif-sharpness' => 'Ostrość',
+'exif-devicesettingdescription' => 'Opis ustawień urządzenia',
+'exif-subjectdistancerange' => 'Zakres odległości od obiektu',
+'exif-imageuniqueid' => 'ID grafiki',
+'exif-gpsversionid' => 'Wersja GPS',
+'exif-gpslatituderef' => 'Północna lub południowa szerokość geograficzna',
+'exif-gpslatitude' => 'Szerokość geograficzna',
+'exif-gpslongituderef' => 'Wschodnia lub zachodnia długość geograficzna',
+'exif-gpslongitude' => 'Długość geograficzna',
+'exif-gpsaltituderef' => 'Wielkość odwoławcza',
+'exif-gpsaltitude' => 'Wysokość',
+'exif-gpstimestamp' => 'Czas GPS (zegar atomowy)',
+'exif-gpssatellites' => 'Satelity użyte do pomiaru',
+'exif-gpsstatus' => 'Otrzymany status',
+'exif-gpsmeasuremode' => 'Tryb pomiaru',
+'exif-gpsdop' => 'Precyzja pomiaru',
+'exif-gpsspeedref' => 'Jednostka prędkości',
+'exif-gpsspeed' => 'Prędkość odbiornika GPS',
+'exif-gpstrackref' => 'Poprawka pomiędzy kierunkiem i celem',
+'exif-gpstrack' => 'Kierunek ruchu',
+'exif-gpsimgdirectionref' =>'Poprawka dla kierunku zdjęcia',
+'exif-gpsimgdirection' =>'Kierunek zdjęcia',
+'exif-gpsdestlatitude' => 'Szerokość geograficzna celu',
+'exif-gpsdestlongitude' => 'Długość geograficzna celu',
+'exif-gpsdestdistance' => 'Odległość od celu',
+'exif-gpsprocessingmethod' => 'Nazwa metody GPS',
+'exif-gpsareainformation' => 'Nazwa przestrzeni GPS',
+'exif-gpsdatestamp' => 'Data GPS',
+
+# Exif attributes
+
+'exif-compression-1' => 'Nieskompresowany',
+'exif-compression-6' => 'JPEG',
+
+'exif-unknowndate' => 'Nieznana data',
+
+'exif-photometricinterpretation-2' => 'RGB',
+'exif-photometricinterpretation-6' => 'YCbCr',
+
+'exif-orientation-1' => 'Normalna',
+'exif-orientation-2' => 'Odwrócona w poziomie',
+'exif-orientation-3' => 'Obrócona o 180°',
+'exif-orientation-4' => 'Odwrócona w pionie',
+'exif-orientation-5' => 'Obrót o 90° przeciwnie do wskazówek zegara i odwrócenie w pionie',
+'exif-orientation-6' => 'Obrót o 90° zgodnie ze wskazówkami zegara',
+'exif-orientation-7' => 'Obrót o 90° zgodnie do wskazówek zegara i odwrót w pionie',
+'exif-orientation-8' => 'Obrót o 90° przeciwnie do wskazówek zegara',
+
+'exif-planarconfiguration-1' => 'format masywny',
+'exif-planarconfiguration-2' => 'format powierzchniowy',
+
+'exif-xyresolution-i' => '$1 dpi',
+'exif-xyresolution-c' => '$1 dpc',
+
+'exif-colorspace-1' => 'sRGB',
+'exif-colorspace-ffff.h' => 'FFFF.H',
+
+'exif-componentsconfiguration-0' => 'nie istnieje',
+'exif-componentsconfiguration-1' => 'Y',
+'exif-componentsconfiguration-2' => 'Cb',
+'exif-componentsconfiguration-3' => 'Cr',
+'exif-componentsconfiguration-4' => 'R',
+'exif-componentsconfiguration-5' => 'G',
+'exif-componentsconfiguration-6' => 'B',
+
+
+'exif-exposureprogram-0' => 'Nie zdefiniowany',
+'exif-exposureprogram-1' => 'Manualny',
+'exif-exposureprogram-2' => 'Normalny',
+'exif-exposureprogram-3' => 'Preselekcja przesłony',
+'exif-exposureprogram-4' => 'Preselekcja migawki',
+'exif-exposureprogram-5' => 'Kreatywny (duża głębia ostrości)',
+'exif-exposureprogram-6' => 'Aktywny (duża szybkość migawki)',
+'exif-exposureprogram-7' => 'Tryb portretowy (dla zdjęć z bliska, z rozmazanym tłem)',
+'exif-exposureprogram-8' => 'Tryb krajobrazowy (dla dalekich zdjęć z ostrym tłem)',
+
+'exif-subjectdistance-value' => '$1 metrów',
+
+'exif-meteringmode-0' => 'Nieznany',
+'exif-meteringmode-1' => 'Średni',
+'exif-meteringmode-2' => 'Średnia ważona',
+'exif-meteringmode-3' => 'Punktowy',
+'exif-meteringmode-4' => 'Wielopunktowy',
+'exif-meteringmode-5' => 'Próbkowy',
+'exif-meteringmode-6' => 'Częściowy',
+'exif-meteringmode-255' => 'Inny',
+
+'exif-lightsource-0' => 'Nieznane',
+'exif-lightsource-1' => 'Światło dzienne',
+'exif-lightsource-2' => 'Światło jarzeniowe',
+'exif-lightsource-3' => 'Światło sztuczne (żarowe)',
+'exif-lightsource-4' => 'Lampa błyskowa',
+'exif-lightsource-9' => 'Dobra pogoda',
+'exif-lightsource-10' => 'Zachmurzona pogoda',
+'exif-lightsource-11' => 'Cienie',
+'exif-lightsource-12' => 'Jarzeniowe światło dnia (D 5700 – 7100K)',
+'exif-lightsource-13' => 'Jarzeniowe białe (N 4600 – 5400K)',
+'exif-lightsource-14' => 'Jarzeniowe miękkie (W 3900 – 4500K)',
+'exif-lightsource-15' => 'Jarzeniowe białe (WW 3200 – 3700K)',
+'exif-lightsource-17' => 'Światło standardowe A',
+'exif-lightsource-18' => 'Światło standardowe B',
+'exif-lightsource-19' => 'Światło standardowe C',
+'exif-lightsource-20' => 'D55',
+'exif-lightsource-21' => 'D65',
+'exif-lightsource-22' => 'D75',
+'exif-lightsource-23' => 'D50',
+'exif-lightsource-24' => 'Żarowe studyjne',
+'exif-lightsource-255' => 'Inne źródło światła',
+
+'exif-focalplaneresolutionunit-2' => 'cale',
+
+'exif-sensingmethod-1' => 'Niezdefiniowana',
+'exif-sensingmethod-7' => 'Trilinearna',
+
+'exif-filesource-3' => 'DSC',
+
+'exif-scenetype-1' => 'Obiekt fotografowany bezpośrednio',
+
+'exif-customrendered-0' => 'Tryb normalny',
+'exif-customrendered-1' => 'Tryb zmienny',
+
+'exif-exposuremode-0' => 'Automatyczna',
+'exif-exposuremode-1' => 'Manualna',
+'exif-exposuremode-2' => 'Wieloprzysłonowa',
+
+'exif-whitebalance-0' => 'Automatyczny balans bieli',
+'exif-whitebalance-1' => 'Ręczny balans bieli',
+
+'exif-scenecapturetype-0' => 'Standardowy',
+'exif-scenecapturetype-1' => 'Krajobraz',
+'exif-scenecapturetype-2' => 'Portret',
+'exif-scenecapturetype-3' => 'Scena nocna',
+
+'exif-gaincontrol-0' => 'Brak',
+'exif-gaincontrol-1' => 'Niskie wzmocnienie',
+'exif-gaincontrol-2' => 'Wysokie wzmocnienie',
+'exif-gaincontrol-3' => 'Niskie osłabienie',
+'exif-gaincontrol-4' => 'Wysokie osłabienie',
+
+'exif-contrast-0' => 'Normalny',
+'exif-contrast-1' => 'Miękki',
+'exif-contrast-2' => 'Twardy',
+
+'exif-saturation-0' => 'Normalne',
+'exif-saturation-1' => 'Niskie',
+'exif-saturation-2' => 'Wysokie',
+
+'exif-sharpness-0' => 'Normalna',
+'exif-sharpness-1' => 'Miękka',
+'exif-sharpness-2' => 'Twarda',
+
+'exif-subjectdistancerange-0' => 'Nieznana',
+'exif-subjectdistancerange-1' => 'Makro',
+'exif-subjectdistancerange-2' => 'Widok z bliska',
+'exif-subjectdistancerange-3' => 'Widok z daleka',
+
+// Pseudotags used for GPSLatitudeRef and GPSDestLatitudeRef
+'exif-gpslatitude-n' => 'Szerokość geograficzna północna',
+'exif-gpslatitude-s' => 'Szerokość geograficzna południowa',
+
+// Pseudotags used for GPSLongitudeRef and GPSDestLongitudeRef
+'exif-gpslongitude-e' => 'Długość geograficzna wschodnia',
+'exif-gpslongitude-w' => 'Długość geograficzna zachodnia',
+
+'exif-gpsstatus-a' => 'Pomiar w trakcie',
+'exif-gpsstatus-v' => 'Pomiar interoperacyjny',
+
+'exif-gpsmeasuremode-2' => '2-wymiarowy',
+'exif-gpsmeasuremode-3' => '3-wymiarowy',
+
+// Pseudotags used for GPSSpeedRef and GPSDestDistanceRef
+'exif-gpsspeed-k' => 'Kilometry na godzinę',
+'exif-gpsspeed-m' => 'Mile na godzinę',
+'exif-gpsspeed-n' => 'Węzły',
+
+// Pseudotags used for GPSTrackRef, GPSImgDirectionRef and GPSDestBearingRef
+'exif-gpsdirection-t' => 'Prawdziwy kierunek',
+'exif-gpsdirection-m' => 'Kierunek magnetyczny',
+
+# external editor support
+'edit-externally' => 'Edytuj ten plik używając zewnętrznej aplikacji',
+'edit-externally-help' => 'Zobacz więcej informacji o używaniu [http://meta.wikimedia.org/wiki/Help:External_editors zewnętrznych edytorów].',
+
+# 'all' in various places, this might be different for inflected languages
+'recentchangesall' => 'wszystkie',
+'imagelistall' => 'wszystkich',
+'watchlistall1' => 'wszystkie',
+'watchlistall2' => 'wszystkie',
+'namespacesall' => 'wszystkie',
+
+# E-mail address confirmation
+'confirmemail' => 'Potwierdź adres e-mail',
+'confirmemail_noemail' => 'Nie podałeś prawidłowego adresu e-mail w [[Special:Preferences|preferencjach]].',
+'confirmemail_text' => 'Wymagane jest potwierdzenie adresu e-mail przed użyciem funkcji pocztowych. Wciśnij przycisk poniżej aby wysłać na swój adres list uwierzytelniający. W liście znajdziesz link zawierający kod: załaduj go do przeglądarki aby potwierdzić swój adres.',
+'confirmemail_pending' => '<div class="error">Kod potwierdzenia został już wysłany do Ciebie. Jeśli zarejestrowałeś się niedawno, poczekaj kilka minut na nadejście wiadomości przed kolejną prośbą o wysłanie kodu.</div>',
+'confirmemail_send' => 'Wyślij kod potwierdzenia',
+'confirmemail_sent' => 'E-mail uwierzytelniający został wysłany.',
+'confirmemail_oncreate' => 'Kod potwierdzenia został wysłany na Twój adres E-mail. Kod ten nie jest wymagany do zalogowania się, jednak będziesz musiał go podać przed włączeniem niektórych opcji e-mail na wiki.',
+'confirmemail_sendfailed' => 'Nie udało się wsłać maila potwierdzającego. Proszę sprawdzić adres.
+
+Program zwrócił komunikat: $1',
+'confirmemail_invalid' => 'Błędny kod potwierdzenia. Kod może być przedawniony.',
+'confirmemail_needlogin' => 'Musisz $1 aby potwierdzić adres email.',
+'confirmemail_success' => 'Adres e-mail został zatwierdzony. Możesz się zalogować i cieszyć możliwościami wiki.',
+'confirmemail_loggedin' => 'Twój adres email został potwierdzony.',
+'confirmemail_error' => 'Pojawiły się błędy przy zapisywaniu potwierdzenia.',
+
+'confirmemail_subject' => '{{SITENAME}} - potwierdzenie adresu e-mail',
+'confirmemail_body' => 'Ktoś łącząc się z komputera o adresie IP $1 zarejestrował w serwisie
+{{SITENAME}} konto "$2" podając niniejszy adres email.
+
+Aby potwierdzić, że to Ty zarejestrowałeś/aś to konto oraz aby włączyć 
+wszystkie funkcje wymagające działającego adresu email, otwórz w swojej
+przeglądarce ten link:
+
+$3
+
+Jeśli to NIE TY zarejestrowałeś/aś to konto, NIE KLIKAJ W POWYŻSZY LINK.
+Kod zawarty w linku straci ważność $4.',
+
+# Inputbox extension, may be useful in other contexts as well
+'tryexact' => 'Użyj dokładnego wyrażenia',
+'searchfulltext' => 'Szukaj w całych tekstach',
+'createarticle' => 'Utwórz artykuł',
+
+# Scary transclusion
+'scarytranscludedisabled' => '[Dołączanie przez interwiki jest wyłączone]',
+'scarytranscludefailed' => '[Nie powiodło się pobranie szablonu dla $1]',
+'scarytranscludetoolong' => '[URL za długi]',
+
+# Trackbacks
+'trackbackbox' => '<div id="mw_trackbacks">
+Sygnały Trackback dla tego artykułu:<br />
+$1
+</div>',
+'trackbackremove' => ' ([$1 Usuń])',
+'trackbacklink' => 'Trackback',
+'trackbackdeleteok' => 'Trackback został usunięty.',
+
+# delete conflict
+
+'deletedwhileediting' => 'Uwaga: Ta strona została usunięta po tym, jak rozpoczęłeś jej edycję!',
+'confirmrecreate' => "Użytkownik [[{{ns:user}}:$1|$1]] ([[{{ns:user_talk}}:$1|dyskusja]]) usunął tę stronę po tym jak rozpocząłeś jego edycję, podając jako powód usunięcia:
+: '''$2'''
+Potwierdź chęć odtworzenia tej strony.",
+'recreate' => 'Odtwórz',
+
+'unit-pixel' => 'px',
+
+# HTML dump
+'redirectingto' => 'Przechodzenie do [[:$1|$1]]...',
+
+# action=purge
+'confirm_purge' => 'Wyczyścić bufor dla tej strony?
+
+$1',
+'confirm_purge_button' => 'Wyczyść',
+
+'youhavenewmessagesmulti' => 'Masz nowe wiadomości: $1',
+'searchcontaining' => "Szukaj artykułów zawierających ''$1''.",
+'searchnamed' => "Szukaj artykułów nazywających się ''$1''.",
+'articletitles' => "Artykuły zaczynające się od ''$1''.",
+'hideresults' => 'Ukryj wyniki',
+
+# DISPLAYTITLE
+'displaytitle' => '(Link do tej strony to [[:$1|$1]])',
+
+'loginlanguagelabel' => 'Język: $1',
+
+# Multipage image navigation
+'imgmultipageprev' => '&larr; poprzednia strona',
+'imgmultipagenext' => 'następna strona &rarr;',
+'imgmultigo' => 'Przejdź',
+'imgmultigotopre' => 'Przejdź na stronę',
+
+# Table pager
+'ascending_abbrev' => 'rosn.',
+'descending_abbrev' => 'mal.',
+'table_pager_next' => 'Następna strona',
+'table_pager_prev' => 'Poprzednia strona',
+'table_pager_first' => 'Pierwsza strona',
+'table_pager_last' => 'Ostatnia strona',
+'table_pager_limit' => 'Pokaż $1 obiektów na stronę',
+'table_pager_limit_submit' => 'Pokaż',
+'table_pager_empty' => 'Brak wyników',
+
+# Auto-summaries
+'autosumm-blank' => 'Usunięcie całej zawartości strony',
+'autosumm-replace' => 'Zastąpienie treści strony tekstem: \'$1\'',
+'autoredircomment' => 'Przekierowanie do [[$1]]',
+'autosumm-new' => 'Nowa strona: $1',
+
+# Size units
+'size-bytes' => '$1 B',
+'size-kilobytes' => '$1 KB',
+'size-megabytes' => '$1 MB',
+'size-gigabytes' => '$1 GB',
+
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesPms.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesPms.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesPms.php	(revision 1280)
@@ -0,0 +1,1847 @@
+<?php
+/** Piedmontese (Piemontèis)
+  * Users are bilingual in Piedmontese and Italian, using Italian as template.
+  *
+  * @addtogroup Language
+  *
+  * @bug 5362
+  *
+  * @author Ævar Arnfjörð Bjarmason <avarab@gmail.com>, Jens Frank
+  * @copyright Copyright © 2005, Ævar Arnfjörð Bjarmason, Jens Frank
+  * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
+  */
+$fallback = 'it';
+
+$namespaceNames = array(
+	NS_MEDIA            => 'Media',
+	NS_SPECIAL          => 'Special',
+	NS_MAIN             => '',
+	NS_TALK             => 'Discussion',
+	NS_USER             => 'Utent',
+	NS_USER_TALK        => 'Ciaciarade',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK     => 'Discussion_ant_sla_$1',
+	NS_IMAGE            => 'Figura',
+	NS_IMAGE_TALK       => 'Discussion_dla_figura',
+	NS_MEDIAWIKI        => 'MediaWiki',
+	NS_MEDIAWIKI_TALK   => 'Discussion_dla_MediaWiki',
+	NS_TEMPLATE         => 'Stamp',
+	NS_TEMPLATE_TALK    => 'Discussion_dlë_stamp',
+	NS_HELP             => 'Agiut',
+	NS_HELP_TALK        => 'Discussion_ant_sl\'agiut',
+	NS_CATEGORY         => 'Categorìa',
+	NS_CATEGORY_TALK    => 'Discussion_ant_sla_categorìa'
+);
+
+
+$messages = array(
+# User preference toggles
+'tog-underline'               => 'Anliure con la sotliniadura',
+'tog-highlightbroken'         => "Buta an evidensa j'anliure che a men-o a<br />
+dj'artìcol ancó pa scrit",
+'tog-justify'                 => 'Paràgraf: giustificà',
+'tog-hideminor'               => 'Stërma le modifiche cite<br />ant sla pàgina "Ùltime Modìfiche"',
+'tog-extendwatchlist'         => 'Slarga la funsion "ten sot euj" an manera che a la smon-a tute le modìfiche che as peulo fesse',
+'tog-usenewrc'                => 'Ùltime modìfiche an bela forma (a-i va Javascript)',
+'tog-numberheadings'          => 'Tìtoj ëd paràgraf<br />che as nùmero daspërlor',
+'tog-showtoolbar'             => "Mostra la bara dj'utiss (a-i va Javascript)",
+'tog-editondblclick'          => "Dobia sgnacà për modifiché l'artìcol<br />(a-i va JavaScript)",
+'tog-editsection'             => "Abìlita la modìfica dle session con j'anliure [modìfica]",
+'tog-editsectiononrightclick' => 'Abilité la modìfica dle session ën sgnacand-je ansima<br />  al tìtol col tast drit dël rat (a-i va Javascript)',
+'tog-showtoc'                 => "Buta le tàole dij contnù<br />(për j'artìcoj che l'han pì che 3 session)",
+'tog-rememberpassword'        => "Vis-te la ciav<br />(nen mach për na session<br />- a l'ha da manca dij cookies)",
+'tog-editwidth'               => 'Quàder ëd modìfica slargà<br />al màssim',
+'tog-watchcreations'          => 'Gionta le pàgine che i creo mi a la lista ëd lòn che im ten-o sot euj',
+'tog-watchdefault'            => "Notìfica dj'articoli neuv e ëd coj modificà",
+'tog-minordefault'            => 'Marca tute le modìfica coma cite<br />(mach coma predefinission dla casela)',
+'tog-previewontop'            => 'Smon-e la preuva dzora al quàder ëd modìfica dël test e nen sota',
+'tog-previewonfirst'          => 'Smon na preuva la prima vira che as fa na modìfica',
+'tog-nocache'                 => "Dòvra pa la memorisassion ''cache'' për le pàgine",
+'tog-enotifwatchlistpages'    => 'Mand-me un messagi an pòsta eletrònica quand a-i son dle modìfiche a le pàgine',
+'tog-enotifusertalkpages'     => 'Mand-me un messagi ëd pòsta eletrònica quand a-i son dle modìfiche a mia pàgina dle ciaciarade',
+'tog-enotifminoredits'        => 'Mand-me un messagi an pòsta bele che për le modìfiche cite',
+'tog-enotifrevealaddr'        => 'Lassa che a së s-ciàira mia adrëssa ëd pòsta eletrònica ant ij messagi ëd notìfica',
+'tog-shownumberswatching'     => "Smon ël nùmer d'utent che as ten-o la pàgina sot euj",
+'tog-fancysig'                => "Modìfica mai la firma da coma a l'é ambelessì (as dòvra për fesse na firma fòra stàndard)",
+'tog-externaleditor'          => "Dòvra coma stàndard n'editor ëd test estern",
+'tog-externaldiff'            => 'Dòvra për stàndard un programa "diff" estern',
+'tog-showjumplinks'           => 'Dòvra j\'anliure d\'acessibilità dla sòrt "Va a"',
+'tog-uselivepreview'          => "Dòvra la funsion ''Preuva dal viv'' (a-i va JavaScript e a l'é mach sperimental)",
+'tog-forceeditsummary'        => "Ciama conferma se ël somari dla modìfica a l'é veujd",
+'tog-watchlisthideown'        => 'Stërma mie modìfiche ant la ròba che im ten-o sot euj',
+'tog-watchlisthidebots'       => 'Stërma le modìfiche faite daj trigomiro ant la lista dle ròbe che im ten-o sot euj',
+
+'underline-always'  => 'Sempe',
+'underline-never'   => 'Mai',
+'underline-default' => 'Dòvra lë stàndard dël programma ëd navigassion (browser)',
+
+'skinpreview' => '(Preuva)',
+
+# Dates
+'sunday'    => 'Dumìnica',
+'monday'    => 'Lun-es',
+'tuesday'   => 'Martes',
+'wednesday' => 'Merco',
+'thursday'  => 'Giòbia',
+'friday'    => 'Vënner',
+'saturday'  => 'Saba',
+'january'   => 'Gené',
+'february'  => 'Fërvé',
+'march'     => 'Mars',
+'april'     => 'Avril',
+'may_long'  => 'Magg',
+'june'      => 'Giugn',
+'july'      => 'Luj',
+'august'    => 'Aost',
+'september' => 'Stémber',
+'october'   => 'Otóber',
+'november'  => 'Novémber',
+'december'  => 'Dzémber',
+'jan'       => 'Gen',
+'feb'       => 'Fër',
+'mar'       => 'Mar',
+'apr'       => 'Avr',
+'may'       => 'Mag',
+'jun'       => 'Giu',
+'jul'       => 'Luj',
+'aug'       => 'Aos',
+'sep'       => 'Ste',
+'oct'       => 'Oto',
+'nov'       => 'Nov',
+'dec'       => 'Dze',
+
+# Bits of text used by many pages
+'categories'      => 'Categorìe',
+'pagecategories'  => '{{PLURAL:$1|Categorìa|Categorìe}}',
+'category_header' => 'Artìcoj ant la categorìa "$1"',
+'subcategories'   => 'Sotacategorìe',
+
+'mainpagetext'      => "<big>'''MediaWiki a l'é staita anstalà a la perfession.'''</big>",
+'mainpagedocfooter' => "Che a varda la [http://meta.wikimedia.org/wiki/MediaWiki_User%27s_Guide User's Guide] ([[belavans]] për adess a-i é mach n'anglèis) për avej dj'anformassion suplementar ant sël coma dovré ël programa dla wiki.
+
+== Për anandiesse a travajé ==
+
+* [http://www.mediawiki.org/wiki/Help:Configuration_settings Configuration settings list]
+* [http://www.mediawiki.org/wiki/Help:FAQ MediaWiki FAQ]
+* [http://mail.wikipedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]",
+
+'about'          => 'A propòsit ëd',
+'article'        => 'Pàgina ëd contnù',
+'newwindow'      => '(as deurb ant na fnestra neuva)',
+'cancel'         => 'Scancela',
+'qbfind'         => 'Treuva',
+'qbbrowse'       => 'Sfeuja',
+'qbedit'         => 'Modìfica',
+'qbpageoptions'  => 'Opsion dla pàgina',
+'qbpageinfo'     => 'Informassioni rësguard a la pagina',
+'qbmyoptions'    => 'Mie opsion',
+'qbspecialpages' => 'Pàgine speciaj',
+'moredotdotdot'  => 'Dë pì...',
+'mypage'         => 'Mia pàgina',
+'mytalk'         => 'Mie ciaciarade',
+'anontalk'       => "Ciaciarade për st'adrëssa IP-sì",
+'navigation'     => 'Navigassion',
+
+# Metadata in edit box
+'metadata_help' => 'Metadat:',
+
+'errorpagetitle'    => 'Eror',
+'returnto'          => 'Torna andré a $1.',
+'tagline'           => 'Da {{SITENAME}}.',
+'help'              => 'Agiut',
+'search'            => 'Sërca',
+'searchbutton'      => 'Sërca',
+'go'                => 'Va',
+'searcharticle'     => 'Va',
+'history'           => 'Version pì veje',
+'history_short'     => 'Stòria',
+'updatedmarker'     => "Agiornà da 'nt l'ùltima vira che i son passà",
+'info_short'        => 'Anformassion',
+'printableversion'  => 'Version bon-a për stampé',
+'permalink'         => 'Anliura fissa',
+'print'             => 'Stampa',
+'edit'              => 'Modìfica',
+'editthispage'      => "Modìfica st'artìcol-sì",
+'delete'            => 'Scancela',
+'deletethispage'    => 'Scancela pàgina',
+'undelete_short'    => 'Disdëscancela {{PLURAL:$1|na modìfica|$1 modìfiche}}',
+'protect'           => 'Protegg',
+'protectthispage'   => 'Protegg sta pàgina-sì',
+'unprotect'         => 'gava la protession',
+'unprotectthispage' => 'Gava via la protession',
+'newpage'           => 'Pàgina neuva',
+'talkpage'          => 'Discussion',
+'specialpage'       => 'Pàgina Special',
+'personaltools'     => 'Utiss personaj',
+'postcomment'       => 'Gionta un coment',
+'articlepage'       => "Che a varda l'articol",
+'talk'              => 'Discussion',
+'views'             => 'vìsite',
+'toolbox'           => 'utiss',
+'userpage'          => 'Che a varda la pàgina Utent',
+'projectpage'       => 'Che a varda la pàgina ëd servissi',
+'imagepage'         => 'Pàgina dla figura',
+'viewtalkpage'      => 'Vardé la discussion',
+'otherlanguages'    => 'Àutre lenghe',
+'redirectedfrom'    => '(Ridiression da $1)',
+'redirectpagesub'   => 'Pàgina ëd ridiression',
+'lastmodifiedat'    => "Modificà l'ùltima vira al $2, $1.", # $1 date, $2 time
+'viewcount'         => "St'artìcol-sì a l'é stait lesù {{plural:$1|na vira|$1 vire}}.",
+'protectedpage'     => 'Pàgina proteta',
+'jumpto'            => 'Va a:',
+'jumptonavigation'  => 'navigassion',
+'jumptosearch'      => 'arsërca',
+
+# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
+'aboutsite'         => 'A propòsit ëd {{SITENAME}}',
+'aboutpage'         => 'Project:A propòsit',
+'bugreports'        => 'Malfunsionament',
+'bugreportspage'    => 'Project:Malfunsionament',
+'copyright'         => 'Ël contnù a resta disponibil sota a na licensa $1.',
+'copyrightpagename' => "Drit d'autor ëd {{SITENAME}}",
+'copyrightpage'     => "Project:Drit d'autor",
+'currentevents'     => 'Neuve',
+'currentevents-url' => 'Project:Neuve',
+'disclaimers'       => 'Difide',
+'disclaimerpage'    => 'Project:Avertense generaj',
+'edithelp'          => 'Manual dë spiegassion',
+'edithelppage'      => "Project:Coma scrive n'artìcol",
+'faq'               => 'FAQ',
+'faqpage'           => 'Project:FAQ',
+'helppage'          => 'Project:Agiut',
+'mainpage'          => 'Intrada',
+'portal'            => 'Piòla',
+'portal-url'        => 'Project:Piòla',
+'privacy'           => 'Polìtica ëd confindensialità',
+'privacypage'       => 'Project:Polìtica ëd confidensialità',
+'sitesupport'       => 'Oferte',
+'sitesupport-url'   => 'Project:Oferte',
+
+'badaccess' => 'Përmess nen giust',
+
+'versionrequired'     => 'A-i va për fòrsa la version $1 ëd MediaWiki',
+'versionrequiredtext' => 'Për dovrè sta pàgina-sì a-i va la version $1 dël programa MediaWiki. Che a varda [[Special:Version]]',
+
+'ok'                  => 'Va bin',
+'retrievedfrom'       => 'Pijait da  "$1"',
+'youhavenewmessages'  => "A l'ha $1 ($2).",
+'newmessageslink'     => 'ëd messagi neuv',
+'newmessagesdifflink' => "A-i é chèich-còs ëd diferent da 'nt l'ùltima revision",
+'editsection'         => 'modìfica',
+'editold'             => 'modìfica',
+'editsectionhint'     => 'I soma dapress a modifiché la session: $1',
+'toc'                 => 'Contnù',
+'showtoc'             => 'smon',
+'hidetoc'             => 'stërma',
+'thisisdeleted'       => 'Veul-lo vardé ò ripristiné $1?',
+'viewdeleted'         => 'Veul-lo vardé $1?',
+'restorelink'         => '{{PLURAL:$1|na modìfica scancelà|$1 modìfiche scancelà}}',
+'feedlinks'           => 'Fluss:',
+'feed-invalid'        => 'Modalità ëd sotoscrission dël fluss nen vàlida.',
+
+# Short words for each namespace, by default used in the 'article' tab in monobook
+'nstab-main'      => 'Artìcol',
+'nstab-user'      => "Pàgina dl'utent",
+'nstab-media'     => 'Pàgina multimedial',
+'nstab-special'   => 'Special',
+'nstab-project'   => 'Pàgina ëd servissi',
+'nstab-image'     => 'Figura',
+'nstab-mediawiki' => 'Messagi',
+'nstab-template'  => 'Stamp',
+'nstab-help'      => 'Agiut',
+'nstab-category'  => 'Categorìa',
+
+# Main script and global functions
+'nosuchaction'      => 'Operassione nen arconossùa',
+'nosuchactiontext'  => "L'operassion che a l'ha ciamà a l'é nen arconossùa dal programa MediaWiki",
+'nosuchspecialpage' => "A-i é pa gnun-a pàgina special tan-me cola che chiel a l'ha ciamà.",
+'nospecialpagetext' => "A l'ha ciamà na pàgina special che a l'é pa staita arconossùa dal programa MediaWiki, ò pura a l'é nen disponibila.",
+
+# General errors
+'error'                => 'Eror',
+'databaseerror'        => 'Eror ant la base dat',
+'dberrortext'          => 'Eror ëd sintassi ant la domanda mandà a la base dat.
+L\'ùltima domanda mandà a la base dat a l\'é staita:
+<blockquote><tt>$1</tt></blockquote>
+da \'nt la funsion "<tt>$2</tt>".
+MySQL a l\'ha dane andré n\'eror "<tt>$3: $4</tt>".',
+'dberrortextcl'        => 'A-i é staje n\'eror ant la sintassi d\'anterogassion dla base dat.
+L\'ùltima anterogassion a l\'é staita:
+"$1"
+da andrinta a la funsion "$2".
+MySQL a l\'ha dane n\'eror "$3: $4"',
+'noconnect'            => 'Conession a la base dat falà ansima a $1',
+'nodb'                 => 'Selession da la base dat $1 falìa',
+'cachederror'          => "Costa a l'é mach na còpia memorisà dla pàgina che a l'ha ciamà, donca a podrìa ëdcò nen esse agiornà.",
+'laggedslavemode'      => 'Avis: la pàgina a podrìa ëdcò nen mostré tute soe modìfiche.',
+'readonly'             => 'Acess a la base dat sërà për chèich temp.',
+'enterlockreason'      => 'Che a buta na rason për ël blocagi, con andrinta data e ora ëd quand che a stima che a sarà gavà.',
+'readonlytext'         => "La base dat ëd {{SITENAME}} për adess a l'é blocà, e as peulo pa fesse nì dle neuve imission, nì dle modìfiche, con tute le probabilità për n'operassion ëd manutension dël server. Se a l'é parej motobin ampressa la base a sarà torna doèrta.<br />
+L'aministrator che a l'ha blocala a l'ha lassà sto messagi-sì:
+<p>:$1",
+'missingarticle'       => "La base dat a l'ha pa trovà ël test ëd la pàgina \"\$1\", che però a l'avrìa pro dovù trové.<br />
+Sòn a l'é pa n'eror dla base dat, ma a l'ha l'ària dë esse na gran-a dël programa.<br />
+Për piasì, che a-j segnala sossì a n'[[{{MediaWiki:policy-url}}|aministrator]] dël sistema, specificand tìtol dla pàgina e ora dl'assident.",
+'readonly_lag'         => "La base dat a l'é staita blocà n'automàtich antramentr che che le màchine dël circuito secondari (slave) as buto an pari con cole dël prinsipal (master)",
+'internalerror'        => 'Eror intern',
+'filecopyerror'        => 'A l\'é pa stait possibil copié l\'archivi "$1" coma "$2".',
+'filerenameerror'      => 'A l\'é pa podusse cangeje nòm a l\'archivi "$1" an "$2".',
+'filedeleteerror'      => 'A l\'é pa podusse scancelé l\'archivi "$1".',
+'filenotfound'         => ' A l\'é pa trovasse l\'archivi "$1".',
+'unexpected'           => 'Valor che i së spitavo pa: "$1"="$2".',
+'formerror'            => "Eror: la domanda a l'é staita mandà mal",
+'badarticleerror'      => "N'operassion parej as peul pa fesse ansima a sta pàgina-sì.",
+'cannotdelete'         => "As peul pa scancelesse la pàgina, l'archivi ò la figura che a veul scancelé.",
+'badtitle'             => 'Tìtol nen giust',
+'badtitletext'         => "La pàgina che a l'ha ciamà a peul pa esse mostrà. A podrìa tratesse ëd na pàgina nen bon-a, veujda, ò pura a podrìa ëdcò esse n'eror ant n'anliura antra lenghe diferente ò tra diferente version ëd {{SITENAME}}.",
+'perfdisabled'         => "An dëspias, ma costa funsion a l'é nen disponibila ant j'ore ëd pì gran acess a la base dat, për nen ralenté l'acess dj'Utent!<br />Che a preuva torna antra 2 bot e 4 ore dòp mesdì (UTC).<br /><br />Mersì.",
+'perfdisabledsub'      => 'Ambelessì a-i é na còpia salvà da $1:', # obsolete?
+'perfcached'           => "Sòn a l'é stait memorisà an local e podrìa ëdcò nen esse agiornà:",
+'perfcachedts'         => "Lòn che a-j ven dapress a sossì a l'é pijait da 'nt na còpia local \"cache\" dla base dat. L'ùltim agiornament a l'é dël: \$1.",
+'wrong_wfQuery_params' => 'Paràmetro nen giust për wfQuery()<br />
+Funsion: $1<br />
+Query: $2',
+'viewsource'           => 'Vardé la sorgiss',
+'viewsourcefor'        => 'ëd $1',
+'protectedinterface'   => "Costa pàgina-sì a l'ha andrinta un chèich-còs che a fa part d'antërfacia dël programa che a dòvro tùit; donca a l'é proteta për evité che a-i rivo dle ròbe brute.",
+'editinginterface'     => "'''A l'euj!:''' A sta modificand na pàgina che as dòvra për generé ël test dl'antërfassa dël programa. Le modìfiche faite ambelessì a l'avran efet dë cangé l'antërfassa për j'àutri Utent.",
+'sqlhidden'            => "(l'anterogassion SQL a l'é stërmà)",
+
+# Login and logout pages
+'logouttitle'                => "Seurte da 'nt ël sistema",
+'logouttext'                 => "A l'é sortù da 'nt ël sistema.
+A peul tiré anans a dovré {{SITENAME}} coma Utent anonim, ò pura a peul rintré torna ant ël sistema con l'istess stranòm che a dovrava prima, ò con un diferent.",
+'welcomecreation'            => '<h2>Bin avnù, $1!</h2><p>Sò cont a l\'è stait creà.<br />Mersì për avej sërnù dë giutene a fé chërse {{SITENAME}}.<br />Për fé {{SITENAME}} pì soa, e përchè a sia pì belfé dovrela, che as dësmentia nen dë compilé la pàgina dij "sò gust".',
+'loginpagetitle'             => 'rintré ant ël sistema',
+'yourname'                   => 'Sò stranòm',
+'yourpassword'               => 'Soa ciav',
+'yourpasswordagain'          => 'Che a bata torna soa ciav',
+'remembermypassword'         => "Vis-te mia ciav për vàire session (për podej felo a fa da manca che un a l'abia ij ''cookies'' abilità).",
+'yourdomainname'             => 'Sò domini',
+'externaldberror'            => "Ò che a l'é rivaje n'eror d'autenticassion esterna, ò pura a l'é chiel (chila) che a l'é nen autorisà a agiornesse sò cont estern.",
+'loginproblem'               => "<b>A l'é staje n'eror dëmentré che as provava a rintré ant ël sistema.</b><br />
+Che a preuva n'àutra vira, miraco che sta vira a andèissa mai bin!",
+'alreadyloggedin'            => "<strong>Utent $1, che a varda che a l'é già andrinta al sistema, a l'ha pa dë manca dë felo torna!</strong><br />",
+'login'                      => 'Rintré ant ël sistema',
+'loginprompt'                => 'Che a varda mach che a venta avej ij cookies abilità për podej rintré an {{SITENAME}}.',
+'userlogin'                  => 'rintré ant ël sistema',
+'logout'                     => "Seurte da 'nt ël sistema",
+'userlogout'                 => 'seurte dal sistema',
+'notloggedin'                => "a l'é pa ant ël sistema",
+'nologin'                    => 'Ha-lo ancó nen sò cont? $1.',
+'nologinlink'                => 'creésse un cont.',
+'createaccount'              => 'Crea un cont neuv',
+'gotaccount'                 => 'Ha-lo già un sò cont? $1.',
+'gotaccountlink'             => 'Rintré ant ël sistema',
+'createaccountmail'          => 'për pòsta eletrònica',
+'badretype'                  => "Le doe ciav che a l'ha scrivù a resto diferente antra lor, e a venta che a sio mideme.",
+'userexists'                 => "An dëspias.<br />Lë stranòm che a l'ha sërnusse a l'é già dovrà da n'àutr Utent.<br />
+Për son i-j ciamoma dë sërn-se në stranòm diferent.",
+'youremail'                  => 'Soa adrëssa ëd pòsta eletrònica',
+'username'                   => 'Stranòm:',
+'uid'                        => "ID dl'utent:",
+'yourrealname'               => 'Nòm vèir *',
+'yourlanguage'               => 'Lenga:',
+'yourvariant'                => 'Variant',
+'yournick'                   => 'Sò stranòm (për firmé)',
+'badsig'                     => "Soa forma a l'é nen giusta, che a controla le istrussion HTML.",
+'email'                      => 'pòsta eletrònica',
+'prefs-help-email-enotif'    => "Costa adrëssa-sì as dòvra ëdcò për mandeve dle notìfiche, se i l'eve abilità n'opsion che a në génera.",
+'prefs-help-realname'        => '* Nòm vèir (opsional): se i sërne da butelo ambelessì a sarà dovrà për deve mérit ëd vòstr travaj.',
+'loginerror'                 => 'Eror ën rintrand ant ël sistema',
+'prefs-help-email'           => "* Adrëssa ëd pòsta eletrònica (opsional): ën butandlo i feve an manera che la gent a peula contateve passand për vòstra pàgina dle ciaciarade sensa dë manca che a sapia chi i seve e che adrëssa che i l'eve.",
+'nocookiesnew'               => "Sò cont a l'é doèrt, ma chiel (ò chila) a l'ha nen podù rintré ant ël sistema. 
+{{SITENAME}} a dòvra ij cookies për fé rintré la gent ant sò sistema. Belavans chiel a l'ha pa ij cookies abilità.
+Për piasì, che as j'abìlita e peuj che a preuva torna a rintré con sò stranòm e soa ciav.",
+'nocookieslogin'             => "{{SITENAME}} a dòvra ij cookies për fé rintré la gent ant sò sistema. Belavans chiel a l'ha pa ij cookies abilità. Pëër piasì, che a j'abìlita e peuj che a preuva torna.",
+'noname'                     => "Lë stranòm che a l'ha batù as peul pa dovresse, as peul nen creésse un cont Utent con ës nòm-sì.",
+'loginsuccesstitle'          => "Compliment! A l'é pen-a rintrà ant ël sistema. A-i é pa staje gnun eror.",
+'loginsuccess'               => 'A l\'ha avù ël përmess ëd conession al server ëd {{SITENAME}} con lë stranòm utent ëd "$1".',
+'nosuchuser'                 => 'Atension<br /><br /> dapress a na verìfica, a n\'arsulta pa gnin Utent che a l\'abia stranòm "$1".<br /><br />
+Për piasì, che a contròla ël nòm che a l\'ha batù, ò pura che a dòvra la domanda ambelessì sota për fé un cont Utent neuv.',
+'nosuchusershort'            => 'A-i é pa gnun utent che as ciama "$1". Për piasì, che a contròla se a l\'ha scrit tut giust.',
+'nouserspecified'            => 'A venta che a specìfica në stranòm utent',
+'wrongpassword'              => "La ciav batùa a l'é pa giusta.<br /><br />Che a preuva torna, për piasì.",
+'wrongpasswordempty'         => "A l'ha butà na ciav veujda. Për piasì, che a preuva torna.",
+'mailmypassword'             => 'Mandme na neuva ciav con un messagi ëd pòsta eletrònica',
+'passwordremindertitle'      => 'Servissi për visé la paròla ciav ëd {{SITENAME}}',
+'passwordremindertext'       => 'Cheidun (a l\'é belfé che a sia stait pròpe chiel, da \'nt l\'adrëssa IP $1)
+a l\'ha ciamà che i-j mandèisso na neuva paròla ciav për rintré ant ël sistema ëd {{SITENAME}} ($4).
+La ciav për l\'Utent "$2" adess a resta "$3".
+Për rason ëd sicurëssa, a sarìa mej che chiel a la dovrèissa për rintré ant ël sistema pì ampressa che a peul, e che tut sùbit as la cambièissa con un-a che a sern daspërchiel.',
+'noemail'                    => 'An arsulta pa gnun-a casela ëd pòsta eletrònica për l\'Utent "$1".',
+'passwordsent'               => "Na neuva paròla ciav a l'é staita mandà a l'adrëssa eletrònica registrà për l'Utent \"\$1\".
+Për piasì, che a la dòvra sùbit për rintré ant ël sistema pen-a che a l'arsèiv.",
+'eauthentsent'               => "A l'adrëssa che a l'ha dane i l'oma mandaje un messagi ëd pòsta eletrònica për conferma.
+Anans che qualsëssìa àutr messagi ëd pòsta a ven-a mandà a 's cont-sì, a venta che a a fasa coma che a-j diso dë fé ant ël messagi, për confermé che ës cont a l'é da bon sò.",
+'mailerror'                  => 'Eror ën mandand via un messagi ëd pòsta eletrònica: $1',
+'acct_creation_throttle_hit' => "Darmagi, ma chiel (chila) a l'ha già creasse $1 cont. A peul pa pì deurb-ne dj'àutri.",
+'emailauthenticated'         => "Soa adrëssa ëd pòsta eletrònica a l'é staita autenticà ël $1.",
+'emailnotauthenticated'      => "Soa adrëssa ëd pòsta eletrònica a l'é ancó pa staita autenticà.
+Da qualsëssìa ëd coste funsion a sarà mandà gnun messagi fin che chiel (chila) a s'auténtica nen.",
+'noemailprefs'               => "<strong>Che a specìfica n'adrëssa ëd pòsta eletrònica se a veul dovré coste funsion-sì.</strong>",
+'emailconfirmlink'           => 'Che an conferma sa adrëssa ëd pòsta eletrònica',
+'invalidemailaddress'        => "Costa adrëssa ëd pòsta eletrònica-sì as peul nen pijesse përchè a l'ha na forma nen bon-a.
+Për piasì che a buta n'adrëssa scrita giusta ò che a lassa ël camp veujd.",
+'accountcreated'             => 'Cont creà',
+'accountcreatedtext'         => "Ël cont Utent për $1 a l'é stait creà.",
+
+# Edit page toolbar
+'bold_sample'     => 'Test an grassèt',
+'bold_tip'        => 'Test an grassèt',
+'italic_sample'   => 'Test an corsiv',
+'italic_tip'      => 'Test an corsiv',
+'link_sample'     => "Tìtol dl'anliura",
+'link_tip'        => 'Anliura interna',
+'extlink_sample'  => "http://www.esempi.com tìtol dl'anliura",
+'extlink_tip'     => 'Anliura esterna (che as visa dë buté ël prefiss http://)',
+'headline_sample' => "Antestassion dl'artìcol",
+'headline_tip'    => 'Antestassion dë scond livel',
+'math_sample'     => 'Che a buta la fòrmula ambelessì',
+'math_tip'        => 'Fòrmula matemàtica (LaTeX)',
+'nowiki_sample'   => 'Che a buta ël test nen formatà ambelessì',
+'nowiki_tip'      => 'Lassé un tòch ëd test fòra dla formatassion dla wiki',
+'image_sample'    => 'Esempi.jpg',
+'image_tip'       => 'Figura anglobà ant ël test',
+'media_sample'    => 'Esempi.ogg',
+'media_tip'       => "Anliura a n'archivi multimedial",
+'sig_tip'         => 'Firma butand data e ora',
+'hr_tip'          => 'Riga orisontal (da dovresse nen tròp soèns)',
+
+# Edit pages
+'summary'                   => 'Somari',
+'subject'                   => 'Sogèt',
+'minoredit'                 => "Costa-sì a l'è na modìfica cita",
+'watchthis'                 => "Ten sot euj st'artìcol-sì",
+'savearticle'               => 'Salva sta pàgina',
+'preview'                   => 'Preuva',
+'showpreview'               => 'Mostra na preuva',
+'showlivepreview'           => "Funsion ''Preuva dal viv''",
+'showdiff'                  => 'Smon-me le modìfiche',
+'anoneditwarning'           => "A l'é ancó nen rintrà ant ël sistema. Soa adrëssa IP a sarà registrà ant la stòria dle modìfiche dë sta pàgina-sì.",
+'missingsummary'            => "'''Nòta:''' a l'ha pa butà gnun somari dla modìfica. Se a sgnaca Salva n'àutra vira, soa modìfica a resterà salvà sensa pa ëd somari.",
+'missingcommenttext'        => 'Për piasì che a buta un coment ambelessì sota.',
+'blockedtitle'              => "Belavans cost ëstranòm-sì a resta col ëd n'utent che a l'é stait disabilità a fé 'd modìfiche a j'articoj.",
+'blockedtext'               => "Sò stranòm ò pura soa adrëssa IP a son stait blocà da \$1.<br />
+La rason dël blocagi a l'é:<br />
+:''\$2''<p>
+Se a veul, a peul contaté \$1 ò pura un dj'àutri [[{{MediaWiki:grouppage-sysop}}|aministrator]] për discute d'ës blocagi.
+
+Che a nòta mach che a peul nen dovré la funsion \"Mand-je un messagi eletrònich a st'utent-sì\" se a l'ha nen buta na soa adrëssa ëd pòsta ant ij [[Special:Preferences|sò gust]].
+
+Soa adrëssa IP a la resta \$3. Për piasì che a lo fasa present ant soe comunicassion an materia.",
+'blockedoriginalsource'     => "La sorgiss ëd '''$1''' a së s-ciàira ambelessì sota:",
+'blockededitsource'         => "Ël test ëd le '''soe modìfiche''' a '''$1''' a së s-ciàira ambelessì sota:",
+'whitelistedittitle'        => 'Sòn as peul pa fesse nen rintrand ant ël sistema',
+'whitelistedittext'         => 'A venta $1 për podej fé dle modìfiche.',
+'whitelistreadtitle'        => 'Sòn as peul pa fesse nen rintrand ant ël sistema',
+'whitelistreadtext'         => "A l'ha da [[Special:Userlogin|rintré ant ël sistema]] për podej lese dle pàgine.",
+'whitelistacctitle'         => 'Che a në scusa, ma a peul nen creésse un cont.',
+'whitelistacctext'          => "Për podej creé dij cont ant sta wiki-sì a l'ha da [[Special:Userlogin|rintré ant ël sistema]] e avej ël drit da creéje.",
+'confirmedittitle'          => "Confermé l'adrëssa postal për podej fé dle modìfiche",
+'confirmedittext'           => 'A dev confermé soa adrëssa ëd pòsta eletrònica, anans che modifiché dle pàgine. Për piasì, che a convalida soa adrëssa ën dovrand la pàgina [[Special:Preferences|mè gust]].',
+'loginreqtitle'             => 'a venta rintré ant ël sistema',
+'loginreqlink'              => 'rintré ant ël sistema',
+'loginreqpagetext'          => "Che a pòrta passiensa, ma a dev $1 për podej vëdde dj'àutre pàgine.",
+'accmailtitle'              => 'Ciav spedìa.',
+'accmailtext'               => 'La paròla ciav për "$1" a l\'é staita mandà a $2.',
+'newarticle'                => '(Neuv)',
+'newarticletext'            => 'Che a scriva sò test ambelessì.',
+'anontalkpagetext'          => "----''Costa a l'é la pàgina ëd ciaciarade che a s-ciàira n'utent anònim che a l'é ancó pa dorbusse un cont, ò pura che a lo dòvra nen. Nen savend chi che a sia chiel (chila) i l'oma da dovré ël nùmer IP address për deje n'identificassion. Belavans, ës nùmer-sì a peul esse dovrà da vàire Utent. J'Utent anònim che a l'han l'impression d'arsèive dij coment sensa sust a dovrìo [[Special:Userlogin|creésse sò cont ò pura rintré ant ël sistema]] për evité dë fé confusion con dj'àutri Utent che a peulo avej l'istess nùmer IP.''",
+'noarticletext'             => "(St'artìcol-sì a l'é veujd, a podrìa për gentilëssa anandielo chiel, ò pura ciamé la scancelassion dë sta pàgina)",
+'clearyourcache'            => "'''Nòta:''' na vira che i l'ha salvà, a peul esse che a-j fasa da manca da passé via la memorisassion (cache) dël sò programa ëd navigassion (browser) për podej ës-ciairé le modìfiche. 
+*'''Mozilla / Firefox / Safari:''' Che a ten-a sgnacà ''Shift'' antramentr che a sgnaca col rat ansima a ''Reload'', ò pura che a sgnaca tut ansema ''Ctrl-Shift-R'' (''Cmd-Shift-R'' ansima a j'Apple Mac); 
+*'''IE:''' che a ten-a sgnacà ''Ctrl'' antramentr che a sgnaca col rat ansima a ''Refresh'', ò pura che a sgnaca tut ansema ''Ctrl-F5''; 
+*'''Konqueror:''': a basta mach sgnaché ël boton ''Reload'', ò pura sgnaché ''F5''; 
+*'''Opera''' j'utent a peulo avej da manca dë veujdé 'd continùo soa memorisassion (cache) andrinta a ''Tools&rarr;Preferences''.",
+'usercssjsyoucanpreview'    => "<strong>Drita:</strong> che a dòvra ël boton 'Mostra na preuva' për controlé l'efet ëd sò còdes CSS/JS anans che salvelo.",
+'usercsspreview'            => "'''Che a varda che a lòn che a s-ciàira a l'é nomach na preuva ëd sò CSS, che salvà a resta ancó nen!'''",
+'userjspreview'             => "'''Che as visa che a l'é mach antramentr che as fa na preuva ëd sò Javascript, che a l'é ancó pa stait salvà!'''",
+'userinvalidcssjstitle'     => "'''Avis:''' A-i é pa gnun-a facia \"\$1\". Che as visa che le pàgine .css e .js che un as fa daspërchiel a dòvro tute minùscole për tìtol, pr'esempi {{ns:user}}:Scaramacaj/monobook.css nopà che {{ns:user}}:Scaramacaj/Monobook.css.",
+'updated'                   => '(Agiornà)',
+'note'                      => '<strong>NÒTA:</strong>',
+'previewnote'               => "Che a ten-a mach present che costa-sì a l'é nomach na PREUVA, e che soa version a l'é ancó pa staita salvà!",
+'previewconflict'           => "Costa preuva a-j mostra ël test dl'articol ambelessì dzora. Se a sërn dë salvelo, a l'é parej che a lo s-ciaireran ëdcò tuti j'àutri Utent.",
+'session_fail_preview'      => "<strong>Darmagi! I l'oma pa podù processé soa modìfica per via che a son përdusse për la stra ij dat ëd session.
+Për piasì che a preuva n'àutra vira. Se a dovèissa mai torna riveje sossì, che a preuva a seurte dal sistema e peuj torna a rintré.</strong>",
+'session_fail_preview_html' => "<strong>Darmagi! I l'oma nen podù processé soa modìfica ën essend che a son përdusse për la stra ij dat ëd session.</strong>
+
+''Contand che sta wiki-sì a mostra dël còdes HTMP nen filtrà, la preuva a ven ëstarmà coma precaussion contra a dij possibij atach fait an Javascript.''
+
+<strong>Se sòn a l'èra na modìfica normal, për piasì che a preuva a fela n'àutra vira. Se a dovèissa mai torna deje dle gran-e, che a preuva a seurte da 'nt ël sistema e peuj torna a rintré.</strong>",
+'importing'                 => 'I soma dapress a amporté $1',
+'editing'                   => 'Modìfica ëd $1',
+'editinguser'               => 'Modìfica ëd $1',
+'editingsection'            => 'I soma dapress a modifiché $1 (session)',
+'editingcomment'            => 'I soma dapress a modifiché $1 (coment)',
+'editconflict'              => "Conflit d'edission: $1",
+'explainconflict'           => "Cheidun d'àutr a l'ha salvà soa version dl'artìcol antramentré che chiel (chila) as prontava la soa.<br />
+Ël quàder ëd modìfica dë dzora a mostra ël test ëd l'articol coma a resta adess (visadì, lòn che a-i é ant sla Ragnà). Soe modìfiche a stan ant ël quàder dë sota.
+Ën volend a peul gionté soe modìfiche ant ël quàder dë dzora.
+<b>Mach</b> ël test ant ël quàder dë dzora a sarà salvà, ën sgnacand ël boton \"Salva\".<br />",
+'yourtext'                  => 'Sò test',
+'storedversion'             => 'Version memorisà',
+'nonunicodebrowser'         => "<strong>A L'EUJ! Sò programa ëd navigassion (browser) a travaja pa giust con lë stàndard unicode. I soma obligà a dovré dij truschin përchè a peula salvesse sò artìcoj sensa problema: ij caràter che a son nen ASCII a jë s-ciairerà ant ël quàder ëd modìfica test coma còdes esadecimaj.</strong>",
+'editingold'                => "<strong>CHE A FASA MACH ATENSION: che a sta fasend-je dle modìfiche a na version nen agiornà dl'artìcol.<br />
+Se a la salva parej, lòn che a l'era stait fait dapress a sta revision-sì as përderà d'autut.</strong>",
+'yourdiff'                  => 'Diferense',
+'copyrightwarning'          => "Che a ten-a për piasì present che tute le contribussion a {{SITENAME}} as considero daite sota a na licensa ëd la sòrt $2 (che a varda $1 për avej pì 'd detaj).
+Se a veul nen che sò test a peula esse modificà e distribuì da qualsëssìa person-a sensa gnun-a limitassion ëd gnun-a sòrt, che a lo buta pa ansima a {{SITENAME}}, ma pitòst che as lo pùblica ansima a un sò sit personal.<br />
+Ën mandand ës test-sì chiel (chila) as fa garant sota soa responsabilità che ël test a l'ha scrivusslo despërchiel (daspërchila) coma original, ò pura che a l'ha tracopialo da na sorgiss ëd pùblich domini, ò da n'àutra sorgiss dla midema sòrt, ò pura che chiel (chila) a l'ha arseivù autorisassion scrita a dovré sto test e che sòn a peul dimostrelo.<br />
+<strong>DOVRÉ PA MAI DËL MATERIAL COERTÀ DA DRIT D'AUTOR (c) SENSA AVEJ N'AUTORISASSION SCRITA PËR FELO!!!</strong>",
+'copyrightwarning2'         => "Për piasì, che a ten-a present che tute le contribussion a {{SITENAME}} a peulo esse modificà ò scancelà da dj'àutri contributor. Se a veul nen che lòn che a scriv a ven-a modificà sensa limitassion ëd gnun-a sòrt, che a lo manda nen ambelessì.<br />
+Ant l'istess temp, ën mandand dël material un as pija la responsabilità dë dì che a l'ha scrivusslo daspërchiel (ò daspërchila), ò pura che a l'ha copialo da na sorgiss ëd domini pùblich, ò pura da 'nt n'àutra sorgiss dla midema sòrt (che a varda $1 për avej pì d'anformassion).
+<strong>CHE A MANDA PA DËL MATERIAL COERTÀ DA DRIT D'AUTOR SENSA AVEJ AVÙ ËL PËRMESS SCRIT DË FELO!</strong>",
+'longpagewarning'           => "<strong>CHE A TEN-A PRESENT!: Sta pàgina-sì a l'é longa $1 kb; chèich
+programa ëd navigassion a podrìa avej dle gran-e a modifiché dle pàgine che a-j rivo a brus 
+ò pura a passo ij 32 kb.
+Për piasì che a varda se a-i fussa mai la possibilità dë divide sto paginon an vàire tòch pì cit.</strong>",
+'longpageerror'             => "<strong>EROR: Ël test che a l'ha mandà a l'é longh $1 kb, che a resta pì che ël 
+lìmit màssim ëd $2 kb. Parej as peul nen salvesse. A venta che a në fasa vàire 
+pàgine diferente për rintré ant ij lìmit tècnich.</strong>",
+'readonlywarning'           => "<strong>AVIS: La base dat a l'é staita blocà për manutension,
+e donca a peudrà pa salvesse soe modìfiche tut sùbit. A peul esse che
+a-j ven-a còmod copiesse via sò test e butesslo da na part për salvelo peuj.</strong>",
+'protectedpagewarning'      => "<strong>AVIS: costa pàgina-sì a l'é staita blocà an manera che mach dj'utent con la qualìfica da aministrator a peulo modifichelo. Che a varda le [[Project:Pàgina proteta|polìtiche për la protession dle pàgine]] për savejne dë pì.</strong>",
+'semiprotectedpagewarning'  => "'''Nòta:'''costa pàgina-sì a l'é staita protegiùa an manera che mach j'utent registrà a peulo modifichela.",
+'templatesused'             => 'Stamp dovrà dzora a sta pàgina-sì:',
+'nocreatetitle'             => 'Creassion ëd pàgine limità',
+'nocreatetext'              => "Cost sit-sì a l'ha limità la possibilità ëd creé dle pàgine neuve.
+A peul torné andaré e modifiché na pàgine che a-i é già, ò pura [[Special:Userlogin|rintré ant ël sistema ò deurb-se un cont]].",
+
+# History pages
+'revhistory'          => 'Stòria dle version dë sta pàgina-sì.',
+'nohistory'           => "La stòria dle version dë sta pàgina-sì a l'é pa trovasse.",
+'revnotfound'         => 'Version nen trovà',
+'revnotfoundtext'     => "La version prima dl'artìcol che a l'ha ciamà a l'é pa staita trovà.
+Che as controla për piasì l'adrëssa (URL) che a l'ha dovrà për rivé a sta pàgina-sì.",
+'loadhist'            => 'I soma antramentr che i carioma la stòria dë sta pàgina-sì',
+'currentrev'          => "Versione dël dì d'ancheuj",
+'revisionasof'        => 'Revision $1',
+'revision-info'       => 'Revision al $1; $2',
+'previousrevision'    => '←Version pì veja',
+'nextrevision'        => 'Revision pì neuve→',
+'currentrevisionlink' => 'vardé la version corenta',
+'cur'                 => 'cor',
+'next'                => 'anans',
+'last'                => 'andaré',
+'orig'                => 'orig',
+'histlegend'          => 'Confront antra version diferente: che as selession-a le casele dle version che a veul e peui che a sgnaca ël boton për anandié ël process.<br />
+Legenda: (cor) = diferense con la version corenta,
+(prim) = diferense con la version prima, M = modìfica cita',
+'deletedrev'          => '[scancelà]',
+'histfirst'           => 'Prima',
+'histlast'            => 'Ùltima',
+
+# Revision feed
+'history-feed-title'          => 'Stòria',
+'history-feed-description'    => 'Stòria dla pàgina ansima a sto sit-sì',
+'history-feed-item-nocomment' => '$1 al $2', # user at time
+'history-feed-empty'          => "La pàgina che a l'ha ciamà a-i é pa; a podrìa esse staita scancelà da 'nt ël sit, ò pura tramudà a n'àutr nòm.
+
+Che a verìfica con la [[Special:Search|pàgina d'arserca]] se a-i fusso mai dj'àutre pàgine che a podèisso andeje bin.",
+
+# Revision deletion
+'rev-deleted-comment'         => '(coment gavà)',
+'rev-deleted-user'            => '(stranòm gavà)',
+'rev-deleted-text-permission' => "<div class=\"mw-warning plainlinks\">
+Costa revision  dla pàgina-sì a l'é staita gavà via da 'nt j'archivi pùblich.
+A peul esse che a sio restajne chèich marca ant ël [{{fullurl:Special:Log/delete|page={{PAGENAMEE}}}} Registr ëd jë scancelament].
+</div>",
+'rev-deleted-text-view'       => "<div class=\"mw-warning plainlinks\">
+Costa revision dla pàgina-sì a l'é staita gavà via da 'nt j'archivi pùblich. 
+Coma aministrator d'ës sit-sì chiel a peul ës-ciairela;
+a peul esse che a sio restajne chèich marca ant ël [{{fullurl:Special:Log/delete|page={{PAGENAMEE}}}} Registr ëd jë scancelament].
+</div>",
+'rev-delundel'                => 'mostra/stërma',
+'revisiondelete'              => 'Scancela/disdëscancela revision',
+'revdelete-selected'          => 'Revision selessionà për [[:$1]]:',
+'revdelete-text'              => "Le version scancelà a së s-ciaireran sempe ant la stòria dla pàgina,
+ma sò test al pùblich a-j andran pì nen.
+
+J'àutri aministrator ëd sta wiki-sì a saran ancó sempe bon a s-ciairé ël contnù stërmà
+e a podran disdëscancelelo andré con la midema antërfacia, sempe che a sia nen staita butà
+na restrission adissional da j'operator dël sit.",
+'revdelete-legend'            => 'But-je coste limitassion-sì a le version scancelà:',
+'revdelete-hide-text'         => 'Stërma ël test dla revision',
+'revdelete-hide-comment'      => 'Stërma ël coment a la modìfica',
+'revdelete-hide-user'         => "Stërma lë stranòm ò l'adrëssa IP dël contributor",
+'revdelete-hide-restricted'   => "But-je ste restrission-sì a j'aministrator tan-me a j'àutri",
+'revdelete-log'               => 'Coment për ël registr:',
+'revdelete-submit'            => 'But-jlo a la version selessionà',
+'revdelete-logentry'          => 'visibilità dla revision cangià për [[$1]]',
+
+# Diffs
+'difference'                => '(Diferense antra revision)',
+'loadingrev'                => 'i soma antramentr che i carioma la revision për diferensa',
+'lineno'                    => 'Riga $1:',
+'editcurrent'               => 'Modìfica la version corenta dë sta pàgina-sì',
+'selectnewerversionfordiff' => 'Selession-a na version pì neuva për fé paragon',
+'selectolderversionfordiff' => 'Selession-a na version pì veja për fé paragon',
+'compareselectedversions'   => 'Paragon-a le version selessionà',
+
+# Search results
+'searchresults'         => "Arsultà dl'arserca",
+'searchresulttext'      => "Per avej pì d'anformassion ant sl'arserca interna ëd {{SITENAME}}, che a varda [[{{MediaWiki:helppage}}|Arserca ant la {{SITENAME}}]].",
+'searchsubtitle'        => 'Domanda "[[:$1]]"',
+'searchsubtitleinvalid' => 'Domanda "$1"',
+'badquery'              => 'Domanda mal faita',
+'badquerytext'          => "Soa domanda a l'é pa podusse processé.
+Sòn a podrìa dipende da lòn che chiel (chila) a l'ha arsercà na paròla con manch che tre caràter.
+Ò pura a podrìa esse che a l'abia scrivù mal la domanda, pr'esempi \"bleu and and pom\" 
+Për piasì, che a preuva torna.",
+'matchtotals'           => 'L\'arserca për la vos "$1" a l\'ha trovà<br />$2 rëscontr ant ij tìtoj ëd  j\'artìcoj e<br />$3 rëscontr ant ij test ëd j\'artìcoj.',
+'noexactmatch'          => "'''La pàgina \"\$1\" a-i é pa.''' As peul [[:\$1|creéla d'amblé]].",
+'titlematches'          => "Ant ij tìtoj dj'artìcoj",
+'notitlematches'        => "La vos che a l'ha ciamà a l'é pa trovasse antrames aj tìtoj dj'articol",
+'textmatches'           => "Ant ël test ëd j'artìcoj",
+'notextmatches'         => "La vos che a l'ha ciamà a l'é pa trovasse antrames aj test dj'articol",
+'prevn'                 => 'ij $1 prima',
+'nextn'                 => 'ij $1 peuj',
+'viewprevnext'          => 'Che a varda ($1) ($2) ($3).',
+'showingresults'        => 'Ambelessì sota <b>$1</b> arsultà, a parte dal nùmer #<b>$2</b>.',
+'showingresultsnum'     => 'Për sòlit a së smon-o <b>$3</b> arzultà a parte da #<b>$2</b>.',
+'nonefound'             => '<strong>Nòta</strong>: l\'arserchè dle paròle soèns dovrà, coma "avej" ò "esse", che a son pa indicisà, a peul dé n\'arsultà negativ, tan-me buté pì che na paròla da arserché (che a ven-o fòra mach cole pàgine andoa le paròle arsercà a-i son tute ansema).',
+'powersearch'           => 'Arserca',
+'powersearchtext'       => 'Sërca antra jë spassi nominaj:<br />
+$1<br />
+$2 Elenca le ridiression &nbsp; sërca për $3 $9',
+'searchdisabled'        => "L'arserca anterna ëd {{SITENAME}} a l'é nen abilità; për adess a peul prové a dovré un motor d'arserca estern coma Google. (Però che a ten-a present che ij contnù ëd {{SITENAME}} listà ant ij motor pùblich a podrìo ëdcò esse nen d'autut agiornà)",
+'blanknamespace'        => '(Prinsipal)',
+
+# Preferences page
+'preferences'           => 'Mè gust',
+'prefsnologin'          => "A l'é ancó pa rintrà ant ël sistema",
+'prefsnologintext'      => 'A dev [[Special:Userlogin|rintré ant ël sistema]]
+për podej specifiché ij sò gust.',
+'prefsreset'            => 'Ij "sò gust" a son stait pijait andré da \'nt la memòria dël server ëd {{SITENAME}}.',
+'qbsettings'            => 'Regolassion dla bara dij menù',
+'changepassword'        => 'Cambia ciav',
+'skin'                  => 'Facia',
+'math'                  => 'Fòrmule ëd matemàtica',
+'dateformat'            => 'Forma dla data',
+'datedefault'           => "franch l'istess",
+'datetime'              => 'Data e ora',
+'math_failure'          => 'Parsificassion falà',
+'math_unknown_error'    => 'Eror nen conossù',
+'math_unknown_function' => 'funsion che as sa pa lòn che a la sia',
+'math_lexing_error'     => 'eror ëd léssich',
+'math_syntax_error'     => 'eror ëd sintassi',
+'math_image_error'      => 'Conversion a PNG falà; che a contròla che latex, dvips, gs, e convert a sio instalà giust',
+'math_bad_tmpdir'       => "Ël sistema a-i la fa pa a creé la diretriss '''math temp''', ò pura a-i la fa nen a scriv-je andrinta",
+'math_bad_output'       => "Ël sistema a-i la fa pa a creé la diretriss '''math output''', ò pura a-i la fa nen a scriv-je andrinta",
+'math_notexvc'          => 'Pa gnun texvc executable; për piasì, che a contròla math/README për la configurassion.',
+'prefs-personal'        => "Profil dl'utent",
+'prefs-rc'              => 'Ùltime modìfiche',
+'prefs-watchlist'       => 'Ròba che as ten sot euj',
+'prefs-watchlist-days'  => 'Vàire dì che a veul ës-ciairé an soa lista ëd lòn che as ten sot euj:',
+'prefs-watchlist-edits' => 'Vàire modìfiche che a veul ës-ciairé con le funsion avansà:',
+'prefs-misc'            => 'Sòn e lòn',
+'saveprefs'             => 'Salvé ij sò gust',
+'resetprefs'            => 'Buta torna ij "mè gust" coma a-i ero al prinsipi',
+'oldpassword'           => 'Veja ciav',
+'newpassword'           => 'Neuva ciav',
+'retypenew'             => 'Che a scriva torna soa neuva ciav',
+'textboxsize'           => 'Amzure dël quàder ëd modìfica dël test',
+'rows'                  => 'Righe',
+'columns'               => 'Colòne',
+'searchresultshead'     => "Specifiché soe preferense d'arserca",
+'resultsperpage'        => 'Arsultà da mostré për vira pàgina',
+'contextlines'          => 'Righe ëd test për vira arsultà',
+'contextchars'          => 'Caràter për riga',
+'stubthreshold'         => 'Smon jë sbòss pì curt che:',
+'recentchangescount'    => "Nùmer ëd tìtoj ant j'ùltime modìfiche",
+'savedprefs'            => 'Ij sò gust a son stait salvà.',
+'timezonelegend'        => 'Fus orari',
+'timezonetext'          => "Che a buta ël nùmer d'ore ëd diferensa antra soa ora local e l'ora dël server (UTC).",
+'localtime'             => 'Ora Local',
+'timezoneoffset'        => 'Diferensa oraria (1)',
+'servertime'            => 'Ora dël server',
+'guesstimezone'         => "Ciapa sù l'ora da 'nt ël mè programa ëd navigassion (browser)",
+'allowemail'            => "Lassa che j'àutri Utent am mando ëd pòsta eletrònica",
+'defaultns'             => 'Se as dis nen divers, as sërca ant costi spassi nominaj-sì:',
+'default'               => 'stàndard',
+'files'                 => 'Archivi',
+
+# User rights
+'userrights-lookup-user'     => "Gestion dle partìe d'utent",
+'userrights-user-editname'   => 'Che a buta në stranòm:',
+'editusergroup'              => "Modifiché le partìe d'Utent",
+'userrights-editusergroup'   => "Modìfiché le partìe dj'utent",
+'saveusergroups'             => "Salva le partìe d'utent",
+'userrights-groupsmember'    => "A l'é andrinta a:",
+'userrights-groupsavailable' => 'Partìe disponibij:',
+'userrights-groupshelp'      => "Che as selession-a le partìe d'andoa che a veul gavé ò andoa che a veul buteje andrinta l'utent.
+Le partìe nen selessionà a saran nen tocà. Për deselessioné na partìa a venta che a jë sgnaca ansima ën tnisend ësgnacà ëdcò ël tast CTRL ëd soa tastera.",
+
+# Groups
+'group'            => 'Partìa:',
+'group-bot'        => 'Trigomiro',
+'group-sysop'      => 'Aministrator',
+'group-bureaucrat' => 'Mangiapapé',
+'group-all'        => '(utent)',
+
+'group-bot-member'        => 'Trigomiro',
+'group-sysop-member'      => 'Aministrator',
+'group-bureaucrat-member' => 'Mangiapapé',
+
+'grouppage-bot'        => '{{ns:project}}:Trigomiro',
+'grouppage-sysop'      => '{{ns:project}}:Aministrator',
+'grouppage-bureaucrat' => '{{ns:project}}:Mangiapapé',
+
+# User rights log
+'rightslog'      => "Drit dj'utent",
+'rightslogtext'  => "Sòn a l'é na lista dij cambiament aj drit dj'utent.",
+'rightslogentry' => "a l'ha tramudà $1 da 'nt la partìa $2 a la partìa $3",
+'rightsnone'     => '(gnun)',
+
+# Recent changes
+'recentchanges'                     => 'Ùltime Modìfiche',
+'recentchangestext'                 => "Costa a l'é la pàgina che a ten ël registr dij cambiament a la wiki pì davsin ant ël temp.",
+'rcnote'                            => "Ambelessì sota a-i é la lista dj'ùltime <strong>$1</strong> pàgine modificà ant j'ùltim <strong>$2</strong> dì, a fé data al $3.",
+'rcnotefrom'                        => ' Ambelessì sota a-i é la lista dle modìfiche da <b>$2</b> (fin-a a <b>$1</b>).',
+'rclistfrom'                        => 'Most-me le modìfiche a parte da $1',
+'rcshowhideminor'                   => '$1 le modìfiche cite',
+'rcshowhidebots'                    => '$1 ij trigomiro',
+'rcshowhideliu'                     => "$1 j'utent registrà",
+'rcshowhideanons'                   => "$1 j'utent anònim",
+'rcshowhidepatr'                    => '$1 le modìfiche verificà',
+'rcshowhidemine'                    => '$1 mie modìfiche',
+'rclinks'                           => "Most-me j'ùltime $1 modìfiche ëd j'ùltim $2 dì<br />$3",
+'diff'                              => 'dif.',
+'hist'                              => 'stòria',
+'hide'                              => 'stërma',
+'show'                              => 'smon',
+'minoreditletter'                   => 'c',
+'newpageletter'                     => 'N',
+'boteditletter'                     => 'b',
+'sectionlink'                       => '→',
+'number_of_watching_users_pageview' => '[$1 utent che as ten-o sossì sot euj]',
+'rc_categories'                     => 'Limité a le categorìe (che a jë scriva separand-je antra lor con un "|")',
+'rc_categories_any'                 => 'Qualsëssìa',
+
+# Recent changes linked
+'recentchangeslinked' => 'Modìfiche colegà',
+
+# Upload
+'upload'                      => 'Carié',
+'uploadbtn'                   => 'Carié',
+'reupload'                    => 'Caria torna',
+'reuploaddesc'                => 'Torné al mòdulo ëd domanda për carié archivi',
+'uploadnologin'               => "A dev [[Special:Userlogin|rintré ant ël sistema]] për podej fé st'operassion-sì",
+'uploadnologintext'           => "A dev [[Special:Userlogin|rintré ant ël sistema]]
+për podej carié dj'archivi.",
+'upload_directory_read_only'  => 'Ël programa webserver a-i la fa nen a scrive ansima a la diretriss ëd càrich ($1).',
+'uploaderror'                 => 'Eror dëmentré che as cariava',
+'uploadtext'                  => "'''DOSMAN!''' Anans che carié dla ròba ansima a {{SITENAME}}, che a sia motobin sigur d'avej bin lesù e capì 
+[[{{MediaWiki:policy-url}}|ël regolament ëd {{SITENAME}} ansima al dovré dle figure]].
+
+Për vardé ò pura sërché figure già carià ant sla {{SITENAME}}, che a vada ant sla [[Special:Imagelist|lista dle figure]].
+Lòn che as caria e së scancela a resta marcà ant ël [[Special:Log/upload|registr dij càrich]].
+
+Che a dòvra ël mòdulo ambelessì sota për carié neuv archivi con figure da dovré për fé pì bej e bin spiegà ij sò artìcoj.
+Ant sla pì part dij programa ëd navigassion dla Ragnà (browsers) a dovr ia s-ciairesse un boton con scrit \"Browse...\" (ò pura \"Sfeuja...\", se i l'eve un sistema n'italian) che av deurb la sòlita fnestra che as dòvra për carié dj'archivi.<br />
+
+Ën sërnend un dj'archivi che i l'eve ant sij vòstri disco, ël nòm a vnirà scrit n'automàtich ant la casela ëd test da fianch dël boton.<p>
+
+'''A dev ëdcò selessioné la casela ëd conferma che a dis che l'archivi a-j va nen contra a gnun-a nòrma ant sël drit d'autor.'''<p>
+
+Fait lolì, che a sgnaca ël boton \"Carié\" për completé l'operassion.
+Ël càrich a podrìa duré ëdcò chèich minuta, se chiel (chila) a l'avèissa na conession che a va pian, ò pura se la figura a la fussa tròp gròssa (figure parej as conseja dë nen carieje).<p>
+
+Le sòrt d'archivi che as preferisso a son ël JPEG për le fotografìe, ël PNG për ij dissègn, j'icòne e ij simboj, l'OGG për j'archivi sonòr.<p>
+
+Për piasì, anans che carieje, che a rinòmina ij sò archivi con dij nòm che diso lòn che a son, për evité dë fé confusion.
+Për buté na neuva figura ant n'articol, dovré n'anliura ant la forma
+'''<nowiki>[[image:archivi.jpg]]</nowiki>''' ò pura
+'''<nowiki>[[image:archivi.png|alt text, test alternativ]]</nowiki>''' ò pura
+'''<nowiki>[[media:archivi.ogg]]</nowiki>''' per ij son.<p>
+
+Che a ten-a present che tan-me për tuti ij contnù ëd la {{SITENAME}}, qualsëssìa person-a a peul modifiché, cangé ò pura scancelé ij sò archivi, se a jë smija che sòn a sia ant j'anteressi ëd l'enciclopedìa. Che a ten-a ëdcò da ment che, se a-i fusso dij comportament nen conformà a le nòrme, ò pura se a-i fussa na caria tròp gròssa për ël sistema, a podrìa esse blocà (ant sël pat d'esse perseguì se a-i fusso dle responsabilita legaj).",
+'uploadlog'                   => 'Registr dij càrich',
+'uploadlogpage'               => 'Registr dij càrich',
+'uploadlogpagetext'           => "Ambelessì sota a-i é la lista dj'ùltim archivi carià ant sël server ëd {{SITENAME}}.",
+'filename'                    => "Nòm dl'archivi",
+'filedesc'                    => 'Oget',
+'fileuploadsummary'           => "Detaj dl'archivi:",
+'filestatus'                  => "Situassion dij drit d'autor",
+'filesource'                  => 'Sorgiss',
+'uploadedfiles'               => 'Archivi carià ant la {{SITENAME}}',
+'ignorewarning'               => "Piantla-lì con j'avis e salva an tute le manere",
+'ignorewarnings'              => "Lassa sté j'avis",
+'minlength'                   => "Ij nòm dj'archivi dle figure a l'han dë esse longh almanch 3 caràter, ma a l'é pì bon deuit dovré dij nòm longh, basta che a faso na bon-a descrission dël soget dla figura.",
+'illegalfilename'             => 'Ël nòm d\'archivi "$1" a l\'ha andrinta dij caràter che as peulo pa dovresse ant ij tìtoj dle pàgine. Për piasì che a-j cangia nòm e peui che a torna a carielo.',
+'badfilename'                 => 'Ël nòm dl\'archivi a l\'é stait cambià an "$1".',
+'largefileserver'             => "St'archivi-sì a resta pì gròss che lòn che la màchina sentral a përmet.",
+'emptyfile'                   => "L'archivi che a l'ha pen-a carià a smija veujd. 
+Sòn a podrìa esse rivà përchè che chiel a l'ha scrivù mal ël nòm dl'archivi midem. 
+Për piasì che a contròla se a l'é pro cost l'archivi che a veul carié.",
+'fileexists'                  => "N'archivi con ës nòm-sì a-i é già, për piasì che as contròla $1 se a l'é pa sigur dë volej cangelo.",
+'fileexists-forbidden'        => "Belavans n'archivi con ës nòm-sì a-i é già, donca ël nòm as peul pa pì dovresse; për piasì che a torna andré e che as caria sò archivi con un nòm diferent. [[Image:$1|thumb|center|$1]]",
+'fileexists-shared-forbidden' => "Belavans n'archivi con ës nòm-sì ant la diretriss dj'archivi condivis a-i é già, donca ël nòm as peul pa pì dovresse; për piasì che a torna andré e che as caria sò archivi con un nòm diferent.
+[[Image:$1|thumb|center|$1]]",
+'successfulupload'            => 'Carià complet',
+'fileuploaded'                => "L'archivi \"\$1\" a l'é stait carià ant sël server coma che as dev.
+Che a dòvra st'anliura-sì: (\$2) për modifiché la pàgina ëd descrission dl'archivi che a l'ha pen-a carià, e che a buta bele sùbit cole anformassion che a jë smija dë buté (lòn che a l'é, andoa a l'ha trovalo, chi che a l'ha falo e quand, e via fòrt) e na nòta ansma a la situassion dij drit d'autor dl'archivi midem.<br /> Che as dësmentia pa dla nota ant sij drit, che dësnò l'archivi a sarà scancelà motobin ampressa.",
+'uploadwarning'               => 'Avis che i soma dapress a carié',
+'savefile'                    => "Salva l'archivi",
+'uploadedimage'               => 'a l\'ha carià "[[$1]]"',
+'uploaddisabled'              => 'Càrich blocà',
+'uploaddisabledtext'          => "La possibilità ëd carié dj'archivi ansima a sta wiki-sì a l'é staita disabilità.",
+'uploadscripted'              => "St'archivi-sì a l'ha andrinta chèich-còs (dël còdes HTML ò pura dlë script) che a podrìe esse travajà mal da chèich programa ëd navigassion (browser).",
+'uploadcorrupt'               => "St'archivi-sì ò che a l'é falà ò che a l'ha n'estension cioca. Për piasì, che as contròla l'archivi e peuj che a preuva torna a carielo.",
+'uploadvirus'                 => "St'archivi-sì a l'han andrinta un '''vìrus!''' Detaj: $1",
+'sourcefilename'              => "Nòm dl'archivi sorgiss",
+'destfilename'                => "Nòm dl'archivi ëd destinassion",
+'filewasdeleted'              => "N'archivi con ës nòm-sì a l'é gia stait caria e peui scancelà. Për piasì, che a verìfica $1 anans che carielo n'àutra vira.",
+
+'license'   => 'Licensa',
+'nolicense' => 'Pa gnun-a selession faita',
+
+# Image list
+'imagelist'                 => 'Lista dle figure',
+'imagelisttext'             => "Ambelessì sota a-i é {{PLURAL:$1|l'ùnica figura che a-i sia|na lista ëd '''$1''' figure, ordinà për $2}}.",
+'imagelistforuser'          => 'Sòn a mostra mach le figure carià da $1.',
+'getimagelist'              => 'arserca ant la lista dle figure',
+'ilsubmit'                  => 'Sërca',
+'showlast'                  => "Lista ëd $1, antra j'ùltime figure, ordinà për $2.",
+'byname'                    => 'nòm',
+'bydate'                    => 'për data',
+'bysize'                    => 'pèis',
+'imgdelete'                 => 'scanc',
+'imgdesc'                   => 'descr',
+'imglegend'                 => 'Legenda: (desc) = mostra/modìfica la descrission dla figura.',
+'imghistory'                => 'Stòria dë sta figura',
+'revertimg'                 => 'buta torna',
+'deleteimg'                 => 'scanc',
+'deleteimgcompletely'       => 'scanc',
+'imghistlegend'             => 'Legenda: (cor) = figura corenta, (scanc) = scancela sta version veja, (arb) = arbuta sù sta veja version coma version corenta.
+<br /><i>Che a jë sgnaca ansima a na data për ës-ciairé tute le figure che sono staite carià an cola data-lì </i>.',
+'imagelinks'                => 'Anliure a le figure',
+'linkstoimage'              => "Le pàgine sì sota a l'han andrinta dj'anliure a sta figura-sì:",
+'nolinkstoimage'            => "Pa gnun-a pàgina che a l'abia n'anliura a sta figura-sì.",
+'sharedupload'              => "St'archivi-sì a l'é stait carià an comun; donca a peul esse dovrà antra vàire proget wiki diferent.",
+'shareduploadwiki'          => 'Che as varda $1 për savejne dë pì.',
+'shareduploadwiki-linktext' => "pàgina dë spiegon dl'archivi",
+'noimage'                   => 'A-i é pa gnun archivi che as ciama parej, a peul $1.',
+'noimage-linktext'          => 'carijlo',
+'uploadnewversion-linktext' => "Carié na version neuva dë st'archivi-sì",
+
+# MIME search
+'mimesearch' => 'Arsërca për sòrt MIME',
+'mimetype'   => 'Sòrt MIME:',
+'download'   => 'dëscarié',
+
+# Unwatched pages
+'unwatchedpages' => 'Pàgine che as ten-o pì nen sot euj',
+
+# List redirects
+'listredirects' => 'Lista dle ridiression',
+
+# Unused templates
+'unusedtemplates'     => 'Stamp nen dovrà',
+'unusedtemplatestext' => "Sta pàgina-sì a la smon tuti jë stamp (pàgine dlë spassi nominal Stamp) che a son pa dovrà andrinta a gnun-a pàgina. Mej verifiché che në stamp a-j serva nen a dj'àutri stamp (che dle vire në stamp gròss a l'é fait ëd vàire cit sotastamp), anans che fé che ranchelo via.",
+'unusedtemplateswlh'  => 'àutre anliure',
+
+# Random redirect
+'randomredirect' => 'Na ridiression qualsëssìa',
+
+# Statistics
+'statistics'    => 'Statìstiche',
+'sitestats'     => 'Statìstiche dël sit',
+'userstats'     => 'Statìstiche ëd {{SITENAME}}',
+'sitestatstext' => "A-i é la blëssa ëd <b>\$1</b> pàgine ant la base dat.
+Ës nùmer-sì a comprend le pàgine ëd ciaciarada, cole ansima a {{SITENAME}}, artìcoj curt (che ant ël parlé técnich dla wiki as ciamo \"sbòss\"), ridiression, e àutre pàgine che a l'é belfé che a sio pa dj'artìcoj.
+Gavà coste, a resto <b>\$2</b> pàgine che a l'han tuta l'ària d'esse dj'artìcoj da bon.
+
+'''\$8''' archivi a son stait carià.
+
+A-i é staje un total ëd '''\$3''' pàgine consultà, e '''\$4''' modìfiche a j'artìcoj, da quand sta wiki a l'é doèrta.
+Costa media an dis che a-i son ëstaje <b>\$5</b> modìfiche për artìcol, e che vira artìcol a l'é stait lesù <b>\$6</b> vire për modìfica.
+
+Ant la [http://meta.wikimedia.org/wiki/Help:Job_queue coa] a-i {{plural|é|son}} '''\$7''' process.",
+'userstatstext' => "A-i son <b>$1</b> utent registrà, dont
+<b>$2</b> (ël '''$4%''') a l'han la qualìfica d'aministrator (che a varda $3).",
+
+'disambiguations'     => 'Pàgine për la gestion dij sinònim',
+'disambiguationspage' => 'Template:Gestion dij sinònim',
+
+'doubleredirects'     => 'Ridiression dobie',
+'doubleredirectstext' => "<b>Pieve varda:</b> costa lista-sì dle vire a peul avej andrinta dj'arsultà nen giust. Sòn a peul rivé miraco përchè a-i sio dj'anliure ò pura dël test giontà dapress a l'istrussion #REDIRECT.<br />
+Vira riga a l'ha andrinta j'anliure a la prima e a la sconda rediression, ant sël pat ëd la prima riga ëd test dla seconda rediression, che për sòlit a l'ha andrinta l'artìcol ëd destinassion vèir, col andoa che a dovrìa ëmné ëdcò la prima reiression.",
+
+'brokenredirects'     => 'Ridiression nen giuste',
+'brokenredirectstext' => "Coste ridiression-sì a men-o a dj'articoj ancó pa creà.",
+
+# Miscellaneous special pages
+'nbytes'                  => '$1 {{PLURAL:$1|byte|bytes}}',
+'ncategories'             => '$1 {{PLURAL:$1|categorìa|categorìe}}',
+'nlinks'                  => '$1 {{PLURAL:$1|anliura|anliure}}',
+'nmembers'                => '$1 {{PLURAL:$1|element|element}}',
+'nrevisions'              => '{{PLURAL:$1|na revision|$1 revision}}',
+'nviews'                  => '{{PLURAL:$1|na consultassion|$1 consultassion}}',
+'lonelypages'             => 'Pàgine daspërlor',
+'uncategorizedpages'      => 'Pàgine che a son nen assignà a na categorìa',
+'uncategorizedcategories' => 'Categorìe che a son pa assignà a na categorìa',
+'uncategorizedimages'     => 'Figure nen dovrà',
+'unusedcategories'        => 'Categorìe nen dovrà',
+'unusedimages'            => 'Figure nen dovrà',
+'popularpages'            => 'Pàgine pì s-ciairà',
+'wantedcategories'        => 'Categorìe dont a fa da manca',
+'wantedpages'             => 'Artìcoj pì ciamà',
+'mostlinked'              => "Pàgine che a l'han pì d'anliure che a-i men-o la gent ansima",
+'mostlinkedcategories'    => "Categorìe che a l'han pì d'anliure che a-i men-o la gent ansima",
+'mostcategories'          => 'Artìcoj che a son marcà an pì categorìe',
+'mostimages'              => 'Figure pì dovrà',
+'mostrevisions'           => 'Artìcoj pì modificà',
+'allpages'                => 'Tute le pàgine',
+'prefixindex'             => 'Ìndess për inissiaj',
+'randompage'              => 'Na pàgina qualsëssìa',
+'shortpages'              => 'Pàgine curte',
+'longpages'               => 'Pàgine longhe',
+'deadendpages'            => 'Pàgine che a men-o da gnun-a part',
+'listusers'               => "Lista dj'utent",
+'specialpages'            => 'Pàgine Speciaj',
+'spheading'               => 'Pàgine Speciaj',
+'restrictedpheading'      => 'Pàgine speciaj riservà',
+'rclsub'                  => '(pàgine che a l\'han n\'anliura che a riva da "$1")',
+'newpages'                => 'Pàgine neuve',
+'ancientpages'            => 'Le pàgine pì veje',
+'intl'                    => 'Anliure antra lenghe diferente',
+'move'                    => 'Tramuda',
+'movethispage'            => 'Tramuda costa pàgina-sì',
+'unusedimagestext'        => "<p>Che ten-a present che dj'àutri sit ant sla Ragnà, coma la {{SITENAME}} antërnassional, a podrìo avej butà n'anliura a na figura con n'adrëssa direta, e donca a peul esse che le figure ant costa lista-sì, contut che son nen dovrà ant costa version-sì dla {{SITENAME}}, a sio però dovrà ant chèich àutr pòst.",
+'unusedcategoriestext'    => "Le pàgine ëd coste categorìe-sì a son fasse ma peuj a l'han andrinta nì d'artìcoj, nì ëd sotacategorìe.",
+
+# Book sources
+'booksources' => 'Andoa trové dij lìber',
+
+'categoriespagetext' => 'An costa wiki a-i son ste categorìe-sì.',
+'data'               => 'Dat',
+'userrights'         => "Gestion dij drit dj'utent",
+'groups'             => "Partìe d'utent",
+'isbn'               => 'ISBN',
+'alphaindexline'     => '$1 a $2',
+'version'            => 'Version',
+
+# Special:Log
+'specialloguserlabel'  => 'Utent:',
+'speciallogtitlelabel' => 'Tìtol:',
+'log'                  => 'Registr',
+'alllogstext'          => "Son a mostra na combinassion dij registr ëd lòn che a l'é cariasse, scancelasse, blocasse e ëd lòn che a l'han fait j'aministrator.
+A peul sern-se n'arsultà pì strèit ën selessionand na sòrt ëd registr sola, un nòm Utent ò pura la pàgina che a-j anteressa.",
+'logempty'             => 'Pa gnun element parej che a sia trovasse ant ij registr.',
+
+# Special:Allpages
+'nextpage'          => 'Pàgina che a-i ven ($1)',
+'allpagesfrom'      => 'Most-me la pàgine ën partend da:',
+'allarticles'       => "Tùit j'artìcoj",
+'allinnamespace'    => 'Tute le pàgine (spassi nominal $1)',
+'allnotinnamespace' => 'Tute le pàgine (che a son nen ant lë spassi nominal $1)',
+'allpagesprev'      => 'Cole prima',
+'allpagesnext'      => 'Cole che a ven-o',
+'allpagessubmit'    => 'Va',
+'allpagesprefix'    => "Most-me la pàgine che a l'ha prefiss:",
+
+# E-mail user
+'mailnologin'     => 'A-i é pa gnun-a adrëssa për mandé ël messagi',
+'mailnologintext' => "A dev [[Special:Userlogin|rintré ant ël sistema]]
+e avej registrà n'adrëssa ëd pòsta eletrònica vàlida ant ij [[Special:Preferences|sò gust]] për podej mandé dij messagi ëd pòsta eletrònica a j'àutri Utent.",
+'emailuser'       => "Mand-je un messagi eletrònich a st'Utent-sì",
+'emailpage'       => "Mand-je un messagi ëd pòsta eletrònica a st'utent-sì",
+'emailpagetext'   => "Se st'Utent-sì a l'ha registrà na soa casela ëd pòsta eletrònica, i peule scriv-je un messagi con ël mòdulo ambelessì sota.
+L'adrëssa eletrònica che a l'ha specificà ant ij sò \"gust\" a sarà butà coma mitent, an manera che ël destinatari, ën volend, a peula arspond-je.",
+'usermailererror' => "L'oget che a goèrna la pòsta eletrònica a l'ha dait eror:",
+'defemailsubject' => 'Messagi da {{SITENAME}}',
+'noemailtitle'    => 'Pa gnun-a adrëssa ëd pòsta eletrònica',
+'noemailtext'     => "Cost Utent-sì a l'ha nen registrà gnun-a casela ëd pòsta eletrònica, ò pura a l'ha sërnù ëd nen fesse mandé pòsta da j'àutri Utent.",
+'emailfrom'       => 'Da',
+'emailto'         => 'A',
+'emailsubject'    => 'Oget',
+'emailmessage'    => 'Messagi',
+'emailsend'       => 'Manda',
+'emailsent'       => 'Messagi eletrònich mandà',
+'emailsenttext'   => "Sò messagi eletrònich a l'é stait mandà",
+
+# Watchlist
+'watchlist'            => 'Ròba che im ten-o sot euj',
+'mywatchlist'            => 'Ròba che im ten-o sot euj',
+'watchlistfor'         => "(për '''$1''')",
+'nowatchlist'          => 'A l\'ha ancó pa marcà dj\'artìcoj coma "ròba da tnì sot euj".',
+'watchlistanontext'    => "Për piasì, $1 për ës-ciairé ò pura modifiché j'element ëd soa lista dla ròba che as ten sot euj.",
+'watchlistcount'       => "'''La lista dla ròba che as ten sot euj a l'ha andrinta $1 element (contand ëdcò le pàgine ëd discussion).'''",
+'clearwatchlist'       => 'Veujda la lista dle ròbe da tnì sot euj',
+'watchlistcleartext'   => "Che a conferma che a veul gavé via tùit j'element",
+'watchlistclearbutton' => 'Dësveujda la lista',
+'watchlistcleardone'   => "La lista dla ròba che as ten sot euj a l'è staita dësveujdà. Ën fasendlo a son gavasse via $1 element.",
+'watchnologin'         => "A l'é ancó nen rintrà ant ël sistema",
+'watchnologintext'     => "A l'ha da manca prima ëd tut dë [[Special:Userlogin|rintré ant ël sistema]]
+për podej modifiché soa lista dla ròba dë tnì sot euj.",
+'addedwatch'           => "Sòn a l'é stait giontà a le pàgine che it ten-e sot euj",
+'addedwatchtext'       => " La pàgina  \"\$1\" a l'é staita giontà a tua [[Special:Watchlist|lista dla ròba da tnì sot euj]].
+Le modìfiche che a-i vniran ant costa pàgina-sì e ant soa pàgina ëd discussion a saran listà ambelessì, e la pàgina a së s-ciairerà ën <b>grassèt</b> ant la pàgina ëd j'[[Special:Recentchanges|ùltime modìfiche]] përchè che a resta belfé a ten-la d'euj.
+
+Se a vorèissa mai gavé st'articol-sì da 'nt la lista dij ''Sot Euj'', che a sgnaca \" Chita da tnì sot euj \" ant sla bara dij menù.",
+'removedwatch'         => "Gavà via da 'nt la lista dla ròba da tnì sot euj",
+'removedwatchtext'     => 'La pàgina  "$1" a l\'è staita gavà via da soa lista dla ròba da tnì sot euj.',
+'watch'                => 'ten sot euj',
+'watchthispage'        => "Ten sot euj st'artìcol-sì",
+'unwatch'              => 'Chita-lì da ten-e sossì sot euj',
+'unwatchthispage'      => 'Chita-lì da ten-e sossì sot euj',
+'notanarticle'         => "Sòn a l'é pa n'artìcol",
+'watchnochange'        => 'Pa gnun-a dle ròbe che as ten sot euj che a sia staita modificà ant ël temp indicà.',
+'watchdetails'         => '* $1 pàgine che im ten-o sot euj nen contand cole ëd discussion
+* [[Special:Watchlist/edit|most-me e lass-me modifiché la lista antrega ëd lòn che im ten-o sot euj]]',
+'wlheader-enotif'      => '* Le notìfiche për pòsta eletrònica a son abilità.',
+'wlheader-showupdated' => "* Cole pàgine che a son staite modificà da quand che a l'é passa l'ùltima vira a resto marcà an '''grassèt'''",
+'watchmethod-recent'   => "controland j'ùltime modìfiche faite a le pàgine che as ten sot euj",
+'watchmethod-list'     => 'controland le pàgine che as ten sot euj për vëdde se a-i sio mai staje dle modìfiche',
+'removechecked'        => "Gava via j'element marcà da 'nt la lista dle ròbe da ten-e sot euj",
+'watchlistcontains'    => "Soa lista dla ròba che as ten sot euj a l'ha andrinta $1 pàgine.",
+'watcheditlist'        => 'Sossì a l\'é un elench alfabétich ëd tute le pàgine ëd contnù che as ten sot euj.
+Che a-j buta la cros ant sle casele dle pàgine che a veul gavé via da \'nt la lista e peuj che a jë sgnaca ansima al boton "gava cole selessionà" che a treuva sota (pàgina ëd contnù e ëd discussion a fa mach basta gavene un-a, che as bogio sempe an cobia).',
+'removingchecked'      => "I soma antramentr che ij gavoma j'element da 'nt la lista dle ròbe da ten-se sot euj...",
+'couldntremove'        => "A l'é pa podusse gavé via l'element '$1'...",
+'iteminvalidname'      => "Problema con l'element '$1', nòm nen vàlid...",
+'wlnote'               => "Ambelessì sota a-i son j'ùltime $1 modìfiche ant j'ùltime <b>$2</b> ore.",
+'wlshowlast'           => "Most-me j'ùltime $1 ore $2 dì $3",
+'wlsaved'              => "Costa-sì a l'é na version memorisà ëd soa lista dle ròbe da tnì sot euj.",
+'wldone'               => 'Fait.',
+
+'enotif_mailer'      => '{{SITENAME}} - Servissi ëd Notìfica Postal',
+'enotif_reset'       => 'March-me tute le pàgine visità',
+'enotif_newpagetext' => "Costa-sì a l'é na pàgina neuva",
+'changed'            => 'cangià',
+'created'            => 'creà',
+'enotif_subject'     => 'La pàgina $PAGETITLE ëd {{SITENAME}} a l\'é staita $CHANGEDORCREATED da $PAGEEDITOR',
+'enotif_lastvisited' => "Che as varda $1 për ës-ciaré tute le modìfiche da 'nt l'ùltima vira che a l'é passà.",
+'enotif_body'        => 'A l\'atension ëd $WATCHINGUSERNAME,
+
+La pàgina $PAGETITLE dël sit {{SITENAME}} a l\'é staita $CHANGEDORCREATED al $PAGEEDITDATE da $PAGEEDITOR, che a varda $PAGETITLE_URL për la version corenta.
+
+$NEWPAGE
+
+Somari dl\'editor: $PAGESUMMARY $PAGEMINOREDIT
+
+Për contaté l\'editor:
+Pòsta eletrònica: $PAGEEDITOR_EMAIL
+wiki: $PAGEEDITOR_WIKI
+
+Se chiel (chila) a visitèissa nen la pàgina modificà për contròl a-i sarìa pì gnun-a notìfica ëd modìfiche che a podèisso riveje dapress a costa.
+Che as visa che a peul cangeje ij setagi dle notìfiche a le pàgine che as ten sot-euj ansima a soa lista dla ròba da ten-e sot euj.
+
+             Comunicassion dël sistema ëd notìfica da {{SITENAME}} 
+
+--
+Për cangé ij setagi ëd lòn che as ten sot euj che a vada ansima a
+{{fullurl:Special:Watchlist/edit}}
+
+Për fé dle comunicassion ëd servissi e avej pì d\'agiut:
+{{fullurl:{{MediaWiki:helppage}}}}',
+
+# Delete/protect/revert
+'deletepage'                  => 'Scancela pàgina',
+'confirm'                     => 'Conferma',
+'excontent'                   => "Ël contnù a l'era: '$1'",
+'excontentauthor'             => "ël contnù a l'era: '$1' (e l'ùnich contributor a l'era stait '$2')",
+'exbeforeblank'               => "Anans d'esse dësvojdà ël contnù a l'era: '$1'",
+'exblank'                     => "La pàgina a l'era veujda",
+'confirmdelete'               => 'Conferma dlë scancelament',
+'deletesub'                   => '(Scancelament ëd "$1")',
+'historywarning'              => "Avis: la pàgina che a l'é antramentr che a scancela a l'ha na stòria:",
+'confirmdeletetext'           => "A sta për scancelé d'autut da 'nt la base dat na pàgina ò pura na figura, ansema a tuta soa cronologìa.<p>
+Për piasì, che an conferma che sòn a l'é da bon sò but, che a as rend cont ëd le conseguense ëd lòn che a fa, e che sòn a resta an pien an régola con lòn che a l'é stabilì ant la [[{{MediaWiki:policy-url}}]].",
+'actioncomplete'              => 'Travaj fait e finì',
+'deletedtext'                 => 'La pàgina "$1" a l\'é staita scancelà.
+Che a varda $2 për na lista dle pàgine scancelà ant j\'ùltim temp.',
+'deletedarticle'              => 'Scancelà "$1"',
+'dellogpage'                  => 'Registr djë scancelament',
+'dellogpagetext'              => "Ambelessì sota na lista dle pàgine scancelà ant j'ùltim temp.
+Ij temp a son conforma a l'ora dël server (UTC).
+<ul>
+</ul>",
+'deletionlog'                 => 'Registr djë scancelament',
+'reverted'                    => 'Version prima butà torna sù',
+'deletecomment'               => 'Motiv dlë scancelament',
+'imagereverted'               => "La version pì veja a l'é staita torna buta sù. Gnun eror.",
+'rollback'                    => 'Dòvra na revision pì veja',
+'rollback_short'              => 'Ripristinè',
+'rollbacklink'                => "ripristiné j'archivi",
+'rollbackfailed'              => "A l'é pa podusse ripristiné",
+'cantrollback'                => "As peul pa tornesse a na version pì veja: l'ùltima modìfica a l'ha fala l'ùnich utent che a l'abia travajà a cost artìcol-sì.",
+'alreadyrolled'               => "As peulo pa anulé j'Ultime modìfiche ëd [[:$1]]
+faite da [[User:$2|$2]] ([[User talk:$2|Talk]]); Cheidun d'àutr a l'ha già modificà ò pura anulà le modìfiche a sta pàgina-sì.
+
+L'ùltima modìfica a l'é staita faita da [[User:$3|$3]] ([[User talk:$3|Talk]]).",
+'editcomment'                 => 'Ël coment dla modìfica a l\'era: "<i>$1</i>".', # only shown if there is an edit comment
+'revertpage'                  => "Gavà via le modìfiche dl'utent [[Special:Contributions/$2|$2]] ([[User_talk:$2|Talk]]); ël contnù a l'é stait tirà andarè a l'ùltima version dl'utent [[User:$1|$1]]",
+'sessionfailure'              => "A-i son ëstaje dle gran-e con la session che a identìfica sò acess; ël sistema a l'ha nen eseguì l'ordin che a l'ha daje për precaussion. Che a torna andaré a la pàgina prima con ël boton \"andaré\" ëd sò programa ëd navigassion (browser), peuj che as carìa n'àutra vira costa pàgina-sì e che a preuva torna a fé lòn che vorìa fé.",
+'protectlogpage'              => 'Registr dle protession',
+'protectlogtext'              => "Ambelessì sota a-i é na lista d'event ëd protession e dësprotession ëd pàgine.
+Che a varda la [[Project:Pàgina proteta|guida a le pàgine protete]] për savejne dë pì.",
+'protectedarticle'            => '"[[$1]]" a l\'é protet',
+'unprotectedarticle'          => 'Dësprotegiù "[[$1]]"',
+'protectsub'                  => '(I soma antramentr che i protegioma "$1")',
+'confirmprotecttext'          => 'Veul-lo da bon protege sta pàgina-sì?',
+'confirmprotect'              => 'Che an conferma la protession',
+'protectmoveonly'             => "Lòn che as peul nen fesse ambelessì a l'é mach tramudé.",
+'protectcomment'              => 'Motiv dla protession',
+'unprotectsub'                => '(dësprotession ëd "$1")',
+'confirmunprotecttext'        => 'Veul-lo da bon dësprotege sta pàgina-sì?',
+'confirmunprotect'            => 'Che an conferma la dësprotession',
+'unprotectcomment'            => 'Motiv dla dësprotession',
+'protect-unchain'             => 'Dësbloché ij permess ëd tramudé dla ròba',
+'protect-text'                => 'Ambelessì a peul vardé e cangé ël livel ëd protession dla pàgina <strong>$1</strong>.
+Për piasì, che a resta mach motobin sigur da esse ant ij lìmit ëd le [[Project:Pàgina proteta|polìtiche ëd proget]].',
+'protect-default'             => '(stàndard)',
+'protect-level-autoconfirmed' => "Bloché j'utent nen registrà",
+'protect-level-sysop'         => "mach për j'aministrator",
+
+# Restrictions (nouns)
+'restriction-edit' => 'Modìfica',
+'restriction-move' => 'Tramuda',
+
+# Undelete
+'undelete'                 => 'Pija andré na pàgina scancelà',
+'undeletepage'             => 'S-ciàira e pija andaré le pàgine scancelà',
+'viewdeletedpage'          => 'Smon le pàgine scancelà',
+'undeletepagetext'         => 'Le pàgine ambelessì sota a son staite scancelà, ma a resto ancó memorisà e donca as peulo pijesse andaré. La memòria a ven polidà passaje un pòch ëd temp.',
+'undeleteextrahelp'        => "Për ripristiné la pàgina antrega, che a lassa tute le casele nen selessionà e che a jë sgnaca ansima a '''''Buta coma a l'era '''''.
+Për ripristiné mach chèich-còs, che a selession-a lòn che a veul ripristiné anans che sgnaché. Ën sgacand-je ansima a '''''Veujda casele''''' peul polidesse d'amblé tute le casele selessionà e dësvojdé ël coment.",
+'undeleterevisions'        => '$1 revision memorisà',
+'undeletehistory'          => "Se a pija andré st'articol-sì, ëdcò tute soe revision a saran pijaite andaré ansema a chiel ant soa cronologìa.<br />
+Se a fussa mai staita creà na pàgina neuva con l'istess nòm dòp che la veja a l'era staita scancelà, le revision a saran buta ant la cronologìa e la version pùblica dla pàgina a sarà nen modificà.",
+'undeletehistorynoadmin'   => "Sta pàgina-sì a l'é staita scancelà. Ël motiv che a l'é scancelasse 
+as peul savejsse ën vardand ël somari ambelessì sota, andoa che a së s-ciàira ëdcò chi che a 
+l'avìa travaje ansima anans che a la scancelèisso.
+Ël test che a-i era ant le vàire version a peulo s-ciairelo mach j'aministrator.",
+'undeletebtn'              => 'Ripristiné',
+'undeletereset'            => 'Gava tute le selession',
+'undeletecomment'          => 'Coment:',
+'undeletedarticle'         => 'Pijaita andré "$1"',
+'undeletedrevisions'       => '$1 revision pijaite andaré',
+'undeletedrevisions-files' => '$1 revision e $2 archivi pijait andaré',
+'undeletedfiles'           => '$1 archivi pijait andaré',
+'cannotundelete'           => "Disdëscancelament falì; a peul esse che i fusse antra doi a felo ant l'istess temp e l'àutr a sia riva prima.",
+'undeletedpage'            => "<big>'''$1 a l'é stait pijait andaré'''</big>
+
+Che as varda ël [[Special:Log/delete|Registr djë scancelament]] për ës-ciairé j'ùltim scancelament e disdëscancelament.",
+
+# Namespace form on various pages
+'namespace' => 'Spassi nominal:',
+'invert'    => 'Anvert la selession',
+
+# Contributions
+'contributions' => "Contribussion dë st'Utent-sì",
+'mycontris'     => 'Mie contribussion',
+'contribsub2'    => 'Për $1 ($2)',
+'nocontribs'    => "A l'é pa trovasse gnun-a modìfica che a fussa conforma a costi criteri-sì",
+'ucnote'        => "Ambelessì sota a-i son j'ùltime <b>$1</b> modìfiche faite da st'Utent-sì ant j'ùltim <b>$2</b> dì.",
+'uclinks'       => "Vardé j'ùltimi $1 modifiche; vardé j'ùltim $2 dì.",
+'uctop'         => ' (ùltima dla pàgina)',
+
+'sp-contributions-newest'      => "J'ùltim",
+'sp-contributions-oldest'      => 'Ij prim',
+'sp-contributions-newer'       => '$1 andaré',
+'sp-contributions-older'       => '$1 anans',
+'sp-contributions-newbies-sub' => "Për j'utent neuv",
+
+'sp-newimages-showfrom' => "Smon j'ùltime figure anandiandse da $1",
+
+# What links here
+'whatlinkshere' => "Pàgine con dj'anliure che a men-o a costa-sì",
+'notargettitle' => 'A manco ij dat',
+'notargettext'  => "A l'ha pa dit a che pàgina ò Utent apliché l'operassion ciamà.",
+'linklistsub'   => "(Lista d'anliure)",
+'linkshere'     => "Le pàgine sì sota a l'han andrinta dj'anliure che a men-o ambelessì:",
+'nolinkshere'   => "Pa gnun-a pàgina che a l'abia dj'anliure che a men-o a costa-sì.",
+'isredirect'    => 'ridiression',
+'istemplate'    => 'inclusion',
+
+# Block/unblock
+'blockip'                     => "Blochè n'adrëssa IP",
+'blockiptext'                 => "Che a dòvra ël mòdulo ëd domanda 'd blocagi ambelessì sota për bloché l'acess con drit dë scritura da na chèich adrëssa IP.<br />
+Ës blocagi-sì as dev dovresse MACH për evité dij comportament vandàlich, ën strèita osservansa ëd tùit ij prinsipi dla [[{{MediaWiki:policy-url}}|polìtica ëd {{SITENAME}}]].<br />
+Ël blocagi a peul nen ën gnun-a manera esse dovrà për dle question d'ideologìa.
+
+Che a scriva codì che st'adrëssa IP-sì a dev second chiel (chila) esse blocà (pr'esempi, che a buta ij tìtoj ëd pàgine che a l'abio già patì dj'at vandàlich da cost'adrëssa IP-sì).",
+'ipaddress'                   => 'Adrëssa IP',
+'ipadressorusername'          => 'Adrëssa IP ò stranòm',
+'ipbexpiry'                   => 'Fin-a al',
+'ipbreason'                   => 'Motiv dël blocagi',
+'ipbsubmit'                   => "Bloca st'adrëssa IP-sì",
+'ipbother'                    => "N'àutra durà",
+'ipboptions'                  => "2 ore:2 ore,1 dì:1 dì,3 dì:3 dì,na sman-a:na sman-a,2 sman-e:2 sman-e,1 mèis:1 mèis,3 mèis:3 mèis,6 mèis:6 mèis,n'ann:n'ann,për sempe:për sempe",
+'ipbotheroption'              => "d'àutr",
+'badipaddress'                => "L'adrëssa IP che a l'ha dane a l'é nen giusta.",
+'blockipsuccesssub'           => 'Blocagi fait',
+'blockipsuccesstext'          => ' L\'adrëssa IP "$1" a l\'é staita blocà.<br />
+Che a varda la [[Special:Ipblocklist|lista dj\'IP blocà]].',
+'unblockip'                   => "Dësblòca st'adrëssa IP-sì",
+'unblockiptext'               => "Che a dòvra ël mòdulo ëd domanda ambelessì sota për deje andé al drit dë scritura a n'adrëssa IP che a l'era staita blocà.",
+'ipusubmit'                   => "Dësblòca st'adrëssa IP-sì",
+'unblocked'                   => "[[User:$1|$1]] a l'é stait dësblocà",
+'ipblocklist'                 => "Lista dj'adrësse IP blocà",
+'blocklistline'               => "$1, $2 a l'ha blocà $3 ($4)",
+'infiniteblock'               => 'për sempe',
+'expiringblock'               => 'fin-a al $1',
+'ipblocklistempty'            => "La lista dij blocagi a l'é veujda",
+'blocklink'                   => 'blòca',
+'unblocklink'                 => 'dësblòca',
+'contribslink'                => 'contribussion',
+'autoblocker'                 => "A l'é scataje un blocagi përchè soa adrëssa IP a l'é staita dovrà ant j'ùltim temp da l'Utent \"[[User:\$1|\$1]]\". Ël motiv për bloché \$1 a l'é stait: \"'''\$2'''\"",
+'blocklogpage'                => 'Registr dij blocagi',
+'blocklogentry'               => '"[[$1]]" a l\'é stait blocà fin-a a $2',
+'blocklogtext'                => "Sossì a l'é ël registr dij blocagi e dësblocagi dj'Utent. J'adrësse che
+a son staite blocà n'automàtich ambelessì a së s-ciàiro nen. 
+Che a varda la [[Special:Ipblocklist|lista dj'adrësse IP blocà]] për vëdde
+coj che sio ij blocagi ativ al dì d'ancheuj.",
+'unblocklogentry'             => "a l'ha dësblocà $1",
+'range_block_disabled'        => "La possibilità che n'aministrator a fasa dij blocagi a ragg a l'é disabilità.",
+'ipb_expiry_invalid'          => 'Temp dë scadensa nen bon.',
+'ip_range_invalid'            => 'Nùmer IP nen bon.',
+'proxyblocker'                => "Bloché j'arpetitor (Proxy) doèrt",
+'proxyblockreason'            => "Soa adrëssa IP a l'é staita bloca përchè a l'é cola ëd n'arpetitor (proxy) doèrt. Për piasì che a contata al sò fornitor ëd conession e che a lo anforma. As trata d'un problema ëd siguressa motobin serio.",
+'proxyblocksuccess'           => 'Bele fait.',
+'sorbs'                       => 'SORBS DNSBL',
+'sorbsreason'                 => "Soa adrëssa IP a l'é listà coma arpetitor doèrt (open proxy) ansima a [http://www.sorbs.net SORBS] DNSBL.",
+'sorbs_create_account_reason' => "Soa adrëssa IP a l'é listà coma arpetitor doèrt (open proxy) ansima a [http://www.sorbs.net SORBS] DNSBL. A peul nen creésse un cont.",
+
+# Developer tools
+'lockdb'              => 'Blòca la base dat',
+'unlockdb'            => 'Dësblòca la base dat',
+'lockdbtext'          => "Ën blocand la base dat as fërma la possibilità che tuti j'Utent a peulo modifiché le pàgine ò pura fene 'd neuve, che a peulo cambiesse ij \"sò gust\", che a peulo modifichesse soe liste dla ròba da tnì sot euj, e an general gnun a podrà pì fé dj'operassion che a ciamo dë modifiché la base dat.<br /><br />
+Për piasì, che an conferma che sossì a l'é pròpe lòn che a veul fé, e dzortut che a sblocherà la base dat pì ampressa che a peul, an manera che tut a funsion-a torna coma che as dev, pen-a che a l'avrà finisse soa manutension.",
+'unlockdbtext'        => "Ën dësblocand la base dat as darà andaré a tuti j'Utent la possibilità dë fé 'd modìfiche a le pàgine ò dë fene ëd neuve, ëd cangé ij \"sò gust\", ëd modifiché soe liste 'd ròba da tnì sot euj, e pì an general dë fé tute cole operassion che a l'han da manca dë fé 'd modìfiche a la base dat. 
+Për piasì, che an conferma che sòn a l'é da bon lòn che chiel (chila) a veul fé.",
+'lockconfirm'         => 'É, i veuj da bon, e sota mia responsabilità, bloché la base dat.',
+'unlockconfirm'       => ' É, da bon i veuj dësbloché la base dat, sota mia responsabilità personal.',
+'lockbtn'             => 'Blòca la base dat',
+'unlockbtn'           => 'Dësblòca la base dat',
+'locknoconfirm'       => "Che a varda che a l'é dësmentiasse dë spunté ël quadrèt ëd conferma.",
+'lockdbsuccesssub'    => 'Blocagi dla base dat fait',
+'unlockdbsuccesssub'  => "Dësblocagi dla base dat fait, ël blòch a l'é stait gavà",
+'lockdbsuccesstext'   => "La base dat ëd {{SITENAME}} a l'è staita blocà.
+<br />Che as visa mach dë gavé ël blocagi pen-a che a l'ha finì soa manutension.",
+'unlockdbsuccesstext' => " La base dat ëd {{SITENAME}} a l'è staita dësblocà.",
+
+# Move page
+'movepage'                => 'Tramudé na pàgina',
+'movepagetext'            => "Con ël mòdulo ëd domanda ambelessì sota a peul cangeje nòm a na pàgina, tramudand-je dapress ëdcò tuta soa cronologìa anvers al nòm neuv.
+Ël vej tìtol a resterà trasformà ant na ridiression che a men-a al tìtol neuv.
+J'anliure a la veja pàgina a saran NEN agiornà (e donca a men-eran la gent a la ridiression); che a fasa atension dë
+[[Special:Manutenzioni|controlé con cura]] che as creo pa dle ridiression dobie ò dle ridiression che men-o da gnun-a part.
+A resta soa responsabilità cola dë esse sigur che j'anliure a men-o la gent andoa che a devo mnela.
+
+Noté bin: la pàgina a sarà '''nen''' tramudà se a-i fussa già mai n'articol che a l'ha ël nòm neuv, gavà col cas che a sia na pàgina veujda ò pura na ridiression, sempre che bele che essend mach parej a l'abia già nen na soa cronologìa.
+Sòn a veul dì che, se a l'avèissa mai da fé n'operassion nen giusta, a podrìa sempe torné a rinominé la pàgina col nòm vej, ma ant gnun cas a podrìa coerté na pàgina che a-i é già.
+
+<b>ATENSION!</b>
+Un cambiament dràstich parej a podrìa dé dle gran-e che un a së speta pa gnanca. Sòn dzortut se a fussa fait dzora a na pàgina motobin visità. Che a varda mach dë esse pì che sigur d'avej presente le conseguense, prima che fé che fé. Se a l'ha dij dùbit, che a contata pura n'aministrator për ciameje 'd consej.",
+'movepagetalktext'        => "La pàgina ëd discussion tacà a costa pàgina d'articol, se a-i é, a sarà tramudà n'automatich ansema a l'artìcol, '''gavà costi cas-sì''':
+*quand as tramuda la pàgina tra diferent spassi nominal,
+*quand na pàgina ëd discussion nen veujda a-i é già për ël nòm neuv, ò pura
+*a l'ha deselessionà ël quadrèt ëd conferma ambelessì sota.
+Ant costi cas-sì, se a chërd dë felo, a-j farà da manca dë tramudesse la pàgina ëd discussion daspërchiel, a man.",
+'movearticle'             => "Cang-je nòm a l'artìcol",
+'movenologin'             => "Che a varda che chiel (chila) a l'è pa rintrà ant ël sistema",
+'movenologintext'         => "A venta esse n'Utent registrà e esse [[Special:Userlogin|rintrà ant ël sistema]]
+për podej tramudé na pàgina.",
+'newtitle'                => 'Neuv tìtol ëd',
+'movepagebtn'             => 'Tramuda sta pàgina-sì',
+'pagemovedsub'            => 'San Martin bele finì!',
+'pagemovedtext'           => 'La pàgina "[[$1]]" a l\'ha cangià nòm an "[[$2]]".',
+'articleexists'           => "Na pàgina che as ciama parej a-i é già, ò pura ël nòm che a l'ha sërnù a va nen bin.<br />
+Che as sërna, për piasì, un nòm diferent për st'articol.",
+'talkexists'              => "La pàgina a l'é staita bin tramudà, ma a l'é pa podusse tramudé soa pàgina ëd discussion, përchè a-i në j'é già n'àutra ant la pàgina con ël tìtol neuv. Për piasì, che a modìfica a man ij contnù dle doe pàgine ëd discussion, an manera che as perdo nen dij pensé anteressant.",
+'movedto'                 => 'tramudà a',
+'movetalk'                => "Podend, tramuda ëdcò la pàgina ëd discussion che a l'ha tacà.",
+'talkpagemoved'           => "Ëdcò la pàgina ëd discussion colegà a l'é staita tramudà",
+'talkpagenotmoved'        => "La pàgina ëd discussion colegà <strong>a l'é nen ëstaita tramudà</strong>.",
+'1movedto2'               => '[[$1]] Tramudà a [[$2]]',
+'1movedto2_redir'         => '[[$1]] tramudà a [[$2]] ën passand për na ridiression',
+'movelogpage'             => 'Registr dij San Martin',
+'movelogpagetext'         => 'Ambelessì sota a-i é na lista ëd pàgine che a son staite tramudà.',
+'movereason'              => 'Motiv',
+'revertmove'              => "buta torna coma a l'era",
+'delete_and_move'         => 'Scancela e tramuda',
+'delete_and_move_text'    => '==A fa da manca dë scancelé==
+
+L\'artìcol ëd destinassion "[[$1]]" a-i é già. Veul-lo scancelelo për avej ëd pòst për tramudé l\'àutr?',
+'delete_and_move_confirm' => 'É, scancela la pàgina',
+'delete_and_move_reason'  => "Scancelà për liberé ël pòst për tramudene n'àutra",
+'selfmove'                => "Tìtol neuv e tìtol vej a resto midem antra lor; as peul pa tramudesse na pàgina butand-la andoa che a l'é già.",
+'immobile_namespace'      => "Belavans ël tìtol ëd destinassion a l'é ëd na sòrt riservà; as peulo pa tramudé dle pàgine anvers a col ëspassi nominal-lì.",
+
+# Export
+'export'          => 'Esporté dle pàgine',
+'exporttext'      => "A peul esporté ël test e modifiché la stòria ëd na pàgina ò pura
+ëd n'ansema ëd pàgine gropa ant n'archivi XML. Sòn a peul peuj amportesse 
+ant n'àutra wiki ën dovrand la funsion Special:Import.
+
+Për esporté le pàgine, che a së scriva ij tìtoj ant ël quàder ambelessì sota, butand-ji un tìtol për riga,
+e che as serna se a veul la version corenta ansema a cole veje, con le righe che conto la stòria dla pàgina,
+ò pura mach l'anformassion ant sël quand che a sia staje l'ùltima modìfica.
+
+Se costa ùltima possibilità a fussa lòn che a-j serv, a podrìa ëdcò dovré n'anliura, pr'esempi [[Special:Export/{{Mediawiki:Mainpage}}]] për la pàgina {{Mediawiki:Mainpage}}.",
+'exportcuronly'   => 'Ciapa sù mach la version corenta, pa tuta la stòria',
+'exportnohistory' => "----
+'''Nòta:''' la possibilità d'esporté la stòria completa dle pàgine a l'é staita gavà për dle question corelà a le prestassion dël sistema.",
+'export-submit'   => 'Esporté',
+
+# Namespace 8 related
+'allmessages'               => 'Messagi ëd sistema',
+'allmessagesname'           => 'Nòm',
+'allmessagesdefault'        => "Test che a-i sarìa se a-i fusso pa 'd modìfiche",
+'allmessagescurrent'        => 'Test corent',
+'allmessagestext'           => "Costa-sì a l'é na lista ëd tùit ij messagi ëd sistema ant lë spassi nominal MediaWiki:",
+'allmessagesnotsupportedUI' => "Soa antërfacia an lenga <b>$1</b> a l'é nen ativa ansima a Special:Tùit_ij_messagi dzora ës sit-sì.",
+'allmessagesnotsupportedDB' => 'Special:Allmessages a travaja nen përchè a-i é ël component wgUseDatabaseMessages frëmm.',
+'allmessagesfilter'         => 'Seletor dël nòm dël messagi:',
+'allmessagesmodified'       => "Most-me mach lòn che a l'é modificasse",
+
+# Thumbnails
+'thumbnail-more'  => 'Slarga',
+'missingimage'    => '<b>Figura che a manca</b><br /><i>$1</i>',
+'filemissing'     => 'Archivi che a manca',
+'thumbnail_error' => 'Eror antramentr che as fasìa la figurin-a: $1',
+
+# Special:Import
+'import'                   => 'Amportassion ëd pàgine',
+'importinterwiki'          => 'Amportassion da wiki diferente',
+'import-interwiki-text'    => "Che a selession-a na wiki e ël tìtol dla pàgina da amporté.
+Date dle revision e stranòm dj'editor a resteran piajit sù 'cò lor.
+Tute le amportassion antra wiki diferente a resto marcà ant ël [[Special:Log/import|Registr dj'amportassion]].",
+'import-interwiki-history' => 'Còpia tute le version stòriche dë sta pàgina-sì',
+'import-interwiki-submit'  => 'Amporté',
+'importtext'               => "Për piasì, che as espòrta l'archivi da 'nt la sorgiss wiki esterna ën dovrand l'utiss  Special:Esportassion, che as lo salva ansima a sò disch e peui che a lo caria ambelessì.",
+'importstart'              => 'I soma antramentr che amportoma le pàgine...',
+'import-revision-count'    => '$1 revision',
+'importnopages'            => 'Pa gnun-a pàgina da amporté',
+'importfailed'             => 'Amportassion falìa: $1',
+'importunknownsource'      => "Sorgiss d'amportassion ëd na sòrt nen conossùa",
+'importcantopen'           => "L'archivi da amporté a l'é pa podusse deurbe",
+'importbadinterwiki'       => 'Anliura antra wiki diferente malfaita',
+'importnotext'             => 'Veujd ò sensa pa gnun test',
+'importsuccess'            => 'Amportassion andaita a bon fin!',
+'importhistoryconflict'    => "A-i son dle stòrie dë sta pàgina-sì che as contradisso un-a con l'àutra (a peul esse che sta pàgina-sì a l'avèissa già amportala)",
+'importnosources'          => "A l'é pa staita definìa gnun-a sorgiss d'amportassion da na wiki diferenta, e carié mach le stòrie as peul nen.",
+'importnofile'             => "Pa gnun archivi d'amportassion carià.",
+'importuploaderror'        => "L'archivi da amporté a l'é pa podusse carié; miraco a fussa mai pì gròss che ël màssim consentì?",
+
+# Import log
+'importlogpage'                    => "Registr dj'amportassion",
+'importlogpagetext'                => "Amportassion aministrative ëd pàgine e ëd soa stòria da dj'àutre wiki.",
+'import-logentry-upload'           => "amportà [[$1]] con un càrich d'archivi",
+'import-logentry-upload-detail'    => '$1 revision',
+'import-logentry-interwiki'        => "Amportà da n'àutra wiki $1",
+'import-logentry-interwiki-detail' => '$1 revision da $2',
+
+# Tooltip help for the actions
+'tooltip-pt-userpage'             => 'Mia pàgina Utent.',
+'tooltip-pt-anonuserpage'         => 'Pàgina Utent për l',
+'tooltip-pt-mytalk'               => 'Mia pàgina ëd discussion e ciaciarade.',
+'tooltip-pt-anontalk'             => 'Pàgina ëd ciaciarade për l',
+'tooltip-pt-preferences'          => 'Coma che i veuj mia {{SITENAME}}.',
+'tooltip-pt-watchlist'            => 'Lista dle pàgine che chiel as ten sot euj.',
+'tooltip-pt-mycontris'            => 'Sòn i l',
+'tooltip-pt-login'                => "Un a l'é nen obligà a rintré ant al sistema, ma se a lo fa a l",
+'tooltip-pt-anonlogin'            => "Un a l'é nen obligà a rintré ant al sistema, ma se a lo fa a l",
+'tooltip-pt-logout'               => 'Seurte da',
+'tooltip-ca-talk'                 => 'Discussion ansima a sta pàgina ëd contnù.',
+'tooltip-ca-edit'                 => 'Modifiché sta pàgina-sì. Për piasì, che as fasa na preuva anans che salvé .',
+'tooltip-ca-addsection'           => 'Gionteje un coment a sta discussion-sì.',
+'tooltip-ca-viewsource'           => 'Sta pàgina-sì a l',
+'tooltip-ca-history'              => 'Veje version dla pàgina.',
+'tooltip-ca-protect'              => 'Për protege sta pàgina-sì.',
+'tooltip-ca-delete'               => 'Scancelé sta pàgina-sì',
+'tooltip-ca-undelete'             => 'Pijé andré le modìfiche faite a sta pàgina-sì, anans che a fussa scancelà.',
+'tooltip-ca-move'                 => 'Tramudé sta pàgina, visadì cangeje tìtol.',
+'tooltip-ca-watch'                => 'Gionté sta pàgina-sì a la lista dle ròbe che as ten-o sot euj.',
+'tooltip-ca-unwatch'              => 'Gavé via sta pàgina da',
+'tooltip-search'                  => 'Sërché',
+'tooltip-p-logo'                  => 'Pàgina prinsipal.',
+'tooltip-n-mainpage'              => 'Visité la pàgina prinsipal.',
+'tooltip-n-portal'                => 'Rësguard al proget, lòn che a peul fé, andoa trové còsa.',
+'tooltip-n-currentevents'         => 'Informassion ansima a lòn che a-i riva.',
+'tooltip-n-recentchanges'         => 'Lista dj',
+'tooltip-n-randompage'            => 'Carié na pàgina basta che a sia.',
+'tooltip-n-help'                  => 'Ël pòst për capì.',
+'tooltip-n-sitesupport'           => 'Dene na man.',
+'tooltip-t-whatlinkshere'         => 'Lista ëd tute le pàgine dla wiki che a men-o ambelessì.',
+'tooltip-t-recentchangeslinked'   => 'Ùltime modìfiche dle pàgine andoa as peul andesse da costa.',
+'tooltip-feed-rss'                => 'RSS feed për sta pàgina-sì.',
+'tooltip-feed-atom'               => 'Atom feed për sta pàgina-sì.',
+'tooltip-t-contributions'         => 'Vardé la lista dle contribussion dë st',
+'tooltip-t-emailuser'             => 'Mandeje un messagi ëd pòsta a st',
+'tooltip-t-upload'                => 'Carié archivi ëd figure ò son.',
+'tooltip-t-specialpages'          => 'Lista ëd tute le pàgine speciaj.',
+'tooltip-ca-nstab-main'           => 'Vardé la pàgina ëd contnù.',
+'tooltip-ca-nstab-user'           => 'Vardé la pàgina Utent.',
+'tooltip-ca-nstab-media'          => 'Vardé la pàgina dl',
+'tooltip-ca-nstab-special'        => 'Costa a l',
+'tooltip-ca-nstab-project'        => 'Vardé la pàgina proteta.',
+'tooltip-ca-nstab-image'          => 'Vardé la pàgina dl',
+'tooltip-ca-nstab-mediawiki'      => 'Vardé ël messagi ëd sistema.',
+'tooltip-ca-nstab-template'       => 'Vardé lë stamp.',
+'tooltip-ca-nstab-help'           => 'Vardé la pàgina d',
+'tooltip-ca-nstab-category'       => 'Vardé la pàgina dla categorìa.',
+'tooltip-minoredit'               => 'Marca sossì coma modìfica cita',
+'tooltip-save'                    => 'Salva le modìfiche',
+'tooltip-preview'                 => 'Preuva dle modìfiche (mej sempe fela, prima che fé che salvé!)',
+'tooltip-diff'                    => "Fame vëdde che modìfiche che i l'hai faje al test.",
+'tooltip-compareselectedversions' => 'Fame ël paragon dle diferense antra le version selessionà.',
+'tooltip-watch'                   => 'Gionta sta pàgina-sì a la lista dle ròbe che im ten-o sot euj',
+'tooltip-recreate'                => 'Creé torna la pàgina contut che a la sia staita scancelà',
+
+# Stylesheets
+'common.css'   => '/** Ël còdes CSS che as buta ambelessì a resta dovrà ant tute le "facie" */',
+'monobook.css' => "/* cangé st'archivi-sì për modifiché la formatassion dël sit antregh */",
+
+# Metadata
+'nodublincore'      => "Ij metadat dla sòrt '''Dublin Core RDF''' a son disabilità ansima a sta màchina-sì.",
+'nocreativecommons' => "Ij metadat dla sòrt '''Creative Commons RDF''' a son disabilità ansima a sta màchina-sì.",
+'notacceptable'     => 'Ël server dla wiki a-i la fa pa a provëdde dij dat ant na forma che sò programa local a peula lese.',
+
+# Attribution
+'anonymous'        => 'Utent anònim ëd la {{SITENAME}}',
+'siteuser'         => '$1, utent ëd {{SITENAME}}',
+'lastmodifiedatby' => "Sta pàgina-sì a l'é staita modificà l'ùltima vira al $2, $1 da $3.", # $1 date, $2 time, $3 user
+'and'              => 'e',
+'othercontribs'    => 'Basà ant sëj travaj ëd $1.',
+'others'           => 'àutri',
+'siteusers'        => '$1, utent ëd {{SITENAME}}',
+'creditspage'      => 'Credit dla pàgina',
+'nocredits'        => 'A-i é pa gnun crédit për sta pagina-sì.',
+
+# Spam protection
+'spamprotectiontitle'    => 'Filtror dla rumenta',
+'spamprotectiontext'     => "La pàgina che a vorìa salvé a l'é staita blocà dal filtror dla rumenta. Sòn a l'é motobin belfé che a sia rivà përchè a-i era n'anliura a un sit estern ëd coj blocà.",
+'spamprotectionmatch'    => "Cost-sì a l'é ël test che a l'é restà ciapà andrinta al filtror dla rumenta: $1",
+'subcategorycount'       => 'An sta categorìa-sì a-i {{PLURAL:$1|é mach na sotacategorìa|son $1 sotacategorìe}}.',
+'categoryarticlecount'   => 'A-i {{PLURAL:$1|é|son}} $1 {{PLURAL:$1|artìcol|artìcoj}} andrinta a la categorìa.',
+'listingcontinuesabbrev' => ' anans',
+'spambot_username'       => 'MediaWiki - trigomiro che a-j dà deuit a la rumenta',
+'spam_reverting'         => "Buta andaré a l'ùltima version che a l'avèissa pa andrinta dj'anliure a $1",
+'spam_blanking'          => "Pàgina dësveujdà, che tute le version a l'avìo andrinta dj'anliure a $1",
+
+# Info page
+'infosubtitle'   => 'Anformassion për la pàgina',
+'numedits'       => 'Nùmer ëd modìfiche (artìcol): $1',
+'numtalkedits'   => 'Nùmer ëd modìfiche (pàgina ëd discussion): $1',
+'numwatchers'    => "Nùmer d'utent che as ten-o sossì sot euj: $1",
+'numauthors'     => "Nùmer d'autor diferent (artìcol): $1",
+'numtalkauthors' => "Nùmer d'autor distint (pàgina ëd discussion): $1",
+
+# Math options
+'mw_math_png'    => 'Most-lo sempe coma PNG',
+'mw_math_simple' => "But-lo an HTML se a l'é motobin belfé a fesse, dësnò but-lo an PNG",
+'mw_math_html'   => 'But-lo an HTML se as peul, dësnò an PNG',
+'mw_math_source' => 'Lass-lo coma TeX (për ij programa ëd navigassion testual)',
+'mw_math_modern' => 'As racomanda për ij programa ëd navigassion pì modern',
+'mw_math_mathml' => 'But-lo an MathML se as peul (sperimental)',
+
+# Patrolling
+'markaspatrolleddiff'        => 'Marca coma verificà',
+'markaspatrolledtext'        => "Marca st'artìcol-sì coma verificà",
+'markedaspatrolled'          => 'Marca dla verìfica butà',
+'markedaspatrolledtext'      => "La version selessionà a l'é staita marcà coma verificà.",
+'rcpatroldisabled'           => "Verìfica dj'ùltime modìfiche disabilità",
+'rcpatroldisabledtext'       => "La possibilità ëd verifichè j'ùltime modìfiche a l'é disabilità.",
+'markedaspatrollederror'     => 'As peul pa marchè verificà',
+'markedaspatrollederrortext' => 'A venta che a specìfica che version che a veul marchè verificà.',
+
+# Image deletion
+'deletedrevision' => 'Veja version scancelà $1.',
+
+# Browsing diffs
+'previousdiff' => '← Diferensa prima',
+'nextdiff'     => 'Diferensa che a-i ven →',
+
+# Media information
+'mediawarning' => "'''Atension!''': st'archivi-sì a podrìa avej andrinta dël còdes butà-lì da cheidun për fé ëd darmagi, e se parej a fussa, ën fasend-lo travajé ansima a sò calcolador chiel a podrìa porteje ëd dann a sò sistema. 
+<hr />",
+'imagemaxsize' => 'Ten le figure andrinta a le pàgine ëd descrission dle figure ant ël lìmit ëd:',
+'thumbsize'    => 'Amzura dle figurin-e:',
+
+'newimages'    => 'Galerìa ëd figure e son neuv',
+'showhidebots' => '($1 trigomiro)',
+'noimages'     => 'Pa gnente da vëdde.',
+
+'passwordtooshort' => "Soa ciav a l'é pa assé longa. A la dev avej almanch $1 caràter.",
+
+# Metadata
+'metadata'          => 'Dat adissionaj',
+'metadata-help'     => "Costi-sì a son dij dat adissionaj, che a l'é belfé che a sio stait giontà da la màchina fotogràfica digital ò pura da lë scanner che a l'é stiat dovrà për creé la figura digital. Se la figura a fussa mai staita modificà da 'nt soa forma original, a podrìa ëdcò riveje che chèich detaj a fussa ancò butà coma ant l'original, donca sensa pa ten-e cont ëd le modìfiche.",
+'metadata-expand'   => 'Most-me tùit ij dat',
+'metadata-collapse' => 'Stërma ij dat adissionaj',
+
+# EXIF tags
+'exif-imagewidth'                  => 'Larghëssa',
+'exif-imagelength'                 => 'Autëssa',
+'exif-bitspersample'               => 'Bit për campion',
+'exif-compression'                 => 'Schema ëd compression',
+'exif-photometricinterpretation'   => 'Composission dij pixel',
+'exif-orientation'                 => 'Orientament',
+'exif-samplesperpixel'             => 'Nùmer ëd component',
+'exif-planarconfiguration'         => 'Sistemassion dij dat',
+'exif-ycbcrsubsampling'            => 'Rapòrt ëd campionament antra Y e C',
+'exif-ycbcrpositioning'            => 'Posissionament Y e C',
+'exif-xresolution'                 => 'Risolussion orizontal',
+'exif-yresolution'                 => 'Risolussion vertical',
+'exif-resolutionunit'              => "Unità d'amzura për le coordinà X e Y",
+'exif-stripoffsets'                => 'Posission dij dat dla figura',
+'exif-rowsperstrip'                => 'Nùmer ëd righe për banda',
+'exif-stripbytecounts'             => 'Bytes për banda compressa',
+'exif-jpeginterchangeformat'       => 'Diferensa posissional anvers al SOI dël JPEG',
+'exif-jpeginterchangeformatlength' => 'Byte ëd dat an formà JPEG',
+'exif-transferfunction'            => 'Funsion ëd trasferiment',
+'exif-whitepoint'                  => 'Pont cromàtich dël bianch',
+'exif-primarychromaticities'       => 'Coordinà cromàtiche dij color primari',
+'exif-ycbcrcoefficients'           => 'Coeficent dla matriss ëd trasformassion dlë spassi color',
+'exif-referenceblackwhite'         => "Pàira ëd valor d'arferiment për bianch e nèir",
+'exif-datetime'                    => 'Data e ora dle modìfiche',
+'exif-imagedescription'            => 'Tìtol dla figura',
+'exif-make'                        => 'Fabricant dla màchina fotogràfica ò videocàmera',
+'exif-model'                       => 'Model dla màchina',
+'exif-software'                    => 'Programa dovrà',
+'exif-artist'                      => 'Autor',
+'exif-copyright'                   => "Titolar dël drit d'autor",
+'exif-exifversion'                 => 'Version dël formà Exif',
+'exif-flashpixversion'             => 'A riva a la version Flashpix',
+'exif-colorspace'                  => 'Spassi color',
+'exif-componentsconfiguration'     => 'Sust ëd vira component',
+'exif-compressedbitsperpixel'      => 'Sistema ëd compression dle figure',
+'exif-pixelydimension'             => 'Larghëssa vàlida dla figura',
+'exif-pixelxdimension'             => 'Autëssa vàlida dla figura',
+'exif-makernote'                   => 'Nòte dël fabricant',
+'exif-usercomment'                 => 'Nòte lìbere',
+'exif-relatedsoundfile'            => 'Archivi audio colegà',
+'exif-datetimeoriginal'            => 'Data e ora dla generassion dij dat',
+'exif-datetimedigitized'           => 'Data e ora dla digitalisassion',
+'exif-subsectime'                  => 'Data, ora e frassion ëd second',
+'exif-subsectimeoriginal'          => 'Data e ora ëd creassion, con frassion ëd second',
+'exif-subsectimedigitized'         => 'Data e ora ëd digitalisassion, con frassion ëd second',
+'exif-exposuretime'                => "Temp d'esposission",
+'exif-exposuretime-format'         => '$1 sec ($2)',
+'exif-fnumber'                     => "Nùmer d'F",
+'exif-fnumber-format'              => 'f/$1',
+'exif-exposureprogram'             => "Programa d'esposission",
+'exif-spectralsensitivity'         => 'Sensibilità dë spetro',
+'exif-isospeedratings'             => 'Sensibilità ISO',
+'exif-oecf'                        => 'Fator ëd conversion optoeletrònica',
+'exif-shutterspeedvalue'           => 'Temp dë scat',
+'exif-aperturevalue'               => 'Diaframa',
+'exif-brightnessvalue'             => 'Luminosità',
+'exif-exposurebiasvalue'           => "Coression dl'esposission",
+'exif-maxaperturevalue'            => 'Apertura màssima',
+'exif-subjectdistance'             => 'Distansa dël soget',
+'exif-meteringmode'                => "Càlcol dl'espossision",
+'exif-lightsource'                 => "Sorgiss d'anluminassion",
+'exif-flash'                       => 'Flash',
+'exif-focallength'                 => 'Lunghëssa focal dle lent',
+'exif-focallength-format'          => '$1 mm',
+'exif-subjectarea'                 => "Spassi d'anquadratura dël soget",
+'exif-flashenergy'                 => 'Potensa dël flash',
+'exif-spatialfrequencyresponse'    => 'Arspòsta an frequensa spassial',
+'exif-focalplanexresolution'       => 'Resolussion dla coordinà X ant sël pian dla focal',
+'exif-focalplaneyresolution'       => 'Resolussion dla coordinà Y ant sël pian dla focal',
+'exif-focalplaneresolutionunit'    => "Unità d'amzura për ël pian dla focal",
+'exif-subjectlocation'             => 'Posission dël soget',
+'exif-exposureindex'               => "Ìndes dl'esposission",
+'exif-sensingmethod'               => 'Metod ëd campionament',
+'exif-filesource'                  => "Sorgiss dl'archivi",
+'exif-scenetype'                   => "Sòrt d'anquadratura",
+'exif-cfapattern'                  => 'Schema CFA',
+'exif-customrendered'              => 'Process dla figura particolar',
+'exif-exposuremode'                => "Modalità dl'esposission",
+'exif-whitebalance'                => 'Balansa dël bianch',
+'exif-digitalzoomratio'            => 'Rapòrt ëd lë zoom digital',
+'exif-focallengthin35mmfilm'       => 'Lunghëssa focal an film da 35 mm',
+'exif-scenecapturetype'            => 'Sistema ëd campionament',
+'exif-gaincontrol'                 => 'Contròl ëd sienari',
+'exif-contrast'                    => 'Contrast',
+'exif-saturation'                  => 'Saturassion',
+'exif-sharpness'                   => 'Definission dij bòrd',
+'exif-devicesettingdescription'    => "Nòm dla configurassion dl'aparechiatura",
+'exif-subjectdistancerange'        => 'Ragg ëd distansa dël soget',
+'exif-imageuniqueid'               => 'Identificator ùnich dla figura',
+'exif-gpsversionid'                => 'Version dël GPS',
+'exif-gpslatituderef'              => 'Latitùdin setentrional ò meridional',
+'exif-gpslatitude'                 => 'Latitùdin',
+'exif-gpslongituderef'             => 'Longitùdin oriental ò ossidental',
+'exif-gpslongitude'                => 'Longitùdin',
+'exif-gpsaltituderef'              => "Arferiment d'autëssa",
+'exif-gpsaltitude'                 => 'Autëssa',
+'exif-gpstimestamp'                => 'Ora dël GPS (mostra atòmica)',
+'exif-gpssatellites'               => "Satélit dovrà për l'amzura",
+'exif-gpsstatus'                   => 'Condission dël ricevitor',
+'exif-gpsmeasuremode'              => "Sistema d'amzura",
+'exif-gpsdop'                      => "Precision dl'amzura",
+'exif-gpsspeedref'                 => "Unità d'amzura për la velocità",
+'exif-gpsspeed'                    => 'Velocità dël ricevitor GPS',
+'exif-gpstrackref'                 => 'Arferiment për la diression dël moviment',
+'exif-gpstrack'                    => 'Diression dël moviment',
+'exif-gpsimgdirectionref'          => 'Arferiment për la diression dla figura',
+'exif-gpsimgdirection'             => 'Diression dla figura',
+'exif-gpsmapdatum'                 => "Dat dl'amzura geodética che a son dovrà",
+'exif-gpsdestlatituderef'          => 'Arferiment për la latitùdin dla destinassion',
+'exif-gpsdestlatitude'             => 'Latitùdin dla destinassion',
+'exif-gpsdestlongituderef'         => 'Arferiment për la longitùdin dla destinassion',
+'exif-gpsdestlongitude'            => 'Longitùdin dla destinassion',
+'exif-gpsdestbearingref'           => "Arferiment për l'orientament a destinassion",
+'exif-gpsdestbearing'              => 'Orientament anvers a la destinassion',
+'exif-gpsdestdistanceref'          => "Arferiment për la lontanansa da 'nt la destinassion",
+'exif-gpsdestdistance'             => "Lontanansa da 'nt la destinassion",
+'exif-gpsprocessingmethod'         => 'Nòm dël sistema ëd process an GPS',
+'exif-gpsareainformation'          => 'Nòm dlë spassi GPS',
+'exif-gpsdatestamp'                => 'Data dël GPS',
+'exif-gpsdifferential'             => 'Coression diferensial dël GPS',
+
+# EXIF attributes
+'exif-compression-1' => 'Pa compress',
+'exif-compression-6' => 'JPEG',
+
+'exif-photometricinterpretation-2' => 'RGB',
+'exif-photometricinterpretation-6' => 'YCbCr',
+
+'exif-orientation-1' => 'Normal', # 0th row: top; 0th column: left
+'exif-orientation-2' => 'Specolar', # 0th row: top; 0th column: right
+'exif-orientation-3' => 'Arvirà ëd 180°', # 0th row: bottom; 0th column: right
+'exif-orientation-4' => 'Arvirà dzorsuta', # 0th row: bottom; 0th column: left
+'exif-orientation-5' => 'Arvirà dzorsota e ëd 90° contramostra', # 0th row: left; 0th column: top
+'exif-orientation-6' => 'Arvirà ëd 90° ant ël sens dla mostra', # 0th row: right; 0th column: top
+'exif-orientation-7' => 'Arvirà dzorsota e ëd 90° ant ël sens dla mostra', # 0th row: right; 0th column: bottom
+'exif-orientation-8' => 'Arvirà ëd 90° contramostra', # 0th row: left; 0th column: bottom
+
+'exif-planarconfiguration-1' => 'për blòch (chunky)',
+'exif-planarconfiguration-2' => 'an planar',
+
+'exif-xyresolution-i' => '$1 pont për pòles (dpi)',
+'exif-xyresolution-c' => '$1 pont për centim (dpc)',
+
+'exif-colorspace-1'      => 'sRGB',
+'exif-colorspace-ffff.h' => 'Nen calibrà',
+
+'exif-componentsconfiguration-0' => 'a esist pa',
+'exif-componentsconfiguration-1' => 'Y',
+'exif-componentsconfiguration-2' => 'Cb',
+'exif-componentsconfiguration-3' => 'Cr',
+'exif-componentsconfiguration-4' => 'R',
+'exif-componentsconfiguration-5' => 'G',
+'exif-componentsconfiguration-6' => 'B',
+
+'exif-exposureprogram-0' => 'Nen definì',
+'exif-exposureprogram-1' => 'Manual',
+'exif-exposureprogram-2' => 'Programa normal',
+'exif-exposureprogram-3' => 'Priorità ëd temp',
+'exif-exposureprogram-4' => 'Priorità ëd diaframa',
+'exif-exposureprogram-5' => "Programa creativ (coregiù për avej pì ëd profondità 'd camp)",
+'exif-exposureprogram-6' => "Programa d'assion (coregiù për avej ël temp pì curt che as peul)",
+'exif-exposureprogram-7' => 'Programa ritrat (për fotografìe pijaite da davsin, con lë sfond fòra feu)',
+'exif-exposureprogram-8' => 'Panorama (sogèt lontan e con lë sfond a feu)',
+
+'exif-subjectdistance-value' => '$1 méter',
+
+'exif-meteringmode-0'   => 'as sa nen coma',
+'exif-meteringmode-1'   => 'Media',
+'exif-meteringmode-2'   => 'Media centrà',
+'exif-meteringmode-3'   => 'Quadrèt (Spot)',
+'exif-meteringmode-4'   => 'Vàire quadrèt (MultiSpot)',
+'exif-meteringmode-5'   => 'Schema (Pattern)',
+'exif-meteringmode-6'   => 'Parsial',
+'exif-meteringmode-255' => "n'àutr",
+
+'exif-lightsource-0'   => 'Nen marcà',
+'exif-lightsource-1'   => 'Lus dël dì',
+'exif-lightsource-2'   => 'Fluoressenta',
+'exif-lightsource-3'   => 'Lus al tungsten (a incandessensa)',
+'exif-lightsource-4'   => 'Flash',
+'exif-lightsource-9'   => 'Temp bel',
+'exif-lightsource-10'  => 'Temp an-nivolà',
+'exif-lightsource-11'  => 'Ombra',
+'exif-lightsource-12'  => 'Fluoressensa tipo lus dël dì (D 5700 – 7100K)',
+'exif-lightsource-13'  => 'Fluoressensa bianca për ël dì (N 4600 – 5400K)',
+'exif-lightsource-14'  => 'Fluoressensa bianca frèida (W 3900 – 4500K)',
+'exif-lightsource-15'  => 'Fluoressensa bianca (WW 3200 – 3700K)',
+'exif-lightsource-17'  => 'Lus stàndard sòrt A',
+'exif-lightsource-18'  => 'Lus stàndard sòrt B',
+'exif-lightsource-19'  => 'Lus stàndard sòrt C',
+'exif-lightsource-20'  => 'Anluminant D55',
+'exif-lightsource-21'  => 'Anluminant D65',
+'exif-lightsource-22'  => 'Anluminant D75',
+'exif-lightsource-23'  => 'Anluminant D50',
+'exif-lightsource-24'  => 'Làmpada da studio ISO al tungsten',
+'exif-lightsource-255' => "Aùtra sorgiss d'anluminassion",
+
+'exif-focalplaneresolutionunit-2' => 'pòles anglèis (inches)',
+
+'exif-sensingmethod-1' => 'Nen definì',
+'exif-sensingmethod-2' => 'Sensor dlë spassi color a 1 processor',
+'exif-sensingmethod-3' => 'Sensor dlë spassi color a 2 processor',
+'exif-sensingmethod-4' => 'Sensor dlë spassi color a 3 processor',
+'exif-sensingmethod-5' => 'Sensor sequensial dlë spassi color',
+'exif-sensingmethod-7' => 'Sensor trilinear',
+'exif-sensingmethod-8' => 'Sensor linear ëd color sequensiaj',
+
+'exif-filesource-3' => 'DSC',
+
+'exif-scenetype-1' => 'Fotografìa an diret',
+
+'exif-customrendered-0' => 'Process normal',
+'exif-customrendered-1' => 'Process particular',
+
+'exif-exposuremode-0' => 'Esposission automàtica',
+'exif-exposuremode-1' => 'Esposission manual',
+'exif-exposuremode-2' => 'Esposission automàtica (auto bracket)',
+
+'exif-whitebalance-0' => "Balansa dël bianch n'automàtich",
+'exif-whitebalance-1' => 'Balansa dël bianch an manual',
+
+'exif-scenecapturetype-0' => 'Stàndard',
+'exif-scenecapturetype-1' => 'Paisagi',
+'exif-scenecapturetype-2' => 'Ritrat',
+'exif-scenecapturetype-3' => 'La neuit',
+
+'exif-gaincontrol-0' => 'Gnun',
+'exif-gaincontrol-1' => 'Sparé ij contrast bass',
+'exif-gaincontrol-2' => 'Sparé ij contrast fòrt',
+'exif-gaincontrol-3' => 'Bassé ij contrast bass',
+'exif-gaincontrol-4' => 'Bassé ij contrast fòrt',
+
+'exif-contrast-0' => 'Normal',
+'exif-contrast-1' => 'dosman',
+'exif-contrast-2' => 'contrastà fòrt',
+
+'exif-saturation-0' => 'Normal',
+'exif-saturation-1' => 'Saturassion bassa',
+'exif-saturation-2' => 'Saturassion àuta',
+
+'exif-sharpness-0' => 'Normal',
+'exif-sharpness-1' => 'dossa',
+'exif-sharpness-2' => 'contrastà',
+
+'exif-subjectdistancerange-0' => 'Nen specificà',
+'exif-subjectdistancerange-1' => 'Macro',
+'exif-subjectdistancerange-2' => 'Prim pian',
+'exif-subjectdistancerange-3' => 'Anquadratura a soget lontan',
+
+# Pseudotags used for GPSLatitudeRef and GPSDestLatitudeRef
+'exif-gpslatitude-n' => 'Latitùdin setentrional',
+'exif-gpslatitude-s' => 'Latitùdin meridional',
+
+# Pseudotags used for GPSLongitudeRef and GPSDestLongitudeRef
+'exif-gpslongitude-e' => 'Longitùdin oriental',
+'exif-gpslongitude-w' => 'Longitùdin ossidental',
+
+'exif-gpsstatus-a' => 'Amzura antramentr che as fa',
+'exif-gpsstatus-v' => "Interoperabilità dl'amzura",
+
+'exif-gpsmeasuremode-2' => 'amzura bidimensional',
+'exif-gpsmeasuremode-3' => 'amzura tridimensional',
+
+# Pseudotags used for GPSSpeedRef and GPSDestDistanceRef
+'exif-gpsspeed-k' => 'Km/h',
+'exif-gpsspeed-m' => 'mija/h',
+'exif-gpsspeed-n' => 'Grop (marin)',
+
+# Pseudotags used for GPSTrackRef, GPSImgDirectionRef and GPSDestBearingRef
+'exif-gpsdirection-t' => 'Diression vèira',
+'exif-gpsdirection-m' => 'Diression magnética',
+
+# External editor support
+'edit-externally'      => "Modifiché st'archivi con un programa estern",
+'edit-externally-help' => "Che a varda [http://meta.wikimedia.org/wiki/Help:External_editors setup instructions] për avej pì d'anformassion.",
+
+# 'all' in various places, this might be different for inflected languages
+'recentchangesall' => 'tute',
+'imagelistall'     => 'tùit/tute',
+'watchlistall1'    => 'tute',
+'watchlistall2'    => 'tute',
+'namespacesall'    => 'tùit',
+
+# E-mail address confirmation
+'confirmemail'            => "Confermé l'adrëssa postal",
+'confirmemail_text'       => "Costa wiki a ciama che chiel a convalida n'adrëssa postal anans che
+dovré lòn che toca la pòsta. Che a sgnaca ël boton ambelessì sota 
+për fesse mandé un messa ëd conferma a soa adrëssa eletrònica.
+Andrinta al messagi a-i sara n'anliura (URL) con andrinta un còdes.
+Che a deurba st'anliura andrinta a sò programa ëd navigassion (browser)
+për confermé che soa adrëssa a l'é pròpe cola.",
+'confirmemail_send'       => 'Manda un còdes ëd conferma për pòsta eletrònica',
+'confirmemail_sent'       => "Ël messagi ëd conferma a l'é stait mandà.",
+'confirmemail_sendfailed' => "A l'é pa podusse mandé ël còdes ëd conferma. Che a controla l'adrëssa che a l'ha dane, mai che a-i fusso dij caràter nen vàlid.",
+'confirmemail_invalid'    => 'Còdes ëd conferma nen vàlid. A podrìa ëdcò mach esse scadù.',
+'confirmemail_needlogin'  => 'A venta che a fasa $1 për confermé soa addrëssa postal eletrònica.',
+'confirmemail_success'    => "Soa adrëssa postal a l'é staita confermà, adess a peul rintré ant ël sistema e i-j auguroma da fessla bin ant la wiki!",
+'confirmemail_loggedin'   => "Motobin mersì. Soa adrëssa ëd pòsta eletrònica adess a l'é confermà.",
+'confirmemail_error'      => "Cheich-còs a l'é andà mal ën salvand soa conferma.",
+'confirmemail_subject'    => "Conferma dl'adrëssa postal da 'nt la {{SITENAME}}",
+'confirmemail_body'       => "Cheidun, a l'é belfé che a sia stait pròpe chiel (ò chila)
+da 'nt l'adrëssa IP \$1, a l'ha doertà un cont utent \"\$2\" 
+ansima a {{SITENAME}}, lassand-ne st'adrëssa ëd pòsta eletrònica-sì.
+
+Për confermé che ës cont a l'é da bon sò e për ativé le possibilità
+corelà a la pòsta eletrònica ansima a {{SITENAME}}, che a deurba 
+st'adrëssa-sì andrinta a sò programa ëd navigassion (browser)
+
+\$3
+
+Se a fussa *nen* stait chiel a deurbe ël cont, anlora che a fasa gnente.
+Cost còdes ëd conferma a l'é bon fin-a al \$4.",
+
+# Inputbox extension, may be useful in other contexts as well
+'tryexact'       => 'Sërca che a sia pròpe parej',
+'searchfulltext' => 'Sërca an tut ël test',
+'createarticle'  => "Crea n'artìcol",
+
+# Scary transclusion
+'scarytranscludedisabled' => "[L'inclusion ëd pàgine antra wiki diferente a l'é nen abilità]",
+'scarytranscludefailed'   => "[Darmagi, ma lë stamp $1 a l'é pa podusse carié]",
+'scarytranscludetoolong'  => '[Eror: anliura tròp longa]',
+
+# Trackbacks
+'trackbackbox'      => '<div id="mw_trackbacks">
+Anformassion për feje ël traciament a sta vos-sì:<br />
+$1
+</div>',
+'trackbackremove'   => ' ([$1 Gava via])',
+'trackbacklink'     => 'Traciament',
+'trackbackdeleteok' => "J'anformassion për fé traciament a son staite gavà via.",
+
+# Delete conflict
+'deletedwhileediting' => "Avertensa: sta pàgina-sì a l'é staita scancelà quand che chiel (chila) a l'avìa già anandiasse a modifichela!",
+'confirmrecreate'     => "L'utent [[User:$1|$1]] ([[User talk:$1|talk]]) a l'ha scancelà st'articol-sì quand che chiel (chila) a l'avia già anandiasse a modifichelo, dand coma motiv ëd la scancelament:
+''$2''
+Për piasì, che an conferma che da bon a veul torna creélo.",
+'recreate'            => "Créa n'àutra vira",
+
+'unit-pixel' => 'px',
+
+# HTML dump
+'redirectingto' => 'I soma antramentr che i foma na ridiression a [[$1]]...',
+
+# action=purge
+'confirm_purge'        => 'Veujdé la memorisassion dë sta pàgina-sì?
+
+$1',
+'confirm_purge_button' => 'Va bin',
+
+'youhavenewmessagesmulti' => "A l'ha dij neuv messagi an $1",
+
+'searchcontaining' => "Sërca le vos che a l'han andrinta ''$1''.",
+'searchnamed'      => "Sërca le vos che a l'han për tìtol ''$1''.",
+'articletitles'    => "Artìcoj che as anandio për ''$1''",
+'hideresults'      => "Stërma j'arsultà",
+
+# DISPLAYTITLE
+'displaytitle' => "(J'anliure a sta pàgina-sì a van faite coma [[$1]])",
+
+'loginlanguagelabel' => 'Lenga: $1',
+
+# Auto-summaries
+'autoredircomment' => 'Ridiression anvers a [[$1]]', # This should be changed to the new naming convention, but existed beforehand
+
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesPs.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesPs.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesPs.php	(revision 1280)
@@ -0,0 +1,16 @@
+<?php
+/**
+  * @addtogroup Language
+  */
+
+# Stub for Pashto
+
+$rtl = true;
+$defaultUserOptionOverrides = array(
+	# Swap sidebar to right side by default
+	'quickbar' => 2,
+	# Underlines seriously harm legibility. Force off:
+	'underline' => 0,
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesPt.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesPt.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesPt.php	(revision 1280)
@@ -0,0 +1,2035 @@
+<?php
+/** Portuguese (Português)
+ * This translation was made by:
+ *  - Yves Marques Junqueira
+ *  - Rodrigo Calanca Nishino
+ *  - Nuno Tavares
+ *  - Paulo Juntas
+ *  - Manuel Menezes de Sequeira
+ *  - Sérgio Ribeiro
+ * from the Portuguese Wikipedia
+ *
+ * @addtogroup Language
+ */
+
+$namespaceNames = array(
+	NS_MEDIA            => 'Media', # -2
+	NS_SPECIAL          => 'Especial', # -1
+	NS_MAIN             => '', # 0
+	NS_TALK             => 'Discussão', # 1
+	NS_USER             => 'Usuário',
+	NS_USER_TALK        => 'Usuário_Discussão',
+/*
+	Above entries are for PT_br. The following entries should
+    be used instead. But:
+
+     DO NOT USE THOSE ENTRIES WITHOUT MIGRATING STUFF ON
+     WIKIMEDIA WEB SERVERS FIRST !! You will just break a lot
+     of links 8-)
+
+	NS_USER             => 'Utilizador', # 2
+	NS_USER_TALK        => 'Utilizador_Discussão', # 3
+*/
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK     => '$1_Discussão', # 5
+	NS_IMAGE            => 'Imagem', # 6
+	NS_IMAGE_TALK       => 'Imagem_Discussão', # 7
+	NS_MEDIAWIKI        => 'MediaWiki', # 8
+	NS_MEDIAWIKI_TALK   => 'MediaWiki_Discussão', # 9
+	NS_TEMPLATE         => 'Predefinição', # 10
+	NS_TEMPLATE_TALK    => 'Predefinição_Discussão', # 11
+	NS_HELP             => 'Ajuda', # 12
+	NS_HELP_TALK        => 'Ajuda_Discussão', # 13
+	NS_CATEGORY         => 'Categoria', # 14
+	NS_CATEGORY_TALK    => 'Categoria_Discussão' # 15
+);
+
+$skinNames = array(
+	'standard' => 'Clássico',
+	'nostalgia' => 'Nostalgia',
+	'cologneblue' => 'Azul colonial',
+	'davinci' => 'DaVinci',
+	'mono' => 'Mono',
+	'monobook' => 'MonoBook',
+	'myskin' => 'MySkin',
+	'chick' => 'Chick'
+);
+
+# Note to translators:
+#   Please include the English words as synonyms.  This allows people
+#   from other wikis to contribute more easily.
+#
+$magicWords = array(
+#   ID                                 CASE  SYNONYMS
+	'redirect'               => array( 0,    '#REDIRECT', '#redir'    ),
+	'notoc'                  => array( 0,    '__NOTOC__'              ),
+	'forcetoc'               => array( 0,    '__FORCETOC__'           ),
+	'toc'                    => array( 0,    '__TOC__'                ),
+	'noeditsection'          => array( 0,    '__NOEDITSECTION__'      ),
+	'start'                  => array( 0,    '__START__'              ),
+	'currentmonth'           => array( 1,    'CURRENTMONTH'           ),
+	'currentmonthname'       => array( 1,    'CURRENTMONTHNAME'       ),
+	'currentmonthnamegen'    => array( 1,    'CURRENTMONTHNAMEGEN'    ),
+	'currentmonthabbrev'     => array( 1,    'CURRENTMONTHABBREV'     ),
+	'currentday'             => array( 1,    'CURRENTDAY'             ),
+	'currentdayname'         => array( 1,    'CURRENTDAYNAME'         ),
+	'currentyear'            => array( 1,    'CURRENTYEAR'            ),
+	'currenttime'            => array( 1,    'CURRENTTIME'            ),
+	'numberofarticles'       => array( 1,    'NUMBEROFARTICLES'       ),
+	'numberoffiles'          => array( 1,    'NUMBEROFFILES'          ),
+	'pagename'               => array( 1,    'PAGENAME'               ),
+	'pagenamee'              => array( 1,    'PAGENAMEE'              ),
+	'namespace'              => array( 1,    'NAMESPACE'              ),
+	'msg'                    => array( 0,    'MSG:'                   ),
+	'subst'                  => array( 0,    'SUBST:'                 ),
+	'msgnw'                  => array( 0,    'MSGNW:'                 ),
+	'img_thumbnail'          => array( 1,    'thumbnail', 'thumb'     ),
+	'img_manualthumb'        => array( 1,    'thumbnail=$1', 'thumb=$1'),
+	'img_right'              => array( 1,    'right', 'direita'       ),
+	'img_left'               => array( 1,    'left', 'esquerda'       ),
+	'img_none'               => array( 1,    'none', 'nenhum'         ),
+	'img_width'              => array( 1,    '$1px'                   ),
+	'img_center'             => array( 1,    'center', 'centre'       ),
+	'img_framed'             => array( 1,    'framed', 'enframed', 'frame' ),
+	'img_page'               => array( 1,    'page=$1', 'page $1'     ),
+	'int'                    => array( 0,    'INT:'                   ),
+	'sitename'               => array( 1,    'SITENAME'               ),
+	'ns'                     => array( 0,    'NS:'                    ),
+	'localurl'               => array( 0,    'LOCALURL:'              ),
+	'localurle'              => array( 0,    'LOCALURLE:'             ),
+	'server'                 => array( 0,    'SERVER'                 ),
+	'servername'             => array( 0,    'SERVERNAME'             ),
+	'scriptpath'             => array( 0,    'SCRIPTPATH'             ),
+	'grammar'                => array( 0,    'GRAMMAR:'               ),
+	'notitleconvert'         => array( 0,    '__NOTITLECONVERT__', '__NOTC__'),
+	'nocontentconvert'       => array( 0,    '__NOCONTENTCONVERT__', '__NOCC__'),
+	'currentweek'            => array( 1,    'CURRENTWEEK'            ),
+	'currentdow'             => array( 1,    'CURRENTDOW'             ),
+	'revisionid'             => array( 1,    'REVISIONID'             ),
+);
+
+$separatorTransformTable = array(',' => ' ', '.' => ',' );
+#$linkTrail = '/^([a-z]+)(.*)$/sD';# ignore list
+
+
+
+$messages = array(
+
+# User preference toggles
+'tog-underline' => 'Sublinhar hiperligações',
+'tog-highlightbroken' => 'Formatar links quebrados <a href="" class="new">como isto</a> (alternativa: como isto<a href="" class="internal">?</a>).',
+'tog-justify'   => 'Justificar parágrafos',
+'tog-hideminor' => 'Esconder edições secundárias nas mudanças recentes',
+'tog-extendwatchlist' => 'Expandir a lista de artigos vigiados para mostrar todas as alterações aplicáveis',
+'tog-usenewrc' => 'Mudanças recentes melhoradas (JavaScript)',
+'tog-numberheadings' => 'Auto-numerar cabeçalhos',
+'tog-showtoolbar'               => 'Mostrar barra de edição (JavaScript)',
+'tog-editondblclick' => 'Editar páginas quando houver clique duplo (JavaScript)',
+'tog-editsection'               => 'Habilitar edição de secção via links [editar]',
+'tog-editsectiononrightclick'   => 'Habilitar edição de secção por clique <br /> com o botão direito no título da secção (JavaScript)',
+'tog-showtoc'                   => 'Mostrar Tabela de Conteúdos (para artigos com mais de 3 cabeçalhos)',
+'tog-rememberpassword' => 'Lembrar palavra-chave entre sessões',
+'tog-editwidth' => 'Caixa de edição com largura completa',
+'tog-watchcreations' => 'Adicionar páginas criadas por mim à minha lista de artigos vigiados',
+'tog-watchdefault' => 'Adicionar páginas editadas por mim à minha lista de artigos vigiados',
+'tog-minordefault' => 'Marcar todas as edições como secundárias, por padrão',
+'tog-previewontop' => 'Mostrar previsão antes da caixa de edição ao invés de ser após',
+'tog-previewonfirst' => 'Mostrar previsão na primeira edição',
+'tog-nocache' => 'Desactivar caching de páginas',
+'tog-enotifwatchlistpages'      => 'Enviar-me um email quando houver mudanças nas páginas',
+'tog-enotifusertalkpages'       => 'Enviar-me um email quando a minha página de discussão for editada',
+'tog-enotifminoredits'          => 'Enviar-me um email também quando forem edições menores',
+'tog-enotifrevealaddr'          => 'Revelar o meu endereço de email nas notificações',
+'tog-shownumberswatching'       => 'mostrar o número de utilizadores a vigiar',
+'tog-fancysig' => 'Assinaturas sem atalhos automáticos.',
+'tog-externaleditor' => 'Utilizar editor externo por padrão',
+'tog-externaldiff' => 'Utilizar diferenças externas por padrão',
+'tog-showjumplinks' => 'Activar hiperligações de acessibilidade "ir para"',
+'tog-uselivepreview' => 'Utilizar pré-visualização em tempo real (JavaScript) (Experimental)',
+'tog-autopatrol' => 'Marcar as minhas edições como verificadas',
+'tog-forceeditsummary' => 'Avisar-me ao introduzir um sumário vazio',
+'tog-watchlisthideown' => 'Esconder as minhas edições da lista de artigos vigiados',
+'tog-watchlisthidebots' => 'Esconder edições efectuadas por robôs da lista de artigos vigiados',
+
+'underline-always' => 'Sempre',
+'underline-never' => 'Nunca',
+'underline-default' => 'Padrão',
+
+'skinpreview' => '(Pré-visualizar)',
+
+# dates
+'sunday' => 'Domingo',
+'monday' => 'Segunda-feira',
+'tuesday' => 'Terça-feira',
+'wednesday' => 'Quarta-feira',
+'thursday' => 'Quinta-feira',
+'friday' => 'Sexta-feira',
+'saturday' => 'Sábado',
+'sun' => 'Dom',
+'mon' => 'Seg',
+'tue' => 'Ter',
+'wed' => 'Qua',
+'thu' => 'Qui',
+'fri' => 'Sex',
+'sat' => 'Sáb',
+'january' => 'Janeiro',
+'february' => 'Fevereiro',
+'march' => 'Março',
+'april' => 'Abril',
+'may_long' => 'Maio',
+'june' => 'Junho',
+'july' => 'Julho',
+'august' => 'Agosto',
+'september' => 'Setembro',
+'october' => 'Outubro',
+'november' => 'Novembro',
+'december' => 'Dezembro',
+'january-gen' => 'Janeiro',
+'february-gen' => 'Fevereiro',
+'march-gen' => 'Março',
+'april-gen' => 'Abril',
+'may-gen' => 'Maio',
+'june-gen' => 'Junho',
+'july-gen' => 'Julho',
+'august-gen' => 'Agosto',
+'september-gen' => 'Setembro',
+'october-gen' => 'Outubro',
+'november-gen' => 'Novembro',
+'december-gen' => 'Dezembro',
+'jan' => 'Jan',
+'feb' => 'Fev',
+'mar' => 'Mar',
+'apr' => 'Abr',
+'may' => 'Mai',
+'jun' => 'Jun',
+'jul' => 'Jul',
+'aug' => 'Ago',
+'sep' => 'Set',
+'oct' => 'Out',
+'nov' => 'Nov',
+'dec' => 'Dez',
+
+# Bits of text used by many pages:
+#
+'categories' => 'Categorias',
+'pagecategories' => '{{PLURAL:$1|Categoria|Categorias}}',
+'category_header' => 'Artigos na categoria "$1"',
+'subcategories' => 'Subcategorias',
+
+
+#'linkprefix'            => '/^(.*?)([a-zA-Z\x80-\xff]+)$/sD', # ignore list
+'mainpage'              => 'Página principal',
+'mainpagetext'    => "<big>'''MediaWiki instalado com sucesso.'''</big>",
+'mainpagedocfooter' => "Consultar o [http://meta.wikimedia.org/wiki/Help:Contents Guia de Utilizadores] para informação acerca de como utilizador o software wiki.
+
+== Começando ==
+
+* [http://www.mediawiki.org/wiki/Help:Configuration_settings Lista de configuração de ajustes]
+* [http://www.mediawiki.org/wiki/Help:FAQ MediaWiki Perguntas e respostas frequentes]
+* [http://mail.wikipedia.org/mailman/listinfo/mediawiki-announce Lista de correio do anúncio de publicações do MediaWiki]",
+
+'portal'                => 'Portal comunitário',
+'portal-url'            => '{{ns:project}}:Portal comunitário',
+'about'                 => 'Sobre',
+'aboutsite'      => 'Sobre',
+'aboutpage'             => '{{ns:project}}:Sobre',
+'article' => 'Artigo',
+'help'                  => 'Ajuda',
+'helppage'              => 'Ajuda:Conteúdos',
+'bugreports'    => 'Bug reports',
+'bugreportspage' => '{{ns:project}}:Bug_reports',
+'sitesupport'   => 'Doações',
+'sitesupport-url' => '{{ns:project}}:Apoio',
+'faq'                   => 'FAQ',
+'faqpage'               => '{{ns:project}}:FAQ',
+'edithelp'              => 'Ajuda de edição',
+'newwindow'             => '(abre numa nova janela)',
+'edithelppage'  => 'Ajuda:Editar',
+'cancel'                => 'Cancelar',
+'qbfind'                => 'Procurar',
+'qbbrowse'              => 'Navegar',
+'qbedit'                => 'Editar',
+'qbpageoptions' => 'Esta página',
+'qbpageinfo'    => 'Informação da página',
+'qbmyoptions'   => 'Minhas opções',
+'qbspecialpages'        => 'Páginas especiais',
+'moredotdotdot' => 'Mais...',
+'mypage'                => 'Minha página',
+'mytalk'                => 'Minha discussão',
+'anontalk'              => 'Discussão para este IP',
+'navigation' => 'Navegação',
+
+# Metadata in edit box
+'metadata_help' => 'Metadata (para uma explicação ver [[{{ns:project}}:Metadata]]):',
+
+'currentevents' => 'Eventos actuais',
+'currentevents-url' => 'Eventos actuais',
+
+'disclaimers' => 'Disclaimers',
+'disclaimerpage' => "{{ns:project}}:General_disclaimer",
+'privacy' => 'Política de privacidade',
+'privacypage' => '{{ns:project}}:Política_de_privacidade',
+'errorpagetitle' => "Erro",
+'returnto'              => "Retornar para $1.",
+'tagline'       => 'De {{SITENAME}}',
+'help'                  => 'Ajuda',
+'search'                => 'Pesquisa',
+'searchbutton'          => 'Pesquisa',
+'go'            => 'Ir',
+'searcharticle'            => 'Ir',
+"history"             => 'Histórico',
+'history_short' => 'História',
+'updatedmarker' => 'actualizado desde a minha última visita',
+'info_short'    => 'Informação',
+'printableversion' => 'Versão para impressão',
+'permalink'     => 'Ligação permanente',
+'print' => 'Imprimir',
+'edit' => 'Editar',
+'editthispage'  => 'Editar esta página',
+'delete' => 'Eliminar',
+'deletethispage' => 'Eliminar esta página',
+'undelete_short' => 'Restaurar $1 edições',
+'protect' => 'Proteger',
+'protectthispage' => 'Proteger esta página',
+'unprotect' => 'Desproteger',
+'unprotectthispage' => 'Desproteger esta página',
+'newpage' => 'Nova página',
+'talkpage'              => 'Discutir esta página',
+'specialpage' => 'Página Especial',
+'personaltools' => 'Ferramentas pessoais',
+'postcomment'   => 'Envie um comentário',
+'articlepage'   => 'Ver artigo',
+'talk' => 'Discussão',
+'views' => 'Vistas',
+'toolbox' => 'Ferramentas',
+'userpage' => 'Ver página de utilizador',
+'projectpage' => 'Ver página do projecto',
+'imagepage' =>       'Ver página de imagens',
+'mediawikipage' =>     'Ver página de mensagens',
+'templatepage' =>     'Ver página de predefinições',
+'viewhelppage' =>     'Ver página de ajuda',
+'categorypage' =>     'Ver página de categorias',
+'viewtalkpage' => 'Ver discussão',
+'otherlanguages' => 'Outras línguas',
+'redirectedfrom' => '(Redireccionado de <b>$1</b> para <b>{{PAGENAME}}</b>.)',
+'autoredircomment' => 'Redireccionando para [[$1]]',
+'redirectpagesub' => 'Página de redireccionamento',
+'lastmodifiedat'  => 'Esta página foi modificada pela última vez a $2, $1.',
+'viewcount'             => 'Esta página foi acedida {{plural:$1|uma vez|$1 vezes}}.',
+'copyright'     => 'Conteúdo disponível sob $1.',
+'protectedpage' => 'Página protegida',
+'jumpto' => 'Ir para:',
+'jumptonavigation' => 'navegação',
+'jumptosearch' => 'pesquisa',
+
+'badaccess'     => 'Erro de permissão',
+'badaccess-group0' => 'Não está autorizado a executar a acção requisitada.',
+'badaccess-group1' => 'A acção que requisitou está limitada a utilizadores do grupo $1.',
+'badaccess-group2' => 'A acção que requisitou está limitada a utilizadores de um dos grupos $1.',
+'badaccess-groups' => 'A acção que requisitou está limitada a utilizadores de um dos grupos $1.',
+
+'versionrequired' => 'Necessária versão $1 do MediaWiki',
+'versionrequiredtext' => 'Esta página requer a versão $1 do MediaWiki para ser utilizada. Consulte [[Special:Version]]',
+
+'ok'                    => 'OK',
+'pagetitle'             => "$1 - {{SITENAME}}",
+'retrievedfrom' => 'Retirado de "$1"',
+'youhavenewmessages' => "Você tem $1 ($2).",
+'newmessageslink' => 'novas mensagens',
+'newmessagesdifflink' => 'comparar com a penúltima revisão',
+'editsection'=>'editar',
+'editold'=>'editar',
+'editsectionhint' => 'Editar secção: $1',
+'toc' => 'Tabela de conteúdo',
+'showtoc' => 'mostrar',
+'hidetoc' => 'esconder',
+'thisisdeleted' => "Ver ou restaurar $1?",
+'viewdeleted' => 'Ver $1?',
+'restorelink' => '{{PLURAL:$1|uma edição eliminada|$1 edições eliminadas}}',
+'feedlinks' => 'Feed:',
+'feed-invalid' => 'Tipo de subscrição feed inválido.',
+
+# Short words for each namespace, by default used in the 'article' tab in monobook
+'nstab-main' => 'Artigo',
+'nstab-user' => 'Página de utilizador',
+'nstab-media' => 'Media',
+'nstab-special' => 'Especial',
+'nstab-project' => 'Página de projecto',
+'nstab-image' => 'Ficheiro',
+'nstab-mediawiki' => 'Mensagem',
+'nstab-template' => 'Predefinição',
+'nstab-help' => 'Ajuda',
+'nstab-category' => 'Categoria',
+
+# Main script and global functions
+#
+'nosuchaction'  => 'Acção não existente',
+'nosuchactiontext' => 'A acção especificada pelo URL não é reconhecida pelo programa da Wikipédia',
+'nosuchspecialpage' => 'Não existe a página especial requesitada',
+'nospecialpagetext' => 'Requesitou uma página especial inválida; uma lista de páginas especiais válidas poderá ser encontrada em [[{{ns:special}}:Specialpages]].',
+
+# General errors
+#
+'error'                 => 'Erro',
+'databaseerror' => 'Erro na base de dados',
+'dberrortext'   => "Ocorreu um erro de sintaxe na pesquisa à base de dados.
+A última tentativa de busca na base de dados foi:
+<blockquote><tt>$1</tt></blockquote>
+na função \"<tt>$2</tt>\".
+MySQL retornou o erro \"<tt>$3: $4</tt>\".",
+'dberrortextcl' => "Ocorre um erro de sintaxe na pesquisa à base de dados.
+A última tentativa de busca na base de dados foi:
+<blockquote><tt>$1</tt></blockquote>
+na função \"<tt>$2</tt>\".
+MySQL retornou o erro \"<tt>$3: $4</tt>\".",
+'noconnect'             => 'Pedimos desculpas, mas esta wiki está passando por algumas
+dificuldades técnicas e não pode contactar o servidor da base de dados.',
+'noconnect'		=> 'Desculpe! A wiki está a experienciar algumas dificuldades técnicas, e não pode contactar o servidor da base de dados. <br />
+$1',
+'nodb'                  => "Não foi possível seleccionar a base de dados $1",
+'cachederror'           => 'A página apresentada é uma cópia em cache da página requisitada, e pode não estar actualizada.',
+'laggedslavemode'   => 'Aviso: A página poderá não conter actualizações recentes.',
+'readonly'              => 'Base de dados somente para leitura',
+'enterlockreason' => 'Introduza com um motivo para trancar, incluindo uma estimativa de quando poderá novamente ser editada',
+'readonlytext'  => "A base de dados da {{SITENAME}} está actualmente trancada para novos
+artigos e outras modificações, provavelmente por uma manutenção de rotina à base de dados, mais tarde voltará ao normal.
+
+O administrador que fez o bloqueio oferece a seguinte explicação: $1",
+'missingarticle' => "A base de dados não encontrou o texto de uma página que deveria ter encontrado: \"$1\".
+
+Isto é geralmente causado pela procura de uma diferença num antigo ou num histórico que leva a uma página que foi eliminada.
+
+Se este não for o caso, você pode ter encontrado um ''bug'' no software.
+Por favor, tome nota do URL e comunique o erro a um [[{{ns:project}}:Administradores|administrador]].",
+'readonly_lag' => "A base de dados foi automaticamente bloqueada para sincronização",
+'internalerror' => 'Erro interno',
+'filecopyerror' => "Não foi possível copiar o ficheiro \"$1\" para \"$2\".",
+'filerenameerror' => "Não foi possível renomear o ficheiro \"$1\" para \"$2\".",
+'filedeleteerror' => "Não foi possível eliminar o ficheiro \"$1\".",
+'filenotfound'  => "Não foi possível encontrar o ficheiro \"$1\".",
+'unexpected'    => "Valor não esperado: \"$1\"=\"$2\".",
+'formerror'             => 'Erro: Não foi possível enviar o formulário',
+'badarticleerror' => 'Esta acção não pode ser realizada nesta página.',
+'cannotdelete'  => 'Não foi possível eliminar a página ou imagem especificada (Pode ter sido já eliminada por outro administrador.)',
+'badtitle'              => 'Título inválido',
+'badtitletext' => "O título de página requisitada era inválido, vazio, ou uma ligação incorrecta de inter-linguagem ou título inter-wiki.
+No qual pode conter um ou mais caracteres que não podem ser utilizados em títulos.",
+'perfdisabled' => 'Esta opção foi temporariamente desabilitada,
+devido a tornar a base de dados lenta demais a ponto de impossibilitar a wiki.',
+'perfdisabledsub' => "Aqui pode ver uma cópia de $1 salvaguardada:", # obsolete?
+'perfcached' => 'Os dados seguintes encontram-se na cache e podem não estar actualizados.',
+'perfcachedts' => 'Os seguintes dados encontram-se armazenados na cache e foram actualizados pela última vez a $1.',
+
+'wrong_wfQuery_params' => "Parâmetros incorrectos para wfQuery()<br />
+Function: $1<br />
+Query: $2",
+'viewsource' => 'Ver fonte',
+'viewsourcefor' => 'para $1',
+'protectedtext' => "Esta página foi protegida para não permitir edições; existem inúmeros motivos para
+ocorrer esta situação, por favor consulte [[{{ns:project}}:Página protegida]].
+
+Pode ver e copiar o código fonte desta página:",
+'protectedinterface' => 'Esta página fornece texto de interface ao software, e encontra-se trancada para prevenir abusos.',
+'editinginterface' => "'''Aviso:''' Encontra-se a editar uma página que é utilizada para fornecer texto de interface ao software. Alterações nesta página irão afectar a aparência da interface de utilizador para outros utilizadores.",
+'sqlhidden' => '(Consulta SQL escondida)',
+
+# Login and logout pages
+#
+'logouttitle'   => 'Saída de utilizador',
+'logouttext'	=> '<strong>Saiu agora da sua conta.</strong><br />
+Pode continuar a utilizar a {{SITENAME}} anonimamente, ou pode autenticar-se
+novamente como o mesmo nome de utilizador ou com um nome de utilizador diferente. Tenha em atenção que algumas páginas poderão
+continuar a ser apresentadas como se tivesse ainda autenticado, até limpar
+a cache do seu navegador.',
+
+'welcomecreation' => "== Bem-vindo, $1! ==
+
+A sua conta foi criada. Não se esqueça de personalizar as suas [[Special:Preferences|preferências]] na {{SITENAME}}.",
+
+'loginpagetitle' => 'Autenticação de utilizador',
+'yourname'              => 'Seu nome de utilizador',
+'yourpassword'  => 'Palavra-chave',
+'yourpasswordagain' => 'Reintroduza a sua palavra-chave',
+'remembermypassword' => 'Lembrar a minha palavra-chave entre sessões.',
+'yourdomainname'       => 'Seu domínio',
+'externaldberror'      => 'Ocorreu um erro externo à base de dados durante a autenticação, ou não lhe é permitido actualizar a sua conta externa.',
+'loginproblem'  => '<b>Houve um problema com a sua autenticação.</b><br />Tente novamente!',
+'alreadyloggedin' => "<strong>Utilizador $1, você já está autenticado!</strong><br />",
+'login'                 => 'Entrar',
+'loginprompt'           => "Você necessita de ter os <i>cookies</i> ligados para poder autenticar-se na {{SITENAME}}.",
+'userlogin'             => 'Criar uma conta ou entrar',
+'logout'                => 'Sair',
+'userlogout'    => 'Sair',
+'notloggedin'   => 'Não autenticado',
+'nologin'       => 'Não possui uma conta? $1.',
+'nologinlink'   => 'Criar uma conta',
+'createaccount' => 'Criar conta de utilizador',
+'gotaccount'    => 'Já possui uma conta? $1.',
+'gotaccountlink'        => 'Entrar',
+'createaccount' => 'Criar nova conta',
+'createaccountmail'     => 'por email',
+'badretype'             => 'As palavras-chaves que introduziu não são iguais.',
+'userexists'    => 'O nome de utilizador que introduziu já existe. Por favor, escolha um nome diferente.',
+'youremail'             => 'Endereço de email *:',
+'username'              => 'Nome de utilizador:',
+'uid'                   => 'Número de identificação:',
+'yourrealname'          => 'Nome verdadeiro *:',
+'yourlanguage'  => 'Idioma:',
+'yourvariant'  => 'Variante',
+'yournick'              => 'Alcunha:',
+'badsig'                => 'Assinatura inválida; verifique o código HTML utilizado.',
+'email'                 => 'Correio electrónico',
+'prefs-help-email-enotif' => 'Este endereço é também utilizado para enviar-lhe notificações caso as active nas preferências.',
+'prefs-help-realname'   => '* Nome verdadeiro (opcional): caso decida indicar, este será utilizado para lhe dar crédito pelo seu trabalho.',
+'loginerror'    => 'Erro de autenticação',
+'prefs-help-email'      => '* Email (opcional): Permite os utilizadores entrem em contacto consigo sem que tenha de lhes revelar o seu endereço de e-mail.',
+'nocookiesnew'  => "A conta de utilizador foi criada, mas você não foi ligado à conta. Tem os <i>cookies</i> desactivados no seu navegador, e a {{SITENAME}} utiliza <i>cookies</i> para ligar os utilizadores às suas contas. Por favor os active, depois autentique-se com o seu nome de utilizador e a sua palavra-chave.",
+'nocookieslogin'        => "Você tem os <i>cookies</i> desactivados no seu navegador, e a {{SITENAME}} utiliza <i>cookies</i> para ligar os utilizadores às suas contas. Por favor os active e tente novamente.",
+'noname'                => 'Não colocou um nome de utilizador válido.',
+'loginsuccesstitle' => 'Login bem sucedido',
+'loginsuccess'  => "'''Encontra-se agora ligado à {{SITENAME}} como \"$1\"'''.",
+'nosuchuser'    => "Não existe nenhum utilizador com o nome \"$1\".
+Verifique o nome que introduziu, ou crie uma nova conta de utilizador.",
+'nosuchusershort'       => "Não existe um utilizador com o nome \"$1\". Verifique o nome que introduziu.",
+'nouserspecified'       => 'Precisa de especificar um nome de utilizador.',
+'wrongpassword'         => 'A palavra-chave que introduziu é inválida. Por favor tente novamente.',
+'wrongpasswordempty'            => 'Palavra-chave introduzida está em branco. Por favor tente novamente.',
+'mailmypassword'        => 'Enviar uma nova palavra-chave por correio electrónico',
+'passwordremindertitle' => "Lembrador de palavras-chave da {{SITENAME}}",
+'passwordremindertext' => "Alguém (provavelmente você, do endereço de IP $1) solicitou que fosse lhe envido uma nova palavra-chave para {{SITENAME}} ($4).
+A palavra para o utilizador \"$2\" é a partir de agora \"$3\". Pode agora entrar na sua conta e alterar a palavra-chave.
+
+Caso tenha sido outra pessoa a fazer este pedido ou caso você já se tenha lembrado da sua palavra-chave e se não a desejar alterar, pode ignorar esta mensagem e continuar a utilizar a palavra-chave antiga.",
+'noemail'                           => "Não existe um endereço de correio electrónico associado ao utilizador \"$1\".",
+'passwordsent'  => "Uma nova palavra-chave encontra-se a ser enviada para o endereço de correio electrónico associado ao utilizador \"$1\".
+Por favor, volte a efectuar a autenticação ao recebê-la.",
+'eauthentsent'             =>  "Um email de confirmação foi enviado para o endereço de correio electrónico nomeado.
+Antes de qualquer outro email seja enviado para a conta, terá seguir as instruções no email,
+de modo a confirmar que a conta é mesmo sua.",
+#'signupend'                         => '{{int:loginend}}', # ignore list
+'mailerror'                 => "Erro a enviar o mail: $1",
+'acct_creation_throttle_hit' => 'Pedimos desculpa, mas já foram criadas $1 contas por si. Não lhe é possível criar mais nenhuma.',
+'emailauthenticated'        => 'O seu endereço de correio electrónico foi autenticado em $1.',
+'emailnotauthenticated'     => 'O seu endereço de correio electrónico ainda não foi autenticado. Não lhe será enviado nenhum correio sobre nenhuma das seguintes funcionalidades.',
+'noemailprefs'              => '<strong>Nenhum endereço de correio electrónico foi especificado</strong>, as seguintes funcionalidades não irão funcionar.',
+'emailconfirmlink' => 'Confirme o seu endereço de correio electrónico',
+'invalidemailaddress'   => 'O endereço de correio electrónico não pode ser aceite devido a possuír um formato inválido. Por favor introduza um endereço bem formatado ou esvazie o campo.',
+'accountcreated' => 'Conta criada',
+'accountcreatedtext' => 'A conta de utilizador para $1 foi criada.',
+
+# Edit page toolbar
+#
+'bold_sample'      => 'Texto a negrito',
+'bold_tip'         => 'Texto a negrito',
+'italic_sample'    => 'Texto em itálico',
+'italic_tip'       => 'Texto em itálico',
+'link_sample'      => 'Título da ligação',
+'link_tip'         => 'Ligação interna',
+'extlink_sample'   => 'http://www.wikimedia.org ligação externa',
+'extlink_tip'      => 'Ligação externa (lembre-se dos prefixos http://, ftp://, ...)',
+'headline_sample'  => 'Texto de cabeçalho',
+'headline_tip'     => 'Secção de nível 2',
+'math_sample'      => 'Inserir fórmula aqui',
+'math_tip'         => 'Fórmula matemática (LaTeX)',
+'nowiki_sample'    => 'Inserir texto não-formatado aqui',
+'nowiki_tip'       => 'Ignorar formato wiki',
+'image_sample'     => 'Exemplo.jpg',
+'image_tip'        => 'Imagem anexa',
+'media_sample'     => 'Exemplo.ogg',
+'media_tip'        => 'Ligação a ficheiro interno de multimédia',
+'sig_tip'          => 'Sua assinatura com hora e data',
+'hr_tip'           => 'Linha horizontal (utilize moderadamente)',
+
+# Edit pages
+#
+'summary'               => 'Sumário',
+'subject'               => 'Assunto/cabeçalho',
+'minoredit'             => 'Marcar como edição menor',
+'watchthis'             => 'Observar este artigo',
+'savearticle'   => 'Salvar página',
+'preview'               => 'Prever',
+'showpreview'   => 'Mostrar previsão',
+'showlivepreview'       => 'Pré-visualização em tempo real',
+'showdiff'      => 'Mostrar alterações',
+'anoneditwarning' => 'Não encontra-se autenticado. O seu endereço de IP será registado no histórico de edições desta página.',
+'missingsummary' => "'''Atenção:''' Não introduziu um sumário de edição. Se carregar em Salvar novamente, a sua edição será salva sem um sumário.",
+'missingcommenttext' => 'Por favor introduzida um comentário abaixo.',
+'blockedtitle'  => 'Utilizador está bloqueado',
+'blockedtext'   => "O seu nome de utilizador ou endereço de IP foi bloqueado por $1.<br />
+O motivo é: ''$2''
+
+Pode contactar [[{{ns:special}}:emailuser/$4|$4]] ou outro
+[[{{ns:project}}:Administradores|administrador]] para discutir sobre o bloqueio.
+
+Note que não poderá utilizar a funcionalidade \"Contactar utilizador\" se não possuir uma conta na Wikipédia e um endereço de email válido indicado nas suas preferências de utilizador. E lembre-se que só se encontra impossibilitado de editar páginas.<br /><br />
+
+'''O seu endereço de IP é $3.''' Por favor inclua o seu endereço de IP ao contactar um administrador sobre o bloqueio.",
+'blockedoriginalsource' => "A fonte de '''$1''' é mostrada abaixo:",
+'blockededitsource' => "O texto das '''suas edições''' para '''$1''' é mostrado abaixo:",
+'whitelistedittitle' => 'Autentificação necessária para visualizar',
+'whitelistedittext' => 'Precisa de se $1 para poder visualizar páginas.',
+'whitelistreadtitle' => 'Autentificação necessária para visualizar',
+'whitelistreadtext' => 'Precisa de se [[Special:Userlogin|autenticar]] para puder visualizar páginas.',
+'whitelistacctitle' => 'Não lhe é permitido criar uma conta',
+'whitelistacctext' => 'De modo a poder criar contas de utilizador nesta Wiki terá que se [[Special:Userlogin|autenticar]] e possuir as devidas permissões.',
+'confirmedittitle' => 'Confirmação por correio electrónico necessária para editar',
+'confirmedittext' => 'Precisa de confirmar o seu endereço de correio electrónico antes de começar a editar páginas. Por favor introduza e valide o seu endereço de correio electrónico através das suas [[Especial:Preferences|preferências de utilizador]].',
+'loginreqtitle' => 'Autenticação Requesitada',
+'loginreqlink' => 'autenticar-se',
+'loginreqpagetext'  => 'Precisa de $1 para visualizar outras páginas.',
+'accmailtitle' => 'Palavra-chave enviada.',
+'accmailtext' => "A palavra-chave para '$1' foi enviada para $2.",
+'newarticle'    => '(Novo)',
+'newarticletext' =>
+"Seguiu um link para um artigo que ainda não existe. Para criá-lo, escreva o seu conteúdo na caixa abaixo, mas se chegou aqui por engano clique no botão '''volta''' (ou ''back'') do seu navegador. Por favor, '''NÃO''' crie páginas apenas para fazer [[Project:Artigos pedidos|pedidos]] ou [[Project:Página de testes|testes]].
+
+(Consulte [[{{ns:project}}:Ajuda|a página de ajuda]] para mais informações)",
+'anontalkpagetext' => "----
+''Esta é a página de discussão para um utilizador anónimo que ainda não criou uma conta ou que não a utiliza. De modo a que temos que utilizar o endereço de IP para identificá-lo(a). Um endereço de IP pode ser partilhado por vários utilizadores. Se é um utilizador anónimo e acha relevante que os comentários sejam direccionados a si, por favor [[{{ns:special}}:Userlogin|crie uma conta ou autentique-se]] para evitar futuras confusões com outros utilizadores anónimos.''",
+'noarticletext' => 'Não existe actualmente texto nesta página, pode [[{{ns:special}}:Search/{{PAGENAME}}|pesquisar pelo título desta página noutras páginas]] ou [{{fullurl:{{NAMESPACE}}:{{PAGENAME}}|action=edit}} editar esta página].',
+'clearyourcache' => "'''Nota:''' Após salvar, terá de limpar a cache do seu navegador para ver as alterações.
+'''Mozilla / Firefox / Safari:''' pressione ''Shift'' enquanto clica em ''Recarregar'', ou pressione ''Ctrl-Shift-R'' (''Cmd-Shift-R'' no Apple Mac); '''IE:''' pressione ''Ctrl'' enquanto clica em ''Recarregar'', ou pressione ''Ctrl-F5''; '''Konqueror:''': simplesmente clique no botão ''Recarregar'', ou pressione ''F5''; utilizadores do navegador '''Opera''' podem limpar completamente a sua cache em ''Ferramentas→Preferências''.",
+'usercssjsyoucanpreview' => "<strong>Dica:</strong> Utilize o botão \"Mostrar previsão\" para testar seu novo CSS/JS antes de salvar.",
+'usercsspreview' => "'''Lembre-se que está apenas a prever o seu CSS particular, e que ainda não foi salvo!'''",
+'userjspreview' => "'''Lembre-se que está apenas a testar/prever o seu JavaScript particular, e que ainda não foi salvo!'''",
+'userinvalidcssjstitle' => "'''Aviso:''' Não existe um tema \"$1\". Lembre-se que as páginas .css e  .js utilizam um título em minúsculas, exemplo: Utilizador:Silva/monobook.css aposto a Utilizador:Silva/Monobook.css.",
+'updated'               => '(Actualizado)',
+'note'                  => '<strong>Nota:</strong>',
+'previewnote'   => '<strong>Isto é apenas uma previsão, as modificações ainda não foram salvas!</strong>',
+'session_fail_preview' => '<strong>Pedimos desculpas, mas não foi possível processar a sua edição devido à perda de dados da sua sessão.
+Por favor tente novamente. Caso continue a não funcionar, tente sair e voltar a entrar na sua conta.</strong>',
+'previewconflict' => 'Esta previsão reflete o texto que está na área de edição acima e como ele aparecerá se você escolher salvar.',
+'session_fail_preview_html' => '<strong>Pedimos desculpas! Não foi possível processar a sua edição devido a uma perda de dados de sessão.</strong>
+
+\'\'Devido a esta wiki possuir HTML raw activo, a previsão está escondida como forma de precaução contra ataques JavaScript.\'\'
+
+<strong>Por favor tente novamente caso esta seja uma tentativa de edição legítima. Caso continue a não funcionar, por favor tente sair e voltar a entrar na sua conta.</strong>',
+'importing'		=> "Importando $1",
+'editing'               => "Editando $1",
+'editinguser'               => "Editando $1",
+'editingsection'                => "Editando $1 (secção)",
+'editingcomment'                => "Editando $1 (comentário)",
+'editconflict'  => 'Conflito de edição: $1',
+'explainconflict' => "Alguém mudou a página enquanto você a estava editando.<br />
+A área de texto acima mostra o texto original.
+Suas mudanças são mostradas na área abaixo
+Você terá que mesclar suas modificações no texto existente.
+<b>SOMENTE</b> o texto na área acima será salvo quando você pressionar \"Salvar página\".\n<br />",
+'yourtext'              => 'Seu texto',
+'storedversion' => 'Versão guardada',
+'nonunicodebrowser' => "<strong>AVISO: O seu navegador não segue as especificações Unicode. Existe uma maneira para que possa editar com segurança os artigos: os caracteres não-ASCII aparecerão na caixa de edição no formato de códigos hexadecimais.</strong>",
+'editingold'    => "<strong>CUIDADO: Encontra-se a editar uma revisão desactualizada deste artigo.
+Se salvá-lo, todas as mudanças feitas a partir desta revisão serão perdidas.</strong>",
+'yourdiff'              => 'Diferenças',
+/*'copyrightwarning' => "Por favor note que todas as contribuições para a {{SITENAME}} são imediatamente colocadas sob a <b>GNU Free Documentation License</b> (consulte $1 para detalhes). Se você não quer que seu texto esteja sujeito a estes termos, então não o envie.<br />
+Você também garante que está nos enviando um artigo escrito por você mesmo, ou extraído de uma fonte em domínio público.
+<strong>Não ENVIE </strong>",*/
+'copyrightwarning2' => "Tenha em consideração que todas as contribuições para o projecto {{SITENAME}}
+podem ser editadas, alteradas, ou removidas por outros contribuidores.
+Se não deseja ver as suas contribuições alteradas sem consentimento, não as envie para esta Wiki.<br />
+Adicionalmente, estar-nos-á a dar a sua palavra em como os teus são da sua autoria, ou copiados por fontes de domínio público ou similares (veja mais detalhes em $1).
+<strong>NÃO ENVIE MATERIAL COM DIREITOS DE AUTOR SEM PERMISSÃO!</strong>",
+'longpagewarning' => "<strong>AVISO: Esta página ocupa $1; alguns browsers verificam
+problemas em editar páginas maiores que 32kb.
+Por favor, considere seccionar a página em secções de menor dimensão.</strong>",
+'longpageerror' => "<strong>ERRO: A página que submeteu tem mais de $1 kilobytes
+em tamanho, que é maior que o máximo de $2 kilobytes. A página não pode salva.</strong>",
+'readonlywarning' => '<strong>AVISO: A base de dados foi bloqueada para manutenção, pelo que não poderá salvar a sua edição neste momento. Pode, no entanto, copiar o seu texto num editor externo e guardá-lo para posterior submissão.</strong>',
+'protectedpagewarning' => "<strong>AVISO: Esta página foi protegida e apenas poderá ser editada por utilizadores com privilégios sysop (administradores). Certifique-se que está a respeitar as [[{{ns:project}}:Protected_page_guidelines|linhas de orientação para páginas protegidas]].</strong>",
+'semiprotectedpagewarning' => "'''Nota:''' Esta página foi protegida de modo a que apenas utilizadores registados a possam editar.",
+'templatesused' => 'Predefinições utilizadas nesta página:',
+'edittools' => '<!-- Text here will be shown below edit and upload forms. -->',
+'nocreatetitle' => 'Limitada a criação de páginas',
+'nocreatetext' => 'Este website tem restringida a habilidade de criar novas páginas.
+Pode voltar atrás e editar uma página já existente, ou [[Special:Userlogin|autenticar-se ou criar uma conta]].',
+'cantcreateaccounttitle' => 'Não é possível criar uma conta',
+'cantcreateaccounttext' => 'A criação de contas a partir deste endereço IP (<b>$1</b>) foi bloqueada. 
+Isto é provavelmente devido a vandalismo persistente efectuada a partir da sua escola ou ISP.',
+
+# History pages
+#
+'revhistory'    => 'Histórico de revisões',
+'viewpagelogs' => 'Ver registos para esta página',
+'nohistory'             => 'Não há histórico de edições para esta página.',
+'revnotfound'   => 'Revisão não encontrada',
+'revnotfoundtext' => "A antiga revisão desta página que requesitou não pode ser encontrada. Por favor verifique o URL que utilizou para aceder esta página.",
+'loadhist'              => 'Carregando histórico',
+'currentrev'    => 'Revisão actual',
+'revisionasof'          => 'Revisão de $1',
+'revision-info' => 'Revisão de $1; $2',
+'previousrevision'      => '← Versão anterior',
+'nextrevision'          => 'Versão posterior →',
+'currentrevisionlink'   => 'ver versão actual',
+'cur'                   => 'act',
+'next'                  => 'prox',
+'last'                  => 'ult',
+'orig'                  => 'orig',
+'histlegend'    => 'Selecção de diferença: marque as caixas para das versões que deseja comparar e carregue no botão.<br />
+Legenda: (actu) = diferenças da versão actual,
+(ult) = diferença da versão precedente, m = edição menor',
+'deletedrev' => '[eliminada]',
+'histfirst' => 'Mais antigas',
+'histlast' => 'Mais recentes',
+'rev-deleted-comment' => '(comentário removido)',
+'rev-deleted-user' => '(nome de utilizador removido)',
+'rev-deleted-text-permission' => '<div class="mw-warning plainlinks">
+Esta revisão desta página foi removida dos arquivos públicos.
+Poderão existir detalhes no [{{fullurl:Special:Log/delete|page={{PAGENAMEE}}}} registo de eliminação].
+</div>',
+'rev-deleted-text-view' => '<div class="mw-warning plainlinks">
+A revisão desta página foi removida dos arquivos públicos.
+Como um administrador desta wiki pode a ver;
+mais detalhes no [{{fullurl:Special:Log/delete|page={{PAGENAMEE}}}} registo de eliminação].
+</div>',
+'rev-delundel' => 'mostrar/esconder',
+
+'history-feed-title' => 'História de revisão',
+'history-feed-description'    => 'História de revisão para esta página nesta wiki',
+'history-feed-item-nocomment' => '$1 a $2', # user at time
+'history-feed-empty' => 'A página requisitada não existe.
+Poderá ter sido eliminada da wiki, ou renomeada.
+Tente [[Especial:Search|pesquisar na wiki]] por novas páginas relevantes.',
+
+# Revision deletion
+#
+'revisiondelete' => 'Eliminar/restaurar revisões',
+'revdelete-nooldid-title' => 'Nenhuma revisão seleccionada',
+'revdelete-nooldid-text' => 'Não especificou nenhuma revisão, ou revisões,
+no qual aplicar esta função.',
+'revdelete-selected' => 'Revisão seleccionada para [[:$1]]:',
+'revdelete-text' => "Revisões eliminadas continuarão a aparecer na história da página,
+mas o seu conteúdo textual estará inacessível ao público.
+
+Outros administradores nesta wiki continuarão a poder aceder ao conteúdo escondido e restaurá-lo novamente através deste mesmo ''interface'', a menos que uma restrição adicional seja colocada pelos operadores do ''site''.",
+'revdelete-legend' => 'Atribuir restrições de revisões:',
+'revdelete-hide-text' => 'Esconder texto de revisão',
+'revdelete-hide-comment' => 'Esconder comentário de edição',
+'revdelete-hide-user' => 'Esconder nome de utilizador/IP do editor',
+'revdelete-hide-restricted' => 'Aplicar estas restrições a administrador tal como a outros',
+'revdelete-log' => 'Comentário de registo:',
+'revdelete-submit' => 'Aplicar a revisões seleccionadas',
+'revdelete-logentry' => 'modificada visibilidade de revisão para [[$1]]',
+
+# Diffs
+#
+'difference'    => '(Diferença entre revisões)',
+'loadingrev'    => 'carregando a pesquisa por diferenças',
+'lineno'                => "Linha $1:",
+'editcurrent'   => 'Editar a versão actual desta página',
+'selectnewerversionfordiff' => 'Seleccione uma versão mais recente para comparação',
+'selectolderversionfordiff' => 'Seleccione uma versão mais antiga para comparação',
+'compareselectedversions' => 'Compare as versões seleccionadas',
+
+# Search results
+#
+'searchresults' => 'Resultados de pesquisa',
+'searchresulttext' => "Para mais informações de como pesquisar na {{SITENAME}}, consulte [[{{ns:project}}:Pesquisa|Pesquisando {{SITENAME}}]].",
+'searchsubtitle'   => "Para consulta \"[[:$1]]\"",
+'searchsubtitleinvalid'   => "Para consulta \"$1\"",
+'badquery'              => 'Linha de pesquisa inválida',
+'badquerytext'  => 'Não foi possível processar seu pedido de pesquisa.
+Aconteceu provavelmente porque tentou procurar uma palavra com menos de três letras. Isto também pode ter ocorrido porque digitou incorrectamente a expressão, por
+exemplo "peixes <strong>e e</strong> escalas".
+Por favor realize outro pedido de pesquisa.',
+'matchtotals'   => "A pesquisa \"$1\" resultou $2 títulos de artigos
+e $3 artigos com o texto procurado.",
+'noexactmatch' => 'Não existe uma página com o título \"$1\". Pode criar [[:$1|esta página]].',
+'titlematches'  => 'Resultados nos títulos dos artigos',
+'notitlematches' => 'Nenhum título de página coincide',
+'textmatches'   => 'Resultados dos textos dos artigos',
+'notextmatches' => 'Nenhum texto nas páginas coincide',
+'prevn'                 => "anteriores $1",
+'nextn'                 => "próximos $1",
+'viewprevnext'  => "Ver ($1) ($2) ($3).",
+'showingresults' => "Mostrando <b>$1</b> resultados, começando no <b>$2</b>º.",
+'showingresultsnum' => "Mostrando <b>$3</b> resultados começando com #<b>$2</b>.",
+'nonefound'             => "<strong>Nota</strong>: pesquisas mal sucedidas são geralmente causadas devido ao uso de palavras muito comuns como \"tem\" e \"de\",
+que não são indexadas, ou pela especificação de mais de um termo (somente as páginas contendo todos os termos aparecerão nos resultados).",
+'powersearch' => 'Pesquisa',
+'powersearchtext' => "
+Pesquisar nos domínios:<br />
+$1<br />
+$2 Lista redirecciona &nbsp; Pesquisar por $3 $9",
+"searchdisabled" => 'O motor de pesquisa na {{SITENAME}} foi desactivado por motivos de desempenho. Enquanto isso pode fazer a sua pesquisa através do Google ou do Yahoo!.<br />
+Note que os índices do conteúdo da {{SITENAME}} destes sites podem estar desactualizados.',
+
+'blanknamespace' => '(Principal)',
+
+# Preferences page
+#
+'preferences'   => 'Preferências',
+'mypreferences' => 'Minhas preferências',
+'prefsnologin' => 'Não autenticado',
+'prefsnologintext'      => "Precisa estar [[Special:Userlogin|autenticado]] para definir suas preferências.",
+'prefsreset'    => 'Preferências restauradas da base de dados.',
+'qbsettings'    => 'Barra Rápida',
+'qbsettings-none'	=> 'Nenhuma',
+'qbsettings-fixedleft'	=> 'Fixo à esquerda',
+'qbsettings-fixedright'	=> 'Fixo à direita',
+'qbsettings-floatingleft'	=> 'Flutuando à esquerda',
+'qbsettings-floatingright'	=> 'Flutuando à direita',
+'changepassword' => 'Alterar palavra-chave',
+'skin'                  => 'Tema',
+'math'                  => 'Matemática',
+'dateformat'            => 'Formato da data',
+'datedefault' => 'Sem preferência',
+'datetime'              => 'Data e hora',
+'math_failure'          => 'Falhou ao verificar gramática',
+'math_unknown_error'    => 'Erro desconhecido',
+'math_unknown_function' => 'Função desconhecida',
+'math_lexing_error'     => 'Erro léxico',
+'math_syntax_error'     => 'Erro de sintaxe',
+'math_image_error'      => 'Erro na conversão para PNG; Verifique a instalação do latex, dvips, gs e convert',
+'math_bad_tmpdir'       => 'Ocorreram problemas na criação ou escrita na directoria temporária math',
+'math_bad_output'       => 'Ocorreram problemas na criação ou escrita na directoria de resultados math',
+'math_notexvc'  => 'Executável texvc não encontrado; Consulte math/README para instruções da configuração.',
+'prefs-personal' => 'Perfil de utilizador',
+'prefs-rc' => 'Mudanças recentes',
+'prefs-watchlist' => 'Lista de artigos vigiados',
+'prefs-watchlist-days' => 'Número de dias a mostrar na lista de artigos vigiados:',
+'prefs-watchlist-edits' => 'Numéro de edições a mostrar na lista de artigos vigados expandida:',
+'prefs-misc' => 'Diversos',
+'saveprefs'             => 'Salvar',
+'resetprefs'    => 'Restaurar',
+'oldpassword'   => 'Palavra-chave antiga',
+'newpassword'   => 'Nova palavra-chave',
+'retypenew'             => 'Reintroduza a nova palavra-chave',
+'textboxsize'   => 'Opções de edição',
+'rows'                  => 'Linhas:',
+'columns'               => 'Colunas:',
+'searchresultshead' => 'Pesquisa',
+'resultsperpage' => 'Resultados por página:',
+'contextlines'  => 'Linhas por resultado:',
+'contextchars'  => 'Contexto por linha:',
+'stubthreshold' => 'Variação para a visualização de esboços:',
+'recentchangescount' => 'Número de artigos nas mudanças recentes:',
+'savedprefs'    => 'As suas preferências foram salvas.',
+'timezonelegend' => 'Fuso horário',
+'timezonetext'  => 'Número de horas que o seu horário local difere do horário do servidor (UTC).',
+'localtime'     => 'Hora local',
+'timezoneoffset' => 'Diferença horária¹',
+'servertime'    => 'Horário do servidor',
+'guesstimezone' => 'Preencher a partir do navegador (browser)',
+'allowemail'             => 'Permitir email de outros utilizadores',
+'defaultns'             => 'Pesquisar nestes domínios por padrão:',
+'default'               => 'padrão',
+'files'                 => 'Ficheiros',
+
+# User rights
+
+'userrights-lookup-user' => 'Gerir grupos de utilizadores',
+'userrights-user-editname' => 'Intruduza um nome de utilizador:',
+'editusergroup' => 'Editar Grupos de Utilizadores',
+
+'userrights-editusergroup' => 'Editar grupos do utilizador',
+'saveusergroups' => 'Salvar Grupos do Utilizador',
+'userrights-groupsmember' => 'Membro de:',
+'userrights-groupsavailable' => 'Grupos disponíveis:',
+'userrights-groupshelp' => 'Seleccione os grupos no qual deseja que o utilizador seja removido ou adicionado.
+Grupos não seleccionados, não serão alterados. Pode seleccionar ou remover a selecção a um grupo com CTRL + Click esquerdo',
+
+# Groups
+'group'                   => 'Grupo:',
+'group-bot'               => 'Robôs',
+'group-sysop'             => 'Administradores',
+'group-bureaucrat'        => 'Burocratas',
+'group-all'               => '(todos)',
+
+'group-bot-member'        => 'Robô',
+'group-sysop-member'      => 'Administrador',
+'group-bureaucrat-member' => 'Burocrata',
+
+'grouppage-bot' => '{{ns:project}}:Robôs',
+'grouppage-sysop' => '{{ns:project}}:Administradores',
+'grouppage-bureaucrat' => '{{ns:project}}:Burocratas',
+
+# Recent changes
+#
+'changes' => 'mudanças',
+'recentchanges' => 'Mudanças recentes',
+'recentchangestext' => 'Veja as mais novas mudanças na {{SITENAME}} nesta página.',
+'rcnote'                => "Abaixo estão as últimas <strong>$1</strong> alterações nos últimos <strong>$2</strong> dias, desde $3.",
+'rcnotefrom'    => "Abaixo estão as mudanças desde <b>$2</b> (mostradas até <b>$1</b>).",
+'rclistfrom'    => "Mostrar as novas alterações a partir de $1",
+'rcshowhideminor' => '$1 edições menores',
+'rcshowhidebots' => '$1 robôs',
+'rcshowhideliu' => '$1 utilizadores registados',
+'rcshowhideanons' => '$1 utilizadores anónimos',
+'rcshowhidepatr' => '$1 edições verificadas',
+'rcshowhidemine' => '$1 as minhas edições',
+'rclinks'               => "Mostrar as últimas $1 mudanças nos últimos $2 dias<br />$3",
+'diff'                  => 'dif',
+'hist'                  => 'hist',
+'hide'                  => 'Esconder',
+'show'                  => 'Mostrar',
+'minoreditletter' => 'm',
+'newpageletter' => 'N',
+'boteditletter' => 'r',
+'sectionlink' => '→',
+'number_of_watching_users_pageview'     => '[$1 utilizador/es a vigiar]',
+'rc_categories'	=> 'Limite para categorias (separar com "|")',
+'rc_categories_any'	=> 'Qualquer',
+
+# Upload
+#
+'upload'                => 'Carregar ficheiro',
+'uploadbtn'             => 'Carregar ficheiro',
+'reupload'              => 'Recarregar',
+'reuploaddesc'  => 'Voltar ao formulário de carregamento.',
+'uploadnologin' => 'Não autenticado',
+'uploadnologintext'     => "Deve estar [[Special:Userlogin|autenticado]]
+para carregar ficheiros.",
+'upload_directory_read_only' => 'A directoria de envio ($1) não tem permissões de escrita pelo servidor Web.',
+'uploaderror'   => 'Erro ao carregar',
+'uploadtext'    =>
+"
+Utilize o formulário abaixo para carregar novos ficheiros,
+para ver ou pesquisar imagens anteriormente carregadas
+consulte a [[Special:Imagelist|lista de ficheiros carregados]],
+carregamentos e eliminações são também registados no [[Special:Log|registo do projecto]].
+
+Para incluír a imagem numa página, utilize o link na forma de
+'''[[{{ns:6}}:ficheiro.jpg]]''',
+'''[[{{ns:6}}:ficheiro.png|texto]]''' ou
+'''[[{{ns:-2}}:ficheiro.ogg]]''' para uma ligação directa ao ficheiro.",
+'uploadlog'             => 'registo de carregamento',
+'uploadlogpage' => 'Registo de carregamento',
+'uploadlogpagetext' => 'Segue-se uma lista dos carregamentos mais recentes.',
+'filename'              => 'Nome do ficheiro',
+'filedesc'              => 'Descrição do ficheiro',
+'fileuploadsummary' => 'Sumário:',
+'filestatus' => 'Estatuto de copyright',
+'filesource' => 'Fonte',
+'copyrightpage' => "{{ns:project}}:Direitos_de_autor",
+'copyrightpagename' => "Direitos autorais da {{SITENAME}}",
+'uploadedfiles' => 'Ficheiros carregados',
+'ignorewarning'        => 'Ignorar aviso e salvar de qualquer forma.',
+'ignorewarnings'        => 'Ignorar todos os avisos',
+'minlength'             => 'O nome de um ficheiro tem de ter no mínimo três letras.',
+'illegalfilename'       => 'O ficheiro "$1" possui caracteres que não são permitidos no título de uma página. Por favor altere o nome do ficheiro e tente carregar novamente.',
+'badfilename'   => 'Nome do ficheiro foi alterado para "$1".',
+'badfiletype'   => "\".$1\" é um formato de ficheiro não recomendado.",
+'largefile'             => 'É recomendado que imagens não excedam $1 bytes em tamanho, o tamanho deste ficheiro é $2 bytes',
+'largefileserver' => 'O tamanho deste ficheiro é superior ao qual o servidor encontra-se configurado para permitir.',
+'emptyfile'             => 'O ficheiro que está a tentar carregar parece encontrar-se vazio. Isto poderá ser devido a um erro na escrita do nome do ficheiro. Por favor verifique se realmente deseja carregar este ficheiro.',
+'fileexists'            => 'Já existe um ficheiro com este nome, por favor verifique $1 caso não tenha a certeza se deseja alterar o ficheiro actual.',
+'fileexists-forbidden' => 'Já existe um ficheiro com este nome; por favor volte atrás e carregue este ficheiro sob um novo nome. [[Image:$1|thumb|center|$1]]',
+'fileexists-shared-forbidden' => 'Já existe um ficheiro com este nome no repositório de ficheiros partilhados; por favor volte atrás e carregue este ficheiro sob um novo nome. [[Image:$1|thumb|center|$1]]',
+'successfulupload' => 'Envio efectuado com sucesso',
+'fileuploaded'  => "Ficheiro $1 enviado com sucesso.
+Por favor siga este endereço: $2 para a página de descrição e preencha a informação acerca deste ficheiro, tais como a sua origem, quando foi criado e por quem, e quaisquer outros dados que tenha conhecimento sobre o mesmo. Caso este ficheiro seja uma imagem, pode inseri-lo desta forma: <tt>[[Imagem:$1|thumb|Descrição]]</tt>",
+'uploadwarning' => 'Aviso de envio',
+'savefile'              => 'Salvar ficheiro',
+'uploadedimage' => "carregado \"[[$1]]\"",
+'uploaddisabled' => 'Carregamentos desactivados',
+'uploaddisabledtext' => 'O carregamento de ficheiros encontra-se desactivado nesta wiki.',
+'uploadscripted' => 'Este ficheiro contém HTML ou código que pode ser erradamente interpretado por um navegador web.',
+'uploadcorrupt' => 'O ficheiro encontra-se corrompido ou tem uma extensão não permitida. Corrija o ficheiro e tente novamento.',
+'uploadvirus' => 'O ficheiro contém vírus! Detalhes: $1',
+'sourcefilename' => 'Nome do ficheiro de origem',
+'destfilename' => 'Nome do ficheiro de destino',
+'watchthisupload'       => 'Vigiar esta página',
+'filewasdeleted' => 'Um ficheiro com este nome foi anteriormente carregado e subsequentemente eliminado. Deveria verificar o $1 antes de proceder ao carregamento novamente.',
+
+'license' => 'Licença',
+'nolicense' => 'Nenhuma seleccionada',
+'upload_source_url' => ' (válido, URL publicamente acessível)',
+'upload_source_file' => ' (um ficheiro no seu computador)',
+
+# Image list
+#
+'imagelist'             => 'Lista de ficheiros',
+'imagelisttext' => 'Segue-se uma lista de <strong>$1</strong> ficheiros organizados <strong>$2</strong>.',
+'imagelistforuser' => "Esta lista apenas mostra imagens carregadas por $1.",
+'getimagelist'  => 'carregando lista de ficheiros',
+'ilsubmit'              => 'Procurar',
+'showlast'              => 'Mostrar últimos $1 ficheiros organizados $2.',
+'byname'                => 'por nome',
+'bydate'                => 'por data',
+'bysize'                => 'por tamanho',
+'imgdelete'             => 'eli',
+'imgdesc'               => 'desc',
+'imgfile'       => 'ficheiro',
+'imglegend'             => 'Legenda: (desc) = mostrar/editar descrição de imagem.',
+'imghistory'    => 'História',
+'revertimg'             => 'rev',
+'deleteimg'             => 'eli',
+'deleteimgcompletely'           => 'Eliminar todas revisões deste ficheiro',
+'imghistlegend' => 'Legenda: (actu) = imagem actual, (eli) = eliminar versão antiga, (rev) = reverter para versão antiga.
+<br /><i>Clique na data para ver as imagens carregadas nessa data</i>.',
+'imagelinks'    => 'Ligações',
+'linkstoimage'  => 'As seguintes páginas apontam para este ficheiro:',
+'nolinkstoimage' => 'Nenhuma página aponta para este ficheiro.',
+'sharedupload' => 'Este ficheiro encontra-se partilhado e pode ser utilizado por outros projectos.',
+'shareduploadwiki' => 'Por favor consulte a $1 para mais informação.',
+'shareduploadwiki-linktext' => 'página de descrição',
+'noimage'       => 'Nenhum ficheiro com este nome existe, se desejar pode $1',
+'noimage-linktext'       => 'carrega-lo',
+'uploadnewversion-linktext' => 'Carregar uma nova versão deste ficheiro',
+'imagelist_date' => 'Data',
+'imagelist_name' => 'Nome',
+'imagelist_user' => 'Utilizador',
+'imagelist_size' => 'Tamanho (bytes)',
+'imagelist_description' => 'Descrição',
+'imagelist_search_for' => 'Pesquisar por nome de imagem:',
+
+# Unwatchedpages
+#
+'unwatchedpages' => 'Páginas não vigiadas',
+
+# List redirects
+'listredirects' => 'Listar redireccionamentos',
+
+# Unused templates
+'unusedtemplates' => 'Predefinições não utilizadas',
+'unusedtemplatestext' => 'Esta página lista todas as páginas no domínio predefinição que não estão incluídas numa outra página. Lembre-se de verificar por outras ligações nas predefinições antes de as apagar.',
+'unusedtemplateswlh' => 'outras ligações',
+
+# Random redirect
+'randomredirect' => 'Redireccionamento aleatório',
+
+# Statistics
+#
+'statistics'    => 'Estatísticas',
+'sitestats'             => 'Estatísticas do site',
+'userstats'             => 'Estatística dos utilizadores',
+'sitestatstext' => "Há actualmente um total de '''$1''' páginas na base de dados.
+Isto inclui páginas de \"discussão\", páginas sobre o projecto, páginas de rascunho, redireccionamentos, e outras que provavelmente não são qualificadas como artigos.
+Excluindo estas, há '''$2''' páginas que provavelmente são artigos legítimos.
+
+'''$8''' ficheiros foram carregados.
+
+Há um total de '''$3''' páginas vistas, e '''$4''' edições em páginas
+desde a instalação do software.
+O que nos leva a aproximadamente '''$5''' edições por página, e '''$6''' vistas por edição.
+
+O tamanho da [http://meta.wikimedia.org/wiki/Help:Job_queue fila de tarefas] é de actualmente '''$7'''.",
+'userstatstext' => "Há actualmente '''$1''' utilizadores registados.
+Destes, '''$2''' (ou '''$4%''') são $5.",
+'statistics-mostpopular' => 'Páginas mais vistas',
+
+# Maintenance Page
+#
+'disambiguations'       => 'Página de desambiguações',
+'disambiguationspage'   => 'Template:disambig',
+'disambiguationstext'   => "As seguintes páginas ligam com uma <i>página de desambiguação</i>. Estas páginas deviam ligar com o tópico apropriado.<br />Qualquer página ligada com $1 é considerada página de desambiguação.<br />As ligações de outros domínios não são listadas aqui.",
+'doubleredirects'       => 'Redireccionamentos duplos',
+'doubleredirectstext'   => "Cada linha contém ligações para o primeiro e segundo redireccionamento, bem como a primeira linha de conteúdo do segundo redireccionamento, geralmente contendo a página destino \"real\", que devia ser o destino do primeiro redireccionamento.",
+'brokenredirects'       => 'Redireccionamentos quebrados',
+'brokenredirectstext'   => 'Os seguintes redireccionamentos ligam para páginas inexistentes:',
+
+# Miscellaneous special pages
+#
+'nbytes'		=> '$1 {{PLURAL:$1|byte|bytes}}',
+'ncategories'		=> '$1 {{PLURAL:$1|categoria|categorias}}',
+'nlinks'		=> '$1 {{PLURAL:$1|link|links}}',
+'nmembers'		=> '$1 {{PLURAL:$1|membro|membros}}',
+'nrevisions'		=> '$1 {{PLURAL:$1|revisão|revisões}}',
+'nviews'		=> '$1 {{PLURAL:$1|visita|visitas}}',
+
+'lonelypages'   => 'Páginas órfãs',
+'lonelypagestext'    => 'As seguintes páginas não têm hiperligações a apontar para elas a partir de outras páginas nesta wiki.',
+'uncategorizedpages'    => 'Páginas não categorizadas',
+'uncategorizedcategories'       => 'Categorias não categorizadas',
+'uncategorizedimages' => 'Imagens não categorizadas',
+'unusedcategories' => 'Categorias não utilizadas',
+'unusedimages'  => 'Ficheiros não utilizados',
+'popularpages'  => 'Páginas populares',
+'wantedcategories' => 'Categorias pedidas',
+'wantedpages'   => 'Páginas pedidas',
+'mostlinked'    => 'Páginas com mais afluentes',
+'mostlinkedcategories' => 'Categorias com mais afluentes',
+'mostcategories' => 'Artigos com mais categorias',
+'mostimages'    => 'Imagens com mais afluentes',
+'mostrevisions' => 'Artigos com mais revisões',
+'allpages'              => 'Todas as páginas',
+'prefixindex'   => 'Índice de prefixo',
+'randompage'    => 'Página aleatória',
+'shortpages'    => 'Páginas curtas',
+'longpages'             => 'Páginas longas',
+'deadendpages'  => 'Páginas sem saída',
+'deadendpagestext'    => 'As seguintes páginas não contêm hiperligações para outras páginas nesta wiki.',
+'listusers'             => 'Lista de utilizadores',
+'specialpages'  => 'Páginas especiais',
+'spheading'             => 'Páginas especiais para todos os utilizadores',
+'restrictedpheading'    => 'Páginas especiais restritas',
+'recentchangeslinked' => 'Alterações relacionadas',
+'rclsub'                => "(para páginas linkadas de \"$1\")",
+'newpages'              => 'Páginas novas',
+'newpages-username' => 'Nome de utilizador:',
+'ancientpages'          => 'Páginas mais antigas',
+'intl'          => 'Ligações interlínguas',
+'move' => 'Mover',
+'movethispage'  => 'Mover esta página',
+'unusedimagestext' => '<p>Por favor note que outros websites como as Wikipédias internacionais podem apontar para uma imagem através de um URL directamente, e por isso pode estar aparecer aqui mesmo estando em uso.</p>',
+'unusedcategoriestext' => 'As seguintes categorias existem embora nenhum artigo ou categoria faça uso delas.',
+'booksources'   => 'Fontes de livros',
+'categoriespagetext' => 'As seguintes categorias existem na wiki.',
+'data'  => 'Dados',
+'userrights' => 'Gestão de privilégios do utilizador',
+'groups' => 'Grupos de utilizadores',
+
+'booksourcetext' => "Abaixo encontra-se uma lista de ligações para outros websites que vendem livros novos ou usados, e poderão ter mais informações sobre os livros que procura.",
+'isbn'  => 'ISBN',
+'alphaindexline' => "$1 até $2",
+'version'               => 'Versão',
+'log'           => 'Registos',
+'alllogstext'   => 'Exposição combinada de carregamento de ficheiros, eliminação, protecção, bloqueio, e de direitos.
+Pode diminuir a lista escolhendo um tipo de registo, um nome de utilizar, ou uma página afectada.',
+'logempty' => 'Nenhum item idêntico no registo.',
+
+# Special:Allpages
+'nextpage'          => 'Próxima página ($1)',
+'allpagesfrom'          => 'Mostrar páginas começando em:',
+'allarticles'           => 'Todos artigos',
+'allinnamespace'        => 'Todas páginas (domínio $1)',
+'allnotinnamespace'     => 'Todas páginas (não no domínio $1)',
+'allpagesprev'          => 'Anterior',
+'allpagesnext'          => 'Próximo',
+'allpagessubmit'        => 'Ir',
+'allpagesprefix'        => 'Exibir páginas com o prefixo:',
+'allpagesbadtitle'    => 'O título de página dado encontrava-se inválido ou tinha um prefixo interlíngua ou inter-wiki. Poderá conter um ou mais caracteres que não podem ser utilizados em títulos.',
+
+# Special:Listusers
+'listusersfrom' => 'Mostrar utilizadores começando em:',
+
+# E this user
+#
+'mailnologin'   => 'Nenhum endereço de envio',
+'mailnologintext' => "Necessita de estar [[Special:Userlogin|autenticado]]
+e de possuir um endereço de e-mail válido nas suas [[Special:Preferences|preferências]]
+para enviar um e-mail a outros utilizadores.",
+'emailuser'             => 'Contactar este utilizador',
+'emailpage'             => 'Contactar utilizador',
+'emailpagetext' => 'Se o utilizador introduziu um endereço válido de e-mail
+nas suas preferências, poderá usar o formulário abaixo para lhe enviar uma mensagem.
+O endereço que introduziu nas suas preferências irá aparecer no campo "From" do e-mail
+para que o destinatário lhe possa responder.',
+'usermailererror' => 'Objecto de correio retornou um erro:',
+'defemailsubject'  => "E-mail: {{SITENAME}}",
+'noemailtitle'  => 'Sem endereço de e-mail',
+'noemailtext'   => 'Este utilizador não especificou um endereço de e-mail válido, ou optou por não receber e-mail de outros utilizadores.',
+'emailfrom'             => 'De',
+'emailto'               => 'Para',
+'emailsubject'  => 'Assunto',
+'emailmessage'  => 'Mensagem',
+'emailsend'             => 'Enviar',
+'emailsent'             => 'E-mail enviado',
+'emailsenttext' => 'A sua mensagem foi enviada.',
+
+# Watchlist
+#
+'watchlist'                     => 'Artigos vigiados',
+'mywatchlist'                     => 'Artigos vigiados',
+'watchlistfor' => "(para '''$1''')",
+'nowatchlist'           => 'Não existem itens na sua lista de artigos vigiados.',
+'watchlistanontext' => 'Por favor $1 para ver ou editar os itens na sua lista de artigos vigiados.',
+'watchlistcount'     => "'''Tem {{PLURAL:$1|$1 item|$1 items}} na sua lista de artigos vigiados, incluindo páginas de discussão.'''",
+'clearwatchlist'     => 'Limpar lista de artigos vigiados',
+'watchlistcleartext' => 'Tem a certeza que deseja removê-los?',
+'watchlistclearbutton' => 'Limpar',
+'watchlistcleardone' => 'A sua lista de artigos vigiados foi limpa. {{PLURAL:$1|$1 item foi removido|$1 items foram removidos}}.',
+'watchnologin'          => 'Não está autenticado',
+'watchnologintext'      => 'Deve estar [[Special:Userlogin|autenticado]] para modificar a sua lista de artigos vigiados.',
+'addedwatch'            => 'Adicionado à lista',
+'addedwatchtext'        => "A página \"$1\" foi adicionada à sua [[Special:Watchlist|lista de artigos vigiados]].
+Modificações futuras neste artigo e páginas de discussão associadas serão listadas lá e a página aparecerá a '''negrito''' na [[Especial:Recentchanges|lista de mudanças recentes]], para que possa encontrá-la com maior facilidade.
+
+Se desejar remover o artigo da sua lista de artigos vigiados, clique em \"Desinteressar-se\" na barra lateral ou de topo.",
+'removedwatch'          => 'Removida da lista de artigos vigiados',
+'removedwatchtext'      => "A página \"$1\" não é mais de seu interesse e portanto foi removida de sua lista de artigos vigiados",
+'watch' => 'Vigiar',
+'watchthispage'         => 'Vigiar esta página',
+'unwatch' => 'Desinteressar-se',
+'unwatchthispage'       => 'Parar de vigiar esta página',
+'notanarticle'          => 'Não é um artigo',
+'watchnochange'         => 'Nenhum dos itens vigiados foram editados no período exibido.',
+'watchdetails'          => '* {{PLURAL:$1|$1 página vigiada|$1 páginas vigiadas}}, excluindo páginas de discussão
+* [[Especial:Watchlist/edit|Mostrar e editar a lista completa]]
+* [[Especial:Watchlist/clear|Remover todas as páginas]]',
+'wlheader-enotif'               => "* Notificação por email encontra-se activada.",
+'wlheader-showupdated'   => "* Páginas modificadas desde a sua última visita são mostradas a '''negrito'''",
+'watchmethod-recent'=> 'verificando edições recentes para os artigos vigiados',
+'watchmethod-list'      => 'verificando páginas vigiadas para edições recentes',
+'removechecked'         => 'Remover itens seleccionados',
+'watchlistcontains' => "Sua lista contém $1 páginas.",
+'watcheditlist'         => 'Aqui está uma lista alfabética de sua lista de artigos vigiados. Marque as caixas dos artigos que você deseja remover da lista e clique no botão \'Remover itens seleccionados\' na parte de baixo do ecrã (removendo uma página de discussão remove também a página associada e vice versa).',
+'removingchecked'       => 'Removendo os itens solicitados de sua lista de artigos vigiados...',
+'couldntremove'         => "Não foi possível remover o item '$1'...",
+'iteminvalidname'       => "Problema com item '$1', nome inválido...",
+'wlnote'                => 'Abaixo as últimas $1 mudanças nas últimas <b>$2</b> horas.',
+'wlshowlast'            => 'Ver últimas $1 horas $2 dias $3',
+'wlsaved'               => 'Esta é uma versão salva de sua lista de artigos vigiados.',
+'wlhideshowown'         => '$1 minhas edições',
+'wlhideshowbots'        => '$1 edições por robôs',
+'wldone'            => 'Concluído.',
+
+'enotif_mailer'                 => '{{SITENAME}} Correio de Notificação',
+'enotif_reset'                  => 'Marcar todas páginas como visitadas',
+'enotif_newpagetext'=> 'Isto é uma nova página.',
+'changed'                       => 'alterada',
+'created'                       => 'criada',
+'enotif_subject'        => '{{SITENAME}}: A página $PAGETITLE foi $CHANGEDORCREATED por $PAGEEDITOR',
+'enotif_lastvisited' => 'Consulte $1 para todas as alterações efectuadas desde a sua última visita.',
+'enotif_body' => 'Caro $WATCHINGUSERNAME,
+
+A página $PAGETITLE na {{SITENAME}} foi $CHANGEDORCREATED a $PAGEEDITDATE por $PAGEEDITOR, consulte $PAGETITLE_URL para a versão actual.
+
+$NEWPAGE
+
+Sumário de editor: $PAGESUMMARY $PAGEMINOREDIT
+
+Contacte o editor:
+email: $PAGEEDITOR_EMAIL
+wiki: $PAGEEDITOR_WIKI
+
+Não haverá mais notificações no caso de futuras alterações a não ser que visite esta página. Poderá também restaurar as bandeiras de notificação para todas as suas páginas vigiadas na sua lista de artigos vigiados.
+
+             O seu sistema de notificação amigável da {{SITENAME}}
+
+--
+Para alterar as suas preferências da lista de artigos vigiados, visite
+{{fullurl:Special:Watchlist/edit}}
+
+Contacto e assistência
+{{fullurl:Ajuda:Conteúdos}}',
+
+# Delete/protect/revert
+#
+'deletepage'    => 'Eliminar página',
+'confirm'               => 'Confirmar',
+'excontent' => "conteúdo era: '$1'",
+'excontentauthor' => "conteúdo era: '$1' (e o único editor era '[[Especial:Contributions/$2|$2]]')",
+'exbeforeblank' => "conteúdo antes de esvaziar era: '$1'",
+'exblank' => 'página esvaziada',
+'confirmdelete' => 'Confirmar eliminação',
+'deletesub'             => "(Eliminando \"$1\")",
+'historywarning' => 'Aviso: A página que está prestes a eliminar possui um histórico:',
+'confirmdeletetext' => "Encontra-se prestes a eliminar permanentemente uma página ou uma imagem e todo o seu histórico da base de dados.
+Por favor confirme que entende fazer isto, e que compreende as consequências, e que encontra-se a fazer isto de acordo com a [[{{ns:project}}:Política de eliminação|Política de eliminação]] do projecto.",
+'actioncomplete' => 'Acção completada',
+'deletedtext'   => "\"$1\" foi eliminada.
+Consulte $2 para um registo de eliminações recentes.",
+'deletedarticle' => "eliminada \"[[$1]]\"",
+'dellogpage'    => 'Registo de eliminação',
+'dellogpagetext' => 'Abaixo uma lista das eliminações mais recentes.',
+'deletionlog'   => 'registo de eliminação',
+'reverted'              => 'Revertido para versão mais nova',
+'deletecomment' => 'Motivo de eliminação',
+'imagereverted' => 'Reversão para versão mais nova foi bem sucedida.',
+'rollback'              => 'Voltar edições',
+'rollback_short' => 'Voltar',
+'rollbacklink'  => 'voltar',
+'rollbackfailed' => 'Reversão falhou',
+'cantrollback'  => 'Não foi possível reverter a edição; o último contribuidor é o único autor deste artigo',
+'alreadyrolled' => "Não foi possível reverter as edições de [[:$1]]
+por [[{{ns:user}}:$2|$2]] ([[{{ns:user_talk}}:$2|Discussão]]); alguém editou ou já reverteu o artigo.
+
+A última edição foi de [[{{ns:user}}:$3|$3]] ([[{{ns:user_talk}}:$3|Discussão]]).",
+
+#   only shown if there is an edit comment
+'editcomment' => "O sumário de edição era: \"<i>$1</i>\".",
+'revertpage'    => "Revertidas edições por $2, para a última versão por $1",
+'sessionfailure' => 'Foram detectados problemas com a sua sessão;
+Esta acção foi cancelada como medida de protecção contra a intercepção de sessões.
+Experimente usar o botão "Voltar atrás" e refrescar a página de onde veio, e repita o processo.',
+'protectlogpage' => 'Registo de protecção',
+'protectlogtext' => "Abaixo encontra-se o registo de protecção e desprotecção de páginas.
+Veja [[{{ns:project}}:Página protegida]] para mais informações.",
+'protectedarticle' => 'protegeu "[[$1]]"',
+'unprotectedarticle' => 'desprotegeu "[[$1]]"',
+'protectsub' => '(Protegendo "$1")',
+'confirmprotecttext' => 'Deseja realmente proteger esta página?',
+'confirmprotect' => 'Confirmar protecção',
+'protectmoveonly' => 'Impedir apenas que a página seja movida.',
+'protectcomment' => 'Motivo de protecção',
+'unprotectsub' =>"(Desprotegendo \"$1\")",
+'confirmunprotecttext' => 'Deseja realmente desproteger esta página?',
+'confirmunprotect' => 'Confirmar desprotecção',
+'unprotectcomment' => 'Motivo de desprotecção',
+'protect-unchain' => 'Desbloquear permissões de moção',
+'protect-text' => 'Pode ver e alterar aqui, o nível de protecção para a página <strong>$1</strong>.
+Por favor tenha a certeza que segue as [[{{ns:project}}:Página protegida|normas do projecto]].',
+'protect-viewtext' => 'A sua conta de utilizador não tem permissões para alterar
+os níveis de protecção desta página. Estas são as configurações actuais para a página <strong>$1</strong>:',
+'protect-default' => '(padrão)',
+'protect-level-autoconfirmed' => 'Bloquear utilizadores não-registados',
+'protect-level-sysop' => 'Administradores apenas',
+
+# restrictions (nouns)
+'restriction-edit' => 'Editar',
+'restriction-move' => 'Mover',
+
+# Undelete
+'undelete' => 'Ver páginas eliminadas',
+'undeletepage' => 'Ver e restaurar páginas eliminadas',
+'viewdeletedpage' => 'Ver páginas eliminadas',
+'undeletepagetext' => 'As páginas seguintes foram eliminadas mas ainda permanecem na base de dados e podem ser restauradas. O arquivo pode ser limpo periodicamente.',
+'undeleteextrahelp' => "Para restaurar a página inteira, deixe todas as caixas de selecção desseleccionadas e
+clique em '''''Restaurar'''''. Para efectuar uma restauração selectiva, seleccione as caixas correspondentes às
+revisões a serem restauradas, e clique em '''''Restaurar'''''. Clicar em '''''Limpar''''' irá limpar o
+campo de comentário e todas as caixas de selecção.",
+'undeletearticle' => 'Restaurar artigo eliminado',
+'undeleterevisions' => "$1 revisões arquivadas",
+'undeletehistory' => 'Se restaurar uma página, todas as revisões serão restauradas para o histórico.
+Se uma nova página foi criada com o mesmo nome desde a eliminação, as revisões restauradas aparecerão primeiro no histórico e a página actual não será automaticamente trocada.',
+'undeletehistorynoadmin' => 'Este artigo foi eliminado. O motivo para a eliminação é apresentado no súmario abaixo, junto dos detalhes do utilizador que editou esta página antes de eliminar. O texto actual destas revisões eliminadas encontra-se agora apenas disponível para administradores.',
+'undeleterevision' => "Revisões eliminadas de $1",
+'undeletebtn' => 'Restaurar',
+'undeletereset' => 'Limpar',
+'undeletecomment' => 'Comentário:',
+'undeletedarticle' => "restaurado \"[[$1]]\"",
+'undeletedrevisions' => "$1 revisões restauradas",
+'undeletedrevisions-files' => "$1 revisões e $2 ficheiro(s) restauradas",
+'undeletedfiles' => "{{PLURAL:$1|ficheiro restaurado|$1 ficheiros restaurados}}",
+'cannotundelete' => 'Restauração falhada; alguém poderá já ter restaurado a página primeiro.',
+'undeletedpage' => "<big>'''$1 foi restaurada'''</big>
+
+Consulte o [[Special:Log/delete|registo de eliminações]] para um registo das eliminações e restaurações mais recentes.",
+
+# Namespace form on various pages
+'namespace' => 'Domínio:',
+'invert' => 'Inverter selecção',
+
+# Contributions
+#
+'contributions' => 'Contribuições do utilizador',
+'mycontris'     => 'Minhas contribuições',
+'contribsub2'    => "Para $1 ($2)",
+'nocontribs'    => 'Não foram encontradas mudanças com este critério.',
+'ucnote'        => "Segue as últimas <b>$1</b> mudanças nos últimos <b>$2</b> dias deste utilizador.",
+'uclinks'       => "Ver as últimas $1 mudanças; ver os últimos $2 dias.",
+'uctop'         => ' (revisão actual)' ,
+'newbies'       => 'novatos',
+
+'sp-newimages-showfrom' => 'Mostrar novas imagens começando de $1',
+
+'sp-contributions-newest' => 'Mais recente',
+'sp-contributions-oldest' => 'Mais antigo',
+'sp-contributions-newer'  => 'Novo $1',
+'sp-contributions-older'  => 'Antigo $1',
+'sp-contributions-newbies-sub' => 'Para novatos',
+
+# What links here
+#
+'whatlinkshere' => 'Artigos afluentes',
+'notargettitle' => 'Sem alvo',
+'notargettext'  => 'Não especificou uma página alvo ou utilizador para executar esta função.',
+'linklistsub'   => '(Lista de ligações)',
+'linkshere'             => "Os seguintes artigos contêm ligações para '''[[:$1]]''':",
+'nolinkshere'   => "Não existem ligações para '''[[:$1]]'''.",
+'isredirect'    => 'página de redireccionamento',
+'istemplate'    => 'inclusão',
+
+# Block/unblock IP
+#
+'blockip'               => 'Bloquear utilizador',
+'blockiptext'   => "Utilize o formulário abaixo para bloquear o acesso à escrita de um endereço específico de IP ou nome de utilizador.
+Isto só deve ser feito para prevenir vandalismo, e de acordo com a [[{{ns:project}}:Política|política da {{SITENAME}}]]. Preencha com um motivo específico (por exemplo, citando páginas que sofreram vandalismo).",
+'ipaddress'             => 'Endereço de IP',
+'ipadressorusername' => 'Endereço de IP ou nome de utilizador',
+'ipbexpiry'             => 'Prazo',
+'ipbreason'             => 'Motivo',
+'ipbanononly'   => 'Bloquear apenas utilizadores anónimos',
+'ipbcreateaccount' => 'Prevenir criação de conta de utilizador',
+'ipbsubmit'             => 'Bloquear este utilizador',
+'ipbother'              => 'Outro tempo',
+'ipboptions'            => '2 horas:2 hours,1 dia:1 day,3 dias:3 days,1 semana:1 week,2 semanas:2 weeks,1 mês:1 month,3 meses:3 months,6 meses:6 months,1 ano:1 year,infinito:infinite',
+'ipbotheroption'        => 'outro',
+'badipaddress'  => 'O endereço de IP inválido',
+'blockipsuccesssub' => 'Bloqueio bem sucedido',
+'blockipsuccesstext' => '[[{{ns:Special}}:Contributions/$1|$1]] foi bloqueado.<br />Consulte a [[Special:Ipblocklist|lista de IPs bloqueados]] para rever os bloqueios.',
+'unblockip'             => 'Desbloquear utilizador',
+'unblockiptext' => 'Utilize o formulário a seguir para restaurar o acesso à escrita para um endereço de IP ou nome de utilizador previamente bloqueado.',
+'ipusubmit'             => 'Desbloquear este utilizador',
+'unblocked' => '[[User:$1|$1]] foi desbloqueado',
+'ipblocklist'   => 'Lista de IPs bloqueados',
+'blocklistline' => "$1, $2 bloqueou $3 ($4)",
+'ipblocklistempty'      => 'A lista de IPs bloqueados encontra-se vazia.',
+'infiniteblock' => 'infinito',
+'expiringblock' => 'expira em $1',
+'anononlyblock' => 'anón. apenas',
+'createaccountblock' => 'criação de conta de utilizador bloqueada',
+'blocklink'             => 'bloquear',
+'unblocklink'   => 'desbloquear',
+'contribslink'  => 'contribs',
+'autoblocker'   => "Foi automaticamente bloqueado pois partilha um endereço de IP com \"$1\". Motivo é: \"$2\".",
+'blocklogpage'  => 'Registo de bloqueio',
+'blocklogentry' => 'bloqueou \"[[$1]]\" com um tempo de expiração de $2',
+'blocklogtext'  => 'Isto é um registo de acções de bloqueio e desbloqueio. Endereços IP sujeitos a bloqueio automático não são listados. Consulte a [[Special:Ipblocklist|lista de IPs bloqueados]] para obter a lista de bloqueios operativos e bloqueios actualmente válidos.',
+'unblocklogentry'       => 'desbloqueou $1',
+'range_block_disabled'  => 'A funcionalidade de bloquear gamas de IPs encontra-se desactivada.',
+'ipb_expiry_invalid'    => 'Tempo de expiração inválido.',
+'ipb_already_blocked' => '"$1" já encontra-se bloqueado',
+'ip_range_invalid'      => "Gama de IPs inválida.",
+'proxyblocker'  => 'Bloqueador de proxy',
+'ipb_cant_unblock' => 'Erro: Bloqueio com ID $1 não encontrado. Poderá já ter sido desbloqueado.',
+'proxyblockreason'      => 'O seu endereço de IP foi bloqueado por ser um proxy público. Por favor contacte o seu fornecedor do serviço de Internet ou o apoio técnico e informe-os deste problema de segurança grave.',
+'proxyblocksuccess'     => "Terminado.",
+'sorbs'         => 'SORBS DNSBL',
+'sorbsreason'   => 'O seu endereço IP encontra-se listado como proxy aberto em [http://www.sorbs.net SORBS] DNSBL.',
+'sorbs_create_account_reason' => 'O seu endereço de IP encontra-se listado como proxy aberto no [http://www.sorbs.net SORBS] DNSBL. Não pode criar uma conta',
+
+# Developer tools
+#
+'lockdb'                => 'Trancar base de dados',
+'unlockdb'              => 'Destrancar base de dados',
+'lockdbtext'    => 'Trancar a base de dados suspenderá a habilidade de todos os utilizadores de editarem páginas, mudarem suas preferências, lista de artigos vigiados e outras coisas que requerem mudanças na base de dados.<br />
+Por favor confirme que realmente pretende fazer isso, e que vai destrancar a base de dados quando a manutenção estiver concluída.',
+'unlockdbtext'  => 'Desbloquear a base de dados vai restaurar a habilidade de todos os utilizadores de editar  artigos,  mudar suas preferências, editar suas listas de artigos vigiados e outras coisas que requerem mudanças na base de dados. Por favor , confirme que realmente pretende fazer isso.',
+'lockconfirm'   => 'Sim, eu realmente desejo bloquear a base de dados.',
+'unlockconfirm' => 'Sim, eu realmente desejo desbloquear a base de dados.',
+'lockbtn'               => 'Bloquear base de dados',
+'unlockbtn'             => 'Desbloquear base de dados',
+'locknoconfirm' => 'Não marcou a caixa de confirmação.',
+'lockdbsuccesssub' => 'Bloqueio bem sucedido',
+'unlockdbsuccesssub' => 'Desbloqueio bem sucedido',
+'lockdbsuccesstext' => 'A base de dados da {{SITENAME}} foi bloqueada.
+<br />Lembre-se de remover o bloqueio após a manutenção.',
+'unlockdbsuccesstext' => 'A base de dados foi desbloqueada.',
+'lockfilenotwritable' => 'O ficheiro de bloqueio da base de dados não pode ser escrito. Para bloquear ou desbloquear a base de dados, este precisa de poder ser escrito pelo servidor Web.',
+'databasenotlocked' => 'A base de dados não encontra-se bloqueada.',
+
+# Make sysop
+'rightslog'         => 'Registo de direitos de utilizador',
+'rightslogtext'     => 'Este é um registo de mudanças nos direitos dos utilizadores.',
+'rightslogentry'    => "Alterado grupo do membro de $1 de $2 para $3",
+'rightsnone'            => '(nenhum)',
+
+# Move page
+#
+'movepage'              => 'Mover página',
+'movepagetext'  => 'Utilizando o seguinte formulário poderá renomear uma página, movendo todo o histórico para o novo título. O título antigo será transformado num redireccionamento para o novo.
+Links para as páginas antigas não serão mudados; certifique-se de [[Especial:Maintenance|verificar]] redireccionamentos quebrados ou artigos duplos. Você é responsável por certificar-se que os links continuam apontando para onde eles deveriam apontar.
+
+Note que a página \'\'\'não\'\'\' será movida se já existir uma página com o novo título, a não ser que ele esteja vazio ou seja um redircecionamento e não tenha histórico de edições. Isto significa que pode renomear uma página de volta para o nome que tinha antigamente se cometer algum engano e que não pode sobrescrever uma página.
+
+<b>CUIDADO!!!</b>
+Isto pode ser uma mudança drástica e inesperada para uma página popular; por favor, tenha certeza de que compreende as consequências da mudança antes de avançar.',
+'movepagetalktext' => 'A página de "discussão" associada, se existir, será automaticamente movida, \'\'\'a não ser que:\'\'\'
+*Você esteja movendo uma página estre namespaces,
+*Uma página de discussão (não-vazia) já exista sob o novo título, ou
+*Você não marque a caixa abaixo.
+
+Nestes casos, você terá que mover ou mesclar a página manualmente, se desejar.',
+'movearticle'   => 'Mover página',
+'movenologin'   => 'Não autenticado',
+'movenologintext' => "Deve ser um utilizador registado e [[Special:Userlogin|autenticado]]
+para mover uma página.",
+'newtitle'              => 'Para novo título',
+'movepagebtn'   => 'Mover página',
+'pagemovedsub'  => 'Página movida com sucesso',
+'pagemovedtext' => "Página \"[[$1]]\" movida para \"[[$2]]\".",
+'articleexists' => 'Uma página com este título já existe, ou o título que escolheu é inválido.
+Por favor, escolha outro nome.',
+'talkexists'    => "'''A página em si foi movida com sucesso, porém a página de discussão não pode ser movida, pois, já existe uma com este título. Por favor, mescle-as manualmente.'''",
+'movedto'               => 'movido para',
+'movetalk'              => 'Mover também a página de discussão associada.',
+'talkpagemoved' => 'A página de \"discussão\" correspondente foi movida com sucesso.',
+'talkpagenotmoved' => 'A página de discussão correspondente <strong>não</strong> foi movida.',
+'1movedto2'             => "[[$1]] movido para [[$2]]",
+'1movedto2_redir' => '[[$1]] movido para [[$2]] sob redireccionamento',
+'movelogpage' => 'Registo de movimento',
+'movelogpagetext' => 'Abaixo encontra-se uma lista de páginas movidas.',
+'movereason'    => 'Motivo',
+'revertmove'    => 'reverter',
+'delete_and_move' => 'Eliminar e mover',
+'delete_and_move_text'  =>
+'==Eliminação necessária==
+O artigo destinatário "[[$1]]" já existe. Deseja eliminá-lo de modo a poder mover a página?',
+'delete_and_move_confirm' => 'Sim, eliminar a página',
+'delete_and_move_reason' => 'Eliminada para poder mover outra página para este título',
+'selfmove' => "O título fonte e o título destinatário são os mesmos; não é possível mover uma página para o mesmo sítio.",
+'immobile_namespace' => "O título destinatário é de um tipo especial; não é possível mover páginas para esse domínio.",
+
+# Export
+
+'export'                => 'Exportação de páginas',
+'exporttext'    => 'É possível exportar o texto e o histórico de edições de uma página em particular num ficheiro XML. Poderá então importar esse conteúdo noutra wiki que utilize o software MediaWiki através da página Especial:Import, ou transformar o conteúdo (via XSLT), ou ainda manter o ficheiro por motivos particulares.
+
+Para exportar páginas, introduza os títulos na caixa de texto abaixo, um título por linha, e seleccione se deseja apenas a versão actual ou todas versões.
+
+Se desejar pode utilizar uma ligação, por exemplo [[{{ns:Special}}:Export/{{Mediawiki:mainpage}}]] para o artigo [[{{Mediawiki:mainpage}}]].',
+'exportcuronly' => 'Incluir apenas a revisão actual, não o histórico inteiro',
+'exportnohistory' => "----
+'''Nota:''' a exportação da história completa das páginas através deste formulário foi desactivada devido a motivos de performance.",
+'export-submit' => 'Exportar',
+
+# Namespace 8 related
+
+'allmessages'   => 'Todas mensagens de sistema',
+'allmessagesname' => 'Nome',
+'allmessagesdefault' => 'Texto padrão',
+'allmessagescurrent' => 'Texto actual',
+'allmessagestext'       => 'Esta é uma lista de todas mensagens de sistema disponíveis no domínio MediaWiki:.',
+'allmessagesnotsupportedUI' => 'O seu actual idioma de interface <b>$1</b> não é suportado pelo Especial:Allmessages deste sítio.',
+'allmessagesnotsupportedDB' => 'Especial:Allmessages não pode ser utilizado devido ao wgUseDatabaseMessages estar desligado.',
+'allmessagesfilter' => 'Filtro de nome de mensagem:',
+'allmessagesmodified' => 'Mostrar apenas modificados',
+
+# Thumbnails
+
+'thumbnail-more'        => 'Ampliar',
+'missingimage'          => "<b>Imagem não encontrada</b><br /><i>$1</i>",
+'filemissing'           => 'Ficheiro não encontrado',
+'thumbnail_error'   => 'Erro ao criar miniatura: $1',
+
+# Special:Import
+'import'        => 'Importar páginas',
+'importinterwiki' => 'Importação transwiki',
+'import-interwiki-text' => 'Seleccione uma wiki e um título de página a importar.
+As datas das revisões e os seus editores serão mantidos.
+Todas as acções de importação transwiki são registadas no [[Special:Log/import|Registo de importações]].',
+'import-interwiki-history' => 'Copiar todas revisões para esta página',
+'import-interwiki-submit' => 'Importar',
+'import-interwiki-namespace' => 'Transferir páginas para o domínio:',
+'importtext'    => 'Por favor exporte o ficheiro da fonte wiki utilizando o utilitário Especial:Export, salve o ficheiro para o seu disco e importe-o aqui.',
+'importstart'    => "Importando páginas...",
+'import-revision-count' => '$1 {{PLURAL:$1|revisão|revisões}}',
+'importnopages'    => "Não existem páginas a importar.",
+'importfailed'  => "Importação falhou: $1",
+'importunknownsource'    => "Tipo de fonte de importação desconhecida",
+'importcantopen'    => "Não foi possível abrir o ficheiro de importação",
+'importbadinterwiki'    => "Ligação de interwiki incorrecta",
+'importnotext'  => 'Vazio ou sem texto',
+'importsuccess' => 'Importação bem sucedida!',
+'importhistoryconflict' => 'Existem conflitos de revisões no histórico (poderá já ter importado esta página antes)',
+'importnosources' => 'Não foram definidas fontes de importação transwiki e o carregamento directo de históricos encontra-se desactivado.',
+'importnofile' => 'Nenhum ficheiro de importação foi carregado.',
+'importuploaderror' => 'O carregamento do ficheiro de importação falhou; talvez o ficheiro seja maior do que o tamanho de carregamento permitido.',
+
+# import log
+'importlogpage' => 'Registo de importações',
+'importlogpagetext' => 'Importações administrativas de páginas com revisões noutras wikis.',
+'import-logentry-upload' => 'importado [[$1]] através de ficheiro de importação',
+'import-logentry-upload-detail' => '{{PLURAL:$1|revisão|revisões}}',
+'import-logentry-interwiki' => 'transwiki $1',
+'import-logentry-interwiki-detail' => '{{PLURAL:$1|revisão|revisões}} de $2',
+
+# Keyboard access keys for power users
+'accesskey-search' => 'f',
+'accesskey-minoredit' => 'i',
+'accesskey-save' => 's',
+'accesskey-preview' => 'p',
+'accesskey-diff' => 'v',
+'accesskey-compareselectedversions' => 'v',
+'accesskey-watch' => 'w',
+
+# tooltip help for some actions, most are in Monobook.js
+'tooltip-search' => 'Pesquisar na {{SITENAME}}',
+'tooltip-minoredit' => 'Marcar como edição menor',
+'tooltip-save' => 'Salvar as alterações',
+'tooltip-preview' => 'Prever as alterações, por favor utilizar antes de salvar!',
+'tooltip-diff' => 'Mostrar alterações que fez a este texto.',
+'tooltip-compareselectedversions' => 'Ver as diferenças entre as duas versões seleccionadas desta página.',
+'tooltip-watch' => 'Adicionar esta página à sua lista de artigos vigiados',
+
+# stylesheets
+'common.css' => '/** o código CSS colocado aqui será aplicado a todos os temas */',
+'monobook.css' => '/* o código CSS colocado aqui terá efeito nos utilizadores do tema Monobook */',
+
+# Metadata
+'nodublincore' => 'Dublin Core RDF metadata disabled for this server.',
+'nocreativecommons' => 'Creative Commons RDF metadata disabled for this server.',
+'notacceptable' => 'O servidor não pode fornecer os dados num formato que o seu cliente possa ler.',
+
+# Attribution
+
+'anonymous' => 'Utilizador(es) anónimo(s) da {{SITENAME}}',
+'siteuser' => '{{SITENAME}} utilizador $1',
+'lastmodifiedatby' => 'Esta página foi modificada pela última vez a $2, $1 por $3.',
+'and' => 'e',
+'othercontribs' => 'Baseado no trabalho de $1.',
+'others' => 'outros',
+'siteusers' => '{{SITENAME}} utilizador(es) $1',
+'creditspage' => 'Créditos da página',
+'nocredits' => 'Não há informação disponível sobre os créditos desta página.',
+
+# Spam protection
+
+'spamprotectiontitle' => 'Filtro de protecção contra spam',
+'spamprotectiontext' => 'A página que deseja salvar foi bloqueada pelo filtro de spam. Tal bloqueio foi provavelmente causado por uma ligação para um website externo.',
+'spamprotectionmatch' => 'O seguinte texto activou o filtro de spam: $1',
+'subcategorycount' => "{{PLURAL:$1|Existe uma subcategoria|Existem $1 subcategorias}} nesta categoria.",
+'categoryarticlecount' => "{{PLURAL:$1|Existe um artigo|Existem $1 artigos}} nesta categoria.",
+'listingcontinuesabbrev' => " cont.",
+'spambot_username' => 'MediaWiki limpeza de spam',
+'spam_reverting' => 'Revertendo para a última versão não contendo hiperligações para $1',
+'spam_blanking' => 'Todas revisões contendo hiperligações para $1, limpando',
+
+# Info page
+'infosubtitle' => 'Informação para página',
+'numedits' => 'Número de edições (artigo): $1',
+'numtalkedits' => 'Número de edições (página de discussão): $1',
+'numwatchers' => 'Number of watchers: $1',
+'numauthors' => 'Número de autores distintos (artigo): $1',
+'numtalkauthors' => 'Número de autores distintos (página de discussão): $1',
+
+# Math options
+'mw_math_png' => 'Gerar sempre PNG',
+'mw_math_simple' => 'HTML caso seja simples, caso contrário PNG',
+'mw_math_html' => 'HTML se possível, caso contrário PNG',
+'mw_math_source' => 'Deixar como TeX (para navegadores de texto)',
+'mw_math_modern' => 'Recomendado para navegadores modernos',
+'mw_math_mathml' => 'MathML se possível (experimental)',
+
+# Patrolling
+'markaspatrolleddiff'   => "Marcar como verificado",
+'markaspatrolledtext'   => "Marcar este artigo como verificado",
+'markedaspatrolled'     => "Marcado como verificado",
+'markedaspatrolledtext' => "A revisão seleccionada foi marcada como verificada.",
+'rcpatroldisabled'      => "Edições verificadas nas Mudanças Recentes desactivadas",
+'rcpatroldisabledtext'  => "A funcionalidade de Edições verificadas nas Mudanças Recentes está actualmente desactivada.",
+'markedaspatrollederror'  => "Não pode marcar como verificado",
+'markedaspatrollederrortext' => "Precisa de especificar uma revisão para marcar como verificado.",
+
+# Monobook.js: tooltips and access keys for monobook
+'monobook.js' => '/* Deprecated; use [[MediaWiki:common.js]] */',
+
+'accesskey-pt-userpage' => '.',
+'tooltip-pt-userpage' => 'Minha página de utilizador',
+'accesskey-pt-anonuserpage' => '.',
+'tooltip-pt-anonuserpage' => 'A página de utilizador para o ip que está a utilizar para editar',
+'accesskey-pt-mytalk' => 'n',
+'tooltip-pt-mytalk' => 'Minha página de discussão',
+'accesskey-pt-anontalk' => 'n',
+'tooltip-pt-anontalk' => 'Discussão sobre edições deste endereço de ip',
+'accesskey-pt-preferences' => '',
+'tooltip-pt-preferences' => 'Minhas preferências',
+'accesskey-pt-watchlist' => 'l',
+'tooltip-pt-watchlist' => 'Lista de artigos vigiados.',
+'accesskey-pt-mycontris' => 'y',
+'tooltip-pt-mycontris' => 'Lista das minhas contribuições',
+'accesskey-pt-login' => 'o',
+'tooltip-pt-login' => 'You are encouraged to log in, it is not mandatory however.',
+'accesskey-pt-anonlogin' => 'o',
+'tooltip-pt-anonlogin' => 'You are encouraged to log in, it is not mandatory however.',
+'accesskey-pt-logout' => '',
+'tooltip-pt-logout' => 'Sair',
+'accesskey-ca-talk' => 't',
+'tooltip-ca-talk' => 'Discussão sobre o conteúdo da página',
+'accesskey-ca-edit' => 'e',
+'tooltip-ca-edit' => 'Você pode editar esta página. Por favor, utilize o botão Mostrar Previsão antes de salvar.',
+'accesskey-ca-addsection' => '+',
+'tooltip-ca-addsection' => 'Adicionar comentário a essa discussão.',
+'accesskey-ca-viewsource' => 'e',
+'tooltip-ca-viewsource' => 'Esta página está protegida; você pode exibir seu código, no entanto.',
+'accesskey-ca-history' => 'h',
+'tooltip-ca-history' => 'Edições anteriores desta página.',
+'accesskey-ca-protect' => '=',
+'tooltip-ca-protect' => 'Proteger esta página',
+'accesskey-ca-delete' => 'd',
+'tooltip-ca-delete' => 'Apagar esta página',
+'accesskey-ca-undelete' => 'd',
+'tooltip-ca-undelete' => 'Restaurar edições feitas a esta página antes da eliminação',
+'accesskey-ca-move' => 'm',
+'tooltip-ca-move' => 'Mover esta página',
+'accesskey-ca-watch' => 'w',
+'tooltip-ca-watch' => 'Adicionar esta página aos artigos vigiados',
+'accesskey-ca-unwatch' => 'w',
+'tooltip-ca-unwatch' => 'Remover esta página dos artigos vigiados',
+'accesskey-search' => 'f',
+'tooltip-search' => 'Pesquisar nesta wiki',
+'accesskey-p-logo' => '',
+'tooltip-p-logo' => 'Página principal',
+'accesskey-n-mainpage' => 'z',
+'tooltip-n-mainpage' => 'Visitar a página principal',
+'accesskey-n-portal' => '',
+'tooltip-n-portal' => 'Sobre o projecto',
+'accesskey-n-currentevents' => '',
+'tooltip-n-currentevents' => 'Informação temática sobre eventos actuais',
+'accesskey-n-recentchanges' => 'r',
+'tooltip-n-recentchanges' => 'A lista de mudanças recentes nesta wiki.',
+'accesskey-n-randompage' => 'x',
+'tooltip-n-randompage' => 'Carregar página aleatória',
+'accesskey-n-help' => '',
+'tooltip-n-help' => 'Um local reservado para auxílio.',
+'accesskey-n-sitesupport' => '',
+'tooltip-n-sitesupport' => 'Ajude-nos',
+'accesskey-t-whatlinkshere' => 'j',
+'tooltip-t-whatlinkshere' => 'Lista de todas as páginas que ligam-se a esta',
+'accesskey-t-recentchangeslinked' => 'k',
+'tooltip-t-recentchangeslinked' => 'Mudanças recentes em páginas relacionadas a esta',
+'accesskey-feed-rss' => '',
+'tooltip-feed-rss' => 'Feed RSS desta página',
+'accesskey-feed-atom' => '',
+'tooltip-feed-atom' => 'Feed Atom desta página',
+'accesskey-t-contributions' => '',
+'tooltip-t-contributions' => 'Ver as contribuições deste utilizador',
+'accesskey-t-emailuser' => '',
+'tooltip-t-emailuser' => 'Enviar um e-mail a este utilizador',
+'accesskey-t-upload' => 'u',
+'tooltip-t-upload' => 'Carregar imagens ou ficheiros media',
+'accesskey-t-specialpages' => 'q',
+'tooltip-t-specialpages' => 'Lista de páginas especiais',
+'accesskey-ca-nstab-main' => 'c',
+'tooltip-ca-nstab-main' => 'Ver o conteúdo da página',
+'accesskey-ca-nstab-user' => 'c',
+'tooltip-ca-nstab-user' => 'Ver a página de utilizador',
+'accesskey-ca-nstab-media' => 'c',
+'tooltip-ca-nstab-media' => 'Ver a página de media',
+'accesskey-ca-nstab-special' => '',
+'tooltip-ca-nstab-special' => 'Esta é uma página especial, não pode ser editada.',
+'accesskey-ca-nstab-project' => 'a',
+'tooltip-ca-nstab-project' => 'Ver a página de projecto',
+'accesskey-ca-nstab-image' => 'c',
+'tooltip-ca-nstab-image' => 'Ver a página de imagem',
+'accesskey-ca-nstab-mediawiki' => 'c',
+'tooltip-ca-nstab-mediawiki' => 'Ver a mensagem de sistema',
+'accesskey-ca-nstab-template' => 'c',
+'tooltip-ca-nstab-template' => 'Ver a predefinição',
+'accesskey-ca-nstab-help' => 'c',
+'tooltip-ca-nstab-help' => 'Ver a página de ajuda',
+'accesskey-ca-nstab-category' => 'c',
+'tooltip-ca-nstab-category' => 'Ver a página da categoria',
+
+# image deletion
+'deletedrevision' => 'Apagada versão antiga $1.',
+
+# browsing diffs
+'previousdiff' => '← Ver a alteração anterior',
+'nextdiff' => 'Ver a alteração posterior →',
+
+'imagemaxsize' => 'Limitar imagens nas páginas de descrição a:',
+'thumbsize'     => 'Tamanho de miniaturas:',
+'showbigimage' => 'Descarregar versão de maior resolução ($1x$2, $3 KB)',
+
+'newimages' => 'Galeria de novos ficheiros',
+'showhidebots' => '($1 robôs)',
+'noimages'  => 'Nada para ver.',
+
+# short names for language variants used for language conversion links.
+# to disable showing a particular link, set it to 'disable', e.g.
+# 'variantname-zh-sg' => 'disable',
+'variantname-zh-cn' => 'cn',
+'variantname-zh-tw' => 'tw',
+'variantname-zh-hk' => 'hk',
+'variantname-zh-sg' => 'sg',
+'variantname-zh' => 'zh',
+# variants for Serbian language
+'variantname-sr-ec' => 'sr-ec',
+'variantname-sr-el' => 'sr-el',
+'variantname-sr-jc' => 'sr-jc',
+'variantname-sr-jl' => 'sr-jl',
+'variantname-sr' => 'sr',
+
+# labels for User: and Title: on Special:Log pages
+'specialloguserlabel' => 'Utilizador:',
+'speciallogtitlelabel' => 'Título:',
+
+'passwordtooshort' => 'A sua palavra-chave é demasiado curta. Deve ter no mínimo $1 caracteres.',
+
+# Media Warning
+'mediawarning' => '\'\'\'Aviso\'\'\': Este ficheiro pode conter código malicioso, ao executar o seu sistema poderá estar comprometido.
+<hr />',
+
+'fileinfo' => '$1KB, tipo MIME: <code>$2</code>',
+
+# Metadata
+'metadata' => 'Metadata',
+'metadata-help' => 'Este ficheiro contém informação adicional, provavelmente adicionada a partir da câmara digital ou scanner utilizada para criar ou digitalizar a imagem. Caso o ficheiro tenha sido modificado a partir do seu estado original, alguns detalhes poderão não reflectir completamente as mudanças efectuadas.',
+'metadata-expand' => 'Mostrar restantes detalhes',
+'metadata-collapse' => 'Esconder restantes detalhes',
+#'metadata-fields' => 'Os campos EXIF metadata listados nesta mensagem serão
+#incluídos na apresentação da página de detalhes da imagem quando a tabela da metadata
+#for minimizada. Outros serão escondidos por defeito.
+#* make
+#* model
+#* datetimeoriginal
+#* exposuretime
+#* fnumber
+#* focallength', # ignore list
+# Exif tags
+'exif-imagewidth' =>'Largura',
+'exif-imagelength' =>'Altura',
+'exif-bitspersample' =>'Bits por componente',
+'exif-compression' =>'Esquema de compressão',
+'exif-photometricinterpretation' =>'Composição pixel',
+'exif-orientation' =>'Orientação',
+'exif-samplesperpixel' =>'Número de componentes',
+'exif-planarconfiguration' =>'Arranjo de dados',
+'exif-ycbcrsubsampling' =>'Subsampling ratio of Y to C',
+'exif-ycbcrpositioning' =>'Posicionamento Y e C',
+'exif-xresolution' =>'Resolução horizontal',
+'exif-yresolution' =>'Resolução vertical',
+'exif-resolutionunit' =>'Unit of X and Y resolution',
+'exif-stripoffsets' =>'Localização de dados da imagem',
+'exif-rowsperstrip' =>'Number of rows per strip',
+'exif-stripbytecounts' =>'Bytes per compressed strip',
+'exif-jpeginterchangeformat' =>'Offset to JPEG SOI',
+'exif-jpeginterchangeformatlength' =>'Bytes de dados JPEG',
+'exif-transferfunction' =>'Função de transferência',
+'exif-whitepoint' =>'White point chromaticity',
+'exif-primarychromaticities' =>'Chromaticities of primarities',
+'exif-ycbcrcoefficients' =>'Color space transformation matrix coefficients',
+'exif-referenceblackwhite' =>'Par de valores de referência de preto e branco',
+'exif-datetime' =>'Data e hora de modificação do ficheiro',
+'exif-imagedescription' =>'Título',
+'exif-make' =>'Fabricante da câmara',
+'exif-model' =>'Modelo da câmara',
+'exif-software' =>'Software utilizado',
+'exif-artist' =>'Autor',
+'exif-copyright' =>'Licença',
+'exif-exifversion' =>'Versão Exif',
+'exif-flashpixversion' =>'Versão de Flashpix suportada',
+'exif-colorspace' =>'Espaço de cor',
+'exif-componentsconfiguration' =>'Significado de cada componente',
+'exif-compressedbitsperpixel' =>'Modo de compressão de imagem',
+'exif-pixelydimension' =>'Largura de imagem válida',
+'exif-pixelxdimension' =>'Altura de imagem válida',
+'exif-makernote' =>'Anotações do fabricante',
+'exif-usercomment' =>'Comentários de utilizadores',
+'exif-relatedsoundfile' =>'Ficheiro áudio relacionado',
+'exif-datetimeoriginal' =>'Data e hora de geração de dados',
+'exif-datetimedigitized' =>'Data e hora de digitalização',
+'exif-subsectime' =>'DateTime subseconds',
+'exif-subsectimeoriginal' =>'DateTimeOriginal subseconds',
+'exif-subsectimedigitized' =>'DateTimeDigitized subseconds',
+'exif-exposuretime' =>'Tempo de exposição',
+'exif-exposuretime-format' => '$1 seg ($2)',
+'exif-fnumber' =>'Número F',
+'exif-fnumber-format' =>'f/$1',
+'exif-exposureprogram' =>'Programa de exposição',
+'exif-spectralsensitivity' =>'Spectral sensitivity',
+'exif-isospeedratings' =>'Taxa de velocidade ISO',
+'exif-oecf' =>'Factor optoelectrónico de conversão.',
+'exif-shutterspeedvalue' =>'Velocidade do obturador',
+'exif-aperturevalue' =>'Abertura',
+'exif-brightnessvalue' =>'Brilho',
+'exif-exposurebiasvalue' =>'Polarização de exposição',
+'exif-maxaperturevalue' =>'Abertura máxima',
+'exif-subjectdistance' =>'Distância do sujeito',
+'exif-meteringmode' =>'Metering mode',
+'exif-lightsource' =>'Fonte de luz',
+'exif-flash' =>'Flash',
+'exif-focallength' =>'Comprimento de foco da lente',
+'exif-focallength-format' =>'$1 mm',
+'exif-subjectarea' =>'Área de sujeito',
+'exif-flashenergy' =>'Energia do flash',
+'exif-spatialfrequencyresponse' =>'Spatial frequency response',
+'exif-focalplanexresolution' =>'Focal plane X resolution',
+'exif-focalplaneyresolution' =>'Focal plane Y resolution',
+'exif-focalplaneresolutionunit' =>'Focal plane resolution unit',
+'exif-subjectlocation' =>'Localização de sujeito',
+'exif-exposureindex' =>'Índice de exposição',
+'exif-sensingmethod' =>'Método de sensação',
+'exif-filesource' =>'Fonte do ficheiro',
+'exif-scenetype' =>'Tipo de cena',
+'exif-cfapattern' =>'CFA pattern',
+'exif-customrendered' =>'Custom image processing',
+'exif-exposuremode' =>'Modo de exposição',
+'exif-whitebalance' =>'White Balance',
+'exif-digitalzoomratio' =>'Digital zoom ratio',
+'exif-focallengthin35mmfilm' =>'Focal length in 35 mm film',
+'exif-scenecapturetype' =>'Tipo de captura de cena',
+'exif-gaincontrol' =>'Controlo de cena',
+'exif-contrast' =>'Contraste',
+'exif-saturation' =>'Saturação',
+'exif-sharpness' =>'Sharpness',
+'exif-devicesettingdescription' =>'Descrição das configurações do dispositivo',
+'exif-subjectdistancerange' =>'Distância de alcance do sujeito',
+'exif-imageuniqueid' =>'Identificação única da imagem',
+'exif-gpsversionid' =>'Versão de GPS',
+'exif-gpslatituderef' =>'Latitude Norte ou Sul',
+'exif-gpslatitude' =>'Latitude',
+'exif-gpslongituderef' =>'Longitude Leste ou Oeste',
+'exif-gpslongitude' =>'Longitude',
+'exif-gpsaltituderef' =>'Referência de altitude',
+'exif-gpsaltitude' =>'Altitude',
+'exif-gpstimestamp' =>'Tempo GPS (relógio atómico)',
+'exif-gpssatellites' =>'Satélites utilizados para a medição',
+'exif-gpsstatus' =>'Estado do receptor',
+'exif-gpsmeasuremode' =>'Modo da medição',
+'exif-gpsdop' =>'Precisão da medição',
+'exif-gpsspeedref' =>'Unidade da velocidade',
+'exif-gpsspeed' =>'Velocidade do receptor GPS',
+'exif-gpstrackref' =>'Referência para a direcção do movimento',
+'exif-gpstrack' =>'Direcção do movimento',
+'exif-gpsimgdirectionref' =>'Referência para a direcção da imagem',
+'exif-gpsimgdirection' =>'Direcção da imagem',
+'exif-gpsmapdatum' =>'Utilizados dados do estudo Geodetic',
+'exif-gpsdestlatituderef' =>'Referência para a latitude do destino',
+'exif-gpsdestlatitude' =>'Latitude do destino',
+'exif-gpsdestlongituderef' =>'Referência para a longitude do destino',
+'exif-gpsdestlongitude' =>'Longitude do destino',
+'exif-gpsdestbearingref' =>'Reference for bearing of destination',
+'exif-gpsdestbearing' =>'Bearing of destination',
+'exif-gpsdestdistanceref' =>'Referência de distância para o destino',
+'exif-gpsdestdistance' =>'Distância para o destino',
+'exif-gpsprocessingmethod' =>'Nome do método de processamento do GPS',
+'exif-gpsareainformation' =>'Nome da área do GPS',
+'exif-gpsdatestamp' =>'Data do GPS',
+'exif-gpsdifferential' =>'Correcção do diferencial do GPS',
+
+# Exif attributes
+
+'exif-compression-1' => 'Descomprimido',
+'exif-compression-6' => 'JPEG',
+
+'exif-photometricinterpretation-2' => 'RGB',
+'exif-photometricinterpretation-6' => 'YCbCr',
+
+'exif-orientation-1' => 'Normal', // 0th row: top; 0th column: left
+'exif-orientation-2' => 'Flipped horizontally', // 0th row: top; 0th column: right
+'exif-orientation-3' => 'Rotated 180Â°', // 0th row: bottom; 0th column: right
+'exif-orientation-4' => 'Flipped vertically', // 0th row: bottom; 0th column: left
+'exif-orientation-5' => 'Rotated 90Â° CCW and flipped vertically', // 0th row: left; 0th column: top
+'exif-orientation-6' => 'Rotated 90Â° CW', // 0th row: right; 0th column: top
+'exif-orientation-7' => 'Rotated 90Â° CW and flipped vertically', // 0th row: right; 0th column: bottom
+'exif-orientation-8' => 'Rotated 90Â° CCW', // 0th row: left; 0th column: bottom
+
+'exif-planarconfiguration-1' => 'formato irregular',
+'exif-planarconfiguration-2' => 'formato plano',
+
+'exif-xyresolution-i' => '$1 dpi',
+'exif-xyresolution-c' => '$1 dpc',
+
+'exif-colorspace-1' => 'sRGB',
+'exif-colorspace-ffff.h' => 'FFFF.H',
+
+'exif-componentsconfiguration-0' => 'não existe',
+'exif-componentsconfiguration-1' => 'Y',
+'exif-componentsconfiguration-2' => 'Cb',
+'exif-componentsconfiguration-3' => 'Cr',
+'exif-componentsconfiguration-4' => 'R',
+'exif-componentsconfiguration-5' => 'G',
+'exif-componentsconfiguration-6' => 'B',
+
+'exif-exposureprogram-0' => 'Não definido',
+'exif-exposureprogram-1' => 'Manual',
+'exif-exposureprogram-2' => 'Programa normal',
+'exif-exposureprogram-3' => 'Aperture priority',
+'exif-exposureprogram-4' => 'Shutter priority',
+'exif-exposureprogram-5' => 'Creative program (biased toward depth of field)',
+'exif-exposureprogram-6' => 'Programa de movimento (tende a velocidade de disparo mais rápida)',
+'exif-exposureprogram-7' => 'Modo de retrato (para fotos em <i>closeup</i> com o fundo fora de foco)',
+'exif-exposureprogram-8' => 'Modo de paisagem (para fotos de paisagem com o fundo em foco)',
+
+'exif-subjectdistance-value' => '$1 metros',
+
+
+'exif-lightsource-0' => 'Desconhecida',
+'exif-lightsource-1' => 'Luz do dia',
+'exif-lightsource-2' => 'Fluorescente',
+'exif-lightsource-10' => 'Tempo nublado',
+
+'exif-focalplaneresolutionunit-2' => 'polegadas',
+
+'exif-customrendered-0' => 'Processo normal',
+'exif-customrendered-1' => 'Processo personalizado',
+
+'exif-exposuremode-0' => 'Exposição automática',
+'exif-exposuremode-1' => 'Exposição manual',
+'exif-exposuremode-2' => 'Auto bracket',
+
+'exif-subjectdistancerange-0' => 'Desconhecida',
+'exif-subjectdistancerange-1' => 'Macro',
+'exif-subjectdistancerange-2' => 'Vista próxima',
+'exif-subjectdistancerange-3' => 'Vista distante',
+
+// Pseudotags used for GPSSpeedRef and GPSDestDistanceRef
+'exif-gpsspeed-k' => 'Quilómetros por hora',
+'exif-gpsspeed-m' => 'Milhas por hora',
+'exif-gpsspeed-n' => 'Nós',
+
+# external editor support
+'edit-externally' => 'Editar este ficheiro utilizando uma aplicação externa',
+'edit-externally-help' => 'Consulte as [http://meta.wikimedia.org/wiki/Help:External_editors instruções de instalação] para mais informação.',
+
+# 'all' in various places, this might be different for inflected languages
+'recentchangesall' => 'todas',
+'imagelistall' => 'todas',
+'watchlistall1' => 'todas',
+'watchlistall2' => 'todas',
+'namespacesall' => 'todas',
+
+# E-mail address confirmation
+'confirmemail' => 'Confirmar endereço de E-mail',
+'confirmemail_noemail' => 'Não possui um endereço de e-mail válido indicado nas suas [[Special:Preferences|preferências de utilizador]].',
+'confirmemail_text' => "Esta wiki requer que valide o seu endereço de e-mail antes de utilizar as funcionalidades que requerem um endereço de e-mail. Active o botão abaixo para enviar uma confirmação para o seu endereço de e-mail. A mensagem incluíra um endereço que contém um código; carregue o endereço no seu navegador para confirmar que o seu endereço de e-mail encontra-se válido.",
+'confirmemail_send' => 'Enviar código de confirmação',
+'confirmemail_sent' => 'E-mail de confirmação enviado.',
+'confirmemail_sendfailed' => 'Não foi possível enviar o email de confirmação. Por favor verifique o seu endereço de e-mail.
+
+Mailer retornou: $1',
+'confirmemail_invalid' => 'Código de confirmação inválido. O código poderá ter expirado.',
+'confirmemail_needlogin' => 'Precisa de $1 para confirmar o seu endereço de correio electrónico.',
+'confirmemail_success' => 'O seu endereço de e-mail foi confirmado. Pode agora se ligar.',
+'confirmemail_loggedin' => 'O seu endereço de e-mail foi agora confirmado.',
+'confirmemail_error' => 'Alguma coisa correu mal ao guardar a sua confirmação.',
+
+'confirmemail_subject' => '{{SITENAME}} confirmação de endereço de e-mail',
+'confirmemail_body' => "Alguém, provavelmente você com o endereço de IP $1, registou uma conta \"$2\" com este endereço de e-mail na {{SITENAME}}.
+
+Para confirmar que esta conta realmente é sua, e para activar
+as funcionalidades de e-mail na {{SITENAME}}, abra o seguinte endereço no seu navegador:
+
+$3
+
+Caso este *não* seja você, não siga o endereço. Este código de confirmação
+irá expirar a $4.",
+
+# Inputbox extension, may be useful in other contexts as well
+'tryexact' => 'Try exact match',
+'searchfulltext' => 'Pesquisar no texto completo',
+'createarticle' => 'Criar artigo',
+
+# Trackbacks
+'trackbackbox' => "<div id='mw_trackbacks'>
+Trackbacks for this article:<br />
+$1
+</div>",
+'trackbackremove' => ' ([$1 Eliminar])',
+'trackbacklink' => 'Trackback',
+'trackbackdeleteok' => 'The trackback was successfully deleted.',
+
+# delete conflict
+
+'deletedwhileediting' => 'Aviso: Esta página foi eliminada após você ter começado a editar!',
+'confirmrecreate' => 'O utilizador [[{{ns:user}}:$1|$1]] ([[{{ns:user_talk}}:$1|Discussão]]) eliminou este artigo após você ter começado a editar, pelo seguinte motivo:
+: \'\'$2\'\'
+Por favor confirme que realmente deseja recriar este artigo.',
+'recreate' => 'Recriar',
+'tooltip-recreate' => 'Recriar a página apesar de ter sido eliminada',
+
+'unit-pixel' => 'px',
+
+# HTML dump
+'redirectingto' => 'Redireccionando para [[$1]]...',
+
+# action=purge
+'confirm_purge' => "Limpar a memória cache desta página?\n\n$1",
+'confirm_purge_button' => 'OK',
+
+'youhavenewmessagesmulti' => "Tem novas mensagens em $1",
+
+'searchcontaining' => "Pesquisar por artigos contendo ''$1''.",
+'searchnamed' => "Pesquisar por artigos intitulados de ''$1''.",
+'articletitles' => "Artigos começandor com ''$1''",
+'hideresults' => 'Esconder resultados',
+
+# DISPLAYTITLE
+'displaytitle' => '(Ligar a esta página como [[$1]])',
+
+'loginlanguagelabel' => 'Idioma: $1',
+
+# Multipage image navigation
+'imgmultipageprev' => '&larr; página anterior',
+'imgmultipagenext' => 'próxima página &rarr;',
+'imgmultigo' => 'Ir!',
+'imgmultigotopre' => 'Mostrar página',
+
+# Table pager
+'ascending_abbrev' => 'asc',
+'descending_abbrev' => 'desc',
+'table_pager_next' => 'Próxima página',
+'table_pager_prev' => 'Página anterior',
+'table_pager_first' => 'Primeira página',
+'table_pager_last' => 'Última página',
+'table_pager_limit' => 'Mostrar $1 items por página',
+'table_pager_limit_submit' => 'Ir',
+'table_pager_empty' => 'Sem resultados',
+);
+
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesPt_br.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesPt_br.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesPt_br.php	(revision 1280)
@@ -0,0 +1,789 @@
+<?php
+/** Brazilian Portugese (Portuguêsi do Brasil)
+  * @addtogroup Language
+  */
+#
+# This translation was made by Yves Marques Junqueira
+# and Rodrigo Calanca Nishino from Portuguese Wikipedia
+#
+
+$fallback = 'pt';
+
+$skinNames = array(
+	'standard' => 'Padrão',
+);
+
+$namespaceNames = array(
+	NS_MEDIA          => 'Media',
+	NS_SPECIAL        => 'Especial',
+	NS_MAIN           => '',
+	NS_TALK           => 'Discussão',
+	NS_USER           => 'Usuário',
+	NS_USER_TALK      => 'Usuário_Discussão',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK   => '$1_Discussão',
+	NS_IMAGE          => 'Imagem',
+	NS_IMAGE_TALK     => 'Imagem_Discussão',
+	NS_MEDIAWIKI      => 'MediaWiki',
+	NS_MEDIAWIKI_TALK => 'MediaWiki_Discussão',
+	NS_TEMPLATE       => 'Predefinição',
+	NS_TEMPLATE_TALK  => 'Predefinição_Discussão',
+	NS_HELP           => 'Ajuda',
+	NS_HELP_TALK      => 'Ajuda_Discussão',
+	NS_CATEGORY       => 'Categoria',
+	NS_CATEGORY_TALK  => 'Categoria_Discussão'
+);
+$linkTrail = "/^([a-z]+)(.*)\$/sD";
+
+
+$messages = array(
+# User Toggles
+"tog-underline" => "Sublinha links",
+"tog-highlightbroken" => "Formata links quebrados <a href=\"\" class=\"new\"> como isto </a> (alternative: como isto<a href=\"\" class=\"internal\">?</a>).",
+"tog-justify"   => "Justifica parágrafos",
+"tog-hideminor" => "Esconder edições secundárias em mudanças recentes",
+"tog-usenewrc" => "Mudanças recentes melhoradas(nem todos os navegadores)",
+"tog-numberheadings" => "Auto-numerar cabeçalhos",
+"tog-showtoolbar" => "Mostrar barra de edição",
+"tog-editondblclick" => "Editar páginas quando houver clique duplo(JavaScript)",
+"tog-editsection"=>"Habilitar seção de edição via links [edit]",
+"tog-editsectiononrightclick"=>"Habilitar seção de edição por clique <br /> com o botão direito no título da seção (JavaScript)",
+"tog-showtoc"=>"Mostrar Tabela de Conteúdos<br />(para artigos com mais de 3 cabeçalhos)",
+"tog-rememberpassword" => "Lembra senha entre sessões",
+"tog-editwidth" => "Caixa de edição com largura completa",
+"tog-watchdefault" => "Observa artigos novos e modificados",
+"tog-minordefault" => "Marca todas as edições como secundárias, por padrão",
+"tog-previewontop" => "Mostrar Previsão antes da caixa de edição ao invés de ser após",
+"tog-nocache" => "Desabilitar caching de página",
+# Dates
+'sunday' => 'Domingo',
+'monday' => 'Segunda',
+'tuesday' => 'Terça-Feira',
+'wednesday' => 'Quarta-Feira',
+'thursday' => 'Quinta-Feira',
+'friday' => 'Sexta-Feira',
+'saturday' => 'Sábado',
+'january' => 'Janeiro',
+'february' => 'Fevereiro',
+'march' => 'Março',
+'april' => 'Abril',
+'may_long' => 'Maio',
+'june' => 'Junho',
+'july' => 'Julho',
+'august' => 'Agosto',
+'september' => 'Setembro',
+'october' => 'Outubro',
+'november' => 'Novembro',
+'december' => 'Dezembro',
+'jan' => 'Jan',
+'feb' => 'Fev',
+'mar' => 'Mar',
+'apr' => 'Abr',
+'may' => 'Mai',
+'jun' => 'Jun',
+'jul' => 'Jul',
+'aug' => 'Ago',
+'sep' => 'Set',
+'oct' => 'Out',
+'nov' => 'Nov',
+'dec' => 'Dez',
+
+
+# Bits of text used by many pages:
+#
+"categories" => "Page categories",
+"pagecategories" => "Page categories",
+"category_header" => "Articles in category \"$1\"",
+"subcategories" => "Subcategories",
+
+"mainpage"      => "Página principal",
+"mainpagetext"  => "Software Wiki instalado com sucesso.",
+"about"         => "Sobre",
+"aboutsite"      => "Sobre a {{SITENAME}}",
+"aboutpage"     => "{{ns:4}}:Sobre",
+"help"          => "Ajuda",
+"helppage"      => "{{ns:4}}:Ajuda",
+"bugreports"    => "Reportagem de 'bugs'",
+"bugreportspage" => "{{ns:4}}:Reportag_Bug",
+"faq"           => "FAQ",
+"faqpage"       => "{{ns:4}}:FAQ",
+"edithelp"      => "Ajuda de edição",
+"edithelppage"  => "{{ns:4}}:Como_editar_uma_página",
+"cancel"        => "Cancela",
+"qbfind"        => "Procura",
+"qbbrowse"      => "Folhear",
+"qbedit"        => "Editar",
+"qbpageoptions" => "Opções de página",
+"qbpageinfo"    => "Informação de página",
+"qbmyoptions"   => "Minhas opções",
+"mypage"        => "Minha página",
+"mytalk"        => "Minha discussão",
+"currentevents" => "Eventos atuais",
+"errorpagetitle" => "Erro",
+"returnto"      => "Retorna para $1.",
+"whatlinkshere" => "Páginas que se ligam a essa",
+"help"          => "Ajuda",
+"search"        => "Busca",
+"searchbutton"  => "Busca",
+"go"        => "Vai",
+'searcharticle'        => "Vai",
+"history"       => "Histórico",
+"printableversion" => "Versão para impressão",
+"editthispage"  => "Editar esta página",
+"deletethispage" => "Apagar esta página",
+"protectthispage" => "Proteger esta página",
+"unprotectthispage" => "Desproteger esta página",
+"newpage" => "Nova página",
+"talkpage"      => "Discutir esta página",
+"postcomment"   => "Post a comment",
+"articlepage"   => "Ver atigo",
+"userpage" => "Ver página de usuário",
+"projectpage" => "Ver meta página",
+"imagepage" =>  "Ver página de imagens",
+"viewtalkpage" => "Ver discussões",
+"otherlanguages" => "Outras línguas",
+"redirectedfrom" => "(Redirecionado de $1)",
+"lastmodifiedat"  => "Está página foi modificada pela última vez em $2, $1.",
+"viewcount"     => "Esta página foi acessada $1 vezes.",
+"protectedpage" => "Página protegida",
+"nbytes"        => "$1 bytes",
+"ok"            => "OK",
+"retrievedfrom" => "Retirado de  \"$1\"",
+"newmessageslink" => "novas mensagens",
+"editsection"=>"editar",
+"editold"=>"editar",
+"toc" => "Conteúdo",
+"showtoc" => "mostrar",
+"hidetoc" => "esconder",
+
+# Main script and global functions
+#
+"nosuchaction"  => "Ação não existente",
+"nosuchactiontext" => "A ação especificada pela URL não é
+reconhecida pelo programa da {{SITENAME}}",
+"nosuchspecialpage" => "Não exista esta página especial",
+"nospecialpagetext" => "Você requisitou uma página especial que não é
+reconhecida pelo software da {{SITENAME}}.",
+
+# General errors
+#
+"error"         => "Erro",
+"databaseerror" => "Erro no banco de dados",
+"dberrortext"   => "Um erro de sintaxe de busca no banco de dados ocorreu.
+A última tentativa de busca no banco de dados foi:
+<blockquote><tt>$1</tt></blockquote>
+na função \"<tt>$2</tt>\".
+MySQL retornou o erro \"<tt>$3: $4</tt>\".",
+"dberrortextcl" => "Um erro de sintaxe de pesquisa no banco
+de dados ocorreu.
+A última tentativa de pesquisa no banco de dados foi:
+\"$1\"
+com a função\"$2\".
+MySQL retornou o erro \"$3: $4\".",
+"noconnect"     => "Desculpe! O wiki está passando por algumas
+dificuldades técnicas, e não pode contactar o servidor de bando de dados.",
+"nodb"          => "Não foi possível selecionar o banco de dados $1",
+"cachederror"       => "O que segue é uma cópia em cache da página
+solicitada, e pode não estar atualizada.",
+"readonly"      => "Banco de dados somente para leitura",
+"enterlockreason" => "Entre com um motivo para trancá-lo, incluindo uma estimativa de quando poderá novamente ser escrito",
+"readonlytext"  => "O Banco-de-dados da {{SITENAME}} está atualmente bloqueado para novos
+artigos e outras modificações, provávelmente por uma manutenção rotineira no Bando de Dados,
+mais tarde voltará ao normal.
+
+O administrador que fez o bloqueio oferece a seguinte explicação:
+<p>$1",
+"missingarticle" => "O Banco-de-Dados não encontrou o texto de uma página
+que deveria ser encontrado, chamado \"$1\".
+
+<p>Isto é geralmente causado pela procura de um diff antigo ou um histórico que leva a uma página que foi deletada.
+
+<p>Se isto não for o caso, você pode ter encontrado um bug no software.
+Por favor, comunique isto ao administrador, tenha nota da URL.",
+"internalerror" => "Erro Interno",
+"filecopyerror" => "Não foi possível copiar o arquivo \"$1\" para \"$2\".",
+"filerenameerror" => "Não foi possível renomear o arquivo \"$1\" para \"$2\"",
+"filedeleteerror" => "Não foi possível deletar o arquivo \"$1\".",
+"filenotfound"  => "Não foi possível encontrar o arquivo \"$1\".",
+"unexpected"    => "Valor não esperado: \"$1\"=\"$2\".",
+"formerror"     => "Erro: Não foi possível enviar o formulário",
+"badarticleerror" => "Esta acção não pode ser performada nesta página.",
+"cannotdelete"  => "Não foi possível excluir página ou imagem especificada. (Ela já pode ter sido deletada por alguém.)",
+"badtitle"      => "Título ruim",
+"badtitletext"  => "O título de página requisitado era inválido, vazio, ou
+um link incorreto de inter-linguagem ou título inter-wiki .",
+"perfdisabled" => "Desculpe! Esta opção foi temporariamente desabilitada
+porque tornava o banco de dados lento demais a ponto de impossibilitar o wiki.",
+"perfdisabledsub" => "Aqui está uma cópia salva de $1:",
+
+# Login and logout pages
+#
+"logouttitle"   => "Saída de utilizador",
+"logouttext"    => "Você agora não está mais autenticado.
+Você pode continuar a usar a {{SITENAME}} anonimamente, ou pode se autenticar
+novamente como o mesmo utilizador ou como um utilizador diferente.",
+
+"welcomecreation" => "<h2>Bem-vindo, $1!</h2><p>Sua conta foi criada.
+Não se esqueça de personalizar suas preferências na {{SITENAME}}.",
+
+"loginpagetitle" => "Login de usuário",
+"yourname"      => "Seu nome de usuário",
+"yourpassword"  => "Sua senha",
+"yourpasswordagain" => "Redigite sua senha",
+"remembermypassword" => "Lembrar de minha senha em outras sessões.",
+"loginproblem"  => "<b>Houve um problema com a sua autenticação.</b><br />Tente novamente!",
+"alreadyloggedin" => "<strong>Utilizador $1, você já está autenticado!</strong><br />",
+
+"login"         => "Entrar",
+"userlogin"     => "Entrar",
+"logout"        => "Sair",
+"userlogout"    => "sair",
+"notloggedin"   => "Não-logado",
+"createaccount" => "Criar nova conta",
+"createaccountmail" => "por e-Mail",
+"badretype"     => "As senhas que você digitou não são iguais.",
+"userexists"    => "O nome de usuário que você digitou já existe. Por favor, escolha um nome diferente.",
+"youremail"     => "Seu e-mail*",
+"yournick"      => "Seu apelido (para assinaturas)",
+"loginerror"    => "Erro de autenticação",
+"noname"        => "Você não colocou um nome de usuário válido.",
+"loginsuccesstitle" => "Login bem sucedido",
+"loginsuccess"  => "Agora você está logado na {{SITENAME}} como \"$1\".",
+"nosuchuser"    => "Não há nenhum usuário com o nome \"$1\".
+Verifique sua grafia, ou utilize o formulário a baixo para criar uma nova conta de usuário.",
+"wrongpassword" => "A senha que você entrou é inválida. Por favor tente novamente.",
+"mailmypassword" => "Envie uma nova senha por e-mail",
+"passwordremindertitle" => "Lembrador de senhas da {{SITENAME}}",
+"passwordremindertext" => "Alguém (provavelmente você, do endereço de IP $1)
+solicitou que nós lhe enviássemos uma nova senha para login.
+A senha para o usuário \"$2\" é a partir de agora \"$3\".
+Você pode realizar um login e mudar sua senha agora.",
+"noemail"       => "Não há nenhum e-Mail associado ao usuário \"$1\".",
+"passwordsent"  => "Uma nova senha está sendo enviada para o endereço de e-Mail
+registrado para \"$1\".
+Por favor, reconecte-se ao recebê-lo.",
+
+# Edit pages
+#
+"summary"       => "Sumário",
+"subject"       => "Assunto",
+"minoredit"     => "Edição menor",
+"watchthis"     => "Observar este artigo",
+"savearticle"   => "Salvar página",
+"preview"       => "Prever",
+"showpreview"   => "Mostrar Pré-Visualização",
+"blockedtitle"  => "Usuário está bloqueado",
+"blockedtext"   => "Seu nome de usuário ou numero de IP foi bloqueado por $1.
+O motivo é:<br />''$2''<p>Você pode contactar $1 ou outro
+[[{{ns:4}}:administradores|administrador]] para discutir sobre o bloqueio.",
+"whitelistedittitle" => "Login necessário para edição",
+"whitelistedittext" => "Você precisa se [[Especial:Userlogin|logar]] para editar artigos.",
+"whitelistreadtitle" => "Login necessário para leitura",
+"whitelistreadtext" => "Você precisa se [[Especial:Userlogin|logar]] para ler artigos.",
+"whitelistacctitle" => "Você não está habilitado a criar uma conta",
+"whitelistacctext" => "Para ter permissão para se criar uma conta neste Wiki você precisará estar [[Especial:Userlogin|logado]] e ter as permissões apropriadas.",
+"accmailtitle" => "Senha enviada.",
+"accmailtext" => "A senha de '$1' foi enviada para $2.",
+"newarticle"    => "(Novo)",
+"newarticletext" =>
+"Você seguiu um link para um artigo que não existe.
+Para criá-lo, começe escrevendo na caixa abaixo 
+(veja [[{{ns:4}}:Ajuda|a página de ajuda]] para mais informações).
+Se você chegou aqui por engano, apenas clique no botão '''voltar''' do seu navegador.",
+
+"anontalkpagetext" => "---- ''Esta é a página de discussão para um usuário anônimo que não criou uma conta ainda ou que não a usa. Então nós temos que usar o endereço numérico de IP para identificá-lo. Um endereço de IP pode ser compartilhado por vários usuários. Se você é um usuário anônimo e acha irrelevante que os comentários sejam direcionados a você, por favor [[Especial:Userlogin|crie uma conta ou autentique-se]] para evitar futuras confusões com outros usuários anônimos.''",
+"noarticletext" => "(Não há atualmente nenhum texto nesta página)",
+"updated"       => "(Atualizado)",
+"note"          => "<strong>Nota:</strong>",
+"previewnote"   => "Lembre-se que isto é apenas uma previsão. O conteúdo ainda não foi salvo!",
+"previewconflict" => "Esta previsão reflete o texto que está na área de edição acima e como ele aparecerá se você escolher salvar.",
+"editing"         => "Editando $1",
+'editinguser'         => "Editando $1",
+"editingsection"  => "Editando $1 (seção)",
+"editingcomment"  => "Editando $1 (comentário)",
+"editconflict"  => "Conflito de edição: $1",
+"explainconflict" => "Alguém mudou a página enquanto você a estava editando.
+A área de texto acima mostra o texto original.
+Suas mudanças são mostradas na área abaixo.
+Você terá que mesclar suas modificações no texto existente.
+<b>SOMENTE</b> o texto na área acima será salvo quando você pressionar \"Salvar página\".<br />",
+"yourtext"      => "Seu texto",
+"storedversion" => "Versão guardada",
+"editingold"    => "<strong>CUIDADO: Você está editando uma revisão desatualizada deste artigo.
+Se você salvá-lo, todas as mudanças feitas a partir desta revisão serão perdidas.</strong>",
+"yourdiff"      => "Diferenças",
+/*"copyrightwarning" => "Por favor note que todas as contribuições �  {{SITENAME}} são consideradas lançadas sobre a GNU Free Documentation License
+(veja $1 para detalhes).
+Se você não quer que seu texto esteja sobre estes termos, então não os envie.<br />
+Você também promete que está nos enviando um artigo escrito por você mesmo, ou extraindo de uma fonte de domínio público similar.
+<strong>NÃO ENVIE TRABALHO SOB COPYRIGHT SEM PERMISSÃO!</strong>",*/
+"longpagewarning" => "<strong>CUIDADO: Esta página tem $1 kilobytes ; alguns browsers podem ter problemas ao editar páginas maiores que 32kb.
+Por favor considere quebrar a página em sessões menores.</strong>",
+"readonlywarning" => "<strong>CUIDADO: O banco de dados está sendo bloqueado para manutenção.
+No momento não é possível salvar suas edições. Você pode copiar e colar o texto em um arquivo de texto e salvá-lo em seu computador para adicioná-lo ao wiki mais tarde.</strong>",
+"protectedpagewarning" => "<strong>CUIDADO: Apenas os usuários com privilégios de sysop podem editar esta página pois ela foi bloqueada. Certifique-se de que você está seguindo o [[Project:Guia_de_páginas_protegidas|guia de páginas protegidas]].</strong>",
+
+# History pages
+#
+"revhistory"    => "Histórico de revisões",
+"nohistory"     => "Não há histórico de revisões para esta página.",
+"revnotfound"   => "Revisão não encontrada",
+"revnotfoundtext" => "A antiga revisão da página que você está procurando não pode ser encontrada.
+Por favor verifique a URL que você usou para acessar esta página.",
+"loadhist"      => "Carregando histórico",
+"currentrev"    => "Revisão atual",
+"revisionasof"  => "Revisão de $1",
+"cur"           => "atu",
+"next"          => "prox",
+"last"          => "ult",
+"orig"          => "orig",
+"histlegend"    => "Legenda: (atu) = diferenças da versão atual,
+(ult) = diferença da versão precedente, M = edição minoritária",
+
+# Diffs
+#
+"difference"    => "Diferença entre revisões)",
+"loadingrev"    => "carregando a busca por diferenças",
+"lineno"        => "Linha $1:",
+"editcurrent"   => "Editar a versão atual desta página",
+
+# Resultados da Busca
+#
+"searchresults" => "Buscar resultados",
+"searchresulttext" => "Para mais informações sobre busca na {{SITENAME}}, veja [[Project:Procurando|Busca na {{SITENAME}}]].",
+"searchsubtitle"   => "Para pedido de busca \"[[:$1]]\"",
+"searchsubtitleinvalid"   => "Para pedido de busca \"$1\"",
+"badquery"      => "Linha de busca incorretamente formada",
+"badquerytext"  => "Nós não pudemos processar seu pedido de busca.
+Isto acoenteceu provavelmente porque você tentou procurar uma palavra de menos que três letras, coisa que o software ainda não consegue realizar. Isto também pode ter ocorrido porque você digitou incorretamente a expressão, por
+exemplo: \"peixes <strong>and and</strong> scales\".
+Por favor realize ouro pedido de busca.",
+"matchtotals"   => "A pesquisa \"$1\" resultou $2 títulos de artigos
+e $3 artigos com o texto procurado.",
+"noexactmatch" => "Nenhum artigo com um título exatamente igual a este foi encontrado, tentando na pesquisa completa por texto.",
+"titlematches"  => "Resultados nos títulos dos artigos",
+"notitlematches" => "Sem resultados nos títulos dos artigos",
+"textmatches"   => "Resultados nos textos dos artigos",
+"notextmatches" => "Sem resultados nos textos dos artigos",
+"prevn"         => "anterior $1",
+"nextn"         => "próximo $1",
+"viewprevnext"  => "Ver ($1) ($2) ($3).",
+"showingresults" => "Mostrando os próximos <b>$1</b> resultados começando com #<b>$2</b>.",
+"showingresultsnum" => "Mostrando <b>$3</b> resultados começando com #<b>$2</b>.",
+"nonefound"     => "<strong>Nota</strong>: pesquisas mal sucedidas são geralmente causadas devido o uso de palavras muito comuns como \"tem\" e \"de\",
+que não são indexadas, ou pela especificação de mais de um termo (somente as páginas contendo todos os termos aparecerão nos resultados).",
+"powersearch" => "Pesquisa",
+"powersearchtext" => "
+Procurar nos namespaces :<br />
+$1<br />
+$2 Lista redireciona &nbsp; Procura por $3 $9",
+"blanknamespace" => "(Principal)",
+
+# Preferences page
+#
+"preferences"   => "Preferências",
+"prefsnologin" => "Não autenticado",
+"prefsnologintext"  => "Você precisa estar [[Special:Userlogin|autenticado]]
+para definir suas preferências.",
+"prefsreset"    => "Preferências foram reconfiguradas.",
+"qbsettings"    => "Configurações da Barra Rápida",
+"changepassword" => "Mudar senha",
+"skin"          => "Aparência(Skin)",
+"math"          => "Renderização matemática",
+"dateformat"    => "Formato da Data",
+"math_failure"      => "Falhou ao checar gramática(parse)",
+"math_unknown_error"    => "erro desconhecido",
+"math_unknown_function" => "função desconhecida",
+"math_lexing_error" => "erro léxico",
+"math_syntax_error" => "erro de síntaxe",
+"saveprefs"     => "Salvar preferências",
+"resetprefs"    => "Redefinir preferências",
+"oldpassword"   => "Senha antiga",
+"newpassword"   => "Nova senha",
+"retypenew"     => "Redigite a nova senha",
+"textboxsize"   => "Tamanho da caixa de texto",
+"rows"          => "Linhas",
+"columns"       => "Colunas",
+"searchresultshead" => "Configurar resultados de pesquisas",
+"resultsperpage" => "Resultados por página",
+"contextlines"  => "Linhas por resultados",
+"contextchars"  => "Letras de contexto por linha",
+"stubthreshold" => "Threshold for stub display",
+"recentchangescount" => "Número de títulos em Mudanças Recentes",
+"savedprefs"    => "Suas preferências foram salvas.",
+"timezonetext"  => "Entre com o número de horas que o seu horário local difere do horário do servidor (UTC).",
+"localtime" => "Display de hora local",
+"timezoneoffset" => "Offset",
+"servertime"    => "Horário do servidor é",
+"guesstimezone" => "Colocar no navegador",
+"defaultns"     => "Procurar nestes namespaces por padrão:",
+
+# Recent changes
+#
+"changes" => "mudanças",
+"recentchanges" => "Mudanças Recentes",
+"recentchangestext" => "Veja as mais novas mudanças na {{SITENAME}} nesta página.
+[[{{ns:4}}:Bem Vindo,_novatos|Bem Vindo, novatos]]!
+Por favor, dê uma olhada nestas páginas: [[{{ns:4}}:FAQ|FAQ da {{SITENAME}}]],
+[[{{ns:4}}:Políticas e Normas| Política da {{SITENAME}}]]
+(especialmente [[{{ns:4}}:Convenções de nomenclatura|convenções de nomenclatura]],
+[[{{ns:4}}:Ponto de vista neutro|Ponto de vista neutro]]),
+e [[{{ns:4}}:Most common {{SITENAME}} faux pas|most common {{SITENAME}} faux pas]].
+
+Se você quer ver a {{SITENAME}} crescer, é muito importante que você não adicione material restrito por outras [[{{ns:4}}:Copyrights|copyrights]].
+Um problema legal poderia realmente prejudicar o projeto de maneira que pedimos, por avor, não faça isso.",
+"rcnote"        => "Abaixo estão as últimas <strong>$1</strong> alterações nos últimos <strong>$2</strong> dias.",
+"rcnotefrom"    => "Abaixo estão as mudanças desde <b>$2</b> (até <b>$1</b> mostradas).",
+"rclistfrom"    => "Mostrar as novas alterações a partir de $1",
+"rclinks"       => "Mostrar as últimas $1 mudanças nos últimos $2 dias; $3 edições minoritárias",
+"diff"          => "dif",
+"hist"          => "hist",
+"hide"          => "esconde",
+"show"          => "mostra",
+"minoreditletter" => "M",
+"newpageletter" => "N",
+
+# Upload
+#
+"upload"        => "Carregar arquivo",
+"uploadbtn"     => "Carregar arquivo",
+"reupload"      => "Re-carregar",
+"reuploaddesc"  => "Retornar ao formulário de Uploads.",
+"uploadnologin" => "Não autenticado",
+"uploadnologintext" => "Você deve estar [[Special:Userlogin|autenticado]]
+para carregar arquivos.",
+"uploaderror"   => "Erro ao Carregar",
+/*"uploadtext"    => "'''PARE!''' Antes de você carregar arquivos aqui,
+tenha certeza de ter lido e estar em acordo com a
+[[Project:Política_de_imagens|política de uso de imagens da {{SITENAME}}]].
+
+Para ver ou procurar imagens carregadas,
+vá � [[Special:Imagelist|lista de imagens carregadas]].
+Uploads e deleções são armazenados no
+[[Project:Upload_log|log de uploads]].
+
+Use o formulário a seguir para carregar arquivos de imagens para ilustrar seus artigos. Na maioria dos navegadores, você verá um botão \"Browse...\" , que trárá o diálogo padrão de abertura de arquivo padrão do seu Sistema Operacional.
+Ao escolher um arquivo, o campo de texto próximo ao botão será preenchido.
+Você tembém deve confirmar  que não está carregando nenhum arquivo protegido por Diretos Autorais.
+Pressione o botão \"Carregar\" para finalizar o upload.
+Isto pode demorar um pouco se você tem possui uma conexão lenta.
+
+Os formatos ideais são JPEG para fotos, PNG
+para ilustrações, e OGG para sons.
+Por favor, nomeie seus arquivos de forma descritiva para evitar confusões.
+Para incluir uma imagem em um artigo, use um link na forma
+'''<nowiki>[[image:arquivo.jpg]]</nowiki>''' ou
+'''<nowiki>[[image:arquivo.png|texto descritivo]]</nowiki>''' ou
+'''<nowiki>[[media:audio.ogg]]</nowiki> para sons.
+
+Por favor, note que com as páginas da {{SITENAME}}, outros usuários podem modificar ou deletar seus uploads se eles acharem que isto seja útil �  {{SITENAME}}, e você possa estar bloqueado para uploads devido a abusos do sistema.",*/
+"uploadlog"     => "log de uploads",
+"uploadlogpage" => "Log_de_Uploads",
+"uploadlogpagetext" => "Segue uma lista dos uploads mais recentes.
+Todas as datas mostradas são do servidor (UTC).
+<ul>
+</ul>",
+"filename"      => "Nome do arquivo",
+"filedesc"      => "Sumário",
+"copyrightpage" => "{{ns:4}}:Copyrights",
+"copyrightpagename" => "Direitos Autorais da {{SITENAME}}",
+
+"uploadedfiles" => "Arquivos carregados",
+"minlength"     => "Os nomes das imagens devem ter ao menos três letras.",
+"badfilename"   => "O nome da imagem mudou para \"$1\".",
+"badfiletype"   => "\".$1\" não está em um formato recomendável.",
+"largefile"     => "É recomendado que as imagens não tenham mais que 100k de tamanho.",
+"successfulupload" => "Carregamento efetuado com sucesso",
+/*"fileuploaded"  => "Arquivo \"$1\" carregado com sucesso.
+Por favor, siga este link : ($2) para ir �  página de descrição e preencha-a com informações sobre o arquivo, como de onde veio , quando e por quem foi criada, e qualquer outra coisa a mais que você saiba.",*/
+"uploadwarning" => "Aviso de Upload",
+"savefile"      => "Salvar arquivo",
+"uploadedimage" => "\"[[$1]]\" carregado",
+
+# Image list
+#
+"imagelist"     => "Lista de Imagens",
+"imagelisttext" => "A seguir uma lista de $1 imagens organizadas $2.",
+"getimagelist"  => "buscando lista de imagens",
+"ilsubmit"      => "Procura",
+"showlast"      => "Mostrar as  $1 imagens organizadas $2.",
+"byname"        => "por nome",
+"bydate"        => "por data",
+"bysize"        => "por tamanho",
+"imgdelete"     => "del",
+"imgdesc"       => "desc",
+"imglegend"     => "Legenda: (desc) = mostrar/editar descrição de imagem.",
+"imghistory"    => "Histórico das imagens",
+"revertimg"     => "rev",
+"deleteimg"     => "del",
+"deleteimgcompletely"     => "del",
+"imghistlegend" => "Legenda: (cur) = esta é a imagem atual, (del) = deletar
+esta versão antiga, (rev) = reverter para esta versão antiga.
+<br /><i>Clique em data para ver das imagens carregadas nesta data</i>.",
+"imagelinks"    => "Links das imagens",
+"linkstoimage"  => "As páginas seguintes apontam para esta imagem:",
+"nolinkstoimage" => "Nenhuma página aponta para esta imagem.",
+
+# Statistics
+#
+"statistics"    => "Estatísticas",
+"sitestats"     => "Estatísticas do Site",
+"userstats"     => "Estatística dos usuários",
+"sitestatstext" => "Há atualmente um total de <b>$1</b> páginas em nosso banco de dados.
+Isto inclui páginas  \"talk\", páginas sobre a {{SITENAME}}, páginas de rascunho, redirecionamentos, e outras que provavelmente não são qualificadas como artigos.
+Excluindo estas, há <b>$2</b> páginas que provavelmente são artigos legitimos .<p>
+Há um total de <b>$3</b> páginas vistas, e <b>$4</b> edições de página
+desde a última atualização do software (Janeiro de 2004).
+O que nos leva a aproximadamente <b>$5</b> edições por página, e <b>$6</b> vistas por edição.",
+"userstatstext" => "Há atualmente <b>$1</b> usuários registrados.
+Destes, <b>$2</b> são administradores (veja $3).",
+
+# Maintenance Page
+#
+"disambiguations"   => "Páginas de desambiguamento",
+"disambiguationspage"   => "{{ns:4}}:Links_para_desambiguar_páginas",
+"disambiguationstext"   => "Os artigos a seguir apontam para uma <i>página de desambiguamento</i>. Ao invés disso, eles deveriam apontar para um tópico apropriado.<br /> Uma página é tratada como disambiguamento se ela é por $1.<br />Links de outros namespaces <i>não</i> estão listados aqui.",
+"doubleredirects"   => "Double Redirects",
+"doubleredirectstext"   => "<b>Atenção:</b> Esta lista pode conter positivos falsos. O que usualmente significa que há texto adicional com links depois do primeiro #REDIRECT.<br />\nCada linha contem links para o primeiro e segundo redirecionamento, bem como a primeira linha do segundo texto redirecionado , geralmente dando o artigo alvo \"real\" , para onde o primeiro redirecionamento deveria apontar.",
+"brokenredirects"   => "Redirecionamentos Quebrados",
+"brokenredirectstext"   => "Os seguintes redirecionamentos apontam para um artigo inexistente.",
+
+
+# Miscellaneous special pages
+#
+"lonelypages"   => "Páginas órfãns",
+"unusedimages"  => "Imagens não utilizadas",
+"popularpages"  => "Páginas populares",
+"nviews"        => "$1 visitas",
+"wantedpages"   => "Páginas procuradas",
+"nlinks"        => "$1 links",
+"allpages"      => "Todas as páginas",
+"randompage"    => "Página aleatória",
+"shortpages"    => "Páginas Curtas",
+"longpages"     => "Paginas Longas",
+"listusers"     => "Lista de Usuários",
+"specialpages"  => "Páginas especiais",
+"spheading"     => "Páginas especiais para todos os usuários",
+"recentchangeslinked" => "Páginas relacionadas",
+"rclsub"        => "(para páginas linkadas de \"$1\")",
+"newpages"      => "Páginas novas",
+"ancientpages"      => "Artigos mais antigos",
+"intl"      => "Links interlínguas",
+"movethispage"  => "Mover esta página",
+"unusedimagestext" => "<p>Por favor note que outros websites como
+as Wikipédias internacionais podem apontar para uma imagem com uma URL direta, e por isto pode estar aparecendo aqui mesmo estando em uso ativo.",
+"booksources"   => "Fontes de livros",
+"booksourcetext" => "Segue uma lista de links para outros sites que vendem livros novos e usados , e podem ter informações adicionais sobre livros que você esteja procurando.
+A {{SITENAME}} não é afiliada a nenhum destes empreendimentos, e a lista não deve ser construída  como apoio.",
+"alphaindexline" => "$1 para $2",
+
+# Email this user
+#
+"mailnologin"   => "Sem endereço ed envio",
+"mailnologintext" => "Você deve estar [[Special:Userlogin|autenticado]]
+e ter um e-mail válido em suas [[Special:Preferences|preferências]]
+para poder enviar e-mails para outros usuários.",
+"emailuser"     => "Contactar usuário",
+"emailpage"     => "Enviar e-mail ao usuário",
+"emailpagetext" => "Se este usuário disponibilizou um endereço válido de e-mail em suas preferências, o formulário a seguir enviará uma mensagem única.
+O endereço de e-mail que você disponibilizou em suas preferências aparecerá como remetente da mensagem, então, o usuário poderá responder a você diretamente.",
+"noemailtitle"  => "Sem endereço de e-mail",
+"noemailtext"   => "Este usuário não especificou um endereço de e-mail válido, ou optou por não receber mensagens de outros usuários.",
+"emailfrom"     => "De",
+"emailto"       => "Para",
+"emailsubject"  => "Assunto",
+"emailmessage"  => "Mensagem",
+"emailsend"     => "Enviar",
+"emailsent"     => "E-mail enviado",
+"emailsenttext" => "Sua mensagem foi enviada.",
+
+# Watchlist
+#
+"watchlist"     => "Artigos do meu interesse",
+"mywatchlist"     => "Artigos do meu interesse",
+"nowatchlist"   => "Você não está monitorando nenhum artigo.",
+"watchnologin"  => "Não está autenticado",
+"watchnologintext"  => "Você deve estar [[Special:Userlogin|autenticado]]
+para modificar a lista de artigos do seu interesse.",
+"addedwatchtext" => "A página \"$1\" foi adicionada à [[Special:Watchlist|lista de artigos do seu interesse]].
+Modificações futuras neste artigo e páginas de discussão associadas serão listadas aqui,
+e a página aparecerá <b>em negrito</b> na [[Special:Recentchanges|lista de mudanças recentes]] para que
+possa achá-la com maior facilidade.
+
+Se você quiser remover futuramente o artigo da sua lista de artigos vigiados, clique em  \"Desinteressar-se\" na barra lateral.",
+"removedwatch"  => "Removida da lista de monitoramento",
+"removedwatchtext" => "A página \"$1\" não é mais de seu interesse e portanto foi removida de sua lista de monitoramento.",
+"watchthispage" => "Interessar-se por esta página",
+"unwatchthispage" => "Desinteressar-se",
+"notanarticle"  => "Não é um artigo",
+"watchnochange" => "Nenhum dos itens monitorados foram editados no período exibido.",
+"watchdetails" => "($1 páginas monitoradas excluindo-se as páginas de discussão;
+$2 páginas editadas desde data limite;
+$3...
+[$4 mostrar e editar a lista completa].)",
+"watchmethod-recent" => "checando edições recentes para os artigos monitorados",
+"watchmethod-list" => "checando páginas monitoradas de edições recentes",
+"removechecked" => "Remover itens selecionados",
+"watchlistcontains" => "Sua lista contém $1 páginas.",
+"watcheditlist" => "Aqui está uma lista alfabética de sua lista de artigos observados. Marque as caixas dos artigos que você deseja remover e clique no botão 'Remover itens selecionados' na parte de baixo da tela.",
+"removingchecked" => "Removendo os itens solicitados de sua lista de monitoramento...",
+"couldntremove" => "Não consegui remover o item '$1'...",
+"iteminvalidname" => "Problema com item '$1', nome inválido...",
+"wlnote" => "Segue as últimas $1 mudanças nas últimas <b>$2</b> horas.",
+
+
+# Delete/protect/revert
+#
+"deletepage"    => "Deletar página",
+"confirm"       => "Confirmar",
+"excontent" => "conteúdo era: '$1'",
+"exbeforeblank" => "conteúdo antes de apagar era: '$1'",
+"exblank" => "página estava vazia",
+"confirmdelete" => "Confirmar deleção",
+"deletesub"     => "(Apagando \"$1\")",
+"historywarning" => "Atenção: A página que você quer deletar tem um histórico:",
+"confirmdeletetext" => "Você está  prestes a deletar permanentemente uma página ou imagem junto com todo seu histórico do banco de dados.
+Por favor, confirme que você realmente pretende fazer isto, que você compreende as consequências, e que você está fazendo isto em acordo com a [[{{ns:4}}:Policy| Política da {{SITENAME}}]].",
+"actioncomplete" => "Ação efetuada com sucesso",
+"deletedtext"   => "\"$1\" foi deletada.
+Veja $2 para um registro de deleções recentes.",
+"deletedarticle" => "apagado \"$1\"",
+"dellogpage"    => "Deletion_log",
+"dellogpagetext" => "Segue uma lista das deleções mais recentes.
+Todos os horários mostrados estão no horário do servidor (UTC).
+<ul>
+</ul>",
+"deletionlog"   => "registro de deleções",
+"reverted"      => "Revertido para versão mais nova",
+"deletecomment" => "Motivo da deleção",
+"imagereverted" => "Reversão para versão mais atual efetuada com sucesso.",
+"rollback"      => "Voltar edições",
+"rollbacklink"  => "voltar",
+"rollbackfailed" => "Rollback falhou",
+"cantrollback"  => "Não foi possível reverter a edição; o último contribuidor é o único autor deste artigo.",
+"alreadyrolled" => "Não foi possível reverter as edições de  [[:$1]]
+por [[User:$2|$2]] ([[User talk:$2|discussão]]); alguém o editou ou já o reverteu.
+
+A última edição foi de  [[User:$3|$3]] ([[User talk:$3|Conversar com ele]]).",
+#   only shown if there is an edit comment
+"editcomment" => "O comentário de edição era: \"<i>$1</i>\".",
+"revertpage"    => "Revertido para a última edição por  $1",
+
+# Undelete
+"undelete" => "Restaurar páginas deletadas",
+"undeletepage" => "Ver e restaurar páginas deletadas",
+"undeletepagetext" => "As páginas seguintes foram apagadas mas ainda permanecem no bando de dados e podem ser restauradas. O arquivo pode ser limpo periodicamente.",
+"undeletearticle" => "Restaurar artigo deletado",
+"undeleterevisions" => "$1 revisões arquivadas",
+"undeletehistory" => "Se você restaurar uma página, todas as revisões serão restauradas para o histórico.
+Se uma nova página foi criada com o mesmo nome desde a deleção, as revisões restauradas aparecerão primeiro no histórico e a página existente não será automaticamente recolocada.",
+"undeleterevision" => "Revisões deletadas de  $1",
+"undeletebtn" => "Restaurar!",
+"undeletedarticle" => " \"$1\" restaurado",
+
+# Contributions
+#
+"contributions" => "Contribuições de usuários",
+"mycontris" => "Minhas contribuições",
+"contribsub2"    => "Para $1 ($2)",
+"nocontribs"    => "Não foram encontradas mudanças com este critério.",
+"ucnote"        => "Segue as últimas  <b>$1</b> mudanças nos últimos <b>$2</b> dias do usuário.",
+"uclinks"       => "Ver as últimas $1 mudanças; ver os últimos $2 dias.",
+"uctop"     => " (topo)" ,
+
+# What links here
+#
+"whatlinkshere" => "Artigos Relacionado",
+"notargettitle" => "Sem alvo",
+"notargettext"  => "Você não especificou um alvo ou usuário para performar esta função.",
+"linklistsub"   => "(Lista de links)",
+"linkshere"     => "Os seguintes artigos contém links que apontam para cá:",
+/*"nolinkshere"   => "Nenhuma página relaciona-se �  esta.",*/
+"isredirect"    => "página de redirecionamento",
+
+# Block/unblock IP
+#
+"blockip"       => "Bloquear endereço de IP",
+/*"blockiptext"   => "Utilize o formulário de e-mail �  seguir para bloquear o acesso a escrita de um endereço específico de IP.
+Isto só pode ser feito para previnir vandalismo , e em acordo com a  [[{{ns:4}}:Policy|política da {{SITENAME}}]].
+Preencha com um motivo específico (por exemplo, citando páginas que sofreram vandalismo).",*/
+"ipaddress"     => "Endereço de IP",
+"ipbreason"     => "Motivo",
+"ipbsubmit"     => "Bloquear este endereço",
+"badipaddress"  => "O endereço de IP está mal-formado.",
+"blockipsuccesssub" => "Bloqueio bem sucedido",
+"blockipsuccesstext" => "O endereço de IP \"$1\" Foi bloqueado.
+<br />Veja [[Special:Ipblocklist|Lista de IP's bloqueados]] para rever os bloqueios.",
+"unblockip"     => "Desbloquear endereço de IP",
+"unblockiptext" => "Utilize o formulário a seguir para restaurar o acesso a escrita para um endereço de IP previamente bloqueado.",
+"ipusubmit"     => "Desbloquear este endereço",
+"ipblocklist"   => "Lista de IP's bloqueados",
+"blocklistline" => "$1, $2 bloqueado $3 ($4)",
+"blocklink"     => "block",
+"unblocklink"   => "unblock",
+"contribslink"  => "contribs",
+
+# Developer tools
+#
+"lockdb"        => "Trancar Banco de Dados",
+"unlockdb"      => "Destrancar Banco de Dados",
+"lockdbtext"    => "Trancar o banco de dados suspenderá a habilidade de todos os usuários de editarem páginas, mudarem suas preferências, listas de monitoramento e outras coisas que requerem mudanças no banco de dados.
+Por favor confirme que você realmente pretende fazer isto, e que você vai desbloquear o banco de dados quando sua manutenção estiver completa.",
+"unlockdbtext"  => "Desbloquear o banco de dados vai restaurar a habilidade de todos os usuários de editar artigos, mudar suas preferências, editar suas listas de monitoramento e outras coisas que requerem mudanças no banco de dados. Por favor, confirme que você realmente pretende fazer isto.",
+"lockconfirm"   => "SIM, eu realmente pretendo trancar o banco de dados.",
+"unlockconfirm" => "SIM, eu realmente pretendo destrancar o banco de dados.",
+"lockbtn"       => "Trancar banco",
+"unlockbtn"     => "Destrancar banco",
+"locknoconfirm" => "Você não checou a caixa de confirmação.",
+"lockdbsuccesssub" => "Tranca bem sucedida",
+"unlockdbsuccesssub" => "Destranca bem sucedida",
+"lockdbsuccesstext" => "O banco de dados da {{SITENAME}} foi trancado.
+<br />Lembre-se de remover a tranca após a manutenção.",
+"unlockdbsuccesstext" => "O bando de dados da {{SITENAME}} foi destrancado.",
+
+# Move page
+#
+"movepage"      => "Mover página",
+"movepagetext"  => "Usando o formulário a seguir você poderá renomear uma página, movendo todo o histórico para o novo nome.
+O título antigo será transformado num redirecionamento para o novo título.
+Links para as páginas antigas não serão mudados; certifique-se de checar redirecionamentos  quebrados ou artigos duplos.
+Você é responsável por certificar-se que os links continuam apontando para onde eles deveriam apontar.
+
+Note que a página '''não''' será movida se já existe uma página com o novo título, a não ser que ele esteja vazio ou seja um redirecionamento e não tenha histórico de edições. Isto significa que você pode renomear uma págna de volta para o nome que era antigamente se você cometer algum enganoe você não pode sobrescrever uma página.
+
+<b>!!!CUIDADO!!!</b>
+Isto pode ser uma mudança drástica e inexperada para uma página popular;
+por favor tenha certeza de que compreende as consequencias disto antes de proceder.",
+"movepagetalktext" => "A página associada, se existir, será automaticamente movida,  '''a não ser que:'''
+*Você esteja movendo uma página estre namespaces,
+*Uma página talk (não-vazia) já exista sob o novo nome, ou
+*Você não marque a caixa abaixo.
+
+Nestes casos, você terá que mover ou mesclar a página manualmente se desejar .",
+"movearticle"   => "Mover página",
+"movenologin"   => "Não Autenticado",
+"movenologintext" => "Você deve ser um usuário registrado e [[Special:Userlogin|autenticado]]
+para mover uma página.",
+"newtitle"      => "Pata novo título",
+"movepagebtn"   => "Mover página",
+"pagemovedsub"  => "Moção bem sucedida",
+"pagemovedtext" => "Página \"[[$1]]\" movida para \"[[$2]]\".",
+"articleexists" => "Uma página com este nome já existe, ou o nome que você escolheu é inválido.
+Por favor, escolha outro nome.",
+"talkexists"    => "A página em si foi movida com sucesso, porém a página de discussão não pode ser movida por que já existe uma com este nome. Por favor, mescle-as manualmente.",
+"movedto"       => "movido para",
+"movetalk"      => "Mover página  de discussão também, se aplicável.",
+"talkpagemoved" => "A página de discussão correspondente foi movida com sucesso.",
+"talkpagenotmoved" => "A página de discussão correspondente  <strong>não</strong> foi movida.",
+# Math
+'mw_math_png' => "Sempre renderizar PNG",
+'mw_math_simple' => "HTML se for bem simples e PNG",
+'mw_math_html' => "HTML se possível ou então PNG",
+'mw_math_source' => "Deixar como TeX (para navegadores em modo texto)",
+'mw_math_modern' => "Recomendado para navegadores modernos",
+'mw_math_mathml' => 'MathML',
+
+);
+
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesQu.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesQu.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesQu.php	(revision 1280)
@@ -0,0 +1,8 @@
+<?php
+/** Quechua (Runa Simi)
+  *
+  * @addtogroup Language
+  */
+
+$fallback = 'es';
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesRmy.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesRmy.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesRmy.php	(revision 1280)
@@ -0,0 +1,401 @@
+<?php
+/**
+ * Vlax Romany (Romani)
+ *
+ * @addtogroup Language
+ *
+ * @author Niklas Laxström
+ */
+
+/**
+ * Use Romanian as default instead of English
+ */
+$fallback = 'ro';
+
+$namespaceNames = array(
+	NS_MEDIA          => 'Mediya',
+	NS_SPECIAL        => 'Uzalutno',
+	NS_MAIN           => '',
+	NS_TALK           => 'Vakyarimata',
+	NS_USER           => 'Jeno',
+	NS_USER_TALK      => 'Jeno_vakyarimata',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK   => '{{grammar:genitive-pl|$1}}_vakyarimata',
+	NS_IMAGE          => 'Chitro',
+	NS_IMAGE_TALK     => 'Chitro_vakyarimata',
+	NS_MEDIAWIKI      => 'MediyaViki',
+	NS_MEDIAWIKI_TALK => 'MediyaViki_vakyarimata',
+	NS_TEMPLATE       => 'Sikavno',
+	NS_TEMPLATE_TALK  => 'Sikavno_vakyarimata',
+	NS_HELP           => 'Zhutipen',
+	NS_HELP_TALK      => 'Zhutipen_vakyarimata',
+	NS_CATEGORY       => 'Shopni',
+	NS_CATEGORY_TALK  => 'Shopni_vakyarimata'
+);
+
+$messages = array(
+# Bits of text used by many pages
+'subcategories' => 'Telekategoriye',
+
+'about'          => 'Andar',
+'article'        => 'Lekh',
+'newwindow'      => '(inklel aver filiyastra)',
+'cancel'         => 'Mekh la',
+'qbedit'         => 'Editisar',
+'qbpageinfo'     => 'Patrinyake janglimata',
+'qbspecialpages' => 'Uzalutne patrya',
+'mypage'         => 'Miri patrin',
+'mytalk'         => 'Mire vakyarimata',
+'navigation'     => 'Phirimos',
+
+'errorpagetitle'   => 'Dosh',
+'returnto'         => 'Ja palpale kai $1.',
+'help'             => 'Zhutipen',
+'search'           => 'Rod',
+'searchbutton'     => 'Rod',
+'go'               => 'Ja',
+'searcharticle'    => 'Ja',
+'history'          => 'Puraneder versiye',
+'history_short'    => 'Puranipen',
+'printableversion' => 'Printisaripnaski versiya',
+'permalink'        => 'Savaxtutno phandipen',
+'print'            => 'Printisaripen',
+'edit'             => 'Editisar i patrin',
+'editthispage'     => 'Editisar i patrin',
+'deletethispage'   => 'Khos i patrin',
+'newpage'          => 'Nevi patrin',
+'specialpage'      => 'Uzalutni patrin',
+'articlepage'      => 'Dikh o lekh',
+'talk'             => 'Vakyarimata',
+'toolbox'          => 'Labnengo moxton',
+'userpage'         => 'Dikh i jeneski patrin',
+'viewtalkpage'     => 'Dikh i diskucia',
+'otherlanguages'   => 'Avre ćhibande',
+'lastmodifiedat'   => 'O palutno paruvipen $2, $1.', # $1 date, $2 time
+'jumpto'           => 'Ja kai:',
+
+# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
+'aboutsite'     => 'Andar {{SITENAME}}',
+'aboutpage'     => 'Project:Andar',
+'copyrightpage' => 'Project:Autorenge xakaya (chachimata)',
+'edithelp'      => 'Editisaripnasko zhutipen',
+'edithelppage'  => 'Project:Sar te editisares ek patrin',
+'helppage'      => 'Project:Źutipen',
+'mainpage'      => 'Sherutni patrin',
+'portal'        => 'Maladipnasko than',
+'portal-url'    => 'Project:Maladipnasko than',
+'sitesupport'   => 'Denimata',
+
+'retrievedfrom'   => 'Lino katar "$1"',
+'editsection'     => 'editisar',
+'editsectionhint' => 'Editisar o kotor: $1',
+'toc'             => 'Ander',
+'showtoc'         => 'dikh',
+'hidetoc'         => 'garav',
+
+# Short words for each namespace, by default used in the 'article' tab in monobook
+'nstab-main'     => 'Lekh',
+'nstab-user'     => 'Jeneski patrin',
+'nstab-media'    => 'Mediya patrin',
+'nstab-special'  => 'Uzalutno',
+'nstab-image'    => 'Chitro',
+'nstab-template' => 'Sikavno',
+'nstab-help'     => 'Zhutipen',
+'nstab-category' => 'Kategoriya',
+
+# General errors
+'wrong_wfQuery_params' => 'Doshalo gin le parametrengo ko wfQuery()<br />I function: $1<br />Query: $2',
+'viewsource'           => 'Dikh i sursa',
+
+# Login and logout pages
+'loginpagetitle'             => 'Jenesko prinjaripen',
+'yourname'                   => 'Tiro anav',
+'yourpassword'               => 'O nakhavipnasko lav',
+'yourpasswordagain'          => 'O nakhavipnasko lav de nevo',
+'loginproblem'               => '<b>Sas ek problem le tire prinjaripnaski</b><br />Ker les de nevo!',
+'login'                      => 'Prinjaripen',
+'userlogin'                  => 'Prinjaripen / Ker ek akount',
+'userlogout'                 => 'De avri',
+'nologinlink'                => 'Ker ek akount',
+'createaccount'              => 'Ker ek nevo akount',
+'youremail'                  => 'Emailesko adress (kana kames)*',
+'yourrealname'               => 'Tiro chacho anav*',
+'yourlanguage'               => 'Ćhib:',
+'yournick'                   => 'I xarni versyunya, le semnaturenge',
+'loginerror'                 => 'Prinjaripnaski dosh',
+'wrongpassword'              => 'O nakhavipnasko lav so thovdyan si doshalo. Mangas tuke te zumaves vi ekvar.',
+'mailmypassword'             => 'Bićhal ma o nakhavipnasko lav e-mail-estar!',
+'passwordremindertext'       => 'Varekon (shai te aves tu, katar i adresa $1)
+manglyas ek nevo nakahvipnasko lav katar {{SITENAME}}.
+O nakhavipnasko lav le jenesko "$2" akana si "$3".
+Mishto si te jas kai {{SITENAME}} thai te paruves tiro lav sigo.',
+'acct_creation_throttle_hit' => 'Fal ame nasul, akana si tut $1 akounturya. Nashti te keres aver.',
+'accountcreated'             => 'Akount kerdo',
+
+# Edit page toolbar
+'image_sample' => 'Misal.jpg',
+
+# Edit pages
+'summary'            => 'Xarno xalyaripen',
+'minoredit'          => 'Kadava si ek tikno editisarimos',
+'watchthis'          => 'Dikh kadaya patrin',
+'savearticle'        => 'Uxtav i patrin',
+'showpreview'        => 'Dikh sar avelas i patrin',
+'showdiff'           => 'Dikh le paruvimata',
+'whitelistedittitle' => 'Trebul o [[Special:Userlogin|autentifikaripen]] kashte editisares',
+'whitelistedittext'  => 'Trebul te [[Special:Userlogin|autentifikisares]] kashte editisares artikolurya.',
+'whitelistreadtitle' => 'Trebul o autentifikaripen kashte drabares',
+'whitelistreadtext'  => 'Trebul te [[Special:Userlogin|autentifikisares]] kashte drabares artikolurya.',
+'whitelistacctitle'  => 'Chi shai (nai tuke xakaya) te keres konturya',
+'accmailtitle'       => 'O nakhavipnasko lav bićhaldo.',
+'accmailtext'        => "O nakhavipnasko lav andar '$1' bićhaldo ko $2.",
+'newarticle'         => '(Nevo)',
+'newarticletext'     => 'Avilyan kai ek patrin so na si.
+Te keres la, shai te shirdes (astares) te lekhaves ando telutno moxton (dikh [[{{MediaWiki:helppage}}|zhutipnaski patrin]] te janes buteder).
+Kana avilyan kathe doshatar, ja palpale.',
+'noarticletext'      => "Andi '''{{SITENAME}}''' nai ji akana ek lekh kadale anavesa.
+* Te shirdes (astares) te keres o lekh, ker klik  '''[{{fullurl:{{FULLPAGENAME}}|action=edit}} kathe]'''.",
+'editing'            => 'Editisaripen $1',
+'editinguser'        => 'Editisaripen $1',
+'yourtext'           => 'Tiro teksto',
+'storedversion'      => 'Akanutni versiya',
+'yourdiff'           => 'Ververimata',
+
+# History pages
+'revhistory'       => 'puranipen le versiyango',
+'revnotfoundtext'  => 'I puraneder versiya la patrinyaki so tu manglyan na arakhel pes. Mangas tuke te palemdikhes o phandipen so labyardyan kana avilyan kathe.',
+'loadhist'         => 'Ladavav o puranipen le versiyango',
+'previousrevision' => '← Purano paruvipen',
+'nextrevision'     => 'Nevi paruvipen →',
+'cur'              => 'akanutni',
+'last'             => 'purani',
+'histlegend'       => 'Xalyaripen: (akanutni) = ververimata mamui i akanutni versiya,
+(purani) = ververimata mamui i puraneder versiya, T = tikno editisaripen',
+'deletedrev'       => '[khoslo]',
+'histfirst'        => 'O mai purano',
+'histlast'         => 'O mai nevo',
+
+# Diffs
+'compareselectedversions' => 'Dikh ververimata mashkar alosarde versiye',
+
+# Search results
+'prevn'             => 'mai neve $1',
+'nextn'             => 'mai purane $1',
+'viewprevnext'      => 'Dikh ($1) ($2) ($3).',
+'showingresults'    => 'Tele si <b>$1</b> rezultaturya shirdindoi le ginestar <b>$2</b>.',
+'showingresultsnum' => 'Tele si <b>$3</b> rezultaturya shirdindoi le ginestar <b>$2</b>.',
+'powersearch'       => 'Rod',
+
+# Preferences page
+'preferences'    => 'Kamimata',
+'changepassword' => 'Paruv o nakhavipnasko lav',
+'skin'           => 'Dikhimos',
+'prefs-rc'       => 'Neve paruvimata',
+'localtime'      => 'Thanutno vaxt',
+'timezoneoffset' => 'Ververipen',
+
+# Recent changes
+'changes'           => 'paruvimata',
+'recentchanges'     => 'Neve paruvimata',
+'recentchangestext' => 'Andi kadaya patrin shai te dikhes le neve paruvimata andi romani {{SITENAME}}.',
+'rcnote'            => 'Tele si le palutne <strong>$1</strong> paruvimata andar le palutne <strong>$2</strong> divesa.',
+'rclistfrom'        => 'Dikh le paruvimata ji kai $1',
+'rclinks'           => 'Dikh le palutne $1 paruvimata andar le palutne $2 divesa.<br />$3',
+'diff'              => 'ververipen',
+'hist'              => 'puranipen',
+'hide'              => 'garav',
+'show'              => 'dikh',
+'minoreditletter'   => 't',
+
+# Upload
+'upload'      => 'Bićhal file',
+'uploadbtn'   => 'Bićhal file',
+'filedesc'    => 'Xarno xalyaripen',
+'badfilename' => 'O chitrosko anav sas paruvdo; o nevo anav si "$1".',
+
+# Image list
+'imagelist'           => 'Patrinipen le chitrengo',
+'imagelistforuser'    => 'Kathe si numa le chitre ladavde katar $1.',
+'ilsubmit'            => 'Rod',
+'imgdelete'           => 'khos',
+'imghistory'          => 'Chitrosko puranipen',
+'deleteimg'           => 'khosav',
+'deleteimgcompletely' => 'khosav',
+'imagelinks'          => 'Chitroske phandimata',
+
+# Unused templates
+'unusedtemplates'    => 'Bilabyarde sikavne',
+'unusedtemplateswlh' => 'aver phandimata',
+
+# Statistics
+'statistics'    => 'Beshimata',
+'sitestats'     => 'Site-ske beshimata',
+'userstatstext' => 'Si <b>$1</b> jene rejistrime (lekhavde).
+Mashkar lende <b>$2</b> si administratorurya (dikh $3).',
+
+# Miscellaneous special pages
+'wantedpages'         => 'Kamle pajine',
+'allpages'            => 'Savore patrya',
+'shortpages'          => 'Xarne patrya',
+'deadendpages'        => 'Biphandimatenge patrya',
+'listusers'           => 'Jenengo patrinipen',
+'specialpages'        => 'Uzalutne patrya',
+'spheading'           => 'Uzalutne patrya',
+'recentchangeslinked' => 'Pashvipnaske paruvimata',
+'rclsub'              => '(le patrinyanca phandle katar "$1")',
+'newpages'            => 'Neve patrya',
+'ancientpages'        => 'E puraneder lekha',
+'intl'                => 'Phandimata mashkar ćhiba',
+'move'                => 'Ingerdipen',
+
+# Special:Allpages
+'nextpage'       => 'Anglutni patrin ($1)',
+'allarticles'    => 'Sa le artikolurya',
+'allpagessubmit' => 'Ja',
+
+# E-mail user
+'emailuser' => 'Bićhal e-mail kodoleske',
+'emailfrom' => 'Katar',
+'emailto'   => 'Karing',
+'emailsend' => 'Bićhal',
+
+# Watchlist
+'watchlist'        => 'Dikhipnaske lekha',
+'mywatchlist'        => 'Dikhipnaske lekha',
+'addedwatch'       => 'Thovdi ando patrinipen le patrinyange so arakhav len',
+'addedwatchtext'   => 'I patrin "[[:$1]]" sas thovdi andi tiri lista [[Special:Watchlist|le artikolengi so dikhes len]].
+Le neve paruvimata andar kadale patrya thai andar lenge vakyarimatenge patrya thona kathe, vi dikhena pen le <b>thule semnurenca</b> andi patrin le [[Special:Recentchanges|neve paruvimatenge]].
+
+Kana kamesa te khoses kadaya patrin andar tiri lista le patryange so arakhes len ker click kai "Na mai arakh" (opre, kana i patrin dikhel pes).',
+'removedwatchtext' => 'I patrin "[[:$1]]" sas khosli katar o patrinipen le dikhipnaske lekhenca (artikolurya).',
+'watch'            => 'Dikh la',
+'unwatch'          => 'Na mai dikh',
+'unwatchthispage'  => 'Na mai dikh',
+'wlnote'           => 'Tele si le palutne $1 paruvimata ande palutne <b>$2</b> ore.',
+'wlsaved'          => 'Kadaya si i uxtavni versiunya la tiri listyaki le dikhAceasta este o versiune salvată a listei tale de pagini urmărite.',
+
+'enotif_newpagetext' => 'Kadaya si ek nevi patrin.',
+
+# Delete/protect/revert
+'deletepage'      => 'Khos i patrin',
+'excontent'       => "o ander sas: '$1'",
+'excontentauthor' => "o ander sas: '$1' (thai o korkoro butyarno sas '$2')",
+'exblank'         => 'i patrin sas chuchi',
+'deletesub'       => '(Khosav "$1")',
+'historywarning'  => 'Dikh! La patrya so kames to khoses la si la puranipen:',
+'actioncomplete'  => 'Agorisardi buti',
+'deletedtext'     => '"$1" sas khosli.
+Dikh ando $2 ek patrinipen le palutne butyange khosle.',
+'deletedarticle'  => '"$1" sas khosli.',
+'rollback_short'  => 'Palemavilipen',
+'rollbacklink'    => 'palemavilipen',
+'rollbackfailed'  => 'O palemavilipen nashtisardyas te kerel pes.',
+
+# Contributions
+'contributions' => 'Jeneske butya',
+'mycontris'     => 'Mire butya',
+'contribsub2'    => 'Katar $1 ($2)',
+'uctop'         => ' (opre)',
+
+'sp-contributions-newest' => 'O mai nevo',
+'sp-contributions-oldest' => 'O mai purano',
+'sp-contributions-newer'  => 'Mai neve $1',
+'sp-contributions-older'  => 'Mai purane $1',
+
+# What links here
+'whatlinkshere' => 'So phandel pes kathe',
+'nolinkshere'   => 'Ni ek patrin phandel pes (avel) kathe.',
+
+# Block/unblock
+'contribslink' => 'butya',
+
+# Move page
+'movearticle'      => 'Inger i patrin',
+'pagemovedsub'     => 'I patrin sas bićhaldi.',
+'pagemovedtext'    => 'I patrin "[[$1]]" sas bićhaldi karing "[[$2]]".',
+'movedto'          => 'ingerdi kai',
+'talkpagemoved'    => 'Ingerdi vi i phandli vakyarimatengi patrin.',
+'talkpagenotmoved' => 'I phandli vakyarimatengi patrin <strong>nai</strong> ingerdi.',
+'1movedto2'        => '[[$1]] bichhaldo kai [[$2]]',
+
+# Namespace 8 related
+'allmessages'     => 'Toate mesajele',
+'allmessagesname' => 'Anav',
+
+# Tooltip help for the actions
+'tooltip-pt-userpage'           => 'Miri labyarneski pajina',
+'tooltip-pt-anonuserpage'       => 'Miri labyarneski pajina ki akanutni IP adress',
+'tooltip-pt-mytalk'             => 'Miri diskuciyaki pajina',
+'tooltip-pt-anontalk'           => 'Diskucie le editisarimatenge ki akanutni IP adress',
+'tooltip-pt-preferences'        => 'Sar kamav te dikhel pes miri pajina',
+'tooltip-pt-watchlist'          => 'I lista le pajinenge so dikhav lendar (monitorizav).',
+'tooltip-pt-mycontris'          => 'Le mire editisarimata',
+'tooltip-pt-login'              => 'Mishto si te identifikares tut, pale na si musai.',
+'tooltip-pt-anonlogin'          => 'Mishto si te identifikares tut, pale na si musai.',
+'tooltip-pt-logout'             => 'Kathe aćhaves i sesiyunya',
+'tooltip-ca-talk'               => 'Diskuciya le artikoleske',
+'tooltip-ca-edit'               => 'Shai te editisares kadaya pajina. Mangas te paledikhes o teksto anglal te uxtaves les.',
+'tooltip-ca-addsection'         => 'Kathe shai te thos ek komentaryo ki kadaya diskuciya.',
+'tooltip-ca-viewsource'         => 'Kadaya pajina si brakhli. Shai numa te dikhes o source-code.',
+'tooltip-ca-history'            => 'Purane versiune le dokumenteske.',
+'tooltip-ca-protect'            => 'Brakh kadava dokumento.',
+'tooltip-ca-delete'             => 'Khos kadava dokumento.',
+'tooltip-ca-undelete'           => 'Palemthav le editisarimata kerdine le kadale dokumenteske sar sas anglal lesko khosipen.',
+'tooltip-ca-move'               => 'Trade kadava dokumento.',
+'tooltip-ca-watch'              => 'Thav kadava dokumento andi monitorizaripnaski lista.',
+'tooltip-ca-unwatch'            => 'Khos kadava dokumento andar i monitorizaripnaski lista.',
+'tooltip-search'                => 'Rod andi kadaya Wiki',
+'tooltip-p-logo'                => 'I sherutni pajina',
+'tooltip-n-mainpage'            => 'Dikh i sherutni pajina',
+'tooltip-n-portal'              => 'O proyekto, so shai te keres, kai arakhes solucie.',
+'tooltip-n-currentevents'       => 'Arakh janglimata le akanutne evenimenturenge',
+'tooltip-n-recentchanges'       => 'I lista le neve paruvimatenge kerdini andi kadaya wiki.',
+'tooltip-n-randompage'          => 'Ja ki ek aleatori pajina',
+'tooltip-n-help'                => 'O than kai arakhes zhutipen.',
+'tooltip-n-sitesupport'         => 'Zhutisar amen',
+'tooltip-t-whatlinkshere'       => 'I lista sa le wiki pajinenge so aven (si phande) vi kathe',
+'tooltip-t-recentchangeslinked' => 'Neve paruvimata andi kadaya pajina',
+'tooltip-feed-rss'              => 'Kathe te pravares o RSS flukso le kadale pajinyako',
+'tooltip-feed-atom'             => 'Kathe te pravares o Atom flukso le kadale pajinyako',
+'tooltip-t-contributions'       => 'Dikh i lista le editisarimatenge le kadale labyaresko',
+'tooltip-t-emailuser'           => 'Bićhal ek emailo le kadale labyareske',
+'tooltip-t-upload'              => 'Bićhal imajine vai media files',
+'tooltip-t-specialpages'        => 'I lista sa le spechiale pajinengi',
+'tooltip-ca-nstab-main'         => 'Dikh o artikolo',
+'tooltip-ca-nstab-user'         => 'Dikh i labyarengi pajina',
+'tooltip-ca-nstab-media'        => 'Dikh i pajina media',
+'tooltip-ca-nstab-special'      => 'Kadaya si ek spechiali pajina, nashti te editisares la.',
+'tooltip-ca-nstab-project'      => 'Dikh i pajina le proyekteski',
+'tooltip-ca-nstab-image'        => 'Dikh i imajinyaki pajina',
+'tooltip-ca-nstab-mediawiki'    => 'Dikh o mesajo le sistemesko',
+'tooltip-ca-nstab-template'     => 'Dikh o formato',
+'tooltip-ca-nstab-help'         => 'Dikh i zhutipnaski pajina',
+'tooltip-ca-nstab-category'     => 'Dikh i kategoriya',
+
+# Attribution
+'lastmodifiedatby' => 'Kadaya patrin sas paruvdi agoreste $2, $1 katar $3.', # $1 date, $2 time, $3 user
+'and'              => 'thai',
+'others'           => 'aver',
+
+# Image deletion
+'deletedrevision' => 'Khoslo o purano paruvipen $1.',
+
+# Browsing diffs
+'previousdiff' => '← Purano ververipen',
+'nextdiff'     => 'Anglutno paruvipen →',
+
+'showhidebots' => '($1 boturya)',
+
+# 'all' in various places, this might be different for inflected languages
+'recentchangesall' => 'sa',
+'imagelistall'     => 'savore',
+'watchlistall1'    => 'savore',
+'watchlistall2'    => 'savore',
+'namespacesall'    => 'savore',
+
+# Delete conflict
+'deletedwhileediting' => 'Dikh: Kadaya patrin sas khosli de kana shirdyas (astardyas) te editisares la!',
+
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesRo.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesRo.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesRo.php	(revision 1280)
@@ -0,0 +1,1888 @@
+<?php
+/** Romanian (Română)
+ *
+ * @addtogroup Language
+ */
+$skinNames = array(
+	'standard' => 'Normală',
+	'nostalgia' => 'Nostalgie'
+);
+
+$magicWords = array(
+	#   ID                                 CASE  SYNONYMS
+	'redirect'               => array( 0,    '#redirect'                                       ),
+	'notoc'                  => array( 0,    '__NOTOC__', '__FARACUPRINS__'                    ),
+	'noeditsection'          => array( 0,    '__NOEDITSECTION__', '__FARAEDITSECTIUNE__'       ),
+	'start'                  => array( 0,    '__START__'                                       ),
+	'currentmonth'           => array( 1,    'CURRENTMONTH', '{{NUMARLUNACURENTA}}'            ),
+	'currentmonthname'       => array( 1,    'CURRENTMONTHNAME', '{{NUMELUNACURENTA}}'         ),
+	'currentday'             => array( 1,    'CURRENTDAY', '{{NUMARZIUACURENTA}}'              ),
+	'currentdayname'         => array( 1,    'CURRENTDAYNAME', '{{NUMEZIUACURENTA}}'           ),
+	'currentyear'            => array( 1,    'CURRENTYEAR', '{{ANULCURENT}}'                   ),
+	'currenttime'            => array( 1,    'CURRENTTIME', '{{ORACURENTA}}'                   ),
+	'numberofarticles'       => array( 1,    'NUMBEROFARTICLES', '{{NUMARDEARTICOLE}}'         ),
+	'currentmonthnamegen'    => array( 1,    'CURRENTMONTHNAMEGEN', '{{NUMELUNACURENTAGEN}}'   ),
+	'subst'                  => array( 0,    'SUBST:'                                          ),
+	'msgnw'                  => array( 0,    'MSGNW:', 'MSJNOU:'                               ),
+	'img_thumbnail'          => array( 1,    'thumbnail', 'thumb'                              ),
+	'img_right'              => array( 1,    'right'                                           ),
+	'img_left'               => array( 1,    'left'                                            ),
+	'img_none'               => array( 1,    'none'                                            ),
+	'img_width'              => array( 1,    '$1px'                                            ),
+	'img_center'             => array( 1,    'center', 'centre'                                ),
+	'int'                    => array( 0,    'INT:'                                            )
+);
+
+$namespaceNames = array(
+	NS_MEDIA          => 'Media',
+	NS_SPECIAL        => 'Special',
+	NS_MAIN           => '',
+	NS_TALK           => 'Discuţie',
+	NS_USER           => 'Utilizator',
+	NS_USER_TALK      => 'Discuţie_Utilizator',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK   => 'Discuţie_$1',
+	NS_IMAGE          => 'Imagine',
+	NS_IMAGE_TALK     => 'Discuţie_Imagine',
+	NS_MEDIAWIKI      => 'MediaWiki',
+	NS_MEDIAWIKI_TALK => 'Discuţie_MediaWiki',
+	NS_TEMPLATE       => 'Format',
+	NS_TEMPLATE_TALK  => 'Discuţie_Format',
+	NS_HELP           => 'Ajutor',
+	NS_HELP_TALK      => 'Discuţie_Ajutor',
+	NS_CATEGORY       => 'Categorie',
+	NS_CATEGORY_TALK  => 'Discuţie_Categorie'
+);
+
+$datePreferences = false;
+$defaultDateFormat = 'dmy';
+$dateFormats = array(
+	'dmy time' => 'H:i',
+	'dmy date' => 'j F Y',
+	'dmy both' => 'j F Y H:i',
+);
+
+$fallback8bitEncoding = 'iso8859-2';
+
+
+
+$messages = array(
+# User preference toggles
+'tog-underline'               => 'Subliniază legăturile',
+'tog-highlightbroken'         => 'Formatează legăturile necreate <a href="" class="new">aşa</a> (alternativă: aşa<a href="" class="internal">?</a>).',
+'tog-justify'                 => 'Aranjează justificat paragrafele',
+'tog-hideminor'               => 'Ascunde modificările minore în schimbări recente',
+'tog-extendwatchlist'         => 'Extinde lista de articole urmărite pentru a arăta toate schimbările făcute',
+'tog-usenewrc'                => 'Schimbări recente avansate (JavaScript)',
+'tog-numberheadings'          => 'Numerotează automat secţiunile',
+'tog-showtoolbar'             => 'Afişează bara de unelte pentru modificare (JavaScript)',
+'tog-editondblclick'          => 'Modifică pagini la dublu clic (JavaScript)',
+'tog-editsection'             => 'Activează modificarea secţiunilor prin legăturile [modifică]',
+'tog-editsectiononrightclick' => 'Activează modificarea secţiunilor prin clic dreapta<br />
+pe titlul secţiunii (JavaScript)',
+'tog-showtoc'                 => 'Arată cuprinsul (pentru paginile cu mai mult de 3 paragrafe cu titlu)',
+'tog-rememberpassword'        => 'Aminteşte-ţi între sesiuni',
+'tog-editwidth'               => 'Căsuţa de modificare are lăţime maximă',
+'tog-watchcreations'          => 'Adaugă paginile create de mine pe lista de urmărire',
+'tog-watchdefault'            => 'Adaugă paginile pe care le modifici la lista ta de urmărire',
+'tog-minordefault'            => 'Marchează toate modificările minore din oficiu',
+'tog-previewontop'            => 'Arată previzualizarea înainte de a modifica secţiunea',
+'tog-previewonfirst'          => 'Arată previzualizarea la prima modificare',
+'tog-nocache'                 => 'Dezactivează cache-ul paginilor',
+'tog-enotifwatchlistpages'    => 'Trimite-mi un email la modificările paginilor',
+'tog-enotifusertalkpages'     => 'Trimite-mi un email când pagina mea de discuţii este modificată',
+'tog-enotifminoredits'        => 'Trimite-mi un email de asemenea pentru modificările minore ale paginilor',
+'tog-enotifrevealaddr'        => 'Descoperă-mi adresa email în mesajele de notificare',
+'tog-shownumberswatching'     => 'Arată numărul utilizatorilor care urmăresc',
+'tog-fancysig'                => 'Semnătură brută (fără legătură automată)',
+'tog-externaleditor'          => 'Utilizează modificator extern ca standard',
+'tog-externaldiff'            => 'Utilizează diferenţele externe ca standard',
+'tog-showjumplinks'           => 'Activează legăturile de accesibilitate "salt la"',
+'tog-uselivepreview'          => 'Utilizează previzualizarea live (JavaScript) (Experimental)',
+'tog-forceeditsummary'        => 'Avertizează-mă când uit să descriu modificările',
+'tog-watchlisthideown'        => 'Ascunde modificările mele de pe lista de articole urmărite',
+'tog-watchlisthidebots'       => 'Ascunde modificările boţilor de pe lista de articole urmărite',
+'tog-watchlisthideminor'      => 'Ascunde modificările minore de pe lista de articole urmărite',
+'tog-ccmeonemails'            => 'Trimite-mi o copie când trimit un email altui utilizator',
+
+'underline-always'  => 'Întotdeauna',
+'underline-never'   => 'Niciodată',
+'underline-default' => 'Standardul browser-ului',
+
+'skinpreview' => '(Previzualizare)',
+
+# Dates
+'sunday'    => 'duminică',
+'monday'    => 'luni',
+'tuesday'   => 'marţi',
+'wednesday' => 'miercuri',
+'thursday'  => 'joi',
+'friday'    => 'vineri',
+'saturday'  => 'sâmbătă',
+'january'   => 'ianuarie',
+'february'  => 'februarie',
+'march'     => 'martie',
+'april'     => 'aprilie',
+'may_long'  => 'mai',
+'june'      => 'iunie',
+'july'      => 'iulie',
+'august'    => 'august',
+'september' => 'septembrie',
+'october'   => 'octombrie',
+'november'  => 'noiembrie',
+'december'  => 'decembrie',
+'jan'       => 'ian',
+'feb'       => 'feb',
+'mar'       => 'mart',
+'apr'       => 'apr',
+'may'       => 'mai',
+'jun'       => 'iun',
+'jul'       => 'iul',
+'aug'       => 'aug',
+'sep'       => 'sept',
+'oct'       => 'oct',
+'nov'       => 'nov',
+'dec'       => 'dec',
+
+# Bits of text used by many pages
+'categories'            => '{{PLURAL:$1|Categorie|Categorii}}',
+'pagecategories'        => '{{PLURAL:$1|Categorie|Categorii}}',
+'category_header'       => 'Articole din categoria "$1"',
+'subcategories'         => 'Subcategorii',
+'category-media-header' => 'Fişiere media în categoria "$1"',
+
+'mainpagetext'      => "<big>'''Programul Wiki a fost instalat cu succes.'''</big>",
+'mainpagedocfooter' => 'Vezi [http://meta.wikimedia.org/wiki/MediaWiki_i18n documentaţia asupra adaptării interfeţei] şi [http://meta.wikimedia.org/wiki/MediaWiki_User%27s_Guide Ghidul de utilizator] pentru ajutor la utilizare şi configurare.',
+
+'about'          => 'Despre',
+'article'        => 'Articol',
+'newwindow'      => '(se deschide într-o fereastră nouă)',
+'cancel'         => 'Renunţă',
+'qbfind'         => 'Găseşte',
+'qbbrowse'       => 'Răsfoieşte',
+'qbedit'         => 'Modifică',
+'qbpageoptions'  => 'Opţiuni ale paginii',
+'qbpageinfo'     => 'Informaţii ale paginii',
+'qbmyoptions'    => 'Opţiunile mele',
+'qbspecialpages' => 'Pagini speciale',
+'moredotdotdot'  => 'Altele...',
+'mypage'         => 'Pagina mea',
+'mytalk'         => 'Discuţii',
+'anontalk'       => 'Discuţia pentru această adresă IP',
+'navigation'     => 'Navigare',
+
+# Metadata in edit box
+'metadata_help' => 'Metadata:',
+
+'errorpagetitle'    => 'Eroare',
+'returnto'          => 'Înapoi la $1.',
+'tagline'           => 'De la {{SITENAME}}',
+'help'              => 'Ajutor',
+'search'            => 'Caută',
+'searchbutton'      => 'Caută',
+'go'                => 'Du-te',
+'searcharticle'     => 'Du-te',
+'history'           => 'Versiuni mai vechi',
+'history_short'     => 'istoric',
+'updatedmarker'     => 'încărcat de la ultima mea vizită',
+'info_short'        => 'Informaţii',
+'printableversion'  => 'Versiune de tipărit',
+'permalink'         => 'Legătură permanentă',
+'print'             => 'Tipărire',
+'edit'              => 'Modifică',
+'editthispage'      => 'Modifică pagina',
+'delete'            => 'Şterge',
+'deletethispage'    => 'Şterge pagina',
+'undelete_short'    => 'Recuperarea {{PLURAL:$1|unei editări|de $1 editări}}',
+'protect'           => 'Protejează',
+'protect_change'    => 'schimbă protecţia',
+'protectthispage'   => 'Protejează pagina',
+'unprotect'         => 'Deprotejare',
+'unprotectthispage' => 'Deprotejează pagina',
+'newpage'           => 'Pagină nouă',
+'talkpage'          => 'Discută pagina',
+'specialpage'       => 'Pagină Specială',
+'personaltools'     => 'Unelte personale',
+'postcomment'       => 'Adaugă un comentariu',
+'articlepage'       => 'Vezi articolul',
+'talk'              => 'Discuţie',
+'views'             => 'Vizualizări',
+'toolbox'           => 'Trusa de unelte',
+'userpage'          => 'Vezi pagina utilizatorului',
+'projectpage'       => 'Vezi pagina proiectului',
+'imagepage'         => 'Vezi pagina imaginii',
+'mediawikipage'     => 'Vezi pagina mesajului',
+'templatepage'      => 'Vezi pagina formatului',
+'viewhelppage'      => 'Vezi pagina de ajutor',
+'categorypage'      => 'Vezi pagina categoriei',
+'viewtalkpage'      => 'Vezi discuţia',
+'otherlanguages'    => 'În alte limbi',
+'redirectedfrom'    => '(Redirecţionat de la $1)',
+'redirectpagesub'   => 'Pagină de redirecţionare',
+'lastmodifiedat'    => 'Ultima modificare $2, $1.', # $1 date, $2 time
+'viewcount'         => 'Această pagină a fost vizitată {{PLURAL:$1|odată|de $1 ori}}.',
+'protectedpage'     => 'Pagină protejată',
+'jumpto'            => 'Salt la:',
+'jumptonavigation'  => 'Navigare',
+'jumptosearch'      => 'căutare',
+
+# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
+'aboutsite'         => 'Despre {{SITENAME}}',
+'aboutpage'         => 'Project:Despre',
+'bugreports'        => 'Raportare probleme',
+'bugreportspage'    => 'Project:Rapoarte probleme',
+'copyright'         => 'Conţinutul este disponibil sub $1.',
+'copyrightpagename' => 'Drepturi de autor în {{SITENAME}}',
+'copyrightpage'     => 'Project:Drepturi de autor',
+'currentevents'     => 'Discută la cafenea',
+'currentevents-url' => 'Project:Cafenea',
+'disclaimers'       => 'Termeni',
+'disclaimerpage'    => 'Project:Termeni',
+'edithelp'          => 'Ajutor pentru modificare',
+'edithelppage'      => 'Project:Cum să modifici o pagină',
+'faq'               => 'Întrebări frecvente',
+'faqpage'           => 'Project:Întrebări frecvente',
+'helppage'          => 'Project:Ajutor',
+'mainpage'          => 'Pagina principală',
+'policy-url'        => 'Project:Politică',
+'portal'            => 'Portalul comunităţii',
+'portal-url'        => 'Project:Portal Comunitate',
+'privacy'           => 'Politica de confidenţialitate',
+'privacypage'       => 'Project:Politica de confidenţialitate',
+'sitesupport'       => 'Donaţii',
+'sitesupport-url'   => 'Project:Donaţii',
+
+'badaccess'        => 'Eroare permisiune',
+'badaccess-group0' => 'Execuţia acţiunii cerute nu este permisă.',
+'badaccess-group1' => 'Acţiunea cerută este rezervată utilizatorilor din grupul $1.',
+'badaccess-group2' => 'Acţiunea cerută este rezervată utilizatorilor din unul din grupurile $1.',
+'badaccess-groups' => 'Acţiunea cerută este rezervată utilizatorilor din unul din grupurile $1.',
+
+'versionrequired'     => 'Este necesară versiunea $1 MediaWiki',
+'versionrequiredtext' => 'Versiunea $1 MediaWiki este necesară pentru a folosi această pagină. Vezi [[Special:Version|versiunea actuală]].',
+
+'ok'                  => 'Trimite',
+'pagetitle'           => '$1 - {{SITENAME}}',
+'retrievedfrom'       => 'Adus de la "$1"',
+'youhavenewmessages'  => 'Aveţi $1 ($2).',
+'newmessageslink'     => 'mesaje noi',
+'newmessagesdifflink' => 'comparaţie cu versiunea precedentă',
+'editsection'         => 'modifică',
+'editold'             => 'modifică',
+'editsectionhint'     => 'Modifică secţiunea: $1',
+'toc'                 => 'Cuprins',
+'showtoc'             => 'arată',
+'hidetoc'             => 'ascunde',
+'thisisdeleted'       => 'Vizualizare sau recuperare $1?',
+'viewdeleted'         => 'Vizualizează $1?',
+'restorelink'         => '{{PLURAL:$1|o modificare ştearsă|$1 modificări şterse}}',
+'feedlinks'           => 'Întreţinere:',
+'feed-invalid'        => 'Tip de abonament invalid',
+
+# Short words for each namespace, by default used in the 'article' tab in monobook
+'nstab-main'      => 'Articol',
+'nstab-user'      => 'Pagină de utilizator',
+'nstab-media'     => 'Pagină Media',
+'nstab-special'   => 'Special',
+'nstab-project'   => 'Proiect',
+'nstab-image'     => 'Fişier',
+'nstab-mediawiki' => 'Mesaj',
+'nstab-template'  => 'Format',
+'nstab-help'      => 'Ajutor',
+'nstab-category'  => 'Categorie',
+
+# Main script and global functions
+'nosuchaction'      => 'Această acţiune nu există',
+'nosuchactiontext'  => 'Acţiunea specificată în adresă nu este recunoscută de {{SITENAME}}.',
+'nosuchspecialpage' => 'Această pagină specială nu există',
+'nospecialpagetext' => 'Ai cerut o [[Special:Specialpages|pagină specială]] care nu este recunoscută de {{SITENAME}}.',
+
+# General errors
+'error'                => 'Eroare',
+'databaseerror'        => 'Eroare la baza de date',
+'dberrortext'          => 'A apărut o eroare în execuţia query-ului. Aceasta se poate datora unui query ilegal (vezi $5), sau poate indica o problemă în program. Ultimul query încercat a fost: <blockquote><tt>$1</tt></blockquote> în cadrul funcţiei "<tt>$2</tt>". MySQL a returnat eroarea "<tt>$3: $4</tt>".',
+'dberrortextcl'        => 'A apărut o eroare de sintaxă în query. Ultimul query încercat a fost: "$1" din funcţia "$2". MySQL a returnat eroarea "$3: $4".',
+'noconnect'            => 'Nu s-a putut conecta baza de date pe $1',
+'nodb'                 => 'Nu s-a putut selecta baza de date $1',
+'cachederror'          => 'Aceasta este o versiune din cache a paginii cerute şi este posibil să nu fie ultima variantă a acesteia.',
+'laggedslavemode'      => 'Atenţie: S-ar putea ca pagina să nu conţină ultimele actualizări.',
+'readonly'             => 'Baza de date este blocată la scriere',
+'enterlockreason'      => 'Precizează motivul pentru blocare, incluzând o estimare a termenului de deblocare a bazei de date',
+'readonlytext'         => 'Baza de date {{SITENAME}} este momentan blocată la scriere, probabil pentru o operaţiune de rutină, după care va fi deblocată şi se va reveni la starea normală.
+
+Administratorul care a blocat-o a oferit această explicaţie: $1',
+'missingarticle'       => 'Textul "$1" nu a putut fi găsit în baza de date, aşa cum ar fi trebuit. Aceasta nu este o problemă legată de programul care gestionează baza de date, ci probabil o problemă în programul care administrează {{SITENAME}}. Te rugăm să raportezi această problemă unui administrator, incluzând şi adresa acestei pagini.',
+'readonly_lag'         => 'Baza de date a fost închisă automatic în timp ce serverele secundare ale bazei de date îl urmează pe cel principal.',
+'internalerror'        => 'Eroare internă',
+'filecopyerror'        => 'Fişierul "$1" nu a putut fi copiat la "$2".',
+'filerenameerror'      => 'Fişierul "$1" nu a putut fi mutat la "$2".',
+'filedeleteerror'      => 'Fişierul "$1" nu a putut fi şters.',
+'filenotfound'         => 'Fişierul "$1" nu a putut fi găsit.',
+'unexpected'           => 'Valoare neaşteptată: "$1"="$2".',
+'formerror'            => 'Eroare: datele nu au putut fi trimise',
+'badarticleerror'      => 'Această acţiune nu poate fi efectuată pe această pagină.',
+'cannotdelete'         => 'Comanda de ştergere nu s-a putut executa! Probabil că ştergerea a fost operată între timp.',
+'badtitle'             => 'Titlu invalid',
+'badtitletext'         => 'Titlul căutat a fost invalid, gol sau o legătură invalidă inter-linguală sau inter-wiki.',
+'perfdisabled'         => 'Ne pare rău! Această opţiune a fost dezactivată temporar în timpul orelor de vârf din motive de performanţă. Te rugăm să revii la altă oră şi să încerci din nou.',
+'perfdisabledsub'      => 'Iată o copie salvată de la $1:', # obsolete?
+'perfcached'           => 'Datele următoare au fost păstrate în cache şi s-ar putea să nu fie la zi.',
+'perfcachedts'         => "Informaţiile de mai jos provin din ''cache''; ultima actualizare s-a efectuat la $1.",
+'wrong_wfQuery_params' => 'Număr incorect de parametri pentru wfQuery()<br />
+Funcţia: $1<br />
+Interogarea: $2',
+'viewsource'           => 'Vezi sursa',
+'viewsourcefor'        => 'pentru $1',
+'protectedinterface'   => 'Această pagină asigură textul interfeţei pentru software şi este protejată pentru a preveni abuzurile.',
+'editinginterface'     => "'''Avertizare''': Editezi o pagină care este folosită pentru a furniza textul interfeţei pentru software. Modificările aduse acestei pagini vor afecta aspectul interfeţei utilizatorului pentru alţi utilizatori.",
+'sqlhidden'            => '(interogare SQL ascunsă)',
+
+# Login and logout pages
+'logouttitle'                => 'Sesiune închisă',
+'logouttext'                 => 'Sesiunea ta în {{SITENAME}} a fost închisă. Poţi continua să foloseşti {{SITENAME}} anonim, sau poţi să te reautentifici ca acelaşi sau ca alt utilizator.',
+'welcomecreation'            => '==Bun venit, $1!==
+
+Contul dumneavoatră a fost creat. Nu uitaţi să vă personalizaţi preferinţele în {{SITENAME}}.',
+'loginpagetitle'             => 'Autentificare utilizator',
+'yourname'                   => 'Numele de utilizator',
+'yourpassword'               => 'Parola',
+'yourpasswordagain'          => 'Repetă parola',
+'remembermypassword'         => 'Reţine-mi parola între sesiuni',
+'yourdomainname'             => 'Domeniul tău',
+'externaldberror'            => 'A fost fie o eroare de bază de date pentru o autentificare extenă sau nu aveţi permisiunea să actualizaţi contul extern.',
+'loginproblem'               => '<b>A apărut o problemă la autentificarea ta.</b><br />
+Încearcă din nou!',
+'alreadyloggedin'            => '<strong>Sunteţi deja autentificat ca $1!</strong><br />',
+'login'                      => 'Autentificare',
+'loginprompt'                => 'Trebuie să ai modulele cookie activate pentru a te autentifica la {{SITENAME}}.',
+'userlogin'                  => 'Creare cont / Autentificare',
+'logout'                     => 'Închide sesiunea',
+'userlogout'                 => 'Închide sesiunea',
+'notloggedin'                => 'Nu sunteţi autentificat',
+'nologin'                    => 'Nu aveţi cont încă? $1.',
+'nologinlink'                => 'Creaţi-vă un cont de utilizator acum',
+'createaccount'              => 'Creare cont',
+'gotaccount'                 => 'Aveţi deja un cont de utilizator? $1.',
+'gotaccountlink'             => 'Autentificaţi-vă',
+'createaccountmail'          => 'după e-mail',
+'badretype'                  => 'Parolele pe care le-ai introdus diferă.',
+'userexists'                 => 'Numele de utilizator pe care l-aţi introdus există deja. Încercaţi cu un alt nume.',
+'youremail'                  => 'Adresa de e-mail (opţional)*',
+'username'                   => 'Nume de utilizator:',
+'uid'                        => 'ID utilizator:',
+'yourrealname'               => 'Numele dvs. real*',
+'yourlanguage'               => 'Limbă interfaţă',
+'yourvariant'                => 'Varianta',
+'yournick'                   => 'Versiune scurtă a numelui, pentru semnături',
+'badsig'                     => 'Semnătură brută incorectă; verificaţi tag-urile HTML.',
+'email'                      => 'E-mail',
+'prefs-help-email-enotif'    => 'Această adresă este folosită de asemenea pentru a ţi se trimite notificări prin email dacă ai activat această opţiune.',
+'prefs-help-realname'        => '* Numele dumneavoastră real (opţional): Dacă decideţi introducerea numelui real aici, acesta va fi folosit pentru a vă atribui munca.<br />',
+'loginerror'                 => 'Eroare de autentificare',
+'prefs-help-email'           => '*Adresa de e-mail (opţional): Permite altor utilizatori să vă contacteze prin e-mail via {{SITENAME}} fără a vă divulga identitatea. De asemenea, permite recuperarea parolei dacă o uitaţi.',
+'nocookiesnew'               => 'Contul a fost creat, dar dvs. nu sunteţi autentificat(ă). {{SITENAME}} foloseşte cookie-uri pentru a reţine utilizatorii autentificaţi. Browser-ul dvs. are modulele cookie dezactivate (disabled). Vă rugăm să le activaţi şi să vă reautentificaţi folosind noul nume de utilizator şi noua parolă.',
+'nocookieslogin'             => '{{SITENAME}} foloseşte module cookie pentru a autentifica utilizatorii. Browser-ul dvs. are cookie-urile dezactivate. Vă rugăm să le activaţi şi să incercaţi din nou.',
+'noname'                     => 'Numele de utilizator pe care l-ai specificat este invalid.',
+'loginsuccesstitle'          => 'Autentificare reuşită',
+'loginsuccess'               => 'Aţi fost autentificat în {{SITENAME}} ca "$1".',
+'nosuchuser'                 => 'Nu există nici un utilizator cu numele "$1". Verifică dacă ai scris corect sau foloseşte această pagină pentru a crea un nou utilizator.',
+'nosuchusershort'            => 'Nu este nici un utilizator cu numele "$1". Verificaţi dacă aţi scris corect.',
+'nouserspecified'            => 'Trebuie să specificaţi un nume de utilizator.',
+'wrongpassword'              => 'Parola pe care ai introdus-o este greşită. Te rugăm să încerci din nou.',
+'wrongpasswordempty'         => 'Spaţiul pentru introducerea parolei nu a fost completat. Vă rugăm să încercaţi din nou.',
+'mailmypassword'             => 'Trimite-mi parola pe e-mail!',
+'passwordremindertitle'      => 'Amintirea parolei de la {{SITENAME}}',
+'passwordremindertext'       => 'Cineva (probabil tu, de la adresa $1)
+a cerut să ţi se trimită o nouă parolă pentru {{SITENAME}} ($4).
+Parola pentru utilizatorul "$2" este acum "$3".
+Este recomandat să intri pe {{SITENAME}} şi să-ţi schimbi parola cât mai curând.',
+'noemail'                    => 'Nu este nici o adresă de e-mail înregistrată pentru utilizatorul "$1".',
+'passwordsent'               => 'O nouă parolă a fost trimisă la adresa de e-mail a utilizatorului "$1". Te rugăm să te autentifici pe {{SITENAME}} după ce o primeşti.',
+'eauthentsent'               => 'Un email de confirmare a fost trimis adresei nominalizate. Înainte de a fi trimis orice alt email acestui cont, trebuie să urmaţi intrucţiunile din email, pentru a confirma că acest cont este într-adevăr al dvs.',
+'mailerror'                  => 'Eroare la trimitere e-mail: $1',
+'acct_creation_throttle_hit' => 'Ne pare rău, aţi creat deja $1 conturi de utilizator. Nu mai puteţi crea altul.',
+'emailauthenticated'         => 'Adresa de email a fost autentificată la $1.',
+'emailnotauthenticated'      => 'Adresa de email <strong>nu este autentificată încă</strong>. Nici un email nu va fi trimis pentru nici una din întrebuinţările următoare.',
+'noemailprefs'               => '<strong>Nu a fost specificată o adresă email</strong>, următoarele nu vor funcţiona.',
+'emailconfirmlink'           => 'Confirmaţi adresa dvs. de email',
+'invalidemailaddress'        => 'Adresa de email nu a putut fi acceptată pentru că pare a avea un format invalid. Vă rugăm să reintroduceţi o adresă bine formatată sau să goliţi acel câmp.',
+'accountcreated'             => 'Contul a fost creat.',
+'accountcreatedtext'         => 'Contul utilizatorului pentru $1 a fost creat.',
+
+# Password reset dialog
+'resetpass_text'      => '<!-- Adaugă text aici -->',
+'resetpass_header'    => 'Resetează parola',
+'resetpass_submit'    => 'Setează parola şi autentifică',
+'resetpass_success'   => 'Parola a fost schimbată cu succes! Autentificare în curs...',
+'resetpass_forbidden' => 'Parolele nu pot fi schimbate pe acest wiki',
+
+# Edit page toolbar
+'bold_sample'     => 'Text aldin',
+'bold_tip'        => 'Text aldin',
+'italic_sample'   => 'Text cursiv',
+'italic_tip'      => 'Text cursiv',
+'link_sample'     => 'Titlul legăturii',
+'link_tip'        => 'Legătură internă',
+'extlink_sample'  => 'http://www.exemplu.ro titlul legăturii',
+'extlink_tip'     => 'Legătură externă (nu uitaţi prefixul http://)',
+'headline_sample' => 'Text de titlu',
+'headline_tip'    => 'Titlu de nivel 2',
+'math_sample'     => 'Introduceţi formula aici',
+'math_tip'        => 'Formulă matematică (LaTeX)',
+'nowiki_sample'   => 'Introduceţi text neformatat aici',
+'nowiki_tip'      => 'Ignoră formatarea wiki',
+'image_sample'    => 'Exemplu.jpg',
+'image_tip'       => 'Inserează imagine',
+'media_sample'    => 'Exemplu.ogg',
+'media_tip'       => 'Legătură la fişier media',
+'sig_tip'         => 'Semnătura dvs. datată',
+'hr_tip'          => 'Linie orizontală (folosiţi-o cumpătat)',
+
+# Edit pages
+'summary'                   => 'Sumar',
+'subject'                   => 'Subiect / titlu',
+'minoredit'                 => 'Aceasta este o editare minoră',
+'watchthis'                 => 'Urmăreşte această pagină',
+'savearticle'               => 'Salvează pagina',
+'preview'                   => 'Previzualizare',
+'showpreview'               => 'Arată previzualizare',
+'showlivepreview'           => 'Previzualizare live',
+'showdiff'                  => 'Arată diferenţele',
+'anoneditwarning'           => "'''Avertizare:''' Nu sunteţi logat(ă). Adresa IP vă va fi înregistrată în istoricul acestei pagini.",
+'missingsummary'            => "'''Atenţie:''' Nu aţi completat caseta \"descriere modificări\". Dacă apăsaţi din nou butonul \"salvează pagina\" modificările vor fi salvate fără descriere.",
+'missingcommenttext'        => 'Vă rugăm să introduceţi un comentariu.',
+'blockedtitle'              => 'Utilizatorul este blocat',
+'blockedtext'               => "Adresa IP sau contul de utilizator v-a fost blocat de către $1 pentru următorul motiv:
+
+:''$2''
+
+Adresa dumneavoastră IP este $3.
+
+Dacă nu înţelegeţi motivul blocării vă invităm să consultaţi [[Project:Blocare|regulamentul de blocare]]. În cazul în care vă consideraţi nedreptăţit îl puteţi contacta pe $1 sau pe unul dintre ceilalţi [[{{MediaWiki:grouppage-sysop}}|administratori]] pentru a explica situaţia.
+
+'''Blocarea nu se referă la citirea paginilor {{SITENAME}}, ci doar la modificarea lor.''' 
+
+Pentru a afla cînd vă expiră blocarea căutaţi-vă numele de utilizator sau adresa IP în [[Special:Ipblocklist|lista de utilizatori blocaţi]].",
+'blockedoriginalsource'     => "Sursa pentru '''$1''' apare mai jos:",
+'blockededitsource'         => "Textul '''modificărilor tale''' la  '''$1''' este redat mai jos:",
+'whitelistedittitle'        => 'Este necesară autentificarea pentru a edita',
+'whitelistedittext'         => 'Trebuie să $1 pentru a edita articole.',
+'whitelistreadtitle'        => 'Este necesară autentificarea pentru a citi',
+'whitelistreadtext'         => 'Trebuie să te [[Special:Userlogin|autentifici]] pentru a citi articole.',
+'whitelistacctitle'         => 'Nu ai dreptul de a crea conturi',
+'whitelistacctext'          => 'Trebuie să te [[Special:Userlogin|autentifici]] şi să ai permisiunile corecte pentru a crea conturi.',
+'confirmedittitle'          => 'Pentru a edita e necesară confirmarea adresei de e-mail',
+'confirmedittext'           => 'Trebuie să vă confirmaţi adresa de e-mail înainte de a edita pagini. Vă rugăm să vă setaţi şi să vă validaţi adresa de e-mail cu ajutorul [[Special:Preferences|preferinţelor utilizatorului]].',
+'loginreqtitle'             => 'Necesită autentificare',
+'loginreqlink'              => 'autentifici',
+'loginreqpagetext'          => 'Trebuie să te $1 pentru a vizualiza alte pagini.',
+'accmailtitle'              => 'Parola a fost trimisă.',
+'accmailtext'               => "Parola pentru '$1' a fost trimisă la $2.",
+'newarticle'                => '(Nou)',
+'newarticletext'            => 'Ai ajuns la o pagină care nu există. Pentru a o crea, începe să scrii în caseta de mai jos (vezi [[{{MediaWiki:helppage}}|pagina de ajutor]] pentru mai multe informaţii). Dacă ai ajuns aici din greşeală, întoarce-te folosind controalele browser-ului tău',
+'anontalkpagetext'          => "---- ''Aceasta este pagina de discuţii pentru un utilizator care nu şi-a creat un cont încă, sau care nu s-a autentificat. De aceea trebuie să folosim [[adresă IP|adresa IP]] pentru a identifica această persoană. O adresă IP poate fi folosită în comun de mai mulţi utilizatori. Dacă sunteţi un astfel de utilizator şi credeţi că vă sunt adresate mesaje irelevante, vă rugăm să [[Special:Userlogin|vă creaţi un cont sau să vă autentificaţi]] pentru a evita confuzii cu alţi utilizatori anonimi în viitor.''",
+'noarticletext'             => '{{SITENAME}} nu are încă un articol referitor la această pagină. Puteţi [[Special:Search/{{PAGENAME}}|căuta titlul paginii cu acest nume]] în alte pagini sau [{{fullurl:{{FULLPAGENAME}}|action=edit}} edita această pagină].',
+'clearyourcache'            => "'''Notă:''' După salvare, trebuie să treceţi peste cache-ul browser-ului pentru a vedea modificările. '''Mozilla/Safari/Konqueror:''' ţineţi apăsat ''Shift'' în timp ce apăsaţi ''Reload'' (sau apăsaţi ''Ctrl-Shift-R''), '''IE:''' apăsaţi ''Ctrl-F5'', '''Opera:''' apăsaţi ''F5''.",
+'usercssjsyoucanpreview'    => "<strong>Sfat:</strong> Foloseşte butonul 'Arată previzualizare' pentru a testa noul tău css/js înainte de a salva.",
+'usercsspreview'            => "'''Reţine că urmăreşti doar o previzualizare a css-ului tău de utilizator, acesta nu este încă salvat!'''",
+'userjspreview'             => "'''Reţine că urmăreşti doar un test/o previzualizare a javascript-ului tău de utilizator, acesta nu este încă salvat!'''",
+'userinvalidcssjstitle'     => '<b>Avertizare:</b> Nu există skin "$1". Aminteşte-ţi că paginile .css and .js specifice utilizatorilor au titluri care încep cu literă mică, de exemplu User:Foo/monobook.css în comparaţie cu User:Foo/Monobook.css.',
+'updated'                   => '(Actualizat)',
+'note'                      => '<strong>Notă:</strong>',
+'previewnote'               => 'Aceasta este doar o previzualizare! Pentru a salva pagina în forma actuală, descrieţi succint modificările efectuate şi apăsaţi butonul <strong>Salvează pagina</strong>.',
+'previewconflict'           => 'Această pre-vizualizare reflectă textul din caseta de sus, respectiv felul în care va arăta articolul dacă alegeţi să-l salvaţi acum.',
+'session_fail_preview'      => '<strong>Ne pare rău! Nu am putut procesa modificarea dumneavoastră din cauza pierderii datelor sesiunii. Vă rugăm să încercaţi din nou. Dacă tot nu funcţionează, încercaţi să închideţi sesiunea şi să vă autentificaţi din nou.</strong>',
+'session_fail_preview_html' => "<strong>Ne pare rău! Modificările tale nu au putut fi procesate din cauza pierderii datelor sesiunii.</strong> 
+
+''Deoarece acest wiki are activat raw HTML, previzualizarea este ascunsă ca măsură de precauţie împotriva atacurilor JavaScript.''
+
+<strong>Dacă această încercare de modificare este legitimă, te rugăm să încerci din nou. Dacă nu funcţionează nici în acest fel, închide sesiunea şi încearcă să te autentifici din nou.</strong>",
+'importing'                 => 'Se importă $1',
+'editing'                   => 'modificare $1',
+'editinguser'               => 'modificare $1',
+'editingsection'            => 'se modifică $1 (secţiune)',
+'editingcomment'            => 'modificare $1 (comentariu)',
+'editconflict'              => 'Conflict de modificare: $1',
+'explainconflict'           => 'Altcineva a modificat această pagină de când ai început să o editezi. Caseta de text de sus conţine pagina aşa cum este ea acum (după editarea celeilalte persoane). Pagina cu modificările tale (aşa cum ai încercat să o salvezi) se află în caseta de jos. Va trebui să editezi manual caseta de sus pentru a reflecta modificările pe care tocmai le-ai făcut în cea de jos. <b>Numai</b> textul din caseta de sus va fi salvat atunci când vei apăsa pe "Salvează pagina".<br />',
+'yourtext'                  => 'Textul tău',
+'storedversion'             => 'Versiunea curentă',
+'nonunicodebrowser'         => '<strong>ATENŢIE: Browser-ul dumneavoastră nu este compilant unicode, vă rugăm să îl schimbaţi înainte de a începe modificarea unui articol.</strong>',
+'editingold'                => '<strong>ATENŢIE! Modifici o variantă mai veche a acestei pagini! Orice modificări care s-au făcut de la această versiune şi până la cea curentă se vor pierde!</strong>',
+'yourdiff'                  => 'Diferenţe',
+'copyrightwarning'          => "<!-- Gol deocamdată. Avertismentul se află în MediaWiki:Summary -->
+Please note that all contributions to {{SITENAME}} are considered to be released under the $2 (see $1 for details). If you don't want your writing to be edited mercilessly and redistributed at will, then don't submit it here.<br /> You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource. <strong>DO NOT SUBMIT COPYRIGHTED WORK WITHOUT PERMISSION!</strong>",
+'copyrightwarning2'         => 'Reţineţi că toate contribuţiile la {{SITENAME}} sunt considerate ca respectând $2 (vezi $1 pentru detalii).<br />
+Dacă nu doriţi ca ceea ce scrieţi să fie modificat fără milă şi redistribuit în voie, atunci nu trimiteţi materialele respective aici. Ceea ce aţi scris a fost compoziţie proprie sau copie dintr-o resursă publică sau liberă (vedeţi $1 pentru detalii).<br />',
+'longpagewarning'           => '<strong>ATENŢIE! Conţinutul acestei pagini are $1 KB; unele browsere au probleme la modificarea paginilor în jur de 32 KB sau mai mari. Te rugăm să iei în considerare posibilitatea de a împărţi pagina în mai multe secţiuni.</strong>',
+'longpageerror'             => '<strong>EROARE: Textul pe care vrei să-l salvezi are $1 kilobytes,
+ceea ce înseamnă mai mult decât maximum de $2 kilobytes. Salvarea nu este posibilă.</strong>',
+'readonlywarning'           => '<strong>ATENŢIE! Baza de date a fost blocată pentru întreţinere, deci nu vei putea să salvezi editările în acest moment. Poţi copia textul într-un fişier text local pentru a modifica conţinutul în {{SITENAME}} când va fi posibil.</strong>',
+'protectedpagewarning'      => '<strong>ATENŢIE! Această pagină a fost protejată la scriere şi numai utilizatorii cu privilegii de administrator o pot modifica. Vă rugăm urmaţi sugestiile [[Project:Pagină protejată|despre pagini protejate]] când modificaţi.</strong>',
+'semiprotectedpagewarning'  => "'''Atenţie:''' Această pagină poate fi modificată numai de utilizatorii înregistraţi.",
+'templatesused'             => 'Formate folosite în această pagină:',
+'templatesusedpreview'      => 'Formate utilizate în această previzualizare:',
+'templatesusedsection'      => 'Formate utilizate în această secţiune:',
+'template-protected'        => '(protejat)',
+'template-semiprotected'    => '(semi-protejat)',
+'edittools'                 => '<!-- Acest text va apărea după caseta de editare şi formularele de trimitere fişier. -->',
+'nocreatetitle'             => 'Creare de pagini limitată',
+'nocreatetext'              => 'Acest site a restricţionat abilitatea de creare a paginilor noi. Puteţi edita o pagină deja existentă sau puteţi să vă [[Special:Userlogin|autentificaţi/creaţi]] un cont de utilizator.',
+
+# Account creation failure
+'cantcreateaccounttitle' => 'Crearea contului nu poate fi realizată',
+'cantcreateaccounttext'  => 'Crearea conturilor de la această adresă IP (<b>$1</b>) a fost blocată. 
+Acest lucru se datorează probabil vandalismelor continue din şcoală sau de la furnizorul de servicii Internet.',
+
+# History pages
+'revhistory'          => 'Istoria versiunilor',
+'viewpagelogs'        => 'Vezi jurnalele pentru această pagină',
+'nohistory'           => 'Nu există istoric pentru această pagină.',
+'revnotfound'         => 'Versiunea nu a fost găsită',
+'revnotfoundtext'     => 'Versiunea mai veche a paginii pe care aţi cerut-o nu a fost găsită. Vă rugăm să verificaţi legătura pe care aţi folosit-o pentru a accesa această pagină.',
+'loadhist'            => 'Încarc istoria versiunilor',
+'currentrev'          => 'Versiunea curentă',
+'revisionasof'        => 'Versiunea de la data $1',
+'revision-info'       => 'Revizia pentru $1; $2',
+'previousrevision'    => '←Versiunea anterioară',
+'nextrevision'        => 'Versiunea următoare →',
+'currentrevisionlink' => 'afişează versiunea curentă',
+'cur'                 => 'actuală',
+'next'                => 'următoarea',
+'last'                => 'prec',
+'orig'                => 'orig',
+'histlegend'          => 'Legendă: (actuală) = diferenţe faţă de versiunea curentă,
+(prec) = diferenţe faţă de versiunea precedentă, M = modificare minoră',
+'deletedrev'          => '[şters]',
+'histfirst'           => 'Primele',
+'histlast'            => 'Ultimele',
+'historysize'         => '($1 octeţi)',
+'historyempty'        => '(gol)',
+
+# Revision feed
+'history-feed-title'          => 'Revizia istoricului',
+'history-feed-description'    => 'Revizia istoricului pentru această pagină de pe wiki',
+'history-feed-item-nocomment' => '$1 la $2', # user at time
+'history-feed-empty'          => 'Pagina solicitată nu există.
+E posibil să fi fost ştearsă sau redenumită.
+Încearcă să [[Special:Search|cauţi]] pe wiki pentru pagini noi semnificative.',
+
+# Revision deletion
+'rev-deleted-comment'         => '(comentariu şters)',
+'rev-deleted-user'            => '(nume de utilizator şters)',
+'rev-deleted-text-permission' => '<div class="mw-warning plainlinks">
+Revizia acestei pagini a fost ştearsă din arhivele publice. Mai multe detalii la [{{fullurl:Special:Log/delete|page={{PAGENAMEE}}}} deletion log].
+</div>',
+'rev-deleted-text-view'       => '<div class="mw-warning plainlinks">Revizia acestei pagini a fost ştearsă din arhivele publice.
+Ca administrator la acest site poţi să o vezi; s-ar putea să găseşti mai multe detalii la [{{fullurl:Special:Log/delete|page={{PAGENAMEE}}}} deletion log].
+</div>',
+'rev-delundel'                => 'arată/ascunde',
+'revisiondelete'              => 'Şterge/recuperează revizii',
+'revdelete-selected'          => 'Revizia aleasă pentru [[:$1]]:',
+'revdelete-text'              => 'Reviziile şterse vor apărea în istoricul paginii, dar conţinutul lor nu va fi accesibil publicului.
+
+Alţi administratori de pe acest wiki vor putea accesa conţinutul ascuns şi îl pot recupera prin aceeaşi interfaţă, dacă nu este impusă o altă restricţie de către operatorii sitului.',
+'revdelete-legend'            => 'Setează restricţii pentru revizie:',
+'revdelete-hide-text'         => 'Ascunde textul reviziei',
+'revdelete-hide-comment'      => 'Ascunde descrierea modificării',
+'revdelete-hide-user'         => 'Ascunde numele de utilizator/IP-ul editorului',
+'revdelete-hide-restricted'   => 'Aplică aceste restricţii administratorilor şi celorlalţi',
+'revdelete-hide-image'        => 'Ascunde conţinutul fişierului',
+'revdelete-log'               => 'Comentariu log:',
+'revdelete-submit'            => 'Aplică reviziilor selectate',
+'revdelete-logentry'          => 'vizibilitatea reviziei pentru [[$1]] a fost modificată',
+
+# Diffs
+'difference'                => '(Diferenţa dintre versiuni)',
+'loadingrev'                => 'se încarcă diferenţa dintre versiuni',
+'lineno'                    => 'Linia $1:',
+'editcurrent'               => 'Modificarea versiunii curente a acestei pagini',
+'selectnewerversionfordiff' => 'Selectează versiunea mai nouă pentru comparare',
+'selectolderversionfordiff' => 'Selectează o versiune mai veche pentru comparaţie',
+'compareselectedversions'   => 'Compară versiunile selectate',
+'editundo'                  => 'anulează',
+
+# Search results
+'searchresults'         => 'Rezultatele căutării',
+'searchresulttext'      => 'Pentru mai multe detalii despre căutarea în {{SITENAME}}, vezi [[Project:Căutare]].',
+'searchsubtitle'        => 'Pentru căutarea "[[$1]]"',
+'searchsubtitleinvalid' => 'Pentru căutarea "$1"',
+'badquery'              => 'Căutare invalidă',
+'badquerytext'          => 'Căutarea dvs. nu a putut fi procesată.
+Aceasta se întâmplă probabil pentru că aţi încercat să căutaţi un cuvânt format din mai puţin de trei litere.
+E posibil şi să fi introdus greşit o expresie sau un nume, cum ar fi "Mircea cel cel Bătrân".
+Vă rugăm să încercaţi din nou.',
+'matchtotals'           => 'Căutarea "$1" a produs $2 rezultate în titluri de articole şi $3 rezultate în texte de articole.',
+'noexactmatch'          => "'''Pagina cu titlul \"\$1\" nu există.''' Poţi [[:\$1|crea această pagină]].",
+'titlematches'          => 'Rezultate în titluri de articole',
+'notitlematches'        => 'Nici un rezultat în titlurile articolelor',
+'textmatches'           => 'Rezultate în textele articolelor',
+'notextmatches'         => 'Nici un rezultat în textele articolelor',
+'prevn'                 => 'anterioarele $1',
+'nextn'                 => 'următoarele $1',
+'viewprevnext'          => 'Vezi ($1) ($2) ($3).',
+'showingresults'        => 'Mai jos apar <b>$1</b> rezultate începând cu #<b>$2</b>.',
+'showingresultsnum'     => 'Mai jos apar <b>$3</b> rezultate începând cu #<b>$2</b>.',
+'nonefound'             => "'''Notă''': căutările nereuşite sunt în general datorate căutării unor cuvinte prea comune care nu sunt indexate, sau cautărilor a mai multe cuvinte (numai articolele care conţin ''toate'' cuvintele specificate apar ca rezultate).",
+'powersearch'           => 'Caută',
+'powersearchtext'       => 'Caută în secţiunile:<br />
+$1<br />
+$2 Redirecţionări<br />
+Căutări după $3 $9',
+'searchdisabled'        => '<p>Ne pare rău! Căutarea după text a fost dezactivată temporar, din motive de performanţă. Între timp puteţi folosi căutarea prin Google mai jos, însă aceasta poate să dea rezultate învechite.</p>',
+'blanknamespace'        => '(Principală)',
+
+# Preferences page
+'preferences'             => 'Preferinţe',
+'mypreferences'           => 'preferinţe',
+'prefsnologin'            => 'Neautentificat',
+'prefsnologintext'        => 'Trebuie să fii [[Special:Userlogin|autentificat]] pentru a-ţi putea salva preferinţele.',
+'prefsreset'              => 'Preferinţele au fost resetate.',
+'qbsettings'              => 'Setări pentru bara rapidă',
+'qbsettings-none'         => 'Fără',
+'qbsettings-fixedleft'    => 'Fixă, în stânga',
+'qbsettings-fixedright'   => 'Fixă, în dreapta',
+'qbsettings-floatingleft' => 'Liberă',
+'changepassword'          => 'Schimbă parola',
+'skin'                    => 'Aspect',
+'math'                    => 'Aspect formule',
+'dateformat'              => 'Formatul datelor',
+'datedefault'             => 'Nici o preferinţă',
+'datetime'                => 'Data şi ora',
+'math_failure'            => 'Nu s-a putut interpreta',
+'math_unknown_error'      => 'eroare necunoscută',
+'math_unknown_function'   => 'funcţie necunoscută',
+'math_lexing_error'       => 'eroare lexicală',
+'math_syntax_error'       => 'eroare de sintaxă',
+'math_image_error'        => 'Conversiune în PNG eşuată',
+'math_bad_tmpdir'         => 'Nu se poate crea sau nu se poate scrie în directorul temporar pentru formule matematice',
+'math_bad_output'         => 'Nu se poate crea sau nu se poate scrie în directorul de ieşire pentru formule matematice',
+'math_notexvc'            => 'Lipseşte executabilul texvc; vezi math/README pentru configurare.',
+'prefs-personal'          => 'Date de utilizator',
+'prefs-rc'                => 'Modificări recente şi cioturi',
+'prefs-watchlist'         => 'Listă de urmărire',
+'prefs-watchlist-days'    => 'Numărul de zile care apar în lista paginilor urmărite:',
+'prefs-watchlist-edits'   => 'Numărul de editări care apar în lista extinsă a paginilor urmărite:',
+'prefs-misc'              => 'Parametri diverşi',
+'saveprefs'               => 'Salvează preferinţele',
+'resetprefs'              => 'Resetează preferinţele',
+'oldpassword'             => 'Parola veche',
+'newpassword'             => 'Parola nouă',
+'retypenew'               => 'Repetă parola nouă',
+'textboxsize'             => 'Dimensiunile casetei de text',
+'rows'                    => 'Rânduri:',
+'columns'                 => 'Coloane',
+'searchresultshead'       => 'Parametri căutare',
+'resultsperpage'          => 'Numărul de rezultate per pagină',
+'contextlines'            => 'Numărul de linii per rezultat',
+'contextchars'            => 'Numărul de caractere per linie',
+'stubthreshold'           => 'Limita de caractere pentru un ciot',
+'recentchangescount'      => 'Numărul de articole pentru schimbări recente:',
+'savedprefs'              => 'Preferinţele tale au fost salvate.',
+'timezonelegend'          => 'Fus orar',
+'timezonetext'            => 'Introduceţi numărul de ore diferenţă între ora Dv. locală şi ora serverului (UTC, timp universal). Dacă vă aflaţi în România, diferenţa este 02:00 iarna şi 03:00 vara.',
+'localtime'               => 'Ora locală',
+'timezoneoffset'          => 'Diferenţa¹',
+'servertime'              => 'Ora serverului',
+'guesstimezone'           => 'Încearcă determinarea automată a diferenţei',
+'allowemail'              => 'Activează email de la alţi utilizatori',
+'defaultns'               => 'Caută în aceste secţiuni implicit:',
+'default'                 => 'standard',
+'files'                   => 'Fişiere',
+
+# User rights
+'userrights-lookup-user'     => 'Administrare grupuri de utilizatori',
+'userrights-user-editname'   => 'Introdu un nume de utilizator:',
+'editusergroup'              => 'Modificare grup de utilizatori',
+'userrights-editusergroup'   => 'Modifică grupul de utilizatori',
+'saveusergroups'             => 'Salvează grupul de utilizatori',
+'userrights-groupsmember'    => 'Membru al:',
+'userrights-groupsavailable' => 'Grupuri disponibile:',
+'userrights-groupshelp'      => 'Selectează grupurile din care doreşti ca utilizatorul să fie şters sau în care doreşti să fie adăugat. Grupurile deselectate nu se vor modifica. Poţi deselecta un grup cu CTRL + Clic stânga',
+
+# Groups
+'group'            => 'Grup:',
+'group-bot'        => 'Roboţi',
+'group-sysop'      => 'Administratori',
+'group-bureaucrat' => 'Birocraţi:',
+'group-all'        => '(toţi)',
+
+'group-bot-member'        => 'Robot',
+'group-sysop-member'      => 'Administrator',
+'group-bureaucrat-member' => 'Birocrat',
+
+'grouppage-bot'        => 'Project:Boţi',
+'grouppage-sysop'      => 'Project:Administratori',
+'grouppage-bureaucrat' => 'Project:Birocraţi',
+
+# User rights log
+'rightslog'      => 'Raportul drepturilor de utilizator',
+'rightslogtext'  => 'Acesta este un raport al modificărilor drepturilor utilizatorilor.',
+'rightslogentry' => 'a schimbat pentru $1 apartenenţa la un grup de la $2 la $3',
+'rightsnone'     => '(niciunul)',
+
+# Recent changes
+'recentchanges'                     => 'Schimbări recente',
+'recentchangestext'                 => 'Schimbări recente ... (Log)',
+'rcnote'                            => 'Mai jos se află ultimele <strong>$1</strong> modificări din ultimele <strong>$2</strong> zile sau din <strong>$3</strong>.',
+'rcnotefrom'                        => 'Dedesubt sunt modificările de la <b>$2</b> (maxim <b>$1</b> de modificări sunt afişate - schimbă numărul maxim de linii alegând altă valoare mai jos).',
+'rclistfrom'                        => 'Arată modificările începând de la $1',
+'rcshowhideminor'                   => '$1 modificările minore',
+'rcshowhidebots'                    => '$1 roboţii',
+'rcshowhideliu'                     => '$1 utilizatorii autentificaţi',
+'rcshowhideanons'                   => '$1 utilizatorii anonimi',
+'rcshowhidepatr'                    => '$1 modificările patrulate',
+'rcshowhidemine'                    => '$1 editările mele',
+'rclinks'                           => 'Arată ultimele $1 modificări din ultimele $2 zile.<br />
+$3',
+'diff'                              => 'dif',
+'hist'                              => 'ist',
+'hide'                              => 'ascunde',
+'show'                              => 'arată',
+'minoreditletter'                   => 'm',
+'newpageletter'                     => 'N',
+'boteditletter'                     => 'b',
+'sectionlink'                       => '→',
+'number_of_watching_users_pageview' => '[$1 utilizator/i care urmăresc]',
+'rc_categories'                     => 'Limitează la categoriile (separate prin "|")',
+'rc_categories_any'                 => 'Oricare',
+
+# Recent changes linked
+'recentchangeslinked' => 'Modificări corelate',
+
+# Upload
+'upload'                      => 'Trimite fişier',
+'uploadbtn'                   => 'Trimite fişier',
+'reupload'                    => 'Re-trimite',
+'reuploaddesc'                => 'Întoarcere la formularul de trimitere.',
+'uploadnologin'               => 'Nu sunteţi autentificat',
+'uploadnologintext'           => 'Trebuie să fiţi [[Special:Userlogin|autentificat]] pentru a putea trimite fişiere.',
+'upload_directory_read_only'  => 'Directorul de trimitere ($1) nu are drepturi de scriere de către server.',
+'uploaderror'                 => 'Eroare la trimitere fişier',
+'uploadtext'                  => "<strong>STOP!</strong> Înainte de a trimite un fişier aici, te rugăm să citeşti şi să respecţi [[Project:Politica de utilizare a imaginilor|politica de utilizare a imaginilor]].<br />
+Pentru a vizualiza sau căuta imagini deja trimise, mergi la [[Special:Imagelist|lista de imagini]]. Fişierele noi şi cele şterse sunt contorizate pe pagina [[Special:Log/upload|raport de trimiteri]].<br />
+Foloseşte formularul de mai jos pentru a trimite imagini noi pe care le vei putea folosi pentru a ilustra articolele. În majoritatea browserelor vei vedea un buton \"Răsfoire...\" (sau \"Browse...\") care va deschide fereastra standard dialog a sistemului tău de operare pentru alegerea de fişiere. Când alegei un fişier în acest fel, caseta de dialog se va completa cu calea locală către acesta. Este de asemenea necesar să bifezi căsuţa asociată textului în care confirmi că nu violezi nici un drept de autor trimiţând această imagine. În final, apasă pe butonul \"Trimite\" pentru a trimite efectiv fişierul. Această operaţiune poate dura, mai ales dacă ai o legătură lentă la Internet.<br />
+Formatele preferate sunt JPEG pentru imagini fotografice, PNG pentru desene şi alte imagini cu contururi clare şi OGG pentru fişiere de sunet. Te rugăm să foloseşti nume explicite pentru fişiere ca să eviţi confuziile. Pentru a include o imagine într-un articol, foloseşte o legătură de forma<br />
+* '''<nowiki>[[</nowiki>{{ns:Image}}<nowiki>:Fişier.jpg]]</nowiki>'''
+* '''<nowiki>[[</nowiki>{{ns:Image}}<nowiki>:Fişier.png|text alternativ]]</nowiki>'''
+Pentru a include un fişier de sunet într-un articol, foloseşti o legătură de forma
+* '''<nowiki>[[</nowiki>{{ns:Media}}<nowiki>:Fişier.ogg]]</nowiki>'''
+Te rugăm reţine că, la fel ca şi în cazul celorlalte secţiuni din {{SITENAME}}, alte persoane pot edita sau şterge fişierele pe care le trimiţi dacă e în interesul enciclopediei, şi ţi se poate chiar bloca accesul la trimiterea de fişiere dacă abuzezi de sistem.",
+'uploadlog'                   => 'Raportul fişierelor trimise',
+'uploadlogpage'               => 'Raportul fişierelor trimise',
+'uploadlogpagetext'           => 'Găseşti mai jos lista ultimelor fişiere trimise.',
+'filename'                    => 'Nume fişier',
+'filedesc'                    => 'Descriere fişier',
+'fileuploadsummary'           => 'Descriere:',
+'filestatus'                  => 'Statutul drepturilor de autor',
+'filesource'                  => 'Sursa',
+'uploadedfiles'               => 'Fişiere trimise',
+'ignorewarning'               => 'Ignoră avertismentul şi salvează fişierul.',
+'ignorewarnings'              => 'Ignoră orice avertismente.',
+'minlength'                   => 'Numele imaginilor trebuie să aibă cel puţin trei litere.',
+'illegalfilename'             => 'Numele fişierului "$1" conţine caractere care nu sunt permise în titlurile paginilor. Vă rugăm redenumiţi fişierul şi încercaţi să îl încărcaţi din nou.',
+'badfilename'                 => 'Numele imaginii a fost schimbat; noul nume este "[[:$1]]".',
+'filetype-missing'            => 'Fişierul nu are extensie (precum ".jpg").',
+'large-file'                  => 'Este recomandat ca fişierele să nu fie mai mari de $1; acest fişier are $2.',
+'largefileserver'             => 'Fişierul este mai mare decât este configurat serverul să permită.',
+'emptyfile'                   => 'Fişierul pe care l-aţi încărcat pare a fi gol. Aceasta poate fi datorită unei greşeli în numele fişierului. Verificaţi dacă într-adevăr doriţi să încărcaţi acest fişier.',
+'fileexists'                  => 'Un fişier cu acelaşi nume există deja, vă rugăm verificaţi $1 dacă nu sunteţi sigur dacă doriţi să îl modificaţi.',
+'fileexists-thumb'            => "'''<center>Imagine existentă</center>'''",
+'fileexists-forbidden'        => 'Un fişier cu acest nume există deja; mergeţi înapoi şi încărcaţi acest fişier sub un nume nou. [[Image:$1|thumb|center|$1]]',
+'fileexists-shared-forbidden' => 'Un fişier cu acest nume există deja în magazia de imagini comune; mergeţi înapoi şi încărcaţi fişierul sub un nou nume. [[Image:$1|thumb|center|$1]]',
+'successfulupload'            => 'Fişierul a fost trimis',
+'fileuploaded'                => 'Fişierul "$1" a fost trimis. Te rugăm să vizitezi această legătură: ($2) pentru a descrie fişierul şi pentru a completa informaţii despre acesta, ca de exemplu de unde provine, când a fost creat şi de către cine, cât şi alte informaţii pe care doreşti să le adaugi. Dacă acest fişier conţine o imagine aceasta poate fi adăgată prin sintaxa următoare:<br /><nowiki>[[</nowiki>{{ns:Image}}:$1|thumb|descriere<nowiki>]]</nowiki>',
+'uploadwarning'               => 'Avertizare la trimiterea fişierului',
+'savefile'                    => 'Salvează fişierul',
+'uploadedimage'               => 'a trimis [[$1]]',
+'uploaddisabled'              => 'Ne pare rău, trimiterea de imagini este dezactivată.',
+'uploaddisabledtext'          => 'Încărcarea de fişiere este dezactivată pe acest wiki.',
+'uploadscripted'              => 'Fişierul conţine HTML sau cod script care poate fi interpretat în mod eronat de un browser.',
+'uploadcorrupt'               => 'Fişierul este corupt sau are o extensie incorectă. Verifică fişierul şi trimite-l din nou.',
+'uploadvirus'                 => 'Fişierul conţine un virus! Detalii: $1',
+'sourcefilename'              => 'Nume fişier sursă',
+'destfilename'                => 'Nume fişier destinaţie',
+'watchthisupload'             => 'Urmăreşte această pagină',
+'filewasdeleted'              => 'Un fişier cu acest nume a fost anterior încărcat şi apoi şters. Ar trebui să verificaţi $1 înainte să îl încărcaţi din nou.',
+
+'upload-proto-error' => 'Protocol incorect',
+'upload-file-error'  => 'Eroare internă',
+'upload-misc-error'  => 'Eroare de încărcare necunoscută',
+
+'license'           => 'Licenţiere',
+'nolicense'         => 'Nici una selectată',
+'upload_source_url' => ' (un URL valid, accesibil public)',
+
+# Image list
+'imagelist'                 => 'Lista imaginilor',
+'imagelisttext'             => 'Mai jos se află lista a $1 imagini ordonate $2.',
+'imagelistforuser'          => 'Se afişează numai imagini încărcate de $1.',
+'getimagelist'              => 'încarc lista de imagini',
+'ilsubmit'                  => 'Caută',
+'showlast'                  => 'Arată ultimele $1 imagini ordonate $2.',
+'byname'                    => 'după nume',
+'bydate'                    => 'după dată',
+'bysize'                    => 'după mărime',
+'imgdelete'                 => 'şterge',
+'imgdesc'                   => 'desc',
+'imgfile'                   => 'fişier',
+'imglegend'                 => 'Legendă: (desc) = arată/modifică descrierea imaginii.',
+'imghistory'                => 'Istoria imaginii',
+'revertimg'                 => 'rev',
+'deleteimg'                 => 'şterg',
+'deleteimgcompletely'       => 'şterg',
+'imghistlegend'             => 'Legendă: (actuală) = versiunea curentă a imaginii, (şterg) = şterge această versiune veche, (rev) = revino la această versiune veche.',
+'imagelinks'                => 'Legăturile imaginii',
+'linkstoimage'              => 'Următoarele pagini leagă la această imagine:',
+'nolinkstoimage'            => 'Nici o pagină nu se leagă la această imagine.',
+'sharedupload'              => 'Acest fişier transferat (upload) poate fi folosit în comun de către alte proiecte.',
+'shareduploadwiki'          => 'Vă rugăm citiţi [$1 pagina de descriere a fişierului] pentru alte informaţii.',
+'shareduploadwiki-linktext' => 'pagina descriptivă a fişierului',
+'noimage'                   => 'Nu există nici un fişier cu acest nume, puteţi să îl $1.',
+'noimage-linktext'          => 'trimiteţi',
+'uploadnewversion-linktext' => 'Încarcă o versiune nouă a acestui fişier',
+'imagelist_date'            => 'Data',
+'imagelist_name'            => 'Nume',
+'imagelist_user'            => 'Utilizator',
+'imagelist_size'            => 'Mărime (octeţi)',
+'imagelist_description'     => 'Descriere',
+'imagelist_search_for'      => 'Caută imagine după nume:',
+
+# MIME search
+'mimesearch' => 'Căutare MIME',
+'mimetype'   => 'Tip MIME:',
+'download'   => 'descarcă',
+
+# Unwatched pages
+'unwatchedpages' => 'Pagini neurmărite',
+
+# List redirects
+'listredirects' => 'Lista de redirecţionări',
+
+# Unused templates
+'unusedtemplates'     => 'Formate neutilizate',
+'unusedtemplatestext' => 'Lista de mai jos cuprinde toate formatele care nu sînt incluse în nici o altă pagină. Înainte de a le şterge asiguraţi-vă că într-adevăr nu există legături dinspre alte pagini.',
+'unusedtemplateswlh'  => 'alte legături',
+
+# Random redirect
+'randomredirect' => 'Redirecţionare aleatorie',
+
+# Statistics
+'statistics'             => 'Statistici',
+'sitestats'              => 'Statisticile sitului {{SITENAME}}',
+'userstats'              => 'Statistici legate de utilizatori',
+'sitestatstext'          => 'Există un număr total de <b>$1</b> pagini în baza de date.
+Acest număr include paginile de "discuţii", paginile despre {{SITENAME}}, pagini minimale ("cioturi"), pagini de redirecţionare şi altele care probabil că nu intră de fapt în categoria articolelor reale.
+În afară de acestea, există <b>$2</b> pagini care sunt probabil articole (numărate automat, în funcţie strict de mărime).<br />
+
+<b>$8</b> pagini au fost transferate (upload).
+
+În total au fost <b>$3</b> vizite (accesări) şi <b>$4</b> modificări de la lansarea acestei wiki.
+În medie rezultă <b>$5</b> modificări per pagină sau <b>$6</b> vizualizări la fiecare modificare.
+
+Mărimea [http://meta.wikimedia.org/wiki/Help:Job_queue job queue] este <b>$7</b>.',
+'userstatstext'          => "Există un număr de '''$1''' utilizatori înregistraţi. Dintre aceştia '''$2''' (sau '''$4%''') sunt administratori (vezi '''$3''').",
+'statistics-mostpopular' => 'Paginile cele mai vizualizate',
+
+'disambiguations'     => 'Pagini de dezambiguizare',
+'disambiguationspage' => 'Template:Dezambiguizare',
+
+'doubleredirects'     => 'Redirecţionări duble',
+'doubleredirectstext' => '<b>Atenţie:</b> Această listă poate conţine articole care nu sunt în fapt duble rediriecţionări. Acest lucru înseamnă de obicei că există text adiţional sub primul #REDIRECT.<br />',
+
+'brokenredirects'     => 'Redirecţionări greşite',
+'brokenredirectstext' => 'Următoarele redirecţionări conduc spre articole inexistente.',
+
+# Miscellaneous special pages
+'nbytes'                  => '{{PLURAL:$1|un octet|$1 octeţi}}',
+'ncategories'             => '{{PLURAL:$1|o categorie|$1 categorii}}',
+'nlinks'                  => '{{PLURAL:$1|o legătură|$1 legături}}',
+'nmembers'                => '{{PLURAL:$1|un membru|$1 membri}}',
+'nrevisions'              => '{{PLURAL:$1|o revizie|$1 revizii}}',
+'nviews'                  => '{{PLURAL:$1|o accesare|$1 accesări}}',
+'specialpage-empty'       => 'Această pagină este goală.',
+'lonelypages'             => 'Pagini orfane',
+'lonelypagestext'         => 'La următoarele pagini nu se leagă nici o altă pagină din acest wiki.',
+'uncategorizedpages'      => 'Pagini necategorizate',
+'uncategorizedcategories' => 'Categorii necategorizate',
+'uncategorizedimages'     => 'Imagini necategorizate',
+'unusedcategories'        => 'Categorii neutilizate',
+'unusedimages'            => 'Pagini neutilizate',
+'popularpages'            => 'Pagini populare',
+'wantedcategories'        => 'Categorii dorite',
+'wantedpages'             => 'Pagini dorite',
+'mostlinked'              => 'Cele mai căutate articole',
+'mostlinkedcategories'    => 'Cele mai căutate categorii',
+'mostcategories'          => 'Articole cu cele mai multe categorii',
+'mostimages'              => 'Cele mai căutate imagini',
+'mostrevisions'           => 'Articole cu cele mai multe revizuiri',
+'allpages'                => 'Toate paginile',
+'prefixindex'             => 'Afişare articole începând de la',
+'randompage'              => 'Pagină aleatorie',
+'shortpages'              => 'Pagini scurte',
+'longpages'               => 'Pagini lungi',
+'deadendpages'            => 'Pagini fără legături',
+'deadendpagestext'        => 'Următoarele pagini nu se leagă de alte pagini din acest wiki.',
+'protectedpages'          => 'Pagini protejate',
+'protectedpagestext'      => 'Următoarele pagini sunt protejate la mutare sau editare',
+'protectedpagesempty'     => 'Nu există pagini protejate',
+'listusers'               => 'Lista de utilizatori',
+'specialpages'            => 'Pagini speciale',
+'spheading'               => 'Pagini speciale pentru toţi utilizatorii',
+'restrictedpheading'      => 'Pagini speciale restricţionate',
+'rclsub'                  => '(cu pagini legate de la "$1")',
+'newpages'                => 'Pagini noi',
+'newpages-username'       => 'Nume de utilizator:',
+'ancientpages'            => 'Cele mai vechi articole',
+'intl'                    => 'Legături între limbi',
+'move'                    => 'Mută',
+'movethispage'            => 'Mută această pagină',
+'unusedimagestext'        => '<p>Te rugăm ţine cont de faptul că alte situri, inclusiv alte versiuni de limbă {{SITENAME}} pot să aibă legături aici fără ca aceste pagini să fie listate aici - această listă se referă strict la {{SITENAME}} în română.</p>',
+'unusedcategoriestext'    => 'Următoarele categorii de pagini există şi totuşi nici un articol sau categorie nu le foloseşte.',
+
+# Book sources
+'booksources' => 'Surse de cărţi',
+
+'categoriespagetext' => 'Următoarele categorii există în wiki.',
+'data'               => 'Data',
+'userrights'         => 'Administrarea drepturilor de utilizator',
+'groups'             => 'Grupuri de utilizatori',
+'isbn'               => 'ISBN',
+'alphaindexline'     => '$1 către $2',
+'version'            => 'Versiune',
+
+# Special:Log
+'specialloguserlabel'  => 'Utilizator:',
+'speciallogtitlelabel' => 'Titlu:',
+'log'                  => 'Rapoarte',
+'alllogstext'          => 'Afişare combinată a încărcărilor, ştergerilor, protecţiilor, blocărilor şi a rapoartelor administratorilor. Puteţi limita vizualizarea selectând tipul raportului, numele de utilizator sau pagina afectată.',
+'logempty'             => 'Nici o înregistrare în raport.',
+'title-pattern'        => 'Titlul începe cu …',
+
+# Special:Allpages
+'nextpage'          => 'Pagina următoare ($1)',
+'prevpage'          => 'Pagina anterioară ($1)',
+'allpagesfrom'      => 'Afişează paginile pornind de la:',
+'allarticles'       => 'Toate articolele',
+'allinnamespace'    => 'Toate paginile (spaţiu de nume $1)',
+'allnotinnamespace' => 'Toate paginile (în afara spaţiului de nume $1)',
+'allpagesprev'      => 'Anterior',
+'allpagesnext'      => 'Următor',
+'allpagessubmit'    => 'Trimite',
+'allpagesprefix'    => 'Afişează paginile cu prefix:',
+
+# Special:Listusers
+'listusersfrom' => 'Afişează utilizatori începând cu:',
+
+# E-mail user
+'mailnologin'     => 'Nu există adresă de trimitere',
+'mailnologintext' => 'Trebuie să fii [[Special:Userlogin|autentificat]] şi să ai o adresă validă de e-mail în [[Special:Preferences|preferinţe]] pentru a trimite e-mail altor utilizatori.',
+'emailuser'       => 'Trimite e-mail',
+'emailpage'       => 'E-mail către utilizator',
+'emailpagetext'   => 'Dacă acest utilizator a introdus o adresă de e-mail validă în pagina de preferinţe atunci formularul de mai jos poate fi folosit pentru a-i trimite un mesaj prin e-mail. Adresa pe care ai introdus-o în pagina ta de preferinţe va apărea ca adresa de origine a mesajului, astfel încât destinatarul să îţi poată răspunde direct.',
+'usermailererror' => 'Obiectul de mail a dat eroare:',
+'defemailsubject' => 'E-mail {{SITENAME}}',
+'noemailtitle'    => 'Fără adresă de e-mail',
+'noemailtext'     => 'Utilizatorul nu a specificat o adresă validă de e-mail, sau a ales să nu primească e-mail de la alţi utilizatori.',
+'emailfrom'       => 'De la',
+'emailto'         => 'Către',
+'emailsubject'    => 'Subiect',
+'emailmessage'    => 'Mesaj',
+'emailsend'       => 'Trimite',
+'emailccme'       => 'Trimite-mi pe e-mail o copie a mesajului meu.',
+'emailccsubject'  => 'O copie a mesajului la $1: $2',
+'emailsent'       => 'E-mail trimis',
+'emailsenttext'   => 'E-mailul tău a fost trimis.',
+
+# Watchlist
+'watchlist'            => 'Pagini urmărite',
+'mywatchlist'            => 'Pagini urmărite',
+'watchlistfor'         => "(pentru '''$1''')",
+'nowatchlist'          => 'Nu aţi ales să urmăriţi nici o pagină.',
+'watchlistanontext'    => 'Te rugăm să $1 pentru a vizualiza sau edita itemii de pe lista ta de urmărire.',
+'watchlistcount'       => "'''Aveţi $1 elemente în lista de urmărire, incluzând paginile de discuţii.'''",
+'clearwatchlist'       => 'Şterge lista de articole urmărite',
+'watchlistcleartext'   => 'Sunteţi sigur că doriţi să le ştergeţi?',
+'watchlistclearbutton' => 'Curăţaţi lista de articole urmărite',
+'watchlistcleardone'   => 'Lista de urmărire a fost golită. $1 elemente au fost scoase.',
+'watchnologin'         => 'Nu sunteţi autentificat',
+'watchnologintext'     => 'Trebuie să fiţi [[Special:Userlogin|autentificat]] pentru a vă modifica lista de pagini urmărite.',
+'addedwatch'           => 'Adăugată la lista de pagini urmărite',
+'addedwatchtext'       => 'Pagina "[[:$1]]" a fost adăugată la lista ta de [[Special:Watchlist|articole urmărite]]. Modificările viitoare ale acestei pagini şi a paginii asociate de discuţii vor fi listate aici, şi în plus ele vor apărea cu <b>caractere îngroşate</b> în pagina de [[Special:Recentchanges|modificări recente]] pentru evidenţiere.<p>Dacă doreşti să elimini această pagină din lista ta de pagini urmărite în viitor, apasă pe "Nu mai urmări" în bara de comenzi în timp ce această pagină este vizibilă.',
+'removedwatch'         => 'Ştearsă din lista de pagini urmărite',
+'removedwatchtext'     => 'Pagina "[[:$1]]" a fost eliminată din lista de pagini urmărite.',
+'watch'                => 'Urmăreşte',
+'watchthispage'        => 'Urmăreşte pagina',
+'unwatch'              => 'Nu mai urmări',
+'unwatchthispage'      => 'Nu mai urmări',
+'notanarticle'         => 'Nu este un articol',
+'watchnochange'        => 'Nici una dintre paginile pe care le urmăriţi nu a fost modificată în perioada de timp afişată.',
+'watchdetails'         => '($1 pagini urmărite în afară de paginile de discuţie; $2 pagini editate în total; $3... [$4 lista completă].)',
+'wlheader-enotif'      => '*Notificarea email este activată',
+'wlheader-showupdated' => "* Paginile care au modificări de la ultima ta vizită sunt afişate '''îngroşat'''",
+'watchmethod-recent'   => 'căutarea schimbărilor recente pentru paginile urmărite',
+'watchmethod-list'     => 'căutarea paginilor urmărite pentru schimbări recente',
+'removechecked'        => 'Elimină elementele bifate din lista de pagini urmărite',
+'watchlistcontains'    => 'Lista de pagini urmărite conţine $1 elemente.',
+'watcheditlist'        => 'Aceasta este lista alfabetică a tuturor paginilor pe care le urmăreşti. Bifează căsuţele corespunzătoare paginilor pe care doreşti să le elimini din lista de pagini urmărite şi apasă pe butonul corespunzător din partea de jos a paginii.',
+'removingchecked'      => 'Se elimină elementele selectate din lista de pagini urmărite...',
+'couldntremove'        => "Elementul '$1' nu a putut fi şters...",
+'iteminvalidname'      => "E o problemă cu elementul '$1', numele este invalid...",
+'wlnote'               => 'Mai jos se află ultimele $1 schimbări din ultimele <b>$2</b> ore.',
+'wlshowlast'           => 'Arată ultimele $1 ore $2 zile $3',
+'wlsaved'              => 'Aceasta este o versiune salvată a listei tale de pagini urmărite.',
+'watchlist-show-bots'  => 'Arată editările roboţilor',
+'watchlist-hide-bots'  => 'Ascunde editările roboţilor',
+'watchlist-show-own'   => 'Arată editările mele',
+'watchlist-hide-own'   => 'Ascunde editările mele',
+'watchlist-show-minor' => 'Arată editările minore',
+'watchlist-hide-minor' => 'Ascunde editările minore',
+'wldone'               => 'Terminat.',
+
+'enotif_mailer'      => 'Sistemul de notificare {{SITENAME}}',
+'enotif_reset'       => 'Marchează toate paginile vizitate.',
+'enotif_newpagetext' => 'Aceasta este o pagină nouă.',
+'changed'            => 'modificat',
+'created'            => 'creat',
+'enotif_subject'     => 'Pagina $PAGETITLE de la {{SITENAME}} a fost $CHANGEDORCREATED de $PAGEEDITOR',
+'enotif_lastvisited' => 'Vedeţi $1 pentru toate modificările de la ultima dvs. vizită.',
+'enotif_body'        => 'Domnule/Doamnă $WATCHINGUSERNAME,
+
+pagina $PAGETITLE de la {{SITENAME}} a fost $CHANGEDORCREATED în $PAGEEDITDATE de $PAGEEDITOR, vedeţi la $PAGETITLE_URL versiunea curentă.
+
+$NEWPAGE
+
+Sumarul utilizatorului: $PAGESUMMARY $PAGEMINOREDIT
+
+Contactaţi utilizatorul:
+email: $PAGEEDITOR_EMAIL
+wiki: $PAGEEDITOR_WIKI
+
+Nu vor mai fi alte notificări în cazul unor viitoare modificări în afara cazului în care vizitaţi pagina. Puteţi de asemenea reseta notificările pentru alte pagini urmărite.
+
+             Al dvs. amic, sistemul de notificare {{SITENAME}}
+
+--
+Pentru a modifica preferinţele listei de urmărire, vizitaţi
+{{fullurl:{{ns:special}}:Watchlist/edit}}
+
+Asistenţă şi suport:
+{{fullurl:{{MediaWiki:helppage}}}}',
+
+# Delete/protect/revert
+'deletepage'                  => 'Şterge pagina',
+'confirm'                     => 'Confirmă',
+'excontent'                   => "conţinutul era: '$1'",
+'excontentauthor'             => "conţinutul a fost: '$1' (şi unicul contribuitor era '$2')",
+'exbeforeblank'               => "conţinutul înainte de golire era: '$1'",
+'exblank'                     => 'pagina era goală',
+'confirmdelete'               => 'Confirmă ştergere',
+'deletesub'                   => '(Şterg "$1")',
+'historywarning'              => 'Atenţie! Pagina pe care o ştergi are istorie:',
+'confirmdeletetext'           => 'Sunteţi pe cale să ştergeţi permanent o pagină sau imagine din baza de date, împreună cu istoria asociată acesteia. Vă rugăm să confirmaţi alegerea făcută de dvs., faptul că înţelegeţi consecinţele acestei acţiuni şi faptul că o faceţi în conformitate cu [[Project:Politica oficială|Proiect:Politica oficială]].',
+'actioncomplete'              => 'Acţiune finalizată',
+'deletedtext'                 => 'Pagina "$1" a fost ştearsă. Vedeţi $2 pentru o listă a elementelor şterse recent.',
+'deletedarticle'              => '"[[$1]]" a fost şters',
+'dellogpage'                  => 'Ştergere_log',
+'dellogpagetext'              => 'Mai jos se află lista celor mai recente elemente şterse. Toate datele/orele sunt listate în timp universal (UTC).
+<ul>
+</ul>',
+'deletionlog'                 => 'raportul de ştergeri',
+'reverted'                    => 'Revenire la o versiune mai veche',
+'deletecomment'               => 'Motiv pentru ştergere',
+'imagereverted'               => 'S-a revenit la o versiune veche.',
+'rollback'                    => 'Editări de revenire',
+'rollback_short'              => 'Revenire',
+'rollbacklink'                => 'revenire',
+'rollbackfailed'              => 'Revenirea nu s-a putut face',
+'cantrollback'                => 'Nu se poate reveni; ultimul contribuitor este autorul acestui articol.',
+'alreadyrolled'               => 'Nu se poate reveni peste ultima modificare a articolului [[$1]]
+făcută de către [[User:$2|$2]] ([[User talk:$2|discuţie]]); altcineva a modificat articolul sau a revenit deja.
+
+Ultima editare a fost făcută de către [[User:$3|$3]] ([[User talk:$3|discuţie]]).',
+'editcomment'                 => 'Comentariul de modificare a fost: "<i>$1</i>".', # only shown if there is an edit comment
+'revertpage'                  => 'Reveniri la ultima modificare de către [[Special:Contributions/$2|$2]] ([[User talk:$2|discuţie]]); revenire la ultima versiune de către [[User:$1|$1]]',
+'sessionfailure'              => 'Se pare că este o problemă cu sesiunea de autentificare; această acţiune a fost oprită ca o precauţie împotriva hijack. Apăsaţi "back" şi reîncărcaţi pagina de unde aţi venit, apoi reîncercaţi.',
+'protectlogpage'              => 'Jurnal_protecţii',
+'protectlogtext'              => 'Mai jos se află lista de blocări/deblocări a paginilor. Vezi [[Project:Pagină protejată]] pentru mai multe informaţii.',
+'protectedarticle'            => 'a protejat "[[$1]]"',
+'unprotectedarticle'          => 'a deprotejat "[[$1]]"',
+'protectsub'                  => '(Protejare "$1")',
+'confirmprotecttext'          => 'Eşti sigur(ă) că doreşti să protejezi pagina?',
+'confirmprotect'              => 'Confirmă protejare',
+'protectmoveonly'             => 'Protejează doar de mutări',
+'protectcomment'              => 'Motiv pentru protejare',
+'unprotectsub'                => '(Deprotejând "$1")',
+'confirmunprotecttext'        => 'Sunteţi sigur(ă) că doriţi deprotejarea paginii?',
+'confirmunprotect'            => 'Confirmă deprotejarea',
+'unprotectcomment'            => 'Motiv pentru deprotejare',
+'protect-unchain'             => 'Deblochează permisiunile de mutare',
+'protect-text'                => 'Poţi vizualiza sau modifica nivelul de protecţie pentru pagina <strong>$1</strong>. Asigură-te că acţionezi în conformitate cu [[Project:Pagină protejată|politica proiectului]].',
+'protect-viewtext'            => 'Contul dumneavoastră nu are permisiunile necesare modificării nivelului de protecţie al paginii. Puteţi vizualiza setările curente pentru pagina <strong>$1</strong>:',
+'protect-default'             => '(standard)',
+'protect-level-autoconfirmed' => 'Blochează utilizatorii neînregistraţi',
+'protect-level-sysop'         => 'Numai administratorii',
+'protect-cascade'             => 'Protejare în cascadă (toate paginile incluse în această pagină vor fi protejate)',
+
+# Restrictions (nouns)
+'restriction-edit' => 'Editează',
+'restriction-move' => 'Mută',
+
+# Undelete
+'undelete'                 => 'Recuperează pagina ştearsă',
+'undeletepage'             => 'Vizualizează şi recuperează pagini şterse',
+'viewdeletedpage'          => 'Vezi paginile şterse',
+'undeletepagetext'         => 'Următoarele pagini au fost şterse, dar încă se află în arhivă şi pot fi recuperate. Reţine că arhiva se poate şterge din timp în timp.',
+'undeleteextrahelp'        => "Pentru a recupera întreaga pagină lăsaţi toate căsuţele nebifate şi apăsaţi butonul '''''Recuperează'''''. Pentru a realiza o recuperare selectivă bifaţi versiunile pe care doriţi să le recuperaţi şi apăsaţi butonul '''''Recuperează'''''. Butonul '''''Resetează'''''  va şterge comentariul şi toate bifările.",
+'undeleterevisions'        => '$1 versiuni arhivate',
+'undeletehistory'          => 'Dacă recuperaţi pagina, toate versiunile asociate vor fi adăugate retroactiv în istorie. Dacă o pagină nouă cu acelaşi nume a fost creată de la momentul ştergerii acesteia, versiunile recuperate vor apărea în istoria paginii, iar versiunea curentă a paginii nu va fi înlocuită automat de către versiunea recuperată.',
+'undeletehistorynoadmin'   => 'Acest articol a fost şters. Motivul ştergerii apare mai jos, alături de detaliile utilzatorilor care au editat această pagină înainte de ştergere. Textul prorpiu-zis al reviziilor şterse este disponibil doar administratorilor.',
+'undeletebtn'              => 'Recuperează',
+'undeletereset'            => 'Resetează',
+'undeletecomment'          => 'Comentariu:',
+'undeletedarticle'         => '"[[$1]]" a fost recuperat',
+'undeletedrevisions'       => '{{PLURAL:$1|o revizie restaurată|$1 revizii restaurate}}',
+'undeletedrevisions-files' => '$1 {{PLURAL:$1|revizie|revizii}} şi $2 {{PLURAL:$2|fişier|fişiere}} recuperate',
+'undeletedfiles'           => '$1 {{PLURAL:$1|revizie recuperată|revizii recuperate}}',
+'cannotundelete'           => 'Recuperarea a eşuat; este posibil ca altcineva să fi recuperat pagina deja.',
+'undeletedpage'            => "<big>'''$1 a fost recuperat'''</big>
+
+Consultaţi [[Special:Log/delete|raportul ştergerilor]] pentru a vedea toate ştergerile şi recuperările recente.",
+
+# Namespace form on various pages
+'namespace' => 'Spaţiul:',
+'invert'    => 'Exclude spaţiul:',
+
+# Contributions
+'contributions' => 'Contribuţii ale utilizatorului',
+'mycontris'     => 'Contribuţii',
+'contribsub2'    => 'Pentru $1 ($2)',
+'nocontribs'    => 'Nu a fost găsită nici o modificare care să satisfacă acest criteriu.',
+'ucnote'        => 'Mai jos se află ultimele <b>$1</b> modificări ale utilizatorului din ultimele <b>$2</b> zile.',
+'uclinks'       => 'Vezi ultimele $1 modificări; vezi ultimele $2 zile.',
+'uctop'         => ' (sus)',
+
+'sp-contributions-newest'      => 'Ultimele',
+'sp-contributions-oldest'      => 'Primele',
+'sp-contributions-newer'       => 'Următoarele $1',
+'sp-contributions-older'       => 'Anterioarele $1',
+'sp-contributions-newbies-sub' => 'Pentru începători',
+
+'sp-newimages-showfrom' => 'Arată imaginile noi începând cu $1',
+
+# What links here
+'whatlinkshere' => 'Ce se leagă aici',
+'notargettitle' => 'Lipsă ţintă',
+'notargettext'  => 'Nu ai specificat nici o pagină sau un utilizator ţintă pentru care să se efectueze această operaţiune.',
+'linklistsub'   => '(Lista de legături)',
+'linkshere'     => 'Următoarele pagini conţin legături către aceasta:',
+'nolinkshere'   => 'Nici o pagină nu se leagă aici.',
+'isredirect'    => 'pagină de redirecţionare',
+'istemplate'    => 'prin includerea formatului',
+
+# Block/unblock
+'blockip'                     => 'Blochează utilizator / IP',
+'blockiptext'                 => "Pentru a bloca un utilizator completaţi rubricile de mai jos.<br />
+'''Respectaţi [[Project:Blocare|politica de blocare]].'''<br />
+Precizaţi motivul blocării; de exemplu indicaţi paginile vandalizate de acest utilizator.",
+'ipaddress'                   => 'Adresa IP',
+'ipadressorusername'          => 'Adresă IP sau nume de utilizator',
+'ipbexpiry'                   => 'Expiră',
+'ipbreason'                   => 'Motiv',
+'ipbanononly'                 => 'Blochează doar utilizatorii anonimi',
+'ipbcreateaccount'            => 'Nu permite crearea de conturi',
+'ipbenableautoblock'          => 'Blochează automat ultima adresă IP folosită de acest utilizator şi toate adresele de la care încearcă să editeze în viitor',
+'ipbsubmit'                   => 'Blochează acest utilizator',
+'ipbother'                    => 'Alt termen',
+'ipboptions'                  => '15 minute:15 minutes,1 oră:1 hour,3 ore:3 hours,24 ore:24 hours,48 ore:48 hours,1 săptămână:1 week,1 lună:1 month,nelimitat:infinite',
+'ipbotheroption'              => 'altul',
+'badipaddress'                => 'Adresa IP este invalidă.',
+'blockipsuccesssub'           => 'Utilizatorul a fost blocat',
+'blockipsuccesstext'          => 'Adresa IP "$1" a fost blocată.
+<br />Vezi [[Special:Ipblocklist|lista de adrese IP şi conturi blocate]] pentru a revizui adresele blocate.',
+'ipb-unblock-addr'            => 'Deblochează $1',
+'ipb-unblock'                 => 'Deblochează un cont de utilizator sau o adresă IP',
+'ipb-blocklist-addr'          => 'Vezi blocările existente pentru $1',
+'ipb-blocklist'               => 'Vezi blocările existente',
+'unblockip'                   => 'Deblochează adresă IP',
+'unblockiptext'               => 'Foloseşte chestionarul de mai jos pentru a restaura
+drepturile de scriere pentru o adresă IP blocată anterior..',
+'ipusubmit'                   => 'Deblochează adresa',
+'unblocked'                   => '[[User:$1|$1]] a fost deblocat',
+'ipblocklist'                 => 'Lista de adrese IP şi conturi blocate',
+'blocklistline'               => '$1, $2 a blocat $3 ($4)',
+'infiniteblock'               => 'termen nelimitat',
+'expiringblock'               => 'expiră la $1',
+'anononlyblock'               => 'doar anonimi',
+'noautoblockblock'            => 'autoblocare dezactivată',
+'createaccountblock'          => 'crearea de conturi blocată',
+'ipblocklistempty'            => 'Lista de blocări este goală.',
+'blocklink'                   => 'blochează',
+'unblocklink'                 => 'deblochează',
+'contribslink'                => 'contribuţii',
+'autoblocker'                 => 'Autoblocat fiindcă foloseşti aceeaşi [[Adresă IP|adresă IP]] ca şi "$1". Motivul este "$2".',
+'blocklogpage'                => 'Jurnal_blocări',
+'blocklogentry'               => 'a blocat "[[$1]]" pe o perioadă de $2',
+'blocklogtext'                => 'Acesta este un jurnal al acţiunilor de blocare şi deblocare.
+[[Adresă IP|Adresele IP]] blocate automat nu sunt afişate.
+Vizitaţi [[Special:Ipblocklist|lista de adrese blocate]] pentru o listă explicită a adreselor blocate în acest moment.',
+'unblocklogentry'             => 'a deblocat $1',
+'block-log-flags-anononly'    => 'doar utilizatorii anonimi',
+'block-log-flags-nocreate'    => 'creare de conturi dezactivată',
+'block-log-flags-autoblock'   => 'autoblocare activată',
+'range_block_disabled'        => 'Abilitatea dezvoltatorilor de a bloca serii de adrese este dezactivată.',
+'ipb_expiry_invalid'          => 'Dată de expirare invalidă.',
+'ipb_already_blocked'         => '"$1" este deja blocat',
+'ip_range_invalid'            => 'Serie IP invalidă.',
+'proxyblocker'                => 'Blocaj de proxy',
+'ipb_cant_unblock'            => 'Eroare: nu găsesc identificatorul. Probabil a fost deja deblocat.',
+'proxyblockreason'            => 'Adresa ta IP a fost blocată pentru că este un proxy deschis. Te rog, contactează provider-ul tău de servicii Internet sau tehnicieni IT şi informează-i asupra acestei probleme serioase de securitate.',
+'proxyblocksuccess'           => 'Realizat.',
+'sorbs'                       => 'Lista neagră DNS a SORBS',
+'sorbsreason'                 => 'Adresa dumneavoastră IP este listată ca un proxy deschis în [http://www.sorbs.net SORBS] DNSBL.',
+'sorbs_create_account_reason' => 'Adresa dvs. IP este listată la un proxy deschis în lista neagră DNS a [http://www.sorbs.net SORBS]. Nu vă puteţi crea un cont',
+
+# Developer tools
+'lockdb'              => 'Blochează baza de date',
+'unlockdb'            => 'Deblochează baza de date',
+'lockdbtext'          => 'Blocarea bazei de date va împiedica pe toţi utilizatorii
+să modifice pagini, să-şi schimbe preferinţele, să-şi modifice listele de
+pagini urmărite şi orice alte operaţiuni care ar necesita schimări
+în baza de date.
+Te rugăm să confirmi că intenţionezi acest lucru şi faptul că vei debloca
+baza de date atunci când vei încheia operaţiunile de întreţinere.',
+'unlockdbtext'        => 'Deblocarea bazei de date va permite tuturor utilizatorilor să editeze pagini, să-şi schimbe preferinţele, să-şi editeze listele de pagini urmărite şi orice alte operaţiuni care ar necesita schimări în baza de date. Te rugăm să-ţi confirmi intenţia de a face acest lucru.',
+'lockconfirm'         => 'Da, chiar vreau să blochez baza de date.',
+'unlockconfirm'       => 'Da, chiar vreau să deblochez baza de date.',
+'lockbtn'             => 'Blochează baza de date',
+'unlockbtn'           => 'Deblochează baza de date',
+'locknoconfirm'       => 'Nu aţi bifat căsuţa de confirmare.',
+'lockdbsuccesssub'    => 'Baza de date a fost blocată',
+'unlockdbsuccesssub'  => 'Baza de date a fost deblocată',
+'lockdbsuccesstext'   => 'Baza de date {{SITENAME}} a fost blocată la scriere.<br />
+Nu uita să o deblochezi după ce termini operaţiunile administrative pentru care ai blocat-o.',
+'unlockdbsuccesstext' => 'Baza de date a fost deblocată.',
+'databasenotlocked'   => 'Baza de date nu este blocată.',
+
+# Move page
+'movepage'                => 'Mută pagina',
+'movepagetext'            => "Puteţi folosi formularul de mai jos pentru a redenumi
+o pagină, mutându-i toată istoria sub noul nume.
+Pagina veche va deveni o pagină de redirecţionare către pagina nouă.
+Legăturile către pagina veche nu vor fi redirecţionate către cea nouă;
+nu uitaţi să verificaţi dacă nu există redirecţionări duble sau invalide.
+
+Te rugăm să reţineţi că sunteţi responsabil(ă) pentru a face legăturile vechi să rămână valide.
+
+Reţineţi că pagina '''nu va fi mutată''' dacă există deja o
+pagină cu noul titlu, în afară de cazul că este complet goală sau este
+o redirecţionare şi în plus nu are nici o istorie de modificare.
+Cu alte cuvinte, veţi putea muta înapoi o pagină pe care aţi mutat-o
+greşit, dar nu veţi putea suprascrie o pagină validă existentă prin
+mutarea alteia.
+
+<b>ATENŢIE!</b>
+Aceasta poate fi o schimbare drastică şi neaşteptată pentru o pagină populară;
+vă rugăm, să vă asiguraţi că înţelegeţi toate consecinţele înainte de a continua.",
+'movepagetalktext'        => "Pagina asociată de discuţii, dacă există, va fi mutată
+automat odată cu aceasta '''afară de cazul că''':
+* Mutaţi pagina în altă secţiune a {{SITENAME}}
+* Există deja o pagină de discuţii cu conţinut (care nu este goală), sau
+* Nu confirmi căsuţa de mai jos.
+
+În oricare din cazurile de mai sus va trebui să muţi sau să unifici
+manual paginile de discuţii, dacă doreşti acest lucru.",
+'movearticle'             => 'Mută pagina',
+'movenologin'             => 'Nu eşti autentificat',
+'movenologintext'         => 'Trebuie să fii un utilizator înregistrat şi să te [[Special:Userlogin|autentifici]] pentru a muta o pagină.',
+'newtitle'                => 'Titlul nou',
+'move-watch'              => 'Urmăreşte această pagină',
+'movepagebtn'             => 'Mută pagina',
+'pagemovedsub'            => 'Pagina a fost mutată',
+'pagemovedtext'           => 'Pagina "[[$1]]" a fost mutată la "[[$2]]".',
+'articleexists'           => 'O pagină cu acelaşi nume există deja, sau numele pe care l-ai ales este invalid. Te rugăm să alegi un alt nume.',
+'talkexists'              => "'''Pagina în sine a fost mutată, dar pagina de discuţii nu a putut fi mutată deoarece deja există o alta cu acelaşi nume. Te rugăm să unifici manual cele două pagini de discuţii.'''",
+'movedto'                 => 'mutată la',
+'movetalk'                => 'Mută şi pagina de "discuţii" dacă se poate.',
+'talkpagemoved'           => 'Şi pagina de discuţii asociată a fost mutată.',
+'talkpagenotmoved'        => 'Pagina asociată de discuţii <strong>nu</strong> a fost mutată.',
+'1movedto2'               => '[[$1]] a fost mutată la [[$2]]',
+'1movedto2_redir'         => '[[$1]] a fost mutată la [[$2]] prin redirect',
+'movelogpage'             => 'Raport mutări',
+'movelogpagetext'         => 'Mai jos se află o listă cu paginile mutate.',
+'movereason'              => 'Motiv',
+'revertmove'              => 'revenire',
+'delete_and_move'         => 'Şterge şi mută',
+'delete_and_move_text'    => '==Ştergere necesară==
+
+Articolul de destinaţie "[[$1]]" există deja. Doriţi să îl ştergeţi pentru a face loc mutării?',
+'delete_and_move_confirm' => 'Da, şterge pagina.',
+'delete_and_move_reason'  => 'Şters pentru a face loc mutării',
+'selfmove'                => 'Titlurile sursei şi ale destinaţiei sunt aceleaşi; nu puteţi muta o pagină peste ea însăşi.',
+'immobile_namespace'      => 'Titlul destinaţiei este al unui tip special; nu se pot muta pagini în acel spaţiu de nume.',
+
+# Export
+'export'          => 'Exportă pagini',
+'exporttext'      => 'Poţi exporta textul şi istoria unei pagini anume sau ale unui grup de pagini în XML. Acesta poate fi apoi importat în alt Wiki care rulează software MediaWiki, poate fi transformat sau păstrat pur şi simplu fiindcă doreşti tu să-l păstrezi.',
+'exportcuronly'   => 'Include numai versiunea curentă, nu şi toată istoria',
+'exportnohistory' => "---- '''Notă:''' exportarea versiunii complete a paginilor prin acest formular a fost scoasă din uz din motive de performanţă.",
+'export-submit'   => 'Exportă',
+
+# Namespace 8 related
+'allmessages'               => 'Toate mesajele',
+'allmessagesname'           => 'Nume',
+'allmessagesdefault'        => 'Textul standard',
+'allmessagescurrent'        => 'Textul curent',
+'allmessagestext'           => 'Aceasta este lista completă a mesajelor disponibile în domeniul "MediaWiki:"',
+'allmessagesnotsupportedUI' => 'Interfaţa curentă de limbă <b>$1</b> nu este suportată de Special:Allmessages la acest sit.',
+'allmessagesnotsupportedDB' => "'''Special:Allmessages''' nu poate fi folosit deoarece '''\$wgUseDatabaseMessages''' este închisă.",
+'allmessagesfilter'         => 'Filtrare în funcţie de titlul mesajului:',
+'allmessagesmodified'       => 'Arată doar mesajele modificate.',
+
+# Thumbnails
+'thumbnail-more'  => 'Extinde',
+'missingimage'    => '<b>Imagine lipsă</b><br />
+<i>$1</i>',
+'filemissing'     => 'Fişier lipsă',
+'thumbnail_error' => 'Eroare la generarea previzualizării: $1',
+
+# Special:Import
+'import'                     => 'Importă pagini',
+'importinterwiki'            => 'Import transwiki',
+'import-interwiki-text'      => 'Selectează un wiki şi titlul paginii care trebuie importate. Datele reviziilor şi numele editorilor vor fi salvate. Toate acţiunile de import transwiki pot fi găsite la [[Special:Log/import|log import]]',
+'import-interwiki-history'   => 'Copiază toate versiunile istoricului acestei pagini',
+'import-interwiki-submit'    => 'Importă',
+'import-interwiki-namespace' => 'Transferă paginile la spaţiul de nume:',
+'importtext'                 => 'Te rog exportă fişierul din sursa wiki folosind funcţia Special:Export, salvează-l pe discul tău şi trimite-l aici.',
+'importstart'                => 'Se importă paginile...',
+'import-revision-count'      => '$1 revizie(i)',
+'importnopages'              => 'Nu există pagini de importat.',
+'importfailed'               => 'Import eşuat: $1',
+'importunknownsource'        => 'Tipul sursei de import este necunoscut',
+'importcantopen'             => 'Fişierul importat nu a putut fi deschis',
+'importbadinterwiki'         => 'Legătură interwiki greşită',
+'importnotext'               => 'Gol sau fără text',
+'importsuccess'              => 'Import reuşit!',
+'importhistoryconflict'      => 'Există istorii contradictorii (se poate să fi importat această pagină înainte)',
+'importnosources'            => 'Nici o sursă de import transwiki a fost definită şi încărcările directe ale istoricului sunt oprite.',
+'importnofile'               => 'Nici un fişier pentru import nu a fost încărcat.',
+'importuploaderror'          => 'Încărcarea fişierului de import nu a avut succes; probabil mărimea fişierului este mai mare decât mărimea maximă acceptată pentru fişiere.',
+
+# Import log
+'importlogpage'                    => 'Log import',
+'importlogpagetext'                => 'Imoprturi administrative de pagini de la alte wiki, cu istoricul editărilor.',
+'import-logentry-upload'           => '$1 importate prin upload',
+'import-logentry-upload-detail'    => '$1 revizie(i)',
+'import-logentry-interwiki'        => 'transwikificat $1',
+'import-logentry-interwiki-detail' => '$1 revizie(i) de la $2',
+
+# Tooltip help for the actions
+'tooltip-pt-userpage'             => 'Pagina mea de utilizator',
+'tooltip-pt-anonuserpage'         => 'Pagina de utilizator pentru adresa IP curentă',
+'tooltip-pt-mytalk'               => 'Pagina mea de discuţii',
+'tooltip-pt-anontalk'             => 'Discuţii despre editări pentru adresa IP curentă',
+'tooltip-pt-preferences'          => 'Preferinţele mele',
+'tooltip-pt-watchlist'            => 'Lista paginilor pe care le monitorizez.',
+'tooltip-pt-mycontris'            => 'Listă de contribuţii',
+'tooltip-pt-login'                => 'Eşti încurajat să te autentifici, deşi acest lucru nu este obligatoriu.',
+'tooltip-pt-anonlogin'            => 'Eşti încurajat să te autentifici, deşi acest lucru nu este obligatoriu.',
+'tooltip-pt-logout'               => 'Închide sesiunea',
+'tooltip-ca-talk'                 => 'Discuţie despre articol',
+'tooltip-ca-edit'                 => 'Poţi edita această pagină. Te rugăm să previzualizezi conţinutul înainte de salvare.',
+'tooltip-ca-addsection'           => 'Adaugă un comentariu acestei discuţii.',
+'tooltip-ca-viewsource'           => 'Aceasta pagina este protejată. Poţi sa vezi doar codul sursă.',
+'tooltip-ca-history'              => 'Versiuni vechi ale acestui document.',
+'tooltip-ca-protect'              => 'Protejează acest document.',
+'tooltip-ca-delete'               => 'Şterge acest document.',
+'tooltip-ca-undelete'             => 'Restaureaza editările făcute acestui document, înainte să fi fost şters.',
+'tooltip-ca-move'                 => 'Mută acest document.',
+'tooltip-ca-watch'                => 'Adaugă acest document în lista ta de monitorizare.',
+'tooltip-ca-unwatch'              => 'Şterge acest document din lista ta de monitorizare.',
+'tooltip-search'                  => 'Căutare în {{SITENAME}}',
+'tooltip-p-logo'                  => 'Pagina principală',
+'tooltip-n-mainpage'              => 'Vizitează pagina principală',
+'tooltip-n-portal'                => 'Despre proiect, ce poţi face tu, unde găseşti soluţii.',
+'tooltip-n-currentevents'         => 'Găseşte informaţii despre evenimente curente',
+'tooltip-n-recentchanges'         => 'Lista ultimelor schimbări realizate în acest wiki.',
+'tooltip-n-randompage'            => 'Mergi spre o pagină aleatoare',
+'tooltip-n-help'                  => 'Locul în care găseşti ajutor.',
+'tooltip-n-sitesupport'           => 'Sprijină-ne',
+'tooltip-t-whatlinkshere'         => 'Lista tuturor paginilor wiki care conduc spre această pagină',
+'tooltip-t-recentchangeslinked'   => 'Schimbări recente în legătură cu această pagină',
+'tooltip-feed-rss'                => 'Alimentează fluxul RSS pentru această pagină',
+'tooltip-feed-atom'               => 'Alimentează fluxul Atom pentru această pagină',
+'tooltip-t-contributions'         => 'Vezi lista de contribuţii ale acestui utilizator',
+'tooltip-t-emailuser'             => 'Trimite un e-mail acestui utilizator',
+'tooltip-t-upload'                => 'Trimite imagini sau fişiere media',
+'tooltip-t-specialpages'          => 'Lista tuturor paginilor speciale',
+'tooltip-ca-nstab-main'           => 'Vezi articolul',
+'tooltip-ca-nstab-user'           => 'Vezi pagina de utilizator',
+'tooltip-ca-nstab-media'          => 'Vezi pagina media',
+'tooltip-ca-nstab-special'        => 'Aceasta este o pagină specială, (nu) poţi edita pagina în sine.',
+'tooltip-ca-nstab-project'        => 'Vezi pagina proiectului',
+'tooltip-ca-nstab-image'          => 'Vezi pagina imaginii',
+'tooltip-ca-nstab-mediawiki'      => 'Vezi mesajul de sistem',
+'tooltip-ca-nstab-template'       => 'Vezi formatul',
+'tooltip-ca-nstab-help'           => 'Vezi pagina de ajutor',
+'tooltip-ca-nstab-category'       => 'Vezi categoria',
+'tooltip-minoredit'               => 'Marcaţi această modificare ca fiind minoră',
+'tooltip-save'                    => 'Salvează modificările tale',
+'tooltip-preview'                 => 'Previzualizarea modificărilor tale, foloseşte-o te rog înainte de a salva!',
+'tooltip-diff'                    => 'Arată ce modificări ai făcut textului.',
+'tooltip-compareselectedversions' => 'Vezi diferenţele între cele două versiuni selectate de pe această pagină.',
+'tooltip-watch'                   => 'Adaugă această pagină la lista mea de pagini urmărite',
+'tooltip-recreate'                => 'Recreează',
+
+# Stylesheets
+'common.css'   => '/** CSS plasate aici vor fi aplicate tuturor apariţiilor */',
+'monobook.css' => '/* modificaţi acest fişier pentru a adapta înfăţişarea monobook-ului pentru tot situl*/',
+
+# Metadata
+'nodublincore'      => 'Metadatele Dublin Core RDF sunt dezactivate pentru acest server.',
+'nocreativecommons' => 'Metadatele Creative Commons RDF dezactivate pentru acest server.',
+'notacceptable'     => 'Serverul wiki nu poate oferi date într-un format pe care clientul tău să-l poată citi.',
+
+# Attribution
+'anonymous'        => 'Utilizator(i) anonimi ai {{SITENAME}}',
+'siteuser'         => 'Utilizator {{SITENAME}} $1',
+'lastmodifiedatby' => 'Această pagină a fost modificată $2, $1 de către $3.', # $1 date, $2 time, $3 user
+'and'              => 'şi',
+'othercontribs'    => 'Bazat pe munca lui $1.',
+'others'           => 'alţii',
+'siteusers'        => 'Utilizator(i) {{SITENAME}} $1',
+'creditspage'      => 'Credenţiale',
+'nocredits'        => 'Nu există credenţiale disponibile pentru această pagină.',
+
+# Spam protection
+'spamprotectiontitle'    => 'Filtru de protecţie spam',
+'spamprotectiontext'     => 'Pagina pe care doriţi să o salvaţi a fost blocată de filtrul spam. Aceasta se datorează probabil unei legături spre un site extern. Aţi putea verifica următoarea expresie regulată:',
+'spamprotectionmatch'    => 'Următorul text a fost oferit de filtrul de spam: $1',
+'subcategorycount'       => 'Această categorie conţine {{PLURAL:$1|o subcategorie|$1 subcategorii}}.',
+'categoryarticlecount'   => 'Această categorie conţine {{PLURAL:$1|un articol|$1 articole}}.',
+'category-media-count'   => 'Această categorie conţine {{PLURAL:$1|un articol|$1 articole}}.',
+'listingcontinuesabbrev' => ' cont.',
+'spambot_username'       => 'Curăţarea de spam a MediaWiki',
+'spam_reverting'         => 'Revenire la ultima versiune care nu conţine legături către $1',
+'spam_blanking'          => 'Toate reviziile conţinând legături către $1, au eşuat',
+
+# Info page
+'infosubtitle'   => 'Informaţii pentru pagină',
+'numedits'       => 'Număr de modificări (articole): $1',
+'numtalkedits'   => 'Număr de modificări (pagina de discuţii): $1',
+'numwatchers'    => 'Număr de utilizatori care urmăresc: $1',
+'numauthors'     => 'Număr de autori distincţi (articole): $1',
+'numtalkauthors' => 'Număr de autori distincţi (pagini de discuţii): $1',
+
+# Math options
+'mw_math_png'    => 'Întodeauna afişează PNG',
+'mw_math_simple' => 'HTML pentru formule simple, altfel PNG',
+'mw_math_html'   => 'HTML dacă este posibil, altfel PNG',
+'mw_math_source' => 'Lasă ca TeX (pentru browser-ele text)',
+'mw_math_modern' => 'Recomandat pentru browser-ele moderne',
+'mw_math_mathml' => 'MathML dacă este posibil (experimental)',
+
+# Patrolling
+'markaspatrolleddiff'        => 'Marchează ca patrulat',
+'markaspatrolledtext'        => 'Marchează acest articol ca patrulat',
+'markedaspatrolled'          => 'A fost marcat ca patrulat',
+'markedaspatrolledtext'      => 'Modificarea selectată a fost marcată ca patrulată.',
+'rcpatroldisabled'           => 'Opţiunea de patrulare a modificărilor recente este dezactivată',
+'rcpatroldisabledtext'       => 'Patrularea modificărilor recente este în prezent dezactivată.',
+'markedaspatrollederror'     => 'Nu se poate marca ca patrulat',
+'markedaspatrollederrortext' => 'Trebuie să specificaţi o revizie care să fie marcată ca patrulată.',
+
+# Image deletion
+'deletedrevision' => 'A fost ştearsă vechea revizie $1.',
+
+# Browsing diffs
+'previousdiff' => '← Diferenţa anterioară',
+'nextdiff'     => 'Diferenţa următoare →',
+
+# Media information
+'mediawarning' => "'''Atenţie''': Acest fişier poate conţine cod maliţios, executându-l, sistemul dvs. poate fi compromis.<hr />",
+'imagemaxsize' => 'Limitează imaginile pe paginile de descriere la:',
+'thumbsize'    => 'Mărime thumbnail:',
+
+'newimages'    => 'Galeria de imagini noi',
+'showhidebots' => '($1 roboţi)',
+'noimages'     => 'Nimic de văzut.',
+
+'passwordtooshort' => 'Parola dumneavoastră este prea scurtă. Trebuie să aibă cel puţin $1 caractere.',
+
+# Metadata
+'metadata'          => 'Informaţii',
+'metadata-help'     => 'Acest fişier conţine informaţii suplimentare, introduse probabil de aparatul fotografic digital sau scannerul care l-a generat. Dacă fişierul a fost modificat între timp, este posibil ca unele detalii să nu mai fie valabile.',
+'metadata-expand'   => 'Afişează detalii suplimentare',
+'metadata-collapse' => 'Ascunde detalii suplimentare',
+
+# EXIF tags
+'exif-imagewidth'                  => 'Lăţime',
+'exif-imagelength'                 => 'Înălţime',
+'exif-bitspersample'               => 'Biţi pe componentă',
+'exif-compression'                 => 'Metodă de comprimare',
+'exif-photometricinterpretation'   => 'Compoziţia pixelilor',
+'exif-orientation'                 => 'Orientare',
+'exif-samplesperpixel'             => 'Numărul de componente',
+'exif-planarconfiguration'         => 'Aranjarea datelor',
+'exif-ycbcrsubsampling'            => 'Mostră din fracţia Y/C',
+'exif-ycbcrpositioning'            => 'Poziţionarea Y şi C',
+'exif-xresolution'                 => 'Rezoluţie orizontală',
+'exif-yresolution'                 => 'Rezoluţie verticală',
+'exif-resolutionunit'              => 'Unitate de rezoluţie pentru X şi Y',
+'exif-stripoffsets'                => 'Locaţia datelor imaginii',
+'exif-stripbytecounts'             => 'Biţi corespunzători benzii comprimate',
+'exif-jpeginterchangeformat'       => 'Offset pentru JPEG SOI',
+'exif-jpeginterchangeformatlength' => 'Biţi de date JPEG',
+'exif-transferfunction'            => 'Funcţia de transfer',
+'exif-whitepoint'                  => 'Cromaticitatea punctului alb',
+'exif-ycbcrcoefficients'           => 'Tăria culorii coeficienţilor matricei de transformare',
+'exif-referenceblackwhite'         => 'Perechile de valori de referinţă albe şi negre',
+'exif-datetime'                    => 'Data şi ora modificării fişierului',
+'exif-imagedescription'            => 'Titlul imaginii',
+'exif-make'                        => 'Producătorul aparatului foto',
+'exif-model'                       => 'Modelul aparatului foto',
+'exif-software'                    => 'Software folosit',
+'exif-artist'                      => 'Autor',
+'exif-copyright'                   => 'Titularul drepturilor de autor',
+'exif-exifversion'                 => 'Versiune exif',
+'exif-flashpixversion'             => 'Versiune susţinută de Flashpix',
+'exif-colorspace'                  => 'Spaţiu de culoare',
+'exif-componentsconfiguration'     => 'Semnificaţia componentelor',
+'exif-compressedbitsperpixel'      => 'Mod de comprimare a imaginii',
+'exif-pixelydimension'             => 'Lăţimea validă a imaginii',
+'exif-pixelxdimension'             => 'Valind image height',
+'exif-makernote'                   => 'Observaţiile producătorului',
+'exif-usercomment'                 => 'Comentariile utilizatorilor',
+'exif-relatedsoundfile'            => 'Fişierul audio asemănător',
+'exif-datetimeoriginal'            => 'Data şi ora producerii imaginii',
+'exif-datetimedigitized'           => 'Data şi ora digitizării',
+'exif-subsectime'                  => 'Data/Ora milisecunde',
+'exif-subsectimeoriginal'          => 'Data/Ora/Original milisecunde',
+'exif-subsectimedigitized'         => 'Milisecunde DateTimeDigitized',
+'exif-exposuretime'                => 'Timp de expunere',
+'exif-exposuretime-format'         => '$1 sec ($2)',
+'exif-fnumber'                     => 'Diafragmă',
+'exif-fnumber-format'              => 'f/$1',
+'exif-exposureprogram'             => 'Program de expunere',
+'exif-spectralsensitivity'         => 'Sensibilitate spectrală',
+'exif-isospeedratings'             => 'Evaluarea vitezei ISO',
+'exif-oecf'                        => 'Factorul de conversie optoelectronic',
+'exif-shutterspeedvalue'           => 'Viteza de închidere',
+'exif-aperturevalue'               => 'Diafragmă',
+'exif-brightnessvalue'             => 'Luminozitate',
+'exif-exposurebiasvalue'           => 'Ajustarea expunerii',
+'exif-subjectdistance'             => 'Distanţa faţă de subiect',
+'exif-meteringmode'                => 'Forma de măsurare',
+'exif-lightsource'                 => 'Sursă de lumină',
+'exif-flash'                       => 'Bliţ',
+'exif-focallength'                 => 'Distanţa focală a obiectivului',
+'exif-focallength-format'          => '$1 mm',
+'exif-subjectarea'                 => 'Suprafaţa subiectului',
+'exif-flashenergy'                 => 'Energie flash',
+'exif-spatialfrequencyresponse'    => 'Răspunsul frecvenţei spaţiale',
+'exif-focalplanexresolution'       => 'Rezoluţia focală plană X',
+'exif-focalplaneyresolution'       => 'Rezoluţia focală plană Y',
+'exif-focalplaneresolutionunit'    => 'Unitatea de măsură pentru rezoluţia focală plană',
+'exif-subjectlocation'             => 'Locaţia subiectului',
+'exif-exposureindex'               => 'Indexul expunerii',
+'exif-sensingmethod'               => 'Metoda sensibilă',
+'exif-filesource'                  => 'Fişier sursă',
+'exif-scenetype'                   => 'Tipul scenei',
+'exif-cfapattern'                  => 'Mozaic CFA (filtre color)',
+'exif-customrendered'              => 'Prelucrarea imaginii',
+'exif-exposuremode'                => 'Mod de expunere',
+'exif-whitebalance'                => 'Balanţa albă',
+'exif-digitalzoomratio'            => 'Raportul zoom-ului digital',
+'exif-focallengthin35mmfilm'       => 'Distanţă focală pentru film de 35 mm',
+'exif-scenecapturetype'            => 'Tipul de surprindere a scenei',
+'exif-gaincontrol'                 => 'Controlul scenei',
+'exif-contrast'                    => 'Contrast',
+'exif-saturation'                  => 'Saturaţie',
+'exif-sharpness'                   => 'Ascuţime',
+'exif-devicesettingdescription'    => 'Descrierea reglajelor aparatului',
+'exif-imageuniqueid'               => 'Identificarea imaginii unice',
+'exif-gpsversionid'                => 'Versiunea de conversie GPS',
+'exif-gpslatituderef'              => 'Latitudine nordică sau sudică',
+'exif-gpslatitude'                 => 'Latitudine',
+'exif-gpslongituderef'             => 'Longitudine estică sau vestică',
+'exif-gpslongitude'                => 'Longitudine',
+'exif-gpsaltituderef'              => 'Indicarea altitudinii',
+'exif-gpsaltitude'                 => 'Altitudine',
+'exif-gpstimestamp'                => 'ora GPS (ceasul atomic)',
+'exif-gpssatellites'               => 'Sateliţi utilizaţi pentru măsurare',
+'exif-gpsstatus'                   => 'Starea receptorului',
+'exif-gpsmeasuremode'              => 'Mod de măsurare',
+'exif-gpsdop'                      => 'Precizie de măsurare',
+'exif-gpsspeedref'                 => 'Unitatea de măsură pentru viteză',
+'exif-gpsspeed'                    => 'Viteza receptorului GPS',
+'exif-gpstrackref'                 => 'Referinţă pentru direcţia de mişcare',
+'exif-gpstrack'                    => 'Direcţie de mişcare',
+'exif-gpsimgdirectionref'          => 'Referinţă pentru direcţia imaginii',
+'exif-gpsimgdirection'             => 'Direcţia imaginii',
+'exif-gpsmapdatum'                 => 'Expertiza geodezică a datelor utilizate',
+'exif-gpsdestlatituderef'          => 'Referinţă pentru latitudinea destinaţiei',
+'exif-gpsdestlatitude'             => 'Destinaţia latitudinală',
+'exif-gpsdestlongituderef'         => 'Referinţă pentru longitudinea destinaţiei',
+'exif-gpsdestlongitude'            => 'Longitudinea destinaţiei',
+'exif-gpsdestbearingref'           => 'Referinţă pentru raportarea destinaţiei',
+'exif-gpsdestbearing'              => 'Raportarea destinaţiei',
+'exif-gpsdestdistanceref'          => 'Referinţă pentru distanţa până la destinaţie',
+'exif-gpsdestdistance'             => 'Distanţa până la destinaţie',
+'exif-gpsprocessingmethod'         => 'Numele metodei de procesare GPS',
+'exif-gpsareainformation'          => 'Numele domeniului GPS',
+'exif-gpsdatestamp'                => 'Data GPS',
+'exif-gpsdifferential'             => 'Corecţia diferenţială GPS',
+
+# EXIF attributes
+'exif-compression-1' => 'Necomprimată',
+'exif-compression-6' => 'JPEG',
+
+'exif-photometricinterpretation-2' => 'RGB',
+'exif-photometricinterpretation-6' => 'YCbCr',
+
+'exif-unknowndate' => 'Dată necunoscută',
+
+'exif-orientation-1' => 'Normală', # 0th row: top; 0th column: left
+'exif-orientation-2' => 'Oglindită orizontal', # 0th row: top; 0th column: right
+'exif-orientation-3' => 'Rotită cu 180°', # 0th row: bottom; 0th column: right
+'exif-orientation-4' => 'Oglindită vertical', # 0th row: bottom; 0th column: left
+'exif-orientation-5' => 'Rotită 90° în sens opus acelor de ceasornic şi oglindită vertical', # 0th row: left; 0th column: top
+'exif-orientation-6' => 'Rotită 90° în sensul acelor de ceasornic', # 0th row: right; 0th column: top
+'exif-orientation-7' => 'Rotită 90° în sensul acelor de ceasornic şi oglindită vertical', # 0th row: right; 0th column: bottom
+'exif-orientation-8' => 'Rotită 90° în sens opus acelor de ceasornic', # 0th row: left; 0th column: bottom
+
+'exif-planarconfiguration-1' => 'format compact',
+'exif-planarconfiguration-2' => 'format plat',
+
+'exif-xyresolution-i' => '$1 dpi',
+'exif-xyresolution-c' => '$1 dpc',
+
+'exif-colorspace-1'      => 'sRGB',
+'exif-colorspace-ffff.h' => 'FFFF.H',
+
+'exif-componentsconfiguration-0' => 'neprecizat',
+'exif-componentsconfiguration-1' => 'Y',
+'exif-componentsconfiguration-2' => 'Cb',
+'exif-componentsconfiguration-3' => 'Cr',
+'exif-componentsconfiguration-4' => 'R',
+'exif-componentsconfiguration-5' => 'G',
+'exif-componentsconfiguration-6' => 'B',
+
+'exif-exposureprogram-0' => 'Neprecizat',
+'exif-exposureprogram-1' => 'Manual',
+'exif-exposureprogram-2' => 'Program normal',
+'exif-exposureprogram-3' => 'Prioritate diafragmă',
+'exif-exposureprogram-4' => 'Prioritate timp',
+'exif-exposureprogram-5' => 'Program creativ (prioritate dată profunzimii)',
+'exif-exposureprogram-6' => 'Program acţiune (prioritate dată timpului de expunere scurt)',
+'exif-exposureprogram-7' => 'Mod portret (focalizare pe subiect şi fundal neclar)',
+'exif-exposureprogram-8' => 'Mod peisaj (focalizare pe fundal)',
+
+'exif-subjectdistance-value' => '$1 metri',
+
+'exif-meteringmode-0'   => 'Necunoscut',
+'exif-meteringmode-1'   => 'Medie',
+'exif-meteringmode-3'   => 'Punct',
+'exif-meteringmode-4'   => 'MultiPunct',
+'exif-meteringmode-5'   => 'Model',
+'exif-meteringmode-6'   => 'Parţial',
+'exif-meteringmode-255' => 'Alta',
+
+'exif-lightsource-0'   => 'Necunoscută',
+'exif-lightsource-1'   => 'Lumină solară',
+'exif-lightsource-2'   => 'Fluorescent',
+'exif-lightsource-3'   => 'Tungsten (lumină incandescentă)',
+'exif-lightsource-4'   => 'Flash',
+'exif-lightsource-9'   => 'Vreme frumoasă',
+'exif-lightsource-10'  => 'Cer noros',
+'exif-lightsource-11'  => 'Umbră',
+'exif-lightsource-12'  => 'Fluorescent luminos (D 5700 – 7100K)',
+'exif-lightsource-13'  => 'Fluorescent luminos alb (N 4600 – 5400K)',
+'exif-lightsource-14'  => 'Fluorescent alb rece (W 3900 – 4500K)',
+'exif-lightsource-15'  => 'Fluorescent alb (WW 3200 – 3700K)',
+'exif-lightsource-17'  => 'Lumină standard A',
+'exif-lightsource-18'  => 'Lumină standard B',
+'exif-lightsource-19'  => 'Lumină standard C',
+'exif-lightsource-20'  => 'D55',
+'exif-lightsource-21'  => 'D65',
+'exif-lightsource-22'  => 'D75',
+'exif-lightsource-23'  => 'D50',
+'exif-lightsource-24'  => 'Lumină artificială normată ISO în studio',
+'exif-lightsource-255' => 'Altă sursă de lumină',
+
+'exif-focalplaneresolutionunit-2' => 'ţoli',
+
+'exif-sensingmethod-1' => 'Nedefinit',
+'exif-sensingmethod-2' => 'Senzorul suprafeţei color one-chip',
+'exif-sensingmethod-3' => 'Senzorul suprafeţei color two-chip',
+'exif-sensingmethod-4' => 'Senzorul suprafeţei color three-chip',
+'exif-sensingmethod-5' => 'Senzorul suprafeţei color secvenţiale',
+'exif-sensingmethod-7' => 'Senzor triliniar',
+'exif-sensingmethod-8' => 'Senzorul linear al culorii secvenţiale',
+
+'exif-filesource-3' => 'DSC',
+
+'exif-scenetype-1' => 'O imagine fotografiată direct',
+
+'exif-customrendered-0' => 'Prelucrare normală',
+'exif-customrendered-1' => 'Prelucrare nestandard',
+
+'exif-exposuremode-0' => 'Expunere automată',
+'exif-exposuremode-1' => 'Expunere manuală',
+'exif-exposuremode-2' => 'Serie automată de expuneri',
+
+'exif-whitebalance-0' => 'Auto-balanţa albă',
+'exif-whitebalance-1' => 'Balanţa manuală albă',
+
+'exif-scenecapturetype-0' => 'Standard',
+'exif-scenecapturetype-1' => 'Portret',
+'exif-scenecapturetype-2' => 'Portret',
+'exif-scenecapturetype-3' => 'Scenă nocturnă',
+
+'exif-gaincontrol-0' => 'Niciuna',
+'exif-gaincontrol-1' => 'Avantajul scăzut de sus',
+'exif-gaincontrol-2' => 'Avantajul mărit de sus',
+'exif-gaincontrol-3' => 'Avantajul scăzut de jos',
+'exif-gaincontrol-4' => 'Avantajul mărit de jos',
+
+'exif-contrast-0' => 'Normal',
+'exif-contrast-1' => 'Redus',
+'exif-contrast-2' => 'Mărit',
+
+'exif-saturation-0' => 'Normal',
+'exif-saturation-1' => 'Saturaţie redusă',
+'exif-saturation-2' => 'Saturaţie ridicată',
+
+'exif-sharpness-0' => 'Normal',
+'exif-sharpness-1' => 'Uşor',
+'exif-sharpness-2' => 'Tare',
+
+'exif-subjectdistancerange-0' => 'Necunoscut',
+'exif-subjectdistancerange-1' => 'Macro',
+'exif-subjectdistancerange-2' => 'Apropiat',
+'exif-subjectdistancerange-3' => 'Îndepărtat',
+
+# Pseudotags used for GPSLatitudeRef and GPSDestLatitudeRef
+'exif-gpslatitude-n' => 'latitudine nordică',
+'exif-gpslatitude-s' => 'latitudine sudică',
+
+# Pseudotags used for GPSLongitudeRef and GPSDestLongitudeRef
+'exif-gpslongitude-e' => 'longitudine estică',
+'exif-gpslongitude-w' => 'longitudine vestică',
+
+'exif-gpsstatus-a' => 'Măsurare în curs',
+'exif-gpsstatus-v' => 'Măsurarea interoperabilităţii',
+
+'exif-gpsmeasuremode-2' => 'măsurătoare bidimensională',
+'exif-gpsmeasuremode-3' => 'măsurătoare tridimensională',
+
+# Pseudotags used for GPSSpeedRef and GPSDestDistanceRef
+'exif-gpsspeed-k' => 'Kilometri pe oră',
+'exif-gpsspeed-m' => 'Mile pe oră',
+'exif-gpsspeed-n' => 'Noduri',
+
+# Pseudotags used for GPSTrackRef, GPSImgDirectionRef and GPSDestBearingRef
+'exif-gpsdirection-t' => 'Direcţia reală',
+'exif-gpsdirection-m' => 'Direcţie magnetică',
+
+# External editor support
+'edit-externally'      => 'Editează acest fişier folosind o aplicaţie externă.',
+'edit-externally-help' => 'Vedeţi [http://meta.wikimedia.org/wiki/Help:External_editors instrucţiuni de instalare] pentru mai multe informaţii.',
+
+# 'all' in various places, this might be different for inflected languages
+'recentchangesall' => 'tot',
+'imagelistall'     => 'toate',
+'watchlistall1'    => 'toate',
+'watchlistall2'    => 'toate',
+'namespacesall'    => 'toate',
+
+# E-mail address confirmation
+'confirmemail'            => 'Confirmă adresa de email',
+'confirmemail_noemail'    => 'Nu aveţi o adresă de email validă setată la [[Special:Preferences|preferinţe]].',
+'confirmemail_text'       => 'Acest wiki necesită validarea adresei de email înaintea folosirii funcţiilor email. Apăsaţi butonul de dedesupt pentru a trimite un email de confirmare către adresa dvs. Acesta va include o legătură care va conţine codul; încărcaţi legătura în browser pentru a valida adresa de email.',
+'confirmemail_send'       => 'Trimite un cod de confirmare',
+'confirmemail_sent'       => 'E-mailul de confirmare a fost trimis.',
+'confirmemail_oncreate'   => 'Un cod de confirmare a fost trimis la adresa de e-mail.
+Acest cod nu este necesar pentru autentificare, dar trebuie transmis înainte de activarea oricăror proprietăţi bazate pe e-mail din wiki.',
+'confirmemail_sendfailed' => 'Nu am putut trimite e-mailul de confirmare. Verificaţi adresa după caractere invalide.',
+'confirmemail_invalid'    => 'Cod de confirmare invalid. Acest cod poate fi expirat.',
+'confirmemail_needlogin'  => 'Trebuie să vă $1 pentru a vă confirma adresa de email.',
+'confirmemail_success'    => 'Adresa de email a fost confirmată. Vă puteţi autentifica şi bucura de wiki.',
+'confirmemail_loggedin'   => 'Adresa de email a fost confirmată.',
+'confirmemail_error'      => 'Ceva nu a funcţionat la salvarea confirmării.',
+'confirmemail_subject'    => 'Confirmare adresă email la {{SITENAME}}',
+'confirmemail_body'       => 'Cineva, probabil dumneavoastră de la adresa IP $1, şi-a înregistrat un cont "$2" cu această adresă de email la {{SITENAME}}.
+
+Pentru a confirma că acest cont aparţine într-adevăr dumneavoastră şi să vă activaţi funcţionalităţile email la {{SITENAME}}, deschideţi această legătură în browser:
+
+$3
+
+Dacă *nu* sunteţi dumneavoastră, nu deschideţi legătura. Codul de confirmare va expira la $4.',
+
+# Inputbox extension, may be useful in other contexts as well
+'tryexact'       => 'Încearcă varianta exactă',
+'searchfulltext' => 'Caută textul întreg',
+'createarticle'  => 'Crează articol',
+
+# Scary transclusion
+'scarytranscludedisabled' => '[Transcluderea interwiki este dezactivată]',
+'scarytranscludefailed'   => '[Şiretlicul formatului a dat greş pentru $1; ne pare rău]',
+'scarytranscludetoolong'  => '[URL-ul este prea lung; ne pare rău]',
+
+# Trackbacks
+'trackbackbox'      => "<div id='mw_trackbacks'>
+Urmăritori la acest articol:<br />
+$1
+</div>",
+'trackbackremove'   => ' ([$1 Şterge])',
+'trackbacklink'     => 'Urmăritor',
+'trackbackdeleteok' => 'Urmăritorul a fost şters cu succes.',
+
+# Delete conflict
+'deletedwhileediting' => 'Atenţie: Această pagină a fost ştearsă după ce ai început să o modifici!',
+'confirmrecreate'     => "Utilizatorul [[User:$1|$1]] ([[User talk:$1|discuţie]]) a şters acest articol după ce aţi început să contribuţi la el din motivul:
+: ''$2''
+Vă rugăm să confirmaţi faptul că într-adevăr doriţi să recreaţi acest articol.",
+'recreate'            => 'Recreează',
+
+'unit-pixel' => 'px',
+
+# HTML dump
+'redirectingto' => 'Redirecţionând la [[$1]]...',
+
+# action=purge
+'confirm_purge'        => 'Doriţi să reîncărcaţi pagina? $1',
+'confirm_purge_button' => 'Da',
+
+'youhavenewmessagesmulti' => 'Aveţi mesaje noi la $1',
+
+'searchcontaining' => "Caută articolele care conţin ''$1''.",
+'searchnamed'      => "Caută articole cu numele ''$1''.",
+'articletitles'    => "Articole începând cu ''$1''",
+'hideresults'      => 'Ascunde rezultatele',
+
+# DISPLAYTITLE
+'displaytitle' => '(Legătură la această pagină ca [[$1]])',
+
+'loginlanguagelabel' => 'Limba: $1',
+
+# Multipage image navigation
+'imgmultipageprev' => '&larr; pagina anterioară',
+'imgmultipagenext' => 'pagina următoare &rarr;',
+'imgmultigotopre'  => 'Mergi la pagina',
+
+# Table pager
+'table_pager_next'  => 'Pagina următoare',
+'table_pager_prev'  => 'Pagina anterioară',
+'table_pager_first' => 'Prima pagină',
+'table_pager_last'  => 'Ultima pagină',
+'table_pager_limit' => 'Arată $1 itemi pe pagină',
+'table_pager_empty' => 'Nici un rezultat',
+
+# Auto-summaries
+'autosumm-blank'   => 'Şters conţinutul paginii',
+'autoredircomment' => 'Redirecţionat înspre [[$1]]', # This should be changed to the new naming convention, but existed beforehand
+'autosumm-new'     => 'Pagină nouă: $1',
+
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesRu.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesRu.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesRu.php	(revision 1280)
@@ -0,0 +1,2310 @@
+<?php
+/** Russian (русский язык)
+  *
+  * Based on MessagesEn.php revision 21425 (2007-04-20)
+  * and ru.wikipedia MediaWiki namespace (2007-04-21)
+  *
+  * Maintainer: Alexander Sigachov (alexander.sigachov на Google Mail)
+  * 
+  * ВНИМАНИЕ! НЕ РЕДАКТИРУЙТЕ ЭТОТ ФАЙЛ!
+  *
+  * Если необходимо внести изменения в перевод отдельных строк интерфейса,
+  * сделайте это посредством редактирования страниц вида «MediaWiki:*».
+  * Их список можно найти на странице «Special:Allmessages».
+  *
+  */
+
+$separatorTransformTable = array(
+	',' => "\xc2\xa0", # nbsp
+	'.' => ','
+);
+
+$fallback8bitEncoding = 'windows-1251';
+$linkPrefixExtension = true;
+
+$namespaceNames = array(
+	NS_MEDIA            => 'Медиа',
+	NS_SPECIAL          => 'Служебная',
+	NS_MAIN             => '',
+	NS_TALK             => 'Обсуждение',
+	NS_USER             => 'Участник',
+	NS_USER_TALK        => 'Обсуждение_участника', 
+	#NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK     => 'Обсуждение_{{grammar:genitive|$1}}',
+	NS_IMAGE            => 'Изображение',
+	NS_IMAGE_TALK       => 'Обсуждение_изображения',
+	NS_MEDIAWIKI        => 'MediaWiki',
+	NS_MEDIAWIKI_TALK   => 'Обсуждение_MediaWiki',
+	NS_TEMPLATE         => 'Шаблон',
+	NS_TEMPLATE_TALK    => 'Обсуждение_шаблона',
+	NS_HELP             => 'Справка',
+	NS_HELP_TALK        => 'Обсуждение_справки',
+	NS_CATEGORY         => 'Категория',
+	NS_CATEGORY_TALK    => 'Обсуждение_категории',
+);
+
+$skinNames = array(
+	'standard' => 'Стандартное',
+	'nostalgia' => 'Ностальгия',
+	'cologneblue' => 'Кёльнская тоска',
+	'davinci' => 'Да Винчи',
+	'mono' => 'Моно',
+	'monobook' => 'Моно-книга',
+	'myskin' => 'Своё',
+	'chick' => 'Цыпа'
+);
+
+$dateFormats = array(
+	'mdy time' => 'H:i',
+	'mdy date' => 'xg j, Y',
+	'mdy both' => 'H:i, xg j, Y',
+
+	'dmy time' => 'H:i',
+	'dmy date' => 'j xg Y',
+	'dmy both' => 'H:i, j xg Y',
+
+	'ymd time' => 'H:i',
+	'ymd date' => 'Y xg j',
+	'ymd both' => 'H:i, Y xg j',
+
+	'ISO 8601 time' => 'xnH:xni:xns',
+	'ISO 8601 date' => 'xnY-xnm-xnd',
+	'ISO 8601 both' => 'xnY-xnm-xnd"T"xnH:xni:xns',
+
+);
+
+$bookstoreList = array(
+	'Поиск по библиотекам «Сигла»' => 'http://www.sigla.ru/results.jsp?f=7&t=3&v0=5030030980&f=1003&t=1&v1=&f=4&t=2&v2=&f=21&t=3&v3=&f=1016&t=3&v4=&f=1016&t=3&v5=&bf=4&b=&d=0&ys=&ye=&lng=&ft=&mt=&dt=&vol=&pt=&iss=&ps=&pe=&tr=&tro=&cc=&i=1&v=tagged&s=0&ss=0&st=0&i18n=ru&rlf=&psz=20&bs=20&ce=hJfuypee8JzzufeGmImYYIpZKRJeeOeeWGJIZRrRRrdmtdeee88NJJJJpeeefTJ3peKJJ3UWWPtzzzzzzzzzzzzzzzzzbzzvzzpy5zzjzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzztzzzzzzzbzzzzzzzzzzzzzzzzzzzzzzzzzzzvzzzzzzyeyTjkDnyHzTuueKZePz9decyzzLzzzL*.c8.NzrGJJvufeeeeeJheeyzjeeeeJh*peeeeKJJJJJJJJJJmjHvOJJJJJJJJJfeeeieeeeSJJJJJSJJJ3TeIJJJJ3..E.UEAcyhxD.eeeeeuzzzLJJJJ5.e8JJJheeeeeeeeeeeeyeeK3JJJJJJJJ*s7defeeeeeeeeeeeeeeeeeeeeeeeeeSJJJJJJJJZIJJzzz1..6LJJJJJJtJJZ4....EK*&debug=false',
+	'Findbook.ru' => 'http://findbook.ru/search/d0?ptype=4&pvalue=$1',
+	'Яндекс.Маркет' => 'http://market.yandex.ru/search.xml?text=$1',
+	'ОЗОН' => 'http://www.ozon.ru/?context=advsearch_book&isbn=$1',
+	'Books.Ru' => 'http://www.books.ru/shop/search/advanced?as%5Btype%5D=books&as%5Bname%5D=&as%5Bisbn%5D=$1&as%5Bauthor%5D=&as%5Bmaker%5D=&as%5Bcontents%5D=&as%5Binfo%5D=&as%5Bdate_after%5D=&as%5Bdate_before%5D=&as%5Bprice_less%5D=&as%5Bprice_more%5D=&as%5Bstrict%5D=%E4%E0&as%5Bsub%5D=%E8%F1%EA%E0%F2%FC&x=22&y=8',
+	'Amazon.com' => 'http://www.amazon.com/exec/obidos/ISBN=$1'
+);
+
+
+# Note to translators:
+#   Please include the English words as synonyms.  This allows people
+#   from other wikis to contribute more easily.
+#
+$magicWords = array(
+#   ID                                 CASE  SYNONYMS
+	'redirect'               => array( 0,    '#REDIRECT', '#ПЕРЕНАПРАВЛЕНИЕ', '#ПЕРЕНАПР'),
+	'notoc'                  => array( 0,    '__NOTOC__', '__БЕЗ_ОГЛ__'),
+	'nogallery'  			 => array( 0,    '__NOGALLERY__', '__БЕЗ_ГАЛЕРЕИ__'),
+	'forcetoc'               => array( 0,    '__FORCETOC__',  '__ОБЯЗ_ОГЛ__'),
+	'toc'                    => array( 0,    '__TOC__', '__ОГЛ__'),
+	'noeditsection'          => array( 0,    '__NOEDITSECTION__', '__БЕЗ_РЕДАКТИРОВАНИЯ_РАЗДЕЛА__'),
+	'start'                  => array( 0,    '__START__', '__НАЧАЛО__'),
+	'currentmonth'           => array( 1,    'CURRENTMONTH', 'ТЕКУЩИЙ_МЕСЯЦ'),
+	'currentmonthname'       => array( 1,    'CURRENTMONTHNAME','НАЗВАНИЕ_ТЕКУЩЕГО_МЕСЯЦА'),
+	'currentmonthnamegen'    => array( 1,    'CURRENTMONTHNAMEGEN','НАЗВАНИЕ_ТЕКУЩЕГО_МЕСЯЦА_РОД'),
+	'currentmonthabbrev'     => array( 1,    'CURRENTMONTHABBREV', 'НАЗВАНИЕ_ТЕКУЩЕГО_МЕСЯЦА_АБР'),
+	'currentday'             => array( 1,    'CURRENTDAY','ТЕКУЩИЙ_ДЕНЬ'),
+	'currentday2'            => array( 1,    'CURRENTDAY2','ТЕКУЩИЙ_ДЕНЬ_2'),
+	'currentdayname'         => array( 1,    'CURRENTDAYNAME','НАЗВАНИЕ_ТЕКУЩЕГО_ДНЯ'),
+	'currentyear'            => array( 1,    'CURRENTYEAR','ТЕКУЩИЙ_ГОД'),
+	'currenttime'            => array( 1,    'CURRENTTIME','ТЕКУЩЕЕ_ВРЕМЯ'),
+	'currenthour'            => array( 1,    'CURRENTHOUR' , 'ТЕКУЩИЙ_ЧАС' ),
+	'localmonth'             => array( 1,    'LOCALMONTH', 'МЕСТНЫЙ_МЕСЯЦ' ),
+	'localmonthname'         => array( 1,    'LOCALMONTHNAME', 'НАЗВАНИЕ_МЕСТНОГО_МЕСЯЦА'),
+	'localmonthnamegen'      => array( 1,    'LOCALMONTHNAMEGEN', 'НАЗВАНИЕ_МЕСТНОГО_МЕСЯЦА_РОД'),
+	'localmonthabbrev'       => array( 1,    'LOCALMONTHABBREV', 'НАЗВАНИЕ_МЕСТНОГОМЕСЯЦА_АБР'),
+	'localday'               => array( 1,    'LOCALDAY' , 'МЕСТНЫЙ_ДЕНЬ'),
+	'localday2'              => array( 1,    'LOCALDAY2', 'МЕСТНЫЙ_ДЕНЬ_2'),
+	'localdayname'           => array( 1,    'LOCALDAYNAME', 'НАЗВАНИЕ_МЕСТНОГО_ДНЯ'),
+	'localyear'              => array( 1,    'LOCALYEAR', 'МЕСТНЫЙ_ГОД'),
+	'localtime'              => array( 1,    'LOCALTIME', 'МЕСТНОЕ_ВРЕМЯ'),
+	'localhour'              => array( 1,    'LOCALHOUR', 'МЕСТНЫЙ_ЧАС'),
+	'numberofpages'          => array( 1,    'NUMBEROFPAGES', 'КОЛИЧЕСТВО_СТРАНИЦ'),
+	'numberofarticles'       => array( 1,    'NUMBEROFARTICLES','КОЛИЧЕСТВО_СТАТЕЙ'),
+	'numberoffiles'          => array( 1,    'NUMBEROFFILES', 'КОЛИЧЕСТВО_ФАЙЛОВ'),
+	'numberofusers'          => array( 1,    'NUMBEROFUSERS', 'КОЛИЧЕСТВО_УЧАСТНИКОВ'),
+	'numberofedits'          => array( 1,    'NUMBEROFEDITS', 'КОЛИЧЕСТВО_ПРАВОК'),
+	'pagename'               => array( 1,    'PAGENAME','НАЗВАНИЕ_СТРАНИЦЫ'),
+	'pagenamee'              => array( 1,    'PAGENAMEE','НАЗВАНИЕ_СТРАНИЦЫ_2'),
+	'namespace'              => array( 1,    'NAMESPACE','ПРОСТРАНСТВО_ИМЁН'),
+	'namespacee'              => array( 1,    'NAMESPACEE','ПРОСТРАНСТВО_ИМЁН_2'),
+	'talkspace'              => array( 1,    'TALKSPACE', 'ПРОСТРАНСТВО_ОБСУЖДЕНИЙ'),
+	'talkspacee'             => array( 1,    'TALKSPACEE', 'ПРОСТРАНСТВО_ОБСУЖДЕНИЙ_2'),
+	'subjectspace'           => array( 1,    'SUBJECTSPACE', 'ARTICLESPACE', 'ПРОСТРАНСТВО_СТАТЕЙ' ),
+	'subjectspacee'          => array( 1,    'SUBJECTSPACEE', 'ARTICLESPACEE', 'ПРОСТРАНСТВО_СТАТЕЙ_2' ),
+	'fullpagename'           => array( 1,    'FULLPAGENAME', 'ПОЛНОЕ_НАЗВАНИЕ_СТРАНЦЫ' ),
+	'fullpagenamee'          => array( 1,    'FULLPAGENAMEE', 'ПОЛНОЕ_НАЗВАНИЕ_СТРАНЦЫ_2' ),
+	'subpagename'            => array( 1,    'SUBPAGENAME', 'НАЗВАНИЕ_ПОДСТРАНИЦЫ' ),
+	'subpagenamee'           => array( 1,    'SUBPAGENAMEE', 'НАЗВАНИЕ_ПОДСТРАНИЦЫ_2'),
+	'basepagename'           => array( 1,    'BASEPAGENAME', 'ОСНОВА_НАЗВАНИЯ_СТРАНИЦЫ'),
+	'basepagenamee'          => array( 1,    'BASEPAGENAMEE', 'ОСНОВА_НАЗВАНИЯ_СТРАНИЦЫ_2'),
+	'talkpagename'           => array( 1,    'TALKPAGENAME', 'НАЗВАНИЕ_СТРАНИЦЫ_ОБСУЖДЕНИЯ'),
+	'talkpagenamee'          => array( 1,    'TALKPAGENAMEE', 'НАЗВАНИЕ_СТРАНИЦЫ_ОБСУЖДЕНИЯ_2'),
+	'subjectpagename'        => array( 1,    'SUBJECTPAGENAME', 'ARTICLEPAGENAME', 'НАЗВАНИЕ_СТРАНИЦЫ_СТАТЬИ' ),
+	'subjectpagenamee'       => array( 1,    'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE', 'НАЗВАНИЕ_СТРАНИЦЫ_СТАТЬИ_2' ),
+	'msg'                    => array( 0,    'MSG:', 'СООБЩ:'),
+	'subst'                  => array( 0,    'SUBST:','ПОДСТ:'),
+	'msgnw'                  => array( 0,    'MSGNW:', 'СООБЩ_БЕЗ_ВИКИ:'),
+	'img_thumbnail'          => array( 1,    'thumbnail', 'thumb', 'мини'),
+	'img_manualthumb'        => array( 1,    'thumbnail=$1', 'thumb=$1', 'мини=$1'),
+	'img_right'              => array( 1,    'right','справа'),
+	'img_left'               => array( 1,    'left','слева'),
+	'img_none'               => array( 1,    'none', 'без'),
+	'img_width'              => array( 1,    '$1px','$1пкс'),
+	'img_center'             => array( 1,    'center', 'centre','центр'),
+	'img_framed'             => array( 1,    'framed', 'enframed', 'frame','обрамить'),
+	'img_page'               => array( 1,    'page=$1', 'page $1', 'страница=$1', 'страница $1' ),
+	'int'                    => array( 0,    'INT:', 'ВНУТР:'),
+	'sitename'               => array( 1,    'SITENAME','НАЗВАНИ_ЕСАЙТА'),
+	'ns'                     => array( 0,    'NS:','ПИ:'),
+	'localurl'               => array( 0,    'LOCALURL:', 'ЛОКАЛЬНЫЙ_АДРЕС:'),
+	'localurle'              => array( 0,    'LOCALURLE:', 'ЛОКАЛЬНЫЙ_АДРЕС_2:'),
+	'server'                 => array( 0,    'SERVER','СЕРВЕР'),
+	'servername'             => array( 0,    'SERVERNAME', 'НАЗВАНИЕ_СЕРВЕРА'),
+	'scriptpath'             => array( 0,    'SCRIPTPATH', 'ПУТЬ_К_СКРИПТУ'),
+	'grammar'                => array( 0,    'GRAMMAR:', 'ПАДЕЖ:'),
+	'notitleconvert'         => array( 0,    '__NOTITLECONVERT__', '__NOTC__', '__БЕЗ_ПРЕОБРАЗОВАНИЯ_ЗАГОЛОВКА__'),
+	'nocontentconvert'       => array( 0,    '__NOCONTENTCONVERT__', '__NOCC__', '__БЕЗ_ПРЕОБРАЗОВАНИЯ_ТЕКСТА__'),
+	'currentweek'            => array( 1,    'CURRENTWEEK','ТЕКУЩАЯ_НЕДЕЛЯ'),
+	'currentdow'             => array( 1,    'CURRENTDOW','ТЕКУЩИЙ_ДЕНЬ_НЕДЕЛИ'),
+	'localweek'              => array( 1,    'LOCALWEEK', 'МЕСТНАЯ_НЕДЕЛЯ' ),
+	'localdow'               => array( 1,    'LOCALDOW', 'МЕСТНЫЙ_ДЕНЬ_НЕДЕЛИ' ),
+	'revisionid'             => array( 1,    'REVISIONID', 'ИД_ВЕРСИИ'),
+	'revisionday'            => array( 1,    'REVISIONDAY', 'ДЕНЬ_ВЕРСИИ' ),
+	'revisionday2'           => array( 1,    'REVISIONDAY2' , 'ДЕНЬ_ВЕРСИИ_2'),
+	'revisionmonth'          => array( 1,    'REVISIONMONTH' , 'МЕСЯЦ_ВЕРСИИ'),
+	'revisionyear'           => array( 1,    'REVISIONYEAR' , 'ГОД_ВЕРСИИ'),
+	'revisiontimestamp'      => array( 1,    'REVISIONTIMESTAMP'      ),
+	'plural'                 => array( 0,    'PLURAL:', 'МНОЖЕСТВЕННОЕ_ЧИСЛО:' ),
+	'fullurl'                => array( 0,    'FULLURL:', 'ПОЛНЫЙ_АДРЕС:' ),
+	'fullurle'               => array( 0,    'FULLURLE:', 'ПОЛНЫЙ_АДРЕС_2:' ),
+	'lcfirst'                => array( 0,    'LCFIRST:', 'ПЕРВАЯ_БУКВА_МАЛЕНЬКАЯ:' ),
+	'ucfirst'                => array( 0,    'UCFIRST:' , 'ПЕРВАЯ_БУКВА_БОЛЬШАЯ:' ),
+	'lc'                     => array( 0,    'LC:' , 'МАЛЕНЬКИМИ_БУКВАМИ:' ),
+	'uc'                     => array( 0,    'UC:', 'БОЛЬШИМИ_БУКВАМИ:' ),
+	'raw'                    => array( 0,    'RAW:', 'НЕОБРАБ:' ),
+	'displaytitle'           => array( 1,    'DISPLAYTITLE' , 'ПОКАЗАТЬ_ЗАГОЛОВОК' ),
+	'rawsuffix'              => array( 1,    'R' , 'Н' ),
+	'newsectionlink'         => array( 1,    '__NEWSECTIONLINK__', '__ССЫЛКА_НА_НОВЫЙ_РАЗДЕЛ__' ),
+	'currentversion'         => array( 1,    'CURRENTVERSION' , 'ТЕКУЩАЯ_ВЕРСИЯ' ),
+	'urlencode'              => array( 0,    'URLENCODE:' , 'ЗАКОДИРОВАННЫЙ_АДРЕС:' ),
+	'anchorencode'                   => array( 0,    'ANCHORENCODE', 'КОДИРОВАТЬ_МЕТКУ'),
+	'currenttimestamp'       => array( 1,    'CURRENTTIMESTAMP' , 'ОТМЕТКА_ТЕКУЩЕГО_ВРЕМЕНИ' ),
+	'localtimestamp'         => array( 1,    'LOCALTIMESTAMP' , 'ОТМЕТКА_МЕСТНОГО_ВРЕМЕНИ'),
+	'directionmark'          => array( 1,    'DIRECTIONMARK', 'DIRMARK' , 'НАПРАВЛЕНИЕ_ПИСЬМА' ),
+	'language'               => array( 0,    '#LANGUAGE:' , '#ЯЗЫК:' ),
+	'contentlanguage'        => array( 1,    'CONTENTLANGUAGE', 'CONTENTLANG', 'ЯЗЫК_СОДЕРЖАНИЯ' ),
+	'pagesinnamespace'       => array( 1,    'PAGESINNAMESPACE:', 'PAGESINNS:' , 'СТРАНИЦ_В_ПРОСТРАНСТВЕ_ИМЁН:' ),
+	'numberofadmins'         => array( 1,    'NUMBEROFADMINS', 'КОЛИЧЕСТВО_АДМИНИСТРАТОРОВ' ),
+	'formatnum'              => array( 0,    'FORMATNUM', 'ФОРМАТИРОВАТЬ_ЧИСЛО' ),
+	'padleft'                => array( 0,    'PADLEFT', 'ЗАПОЛНИТЬ_СЛЕВА'),
+	'padright'               => array( 0,    'PADRIGHT', 'ЗАПОЛНИТЬ_СПРАВА'),
+	'special'                => array( 0,    'special', 'служебная' ),
+	'defaultsort'           => array( 1,    'DEFAULTSORT:', 'СОРТИРОВКА_ПО_УМОЛЧАНИЮ'),
+);
+
+$linkTrail = '/^([a-zабвгдеёжзийклмнопрстуфхцчшщъыьэюя“»]+)(.*)$/sDu';
+
+$messages = array(
+# User preference toggles
+'tog-underline'               => 'Подчёркивать ссылки:',
+'tog-highlightbroken'         => 'Показывать несуществующие ссылки <a href="" class="new">вот так</a> (иначе вот так<a href="" class="internal">?</a>).',
+'tog-justify'                 => 'Выравнивать текст по ширине страницы',
+'tog-hideminor'               => 'Скрывать малозначимые правки в списке свежих изменений',
+'tog-extendwatchlist'         => 'Улучшенный список наблюдения',
+'tog-usenewrc'                => 'Улучшенный список свежих изменений (JavaScript)',
+'tog-numberheadings'          => 'Автоматически нумеровать заголовки',
+'tog-showtoolbar'             => 'Показывать панель инструментов при редактировании (JavaScript)',
+'tog-editondblclick'          => 'Править статьи по двойному щелчку (JavaScript)',
+'tog-editsection'             => 'Показывать ссылку «править» для каждой секции',
+'tog-editsectiononrightclick' => 'Править секции при правом щелчке мышью на заголовке (JavaScript)',
+'tog-showtoc'                 => 'Показывать оглавление (для страниц более чем с 3 заголовками)',
+'tog-rememberpassword'        => 'Помнить мою учётную запись на этом компьютере',
+'tog-editwidth'               => 'Поле редактирования во всю ширину окна браузера',
+'tog-watchcreations'          => 'Добавлять созданные мною страницы в список наблюдения',
+'tog-watchdefault'            => 'Добавлять изменённые мною страницы в список наблюдения',
+'tog-watchmoves'              => 'Добавлять переименованные мною страницы в список наблюдения',
+'tog-watchdeletion'           => 'Добавлять удалённые мною страницы в список наблюдения',
+'tog-minordefault'            => 'По умолчанию помечать изменения как малозначимые',
+'tog-previewontop'            => 'Показывать предпросмотр статьи до окна редактирования',
+'tog-previewonfirst'          => 'Предварительный просмотр по первому изменению',
+'tog-nocache'                 => 'Запретить кеширование страниц',
+'tog-enotifwatchlistpages'    => 'Уведомлять по эл. почте об изменениях страниц из списка наблюдения',
+'tog-enotifusertalkpages'     => 'Уведомлять по эл. почте об изменении персональной страницы обсуждения',
+'tog-enotifminoredits'        => 'Уведомлять по эл. почте даже при малозначительных изменениях',
+'tog-enotifrevealaddr'        => 'Показывать мой почтовый адрес в сообщениях оповещения',
+'tog-shownumberswatching'     => 'Показывать число участников, включивших страницу в свой список наблюдения',
+'tog-fancysig'                => 'Простая подпись (без автоматической ссылки)',
+'tog-externaleditor'          => 'Использовать по умолчанию внешний редактор',
+'tog-externaldiff'            => 'Использовать по умолчанию внешнюю программу сравнения версий',
+'tog-showjumplinks'           => 'Включить вспомогательные ссылки «перейти к»',
+'tog-uselivepreview'          => 'Использовать быстрый предварительный просмотр (JavaScript, экспериментально)',
+'tog-forceeditsummary'        => 'Предупреждать, когда не указано краткое описание изменений',
+'tog-watchlisthideown'        => 'Скрывать мои правки из списка наблюдения',
+'tog-watchlisthidebots'       => 'Скрывать правки ботов из списка наблюдения',
+'tog-watchlisthideminor'      => 'Скрывать малые правки из списка наблюдения',
+'tog-nolangconversion'        => 'Отключить преобразование систем письма',
+'tog-ccmeonemails'            => 'Отправлять мне копии писем, которые я посылаю другим участникам.',
+'tog-diffonly'                => 'Не показывать содержание страницы под сравнением двух версий',
+
+'underline-always'  => 'Всегда',
+'underline-never'   => 'Никогда',
+'underline-default' => 'Использовать настройки браузера',
+
+'skinpreview' => '(Предпросмотр)',
+
+# Dates
+'sunday'        => 'воскресенье',
+'monday'        => 'понедельник',
+'tuesday'       => 'вторник',
+'wednesday'     => 'среда',
+'thursday'      => 'четверг',
+'friday'        => 'пятница',
+'saturday'      => 'суббота',
+'sun'           => 'Вс',
+'mon'           => 'Пн',
+'tue'           => 'Вт',
+'wed'           => 'Ср',
+'thu'           => 'Чт',
+'fri'           => 'Пт',
+'sat'           => 'Сб',
+'january'       => 'январь',
+'february'      => 'февраль',
+'march'         => 'март',
+'april'         => 'апрель',
+'may_long'      => 'май',
+'june'          => 'июнь',
+'july'          => 'июль',
+'august'        => 'август',
+'september'     => 'сентябрь',
+'october'       => 'октябрь',
+'november'      => 'ноябрь',
+'december'      => 'декабрь',
+'january-gen'   => 'января',
+'february-gen'  => 'февраля',
+'march-gen'     => 'марта',
+'april-gen'     => 'апреля',
+'may-gen'       => 'мая',
+'june-gen'      => 'июня',
+'july-gen'      => 'июля',
+'august-gen'    => 'августа',
+'september-gen' => 'сентября',
+'october-gen'   => 'октября',
+'november-gen'  => 'ноября',
+'december-gen'  => 'декабря',
+'jan'           => 'янв',
+'feb'           => 'фев',
+'mar'           => 'мар',
+'apr'           => 'апр',
+'may'           => 'мая',
+'jun'           => 'июн',
+'jul'           => 'июл',
+'aug'           => 'авг',
+'sep'           => 'сен',
+'oct'           => 'окт',
+'nov'           => 'ноя',
+'dec'           => 'дек',
+
+# Bits of text used by many pages
+'categories'            => 'Категории',
+'pagecategories'        => '{{PLURAL:$1|Категория|Категории|Категории}}',
+'category_header'       => 'Статьи в категории «$1»',
+'subcategories'         => 'Подкатегории',
+'category-media-header' => 'Файлы в категории «$1»',
+
+'linkprefix'        => '/^(.*?)(„|«)$/sD',
+'mainpagetext'      => '<big>Вики-движок «MediaWiki» успешно установлен.</big>',
+'mainpagedocfooter' => 'Информацию по работе с этой вики можно найти в [http://meta.wikimedia.org/wiki/%D0%9F%D0%BE%D0%BC%D0%BE%D1%89%D1%8C:%D0%A1%D0%BE%D0%B4%D0%B5%D1%80%D0%B6%D0%B0%D0%BD%D0%B8%D0%B5 руководстве пользователя].
+
+== Некоторые полезные ресурсы ==
+* [http://www.mediawiki.org/wiki/Help:Configuration_settings Список возможных настроек];
+* [http://www.mediawiki.org/wiki/Help:FAQ Часто задаваемые вопросы и ответы по MediaWiki];
+* [http://mail.wikimedia.org/mailman/listinfo/mediawiki-announce Рассылка уведомлений о выходе новых версий MediaWiki].',
+
+'about'          => 'Описание',
+'article'        => 'Статья',
+'newwindow'      => '(в новом окне)',
+'cancel'         => 'Отменить',
+'qbfind'         => 'Поиск',
+'qbbrowse'       => 'Просмотреть',
+'qbedit'         => 'Править',
+'qbpageoptions'  => 'Настройки страницы',
+'qbpageinfo'     => 'Сведения о статье',
+'qbmyoptions'    => 'Ваши настройки',
+'qbspecialpages' => 'Специальные страницы',
+'moredotdotdot'  => 'Далее…',
+'mypage'         => 'Личная страница',
+'mytalk'         => 'Моя страница обсуждения',
+'anontalk'       => 'Обсуждение для этого IP-адреса',
+'navigation'     => 'Навигация',
+
+# Metadata in edit box
+'metadata_help' => 'Метаданные:',
+
+'errorpagetitle'    => 'Ошибка',
+'returnto'          => 'Возврат к странице $1.',
+'tagline'           => 'Материал из {{grammar:genitive|{{SITENAME}}}}.',
+'help'              => 'Справка',
+'search'            => 'Поиск',
+'searchbutton'      => 'Найти',
+'go'                => 'Перейти',
+'searcharticle'     => 'Перейти',
+'history'           => 'История',
+'history_short'     => 'История',
+'updatedmarker'     => 'обновлено с моего последнего посещения',
+'info_short'        => 'Информация',
+'printableversion'  => 'Версия для печати',
+'permalink'         => 'Постоянная ссылка',
+'print'             => 'Печать',
+'edit'              => 'Править',
+'editthispage'      => 'Править эту статью',
+'delete'            => 'Удалить',
+'deletethispage'    => 'Стереть её',
+'undelete_short'    => 'Восстановить $1 {{PLURAL:$1|правку|правки|правок}}',
+'protect'           => 'Защитить',
+'protect_change'    => 'Изменить уровень защиты',
+'protectthispage'   => 'Защитить',
+'unprotect'         => 'Снять защиту',
+'unprotectthispage' => 'Снять защиту',
+'newpage'           => 'Новая статья',
+'talkpage'          => 'Обсудить эту страницу',
+'talkpagelinktext'  => 'Обсуждение',
+'specialpage'       => 'Служебная страница',
+'personaltools'     => 'Личные инструменты',
+'postcomment'       => 'Прокомментировать',
+'articlepage'       => 'Просмотреть статью',
+'talk'              => 'Обсуждение',
+'views'             => 'Просмотры',
+'toolbox'           => 'Инструменты',
+'userpage'          => 'Просмотреть страницу участника',
+'projectpage'       => 'Просмотреть страницу проекта',
+'imagepage'         => 'Просмотреть страницу изображения',
+'mediawikipage'     => 'Показать страницу сообщения',
+'templatepage'      => 'Просмотреть страницу шаблона',
+'viewhelppage'      => 'Получить справку',
+'categorypage'      => 'Просмотреть страницу категории',
+'viewtalkpage'      => 'Просмотреть обсуждение',
+'otherlanguages'    => 'На других языках',
+'redirectedfrom'    => '(Перенаправлено с $1)',
+'redirectpagesub'   => 'Страница-перенаправление',
+'lastmodifiedat'    => 'Последнее изменение этой страницы: $2, $1.', # $1 date, $2 time
+'viewcount'         => 'К этой странице обращались $1 {{plural:$1|раз|раза|раз}}.',
+'protectedpage'     => 'Защищённая статья',
+'jumpto'            => 'Перейти к:',
+'jumptonavigation'  => 'навигация',
+'jumptosearch'      => 'поиск',
+
+# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
+'aboutsite'         => 'Описание {{grammar:genitive|{{SITENAME}}}}',
+'aboutpage'         => '{{ns:project}}:Описание',
+'bugreports'        => 'Отчёт об ошибке',
+'bugreportspage'    => '{{ns:project}}:Отчёт об ошибке',
+'copyright'         => 'Содержимое доступно в соответствии с $1.',
+'copyrightpagename' => 'Авторские права проекта {{SITENAME}}',
+'copyrightpage'     => '{{ns:project}}:Авторское право',
+'currentevents'     => 'Текущие события',
+'currentevents-url' => 'Текущие события',
+'disclaimers'       => 'Отказ от ответственности',
+'disclaimerpage'    => '{{ns:project}}:Отказ от ответственности',
+'edithelp'          => 'Справка по редактированию',
+'edithelppage'      => '{{ns:project}}:Справка по редактированию',
+'faq'               => 'ЧаВО',
+'faqpage'           => '{{ns:project}}:ЧаВО',
+'helppage'          => '{{ns:project}}:Справка',
+'mainpage'          => 'Заглавная страница',
+'policy-url'        => 'Project:Правила',
+'portal'            => 'Сообщество',
+'portal-url'        => '{{ns:project}}:Портал сообщества',
+'privacy'           => 'Политика конфиденциальности',
+'privacypage'       => '{{ns:project}}:Политика конфиденциальности',
+'sitesupport'       => 'Пожертвования',
+'sitesupport-url'   => '{{ns:project}}:Пожертвования',
+
+'badaccess'        => 'Ошибка доступа',
+'badaccess-group0' => 'Вы не можете выполнять запрошенное действие.',
+'badaccess-group1' => 'Запрошенное действие могут выполнять только участники из группы $1.',
+'badaccess-group2' => 'Запрошенное действие могут выполнять только участники из групп $1.',
+'badaccess-groups' => 'Запрошенное действие могут выполнять только участники из групп $1.',
+
+'versionrequired'     => 'Требуется MediaWiki версии $1',
+'versionrequiredtext' => 'Для работы с этой страницей требуется MediaWiki версии $1. См. [[{{ns:special}}:Version|информацию о версиях используемого ПО]].',
+
+'ok'                  => 'OK',
+'pagetitle'           => '$1 — {{SITENAME}}',
+'retrievedfrom'       => 'Получено с $1',
+'youhavenewmessages'  => 'Вы получили $1 ($2).',
+'newmessageslink'     => 'новые сообщения',
+'newmessagesdifflink' => 'последнее изменение',
+'editsection'         => 'править',
+'editold'             => 'править',
+'editsectionhint'     => 'Править секцию: $1',
+'toc'                 => 'Содержание',
+'showtoc'             => 'показать',
+'hidetoc'             => 'убрать',
+'thisisdeleted'       => 'Просмотреть или восстановить $1?',
+'viewdeleted'         => 'Просмотреть $1?',
+'restorelink'         => '{{PLURAL:$1|$1 удалённую правку|$1 удалённые правки|$1 удалённых правок}}',
+'feedlinks'           => 'В виде:',
+'feed-invalid'        => 'Неправильный тип канала для подписки.',
+
+# Short words for each namespace, by default used in the 'article' tab in monobook
+'nstab-main'      => 'Статья',
+'nstab-user'      => 'Участник',
+'nstab-media'     => 'Мультимедиа',
+'nstab-special'   => 'Служебная страница',
+'nstab-project'   => 'О проекте',
+'nstab-image'     => 'Файл',
+'nstab-mediawiki' => 'Сообщение',
+'nstab-template'  => 'Шаблон',
+'nstab-help'      => 'Справка',
+'nstab-category'  => 'Категория',
+
+# Main script and global functions
+'nosuchaction'      => 'Такого действия нет',
+'nosuchactiontext'  => 'Действие, указанное в URL, не распознаётся программным обеспечением вики',
+'nosuchspecialpage' => 'Такой специальной страницы нет',
+'nospecialpagetext' => 'Запрошенной вами служебной страницы не существует. См. [[{{ns:special}}:Specialpages|список служебных страниц]].',
+
+# General errors
+'error'                => 'Ошибка',
+'databaseerror'        => 'Ошибка базы данных',
+'dberrortext'          => 'Обнаружена ошибка синтаксиса запроса к базе данных.
+Последний запрос к базе данных:
+<blockquote><tt>$1</tt></blockquote>
+произошёл из функции <tt>«$2»</tt>.
+MySQL возвратил ошибку <tt>«$3: $4»</tt>.',
+'dberrortextcl'        => 'Обнаружена ошибка синтаксиса запроса к базе данных.
+Последний запрос к базе данных:
+«$1»
+произошёл из функции «$2».
+MySQL возвратил ошибку «$3: $4».',
+'noconnect'            => 'Извините, сейчас невозможно связаться с сервером базы данных из-за технических проблем.<br />
+$1',
+'nodb'                 => 'Невозможно выбрать базу данных $1',
+'cachederror'          => 'Ниже представлена кешированная копия запрошенной страницы; возможно, она устарела.',
+'laggedslavemode'      => 'Внимание: страница может не содержать последних обновлений.',
+'readonly'             => 'Запись в базу данных заблокирована',
+'enterlockreason'      => 'Укажите причину и намеченный срок блокировки.',
+'readonlytext'         => 'Добавление новых статей и другие изменения базы данных сейчас заблокированы: вероятно, в связи с плановым обслуживанием.
+Заблокировавший оператор оставил следующее разъяснение:
+$1',
+'missingarticle'       => 'База данных не нашла текста статьи,
+хотя должна была найти, по имени «$1».
+
+Обычно это вызвано использованием устаревшей ссылки на журнал изменений или различий для статьи, которая была удалена.
+
+Если дело не в этом, то скорее всего, вы обнаружили ошибку в программном обеспечении вики.
+Пожалуйста, сообщите об этом администратору, указав URL.',
+'readonly_lag'         => 'База данных автоматически заблокирована от изменений на время пока вторичный сервер БД не синхронизируется с первичным.',
+'internalerror'        => 'Внутренняя ошибка',
+'filecopyerror'        => 'Невозможно скопировать файл «$1» в «$2».',
+'filerenameerror'      => 'Невозможно переименовать файл «$1» в «$2».',
+'filedeleteerror'      => 'Невозможно удалить файл «$1».',
+'filenotfound'         => 'Невозможно найти файл «$1».',
+'unexpected'           => 'Неподходящее значение: «$1»=«$2».',
+'formerror'            => 'Ошибка: невозможно передать данные формы',
+'badarticleerror'      => 'Это действие не может быть выполнено на данной странице.',
+'cannotdelete'         => 'Невозможно удалить указанную страницу или файл. Возможно, его уже удалил кто-то другой.',
+'badtitle'             => 'Недопустимое название',
+'badtitletext'         => 'Запрашиваемое название статьи неправильно, пусто, либо неправильно указано межъязыковое или интервики название. Возможно, в названии используются недопустимые символы.',
+'perfdisabled'         => 'К сожалению, эта возможность временно недоступна в связи с загруженностью сервера.',
+'perfdisabledsub'      => 'Это — сохранённая копия от $1:', # obsolete?
+'perfcached'           => 'Следующие данные взяты из кеша и могут не учитывать последних изменений.',
+'perfcachedts'         => 'Следующие данные взяты из кеша, последний раз он обновлялся в $1.',
+'querypage-no-updates' => 'Изменение этой страницы в настоящее время запрещено. Эти данные не будут обновлены в настоящее время.',
+'wrong_wfQuery_params' => 'Недопустимые параметры для функции wfQuery()<br />
+Функция: $1<br />
+Запрос: $2',
+'viewsource'           => 'Просмотр',
+'viewsourcefor'        => 'Страница «$1»',
+'protectedpagetext'    => 'Эта страница закрыта для редактирования.',
+'viewsourcetext'       => 'Вы можете просмотреть и скопировать исходный текст этой страницы:',
+'protectedinterface'   => 'Эта страница содержит системное сообщение MediaWiki, её могут изменять только администраторы проекта.',
+'editinginterface'     => "'''Внимание:''' Вы редактируете страницу, содержащую системное сообщение MediaWiki. Её изменение повлияет на внешний вид интерфейса для других пользователей.",
+'sqlhidden'            => '(SQL запрос скрыт)',
+'cascadeprotected'     => 'Страница защищена от изменений, поскольку включена в следующие страницы, для которых активирована возможность каскадной защиты:',
+
+# Login and logout pages
+'logouttitle'                => 'Стать инкогнито',
+'logouttext'                 => 'Вы работаете в том же режиме, который был до вашего представления системе. Вы идентифицируетесь не по имени, а по IP-адресу.
+Вы можете продолжить участие в проекте анонимно или начать новый сеанс как тот же самый или другой пользователь. Некоторые страницы могут отображаться, как будто вы ещё представлены системе под именем, для борьбы с этим явлением обновите кеш браузера.',
+'welcomecreation'            => '== Добро пожаловать, $1! ==
+
+Вы были зарегистрированы.
+Не забудьте провести [[{{ns:special}}:Preferences|персональную настройку сайта]].',
+'loginpagetitle'             => 'Представиться системе',
+'yourname'                   => 'Имя участника',
+'yourpassword'               => 'Пароль',
+'yourpasswordagain'          => 'Повторный набор пароля:',
+'remembermypassword'         => 'Помнить мою учётную запись на этом компьютере',
+'yourdomainname'             => 'Ваш домен',
+'externaldberror'            => 'Произошла ошибка при аутентификации с помощью внешней базы данных, или у вас недостаточно прав для внесения изменений в свою внешнюю учётную запись.',
+'loginproblem'               => '<span style="color:red">Участник не опознан.</span>',
+'alreadyloggedin'            => '<strong>Участник $1, вы уже представились системе!</strong><br />',
+'login'                      => 'Представиться системе',
+'loginprompt'                => 'Вы должны разрешить «cookies», чтобы представиться системе.',
+'userlogin'                  => 'Представиться системе',
+'logout'                     => 'Завершение сеанса',
+'userlogout'                 => 'Завершение сеанса',
+'notloggedin'                => 'Вы не представились системе',
+'nologin'                    => 'Вы ещё не зарегистрировались? $1.',
+'nologinlink'                => 'Создать учётную запись',
+'createaccount'              => 'Зарегистрировать нового участника',
+'gotaccount'                 => 'Вы уже зарегистрированы? $1.',
+'gotaccountlink'             => 'Представьтесь',
+'createaccountmail'          => 'по эл. почте',
+'badretype'                  => 'Введённые вами пароли не совпадают.',
+'userexists'                 => 'Введённое вами имя участника уже занято. Пожалуйста, выберите другое имя.',
+'youremail'                  => 'Электронная почта *:',
+'username'                   => 'Регистрационное имя:',
+'uid'                        => 'Идентификатор пользователя:',
+'yourrealname'               => 'Ваше настоящее имя *:',
+'yourlanguage'               => 'Язык интерфейса:',
+'yourvariant'                => 'Вариант языка',
+'yournick'                   => 'Ваш псевдоним (для подписей):',
+'badsig'                     => 'Неверная подпись. Проверьте корректность HTML-тегов.',
+'email'                      => 'Эл. почта',
+'prefs-help-email-enotif'    => 'Этот адрес также используется для отправки по электронной почте оповещений об изменении страниц, если вы активировали соответствующую опцию.',
+'prefs-help-realname'        => '* Настоящее имя (необязательное поле): если вы укажите его, то оно будет использовано для того чтобы показать кем был внесена правка страницы.',
+'loginerror'                 => 'Ошибка опознавания участника',
+'prefs-help-email'           => '* Электронная почта (необязательное поле) позволяет другим участникам связаться с вами без раскрытия адреса вашей электронной почты.',
+'nocookiesnew'               => 'Участник зарегистрирован, но не представлен. {{SITENAME}} использует «cookies» для представления участников. У вас «cookies» запрещены. Пожалуйста, разрешите их, а затем преставьтесь с вашим новым именем участника и паролем.',
+'nocookieslogin'             => '{{SITENAME}} использует «cookies» для представления участников. Вы их отключили. Пожалуйста, включите их и попробуйте снова.',
+'noname'                     => 'Вы не указали допустимого имени участника.',
+'loginsuccesstitle'          => 'Опознание прошло успешно',
+'loginsuccess'               => 'Теперь вы работаете под именем $1.',
+'nosuchuser'                 => 'Участника с именем $1 не существует.
+Проверьте правильность написания или воспользуйтесь формой ниже, чтобы зарегистрировать нового участника.',
+'nosuchusershort'            => 'Не существует участника с именем $1. Проверьте написание имени.',
+'nouserspecified'            => 'Вы должны указать имя участника.',
+'wrongpassword'              => 'Введённый вами пароль неверен. Попробуйте ещё раз.',
+'wrongpasswordempty'         => 'Пожалуйста, введите непустой пароль.',
+'mailmypassword'             => 'Выслать новый пароль',
+'passwordremindertitle'      => 'Напоминание пароля участника {{grammar:genitive|{{SITENAME}}}}',
+'passwordremindertext'       => 'Кто-то (вероятно вы, с IP-адреса $1) запросил,
+чтобы мы выслали вам новый пароль участника {{grammar:genitive|{{SITENAME}}}} ($4).
+Пароль для участника $2 теперь: <code>$3</code>.
+Вы должны представиться системе и поменять пароль.
+
+Если вы не посылали запроса на смену пароля, или если вы уже вспомнили свой пароль,
+вы можете проигнорировать данное сообщение и продолжить использовать свой старый пароль.',
+'noemail'                    => 'Для участника с именем $1 электронный адрес указан не был.',
+'passwordsent'               => 'Новый пароль был выслан на адрес электронной почты, указанный для участника $1.
+
+Пожалуйста, представьтесь системе заново после получения пароля.',
+'blocked-mailpassword'       => 'Редактирование с вашего IP-адреса запрещено, заблокирована и функция восстановления пароля.',
+'eauthentsent'               => 'Временный пароль был отправлен на адрес электронной почты нового участника $1. В письме также описаны действия, которые нужно выполнить, чтобы подтвердить, что этот адрес электронной почты действительно принадлежит вам.',
+'throttled-mailpassword'     => 'Функция напоминания пароля уже использовалось в течение последних $1 часов. Для предотвращения злоупотреблений, разрешено запрашивать не более одного напоминания за $1 часов.',
+'mailerror'                  => 'Ошибка при отправке почты: $1',
+'acct_creation_throttle_hit' => 'К сожалению, вы уже создали $1 учётных записей. Вы не можете создать больше ни одной.',
+'emailauthenticated'         => 'Ваш почтовый адрес был сопоставлен с $1.',
+'emailnotauthenticated'      => 'Ваш адрес электронной почты ещё не был подтверждён, функции вики-движка по работе с эл. почтой отключены.',
+'noemailprefs'               => 'Адрес электронной почты не был указан, функции вики-движка по работе с эл. почтой отключены.',
+'emailconfirmlink'           => 'Подтвердить ваш адрес электронной почты',
+'invalidemailaddress'        => 'Введённый адрес не может быть принят, так как он не соответствует формату адресов электронной почты. Пожалуйста, введите корректный адрес или оставьте поле пустым.',
+'accountcreated'             => 'Учётная запись создана',
+'accountcreatedtext'         => 'Создана учётная запись участника $1.',
+
+# Password reset dialog
+'resetpass'               => 'Сброс пароля от учётной записи',
+'resetpass_announce'      => 'Вы представились с помощью временного пароля, полученного по электронной почте. Для завершения входа в систему, вы должны установить новый пароль.',
+'resetpass_text'          => '<!-- Добавьте сюда текст -->',
+'resetpass_header'        => 'Сброс пароля',
+'resetpass_submit'        => 'Установить пароль и представиться',
+'resetpass_success'       => 'Ваш пароль был успешно изменён! Выполняется вход в систему…',
+'resetpass_bad_temporary' => 'Недействительный временный пароль. Возможно, вы уже изменили ваш пароль, или попробуйте запросить временный пароль снова.',
+'resetpass_forbidden'     => 'Возможность смены пароля в данной вики-системе не предусмотрена',
+'resetpass_missing'       => 'Форма не содержит данных.',
+
+# Edit page toolbar
+'bold_sample'     => 'Полужирное начертание',
+'bold_tip'        => 'Полужирное начертание',
+'italic_sample'   => 'Курсивное начертание',
+'italic_tip'      => 'Курсивное начертание',
+'link_sample'     => 'Заголовок ссылки',
+'link_tip'        => 'Внутренняя ссылка',
+'extlink_sample'  => 'http://www.example.com заголовок ссылки',
+'extlink_tip'     => 'Внешняя ссылка (помните о префиксе http:// )',
+'headline_sample' => 'Текст заголовка',
+'headline_tip'    => 'Заголовок 2-го уровня',
+'math_sample'     => 'Вставьте сюда формулу',
+'math_tip'        => 'Математическая формула (формат LaTeX)',
+'nowiki_sample'   => 'Вставляйте сюда неотформатированный текст.',
+'nowiki_tip'      => 'Игнорировать вики-форматирование',
+'image_sample'    => 'Example.jpg',
+'image_tip'       => 'Встроенное изображение',
+'media_sample'    => 'Example.ogg',
+'media_tip'       => 'Ссылка на медиа-файл',
+'sig_tip'         => 'Ваша подпись и момент времени',
+'hr_tip'          => 'Горизонтальная линия (не используйте часто)',
+
+# Edit pages
+'summary'                   => 'Описание изменений',
+'subject'                   => 'Тема/заголовок',
+'minoredit'                 => 'Малое изменение',
+'watchthis'                 => 'Включить эту страницу в список наблюдения',
+'savearticle'               => 'Записать страницу',
+'preview'                   => 'Предпросмотр',
+'showpreview'               => 'Предварительный просмотр',
+'showlivepreview'           => 'Быстрый предпросмотр',
+'showdiff'                  => 'Внесённые изменения',
+'anoneditwarning'           => "'''Внимание''': Вы не представились системе. Ваш IP-адрес будет записан в историю изменений этой страницы.",
+'missingsummary'            => "'''Напоминание.''' Вы не дали краткого описания изменений. При повторном нажатии на кнопку «Сохранить», ваши изменения будут сохранены без комментария.",
+'missingcommenttext'        => 'Пожалуйста, введите ниже ваше сообщение.',
+'missingcommentheader'      => "'''Напоминание:''' Вы не указали заголовок комментария. При повторном нажатии на кнопку «Сохранить», ваш комментарий будет записан без заголовка.",
+'summary-preview'           => 'Описание будет',
+'subject-preview'           => 'Заголовок будет',
+'blockedtitle'              => 'Участник заблокирован',
+'blockedtext'               => "<big>'''Ваша учётная запись или IP-адрес заблокированы.'''</big>
+
+Блокировка произведена администратором $1. Указана следующая причина блокировки: ''«$2»''.
+
+Вы можете отправить письмо участнику $1 или любому другому [[{{MediaWiki:grouppage-sysop}}|администратору]], чтобы обсудить блокировку.
+Обратите внимание, что вы не сможете отправить письмо администратору, если вы не зарегистрированы в Википедии и не подтвердили свой адрес электронной почты в [[{{ns:special}}:Preferences|личных настройках]]. 
+Ваш IP-адрес — $3, индентификатор блокировки — #$5. Пожалуйста, указывайте эти данные в своих запросах.",
+'blockedoriginalsource'     => 'Ниже показан текст страницы «$1».',
+'blockededitsource'         => "Ниже показан текст '''ваших изменений''' страницы «$1».",
+'whitelistedittitle'        => 'Для изменения требуется авторизация',
+'whitelistedittext'         => 'Вы должны $1 для изменения страниц.',
+'whitelistreadtitle'        => 'Для чтения требуется авторизация',
+'whitelistreadtext'         => 'Вы должны [[{{ns:special}}:Userlogin|зарегистрироваться]] для чтения этих страниц.',
+'whitelistacctitle'         => 'У вас нет прав, чтобы создать учётную запись',
+'whitelistacctext'          => 'Для того чтобы иметь возможность создавать учётные записи в этой вики, вы должны [[{{ns:special}}:Userlogin|зарегистрироваться]] и иметь соответствующие права.',
+'confirmedittitle'          => 'Требуется подтверждение адреса электронной почты',
+'confirmedittext'           => 'Вы должны подтвердить ваш адрес электронной почты перед правкой страниц. Пожалуйста, введите и подтвердите ваш адрес эл. почты на [[{{ns:special}}:Preferences|странице настроек]].',
+'nosuchsectiontitle'        => 'Нет такой секции',
+'nosuchsectiontext'         => 'Вы пытаетесь редактировать подстраницу, которой не существует. Так как не существует подстраницы с названием $1, ваши правки некуда сохранять.',
+'loginreqtitle'             => 'Требуется авторизация',
+'loginreqlink'              => 'представиться',
+'loginreqpagetext'          => 'Вы должны $1, чтобы просмотреть другие страницы.',
+'accmailtitle'              => 'Пароль выслан.',
+'accmailtext'               => 'Пароль для $1 выслан на $2.',
+'newarticle'                => '(Новая)',
+'newarticletext'            => "Вы перешли по ссылке на статью, которая пока не существует.
+Чтобы создать новую страницу, наберите текст в окне, расположенном ниже
+(см. [[{{MediaWiki:helppage}}|справочную страницу]] чтобы получить больше информации).
+Если вы оказались здесь по ошибке, просто нажмите кнопку '''назад''' вашего браузера.",
+'anontalkpagetext'          => "----''Эта страница обсуждения принадлежит анонимному участнику, который ещё не зарегистрировался или который не представился регистрированным именем. Для идентификации используется цифровой IP-адрес. Если вы анонимный участник и полагаете, что получили сообщения, адресованные не вам (один IP-адрес может использоваться несколькими пользователями), пожалуйста, [[{{ns:special}}:Userlogin|представьтесь системе]], чтобы впредь избежать возможной путаницы с другими участниками.''",
+'noarticletext'             => "В настоящий момент текст на данной странице отсутствует. Вы можете [[{{ns:special}}:Search/{{PAGENAME}}|найти упоминание данного названия]] в других статьях или '''[{{fullurl:{{FULLPAGENAME}}|action=edit}} создать страницу с таким названием]'''.",
+'clearyourcache'            => "'''Замечание:''' Чтобы после сохранения увидеть сделанные изменения, очистите кеш своего браузера: '''Mozilla / Firefox''': ''Ctrl+Shift+R'', '''IE:''' ''Ctrl+F5'', '''Safari''': ''Cmd+Shift+R'', '''Konqueror''': ''F5'', '''Opera''': через меню ''Tools→Preferences''.",
+'usercssjsyoucanpreview'    => '<strong>Подсказка:</strong> Используйте кнопку предварительного просмотра, чтобы протестировать ваш новый css-файл или js-файл перед сохранением.',
+'usercsspreview'            => "'''Помните, что это только предварительный просмотр вашего css-файла, он ещё не сохранён!'''",
+'userjspreview'             => "'''Помните, что это только предварительный просмотр вашего javascrpt-файла, он ещё не сохранён!'''",
+'userinvalidcssjstitle'     => "'''Внимание:''' тема оформления «$1» не найдена. Помните, что пользовательские .css и .js страницы должны иметь название состоящее только из маленьких букв, например «{{ns:user}}:Некто/monobook.css», а не «{{ns:user}}:Некто/Monobook.css».",
+'updated'                   => '(Обновлена)',
+'note'                      => '<strong>Примечание:</strong>',
+'previewnote'               => 'Это только предварительный просмотр, текст ещё не записан!',
+'previewconflict'           => 'Этот предварительный просмотр отражает текст в верхнем окне редактирования так, как он будет выглядеть, если вы решите записать его.',
+'session_fail_preview'      => '<strong>К сожалению, сервер не смог сохранить ваши изменения из-за потери идентификатора сессии. Это наша временная проблема, извините за неудобства. Пожалуйста, попробуйте сохранить ещё раз. Если это не поможет, сохраните данные в локальном файле, закройте и вновь откройте браузер.</strong>',
+'session_fail_preview_html' => "<strong>Извините! Невозможно принять ваше изменение из-за потери данных HTML-сессии.</strong>
+
+''Так как данная вики разрешает использовать чистый HTML, предварительный просмотр отключён в качестве меры предотвращения JavaScript атак.''
+
+<strong>Если это добросовестная попытка редактирования, пожалуста, попробуйте ещё раз. Если не получается повторная правка, попробуйте завершить сеанс работы и заново представится.</strong>",
+'importing'                 => 'Импортирование $1',
+'editing'                   => 'Редактирование: $1',
+'editinguser'               => 'Для участника <b>$1</b>',
+'editingsection'            => 'Редактирование $1 (секция)',
+'editingcomment'            => 'Редактирование $1 (комментарий)',
+'editconflict'              => 'Конфликт редактирования: $1',
+'explainconflict'           => 'Пока вы редактировали эту статью, кто-то внёс в неё изменения. В верхнем окне для редактирования вы видите тот текст статьи, который будет сохранён при нажатии на кнопку «Записать страницу». В нижнем окне для редактирования находится ваш вариант. Чтобы сохранить ваши изменения, перенесите их из нижнего окна для редактирования в верхнее.<br />',
+'yourtext'                  => 'Ваш текст',
+'storedversion'             => 'Сохранённая версия',
+'nonunicodebrowser'         => '<strong>ПРЕДУПРЕЖДЕНИЕ: Ваш браузер не поддерживает кодировку Юникод. При редактировании статей все не-ASCII символы будут заменены на свои шестнадцатеричные коды.</strong>',
+'editingold'                => '<strong>ПРЕДУПРЕЖДЕНИЕ: Вы редактируете устаревшую версию данной страницы. После сохранения страницы будут потеряны изменения, сделанные в последующих версиях.</strong>',
+'yourdiff'                  => 'Различия',
+'copyrightwarning'          => 'Обратите внимание, что все добавления и изменения текста статьи рассматриваются, как выпущенные на условиях лицензии $2 (см. $1).
+Если вы не хотите, чтобы ваши тексты свободно распространялись и редактировались любым желающим, не помещайте их сюда.<br />
+Вы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из
+источника допускающего свободное распространение и изменение своего содержимого.<br />
+<strong>НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ МАТЕРИАЛЫ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ!</strong>',
+'copyrightwarning2'         => 'Пожалуйста, обратите внимание, что все ваши добавления
+могут быть отредактированы или удалены другими участниками.
+Если вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.<br />
+Вы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см. $1).<br />
+<strong>НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!</strong>',
+'longpagewarning'           => '<strong>ПРЕДУПРЕЖДЕНИЕ: Длина этой страницы составляет $1 килобайт. Страницы, размер которых приближается к 32 КБ или превышает это значение, могут неверно отображаться в некоторых браузерах.
+Пожалуйста, рассмотрите вариант разбиения страницы на меньшие части.</strong>',
+'longpageerror'             => '<strong>ОШИБКА: записываемый вами текст имеет размер $1 килобайт, что больше, чем установленный предел $2 килобайта. Страница не может быть сохранена.</strong>',
+'readonlywarning'           => '<strong>ПРЕДУПРЕЖДЕНИЕ: база данных заблокирована в связи с процедурами обслуживания,
+поэтому вы не можете записать ваши изменения прямо сейчас.
+Возможно, вам следует сохранить текст в файл на своём диске и поместить его в данный проект позже.</strong>',
+'protectedpagewarning'      => '<strong>ПРЕДУПРЕЖДЕНИЕ: эта страница защищена от изменений, её могут редактировать только администраторы.</strong>',
+'semiprotectedpagewarning'  => "'''Замечание:''' эта статья была защищена; редактировать её могут только зарегистрированные пользователи.",
+'cascadeprotectedwarning'   => "'''Предупреждение:''' Данную страницу могут редактировать только участники группы «администраторы», поскольку она включена в следующие страницы, для которых активирована возможность каскадной защиты:",
+'templatesused'             => 'Шаблоны, использованные на этой странице:',
+'templatesusedpreview'      => 'Шаблоны, используемые в предпросматриваемой странице:',
+'templatesusedsection'      => 'Шаблоны, используемые в этой секции:',
+'template-protected'        => '(защищено)',
+'template-semiprotected'    => '(частично защищено)',
+'edittools'                 => '<!-- Расположенный здесь текст будет показываться под формой редактирования и формой загрузки. -->',
+'nocreatetitle'             => 'Создание страниц ограничено',
+'nocreatetext'              => 'На этом сайте ограничена возможность создания новых страниц.
+Вы можете вернуться назад и отредактировать существующую страницу, [[{{ns:special}}:Userlogin|представиться системе или создать новую учётную запись]].',
+
+# "Undo" feature
+'undo-success' => 'Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.',
+'undo-failure' => 'Правка не может быть отменена из-за несовместимости промежуточных изменений.',
+'undo-summary' => 'Отмена правки № $1 участника [[{{ns:special}}:Contributions/$2|$2]] ([[{{ns:user_talk}}:$2|обсуждение]])',
+
+# Account creation failure
+'cantcreateaccounttitle' => 'Невозможно создать учётную запись',
+'cantcreateaccounttext'  => 'Регистрация новых участников с этого IP-адреса (<b>$1</b>) запрещена.
+Скорее всего, это связано с систематическим вандализмом с этого адреса. Данный адрес может быть общим, например, для школы или интернет-провайдера.',
+
+# History pages
+'revhistory'          => 'Журнал изменений',
+'viewpagelogs'        => 'Показать журналы для этой страницы',
+'nohistory'           => 'Для этой страницы журнал изменений отсутствует.',
+'revnotfound'         => 'Версия не найдена',
+'revnotfoundtext'     => 'Старая версия страницы не найдена.
+Пожалуйста, проверьте правильность ссылки, которую вы использовали для доступа к этой странице.',
+'loadhist'            => 'Загрузка журнала изменений страницы',
+'currentrev'          => 'Текущая версия',
+'revisionasof'        => 'Версия $1',
+'revision-info'       => 'Версия от $1; $2',
+'previousrevision'    => '← Предыдущая',
+'nextrevision'        => 'Следующая →',
+'currentrevisionlink' => 'Текущая версия',
+'cur'                 => 'текущ.',
+'next'                => 'след.',
+'last'                => 'пред.',
+'orig'                => 'перв.',
+'page_first'          => 'первая',
+'page_last'           => 'последняя',
+'histlegend'          => "Пояснения: (текущ.) — отличие от текущей версии; (пред.) — отличие от предшествующей версии; '''м''' — малозначимое изменение",
+'deletedrev'          => '[удалена]',
+'histfirst'           => 'старейшие',
+'histlast'            => 'недавние',
+'historysize'         => '($1 {{plural:$1|байт|байта|байтов}})',
+'historyempty'        => '(пусто)',
+
+# Revision feed
+'history-feed-title'          => 'История изменений',
+'history-feed-description'    => 'История изменений этой страницы в вики',
+'history-feed-item-nocomment' => '$1 в $2', # user at time
+'history-feed-empty'          => 'Запрашиваемой страницы не существует.
+Она могла быть удалена или переименована.
+Попробуйте [[{{ns:special}}:Search|найти в вики]] похожие страницы.',
+
+# Revision deletion
+'rev-deleted-comment'         => '(комментарий удалён)',
+'rev-deleted-user'            => '(имя автора стёрто)',
+'rev-deleted-event'           => '(запись удалена)',
+'rev-deleted-text-permission' => '<div class="mw-warning plainlinks">
+Эта версия страницы была удалена из общедоступного архива.
+Возможно, объяснения даны в [{{fullurl:{{ns:special}}:Log/delete|page={{PAGENAMEE}}}} журнале удалений].
+</div>',
+'rev-deleted-text-view'       => '<div class="mw-warning plainlinks">
+Эта версия страницы была удалена из общедоступного архива.
+Вы можете просмотреть её, так как являетесь администратором сайта.
+Возможно, объяснения удаления даны в [{{fullurl:{{ns:special}}:Log/delete|page={{PAGENAMEE}}}} журнале удалений].
+</div>',
+'rev-delundel'                => 'показать/скрыть',
+'revisiondelete'              => 'Удалить / восстановить версии страницы',
+'revdelete-nooldid-title'     => 'Не задана целевая версия',
+'revdelete-nooldid-text'      => 'Вы не задали целевую версию (или версии) для выполнения этой функции.',
+'revdelete-selected'          => "Выбранные версии страницы '''$1:'''",
+'logdelete-selected'          => "Выбранные записи журнала для страницы '''$1:'''",
+'revdelete-text'              => 'Удалённые версии будут показываться в истории страницы и журналах,
+но часть их содержания будет недоступна обычным посетителям.
+
+Администраторы будут иметь доступ к скрытому содержанию и смогут восстановить его через этот же интерфейс,
+за исключением случаев, когда было установлено дополнительное ограничение.',
+'revdelete-legend'            => 'Установить ограничения:',
+'revdelete-hide-text'         => 'Скрыть текст этой версии страницы',
+'revdelete-hide-name'         => 'Скрыть действие и его объект',
+'revdelete-hide-comment'      => 'Скрыть комментарий',
+'revdelete-hide-user'         => 'Скрыть имя автора',
+'revdelete-hide-restricted'   => 'Применить ограничения также и к администраторам',
+'revdelete-suppress'          => 'Скрывать данные также и от администраторов',
+'revdelete-hide-image'        => 'Скрыть содержимое файла',
+'revdelete-unsuppress'        => 'Снять ограничения с восстановленных версий',
+'revdelete-log'               => 'Примечание:',
+'revdelete-submit'            => 'Применить к выбранной версии',
+'revdelete-logentry'          => 'Изменена видимость версии страницы [[$1]]',
+'logdelete-logentry'          => 'Изменена видимость события для [[$1]]',
+'revdelete-logaction'         => '$1 {{plural:$1|версия переведена|версии переведены|версий переведены}} в режим $2',
+'logdelete-logaction'         => '$1 {{plural:$1|событие|события|событий}} страницы [[$3]] {{plural:$1|переведено|переведены|переведены}} в режим $2',
+'revdelete-success'           => 'Видимость версии изменена.',
+'logdelete-success'           => 'Видимость события изменена.',
+
+# Diffs
+'difference'                => '(Различия между версиями)',
+'loadingrev'                => 'загрузка версии для различения',
+'lineno'                    => 'Строка $1:',
+'editcurrent'               => 'Редактировать текущую версию данной страницы',
+'selectnewerversionfordiff' => 'Выберите новую версию для сравнения',
+'selectolderversionfordiff' => 'Выберите старую версию для сравнения',
+'compareselectedversions'   => 'Сравнить выбранные версии',
+'editundo'                  => 'отменить',
+'diff-multi'                => '({{plural:$1|$1 промежуточная версия не показана|$1 промежуточные версии не показаны|$1 промежуточных версий не показаны.}})',
+
+# Search results
+'searchresults'         => 'Результаты поиска',
+'searchresulttext'      => 'Для получения более подробной информации о поиске на страницах проекта, см. [[{{MediaWiki:helppage}}|{{int:help}}|справочный раздел]].',
+'searchsubtitle'        => 'По запросу «[[:$1]]»',
+'searchsubtitleinvalid' => 'По запросу «$1»',
+'badquery'              => 'Неправильно сформированный запрос',
+'badquerytext'          => 'Невозможно обработать запрос.
+Возможно, Вы попытались найти слово короче трёх букв (это пока не поддерживается) либо допустили опечатку в слове.
+Попробуйте другой запрос.',
+'matchtotals'           => 'Запросу «$1» соответствует $2 {{plural:$2|название статьи|названия статей|названий статей}} и тексты $3 {{plural:$3|статьи|статей|статей}}.',
+'noexactmatch'          => 'Страницы с названием «$1» не существует.
+
+<span style="display: block; margin: 1.5em 2em">
+<strong>[[:$1|Создать страницу]]</strong></span>',
+'titlematches'          => 'Совпадения в названиях статей',
+'notitlematches'        => 'Нет совпадений в названиях статей',
+'textmatches'           => 'Совпадения в текстах статей',
+'notextmatches'         => 'Нет совпадения в текстах статей',
+'prevn'                 => 'предыдущие $1',
+'nextn'                 => 'следующие $1',
+'viewprevnext'          => 'Просмотреть ($1) ($2) ($3).',
+'showingresults'        => 'Ниже {{plural:$1|показан|показаны|показаны}} <strong>$1</strong> {{plural:$1|результат|результата|результатов}}, начиная с №&nbsp;<strong>$2</strong>.',
+'showingresultsnum'     => 'Ниже {{plural:$3|показан|показаны|показаны}} <strong>$3</strong> {{plural:$3|результат|результата|результатов}}, начиная с №&nbsp;<strong>$2</strong>.',
+'nonefound'             => 'Неудачный поиск может быть вызван попыткой найти общие слова, которые не подлежат индексированию, например — «тоже» и «чтобы» или употреблением более чем одного ключевого слова поиска (показываются только страницы, содержащие все указанные слова для поиска).',
+'powersearch'           => 'Искать',
+'powersearchtext'       => 'Искать в пространствах имён:<br />$1<br />$2 Показывать перенаправления<br /> Искать $3 $9',
+'searchdisabled'        => 'Извините, но встроенный полнотекстовый поиск выключен. Вы можете воспользоваться поиском по сайту через поисковые системы общего назначения, однако имейте в виду, что копия сайта в их кеше может быть несколько устаревшей.',
+'blanknamespace'        => '(Основное)',
+
+# Preferences page
+'preferences'              => 'Настройки',
+'mypreferences'            => 'Мои настройки',
+'prefsnologin'             => 'Вы не представились системе',
+'prefsnologintext'         => 'Вы должны [[{{ns:special}}:Userlogin|представиться системе]], чтобы изменять настройки участника.',
+'prefsreset'               => 'Восстановлены настройки по умолчанию.',
+'qbsettings'               => 'Панель навигации',
+'qbsettings-none'          => 'Не показывать',
+'qbsettings-fixedleft'     => 'Неподвижная слева',
+'qbsettings-fixedright'    => 'Неподвижная справа',
+'qbsettings-floatingleft'  => 'Плавающая слева',
+'qbsettings-floatingright' => 'Плавающая справа',
+'changepassword'           => 'Сменить пароль',
+'skin'                     => 'Оформление',
+'math'                     => 'Отображение формул',
+'dateformat'               => 'Формат даты',
+'datedefault'              => 'По умолчанию',
+'datetime'                 => 'Дата и время',
+'math_failure'             => 'Невозможно разобрать выражение',
+'math_unknown_error'       => 'неизвестная ошибка',
+'math_unknown_function'    => 'неизвестная функция',
+'math_lexing_error'        => 'лексическая ошибка',
+'math_syntax_error'        => 'синтаксическая ошибка',
+'math_image_error'         => 'Преобразование в PNG прошло с ошибкой; проверьте правильность установки latex, dvips, gs и convert',
+'math_bad_tmpdir'          => 'Не удаётся создать или записать во временный каталог математики',
+'math_bad_output'          => 'Не удаётся создать или записать в выходной каталог математики',
+'math_notexvc'             => 'Выполняемый файл texvc не найден; См. math/README — справку по настройке.',
+'prefs-personal'           => 'Личные данные',
+'prefs-rc'                 => 'Страница свежих правок',
+'prefs-watchlist'          => 'Список наблюдения',
+'prefs-watchlist-days'     => 'Число дней, отображаемых в списке наблюдения:',
+'prefs-watchlist-edits'    => 'Количество правок, отображаемых в улучшенном списке наблюдения:',
+'prefs-misc'               => 'Другие настройки',
+'saveprefs'                => 'Записать',
+'resetprefs'               => 'Сбросить',
+'oldpassword'              => 'Старый пароль:',
+'newpassword'              => 'Новый пароль:',
+'retypenew'                => 'Повторите ввод нового пароля:',
+'textboxsize'              => 'Редактирование',
+'rows'                     => 'Строк:',
+'columns'                  => 'Столбцов:',
+'searchresultshead'        => 'Результаты поиска',
+'resultsperpage'           => 'Количество найденных записей на страницу:',
+'contextlines'             => 'Количество показываемых строк для каждой найденной:',
+'contextchars'             => 'Количество символов контекста на строку:',
+'stubthreshold'            => 'Порог определения болванки:',
+'recentchangesdays' => 'Количество дней, за которые показывать свежие правки:',
+'recentchangescount' => 'Количество правок, отображаемое в списке:',
+'savedprefs'               => 'Ваши настройки сохранены.',
+'timezonelegend'           => 'Часовой пояс',
+'timezonetext'             => 'Введите смещение (в часах) вашего местного времени
+от времени сервера (UTC — гринвичского).',
+'localtime'                => 'Местное время',
+'timezoneoffset'           => 'Смещение',
+'servertime'               => 'Текущее время сервера',
+'guesstimezone'            => 'Заполнить из браузера',
+'allowemail'               => 'Разрешить приём электронной почты от других участников',
+'defaultns'                => 'По умолчанию искать в следующих пространствах имён:',
+'default'                  => 'по умолчанию',
+'files'                    => 'Файлы',
+
+# User rights
+'userrights-lookup-user'     => 'Управление группами пользователя',
+'userrights-user-editname'   => 'Введите имя участника:',
+'editusergroup'              => 'Изменить группы пользователей',
+'userrights-editusergroup'   => 'Изменить группы участника',
+'saveusergroups'             => 'Сохранить группы участника',
+'userrights-groupsmember'    => 'Член групп:',
+'userrights-groupsavailable' => 'Доступные группы:',
+'userrights-groupshelp'      => 'Выберите группы, в которые вы хотите включить или из которых хотите исключить участника.
+Невыбранные группы не изменятся. Снять выделение с группы можно используя CTRL + левую клавишу мыши.',
+
+# Groups
+'group'            => 'Группа:',
+'group-bot'        => 'Боты',
+'group-sysop'      => 'Администраторы',
+'group-bureaucrat' => 'Бюрократы',
+'group-all'        => '(все)',
+
+'group-bot-member'        => 'бот',
+'group-sysop-member'      => 'администратор',
+'group-bureaucrat-member' => 'бюрократ',
+
+'grouppage-bot'        => '{{ns:project}}:Боты',
+'grouppage-sysop'      => '{{ns:project}}:Администраторы',
+'grouppage-bureaucrat' => '{{ns:project}}:Бюрократы',
+
+# User rights log
+'rightslog'      => 'Журнал прав пользователя',
+'rightslogtext'  => 'Это журнал изменений прав пользователей.',
+'rightslogentry' => 'Для участника $1 изменены права доступа: с $2 на $3',
+'rightsnone'     => '(нет)',
+
+# Recent changes
+'nchanges'                          => '$1 {{PLURAL:$1|изменение|изменения|изменений}}',
+'recentchanges'                     => 'Свежие правки',
+'recentchangestext'                 => 'Ниже в хронологическом порядке перечислены последние изменения на страницах {{grammar:genitive|{{SITENAME}}}}.',
+'recentchanges-feed-description'    => 'Отслеживать последние изменения в вики в этом потоке.',
+'rcnote'                            => "{{PLURAL:$1|Последнее '''$1''' изменение|Последние '''$1''' изменения|Последние '''$1''' изменений}} за '''$2''' {{plural:$2|день|дня|дней}}, на момент времени $3.",
+'rcnotefrom'                        => 'Ниже перечислены изменения с <strong>$2</strong> (по <strong>$1</strong>).',
+'rclistfrom'                        => 'Показать изменения с $1.',
+'rcshowhideminor'                   => '$1 малые правки',
+'rcshowhidebots'                    => '$1 ботов',
+'rcshowhideliu'                     => '$1 представившихся участников',
+'rcshowhideanons'                   => '$1 анонимов',
+'rcshowhidepatr'                    => '$1 проверенные правки',
+'rcshowhidemine'                    => '$1 свои правки',
+'rclinks'                           => 'Показать последние $1 изменений за $2 {{plural:$2|день|дня|дней}};<br />$3.',
+'diff'                              => 'разн.',
+'hist'                              => 'история',
+'hide'                              => 'Скрыть',
+'show'                              => 'Показать',
+'minoreditletter'                   => 'м',
+'newpageletter'                     => 'Н',
+'boteditletter'                     => 'б',
+'sectionlink'                       => '→',
+'number_of_watching_users_pageview' => '[$1 наблюдающих пользователя]',
+'rc_categories'                     => 'Только из категорий (разделитель «|»)',
+'rc_categories_any'                 => 'Любой',
+
+# Recent changes linked
+'recentchangeslinked'          => 'Связанные правки',
+'recentchangeslinked-noresult' => 'На связанных страницах не было изменений за указанный период.',
+'recentchangeslinked-summary'  => "На этой служебной странице представлен список последних изменений на связанных страницах. Страницы из списка наблюдения '''выделены'''.",
+
+# Upload
+'upload'                      => 'Загрузить файл',
+'uploadbtn'                   => 'Загрузить файл',
+'reupload'                    => 'Изменить загрузку',
+'reuploaddesc'                => 'Вернуться к форме загрузки.',
+'uploadnologin'               => 'Вы не представились системе',
+'uploadnologintext'           => 'Вы должны [[{{ns:special}}:Userlogin|представиться системе]],
+чтобы загружать файлы на сервер.',
+'upload_directory_read_only'  => 'Веб-сервер не имеет прав записи в папку ($1), в которой предполагается хранить загружаемые файлы.',
+'uploaderror'                 => 'Ошибка загрузки файла',
+'uploadtext'                  => "Используя эту форму вы можете загрузить на сервер файлы. Чтобы просмотреть ранее загруженные файлы,
+перейдите сюда: [[{{ns:special}}:Imagelist|список загруженных изображений]]. Загрузка и удаление файлов отражаются в [[{{ns:special}}:Log|журнале загрузки файлов]].
+
+Для включения изображения в статью вы можете использовать строки вида:
+'''<nowiki>[[</nowiki>{{ns:image}}<nowiki>:File.jpg]]</nowiki>''',
+'''<nowiki>[[</nowiki>{{ns:image}}<nowiki>:File.png|комментарий]]</nowiki>''' или
+'''<nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki>''' для непосредственной ссылки на файл.",
+'uploadlog'                   => 'журнал загрузок',
+'uploadlogpage'               => 'Журнал загрузок',
+'uploadlogpagetext'           => 'Ниже представлен список последних загрузок файлов.
+Везде используется время сервера (по Гринвичу, UTC).
+<ul>
+</ul>',
+'filename'                    => 'Имя файла',
+'filedesc'                    => 'Краткое описание',
+'fileuploadsummary'           => 'Краткое описание:',
+'filestatus'                  => 'Условия распространения',
+'filesource'                  => 'Источник',
+'uploadedfiles'               => 'Загруженные файлы',
+'ignorewarning'               => 'Игнорировать предупреждения и сохранить файл в любом случае.',
+'ignorewarnings'              => 'Игнорировать предупреждения',
+'minlength'                   => 'Название файла должно содержать хотя бы три символа.',
+'illegalfilename'             => 'Имя файла «$1» содержит символы, которые не разрешается использовать в заголовках. Пожалуйста, переименуйте файл и попытайтесь загрузить его снова.',
+'badfilename'                 => 'Название файла было изменено на $1.',
+'filetype-badmime'            => 'Файлы, имеющие MIME-тип "$1" не могут быть загружены.',
+'filetype-badtype'            => "'''«.$1»''' является нежелательным типом файлов
+: Список разрешённых типов файлов: $2",
+'filetype-missing'            => 'Отсутствует расширение у файла (например «.jpg»).',
+'large-file'                  => 'Рекомендуется использовать изображения, размер которых не превышает $1 байт (размер загруженного файла составляет $2 байт).',
+'largefileserver'             => 'Размер файла превышает максимально разрешённый.',
+'emptyfile'                   => 'Загруженный вами файл вероятно пустой. Возможно, это произошло из-за ошибки при наборе имени файла. Пожалуйста, проверьте, действительно ли вы хотите загрузить этот файл.',
+'fileexists'                  => 'Файл с этим именем уже существует, пожалуйста, проверьте <strong><tt>$1</tt></strong>, если вы не уверены, что хотите заменить его.',
+'fileexists-extension'        => 'Существует файл с похожим именем:<br />
+Имя загруженного файла: <strong><tt>$1</tt></strong><br />
+Имя существующего файла: <strong><tt>$2</tt></strong><br />
+Единственное отличие состоит в регистре символов расширения. Пожалуйста, проверьте идентичность файлов.',
+'fileexists-thumb'            => "'''<center>Существующее изображение</center>'''",
+'fileexists-thumbnail-yes'    => 'Файл, вероятно, является уменьшенной копией (миниатюрой). Пожалуйста, проверьте файл <strong><tt>$1</tt></strong>.<br />
+Если указанный файл является тем же изображением, не стоит загружать отдельно его уменьшенную копию.',
+'file-thumbnail-no'           => 'Название файла начинается с <strong><tt>$1</tt></strong>. Вероятно, это уменьшенная копия изображения (миниатюра).
+Если у вас есть данное изображение в полном размере, пожалуйста, загрузите его или измените имя файла.',
+'fileexists-forbidden'        => 'Файл с этим именем уже существует; пожалуйста, вернитесь назад и загрузите файл под другим именем. [[Image:$1|thumb|center|$1]]',
+'fileexists-shared-forbidden' => 'Файл с этим именем уже существует в общем хранилище файлов; пожалуйста, вернитесь назад и загрузите файл под другим именем. [[Image:$1|thumb|center|$1]]',
+'successfulupload'            => 'Загрузка успешно завершена',
+'fileuploaded'                => 'Файл «$1» успешно загружен.
+
+Пожалуйста, проследуйте по следующей ссылке: ($2) к странице с описанием и укажите информацию о файле, а именно: откуда он был получен, когда и кем создан, а также любую другую информацию, известную об этом файле.
+Если это изображение, вы можете вставить его на страницу, написав: <tt><nowiki>[[</nowiki>{{ns:image}}<nowiki>:$1|thumb|Описание]]</nowiki></tt>',
+'uploadwarning'               => 'Предупреждение',
+'savefile'                    => 'Записать файл',
+'uploadedimage'               => 'загружено «[[$1]]»',
+'uploaddisabled'              => 'Загрузка запрещена.',
+'uploaddisabledtext'          => 'На этом вики-сайте загрузка файлов запрещена.',
+'uploadscripted'              => 'Файл содержит HTML-код или скрипт, который может быть ошибочно обработан браузером.',
+'uploadcorrupt'               => 'Файл либо повреждён, либо имеет неверное расширение. Пожалуйста, проверьте файл и попробуйте загрузить его ещё раз.',
+'uploadvirus'                 => 'Файл содержит вирус! См. $1',
+'sourcefilename'              => 'Исходное имя файла',
+'destfilename'                => 'Целевое имя файла',
+'watchthisupload'             => 'Включить этот файл в список наблюдения',
+'filewasdeleted'              => 'Файл с таким именем уже существовал ранее, но был удалён. Пожалуйста, проверьте $1 перед повторной загрузкой.',
+
+'upload-proto-error'      => 'Неправильный протокол',
+'upload-proto-error-text' => 'Для удалённой загрузки требуется адрес, начинающийся с <code>http://</code> или <code>ftp://</code>.',
+'upload-file-error'       => 'Внутренняя ошибка',
+'upload-file-error-text'  => 'Внутренняя ошибка при попытке создать временный файл на сервере. Пожалуйста, обратитесь к системному администратору.',
+'upload-misc-error'       => 'Неизвестная ошибка загрузки',
+'upload-misc-error-text'  => 'Неизвестная ошибка загрузки. Пожалуйста, проверьте, что адрес верен, и повторите попытку. Если проблема остаётся, обратитесь к системному администратору.',
+
+# Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
+'upload-curl-error6'       => 'Невозможно обратить по указанному адресу.',
+'upload-curl-error6-text'  => 'Невозможно обратить по указанному адресу. Пожалуйста, проверьте, что адрес верен, а сайт доступен.',
+'upload-curl-error28'      => 'Время, отведённое на загрузку, истекло',
+'upload-curl-error28-text' => 'Сайт слишком долго не отвечает. Пожалуйста, проверьте что сайт работоспособен и после небольшого перерыва попробуйте ещё раз. Возможно, операцию следует провести в другое время, когда сайт менее нагружен.',
+
+'license'            => 'Лицензирование',
+'nolicense'          => 'Отсутствует',
+'upload_source_url'  => ' (правильный, публично доступный интернет-адрес)',
+'upload_source_file' => ' (файл на вашем компьютере)',
+
+# Image list
+'imagelist'                 => 'Список файлов',
+'imagelisttext'             => "Ниже представлен список из '''$1''' {{plural:$1|файла|файлов|файлов}}, отсортированных $2.",
+'imagelistforuser'          => 'Только изображения, загруженные участником $1.',
+'getimagelist'              => 'получение списка файлов',
+'ilsubmit'                  => 'Искать',
+'showlast'                  => 'Показать последние $1 {{plural:$1|файл|файла|файлов}}, {{plural:$1|отсортированный|отсортированные|отсортированных}} $2.',
+'byname'                    => 'по имени',
+'bydate'                    => 'по дате',
+'bysize'                    => 'по размеру',
+'imgdelete'                 => 'удал.',
+'imgdesc'                   => 'описание',
+'imgfile'                   => 'файл',
+'imglegend'                 => 'Пояснения: (описание) — показать/изменить описание файла.',
+'imghistory'                => 'Журнал',
+'revertimg'                 => 'откат.',
+'deleteimg'                 => 'удал.',
+'deleteimgcompletely'       => 'Удалить все версии',
+'imghistlegend'             => 'Пояснения: (текущ.) — текущее изображение; (удал.) — удалить эту старую версию; (откат.) — откатиться на эту старую версию.
+<br /><i>Выберите дату, чтобы посмотреть список изображений, загруженных на эту дату.</i>.',
+'imagelinks'                => 'Ссылки',
+'linkstoimage'              => 'Следующие страницы ссылаются на данный файл:',
+'nolinkstoimage'            => 'Нет страниц, ссылающихся на данный файл.',
+'sharedupload'              => 'Этот файл загружен в общее для нескольких проектов хранилище.',
+'shareduploadwiki'          => 'Дополнительную информацию можно найти на $1.',
+'shareduploadwiki-linktext' => 'странице описания файла',
+'noimage'                   => 'Файла с таким именем не существует, вы можете $1.',
+'noimage-linktext'          => 'загрузить его',
+'uploadnewversion-linktext' => 'Загрузить новую версию этого файла',
+'imagelist_date'            => 'Дата',
+'imagelist_name'            => 'Имя файла',
+'imagelist_user'            => 'Участник',
+'imagelist_size'            => 'Размер (байт)',
+'imagelist_description'     => 'Описание',
+'imagelist_search_for'      => 'Поиск по имени изображения:',
+
+# MIME search
+'mimesearch'         => 'Поиск по MIME',
+'mimesearch-summary' => 'Эта страница позволяет отбирать файлы по их MIME-типу. Формат ввода: типсодержимого/подтип, например <tt>image/jpeg</tt>.',
+'mimetype'           => 'MIME-тип:',
+'download'           => 'загрузить',
+
+# Unwatched pages
+'unwatchedpages' => 'Страницы, за которыми никто не следит',
+
+# List redirects
+'listredirects' => 'Список перенаправлений',
+
+# Unused templates
+'unusedtemplates'     => 'Неиспользуемые шаблоны',
+'unusedtemplatestext' => 'На этой странице перечислены все страницы пространства имён «Шаблоны», которые не включены в другие страницы. Не забывайте проверить отсутствие других ссылок на шаблон, перед его удалением.',
+'unusedtemplateswlh'  => 'другие ссылки',
+
+# Random redirect
+'randomredirect' => 'Случайное перенаправление',
+'randomredirect-nopages' => 'В данном пространстве имён нет пренаправлений.',
+
+# Statistics
+'statistics'             => 'Статистика',
+'sitestats'              => 'Статистика сайта',
+'userstats'              => 'Статистика участников',
+'sitestatstext'          => "Всего в базе данных содержится '''$1''' {{plural:$1|страница|страницы|страниц}}.
+Это число включает в себя страницы о проекте, страницы обсуждений, незаконченные статьи, перенаправления и другие страницы, которые, не учитываются при подсчёте количества статей.
+За исключением них, есть '''$2''' {{plural:$2|страница|страницы|страниц}}, которые считаются полноценными статьями. 
+
+{{plural:$8|Был загружен|Было загружено|Было загружено}} '''$8''' {{plural:$8|файл|файла|файлов}}.
+
+Всего с момента установки вики {{plural:$3|был произведён '''$3''' просмотр|было произведено '''$3''' просмотра|было произведено '''$3''' просмотров}} страниц и '''$4''' {{plural:$4|изменение|изменения|изменений}} страниц. Таким образом, в среднем приходится '''$5''' {{plural:$5|изменение|изменения|изменений}} на одну страницу, и '''$6''' просмотров на одно изменение.
+
+Величина [http://meta.wikimedia.org/wiki/Help:Job_queue очереди заданий] составляет '''$7'''.",
+'userstatstext'          => "{{plural:$1|Зарегистрировался|Зарегистрировались|Зарегистрировались}} '''$1''' {{plural:$1|участник|участника|участников}}, из которых '''$2''' ($4 %) имеют права «$5».",
+'statistics-mostpopular' => 'Наиболее часто просматриваемые страницы',
+
+'disambiguations'      => 'Страницы, описывающие многозначные термины',
+'disambiguationspage'  => '{{ns:template}}:Неоднозначность',
+'disambiguations-text' => "Следующие статьи ссылаются на '''многозначные страницы'''. Вместо этого они, вероятно, должны указывать на соответствующую конкретную статью.<br />Страница считается многозначной, если на ней размещён шаблон, имя которого указано на странице [[MediaWiki:disambiguationspage]].",
+
+'doubleredirects'     => 'Двойные перенаправления',
+'doubleredirectstext' => 'Каждая строка содержит ссылки на первое и второе перенаправления, а также первую строчку страницы второго перенаправления, в которой обычно указывается название страницы, куда должно осуществляться перенаправление. Нужно, чтобы и первое перенаправление ссылалось на эту страницу.',
+
+'brokenredirects'        => 'Разорванные перенаправления',
+'brokenredirectstext'    => 'Следующие перенаправления указывают на несуществующие статьи:',
+'brokenredirects-edit'   => '(править)',
+'brokenredirects-delete' => '(удалить)',
+
+'withoutinterwiki'        => 'Страницы без межъязыковых ссылок',
+'withoutinterwiki-header' => 'Следующие страницы не имеют интервики-ссылок:',
+
+'fewestrevisions' => 'Статьи с наименьшим количеством изменений',
+
+# Miscellaneous special pages
+'nbytes'                  => '$1 {{PLURAL:$1|байт|байта|байтов}}',
+'ncategories'             => '$1 {{PLURAL:$1|категория|категории|категорий}}',
+'nlinks'                  => '$1 {{PLURAL:$1|ссылка|ссылки|ссылок}}',
+'nmembers'                => '$1 {{PLURAL:$1|объект|объекта|объектов}}',
+'nrevisions'              => '$1 {{PLURAL:$1|версия|версии|версий}}',
+'nviews'                  => '$1 {{PLURAL:$1|просмотр|просмотра|просмотров}}',
+'specialpage-empty'       => 'Эта страница пуста.',
+'lonelypages'             => 'Страницы-сироты',
+'lonelypagestext'         => 'На следующие страницы нет ссылок с других страниц данной вики.',
+'uncategorizedpages'      => 'Некатегоризованные страницы',
+'uncategorizedcategories' => 'Некатегоризованные категории',
+'uncategorizedimages'     => 'Некатегоризованные изображения',
+'unusedcategories'        => 'Неиспользуемые категории',
+'unusedimages'            => 'Неиспользуемые файлы',
+'popularpages'            => 'Популярные страницы',
+'wantedcategories'        => 'Требуемые категории',
+'wantedpages'             => 'Требуемые страницы',
+'mostlinked'              => 'Страницы, на которые больше всего ссылок',
+'mostlinkedcategories'    => 'Категории, на которые больше всего ссылок',
+'mostcategories'          => 'Страницы, включённые в большое количество категорий',
+'mostimages'              => 'Самые используемые изображения',
+'mostrevisions'           => 'Наиболее часто редактировавшиеся страницы',
+'allpages'                => 'Все страницы',
+'prefixindex'             => 'Указатель по началу слов',
+'randompage'              => 'Случайная статья',
+'randompage-nopages'      => 'В данном пространстве имён отсутствуют страницы.',
+'shortpages'              => 'Короткие статьи',
+'longpages'               => 'Длинные страницы',
+'deadendpages'            => 'Тупиковые страницы',
+'deadendpagestext'        => 'Следующие страницы не содержат ссылок на другие страницы в этой вики.',
+'protectedpages'          => 'Защищённые страницы',
+'protectedpagestext'      => 'Следующие страницы защищены от переименования или изменения.',
+'protectedpagesempty'     => 'В настоящий момент нет защищённых страниц указнными параметрами',
+'listusers'               => 'Список участников',
+'specialpages'            => 'Спецстраницы',
+'spheading'               => 'Служебные страницы',
+'restrictedpheading'      => 'Служебные страницы с ограниченным доступом',
+'rclsub'                  => '(на страницах, ссылки на которые есть на странице «$1»)',
+'newpages'                => 'Новые статьи',
+'newpages-username'       => 'Участник:',
+'ancientpages'            => 'Статьи по дате последнего редактирования',
+'intl'                    => 'Межъязыковые ссылки',
+'move'                    => 'Переименовать',
+'movethispage'            => 'Переименовать эту страницу',
+'unusedimagestext'        => 'Пожалуйста, учтите, что другие веб-сайты могут использовать прямую ссылку (URL) на это изображение, и поэтому изображение может активно использоваться несмотря на его вхождение в этот список.',
+'unusedcategoriestext'    => 'Существуют следующие страницы категорий, не содержащие статей или других категорий.',
+
+# Book sources
+'booksources'               => 'Источники книг',
+'booksources-search-legend' => 'Поиск информации о книге',
+'booksources-isbn'          => 'ISBN:',
+'booksources-go'            => 'Найти',
+'booksources-text'          => 'На этой странице приведён список ссылок на сайты, где вы, возможно, найдёте дополнительную информацию о книге. Это интернет-магазины и системы поиска в библиотечных каталогах.',
+
+'categoriespagetext' => 'В вики имеются следующие категории.',
+'data'               => 'Данные',
+'userrights'         => 'Управление правами участников',
+'groups'             => 'Группы участников',
+'isbn'               => 'ISBN',
+'alphaindexline'     => 'от $1 до $2',
+'version'            => 'Версия MediaWiki',
+
+# Special:Log
+'specialloguserlabel'  => 'Участник:',
+'speciallogtitlelabel' => 'Заголовок:',
+'log'                  => 'Журналы',
+'log-search-legend'    => 'Поиск журналов',
+'log-search-submit'    => 'Найти',
+'alllogstext'          => 'Общий список журналов сайта {{SITENAME}}.
+Вы можете отфильтровать результаты по типу журнала, имени пользователя или затронутой странице.',
+'logempty'             => 'Совпадающие элементы в журнале отсутствуют.',
+'log-title-wildcard'   => 'Найти заголовки, начинающиеся на с данных символов',
+
+# Special:Allpages
+'nextpage'          => 'Следующая страница ($1)',
+'prevpage'          => 'Предыдущая страница ($1)',
+'allpagesfrom'      => 'Вывести страницы, начинающиеся на:',
+'allarticles'       => 'Все статьи',
+'allinnamespace'    => 'Все страницы (пространство имён «$1»)',
+'allnotinnamespace' => 'Все страницы (кроме пространства имён «$1»)',
+'allpagesprev'      => 'Предыдущие',
+'allpagesnext'      => 'Следующие',
+'allpagessubmit'    => 'Выполнить',
+'allpagesprefix'    => 'Найти страницы, начинающиеся с:',
+'allpagesbadtitle'  => 'Заголовок данной страницы не является допустимым, содержит интервики, межъязыковой префикс или запрещённые в заголовках символы.',
+
+# Special:Listusers
+'listusersfrom'      => 'Показать участников, начиная с:',
+'listusers-submit'   => 'Показать',
+'listusers-noresult' => 'Не найдено участников.',
+
+# E-mail user
+'mailnologin'     => 'Адрес для отправки отсутствует',
+'mailnologintext' => 'Вы должны [[{{ns:special}}:Userlogin|представиться системе]]
+и иметь действительный адрес электронной почты в ваших [[{{ns:special}}:Preferences|настройках]],
+чтобы иметь возможность отправлять электронную почту другим участникам.',
+'emailuser'       => 'Письмо участнику',
+'emailpage'       => 'Отправить электронное письмо участнику',
+'emailpagetext'   => 'Если этот участник указал действительный адрес электронной почты в своих настройках, то, заполнив форму ниже, можно отправить ему сообщение.
+Электронный адрес, который вы указали в своих настройках, будет указан в поле «От кого» письма, поэтому получатель будет иметь возможность ответить.',
+'usermailererror' => 'При отправке сообщения электронной почты произошла ошибка:',
+'defemailsubject' => '{{SITENAME}} e-mail',
+'noemailtitle'    => 'Адрес электронной почты отсутствует',
+'noemailtext'     => 'Этот участник не указал действительный адрес электронной почты или указал, что не желает получать письма от других участников.',
+'emailfrom'       => 'От кого',
+'emailto'         => 'Кому',
+'emailsubject'    => 'Тема письма',
+'emailmessage'    => 'Сообщение',
+'emailsend'       => 'Отправить',
+'emailccme'       => 'Отправить мне копию письма.',
+'emailccsubject'  => 'Копия вашего сообщения для $1: $2',
+'emailsent'       => 'Письмо отправлено',
+'emailsenttext'   => 'Ваше электронное сообщение отправлено.',
+
+# Watchlist
+'watchlist'            => 'Список наблюдения',
+'mywatchlist'          => 'Мой список наблюдения',
+'watchlistfor'         => "(участника '''$1''')",
+'nowatchlist'          => 'Ваш список наблюдения пуст.',
+'watchlistanontext'    => 'Вы должны $1, чтобы просмотреть или отредактировать список наблюдения.',
+'watchlistcount'       => "'''В вашем списке наблюдения $1 {{plural:$1|страница|страницы|страниц}}, включая страницы обсуждения.'''",
+'clearwatchlist'       => 'Очистить список наблюдения',
+'watchlistcleartext'   => 'Вы уверены, что хотите удалить их?',
+'watchlistclearbutton' => 'Очистить список наблюдения',
+'watchlistcleardone'   => 'Ваш список наблюдения очищен. $1 {{plural:$1|страница удалена|страницы удалены|страниц удалено}} из списка.',
+'watchnologin'         => 'Нужно представиться системе',
+'watchnologintext'     => 'Вы должны [[{{ns:special}}:Userlogin|представиться системе]], чтобы иметь возможность изменять свой список наблюдения',
+'addedwatch'           => 'Добавлена в список наблюдения',
+'addedwatchtext'       => 'Страница «[[:$1]]» была добавлена в ваш [[{{ns:special}}:Watchlist|список наблюдения]]. Последующие изменения этой страницы и связанной с ней страницы обсуждения будут отмечаться в этом списке, а также будут выделены жирным шрифтом на странице со [[{{ns:special}}:Recentchanges|списком свежих изменений]], чтобы их было легче заметить.
+
+Если позже вы захотите удалить страницу из списка наблюдения, нажмите кнопку «не следить» в верхней правой части страницы.',
+'removedwatch'         => 'Удалена из списка наблюдения',
+'removedwatchtext'     => 'Страница «[[:$1]]» была удалена из вашего списка наблюдения.',
+'watch'                => 'Следить',
+'watchthispage'        => 'Наблюдать за этой страницей',
+'unwatch'              => 'Не следить',
+'unwatchthispage'      => 'Прекратить наблюдение',
+'notanarticle'         => 'Не статья',
+'watchnochange'        => 'Ничто из списка наблюдения не изменялось в рассматриваемый период.',
+'watchdetails'         => '* В вашем списке наблюдения находится $1 {{plural:$1|страница|страницы|страниц}} (не считая страниц обсуждения)
+* [[{{ns:special}}:Watchlist/edit|Показать и отредактировать полный список]]
+* [[{{ns:special}}:Watchlist/clear|Удалить все страницы из списка]]',
+'wlheader-enotif'      => '* Уведомление по эл. почте включено.',
+'wlheader-showupdated' => "* Страницы, изменившиеся с вашего последнего их посещения, выделены '''жирным''' шрифтом.",
+'watchmethod-recent'   => 'просмотр последних изменений для наблюдаемых страниц',
+'watchmethod-list'     => 'просмотр наблюдаемых страниц для последних изменений',
+'removechecked'        => 'Удалить выбранные элементы из списка наблюдения',
+'watchlistcontains'    => 'Ваш список наблюдения содержит $1 {{plural:$1|страница|страницы|страниц}}.',
+'watcheditlist'        => "Ниже представлен упорядоченный по алфавиту список наблюдаемых вами страниц. Отметьте страницы, которые вы хотите удалить из вашего списка наблюдения, и нажмите на кнопку ''«Удалить выбранные элементы из списка наблюдения»'' внизу страницы.",
+'removingchecked'      => 'Удаление выбранных элементов из списка наблюдения…',
+'couldntremove'        => 'Невозможно удалить элемент «$1»…',
+'iteminvalidname'      => 'Проблема с элементом «$1», недопустимое название…',
+'wlnote'               => 'Ниже следуют последние $1 {{plural:$1|изменение|изменения|изменений}} за {{plural:$2|последний|последние|последние}} <strong>$2</strong> {{plural:$2|час|часа|часов}}.',
+'wlshowlast'           => 'Показать за последние $1 часов $2 дней $3',
+'wlsaved'              => 'Это сохранённая версия вашего списка наблюдения',
+'watchlist-show-bots'  => 'Показать правки ботов',
+'watchlist-hide-bots'  => 'Скрыть правки ботов',
+'watchlist-show-own'   => 'Показать мои правки',
+'watchlist-hide-own'   => 'Скрыть мои правки',
+'watchlist-show-minor' => 'Показать малые правки',
+'watchlist-hide-minor' => 'Скрыть малые правки',
+'wldone'               => 'Сделано.',
+
+# Displayed when you click the "watch" button and it's in the process of watching
+'watching'   => 'Добавление в список наблюдения…',
+'unwatching' => 'Удаление из списка наблюдения…',
+
+'enotif_mailer'      => '{{SITENAME}} Служба извещений по почте',
+'enotif_reset'       => 'Отметить все страницы как просмотренные',
+'enotif_newpagetext' => 'Это новая страница.',
+'changed'            => 'изменена',
+'created'            => 'создана',
+'enotif_subject'     => 'Страница проекта «{{SITENAME}}» $PAGETITLE была $CHANGEDORCREATED участником $PAGEEDITOR',
+'enotif_lastvisited' => 'См. $1 для просмотра всех изменений произошедших с вашего последнего посещения.',
+'enotif_body'        => '$WATCHINGUSERNAME,
+
+$PAGEEDITDATE страница проекта «{{SITENAME}}» $PAGETITLE была $CHANGEDORCREATED пользователем $PAGEEDITOR, см. $PAGETITLE_URL для просмотра текущей версии.
+
+$NEWPAGE
+
+Краткое описание изменения: $PAGESUMMARY $PAGEMINOREDIT
+
+Обратиться к изменившему:
+эл. почта $PAGEEDITOR_EMAIL
+вики $PAGEEDITOR_WIKI
+
+Не будет никаких других уведомлений в случае дальнейших изменений, если Вы не посещаете эту страницу. Вы могли также повторно установить флаги уведомления для всех ваших наблюдаемых страниц в вашем списке наблюдения.
+
+             Система оповещения {{grammar:genitive|{{SITENAME}}}}
+
+--
+Чтобы изменить настройки вашего списка наблюдения обратитесь к
+{{fullurl:{{ns:special}}:Watchlist/edit}}
+
+Обратная связь и помощь:
+{{fullurl:{{MediaWiki:helppage}}}}',
+
+# Delete/protect/revert
+'deletepage'                  => 'Удалить страницу',
+'confirm'                     => 'Подтверждение',
+'excontent'                   => 'содержимое: «$1»',
+'excontentauthor'             => 'содержимое: «$1» (единственным автором был [[{{ns:special}}:Contributions/$2|$2]])',
+'exbeforeblank'               => 'содержимое до очистки: «$1»',
+'exblank'                     => 'страница была пуста',
+'confirmdelete'               => 'Подтвердить удаление',
+'deletesub'                   => '(«$1» удаляется)',
+'historywarning'              => 'Предупреждение: у страницы, которую вы собираетесь удалить, есть история изменений:',
+'confirmdeletetext'           => 'Вы запросили полное удаление страницы (изображения) и всей её истории изменений из базы данных.
+Пожалуйста, подтвердите, что вы действительно желаете это сделать, понимаете последствия своих действий,
+и делаете это в соответствии с правилами, изложенными в разделе [[{{MediaWiki:policy-url}}]].',
+'actioncomplete'              => 'Действие выполнено',
+'deletedtext'                 => '«$1» была удалена.
+См. $2 для просмотра списка последних удалений.',
+'deletedarticle'              => 'удалена «[[$1]]»',
+'dellogpage'                  => 'Список удалений',
+'dellogpagetext'              => 'Ниже приведён список последних удалений.',
+'deletionlog'                 => 'список удалений',
+'reverted'                    => 'Откачено к ранней версии',
+'deletecomment'               => 'Причина удаления',
+'imagereverted'               => 'Откат к ранней версии осуществлён.',
+'rollback'                    => 'Откатить изменения',
+'rollback_short'              => 'Откат',
+'rollbacklink'                => 'откатить',
+'rollbackfailed'              => 'Ошибка при совершении отката',
+'cantrollback'                => 'Невозможно откатить изменения; последний, кто вносил изменения, является единственным автором этой статьи.',
+'alreadyrolled'               => 'Невозможно откатить последние изменения [[:$1]],
+сделанные [[{{ns:user}}:$2|$2]] ([[{{ns:user_talk}}:$2|Обсуждение]]); кто-то другой уже отредактировал или откатил эту страницу.
+
+Последние изменения внёс [[{{ns:user}}:$3|$3]] ([[{{ns:user_talk}}:$3|Обсуждение]]).',
+'editcomment'                 => 'Изменение было пояснено так: <em>«$1»</em>.', # only shown if there is an edit comment
+'revertpage'                  => 'Правки [[{{ns:special}}:Contributions/$2|$2]] ([[User_talk:$2|обсуждение]]) откачены к версии [[{{ns:user}}:$1|$1]]',
+'sessionfailure'              => 'Похоже, возникли проблемы с текущим сеансом работы;
+это действие было отменено в целях предотвращения «захвата сеанса».
+Пожалуйста, нажмите кнопку «Назад» и перезагрузите страницу, с которой вы пришли.',
+'protectlogpage'              => 'Журнал защиты',
+'protectlogtext'              => 'Ниже приведён журнал установок и снятий защиты со статей. Вы можете также просмотреть [[{{ns:special}}:Protectedpages|список страниц, которые в данный момент защищены]].',
+'protectedarticle'            => 'защищена страница «[[$1]]»',
+'unprotectedarticle'          => 'снята защита со страницы «[[$1]]»',
+'protectsub'                  => '(Установка защиты для «$1»)',
+'confirmprotecttext'          => 'Вы действительно хотите установить защиту этой страницы?',
+'confirmprotect'              => 'Подтвердите установку защиты страницы',
+'protectmoveonly'             => 'Защитить только от переименования',
+'protectcomment'              => 'Причина установки защиты:',
+'protectexpiry'               => 'Истекает:',
+'protect_expiry_invalid'      => 'Неправильное время окончания защиты.',
+'protect_expiry_old'          => 'Время окончания — в прошлом.',
+'unprotectsub'                => '(Снятие защиты «$1»)',
+'confirmunprotecttext'        => 'Вы действительно хотите снять защиту этой страницы?',
+'confirmunprotect'            => 'Подтвердите снятие защиты страницы',
+'unprotectcomment'            => 'Причина снятия защиты',
+'protect-unchain'             => 'Разблокировать переименование страницы',
+'protect-text'                => 'Здесь вы можете просмотреть и изменить уровень защиты для страницы <strong>[[:$1]]</strong>.',
+'protect-locked-blocked' => 'Вы не можете изменять уровень защиты страницы пока ваша учётная запись заблокирована. Текущие установки для страницы <strong>[[:$1]]</strong>:',
+'protect-locked-dblock' => 'Уровень защиты не может быть изменён, так как основная база данных временно заблокирована. Текущие установки для страницы <strong>[[:$1]]</strong>:',
+'protect-locked-access' => 'У ваше учётной записи недостаточно прав для изменения уровня защиты страницы. Текущие установки для страницы <strong>[[:$1]]</strong>:',
+'protect-cascadeon'           => 'Эта страница защищена в связи с тем, что она включена в нижеследующие страницы, на которые установлена каскадная защита. Вы можете изменить уровень защиты этой страницы, но это не повлияет на каскадную защиту.',
+'protect-default'             => '(по умолчанию)',
+'protect-level-autoconfirmed' => 'Защитить от незарегистрированных и новых участников',
+'protect-level-sysop'         => 'Только администраторы',
+'protect-summary-cascade'     => 'каскадная',
+'protect-expiring'            => 'истекает $1 (UTC)',
+'protect-cascade'             => 'Каскадная защита — защищать все страницы, включённые в эту страницу.',
+'restriction-type'            => 'Права',
+'restriction-level'           => 'Уровень доступа',
+'minimum-size'                => 'Минимальный размер (байт)',
+
+# Restrictions (nouns)
+'restriction-edit' => 'Правка',
+'restriction-move' => 'Переименование',
+
+# Restriction levels
+'restriction-level-sysop'         => 'полная защита',
+'restriction-level-autoconfirmed' => 'частичная защита',
+'restriction-level-all'           => 'все уровни',
+
+# Undelete
+'undelete'                 => 'Просмотреть удалённые страницы',
+'undeletepage'             => 'Просмотр и восстановление удалённых страниц',
+'viewdeletedpage'          => 'Просмотреть удалённые страницы',
+'undeletepagetext'         => 'Следующие страницы были удалены, однако они всё ещё находятся в архиве, и поэтому могут быть восстановлены. Архив периодически очищается.',
+'undeleteextrahelp'        => "Для полного восстановления страницы оставьте все отметки пустыми и нажмите '''«Восстановить»'''. Для частичного восстановления отметьте те версии страницы, которые нужно восстановить, и нажмите '''«Восстановить»'''. Нажмите '''«Очистить»''', чтобы снять все отметки и очистить поле примечания.",
+'undeleterevisions'        => 'В архиве $1 {{plural:$1|версия|версии|версий}}',
+'undeletehistory'          => 'Если вы восстановите страницу, все её версии будут также восстановлены вместе с журналом изменений.
+Если с момента удаления была создана новая страница с таким же названием, восстановленные версии будут указаны в журнале изменений перед новыми записями, и текущая версия существующей страницы автоматически заменена не будет.
+Обратите также внимание, что ограничения на версии файла теряются при восстановлении.',
+'undeleterevdel'           => 'Восстановление не будет произведено, если оно произведёт к частичному удалению последней версии. В подобном случает вам следует не отмечать или раскрыть последние удалённые версии. Версии файлов, на просмотр которых у вас нет прав, не будут восстановлены.',
+'undeletehistorynoadmin'   => 'Статья была удалена. Причина удаления и список участников, редактировавших статью до её удаления, показаны ниже. Текст удалённой статьи могут просмотреть только администраторы.',
+'undelete-revision'        => 'Удалённая версия $1 от $2:',
+'undeleterevision-missing' => 'Неверная или отсутствующая версия. Возможно, вы перешли по неправильной ссылке, либо версия могла быть удалена из архива.',
+'undeletebtn'              => 'Восстановить',
+'undeletereset'            => 'Очистить',
+'undeletecomment'          => 'Комментарий:',
+'undeletedarticle'         => '«[[$1]]» восстановлена',
+'undeletedrevisions'       => '$1 {{plural:$1|изменение|изменения|изменений}} восстановлено',
+'undeletedrevisions-files' => '$1 {{plural:$1|версия|версии|версий}} и $2 {{plural:$2|файл|файла|файлов}} восстановлено',
+'undeletedfiles'           => '$1 {{plural:$1|файл восстановлен|файла восстановлено|файлов восстановлено}}',
+'cannotundelete'           => 'Ошибка восстановления. Возможно, кто-то другой уже восстановил страницу.',
+'undeletedpage'            => "<big>'''Страница «$1» была восстановлена.'''</big>
+	 
+Для просмотра списка последних удалений и восстановлений см. [[{{ns:special}}:Log/delete|журнал удалений]].",
+'undelete-header'          => 'Список недавно удалённых страниц можно посмотреть в [[{{ns:special}}:Log/delete|журнале удалений]].',
+'undelete-search-box'      => 'Поиск удалённых страниц',
+'undelete-search-prefix'   => 'Показать страницы, начинающиеся с:',
+'undelete-search-submit'   => 'Искать',
+'undelete-no-results'      => 'No matching pages found in the deletion archive.',
+
+# Namespace form on various pages
+'namespace' => 'Пространство имён:',
+'invert'    => 'Обратить выделенное',
+
+# Contributions
+'contributions' => 'Вклад участника',
+'mycontris'     => 'Мой вклад',
+'contribsub2'    => 'Вклад $1 ($2)',
+'nocontribs'    => 'Изменений, соответствующих заданным условиям, найдено не было.',
+'ucnote'        => 'Ниже приводятся последние <strong>$1</strong> изменений, сделанных этим участником за последние <strong>$2</strong> дня(ей).',
+'uclinks'       => 'Просмотреть $1 {{plural:$1|последнее изменение|последних изменения|последних изменений}}; просмотреть за {{plural:$2|последний|последние|последние}} $2 {{plural:$2|день|дня|дней}}.',
+'uctop'         => ' (последняя)',
+
+'sp-contributions-newest'      => 'Новейшие',
+'sp-contributions-oldest'      => 'Старейшие',
+'sp-contributions-newer'       => 'Более новые $1',
+'sp-contributions-older'       => 'Более старые $1',
+'sp-contributions-newbies'     => 'Показать только вклад, сделанный с новых учётных записей',
+'sp-contributions-newbies-sub' => 'С новых учётных записей',
+'sp-contributions-blocklog'    => 'Журнал блокировок',
+'sp-contributions-search'      => 'Поиск вклада',
+'sp-contributions-username'    => 'IP-адрес или имя участника:',
+'sp-contributions-submit'      => 'Найти',
+
+'sp-newimages-showfrom' => 'Показать новые изображения, начиная с $1',
+
+# What links here
+'whatlinkshere'      => 'Ссылки сюда',
+'notargettitle'      => 'Не указана цель',
+'notargettext'       => 'Вы не указали целевую страницу или участника для этого действия.',
+'linklistsub'        => '(Список ссылок)',
+'linkshere'          => "Следующие страницы ссылаются на '''[[:$1]]''':",
+'nolinkshere'        => "На страницу '''[[:$1]]''' отсутствуют ссылки с других страниц.",
+'nolinkshere-ns'     => "В выбранном пространстве имён нет страниц ссылающихся на '''[[:$1]]'''.",
+'isredirect'         => 'страница-перенаправление',
+'istemplate'         => 'включение',
+'whatlinkshere-prev' => '{{PLURAL:$1|предыдущая|предыдущие|предыдущие}} $1',
+'whatlinkshere-next' => '{{PLURAL:$1|следующая|следующие|следующие}} $1',
+
+# Block/unblock
+'blockip'                     => 'Заблокировать участника',
+'blockiptext'                 => 'Используйте форму ниже, чтобы заблокировать возможность записи с определённого IP-адреса.
+Это может быть сделано только для предотвращения вандализма и только в соответствии с
+правилами изложенными в разделе [[{{MediaWiki:policy-url}}]].
+Ниже укажите конкретную причину (к примеру, процитируйте некоторые страницы с признаками вандализма).',
+'ipaddress'                   => 'IP-адрес',
+'ipadressorusername'          => 'IP-адрес или имя участника',
+'ipbexpiry'                   => 'Закончится через',
+'ipbreason'                   => 'Причина',
+'ipbanononly'                 => 'Блокировать только анонимных участников',
+'ipbcreateaccount'            => 'Запретить создание новых учётных записей',
+'ipbenableautoblock'          => 'Автоматически блокировать использованные участником IP-адреса',
+'ipbsubmit'                   => 'Заблокировать этот адрес/участника',
+'ipbother'                    => 'Другое время',
+'ipboptions'                  => '15 минут:15 minutes,2 часа:2 hours,6 часов:6 hours,12 часов:12 hours,1 день:1 day,3 дня:3 days,1 неделю:1 week,2 недели:2 weeks,1 месяц:1 month,3 месяца:3 months,6 месяцев:6 months,1 год:1 year,не определено:infinite',
+'ipbotheroption'              => 'иное',
+'ipbhidename'                 => 'Скрыть имя участника или IP-адрес из журнала блокировок, списка заблокированных и общего списка участников.',
+'badipaddress'                => 'IP-адрес записан в неправильном формате, или участника с таким именем не существует.',
+'blockipsuccesssub'           => 'Блокировка произведена',
+'blockipsuccesstext'          => '[[{{ns:Special}}:Contributions/$1|«$1»]] заблокирован.
+<br />См. [[{{ns:special}}:Ipblocklist|список заблокированных IP-адресов]].',
+'ipb-unblock-addr'            => 'Разблокировать $1',
+'ipb-unblock'                 => 'Разблокировать участника или IP-адрес',
+'ipb-blocklist-addr'          => 'Показать действующие блокировки для $1',
+'ipb-blocklist'               => 'Показать действующие блокировки',
+'unblockip'                   => 'Разблокировать IP-адрес',
+'unblockiptext'               => 'Используйте форму ниже, чтобы восстановить возможность записи с ранее заблокированного
+IP-адреса.',
+'ipusubmit'                   => 'Разблокировать этот адрес',
+'unblocked'                   => '[[{{ns:user}}:$1|$1]] разблокирован.',
+'ipblocklist'                 => 'Список заблокированных IP-адресов и пользователей',
+'ipblocklist-submit'          => 'Найти',
+'blocklistline'               => '$1, $2 заблокировал $3 ($4)',
+'infiniteblock'               => 'бессрочная блокировка',
+'expiringblock'               => 'блокировка завершится $1',
+'anononlyblock'               => 'только анонимов',
+'noautoblockblock'            => 'автоблокировка отключена',
+'createaccountblock'          => 'создание учётных записей заблокировано',
+'ipblocklistempty'            => 'Список блокировок пуст, или заданный IP-адрес/имя участника не заблокированы.',
+'blocklink'                   => 'заблокировать',
+'unblocklink'                 => 'разблокировать',
+'contribslink'                => 'вклад',
+'autoblocker'                 => 'Вы автоматически заблокированы из-за совпадения вашего IP-адреса с «$1». Причина его блокировки — «$2».',
+'blocklogpage'                => 'Журнал блокировок',
+'blocklogentry'               => 'заблокировал [[$1]] на период $2 $3',
+'blocklogtext'                => 'Журнал блокирования и разблокирования участников. Автоматически блокируемые IP-адреса здесь не указываются. См. [[{{ns:special}}:Ipblocklist|Список текущих запретов и блокировок]].',
+'unblocklogentry'             => 'разблокировал $1',
+'block-log-flags-anononly'    => 'только анонимные пользователи',
+'block-log-flags-nocreate'    => 'запрещена регистрация учётных записей',
+'block-log-flags-autoblock'   => 'автоблокировка запрещена',
+'range_block_disabled'        => 'Администраторам запрещено блокировать диапазоны.',
+'ipb_expiry_invalid'          => 'Недопустимый период действия.',
+'ipb_already_blocked'         => '«$1» уже заблокирован.',
+'ip_range_invalid'            => 'Недопустимый диапазон IP-адресов.\n',
+'proxyblocker'                => 'Блокировка прокси',
+'ipb_cant_unblock'            => 'Ошибка. Блокировка с идентификатором «$1» не найдена. Возможно, участника уже разблокировали.',
+'proxyblockreason'            => 'Ваш IP-адрес заблокирован потому что это открытый прокси. Пожалуйста, свяжитесь с вашим интернет-провайдером  или службой поддержки и сообщите им об этой серьёзной проблеме безопасности.',
+'proxyblocksuccess'           => 'Выполнено.',
+'sorbs'                       => 'DNSBL',
+'sorbsreason'                 => 'Ваш IP-адрес числится как открытый прокси в DNSBL.',
+'sorbs_create_account_reason' => 'Ваш IP-адрес числится как открытый прокси в DNSBL. Вы не можете создать учётную запись.',
+
+# Developer tools
+'lockdb'              => 'Сделать базу данных доступной только для чтения',
+'unlockdb'            => 'Восстановить возможность записи в базу данных',
+'lockdbtext'          => 'Блокировка базы данных приостановит для всех участников возможность редактировать страницы, изменять настройки,
+изменять списки наблюдения и производить другие действия, требующие доступа к базе данных.
+Пожалуйста, подтвердите, что это — именно то, что вы хотите сделать, и что вы снимете блокировку как только закончите
+процедуру обслуживания базы данных.',
+'unlockdbtext'        => 'Разблокирование базы данных восстановит для всех участников
+возможность редактировать страницы, изменять настройки, изменять списки наблюдения и производить
+другие действия, требующие доступа к базе данных.
+Пожалуйста, подтвердите, что вы намерены это сделать.',
+'lockconfirm'         => 'Да, я действительно хочу заблокировать базу данных на запись.',
+'unlockconfirm'       => 'Да, я действительно хочу снять блокировку базы данных.',
+'lockbtn'             => 'Сделать базу данных доступной только для чтения',
+'unlockbtn'           => 'Восстановить возможность записи в базу данных',
+'locknoconfirm'       => 'Вы не поставили галочку в поле подтверждения.',
+'lockdbsuccesssub'    => 'База данных заблокирована',
+'unlockdbsuccesssub'  => 'База данных разблокирована',
+'lockdbsuccesstext'   => 'База данных проекта была заблокирована.
+<br />Не забудьте [[{{ns:special}}:Unlockdb|убрать блокировку]] после завершения процедуры обслуживания.',
+'unlockdbsuccesstext' => 'База данных проекта была разблокирована.',
+'lockfilenotwritable' => 'Нет права на запись в файл блокировки базы данных. Чтобы заблокировать или разблокировать БД, веб-сервер должен иметь разрешение на запись в этот файл.',
+'databasenotlocked'   => 'База данных не была заблокирована.',
+
+# Move page
+'movepage'                => 'Переименовать страницу',
+'movepagetext'            => "Воспользовавшись формой ниже, вы переименуете страницу, одновременно переместив на новое место её журнал изменений.
+Старое название станет перенаправлением на новое название.
+Ссылки на старое название не будут изменены (пожалуйста, проверьте наличие [[{{ns:special}}:DoubleRedirects|двойных]] и [[{{ns:special}}:BrokenRedirects|разорванных]] перенаправлений).
+Вы обязаны убедиться в том, что ссылки и далее указывают туда, куда предполагалось.
+
+Обратите внимание, что страница '''не будет''' переименована, если страница с новым названием уже существует (кроме случаев, если она является перенаправлением или пуста и не имеет истории правок). Это означает, что вы можете переименовать страницу обратно в то название, которое у него только что было, если вы переименовали по ошибке, но вы не можете случайно затереть существующую страницу.
+
+'''ПРЕДУПРЕЖДЕНИЕ!'''
+Переименование может привести к масштабным и неожиданным изменениям для ''популярных'' страниц. Пожалуйста, прежде чем вы продолжите, убедитесь, что вы понимаете все возможные последствия.",
+'movepagetalktext'        => "Присоединённая страница обсуждения, если таковая есть,
+будет также автоматически переименована, '''кроме случаев, когда:'''
+
+*Не пустая страница обсуждения уже существует под таким же именем или
+*Вы не поставили галочку в поле ниже.
+
+В этих случаях, вы будете вынуждены переместить или объединить страницы вручную,
+если это нужно.",
+'movearticle'             => 'Переименовать страницу',
+'movenologin'             => 'Вы не представились системе',
+'movenologintext'         => 'Вы должны [[{{ns:special}}:Userlogin|представиться системе]],
+чтобы иметь возможность переименовать страницы.',
+'newtitle'                => 'Новое название',
+'move-watch'              => 'Включить эту страницу в список наблюдения',
+'movepagebtn'             => 'Переименовать страницу',
+'pagemovedsub'            => 'Страница переименована',
+'pagemovedtext'           => 'Страница [[$1|«$1»]] переименована в [[$2|«$2»]].',
+'articleexists'           => 'Страница с таким именем уже существует или указанное вами название недопустимо.
+Пожалуйста, выберите другое название.',
+'talkexists'              => "'''Страница была переименована, но страница обсуждения
+не может быть переименована, потому что страница с таким названием уже
+существует. Пожалуйста, объедините их вручную.'''",
+'movedto'                 => 'переименована в',
+'movetalk'                => 'Переименовать соответствующую страницу обсуждения',
+'talkpagemoved'           => 'Соответствующая страница обсуждения также переименована.',
+'talkpagenotmoved'        => 'Соответствующая страница обсуждения <strong>не</strong> была переименована.',
+'1movedto2'               => '«[[$1]]» переименована в «[[$2]]»',
+'1movedto2_redir'         => '«[[$1]]» переименована в «[[$2]]», установлено перенаправление',
+'movelogpage'             => 'Журнал переименований',
+'movelogpagetext'         => 'Ниже представлен список переименованных страниц.',
+'movereason'              => 'Причина',
+'revertmove'              => 'откат',
+'delete_and_move'         => 'Удалить и переименовать',
+'delete_and_move_text'    => '==Требуется удаление==
+
+Страница с именем [[$1|«$1»]] уже существует. Вы хотите её удалить, чтобы сделать возможным переименование?',
+'delete_and_move_confirm' => 'Да, удалить эту страницу',
+'delete_and_move_reason'  => 'Удалено для возможности переименования',
+'selfmove'                => 'Невозможно переименовать страницу: исходное и новое имя страницы совпадают.',
+'immobile_namespace'      => 'Невозможно переименовать страницу: новое или старое имя содержит зарезервированное служебное слово.',
+
+# Export
+'export'            => 'Экспортирование статей',
+'exporttext'        => 'Вы можете экспортировать текст и журнал изменений конкретной страницы или набора страниц в XML, который потом может быть [[Special:Import|импортирован]] в другой вики-проект, работающий на программном обеспечении MediaWiki.
+
+Чтобы экспортировать статьи, введите их наименования в поле редактирования, одно название на строку, и выберите хотите ли вы экспортировать всю историю изменений статей или только последние версии статей.
+
+Вы также можете использовать специальный адрес для экспорта только последней версии. Например для страницы «{{MediaWiki:mainpage}}» это будет адрес [[{{ns:Special}}:Export/{{MediaWiki:mainpage}}]].',
+'exportcuronly'     => 'Включать только текущую версию, без полной предыстории',
+'exportnohistory'   => "----
+'''Замечание:''' экспорт полной истории изменений страниц отключен из-за проблем с производительностью.",
+'export-submit'     => 'Экспортировать',
+'export-addcattext' => 'Добавить страницы из категории:',
+'export-addcat'     => 'Добавить',
+
+# Namespace 8 related
+'allmessages'               => 'Системные сообщения',
+'allmessagesname'           => 'Сообщение',
+'allmessagesdefault'        => 'Текст по умолчанию',
+'allmessagescurrent'        => 'Текущий текст',
+'allmessagestext'           => 'Ниже представлен список системных сообщений, доступных в пространстве имён «MediaWiki».',
+'allmessagesnotsupportedUI' => 'Текущий установленный язык <strong>$1</strong> не поддерживается страницей {{ns:special}}:Allmessages на этом сайте.',
+'allmessagesnotsupportedDB' => "'''{{ns:special}}:Allmessages''' не поддерживается, так как отключена опция '''wgUseDatabaseMessages'''.",
+'allmessagesfilter'         => 'Фильтр в формате регулярного выражения:',
+'allmessagesmodified'       => 'Показать только изменённые',
+
+# Thumbnails
+'thumbnail-more'  => 'Увеличить',
+'missingimage'    => '<strong>Изображение не найдено</strong><br /><em>$1</em>\n',
+'filemissing'     => 'Файл не найден',
+'thumbnail_error' => 'Ошибка создания миниатюры: $1',
+'djvu_page_error'   => 'Номер страницы DjVu вне досягаемости',
+'djvu_no_xml'       => 'Невозможно получить XML для DjVu',
+'thumbnail_invalid_params' => 'Ошибочный параметр миниатюры',
+'thumbnail_dest_directory' => 'Невозможно создать целевую директорию',
+
+# Special:Import
+'import'                     => 'Импортирование страниц',
+'importinterwiki'            => 'Межвики импорт',
+'import-interwiki-text'      => 'Укажите вики и название импортируемой страницы.
+Даты изменений и имена авторов будут сохранены.
+Все операции межвики импорта регистрируются в [[{{ns:special}}:Log/import|соответствующем журнале]].',
+'import-interwiki-history'   => 'Копировать всю историю изменений этой страницы',
+'import-interwiki-submit'    => 'Импортировать',
+'import-interwiki-namespace' => 'Помещать страницы в пространство имён:',
+'importtext'                 => 'Пожалуйста, экспортируйте страницу из исходной вики используя инструмент Special:Export, сохраните файл на диск, а затем загрузите его сюда.',
+'importstart'                => 'Импортирование страниц…',
+'import-revision-count'      => '$1 {{PLURAL:$1|версия|версии|версий}}',
+'importnopages'              => 'Нет страниц для импортирования.',
+'importfailed'               => 'Не удалось импортировать: $1',
+'importunknownsource'        => 'Неизвестный тип импортируемой страницы',
+'importcantopen'             => 'Невозможно открыть импортируемый файл',
+'importbadinterwiki'         => 'Неправильная интервики-ссылка',
+'importnotext'               => 'Текст отсутствует',
+'importsuccess'              => 'Импортировано выполнено!',
+'importhistoryconflict'      => 'Конфликт существующих версий (возможно, эта страница уже была импортирована)',
+'importnosources'            => 'Не был выбран источник межвики импорта, прямая загрузка истории изменений отключена.',
+'importnofile'               => 'Файл для импорта не был загружен.',
+'importuploaderror'          => 'Ошибка загрузки файла для импорта, возможно размер файла превышает установленную норму.',
+
+# Import log
+'importlogpage'                    => 'Журнал импорта',
+'importlogpagetext'                => 'Импортирование администраторами страниц с историей изменений из других вики.',
+'import-logentry-upload'           => '«[[$1]]» — импорт из файла',
+'import-logentry-upload-detail'    => '$1 версий',
+'import-logentry-interwiki'        => '«$1» — межвики импорт',
+'import-logentry-interwiki-detail' => '$1 версий из $2',
+
+# Tooltip help for the actions
+'tooltip-pt-userpage'             => 'Моя страница участника',
+'tooltip-pt-anonuserpage'         => 'Страница пользователя для моего IP',
+'tooltip-pt-mytalk'               => 'Моя страница обсуждений',
+'tooltip-pt-anontalk'             => 'Страница обсуждений для моего IP',
+'tooltip-pt-preferences'          => 'Мои настройки',
+'tooltip-pt-watchlist'            => 'Список страниц моего наблюдения',
+'tooltip-pt-mycontris'            => 'Мой вклад',
+'tooltip-pt-login'                => 'Здесь можно зарегистрироваться в системе, но это необязательно',
+'tooltip-pt-anonlogin'            => 'Здесь можно зарегистрироваться в системе, но это необязательно',
+'tooltip-pt-logout'               => 'Завершить зарегистрированный сеанс',
+'tooltip-ca-talk'                 => 'Обсуждение статьи',
+'tooltip-ca-edit'                 => 'Эту статью можно изменять. Перед сохранением изменений, пожалуйста, нажмите кнопку предварительного просмотра для визуальной проверки результата',
+'tooltip-ca-addsection'           => 'Добавить комментарий к обсуждению',
+'tooltip-ca-viewsource'           => 'Эта страница защищена от изменений, но вы можете посмотреть и скопировать её исходный текст',
+'tooltip-ca-history'              => 'Журнал изменений страницы',
+'tooltip-ca-protect'              => 'Защитить страницу от изменений',
+'tooltip-ca-delete'               => 'Удалить эту страницу',
+'tooltip-ca-undelete'             => 'Восстановить исправления страницы, сделанные до того, как она была удалена',
+'tooltip-ca-move'                 => 'Переименовать страницу',
+'tooltip-ca-watch'                => 'Добавить эту страницу в ваш список наблюдения',
+'tooltip-ca-unwatch'              => 'Удалить эту страницу из вашего списка наблюдения',
+'tooltip-search'                  => 'Искать это слово',
+'tooltip-p-logo'                  => 'Заглавная страница',
+'tooltip-n-mainpage'              => 'Перейти на заглавную страницу',
+'tooltip-n-portal'                => 'О проекте, о том, что вы можете сделать, где что находится',
+'tooltip-n-currentevents'         => 'Список текущих событий',
+'tooltip-n-recentchanges'         => 'Список последних изменений',
+'tooltip-n-randompage'            => 'Посмотреть случайную страницу',
+'tooltip-n-help'                  => 'Справочник по проекту «{{SITENAME}}»',
+'tooltip-n-sitesupport'           => 'Поддержите проект',
+'tooltip-t-whatlinkshere'         => 'Список всех страниц, которые ссылаются на эту страницу',
+'tooltip-t-recentchangeslinked'   => 'Последние изменения в страницах, на которые ссылается эта страница',
+'tooltip-feed-rss'                => 'Трансляция в RSS для этой страницы',
+'tooltip-feed-atom'               => 'Трансляция в Atom для этой страницы',
+'tooltip-t-contributions'         => 'Список страниц, которые изменял этот участник',
+'tooltip-t-emailuser'             => 'Отправить письмо этому участнику',
+'tooltip-t-upload'                => 'Загрузить изображения или мультимедиа-файлы',
+'tooltip-t-specialpages'          => 'Список служебных страниц',
+'tooltip-ca-nstab-main'           => 'Содержание статьи',
+'tooltip-ca-nstab-user'           => 'Персональная страница участника',
+'tooltip-ca-nstab-media'          => 'Мультимедиа-файл',
+'tooltip-ca-nstab-special'        => 'Это служебная страница, она недоступна для редактирования',
+'tooltip-ca-nstab-project'        => 'Страница проекта',
+'tooltip-ca-nstab-image'          => 'Страница изображения',
+'tooltip-ca-nstab-mediawiki'      => 'Страница сообщения MediaWiki',
+'tooltip-ca-nstab-template'       => 'Страница шаблона',
+'tooltip-ca-nstab-help'           => 'Страница справки',
+'tooltip-ca-nstab-category'       => 'Страница категории',
+'tooltip-minoredit'               => 'Отметить это изменение как незначительное',
+'tooltip-save'                    => 'Сохранить ваши изменения',
+'tooltip-preview'                 => 'Предварительный просмотр страницы, пожалуйста, используйте перед сохранением!',
+'tooltip-diff'                    => 'Показать изменения, сделанные по отношению к исходному тексту.',
+'tooltip-compareselectedversions' => 'Посмотреть разницу между двумя выбранными версиями этой страницы.',
+'tooltip-watch'                   => 'Добавить текущую страницу в список наблюдения',
+'tooltip-recreate'                => 'Восстановить страницу несмотря на то, что она была удалена',
+
+# Stylesheets
+'common.css'   => '/** Размещённый здесь CSS будет применяться ко всем темам оформления */',
+'monobook.css' => '/* Размещённый здесь CSS будет применяться к теме оформления Monobook */
+
+/*
+Это нужно чтобы в окошке поиска кнопки не разбивались на 2 строки
+к сожалению в main.css для кнопки Go прописаны паддинги .5em.
+Что хорошо для "Go" плохо для "Перейти" --st0rm
+*/
+
+#searchGoButton {
+    padding-left: 0em;
+    padding-right: 0em;
+    font-weight: bold;
+}',
+
+# Scripts
+'common.js'   => '/* Размещённый здесь код JavaScript будет загружен всем пользователям при обращении к какой-либо странице */',
+'monobook.js' => '/* Устарело. Используйте [[MediaWiki:common.js]] */',
+
+# Metadata
+'nodublincore'      => 'Метаданные Dublin Core RDF запрещены для этого сервера.',
+'nocreativecommons' => 'Метаданные Creative Commons RDF запрещены для этого сервера.',
+'notacceptable'     => "Вики-сервер не может предоставить данные в формате, который мог бы прочитать ваш браузер.<br />
+The wiki server can't provide data in a format your client can read.",
+
+# Attribution
+'anonymous'        => 'Анонимные пользователи {{grammar:genitive|{{SITENAME}}}}',
+'siteuser'         => 'Участник {{grammar:genitive|{{SITENAME}}}} $1',
+'lastmodifiedatby' => 'Эта страница последний раз была изменена $2, $1 участником $3.', # $1 date, $2 time, $3 user
+'and'              => 'и',
+'othercontribs'    => 'Основано на работе $1.',
+'others'           => 'другие',
+'siteusers'        => 'Участник(и) {{grammar:genitive|{{SITENAME}}}} $1',
+'creditspage'      => 'Благодарности',
+'nocredits'        => 'Нет списка участников для этой статьи',
+
+# Spam protection
+'spamprotectiontitle'    => 'Спам-фильтр',
+'spamprotectiontext'     => 'Страница, которую вы пытаетесь сохранить, заблокирована спам-фильтром. Вероятнее всего она содержит ссылку на внешний сайт.',
+'spamprotectionmatch'    => 'Следующее сообщение было получено от спам-фильтра: $1.',
+'subcategorycount'       => 'В этой категории $1 {{PLURAL:$1|подкатегория|подкатегории|подкатегорий}}.',
+'categoryarticlecount'   => 'В этой категории $1 {{PLURAL:$1|статья|статьи|статей}}.',
+'category-media-count'   => 'В этой категории $1 {{PLURAL:$1|файл|файла|файлов}}.',
+'listingcontinuesabbrev' => ' (продолжение)',
+'spambot_username'       => 'Чистка спама',
+'spam_reverting'         => 'Откат к последней версии, не содержащей ссылки на $1',
+'spam_blanking'          => 'Все версии содержат ссылки на $1, очистка',
+
+# Info page
+'infosubtitle'   => 'Информация о странице',
+'numedits'       => 'Число правок (статья): $1',
+'numtalkedits'   => 'Число правок (страница обсуждения): $1',
+'numwatchers'    => 'Число наблюдателей: $1',
+'numauthors'     => 'Число различных авторов (статья): $1',
+'numtalkauthors' => 'Число различных авторов (страница обсуждения): $1',
+
+# Math options
+'mw_math_png'    => 'Всегда генерировать PNG',
+'mw_math_simple' => 'HTML в простых случаях, иначе PNG',
+'mw_math_html'   => 'HTML, если возможно, иначе PNG',
+'mw_math_source' => 'Оставить в разметке ТеХ (для текстовых браузеров)',
+'mw_math_modern' => 'Как рекомендуется для современных браузеров',
+'mw_math_mathml' => 'MathML, если возможно (экспериментальная опция)',
+
+# Patrolling
+'markaspatrolleddiff'                 => 'Отметить как проверенную',
+'markaspatrolledtext'                 => 'Отметить эту статью как проверенную',
+'markedaspatrolled'                   => 'Отмечена как проверенная',
+'markedaspatrolledtext'               => 'Выбранная версия отмечена как проверенная.',
+'rcpatroldisabled'                    => 'Патрулирование последних изменений запрещено',
+'rcpatroldisabledtext'                => 'Возможность патрулирования последних изменений в настоящее время отключена.',
+'markedaspatrollederror'              => 'Невозможно отметить как проверенную',
+'markedaspatrollederrortext'          => 'Вы должны указать редакцию, которая будет отмечена как проверенная.',
+'markedaspatrollederror-noautopatrol' => 'Вам не разрешено отмечать собственные правки как проверенные.',
+
+# Patrol log
+'patrol-log-page' => 'Журнал патрулирования',
+'patrol-log-line' => 'помечена $1 из $2 патрулирована $3',
+'patrol-log-auto' => '(автоматический)',
+'patrol-log-diff' => 'r$1',
+
+# Image deletion
+'deletedrevision' => 'Удалена старая версия $1.',
+
+# Browsing diffs
+'previousdiff' => '← К предыдущему изменению',
+'nextdiff'     => 'К следующему изменению →',
+
+# Media information
+'mediawarning'         => "'''Внимание''': этот файл может содержать вредоносный программный код, выполнение которого способно подвергнуть риску вашу систему. <hr />",
+'imagemaxsize'         => 'Ограничивать изображения на странице изображений до:',
+'thumbsize'            => 'Размер уменьшенной версии изображения:',
+'widthheight'          => '$1 × $2',
+'file-info'            => '(размер файла: $1, MIME-тип: $2)',
+'file-info-size'       => '($1 × $2 пикселов, размер файла: $3, MIME-тип: $4)',
+'file-nohires'         => '<small>Нет версии с большим разрешением.</small>',
+'file-svg'             => '<small>Это масштабируемое без потерь векторное изображение. Основной размер: $1 × $2 пикселов.</small>',
+'show-big-image'       => 'Изображение в более высоком разрешении',
+'show-big-image-thumb' => '<small>Размер при предпросмотре: $1 × $2 пикселов</small>',
+
+'newimages'    => 'Галерея новых файлов',
+'showhidebots' => '($1 ботов)',
+'noimages'     => 'Изображения отсутствуют.',
+
+'passwordtooshort' => 'Введённый пароль слишком короткий. Пароль должен состоять не менее чем из $1 символов.',
+
+# Metadata
+'metadata'          => 'Метаданные',
+'metadata-help'     => 'Файл содержит дополнительные данные, обычно добавляемые цифровыми камерами или сканерами. Если файл после создания редактировался, то некоторые параметры могут не соответствовать текущему изображению.',
+'metadata-expand'   => 'Показать дополнительные данные',
+'metadata-collapse' => 'Скрыть дополнительные данные',
+'metadata-fields'   => 'Поля метаданных, перечисленные в этом списке, будут показаны на странице изображения по умолчанию, остальные будут скрыты.
+* make
+* model
+* datetimeoriginal
+* exposuretime
+* fnumber
+* focallength',
+
+# EXIF tags
+'exif-imagewidth'                  => 'Ширина',
+'exif-imagelength'                 => 'Высота',
+'exif-bitspersample'               => 'Глубина цвета',
+'exif-compression'                 => 'Метод сжатия',
+'exif-photometricinterpretation'   => 'Цветовая модель',
+'exif-orientation'                 => 'Ориентация кадра',
+'exif-samplesperpixel'             => 'Количество цветовых компонентов',
+'exif-planarconfiguration'         => 'Принцип организации данных',
+'exif-ycbcrsubsampling'            => 'Отношение размеров компонент Y и C',
+'exif-ycbcrpositioning'            => 'Порядок размещения компонент Y и C',
+'exif-xresolution'                 => 'Горизонтальное разрешение',
+'exif-yresolution'                 => 'Вертикальное разрешение',
+'exif-resolutionunit'              => 'Единица измерения разрешения',
+'exif-stripoffsets'                => 'Положение блока данных',
+'exif-rowsperstrip'                => 'Количество строк в 1 блоке',
+'exif-stripbytecounts'             => 'Размер сжатого блока',
+'exif-jpeginterchangeformat'       => 'Положение начала блока preview',
+'exif-jpeginterchangeformatlength' => 'Размер данных блока preview',
+'exif-transferfunction'            => 'Функция преобразования цветового пространства',
+'exif-whitepoint'                  => 'Цветность белой точки',
+'exif-primarychromaticities'       => 'Цветность основных цветов',
+'exif-ycbcrcoefficients'           => 'Коэффициенты преобразования цветовой модели',
+'exif-referenceblackwhite'         => 'Положение белой и чёрной точек',
+'exif-datetime'                    => 'Дата и время изменения файла',
+'exif-imagedescription'            => 'Название изображения',
+'exif-make'                        => 'Производитель камеры',
+'exif-model'                       => 'Модель камеры',
+'exif-software'                    => 'Программное обеспечение',
+'exif-artist'                      => 'Автор',
+'exif-copyright'                   => 'Владелец авторского права',
+'exif-exifversion'                 => 'Версия Exif',
+'exif-flashpixversion'             => 'Поддерживаемая версия FlashPix',
+'exif-colorspace'                  => 'Цветовое пространство',
+'exif-componentsconfiguration'     => 'Конфигурация цветовых компонентов',
+'exif-compressedbitsperpixel'      => 'Глубина цвета после сжатия',
+'exif-pixelydimension'             => 'Полная высота изображения',
+'exif-pixelxdimension'             => 'Полная ширина изображения',
+'exif-makernote'                   => 'Дополнительные данные производителя',
+'exif-usercomment'                 => 'Дополнительный комментарий',
+'exif-relatedsoundfile'            => 'Файл звукового комментария',
+'exif-datetimeoriginal'            => 'Оригинальные дата и время',
+'exif-datetimedigitized'           => 'Дата и время оцифровки',
+'exif-subsectime'                  => 'Доли секунд времени изменения файла',
+'exif-subsectimeoriginal'          => 'Доли секунд оригинального времени',
+'exif-subsectimedigitized'         => 'Доли секунд времени оцифровки',
+'exif-exposuretime'                => 'Время экспозиции',
+'exif-exposuretime-format'         => '$1 с ($2)',
+'exif-fnumber'                     => 'Число диафрагмы',
+'exif-fnumber-format'              => 'f/$1',
+'exif-exposureprogram'             => 'Программа экспозиции',
+'exif-spectralsensitivity'         => 'Спектральная чувствительность',
+'exif-isospeedratings'             => 'Светочувствительность ISO',
+'exif-oecf'                        => 'OECF (коэффициент оптоэлектрического преобразования)',
+'exif-shutterspeedvalue'           => 'Выдержка',
+'exif-aperturevalue'               => 'Диафрагма',
+'exif-brightnessvalue'             => 'Яркость',
+'exif-exposurebiasvalue'           => 'Компенсация экспозиции',
+'exif-maxaperturevalue'            => 'Минимальное число диафрагмы',
+'exif-subjectdistance'             => 'Расстояние до объекта',
+'exif-meteringmode'                => 'Режим замера экспозиции',
+'exif-lightsource'                 => 'Источник света',
+'exif-flash'                       => 'Статус вспышки',
+'exif-focallength'                 => 'Фокусное расстояние',
+'exif-focallength-format'          => '$1 мм',
+'exif-subjectarea'                 => 'Положение и площадь объекта съёмки',
+'exif-flashenergy'                 => 'Энергия вспышки',
+'exif-spatialfrequencyresponse'    => 'Пространственная частотная характеристика',
+'exif-focalplanexresolution'       => 'Разрешение по X в фокальной плоскости',
+'exif-focalplaneyresolution'       => 'Разрешение по Y в фокальной плоскости',
+'exif-focalplaneresolutionunit'    => 'Единица измерения разрешения в фокальной плоскости',
+'exif-subjectlocation'             => 'Положение объекта относительно левого верхнего угла',
+'exif-exposureindex'               => 'Индекс экспозиции',
+'exif-sensingmethod'               => 'Тип сенсора',
+'exif-filesource'                  => 'Источник файла',
+'exif-scenetype'                   => 'Тип сцены',
+'exif-cfapattern'                  => 'Тип цветового фильтра',
+'exif-customrendered'              => 'Дополнительная обработка',
+'exif-exposuremode'                => 'Режим выбора экспозиции',
+'exif-whitebalance'                => 'Баланс белого',
+'exif-digitalzoomratio'            => 'Коэффициент цифрового увеличения (цифровой зум)',
+'exif-focallengthin35mmfilm'       => 'Эквивалентное фокусное расстояние (для 35 мм плёнки)',
+'exif-scenecapturetype'            => 'Тип сцены при съёмке',
+'exif-gaincontrol'                 => 'Повышение яркости',
+'exif-contrast'                    => 'Контрастность',
+'exif-saturation'                  => 'Насыщенность',
+'exif-sharpness'                   => 'Резкость',
+'exif-devicesettingdescription'    => 'Описание предустановок камеры',
+'exif-subjectdistancerange'        => 'Расстояние до объекта съёмки',
+'exif-imageuniqueid'               => 'Номер изображения (ID)',
+'exif-gpsversionid'                => 'Версия блока GPS-информации',
+'exif-gpslatituderef'              => 'Индекс широты',
+'exif-gpslatitude'                 => 'Широта',
+'exif-gpslongituderef'             => 'Индекс долготы',
+'exif-gpslongitude'                => 'Долгота',
+'exif-gpsaltituderef'              => 'Индекс высоты',
+'exif-gpsaltitude'                 => 'Высота',
+'exif-gpstimestamp'                => 'Точное время по UTC',
+'exif-gpssatellites'               => 'Описание использованных спутников',
+'exif-gpsstatus'                   => 'Статус приёмника в момент съёмки',
+'exif-gpsmeasuremode'              => 'Метод измерения положения',
+'exif-gpsdop'                      => 'Точность измерения',
+'exif-gpsspeedref'                 => 'Единицы измерения скорости',
+'exif-gpsspeed'                    => 'Скорость движения',
+'exif-gpstrackref'                 => 'Тип азимута приёмника GPS (истинный, магнитный)',
+'exif-gpstrack'                    => 'Азимут приёмника GPS',
+'exif-gpsimgdirectionref'          => 'Тип азимута изображения (истинный, магнитный)',
+'exif-gpsimgdirection'             => 'Азимут изображения',
+'exif-gpsmapdatum'                 => 'Использованная геодезическая система координат',
+'exif-gpsdestlatituderef'          => 'Индекс долготы объекта',
+'exif-gpsdestlatitude'             => 'Долгота объекта',
+'exif-gpsdestlongituderef'         => 'Индекс широты объекта',
+'exif-gpsdestlongitude'            => 'Широта объекта',
+'exif-gpsdestbearingref'           => 'Тип пеленга объекта (истинный, магнитный)',
+'exif-gpsdestbearing'              => 'Пеленг объекта',
+'exif-gpsdestdistanceref'          => 'Единицы измерения расстояния',
+'exif-gpsdestdistance'             => 'Расстояние',
+'exif-gpsprocessingmethod'         => 'Метод вычисления положения',
+'exif-gpsareainformation'          => 'Название области GPS',
+'exif-gpsdatestamp'                => 'Дата',
+'exif-gpsdifferential'             => 'Дифференциальная поправка',
+
+# EXIF attributes
+'exif-compression-1' => 'Несжатый',
+'exif-compression-6' => 'JPEG',
+
+'exif-photometricinterpretation-2' => 'RGB',
+'exif-photometricinterpretation-6' => 'YCbCr',
+
+'exif-unknowndate' => 'Неизвестная дата',
+
+'exif-orientation-1' => 'Нормальная', # 0th row: top; 0th column: left
+'exif-orientation-2' => 'Отражено по горизонтали', # 0th row: top; 0th column: right
+'exif-orientation-3' => 'Повёрнуто на 180°', # 0th row: bottom; 0th column: right
+'exif-orientation-4' => 'Отражено по вертикали', # 0th row: bottom; 0th column: left
+'exif-orientation-5' => 'Повёрнуто на 90° против часовой стрелки и отражено по вертикали', # 0th row: left; 0th column: top
+'exif-orientation-6' => 'Повёрнуто на 90° по часовой стрелке', # 0th row: right; 0th column: top
+'exif-orientation-7' => 'Повёрнуто на 90° по часовой стрелке и отражено по вертикали', # 0th row: right; 0th column: bottom
+'exif-orientation-8' => 'Повёрнуто на 90° против часовой стрелки', # 0th row: left; 0th column: bottom
+
+'exif-planarconfiguration-1' => 'формат «chunky»',
+'exif-planarconfiguration-2' => 'формат «planar»',
+
+'exif-xyresolution-i' => '$1 точек на дюйм',
+'exif-xyresolution-c' => '$1 точек на сантиметр',
+
+'exif-colorspace-1'      => 'sRGB',
+'exif-colorspace-ffff.h' => 'FFFF.H',
+
+'exif-componentsconfiguration-0' => 'не существует',
+'exif-componentsconfiguration-1' => 'Y',
+'exif-componentsconfiguration-2' => 'Cb',
+'exif-componentsconfiguration-3' => 'Cr',
+'exif-componentsconfiguration-4' => 'R',
+'exif-componentsconfiguration-5' => 'G',
+'exif-componentsconfiguration-6' => 'B',
+
+'exif-exposureprogram-0' => 'Неизвестно',
+'exif-exposureprogram-1' => 'Ручной режим',
+'exif-exposureprogram-2' => 'Программный режим (нормальный)',
+'exif-exposureprogram-3' => 'Приоритет диафрагмы',
+'exif-exposureprogram-4' => 'Приоритет выдержки',
+'exif-exposureprogram-5' => 'Художественная программа (на основе нужной глубины резкости)',
+'exif-exposureprogram-6' => 'Спортивный режим (с минимальной выдержкой)',
+'exif-exposureprogram-7' => 'Портретный режим (для снимков на близком расстоянии, с фоном не в фокусе)',
+'exif-exposureprogram-8' => 'Пейзажный режим (для пейзажных снимков, с фоном в фокусе)',
+
+'exif-subjectdistance-value' => '$1 метров',
+
+'exif-meteringmode-0'   => 'Неизвестно',
+'exif-meteringmode-1'   => 'Средний',
+'exif-meteringmode-2'   => 'Центровзвешенный',
+'exif-meteringmode-3'   => 'Точечный',
+'exif-meteringmode-4'   => 'Мультиточечный',
+'exif-meteringmode-5'   => 'Матричный',
+'exif-meteringmode-6'   => 'Частичный',
+'exif-meteringmode-255' => 'Другой',
+
+'exif-lightsource-0'   => 'Неизвестно',
+'exif-lightsource-1'   => 'Дневной свет',
+'exif-lightsource-2'   => 'Лампа дневного света',
+'exif-lightsource-3'   => 'Лампа накаливания',
+'exif-lightsource-4'   => 'Вспышка',
+'exif-lightsource-9'   => 'Хорошая погода',
+'exif-lightsource-10'  => 'Облачно',
+'exif-lightsource-11'  => 'Тень',
+'exif-lightsource-12'  => 'Лампа дневного света тип D (5700 − 7100K)',
+'exif-lightsource-13'  => 'Лампа дневного света тип N (4600 − 5400K)',
+'exif-lightsource-14'  => 'Лампа дневного света тип W (3900 − 4500K)',
+'exif-lightsource-15'  => 'Лампа дневного света тип WW (3200 − 3700K)',
+'exif-lightsource-17'  => 'Стандартный источник света типа A',
+'exif-lightsource-18'  => 'Стандартный источник света типа B',
+'exif-lightsource-19'  => 'Стандартный источник света типа C',
+'exif-lightsource-20'  => 'D55',
+'exif-lightsource-21'  => 'D65',
+'exif-lightsource-22'  => 'D75',
+'exif-lightsource-23'  => 'D50',
+'exif-lightsource-24'  => 'Студийная лампа стандарта ISO',
+'exif-lightsource-255' => 'Другой источник света',
+
+'exif-focalplaneresolutionunit-2' => 'дюймов',
+
+'exif-sensingmethod-1' => 'Неопределённый',
+'exif-sensingmethod-2' => 'Однокристальный матричный цветной сенсор',
+'exif-sensingmethod-3' => 'Цветной сенсор с двумя матрицами',
+'exif-sensingmethod-4' => 'Цветной сенсор с тремя матрицами',
+'exif-sensingmethod-5' => 'Матричный сенсор с последовательным измерением цвета',
+'exif-sensingmethod-7' => 'Трёхцветный линейный сенсор',
+'exif-sensingmethod-8' => 'Линейный сенсор с последовательным измерением цвета',
+
+'exif-filesource-3' => 'Цифровой фотоаппарат',
+
+'exif-scenetype-1' => 'Изображение сфотографировано напрямую',
+
+'exif-customrendered-0' => 'Не производилась',
+'exif-customrendered-1' => 'Нестандартная обработка',
+
+'exif-exposuremode-0' => 'Автоматическая экспозиция',
+'exif-exposuremode-1' => 'Ручная установка экспозиции',
+'exif-exposuremode-2' => 'Брэкетинг',
+
+'exif-whitebalance-0' => 'Автоматический баланс белого',
+'exif-whitebalance-1' => 'Ручная установка баланса белого',
+
+'exif-scenecapturetype-0' => 'Стандартный',
+'exif-scenecapturetype-1' => 'Ландшафт',
+'exif-scenecapturetype-2' => 'Портрет',
+'exif-scenecapturetype-3' => 'Ночная съёмка',
+
+'exif-gaincontrol-0' => 'Нет',
+'exif-gaincontrol-1' => 'Небольшое увеличение',
+'exif-gaincontrol-2' => 'Большое увеличение',
+'exif-gaincontrol-3' => 'Небольшое уменьшение',
+'exif-gaincontrol-4' => 'Сильное уменьшение',
+
+'exif-contrast-0' => 'Нормальная',
+'exif-contrast-1' => 'Мягкое повышение',
+'exif-contrast-2' => 'Сильное повышение',
+
+'exif-saturation-0' => 'Нормальная',
+'exif-saturation-1' => 'Небольшая насыщенность',
+'exif-saturation-2' => 'Большая насыщенность',
+
+'exif-sharpness-0' => 'Нормальная',
+'exif-sharpness-1' => 'Мягкое повышение',
+'exif-sharpness-2' => 'Сильное повышение',
+
+'exif-subjectdistancerange-0' => 'Неизвестно',
+'exif-subjectdistancerange-1' => 'Макросъёмка',
+'exif-subjectdistancerange-2' => 'Съёмка с близкого расстояния',
+'exif-subjectdistancerange-3' => 'Съёмка издалека',
+
+# Pseudotags used for GPSLatitudeRef and GPSDestLatitudeRef
+'exif-gpslatitude-n' => 'северной широты',
+'exif-gpslatitude-s' => 'южной широты',
+
+# Pseudotags used for GPSLongitudeRef and GPSDestLongitudeRef
+'exif-gpslongitude-e' => 'восточной долготы',
+'exif-gpslongitude-w' => 'западной долготы',
+
+'exif-gpsstatus-a' => 'Измерение не закончено',
+'exif-gpsstatus-v' => 'Готов к передаче данных',
+
+'exif-gpsmeasuremode-2' => 'Измерение 2-х координат',
+'exif-gpsmeasuremode-3' => 'Измерение 3-х координат',
+
+# Pseudotags used for GPSSpeedRef and GPSDestDistanceRef
+'exif-gpsspeed-k' => 'км/час',
+'exif-gpsspeed-m' => 'миль/час',
+'exif-gpsspeed-n' => 'узлов',
+
+# Pseudotags used for GPSTrackRef, GPSImgDirectionRef and GPSDestBearingRef
+'exif-gpsdirection-t' => 'истинный',
+'exif-gpsdirection-m' => 'магнитный',
+
+# External editor support
+'edit-externally'      => 'Редактировать этот файл, используя внешнюю программу',
+'edit-externally-help' => 'Подробности см. на странице [http://meta.wikimedia.org/wiki/Help:External_editors Meta:Help:External_editors].',
+
+# 'all' in various places, this might be different for inflected languages
+'recentchangesall' => 'все',
+'imagelistall'     => 'все',
+'watchlistall1'    => 'все',
+'watchlistall2'    => 'все',
+'namespacesall'    => 'все',
+
+# E-mail address confirmation
+'confirmemail'            => 'Подтверждение адреса электронной почты',
+'confirmemail_noemail'    => 'Вы не задали адрес электронной почты в [[{{ns:special}}:Preferences|настройках]], либо он некорректен.',
+'confirmemail_text'       => 'Вики-движок требует подтверждения адреса электронной почты перед тем, как начать с ним работать.
+Нажмите на кнопку, чтобы на указанный адрес было отправлено письмо, содержащее ссылку на специальную страницу, после открытия которой в браузере адрес электронной почты будет считается подтверждённым.',
+'confirmemail_pending'    => '<div class="error">
+Письмо с кодом подтверждения уже было отправлено.
+Если вы недавно создали учётную запись, то, вероятно,
+вам следует подождать несколько минут пока письмо придёт перед тем, как запросить код ещё раз.
+</div>',
+'confirmemail_send'       => 'Отправить письмо с запросом на подтверждение',
+'confirmemail_sent'       => 'Письмо с запросом на подтверждение отправлено.',
+'confirmemail_oncreate'   => 'Письмо с кодом подтверждения было отправлено на указанный вами почтовый ящик.
+Данный код не требуется для входа в систему, однако вы должны указать его,
+прежде чем будет разрешено использование возможностей электронной почты в этом проекте.',
+'confirmemail_sendfailed' => 'Невозможно отправить письмо с запросом на подтверждение. Проверьте правильность адреса электронной почты.
+
+Ответ сервера: $1',
+'confirmemail_invalid'    => 'Неправильный код подтверждения или срок действия кода истёк.',
+'confirmemail_needlogin'  => 'Вы должны $1 для подтверждения вашего адреса электронной почты.',
+'confirmemail_success'    => 'Ваш адрес электронной почты подтверждён.',
+'confirmemail_loggedin'   => 'Ваш адрес электронной почты подтверждён.',
+'confirmemail_error'      => 'Во время процедуры подтверждения адреса электронной почты произошла ошибка.',
+'confirmemail_subject'    => '{{SITENAME}}:Запрос на подтверждение адреса эл. почты',
+'confirmemail_body'       => 'Кто-то с IP-адресом $1 зарегистрировал на сервере проекта {{SITENAME}} учётную запись
+«$2», указав ваш адрес электронной почты.
+
+Чтобы подтвердить, что вы разрешаете использовать ваш адрес электронной почты  в этом проекте, откройте в браузере приведённую ниже ссылку (это нужно сделать до $4):
+
+$3
+
+Если вы не отправляли подобного запроса, просто проигнорируйте данное письмо.',
+
+# Inputbox extension, may be useful in other contexts as well
+'tryexact'       => 'Строгий поиск',
+'searchfulltext' => 'Полнотекстовый поиск',
+'createarticle'  => 'Создать статью',
+
+# Scary transclusion
+'scarytranscludedisabled' => '[«Interwiki transcluding» отключён]',
+'scarytranscludefailed'   => '[К сожалению, не удалось обращение к шаблону $1]',
+'scarytranscludetoolong'  => '[К сожалению, URL слишком длинный]',
+
+# Trackbacks
+'trackbackbox'      => '<div id="mw_trackbacks">
+Trackback для этой статьи:<br />
+$1
+</div>',
+'trackbackremove'   => ' ([$1 удалить])',
+'trackbacklink'     => 'Trackback',
+'trackbackdeleteok' => 'Trackback был удалён.',
+
+# Delete conflict
+'deletedwhileediting' => 'Внимание: пока вы редактировали эту страницу она была удалена!',
+'confirmrecreate'     => "Участник [[{{ns:user}}:$1|$1]] ([[{{ns:user_talk}}:$1|обсуждение]]) удалил эту страницу после того, как вы начали её редактировать, причина удаления:
+: ''$2''
+Пожалуйста, подтвердите, что вы хотите восстановить эту страницу.",
+'recreate'            => 'Создать заново',
+
+'unit-pixel' => ' пикс.',
+
+# HTML dump
+'redirectingto' => 'Перенаправление на страницу [[$1]]…',
+
+# action=purge
+'confirm_purge'        => 'Очистить кеш этой страницы?
+
+$1',
+'confirm_purge_button' => 'OK',
+
+'youhavenewmessagesmulti' => 'Вы получили новые сообщения на $1',
+
+'searchcontaining' => 'Поиск статей, содержащих «$1».',
+'searchnamed'      => 'Поиск статей с названием $1.',
+'articletitles'    => 'Статьи, начинающиеся с «$1»',
+'hideresults'      => 'Скрыть результаты',
+
+# DISPLAYTITLE
+'displaytitle' => '(Ссылка на эту страницу — [[$1]])',
+
+'loginlanguagelabel' => 'Язык: $1',
+
+# Multipage image navigation
+'imgmultipageprev'   => '← предыдущая страница',
+'imgmultipagenext'   => 'следующая страница →',
+'imgmultigo'         => 'Перейти!',
+'imgmultigotopre'    => 'Перейти на страницу',
+'imgmultiparseerror' => 'Файл изображения повреждён или ошибочен, невозможно получить список страниц.',
+
+# Table pager
+'ascending_abbrev'         => 'возр',
+'descending_abbrev'        => 'убыв',
+'table_pager_next'         => 'Следующая страница',
+'table_pager_prev'         => 'Предыдущая страница',
+'table_pager_first'        => 'Первая страница',
+'table_pager_last'         => 'Последняя страница',
+'table_pager_limit'        => 'Показать $1 элементов на странице',
+'table_pager_limit_submit' => 'Выполнить',
+'table_pager_empty'        => 'Не найдено',
+
+# Auto-summaries
+'autosumm-blank'   => 'Полностью удалено содержимое страницы',
+'autosumm-replace' => 'Содержимое страницы заменено на «$1»',
+'autoredircomment' => 'Перенаправление на [[$1]]', # This should be changed to the new naming convention, but existed beforehand
+'autosumm-new'     => 'Новая: $1',
+
+# Size units
+'size-bytes'     => '$1 байт',
+'size-kilobytes' => '$1 КБ',
+'size-megabytes' => '$1 МБ',
+'size-gigabytes' => '$1 ГБ',
+
+# Live preview
+'livepreview-loading' => 'Загрузка…',
+'livepreview-ready'   => 'Загрузка… Готово!',
+'livepreview-failed'  => 'Не удалось использовать быстрый предпросмотр.
+Попробуйте воспользоваться обычным предпросмотром.',
+'livepreview-error'   => 'Не удалось установить соединение: $1 «$2»
+Попробуйте воспользоваться обычным предпросмотром.',
+
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesSa.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesSa.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesSa.php	(revision 1280)
@@ -0,0 +1,84 @@
+<?php
+/** Sanskrit (संस्कृत)
+  *
+  * @addtogroup Language
+  */
+
+$digitTransformTable = array(
+	'0' => '०',
+	'1' => '१',
+	'2' => '२',
+	'3' => '३',
+	'4' => '४',
+	'5' => '५',
+	'6' => '६',
+	'7' => '७',
+	'8' => '८',
+	'9' => '९',
+);
+
+$linkPrefixExtension = false;
+
+$namespaceNames = array(
+	NS_MEDIA            => 'Media',
+	NS_SPECIAL          => 'Special',
+	NS_MAIN	            => '',
+	NS_TALK	            => 'संभाषणं',
+	NS_USER             => 'योजकः',
+	NS_USER_TALK        => 'योजकसंभाषणं',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK     => '$1संभाषणं',
+	NS_IMAGE            => 'चित्रं',
+	NS_IMAGE_TALK       => 'चित्रसंभाषणं',
+	NS_MEDIAWIKI        => 'MediaWiki',
+	NS_MEDIAWIKI_TALK   => 'MediaWiki_talk',
+	NS_TEMPLATE         => 'Template',
+	NS_TEMPLATE_TALK    => 'Template_talk',
+	NS_HELP             => 'उपकारः',
+	NS_HELP_TALK        => 'उपकारसंभाषणं',
+	NS_CATEGORY         => 'वर्गः',
+	NS_CATEGORY_TALK    => 'वर्गसंभाषणं',
+);
+
+$skinNames = array(
+	'standard' => 'पूर्व',
+	'nostalgia' => 'पुराण',
+	'cologneblue' => 'नील',
+	'davinci' => 'कालिदास',
+	'mono' => 'Mono',
+	'monobook' => 'पुस्तक',
+	'myskin' => 'मे चर्मन्',
+	'chick' => 'Chick'
+);
+
+$messages = array(
+# dates
+'sunday' => 'विश्रामवासरे',
+'monday' => 'सोमवासरे',
+'tuesday' => 'मंगलवासरे',
+'wednesday' => 'बुधवासरे',
+'thursday' => 'गुरुवासरे',
+'friday' => 'शुक्रवासरे',
+'saturday' => 'शनिवासरे',
+'sun' => 'विश्राम',
+'mon' => 'सोम',
+'tue' => 'मंगल',
+'wed' => 'बुध',
+'thu' => 'गुरु',
+'fri' => 'शुक्र',
+'sat' => 'शनि',
+'january' => 'पौषमाघे',
+'february' => 'फाल्गुने',
+'march' => 'फाल्गुनचैत्रे',
+'april' => 'मधुमासे',
+'may_long' => 'वैशाखज्येष्ठे',
+'june' => 'ज्येष्ठाषाढके',
+'july' => 'आषाढश्रावणे',
+'august' => 'नभस्ये',
+'september' => 'भाद्रपदाश्विने',
+'october' => 'अश्विनकार्तिके',
+'november' => 'कार्तिकमार्गशीर्षे',
+'december' => 'मार्गशीर्षपौषे',
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesSc.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesSc.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesSc.php	(revision 1280)
@@ -0,0 +1,654 @@
+<?php
+/**
+  * @addtogroup Language
+  */
+
+$namespaceNames = array(
+	NS_SPECIAL         => 'Speciale',
+	NS_MAIN            => '',
+	NS_TALK            => 'Contièndha',
+	NS_USER            => 'Utente',
+	NS_USER_TALK       => 'Utente_discussioni',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK    => '$1_discussioni',
+	NS_IMAGE           => 'Immàgini',
+	NS_IMAGE_TALK      => 'Immàgini_contièndha'
+);
+
+$dateFormats = array(
+	'mdy time' => 'H:i',
+	'mdy date' => 'M j, Y',
+	'mdy both' => 'H:i, M j, Y',
+
+	'dmy time' => 'H:i',
+	'dmy date' => 'j M Y',
+	'dmy both' => 'H:i, j M Y',
+
+	'ymd time' => 'H:i',
+	'ymd date' => 'Y M j',
+	'ymd both' => 'H:i, Y M j',
+);
+
+$linkTrail = "/^([a-z]+)(.*)\$/sD";
+
+$messages = array(
+# User Toggles
+
+"tog-underline" => "Sottolinea links",
+"tog-highlightbroken" => "Evidenzia i links che puntano ad articoli ancora da scrivere",
+"tog-justify"	=> "Paragrafo: giustificato",
+"tog-hideminor" => "Nascondi le modifiche minori nella pagina \"Modifiche recenti\"",
+"tog-numberheadings" => "Auto-numerazione dei titoli di paragrafo",
+"tog-rememberpassword" => "Ricorda la password (non limitare a una sessione - richiede uso di cookies)",
+"tog-editwidth" => "Casella di edizione ampliata alla massima larghezza",
+"tog-editondblclick" => "Doppio click per modificare l'articolo (richiede JavaScript)",
+"tog-watchdefault" => "Notifica articoli nuovi e modificati",
+"tog-minordefault" => "Indica ogni modifica come minore (solo come predefinito)",
+
+# Dates
+#
+
+'sunday' => "Domiga",
+'monday' => "Lúnis",
+'tuesday' => "Màrtis",
+'wednesday' => "Mércuris",
+'thursday' => "Zóbia",
+'friday' => "Canàbara",
+'saturday' => "Sàudu",
+'january' => "Ghenàlliu",
+'february' => "Fiàrzu",
+'march' => "Màrtu",
+'april' => "Abríli",
+'may_long' => "Màzu",
+'june' => "Làmparas",
+'july' => "Luglio",
+'august' => "Agosto",
+'september' => "Settembre",
+'october' => "Ottobre",
+'november' => "Novembre",
+'december' => "Dicembre",
+'jan' => "Gen",
+'feb' => "Feb",
+'mar' => "Mar",
+'apr' => "Apr",
+'may' => "Mag",
+'jun' => "Giu",
+'jul' => "Lug",
+'aug' => "Ago",
+'sep' => "Set",
+'oct' => "Ott",
+'nov' => "Nov",
+'dec' => "Dic",
+
+# Bits of text used by many pages:
+#
+'mainpage'		=> 'Pàggina principali',
+'about'			=> 'A proposito di',
+'aboutsite'      => 'A proposito di {{SITENAME}}',
+'aboutpage'		=> '{{ns:project}}:About',
+'help'			=> 'Aiuto',
+'helppage'		=> '{{ns:project}}:Aiuto',
+'bugreports'	=> 'Segnalazioni di malfunzionamento',
+'bugreportspage' => '{{ns:project}}:Malfunzionamenti',
+'faq'			=> 'FAQ',
+'faqpage'		=> '{{ns:project}}:FAQ',
+"edithelp"		=> "Guida per la modifica o la scrittura di un articolo",
+"edithelppage"	=> "{{ns:project}}:Come_scrivere_un_articolo",
+"cancel"		=> "Cancella",
+"qbfind"		=> "Trova",
+"qbbrowse"		=> "Sfoglia",
+"qbedit"		=> "Modifica",
+"qbpageoptions" => "Opzioni pagina",
+"qbpageinfo"	=> "Informazioni sulla pagina",
+"qbmyoptions"	=> "Le mie preferenze",
+"mypage"		=> "La mia pagina",
+"mytalk"		=> "Le mie discussioni",
+"currentevents" => "Attualità",
+"errorpagetitle" => "Errore",
+"returnto"		=> "Torna a $1.",
+"tagline"      	=> "Da {{SITENAME}}",
+"whatlinkshere"	=> "Pagine che linkano questa",
+"help"			=> "Aiuto",
+"search"		=> "Cerca",
+"searchbutton"	=> "Cerca",
+"history"		=> "Versioni precedenti",
+"printableversion" => "Versione stampabile",
+"editthispage"	=> "Modifica questo articolo",
+"deletethispage" => "Cancella questa pagina",
+"protectthispage" => "Proteggi questa pagina",
+"unprotectthispage" => "Togli la protezione a questa pagina",
+"talkpage"		=> "Discussione sull'articolo",
+"articlepage"	=> "Leggi articolo",
+"userpage" => "Vedi pagina Utente",
+"projectpage" => "Vedi pagina meta",
+"imagepage" => 	"Vedi pagina immagine",
+"otherlanguages" => "Altre lingue",
+"redirectedfrom" => "(Reindirizzamento da $1)",
+"lastmodifiedat"	=> "Ultima modifica il $2, $1.",
+"viewcount"		=> "Questo articolo è stato letto $1 volte.",
+"protectedpage" => "Pagina protetta",
+"nbytes"		=> "$1 bytes",
+"go"			=> "Vai",
+'searcharticle'			=> "Vai",
+"ok"			=> "OK",
+"retrievedfrom" => "Ricavato da  \"$1\"",
+
+# Main script and global functions
+#
+"nosuchaction"	=> "Operazione non riconosciuta",
+"nosuchactiontext" => "L'operazione richiesta con la URL immessa non è stata riconosciuta dal software di {{SITENAME}}",
+"nosuchspecialpage" => "Nessuna simile pagina speciale è disponibile",
+"nospecialpagetext" => "Hai richiesto una pagina speciale che non è stata riconosciuta dal software di {{SITENAME}}, o che non è disponibile.",
+
+# General errors
+#
+"error"			=> "Errore",
+"databaseerror" => "Errore del database",
+"dberrortext"	=> "Errore di sintassi nella richiesta inoltrata al database.
+L'ultima richiesta inoltrata al database è stata:
+<blockquote><tt>$1</tt></blockquote>
+dalla funzione \"<tt>$2</tt>\".
+MySQL ha restituito un errore \"<tt>$3: $4</tt>\".",
+"noconnect"		=> "Connessione al database fallita su $1",
+"nodb"			=> "Selezione del database $1 fallita",
+"readonly"		=> "Accesso al database temporaneamente disabilitato",
+"enterlockreason" => "Fornisci una spiegazione sui motivi del blocco, includendo le probabili data ed ora di riattivazione o di rimozione del blocco.",
+"readonlytext"	=> "Il database di {{SITENAME}} è al momento bloccato, e non consente nuove immissioni né modifiche, molto probabilmente per manutenzione server, nel qual caso il database sarà presto di nuovo completamente accessibile.
+L/'amministratore di sistema che ha imposto il blocco, ha lasciato questa nota:
+<p>$1",
+"missingarticle" => "Il database non ha trovato il testo di una pagina, che invece avrebbe dovuto trovare, intitolata \"$1\".
+Questo non è un errore del database, ma più probabilmente un problema del software.
+Per favore, segnalate l'accaduto ad un administrator, segnalando la URL e l'ora dell'incidente.",
+"internalerror" => "Errore interno",
+"filecopyerror" => "Non è stato possibile copiare il file \"$1\" come \"$2\".",
+"filerenameerror" => "Non è stato possibile rinominare il file \"$1\" in \"$2\".",
+"filedeleteerror" => "Non è stato possibile cancellare il file \"$1\".",
+"filenotfound"	=> " Non è stato possibile trovare il file \"$1\".",
+"unexpected"	=> "Valore imprevisto: \"$1\"=\"$2\".",
+"formerror"		=> "Errore: il modulo non è stato inviato correttamente",
+"badarticleerror" => "Questa operazione non è consentita su questa pagina.",
+"cannotdelete"	=> "Impossibile cancellare la pagina o l'immagine richiesta.",
+"badtitle"		=> "Titolo non corretto",
+"badtitletext"	=> "La pagina richiesta non è disponibile, potrebbe essere non valida, vuota, o potrebbe trattarsi di un errore in un link interlinguistico o fra diverse versioni di {{SITENAME}}.",
+"perfdisabled" => "Siamo davvero rammaricati, ma questa funzionalità è temporaneamente disabilitata durante le ore di maggiore accesso al database per ragioni di accessibilità al resto del sito! Torna fra le 02:00 e le 14:00 UTC e riprova. Grazie.",
+
+# Login and logout pages
+#
+"logouttitle"	=> "Logout Utente",
+"logouttext"	=> "Logout effettuato.
+Ora puoi continuare ad usare {{SITENAME}} come utente anonimo (ma il tuo indirizzo IP resterà riconoscibile), oppure puoi nuovamente richiedere il login con il precedente username, oppure come uno diverso.",
+
+"welcomecreation" => "<h2>Benvenuto, $1!</h2><p>Il tuo account è stato creato con successo.<br />Grazie per aver scelto di far crescere {{SITENAME}} con il tuo aiuto.<br />Per rendere {{SITENAME}} più tua, e per usarla più scorrevolmente, non dimenticare di personalizzare le tue preferenze.",
+
+"loginpagetitle" => "Login",
+"yourname"		=> "Il tuo  user name",
+"yourpassword"	=> "La tua  password",
+"yourpasswordagain" => "Ripeti la password",
+"remembermypassword" => "Ricorda la mia password per più sessioni (richiede uso dei cookies).",
+"loginproblem"	=> "<b>Si è verificato un errore durante il tuo tentativo di login.</b><br />Riprova, sarai più fortunato!",
+"alreadyloggedin" => "<strong>Ehi, Utente $1, hai già fatto il login, sei già connesso al nostro server!</strong><br />",
+
+"login"			=> "Log in",
+"userlogin"		=> "Log in",
+"logout"		=> "Log out",
+"userlogout"	=> "Log out",
+"createaccount"	=> "Crea nuovo account",
+"badretype"		=> "Le password che hai immesso non coincidono, sono diverse fra loro.",
+"userexists"	=> "Siamo spiacenti. Lo user name che hai scelto è già usato da un altro Utente. Ti preghiamo perciò di voler scegliere uno user name diverso.",
+"youremail"		=> "La tua e-mail",
+"yournick"		=> "Il tuo diminutivo o soprannome (per le firme)",
+"loginerror"	=> "Errore di Login",
+"noname"		=> "Lo user name indicato non è valido, non è possibile creare un account a questo nome.",
+"loginsuccesstitle" => "Login effettuato con successo!",
+"loginsuccess"	=> "Sei stato ammesso alla connessione al server di {{SITENAME}} con il nome utente di \"$1\".",
+"nosuchuser"	=> "Attenzione<br /><br />a seguito di verifica, non ci risulta alcun Utente con il nome di  \"$1\".<br /><br />
+Controlla per favore il nome digitato, oppure usa il modulo qui sotto per creare un nuovo user account.",
+"wrongpassword"	=> "La password immessa non è corretta.<br /><br />Riprova, per favore.",
+"mailmypassword" => "Spediscimi una nuova password in posta elettronica",
+"passwordremindertitle" => "Servizio Password Reminder di {{SITENAME}}",
+"passwordremindertext" => "Qualcuno (probabilmente tu, con indirizzo IP $1)
+ha richiesto l'invio di una nuova password per il login a {{SITENAME}}.
+La password per l'Utente \"$2\" è ora \"$3\".
+Per evidenti ragioni di sicurezza, dovresti fare un log in il prima possibile, e cambiare la password immediatamente.",
+"noemail"		=> "Nessuna casella e-mail risulta registrata per l'Utente \"$1\".",
+"passwordsent"	=> "Una nuova password è stata inviata alla casella e-mail registrata per l'Utente \"$1\".
+Per favore, fai subito un log in non appena la ricevi.",
+
+# Edit pages
+#
+"summary"		=> "Oggetto",
+"minoredit"		=> "Questa è una modifica minore",
+"watchthis"		=> "Tieni d'occhio questo articolo",
+"savearticle"	=> "Salva la pagina",
+"preview"		=> "Anteprima",
+"showpreview"	=> "Visualizza Anteprima",
+"blockedtitle"	=> "Questo User name corrisponde purtroppo ad un Utente che è stato disabilitato alla modifica degli articoli.",
+"blockedtext"	=> "Il tuo User name o il tuo indirizzo IP sono stati bloccati da $1.<br />
+La motivazione del blocco è la seguente:<br />:''$2''<p>Se lo desideri, puoi contattare $1, o uno degli altri
+[[{{ns:project}}:administrators|administrators]] per discutere del blocco.",
+"newarticle"	=> "(Nuovo)",
+"newarticletext" => "Scrivi qui il tuo testo.",
+"noarticletext" => "(L'articolo è vuoto, potresti gentilmente iniziare l'articolo oppure richiedere la cancellazione di questa pagina)",
+"updated"		=> "(Aggiornato)",
+"note"			=> "<strong>Nota:</strong>",
+"previewnote"	=> "Tieni presente che questa è solo una ANTEPRIMA, e che la tua versione non è ancora stata salvata!",
+"previewconflict" => "Questa anteprima rappresenta il testo nella casella di edizione di sopra, l'articolo apparirà n questa forma se sceglierai di salvare la pagina.",
+"editing"		=> "Modifica di $1",
+'editinguser'		=> "Modifica di $1",
+"editconflict"	=> "Conflitto di edizione: $1",
+"explainconflict" => "Qualcun altro ha salvato una sua versione dell'articolo nel tempo in cui tu stavi preparando la tua versione.<br />
+La casella di modifica di sopra contiene il testo dell'articolo nella sua forma attuale (cioè il testo attualmente online). Le tue modifiche sono invece contenute nella casella di modifica inferiore.
+Dovrai inserire, se lo desideri, le tue modifiche nel testo esistente, e perciò scriverle nella casella di sopra.
+<b>Soltanto</b> il testo nella casella di sopra sarà sakvato se premerai il bottone \"Salva\".<br />",
+"yourtext"		=> "Il tuo testo",
+"storedversion" => "Versione in archivio",
+"editingold"	=> "<strong>ATTENZIONE: Stai modificando una versione dell'articolo non aggiornata.
+Se la salvi così, tutti i cambiamenti apportati dopo questa revisione verranno persi per sempre.</strong>",
+"yourdiff"		=> "Differenze",
+/*"copyrightwarning" => "Nota, per favore, che tutti i contributi a {{SITENAME}} si considerano rilasciati sotto licenza di tipo GNU Free Documentation License
+(vedi $1 per maggiori dettagli).
+Se non vuoi che il tuo testo possa essere modificato e ridistribuito da chiunque senza pietà e senza altri limiti, allora non inviarlo a {{SITENAME}}, ma realizza piuttosto un tuo sito web personale.<br />
+Con l'invio di questo testo stai garantendo, a tua responsabilità, che il testo è stato scritto da te personalmente ed originalmente, oppure che è stato copiato da una fonte di publico dominio, o una simile fonte, oppure che hai ottenuto espressa autorizzazione ad usare questo testo e che puoi dimostrarlo.
+<strong>NON USARE MATERIALE COPERTO DA DIRITTO DI AUTORE (COPYRIGHT - (c)) IN MANCANZA DI ESPRESSA AUTORIZZAZIONE!!!</strong>",*/
+
+
+# History pages
+#
+"revhistory"	=> "Cronologia delle versioni di questa pagina.",
+"nohistory"		=> "Cronologia delle versioni di questa pagina non reperibile.",
+"revnotfound"	=> "Versione non trovata",
+"revnotfoundtext" => "La versione precedente di questo articolo che hai richiesto, non è stata trovata.
+Controlla per favore la URL che hai usato per accedere a questa pagina.",
+"loadhist"		=> "Caricamento cronologia di questa pagina",
+"currentrev"	=> "Versione attuale",
+"revisionasof"	=> "Revisione $1",
+"cur"			=> "corr",
+"next"			=> "succ",
+"last"			=> "prec",
+"orig"			=> "orig",
+"histlegend"	=> "Legend: (corr) = differenze con la versione corrente,
+(prec) = differenze con la versione precedente, M = modifica minore",
+
+# Diffs
+#
+"difference"	=> "(Differenze fra le revisioni)",
+"loadingrev"	=> "caricamento revisione per differenze",
+"lineno"		=> "Riga $1:",
+"editcurrent"	=> "Modifica la versione corrente di questa pagina",
+
+# Search results
+#
+"searchresults" => "Risultato della ricerca",
+"searchresulttext" => "Per maggiori informazioni sulla ricerca interna di {{SITENAME}}, vedi [[Project:Ricerca|Ricerca in {{SITENAME}}]].",
+"searchsubtitle"	=> "Richiesta \"[[:$1]]\"",
+"searchsubtitleinvalid"	=> "Richiesta \"$1\"",
+"badquery"		=> "Richiesta mal inoltrata",
+"badquerytext"	=> "La tua richiesta non ha potuto essere processata.
+Questo potrebbe dipendere dall'aver ricercato una parola di meno di tre caratteri.
+Oppure potresti aver scritto male la richiesta, per esempio \"pesce and and azzurro\".
+Per favore, riprova.",
+"matchtotals"	=> "La ricerca per la voce \"$1\" ha trovato<br />$2 riscontri nei titoli degli articoli e<br />$3 riscontri nei testi degli articoli.",
+"titlematches"	=> "Nei titoli degli articoli",
+"notitlematches" => "Voce richiesta non trovata in titoli di articolo",
+"textmatches"	=> "Nel testo degli articoli",
+"notextmatches"	=> "Voce richiesta non trovata in testi di articolo",
+"prevn"			=> "precedenti $1",
+"nextn"			=> "successivi $1",
+"viewprevnext"	=> "Vedi ($1) ($2) ($3).",
+"showingresults" => "Qui di seguito <b>$1</b> risultati, partendo dal numero #<b>$2</b>.",
+"nonefound"		=> "<strong>Nota</strong>: la ricerca di parole troppo comuni, come \"avere\" o \"essere\", che non sono indicizzate, può causare un esito negativo, così come indicare più di un termine da ricercare (solo le pagine che contengano tutti i termini ricercati verrebbero infatti visualizzate fra i risultati).",
+"powersearch" => "Ricerca",
+"powersearchtext" => "
+Cerca fra i campi :<br />
+$1<br />
+$2 Elenca i redirects &nbsp; cerca per $3 $9",
+
+
+# Preferences page
+#
+"preferences"	=> "Preferenze",
+"prefsnologin" => "Non hai eseguito il login",
+"prefsnologintext"	=> "Devi avere eseguito il [[Special:Userlogin|login]]
+per poter personalizzare le tue preferenze.",
+"prefsreset"	=> "Le tue Preferenze sono state ripescate dalla memoria di sistema del potente server di {{SITENAME}}.",
+"qbsettings"	=> "Settaggio della barra menu",
+'qbsettings-none'	=> 'Nessuno',
+'qbsettings-fixedleft'	=> 'Fisso a sinistra',
+'qbsettings-fixedright'	=> 'Fisso a destra',
+'qbsettings-floatingleft'	=> 'Fluttuante a sinistra',
+'qbsettings-floatingright'	=> 'Fluttuante a destra',
+"changepassword" => "Cambia password",
+"skin"			=> "Aspetto",
+"saveprefs"		=> "Salva preferenze",
+"resetprefs"	=> "Resetta preferenze",
+"oldpassword"	=> "Vecchia password",
+"newpassword"	=> "Nuova password",
+"retypenew"		=> "Riscrivi qui la nuova password",
+"textboxsize"	=> "Dimensione della casella di edizione",
+"rows"			=> "Righe",
+"columns"		=> "Colonne",
+"searchresultshead" => "Settaggio delle preferenze per la ricerca",
+"resultsperpage" => "Risultati da visualizzare per pagina",
+"contextlines"	=> "Righe di testo da mostrare per ciascun risultato",
+"contextchars"	=> "Caratteri per linea",
+"stubthreshold" => "Threshold for stub display",
+"recentchangescount" => "Numero di titoli nelle \"modifiche recenti\"",
+"savedprefs"	=> "Le tue preferenze sono state salvate.",
+"timezonetext"	=> "Immetti il numero di ore di differenza fra la tua ora locale e la ora del server (UTC).",
+"localtime"	=> "Ora Locale",
+"timezoneoffset" => "Offset",
+
+# Recent changes
+#
+"recentchanges" => "Ultime Modifiche",
+"rcnote"		=> "Qui di seguito sono elencate le ultime <strong>$1</strong> pagine modificate negli ultimi <strong>$2</strong> giorni.",
+"rcnotefrom"	=> " Qui di seguito sono elencate le modifiche da <b>$2</b> (fino a <b>$1</b>).",
+"rclistfrom"	=> "Mostra modifiche a partire da $1",
+# "rclinks"		=> "Mostra le ultime $1 modifiche nelle ultime $2 ore / negli ultimi $3 giorni",
+"rclinks"		=> " Mostra le ultime $1 modifiche negli ultimi $2 giorni.",
+"diff"			=> "diff",
+"hist"			=> "cron",
+"hide"			=> "nascondi",
+"show"			=> "mostra",
+"minoreditletter" => "M",
+"newpageletter" => "N",
+
+# Upload
+#
+"upload"		=> "Upload file",
+"uploadbtn"		=> "Upload file",
+"reupload"		=> "Ri-upload",
+"reuploaddesc"	=> "Torna al modulo per lo upload.",
+"uploadnologin" => "Devi fare il login per eseguire questa operazione.",
+"uploadnologintext"	=> "Devi eseguire [[Special:Userlogin|il login]]
+per fare lo upload di files.",
+"uploaderror"	=> "Errore di Upload",
+"uploadtext"	=> "'''FERMA!''' Prima di effettuare un upload su {{SITENAME}}, accertati di avere ben letto e soprattutto compreso
+[[Project:Image_use_policy|le regole di {{SITENAME}} sull'uso delle immagini]].
+
+Per visualizzare o cercare immagini precedentemente caricate su {{SITENAME}}, vai alla [[Special:Imagelist|lista delle immagini già caricate]].
+Uploads e cancellazioni delle immagini sono registrati nello
+[[Project:Upload_log|upload log]].
+
+Usa il modulo sottostante per caricare nuovi files immagine da utilizzare per arricchire ed illustrare i tuoi articoli.
+Sulla maggior parte dei browsers, dovresti vedere un bottone con la scritta \"Browse...\" (oppure \"Sfoglia...\", che aprirà una comune finestra di dialogo.
+Scegliendo uno dei files sul tuo PC, il nome di questo file verrà scritto in automatico nella casella di testo a fianco al bottone.
+Devi anche selezionare la casellina nella quale affermi che con questo upload non stai violando nessun copyright.
+Premi poi il bottone \"Upload\" per completare il caricamento.
+Il caricamento può richiedere qualche minuto se hai una connessione ad Internet lenta, o se l'immagine è eccessivamente pesante (sconsigliato).
+
+I formati immagine preferibili sono il JPEG per immagini fotografiche, il PNG
+per disegni ed altre immagini iconiche o simboliche, il OGG per i suoni.
+Per cortesia, rinomina i tuoi files, prima di caricarli, usando un nome il più possibile descrittivo del contenuto, così da evitare confusioni.
+Per inserire la nuova immagine in un articolo, usa semplicemente un link nella forma
+'''<nowiki>[[image:file.jpg]]</nowiki>''' o
+'''<nowiki>[[image:file.png|alt text, testo alternativo]]</nowiki>''' o
+'''<nowiki>[[media:file.ogg]]</nowiki>''' per i suoni.
+
+Tieni presente che, come per tutte le pagine di {{SITENAME}}, chiunque può modificare o sostituire o cancellare i tuoi files ove ritenga che ciò sia negli interessi della nostra enciclopedia. Tieni anche presente che, in caso di abuso, o di sovraccarico sul sistema, potresti essere bloccato (oltre ad essere perseguito per le connesse responsabilità).",
+"uploadlog"		=> "upload log",
+"uploadlogpage" => "Upload_log",
+"uploadlogpagetext" => "Qui di seguito la lista degli ultimi files caricati sul server di {{SITENAME}}.
+Tutti i tempi indicati sono calcolati sul fuso orario del server (UTC).
+<ul>
+</ul>",
+"filename"		=> "Nome del file",
+"filedesc"		=> "Oggetto",
+"copyrightpage" => "{{ns:project}}:Copyrights",
+"copyrightpagename" => "{{SITENAME}} copyright",
+"uploadedfiles"	=> "Files Caricati in {{SITENAME}}",
+"minlength"		=> "I nomi dei file immagine debbono essere lunghi almeno tre caratteri, ma è preferibile usare nomi lumghi, purché descrittivi.",
+"badfilename"	=> "Il nome del file immagine è stato convertito in \"$1\".",
+"badfiletype"	=> "\".$1\" non è un tipo di file raccomandato per le immagini, almeno ai nostri fini.",
+"largefile"		=> "Il peso raccomandato per le immagini deve essere inferiore a 100kb.",
+"successfulupload" => "Caricamento completato",
+"fileuploaded"	=> "File \"$1\" correttamente caricato sul server.
+Segui questo link: ($2) per modificare la pagina di descrizione del file che hai appena caricato, e immetti le informazioni che ritieni opportune (cosa rappresenta, dove lo hai trovato, chi lo ha creato e quando, etc) oltre ad una nota circa la situazione di copyright sul file. Non omettere la nota sul copytright, o il file verrebbe cancellato molto presto.",
+"uploadwarning" => "Avviso di Upload",
+"savefile"		=> "Salva file",
+"uploadedimage" => "caricato \"[[$1]]\"",
+
+# Image list
+#
+"imagelist"		=> "Lista delle immagini",
+"imagelisttext"	=> "Qui di seguito una lista di $1 immagini, ordinate per $2.",
+"getimagelist"	=> "ricerca nella lista delle immagini",
+"ilsubmit"		=> "Cerca",
+"showlast"		=> "Mostra le ultime $1 immagini ordinate per $2.",
+"byname"		=> "nome",
+"bydate"		=> "data",
+"bysize"		=> "peso",
+"imgdelete"		=> "canc",
+"imgdesc"		=> "desc",
+"imglegend"		=> "Legenda: (desc) = mostra/modifica descrizione immagine.",
+"imghistory"	=> "Storia di questa immagine",
+"revertimg"		=> "ripr",
+"deleteimg"		=> "canc",
+"deleteimgcompletely"		=> "canc",
+"imghistlegend" => "Legenda: (cur) = immagine corrente, (canc) = cancella questa vecchia versione, (ripr) = ripristina questa vecchia versione come versione attuale.
+<br /><i>Clicca su una data per vedere tutte le immagini che sono state caricate in quella data </i>.",
+"imagelinks"	=> "Link alle immagini",
+"linkstoimage"	=> "Le pagine seguenti linkano questa immagine:",
+"nolinkstoimage" => "Nessuna pagina linka questa immagine.",
+
+# Statistics
+#
+"statistics"	=> "Statistiche",
+"sitestats"		=> "Statistiche del sito",
+"userstats"		=> "Statistiche del {{SITENAME}}",
+"sitestatstext" => "Ci sono ben <b>$1</b> pagine nel database.
+Questa cifra comprende le pagine \"talk\" (discussione), pagine su {{SITENAME}}, articoli esigui (\"stub\"), redirects, e altre pagine che probabilmente non andrebbero conteggiate fra gli articoli.
+Escludendo queste, ci sono ben  <b>$2</b> pagine che sono con buona probabilità propriamente degli articoli.<p>
+Ci sono state un totale di <b>$3</b> pagine viste, e <b>$4</b> modifiche agli articoli da quando il software è stato potenziato (Dicembre, 2002).
+Questa media rivela che ci sono state una media di  <b>$5</b> modifiche per ciascun articolo, e che l'articolo è stato letto <b>$6</b> volte per ciascuna modifica.",
+"userstatstext" => "Ci sono <b>$1</b> Utenti registrati.
+<b>$2</b> di questi hanno il grado di amministratori (vedi $3).",
+
+# Maintenance Page
+#
+"disambiguations"	=> "Disambiguation pages",
+"disambiguationspage"	=> "{{ns:project}}:Links_to_disambiguating_pages",
+"disambiguationstext"	=> "The following articles link to a <i>disambiguation page</i>. They should link to the appropriate topic instead.<br />A page is treated as dismbiguation if it is linked from $1.<br />Links from other namespaces are <i>not</i> listed here.",
+"doubleredirects"	=> "Doppi Redirects",
+"doubleredirectstext"	=> "<b>Attenzione:</b> Questa lista può talvolta contenere dei risultati non corretti. Ciò potrebbe magari accadere perchè vi sono del testo aggiuntivo o dei link dopo il tag #REDIRECT.<br />\nOgni riga contiene i link al primo ed al secondo redirect, oltre alla prima riga di testo del secondo redirect che di solito contiene il \"reale\" articolo di destinazione, quello al quale anche il primo redirect dovrebbe puntare.",
+"brokenredirects"	=> "Redirects errati",
+"brokenredirectstext"	=> "I seguenti redirects puntano ad articoli non ancora creati.",
+
+
+# Miscellaneous special pages
+#
+"lonelypages"	=> "Pagine solitarie",
+"unusedimages"	=> "Immagini non utilizzate",
+"popularpages"	=> "Pagine più viste",
+"nviews"		=> "$1 visite",
+"wantedpages"	=> "Articoli più richiesti",
+"nlinks"		=> "$1 links",
+"allpages"		=> "Tutte le pagine",
+"randompage"	=> "Una pagina a caso",
+"shortpages"	=> "Pagine corte",
+"longpages"		=> "Pagine lunghe",
+"listusers"		=> "Elenco degli Utenti",
+"specialpages"	=> "Pagine speciali",
+"spheading"		=> "Pagine speciali",
+"recentchangeslinked" => "Modifiche correlate",
+"rclsub"		=> "(alle pagine linkate da \"$1\")",
+"newpages"		=> "Pagine nuove",
+"movethispage"	=> "Sposta questa pagina",
+"unusedimagestext" => "<p>Nota che altri siti web, come la {{SITENAME}} internazionale, potrebbero aver messo un link ad una immagine per mezzo di una URL diretta, perciò le immagini potrebbero essere listate qui anche essendo magari in uso.",
+
+# Email this user
+#
+"mailnologin"	=> "No send address",
+"mailnologintext" => "Devi fare il [[Special:Userlogin|login]]
+ed aver registrato una valida casella e-mail nelle tue [[Special:Preferences|preferenze]] per mandare posta elettronica ad altri Utenti.",
+"emailuser"		=> "Manda una E-mail a questo Utente",
+"emailpage"		=> "E-mail user",
+"emailpagetext"	=> "Se questo Utente ha registrato una valida casella e-mail, il modulo qui sotto ti consentirà di scrivergli un solo messaggio.
+La e-mail che hai indicato nelle tue preferenze apparirà nel campo \"From\" della mail, così che il destinatario possa, solo se lo desidera però, risponderti.",
+"noemailtitle"	=> "Nessun indirizzo e-mail",
+"noemailtext"	=> "Questo Utente non ha registrato alcuna casella e-mail,
+oppure ha scelto di non ricevere  posta elettronica dagli altri Utenti.",
+"emailfrom"		=> "From",
+"emailto"		=> "To",
+"emailsubject"	=> "Subject",
+"emailmessage"	=> "Message",
+"emailsend"		=> "Send",
+"emailsent"		=> "E-mail inviata",
+"emailsenttext" => "La tua e-mail è stata inviata.",
+
+# Watchlist
+#
+"watchlist"		=> "Osservati Speciali",
+"mywatchlist"		=> "Osservati Speciali",
+"nowatchlist"	=> "Non hai indicato articoli da tenere d'occhio.",
+"watchnologin"	=> "Manca il login",
+"watchnologintext"	=> "Devi prima fare il [[Special:Userlogin|login]]
+per modificare la tua lista di osservati speciali.",
+"addedwatch"	=> "Aggiunto agli Osservati Speciali",
+"addedwatchtext" => " La pagina  \"$1\" è stata aggiunta alla tua [[Special:Watchlist|lista di osservati speciali]].
+Le future modifiche a questa pagina ed alla relativa pagina di discussione saranno elencate qui, e la pagina apparirà in <b>grassetto</b> nella pagina delle [[Special:Recentchanges|modifiche recenti]] per essere più facile da tener d'occhio.
+
+Se in seguito vorrai togliere questo articolo dalla tua lista di osservati speciali, clicca \" Smetti di seguire \" nella barra dei menu.",
+"removedwatch"	=> "Rimosso dalla lista degli Osservati Speciali",
+"removedwatchtext" => "La pagina  \"$1\" è stata rimossa dalla lista degli Osservati Speciali.",
+"watchthispage"	=> "Segui questo articolo",
+"unwatchthispage" => "Smetti di seguire",
+"notanarticle"	=> "Non è un articolo",
+
+
+# Delete/protect/revert
+#
+"deletepage"	=> "Cancella pagina",
+"confirm"		=> "Conferma",
+"confirmdelete" => "Conferma cancellazione",
+"deletesub"		=> "(Cancellazione di \"$1\")",
+"confirmdeletetext" => "Stai per cancellare permanentemente dal database una pagina o una immagine, insieme a tutta la sua cronologia.
+Per cortesia, conferma che è tua intenzione procedere a tale cancellazione, conferma che hai piena consapevolezza delle conseguenze della tua azione, e conferma che la tua azione è pienamente ottemperante alle regole stabilite nella
+[[{{ns:project}}:Policy]].",
+"actioncomplete" => "Azione completata",
+"deletedtext"	=> "La pagina \"$1\" è stata cancellata.
+Vedi $2 per un elenco delle pagine cancellate di recente.",
+"deletedarticle" => "Cancellata \"$1\"",
+"dellogpage"	=> "Deletion_log",
+"dellogpagetext" => "Qui di seguito, un elenco delle pagine cancellate di recente.
+Tutti i tempi sono in ora del server (UTC).
+<ul>
+</ul>",
+"deletionlog"	=> "deletion log",
+"reverted"		=> "Ripristinata versione precedente",
+"deletecomment"	=> "Motivazione della cancellazione",
+"imagereverted" => "Versione precedente correttamente ripristinata.",
+"rollback"		=> "Usa una revisione precdente",
+"cantrollback"	=> "Impossibile tornare ad una versione precedente: l'ultima modifica è stata apportata dall'unico utente che abbia lavorato a questo articolo.",
+"revertpage"	=> "Riportata alla revisione precedente da $1",
+
+# Undelete
+"undelete" => "Recupera una pagina cancellata",
+"undeletepage" => "Vedi e recupera pagine cancellate",
+"undeletepagetext" => "Le pagine qui di seguito indicate sono state cancellate, ma sono ancora in archivio e pertanto possono essere recuperate. L'archivio viene svuotato periodicamente.",
+"undeletearticle" => "Recupera un articolo cancellato",
+"undeleterevisions" => "$1 revisioni in archivio",
+"undeletehistory" => "Se recuperi questo articolo, tutte le sue revisioni verranno recuperate nella relativa cronologia.
+Se una nuova pagina è stata creata con questo stesso nome dopo la cancellazione, le revisioni recuperate saranno inserite nella cronologia e la versione attualmente online della pagina non verrà modificata.",
+"undeleterevision" => "Cancellata revisione $1",
+"undeletebtn" => "RIPRISTINA!",
+"undeletedarticle" => "Recuperata \"$1\"",
+
+# Contributions
+#
+"contributions"	=> "Contributi di questo Utente",
+"contribsub2"	=> "Per $1 ($2)",
+"nocontribs"	=> "Nessuna modifica trovata conformemente a questi criteri.",
+"ucnote"		=> "Qui sotto troverai le ultime <b>$1</b> modifiche effettuate da questo Utente negli ultimi <b>$2</b> giorni.",
+"uclinks"		=> "Vedi le ultime $1 modifiche; vedi gli ultimi $2 giorni.",
+"uctop"		=> " (ultima per la pagina)" ,
+
+# What links here
+#
+"whatlinkshere"	=> "Pagine che linkano questa",
+"notargettitle" => "Dati mancanti",
+"notargettext"	=> "Non hai specificato una pagina o un Utente in relazione al quale eseguire l'operazione richiesta.",
+"linklistsub"	=> "(Lista di links)",
+"linkshere"		=> "Le seguenti pagine contengono link che puntano qui:",
+"nolinkshere"	=> "Nessuna pagina contiene links che puntano a questa.",
+"isredirect"	=> "redirect",
+
+# Block/unblock IP
+#
+"blockip"		=> "Blocca indirizzo IP",
+"blockiptext"	=> "Usa il modulo sottostante per bloccare l'accesso con diritto di scrittura da uno specifico indirizzo IP.
+Questo blocco deve essere operato SOLO per prevenire atti di vandalismo, ed in stretta osservanza dei principi tutti della [[{{ns:project}}:Policy|policy di {{SITENAME}}]]. Il blocco non può in nessun caso essere applicato per motivi ideologici.
+Scrivi un motivo specifico per il quale questo indirizzo IP dovrebbe a tuo avviso essere bloccato (per esempio, cita i titoli di pagine eventualmente già oggetto di vandalismo editoriale).",
+"ipaddress"		=> "Indirizzo IP (IP Address)",
+"ipbreason"		=> "Motivazione",
+"ipbsubmit"		=> "Blocca questo indirizzo IP",
+"badipaddress"	=> "L'indirizzo IP indicato non è corretto.",
+"blockipsuccesssub" => "Blocco eseguito",
+"blockipsuccesstext" => " L'indirizzo IP \"$1\" è stato bloccato.
+<br />Vedi [[Special:Ipblocklist|lista IP bloccati]].",
+"unblockip"		=> " Sblocca indirizzo IP",
+"unblockiptext"	=> "Usa il modulo sottostante per restituire il diritto di scrittura ad un indirizzo IP precedentemente bloccato.",
+"ipusubmit"		=> "Sblocca questo indirizzo IP",
+"ipblocklist"	=> "Lista degli indirizzi IP bloccati",
+"blocklistline"	=> "$1, $2 ha bloccato $3 ($4)",
+"blocklink"		=> "blocca",
+"unblocklink"	=> "sblocca",
+"contribslink"	=> "contributi",
+
+# Developer tools
+#
+"lockdb"		=> "Blocca il database",
+"unlockdb"		=> "Sblocca il database",
+"lockdbtext"	=> "Bloccare il database sospenderà la possibilità per tutti gli Utenti di modificare le pagine o di crearne di nuove, di cambiare le loro preferenze, di modificare le loro liste di Osservati Speciali, ed in genere non consentirà a nessuno di eseguire operazioni che richiedano modifiche del database.<br /><br />
+Per cortesia, conferma che questo è effettivamente quanto tu intendi ora effettuare e, soprattutto, che il prima possibile sbloccherai nuovamente il database, ripristinandone la corretta funzionalità, non appena avrai terminato le tue manutenzioni.",
+"unlockdbtext"	=> "Sbloccare il database ripristinerà la possibilità per tutti gli Utenti di modificare le pagine o di crearne di nuove, di cambiare le loro preferenze, di modificare le loro liste di Osservati Speciali, ed in genere di eseguire operazioni che richiedano modifiche del database.
+Per cortesia, conferma che questo è effettivamente quanto tu intendi ora effettuare.",
+"lockconfirm"	=> "Sì, effettivamente intendo, sotto la mia responsabilità, bloccare il database.",
+"unlockconfirm"	=> " Sì, effettivamente intendo, sotto la mia responsabilità, sbloccare il database.",
+"lockbtn"		=> "Blocca il database",
+"unlockbtn"		=> "Sblocca il database",
+"locknoconfirm" => "Non hai spuntato la casellina di conferma.",
+"lockdbsuccesssub" => "Blocco del database eseguito",
+"unlockdbsuccesssub" => "Sblocco del database eseguito, rimosso blocco",
+"lockdbsuccesstext" => "Il database di {{SITENAME}} è stato bloccato.
+<br />Ricordati di rimuovere il blocco non appena avrai terminatoi le tue manutenzioni.",
+"unlockdbsuccesstext" => " Il database di {{SITENAME}} è stato sbloccato.",
+
+# Move page
+#
+"movepage"		=> "Spostamento di pagina",
+"movepagetext"	=> "Con il modulo sottostante puoi rinominare una pagina, spostando anche tutta la sua cronologia al nuovo nome.
+Il vecchior titolo diverrà automaticamente un redirect che punta al nuovo titolo.
+I link alla vecchia pagina non saranno aggiornati (e punteranno quindi al redirect); accertati di [[Special:Manutenzioni|controllare con cura]] che non si creino doppi redirects o redirects interrotti.
+Resta nella tua responsabilità di accertarti che i link continuino a puntare verso dove devono dirigersi.
+
+Nota bene: la pagina '''non''' sarà spostata se vi fosse già un articolo con il nuovo nome, a meno che non sia una pagina vuota o un redirect e che non abbia cronologia. Questo significa che, se commetti un errore, puoi nuovamente rinominare una pagina col vecchio titolo, ma non puoi sovrascrivere una pagina già esistente.
+
+<b>ATTENZIONE!</b>
+Questo cambiamento drastico potrebbe creare inattesi contrattempi, specialmente se si tratta di una pagina molto visitata. Accertati di aver ben valutato le conseguenze dello spostamento, prima di procedere. Nel dubbio, contatta un Amministratore.",
+"movepagetalktext" => "La corrispondente pagina di discussione, se esiste, sarà spostata automaticamente insieme all'articolo, '''tranne che nei seguenti casi:'''
+*Spostamento della pagina fra i namespaces,
+*Una pagina di discussione (non vuota) già esiste per il nuovo nome, oppure
+*Hai deselezionato la casellina qui sotto.
+
+In questi casi, se lo ritieni opportuno, dovrai spostare o aggiungere manualmente la pagina di discussione.",
+"movearticle"	=> "Rinomina articolo",
+"movenologin"	=> "Non hai effettuato il login",
+"movenologintext" => "Devi essere un Utente registrato ed aver effettuato il [[Special:Userlogin|login]]
+per poter spostare una pagina.",
+"newtitle"		=> "Al nuovo titolo di",
+"movepagebtn"	=> "Sposta questa pagina",
+"pagemovedsub"	=> "Spostamento effettuato con successo",
+"pagemovedtext" => "Pagina \"[[$1]]\" rinominata in \"[[$2]]\".",
+"articleexists" => "Una pagina con questo nome esiste già, oppure il nome che hai scelto non è valido.<br />
+Scegli, per cortesia, un titolo diverso per l'articolo.",
+"talkexists"	=> "La pagina è stata spostata correttamente, ma la pagina di dicussione non poteva essere spostata perché ne esiste già un'altra con il nuovo titolo. Per favore, modifica manualmente i contenuti delle due pagine discussione, così da mantenerle entrambe per non perdere potenzialmente interessanti riflessioni.",
+"movedto"		=> "spostata a",
+"movetalk"		=> "Sposta anche la corrispondente pagina \"discussione\", se possibile.",
+"talkpagemoved" => "Anche la corrispondente pagina di discussione è stata spostata.",
+"talkpagenotmoved" => "La corrispondente pagina di discussione <strong>non è stata spostata</strong>."
+
+);
+
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesScn.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesScn.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesScn.php	(revision 1280)
@@ -0,0 +1,85 @@
+<?php
+/** Sicilian (Sicilianu)
+ *
+ * @addtogroup Language
+ *
+ * @author Niklas Laxström
+ */
+
+//$fallback = 'it';
+
+$messages = array(
+'mainpage' => 'Pàggina principali',
+
+'portal'          => 'Porta dâ cumunità',
+'portal-url'      => 'Project:Porta dâ cumunità',
+'help'            => 'Aiutu',
+'sitesupport'     => 'Dunazzioni',
+'sitesupport-url' => 'Project:Dunazzioni',
+'mytalk'          => 'discursu miu',
+'navigation'      => 'Navigazzioni',
+
+'currentevents'     => 'Nutizzî',
+'currentevents-url' => 'Project:Nutizzî',
+
+'search'           => 'Trova',
+'history_short'    => 'storia',
+'printableversion' => 'Virsioni stampàbbili',
+'permalink'        => 'Liami pirmanenti',
+'edit'             => 'cancia',
+'delete'           => 'elìmina',
+'protect'          => 'pruteggi',
+'talk'             => 'discussioni',
+'toolbox'          => 'Strummenta',
+'otherlanguages'   => 'Àutri lingui',
+
+# Short words for each namespace, by default used in the 'article' tab in monobook
+'nstab-main'      => 'artìculu',
+'nstab-special'   => 'spiciali',
+'nstab-mediawiki' => 'missagiu',
+
+# General errors
+'viewsource' => 'Talìa la fonti',
+
+# Login and logout pages
+'userlogin'  => 'Riggìstrati o trasi',
+'userlogout' => 'Nesci',
+
+# Edit pages
+'savearticle' => 'sarva la pàggina',
+
+# Preferences page
+'preferences' => 'prifirenzi',
+
+# Recent changes
+'recentchanges' => 'Ùrtimi canciamenti',
+
+# Miscellaneous special pages
+'allpages'            => 'Tutti li paggini',
+'randompage'          => 'Na pàggina ammuzzu',
+'specialpages'        => 'Pàggini spiciali',
+'recentchangeslinked' => 'Canciamenti culligati',
+
+'version' => 'virsioni',
+
+# E-mail user
+'emailuser' => "Manna n'imail a stu utenti",
+
+# Watchlist
+'watchlist' => 'Lista taliata mia',
+'mywatchlist' => 'Lista taliata mia',
+'watch'     => 'talìa',
+
+# Contributions
+'contributions' => 'cuntribbuti',
+'mycontris'     => 'Li mei cuntribbuti',
+
+# What links here
+'whatlinkshere' => 'Chi punta ccà',
+
+# Namespace 8 related
+'allmessages' => 'Missaggi di sistema',
+
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesSd.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesSd.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesSd.php	(revision 1280)
@@ -0,0 +1,11 @@
+<?php
+/** Sindhi language file ( सिनधि )
+  *
+  * @addtogroup Language
+  */
+
+#FIXME: inherit almost everything for now
+
+$rtl = true;
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesSk.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesSk.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesSk.php	(revision 1280)
@@ -0,0 +1,2293 @@
+<?php
+/**
+ * Slovak (Slovenčina)
+ *
+ * @addtogroup Language
+ *
+ * Translators: Valasek, helix84, Palica, Liso, Maros
+ */
+
+$datePreferences = array(
+	'default',
+	'dmyt',
+	'short dmyt',
+	'tdmy',
+	'short dmyt',
+	'ISO 8601',
+);
+
+$datePreferenceMigrationMap = array(
+	'default',
+	'dmyt',
+	'short dmyt',
+	'tdmy',
+	'short tdmy',
+);
+
+$dateFormats = array(
+	/*
+	'Default',
+	'15. január 2001 16:12',
+	'15. jan. 2001 16:12',
+	'16:12, 15. január 2001',
+	'16:12, 15. jan. 2001',
+	'ISO 8601' => '2001-01-15 16:12:34'*/
+
+	'dmy time' => 'H:i',
+	'dmy date' => 'j. F Y',
+	'dmy both' => 'H:i, j. F Y',
+
+	'dmyt time' => 'H:i',
+	'dmyt date' => 'j. F Y',
+	'dmyt both' => 'j. F Y H:i',
+
+	'short dmyt time' => 'H:i',
+	'short dmyt date' => 'j. M. Y',
+	'short dmyt both' => 'j. M. Y H:i',
+
+	'tdmy time' => 'H:i',
+	'tdmy date' => 'j. F Y',
+	'tdmy both' => 'H:i, j. F Y',
+
+	'short tdmy time' => 'H:i',
+	'short tdmy date' => 'j. M. Y',
+	'short tdmy both' => 'H:i, j. M. Y',
+	
+);
+
+$bookstoreList = array(
+	'Bibsys' => 'http://ask.bibsys.no/ask/action/result?cmd=&kilde=biblio&fid=isbn&term=$1',
+	'BokBerit' => 'http://www.bokberit.no/annet_sted/bocker/$1.html',
+	'Bokkilden' => 'http://www.bokkilden.no/ProductDetails.aspx?ProductId=$1',
+	'Haugenbok' => 'http://www.haugenbok.no/searchresults.cfm?searchtype=simple&isbn=$1',
+	'Akademika' => 'http://www.akademika.no/sok.php?isbn=$1',
+	'Gnist' => 'http://www.gnist.no/sok.php?isbn=$1',
+	'Amazon.co.uk' => 'http://www.amazon.co.uk/exec/obidos/ISBN=$1',
+	'Amazon.de' => 'http://www.amazon.de/exec/obidos/ISBN=$1',
+	'Amazon.com' => 'http://www.amazon.com/exec/obidos/ISBN=$1'
+);
+
+# Note to translators:
+# Please include the English words as synonyms. This allows people
+# from other wikis to contribute more easily.
+#
+$magicWords = array(
+	# ID CASE SYNONYMS
+	'redirect'   => array( 0, '#redirect', '#presmeruj' ),
+	'notoc'   => array( 0, '__NOTOC__', '__BEZOBSAHU__' ),
+	'forcetoc'   => array( 0, '__FORCETOC__', '__VYNÚŤOBSAH__' ),
+	'toc'   => array( 0, '__TOC__', '__OBSAH__' ),
+	'noeditsection'   => array( 0, '__NOEDITSECTION__', '__NEUPRAVUJSEKCIE__' ),
+	'start'   => array( 0, '__START__', '__ŠTART__' ),
+	'currentmonth'   => array( 1, 'CURRENTMONTH', 'MESIAC' ),
+	'currentmonthname'   => array( 1, 'CURRENTMONTHNAME', 'MENOMESIACA' ),
+	'currentmonthnamegen'   => array( 1, 'CURRENTMONTHNAMEGEN', 'MENOAKTUÁLNEHOMESIACAGEN' ),
+	'currentmonthabbrev'     => array( 1, 'CURRENTMONTHABBREV', 'MENOAKTUÁLNEHOMESIACASKRATKA' ),
+	'currentday'   => array( 1, 'CURRENTDAY', 'AKTUÁLNYDEŇ' ),
+	'currentdayname'   => array( 1, 'CURRENTDAYNAME', 'MENOAKTUÁLNEHODŇA' ),
+	'currentyear'   => array( 1, 'CURRENTYEAR', 'AKTUÁLNYROK' ),
+	'currenttime'   => array( 1, 'CURRENTTIME', 'AKTUÁLNYČAS' ),
+	'numberofarticles'   => array( 1, 'NUMBEROFARTICLES', 'POČETČLÁNKOV' ),
+	'pagename'   => array( 1, 'PAGENAME', 'MENOSTRÁNKY' ),
+	'pagenamee'   => array( 1, 'PAGENAMEE' ),
+	'namespace'   => array( 1, 'NAMESPACE', 'MENNÝPRIESTOR' ),
+	'msg'   => array( 0, 'MSG:', 'SPRÁVA:' ),
+	'subst'   => array( 0, 'SUBST:' ),
+	'msgnw'   => array( 0, 'MSGNW:' ),
+	'img_thumbnail'   => array( 1, 'thumbnail', 'thumb', 'náhľad', 'náhľadobrázka' ),
+	'img_right'   => array( 1, 'right', 'vpravo' ),
+	'img_left'   => array( 1, 'left', 'vľavo' ),
+	'img_none'   => array( 1, 'none', 'žiadny' ),
+	'img_width'   => array( 1, '$1px', '$1bod' ),
+	'img_center'   => array( 1, 'center', 'centre', 'stred' ),
+	'img_framed'   => array( 1, 'framed', 'enframed', 'frame', 'rám' ),
+	'int'   => array( 0, 'INT:' ),
+	'sitename'   => array( 1, 'SITENAME', 'MENOLOKALITY' ),
+	'ns'   => array( 0, 'NS:', 'MP:' ),
+	'localurl'   => array( 0, 'LOCALURL:' ),
+	'localurle'   => array( 0, 'LOCALURLE:' ),
+	'server'   => array( 0, 'SERVER' ),
+	'grammar'   => array( 0, 'GRAMMAR:', 'GRAMATIKA:' ),
+	'notitleconvert'   => array( 0, '__NOTITLECONVERT__', '__NOTC__' ),
+	'nocontentconvert'   => array( 0, '__NOCONTENTCONVERT__', '__NOCC__' ),
+	'currentweek'   => array( 1, 'CURRENTWEEK', 'AKTUÁLNYTÝŽDEŇ' ),
+	'currentdow'   => array( 1, 'CURRENTDOW' ),
+	'revisionid'   => array( 1, 'REVISIONID' ),
+);
+
+$namespaceNames = array(
+	NS_MEDIA          => 'Médiá',
+	NS_SPECIAL        => 'Špeciálne',
+	NS_MAIN           => '',
+	NS_TALK           => 'Diskusia',
+	NS_USER           => 'Redaktor',
+	NS_USER_TALK      => 'Diskusia_s_redaktorom',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK   => 'Diskusia_k_{{grammar:datív|$1}}',
+	NS_IMAGE          => 'Obrázok',
+	NS_IMAGE_TALK     => 'Diskusia_k_obrázku',
+	NS_MEDIAWIKI      => 'MediaWiki',
+	NS_MEDIAWIKI_TALK => 'Diskusia_k_MediaWiki',
+	NS_TEMPLATE       => 'Šablóna',
+	NS_TEMPLATE_TALK  => 'Diskusia_k_šablóne',
+	NS_HELP           => 'Pomoc',
+	NS_HELP_TALK      => 'Diskusia_k_pomoci',
+	NS_CATEGORY       => 'Kategória',
+	NS_CATEGORY_TALK  => 'Diskusia_ku_kategórii'
+);
+
+# Compatbility with old names
+$namespaceAliases = array(
+	"Komentár"               => NS_TALK,
+	"Komentár_k_redaktorovi" => NS_USER_TALK,
+	"Komentár_k_Wikipédii"   => NS_PROJECT_TALK,
+	"Komentár_k_obrázku"     => NS_IMAGE_TALK,
+	"Komentár_k_MediaWiki"   => NS_MEDIAWIKI_TALK,
+);
+
+$separatorTransformTable = array(
+	',' => "\xc2\xa0",
+	'.' => ','
+);
+
+$linkTrail = '/^([a-záäčďéíľĺňóôŕšťúýž]+)(.*)$/sDu';
+
+$messages = array(
+# User preference toggles
+'tog-underline'               => 'Podčiarkovať odkazy',
+'tog-highlightbroken'         => 'Neexistujúce odkazy formátovať <a href="" class="new">takto</a> (alternatívne: takto<a href="" class="internal">?</a>).',
+'tog-justify'                 => 'Zarovnávať okraje odstavcov',
+'tog-hideminor'               => 'V posledných úpravách nezobrazovať drobné úpravy',
+'tog-extendwatchlist'         => 'Rozšír zoznam sledovaných, aby ukazoval všetky súvisiace zmeny',
+'tog-usenewrc'                => 'Špeciálne zobrazenie posledných úprav (vyžaduje JavaScript)',
+'tog-numberheadings'          => 'Automaticky číslovať odstavce',
+'tog-showtoolbar'             => 'Zobraziť nástrojový panel úprav',
+'tog-editondblclick'          => 'Upravuj stránky po dvojitom kliknutí (JavaScript)',
+'tog-editsection'             => 'Umožniť úpravu sekcie pomocu odkazov [upraviť]',
+'tog-editsectiononrightclick' => 'Umožni upravovať sekcie po kliknutí pravým tlačidlom na nadpisy sekcií (JavaScript)',
+'tog-showtoc'                 => 'Zobraz obsah (pre stránky s viac ako 3 nadpismi)',
+'tog-rememberpassword'        => 'Zapamätať si heslo na tomto počítači',
+'tog-editwidth'               => 'Maximálna šírka okna na úpravy',
+'tog-watchcreations'          => 'Pridať stránky, ktoré vytvorím, automaticky medzi sledované',
+'tog-watchdefault'            => 'Pridávať stránky, ktoré upravujem, automaticky medzi sledované',
+'tog-watchmoves'              => 'Pridať stránky, ktoré presuniem, do môjho zoznamu sledovaných',
+'tog-watchdeletion'           => 'Pridať stránky, ktoré zmažem, do môjho zoznamu sledovaných',
+'tog-minordefault'            => 'Označovať všetky zmeny štandardne ako drobné',
+'tog-previewontop'            => 'Zobrazuj ukážku pred oknom na úpravy, a nie až za ním',
+'tog-previewonfirst'          => 'Zobraziť náhľad pred prvou úpravou',
+'tog-nocache'                 => 'Zakázať priebežné ukladanie stránok vyrovnávacej pamäte',
+'tog-enotifwatchlistpages'    => 'Pošli mi email keď sa stránka zmení',
+'tog-enotifusertalkpages'     => 'Pošli mi email po zmene mojej používateľskej diskusnej stránky',
+'tog-enotifminoredits'        => 'Pošli mi email aj o drobných úpravách stránok',
+'tog-enotifrevealaddr'        => 'Zobraz moju emailovú adresu v notifikačných emailoch',
+'tog-shownumberswatching'     => 'Zobraz počet sledujúcich používateľov',
+'tog-fancysig'                => 'Nespracovávať podpisy (bez automatických odkazov)',
+'tog-externaleditor'          => 'Používaj štandardne externý editor',
+'tog-externaldiff'            => 'Používaj štandardne externý diff',
+'tog-showjumplinks'           => 'Používaj odkazy „skočiť na“ pre lepšiu dostupnosť',
+'tog-uselivepreview'          => 'Používať živý náhľad (JavaScript) (experimentálna funkcia)',
+'tog-forceeditsummary'        => 'Upozorni ma, keď neuvádzam zhrnutie úprav',
+'tog-watchlisthideown'        => 'Skryť moje úpravy zo zoznamu sledovaných',
+'tog-watchlisthidebots'       => 'Skryť úpravy botov zo zoznamu sledovaných',
+'tog-watchlisthideminor'      => 'Skryť drobné úpravy zo zoznamu sledovaných',
+'tog-nolangconversion'        => 'Vypni konverziu variantov',
+'tog-ccmeonemails'            => 'Pošli mi kópie mojich emailov, ktoré pošlem ostatným používateľom',
+'tog-diffonly'                => 'Nezobrazovať obsah stránky pod rozdielmi',
+
+'underline-always'  => 'Vždy',
+'underline-never'   => 'Nikdy',
+'underline-default' => 'Štandardné nastavenie prehliadača',
+
+'skinpreview' => '(Náhľad)',
+
+# Dates
+'sunday'        => 'nedeľa',
+'monday'        => 'pondelok',
+'tuesday'       => 'utorok',
+'wednesday'     => 'streda',
+'thursday'      => 'štvrtok',
+'friday'        => 'piatok',
+'saturday'      => 'sobota',
+'sun'           => 'Ned',
+'mon'           => 'Pon',
+'tue'           => 'Uto',
+'wed'           => 'Str',
+'thu'           => 'Štv',
+'fri'           => 'Pia',
+'sat'           => 'Sob',
+'january'       => 'január',
+'february'      => 'február',
+'march'         => 'marec',
+'april'         => 'apríl',
+'may_long'      => 'máj',
+'june'          => 'jún',
+'july'          => 'júl',
+'august'        => 'august',
+'september'     => 'september',
+'october'       => 'október',
+'november'      => 'november',
+'december'      => 'december',
+'january-gen'   => 'januára',
+'february-gen'  => 'februára',
+'march-gen'     => 'marca',
+'april-gen'     => 'apríla',
+'may-gen'       => 'mája',
+'june-gen'      => 'júna',
+'july-gen'      => 'júla',
+'august-gen'    => 'augusta',
+'september-gen' => 'septembra',
+'october-gen'   => 'októbra',
+'november-gen'  => 'novembra',
+'december-gen'  => 'decembra',
+'jan'           => 'jan',
+'feb'           => 'feb',
+'mar'           => 'mar',
+'apr'           => 'apr',
+'may'           => 'máj',
+'jun'           => 'jún',
+'jul'           => 'júl',
+'aug'           => 'aug',
+'sep'           => 'sep',
+'oct'           => 'okt',
+'nov'           => 'nov',
+'dec'           => 'dec',
+
+# Bits of text used by many pages
+'categories'            => '{{PLURAL:$1|Kategória|Kategórie|Kategórie}}',
+'pagecategories'        => '{{PLURAL:$1|Kategória|Kategórie|Kategórie}}',
+'category_header'       => 'stránky v kategórii „$1“',
+'subcategories'         => 'Podkategórie',
+'category-media-header' => 'Multimediálne súbory v kategórii "$1"',
+
+'mainpagetext'      => 'Wiki softvér bol úspešne nainštalovaný.',
+'mainpagedocfooter' => 'Informácie ako používať wiki softvér nájdete v [http://meta.wikimedia.org/wiki/Help:Contents Používateľskej príručke].
+
+== Začíname ==
+
+* [http://www.mediawiki.org/wiki/Help:Configuration_settings Zoznam konfiguračných nastavení]
+* [http://www.mediawiki.org/wiki/Help:FAQ MediaWiki FAQ]
+* [http://mail.wikimedia.org/mailman/listinfo/mediawiki-announce mailing list nových verzií MediaWiki]',
+
+'about'          => 'Projekt',
+'article'        => 'Stránka s obsahom',
+'newwindow'      => '(otvorí v novom okne)',
+'cancel'         => 'Zrušiť',
+'qbfind'         => 'Hľadať',
+'qbbrowse'       => 'Listovať',
+'qbedit'         => 'Upraviť',
+'qbpageoptions'  => 'Možnosti stránky',
+'qbpageinfo'     => 'Informácie o stránke',
+'qbmyoptions'    => 'Moje nastavenia',
+'qbspecialpages' => 'Špeciálne stránky',
+'moredotdotdot'  => 'Viac...',
+'mypage'         => 'Moja stránka',
+'mytalk'         => 'Moja diskusia',
+'anontalk'       => 'Diskusia k tejto IP adrese',
+'navigation'     => 'Navigácia',
+
+# Metadata in edit box
+'metadata_help' => 'Metadáta:',
+
+'errorpagetitle'    => 'Chyba',
+'returnto'          => 'Späť na $1.',
+'tagline'           => 'Z {{GRAMMAR:genitív|{{SITENAME}}}}',
+'help'              => 'Pomoc',
+'search'            => 'Hľadaj',
+'searchbutton'      => 'Hľadaj',
+'go'                => 'Choď',
+'searcharticle'     => 'Choď',
+'history'           => 'história stránky',
+'history_short'     => 'História',
+'updatedmarker'     => 'aktualizované od mojej poslednej návštevy',
+'info_short'        => 'Informácie',
+'printableversion'  => 'Verzia na tlač',
+'permalink'         => 'Trvalý odkaz',
+'print'             => 'Tlač',
+'edit'              => 'upraviť',
+'editthispage'      => 'Upravuj túto stránku',
+'delete'            => 'Vymazať',
+'deletethispage'    => 'Vymazať túto stránku',
+'undelete_short'    => 'Obnov $1 úprav',
+'protect'           => 'Zamknúť',
+'protect_change'    => 'zmeniť zamknutie',
+'protectthispage'   => 'Zamkni túto stránku',
+'unprotect'         => 'Odomknúť',
+'unprotectthispage' => 'Odomkni túto stránku',
+'newpage'           => 'Nová stránka',
+'talkpage'          => 'Diskusia k stránke',
+'talkpagelinktext'  => 'Diskusia',
+'specialpage'       => 'Špeciálna stránka',
+'personaltools'     => 'Osobné nástroje',
+'postcomment'       => 'Pridaj komentár',
+'articlepage'       => 'Zobraz stránku',
+'talk'              => 'Diskusia',
+'views'             => 'Zobrazení',
+'toolbox'           => 'Nástroje',
+'userpage'          => 'Zobraz stránku používateľa',
+'projectpage'       => 'Zobraz projektovú stránku',
+'imagepage'         => 'Zobraz popisnú stránku obrázka',
+'mediawikipage'     => 'Zobraz stránku so správou',
+'templatepage'      => 'Zobraziť stránku šablóny',
+'viewhelppage'      => 'Zobraziť stránku Pomocníka',
+'categorypage'      => 'Zobraz stránku kategórie',
+'viewtalkpage'      => 'Zobraz diskusiu k stránke',
+'otherlanguages'    => 'Iné jazyky',
+'redirectedfrom'    => '(Presmerované z $1)',
+'redirectpagesub'   => 'Presmerovacia stránka',
+'lastmodifiedat'    => 'Čas poslednej úpravy tejto stránky je $2, $1.', # $1 date, $2 time
+'viewcount'         => 'Táto stránka bola navštívená $1-krát.',
+'protectedpage'     => 'Zamknutá stránka',
+'jumpto'            => 'Skoč na:',
+'jumptonavigation'  => 'navigácia',
+'jumptosearch'      => 'hľadanie',
+
+# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
+'aboutsite'         => 'O {{GRAMMAR:lokál|{{SITENAME}}}}',
+'aboutpage'         => 'Project:Úvod',
+'bugreports'        => 'Oznámenia o chybách',
+'bugreportspage'    => 'Project:Oznámenia o chybách',
+'copyright'         => 'Obsah je k dispozícii za licenčných podmienok $1.',
+'copyrightpagename' => 'autorské práva {{GRAMMAR:genitív|{{SITENAME}}}}',
+'copyrightpage'     => 'Project:Autorské práva',
+'currentevents'     => 'Aktuality',
+'currentevents-url' => 'Aktuality',
+'disclaimers'       => 'Vylúčenie zodpovednosti',
+'disclaimerpage'    => 'Project:Vylúčenie zodpovednosti',
+'edithelp'          => 'Ako upravovať stránku',
+'edithelppage'      => '{{ns:help}}:Ako upravovať stránku',
+'faq'               => 'Často kladené otázky',
+'faqpage'           => 'Project:Často_kladené_otázky',
+'helppage'          => '{{ns:help}}:Obsah',
+'mainpage'          => 'Hlavná stránka',
+'policy-url'        => 'Project:Zásady a smernice',
+'portal'            => 'Portál komunity',
+'portal-url'        => 'Project:Portál komunity',
+'privacy'           => 'Ochrana osobných údajov',
+'privacypage'       => 'Project:Ochrana osobných údajov',
+'sitesupport'       => 'Podpora',
+'sitesupport-url'   => 'Project:Podpora',
+
+'badaccess'        => 'Chyba povolenia',
+'badaccess-group0' => 'Nemáte povolenie na vykonanie požadovanej akcie.',
+'badaccess-group1' => 'Akciu, ktorú požadujete môže vykonať iba člen skupiny $1.',
+'badaccess-group2' => 'Akciu, ktorú požadujete môže vykonať iba člen jednej zo skupín $1.',
+'badaccess-groups' => 'Akciu, ktorú požadujete môže vykonať iba člen jednej zo skupín $1.',
+
+'versionrequired'     => 'Požadovaná verzia MediaWiki $1',
+'versionrequiredtext' => 'Na použitie tejto stránky je požadovaná verzia MediaWiki $1. Pozri [[Special:Version]]',
+
+'ok'                  => 'OK',
+'pagetitle'           => '$1 - {{SITENAME}}',
+'retrievedfrom'       => 'Zdroj: "$1"',
+'youhavenewmessages'  => 'Máte $1 ($2).',
+'newmessageslink'     => 'nové správy',
+'newmessagesdifflink' => 'diff s predposlednou revíziou',
+'editsection'         => 'úprava',
+'editold'             => 'upraviť',
+'editsectionhint'     => 'Upravuj sekciu: $1',
+'toc'                 => 'Obsah',
+'showtoc'             => 'zobraziť',
+'hidetoc'             => 'skryť',
+'thisisdeleted'       => 'Zobraziť alebo obnoviť $1?',
+'viewdeleted'         => 'Zobraziť $1?',
+'restorelink'         => '{{PLURAL:$1|jedna zmazaná úprava|$1 zmazané úpravy|$1 zmazaných úprav}}',
+'feedlinks'           => 'Kanál:',
+'feed-invalid'        => 'Neplatný typ feedu.',
+
+# Short words for each namespace, by default used in the 'article' tab in monobook
+'nstab-main'      => 'Stránka',
+'nstab-user'      => 'Stránka redaktora',
+'nstab-media'     => 'Médiá',
+'nstab-special'   => 'Špeciálne',
+'nstab-project'   => 'Projektová stránka',
+'nstab-image'     => 'Súbor',
+'nstab-mediawiki' => 'Správa',
+'nstab-template'  => 'Šablóna',
+'nstab-help'      => 'Pomoc',
+'nstab-category'  => 'Kategória',
+
+# Main script and global functions
+'nosuchaction'      => 'Takáto akcia neexistuje',
+'nosuchactiontext'  => 'Softvér MediaWiki nepozná akciu,
+ktorú vyžadujete pomocou URL.',
+'nosuchspecialpage' => 'Takáto špeciálna stránka neexistuje',
+'nospecialpagetext' => 'Softvér MediaWiki nepozná takúto špeciálnu stránku, zoznam špeciálnych stránok nájdete na [[Special:Specialpages]].',
+
+# General errors
+'error'                => 'Chyba',
+'databaseerror'        => 'Chyba v databáze',
+'dberrortext'          => 'Nastala syntaktická chyba v príkaze na prehľadávanie databázy.
+Posledný pokus o prehľadávanie bol:
+<blockquote><tt>$1</tt></blockquote>
+z funkcie "<tt>$2</tt>".
+MySQL vrátil chybu "<tt>$3: $4</tt>".',
+'dberrortextcl'        => 'Nastala syntaktická chyba pri dotaze do databázy.
+Posledný pokus o dotaz do databázy znel:
+"$1"
+z funkcie "$2".
+MySQL vrátil chybu "$3: $4".',
+'noconnect'            => 'Prepáčte! Wiki má technické problémy a nemôže kontaktovať databázový server. <br />
+$1',
+'nodb'                 => 'Neviem vybrať databázu $1',
+'cachederror'          => 'Nasledujúca stránka je odložená kópia vyžiadanej stránky a nemusí byť aktuálna.',
+'laggedslavemode'      => 'Varovanie: Je možné, že stránka neobsahuje posledné aktualizácie.',
+'readonly'             => 'Databáza je zamknutá',
+'enterlockreason'      => 'Zadajte dôvod požadovaného zamknutia vrátane odhadu, kedy očakávate odomknutie',
+'readonlytext'         => 'Databáza je momentálne zamknutá, nové stránky a úpravy sú zablokované, pravdepodobne z dôvodu údržby databázy. Po skončení tejto údržby bude {{SITENAME}} opäť fungovať normálne.
+
+Správca, ktorý nariadil uzamknutie, uvádza tento dôvod: $1',
+'missingarticle'       => 'Databáza nenašla text stránky, ktorý by mala nájsť, menovite "$1".
+
+Toto je zvyčajne zapríčinené odkazovaním na staršie verzie alebo odkazom na stránku, ktorý bol zmazaný.
+
+Ak to nie je ten prípad, možno ste našli chybu s softvéri. Prosím ohláste túto chybu správcovi, uveďte aj názov stránky - odkaz (URL).',
+'readonly_lag'         => 'Databáza bola automaticky zamknutá pokým záložné databázové servery nedoženú hlavný server',
+'internalerror'        => 'Vnútorná chyba',
+'filecopyerror'        => 'Neviem skopírovať súbor "$1" na "$2".',
+'filerenameerror'      => 'Neviem premenovať súbor "$1" na "$2".',
+'filedeleteerror'      => 'Neviem vymazať súbor "$1".',
+'filenotfound'         => 'Neviem nájsť súbor "$1".',
+'unexpected'           => 'Nečakaná hodnota: "$1"="$2".',
+'formerror'            => 'Chyba: neviem spracovať formulár',
+'badarticleerror'      => 'Na tejto stránke túto akciu nemožno vykonať.',
+'cannotdelete'         => 'Neviem zmazať danú stránku alebo súbor. (Možno už bol zmazaný niekým iným.)',
+'badtitle'             => 'Neplatný nadpis',
+'badtitletext'         => 'Požadovaný nadpis bol neplatný, nezadaný, alebo nesprávne odkazovaný z inej jazykovej verzie {{GRAMMAR:genitív|{{SITENAME}}}}. Mohol tiež obsahovať jeden alebo viac znakov, ktoré nie je možné použiť v nadpisoch.',
+'perfdisabled'         => 'Prepáčte! Táto funkcia bola dočasne vypnutá,
+pretože tak spomaľuje databázu, že nikto nemôže používať
+wiki.',
+'perfdisabledsub'      => 'Tu je uložená kópia z $1:', # obsolete?
+'perfcached'           => '<span style="color:#ff0000"><strong>Nasledujúce dáta sú z dočasnej pamäte a nemusia byť úplne aktuálne:</strong></span>',
+'perfcachedts'         => 'Nasledujúce údaje pochádzajú z cache a naposledy boli aktualizované $1.',
+'querypage-no-updates' => 'Aktualizácie tejto stránky sú momentálne vypnuté. Tieto dáta sa v súčasnosti nebudú obnovovať.',
+'wrong_wfQuery_params' => 'Nesprávny parameter pre wfQuery()<br />
+Funkcia: $1<br />
+Požiadavka: $2',
+'viewsource'           => 'Zobraz zdroj',
+'viewsourcefor'        => '$1',
+'protectedpagetext'    => 'Táto stránka bola zamknutá aby sa zamedzilo úpravám.',
+'viewsourcetext'       => 'Môžete si zobraziť a kopírovať zdroj tejto stránky:',
+'protectedinterface'   => 'Táto stránka poskytuje text používateľského rozhrania a je zamknutá aby sa predišlo jej zneužitiu.',
+'editinginterface'     => "'''Varovanie:''' Upravujete stránku, ktorá poskytuje text používateľského rozhrania. Zmeny tejto stránky ovplyvnia vzhľad používateľského rozhrania ostatných používateľov.",
+'sqlhidden'            => '(SQL príkaz na prehľadávanie je skrytý)',
+'cascadeprotected'     => 'Bolo táto stránka bola zamknutá proti úpravám, pretože je použitá na nasledovných stránkach, ktoré sú zamknuté voľbou "kaskádového zamknutia":',
+
+# Login and logout pages
+'logouttitle'                => 'Odhlásiť používateľa',
+'logouttext'                 => 'Práve ste sa odhlásili.
+Odteraz môžete používať {{GRAMMAR:akuzatív|{{SITENAME}}}} ako anonymný používateľ alebo sa môžete
+opäť prihlásiť pod rovnakým alebo odlišným používateľským menom. Uvedomte si, že niektoré stránky sa môžu
+naďalej zobrazovať ako keby ste boli prihlásený, až kým nevymažete
+vyrovnávaciu pamäť vášho prehliadača.',
+'welcomecreation'            => '== Vitaj, $1! ==
+
+Vaše konto je vytvorené. Nezabudnite si nastaviť svoje používateľské nastavenia.',
+'loginpagetitle'             => 'Prihlásenie používateľa',
+'yourname'                   => 'Vaše redaktorské meno',
+'yourpassword'               => 'Vaše heslo',
+'yourpasswordagain'          => 'Zopakujte heslo',
+'remembermypassword'         => 'Pamätať si heslo aj po vypnutí počítača.',
+'yourdomainname'             => 'Vaša doména',
+'externaldberror'            => 'Buď nastala chyba externej autentifikačnej databázy alebo Vám nie je povolené aktualizovať Váš externý účet.',
+'loginproblem'               => '<b>Nastal problém pri vašom prihlasovaní.</b><br />Skúste znova!',
+'alreadyloggedin'            => "'''Užívateľ $1, vy už ste prihlásený!'''<br />",
+'login'                      => 'Prihlásiť',
+'loginprompt'                => 'Na prihlásenie do {{GRAMMAR:genitív|{{SITENAME}}}} musíte mať zapnuté koláčiky (cookies).',
+'userlogin'                  => 'Vytvorenie konta / prihlásenie',
+'logout'                     => 'Odhlásenie',
+'userlogout'                 => 'Odhlásiť',
+'notloggedin'                => 'Neprihlásený/á',
+'nologin'                    => 'Nemáte ešte účet? $1.',
+'nologinlink'                => 'Vytvoriť nový účet',
+'createaccount'              => 'Vytvoriť nový účet',
+'gotaccount'                 => 'Máte už vytvorený účet? $1.',
+'gotaccountlink'             => 'Prihlásiť',
+'createaccountmail'          => 'e-mailom',
+'badretype'                  => 'Zadané heslá nie sú rovnaké.',
+'userexists'                 => 'Zadané používateľské meno už používa niekto iný. Zadajte iné meno.',
+'youremail'                  => 'Váš e-mail²',
+'username'                   => 'Používateľské meno:',
+'uid'                        => 'ID užívateľa:',
+'yourrealname'               => 'Skutočné meno *:',
+'yourlanguage'               => 'Jazyk:',
+'yourvariant'                => 'Variant jazyka',
+'yournick'                   => 'Prezývka:',
+'badsig'                     => 'Neplatný podpis v pôvodnom tvare; skontrolujte HTML tagy.',
+'email'                      => 'E-mail',
+'prefs-help-email-enotif'    => 'Táto adresa sa používa aj na posielanie e-mailových upozornení, ak ste túto možnosť povolili.',
+'prefs-help-realname'        => '¹ Skutočné meno (nepovinné): ak sa rozhodnete ho poskytnúť, bude použité na označenie Vašej práce.',
+'loginerror'                 => 'Chyba pri prihlasovaní',
+'prefs-help-email'           => '² E-mail (nepovinné): Umožní iným ľuďom kontaktovať Vás z Vašej užívateľskej a diskusnej, bez potreby uverejňovania Vašej e-mailovej adresy a môže byť použité na poslanie nového hesla, ak zabudnete pôvodné.',
+'nocookiesnew'               => 'Používateľské konto bolo vytvorené, ale nie ste prihlásený. {{SITENAME}} používa koláčiky (cookies) na prihlásenie. Máte koláčiky (cookies) vypnuté. Zapnite ich a potom sa prihláste pomocou vášho nového používateľského mena a hesla.',
+'nocookieslogin'             => '{{SITENAME}} používa koláčiky (cookies) na prihlásenie. Vy máte koláčiky vypnuté. Prosíme, zapnite ich a skúste znovu.',
+'noname'                     => 'Nezadali ste platné používateľské meno.',
+'loginsuccesstitle'          => 'Prihlásenie úspešné',
+'loginsuccess'               => 'Teraz ste prihlásený do {{GRAMMAR:genitív|{{SITENAME}}}} ako "$1".',
+'nosuchuser'                 => 'Používateľské meno "$1" neexistuje. Skontrolujte preklepy alebo sa prihláste ako nový používateľ pomocou dolu zobrazeného formulára.',
+'nosuchusershort'            => 'V súčasnosti neexistuje používateľ s menom "$1". Skontrolujte preklepy.',
+'nouserspecified'            => 'Musíte uviesť meno používateľa.',
+'wrongpassword'              => 'Zadané heslo je nesprávne. Skúste  znovu.',
+'wrongpasswordempty'         => 'Zadané heslo bolo prázdne. Skúste prosím znova.',
+'mailmypassword'             => 'Pošlite mi e-mailom dočasné heslo',
+'passwordremindertitle'      => 'Oznámenie o hesle z {{GRAMMAR:genitív|{{SITENAME}}}}',
+'passwordremindertext'       => 'Niekto (pravdepodobne vy, z IP adresy $1)
+požiadal, aby sme vám zaslali nové prihlasovacie heslo do {{GRAMMAR:genitív|{{SITENAME}}}} ($4).
+Heslo pre používateľa "$2" je teraz "$3".
+Teraz by ste sa mali prihlásiť a zmeniť vaše heslo.
+
+Ak túto požiadavku poslal niekto iný alebo ste si spomenuli svoje heslo a neželáte
+si ho zmeniť, môžete túto správu ignorovať a naďalej používať svoje staré heslo.',
+'noemail'                    => 'Používateľ "$1" nezadal e-mailovú adresu.',
+'passwordsent'               => 'Nové heslo bolo zaslané na e-mailovú adresu
+používateľa "$1".
+Prosím, prihláste sa znovu, keď ho obdržíte.',
+'blocked-mailpassword'       => 'Boli zablokované úpravy z vašej IP adresy, a tak nie je dovolené použiť funkciu znovuvyžiadania hesla, aby sa zabránilo zneužitiu.',
+'eauthentsent'               => 'Email s potvrdením bol zaslaný na uvedenú emailovú adresu.
+Predtým ako sa na účet pošle akákoľvek ďalšia pošta, musíte splniť inštrukcie v emaili, aby sa potvrdilo, že účet je skutočne Váš.',
+'throttled-mailpassword'     => 'V priebehu posledných $1 hodín už došlo k vyžiadaniu hesla.
+Aby sa zabránilo zneužitiu, vyžiadanie hesla je možné vykonať iba raz za $1 hodín.',
+'mailerror'                  => 'Chyba pri posielaní e-mailu: $1',
+'acct_creation_throttle_hit' => 'Prepáčte, už máte vytvorených $1 účtov. Nemôžete ich z tejto IP adresy vytvoriť za 24 hodín viac. Toto je opatrenie proti vandalizmu.',
+'emailauthenticated'         => 'Vaša e-mailová adresa bola overená na $1.',
+'emailnotauthenticated'      => 'Vaša e-mailová adresa ešte nebola overená. Preto nemôžete prijať emaily pre žiadnu z nasledovných funkcií.',
+'noemailprefs'               => '<strong>Nezadali ste žiadnu e-mailovú adresu</strong>, nasledujúce
+nástroje nebudú prístupné.',
+'emailconfirmlink'           => 'Potvrďte vašu e-mailovú adresu',
+'invalidemailaddress'        => 'E-mailovú adresu nemožno akceptovať, pretože sa zdá, že má neplatný formát. Zadajte dobre naformátovanú adresu alebo nechajte príslušné políčko prázdne.',
+'accountcreated'             => 'Účet vytvorený',
+'accountcreatedtext'         => 'Používateľský účet pre $1 bol vytvorený.',
+
+# Password reset dialog
+'resetpass'               => 'Zmeniť heslo k účtu',
+'resetpass_announce'      => 'Prishlásili ste sa pomocou dočasného emailom zaslaného kódu. Pre dokončenie prihlásenia je potrebné tu nastaviť nové heslo:',
+'resetpass_text'          => '<!-- Pridajte text sem -->',
+'resetpass_header'        => 'Zmeniť heslo',
+'resetpass_submit'        => 'Nastaviť heslo a prihlásiť sa',
+'resetpass_success'       => 'Vaše heslo bolo úspešne zmenené! Prebieha prihlasovanie...',
+'resetpass_bad_temporary' => 'Neplatné dočasné heslo. Možno ste už úspešne zmenili svoje heslo alebo vyžiadali nové dočasné heslo.',
+'resetpass_forbidden'     => 'Heslá na tejto wiki nie je možné zmeniť',
+'resetpass_missing'       => 'Chýbajú údaje formulára.',
+
+# Edit page toolbar
+'bold_sample'     => 'Tučný text',
+'bold_tip'        => 'Tučný text',
+'italic_sample'   => 'Kurzíva',
+'italic_tip'      => 'Kurzíva',
+'link_sample'     => 'Názov odkazu',
+'link_tip'        => 'Interný odkaz',
+'extlink_sample'  => 'http://www.example.com názov odkazu',
+'extlink_tip'     => 'Externý odkaz (nezabudnite na predponu http://)',
+'headline_sample' => 'Text nadpisu',
+'headline_tip'    => 'Text nadpisu úrovne 2',
+'math_sample'     => 'Sem vložte vzorec',
+'math_tip'        => 'Matematický vzorec (LaTeX)',
+'nowiki_sample'   => 'Sem vložte neformátovaný text',
+'nowiki_tip'      => 'Ignoruj wiki formátovanie',
+'image_sample'    => 'Príklad.jpg',
+'image_tip'       => 'Vložený obrázok',
+'media_sample'    => 'Príklad.ogg',
+'media_tip'       => 'Odkaz na media súbor',
+'sig_tip'         => 'Váš podpis s dátumom a časom',
+'hr_tip'          => 'Vodorovná čiara (radšej ju nepoužívajte)',
+
+# Edit pages
+'summary'                   => 'Zhrnutie úprav',
+'subject'                   => 'Téma/nadpis',
+'minoredit'                 => 'Toto je drobná úprava',
+'watchthis'                 => 'Sledovať úpravy tejto stránky',
+'savearticle'               => 'Uložiť stránku',
+'preview'                   => 'Náhľad',
+'showpreview'               => 'Zobraziť náhľad',
+'showlivepreview'           => 'Živý náhľad',
+'showdiff'                  => 'Zobraziť rozdiely',
+'anoneditwarning'           => 'Nie ste [[Special:Userlogin|prihlásený]]. Vaša IP adresa bude zaznamenaná v <span class="plainlinks"> [{{fullurl:{{FULLPAGENAME}}|action=history}} histórii úprav]</span> tejto stránky.',
+'missingsummary'            => "'''Upozornenie:''' Neposkytli ste zhrnutie úprav. Ak kliknete znova na Uložiť, Vaše úpravy sa uložia bez zhrnutia úprav.",
+'missingcommenttext'        => 'Prosím, dolu napíšte komentár.',
+'missingcommentheader'      => "'''Pripomienka:''' Neposkutli ste predmet/hlavičku tohto komentára. Ak znova kliknete na tlačidlo Uložiť, vaša úprava sa uloží bez nej.",
+'summary-preview'           => 'Náhľad zhrnutia',
+'subject-preview'           => 'Náhľad predmetu/hlavičky',
+'blockedtitle'              => 'Používateľ je zablokovaný',
+'blockedtext'               => 'Vaše používateľské meno alebo IP adresu zablokoval $1.
+Udáva tento dôvod:<br />\'\'$2\'\'
+
+Môžete kontaktovať $1 alebo s jedného z ďalších 
+[[{{MediaWiki:grouppage-sysop}}|správcov]] a prediskutovať blokovanie.
+
+Uvedomte si, že nemôžete použiť funkciu "Pošli e-mail používateľovi", pokiaľ nemáte registrovanú platnú e-mailovú adresu vo vašich [[Special:Preferences|nastaveniach]].
+
+Vaša IP adresa je $3 a ID blokovania je #$5. Prosíme, zahrňte oba tieto údaje do každej správy, ktorú posielate.',
+'blockedoriginalsource'     => "Zdroj '''$1''' je zobrazený nižšie:",
+'blockededitsource'         => "Text '''Vašich úprav''' stránky '''$1''' je zobrazený nižšie:",
+'whitelistedittitle'        => 'Na úpravu je nutné prihlásenie',
+'whitelistedittext'         => 'Na úpravu stránok sa musíte najskôr $1.',
+'whitelistreadtitle'        => 'Je potrebné sa prihlásiť, aby ste mohli čítať',
+'whitelistreadtext'         => 'Na čítanie stránok musíte byť [[Special:Userlogin|prihlásený/á]]',
+'whitelistacctitle'         => 'Nemáte dovolené vytvorenie konta',
+'whitelistacctext'          => 'Ak chcete na tejto Wiki vytvárať účty, musíte sa [[Special:Userlogin|prihlásiť]] a mať príslušné oprávnenia.',
+'confirmedittitle'          => 'Aby ste mohli upravovať je potrebné potvrdenie e-mailu',
+'confirmedittext'           => 'Pred úpravami stránok musíte potvrdiť vašu emailovú adresu. Prosím, nastavte a overte svoju emailovú adresu v [[Special:Preferences|používateľských nastaveniach]].',
+'nosuchsectiontitle'        => 'Sekcia neexistuje',
+'nosuchsectiontext'         => 'Pokúšali ste sa upravovať sekciu, ktorá neexistuje. Keďže sekcia $1 neexistuje, nie je kam uložiť vašu úpravu.',
+'loginreqtitle'             => 'Nutné prihlásenie',
+'loginreqlink'              => 'prihlásiť',
+'loginreqpagetext'          => 'Na prezeranie ďalších stránok sa musíte $1.',
+'accmailtitle'              => 'Heslo bolo odoslané.',
+'accmailtext'               => "Heslo pre '$1' bolo poslané na $2.",
+'newarticle'                => '(Nový)',
+'newarticletext'            => "Sledovali ste odkaz na stránku, ktorá zatiaľ neexistuje.
+Stránku vytvoríte tak, že začnete písať do dolného poľa a potom stlačíte tlačidlo \"Ulož stránku\".
+(Viac informácií nájdete na stránkach [[{{MediaWiki:helppage}}|Pomocníka]]).
+Ak ste sa sem dostali nechtiac, iba kliknite na tlačidlo '''späť''' vo svojom prehliadači.",
+'anontalkpagetext'          => "<br />
+----
+''Toto je diskusná stránka anonymného používateľa, ktorý nemá vytvorené svoje konto alebo ho nepoužíva. Preto musíme na jeho identifikáciu použiť numerickú IP adresu. Je možné, že takúto IP adresu používajú viacerí používatelia. Ak ste anonymný používateľ a máte pocit, že vám boli adresované irelevantné diskusné príspevky, zriaďte si konto alebo sa prihláste ([[Special:Userlogin|Zriadenie konta alebo prihlásenie]]), aby sa zamedzilo budúcim zámenám s inými anonymnými používateľmi''",
+'noarticletext'             => 'Na tejto stránke sa momentálne nenachádza žiadny text. Môžete [[Special:Search/{{PAGENAME}}|vyhľadávať názov tejto stránky]] v obsahu iných stránok alebo [{{fullurl:{{FULLPAGENAME}}|action=edit}} upravovať túto stránku].',
+'clearyourcache'            => "'''Poznámka:''' Aby sa zmeny prejavili, po uložení musíte vymazať vyrovnávaciu pamäť vášho prehliadača: '''Mozilla / Firefox / Safari:''' držte stlačený ''Shift'' a kiknite na ''Reload'' alebo stlačte ''Ctrl-Shift-R'' (''Cmd-Shift-R'' na Apple Mac); '''IE:''' držte ''Ctrl'' a kliknite na ''Refresh'' alebo stlačte ''Ctrl-F5''; '''Konqueror:''': jednoducho kliknite na tlačidlo ''Reload'' alebo stlačte ''F5''; Používatelia '''Opery''' možno budú musieť úplne vymazať vyrovnávaciu pamäť prehliadača v ponuke ''Tools→Preferences''.",
+'usercssjsyoucanpreview'    => "<strong>Tip:</strong> Použite tlačítko 'Zobraz náhľad' na otestovanie Vášho nového CSS/JS pred uložením.",
+'usercsspreview'            => "'''Nezabudnite, že toto je iba náhľad Vášho užívateľského CSS, ešte nebolo uložené!'''",
+'userjspreview'             => "'''Nezabudnite, že iba testujete/náhľad vášho užívateľského JavaScriptu, ešte nebol uložený!'''",
+'userinvalidcssjstitle'     => "'''Varovanie:''' Neexistuje skin \"\$1\". Pamätajte, že vlastné .css a .js stránky používajú názov s malými písmenami, napr. {{ns:user}}:Foo/monobook.css na rozdiel od {{ns:user}}:Foo/Monobook.css.",
+'updated'                   => '(Aktualizovaný)',
+'note'                      => '<strong>Poznámka: </strong>',
+'previewnote'               => '<strong>Nezabudnite, toto je len náhľad vami upravovanej stránky. Zmeny ešte nie sú uložené!</strong>',
+'previewconflict'           => 'Tento náhľad upravenej stránky zobrazuje text z horného poľa s textom tak, ako sa zobrazí potom, keď ju uložíte.',
+'session_fail_preview'      => '<strong>Prepáčte, nemohli sme spracovať Váš príspevok kvôli strate údajov relácie (session). Skúste to prosím ešte raz. Ak to nebude fungovať, skúste sa odhlásiť a znovu prihlásiť.</strong>',
+'session_fail_preview_html' => "<strong>Prepáčte! Nemohli sme spracovať Vašu úpravu kvôli strate údajov relácie.</strong>
+
+''Pretože táto wiki má použitie HTML umožnené, náhľad sa nezobrazí (prevencia pred JavaScript útokmi).''
+
+<strong>Ak je toto legitímny pokus o úpravu, skúste prosím znova. Ak to stále nefunguje, skúste sa odhlásiť a znovu prihlásiť.</strong>",
+'importing'                 => 'Importuje sa $1',
+'editing'                   => 'Úprava stránky $1',
+'editinguser'               => 'Úprava stránky $1',
+'editingsection'            => 'Úprava stránky $1 (sekcia)',
+'editingcomment'            => 'Úprava stránky $1 (komentár)',
+'editconflict'              => 'Konflikt pri úprave: $1',
+'explainconflict'           => 'Niekto iný zmenil túto stránku, zatiaľ čo
+ste ju upravovali vy.
+Horné okno na úpravy obsahuje text stránky tak, ako je momentálne platný.
+Vaše úpravy sú uvedené v dolnom okne na úpravy.
+Budete musieť zlúčiť vaše zmeny s existujúcim textom.
+<b>Iba</b> obsah horného okna sa uloží, keď
+stlačíte "Ulož stránku".<br />',
+'yourtext'                  => 'Váš text',
+'storedversion'             => 'Uložená verzia',
+'nonunicodebrowser'         => '<strong>UPOZORNENIE: Váš prehliadač nepodporuje unicode. Dočasným riešením ako bezpečne upravovať stránky je, že ne-ASCII znaky sa v upravovacom textovom poli zobrazia ako zodpovedajúce hexadecimálne hodnoty.</strong>',
+'editingold'                => '<strong>POZOR: Upravujete starú
+verziu tejto stránky. Ak vašu úpravu uložíte, prepíšete tým všetky úpravy, ktoré nasledovali po tejto starej verzii.</strong>',
+'yourdiff'                  => 'Rozdiely',
+'copyrightwarning'          => 'Nezabudnite, že všetky príspevky do {{GRAMMAR:genitív|{{SITENAME}}}} sa považujú za príspevky pod licenciou $2 (podrobnosti pozri pod $1). Ak nechcete, aby bolo to, čo ste napísali, neúprosne upravované a ďalej ľubovoľne rozširované, tak sem váš text neumiestňujte.<br />
+
+Týmto sa právne zaväzujete, že ste tento text buď napísali sám, alebo že je skopírovaný
+z voľného diela (public domain) alebo podobného zdroja neobmedzeného autorskými právami.
+<strong>NEUMIESTŇUJTE TU BEZ POVOLENIA DIELA CHRÁNENÉ AUTORSKÝM PRÁVOM!</strong>',
+'copyrightwarning2'         => 'Prosím uvedomte si, že všetky príspevky do {{GRAMMAR:genitív|{{SITENAME}}}} môžu byť upravované, skracované alebo odstránené inými prispievateľmi. Ak nechcete, aby Vaše texty boli menené, tak ich tu neuverejňujte.<br />
+
+Týmto sa právne zaväzujete, že ste tento text buď napísali sám, alebo že je skopírovaný
+z voľného diela (public domain) alebo podobného zdroja neobmedzeného autorskými právami (podrobnosti: $1).
+<strong>NEUMIESTŇUJTE SEM BEZ POVOLENIA DIELA CHRÁNENÉ AUTORSKÝM PRÁVOM!</strong>',
+'longpagewarning'           => '<strong>POZOR: Táto stránka má $1 kilobajtov; niektoré
+prehliadače by mohli mať problémy s úpravou stránok, ktorých veľkosť sa blíži k alebo presahuje 32kb.
+Zvážte, či by nebolo možné rozdeliť stránku na menšie sekcie.</strong>',
+'longpageerror'             => '<strong>CHYBA: Text, ktorý ste poslali má $1 kilobajtov, čo je viac ako maximum $2 kilobajtov. Nie je možné ho uložiť.</strong>',
+'readonlywarning'           => '<strong>POZOR: Databáza bola počas upravovania stránky zamknutá z dôvodu údržby,
+takže stránku momentálne nemôžete uložiť. Môžete skopírovať a vložiť
+text do textového súboru a uložiť si ho na neskôr.</strong>',
+'protectedpagewarning'      => '<strong>POZOR: Táto stránka bola zamknutá, takže ju môžu upravovať iba používatelia s oprávnením správcu.</strong>',
+'semiprotectedpagewarning'  => "'''Poznámka:''' Táto stránka bola zamknutá tak, aby ju mohli upravovať iba registrovaní používatelia.",
+'cascadeprotectedwarning'   => "'''Upozornenie:''' Táto stránka bola zamknutá (takže ju môžu upravovať iba používatelia s privilégiami správcu), pretože je použitá na nasledovných stránkach s kaskádovým zamknutím:",
+'templatesused'             => 'Šablóny použité na tejto stránke:',
+'templatesusedpreview'      => 'Šablóny použité v tomto náhľade:',
+'templatesusedsection'      => 'Šablóny použité v tejto sekcii:',
+'template-protected'        => '(zamknutá)',
+'template-semiprotected'    => '(čiastočne zamknutá)',
+'edittools'                 => '<!-- Tento text sa zobrazí pod upravovacím a nahrávacím formulárom. -->',
+'nocreatetitle'             => 'Tvorba nových stránok bola obmedzená',
+'nocreatetext'              => 'Na tejto stránke je tvorba nových stránok obmedzená.
+Teraz sa môžete vrátiť späť a upravovať existujúcu stránku alebo [[Special:Userlogin|sa prihlásiť alebo vytvoriť účet]].',
+
+# "Undo" feature
+'undo-success' => 'Úpravu nie je možné vrátiť. Prosím skontrolujte tento rozdiel, čím overíte, že táto úprava je tá, ktorú chcete, a následne uložte zmeny, čím ukončíte vrátenie.',
+'undo-failure' => 'Úpravu nie je možné vrátiť kvôli konfliktným medziľahlým úpravám.',
+'undo-summary' => 'Používateľ [[Special:Contributions/$2]] ([[User talk:$2]]) vrátil revíziu $1',
+
+# Account creation failure
+'cantcreateaccounttitle' => 'Nedá sa vytvoriť účet',
+'cantcreateaccounttext'  => 'Vytvorenie účtu z tejto IP adresy (<b>$1</b>) bolo zablokované. Pravdepodobne je to kvôli sústavnému vandalizmu z adresy vašej školy či poskytovateľa internetového poskytovateľa.',
+
+# History pages
+'revhistory'          => 'História úprav',
+'viewpagelogs'        => 'Zobraziť záznamy pre túto stránku',
+'nohistory'           => 'Pre túto stránku neexistuje história.',
+'revnotfound'         => 'Predošlá verzia nebola nájdená',
+'revnotfoundtext'     => 'Požadovaná staršia verzia stránky nebola nájdená.
+Prosím skontrolujte URL adresu, ktorú ste použili na prístup k tejto stránke.',
+'loadhist'            => 'Sťahovanie histórie stránky',
+'currentrev'          => 'Aktuálna verzia',
+'revisionasof'        => 'Verzia zo dňa a času $1',
+'revision-info'       => 'Revízia z $1; $2',
+'previousrevision'    => '← Staršia verzia',
+'nextrevision'        => 'Novšia verzia →',
+'currentrevisionlink' => 'Zobrazenie aktuálnej úpravy',
+'cur'                 => 'aktuálna',
+'next'                => 'ďalšia',
+'last'                => 'posledná',
+'orig'                => 'pôvodná',
+'page_first'          => 'prvá',
+'page_last'           => 'posledná',
+'histlegend'          => 'Legenda: (aktuálna) = rozdiel oproti aktuálnej verzii,
+(posledná) = rozdiel oproti predchádzajúcej verzii, D = drobná úprava',
+'deletedrev'          => '[zmazané]',
+'histfirst'           => 'Najskorší',
+'histlast'            => 'Posledný',
+'historysize'         => '($1 bajtov)',
+'historyempty'        => '(prázdne)',
+
+# Revision feed
+'history-feed-title'          => 'História úprav',
+'history-feed-description'    => 'História úprav pre túto stránku na wiki',
+'history-feed-item-nocomment' => '$1 na $2', # user at time
+'history-feed-empty'          => 'Požadovaná stránka neexistuje.
+Možno bola zmazaná z wiki alebo premenovaná.
+Skúste [[Special:Search|vyhľadávať na wiki]] relevantné nové stránky.',
+
+# Revision deletion
+'rev-deleted-comment'         => '(komentár odstránený)',
+'rev-deleted-user'            => '(používateľské meno odstránené)',
+'rev-deleted-event'           => '(záznam odstránený)',
+'rev-deleted-text-permission' => '<div class="mw-warning plainlinks">
+Táto revízia stránky bola odstránená z verejných archívov.
+Podrobnosti nájdete v [{{fullurl:Special:Log/delete|page={{PAGENAMEE}}}} zázname mazaní].
+</div>',
+'rev-deleted-text-view'       => '<div class="mw-warning plainlinks">
+Táto revízia stránky bola odstránená z verejných archívov.
+Ako správca tohto projektu si ju môžete prezrieť;
+podrobnosti môžu byť v [{{fullurl:Special:Log/delete|page={{PAGENAMEE}}}} zázname mazaní].
+</div>',
+'rev-delundel'                => 'ukáž/skry',
+'revisiondelete'              => 'Zmazať/obnoviť revízie',
+'revdelete-nooldid-title'     => 'Chýba cieľová revízia',
+'revdelete-nooldid-text'      => 'Nešpecifikovali ste cieľovú revíziu alebo revízie, na ktorých sa má táto funkcia vykonať.',
+'revdelete-selected'          => "{{PLURAL:$2|Vybraná jedna revízia|Vybrané $2 revízie|Vybraných $2 revízií}} z '''$1:'''",
+'logdelete-selected'          => "{{PLURAL:$2|Vybraná udalosť záznamu|Vybrané udalosti záznamu|Vybrané udalosti záznamu}} pre '''$1:'''",
+'revdelete-text'              => 'Zmazané revízie sú stále viditeľné v histórii úprav stránky,
+ale ich obsah nebude prístupný verejnosti.
+
+Iní správcovia tejto wiki budú stále môcť pristupovať k skrytému obsahu a môžu
+ho znova obnoviť použitím tohto rozhrania v prípade, že operátormi projektu
+nie sú stanovené ďalšie obmedzenia.',
+'revdelete-legend'            => 'Nastav obmedzenia revízie:',
+'revdelete-hide-text'         => 'Skry text revízie',
+'revdelete-hide-name'         => 'Skryť činnosť a cieľ',
+'revdelete-hide-comment'      => 'Skry zhrnutie úprav',
+'revdelete-hide-user'         => 'Skryť používateľské meno/IP',
+'revdelete-hide-restricted'   => 'Použi tieto obmedzenia na správcov ako aj na ostatných',
+'revdelete-suppress'          => 'Potlačiť dáta pred správcami rovnako ako pred ostatnými',
+'revdelete-hide-image'        => 'Skryť obsah súboru',
+'revdelete-unsuppress'        => 'Odstrániť obmedzenia obnovených revízií',
+'revdelete-log'               => 'Komentár záznamu:',
+'revdelete-submit'            => 'Použi na zvolenú revíziu',
+'revdelete-logentry'          => 'viditeľnosť revízie bola zmenená pre [[$1]]',
+'logdelete-logentry'          => 'viditeľnosť udalosti [[$1]] bola zmenená',
+'revdelete-logaction'         => '$1 {{plural:$1|revízia|revízie|revízií}} nastavených do režimu $2',
+'logdelete-logaction'         => '$1 {{plural:$1|udalosť|udalosti|udalostí}} [[$3]] nastavených do režimu $2',
+'revdelete-success'           => 'Viditeľnosť revízie bola úspešne nastavená.',
+'logdelete-success'           => 'Viditeľnosť udalosti bola úspešne nastavená.',
+
+# Oversight log
+'oversightlog'    => 'Záznam Dozoru',
+'overlogpagetext' => 'Nižšie sa nachádza zoznam posledných mazaní a blokovaní vrátane obsahu skrytého správcom.
+Pozri Záznam momentálne platných [[Special:Ipblocklist|IP blokovaní]].',
+
+# Diffs
+'difference'                => '(Rozdiel medzi revíziami)',
+'loadingrev'                => 'Sťahujem verzie, na zobrazenie rozdielov',
+'lineno'                    => 'Riadok $1:',
+'editcurrent'               => 'Upraviť aktuálnu verziu tejto stránky',
+'selectnewerversionfordiff' => 'Vybrať na porovnanie novšiu verziu',
+'selectolderversionfordiff' => 'Vybrať na porovnanie staršiu verziu',
+'compareselectedversions'   => 'Porovnaj označené verzie',
+'editundo'                  => 'vrátiť',
+'diff-multi'                => '{{plural:$1|Jedna medziľahlá revízia nie je zobrazená|$1 medziľahlé revízie nie sú zobrazené|$1 medziľahlých revízií nie je zobrazených}}.',
+
+# Search results
+'searchresults'         => 'Výsledky vyhľadávania',
+'searchresulttext'      => 'Viac informácií o vyhľadávaní vo {{GRAMMAR:lokál|{{SITENAME}}}} je uvedených na $1.',
+'searchsubtitle'        => 'Na vyhľadávaciu požiadavku "[[:$1]]"',
+'searchsubtitleinvalid' => 'Na vyhľadávaciu požiadavku "$1"',
+'badquery'              => 'Nesprávne formulovaná požiadavka na vyhľadávanie',
+'badquerytext'          => 'Váš text na prehľadávanie sme nemohli spracovať. Dôvodom je pravdepodobne to, že ste hľadali slovo kratšie ako tri písmená, čo zatiaľ {{SITENAME}} neumožňuje. Alebo ste možno výraz zle napísali, napríklad „dom a a záhrada“. Skúste iný text na prehľadávanie.',
+'matchtotals'           => 'Výsledkom požiadavky "$1" je {{plural:$2|jeden názov stránky|$3 názvy stránok|$3 názvov stránok}}
+a text {{plural:$3|jednej stránky|$3 názvy stránok|$3 názvov stránok}}.',
+'noexactmatch'          => "'''Neexistuje stránka nazvaná \"\$1\"'''. Chcete '''[[:\$1|vytvoriť novú stránku]]''' s týmto názvom?",
+'titlematches'          => 'Vyhovujúce názvy stránok',
+'notitlematches'        => 'V názvoch stránok nebola nájdená zhoda',
+'textmatches'           => 'Zhody v textoch stránok',
+'notextmatches'         => 'V textoch stránok nebola nájdená zhoda',
+'prevn'                 => 'predošlých $1',
+'nextn'                 => 'ďalších $1',
+'viewprevnext'          => 'Zobraziť ($1) ($2) ($3).',
+'showingresults'        => 'Nižšie je zobrazených <b>$1</b> výsledkov, počnúc od  #<b>$2</b>.',
+'showingresultsnum'     => 'Nižšie je zobrazených <b>$3</b> výsledkov, počnúc od  #<b>$2</b>.',
+'nonefound'             => "<strong>Poznámka</strong>: bezvýsledné vyhľadávania sú často spôsobené buď snahou hľadať príliš bežné, obyčajné slová (napríklad slovo ''je''), pretože tieto sa nezaraďujú do indexu vyhľadávača, alebo uvedením viac ako jedného vyhľadávaného výrazu, pretože výsledky uvádzajú len stránky obsahujúce všetky vyhľadávané výrazy.",
+'powersearch'           => 'Vyhľadávanie',
+'powersearchtext'       => 'Vyhľadávania v menných priestoroch :<br />
+$1<br />
+$2 Zoznam presmerovaní &nbsp; Hľadanie pre $3 $9',
+'searchdisabled'        => 'Prepáčte! Fulltextové vyhľadávanie bolo dočasne vypnuté z dôvodu preťaženia. Zatiaľ môžete použiť hľadanie pomocou Google, ktoré však nemusí byť aktuálne.',
+'blanknamespace'        => '(Hlavný)',
+
+# Preferences page
+'preferences'              => 'Nastavenia',
+'mypreferences'            => 'nastavenia',
+'prefsnologin'             => 'Nie ste prihlásený/á',
+'prefsnologintext'         => 'Musíte byť [[Special:Userlogin|prihlásený/á]], aby ste mohli zmeniť vaše nastavenia.',
+'prefsreset'               => 'Boli obnovené pôvodné nastavenia.',
+'qbsettings'               => 'Navigačný panel',
+'qbsettings-none'          => 'Žiadne',
+'qbsettings-fixedleft'     => 'Ukotvené vľavo',
+'qbsettings-fixedright'    => 'Ukotvené vpravo',
+'qbsettings-floatingleft'  => 'Plávajúce vľavo',
+'qbsettings-floatingright' => 'Plávajúce vpravo',
+'changepassword'           => 'Zmeniť heslo',
+'skin'                     => 'Vzhľad',
+'math'                     => 'Vykreslenie matematiky',
+'dateformat'               => 'Formát dátumu',
+'datedefault'              => 'Predvolený',
+'datetime'                 => 'Dátum a čas',
+'math_failure'             => 'Syntaktická analýza (parsing) neúspešná',
+'math_unknown_error'       => 'neznáma chyba',
+'math_unknown_function'    => 'neznáma funkcia',
+'math_lexing_error'        => 'lexikálna chyba',
+'math_syntax_error'        => 'syntaktická chyba',
+'math_image_error'         => 'PNG konverzia neúspešná; skontrolujte správnosť inštalácie programov: latex, dvips, gs a convert',
+'math_bad_tmpdir'          => 'Nemôžem zapisovať alebo vytvoriť dočasný matematický adresár',
+'math_bad_output'          => 'Nemôžem zapisovať alebo vytvoriť výstupný matematický adresár',
+'math_notexvc'             => 'Chýbajúci program texvc; konfigurácia je popísaná v math/README.',
+'prefs-personal'           => 'Profil',
+'prefs-rc'                 => 'Posledné úpravy',
+'prefs-watchlist'          => 'Sledované stránky',
+'prefs-watchlist-days'     => 'Koľko dní zobrazovať v sledovaných stránkach:',
+'prefs-watchlist-edits'    => 'Počet úprav, ktorý sa zobrazí v rozšírenom zozname sledovaných:',
+'prefs-misc'               => 'Rôzne',
+'saveprefs'                => 'Ulož nastavenia',
+'resetprefs'               => 'Obnoviť pôvodné nastavenia',
+'oldpassword'              => 'Staré heslo:',
+'newpassword'              => 'Nové heslo:',
+'retypenew'                => 'Nové heslo (ešte raz):',
+'textboxsize'              => 'Úpravy',
+'rows'                     => 'Riadky',
+'columns'                  => 'Stĺpce',
+'searchresultshead'        => 'Vyhľadávanie',
+'resultsperpage'           => 'Počet vyhovujúcich výsledkov zobrazených na strane',
+'contextlines'             => 'Počet zobrazených riadkov z kažnej nájdenej stránky',
+'contextchars'             => 'Počet kontextových znakov v riadku',
+'stubthreshold'            => 'Hranica pre zobrazenie nedokončených stránok (výhonkov):',
+'recentchangesdays'        => 'Koľko dní zobrazovať v Posledných úpravách:',
+'recentchangescount'       => 'Počet nadpisov uvedených v posledných úpravách',
+'savedprefs'               => 'Vaše nastavenia boli uložené.',
+'timezonelegend'           => 'Časové pásmo',
+'timezonetext'             => 'Počet hodín, o ktorý sa váš miestny čas odlišuje od času na serveri (UTC).',
+'localtime'                => 'Miestny čas',
+'timezoneoffset'           => 'Rozdiel¹',
+'servertime'               => 'Aktuálny čas na serveri',
+'guesstimezone'            => 'Prevziať z prehliadača',
+'allowemail'               => 'Povoľ prijímanie e-mailov od iných používateľov',
+'defaultns'                => 'Štandardne vyhľadávaj v týchto menných priestoroch:',
+'default'                  => 'predvolený',
+'files'                    => 'Súbory',
+
+# User rights
+'userrights-lookup-user'     => 'Spravuj skupiny používateľov',
+'userrights-user-editname'   => 'Napíš meno používateľa:',
+'editusergroup'              => 'Upraviť skupinu používateľa',
+'userrights-editusergroup'   => 'Uprav skupinu',
+'saveusergroups'             => 'Ulož skupinu',
+'userrights-groupsmember'    => 'Člen skupiny:',
+'userrights-groupsavailable' => 'Dostupné skupiny:',
+'userrights-groupshelp'      => 'Označte skupiny, do ktorých chcete pridať alebo z ktorých chcete
+odobrať používateľa. Neoznačené skupiny nebudú zmenené. Odobrať skupinu možete pomocou CTRL + kliknutie ľavým tlačidlom',
+
+# Groups
+'group'            => 'Skupina:',
+'group-bot'        => 'Boti',
+'group-sysop'      => 'Správcovia',
+'group-bureaucrat' => 'Byrokrati',
+'group-all'        => '(všetci)',
+
+'group-bot-member'        => 'Bot',
+'group-sysop-member'      => 'Správca',
+'group-bureaucrat-member' => 'Byrokrat',
+
+'grouppage-bot'        => 'Project:Boti',
+'grouppage-sysop'      => 'Project:Správcovia',
+'grouppage-bureaucrat' => 'Project:Byrokrati',
+
+# User rights log
+'rightslog'      => 'Záznam užívateľských práv',
+'rightslogtext'  => 'Toto je záznam zmien práv používateľa.',
+'rightslogentry' => 'členstvo v skupine zmenené pre $1 z $2 na $3',
+'rightsnone'     => '(žiadne)',
+
+# Recent changes
+'nchanges'                          => '$1 {{PLURAL:$1|zmena|zmeny|zmien}}',
+'recentchanges'                     => 'Posledné úpravy',
+'recentchangestext'                 => 'Pomocou tejto stránky sledujete posledné úpravy stránok {{GRAMMAR:genitív|{{SITENAME}}}}.
+
+Ak chcete, aby {{SITENAME}} uspela, je veľmi dôležité, aby ste nepridávali
+materiál obmedzený inými autorskými právami.
+Právne záväzky môžu projekt vážne poškodiť, takže Vás prosíme, aby ste to nerobili.',
+'recentchanges-feed-description'    => 'Sledovať posledné úpravy tejto wiki týmto feedom.',
+'rcnote'                            => 'Tu je posledných <strong>$1</strong> úprav počas posledných <strong>$2</strong> dní ($3).',
+'rcnotefrom'                        => 'Nižšie sú zobrazené úpravy od <b>$2</b> (do <b>$1</b>).',
+'rclistfrom'                        => 'Zobraziť nové úpravy počnúc od $1',
+'rcshowhideminor'                   => '$1 drobné úpravy',
+'rcshowhidebots'                    => '$1 botov',
+'rcshowhideliu'                     => '$1 prihlásených používateľov',
+'rcshowhideanons'                   => '$1 anonymných používateľov',
+'rcshowhidepatr'                    => '$1 úpravy strážených stránok',
+'rcshowhidemine'                    => '$1 moje úpravy',
+'rclinks'                           => 'Zobraziť posledných $1 úprav v posledných $2 dňoch<br />$3',
+'diff'                              => 'rozdiel',
+'hist'                              => 'história',
+'hide'                              => 'skryť',
+'show'                              => 'zobraziť',
+'minoreditletter'                   => 'D',
+'newpageletter'                     => 'N',
+'boteditletter'                     => 'b',
+'number_of_watching_users_pageview' => '[sledujúcich používateľov: $1]',
+'rc_categories'                     => 'Obmedziť na kategórie (oddeľte "|")',
+'rc_categories_any'                 => 'akékoľvek',
+
+# Recent changes linked
+'recentchangeslinked'          => 'Súvisiace úpravy',
+'recentchangeslinked-noresult' => 'V zadanom období neboli odkazované stránky zmenené.',
+'recentchangeslinked-summary'  => "Táto špeciálna stránka obsahuje zoznam posledných úprav na odkazovaných stránkach. Stránky, ktoré sa nachádzajú vo vašom zozname sledovaných sú vyznačené '''hrubo'''.",
+
+# Upload
+'upload'                      => 'Nahrať súbor',
+'uploadbtn'                   => 'Nahrať súbor',
+'reupload'                    => 'Zopakovať nahranie',
+'reuploaddesc'                => 'Späť k formuláru na nahranie.',
+'uploadnologin'               => 'Nie ste prihlásený',
+'uploadnologintext'           => 'Musíte byť [[Special:Userlogin|prihlásený/á]], aby ste mohli nahrávať súbory.',
+'upload_directory_read_only'  => 'Nie je možné zapisovať webovým servrom do adresára pre nahrávanie ($1).',
+'uploaderror'                 => 'Chyba pri nahrávaní',
+'uploadtext'                  => "Tento formulár použite na nahrávanie súborov, na zobrazenie alebo hľadanie už nahraných súborov choďte na [[Special:Imagelist|zoznam nahraných súborov]], nahrávania a mazania sa tiež zaznamenávajú v [[Special:Log/upload|zázname nahrávaní]].
+
+Na začlenenie obrázku do stránky použite odkaz v tvare
+
+* '''<nowiki>[[</nowiki>{{ns:Image}}<nowiki>:Súbor.jpg]]</nowiki>'''
+* '''<nowiki>[[</nowiki>{{ns:Image}}<nowiki>:Súbor.png|alternatívny text]]</nowiki>'''
+alebo pre priamy odkaz na súbor
+* '''<nowiki>[[</nowiki>{{ns:Media}}<nowiki>:Súbor.ogg]]</nowiki>'''",
+'uploadlog'                   => 'Záznam nahrávaní',
+'uploadlogpage'               => 'Záznam nahrávaní',
+'uploadlogpagetext'           => 'Nižšie je zoznam nedávno nahraných súborov.
+Všetky uvedené časy sú časy na serveri (UTC).',
+'filename'                    => 'Názov súboru',
+'filedesc'                    => 'Opis súboru',
+'fileuploadsummary'           => 'Zhrnutie:',
+'filestatus'                  => 'Stav autorských práv',
+'filesource'                  => 'Zdroj',
+'uploadedfiles'               => 'Nahrané súbory',
+'ignorewarning'               => 'Ignorovať varovanie a súbor napriek tomu uložiť.',
+'ignorewarnings'              => 'Ignorovať všetky varovania',
+'minlength'                   => 'Názvy obrázkov musia obsahovať najmenej tri písmená.',
+'illegalfilename'             => 'Názov súboru "$1" obsahuje znaky, ktoré nie sú povolené v názvoch stránok. Prosím premenujte súbor a skúste ho nahrať znovu.',
+'badfilename'                 => 'Meno obrázka bolo zmenené na "$1".',
+'filetype-badmime'            => 'Nie je povolené nahrávať súbory s MIME typom "$1".',
+'filetype-badtype'            => "'''\".\$1\"''' je neželaný typ súboru
+: Zoznam povolených typov súborov: \$2",
+'filetype-missing'            => 'Súbor nemá príponu (ako ".jpg").',
+'large-file'                  => 'Odporúča sa aby veľkosť súborov neprekračovala $1; tento súbor má $2.',
+'largefileserver'             => 'Tento súbor je väčší ako je možné nahrať na server (z dôvodu obmedzenia veľkosti súboru v konfigurácii servera).',
+'emptyfile'                   => 'Zdá sa, že súbor, ktorý ste nahrali je prázdny. Mohlo sa stať, že ste urobili v názve súboru preklep. Prosím, skontrolujte, či skutočne chcete nahrať tento súbor.',
+'fileexists'                  => 'Súbor s týmto názvom už existuje, prosím skontrolujte $1 ak nie ste si istý, či ho chcete zmeniť.',
+'fileexists-extension'        => 'Súbor s podobným názvom už existuje:<br />
+Názov súboru, ktoý nahrávate: <strong><tt>$1</tt></strong><br />
+Názov existujúceho súboru: <strong><tt>$2</tt></strong><br />
+Jediný rozdiel je vo veľkosti písmen prípony. Prosím, skontrolujte totožnosť týchto súborov.',
+'fileexists-thumb'            => "'''<center>Existujúci obrázok</center>'''",
+'fileexists-thumbnail-yes'    => 'Zdá sa, že súbor je obrázkom redukovanej veľkosti <i>(náhľadom)</i>. Prosím, skontolujte súbor <strong><tt>$1</tt></strong>.<br />
+Ak je kontrolovaný súbor rovnaký obrázok v pôvodnej veľkosti, nie je potrebné nahrávať ďalší náhľad.',
+'file-thumbnail-no'           => 'Názov súboru začína <strong><tt>$1</tt></strong>. Zdá sa, že je to obrázok redukovanej veľkosti <i>(náhľad)</i>. Ak máte tento obrázok v plnom rozlíšení, nahrajte ho, inak prosím zmeňte názov.',
+'fileexists-forbidden'        => 'Súbor s týmto názvom už existuje; choďte prosím späť a nahrajte tento súbor pod iným názvom. [[Image:$1|thumb|center|$1]]',
+'fileexists-shared-forbidden' => 'Súbor s týmto názvom už existuje v zdieľanom úložisku súborov; choďte prosím späť a nahrajte tento súbor pod iným názvom. [[Image:$1|thumb|center|$1]]',
+'successfulupload'            => 'Nahranie bolo úspešné',
+'fileuploaded'                => 'Súbor "$1" bol úspešne nahraný.
+Nasledujte tento odkaz ($2) na stránku, na ktorej zadáte informácie na opis súboru, napríklad odkiaľ pochádza, kedy a kým bol vytvorený a všetko ostatné, čo o ňom prípadne viete. Ak je nahraný súbor obrázok, možno ho takto vložiť do stránky: <tt><nowiki>[[</nowiki>{{ns:image}}<nowiki>:$1|thumb|Opis]]</nowiki></tt>',
+'uploadwarning'               => 'Varovanie pri nahrávaní',
+'savefile'                    => 'Ulož súbor',
+'uploadedimage'               => 'nahraný „[[$1]]“',
+'uploaddisabled'              => 'Prepáčte, nahrávanie je vypnuté.',
+'uploaddisabledtext'          => 'Nahrávanie súborov na túto wiki je vypnuté.',
+'uploadscripted'              => 'Tento súbor obsahuje kód HTML alebo skript, ktorý može byť chybne interpretovaný prehliadačom.',
+'uploadcorrupt'               => 'Tento súbor je závadný alebo má nesprávnu príponu. Skontrolujte súbor a nahrajte ho znova.',
+'uploadvirus'                 => 'Súbor obsahuje vírus! Detaily: $1',
+'sourcefilename'              => 'Názov zdrojového súboru',
+'destfilename'                => 'Názov cieľového súboru',
+'watchthisupload'             => 'Sleduj túto stránku',
+'filewasdeleted'              => 'Súbor s týmto názvom bol už nahraný a následne zmazaný. Mali by ste skontrolovať $1 predtým, ako budete pokračovať na opätovné nahranie.',
+
+'upload-proto-error'      => 'Nesprávny protokol',
+'upload-proto-error-text' => 'Vzdialené nahrávanie vyžaduje, aby URL začínali <code>http://</code> alebo <code>ftp://</code>.',
+'upload-file-error'       => 'Vnútorná chyba',
+'upload-file-error-text'  => 'Vyskytla sa vnútorná chyba pri pokuse vytvoriť dočasný súbor na serveri. Prosím, kontaktujte správcu systému.',
+'upload-misc-error'       => 'Neznáma chyba pri nahrávaní',
+'upload-misc-error-text'  => 'Počas nahrávania sa vyskytla neznáma chyba. Prosím, overte, že URL je platný a dostupný a skúste znova. Ak problém pretrváva, kontaktujte správcu systému.',
+
+# Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
+'upload-curl-error6'       => 'Nedostupný URL',
+'upload-curl-error6-text'  => 'Poskytnutý URL nebol dostupný. Prosím, skontrolujte znova, že URL je správny a lokalita je dostupná.',
+'upload-curl-error28'      => 'Vypršal čas vyhradený pre nahrávanie',
+'upload-curl-error28-text' => 'Lokalite trvala odpoveď príliš dlho. Prosím, skontrolujte, či je lokalita dopstupná, chvíľu počkajte a skúste znova. Možno je potrebné skúsiť nahrávanie v čase, kedy je lokalita menej zaťažená.',
+
+'license'            => 'Licencovanie',
+'nolicense'          => 'Nič nebolo vybrané',
+'upload_source_url'  => ' (platný, verejne prístupný URL)',
+'upload_source_file' => ' (súbor na Vašom počítači)',
+
+# Image list
+'imagelist'                 => 'Zoznam obrázkov',
+'imagelisttext'             => 'Tu je zoznam $1 obrázkov zoradený $2.',
+'imagelistforuser'          => 'Zobrazuje iba obrázky nahrané používateľom $1.',
+'getimagelist'              => 'sťahujem zoznam nahraných obrázkov',
+'ilsubmit'                  => 'Hľadať',
+'showlast'                  => 'Zobraziť posledných $1 obrázkov zoradených $2.',
+'byname'                    => 'podľa názvu',
+'bydate'                    => 'podľa dátumu',
+'bysize'                    => 'podľa veľkosti',
+'imgdelete'                 => 'zmazať',
+'imgdesc'                   => 'popis',
+'imgfile'                   => 'súbor',
+'imglegend'                 => 'Legenda: (popis) = zobraziť/upraviť popis obrázka.',
+'imghistory'                => 'História súboru',
+'revertimg'                 => 'obnov',
+'deleteimg'                 => 'zmazať',
+'deleteimgcompletely'       => 'Vymazať všetky revízie tohto súboru',
+'imghistlegend'             => 'Vysvetlivky: (aktuálna) = toto je aktuálny obrázok, (zmazať) = zmaž
+túto starú verziu, (pôvodná) = vráť sa k tejto starej verzii.
+<br /><i>Kliknite na dátum, aby sa zobrazil obrázok nahraný v ten deň</i>.',
+'imagelinks'                => 'Odkazy na obrázok',
+'linkstoimage'              => 'Na tento obrázok odkazujú nasledujúce stránky:',
+'nolinkstoimage'            => 'Žiadne stránky neobsahujú odkazy na tento obrázok.',
+'sharedupload'              => 'Toto je zdieľaný súbor a je možné ho používať na iných projektoch.',
+'shareduploadwiki'          => 'Ďalšie informácie pozrite na $1.',
+'shareduploadwiki-linktext' => 'stránka opisu súboru',
+'noimage'                   => 'Súbor s takým menom neexistuje, môžete ho $1',
+'noimage-linktext'          => 'nahrať',
+'uploadnewversion-linktext' => 'Nahrajte novú verziu tohto súboru.',
+'imagelist_date'            => 'Dátum',
+'imagelist_name'            => 'Názov',
+'imagelist_user'            => 'Užívateľ',
+'imagelist_size'            => 'Veľkosť (v bajtoch)',
+'imagelist_description'     => 'Popis',
+'imagelist_search_for'      => 'Hľadať názov obrázka:',
+
+# MIME search
+'mimesearch'         => 'MIME vyhľadávanie',
+'mimesearch-summary' => 'Táto stránka umožňuje filtovanie súborov podľa MIME typu. Vstup: typobsahu/podtyp, napr. <tt>image/jpeg</tt>.',
+'mimetype'           => 'MIME typ:',
+'download'           => 'stiahnuť',
+
+# Unwatched pages
+'unwatchedpages' => 'Nesledované stránky',
+
+# List redirects
+'listredirects' => 'Zoznam presmerovaní',
+
+# Unused templates
+'unusedtemplates'     => 'Nepoužité šablóny',
+'unusedtemplatestext' => 'Táto stránka obsahuje zoznam všetkých stránok v mennom prisetore Šablóna:, ktoré nie sú vložené v žiadnej inej stránke. Pred zmazaním nezabudnite skontrolovať ostatné odkazy!',
+'unusedtemplateswlh'  => 'iné odkazy',
+
+# Random redirect
+'randomredirect'         => 'Náhodná presmerovacia stránka',
+'randomredirect-nopages' => 'V tomto mennom priestore nie sú žiadne presmerovania.',
+
+# Statistics
+'statistics'             => 'Štatistiky',
+'sitestats'              => 'Štatistika webu',
+'userstats'              => 'Štatistika k používateľom',
+'sitestatstext'          => "{{SITENAME}} momentálne má '''$2''' stránok.
+Do toho sa nezapočítavajú presmerovania, diskusné stránky, popisné stránky obrázkov, stránky používateľských profilov, šablóny, stránky Pomocníka, portály, stránky bez odkazov na iné stránky a stránky o {{GRAMMAR:lokál|{{SITENAME}}}}.
+Vrátane týchto máme spolu '''$1''' stránok.
+
+Celkovo bolo nahraných '''$8''' súborov.
+
+Celkovo boli stránky navštívené '''$3'''-krát a upravené '''$4'''-krát. To znamená, že pripadá priemerne '''$5''' úprav na každú stránku a '''$6''' návštev na každú úpravu (od posledného vylepšenia (upgrade) softvéru 20. júla 2002).
+
+[http://meta.wikimedia.org/wiki/Help:Job_queue Dĺžka frontu úloh] je momentálne '''$7'''.",
+'userstatstext'          => "Celkovo je '''$1''' zaregistrovaných používateľov,
+z čoho '''$2''' (alebo '''$4%''') sú administrátormi (pozri $5).",
+'statistics-mostpopular' => 'Najčastejšie prezerané stránky',
+
+'disambiguations'      => 'Stránky na rozlíšenie viacerých významov',
+'disambiguationspage'  => 'Šablóna:Rozlišovacia stránka',
+'disambiguations-text' => "Nasledovné stránky odkazujú na '''rozlišovaciu stránku'''. Mali by však odkazovať priamo na príslušnú tému.<br />Stránka sa považuje za rozlišovaciu, keď používa šablónu, na ktorú odkazuje [[MediaWiki:disambiguationspage]]",
+
+'doubleredirects'     => 'Dvojité presmerovania',
+'doubleredirectstext' => 'Každý riadok obsahuje odkaz na prvé a druhé presmerovanie a tiež prvý riadok z textu na ktorý odkazuje druhé presmerovanie, ktoré zvyčajne odkazuje na "skutočný" cieľ, na ktorý má odkazovať prvé presmerovanie.',
+
+'brokenredirects'        => 'Pokazené presmerovania',
+'brokenredirectstext'    => 'Tieto presmerovania odkazujú na neexistujúcu stránku.',
+'brokenredirects-edit'   => '(upraviť)',
+'brokenredirects-delete' => '(zmazať)',
+
+'withoutinterwiki'        => 'Stránky bez jazykových odkazov',
+'withoutinterwiki-header' => 'Nasledujúce stránky neodkazujú na iné jazykové verzie:',
+
+'fewestrevisions' => 'Stránky s najmenším počtom revízií',
+
+# Miscellaneous special pages
+'nbytes'                  => '$1 {{PLURAL:$1|bajt|bajty|bajtov}}',
+'ncategories'             => '$1 {{PLURAL:$1|kategória|kategórie|kategórií}}',
+'nlinks'                  => '$1 {{PLURAL:$1|odkaz|odkazy|odkazov}}',
+'nmembers'                => '$1 {{PLURAL:$1|člen|členovia|členov}}',
+'nrevisions'              => '$1 {{PLURAL:$1|revízia|revízie|revízií}}',
+'nviews'                  => '$1 {{PLURAL:$1|návšteva|návštevy|návštev}}',
+'specialpage-empty'       => 'Táto stránka je prázdna.',
+'lonelypages'             => 'Opustené stránky',
+'lonelypagestext'         => 'Na nasledujúce stránky neodkazujú žiadne iné stránky z tejto wiki.',
+'uncategorizedpages'      => 'Stránky nezaradené do kategórií',
+'uncategorizedcategories' => 'Kategórie nezaradené do kategórií',
+'uncategorizedimages'     => 'Nekategorizované obrázky',
+'unusedcategories'        => 'Nepoužité kategórie',
+'unusedimages'            => 'Nepoužité obrázky',
+'popularpages'            => 'Populárne stránky',
+'wantedcategories'        => 'Žiadané kategórie',
+'wantedpages'             => 'Žiadané stránky',
+'mostlinked'              => 'Najčastejšie odkazované stránky',
+'mostlinkedcategories'    => 'Najčastejšie odkazované kategórie',
+'mostcategories'          => 'Stránky s najväčším počtom kategórií',
+'mostimages'              => 'Najčastejšie odkazované obrázky',
+'mostrevisions'           => 'Stránky s najväčším počtom úprav',
+'allpages'                => 'Všetky stránky',
+'prefixindex'             => 'Index prefixu',
+'randompage'              => 'Náhodná stránka',
+'randompage-nopages'      => 'V tomto mennom priestore nie sú žiadne stránky.',
+'shortpages'              => 'Krátke stránky',
+'longpages'               => 'Dlhé stránky',
+'deadendpages'            => 'Slepé stránky',
+'deadendpagestext'        => 'Nasledujúce stránky neodkazujú na žiadne iné stránky z tejto wiki.',
+'protectedpages'          => 'Zamknuté stránky',
+'protectedpagestext'      => 'Upravovanie alebo presúvanie nasledovných stránok je zamknuté',
+'protectedpagesempty'     => 'Momentálne nie sú žiadne stránky zamknuté',
+'listusers'               => 'Zoznam používateľov',
+'specialpages'            => 'Špeciálne stránky',
+'spheading'               => 'Špeciálne stránky pre všetkých používateľov',
+'restrictedpheading'      => 'Obmedzené špeciálne stránky',
+'rclsub'                  => '(na stránky, na ktoré odkazuje "$1")',
+'newpages'                => 'Nové stránky',
+'newpages-username'       => 'Meno používateľa:',
+'ancientpages'            => 'Najdávnejšie upravované stránky',
+'intl'                    => 'Mezijazykové odkazy',
+'move'                    => 'Presunúť',
+'movethispage'            => 'Presunúť túto stránku',
+'unusedimagestext'        => '<p>Prosím, uvedomte si, že iné web stránky môžu odkazovať na tento obrázok priamo URL adresou a tak tu môžu byť uvedené napriek tomu, že ich externé stránky používajú.</p>',
+'unusedcategoriestext'    => 'Nasledujúce kategórie existujú napriek tomu, že do nich nie je zaradená žiadna stránka.',
+
+# Book sources
+'booksources'               => 'Knižné zdroje',
+'booksources-search-legend' => 'Vyhľadávať knižné zdroje',
+'booksources-isbn'          => 'ISBN:',
+'booksources-go'            => 'Choď',
+'booksources-text'          => 'Nižšie je zoznam odkazov na iné stránky, ktoré predávajú nové a použité knihy a tiež môžu obsahovať ďalšie informácie o knihách, ktoré hľadáte:',
+
+'categoriespagetext' => 'V tejto wiki existujú nasledovné kategórie.',
+'data'               => 'Dáta',
+'userrights'         => 'Spravovanie používateľských práv',
+'groups'             => 'Skupiny používateľov',
+'isbn'               => 'ISBN',
+'alphaindexline'     => '$1 do $2',
+'version'            => 'Verzia',
+
+# Special:Log
+'specialloguserlabel'  => 'Redaktor:',
+'speciallogtitlelabel' => 'Názov:',
+'log'                  => 'Záznamy',
+'log-search-legend'    => 'Hľadať záznamy',
+'log-search-submit'    => 'Spustiť',
+'alllogstext'          => 'Kombinované zobrazenie nahrávaní, mazaní, zamknutí, blokovaní a akcií správcu.
+Môžete zmenšiť rozsah, ak zvolíte typ záznamu, používateľské meno alebo dotyčnú stránku.',
+'logempty'             => 'V zázname neboli nájdené zodpovedajúce položky.',
+'log-title-wildcard'   => 'Hľadať názvy začínajúce týmto textom',
+
+# Special:Allpages
+'nextpage'          => 'Ďalšia stránka ($1)',
+'prevpage'          => 'Predchádzajúca stránka ($1)',
+'allpagesfrom'      => 'Zobraz stránky od:',
+'allarticles'       => 'Všetky stránky',
+'allinnamespace'    => 'Všetky stránky (menný priestor $1)',
+'allnotinnamespace' => 'Všetky stránky (nie z menného priestoru $1)',
+'allpagesprev'      => 'Predchádzajúci',
+'allpagesnext'      => 'Ďalší',
+'allpagessubmit'    => 'Choď',
+'allpagesprefix'    => 'Zobraz stránky s predponou:',
+'allpagesbadtitle'  => 'Zadaný názov stránky je neplatný alebo mal medzijazykový alebo interwiki prefix. Môže obsahovať jeden alebo viac znakov, ktoré nie je možné použiť v názve stránky.',
+
+# Special:Listusers
+'listusersfrom'      => 'Zobraziť používateľov počnúc:',
+'listusers-submit'   => 'Zobraziť',
+'listusers-noresult' => 'Neboli nájdení používatelia. Prosím, skontrolujte aj varianty s veľkými/malými písmenami.',
+
+# E-mail user
+'mailnologin'     => 'Žiadna adresa na zaslanie',
+'mailnologintext' => 'Musíte byť [[Special:Userlogin|prihlásený]] a mať platnú e-mailovú adresu vo vašich [[Special:Preferences|nastaveniach]], aby ste mohli iným používateľom posielať e-maily.',
+'emailuser'       => 'E-mail tomuto používateľovi',
+'emailpage'       => 'E-mail používateľovi',
+'emailpagetext'   => 'Ak tento používateľ zadal platnú e-mailovú adresu vo svojich nastaveniach,
+môžete mu pomocou dole zobrazeného formulára poslať e-mail.
+E-mailová adresa, ktorú ste zadali vo vašich nastaveniach sa zobrazí
+ako adresa odosielateľa e-mailu, aby vám bol príjemca schopný
+odpovedať.',
+'usermailererror' => 'Emailový program vrátil chybu:',
+'defemailsubject' => 'email {{GRAMMAR:genitív|{{SITENAME}}}}',
+'noemailtitle'    => 'Chýba e-mailová adresa',
+'noemailtext'     => 'Tento používateľ nešpecifikoval platnú e-mailovú adresu
+alebo sa rozhodol, že nebude prijímať e-maily od druhých používateľov.',
+'emailfrom'       => 'Odosielateľ',
+'emailto'         => 'Príjemca',
+'emailsubject'    => 'Predmet',
+'emailmessage'    => 'Správa',
+'emailsend'       => 'Odoslať',
+'emailccme'       => 'Pošli mi emailom kópiu mojej správy.',
+'emailccsubject'  => 'Kópia správy pre $1: $2',
+'emailsent'       => 'E-mail bol odoslaný',
+'emailsenttext'   => 'Vaša e-mailová správa bola odoslaná.',
+
+# Watchlist
+'watchlist'            => 'Sledované stránky',
+'mywatchlist'          => 'Sledované stránky',
+'watchlistfor'         => "(používateľa '''$1''')",
+'nowatchlist'          => 'V zozname sledovaných stránok nemáte žiadne položky.',
+'watchlistanontext'    => 'Prosím $1 pre prezeranie alebo úpravu Vášho zoznamu sledovaných stránok.',
+'watchlistcount'       => "'''Na zozname sledovaných máte $1 položiek (vrátane diskusných stránok).'''",
+'clearwatchlist'       => 'Vyčistiť zoznam sledovaných',
+'watchlistcleartext'   => 'Určite ich chcete odstrániť?',
+'watchlistclearbutton' => 'Vyčistiť zoznam sledovaných',
+'watchlistcleardone'   => 'Váš zoznam sledovaných bol vyčistený. $1 položiek bolo odstránených.',
+'watchnologin'         => 'Nie ste prihlásený/á',
+'watchnologintext'     => 'Musíte byť [[Special:Userlogin|prihlásený/á]], aby ste mohli modifikovať vaše sledované stránky.',
+'addedwatch'           => 'Pridaná do zoznamu sledovaných stránok',
+'addedwatchtext'       => "Stránka [[\$1]] bola pridaná do [[Special:Watchlist|sledovaných stránok]]. Budú tam uvedené ďalšie úpravy tejto stránky a jej diskusie a stránka bude zobrazená '''tučne''' v [[Special:Recentchanges|zozname posledných úprav]], aby ste ju ľahšie našli. 
+
+Ak budete chcieť neskôr stránku odstrániť zo sledovaných stránok, kliknite na \"nesledovať\" v záložkách na vrchu.",
+'removedwatch'         => 'Odstránená zo zoznamu sledovaných stránok',
+'removedwatchtext'     => 'Stránka "[[:$1]]" bola odstránená z vášho zoznamu sledovaných stránok.',
+'watch'                => 'Sledovať',
+'watchthispage'        => 'Sleduj túto stránku',
+'unwatch'              => 'Nesledovať',
+'unwatchthispage'      => 'Prestať sledovať túto stránku',
+'notanarticle'         => 'Toto nie je stránka',
+'watchnochange'        => 'V rámci zobrazeného času nebola upravená žiadna z Vašich sledovaných stránok.',
+'watchdetails'         => '($1 sledovaných stránok, nepočítajúc stránky diskusie;
+$2 úprav stránok spolu od ukončenia;
+$3...
+[[Special:Watchlist/edit|zobraz a upravuj úplný zoznam]].)',
+'wlheader-enotif'      => '* Upozorňovanie e-mailom je zapnuté.',
+'wlheader-showupdated' => "* Stránky, ktoré boli zmené od vašej poslednej návštevy sú zobrazené '''tučne'''.",
+'watchmethod-recent'   => 'kontrolujem posledné úpravy sledovaných stránok',
+'watchmethod-list'     => 'kontrolujem sledované stránky na posledné úpravy',
+'removechecked'        => 'Odstrániť vybrané položky zo zoznamu sledovaných stránok',
+'watchlistcontains'    => 'Váš zoznam sledovaných stránok obsahuje $1 položiek.',
+'watcheditlist'        => "Tu je abecedný zoznam vašich
+sledovaných stránok. Označte stránky, ktoré chcete odstrániť a kliknite na tlačidlo
+'Odstráň vybrané'
+na spodnej časti obrazovky (odstránie stránky v hlavnom mennom priestore tiež odstráni príslušnú diskusnú stránku a naopak).",
+'removingchecked'      => 'Odstraňujem požadované položky zo zoznamu sledovaných stránok...',
+'couldntremove'        => "Nebolo možné odstrániť položku '$1'...",
+'iteminvalidname'      => "Problém s položkou '$1', neplatné meno...",
+'wlnote'               => 'Nižšie je posledných $1 zmien v posledných <b>$2</b> hodinách.',
+'wlshowlast'           => 'Zobraz posledných $1 hodín $2 dní $3',
+'wlsaved'              => 'Toto je uložená verzia zoznamu vašich sledovaných stránok.',
+'watchlist-show-bots'  => 'Zobraz úpravy botov',
+'watchlist-hide-bots'  => 'Skry úpravy botov',
+'watchlist-show-own'   => 'Zobraz moje úpravy',
+'watchlist-hide-own'   => 'Skry moje úpravy',
+'watchlist-show-minor' => 'Zobraziť drobné úpravy',
+'watchlist-hide-minor' => 'Skryť drobné úpravy',
+'wldone'               => 'Hotovo.',
+
+# Displayed when you click the "watch" button and it's in the process of watching
+'watching'   => 'Pridávam do zoznamu sledovaných...',
+'unwatching' => 'Odoberám zo zoznamu sledovaných...',
+
+'enotif_mailer'      => 'Upozorňovač {{GRAMMAR:genitív|{{SITENAME}}}}',
+'enotif_reset'       => 'Vynulovať upozornenia (nastav ich status na "navštívené")',
+'enotif_newpagetext' => 'Toto je nová stránka.',
+'changed'            => 'zmene',
+'created'            => 'vytvorení',
+'enotif_subject'     => '{{SITENAME}} - stránka $PAGETITLE bola $CHANGEDORCREATED $PAGEEDITOR',
+'enotif_lastvisited' => 'Pozrite $1 pre všetky zmeny od vašej poslednej návštevy.',
+'enotif_body'        => 'Drahý $WATCHINGUSERNAME,
+
+na {{GRAMMAR:lokál|{{SITENAME}}}} došlo $PAGEEDITDATE k $CHANGEDORCREATED stránky $PAGETITLE používateľom $PAGEEDITOR, pozrite si aktuálnu verziu $PAGETITLE_URL .
+
+$NEWPAGE
+
+Zhrnutie: $PAGESUMMARY $PAGEMINOREDIT
+Kontaktujte používateľa:
+mail $PAGEEDITOR_EMAIL
+wiki $PAGEEDITOR_WIKI
+
+Nedostanete ďalšie upozornenia, aj ak bude stránka znovu upravovaná, kým nenavštívíte túto stránku. Možete tiež vynulovať upozornenia pre všetky vaše sledované stránky.
+
+ Váš upozorňovací systém {{GRAMMAR:genitív|{{SITENAME}}}}
+
+--
+Zmeniť nastavenia vašich sledovaných stránok môžete na
+{{fullurl:Special:Watchlist/edit}}
+
+Návrhy a ďalšia pomoc:
+{{fullurl:{{MediaWiki:helppage}}}}',
+
+# Delete/protect/revert
+'deletepage'                  => 'Zmazať stránku',
+'confirm'                     => 'Potvrdiť',
+'excontent'                   => "obsah bol: '$1'",
+'excontentauthor'             => "obsah bol: '$1' (a jediný autor bol '[[Special:Contributions/$2]]')",
+'exbeforeblank'               => "obsah pred vyčistením stránky bol: '$1'",
+'exblank'                     => 'stránka bola prázdna',
+'confirmdelete'               => 'Potvrdiť zmazanie',
+'deletesub'                   => '(Mažem "$1")',
+'historywarning'              => 'POZOR: Stránka, ktorú chcete zmazať má históriu:',
+'confirmdeletetext'           => 'Idete trvalo zmazať z databázy stránku alebo obrázok spolu so všetkými jeho/jej predošlými verziami. Potvrďte, že máte v úmysle tak urobiť, že ste si vedomý následkov, a že to robíte v súlade so [[{{MediaWiki:policy-url}}|zásadami a smernicami {{GRAMMAR:genitív|{{SITENAME}}}}]].',
+'actioncomplete'              => 'Úloha bola dokončená',
+'deletedtext'                 => '"$1" bol zmazaný.
+Na $2 nájdete zoznam posledných zmazaní.',
+'deletedarticle'              => '„[[$1]]“ zmazaná',
+'dellogpage'                  => 'Záznam zmazaní',
+'dellogpagetext'              => 'Tu je zoznam posledných zmazaní.
+Všetky zobrazené časy sú časy na serveri (UTC).
+<ul>
+</ul>',
+'deletionlog'                 => 'záznam zmazaní',
+'reverted'                    => 'Obnovené na skoršiu verziu',
+'deletecomment'               => 'Dôvod na zmazanie',
+'imagereverted'               => 'Obnovenie skoršej verzie bolo úspešné.',
+'rollback'                    => 'Rollback úprav',
+'rollback_short'              => 'Rollback',
+'rollbacklink'                => 'rollback',
+'rollbackfailed'              => 'Rollback neúspešný',
+'cantrollback'                => 'Nemôžem úpravu vrátiť späť, posledný autor je jediný autor tejto stránky.',
+'alreadyrolled'               => 'Nemôžem vrátiť späť poslednú úpravu [[$1]] od [[User:$2|$2]] ([[User talk:$2|Diskusia]]); niekto iný buď upravoval stránku, alebo už vrátil späť.
+
+Autorom poslednej úpravy je [[User:$3|$3]] ([[User talk:$3|Diskusia]]).',
+'editcomment'                 => 'Komentár k úprave bol: "<i>$1</i>".', # only shown if there is an edit comment
+'revertpage'                  => 'Posledné úpravy používateľa [[Special:Contributions/$2|$2]] ([[User_talk:$2|diskusia]]) vrátené; bola obnovená posledná úprava $1',
+'sessionfailure'              => 'Zdá sa, že je problém s vašou prihlasovacou reláciou;
+táto akcia bola zrušená ako prevencia proti zneužitiu relácie (session).
+Prosím, stlačte "naspäť", obnovte stránku, z ktorej ste sa sem dostali, a skúste to znova.',
+'protectlogpage'              => 'Záznam_zamknutí',
+'protectlogtext'              => 'Nižšie je zoznam zamknutí/odomknutí stránok.
+Môžete si pozrieť aj [[Special:Protectedpages|zoznam momentálne platných zamknutí]].',
+'protectedarticle'            => 'zamyká "[[$1]]"',
+'unprotectedarticle'          => 'odomyká "[[$1]]"',
+'protectsub'                  => '(Zamykám "$1")',
+'confirmprotecttext'          => 'Skutočne chcete zamknúť túto stránku?',
+'confirmprotect'              => 'Potvrďte zamknutie',
+'protectmoveonly'             => 'Zamkni iba presuny stránky',
+'protectcomment'              => 'Dôvod zamknutia',
+'protectexpiry'               => 'Zamknuté do',
+'protect_expiry_invalid'      => 'Neplatný čas vypršania.',
+'protect_expiry_old'          => 'Čas vypršania je v minulosti.',
+'unprotectsub'                => '(Odomykám "$1")',
+'confirmunprotecttext'        => 'Skutočne chcete odomknúť túto stránku?',
+'confirmunprotect'            => 'Potvrďte odomknutie',
+'unprotectcomment'            => 'Dôvod odomknutia',
+'protect-unchain'             => 'Odomknúť povolenia pre presun',
+'protect-text'                => 'Tu si môžete pozrieť a zmeniť úroveň ochrany stránky <strong>$1</strong>.',
+'protect-locked-blocked'      => 'Nemôžete meniť úroveň ochrany, kým ste zablokovaný.
+Tu sú aktuálne nastavenia stránky <strong>$1</strong>:',
+'protect-locked-dblock'       => 'Nie je možné zmeniť úroveň ochrany z dôvodu aktívneho zámku databázy.
+Tu sú aktuálne nastavenia stránky <strong>$1</strong>:',
+'protect-locked-access'       => 'Váš účet nemá oprávnenie meniť úroveň ochrany stránky.
+Tu sú aktuálne nastavenia stránky <strong>$1</strong>:',
+'protect-cascadeon'           => 'Táto stránka je momentálne zamknutá, lebo je použitá na nasledovných stránkach, ktoré majú zapnutú kaskádovú ochranu. Môžete zmeniť úroveň ochrany tejto stránky, ale neovplyvní to kaskádovú ochranu.',
+'protect-default'             => '(predvolené)',
+'protect-level-autoconfirmed' => 'Zablokovať neregistrovaných používateľov',
+'protect-level-sysop'         => 'Len pre správcov',
+'protect-summary-cascade'     => 'kaskáda',
+'protect-expiring'            => 'vyprší o $1 (UTC)',
+'protect-cascade'             => 'Kaskádové zamknutie - chrániť všetky stránky použité na tejto stránke.',
+'restriction-type'            => 'Povolenie',
+'restriction-level'           => 'Úroveň obmedzenia',
+'minimum-size'                => 'Minimálna veľkosť (v bajtoch)',
+
+# Restrictions (nouns)
+'restriction-edit' => 'Úprava',
+'restriction-move' => 'Presun',
+
+# Restriction levels
+'restriction-level-sysop'         => 'úplne zamknutá',
+'restriction-level-autoconfirmed' => 'čiastočne zamknutá',
+'restriction-level-all'           => 'akákoľvek úroveň',
+
+# Undelete
+'undelete'                 => 'Obnoviť zmazanú stránku',
+'undeletepage'             => 'Zobraziť a obnoviť vymazané stránky',
+'viewdeletedpage'          => 'Zobraz zmazané stránky',
+'undeletepagetext'         => 'Tieto stránky boli zmazané, ale sú stále v archíve a
+môžu byť obnovené. Archív môže byť pravidelne vyprázdnený.',
+'undeleteextrahelp'        => "Ak chcete obnoviť celú stránku, nechajte všetky zaškrtávacie polia nezaškrtnuté a kliknite na '''''Obnov!'''''.
+Ak chcete vykonať selektívnu obnovu, zašktrnite polia zodpovedajúce revíziám, ktoré sa majú obnoviť a kliknite na '''''Obnov'''''.
+Kliknutie na '''''Reset''''' vyčistí pole s komentárom a všetky zaškrtávacie polia.",
+'undeleterevisions'        => '$1 {{PLURAL:verzia je archivovaná|verzie sú archivované|verzií je archivovaných}}',
+'undeletehistory'          => 'Ak obnovíte túto stránku, obnovia sa aj všetky predchádzajúce verzie do zoznamu predchádzajúcich verzií.
+Ak bola od zmazania vytvorená nová stránka s rovnakým názvom, zobrazia sa
+obnovené verzie ako posledné úpravy novej stránky a aktuálna verzia novej stránky
+nebude automaticky nahradená.',
+'undeleterevdel'           => 'Obnovenie sa nevykoná, ak by malo mať za dôsledok čiastočné zmazanie poslednej revízie. V takých prípadoch musíte odznačiť alebo odkryť najnovšie zmazané revízie.
+Revízie súborov
+ktoré nemáte povolenie prehliadať sa neobnovia.',
+'undeletehistorynoadmin'   => 'Táto stránka bola zmazaná. Dôvod zmazania je zobrazený dolu v zhrnutí spolu s podrobnosťami o používateľoch, ktorí túto stránku upravovali pred zmazaním. Samotný text týchto zmazaných revízií je prístupný iba správcom.',
+'undelete-revision'        => 'Zmazaná revízia $1 od $2:',
+'undeleterevision-missing' => 'Neplatná alebo chýbajúca revízia. Zrejme ste použili zlý odkaz alebo revízia bola obnovená alebo odstránená z histórie.',
+'undeletebtn'              => 'Obnoviť!',
+'undeletereset'            => 'Reset',
+'undeletecomment'          => 'Komentár:',
+'undeletedarticle'         => 'obnovený „[[$1]]“',
+'undeletedrevisions'       => '$1 verzií obnovených',
+'undeletedrevisions-files' => '$1 revízií a $2 súbor(ov) obnovených',
+'undeletedfiles'           => '$1 súbor(ov) obnovený(ch)',
+'cannotundelete'           => 'Obnovenie sa nepodarilo; pravdepodobne niekto iný obnovil stránku skôr ako Vy.',
+'undeletedpage'            => "<big>'''$1 bol obnovený'''</big>
+
+Zoznam posledných mazaní a obnovení nájdete v [[Special:Log/delete|Zázname mazaní]].",
+'undelete-header'          => 'Pozri nedávno zmazané stránky v [[Special:Log/delete|zázname mazaní]].',
+'undelete-search-box'      => 'Hľadať zmazané stránky',
+'undelete-search-prefix'   => 'Zobraziť stránky od:',
+'undelete-search-submit'   => 'Hľadať',
+'undelete-no-results'      => 'V archíve mazaní neboli nájdené zodpovedajúce stránky.',
+
+# Namespace form on various pages
+'namespace' => 'Menný priestor:',
+'invert'    => 'Invertovať výber',
+
+# Contributions
+'contributions' => 'Príspevky používateľa',
+'mycontris'     => 'Moje príspevky',
+'contribsub2'    => 'Pre $1 ($2)',
+'nocontribs'    => 'Neboli nájdené úpravy, ktoré by zodpovedali týmto kritériám.',
+'ucnote'        => 'Nižšie je posledných <b>$1</b> úprav od tohto používateľa uskutočnených počas posledných <b>$2</b> dní.',
+'uclinks'       => 'Zobraz posledných $1 úprav; zobraz posledných $2 dní.',
+'uctop'         => '(posledná úprava)',
+
+'sp-contributions-newest'      => 'Najnovšie',
+'sp-contributions-oldest'      => 'Najstaršie',
+'sp-contributions-newer'       => 'Novších $1',
+'sp-contributions-older'       => 'Starších $1',
+'sp-contributions-newbies'     => 'Zobraziť len príspevky nových účtov',
+'sp-contributions-newbies-sub' => 'Pre nováčikov',
+'sp-contributions-blocklog'    => 'Záznam blokovaní',
+'sp-contributions-search'      => 'Hľadať príspevky',
+'sp-contributions-username'    => 'IP adresa alebo meno používateľa:',
+'sp-contributions-submit'      => 'Hľadať',
+
+'sp-newimages-showfrom' => 'Zobraz nové obrázky počínajúc $1',
+
+# What links here
+'whatlinkshere'      => 'Odkazy na túto stránku',
+'notargettitle'      => 'Nebol zadaný cieľ',
+'notargettext'       => 'Nezadali ste cieľovú stránku alebo používateľa,
+na ktorý/-ého chcete aplikovať túto funkciu.',
+'linklistsub'        => '(Zoznam odkazov)',
+'linkshere'          => "Nasledujúce stránky odkazujú na '''[[:$1]]''':",
+'nolinkshere'        => "Žiadne stránky neodkazujú na '''[[:$1]]'''.",
+'nolinkshere-ns'     => "Žiadne stránky neodkazujú na '''[[:$1]]''' vo zvolenom mennom priestore.",
+'isredirect'         => 'presmerovacia stránka',
+'istemplate'         => 'použitá',
+'whatlinkshere-prev' => 'predhádzajúce $1',
+'whatlinkshere-next' => 'nasledujúce $1',
+
+# Block/unblock
+'blockip'                     => 'Zablokovať používateľa',
+'blockiptext'                 => 'Použite tento formulár na zablokovanie možnosti zápisov uskutočnených z konkrétnej IP adresy alebo od používateľa.
+Mali by ste to urobiť len v prípade bránenia vandalizmu a v súlade so [[{{MediaWiki:policy-url}}|zásadami a smernicami {{GRAMMAR:genitív|{{SITENAME}}}}]].
+Nižšie uveďte konkrétny dôvod (napríklad uveďte konkrétne stránky, ktoré padli za obeť vandalizmu).',
+'ipaddress'                   => 'IP adresa',
+'ipadressorusername'          => 'IP adresa/meno používateľa',
+'ipbexpiry'                   => 'Ukončenie',
+'ipbreason'                   => 'Dôvod',
+'ipbanononly'                 => 'Blokovať iba anonymných používateľov.',
+'ipbcreateaccount'            => 'Zabráň vytváraniu účtov',
+'ipbenableautoblock'          => 'Automaticky blokovať poslednú IP adresu, ktorú tento používateľ použil, a všetky ďalšie adresy, z ktorých sa pokúsi upravovať.',
+'ipbsubmit'                   => 'Zablokovať tohto používateľa',
+'ipbother'                    => 'Iný čas',
+'ipboptions'                  => '2 hodiny:2 hours,1 deň:1 day,3 dni:3 days,1 týždeň:1 week,2 týždne:2 weeks,1 mesiac:1 month,3 mesiace:3 months,6 mesiacov:6 months,1 rok:1 year,na neurčito:infinite',
+'ipbotheroption'              => 'iný čas',
+'ipbhidename'                 => 'Skryť používateľa/IP zo záznamu blokovaní, aktívneho zoznamu blokovaní a zoznamu používateľov',
+'badipaddress'                => 'IP adresa má nesprávny formát.',
+'blockipsuccesssub'           => 'Zablokovanie bolo úspešné',
+'blockipsuccesstext'          => '"$1" bol/a zablokovaný/á.<br />
+[[Special:Ipblocklist|IP block list]] obsahuje zoznam blokovaní.',
+'ipb-unblock-addr'            => 'Odblokovať $1',
+'ipb-unblock'                 => 'Odblokovať používateľa alebo IP adresu',
+'ipb-blocklist-addr'          => 'Zobraziť existujúce blokovania pre $1',
+'ipb-blocklist'               => 'Zobraziť existujúce blokovania',
+'unblockip'                   => 'Odblokovať používateľa',
+'unblockiptext'               => 'Použite tento formulár na obnovenie možnosti zápisov
+z/od momentálne zablokovanej IP adresy/používateľa.',
+'ipusubmit'                   => 'Odblokovať túto adresu',
+'unblocked'                   => '[[User:$1|$1]] bol odblokovaný',
+'ipblocklist'                 => 'Zoznam zablokovaných používateľov/IP adries',
+'ipblocklist-submit'          => 'Hľadať',
+'blocklistline'               => '$1, $2 zablokoval $3 (ukončenie $4)',
+'infiniteblock'               => 'na neurčito',
+'expiringblock'               => 'ukončenie $1',
+'anononlyblock'               => 'iba anon.',
+'noautoblockblock'            => 'automatické blokovanie vypnuté',
+'createaccountblock'          => 'tvorba účtov bola zablokovaná',
+'ipblocklistempty'            => 'Zoznam blokovaných je prázdny.',
+'blocklink'                   => 'zablokovať',
+'unblocklink'                 => 'odblokuj',
+'contribslink'                => 'príspevky',
+'autoblocker'                 => 'Ste zablokovaný, pretože zdieľate IP adresu s "$1". Dôvod "$2".',
+'blocklogpage'                => 'Záznam_blokovaní',
+'blocklogentry'               => 'zablokoval/a "[[$1]]" s časom ukončenia $2 $3',
+'blocklogtext'                => 'Toto je zoznam blokovaní a odblokovaní používateľov. Automaticky
+blokované IP adresy nie sú zahrnuté. Viď zoznam
+[[Special:Ipblocklist|aktuálnych blokovaní]].',
+'unblocklogentry'             => 'odblokoval/a "$1"',
+'block-log-flags-anononly'    => 'iba anonymní používatelia',
+'block-log-flags-nocreate'    => 'možnosť vytvoriť si účet bola vypnutá',
+'block-log-flags-noautoblock' => 'autoblokovanie vypnuté',
+'range_block_disabled'        => 'Možnosť správcov vytvárať rozsah zablokovaní je vypnutá.',
+'ipb_expiry_invalid'          => 'Neplatný čas ukončenia.',
+'ipb_already_blocked'         => '"$1" je už zablokovaný',
+'ip_range_invalid'            => 'Neplatný IP rozsah.',
+'proxyblocker'                => 'Blokovač proxy',
+'ipb_cant_unblock'            => 'Chyba: ID bloku $1 nenájdený. Možno už bol odblokovaný.',
+'proxyblockreason'            => 'Vaša IP adresa bola zablokovaná, pretože je otvorená proxy. Prosím kontaktujte vášho internetového poskytovateľa alebo technickú podporu a informujte ich o tomto vážnom bezpečnostnom probléme.',
+'proxyblocksuccess'           => 'Hotovo.',
+'sorbs'                       => 'SORBS DNSBL',
+'sorbsreason'                 => 'Vaša IP adresa je vedená ako nezabezpečený proxy server v [http://www.sorbs.net SORBS] DNSBL.',
+'sorbs_create_account_reason' => 'Vaša IP adresa je vedená ako nezabezpečený proxy server v [http://www.sorbs.net SORBS] DNSBL. Nemôžete si vytvoriť účet.',
+
+# Developer tools
+'lockdb'              => 'Zamknúť databázu',
+'unlockdb'            => 'Odomknúť databázu',
+'lockdbtext'          => 'Zamknutím databázy sa preruší možnosť všetkých
+používateľov upravovať stránky, meniť svoje nastavenia, upravovať sledované stránky a
+iné veci vyžadujúce zmeny v databáze.
+Potvrďte, že to naozaj chcete urobiť, a že
+odomknete databázu po ukončení údržby.',
+'unlockdbtext'        => 'Odomknutie databázy obnoví schopnosť všetkých
+používateľov upravovať stránky, meniť svoje nastavenia, upravovať svoj zoznam sledovaných stránok a
+iné veci vyžadujúce zmeny v databáze.
+Potvrďte, že to naozaj chcete urobiť.',
+'lockconfirm'         => 'Áno, naozaj chcem zamknúť databázu.',
+'unlockconfirm'       => 'Áno, naozaj chcem odomknúť databázu.',
+'lockbtn'             => 'Zamknúť databázu',
+'unlockbtn'           => 'Odomknúť databázu',
+'locknoconfirm'       => 'Neoznačili ste potvrdzovacie pole.',
+'lockdbsuccesssub'    => 'Zamknutie databázy úspešné',
+'unlockdbsuccesssub'  => 'Databáza bola úspešne odomknutá',
+'lockdbsuccesstext'   => 'Databáza bola dočasne zamknutá.',
+'unlockdbsuccesstext' => 'Databáza {{GRAMMAR:genitív|{{SITENAME}}}} bola odomknutá.',
+'lockfilenotwritable' => 'Súbor, ktorý zamyká databázu nie je zapisovateľný. Aby bolo možné zamknúť či odomknúť databázu, je potrebné, aby doňho mohol web server zapisovať.',
+'databasenotlocked'   => 'Databáza nie je zamknutá.',
+
+# Move page
+'movepage'                => 'Presunúť stránku',
+'movepagetext'            => "Pomocou tohto formulára premenujete stránku a premiestnite všetky jej predchádzajúce verzie pod zadané nové meno.
+Starý názov sa stane presmerovacou stránkou na nový názov.
+Odkazy na starú stránku sa však nezmenia, ubezpečte sa, že ste skontrolovali
+výskyt dvojitých alebo pokazených presmerovaní.
+Vy ste zodpovedný za to, aby odkazy naďalej ukazovali
+tam, kam majú.
+
+Uvedomte si, že stránka sa '''nepremiestni''', ak pod novým názvom
+už stránka existuje. Toto neplatí iba ak je stránka prázdna alebo presmerovacia a nemá
+žiadne predchádzajúce verzie. To znamená, že môžete premenovať stránku späť na názov,
+ktorý mala pred premenovaním, ak ste sa pomýlili, a že nemôžete prepísať
+existujúcu stránku.
+
+<b>POZOR!</b>
+Toto môže byť drastická a nečakaná zmena pre populárnu stránku;
+ubezpečte sa preto, skôr ako budete pokračovať, že chápete
+dôsledky svojho činu.",
+'movepagetalktext'        => "Príslušná diskusná stránka (ak existuje) bude premiestnená spolu so samotnou stránkou; '''nestane sa tak, iba ak:'''
+*už existuje Diskusná stránka pod týmto novým menom, alebo
+*nezaškrtnete nižšie sa nachádzajúci textový rámček.
+
+V takých prípadoch budete musieť, ak si to želáte, premiestniť alebo zlúčiť stránku ručne.",
+'movearticle'             => 'Presunúť stránku',
+'movenologin'             => 'Nie ste prihlásený',
+'movenologintext'         => 'Musíte byť registrovaný používateľ a [[Special:Userlogin|prihlásený]], aby ste mohli presunúť stránku.',
+'newtitle'                => 'Na nový názov',
+'move-watch'              => 'Sledovať túto stránku',
+'movepagebtn'             => 'Presunúť stránku',
+'pagemovedsub'            => 'Presun bol úspešný',
+'pagemovedtext'           => 'Stránka "[[$1]]" bola presunutá na "[[$2]]".',
+'articleexists'           => 'Stránka s týmto názvom už existuje alebo
+vami zadaný názov je neplatný.
+Prosím vyberte si iný názov.',
+'talkexists'              => "'''Samotná stránka bola úspešne premiestnená,
+ale diskusná stránka sa nedala premiestniť,
+pretože už jedna existuje pod zadaným novým názvom.
+Prosím, zlúčte ich ručne.'''",
+'movedto'                 => 'presunutá na',
+'movetalk'                => 'Presunúť aj príslušnú diskusnú stránku, ak sa dá.',
+'talkpagemoved'           => 'Príslušná diskusná stránka bola tiež premiestnená.',
+'talkpagenotmoved'        => 'Príslušná diskusná stránka <strong>nebola</strong> premiestnená.',
+'1movedto2'               => '[[$1]] premiestnená na [[$2]]',
+'1movedto2_redir'         => '[[$1]] premiestnená na [[$2]] výmenou presmerovania',
+'movelogpage'             => 'Záznam presunov',
+'movelogpagetext'         => 'Tu je zoznam posledných presunutí.',
+'movereason'              => 'Dôvod',
+'revertmove'              => 'obnova',
+'delete_and_move'         => 'Vymazať a presunúť',
+'delete_and_move_text'    => '==Je potrebné zmazať stránku==
+
+Cieľová stránka "[[$1]]" už existuje. Chcete ho vymazať a vytvoriť tak priestor pre presun?',
+'delete_and_move_confirm' => 'Áno, zmaž stránku',
+'delete_and_move_reason'  => 'Vymazať, aby sa umožnil presun',
+'selfmove'                => 'Zdrojový a cieľový názov sú rovnaké; nemôžem presunúť stránku na seba samú.',
+'immobile_namespace'      => 'Cieľový názov je špeciálneho typu; nemôžem presunúť stránku do tohto menného priestoru.',
+
+# Export
+'export'            => 'Export stránok',
+'exporttext'        => 'Môžete exportovať text a históriu úprav konkrétnej
+stránky alebo množiny stránok do XML; tieto môžu byť potom importované do inej
+wiki používajúceho MediaWiki softvér pomocou stránky Special:Import.
+
+Pre export stránok zadajte názvy do tohto poľa, jeden názov na riadok, a zvoľte, či chcete iba súčasnú verziu s informáciou o poslednej úprave alebo aj všetky staršie verzie s históriou úprav.
+
+V druhom prípade môžete tiež použiť odkaz, napr. [[Special:Export/{{Mediawiki:Mainpage}}]] pre stránku {{Mediawiki:Mainpage}}.',
+'exportcuronly'     => 'Zahrň iba aktuálnu verziu, nie kompletnú históriu',
+'exportnohistory'   => '----',
+'export-submit'     => 'Export',
+'export-addcattext' => 'Pridať stránky z kategórie:',
+'export-addcat'     => 'Pridať',
+
+# Namespace 8 related
+'allmessages'               => 'Všetky systémové správy',
+'allmessagesname'           => 'Názov',
+'allmessagesdefault'        => 'štandardný text',
+'allmessagescurrent'        => 'aktuálny text',
+'allmessagestext'           => 'Toto je zoznam všetkých správ dostupných v mennom priestore MediaWiki.',
+'allmessagesnotsupportedUI' => "Special:AllMessages na tejto lokalite (site) nepodporuje jazyk pre vaše rozhranie ('''$1''').",
+'allmessagesnotsupportedDB' => 'Special:AllMessages nie je podporované, pretože je vypnuté wgUseDatabaseMessages.',
+'allmessagesfilter'         => 'Filter názvov správ:',
+'allmessagesmodified'       => 'Zobraz iba zmenené',
+
+# Thumbnails
+'thumbnail-more'           => 'Zväčšiť',
+'missingimage'             => '<b>Chýbajúci obrázok</b><br /><i>$1</i>\n',
+'filemissing'              => 'Chýbajúci súbor',
+'thumbnail_error'          => 'Chyba pri vytváraní náhľadu: $1',
+'djvu_page_error'          => 'DjVu stránka mimo rozsahu',
+'djvu_no_xml'              => 'Nebolo možné priniesť XML DjVu súboru',
+'thumbnail_invalid_params' => 'Neplatné parametre náhľadu',
+'thumbnail_dest_directory' => 'Nebolo možné vytvoriť cieľový adresár',
+
+# Special:Import
+'import'                     => 'Import stránok',
+'importinterwiki'            => 'Transwiki import',
+'import-interwiki-text'      => 'Zvoľte wiki a názov stránky, ktorá sa má importovať.
+Dátumy revízií a mená používateľov budú zachované.
+Všetky transwiki importy sa zaznamenávajú v [[Special:Log/import|Zázname importov]].',
+'import-interwiki-history'   => 'Skopírovať všetky historické revízie tejto stránky',
+'import-interwiki-submit'    => 'Importovať',
+'import-interwiki-namespace' => 'Presunúť stránky do menného priestoru:',
+'importtext'                 => 'Prosím exportujte súbor zo zdrojov wiki použitím nástroja Special:Export, uložte na váš disk a nahrajte tu.',
+'importstart'                => 'Importujú sa stránky...',
+'import-revision-count'      => '$1 {{PLURAL:$1|revízia|revízie|revízií}}',
+'importnopages'              => 'Žiadne stránky pre import.',
+'importfailed'               => 'Chyba pri importe: $1',
+'importunknownsource'        => 'Neznámy typ zdroja pre import',
+'importcantopen'             => 'Nedal sa otvoriť súbor importu',
+'importbadinterwiki'         => 'Zlý interwiki odkaz',
+'importnotext'               => 'Prázdny alebo žiadny text',
+'importsuccess'              => 'Import prebehol úspešne!',
+'importhistoryconflict'      => 'Existujú konfliktné histórie revízií (možno už bola táto stránka importovaná)',
+'importnosources'            => 'Neboli definované žiadne zdroje pre transwiki import a priame nahranie histórie je vypnuté.',
+'importnofile'               => 'Nebol nahraný import súbor.',
+'importuploaderror'          => 'Nahrávanie importovaného súboru sa nepodarilo; možno súbor presahuje najväčšiu povolenú veľkosť.',
+
+# Import log
+'importlogpage'                    => 'Záznam importov',
+'importlogpagetext'                => 'Administratívny import stránok vrátane histórie úprav z iných wiki.',
+'import-logentry-upload'           => 'importovaný $1 pomocou nahrania súboru',
+'import-logentry-upload-detail'    => '$1 {{PLURAL:$1|revízia|revízie|revízií}}',
+'import-logentry-interwiki'        => 'Transwiki import $1 úspešný',
+'import-logentry-interwiki-detail' => '$1 revízií z $2',
+
+# Tooltip help for the actions
+'tooltip-pt-userpage'             => 'Moja používateľská stránka',
+'tooltip-pt-anonuserpage'         => 'Používateľská stránka pre ip adresu, ktorú upravujete ako',
+'tooltip-pt-mytalk'               => 'Moja diskusná stránka',
+'tooltip-pt-anontalk'             => 'Diskusia o úpravách z tejto ip adresy',
+'tooltip-pt-preferences'          => 'Moje nastavenia',
+'tooltip-pt-watchlist'            => 'Zoznam stránok, na ktorých sledujete zmeny.',
+'tooltip-pt-mycontris'            => 'Zoznam mojich príspevkov',
+'tooltip-pt-login'                => 'Odporúčame Vám prihlásiť sa, nie je to však povinné.',
+'tooltip-pt-anonlogin'            => 'Odporúčame Vám prihlásiť sa, nie je to však povinné.',
+'tooltip-pt-logout'               => 'Odhlásiť',
+'tooltip-ca-talk'                 => 'Diskusia o obsahu stránky',
+'tooltip-ca-edit'                 => 'Môžete upravovať túto stránku. Prosíme, pred uložením použite tlačidlo Zobraziť náhľad.',
+'tooltip-ca-addsection'           => 'Pridať komentár k tejto diskusii.',
+'tooltip-ca-viewsource'           => 'Táto stránka je zamknutá. Môžete však vidieť jej zdrojový text.',
+'tooltip-ca-history'              => 'Minulé verzie tejto stránky.',
+'tooltip-ca-protect'              => 'Zamkni túto stránku',
+'tooltip-ca-delete'               => 'Vymazať túto stránku',
+'tooltip-ca-undelete'             => 'Obnov úpravy tejtoto stránky až po dobu jeho vymazania',
+'tooltip-ca-move'                 => 'Presunúť túto stránku',
+'tooltip-ca-watch'                => 'Pridať túto stránku do zoznamu sledovaných stránok',
+'tooltip-ca-unwatch'              => 'Odstrániť túto stránku zo sledovaných stránok',
+'tooltip-search'                  => 'Vyhľadávanie na {{GRAMMAR:datív|{{SITENAME}}}}',
+'tooltip-p-logo'                  => 'Hlavná stránka',
+'tooltip-n-mainpage'              => 'Navštíviť Hlavnú stránku',
+'tooltip-n-portal'                => 'O projekte, ako môžete prispieť, kde čo nájsť',
+'tooltip-n-currentevents'         => 'Aktuálne udalosti a ich pozadie',
+'tooltip-n-recentchanges'         => 'Zoznam posledných úprav vo wiki.',
+'tooltip-n-randompage'            => 'Zobrazenie náhodnej stránky',
+'tooltip-n-help'                  => 'Pozrieť si pomoc.',
+'tooltip-n-sitesupport'           => 'Podporte nás',
+'tooltip-t-whatlinkshere'         => 'Zoznam všetkých wiki stránok, ktoré sem odkazujú',
+'tooltip-t-recentchangeslinked'   => 'Posledné úpravy v stránkach, ktoré odkazujú na túto stránku',
+'tooltip-feed-rss'                => 'RSS feed pre túto stránku',
+'tooltip-feed-atom'               => 'Atom feed pre túto stránku',
+'tooltip-t-contributions'         => 'Pozrieť si zoznam príspevkov od tohto používateľa',
+'tooltip-t-emailuser'             => 'Poslať e-mail tomuto používateľovi',
+'tooltip-t-upload'                => 'Nahranie obrázkových alebo multimediálnych súborov',
+'tooltip-t-specialpages'          => 'Zoznam všetkých špeciálnych stránok',
+'tooltip-ca-nstab-main'           => 'Pozrieť si obsah stránky',
+'tooltip-ca-nstab-user'           => 'Pozrieť si stránku používateľa',
+'tooltip-ca-nstab-media'          => 'Pozrieť si stránku médií',
+'tooltip-ca-nstab-special'        => 'Toto je špeciálna stránka, nemôžete ju upravovať.',
+'tooltip-ca-nstab-project'        => 'Pozrieť si stránku projektu',
+'tooltip-ca-nstab-image'          => 'Pozrieť si stránku obrázka',
+'tooltip-ca-nstab-mediawiki'      => 'Pozrieť si systémovú stránku',
+'tooltip-ca-nstab-template'       => 'Pozrieť si šablónu',
+'tooltip-ca-nstab-help'           => 'Pozrieť si stránku Pomocníka',
+'tooltip-ca-nstab-category'       => 'Pozrieť si stránku s kategóriami',
+'tooltip-minoredit'               => 'Označiť túto úpravu ako drobnú',
+'tooltip-save'                    => 'Uložiť vaše úpravy',
+'tooltip-preview'                 => 'Náhľad úprav, prosím použite pred uložením!',
+'tooltip-diff'                    => 'Ukáž, aké zmeny ste urobili v texte.',
+'tooltip-compareselectedversions' => 'Zobraziť rozdiely medzi dvomi zvolenými verziami tejto stránky.',
+'tooltip-watch'                   => 'Pridaj túto stránku k sledovaným.',
+'tooltip-recreate'                => 'Znovu vytvoriť stránku napriek tomu, že bola zmazaná',
+
+# Stylesheets
+'common.css'   => '/** Tu sa nachádzajúce CSS sa použije pri všetkých skinoch */',
+'monobook.css' => '/* úpravou tohto súboru si prispôsobíte skin monobook pre celú wiki */',
+
+# Scripts
+'common.js'   => '/* Tu sa nachádzajúci JavaScript sa načíta všetkým používateľom pri každom načítaní stránky. */',
+'monobook.js' => '/* Zastaralé; použite [[MediaWiki:common.js]] */',
+
+# Metadata
+'nodublincore'      => 'Dublin Core RDF metadata sú pre tento server vypnuté.',
+'nocreativecommons' => 'Creative Commons RDF metadata sú pre tento server vypnuté.',
+'notacceptable'     => 'Wiki server nedokáže poskytovať dáta vo formáte, v akom ich váš klient vie čítať.',
+
+# Attribution
+'anonymous'        => 'anonymných používateľov {{GRAMMAR:genitív|{{SITENAME}}}}',
+'siteuser'         => 'používateľa {{GRAMMAR:genitív|{{SITENAME}}}} $1',
+'lastmodifiedatby' => 'Táto stránka bola naposledy upravovaná $2, $1 používateľom $3.', # $1 date, $2 time, $3 user
+'and'              => 'a',
+'othercontribs'    => 'Založené na práci $1.',
+'others'           => 'iné',
+'siteusers'        => 'používateľov {{GRAMMAR:genitív|{{SITENAME}}}} $1',
+'creditspage'      => 'Autori stránky',
+'nocredits'        => 'Pre túto stránku neexistujú žiadne dostupné ocenenia.',
+
+# Spam protection
+'spamprotectiontitle'    => 'Filter na ochranu pred spamom',
+'spamprotectiontext'     => 'Stránka, ktorú ste chceli uložiť, bola blokovaná filtrom na spam. Pravdepodobne to spôsobil link na externú internetovú lokalitu (site).',
+'spamprotectionmatch'    => 'Nasledujúci text aktivoval náš spam filter: $1',
+'subcategorycount'       => 'V tejto kategórii {{PLURAL:$1|je jedna podkategória|sú $1 podkategórie|je $1 podkategórií}}.',
+'categoryarticlecount'   => 'V tejto kategórii {{PLURAL:$1|je jedna stránka|sú $1 stránky|je $1 stránok}}.',
+'category-media-count'   => 'V tejto kategórii {{PLURAL:$1|je jeden súbor|sú $1 súbory|je $1 súborov}}.',
+'listingcontinuesabbrev' => ' pokrač.',
+'spambot_username'       => 'MediaWiki čistenie spamu',
+'spam_reverting'         => 'Revertujem na poslednú verziu, ktorá neobsahuje odkazy na $1',
+'spam_blanking'          => 'Všetky revízie obsahovali odkaz na $1, odstraňujem obsah',
+
+# Info page
+'infosubtitle'   => 'Informácie o stránke',
+'numedits'       => 'Počet úprav (stránka): $1',
+'numtalkedits'   => 'Počet úprav (diskusná stránka): $1',
+'numwatchers'    => 'Počet zobrazení: $1',
+'numauthors'     => 'Počet odlišných autorov (stránka): $1',
+'numtalkauthors' => 'Počet odlišných autorov (diskusná stránka): $1',
+
+# Math options
+'mw_math_png'    => 'Vždy vykresľuj PNG',
+'mw_math_simple' => 'Na jednoduché použi HTML, inak PNG',
+'mw_math_html'   => 'Ak sa dá, použi HTML, inak PNG',
+'mw_math_source' => 'Ponechaj TeX (pre textové prehliadače)',
+'mw_math_modern' => 'Odporúčané pre moderné prehliadače',
+'mw_math_mathml' => 'MathML (experimentálne)',
+
+# Patrolling
+'markaspatrolleddiff'                 => 'Označ ako strážený',
+'markaspatrolledtext'                 => 'Označ túto stránku ako stráženú',
+'markedaspatrolled'                   => 'Označené ako strážené',
+'markedaspatrolledtext'               => 'Vybraná verzia bola označená na stráženie.',
+'rcpatroldisabled'                    => 'Stráženie posledných zmien bolo vypnuté',
+'rcpatroldisabledtext'                => 'Funkcia stráženia posledných zmien je momentálne vypnutá.',
+'markedaspatrollederror'              => 'Nie je možné označiť ako strážené',
+'markedaspatrollederrortext'          => 'Pre označenie ako strážený je potrebné uviesť revíziu, ktorá sa má označiť ako strážená.',
+'markedaspatrollederror-noautopatrol' => 'Nie je vám umožnené označiť vlastné zmeny za strážené.',
+
+# Patrol log
+'patrol-log-page' => 'Záznam strážení',
+'patrol-log-line' => '$1 z $2 označených ako sledované $3',
+'patrol-log-auto' => '(automaticky)',
+'patrol-log-diff' => 'r$1',
+
+# Image deletion
+'deletedrevision' => 'Zmazať staré verzie $1.',
+
+# Browsing diffs
+'previousdiff' => '← Predchádzajúci rozdiel',
+'nextdiff'     => 'Ďalší rozdiel →',
+
+# Media information
+'mediawarning'         => "'''Upozornenie''': Tento súbor môže obsahovať nebezpečný programový kód, po spustení ktorého by bol váš systém kompromitovaný.
+<hr />",
+'imagemaxsize'         => 'Obmedz obrázky na popisnej stránke obrázka na:',
+'thumbsize'            => 'Veľkosť náhľadu:',
+'file-info'            => '(veľkosť súboru: $1, MIME typ: $2)',
+'file-info-size'       => '($1 × $2 pixel, veľkosť súboru: $3, MIME typ: $4)',
+'file-nohires'         => '<small>Nie je dostupné vyššie rozlíšenie.</small>',
+'file-svg'             => '<small>Toto je bezstratový šakálovateľný vektorový obrázok. Základná veľkosť: $1 × $2 pixelov.</small>',
+'show-big-image'       => 'Obrázok vo vyššom rozlíšení',
+'show-big-image-thumb' => '<small>Veľkosť tohto náhľadu: $1 × $2 pixelov</small>',
+
+'newimages'    => 'Galéria nových obrázkov',
+'showhidebots' => '($1 botov)',
+'noimages'     => 'Nič na zobrazenie.',
+
+'passwordtooshort' => 'Vaše heslo je príliš krátke. Musí mať dĺžku aspoň $1 znakov.',
+
+# Metadata
+'metadata'          => 'Metadáta',
+'metadata-help'     => 'Tento súbor obsahuje ďalšie informácie, pravdepodobne pochádzajúce z digitálneho fotoaparátu či scannera ktorý ho vytvoril alebo digitalizoval. Ak bol súbor zmenený, niektoré podrobnosti sa nemusia plne zhodovať so zmeneným obrázkom.',
+'metadata-expand'   => 'Zobraz detaily EXIF',
+'metadata-collapse' => 'Skry detaily EXIF',
+'metadata-fields'   => 'Polia EXIF metadát uvedených v tejto správe sa zobrazia na stránke obrázka vtedy, keď je tabuľka metadát zbalená. Ostatné sa štandardne nezobrazia.
+* make
+* model
+* datetimeoriginal
+* exposuretime
+* fnumber
+* focallength',
+
+# EXIF tags
+'exif-imagewidth'                  => 'Šírka',
+'exif-imagelength'                 => 'Výška',
+'exif-bitspersample'               => 'Bitov na zložku',
+'exif-compression'                 => 'Kompresná schéma',
+'exif-photometricinterpretation'   => 'Pixelové zloženie',
+'exif-orientation'                 => 'Orientácia',
+'exif-samplesperpixel'             => 'Počet zložiek',
+'exif-planarconfiguration'         => 'Rozloženie dát',
+'exif-ycbcrsubsampling'            => 'Pomer podvzorkovania Y ku C',
+'exif-ycbcrpositioning'            => 'Poloha Y a C',
+'exif-xresolution'                 => 'Horizontálne rozlíšenie',
+'exif-yresolution'                 => 'Vertikálne rozlíšenie',
+'exif-resolutionunit'              => 'Jednotky horizontálneho a verikálneho rozlíšenia',
+'exif-stripoffsets'                => 'Umiestnenie obrazových dát',
+'exif-rowsperstrip'                => 'Počet riadkov na pás',
+'exif-stripbytecounts'             => 'Bajtov na komprimovaný prúžok',
+'exif-jpeginterchangeformat'       => 'Offset k JPEG SOI',
+'exif-jpeginterchangeformatlength' => 'Bytov JPEG dát',
+'exif-transferfunction'            => 'Prenosová funkcia',
+'exif-whitepoint'                  => 'Chromaticita bieleho bodu',
+'exif-primarychromaticities'       => 'Chromaticity primárností',
+'exif-ycbcrcoefficients'           => 'Koeficienty transformačnej matice farebného priestoru',
+'exif-referenceblackwhite'         => 'Dvojica bielych a čiernych referenčných hodnôt',
+'exif-datetime'                    => 'Dátum a čas zmeny súboru',
+'exif-imagedescription'            => 'Názov obrázka',
+'exif-make'                        => 'Výrobca aparátu',
+'exif-model'                       => 'Model aparátu',
+'exif-software'                    => 'Použitý softvér',
+'exif-artist'                      => 'Autor',
+'exif-copyright'                   => 'Držiteľ autorských práv',
+'exif-exifversion'                 => 'Verzia exif tagu',
+'exif-flashpixversion'             => 'Podporovaná verzia Flashpix',
+'exif-colorspace'                  => 'Farebný priestor',
+'exif-componentsconfiguration'     => 'Význam jednotlivých zložiek',
+'exif-compressedbitsperpixel'      => 'Kompresný režim obrázka',
+'exif-pixelydimension'             => 'platná šírka obrázka',
+'exif-pixelxdimension'             => 'Platná vyška obrázka',
+'exif-makernote'                   => 'Poznámky výrobcu',
+'exif-usercomment'                 => 'Komentáre používateľa',
+'exif-relatedsoundfile'            => 'Súvisiaci zvukový súbor',
+'exif-datetimeoriginal'            => 'Dátum a čas vytvorenia dát',
+'exif-datetimedigitized'           => 'Dátum a čas digitalizácie',
+'exif-subsectime'                  => 'Subsekundy DateTime',
+'exif-subsectimeoriginal'          => 'Zlomky sekundy DateTimeOriginal',
+'exif-subsectimedigitized'         => 'Zlomky sekundy DateTimeDigitized',
+'exif-exposuretime'                => 'Expozičný čas',
+'exif-exposuretime-format'         => '$1 sekundy ($2)',
+'exif-fnumber'                     => 'Číslo F',
+'exif-fnumber-format'              => 'f/$1',
+'exif-exposureprogram'             => 'Expozičný program',
+'exif-spectralsensitivity'         => 'Spektrálna citlivosť',
+'exif-isospeedratings'             => 'Rýchlostné ohodnotenie ISO',
+'exif-oecf'                        => 'Optoelektronický konverzný činiteľ',
+'exif-shutterspeedvalue'           => 'Rýchlosť uzávierky',
+'exif-aperturevalue'               => 'Clona',
+'exif-brightnessvalue'             => 'Jas',
+'exif-exposurebiasvalue'           => 'Expozičné skreslenie',
+'exif-maxaperturevalue'            => 'Maximálna krajinná clona',
+'exif-subjectdistance'             => 'Vzdialenosť subjektu',
+'exif-meteringmode'                => 'Merací režim',
+'exif-lightsource'                 => 'Svetelný zdroj',
+'exif-flash'                       => 'Blesk',
+'exif-focallength'                 => 'Ohnisková vzdialenosť šošoviek',
+'exif-focallength-format'          => '$1 mm',
+'exif-subjectarea'                 => 'Oblasť subjektu',
+'exif-flashenergy'                 => 'Energia blesku',
+'exif-spatialfrequencyresponse'    => 'Priestorová frekvenčná odozva',
+'exif-focalplanexresolution'       => 'Horizontálne rozlíšenie ohniskovej roviny',
+'exif-focalplaneyresolution'       => 'Vertikálne rozlíšenie ohniskovej roviny',
+'exif-focalplaneresolutionunit'    => 'Jednotka rozlíšenia v ohniskovej rovine',
+'exif-subjectlocation'             => 'Umiestnenie subjektu',
+'exif-exposureindex'               => 'Expozičný index',
+'exif-sensingmethod'               => 'Snímacia metóda',
+'exif-filesource'                  => 'Zdroj súboru',
+'exif-scenetype'                   => 'Typ scény',
+'exif-cfapattern'                  => 'Vzor CFA',
+'exif-customrendered'              => 'Ručné spracovanie obrazu',
+'exif-exposuremode'                => 'Expozičný režim',
+'exif-whitebalance'                => 'Vyváženie bielej',
+'exif-digitalzoomratio'            => 'Rozsah digitálneho zoomu',
+'exif-focallengthin35mmfilm'       => 'Ohnisková vzdialenosť 35 mm filmu',
+'exif-scenecapturetype'            => 'Typ zachytenia scény',
+'exif-gaincontrol'                 => 'Riadenie scény',
+'exif-contrast'                    => 'Kontrast',
+'exif-saturation'                  => 'Sýtosť',
+'exif-sharpness'                   => 'Ostrosť',
+'exif-devicesettingdescription'    => 'Opis nastavení zariadenia',
+'exif-subjectdistancerange'        => 'Rozsah vzdialenosti subjektu',
+'exif-imageuniqueid'               => 'Jedinečný ID obrázka',
+'exif-gpsversionid'                => 'Verzia GPS tagu',
+'exif-gpslatituderef'              => 'Severná alebo južná šírka',
+'exif-gpslatitude'                 => 'Zemepisná šírka',
+'exif-gpslongituderef'             => 'Západná alebo východná dĺžka',
+'exif-gpslongitude'                => 'Zemepisná dĺžka',
+'exif-gpsaltituderef'              => 'Referencia výšky',
+'exif-gpsaltitude'                 => 'Výška',
+'exif-gpstimestamp'                => 'Čas GPS (atómové hodiny)',
+'exif-gpssatellites'               => 'Satelity použité pri meraní',
+'exif-gpsstatus'                   => 'Stav prijímača',
+'exif-gpsmeasuremode'              => 'Režim merania',
+'exif-gpsdop'                      => 'Presnosť merania',
+'exif-gpsspeedref'                 => 'Rýchlostná jednotka',
+'exif-gpsspeed'                    => 'Rýchlosť prijímača GPS',
+'exif-gpstrackref'                 => 'Referencia pre smer pohybu',
+'exif-gpstrack'                    => 'Smer pohybu',
+'exif-gpsimgdirectionref'          => 'Referencia pre smer obrázka',
+'exif-gpsimgdirection'             => 'Smer obrázka',
+'exif-gpsmapdatum'                 => 'Použité údaje geodetického prieskumu',
+'exif-gpsdestlatituderef'          => 'Referencia zemepisnej šírky cieľa',
+'exif-gpsdestlatitude'             => 'Zemepisná šírka cieľa',
+'exif-gpsdestlongituderef'         => 'Referencia zemepisnej dĺžky cieľa',
+'exif-gpsdestlongitude'            => 'Zemepisná dĺžka cieľa',
+'exif-gpsdestbearingref'           => 'Referencia polohy cieľa',
+'exif-gpsdestbearing'              => 'Smer k cieľu',
+'exif-gpsdestdistanceref'          => 'Referencia vzdialenosti cieľa',
+'exif-gpsdestdistance'             => 'Vzdialenosť k cieľu',
+'exif-gpsprocessingmethod'         => 'Názov GPS metódy spracovania',
+'exif-gpsareainformation'          => 'Názov GPS oblasti',
+'exif-gpsdatestamp'                => 'Dátum GPS',
+'exif-gpsdifferential'             => 'Diferenciálna korekcia GPS',
+
+# EXIF attributes
+'exif-compression-1' => 'Bez kompresie',
+'exif-compression-6' => 'JPEG',
+
+'exif-photometricinterpretation-2' => 'RGB',
+'exif-photometricinterpretation-6' => 'YCbCr',
+
+'exif-unknowndate' => 'Neznámy dátum',
+
+'exif-orientation-1' => 'Normálna', # 0th row: top; 0th column: left
+'exif-orientation-2' => 'Horizontálne prevrátená', # 0th row: top; 0th column: right
+'exif-orientation-3' => 'Otočená o 180°', # 0th row: bottom; 0th column: right
+'exif-orientation-4' => 'Vertikálne prevrátená', # 0th row: bottom; 0th column: left
+'exif-orientation-5' => 'Otočená o 90° proti smeru hodinových ručičiek a vertikálne prevrátená', # 0th row: left; 0th column: top
+'exif-orientation-6' => 'Otočená o 90° v smere hodinových ručičiek', # 0th row: right; 0th column: top
+'exif-orientation-7' => 'Otočená o 90° v smere hodinových ručičiek a vertikálne prevrátená', # 0th row: right; 0th column: bottom
+'exif-orientation-8' => 'Otočená o 90° proti smeru hodinových ručičiek', # 0th row: left; 0th column: bottom
+
+'exif-planarconfiguration-1' => 'masívny formát',
+'exif-planarconfiguration-2' => 'rovinný formát',
+
+'exif-xyresolution-i' => '$1 dpi',
+'exif-xyresolution-c' => '$1 dpc',
+
+'exif-colorspace-1'      => 'sRGB',
+'exif-colorspace-ffff.h' => 'FFFF.H',
+
+'exif-componentsconfiguration-0' => 'neexistuje',
+'exif-componentsconfiguration-1' => 'Y',
+'exif-componentsconfiguration-2' => 'Cb',
+'exif-componentsconfiguration-3' => 'Cr',
+'exif-componentsconfiguration-4' => 'R',
+'exif-componentsconfiguration-5' => 'G',
+'exif-componentsconfiguration-6' => 'B',
+
+'exif-exposureprogram-0' => 'Nedefinovaný',
+'exif-exposureprogram-1' => 'Ručný',
+'exif-exposureprogram-2' => 'Normálny program',
+'exif-exposureprogram-3' => 'Priorita clony',
+'exif-exposureprogram-4' => 'Priorita uzávierky',
+'exif-exposureprogram-5' => 'Tvorivý program (prevažuje smerom k hĺbke poľa)',
+'exif-exposureprogram-6' => 'Akčný program (prevažuje smerom k rýchlosti uzávierky)',
+'exif-exposureprogram-7' => 'Režim portrét (pre detailné zábery s nezaostreným pozadím)',
+'exif-exposureprogram-8' => 'Režim krajinka (pre fotografie krajiny so zaostreným pozadím)',
+
+'exif-subjectdistance-value' => '$1 metrov',
+
+'exif-meteringmode-0'   => 'Neznámy',
+'exif-meteringmode-1'   => 'Priemer',
+'exif-meteringmode-2'   => 'Vážený priemer',
+'exif-meteringmode-3'   => 'Bod',
+'exif-meteringmode-4'   => 'Viacero bodov',
+'exif-meteringmode-5'   => 'Vzor',
+'exif-meteringmode-6'   => 'Čiastočný',
+'exif-meteringmode-255' => 'Iný',
+
+'exif-lightsource-0'   => 'Neznámy',
+'exif-lightsource-1'   => 'Denné svetlo',
+'exif-lightsource-2'   => 'Fluorescenčný',
+'exif-lightsource-3'   => 'Volfrám (inkandescentné svetlo)',
+'exif-lightsource-4'   => 'Blesk',
+'exif-lightsource-9'   => 'Dobré počasie',
+'exif-lightsource-10'  => 'Hmlisté počasie',
+'exif-lightsource-11'  => 'Tieň',
+'exif-lightsource-12'  => 'Fluorescenčné denné svetlo (D 5700 – 7100K)',
+'exif-lightsource-13'  => 'Flourescenčná denná biela (N 4600 – 5400K)',
+'exif-lightsource-14'  => 'Fuorescenčná chladná biela (W 3900 – 4500K)',
+'exif-lightsource-15'  => 'Fluorescenčná biela (WW 3200 – 3700K)',
+'exif-lightsource-17'  => 'Štandardné svetlo A',
+'exif-lightsource-18'  => 'Štandardné svetlo B',
+'exif-lightsource-19'  => 'Štandardné svetlo C',
+'exif-lightsource-20'  => 'D55',
+'exif-lightsource-21'  => 'D65',
+'exif-lightsource-22'  => 'D75',
+'exif-lightsource-23'  => 'D50',
+'exif-lightsource-24'  => 'ISO štúdiový volfrám',
+'exif-lightsource-255' => 'Iný svetelný zdroj',
+
+'exif-focalplaneresolutionunit-2' => 'palcov',
+
+'exif-sensingmethod-1' => 'Nedefinovaná',
+'exif-sensingmethod-2' => 'Jednočipový farebný snímač oblasti',
+'exif-sensingmethod-3' => 'Dvojčipový farebný snímač oblasti',
+'exif-sensingmethod-4' => 'Trojčipový farebný snímač oblasti',
+'exif-sensingmethod-5' => 'Sekvenčný farebný snímač oblasti',
+'exif-sensingmethod-7' => 'Trilineárny snímač',
+'exif-sensingmethod-8' => 'Sekvenčný farebný lineárny snímač',
+
+'exif-filesource-3' => 'DSC',
+
+'exif-scenetype-1' => 'Priamo odfotený obrázok',
+
+'exif-customrendered-0' => 'Normálne spracovanie',
+'exif-customrendered-1' => 'Ručné spracovanie',
+
+'exif-exposuremode-0' => 'Automatická expozícia',
+'exif-exposuremode-1' => 'Ručná expozícia',
+'exif-exposuremode-2' => 'Automatická kompenzácia expozície',
+
+'exif-whitebalance-0' => 'Automatické vyváženie bielej',
+'exif-whitebalance-1' => 'Ručné vyváženie bielej',
+
+'exif-scenecapturetype-0' => 'Štandardný',
+'exif-scenecapturetype-1' => 'Krajinka',
+'exif-scenecapturetype-2' => 'Portrét',
+'exif-scenecapturetype-3' => 'Nočná scéna',
+
+'exif-gaincontrol-0' => 'Žiadne',
+'exif-gaincontrol-1' => 'Slabé zosilnenie nahor',
+'exif-gaincontrol-2' => 'Silné zosilnenie nahor',
+'exif-gaincontrol-3' => 'Slabé zosilnenie nadol',
+'exif-gaincontrol-4' => 'Silné zosilnenie nadol',
+
+'exif-contrast-0' => 'Normálny',
+'exif-contrast-1' => 'Mäkký',
+'exif-contrast-2' => 'Tvrdý',
+
+'exif-saturation-0' => 'Normálna',
+'exif-saturation-1' => 'Nízka sýtosť',
+'exif-saturation-2' => 'Výsoká sýtosť',
+
+'exif-sharpness-0' => 'Normálna',
+'exif-sharpness-1' => 'Mäkká',
+'exif-sharpness-2' => 'Tvrdá',
+
+'exif-subjectdistancerange-0' => 'Neznámy',
+'exif-subjectdistancerange-1' => 'Makro',
+'exif-subjectdistancerange-2' => 'Blízky pohľad',
+'exif-subjectdistancerange-3' => 'Ďaleký pohľad',
+
+# Pseudotags used for GPSLatitudeRef and GPSDestLatitudeRef
+'exif-gpslatitude-n' => 'Severná šírka',
+'exif-gpslatitude-s' => 'Južná šírka',
+
+# Pseudotags used for GPSLongitudeRef and GPSDestLongitudeRef
+'exif-gpslongitude-e' => 'Východná dĺžka',
+'exif-gpslongitude-w' => 'Západná dĺžka',
+
+'exif-gpsstatus-a' => 'Prebieha meranie',
+'exif-gpsstatus-v' => 'Interoperabilita merania',
+
+'exif-gpsmeasuremode-2' => '2-rozmerné meranie',
+'exif-gpsmeasuremode-3' => '3-rozmerné meranie',
+
+# Pseudotags used for GPSSpeedRef and GPSDestDistanceRef
+'exif-gpsspeed-k' => 'Kilometrov za hodinu',
+'exif-gpsspeed-m' => 'Míľ za hodinu',
+'exif-gpsspeed-n' => 'Uzlov',
+
+# Pseudotags used for GPSTrackRef, GPSImgDirectionRef and GPSDestBearingRef
+'exif-gpsdirection-t' => 'Skutočný smer',
+'exif-gpsdirection-m' => 'Magnetický smer',
+
+# External editor support
+'edit-externally'      => 'Uprav tento súbor pomocou externého programu',
+'edit-externally-help' => 'Viac informácií poskytnú inštrukcie pre nastavenie [http://meta.wikimedia.org/wiki/Help:External_editors externého editora].',
+
+# 'all' in various places, this might be different for inflected languages
+'recentchangesall' => 'všetky',
+'imagelistall'     => 'všetky',
+'watchlistall1'    => 'všetky',
+'watchlistall2'    => 'všetky',
+'namespacesall'    => 'všetky',
+
+# E-mail address confirmation
+'confirmemail'            => 'Potvrdiť e-mailovú adresu',
+'confirmemail_noemail'    => 'Nenastavili ste platnú emailovú adresu vo svojich [[Special:Preferences|Nastaveniach]].',
+'confirmemail_text'       => 'Táto wiki vyžaduje, aby ste potvrdili platnosť Vašej e-mailovej adresy
+pred používaním e-mailových funkcií. Kliknite na tlačidlo dole, aby sa na Vašu adresu odoslal potvrdzovací
+e-mail. V e-maili bude aj odkaz obsahujúci kód; načítajte odkaz
+do Vášho prehliadača pre potvrdenie, že Vaša e-mailová adresa je platná.',
+'confirmemail_pending'    => '<div class="error">
+Potvrdzovací kód vám už bol zaslaný; ak ste si účet vytvorili len nedávno
+mali by ste počkať niekoľko minút, kým vám bude email doručený, predtým
+než si vyžiadate nový kód.
+</div>',
+'confirmemail_send'       => 'Odoslať potvrdzovací kód',
+'confirmemail_sent'       => 'Potvrdzovací e-mail odoslaný.',
+'confirmemail_oncreate'   => 'Na vašu emailovú adresu bol odoslaný potvrdzovací kód.
+Tento kód nie je potrebný na prihlásenie, ale budete ho musieť poskytnúť pred
+zapnutím vlastností wiki využívajcich email.',
+'confirmemail_sendfailed' => 'Nebolo možné odoslať potvrdzovací e-mail. Skontrolujte neplatné znaky v adrese.
+
+Program, ktorý odosielal poštu vrátil: $1',
+'confirmemail_invalid'    => 'Neplatný potvrdzovací kód. Kód možno vypršal.',
+'confirmemail_needlogin'  => 'Musíte sa $1 na potvrdenie Vašej emailovaj adresy.',
+'confirmemail_success'    => 'Vaša e-mailová adresa bola potvrdená. Môžete sa prihlásiť a využívať wiki.',
+'confirmemail_loggedin'   => 'Vaša e-mailová adresa bola potvrdená.',
+'confirmemail_error'      => 'Niečo sa pokazilo pri ukladaní vášho potvrdenia.',
+'confirmemail_subject'    => '{{SITENAME}} - potvrdenie e-mailovej adresy',
+'confirmemail_body'       => 'Niekto, pravdepodobne vy z IP adresy $1, zaregistroval účet
+"$2" s touto e-mailovou adresou na {{GRAMMAR:lokál|{{SITENAME}}}}.
+
+Pre potvrdenie, že tento účet skutočne patrí Vám a pre aktivovanie
+e-mailových funkcií na {{GRAMMAR:lokál|{{SITENAME}}}}, otvorte tento odkaz vo vašom prehliadači:
+
+$3
+
+Ak ste to *neboli* Vy, neotvárajte odkaz. Tento potvrdzovací kód
+vyprší o $4.',
+
+# Inputbox extension, may be useful in other contexts as well
+'tryexact'       => 'Skúste presné vyhľadávanie',
+'searchfulltext' => 'Fulltextové vyhľadávanie',
+'createarticle'  => 'Vytvoriť stránku',
+
+# Scary transclusion
+'scarytranscludedisabled' => '[Transklúzia interwiki je vypnutá]',
+'scarytranscludefailed'   => '[Nepodarilo sa priniesť šablónu pre $1; prepáčte]',
+'scarytranscludetoolong'  => '[URL je príliš dlhé; prepáčte]',
+
+# Trackbacks
+'trackbackbox'      => '<div id="mw_trackbacks">
+Trackback pre túto stránku:<br />
+$1
+</div>',
+'trackbackremove'   => ' ([$1 Zmazať])',
+'trackbacklink'     => 'Trackback',
+'trackbackdeleteok' => 'Trackback úspešne zmazaný.',
+
+# Delete conflict
+'deletedwhileediting' => 'Varovanie: Táto stránka bola zmazaná potom, ako ste začali s úpravami!',
+'confirmrecreate'     => "Používateľ [[User:$1|$1]] ([[User talk:$1|diskusia]]) zmazal túto stránku potom, ako ste ho začal upravovať s odôvodnením:
+: ''$2''
+Prosím, potvrďte, že túto stránku chcete skutočne znovu vytvoriť.",
+'recreate'            => 'Znova vytvoriť',
+
+# HTML dump
+'redirectingto' => 'Presmerovanie na [[$1]]...',
+
+# action=purge
+'confirm_purge'        => 'Vyčistiť cache pamäť tejto stránky?
+
+$1',
+'confirm_purge_button' => 'OK',
+
+'youhavenewmessagesmulti' => 'Máte nové správy na $1',
+
+'searchcontaining' => "Hľadaj stránky obsahujúce ''$1''.",
+'searchnamed'      => "Hľadaj stránky s názvom ''$1''.",
+'articletitles'    => "Stránky začínajúce na ''$1''",
+'hideresults'      => 'Skryť výsledky',
+
+# DISPLAYTITLE
+'displaytitle' => '(Odkazujte na túto stránku ako [[$1]])',
+
+'loginlanguagelabel' => 'Jazyk: $1',
+
+# Multipage image navigation
+'imgmultipageprev'   => '&larr; predošlá stránka',
+'imgmultipagenext'   => 'ďalšia stránka &rarr;',
+'imgmultigo'         => 'Spustiť',
+'imgmultigotopre'    => 'Choď na stránku',
+'imgmultiparseerror' => 'Tento súbor obrázka vyzerá byť poškodený alebo nesprávny, takže {{SITENAME}} nemôže získať zoznam stránok.',
+
+# Table pager
+'ascending_abbrev'         => 'vzostupne',
+'descending_abbrev'        => 'zostupne',
+'table_pager_next'         => 'Nasledujúca stránka',
+'table_pager_prev'         => 'Predošlá stránka',
+'table_pager_first'        => 'Prvá stránka',
+'table_pager_last'         => 'Posledná stránka',
+'table_pager_limit'        => 'Zobraz $1 položiek na stránku',
+'table_pager_limit_submit' => 'Spusti',
+'table_pager_empty'        => 'Bez výsledkov',
+
+# Auto-summaries
+'autosumm-blank'   => 'Odstraňujem obsah stránky',
+'autosumm-replace' => "Nahrádzam stránku textom '$1'",
+'autoredircomment' => 'Presmerovanie na [[$1]]', # This should be changed to the new naming convention, but existed beforehand
+'autosumm-new'     => 'Nová stránka: $1',
+
+# Size units
+'size-bytes'     => '$1 B',
+'size-kilobytes' => '$1 KB',
+'size-megabytes' => '$1 MB',
+'size-gigabytes' => '$1 GB',
+
+# Live preview
+'livepreview-loading' => 'Načítanie…',
+'livepreview-ready'   => 'Načítanie… Hotovo!',
+'livepreview-failed'  => 'Živý náhľad sa nepodarilo zrealizovať!
+Skúste obyčajný náhľad.',
+'livepreview-error'   => 'Nepodarilo sa pripojiť: $1 "$2"
+Skúste obyčajný náhľad.',
+
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesSl.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesSl.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesSl.php	(revision 1280)
@@ -0,0 +1,1728 @@
+<?php
+/** Slovenian (Slovenščina)
+ *
+ * @addtogroup Language
+ *
+ */
+
+#
+# Revision/
+# Inačica 1.00.00 XJamRastafire 2003-07-08 |NOT COMPLETE
+#         1.00.10 XJamRastafire 2003-11-03 |NOT COMPLETE
+# ______________________________________________________
+#         1.00.20 XJamRastafire 2003-11-05 |    COMPLETE
+#         1.00.30 romanm        2003-11-07 |    minor changes
+#         1.00.31 romanm        2003-11-11 |    merged incorrectly broken lines
+#         1.00.32 romanm        2003-11-19 |    merged incorrectly broken lines
+#         1.00.40 romanm        2003-11-21 |    fixed Google search
+
+$namespaceNames = array(
+	NS_MEDIA          => 'Media',
+	NS_SPECIAL        => 'Posebno',
+	NS_MAIN           => '',
+	NS_TALK           => 'Pogovor',
+	NS_USER           => 'Uporabnik',
+	NS_USER_TALK      => 'Uporabniški_pogovor',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK   => 'Pogovor_{{grammar:mestnik|$1}}',
+	NS_IMAGE          => 'Slika',
+	NS_IMAGE_TALK     => 'Pogovor_o_sliki',
+	NS_MEDIAWIKI      => 'MediaWiki',
+	NS_MEDIAWIKI_TALK => 'Pogovor_o_MediaWiki',
+	NS_TEMPLATE       => 'Predloga',
+	NS_TEMPLATE_TALK  => 'Pogovor_o_predlogi',
+	NS_HELP           => 'Pomoč',
+	NS_HELP_TALK      => 'Pogovor_o_pomoči',
+	NS_CATEGORY       => 'Kategorija',
+	NS_CATEGORY_TALK  => 'Pogovor_o_kategoriji'
+);
+
+$datePreferences = false;
+$fallback8bitEncoding = "iso-8859-2";
+$separatorTransformTable = array(',' => '.', '.' => ',' );
+
+
+$messages = array(
+# User preference toggles
+'tog-underline'               => 'Podčrtavanje povezav:',
+'tog-highlightbroken'         => 'Oblikuj pretrgane povezave <a href="" class="new">kot</a> (druga možnost: kot<a href="" class="internal">?</a>)',
+'tog-justify'                 => 'Poravnavaj odstavke',
+'tog-hideminor'               => 'Skrij manjše popravke v zadnjih spremembah',
+'tog-extendwatchlist'         => 'Izboljšan spisek nadzorov',
+'tog-usenewrc'                => 'Izboljšane zadnje spremembe (ni za vse brskalnike)',
+'tog-numberheadings'          => 'Samodejno številči poglavja',
+'tog-showtoolbar'             => 'Prikaži urejevalno orodno vrstico',
+'tog-editondblclick'          => 'Omogoči urejanje strani z dvojnim klikom (JavaScript)',
+'tog-editsection'             => 'Omogoči urejanje delov prek povezav [spremeni]',
+'tog-editsectiononrightclick' => 'Omogoči urejanje delov z desnim klikanjem naslovov delov (JavaScript)',
+'tog-showtoc'                 => 'Prikaži vsebino (strani z več kot tremi naslovi)',
+'tog-rememberpassword'        => 'Geslo si zapomni skozi vse seje',
+'tog-editwidth'               => 'Urejevalno polje naj ima vso širino',
+'tog-watchcreations'          => 'Vse ustvarjene strani dodaj na spisek nadzorov',
+'tog-watchdefault'            => 'Dodaj na spisek nadzorov vse članke, ki sem jih ustvaril/-a ali spremenil/-a',
+'tog-minordefault'            => 'Vsa urejanja označi kot manjša',
+'tog-previewontop'            => 'Prikaži predogled pred urejevalnim poljem in ne za njim',
+'tog-previewonfirst'          => 'Ob začetku urejanja prikaži predogled',
+'tog-nocache'                 => 'Onemogoči predpomnenje strani',
+'tog-enotifwatchlistpages'    => 'Ob spremembah strani mi pošlji e-pošto',
+'tog-enotifusertalkpages'     => 'Pošlji e-pošto ob spremembah moje pogovorne strani',
+'tog-enotifminoredits'        => 'Pošlji e-pošto tudi za manjše spremembe strani',
+'tog-enotifrevealaddr'        => 'V sporočilih z obvestili o spremembah razkrij moj e-poštni naslov',
+'tog-shownumberswatching'     => 'Prikaži število uporabnikov, ki spremljajo temo',
+'tog-fancysig'                => 'Surovi podpisi (brez samodejne povezave; <b>ne</b> uporabljajte <b>predlog</b> ali <b>zunanjih povezav</b>)',
+'tog-externaleditor'          => 'Po privzetem uporabljaj zunanji urejevalnik',
+'tog-externaldiff'            => 'Po privzetem uporabljaj zunanje primerjanje',
+'tog-showjumplinks'           => 'Prikaži pomožni povezavi »Skoči na«',
+'tog-uselivepreview'          => 'Uporabi hitri predogled (JavaScript) (preizkusno)',
+'tog-forceeditsummary'        => 'Ob vpisu praznega povzetka urejanja me opozori',
+'tog-watchlisthideown'        => 'Na spisku nadzorov skrij moja urejanja',
+'tog-watchlisthidebots'       => 'Na spisku nadzorov skrij urejanja botov',
+
+'underline-always'  => 'Vedno',
+'underline-never'   => 'Nikoli',
+'underline-default' => 'Privzeto (brskalnik)',
+
+'skinpreview' => '(Predogled)',
+
+# Dates
+'sunday'        => 'nedelja',
+'monday'        => 'ponedeljek',
+'tuesday'       => 'torek',
+'wednesday'     => 'sreda',
+'thursday'      => 'četrtek',
+'friday'        => 'petek',
+'saturday'      => 'sobota',
+'january'       => 'januar',
+'february'      => 'februar',
+'march'         => 'marec',
+'april'         => 'april',
+'may_long'      => 'maj',
+'june'          => 'junij',
+'july'          => 'julij',
+'august'        => 'avgust',
+'september'     => 'september',
+'october'       => 'oktober',
+'november'      => 'november',
+'december'      => 'december',
+'january-gen'   => 'januarja',
+'february-gen'  => 'februarja',
+'march-gen'     => 'marca',
+'april-gen'     => 'aprila',
+'may-gen'       => 'maja',
+'june-gen'      => 'junija',
+'july-gen'      => 'julija',
+'august-gen'    => 'avgusta',
+'september-gen' => 'septembra',
+'october-gen'   => 'oktobra',
+'november-gen'  => 'novembra',
+'december-gen'  => 'decembra',
+'jan'           => 'jan.',
+'feb'           => 'feb.',
+'mar'           => 'mar.',
+'apr'           => 'apr.',
+'may'           => 'maj',
+'jun'           => 'jun.',
+'jul'           => 'jul.',
+'aug'           => 'avg.',
+'sep'           => 'sep.',
+'oct'           => 'okt.',
+'nov'           => 'nov.',
+'dec'           => 'dec.',
+
+# Bits of text used by many pages
+'categories'      => 'Kategorije',
+'pagecategories'  => '{{plural:$1|Kategorija|Kategoriji|Kategorije|Kategorije|Kategorije}}',
+'category_header' => 'Strani v kategoriji »$1«',
+'subcategories'   => 'Podkategorije',
+
+'mainpagetext'      => 'Wikiprogramje ste uspešno naložili!',
+'mainpagedocfooter' => 'Za uporabo in pomoč pri nastavitvi, prosimo, preglejte [http://meta.wikimedia.org/wiki/MediaWiki_i18n dokumentacijo za prilagajanje vmesnika]
+in [http://meta.wikimedia.org/wiki/MediaWiki_User%27s_Guide Uporabniški priročnik].',
+
+'about'          => 'O projektu',
+'article'        => 'Članek',
+'newwindow'      => '(odpre se novo okno)',
+'cancel'         => 'Prekliči',
+'qbfind'         => 'Poišči',
+'qbbrowse'       => 'Prebrskaj',
+'qbedit'         => 'Uredi',
+'qbpageoptions'  => 'Možnosti strani',
+'qbpageinfo'     => 'Podatki o strani',
+'qbmyoptions'    => 'Moje možnosti',
+'qbspecialpages' => 'Posebne strani',
+'moredotdotdot'  => 'Več ...',
+'mypage'         => 'Moja stran',
+'mytalk'         => 'Pogovor',
+'anontalk'       => 'Pogovorna stran IP',
+'navigation'     => 'Navigacija',
+
+# Metadata in edit box
+'metadata_help' => 'Metapodatki:',
+
+'errorpagetitle'    => 'Napaka',
+'returnto'          => 'Vrnitev na: $1.',
+'tagline'           => 'Iz {{GRAMMAR:rodilnik|{{SITENAME}}}}',
+'help'              => 'Pomoč',
+'search'            => 'Iskanje',
+'searchbutton'      => 'Iskanje',
+'go'                => 'Pojdi na',
+'searcharticle'     => 'Pojdi na',
+'history'           => 'Zgodovina strani',
+'history_short'     => 'Zgodovina strani',
+'updatedmarker'     => 'Posodobljeno od mojega zadnjega obiska',
+'info_short'        => 'Sporočilo',
+'printableversion'  => 'Različica za tisk',
+'permalink'         => 'Trajna povezava',
+'print'             => 'Tisk',
+'edit'              => 'Uredite stran',
+'editthispage'      => 'Uredi stran',
+'delete'            => 'Briši',
+'deletethispage'    => 'Briši stran',
+'undelete_short'    => 'Vrni $1 {{plural:$1|izbrisano urejanje|izbrisani urejanji|izbrisana urejanja|izbrisanih urejanj|izbrisanih urejanj}}',
+'protect'           => 'Zaščiti',
+'protectthispage'   => 'Zaščiti stran',
+'unprotect'         => 'Odstrani zaščito',
+'unprotectthispage' => 'Odstrani zaščito strani',
+'newpage'           => 'Nova stran',
+'talkpage'          => 'Pogovorite se o strani',
+'specialpage'       => 'Posebna stran',
+'personaltools'     => 'Osebna orodja',
+'postcomment'       => 'Objavite pripombo',
+'articlepage'       => 'Prikaže članek',
+'talk'              => 'Pogovor',
+'views'             => 'Pogled',
+'toolbox'           => 'Pripomočki',
+'userpage'          => 'Prikaži uporabnikovo stran',
+'projectpage'       => 'Prikaži projektno stran',
+'imagepage'         => 'Prikaže stran z datoteko',
+'viewtalkpage'      => '&lt; Pogovor',
+'otherlanguages'    => 'V drugih jezikih',
+'redirectedfrom'    => '(Preusmerjeno z $1)',
+'redirectpagesub'   => 'Preusmeritvena stran',
+'lastmodifiedat'    => 'Čas zadnje spremembe: $2, $1.', # $1 date, $2 time
+'viewcount'         => 'Stran je bila naložena $1-krat.',
+'protectedpage'     => 'Zaščitena stran',
+'jumpto'            => 'Skoči na:',
+'jumptonavigation'  => 'navigacija',
+'jumptosearch'      => 'iskanje',
+
+# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
+'aboutsite'         => '{{UCFIRST:{{GRAMMAR:orodnik|{{SITENAME}}}}}}',
+'aboutpage'         => 'Project:{{UCFIRST:{{GRAMMAR:orodnik|{{SITENAME}}}}}}',
+'bugreports'        => 'Poročila o hroščih',
+'bugreportspage'    => 'Project:Poročila o hroščih',
+'copyright'         => 'Besedilo je na razpolago pod pogoji $1.',
+'copyrightpagename' => 'Avtorske pravice {{GRAMMAR:rodilnik|{{SITENAME}}}}',
+'copyrightpage'     => 'Project:Avtorske pravice {{GRAMMAR:rodilnik|{{SITENAME}}}}',
+'currentevents'     => 'Trenutni dogodki',
+'currentevents-url' => 'Project:Trenutni dogodki',
+'disclaimers'       => 'Zanikanja odgovornosti',
+'disclaimerpage'    => 'Project:Splošno_zanikanje_odgovornosti',
+'edithelp'          => 'Pomoč pri urejanju',
+'edithelppage'      => 'Help:Urejanje slovenskih strani',
+'faq'               => 'Najpogostejša vprašanja',
+'faqpage'           => 'Project:Najpogostejša vprašanja',
+'helppage'          => 'Help:Vsebina',
+'mainpage'          => 'Glavna stran',
+'portal'            => 'Portal občestva',
+'portal-url'        => 'Project:Portal občestva',
+'privacy'           => 'Politika zasebnosti',
+'sitesupport'       => 'Denarni prispevki',
+'sitesupport-url'   => 'Project:Zbiranje prispevkov',
+
+'badaccess' => 'Napaka pri dovoljenju',
+
+'versionrequired'     => 'Potrebna je različica MediaWiki $1',
+'versionrequiredtext' => 'Za uporabo strani je potrebna različica MediaWiki $1. Glejte [[Special:Version]].',
+
+'ok'                  => 'V redu',
+'retrievedfrom'       => 'Vzpostavljeno iz »$1«',
+'youhavenewmessages'  => 'Imate $1 ($2)',
+'newmessageslink'     => 'novo sporočilo',
+'newmessagesdifflink' => 'zadnja sprememba',
+'editsection'         => 'spremeni',
+'editold'             => 'spremeni',
+'editsectionhint'     => 'Spremeni razdelek: $1',
+'toc'                 => 'Vsebina',
+'showtoc'             => 'prikaži',
+'hidetoc'             => 'skrij',
+'thisisdeleted'       => 'Prikažem ali vrnem $1?',
+'viewdeleted'         => 'Prikažem $1?',
+'restorelink'         => '$1 {{plural:$1|izbrisana redakcija|izbrisani redakciji|izbrisane redakcije|izbrisanih redakcij|izbrisanih redakcij}}',
+'feedlinks'           => 'Podajanje:',
+'feed-invalid'        => 'Neveljavna vrsta naročniškega dovoda.',
+
+# Short words for each namespace, by default used in the 'article' tab in monobook
+'nstab-main'      => 'Članek',
+'nstab-user'      => 'Uporabniška stran',
+'nstab-media'     => 'Predstavnostna stran',
+'nstab-special'   => 'Posebno',
+'nstab-project'   => 'Projektna stran',
+'nstab-image'     => 'Datoteka',
+'nstab-mediawiki' => 'Sporočilo',
+'nstab-template'  => 'Predloga',
+'nstab-help'      => 'Pomoč',
+'nstab-category'  => 'Kategorija',
+
+# Main script and global functions
+'nosuchaction'      => 'Tako dejanje ne obstaja',
+'nosuchactiontext'  => 'Dejanja, ki ga je označil spletni naslov, wiki ne prepozna.',
+'nosuchspecialpage' => 'Posebna stran, ki ste jo zahtevali, ne obstaja',
+'nospecialpagetext' => 'Posebne strani, ki ste jo zahtevali, programje {{GRAMMAR:rodilnik|{{SITENAME}}}} ne prepozna ali pa nimate dostopa do nje. Seznam vseh prepoznanih posebnih strani je na razpolago na strani [[Special:Specialpages]].',
+
+# General errors
+'error'                => 'Napaka',
+'databaseerror'        => 'Napaka zbirke podatkov',
+'dberrortext'          => 'Iskanje ali drugo želeno dejanje je verjetno zahtevalo preveč časa. Mogoči razlogi so: <ul> <li>Iskanje z vsemi besedami v narekovajih. Poskusite najprej iskati brez njih. Kadar to ni zadosti, vpišite še nekaj iskalnih pojmov ali dodajte besedo ali dve zunaj narekovajev, s čimer boste označili splošno predmetno področje. <li>Zelo obsežen spisek nadzorov (verjetno čez 10.000 strani) ob obremenjenih strežnikih. <li>Morda ste poskušali dejanje izvesti ob začasni izredni obremenitvi strežnikov. Ob izrednih obremenitvah lahko pride do nenadnega končanja številnih pomembnih opravil, da se dosežejo običajni odzivni časi. Če se zahtevano dejanje sicer izvede brez težav, poskusite znova v nekaj minutah. </ul> <p>Splošno sporočilo o napaki je: <p> Prišlo je do napake zbirke podatkov. Vzrok bi lahko bil nesprejemljiv iskalni niz (glejte $5) ali programski hrošč. Zadnje poskušano iskanje: <blockquote><tt>$1</tt></blockquote> znotraj funkcije »<tt>$2</tt>«. MySQL je vrnil napako »<tt>$3: $4</tt>«. <p>Če je zgornja napaka 2013, je vaš postopek končal upravljavec podatkovnega bremena. Prosimo, poskusite z ustreznejšim iskanjem ali iskanje ponovite ob manj obremenjenih strežnikih. Opravičujemo se za nevšečnosti.</p>',
+'dberrortextcl'        => 'Pri iskanju v zbirki podatkov je prišlo do skladenjske napake. Zadnje iskanje v zbirki podatkov: »$1« iz funkcije »$2«. MySQL je vrnil napako »$3: $4«.',
+'noconnect'            => 'S PB na $1 se ne morem povezati.',
+'nodb'                 => "Zbirke podatkov '$1' ne morem izbrati",
+'cachederror'          => 'To je shranjen in morda neposodobljen prepis želene strani.',
+'laggedslavemode'      => 'Opozorilo: stran morda ne vsebuje najnovejših posodobitev',
+'readonly'             => 'Zbirka podatkov je zaklenjena',
+'enterlockreason'      => 'Vnesite razlog za zaklenitev in oceno, kdaj bo urejanje spet mogoče',
+'readonlytext'         => "Zbirka podatkov je za urejanja in druge spremembe začasno zaklenjena. To navadno pomeni, da nadgrajujejo programje strežnikov ali pa rutinsko vzdrževanje zbirke.
+
+Sistemski skrbnik, ki jo je zaklenil, je podal naslednjo razlago: ''\"\$1\"''",
+'missingarticle'       => 'Zbirka podatkov bi besedilo strani »$1« morala najti, vendar ji žal ni uspelo.
+
+Morda stran s tem imenom še ni bila ustvarjena. Če je tako, jo lahko ustvarite z izbiro povezave »Uredite stran«.
+
+Kadar gre za nedavno spremenjeno stran, jo poskusite minuto ali dve pozneje ponovno poiskati. Morda pa ste sledili zastareli povezavi na primerjavo ali zgodovino izbrisane strani.
+
+Kadar to ni tako, ste morda odkrili hrošč v programju. Prosimo, obvestite katerega izmed [[{{MediaWiki:grouppage-sysop}}|administratorjev]] in pri tem navedite spletni naslov.',
+'readonly_lag'         => 'Podatkovna zbirka se je samodejno zaklenila, dokler se podrejeni strežniki ne uskladijo z glavnim.',
+'internalerror'        => 'Notranja napaka',
+'filecopyerror'        => 'Datoteke »$1« ni mogoče prepisati v »$2«.',
+'filerenameerror'      => 'Datoteke »$1« ni mogoče preimenovati v »$2«.',
+'filedeleteerror'      => 'Datoteke »$1« ni mogoče izbrisati.',
+'filenotfound'         => 'Datoteke »$1« ne najdem.',
+'unexpected'           => 'Nepričakovana vrednost: "$1"="$2".',
+'formerror'            => 'Napaka: obrazca ni mogoče predložiti',
+'badarticleerror'      => 'Na tej strani dejanja ne morem izvesti. Morda je bila stran med predložitvijo vaše zahteve že izbrisana.',
+'cannotdelete'         => 'Navedene strani ali datoteke ni mogoče izbrisati. Morda jo je izbrisal že kdo drug.',
+'badtitle'             => 'Nepravilen naslov',
+'badtitletext'         => 'Navedeni naslov strani je neveljaven, prazen, napačno povezan k drugim jezikom oziroma wikiprojektom ali pa vsebuje [[Project:Dogovori o poimenovanjih#Previdno s posebnimi znaki|nepodprte znake]].',
+'perfdisabled'         => 'Naveden je shranjeni prepis $1:',
+'perfdisabledsub'      => 'Naveden je shranjeni prepis $1:', # obsolete?
+'perfcached'           => 'Navedeni podatki morda niso popolnoma posodobljeni.',
+'perfcachedts'         => 'Prikazani podatki so shranjeni v predpomnilniku. Čas zadnje osvežitve: $1.',
+'wrong_wfQuery_params' => 'Nepravilni parametri za wfQuery()<br />
+Funkcija: $1<br />
+Iskanje: $2',
+'viewsource'           => 'Izvorno besedilo',
+'viewsourcefor'        => 'za $1',
+'protectedinterface'   => 'Prikazana stran vsebuje besedilo ali drug element uporabniškega vmesnika programja. Zaradi preprečevanja zlorabe je zaščitena.',
+'editinginterface'     => "'''Opozorilo:''' Urejate stran, ki vsebuje besedilo ali drug element uporabniškega vmesnika programja. Spremembe te strani bodo vplivale na podobo uporabniškega vmesnika. To stran lahko urejajo le [[{{MediaWiki:grouppage-sysop}}|administratorji]]. Prosimo, da pri spremembah upoštevate soglasje občestva.",
+'sqlhidden'            => '(SQL-poizvedovanje je skrito)',
+
+# Login and logout pages
+'logouttitle'                => 'Odjava uporabnika',
+'logouttext'                 => 'Odjavili ste se. {{GRAMMAR:tožilnik|{{SITENAME}}}} lahko zdaj uporabljate neprijavljeni ali pa se ponovno prijavite. Morda bodo nekatere strani še naprej prikazane, kot da ste prijavljeni. To lahko popravite z izpraznitvijo predpomnilnika.',
+'welcomecreation'            => '== Dobrodošli, $1! ==
+
+Ustvarili ste račun. Če želite, si lahko prilagodite [[Special:Preferences|nastavitve]] za delo v {{GRAMMAR:dajalnik|{{SITENAME}}}}. Želimo vam uspešno sodelovanje!',
+'loginpagetitle'             => 'Prijava uporabnika',
+'yourname'                   => 'Uporabniško ime',
+'yourpassword'               => 'Geslo',
+'yourpasswordagain'          => 'Ponovno vpišite geslo',
+'remembermypassword'         => 'Zapomni si me (samodejna prijava)',
+'yourdomainname'             => 'Domena',
+'externaldberror'            => 'Pri potrjevanju istovetnosti je prišlo do notranje napake ali pa za osveževanje zunanjega računa nimate dovoljenja.',
+'loginproblem'               => '<b>Prijava ni uspela.</b><br />Prosimo, poskusite znova!',
+'alreadyloggedin'            => 'Uporabnik $1, ste že prijavljeni!',
+'login'                      => 'Prijava',
+'loginprompt'                => '<!--Za prijavo v {{GRAMMAR:tožilnik|{{SITENAME}}}} omogočite piškotke.-->',
+'userlogin'                  => 'Prijavite se / registrirajte se',
+'logout'                     => 'Odjava',
+'userlogout'                 => 'Odjava',
+'notloggedin'                => 'Niste prijavljeni',
+'nologin'                    => 'Še nimate uporabniškega računa? $1!',
+'nologinlink'                => 'Registrirajte se',
+'createaccount'              => 'Ustvari račun',
+'gotaccount'                 => 'Račun že imate? $1.',
+'gotaccountlink'             => 'Prijavite se',
+'createaccountmail'          => 'Po e-pošti',
+'badretype'                  => 'Gesli, ki ste ju vnesli, se ne ujemata.',
+'userexists'                 => 'Uporabniško ime, ki ste ga vnesli, je že zasedeno. Prosimo, izberite si drugo.',
+'youremail'                  => 'E-pošta (neobvezno)*',
+'username'                   => 'Uporabniško ime:',
+'uid'                        => 'ID-številka:',
+'yourrealname'               => 'Vaše pravo ime*',
+'yourlanguage'               => 'Jezik vmesnika:',
+'yourvariant'                => 'Jezikovna različica',
+'yournick'                   => 'Podpis (uporabite ~~~~):',
+'badsig'                     => 'Neveljaven surovi podpis; preverite oznake HTML.',
+'email'                      => 'E-pošta',
+'prefs-help-email-enotif'    => 'Če ste tako izbrali, se naslov uporablja tudi za pošiljanje sporočil o spremembah.',
+'prefs-help-realname'        => '<!-- ¹ Pravo ime (neobvezno): če se odločite, da ga boste navedli, bo uporabljeno za priznavanje vašega dela. -->',
+'loginerror'                 => 'Napaka ob prijavi',
+'prefs-help-email'           => '<nowiki>*</nowiki>E-pošta (neobvezno): Vpisan e-poštni naslov omogoča drugim, da vam lahko pošiljajo elektronsko pošto brez razkritja vaše istovetnosti.',
+'nocookiesnew'               => 'Uporabniški račun je ustvarjen, vendar niste prijavljeni. {{SITENAME}} za prijavo uporabnikov uporablja piškotke, ki pa so pri vas onemogočeni. Prosimo, omogočite jih, nato pa se s svojim uporabniškim imenom in geslom ponovno poskusite prijaviti.',
+'nocookieslogin'             => '{{SITENAME}} za prijavljanje uporabnikov uporablja piškotke. Ker jih imate onemogočene, vas prosimo, da jih omogočite in se ponovno prijavite.',
+'noname'                     => 'Niste vnesli veljavnega uporabniškega imena.',
+'loginsuccesstitle'          => 'Uspešno ste se prijavili',
+'loginsuccess'               => 'Sedaj ste vpisani v {{GRAMMAR:tožilnik|{{SITENAME}}}} kot "$1".',
+'nosuchuser'                 => 'Uporabnik z imenom »$1« ne obstaja.
+Preverite črkovanje ali pa si z uporabo prikazanega obrazca ustvarite nov uporabniški račun.',
+'nosuchusershort'            => 'Uporabnik z imenom »$1« ne obstaja. Preverite črkovanje.',
+'nouserspecified'            => 'Prosimo, vpišite uporabniško ime.',
+'wrongpassword'              => 'Vnesli ste napačno geslo. Prosimo, poskusite znova.',
+'wrongpasswordempty'         => 'Vpisali ste prazno geslo. Prosimo, poskusite znova.',
+'mailmypassword'             => 'Pošlji mi novo geslo',
+'passwordremindertitle'      => 'Geselski opomnik iz {{GRAMMAR:rodilnik|{{SITENAME}}}}',
+'passwordremindertext'       => "Nekdo (verjetno vi, z IP-naslova $1)
+je zahteval, da vam pošljemo novo prijavno geslo za {{GRAMMAR:tožilnik|{{SITENAME}}}} ($4).
+Geslo uporabnika ''$2'' je odslej ''$3''.
+Z njim se lahko prijavite in ga spremenite.
+
+Če je geslo zahteval nekdo drug ali ste se spomnili starega in ga ne želite več spremeniti, lahko sporočilo prezrete in se še naprej prijavljate s starim.",
+'noemail'                    => 'Elektronska pošta uporabnika »$1« ni zapisana.',
+'passwordsent'               => 'Na naslov elektronske pošte, vpisane za "$1", smo poslali novo geslo. Ko ga boste prejeli, se lahko ponovno prijavite.',
+'eauthentsent'               => 'E-sporočilo je poslano na navedeni e-naslov. Če želite tja poslati še katero, po v omenjenem sporočilu navedenih navodilih potrdite lastništvo naslova.',
+'mailerror'                  => 'Napaka pri pošiljanju pošte: $1',
+'acct_creation_throttle_hit' => 'Obiskovalci {{GRAMMAR:rodilnik|{{SITENAME}}}} so s tem [[IP-naslov]]om v zadnjih 24 urah ustvarili že $1 {{plural:$1|uporabniški račun|uporabniška računa|uporabniške račune|uporabniških računov|uporabniških računov}} in s tem dosegli največje dopustno število v omenjenem časovnem obdobju. Novih računov zato s tem IP-naslovom trenutno žal ne morete več ustvariti.
+
+== Urejate prek posredniškega strežnika? ==
+
+Če urejate prek AOL ali iz Bližnjega vzhoda, Afrike, Avstralije, Nove Zelandije ali iz šole, knjižnice ali podjetja, si IP-naslov morda delite z drugimi uporabniki. Če je tako, ste to sporočilo morda prejeli, čeprav niste ustvarili še nobenega računa. Znova se lahko poskusite registrirati po nekaj urah.',
+'emailauthenticated'         => 'Čas potrditve vašega e-poštnega naslova: $1',
+'emailnotauthenticated'      => 'Vaš e-poštni naslov še ni potrjen. Za navedene
+možnosti se e-pošte ne bo pošiljalo.',
+'noemailprefs'               => '<strong>E-poštnega naslova niste vnesli</strong>, zato naslednje možnosti ne bodo delovale.',
+'emailconfirmlink'           => 'Potrdite svoj e-poštni naslov',
+'invalidemailaddress'        => 'E-poštni naslov zaradi neveljavne oblike ni sprejemljiv. Prosimo, vpišite pravilno oblikovanega ali polje izpraznite.',
+'accountcreated'             => 'Račun je ustvarjen',
+'accountcreatedtext'         => 'Uporabniški račun za »$1« je ustvarjen.',
+
+# Edit page toolbar
+'bold_sample'     => 'Krepko besedilo',
+'bold_tip'        => 'Krepko besedilo',
+'italic_sample'   => 'Ležeče besedilo',
+'italic_tip'      => 'Ležeče besedilo',
+'link_sample'     => 'Naslov povezave',
+'link_tip'        => 'Notranja povezava',
+'extlink_sample'  => 'http://www.zgled.com naslov povezave',
+'extlink_tip'     => 'Zunanja povezava (ne pozabite na predpono http://)',
+'headline_sample' => 'Besedilo naslovne vrstice',
+'headline_tip'    => 'Naslovna vrstica druge ravni',
+'math_sample'     => 'Tu vnesite enačbo',
+'math_tip'        => 'Matematična enačba (TeX/LaTeX)',
+'nowiki_sample'   => 'Tu vnesite neoblikovano besedilo',
+'nowiki_tip'      => 'Prezri wikioblikovanje',
+'image_sample'    => 'Zgled.jpg',
+'image_tip'       => 'Povezava na sliko',
+'media_sample'    => 'Zgled.ogg',
+'media_tip'       => 'Povezava na predstavnostno datoteko',
+'sig_tip'         => 'Vaš podpis z datumom',
+'hr_tip'          => 'Vodoravna črta (uporabljajte zmerno)',
+
+# Edit pages
+'summary'                   => 'Povzetek urejanja',
+'subject'                   => 'Tema/naslov',
+'minoredit'                 => 'Manjše urejanje',
+'watchthis'                 => 'Opazuj članek',
+'savearticle'               => 'Shrani stran',
+'preview'                   => 'Predogled',
+'showpreview'               => 'Prikaži predogled',
+'showlivepreview'           => 'Predogled v živo',
+'showdiff'                  => 'Prikaži spremembe',
+'anoneditwarning'           => "'''Opozorilo''': niste prijavljeni. V zgodovino strani se bo zapisal vaš IP-naslov.",
+'missingsummary'            => "'''Opozorilo:''' Niste napisali povzetka urejanja. Ob ponovnem kliku gumba ''Shrani'' se bo vaše urejanje shranilo brez njega.",
+'missingcommenttext'        => 'Prosimo, vpišite v spodnje polje komentar.',
+'blockedtitle'              => 'Uporabnik je blokiran.',
+'blockedtext'               => "Urejanje z vašim uporabniškim imenom oziroma IP-naslovom je $1 onemogočil(-a).
+Vzrok:<br />''$2''<br />O blokiranju se lahko pogovorite z $1 ali katerim drugim
+[[{{MediaWiki:grouppage-sysop}}|administratorjem]].
+
+Vedite, da lahko ukaz »Pošlji uporabniku e-pismo« uporabite le, če ste v nastavitvah vpisali in potrdili svoj elektronski naslov. 
+
+Vaš IP-naslov je $3. Prosimo, vključite ga v vse morebitne poizvedbe.",
+'blockedoriginalsource'     => "Izvorno besedilo strani '''$1''' je na razpolago spodaj:",
+'blockededitsource'         => "Besedilo '''vaših urejanj''' strani '''$1''' je prikazano spodaj:",
+'whitelistedittitle'        => 'Za urejanje se morate prijaviti',
+'whitelistedittext'         => 'Za urejanje strani se $1.',
+'whitelistreadtitle'        => 'Za ogled se je treba prijaviti',
+'whitelistreadtext'         => 'Za ogled strani se morate [[Special:Userlogin|prijaviti]]',
+'whitelistacctitle'         => 'Za izdelavo uporabniškega računa nimate dovoljenja.',
+'whitelistacctext'          => 'V tem wikiju lahko račune odpirajo le [[Special:Userlogin|prijavljeni]] uporabniki z ustreznimi uporabniškimi pravicami.',
+'confirmedittitle'          => 'Za urejanje je potrebna e-poštna potrditev',
+'confirmedittext'           => 'Pred urejanjem strani morate potrditi svoj e-poštni naslov. Prosimo, da ga z uporabo [[Special:Preferences|uporabniških nastavitev]] vpišete in potrdite.',
+'loginreqtitle'             => 'Treba se je prijaviti',
+'loginreqlink'              => 'prijava',
+'loginreqpagetext'          => 'Za ogled drugih strani morate $1.',
+'accmailtitle'              => 'Geslo je poslano.',
+'accmailtext'               => "Geslo za '$1' je poslano na $2.",
+'newarticle'                => '(Nov)',
+'newarticletext'            => "Sledili ste povezavi na stran, ki še ne obstaja.
+Da bi stran ustvarili, vnesite v spodnji obrazec besedilo
+(za več informacij glej [[{{MediaWiki:helppage}}|pomoč]]).
+Če ste sem prišli po pomoti, v svojem brskalniku kliknite gumb ''Nazaj''.",
+'anontalkpagetext'          => "---- ''To je pogovorna stran za nepodpisanega uporabnika, ki še ni ustvaril računa ali, ki ga ne uporablja. Zaradi tega moramo uporabiti števčen IP address za njegovo/njeno ugotavljanje istovetnosti. Takšen IP naslov si lahko deli več uporabnikov. Če ste nepodpisan uporabnik in če menite, da so nepomembne pripombe namenjene vam, prosimo [[Special:Userlogin|ustvarite račun ali pa se vpišite]], da preprečite naslednje zmede z drugimi nepodpisanimi uporabniki.''",
+'noarticletext'             => 'Na tej strani ni trenutno nobenega besedila. Naslov strani lahko poskusite [[Special:Search/{{PAGENAME}}|poiskati]] na drugih straneh ali pa [{{fullurl:{{FULLPAGENAME}}|action=edit}} stran uredite].',
+'clearyourcache'            => "'''Opomba:''' Da bodo spremembe prišle do veljave, po shranitvi izpraznite predpomnilnik svojega brskalnika: '''Mozilla/Safari:''' držite ''Shift'' in kliknite ''Reload'' (ali pritisnite ''Ctrl-Shift-R''), '''Internet Explorer:''' ''Ctrl-F5'', '''Opera/Konqueror:''' ''F5''.",
+'usercssjsyoucanpreview'    => "<strong>Nasvet:</strong> Za preizkušanje svojega novega CSS/JS pred shranjevanjem uporabite gumb ''Prikaži predogled''.",
+'usercsspreview'            => "'''OPOZORILO: svoj uporabniški CSS le predogledujete in ga še niste shranili!'''",
+'userjspreview'             => "'''Svoj uporabniški Javascript le predogledujete in še ni shranjen!'''",
+'userinvalidcssjstitle'     => "'''Opozorilo:''' koža »$1« ne obstaja. Vedite, da .css in .js strani po meri uporabljajo naslov z malo začetnico, npr. User:Blabla/monobook.css namesto User:Blabla/Monobook.css.",
+'updated'                   => '(Posodobljeno)',
+'note'                      => '<strong>Opomba:</strong>',
+'previewnote'               => '<strong>Stran le predogledujete in še ni shranjena!</strong>',
+'previewconflict'           => 'V prikazanem predogledu je v zgornjem predelu urejanja navedeno besedilo, kakor se bo prikazalo, če ga boste shranili.',
+'session_fail_preview'      => '<strong>Zaradi izgube podatkov o seji nam vašega urejanja žal ni uspelo obdelati. Prosimo, poskusite znova. Če bo spet prišlo do napake, se odjavite in ponovno prijavite. Za nevšečnosti se opravičujemo.</strong>',
+'session_fail_preview_html' => "<strong>Zaradi izgube podatkov o seji nam vašega urejanja žal ni uspelo obdelati.</strong>
+
+''Ker ima ta wiki vklopljen surovi HTML, je predogled zaradi preprečevanja napadov z JavaScriptom skrit.''
+
+<strong>Če gre za dobronameren poskus urejanja, vas prosimo, da poskusite znova. Če bo spet prišlo do napake, se odjavite in ponovno prijavite. Za nevšečnosti se opravičujemo.</strong>",
+'importing'                 => 'Uvažam $1',
+'editing'                   => 'Urejanje $1',
+'editinguser'               => 'Urejanje $1',
+'editingsection'            => 'Urejanje $1 (razdelek)',
+'editingcomment'            => 'Urejanje $1 (pripomba)',
+'editconflict'              => 'Navzkrižje urejanj: $1',
+'explainconflict'           => 'Med vašim urejanjem je stran spremenil nekdo drug. Zgornje besedilno območje vsebuje njeno trenutno vsebino in bo edino, ki se bo ob izbiri ukaza »Shrani stran« shranilo. V spodnjem območju so prikazane vaše spremembe, ki jih boste morali vključiti v zgornje.<br />',
+'yourtext'                  => 'Vaše besedilo',
+'storedversion'             => 'Shranjena različica',
+'nonunicodebrowser'         => '<strong>OPOMBA</strong>: Vaš brskalnik ne podpira Unicode, zato boste pri urejanju strani z nelatiničnimi znaki morda imeli težave. Za obhod te težave se bodo <strong>ne-ASCII-znaki v urejevalnem polju spodaj pojavili kot šestnajstiške kode</strong>.',
+'editingold'                => 'Urejate staro redakcijo strani. Če jo boste shranili, bodo vse poznejše spremembe [[Help:Vračanje|razveljavljene]].',
+'yourdiff'                  => 'Primerjava',
+'copyrightwarning'          => 'Vsi prispevki k {{GRAMMAR:dajalnik|{{SITENAME}}}} se obravnavajo kot objave pod pogoji $2 (za podrobnosti glej $1). Če niste pripravljeni na neusmiljeno urejanje in prosto razširjanje vašega gradiva, ga ne prispevajte.
+
+Poleg tega zagotavljate, da ste prispevke napisali oziroma ustvarili sami ali pa prepisali iz javno dostopnega ali podobnega prostega vira oziroma da pri tem ne kršite avtorskih pravic.
+<strong>NE DODAJAJTE AVTORSKO ZAŠČITENEGA DELA BREZ DOVOLJENJA !</strong>',
+'copyrightwarning2'         => 'Vsi prispevki k {{GRAMMAR:dajalnik|{{SITENAME}}}} se lahko urejajo, spreminjajo ali odstranijo s strani drugih uporabnikov. Če niste pripravljeni na neusmiljeno urejanje in prosto razširjanje vašega gradiva, ga ne prispevajte.
+
+Poleg tega zagotavljate, da ste prispevke napisali oziroma ustvarili sami ali pa prepisali iz javno dostopnega ali podobnega prostega vira oziroma da pri tem ne kršite avtorskih pravic ($1).
+<strong>NE DODAJAJTE AVTORSKO ZAŠČITENEGA DELA BREZ DOVOLJENJA !</strong>',
+'longpagewarning'           => 'Stran je dolga $1 {{plural:$1|kilobajt|kilobajta|kilobajte|kilobajtov|kilobajtov}}. To je morda več, kot bi želeli, zato premislite o razdelitvi na podstrani oziroma arhiviranju.',
+'longpageerror'             => '<strong>NAPAKA: Predloženo besedilo je dolgo $1 {{plural:$1|kilobajt|kilobajta|kilobajte|kilobajtov|kilobajtov}}, s čimer presega največjo dovoljeno dolžino $2 {{plural:$2|kilobajta|kilobajtov|kilobajtov|kilobajtov|kilobajtov}}. Zato ga žal ni mogoče shraniti.</strong>',
+'readonlywarning'           => '<strong>OPOZORILO: Zbirka podatkov je zaradi vzdrževanja začasno  zaklenjena, kar pomeni, da sprememb ne morete shraniti. Prosimo, prenesite besedilo v urejevalnik in ga dodajte pozneje.</strong>',
+'protectedpagewarning'      => '<strong>OPOMBA:</strong> Stran je zaklenjena in jo lahko urejajo le sodelavci z vzdrževalnimi pravicami. Pri urejanju sledite [[Project:Smernice_zaščitenih_strani|smernicam zaščitenih strani]].',
+'semiprotectedpagewarning'  => "'''Opomba:''' Stran je [[Project:Delna zaščita|zaščitena]] in jo lahko urejajo le uveljavljeni uporabniki.",
+'templatesused'             => 'Na strani uporabljene predloge:',
+'edittools'                 => '<!-- To besedilo bo prikazano pod urejevalnim poljem in poljem za nalaganje. -->',
+'nocreatetitle'             => 'Članka nisem našel',
+'nocreatetext'              => "Članka s tem naslovom - '''{{PAGENAME}}''' - še nimamo, lahko pa ga [[Special:Search/{{PAGENAME}}|poskusite poiskati]] ali pa se [[Special:Userlogin|prijavite]] in ga ustvarite.",
+
+# History pages
+'revhistory'          => 'Zgodovina strani',
+'nohistory'           => 'Stran nima zgodovine urejanja.',
+'revnotfound'         => 'Redakcije ne najdem',
+'revnotfoundtext'     => 'Redakcije strani, ki ste jo poskušali pridobiti, ni mogoče najti. Prosimo, preverite spletni naslov, ki ste ga uporabili za dostop do strani.',
+'loadhist'            => 'Nalagam zgodovino strani',
+'currentrev'          => 'Trenutna redakcija',
+'revisionasof'        => 'Redakcija: $1',
+'previousrevision'    => '← Starejša redakcija',
+'nextrevision'        => 'Novejša redakcija →',
+'currentrevisionlink' => 'poglejte trenutno redakcijo',
+'cur'                 => 'tren',
+'next'                => 'nasl',
+'last'                => 'prej',
+'orig'                => 'izvi',
+'histlegend'          => 'Za ogled redakcije kliknite njen datum.
+
+Napotek: (tren) = primerjava s trenutno redakcijo,
+(prej) = primerjava s prejšnjo redakcijo, <b>m</b> = manjše urejanje',
+'deletedrev'          => '[izbrisano]',
+'histfirst'           => 'Najstarejše',
+'histlast'            => 'Najnovejše',
+
+# Revision feed
+'history-feed-title'          => 'Zgodovina strani',
+'history-feed-description'    => 'Zgodovina navedene strani {{GRAMMAR:rodilnik|{{SITENAME}}}}',
+'history-feed-item-nocomment' => '$1 ob $2', # user at time
+'history-feed-empty'          => 'Želena stran ne obstaja. Morda je bila iz {{GRAMMAR:rodilnik|{{SITENAME}}}} izbrisana ali pa jo je kdo preimenoval. Prosimo, poskusite v {{GRAMMAR:dajalnik|{{SITENAME}}}} [[Special:Search|poiskati]] ustrezajoče nove strani.',
+
+# Revision deletion
+'rev-deleted-comment'         => '(pripomba je bila odstranjena)',
+'rev-deleted-user'            => '(uporabniško ime je bilo odstranjeno)',
+'rev-deleted-text-permission' => '<div class="mw-warning plainlinks">
+Prikazana redakcija je bila iz javnih arhivov odstranjena. 
+Podrobnosti so morda na razpolago v [{{fullurl:Special:Log/delete|page=Rev-deleted-text-permission dnevniku brisanja}}].
+</div>',
+'rev-deleted-text-view'       => '<div class="mw-warning plainlinks">
+Prikazana redakacija strani je bila iz javnih arhivov odstranjena. Ogledate si jo lahko, ker ste administrator spletišča. Podrobnosti so morda navedene v [{{fullurl:Special:Log/delete|page=Rev-deleted-text-view dnevniku brisanja}}].
+</div>',
+'rev-delundel'                => 'pokaži/skrij',
+'revisiondelete'              => 'Izbriši/obnovi redakcije',
+'revdelete-selected'          => 'Izbrana redakcija strani [[:$1]]:',
+'revdelete-text'              => 'Izbrisane redakcije bodo v zgodovini strani še vedno navedene, vendar bo njihova vsebina za javnost nedostopna.
+
+Do skrite vsebine bodo še vedno lahko dostopali drugi administratorji in jo z uporabo istega vmesnika tudi obnovili, razen kjer bodo operaterji spletišča uveljavili dodatne omejitve.',
+'revdelete-legend'            => 'Nastavitve z redakcijami povezanih omejitev:',
+'revdelete-hide-text'         => 'Skrij besedilo redakcije',
+'revdelete-hide-comment'      => 'Skrij povzetek urejanja',
+'revdelete-hide-user'         => 'Skrij urejevalčevo uporabniško ime/IP-naslov',
+'revdelete-hide-restricted'   => 'Omejitve naj veljajo za vse uporabnike, z administratorji vred',
+'revdelete-log'               => 'Dnevniški komentar:',
+'revdelete-submit'            => 'Uporabi za izbrano redakcijo',
+'revdelete-logentry'          => 'sprememba vidnosti redakcij strani [[$1]]',
+
+# Diffs
+'difference'                => '(Primerjava redakcij)',
+'loadingrev'                => 'nalagam različico za primerjanje',
+'lineno'                    => 'Vrstica $1:',
+'editcurrent'               => 'Uredi trenutno različico strani',
+'selectnewerversionfordiff' => 'Za primerjavo izberite novejšo redakcijo.',
+'selectolderversionfordiff' => 'Za primerjavo izberite starejšo redakcijo.',
+'compareselectedversions'   => 'Primerjaj izbrani redakciji',
+
+# Search results
+'searchresults'         => 'Izid iskanja',
+'searchresulttext'      => 'Za več sporočil o iskanju v {{GRAMMAR:dajalnik|{{SITENAME}}}} glej [[{{MediaWiki:helppage}}|Iščem v {{GRAMMAR:dajalnik|{{SITENAME}}}}]].',
+'searchsubtitleinvalid' => 'Za povpraševanje "$1"',
+'badquery'              => 'Napačno oblikovana iskalna poizvedba',
+'badquerytext'          => 'Vaš iskalni niz žal ni bilo mogoče obdelati. Nekaj nasvetov:
+* Izogibajte se iskanju z vsemi besedami v narekovajih. Dodajte jih tudi nekaj zunaj njih, s čimer označite tudi splošno področje iskanja, ali najprej poskusite z iskanjem brez narekovajev.
+* Iščite le besede z vsaj dvema črkama, razen kadar je krajša beseda del izraza v narekovajih.',
+'matchtotals'           => 'Poizvedba »$1« se ujema z $2 {{plural:$2|naslovom|naslovoma|naslovi|naslovi|naslovi}} člankov in z besedilom $3 {{plural:$3|članka|člankov|člankov|člankov|člankov}}.',
+'noexactmatch'          => "'''Stran z naslovom ''$1'' ne obstaja.''' Lahko [[:$1|jo ustvarite]].",
+'titlematches'          => 'Ujemanje z naslovom članka',
+'notitlematches'        => 'Iskanih besed ne vsebuje noben naslov članka',
+'textmatches'           => 'Ujemanje z besedilom članka',
+'notextmatches'         => 'Iskanih besed ne vsebuje nobeno besedilo članka',
+'prevn'                 => '{{plural:$1|prejšnja|prejšnji|prejšnje|prejšnjih|prejšnjih}} $1',
+'nextn'                 => '{{plural:$1|naslednja|naslednji|naslednjih|naslednjih|naslednjih}} $1',
+'viewprevnext'          => 'Prikazujem ($1) ($2) ($3).',
+'showingresults'        => 'Prikazujem <strong>$1</strong> {{plural:$1|zadetek|zadetka|zadetke|zadetkov|zadetkov}}, začenši s št. <strong>$2</strong>.',
+'showingresultsnum'     => "Prikazujem '''$3''' {{plural:$1|zadetek|zadetka|zadetke|zadetkov|zadetkov}}, začenši s št. '''$2'''.",
+'nonefound'             => "'''Opomba''': neuspešna poizvedovanja so pogosta ob iskanju vsakdanjih besed, na primer ''imeti'' in ''iz'', ki jih ni na seznamu. Ker gre za zelo pogoste besede, boste skoraj zagotovo iskali uspešneje z zožitvijo tematskega področja.",
+'powersearch'           => 'Iskanje',
+'powersearchtext'       => '
+Iskanje v imenskem prostoru :<br />
+$1<br />
+$2 Seznam se preusmerja   Iskanje za $3 $9',
+'searchdisabled'        => '<p>Zaradi hitrejšega delovanja {{GRAMMAR:rodilnik|{{SITENAME}}}} je iskanje po vsej zbirki podatkov začasno onemogočeno. Uporabite lahko Googlov ali Yahoojev iskalnik, vendar so njihovi podatki morda že zastareli.</p>',
+'blanknamespace'        => '(Osnovno)',
+
+# Preferences page
+'preferences'              => 'Nastavitve',
+'prefsnologin'             => 'Niste prijavljeni',
+'prefsnologintext'         => 'Za spreminjanje uporabniških nastavitev se [[Special:Userlogin|prijavite]].',
+'prefsreset'               => 'Nastavitve so ponastavljene.',
+'qbsettings'               => 'Nastavitve hitre vrstice',
+'qbsettings-none'          => 'Brez',
+'qbsettings-fixedleft'     => 'Levo nepomično',
+'qbsettings-fixedright'    => 'Desno nepomično',
+'qbsettings-floatingleft'  => 'Levo leteče',
+'qbsettings-floatingright' => 'Desno leteče',
+'changepassword'           => 'Zamenjava gesla',
+'skin'                     => 'Koža',
+'math'                     => 'Prikaz matematičnega besedila',
+'dateformat'               => 'Zapis datuma',
+'datedefault'              => 'Kakor koli',
+'datetime'                 => 'Datum in čas',
+'math_failure'             => 'Ni mi uspelo razčleniti',
+'math_unknown_error'       => 'neznana napaka',
+'math_unknown_function'    => 'neznana funkcija',
+'math_lexing_error'        => 'slovarska napaka',
+'math_syntax_error'        => 'skladenjska napaka',
+'math_image_error'         => 'Pretvarjanje v PNG ni uspelo; preverite, ali so latex, dvips, gs, in convert pravilno nameščeni.',
+'math_bad_tmpdir'          => 'Začasne mape za matematiko ne morem ustvariti ali pisati vanjo.',
+'math_bad_output'          => 'Izhodne mape za matematiko ne morem ustvariti ali pisati vanjo.',
+'math_notexvc'             => "Manjka izvedbena datoteka 'texvc'; za njeno namestitev si poglejte math/README.",
+'prefs-personal'           => 'Podatki o uporabniku',
+'prefs-rc'                 => 'Zadnje spremembe',
+'prefs-watchlist'          => 'Spisek nadzorov',
+'prefs-watchlist-days'     => 'Število dni za prikaz na spisku nadzorov:',
+'prefs-watchlist-edits'    => 'Število urejanj za prikaz na razširjenem spisku nadzorov:',
+'prefs-misc'               => 'Druge nastavitve',
+'saveprefs'                => 'Shrani',
+'resetprefs'               => 'Ponastavi',
+'oldpassword'              => 'Staro geslo:',
+'newpassword'              => 'Novo geslo:',
+'retypenew'                => 'Ponovno vpišite geslo:',
+'textboxsize'              => 'Urejanje',
+'rows'                     => 'Razsežnosti urejevalnega polja: vrstic:',
+'columns'                  => 'stolpcev:',
+'searchresultshead'        => 'Nastavitve poizvedovanja',
+'resultsperpage'           => 'Prikazanih zadetkov na stran:',
+'contextlines'             => 'Vrstic na zadetek:',
+'contextchars'             => 'Znakov na vrstico:',
+'stubthreshold'            => 'Prag za prikaz škrbin:',
+'recentchangescount'       => 'Število naslovov v zadnjih spremembah:',
+'savedprefs'               => 'Spremembe ste uspešno shranili!',
+'timezonelegend'           => 'Časovni pas',
+'timezonetext'             => 'Vnesite časovno razliko med vašim krajevnim in strežniškim časom (UTC).',
+'localtime'                => 'Krajevni čas:',
+'timezoneoffset'           => 'Izravnava¹:',
+'servertime'               => 'Strežniški čas:',
+'guesstimezone'            => 'Izpolni iz brskalnika',
+'allowemail'               => 'Drugim uporabnikom omogoči pošiljanje e-pošte',
+'defaultns'                => 'Navadno išči v naslednjih imenskih prostorih:',
+'default'                  => 'privzeto',
+'files'                    => 'Datoteke',
+
+# User rights
+'userrights-lookup-user'     => 'Upravljanje z uporabniškimi skupinami',
+'userrights-user-editname'   => 'Vpišite uporabniško ime:',
+'editusergroup'              => 'Uredi uporabniške skupine',
+'userrights-editusergroup'   => 'Urejanje uporabniških skupin',
+'saveusergroups'             => 'Shrani spremembe',
+'userrights-groupsmember'    => 'Član skupine:',
+'userrights-groupsavailable' => 'Skupine, ki so na razpolago:',
+'userrights-groupshelp'      => 'Izberite skupine, iz katerih želite odstraniti ali vanje dodati uporabnika.
+Neoznačene skupine ne bodo spremenjene. Skupino lahko odznačite z levim klikom in hkratnim pritiskom tipke CTRL.',
+
+# Groups
+'group'            => 'Skupina:',
+'group-bot'        => 'Boti',
+'group-sysop'      => 'Administratorji',
+'group-bureaucrat' => 'Birokrati',
+'group-all'        => '(vsi)',
+
+'group-sysop-member'      => 'Administrator',
+'group-bureaucrat-member' => 'Birokrat',
+
+'grouppage-bot'        => 'Project:Boti',
+'grouppage-sysop'      => 'Project:Administratorji',
+'grouppage-bureaucrat' => 'Project:Birokrati',
+
+# User rights log
+'rightslog'      => 'Dnevnik_uporabniških_pravic',
+'rightslogtext'  => 'Prikazan je dnevnik sprememb uporabniških pravic.',
+'rightslogentry' => '- sprememba pravic uporabnika $1 iz $2 v $3',
+'rightsnone'     => '(nobeno)',
+
+# Recent changes
+'recentchanges'                     => 'Zadnje spremembe',
+'recentchangestext'                 => 'Na tej strani lahko spremljajte najnedavnejše spremembe wikija.',
+'rcnote'                            => 'Prikazujem {{plural:$1|zadnjo|zadnji|zadnje|zadnjih|zadnjih}} <strong>$1</strong> {{plural:$1|spremembo|spremembi|spremembe|sprememb|sprememb}} v {{plural:$2|zadnjem|zadnjih|zadnjih|zadnjih|zadnjih}} <strong>$2</strong> {{plural:$2|dnevu|dneh|dneh|dneh|dneh}}, kot v $3.',
+'rcnotefrom'                        => 'Navedene so spremembe od <b>$2</b> dalje (prikazujem jih do <b>$1</b>).',
+'rclistfrom'                        => 'Prikaži spremembe od $1 naprej.',
+'rcshowhideminor'                   => '$1 manjša urejanja',
+'rcshowhidebots'                    => '$1 bote',
+'rcshowhideliu'                     => '$1 prijavljene uporabnike',
+'rcshowhideanons'                   => '$1 brezimne uporabnike',
+'rcshowhidepatr'                    => '$1 pregledana urejanja',
+'rcshowhidemine'                    => '$1 moja urejanja',
+'rclinks'                           => 'Prikaži {{plural:$1|zadnjo|zadnji|zadnje|zadnjih|zadnjih}} $1 {{plural:$1|spremembo|spremembi|spremembe|sprememb|sprememb}} v {{plural:$2|zadnjem $2 dnevu|zadnjih $2 dneh|zadnjih $2 dneh|zadnjih $2 dneh|zadnjih $2 dneh}};<br />$3',
+'diff'                              => 'prim',
+'hist'                              => 'zgod',
+'hide'                              => 'skrij',
+'show'                              => 'prikaži',
+'minoreditletter'                   => 'm',
+'newpageletter'                     => 'N',
+'number_of_watching_users_pageview' => '[temo {{plural:$1|spremlja|spremljata|spremljajo|spremlja|spremlja}} $1 {{plural:$1|uporabnik|uporabnika|uporabniki|uporabnikov|uporabnikov}}]',
+'rc_categories'                     => 'Omejitev na kategorije (ločite jih z »|«)',
+'rc_categories_any'                 => 'Katero koli',
+
+# Recent changes linked
+'recentchangeslinked' => 'Sorodne spremembe',
+
+# Upload
+'upload'                      => 'Naloži datoteko',
+'uploadbtn'                   => 'Naloži datoteko',
+'reupload'                    => 'Naloži drugo',
+'reuploaddesc'                => 'Vrnitev na obrazec za nalaganje.',
+'uploadnologin'               => 'Niste prijavljeni',
+'uploadnologintext'           => 'Za nalaganje datotek se [[Special:Userlogin|prijavite]].',
+'upload_directory_read_only'  => 'V mapo za nalaganje datotek ($1) spletni strežnik ne more pisati.',
+'uploaderror'                 => 'Napaka',
+'uploadtext'                  => "Spodnji obrazec lahko uporabite za nalaganje datotek; za ogled ali iskanje že naloženih pojdite na [[Special:Imagelist|seznam naloženih datotek]]. Naložitve in izbrisi so zapisani tudi v [[Special:Log/upload|dnevniku nalaganja]].
+
+Datoteko lahko na želeno stran vključite z naslednjo skladnjo
+
+* '''<nowiki>[[Image:File.jpg]]</nowiki>'''
+* '''<nowiki>[[Image:File.png|alt text]]</nowiki>'''
+ali za neposredno povezavo z datoteko
+* '''<nowiki>[[Media:File.ogg]]</nowiki>'''",
+'uploadlog'                   => 'dnevnik nalaganja',
+'uploadlogpage'               => 'Dnevnik nalaganja datotek',
+'uploadlogpagetext'           => 'Prikazan je seznam nedavno naloženih predstavnostnih datotek. Vsi navedeni časi so strežniški čas (UTC). Vedite, da polje »Uporabnik« razlikuje med malimi in velikimi črkami.',
+'filename'                    => 'Ime datoteke',
+'filedesc'                    => 'Povzetek',
+'fileuploadsummary'           => 'Povzetek (avtor, spletni naslov vira ipd.):',
+'filestatus'                  => 'Položaj avtorskih pravic',
+'filesource'                  => 'Vir',
+'uploadedfiles'               => 'Naložene datoteke',
+'ignorewarning'               => 'Naloži kljub opozorilu',
+'ignorewarnings'              => 'Prezri vsa opozorila',
+'minlength'                   => 'Imena datotek morajo vsebovati vsaj tri črke.',
+'illegalfilename'             => 'Ime datoteke »$1« vsebuje v naslovih strani prepovedane znake. Prosimo, poskusite datoteko naložiti pod drugim imenom.',
+'badfilename'                 => 'Ime datoteke se je samodejno popravilo v »$1«.',
+'largefileserver'             => 'Velikost datoteke presega strežnikove nastavitve.',
+'emptyfile'                   => 'Naložena datoteka je morda prazna. Do tega bi lahko prišlo zaradi slovnične napake v imenu. Ali datoteko resnično želite naložiti?',
+'fileexists'                  => 'Datoteka s tem imenom že obstaja. Preden jo povozite, preverite stran $1. Da preprečite navzkrižja z že obstoječimi datotekami, uporabljajte za datoteke opisna imena (npr. »Eifflov stolp, Pariz, ponoči.jpg«).',
+'fileexists-forbidden'        => 'Datoteka s tem imenom že obstaja in je ni mogoče prepisati. Poskusite svojo datoteko naložiti pod drugim imenom. [[Image:$1|thumb|center|$1]]',
+'fileexists-shared-forbidden' => 'Datoteka s tem imenom že obstaja v skupnem repozitoriju datotek. Prosimo, vrnite se in naložite svojo datoteko pod drugim imenom. 
+[[Image:$1|thumb|center|$1]]',
+'successfulupload'            => 'Datoteko ste uspešno naložili',
+'fileuploaded'                => 'Datoteka »$1« se je uspešno naložila.
+Prosimo, sledite povezavi »$2« na opisno stran datoteke in nanjo dodajte naslednje podatke: opis , vir oziroma imetnika avtorskih pravic in licenco datoteke. Če gre za sliko, jo lahko vstavite z naslednjo skladnjo:<br /><nowiki>[[</nowiki>{{ns:Image}}:$1|thumb|Opis<nowiki>]]</nowiki>',
+'uploadwarning'               => 'Opozorilo!',
+'savefile'                    => 'Shrani datoteko',
+'uploadedimage'               => '- naložena datoteka »[[$1]]«',
+'uploaddisabled'              => 'Nalaganje je onemogočeno',
+'uploaddisabledtext'          => 'Nalaganje datotek je na tem wikiju onemogočeno.',
+'uploadscripted'              => 'Datoteka vsebuje HTML- ali skriptno kodo, ki bi jo lahko brskalnik razlagal napačno.',
+'uploadcorrupt'               => 'Datoteka je poškodovana ali pa ima napačno končnico. Prosimo, preverite jo in znova naložite.',
+'uploadvirus'                 => 'Datoteka morda vsebuje virus! Podrobnosti: $1',
+'sourcefilename'              => 'Ime izvorne datoteke',
+'destfilename'                => 'Ime ciljne datoteke',
+'filewasdeleted'              => 'Datoteka s tem imenom je bila nekoč že naložena in potem izbrisana. Preden jo znova naložite, preverite $1.',
+
+'license'   => 'Dovoljenje',
+'nolicense' => 'Nobeno (opomba: datoteka bo morda izbrisana)',
+
+# Image list
+'imagelist'                 => 'Seznam datotek',
+'imagelisttext'             => 'Prikazujem $1 $2 {{plural:$1|razvrščeno datoteko|razvrščeni datoteki|razvrščene datoteke|razvrščenih datotek|razvrščenih datotek}}.',
+'imagelistforuser'          => 'To prikaže le slike, ki jih je naložil uporabnik »$1«.',
+'getimagelist'              => 'pridobivam seznam datotek',
+'ilsubmit'                  => 'Išči',
+'showlast'                  => 'Prikaži {{plural:$1|zadnjo|zadnji|zadnje|zadnjih|zadnjih}} $1 $2 {{plural:$1|razvrščeno|razvrščeni|razvrščene|razvrščenih|razvrščenih}} {{plural:$1|datoteko|datoteki|datoteke|datotek|datotek}}.',
+'byname'                    => 'po imenu',
+'bydate'                    => 'po datumu',
+'bysize'                    => 'po velikosti',
+'imgdelete'                 => 'briši',
+'imgdesc'                   => 'opis',
+'imglegend'                 => 'Napotek: (opis) = prikaži/uredi opis datoteke.',
+'imghistory'                => 'Prejšnje različice',
+'revertimg'                 => 'vrni',
+'deleteimg'                 => 'briši',
+'deleteimgcompletely'       => 'briši',
+'imghistlegend'             => "Napotek: (tren) = trenutna datoteka, (briši) = briši zadnjo različico, (vrni) = vrni datoteko na zadnjo različico.
+<br />''Za ogled določenega dne naložene datoteke kliknite datum''.",
+'imagelinks'                => 'Strani z datoteko',
+'linkstoimage'              => 'Datoteka je del naslednjih strani slovenske {{GRAMMAR:rodilnik|{{SITENAME}}}} (strani drugih projektov niso navedene):',
+'nolinkstoimage'            => 'Z datoteko se ne povezuje nobena stran.',
+'sharedupload'              => 'Datoteka se s tega mesta lahko uporabi tudi v drugih projektih.',
+'shareduploadwiki'          => 'Nadaljnje informacije najdete na strani $1.',
+'shareduploadwiki-linktext' => 'Opisna stran datoteke',
+'noimage'                   => 'Datoteka s tem imenom ne obstaja; lahko jo $1.',
+'noimage-linktext'          => 'naložite',
+'uploadnewversion-linktext' => 'Naložite novo različico datoteke',
+
+# MIME search
+'mimesearch' => 'Iskanje po MIME-tipu',
+'mimetype'   => 'MIME-tip:',
+'download'   => 'naloži',
+
+# Unwatched pages
+'unwatchedpages' => 'Nespremljane strani',
+
+# List redirects
+'listredirects' => 'Seznam preusmeritev',
+
+# Unused templates
+'unusedtemplates'     => 'Osirotele predloge',
+'unusedtemplatestext' => 'Naslednji seznam podaja vse strani v imenskem prostoru predlog, ki niso vključene v nobeno stran. Preden jih izbrišete, preverite še druge povezave nanje.',
+'unusedtemplateswlh'  => 'druge povezave',
+
+# Random redirect
+'randomredirect' => 'Naključna preusmeritev',
+
+# Statistics
+'statistics'    => 'Statistika',
+'sitestats'     => 'Statistika {{GRAMMAR:rodilnik|{{SITENAME}}}}',
+'userstats'     => 'Uporabniška statistika',
+'sitestatstext' => "V podatkovni zbirki je skupno '''$1''' strani.
+Med te so vštete tudi ''pogovorne'' strani, strani o {{GRAMMAR:mestnik|{{SITENAME}}}}, najmanjše ''škrbinske'' strani, preusmeritve in še druge, ki niso članki. Če izključimo te zadnje, obstaja '''$2''' strani; ki so po vsej verjetnosti prave strani z vsebino.
+
+Naloženih je '''$8''' {{plural:{{NUMBEROFFILES}}|datoteka|datoteki|datoteke|datotek|datotek}}.
+
+Od postavitve wikija je bilo opravljenih '''$3''' pregledov in '''$4''' urejanj strani.
+To da skupaj povprečno '''$5''' urejanj na stran in '''$6''' pogledov na urejanje.
+
+Dolžina [http://meta.wikimedia.org/wiki/Help:Job_queue čakalne vrste delovnih nalog]: '''$7'''.",
+'userstatstext' => "Registriralo se je '''$1''' uporabnikov. Med temi je '''$2''' (oz. '''$4%''') administratorjev (glej $3).",
+
+'disambiguations'     => 'Razločitvene strani',
+'disambiguationspage' => 'Template:Razločitev',
+
+'doubleredirects'     => 'Dvojne preusmeritve',
+'doubleredirectstext' => '<b>Pozor:</b> seznam morda vsebuje neprave člane. To navadno pomeni, da pod prvim ukazom #REDIRECT obstaja dodatno besedilo s povezavami.<br />
+Vsaka vrstica vsebuje povezave k prvi in drugi preusmeritvi ter prvo vrstico besedila druge preusmeritve. To navadno da pravi ciljni članek, h kateremu naj kaže prva preusmeritev.',
+
+'brokenredirects'     => 'Pretrgane preusmeritve',
+'brokenredirectstext' => 'Naslednje preusmeritve kažejo na neobstoječe strani.',
+
+# Miscellaneous special pages
+'nbytes'                  => '$1 {{plural:$1|zlog|zloga|zlogi|zlogov|zlogov}}',
+'ncategories'             => '$1 {{PLURAL:$1|category|kategorij}}',
+'nlinks'                  => '$1 {{plural:$1|povezava|povezavi|povezave|povezav|povezav}}',
+'nmembers'                => '$1 {{plural:$1|element|elementa|elementi|elementov|elementov}}',
+'nrevisions'              => '$1 {{plural:$1|redakcija|redakciji|redakcije|redakcij|redakcij}}',
+'nviews'                  => '$1-krat pregledano',
+'lonelypages'             => 'Osirotele strani',
+'uncategorizedpages'      => 'Nekategorizirane strani',
+'uncategorizedcategories' => 'Nekategorizirane kategorije',
+'uncategorizedimages'     => 'Nekategorizirane slike',
+'unusedcategories'        => 'Osirotele kategorije',
+'unusedimages'            => 'Osirotele datoteke',
+'popularpages'            => 'Priljubljene strani',
+'wantedcategories'        => 'Želene kategorije',
+'wantedpages'             => 'Želene strani',
+'mostlinked'              => 'Strani, na katere se največ povezuje',
+'mostlinkedcategories'    => 'Kategorije z največ elementi',
+'mostcategories'          => 'Članki z največ kategorijami',
+'mostimages'              => 'Najbolj uporabljane datoteke',
+'mostrevisions'           => 'Največkrat urejane strani',
+'allpages'                => 'Vse strani',
+'prefixindex'             => 'Iskanje po začetnih črkah',
+'randompage'              => 'Naključni članek',
+'shortpages'              => 'Kratke strani',
+'longpages'               => 'Dolge strani',
+'deadendpages'            => 'Članki brez delujočih povezav',
+'listusers'               => 'Seznam uporabnikov',
+'specialpages'            => 'Posebne strani',
+'spheading'               => 'Posebne strani za vse uporabnike',
+'restrictedpheading'      => 'Omejene posebne strani',
+'rclsub'                  => '(na straneh, na katere se povezuje »$1«)',
+'newpages'                => 'Nove strani',
+'ancientpages'            => 'Najdlje nespremenjeni članki',
+'intl'                    => 'Medjezikovne povezave',
+'move'                    => 'Prestavi',
+'movethispage'            => 'Prestavi stran',
+'unusedimagestext'        => '<p>Prosimo, upoštevajte, da lahko druge spletne strani datoteko uporabljajo neposredno z navedbo spletnega naslova. Zato so datoteke lahko navedene, čeprav se uporabljajo.</p>',
+'unusedcategoriestext'    => 'Naslednje strani kategorij obstajajo, vendar jih ne uporablja noben članek ali druga kategorija.',
+
+# Book sources
+'booksources' => 'Prepoznava ISBN-številk',
+
+'categoriespagetext' => 'V wikiju obstajajo naslednje kategorije.',
+'data'               => 'Podatki',
+'userrights'         => 'Upravljanje s pravicami uporabnikov',
+'groups'             => 'Uporabniške skupine',
+'alphaindexline'     => '$1 do $2',
+'version'            => 'Različica',
+
+# Special:Log
+'specialloguserlabel'  => 'Uporabnik:',
+'speciallogtitlelabel' => 'Naslov:',
+'log'                  => 'Dnevniki',
+'alllogstext'          => 'Združeno so prikazani dnevniki sprememb uporabniških pravic, preimenovanj uporabnikov, nalaganja predstavnostnih datotek, prestavljanja in zaščite strani, brisanja, registracij uporabnikov, sprememb položaja botov ter blokiranja in deblokiranja uporabnikov. Pogled lahko zožite z izbiro dnevnika, uporabniškega imena ali strani. Vedite, da polje »Uporabnik« razlikuje med malimi in velikimi črkami.',
+'logempty'             => 'O tej strani ni v dnevniku ničesar.',
+
+# Special:Allpages
+'nextpage'          => 'Naslednja stran ($1)',
+'allpagesfrom'      => 'Prikaži strani, ki se začnejo na:',
+'allarticles'       => 'Vsi članki',
+'allinnamespace'    => 'Vse strani (imenski prostor $1)',
+'allnotinnamespace' => 'Vse strani (brez imenskega prostora $1)',
+'allpagesprev'      => 'Predhodna',
+'allpagesnext'      => 'Naslednja',
+'allpagessubmit'    => 'Pojdi',
+'allpagesprefix'    => 'Prikaži strani z začetnimi črkami:',
+
+# E-mail user
+'mailnologin'     => 'Manjka naslov pošiljatelja',
+'mailnologintext' => "Za pošiljanje pošte se [[Special:Userlogin|prijavite]] in v [[Special:Preferences|nastavitvah]] vpišite veljaven '''overjen''' e-poštni naslov.",
+'emailuser'       => 'Pošlji uporabniku e-pismo',
+'emailpage'       => 'Pošlji uporabniku e-pismo',
+'emailpagetext'   => "S spodnjim obrazcem lahko uporabniku pošljete e-poštno sporočilo. Da bo prejemnik lahko odgovoril neposredno vam, bo v glavi sporočila zapisan '''vaš e-poštni naslov''' (kot ste ga vpisali v [[Special:Preferences|uporabniških nastavitvah]]).",
+'usermailererror' => 'Predmet e-pošte je vrnil napako:',
+'defemailsubject' => 'Elektronska pošta {{GRAMMAR:rodilnik|{{SITENAME}}}}',
+'noemailtitle'    => 'Ni e-poštnega naslova.',
+'noemailtext'     => 'Uporabnik ni navedel veljavnega e-poštnega naslova ali pa elektronske pošte ne želi prejemati.',
+'emailfrom'       => 'Od',
+'emailto'         => 'Za',
+'emailsubject'    => 'Predmet',
+'emailmessage'    => 'Sporočilo',
+'emailsend'       => 'Pošlji',
+'emailsent'       => 'E-pismo je poslano!',
+'emailsenttext'   => 'E-pismo je poslano.',
+
+# Watchlist
+'watchlist'            => 'Spisek nadzorov',
+'mywatchlist'            => 'Spisek nadzorov',
+'nowatchlist'          => 'Vaš spisek nadzorov je prazen.',
+'watchlistcount'       => "'''Na spisku nadzorov imate, vštevši pogovorne strani, $1 {{plural:$1|predmet|predmeta|predmete|predmetov|predmetov}}.'''",
+'clearwatchlist'       => 'Izprazni spisek nadzorov',
+'watchlistcleartext'   => 'Jih resnično želite odstraniti?',
+'watchlistclearbutton' => 'Izprazni spisek nadzorov',
+'watchlistcleardone'   => 'Spisek nadzorov je izpraznjen. Odstranjenih je bilo $1 predmetov.',
+'watchnologin'         => 'Niste prijavljeni',
+'watchnologintext'     => 'Za urejanje spiska nadzorov se [[Special:Userlogin|prijavite]].',
+'addedwatch'           => 'Dodano na spisek nadzorov',
+'addedwatchtext'       => "Stran »'''<nowiki>$1</nowiki>'''« je bila dodana na vaš [[Special:Watchlist|spisek nadzorov]], kjer bodo odslej navedene njene morebitne spremembe in spremembe pripadajoče pogovorne strani. Za lažjo izbiro bodo tudi v [[Special:Recentchanges|seznamu zadnjih sprememb]] prikazane <b>krepko</b>. Če jo želite odstraniti s spiska, kliknite zavihek »Prenehaj opazovati«.",
+'removedwatch'         => 'Odstranjena s spiska nadzorov',
+'removedwatchtext'     => 'Stran »<nowiki>$1</nowiki>« je odstranjena z vašega spiska nadzorov.',
+'watch'                => 'Opazuj',
+'watchthispage'        => 'Opazuj stran',
+'unwatch'              => 'Prenehaj opazovati',
+'unwatchthispage'      => 'Prenehaj opazovati stran',
+'notanarticle'         => 'Ni članek',
+'watchnochange'        => 'V prikazanem časovnem obdobju se ni spremenila nobena med nadzorovanimi stranmi.',
+'watchdetails'         => 'Spremljate <strong>$1</strong> (pogovorne strani niso vštete). Svoj spisek nadzorov lahko [[Special:Watchlist/edit|pregledate in uredite]] ali pa z njega [[Special:Watchlist/clear|odstranite vse predmete]].',
+'wlheader-enotif'      => '* Obveščanje po elektronski pošti je omogočeno.',
+'wlheader-showupdated' => "* Od vašega zadnjega ogleda spremenjene strani so prikazanje '''krepko'''.",
+'watchmethod-recent'   => 'med nedavnimi urejanji iščem spremljane strani',
+'watchmethod-list'     => 'med spremljanimi stranmi iščem nedavna urejanja',
+'removechecked'        => 'Odstrani označene strani s spiska nadzorov',
+'watchlistcontains'    => 'Spremljate $1 {{plural:$1|stran|strani|strani|strani|strani}}.',
+'watcheditlist'        => "Na naslednjem seznamu so po abecedi navedene strani na vašem spisku nadzorov. Če želite katero odstraniti, jo označite in kliknite gumb ''Odstrani označene strani s spiska nadzorov'' na dnu strani. Odstranitev strani pomeni tudi odstranitev njene pogovorne strani in obratno. Če je na seznamu katera izmed povezav rdeča, je bila stran izbrisana, vendar jo lahko še vedno spremljate.",
+'removingchecked'      => 'Odstranjevanje označenih strani s spiska nadzorov ...',
+'couldntremove'        => "'$1' ste s svojega spiska nadzorov že odstranili.
+
+Ste osvežili to stran? Če je tako, lahko svoj spisek nadzorov varno osvežite s klikom povezave »spisek nadzorov« na vrhu zaslona.
+<br />",
+'iteminvalidname'      => "Težava z izbiro '$1', neveljavno ime ...",
+'wlnote'               => 'Navedenih je {{plural:$1|zadnja|zadnji|zadnje|zadnjih|zadnjih}} $1 {{plural:$1|sprememba|spremembi|spremembe|sprememb}} v {{plural:$2|zadnji|zadnjih|zadnjih|zadnjih|zadnjih}} <b>$2</b> {{plural:$2|uri|urah|urah|urah|urah}}.',
+'wlshowlast'           => 'Prikaži zadnjih $1 ur; $2 dni; $3;',
+'wlsaved'              => 'To je shranjena različica vašega spiska nadzorov. Da je obremenitev strežnikov čim manjša, se spisek nadzorov osveži enkrat na dan.',
+'wldone'               => 'Končano.',
+
+'enotif_mailer'      => '{{SITENAME}} - obvestilni poštar',
+'enotif_reset'       => 'Označi vse strani kot prebrane',
+'enotif_newpagetext' => 'To je nova stran.',
+'changed'            => 'spremenjena',
+'created'            => 'ustvarjena',
+'enotif_subject'     => 'Stran {{GRAMMAR:rodilnik|{{SITENAME}}}} $PAGETITLE je $CHANGEDORCREATED $PAGEEDITOR',
+'enotif_lastvisited' => 'Za spremembe po vašem zadnjem obisku glejte $1.',
+'enotif_body'        => '$WATCHINGUSERNAME,
+
+stran v {{GRAMMAR:dajalnik|{{SITENAME}}}} $PAGETITLE je bila $PAGEEDITDATE $CHANGEDORCREATED s strani $PAGEEDITOR,
+za trenutno redakcijo glejte $PAGETITLE_URL
+
+$NEWPAGE
+
+Urejevalčev povzetek: $PAGESUMMARY $PAGEMINOREDIT
+
+Navežite stik z urejevalcem:
+e-pošta $PAGEEDITOR_EMAIL
+wiki $PAGEEDITOR_WIKI
+
+Nadaljnjih obvestil do obiska strani ne boste prejemali. Na spisku nadzorov lahko znova nastavite zastavice obveščanj za vse spremljane strani.
+
+             Vaš opozorilni sistem slovenskega {{GRAMMAR:rodilnik|{{SITENAME}}}}
+
+--
+Za spremembo nastavitev spiska nadzorov obiščite
+{{fullurl:Special:Watchlist/edit}}
+
+Povratna sporočila in pomoč:
+{{fullurl:{{MediaWiki:helppage}}}}',
+
+# Delete/protect/revert
+'deletepage'                  => 'Briši stran',
+'confirm'                     => 'Potrdi',
+'excontent'                   => "vsebina: '$1'",
+'excontentauthor'             => "vsebina: '$1' (edini urejevalec pa '$2')",
+'exbeforeblank'               => "vsebina pred brisanjem: '$1'",
+'exblank'                     => 'prazna stran',
+'confirmdelete'               => 'Potrdi brisanje',
+'deletesub'                   => '(Brišem »$1«)',
+'historywarning'              => 'OPOZORILO: stran, ki jo želite izbrisati, ima zgodovino:',
+'confirmdeletetext'           => "Iz zbirke podatkov boste izbrisali stran ali sliko skupaj z vso njeno zgodovino. 
+Prosimo, '''potrdite''', da to resnično želite, da razumete posledice dejanja in da se ravnate po [[{{MediaWiki:policy-url}}|pravilih]].",
+'actioncomplete'              => 'Poseg je končan',
+'deletedtext'                 => "»'''$1'''« je bila izbrisana. 
+Za zapise nedavnih brisanj glej $2.",
+'deletedarticle'              => 'je izbrisal(-a) »$1«',
+'dellogpage'                  => 'Dnevnik brisanja',
+'dellogpagetext'              => 'Prikazan je seznam nedavnih brisanj z navedenim strežniškim časom (UTC). Vedite, da polje »Uporabnik« razlikuje med malimi in velikimi črkami.',
+'deletionlog'                 => 'dnevnik brisanja',
+'reverted'                    => 'Obnova prejšnje redakcije',
+'deletecomment'               => 'Razlog za brisanje',
+'imagereverted'               => 'Prejšnjo redakcijo ste uspešno obnovili',
+'rollback'                    => 'Vrni spremembe',
+'rollback_short'              => 'Vrni',
+'rollbacklink'                => 'vrni',
+'rollbackfailed'              => 'Vrnitev ni uspela.',
+'cantrollback'                => 'Urejanja ne morem vrniti; zadnji urejevalec je hkrati edini.',
+'alreadyrolled'               => 'Ne morem vrniti zadnje spremembe [[:$1]]
+od uporabnika [[User:$2|$2]] ([[User_talk:$2|Pogovor]]); nekdo drug je že spremenil ali vrnil članek.
+
+Zadnja sprememba od uporabnika [[User:$3|$3]] ([[User talk:$3|Pogovor]]).',
+'editcomment'                 => "Pripomba k spremembi: »''$1''«.", # only shown if there is an edit comment
+'revertpage'                  => 'vrnitev sprememb uporabnika »[[Special:Contributions/$2|$2]]« ([[User talk:$2|pogovor]]) na zadnje urejanje uporabnika »$1«',
+'sessionfailure'              => 'Vaša prijava ni uspela; da bi preprečili ugrabitev seje, je bilo dejanje preklicano. Prosimo, izberite »Nazaj« in ponovno naložite stran, s katere prihajate, nato poskusite znova.',
+'protectlogpage'              => 'Dnevnik zaščit strani',
+'protectlogtext'              => 'Prikazan je seznam zaščit in odstranitev zaščit strani. Za več podatkov glejte [[Project:Zaščitena stran]] in [[Project:Pravila zaščite]]. Vedite, da polje »Uporabnik« razlikuje med malimi in velikimi črkami.',
+'protectedarticle'            => 'Zaščita strani "[[$1]]"',
+'unprotectedarticle'          => 'Zaščita strani $1 je odstranjena.',
+'protectsub'                  => '(Zaščita strani »$1«)',
+'confirmprotecttext'          => "Ali stran res želite '''zaščititi'''?",
+'confirmprotect'              => 'Potrdite zaščito',
+'protectmoveonly'             => 'Zaščiti LE PRED PREMIKANJEM',
+'protectcomment'              => 'Razlog:',
+'unprotectsub'                => '(Odstranjujem zaščito strani »$1«)',
+'confirmunprotecttext'        => "Ali res želite '''odstraniti''' zaščito strani?",
+'confirmunprotect'            => 'Potrdite odstranitev zaščite',
+'unprotectcomment'            => 'Razlog za odstranitev zaščite',
+'protect-unchain'             => 'Deblokiraj dovoljenja za premikanje',
+'protect-text'                => "Tu si lahko ogledate in spremenite raven zaščitenosti strani '''$1'''.",
+'protect-default'             => 'Omogoči urejanje vsem uporabnikom',
+'protect-level-autoconfirmed' => 'Blokiraj neregistrirane uporabnike',
+'protect-level-sysop'         => 'Blokiraj vse uporabnike (razen administratorjev)',
+
+# Restrictions (nouns)
+'restriction-edit' => 'Urejanje',
+'restriction-move' => 'Prestavljanje',
+
+# Undelete
+'undelete'               => 'Obnovi izbrisano stran',
+'undeletepage'           => 'Prikaži izbrisane strani in jih obnovi',
+'viewdeletedpage'        => 'Pregled izbrisanih strani',
+'undeletepagetext'       => 'Naslednje strani so izbrisane, vendar so še vedno v arhivu in jih lahko obnovite. Arhiv je treba občasno počistiti.',
+'undeleteextrahelp'      => "Da bi obnovili celotno stran z vso njeno zgodovino, pustite vsa potrditvena polja prazna in kliknite '''''Obnovi'''''. Če želite obnoviti le določene redakcije strani, pred klikom gumba '''''Obnovi''''' označite ustrezna potrditvena polja. Klik gumba '''''Ponastavi''''' bo izpraznil polje za vnos razloga in vsa potrditvena polja.
+
+Prosimo, ravnajte se po [[{{MediaWiki:policy-url}}|pravilih obnove strani]] in navedite ustrezen razlog.",
+'undeleterevisions'      => '{{plural:$1|Arhivirana je|Arhivirani sta|Arhivirane so|Arhiviranih je|Arhiviranih ni}} $1 {{plural:$1|redakcija|redakciji|redakcije|redakcij|redakcij}}',
+'undeletehistory'        => 'Z obnovo strani se bodo po privzetem obnovile tudi vse pripadajoče redakcije. Če se želite temu izogniti, označite le želene.
+
+Kjer je bila po brisanju ustvarjena nova stran s tem imenom, se trenutna redakcija obstoječe strani ne bo samodejno zamenjala, temveč se bodo obnovljene redakcije pojavile v prejšnji zgodovini. Pazite, da se temu izognete, razen seveda, kadar resnično nameravate združiti zgodovini obeh strani.',
+'undeletehistorynoadmin' => 'Stran je izbrisana. Razlog za izbris je skupaj s podrobnostmi o uporabnikih, ki so jo urejali pred izbrisom, naveden v prikazanem povzetku. Dejansko besedilo izbrisanih redakcij je dostopno le administratorjem.',
+'undeletebtn'            => 'Obnovi',
+'undeletereset'          => 'Ponastavi',
+'undeletecomment'        => 'Razlog:',
+'undeletedarticle'       => 'je obnovil(-a) »$1«',
+'undeletedrevisions'     => 'obnovljeno: $1 {{plural:$1|redakcija|redakciji|redakcije|redakcij|redakcij}}',
+'undeletedfiles'         => 'Obnovili ste $1 {{PLURAL:datoteka|datoteki|datoteke|datotek|datotek}}',
+'cannotundelete'         => 'Obnova ni uspela. Morda je stran obnovil že kdo drug.',
+'undeletedpage'          => "<big>'''Obnovili ste stran '$1'.'''</big>
+
+Nedavna brisanja in obnove so zapisani v [[Special:Log/delete|dnevniku brisanja]].",
+
+# Namespace form on various pages
+'namespace' => 'Imenski prostor:',
+'invert'    => 'Obrni izbor',
+
+# Contributions
+'contributions' => 'Uporabnikovi prispevki',
+'mycontris'     => 'Prispevki',
+'contribsub2'    => 'Uporabnik: $1 ($2)',
+'nocontribs'    => 'Ne najdem nobene merilom ustrezajoče spremembe.',
+'ucnote'        => 'Prikazujem {{plural:$1|zadnje|zadnji|zadnje|zadnjih|zadnjih}} <strong>$1</strong> uporabnikovih {{plural:$1|urejanj|urejanji|urejanja|urejanj|urejanj}} v {{plural:$2|zadnjem|zadnjih|zadnjih|zadnjih|zadnjih}} <strong>$2</strong> {{plural:$2|dnevu|dneh|dneh|dneh|dneh}}.',
+'uclinks'       => 'Prikaži {{plural:$1|zadnjo|zadnji|zadnje|zadnjih}} $1 {{plural:spremembo|spremembi|spremembe|sprememb|sprememb}}; prikaži {{plural:$2|zadnji|zadnja|zadnje|zadnjih|zadnjih}} $2 {{plural:$2|dan|dni|dni|dni|dni}}.',
+'uctop'         => ' (vrh)',
+
+'sp-contributions-newest'      => 'Najnovejši',
+'sp-contributions-oldest'      => 'Najstarejši',
+'sp-contributions-newer'       => '{{plural:$1|novejših|novejša|novejše|novejših|novejših}} $1',
+'sp-contributions-older'       => '{{plural:$1|starejših|starejša|starejše|starejših|starejših}} $1',
+'sp-contributions-newbies-sub' => 'Prispevki novincev',
+
+'sp-newimages-showfrom' => 'Prikaži datoteke, naložene od $1 naprej',
+
+# What links here
+'whatlinkshere' => 'Kaj se povezuje sem',
+'notargettitle' => 'Ni cilja',
+'notargettext'  => 'Niste navedli ciljne strani ali uporabnika za izvedbo ukaza.',
+'linklistsub'   => '(Seznam povezav)',
+'linkshere'     => 'Sem kažejo naslednje strani:',
+'nolinkshere'   => 'Sem ne kaže nobena stran.',
+'isredirect'    => 'preusmeritvena stran',
+'istemplate'    => 'vključitev',
+
+# Block/unblock
+'blockip'                     => 'Blokiranje IP-naslova ali uporabniškega imena',
+'blockiptext'                 => "Naslednji obrazec vam omogoča, da določenemu IP-naslovu ali uporabniškemu imenu preprečite urejanje. To storimo le zaradi zaščite pred nepotrebnim uničevanjem in po [[{{MediaWiki:policy-url}}|pravilih]]. Vnesite tudi razlog, ''na primer'' seznam strani, ki jih je uporabnik po nepotrebnem kvaril.",
+'ipaddress'                   => 'IP-naslov',
+'ipadressorusername'          => 'IP-naslov ali uporabniško ime',
+'ipbexpiry'                   => 'Pretek',
+'ipbreason'                   => 'Razlog',
+'ipbsubmit'                   => 'Blokiraj naslov',
+'ipbother'                    => 'Drugačen čas',
+'ipboptions'                  => 'nedoločen čas:indefinite,15 minut:15 minutes,1 uro:1 hour,3 ure:3 hours,1 dan:1 day,2 dni:2 days,3 dni:3 days,1 teden:1 week,2 tedna:2 weeks,1 mesec:1 month,3 mesece:3 months,6 mesecev:6 months,1 leto:1 year,neomejeno dolgo:infinite',
+'ipbotheroption'              => 'drugo',
+'badipaddress'                => 'Neveljaven IP-naslov ali uporabniško ime.',
+'blockipsuccesssub'           => 'Blokiranje je uspelo',
+'blockipsuccesstext'          => 'IP-naslov ali uporabniški račun »[[User:$1|$1]]« ([[User talk:$1|pogovor]]) je blokiran.
+
+*Preglejte [[Special:Contributions/$1|prispevke s tega naslova/uporabniškega računa]].
+*Preglejte [[Special:Ipblocklist|seznam blokiranih IP-naslovov]].
+*Preglejte [[Special:Log/block|dnevnik blokiranja]], kjer so navedeni ukrepi drugih administratorjev v zvezi s tem uporabnikom.
+
+Ne pozabite blokiranemu uporabniku na njegovi [[User talk:$1|pogovorni strani]] razložiti, zakaj ste ga blokirali.',
+'unblockip'                   => 'Omogočite urejanje IP-naslovu',
+'unblockiptext'               => 'Z naslednjim obrazcem lahko obnovite možnost urejanja z blokiranega IP-naslova ali uporabniškega računa.',
+'ipusubmit'                   => 'Deblokiraj naslov',
+'ipblocklist'                 => 'Seznam blokiranih IP-naslovov',
+'blocklistline'               => '$1, $2 je blokiral(-a) $3 ($4)',
+'infiniteblock'               => 'neomejen čas',
+'expiringblock'               => 'preteče: $1',
+'ipblocklistempty'            => 'Seznam blokiranih uporabnikov je prazen.',
+'blocklink'                   => 'blokiraj',
+'unblocklink'                 => 'deblokiraj',
+'contribslink'                => 'prispevki',
+'autoblocker'                 => 'Ker si delite IP-naslov z »$1«, vam je urejanje samodejno onemogočeno. Razlog: »$2«.',
+'blocklogpage'                => 'Dnevnik blokiranja',
+'blocklogentry'               => 'uporabnika »$1« sem blokiral(-a) za $2',
+'blocklogtext'                => 'Prikazan je dnevnik blokiranja in deblokiranja uporabnikov. Samodejno blokirani IP-naslovi niso navedeni. Trenutno veljavna blokiranja so navedena na [[Special:Ipblocklist|seznamu blokiranih IP-naslovov]].',
+'unblocklogentry'             => 'je deblokiral(-a) »$1«',
+'range_block_disabled'        => 'Možnost administratorjev za blokiranje urejanja IP-razponom je onemogočena.',
+'ipb_expiry_invalid'          => 'Neveljaven čas preteka',
+'ip_range_invalid'            => 'Neveljaven IP-razpon.',
+'proxyblocker'                => 'Blokator posredniških strežnikov',
+'proxyblockreason'            => 'Ker uporabljate odprti posredniški strežnik, je urejanje z vašega IP-naslova preprečeno. Gre za resno varnostno težavo, o kateri obvestite svojega internetnega ponudnika.',
+'proxyblocksuccess'           => 'Storjeno.',
+'sorbsreason'                 => 'Vaš IP-naslov je v [http://www.sorbs.net SORBS] DNSBL uvrščen med odprte posredniške strežnike.',
+'sorbs_create_account_reason' => 'Vaš IP-naslov je v [http://www.sorbs.net SORBS] DNSBL naveden kot odprti posredniški strežnik. Računa zato žal ne morete ustvariti.',
+
+# Developer tools
+'lockdb'              => 'Zakleni zbirko podatkov',
+'unlockdb'            => 'Odkleni zbirko podatkov',
+'lockdbtext'          => 'Zaklenitev zbirke podatkov bo vsem uporabnikom preprečila možnost urejanja strani, spreminjanja nastavitev, urejanja spiska nadzorov in drugih stvari, ki zahtevajo spremembe zbirke podatkov. Prosimo, potrdite, da jo resnično želite zakleniti in da jo boste po končanem vzdrževanju spet odklenili.',
+'unlockdbtext'        => 'Odklenitev zbirke podatkov bo vsem uporabnikom obnovila možnost urejanja strani, spreminjanja nastavitev, urejanja seznamov nadzorov in drugih stvari, ki zahtevajo spremembe zbirke. Prosimo, potrdite nedvomni namen.',
+'lockconfirm'         => 'Da, zbirko podatkov želim zakleniti.',
+'unlockconfirm'       => 'Da, zbirko podatkov želim odkleniti.',
+'lockbtn'             => 'Zakleni zbirko podatkov',
+'unlockbtn'           => 'Odkleni zbirko podatkov',
+'locknoconfirm'       => 'Namere niste potrdili.',
+'lockdbsuccesssub'    => 'Zbirko podatkov ste uspešno zaklenili',
+'unlockdbsuccesssub'  => 'Zbirka podatkov je odklenjena',
+'lockdbsuccesstext'   => 'Podatkovna baza {{GRAMMAR:rodilnik|{{SITENAME}}}} je bila zaklenjena.
+<br />Ne pozabite odkleniti, ko boste končali z vzdrževanjem.',
+'unlockdbsuccesstext' => 'Zbirka podatkov {{GRAMMAR:rodilnik|{{SITENAME}}}} je spet odklenjena.',
+
+# Move page
+'movepage'                => 'Prestavitev strani',
+'movepagetext'            => "Z naslednjim obrazcem lahko stran preimenujete in hkrati prestavite tudi vso njeno zgodovino. Dosedanja stran se bo spremenila v preusmeritev na prihodnje mesto. 
+
+'''Povezave na dosedanji naslov strani se ne bodo spremenile, zato vas prosimo, da po prestavitvi strani z uporabo pripomočka »Kaj se povezuje sem« popravite vse dvojne preusmeritve, ki bodo morda nastale.''' Odgovorni ste, da bodo povezave še naprej kazale na prava mesta.
+
+Kjer stran z izbranim novim imenom že obstaja, dejanje '''ne''' bo izvedeno, razen če je sedanja stran prazna ali preusmeritvena in brez zgodovine urejanj. To pomeni, da lahko, če se zmotite, strani vrnete prvotno ime, ne morete pa prepisati že obstoječe strani.
+
+<b>OPOZORILO!</b>
+Prestavitev strani je lahko za priljubljeno stran velika in nepričakovana sprememba, zato pred izbiro ukaza dobro premislite.",
+'movepagetalktext'        => "Če obstaja, bo samodejno prestavljena tudi pripadajoča pogovorna stran, '''razen kadar'''
+*stran prestavljate prek imenskih prostorov,
+*pod novim imenom že obstaja neprazna pogovorna stran ali
+*ste odkljukali spodnji okvirček.
+
+Če je tako, boste morali pogovorno stran, če želite, prestaviti ali povezati ročno. Če tega ne morete storiti, predlagajte prestavitev na strani [[Project:Želene prestavitve]], vsekakor pa tega '''''ne''''' počnite s preprostim izrezanjem in prilepljenjem vsebine, saj bi tako pokvarili zgodovino urejanja strani.",
+'movearticle'             => 'Prestavi stran',
+'movenologin'             => 'Niste prijavljeni',
+'movenologintext'         => 'Za prestavljanje strani morate biti registrirani in [[Special:Userlogin|prijavljeni]].',
+'newtitle'                => 'Na naslov',
+'movepagebtn'             => 'Prestavi stran',
+'pagemovedsub'            => 'Uspešno prestavljeno',
+'pagemovedtext'           => 'Stran »[[$1]]« ste prestavili na naslov »[[$2]]«.',
+'articleexists'           => "'''Stran ni bilo mogoče prestaviti!''' Izbrano ime je že zasedeno ali pa ni veljavno. Prosimo, izberite drugo ime ali za pomoč prosite katerega izmed [[{{MediaWiki:grouppage-sysop}}|administratorjev]].",
+'talkexists'              => 'Sama stran je bila uspešno prestavljena, pripadajoča pogovorna stran pa ne, ker že obstaja na novem naslovu. Prosimo, združite ju ročno. Če tega ne morete storiti, prosite za pomoč katerega izmed [[{{MediaWiki:grouppage-sysop}}|administratorjev]], nikakor pa tega NE počnite z izrezanjem in prilepljenjem vsebine.',
+'movedto'                 => 'prestavljeno na',
+'movetalk'                => 'Če je mogoče, prestavi tudi pogovorno stran.',
+'talkpagemoved'           => 'Prestavljena je tudi pripadajoča pogovorna stran.',
+'talkpagenotmoved'        => 'Pripadajoča pogovorna stran <strong>ni</strong> prestavljena. Bodisi ne obstaja ali pa ste sami določili, naj se ne prestavi.',
+'1movedto2'               => '- prestavitev [[$1]] na [[$2]]',
+'1movedto2_redir'         => '- prestavitev [[$1]] na [[$2]] čez preusmeritev',
+'movelogpage'             => 'Dnevnik prestavljanja strani',
+'movelogpagetext'         => 'Prikazujem seznam [[Help:Prestavljanje strani|prestavljenih strani]]. Vedite, da polje »Uporabnik« razlikuje med malimi in velikimi črkami.',
+'movereason'              => 'Razlog',
+'revertmove'              => 'vrni',
+'delete_and_move'         => 'Briši in prestavi',
+'delete_and_move_text'    => '==Treba bi bilo brisati==
+
+Ciljna stran »[[$1]]« že obstaja. Ali jo želite, da bi pripravili prostor za prestavitev, izbrisati?',
+'delete_and_move_confirm' => 'Da, izbriši stran',
+'delete_and_move_reason'  => 'Izbrisano z namenom pripraviti prostor za prestavitev.',
+'selfmove'                => "'''Naslova vira in cilja sta enaka; stran ni mogoče prestaviti samo vase.''' Prosimo, preverite, ali niste naslova cilja namesto v polje »Na naslov« vpisali v polje »Razlog«.",
+'immobile_namespace'      => 'Kot cilj ste določili naslov posebne vrste. V ta imenski prostor stran ni mogoče prestaviti.',
+
+# Export
+'export'        => 'Izvoz strani',
+'exporttext'    => "Besedilo in urejevalno zgodovino ene ali več strani lahko izvozite v obliki XML. V prihodnosti bo to vsebino morda mogoče izvoziti v drug wiki, ki ga bo poganjalo programje MediaWiki, v trenutni različici pa so možnosti za to zelo omejene (kjer je omogočeno orodje ''Special:Import'', lahko vsebino z njegovo uporabo uvozijo administratorji).
+
+Če želite izvoziti članke, v spodnje polje vpišite njihove naslove (enega v vsako vrstico) in označite, ali želite le trenutno različico s podatki o trenutnem urejanju ali tudi vse prejšnje z vrsticami o zgodovini strani.
+
+Če gre za slednje, lahko uporabite tudi povezavo, npr. [[Special:Export/{{MediaWiki:Mainpage}}]] za 
+članek {{MediaWiki:Mainpage}}.",
+'exportcuronly' => 'Vključi le trenutno redakcijo, ne pa celotne zgodovine.',
+'export-submit' => 'Izvozi',
+
+# Namespace 8 related
+'allmessages'               => 'Sistemska sporočila',
+'allmessagesname'           => 'Ime',
+'allmessagesdefault'        => 'Prednastavljeno besedilo',
+'allmessagescurrent'        => 'Trenutno besedilo',
+'allmessagestext'           => 'Navedena so v imenskem prostoru MediaWiki dostopna sistemska sporočila. Urejajo jih lahko [[{{MediaWiki:grouppage-sysop}}|administratorji]] in drugi sodelavci z vzdrževalnimi pravicami.',
+'allmessagesnotsupportedUI' => "Vašega trenutnega jezika vmesnika ('''$1''') [[Special:Allmessages]] spletišča ne podpirajo.",
+'allmessagesnotsupportedDB' => 'Ker je wgUseDatabaseMessages izključeno, Special:Allmessages ni podprto.',
+'allmessagesfilter'         => 'Filter pogostih izrazov:',
+'allmessagesmodified'       => 'Prikaži le spremenjeno',
+
+# Thumbnails
+'thumbnail-more'  => 'Povečaj',
+'missingimage'    => '<b>Manjkajoča slika</b><br /><i>$1</i>',
+'filemissing'     => 'Datoteka manjka',
+'thumbnail_error' => 'Napaka pri izdelavi sličice: $1',
+
+# Special:Import
+'import'                => 'Uvoz strani',
+'importinterwiki'       => 'Transwikiuvoz',
+'importtext'            => 'Z uporabo orodja Special:Export izvozite datoteko iz izvornega wikija, shranite jo na disk in naložite tu.',
+'importfailed'          => 'Uvoz ni uspel: $1',
+'importnotext'          => 'Prazno ali brez besedila',
+'importsuccess'         => 'Uspešno uvoženo!',
+'importhistoryconflict' => 'Zgodovina strani vključuje navzkrižno redakcijo (morda je bila stran naložena že prej)',
+'importnosources'       => 'Na tem wikiju je ta možnost onemogočena.',
+'importnofile'          => 'Uvožena ni bila nobena datoteka.',
+'importuploaderror'     => 'Uvoz datoteke ni uspel; morda velikost datoteke presega največjo dovoljeno velikost uvoza.',
+
+# Tooltip help for the actions
+'tooltip-pt-userpage'             => 'Vaša uporabniška stran',
+'tooltip-pt-anonuserpage'         => 'Uporabniška stran IP-naslova, ki ga uporabljate',
+'tooltip-pt-mytalk'               => 'Vaša pogovorna stran',
+'tooltip-pt-anontalk'             => 'Pogovor o urejanjih s tega IP-naslova',
+'tooltip-pt-preferences'          => 'Vaše nastavitve',
+'tooltip-pt-watchlist'            => 'Seznam strani, katerih spremembe spremljate',
+'tooltip-pt-mycontris'            => 'Seznam vaših prispevkov',
+'tooltip-pt-login'                => 'Prijava ni obvezna, vendar je zaželena',
+'tooltip-pt-anonlogin'            => 'Prijava ni obvezna, vendar je zaželena',
+'tooltip-pt-logout'               => 'Odjavite se',
+'tooltip-ca-talk'                 => 'Pogovor o strani',
+'tooltip-ca-edit'                 => 'Stran lahko uredite. Preden jo shranite, uporabite gumb za predogled.',
+'tooltip-ca-addsection'           => 'Začnite novo razpravo',
+'tooltip-ca-viewsource'           => 'Stran je zaščitena, ogledate si lahko njeno izvorno kodo',
+'tooltip-ca-history'              => 'Prejšnje redakcije strani',
+'tooltip-ca-protect'              => 'Zaščitite stran',
+'tooltip-ca-delete'               => 'Brišite stran',
+'tooltip-ca-undelete'             => 'Obnovite pred izbrisom napravljena urejanja strani.',
+'tooltip-ca-move'                 => 'Preimenujte stran',
+'tooltip-ca-watch'                => 'Dodajte stran na seznam nadzorov',
+'tooltip-ca-unwatch'              => 'Odstranite stran s seznama nadzorov',
+'tooltip-search'                  => 'Preiščite wiki',
+'tooltip-p-logo'                  => 'Glavna stran',
+'tooltip-n-mainpage'              => 'Obiščite Glavno stran',
+'tooltip-n-portal'                => 'O projektu, kaj lahko storite, kje lahko kaj najdete',
+'tooltip-n-currentevents'         => 'Spoznajte ozadje trenutnih dogodkov',
+'tooltip-n-recentchanges'         => 'Seznam zadnjih sprememb {{GRAMMAR:rodilnik|{{SITENAME}}}}',
+'tooltip-n-randompage'            => 'Naložite naključno stran',
+'tooltip-n-help'                  => 'Kraj za pomoč',
+'tooltip-n-sitesupport'           => 'Podprite nas',
+'tooltip-t-whatlinkshere'         => 'Seznam vseh s trenutno povezanih strani',
+'tooltip-t-recentchangeslinked'   => 'Zadnje spremembe na s trenutno povezanih straneh',
+'tooltip-feed-rss'                => 'RSS-dovod strani',
+'tooltip-feed-atom'               => 'Atom-dovod strani',
+'tooltip-t-contributions'         => 'Preglejte seznam uporabnikovih prispevkov',
+'tooltip-t-emailuser'             => 'Pošljite uporabniku e-pismo',
+'tooltip-t-upload'                => 'Naložite slike ali predstavnostne datoteke',
+'tooltip-t-specialpages'          => 'Preglejte seznam vseh posebnih strani',
+'tooltip-ca-nstab-main'           => 'Prikaže članek',
+'tooltip-ca-nstab-user'           => 'Prikaže uporabniško stran',
+'tooltip-ca-nstab-media'          => 'Prikaže stran s predstavnostno vsebino',
+'tooltip-ca-nstab-special'        => 'Te posebne strani ne morete urejati',
+'tooltip-ca-nstab-project'        => 'Prikaže stran projekta',
+'tooltip-ca-nstab-image'          => 'Prikaže stran s sliko ali drugo datoteko',
+'tooltip-ca-nstab-mediawiki'      => 'Prikaže sistemsko sporočilo',
+'tooltip-ca-nstab-template'       => 'Prikaže stran predloge',
+'tooltip-ca-nstab-help'           => 'Prikaže stran s pomočjo',
+'tooltip-ca-nstab-category'       => 'Prikaže stran kategorije',
+'tooltip-minoredit'               => 'Označite kot manjše urejanje',
+'tooltip-save'                    => 'Shranite vnesene spremembe (ste si jih predogledali?)',
+'tooltip-preview'                 => 'Pred shranjevanjem si, prosimo, predoglejte stran!',
+'tooltip-diff'                    => 'Preglejte spremembe, ki ste jih vnesli.',
+'tooltip-compareselectedversions' => 'Preglejte razlike med izbranima redakcijama.',
+'tooltip-watch'                   => 'Dodajte stran na svoj spisek nadzorov.',
+'tooltip-recreate'                => 'Ta stran je namenoma (skoraj) prazna.',
+
+# Metadata
+'nodublincore'      => 'Metapodatki Dublin Core RDF so na tem strežniku onemogočeni.',
+'nocreativecommons' => 'Metapodatki Creative Commons RDF so za ta strežnik onemogočeni.',
+'notacceptable'     => 'V obliki, ki jo lahko bere vaš odjemalec, wikistrežnik podatkov ne more ponuditi.',
+
+# Attribution
+'anonymous'        => 'Brezimni uporabnik(i) {{GRAMMAR:rodilnik|{{SITENAME}}}}',
+'siteuser'         => 'Uporabnik $1',
+'lastmodifiedatby' => 'Stran je zadnjič urejal(a) $3 (čas spremembe: $2, $1).', # $1 date, $2 time, $3 user
+'and'              => 'in',
+'othercontribs'    => '<!--Temelji na delu $1. Ne deluje pravilno-->Prispevki uporabnika.',
+'others'           => 'drugi',
+'siteusers'        => 'Uporabnik(i) $1',
+'creditspage'      => 'Zasluge za stran',
+'nocredits'        => 'Ni dostopnih podatkov o zaslugah za stran.',
+
+# Spam protection
+'spamprotectiontitle'    => 'Zaščita pred neželenimi sporočili',
+'spamprotectiontext'     => "Stran, ki ste jo želeli shraniti, je zaščita pred spamom blokirala, saj je vsebovala povezavo na zunanjo stran, navedeno na [[m:spam blacklist|črni listi spama]]. Če povezave (glejte spodaj) niste dodali vi, je verjetno obstajala že v prejšnji redakciji ali pa jo je dodalo vohunsko programje (''spyware'') na vašem računalniku.
+
+Da boste stran lahko shranili, boste morali odstraniti vse na črni listi navedene spletne naslove.
+
+Če mislite, da zaščita preprečuje urejanje neustrezno, vas prosimo, da na [[m:talk:spam blacklist|pogovorni strani črne liste]] predlagate njen popravek. Sledi odlomek strani, ki je sprožila zaščito.",
+'spamprotectionmatch'    => 'Naslednje besedilo je sprožilo naš filter neželenih sporočil: $1',
+'subcategorycount'       => 'Kategorija {{plural:$1|ima|ima|ima|ima|nima}} $1 {{plural:$1|podkategorijo|podkategoriji|podkategorije|podkategorij|podkategorij}}.',
+'categoryarticlecount'   => 'V tem delu kategorije {{plural:$1|je|sta|so|je|ni}} $1 {{plural:$1|stran|strani|strani|strani|strani}}.',
+'listingcontinuesabbrev' => ' nadalj.',
+'spambot_username'       => 'MediaWiki čiščenje navlake',
+'spam_reverting'         => 'Vračanje na zadnjo redakcijo brez povezav na $1',
+'spam_blanking'          => 'Vse redakcije so vsebovale povezave na $1, izpraznjujem',
+
+# Info page
+'infosubtitle'   => 'Podatki o strani',
+'numedits'       => 'Število urejanj (članek): $1',
+'numtalkedits'   => 'Število urejanj (pogovorna stran): $1',
+'numwatchers'    => 'Število oseb, ki spremljajo stran: $1',
+'numauthors'     => 'Število avtorjev: $1',
+'numtalkauthors' => 'Število avtorjev (pogovorna stran): $1',
+
+# Math options
+'mw_math_png'    => 'Vedno prikaži PNG',
+'mw_math_simple' => 'Kadar je dovolj preprosto, uporabi HTML, sicer pa PNG',
+'mw_math_html'   => 'Kadar je mogoče, uporabi HTML, sicer pa PNG',
+'mw_math_source' => 'Pusti v TeX-ovi obliki (za besedilne brskalnike)',
+'mw_math_modern' => 'Priporočeno za sodobne brskalnike',
+'mw_math_mathml' => 'če je le mogoče, uporabi MathML (preizkusno)',
+
+# Patrolling
+'markaspatrolleddiff'        => 'Označite kot nadzorovano',
+'markaspatrolledtext'        => 'Označite članek kot nadzorovan',
+'markedaspatrolled'          => 'Označeno kot nadzorovano',
+'markedaspatrolledtext'      => 'Izbrano različico ste označili kot nadzorovano.',
+'rcpatroldisabled'           => 'Spremljanje zadnjih sprememb je onemogočeno.',
+'rcpatroldisabledtext'       => 'Spremljanje zadnjih sprememb je začasno onemogočeno.',
+'markedaspatrollederror'     => 'Ni mogoče označiti kot pregledano',
+'markedaspatrollederrortext' => 'Določite redakcijo, ki jo želite označiti kot pregledano.',
+
+# Image deletion
+'deletedrevision' => 'Prejšnja redakcija $1 je izbrisana.',
+
+# Browsing diffs
+'previousdiff' => '← Pojdi na prejšnje urejanje',
+'nextdiff'     => 'Novejše urejanje →',
+
+# Media information
+'mediawarning' => "'''Opozorilo''': Tovrstni tip datotek lahko vsebuje kodo, ki bi mogla ogroziti vaš sistem.
+<hr />",
+'imagemaxsize' => 'Slike na opisnih straneh omeji na:',
+'thumbsize'    => 'Velikost sličice (thumbnail):',
+
+'newimages'    => 'Galerija novih datotek',
+'showhidebots' => '($1 bote)',
+'noimages'     => 'Nič ni videti/datoteke ni.',
+
+'passwordtooshort' => 'Vaše geslo je prekratko. Imeti mora najmanj $1 {{plural:$1|znak|znaka|znake|znakov|znakov}}.',
+
+# Metadata
+'metadata'          => 'Metapodatki',
+'metadata-help'     => 'Datoteka vsebuje še druge podatke, ki jih je verjetno dodal za njeno ustvaritev oziroma digitalizacijo uporabljeni fotografski aparat ali optični bralnik. Če je bila datoteka pozneje spremenjena, podatki sprememb morda ne izražajo popolnoma.',
+'metadata-expand'   => 'Razširi seznam',
+'metadata-collapse' => 'Skrči seznam',
+
+# EXIF tags
+'exif-imagewidth'                  => 'Širina',
+'exif-imagelength'                 => 'Višina',
+'exif-bitspersample'               => 'Bitov na barvni gradnik',
+'exif-compression'                 => 'Shema stiskanja',
+'exif-photometricinterpretation'   => 'Sestava točke',
+'exif-orientation'                 => 'Usmerjenost',
+'exif-samplesperpixel'             => 'Število gradnikov',
+'exif-planarconfiguration'         => 'Poravnava podatkov',
+'exif-ycbcrsubsampling'            => 'Podvzorčno razmerje med Y in C',
+'exif-ycbcrpositioning'            => 'Razmestitev Y in C',
+'exif-xresolution'                 => 'Vodoravna ločljivost',
+'exif-yresolution'                 => 'Navpična ločljivost',
+'exif-resolutionunit'              => 'Enota ločljivosti X in Y',
+'exif-stripoffsets'                => 'Mesto podatkov slike',
+'exif-rowsperstrip'                => 'Število vrstic na pas',
+'exif-stripbytecounts'             => 'Zlogov na pas stiskanja.',
+'exif-jpeginterchangeformat'       => 'Odtis na JPEG SOI',
+'exif-jpeginterchangeformatlength' => 'Zlogov JPEG-podatkov',
+'exif-transferfunction'            => 'Funkcija prenosa',
+'exif-whitepoint'                  => 'Kromatičnost bele točke',
+'exif-primarychromaticities'       => 'Kromatičnosti osnovnih barv',
+'exif-ycbcrcoefficients'           => 'Koeficient matrice transformacije barvnega prostora',
+'exif-referenceblackwhite'         => 'Par črnih in belih referenčnih vrednosti',
+'exif-datetime'                    => 'Datum in čas spremembe datoteke',
+'exif-imagedescription'            => 'Naslov slike',
+'exif-make'                        => 'Proizvajalec fotoaparata',
+'exif-model'                       => 'Model fotoaparata',
+'exif-software'                    => 'Uporabljeno programje',
+'exif-artist'                      => 'Fotograf',
+'exif-copyright'                   => 'Imetnik avtorskih pravic',
+'exif-exifversion'                 => 'Različica Exif',
+'exif-flashpixversion'             => 'Podprta različica Flashpix',
+'exif-colorspace'                  => 'Barvni prostor',
+'exif-componentsconfiguration'     => 'Pomen posameznih gradnikov',
+'exif-compressedbitsperpixel'      => 'Velikost točke po stiskanju (v bitih)',
+'exif-pixelydimension'             => 'Veljavna širina slike',
+'exif-pixelxdimension'             => 'Veljavna višina slike',
+'exif-makernote'                   => 'Opombe proizvajalca',
+'exif-usercomment'                 => 'Uporabniške pripombe',
+'exif-relatedsoundfile'            => 'Pripadajoča zvočna datoteka',
+'exif-datetimeoriginal'            => 'Datum in čas ustvaritve podatkov',
+'exif-datetimedigitized'           => 'Datum in čas digitalizacije',
+'exif-subsectime'                  => 'Čas pomnilnika (1/100 s)',
+'exif-subsectimeoriginal'          => 'Čas zajema',
+'exif-subsectimedigitized'         => 'Digitalizacijski čas (1/100 s)',
+'exif-exposuretime'                => 'Čas osvetlitve',
+'exif-exposuretime-format'         => '$1 s ($2)',
+'exif-fnumber'                     => 'Goriščno razmerje',
+'exif-exposureprogram'             => 'Program osvetlitve',
+'exif-spectralsensitivity'         => 'Spektralna občutljivost',
+'exif-isospeedratings'             => 'Občutljivost filma ali tipala (ISO)',
+'exif-oecf'                        => 'Optoelektronski pretvorbeni faktor',
+'exif-shutterspeedvalue'           => 'Hitrost zaklopa',
+'exif-aperturevalue'               => 'Zaslonka',
+'exif-brightnessvalue'             => 'Svetlost',
+'exif-exposurebiasvalue'           => 'Popravek osvetlitve',
+'exif-maxaperturevalue'            => 'Največja vrednost zaslonke',
+'exif-subjectdistance'             => 'Oddaljenost predmeta',
+'exif-meteringmode'                => 'Način merjenja svetlobe',
+'exif-lightsource'                 => 'Svetlobni vir',
+'exif-flash'                       => 'Bliskavica',
+'exif-focallength'                 => 'Goriščna razdalja leč',
+'exif-subjectarea'                 => 'Površina predmeta',
+'exif-flashenergy'                 => 'Energija bliskavice',
+'exif-spatialfrequencyresponse'    => 'Odziv prostorske frekvence',
+'exif-focalplanexresolution'       => 'Ločljivost goriščne ravnine X',
+'exif-focalplaneyresolution'       => 'Ločljivost goriščne ravnine Y',
+'exif-focalplaneresolutionunit'    => 'Enota ločljivosti goriščne ravnine',
+'exif-subjectlocation'             => 'Položaj predmeta',
+'exif-exposureindex'               => 'Indeks osvetlitve',
+'exif-sensingmethod'               => 'Zaznavni postopek',
+'exif-filesource'                  => 'Vir datoteke',
+'exif-scenetype'                   => 'Vrsta prizora',
+'exif-cfapattern'                  => 'Matrica filtracije barv',
+'exif-customrendered'              => 'Obdelava slike po meri',
+'exif-exposuremode'                => 'Nastavitev osvetlitve',
+'exif-whitebalance'                => 'Ravnotežje belega',
+'exif-digitalzoomratio'            => 'Razmerje digitalne povečave',
+'exif-focallengthin35mmfilm'       => 'Goriščna razdalja pri 35-milimetrskem filmu',
+'exif-scenecapturetype'            => 'Način zajema prizora',
+'exif-gaincontrol'                 => 'Ojačanje',
+'exif-contrast'                    => 'Kontrast',
+'exif-saturation'                  => 'Nasičenost',
+'exif-sharpness'                   => 'Ostrina',
+'exif-devicesettingdescription'    => 'Opis nastavitev naprave',
+'exif-subjectdistancerange'        => 'Območje oddaljenosti predmeta',
+'exif-imageuniqueid'               => 'ID slike',
+'exif-gpsversionid'                => 'Različica GPS-oznake',
+'exif-gpslatituderef'              => 'Severna ali južna zemljepisna širina',
+'exif-gpslatitude'                 => 'Zemljepisna širina',
+'exif-gpslongituderef'             => 'Vzhodna ali zahodna zemljepisna dolžina',
+'exif-gpslongitude'                => 'Zemljepisna dolžina',
+'exif-gpsaltituderef'              => 'Referenca višine',
+'exif-gpsaltitude'                 => 'Višina',
+'exif-gpstimestamp'                => 'GPS-čas (atomska ura)',
+'exif-gpssatellites'               => 'Za merjenje uporabljeni sateliti',
+'exif-gpsstatus'                   => 'Položaj sprejemnika',
+'exif-gpsmeasuremode'              => 'Način merjenja',
+'exif-gpsdop'                      => 'Natančnost merjenja',
+'exif-gpsspeedref'                 => 'Enota hitrosti',
+'exif-gpsspeed'                    => 'Hitrost GPS-sprejemnika',
+'exif-gpstrackref'                 => 'Referenca smeri gibanja',
+'exif-gpstrack'                    => 'Smer merjenja',
+'exif-gpsimgdirectionref'          => 'Referenca smeri slike',
+'exif-gpsimgdirection'             => 'Smer slike',
+'exif-gpsmapdatum'                 => 'Uporabljeni geodetski podatki',
+'exif-gpsdestlatituderef'          => 'Referenca zemljepisne širine cilja',
+'exif-gpsdestlatitude'             => 'Zemljepisna širina cilja',
+'exif-gpsdestlongituderef'         => 'Referenca zemljepisne dolžine cilja',
+'exif-gpsdestlongitude'            => 'Zemljepisna dolžina cilja',
+'exif-gpsdestbearingref'           => 'Referenca smeri cilja',
+'exif-gpsdestbearing'              => 'Smer cilja',
+'exif-gpsdestdistanceref'          => 'Referenca razdalje do cilja',
+'exif-gpsdestdistance'             => 'Razdalja do cilja',
+'exif-gpsprocessingmethod'         => 'Ime postopka obdelave GPS-opazovanj',
+'exif-gpsareainformation'          => 'Ime GPS-območja',
+'exif-gpsdatestamp'                => 'GPS-datum',
+'exif-gpsdifferential'             => 'Diferencialni popravek GPS',
+
+# EXIF attributes
+'exif-compression-1' => 'Nestisnjeno',
+
+'exif-orientation-1' => 'Navadna', # 0th row: top; 0th column: left
+'exif-orientation-2' => 'Vodoravno zrcaljeno', # 0th row: top; 0th column: right
+'exif-orientation-3' => 'Zasukano za 180°', # 0th row: bottom; 0th column: right
+'exif-orientation-4' => 'Navpično zrcaljeno', # 0th row: bottom; 0th column: left
+'exif-orientation-5' => 'Zasukano za 90° v levo in navpično zrcaljeno', # 0th row: left; 0th column: top
+'exif-orientation-6' => 'Zasukano za 90° v desno', # 0th row: right; 0th column: top
+'exif-orientation-7' => 'Zasukano za 90° v desno in navpično zrcaljeno', # 0th row: right; 0th column: bottom
+'exif-orientation-8' => 'Zasukano za 90° v levo', # 0th row: left; 0th column: bottom
+
+'exif-planarconfiguration-1' => 'grudast format',
+'exif-planarconfiguration-2' => 'ravninski format',
+
+'exif-xyresolution-i' => '$1 dpi ({{plural:$1|točka/palec|točki/palec|točke/palec|točk/palec|točk/palec}})',
+'exif-xyresolution-c' => '$1 dpc ({{plural:$1|točka/centimeter|točki/centimeter|točke/centimeter|točk/centimeter|točk/centimeter}})',
+
+'exif-componentsconfiguration-0' => 'ne obstaja',
+
+'exif-exposureprogram-0' => 'Ni določen',
+'exif-exposureprogram-1' => 'Ročno',
+'exif-exposureprogram-2' => 'Navaden',
+'exif-exposureprogram-3' => 'Prednost zaslonke',
+'exif-exposureprogram-4' => 'Prednost zaklopa',
+'exif-exposureprogram-5' => 'Ustvarjalni program (prednost globinske ostrine)',
+'exif-exposureprogram-6' => 'Akcijski program (prednost kratke osvetlitve)',
+'exif-exposureprogram-7' => 'Portretna nastavitev (fotografije od blizu, ozadje ni ostro)',
+'exif-exposureprogram-8' => 'Pokrajinska nastavitev (fotografije pokrajine, ostro ozadje)',
+
+'exif-subjectdistance-value' => '$1 {{plural:$1|meter|metra|metre|metrov|metrov}}',
+
+'exif-meteringmode-0'   => 'Neznan',
+'exif-meteringmode-1'   => 'Povprečno',
+'exif-meteringmode-2'   => 'Središčno obteženo povprečno',
+'exif-meteringmode-3'   => 'Točkovno',
+'exif-meteringmode-4'   => 'Večtočkovno',
+'exif-meteringmode-5'   => 'Vzorčno',
+'exif-meteringmode-6'   => 'Delno',
+'exif-meteringmode-255' => 'Drugače',
+
+'exif-lightsource-0'   => 'Neznan',
+'exif-lightsource-1'   => 'Dnevna svetloba',
+'exif-lightsource-2'   => 'Fluorescenčen',
+'exif-lightsource-3'   => 'Volfram (žarnica)',
+'exif-lightsource-4'   => 'Bliskavica',
+'exif-lightsource-9'   => 'Lepo vreme',
+'exif-lightsource-10'  => 'Oblačno',
+'exif-lightsource-11'  => 'Senca',
+'exif-lightsource-12'  => 'Dnevni fluorescenčen (D 5700 – 7100K)',
+'exif-lightsource-13'  => 'Dnevni bel fluorescenčen (N 4600 – 5400K)',
+'exif-lightsource-14'  => 'Hladen bel fluorescenčen (W 3900 – 4500K)',
+'exif-lightsource-15'  => 'Bel fluorescenčen (WW 3200 – 3700K)',
+'exif-lightsource-17'  => 'Običajna svetloba A',
+'exif-lightsource-18'  => 'Običajna svetloba B',
+'exif-lightsource-19'  => 'Običajna svetloba C',
+'exif-lightsource-24'  => 'ISO-ateljejski volfram',
+'exif-lightsource-255' => 'Drugačen',
+
+'exif-focalplaneresolutionunit-2' => 'palcev',
+
+'exif-sensingmethod-1' => 'Nedoločen',
+'exif-sensingmethod-2' => 'Enočipno barvno ploskovno tipalo',
+'exif-sensingmethod-3' => 'Dvočipno barvno ploskovno tipalo',
+'exif-sensingmethod-4' => 'Tričipno barvno ploskovno tipalo',
+'exif-sensingmethod-5' => 'Zaporedno barvno ploskovno tipalo',
+'exif-sensingmethod-7' => 'Trikratno tipalo',
+'exif-sensingmethod-8' => 'Zaporedno barvno črtno tipalo',
+
+'exif-scenetype-1' => 'Neposredno fotografirana slika',
+
+'exif-customrendered-0' => 'Navaden postopek',
+'exif-customrendered-1' => 'Prilagojen postopek',
+
+'exif-exposuremode-0' => 'Samodejno',
+'exif-exposuremode-1' => 'Ročno',
+'exif-exposuremode-2' => 'Samodejna konzola',
+
+'exif-whitebalance-0' => 'Samodejno',
+'exif-whitebalance-1' => 'Ročno',
+
+'exif-scenecapturetype-0' => 'Navadni',
+'exif-scenecapturetype-1' => 'Pokrajina',
+'exif-scenecapturetype-2' => 'Portret',
+'exif-scenecapturetype-3' => 'Nočni prizor',
+
+'exif-gaincontrol-0' => 'Brez',
+'exif-gaincontrol-1' => 'Nizko ojačanje zgoraj',
+'exif-gaincontrol-2' => 'Visoko ojačanje zgoraj',
+'exif-gaincontrol-3' => 'Nizko ojačanje spodaj',
+'exif-gaincontrol-4' => 'Visoko ojačanje spodaj',
+
+'exif-contrast-0' => 'Navaden',
+'exif-contrast-1' => 'Nizek',
+'exif-contrast-2' => 'Visok',
+
+'exif-saturation-0' => 'Navadna',
+'exif-saturation-1' => 'Nizka nasičenost',
+'exif-saturation-2' => 'Visoka nasičenost',
+
+'exif-sharpness-0' => 'Navadna',
+'exif-sharpness-1' => 'Mehka',
+'exif-sharpness-2' => 'Trda',
+
+'exif-subjectdistancerange-0' => 'Neznano',
+'exif-subjectdistancerange-1' => 'Makro',
+'exif-subjectdistancerange-2' => 'Pogled od blizu',
+'exif-subjectdistancerange-3' => 'Pogled od daleč',
+
+# Pseudotags used for GPSLatitudeRef and GPSDestLatitudeRef
+'exif-gpslatitude-n' => 'Severna zemljepisna širina',
+'exif-gpslatitude-s' => 'Južna zemljepisna širina',
+
+# Pseudotags used for GPSLongitudeRef and GPSDestLongitudeRef
+'exif-gpslongitude-e' => 'Vzhodna zemljepisna dolžina',
+'exif-gpslongitude-w' => 'Zahodna zemljepisna dolžina',
+
+'exif-gpsstatus-a' => 'Merjenje poteka',
+'exif-gpsstatus-v' => 'Interoperabilnost merjenja',
+
+'exif-gpsmeasuremode-2' => 'Dvorazsežnostno merjenje',
+'exif-gpsmeasuremode-3' => 'Trirazsežnostno merjenje',
+
+# Pseudotags used for GPSSpeedRef and GPSDestDistanceRef
+'exif-gpsspeed-k' => 'Kilometri na uro',
+'exif-gpsspeed-m' => 'Milje na uro',
+'exif-gpsspeed-n' => 'Vozli',
+
+# Pseudotags used for GPSTrackRef, GPSImgDirectionRef and GPSDestBearingRef
+'exif-gpsdirection-t' => 'Pravi azimut',
+'exif-gpsdirection-m' => 'Magnetni azimut',
+
+# External editor support
+'edit-externally'      => 'Uredite datoteko z uporabo zunanjega orodja',
+'edit-externally-help' => 'Za več informacij glej [http://meta.wikimedia.org/wiki/Help:External_editors navodila za namestitev].',
+
+# 'all' in various places, this might be different for inflected languages
+'recentchangesall' => 'vse',
+'imagelistall'     => 'vse',
+'watchlistall1'    => 'vse',
+'watchlistall2'    => 'vse',
+'namespacesall'    => 'vse',
+
+# E-mail address confirmation
+'confirmemail'            => 'Potrditev naslova elektronske pošte',
+'confirmemail_text'       => 'Za uporabo e-poštnih možnosti {{GRAMMAR:rodilnik|{{SITENAME}}}} morate najprej potrditi svoj e-poštni naslov. S klikom spodnjega gumba pošljite nanj potrditveno sporočilo in sledite prejetim navodilom. Ali ste svoj e-poštni naslov že potrdili, lahko preverite v [[Special:Preferences|nastavitvah]].',
+'confirmemail_send'       => 'Pošlji mi potrditveno sporočilo',
+'confirmemail_sent'       => 'Potrditveno e-sporočilo je bilo poslano.',
+'confirmemail_sendfailed' => 'Potrditvenega sporočila ni bilo mogoče poslati. Prosimo, preverite, če niste naslova vnesli napačno.',
+'confirmemail_invalid'    => 'Potrditveno geslo je neveljavno. Morda je poteklo.',
+'confirmemail_needlogin'  => 'Za potrditev svojega e-poštnega se morate $1.',
+'confirmemail_success'    => 'Vaš e-poštni naslov je potrjen. Zdaj se lahko prijavite in uporabljate wiki.',
+'confirmemail_loggedin'   => 'Svoj elektronski naslov ste uspešno potrdili.',
+'confirmemail_error'      => 'Vaša potrditev se žal ni shranila.',
+'confirmemail_subject'    => 'Potrditev e-poštnega naslova',
+'confirmemail_body'       => 'Nekdo z IP-naslovom »$1« (verjetno vi) je v {{GRAMMAR:dajalnik|{{SITENAME}}}} ustvaril račun »$2« in zanj vpisal vaš elektronski naslov. Da bi potrdili, da ta resnično pripada vam in s tem lahko začeli uporabljati e-poštne storitve {{GRAMMAR:rodilnik|{{SITENAME}}}}, odprite naslednjo povezavo: 
+
+$3
+
+Če tega niste napravili vi, povezavi ne sledite. Potrditveno geslo bo poteklo do $4.',
+
+# Inputbox extension, may be useful in other contexts as well
+'tryexact'       => 'Poskusite z natančnim zadetkom',
+'searchfulltext' => 'Preišči vse besedilo',
+'createarticle'  => 'Ustvarite stran',
+
+# Scary transclusion
+'scarytranscludedisabled' => '[prevključevanje med wikiji je onemogočeno]',
+'scarytranscludefailed'   => '[pridobivanje predloge za $1 žal ni uspelo]',
+'scarytranscludetoolong'  => '[Spletni naslov je žal predolg; se opravičujemo]',
+
+# Trackbacks
+'trackbackbox'      => "<div id='mw_trackbacks'>
+Sledilniki članka:<br />
+$1
+</div>",
+'trackbackremove'   => ' ([Izbris $1])',
+'trackbacklink'     => 'Sledilnik',
+'trackbackdeleteok' => 'Sledilnik je uspešno izbrisan.',
+
+# Delete conflict
+'deletedwhileediting' => "''Opozorilo:'' Med vašim urejanjem je eden izmed administratorjev stran izbrisal. Razloge za to si lahko pogledate v [[Special:Log/delete|dnevniku brisanja]].",
+'confirmrecreate'     => "Medtem ko ste stran urejali, jo je uporabnik [[User:$1|$1]] ([[User talk:$1|pogovor]]) izbrisal z razlogom: 
+:''$2'' 
+Prosimo, potrdite, da jo resnično želite znova ustvariti.",
+'recreate'            => 'Ponovno ustvari',
+
+'unit-pixel' => ' točk',
+
+# HTML dump
+'redirectingto' => 'Preusmerjam na »[[$1]]« ...',
+
+# action=purge
+'confirm_purge'        => 'Osvežim predpomnjenje strani? 
+ 
+$1',
+'confirm_purge_button' => 'Osveži',
+
+'youhavenewmessagesmulti' => 'Na $1 imate novo sporočilo',
+
+'searchcontaining' => "Poišči članke, ki vsebujejo ''$1''.",
+'searchnamed'      => "Poišči članke, ki se imenujejo ''$1''.",
+'articletitles'    => "Članki, ki se začnejo na ''$1''",
+'hideresults'      => 'Skrij zadetke',
+
+# DISPLAYTITLE
+'displaytitle' => '(Poveži na to stran kot [[$1]])',
+
+# Auto-summaries
+'autoredircomment' => 'preusmeritev na [[$1]]', # This should be changed to the new naming convention, but existed beforehand
+
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesSq.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesSq.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesSq.php	(revision 1280)
@@ -0,0 +1,1532 @@
+<?php
+/** Albanian (Shqip)
+ *
+ * @addtogroup Language
+ */
+
+$skinNames = array(
+	'standard' => 'Standarte',
+	'nostalgia' => 'Nostalgjike',
+	'cologneblue' => 'Kolonjë Blu'
+);
+
+$namespaceNames = array(
+	NS_MEDIA          => 'Media',
+	NS_SPECIAL        => 'Speciale',
+	NS_MAIN           => '',
+	NS_TALK           => 'Diskutim',
+	NS_USER           => 'Përdoruesi',
+	NS_USER_TALK      => 'Përdoruesi_diskutim',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK   => '$1_diskutim',
+	NS_IMAGE          => 'Figura',
+	NS_IMAGE_TALK     => 'Figura_diskutim',
+	NS_MEDIAWIKI      => 'MediaWiki',
+	NS_MEDIAWIKI_TALK => 'MediaWiki_diskutim',
+	NS_TEMPLATE       => 'Stampa',
+	NS_TEMPLATE_TALK  => 'Stampa_diskutim',
+	NS_HELP           => 'Ndihmë',
+	NS_HELP_TALK      => 'Ndihmë_diskutim'
+);
+
+# Compatbility with alt names
+$namespaceAliases = array(
+	'Perdoruesi' => NS_USER,
+	'Perdoruesi_diskutim' => NS_USER_TALK,
+);
+
+$datePreferences = array(
+	'default',
+	'dmy',
+	'ISO 8601',
+);
+$defaultDateFormat = 'dmy';
+$dateFormats = array(
+	'dmy time' => 'H:i',
+	'dmy date' => 'j F Y',
+	'dmy both' => 'j F Y H:i',
+);
+
+$separatorTransformTable = array(',' => '.', '.' => ',' );
+
+$messages = array(
+'tog-underline'         => 'Nënvizo lidhjet',
+'tog-highlightbroken'   => 'Trego lidhjet e faqeve bosh <a href="" class="new">kështu </a> (ndryshe: kështu<a href="" class="internal">?</a>).',
+'tog-justify'           => 'Rregullim i kryeradhës',
+'tog-hideminor'         => 'Mos trego redaktimet e vogla',
+'tog-extendwatchlist'   => 'Zgjero listën mbikqyrëse të tregojë të tëra ndryshimet përkatëse',
+'tog-usenewrc'          => 'Tregoji me formatin e ri (jo për të gjithë shfletuesit)',
+'tog-numberheadings'    => 'Numëro automatikish mbishkrimet',
+'tog-showtoolbar'       => 'Trego butonat e redaktimit',
+'tog-editondblclick'    => 'Redakto faqet me dopjo-shtypje (JavaScript)',
+'tog-editsection'       => 'Lejo redaktimin e seksioneve me [redakto] lidhje',
+'tog-editsectiononrightclick'=> 'Lejo redaktimin e seksioneve me djathtas-shtypje<br /> mbi emrin e seksionit (JavaScript)',
+'tog-showtoc'           => 'Trego tabelën e përmbajtjeve<br />(për faqet me më shume se 3 tituj)',
+'tog-rememberpassword'  => 'Mbaj mënd fjalëkalimin për vizitën e ardhshme',
+'tog-editwidth'         => 'Kutija e redaktimit ka gjerësi te plotë',
+'tog-watchcreations'    => 'Shto faqet që krijoj tek lista mbikqyrëse',
+'tog-watchdefault'      => 'Shto faqet që redaktoj tek lista mbikqyrëse',
+'tog-minordefault'      => 'Shëno të gjitha redaktimet si të vogla paraprakisht',
+'tog-previewontop'      => 'Trego parapamjen përpara kutisë redaktuese, jo mbas saj',
+'tog-previewonfirst'    => 'Trego parapamje në redaktim të parë',
+'tog-nocache'           => 'Mos ruaj kopje te faqeve',
+'tog-enotifwatchlistpages'=> 'Më ço email kur ndryshojnë faqet',
+'tog-enotifusertalkpages'=> 'Më ço email kur ndryshon faqja ime e diskutimit',
+'tog-enotifminoredits'  => 'Më ço email kur ka redaktime të vogla të faqeve',
+'tog-enotifrevealaddr'  => 'Trego adresën time në email-et njoftuese',
+'tog-shownumberswatching'=> 'Trego numrin e përdoruesve mbikqyrës',
+'tog-fancysig'          => 'Mos e përpuno nënshkrimin për formatim',
+'tog-externaleditor'    => 'Përdor program të jashtëm për redaktime',
+'tog-externaldiff'      => 'Përdor program të jashtëm për të treguar ndryshimet',
+'tog-showjumplinks'     => 'Lejo lidhjet e afrueshmërisë "kapërce tek"',
+'tog-uselivepreview'    => 'Trego parapamjen e menjëhershme (JavaScript) (Eksperimentale)',
+'tog-autopatrol'        => 'Shënoji si të patrulluara redaktimet e mia',
+'tog-forceeditsummary'  => 'Më pyet kur e le përmbledhjen e redaktimit bosh',
+'tog-watchlisthideown'  => 'Fshih redaktimet e mia nga lista mbikqyrëse',
+'tog-watchlisthidebots' => 'Fshih redaktimet e robotëve nga lista mbikqyrëse',
+'underline-always'      => 'gjithmonë',
+'underline-never'       => 'asnjëherë',
+'underline-default'     => 'sipas shfletuesit',
+'skinpreview'           => '(Parapamje)',
+'sunday'                => 'E diel',
+'monday'                => 'E hënë',
+'tuesday'               => 'E martë',
+'wednesday'             => 'E mërkurë',
+'thursday'              => 'E enjte',
+'friday'                => 'E premte',
+'saturday'              => 'E shtunë',
+'january'               => 'Janar',
+'february'              => 'Shkurt',
+'march'                 => 'Mars',
+'april'                 => 'Prill',
+'may_long'              => 'Maj',
+'june'                  => 'Qershor',
+'july'                  => 'Korrik',
+'august'                => 'Gusht',
+'september'             => 'Shtator',
+'october'               => 'Tetor',
+'november'              => 'Nëntor',
+'december'              => 'Dhjetor',
+'jan'                   => 'Jan',
+'feb'                   => 'Shk',
+'mar'                   => 'Mar',
+'apr'                   => 'Pri',
+'may'                   => 'Maj',
+'jun'                   => 'Qer',
+'jul'                   => 'Kor',
+'aug'                   => 'Gus',
+'sep'                   => 'Sht',
+'oct'                   => 'Tet',
+'nov'                   => 'Nën',
+'dec'                   => 'Dhj',
+'categories'            => 'Kategoritë',
+'pagecategories'        => '{{PLURAL:$1|Kategoria|Kategoritë}}',
+'category_header'       => 'Artikuj në kategorinë "$1"',
+'subcategories'         => 'Nën-kategori',
+'mainpage'              => 'Faqja Kryesore',
+'mainpagetext'          => 'Wiki software u instalua me sukses.',
+'mainpagedocfooter'     => 'Ju lutem shikoni [http://meta.wikimedia.org/wiki/Help:Contents dokumentacionin përkatës].
+
+
+== Fillimisht ==
+
+* [http://www.mediawiki.org/wiki/Help:Configuration_settings Parazgjedhjet e MediaWiki-t]
+* [http://www.mediawiki.org/wiki/Help:FAQ Pyetjet e shpeshta rreth MediaWiki-t]
+* [http://mail.wikimedia.org/mailman/listinfo/mediawiki-announce Njoftime rreth MediaWiki-t]',
+'portal'                => 'Wikiportal',
+'portal-url'            => 'Project:Wikiportal',
+'about'                 => 'Rreth',
+'aboutsite'             => 'Rreth {{SITENAME}}',
+'aboutpage'             => 'Project:Rreth',
+'article'               => 'Artikulli',
+'help'                  => 'Ndihmë',
+'helppage'              => 'Help:Ndihmë',
+'bugreports'            => 'Kontakt',
+'bugreportspage'        => '{{SITENAME}}:Kontakt',
+'sitesupport'           => 'Dhurime',
+'sitesupport-url'       => 'Project:Dhurime',
+'faq'                   => 'Pyetje e Përgjigje',
+'faqpage'               => 'Project:Pyetje e Përgjigje',
+'edithelp'              => 'Ndihmë për redaktim',
+'newwindow'             => '(hapet në një dritare të re)',
+'edithelppage'          => 'Help:Si redaktohet një faqe',
+'cancel'                => 'Harroji',
+'qbfind'                => 'Kërko',
+'qbbrowse'              => 'Shfletoni',
+'qbedit'                => 'Redaktoni',
+'qbpageoptions'         => 'Opsionet e faqes',
+'qbpageinfo'            => 'Informacion mbi faqen',
+'qbmyoptions'           => 'Opsionet e mia',
+'qbspecialpages'        => 'Faqet speciale',
+'moredotdotdot'         => 'Më shumë...',
+'mypage'                => 'Faqja ime',
+'mytalk'                => 'Diskutimet e mia',
+'anontalk'              => 'Diskutimet për këtë IP',
+'navigation'            => 'Shfleto',
+'metadata_help'         => 'Metadata (shikoni [[Project:Metadata]] për sqarimin):',
+'currentevents'         => 'Ngjarjet e tanishme',
+'currentevents-url'     => 'Ngjarjet e tanishme',
+'disclaimers'           => 'Shfajësimet',
+'disclaimerpage'        => 'Project:Shfajësimet e përgjithshme',
+'privacy'               => 'Rreth të dhënave vetjake',
+'privacypage'           => 'Project:Politika vetjake',
+'errorpagetitle'        => 'Gabim',
+'returnto'              => 'Kthehu tek $1.',
+'tagline'               => 'Nga {{SITENAME}}, Enciklopedia e Lirë',
+'search'                => 'Kërko',
+'searchbutton'          => 'Kërko',
+'go'                    => 'Shko',
+'searcharticle'                    => 'Shko',
+'history'               => 'Historiku i faqes',
+'history_short'         => 'Historiku',
+'updatedmarker'         => 'ndryshuar nga vizita e fundit',
+'info_short'            => 'Informacion',
+'printableversion'      => 'Version shtypi',
+'permalink'             => 'Lidhja e përhershme',
+'print'                 => 'Shtype',
+'edit'                  => 'Redaktoni',
+'editthispage'          => 'Redaktoni faqen',
+'delete'                => 'grise',
+'deletethispage'        => 'Grise faqen',
+'undelete_short'        => 'Restauroni $1 redaktime',
+'protect'               => 'Mbroje',
+'protectthispage'       => 'Mbroje faqen',
+'unprotect'             => 'Liroje',
+'unprotectthispage'     => 'Liroje faqen',
+'newpage'               => 'Faqe e re',
+'talkpage'              => 'Diskutoni faqen',
+'specialpage'           => 'Faqe speciale',
+'personaltools'         => 'Mjete vetjake',
+'postcomment'           => 'Shtoni koment',
+'articlepage'           => 'Shikoni artikullin',
+'talk'                  => 'Diskutimet',
+'views'                 => 'Shikime',
+'toolbox'               => 'Mjete',
+'userpage'              => 'Shikoni faqen',
+'projectpage'           => 'Shikoni projekt-faqen',
+'imagepage'             => 'Shikoni faqen e figurës',
+'viewtalkpage'          => 'Shikoni diskutimet',
+'otherlanguages'        => 'Në gjuhë të tjera',
+'redirectedfrom'        => '(Përcjellë nga $1)',
+'autoredircomment'      => 'Përcjellur tek [[$1]]',
+'redirectpagesub'       => 'Faqe përcjellëse',
+'lastmodifiedat'          => 'Kjo faqe është ndryshuar për herë te fundit më $2, $1.',
+'viewcount'             => 'Kjo faqe është parë $1 herë.',
+'copyright'             => 'Përmbajtja është në disponim nëpërmjet licensës $1.',
+'protectedpage'         => 'Faqe e mbrojtur',
+'jumpto'                => 'Shko te:',
+'jumptonavigation'      => 'navigacion',
+'jumptosearch'          => 'kërko',
+'badaccess'             => 'Gabim leje',
+'versionrequired'       => 'Nevojitet versioni $1 i MediaWiki-it',
+'versionrequiredtext'   => 'Nevojitet versioni $1 i MediaWiki-it për përdorimin e kësaj faqeje. Shikoni [[Special:Version|versionin]] tuaj.',
+'ok'                    => 'Shkoni',
+'pagetitle'             => '$1 - {{SITENAME}}',
+'retrievedfrom'         => 'Marrë nga "$1"',
+'youhavenewmessages'    => 'Keni $1 ($2).',
+'newmessageslink'       => 'mesazhe të reja',
+'newmessagesdifflink'   => 'ndryshimi i fundit',
+'editsection'           => 'redaktoni',
+'editold'               => 'redaktoni',
+'editsectionhint'       => 'Redaktoni seksionin: 
+Edit section: $1',
+'toc'                   => 'Tabela e përmbajtjeve',
+'showtoc'               => 'trego',
+'hidetoc'               => 'fshih',
+'thisisdeleted'         => 'Shikoni ose restauroni $1?',
+'viewdeleted'           => 'Do ta shikosh $1?',
+'restorelink'           => '$1 redaktime të grisura',
+'feedlinks'             => 'Ushqyes:',
+'feed-invalid'          => 'Lloji i burimit të pajtimit është i pavlefshëm.',
+'nstab-main'            => 'Artikulli',
+'nstab-user'            => 'Përdoruesi',
+'nstab-media'           => 'Media-faqe',
+'nstab-special'         => 'Speciale',
+'nstab-project'         => 'Projekt-faqe',
+'nstab-image'           => 'Figura',
+'nstab-mediawiki'       => 'Mesazhi',
+'nstab-template'        => 'Stampa',
+'nstab-help'            => 'Ndihmë',
+'nstab-category'        => 'Kategori',
+'nosuchaction'          => 'Nuk ekziston ky veprim',
+'nosuchactiontext'      => 'Veprimi i caktuar nga URL nuk
+njihet nga wiki software',
+'nosuchspecialpage'     => 'Nuk ekziston kjo faqe',
+'nospecialpagetext'     => 'Keni kërkuar një faqe speciale që nuk njihet nga wiki software.',
+'error'                 => 'Gabim',
+'databaseerror'         => 'Gabim regjistri',
+'dberrortext'           => 'Ka ndodhur një gabim me pyetjen e regjistrit. Kjo mund të ndodhi n.q.s. pyetja nuk është e vlehshme (shikoni $5),
+ose mund të jetë një yçkël e softuerit. Pyetja e fundit që i keni bërë regjistrit ishte:
+<blockquote><tt>$1</tt></blockquote>
+nga funksioni "<tt>$2</tt>".
+MySQL kthehu gabimin "<tt>$3: $4</tt>".',
+'dberrortextcl'         => 'Ka ndodhur një gabim me formatin e pyetjes së regjistrit. Pyetja e fundit qe i keni bërë regjistrit ishte:
+"$1"
+nga funksioni "$2".
+MySQL kthehu gabimin "$3: $4".',
+'noconnect'             => 'Ju kërkojmë ndjesë! Difekt teknik, rifillojmë së shpejti.<br />
+$1',
+'nodb'                  => 'Nuk mund të zgjidhja regjistrin $1',
+'cachederror'           => 'Kjo është një kopje e faqes së kërkuar dhe mund të jetë e vjetër.',
+'laggedslavemode'       => 'Kujdes: Kjo faqe mund të mos jetë përtërirë nga shërbyesi kryesorë dhe mund të ketë informacion të vjetër',
+'readonly'              => 'Regjistri i bllokuar',
+'enterlockreason'       => 'Fusni një arsye për bllokimin, gjithashtu fusni edhe kohën se kur pritet të çbllokohet',
+'readonlytext'          => 'Regjistri i {{SITENAME}}-s është i bllokuar dhe nuk lejon redaktime dhe
+artikuj të rinj. Ka mundësi të jetë bllokuar për mirëmbajtje,
+dhe do të kthehet në gjëndje normale mbas mirëmbajtjes.
+
+Mirëmbajtësi i cili e bllokoi dha këtë arsye: $1',
+'missingarticle'        => 'Regjistri nuk e gjeti tekstin e faqes që duhet të kishte gjetur, të quajtur "$1".
+
+Kjo ndodh zakonisht kur ndjek një ndryshim ose lidhje historie tek një
+faqe që është grisur.
+
+Në qoftë se ky nuk është rasti, atëherë mund të keni gjetur një yçkël në softuerin.
+Tregojani këtë përmbledhje një administruesi, duke shënuar edhe URL-in.',
+'readonly_lag'          => 'Regjistri është bllokuar automatikisht për t\'i dhënë kohë shërbyesve skllevër për të arritur kryesorin. Ju lutemi provojeni përsëri më vonë.',
+'internalerror'         => 'Gabim i brendshëm',
+'filecopyerror'         => 'Nuk munda të kopjojë skedën "$1" tek "$2".',
+'filerenameerror'       => 'Nuk munda të ndërrojë emrin e skedës "$1" në "$2".',
+'filedeleteerror'       => 'Nuk munda të gris skedën "$1".',
+'filenotfound'          => 'Nuk munda të gjejë skedën "$1".',
+'unexpected'            => 'Vlerë e papritur: "$1"="$2".',
+'formerror'             => 'Gabim: nuk munda të dërgoj formularin',
+'badarticleerror'       => 'Ky veprim nuk mund të bëhet në këtë faqe.',
+'cannotdelete'          => 'Nuk munda të gris këtë faqe ose figurë të dhënë. (Ka mundësi të jetë grisur nga dikush tjeter.)',
+'badtitle'              => 'Titull i pasaktë',
+'badtitletext'          => 'Titulli i faqes që kërkuat nuk ishte i saktë, ishte bosh, ose ishte një lidhje gabim me një titull wiki internacional.',
+'perfdisabled'          => 'Ju kërkoj ndjesë! Ky veprim është bllokuar përkohsisht sepse e ngadalëson regjistrin aq shumë sa nuk e përdor dot njeri tjetër.',
+'perfdisabledsub'       => 'Kjo është nje kopje e ruajtur nga $1:',
+'perfcached'            => 'Informacioni i mëposhtëm është kopje e ruajtur dhe mund të mos jetë i freskët:',
+'perfcachedts'          => 'Informacioni i mëposhtëm është një kopje e rifreskuar më $1.',
+'wrong_wfQuery_params'  => 'Parametra gabim tek wfQuery()<br />
+Funksioni: $1<br />
+Pyetja: $2',
+'viewsource'            => 'Shikoni tekstin',
+'viewsourcefor'         => 'e $1',
+'protectedtext'         => 'Kjo faqe është e mbrojtur që të mos redaktohet; mund të ketë
+disa arsye përse kjo është bërë, ju lutem shikoni
+[[Project:Faqe e mbrojtur|faqe e mbrojtur]].
+
+Mund të shikoni dhe kopjoni tekstin e kësaj faqeje:',
+'protectedinterface'    => 'Kjo faqe përmban tekst për pamjen gjuhësorë të softuerit dhe është e mbrojtur për të penguar keqpërdorimet.',
+'editinginterface'      => '\'\'\'Kujdes:\'\'\' Po redaktoni një faqe që përdoret për tekstin ose pamjen e softuerit. Ndryshimet e kësaj faqeje do të prekin tekstin ose pamjen për të gjithë përdoruesit e tjerë.',
+'sqlhidden'             => '(Pyetje SQL e fshehur)',
+'logouttitle'           => 'Përdoruesi doli',
+'logouttext'            => 'Keni dalë jashtë {{SITENAME}}-s. Mund të vazhdoni të përdorni {{SITENAME}}-n anonimisht, ose mund të hyni brënda përsëri.',
+'welcomecreation'       => '== Mirësevini, $1! ==
+
+Llogaria juaj është hapur. Mos harroni të ndryshoni parapëlqimet e {{SITENAME}}-s.',
+'loginpagetitle'        => 'Hyrje përdoruesi',
+'yourname'              => 'Fusni nofkën tuaj',
+'yourpassword'          => 'Fusni fjalëkalimin tuaj',
+'yourpasswordagain'     => 'Fusni fjalëkalimin përsëri',
+'remembermypassword'    => 'Mbaj mënd fjalëkalimin tim për tërë vizitat e ardhshme.',
+'yourdomainname'        => 'Faqja juaj',
+'externaldberror'       => 'Ose kishte një gabim tek regjistri i identifikimit të jashtëm, ose nuk ju lejohet të përtërini llogarinë tuaje të jashtme.',
+'loginproblem'          => '<b>Kishte një problem me hyrjen tuaj.</b><br />Provojeni përsëri!',
+'alreadyloggedin'       => '<font color=red><b>Përdorues $1, keni hyrë brënda më parë!</b></font><br />',
+'login'                 => 'Hyni',
+'loginprompt'           => 'Duhet të pranoni "biskota" për të hyrë brënda në {{SITENAME}}.',
+'userlogin'             => 'Hyni ose hapni një llogari',
+'logout'                => 'Dalje',
+'userlogout'            => 'Dalje',
+'notloggedin'           => 'Nuk keni hyrë brenda',
+'nologin'               => 'Nuk keni një llogari? $1.',
+'nologinlink'           => 'Hapeni',
+'createaccount'         => 'Hap një llogari',
+'gotaccount'            => 'Keni një llogari? $1.',
+'gotaccountlink'        => 'Hyni',
+'createaccountmail'     => 'me email',
+'badretype'             => 'Fjalëkalimet nuk janë njësoj.',
+'userexists'            => 'Nofka që përdorët është në përdorim. Zgjidhni një nofkë tjetër.',
+'youremail'             => 'Adresa e email-it*',
+'username'              => 'Nofka e përdoruesit:',
+'uid'                   => 'Nr. i identifikimit:',
+'yourrealname'          => 'Emri juaj i vërtetë*',
+'yourlanguage'          => 'Ndërfaqja gjuhësore',
+'yourvariant'           => 'Varianti',
+'yournick'              => 'Nënshkrimi',
+'badsig'                => 'Sintaksa e signaturës është e pavlefshme, kontrolloni HTML-in.',
+'email'                 => 'Email',
+'prefs-help-email-enotif'=> 'Kjo adresë përdoret dhe për tu dërguar njoftime nëse keni mundësuar këtë parapëlqim.',
+'prefs-help-realname'   => '* Emri i vërtetë (opsion): Për të përmendur emrin tuaj si kontribuues në varësi nga puna juaj këtu.',
+'loginerror'            => 'Gabim hyrje',
+'prefs-help-email'      => '* Email (me dëshirë): mund të përdoret për tu kontaktuar nga përdorues të tjerë pa u treguar adresën, për ndërrimin e fjalëkalimit të llogarisë nëse e harroni, apo mjete të tjera.',
+'nocookiesnew'          => 'Llogaria e përdoruesit u hap, por nuk keni hyrë brenda akoma. {{SITENAME}} përdor "biskota" për të futur brenda përdoruesit. Prandaj, duhet të pranoni biskota dhe të provoni përsëri me nofkën dhe fjalëkalimin tuaj.',
+'nocookieslogin'        => '{{SITENAME}} përdor "biskota" për të futur brenda përdoruesit. Prandaj, duhet të pranoni "biskota" dhe të provoni përsëri.',
+'noname'                => 'Nuk keni dhënë një emër të saktë.',
+'loginsuccesstitle'     => 'Hyrje me sukses',
+'loginsuccess'          => 'Keni hyrë brënda në {{SITENAME}} si "$1".',
+'nosuchuser'            => 'Nuk ka ndonjë përdorues me emrin "$1". Kontrolloni gërmat, ose përdorni formularin e mëposhtëm për të hapur një llogari të re.',
+'nosuchusershort'       => 'Nuk ka asnjë përdorues me emrin "$1".',
+'nouserspecified'       => 'Ju duhet të jepni një nofkë',
+'wrongpassword'         => 'Fjalëkalimi që futët nuk është i saktë. Provoni përsëri!',
+'wrongpasswordempty'    => 'Fjalëkalimi juaj ishte bosh. Ju lutemi provoni përsëri.',
+'mailmypassword'        => 'Më dërgo një fjalëkalim të ri tek adresa ime',
+'passwordremindertitle' => 'Kërkesë për fjalëkalim të ri tek {{SITENAME}}',
+'passwordremindertext'  => 'Dikush (ndoshta ju, nga adresa IP $1) kërkoi një fjalëkalim të ri për hyrje tek {{SITENAME}} ($4). Mund të përdoret fjalëkalimi "$3" për llogarinë e përdoruesit "$2" në qoftë se dëshironi. Nëse përdorni këtë fjalëkalim këshillohet ta ndërroni fjalëkalimin tuaj sapo të hyni.
+
+Në qoftë se nuk e përdorni këtë fjalëkalim të ri, atëherë do të vazhdojë të përdoret ai i vjetri. Nuk ka nevojë ta ndryshoni fjalëkalimin në qoftë se nuk ishit ju që kërkuat fjalëkalim të ri.',
+'noemail'               => 'Regjistri nuk ka adresë për përdoruesin "$1".',
+'passwordsent'          => 'Një fjalëkalim i ri është dërguar tek adresa e regjistruar për "$1". Provojeni përsëri hyrjen mbasi ta keni marrë fjalëkalimin.',
+'eauthentsent'          => 'Një email konfirmues u dërgua te adresa e dhënë. Para se të pranohen email nga përdoruesit e tjerë duhet që adressa e juaj të vërtetohet. Ju lutemi ndiqni këshillat në email-in e sapodërguar.',
+'mailerror'             => 'Gabim duke dërguar postën: $1',
+'acct_creation_throttle_hit'=> 'Më vjen keq, por brenda 24 orëve të fundit është hapur një llogari $1 me IP-adresën tuaj dhe në moment nuk mundeni të hapni më. Provoni 24 orë më vonë prap.',
+'emailauthenticated'    => 'Adresa juaj është vërtetuar më $1.',
+'emailnotauthenticated' => 'Adresa juaj nuk është vërtetuar akoma prandaj nuk mund të merrni e-mail.',
+'noemailprefs'          => '<strong>Detyrohet një adresë email-i për të përdorur këtë mjet.</strong>',
+'emailconfirmlink'      => 'Vërtetoni adresën tuaj',
+'invalidemailaddress'   => 'Adresa email e dhënë nuk mund të pranohet sepse nuk duket e rregullt. Ju lutem fusni një adresë të rregullt ose boshatisni kutinë e shtypit.',
+'accountcreated'        => 'Llogarija e Përdoruesit u krijua',
+'accountcreatedtext'    => 'Llogarija e Përdoruesit për $1 u krijua',
+'bold_sample'           => 'Tekst i trashë',
+'bold_tip'              => 'Tekst i trashë',
+'italic_sample'         => 'Tekst i pjerrët',
+'italic_tip'            => 'Tekst i pjerrët',
+'link_sample'           => 'Titulli i lidhjes',
+'link_tip'              => 'Lidhje e brëndshme',
+'extlink_sample'        => '{{SERVER}} Titulli i lidhjes',
+'extlink_tip'           => 'Lidhje e jashtme (most harro prefiksin http://)',
+'headline_sample'       => 'Titull shembull',
+'headline_tip'          => 'Titull i nivelit 2',
+'math_sample'           => 'Vendos formulen ketu',
+'math_tip'              => 'Formulë matematike (LaTeX)',
+'nowiki_sample'         => 'Vendos tekst që nuk duhet të formatohet',
+'nowiki_tip'            => 'Mos përdor format wiki',
+'image_sample'          => 'Shembull.jpg',
+'image_tip'             => 'Vendos një figurë',
+'media_sample'          => 'Shembull.ogg',
+'media_tip'             => 'Lidhje media-skedash',
+'sig_tip'               => 'Firma juaj me gjithë kohë',
+'hr_tip'                => 'vijë horizontale (përdoreni rallë)',
+'summary'               => 'Përmbledhje',
+'subject'               => 'Subjekt/Titull',
+'minoredit'             => 'Ky është një redaktim i vogël',
+'watchthis'             => 'Mbikqyre këtë faqe',
+'savearticle'           => 'Kryej ndryshimet',
+'preview'               => 'Parapamje',
+'showpreview'           => 'Trego parapamjen',
+'showlivepreview'       => 'Parapamje e menjëhershme',
+'showdiff'              => 'Trego ndryshimet',
+'anoneditwarning'       => 'Ju nuk jeni regjistruar. IP adresa juaj do të regjistrohet në historinë e redaktimeve të kësaj faqe.
+You are not logged in. Your IP address will be recorded in this page\'s edit history.',
+'missingsummary'        => '\'\'\'Vërejtje:\'\'\'  Ju nuk keni shtuar një përmbledhje për redaktimet.',
+'missingcommenttext'    => 'Ju lutemi shtoni një koment në vazhdim.',
+'blockedtitle'          => 'Përdoruesi është bllokuar',
+'blockedtext'           => 'Emri juaj ose adresa e IP-së është bllokuar nga $1. Arsyeja e dhënë është kjo:<br />\'\'$2\'\'<br />Mund të kontaktoni $1 ose një nga [[Project:Administruesit|administruesit]] e tjerë për të diskutuar bllokimin.
+
+Vini re se nuk mund të përdorni "dërgoji email këtij përdoruesi" n.q.s. nuk keni një adresë të saktë të rregjistruar në [[Special:Preferences|parapëlqimet e përdoruesit]].
+
+Adresa e IP-së që keni është $3. Jepni këtë adresë në çdo ankesë.',
+'whitelistedittitle'    => 'Duhet të hyni brënda për të redaktuar',
+'whitelistedittext'     => 'Duhet të $1 për të redaktuar artikuj.',
+'whitelistreadtitle'    => 'Duhet të hyni brënda për të lexuar',
+'whitelistreadtext'     => 'Duhet të [[Special:Userlogin|hyni brënda]] për të lexuar artikuj.',
+'whitelistacctitle'     => 'Nuk ju lejohet të hapni një llogari',
+'whitelistacctext'      => 'Duhet të [[Special:Userlogin|hyni brënda]] dhe të keni të drejta të posaçme pasi tu lejohet të hapni llogari në Wiki.',
+'confirmedittitle'      => 'Nevojitet adresë email-i e vërtetuar për të redaktuar',
+'confirmedittext'       => 'Ju duhet së pari ta vërtetoni e-mail adresen para se të redaktoni. Ju lutem plotësoni dhe vërtetoni e-mailin tuaj  te [[Special:Preferences|parapëlqimet]] e juaja.',
+'loginreqtitle'         => 'Detyrohet hyrja',
+'loginreqlink'          => 'hyni',
+'loginreqpagetext'      => 'Ju duhet $1 për të parë faqe e tjera.',
+'accmailtitle'          => 'Fjalëkalimi u dërgua.',
+'accmailtext'           => 'Fjalëkalimi për \'$1\' u dërgua tek $2.',
+'newarticle'            => '(I Ri)',
+'newarticletext'        => '{{SITENAME}} nuk ka akoma një \'\'{{NAMESPACE}} faqe\'\' të quajtur \'\'\'{{PAGENAME}}\'\'\'. Shtypni \'\'\'redaktoni\'\'\' më sipër ose [[Special:Search/{{PAGENAME}}|bëni një kërkim për {{PAGENAME}}]]',
+'anontalkpagetext'      => '---- \'\'Kjo është një faqe diskutimi për një përdorues anonim i cili nuk ka hapur akoma një llogari ose nuk e përdor atë. Prandaj, më duhet të përdor numrin e adresës [[IP adresë|IP]] për ta identifikuar. Kjo adresë mund të përdoret nga disa njerëz. Në qoftë se jeni një përdorues anonim dhe mendoni se komente kot janë drejtuar ndaj jush, ju lutem [[Special:Userlogin|krijoni një llogari ose hyni brënda]] për të mos u ngatarruar me përdorues të tjerë anonim.\'\'',
+'noarticletext'         => 'Tani për tani nuk ka tekst në këtë faqe, mund ta [[Special:Search/{{PAGENAME}}|kërkoni]] këtë titull në faqe të tjera ose mund ta [{{fullurl:{{FULLPAGENAME}}|action=edit}} filloni] atë.',
+'clearyourcache'        => '\'\'\'Shënim:\'\'\' Pasi të ruani parapëlqimet ose pasi të kryeni ndryshimet, duhet të pastroni \'\'cache\'\'-në e shfletuesit tuaj për të parë ndryshimet: për \'\'\'Mozilla/Safari/Konqueror\'\'\' shtypni \'\'Ctrl+Shift+Reload\'\' (ose \'\'ctrl+shift+r\'\'), për \'\'\'IE\'\'\' \'\'Ctrl+f5\'\', \'\'\'Opera\'\'\': \'\'F5\'\'.',
+'usercssjsyoucanpreview'=> '<strong>Këshillë:</strong> Përdorni butonin \'Trego parapamjen\' për të provuar ndryshimet tuaja të faqeve css/js përpara se të kryeni ndryshimet.',
+'usercsspreview'        => '\'\'\'Vini re se kjo është vetëm një provë ose parapamje e faqes tuaj CSS, ajo nuk është ruajtur akoma!\'\'\'',
+'userjspreview'         => '\'\'\'Vini re se kjo është vetëm një provë ose parapamje e faqes tuaj JavaScript, ajo nuk është ruajtur akoma!\'\'\'',
+'userinvalidcssjstitle' => '\'\'\'Kujdes:\'\'\' Nuk ka pamje të quajtur "$1". Vini re se faqet .css dhe .js përdorin titull me gërma të vogla, p.sh. Përdoruesi:Foo/monobook.css, jo Përdoruesi:Foo/Monobook.css.',
+'updated'               => '(E ndryshuar)',
+'note'                  => '<strong>Shënim:</strong>',
+'previewnote'           => 'Kini kujdes se kjo është vetëm një parapamje, nuk është ruajtur akoma!',
+'session_fail_preview'  => '<strong>Ju kërkoj ndjesë. Nuk munda të kryej redaktimin tuaj sepse humba disa të dhëna. Provojeni përsëri dhe nëse nuk punon provoni të dilni dhe të hyni përsëri.</strong>',
+'previewconflict'       => 'Kjo parapamje reflekton tekstin sipër kutisë së redaktimit siç do të duket kur të kryeni ndryshimin.',
+'importing'             => 'Duke importuar $1',
+'editing'               => 'Duke redaktuar $1',
+'editinguser'               => 'Duke redaktuar $1',
+'editingsection'        => 'Duke redaktuar $1 (seksion)',
+'editingcomment'        => 'Duke redaktuar $1 (koment)',
+'editconflict'          => 'Konflikt redaktimi: $1',
+'explainconflict'       => 'Dikush tjetër ka ndryshuar këtë faqe kur ju po e redaktonit. Kutiza e redaktimit mësipërme tregon tekstin e faqes siç ekziston tani. Ndryshimet juaja janë treguar poshtë kutisë së redaktimit. Ju duhet të përputhni ndryshimet tuaja me tekstin ekzistues. <b>Vetëm</b> teksti në kutinë e sipërme të redaktimit do të ruhet kur të shtypni "Ruaje faqen".',
+'yourtext'              => 'Teksti juaj',
+'storedversion'         => 'Versioni i ruajtur',
+'nonunicodebrowser'     => '<strong>KUJDES: Shfletuesi juaj nuk përdor dot unikode, ju lutem ndryshoni shfletues para se të redaktoni artikuj.</strong>',
+'editingold'            => '<strong>KUJDES: Po redaktoni një version të vjetër të kësaj faqeje. Në qoftë se e ruani, çdo ndryshim i bërë deri tani do të humbet.</strong>',
+'yourdiff'              => 'Ndryshimet',
+'copyrightwarning'      => 'Kontributet tek {{SITENAME}} janë të konsideruara të dhëna nën licensën $2 (shikoni $1 për hollësirat).<br />
+\'\'\'NDALOHET DHËNIA E PUNIMEVE PA PASUR LEJE NGA AUTORI NË MOSPËRPUTHJE ME KËTË LICENSË!\'\'\'<br />',
+'copyrightwarning2'     => 'Ju lutem vini re se të gjitha kontributet tek {{SITENAME}} mund të redaktohen, ndryshohen apo fshihen nga përdorues të tjerë. Në qoftë se nuk dëshironi që shkrimet tuaja të redaktohen pa mëshirë mos i jepni këtu.<br />
+Po na premtoni që ç\'ka po jepni këtu e keni kontributin tuaj ose e keni kopjuar nga domeni publik apo nga burime të tjera të lira sipas ligjeve përkatëse (shikoni $1 për hollësirat). 
+<strong>NDALOHET DHËNIA E PUNIMEVE PA PASUR LEJE NGA AUTORI NË MOSPËRPUTHJE ME KËTË LICENSË!</strong>',
+'longpagewarning'       => 'KUJDES: Kjo faqe është $1 kilobytes e gjatë; disa
+shfletues mund të kenë probleme për të redaktuar faqe që afrohen ose janë akoma më shumë se 32kb.
+Konsideroni ta ndani faqen në disa seksione më të vogla.',
+'longpageerror'         => '<strong>GABIM: Tesksti që ju po e redaktoni ka madhësi $1 KB dhe kjo është më shumë se maksimumi i lejuar prej $2 KB. Ndryshimet nuk mund të ruhen.</strong>',
+'readonlywarning'       => 'KUJDES: Regjistri është bllokuar për mirëmbajtje,
+kështuqë nuk do keni mundësi të ruani redaktimet e tuaja tani. Mund të kopjoni dhe ruani tekstin në një skedë për më vonë.',
+'protectedpagewarning'  => 'KUJDES: Kjo faqe është bllokuar kështuqë vetëm përdorues me titullin sysop mund ta redaktojnë. Ju lutem ndiqni rregullat e dhëna tek [[Project:Faqe e mbrojtur|faqet e mbrojtura]].',
+'semiprotectedpagewarning'=> '\'\'\'Shënim:\'\'\' Redaktimi i kësaj faqeje mund të bëhet vetëm nga përdorues të regjistruar.',
+'templatesused'         => 'Stampa të përdorura në këtë faqe:',
+'edittools'             => '<!-- Teksti këtu do të tregohet poshtë kutive të redaktimit dhe ngarkimit të skedave. -->',
+'nocreatetitle'         => 'Krijimi i faqeve të reja është i kufizuar.',
+'nocreatetext'          => 'Mundësia për të krijuar faqe të reja është kufizuar. Duhet të [[Special:Userlogin|hyni ose të hapni një llogari]] për të krijuar faqe të reja, ose mund të ktheheni mbrapsh dhe të redaktoni një faqe ekzistuese.',
+'revhistory'            => 'Historia e redaktimeve',
+'nohistory'             => 'Nuk ka histori redaktimesh për këtë faqe.',
+'revnotfound'           => 'Versioni nuk u gjet',
+'revnotfoundtext'       => 'Versioni i vjetër i faqes së kërkuar nuk mund të gjehej.Ju lutem kontrolloni URL-in që përdorët për të ardhur tek kjo faqe.',
+'loadhist'              => 'Duke ngarkuar historinë e faqes',
+'currentrev'            => 'Versioni i tanishëm',
+'revisionasof'          => 'Versioni i $1',
+'previousrevision'      => '← Version më i vjetër',
+'nextrevision'          => 'Version më i ri →',
+'currentrevisionlink'   => 'shikoni versionin e tanishëm',
+'cur'                   => 'tani',
+'next'                  => 'mbas',
+'last'                  => 'fund',
+'orig'                  => 'Origjinal',
+'histlegend'            => 'Legjenda: (tani) = ndryshimet me versionin e tanishëm,
+(fund) = ndryshimet me versionin e parardhshëm, V = redaktim i vogël',
+'deletedrev'            => '[u gris]',
+'histfirst'             => 'Së pari',
+'histlast'              => 'Së fundmi',
+'rev-deleted-comment'   => '(kometi u largua)',
+'rev-deleted-user'      => '(përdoruesi u largua)',
+'rev-deleted-text-permission'=> '<div class="mw-warning plainlinks">
+Ky version i faqes është shlyer nga arkivi publik i faqes.
+Shiko tek [{{fullurl:Special:Log/delete|page={{PAGENAMEE}}}} regjistri i grisjeve], ndoshta gjenden atje më shumë informacione rreth kësaj.
+</div>',
+'rev-deleted-text-view' => '<div class="mw-warning plainlinks">
+Ky version i faqes është shlyer nga arkivi publik i faqes. Ju si Administrator mund ta shikoni akoma këtë. 
+Shiko tek [{{fullurl:Special:Log/delete|page={{PAGENAMEE}}}} regjistri i grisjeve], ndoshta gjenden atje më shumë informacione rreth kësaj.
+</div>',
+'rev-delundel'          => 'trego/fshih',
+'history-feed-title'    => 'Historiku i versioneve',
+'history-feed-description'=> 'Historiku i versioneve për këtë faqe në wiki',
+'history-feed-item-nocomment'=> '$1 tek $2',
+'history-feed-empty'    => 'Faqja që kërkuat nuk ekziston. Ajo mund të jetë grisur nga wiki ose mund të jetë zhvendosur nën një emër tjetër. Mund të provoni ta gjeni duke e [[Special:Search|kërkuar]].',
+'revisiondelete'        => 'Shlyj/Reparo versionet',
+'revdelete-selected'    => 'Versionet e zgjedhura për [[:$1]]:',
+'revdelete-text'        => 'Përmbajtja dhe pjesët e tjera nuk janë të dukshme për të gjithë, por figurojnë në historikun e versioneve. Administratorët munden përmbajtjen e larguar ta shikojnë dhe restaurojnë, përveç në rastet kur një gjë e tillë është ndaluar ekstra.',
+'revdelete-legend'      => 'Vendosni kufizimet për versionin:',
+'revdelete-hide-text'   => 'Fshihe tekstin e versionit',
+'revdelete-hide-comment'=> 'fshih komentin e redaktimit',
+'revdelete-hide-user'   => 'Fshihe emrin/IP-në të redaktuesit',
+'revdelete-hide-restricted'=> 'Këto përkufizme vlejnë edhe për Admintratorët (jo vetëm për përdoruesit "normal")',
+'revdelete-log'         => 'Arsyeja:',
+'revdelete-submit'      => 'Apliko te versionet e zgjedhura',
+'revdelete-logentry'    => 'Pamja e versionit u ndryshua për [[$1]]',
+'difference'            => '(Ndryshime midis versioneve)',
+'loadingrev'            => 'duke ngarkuar versionin për ndryshimin',
+'lineno'                => 'Rreshti $1:',
+'editcurrent'           => 'Redaktoni versionin e tanishëm të kësaj faqeje',
+'selectnewerversionfordiff'=> 'Zgjidhni një version më të ri për krahasim',
+'selectolderversionfordiff'=> 'Zgjidhni një version më të vjetër për krahasim',
+'compareselectedversions'=> 'Krahasoni versionet e zgjedhura',
+'searchresults'         => 'Përfundimet e kërkimit',
+'searchresulttext'      => '<!--   -->',
+'searchsubtitle'        => 'Kërkim për "[[$1]]"',
+'searchsubtitleinvalid' => 'Kërkim për "$1"',
+'badquery'              => 'Pyetje kërkese e formuluar gabim',
+'badquerytext'          => 'Nuk munda t\'i përgjigjem pyetjes tuaj. Kjo ka mundësi të ketë ndodhur ngaqë provuat të kërkoni për një fjalë me më pak se tre gërma, gjë që s\'mund të behet akoma. Ka mundësi që edhe të keni shtypur keq pyetjen, për shembull "peshku dhe dhe halat". Provoni një pyetje tjetër.',
+'matchtotals'           => 'Pyetja "$1" u përpuq $2 tituj faqesh
+dhe teksti i $3 artikujve te pasardhshëm.',
+'noexactmatch'          => '<span style="font-size: 135%; font-weight: bold; margin-left: .6em">Faqja me atë titull nuk është krijuar akoma</span>
+
+<span style="display: block; margin: 1.5em 2em">
+Mund të [[$1|filloni një artikull]] me këtë titull.
+
+<span style="display:block; font-size: 89%; margin-left:.2em">Ju lutem kërkoni {{SITENAME}}-n përpara se të krijoni një artikull të ri se mund të jetë nën një titull tjetër.</span>
+</span>',
+'titlematches'          => 'Tituj faqesh që përputhen',
+'notitlematches'        => 'Nuk ka asnjë titull faqeje që përputhet',
+'textmatches'           => 'Tekst faqesh që përputhet',
+'notextmatches'         => 'Nuk ka asnjë tekst faqeje që përputhet',
+'prevn'                 => '$1 më para',
+'nextn'                 => '$1 më pas',
+'viewprevnext'          => 'Shikoni ($1) ($2) ($3).',
+'showingresults'        => 'Më poshtë tregohen <b>$1</b> përfundime duke filluar me #<b>$2</b>.',
+'showingresultsnum'     => 'Më poshtë tregohen <b>$3</b> përfundime duke filluar me #<b>$2</b>.',
+'nonefound'             => '<strong>Shënim</strong>: kërkimet pa përfundime ndodhin kur kërkoni për fjalë që rastisen shpesh si "ke" and "nga", të cilat nuk janë të futura në regjistër, ose duke dhënë më shumë se një fjalë (vetëm faqet që i kanë të gjitha ato fjalë do të tregohen si përfundime).',
+'powersearch'           => 'Kërko',
+'powersearchtext'       => 'Kërko në hapësirën:<br />
+$1<br />
+$2 Lidhje përcjellëse   Kërko për $3 $9',
+'searchdisabled'        => '<p>Kërkimi me tekst të plotë është bllokuar tani për tani ngaqë shërbyesi është shumë i ngarkuar; shpresojmë ta nxjerrim prapë në gjendje normale pas disa punimeve. Deri atëherë mund të përdorni Google-in për kërkime:</p>',
+'blanknamespace'        => '(Artikujt)',
+'preferences'           => 'Parapëlqimet',
+'prefsnologin'          => 'Nuk keni hyrë brenda',
+'prefsnologintext'      => 'Duhet të keni [[Special:Userlogin|hyrë brenda]] për të ndryshuar parapëlqimet e përdoruesit.',
+'prefsreset'            => 'Parapëlqimet janë rikthyer siç ishin.',
+'qbsettings'            => 'Vendime të shpejta',
+'qbsettings-none'	=> 'Asnjë',
+'qbsettings-fixedleft'	=> 'Lidhur majtas',
+'qbsettings-fixedright'	=> 'Lidhur djathtas',
+'qbsettings-floatingleft'	=> 'Pezull majtas',
+'qbsettings-floatingright'	=> 'Pezull djathtas',
+'changepassword'        => 'Ndërroni fjalëkalimin',
+'skin'                  => 'Pamja',
+'math'                  => 'Formula',
+'dateformat'            => 'Data',
+'datedefault'           => 'Parazgjedhje',
+'datetime'              => 'Data dhe Ora',
+'math_failure'          => 'Nuk e kuptoj',
+'math_unknown_error'    => 'gabim i panjohur',
+'math_unknown_function' => 'funksion i panjohur',
+'math_lexing_error'     => 'gabim leximi',
+'math_syntax_error'     => 'gabim sintakse',
+'math_image_error'      => 'Konversioni PNG dështoi; kontrolloni për ndonjë gabim instalimi të latex-it, dvips-it, gs-it, dhe convert-it.',
+'math_bad_tmpdir'       => 'Nuk munda të shkruaj ose krijoj dosjen e përkohshme për matematikë',
+'math_bad_output'       => 'Nuk munda të shkruaj ose të krijoj prodhimin matematik në dosjen',
+'math_notexvc'          => 'Mungon zbatuesi texvc; ju lutem shikoni math/README për konfigurimin.',
+'prefs-personal'        => 'Përdoruesi',
+'prefs-rc'              => 'Ndryshime së fundmi',
+'prefs-watchlist'       => 'Lista mbikqyrëse',
+'prefs-watchlist-days'  => 'Numri i ditëve të treguara tek lista mbikqyrëse:',
+'prefs-watchlist-edits' => 'Numri i redaktimeve të treguara tek lista mbikqyrëse e zgjeruar:',
+'prefs-misc'            => 'Të ndryshme',
+'saveprefs'             => 'Ruaj parapëlqimet',
+'resetprefs'            => 'Rikthe parapëlqimet',
+'oldpassword'           => 'I vjetri',
+'newpassword'           => 'I riu',
+'retypenew'             => 'I riu përsëri',
+'textboxsize'           => 'Redaktimi',
+'rows'                  => 'Rreshta',
+'columns'               => 'Kolona',
+'searchresultshead'     => 'Kërkimi',
+'resultsperpage'        => 'Sa përputhje të tregohen për faqe',
+'contextlines'          => 'Sa rreshta të tregohen për përputhje',
+'contextchars'          => 'Sa germa të tregohen për çdo rresht',
+'stubthreshold'         => 'Kufiri për tregimin e cungjeve',
+'recentchangescount'    => 'Numri i titujve në ndryshime së fundmi',
+'savedprefs'            => 'Parapëlqimet tuaja janë ruajtur.',
+'timezonelegend'        => 'Ora',
+'timezonetext'          => 'Fusni numrin e orëve prej të cilave ndryshon ora lokale nga ajo e shërbyesit (UTC).',
+'localtime'             => 'Tregimi i orës lokale',
+'timezoneoffset'        => 'Ndryshimi',
+'servertime'            => 'Ora e shërbyesit tani është',
+'guesstimezone'         => 'Gjeje nga shfletuesi',
+'allowemail'            => 'Lejo përdoruesit të më dërgojnë email',
+'defaultns'             => 'Kërko automatikisht vetëm në këto hapësira:',
+'default'               => 'parazgjedhje',
+'files'                 => 'Figura',
+'userrights-lookup-user'=> 'Ndrysho grupet e përdoruesit',
+'userrights-user-editname'=> 'Fusni emrin e përdoruesit:',
+'editusergroup'         => 'Trego zgjedhjet',
+'userrights-editusergroup'=> 'Anëtarësimi tek grupet',
+'saveusergroups'        => 'Kryej ndryshimet',
+'userrights-groupsmember'=> 'Anëtar i:',
+'userrights-groupsavailable'=> 'Të mundshme:',
+'userrights-groupshelp' => 'Duke zgjedhur nga lista e anëtarësimit mund të çanëtarësosh, dhe duke zgjedhur nga lista e grupeve të mundshme mund të anëtarësosh. Nuk do të ndryshojë anëtarësimi tek grupet e pazgjedhura. Mund të zgjedhësh ose çzgjedhësh duke mbajtur shtypur butonin Ctrl dhe majtas-shtypur.',
+'group'                 => 'Grupi:',
+'group-bot'             => 'Robot',
+'group-sysop'           => 'Administrues',
+'group-bureaucrat'      => 'Burokrat',
+'group-all'             => '(të gjitha)',
+'group-bot-member'      => 'Robot',
+'group-sysop-member'    => 'Administrues',
+'group-bureaucrat-member'=> 'Burokrat',
+'grouppage-bot'         => 'Project:Robotë',
+'grouppage-sysop'       => 'Project:Administrues',
+'grouppage-bureaucrat'  => 'Project:Burokratë',
+'changes'               => 'ndryshime',
+'recentchanges'         => 'Ndryshime së fundmi',
+'recentchangestext'     => 'Ndiqni ndryshime së fundmi tek kjo faqe.',
+'rcnote'                => 'Më poshtë janë <strong>$1</strong> ndryshime së fundmi gjatë <strong>$2</strong> ditëve sipas të dhënave nga $3.',
+'rcnotefrom'            => 'Më poshtë janë ndryshime së fundmi nga <b>$2</b> (treguar deri në <b>$1</b>).',
+'rclistfrom'            => 'Trego ndryshime së fundmi duke filluar nga $1',
+'rcshowhideminor'       => '$1 redaktimet e vogla',
+'rcshowhidebots'        => '$1 robotët',
+'rcshowhideliu'         => '$1 përdoruesit e regjistruar',
+'rcshowhideanons'       => '$1 përdoruesit anonim',
+'rcshowhidepatr'        => '$1 redaktime të patrulluara',
+'rcshowhidemine'        => '$1 redaktimet e mia',
+'rclinks'               => 'Trego $1 ndryshime gjatë $2 ditëve<br />$3',
+'diff'                  => 'ndrysh',
+'hist'                  => 'hist',
+'hide'                  => 'fshih',
+'show'                  => 'trego',
+'minoreditletter'       => 'v',
+'newpageletter'         => 'R',
+'boteditletter'         => 'b',
+'sectionlink'           => '→',
+'number_of_watching_users_pageview'=> '[nën mbikqyrje nga $1 përdorues]',
+'rc_categories'         => 'Kufizimi i kategorive (të ndara me "|")',
+'rc_categories_any'     => 'Të gjitha',
+'upload'                => 'Ngarkoni skeda',
+'uploadbtn'             => 'Ngarkoje',
+'reupload'              => 'Ngarkojeni përsëri',
+'reuploaddesc'          => 'Kthehu tek formulari i dhënies.',
+'uploadnologin'         => 'Nuk keni hyrë brënda',
+'uploadnologintext'     => 'Duhet të keni [[Special:Userlogin|hyrë brenda]] për të dhënë skeda.',
+'upload_directory_read_only'=> 'Skedari i ngarkimit ($1) nuk mund të shkruhet nga shërbyesi.',
+'uploaderror'           => 'Gabim dhënie',
+'uploadtext'            => '\'\'\'NDALO!\'\'\' Përpara se të jepni këtu skedë, lexoni dhe ndiqni [[Project:Rregullat e përdorimit të figurave|Rregullat e përdorimit të figurave]] të {{SITENAME}}-s. Mos jepni skeda për të cilat autori (ose ju) nuk ka dhënë të drejtë për përdorim nën licencat e përdorura nga {{SITENAME}}.
+
+Për të parë ose për të kërkuar figurat e dhëna më parë,
+shkoni tek [[Special:Imagelist|lista e figurave të dhëna]].
+Dhëniet dhe grisjet janë të regjistruara në [[Special:Log|faqen e regjistrave]].
+
+Përdorni formularin e më poshtëm për të dhënë skeda të figurave të reja për tu përdorur në ilustrimet e artikujve. Për shumicën e shfletuesve, do të shihni një buton "Browse...", i cili do të hapi dialogun standard të skedave të sistemit operativ që përdorni. 
+
+Për të vendosur një figurë në një artikull, përdorni lidhjen sipas formës
+* \'\'\'<nowiki>[[</nowiki>{{ns:Image}}<nowiki>:Skeda.jpg]]</nowiki>\'\'\'
+* \'\'\'<nowiki>[[</nowiki>{{ns:Image}}<nowiki>:Skeda.png|tekst përshkrues]]</nowiki>\'\'\'
+ose të tjerë
+* \'\'\'<nowiki>[[</nowiki>{{ns:Media}}<nowiki>:Skeda.ogg]]</nowiki>\'\'\'.
+
+Përdorni stampa tek përshkrimi për të cilësuar licencën e duhur.',
+'uploadlog'             => 'regjistër dhënjesh',
+'uploadlogpage'         => 'Regjistri i ngarkimeve',
+'uploadlogpagetext'     => 'Më poshtë është një listë e skedave më të reja që janë ngarkuar.
+Të gjithë orët janë me orën e shërbyesit (UTC).
+<ul>
+</ul>',
+'filename'              => 'Emri i skedës',
+'filedesc'              => 'Përmbledhje',
+'fileuploadsummary'     => 'Përshkrimi:',
+'filestatus'            => 'Gjendja e të drejtave të autorit',
+'filesource'            => 'Burimi',
+'copyrightpage'         => 'Project:Të drejta autori',
+'copyrightpagename'     => '{{SITENAME}} Të drejta autori',
+'uploadedfiles'         => 'Ngarkoni skeda',
+'ignorewarning'         => 'Shpërfille paralajmërimin dhe ruaje skedën.',
+'ignorewarnings'        => 'Shpërfill çdo paralajmërim',
+'minlength'             => 'Emrat e skedave duhet të kenë të paktën tre germa.',
+'illegalfilename'       => 'Skeda "$1" përmban gërma që nuk lejohen tek titujt e faqeve. Ju lutem ndërrojani emrin dhe provoni ta ngarkoni përsëri.',
+'badfilename'           => 'Emri i skedës është ndërruar në "$1".',
+'badfiletype'           => '".$1" nuk rekomandohet si tip skede.',
+'largefile'             => 'Rekomandohet që skedat të mos kalojnë $1B në madhësi. Kjo skedë është $2B.',
+'largefileserver'       => 'Skeda është më e madhe se sa serveri e lejon këtë.',
+'emptyfile'             => 'Skeda që keni dhënë është bosh ose mbi madhësinë e lejushme. Kjo gjë mund të ndodhi nëse shtypni emrin gabim, prandaj kontrolloni nëse dëshironi të jepni skedën me këtë emër.',
+'fileexists'            => 'Ekziston një skedë me atë emër, ju lutem kontrolloni $1 në qoftë se nuk jeni të sigurt nëse dëshironi ta zëvendësoni.',
+'fileexists-forbidden'  => 'Ekziston një skedë me të njëjtin emër. Ju lutemi kthehuni prapë dhe ngarkoni këtë skedë me një emër të ri. [[Image:$1|thumb|center|$1]]',
+'fileexists-shared-forbidden'=> 'Ekziston një skedë me të njëjtin emër në magazinën e përbashkët. Ju lutem kthehuni mbrapsh dhe ngarkojeni këtë skedë me një emër të ri. [[Image:$1|thumb|center|$1]]',
+'successfulupload'      => 'Dhënie e sukseshme',
+'fileuploaded'          => 'Skeda "$1" u ngarkua me sukses. Ju lutem ndiqni këtë lidhje : ($2) për të shkuar tek faqja e përshkrimit dhe për të futur
+informacion për skedën, si p.sh. ku e gjetët, kur u bë, kush e bëri, dhe çdo gjë tjetër që na duhet të dimë për të.',
+'uploadwarning'         => 'Kujdes dhënie',
+'savefile'              => 'Ruaj skedën',
+'uploadedimage'         => 'dha "[[$1]]"',
+'uploaddisabled'        => 'Ndjesë, dhëniet janë bllokuar në këtë shërbyes dhe nuk është gabimi juaj.',
+'uploaddisabledtext'    => 'Ngarkimi i skedave është ndaluar tek ky wiki.',
+'uploadscripted'        => 'Skeda përmban HTML ose kode të tjera që mund të interpretohen gabimisht nga një shfletues.',
+'uploadcorrupt'         => 'Skeda është e dëmtuar ose ka emër të gabuar. Ju lutemi kontrolloni skedën dhe ngarkoni atë përsëri.',
+'uploadvirus'           => 'Skeda përmban një virus! Detaje: $1',
+'sourcefilename'        => 'Emri i skedës',
+'destfilename'          => 'Emri mbas dhënies',
+'filewasdeleted'        => 'Një skedë më këtë emër është ngarkuar një here dhe pastaj është grisur. Duhet të shikoni $1 përpara se ta ngarkoni përsëri.',
+'license'               => 'Licensimi',
+'nolicense'             => 'Asnjë nuk është zgjedhur',
+'imagelist'             => 'Lista e figurave',
+'imagelisttext'         => 'Më poshtë është një listë e $1 figurave të renditura sipas $2.',
+'imagelistforuser'      => 'Kjo faqe tregon skedat të ngarkuara nga $1.',
+'getimagelist'          => 'duke ngarkuar të gjithë listën e figurave',
+'ilsubmit'              => 'Kërko',
+'showlast'              => 'Trego $1 figurat e fundit të renditura sipas $2.',
+'byname'                => 'emrit',
+'bydate'                => 'datës',
+'bysize'                => 'madhësisë',
+'imgdelete'             => 'gris',
+'imgdesc'               => 'për',
+'imglegend'             => 'Legjendë: (për) = trego/redakto përshkrimin e skedës.',
+'imghistory'            => 'Historia e skedës',
+'revertimg'             => 'ktheje',
+'deleteimg'             => 'grise',
+'deleteimgcompletely'   => 'grise',
+'imghistlegend'         => 'Legjendë: (tani) = kjo është skeda e tanishme, (grise) = grise
+këtë version të vjetër, (ktheje) = ktheje në këtë version të vjetër.
+<br /><i>Shtyp datën për të parë skedën e dhënë në atë ditë</i>.',
+'imagelinks'            => 'Lidhje skedash',
+'linkstoimage'          => 'Këto faqe lidhen tek kjo skedë:',
+'nolinkstoimage'        => 'Asnjë faqe nuk lidhet tek kjo skedë.',
+'sharedupload'          => 'Kjo skedë është një ngarkim i përbashkët dhe mund të përdoret nga projekte të tjera.',
+'shareduploadwiki'      => 'Ju lutem shikoni $1 për më shumë informacion.',
+'shareduploadwiki-linktext'=> 'faqja përshkruese e skedës',
+'noimage'               => 'Një skedë me këtë emër nuk ekziston akoma, ju mundeni ta $1 atë.',
+'noimage-linktext'      => 'ngarkoni',
+'uploadnewversion-linktext'=> 'Ngarkoni një version të ri të kësaj skede',
+'mimesearch'            => 'Kërkime MIME',
+'mimetype'              => 'Lloji MIME:',
+'download'              => 'shkarkim',
+'unwatchedpages'        => 'Shiko faqet e pambikqyrura',
+'listredirects'         => 'Lista e përcjellimeve',
+'unusedtemplates'       => 'Stampa të papërdorura',
+'unusedtemplatestext'   => 'Kjo faqe jep listën e të gjitha faqeve nën hapësirën Stampa të cilat nuk janë përdorur në faqe të tjera. Kujtohu të kontrollosh edhe për lidhje tek stampat përpara se t\'i grisësh si të papërdorura.',
+'unusedtemplateswlh'    => 'lidhje',
+'randomredirect'        => 'Përcjellim i rastit',
+'statistics'            => 'Statistika',
+'sitestats'             => 'Statistikat e faqeve',
+'userstats'             => 'Statistikat e përdoruesve',
+'sitestatstext'         => 'Gjënden \'\'\'$1\'\'\' faqe në totalin e regjistrit. Këto përfshijnë faqet e "diskutimit", faqe rreth {{SITENAME}}-s, faqe "cungje" të vogla, përcjellime, dhe faqe të tjera që ndoshta nuk kualifikohen si artikuj. Duke mos i përfshirë këto, gjënden \'\'\'$2\'\'\' faqe që janë artikuj të ligjshëm.
+
+Janë bërë \'\'\'$3\'\'\' shikime dhe \'\'\'$4\'\'\' redaktime faqesh që nga dita kur wiki u hap. Kjo do të thotë se janë bërë afërsisht \'\'\'$5\'\'\' redaktime për faqe, dhe \'\'\'$6\'\'\' shikime për redaktim.
+
+Gjithashtu janë ngarkuar \'\'\'$8\'\'\' skeda.
+
+Gjatësia e [http://meta.wikimedia.org/wiki/Help:Job_queue radhës së punëve] është \'\'\'$7\'\'\'.',
+'userstatstext'         => 'Gjënden \'\'\'$1\'\'\' përdorues të regjistruar. \'\'\'$2\'\'\' prej tyre (ose \'\'\'$4\'\'\'%) janë me titull administrues (shikoni [[Special:Listusers|Listën e përdoruesve]] dhe $3).',
+'disambiguations'       => 'Faqe kthjelluese',
+'disambiguationspage'   => 'Template:Kthjellim',
+'disambiguationstext'   => 'Artikujt që vijojnë lidhen tek një <i>faqe kthjelluese</i>. Ato duhet të lidhen tek tema e përshtatshme.
+
+Një faqe trajtohet si kthjelluese nëse lidhet nga $1.
+
+Lidhje nga hapësira të tjera përveç asaj kryesore <b>nuk</b> jepen këtu.',
+'doubleredirects'       => 'Përcjellime dopjo',
+'doubleredirectstext'   => '<b>Kujdes:</b> Kjo listë mund të ketë lidhje gabim. D.m.th. ka tekst dhe lidhje mbas #REDIRECT-it të parë.
+
+<br />
+Çdo rresht ka lidhje tek përcjellimi i parë dhe i dytë, gjithashtu ka edhe rreshtin e parë të tekstit të përcjellimit të dytë, duke dhënë dhe artikullin e "vërtetë", me të cilin përcjellimi i parë duhet të lidhet.',
+'brokenredirects'       => 'Përcjellime të prishura',
+'brokenredirectstext'   => 'Përcjellimet që vijojnë lidhen tek një artikull që s\'ekziston.',
+'nbytes'                => '$1 bytes',
+'ncategories'           => '$1 kategori',
+'nlinks'                => '$1 lidhje',
+'nmembers'              => '$1 anëtarë',
+'nrevisions'            => '$1 redaktime',
+'nviews'                => '$1 shikime',
+'lonelypages'           => 'Faqe të palidhura',
+'uncategorizedpages'    => 'Faqe të pakategorizuara',
+'uncategorizedcategories'=> 'Kategori të pakategorizuara',
+'uncategorizedimages'   => 'Figura të pakategorizuara',
+'unusedcategories'      => 'Kategori të papërdorura',
+'unusedimages'          => 'Figura të papërdorura',
+'popularpages'          => 'Artikuj të frekuentuar shpesh',
+'wantedcategories'      => 'Kategori më të dëshiruara',
+'wantedpages'           => 'Artikuj më të dëshiruar',
+'mostlinked'            => 'Faqe më të lidhura',
+'mostlinkedcategories'  => 'Kategori më të lidhura',
+'mostcategories'        => 'Artikuj më të kategorizuar',
+'mostimages'            => 'Figura më të lidhura',
+'mostrevisions'         => 'Artikuj më të redaktuar',
+'allpages'              => 'Të gjitha faqet',
+'prefixindex'           => 'Treguesi i parashtesave',
+'randompage'            => 'Artikull i rastit',
+'shortpages'            => 'Artikuj të shkurtër',
+'longpages'             => 'Artikuj të gjatë',
+'deadendpages'          => 'Faqe pa rrugëdalje',
+'listusers'             => 'Lista e përdoruesve',
+'specialpages'          => 'Faqet speciale',
+'spheading'             => 'Faqe speciale për të gjithë përdoruesit',
+'restrictedpheading'    => 'Faqe speciale të kufizuara',
+'recentchangeslinked'   => 'Ndryshimet fqinje',
+'rclsub'                => '(për faqet e lidhura nga "$1")',
+'newpages'              => 'Artikuj të rinj',
+'ancientpages'          => 'Artikuj më të vjetër',
+'intl'                  => 'Gjuhë-lidhje',
+'move'                  => 'Zhvendose',
+'movethispage'          => 'Zhvendose faqen',
+'unusedimagestext'      => '<p>Ju lutem, vini re se hapësira të tjera si p.sh ato që kanë të bëjnë me gjuhë të ndryshme mund të lidhin
+një figurë me një URL në mënyrë direkte, kështuqë ka mundësi që këto figura të rreshtohen këtu megjithëse janë në përdorim.</p>',
+'unusedcategoriestext'  => 'Kategoritë në vazhdim ekzistojnë edhe pse asnjë artikull ose kategori nuk i përdor ato.',
+'booksources'           => 'Burime librash',
+'categoriespagetext'    => 'Ndodhen këto kategori:',
+'data'                  => 'Të dhëna',
+'userrights'            => 'Ndrysho privilegjet e përdoruesve',
+'groups'                => 'Grupet e përdoruesve',
+'booksourcetext'        => 'Më poshtë është një listë me faqe interneti që shesin libra të rinj dhe të përdorur. Atje mund të gjeni më shumë informacione për librat që kërkoni. {{SITENAME}} nuk ka marrëdhënie biznesi me asnjërin prej këtyre firmave dhe nuk përfiton prej tyre. Për këtë arsye nuk duhet të shikohet kjo listë si reklamë.',
+'isbn'                  => 'ISBN',
+'alphaindexline'        => '$1 deri në $2',
+'version'               => 'Versioni',
+'log'                   => 'Regjistrat',
+'alllogstext'           => 'Kjo faqe tregon një pamje të përmbledhur të regjistrave të ngarkimeve, grisjeve, mbrojtjeve, bllokimeve, dhe të veprimeve administrative. Mundeni të kufizoni informactionin sipas tipit të regjistrit, emrit të përdoruesit, si dhe faqes në çështje.',
+'logempty'              => 'Nuk ka asnjë përputhje në regjistër.',
+'nextpage'              => 'Faqja më pas ($1)',
+'allpagesfrom'          => 'Trego faqet duke filluar nga:',
+'allarticles'           => 'Të gjithë artikujt',
+'allinnamespace'        => 'Të gjitha faqet (hapësira $1)',
+'allnotinnamespace'     => 'Të gjitha faqet (jo në hapësirën $1)',
+'allpagesprev'          => 'Më para',
+'allpagesnext'          => 'Më pas',
+'allpagessubmit'        => 'Shko',
+'allpagesprefix'        => 'Trego faqet me parashtesë:',
+'mailnologin'           => 'S\'ka adresë dërgimi',
+'mailnologintext'       => 'Duhet të keni [[Special:Userlogin|hyrë brenda]] dhe të keni një adresë të saktë në [[Special:Preferences|parapëlqimet]] tuaja për tu dërguar email përdoruesve të tjerë.',
+'emailuser'             => 'Email përdoruesit',
+'emailpage'             => 'Dërgo email përdoruesve',
+'emailpagetext'         => 'Në qoftë se ky përdorues ka dhënë një adresë të saktë në parapëlqimet, formulari më poshtë do t\'i dërgojë një mesazh. 
+
+Adresa e email-it që keni dhënë në parapëlqimet do të duket si pjesa "From" e adresës së mesazhit, kështuqë marrësi do të ketë mundësi tu përgjigjet.',
+'usermailererror'       => 'Objekti postal ktheu gabimin:',
+'defemailsubject'       => '{{SITENAME}} email',
+'noemailtitle'          => 'S\'ka adresë email-i',
+'noemailtext'           => 'Ky përdorues s\'ka dhënë një adresë të saktë,
+ose ka vendosur të mos pranojë mesazhe email-i nga përdorues të tjerë.',
+'emailfrom'             => 'Nga',
+'emailto'               => 'Për',
+'emailsubject'          => 'Subjekti',
+'emailmessage'          => 'Mesazh',
+'emailsend'             => 'Dërgo',
+'emailsent'             => 'Email-i u dërgua',
+'emailsenttext'         => 'Email-i është dërguar.',
+'watchlist'             => 'Lista mbikqyrëse',
+'mywatchlist'             => 'Lista mbikqyrëse',
+'nowatchlist'           => 'Nuk keni asnjë faqe në listën mbikqyrëse.',
+'watchlistcount'        => '\'\'\'Keni $1 faqe nën mbikqyrje duke përfshirë dhe faqet e diskutimit.\'\'\'',
+'clearwatchlist'        => 'Pastroni listën mbikqyrëse',
+'watchlistcleartext'    => 'Dëshironi me të vërtetë ta boshatisni listën?',
+'watchlistclearbutton'  => 'Boshatise listën mbikqyrëse',
+'watchlistcleardone'    => 'Lista mbikqyrëse është boshatisur. Janë hequr $1 faqe.',
+'watchnologin'          => 'Nuk keni hyrë brënda',
+'watchnologintext'      => 'Duhet të keni [[Special:Userlogin|hyrë brenda]] për të ndryshuar listën mbikqyrëse.',
+'addedwatch'            => 'U shtua tek lista mbikqyrëse',
+'addedwatchtext'        => 'Faqja "$1" është shtuar [[Special:Watchlist|listës mbikqyrëse]] tuaj. Ndryshimet e ardhshme të kësaj faqeje dhe faqes së diskutimit të saj do të jepen më poshtë, dhe emri i faqes do të duket i \'\'\'trashë\'\'\' në [[Special:Recentchanges|listën e ndryshimeve së fundmi]] për t\'i dalluar më kollaj.
+
+Në qoftë se dëshironi të hiqni një faqe nga lista mbikqyrëse më vonë, shtypni "çmbikqyre" në tabelën e sipërme.',
+'removedwatch'          => 'U hoq nga lista mibkqyrëse',
+'removedwatchtext'      => 'Faqja "$1" është hequr nga lista mbikqyrëse e juaj.',
+'watch'                 => 'Mbikqyre',
+'watchthispage'         => 'Mbikqyre këtë faqe',
+'unwatch'               => 'Çmbikqyre',
+'unwatchthispage'       => 'Mos e mbikqyr',
+'notanarticle'          => 'Nuk është artikull',
+'watchnochange'         => 'Asnjë nga artikujt nën mbikqyrje nuk është redaktuar gjatë kohës së dhënë.',
+'watchdetails'          => '*\'\'\'$1\'\'\' faqe nën mbikqyrje duke mos numëruar faqet e diskutimit
+*\'\'\'$2\'\'\' faqe brënda përkufizimit janë redaktuar
+<!--*$3...-->
+<center>\'\'\'[$4 Trego dhe redakto tërë listën]\'\'\'</center>',
+'wlheader-enotif'       => '* Njoftimi me email është lejuar.',
+'wlheader-showupdated'  => '* Faqet që kanë ndryshuar nga vizita juaj e fundit do të tregohen të \'\'\'trasha\'\'\'',
+'watchmethod-recent'    => 'duke parë ndryshime së fundmi për faqe nën mbikqyrje',
+'watchmethod-list'      => 'duke parë faqet nën mbikqyrje për ndryshime së fundmi',
+'removechecked'         => 'Hiq të zgjedhurat',
+'watchlistcontains'     => 'Lista mbikqyrëse e juaj ka $1 faqe.',
+'watcheditlist'         => 'Këtu jepet një listë e alfabetizuar e faqeve nën mbikqyrje. Zgjidhni kutinë e secilës faqe që dëshironi të hiqni nga lista dhe shtypni butonin \'Hiq të zgjedhurat\' në fund të faqes.',
+'removingchecked'       => 'Duke hequr artikujt e zgjedhur nga lista mbikqyrëse...',
+'couldntremove'         => 'S\'mundi të heq arikullin \'$1\'...',
+'iteminvalidname'       => 'Problem me artikullin \'$1\', titull jo i saktë...',
+'wlnote'                => 'Më poshtë janë $1 ndryshimet e <b>$2</b> orëve së fundmi.',
+'wlshowlast'            => 'Trego $1 orët $2 ditët $3',
+'wlsaved'               => 'Kjo është një kopje e ruajtur e listës mbikqyrëse tuaj.',
+'wlhideshowown'         => '$1 redaktimet e mia.',
+'wlhideshowbots'        => '$1 redaktime robotësh.',
+'wldone'                => 'Veprim i mbaruar',
+'enotif_mailer'         => 'Postieri njoftues i {{SITENAME}}',
+'enotif_reset'          => 'Shënoi të gjitha faqet të vizituara',
+'enotif_newpagetext'    => 'Kjo është një faqe e re.',
+'changed'               => 'ndryshuar',
+'created'               => 'u krijua',
+'enotif_subject'        => '{{SITENAME}} faqja $PAGETITLE u $CHANGEDORCREATED prej $PAGEEDITOR',
+'enotif_lastvisited'    => 'Shikoni $1 për të gjitha ndryshimet që prej vizitës tuaj të fundit.',
+'enotif_body'           => 'I/E dashur $WATCHINGUSERNAME,
+
+faqja $PAGETITLE tek {{SITENAME}} është $CHANGEDORCREATED më $PAGEEDITDATE nga $PAGEEDITOR, shikoni $PAGETITLE_URL për versionin e tanishëm.
+
+$NEWPAGE
+
+Përmbledhja e redaktorit: $PAGESUMMARY $PAGEMINOREDIT
+
+Mund të lidheni me redaktorin nëpërmjet:
+email: $PAGEEDITOR_EMAIL
+wiki: $PAGEEDITOR_WIKI
+
+Nuk do të ketë njoftime të tjera në rast se ka ndryshime vijuese në qoftë se nuk vizitoni faqen. Gjithashtu mund të ktheni gjendjen e njoftimeve për të gjitha faqet nën mbikqyrje.
+
+             Miku juaj njoftues nga {{SITENAME}}
+
+--
+Për të ndryshuar parapëlqimet e mbikqyrjes shikoni {{fullurl:Special:Watchlist/edit}}
+
+Për të na dhënë përshtypjet tuaja ose për ndihmë të mëtejshme:
+{{fullurl:Help:Contents}}',
+'deletepage'            => 'Grise faqen',
+'confirm'               => 'Konfirmoni',
+'excontent'             => 'përmbajtja ishte: \'$1\'',
+'excontentauthor'       => 'përmbajtja ishte: \'$1\' (dhe i vetmi redaktor ishte \'$2\')',
+'exbeforeblank'         => 'përmbajtja përpara boshatisjes ishte: \'$1\'',
+'exblank'               => 'faqja është bosh',
+'confirmdelete'         => 'Konfirmoni grisjen',
+'deletesub'             => '(Duke grisur "$1")',
+'historywarning'        => 'Kujdes: Faqja që jeni bërë gati për të grisur ka histori:',
+'confirmdeletetext'     => 'Jeni duke grisur \'\'\'përfundimisht\'\'\' një faqe ose një skedë me tër historinë e saj nga regjistri. Ju lutem konfirmoni që keni ndër mënd ta bëni këtë gjë, që i kuptoni se cilat janë pasojat, dhe që po veproni në përputhje me [[Project:Rregullat]].',
+'actioncomplete'        => 'Veprim i mbaruar',
+'deletedtext'           => '"$1" është grisur nga regjistri. Shikoni $2 për një pasqyrë të grisjeve së fundmi.',
+'deletedarticle'        => 'grisi "$1"',
+'dellogpage'            => 'Regjistri i grisjeve',
+'dellogpagetext'        => 'Më poshtë është një listë e grisjeve më të fundit.
+Të gjitha kohët janë sipas orës së shërbyesit (UTC).
+<ul>
+</ul>',
+'deletionlog'           => 'regjistrin e grisjeve',
+'reverted'              => 'Kthehu tek një version i vjetër',
+'deletecomment'         => 'Arsyeja',
+'imagereverted'         => 'Kthimi tek një version i sukseshëm.',
+'rollback'              => 'Riktheji mbrapsh redaktimet',
+'rollback_short'        => 'Riktheje',
+'rollbacklink'          => 'riktheje',
+'rollbackfailed'        => 'Rikthimi dështoi',
+'cantrollback'          => 'Nuk munda ta kthejë redaktimin; redaktori i fundit është i vetmi autor i këtij artikulli.',
+'alreadyrolled'         => 'Nuk munda ta rikthej redaktimin e fundit e [[:$1]] nga [[User:$2|$2]] ([[User talk:$2|diskutim]]); dikush tjetër e ka redaktuar ose rikthyer këtë faqe.
+
+Redaktimi i fundit është bërë nga [[User:$3|$3]] ([[User talk:$3|diskutim]]).',
+'editcomment'           => 'Komenti i redaktimit ishte: "<i>$1</i>".',
+'revertpage'            => 'Ndryshimet e [[Special:Contributions/$2|$2]] ([[User talk:$2|diskutimet]]) u kthyen mbrapsh. Faqja tani ndodhet në versionin e fundit nga [[User:$1|$1]].',
+'sessionfailure'        => 'Më duket se ka një problem me seancën tuaj të hyrjes. Veprimi juaj nuk është kryer për tu mbrojtur nga ndonjë veprim dashakeq kundrejt shfletimit tuaj. Ju lutem kthehuni mbrapsh, rifreskoni faqen prej nga erdhët dhe provojeni përsëri veprimin.',
+'protectlogpage'        => 'Regjistri i mbrojtjeve',
+'protectlogtext'        => 'Më poshtë është një listë e "mbrojtjeve/lirimeve" të faqeve. Shikoni [[Project:Faqe e mbrojtur|faqe e mbrojtur]] për më shumë informacion.',
+'protectedarticle'      => 'mbrojti [[$1]]',
+'unprotectedarticle'    => 'lirojë [[$1]]',
+'protectsub'            => '(Duke ndryshuar mbrojtjen e "$1")',
+'confirmprotecttext'    => 'Dëshironi të mbroni këtë faqe?',
+'confirmprotect'        => 'Konfirmoni',
+'protectmoveonly'       => 'Mbroje vetëm nga zhvendosjet',
+'protectcomment'        => 'Arsyeja',
+'unprotectsub'          => '(Duke liruar "$1")',
+'confirmunprotecttext'  => 'Dëshironi të lironi këtë faqe?',
+'confirmunprotect'      => 'Konfirmoni lirimin',
+'unprotectcomment'      => 'Arsyeja',
+'protect-unchain'       => 'Ndrysho lejen e zhvendosjeve',
+'protect-text'          => 'Këtu mund të shikoni dhe ndryshoni nivelin e mbrojtjes për faqen [[$1]]. Ju lutem ndiqni rregullat e dhëna tek [[Project:Faqe e mbrojtur|faqet e mbrojtura]].',
+'protect-viewtext'      => 'Llogaria juaj nuk lejohet të ndryshojë nivelin e mbrojtjes. Niveli i mbrojtjes për faqen [[$1]] është:',
+'protect-default'       => '(parazgjedhje)',
+'protect-level-autoconfirmed'=> 'Blloko përdoruesit pa llogari',
+'protect-level-sysop'   => 'Vetëm administruesit',
+'restriction-edit'      => 'Redaktoni',
+'restriction-move'      => 'Zhvendoseni',
+'undelete'              => 'Restauroni faqet e grisura',
+'undeletepage'          => 'Shikoni ose restauroni faqet e grisura',
+'viewdeletedpage'       => 'Shikoni faqet e grisura',
+'undeletepagetext'      => 'Më poshtë janë faqet që janë grisur por që gjënden akoma në arkiv dhe
+mund të restaurohen. Arkivi boshatiset periodikisht.',
+'undeleteextrahelp'     => 'Lini bosh të gjitha kutitë e zgjedhjes dhe shqypni \'\'\'\'\'Restauro!\'\'\'\'\' për të restauruar të gjitha versionet e faqes. Për të bërë një restaurim të pjesshëm zgjidhni kutitë e versioneve që dëshironi të restauroni dhe shtypni \'\'\'\'\'Restauro!\'\'\'\'\'. Mund të boshatisni të gjitha zgjedhjet dhe arsyen duke shtypur \'\'\'\'\'Boshatis\'\'\'\'\'.',
+'undeletearticle'       => 'Restauro artikullin e grisur',
+'undeleterevisions'     => '$1 versione u futën në arkiv',
+'undeletehistory'       => 'N.q.s. restauroni një faqe, të gjitha versionet do të restaurohen në histori. N.q.s. një faqe e re me të njëjtin titull është krijuar që nga grisja, versionet e restauruara do të duken më përpara në histori, dhe versioni i faqes së fundit nuk do të shkëmbehet automatikisht.',
+'undeletehistorynoadmin'=> 'Kjo faqe është grisur. Arsyeja për grisjen është dhënë tek përmbledhja më poshtë bashkë me hollësitë e përdoruesve që e kanë redaktuar.',
+'undeleterevision'      => 'U gris versioni i $1',
+'undeletebtn'           => 'Restauro!',
+'undeletereset'         => 'Boshatis',
+'undeletecomment'       => 'Arsyeja:',
+'undeletedarticle'      => 'u restaurua "$1"',
+'undeletedrevisions'    => '$1 versione u restauruan',
+'undeletedrevisions-files'=> '$1 versione dhe $2 skeda janë restauruar',
+'undeletedfiles'        => '$1 skeda u restauruan',
+'cannotundelete'        => 'Restaurimi dështoi; dikush tjetër mund ta ketë restauruar faqen përpara jush.',
+'undeletedpage'         => '<big>\'\'\'$1 është restauruar\'\'\'</big>
+
+Shikoni [[Special:Log/delete|regjistrin e grisjeve]] për grisjet dhe restaurimet së fundmi.',
+'namespace'             => 'Hapësira:',
+'invert'                => 'Kundër zgjedhjes',
+'contributions'         => 'Kontributet',
+'mycontris'             => 'Redaktimet e mia',
+'contribsub2'            => 'Për $1 ($2)',
+'nocontribs'            => 'Nuk ka asnjë ndryshim që përputhet me këto kritere.',
+'ucnote'                => 'Më poshtë janë redaktimet më të fundit të <b>$1</b> gjatë <b>$2</b> ditëve.',
+'uclinks'               => 'Shikoni $1 redaktimet e fundit; shikoni $2 ditët e fundit.',
+'uctop'                 => ' (sipër)',
+'newbies'               => 'të njomtët',
+'sp-newimages-showfrom' => 'duke filluar nga $1',
+'sp-contributions-newest'=> 'Më të rejat',
+'sp-contributions-oldest'=> 'Më të vjetrat',
+'sp-contributions-newer'=> '$1 më para',
+'sp-contributions-older'=> '$1 më pas',
+'sp-contributions-newbies-sub'=> 'Për newbies',
+'whatlinkshere'         => 'Lidhjet këtu',
+'notargettitle'         => 'Asnjë artikull',
+'notargettext'          => 'Nuk keni dhënë asnjë artikull ose përdorues mbi të cilin të përdor këtë funksion.',
+'linklistsub'           => '(Listë lidhjesh)',
+'linkshere'             => 'Faqet e mëposhtëme lidhen këtu:',
+'nolinkshere'           => 'Asnjë faqe nuk lidhet këtu.',
+'isredirect'            => 'faqe përcjellëse',
+'istemplate'            => 'përfshirë',
+'blockip'               => 'Blloko përdorues',
+'blockiptext'           => 'Përdorni formularin e mëposhtëm për të hequr lejen e shkrimit për një përdorues ose IP-ë specifike.
+Kjo duhet bërë vetëm në raste vandalizmi, dhe në përputhje me [[Project:Rregullat|rregullat e {{SITENAME}}-s]].
+Plotësoni arsyen specifike më poshtë (p.sh., tregoni faqet specifike që u vandalizuan).',
+'ipaddress'             => 'IP Adresë/përdorues',
+'ipadressorusername'    => 'Adresë IP ose emër përdoruesi',
+'ipbexpiry'             => 'Afati',
+'ipbreason'             => 'Arsyeja',
+'ipbsubmit'             => 'Blloko këtë përdorues',
+'ipbother'              => 'Kohë tjetër',
+'ipboptions'            => '1 Orë:1 hour,2 Orë:2 hours,6 Orë:6 hours,1 Ditë:1 day,3 Ditë:3 days,1 Javë:1 week,2 Javë:2 weeks,1 Muaj:1 month,3 Muaj:3 months,1 Vjet:1 year,Pa kufi:indefinite',
+'ipbotheroption'        => 'tjetër',
+'badipaddress'          => 'Nuk ka asnjë përdorues me atë emër',
+'blockipsuccesssub'     => 'Bllokimi u bë me sukses',
+'blockipsuccesstext'    => 'Përdoruesi [[User:$1|$1]] ([[User talk:$1|diskutimet]] · [[Special:Contributions/$1|kontributet]]) u bllokua.
+<br />Veprimi u regjistrua te [[Special:Log/block|Regjistri i bllokimeve]]. Shiko këtu [{{fullurl:Special:Ipblocklist|action=unblock&ip=$1}} për ta çbllokuar] përdoruesin.',
+'unblockip'             => 'Çblloko përdoruesin',
+'unblockiptext'         => 'Përdor formularin e më poshtëm për t\'i ridhënë leje shkrimi
+një përdoruesi ose IP adreseje të bllokuar.',
+'ipusubmit'             => 'Çblloko këtë adresë',
+'unblocked'             => '[[Përdoruesi:$1|$1]] është çbllokuar',
+'ipblocklist'           => 'Lista e përdoruesve dhe e IP adresave të bllokuara',
+'blocklistline'         => '$1, $2 bllokoi $3 ($4)',
+'infiniteblock'         => 'pakufi',
+'expiringblock'         => 'kalon $1',
+'ipblocklistempty'      => 'Lista e bllokimeve është bosh.',
+'blocklink'             => 'blloko',
+'unblocklink'           => 'çblloko',
+'contribslink'          => 'kontribute',
+'autoblocker'           => 'I bllokuar automatikisht sepse përdor të njëjtën IP adresë si "$1". Arsye "$2".',
+'blocklogpage'          => 'Regjistri i bllokimeve',
+'blocklogentry'         => 'bllokoi "[[$1]]" për një kohëzgjatje prej $2',
+'blocklogtext'          => 'Ky është një regjistër bllokimesh dhe çbllokimesh të përdoruesve. IP-të e bllokuara automatikisht nuk janë të dhëna. Shikoni dhe [[Special:Ipblocklist|listën e IP-ve të bllokuara]] për një listë të bllokimeve të tanishme.',
+'unblocklogentry'       => 'çbllokoi "$1"',
+'range_block_disabled'  => 'Mundësia e administruesve për të bllokuar me shtrirje është çaktivizuar.',
+'ipb_expiry_invalid'    => 'Afati i kohës është gabim.',
+'ip_range_invalid'      => 'Shtrirje IP gabim.',
+'proxyblocker'          => 'Bllokuesi i ndërmjetëseve',
+'proxyblockreason'      => 'IP adresa juaj është bllokuar sepse është një ndërmjetëse e hapur. Ju lutem lidhuni me kompaninë e shërbimeve të Internetit që përdorni dhe i informoni për këtë problem sigurije.',
+'proxyblocksuccess'     => 'Mbaruar.',
+'sorbs'                 => 'SORBS DNSBL',
+'sorbsreason'           => 'Adresa IP e juaj është radhitur si ndërmjetëse e hapur tek lista [http://www.sorbs.net SORBS] DNSBL.',
+'sorbs_create_account_reason'=> 'Adresa IP e juaj është radhitur si ndërmjetëse e hapur tek lista [http://www.sorbs.net SORBS] DNSBL. Nuk ju lejohet të hapni një llogari.',
+'lockdb'                => 'Blloko regjistrin',
+'unlockdb'              => 'Çblloko regjistrin',
+'lockdbtext'            => 'Bllokimi i regjistrit do të ndërpresi mundësinë e përdoruesve për të redaktuar faqet, për të ndryshuar parapëlqimet, për të ndryshuar listat mbikqyrëse të tyre, dhe për gjëra të tjera për të cilat nevojiten shkrime në regjistër.
+Ju lutem konfirmoni që dëshironi me të vërtetë të kryeni këtë veprim, dhe se do të çbllokoni regjistrin kur të mbaroni së kryeri mirëmbajtjen.',
+'unlockdbtext'          => 'Çbllokimi i regjistrit do të lejojë mundësinë e të gjithë përdoruesve për të redaktuar faqe, për të ndryshuar parapëlqimet e tyre, për të ndryshuar listat mbikqyrëse të tyre, dhe gjëra të tjera për të cilat nevojiten shkrime në regjistër. Ju lutem konfirmoni që dëshironi me të vërtetë të kryeni këtë veprim.',
+'lockconfirm'           => 'Po, dëshiroj me të vërtetë të bllokoj regjistrin.',
+'unlockconfirm'         => 'Po, dëshiroj me të vërtetë të çbllokoj regjistrin',
+'lockbtn'               => 'Blloko regjistrin',
+'unlockbtn'             => 'Çblloko regjistrin',
+'locknoconfirm'         => 'Nuk vendose kryqin tek kutia konfirmuese.',
+'lockdbsuccesssub'      => 'Regjistri u bllokua me sukses',
+'unlockdbsuccesssub'    => 'Regjistri u çbllokua me sukses',
+'lockdbsuccesstext'     => 'Regjistri i {{SITENAME}} është bllokuar.
+<br />Kujtohu ta çbllokosh mbasi të kesh mbaruar mirëmbajtjen.',
+'unlockdbsuccesstext'   => 'Regjistri i {{SITENAME}} është çbllokuar.',
+'rightslog'             => 'Regjistri i privilegjeve',
+'rightslogtext'         => 'Ky është një regjistër për ndryshimet e titujve të përdoruesve.',
+'rightslogentry'        => 'ndryshoi privilegjet e $1 prej "$2" në "$3"',
+'rightsnone'            => '(asnjë)',
+'movepage'              => 'Zhvendose faqen',
+'movepagetext'          => 'Duke përdorur formularin e mëposhtëm do të ndërroni titullin e një faqeje, duke zhvendosur gjithë historinë përkatëse tek titulli i ri. Titulli i vjetër do të bëhet një faqe përcjellëse tek titulli i ri. Lidhjet tek faqja e vjetër nuk do të ndryshohen; duhet të kontrolloni [[Special:SpecialPages|mirëmbajtjen]] për përcjellime të dyfishta ose të prishura.
+Keni përgjegjësinë për tu siguruar që lidhjet të vazhdojnë të jenë të sakta.
+
+Vini re se kjo faqe \'\'\'nuk\'\'\' do të zhvendoset n.q.s. ekziston një faqe me titullin e ri, përveçse kur ajo të jetë bosh ose një përcjellim dhe të mos ketë një histori të vjetër. Kjo do të thotë se mund ta zhvendosni një faqe prapë tek emri
+i vjetër n.q.s. keni bërë një gabim, dhe s\'mund ta prishësh një faqe që ekziston.
+
+<b>KUJDES!</b>
+Ky mund të jetë një ndryshim i madh dhe gjëra të papritura mund të ndodhin për një faqe të shumë-frekuentuar; ju lutem, kini kujdes dhe mendohuni mirë para se të përdorni këtë funksion.',
+'movepagetalktext'      => 'Faqja a bashkangjitur e diskutimit, n.q.s. ekziston, do të zhvendoset automatikisht \'\'\'përveçse\'\'\' kur:
+*Zhvendosni një faqe midis hapësirave të ndryshme,
+*Një faqe diskutimi jo-boshe ekziston nën titullin e ri, ose
+*Nuk zgjidhni kutinë më poshtë.
+
+Në ato raste, duhet ta zhvendosni ose përpuqni faqen vetë n.q.s. dëshironi.',
+'movearticle'           => 'Zhvendose faqen',
+'movenologin'           => 'Nuk keni hyrë brenda',
+'movenologintext'       => 'Duhet të keni hapur një llogari dhe të keni [[Special:Userlogin|hyrë brenda]] për të zhvendosur një faqe.',
+'newtitle'              => 'Tek titulli i ri',
+'movepagebtn'           => 'Zhvendose faqen',
+'pagemovedsub'          => 'Zhvendosja doli me sukses',
+'pagemovedtext'         => 'Faqja "[[$1]]" u zhvendos tek "[[$2]]".',
+'articleexists'         => 'Një faqe me atë titull ekziston, ose titulli që zgjodhët nuk është i saktë. Ju lutem zgjidhni një tjetër.',
+'talkexists'            => 'Faqja për vete u zhvendos, ndërsa faqja e diskutimit nuk u zhvendos sepse një e tillë ekziston tek titulli i ri. Ju lutem, përpuqini vetë.',
+'movedto'               => 'zhvendosur tek',
+'movetalk'              => 'Zhvendos edhe faqen e diskutimeve, në qoftë se është e mundur.',
+'talkpagemoved'         => 'Faqja e diskutimeve korrespondente u zhvendos gjithashtu.',
+'talkpagenotmoved'      => 'Faqja e diskutimeve korrespondente <strong>nuk</strong> u zhvendos.',
+'1movedto2'             => '[[$1]] u zhvendos tek [[$2]]',
+'1movedto2_redir'       => '[[$1]] u zhvendos tek [[$2]] dhe u krijua një faqe përcjellimi',
+'movelogpage'           => 'Regjistri i zhvendosjeve',
+'movelogpagetext'       => 'Më poshtë është një listë e faqeve të zhvendosura',
+'movereason'            => 'Arsyeja',
+'revertmove'            => 'ktheje',
+'delete_and_move'       => 'Grise dhe zhvendose',
+'delete_and_move_text'  => '==Nevojitet grisje==
+
+Faqja "[[$1]]" ekziston, dëshironi ta grisni për të mundësuar zhvendosjen?',
+'delete_and_move_confirm'=> 'Po, grise faqen',
+'delete_and_move_reason'=> 'U gris për të liruar vendin për përcjellim',
+'selfmove'              => 'Nuk munda ta zhvendos faqen sepse titulli i ri është i njëjtë me të vjetrin.',
+'immobile_namespace'    => 'Titulli i dëshiruar i faqes është i veçantë; Faqja nuk mund të zhvendoset në hapësira me emër tjetër.',
+'export'                => 'Eksportoni faqe',
+'exporttext'            => 'Mund të eksportoni tekstin dhe historinë e redaktimit e një faqeje ose disa faqesh të mbështjesha në XML; kjo mund të importohet në një wiki tjetër që përdor softuerin MediaWiki (tani për tani, ky opsion nuk është përfshirë tek {{SITENAME}}).
+
+Për të eksportuar faqe, thjesht shtypni një emër për çdo rresht, ose krijoni lidhje të tipit [[Special:Export/{{msg:MediaWiki:Mainpage}}]] si [[{{msg:MediaWiki:Mainpage}}]].',
+'exportcuronly'         => 'Përfshi vetëm versionin e fundit, jo të gjithë historinë',
+'exportnohistory'       => '\'\'\'Shënim:\'\'\' Eksportimi i historisë së faqes për shkaqe të rendimentit nuk është e mundshme.',
+'allmessages'           => 'Mesazhet e sistemit',
+'allmessagesname'       => 'Emri',
+'allmessagesdefault'    => 'Teksti i parazgjedhur',
+'allmessagescurrent'    => 'Teksti i tanishëshm',
+'allmessagestext'       => 'Kjo është një listë e të gjitha faqeve në hapësirën MediaWiki:',
+'allmessagesnotsupportedUI'=> 'Ndërfaqja gjuhësore e juaj, <b>$1</b>, nuk mbulohet nga special:Allmessages në këto faqe.',
+'allmessagesnotsupportedDB'=> 'special:Allmessages not supported because wgUseDatabaseMessages is off.',
+'allmessagesfilter'     => 'Veço me shprehje të rregullta:',
+'allmessagesmodified'   => 'Trego vetëm të ndryshuarat',
+'thumbnail-more'        => 'Zmadho',
+'missingimage'          => '<b>Mungon figura</b><br /><i>$1</i>',
+'filemissing'           => 'Mungon skeda',
+'thumbnail_error'       => 'Gabim gjatë krijimit të figurës përmbledhëse: $1',
+'import'                => 'Importo faqe',
+'importinterwiki'       => 'Import ndër-wiki',
+'importtext'            => 'Ju lutem eksportoni këtë skedë nga burimi wiki duke përdorur mjetin Special:Export, ruajeni në diskun tuaj dhe ngarkojeni këtu.',
+'importfailed'          => 'Importimi dështoi: $1',
+'importnotext'          => 'Bosh ose pa tekst',
+'importsuccess'         => 'Importim i sukseshëm!',
+'importhistoryconflict' => 'Ekzistojnë versione historiku në konflikt (kjo faqe mund të jetë importuar më parë)',
+'importnosources'       => 'Nuk ka asnjë burim importi të përcaktuar dhe ngarkimet historike të drejtpërdrejta janë ndaluar.',
+'importnofile'          => 'Nuk u ngarkua asnjë skedë importi.',
+'importuploaderror'     => 'Ngarkimi i skedës së importit dështoi. Ndoshta skeda kishte madhësi më të madhe se lejohet.',
+'accesskey-search'      => 'f',
+'accesskey-minoredit'   => 'i',
+'accesskey-save'        => 's',
+'accesskey-preview'     => 'p',
+'accesskey-diff'        => 'v',
+'accesskey-compareselectedversions'=> 'v',
+'accesskey-watch'       => 'w',
+'tooltip-search'        => 'Kërko {{SITENAME}}',
+'tooltip-minoredit'     => 'Shënoje këtë redaktim të vogël',
+'tooltip-save'          => 'Kryej ndryshimet',
+'tooltip-preview'       => 'Shiko parapamjen e ndryshimeve, përdoreni këtë para se të kryeni ndryshimet!',
+'tooltip-diff'          => 'Show which changes you made to the text.',
+'tooltip-compareselectedversions'=> 'Shikoni krahasimin midis dy versioneve të zgjedhura të kësaj faqeje.',
+'tooltip-watch'         => 'Mbikqyre këtë faqe',
+'monobook.css'          => '/* redaktoni këtë faqe për të përshtatur pamjen Monobook për tëra faqet tuaja */',
+'nodublincore'          => 'Dublin Core RDF metadata nuk është i mundshëm për këtë server.',
+'nocreativecommons'     => 'Creative Commons RDF metadata nuk është i mundshëm për këtë server.',
+'notacceptable'         => 'Wiki server nuk mundet ti përgatit të dhënat për klintin tuaj.',
+'anonymous'             => 'Përdorues anonim të {{SITENAME}}',
+'siteuser'              => 'Përdoruesi $1 i {{SITENAME}}',
+'lastmodifiedatby'        => 'Kjo faqe është redaktuar së fundit më $2, $1 nga $3.',
+'and'                   => 'dhe',
+'othercontribs'         => 'Bazuar mbi punën e $1',
+'others'                => 'të tjerë',
+'siteusers'             => 'Përdoruesit $1 e {{SITENAME}}',
+'creditspage'           => 'Statistika e faqes',
+'nocredits'             => 'Për këtë faqe nuk ka informacione.',
+'spamprotectiontitle'   => 'Mbrojtje ndaj teksteve të padëshiruara',
+'spamprotectiontext'    => 'Faqja që dëshironit të ruani është bllokuar nga filtri i teksteve të padëshiruara. Ka mundësi që kjo të ketë ndodhur për shkak të ndonjë lidhjeje të jashtme.',
+'spamprotectionmatch'   => 'Teksti në vijim është cilësuar i padëshiruar nga softueri: $1',
+'subcategorycount'      => 'Gjënden $1 nën-kategori në këtë kategori.',
+'categoryarticlecount'  => 'Ndodhen $1 artikuj nën këtë kategori.',
+'listingcontinuesabbrev'=> ' vazh.',
+'spambot_username'      => 'MediaWiki spam-pastrues',
+'spam_reverting'        => 'U kthye tek versioni i fundit që s\'ka lidhje tek $1',
+'spam_blanking'         => 'U boshatis sepse të gjitha versionet kanë lidhje tek $1',
+'infosubtitle'          => 'Informacion për faqen',
+'numedits'              => 'Numri i versioneve të artikullit: $1',
+'numtalkedits'          => 'Numrii versioneve të diskutimit të artikullit: $1',
+'numwatchers'           => 'Numri i mbikqyrësve: $1',
+'numauthors'            => 'Numri i autorëve të artikullit: $1',
+'numtalkauthors'        => 'Numri i diskutuesve për artikullin: $1',
+'mw_math_png'           => 'Gjithmonë PNG',
+'mw_math_simple'        => 'HTML në qoftë se është e thjeshtë ose ndryshe PNG',
+'mw_math_html'          => 'HTML në qoftë se është e mundur ose ndryshe PNG',
+'mw_math_source'        => 'Lëre si TeX (për shfletuesit tekst)',
+'mw_math_modern'        => 'E rekomanduar për shfletuesit modern',
+'mw_math_mathml'        => 'MathML',
+'markaspatrolleddiff'   => 'Shënoje si të patrulluar',
+'markaspatrolledtext'   => 'Shënoje këtë artikull të patrulluar',
+'markedaspatrolled'     => 'Shënoje të patrulluar',
+'markedaspatrolledtext' => 'Versioni i zgjedhur është shënuar i patrulluar.',
+'rcpatroldisabled'      => 'Kontrollimi i ndryshimeve së fundmi është bllokuar',
+'rcpatroldisabledtext'  => 'Kontrollimi i ndryshimeve së fundmi nuk është i mundshëm për momentin.',
+'markedaspatrollederror'=> 'Nuk munda ta shënoj të patrulluar',
+'markedaspatrollederrortext'=> 'Duhet të përcaktoni versionin për tu shënuar i patrulluar.',
+'monobook.js' => '/* Deprecated; use [[MediaWiki:common.js]] */',
+ 
+'accesskey-pt-userpage' => '.',
+'tooltip-pt-userpage' => 'Faqja juaj e përdoruesit',
+'accesskey-pt-anonuserpage' => '.',
+'tooltip-pt-anonuserpage' => 'Faqja e përdoruesve anonim nga kjo adresë IP',
+'accesskey-pt-mytalk' => 'n',
+'tooltip-pt-mytalk' => 'Faqja juaj e diskutimeve',
+'accesskey-pt-anontalk' => 'n',
+'tooltip-pt-anontalk' => 'Faqja e diskutimeve të përdoruesve anonim për këtë adresë IP',
+'accesskey-pt-preferences' => '',
+'tooltip-pt-preferences' => 'Parapëlqimet tuaja',
+'accesskey-pt-watchlist' => 'l',
+'tooltip-pt-watchlist' => 'Lista e faqeve nën mbikqyrjen tuaj.',
+'accesskey-pt-mycontris' => 'y',
+'tooltip-pt-mycontris' => 'Lista e kontributeve tuaja',
+'accesskey-pt-login' => 'o',
+'tooltip-pt-login' => 'Të hysh brenda nuk është e detyrueshme, por ka shumë përparësi.',
+'accesskey-pt-anonlogin' => 'o',
+'tooltip-pt-anonlogin' => 'Të hysh brenda nuk është e detyrueshme, por ka shumë përparësi.',
+'accesskey-pt-logout' => '',
+'tooltip-pt-logout' => 'Dalje',
+'accesskey-ca-talk' => 't',
+'tooltip-ca-talk' => 'Diskuto për përmbajtjen e faqes',
+'accesskey-ca-edit' => 'e',
+'tooltip-ca-edit' => 'Ju mund ta redaktoni këtë faqe. Përdorni butonin >>Trego parapamjen<< para se t\'i kryeni ndryshimet.',
+'accesskey-ca-addsection' => '+',
+'tooltip-ca-addsection' => 'Fillo një temë të re diskutimi.',
+'accesskey-ca-viewsource' => 'e',
+'tooltip-ca-viewsource' => 'Kjo faqe është e mbrojtur. Ju mundeni vetëm ta shikoni burimin e tekstit.',
+'accesskey-ca-history' => 'h',
+'tooltip-ca-history' => 'Versione të mëparshme të artikullit.',
+'accesskey-ca-protect' => '=',
+'tooltip-ca-protect' => 'Mbroje këtë faqe',
+'accesskey-ca-delete' => 'd',
+'tooltip-ca-delete' => 'Grise këtë faqe',
+'accesskey-ca-undelete' => 'd',
+'tooltip-ca-undelete' => 'Faqja u restaurua',
+'accesskey-ca-move' => 'm',
+'tooltip-ca-move' => 'Me anë të zhvendosjes mund ta ndryshoni titullin e artikullit',
+'accesskey-ca-nomove' => '',
+'tooltip-ca-nomove' => 'Ti nuk ke të drejtë ta zhvendosish këtë faqe',
+'accesskey-ca-watch' => 'w',
+'tooltip-ca-watch' => 'Shtoje faqen në lisën e faqeve nën mbikqyrje',
+'accesskey-ca-unwatch' => 'w',
+'tooltip-ca-unwatch' => 'Hiqe faqen nga lista e faqeve nën mbikqyrje.',
+'accesskey-search' => 'f',
+'tooltip-search' => 'Kërko në projekt',
+'accesskey-p-logo' => '',
+'tooltip-p-logo' => 'Figura e Faqes Kryesore',
+'accesskey-n-mainpage' => 'z',
+'tooltip-n-mainpage' => 'Vizitoni Faqen kryesore',
+'accesskey-n-portal' => '',
+'tooltip-n-portal' => 'Mbi projektin, çka mund të bëni për të dhe ku gjenden faqet.',
+'accesskey-n-currentevents' => '',
+'tooltip-n-currentevents' => 'Informacion rreth ngjarjeve aktuale.',
+'accesskey-n-recentchanges' => 'r',
+'tooltip-n-recentchanges' => 'Lista e ndryshimeve së fundmi në projekt',
+'accesskey-n-randompage' => 'x',
+'tooltip-n-randompage' => 'Shikoni një artikull të rastit.',
+'accesskey-n-help' => '',
+'tooltip-n-help' => 'Vendi ku mund të gjeni ndihmë.',
+'accesskey-n-sitesupport' => '',
+'tooltip-n-sitesupport' => 'Përkrahni projektin',
+'accesskey-t-whatlinkshere' => 'j',
+'tooltip-t-whatlinkshere' => 'Lista e faqeve që lidhen tek kjo faqe',
+'accesskey-t-recentchangeslinked' => 'k',
+'tooltip-t-recentchangeslinked' => 'Lista e ndryshimeve të faqeve që lidhen tek kjo faqe',
+'accesskey-feed-rss' => '',
+'tooltip-feed-rss' => 'Burimi ushqyes "RSS" për këtë faqe ',
+'accesskey-feed-atom' => '',
+'tooltip-feed-atom' => 'Burimi ushqyes "Atom" për këtë faqe',
+'accesskey-t-contributions' => '',
+'tooltip-t-contributions' => 'Shiko listën e kontributeve për përdoruesin në fjalë',
+'accesskey-t-emailuser' => '',
+'tooltip-t-emailuser' => 'Dërgoni një email përdoruesit',
+'accesskey-t-upload' => 'u',
+'tooltip-t-upload' => 'Ngarkoni figura ose skeda të tjera',
+'accesskey-t-specialpages' => 'q',
+'tooltip-t-specialpages' => 'Lista e të gjitha faqeve speciale.',
+'accesskey-ca-nstab-main' => 'c',
+'tooltip-ca-nstab-main' => 'Shikoni përmbajtjen e atikullit.',
+'accesskey-ca-nstab-user' => 'c',
+'tooltip-ca-nstab-user' => 'Shikoni faqen e përdoruesit',
+'accesskey-ca-nstab-media' => 'c',
+'tooltip-ca-nstab-media' => 'Shikoni faqen e skedës',
+'accesskey-ca-nstab-special' => '',
+'tooltip-ca-nstab-special' => 'Kjo është një faqe speciale. Ju nuk mundeni ta redaktoni këtë faqe',
+'accesskey-ca-nstab-project' => 'c',
+'tooltip-ca-nstab-project' => 'Shikoni faqen e projektit',
+'accesskey-ca-nstab-image' => 'c',
+'tooltip-ca-nstab-image' => 'Shikoni faqen e figurës',
+'accesskey-ca-nstab-mediawiki' => 'c',
+'tooltip-ca-nstab-mediawiki' => 'Shikoni mesazhet e sistemit',
+'accesskey-ca-nstab-template' => 'c',
+'tooltip-ca-nstab-template' => 'Shikoni stampën',
+'accesskey-ca-nstab-help' => 'c',
+'tooltip-ca-nstab-help' => 'Shikoni faqet ndihmëse',
+'accesskey-ca-nstab-category' => 'c',
+'tooltip-ca-nstab-category' => 'Shikoni faqen e kategorisë',
+'deletedrevision'       => 'Gris versionin e vjetër $1.',
+'previousdiff'          => '← Ndryshimi më para',
+'nextdiff'              => 'Ndryshimi më pas →',
+'imagemaxsize'          => 'Kufizo pamjen e figurave në faqet përshkruese në rezolucionin:',
+'thumbsize'             => 'Madhësia fotove përmbledhëse:',
+'showbigimage'          => 'Shkarkoni versionin me rezolucion më të lartë ($1x$2, $3 KB)',
+'newimages'             => 'Galeria e figurave të reja',
+'showhidebots'          => '($1 robotët)',
+'noimages'              => 'S\'ka gjë për të parë.',
+'variantname-zh-cn'     => 'cn',
+'variantname-zh-tw'     => 'tw',
+'variantname-zh-hk'     => 'hk',
+'variantname-zh-sg'     => 'sg',
+'variantname-zh'        => 'zh',
+'variantname-sr-ec'     => 'sr-ec',
+'variantname-sr-el'     => 'sr-el',
+'variantname-sr-jc'     => 'sr-jc',
+'variantname-sr-jl'     => 'sr-jl',
+'variantname-sr'        => 'sr',
+'specialloguserlabel'   => 'Përdoruesi:',
+'speciallogtitlelabel'  => 'Titulli:',
+'passwordtooshort'      => 'Fjalëkalimi juaj është shumë i shkurtër. Ai duhet të ketë së paku $1 shkronja.',
+'mediawarning'          => '\'\'\'Warning\'\'\': This file may contain malicious code, by executing it your system may be compromised.<hr />',
+'fileinfo'              => '$1KB, lloji MIME: <code>$2</code>',
+'metadata'              => 'Metadata',
+'metadata-help'         => 'Kjo skedë përmban hollësira të tjera të cilat mund të jenë shtuar nga kamera ose skaneri dixhital që është përdorur për ta krijuar. Në qoftë se skeda është ndryshuar nga gjendja origjinale, disa hollësira mund të mos pasqyrojnë skedën e tanishme.',
+'metadata-expand'       => 'Trego hollësirat',
+'metadata-collapse'     => 'Fshih hollësirat',
+'exif-imagewidth'       => 'Gjerësia',
+'exif-imagelength'      => 'Gjatësia',
+'exif-bitspersample'    => 'Bit për komponent',
+'exif-compression'      => 'Lloji i ngjeshjes',
+'exif-photometricinterpretation'=> 'Përbërja pixel',
+'exif-orientation'      => 'Orientimi',
+'exif-samplesperpixel'  => 'Numri i përbërësve',
+'exif-ycbcrpositioning' => 'Pozicioni Y dhe C',
+'exif-xresolution'      => 'Rezolucioni horizontal',
+'exif-yresolution'      => 'Rezolucioni vertikal',
+'exif-rowsperstrip'     => 'Numri i rreshtave për shirit',
+'exif-datetime'         => 'Data dhe ora e ndryshimit të skedës',
+'exif-imagedescription' => 'Titulli i figurës',
+'exif-make'             => 'Prodhuesi i kamerës',
+'exif-model'            => 'Modeli i kamerës',
+'exif-software'         => 'Softueri i përdorur',
+'exif-artist'           => 'Autor',
+'exif-copyright'        => 'Mbajtësi i të drejtave të autorit',
+'exif-exifversion'      => 'Versioni Exif-it',
+'exif-colorspace'       => 'Hapësira e ngjyrave',
+'exif-compressedbitsperpixel'=> 'Lloji i ngjeshjes së figurës',
+'exif-pixelydimension'  => 'Gjerësia e vlefshme e figurës',
+'exif-pixelxdimension'  => 'Valind image height',
+'exif-makernote'        => 'Shënimet e prodhuesit',
+'exif-usercomment'      => 'Vërejtjet e përdoruesit',
+'exif-relatedsoundfile' => 'Skeda audio shoqëruese',
+'exif-datetimeoriginal' => 'Data dhe koha e prodhimit të të dhënave',
+'exif-datetimedigitized'=> 'Data dhe ora e dixhitalizimit',
+'exif-exposuretime'     => 'Kohëzgjatja e ekspozimit',
+'exif-fnumber'          => 'Numri F',
+'exif-shutterspeedvalue'=> 'Shpejtësia e mbyllësit',
+'exif-aperturevalue'    => 'Apertura',
+'exif-brightnessvalue'  => 'Ndriçimi',
+'exif-subjectdistance'  => 'Largësia e subjektit',
+'exif-lightsource'      => 'Burimi i dritës',
+'exif-flash'            => 'Blici',
+'exif-focallength'      => 'Gjatësia e vatrës',
+'exif-flashenergy'      => 'Energjia e blicit',
+'exif-subjectlocation'  => 'Vendndodhja e subjektit',
+'exif-filesource'       => 'Burimi i skedës',
+'exif-contrast'         => 'Kontrasti',
+'exif-saturation'       => 'Mbushja',
+'exif-sharpness'        => 'Ashpërsia',
+'exif-subjectdistancerange'=> 'Shtrirja e largësisë së subjektit',
+'exif-gpslatituderef'   => 'Gjerësi veriore ose jugore',
+'exif-gpslatitude'      => 'Gjerësia gjeografike',
+'exif-gpslongituderef'  => 'Gjatësi lindore ose perëndimore',
+'exif-gpslongitude'     => 'Gjatësia gjeografike',
+'exif-gpsaltituderef'   => 'Lartësia orientuese',
+'exif-gpsaltitude'      => 'Lartësia',
+'exif-gpssatellites'    => 'Janë përdorur satelitë për matjen',
+'exif-gpstrack'         => 'Drejtimi i lëvizjes',
+'exif-gpsimgdirection'  => 'Orientimi i figurës',
+'exif-compression-1'    => 'E pangjeshur',
+'exif-compression-6'    => 'JPEG',
+'exif-photometricinterpretation-2'=> 'RGB',
+'exif-photometricinterpretation-6'=> 'YCbCr',
+'exif-orientation-1'    => 'Normal',
+'exif-orientation-2'    => 'E kthyer horizontalisht',
+'exif-orientation-3'    => 'E rrotulluar 180°',
+'exif-orientation-4'    => 'E kthyer vertikalisht',
+'exif-orientation-5'    => 'E rrotulluar 90° kundër orës dhe e kthyer vertikalisht',
+'exif-orientation-6'    => 'E rrotulluar 90° sipas orës',
+'exif-orientation-7'    => 'E rrotulluar 90° sipas orës dhe e kthyer vertikalisht',
+'exif-orientation-8'    => 'E rrotulluar 90° kundër orës',
+'exif-xyresolution-i'   => '$1 dpi',
+'exif-xyresolution-c'   => '$1 dpc',
+'exif-colorspace-1'     => 'sRGB',
+'exif-colorspace-ffff.h'=> 'FFFF.H',
+'exif-componentsconfiguration-0'=> 'nuk ekziston',
+'exif-componentsconfiguration-1'=> 'Y',
+'exif-componentsconfiguration-2'=> 'Cb',
+'exif-componentsconfiguration-3'=> 'Cr',
+'exif-componentsconfiguration-4'=> 'R',
+'exif-componentsconfiguration-5'=> 'G',
+'exif-componentsconfiguration-6'=> 'B',
+'exif-exposureprogram-4'=> 'Përparësia e mbyllësit',
+'exif-subjectdistance-value'=> '$1 metra',
+'exif-meteringmode-0'   => 'E panjohur',
+'exif-meteringmode-1'   => 'Mesatare',
+'exif-meteringmode-6'   => 'E pjesshme',
+'exif-meteringmode-255' => 'Tjetër',
+'exif-lightsource-0'    => 'I panjohur',
+'exif-lightsource-1'    => 'Ditë',
+'exif-lightsource-4'    => 'Blic',
+'exif-lightsource-9'    => 'Kohë e hapur',
+'exif-lightsource-10'   => 'Kohë e vrenjtur',
+'exif-lightsource-11'   => 'Hije',
+'exif-lightsource-20'   => 'D55',
+'exif-lightsource-21'   => 'D65',
+'exif-lightsource-22'   => 'D75',
+'exif-lightsource-23'   => 'D50',
+'exif-lightsource-255'  => 'Tjetër burim drite',
+'exif-filesource-3'     => 'DSC',
+'exif-scenecapturetype-1'=> 'Peizazh',
+'exif-scenecapturetype-2'=> 'Portret',
+'exif-scenecapturetype-3'=> 'Pamje nate',
+'exif-contrast-0'       => 'Normal',
+'exif-contrast-1'       => 'I dobët',
+'exif-contrast-2'       => 'I fortë',
+'exif-saturation-0'     => 'Normale',
+'exif-saturation-1'     => 'mbushje e pakët',
+'exif-saturation-2'     => 'mbushje e shumtë',
+'exif-sharpness-0'      => 'Normale',
+'exif-sharpness-1'      => 'E butë',
+'exif-sharpness-2'      => 'E fortë',
+'exif-subjectdistancerange-0'=> 'E panjohur',
+'exif-subjectdistancerange-2'=> 'Pamje nga afër',
+'exif-subjectdistancerange-3'=> 'Pamje nga larg',
+'exif-gpslatitude-n'    => 'Gjerësi veriore',
+'exif-gpslatitude-s'    => 'Gjerësi jugore',
+'exif-gpslongitude-e'   => 'Gjatësi lindore',
+'exif-gpslongitude-w'   => 'Gjatësi perëndimore',
+'exif-gpsstatus-a'      => 'Duke bërë matje',
+'exif-gpsmeasuremode-2' => 'matje në 2 madhësi',
+'exif-gpsmeasuremode-3' => 'matje në 3 madhësi',
+'exif-gpsspeed-k'       => 'Kilometra në orë',
+'exif-gpsspeed-m'       => 'Milje në orë',
+'exif-gpsspeed-n'       => 'Nyje',
+'exif-gpsdirection-t'   => 'Drejtimi i vërtetë',
+'exif-gpsdirection-m'   => 'Drejtimi magnetik',
+'edit-externally'       => 'Ndryshoni këtë skedë me një mjet të jashtëm',
+'edit-externally-help'  => 'Shikoni [http://meta.wikimedia.org/wiki/Help:External_editors udhëzimet e instalimit] për më shumë informacion.',
+'recentchangesall'      => 'të gjitha',
+'imagelistall'          => 'të gjitha',
+'watchlistall1'         => 'të gjitha',
+'watchlistall2'         => 'të gjitha',
+'namespacesall'         => 'të gjitha',
+'confirmemail'          => 'Vërtetoni adresën tuaj',
+'confirmemail_text'     => 'Për të marrë email duhet të vërtetoni adresen tuaj. Shtypni butonin e mëposhtëm për të dërguar një email vërtetimi tek adresa juaj. Email-i do të përmbajë një lidhje me kod të shifruar. Duke ndjekur lidhjen nëpërmjet shfletuesit tuaj do të vërtetoni adresën.',
+'confirmemail_send'     => 'Dërgo vërtetimin',
+'confirmemail_sent'     => 'Email-i për vërtetim është dërguar.',
+'confirmemail_sendfailed'=> 'Nuk munda të dërgoj email-in e vërtetimit. Kontrolloni adresën tuaj për gabime shtypi.',
+'confirmemail_invalid'  => 'Kodi i shifrimit të vërtetimit është gabim ose ka skaduar.',
+'confirmemail_needlogin'=> 'Ju duhet të $1 për ta konfirmuar email-adresën',
+'confirmemail_success'  => 'Adresa juaj është vërtetuar. Mund të hyni brënda dhe të përdorni wiki-n.',
+'confirmemail_loggedin' => 'Adresa juaj është vërtetuar.',
+'confirmemail_error'    => 'Pati gabim gjatë ruajtjes së vërtetimit tuaj.',
+'confirmemail_subject'  => 'Vërtetim adrese nga {{SITENAME}}',
+'confirmemail_body'     => 'Dikush, me siguri ju nga IP adresa $1, ka hapur llogarinë "$2" tek {{SITENAME}} dhe ka dhënë këtë adresë email-i.
+
+Në qoftë se është me të vertetë llogaria juaj, vërtetoni këtë adresë duke ndjekur lidhjen e mëposhtme për të mundësuar përdorimin e mjeteve që kërkojnë email tek {{SITENAME}}:
+
+$3
+
+Në qoftë se nuk është llogaria juaj atëhere mos e ndiqni lidhjen. Kodi i shifruar do të skadojë më $4.',
+'tryexact'              => 'Kërko përputhje të plotë',
+'searchfulltext'        => 'Kërko tekstin e plotë',
+'createarticle'         => 'Krijo artikull',
+'scarytranscludedisabled'=> '[Lidhja Interwiki nuk është i mundshëm]',
+'scarytranscludefailed' => '[ju kërkoj ndjesë, marrja e stampës $1 dështoi]',
+'scarytranscludetoolong'=> '[ju kërkoj ndjesë, URL-i është tepër i gjatë]',
+'trackbackbox'          => '<div id="mw_trackbacks">
+Lidhje ndjekëse për këtë artikull:<br />
+$1
+</div>',
+'trackbackremove'       => ' ([$1 hiqe])',
+'trackbacklink'         => 'Lidhje ndjekëse',
+'trackbackdeleteok'     => 'Lidhja ndjekëse u hoq.',
+'deletedwhileediting'   => 'Kujdes! Kjo faqe është grisur pasi ju keni filluar redaktimin!',
+'confirmrecreate'       => 'Përdoruesi [[User:$1|$1]] ([[User talk:$1|diskutime]]) grisi këtë artikull mbasi ju filluat ta redaktoni për arsyen:
+: \'\'$2\'\'
+Ju lutem konfirmoni nëse dëshironi me të vertetë ta ri-krijoni këtë artikull.',
+'recreate'              => 'Rikrijo',
+'unit-pixel'            => 'px',
+'redirectingto'         => 'Përcjellin tek [[$1]]...',
+'confirm_purge'         => 'Pastro cache për këtë faqe?
+
+$1',
+'confirm_purge_button'  => 'Shko',
+'youhavenewmessagesmulti'=> 'Ju keni mesazh të ri në $1',
+'searchcontaining'      => 'Kërko për artikuj që përmbajnë \'\'$1\'\'.',
+'searchnamed'           => 'Kërko për artikuj të quajtur \'\'$1\'\'.',
+'articletitles'         => 'Artikuj që fillojnë me \'\'$1\'\'',
+'hideresults'           => 'Fshih rezultatet',
+'displaytitle'          => '(Lidhje te kjo faqe si [[$1]])',
+'loginlanguagelabel'    => 'Gjuha: $1',
+);
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesSr.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesSr.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesSr.php	(revision 1280)
@@ -0,0 +1,11 @@
+<?php
+/**
+  * Serbian
+  *
+  * @addtogroup Language
+  */
+
+$fallback = 'sr-ec';
+$linkTrail = '/^([abvgdđežzijklljmnnjoprstćufhcčdžšабвгдђежзијклљмнњопрстћуфхцчџш]+)(.*)$/usD';
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesSr_ec.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesSr_ec.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesSr_ec.php	(revision 1280)
@@ -0,0 +1,2246 @@
+<?php
+/**
+  * @addtogroup Language
+  */
+$namespaceNames = array(
+	NS_MEDIA            => "Медија",
+	NS_SPECIAL          => "Посебно",
+	NS_MAIN             => "",
+	NS_TALK             => "Разговор",
+	NS_USER             => "Корисник",
+	NS_USER_TALK        => "Разговор_са_корисником",
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK     => "Разговор_о_$1",
+	NS_IMAGE            => "Слика",
+	NS_IMAGE_TALK       => "Разговор_о_слици",
+	NS_MEDIAWIKI        => "МедијаВики",
+	NS_MEDIAWIKI_TALK   => "Разговор_о_МедијаВикију",
+	NS_TEMPLATE         => 'Шаблон',
+	NS_TEMPLATE_TALK    => 'Разговор_о_шаблону',
+	NS_HELP             => 'Помоћ',
+	NS_HELP_TALK        => 'Разговор_о_помоћи',
+	NS_CATEGORY         => 'Категорија',
+	NS_CATEGORY_TALK    => 'Разговор_о_категорији',
+);
+
+# Aliases to latin namespaces 
+$namespaceAliases = array(
+	"Medija"                  => NS_MEDIA,
+	"Posebno"                 => NS_SPECIAL,
+	"Razgovor"                => NS_TALK,
+	"Korisnik"                => NS_USER,
+	"Razgovor_sa_korisnikom"  => NS_USER_TALK,
+	"Razgovor_o_$1"           => NS_PROJECT_TALK,
+	"Slika"                   => NS_IMAGE,
+	"Razgovor_o_slici"        => NS_IMAGE_TALK,
+	"MedijaViki"              => NS_MEDIAWIKI,
+	"Razgovor_o_MedijaVikiju" => NS_MEDIAWIKI_TALK,
+	'Šablon'                  => NS_TEMPLATE,
+	'Razgovor_o_šablonu'      => NS_TEMPLATE_TALK,
+	'Pomoć'                   => NS_HELP,
+	'Razgovor_o_pomoći'      => NS_HELP_TALK,
+	'Kategorija'              => NS_CATEGORY,
+	'Razgovor_o_kategoriji'   => NS_CATEGORY_TALK,
+);
+
+$skinNames = array(
+ "Обична", "Носталгија", "Келнско плаво", "Педингтон", "Монпарнас"
+);
+
+$extraUserToggles = array(
+	'nolangconversion',
+);
+
+$datePreferenceMigrationMap = array(
+	'default',
+	'hh:mm d. month y.',
+	'hh:mm d month y',
+	'hh:mm dd.mm.yyyy',
+	'hh:mm d.m.yyyy',
+	'hh:mm d. mon y.',
+	'hh:mm d mon y',
+	'h:mm d. month y.',
+	'h:mm d month y',
+	'h:mm dd.mm.yyyy',
+	'h:mm d.m.yyyy',
+	'h:mm d. mon y.',
+	'h:mm d mon y',
+);
+
+$datePreferences = array(
+	'default',
+	'hh:mm d. month y.',
+	'hh:mm d month y',
+	'hh:mm dd.mm.yyyy',
+	'hh:mm d.m.yyyy',
+	'hh:mm d. mon y.',
+	'hh:mm d mon y',
+	'h:mm d. month y.',
+	'h:mm d month y',
+	'h:mm dd.mm.yyyy',
+	'h:mm d.m.yyyy',
+	'h:mm d. mon y.',
+	'h:mm d mon y',
+);
+
+$defaultDateFormat = 'hh:mm d. month y.';
+
+$dateFormats = array(
+	/*
+	'Није битно',
+	'06:12, 5. јануар 2001.',
+	'06:12, 5 јануар 2001',
+	'06:12, 05.01.2001.',
+	'06:12, 5.1.2001.',
+	'06:12, 5. јан 2001.',
+	'06:12, 5 јан 2001',
+	'6:12, 5. јануар 2001.',
+	'6:12, 5 јануар 2001',
+	'6:12, 05.01.2001.',
+	'6:12, 5.1.2001.',
+	'6:12, 5. јан 2001.',
+	'6:12, 5 јан 2001',
+	 */
+	
+	'hh:mm d. month y. time'    => 'H:i',
+	'hh:mm d month y time'      => 'H:i',
+	'hh:mm dd.mm.yyyy time'     => 'H:i',
+	'hh:mm d.m.yyyy time'       => 'H:i',
+	'hh:mm d. mon y. time'      => 'H:i',
+	'hh:mm d mon y time'        => 'H:i',
+	'h:mm d. month y. time'     => 'G:i',
+	'h:mm d month y time'       => 'G:i',
+	'h:mm dd.mm.yyyy time'      => 'G:i',
+	'h:mm d.m.yyyy time'        => 'G:i',
+	'h:mm d. mon y. time'       => 'G:i',
+	'h:mm d mon y time'         => 'G:i',
+
+	'hh:mm d. month y. date'    => 'j. F Y.',
+	'hh:mm d month y date'      => 'j F Y',  
+	'hh:mm dd.mm.yyyy date'     => 'd.m.Y',  
+	'hh:mm d.m.yyyy date'       => 'j.n.Y',  
+	'hh:mm d. mon y. date'      => 'j. M Y.',
+	'hh:mm d mon y date'        => 'j M Y',  
+	'h:mm d. month y. date'     => 'j. F Y.',
+	'h:mm d month y date'       => 'j F Y',  
+	'h:mm dd.mm.yyyy date'      => 'd.m.Y',  
+	'h:mm d.m.yyyy date'        => 'j.n.Y',  
+	'h:mm d. mon y. date'       => 'j. M Y.',
+	'h:mm d mon y date'         => 'j M Y',  
+
+	'hh:mm d. month y. both'    =>'H:i, j. F Y.', 
+	'hh:mm d month y both'      =>'H:i, j F Y',   
+	'hh:mm dd.mm.yyyy both'     =>'H:i, d.m.Y',   
+	'hh:mm d.m.yyyy both'       =>'H:i, j.n.Y',   
+	'hh:mm d. mon y. both'      =>'H:i, j. M Y.', 
+	'hh:mm d mon y both'        =>'H:i, j M Y',   
+	'h:mm d. month y. both'     =>'G:i, j. F Y.', 
+	'h:mm d month y both'       =>'G:i, j F Y',   
+	'h:mm dd.mm.yyyy both'      =>'G:i, d.m.Y',   
+	'h:mm d.m.yyyy both'        =>'G:i, j.n.Y',   
+	'h:mm d. mon y. both'       =>'G:i, j. M Y.', 
+	'h:mm d mon y both'         =>'G:i, j M Y',   
+);
+
+/* NOT USED IN STABLE VERSION */
+$magicWords = array(
+#	ID                                CASE SYNONYMS
+	'redirect'               => array( 0, '#Преусмери', '#redirect', '#преусмери', '#ПРЕУСМЕРИ' ),
+	'notoc'                  => array( 0, '__NOTOC__', '__БЕЗСАДРЖАЈА__' ),
+	'forcetoc'               => array( 0, '__FORCETOC__', '__ФОРСИРАНИСАДРЖАЈ__' ),
+	'toc'                    => array( 0, '__TOC__', '__САДРЖАЈ__' ),
+	'noeditsection'          => array( 0, '__NOEDITSECTION__', '__БЕЗ_ИЗМЕНА__', '__БЕЗИЗМЕНА__' ),
+	'start'                  => array( 0, '__START__', '__ПОЧЕТАК__' ),
+	'currentmonth'           => array( 1, 'CURRENTMONTH', 'ТРЕНУТНИМЕСЕЦ' ),
+	'currentmonthname'       => array( 1, 'CURRENTMONTHNAME', 'ТРЕНУТНИМЕСЕЦИМЕ' ),
+	'currentmonthnamegen'    => array( 1, 'CURRENTMONTHNAMEGEN', 'ТРЕНУТНИМЕСЕЦГЕН' ),
+	'currentmonthabbrev'     => array( 1, 'CURRENTMONTHABBREV', 'ТРЕНУТНИМЕСЕЦСКР' ),
+	'currentday'             => array( 1, 'CURRENTDAY', 'ТРЕНУТНИДАН' ),
+	'currentdayname'         => array( 1, 'CURRENTDAYNAME', 'ТРЕНУТНИДАНИМЕ' ),
+	'currentyear'            => array( 1, 'CURRENTYEAR', 'ТРЕНУТНАГОДИНА' ),
+	'currenttime'            => array( 1, 'CURRENTTIME', 'ТРЕНУТНОВРЕМЕ' ),
+	'numberofarticles'       => array( 1, 'NUMBEROFARTICLES', 'БРОЈЧЛАНАКА' ),
+	'numberoffiles'          => array( 1, 'NUMBEROFFILES', 'БРОЈДАТОТЕКА', 'БРОЈФАЈЛОВА' ),
+	'pagename'               => array( 1, 'PAGENAME', 'СТРАНИЦА' ),
+	'pagenamee'              => array( 1, 'PAGENAMEE', 'СТРАНИЦЕ' ),
+	'namespace'              => array( 1, 'NAMESPACE', 'ИМЕНСКИПРОСТОР' ),
+	'namespacee'             => array( 1, 'NAMESPACEE', 'ИМЕНСКИПРОСТОРИ' ),
+	'fullpagename'           => array( 1, 'FULLPAGENAME', 'ПУНОИМЕСТРАНЕ' ),
+	'fullpagenamee'          => array( 1, 'FULLPAGENAMEE', 'ПУНОИМЕСТРАНЕЕ' ),
+	'msg'                    => array( 0, 'MSG:', 'ПОР:' ),
+	'subst'                  => array( 0, 'SUBST:', 'ЗАМЕНИ:' ),
+	'msgnw'                  => array( 0, 'MSGNW:', 'НВПОР:' ),
+	'img_thumbnail'          => array( 1, 'thumbnail', 'thumb', 'мини' ),
+	'img_manualthumb'        => array( 1, 'thumbnail=$1', 'thumb=$1', 'мини=$1' ),
+	'img_right'              => array( 1, 'right', 'десно', 'д' ),
+	'img_left'               => array( 1, 'left', 'лево', 'л' ),
+	'img_none'               => array( 1, 'none', 'н', 'без' ),
+	'img_width'              => array( 1, '$1px', '$1пискел' , '$1п' ),
+	'img_center'             => array( 1, 'center', 'centre', 'центар', 'ц' ),
+	'img_framed'             => array( 1, 'framed', 'enframed', 'frame', 'оквир', 'рам' ),
+	'int'                    => array( 0, 'INT:', 'ИНТ:' ),
+	'sitename'               => array( 1, 'SITENAME', 'ИМЕСАЈТА' ),
+	'ns'                     => array( 0, 'NS:', 'ИП:' ),
+	'localurl'               => array( 0, 'LOCALURL:', 'ЛОКАЛНААДРЕСА:' ),
+	'localurle'              => array( 0, 'LOCALURLE:', 'ЛОКАЛНЕАДРЕСЕ:' ),
+	'server'                 => array( 0, 'SERVER', 'СЕРВЕР' ),
+	'servername'             => array( 0, 'SERVERNAME', 'ИМЕСЕРВЕРА' ),
+	'scriptpath'             => array( 0, 'SCRIPTPATH', 'СКРИПТА' ),
+	'grammar'                => array( 0, 'GRAMMAR:', 'ГРАМАТИКА:' ),
+	'notitleconvert'         => array( 0, '__NOTITLECONVERT__', '__NOTC__', '__БЕЗКН__', '__BEZKN__' ),
+	'nocontentconvert'       => array( 0, '__NOCONTENTCONVERT__', '__NOCC__', '__БЕЗЦЦ__' ),
+	'currentweek'            => array( 1, 'CURRENTWEEK', 'ТРЕНУТНАНЕДЕЉА' ),
+	'currentdow'             => array( 1, 'CURRENTDOW', 'ТРЕНУТНИДОВ' ),
+	'revisionid'             => array( 1, 'REVISIONID', 'ИДРЕВИЗИЈЕ' ),
+	'plural'                 => array( 0, 'PLURAL:', 'МНОЖИНА:' ),
+	'fullurl'                => array( 0, 'FULLURL:', 'ПУНУРЛ:' ),
+	'fullurle'               => array( 0, 'FULLURLE:', 'ПУНУРЛЕ:' ),
+	'lcfirst'                => array( 0, 'LCFIRST:', 'ЛЦПРВИ:' ),
+	'ucfirst'                => array( 0, 'UCFIRST:', 'УЦПРВИ:' ),
+	'lc'                     => array( 0, 'LC:', 'ЛЦ:' ),
+	'uc'                     => array( 0, 'UC:', 'УЦ:' ),
+);
+$separatorTransformTable = array(',' => '.', '.' => ',' );
+
+
+$messages = array(
+# stylesheets
+'common.css'		=> '/** CSS koji važi za sve skinove */',
+'monobook.css'		=> '/** Samo za MonoBook skin */',
+
+# User preference toggles
+'tog-underline' => 'Подвуци везе',
+'tog-highlightbroken' => 'Форматирај покварене везе <a href="" class="new">овако</a> (алтернатива: овако<a href="" class="internal">?</a>).',
+'tog-justify' => 'Уравнај пасусе',
+'tog-hideminor' => 'Сакриј мале измене у списку скорашњих измена',
+'tog-extendwatchlist' => 'Побољшан списак надгледања',
+'tog-usenewrc' => 'Побољшан списак скорашњих измена (захтева JavaScript)',
+'tog-numberheadings' => 'Аутоматски нумериши поднаслове',
+'tog-showtoolbar' => 'Прикажи дугмиће за измене (захтева JavaScript)',
+'tog-editondblclick' => 'Мењај странице двоструким кликом (захтева JavaScript)',
+'tog-editsection' => 'Омогући измену делова [уреди] везама',
+'tog-editsectiononrightclick' => 'Омогући измену делова десним кликом<br />на њихове наслове (захтева JavaScript)',
+'tog-showtoc' => 'Прикажи садржај (у чланцима са више од 3 поднаслова)',
+'tog-rememberpassword' => 'Памти лозинку кроз више сеанси',
+'tog-editwidth' => 'Поље за измене има пуну ширину',
+'tog-watchcreations' => 'Додај странице које правим у мој списак надгледања',
+'tog-watchdefault' => 'Додај странице које мењам у мој списак надгледања',
+'tog-minordefault' => 'Означи све измене малим испрва',
+'tog-previewontop' => 'Прикажи претпреглед пре поља за измену',
+'tog-previewonfirst' => 'Прикажи претпреглед при првој измени',
+'tog-nocache' => 'Онемогући кеширање страница',
+'tog-enotifwatchlistpages' => 'Пошаљи ми е-пошту када се промени страна коју надгледам',
+'tog-enotifusertalkpages' => 'Пошаљи ми е-пошту када се промени моја корисничка страна за разговор',
+'tog-enotifminoredits' => 'Пошаљи ми е-пошту такође за мале измене страна',
+'tog-enotifrevealaddr' => 'Откриј адресу моје е-поште у пошти обавештења',
+'tog-shownumberswatching' => 'Прикажи број корисника који надгледају',
+'tog-fancysig' => 'Чист потпис (без аутоматских веза)',
+'tog-externaleditor' => 'Користи спољашњи уређивач по подразумеваним подешавањима',
+'tog-externaldiff' => 'Користи спољашњи програм за приказ разлика по подразумеваним подешавањима',
+'tog-showjumplinks' => 'Омогући "скочи на" везе',
+'tog-uselivepreview' => 'Користи живи претпреглед (захтева JavaScript) (експериментално)',
+'tog-autopatrol' => 'Означи измене које правим патролираним',
+'tog-forceeditsummary' => 'Упозори ме кад не унесем опис измене',
+'tog-watchlisthideown' => 'Сакриј моје измене са списка надгледања',
+'tog-watchlisthidebots' => 'Сакриј измене ботова са списка надгледања',
+'tog-nolangconversion' => 'Искључи конверзију варијанти',
+
+'underline-always' => 'Увек',
+'underline-never' => 'Никад',
+'underline-default' => 'По подешавањима браузера',
+
+'skinpreview' => '(Преглед)',
+
+# dates
+'sunday' => 'недеља',
+'monday' => 'понедељак',
+'tuesday' => 'уторак',
+'wednesday' => 'среда',
+'thursday' => 'четвртак',
+'friday' => 'петак',
+'saturday' => 'субота',
+'sun' => 'нед',
+'mon' => 'пон',
+'tue' => 'уто',
+'wed' => 'сре',
+'thu' => 'чет',
+'fri' => 'пет',
+'sat' => 'суб',
+'january' => 'јануар',
+'february' => 'фебруар',
+'march' => 'март',
+'april' => 'април',
+'may_long' => 'мај',
+'june' => 'јун',
+'july' => 'јул',
+'august' => 'август',
+'september' => 'септембар',
+'october' => 'октобар',
+'november' => 'новембар',
+'december' => 'децембар',
+'january-gen' => 'јануара',
+'february-gen' => 'фебруара',
+'march-gen' => 'марта',
+'april-gen' => 'априла',
+'may-gen' => 'маја',
+'june-gen' => 'јуна',
+'july-gen' => 'јула',
+'august-gen' => 'августа',
+'september-gen' => 'септембра',
+'october-gen' => 'октобра',
+'november-gen' => 'новембра',
+'december-gen' => 'децембра',
+'jan' => 'јан',
+'feb' => 'феб',
+'mar' => 'мар',
+'apr' => 'апр',
+'may' => 'мај',
+'jun' => 'јун',
+'jul' => 'јул',
+'aug' => 'авг',
+'sep' => 'сеп',
+'oct' => 'окт',
+'nov' => 'нов',
+'dec' => 'дец',
+# Bits of text used by many pages:
+#
+'categories' => 'Категорије страница',
+'pagecategories' => '{{PLURAL:$1|Категорија|Категорије|Категорије}} страница',
+'category_header' => 'Чланака у категорији "$1"',
+'subcategories' => 'Поткатегорије',
+
+'mainpage' => 'Главна страна',
+'mainpagetext' => '<big>\'\'\'МедијаВики је успешно инсталиран.\'\'\'</big>',
+'mainpagedocfooter' => "Молимо видите [http://meta.wikimedia.org/wiki/Help:Contents кориснички водич] за информације о употреби вики софтвера.
+
+== За почетак ==
+* [http://www.mediawiki.org/wiki/Help:Configuration_settings Помоћ у вези са подешавањима]
+* [http://www.mediawiki.org/wiki/Help:FAQ Најчешће постављена питања]
+* [http://mail.wikimedia.org/mailman/listinfo/mediawiki-announce Мејлинг листа о издањима МедијаВикија]",
+
+'portal' => 'Радионица',
+'portal-url' => 'Project:Радионица',
+'about' => 'О...',
+'aboutsite' => 'О пројекту {{SITENAME}}',
+'aboutpage' => 'Project:О',
+'article' => 'Чланак',
+'help' => 'Помоћ',
+'helppage' => '{{ns:help}}:Садржај',
+'bugreports' => 'Пријаве грешака',
+'bugreportspage' => 'Project:Пријаве_грешака',
+'sitesupport' => 'Донације',
+'sitesupport-url' => 'Project:Донације',
+'faq' => 'НПП',
+'faqpage' => 'Project:НПП',
+'edithelp' => 'Помоћ око уређивања',
+'newwindow' => '(нови прозор)',
+'edithelppage' => '{{ns:help}}:Уређивање',
+'cancel' => 'Поништи',
+'qbfind' => 'Пронађи',
+'qbbrowse' => 'Прелиставај',
+'qbedit' => 'Измени',
+'qbpageoptions' => 'Опције странице',
+'qbpageinfo' => 'Информације о страници',
+'qbmyoptions' => 'Моје опције',
+'qbspecialpages' => 'Посебне странице',
+'moredotdotdot' => 'Још...',
+'mypage' => 'Моја страница',
+'mytalk' => 'Мој разговор',
+'anontalk' => 'Разговор за ову ИП адресу',
+'navigation' => 'Навигација',
+
+# Metadata in edit box
+'metadata_help' => 'Метаподаци (види [[Project:Метаподаци]] за објашњење):',
+
+'currentevents' => 'Тренутни догађаји',
+'currentevents-url' => 'Тренутни догађаји',
+'disclaimers' => 'Одрицање одговорности',
+'disclaimerpage' => 'Project:Одрицање одговорности',
+'privacy' => 'Политика приватности',
+'privacypage' => 'Project:Политика приватности',
+'errorpagetitle' => 'Грешка',
+'returnto' => 'Повратак на $1.',
+'tagline' => 'Из пројекта {{SITENAME}}',
+'help' => 'Помоћ',
+'search' => 'претрага',
+'searchbutton' => 'Тражи',
+'go' => 'Иди',
+'searcharticle' => 'Иди',
+'history' => 'Историја странице',
+'history_short' => 'историја',
+'updatedmarker' => 'ажурирано од моје последње посете',
+'info_short' => 'Информације',
+'printableversion' => 'Верзија за штампу',
+'permalink' => 'Пермалинк',
+'print' => 'Штампа',
+'edit' => 'Уреди',
+'editthispage' => 'Уреди ову страницу',
+'delete' => 'обриши',
+'deletethispage' => 'Обриши ову страницу',
+'undelete_short' => 'врати {{PLURAL:$1|једну обрисану измену|$1 обрисане измене|$1 обрисаних измена}}',
+'protect' => 'заштити',
+'protectthispage' => 'Заштити ову страницу',
+'unprotect' => 'Склони заштиту',
+'unprotectthispage' => 'Склони заштиту са ове странице',
+'newpage' => 'Нова страница',
+'talkpage' => 'Разговор о овој страници',
+'specialpage' => 'Посебна страница',
+'personaltools' => 'Лични алати',
+'postcomment' => 'Пошаљи коментар',
+'articlepage' => 'Погледај чланак',
+'talk' => 'Разговор',
+'views' => 'Прегледи',
+'toolbox' => 'алати',
+'userpage' => 'Погледај корисничку страну',
+'projectpage' => 'Погледај страну пројекта',
+'imagepage' => 'Погледај страну слике',
+'mediawikipage' => 'Види страницу поруке',
+'templatepage' => 'Види страницу шаблона',
+'viewhelppage' => 'Види страницу помоћи',
+'categorypage' => 'Види страницу категорије',
+'viewtalkpage' => 'Погледај разговор',
+'otherlanguages' => 'Остали језици',
+'redirectedfrom' => '(Преусмерено са $1)',
+'autoredircomment' => 'Преусмерење на [[$1]]',
+'redirectpagesub' => 'Страна преусмерења',
+'lastmodifiedat' => 'Ова страница је последњи пут измењена $2, $1.',
+'viewcount' => 'Овој страници је приступљено {{PLURAL:$1|једном|$1 пута|$1 пута}}.',
+'copyright' => 'Садржај је објављен под $1.',
+'protectedpage' => 'Заштићена страница',
+'jumpto' => 'Скочи на:',
+'jumptonavigation' => 'навигација',
+'jumptosearch' => 'претрага',
+
+'badaccess' => 'Грешка у дозволама',
+'badaccess-group0' => 'Није вам дозвољено да извршите акцију коју сте покренули.',
+'badaccess-group1' => 'Акција коју сте покренули је резеревисана за кориснике у групи $1.',
+'badaccess-group2' => 'Акција коју сте покренули је резервисана за кориснике из једне од група $1.',
+'badaccess-groups' => 'Акција коју сте покренули је резервисана за кориснике из једне од група $1.',
+
+'versionrequired' => 'Верзија $1 МедијаВикија је потребна',
+'versionrequiredtext' => 'Верзија $1 МедијаВикија је потребна да би се користила ова страна. Погледајте [[{{ns:special}}:Version|верзију]]',
+
+'ok' => 'да',
+'pagetitle' => '$1 - {{SITENAME}}',
+'retrievedfrom' => 'Добављено из "$1"',
+'youhavenewmessages' => 'Имате $1 ($2).',
+'newmessageslink' => 'нових порука',
+'newmessagesdifflink' => 'најсвежије измене',
+'editsection' => 'уреди',
+'editold' => 'уреди',
+'editsectionhint' => 'Уреди део: $1',
+'toc' => 'Садржај',
+'showtoc' => 'прикажи',
+'hidetoc' => 'сакриј',
+'thisisdeleted' => 'Погледај или врати $1?',
+'viewdeleted' => 'Погледај $1?',
+'restorelink' => '{{PLURAL:$1|једна обрисана измена|$1 обрисане измене|$1 обрисаних измена}}',
+'feedlinks' => 'Фид:',
+'feed-invalid' => 'Лош тип фида пријаве.',
+'feed-atom' => 'Атом',
+
+# Short words for each namespace, by default used in the 'article' tab in monobook
+'nstab-main' => 'Чланак',
+'nstab-user' => 'Корисничка страна',
+'nstab-media' => 'Медиј',
+'nstab-special' => 'Посебна',
+'nstab-project' => 'Страна пројекта',
+'nstab-image' => 'Слика',
+'nstab-mediawiki' => 'Порука',
+'nstab-template' => 'Шаблон',
+'nstab-help' => 'Помоћ',
+'nstab-category' => 'Категорија',
+
+# Main script and global functions
+#
+'nosuchaction' => 'Нема такве акције',
+'nosuchactiontext' => 'Акцију наведену у УРЛ-у вики софтвер
+није препознао.',
+'nosuchspecialpage' => 'Нема такве посебне странице',
+'nospecialpagetext' => 'Тражили сте непостојећу посебну страницу. Списак свих посебних страница се може наћи на [[{{ns:special}}:Specialpages]].',
+
+# General errors
+#
+'error' => 'Грешка',
+'databaseerror' => 'Грешка у бази',
+'dberrortext' => 'Десила се синтаксна грешка упита базе.
+Ово можда указује на грешке у софтверу.
+Последњи покушани упит је био:
+<blockquote><tt>$1</tt></blockquote>
+из функције "<tt>$2</tt>".
+MySQL је вратио грешку "<tt>$3: $4</tt>".',
+'dberrortextcl' => 'Десила се синтаксна грешка упита базе.
+Последњи покушани упит је био:
+"$1"
+из функције "$2".
+MySQL је вратио грешку "$3: $4".',
+'noconnect' => 'Жао нам је! Вики има техничке потешкоће, и не може да се повеже се сервером базе.',
+'nodb' => 'Не могу да изаберем базу $1',
+'cachederror' => 'Ово је кеширана копија захтеване странице, и можда није ажурирана.',
+'laggedslavemode' => 'Упозорење: могуће је да страна није скоро ажурирана.',
+'readonly' => 'База је закључана',
+'enterlockreason' => 'Унесите разлог за закључавање, укључујући процену
+времена откључавања',
+'readonlytext' => 'База података је тренутно закључана за нове
+уносе и остале измене, вероватно због рутинског одржавања,
+после чега ће бити враћена у уобичајено стање.
+Администратор који ју је закључао дао је ово објашњење: $1',
+'missingarticle' => 'База није нашла текст странице
+који је требало, назван "$1".
+
+Ово је обично изазвано праћењем застареле "разл" везе или везе ка историји
+странице која је обрисана.
+
+Ако ово није случај, можда сте пронашли грешку у софтверу.
+Молимо вас пријавите ово једном од [[Project:Администратори|администратора]], заједно са УРЛ-ом.',
+'readonly_lag' => 'База података је аутоматски закључана док слејв сервери не сустигну мастер',
+'internalerror' => 'Интерна грешка',
+'filecopyerror' => 'Не могу да ископирам фајл "$1" на "$2".',
+'filerenameerror' => 'Не могу да преименујем фајл "$1" у "$2".',
+'filedeleteerror' => 'Не могу да обришем фајл "$1".',
+'filenotfound' => 'Не могу да нађем фајл "$1".',
+'unexpected' => 'Неочекивана вредност: "$1"="$2".',
+'formerror' => 'Грешка: не могу да пошаљем упитник',
+'badarticleerror' => 'Ова акција не може бити извршена на овој страници.',
+'cannotdelete' => 'Не могу да обришем наведену страницу или фајл. (Могуће је да је неко други већ обрисао.)',
+'badtitle' => 'Лош наслов',
+'badtitletext' => 'Захтевани наслов странице је био неисправан, празан или
+неисправно повезан међујезички или интервики наслов. Можда садржи један или више карактера који не могу да се употребљавају у насловима.',
+'perfdisabled' => 'Жао нам је! Ова могућност је привремено онемогућена јер успорава базу до те мере да више нико не може да користи вики.',
+'perfdisabledsub' => 'Овде је снимљена копија $1:', # obsolete?
+'perfcached' => 'Следећи подаци су кеширани и не морају бити у потпуности ажурирани.',
+'perfcachedts' => 'Следећи подаци су кеширани и последњи пут су ажурирани: $1',
+'wrong_wfQuery_params' => 'Нетачни параметри за wfQuery()<br />
+Функција: $1<br />
+Претрага: $2',
+'viewsource' => 'погледај код',
+'viewsourcefor' => 'за $1',
+'protectedtext' => 'Ова страница је закључана за измене.
+
+Можете гледати и копирати садржај ове стране:',
+'protectedinterface' => '\'\'\'Упозорење:\'\'\' Мењате страну која се користи да пружи текст интерфејса за софтвер. Измене на овој страни ће утицати на изглед корисничког интерфејса за остале кориснике.',
+'editinginterface' => "'''Упозорење:''' Уређујете страницу чија је намена уписивање текста за интерфејс софтвера. Измене у овој страници ће променити изглед корисничког интефејса свих корисника.",
+'sqlhidden' => '(SQL претрага сакривена)',
+
+# Login and logout pages
+#
+'logouttitle' => 'Одјави се',
+'logouttext' => '<strong>Сада сте одјављени.</strong><br />
+Можете да наставите да користите пројекат {{SITENAME}} анонимно, или се поново пријавити као други корисник. Обратите пажњу да неке странице могу наставити да се приказују као да сте још увек пријављени, док не очистите кеш свог браузера.',
+
+'welcomecreation' => '== Добродошли, $1! ==
+
+Ваш налог је направљен.
+Не заборавите да прилагодите себи своја {{SITENAME}} подешавања.',
+
+'loginpagetitle' => 'Пријављивање',
+'yourname' => 'Корисничко име',
+'yourpassword' => 'Ваша лозинка',
+'yourpasswordagain' => 'Поновите лозинку',
+'remembermypassword' => 'Запамти ме',
+'yourdomainname' => 'Ваш домен',
+'externaldberror' => 'Дошло је или до грешке при спољашњој аутентификацији базе података или вам није дозвољено да ажурирате свој спољашњи налог.',
+'loginproblem' => '<b>Било је проблема са вашим пријављивањем.</b><br />Покушајте поново!',
+'alreadyloggedin' => '<strong>Корисниче $1, већ сте пријављени!</strong><br />',
+
+'login' => 'Пријави се',
+'loginprompt' => 'Морате да имате омогућене колачиће (\'\'cookies\'\') да бисте се пријавили на {{SITENAME}}.',
+'userlogin' => 'Региструј се / Пријави се',
+'logout' => 'Одјави се',
+'userlogout' => 'Одјави се',
+'notloggedin' => 'Нисте пријављени',
+'nologin' => 'Немате налог? $1.',
+'nologinlink' => 'Направите налог',
+'createaccount' => 'Направи налог',
+'gotaccount' => 'Већ имате налог? $1.',
+'gotaccountlink' => 'Пријави се',
+'createaccountmail' => 'е-поштом',
+'badretype' => 'Лозинке које сте унели се не поклапају.',
+'userexists' => 'Корисничко име које сте унели већ је у употреби. Молимо изаберите друго име.',
+'youremail' => 'Адреса ваше е-поште *',
+'username' => 'Корисничко име:',
+'uid' => 'Кориснички ИД:',
+'yourrealname' => 'Ваше право име *',
+'yourlanguage' => 'Језик:',
+'yourvariant' => 'Варијанта:',
+'yournick' => 'Надимак:',
+'badsig' => 'Грешка у потпису; проверите HTML тагове.',
+'email' => 'Е-пошта',
+'prefs-help-email-enotif' => 'Ова адреса се такође користи да вам се шаљу обавештења преко е-поште ако сте омогућили ту опцију.',
+'prefs-help-realname' => '* Право име (опционо): ако изаберете да дате име, ово ће бити коришћено за приписивање за ваш рад.',
+'loginerror' => 'Грешка при пријављивању',
+'prefs-help-email' => '* Е-пошта (опционо): Омогућује осталима да вас контактирају преко ваше корисничке стране или стране за разговора без потребе да одајете свој идентитет.',
+'nocookiesnew' => 'Кориснички налог је направљен, али нисте пријављени. {{SITENAME}} користи колачиће (\'\'cookies\'\') да би се корисници пријавили. Ви сте онемогућили колачиће на свом рачунару. Молимо омогућите их, а онда се пријавите са својим новим корисничким именом и лозинком.',
+'nocookieslogin' => '{{SITENAME}} користи колачиће (\'\'cookies\'\') да би се корисници пријавили. Ви сте онемогућили колачиће на свом рачунару. Молимо омогућите их и покушајте поново са пријавом.',
+'noname' => 'Нисте изабрали исправно корисничко име.',
+'loginsuccesstitle' => 'Пријављивање успешно',
+'loginsuccess' => '\'\'\'Сада сте пријављени на {{SITENAME}} као "$1".\'\'\'',
+'nosuchuser' => 'Не постоји корисник са именом "$1". Проверите да ли сте добро написали или направите нови кориснички налог.',
+'nosuchusershort' => 'Не постоји корисник са именом "$1". Проверите да ли сте добро написали.',
+'nouserspecified' => 'Морате да назначите корисничко име.',
+'wrongpassword' => 'Лозинка коју сте унели је неисправна. Молимо покушајте поново.',
+'wrongpasswordempty' => 'Лозинка коју сте унели је празна. Молимо покушајте поново.',
+'mailmypassword' => 'Пошаљи ми лозинку',
+'passwordremindertitle' => '{{SITENAME}} подсетник за шифру',
+'passwordremindertext' => 'Неко (вероватно ви, са ИП адресе $1)
+је захтевао да вам пошаљемо нову лозинку за {{SITENAME}} ($4).
+Лозинка за корисника "$2" је сада "$3".
+Сада треба да се пријавите и промените своју лозинку.
+
+Ако је неко други поднео овај захтев или уколико сте се сетили своје лозинке и више не желите да је мењате, можете да игноришете ову поруку и наставите да користите своју стару шифру.',
+'noemail' => 'Не постоји адреса е-поште за корисника "$1".',
+'passwordsent' => 'Нова шифра је послата на адресу е-поште корисника "$1".
+Молимо пријавите се пошто је примите.',
+'blocked-mailpassword' => 'Вашој ИП адреси је блокиран приступ уређивању, из ког разлога није могуће користити функцију подсећања лозинке, ради превенције извршења недозвољене акције.',
+'eauthentsent' => 'Е-пошта за потврду је послата на назначену адресу е-поште. Пре него што се било која друга е-пошта пошаље на налог, мораћете да пратите упутства у е-пошти, да бисте потврдили да је налог заиста ваш.',
+'throttled-mailpassword' => 'Подсетник лозинке вам је већ послао једну поруку у задњих $1 сати. Ради превенције извршења недозвољене акције, подсетник шаље само једну поруку у року од $1 сати.',
+'mailerror' => 'Грешка при слању е-поште: $1',
+'acct_creation_throttle_hit' => 'Жао нам је, већ сте направили $1 корисничка имена. Више није дозвољено.',
+'emailauthenticated' => 'Ваша адреса е-поште је потврђена: $1.',
+'emailnotauthenticated' => 'Ваша адреса е-поште још увек није потврђена. Е-пошта неће бити послата ни за једну од следећих могућности.',
+'noemailprefs' => 'Назначите адресу е-поште како би ове могућности радиле.',
+'emailconfirmlink' => 'Потврдите вашу адресу е-поште',
+'invalidemailaddress' => 'Адреса е-поште не може бити примљена јер изгледа није правилног формата. Молимо унесите добро-форматирану адресу или испразните то поље.',
+'accountcreated' => 'Налог је направљен',
+'accountcreatedtext' => 'Кориснички налог за $1 је направљен.',
+
+# Edit page toolbar
+'bold_sample' => 'подебљан текст',
+'bold_tip' => 'подебљан текст',
+'italic_sample' => 'курзиван текст',
+'italic_tip' => 'курзиван текст',
+'link_sample' => 'наслов везе',
+'link_tip' => 'унутрашња веза',
+'extlink_sample' => 'http://www.adresa.com опис адресе',
+'extlink_tip' => 'спољашња веза (не заборавите префикс http://)',
+'headline_sample' => 'Наслов',
+'headline_tip' => 'Наслов другог нивоа',
+'math_sample' => 'Овде унесите формулу',
+'math_tip' => 'Математичка формула (LaTeX)',
+'nowiki_sample' => 'Додај неформатирани текст овде',
+'nowiki_tip' => 'Игнориши вики форматирање',
+'image_sample' => 'име_слике.jpg',
+'image_tip' => 'Уклопљена слика',
+'media_sample' => 'име_медија_фајла.mp3',
+'media_tip' => 'Путања ка мултимедијалном фајлу',
+'sig_tip' => 'Ваш потпис са тренутним временом',
+'hr_tip' => 'Хоризонтална линија',
+
+# Edit pages
+#
+'summary' => 'Опис измене',
+'subject' => 'Тема/наслов',
+'minoredit' => 'Ово је мала измена',
+'watchthis' => 'Надгледај овај чланак',
+'savearticle' => 'Сними страницу',
+'preview' => 'Претпреглед',
+'showpreview' => 'Прикажи претпреглед',
+'showlivepreview' => 'Живи претпреглед',
+'showdiff' => 'Прикажи промене',
+'anoneditwarning' => 'Нисте пријављени. Ваша ИП адреса ће бити забележена у историји измена ове стране.',
+'missingsummary' => '\'\'\'Подсетник:\'\'\' Нисте унели опис измене. Уколико кликнете Сними страницу поново, ваше измене ће бити снимљене без описа.',
+'missingcommenttext' => 'Молимо унестите коментар испод.',
+'missingcommentheader' => "'''Подсетник:''' Нисте навели наслов овог коментара. Уколико кликнете ''Сними поново'', ваш коментар ће бити снимљен без наслова.",
+'blockedtitle' => 'Корисник је блокиран',
+'blockedtext' => '<big>\'\'\'Ваше корисничко име или ИП адреса је блокирано.\'\'\'</big>
+
+Блокирао вас је корисник $1. Разлог за блокирање је \'\'$2\'\'. 
+
+Можете контактирати корисника $1 или неког другог [[{{ns:project}}:Администратори|администратора]] како бисте разговарали о блокади. Не можете да користите опцију "Пошаљи е-пошту овом кориснику" уколико немате ваљану адресу е-поште наведену у вашим [[Special:Preferences|подешавањима]]. Ваша тренутна ИП адреса је $3. Молимо укључите ово у сваки ваш захтев.',
+'blockedoriginalsource' => 'Извор \'\'\'$1\'\'\' је приказан испод:',
+'blockededitsource' => 'Текст \'\'\'ваших измена\'\'\' за \'\'\'$1\'\'\' је приказан испод:',
+'whitelistedittitle' => 'Обавезно је пријављивање за уређивање',
+'whitelistedittext' => 'Морате да се [[{{ns:special}}:Userlogin|пријавите]] да бисте мењали чланке.',
+'whitelistreadtitle' => 'Обавезно је пријављивање за читање',
+'whitelistreadtext' => 'Морате да се [[{{ns:special}}:Userlogin|пријавите]] да бисте читали чланке.',
+'whitelistacctitle' => 'Није вам дозвољено да направите налог',
+'whitelistacctext' => 'Да би вам било дозвољено да правите налоге на овом викију морате да се [[{{ns:special}}:Userlogin|пријавите]] и имате одговарајућа овлашћења.',
+'confirmedittitle' => 'Потребна је потврда адресе е-поштe за уређивање',
+'confirmedittext' => 'Морате потврдити вашу адресу е-поште пре уређивања страна. Молимо поставите и потврдите адресу ваше е-поште преко ваших [[{{ns:special}}:Preferences|корисничких подешавања]].',
+'loginreqtitle' => 'Потребно [[{{ns:special}}:Userlogin|пријављивање]]',
+'loginreqlink' => 'пријава',
+'loginreqpagetext' => 'Морате $1 да бисте видели остале стране.',
+'accmailtitle' => 'Лозинка је послата.',
+'accmailtext' => 'Лозинка за налог "$1" је послата на адресу $2.',
+'newarticle' => '(Нови)',
+'newarticletext' => 'Пратили сте везу ка страници која још не постоји.
+Да бисте је направили, почните да куцате у пољу испод
+(погледајте [[{{ns:help}}:Садржај|помоћ]] за више информација).
+Ако сте дошли овде грешком, само кликните дугме \'\'\'back\'\'\' дугме вашег браузера.',
+'anontalkpagetext' => '---- \'\'Ово је страница за разговор за анонимног корисника који још није направио налог или га не користи. Због тога морамо да користимо бројчану ИП адресу како бисмо идентификовали њега или њу. Такву адресу може делити више корисника. Ако сте анонимни корисник и мислите да су вам упућене небитне примедбе, молимо вас да [[{{ns:special}}:Userlogin|направите налог или се пријавите]] да бисте избегли будућу забуну са осталим анонимним корисницима.\'\'',
+'noarticletext' => 'Тренутно нема текста на овој страници. Можете [[{{ns:special}}:Search/{{PAGENAME}}|претражити овај назив]] у осталим страницама или [{{fullurl:{{FULLPAGENAME}}|action=edit}} уредити ову страницу].',
+'clearyourcache' => '\'\'\'Запамтите:\'\'\' Након снимања, можда морате очистити кеш вашег браузера да бисте видели промене. \'\'\'Mozilla / Firefox / Safari:\'\'\' држите \'\'Shift\'\' док кликћете \'\'Reload\'\' или притисните  \'\'Shift+Ctrl+R\'\' (\'\'Cmd-Shift-R\'\' на \'\'Apple Mac\'\' машини); \'\'\'IE:\'\'\' држите \'\'Ctrl\'\' док кликћете \'\'Refresh\'\' или притисните \'\'Ctrl-F5\'\'; \'\'\'Konqueror:\'\'\': само кликните \'\'Reload\'\' дугме или притисните \'\'F5\'\'; корисници \'\'\'Оpera\'\'\' браузера можда морају да у потпуности очисте свој кеш преко \'\'Tools→Preferences\'\'.',
+'usercssjsyoucanpreview' => '<strong>Савет:</strong> Кориситите \'Прикажи претпреглед\' дугме да тестирате свој нови CSS/JS пре снимања.',
+'usercsspreview' => '\'\'\'Запамтите ово је само претпреглед вашег CSS и да још увек није снимљен!\'\'\'',
+'userjspreview' => '\'\'\'Запамтите ово је само претпреглед ваше JavaScript-е и да још увек није снимљен!\'\'\'',
+'userinvalidcssjstitle' => '\'\'\'Пажња:\'\'\' Не постоји кожа "$1". Запамтите да личне .css и .js користе мала почетна слова, нпр. Корисник:Петар/monobook.css а не Корисник:Петар/Monobook.css.',
+'updated' => '(Ажурирано)',
+'note' => '<strong>Напомена:</strong>',
+'previewnote' => '<strong>Ово само претпреглед; измене још нису сачуване!</strong>',
+'session_fail_preview' => '<strong>Жао нам је! Нисмо могли да обрадимо вашу измену због губитка података сеансе. Молимо покушајте касније. Ако и даље не ради, покушајте да се одјавите и поново пријавите.</strong>',
+'previewconflict' => 'Овај претпреглед осликава како ће текст у
+текстуалном пољу изгледати ако се одлучите да га снимите.',
+'session_fail_preview_html' => '<strong>Жао нам је! Нисмо могли да обрадимо вашу измену због губитка података сеансе.</strong>
+
+\'\'Због тога што ова вики има омогућен сиров HTML, претпреглед је сакривен као предострожност против JavaScript напада.\'\'
+
+<strong>Ако сте покушали да направите праву измену, молимо покушајте поново. Ако и даље не ради, покушајте да се одјавите и поново пријавите.</strong>',
+'importing' => 'Увоз у току: $1',
+'editing' => 'Уређујете $1',
+'editinguser' => 'Уређујете $1',
+'editingsection' => 'Уређујете $1 (део)',
+'editingcomment' => 'Уређујете $1 (коментар)',
+'editconflict' => 'Сукобљене измене: $1',
+'explainconflict' => 'Неко други је променио ову страницу откад сте ви почели да је мењате.
+Горње текстуално поље садржи текст странице какав тренутно постоји.
+Ваше измене су приказане у доњем тексту.
+Мораћете да унесете своје промене у постојећи текст.
+<b>Само</b> текст у горњем текстуалном пољу ће бити снимљен када
+притиснете "Сними страницу".<br />',
+'yourtext' => 'Ваш текст',
+'storedversion' => 'Ускладиштена верзија',
+'nonunicodebrowser' => '<strong>УПОЗОРЕЊЕ: Ваш браузер не подржава уникод. Молимо промените га пре него што почнете са уређивањем чланка.</strong>',
+'editingold' => '<strong>ПАЖЊА: Ви мењате старију ревизију ове странице.
+Ако је снимите, све промене учињене од ове ревизије биће изгубљене.</strong>',
+'yourdiff' => 'Разлике',
+'copyrightwarning' => 'Напомена: За све ваше доприносе се сматра да су издати под $2 (видите $1 за детаље). Ако не желите да се ваши доприноси немилосрдно мењају, не шаљите их овде.<br />
+Такође нам обећавате да сте ово сами написали или прекопирали из извора у јавном власништву или сличног слободног извора.
+<strong>НЕ ШАЉИТЕ РАДОВЕ ЗАШТИЋЕНЕ АУТОРСКИМ ПРАВИМА БЕЗ ДОЗВОЛЕ!</strong>',
+'copyrightwarning2' => 'Напомена: Све ваше доприносе остали корисници могу да мењају или уклоне. Ако не желите да се ваши доприноси немилосрдно мењају, не шаљите их овде.<br />
+Такође нам обећавате да сте ово сами написали или прекопирали из извора у јавном власништву или сличног слободног извора (видите $1 за детаље).
+<strong>НЕ ШАЉИТЕ РАДОВЕ ЗАШТИЋЕНЕ АУТОРСКИМ ПРАВИМА БЕЗ ДОЗВОЛЕ!</strong>',
+'longpagewarning' => '<strong>ПАЖЊА: Ова страница има $1 килобајта; неки браузери имају проблема са уређивањем страна које имају близу или више од 32 килобајта. Молимо вас да размотрите разбијање странице на мање делове.</strong>',
+'longpageerror' => '<strong>ГРЕШКА: Текст који снимате је велик $1 килобајта, што је веће од максимално дозвољене величине која износи $2 килобајта. Немогуће је снимити страницу.</strong>',
+'readonlywarning' => '<strong>ПАЖЊА: База је управо закључана због одржавања,
+тако да сада нећете моћи да снимите своје измене. Можда би било добро да ископирате текст у неки едитор текста и снимите га за касније.</strong>',
+'protectedpagewarning' => '<strong>ПАЖЊА: Ова страница је закључана тако да само корисници са
+администраторским привилегијама могу да је мењају. Уверите се
+да пратите [[{{ns:project}}:Правила о заштити страница|правила о заштити страница]].</strong>',
+'semiprotectedpagewarning' => '\'\'\'Напомена:\'\'\' Ова страница је закључана тако да је само регистровани корисници могу уређивати.',
+'templatesused' => 'Шаблони који се користе на овој страници:',
+'edittools' => '<!-- Текст одавде ће бити показан испод формулара за уређивање и слање слика. -->',
+'nocreatetitle' => 'Прављење странице ограничено',
+'nocreatetext' => 'На овом сајту је ограничено прављење нових страница. Можете се вратити и уредити већ постојећу страну или [[Посебно:Userlogin|се пријавити или направити налог]].',
+'cantcreateaccounttitle' => 'Не може да се направи налог',
+'cantcreateaccounttext' => 'Прављење налога са ове ИП адресе (<b>$1</b>) је блокирано. 
+Ово је вероватно због учесталог вандализма из ваше школе или Интернет сервис провајдера.',
+
+# History pages
+#
+'revhistory' => 'Историја измена',
+'viewpagelogs' => 'Погледај протоколе за ову страну',
+'nohistory' => 'Не постоји историја измена за ову страницу.',
+'revnotfound' => 'Ревизија није пронађена',
+'revnotfoundtext' => 'Старија ревизија ове странице коју сте затражили није нађена.
+Молимо вас да проверите УРЛ који сте употребили да бисте приступили овој страници.',
+'loadhist' => 'Учитавам историју странице',
+'currentrev' => 'Тренутна ревизија',
+'revisionasof' => 'Ревизија од $1',
+'revision-info' => 'Ревизија од $1; $2',
+'previousrevision' => '← Претходна ревизија',
+'nextrevision' => 'Следећа ревизија →',
+'currentrevisionlink' => 'Тренутна ревизија',
+'cur' => 'трен',
+'next' => 'след',
+'last' => 'посл',
+'orig' => 'ориг',
+'histlegend' => 'Одабирање разлика: одаберите кутијице ревизија за упоређивање и притисните ентер или дугме на дну.<br />
+Објашњење: (трен) = разлика са тренутном верзијом,
+(посл) = разлика са претходном верзијом, М = мала измена',
+'deletedrev' => '[обрисан]',
+'histfirst' => 'Најраније',
+'histlast' => 'Последње',
+'rev-deleted-comment' => '(коментар уклоњен)',
+'rev-deleted-user' => '(корисничко име уклоњено)',
+'rev-deleted-text-permission' => '<div class="mw-warning plainlinks">
+Ревизија ове странице је уклоњена из јавних архива.
+Могуће да има више детаља у [{{fullurl:Special:Log/delete|page={{PAGENAMEE}}}} историји брисања].
+</div>',
+'rev-deleted-text-view' => '<div class="mw-warning plainlinks">
+Ревизија ове странице је уклоњена из јавних архива.
+Као администратор, можете да је погледате;
+Могуће да има више детаља у [{{fullurl:Special:Log/delete|page={{PAGENAMEE}}}} историји брисања].
+</div>',
+'rev-delundel' => 'покажи/сакриј',
+
+'history-feed-title' => 'Историја ревизија',
+'history-feed-description' => 'Историја ревизија за ову страну на викију',
+'history-feed-item-nocomment' => '$1, $2', # user at time
+'history-feed-empty' => 'Тражена страница не постоји.
+Могуће да је обрисана из викија или преименована.
+Покушајте [[Посебно:Search|да претражите вики]] за релевантне нове стране.',
+
+# Revision deletion
+#
+'revisiondelete' => 'Обриши/врати ревизију',
+'revdelete-nooldid-title' => 'Нема одабране ревизије',
+'revdelete-nooldid-text' => 'Нисте одабрали жељену ревизију или ревизије како бисте укључили ове функције.',
+'revdelete-selected' => 'Изабрано ревизија од [[:$1]]:',
+'revdelete-text' => 'Обрисане ревизије ће се и даље појављивати на историји странице,
+али ће њихов садржај бити скривен јавности.
+
+Остали администратори на овој Википедији ће и даље имати могућност да виде скривени садржај и моћи ће да га врате поново путем ове исте команде, све уколико нису примењене додатне рестрикције оператора сајта.',
+'revdelete-legend' => 'Постави рестрикције ревизија:',
+'revdelete-hide-text' => 'Сакриј текст ревизије',
+'revdelete-hide-comment' => 'Сакриј опис измене',
+'revdelete-hide-user' => 'Сакриј корисничко име/ИП адресу корисника који је уређивао страницу',
+'revdelete-hide-restricted' => 'Примени ове рестрикције за администраторе исто као и за остале',
+'revdelete-log' => 'Коментар протокола:',
+'revdelete-submit' => 'Примени на изабране ревизије',
+'revdelete-logentry' => 'промењен приказ ревизије за [[$1]]',
+
+# Diffs
+#
+'difference' => '(Разлика између ревизија)',
+'loadingrev' => 'учитавам ревизију за разлику',
+'lineno' => 'Линија $1:',
+'editcurrent' => 'Измени тренутну верзију ове странице',
+'selectnewerversionfordiff' => 'Изабери новију верзију за упоређивање',
+'selectolderversionfordiff' => 'Изабери старију верзију за упоређивање',
+'compareselectedversions' => 'Упореди означене верзије',
+
+# Search results
+#
+'searchresults' => 'Резултати претраге',
+'searchresulttext' => 'За више информација о претраживању сајта {{SITENAME}}, погледајте [[{{ns:project}}:Претраживање|Претраживање сајта {{SITENAME}}]].',
+'searchsubtitle' => 'Тражили сте \'\'\'[[:$1]]\'\'\'',
+'searchsubtitleinvalid' => 'Тражили сте \'\'\'$1\'\'\'',
+'badquery' => 'Лоше обликован упит за претрагу',
+'badquerytext' => 'Нисмо могли да обрадимо ваш упит.
+Ово је вероватно због тога што сте покушали да тражите
+реч краћу од три слова, што тренутно није подржано.
+Такође је могуће да сте погрешно укуцали израз, на
+пример "риба има има крљушти".
+Молимо вас покушајте неким другим упитом.',
+'matchtotals' => 'Упит "$1" је нађен у $2 наслова чланака
+и текст $3 чланака.',
+'noexactmatch' => 'Не постоји страница са насловом "$1". Можете [[$1|направити ову страницу]].',
+'titlematches' => 'Наслов странице одговара',
+'notitlematches' => 'Ниједан наслов странице не одговара',
+'textmatches' => 'Текст странице одговара',
+'notextmatches' => 'Ниједан текст странице не одговара',
+'prevn' => 'претходних $1',
+'nextn' => 'следећих $1',
+'viewprevnext' => 'Погледај ($1) ($2) ($3).',
+'showingresults' => 'Приказујем испод <b>$1</b> резултата почев од #<b>$2</b>.',
+'showingresultsnum' => 'Приказујем испод <b>$3</b> резултате почев од #<b>$2</b>.',
+'nonefound' => '\'\'\'Напомена\'\'\': неуспешне претраге су
+често изазване тражењем честих речи као "је" или "од",
+које нису индексиране, или навођењем више од једног израза за тражење (само странице
+које садрже све изразе који се траже ће се појавити у резултату).',
+'powersearch' => 'Тражи',
+'powersearchtext' => 'Претрага у именским просторима:<br />$1<br />$2 Излистај преусмерења<br />Тражи $3 $9',
+'searchdisabled' => 'Претрага за сајт {{SITENAME}} је онемогућена. У међувремену, можете користити Гугл претрагу. Имајте на уму да индекси Гугла за сајт {{SITENAME}} могу бити застарели.',
+
+'blanknamespace' => '(Главно)',
+
+# Preferences page
+#
+'preferences' => 'Подешавања',
+'mypreferences' => 'Моја подешавања',
+'prefsnologin' => 'Нисте пријављени',
+'prefsnologintext' => 'Морате бити [[{{ns:special}}:Userlogin|пријављени]]
+да бисте подешавали корисничка подешавања.',
+'prefsreset' => 'Враћена су ускладиштена подешавања.',
+'qbsettings' => 'Брза палета',
+'qbsettings-none'	=> 'Никаква',
+'qbsettings-fixedleft'	=> 'Причвршћена лево',
+'qbsettings-fixedright'	=> 'Причвршћена десно',
+'qbsettings-floatingleft'	=> 'Плутајућа лево',
+'changepassword' => 'Промени лозинку',
+'skin' => 'Кожа',
+'math' => 'Математике',
+'dateformat' => 'Формат датума',
+'datedefault' => 'Није битно',
+'datetime' => 'Датум и време',
+'math_failure' => 'Неуспех при парсирању',
+'math_unknown_error' => 'непозната грешка',
+'math_unknown_function' => 'непозната функција',
+'math_lexing_error' => 'речничка грешка',
+'math_syntax_error' => 'синтаксна грешка',
+'math_image_error' => 'PNG конверзија неуспешна; проверите тачну инсталацију latex-а, dvips-а, gs-а и convert-а',
+'math_bad_tmpdir' => 'Не могу да напишем или направим привремени math директоријум',
+'math_bad_output' => 'Не могу да напишем или направим директоријум за math излаз.',
+'math_notexvc' => 'Недостаје извршно texvc; молимо погледајте math/README да бисте подесили.',
+'prefs-personal' => 'Корисничка подешавања',
+'prefs-rc' => 'Скорашње измене',
+'prefs-watchlist' => 'Списак надгледања',
+'prefs-watchlist-days' => 'Број дана који треба да се види на списку надгледања:',
+'prefs-watchlist-edits' => 'Број измена који треба да се види на проширеном списку надгледања:',
+'prefs-misc' => 'Разно',
+'saveprefs' => 'Сачувај',
+'resetprefs' => 'Врати',
+'oldpassword' => 'Стара лозинка:',
+'newpassword' => 'Нова лозинка:',
+'retypenew' => 'Поново откуцајте нову лозинку:',
+'textboxsize' => 'Величине текстуалног поља',
+'rows' => 'Редова',
+'columns' => 'Колона',
+'searchresultshead' => 'Претрага',
+'resultsperpage' => 'Погодака по страници:',
+'contextlines' => 'Линија по поготку:',
+'contextchars' => 'Карактера контекста по линији:',
+'stubthreshold' => 'Граница за приказивање клица:',
+'recentchangescount' => 'Број наслова у скорашњим изменама:',
+'savedprefs' => 'Ваша подешавања су сачувана.',
+'timezonelegend' => 'Временска зона',
+'timezonetext' => 'Број сати за који се ваше локално време разликује од серверског времена (UTC).',
+'localtime' => 'Локално време',
+'timezoneoffset' => 'Одступање¹',
+'servertime' => 'Време на серверу',
+'guesstimezone' => 'Попуни из браузера',
+'allowemail' => 'Омогући е-пошту од других корисника',
+'defaultns' => 'По стандарду тражи у овим именским просторима:',
+'default' => 'стандард',
+'files' => 'Фајлови',
+
+# User rights
+'userrights-lookup-user' => 'Управљај корисничким групама',
+'userrights-user-editname' => 'Унесите корисничко име:',
+'editusergroup' => 'Мењај групе корисника',
+
+'userrights-editusergroup' => 'Промени корисничке групе',
+'saveusergroups' => 'Сачувај корисничке групе',
+'userrights-groupsmember' => 'Члан:',
+'userrights-groupsavailable' => 'Доступне групе:',
+'userrights-groupshelp' => 'Одабране групе од којих желите да се уклони корисник или да се дода.
+Неодабране групе неће бити промењене. Можете да деселектујете групу користећи CTRL + леви клик',
+
+# Groups
+'group' => 'Група:',
+'group-bot' => 'ботови',
+'group-sysop' => 'администратори',
+'group-bureaucrat' => 'бирократе',
+'group-all' => '(сви)',
+
+'group-bot-member' => 'бот',
+'group-sysop-member' => 'администратор',
+'group-bureaucrat-member' => 'бирократа',
+
+'grouppage-bot' => 'Project:Ботови',
+'grouppage-sysop' => 'Project:Списак администратора',
+'grouppage-bureaucrat' => 'Project:Бирократе',
+
+# Recent changes
+#
+'changes' => 'измене',
+'recentchanges' => 'Скорашње измене',
+'recentchangestext' => 'Овде пратите најскорије измене на викију.',
+
+'rcnote' => 'Испод је последњих <strong>$1</strong> промена у последњих <strong>$2</strong> дана.',
+'rcnotefrom' => 'Испод су промене од <b>$2</b> (до <b>$1</b> приказано).',
+'rclistfrom' => 'Покажи нове промене почев од $1',
+'rcshowhideminor' => '$1 мале измене',
+'rcshowhidebots' => '$1 ботове',
+'rcshowhideliu' => '$1 пријављене кориснике',
+'rcshowhideanons' => '$1 анонимне кориснике',
+'rcshowhidepatr' => '$1 патролиране измене',
+'rcshowhidemine' => '$1 сопствене измене',
+'rclinks' => 'Покажи последњих $1 промена у последњих $2 дана<br />$3',
+'diff' => 'разл',
+'hist' => 'ист',
+'hide' => 'сакриј',
+'show' => 'покажи',
+'minoreditletter' => 'м',
+'newpageletter' => 'Н',
+'boteditletter' => 'б',
+'sectionlink' => '→',
+'number_of_watching_users_pageview' => '[$1 корисник/а који надгледа/ју]',
+'rc_categories' => 'Ограничи на категорије (раздвоји са "|")',
+'rc_categories_any' => 'Било који',
+
+# Upload
+#
+'upload' => 'Пошаљи фајл',
+'uploadbtn' => 'Пошаљи фајл',
+'reupload' => 'Поново пошаљи',
+'reuploaddesc' => 'Врати се на упитник за слање.',
+'uploadnologin' => 'Нисте пријављени',
+'uploadnologintext' => 'Морате бити [[{{ns:special}}:Userlogin|пријављени]]
+да бисте слали фајлове.',
+'upload_directory_read_only' => 'На директоријум за слање ($1) сервер не може да пише.',
+'uploaderror' => 'Грешка при слању',
+'uploadtext' => 'Користите доњи образац да пошаљете фајлове. За гледање или претраживање већ послатих слика, идите на [[{{ns:special}}:Imagelist|списак послатих фајлова]]. Слања и брисања се бележе у [[{{ns:special}}:Log/upload|историји слања]]
+
+Да бисте убацили слику на страну, користите везу у облику
+\'\'\'<nowiki>[[{{ns:image}}:Фајл.jpg]]</nowiki>\'\'\',
+\'\'\'<nowiki>[[{{ns:image}}:Фајл.png|опис слике]]</nowiki>\'\'\' или
+\'\'\'<nowiki>[[{{ns:media}}:Фајл.ogg]]</nowiki>\'\'\' за директно повезивање на фајл.',
+'uploadlog' => 'историја слања',
+'uploadlogpage' => 'историја слања',
+'uploadlogpagetext' => 'Испод је списак најскоријих слања.',
+'filename' => 'Име фајла',
+'filedesc' => 'Опис',
+'fileuploadsummary' => 'Опис:',
+'filestatus' => 'Статус ауторског права',
+'filesource' => 'Извор',
+'copyrightpage' => 'Project:Ауторска права',
+'copyrightpagename' => 'Ауторска права пројекта {{SITENAME}}',
+'uploadedfiles' => 'Послати фајлови',
+'ignorewarning' => 'Игнориши упозорења и сними датотеку.',
+'ignorewarnings' => 'Игнориши сва упозорења',
+'minlength' => 'Имена слика морају имати бар три слова.',
+'illegalfilename' => 'Фајл "$1" садржи карактере који нису дозвољени у називима страница. Молимо Вас промените име фајла и поново га пошаљите.',
+'badfilename' => 'Име слике је промењено у "$1".',
+'badfiletype' => '".$1" није препоручени формат слике.',
+'largefile' => 'Препоручује се да слике не пређу величину од $1 бајтова; ова слика има $2 бајтова.',
+'largefileserver' => 'Овај фајл је већи него што је подешено да сервер дозволи.',
+'emptyfile' => 'Фајл који сте послали делује да је празан. Ово је могуће због грешке у имену фајла. Молимо проверите да ли стварно желите да пошаљете овај фајл.',
+'fileexists' => 'Фајл са овим именом већ постоји. Молимо проверите $1 ако нисте сигурни да ли желите да га промените.',
+'fileexists-forbidden' => 'Фајл са овим именом већ постоји; молимо вратите се и пошаљите овај фајл под новим именом. [[{{ns:image}}:$1|thumb|center|$1]]',
+'fileexists-shared-forbidden' => 'Фајл са овим именом већ постоји у заједничкој остави; молимо вратите се и пошаљите овај фајл под новим именом. [[{{ns:image}}:$1|thumb|center|$1]]',
+'successfulupload' => 'Успешно слање',
+'fileuploaded' => 'Фајл "$1" је успешно послат.
+Молим пратите ову везу: $2 до странице за опис и унесите
+информације о фајлу, нпр. одакле је, када и
+ко га је направио, и било шта друго што знате о њему.
+Ако је ово слика, можете је унети овако: <tt><nowiki>[[Image:$1|thumb|Опис]]</nowiki></tt>',
+'uploadwarning' => 'Упозорење при слању',
+'savefile' => 'Сними фајл',
+'uploadedimage' => 'послао "[[$1]]"',
+'uploaddisabled' => 'Слање фајлова је искључено.',
+'uploaddisabledtext' => 'Слања фајлова су онемогућена на овом викију.',
+'uploadscripted' => 'Овај фајл садржи ХТМЛ или код скрипте које интернет браузер може погрешно да интерпретира.',
+'uploadcorrupt' => 'Фајл је неисправан или има нетачну екстензију. Молимо проверите фајл и пошаљите га поново.',
+'uploadvirus' => 'Фајл садржи вирус! Детаљи: $1',
+'sourcefilename' => 'Име фајла извора',
+'destfilename' => 'Циљано име фајла',
+'watchthisupload' => 'Надгледај страницу',
+'filewasdeleted' => 'Фајл са овим именом је раније послат, а касније обрисан. Требало би да проверите $1 пре него што наставите са поновним слањем.',
+
+'upload-proto-error' => 'Некоректни протокол',
+'upload-proto-error-text' => 'Слање екстерних фајлова захтева УРЛове који почињу са <code>http://</code> или <code>ftp://</code>.',
+'upload-file-error' => 'Интерна грешка',
+'upload-file-error-text' => 'Десила се интерна грешка при покушају прављења привременог фајла на серверу. Контактирајте систем администратора.',
+'upload-misc-error' => 'Непозната грешка при слању фајла',
+'upload-misc-error-text' => 'Непозната грешка при слању фајла. Проверите да ли је УРЛ исправан и покушајте поново. Ако проблем остане, контактирајте систем администратора.',
+# Some likely curl errors.  More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
+'upload-curl-error6' => "УРЛ није доступан",
+'upload-curl-error6-text' => 'УРЛ који сте унели није доступан. Урадите дупли клик на УРЛ да проверите да ли је адреса доступна.',
+'upload-curl-error28' => 'Тајмаут грешка',
+'upload-curl-error28-text' => 'Сајту је требало превише времена да одговори. Проверите да ли сајт ради, или сачекајте мало и покушајте поново.',
+
+'license' => 'Лиценца',
+'nolicense' => 'Нема',
+'upload_source_url' => ' (валидан, јавно доступан УРЛ)',
+'upload_source_file' => ' (фајл на вашем рачунару)',
+
+# Image list
+#
+'imagelist' => 'Списак слика',
+'imagelisttext' => 'Испод је списак од \'\'\'$1\'\'\' {{plural:$1|фајла|фајла|фајлова}} поређаних $2.',
+'imagelistforuser' => 'Ово је списак слика које је послао корисник $1.',
+'getimagelist' => 'прибављам списак слика',
+'ilsubmit' => 'Тражи',
+'showlast' => 'Прикажи последњих $1 слика поређаних $2.',
+'bydate' => 'по датуму',
+'byname' => 'по имену',
+'bysize' => 'по величини',
+'imgdelete' => 'обр',
+'imgdesc' => 'опис',
+'imgfile' => 'фајл',
+'imghistory' => 'историја слике',
+'imglegend' => 'Објашњење: (опис) = прикажи/измени опис слике.',
+'revertimg' => 'врт',
+'deleteimg' => 'обр',
+'deleteimgcompletely' => 'Обриши све ревизије овог фајла',
+'imghistlegend' => 'Објашњење: (трен) = ово је тренутна слика, (обр) = обриши
+ову стару верзију, (врт) = врати на ову стару верзију.
+<br /><i>Кликните на датум да видите слику послату тог датума</i>.',
+'imagelinks' => 'Употреба слике',
+'linkstoimage' => 'Следеће странице користе овај фајл:',
+'nolinkstoimage' => 'Нема страница које користе овај фајл.',
+'sharedupload' => 'Ова слика је са заједничке оставе и можда је користе остали пројекти.',
+'shareduploadwiki' => 'Молимо погледајте $1 за даље информације.',
+'shareduploadwiki-linktext' => 'страна за опис фајла',
+'noimage' => 'Не постоји фајл са овим именом, можете га $1',
+'noimage-linktext' => 'послати',
+'uploadnewversion-linktext' => 'Пошаљите новију верзију овог фајла',
+'imagelist_date' => 'Датум',
+'imagelist_name' => 'Име',
+'imagelist_user' => 'Корисник',
+'imagelist_size' => 'Величина (бајтови)',
+'imagelist_description' => 'Опис слике',
+'imagelist_search_for' => 'Тражи име слике:',
+
+# Mime search
+#
+'mimesearch' => 'МИМЕ претрага',
+'mimetype' => 'МИМЕ тип:',
+'download' => 'Преузми',
+
+# Unwatchedpages
+#
+'unwatchedpages' => 'Ненадгледане странице',
+
+# List redirects
+'listredirects' => 'Списак преусмерења',
+
+# Unused templates
+'unusedtemplates' => 'Неискоришћени шаблони',
+'unusedtemplatestext' => 'Ова страна наводи све странице у именском простору шаблона које нису укључене ни на једној другој страни. Не заборавите да проверите остале везе ка шаблонима пре него што их обришете.',
+'unusedtemplateswlh' => 'остале везе',
+
+# Random redirect
+'randomredirect' => 'Случајно преусмерење',
+
+# Statistics
+#
+'statistics' => 'Статистике',
+'sitestats' => 'Статистике сајта',
+'userstats' => 'Статистике корисника',
+'sitestatstext' => 'Постоји укупно \'\'\'$1\'\'\' страница у бази података. Овај број укључује стране за разговор, странице о сајту, преусмерења, чланке без иједне повезнице и остале странице које се не могу рачунати као чланци. Не рачунајући њих, постоји \'\'\'$2\'\'\' страница које су вероватно легитимни чланци.
+
+На овај сајт је послато \'\'\'$8\'\'\' слика.
+
+Странице су укупно погледане \'\'\'$3\'\'\' пута и \'\'\'$4\'\'\' измена од постављања викија. Ово значи да је било у просеку \'\'\'$5\'\'\' измена по страници и \'\'\'$6\'\'\' погледа по страници.
+
+Дужина реда за послове износи \'\'\'$7\'\'\'',
+'userstatstext' => 'Постоји \'\'\'$1\'\'\' регистрованих корисника, од којих су \'\'\'$2\'\'\' (или $4%) администратори (погледајте $3).',
+'statistics-mostpopular' => 'Најпосећеније странице',
+
+'disambiguations' => 'Странице за вишезначне одреднице',
+'disambiguationspage' => '{{ns:template}}:Вишезначна одредница',
+'disambiguationstext' => 'Следећи чланци се повезују са <i>вишезначном одредницом</i>. Уместо тога, они би требало да се повезују са одговарајућом темом.<br />Страница се третира да је вишезначна одредница ако је повезана са $1.<br />Повезнице из осталих именских простора <i>нису</i> наведене овде.',
+
+'doubleredirects' => 'Двострука преусмерења',
+'doubleredirectstext' => 'Сваки ред садржи везе на прво и друго преусмерење, као и на прву линију текста другог преусмерења, што обично даје "прави" циљни чланак, на који би прво преусмерење и требало да показује.',
+
+'brokenredirects' => 'Покварена преусмерења',
+'brokenredirectstext' => 'Следећа преусмерења су повезана на непостојећи чланак.',
+
+# Miscellaneous special pages
+#
+'nbytes' => '$1 {{PLURAL:$1|бајт|бајта|бајтова}}',
+'ncategories' => '$1 {{PLURAL:$1|категорија|категорије|категорија}}',
+'nlinks' => '$1 {{PLURAL:$1|веза|везе|веза}}',
+'nmembers' => '$1 {{PLURAL:$1|чланак|чланка|чланака}}',
+'nrevisions' => '$1 {{PLURAL:$1|ревизија|ревизије|ревизија}}',
+'nviews' => '$1 пута погледано',
+
+'lonelypages' => 'Сирочићи',
+'lonelypagestext' => 'Следеће странице нису повезане са других страница на овом викију.',
+'uncategorizedpages' => 'Странице без категорије',
+'uncategorizedcategories' => 'Категорије без категорија',
+'uncategorizedimages' => 'Слике без категорија',
+'unusedcategories' => 'Неискоришћене категорије',
+'unusedimages' => 'Неискоришћени фајлови',
+'popularpages' => 'Популарне странице',
+'wantedcategories' => 'Тражене категорије',
+'wantedpages' => 'Тражене странице',
+'mostlinked' => 'Највише повезане стране',
+'mostlinkedcategories' => 'Највише повезане категорије',
+'mostcategories' => 'Чланци са највише категорија',
+'mostimages' => 'Највише повезане слике',
+'mostrevisions' => 'Чланци са највише ревизија',
+'allpages' => 'Све странице',
+'prefixindex' => 'Списак префикса',
+'randompage' => 'Случајна страница',
+'shortpages' => 'Кратке странице',
+'longpages' => 'Дугачке странице',
+'deadendpages' => 'Странице без интерних веза',
+'deadendpagestext' => 'Следеће странице не вежу на друге странице на овом викију.',
+'listusers' => 'Списак корисника',
+'specialpages' => 'Посебне странице',
+'spheading' => 'Посебне странице за све кориснике',
+'restrictedpheading' => 'Заштићене посебне странице',
+'recentchangeslinked' => 'Сродне промене',
+'rclsub' => '(на странице повезане од "$1")',
+'newpages' => 'Нове странице',
+'newpages-username' => 'Корисничко име:',
+'ancientpages' => 'Најстарији чланци',
+'intl' => 'Међујезичке везе',
+'move' => 'премести',
+'movethispage' => 'премести ову страницу',
+'unusedimagestext' => '<p>Обратите пажњу да се други веб сајтови
+могу повезивати на слику директним УРЛ-ом, и тако могу још увек бити приказани овде упркос
+активној употреби.',
+'unusedcategoriestext' => 'Наредне стране категорија постоје иако их ни један други чланак или категорија не користе.',
+
+'booksources' => 'Штампани извори',
+'categoriespagetext' => 'Следеће категорије већ постоје на викију',
+'data' => 'Подаци',
+'userrights' => 'Управљање корисничким правима',
+'groups' => 'Корисничке групе',
+
+'booksourcetext' => 'Испод је списак веза ка другим сајтовима који
+продају нове и коришћене књиге, и такође могу имати даљње информације
+о књигама које тражите.',
+'isbn'	=> 'ISBN',
+'alphaindexline' => '$1 у $2',
+'version' => 'Верзија',
+'log' => 'Протоколи',
+'alllogstext' => 'Комбиновани приказ историја слања, брисања, заштите, блокирања и администраторских права.
+Можете сузити преглед одабиром типа историје, корисничког имена или тражене странице.',
+'logempty' => 'Протокол је празан.',
+
+# Special:Allpages
+'nextpage' => 'Следећа страница ($1)',
+'allpagesfrom' => 'Прикажи странице почетно са:',
+'allarticles' => 'Сви чланци',
+'allinnamespace' => 'Све странице ($1 именски простор)',
+'allnotinnamespace' => 'Све странице (које нису у $1 именском простору)',
+'allpagesprev' => 'Претходна',
+'allpagesnext' => 'Следећа',
+'allpagessubmit' => 'Иди',
+'allpagesprefix' => 'Прикажи стране са префиксом:',
+'allpagesbadtitle' => 'Дати назив странице није добар или садржи међујезички или интервики префикс. Могуће је да садржи карактере који не могу да се користе у називима.',
+
+# Special:Listusers
+'listusersfrom' => 'Прикажи кориснике почевши од:',
+
+# Email this user
+#
+'mailnologin' => 'Нема адресе за слање',
+'mailnologintext' => 'Морате бити [[{{ns:special}}:Userlogin|пријављени]]
+и имати исправну адресу е-поште у вашим [[Special:Preferences|подешавањима]]
+да бисте слали е-пошту другим корисницима.',
+'emailuser' => 'Пошаљи е-пошту овом кориснику',
+'emailpage' => 'Пошаљи е-писмо кориснику',
+'emailpagetext' => 'Ако је овај корисник унео исправну адресу е-поште у
+своја корисничка подешавања, упитник испод ће послати једну поруку.
+Адреса е-поште коју сте ви унели у својим корисничким подешавањима ће се појавити
+као "From" адреса поруке, тако да ће прималац моћи да одговори.',
+'usermailererror' => 'Објекат поште је вратио грешку:',
+'defemailsubject' => '{{SITENAME}} е-пошта',
+'noemailtitle' => 'Нема адресе е-поште',
+'noemailtext' => 'Овај корисник није навео исправну адресу е-поште,
+или је изабрао да не прима е-пошту од других корисника.',
+'emailfrom' => 'Од',
+'emailto' => 'За',
+'emailsubject' => 'Тема',
+'emailmessage' => 'Порука',
+'emailsend' => 'Пошаљи',
+'emailccme' => 'Пошаљи ми копију моје поруке у моје сандуче е-поште.',
+'emailccsubject' => 'Копија ваше поруке на $1: $2',
+'emailsent' => 'Порука послата',
+'emailsenttext' => 'Ваша порука је послата електронском поштом.',
+
+# Watchlist
+'watchlist' => 'Мој списак надгледања',
+'mywatchlist' => 'Мој списак надгледања',
+'watchlistfor' => '(за \'\'\'$1\'\'\')',
+'nowatchlist' => 'Немате ништа на свом списку надгледања.',
+'watchlistanontext' => 'Молимо $1 да бисте гледали или мењали ставке на вашем списку надгледања.',
+'watchlistcount' => '\'\'\'Имате $1 {{plural:$1|ставку|ставке|ставки}} на вашем списку надгледања, укључујући стране за разговор.\'\'\'',
+'clearwatchlist' => 'Обриши списак надгледања',
+'watchlistcleartext' => 'Да ли сте сигурни да желите да их уклоните?',
+'watchlistclearbutton' => 'Обриши списак надгледања',
+'watchlistcleardone' => 'Ваш списак надгледања је обрисан. $1 {{plural:$1|ставка|ставке|ставки}} је уклоњено.',
+'watchnologin' => 'Нисте пријављени',
+'watchnologintext' => 'Морате бити [[{{ns:special}}:Userlogin|пријављени]] да бисте мењали списак надгледања.',
+'addedwatch' => 'Додато списку надгледања',
+'addedwatchtext' => 'Страница "[[:$1]]" је додата вашем [[{{ns:special}}:Watchlist|списку надгледања]] .
+Будуће промене на овој страници и њој придруженој страници за разговор биће наведене овде, и страница ће бити \'\'\'подебљана\'\'\' у [[{{ns:special}}:Recentchanges|списку скорашњих измена]] да би се лакше уочила.
+
+Ако касније желите да уклоните страницу са вашег списка надгледања, кликните на "не надгледај" на бочној палети.',
+'removedwatch' => 'Уклоњено са списка надгледања',
+'removedwatchtext' => 'Страница "[[:$1]]" је уклоњена са вашег списка надгледања.',
+'watch' => 'надгледај',
+'watchthispage' => 'Надгледај ову страницу',
+'unwatch' => 'Прекини надгледање',
+'unwatchthispage' => 'Прекини надгледање',
+'notanarticle' => 'Није чланак',
+'watchnochange' => 'Ништа што надгледате није промењено у приказаном времену.',
+'watchdetails' => '* $1 страница надгледано не рачунајући странице за разговор;
+* [[{{ns:special}}:Watchlist/edit|прикажи и мењај потпуни списак]]
+* [[{{ns:special}}:Watchlist/clear|уклони све странице]]',
+'wlheader-enotif' => '* Обавештавање е-поштом је омогућено.',
+'wlheader-showupdated' => '* Странице које су измењене од када сте их последњи пут посетили су приказане \'\'\'подебљано\'\'\'',
+'watchmethod-list' => 'проверавам има ли скорашњих измена у надгледаним страницама',
+'watchmethod-recent' => 'проверавам има ли надгледаних страница у скорашњим изменама',
+'removechecked' => 'Уклони обележене уносе са списка надгледања',
+'watchlistcontains' => 'Ваш списак надгледања садржи $1 страница.',
+'watcheditlist' => 'Овде је азбучни списак страница
+које надгледате. Обележите кућице страница које желите да уклоните
+са свог списка надгледања и кликните на дугме \'уклони обележене\'
+на дну екрана (уклањање странице такође уклања и пратећу страну за разговор и обрнуто).',
+'removingchecked' => 'Уклањам обележене ствари са списка надгледања...',
+'couldntremove' => 'Не могу да уклоним ставку \'$1\'...',
+'iteminvalidname' => 'Проблем са ставком \'$1\', неисправно име...',
+'wlnote' => 'Испод је последњих $1 измена у последњих <b>$2</b> сати.',
+'wlshowlast' => 'Прикажи последњих $1 сати $2 дана $3',
+'wlsaved' => 'Ово је сачувана верзија вашег списка надгледања.',
+'wlhideshowown' => '$1 мојe изменe.',
+'wlhideshowbots' => '$1 измена ботова.',
+'wldone' => 'Готово.',
+
+'enotif_mailer' => '{{SITENAME}} пошта обавештења',
+'enotif_reset' => 'Означи све стране као посећене',
+'enotif_newpagetext' => 'Ово је нови чланак.',
+'changed' => 'промењена',
+'created' => 'направљена',
+'enotif_subject' => '{{SITENAME}} страница $PAGETITLE је била $CHANGEDORCREATED од стране $PAGEEDITOR',
+'enotif_lastvisited' => 'Погледајте $1 за све промене од ваше последње посете.',
+'enotif_body' => 'Драги $WATCHINGUSERNAME,
+
+{{SITENAME}} страницаа $PAGETITLE је била $CHANGEDORCREATED ($PAGEEDITDATE) од стране $PAGEEDITOR,
+погледајте $PAGETITLE_URL за тренутну верзију.
+
+$NEWPAGE
+
+Опис измене уредника: $PAGESUMMARY $PAGEMINOREDIT
+
+Контактирајте уредника:
+пошта: $PAGEEDITOR_EMAIL
+вики: $PAGEEDITOR_WIKI
+
+Неће бити других обавештења у случају даљих промена уколико не посетите ову страну.
+Такође можете да ресетујете заставице за обавештења за све ваше надгледане стране на вашем списку надгледања.
+
+             Ваш пријатељски {{SITENAME}} систем обавештавања
+
+--
+Да промените подешавања везана за списак надгледања посетите
+{{fullurl:{{ns:special}}:Watchlist/edit}}
+
+Фидбек и даља помоћ:
+{{fullurl:{{ns:help}}:Садржај}}',
+
+# Delete/protect/revert
+#
+'deletepage' => 'Обриши страницу',
+'confirm' => 'Потврди',
+'excontent' => 'садржај је био: \'$1\'',
+'excontentauthor' => 'садржај је био: \'$1\' (а једину измену је направио \'$2\')',
+'exbeforeblank' => 'садржај пре брисања је био: \'$1\'',
+'exblank' => 'страница је била празна',
+'confirmdelete' => 'Потврди брисање',
+'deletesub' => '(Бришем "$1")',
+'historywarning' => 'Пажња: страница коју желите да обришете има историју:',
+'confirmdeletetext' => 'На путу сте да трајно обришете страницу
+или слику заједно са њеном историјом из базе података.
+Молимо вас потврдите да намеравате да урадите ово, да разумете
+последице, и да ово радите у складу са
+[[{{ns:project}}:Правила и смернице|правилима]].',
+'actioncomplete' => 'Акција завршена',
+'deletedtext' => 'Чланак "$1" је обрисан.
+Погледајте $2 за запис о скорашњим брисањима.',
+'deletedarticle' => 'обрисан "[[$1]]"',
+'dellogpage' => 'историја брисања',
+'dellogpagetext' => 'Испод је списак најскоријих брисања.',
+'deletionlog' => 'историја брисања',
+'reverted' => 'Враћено на ранију ревизију',
+'deletecomment' => 'Разлог за брисање',
+'imagereverted' => 'Враћање на ранију верзију је успешно.',
+'rollback' => 'Врати измене',
+'rollback_short' => 'Врати',
+'rollbacklink' => 'врати',
+'rollbackfailed' => 'Враћање није успело',
+'cantrollback' => 'Не могу да вратим измену; последњи аутор је уједно и једини.',
+'alreadyrolled' => 'Не могу да вратим последњу измену [[:$1]]
+од корисника [[{{ns:user}}:$2|$2]] ([[{{ns:user_talk}}:$2|разговор]]); неко други је већ изменио или вратио чланак.
+
+Последњу измену је направио корисник [[{{ns:user}}:$3|$3]] ([[{{ns:user_talk}}:$3|разговор]]).',
+#   only shown if there is an edit comment
+'editcomment' => 'Коментар измене је: "<i>$1</i>".',
+'revertpage' => 'Враћене измене од [[{{ns:special}}:Contributions/$2|$2]] ([[{{ns:user_talk}}:$2|разговор]]) на последњу измену од корисника [[{{ns:user}}:$1|$1]]',
+'sessionfailure' => 'Изгледа да постоји проблем са вашом сеансом пријаве;
+ова акција је прекинута као предострожност против преотимања сеанси.
+Молимо кликните "back" и поново учитајте страну одакле сте дошли, а онда покушајте поново.',
+'protectlogpage' => 'историја закључавања',
+'protectlogtext' => 'Испод је списак закључавања и откључавања страница.',
+'protectedarticle' => 'заштитио $1',
+'unprotectedarticle' => 'скинуо заштиту са $1',
+'protectsub' => '(стављање заштите "$1")',
+'confirmprotecttext' => 'Да ли заиста желите да заштитите ову страницу?',
+'confirmprotect' => 'Потврдите заштиту',
+'protectmoveonly' => 'Заштићено само од померања',
+'protectcomment' => 'Разлог заштите',
+'unprotectsub' => '(скидање заштите "$1")',
+'confirmunprotecttext' => 'Да ли заиста желите да скинете заштиту са ове странице?',
+'confirmunprotect' => 'Потврдите скидање заштите',
+'unprotectcomment' => 'Разлог за скидање заштите',
+'protect-unchain' => 'Откључај дозволе премештања',
+'protect-text' => 'Овде можете погледати и мењати ниво заштите за страницу <strong>$1</strong>.',
+'protect-viewtext' => 'Ваш налог нема приступ изменама
+нивоа заштите. Ово су тренутна подешавања за страницу <strong>$1</strong>:',
+'protect-default' => '(стандард)',
+'protect-level-autoconfirmed' => 'Блокирај нерегистроване кориснике',
+'protect-level-sysop' => 'Само за администраторе',
+
+# restrictions (nouns)
+'restriction-edit' => 'Уређивање',
+'restriction-move' => 'Премештање',
+
+# Undelete
+'undelete' => 'Погледај обрисане странице',
+'undeletepage' => 'Погледај и врати обрисане странице',
+'viewdeletedpage' => 'Погледај обрисане стране',
+'undeletepagetext' => 'Следеће странице су обрисане али су још увек у архиви и
+могу бити враћене. Архива може бити периодично чишћена.',
+'undeleteextrahelp' => 'Да вратите целу страну, оставите све кућице неоткаченим и кликните на \'\'\'\'\'Врати\'\'\'\'\'. Да извршите селективно враћање, откачите кућице које одговарају ревизији која треба да се врати и кликните на \'\'\'\'\'Врати\'\'\'\'\'. Кликом на \'\'\'\'\'Поништи\'\'\'\'\' ћете обрисати поље за коментар и све кућице.',
+'undeletearticle' => 'Врати обрисани чланак',
+'undeleterevisions' => '$1 ревизија архивирано',
+'undeletehistory' => 'Ако вратите страницу, све ревизије ће бити враћене њеној историји.
+Ако је нова страница истог имена направљена од брисања, враћене
+ревизије ће се појавити у ранијој историји, а тренутна ревизија садашње странице
+неће бити аутоматски замењена.',
+'undeletehistorynoadmin' => 'Ова страна је обрисана. Разлог за брисање се налази у опису испод, заједно са детаљима о кориснику који је мењао ову страну пре брисања. Стварни текст ових обрисаних ревизија је доступан само администраторима.',
+'undeleterevision' => 'Обрисана ревизија од $1',
+'undeleterevision-missing' => 'Некоректна или непостојећа ревизија. Можда је ваш линк погрешан, или је ревизија рестаурирана, или обрисана из архиве.',
+'undeletebtn' => 'Врати!',
+'undeletereset' => 'Поништи',
+'undeletecomment' => 'Коментар:',
+'undeletedarticle' => 'вратио "[[$1]]"',
+'undeletedrevisions' => '$1 ревизија враћено',
+'undeletedrevisions-files' => '$1 {{plural:$1|ревизија|ревизије|ревизија}} и $2 {{plural:$2|фајл|фајла|фајлова}} враћено',
+'undeletedfiles' => '$1 {{plural:$1|фајл враћен|фајла враћена|фајлова враћено}}',
+'cannotundelete' => 'Враћање обрисане верзије није успело; неко други је вратио страницу пре вас.',
+'undeletedpage' => '<big>\'\'\'Страна $1 је враћена\'\'\'</big>
+
+Погледајте [[{{ns:special}}:Log/delete|историју брисања]] за списак скорашњих брисања и враћања.',
+
+# Namespace form on various pages
+'namespace' => 'Именски простор:',
+'invert' => 'Обрни селекцију',
+
+# Contributions
+#
+'contributions' => 'Прилози корисника',
+'mycontris' => 'Моји прилози',
+'contribsub2' => 'За $1 ($2)',
+'nocontribs' => 'Нису нађене промене које задовољавају ове услове.',
+'ucnote' => 'Испод је последњих <b>$1</b> промена у последњих <b>$2</b> дана.',
+'uclinks' => 'Гледај последњих $1 промена; гледај последњих $2 дана.',
+'uctop' => ' (врх)',
+'newbies' => 'новајлије',
+
+'sp-newimages-showfrom' => 'Прикажи нове слике почевши од $1',
+
+'sp-contributions-newest' => 'Најновијих',
+'sp-contributions-oldest' => 'Најстаријих',
+'sp-contributions-newer' => 'Новијих $1',
+'sp-contributions-older' => 'Старијих $1',
+'sp-contributions-newbies-sub' => 'За новајлије',
+
+# What links here
+#
+'whatlinkshere' => 'Шта је повезано овде',
+'notargettitle' => 'Нема циља',
+'notargettext' => 'Нисте навели циљну страницу или корисника
+на коме би се извела ова функција.',
+'linklistsub' => '(списак веза)',
+'linkshere' => 'Следеће странице су повезане овде:',
+'nolinkshere' => 'Ни једна страница није повезана овде.',
+'isredirect' => 'преусмеривач',
+'istemplate' => 'укључивање',
+
+# Block/unblock IP
+#
+'blockip' => 'Блокирај корисника',
+'blockiptext' => 'Употребите доњи упитник да бисте уклонили право писања
+са одређене ИП адресе или корисничког имена.
+Ово би требало да буде урађено само да би се спречио вандализам, и у складу
+са [[{{ns:project}}:Политика|политиком]].
+Унесите конкретан разлог испод (на пример, наводећи које
+странице су вандализоване).',
+'ipaddress' => 'ИП адреса',
+'ipadressorusername' => 'ИП адреса или корисничко име',
+'ipbexpiry' => 'Трајање',
+'ipbreason' => 'Разлог',
+'ipbanononly' => 'Блокирај само анонимне кориснике',
+'ipbcreateaccount' => 'Спречи прављење налога',
+'ipbenableautoblock' => 'Аутоматски блокирај последњу ИП адресу овог корисника, и сваку следећу адресу са које се покуша уређивање.',
+'ipbsubmit' => 'Блокирај овог корисника',
+'ipbother' => 'Остало време',
+'ipboptions' => '2 сата:2 hours,1 дан:1 day,3 дана:3 days,1 недеља:1 week,2 недеље:2 weeks,1 месец:1 month,3 месеца:3 months,6 месеци:6 months,1 година:1 year,бесконачно:infinite',
+'ipbotheroption' => 'остало',
+'badipaddress' => 'Лоша ИП адреса',
+'blockipsuccesssub' => 'Блокирање је успело',
+'blockipsuccesstext' => '[[{{ns:special}}:Contributions/$1|$1]] је блокиран.
+<br />Видите [[{{ns:special}}:Ipblocklist|списак блокирања]] да бисте прегледали блокирања.',
+'unblockip' => 'Одблокирај корисника',
+'unblockiptext' => 'Употребите доњи упитник да бисте вратили право писања
+раније блокираној ИП адреси или корисничком имену.',
+'ipusubmit' => 'Одблокирај ову адресу',
+'unblocked' => '[[{{ns:user}}:$1|$1]] је одблокиран',
+'ipblocklist' => 'Списак блокираних ИП адреса и корисника',
+'blocklistline' => '$1, $2 блокирао корисника [[{{ns:user}}:$3|$3]], (истиче $4)',
+'infiniteblock' => 'бесконачан',
+'expiringblock' => 'истиче $1',
+'anononlyblock' => 'само анонимни',
+'noautoblockblock' => 'Аутоблокирање је онемогућено',
+'createaccountblock' => 'блокирано прављење налога',
+'ipblocklistempty' => 'Списак блокирања је празан.',
+'blocklink' => 'блокирај',
+'unblocklink' => 'одблокирај',
+'contribslink' => 'прилози',
+'autoblocker' => 'Аутоматски сте блокирани јер је вашу ИП адресу скоро користио "[[{{ns:user}}:$1|$1]]". Разлог за блокирање корисника $1 је: "\'\'\'$2\'\'\'".',
+'blocklogpage' => 'историја блокирања',
+'blocklogentry' => 'је блокирао "[[$1]]" са временом истицања блокаде од $2',
+'blocklogtext' => 'Ово је историја блокирања и одблокирања корисника. Аутоматски
+блокиране ИП адресе нису наведене. Погледајте [[{{ns:special}}:Ipblocklist|списак блокираних ИП адреса]] за списак тренутних забрана и блокирања.',
+'unblocklogentry' => 'одблокирао "$1"',
+'range_block_disabled' => 'Администраторска могућност да блокира блокове ИП адреса је искључена.',
+'ipb_expiry_invalid' => 'Погрешно време трајања.',
+'ipb_already_blocked' => '"$1" је већ блокиран',
+'ip_range_invalid' => 'Нетачан блок ИП адреса.',
+'proxyblocker' => 'Блокер проксија',
+'ipb_cant_unblock' => 'Грешка: ИД блока $1 није нађен. Могуће је да је већ одблокиран.',
+'proxyblockreason' => 'Ваша ИП адреса је блокирана јер је она отворени прокси. Молимо контактирајте вашег Интернет сервис провајдера или техничку подршку и обавестите их о овом озбиљном сигурносном проблему.',
+'proxyblocksuccess' => 'Урађено.',
+'sorbs'         => 'SORBS DNSBL',
+'sorbsreason' => 'Ваша ИП адреса је на списку као отворен прокси на [http://www.sorbs.net SORBS] DNSBL.',
+'sorbs_create_account_reason' => 'Ваша ИП адреса се налази на списку као отворени прокси на [http://www.sorbs.net SORBS] DNSBL. Не можете да направите налог',
+
+# Developer tools
+#
+'lockdb' => 'Закључај базу',
+'unlockdb' => 'Откључај базу',
+'lockdbtext' => 'Закључавање базе ће свим корисницима укинути могућност измене страница,
+промене корисничких подешавања, измене списка надгледања, и свега осталог
+што захтева промене у бази.
+Молимо потврдите да је ово заиста оно што намеравате да урадите и да ћете
+откључати базу када завршите посао око њеног одржавања.',
+'unlockdbtext' => 'Откључавање базе ће свим корисницима вратити могућност измене страница,
+промене корисничких подешавања, измене списка надгледања, и свега осталог
+што захтева промене у бази.
+Молимо потврдите да је ово заиста оно што намеравате да урадите.',
+'lockconfirm' => 'Да, заиста желим да закључам базу.',
+'unlockconfirm' => 'Да, заиста желим да откључам базу.',
+'lockbtn' => 'Закључај базу',
+'unlockbtn' => 'Откључај базу',
+'locknoconfirm' => 'Нисте потврдили своју намеру.',
+'lockdbsuccesssub' => 'База је закључана',
+'unlockdbsuccesssub' => 'База је откључана',
+'lockdbsuccesstext' => 'База података је закључана.
+<br />Не заборавите да је [[{{ns:special}}:Unlockdb|откључате]] када завршите са одржавањем.',
+'unlockdbsuccesstext' => 'База података је откључана.',
+'lockfilenotwritable' => 'По фајлу за закључавање базе података не може да се пише. Да бисте закључали или откључали базу, по овом фајлу мора да буде омогућено писање од стране веб сервера.',
+'databasenotlocked' => 'База података није закључана.',
+
+# Make sysop
+'rightslog' => 'историја корисничких права',
+'rightslogtext' => 'Ово је историја измена корисничких права.',
+'rightslogentry' => 'је променио права за $1 са $2 на $3',
+'rightsnone' => '(нема)',
+
+# Move page
+#
+'movepage' => 'Премештање странице',
+'movepagetext' => 'Доњи упитник ће преименовати страницу, премештајући сву
+њену историју на ново име.
+Стари наслов ће постати преусмерење на нови наслов.
+Везе ка старом наслову неће бити промењене; обавезно
+потражите [[{{ns:special}}:DoubleRedirects|двострука]] или [[{{ns:special}}:BrokenRedirects|покварена преусмерења]].
+На вама је одговорност да везе и даље иду тамо где би и требало да иду.
+
+Обратите пажњу да страница \'\'\'неће\'\'\' бити померена ако већ постоји
+страница са новим насловом, осим ако је она празна или преусмерење и нема
+историју промена. Ово значи да не можете преименовати страницу на оно име
+са кога сте је преименовали ако погрешите, и не можете преписати
+постојећу страницу.
+
+<b>ПАЖЊА!</b>
+Ово може бити драстична и неочекивана промена за популарну страницу;
+молимо да будете сигурни да разумете последице овога пре него што
+наставите.',
+'movepagetalktext' => 'Одговарајућа страница за разговор, ако постоји, биће аутоматски премештена истовремено \'\'\'осим ако:\'\'\'
+*Непразна страница за разговор већ постоји под новим именом, или
+*Одбележите доњу кућицу.
+
+У тим случајевима, мораћете ручно да преместите или спојите страницу уколико то желите.',
+'movearticle' => 'Премести страницу',
+'movenologin' => 'Нисте пријављени',
+'movenologintext' => 'Морате бити регистровани корисник и [[Special:Userlogin|пријављени]]
+да бисте преместили страницу.',
+'newtitle' => 'Нови наслов',
+'movepagebtn' => 'премести страницу',
+'pagemovedsub' => 'Премештање успело',
+'pagemovedtext' => 'Страница "[[$1]]" премештена је на "[[$2]]".',
+'articleexists' => 'Страница под тим именом већ постоји, или је
+име које сте изабрали неисправно.
+Молимо изаберите друго име.',
+'talkexists' => '\'\'\'Сама страница је успешно премештена, али
+страница за разговор није могла бити премештена јер таква већ постоји на новом наслову. Молимо вас да их спојите ручно.\'\'\'',
+'movedto' => 'премештена на',
+'movetalk' => 'Премести "страницу за разговор" такође, ако је могуће.',
+'talkpagemoved' => 'Одговарајућа страница за разговор је такође премештена.',
+'talkpagenotmoved' => 'Одговарајућа страница за разговор <strong>није</strong> премештена.',
+'1movedto2' => 'је променио име чланку [[$1]] у [[$2]]',
+'1movedto2_redir' => 'је променио име чланку [[$1]] у [[$2]] путем преусмерења',
+'movelogpage' => 'историја премештања',
+'movelogpagetext' => 'Испод је списак премештања чланака.',
+'movereason' => 'Разлог',
+'revertmove' => 'врати',
+'delete_and_move' => 'Обриши и премести',
+'delete_and_move_text' => '==Потребно брисање==
+
+Циљани чланак "[[$1]]" већ постоји. Да ли желите да га обришете да бисте направили место за премештање?',
+'delete_and_move_confirm' => 'Да, обриши страницу',
+'delete_and_move_reason' => 'Обрисано како би се направило место за премештање',
+'selfmove' => 'Изворни и циљани назив су исти; страна не може да се премести преко саме себе.',
+'immobile_namespace' => 'Циљани назив је посебног типа; не могу да преместе стране у тај именски простор.',
+
+# Export
+
+'export' => 'Извези странице',
+'exporttext' => 'Можете извозити текст и историју промена одређене
+странице или групе страница у XML формату. Ово онда може бити увезено у други
+вики који користи МедијаВики софтвер преко {{ns:special}}:Import странице.
+
+Да бисте извозили странице, унесите називе у текстуалном пољу испод, са једним насловом по реду, и одаберите да ли желите тренутну верзију са свим старим верзијама или само тренутну верзију са информацијама о последњој измени.
+
+У другом случају, можете такође користити везу, нпр. [[{{ns:special}}:Export/{{int:mainpage}}]] за страницу {{int:mainpage}}.',
+'exportcuronly' => 'Укључи само тренутну ревизију, не целу историју',
+'exportnohistory' => '----
+\'\'\'Напомена:\'\'\' извожење пуне историје страна преко овог формулара је онемогућено због серверских разлога.',
+'export-submit' => 'Извоз',
+
+# Namespace 8 related
+
+'allmessages' => 'Системске поруке',
+'allmessagesname' => 'Име',
+'allmessagesdefault' => 'Стандардни текст',
+'allmessagescurrent' => 'Тренутни текст',
+'allmessagestext' => 'Ово је списак свих порука које су у {{ns:MediaWiki}} именском простору',
+'allmessagesnotsupportedUI' => 'Страница {{ns:special}}:Allmessages не подржава вВаш тренутни језик интерфејса <b>$1</b> на овој вики.',
+'allmessagesnotsupportedDB' => 'Страница {{ns:special}}:Allmessages не може да се користи зато што је \'\'\'$wgUseDatabaseMessages\'\'\' искључен.',
+'allmessagesfilter' => 'Филтер за имена порука:',
+'allmessagesmodified' => 'Прикажи само измењене',
+
+# Thumbnails
+'thumbnail-more' => 'увећај',
+'missingimage' => '<b>Овде недостаје слика</b><br /><i>$1</i>',
+'filemissing' => 'Недостаје фајл',
+'thumbnail_error' => 'Грешка при прављењу умањене слике: $1',
+
+# Special:Import
+'import' => 'Увоз страница',
+'importinterwiki' => 'Трансвики увожење',
+'import-interwiki-text' => 'Одаберите вики и назив стране за увоз.
+Датуми ревизије и имена уредника ће бити сачувани.
+Сви трансвики увози су забележени у [[Посебно:Log/import|историји увоза]].',
+'import-interwiki-history' => 'Копирај све ревизије ове стране',
+'import-interwiki-submit' => 'Увези',
+'import-interwiki-namespace' => 'Пребаци странице у именски простор:',
+'importtext' => 'Молимо извезите фајл из изворног викија користећи {{ns:special}}:Export, сачувајте га код себе и пошаљите овде.',
+'importstart' => 'Увожење страна у току...',
+'import-revision-count' => '$1 {{plural:$1|ревизија|ревизије|ревизија}}',
+'importnopages' => 'Нема страна за увоз.',
+'importfailed' => 'Увоз није успео: $1',
+'importunknownsource' => 'Непознати тип извора уноса',
+'importcantopen' => 'Неуспешно отварање фајла за увоз',
+'importbadinterwiki' => 'Лоша интервики веза',
+'importnotext' => 'Страница је празна или без текста.',
+'importsuccess' => 'Успешан увоз!',
+'importhistoryconflict' => 'Постоји конфликтна историја ревизија (можда је ова страница већ увезена раније)',
+'importnosources' => 'Није дефинисан ниједан извор трансвики увожења и директна слања историја су онемогућена.',
+'importnofile' => 'Није послат ниједан увозни фајл.',
+'importuploaderror' => 'Слање увозног фајла није било успешно; могуће је да је фајл већи од дозвољене величине за слање.',
+
+# import log
+'importlogpage' => 'историја увоза',
+'importlogpagetext' => 'Административни увози страница са историјама измена са других викија.',
+'import-logentry-upload' => 'увезао [[$1]] путем слања фајла',
+'import-logentry-upload-detail' => '$1 ревизија/е',
+'import-logentry-interwiki' => 'преместио са другог викија: $1',
+'import-logentry-interwiki-detail' => '$1 ревизија/е од $2',
+
+# Keyboard access keys for power users
+'accesskey-search' => 'f',
+'accesskey-minoredit' => 'i',
+'accesskey-save' => 's',
+'accesskey-preview' => 'p',
+'accesskey-diff' => 'v',
+'accesskey-compareselectedversions' => 'v',
+'accesskey-watch' => 'w',
+
+# tooltip help for some actions, most are in Monobook.js
+'tooltip-search' => 'Претражите вики',
+'tooltip-minoredit' => 'Назначите да се ради о малој измени',
+'tooltip-save' => 'Снимите Ваше измене',
+'tooltip-preview' => 'Претпреглед Ваших измена, молимо користите ово пре снимања!',
+'tooltip-diff' => 'Прикажи које промене сте направили на тексту.',
+'tooltip-compareselectedversions' => 'Погледаj разлике између две одабране верзије ове странице.',
+'tooltip-watch' => 'Додајте ову страницу на Ваш списак надгледања',
+
+# stylesheets
+'common.css' => '/** CSS стављен овде ће се односити на све коже */',
+'monobook.css' => '/* CSS стављен овде ће се односити на кориснике Монобук коже */',
+
+# Metadata
+'nodublincore' => 'Dublin Core RDF метаподаци онемогућени за овај сервер.',
+'nocreativecommons' => 'Creative Commons RDF метаподаци онемогућени за овај сервер.',
+'notacceptable' => 'Вики сервер не може да пружи податке у оном формату који ваш клијент може да прочита.',
+
+# Attribution
+
+'anonymous' => 'Анонимни корисник сајта {{SITENAME}}',
+'siteuser' => '{{SITENAME}} корисник $1',
+'lastmodifiedatby' => 'Ову страницу је последњи пут променио $3 у $2, $1.',
+'and' => 'и',
+'othercontribs' => 'Базирано на раду корисника $1.',
+'others' => 'остали',
+'siteusers' => '{{SITENAME}} корисник (корисници) $1',
+'creditspage' => 'Заслуге за страницу',
+'nocredits' => 'Нису доступне информације о заслугама за ову страницу.',
+
+# Spam protection
+'spamprotectiontitle' => 'Филтер за заштиту од нежељених порука',
+'spamprotectiontext' => 'Страна коју желите да сачувате је блокирана од стране филтера за нежељене поруке. Ово је вероватно изазвано везом ка спољашњем сајту.',
+'spamprotectionmatch' => 'Следећи текст је изазвао наш филтер за нежељене поруке: $1',
+'subcategorycount' => 'У овој категорији се налази {{plural:$1|једна поткатегорија|$1 поткатегорије|$1 поткатегорија}}.',
+'categoryarticlecount' => 'У овој категорији се налази {{plural:$1|Један чланак|$1 чланка|$1 чланака}}.',
+'listingcontinuesabbrev' => ' наст.',
+'spambot_username' => 'Чишћење нежељених порука у МедијаВикију',
+'spam_reverting' => 'Враћање на стару ревизију која не садржи везе ка $1',
+'spam_blanking' => 'Све ревизије су садржале везе ка $1, пражњење',
+
+# Info page
+'infosubtitle' => 'Информације за страницу',
+'numedits' => 'Број промена (чланак): $1',
+'numtalkedits' => 'Број промена (страница за разговор): $1',
+'numwatchers' => 'Број корисника који надгледају: $1',
+'numauthors' => 'Број различитих аутора (чланак): $1',
+'numtalkauthors' => 'Број различитих аутора (страница за разговор): $1',
+
+# Math options
+'mw_math_png' => 'Увек прикажи PNG',
+'mw_math_simple' => 'HTML ако је врло једноставно, иначе PNG',
+'mw_math_html' => 'HTML ако је могуће, иначе PNG',
+'mw_math_source' => 'Остави као ТеХ (за текстуалне браузере)',
+'mw_math_modern' => 'Препоручено за савремене браузере',
+'mw_math_mathml' => 'MathML ако је могуће (експериментално)',
+
+# Patrolling
+'markaspatrolleddiff' => 'Означи као патролиран',
+'markaspatrolledtext' => 'Означи овај чланак као патролиран',
+'markedaspatrolled' => 'Означен као патролиран',
+'markedaspatrolledtext' => 'Изабрана ревизија је означена као патролирана.',
+'rcpatroldisabled' => 'Патрола скорашњих измена онемогућена',
+'rcpatroldisabledtext' => 'Патрола скорашњих измена је тренутно онемогућена.',
+'markedaspatrollederror' => 'Немогуће означити као патролирано',
+'markedaspatrollederrortext' => 'Морате изабрати ревизију да бисте означили као патролирано.',
+
+# Monobook.js: tooltips and access keys for monobook
+'monobook.js' => '/* Deprecated; use [[MediaWiki:common.js]] */',
+
+'accesskey-pt-userpage' => '.',
+'tooltip-pt-userpage' => 'Моја корисничка страница',
+'accesskey-pt-anonuserpage' => '.',
+'tooltip-pt-anonuserpage' => 'Корисничка страница ИП адресе са које уређујете',
+'accesskey-pt-mytalk' => 'n',
+'tooltip-pt-mytalk' => 'Моја страница за разговор',
+'accesskey-pt-anontalk' => 'n',
+'tooltip-pt-anontalk' => 'Разговор о прилозима са ове ИП адресе',
+'accesskey-pt-preferences' => '',
+'tooltip-pt-preferences' => 'Моја корисничка подешавања',
+'accesskey-pt-watchlist' => 'l',
+'tooltip-pt-watchlist' => 'Списак чланака које надгледате',
+'accesskey-pt-mycontris' => 'y',
+'tooltip-pt-mycontris' => 'Списак мојих прилога',
+'accesskey-pt-login' => 'o',
+'tooltip-pt-login' => 'Препоручује се да се пријавите, али није обавезно',
+'accesskey-pt-anonlogin' => 'o',
+'tooltip-pt-anonlogin' => 'Препоручује се да се пријавите, али није обавезно',
+'accesskey-pt-logout' => '',
+'tooltip-pt-logout' => 'Одјави се',
+'accesskey-ca-talk' => 't',
+'tooltip-ca-talk' => 'Разговор о чланку',
+'accesskey-ca-edit' => 'e',
+'tooltip-ca-edit' => 'Можете уредити ову страницу. Молимо користите претпреглед пре сачувавања.',
+'accesskey-ca-addsection' => '+',
+'tooltip-ca-addsection' => 'Додајте коментар на ову дискусију',
+'accesskey-ca-viewsource' => 'e',
+'tooltip-ca-viewsource' => 'Ова страница је закључана. Можете видети њен извор',
+'accesskey-ca-history' => 'h',
+'tooltip-ca-history' => 'Претходне верзије ове странице',
+'accesskey-ca-protect' => '=',
+'tooltip-ca-protect' => 'Заштити ову страницу',
+'accesskey-ca-delete' => 'd',
+'tooltip-ca-delete' => 'Обриши ову страницу',
+'accesskey-ca-undelete' => 'd',
+'tooltip-ca-undelete' => 'Враћати измене које су начињене пре брисања странице',
+'accesskey-ca-move' => 'm',
+'tooltip-ca-move' => 'Премести ову страницу',
+'accesskey-ca-watch' => 'w',
+'tooltip-ca-watch' => 'Додајте ову страницу на Ваш списак надгледања',
+'accesskey-ca-unwatch' => 'w',
+'tooltip-ca-unwatch' => 'Уклоните ову страницу са Вашег списка надгледања',
+'accesskey-search' => 'f',
+'tooltip-search' => 'Претражите овај вики',
+'accesskey-p-logo' => '',
+'tooltip-p-logo' => 'Главна страна',
+'accesskey-n-mainpage' => 'z',
+'tooltip-n-mainpage' => 'Посетите главну страну',
+'accesskey-n-portal' => '',
+'tooltip-n-portal' => 'О пројекту, шта можете да радите и где да пронађете ствари',
+'accesskey-n-currentevents' => '',
+'tooltip-n-currentevents' => 'Сазнајте више о актуелностима',
+'accesskey-n-recentchanges' => 'r',
+'tooltip-n-recentchanges' => 'Списак скорашњих измена на викију',
+'accesskey-n-randompage' => 'x',
+'tooltip-n-randompage' => 'Учитавај случајну страницу',
+'accesskey-n-help' => '',
+'tooltip-n-help' => 'Место где можете да научите нешто',
+'accesskey-n-sitesupport' => '',
+'tooltip-n-sitesupport' => 'Подржите нас',
+'accesskey-t-whatlinkshere' => 'j',
+'tooltip-t-whatlinkshere' => 'Списак свих страница које везују на ову',
+'accesskey-t-recentchangeslinked' => 'k',
+'tooltip-t-recentchangeslinked' => 'Скорашње измене на чланцима повезаним са ове странице',
+'accesskey-feed-rss' => '',
+'tooltip-feed-rss' => 'RSS фид за ову страницу',
+'accesskey-feed-atom' => '',
+'tooltip-feed-atom' => 'Atom фид за ову страницу',
+'accesskey-t-contributions' => '',
+'tooltip-t-contributions' => 'Погледај списак прилога овог корисника',
+'accesskey-t-emailuser' => '',
+'tooltip-t-emailuser' => 'Пошаљи електронску пошту овом кориснику',
+'accesskey-t-upload' => 'u',
+'tooltip-t-upload' => 'Пошаљи слике и медија фајлове',
+'accesskey-t-specialpages' => 'q',
+'tooltip-t-specialpages' => 'Списак свих посебних страница',
+'accesskey-ca-nstab-main' => 'c',
+'tooltip-ca-nstab-main' => 'Погледајте чланак',
+'accesskey-ca-nstab-user' => 'c',
+'tooltip-ca-nstab-user' => 'Погледајте корисничку страницу',
+'accesskey-ca-nstab-media' => 'c',
+'tooltip-ca-nstab-media' => 'Погледајте медија страницу',
+'accesskey-ca-nstab-special' => '',
+'tooltip-ca-nstab-special' => 'Ово је посебна страница, не можете је мењати',
+'accesskey-ca-nstab-wp' => 'c',
+'tooltip-ca-nstab-wp' => 'Погледајте страницу о пројекту',
+'accesskey-ca-nstab-image' => 'c',
+'tooltip-ca-nstab-image' => 'Погледајте страницу слике',
+'accesskey-ca-nstab-mediawiki' => 'c',
+'tooltip-ca-nstab-mediawiki' => 'Погледајте системску поруку',
+'accesskey-ca-nstab-template' => 'c',
+'tooltip-ca-nstab-template' => 'Погледајте шаблон',
+'accesskey-ca-nstab-help' => 'c',
+'tooltip-ca-nstab-help' => 'Погледајте страницу за помоћ',
+'accesskey-ca-nstab-category' => 'c',
+'tooltip-ca-nstab-category' => 'Погледајте страницу категорије',
+
+# image deletion
+'deletedrevision' => 'Обрисана стара ревизија $1.',
+
+# browsing diffs
+'previousdiff' => '← Претходна измена',
+'nextdiff' => 'Следећа измена →',
+
+'imagemaxsize' => 'Ограничи слике на странама за разговор о сликама на:',
+'thumbsize' => 'Величина умањеног приказа :',
+'showbigimage' => 'Прикажи слику веће резолуције ($1x$2, $3 Kb)',
+
+'newimages' => 'Галерија нових слика',
+'showhidebots' => '($1 ботове)',
+'noimages' => 'Нема ништа да се види',
+
+# short names for language variants used for language conversion links.
+# to disable showing a particular link, set it to 'disable', e.g.
+# 'variantname-zh-sg' => 'disable',
+'variantname-zh-cn' => 'cn',
+'variantname-zh-tw' => 'tw',
+'variantname-zh-hk' => 'hk',
+'variantname-zh-sg' => 'sg',
+'variantname-zh' => 'zh',
+# variants for Serbian language
+'variantname-sr-ec' => 'ћирилица',
+'variantname-sr-el' => 'latinica',
+'variantname-sr-jc' => 'јекав',
+'variantname-sr-jl' => 'jekav',
+'variantname-sr' => 'disable',
+
+# labels for User: and Title: on Special:Log pages
+'specialloguserlabel' => 'Корисник:',
+'speciallogtitlelabel' => 'Наслов:',
+
+'passwordtooshort' => 'Ваша шифра је превише кратка. Мора да има бар $1 карактера.',
+
+# Media Warning
+'mediawarning' => '\'\'\'Упозорење\'\'\': Овај фајл садржи лош код, његовим извршавањем можете да угрозите ваш систем.<hr />',
+
+'fileinfo' => '$1KB, МИМЕ тип: <code>$2</code>',
+
+# Metadata
+'metadata' => 'Метаподаци',
+'metadata-help' => 'Овај фајл садржи додатне информације, које су вероватно додали дигитални фотоапарат или скенер који су коришћени да би се направила или дигитализовала слика. Ако је првобитно стање фајла промењено, могуће је да неки детаљи не описују у потпуности измењену слику.',
+'metadata-expand' => 'Покажи детаље',
+'metadata-collapse' => 'Сакриј детаље',
+'metadata-fields' => 'Поља EXIF метаподатака наведена у овој поруци ће бити убачена на страну о слици када се рашири табела за метаподатке. Остала ће бити сакривена по подразумеваном.
+* make
+* model
+* datetimeoriginal
+* exposuretime
+* fnumber
+* focallength',
+
+# Exif tags
+'exif-imagewidth' => 'Ширина',
+'exif-imagelength' => 'Висина',
+'exif-bitspersample' => 'Битова по компоненти',
+'exif-compression' => 'Шема компресије',
+'exif-photometricinterpretation' => 'Композиција пиксела',
+'exif-orientation' => 'Оријентација',
+'exif-samplesperpixel' => 'Број компоненти',
+'exif-planarconfiguration' => 'Принцип распореда података',
+'exif-ycbcrsubsampling' => 'Однос компоненте Y према C',
+'exif-ycbcrpositioning' => 'Размештај компонената Y и C',
+'exif-xresolution' => 'Хоризонатална резолуција',
+'exif-yresolution' => 'Вертикална резолуција',
+'exif-resolutionunit' => 'Јединица резолуције',
+'exif-stripoffsets' => 'Положај блока података',
+'exif-rowsperstrip' => 'Број редова у блоку',
+'exif-stripbytecounts' => 'Величина компресованог блока',
+'exif-jpeginterchangeformat' => 'Удаљеност ЈПЕГ прегледа од почетка фајла',
+'exif-jpeginterchangeformatlength' => 'Количина бајтова ЈПЕГ прегледа',
+'exif-transferfunction' => 'Функција преобликовања колор простора',
+'exif-whitepoint' => 'Хромацитет беле тачке',
+'exif-primarychromaticities' => 'Хромацитет примарних боја',
+'exif-ycbcrcoefficients' => 'Матрични коефицијенти трансформације колор простора',
+'exif-referenceblackwhite' => 'Место беле и црне тачке',
+'exif-datetime' => 'Датум последње промене фајла',
+'exif-imagedescription' => 'Име слике',
+'exif-make' => 'Произвођач камере',
+'exif-model' => 'Модел камере',
+'exif-software' => 'Коришћен софтвер',
+'exif-artist' => 'Аутор',
+'exif-copyright' => 'Носилац права',
+'exif-exifversion' => 'Exif верзија',
+'exif-flashpixversion' => 'Подржана верзија Флешпикса',
+'exif-colorspace' => 'Простор боје',
+'exif-componentsconfiguration' => 'Значење сваке од компоненти',
+'exif-compressedbitsperpixel' => 'Мод компресије слике',
+'exif-pixelydimension' => 'Пуна висина слике',
+'exif-pixelxdimension' => 'Пуна ширина слике',
+'exif-makernote' => 'Напомене произвођача',
+'exif-usercomment' => 'Кориснички коментар',
+'exif-relatedsoundfile' => 'Повезани звучни запис',
+'exif-datetimeoriginal' => 'Датум и време сликања',
+'exif-datetimedigitized' => 'Датум и време дигитализације',
+'exif-subsectime' => 'Део секунде у којем је сликано',
+'exif-subsectimeoriginal' => 'Део секунде у којем је фотографисано',
+'exif-subsectimedigitized' => 'Део секунде у којем је дигитализовано',
+'exif-exposuretime' => 'Експозиција',
+'exif-exposuretime-format' => '$1 сек ($2)',
+'exif-fnumber' => 'F број отвора бленде',
+'exif-fnumber-format' =>'f/$1',
+'exif-exposureprogram' => 'Програм експозиције',
+'exif-spectralsensitivity' => 'Спектрална осетљивост',
+'exif-isospeedratings' => 'ИСО вредност',
+'exif-oecf' => 'Оптоелектронски фактор конверзије',
+'exif-shutterspeedvalue' => 'Брзина затварача',
+'exif-aperturevalue' => 'Отвор бленде',
+'exif-brightnessvalue' => 'Светлост',
+'exif-exposurebiasvalue' => 'Компензација експозиције',
+'exif-maxaperturevalue' => 'Минимални број отвора бленде',
+'exif-subjectdistance' => 'Удаљеност до објекта',
+'exif-meteringmode' => 'Режим мерача времена',
+'exif-lightsource' => 'Извор светлости',
+'exif-flash' => 'Блиц',
+'exif-focallength' => 'Фокусна даљина сочива',
+'exif-focallength-format' =>'$1 mm',
+'exif-subjectarea' => 'Положај и површина објекта снимка',
+'exif-flashenergy' => 'Енергија блица',
+'exif-spatialfrequencyresponse' => 'Просторна фреквенцијска карактеристика',
+'exif-focalplanexresolution' => 'Водоравна резолуција фокусне равни',
+'exif-focalplaneyresolution' => 'Хоризонатлна резолуција фокусне равни',
+'exif-focalplaneresolutionunit' => 'Јединица резолуције фокусне равни',
+'exif-subjectlocation' => 'Положај субјекта',
+'exif-exposureindex' => 'Индекс експозиције',
+'exif-sensingmethod' => 'Тип сензора',
+'exif-filesource' => 'Изворни фајл',
+'exif-scenetype' => 'Тип сцене',
+'exif-cfapattern' => 'CFA шаблон',
+'exif-customrendered' => 'Додатна обрада слике',
+'exif-exposuremode' => 'Режим избора експозиције',
+'exif-whitebalance' => 'Баланс беле боје',
+'exif-digitalzoomratio' => 'Однос дигиталног зума',
+'exif-focallengthin35mmfilm' => 'Еквивалент фокусне даљине за 35 mm филм',
+'exif-scenecapturetype' => 'Тип сцене на снимку',
+'exif-gaincontrol' => 'Контрола осветљености',
+'exif-contrast' => 'Контраст',
+'exif-saturation' => 'Сатурација',
+'exif-sharpness' => 'Оштрина',
+'exif-devicesettingdescription' => 'Опис подешавања уређаја',
+'exif-subjectdistancerange' => 'Распон удаљености субјеката',
+'exif-imageuniqueid' => 'Јединствени идентификатор слике',
+'exif-gpsversionid' => 'Верзија блока ГПС-информације',
+'exif-gpslatituderef' => 'Северна или јужна ширина',
+'exif-gpslatitude' => 'Ширина',
+'exif-gpslongituderef' => 'Источна или западна дужина',
+'exif-gpslongitude' => 'Дужина',
+'exif-gpsaltituderef' => 'Висина испод или изнад мора',
+'exif-gpsaltitude' => 'Висина',
+'exif-gpstimestamp' => 'Време по ГПС-у (атомски сат)',
+'exif-gpssatellites' => 'Употребљени сателити',
+'exif-gpsstatus' => 'Статус пријемника',
+'exif-gpsmeasuremode' => 'Режим мерења',
+'exif-gpsdop' => 'Прецизност мерења',
+'exif-gpsspeedref' => 'Јединица брзине',
+'exif-gpsspeed' => 'Брзина ГПС пријемника',
+'exif-gpstrackref' => 'Тип азимута пријемника (прави или магнетни)',
+'exif-gpstrack' => 'Азимут пријемника',
+'exif-gpsimgdirectionref' => 'Тип азимута слике (прави или магнетни)',
+'exif-gpsimgdirection' => 'Азимут слике',
+'exif-gpsmapdatum' => 'Коришћени геодетски координатни систем',
+'exif-gpsdestlatituderef' => 'Индекс географске ширине објекта',
+'exif-gpsdestlatitude' => 'Географска ширина објекта',
+'exif-gpsdestlongituderef' => 'Индекс географске дужине објекта',
+'exif-gpsdestlongitude' => 'Географска дужина објекта',
+'exif-gpsdestbearingref' => 'Индекс азимута објекта',
+'exif-gpsdestbearing' => 'Азимут објекта',
+'exif-gpsdestdistanceref' => 'Мерне јединице удаљености објекта',
+'exif-gpsdestdistance' => 'Удаљеност објекта',
+'exif-gpsprocessingmethod' => 'Име методе обраде ГПС података',
+'exif-gpsareainformation' => 'Име ГПС подручја',
+'exif-gpsdatestamp' => 'ГПС датум',
+'exif-gpsdifferential' => 'ГПС диференцијална корекција',
+
+# Exif attributes
+
+'exif-compression-1' => 'Некомпресован',
+'exif-compression-6' => 'ЈПЕГ',
+
+'exif-photometricinterpretation-2' => 'RGB',
+'exif-photometricinterpretation-6' => 'YCbCr',
+
+'exif-orientation-1' => 'Нормално',
+'exif-orientation-2' => 'Обрнуто по хоризонтали',
+'exif-orientation-3' => 'Заокренуто 180°',
+'exif-orientation-4' => 'Обрнуто по вертикали',
+'exif-orientation-5' => 'Заокренуто 90° супротно од смера казаљке на сату и обрнуто по вертикали',
+'exif-orientation-6' => 'Заокренуто 90° у смеру казаљке на сату',
+'exif-orientation-7' => 'Заокренуто 90° у смеру казаљке на сату и обрнуто по вертикали',
+'exif-orientation-8' => 'Заокренуто 90° супротно од смера казаљке на сату',
+
+'exif-planarconfiguration-1' => 'делимични формат',
+'exif-planarconfiguration-2' => 'планарни формат',
+
+'exif-xyresolution-i' => '$1 dpi',
+'exif-xyresolution-c' => '$1 dpc',
+
+'exif-colorspace-1' => 'sRGB',
+'exif-colorspace-ffff.h' => 'FFFF.H',
+
+'exif-componentsconfiguration-0' => 'не постоји',
+'exif-componentsconfiguration-1' => 'Y',
+'exif-componentsconfiguration-2' => 'Cb',
+'exif-componentsconfiguration-3' => 'Cr',
+'exif-componentsconfiguration-4' => 'R',
+'exif-componentsconfiguration-5' => 'G',
+'exif-componentsconfiguration-6' => 'B',
+
+'exif-exposureprogram-0' => 'Непознато',
+'exif-exposureprogram-1' => 'Ручно',
+'exif-exposureprogram-2' => 'Нормални програм',
+'exif-exposureprogram-3' => 'Приоритет отвора бленде',
+'exif-exposureprogram-4' => 'Приоритет затварача',
+'exif-exposureprogram-5' => 'Уметнички програм (на бази нужне дубине поља)',
+'exif-exposureprogram-6' => 'Спортски програм (на бази што бржег затварача)',
+'exif-exposureprogram-7' => 'Портретни режим (за крупне кадрове са неоштром позадином)',
+'exif-exposureprogram-8' => 'Режим пејзажа (за слике пејзажа са оштром позадином)',
+
+'exif-subjectdistance-value' => '$1 метара',
+
+'exif-meteringmode-0' => 'Непознато',
+'exif-meteringmode-1' => 'Просек',
+'exif-meteringmode-2' => 'Просек са тежиштем на средини',
+'exif-meteringmode-3' => 'Тачка',
+'exif-meteringmode-4' => 'Више тачака',
+'exif-meteringmode-5' => 'Матрични',
+'exif-meteringmode-6' => 'Делимични',
+'exif-meteringmode-255' => 'Друго',
+
+'exif-lightsource-0' => 'Непознато',
+'exif-lightsource-1' => 'Дневна светлост',
+'exif-lightsource-2' => 'Флуоресцентно',
+'exif-lightsource-3' => 'Волфрам (светло)',
+'exif-lightsource-4' => 'Блиц',
+'exif-lightsource-9' => 'Лепо време',
+'exif-lightsource-10' => 'Облачно време',
+'exif-lightsource-11' => 'Сенка',
+'exif-lightsource-12' => 'Флуоресцентна светлост (D 5700 – 7100K)',
+'exif-lightsource-13' => 'Флуоресцентна светлост (N 4600 – 5400K)',
+'exif-lightsource-14' => 'Флуоресцентна светлост (W 3900 – 4500K)',
+'exif-lightsource-15' => 'Бела флуоресценција (WW 3200 – 3700K)',
+'exif-lightsource-17' => 'Стандардно светло А',
+'exif-lightsource-18' => 'Стандардно светло Б',
+'exif-lightsource-19' => 'Стандардно светло Ц',
+'exif-lightsource-20' => 'D55',
+'exif-lightsource-21' => 'D65',
+'exif-lightsource-22' => 'D75',
+'exif-lightsource-23' => 'D50',
+'exif-lightsource-24' => 'ИСО студијски волфрам',
+'exif-lightsource-255' => 'Други извор светла',
+
+'exif-focalplaneresolutionunit-2' => 'инчи',
+
+'exif-sensingmethod-1' => 'Недефинисано',
+'exif-sensingmethod-2' => 'Једнокристални матрични сензор',
+'exif-sensingmethod-3' => 'Двокристални матрични сензор',
+'exif-sensingmethod-4' => 'Трокристални матрични сензор',
+'exif-sensingmethod-5' => 'Секвенцијални матрични сензор',
+'exif-sensingmethod-7' => 'Тробојни линеарни сензор',
+'exif-sensingmethod-8' => 'Секвенцијални линеарни сензор',
+
+'exif-filesource-3' => 'Дигитални фотоапарат',
+
+'exif-scenetype-1' => 'Директно фотографисана слика',
+
+'exif-customrendered-0' => 'Нормални процес',
+'exif-customrendered-1' => 'Нестадардни процес',
+
+'exif-exposuremode-0' => 'Аутоматски',
+'exif-exposuremode-1' => 'Ручно',
+'exif-exposuremode-2' => 'Аутоматски са задатим распоном',
+
+'exif-whitebalance-0' => 'Аутоматски',
+'exif-whitebalance-1' => 'Ручно',
+
+'exif-scenecapturetype-0' => 'Стандардно',
+'exif-scenecapturetype-1' => 'Пејзаж',
+'exif-scenecapturetype-2' => 'Портрет',
+'exif-scenecapturetype-3' => 'Ноћно',
+
+'exif-gaincontrol-0' => 'Нема',
+'exif-gaincontrol-1' => 'Мало повећање',
+'exif-gaincontrol-2' => 'Велико повећање',
+'exif-gaincontrol-3' => 'Мало смањење',
+'exif-gaincontrol-4' => 'Велико смањење',
+
+'exif-contrast-0' => 'Нормално',
+'exif-contrast-1' => 'Меко',
+'exif-contrast-2' => 'Тврдо',
+
+'exif-saturation-0' => 'Нормално',
+'exif-saturation-1' => 'Ниска сатурација',
+'exif-saturation-2' => 'Висока сатурација',
+
+'exif-sharpness-0' => 'Нормално',
+'exif-sharpness-1' => 'Меко',
+'exif-sharpness-2' => 'Тврдо',
+
+'exif-subjectdistancerange-0' => 'Непознато',
+'exif-subjectdistancerange-1' => 'Крупни кадар',
+'exif-subjectdistancerange-2' => 'Блиски кадар',
+'exif-subjectdistancerange-3' => 'Далеки кадар',
+
+// Pseudotags used for GPSLatitudeRef and GPSDestLatitudeRef
+'exif-gpslatitude-n' => 'Север',
+'exif-gpslatitude-s' => 'Југ',
+
+// Pseudotags used for GPSLongitudeRef and GPSDestLongitudeRef
+'exif-gpslongitude-e' => 'Исток',
+'exif-gpslongitude-w' => 'Запад',
+
+'exif-gpsstatus-a' => 'Мерење у току',
+'exif-gpsstatus-v' => 'Спреман за пренос',
+
+'exif-gpsmeasuremode-2' => 'Дводимензионално мерење',
+'exif-gpsmeasuremode-3' => 'Тродимензионално мерење',
+
+// Pseudotags used for GPSSpeedRef and GPSDestDistanceRef
+'exif-gpsspeed-k' => 'Километри на час',
+'exif-gpsspeed-m' => 'Миље на час',
+'exif-gpsspeed-n' => 'Чворови',
+
+// Pseudotags used for GPSTrackRef, GPSImgDirectionRef and GPSDestBearingRef
+'exif-gpsdirection-t' => 'Прави правац',
+'exif-gpsdirection-m' => 'Магнетни правац',
+
+# external editor support
+'edit-externally' => 'Измените овај фајл користећи спољашњу апликацију',
+'edit-externally-help' => 'Погледајте [http://meta.wikimedia.org/wiki/Help:External_editors упутство за подешавање] за више информација.',
+
+# 'all' in various places, this might be different for inflected languages
+'recentchangesall' => 'све',
+'imagelistall' => 'све',
+'watchlistall1' => 'све',
+'watchlistall2' => 'све',
+'namespacesall' => 'сви',
+
+# E-mail address confirmation
+'confirmemail' => 'Потврдите адресу е-поште',
+'confirmemail_noemail' => 'Немате потврђену адресу ваше е-поште у вашим [[Special:Preferences|корисничким подешавањима интерфејса]].',
+'confirmemail_text' => 'Ова вики захтева да потврдите адресу ваше е-поште пре него што користите могућности е-поште. Активирајте дугме испод како бисте послали пошту за потврду на вашу адресу. Пошта укључује везу која садржи код; учитајте ту везу у ваш браузер да бисте потврдили да је адреса ваше е-поште валидна.',
+'confirmemail_send' => 'Пошаљи код за потврду',
+'confirmemail_sent' => 'Е-пошта за потврђивање послата.',
+'confirmemail_sendfailed' => 'Пошта за потврђивање није послата. Проверита адресу због неправилних карактера.',
+'confirmemail_invalid' => 'Нетачан код за потврду. Могуће је да је код истекао.',
+'confirmemail_needlogin' => 'Морате да се $1 да бисте потврдили адресу ваше е-поште.',
+'confirmemail_success' => 'Адреса ваше е-поште је потврђена. Можете сада да се пријавите и уживате у викију.',
+'confirmemail_loggedin' => 'Адреса ваше е-поште је сада потврђена.',
+'confirmemail_error' => 'Нешто је пошло по злу приликом снимања ваше потврде.',
+
+'confirmemail_subject' => '{{SITENAME}} адреса е-поште за потврђивање',
+'confirmemail_body' => 'Неко, вероватно ви, је са ИП адресе $1 регистровао налог "$2" са овом адресом е-поште на сајту {{SITENAME}}.
+
+Да потврдите да овај налог стварно припада вама и да активирате могућност е-поште на сајту {{SITENAME}}, отворите ову везу у вашем браузеру:
+
+$3
+
+Ако ово *нисте* ви, не пратите везу. Овај код за потврду ће истећи у $4.',
+
+# Inputbox extension, may be useful in other contexts as well
+'tryexact' => 'Покушај тачно',
+'searchfulltext' => 'Претражи цео текст',
+'createarticle' => 'Направи чланак',
+
+# Scary transclusion
+'scarytranscludedisabled' => '[Интервики укључивање је онемогућено]',
+'scarytranscludefailed' => '[Доношење шаблона неуспешно; жао нам је]',
+'scarytranscludetoolong' => '[УРЛ је предугачак; жао нам је]',
+
+# Trackbacks
+'trackbackbox' => '<div id="mw_trackbacks">
+Враћања за овај чланак:<br />
+$1
+</div>',
+'trackbackremove' => '([$1 Брисање])',
+'trackbacklink' => 'Враћање',
+'trackbackdeleteok' => 'Враћање је успешно обрисано.',
+
+# delete conflict
+'deletedwhileediting' => 'Упозорење: Ова страна је обрисана пошто сте почели уређивање!',
+'confirmrecreate' => 'Корисник [[{{ns:user}}:$1|$1]] ([[{{ns:user_talk}}:$1|разговор]]) је обрисао овај чланак пошто сте почели уређивање са разлогом:
+: \'\'$2\'\'
+Молимо потврдите да стварно желите да поново направите овај чланак.',
+'recreate' => 'Поново направи',
+'tooltip-recreate' => 'Поново направите ову страну упркос томе што је обрисана',
+
+'unit-pixel' => 'px',
+
+# HTML dump
+'redirectingto' => 'Преусмеравам на [[$1]]...',
+
+# action=purge
+'confirm_purge' => 'Да ли желите очистити кеш ове странице?
+
+$1',
+'confirm_purge_button' => 'Да',
+
+'youhavenewmessagesmulti' => 'Имате нових порука на $1',
+'searchcontaining' => 'Претражи чланке који садрже \'\'$1\'\'.',
+'searchnamed' => 'Претражи чланке који се зову \'\'$1\'\'.',
+'articletitles' => 'Чланци почевши од \'\'$1\'\'',
+'hideresults' => 'Сакриј резултате',
+
+# DISPLAYTITLE
+'displaytitle' => '(Веза ка овој страни као [[$1]])',
+
+'loginlanguagelabel' => 'Језик: $1',
+
+# Multipage image navigation
+'imgmultipageprev' => '&larr; претходна страница',
+'imgmultipagenext' => 'следећа страница &rarr;',
+'imgmultigo' => 'Иди!',
+'imgmultigotopre' => 'Иди на страницу',
+
+# Table pager
+'ascending_abbrev' => 'раст',
+'descending_abbrev' => 'опад',
+'table_pager_next' => 'Следећа страница',
+'table_pager_prev' => 'Претходна страница',
+'table_pager_first' => 'Прва страница',
+'table_pager_last' => 'Последња страница',
+'table_pager_limit' => 'Прикажи $1 делова информације по страници',
+'table_pager_limit_submit' => 'Иди',
+'table_pager_empty' => 'Без резултата',
+
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesSr_el.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesSr_el.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesSr_el.php	(revision 1280)
@@ -0,0 +1,2250 @@
+<?php
+/**
+  * @addtogroup Language
+  */
+
+$namespaceNames = array(
+	NS_MEDIA            => "Medija",
+	NS_SPECIAL          => "Posebno",
+	NS_MAIN             => "",
+	NS_TALK             => "Razgovor",
+	NS_USER             => "Korisnik",
+	NS_USER_TALK        => "Razgovor_sa_korisnikom",
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK     => "Razgovor_o_$1",
+	NS_IMAGE            => "Slika",
+	NS_IMAGE_TALK       => "Razgovor_o_slici",
+	NS_MEDIAWIKI        => "MedijaViki",
+	NS_MEDIAWIKI_TALK   => "Razgovor_o_MedijaVikiju",
+	NS_TEMPLATE         => 'Šablon',
+	NS_TEMPLATE_TALK    => 'Razgovor_o_šablonu',
+	NS_HELP             => 'Pomoć',
+	NS_HELP_TALK        => 'Razgovor_o_pomoći',
+	NS_CATEGORY         => 'Kategorija',
+	NS_CATEGORY_TALK    => 'Razgovor_o_kategoriji',
+);
+
+# Aliases to cyrillic namespaces 
+$namespaceAliases = array(
+	"Медија"                  => NS_MEDIA,
+	"Посебно"                 => NS_SPECIAL,
+	"Разговор"                => NS_TALK,
+	"Корисник"                => NS_USER,
+	"Разговор_са_корисником"  => NS_USER_TALK,
+	"Разговор_о_$1"           => NS_PROJECT_TALK,
+	"Слика"                   => NS_IMAGE,
+	"Разговор_о_слици"        => NS_IMAGE_TALK,
+	"МедијаВики"              => NS_MEDIAWIKI,
+	"Разговор_о_МедијаВикију" => NS_MEDIAWIKI_TALK,
+	'Шаблон'                  => NS_TEMPLATE,
+	'Разговор_о_шаблону'      => NS_TEMPLATE_TALK,
+	'Помоћ'                   => NS_HELP,
+	'Разговор_о_помоћи'       => NS_HELP_TALK,
+	'Категорија'              => NS_CATEGORY,
+	'Разговор_о_категорији'   => NS_CATEGORY_TALK,
+);
+
+$skinNames = array(
+ "Obična", "Nostalgija", "Kelnsko plavo", "Pedington", "Monparnas"
+);
+
+$extraUserToggles = array(
+	'nolangconversion',
+);
+
+$datePreferenceMigrationMap = array(
+	'default',
+	'hh:mm d. month y.',
+	'hh:mm d month y',
+	'hh:mm dd.mm.yyyy',
+	'hh:mm d.m.yyyy',
+	'hh:mm d. mon y.',
+	'hh:mm d mon y',
+	'h:mm d. month y.',
+	'h:mm d month y',
+	'h:mm dd.mm.yyyy',
+	'h:mm d.m.yyyy',
+	'h:mm d. mon y.',
+	'h:mm d mon y',
+);
+
+$datePreferences = array(
+	'default',
+	'hh:mm d. month y.',
+	'hh:mm d month y',
+	'hh:mm dd.mm.yyyy',
+	'hh:mm d.m.yyyy',
+	'hh:mm d. mon y.',
+	'hh:mm d mon y',
+	'h:mm d. month y.',
+	'h:mm d month y',
+	'h:mm dd.mm.yyyy',
+	'h:mm d.m.yyyy',
+	'h:mm d. mon y.',
+	'h:mm d mon y',
+);
+
+$defaultDateFormat = 'hh:mm d. month y.';
+
+$dateFormats = array(
+	/*
+	'Није битно',
+	'06:12, 5. јануар 2001.',
+	'06:12, 5 јануар 2001',
+	'06:12, 05.01.2001.',
+	'06:12, 5.1.2001.',
+	'06:12, 5. јан 2001.',
+	'06:12, 5 јан 2001',
+	'6:12, 5. јануар 2001.',
+	'6:12, 5 јануар 2001',
+	'6:12, 05.01.2001.',
+	'6:12, 5.1.2001.',
+	'6:12, 5. јан 2001.',
+	'6:12, 5 јан 2001',
+	 */
+	
+	'hh:mm d. month y. time'    => 'H:i',
+	'hh:mm d month y time'      => 'H:i',
+	'hh:mm dd.mm.yyyy time'     => 'H:i',
+	'hh:mm d.m.yyyy time'       => 'H:i',
+	'hh:mm d. mon y. time'      => 'H:i',
+	'hh:mm d mon y time'        => 'H:i',
+	'h:mm d. month y. time'     => 'G:i',
+	'h:mm d month y time'       => 'G:i',
+	'h:mm dd.mm.yyyy time'      => 'G:i',
+	'h:mm d.m.yyyy time'        => 'G:i',
+	'h:mm d. mon y. time'       => 'G:i',
+	'h:mm d mon y time'         => 'G:i',
+
+	'hh:mm d. month y. date'    => 'j. F Y.',
+	'hh:mm d month y date'      => 'j F Y',  
+	'hh:mm dd.mm.yyyy date'     => 'd.m.Y',  
+	'hh:mm d.m.yyyy date'       => 'j.n.Y',  
+	'hh:mm d. mon y. date'      => 'j. M Y.',
+	'hh:mm d mon y date'        => 'j M Y',  
+	'h:mm d. month y. date'     => 'j. F Y.',
+	'h:mm d month y date'       => 'j F Y',  
+	'h:mm dd.mm.yyyy date'      => 'd.m.Y',  
+	'h:mm d.m.yyyy date'        => 'j.n.Y',  
+	'h:mm d. mon y. date'       => 'j. M Y.',
+	'h:mm d mon y date'         => 'j M Y',  
+
+	'hh:mm d. month y. both'    =>'H:i, j. F Y.', 
+	'hh:mm d month y both'      =>'H:i, j F Y',   
+	'hh:mm dd.mm.yyyy both'     =>'H:i, d.m.Y',   
+	'hh:mm d.m.yyyy both'       =>'H:i, j.n.Y',   
+	'hh:mm d. mon y. both'      =>'H:i, j. M Y.', 
+	'hh:mm d mon y both'        =>'H:i, j M Y',   
+	'h:mm d. month y. both'     =>'G:i, j. F Y.', 
+	'h:mm d month y both'       =>'G:i, j F Y',   
+	'h:mm dd.mm.yyyy both'      =>'G:i, d.m.Y',   
+	'h:mm d.m.yyyy both'        =>'G:i, j.n.Y',   
+	'h:mm d. mon y. both'       =>'G:i, j. M Y.', 
+	'h:mm d mon y both'         =>'G:i, j M Y',   
+);
+
+
+/* NOT USED IN STABLE VERSION */
+$magicWords = array(
+#	ID                                CASE SYNONYMS
+	'redirect'               => array( 0, '#Preusmeri', '#redirect', '#preusmeri', '#PREUSMERI' ),
+	'notoc'                  => array( 0, '__NOTOC__', '__BEZSADRŽAJA__' ),
+	'forcetoc'               => array( 0, '__FORCETOC__', '__FORSIRANISADRŽAJ__' ),
+	'toc'                    => array( 0, '__TOC__', '__SADRŽAJ__' ),
+	'noeditsection'          => array( 0, '__NOEDITSECTION__', '__BEZ_IZMENA__', '__BEZIZMENA__' ),
+	'start'                  => array( 0, '__START__', '__POČETAK__' ),
+	'currentmonth'           => array( 1, 'CURRENTMONTH', 'TRENUTNIMESEC' ),
+	'currentmonthname'       => array( 1, 'CURRENTMONTHNAME', 'TRENUTNIMESECIME' ),
+	'currentmonthnamegen'    => array( 1, 'CURRENTMONTHNAMEGEN', 'TRENUTNIMESECGEN' ),
+	'currentmonthabbrev'     => array( 1, 'CURRENTMONTHABBREV', 'TRENUTNIMESECSKR' ),
+	'currentday'             => array( 1, 'CURRENTDAY', 'TRENUTNIDAN' ),
+	'currentdayname'         => array( 1, 'CURRENTDAYNAME', 'TRENUTNIDANIME' ),
+	'currentyear'            => array( 1, 'CURRENTYEAR', 'TRENUTNAGODINA' ),
+	'currenttime'            => array( 1, 'CURRENTTIME', 'TRENUTNOVREME' ),
+	'numberofarticles'       => array( 1, 'NUMBEROFARTICLES', 'BROJČLANAKA' ),
+	'numberoffiles'          => array( 1, 'NUMBEROFFILES', 'BROJDATOTEKA', 'BROJFAJLOVA' ),
+	'pagename'               => array( 1, 'PAGENAME', 'STRANICA' ),
+	'pagenamee'              => array( 1, 'PAGENAMEE', 'STRANICE' ),
+	'namespace'              => array( 1, 'NAMESPACE', 'IMENSKIPROSTOR' ),
+	'namespacee'             => array( 1, 'NAMESPACEE', 'IMENSKIPROSTORI' ),
+	'fullpagename'           => array( 1, 'FULLPAGENAME', 'PUNOIMESTRANE' ),
+	'fullpagenamee'          => array( 1, 'FULLPAGENAMEE', 'PUNOIMESTRANEE' ),
+	'msg'                    => array( 0, 'MSG:', 'POR:' ),
+	'subst'                  => array( 0, 'SUBST:', 'ZAMENI:' ),
+	'msgnw'                  => array( 0, 'MSGNW:', 'NVPOR:' ),
+	'img_thumbnail'          => array( 1, 'thumbnail', 'thumb', 'mini' ),
+	'img_manualthumb'        => array( 1, 'thumbnail=$1', 'thumb=$1', 'mini=$1' ),
+	'img_right'              => array( 1, 'right', 'desno', 'd' ),
+	'img_left'               => array( 1, 'left', 'levo', 'l' ),
+	'img_none'               => array( 1, 'none', 'n', 'bez' ),
+	'img_width'              => array( 1, '$1px', '$1piskel' , '$1p' ),
+	'img_center'             => array( 1, 'center', 'centre', 'centar', 'c' ),
+	'img_framed'             => array( 1, 'framed', 'enframed', 'frame', 'okvir', 'ram' ),
+	'int'                    => array( 0, 'INT:', 'INT:' ),
+	'sitename'               => array( 1, 'SITENAME', 'IMESAJTA' ),
+	'ns'                     => array( 0, 'NS:', 'IP:' ),
+	'localurl'               => array( 0, 'LOCALURL:', 'LOKALNAADRESA:' ),
+	'localurle'              => array( 0, 'LOCALURLE:', 'LOKALNEADRESE:' ),
+	'server'                 => array( 0, 'SERVER', 'SERVER' ),
+	'servername'             => array( 0, 'SERVERNAME', 'IMESERVERA' ),
+	'scriptpath'             => array( 0, 'SCRIPTPATH', 'SKRIPTA' ),
+	'grammar'                => array( 0, 'GRAMMAR:', 'GRAMATIKA:' ),
+	'notitleconvert'         => array( 0, '__NOTITLECONVERT__', '__NOTC__', '__БЕЗКН__', '__BEZKN__' ),
+	'nocontentconvert'       => array( 0, '__NOCONTENTCONVERT__', '__NOCC__', '__BEZCC__' ),
+	'currentweek'            => array( 1, 'CURRENTWEEK', 'TRENUTNANEDELJA' ),
+	'currentdow'             => array( 1, 'CURRENTDOW', 'TRENUTNIDOV' ),
+	'revisionid'             => array( 1, 'REVISIONID', 'IDREVIZIJE' ),
+	'plural'                 => array( 0, 'PLURAL:', 'MNOŽINA:' ),
+	'fullurl'                => array( 0, 'FULLURL:', 'PUNURL:' ),
+	'fullurle'               => array( 0, 'FULLURLE:', 'PUNURLE:' ),
+	'lcfirst'                => array( 0, 'LCFIRST:', 'LCPRVI:' ),
+	'ucfirst'                => array( 0, 'UCFIRST:', 'UCPRVI:' ),
+	'lc'                     => array( 0, 'LC:', 'LC:' ),
+	'uc'                     => array( 0, 'UC:', 'UC:' ),
+);
+
+$separatorTransformTable = array(',' => '.', '.' => ',' );
+
+
+$messages = array(
+# stylesheets
+'common.css'  => '/** CSS koji važi za sve skinove */',
+'monobook.css'  => '/** Samo za MonoBook skin */',
+
+# User preference toggles
+'tog-underline' => 'Podvuci veze',
+'tog-highlightbroken' => 'Formatiraj pokvarene veze <a href="" class="new">ovako</a> (alternativa: ovako<a href="" class="internal">?</a>).',
+'tog-justify' => 'Uravnaj pasuse',
+'tog-hideminor' => 'Sakrij male izmene u spisku skorašnjih izmena',
+'tog-extendwatchlist' => 'Poboljšan spisak nadgledanja',
+'tog-usenewrc' => 'Poboljšan spisak skorašnjih izmena (zahteva JavaScript)',
+'tog-numberheadings' => 'Automatski numeriši podnaslove',
+'tog-showtoolbar' => 'Prikaži dugmiće za izmene (zahteva JavaScript)',
+'tog-editondblclick' => 'Menjaj stranice dvostrukim klikom (zahteva JavaScript)',
+'tog-editsection' => 'Omogući izmenu delova [uredi] vezama',
+'tog-editsectiononrightclick' => 'Omogući izmenu delova desnim klikom<br />na njihove naslove (zahteva JavaScript)',
+'tog-showtoc' => 'Prikaži sadržaj (u člancima sa više od 3 podnaslova)',
+'tog-rememberpassword' => 'Pamti lozinku kroz više seansi',
+'tog-editwidth' => 'Polje za izmene ima punu širinu',
+'tog-watchcreations' => 'Dodaj stranice koje pravim u moj spisak nadgledanja',
+'tog-watchdefault' => 'Dodaj stranice koje menjam u moj spisak nadgledanja',
+'tog-minordefault' => 'Označi sve izmene malim isprva',
+'tog-previewontop' => 'Prikaži pretpregled pre polja za izmenu',
+'tog-previewonfirst' => 'Prikaži pretpregled pri prvoj izmeni',
+'tog-nocache' => 'Onemogući keširanje stranica',
+'tog-enotifwatchlistpages' => 'Pošalji mi e-poštu kada se promeni strana koju nadgledam',
+'tog-enotifusertalkpages' => 'Pošalji mi e-poštu kada se promeni moja korisnička strana za razgovor',
+'tog-enotifminoredits' => 'Pošalji mi e-poštu takođe za male izmene strana',
+'tog-enotifrevealaddr' => 'Otkrij adresu moje e-pošte u pošti obaveštenja',
+'tog-shownumberswatching' => 'Prikaži broj korisnika koji nadgledaju',
+'tog-fancysig' => 'Čist potpis (bez automatskih veza)',
+'tog-externaleditor' => 'Koristi spoljašnji uređivač po podrazumevanim podešavanjima',
+'tog-externaldiff' => 'Koristi spoljašnji program za prikaz razlika po podrazumevanim podešavanjima',
+'tog-showjumplinks' => 'Omogući "skoči na" veze',
+'tog-uselivepreview' => 'Koristi živi pretpregled (zahteva JavaScript) (eksperimentalno)',
+'tog-autopatrol' => 'Označi izmene koje pravim patroliranim',
+'tog-forceeditsummary' => 'Upozori me kad ne unesem opis izmene',
+'tog-watchlisthideown' => 'Sakrij moje izmene sa spiska nadgledanja',
+'tog-watchlisthidebots' => 'Sakrij izmene botova sa spiska nadgledanja',
+'tog-nolangconversion' => 'Isključi konverziju varijanti',
+
+'underline-always' => 'Uvek',
+'underline-never' => 'Nikad',
+'underline-default' => 'Po podešavanjima brauzera',
+
+'skinpreview' => '(Pregled)',
+
+# dates
+'sunday' => 'nedelja',
+'monday' => 'ponedeljak',
+'tuesday' => 'utorak',
+'wednesday' => 'sreda',
+'thursday' => 'četvrtak',
+'friday' => 'petak',
+'saturday' => 'subota',
+'sun' => 'ned',
+'mon' => 'pon',
+'tue' => 'uto',
+'wed' => 'sre',
+'thu' => 'čet',
+'fri' => 'pet',
+'sat' => 'sub',
+'january' => 'januar',
+'february' => 'februar',
+'march' => 'mart',
+'april' => 'april',
+'may_long' => 'maj',
+'june' => 'jun',
+'july' => 'jul',
+'august' => 'avgust',
+'september' => 'septembar',
+'october' => 'oktobar',
+'november' => 'novembar',
+'december' => 'decembar',
+'january-gen' => 'januara',
+'february-gen' => 'februara',
+'march-gen' => 'marta',
+'april-gen' => 'aprila',
+'may-gen' => 'maja',
+'june-gen' => 'juna',
+'july-gen' => 'jula',
+'august-gen' => 'avgusta',
+'september-gen' => 'septembra',
+'october-gen' => 'oktobra',
+'november-gen' => 'novembra',
+'december-gen' => 'decembra',
+'jan' => 'jan',
+'feb' => 'feb',
+'mar' => 'mar',
+'apr' => 'apr',
+'may' => 'maj',
+'jun' => 'jun',
+'jul' => 'jul',
+'aug' => 'avg',
+'sep' => 'sep',
+'oct' => 'okt',
+'nov' => 'nov',
+'dec' => 'dec',
+# Bits of text used by many pages:
+#
+'categories' => 'Kategorije stranica',
+'pagecategories' => '{{PLURAL:$1|Kategorija|Kategorije|Kategorije}} stranica',
+'category_header' => 'Članaka u kategoriji "$1"',
+'subcategories' => 'Potkategorije',
+
+'mainpage' => 'Glavna strana',
+'mainpagetext' => '<big>\'\'\'MedijaViki je uspešno instaliran.\'\'\'</big>',
+'mainpagedocfooter' => "Molimo vidite [http://meta.wikimedia.org/wiki/Help:Contents korisnički vodič] za informacije o upotrebi viki softvera.
+
+== Za početak ==
+* [http://www.mediawiki.org/wiki/Help:Configuration_settings Pomoć u vezi sa podešavanjima]
+* [http://www.mediawiki.org/wiki/Help:FAQ Najčešće postavljena pitanja]
+* [http://mail.wikimedia.org/mailman/listinfo/mediawiki-announce Mejling lista o izdanjima MedijaVikija]",
+
+'portal' => 'Radionica',
+'portal-url' => 'Project:Radionica',
+'about' => 'O...',
+'aboutsite' => 'O projektu {{SITENAME}}',
+'aboutpage' => 'Project:O',
+'article' => 'Članak',
+'help' => 'Pomoć',
+'helppage' => '{{ns:help}}:Sadržaj',
+'bugreports' => 'Prijave grešaka',
+'bugreportspage' => 'Project:Prijave_grešaka',
+'sitesupport' => 'Donacije',
+'sitesupport-url' => 'Project:Donacije',
+'faq' => 'NPP',
+'faqpage' => 'Project:NPP',
+'edithelp' => 'Pomoć oko uređivanja',
+'newwindow' => '(novi prozor)',
+'edithelppage' => '{{ns:help}}:Uređivanje',
+'cancel' => 'Poništi',
+'qbfind' => 'Pronađi',
+'qbbrowse' => 'Prelistavaj',
+'qbedit' => 'Izmeni',
+'qbpageoptions' => 'Opcije stranice',
+'qbpageinfo' => 'Informacije o stranici',
+'qbmyoptions' => 'Moje opcije',
+'qbspecialpages' => 'Posebne stranice',
+'moredotdotdot' => 'Još...',
+'mypage' => 'Moja stranica',
+'mytalk' => 'Moj razgovor',
+'anontalk' => 'Razgovor za ovu IP adresu',
+'navigation' => 'Navigacija',
+
+# Metadata in edit box
+'metadata_help' => 'Metapodaci (vidi [[Project:Metapodaci]] za objašnjenje):',
+
+'currentevents' => 'Trenutni događaji',
+'currentevents-url' => 'Trenutni događaji',
+'disclaimers' => 'Odricanje odgovornosti',
+'disclaimerpage' => 'Project:Odricanje odgovornosti',
+'privacy' => 'Politika privatnosti',
+'privacypage' => 'Project:Politika privatnosti',
+'errorpagetitle' => 'Greška',
+'returnto' => 'Povratak na $1.',
+'tagline' => 'Iz projekta {{SITENAME}}',
+'help' => 'Pomoć',
+'search' => 'pretraga',
+'searchbutton' => 'Traži',
+'go' => 'Idi',
+'searcharticle' => 'Idi',
+'history' => 'Istorija stranice',
+'history_short' => 'istorija',
+'updatedmarker' => 'ažurirano od moje poslednje posete',
+'info_short' => 'Informacije',
+'printableversion' => 'Verzija za štampu',
+'permalink' => 'Permalink',
+'print' => 'Štampa',
+'edit' => 'Uredi',
+'editthispage' => 'Uredi ovu stranicu',
+'delete' => 'obriši',
+'deletethispage' => 'Obriši ovu stranicu',
+'undelete_short' => 'vrati {{PLURAL:$1|jednu obrisanu izmenu|$1 obrisane izmene|$1 obrisanih izmena}}',
+'protect' => 'zaštiti',
+'protectthispage' => 'Zaštiti ovu stranicu',
+'unprotect' => 'Skloni zaštitu',
+'unprotectthispage' => 'Skloni zaštitu sa ove stranice',
+'newpage' => 'Nova stranica',
+'talkpage' => 'Razgovor o ovoj stranici',
+'specialpage' => 'Posebna stranica',
+'personaltools' => 'Lični alati',
+'postcomment' => 'Pošalji komentar',
+'articlepage' => 'Pogledaj članak',
+'talk' => 'Razgovor',
+'views' => 'Pregledi',
+'toolbox' => 'alati',
+'userpage' => 'Pogledaj korisničku stranu',
+'projectpage' => 'Pogledaj stranu projekta',
+'imagepage' => 'Pogledaj stranu slike',
+'mediawikipage' => 'Vidi stranicu poruke',
+'templatepage' => 'Vidi stranicu šablona',
+'viewhelppage' => 'Vidi stranicu pomoći',
+'categorypage' => 'Vidi stranicu kategorije',
+'viewtalkpage' => 'Pogledaj razgovor',
+'otherlanguages' => 'Ostali jezici',
+'redirectedfrom' => '(Preusmereno sa $1)',
+'autoredircomment' => 'Preusmerenje na [[$1]]',
+'redirectpagesub' => 'Strana preusmerenja',
+'lastmodifiedat' => 'Ova stranica je poslednji put izmenjena $2, $1.',
+'viewcount' => 'Ovoj stranici je pristupljeno {{PLURAL:$1|jednom|$1 puta|$1 puta}}.',
+'copyright' => 'Sadržaj je objavljen pod $1.',
+'protectedpage' => 'Zaštićena stranica',
+'jumpto' => 'Skoči na:',
+'jumptonavigation' => 'navigacija',
+'jumptosearch' => 'pretraga',
+
+'badaccess' => 'Greška u dozvolama',
+'badaccess-group0' => 'Nije vam dozvoljeno da izvršite akciju koju ste pokrenuli.',
+'badaccess-group1' => 'Akcija koju ste pokrenuli je rezerevisana za korisnike u grupi $1.',
+'badaccess-group2' => 'Akcija koju ste pokrenuli je rezervisana za korisnike iz jedne od grupa $1.',
+'badaccess-groups' => 'Akcija koju ste pokrenuli je rezervisana za korisnike iz jedne od grupa $1.',
+
+'versionrequired' => 'Verzija $1 MedijaVikija je potrebna',
+'versionrequiredtext' => 'Verzija $1 MedijaVikija je potrebna da bi se koristila ova strana. Pogledajte [[{{ns:special}}:Version|verziju]]',
+
+'ok' => 'da',
+'pagetitle' => '$1 - {{SITENAME}}',
+'retrievedfrom' => 'Dobavljeno iz "$1"',
+'youhavenewmessages' => 'Imate $1 ($2).',
+'newmessageslink' => 'novih poruka',
+'newmessagesdifflink' => 'najsvežije izmene',
+'editsection' => 'uredi',
+'editold' => 'uredi',
+'editsectionhint' => 'Uredi deo: $1',
+'toc' => 'Sadržaj',
+'showtoc' => 'prikaži',
+'hidetoc' => 'sakrij',
+'thisisdeleted' => 'Pogledaj ili vrati $1?',
+'viewdeleted' => 'Pogledaj $1?',
+'restorelink' => '{{PLURAL:$1|jedna obrisana izmena|$1 obrisane izmene|$1 obrisanih izmena}}',
+'feedlinks' => 'Fid:',
+'feed-invalid' => 'Loš tip fida prijave.',
+'feed-atom' => 'Atom',
+
+# Short words for each namespace, by default used in the 'article' tab in monobook
+'nstab-main' => 'Članak',
+'nstab-user' => 'Korisnička strana',
+'nstab-media' => 'Medij',
+'nstab-special' => 'Posebna',
+'nstab-project' => 'Strana projekta',
+'nstab-image' => 'Slika',
+'nstab-mediawiki' => 'Poruka',
+'nstab-template' => 'Šablon',
+'nstab-help' => 'Pomoć',
+'nstab-category' => 'Kategorija',
+
+# Main script and global functions
+#
+'nosuchaction' => 'Nema takve akcije',
+'nosuchactiontext' => 'Akciju navedenu u URL-u viki softver
+nije prepoznao.',
+'nosuchspecialpage' => 'Nema takve posebne stranice',
+'nospecialpagetext' => 'Tražili ste nepostojeću posebnu stranicu. Spisak svih posebnih stranica se može naći na [[{{ns:special}}:Specialpages]].',
+
+# General errors
+#
+'error' => 'Greška',
+'databaseerror' => 'Greška u bazi',
+'dberrortext' => 'Desila se sintaksna greška upita baze.
+Ovo možda ukazuje na greške u softveru.
+Poslednji pokušani upit je bio:
+<blockquote><tt>$1</tt></blockquote>
+iz funkcije "<tt>$2</tt>".
+MySQL je vratio grešku "<tt>$3: $4</tt>".',
+'dberrortextcl' => 'Desila se sintaksna greška upita baze.
+Poslednji pokušani upit je bio:
+"$1"
+iz funkcije "$2".
+MySQL je vratio grešku "$3: $4".',
+'noconnect' => 'Žao nam je! Viki ima tehničke poteškoće, i ne može da se poveže se serverom baze.',
+'nodb' => 'Ne mogu da izaberem bazu $1',
+'cachederror' => 'Ovo je keširana kopija zahtevane stranice, i možda nije ažurirana.',
+'laggedslavemode' => 'Upozorenje: moguće je da strana nije skoro ažurirana.',
+'readonly' => 'Baza je zaključana',
+'enterlockreason' => 'Unesite razlog za zaključavanje, uključujući procenu
+vremena otključavanja',
+'readonlytext' => 'Baza podataka je trenutno zaključana za nove
+unose i ostale izmene, verovatno zbog rutinskog održavanja,
+posle čega će biti vraćena u uobičajeno stanje.
+Administrator koji ju je zaključao dao je ovo objašnjenje: $1',
+'missingarticle' => 'Baza nije našla tekst stranice
+koji je trebalo, nazvan "$1".
+
+Ovo je obično izazvano praćenjem zastarele "razl" veze ili veze ka istoriji
+stranice koja je obrisana.
+
+Ako ovo nije slučaj, možda ste pronašli grešku u softveru.
+Molimo vas prijavite ovo jednom od [[Project:Administratori|administratora]], zajedno sa URL-om.',
+'readonly_lag' => 'Baza podataka je automatski zaključana dok slejv serveri ne sustignu master',
+'internalerror' => 'Interna greška',
+'filecopyerror' => 'Ne mogu da iskopiram fajl "$1" na "$2".',
+'filerenameerror' => 'Ne mogu da preimenujem fajl "$1" u "$2".',
+'filedeleteerror' => 'Ne mogu da obrišem fajl "$1".',
+'filenotfound' => 'Ne mogu da nađem fajl "$1".',
+'unexpected' => 'Neočekivana vrednost: "$1"="$2".',
+'formerror' => 'Greška: ne mogu da pošaljem upitnik',
+'badarticleerror' => 'Ova akcija ne može biti izvršena na ovoj stranici.',
+'cannotdelete' => 'Ne mogu da obrišem navedenu stranicu ili fajl. (Moguće je da je neko drugi već obrisao.)',
+'badtitle' => 'Loš naslov',
+'badtitletext' => 'Zahtevani naslov stranice je bio neispravan, prazan ili
+neispravno povezan međujezički ili interviki naslov. Možda sadrži jedan ili više karaktera koji ne mogu da se upotrebljavaju u naslovima.',
+'perfdisabled' => 'Žao nam je! Ova mogućnost je privremeno onemogućena jer usporava bazu do te mere da više niko ne može da koristi viki.',
+'perfdisabledsub' => 'Ovde je snimljena kopija $1:', # obsolete?
+'perfcached' => 'Sledeći podaci su keširani i ne moraju biti u potpunosti ažurirani.',
+'perfcachedts' => 'Sledeći podaci su keširani i poslednji put su ažurirani: $1',
+'wrong_wfQuery_params' => 'Netačni parametri za wfQuery()<br />
+Funkcija: $1<br />
+Pretraga: $2',
+'viewsource' => 'pogledaj kod',
+'viewsourcefor' => 'za $1',
+'protectedtext' => 'Ova stranica je zaključana za izmene.
+
+Možete gledati i kopirati sadržaj ove strane:',
+'protectedinterface' => '\'\'\'Upozorenje:\'\'\' Menjate stranu koja se koristi da pruži tekst interfejsa za softver. Izmene na ovoj strani će uticati na izgled korisničkog interfejsa za ostale korisnike.',
+'editinginterface' => "'''Upozorenje:''' Uređujete stranicu čija je namena upisivanje teksta za interfejs softvera. Izmene u ovoj stranici će promeniti izgled korisničkog intefejsa svih korisnika.",
+'sqlhidden' => '(SQL pretraga sakrivena)',
+
+# Login and logout pages
+#
+'logouttitle' => 'Odjavi se',
+'logouttext' => '<strong>Sada ste odjavljeni.</strong><br />
+Možete da nastavite da koristite projekat {{SITENAME}} anonimno, ili se ponovo prijaviti kao drugi korisnik. Obratite pažnju da neke stranice mogu nastaviti da se prikazuju kao da ste još uvek prijavljeni, dok ne očistite keš svog brauzera.',
+
+'welcomecreation' => '== Dobrodošli, $1! ==
+
+Vaš nalog je napravljen.
+Ne zaboravite da prilagodite sebi svoja {{SITENAME}} podešavanja.',
+
+'loginpagetitle' => 'Prijavljivanje',
+'yourname' => 'Korisničko ime',
+'yourpassword' => 'Vaša lozinka',
+'yourpasswordagain' => 'Ponovite lozinku',
+'remembermypassword' => 'Zapamti me',
+'yourdomainname' => 'Vaš domen',
+'externaldberror' => 'Došlo je ili do greške pri spoljašnjoj autentifikaciji baze podataka ili vam nije dozvoljeno da ažurirate svoj spoljašnji nalog.',
+'loginproblem' => '<b>Bilo je problema sa vašim prijavljivanjem.</b><br />Pokušajte ponovo!',
+'alreadyloggedin' => '<strong>Korisniče $1, već ste prijavljeni!</strong><br />',
+
+'login' => 'Prijavi se',
+'loginprompt' => 'Morate da imate omogućene kolačiće (\'\'cookies\'\') da biste se prijavili na {{SITENAME}}.',
+'userlogin' => 'Registruj se / Prijavi se',
+'logout' => 'Odjavi se',
+'userlogout' => 'Odjavi se',
+'notloggedin' => 'Niste prijavljeni',
+'nologin' => 'Nemate nalog? $1.',
+'nologinlink' => 'Napravite nalog',
+'createaccount' => 'Napravi nalog',
+'gotaccount' => 'Već imate nalog? $1.',
+'gotaccountlink' => 'Prijavi se',
+'createaccountmail' => 'e-poštom',
+'badretype' => 'Lozinke koje ste uneli se ne poklapaju.',
+'userexists' => 'Korisničko ime koje ste uneli već je u upotrebi. Molimo izaberite drugo ime.',
+'youremail' => 'Adresa vaše e-pošte *',
+'username' => 'Korisničko ime:',
+'uid' => 'Korisnički ID:',
+'yourrealname' => 'Vaše pravo ime *',
+'yourlanguage' => 'Jezik:',
+'yourvariant' => 'Varijanta:',
+'yournick' => 'Nadimak:',
+'badsig' => 'Greška u potpisu; proverite HTML tagove.',
+'email' => 'E-pošta',
+'prefs-help-email-enotif' => 'Ova adresa se takođe koristi da vam se šalju obaveštenja preko e-pošte ako ste omogućili tu opciju.',
+'prefs-help-realname' => '* Pravo ime (opciono): ako izaberete da date ime, ovo će biti korišćeno za pripisivanje za vaš rad.',
+'loginerror' => 'Greška pri prijavljivanju',
+'prefs-help-email' => '* E-pošta (opciono): Omogućuje ostalima da vas kontaktiraju preko vaše korisničke strane ili strane za razgovora bez potrebe da odajete svoj identitet.',
+'nocookiesnew' => 'Korisnički nalog je napravljen, ali niste prijavljeni. {{SITENAME}} koristi kolačiće (\'\'cookies\'\') da bi se korisnici prijavili. Vi ste onemogućili kolačiće na svom računaru. Molimo omogućite ih, a onda se prijavite sa svojim novim korisničkim imenom i lozinkom.',
+'nocookieslogin' => '{{SITENAME}} koristi kolačiće (\'\'cookies\'\') da bi se korisnici prijavili. Vi ste onemogućili kolačiće na svom računaru. Molimo omogućite ih i pokušajte ponovo sa prijavom.',
+'noname' => 'Niste izabrali ispravno korisničko ime.',
+'loginsuccesstitle' => 'Prijavljivanje uspešno',
+'loginsuccess' => '\'\'\'Sada ste prijavljeni na {{SITENAME}} kao "$1".\'\'\'',
+'nosuchuser' => 'Ne postoji korisnik sa imenom "$1". Proverite da li ste dobro napisali ili napravite novi korisnički nalog.',
+'nosuchusershort' => 'Ne postoji korisnik sa imenom "$1". Proverite da li ste dobro napisali.',
+'nouserspecified' => 'Morate da naznačite korisničko ime.',
+'wrongpassword' => 'Lozinka koju ste uneli je neispravna. Molimo pokušajte ponovo.',
+'wrongpasswordempty' => 'Lozinka koju ste uneli je prazna. Molimo pokušajte ponovo.',
+'mailmypassword' => 'Pošalji mi lozinku',
+'passwordremindertitle' => '{{SITENAME}} podsetnik za šifru',
+'passwordremindertext' => 'Neko (verovatno vi, sa IP adrese $1)
+je zahtevao da vam pošaljemo novu lozinku za {{SITENAME}} ($4).
+Lozinka za korisnika "$2" je sada "$3".
+Sada treba da se prijavite i promenite svoju lozinku.
+
+Ako je neko drugi podneo ovaj zahtev ili ukoliko ste se setili svoje lozinke i više ne želite da je menjate, možete da ignorišete ovu poruku i nastavite da koristite svoju staru šifru.',
+'noemail' => 'Ne postoji adresa e-pošte za korisnika "$1".',
+'passwordsent' => 'Nova šifra je poslata na adresu e-pošte korisnika "$1".
+Molimo prijavite se pošto je primite.',
+'blocked-mailpassword' => 'Vašoj IP adresi je blokiran pristup uređivanju, iz kog razloga nije moguće koristiti funkciju podsećanja lozinke, radi prevencije izvršenja nedozvoljene akcije.',
+'eauthentsent' => 'E-pošta za potvrdu je poslata na naznačenu adresu e-pošte. Pre nego što se bilo koja druga e-pošta pošalje na nalog, moraćete da pratite uputstva u e-pošti, da biste potvrdili da je nalog zaista vaš.',
+'throttled-mailpassword' => 'Podsetnik lozinke vam je već poslao jednu poruku u zadnjih $1 sati. Radi prevencije izvršenja nedozvoljene akcije, podsetnik šalje samo jednu poruku u roku od $1 sati.',
+'mailerror' => 'Greška pri slanju e-pošte: $1',
+'acct_creation_throttle_hit' => 'Žao nam je, već ste napravili $1 korisnička imena. Više nije dozvoljeno.',
+'emailauthenticated' => 'Vaša adresa e-pošte je potvrđena: $1.',
+'emailnotauthenticated' => 'Vaša adresa e-pošte još uvek nije potvrđena. E-pošta neće biti poslata ni za jednu od sledećih mogućnosti.',
+'noemailprefs' => 'Naznačite adresu e-pošte kako bi ove mogućnosti radile.',
+'emailconfirmlink' => 'Potvrdite vašu adresu e-pošte',
+'invalidemailaddress' => 'Adresa e-pošte ne može biti primljena jer izgleda nije pravilnog formata. Molimo unesite dobro-formatiranu adresu ili ispraznite to polje.',
+'accountcreated' => 'Nalog je napravljen',
+'accountcreatedtext' => 'Korisnički nalog za $1 je napravljen.',
+
+# Edit page toolbar
+'bold_sample' => 'podebljan tekst',
+'bold_tip' => 'podebljan tekst',
+'italic_sample' => 'kurzivan tekst',
+'italic_tip' => 'kurzivan tekst',
+'link_sample' => 'naslov veze',
+'link_tip' => 'unutrašnja veza',
+'extlink_sample' => 'http://www.adresa.com opis adrese',
+'extlink_tip' => 'spoljašnja veza (ne zaboravite prefiks http://)',
+'headline_sample' => 'Naslov',
+'headline_tip' => 'Naslov drugog nivoa',
+'math_sample' => 'Ovde unesite formulu',
+'math_tip' => 'Matematička formula (LaTeX)',
+'nowiki_sample' => 'Dodaj neformatirani tekst ovde',
+'nowiki_tip' => 'Ignoriši viki formatiranje',
+'image_sample' => 'ime_slike.jpg',
+'image_tip' => 'Uklopljena slika',
+'media_sample' => 'ime_medija_fajla.mp3',
+'media_tip' => 'Putanja ka multimedijalnom fajlu',
+'sig_tip' => 'Vaš potpis sa trenutnim vremenom',
+'hr_tip' => 'Horizontalna linija',
+
+# Edit pages
+#
+'summary' => 'Opis izmene',
+'subject' => 'Tema/naslov',
+'minoredit' => 'Ovo je mala izmena',
+'watchthis' => 'Nadgledaj ovaj članak',
+'savearticle' => 'Snimi stranicu',
+'preview' => 'Pretpregled',
+'showpreview' => 'Prikaži pretpregled',
+'showlivepreview' => 'Živi pretpregled',
+'showdiff' => 'Prikaži promene',
+'anoneditwarning' => 'Niste prijavljeni. Vaša IP adresa će biti zabeležena u istoriji izmena ove strane.',
+'missingsummary' => '\'\'\'Podsetnik:\'\'\' Niste uneli opis izmene. Ukoliko kliknete Snimi stranicu ponovo, vaše izmene će biti snimljene bez opisa.',
+'missingcommenttext' => 'Molimo unestite komentar ispod.',
+'missingcommentheader' => "'''Podsetnik:''' Niste naveli naslov ovog komentara. Ukoliko kliknete ''Snimi ponovo'', vaš komentar će biti snimljen bez naslova.",
+'blockedtitle' => 'Korisnik je blokiran',
+'blockedtext' => '<big>\'\'\'Vaše korisničko ime ili IP adresa je blokirano.\'\'\'</big>
+
+Blokirao vas je korisnik $1. Razlog za blokiranje je \'\'$2\'\'.
+
+Možete kontaktirati korisnika $1 ili nekog drugog [[{{ns:project}}:Administratori|administratora]] kako biste razgovarali o blokadi. Ne možete da koristite opciju "Pošalji e-poštu ovom korisniku" ukoliko nemate valjanu adresu e-pošte navedenu u vašim [[Special:Preferences|podešavanjima]]. Vaša trenutna IP adresa je $3. Molimo uključite ovo u svaki vaš zahtev.',
+'blockedoriginalsource' => 'Izvor \'\'\'$1\'\'\' je prikazan ispod:',
+'blockededitsource' => 'Tekst \'\'\'vaših izmena\'\'\' za \'\'\'$1\'\'\' je prikazan ispod:',
+'whitelistedittitle' => 'Obavezno je prijavljivanje za uređivanje',
+'whitelistedittext' => 'Morate da se [[{{ns:special}}:Userlogin|prijavite]] da biste menjali članke.',
+'whitelistreadtitle' => 'Obavezno je prijavljivanje za čitanje',
+'whitelistreadtext' => 'Morate da se [[{{ns:special}}:Userlogin|prijavite]] da biste čitali članke.',
+'whitelistacctitle' => 'Nije vam dozvoljeno da napravite nalog',
+'whitelistacctext' => 'Da bi vam bilo dozvoljeno da pravite naloge na ovom vikiju morate da se [[{{ns:special}}:Userlogin|prijavite]] i imate odgovarajuća ovlašćenja.',
+'confirmedittitle' => 'Potrebna je potvrda adrese e-pošte za uređivanje',
+'confirmedittext' => 'Morate potvrditi vašu adresu e-pošte pre uređivanja strana. Molimo postavite i potvrdite adresu vaše e-pošte preko vaših [[{{ns:special}}:Preferences|korisničkih podešavanja]].',
+'loginreqtitle' => 'Potrebno [[{{ns:special}}:Userlogin|prijavljivanje]]',
+'loginreqlink' => 'prijava',
+'loginreqpagetext' => 'Morate $1 da biste videli ostale strane.',
+'accmailtitle' => 'Lozinka je poslata.',
+'accmailtext' => 'Lozinka za nalog "$1" je poslata na adresu $2.',
+'newarticle' => '(Novi)',
+'newarticletext' => 'Pratili ste vezu ka stranici koja još ne postoji.
+Da biste je napravili, počnite da kucate u polju ispod
+(pogledajte [[{{ns:help}}:Sadržaj|pomoć]] za više informacija).
+Ako ste došli ovde greškom, samo kliknite dugme \'\'\'back\'\'\' dugme vašeg brauzera.',
+'anontalkpagetext' => '---- \'\'Ovo je stranica za razgovor za anonimnog korisnika koji još nije napravio nalog ili ga ne koristi. Zbog toga moramo da koristimo brojčanu IP adresu kako bismo identifikovali njega ili nju. Takvu adresu može deliti više korisnika. Ako ste anonimni korisnik i mislite da su vam upućene nebitne primedbe, molimo vas da [[{{ns:special}}:Userlogin|napravite nalog ili se prijavite]] da biste izbegli buduću zabunu sa ostalim anonimnim korisnicima.\'\'',
+'noarticletext' => 'Trenutno nema teksta na ovoj stranici. Možete [[{{ns:special}}:Search/{{PAGENAME}}|pretražiti ovaj naziv]] u ostalim stranicama ili [{{fullurl:{{FULLPAGENAME}}|action=edit}} urediti ovu stranicu].',
+'clearyourcache' => '\'\'\'Zapamtite:\'\'\' Nakon snimanja, možda morate očistiti keš vašeg brauzera da biste videli promene. \'\'\'Mozilla / Firefox / Safari:\'\'\' držite \'\'Shift\'\' dok klikćete \'\'Reload\'\' ili pritisnite  \'\'Shift+Ctrl+R\'\' (\'\'Cmd-Shift-R\'\' na \'\'Apple Mac\'\' mašini); \'\'\'IE:\'\'\' držite \'\'Ctrl\'\' dok klikćete \'\'Refresh\'\' ili pritisnite \'\'Ctrl-F5\'\'; \'\'\'Konqueror:\'\'\': samo kliknite \'\'Reload\'\' dugme ili pritisnite \'\'F5\'\'; korisnici \'\'\'Opera\'\'\' brauzera možda moraju da u potpunosti očiste svoj keš preko \'\'Tools→Preferences\'\'.',
+'usercssjsyoucanpreview' => '<strong>Savet:</strong> Korisitite \'Prikaži pretpregled\' dugme da testirate svoj novi CSS/JS pre snimanja.',
+'usercsspreview' => '\'\'\'Zapamtite ovo je samo pretpregled vašeg CSS i da još uvek nije snimljen!\'\'\'',
+'userjspreview' => '\'\'\'Zapamtite ovo je samo pretpregled vaše JavaScript-e i da još uvek nije snimljen!\'\'\'',
+'userinvalidcssjstitle' => '\'\'\'Pažnja:\'\'\' Ne postoji koža "$1". Zapamtite da lične .css i .js koriste mala početna slova, npr. Korisnik:Petar/monobook.css a ne Korisnik:Petar/Monobook.css.',
+'updated' => '(Ažurirano)',
+'note' => '<strong>Napomena:</strong>',
+'previewnote' => '<strong>Ovo samo pretpregled; izmene još nisu sačuvane!</strong>',
+'session_fail_preview' => '<strong>Žao nam je! Nismo mogli da obradimo vašu izmenu zbog gubitka podataka seanse. Molimo pokušajte kasnije. Ako i dalje ne radi, pokušajte da se odjavite i ponovo prijavite.</strong>',
+'previewconflict' => 'Ovaj pretpregled oslikava kako će tekst u
+tekstualnom polju izgledati ako se odlučite da ga snimite.',
+'session_fail_preview_html' => '<strong>Žao nam je! Nismo mogli da obradimo vašu izmenu zbog gubitka podataka seanse.</strong>
+
+\'\'Zbog toga što ova viki ima omogućen sirov HTML, pretpregled je sakriven kao predostrožnost protiv JavaScript napada.\'\'
+
+<strong>Ako ste pokušali da napravite pravu izmenu, molimo pokušajte ponovo. Ako i dalje ne radi, pokušajte da se odjavite i ponovo prijavite.</strong>',
+'importing' => 'Uvoz u toku: $1',
+'editing' => 'Uređujete $1',
+'editinguser' => 'Uređujete $1',
+'editingsection' => 'Uređujete $1 (deo)',
+'editingcomment' => 'Uređujete $1 (komentar)',
+'editconflict' => 'Sukobljene izmene: $1',
+'explainconflict' => 'Neko drugi je promenio ovu stranicu otkad ste vi počeli da je menjate.
+Gornje tekstualno polje sadrži tekst stranice kakav trenutno postoji.
+Vaše izmene su prikazane u donjem tekstu.
+Moraćete da unesete svoje promene u postojeći tekst.
+<b>Samo</b> tekst u gornjem tekstualnom polju će biti snimljen kada
+pritisnete "Snimi stranicu".<br />',
+'yourtext' => 'Vaš tekst',
+'storedversion' => 'Uskladištena verzija',
+'nonunicodebrowser' => '<strong>UPOZORENJE: Vaš brauzer ne podržava unikod. Molimo promenite ga pre nego što počnete sa uređivanjem članka.</strong>',
+'editingold' => '<strong>PAŽNJA: Vi menjate stariju reviziju ove stranice.
+Ako je snimite, sve promene učinjene od ove revizije biće izgubljene.</strong>',
+'yourdiff' => 'Razlike',
+'copyrightwarning' => 'Napomena: Za sve vaše doprinose se smatra da su izdati pod $2 (vidite $1 za detalje). Ako ne želite da se vaši doprinosi nemilosrdno menjaju, ne šaljite ih ovde.<br />
+Takođe nam obećavate da ste ovo sami napisali ili prekopirali iz izvora u javnom vlasništvu ili sličnog slobodnog izvora.
+<strong>NE ŠALJITE RADOVE ZAŠTIĆENE AUTORSKIM PRAVIMA BEZ DOZVOLE!</strong>',
+'copyrightwarning2' => 'Napomena: Sve vaše doprinose ostali korisnici mogu da menjaju ili uklone. Ako ne želite da se vaši doprinosi nemilosrdno menjaju, ne šaljite ih ovde.<br />
+Takođe nam obećavate da ste ovo sami napisali ili prekopirali iz izvora u javnom vlasništvu ili sličnog slobodnog izvora (vidite $1 za detalje).
+<strong>NE ŠALJITE RADOVE ZAŠTIĆENE AUTORSKIM PRAVIMA BEZ DOZVOLE!</strong>',
+'longpagewarning' => '<strong>PAŽNJA: Ova stranica ima $1 kilobajta; neki brauzeri imaju problema sa uređivanjem strana koje imaju blizu ili više od 32 kilobajta. Molimo vas da razmotrite razbijanje stranice na manje delove.</strong>',
+'longpageerror' => '<strong>GREŠKA: Tekst koji snimate je velik $1 kilobajta, što je veće od maksimalno dozvoljene veličine koja iznosi $2 kilobajta. Nemoguće je snimiti stranicu.</strong>',
+'readonlywarning' => '<strong>PAŽNJA: Baza je upravo zaključana zbog održavanja,
+tako da sada nećete moći da snimite svoje izmene. Možda bi bilo dobro da iskopirate tekst u neki editor teksta i snimite ga za kasnije.</strong>',
+'protectedpagewarning' => '<strong>PAŽNJA: Ova stranica je zaključana tako da samo korisnici sa
+administratorskim privilegijama mogu da je menjaju. Uverite se
+da pratite [[{{ns:project}}:Pravila o zaštiti stranica|pravila o zaštiti stranica]].</strong>',
+'semiprotectedpagewarning' => '\'\'\'Napomena:\'\'\' Ova stranica je zaključana tako da je samo registrovani korisnici mogu uređivati.',
+'templatesused' => 'Šabloni koji se koriste na ovoj stranici:',
+'edittools' => '<!-- Tekst odavde će biti pokazan ispod formulara za uređivanje i slanje slika. -->',
+'nocreatetitle' => 'Pravljenje stranice ograničeno',
+'nocreatetext' => 'Na ovom sajtu je ograničeno pravljenje novih stranica. Možete se vratiti i urediti već postojeću stranu ili [[Posebno:Userlogin|se prijaviti ili napraviti nalog]].',
+'cantcreateaccounttitle' => 'Ne može da se napravi nalog',
+'cantcreateaccounttext' => 'Pravljenje naloga sa ove IP adrese (<b>$1</b>) je blokirano.
+Ovo je verovatno zbog učestalog vandalizma iz vaše škole ili Internet servis provajdera.',
+
+# History pages
+#
+'revhistory' => 'Istorija izmena',
+'viewpagelogs' => 'Pogledaj protokole za ovu stranu',
+'nohistory' => 'Ne postoji istorija izmena za ovu stranicu.',
+'revnotfound' => 'Revizija nije pronađena',
+'revnotfoundtext' => 'Starija revizija ove stranice koju ste zatražili nije nađena.
+Molimo vas da proverite URL koji ste upotrebili da biste pristupili ovoj stranici.',
+'loadhist' => 'Učitavam istoriju stranice',
+'currentrev' => 'Trenutna revizija',
+'revisionasof' => 'Revizija od $1',
+'revision-info' => 'Revizija od $1; $2',
+'previousrevision' => '← Prethodna revizija',
+'nextrevision' => 'Sledeća revizija →',
+'currentrevisionlink' => 'Trenutna revizija',
+'cur' => 'tren',
+'next' => 'sled',
+'last' => 'posl',
+'orig' => 'orig',
+'histlegend' => 'Odabiranje razlika: odaberite kutijice revizija za upoređivanje i pritisnite enter ili dugme na dnu.<br />
+Objašnjenje: (tren) = razlika sa trenutnom verzijom,
+(posl) = razlika sa prethodnom verzijom, M = mala izmena',
+'deletedrev' => '[obrisan]',
+'histfirst' => 'Najranije',
+'histlast' => 'Poslednje',
+'rev-deleted-comment' => '(komentar uklonjen)',
+'rev-deleted-user' => '(korisničko ime uklonjeno)',
+'rev-deleted-text-permission' => '<div class="mw-warning plainlinks">
+Revizija ove stranice je uklonjena iz javnih arhiva.
+Moguće da ima više detalja u [{{fullurl:Special:Log/delete|page={{PAGENAMEE}}}} istoriji brisanja].
+</div>',
+'rev-deleted-text-view' => '<div class="mw-warning plainlinks">
+Revizija ove stranice je uklonjena iz javnih arhiva.
+Kao administrator, možete da je pogledate;
+Moguće da ima više detalja u [{{fullurl:Special:Log/delete|page={{PAGENAMEE}}}} istoriji brisanja].
+</div>',
+'rev-delundel' => 'pokaži/sakrij',
+
+'history-feed-title' => 'Istorija revizija',
+'history-feed-description' => 'Istorija revizija za ovu stranu na vikiju',
+'history-feed-item-nocomment' => '$1, $2', # user at time
+'history-feed-empty' => 'Tražena stranica ne postoji.
+Moguće da je obrisana iz vikija ili preimenovana.
+Pokušajte [[Posebno:Search|da pretražite viki]] za relevantne nove strane.',
+
+# Revision deletion
+#
+'revisiondelete' => 'Obriši/vrati reviziju',
+'revdelete-nooldid-title' => 'Nema odabrane revizije',
+'revdelete-nooldid-text' => 'Niste odabrali željenu reviziju ili revizije kako biste uključili ove funkcije.',
+'revdelete-selected' => 'Izabrano revizija od [[:$1]]:',
+'revdelete-text' => 'Obrisane revizije će se i dalje pojavljivati na istoriji stranice,
+ali će njihov sadržaj biti skriven javnosti.
+
+Ostali administratori na ovoj Vikipediji će i dalje imati mogućnost da vide skriveni sadržaj i moći će da ga vrate ponovo putem ove iste komande, sve ukoliko nisu primenjene dodatne restrikcije operatora sajta.',
+'revdelete-legend' => 'Postavi restrikcije revizija:',
+'revdelete-hide-text' => 'Sakrij tekst revizije',
+'revdelete-hide-comment' => 'Sakrij opis izmene',
+'revdelete-hide-user' => 'Sakrij korisničko ime/IP adresu korisnika koji je uređivao stranicu',
+'revdelete-hide-restricted' => 'Primeni ove restrikcije za administratore isto kao i za ostale',
+'revdelete-log' => 'Komentar protokola:',
+'revdelete-submit' => 'Primeni na izabrane revizije',
+'revdelete-logentry' => 'promenjen prikaz revizije za [[$1]]',
+
+# Diffs
+#
+'difference' => '(Razlika između revizija)',
+'loadingrev' => 'učitavam reviziju za razliku',
+'lineno' => 'Linija $1:',
+'editcurrent' => 'Izmeni trenutnu verziju ove stranice',
+'selectnewerversionfordiff' => 'Izaberi noviju verziju za upoređivanje',
+'selectolderversionfordiff' => 'Izaberi stariju verziju za upoređivanje',
+'compareselectedversions' => 'Uporedi označene verzije',
+
+# Search results
+#
+'searchresults' => 'Rezultati pretrage',
+'searchresulttext' => 'Za više informacija o pretraživanju sajta {{SITENAME}}, pogledajte [[{{ns:project}}:Pretraživanje|Pretraživanje sajta {{SITENAME}}]].',
+'searchsubtitle' => 'Tražili ste \'\'\'[[:$1]]\'\'\'',
+'searchsubtitleinvalid' => 'Tražili ste \'\'\'$1\'\'\'',
+'badquery' => 'Loše oblikovan upit za pretragu',
+'badquerytext' => 'Nismo mogli da obradimo vaš upit.
+Ovo je verovatno zbog toga što ste pokušali da tražite
+reč kraću od tri slova, što trenutno nije podržano.
+Takođe je moguće da ste pogrešno ukucali izraz, na
+primer "riba ima ima krljušti".
+Molimo vas pokušajte nekim drugim upitom.',
+'matchtotals' => 'Upit "$1" je nađen u $2 naslova članaka
+i tekst $3 članaka.',
+'noexactmatch' => 'Ne postoji stranica sa naslovom "$1". Možete [[$1|napraviti ovu stranicu]].',
+'titlematches' => 'Naslov stranice odgovara',
+'notitlematches' => 'Nijedan naslov stranice ne odgovara',
+'textmatches' => 'Tekst stranice odgovara',
+'notextmatches' => 'Nijedan tekst stranice ne odgovara',
+'prevn' => 'prethodnih $1',
+'nextn' => 'sledećih $1',
+'viewprevnext' => 'Pogledaj ($1) ($2) ($3).',
+'showingresults' => 'Prikazujem ispod <b>$1</b> rezultata počev od #<b>$2</b>.',
+'showingresultsnum' => 'Prikazujem ispod <b>$3</b> rezultate počev od #<b>$2</b>.',
+'nonefound' => '\'\'\'Napomena\'\'\': neuspešne pretrage su
+često izazvane traženjem čestih reči kao "je" ili "od",
+koje nisu indeksirane, ili navođenjem više od jednog izraza za traženje (samo stranice
+koje sadrže sve izraze koji se traže će se pojaviti u rezultatu).',
+'powersearch' => 'Traži',
+'powersearchtext' => 'Pretraga u imenskim prostorima:<br />$1<br />$2 Izlistaj preusmerenja<br />Traži $3 $9',
+'searchdisabled' => 'Pretraga za sajt {{SITENAME}} je onemogućena. U međuvremenu, možete koristiti Gugl pretragu. Imajte na umu da indeksi Gugla za sajt {{SITENAME}} mogu biti zastareli.',
+
+'blanknamespace' => '(Glavno)',
+
+# Preferences page
+#
+'preferences' => 'Podešavanja',
+'mypreferences' => 'Moja podešavanja',
+'prefsnologin' => 'Niste prijavljeni',
+'prefsnologintext' => 'Morate biti [[{{ns:special}}:Userlogin|prijavljeni]]
+da biste podešavali korisnička podešavanja.',
+'prefsreset' => 'Vraćena su uskladištena podešavanja.',
+'qbsettings' => 'Brza paleta',
+'qbsettings-none'	=> 'Nikakva',
+'qbsettings-fixedleft'	=> 'Pričvršćena levo',
+'qbsettings-fixedright'	=> 'Pričvršćena desno',
+'qbsettings-floatingleft'	=> 'Plutajuća levo',
+'qbsettings-floatingright'	=> 'Plutajuća desno',
+'changepassword' => 'Promeni lozinku',
+'skin' => 'Koža',
+'math' => 'Matematike',
+'dateformat' => 'Format datuma',
+'datedefault' => 'Nije bitno',
+'datetime' => 'Datum i vreme',
+'math_failure' => 'Neuspeh pri parsiranju',
+'math_unknown_error' => 'nepoznata greška',
+'math_unknown_function' => 'nepoznata funkcija',
+'math_lexing_error' => 'rečnička greška',
+'math_syntax_error' => 'sintaksna greška',
+'math_image_error' => 'PNG konverzija neuspešna; proverite tačnu instalaciju latex-a, dvips-a, gs-a i convert-a',
+'math_bad_tmpdir' => 'Ne mogu da napišem ili napravim privremeni math direktorijum',
+'math_bad_output' => 'Ne mogu da napišem ili napravim direktorijum za math izlaz.',
+'math_notexvc' => 'Nedostaje izvršno texvc; molimo pogledajte math/README da biste podesili.',
+'prefs-personal' => 'Korisnička podešavanja',
+'prefs-rc' => 'Skorašnje izmene',
+'prefs-watchlist' => 'Spisak nadgledanja',
+'prefs-watchlist-days' => 'Broj dana koji treba da se vidi na spisku nadgledanja:',
+'prefs-watchlist-edits' => 'Broj izmena koji treba da se vidi na proširenom spisku nadgledanja:',
+'prefs-misc' => 'Razno',
+'saveprefs' => 'Sačuvaj',
+'resetprefs' => 'Vrati',
+'oldpassword' => 'Stara lozinka:',
+'newpassword' => 'Nova lozinka:',
+'retypenew' => 'Ponovo otkucajte novu lozinku:',
+'textboxsize' => 'Veličine tekstualnog polja',
+'rows' => 'Redova',
+'columns' => 'Kolona',
+'searchresultshead' => 'Pretraga',
+'resultsperpage' => 'Pogodaka po stranici:',
+'contextlines' => 'Linija po pogotku:',
+'contextchars' => 'Karaktera konteksta po liniji:',
+'stubthreshold' => 'Granica za prikazivanje klica:',
+'recentchangescount' => 'Broj naslova u skorašnjim izmenama:',
+'savedprefs' => 'Vaša podešavanja su sačuvana.',
+'timezonelegend' => 'Vremenska zona',
+'timezonetext' => 'Broj sati za koji se vaše lokalno vreme razlikuje od serverskog vremena (UTC).',
+'localtime' => 'Lokalno vreme',
+'timezoneoffset' => 'Odstupanje¹',
+'servertime' => 'Vreme na serveru',
+'guesstimezone' => 'Popuni iz brauzera',
+'allowemail' => 'Omogući e-poštu od drugih korisnika',
+'defaultns' => 'Po standardu traži u ovim imenskim prostorima:',
+'default' => 'standard',
+'files' => 'Fajlovi',
+
+# User rights
+'userrights-lookup-user' => 'Upravljaj korisničkim grupama',
+'userrights-user-editname' => 'Unesite korisničko ime:',
+'editusergroup' => 'Menjaj grupe korisnika',
+
+'userrights-editusergroup' => 'Promeni korisničke grupe',
+'saveusergroups' => 'Sačuvaj korisničke grupe',
+'userrights-groupsmember' => 'Član:',
+'userrights-groupsavailable' => 'Dostupne grupe:',
+'userrights-groupshelp' => 'Odabrane grupe od kojih želite da se ukloni korisnik ili da se doda.
+Neodabrane grupe neće biti promenjene. Možete da deselektujete grupu koristeći CTRL + levi klik',
+
+# Groups
+'group' => 'Grupa:',
+'group-bot' => 'botovi',
+'group-sysop' => 'administratori',
+'group-bureaucrat' => 'birokrate',
+'group-all' => '(svi)',
+
+'group-bot-member' => 'bot',
+'group-sysop-member' => 'administrator',
+'group-bureaucrat-member' => 'birokrata',
+
+'grouppage-bot' => 'Project:Botovi',
+'grouppage-sysop' => 'Project:Spisak administratora',
+'grouppage-bureaucrat' => 'Project:Birokrate',
+
+# Recent changes
+#
+'changes' => 'izmene',
+'recentchanges' => 'Skorašnje izmene',
+'recentchangestext' => 'Ovde pratite najskorije izmene na vikiju.',
+
+'rcnote' => 'Ispod je poslednjih <strong>$1</strong> promena u poslednjih <strong>$2</strong> dana.',
+'rcnotefrom' => 'Ispod su promene od <b>$2</b> (do <b>$1</b> prikazano).',
+'rclistfrom' => 'Pokaži nove promene počev od $1',
+'rcshowhideminor' => '$1 male izmene',
+'rcshowhidebots' => '$1 botove',
+'rcshowhideliu' => '$1 prijavljene korisnike',
+'rcshowhideanons' => '$1 anonimne korisnike',
+'rcshowhidepatr' => '$1 patrolirane izmene',
+'rcshowhidemine' => '$1 sopstvene izmene',
+'rclinks' => 'Pokaži poslednjih $1 promena u poslednjih $2 dana<br />$3',
+'diff' => 'razl',
+'hist' => 'ist',
+'hide' => 'sakrij',
+'show' => 'pokaži',
+'minoreditletter' => 'm',
+'newpageletter' => 'N',
+'boteditletter' => 'b',
+'sectionlink' => '→',
+'number_of_watching_users_pageview' => '[$1 korisnik/a koji nadgleda/ju]',
+'rc_categories' => 'Ograniči na kategorije (razdvoji sa "|")',
+'rc_categories_any' => 'Bilo koji',
+
+# Upload
+#
+'upload' => 'Pošalji fajl',
+'uploadbtn' => 'Pošalji fajl',
+'reupload' => 'Ponovo pošalji',
+'reuploaddesc' => 'Vrati se na upitnik za slanje.',
+'uploadnologin' => 'Niste prijavljeni',
+'uploadnologintext' => 'Morate biti [[{{ns:special}}:Userlogin|prijavljeni]]
+da biste slali fajlove.',
+'upload_directory_read_only' => 'Na direktorijum za slanje ($1) server ne može da piše.',
+'uploaderror' => 'Greška pri slanju',
+'uploadtext' => 'Koristite donji obrazac da pošaljete fajlove. Za gledanje ili pretraživanje već poslatih slika, idite na [[{{ns:special}}:Imagelist|spisak poslatih fajlova]]. Slanja i brisanja se beleže u [[{{ns:special}}:Log/upload|istoriji slanja]]
+
+Da biste ubacili sliku na stranu, koristite vezu u obliku
+\'\'\'<nowiki>[[{{ns:image}}:Fajl.jpg]]</nowiki>\'\'\',
+\'\'\'<nowiki>[[{{ns:image}}:Fajl.png|opis slike]]</nowiki>\'\'\' ili
+\'\'\'<nowiki>[[{{ns:media}}:Fajl.ogg]]</nowiki>\'\'\' za direktno povezivanje na fajl.',
+'uploadlog' => 'istorija slanja',
+'uploadlogpage' => 'istorija slanja',
+'uploadlogpagetext' => 'Ispod je spisak najskorijih slanja.',
+'filename' => 'Ime fajla',
+'filedesc' => 'Opis',
+'fileuploadsummary' => 'Opis:',
+'filestatus' => 'Status autorskog prava',
+'filesource' => 'Izvor',
+'copyrightpage' => 'Project:Autorska prava',
+'copyrightpagename' => 'Autorska prava projekta {{SITENAME}}',
+'uploadedfiles' => 'Poslati fajlovi',
+'ignorewarning' => 'Ignoriši upozorenja i snimi datoteku.',
+'ignorewarnings' => 'Ignoriši sva upozorenja',
+'minlength' => 'Imena slika moraju imati bar tri slova.',
+'illegalfilename' => 'Fajl "$1" sadrži karaktere koji nisu dozvoljeni u nazivima stranica. Molimo Vas promenite ime fajla i ponovo ga pošaljite.',
+'badfilename' => 'Ime slike je promenjeno u "$1".',
+'badfiletype' => '".$1" nije preporučeni format slike.',
+'largefile' => 'Preporučuje se da slike ne pređu veličinu od $1 bajtova; ova slika ima $2 bajtova.',
+'largefileserver' => 'Ovaj fajl je veći nego što je podešeno da server dozvoli.',
+'emptyfile' => 'Fajl koji ste poslali deluje da je prazan. Ovo je moguće zbog greške u imenu fajla. Molimo proverite da li stvarno želite da pošaljete ovaj fajl.',
+'fileexists' => 'Fajl sa ovim imenom već postoji. Molimo proverite $1 ako niste sigurni da li želite da ga promenite.',
+'fileexists-forbidden' => 'Fajl sa ovim imenom već postoji; molimo vratite se i pošaljite ovaj fajl pod novim imenom. [[{{ns:image}}:$1|thumb|center|$1]]',
+'fileexists-shared-forbidden' => 'Fajl sa ovim imenom već postoji u zajedničkoj ostavi; molimo vratite se i pošaljite ovaj fajl pod novim imenom. [[{{ns:image}}:$1|thumb|center|$1]]',
+'successfulupload' => 'Uspešno slanje',
+'fileuploaded' => 'Fajl "$1" je uspešno poslat.
+Molim pratite ovu vezu: $2 do stranice za opis i unesite
+informacije o fajlu, npr. odakle je, kada i
+ko ga je napravio, i bilo šta drugo što znate o njemu.
+Ako je ovo slika, možete je uneti ovako: <tt><nowiki>[[Image:$1|thumb|Opis]]</nowiki></tt>',
+'uploadwarning' => 'Upozorenje pri slanju',
+'savefile' => 'Snimi fajl',
+'uploadedimage' => 'poslao "[[$1]]"',
+'uploaddisabled' => 'Slanje fajlova je isključeno.',
+'uploaddisabledtext' => 'Slanja fajlova su onemogućena na ovom vikiju.',
+'uploadscripted' => 'Ovaj fajl sadrži HTML ili kod skripte koje internet brauzer može pogrešno da interpretira.',
+'uploadcorrupt' => 'Fajl je neispravan ili ima netačnu ekstenziju. Molimo proverite fajl i pošaljite ga ponovo.',
+'uploadvirus' => 'Fajl sadrži virus! Detalji: $1',
+'sourcefilename' => 'Ime fajla izvora',
+'destfilename' => 'Ciljano ime fajla',
+'watchthisupload' => 'Nadgledaj stranicu',
+'filewasdeleted' => 'Fajl sa ovim imenom je ranije poslat, a kasnije obrisan. Trebalo bi da proverite $1 pre nego što nastavite sa ponovnim slanjem.',
+
+'upload-proto-error' => 'Nekorektni protokol',
+'upload-proto-error-text' => 'Slanje eksternih fajlova zahteva URLove koji počinju sa <code>http://</code> ili <code>ftp://</code>.',
+'upload-file-error' => 'Interna greška',
+'upload-file-error-text' => 'Desila se interna greška pri pokušaju pravljenja privremenog fajla na serveru. Kontaktirajte sistem administratora.',
+'upload-misc-error' => 'Nepoznata greška pri slanju fajla',
+'upload-misc-error-text' => 'Nepoznata greška pri slanju fajla. Proverite da li je URL ispravan i pokušajte ponovo. Ako problem ostane, kontaktirajte sistem administratora.',
+# Some likely curl errors.  More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
+'upload-curl-error6' => "URL nije dostupan",
+'upload-curl-error6-text' => 'URL koji ste uneli nije dostupan. Uradite dupli klik na URL da proverite da li je adresa dostupna.',
+'upload-curl-error28' => 'Tajmaut greška',
+'upload-curl-error28-text' => 'Sajtu je trebalo previše vremena da odgovori. Proverite da li sajt radi, ili sačekajte malo i pokušajte ponovo.',
+
+'license' => 'Licenca',
+'nolicense' => 'Nema',
+'upload_source_url' => ' (validan, javno dostupan URL)',
+'upload_source_file' => ' (fajl na vašem računaru)',
+
+# Image list
+#
+'imagelist' => 'Spisak slika',
+'imagelisttext' => 'Ispod je spisak od \'\'\'$1\'\'\' {{plural:$1|fajla|fajla|fajlova}} poređanih $2.',
+'imagelistforuser' => 'Ovo je spisak slika koje je poslao korisnik $1.',
+'getimagelist' => 'pribavljam spisak slika',
+'ilsubmit' => 'Traži',
+'showlast' => 'Prikaži poslednjih $1 slika poređanih $2.',
+'bydate' => 'po datumu',
+'byname' => 'po imenu',
+'bysize' => 'po veličini',
+'imgdelete' => 'obr',
+'imgdesc' => 'opis',
+'imgfile' => 'fajl',
+'imghistory' => 'istorija slike',
+'imglegend' => 'Objašnjenje: (opis) = prikaži/izmeni opis slike.',
+'revertimg' => 'vrt',
+'deleteimg' => 'obr',
+'deleteimgcompletely' => 'Obriši sve revizije ovog fajla',
+'imghistlegend' => 'Objašnjenje: (tren) = ovo je trenutna slika, (obr) = obriši
+ovu staru verziju, (vrt) = vrati na ovu staru verziju.
+<br /><i>Kliknite na datum da vidite sliku poslatu tog datuma</i>.',
+'imagelinks' => 'Upotreba slike',
+'linkstoimage' => 'Sledeće stranice koriste ovaj fajl:',
+'nolinkstoimage' => 'Nema stranica koje koriste ovaj fajl.',
+'sharedupload' => 'Ova slika je sa zajedničke ostave i možda je koriste ostali projekti.',
+'shareduploadwiki' => 'Molimo pogledajte $1 za dalje informacije.',
+'shareduploadwiki-linktext' => 'strana za opis fajla',
+'noimage' => 'Ne postoji fajl sa ovim imenom, možete ga $1',
+'noimage-linktext' => 'poslati',
+'uploadnewversion-linktext' => 'Pošaljite noviju verziju ovog fajla',
+'imagelist_date' => 'Datum',
+'imagelist_name' => 'Ime',
+'imagelist_user' => 'Korisnik',
+'imagelist_size' => 'Veličina (bajtovi)',
+'imagelist_description' => 'Opis slike',
+'imagelist_search_for' => 'Traži ime slike:',
+
+# Mime search
+#
+'mimesearch' => 'MIME pretraga',
+'mimetype' => 'MIME tip:',
+'download' => 'Preuzmi',
+
+# Unwatchedpages
+#
+'unwatchedpages' => 'Nenadgledane stranice',
+
+# List redirects
+'listredirects' => 'Spisak preusmerenja',
+
+# Unused templates
+'unusedtemplates' => 'Neiskorišćeni šabloni',
+'unusedtemplatestext' => 'Ova strana navodi sve stranice u imenskom prostoru šablona koje nisu uključene ni na jednoj drugoj strani. Ne zaboravite da proverite ostale veze ka šablonima pre nego što ih obrišete.',
+'unusedtemplateswlh' => 'ostale veze',
+
+# Random redirect
+'randomredirect' => 'Slučajno preusmerenje',
+
+# Statistics
+#
+'statistics' => 'Statistike',
+'sitestats' => 'Statistike sajta',
+'userstats' => 'Statistike korisnika',
+'sitestatstext' => 'Postoji ukupno \'\'\'$1\'\'\' stranica u bazi podataka. Ovaj broj uključuje strane za razgovor, stranice o sajtu, preusmerenja, članke bez ijedne poveznice i ostale stranice koje se ne mogu računati kao članci. Ne računajući njih, postoji \'\'\'$2\'\'\' stranica koje su verovatno legitimni članci.
+
+Na ovaj sajt je poslato \'\'\'$8\'\'\' slika.
+
+Stranice su ukupno pogledane \'\'\'$3\'\'\' puta i \'\'\'$4\'\'\' izmena od postavljanja vikija. Ovo znači da je bilo u proseku \'\'\'$5\'\'\' izmena po stranici i \'\'\'$6\'\'\' pogleda po stranici.
+
+Dužina reda za poslove iznosi \'\'\'$7\'\'\'',
+'userstatstext' => 'Postoji \'\'\'$1\'\'\' registrovanih korisnika, od kojih su \'\'\'$2\'\'\' (ili $4%) administratori (pogledajte $3).',
+'statistics-mostpopular' => 'Najposećenije stranice',
+
+'disambiguations' => 'Stranice za višeznačne odrednice',
+'disambiguationspage' => '{{ns:template}}:Višeznačna odrednica',
+'disambiguationstext' => 'Sledeći članci se povezuju sa <i>višeznačnom odrednicom</i>. Umesto toga, oni bi trebalo da se povezuju sa odgovarajućom temom.<br />Stranica se tretira da je višeznačna odrednica ako je povezana sa $1.<br />Poveznice iz ostalih imenskih prostora <i>nisu</i> navedene ovde.',
+
+'doubleredirects' => 'Dvostruka preusmerenja',
+'doubleredirectstext' => 'Svaki red sadrži veze na prvo i drugo preusmerenje, kao i na prvu liniju teksta drugog preusmerenja, što obično daje "pravi" ciljni članak, na koji bi prvo preusmerenje i trebalo da pokazuje.',
+
+'brokenredirects' => 'Pokvarena preusmerenja',
+'brokenredirectstext' => 'Sledeća preusmerenja su povezana na nepostojeći članak.',
+
+# Miscellaneous special pages
+#
+'nbytes' => '$1 {{PLURAL:$1|bajt|bajta|bajtova}}',
+'ncategories' => '$1 {{PLURAL:$1|kategorija|kategorije|kategorija}}',
+'nlinks' => '$1 {{PLURAL:$1|veza|veze|veza}}',
+'nmembers' => '$1 {{PLURAL:$1|članak|članka|članaka}}',
+'nrevisions' => '$1 {{PLURAL:$1|revizija|revizije|revizija}}',
+'nviews' => '$1 puta pogledano',
+
+'lonelypages' => 'Siročići',
+'lonelypagestext' => 'Sledeće stranice nisu povezane sa drugih stranica na ovom vikiju.',
+'uncategorizedpages' => 'Stranice bez kategorije',
+'uncategorizedcategories' => 'Kategorije bez kategorija',
+'uncategorizedimages' => 'Slike bez kategorija',
+'unusedcategories' => 'Neiskorišćene kategorije',
+'unusedimages' => 'Neiskorišćeni fajlovi',
+'popularpages' => 'Popularne stranice',
+'wantedcategories' => 'Tražene kategorije',
+'wantedpages' => 'Tražene stranice',
+'mostlinked' => 'Najviše povezane strane',
+'mostlinkedcategories' => 'Najviše povezane kategorije',
+'mostcategories' => 'Članci sa najviše kategorija',
+'mostimages' => 'Najviše povezane slike',
+'mostrevisions' => 'Članci sa najviše revizija',
+'allpages' => 'Sve stranice',
+'prefixindex' => 'Spisak prefiksa',
+'randompage' => 'Slučajna stranica',
+'shortpages' => 'Kratke stranice',
+'longpages' => 'Dugačke stranice',
+'deadendpages' => 'Stranice bez internih veza',
+'deadendpagestext' => 'Sledeće stranice ne vežu na druge stranice na ovom vikiju.',
+'listusers' => 'Spisak korisnika',
+'specialpages' => 'Posebne stranice',
+'spheading' => 'Posebne stranice za sve korisnike',
+'restrictedpheading' => 'Zaštićene posebne stranice',
+'recentchangeslinked' => 'Srodne promene',
+'rclsub' => '(na stranice povezane od "$1")',
+'newpages' => 'Nove stranice',
+'newpages-username' => 'Korisničko ime:',
+'ancientpages' => 'Najstariji članci',
+'intl' => 'Međujezičke veze',
+'move' => 'premesti',
+'movethispage' => 'premesti ovu stranicu',
+'unusedimagestext' => '<p>Obratite pažnju da se drugi veb sajtovi
+mogu povezivati na sliku direktnim URL-om, i tako mogu još uvek biti prikazani ovde uprkos
+aktivnoj upotrebi.',
+'unusedcategoriestext' => 'Naredne strane kategorija postoje iako ih ni jedan drugi članak ili kategorija ne koriste.',
+
+'booksources' => 'Štampani izvori',
+'categoriespagetext' => 'Sledeće kategorije već postoje na vikiju',
+'data' => 'Podaci',
+'userrights' => 'Upravljanje korisničkim pravima',
+'groups' => 'Korisničke grupe',
+
+'booksourcetext' => 'Ispod je spisak veza ka drugim sajtovima koji
+prodaju nove i korišćene knjige, i takođe mogu imati daljnje informacije
+o knjigama koje tražite.',
+'isbn' => 'ISBN',
+'alphaindexline' => '$1 u $2',
+'version' => 'Verzija',
+'log' => 'Protokoli',
+'alllogstext' => 'Kombinovani prikaz istorija slanja, brisanja, zaštite, blokiranja i administratorskih prava.
+Možete suziti pregled odabirom tipa istorije, korisničkog imena ili tražene stranice.',
+'logempty' => 'Protokol je prazan.',
+
+# Special:Allpages
+'nextpage' => 'Sledeća stranica ($1)',
+'allpagesfrom' => 'Prikaži stranice početno sa:',
+'allarticles' => 'Svi članci',
+'allinnamespace' => 'Sve stranice ($1 imenski prostor)',
+'allnotinnamespace' => 'Sve stranice (koje nisu u $1 imenskom prostoru)',
+'allpagesprev' => 'Prethodna',
+'allpagesnext' => 'Sledeća',
+'allpagessubmit' => 'Idi',
+'allpagesprefix' => 'Prikaži strane sa prefiksom:',
+'allpagesbadtitle' => 'Dati naziv stranice nije dobar ili sadrži međujezički ili interviki prefiks. Moguće je da sadrži karaktere koji ne mogu da se koriste u nazivima.',
+
+# Special:Listusers
+'listusersfrom' => 'Prikaži korisnike počevši od:',
+
+# Email this user
+#
+'mailnologin' => 'Nema adrese za slanje',
+'mailnologintext' => 'Morate biti [[{{ns:special}}:Userlogin|prijavljeni]]
+i imati ispravnu adresu e-pošte u vašim [[Special:Preferences|podešavanjima]]
+da biste slali e-poštu drugim korisnicima.',
+'emailuser' => 'Pošalji e-poštu ovom korisniku',
+'emailpage' => 'Pošalji e-pismo korisniku',
+'emailpagetext' => 'Ako je ovaj korisnik uneo ispravnu adresu e-pošte u
+svoja korisnička podešavanja, upitnik ispod će poslati jednu poruku.
+Adresa e-pošte koju ste vi uneli u svojim korisničkim podešavanjima će se pojaviti
+kao "From" adresa poruke, tako da će primalac moći da odgovori.',
+'usermailererror' => 'Objekat pošte je vratio grešku:',
+'defemailsubject' => '{{SITENAME}} e-pošta',
+'noemailtitle' => 'Nema adrese e-pošte',
+'noemailtext' => 'Ovaj korisnik nije naveo ispravnu adresu e-pošte,
+ili je izabrao da ne prima e-poštu od drugih korisnika.',
+'emailfrom' => 'Od',
+'emailto' => 'Za',
+'emailsubject' => 'Tema',
+'emailmessage' => 'Poruka',
+'emailsend' => 'Pošalji',
+'emailccme' => 'Pošalji mi kopiju moje poruke u moje sanduče e-pošte.',
+'emailccsubject' => 'Kopija vaše poruke na $1: $2',
+'emailsent' => 'Poruka poslata',
+'emailsenttext' => 'Vaša poruka je poslata elektronskom poštom.',
+
+# Watchlist
+'watchlist' => 'Moj spisak nadgledanja',
+'mywatchlist' => 'Moj spisak nadgledanja',
+'watchlistfor' => '(za \'\'\'$1\'\'\')',
+'nowatchlist' => 'Nemate ništa na svom spisku nadgledanja.',
+'watchlistanontext' => 'Molimo $1 da biste gledali ili menjali stavke na vašem spisku nadgledanja.',
+'watchlistcount' => '\'\'\'Imate $1 {{plural:$1|stavku|stavke|stavki}} na vašem spisku nadgledanja, uključujući strane za razgovor.\'\'\'',
+'clearwatchlist' => 'Obriši spisak nadgledanja',
+'watchlistcleartext' => 'Da li ste sigurni da želite da ih uklonite?',
+'watchlistclearbutton' => 'Obriši spisak nadgledanja',
+'watchlistcleardone' => 'Vaš spisak nadgledanja je obrisan. $1 {{plural:$1|stavka|stavke|stavki}} je uklonjeno.',
+'watchnologin' => 'Niste prijavljeni',
+'watchnologintext' => 'Morate biti [[{{ns:special}}:Userlogin|prijavljeni]] da biste menjali spisak nadgledanja.',
+'addedwatch' => 'Dodato spisku nadgledanja',
+'addedwatchtext' => 'Stranica "[[:$1]]" je dodata vašem [[{{ns:special}}:Watchlist|spisku nadgledanja]] .
+Buduće promene na ovoj stranici i njoj pridruženoj stranici za razgovor biće navedene ovde, i stranica će biti \'\'\'podebljana\'\'\' u [[{{ns:special}}:Recentchanges|spisku skorašnjih izmena]] da bi se lakše uočila.
+
+Ako kasnije želite da uklonite stranicu sa vašeg spiska nadgledanja, kliknite na "ne nadgledaj" na bočnoj paleti.',
+'removedwatch' => 'Uklonjeno sa spiska nadgledanja',
+'removedwatchtext' => 'Stranica "[[:$1]]" je uklonjena sa vašeg spiska nadgledanja.',
+'watch' => 'nadgledaj',
+'watchthispage' => 'Nadgledaj ovu stranicu',
+'unwatch' => 'Prekini nadgledanje',
+'unwatchthispage' => 'Prekini nadgledanje',
+'notanarticle' => 'Nije članak',
+'watchnochange' => 'Ništa što nadgledate nije promenjeno u prikazanom vremenu.',
+'watchdetails' => '* $1 stranica nadgledano ne računajući stranice za razgovor;
+* [[{{ns:special}}:Watchlist/edit|prikaži i menjaj potpuni spisak]]
+* [[{{ns:special}}:Watchlist/clear|ukloni sve stranice]]',
+'wlheader-enotif' => '* Obaveštavanje e-poštom je omogućeno.',
+'wlheader-showupdated' => '* Stranice koje su izmenjene od kada ste ih poslednji put posetili su prikazane \'\'\'podebljano\'\'\'',
+'watchmethod-list' => 'proveravam ima li skorašnjih izmena u nadgledanim stranicama',
+'watchmethod-recent' => 'proveravam ima li nadgledanih stranica u skorašnjim izmenama',
+'removechecked' => 'Ukloni obeležene unose sa spiska nadgledanja',
+'watchlistcontains' => 'Vaš spisak nadgledanja sadrži $1 stranica.',
+'watcheditlist' => 'Ovde je azbučni spisak stranica
+koje nadgledate. Obeležite kućice stranica koje želite da uklonite
+sa svog spiska nadgledanja i kliknite na dugme \'ukloni obeležene\'
+na dnu ekrana (uklanjanje stranice takođe uklanja i prateću stranu za razgovor i obrnuto).',
+'removingchecked' => 'Uklanjam obeležene stvari sa spiska nadgledanja...',
+'couldntremove' => 'Ne mogu da uklonim stavku \'$1\'...',
+'iteminvalidname' => 'Problem sa stavkom \'$1\', neispravno ime...',
+'wlnote' => 'Ispod je poslednjih $1 izmena u poslednjih <b>$2</b> sati.',
+'wlshowlast' => 'Prikaži poslednjih $1 sati $2 dana $3',
+'wlsaved' => 'Ovo je sačuvana verzija vašeg spiska nadgledanja.',
+'wlhideshowown' => '$1 moje izmene.',
+'wlhideshowbots' => '$1 izmena botova.',
+'wldone' => 'Gotovo.',
+
+'enotif_mailer' => '{{SITENAME}} pošta obaveštenja',
+'enotif_reset' => 'Označi sve strane kao posećene',
+'enotif_newpagetext' => 'Ovo je novi članak.',
+'changed' => 'promenjena',
+'created' => 'napravljena',
+'enotif_subject' => '{{SITENAME}} stranica $PAGETITLE je bila $CHANGEDORCREATED od strane $PAGEEDITOR',
+'enotif_lastvisited' => 'Pogledajte $1 za sve promene od vaše poslednje posete.',
+'enotif_body' => 'Dragi $WATCHINGUSERNAME,
+
+{{SITENAME}} stranicaa $PAGETITLE je bila $CHANGEDORCREATED ($PAGEEDITDATE) od strane $PAGEEDITOR,
+pogledajte $PAGETITLE_URL za trenutnu verziju.
+
+$NEWPAGE
+
+Opis izmene urednika: $PAGESUMMARY $PAGEMINOREDIT
+
+Kontaktirajte urednika:
+pošta: $PAGEEDITOR_EMAIL
+viki: $PAGEEDITOR_WIKI
+
+Neće biti drugih obaveštenja u slučaju daljih promena ukoliko ne posetite ovu stranu.
+Takođe možete da resetujete zastavice za obaveštenja za sve vaše nadgledane strane na vašem spisku nadgledanja.
+
+             Vaš prijateljski {{SITENAME}} sistem obaveštavanja
+
+--
+Da promenite podešavanja vezana za spisak nadgledanja posetite
+{{fullurl:{{ns:special}}:Watchlist/edit}}
+
+Fidbek i dalja pomoć:
+{{fullurl:{{ns:help}}:Sadržaj}}',
+
+# Delete/protect/revert
+#
+'deletepage' => 'Obriši stranicu',
+'confirm' => 'Potvrdi',
+'excontent' => 'sadržaj je bio: \'$1\'',
+'excontentauthor' => 'sadržaj je bio: \'$1\' (a jedinu izmenu je napravio \'$2\')',
+'exbeforeblank' => 'sadržaj pre brisanja je bio: \'$1\'',
+'exblank' => 'stranica je bila prazna',
+'confirmdelete' => 'Potvrdi brisanje',
+'deletesub' => '(Brišem "$1")',
+'historywarning' => 'Pažnja: stranica koju želite da obrišete ima istoriju:',
+'confirmdeletetext' => 'Na putu ste da trajno obrišete stranicu
+ili sliku zajedno sa njenom istorijom iz baze podataka.
+Molimo vas potvrdite da nameravate da uradite ovo, da razumete
+posledice, i da ovo radite u skladu sa
+[[{{ns:project}}:Pravila i smernice|pravilima]].',
+'actioncomplete' => 'Akcija završena',
+'deletedtext' => 'Članak "$1" je obrisan.
+Pogledajte $2 za zapis o skorašnjim brisanjima.',
+'deletedarticle' => 'obrisan "[[$1]]"',
+'dellogpage' => 'istorija brisanja',
+'dellogpagetext' => 'Ispod je spisak najskorijih brisanja.',
+'deletionlog' => 'istorija brisanja',
+'reverted' => 'Vraćeno na raniju reviziju',
+'deletecomment' => 'Razlog za brisanje',
+'imagereverted' => 'Vraćanje na raniju verziju je uspešno.',
+'rollback' => 'Vrati izmene',
+'rollback_short' => 'Vrati',
+'rollbacklink' => 'vrati',
+'rollbackfailed' => 'Vraćanje nije uspelo',
+'cantrollback' => 'Ne mogu da vratim izmenu; poslednji autor je ujedno i jedini.',
+'alreadyrolled' => 'Ne mogu da vratim poslednju izmenu [[:$1]]
+od korisnika [[{{ns:user}}:$2|$2]] ([[{{ns:user_talk}}:$2|razgovor]]); neko drugi je već izmenio ili vratio članak.
+
+Poslednju izmenu je napravio korisnik [[{{ns:user}}:$3|$3]] ([[{{ns:user_talk}}:$3|razgovor]]).',
+#   only shown if there is an edit comment
+'editcomment' => 'Komentar izmene je: "<i>$1</i>".',
+'revertpage' => 'Vraćene izmene od [[{{ns:special}}:Contributions/$2|$2]] ([[{{ns:user_talk}}:$2|razgovor]]) na poslednju izmenu od korisnika [[{{ns:user}}:$1|$1]]',
+'sessionfailure' => 'Izgleda da postoji problem sa vašom seansom prijave;
+ova akcija je prekinuta kao predostrožnost protiv preotimanja seansi.
+Molimo kliknite "back" i ponovo učitajte stranu odakle ste došli, a onda pokušajte ponovo.',
+'protectlogpage' => 'istorija zaključavanja',
+'protectlogtext' => 'Ispod je spisak zaključavanja i otključavanja stranica.',
+'protectedarticle' => 'zaštitio $1',
+'unprotectedarticle' => 'skinuo zaštitu sa $1',
+'protectsub' => '(stavljanje zaštite "$1")',
+'confirmprotecttext' => 'Da li zaista želite da zaštitite ovu stranicu?',
+'confirmprotect' => 'Potvrdite zaštitu',
+'protectmoveonly' => 'Zaštićeno samo od pomeranja',
+'protectcomment' => 'Razlog zaštite',
+'unprotectsub' => '(skidanje zaštite "$1")',
+'confirmunprotecttext' => 'Da li zaista želite da skinete zaštitu sa ove stranice?',
+'confirmunprotect' => 'Potvrdite skidanje zaštite',
+'unprotectcomment' => 'Razlog za skidanje zaštite',
+'protect-unchain' => 'Otključaj dozvole premeštanja',
+'protect-text' => 'Ovde možete pogledati i menjati nivo zaštite za stranicu <strong>$1</strong>.',
+'protect-viewtext' => 'Vaš nalog nema pristup izmenama
+nivoa zaštite. Ovo su trenutna podešavanja za stranicu <strong>$1</strong>:',
+'protect-default' => '(standard)',
+'protect-level-autoconfirmed' => 'Blokiraj neregistrovane korisnike',
+'protect-level-sysop' => 'Samo za administratore',
+
+# restrictions (nouns)
+'restriction-edit' => 'Uređivanje',
+'restriction-move' => 'Premeštanje',
+
+# Undelete
+'undelete' => 'Pogledaj obrisane stranice',
+'undeletepage' => 'Pogledaj i vrati obrisane stranice',
+'viewdeletedpage' => 'Pogledaj obrisane strane',
+'undeletepagetext' => 'Sledeće stranice su obrisane ali su još uvek u arhivi i
+mogu biti vraćene. Arhiva može biti periodično čišćena.',
+'undeleteextrahelp' => 'Da vratite celu stranu, ostavite sve kućice neotkačenim i kliknite na \'\'\'\'\'Vrati\'\'\'\'\'. Da izvršite selektivno vraćanje, otkačite kućice koje odgovaraju reviziji koja treba da se vrati i kliknite na \'\'\'\'\'Vrati\'\'\'\'\'. Klikom na \'\'\'\'\'Poništi\'\'\'\'\' ćete obrisati polje za komentar i sve kućice.',
+'undeletearticle' => 'Vrati obrisani članak',
+'undeleterevisions' => '$1 revizija arhivirano',
+'undeletehistory' => 'Ako vratite stranicu, sve revizije će biti vraćene njenoj istoriji.
+Ako je nova stranica istog imena napravljena od brisanja, vraćene
+revizije će se pojaviti u ranijoj istoriji, a trenutna revizija sadašnje stranice
+neće biti automatski zamenjena.',
+'undeletehistorynoadmin' => 'Ova strana je obrisana. Razlog za brisanje se nalazi u opisu ispod, zajedno sa detaljima o korisniku koji je menjao ovu stranu pre brisanja. Stvarni tekst ovih obrisanih revizija je dostupan samo administratorima.',
+'undeleterevision' => 'Obrisana revizija od $1',
+'undeleterevision-missing' => 'Nekorektna ili nepostojeća revizija. Možda je vaš link pogrešan, ili je revizija restaurirana, ili obrisana iz arhive.',
+'undeletebtn' => 'Vrati!',
+'undeletereset' => 'Poništi',
+'undeletecomment' => 'Komentar:',
+'undeletedarticle' => 'vratio "[[$1]]"',
+'undeletedrevisions' => '$1 revizija vraćeno',
+'undeletedrevisions-files' => '$1 {{plural:$1|revizija|revizije|revizija}} i $2 {{plural:$2|fajl|fajla|fajlova}} vraćeno',
+'undeletedfiles' => '$1 {{plural:$1|fajl vraćen|fajla vraćena|fajlova vraćeno}}',
+'cannotundelete' => 'Vraćanje obrisane verzije nije uspelo; neko drugi je vratio stranicu pre vas.',
+'undeletedpage' => '<big>\'\'\'Strana $1 je vraćena\'\'\'</big>
+
+Pogledajte [[{{ns:special}}:Log/delete|istoriju brisanja]] za spisak skorašnjih brisanja i vraćanja.',
+
+# Namespace form on various pages
+'namespace' => 'Imenski prostor:',
+'invert' => 'Obrni selekciju',
+
+# Contributions
+#
+'contributions' => 'Prilozi korisnika',
+'mycontris' => 'Moji prilozi',
+'contribsub2' => 'Za $1 ($2)',
+'nocontribs' => 'Nisu nađene promene koje zadovoljavaju ove uslove.',
+'ucnote' => 'Ispod je poslednjih <b>$1</b> promena u poslednjih <b>$2</b> dana.',
+'uclinks' => 'Gledaj poslednjih $1 promena; gledaj poslednjih $2 dana.',
+'uctop' => ' (vrh)',
+'newbies' => 'novajlije',
+
+'sp-newimages-showfrom' => 'Prikaži nove slike počevši od $1',
+
+'sp-contributions-newest' => 'Najnovijih',
+'sp-contributions-oldest' => 'Najstarijih',
+'sp-contributions-newer' => 'Novijih $1',
+'sp-contributions-older' => 'Starijih $1',
+'sp-contributions-newbies-sub' => 'Za novajlije',
+
+# What links here
+#
+'whatlinkshere' => 'Šta je povezano ovde',
+'notargettitle' => 'Nema cilja',
+'notargettext' => 'Niste naveli ciljnu stranicu ili korisnika
+na kome bi se izvela ova funkcija.',
+'linklistsub' => '(spisak veza)',
+'linkshere' => 'Sledeće stranice su povezane ovde:',
+'nolinkshere' => 'Ni jedna stranica nije povezana ovde.',
+'isredirect' => 'preusmerivač',
+'istemplate' => 'uključivanje',
+
+# Block/unblock IP
+#
+'blockip' => 'Blokiraj korisnika',
+'blockiptext' => 'Upotrebite donji upitnik da biste uklonili pravo pisanja
+sa određene IP adrese ili korisničkog imena.
+Ovo bi trebalo da bude urađeno samo da bi se sprečio vandalizam, i u skladu
+sa [[{{ns:project}}:Politika|politikom]].
+Unesite konkretan razlog ispod (na primer, navodeći koje
+stranice su vandalizovane).',
+'ipaddress' => 'IP adresa',
+'ipadressorusername' => 'IP adresa ili korisničko ime',
+'ipbexpiry' => 'Trajanje',
+'ipbreason' => 'Razlog',
+'ipbanononly' => 'Blokiraj samo anonimne korisnike',
+'ipbcreateaccount' => 'Spreči pravljenje naloga',
+'ipbenableautoblock' => 'Automatski blokiraj poslednju IP adresu ovog korisnika, i svaku sledeću adresu sa koje se pokuša uređivanje.',
+'ipbsubmit' => 'Blokiraj ovog korisnika',
+'ipbother' => 'Ostalo vreme',
+'ipboptions' => '2 sata:2 hours,1 dan:1 day,3 dana:3 days,1 nedelja:1 week,2 nedelje:2 weeks,1 mesec:1 month,3 meseca:3 months,6 meseci:6 months,1 godina:1 year,beskonačno:infinite',
+'ipbotheroption' => 'ostalo',
+'badipaddress' => 'Loša IP adresa',
+'blockipsuccesssub' => 'Blokiranje je uspelo',
+'blockipsuccesstext' => '[[{{ns:special}}:Contributions/$1|$1]] je blokiran.
+<br />Vidite [[{{ns:special}}:Ipblocklist|spisak blokiranja]] da biste pregledali blokiranja.',
+'unblockip' => 'Odblokiraj korisnika',
+'unblockiptext' => 'Upotrebite donji upitnik da biste vratili pravo pisanja
+ranije blokiranoj IP adresi ili korisničkom imenu.',
+'ipusubmit' => 'Odblokiraj ovu adresu',
+'unblocked' => '[[{{ns:user}}:$1|$1]] je odblokiran',
+'ipblocklist' => 'Spisak blokiranih IP adresa i korisnika',
+'blocklistline' => '$1, $2 blokirao korisnika [[{{ns:user}}:$3|$3]], (ističe $4)',
+'infiniteblock' => 'beskonačan',
+'expiringblock' => 'ističe $1',
+'anononlyblock' => 'samo anonimni',
+'noautoblockblock' => 'Autoblokiranje je onemogućeno',
+'createaccountblock' => 'blokirano pravljenje naloga',
+'ipblocklistempty' => 'Spisak blokiranja je prazan.',
+'blocklink' => 'blokiraj',
+'unblocklink' => 'odblokiraj',
+'contribslink' => 'prilozi',
+'autoblocker' => 'Automatski ste blokirani jer je vašu IP adresu skoro koristio "[[{{ns:user}}:$1|$1]]". Razlog za blokiranje korisnika $1 je: "\'\'\'$2\'\'\'".',
+'blocklogpage' => 'istorija blokiranja',
+'blocklogentry' => 'je blokirao "[[$1]]" sa vremenom isticanja blokade od $2',
+'blocklogtext' => 'Ovo je istorija blokiranja i odblokiranja korisnika. Automatski
+blokirane IP adrese nisu navedene. Pogledajte [[{{ns:special}}:Ipblocklist|spisak blokiranih IP adresa]] za spisak trenutnih zabrana i blokiranja.',
+'unblocklogentry' => 'odblokirao "$1"',
+'range_block_disabled' => 'Administratorska mogućnost da blokira blokove IP adresa je isključena.',
+'ipb_expiry_invalid' => 'Pogrešno vreme trajanja.',
+'ipb_already_blocked' => '"$1" je već blokiran',
+'ip_range_invalid' => 'Netačan blok IP adresa.',
+'proxyblocker' => 'Bloker proksija',
+'ipb_cant_unblock' => 'Greška: ID bloka $1 nije nađen. Moguće je da je već odblokiran.',
+'proxyblockreason' => 'Vaša IP adresa je blokirana jer je ona otvoreni proksi. Molimo kontaktirajte vašeg Internet servis provajdera ili tehničku podršku i obavestite ih o ovom ozbiljnom sigurnosnom problemu.',
+'proxyblocksuccess' => 'Urađeno.',
+'sorbs'         => 'SORBS DNSBL',
+'sorbsreason' => 'Vaša IP adresa je na spisku kao otvoren proksi na [http://www.sorbs.net SORBS] DNSBL.',
+'sorbs_create_account_reason' => 'Vaša IP adresa se nalazi na spisku kao otvoreni proksi na [http://www.sorbs.net SORBS] DNSBL. Ne možete da napravite nalog',
+
+# Developer tools
+#
+'lockdb' => 'Zaključaj bazu',
+'unlockdb' => 'Otključaj bazu',
+'lockdbtext' => 'Zaključavanje baze će svim korisnicima ukinuti mogućnost izmene stranica,
+promene korisničkih podešavanja, izmene spiska nadgledanja, i svega ostalog
+što zahteva promene u bazi.
+Molimo potvrdite da je ovo zaista ono što nameravate da uradite i da ćete
+otključati bazu kada završite posao oko njenog održavanja.',
+'unlockdbtext' => 'Otključavanje baze će svim korisnicima vratiti mogućnost izmene stranica,
+promene korisničkih podešavanja, izmene spiska nadgledanja, i svega ostalog
+što zahteva promene u bazi.
+Molimo potvrdite da je ovo zaista ono što nameravate da uradite.',
+'lockconfirm' => 'Da, zaista želim da zaključam bazu.',
+'unlockconfirm' => 'Da, zaista želim da otključam bazu.',
+'lockbtn' => 'Zaključaj bazu',
+'unlockbtn' => 'Otključaj bazu',
+'locknoconfirm' => 'Niste potvrdili svoju nameru.',
+'lockdbsuccesssub' => 'Baza je zaključana',
+'unlockdbsuccesssub' => 'Baza je otključana',
+'lockdbsuccesstext' => 'Baza podataka je zaključana.
+<br />Ne zaboravite da je [[{{ns:special}}:Unlockdb|otključate]] kada završite sa održavanjem.',
+'unlockdbsuccesstext' => 'Baza podataka je otključana.',
+'lockfilenotwritable' => 'Po fajlu za zaključavanje baze podataka ne može da se piše. Da biste zaključali ili otključali bazu, po ovom fajlu mora da bude omogućeno pisanje od strane veb servera.',
+'databasenotlocked' => 'Baza podataka nije zaključana.',
+
+# Make sysop
+'rightslog' => 'istorija korisničkih prava',
+'rightslogtext' => 'Ovo je istorija izmena korisničkih prava.',
+'rightslogentry' => 'je promenio prava za $1 sa $2 na $3',
+'rightsnone' => '(nema)',
+
+# Move page
+#
+'movepage' => 'Premeštanje stranice',
+'movepagetext' => 'Donji upitnik će preimenovati stranicu, premeštajući svu
+njenu istoriju na novo ime.
+Stari naslov će postati preusmerenje na novi naslov.
+Veze ka starom naslovu neće biti promenjene; obavezno
+potražite [[{{ns:special}}:DoubleRedirects|dvostruka]] ili [[{{ns:special}}:BrokenRedirects|pokvarena preusmerenja]].
+Na vama je odgovornost da veze i dalje idu tamo gde bi i trebalo da idu.
+
+Obratite pažnju da stranica \'\'\'neće\'\'\' biti pomerena ako već postoji
+stranica sa novim naslovom, osim ako je ona prazna ili preusmerenje i nema
+istoriju promena. Ovo znači da ne možete preimenovati stranicu na ono ime
+sa koga ste je preimenovali ako pogrešite, i ne možete prepisati
+postojeću stranicu.
+
+<b>PAŽNJA!</b>
+Ovo može biti drastična i neočekivana promena za popularnu stranicu;
+molimo da budete sigurni da razumete posledice ovoga pre nego što
+nastavite.',
+'movepagetalktext' => 'Odgovarajuća stranica za razgovor, ako postoji, biće automatski premeštena istovremeno \'\'\'osim ako:\'\'\'
+*Neprazna stranica za razgovor već postoji pod novim imenom, ili
+*Odbeležite donju kućicu.
+
+U tim slučajevima, moraćete ručno da premestite ili spojite stranicu ukoliko to želite.',
+'movearticle' => 'Premesti stranicu',
+'movenologin' => 'Niste prijavljeni',
+'movenologintext' => 'Morate biti registrovani korisnik i [[Special:Userlogin|prijavljeni]]
+da biste premestili stranicu.',
+'newtitle' => 'Novi naslov',
+'movepagebtn' => 'premesti stranicu',
+'pagemovedsub' => 'Premeštanje uspelo',
+'pagemovedtext' => 'Stranica "[[$1]]" premeštena je na "[[$2]]".',
+'articleexists' => 'Stranica pod tim imenom već postoji, ili je
+ime koje ste izabrali neispravno.
+Molimo izaberite drugo ime.',
+'talkexists' => '\'\'\'Sama stranica je uspešno premeštena, ali
+stranica za razgovor nije mogla biti premeštena jer takva već postoji na novom naslovu. Molimo vas da ih spojite ručno.\'\'\'',
+'movedto' => 'premeštena na',
+'movetalk' => 'Premesti "stranicu za razgovor" takođe, ako je moguće.',
+'talkpagemoved' => 'Odgovarajuća stranica za razgovor je takođe premeštena.',
+'talkpagenotmoved' => 'Odgovarajuća stranica za razgovor <strong>nije</strong> premeštena.',
+'1movedto2' => 'je promenio ime članku [[$1]] u [[$2]]',
+'1movedto2_redir' => 'je promenio ime članku [[$1]] u [[$2]] putem preusmerenja',
+'movelogpage' => 'istorija premeštanja',
+'movelogpagetext' => 'Ispod je spisak premeštanja članaka.',
+'movereason' => 'Razlog',
+'revertmove' => 'vrati',
+'delete_and_move' => 'Obriši i premesti',
+'delete_and_move_text' => '==Potrebno brisanje==
+
+Ciljani članak "[[$1]]" već postoji. Da li želite da ga obrišete da biste napravili mesto za premeštanje?',
+'delete_and_move_confirm' => 'Da, obriši stranicu',
+'delete_and_move_reason' => 'Obrisano kako bi se napravilo mesto za premeštanje',
+'selfmove' => 'Izvorni i ciljani naziv su isti; strana ne može da se premesti preko same sebe.',
+'immobile_namespace' => 'Ciljani naziv je posebnog tipa; ne mogu da premeste strane u taj imenski prostor.',
+
+# Export
+
+'export' => 'Izvezi stranice',
+'exporttext' => 'Možete izvoziti tekst i istoriju promena određene
+stranice ili grupe stranica u XML formatu. Ovo onda može biti uvezeno u drugi
+viki koji koristi MedijaViki softver preko {{ns:special}}:Import stranice.
+
+Da biste izvozili stranice, unesite nazive u tekstualnom polju ispod, sa jednim naslovom po redu, i odaberite da li želite trenutnu verziju sa svim starim verzijama ili samo trenutnu verziju sa informacijama o poslednjoj izmeni.
+
+U drugom slučaju, možete takođe koristiti vezu, npr. [[{{ns:special}}:Export/{{int:mainpage}}]] za stranicu {{int:mainpage}}.',
+'exportcuronly' => 'Uključi samo trenutnu reviziju, ne celu istoriju',
+'exportnohistory' => '----
+\'\'\'Napomena:\'\'\' izvoženje pune istorije strana preko ovog formulara je onemogućeno zbog serverskih razloga.',
+'export-submit' => 'Izvoz',
+
+# Namespace 8 related
+
+'allmessages' => 'Sistemske poruke',
+'allmessagesname' => 'Ime',
+'allmessagesdefault' => 'Standardni tekst',
+'allmessagescurrent' => 'Trenutni tekst',
+'allmessagestext' => 'Ovo je spisak svih poruka koje su u {{ns:MediaWiki}} imenskom prostoru',
+'allmessagesnotsupportedUI' => 'Stranica {{ns:special}}:Allmessages ne podržava vVaš trenutni jezik interfejsa <b>$1</b> na ovoj viki.',
+'allmessagesnotsupportedDB' => 'Stranica {{ns:special}}:Allmessages ne može da se koristi zato što je \'\'\'$wgUseDatabaseMessages\'\'\' isključen.',
+'allmessagesfilter' => 'Filter za imena poruka:',
+'allmessagesmodified' => 'Prikaži samo izmenjene',
+
+# Thumbnails
+'thumbnail-more' => 'uvećaj',
+'missingimage' => '<b>Ovde nedostaje slika</b><br /><i>$1</i>',
+'filemissing' => 'Nedostaje fajl',
+'thumbnail_error' => 'Greška pri pravljenju umanjene slike: $1',
+
+# Special:Import
+'import' => 'Uvoz stranica',
+'importinterwiki' => 'Transviki uvoženje',
+'import-interwiki-text' => 'Odaberite viki i naziv strane za uvoz.
+Datumi revizije i imena urednika će biti sačuvani.
+Svi transviki uvozi su zabeleženi u [[Posebno:Log/import|istoriji uvoza]].',
+'import-interwiki-history' => 'Kopiraj sve revizije ove strane',
+'import-interwiki-submit' => 'Uvezi',
+'import-interwiki-namespace' => 'Prebaci stranice u imenski prostor:',
+'importtext' => 'Molimo izvezite fajl iz izvornog vikija koristeći {{ns:special}}:Export, sačuvajte ga kod sebe i pošaljite ovde.',
+'importstart' => 'Uvoženje strana u toku...',
+'import-revision-count' => '$1 {{plural:$1|revizija|revizije|revizija}}',
+'importnopages' => 'Nema strana za uvoz.',
+'importfailed' => 'Uvoz nije uspeo: $1',
+'importunknownsource' => 'Nepoznati tip izvora unosa',
+'importcantopen' => 'Neuspešno otvaranje fajla za uvoz',
+'importbadinterwiki' => 'Loša interviki veza',
+'importnotext' => 'Stranica je prazna ili bez teksta.',
+'importsuccess' => 'Uspešan uvoz!',
+'importhistoryconflict' => 'Postoji konfliktna istorija revizija (možda je ova stranica već uvezena ranije)',
+'importnosources' => 'Nije definisan nijedan izvor transviki uvoženja i direktna slanja istorija su onemogućena.',
+'importnofile' => 'Nije poslat nijedan uvozni fajl.',
+'importuploaderror' => 'Slanje uvoznog fajla nije bilo uspešno; moguće je da je fajl veći od dozvoljene veličine za slanje.',
+
+# import log
+'importlogpage' => 'istorija uvoza',
+'importlogpagetext' => 'Administrativni uvozi stranica sa istorijama izmena sa drugih vikija.',
+'import-logentry-upload' => 'uvezao [[$1]] putem slanja fajla',
+'import-logentry-upload-detail' => '$1 revizija/e',
+'import-logentry-interwiki' => 'premestio sa drugog vikija: $1',
+'import-logentry-interwiki-detail' => '$1 revizija/e od $2',
+
+# Keyboard access keys for power users
+'accesskey-search' => 'f',
+'accesskey-minoredit' => 'i',
+'accesskey-save' => 's',
+'accesskey-preview' => 'p',
+'accesskey-diff' => 'v',
+'accesskey-compareselectedversions' => 'v',
+'accesskey-watch' => 'w',
+
+# tooltip help for some actions, most are in Monobook.js
+'tooltip-search' => 'Pretražite viki',
+'tooltip-minoredit' => 'Naznačite da se radi o maloj izmeni',
+'tooltip-save' => 'Snimite Vaše izmene',
+'tooltip-preview' => 'Pretpregled Vaših izmena, molimo koristite ovo pre snimanja!',
+'tooltip-diff' => 'Prikaži koje promene ste napravili na tekstu.',
+'tooltip-compareselectedversions' => 'Pogledaj razlike između dve odabrane verzije ove stranice.',
+'tooltip-watch' => 'Dodajte ovu stranicu na Vaš spisak nadgledanja',
+
+# stylesheets
+'common.css' => '/** CSS stavljen ovde će se odnositi na sve kože */',
+'monobook.css' => '/* CSS stavljen ovde će se odnositi na korisnike Monobuk kože */',
+
+# Metadata
+'nodublincore' => 'Dublin Core RDF metapodaci onemogućeni za ovaj server.',
+'nocreativecommons' => 'Creative Commons RDF metapodaci onemogućeni za ovaj server.',
+'notacceptable' => 'Viki server ne može da pruži podatke u onom formatu koji vaš klijent može da pročita.',
+
+# Attribution
+
+'anonymous' => 'Anonimni korisnik sajta {{SITENAME}}',
+'siteuser' => '{{SITENAME}} korisnik $1',
+'lastmodifiedatby' => 'Ovu stranicu je poslednji put promenio $3 u $2, $1.',
+'and' => 'i',
+'othercontribs' => 'Bazirano na radu korisnika $1.',
+'others' => 'ostali',
+'siteusers' => '{{SITENAME}} korisnik (korisnici) $1',
+'creditspage' => 'Zasluge za stranicu',
+'nocredits' => 'Nisu dostupne informacije o zaslugama za ovu stranicu.',
+
+# Spam protection
+'spamprotectiontitle' => 'Filter za zaštitu od neželjenih poruka',
+'spamprotectiontext' => 'Strana koju želite da sačuvate je blokirana od strane filtera za neželjene poruke. Ovo je verovatno izazvano vezom ka spoljašnjem sajtu.',
+'spamprotectionmatch' => 'Sledeći tekst je izazvao naš filter za neželjene poruke: $1',
+'subcategorycount' => 'U ovoj kategoriji se nalazi {{plural:$1|jedna potkategorija|$1 potkategorije|$1 potkategorija}}.',
+'categoryarticlecount' => 'U ovoj kategoriji se nalazi {{plural:$1|Jedan članak|$1 članka|$1 članaka}}.',
+'listingcontinuesabbrev' => ' nast.',
+'spambot_username' => 'Čišćenje neželjenih poruka u MedijaVikiju',
+'spam_reverting' => 'Vraćanje na staru reviziju koja ne sadrži veze ka $1',
+'spam_blanking' => 'Sve revizije su sadržale veze ka $1, pražnjenje',
+
+# Info page
+'infosubtitle' => 'Informacije za stranicu',
+'numedits' => 'Broj promena (članak): $1',
+'numtalkedits' => 'Broj promena (stranica za razgovor): $1',
+'numwatchers' => 'Broj korisnika koji nadgledaju: $1',
+'numauthors' => 'Broj različitih autora (članak): $1',
+'numtalkauthors' => 'Broj različitih autora (stranica za razgovor): $1',
+
+# Math options
+'mw_math_png' => 'Uvek prikaži PNG',
+'mw_math_simple' => 'HTML ako je vrlo jednostavno, inače PNG',
+'mw_math_html' => 'HTML ako je moguće, inače PNG',
+'mw_math_source' => 'Ostavi kao TeH (za tekstualne brauzere)',
+'mw_math_modern' => 'Preporučeno za savremene brauzere',
+'mw_math_mathml' => 'MathML ako je moguće (eksperimentalno)',
+
+# Patrolling
+'markaspatrolleddiff' => 'Označi kao patroliran',
+'markaspatrolledtext' => 'Označi ovaj članak kao patroliran',
+'markedaspatrolled' => 'Označen kao patroliran',
+'markedaspatrolledtext' => 'Izabrana revizija je označena kao patrolirana.',
+'rcpatroldisabled' => 'Patrola skorašnjih izmena onemogućena',
+'rcpatroldisabledtext' => 'Patrola skorašnjih izmena je trenutno onemogućena.',
+'markedaspatrollederror' => 'Nemoguće označiti kao patrolirano',
+'markedaspatrollederrortext' => 'Morate izabrati reviziju da biste označili kao patrolirano.',
+
+# Monobook.js: tooltips and access keys for monobook
+'monobook.js' => '/* Deprecated; use [[MediaWiki:common.js]] */',
+
+'accesskey-pt-userpage' => '.',
+'tooltip-pt-userpage' => 'Moja korisnička stranica',
+'accesskey-pt-anonuserpage' => '.',
+'tooltip-pt-anonuserpage' => 'Korisnička stranica IP adrese sa koje uređujete',
+'accesskey-pt-mytalk' => 'n',
+'tooltip-pt-mytalk' => 'Moja stranica za razgovor',
+'accesskey-pt-anontalk' => 'n',
+'tooltip-pt-anontalk' => 'Razgovor o prilozima sa ove IP adrese',
+'accesskey-pt-preferences' => '',
+'tooltip-pt-preferences' => 'Moja korisnička podešavanja',
+'accesskey-pt-watchlist' => 'l',
+'tooltip-pt-watchlist' => 'Spisak članaka koje nadgledate',
+'accesskey-pt-mycontris' => 'y',
+'tooltip-pt-mycontris' => 'Spisak mojih priloga',
+'accesskey-pt-login' => 'o',
+'tooltip-pt-login' => 'Preporučuje se da se prijavite, ali nije obavezno',
+'accesskey-pt-anonlogin' => 'o',
+'tooltip-pt-anonlogin' => 'Preporučuje se da se prijavite, ali nije obavezno',
+'accesskey-pt-logout' => '',
+'tooltip-pt-logout' => 'Odjavi se',
+'accesskey-ca-talk' => 't',
+'tooltip-ca-talk' => 'Razgovor o članku',
+'accesskey-ca-edit' => 'e',
+'tooltip-ca-edit' => 'Možete urediti ovu stranicu. Molimo koristite pretpregled pre sačuvavanja.',
+'accesskey-ca-addsection' => '+',
+'tooltip-ca-addsection' => 'Dodajte komentar na ovu diskusiju',
+'accesskey-ca-viewsource' => 'e',
+'tooltip-ca-viewsource' => 'Ova stranica je zaključana. Možete videti njen izvor',
+'accesskey-ca-history' => 'h',
+'tooltip-ca-history' => 'Prethodne verzije ove stranice',
+'accesskey-ca-protect' => '=',
+'tooltip-ca-protect' => 'Zaštiti ovu stranicu',
+'accesskey-ca-delete' => 'd',
+'tooltip-ca-delete' => 'Obriši ovu stranicu',
+'accesskey-ca-undelete' => 'd',
+'tooltip-ca-undelete' => 'Vraćati izmene koje su načinjene pre brisanja stranice',
+'accesskey-ca-move' => 'm',
+'tooltip-ca-move' => 'Premesti ovu stranicu',
+'accesskey-ca-watch' => 'w',
+'tooltip-ca-watch' => 'Dodajte ovu stranicu na Vaš spisak nadgledanja',
+'accesskey-ca-unwatch' => 'w',
+'tooltip-ca-unwatch' => 'Uklonite ovu stranicu sa Vašeg spiska nadgledanja',
+'accesskey-search' => 'f',
+'tooltip-search' => 'Pretražite ovaj viki',
+'accesskey-p-logo' => '',
+'tooltip-p-logo' => 'Glavna strana',
+'accesskey-n-mainpage' => 'z',
+'tooltip-n-mainpage' => 'Posetite glavnu stranu',
+'accesskey-n-portal' => '',
+'tooltip-n-portal' => 'O projektu, šta možete da radite i gde da pronađete stvari',
+'accesskey-n-currentevents' => '',
+'tooltip-n-currentevents' => 'Saznajte više o aktuelnostima',
+'accesskey-n-recentchanges' => 'r',
+'tooltip-n-recentchanges' => 'Spisak skorašnjih izmena na vikiju',
+'accesskey-n-randompage' => 'x',
+'tooltip-n-randompage' => 'Učitavaj slučajnu stranicu',
+'accesskey-n-help' => '',
+'tooltip-n-help' => 'Mesto gde možete da naučite nešto',
+'accesskey-n-sitesupport' => '',
+'tooltip-n-sitesupport' => 'Podržite nas',
+'accesskey-t-whatlinkshere' => 'j',
+'tooltip-t-whatlinkshere' => 'Spisak svih stranica koje vezuju na ovu',
+'accesskey-t-recentchangeslinked' => 'k',
+'tooltip-t-recentchangeslinked' => 'Skorašnje izmene na člancima povezanim sa ove stranice',
+'accesskey-feed-rss' => '',
+'tooltip-feed-rss' => 'RSS fid za ovu stranicu',
+'accesskey-feed-atom' => '',
+'tooltip-feed-atom' => 'Atom fid za ovu stranicu',
+'accesskey-t-contributions' => '',
+'tooltip-t-contributions' => 'Pogledaj spisak priloga ovog korisnika',
+'accesskey-t-emailuser' => '',
+'tooltip-t-emailuser' => 'Pošalji elektronsku poštu ovom korisniku',
+'accesskey-t-upload' => 'u',
+'tooltip-t-upload' => 'Pošalji slike i medija fajlove',
+'accesskey-t-specialpages' => 'q',
+'tooltip-t-specialpages' => 'Spisak svih posebnih stranica',
+'accesskey-ca-nstab-main' => 'c',
+'tooltip-ca-nstab-main' => 'Pogledajte članak',
+'accesskey-ca-nstab-user' => 'c',
+'tooltip-ca-nstab-user' => 'Pogledajte korisničku stranicu',
+'accesskey-ca-nstab-media' => 'c',
+'tooltip-ca-nstab-media' => 'Pogledajte medija stranicu',
+'accesskey-ca-nstab-special' => '',
+'tooltip-ca-nstab-special' => 'Ovo je posebna stranica, ne možete je menjati',
+'accesskey-ca-nstab-wp' => 'c',
+'tooltip-ca-nstab-wp' => 'Pogledajte stranicu o projektu',
+'accesskey-ca-nstab-image' => 'c',
+'tooltip-ca-nstab-image' => 'Pogledajte stranicu slike',
+'accesskey-ca-nstab-mediawiki' => 'c',
+'tooltip-ca-nstab-mediawiki' => 'Pogledajte sistemsku poruku',
+'accesskey-ca-nstab-template' => 'c',
+'tooltip-ca-nstab-template' => 'Pogledajte šablon',
+'accesskey-ca-nstab-help' => 'c',
+'tooltip-ca-nstab-help' => 'Pogledajte stranicu za pomoć',
+'accesskey-ca-nstab-category' => 'c',
+'tooltip-ca-nstab-category' => 'Pogledajte stranicu kategorije',
+
+# image deletion
+'deletedrevision' => 'Obrisana stara revizija $1.',
+
+# browsing diffs
+'previousdiff' => '← Prethodna izmena',
+'nextdiff' => 'Sledeća izmena →',
+
+'imagemaxsize' => 'Ograniči slike na stranama za razgovor o slikama na:',
+'thumbsize' => 'Veličina umanjenog prikaza :',
+'showbigimage' => 'Prikaži sliku veće rezolucije ($1x$2, $3 Kb)',
+
+'newimages' => 'Galerija novih slika',
+'showhidebots' => '($1 botove)',
+'noimages' => 'Nema ništa da se vidi',
+
+# short names for language variants used for language conversion links.
+# to disable showing a particular link, set it to 'disable', e.g.
+# 'variantname-zh-sg' => 'disable',
+'variantname-zh-cn' => 'cn',
+'variantname-zh-tw' => 'tw',
+'variantname-zh-hk' => 'hk',
+'variantname-zh-sg' => 'sg',
+'variantname-zh' => 'zh',
+# variants for Serbian language
+'variantname-sr-ec' => 'ћирилица',
+'variantname-sr-el' => 'latinica',
+'variantname-sr-jc' => 'jekav',
+'variantname-sr-jl' => 'jekav',
+'variantname-sr' => 'disable',
+
+# labels for User: and Title: on Special:Log pages
+'specialloguserlabel' => 'Korisnik:',
+'speciallogtitlelabel' => 'Naslov:',
+
+'passwordtooshort' => 'Vaša šifra je previše kratka. Mora da ima bar $1 karaktera.',
+
+# Media Warning
+'mediawarning' => '\'\'\'Upozorenje\'\'\': Ovaj fajl sadrži loš kod, njegovim izvršavanjem možete da ugrozite vaš sistem.<hr />',
+
+'fileinfo' => '$1KB, MIME tip: <code>$2</code>',
+
+# Metadata
+'metadata' => 'Metapodaci',
+'metadata-help' => 'Ovaj fajl sadrži dodatne informacije, koje su verovatno dodali digitalni fotoaparat ili skener koji su korišćeni da bi se napravila ili digitalizovala slika. Ako je prvobitno stanje fajla promenjeno, moguće je da neki detalji ne opisuju u potpunosti izmenjenu sliku.',
+'metadata-expand' => 'Pokaži detalje',
+'metadata-collapse' => 'Sakrij detalje',
+'metadata-fields' => 'Polja EXIF metapodataka navedena u ovoj poruci će biti ubačena na stranu o slici kada se raširi tabela za metapodatke. Ostala će biti sakrivena po podrazumevanom.
+* make
+* model
+* datetimeoriginal
+* exposuretime
+* fnumber
+* focallength',
+
+# Exif tags
+'exif-imagewidth' => 'Širina',
+'exif-imagelength' => 'Visina',
+'exif-bitspersample' => 'Bitova po komponenti',
+'exif-compression' => 'Šema kompresije',
+'exif-photometricinterpretation' => 'Kompozicija piksela',
+'exif-orientation' => 'Orijentacija',
+'exif-samplesperpixel' => 'Broj komponenti',
+'exif-planarconfiguration' => 'Princip rasporeda podataka',
+'exif-ycbcrsubsampling' => 'Odnos komponente Y prema C',
+'exif-ycbcrpositioning' => 'Razmeštaj komponenata Y i C',
+'exif-xresolution' => 'Horizonatalna rezolucija',
+'exif-yresolution' => 'Vertikalna rezolucija',
+'exif-resolutionunit' => 'Jedinica rezolucije',
+'exif-stripoffsets' => 'Položaj bloka podataka',
+'exif-rowsperstrip' => 'Broj redova u bloku',
+'exif-stripbytecounts' => 'Veličina kompresovanog bloka',
+'exif-jpeginterchangeformat' => 'Udaljenost JPEG pregleda od početka fajla',
+'exif-jpeginterchangeformatlength' => 'Količina bajtova JPEG pregleda',
+'exif-transferfunction' => 'Funkcija preoblikovanja kolor prostora',
+'exif-whitepoint' => 'Hromacitet bele tačke',
+'exif-primarychromaticities' => 'Hromacitet primarnih boja',
+'exif-ycbcrcoefficients' => 'Matrični koeficijenti transformacije kolor prostora',
+'exif-referenceblackwhite' => 'Mesto bele i crne tačke',
+'exif-datetime' => 'Datum poslednje promene fajla',
+'exif-imagedescription' => 'Ime slike',
+'exif-make' => 'Proizvođač kamere',
+'exif-model' => 'Model kamere',
+'exif-software' => 'Korišćen softver',
+'exif-artist' => 'Autor',
+'exif-copyright' => 'Nosilac prava',
+'exif-exifversion' => 'Exif verzija',
+'exif-flashpixversion' => 'Podržana verzija Flešpiksa',
+'exif-colorspace' => 'Prostor boje',
+'exif-componentsconfiguration' => 'Značenje svake od komponenti',
+'exif-compressedbitsperpixel' => 'Mod kompresije slike',
+'exif-pixelydimension' => 'Puna visina slike',
+'exif-pixelxdimension' => 'Puna širina slike',
+'exif-makernote' => 'Napomene proizvođača',
+'exif-usercomment' => 'Korisnički komentar',
+'exif-relatedsoundfile' => 'Povezani zvučni zapis',
+'exif-datetimeoriginal' => 'Datum i vreme slikanja',
+'exif-datetimedigitized' => 'Datum i vreme digitalizacije',
+'exif-subsectime' => 'Deo sekunde u kojem je slikano',
+'exif-subsectimeoriginal' => 'Deo sekunde u kojem je fotografisano',
+'exif-subsectimedigitized' => 'Deo sekunde u kojem je digitalizovano',
+'exif-exposuretime' => 'Ekspozicija',
+'exif-exposuretime-format' => '$1 sek ($2)',
+'exif-fnumber' => 'F broj otvora blende',
+'exif-fnumber-format' =>'f/$1',
+'exif-exposureprogram' => 'Program ekspozicije',
+'exif-spectralsensitivity' => 'Spektralna osetljivost',
+'exif-isospeedratings' => 'ISO vrednost',
+'exif-oecf' => 'Optoelektronski faktor konverzije',
+'exif-shutterspeedvalue' => 'Brzina zatvarača',
+'exif-aperturevalue' => 'Otvor blende',
+'exif-brightnessvalue' => 'Svetlost',
+'exif-exposurebiasvalue' => 'Kompenzacija ekspozicije',
+'exif-maxaperturevalue' => 'Minimalni broj otvora blende',
+'exif-subjectdistance' => 'Udaljenost do objekta',
+'exif-meteringmode' => 'Režim merača vremena',
+'exif-lightsource' => 'Izvor svetlosti',
+'exif-flash' => 'Blic',
+'exif-focallength' => 'Fokusna daljina sočiva',
+'exif-focallength-format' =>'$1 mm',
+'exif-subjectarea' => 'Položaj i površina objekta snimka',
+'exif-flashenergy' => 'Energija blica',
+'exif-spatialfrequencyresponse' => 'Prostorna frekvencijska karakteristika',
+'exif-focalplanexresolution' => 'Vodoravna rezolucija fokusne ravni',
+'exif-focalplaneyresolution' => 'Horizonatlna rezolucija fokusne ravni',
+'exif-focalplaneresolutionunit' => 'Jedinica rezolucije fokusne ravni',
+'exif-subjectlocation' => 'Položaj subjekta',
+'exif-exposureindex' => 'Indeks ekspozicije',
+'exif-sensingmethod' => 'Tip senzora',
+'exif-filesource' => 'Izvorni fajl',
+'exif-scenetype' => 'Tip scene',
+'exif-cfapattern' => 'CFA šablon',
+'exif-customrendered' => 'Dodatna obrada slike',
+'exif-exposuremode' => 'Režim izbora ekspozicije',
+'exif-whitebalance' => 'Balans bele boje',
+'exif-digitalzoomratio' => 'Odnos digitalnog zuma',
+'exif-focallengthin35mmfilm' => 'Ekvivalent fokusne daljine za 35 mm film',
+'exif-scenecapturetype' => 'Tip scene na snimku',
+'exif-gaincontrol' => 'Kontrola osvetljenosti',
+'exif-contrast' => 'Kontrast',
+'exif-saturation' => 'Saturacija',
+'exif-sharpness' => 'Oštrina',
+'exif-devicesettingdescription' => 'Opis podešavanja uređaja',
+'exif-subjectdistancerange' => 'Raspon udaljenosti subjekata',
+'exif-imageuniqueid' => 'Jedinstveni identifikator slike',
+'exif-gpsversionid' => 'Verzija bloka GPS-informacije',
+'exif-gpslatituderef' => 'Severna ili južna širina',
+'exif-gpslatitude' => 'Širina',
+'exif-gpslongituderef' => 'Istočna ili zapadna dužina',
+'exif-gpslongitude' => 'Dužina',
+'exif-gpsaltituderef' => 'Visina ispod ili iznad mora',
+'exif-gpsaltitude' => 'Visina',
+'exif-gpstimestamp' => 'Vreme po GPS-u (atomski sat)',
+'exif-gpssatellites' => 'Upotrebljeni sateliti',
+'exif-gpsstatus' => 'Status prijemnika',
+'exif-gpsmeasuremode' => 'Režim merenja',
+'exif-gpsdop' => 'Preciznost merenja',
+'exif-gpsspeedref' => 'Jedinica brzine',
+'exif-gpsspeed' => 'Brzina GPS prijemnika',
+'exif-gpstrackref' => 'Tip azimuta prijemnika (pravi ili magnetni)',
+'exif-gpstrack' => 'Azimut prijemnika',
+'exif-gpsimgdirectionref' => 'Tip azimuta slike (pravi ili magnetni)',
+'exif-gpsimgdirection' => 'Azimut slike',
+'exif-gpsmapdatum' => 'Korišćeni geodetski koordinatni sistem',
+'exif-gpsdestlatituderef' => 'Indeks geografske širine objekta',
+'exif-gpsdestlatitude' => 'Geografska širina objekta',
+'exif-gpsdestlongituderef' => 'Indeks geografske dužine objekta',
+'exif-gpsdestlongitude' => 'Geografska dužina objekta',
+'exif-gpsdestbearingref' => 'Indeks azimuta objekta',
+'exif-gpsdestbearing' => 'Azimut objekta',
+'exif-gpsdestdistanceref' => 'Merne jedinice udaljenosti objekta',
+'exif-gpsdestdistance' => 'Udaljenost objekta',
+'exif-gpsprocessingmethod' => 'Ime metode obrade GPS podataka',
+'exif-gpsareainformation' => 'Ime GPS područja',
+'exif-gpsdatestamp' => 'GPS datum',
+'exif-gpsdifferential' => 'GPS diferencijalna korekcija',
+
+# Exif attributes
+
+'exif-compression-1' => 'Nekompresovan',
+'exif-compression-6' => 'JPEG',
+
+'exif-photometricinterpretation-2' => 'RGB',
+'exif-photometricinterpretation-6' => 'YCbCr',
+
+'exif-orientation-1' => 'Normalno',
+'exif-orientation-2' => 'Obrnuto po horizontali',
+'exif-orientation-3' => 'Zaokrenuto 180°',
+'exif-orientation-4' => 'Obrnuto po vertikali',
+'exif-orientation-5' => 'Zaokrenuto 90° suprotno od smera kazaljke na satu i obrnuto po vertikali',
+'exif-orientation-6' => 'Zaokrenuto 90° u smeru kazaljke na satu',
+'exif-orientation-7' => 'Zaokrenuto 90° u smeru kazaljke na satu i obrnuto po vertikali',
+'exif-orientation-8' => 'Zaokrenuto 90° suprotno od smera kazaljke na satu',
+
+'exif-planarconfiguration-1' => 'delimični format',
+'exif-planarconfiguration-2' => 'planarni format',
+
+'exif-xyresolution-i' => '$1 dpi',
+'exif-xyresolution-c' => '$1 dpc',
+
+'exif-colorspace-1' => 'sRGB',
+'exif-colorspace-ffff.h' => 'FFFF.H',
+
+'exif-componentsconfiguration-0' => 'ne postoji',
+'exif-componentsconfiguration-1' => 'Y',
+'exif-componentsconfiguration-2' => 'Cb',
+'exif-componentsconfiguration-3' => 'Cr',
+'exif-componentsconfiguration-4' => 'R',
+'exif-componentsconfiguration-5' => 'G',
+'exif-componentsconfiguration-6' => 'B',
+
+'exif-exposureprogram-0' => 'Nepoznato',
+'exif-exposureprogram-1' => 'Ručno',
+'exif-exposureprogram-2' => 'Normalni program',
+'exif-exposureprogram-3' => 'Prioritet otvora blende',
+'exif-exposureprogram-4' => 'Prioritet zatvarača',
+'exif-exposureprogram-5' => 'Umetnički program (na bazi nužne dubine polja)',
+'exif-exposureprogram-6' => 'Sportski program (na bazi što bržeg zatvarača)',
+'exif-exposureprogram-7' => 'Portretni režim (za krupne kadrove sa neoštrom pozadinom)',
+'exif-exposureprogram-8' => 'Režim pejzaža (za slike pejzaža sa oštrom pozadinom)',
+
+'exif-subjectdistance-value' => '$1 metara',
+
+'exif-meteringmode-0' => 'Nepoznato',
+'exif-meteringmode-1' => 'Prosek',
+'exif-meteringmode-2' => 'Prosek sa težištem na sredini',
+'exif-meteringmode-3' => 'Tačka',
+'exif-meteringmode-4' => 'Više tačaka',
+'exif-meteringmode-5' => 'Matrični',
+'exif-meteringmode-6' => 'Delimični',
+'exif-meteringmode-255' => 'Drugo',
+
+'exif-lightsource-0' => 'Nepoznato',
+'exif-lightsource-1' => 'Dnevna svetlost',
+'exif-lightsource-2' => 'Fluorescentno',
+'exif-lightsource-3' => 'Volfram (svetlo)',
+'exif-lightsource-4' => 'Blic',
+'exif-lightsource-9' => 'Lepo vreme',
+'exif-lightsource-10' => 'Oblačno vreme',
+'exif-lightsource-11' => 'Senka',
+'exif-lightsource-12' => 'Fluorescentna svetlost (D 5700 – 7100K)',
+'exif-lightsource-13' => 'Fluorescentna svetlost (N 4600 – 5400K)',
+'exif-lightsource-14' => 'Fluorescentna svetlost (W 3900 – 4500K)',
+'exif-lightsource-15' => 'Bela fluorescencija (WW 3200 – 3700K)',
+'exif-lightsource-17' => 'Standardno svetlo A',
+'exif-lightsource-18' => 'Standardno svetlo B',
+'exif-lightsource-19' => 'Standardno svetlo C',
+'exif-lightsource-20' => 'D55',
+'exif-lightsource-21' => 'D65',
+'exif-lightsource-22' => 'D75',
+'exif-lightsource-23' => 'D50',
+'exif-lightsource-24' => 'ISO studijski volfram',
+'exif-lightsource-255' => 'Drugi izvor svetla',
+
+'exif-focalplaneresolutionunit-2' => 'inči',
+
+'exif-sensingmethod-1' => 'Nedefinisano',
+'exif-sensingmethod-2' => 'Jednokristalni matrični senzor',
+'exif-sensingmethod-3' => 'Dvokristalni matrični senzor',
+'exif-sensingmethod-4' => 'Trokristalni matrični senzor',
+'exif-sensingmethod-5' => 'Sekvencijalni matrični senzor',
+'exif-sensingmethod-7' => 'Trobojni linearni senzor',
+'exif-sensingmethod-8' => 'Sekvencijalni linearni senzor',
+
+'exif-filesource-3' => 'Digitalni fotoaparat',
+
+'exif-scenetype-1' => 'Direktno fotografisana slika',
+
+'exif-customrendered-0' => 'Normalni proces',
+'exif-customrendered-1' => 'Nestadardni proces',
+
+'exif-exposuremode-0' => 'Automatski',
+'exif-exposuremode-1' => 'Ručno',
+'exif-exposuremode-2' => 'Automatski sa zadatim rasponom',
+
+'exif-whitebalance-0' => 'Automatski',
+'exif-whitebalance-1' => 'Ručno',
+
+'exif-scenecapturetype-0' => 'Standardno',
+'exif-scenecapturetype-1' => 'Pejzaž',
+'exif-scenecapturetype-2' => 'Portret',
+'exif-scenecapturetype-3' => 'Noćno',
+
+'exif-gaincontrol-0' => 'Nema',
+'exif-gaincontrol-1' => 'Malo povećanje',
+'exif-gaincontrol-2' => 'Veliko povećanje',
+'exif-gaincontrol-3' => 'Malo smanjenje',
+'exif-gaincontrol-4' => 'Veliko smanjenje',
+
+'exif-contrast-0' => 'Normalno',
+'exif-contrast-1' => 'Meko',
+'exif-contrast-2' => 'Tvrdo',
+
+'exif-saturation-0' => 'Normalno',
+'exif-saturation-1' => 'Niska saturacija',
+'exif-saturation-2' => 'Visoka saturacija',
+
+'exif-sharpness-0' => 'Normalno',
+'exif-sharpness-1' => 'Meko',
+'exif-sharpness-2' => 'Tvrdo',
+
+'exif-subjectdistancerange-0' => 'Nepoznato',
+'exif-subjectdistancerange-1' => 'Krupni kadar',
+'exif-subjectdistancerange-2' => 'Bliski kadar',
+'exif-subjectdistancerange-3' => 'Daleki kadar',
+
+// Pseudotags used for GPSLatitudeRef and GPSDestLatitudeRef
+'exif-gpslatitude-n' => 'Sever',
+'exif-gpslatitude-s' => 'Jug',
+
+// Pseudotags used for GPSLongitudeRef and GPSDestLongitudeRef
+'exif-gpslongitude-e' => 'Istok',
+'exif-gpslongitude-w' => 'Zapad',
+
+'exif-gpsstatus-a' => 'Merenje u toku',
+'exif-gpsstatus-v' => 'Spreman za prenos',
+
+'exif-gpsmeasuremode-2' => 'Dvodimenzionalno merenje',
+'exif-gpsmeasuremode-3' => 'Trodimenzionalno merenje',
+
+// Pseudotags used for GPSSpeedRef and GPSDestDistanceRef
+'exif-gpsspeed-k' => 'Kilometri na čas',
+'exif-gpsspeed-m' => 'Milje na čas',
+'exif-gpsspeed-n' => 'Čvorovi',
+
+// Pseudotags used for GPSTrackRef, GPSImgDirectionRef and GPSDestBearingRef
+'exif-gpsdirection-t' => 'Pravi pravac',
+'exif-gpsdirection-m' => 'Magnetni pravac',
+
+# external editor support
+'edit-externally' => 'Izmenite ovaj fajl koristeći spoljašnju aplikaciju',
+'edit-externally-help' => 'Pogledajte [http://meta.wikimedia.org/wiki/Help:External_editors uputstvo za podešavanje] za više informacija.',
+
+# 'all' in various places, this might be different for inflected languages
+'recentchangesall' => 'sve',
+'imagelistall' => 'sve',
+'watchlistall1' => 'sve',
+'watchlistall2' => 'sve',
+'namespacesall' => 'svi',
+
+# E-mail address confirmation
+'confirmemail' => 'Potvrdite adresu e-pošte',
+'confirmemail_noemail' => 'Nemate potvrđenu adresu vaše e-pošte u vašim [[Special:Preferences|korisničkim podešavanjima interfejsa]].',
+'confirmemail_text' => 'Ova viki zahteva da potvrdite adresu vaše e-pošte pre nego što koristite mogućnosti e-pošte. Aktivirajte dugme ispod kako biste poslali poštu za potvrdu na vašu adresu. Pošta uključuje vezu koja sadrži kod; učitajte tu vezu u vaš brauzer da biste potvrdili da je adresa vaše e-pošte validna.',
+'confirmemail_send' => 'Pošalji kod za potvrdu',
+'confirmemail_sent' => 'E-pošta za potvrđivanje poslata.',
+'confirmemail_sendfailed' => 'Pošta za potvrđivanje nije poslata. Proverita adresu zbog nepravilnih karaktera.',
+'confirmemail_invalid' => 'Netačan kod za potvrdu. Moguće je da je kod istekao.',
+'confirmemail_needlogin' => 'Morate da se $1 da biste potvrdili adresu vaše e-pošte.',
+'confirmemail_success' => 'Adresa vaše e-pošte je potvrđena. Možete sada da se prijavite i uživate u vikiju.',
+'confirmemail_loggedin' => 'Adresa vaše e-pošte je sada potvrđena.',
+'confirmemail_error' => 'Nešto je pošlo po zlu prilikom snimanja vaše potvrde.',
+
+'confirmemail_subject' => '{{SITENAME}} adresa e-pošte za potvrđivanje',
+'confirmemail_body' => 'Neko, verovatno vi, je sa IP adrese $1 registrovao nalog "$2" sa ovom adresom e-pošte na sajtu {{SITENAME}}.
+
+Da potvrdite da ovaj nalog stvarno pripada vama i da aktivirate mogućnost e-pošte na sajtu {{SITENAME}}, otvorite ovu vezu u vašem brauzeru:
+
+$3
+
+Ako ovo *niste* vi, ne pratite vezu. Ovaj kod za potvrdu će isteći u $4.',
+
+# Inputbox extension, may be useful in other contexts as well
+'tryexact' => 'Pokušaj tačno',
+'searchfulltext' => 'Pretraži ceo tekst',
+'createarticle' => 'Napravi članak',
+
+# Scary transclusion
+'scarytranscludedisabled' => '[Interviki uključivanje je onemogućeno]',
+'scarytranscludefailed' => '[Donošenje šablona neuspešno; žao nam je]',
+'scarytranscludetoolong' => '[URL je predugačak; žao nam je]',
+
+# Trackbacks
+'trackbackbox' => '<div id="mw_trackbacks">
+Vraćanja za ovaj članak:<br />
+$1
+</div>',
+'trackbackremove' => '([$1 Brisanje])',
+'trackbacklink' => 'Vraćanje',
+'trackbackdeleteok' => 'Vraćanje je uspešno obrisano.',
+
+# delete conflict
+'deletedwhileediting' => 'Upozorenje: Ova strana je obrisana pošto ste počeli uređivanje!',
+'confirmrecreate' => 'Korisnik [[{{ns:user}}:$1|$1]] ([[{{ns:user_talk}}:$1|razgovor]]) je obrisao ovaj članak pošto ste počeli uređivanje sa razlogom:
+: \'\'$2\'\'
+Molimo potvrdite da stvarno želite da ponovo napravite ovaj članak.',
+'recreate' => 'Ponovo napravi',
+'tooltip-recreate' => 'Ponovo napravite ovu stranu uprkos tome što je obrisana',
+
+'unit-pixel' => 'px',
+
+# HTML dump
+'redirectingto' => 'Preusmeravam na [[$1]]...',
+
+# action=purge
+'confirm_purge' => 'Da li želite očistiti keš ove stranice?
+
+$1',
+'confirm_purge_button' => 'Da',
+
+'youhavenewmessagesmulti' => 'Imate novih poruka na $1',
+'searchcontaining' => 'Pretraži članke koji sadrže \'\'$1\'\'.',
+'searchnamed' => 'Pretraži članke koji se zovu \'\'$1\'\'.',
+'articletitles' => 'Članci počevši od \'\'$1\'\'',
+'hideresults' => 'Sakrij rezultate',
+
+# DISPLAYTITLE
+'displaytitle' => '(Veza ka ovoj strani kao [[$1]])',
+
+'loginlanguagelabel' => 'Jezik: $1',
+
+# Multipage image navigation
+'imgmultipageprev' => '&larr; prethodna stranica',
+'imgmultipagenext' => 'sledeća stranica &rarr;',
+'imgmultigo' => 'Idi!',
+'imgmultigotopre' => 'Idi na stranicu',
+
+# Table pager
+'ascending_abbrev' => 'rast',
+'descending_abbrev' => 'opad',
+'table_pager_next' => 'Sledeća stranica',
+'table_pager_prev' => 'Prethodna stranica',
+'table_pager_first' => 'Prva stranica',
+'table_pager_last' => 'Poslednja stranica',
+'table_pager_limit' => 'Prikaži $1 delova informacije po stranici',
+'table_pager_limit_submit' => 'Idi',
+'table_pager_empty' => 'Bez rezultata',
+
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesSr_jc.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesSr_jc.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesSr_jc.php	(revision 1280)
@@ -0,0 +1,9 @@
+<?php
+/**
+  * @addtogroup Language
+  */
+
+# Inherit everything for now
+$fallback = 'sr-ec';
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesSr_jl.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesSr_jl.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesSr_jl.php	(revision 1280)
@@ -0,0 +1,9 @@
+<?php
+/**
+  * @addtogroup Language
+  */
+
+# Inherit everything for now
+$fallback = 'sr-ec';
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesSu.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesSu.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesSu.php	(revision 1280)
@@ -0,0 +1,1423 @@
+<?php
+/** Sundanese language file (Basa Sunda)
+  *
+  * Source: http://su.wikipedia.org/
+  *
+  * @addtogroup Language
+  */
+$fallback = 'id';
+
+$namespaceNames = array(
+	NS_MEDIA			=> 'Média',
+	NS_SPECIAL			=> 'Husus',
+	NS_MAIN				=> '',
+	NS_TALK				=> 'Obrolan',
+	NS_USER				=> 'Pamaké',
+	NS_USER_TALK		=> 'Obrolan_pamaké',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK		=> 'Obrolan_$1',
+	NS_IMAGE			=> 'Gambar',
+	NS_IMAGE_TALK		=> 'Obrolan_gambar',
+	NS_MEDIAWIKI		=> 'MediaWiki',
+	NS_MEDIAWIKI_TALK	=> 'Obrolan_MediaWiki',
+	NS_TEMPLATE			=> 'Citakan',
+	NS_TEMPLATE_TALK	=> 'Obrolan_citakan',
+	NS_HELP				=> 'Pitulung',
+	NS_HELP_TALK		=> 'Obrolan_pitulung',
+	NS_CATEGORY			=> 'Kategori',
+	NS_CATEGORY_TALK	=> 'Obrolan_kategori',
+);
+
+
+$messages = array(
+# User preference toggles
+'tog-underline'            => 'Garis-handapan tumbu',
+'tog-highlightbroken'      => 'Format tumbu pegat <a href="" class="new">kawas kieu</a> (atawa: kawas kieu<a href="" class="internal">?</a>).',
+'tog-justify'              => 'Lempengkeun alinéa',
+'tog-hideminor'            => 'Sumputkeun éditan minor dina nu anyar robah',
+'tog-extendwatchlist'      => 'Legaan awaskeuneun ngarah sakabéh parobahanana katempo',
+'tog-usenewrc'             => 'Nu anyar robah dina wanda séjén (JavaScript)',
+'tog-numberheadings'       => 'Nomeran lulugu sacara otomatis',
+'tog-showtoolbar'          => "Témbongkeun ''toolbar'' édit (JavaScript)",
+'tog-editondblclick'       => 'Édit kaca ku klik ganda (JavaScript)',
+'tog-editsection'          => 'Tambahkeun tumbu [édit] ngarah bisa ngarobah eusi bab',
+'tog-showtoc'              => 'Témbongkeun daptar eusi<br />(pikeun kaca nu leuwih ti tilu subjudul)',
+'tog-rememberpassword'     => 'Inget sandi nembus rintakan',
+'tog-editwidth'            => 'Kotak édit sing lébar',
+'tog-watchcreations'       => 'Awaskeun kaca jieunan kuring',
+'tog-watchdefault'         => 'Tambahkeun kaca nu diédit ku anjeun kana awaskeuneun anjeun',
+'tog-watchmoves'           => 'Awaskeun kaca nu dipindahkeun ku kuring',
+'tog-watchdeletion'        => 'Awaskeun kaca nu dihapus ku kuring',
+'tog-minordefault'         => 'Tandaan sadaya éditan salaku minor luyu jeung ti dituna',
+'tog-previewontop'         => 'Témbongkeun sawangan méméh kotak édit (lain sanggeusna)',
+'tog-previewonfirst'       => 'Témbongkeun sawangan dina éditan munggaran',
+'tog-nocache'              => 'Tumpurkeun <em>cache</em> kaca',
+'tog-enotifwatchlistpages' => 'Surélékan mun robah',
+'tog-enotifusertalkpages'  => 'Mun kaca obrolan kuring robah, béjaan ngaliwatan surélék',
+'tog-enotifminoredits'     => 'Béjaan ogé (ngaliwatan surélék) mun aya parobahan leutik dina kacana',
+'tog-enotifrevealaddr'     => 'Témbongkeun alamat surélék kuring dina surat émbaran',
+'tog-shownumberswatching'  => 'Témbongkeun jumlah nu ngawaskeun',
+'tog-fancysig'             => 'Paraf kasar (tanpa tumbu otomatis)',
+'tog-externaleditor'       => 'Pigunakeun éditor éksternal ti buhunna',
+'tog-watchlisthideown'     => 'Sumputkeun éditan kuring dina daptar awaskeuneun',
+'tog-watchlisthidebots'    => 'Sumputkeun éditan bot dina daptar awaskeuneun',
+'tog-watchlisthideminor'   => 'Sumputkeun éditan leutik dina daptar awaskeuneun',
+'tog-ccmeonemails'         => 'Kirimkeun ogé salinan surélékna ka alamat kuring',
+
+'underline-always' => 'Salawasna',
+'underline-never'  => 'Ulah',
+
+'skinpreview' => '(Pramidang)',
+
+# Dates
+'sunday'        => 'Minggu',
+'monday'        => 'Senén',
+'tuesday'       => 'Salasa',
+'wednesday'     => 'Rebo',
+'thursday'      => 'Kemis',
+'friday'        => 'Jumaah',
+'saturday'      => 'Saptu',
+'sun'           => 'Min',
+'mon'           => 'Sen',
+'tue'           => 'Sal',
+'wed'           => 'Reb',
+'thu'           => 'Kem',
+'fri'           => 'Jum',
+'sat'           => 'Sap',
+'january'       => 'Januari',
+'february'      => 'Pébruari',
+'march'         => 'Maret',
+'april'         => 'April',
+'may_long'      => 'Méi',
+'june'          => 'Juni',
+'july'          => 'Juli',
+'august'        => 'Agustus',
+'september'     => 'Séptémber',
+'october'       => 'Oktober',
+'november'      => 'Nopémber',
+'december'      => 'Désémber',
+'january-gen'   => 'Januari',
+'february-gen'  => 'Pébruari',
+'march-gen'     => 'Maret',
+'april-gen'     => 'April',
+'may-gen'       => 'Méi',
+'june-gen'      => 'Juni',
+'july-gen'      => 'Juli',
+'august-gen'    => 'Agustus',
+'september-gen' => 'Séptémber',
+'october-gen'   => 'Oktober',
+'november-gen'  => 'Nopémber',
+'december-gen'  => 'Désémber',
+'jan'           => 'Jan',
+'feb'           => 'Péb',
+'mar'           => 'Mar',
+'apr'           => 'Apr',
+'may'           => 'Méi',
+'jun'           => 'Jun',
+'jul'           => 'Jul',
+'aug'           => 'Ags',
+'sep'           => 'Sép',
+'oct'           => 'Okt',
+'nov'           => 'Nop',
+'dec'           => 'Dés',
+
+# Bits of text used by many pages
+'categories'            => 'Kategori',
+'pagecategories'        => '{{PLURAL:$1|Kategori|Kategori}}',
+'category_header'       => 'Artikel-artikel na kategori "$1"',
+'subcategories'         => 'Subkategori',
+'category-media-header' => 'Média dina kategori "$1"',
+
+'mainpagetext'      => "''Software'' Wiki geus diinstal.",
+'mainpagedocfooter' => "Mangga tingal ''[http://meta.wikimedia.org/wiki/MediaWiki_i18n documentation on customizing the interface]'' jeung [http://meta.wikimedia.org/wiki/MediaWiki_User%27s_Guide Tungtunan Pamaké] pikeun pitulung maké jeung konfigurasi.",
+
+'about'          => 'Ngeunaan',
+'article'        => 'Kaca eusi',
+'newwindow'      => '(buka na jandéla anyar)',
+'cancel'         => 'Bolay',
+'qbfind'         => 'Panggihan',
+'qbbrowse'       => 'Sungsi',
+'qbedit'         => 'Édit',
+'qbpageoptions'  => 'Kaca ieu',
+'qbpageinfo'     => 'Kontéx',
+'qbmyoptions'    => 'Kaca kuring',
+'qbspecialpages' => 'Kaca husus',
+'moredotdotdot'  => 'Deui...',
+'mypage'         => 'Kaca kuring',
+'mytalk'         => 'Obrolan kuring',
+'anontalk'       => 'Obrolan pikeun IP ieu',
+'navigation'     => 'Tuduh Jalan',
+
+# Metadata in edit box
+'metadata_help' => 'Metadata:',
+
+'errorpagetitle'    => 'Kasalahan',
+'returnto'          => 'Balik deui ka $1.',
+'tagline'           => 'Ti {{SITENAME}}',
+'help'              => 'Pitulung',
+'search'            => 'Sungsi',
+'searchbutton'      => 'Téang',
+'go'                => 'Jung',
+'searcharticle'     => 'Jung',
+'history'           => 'Jujutan kaca',
+'history_short'     => 'Jujutan',
+'info_short'        => 'Iber',
+'printableversion'  => 'Vérsi citakeun',
+'permalink'         => 'Tumbu permanén',
+'print'             => 'Citak',
+'edit'              => 'Édit',
+'editthispage'      => 'Édit kaca ieu',
+'delete'            => 'Hapus',
+'deletethispage'    => 'Hapus kaca ieu',
+'undelete_short'    => 'Bolaykeun ngahapus $1 éditan',
+'protect'           => 'Konci',
+'protectthispage'   => 'Konci kaca ieu',
+'unprotect'         => 'Buka konci',
+'unprotectthispage' => 'Buka konci kaca ieu',
+'newpage'           => 'Kaca anyar',
+'talkpage'          => 'Sawalakeun kaca ieu',
+'specialpage'       => 'Kaca Husus',
+'personaltools'     => 'Parabot pribadi',
+'postcomment'       => 'Kirim koméntar',
+'articlepage'       => 'Témbongkeun kaca eusi',
+'talk'              => 'Sawala',
+'views'             => 'Témbongan',
+'toolbox'           => 'Kotak parabot',
+'userpage'          => 'Témbongkeun kaca pamaké',
+'projectpage'       => 'Témbongkeun kaca proyék',
+'imagepage'         => 'Témbongkeun kaca gambar',
+'mediawikipage'     => 'Témbongkeun kaca talatah',
+'templatepage'      => 'Témbongkeun kaca citakan',
+'viewhelppage'      => 'Témbongkeun kaca pitulung',
+'categorypage'      => 'Témpo kaca kategori',
+'viewtalkpage'      => 'Témbongkeun sawala',
+'otherlanguages'    => 'Basa séjén',
+'redirectedfrom'    => '(Dialihkeun ti $1)',
+'lastmodifiedat'    => 'Kaca ieu panungtungan dirobah $2, $1.', # $1 date, $2 time
+'viewcount'         => 'Kaca ieu geus dibuka $1 kali.',
+'protectedpage'     => 'Kaca nu dikonci',
+'jumpto'            => 'Luncat ka:',
+'jumptonavigation'  => 'navigasi',
+'jumptosearch'      => 'sungsi',
+
+# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
+'aboutsite'         => 'Ngeunaan {{SITENAME}}',
+'aboutpage'         => '{{ns:project}}:Ngeunaan',
+'bugreports'        => 'Laporan kutu',
+'bugreportspage'    => 'Project:Laporan_kutu',
+'copyright'         => 'Sadaya kandungan ieu loka ditangtayungan ku $1',
+'copyrightpagename' => 'Hak cipta {{SITENAME}}',
+'copyrightpage'     => '{{ns:project}}:Hak cipta',
+'currentevents'     => 'Keur lumangsung',
+'currentevents-url' => 'Project:Keur lumangsung',
+'disclaimers'       => 'Bantahan',
+'disclaimerpage'    => '{{ns:project}}:Bantahan_umum',
+'edithelp'          => 'Pitulung ngédit',
+'edithelppage'      => 'Pitulung:Ngédit',
+'faq'               => 'NLD',
+'faqpage'           => '{{ns:project}}:NLD',
+'helppage'          => '{{ns:project}}:Pitulung',
+'mainpage'          => 'Tepas',
+'portal'            => 'Panglawungan',
+'portal-url'        => '{{ns:project}}: Panglawungan',
+'privacy'           => 'Kawijakan privasi',
+'privacypage'       => 'Project:Kawijakan privasi',
+'sitesupport'       => 'Sumbangan',
+'sitesupport-url'   => 'Project:Ngarojong loka',
+
+'badaccess'        => 'Kasalahan widi',
+'badaccess-group0' => 'Anjeun teu wenang ngalaksanakeun peta nu dipundut.',
+'badaccess-group1' => 'Peta nu dipundut ngan bisa laksana pikeun pamaké ti gorombolan $1.',
+'badaccess-group2' => 'Peta nu dipundut ngan bisa laksana pikeun pamaké ti salah sahiji gorombolan $1.',
+'badaccess-groups' => 'Peta nu dipundut ngan bisa laksana pikeun pamaké ti salah sahiji gorombolan $1.',
+
+'versionrequired'     => 'Butuh MediaWiki vérsi $1',
+'versionrequiredtext' => 'Butuh MediaWiki vérsi $1 pikeun migunakeun ieu kaca. Mangga tingal [[Special:Version|kaca vérsi]]',
+
+'ok'                  => 'Heug',
+'pagetitle'           => '$1 - {{SITENAME}}',
+'retrievedfrom'       => 'Disalin ti "$1"',
+'youhavenewmessages'  => 'Anjeun boga $1 ($2).',
+'newmessageslink'     => 'talatah anyar',
+'newmessagesdifflink' => 'bédana ti nu saméméhna',
+'editsection'         => 'édit',
+'editold'             => 'édit',
+'editsectionhint'     => 'Édit bab: $1',
+'toc'                 => 'Daptar eusi',
+'showtoc'             => 'témbongkeun',
+'hidetoc'             => 'sumputkeun',
+'thisisdeleted'       => 'Témbongkeun atawa simpen deui $1?',
+'viewdeleted'         => 'Témbongkeun $1?',
+'restorelink'         => '$1 éditan dihapus',
+'feedlinks'           => 'Asupan:',
+
+# Short words for each namespace, by default used in the 'article' tab in monobook
+'nstab-main'      => 'Artikel',
+'nstab-user'      => 'Kaca pamaké',
+'nstab-media'     => 'Média',
+'nstab-special'   => 'Husus',
+'nstab-project'   => 'Ngeunaan',
+'nstab-image'     => 'Gambar',
+'nstab-mediawiki' => 'Talatah',
+'nstab-template'  => 'Citakan',
+'nstab-help'      => 'Pitulung',
+'nstab-category'  => 'Kategori',
+
+# Main script and global functions
+'nosuchaction'      => 'Teu aya peta kitu',
+'nosuchactiontext'  => 'Peta nu diketik na URL teu dipikawanoh ku wiki',
+'nosuchspecialpage' => 'Teu aya kaca husus nu kitu',
+'nospecialpagetext' => 'Anjeun geus ménta kaca husus nu teu dipikawanoh ku wiki.',
+
+# General errors
+'error'            => 'Kasalahan',
+'databaseerror'    => 'Kasalahan gudang data',
+'dberrortext'      => 'Kasalahan rumpaka mundut databasis.
+Ieu bisa nunjukkeun ayana kutu na parabot leuleusna.
+Pamundut databasis nu panungtungan nyaéta:
+<blockquote><tt>$1</tt></blockquote>
+ti antara fungsi "<tt>$2</tt>".
+Kasalahan MySQL nu mulang "<tt>$3: $4</tt>".',
+'dberrortextcl'    => 'Kasalahan rumpaka mundut databasis.
+Pamuncut databasis nu panungtungan nyaéta:
+"$1"
+ti antara fungsi "$2".
+Kasalahan MySQL nu mulang "$3: $4".',
+'noconnect'        => 'Punten! Wiki ngalaman sababaraha kasusah téhnis sarta teu bisa ngontak server pangkalan data.<br />$1',
+'nodb'             => 'Teu bisa milih pangkalan data $1',
+'cachederror'      => 'Kanggo kaca nu dipénta, di handap ieu mangrupa salinan ti nu aya, tiasa waé tos tinggaleun jaman.',
+'laggedslavemode'  => 'Awas: kandungan kaca bisa baé teu mutahir.',
+'readonly'         => 'pangkalan data dikonci',
+'enterlockreason'  => 'Asupkeun alesan pikeun ngonci, kaasup kira-kira iraha konci ieu rék dibuka',
+'readonlytext'     => 'pangkalan data kiwar keur di konci pikeun éntri anyar sarta parobahan séjénna, meureun pikeun pangropéa pangkalan datarutin, nu satutasna mah bakal normal deui. Kuncén nu ngonci ngécéskeun kieu:
+<p>$1',
+'missingarticle'   => "Pangkalan data teu manggihan téks kaca nu sakuduna aya, ngaranna \"\$1\".
+
+<p>Kitu téh ilaharna mah alatan nuturkeun tumbu jujutan atawa diff bihari ka kaca nu geus dihapus.
+
+<p>Mun lain kitu masalahna, jigana anjeun geus manggihan kutu na ''software''na. Mangga wartoskeun ka kuncén kalawan nuduhkeun URL-na.",
+'readonly_lag'     => 'pangkalan datana sacara otomatis dikonci nalika server pangkalan data disalin kana master',
+'internalerror'    => 'Kasalahan internal',
+'filecopyerror'    => 'Teu bisa nyalin koropak "$1" ka "$2".',
+'filerenameerror'  => 'Teu bisa ngaganti ngaran koropak "$1" jadi "$2".',
+'filedeleteerror'  => 'Teu bisa ngahapus koropak "$1".',
+'filenotfound'     => 'Teu bisa manggihan koropak "$1".',
+'formerror'        => 'Kasalahan: teu bisa ngirim formulir',
+'badarticleerror'  => 'Peta ieu teu bisa dipigawé na kaca ieu.',
+'cannotdelete'     => 'Teu bisa ngahapus kaca atawa gambar nu dimaksud (bisa jadi geus aya nu ngahapus saméméhna).',
+'badtitle'         => 'Judul goréng',
+'badtitletext'     => 'Judul kaca nu dipénta teu sah, kosong, atawa judul antarbasa atawa antarwikina salah tumbu.',
+'perfdisabled'     => 'Punten! Fungsi ieu pikeun samentawis ditumpurkeun sabab ngahambat pangkalan data nepi ka titik di mana teu saurang ogé bisa migunakeun wiki.',
+'perfdisabledsub'  => 'Ieu salaku salinan nu diteundeun ti $1:', # obsolete?
+'perfcached'       => 'Data di handap ieu sindangan sahingga--meureun--teu mutahir:',
+'perfcachedts'     => 'Data di handap ieu mah sindangan, panungtungan diropéa téh $1.',
+'viewsource'       => 'Témbongkeun sumber',
+'viewsourcefor'    => 'pikeun $1',
+'editinginterface' => "'''Perhatosan:''' Anjeun ngédit kaca nu dipaké pikeun nyadiakeun téks antarbeungeut pikeun parabot lemesna. Parobahan kana kaca ieu bakal mangaruhan panémbong antarbeungeut pamaké pikeun pamaké séjén.",
+
+# Login and logout pages
+'logouttitle'                => 'Kaluar log pamaké',
+'logouttext'                 => 'Anjeun ayeuna geus kaluar log. Anjeun bisa neruskeun migunakeun {{SITENAME}} bari anonim, atawa bisa asup log deui maké pamaké nu sarua atawa nu béda. Perlu dicatet yén sababaraha kaca bakal terus némbongan saolah-olah anjeun asup log kénéh nepi ka anjeun ngosongkeun sindangan panyungsi anjeun.',
+'welcomecreation'            => '<h2>Wilujeng sumping, $1!</h2><p>Rekening anjeun geus dijieun. Tong hilap ngarobih préferénsi {{SITENAME}} anjeun.',
+'loginpagetitle'             => 'Asup log pamaké',
+'yourname'                   => 'Ngaran pamaké anjeun',
+'yourpassword'               => 'Sandi anjeun',
+'yourpasswordagain'          => 'Ketik deui sandi anjeun',
+'remembermypassword'         => 'Inget sandi kuring nembus rintakan.',
+'yourdomainname'             => 'Domain anjeun',
+'externaldberror'            => 'Aya kasalahan dina pangkalan data oténtikasi luar, atawa anjeun mémang teu diwenangkeun pikeun ngaropéa rekening luar anjeun.',
+'loginproblem'               => "<b>Aya masalah na ''login'' anjeun.</b><br />Coba deui!",
+'alreadyloggedin'            => '<strong>Pamaké $1, anjeun geus asup log!</strong><br />',
+'login'                      => 'Asup log',
+'loginprompt'                => "Anjeun kudu boga ''cookies'' sangkan bisa asup log ka {{SITENAME}}.",
+'userlogin'                  => 'Nyieun rekening atawa asup log',
+'logout'                     => 'Kaluar log',
+'userlogout'                 => 'Kaluar log',
+'notloggedin'                => 'Can asup log',
+'nologin'                    => 'Teu gaduh rekening? $1.',
+'nologinlink'                => 'Jieun rekening',
+'createaccount'              => 'Jieun rekening anyar',
+'gotaccount'                 => 'Geus boga rekening? $1.',
+'gotaccountlink'             => 'Asup log',
+'createaccountmail'          => 'ku surélék',
+'badretype'                  => 'Sandi nu diasupkeun teu cocog.',
+'userexists'                 => 'Ngaran pamaké nu diasupkeun ku anjeun geus aya nu maké. Mangga pilih ngaran nu séjén.',
+'youremail'                  => 'Surélék anjeun*',
+'username'                   => 'Landihan:',
+'uid'                        => 'ID pamaké:',
+'yourrealname'               => 'Ngaran anjeun*',
+'yourlanguage'               => 'Basa antarbeungeut',
+'yourvariant'                => 'Varian basa',
+'yournick'                   => 'Landihan anjeun (pikeun tawis leungeun)',
+'badsig'                     => 'Parafna teu valid; pariksa tag HTML-na geura.',
+'email'                      => 'Surélék',
+'prefs-help-email-enotif'    => 'Alamat ieu ogé dipaké pikeun ngirim surélék iber, mun anjeun ngajalankeun pilihanana.',
+'prefs-help-realname'        => '* Ngaran asli (pilihan): mun anjeun milih ngeusian, bakal dipaké pikeun nandaan kontribusi anjeun.',
+'loginerror'                 => 'Kasalahan asup log',
+'prefs-help-email'           => '* Surélék (pilihan): batur bisa ngontak anjeun tina kaca pamaké atawa obrolanana tanpa kudu nyebutkeun idéntitas anjeun.',
+'nocookiesnew'               => "Rekening pamaké geus dijieun, tapi anjeun can asup log. {{SITENAME}} maké ''cookies'' pikeun ngasupkeun log pamaké. Anjeun boga ''cookies'' nu ditumpurkeun. Mangga fungsikeun, teras asup log migunakeun ngaran pamaké sarta sandi nu anyar.",
+'nocookieslogin'             => "{{SITENAME}} migunakeun ''cookies'' pikeun ngasupkeun pamaké kana log. Anjeun boga ''cookies'' nu ditumpurkeun. Mangga pungsikeun sarta cobian deui.",
+'noname'                     => 'Anjeun teu nuliskeun ngaran pamaké nu sah.',
+'loginsuccesstitle'          => 'Asup log geus hasil',
+'loginsuccess'               => 'Anjeun ayeuna geus asup log ka {{SITENAME}} salaku "$1".',
+'nosuchuser'                 => 'Teu aya pamaké nu ngaranna "$1". Pariksa éjahanana, atawa paké formulir di handap pikeun nyieun rekening pamaké anyar.',
+'nosuchusershort'            => 'Taya pamaké nu ngaranna "$1", pariksa éjahanana!',
+'nouserspecified'            => 'Anjeun kudu ngeusian ngaran landihan.',
+'wrongpassword'              => 'Sandi nu diasupkeun teu cocog. Mangga cobian deui.',
+'wrongpasswordempty'         => 'Sandina can kaeusian. Cobaan deui!',
+'mailmypassword'             => 'Kirim sandi anyar ngaliwatan surélék',
+'passwordremindertitle'      => 'Pangéling sandi ti {{SITENAME}}',
+'passwordremindertext'       => 'Aya (jigana anjeun ti alamat IP $1) nu ménta sangkan dikiriman sandi anyar asup log {{SITENAME}} ($4). Sandi keur pamaké "$2" ayeuna nyaéta "$3". Anjeun kudu asup log sarta ngarobah sandi anjeun ayeuna.',
+'noemail'                    => 'Teu aya alamat surélék karékam pikeun "$1".',
+'passwordsent'               => 'Sandi anyar geus dikirim ka alamat surélék nu kadaptar pikeun "$1". Mangga asup log deui satutasna katarima.',
+'blocked-mailpassword'       => 'Alamat IP anjeun dipeungpeuk, moal bisa ngédit, and so
+is not allowed to use the password recovery function to prevent abuse.',
+'eauthentsent'               => 'Surélék konfirmasi geus dikirim ka alamat bieu. Méméh aya surat séjén asup ka rekeningna, anjeun kudu nuturkeun pituduh na surélékna pikeun ngonfirmasi yén rekening éta téh bener nu anjeun.',
+'mailerror'                  => 'Kasalahan ngirim surat: $1',
+'acct_creation_throttle_hit' => 'Punten, anjeun geus nyieun $1 rekening, teu bisa nyieun deui.',
+'emailauthenticated'         => 'Alamat surélék anjeun geus dioténtikasi $1.',
+'emailnotauthenticated'      => 'Alamat surélék anjeun <strong>can dioténtikasi</strong>. Moal aya surélék nu bakal dikirim pikeun fitur-fitur di handap ieu.',
+'noemailprefs'               => '<strong>Teu aya alamat surélék</strong>, fitur di handap moal bisa jalan.',
+'emailconfirmlink'           => 'Konfirmasi alamat surélék anjeun',
+'invalidemailaddress'        => 'Alamat surélék teu bisa ditarima sabab formatna salah. Mangga lebetkeun alamat nu formatna bener atawa kosongkeun.',
+'accountcreated'             => 'Rekening ngeus di jieun.',
+'accountcreatedtext'         => 'Rekening pamaké pikeun $1 geus dijieun.',
+
+# Edit page toolbar
+'bold_sample'     => 'Téks kandel',
+'bold_tip'        => 'Téks kandel',
+'italic_sample'   => 'Tulisan déngdék',
+'italic_tip'      => 'Tulisan déngdék',
+'link_sample'     => 'Judul tumbu',
+'link_tip'        => 'Tumbu internal',
+'extlink_sample'  => 'Judul tumbu http://www.conto.com',
+'extlink_tip'     => 'Tumbu kaluar (inget awalan http://)',
+'headline_sample' => 'Téks judul',
+'headline_tip'    => 'Judul tingkat 2',
+'math_sample'     => 'Asupkeun rumus di dieu',
+'math_tip'        => 'Rumus matematis (LaTeX)',
+'nowiki_sample'   => 'Asupkeun téks nu teu diformat di dieu',
+'nowiki_tip'      => 'Format wiki tong diwaro',
+'image_sample'    => 'Conto.jpg',
+'media_sample'    => 'Conto.mp3',
+'media_tip'       => 'Tumbu koropak média',
+'sig_tip'         => 'Tawis leungeun anjeun tur cap wanci',
+'hr_tip'          => 'Garis horizontal (use sparingly)',
+
+# Edit pages
+'summary'                   => 'Ringkesan',
+'subject'                   => 'Jejer/Judul',
+'minoredit'                 => 'Ieu éditan minor',
+'watchthis'                 => 'Awaskeun kaca ieu',
+'savearticle'               => 'Simpen',
+'preview'                   => 'Sawangan',
+'showpreview'               => 'Témbongkeun sawangan',
+'showdiff'                  => 'Témbongkeun parobahan',
+'anoneditwarning'           => "'''Perhatosan:''' Anjeun can asup log. IP anjeun kacateut dina jujutan kaca ieu",
+'blockedtitle'              => 'Pamaké dipeungpeuk',
+'blockedtext'               => "Ngaran pamaké atawa alamat IP anjeun dipeungpeuk ku \$1. Alesanana:<br />''\$2''<p>Anjeun bisa nepungan \$1 atawa salasahiji [[{{MediaWiki:grouppage-sysop}}|kuncén]] séjén pikeun nyawalakeun hal ieu.
+
+Catet yén anjeun teu bisa maké fungsi \"surélékan pamaké ieu\" mun anjeun teu ngadaptarkeun alamat surélék nu sah kana [[Special:Preferences|préferénsi pamaké]] anjeun.
+
+Alamat IP anjeun \$3 jeung ID na \$5, lampirkeun informasi ieu dina unggal ''query'' anjeun.",
+'blockedoriginalsource'     => "Sumber '''$1''' dipidangkeun di handap ieu:",
+'blockededitsource'         => "Tulisan '''éditan anjeun''' dina '''$1''' dipidangkeun di handap ieu:",
+'whitelistedittitle'        => 'Perlu asup log sangkan bisa ngédit',
+'whitelistedittext'         => 'Anjeun kudu asup $1 sangkan bisa ngédit.',
+'whitelistreadtitle'        => 'Perlu asup log pikeun maca',
+'whitelistreadtext'         => 'Anjeun kudu asup [[Special:Userlogin|log]] sangkan bisa maca.',
+'whitelistacctitle'         => 'Anjeun teu diwenangkeun nyieun rekening',
+'whitelistacctext'          => 'Sangkan diwenangkeun nyieun rekening na wiki ieu, anjeun kudu asup [[Special:Userlogin|log]] sarta boga kawenangan nu cukup.',
+'confirmedittext'           => 'Saméméh ngédit, kompirmasikeun heula alamat surélék anjeun. Mangga setél, lajeng sahkeun alamat surélék anjeun dina [[{{ns:special}}:Preferences|préferénsi pamaké]].',
+'nosuchsectiontext'         => 'Anjeun geus nyoba ngarobah bab $1 nu sabenerna euweuh, ku kituna robahan anjeun teu bisa disimpen.',
+'loginreqtitle'             => 'Kudu asup log',
+'loginreqlink'              => 'asup log',
+'loginreqpagetext'          => 'Mun hayang muka kaca séjénna, Anjeun kudu $1.',
+'accmailtitle'              => 'Sandi geus dikirim.',
+'accmailtext'               => "Sandi keur '$1' geus dikirim ka $2.",
+'newarticle'                => '(Anyar)',
+'newarticletext'            => "Anjeun geus nuturkeun tumbu ka kaca nu can aya.
+Pikeun nyieun kaca, mimitian ku ngetik jeroeun kotak di handap
+(tempo [[{{ns:project}}:Pitulung|kaca pitulung]] pikeun leuwih écés).
+Mun anjeun ka dieu teu ngahaja, klik baé tombol '''back''' na panyungsi anjeun.",
+'anontalkpagetext'          => "----''Ieu mangrupa kaca sawala pikeun pamaké anonim nu can (henteu) nyieun rekening, kusabab kitu [[alamat IP]] dipaké dina hal ieu pikeun nyirikeun anjeunna. Alamat IP ieu bisa dipaké ku sababaraha urang. Mun anjeun salasahiji pamaké anonim sarta ngarasa aya koméntar nu teu pakait geus ditujukeun ka anjeun, leuwih hadé [[Special:Userlogin|nyieun rekening atawa asup log]] sangkan teu pahili jeung pamaké anonim séjén.''",
+'noarticletext'             => "Kiwari can aya téks na kaca ieu. Mun anjeun geus kungsi nyieun kaca ieu, coba fungsi [{{fullurl:{{FULLPAGENAME}}|action=edit}} edit].
+
+'''{{ns:Project}} téh lain layanan iklan.''' Artikel promosi ngeunaan diri anjeun, babaturan anjeun, usaha anjeun; atawa artikel nu dijieun salaku bagian tina kampanyeu dagang atawa promosi, bisa dihapus luyu jeung [[{{ns:Project}}:Kawijakan ngahapus|kawijakan ngahapus]]. Pikeun leuwih jéntré, mangga aos [[{{ns:Project}}:Spam]].
+</div>
+</div>",
+'clearyourcache'            => "'''Catetan:''' Sanggeus nyimpen, anjeun perlu ngosongkeun sindangan panyungsi anjeun pikeun nempo parobahanana:
+'''Mozilla/Safari/Konqueror:''' pencét & tahan ''Shift'' bari ngaklik ''Reload'' (atawa pencét ''Ctrl-Shift-R''), '''IE:''' pencét ''Ctrl-F5'', '''Opera:''' pencét ''F5''.",
+'usercssjsyoucanpreview'    => "<strong>Tip:</strong> Pigunakeun tombol 'Témbongkeun sawangan' pikeun nyoba css/js anyar anjeun méméh nyimpen.",
+'usercsspreview'            => "'''Inget yén anjeun ukur nyawang css pamaké anjeun, can disimpen!'''",
+'userjspreview'             => "'''Inget yén anjeun ukur nguji/nyawang ''javascript'' pamaké anjeun, can disimpen!'''",
+'userinvalidcssjstitle'     => "'''Awas''': kulit \"\$1\" mah teu aya. Sing émut yén kaca .css jeung .js mah migunakeun aksara leutik dina judulna, contona baé {{ns:user}}:Foo/monobook.css lawan {{ns:user}}:Foo/Monobook.css.",
+'updated'                   => '(Geus diropéa)',
+'note'                      => '<strong>Catetan:</strong>',
+'previewnote'               => 'Inget yén ieu ukur sawangan, can disimpen!',
+'previewconflict'           => 'Sawangan ieu mangrupa eunteung pikeun téks na rohangan ngédit sakumaha bakal katémbong mun ku anjeun disimpen.',
+'session_fail_preview'      => '<strong>Punten! Kami teu bisa ngolah éditan anjeun alatan leungitna data rintakan. Mangga cobian deui. Mun tetep teu bisa, cobi kaluar log lajeng lebet deui.</strong>',
+'session_fail_preview_html' => "<strong>Punten! Kami teu bisa ngolah éditan anjeun sabab leungitna data rintakan.</strong>
+
+''Kusabab ieu wiki ngawenangkeun dipakéna HTML atah, pramidangna disumputkeun pikeun nyegah panarajang JavaScript.''
+
+<strong>Mun ieu éditan bener, mangga cobian deui. Mun tetep teu metu, cobi kaluar log heula, lajeng lebet deui.</strong>",
+'importing'                 => 'Ngimpor $1',
+'editing'                   => 'Ngédit $1',
+'editinguser'               => 'Ngédit $1',
+'editingsection'            => 'Ngédit $1 (bagian)',
+'editingcomment'            => 'Ngédit $1 (pamanggih)',
+'editconflict'              => 'Konflik éditan: $1',
+'explainconflict'           => 'Aya nu geus ngarobah kaca ieu saprak anjeun mimiti ngédit. Téks béh luhur ngandung téks kaca nu aya kiwari, parobahan anjeun ditémbongkeun di béh handap. Anjeun kudu ngagabungkeun parobahan anjeun kana téks nu kiwari.
+<b>Ngan</b> téks nu béh luhur nu bakal disimpen nalika anjeun mencét "Simpen".
+<p>',
+'yourtext'                  => 'Tulisan anjeun',
+'storedversion'             => 'Vérsi nu disimpen',
+'nonunicodebrowser'         => '<strong>AWAS: Panyungsi anjeung teu maké unicode, mangga robah heula méméh ngédit artikel.</strong>',
+'editingold'                => '<strong>PERHATOSAN: Anjeun ngédit révisi kadaluwarsa kaca ieu. Mun ku anjeun disimpen, sagala parobahan nu dijieun sanggeus révisi ieu bakal leungit.</strong>',
+'yourdiff'                  => 'Béda',
+'copyrightwarning'          => "Perhatikeun yén sadaya kontribusi ka MediaWiki dianggap medal dina panangtayungan lisénsi $2 (tempo $1 pikeun jéntréna). Mun anjeun teu miharep tulisan anjeun dirobah sarta disebarkeun deui, ulah dilebetkeun ka dieu.<br />
+Anjeun ogé jangji yén tulisan ieu dijieun ku sorangan, atawa disalin ti ''domain'' umum atawa sumberdaya bébas séjénna. <strong>ULAH NGASUPKEUN KARYA NU MIBANDA HAK CIPTA TANPA IDIN!</strong>
+</div>",
+'copyrightwarning2'         => 'Catet yén sadaya kontribusi ka {{SITENAME}} bisa diédit, dirobah, atawa dihapus ku kontributor séjén. Mun anjeun teu miharep tulisan anjeun dirobah, ulah ngintunkeun ka dieu.<br />
+Anjeun ogé mastikeun yén ieu téh pituin tulisan anjeun, atawa salinan ti domain umum atawa sumberdaya bébas séjénna (tempo $1 pikeun écésna).
+<strong>ULAH NGINTUNKEUN KARYA NU MIBANDA HAK CIPTA TANPA WIDI!</strong>',
+'longpagewarning'           => 'PERHATOSAN: Kaca ieu panjangna $1 kilobytes; sababaraha panyungsi boga masalah dina ngédit kaca nu panjangna nepi ka 32kb. Please consider breaking the page into smaller sections.',
+'readonlywarning'           => "PERHATOSAN: pangkalan data dikonci pikeun diropéa, anjeun moal bisa nyimpen éditan anjeun ayeuna. Cobi ''cut-n-paste'' téksna ka na koropak téks sarta simpen dina waktu séjén.",
+'protectedpagewarning'      => "<strong>PERHATOSAN: Kaca ieu dikonci sahingga ngan bisa dirobah ku pamaké nu statusna kuncén. Pastikeun yén anjeun tumut kana [[{{ns:project}}:tungtunan_kaca_nu_dikonci'|tungtunan kaca nu dikonci]].</strong>",
+'semiprotectedpagewarning'  => "'''Perhatoskeun''': ieu kaca dikonci sahingga ukur bisa dirobah ku pamaké nu geus asup log.",
+'cascadeprotectedwarning'   => "'''Awas''': ieu kaca dikonci sahingga ukur bisa dirobah ku kuncén, sabab kaasup kaca dina panyalindungan-ngaruntuy di handap ieu:",
+'templatesused'             => 'Citaka nu dipaké na kaca ieu:',
+
+# History pages
+'revhistory'          => 'Jujutan révisi',
+'nohistory'           => 'Teu aya jujutan édit pikeun kaca ieu.',
+'revnotfound'         => 'Révisi teu kapanggih',
+'revnotfoundtext'     => 'Révisi heubeul kaca nu dipénta ku anjeun teu bisa kapanggih.
+Please check the URL you used to access this page.',
+'loadhist'            => 'Keur ngamuat jujutan kaca',
+'currentrev'          => 'Révisi kiwari',
+'revisionasof'        => 'Révisi nurutkeun $1',
+'previousrevision'    => '← Révisi leuwih heubeul',
+'nextrevision'        => 'Révisi nu leuwih anyar →',
+'currentrevisionlink' => 'Témbongkeun révisi kiwari',
+'cur'                 => 'kiw',
+'next'                => 'salajengna',
+'last'                => 'ahir',
+'orig'                => 'asli',
+'histlegend'          => 'Pilihan béda: tandaan wadah buleud vérsina pikeun ngabandingkeun sarta pencét énter atawa tombol di handap.<br />
+Katerangan: (kiw) = bédana jeung vérsi kiwari,
+(ahir) = bédana jeung vérsi nu harita, m = éditan minor.',
+'deletedrev'          => '[dihapus]',
+'histfirst'           => 'Pangheubeulna',
+'histlast'            => 'Pangahirna',
+
+# Revision deletion
+'rev-deleted-comment'         => '(koméntar dihapus)',
+'rev-deleted-user'            => '(ngaran pamaké geus dihapus)',
+'rev-deleted-text-permission' => '<div class="mw-warning plainlinks">
+Révisi kaca ieu geus dihapus tina arsip publik. Dadaranana meureun aya dina [{{fullurl:Husus:Log/delete|page={{PAGENAMEE}}}} log hapusan].
+</div>',
+'rev-deleted-text-view'       => '<div class="mw-warning plainlinks">
+Révisi kaca ieu geus dihapus tina arsip publik. Tapi, salaku administrator dina loka ieu, anjeun bisa nempo; dadaranana meureun aya dina [{{fullurl:Husus:Log/delete|page={{PAGENAMEE}}}} log hapusan].
+</div>',
+'rev-delundel'                => 'témbongkeun/sumputkeun',
+'revdelete-selected'          => "{{PLURAL:$2|Révisi pilihan|Révisi pilihan}} pikeun '''$1'''",
+'revdelete-legend'            => 'Setél réstriksi révisi:',
+'revdelete-hide-text'         => 'Sumputkeun téks révisi',
+'revdelete-hide-comment'      => 'Sumputkeun koméntar ngédit',
+'revdelete-hide-user'         => 'Sumputkeun ngaran pamaké/IP éditor',
+'revdelete-hide-restricted'   => 'Larapkeun ieu réstriksi boh ka kuncén atawa nu séjénna',
+'revdelete-log'               => 'Koméntar log:',
+
+# Diffs
+'difference'                => '(Béda antarrévisi)',
+'loadingrev'                => 'ngamuat béda révisi',
+'lineno'                    => 'Baris ka-$1:',
+'editcurrent'               => 'Édit vérsi kiwari kaca ieu',
+'selectnewerversionfordiff' => 'Pilih vérsi nu leuwih anyar pikeun babandingan',
+'selectolderversionfordiff' => 'Pilih vérsi nu leuwih heubeul pikeun babandingan',
+'compareselectedversions'   => 'Bandingkeun vérsi nu dipilih',
+
+# Search results
+'searchresults'         => 'Hasil néangan',
+'searchresulttext'      => 'Pikeun iber nu leuwih lengkep ngeunaan nyaksrak di {{SITENAME}}, buka [[{{ns:project}}:Nyaksrak|Nyaksrak {{SITENAME}}]].',
+'searchsubtitle'        => 'Pikeun pamundut "[[:$1]]"',
+'searchsubtitleinvalid' => 'Pikeun pamundut "$1"',
+'badquery'              => 'Pamundut néang formatna salah',
+'badquerytext'          => "Kami teu bisa ngolah ''query'' anjeun, biasana sabab anjeun nyoba néang kecap nu ukur hiji/dua aksara, nu mémang can dirojong; bisa ogé alatan anjeun salah ngetik. Mangga cobian deui.",
+'matchtotals'           => '\'\'Query\'\' "$1" cocog jeung $2 judul kaca sarta tulisan na $3 kaca.',
+'noexactmatch'          => '<span style="font-size: 135%; font-weight: bold; margin-left: .6em">Teu aya kaca nu judulna kitu</span>
+
+<span style="display: block; margin: 1.5em 2em">
+Coba saksrak na téks lengkep, atawa \'\'\'[[<nowiki>$1</nowiki>|nyieun artikel nu judulna kitu]]\'\'\' atawa [[{{ns:project}}:Artikel pamundut|mundut dijieunna éta artikel]].
+
+<span style="display:block; font-size: 89%; margin-left:.2em">Mangga sungsi {{SITENAME}} saméméh nyieun artikel anyar, pikeun ngahindarkeun artikel ganda nu ukur béda éjahan/ngaran.</span>
+</span>',
+'titlematches'          => 'Judul artikel nu cocog',
+'notitlematches'        => 'Teu aya judul kaca nu cocog',
+'textmatches'           => 'Téks kaca nu cocog',
+'notextmatches'         => 'Teu aya téks kaca nu cocog',
+'prevn'                 => '$1 saméméhna',
+'nextn'                 => '$1 salajengna',
+'viewprevnext'          => 'Témbongkeun ($1) ($2) ($3).',
+'showingresults'        => 'Di handap ieu némbongkeun <b>$1</b> hasil tina #<b>$2</b>.',
+'showingresultsnum'     => 'Di handap ieu némbongkeun <b>$3</b> hasil tina #<b>$2</b>.',
+'nonefound'             => '<strong>Catetan</strong>: panéangan nu teu hasil mindeng disababkeun ku néang kecap umum kawas "ti" nu teu diasupkeun kana indéks, atawa alatan nangtukeun leuwih ti hiji istilah panéang (ngan kaca-kaca nu ngandung sakabéh istilah panéang nu bakal némbongan).',
+'powersearch'           => 'Sungsi',
+'powersearchtext'       => 'Sungsi na ngaranspasi:<br />
+$1<br />
+$2 Daptarkeun alihan &nbsp; Sungsi $3 $9',
+'searchdisabled'        => '<p style="margin: 1.5em 2em 1em">Punten! Néangan téks lengkep di {{SITENAME}} kanggo samentawis ditumpurkeun pikeun alesan kinerja. Jalaran kitu, saheulaanan anjeun bisa nyungsi di Google di handap ieu.
+<span style="font-size: 89%; display: block; margin-left: .2em">Catet yén indéxna ngeunaan eusi {{SITENAME}} bisa jadi teu mutahir.</span></p>',
+'blanknamespace'        => '(Utama)',
+
+# Preferences page
+'preferences'           => 'Préferénsi',
+'mypreferences'         => 'Préferénsi kuring',
+'prefsnologin'          => 'Can asup log',
+'prefsnologintext'      => 'Anjeun kudu [[Special:Userlogin|asup log]] pikeun ngatur préferénsi pamaké.',
+'prefsreset'            => 'Préferénsi geus disét ulang tina arsip.',
+'changepassword'        => 'Robah sandi',
+'skin'                  => 'Kulit',
+'dateformat'            => 'Format titimangsa',
+'datedefault'           => 'Tanpa préferénsi',
+'datetime'              => 'Titimangsa jeung wanci',
+'math_unknown_error'    => 'Kasalahan teu kanyahoan',
+'math_unknown_function' => 'fungsi teu kanyahoan',
+'math_syntax_error'     => 'Kasalahan rumpaka',
+'prefs-personal'        => 'Data pamaké',
+'prefs-rc'              => 'Panémbong robahan anyar jeung tukung',
+'prefs-misc'            => 'Pangaturan rupa-rupa',
+'saveprefs'             => 'Simpen préferénsi',
+'resetprefs'            => 'Sét ulang préferénsi',
+'oldpassword'           => 'Sandi heubeul',
+'newpassword'           => 'Sandi anyar',
+'retypenew'             => 'Ketik ulang sandi',
+'textboxsize'           => 'Ukuran kotak téks',
+'rows'                  => 'Baris',
+'columns'               => 'Kolom',
+'searchresultshead'     => 'Aturan hasil néang',
+'resultsperpage'        => 'Hasil nu ditémbongkeun per kaca',
+'contextlines'          => 'Jumlah baris sakali némbongan',
+'contextchars'          => 'Karakter kontéks per baris',
+'recentchangescount'    => 'Jumlah judul nu anyar robah',
+'savedprefs'            => 'Préferénsi anjeun geus disimpen.',
+'timezonelegend'        => 'Wewengkon wanci',
+'timezonetext'          => 'Asupkeun sabaraha jam bédana antara wanci di tempat anjeun jeung wanci server (UTC).',
+'localtime'             => 'Témbongan wanci lokal',
+'servertime'            => 'Waktu server ayeuna',
+'guesstimezone'         => 'Eusian ti panyungsi',
+'allowemail'            => 'Buka koropak pikeun nampa surélék ti nu séjén',
+'defaultns'             => 'Téang ti antara spasingaran ieu luyu jeung ti dituna:',
+'default'               => 'ti dituna',
+'files'                 => 'Koropak',
+
+# User rights
+'userrights-lookup-user'     => 'Atur gorombolan pamaké',
+'userrights-user-editname'   => 'Asupkeun landihan:',
+'editusergroup'              => 'Édit Golongan Pamaké',
+'userrights-editusergroup'   => 'Édit gorombolan pamaké',
+'saveusergroups'             => 'Simpen Grup Pamaké',
+'userrights-groupsmember'    => 'Anggota ti:',
+'userrights-groupsavailable' => 'Gorombolan nu aya:',
+
+# Groups
+'group'       => 'Gorombolan:',
+'group-sysop' => 'Kuncén',
+'group-all'   => '(sadayana)',
+
+'group-sysop-member' => 'Kuncén',
+
+'grouppage-sysop' => '{{ns:project}}:Kuncén',
+
+# User rights log
+'rightslog'      => 'Log hak pamaké',
+'rightslogtext'  => 'Ieu mangrupa log parobahan hak-hak pamaké.',
+'rightslogentry' => 'ngarobah kaanggotaan grup pikeun $1 tina $2 jadi $3',
+'rightsnone'     => '(euweuh)',
+
+# Recent changes
+'nchanges'                          => '$1 parobahan',
+'recentchanges'                     => 'Nu anyar robah',
+'recentchangestext'                 => 'Lacak parobahan ka wiki panganyarna na kaca ieu.',
+'rcnote'                            => "Di handap ieu '''$1''' parobahan ahir na '''$2''' poé ieu tina $3.",
+'rcnotefrom'                        => 'Di handap ieu parobahan saprak <b>$2</b> (nu ditémbongkeun nepi ka <b>$1</b>).',
+'rclistfrom'                        => 'Témbongkeun nu anyar robah nepi ka $1',
+'rcshowhideminor'                   => '$1 éditan minor',
+'rcshowhidebots'                    => '$1 bot',
+'rcshowhideliu'                     => '$1 pamaké nu asup log',
+'rcshowhideanons'                   => '$1 pamaké anonim',
+'rcshowhidemine'                    => '$1 éditan kuring',
+'rclinks'                           => 'Témbongkeun $1 parobahan ahir dina $2 poé ahir<br />$3',
+'diff'                              => 'béda',
+'hist'                              => 'juj',
+'hide'                              => 'sumputkeun',
+'show'                              => 'témbongkeun',
+'newpageletter'                     => 'A',
+'number_of_watching_users_pageview' => '[$1 pamaké nu ngawaskeun]',
+
+# Recent changes linked
+'recentchangeslinked' => 'Parobahan nu patali',
+
+# Upload
+'upload'                      => 'Muatkeun koropak',
+'uploadbtn'                   => 'Muatkeun koropak',
+'reupload'                    => 'Muat ulang',
+'reuploaddesc'                => 'Balik ka formulir muatan.',
+'uploadnologin'               => 'Can asup log',
+'uploadnologintext'           => 'Anjeun kudu [[Special:Userlogin|asup log]] pikeun ngamuat koropak.',
+'uploaderror'                 => 'Kasalahan muat',
+'uploadtext'                  => "<strong>HEUP!</strong> Méméh anjeun ngamuat di dieu, pastikeun yén anjeun geus maca sarta tumut ka [[Special:Image_use_policy|kawijakan maké gambar]].
+<p>Mun geus aya koropak na wiki nu ngaranna sarua jeung nu disebutkeun ku anjeun, koropak nu geus lila bakal diganti otomatis. Mangka, iwal ti pikeun ngaropéa hiji koropak, tangtu leuwih hadé mun anjeun mariksa heula bisi koropak nu sarupa geus aya.
+<p>Pikeun némbongkeun atawa néang gambar-gambar nu pernah dimuat saméméhna, mangga lebet ka [[Special:Imagelist|daptar gambar nu dimuat]]. Muatan sarta hapusan kadaptar dina log [[{{ns:project}}:Upload_log|log muatan]].
+</p><p>Paké formulir di handap pikeun ngamuat koropak gambar anyar pikeun ilustrasi kaca anjeun. Na kalolobaan panyungsi, anjeun bakal manggihan tombol \"Sungsi/''Browse''...\", nu bakal nganteur ka dialog muka-koropak nu baku na sistim operasi anjeun. Milih hiji koropak bakal ngeusian ngaran koropakna kana rohangan téks gigireun tombol nu tadi. Anjeun ogé kudu nyontréng kotak nu nandakeun yén anjeun teu ngarumpak hak cipta batur ku dimuatna ieu koropak. Pencét tombol \"Muatkeun/''Upload''\" pikeun ngeréngsékeun muatan. Prosés ieu bisa lila mun anjeun migunakeun sambungan internét nu lambat.
+<p>Format nu dianjurkeun nyéta JPEG pikeun gambar fotografik, PNG pikeun hasil ngagambar sarta gambar séjénna, sarta OGG pikeun sora. Pilih ngaran koropak nu déskriptif sangkan teu ngalieurkeun. Pikeun ngasupkeun gambarna na kaca séjén, pigunakeun tumbu dina wujud <b>[[Image:file.jpg]]</b> atawa <b>[[Image:file.ogg]]</b> pikeun sora.
+<p>Catet yén salaku kaca wiki, nu séjén bisa ngarobah atawa ngahapus muatan anjeun mun maranéhna nganggap ieu saluyu jeung kapentingan proyék, sarta anjeun bisa waé dipeungpeuk ti ngamuat koropak mun anjeun ngaruksak/ngaganggu sistim.",
+'uploadlog'                   => 'log muatan',
+'uploadlogpage'               => 'Log_muatan',
+'uploadlogpagetext'           => 'Di handap mangrupa daptar muatan koropak nu panganyarna. Titimangsa nu katémbong dumasar titimangsa server (UTC).
+<ul>
+</ul>',
+'filename'                    => 'Ngaran koropak',
+'filedesc'                    => 'Ringkesna',
+'fileuploadsummary'           => 'Ringkesan:',
+'filestatus'                  => 'Status hak cipta',
+'filesource'                  => 'Sumber',
+'uploadedfiles'               => 'Koropak nu geus dimuat',
+'ignorewarning'               => 'Ulah diwaro, simpen baé koropakna.',
+'minlength'                   => 'Ngaran gambar sahenteuna kudu tilu aksara.',
+'illegalfilename'             => 'Ngaran koropak "$1" ngandung aksara nu teu diwenangkeun pikeun judul kaca. Mangga gentos ngaranna tur cobi muatkeun deui.',
+'badfilename'                 => 'Ngaran gambar geus dirobah jadi "$1".',
+'largefileserver'             => 'Ieu koropak badag teuing, ngaleuwihan wates nu diwenangkeun ku server.',
+'emptyfile'                   => "Koropak nu dimuatkeun ku anjeun jigana kosong. Hal ieu bisa jadi alatan sarupaning ''typo'' na ngaran koropakna. Mangga parios deui yén anjeun leres-leres hoyong ngamuat koropak éta.",
+'fileexists'                  => 'Koropak nu ngaranna kieu geus aya, mangga parios $1 mun anjeun teu yakin rék ngaganti.',
+'fileexists-forbidden'        => 'Koropak nu ngaranna ieu geus aya; mangga balik deui sarta muatkeun koropakna maké ngaran nu béda. [[Image:$1|thumb|center|$1]]',
+'fileexists-shared-forbidden' => "Koropak nu ngaranna ieu geus aya dina gudang koropak babagi (''shared file repository''); mangga balik deui sarta muatkeun koropak ieu maké ngaran nu béda. [[Image:$1|thumb|center|$1]]",
+'successfulupload'            => 'Ngamuat geus hasil',
+'fileuploaded'                => 'Koropak "$1" geus réngsé dimuat. Tuturkeun tumbu ieu: $2 pikeun kaca dadaran sarta iber ngeunaan koropakna, kayaning ti mana asalna, dijieun iraha jeung ku saha, sarta nu séjénna nu anjeun nyaho.',
+'uploadwarning'               => 'Pépéling ngamuat',
+'savefile'                    => 'Simpen koropak',
+'uploadedimage'               => 'ngamuat "[[$1]]"',
+'uploaddisabled'              => 'Punten, ngamuat ayeuna ditumpurkeun.',
+'uploadscripted'              => "Koropak ieu ngandung kode HTML atawa skrip nu bisa dibaca ngaco ku panyungsi ramat (''web browser'').",
+'uploadvirus'                 => 'Koropakna ngandung virus! Katrangan: $1',
+'sourcefilename'              => 'Ngaran koropak sumber',
+'destfilename'                => 'Ngaran koropak tujuan',
+'watchthisupload'             => 'Awaskeun kaca ieu',
+'filewasdeleted'              => 'Ngaran koropak ieu geus di hapus. Anjeun kudu ningali ka $1 sa acan muatkeun koropak deui',
+
+'nolicense'          => 'Taya nu dipilih',
+'upload_source_file' => ' (koropak dina komputer salira)',
+
+# Image list
+'imagelist'                 => 'Daptar gambar',
+'imagelisttext'             => 'Di handap ieu daptar $1 gambar nu disusun $2.',
+'imagelistforuser'          => 'Ukur némbongkeun gambar nu dimuatkeun ku $1.',
+'getimagelist'              => 'mulut béréndélan koropak',
+'ilsubmit'                  => 'Sungsi',
+'showlast'                  => 'Témbongkeun $1 gambar ahir dumasar $2.',
+'byname'                    => 'dumasar ngaran',
+'bydate'                    => 'dumasar titimangsa',
+'bysize'                    => 'dumasar ukuran',
+'imgdelete'                 => 'hap',
+'imgdesc'                   => 'dad',
+'imgfile'                   => 'koropak',
+'imglegend'                 => 'Katerangan: (desc) = témbongkeun/édit dadaran gambar.',
+'imghistory'                => 'Jujutan gambar',
+'revertimg'                 => 'blk',
+'deleteimg'                 => 'hap',
+'deleteimgcompletely'       => 'Hapus sadaya révisi',
+'imghistlegend'             => 'Katerangan: (kiw) = ieu salaku gambar kiwari, (hps) = hapus vérsi heubeul ieu, (blk) = balikkeun ka vérsi heubeul ieu.
+<br /><i>Klik na titimangsa pikeun nempo gambar nu dimuat poé éta</i>.',
+'imagelinks'                => 'Tumbu gambar',
+'linkstoimage'              => 'Kaca nu numbu ka gambar ieu:',
+'nolinkstoimage'            => 'Teu aya kaca nu numbu ka gambar ieu.',
+'sharedupload'              => "<br clear=both>
+{| align=center border=0 cellpadding=3 cellspacing=3 style=\"border: solid #aaa 1px; background: #f9f9f9; font-size: 100%;\"
+|-
+| [[Gambar:Commons-logo.svg|20px|Lambang Wikimedia Commons]]
+|Koropak ieu asalna ti ''[[Commons:Tepas|Wikimedia Commons]]''. Tempo '''[[Commons:Image:{{PAGENAME}}|kaca dadaranana]]''' pikeun leuwih jéntré.
+|}
+<br />",
+'shareduploadwiki'          => 'Mangga aos $1 pikeun émbaran leuwih jéntré.',
+'shareduploadwiki-linktext' => 'kaca pedaran koropak',
+'noimage'                   => 'Euweuh koropak nu ngaranna kitu, anjeun bisa $1.',
+'noimage-linktext'          => 'muatkeun',
+'uploadnewversion-linktext' => 'ngamuatkeun vérsi anyar koropak ieu',
+'imagelist_date'            => 'Titimangsa',
+'imagelist_user'            => 'Pamaké',
+'imagelist_description'     => 'Pedaran',
+'imagelist_search_for'      => 'Susud ngaran gambar:',
+
+# MIME search
+'mimesearch'         => 'Sungsi MIME',
+'mimesearch-summary' => 'Ieu kaca bisa dipaké nyaring koropak dumasar tipeu MIME-na. Asupan: contenttype/subtype, contona <tt>image/jpeg</tt>.',
+'mimetype'           => 'Tipeu MIME:',
+'download'           => 'pulut',
+
+# Unwatched pages
+'unwatchedpages' => 'Kaca nu teu diawaskeun',
+
+# List redirects
+'listredirects' => 'Daptar alihan',
+
+# Unused templates
+'unusedtemplates'    => 'Citakan nu teu kapaké',
+'unusedtemplateswlh' => 'tumbu lianna',
+
+# Random redirect
+'randomredirect' => 'Alihan acak',
+
+# Statistics
+'statistics'    => 'Statistik',
+'sitestats'     => 'Statistika {{SITENAME}}',
+'userstats'     => 'Statistik pamaké',
+'sitestatstext' => "Jumlah-jamléh aya '''\$1''' kaca dina pangkalan data, kaasup kaca \"obrolan\", kaca-kaca ngeunaan MédiaWiki, kaca \"tukung\", alihan, sarta nu séjénna nu meureun teu kaasup artikel.  Lian ti nu éta, aya '''\$2''' kaca nu dianggap artikel nu bener.
+
+'''\$8''' koropak geus dimuat.
+
+Jumlah-jamléh geus aya '''\$3''' kaca ulasan sarta '''\$4''' éditan ti saprak Wiki ieu ngadeg. Jadi hartina aya rata-rata '''\$5''' éditan per kaca sarta '''\$6''' ulasan per édit.
+
+[http://meta.wikimedia.org/wiki/Help:Job_queue Antrian job] adalah sebanyak '''\$7'''.",
+'userstatstext' => "Aya '''$1''' pamaké nu kadaptar.
+'''$2''' ($4) di antarana $5.",
+
+'disambiguations'     => 'Kaca disambiguasi',
+'disambiguationspage' => 'Project:Tumbu_ka_kaca_disambiguasi',
+
+'doubleredirects'     => 'Alihan ganda',
+'doubleredirectstext' => 'Unggal baris ngandung tumbu ka pangalihan kahiji jeung kadua, kitu ogé téks dina baris kahiji pangalihan kadua, nu biasana méré kaca tujuan nu bener, nu sakuduna ditujul dina pangalihan kahiji.',
+
+'brokenredirects'        => 'Alihan buntu',
+'brokenredirectstext'    => 'Alihan di handap numbu ka kaca nu teu aya.',
+'brokenredirects-edit'   => '(édit)',
+'brokenredirects-delete' => '(hapus)',
+
+'withoutinterwiki'        => 'Kaca-kaca tanpa tumbu basa',
+'withoutinterwiki-header' => 'Kaca-kaca di handap ieu teu numbu ka vérsi basa séjén:',
+
+'fewestrevisions' => 'Artikel nu pangjarangna dirévisi',
+
+# Miscellaneous special pages
+'nbytes'                  => '$1 bait',
+'ncategories'             => '$1 kategori',
+'nlinks'                  => '$1 tumbu',
+'nmembers'                => '$1 {{PLURAL:$1|pamaké|pamaké}}',
+'nrevisions'              => '$1 révisi',
+'nviews'                  => '$1 témbongan',
+'specialpage-empty'       => 'Kaca ieu kosong.',
+'lonelypages'             => 'Kaca-kaca nunggelis',
+'lonelypagestext'         => 'Teu aya kaca di ieu wiki nu numbu ka kaca-kaca di handap ieu:',
+'uncategorizedpages'      => 'Kaca nu can dikategorikeun',
+'uncategorizedcategories' => 'Kategori nu can dikategorikeun',
+'uncategorizedimages'     => 'Gambar nu can dikategorikeun',
+'unusedcategories'        => 'Kategori nu teu kapaké',
+'unusedimages'            => 'Gambar-gambar nu teu kapaké',
+'popularpages'            => 'Kaca-kaca kawentar',
+'wantedcategories'        => 'Kategori nu dipikabutuh',
+'wantedpages'             => 'Kaca nu dipikabutuh',
+'mostlinked'              => 'Nu panglobana numbu ka kaca séjén',
+'mostlinkedcategories'    => 'Paling loba ditumbukeun ka kategori',
+'mostcategories'          => 'Artikel nu paling loba ngandung kategori',
+'mostimages'              => 'Nu panglobana numbu ka gambar',
+'mostrevisions'           => 'Artikel nu pangmindengna dirévisi',
+'allpages'                => 'Sadaya kaca',
+'randompage'              => 'Kaca acak',
+'shortpages'              => 'Kaca-kaca parondok',
+'longpages'               => 'Kaca-kaca paranjang',
+'deadendpages'            => 'Kaca buntu',
+'deadendpagestext'        => 'Kaca-kaca di handap ieu teu numbu ka kaca séjén di ieu wiki:',
+'protectedpages'          => 'Kaca-kaca nu dikonci',
+'protectedpagestext'      => 'Kaca-kaca di handap ieu teu bisa dialihkeun atawa diédit',
+'protectedpagesempty'     => 'Dina danget ieu, teu aya kaca nu dikonci dumasar kana ieu paraméter.',
+'listusers'               => 'Daptar pamaké',
+'specialpages'            => 'Kaca husus',
+'spheading'               => 'Kaca husus pikeun sadaya pamaké',
+'restrictedpheading'      => 'Kaca husus nu diwates',
+'rclsub'                  => '(ka kaca nu numbu ti "$1")',
+'newpages'                => 'Kaca anyar',
+'newpages-username'       => 'Landihan:',
+'ancientpages'            => 'Kaca pangheubeulna',
+'intl'                    => 'Tumbu antarbasa',
+'move'                    => 'Pindahkeun',
+'movethispage'            => 'Pindahkeun kaca ieu',
+'unusedimagestext'        => '<p>Perhatikeun yén jalaloka séjén bisa numbukeun ka hiji gambar ku URL langsung, sahingga masih didaptarkeun di dieu najan sabenerna dipaké.',
+'unusedcategoriestext'    => 'Kaca kategori di handap ieu aya, tapi taya artikel nu diasupkeun kana kategori ieu.',
+
+# Book sources
+'booksources'               => 'Sumber buku',
+'booksources-search-legend' => 'Sungsi sumber buku',
+'booksources-isbn'          => 'ISBN:',
+'booksources-go'            => 'Jung',
+'booksources-text'          => 'Di handap ieu ngabéréndélkeun tumbu ka loka-loka nu ngical buku, boh nu anyar atawa loakan, nu sugan uninga kana buku anu nuju dipilari:',
+
+'categoriespagetext' => 'Kategori-kategori di handap ieu aya na wiki.',
+'data'               => 'Data',
+'userrights'         => 'Manajemén hak pamaké',
+'groups'             => 'Gorombolan pamaké',
+'isbn'               => 'ISBN',
+'alphaindexline'     => '$1 ka $2',
+'version'            => 'Vérsi',
+
+# Special:Log
+'specialloguserlabel'  => 'Pamaké:',
+'speciallogtitlelabel' => 'Judul:',
+'log'                  => 'Log',
+'log-search-submit'    => 'Jung',
+'alllogstext'          => 'Témbongan gabungan log muatan, hapusan, koncian, peungpeukan, jeung kuncén. Bisa dipondokkeun ku cara milih tipe log, ngaran pamaké, atawa kaca nu dimaksud.',
+'logempty'             => 'Taya item nu cocog dina log.',
+'log-title-wildcard'   => 'Téangan judul nu dimimitian ku tulisan ieu',
+
+# Special:Allpages
+'nextpage'          => 'Kaca salajengna ($1)',
+'prevpage'          => 'Kaca saméméhna ($1)',
+'allpagesfrom'      => 'Pintonkeun kaca ti mimiti:',
+'allarticles'       => 'Sadaya artikel',
+'allinnamespace'    => 'Sadaya kaca ($1 ngaranspasi)',
+'allnotinnamespace' => 'Sadaya kaca (teu na $1 ngaranspasi)',
+'allpagesprev'      => 'Saméméhna',
+'allpagesnext'      => 'Salajengna',
+'allpagessubmit'    => 'Jung',
+'allpagesprefix'    => 'Pintonkeun kaca dimimitian ku:',
+'allpagesbadtitle'  => 'Judul kaca nu dibikeun teu bener atawa mibanda awalan antarbasa atawa antarwiki, nu ngandung karakter nu teu bisa dipaké dina judul.',
+
+# Special:Listusers
+'listusersfrom'      => 'Témbongkeun pamaké nu dimimitian ku',
+'listusers-submit'   => 'Témbongkeun',
+'listusers-noresult' => 'Teu kapendak.',
+
+# E-mail user
+'mailnologin'     => 'Euweuh alamat ngirim',
+'mailnologintext' => "Anjeun kudu '''[[{{ns:special}}:Userlogin|asup log]]''' sarta boga alamat surélék nu sah na [[{{ns:special}}:Preferences|préferénsi]] anjeun sangkan bisa nyurélékan pamaké séjén.",
+'emailuser'       => 'Surélékan pamaké ieu',
+'emailpage'       => 'Surélékan pamaké',
+'emailpagetext'   => 'Mun pamaké ieu ngasupkeun alamat surélék nu sah na préferénsi pamakéna, formulir di handap bakal ngirimkeun hiji surat. Alamat surélék nu ku anjeun diasupkeun kana préferénsi pamaké anjeun bakal katémbong salaku alamat "Ti" surélékna, sahingga nu dituju bisa males.',
+'defemailsubject' => 'Surélék {{SITENAME}}',
+'noemailtitle'    => 'Teu aya alamat surélék',
+'noemailtext'     => 'Pamaké ieu teu méré alamat surélék nu sah atawa milih teu narima surélék ti pamaké séjén.',
+'emailfrom'       => 'Ti',
+'emailto'         => 'Ka',
+'emailsubject'    => 'Ngeunaan',
+'emailmessage'    => 'Surat',
+'emailsend'       => 'Kirim',
+'emailccme'       => 'Tembuskeun surat kuring kana surélék.',
+'emailccsubject'  => 'Tembusan surat anjeun keur $1: $2',
+'emailsent'       => 'Surélék geus dikirim',
+'emailsenttext'   => 'Surélék anjeun geus dikirim.',
+
+# Watchlist
+'watchlist'            => 'Awaskeuneun',
+'mywatchlist'          => 'Awaskeuneun',
+'watchlistfor'         => "(keur '''$1''')",
+'nowatchlist'          => 'Anjeun teu boga awaskeuneun.',
+'watchlistcount'       => "'''Anjeun boga $1 awaskeuneun, kaasup kaca obrolan.'''",
+'watchnologin'         => 'Can asup log',
+'watchnologintext'     => 'Anjeun kudu [[Special:Userlogin|asup log]] pikeun ngarobah awaskeuneun.',
+'addedwatch'           => 'Geus ditambahkeun ka awaskeuneun',
+'addedwatchtext'       => "Kaca \"\$1\" geus ditambahkeun ka [[Special:Watchlist|awaskeuneun]] anjeun.
+Jaga, parobahan na kaca ieu katut kaca obrolanana bakal dibéréndélkeun di dinya, sarta kacana bakal katémbong '''dikandelan''' dina kaca [[Special:Recentchanges|Nu anyar robah]] sangkan leuwih gampang ngawaskeunana.
+
+<p>Mun jaga anjeun moal deui ngawaskeun parobahan na kaca éta, klik tumbu \"Eureun ngawaskeun\" na lajursisi.",
+'removedwatch'         => 'Dikaluarkeun ti awaskeuneun',
+'removedwatchtext'     => 'Kaca "$1" geus dikaluarkeun ti awaskeuneun anjeun.',
+'watch'                => 'awaskeun',
+'watchthispage'        => 'Awaskeun kaca ieu',
+'unwatch'              => 'Eureun ngawaskeun',
+'unwatchthispage'      => 'Eureun ngawaskeun',
+'notanarticle'         => 'Sanés kaca eusi',
+'watchnochange'        => 'Sadaya awaseun anjeun taya nu diédit dina jangka wanci nu ditémbongkeun.',
+'watchdetails'         => 'Aya $1 kaca nu ku anjeun diawaskeun (teu kaasup kaca obrolan/sawala); anjeun bisa [[Husus:Watchlist/edit|némbongkeun sarta ngédit béréndélan lengkepna]].',
+'wlheader-enotif'      => '* Pangémbar surélék difungsikeun.',
+'wlheader-showupdated' => "* Kaca nu robah ti panungtungan anjeun sindang ditémbongkeun kalawan '''kandel'''",
+'watchmethod-recent'   => 'mariksa nu anyar robah na kaca nu diawaskeun',
+'watchmethod-list'     => 'mariksa nu anyar robah na kaca nu diawaskeun',
+'removechecked'        => 'Kaluarkeun nu dicontang tina awaskeuneun',
+'watchlistcontains'    => 'Anjeun ngawaskeun $1 kaca.',
+'watcheditlist'        => "Ieu daptar nurutkeun abjad kaca-kaca awaskeuneun anjeun. Contréng kotak kaca nu teu moal deui diawaskeun, teras klik tombol 'piceun nu dicontréng' na dadasar layar.",
+'removingchecked'      => 'Ngaluarkeun kaca nu dipilih tina awaskeuneun...',
+'couldntremove'        => "Teu bisa ngahapus '$1'...",
+'iteminvalidname'      => "Masalah dina '$1', ngaran teu bener...",
+'wlnote'               => 'Di handap ieu mangrupa $1 robahan ahir salila <b>$2</b> jam.',
+'wlshowlast'           => 'Témbongkeun $1 jam $2 poé $3 ahir',
+'wlsaved'              => 'Ieu mangrupa vérsi simpenan awaskeuneun anjeun.',
+'watchlist-show-bots'  => 'Témbongkeun éditan bot',
+'watchlist-hide-bots'  => 'Sumputkeun éditan bot',
+'watchlist-show-own'   => 'Témbongkeun éditan kuring',
+'watchlist-hide-own'   => 'Sumputkeun éditan kuring',
+'watchlist-show-minor' => 'Témbongkeun éditan leutik',
+'watchlist-hide-minor' => 'Sumputkeun éditan leutik',
+'wldone'               => 'Anggeus.',
+
+# Displayed when you click the "watch" button and it's in the process of watching
+'watching' => 'Ngawaskeun...',
+
+'enotif_mailer'      => 'Surat Émbaran {{SITENAME}}',
+'enotif_reset'       => 'Tandaan sadaya kaca nu geus dilongok',
+'enotif_newpagetext' => 'Kaca ieu anyar.',
+'changed'            => 'geus robah',
+'created'            => 'geus dijieun',
+'enotif_subject'     => 'Kaca $PAGETITLE {{SITENAME}} geus $CHANGEDORCREATED ku $PAGEEDITOR',
+'enotif_lastvisited' => 'Tempo $1 pikeun sadaya parobahan ti saprak anjeun ninggalkeun ieu kaca.',
+'enotif_body'        => 'Sadérék $WATCHINGUSERNAME,
+
+Kaca $PAGETITLE na {{SITENAME}} geus $CHANGEDORCREATED tanggal $PAGEEDITDATE ku $PAGEEDITOR. Mangga tingal {{SERVER}}{{localurl:$PAGETITLE_RAWURL}} pikeun vérsi kiwari.
+
+$NEWPAGE
+
+Ringkesan éditor: $PAGESUMMARY $PAGEMINOREDIT
+
+Kontak éditor:
+surat {{SERVER}}{{localurl:Husus:Emailuser|target=$PAGEEDITOR_RAWURL}}
+wiki {{SERVER}}{{localurl:Pamaké:$PAGEEDITOR_RAWURL}}
+
+Mun anjeun teu sindang deui ka ieu kaca, parobahan salajengna moal diémbarkeun. Anjeun bisa ogé nyetél deui umbul-umbul pikeun sadaya kaca nu aya na daptar awaseun anjeun.
+
+             Sistim émbaran {{SITENAME}} pikeun anjeun
+
+--
+Pikeun ngarobah setélan dabtar awaseun anjeun, sindang ka {{SERVER}}{{localurl:Husus:Watchlist|edit=yes}}
+
+Asupan jeung bantuan salajengna:
+{{fullurl:{{MediaWiki:helppage}}}}',
+
+# Delete/protect/revert
+'deletepage'           => 'Hapus kaca',
+'confirm'              => 'Konfirmasi',
+'excontent'            => "eusina nu heubeul: '$1'",
+'excontentauthor'      => "eusina: '$1' (nu dikontribusi ku '$2' wungkul)",
+'exbeforeblank'        => "eusi méméh dikosongkeun nyéta: '$1'",
+'exblank'              => 'kaca ieu kosong',
+'confirmdelete'        => 'Konfirmasi ngahapus',
+'deletesub'            => '(Ngahapus "$1")',
+'historywarning'       => 'Perhatosan: Kaca nu rék dihapus mibanda',
+'confirmdeletetext'    => 'Anjeun rék ngahapus hiji kaca atawa gambar katut jujutanana tina pangkalan data, mangga yakinkeun yén anjeun mémang niat midamel ieu, yén anjeun ngartos kana sagala konsékuénsina, sarta yén anjeun ngalakukeun ieu saluyu jeung [[{{MediaWiki:policy-url}}|kawijakan {{SITENAME}}]].',
+'actioncomplete'       => 'Peta geus réngsé',
+'deletedtext'          => '"$1" geus dihapus. Tempo $2 pikeun rékaman hapusan anyaran ieu.',
+'deletedarticle'       => 'ngahapus "$1"',
+'dellogpage'           => 'Log_hapusan',
+'dellogpagetext'       => 'Di handap ieu daptar hapusan nu ahir-ahir, sakabéh wanci dumasar wanci server (UTC).
+<ul>
+</ul>',
+'deletionlog'          => 'log hapusan',
+'reverted'             => 'Malikkeun ka révisi nu ti heula',
+'deletecomment'        => 'Alesan ngahapus',
+'imagereverted'        => 'Malikkeun deui ka vérsi nu saméméhna geus réngsé.',
+'rollback'             => 'Balikkeun éditan',
+'rollback_short'       => 'Balikkeun',
+'rollbacklink'         => 'balikkeun',
+'rollbackfailed'       => 'Gagal malikkeun',
+'cantrollback'         => 'Éditan teu bisa dibalikkeun; kontribusi panungtung ngarupakeun hiji-hijina panulis kaca ieu.',
+'alreadyrolled'        => 'Teu bisa mulangkeun édit ahir [[$1]] ku [[User:$2|$2]] ([[User talk:$2|Obrolan]]); geus aya nu ngédit atawa mulangkeun kacana.
+
+Édit ahir ku [[User:$3|$3]] ([[User talk:$3|Obrolan]]).',
+'editcomment'          => 'Komentar ngéditna: "<i>$1</i>".', # only shown if there is an edit comment
+'revertpage'           => 'Malikkeun éditan $2, diganti deui ka vérsi ahir ku $1',
+'sessionfailure'       => 'Sigana aya masalah jeung termin log anjeun; peta ieu geus dibolaykeun salaku pépéling pikeun ngalawan ayana pangbajak. Mangga pencét "back" jeung muat ulang ti kaca asal anjeun, lajeng cobaan deui.',
+'protectlogpage'       => 'Log_koncian',
+'protectlogtext'       => 'Di handap ieu mangrupa daptar koncian kaca. Tempo [[{{ns:project}}:Kaca nu dikonci|kaca nu dikonci]] pikeun iber leuwih lengkep.',
+'protectedarticle'     => 'ngonci $1',
+'unprotectedarticle'   => 'muka konci $1',
+'protectsub'           => '(Ngonci "$1")',
+'confirmprotecttext'   => 'Naha anjeun leres hoyong ngonci kaca ieu?',
+'confirmprotect'       => 'Konfirmasi ngonci',
+'protectmoveonly'      => 'Konci tina dipindahkeun wungkul',
+'protectcomment'       => 'Alesan ngonci',
+'unprotectsub'         => '(Muka konci "$1")',
+'confirmunprotecttext' => 'Naha anjeun leres hoyong muka konci kaca ieu?',
+'confirmunprotect'     => 'Konfirmasi muka konci',
+'unprotectcomment'     => 'Alesan muka konci',
+'protect-level-sysop'  => 'Ngan bisa ku kuncén',
+
+# Restrictions (nouns)
+'restriction-edit' => 'Édit',
+'restriction-move' => 'Pindahkeun',
+
+# Undelete
+'undelete'               => 'Simpen deui kaca nu dihapus',
+'undeletepage'           => 'Témbongkeun atawa simpen deui kaca nu geus dihapus',
+'viewdeletedpage'        => 'Témbongkeun kaca nu dihapus',
+'undeletepagetext'       => 'Kaca di handap ieu geus dihapus tapi masih kénéh aya na arsip sarta bisa disimpen deui. Arsip aya kalana dibersihan.',
+'undeleterevisions'      => '$1 révisi diarsipkeun',
+'undeletehistory'        => 'Mun anjeun nyimpen deui kacana, sadaya révisi bakal disimpen deui dina jujutan. Mun aya kaca anyar nu ngaranna sarua dijieun deui satutasna dihapus, révisi nu disimpen tadi bakal némbongan salaku jujutan nu ti heula, sarta révisi kiwari kaca nu hirup moal otomatis kaganti.',
+'undeletehistorynoadmin' => 'Artikel ieu geus dihapus. Alesanana bisa dibaca dina katrangan di handap, katut saha waé nu geus ngédit ieu artikel saméméh dihapus. Téks aktual révisi nu geus dihapus ieu ngan bisa dibuka ku [[{{ns:project}}:Kuncén|kuncén]].',
+'undeletebtn'            => 'Simpen deui!',
+'undeletedarticle'       => 'disimpen "$1"',
+'undeletedrevisions'     => '$1 révisi disimpen deui',
+
+# Namespace form on various pages
+'namespace' => 'Ngaranspasi:',
+'invert'    => 'Balikkeun pilihan',
+
+# Contributions
+'contributions' => 'Tulisan pamaké',
+'mycontris'     => 'Tulisan kuring',
+'contribsub2'    => 'Pikeun $1 ($2)',
+'nocontribs'    => 'Taya robahan nu kapanggih cocog jeung patokan ieu.',
+'ucnote'        => 'Di handap ieu mangrupa parobahan ahir <b>$1</b> pamaké salila <b>$2</b> poé ahir.',
+'uclinks'       => 'Témbongkeun $1 parobahan ahir; témbongkeun $2 poé ahir.',
+'uctop'         => ' (tempo)',
+
+'sp-contributions-newest'   => 'Panganyarna',
+'sp-contributions-oldest'   => 'Pangheubeulna',
+'sp-contributions-newer'    => 'Leuwih anyar $1',
+'sp-contributions-older'    => 'Leuwih heubeul $1',
+'sp-contributions-username' => 'Alamat IP atawa landihan:',
+
+'sp-newimages-showfrom' => 'Témbongkeun gambar anyar ti $1',
+
+# What links here
+'whatlinkshere'      => 'Nu numbu ka dieu',
+'notargettitle'      => 'Taya tujuleun',
+'notargettext'       => 'Anjeun can nangtukeun hiji targét atawa pamaké pikeun migawé sangkan fungsi ieu jalan.',
+'linklistsub'        => '(Daptar tumbu)',
+'linkshere'          => "Kaca di handap ieu numbu ka '''[[:$1]]''':",
+'nolinkshere'        => "Euweuh kaca nu numbu ka '''[[:$1]]'''.",
+'nolinkshere-ns'     => "Euweuh kaca nu numbu ka '''[[:$1]]''' dina namespace nu dipilih.",
+'isredirect'         => 'Kaca alihan',
+'whatlinkshere-prev' => '$1 saméméhna',
+'whatlinkshere-next' => '$1 salajengna',
+
+# Block/unblock
+'blockip'                     => 'Peungpeuk pamaké',
+'blockiptext'                 => 'Paké formulir di handap pikeun meungpeuk aksés nulis ti alamat IP atawa ngaran pamaké husus. Ieu sakuduna ditujukeun pikeun nyegah vandalisme, sarta saluyu jeung [[{{MediaWiki:policy-url}}|kawijakan]]. Eusi alesan nu jéntré (misal, ngarujuk kaca tinangtu nu geus diruksak).',
+'ipaddress'                   => 'Alamat IP/ngaran pamaké',
+'ipadressorusername'          => 'Alamat IP atawa ngaran pamaké',
+'ipbexpiry'                   => 'Kadaluarsa',
+'ipbreason'                   => 'Alesan',
+'ipbreasonotherlist'          => 'Alesan séjén',
+'ipbsubmit'                   => 'Peungpeuk pamaké ieu',
+'ipbother'                    => 'Waktu séjén',
+'ipboptions'                  => '2 jam:2 hours,sapoé:1 day,3 poé:3 days,saminggu:1 week,2 minggu:2 weeks,sabulan:1 month,3 bulan:3 months,6 bulan:6 months,sataun:1 year,tanpa wates:infinite',
+'ipbotheroption'              => 'séjénna',
+'badipaddress'                => 'Alamat IP teu sah',
+'blockipsuccesssub'           => 'Meungpeuk geus hasil',
+'blockipsuccesstext'          => '"$1" dipeungpeuk.
+<br />Tempo [[Special:Ipblocklist|daptar peungpeuk IP]] pikeun nempoan deui peungpeuk.',
+'unblockip'                   => 'Buka peungpeuk pamaké',
+'unblockiptext'               => 'Paké formulir di handap pikeun mulangkeun aksés nulis ka alamat IP atawa ngaran pamaké nu saméméhna dipeungpeuk.',
+'ipusubmit'                   => 'Buka peungpeuk pikeun pamaké ieu',
+'ipblocklist'                 => 'Daptar alamat IP jeung ngaran pamaké nu dipeungpeuk',
+'blocklistline'               => '$1, $2 dipeungpeuk $3 (kadaluwarsa $4)',
+'blocklink'                   => 'peungpeuk',
+'unblocklink'                 => 'buka peungpeuk',
+'contribslink'                => 'kontribusi',
+'autoblocker'                 => 'Otomatis dipeungpeuk sabab alamat IP anjeun sarua jeung "$1". Alesan "$2".',
+'blocklogpage'                => 'Log_peungpeuk',
+'blocklogentry'               => 'meungpeuk "$1" nepi ka $2 $3',
+'blocklogtext'                => 'Ieu mangrupa log peta meungpeuk jeung muka peungpeuk pamaké, teu kaasup alamat IP nu dipeungpeukna otomatis. Tempo [[Special:Ipblocklist|daptar peungpeuk IP]] pikeun daptar cegahan jeung peungpeuk.',
+'unblocklogentry'             => 'peungpeuk dibuka "$1"',
+'block-log-flags-anononly'    => 'pamaké anonim wungkul',
+'block-log-flags-nocreate'    => 'Nyieun rekening ditumpurkeun',
+'range_block_disabled'        => 'Pangabisa kuncén pikeun nyieun sarupaning peungpeuk geus ditumpurkeun.',
+'ipb_expiry_invalid'          => 'Wanci daluwarsa teu bener.',
+'ip_range_invalid'            => 'Angka IP teu bener.',
+'proxyblocker'                => 'Pameungpeuk proxy',
+'proxyblockreason'            => "Alamat IP anjeun dipeungpeuk sabab mangrupa proxy muka. Mangga tepungan ''Internet service provider'' atanapi ''tech support'' anjeun, béjakeun masalah serius ieu.",
+'proxyblocksuccess'           => 'Réngsé.',
+'sorbsreason'                 => "Alamat IP anjeun kadaptar salaku ''open proxy'' dina [http://www.sorbs.net SORBS] DNSBL.",
+'sorbs_create_account_reason' => "Alamat IP anjeun kadaptar salaku ''open proxy'' dina [http://www.sorbs.net SORBS] DNSBL. Anjeun teu bisa nyieun rekening",
+
+# Developer tools
+'lockdb'              => 'Konci pangkalan data',
+'unlockdb'            => 'Buka konci pangkalan data',
+'lockdbtext'          => 'Ngonci gudang data bakal numpurkeun kabisa sakabéh pamaké pikeun ngédit kaca, ngarobah préferénsina, ngédit awaskeuneunana, sarta hal séjén nu merlukeun parobahan na gudang data. Konfirmasikeun yén ieu nu dimaksud ku anjeun, sarta anjeun bakal muka konci gudang data nalika pangropéa anjeun geus réngsé.',
+'unlockdbtext'        => 'Muka konci pangkalan data bakal mulangkeun kabisa sakabéh pamaké pikeun ngédit kaca, ngarobah préferénsina, ngédit awaskeuneunana, sarta hal-hal séjén nu merlukeun parobahan na pangkalan data. Pastikeun yén ieu ngarupakeun hal nu diniatkeun ku anjeun.',
+'lockconfirm'         => 'Leres pisan, simkuring hoyong ngonci pangkalan data.',
+'unlockconfirm'       => 'Muhun, kuring hayang muka konci pangkalan data.',
+'lockbtn'             => 'Konci pangkalan data',
+'unlockbtn'           => 'Buka konci pangkalan data',
+'locknoconfirm'       => 'Anjeun teu nyontréngan kotak konfirmasi.',
+'lockdbsuccesssub'    => 'pangkalan data geus hasil dikonci',
+'unlockdbsuccesssub'  => 'Konci pangkalan data geus dibuka',
+'lockdbsuccesstext'   => 'pangkalan data dikonci.
+<br />Ulah poho muka konci mun geus bérés diropéa.',
+'unlockdbsuccesstext' => 'pangkalan data geus teu dikonci.',
+
+# Move page
+'movepage'               => 'Pindahkeun kaca',
+'movepagetext'           => "Migunakeun formulir di handap bakal ngaganti ngaran hiji kaca, mindahkeun sadaya jujutanana ka ngaran anyar.
+Judul nu heubeul bakal jadi kaca alihan ka judul nu anyar.
+Tumbu ka judul kaca nu heubeul mola robah; pastikeun yén anjeun [[Special:Maintenance|marios]] alihan ganda atawa alihan nu buntu.
+Anjeun tanggel waler pikeun mastikeun yén tumbu-tumbu tetep nujul ka tempat nu sakuduna dituju.
+
+Catet yén kacana '''moal''' pindah mun geus aya kaca na judul nu anyar, iwal mun kosong atawa mangrupa alihan sarta teu mibanda jujutan éditan heubeul. Ieu ngandung harti yén anjeun bisa ngaganti ngaran hiji kaca balik deui ka nu cikénéh diganti ngaranna mun anjeun nyieun kasalahan, sarta anjeun teu bisa  nimpah kaca nu geus aya.
+
+<b>AWAS!</b> This can be a drastic and unexpected change for a popular page;
+please be sure you understand the consequences of this before
+proceeding.",
+'movepagetalktext'       => "Kaca obrolan nu patali, mun aya, bakal sacara otomatis kapindahkeun, '''iwal:'''
+*Anjeun mindahkeun kacana meuntas spasingaran nu béda,
+*Kaca obrolan dina ngaran nu anyar geus aya eusian, atawa
+*Anjeun teu nyontréngan kotak di handap.
+
+Dina kajadian kitu, mun hayang (jeung perlu) anjeun kudu mindahkeun atawa ngagabungkeun kacana sacara manual.",
+'movearticle'            => 'Pindahkeun kaca',
+'movenologin'            => 'Can asup log',
+'movenologintext'        => 'Anjeun kudu jadi pamaké nu kadaptar tur [[Special:Userlogin|asup log]] pikeun mindahkeun kaca.',
+'newtitle'               => 'Ka judul anyar',
+'movepagebtn'            => 'Pindahkeun kaca',
+'pagemovedsub'           => 'Mindahkeun geus hasil!',
+'pagemovedtext'          => 'Kaca "[[$1]]" dipindahkeun ka "[[$2]]".',
+'articleexists'          => 'Kaca nu ngaranna kitu geus aya, atawa ngaran nu dipilih ku anjeun teu sah. Mangga pilih ngaran séjén.',
+'talkexists'             => 'Kacana geus hasil dipindahkeun, ngan kaca obrolanana teu bisa dipindahkeun sabab geus aya nu anyar na judul anyar. Mangga gabungkeun sacara manual.',
+'movedto'                => 'dipindahkeun ka',
+'movetalk'               => 'Mun bisa, kaca "obrolan" ogé pindahkeun.',
+'talkpagemoved'          => 'Kaca obrolanana geus ogé dipindahkeun.',
+'talkpagenotmoved'       => 'Kaca obrolan nu patali <strong>teu</strong> dipindahkeun.',
+'1movedto2'              => 'mindahkeun [[$1]] ka [[$2]]',
+'1movedto2_redir'        => '[[$1]] dipindahkeun ka [[$2]]',
+'movelogpage'            => 'Log mindahkeun',
+'movelogpagetext'        => 'Di handap ieu béréndélan kaca nu dipindahkeun.',
+'movereason'             => 'Alesan',
+'delete_and_move'        => 'Hapus jeung pindahkeun',
+'delete_and_move_text'   => '==Merlukeun hapusan==
+
+Artikel nu dituju "[[$1]]" geus aya. Badé dihapus baé sangkan bisa mindahkeun?',
+'delete_and_move_reason' => 'Hapus sangkan bisa mindahkeun',
+'selfmove'               => 'Judul sumber jeung tujuanana sarua, lain gé mindahkeun atuh!',
+'immobile_namespace'     => 'Judul nu dituju kaasup kana tipe husus, teu bisa mindahkeun kaca ka ngaranspasi kitu.',
+
+# Export
+'export'        => 'Ékspor kaca',
+'exporttext'    => 'Anjeun bisa ngékspor téks sarta jujutan éditan ti kaca tinangtu atawa ti sababaraha kaca nu ngagunduk na sababaraha XML; ieu salajengna tiasa diimpor ka wiki séjén nu ngajalankeun software MediaWiki, ditransformasikeun, atawa ukur disimpen pikeun kaperluan anjeun pribadi.',
+'exportcuronly' => 'Asupkeun ukur révisi kiwari, teu sakabéh jujutan',
+
+# Namespace 8 related
+'allmessages'               => 'Sadaya pesen sistim',
+'allmessagesname'           => 'Ngaran',
+'allmessagesdefault'        => 'Téks ti dituna',
+'allmessagescurrent'        => 'Téks kiwari',
+'allmessagestext'           => 'Ieu mangrupa daptar talatah sistim nu aya na spasi ngaran MediaWiki:.',
+'allmessagesnotsupportedUI' => 'Basa antarbeungeut anjeun kiwari <b>$1</b> teu dirojong ku Special:AllMessages na loka ieu.',
+'allmessagesnotsupportedDB' => 'Special:AllMessages teu dirojong sabab wgUseDatabaseMessages pareum.',
+'allmessagesfilter'         => 'Saringan ngaran talatah:',
+'allmessagesmodified'       => 'Témbongkeun ukur nu robah',
+
+# Thumbnails
+'thumbnail-more' => 'Gedéan',
+'missingimage'   => '<b>Gambar leungit</b><br /><i>$1</i>',
+'filemissing'    => 'Koropak leungit',
+
+# Special:Import
+'import'                => 'Impor kaca',
+'importinterwiki'       => 'Impor transwiki',
+'importtext'            => 'Mangga ékspor koropakna ti sumber nu dipaké ku wiki migunakeun fungsi Special:Export, simpen na piringan anjeun, teras muatkeun di dieu.',
+'importfailed'          => 'Ngimpor gagal: $1',
+'importnotext'          => 'Kosong atawa teu aya téks',
+'importsuccess'         => 'Ngimpor geus hasil!',
+'importhistoryconflict' => 'Aya révisi jujutan nu béntrok (may have imported this page before)',
+
+# Tooltip help for the actions
+'tooltip-pt-userpage'             => 'Kaca pamaké kuring',
+'tooltip-pt-anonuserpage'         => 'Kaca pamaké pikeun IP nu ku anjeun keur diédit',
+'tooltip-pt-mytalk'               => 'Kaca obrolan kuring',
+'tooltip-pt-anontalk'             => 'Sawala ngeunaan éditan ti alamat IP ieu',
+'tooltip-pt-preferences'          => 'Préferénsi kuring',
+'tooltip-pt-watchlist'            => 'Daptar kaca nu diawaskeun ku anjeun parobahanana.',
+'tooltip-pt-mycontris'            => 'Daptar kontribusi kuring',
+'tooltip-pt-login'                => 'Anjeun leuwih hadé asup log, sanajan teu wajib.',
+'tooltip-pt-anonlogin'            => 'Anjeun leuwih hadé asup log, sanajan teu wajib.',
+'tooltip-pt-logout'               => 'Kaluar log',
+'tooltip-ca-talk'                 => 'Sawala ngeunaan eusi kaca',
+'tooltip-ca-edit'                 => 'Anjeun bisa ngédit kaca ieu. Mangga pigunakeun tombol sawangan saméméh nyimpen.',
+'tooltip-ca-addsection'           => 'Tambihan koméntar kana sawala ieu.',
+'tooltip-ca-viewsource'           => 'Kaca ieu dikonci, tapi anjeun masih bisa muka sumberna.',
+'tooltip-ca-history'              => 'Vérsi heubeul kaca ieu.',
+'tooltip-ca-protect'              => 'Konci kaca ieu',
+'tooltip-ca-delete'               => 'Hapus kaca ieu',
+'tooltip-ca-undelete'             => 'Simpen deui éditan kaca ieu nu geus dijieun saméméh dihapus',
+'tooltip-ca-move'                 => 'Pindahkeun kaca ieu',
+'tooltip-ca-watch'                => 'Tambahkeun kaca ieu kana awaskeuneun kuring',
+'tooltip-ca-unwatch'              => 'Kaluarkeun kaca ieu tina awaskeuneun kuring',
+'tooltip-search'                  => 'Sungsi wiki ieu [alt-f]',
+'tooltip-p-logo'                  => 'Tepas',
+'tooltip-n-mainpage'              => 'Sindang ka Tepas',
+'tooltip-n-portal'                => 'Ngeunaan proyékna, naon nu bisa dipigawé, di mana néangan naon',
+'tooltip-n-currentevents'         => 'Panggihan iber ngeunaan naon baé nu keur lumangsung',
+'tooltip-n-recentchanges'         => 'Daptar nu anyar robah na wiki.',
+'tooltip-n-randompage'            => 'Muatkeun kaca naon baé',
+'tooltip-n-help'                  => 'Tempat pikeun néangan.',
+'tooltip-t-whatlinkshere'         => 'Daptar kaca-kaca wiki nu numbu ka dieu',
+'tooltip-t-recentchangeslinked'   => 'Nu anyar robah na kaca-kaca nu numbu ka dieu',
+'tooltip-feed-rss'                => 'Asupan RSS pikeun kaca ieu',
+'tooltip-feed-atom'               => 'Asupan atom pikeun kaca ieu',
+'tooltip-t-contributions'         => 'Témbongkeun béréndélan kontribusi pamaké ieu',
+'tooltip-t-emailuser'             => 'Kirim surélék ka pamaké ieu',
+'tooltip-t-upload'                => 'Muatkeun koropak gambar atawa média',
+'tooltip-t-specialpages'          => 'Daptar sadaya kaca husus',
+'tooltip-ca-nstab-main'           => 'Témbongkeun eusi kaca',
+'tooltip-ca-nstab-user'           => 'Témbongkeun kaca pamaké',
+'tooltip-ca-nstab-media'          => 'Témbongkeun kaca média',
+'tooltip-ca-nstab-special'        => 'Ieu kaca husus, anjeun teu bisa ngédit ku sorangan.',
+'tooltip-ca-nstab-project'        => 'Témbongkeun kaca proyék',
+'tooltip-ca-nstab-image'          => 'Témbongkeun kaca gambar',
+'tooltip-ca-nstab-mediawiki'      => 'Témbongkeun pesen sistim',
+'tooltip-ca-nstab-template'       => 'Témbongkeun citakan',
+'tooltip-ca-nstab-help'           => 'Témbongkeun kaca pitulung',
+'tooltip-ca-nstab-category'       => 'Témbongkeun kaca kategori',
+'tooltip-minoredit'               => 'Tandaan ieu salaku éditan minor [alt-i]',
+'tooltip-save'                    => 'Simpen parobahan anjeun [alt-s]',
+'tooltip-preview'                 => 'Sawang heula robahan anjeun, pami tos leres mangga simpen! [alt-p]',
+'tooltip-diff'                    => 'Témbongkeun parobahan mana nu geus dijieun. [alt-d]',
+'tooltip-compareselectedversions' => 'Tempo béda antara dua vérsi kaca ieu nu dipilih [alt-v].',
+'tooltip-watch'                   => 'Tambahkeun kaca ieu kana awaskeuneun kuring [alt-w]',
+
+# Stylesheets
+'common.css'   => "/* CSS nu di angé ku kabeh ''skin'' */",
+'monobook.css' => "/* édit koropak ieu pikeun nyaluyukeun kulit ''monobook'' pikeun sakabéh situs */",
+
+# Metadata
+'notacceptable' => "''Server'' wiki teu bisa nyadiakeun data dina format nu bisa dibaca ku klien anjeun.",
+
+# Attribution
+'anonymous'        => 'Pamaké anonim {{SITENAME}}',
+'siteuser'         => 'Pamaké $1 {{SITENAME}}',
+'lastmodifiedatby' => 'Kaca ieu panungtungan dirobah $2, $1 ku $3.', # $1 date, $2 time, $3 user
+'and'              => 'jeung',
+'othercontribs'    => 'Dumasar karya $1.',
+'others'           => 'Séjénna',
+'siteusers'        => 'Pamaké $1 {{SITENAME}}',
+'creditspage'      => 'Pangajén kaca',
+'nocredits'        => 'Teu aya émbaran pangajén pikeun kaca ieu.',
+
+# Spam protection
+'spamprotectiontitle'    => 'Saringan spam',
+'spamprotectiontext'     => 'Kaca nu rék disimpen dipeungpeuk ku saringan spam. Sigana mah ieu téh alatan tumbu ka loka luar.',
+'subcategorycount'       => 'Aya $1 subkategori na kategori ieu.',
+'categoryarticlecount'   => 'Aya $1 artikel na kategori ieu.',
+'listingcontinuesabbrev' => ' (samb.)',
+
+# Info page
+'infosubtitle'   => 'Iber pikeun kaca',
+'numedits'       => 'Jumlah éditan (artikel): $1',
+'numtalkedits'   => 'Jumlah éditan (kaca sawala): $1',
+'numwatchers'    => 'Jumlah nu ngawaskeun: $1',
+'numauthors'     => 'Jumlah pangarang nu béda (artikel): $1',
+'numtalkauthors' => 'Jumlah pangarang nu béda (kaca sawala): $1',
+
+# Math options
+'mw_math_simple' => 'Mun basajan HTML, mun henteu PNG',
+'mw_math_html'   => 'Mun bisa HTML, mun henteu PNG',
+'mw_math_source' => 'Antep salaku TeX (pikeun panyungsi tulisan)',
+'mw_math_modern' => 'Dianjurkeun pikeun panyungsi modérn',
+'mw_math_mathml' => 'Mun bisa MathML (uji coba)',
+
+# Patrolling
+'markaspatrolleddiff'   => 'Tandaan salaku geus diriksa',
+'markaspatrolledtext'   => 'Tandaan artikel ieu salaku geus diriksa',
+'markedaspatrolled'     => 'Tandaan salaku geus diriksa',
+'markedaspatrolledtext' => 'Révisi nu dipilih geus ditandaan salaku geus diriksa.',
+'rcpatroldisabled'      => 'Ronda Nu Anyar Robah ditumpurkeun',
+'rcpatroldisabledtext'  => 'Fitur Ronda Nu Anyar Robah kiwari ditumpurkeun.',
+
+# Image deletion
+'deletedrevision' => 'Révisi heubeul nu dihapus $1.',
+
+# Browsing diffs
+'previousdiff' => '← Ka béda saméméhna',
+'nextdiff'     => 'Ka béda salajengna, jung →',
+
+# Media information
+'imagemaxsize' => 'Watesan gambar na kaca dadaran gambar nepi ka:',
+
+'newimages' => 'Galeri gambar anyar',
+'noimages'  => 'Taya nanaon.',
+
+'passwordtooshort' => 'Sandi anjeun pondok teuing, sahanteuna kudu $1 karakter.',
+
+# Metadata
+'metadata-help' => 'Ieu koropak ngandung émbaran tambahan, nu sigana asalna tina kaméra digital atawa paminday nu dipaké pikeun ngadigitalkeunana. Mun ieu koropak geus dirobah tina bentuk aslina, datana bisa jadi teu bener.',
+
+# EXIF tags
+'exif-compression'            => 'Skéma komprési',
+'exif-xresolution'            => 'Résolusi horizontal',
+'exif-datetime'               => 'Wanci jeung titimangsa parobahan koropak',
+'exif-artist'                 => 'Pangarang',
+'exif-compressedbitsperpixel' => 'Mode komprési gambar',
+'exif-usercomment'            => 'Koméntar pamaké',
+'exif-datetimeoriginal'       => 'Titimangsa jeung wanci dijieunna data',
+'exif-datetimedigitized'      => 'Titimangsa jeung wanci digitisasi',
+'exif-contrast'               => 'Kontras',
+'exif-gpstimestamp'           => 'Wanci GPS (jam atomik)',
+
+'exif-componentsconfiguration-0' => 'euweuh',
+
+'exif-customrendered-0' => 'Prosés normal',
+'exif-customrendered-1' => 'Prosés biasa',
+
+'exif-contrast-1' => 'Leuleus',
+'exif-contrast-2' => 'Heuras',
+
+# Pseudotags used for GPSSpeedRef and GPSDestDistanceRef
+'exif-gpsspeed-k' => 'Kilométer per jam',
+'exif-gpsspeed-m' => 'Mil per jam',
+'exif-gpsspeed-n' => 'Knot',
+
+# External editor support
+'edit-externally'      => 'Édit koropak ieu migunakeun aplikasi éksternal',
+'edit-externally-help' => 'Tempo [http://meta.wikimedia.org/wiki/Help:External_editors setup instructions] pikeun émbaran leuwih jéntré.',
+
+# 'all' in various places, this might be different for inflected languages
+'recentchangesall' => 'sadaya',
+'imagelistall'     => 'kabéh',
+'watchlistall1'    => 'sadaya',
+'watchlistall2'    => 'sadaya',
+'namespacesall'    => 'kabéh',
+
+# E-mail address confirmation
+'confirmemail'            => 'Konfirmasi alamat surélék',
+'confirmemail_text'       => 'Wiki ieu merlukeun anjeun sangkan méré konfirmasi alamat surélék saméméh migunakeun fitur surélék. Aktifkeun tombol di handap pikeun ngirimkeun surat konfirmasi ka alamat anjeun. Suratna ngandung tumbu nu ngandung sandina; muatkeun tumbuna kana panyungsi anjeun pikeun ngonfirmasi yén alamat surélék anjeun sah.',
+'confirmemail_send'       => 'Kirimkeun surat konfirmasi sandi',
+'confirmemail_sent'       => 'Surélék konfirmasi geus dikirim.',
+'confirmemail_sendfailed' => 'Surat konfirmasi teu kakirim. Pariksa alamatna, bisi salah. Informasi: $1',
+'confirmemail_invalid'    => 'Sandi konfirmasi salah, meureun alatan sandina geus kadaluwarsa.',
+'confirmemail_success'    => 'Alamat surélék anjeun geus dikonfirmasi, ayeuna anjeun geus bisa migunakeun wikina.',
+'confirmemail_loggedin'   => 'Alamat surélék anjeun geus dikonfirmasi.',
+'confirmemail_error'      => 'Aya nu salah nalika nyimpen konfirmasi anjeun.',
+'confirmemail_subject'    => 'Konfirmasi alamat surélék {{SITENAME}}',
+'confirmemail_body'       => 'Aya, sigana mah anjeun ti alamat IP $1, geus ngadaptarkeun rekening "$2" maké alamat surélék ieu na {{SITENAME}}.
+
+Pikeun mastikeun yén rekening ieu mémang kagungan sarta ngakifkeun fitur surélék di {{SITENAME}}, buka tumbu di handap ieu kana panyungsi/\'\'browser\'\' anjeun:
+
+$3
+
+Mun ieu *lain* anjeun, tumbuna ulah dituturkeun. Sandi konfirmasi ieu bakal kadaluwarsa $4.',
+
+# Inputbox extension, may be useful in other contexts as well
+'createarticle' => 'Jieun artikel',
+
+# Trackbacks
+'trackbackremove' => ' ([$1 Hapus])',
+
+# Delete conflict
+'deletedwhileediting' => 'Awas: kaca ieu geus dihapus nalika anjeun ngédit!',
+'confirmrecreate'     => "Pamaké [[User:$1|$1]] ([[User talk:$1|ngobrol]]) geus ngahapus artikel ieu nalika anjeun ngédit kalawan alesan:
+: ''$2''
+mangga pastikeun yén anjeun rék nyieun deui artikel ieu.",
+
+# HTML dump
+'redirectingto' => 'Mindahkeun ka [[$1]]...',
+
+# action=purge
+'confirm_purge'        => 'Hapus sindangan kaca ieu?
+
+$1',
+'confirm_purge_button' => 'Heug',
+
+'youhavenewmessagesmulti' => 'Anjeun boga talatah anyar di $1',
+
+'articletitles' => "Artikel nu dimimitian ku ''$1''",
+
+# Table pager
+'table_pager_empty' => 'Nyamos',
+
+# Auto-summaries
+'autosumm-blank'   => 'Ngahapus eusi ti kaca',
+'autosumm-replace' => "Ngaganti kaca ku '$1'",
+'autoredircomment' => 'Mindahkeun ka [[$1]]', # This should be changed to the new naming convention, but existed beforehand
+'autosumm-new'     => 'Kaca anyar: $1',
+
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesSv.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesSv.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesSv.php	(revision 1280)
@@ -0,0 +1,2041 @@
+<?php
+/**
+ * Swedish (Svenska)
+ *
+ * @addtogroup Language
+ */
+
+$skinNames = array(
+	'standard' => "Standard",
+	'nostalgia' => "Nostalgi",
+	'cologneblue' => "Cologne Blå",
+);
+$namespaceNames = array(
+	NS_MEDIA            => 'Media',
+	NS_SPECIAL          => 'Special',
+	NS_MAIN	            => '',
+	NS_TALK	            => 'Diskussion',
+	NS_USER             => 'Användare',
+	NS_USER_TALK        => 'Användardiskussion',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK     => '$1diskussion',
+	NS_IMAGE            => 'Bild',
+	NS_IMAGE_TALK       => 'Bilddiskussion',
+	NS_MEDIAWIKI        => 'MediaWiki',
+	NS_MEDIAWIKI_TALK   => 'MediaWiki-diskussion',
+	NS_TEMPLATE         => 'Mall',
+	NS_TEMPLATE_TALK    => 'Malldiskussion',
+	NS_HELP             => 'Hjälp',
+	NS_HELP_TALK        => 'Hjälpdiskussion',
+	NS_CATEGORY         => 'Kategori',
+	NS_CATEGORY_TALK    => 'Kategoridiskussion'
+);
+
+$namespaceAliases = array(
+	// For compatibility with 1.7 and older
+	'MediaWiki_diskussion' => NS_MEDIAWIKI_TALK,
+	'Hjälp_diskussion'     => NS_HELP_TALK
+);
+
+$linkTrail = '/^([a-zåäöéÅÄÖÉ]+)(.*)$/sDu';
+$separatorTransformTable =  array(
+	',' => "\xc2\xa0", // @bug 2749
+	'.' => ','
+);
+
+$dateFormats = array(
+	'mdy time' => 'H.i',
+	'mdy date' => 'F j, Y',
+	'mdy both' => 'F j, Y "kl." H.i',
+
+	'dmy time' => 'H.i',
+	'dmy date' => 'j F Y',
+	'dmy both' => 'j F Y "kl." H.i',
+
+	'ymd time' => 'H.i',
+	'ymd date' => 'Y F j',
+	'ymd both' => 'Y F j "kl." H.i',
+);
+
+$messages = array(
+# User preference toggles
+'tog-underline'               => 'Stryk under länkar',
+'tog-highlightbroken'         => 'Formatera trasiga länkar <a href="" class="new">så här</a> (alternativt: <a href="" class="internal">så här</a>).',
+'tog-justify'                 => 'Justera indrag',
+'tog-hideminor'               => 'Visa inte mindre redigeringar i Senaste ändringar',
+'tog-extendwatchlist'         => 'Utöka övervakningslistan till att visa alla ändringar',
+'tog-usenewrc'                => 'Avancerad Senaste ändringar (Javascript)',
+'tog-numberheadings'          => 'Numrerade rubriker',
+'tog-showtoolbar'             => 'Visa verktygsrad',
+'tog-editondblclick'          => 'Redigera sidor med dubbelklick (Javascript)',
+'tog-editsection'             => 'Visa [redigera]-länkar för att redigera sektioner',
+'tog-editsectiononrightclick' => 'Högerklick på rubriker redigerar sektioner',
+'tog-showtoc'                 => 'Visa innehållsförteckning (vid minst fyra underrubriker)',
+'tog-rememberpassword'        => 'Kom ihåg lösenordet till nästa besök',
+'tog-editwidth'               => 'Full bredd på redigeringsrutan',
+'tog-watchcreations'          => 'Lägg automatiskt till sidor du skapar till din övervakningslista.',
+'tog-watchdefault'            => 'Övervaka nya och ändrade artiklar',
+'tog-watchmoves'              => 'Lägg till sidor du flyttar till din övervakningslista',
+'tog-watchdeletion'           => 'Lägg till sidor du raderar till din övervakningslista',
+'tog-minordefault'            => 'Markera automatiskt ändringar som mindre',
+'tog-previewontop'            => 'Visa förhandsgranskning före texten, istället för efter',
+'tog-previewonfirst'          => 'Visa förhandsgranskning vid första redigeringen',
+'tog-nocache'                 => 'Stäng av cachning av sidor',
+'tog-enotifwatchlistpages'    => 'Skicka e-post till mig när någon övervakad sida ändras',
+'tog-enotifusertalkpages'     => 'Skicka e-post till mig när något händer på min diskussionssida',
+'tog-enotifminoredits'        => 'Skicka mig e-post även för små redigeringar',
+'tog-enotifrevealaddr'        => 'Visa min e-postadress i e-post om uppdateringar',
+'tog-shownumberswatching'     => 'Visa antalet betraktande användare',
+'tog-fancysig'                => 'Rå signatur, utan automatisk länk',
+'tog-externaleditor'          => 'Använd extern editor automatiskt',
+'tog-externaldiff'            => 'Använd externt diff-verktyg',
+'tog-showjumplinks'           => 'Aktivera "hoppa till"-tillgänglighetslänkar',
+'tog-uselivepreview'          => 'Använd direktuppdaterad förhandsgranskning (Javascript, på försöksstadiet)',
+'tog-forceeditsummary'        => 'Påminn mig om jag inte fyller i en redigeringskommentar',
+'tog-watchlisthideown'        => 'Visa inte mina redigeringar på övervakningslistan',
+'tog-watchlisthidebots'       => 'Visa inte robotredigeringar på övervakningslistan',
+'tog-watchlisthideminor'      => 'Visa inte mindre ändringar på övervakningslistan',
+'tog-nolangconversion'        => 'Konvertera inte mellan språkvarianter',
+'tog-ccmeonemails'            => 'Skicka mig kopior av epost jag skickar till andra användare',
+'tog-diffonly'                => 'Visa inte sidinnehåll under diffar',
+
+'underline-always'  => 'Alltid',
+'underline-never'   => 'Aldrig',
+'underline-default' => 'Webbläsarens standardinställning',
+
+'skinpreview' => '(Förhandsvisning)',
+
+# Dates
+'sunday'        => 'söndag',
+'monday'        => 'måndag',
+'tuesday'       => 'tisdag',
+'wednesday'     => 'onsdag',
+'thursday'      => 'torsdag',
+'friday'        => 'fredag',
+'saturday'      => 'lördag',
+'sun'           => 'sön',
+'mon'           => 'mån',
+'tue'           => 'tis',
+'wed'           => 'ons',
+'thu'           => 'tor',
+'fri'           => 'fre',
+'sat'           => 'lör',
+'january'       => 'januari',
+'february'      => 'februari',
+'march'         => 'mars',
+'april'         => 'april',
+'may_long'      => 'maj',
+'june'          => 'juni',
+'july'          => 'juli',
+'august'        => 'augusti',
+'september'     => 'september',
+'october'       => 'oktober',
+'november'      => 'november',
+'december'      => 'december',
+'january-gen'   => 'januaris',
+'february-gen'  => 'februaris',
+'march-gen'     => 'mars',
+'april-gen'     => 'aprils',
+'may-gen'       => 'majs',
+'june-gen'      => 'junis',
+'july-gen'      => 'julis',
+'august-gen'    => 'augustis',
+'september-gen' => 'septembers',
+'october-gen'   => 'oktobers',
+'november-gen'  => 'novembers',
+'december-gen'  => 'decembers',
+'jan'           => 'jan',
+'feb'           => 'feb',
+'mar'           => 'mar',
+'apr'           => 'apr',
+'may'           => 'maj',
+'jun'           => 'jun',
+'jul'           => 'jul',
+'aug'           => 'aug',
+'sep'           => 'sep',
+'oct'           => 'okt',
+'nov'           => 'nov',
+'dec'           => 'dec',
+
+# Bits of text used by many pages
+'categories'            => 'Kategorier',
+'pagecategories'        => '{{PLURAL:$1|Kategori|Kategorier}}',
+'category_header'       => 'Artiklar i kategorin "$1"',
+'subcategories'         => 'Underkategorier',
+'category-media-header' => 'Media i kategorin "$1"',
+
+'mainpagetext'      => 'Installation av wikimjukvara klar.',
+'mainpagedocfooter' => 'För anpassning av användargränssnittet, se [http://meta.wikimedia.org/wiki/MediaWiki_localization dokumentation]. För hjälp med användning och konfiguration, se [http://meta.wikimedia.org/wiki/Help:Contents användarguiden] på Meta.',
+
+'about'          => 'Om',
+'article'        => 'Artikel',
+'newwindow'      => '(öppnas i ett nytt fönster)',
+'cancel'         => 'Avbryt',
+'qbfind'         => 'Hitta',
+'qbbrowse'       => 'Bläddra igenom',
+'qbedit'         => 'Redigera',
+'qbpageoptions'  => 'Sidinställningar',
+'qbpageinfo'     => 'Sidinformation',
+'qbmyoptions'    => 'Mina inställningar',
+'qbspecialpages' => 'Specialsidor',
+'moredotdotdot'  => 'Mer...',
+'mypage'         => 'Min sida',
+'mytalk'         => 'Min diskussionssida',
+'anontalk'       => 'Diskussionssidan för denna IP-adress',
+'navigation'     => 'Navigering',
+
+# Metadata in edit box
+'metadata_help' => 'Metadata (se [[Project:Metadata]] för förklaring):',
+
+'errorpagetitle'    => 'Fel',
+'returnto'          => 'Tillbaka till $1.',
+'tagline'           => '{{SITENAME}}',
+'help'              => 'Hjälp',
+'search'            => 'Sök',
+'searchbutton'      => 'Sök',
+'go'                => 'Gå till',
+'searcharticle'     => 'Gå till',
+'history'           => 'Versionshistorik',
+'history_short'     => 'Historik',
+'updatedmarker'     => 'uppdaterad sedan senaste besöket',
+'info_short'        => 'Information',
+'printableversion'  => 'Utskriftsvänlig version',
+'permalink'         => 'Permanent länk',
+'print'             => 'Skriv ut',
+'edit'              => 'Redigera',
+'editthispage'      => 'Redigera denna sida',
+'delete'            => 'radera',
+'deletethispage'    => 'Radera denna sida',
+'undelete_short'    => 'Återställ {{PLURAL:$1|en version|$1 versioner}}',
+'protect'           => 'Skrivskydda',
+'protect_change'    => 'ändra skyddet',
+'protectthispage'   => 'Skydda denna sida',
+'unprotect'         => 'ta bort skrivskydd',
+'unprotectthispage' => 'Ta bort skrivskyddet från den här sidan',
+'newpage'           => 'Ny sida',
+'talkpage'          => 'Diskussionssida',
+'talkpagelinktext'  => 'Diskussion',
+'specialpage'       => 'Specialsida',
+'personaltools'     => 'Personliga verktyg',
+'postcomment'       => 'Skicka en kommentar',
+'articlepage'       => 'Visa artikel',
+'talk'              => 'diskussion',
+'views'             => 'Visningar',
+'toolbox'           => 'Verktygslåda',
+'userpage'          => 'Visa användarsida',
+'projectpage'       => 'Visa projektsida',
+'imagepage'         => 'Visa bildsida',
+'mediawikipage'     => 'Visa meddelandesida',
+'templatepage'      => 'Visa mallsida',
+'viewhelppage'      => 'Visa hjälpsida',
+'categorypage'      => 'Visa kategorisida',
+'viewtalkpage'      => 'Visa diskussionssida',
+'otherlanguages'    => 'Andra språk',
+'redirectedfrom'    => '(Omdirigerad från $1)',
+'redirectpagesub'   => 'Omdirigeringssida',
+'lastmodifiedat'    => 'Sidan ändrades senast $2, $1.', # $1 date, $2 time
+'viewcount'         => 'Sidan har visats {{PLURAL:$1|en gång|$1 gånger}}.',
+'protectedpage'     => 'Skyddad sida',
+'jumpto'            => 'Hoppa till:',
+'jumptonavigation'  => 'navigering',
+'jumptosearch'      => 'sök',
+
+# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
+'aboutsite'         => 'Om {{SITENAME}}',
+'aboutpage'         => 'Project:Om',
+'bugreports'        => 'Felrapporter',
+'bugreportspage'    => 'Project:Felrapporter',
+'copyright'         => 'All text tillgänglig under $1.',
+'copyrightpagename' => '{{SITENAME}} upphovsrätt',
+'copyrightpage'     => 'Project:Upphovsrätt',
+'currentevents'     => 'Aktuella händelser',
+'currentevents-url' => 'Aktuella händelser',
+'disclaimers'       => 'Förbehåll',
+'disclaimerpage'    => 'Project:Allmänt förbehåll',
+'edithelp'          => 'Redigeringshjälp',
+'edithelppage'      => 'Help:Hur man redigerar en sida',
+'faq'               => 'FAQ',
+'faqpage'           => 'Project:FAQ',
+'helppage'          => 'Help:Innehåll',
+'mainpage'          => 'Huvudsida',
+'policy-url'        => 'Project:Policy',
+'portal'            => 'Deltagarportalen',
+'portal-url'        => 'Project:Deltagarportalen',
+'privacy'           => 'Integritetspolicy',
+'privacypage'       => 'Project:Integritetspolicy',
+'sitesupport'       => 'Donationer',
+'sitesupport-url'   => 'Project:Donationer',
+
+'badaccess'        => 'Behörighetsfel',
+'badaccess-group0' => 'Du har inte tillåtelse att utföra den åtgärd du har begärt.',
+'badaccess-group1' => 'Funktionen du vill använda är begränsad till användare i gruppen $1.',
+'badaccess-group2' => 'Funktionen du vill använda är begränsad till användare i grupperna $1.',
+'badaccess-groups' => 'Funktionen du vill använda är begränsad till användare i grupperna $1.',
+
+'versionrequired'     => 'Version $1 av MediaWiki krävs',
+'versionrequiredtext' => 'För att kunna använda den här sidan, behövs version $1 av MediaWiki. Se [[Special:Version]].',
+
+'ok'                  => 'OK',
+'pagetitle'           => '$1 - {{SITENAME}}',
+'retrievedfrom'       => 'Den här artikeln är hämtad från $1',
+'youhavenewmessages'  => 'Du har $1 ($2).',
+'newmessageslink'     => 'nya meddelanden',
+'newmessagesdifflink' => 'ändring mot tidigare version',
+'editsection'         => 'redigera',
+'editold'             => 'redigera',
+'editsectionhint'     => 'Redigera avsnitt: $1',
+'toc'                 => 'Innehåll',
+'showtoc'             => 'visa',
+'hidetoc'             => 'göm',
+'thisisdeleted'       => 'Visa eller återställ $1?',
+'viewdeleted'         => 'Visa $1?',
+'restorelink'         => '{{PLURAL:$1|en raderad version|$1 raderade versioner}}',
+'feedlinks'           => 'Matning:',
+'feed-invalid'        => 'Ogiltig matningstyp.',
+
+# Short words for each namespace, by default used in the 'article' tab in monobook
+'nstab-main'      => 'Artikel',
+'nstab-user'      => 'Användarsida',
+'nstab-media'     => 'Media',
+'nstab-special'   => 'Special',
+'nstab-project'   => 'projektsida',
+'nstab-image'     => 'Bild',
+'nstab-mediawiki' => 'systemmeddelande',
+'nstab-template'  => 'Mall',
+'nstab-help'      => 'Hjälp',
+'nstab-category'  => 'Kategori',
+
+# Main script and global functions
+'nosuchaction'      => 'Funktionen finns inte',
+'nosuchactiontext'  => 'Den funktion som specificerats i URL:en kan inte
+hittas av programvaran',
+'nosuchspecialpage' => 'Någon sådan specialsida finns inte',
+'nospecialpagetext' => 'Du har begärt en specialsida som {{SITENAME}}s programvara inte kan hitta. I [[Special:Specialpages|listan över specialsidor]] kan du se vilka specialsidor som finns.',
+
+# General errors
+'error'                => 'Fel',
+'databaseerror'        => 'Databasfel',
+'dberrortext'          => 'Ett syntaxfel i databasfrågan har uppstått.
+Den senaste utförda databasfrågan var:
+<blockquote><tt>$1</tt></blockquote>
+från funktionen "<tt>$2</tt>".
+MySQL returnerade felen "$3<tt>: $4</tt>".',
+'dberrortextcl'        => 'Ett felaktigt utformat sökbegrepp har påträffats. Senaste sökbegrepp var: "$1"  från funktionen "$2". MySQL svarade med felmeddelandet "$3: $4"',
+'noconnect'            => 'Kunde inte ansluta till databasen på $1',
+'nodb'                 => 'Kunde inte välja databasen $1',
+'cachederror'          => 'Detta är en cachad kopia av den efterfrågade sidan. Det är inte säkert att den är aktuell.',
+'laggedslavemode'      => '<b>Observera: det kan dröja en stund innan de senaste redigeringarna blir synliga.</b>',
+'readonly'             => 'Databasen är skrivskyddad',
+'enterlockreason'      => 'Ange varför sidan skrivskyddats, och ge en uppskattning av hur länge skrivskyddet bör behållas.',
+'readonlytext'         => 'Databasen är tillfälligt låst för ändringar, förmodligen på grund av rutinmässigt underhåll. Efter avslutat arbete kommer den att återgå till normalläge. Den utvecklare som skrivskyddade den har angivit följande anledning: <p>$1',
+'missingarticle'       => 'Databasen borde ha funnit sidan "$1", men det gjorde den inte. Den vanligaste orsaken till denna typ av fel är vanligen en utdaterad jämförelse mellan sidversioner (diff) eller en länk från versionshistoriken till en sida som raderats. Om inte något av detta stämmer, kan du ha hittat en bugg i mjukvaran. Rapportera gärna buggar direkt i [http://bugzilla.wikimedia.org/ Bugzilla]; du kan även posta dem på sidan för [[Project:Felrapporter|felrapporter]], eller kontakta en [[Project:Administratörer|administratör]] och be honom eller henne skicka informationen vidare. Oavsett vilket av alternativen du väljer, notera url:en (webbadressen).',
+'readonly_lag'         => 'Databasen har automatiskt låsts tills dess att databasservrarna återfår kontakten med huvudservern.',
+'internalerror'        => 'Internt fel',
+'filecopyerror'        => 'Kunde inte kopiera filen "$1" till "$2".',
+'filerenameerror'      => 'Kunde inte byta namn på filen "$1" till "$2".',
+'filedeleteerror'      => 'Kunde inte radera filen "$1".',
+'filenotfound'         => 'Kunde inte hitta filen "$1".',
+'unexpected'           => 'Oväntat värde: "$1"="$2".',
+'formerror'            => 'Fel: Kunde inte sända formulär',
+'badarticleerror'      => 'Den åtgärden kan inte utföras på den här sidan.',
+'cannotdelete'         => 'Det gick inte att radera sidan eller bilden, kanske för att någon annan redan raderat den.',
+'badtitle'             => 'Felaktig titel',
+'badtitletext'         => 'Den sidtiteln är antingen inte tillåten, sidan är tom, eller så är sidan
+felaktigt länkad till.',
+'perfdisabled'         => 'Denna funktion har tyvärr stängts av tillfälligt, eftersom den gör databasen så långsam att ingen kan använda wikin.',
+'perfdisabledsub'      => 'Här är en sparad kopia från $1:', # obsolete?
+'perfcached'           => 'Sidan är hämtad ur ett cacheminne; det är inte säkert att det är den senaste versionen.',
+'perfcachedts'         => 'Sidan är hämtad ur ett cacheminne och uppdaterades senast $1.',
+'querypage-no-updates' => 'Uppdatering av den här sidan är inte aktiverad. Datan kommer i nuläget inte att uppdateras.',
+'wrong_wfQuery_params' => 'Felaktiga parametrar för wfQuery()<br /> Funktion: $1<br /> Förfrågan: $2',
+'viewsource'           => 'Visa wikitext',
+'viewsourcefor'        => 'för $1',
+'protectedpagetext'    => 'Den här sidan har skrivskyddats för att förhindra redigering.',
+'viewsourcetext'       => 'Du kan se och kopiera sidans wikikod:',
+'protectedinterface'   => 'Denna sida innehåller text för mjukvarans gränssnitt, och är skrivskyddad för att förebygga missbruk.',
+'editinginterface'     => "'''Varning:''' Du redigerar en sida som används till texten i gränssnittet. Ändringar på denna sida kommer att påverka gränssnittets utseende för alla användare.",
+'sqlhidden'            => '(gömd SQL-förfrågan)',
+'cascadeprotected'     => 'Den här sidan har skyddats från redigering eftersom den inkluderas på följande sidor som skrivskyddats med "kaskaderande skydd":',
+
+# Login and logout pages
+'logouttitle'                => 'Användarutloggning',
+'logouttext'                 => 'Du är nu utloggad från ditt användarkonto.',
+'welcomecreation'            => '<h2>Välkommen, $1!</h2><p>Ditt konto har skapats. Glöm inte att justera dina inställningar.',
+'loginpagetitle'             => 'Användarinloggning',
+'yourname'                   => 'Ditt användarnamn',
+'yourpassword'               => 'Ditt lösenord',
+'yourpasswordagain'          => 'Upprepa lösenord',
+'remembermypassword'         => 'Automatisk inloggning i framtiden.',
+'yourdomainname'             => 'Din domän',
+'externaldberror'            => 'Antingen inträffade autentiseringsproblem med en extern databas, eller så får du inte uppdatera ditt externa konto.',
+'loginproblem'               => '<b>Det uppstod problem vid inloggningen.</b><br />Pröva igen!',
+'alreadyloggedin'            => '<strong>$1, du är redan inloggad!</strong><br />',
+'login'                      => 'Logga in',
+'loginprompt'                => 'För att logga in måste tillåta cookies för att logga in på {{SITENAME}}.',
+'userlogin'                  => 'Skapa ett konto eller logga in',
+'logout'                     => 'Logga ut',
+'userlogout'                 => 'Logga ut',
+'notloggedin'                => 'Ej inloggad',
+'nologin'                    => 'Saknar du ett användarkonto? $1.',
+'nologinlink'                => 'Skapa ett användarkonto',
+'createaccount'              => 'Skapa ett konto',
+'gotaccount'                 => 'Har du redan ett användarkonto? $1.',
+'gotaccountlink'             => 'Logga in',
+'createaccountmail'          => 'med e-post',
+'badretype'                  => 'De lösenord du uppgett överenstämmer inte med varandra.',
+'userexists'                 => 'Detta användarnamn är upptaget. Välj ett annat användarnamn.',
+'youremail'                  => 'Din e-postadress',
+'username'                   => 'Användarnamn:',
+'uid'                        => 'Användar-ID:',
+'yourrealname'               => 'Ditt riktiga namn*',
+'yourlanguage'               => 'Språk',
+'yourvariant'                => 'Variant',
+'yournick'                   => 'Ditt smeknamn (till signaturer)',
+'badsig'                     => 'Det är något fel med råsignaturen, kontrollera HTML-koden.',
+'email'                      => 'E-post',
+'prefs-help-email-enotif'    => 'Om du slagit på funktionen för att få meddelanden om uppdateringar i mail, kommer denna adress att användas även för det.',
+'prefs-help-realname'        => '¹ Riktigt namn (valfritt): Om du väljer att ange ditt riktiga namn, kommer det att användas för att tillskriva dig ditt arbete.',
+'loginerror'                 => 'Inloggningsproblem',
+'prefs-help-email'           => '² E-post (valfritt): Gör det möjligt för andra användare att kontakta dig, utan att du behöver avslöja din identitet och/eller e-postadress.',
+'nocookiesnew'               => 'Användarkontot skapades, men du blev inte inloggad. {{SITENAME}} använder cookies för att logga in användare. Du har stängt av cookies i din bläddrare. Om du slår på cookies kan du logga in med ditt nya användarnamn och lösenord.',
+'nocookieslogin'             => '{{SITENAME}} använder cookies för att logga in användare. Du har stängt av cookies i din webbläsare. Försök igen med stöd för cookies aktiverat.',
+'noname'                     => 'Du har angett ett ogiltigt användarnamn.',
+'loginsuccesstitle'          => 'Inloggningen lyckades',
+'loginsuccess'               => 'Du är nu inloggad på {{SITENAME}} med användarnamnet "$1".',
+'nosuchuser'                 => 'Det finns ingen användare som heter "$1".
+Kontrollera stavningen, eller använd formuläret nedan för att skapa ett nytt konto.',
+'nosuchusershort'            => 'Det finns ingen användare som heter "$1". Kontrollera att du stavat rätt.',
+'nouserspecified'            => 'Du måste ange ett användarnamn.',
+'wrongpassword'              => 'Lösenordet du angav är felaktigt. Försök igen',
+'wrongpasswordempty'         => 'Lösenordet som angavs var blankt. Var god försök igen.',
+'mailmypassword'             => 'Sänd mig ett nytt lösenord',
+'passwordremindertitle'      => 'Nytt lösenord från {{SITENAME}}',
+'passwordremindertext'       => 'Någon - förmodligen du - har från IP-numret $1 bett oss sända dig ett
+nytt lösenord för ditt användarkonto på {{SITENAME}} ($4).
+Lösenordet för användaren "$2" är nu "$3".
+
+Du bör nu logga in, och byta lösenord.
+
+Om det inte var du som gjorde denna begäran, eller om du har kommit på
+ditt gamla lösenord och inte längre önskar ändra det så kan du ignorera
+detta meddelande och fortsätta använda ditt gamla lösenord.',
+'noemail'                    => 'Användaren "$1" har inte registrerat någon e-postadress.',
+'passwordsent'               => 'Ett nytt lösenord har skickats till den e-postadress som användaren "$1" har registrerat. När du får meddelandet, var god logga in igen.',
+'blocked-mailpassword'       => 'Din IP-adress är blockerad, därför kan den inte användas för att få ett nytt lösenord.',
+'eauthentsent'               => 'Ett e-brev för bekräftelse har skickats till den e-postadress som angivits. Du måste följa instruktionerna i e-brevet för att bekräfta att kontot verkligen är ditt, innan någon annan epost kan skickas härifrån till kontot,',
+'throttled-mailpassword'     => 'Ett nytt lösenord har redan skickats under de senaste $1 timmarna. För att förhindra missbruk skickas bara ett nytt lösenord på under den tiden.',
+'mailerror'                  => 'Fel vid skickande av e-post: $1',
+'acct_creation_throttle_hit' => 'Du har redan skapat $1 användare och kan inte göra fler.',
+'emailauthenticated'         => 'Din e-postadress bekräftades den $1.',
+'emailnotauthenticated'      => 'Din e-postadress är ännu inte bekräftad. Ingen e-post kommer att skickas vad gäller det följande:',
+'noemailprefs'               => 'Det krävs att en e-postadress uppgivits för att dessa funktioner skall gå att använda.',
+'emailconfirmlink'           => 'Bekräfta din e-postadress',
+'invalidemailaddress'        => 'Denna e-postadressen kan inte godtas då formatet verkar vara felaktigt. Skriv in en adress på korrekt format, eller töm fältet.',
+'accountcreated'             => 'Användarkontot har skapats',
+'accountcreatedtext'         => 'Användarkontot $1 har skapats.',
+
+# Password reset dialog
+'resetpass'               => 'Välj nytt lösenord',
+'resetpass_announce'      => 'Du loggade in med ett temporärt lösenord. För att slutföra inloggningen måste du välja ett nytt lösenord.',
+'resetpass_text'          => '<!-- här kan text läggas till -->',
+'resetpass_header'        => 'Välj nytt lösenord',
+'resetpass_submit'        => 'Spara lösenord och logga in',
+'resetpass_success'       => 'Ditt lösenord ändrades. Du är nu inloggad.',
+'resetpass_bad_temporary' => 'Ditt temporära lösenord är felaktigt. Du kanske redan har loggat in med det eller begärt att få ett nytt tillfälligt lösenord.',
+'resetpass_forbidden'     => 'Lösenord kan inte ändras på den här wikin.',
+'resetpass_missing'       => 'Formulärdata saknas.',
+
+# Edit page toolbar
+'bold_sample'     => 'Fet text',
+'bold_tip'        => 'Fet stil',
+'italic_sample'   => 'Kursiv text',
+'italic_tip'      => 'Kursiv stil',
+'link_sample'     => 'länkens namn',
+'link_tip'        => 'Intern länk',
+'extlink_sample'  => 'http://www.exempel.com länkens namn',
+'extlink_tip'     => 'Extern länk (kom ihåg prefixet http://)',
+'headline_sample' => 'Rubriktext',
+'headline_tip'    => 'Rubrik i nivå 2',
+'math_sample'     => 'Skriv formeln här',
+'math_tip'        => 'Matematisk formel (LaTeX)',
+'nowiki_sample'   => 'Skriv in icke-wiki-formaterad text här',
+'nowiki_tip'      => 'Strunta i wikiformatering',
+'image_sample'    => 'Exempel.jpg',
+'image_tip'       => 'Inbäddad bild',
+'media_sample'    => 'Exempel.mp3',
+'media_tip'       => 'Länk till mediafil',
+'sig_tip'         => 'Din signatur med tidsstämpel',
+'hr_tip'          => 'Horisontell linje (använd sparsamt)',
+
+# Edit pages
+'summary'                   => 'Sammanfattning',
+'subject'                   => 'Rubrik/uppslagsord',
+'minoredit'                 => 'Mindre ändring (m)',
+'watchthis'                 => 'Bevaka denna sida',
+'savearticle'               => 'Spara',
+'preview'                   => 'Förhandsgranska',
+'showpreview'               => 'Visa förhandsgranskning',
+'showlivepreview'           => 'Automatiskt uppdaterad förhandsvisning',
+'showdiff'                  => 'Visa ändringar',
+'anoneditwarning'           => 'Du är inte inloggad. Därför kommer din IP-adress att synas i historiken för den här sidan när du sparar din redigering.',
+'missingsummary'            => "'''OBS:''' Du glömde att skriva en redigeringskommentar. Om du trycker på \"Spara\" igen så kommer din redigering att sparas utan redigeringskommentar.",
+'missingcommenttext'        => 'Var god och skriv in en kommentar nedan.',
+'missingcommentheader'      => "'''OBS:''' Du har inte skrivit någon rubrik till den här kommentaren. Om du trycker på \"Spara\" igen, så sparas kommentaren utan någon rubrik.",
+'summary-preview'           => 'Sammanfattningsförhandsgranskning',
+'subject-preview'           => 'Rubrikförhandsgranskning',
+'blockedtitle'              => 'Användaren är spärrad',
+'blockedtext'               => "'''Din IP-adress eller ditt användarnamn är blockerat från att redigera sidor på  {{SITENAME}}.'''
+
+Blockeringen utfördes av $1 med motiveringen: ''$2''.
+
+Du kan kontakta $1 eller någon annan av [[{{MediaWiki:grouppage-sysop}}|administratörerna]] för att diskutera blockeringen.<br />
+Observera att du inte kan använda dig av funktionen [[Special:Emailuser/$1|skicka e-post till $1]] om du inte är en registrerad användare och [[Special:Userlogin|inloggad]] och har uppgivit din e-postadress i dina inställningar. Om du inte har ett användarkonto, kan du [[Special:Userlogin|registrera ett]] för att kunna skicka wiki-mail.<br />
+Din IP-adress är $3 och blockerings-ID är $5. Vänligen ange IP-adress eller blockerings-ID i alla förfrågningar som du gör i ärendet.",
+'blockedoriginalsource'     => "Källkoden för '''$1''' visas nedan:",
+'blockededitsource'         => "Texten för '''dina ändringar''' av '''$1''' visas nedanför:",
+'whitelistedittitle'        => 'Redigering kräver inloggning',
+'whitelistedittext'         => 'Du måste $1 för att kunna redigera artiklar.',
+'whitelistreadtitle'        => 'Läsning kräver inloggning',
+'whitelistreadtext'         => 'För att kunna läsa artiklar, måste du [[Special:Userlogin|logga in]].',
+'whitelistacctitle'         => 'Du kan inte skapa konton',
+'whitelistacctext'          => 'För att kunna skapa konton på denna wiki måste du vara [[Special:Userlogin|inloggad]] och ha rätt behörighet.',
+'confirmedittitle'          => 'E-postbekräftelse krävs för redigering',
+'confirmedittext'           => 'Du måste bekräfta din e-postadress innan du kan redigera sidor. Var vänlig ställ in och validera din e-postadress genom dina [[Special:Preferences|användarinställningar]].',
+'nosuchsectiontitle'        => 'Avsnittet finns inte',
+'nosuchsectiontext'         => 'Du försökte redigera ett avsnitt som inte finns. Eftersom avsnitt $1 inte finns, så kan inte din redigering sparas.',
+'loginreqtitle'             => 'Inloggning krävs',
+'loginreqlink'              => 'logga in',
+'loginreqpagetext'          => 'Du måste $1 för att visa andra sidor.',
+'accmailtitle'              => 'Lösenordet är skickat.',
+'accmailtext'               => "Lösenordet för '$1' har skickats till $2.",
+'newarticle'                => '(Ny)',
+'newarticletext'            => 'Du har klickat på en länk till en sida som inte finns ännu. Du kan själv skapa sidan genom att skriva i fältet nedan (du kan läsa mer på [[{{MediaWiki:helppage}}|hjälpsidan]]). Om du inte vill skriva något kan du bara trycka på "tillbaka" i din webbläsare.',
+'anontalkpagetext'          => "---- ''Detta är en diskussionssida för en användare som inte har loggat in. {{SITENAME}} måste därför använda personens numeriska IP-adress för identifiera honom eller henne. En sådan IP-adress kan ibland användas av flera olika personer. Om du får meddelanden här som inte tycks vara riktade till dig, kan du gärna [[Special:Userlogin|logga in]]. Då undviker du framtida förväxlingar.''",
+'noarticletext'             => "<div class=\"plainlinks\" style=\"border: 1px solid #ccc; padding: 7px;\">'''{{SITENAME}} har inte någon artikel om \"{{PAGENAME}}\" ännu.'''<br />
+*Du kan '''[{{fullurl:{{FULLPAGENAME}}|action=edit}} redigera den här sidan]''' för att skapa en ny artikel.<br />
+*Du kan också [[Special:Search/{{PAGENAME}}|söka efter {{PAGENAME}}]] i andra artiklar på {{SITENAME}}.<br />
+*Det kan också hända att artikeln har raderats. Se då i [{{fullurl:Special:Log/delete|page={{FULLPAGENAMEE}}}} raderingsloggen].<br />
+----<br />
+*Om du har skapat artikeln under de senaste minuterna kan du ändå få upp denna sida ifall {{SITENAME}}s cache inte hunnit uppdateras. Vänligen vänta då en liten stund och se om artikeln syns senare innan du försöker skapa den igen.</div>",
+'clearyourcache'            => "'''Obs:''' Sedan du sparat sidan, måste du tömma din webbläsares cache för att se ändringarna. '''Mozilla/Safari/Firefox:''' håll ner ''skift'' och klicka på ''reload'' eller tryck ''ctrl-shift-r'', (cmd-shift-R på mac:ar); '''Internet Explorer:'''  håll ner ctr och klicka på \"Refresh\" eller tryck ''ctrl-f5'', '''Konqueror:''': klicka helt enkelt på \"Reload\" eller F5; '''Opera:''' tryck ''F5''",
+'usercssjsyoucanpreview'    => "<strong>Tips:</strong> Använd 'Visa förhandsgranskning' för att testa din nya css/js innan du sparar.",
+'usercsspreview'            => "'''Observera att du bara förhandsgranskar din användar-css - den har inte sparats än.'''",
+'userjspreview'             => "'''Observera att du bara testar/förhandsgranskar ditt javascript! Det är inte sparat än.'''",
+'userinvalidcssjstitle'     => "'''Varning:''' Skalet \"\$1\" finns inte. Kom ihåg att .css- och .js-sidor för enskilda användare börjar på liten bokstav. Exempel: {{ns:user}}:Foo/monobook.css i stället för {{ns:user}}:Foo/Monobook.css.",
+'updated'                   => '(Uppdaterad)',
+'note'                      => '<strong>Obs!</strong>',
+'previewnote'               => 'Observera att detta är en förhandsvisning, och att sidan ännu inte sparats!',
+'previewconflict'           => 'Den här förhandsvisningen är resultatet av den
+redigerbara texten ovanför,
+så som det kommer att se ut om du väljer att spara.',
+'session_fail_preview'      => '<strong>Databasen kunde inte bearbeta redigeringen på grund av ett bortfall av sessionsdata. Försök igen; om det fortfarande inte fungerar, prova att öppna om redigeringssidan, logga ut och logga in igen eller vänta ett tag på att felet fixas.</strong>',
+'session_fail_preview_html' => "<strong>Beklagar! Vi kunde inte databehandla din redigering på grund av att sessionens data gått förlorad.</strong>
+
+''Eftersom denna wiki har aktiverat rå HTML, så döljs förhandsvisningen som en förebyggande säkerhetsåtgärd med syfte att förhindra JavaScript-attacker.''",
+'importing'                 => 'Importerar $1',
+'editing'                   => 'Redigerar $1',
+'editinguser'               => 'Redigerar $1',
+'editingsection'            => 'Redigerar $1 (avsnitt)',
+'editingcomment'            => 'Redigerar $1 (kommentar)',
+'editconflict'              => 'Redigeringskonflikt: $1',
+'explainconflict'           => 'Någon har ändrat den här sidan efter att du började att redigera den.
+Det översta textblocket innehåller den nuvarande texten, och din version syns i det nedersta blocket. Om du infogar dina ändringar i texten i den översta rutan, bibehålls alla ändringar - både dina, och den andres. <strong>Endast</strong> texten i den översta textboxen sparas när du trycker "Spara sida".
+<p>',
+'yourtext'                  => 'Din text',
+'storedversion'             => 'Den sparade versionen',
+'nonunicodebrowser'         => '<strong>VARNING: Din webbläsare saknar stöd för unicode. Var vänlig åtgärda detta, förslagsvis genom att uppgradera din webbläsare, innan du redigerar någon artikel. Artiklar riskerar annars att förstöras.</strong>',
+'editingold'                => '<strong>VARNING: Du redigerar en gammal version av denna sida. Om du sparar den kommer alla ändringar som har gjorts sedan denna version att skrivas över.</strong>',
+'yourdiff'                  => 'Skillnader',
+'copyrightwarning'          => 'Observera att alla bidrag till {{SITENAME}} är att betrakta som utgivna under $2 (se $1 för detaljer). Om du inte vill att din text ska redigeras eller kopieras efter andras gottfinnande skall du inte skriva något här.<br />
+Du lovar oss också att du skrev texten själv, eller kopierade från kulturellt allmängods som inte skyddas av upphovsrätt, eller liknande källor. <strong>LÄGG INTE UT UPPHOVSRÄTTSSKYDDAT MATERIAL HÄR UTAN TILLÅTELSE!</strong>',
+'copyrightwarning2'         => 'Observera att alla bidrag till {{SITENAME}} kan komma att redigeras, ändras, eller tas bort av andra deltagare. Om du inte vill se din text förändrad efter andras gottfinnade skall du inte skriva in någon text här.<br />
+Du lovar oss också att du skrev texten själv, eller kopierade från kulturellt allmängods som inte skyddas av upphovsrätt, eller liknande källor - se $1 för detaljer.
+<strong>LÄGG INTE UT UPPHOVSRÄTTSSKYDDAT MATERIAL HÄR UTAN TILLÅTELSE!</strong>',
+'longpagewarning'           => 'Om du använder en väldigt gammal webbläsare kan du ha problem med att redigera den här artikeln, eftersom vissa äldre webbläsare inte klarar artiklar större än 32 kB, och den här är $1 kB.',
+'longpageerror'             => '<strong>FEL: Texten som du försöker spara är $1 kilobyte, vilket är mer än det maximalt tillåtna $2 kilobyte. Den kan inte sparas.</strong>',
+'readonlywarning'           => '<strong>VARNING: Databasen är tillfälligt låst för underhåll. Du kommer inte att kunna spara 
+dina ändringar just nu. Det kan vara klokt att kopiera över texten till din egen dator, tills databasen är upplåst igen.</strong>',
+'protectedpagewarning'      => '<strong>VARNING: Den här sidan är låst så att bara administratörer kan redigera den.
+Försäkra dig om att du följer riktlinjerna för redigering av skyddade sidor.</strong>',
+'semiprotectedpagewarning'  => "'''Observera:''' Den här sidan är delvis skrivskyddad så att endast registrerade användare kan redigera den.",
+'cascadeprotectedwarning'   => '<strong>VARNING: Den här sidan är låst så att bara administratörer kan redigera den. Det beror på att sidan inkluderas på följande sidor som skyddats med "kaskaderande skrivskydd":</strong>',
+'templatesused'             => 'Mallar som används på den här sidan:',
+'templatesusedpreview'      => 'Mallar som används i förhandsgranskningen:',
+'templatesusedsection'      => 'Mallar som används i det här avsnittet:',
+'template-protected'        => '(skyddad)',
+'template-semiprotected'    => '(delvis skyddad)',
+'edittools'                 => '<!-- Denna text kommer att visas nedanför redigeringsrutor och uppladdningsformulär. -->',
+'nocreatetitle'             => 'Skapande av sidor begränsat',
+'nocreatetext'              => 'Denna wiki har begränsat möjligheterna att skapa nya sidor. Du kan redigera existerande sidor, eller [[Special:Userlogin|logga in eller skapa ett användarkonto]].',
+
+# "Undo" feature
+'undo-success' => 'Ändringen kunde ogöras. Resultatet visas i redigeringsrutan, spara det genom att trycka på "spara".',
+'undo-failure' => 'På grund av senare redigeringar kunde inte ändringen ogöras.',
+'undo-summary' => 'Ogör ändring $1 av [[Special:Contributions/$2|$2]] ([[Användardiskussion:$2|diskussion]])',
+
+# Account creation failure
+'cantcreateaccounttitle' => 'Kontot kan inte skapas',
+'cantcreateaccounttext'  => 'Registrering av konton har blockerats för den här IP-adressen (<b>$1</b>). Det beror antagligen på återkommande klotter och vandalism från adressen.',
+
+# History pages
+'revhistory'          => 'Versionshistorik',
+'viewpagelogs'        => 'Visa loggar för denna sida',
+'nohistory'           => 'Den här sidan har ingen versionshistorik.',
+'revnotfound'         => 'Versionen hittades inte',
+'revnotfoundtext'     => 'Den gamla versionen av den sida du frågade efter kan inte hittas. Kontrollera den URL du använde för att nå den här sidan.',
+'loadhist'            => 'Läser sidans versioner',
+'currentrev'          => 'Nuvarande version',
+'revisionasof'        => 'Versionen från $1',
+'revision-info'       => 'Version från den $1; $2',
+'previousrevision'    => '← Äldre version',
+'nextrevision'        => 'Nyare version →',
+'currentrevisionlink' => 'Nuvarande version',
+'cur'                 => 'nuvarande',
+'next'                => 'nästa',
+'last'                => 'föregående',
+'orig'                => 'original',
+'page_first'          => 'första',
+'page_last'           => 'sista',
+'histlegend'          => "Förklaring: (nuvarande) = skillnad mot nuvarande version; (föregående) = skillnad mot föregående version; '''m''' = mindre ändring.",
+'deletedrev'          => '[raderad]',
+'histfirst'           => 'Första',
+'histlast'            => 'Senaste',
+'historysize'         => '($1 byte)',
+'historyempty'        => '(tom)',
+
+# Revision feed
+'history-feed-title'          => 'Versionshistorik',
+'history-feed-description'    => 'Versionshistorik för denna sida på wikin',
+'history-feed-item-nocomment' => '$1 den $2', # user at time
+'history-feed-empty'          => 'Den begärda sidan finns inte.
+Den kan ha tagits bort från wikin eller bytt namn.
+Prova att [[Special:Search|söka på wikin]] för relevanta nya sidor.',
+
+# Revision deletion
+'rev-deleted-comment'         => '(kommentar borttagen)',
+'rev-deleted-user'            => '(användarnamn borttaget)',
+'rev-deleted-event'           => '(loggåtgärd borttagen)',
+'rev-deleted-text-permission' => '<div class="mw-warning plainlinks"> Denna version av sidan har avlägsnats från de öppna arkiven. Det kan finnas detaljer i [{{fullurl:Special:Log/delete|page={{FULLPAGENAMEE}}}} borttagningsloggen]. </div>',
+'rev-deleted-text-view'       => '<div class="mw-warning plainlinks"> Denna version av sidan har avlägsnats från de öppna arkiven. Som administratör på denna wiki kan du se den; det kan finnas detaljer i [{{fullurl:Special:Log/delete|page={{FULLPAGENAMEE}}}} borttagningsloggen]. </div>',
+'rev-delundel'                => 'visa/göm',
+'revisiondelete'              => 'Ta bort/återställ versioner',
+'revdelete-nooldid-title'     => 'Ingen version angiven',
+'revdelete-nooldid-text'      => 'Du angav inte vilken eller vilka versioner du vill utföra funktionen på.',
+'revdelete-selected'          => '{{PLURAL:$2|Vald version|Valda versioner}} av [[:$1|$1]]:',
+'logdelete-selected'          => "{{PLURAL:$2|Vald loggåtgärd|valda loggåtgärder}} för '''$1:'''",
+'revdelete-text'              => 'Borttagna versioner kommer fortfarande att synas i historiken, men deras innehåll kommer ej att vara tillgängligt för allmänheten. Andra administratörer på denna wiki kommer fortfarande att kunna läsa det dolda innehållet och kan återställa artikeln genom samma gränssnitt, om inte en ytterligare begränsning har utfärdats av sajtens ägare.',
+'revdelete-legend'            => 'Ange begränsningar för version:',
+'revdelete-hide-text'         => 'Dölj versionstext',
+'revdelete-hide-name'         => 'Dölj åtgärd och sidnamn',
+'revdelete-hide-comment'      => 'Dölj redigeringskommentar',
+'revdelete-hide-user'         => 'Dölj den redigerandes användarnamn/IP-adress',
+'revdelete-hide-restricted'   => 'Låt dessa begränsningar gälla administratörer likväl som andra',
+'revdelete-suppress'          => 'Undanhåll data även från administratörer',
+'revdelete-hide-image'        => 'Dölj filinnehåll',
+'revdelete-unsuppress'        => 'Ta bort begränsningar på återställda versioner',
+'revdelete-log'               => 'Loggkommentar:',
+'revdelete-submit'            => 'Tillämpa på vald version',
+'revdelete-logentry'          => 'ändrade synlighet för versioner av [[:$1|$1]]',
+'logdelete-logentry'          => 'ändrade synlighet för åtgärder på [[$1]]',
+'revdelete-logaction'         => '$1 {{plural:$1|version|versioner}} satta till $2',
+'logdelete-logaction'         => '$1 {{plural:$1|åtgärd|åtgärder}} för [[$3]] satta till $2',
+'revdelete-success'           => 'Ändringen av versionssynlighet är utförd.',
+'logdelete-success'           => 'Ändringen av åtgärdssynlighet är utförd.',
+
+# Oversight log
+'oversightlog'    => 'Översynslogg',
+'overlogpagetext' => 'Här nedanför finns en lista över de senaste raderingarna och blockeringarna av innehåll som är gömt för administratörer. Se [[Special:Ipblocklist|listan över blockerade IP]] för en lista över nu gällande blockeringar.',
+
+# Diffs
+'difference'                => '(Skillnad mellan versioner)',
+'loadingrev'                => 'läser version för att se skillnad',
+'lineno'                    => 'Rad $1:',
+'editcurrent'               => 'Redigera sidans nuvarande version',
+'selectnewerversionfordiff' => 'Välj en nyare version för jämförelse',
+'selectolderversionfordiff' => 'Välj en äldre version för jämförelse',
+'compareselectedversions'   => 'Jämför angivna versioner',
+'editundo'                  => 'ogör',
+'diff-multi'                => '({{plural:$1|En mellanliggande version|$1 mellanliggande versioner}} visas inte.)',
+
+# Search results
+'searchresults'         => 'Sökresultat',
+'searchresulttext'      => 'Se [[{{MediaWiki:helppage}}|hjälpsidan]] för mer information om sökning på {{SITENAME}}.',
+'searchsubtitle'        => 'Du sökte efter [[:$1]]',
+'searchsubtitleinvalid' => 'För sökbegreppet $1',
+'badquery'              => 'Felaktigt utformat sökbegrepp',
+'badquerytext'          => 'Tyvärr, den sökningen fungerade inte. Detta beror troligen på att att du har försökt söka på ett ord som är kortare än tre bokstäver, vilket i nuläget inte stöds. Det kan också vara som så att du har skrivit in uttrycket fel, till exempel "katt och och råtta". Vänligen försök igen.',
+'matchtotals'           => 'Sökordet "$1" gav $2 träffar i uppslagsord, och $3 träffar i texten på artiklar.',
+'noexactmatch'          => "'''Det finns ingen artikel med titeln \"\$1\".''' Du kan  [[:\$1|skapa denna sida]].",
+'titlematches'          => 'Träffar i uppslagsord',
+'notitlematches'        => 'Det finns ingen artikel vars titel överensstämmer med sökordet.',
+'textmatches'           => 'Artikeltexter som innehåller sökordet:',
+'notextmatches'         => 'Det finns inga artiklar som innehåller sökordet',
+'prevn'                 => 'förra $1',
+'nextn'                 => 'nästa $1',
+'viewprevnext'          => 'Visa ($1) ($2) ($3).',
+'showingresults'        => 'Nedan visas <b>$1</b> resultat som startar med nummer <b>$2</b>.',
+'showingresultsnum'     => 'Nedan visas <b>$3</b> resultat, som börjar med #<b>$2</b>.',
+'nonefound'             => '<strong>Observera:</strong>: Sökningar utan träffar beror ofta på att man försöker söka efter vanliga ord som "har" och "från". Dessa indexeras inte, och fungerar inte som söktermer. Försök istället hitta mera specifika ord.',
+'powersearch'           => 'Sök',
+'powersearchtext'       => 'Sök i namnrymderna :<br />
+$1<br />
+$2 Lista omdirigeringar &nbsp; Sök efter $3 $9',
+'searchdisabled'        => 'Fulltextssökning på {{SITENAME}} har tyvärr tillfälligt stängts av p.g.a. prestandaproblem. Tills detta har fixats, kan du använda Google-sökningen nedan. Resultaten därifrån kan dock vara något föråldrade.',
+'blanknamespace'        => '(Artiklar)',
+
+# Preferences page
+'preferences'              => 'Inställningar',
+'mypreferences'            => 'Mina inställningar',
+'prefsnologin'             => 'Du är inte inloggad',
+'prefsnologintext'         => 'Du måste vara [[Special:Userlogin|inloggad]] för att kunna ändra i inställningar.',
+'prefsreset'               => 'Inställningarna har återställts till ursprungsvärdena.',
+'qbsettings'               => 'Inställningar för snabbmeny',
+'qbsettings-none'          => 'Ingen',
+'qbsettings-fixedleft'     => 'Fast vänster',
+'qbsettings-fixedright'    => 'Fast höger',
+'qbsettings-floatingleft'  => 'Flytande vänster',
+'qbsettings-floatingright' => 'Flytande höger',
+'changepassword'           => 'Byt lösenord',
+'skin'                     => 'Utseende',
+'math'                     => 'Matematik',
+'dateformat'               => 'Datumformat',
+'datedefault'              => 'Ovidkommande',
+'datetime'                 => 'Datum och tid',
+'math_failure'             => 'Misslyckades med att tolka formel.',
+'math_unknown_error'       => 'okänt fel',
+'math_unknown_function'    => 'okänd funktion',
+'math_lexing_error'        => 'regelfel',
+'math_syntax_error'        => 'syntaxfel',
+'math_image_error'         => 'Konvertering till PNG-format misslyckades; kontrollera om latex, dvips, gs och convert är korrekt installerade',
+'math_bad_tmpdir'          => 'Kan inte skriva till eller skapa temporär mapp för matematikresultat',
+'math_bad_output'          => 'Kan inte skriva till eller skapa mapp för matematikresultat',
+'math_notexvc'             => 'Applicationen texvc saknas; läs math/README för konfigureringsanvisningar.',
+'prefs-personal'           => 'Mitt konto',
+'prefs-rc'                 => 'Senaste ändringar',
+'prefs-watchlist'          => 'Övervakningslistan',
+'prefs-watchlist-days'     => 'Antal dagar som ska visas på övervakningslistan:',
+'prefs-watchlist-edits'    => 'Antal redigeringar som visas i utökad övervakningslista:',
+'prefs-misc'               => 'Diverse',
+'saveprefs'                => 'Spara inställningar',
+'resetprefs'               => 'Återställ ursprungliga inställningar',
+'oldpassword'              => 'Gammalt lösenord',
+'newpassword'              => 'Nytt lösenord',
+'retypenew'                => 'Upprepa det nya lösenordet',
+'textboxsize'              => 'Redigering',
+'rows'                     => 'Rader',
+'columns'                  => 'Kolumner',
+'searchresultshead'        => 'Sökresultat',
+'resultsperpage'           => 'Träffar per sida',
+'contextlines'             => 'Antal rader per träff',
+'contextchars'             => 'Bokstäver per rad',
+'stubthreshold'            => 'Visa länkar i avvikande färg till artiklar som är kortare än',
+'recentchangesdays'        => 'Antal dagar i "senaste ändringarna":',
+'recentchangescount'       => 'Antalet artiklar i "senaste ändringarna":',
+'savedprefs'               => 'Dina inställningar har sparats',
+'timezonelegend'           => 'Tidszon',
+'timezonetext'             => 'Ange skillnaden i timmar mellan din lokala tid och serverns tid (UTC).',
+'localtime'                => 'Lokal tid',
+'timezoneoffset'           => 'Utjämna',
+'servertime'               => 'Serverns klocka är',
+'guesstimezone'            => 'Fyll i från webbläsare',
+'allowemail'               => 'Tillåt e-post från andra användare',
+'defaultns'                => 'Sök i följande namnrymder som förval:',
+'default'                  => 'ursprungsinställning',
+'files'                    => 'Filer',
+
+# User rights
+'userrights-lookup-user'     => 'Hantera användargrupper',
+'userrights-user-editname'   => 'Skriv in ett användarnamn:',
+'editusergroup'              => 'Ändra användargrupper',
+'userrights-editusergroup'   => 'Redigera användargrupper',
+'saveusergroups'             => 'Spara användargrupper',
+'userrights-groupsmember'    => 'Medlem i:',
+'userrights-groupsavailable' => 'Tillgängliga grupper:',
+'userrights-groupshelp'      => 'Markera de grupper, som du vill lägga till eller ta bort användare i. De grupper som du inte markerar, kommer inte att förändras. Du kan avmarkera en grupp med CTRL + vänsterklick.',
+
+# Groups
+'group'            => 'Grupp:',
+'group-bot'        => 'Robotar',
+'group-sysop'      => 'Administratörer',
+'group-bureaucrat' => 'Byråkrater',
+'group-all'        => '(alla)',
+
+'group-bot-member'        => 'Robot',
+'group-sysop-member'      => 'Administratör',
+'group-bureaucrat-member' => 'Byråkrat',
+
+'grouppage-bot'        => 'Project:Robotar',
+'grouppage-sysop'      => 'Project:Administratörer',
+'grouppage-bureaucrat' => 'Project:Byråkrater',
+
+# User rights log
+'rightslog'      => 'Logg över användarrättigheter',
+'rightslogtext'  => 'Detta är en logg över förändringar i användares rättigheter.',
+'rightslogentry' => 'grupptillhörighet för $1 ändrad från $2 till $3',
+'rightsnone'     => '(inga)',
+
+# Recent changes
+'nchanges'                          => '$1 {{PLURAL:$1|ändring|ändringar}}',
+'recentchanges'                     => 'Senaste ändringarna',
+'recentchangestext'                 => 'Följ de senaste ändringarna i wikin på denna sida.',
+'recentchanges-feed-description'    => 'Följ de senaste ändringarna i wikin genom den här matningen.',
+'rcnote'                            => 'Nedan visas de senaste <strong>$1</strong> ändringarna under {{PLURAL:$2|den senaste dagen|de senaste <strong>$2</strong> dagarna}}, per $3.',
+'rcnotefrom'                        => 'Nedan visas de senaste <strong>$1</strong> ändringarna sedan <strong>$2</strong>.',
+'rclistfrom'                        => 'Visa ändringar efter $1',
+'rcshowhideminor'                   => '$1 mindre ändringar',
+'rcshowhidebots'                    => '$1 robotredigeringar',
+'rcshowhideliu'                     => '$1 ändringar av inloggade användare',
+'rcshowhideanons'                   => '$1 ändringar av oinloggade användare',
+'rcshowhidepatr'                    => '$1 kontrollerade redigeringar',
+'rcshowhidemine'                    => '$1 mina ändringar',
+'rclinks'                           => 'Visa de senaste $1 ändringarna under de senaste $2 dagarna<br />
+$3',
+'diff'                              => 'skillnad',
+'hist'                              => 'historik',
+'hide'                              => 'Göm',
+'show'                              => 'Visa',
+'minoreditletter'                   => 'm',
+'newpageletter'                     => 'N',
+'boteditletter'                     => 'b',
+'sectionlink'                       => '→',
+'number_of_watching_users_pageview' => '[$1 användare bevakar]',
+'rc_categories'                     => 'Begränsa till följande kategorier (separera med "|")',
+'rc_categories_any'                 => 'Vilken som helst',
+
+# Recent changes linked
+'recentchangeslinked'          => 'Ändringar på angränsande sidor',
+'recentchangeslinked-noresult' => 'Inga angränsande sidor ändrades under den angivna tidsperioden.',
+'recentchangeslinked-summary'  => "Den här specialsidan listar de senaste ändringarna på angränsande sidor. Sidor på din övervakningslista är markerade med '''fet''' stil.",
+
+# Upload
+'upload'                      => 'Ladda upp filer',
+'uploadbtn'                   => 'Ladda upp filen',
+'reupload'                    => 'Ladda upp på nytt',
+'reuploaddesc'                => 'Tillbaka till uppladdningsformulär.',
+'uploadnologin'               => 'Inte inloggad',
+'uploadnologintext'           => 'Du måste vara [[Special:Userlogin|inloggad]] för att kunna ladda upp filer.',
+'upload_directory_read_only'  => 'Webbservern kan inte skriva till uppladdningskatalogen ($1).',
+'uploaderror'                 => 'Fel vid uppladdningen',
+'uploadtext'                  => "Använd formuläret nedan för att ladda upp filer. För att titta på eller leta efter bilder som redan har laddats upp, se [[Special:Imagelist|lista över uppladdade filer]]. Uppladdningar och borttagningar loggförs också i [[Special:Log/upload|uppladdningsloggen]]. För att infoga en bild på en sida, använd en länk i i följande format:
+* '''<nowiki>[[</nowiki>{{ns:Image}}<nowiki>:File.jpg]]</nowiki>'''
+* '''<nowiki>[[</nowiki>{{ns:Image}}<nowiki>:File.png|alt text]]</nowiki>'''
+* '''<nowiki>[[</nowiki>{{ns:Media}}<nowiki>:File.ogg]]</nowiki>'''
+om du vill länka direkt till filen.",
+'uploadlog'                   => 'Uppladdningar',
+'uploadlogpage'               => 'Uppladdningslogg',
+'uploadlogpagetext'           => 'Nedan följer en lista med de senaste uppladdade filerna.
+Alla tider visas efter serverns tid (UTC).
+<ul>
+</ul>',
+'filename'                    => 'Filnamn',
+'filedesc'                    => 'Beskrivning',
+'fileuploadsummary'           => 'Beskrivning<br />och licens:',
+'filestatus'                  => 'Upphovsrättslig status',
+'filesource'                  => 'Källa',
+'uploadedfiles'               => 'Uppladdade filer',
+'ignorewarning'               => 'Ignorera varning och spara ändå.',
+'ignorewarnings'              => 'Ignorera eventuella varningar',
+'minlength'                   => 'Filens namn måste vara minst tre bokstäver långt',
+'illegalfilename'             => 'Filnamnet "$1" innehåller tecken som inte är tillåtna i sidtitlar. Byt namn på filen och försök ladda upp igen.',
+'badfilename'                 => 'Filens namn har blivit ändrat till "$1".',
+'filetype-badmime'            => 'Uppladdning av filer med MIME-typen "$1" är inte tillåten.',
+'filetype-badtype'            => "'''\".\$1\"''' är en icke önskvärd filtyp
+: Följande filtyper är tillåtna: \$2",
+'filetype-missing'            => 'Filen saknar ett filnamnsändelse (som ".jpg").',
+'large-file'                  => 'Filer bör inte vara större än $1 bytes, denna är $2 bytes',
+'largefileserver'             => 'Denna fil är större än vad servern ställts in att tillåta.',
+'emptyfile'                   => 'Filen du laddade upp verkar vara tom; felet kan bero på ett stavfel i filnamnet. Kontrollera om du verkligen vill ladda upp denna fil.',
+'fileexists'                  => 'Det finns redan en fil med detta namn. Titta på $1, såvida du inte är säker på att du vill ändra den.',
+'fileexists-extension'        => 'En fil med ett liknande namn finns redan:<br />
+Namn på den fil du försöker ladda upp: <strong><tt>$1</tt></strong><br />
+Namn på filen som redan finns: <strong><tt>$2</tt></strong><br />
+Den enda skillnaden är versaliseringen av filnamnsändelsen. Var vänlig kontrollera om filerna är identiska.',
+'fileexists-thumb'            => "'''<center>Den existerande filen</center>'''",
+'fileexists-thumbnail-yes'    => 'Filen verkar vara en bild med förminskad storlek <i>(miniatyrbild)</i>. Var vänlig kontrollera filen <strong><tt>$1</tt></strong>.<br />
+Om det är samma fil i originalstorlek så är det inte nödvändigt att ladda upp en extra miniatyrbild.',
+'file-thumbnail-no'           => 'Filnamnet börjar med <strong><tt>$1</tt></strong>. Det verkar vara en bild med förminskad storlek <i>(miniatyrbild)</i>.
+Om du har tillgång till bilden i full storlek, ladda då hellre upp den, annars bör du ändra filens namn.',
+'fileexists-forbidden'        => 'En fil med detta namn finns redan; vänligen backa och ladda upp din fil under ett annat namn [[Image:$1|thumb|center|$1]]',
+'fileexists-shared-forbidden' => 'En fil med detta namn finns redan bland de delade filerna; vänligen backa och ladda upp din fil under ett annat namn. [[Image:$1|thumb|center|$1]]',
+'successfulupload'            => 'Uppladdningen lyckades',
+'fileuploaded'                => 'Filen "$1" laddades upp korrekt.
+Följ länken ($2) till beskrivningssidan, och fyll där i
+information om filen: var den kommer ifrån, 
+när den skapades, vem som gjort den, om själva innehållet, och så mycket om möjligt annat du vet om den.',
+'uploadwarning'               => 'Uppladdningsvarning',
+'savefile'                    => 'Spara fil',
+'uploadedimage'               => '"[[$1]]" laddades upp',
+'uploaddisabled'              => 'Uppladdningsfunktionen är avstängd',
+'uploaddisabledtext'          => 'Uppladdning av filer är avstängd på den här wikin',
+'uploadscripted'              => 'Denna fil innehåller HTML eller script, som webbläsare kan komma att tolka felaktigt.',
+'uploadcorrupt'               => 'Antingen har det blivit något fel på filen, eller så har den en felaktig filändelse. Kontrollera din fil, och ladda upp på nytt.',
+'uploadvirus'                 => 'Filen innehåller virus! Detaljer: $1',
+'sourcefilename'              => 'Ursprungsfilens namn',
+'destfilename'                => 'Nytt filnamn',
+'watchthisupload'             => 'Bevaka sidan',
+'filewasdeleted'              => 'En fil med detta namn har tidigare laddats upp och därefter tagits bort. Du bör kontrollera $1 innan du fortsätter att ladda upp den.',
+
+'upload-proto-error'      => 'Felaktigt protokoll',
+'upload-proto-error-text' => 'Fjärruppladdning kräver URL:ar som börjar med <code>http://</code> eller <code>ftp://</code>.',
+'upload-file-error'       => 'Internt fel',
+'upload-file-error-text'  => 'Ett internt fel inträffade när en temporär fil skulle skapas på servern. Kontakta en systemadministratör.',
+'upload-misc-error'       => 'Okänt uppladdningsfel',
+'upload-misc-error-text'  => 'Ett okänt fel inträffade under uppladdningen. Kontrollera att URL:en giltig och frösök igen. Om problemet kvarstår, kontakta en systemadministratör.',
+
+# Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
+'upload-curl-error6'       => 'URL:en kunde inte nås',
+'upload-curl-error6-text'  => 'Den angivna URL:en kunde inte nås. Kontrollera att den är korrekt och att webbplatsern fungerar.',
+'upload-curl-error28'      => 'Timeout för uppladdningen',
+'upload-curl-error28-text' => 'Webbplatsen tog för lång tid på sig att svara. Kontrollera att den är uppe och försök igen om en liten stund.',
+
+'license'            => 'Licens',
+'nolicense'          => 'Ingen angiven',
+'upload_source_url'  => ' (en giltig URL som är allmänt åtkomlig)',
+'upload_source_file' => ' (en fil på din dator)',
+
+# Image list
+'imagelist'                 => 'Bildlista',
+'imagelisttext'             => 'Nedan finns en lista med <strong>$1</strong> {{plural:$1|bild|bilder}} sorterad <strong>$2</strong>.',
+'imagelistforuser'          => 'Listan visar endast bilder som är uppladdade av $1.',
+'getimagelist'              => 'hämta bildlista',
+'ilsubmit'                  => 'Sök',
+'showlast'                  => 'Visa de senaste $1 bilderna sorterade $2.',
+'byname'                    => 'efter namn',
+'bydate'                    => 'efter datum',
+'bysize'                    => 'efter storlek',
+'imgdelete'                 => 'ta bort',
+'imgdesc'                   => 'beskrivning',
+'imgfile'                   => 'fil',
+'imglegend'                 => 'Bildtext: (beskrivning) = visa/redigera bildtext.',
+'imghistory'                => 'Bildhistorik',
+'revertimg'                 => 'återgå',
+'deleteimg'                 => 'radera',
+'deleteimgcompletely'       => 'radera',
+'imghistlegend'             => 'Beskrivning: (nuvarande) = detta är den nuvarande bilden,
+(ta bort) = ta bort den gamla version, (återgå) = återgå till en gammal version.
+<br /><i>Klicka på ett datum för att se bilden som laddades upp den dagen</i>.',
+'imagelinks'                => 'Bildlänkar',
+'linkstoimage'              => 'Följande sidor länkar till denna bild:',
+'nolinkstoimage'            => 'Inga sidor länkar till den här bilden.',
+'sharedupload'              => 'Denna fil är uppladdad som delad, och kan användas av andra projekt.',
+'shareduploadwiki'          => 'Vänligen se $1 för mer information.',
+'shareduploadwiki-linktext' => 'Filens beskrivningssida',
+'noimage'                   => 'Det finns ingen fil med detta namn. Du kan $1.',
+'noimage-linktext'          => 'ladda upp den',
+'uploadnewversion-linktext' => 'Ladda upp en ny version av denna fil',
+'imagelist_date'            => 'Datum',
+'imagelist_name'            => 'Filnamn',
+'imagelist_user'            => 'Användare',
+'imagelist_size'            => 'Storlek (bytes)',
+'imagelist_description'     => 'Filbeskrivning',
+'imagelist_search_for'      => 'Sök efter bildnamn:',
+
+# MIME search
+'mimesearch'         => 'MIME-sökning',
+'mimesearch-summary' => 'På den här sidan kan du söka efter filer via dess MIME-typ. Input: contenttype/subtype, t.ex. <tt>image/jpeg</tt>.',
+'mimetype'           => 'MIME-typ:',
+'download'           => 'ladda ner',
+
+# Unwatched pages
+'unwatchedpages' => 'Oövervakade sidor',
+
+# List redirects
+'listredirects' => 'Lista över omdirigeringar',
+
+# Unused templates
+'unusedtemplates'     => 'Oanvända mallar',
+'unusedtemplatestext' => 'Denna sida listar alla de sidor i namnrymden Mall som inte inkluderas på någon annan sida. Innan mallarna raderas, kontrollera att det inte finns andra länkar till dem.',
+'unusedtemplateswlh'  => 'andra länkar',
+
+# Random redirect
+'randomredirect' => 'Slumpvald omdirigering',
+
+# Statistics
+'statistics'             => 'Statistik',
+'sitestats'              => 'Statistiksida',
+'userstats'              => 'Användarstatistik',
+'sitestatstext'          => "I databasen finns just nu <b>$1</b> {{PLURAL:$1|sida|sidor}}, inklusive diskussionssidor, sidor om {{SITENAME}}, korta stumpartiklar, omdirigeringssidor, och andra sidor som inte kan räknas som artiklar. Om man tar bort ovanstående, återstår <b>$2</b> {{PLURAL:$2|riktig artikel|riktiga artiklar}}.
+
+'''$8''' {{PLURAL:$8|fil|filer}} har laddats upp.
+
+Sedan denna wiki startades har sidor visats totalt <b>$3</b> {{PLURAL:$3|gång|gånger}}, och <b>$4</b> {{PLURAL:$4|sida|sidor}} har ändrats. Detta är i genomsnitt <b>$5</b> ändringar per sida, och <b>$6</b> sidvisningar per ändring.
+
+[http://meta.wikimedia.org/wiki/Help:Job_queue Jobbkön]s längd är för tillfället '''$7'''.",
+'userstatstext'          => "Det finns '''$1''' {{PLURAL:$1|registrerad|registrerade}} användare. Av dem är '''$2''' (eller '''$4%''') $5.",
+'statistics-mostpopular' => 'Mest besökta sidor',
+
+'disambiguations'      => 'Sidor som länkar till förgreningssidor',
+'disambiguationspage'  => 'Template:Förgrening',
+'disambiguations-text' => "Följande sidor länkar till ''förgreningssidor''. Länkarna bör troligtvis ändras så att de länkar till en artikel istället.<br />En sida anses vara en förgreningssida om den inkluderar en mall som länkas till från [[MediaWiki:disambiguationspage]].",
+
+'doubleredirects'     => 'Dubbla omdirigeringar',
+'doubleredirectstext' => '<b>OBS!</b> Denna lista kan innehålla falska resultat. Detta betyder normalt att det finns ytterligare text under den första #REDIRECT.<br />Varje rad innehåller en länk till den första och andra omdirigering och den första raden av den andra omdirigeringen ger oftast den "riktiga" artikeln, vilket egentligen den första omdirigeringen ska peka på.',
+
+'brokenredirects'        => 'Dåliga omdirigeringar',
+'brokenredirectstext'    => 'Följande länkar omdirigerar till en artikel som inte existerar.',
+'brokenredirects-edit'   => '(redigera)',
+'brokenredirects-delete' => '(radera)',
+
+'withoutinterwiki'        => 'Sidor utan språklänkar',
+'withoutinterwiki-header' => 'Följande sidor saknar länkar till andra språkversioner:',
+
+'fewestrevisions'         => 'Artiklar med minst antal ändringar',
+
+# Miscellaneous special pages
+'nbytes'                  => '$1 {{PLURAL:$1|byte|bytes}}',
+'ncategories'             => '$1 {{PLURAL:$1|kategori|kategorier}}',
+'nlinks'                  => '$1 {{PLURAL:$1|länk|länkar}}',
+'nmembers'                => '$1 {{PLURAL:$1|medlem|medlemmar}}',
+'nrevisions'              => '$1 {{PLURAL:$1|ändring|ändringar}}',
+'nviews'                  => '$1 {{PLURAL:$1|visning|visningar}}',
+'specialpage-empty'       => 'Den här sidan är tom.',
+'lonelypages'             => 'Föräldralösa sidor',
+'lonelypagestext'         => 'Följande sidor länkas inte till från någon annan sida på den här wikin.',
+'uncategorizedpages'      => 'Ej kategoriserade sidor',
+'uncategorizedcategories' => 'Ej kategoriserade kategorier',
+'uncategorizedimages'     => 'Bilder utan kategori',
+'unusedcategories'        => 'Tomma kategorier',
+'unusedimages'            => 'Oanvända bilder',
+'popularpages'            => 'Populära sidor',
+'wantedcategories'        => 'Önskade kategorier',
+'wantedpages'             => 'Önskade sidor',
+'mostlinked'              => 'Sidor med flest länkar till sig',
+'mostlinkedcategories'    => 'Kategorier med flest länkar till sig',
+'mostcategories'          => 'Artiklar med flest kategorier',
+'mostimages'              => 'Bilder med flest länkar till sig',
+'mostrevisions'           => 'Artiklar med flest ändringar',
+'allpages'                => 'Alla sidor',
+'prefixindex'             => 'Prefixindex',
+'randompage'              => 'Slumpartikel',
+'shortpages'              => 'Korta sidor',
+'longpages'               => 'Långa sidor',
+'deadendpages'            => 'Sidor utan länkar',
+'deadendpagestext'        => 'Följande sidor saknar länkar till andra sidor på den här wikin.',
+'protectedpages'          => 'Skyddade sidor',
+'protectedpagestext'      => 'Följande sidor är skyddade mot redigering eller flyttning.',
+'protectedpagesempty'     => 'Inga sidor är skyddade under de villkoren.',
+'listusers'               => 'Användarlista',
+'specialpages'            => 'Specialsidor',
+'spheading'               => 'Specialsidor för alla användare',
+'restrictedpheading'      => 'Specialsidor med begränsad åtkomst',
+'rclsub'                  => '(som "$1" länkar till)',
+'newpages'                => 'Nya sidor',
+'newpages-username'       => 'Användare:',
+'ancientpages'            => 'Äldsta artiklarna',
+'intl'                    => 'Interwiki-länkar',
+'move'                    => 'Flytta',
+'movethispage'            => 'Flytta denna sida',
+'unusedimagestext'        => '<p>Lägg märke till att andra hemsidor kan länka till bilder 
+med en direkt URL, och kan därför bli listade här trots att de används kontinuerligt.',
+'unusedcategoriestext'    => 'Dessa existerande kategorier innehåller inga artiklar eller underkategorier.',
+
+# Book sources
+'booksources'               => 'Bokkällor',
+'booksources-search-legend' => 'Sök efter bokkällor',
+'booksources-isbn'          => 'ISBN:',
+'booksources-go'            => 'Sök',
+'booksources-text'          => 'Nedan följer en lista över länkar till webbplatser som säljer nya och begagnade böcker, och som kanske har ytterligare information om de böcker du söker.',
+
+'categoriespagetext' => 'Följande kategorier finns på {{SITENAME}}.',
+'data'               => 'Data',
+'userrights'         => 'Användarrättigheter',
+'groups'             => 'Användargrupper',
+'isbn'               => 'ISBN',
+'alphaindexline'     => '$1 till $2',
+'version'            => 'Version',
+
+# Special:Log
+'specialloguserlabel'  => 'Användare:',
+'speciallogtitlelabel' => 'Titel:',
+'log'                  => 'Loggar',
+'log-search-legend'    => 'Sök efter loggar',
+'log-search-submit'    => 'Sök',
+'alllogstext'          => 'Kombinerad visning av alla tillgängliga loggar för {{SITENAME}}. Du kan avgränsa sökningen och få färre träffar genom att ange typ av logg, användarnamn, eller sida.',
+'logempty'             => 'Inga matchande träffar i loggen.',
+'log-title-wildcard'   => 'Sök efter sidtitlar som börjar med texten',
+
+# Special:Allpages
+'nextpage'          => 'Nästa sida ($1)',
+'prevpage'          => 'Föregående sida ($1)',
+'allpagesfrom'      => 'Visa sidor från och med:',
+'allarticles'       => 'Alla artiklar',
+'allinnamespace'    => 'Alla sidor (i namnrymden $1)',
+'allnotinnamespace' => 'Alla sidor (inte i namnrymden $1)',
+'allpagesprev'      => 'Föregående',
+'allpagesnext'      => 'Nästa',
+'allpagessubmit'    => 'Utför',
+'allpagesprefix'    => 'Visa sidor med prefixet:',
+'allpagesbadtitle'  => 'Den sökta sidtiteln var ogiltig eller så innehöll den ett prefix för annan språkversion eller interwiki-prefix. Titeln kan innehålla bokstäver som inte är tillåtna i sidtitlar.',
+
+# Special:Listusers
+'listusersfrom'      => 'Visa användare från och med:',
+'listusers-submit'   => 'Visa',
+'listusers-noresult' => 'Ingen användare hittades.',
+
+# E-mail user
+'mailnologin'     => 'Ingen adress att skicka till',
+'mailnologintext' => 'För att kunna skicka e-post till andra användare, måste du vara [[Special:Userlogin|inloggad]] och ha angivit en korrekt e-postadress i dina [[Special:Preferences|användarinställningar]].',
+'emailuser'       => 'Skicka e-post till den här användaren',
+'emailpage'       => 'Skicka e-post till annan användare',
+'emailpagetext'   => 'Om den här användaren har skrivit in en korrekt e-postadress i sina
+användarinställningar, kommer formuläret nedan att skicka ett meddelande.
+Den e-postadress du har angivit i dina användarinställningar kommer att skrivas
+i "Från"-fältet i detta meddelande, så mottagaren har möjlighet att svara.',
+'usermailererror' => 'Fel i hanteringen av mail:',
+'defemailsubject' => '{{SITENAME}} e-post',
+'noemailtitle'    => 'Ingen e-postadress',
+'noemailtext'     => 'Den här användaren har antingen inte angivet en korrekt e-postadress, valt att inte ta emot mail från andra användare, eller inte verifierat sin e-postadress.',
+'emailfrom'       => 'Från',
+'emailto'         => 'Till',
+'emailsubject'    => 'Ämne',
+'emailmessage'    => 'Meddelande',
+'emailsend'       => 'Skicka',
+'emailccme'       => 'Skicka en kopia av meddelandet till mig.',
+'emailccsubject'  => 'Kopia av ditt meddelande till $1: $2',
+'emailsent'       => 'E-post har nu skickats',
+'emailsenttext'   => 'Din e-post har skickats.',
+
+# Watchlist
+'watchlist'            => 'Min övervakningslista',
+'mywatchlist'            => 'Min övervakningslista',
+'watchlistfor'         => "(för '''$1''')",
+'nowatchlist'          => 'Du har inga sidor i din övervakningslista.',
+'watchlistanontext'    => 'Du måste $1 för att se eller redigera din övervakningslista.',
+'watchlistcount'       => "'''Du har $1 {{PLURAL:$1|post|poster}} på din övervakningslista, inklusive diskussionssidor.'''",
+'clearwatchlist'       => 'Töm övervakningslistan',
+'watchlistcleartext'   => 'Är du säker på att du vill ta bort dem?',
+'watchlistclearbutton' => 'Töm övervakningslista',
+'watchlistcleardone'   => 'Din övervakningslista har tömts. $1 {{PLURAL:$1|post|poster}} togs bort.',
+'watchnologin'         => 'Du är inte inloggad',
+'watchnologintext'     => 'Du måste vara [[Special:Userlogin|inloggad]] för att kunna göra ändringar i din övervakningslista.',
+'addedwatch'           => 'Tillagd på övervakningslistan',
+'addedwatchtext'       => 'Sidan "[[:$1|$1]]" har satts upp på din [[Special:Watchlist|övervakningslista]]. 
+Framtida ändringar av den här sidan och dess diskussionssida kommer att listas där, och sidan kommer att markeras med \'\'\'fet stil\'\'\' i [[Special:Recentchanges|listan över de senaste ändringarna]] för att synas bättre.<br /><br />
+Om du inte längre vill att sidan skall finnas på din övervakningslista, klicka på  "avbevaka" uppe till höger.',
+'removedwatch'         => 'Borttagen från övervakningslista',
+'removedwatchtext'     => 'Sidan "$1" har blivit borttagen från din övervakningslista',
+'watch'                => 'bevaka',
+'watchthispage'        => 'Bevaka denna sida',
+'unwatch'              => 'avbevaka',
+'unwatchthispage'      => 'Stoppa övervakningen av denna sida',
+'notanarticle'         => 'Inte en artikel',
+'watchnochange'        => 'Inga av dina övervakade sidor har ändrats inom den visade tidsperioden.',
+'watchdetails'         => '* $1 {{PLURAL:$1|sida övervakad|sidor övervakade}} (utöver diskussionssidor).
+* [[Special:Watchlist/edit|Visa och redigera hela listan]]
+* [[Special:Watchlist/clear|Töm övervakningslistan]]',
+'wlheader-enotif'      => '* Bekräftelse per e-post är aktiverad.',
+'wlheader-showupdated' => "* Sidor som ändrats sedan ditt senaste besök visas i '''fet stil.'''",
+'watchmethod-recent'   => 'letar efter övervakade sidor bland nyligen gjorda ändringar',
+'watchmethod-list'     => 'letar i övervakningslistan efter nyligen gjorda ändringar',
+'removechecked'        => 'Ta bort markerade sidor från övervakningslistan',
+'watchlistcontains'    => 'Din övervakningslista innehåller $1 {{PLURAL:$1|sida|sidor}}.',
+'watcheditlist'        => "Här är hela din övervakningslista, i alfabetisk ordning. Kryssa i rutan vid de sidor du vill ta bort från din övervakningslista, och klicka på knappen 'Ta bort' längst ner på sidan.",
+'removingchecked'      => 'Tar bort markerade sidor från övervakningslistan...',
+'couldntremove'        => "Kunde inte ta bort artikeln '$1'...",
+'iteminvalidname'      => "Problem med sidan '$1', ogiltigt namn...",
+'wlnote'               => 'Nedan finns {{PLURAL:$1|den senaste ändringen|de senaste $1 ändringarna}} under {{PLURAL:$2|den senaste timmen|de senaste <b>$2</b> timmarna}}.',
+'wlshowlast'           => 'Visa senaste $1 timmarna $2 dagarna $3',
+'wlsaved'              => 'Detta är en sparad version av din övervakningslista.',
+'watchlist-show-bots'  => 'Visa roboredigeringar',
+'watchlist-hide-bots'  => 'Göm robotredigeringar',
+'watchlist-show-own'   => 'Visa mina redigeringar',
+'watchlist-hide-own'   => 'Göm mina redigeringar',
+'watchlist-show-minor' => 'Visa mindre ändringar',
+'watchlist-hide-minor' => 'Göm mindre ändringar',
+'wldone'               => 'Klar.',
+
+# Displayed when you click the "watch" button and it's in the process of watching
+'watching'   => 'Bevakar...',
+'unwatching' => 'Avbevakar...',
+
+'enotif_mailer'      => '{{SITENAME}}s system för att få meddelanden om förändringar per e-post',
+'enotif_reset'       => 'Markera alla sidor som besökta',
+'enotif_newpagetext' => 'Detta är en ny sida.',
+'changed'            => 'ändrad',
+'created'            => 'skapad',
+'enotif_subject'     => '{{SITENAME}}-sidan $PAGETITLE har blivit $CHANGEDORCREATED av $PAGEEDITOR',
+'enotif_lastvisited' => 'På $1 återfinner du alla ändringar sedan ditt senaste besök.',
+'enotif_body'        => '$WATCHINGUSERNAME,
+
+{{SITENAME}}-sidan $PAGETITLE har blivit $CHANGEDORCREATED $PAGEEDITDATE av $PAGEEDITOR; den nuvarande versionen hittar du på $PAGETITLE_URL.
+
+$NEWPAGE
+
+Angiven sammanfattning av redigeringen: $PAGESUMMARY $PAGEMINOREDIT 
+
+Kontakta användaren:
+e-post: $PAGEEDITOR_EMAIL
+wiki: $PAGEEDITOR_WIKI
+
+Såvida du inte besöker sidan, kommer du inte att få flera meddelanden om ändringar av sidan. Du kan också ta bort flaggan för meddelanden om ändringar på alla sidor i din övervakningslista.
+
+Hälsningar från {{SITENAME}}s meddelandesystem
+
+--
+För att ändra inställningarna i din övervakningslista, besök
+{{fullurl:Special:Watchlist/edit}}
+
+Feedback och hjälp:
+{{fullurl:Help:Innehåll}}',
+
+# Delete/protect/revert
+'deletepage'                  => 'Ta bort sida',
+'confirm'                     => 'Bekräfta',
+'excontent'                   => "Före radering: '$1'",
+'excontentauthor'             => "sidan innehöll '$1' (den enda som skrivit var '$2')",
+'exbeforeblank'               => "Före tömning: '$1'",
+'exblank'                     => 'sidan var tom',
+'confirmdelete'               => 'Bekräfta borttagning',
+'deletesub'                   => '(Tar bort "$1")',
+'historywarning'              => 'Varning: Sidan du håller på att radera har en historik:',
+'confirmdeletetext'           => 'Du håller på att permanent ta bort en sida,
+eller bild med all dess historik, från databasen.
+Bekräfta att du förstår vad du håller på med och vilka konsekvenser
+detta leder till, och att det följer {{SITENAME}}s allmänna riktlinjer.',
+'actioncomplete'              => 'Genomfört',
+'deletedtext'                 => '"$1" har blivit borttagen. Artikelns historia finns kvar i [[Special:Undelete/$1]]. Se loggen över de senaste raderingarna, $2',
+'deletedarticle'              => 'raderade "$1"',
+'dellogpage'                  => 'Raderingar',
+'dellogpagetext'              => 'Nedan listas de senaste raderingarna och återställningarna.',
+'deletionlog'                 => 'raderingslogg',
+'reverted'                    => 'Återgått till tidigare version',
+'deletecomment'               => 'Anledning till borttagning',
+'imagereverted'               => 'Återställningen av nyare artikelversion lyckades',
+'rollback'                    => 'Rulla tillbaka ändringar',
+'rollback_short'              => 'Återställning',
+'rollbacklink'                => 'rulla tillbaka',
+'rollbackfailed'              => 'Tillbakarullning misslyckades',
+'cantrollback'                => 'Det gick inte att rulla tillbaka, då artikeln redigerats av en enda användare och äldre versioner saknas.',
+'alreadyrolled'               => 'Det gick inte att rulla tillbaka den sista redigeringen av [[User:$2|$2]] ([[User talk:$2|diskussion]]) på sidan [[:$1|$1]]. Någon annan har redan rullat tillbaka, eller redigerat sidan. Sidan ändrades senast av [[User:$3|$3]] ([[User talk:$3|diskussion]]).',
+'editcomment'                 => 'Redigeringskommentaren var: "<i>$1</i>".', # only shown if there is an edit comment
+'revertpage'                  => 'Återställt redigeringar av  [[Special:Contributions/$2|$2]] ([[User talk:$2|användardiskussion]]); återställd till senaste version av [[User:$1|$1]]',
+'sessionfailure'              => 'Något med din session som inloggad är på tok. Din begärda åtgärd har avbrutits, för att förhindra att någon kapar din session. Klicka på "Tillbaka" i din webbläsare och ladda om den sida du kom ifrån. Försök sedan igen.',
+'protectlogpage'              => 'Skrivskydd',
+'protectlogtext'              => 'Detta är en lista över applicerande och borttagande av skrivskydd.',
+'protectedarticle'            => 'skyddade [[$1]]',
+'unprotectedarticle'          => 'tog bort skydd av $1',
+'protectsub'                  => '(Skyddar "$1")',
+'confirmprotecttext'          => 'Genom att skrivskydda en sida låser du den så att den inte kan redigeras av besökare. I grunden strider detta mot tanken bakom {{SITENAME}} och ska därför användas restriktivt. 
+
+Vill du skrivskydda denna sida?',
+'confirmprotect'              => 'Bekräfta skrivskydd av sida',
+'protectmoveonly'             => 'Enbart skydd mot flyttning av sida',
+'protectcomment'              => 'Anledning till skydd av sidan',
+'protectexpiry'               => 'Varaktighet',
+'protect_expiry_invalid'      => 'Ogiltig varaktighetstid.',
+'protect_expiry_old'          => 'Den angivna varaktighetentiden har redan passerats.',
+'unprotectsub'                => '(Tog bort skydd av "$1")',
+'confirmunprotecttext'        => 'Vill du låsa upp den här sidan?',
+'confirmunprotect'            => 'Bekräfta borttagning av skrivskydd',
+'unprotectcomment'            => 'Anledning till att skrivskyddet tas bort',
+'protect-unchain'             => 'Lås upp flyttillstånd',
+'protect-text'                => 'Du kan visa och ändra skyddsnivån av artikeln <strong>$1</strong>. Kontrollera att du följer riktlinjerna.',
+'protect-locked-blocked'      => 'Du kan inte ändra sidors skydd medan du är blockerad. 
+Här kan du se gällande skyddsinställninger för sidan <strong>$1</strong>:',
+'protect-locked-dblock'       => 'Sidors skydd kan inte ändras på grund av att databasen är låst.
+Här kan du se gällande skyddsinställninger för sidan <strong>$1</strong>:',
+'protect-locked-access'       => 'Du har inte behörighet att ändra sidors skyddsnivåer.
+Här kan du se gällande skyddsinställninger för sidan <strong>$1</strong>:',
+'protect-cascadeon'           => 'Den här sidan är nu skrivskyddad eftersom den inkluderas på sidor som skyddats "kaskaderande". Du kan ändra skyddet av den här sidan, men det påverkar inte det "kaskaderande skyddet". Följande "kaskadskyddade" sidor inkluderar den här sidan:',
+'protect-default'             => '(standard)',
+'protect-level-autoconfirmed' => 'Enbart registrerade användare',
+'protect-level-sysop'         => 'Enbart administratörer',
+'protect-summary-cascade'     => 'kaskaderande',
+'protect-expiring'            => 'upphör den $1 (UTC)',
+'protect-cascade'             => 'Kaskaderande skydd - skydda samtidigt alla sidor som inkluderas på den här sidan.',
+'restriction-type'            => 'Typ av skydd',
+'restriction-level'           => 'Skyddsnivå',
+'minimum-size'                => 'Minsta storlek (bytes)',
+
+# Restrictions (nouns)
+'restriction-edit' => 'Redigering av sidan',
+'restriction-move' => 'Flytt av sidan',
+
+# Restriction levels
+'restriction-level-sysop'         => 'helt låst',
+'restriction-level-autoconfirmed' => 'halvlåst',
+'restriction-level-all'           => 'alla nivåer',
+
+# Undelete
+'undelete'                 => 'Återställ borttagna sidor',
+'undeletepage'             => 'Visa och återställ borttagna sidor',
+'viewdeletedpage'          => 'Visa raderade sidor',
+'undeletepagetext'         => 'Följande sidor har blivit borttagna, men finns fortfarande i ett arkiv och kan återställas. Arkivet kan ibland rensas på gamla versioner.',
+'undeleteextrahelp'        => "* För att återställa alla versioner, välj '''Återställ''' utan att kryssa i några rutor. 
+* För att återställa bara vissa versioner, kryssa i de kryssrutor som hör till de versioner som ska återställas och välj '''Återställ'''. 
+* '''Rensa''' tömmer kommentarfältet och kryssrutorna.",
+'undeleterevisions'        => '$1 {{PLURAL:$1|version|versioner}} arkiverade',
+'undeletehistory'          => 'Om du återställer sidan, kommer alla tidigare versioner att återfinnas i versionshistoriken. Om en ny sida med samma namn har skapats sedan sidan raderades, kommer den återskapade historiken automatiskt att återfinnas i den äldre historiken. Den nuvarande versionen kommer alltså inte att ersättas av de raderade och återskapade.',
+'undeletehistorynoadmin'   => 'Den här artikeln har blivit raderad. Anledningen till detta anges i sammanfattningen nedan, tillsammans med uppgifter om de användare som redigerat sidan innan den raderades. Enbart administratörerna har tillgång till den raderade texten.',
+'undelete-revision'        => 'Raderad version av $1 från den $2',
+'undeleterevision-missing' => 'Versionen finns inte eller är felaktig. Versionen kan ha återställts eller tagits bort från arkivet, du kan också ha följt en felaktig länk.',
+'undeletebtn'              => 'Återställ',
+'undeletereset'            => 'Rensa',
+'undeletecomment'          => 'Kommentar:',
+'undeletedarticle'         => 'återställde "$1"',
+'undeletedrevisions'       => '{{PLURAL:$1|en version återställd|$1 versioner återställda}}',
+'undeletedrevisions-files' => '$1 {{PLURAL:$1|version|versioner}} och $2 {{PLURAL:$2|fil|filer}} återställda',
+'undeletedfiles'           => '$1 {{PLURAL:$1|fil återställd|filer återställda}}',
+'cannotundelete'           => 'Återställning misslyckades; kanske någon redan har återställt sidan.',
+'undeletedpage'            => "<big>'''$1 har återställts'''</big>
+
+I  [[Special:Log/delete|borttagningsloggen]] kan du hitta information om nyligen borttagna och återställda sidor.",
+'undelete-header'          => 'Se [[Special:Log/delete|raderingsloggen]] för nyligen raderade sidor.',
+'undelete-search-box'      => 'Sök efter raderade sidor',
+'undelete-search-prefix'   => 'Sidor som börjar med:',
+'undelete-search-submit'   => 'Sök',
+'undelete-no-results'      => 'Inga sidor med sådan titel hittades i arkivet över raderade sidor.',
+
+# Namespace form on various pages
+'namespace' => 'Namnrymd:',
+'invert'    => 'Uteslut vald namnrymd',
+
+# Contributions
+'contributions' => 'Användarbidrag',
+'mycontris'     => 'Mina bidrag',
+'contribsub2'    => 'För $1 ($2)',
+'nocontribs'    => 'Inga ändringar hittades, som motsvarar dessa kriterier',
+'ucnote'        => 'Nedan visas denna användarens senaste <b>$1</b> ändringar, under de senaste <b>$2</b> dagarna.',
+'uclinks'       => 'Visa de senaste $1 ändringarna. Visa de senaste $2 dagarna.',
+'uctop'         => ' (senaste)',
+
+'sp-contributions-newest'      => 'Nyaste',
+'sp-contributions-oldest'      => 'Äldsta',
+'sp-contributions-newer'       => '$1 nyare',
+'sp-contributions-older'       => '$1 äldre',
+'sp-contributions-newbies'     => 'Visa endast bidrag från nya konton',
+'sp-contributions-newbies-sub' => 'För nybörjare',
+'sp-contributions-blocklog'    => 'Blockeringslogg',
+'sp-contributions-search'      => 'Sök efter användarbidrag',
+'sp-contributions-username'    => 'IP-adress eller användarnamn:',
+'sp-contributions-submit'      => 'Sök',
+
+'sp-newimages-showfrom' => 'Visa nya bilder från och med $1',
+
+# What links here
+'whatlinkshere'      => 'Sidor som länkar hit',
+'notargettitle'      => 'Inget mål',
+'notargettext'       => 'Du har inte angivit någon sida eller användare att utföra denna funktion på.',
+'linklistsub'        => '(Länklista)',
+'linkshere'          => 'Följande sidor länkar till [[:$1]]:',
+'nolinkshere'        => 'Inga sidor länkar till [[:$1]].',
+'nolinkshere-ns'     => "Inga sidor i den angivna namnrymden länkar till '''[[:$1]]'''.",
+'isredirect'         => 'transportsida',
+'istemplate'         => 'inkluderad som mall',
+'whatlinkshere-prev' => 'förra $1',
+'whatlinkshere-next' => 'nästa $1',
+
+# Block/unblock
+'blockip'                     => 'Blockera IP-adress',
+'blockiptext'                 => 'Formuläret nedan används för att blockera specifika användarnamns eller IP-adressers möjlighet att redigera sidor. Detta bör göras endast för att förhindra vandalism, och enligt gällande [[{{MediaWiki:Policy-url}}|policy]]. Ange orsaken nedan (exempelvis genom att nämna sidor som blivit vandaliserade).',
+'ipaddress'                   => 'IP-adress',
+'ipadressorusername'          => 'IP-adress eller användarnamn',
+'ipbexpiry'                   => 'Varaktighet',
+'ipbreason'                   => 'Anledning',
+'ipbreasonotherlist'          => 'Annan anledning',
+
+// These are examples only. They can be translated but should be adjusted via [[MediaWiki:ipbreason-list]] by the local community
+// *# defines a reason group in the drow down menu
+// * defines a reason
+'ipbreason-list'              => '
+*#Anledningar för IP-adresser
+*vandalism
+*länkspam
+*#Anledningar för användare
+*förolämpningar
+*marionetter',
+'ipbanononly'                 => 'Blockera bara oinloggade användare',
+'ipbcreateaccount'            => 'Förhindra registrering av användarkonton',
+'ipbenableautoblock'          => 'Blockera automatiskt IP-adresser som användaren försöker redigera ifrån',
+'ipbsubmit'                   => 'Blockera den här IP-adressen',
+'ipbother'                    => 'Annan tidsperiod',
+'ipboptions'                  => '2 timmar:2 hours,1 dag:1 day,3 dagar:3 days,1 vecka:1 week,2 veckor:2 weeks,1 månad:1 month,3 månader:3 months,6 månader:6 months,1 år:1 year,oändlig:infinite',
+'ipbotheroption'              => 'annan tidsperiod',
+'ipbotherreason'              => 'Annan/ytterligare anledning',
+'ipbhidename'                 => 'Dölj användarnamnet/IP-adressen från blockeringsloggen och listorna över blockerade användare och användare',
+'badipaddress'                => 'Du har inte skrivit IP-adressen korrekt.',
+'blockipsuccesssub'           => 'Blockeringen är utförd',
+'blockipsuccesstext'          => 'IP-adressen "$1" har blockerats.<br /><br />
+Lämna gärna besked om detta på [[User talk:$1|användarens diskussionssida]]. För att se alla blockeringar som ligger just nu, gå till [[Special:Ipblocklist|listan över blockeringar]].<br /><br />
+En logg över blockeringar och borttagningar av blockeringar finns på [[Special:Log/Block]].',
+'ipb-unblock-addr'            => 'Ta bort blockering av $1',
+'ipb-unblock'                 => 'Ta bort blockering av en användare eller IP-adress',
+'ipb-blocklist-addr'          => 'Visa gällande blockeringar av $1',
+'ipb-blocklist'               => 'Visa gällande blockeringar',
+'unblockip'                   => 'Ta bort blockering av IP-adress',
+'unblockiptext'               => 'Använd formuläret nedan för att ta bort blockeringen av en IP-adress.',
+'ipusubmit'                   => 'Ta bort blockeringen av den här adressen',
+'unblocked'                   => 'Blockeringen av [[User:$1|$1]] har hävts',
+'ipblocklist'                 => 'Lista över blockerade IP-adresser',
+'ipblocklist-submit'          => 'Sök',
+'blocklistline'               => '$1: $2 blockerar $3, blockeringen upphör $4',
+'infiniteblock'               => 'evig',
+'expiringblock'               => 'förfaller $1',
+'anononlyblock'               => 'endast för oinloggade',
+'noautoblockblock'            => 'utan automatisk blockering',
+'createaccountblock'          => 'kontoregistrering blockerad',
+'ipblocklistempty'            => 'Listan över blockerade IP-adresser är tom, eller så är den angivna användaren inte blockerad.',
+'blocklink'                   => 'blockera',
+'unblocklink'                 => 'ta bort blockering',
+'contribslink'                => 'bidrag',
+'autoblocker'                 => 'Automatisk blockering eftersom du har samma IP-adress som "$1". Motivering till blockeringen: "$2".',
+'blocklogpage'                => 'Blockeringar',
+'blocklogentry'               => 'blockerade "[[$1]]" $2 $3',
+'blocklogtext'                => 'Detta är en logg över blockeringar och avblockeringar. Automatiskt blockerade IP-adresser listas ej. En lista över IP-adresser och användare som för närvarande är blockerade finns på [[Special:Ipblocklist|IP-blocklistan]].',
+'unblocklogentry'             => 'tog bort blockering av "$1"',
+'block-log-flags-anononly'    => 'bara oinloggade',
+'block-log-flags-nocreate'    => 'hindrar kontoregistrering',
+'block-log-flags-autoblock'   => 'med automatblockering',
+'range_block_disabled'        => 'Möjligheten för administratörer att blockera intervall av IP-adresser har stängts av.',
+'ipb_expiry_invalid'          => 'Förfallotiden ogiltig',
+'ipb_already_blocked'         => '"$1" är redan blockerad',
+'ip_range_invalid'            => 'Ogiltigt IP-intervall.',
+'proxyblocker'                => 'Proxy-block',
+'ipb_cant_unblock'            => 'Fel: Hittade inte blockering $1. Det är möjligt att den redan har upphävts.',
+'proxyblockreason'            => 'Din IP-adress har blivit blockerad eftersom den tillhör en öppen proxy. Kontakta din internetleverantör eller din organisations eller företags tekniska support, och informera dem om denna allvarliga säkerhetsrisk.',
+'proxyblocksuccess'           => 'Gjort.',
+'sorbs'                       => 'SORBS DNSBL',
+'sorbsreason'                 => 'Din IP-adress finns med på [http://www.sorbs.net SORBS] DNSBL:s lista över öppna proxies.',
+'sorbs_create_account_reason' => 'Din IP-adress finns med på [http://www.sorbs.net SORBS] DNSBL-lista över öppna proxyn. Du kan därför inte skapa något användarkonto.',
+
+# Developer tools
+'lockdb'              => 'Lås databas',
+'unlockdb'            => 'Lås upp databas',
+'lockdbtext'          => 'En låsning av databasen hindrar alla användare från att redigera sidor, ändra inställningar och andra saker som kräver ändringar i databasen.
+Bekräfta att du verkligen vill göra detta, och att du kommer att låsa upp databasen när underhållet är utfört.',
+'unlockdbtext'        => 'Om du låser upp databasen kommer alla användare att åter kunna redigera sidor, ändra sina inställningar och så vidare. Bekräfta att du vill göra detta.',
+'lockconfirm'         => 'Ja, jag vill verkligen låsa databasen.',
+'unlockconfirm'       => 'Ja, jag vill låsa upp databasen.',
+'lockbtn'             => 'Lås databasen',
+'unlockbtn'           => 'Lås upp databasen',
+'locknoconfirm'       => 'Du har inte bekräftat låsningen.',
+'lockdbsuccesssub'    => 'Databasen har låsts',
+'unlockdbsuccesssub'  => 'Databasen har låsts upp',
+'lockdbsuccesstext'   => 'Databasen är nu låst.
+<br />Kom ihåg att ta bort låsningen när du är färdig med ditt underhåll.',
+'unlockdbsuccesstext' => 'Databasen är upplåst.',
+'lockfilenotwritable' => 'Det går inte att skriva till databasens låsfil. För att låsa eller låsa upp databasen, så måste webbservern kunna skriva till den filen.',
+'databasenotlocked'   => 'Databasen är inte låst.',
+
+# Move page
+'movepage'                => 'Flytta sida',
+'movepagetext'            => "'''Om en diskussionssida hör till sidan,''' kommer denna automatiskt att flyttas med såvida inte * flytten spänner över flera [[Project:Namnrymd|namnrymder]], eller * en diskussionssida redan finns på den tilltänkta destinationen, eller * rutan nedan är urklickad. Ibland är det önskvärt att flytta denna diskussionssida manuellt.",
+'movepagetalktext'        => "Diskussionssidan kommer att även den automatiskt flyttas '''om inte''':
+*Det redan finns en diskussionssida som inte är tom med det nya namnet, eller
+*Du avmarkerar rutan nedan.",
+'movearticle'             => 'Flytta sida',
+'movenologin'             => 'Inte inloggad',
+'movenologintext'         => 'För att kunna flytta en sida, måste du måste vara registrerad som användare, och [[Special:Userlogin|inloggad]].',
+'newtitle'                => 'Till det nya uppslagsordet',
+'move-watch'              => 'Bevaka denna sida',
+'movepagebtn'             => 'Flytta sidan',
+'pagemovedsub'            => 'Flyttningen lyckades',
+'pagemovedtext'           => 'Sidan "[[$1]]" flyttad till "[[$2]]".
+
+[[{{ns:Special}}:Whatlinkshere/$2|Kontrollera]] gärna att flytten inte orsakat några dubbla omdirigeringar.',
+'articleexists'           => 'Antingen existerar redan en sida med det namnet, eller så har du valt ett namn som inte är tillåtet. 
+Välj något annat namn istället.',
+'talkexists'              => 'Sidan flyttades, men eftersom en annan diskussionssida redan fanns på destinationen kunde diskussionssidan inte flyttas med. Försök att manuellt sammanfoga de bägge diskusionssidornas innehåll till en sida.',
+'movedto'                 => 'flyttad till',
+'movetalk'                => 'Flytta även diskussionssidan ifall det går.',
+'talkpagemoved'           => 'Den diskussionssida som hör till flyttades också.',
+'talkpagenotmoved'        => 'Den diskussionssida som hör till flyttades <strong>inte</strong>.',
+'1movedto2'               => 'flyttade [[$1]] till [[$2]]',
+'1movedto2_redir'         => 'flyttade [[$1]] till [[$2]], som var en omdirigeringssida',
+'movelogpage'             => 'Sidflyttningar',
+'movelogpagetext'         => 'Listan nedan visar sidor som flyttats.',
+'movereason'              => 'Anledning',
+'revertmove'              => 'flytta tillbaka',
+'delete_and_move'         => 'Radera och flytta',
+'delete_and_move_text'    => '==Radering krävs== Den titel du vill flytta artikeln till, "[[:$1|$1]]", finns redan. Vill du radera den för att möjliggöra flytt av denna sida dit?',
+'delete_and_move_confirm' => 'Ja, radera sidan',
+'delete_and_move_reason'  => 'Raderad för att flytta hit en annan sida.',
+'selfmove'                => 'Ursprungstitel och destinationstitel är identiska. Sidan kan inte flyttas till sig själv.',
+'immobile_namespace'      => 'Det går inte att flytta artiklar till den namnrymd du angivit, då denna ej kan utökas.',
+
+# Export
+'export'            => 'Exportera sidor',
+'exporttext'        => 'Du kan exportera en eller flera sidors text och versionshistorik i XML-format. Filen kan sedan importeras till en annan MediaWiki-wiki m.h.a. sidan Special:Import (importera).
+
+För att exportera sidor skriv in artikeluppslagen i rutan nedan, en sida per rad. Välj om du vill exportera den nuvarande versionen tillsammans med alla de gamla, med sidans historik, eller bara den nuvarande versionen med information om den sista redigeringen.
+
+I det sistnämnda fallet kan du även använda en länk, exempel [[Special:Export/{{Mediawiki:Mainpage}}]] för sidan {{Mediawiki:Mainpage}}.',
+'exportcuronly'     => 'Inkludera endast den nuvarande versionen, inte hela historien',
+'exportnohistory'   => "---- '''OBS:''' export av fullständig artikelhistorik med hjälp av detta formulär har stängts av på grund av prestandaskäl.",
+'export-submit'     => 'Exportera',
+'export-addcattext' => 'Lägg till sidor från kategori:',
+'export-addcat'     => 'Lägg till',
+
+# Namespace 8 related
+'allmessages'               => 'Systemmeddelanden',
+'allmessagesname'           => 'Namn',
+'allmessagesdefault'        => 'Standardtext',
+'allmessagescurrent'        => 'Nuvarande text',
+'allmessagestext'           => 'Detta är en lista över alla meddelanden i namnrymden MediaWiki',
+'allmessagesnotsupportedUI' => "Språket <b>$1</b>, som du valt för gränssnittet, stöds inte av ''Special:Allmessages'' på denna webbplats.",
+'allmessagesnotsupportedDB' => "Det finns inte stöd för ''Special:Allmessages'', eftersom '''\$wgUseDatabaseMessages''' är avstängd.",
+'allmessagesfilter'         => 'Filter för meddelandenamn:',
+'allmessagesmodified'       => 'Visa bara ändrade',
+
+# Thumbnails
+'thumbnail-more'  => 'Förstora',
+'missingimage'    => '<b>Bild saknas</b><br /><i>$1</i>',
+'filemissing'     => 'Fil saknas',
+'thumbnail_error' => 'Ett fel uppstod när minibilden skulle skapas: $1',
+
+# Special:Import
+'import'                     => 'Importera sidor',
+'importinterwiki'            => 'Transwiki-import',
+'import-interwiki-text'      => 'Välj en wiki och sidtitel att importera.
+Versionshistorik (datum och redaktörer) kommer att bevaras.
+All överföring mellan wikier (transwiki) listas i  [[Special:Log/import|importloggen]].',
+'import-interwiki-history'   => 'Kopiera hela versionshistoriken för denna artikel',
+'import-interwiki-submit'    => 'Importera',
+'import-interwiki-namespace' => 'Överför sidorna till namnrymden:',
+'importtext'                 => 'Exportera filen från ursprungs-wikin genom Special:Export, spara den till din hårddisk och ladda upp den här.',
+'importstart'                => 'Importerar sidor....',
+'import-revision-count'      => '$1 {{plural:$1|version|versioner}}',
+'importnopages'              => 'Det finns inga sidor att importera.',
+'importfailed'               => 'Importen misslyckades: $1',
+'importunknownsource'        => 'Okänd typ av importkälla',
+'importcantopen'             => 'Misslyckades med att öppna importfilen.',
+'importbadinterwiki'         => 'Felaktig interwiki-länk',
+'importnotext'               => 'Tom eller ingen text',
+'importsuccess'              => 'Importen lyckades!',
+'importhistoryconflict'      => 'Det föreligger en konflikt i versionshistoriken (kanske har denna sida importerats tidigare)',
+'importnosources'            => 'Inga källor för transwiki-import har angivits, och direkt uppladdning av historik har stängts av.',
+'importnofile'               => 'Ingen fil att importera har laddats upp.',
+'importuploaderror'          => 'Importfilen kunde inte laddas upp; kanske är den större än vad filer som skall laddas upp får vara.',
+
+# Import log
+'importlogpage'                    => 'Importlogg',
+'importlogpagetext'                => 'Administrativa sidimporter med versionshistorik från andra wikier.',
+'import-logentry-upload'           => '[[$1]]  har importerats genom uppladdning av fil',
+'import-logentry-upload-detail'    => '$1 {{plural:$1|version|versioner}}',
+'import-logentry-interwiki'        => 'överförde $1 mellan wikier',
+'import-logentry-interwiki-detail' => '$1 {{plural:$1|version|versioner}} från $2',
+
+# Tooltip help for the actions
+'tooltip-pt-userpage'             => 'Min användarsida',
+'tooltip-pt-anonuserpage'         => 'Användarsida för ip-numret du redigerar från',
+'tooltip-pt-mytalk'               => 'Min diskussionssida',
+'tooltip-pt-anontalk'             => 'Diskussion om redigeringar från det här ip-numret',
+'tooltip-pt-preferences'          => 'Mina inställningar',
+'tooltip-pt-watchlist'            => 'Lista över sidor som övervakas',
+'tooltip-pt-mycontris'            => 'Lista över mina bidrag',
+'tooltip-pt-login'                => 'Du får gärna logga in, men det är inte nödvändigt',
+'tooltip-pt-anonlogin'            => 'Du får gärna logga in, men det är inte nödvändigt',
+'tooltip-pt-logout'               => 'Logga ut',
+'tooltip-ca-talk'                 => 'Diskussion om sidans innehåll',
+'tooltip-ca-edit'                 => 'Du kan redigera den här sidan. Var vänlig och förhandsgranska innan du sparar.',
+'tooltip-ca-addsection'           => 'Lägg till en kommentar i den här diskussionen',
+'tooltip-ca-viewsource'           => 'Den här sidan är skrivskyddad. Du kan se källtexten.',
+'tooltip-ca-history'              => 'Tidigare versioner av sidan',
+'tooltip-ca-protect'              => 'Skydda den här sidan',
+'tooltip-ca-delete'               => 'Radera den här sidan',
+'tooltip-ca-undelete'             => 'Återställ alla redigeringar som gjorts innan sidan raderades',
+'tooltip-ca-move'                 => 'Flytta den här sidan',
+'tooltip-ca-watch'                => 'Lägg till sidan på din övervakningslista',
+'tooltip-ca-unwatch'              => 'Ta bort sidan från din övervakningslista',
+'tooltip-search'                  => 'Sök på {{SITENAME}}',
+'tooltip-p-logo'                  => 'Huvudsida',
+'tooltip-n-mainpage'              => 'Gå till huvudsidan',
+'tooltip-n-portal'                => 'Om {{SITENAME}}, vad som kan göras, var man kan hitta olika funktioner',
+'tooltip-n-currentevents'         => 'Information om aktuella händelser',
+'tooltip-n-recentchanges'         => 'Lista över de senaste ändringarna på {{SITENAME}}',
+'tooltip-n-randompage'            => 'Gå till en slumpmässigt vald artikel',
+'tooltip-n-help'                  => 'Hjälp och information om {{SITENAME}}',
+'tooltip-n-sitesupport'           => 'Stöd {{SITENAME}}',
+'tooltip-t-whatlinkshere'         => 'Lista över alla sidor på {{SITENAME}} som länkar hit',
+'tooltip-t-recentchangeslinked'   => 'Visa senaste ändringarna av sidor som den här sidan länkar till',
+'tooltip-feed-rss'                => 'RSS-matning för den här sidan',
+'tooltip-feed-atom'               => 'Atom-matning för den här sidan',
+'tooltip-t-contributions'         => 'Visa lista över bidrag från den här användaren',
+'tooltip-t-emailuser'             => 'Skicka e-post till den här användaren',
+'tooltip-t-upload'                => 'Ladda upp bilder eller mediafiler',
+'tooltip-t-specialpages'          => 'Lista över alla speciella sidor',
+'tooltip-ca-nstab-main'           => 'Visa sidan',
+'tooltip-ca-nstab-user'           => 'Visa användarsidan',
+'tooltip-ca-nstab-media'          => 'Visa mediesidan',
+'tooltip-ca-nstab-special'        => 'Detta är en specialsida och kan inte redigeras',
+'tooltip-ca-nstab-project'        => 'Visa projektsidan',
+'tooltip-ca-nstab-image'          => 'Se bildsidan',
+'tooltip-ca-nstab-mediawiki'      => 'Se systemmeddelandet',
+'tooltip-ca-nstab-template'       => 'Se mallen',
+'tooltip-ca-nstab-help'           => 'Se hjälpsidan',
+'tooltip-ca-nstab-category'       => 'Se kategorisidan',
+'tooltip-minoredit'               => 'Markera som mindre ändring',
+'tooltip-save'                    => 'Spara dina ändringar',
+'tooltip-preview'                 => 'Det är bra om du förhandsgranskar dina ändringar innan du sparar!',
+'tooltip-diff'                    => 'Visa vilka förändringar du har gjort av texten.',
+'tooltip-compareselectedversions' => 'Visa skillnaden mellan de två markerade versionerna av den här sidan.',
+'tooltip-watch'                   => 'Lägg till den här sidan i din bevakningslista',
+'tooltip-recreate'                => 'Återskapa sidan fast den har tagits bort',
+
+# Stylesheets
+'common.css'   => '/** CSS som skrivs här nedan påverkar alla skal **/',
+'monobook.css' => '/*CSS som skrivs in här kommer att påverka alla användare av skalet Monobook */',
+
+# Scripts
+'common.js'   => '/* JavaScript som skrivs här körs varje gång en användare laddar en sida. */',
+'monobook.js' => '/* Inaktuell sida; använd [[MediaWiki:common.js]] istället */',
+
+# Metadata
+'nodublincore'      => 'Dublin Core RDF metadata avstängt på den här servern.',
+'nocreativecommons' => 'Creative Commons RDF metadata avstängd på denna server.',
+'notacceptable'     => 'Den här wiki-servern kan inte erbjuda data i ett format som din klient kan läsa.',
+
+# Attribution
+'anonymous'        => 'Anonym användare av {{SITENAME}}',
+'siteuser'         => '{{SITENAME}} användare $1',
+'lastmodifiedatby' => 'Den här sidan ändrades senast $2, $1 av $3.', # $1 date, $2 time, $3 user
+'and'              => 'och',
+'othercontribs'    => 'Baserad på arbete av $1.',
+'others'           => 'andra',
+'siteusers'        => '{{SITENAME}} användare $1',
+'creditspage'      => 'Användare som bidragit till sidan',
+'nocredits'        => 'Det finns ingen information tillgänglig om vem som bidragit till denna sida.',
+
+# Spam protection
+'spamprotectiontitle'    => 'Spamfilter',
+'spamprotectiontext'     => 'Sidan du ville spara blockerades av spamfiltret. Detta orsakades troligen av en extern länk på sidan.',
+'spamprotectionmatch'    => 'Följande text aktiverade vårt spamfilter: $1',
+'subcategorycount'       => 'Det finns {{PLURAL:$1|en underkategori|$1 underkategorier}} till den här kategorin.',
+'categoryarticlecount'   => 'Det finns {{PLURAL:$1|en artikel|$1 artiklar}} i den här kategorin.',
+'category-media-count'   => 'Det finns {{PLURAL:$1|en fil|$1 filer}} i den här kategorin.',
+'listingcontinuesabbrev' => ' forts.',
+'spambot_username'       => 'MediaWikis spampatrull',
+'spam_reverting'         => 'Återställer till den senaste versionen som inte innehåller länkar till $1',
+'spam_blanking'          => 'Alla versioner innehöll en länk till $1, blankar',
+
+# Info page
+'infosubtitle'   => 'Information om sida',
+'numedits'       => 'Antal redigeringar (artikel): $1',
+'numtalkedits'   => 'Antal redigeringar (diskussionssida): $1',
+'numwatchers'    => 'Antal användare som bevakar sidan: $1',
+'numauthors'     => 'Antal olika bidragsgivare (artikel): $1',
+'numtalkauthors' => 'Antal olika bidragsgivare (diskussionssida): $1',
+
+# Math options
+'mw_math_png'    => 'Rendera alltid PNG',
+'mw_math_simple' => 'HTML om mycket enkel, annars PNG',
+'mw_math_html'   => 'HTML om möjligt, annars PNG',
+'mw_math_source' => 'Låt vara TeX (för textbaserade webbläsare)',
+'mw_math_modern' => 'Har du modern webbläsare, använd detta alternativ',
+'mw_math_mathml' => 'MathML om möjligt (experimentellt)',
+
+# Patrolling
+'markaspatrolleddiff'                 => 'Märk upp som patrullerad',
+'markaspatrolledtext'                 => 'Märk den här artikeln som patrullerad',
+'markedaspatrolled'                   => 'Markerad som patrullerad',
+'markedaspatrolledtext'               => 'Den valda versionen har märkts som patrullerad.',
+'rcpatroldisabled'                    => 'Patrullering av Senaste ändringar är avstängd.',
+'rcpatroldisabledtext'                => 'Funktionen "patrullering av Senaste ändringar" är tillfälligt avstängd.',
+'markedaspatrollederror'              => 'Kan inte markera som patrullerad',
+'markedaspatrollederrortext'          => 'Du måste ange version för att kunna markera som patrullerad.',
+'markedaspatrollederror-noautopatrol' => 'Du har inte tillåtelse att markera dina egna redigeringar som patrullerade.',
+
+# Patrol log
+'patrol-log-page' => 'Patrulleringslogg',
+'patrol-log-line' => 'markerade $1 av $2 som patrullerad $3',
+'patrol-log-auto' => '(automatisk)',
+'patrol-log-diff' => 'version $1',
+
+# Image deletion
+'deletedrevision' => 'Raderade gammal sidversion $1.',
+
+# Browsing diffs
+'previousdiff' => '← Gå till föregående ändring',
+'nextdiff'     => 'Gå till nästa ändring →',
+
+# Media information
+'mediawarning'         => "'''Varning:''': Denna fil kan innehålla programkod som, om den körs, kan skada din dator.",
+'imagemaxsize'         => 'Begränsa bilders storlek på bildbeskrivningssidor till:',
+'thumbsize'            => 'Storlek på minibild:',
+'file-info'            => '(filstorlek: $1, MIME-typ: $2)',
+'file-info-size'       => '($1 × $2 pixel, filstorlek: $3, MIME-typ: $4)',
+'file-nohires'         => '<small>Det finns ingen version med högre upplösning.</small>',
+'file-svg'             => '<small>Det här är en fil med vektorgrafik i SVG-format. Grundstorlek: $1 × $2 pixel.</small>',
+'show-big-image'       => 'Högupplöst version',
+'show-big-image-thumb' => '<small>Storlek på förhandsvisningen: $1 × $2 pixel</small>',
+
+'newimages'    => 'Galleri över nya bilder',
+'showhidebots' => '($1 robotar)',
+'noimages'     => 'Ingenting att se.',
+
+/*
+Short names for language variants used for language conversion links.
+To disable showing a particular link, set it to 'disable', e.g.
+'variantname-zh-sg' => 'disable',
+Variants for Chinese language
+*/
+'variantname-zh-cn' => 'cn',
+'variantname-zh-tw' => 'tw',
+'variantname-zh-hk' => 'hk',
+'variantname-zh-sg' => 'sg',
+'variantname-zh'    => 'zh',
+
+# Variants for Serbian language
+'variantname-sr-ec' => 'sr-ec',
+'variantname-sr-el' => 'sr-el',
+'variantname-sr-jc' => 'sr-jc',
+'variantname-sr-jl' => 'sr-jl',
+'variantname-sr'    => 'sr',
+
+'passwordtooshort' => 'Ditt lösenord är för kort. Det måste innehålla minst $1 tecken.',
+
+# Metadata
+'metadata'          => 'Metadata',
+'metadata-help'     => 'Det här filen innehåller extrainformation som troligen lades till när bilden togs av en digitalkamera eller när det digitaliserades av en scanner. Om filen har modifierats kan det hända att vissa detaljer inte överensstämmer med den modifierade bilden.',
+'metadata-expand'   => 'Visa utökade detaljer',
+'metadata-collapse' => 'Dölj utökade detaljer',
+'metadata-fields'   => 'EXIF-fält som listas i det här meddelandet visas på
+bildsidan när metadatatabellen är minimerad. Övriga fält
+är gömda som standard, men visas när tabellen expanderas.
+* make
+* model
+* datetimeoriginal
+* exposuretime
+* fnumber
+* focallength',
+
+# EXIF tags
+'exif-imagewidth'                  => 'Bredd',
+'exif-imagelength'                 => 'Höjd',
+'exif-bitspersample'               => 'Bitar per komponent',
+'exif-compression'                 => 'Komprimeringsalgoritm',
+'exif-photometricinterpretation'   => 'Pixelsammansättning',
+'exif-orientation'                 => 'Position',
+'exif-samplesperpixel'             => 'Antal komponenter',
+'exif-xresolution'                 => 'Upplösning i horisontalplan',
+'exif-yresolution'                 => 'Upplösning i vertikalplan',
+'exif-jpeginterchangeformatlength' => 'Antal bytes JPEG-data',
+'exif-transferfunction'            => 'Överföringsfunktion',
+'exif-whitepoint'                  => 'VItpunktens renhet',
+'exif-primarychromaticities'       => 'Primärfärgernas renhet',
+'exif-datetime'                    => 'Ändringstidpunkt',
+'exif-imagedescription'            => 'Bildtitel',
+'exif-make'                        => 'Kameratillverkare',
+'exif-model'                       => 'Kameramodell',
+'exif-software'                    => 'Använd mjukvara',
+'exif-artist'                      => 'Skapare',
+'exif-copyright'                   => 'Den som äger upphovsrätten',
+'exif-exifversion'                 => 'Exif-version',
+'exif-flashpixversion'             => 'Flashpix-version som stöds',
+'exif-colorspace'                  => 'Färgrymd',
+'exif-componentsconfiguration'     => 'Komponentanalys',
+'exif-compressedbitsperpixel'      => 'Bildkomprimeringsläge',
+'exif-pixelydimension'             => 'Giltig bildbredd',
+'exif-pixelxdimension'             => 'Giltig bildhöjd',
+'exif-makernote'                   => 'Tillverkarkommentarer',
+'exif-usercomment'                 => 'Kommentarer',
+'exif-relatedsoundfile'            => 'Relaterad ljudfil',
+'exif-datetimeoriginal'            => 'Exponeringstidpunkt',
+'exif-datetimedigitized'           => 'Tidpunkt för digitalisering',
+'exif-exposuretime'                => 'Exponeringstid',
+'exif-exposuretime-format'         => '$1 sek ($2)',
+'exif-fnumber'                     => 'F-nummer',
+'exif-fnumber-format'              => 'f/$1',
+'exif-exposureprogram'             => 'Exponeringsprogram',
+'exif-shutterspeedvalue'           => 'Slutarhastighet',
+'exif-aperturevalue'               => 'Bländare',
+'exif-brightnessvalue'             => 'Ljusstyrka',
+'exif-exposurebiasvalue'           => 'Exponeringsbias',
+'exif-subjectdistance'             => 'Avstånd till motivet',
+'exif-lightsource'                 => 'Ljuskälla',
+'exif-flash'                       => 'Blixt',
+'exif-focallength'                 => 'Linsens brännvidd',
+'exif-focallength-format'          => '$1 mm',
+'exif-flashenergy'                 => 'Blixteffekt',
+'exif-focalplanexresolution'       => 'Upplösning i fokalplan x',
+'exif-focalplaneyresolution'       => 'Upplösning i fokalplan y',
+'exif-focalplaneresolutionunit'    => 'Enhet för upplösning i fokalplan',
+'exif-subjectlocation'             => 'Motivets läge',
+'exif-exposureindex'               => 'Exponeringsindex',
+'exif-sensingmethod'               => 'Avkänning',
+'exif-filesource'                  => 'Filkälla',
+'exif-cfapattern'                  => 'CFA-mönster',
+'exif-customrendered'              => 'Anpassad bildbehandling',
+'exif-exposuremode'                => 'Exponeringsläge',
+'exif-whitebalance'                => 'Vitbalans',
+'exif-digitalzoomratio'            => 'Digitalt zoomomfång',
+'exif-focallengthin35mmfilm'       => 'Brännvidd på 35 mm film',
+'exif-scenecapturetype'            => 'Motivprogram',
+'exif-gaincontrol'                 => 'Bildförstärkning',
+'exif-contrast'                    => 'Kontrast',
+'exif-saturation'                  => 'Mättnad',
+'exif-sharpness'                   => 'Skärpa',
+'exif-devicesettingdescription'    => 'Beskrivning av apparatens inställning',
+'exif-imageuniqueid'               => 'Unikt bild-ID',
+'exif-gpslatituderef'              => 'Nordlig eller sydlig latitud',
+'exif-gpslatitude'                 => 'Latitud',
+'exif-gpslongituderef'             => 'Östlig eller västlig longitud',
+'exif-gpslongitude'                => 'Longitud',
+'exif-gpsaltituderef'              => 'Referenshöjd',
+'exif-gpsaltitude'                 => 'Höjd',
+'exif-gpstimestamp'                => 'GPS-tid (atomur)',
+'exif-gpsstatus'                   => 'Mottagarstatus',
+'exif-gpsmeasuremode'              => 'Mätmetod',
+'exif-gpsdop'                      => 'Mätnoggrannhet',
+'exif-gpsspeedref'                 => 'Hastighetsenhet',
+'exif-gpsspeed'                    => 'GPS-mottagarens hastighet',
+'exif-gpstrackref'                 => 'Referenspunkt för rörelsens riktning',
+'exif-gpstrack'                    => 'Rörelsens riktning',
+'exif-gpsdestlatituderef'          => 'Referenspunkt för målets latitud',
+'exif-gpsdestlatitude'             => 'Målets latitud',
+'exif-gpsdestlongituderef'         => 'Referenspunkt för målets longitud',
+'exif-gpsdestlongitude'            => 'Målets longitud',
+'exif-gpsdestbearing'              => 'Riktning mot målet',
+'exif-gpsdestdistanceref'          => 'Referenspunkt för avstånd till målet',
+'exif-gpsdestdistance'             => 'Avstånd till målet',
+'exif-gpsdatestamp'                => 'GPS-datum',
+
+# EXIF attributes
+'exif-compression-1' => 'Inte komprimerad',
+'exif-compression-6' => 'JPEG',
+
+'exif-photometricinterpretation-2' => 'RGB',
+'exif-photometricinterpretation-6' => 'YCbCr',
+
+'exif-unknowndate' => 'Okänt datum',
+
+'exif-orientation-1' => 'Normal', # 0th row: top; 0th column: left
+'exif-orientation-2' => 'Spegelvänd horisontellt', # 0th row: top; 0th column: right
+'exif-orientation-3' => 'Roterad 180°', # 0th row: bottom; 0th column: right
+'exif-orientation-4' => 'Spegelvänd vertikalt', # 0th row: bottom; 0th column: left
+'exif-orientation-5' => 'Roterad 90° moturs och spegelvänd vertikalt', # 0th row: left; 0th column: top
+'exif-orientation-6' => 'Roterad 90° medurs', # 0th row: right; 0th column: top
+'exif-orientation-7' => 'Roterad 90° medurs och spegelvänd vertikalt', # 0th row: right; 0th column: bottom
+'exif-orientation-8' => 'Roterad 90° moturs', # 0th row: left; 0th column: bottom
+
+'exif-xyresolution-i' => '$1 dpi',
+'exif-xyresolution-c' => '$1 dpc',
+
+'exif-colorspace-1'      => 'sRGB',
+'exif-colorspace-ffff.h' => 'FFFF.H',
+
+'exif-componentsconfiguration-0' => 'saknas',
+'exif-componentsconfiguration-1' => 'Y',
+'exif-componentsconfiguration-2' => 'Cb',
+'exif-componentsconfiguration-3' => 'Cr',
+'exif-componentsconfiguration-4' => 'R',
+'exif-componentsconfiguration-5' => 'G',
+'exif-componentsconfiguration-6' => 'B',
+
+'exif-exposureprogram-0' => 'Inte definierad',
+'exif-exposureprogram-1' => 'Manuell inställning',
+'exif-exposureprogram-2' => 'Normalprogram',
+'exif-exposureprogram-3' => 'Prioritet för bländare',
+'exif-exposureprogram-4' => 'Prioritet för slutare',
+'exif-exposureprogram-5' => 'Konstnärligt program (prioriterar skärpedjup)',
+'exif-exposureprogram-6' => 'Rörelseprogram (prioriterar kortare slutartid)',
+'exif-exposureprogram-7' => 'Porträttläge (för närbilder med bakgrunden ofokuserad)',
+'exif-exposureprogram-8' => 'Landskapsläge (för foton av landskap med bakgrunden i fokus)',
+
+'exif-subjectdistance-value' => '$1 meter',
+
+'exif-meteringmode-0'   => 'Okänd',
+'exif-meteringmode-1'   => 'Medelvärde',
+'exif-meteringmode-2'   => 'Centrumviktat medelvärde',
+'exif-meteringmode-255' => 'Annan',
+
+'exif-lightsource-0'   => 'Okänd',
+'exif-lightsource-1'   => 'Dagsljus',
+'exif-lightsource-2'   => 'Lysrör',
+'exif-lightsource-3'   => 'Glödlampa',
+'exif-lightsource-4'   => 'Blixt',
+'exif-lightsource-9'   => 'Klart väder',
+'exif-lightsource-10'  => 'Molnigt',
+'exif-lightsource-11'  => 'Skugga',
+'exif-lightsource-12'  => 'Dagsljuslysrör (D 5700 – 7100K)',
+'exif-lightsource-17'  => 'Standardljus A',
+'exif-lightsource-18'  => 'Standardljus B',
+'exif-lightsource-19'  => 'Standardljus C',
+'exif-lightsource-20'  => 'D55',
+'exif-lightsource-21'  => 'D65',
+'exif-lightsource-22'  => 'D75',
+'exif-lightsource-23'  => 'D50',
+'exif-lightsource-255' => 'Annan ljuskälla',
+
+'exif-focalplaneresolutionunit-2' => 'tum',
+
+'exif-sensingmethod-1' => 'Ej angivet',
+
+'exif-filesource-3' => 'DSC',
+
+'exif-customrendered-0' => 'Normal',
+'exif-customrendered-1' => 'Anpassad',
+
+'exif-exposuremode-0' => 'Automatisk exponering',
+'exif-exposuremode-1' => 'Manuell exponering',
+'exif-exposuremode-2' => 'Automatisk alternativexponering',
+
+'exif-whitebalance-0' => 'Automatisk vitbalans',
+'exif-whitebalance-1' => 'Manuell vitbalans',
+
+'exif-scenecapturetype-0' => 'Standard',
+'exif-scenecapturetype-1' => 'Landskap',
+'exif-scenecapturetype-2' => 'Porträtt',
+'exif-scenecapturetype-3' => 'Nattfotografering',
+
+'exif-gaincontrol-0' => 'Ingen',
+'exif-gaincontrol-1' => 'Ökning av lågnivåförstärkning',
+'exif-gaincontrol-2' => 'Ökning av högnivåförstärkning',
+'exif-gaincontrol-3' => 'Sänkning av lågnivåförstärkning',
+'exif-gaincontrol-4' => 'Sänkning av högnivåförstärkning',
+
+'exif-contrast-0' => 'Normal',
+'exif-contrast-1' => 'Mjuk',
+'exif-contrast-2' => 'Skarp',
+
+'exif-saturation-0' => 'Normal',
+'exif-saturation-1' => 'Låg mättnadsgrad',
+'exif-saturation-2' => 'Hög mättnadsgrad',
+
+'exif-sharpness-0' => 'Normal',
+
+'exif-subjectdistancerange-0' => 'Okänd',
+'exif-subjectdistancerange-2' => 'Närbild',
+'exif-subjectdistancerange-3' => 'Avståndsbild',
+
+# Pseudotags used for GPSLatitudeRef and GPSDestLatitudeRef
+'exif-gpslatitude-n' => 'Nordlig latitud',
+'exif-gpslatitude-s' => 'Sydlig latitud',
+
+# Pseudotags used for GPSLongitudeRef and GPSDestLongitudeRef
+'exif-gpslongitude-e' => 'Östlig longitud',
+'exif-gpslongitude-w' => 'Västlig longitud',
+
+'exif-gpsstatus-a' => 'Mätning pågår',
+
+'exif-gpsmeasuremode-2' => 'Tvådimensionell mätning',
+'exif-gpsmeasuremode-3' => 'Tredimensionell mätning',
+
+# Pseudotags used for GPSSpeedRef and GPSDestDistanceRef
+'exif-gpsspeed-k' => 'Kilometer i timmen',
+'exif-gpsspeed-m' => 'Miles i timmen',
+'exif-gpsspeed-n' => 'Knop',
+
+# Pseudotags used for GPSTrackRef, GPSImgDirectionRef and GPSDestBearingRef
+'exif-gpsdirection-t' => 'Sann bäring',
+'exif-gpsdirection-m' => 'Magnetisk bäring',
+
+# External editor support
+'edit-externally'      => 'Redigera denna fil med hjälp av extern programvara',
+'edit-externally-help' => 'Se [http://meta.wikimedia.org/wiki/Help:External_editors instruktioner] för mer information.',
+
+# 'all' in various places, this might be different for inflected languages
+'recentchangesall' => 'alla',
+'imagelistall'     => 'alla',
+'watchlistall1'    => 'alla',
+'watchlistall2'    => 'alla',
+'namespacesall'    => 'alla',
+
+# E-mail address confirmation
+'confirmemail'            => 'Bekräfta e-postadress',
+'confirmemail_noemail'    => 'Du har inte givit någon fungerande e-postadress i dina [[Special:Preferences|inställningar]].',
+'confirmemail_text'       => 'Innan du kan använda {{SITENAME}}s funktioner för e-post måste du bekräfta din e-postadress. Aktivera knappen nedan för att skicka en bekräftelsekod till din e-postadress. Mailet kommer att innehålla en länk, som innehåller en kod. Genom att klicka på den länken eller kopiera den till din webbläsares fönster för webbadresser, bekräftar du att din e-postadress fungerar.',
+'confirmemail_pending'    => 'En bekräftelsekod har redan skickats till din epostadress. Om du skapade ditt konto nyligen, så kanske du vill vänta några minuter innan du begär en ny kod.',
+'confirmemail_send'       => 'Skicka bekräftelsekod',
+'confirmemail_sent'       => 'E-post med bekräftelse skickat.',
+'confirmemail_oncreate'   => 'En bekräftelsekod skickades till din epostadress. Koden behövs inte för att logga in, men om du behöver koden om du vill få tillgång de epostbaserade funktionerna på wikin.',
+'confirmemail_sendfailed' => 'E-post med bekräftelse kunde inte skickas. Kontrollera om adressen innehåller ogiltiga tecken.
+
+Mailaren returnade: $1',
+'confirmemail_invalid'    => 'Ogiltig bekräftelsekod. Dess giltighetstid kan ha löpt ut.',
+'confirmemail_needlogin'  => 'Du behöver $1 för att bekräfta din e-postadress',
+'confirmemail_success'    => 'Din e-postadress har bekräftats och du kan logga in på wikin.',
+'confirmemail_loggedin'   => 'Din e-postadress är nu bekräftad.',
+'confirmemail_error'      => 'Någonting gick fel när din bekräftelse skulle sparas.',
+'confirmemail_subject'    => 'Bekräftelse av e-postadress på {{SITENAME}}',
+'confirmemail_body'       => 'Någon, troligen du, har från IP-adressen $1 registrerat användarkontot "$2" på {{SITENAME}} och uppgivit denna e-postadress. För att bekräfta att detta konto verkligen är ditt, och för att aktivera möjligheten att skicka e-post via kontot på {{SITENAME}}, klicka på denna länk:
+
+$3
+
+Om det *inte* är du som registrerat kontot, följ inte länken. Efter $4 kommer denna bekräftelsekod inte att fungera.',
+
+# Inputbox extension, may be useful in other contexts as well
+'tryexact'       => 'Försök hitta exakt matchning',
+'searchfulltext' => 'Fulltextsökning',
+'createarticle'  => 'Skapa artikel',
+
+# Scary transclusion
+'scarytranscludedisabled' => '[Interwiki-inklusion är inte aktiverad]',
+'scarytranscludefailed'   => '[Beklagar, hämtning av mall för $1 misslyckades]',
+'scarytranscludetoolong'  => '[Beklagar, URL:en är för lång]',
+
+# Trackbacks
+'trackbackbox'      => '<div id="mw_trackbacks"> Till denna artikel finns följande trackback:<br /> $1 </div>',
+'trackbackremove'   => '([$1 Ta bort])',
+'trackbacklink'     => 'Trackback',
+'trackbackdeleteok' => 'Trackback har tagits bort.',
+
+# Delete conflict
+'deletedwhileediting' => 'Varning: Denna sida har tagits bort efter att du började redigera den!',
+'confirmrecreate'     => "Användaren [[User:$1|$1]] ([[User talk:$1|diskussion]]) raderade den här artikeln efter att du påbörjade redigering av den med motiveringen: : ''$2'' Bekräfta att du verkligen vill återskapa artikeln.",
+'recreate'            => 'Återskapa',
+
+'unit-pixel' => 'px',
+
+# HTML dump
+'redirectingto' => 'Omdirigerar till [[:$1|$1]]...',
+
+# action=purge
+'confirm_purge'        => 'Rensa denna sidas cache?
+
+$1',
+'confirm_purge_button' => 'OK',
+
+'youhavenewmessagesmulti' => 'Du har nya meddelanden på $1',
+
+'searchcontaining' => "Leta efter artiklar som innehåller ''$1''.",
+'searchnamed'      => "Leta efter artiklar som heter ''$1''.",
+'articletitles'    => "Artiklar som börjar med ''$1''",
+'hideresults'      => 'Göm resultat',
+
+# DISPLAYTITLE
+'displaytitle' => '(Länka till denna sida som [[:$1|$1]])',
+
+'loginlanguagelabel' => 'Språk: $1',
+
+# Multipage image navigation
+'imgmultipageprev'   => '&larr; föregående sida',
+'imgmultipagenext'   => 'nästa sida &rarr;',
+'imgmultigo'         => 'Gå',
+'imgmultigotopre'    => 'Gå till sida',
+'imgmultiparseerror' => 'Bildfilen verkar vara trasig eller felaktig, därför kan {{SITENAME}} inte hämta listan över sidor.',
+
+# Table pager
+'ascending_abbrev'         => 'stigande',
+'descending_abbrev'        => 'fallande',
+'table_pager_next'         => 'Nästa sida',
+'table_pager_prev'         => 'Föregående sida',
+'table_pager_first'        => 'Första sidan',
+'table_pager_last'         => 'Sista sidan',
+'table_pager_limit'        => 'Visa $1 poster per sida',
+'table_pager_limit_submit' => 'Utför',
+'table_pager_empty'        => 'Inga resultat',
+
+# Auto-summaries
+'autosumm-blank'   => 'Tar bort sidans innehåll',
+'autosumm-replace' => "Ersätter sidans innehåll med '$1'",
+'autoredircomment' => 'Omdirigerar till [[$1]]', # This should be changed to the new naming convention, but existed beforehand
+'autosumm-new'     => 'Ny sida: $1',
+
+# Size units
+'size-bytes'     => '$1 byte',
+'size-kilobytes' => '$1 kbyte',
+'size-megabytes' => '$1 Mbyte',
+'size-gigabytes' => '$1 Gbyte',
+
+# Live preview
+'livepreview-loading' => 'Laddar…',
+'livepreview-ready'   => 'Laddar… Färdig!',
+'livepreview-failed'  => 'Live preview misslyckades!
+Pröva vanlig förhandsgranskning istället.',
+'livepreview-error'   => 'Lyckades inte ansluta: $1 "$2"
+Pröva vanlig förhandsgranskning istället.',
+
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesTa.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesTa.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesTa.php	(revision 1280)
@@ -0,0 +1,730 @@
+<?php
+/**
+ * Tamil (தமிழ்)
+ *
+ * @addtogroup Language
+ */
+
+$skinNames = array(
+	'standard' => "இயல்பான",
+	'nostalgia' => "பசுமை நினைவு (Nostalgia)",
+	'cologneblue' => "கொலோன் (Cologne) நீலம் Blue",
+	'smarty' => "பாடிங்டன் (Paddington)",
+	'montparnasse' => "மொண்ட்பார்னாசே (Montparnasse)",
+);
+
+$namespaceNames = array(
+	NS_MEDIA          => 'ஊடகம்',
+	NS_SPECIAL        => 'சிறப்பு',
+	NS_MAIN           => '',
+	NS_TALK           => 'பேச்சு',
+	NS_USER           => 'பயனர்',
+	NS_USER_TALK      => 'பயனர்_பேச்சு',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK   => '$1_பேச்சு',
+	NS_IMAGE          => 'படிமம்',
+	NS_IMAGE_TALK     => 'படிமப்_பேச்சு',
+	NS_MEDIAWIKI      => 'மீடியாவிக்கி',
+	NS_MEDIAWIKI_TALK => 'மீடியாவிக்கி_பேச்சு',
+	NS_TEMPLATE       => 'வார்ப்புரு',
+	NS_TEMPLATE_TALK  => 'வார்ப்புரு_பேச்சு',
+	NS_HELP           => 'உதவி',
+	NS_HELP_TALK      => 'உதவி_பேச்சு',
+	NS_CATEGORY       => 'பகுப்பு',
+	NS_CATEGORY_TALK  => 'பகுப்பு_பேச்சு',
+);
+
+$namespaceAliases = array(
+	'விக்கிபீடியா' => NS_PROJECT,
+	'விக்கிபீடியா_பேச்சு' => NS_PROJECT_TALK,
+	'உருவப்_பேச்சு' => NS_IMAGE_TALK
+);
+$linkTrail = "/^([\xE0\xAE\x80-\xE0\xAF\xBF]+)(.*)$/sDu";
+
+
+$messages = array(
+
+# User Toggles
+#
+
+"tog-underline" => "இணைப்புகளுக்கு அடிக்கோடிடு",
+"tog-highlightbroken" => "முறிந்த இணைப்புகளை வடிவமை <a href=\"\" class=\"புதிது\">இதைப் போல </a> (alternative: like this<a href=\"\" class=\"internal\">?</a>).",
+"tog-justify"	=> "பந்திகளை ஓரச் சீர்மைப் (Justify) படுத்து",
+"tog-hideminor" => "அண்மைய மாற்றங்களில் சிறிய தொகுப்புகளை மறை",
+"tog-usenewrc" => "மேம்படுத்தப்பட்ட அண்மைய மாற்றங்கள் (எல்லா உலாவிகளுக்குமல்ல)",
+"tog-numberheadings" => "தலைப்புகளுக்கு தானியங்கி இலக்கமிடு",
+"tog-editondblclick" => "இரட்டைச் சொடுக்கில் பக்கங்களைத் தொகு (ஜாவாஸ்கிரிப்ட்)",
+"tog-editsection"=>"இணைப்புவழி (தொகுப்பு) பிரிவுத் தொகுப்பை செயல்படுத்து",
+"tog-editsectiononrightclick"=>"வலச் சொடுக்குவழி பிரிவுத் தலைப்பு தொகுப்பதை செயல் படுத்து (ஜாவாஸ்கிரிப்ட்)",
+"tog-showtoc"=>"உள்ளடக்க அட்டவணையைக் காண்பி<br />(மூன்றுக்கு மேற்பட்ட தலைப்புகளையுடைய கட்டுரைகளுக்கு)",
+"tog-rememberpassword" => "அமர்வுகளுக்கு இடையே கடவுச்சொல்லை ஞாபகத்தில் வைத்துக்கொள்",
+"tog-editwidth" => "தொகுப்புக் கட்டம் முழு அகலத்தைக் கொண்டது",
+"tog-watchdefault" => "நீங்கள் தொகுத்த பக்கங்களை, உங்கள் கவனிப்புப் பட்டியலில்(watchlist) சேருங்கள்",
+"tog-minordefault" => "முன்னிருப்பாக (By default) அனைத்து தொகுப்புகளையும் சிறியது என குறித்துக்கொள்.",
+"tog-previewontop" => "தொகுப்புப் பெட்டிக்கு முன்பே முன்தோற்றத்தைக் காட்டுக. பின்னர் அல்ல.",
+"tog-nocache" => "பக்க இடைமாற்றை (cache) முடக்கு",
+
+
+# Dates
+#
+
+'sunday' => "ஞாயிறு",
+'monday' => "திங்கள்",
+'tuesday' => "செவ்வாய்",
+'wednesday' => "புதன்",
+'thursday' => "வியாழன்",
+'friday' => "வெள்ளி",
+'saturday' => "சனி",
+'january' => "ஜனவரி",
+'february' => "பெப்ரவரி",
+'march' => "மார்ச்",
+'april' => "ஏப்ரில்",
+'may_long' => "மே",
+'june' => "ஜூன்",
+'july' => "ஜூலை",
+'august' => "ஆகஸ்ட்",
+'september' => "செப்டெம்பர்",
+'october' => "அக்டோபர்",
+'november' => "நவம்பர்",
+'december' => "டிசம்பர்",
+'jan' => "ஜன",
+'feb' => "பெப்",
+'mar' => "மார்",
+'apr' => "ஏப்",
+'may' => "மே",
+'jun' => "ஜூன்",
+'jul' => "ஜூலை",
+'aug' => "ஆக",
+'sep' => "செப்",
+'oct' => "அக்",
+'nov' => "நவ",
+'dec' => "டிச",
+
+# Bits of text used by many pages:
+#
+"categories" => "பக்க வகைகள்",
+"pagecategories" => "பக்க வகைகள்",
+"category_header" => "பகுப்புகளிலுள்ள கட்டுரைகள் \"$1\"",
+"subcategories" => "துணை வகைகள்",
+
+"mainpage"		=> "முதற் பக்கம்",
+"mainpagetext"	=> "விக்கி மென்பொருள் வெற்றிகரமாக உள்ளிடப்பட்டது.",
+"about"			=> "விபரம்",
+"aboutsite"      => "விக்கிபீடியா பற்றி",
+"aboutpage"		=> "விக்கிபீடியா:விபரம்",
+"help"			=> "உதவி",
+"helppage"		=> "விக்கிபீடியா:உதவி",
+"bugreports"	=> "வழு அறிக்கை",
+"bugreportspage" => "விக்கிபீடியா:வழு அறிக்கைகள்",
+"faq"			=> "அடிக்கடி கேட்கப்படும் கேள்விகள்",
+"faqpage"		=> "விக்கிபீடியா:அடிக்கடி கேட்கப்படும் கேள்விகள்",
+"edithelp"		=> "தொகுத்தலுக்கான உதவி",
+"edithelppage"	=> "விக்கிபீடியா : ஒருவர் பக்கமொன்றைத் தொகுப்பது எப்படி?",
+"cancel"		=> "விடு",
+"qbfind"		=> "தேடு",
+"qbbrowse"		=> "உலவு",
+"qbedit"		=> "தொகு",
+"qbpageoptions" => "பக்க விருப்பத் தேர்வுகள்",
+"qbpageinfo"	=> "பக்கத் தகவல்கள்",
+"qbmyoptions"	=> "எனது விருப்பத் தேர்வுகள்",
+"mypage"		=> "எனது பக்கம்",
+"mytalk"		=> "எனது பேச்சு",
+"currentevents" => "தற்போதைய நிகழ்வுகள்",
+"errorpagetitle" => "தவறு",
+"returnto"		=> "$1 க்குத் திரும்பு.",
+"whatlinkshere"	=> "இங்கு இணைக்கப்பட்டுள்ள பக்கங்கள்",
+"help"			=> "உதவி",
+"search"		=> "தேடு",
+"searchbutton"	=> "தேடு",
+"go"		=> "செல்",
+'searcharticle'		=> "செல்",
+"history"		=> "பக்க வரலாறு",
+"printableversion" => "அச்சுக்குகந்த பதிப்பு",
+"editthispage"	=> "இப்பக்கத்தை தொகு",
+"deletethispage" => "இப்பக்கத்தை நீக்கு",
+"protectthispage" => "இப் பக்கத்தை காப்புச் செய்",
+"unprotectthispage" => "இப் பக்கத்தை காப்பு நீக்கு",
+"newpage" => "புதிய பக்கம்",
+"talkpage"		=> "இப் பக்கம்பற்றிக் கலந்துரையாடு",
+"postcomment"   => "கருத்துக்களை அனுப்பு",
+"articlepage"	=> "கட்டுரையைப் பார்",
+"userpage" => "பயனர்பக்கம் பார்",
+"projectpage" => "மீ (meta) பக்கம் பார்",
+"imagepage" => 	"படிமப் பக்கம் பார்",
+"viewtalkpage" => "கலந்துரையாடல்களைப் பார்",
+"otherlanguages" => "ஏனைய மொழிகள்",
+"redirectedfrom" => "($1 இலிருந்து மீள் வழிப்படுத்தப்பட்டது)",
+"lastmodifiedat"	=> "இப்பக்கம் கடைசியாகத் திருத்த்ப்பட்டது $2, $1.",
+"viewcount"		=> "இப்பக்கம் $1 முறை அணுகப்பட்டது .",
+"protectedpage" => "பாதுகாக்கப்பட்ட பக்கம்",
+"nbytes"		=> "$1 பைட்டுகள் (bytes)",
+"ok"			=> "சரி",
+"retrievedfrom" => "\"$1\" இலிருந்து மீள்விக்கப்பட்டது",
+"newmessageslink" => "புதிய செய்திகள்",
+"editsection"=>"தொகு",
+"editold"=>"தொகு",
+"toc" => "பொருளடக்கம்",
+"showtoc" => "காட்டு",
+"hidetoc" => "மறை",
+"thisisdeleted" => "$1 பார்க்கவா மீள்விக்கவா?",
+"restorelink" => "$1 நீக்கப்பட்ட தொகுப்புகள்",
+
+# Main script and global functions
+#
+"nosuchaction"	=> "அவ்வித செயற்பாடுகள் எதுவுமில்லை",
+"nosuchactiontext" => "யூஆர்எல்(URL) இனால் குறிப்பிடப்பட்ட செயற்பாடு விக்கிபீடியா மென்பொருளினால் அடையாளம் காணப்படவில்லை",
+"nosuchspecialpage" => "அவ்வாறான சிறப்புப் பக்கங்கள் எதுவுமில்லை",
+"nospecialpagetext" => "நீங்கள் கோரிய விசேட பக்கம் விக்கிபீடியா மென்பொருளினால் அடையாளம் காணப்படவில்லை",
+# General errors
+#
+"error"			=> "தவறு",
+"databaseerror" => "தரவுத்தள தவறு",
+"dberrortext"	=> "ஒரு தரவுத்தள வினவல் தொடரமைப்புத் தவறு ஏற்பட்டுள்ளது.
+கடைசியாக முயற்சிக்கப்பட்ட தரவுத்தள வினவல்:
+<blockquote><tt>$1</tt></blockquote>
+செயலுக்குள்(function) இருந்து \"<tt>$2</tt>\".
+MySQL returned error \"<tt>$3: $4</tt>\".",
+"dberrortextcl" => "ஒரு தரவுத்தள வினவல் தொடரமைப்புத் தவறு ஏற்பட்டுள்ளது.
+கடைசியாக முயற்சிக்கப்பட்ட தரவுத்தள வினவல்:
+\"$1\"
+செயலுக்குள்(function) இருந்து \"$2\".
+MySQL returned error \"$3: $4\".",
+"noconnect"		=> "மன்னிக்கவும்! இந்த விக்கி தளத்தில் தொழில் நுட்பப் பிரச்சனை ஏற்பட்டுள்ளது, தரவுத்தள வழங்கனுடன் தொடர்பு கொள்ளமுடியவில்லை.",
+"nodb"			=> "தரவுத்தள $1 தெரிவுசெய்ய முடியவில்லை",
+"cachederror"		=> "கீழே இருப்பது கோரப்பட்ட பக்கத்தினுடைய ஒரு இடைமாற்று (cached) நகலாகும், இது நிகழ்நிலைக்குச் சரியாக (up to date) இல்லாதிருக்கக் கூடும்.",
+"readonly"		=> "தரவுத்தளம் பூட்டப்பட்டது",
+"enterlockreason" => "பூட்டுக்கான காரணத்தைத் தருக. பூட்டு எப்பொழுது திறக்கப்படும் என்பதையும் குறிப்பிடுக.",
+"readonlytext"	=> "விக்கிபீடியா தரவுத்தளம் தற்போது பூட்டப்பட்டுள்ளது. வழமையான பராமரிப்புக்காகவாக இருக்கலாம். புதிய பதிவுகளோ திருத்த்ங்களோ செய்ய முடியாது.  இதன் பின்னர் இயல்பு நிலைக்குக் கொண்டுவரப்படும்.
+இந்த விளக்கத்தை இதனைப் பூட்டிய நிர்வாகி வழங்கியுள்ளார்:
+<p>$1",
+"missingarticle" => "கண்டுபிடித்திருக்கவேண்டிய பக்கத்தின் எழுத்துக்களை தரவுத்தளம் கண்டுபிடிக்கவில்லை. பக்கத்தின் பெயர் \"$1\".
+
+<p>நீக்கப்பட்ட பக்கமொன்றுக்கு வழக்கிழந்த வேறுபாடு (diff) அல்லது வரலாறு (History) இணைப்பைப் பின்பற்றுவதன் மூலம் இது வழக்கமாக ஏற்படுகிறது.
+<p>அப்படியில்லாவிட்டால் இது ஒரு மென்பொருள் வழுவாக இருக்கக்கூடும். யூஆரெல் (URL) ஐக் குறித்துக் கொண்டு அதைத் தயவுசெய்து ஒரு நிர்வாகிக்கு அறிவிக்கவும்.",
+"internalerror" => "உள்ளகத் தவறு",
+"filecopyerror" => "கோப்பை நகல் செய்ய முடியவில்லை\"$1\" to \"$2\".",
+"filerenameerror" => "கோப்பை பெயர்மாற்ற முடியவில்லை\"$1\" to \"$2\".",
+"filedeleteerror" => "கோப்பை நீக்க முடியவில்லை\"$1\".",
+"filenotfound"	=> "கோப்பைக் கண்டுபிடிக்க முடியவில்லை\"$1\".",
+"unexpected"	=> "எதிர்பாராத பெறுமானம்: \"$1\"=\"$2\".",
+"formerror"		=> "தவறு: படிவத்தை சமர்ப்பிக்க முடியவில்லை",
+"badarticleerror" => "இச் செயற்பாட்டை இப்பக்கத்தில் செயற்படுத்த முடியாது.",
+"cannotdelete"	=> "குறிக்கப்பட்ட பக்கத்தையோ படிமத்தையோ நீக்க முடியாது. (வேறு யாராலோ ஏற்கெனவே நீக்கப்பட்டிருக்கலாம்.)",
+"badtitle"		=> "பழுதுள்ள தலைப்பு",
+"badtitletext"	=> "கோரப்பட்ட பக்கத்தின் தலைப்பு செல்லாது, வெறுமை, அல்லது பிழையாக இணைக்கப்பட்ட மொழிகளிடை அல்லது விக்கியிடைத் தலைப்பாகும்.",
+"perfdisabled" => "மன்னிக்கவும்! இந்த வசதி தற்காலிகமாக செயலற்றதாக்கப்பட்டுள்ளது. ஏனெனில் இது விக்கியை ஒருவரும் பயன்படுத்த முடியாத அளவுக்கு வேகத்தைக் குறைத்துள்ளது.",
+"perfdisabledsub" => "இதோ $1: இலிருந்து ஒரு சேமிக்கப்பட்ட ஒரு நகல்",
+"wrong_wfQuery_params" => "பிழையான அளபுருக்கள்(parameters) wfQuery()<br />
+செயல் (Function): $1<br />
+வினவல் (Query): $2",
+"viewsource" => "மூலத்தைப் பார்",
+"protectedtext" => "தொகுப்பதைத் தடுப்பதற்காக இப் பக்கம் பூட்டப்பட்டுள்ளது. இதற்குப் பல காரணங்கள் உண்டு. தயவுசெய்து
+[[{{ns:project}}:Protected page]] ஐப் பார்க்கவும்.
+
+நீங்கள் இப் பக்கத்தைப் பார்க்கவும், நகல் எடுக்கவும் முடியும்:",
+
+# Login and logout pages
+#
+"logouttitle"	=> "பயனர் விடுபதிகை",
+"logouttext" => "நீங்கள் இப்பொழுது விடுபதிகையில் உள்ளீர்கள்.
+நீங்கள் தொடர்ந்தும் விக்கிபீடியாவை அடையாளமின்றி உபயோகிக்கலாம், அல்லது அதே பயனராகவோ வேறு பயனராகவோ மீண்டும் புகுபதிகை செய்யலாம். உங்கள் உலவியின் இடைமாற்று (browser cache) அழிக்கப்படும்வரை சில பக்கங்கள் தொடர்ந்தும் புகுபதிகையில் உள்ளது போன்றே காட்சி தரும் என்பதைக் கவனிக்கவும்",
+
+"welcomecreation" => "<h2>வருக, $1!</h2><p>உங்கள் கணக்கு உருவாக்கப்பட்டுள்ளது.
+உங்கள் விக்கிபீடியா விருப்புகளை சொந்தமயப் (personalize) படுத்த மறவாதீர்கள்.",
+"loginpagetitle" => "பயனர் புகுபதிகை",
+"yourname" => "உங்கள் பயனர்பெயர்",
+"yourpassword" => "உங்கள் கடவுச்சொல்",
+"yourpasswordagain" => "கடவுச்சொல்லைத் திரும்ப எழுதவும்",
+"remembermypassword" => "எனது கடவுச்சொல்லை அமர்வுகளிடையே (across sessions) ஞாபகத்தில் வைத்திருக்கவும்.",
+"loginproblem" => "உங்கள் புகுபதிகை தொடர்பில் பிரச்சினை உண்டு.
+திரும்ப முயலவும்!",
+"alreadyloggedin" => "பயனர் $1, நீங்கள் ஏற்கெனவே புகு பதிகையில் உள்ளீர்கள்!",
+"login" => "புகுபதிகை",
+"userlogin" => "புகுபதிகை",
+"logout" => "விடுபதிகை",
+"userlogout" => "விடுபதிகை",
+"notloggedin" => "புகுபதிகையில் இல்லை",
+"createaccount" => "புதிய கணக்கு உருவாக்கு",
+"createaccountmail" => "மின்னஞ்சல் மூலம்",
+"badretype" => "நீங்கள் பதிந்த கடவுச்சொல் பொருத்தமாக இல்லை.",
+"userexists" => "நீங்கள் பதிந்த கடவுச் சொல் ஏற்கெனவே உபயோகத்தில் உள்ளது. தயவுசெய்து வேறு பெயர் தெரியவும்.",
+"youremail" => "உங்கள் மின்னஞ்சல்*",
+"yournick" => "உங்கள் அழைக்கும் பெயர் (கையொப்பத்துக்காக)",
+"loginerror" => "புகுபதிகைத் தவறு", "noname" => "நீங்கள் கொடுத்த பயனர் பெயர் செல்லுபடி இல்லை.",
+"loginsuccesstitle" => "புகுபதிகை வெற்றி",
+"loginsuccess" => "நீங்கள் இப்பொழுது \"$1\" ஆக விக்கிபீடியாவில் புகுபதிகை செய்துள்ளீர்கள்.",
+"nosuchuser" => "\"$1\" பெயரில் பயனர் எவருமில்லை. எழுத்துப் பிழைகளைச் சரி பார்க்கவும், அல்லது பின்வரும் படிவத்தை உபயோகித்து புதிய பயனர் கணக்கொன்றை உருவாக்கவும்.",
+"wrongpassword" => "நீங்கள் கொடுத்த கடவுச் சொல் சரியல்ல. மீண்டும் முயற்சிக்கவும்.",
+"mailmypassword" => "புதிய கடவுச் சொல்லொன்றை அஞ்சல் செய்யவும்",
+"passwordremindertitle" => "விக்கிபீடியாவிலிருந்து கடவுச் சொல் நினைவூட்டல்",
+"passwordremindertext" => "யாரோ ஒருவர் (நீங்களாக இருக்கலாம், IP முகவரி $1 இலிருந்து) புதிய விக்கிபீடியா புகுபதிகை கடவுச்சொல் ஒன்று அனுப்பும்படி கோரியுள்ளார். பயனர் \"$2\" க்கான கடவுச்சொல் இப்பொழுது \"$3\". நீங்கள் புகுபதிகை செய்து கடவுச்சொல்லை மாற்றிக்கொள்ளவும்.", "noemail" => "பயனை \"$1\" க்கு மின்னஞ்சல் முகவரி எதுவும் பதியப்பட்டிருக்கவில்லை.",
+"passwordsent" => "\"$1\" பெயரில் பதியப்பட்டுள்ள மின்னஞ்சல் முகவரிக்கு ஒரு புதிய கடவுச்சொல் அனுப்பப்பட்டுள்ளது. பெற்றுக்கொண்டதும் தயவுசெய்து மீண்டும் புகுபதிகை செய்யவும்.",
+# Edit pages
+"summary" => "சுருக்கம்",
+"subject" => "உட்பொருள்/தலைப்புகள்",
+"minoredit" => "இது ஒரு சிறு (minor) தொகுப்பு",
+"watchthis" => "இக் கட்டுரையைக் கவனிக்கவும் (watch)",
+"savearticle" => "பக்கத்தை சேமிக்கவும்",
+"preview" => "முன்தோற்றம்",
+"showpreview" => "முன்தோற்றம் காட்டு",
+"blockedtitle" => "பயனர் தடுக்கப்பட்டுள்ளார்",
+/*"blockedtext" => "உங்கள் பயனர் பெயர் அல்லது IP முகவரி $1 ஆல் தடுக்கப்பட்டுள்ளது. கொடுக்கப்பட்ட காரணம்: $2
+இது பற்றிப் பேசுவதற்கு $1 ஐயோ அல்லது [[{{ns:project}}:Administrators|நிர்வாகிகளில்]] ஒருவரையோ நீங்கள் தொடர்புகொள்ளலாம்.
+பயனர் விருப்பத் தேர்வுகளில்</wiki/Special:Preferences> உங்களுடைய செல்லுபடியாகக்கூடிய மின்னஞ்சல் முகவரி பதியப்பட்டிராவிட்டால் \"email this user\" வசதியை நீங்கள் உபயோகிக்க முடியாது என்பதைக் கவனிக்கவும்.
+உங்கள் IP முகவரி $3. தயவுசெய்து இந்த ஐபி முகவரியை விசாரிப்புகளைச் செய்யும்போது குறிப்பிடவும்.
+
+Note to AOL users
+
+குறிப்பிட்ட ஏஓஎல் (AOL) பயனர் ஒருவருடைய தொடர்ந்த விஷமச் செயல்கள் காரணமாக விக்கிபீடியா அடிக்கடி ஏஓஎல் (AOL) proxy யை தடுக்கிறது. துரதிர்ஷ்டவசமாக ஒரு proxy வழங்கனை பெருமளவு ஏஓஎல் (AOL) பயனர்கள் பயன்படுத்தக் கூடும், அதனால் அப்பாவி AOL பயனர்களும் அடிக்கடி தடுக்கப்படுகிறார்கள். இதனாலேற்படும் வசதியீனங்களுக்கு மன்னிப்புக் கோருகிறோம். இது உங்களுக்கு நிகழ்ந்திருந்தால், தயவுசெய்து ஒரு ஏஓஎல் (AOL) மின்னஞ்சல் முகவரியை உபயோகித்து, நிர்வாகியொருவருக்கு அஞ்சல் செயுங்கள். மேலே கொடுக்கப்பட்டுள்ள ஐபி முகவரியைக் குறிப்பிட மறவாதீர்கள்.",*/
+"whitelistedittitle" => "தொகுப்பதற்கு புகுபதிகை (login) செய்யப்படவேண்டும்.",
+/*"whitelistedittext" => " கட்டுரைகளைத் தொகுப்பதற்கு (edit) நீங்கள் புகுபதிகை (login) </wiki/Special:Userlogin>வேண்டும்.",*/
+"whitelistreadtitle" => "வாசிப்பதற்கு புகுபதிகை (login) செய்ய வேண்டும்",
+/*"whitelistreadtext" => " கட்டுரைகளை வாசிப்பதற்கு நீங்கள் புகுபதிகை (login) </wiki/Special:Userlogin> செய்யவேண்டும்.",*/
+"whitelistacctitle" => "கணக்கொன்று உருவாக்குவதற்கு நீங்கள் அனுமதிக்கப்படவில்லை.",
+/*"whitelistacctext" => "இந்த விக்கியில் கணக்கு ஏற்படுத்துவதற்கு, நீங்கள் log </wiki/Special:Userlogin> செய்வதுடன் உரிய அனுமதியும் பெற்றிருக்க வேண்டும்.",*/
+"accmailtitle" => "கடவுச்சொல் அனுப்பப்பட்டுள்ளது.",
+"accmailtext" => "'$1' உடைய கடவுச்சொல் $2 க்கு அனுப்பப்பட்டுள்ளது.",
+"newarticle" => "(புதிது)",
+"newarticletext" => "ஒரு இணைப்பினூடாக நீங்கள் வந்துள்ள இப் பக்கம் இன்னும் உருவாக்கப்படவில்லை. பக்கத்தை உருவாக்குவதற்குக் கீழேயுள்ள கட்டத்துள் தட்டச்சிடத் தொடங்குங்கள். (மேலதிக விபரங்களுக்கு உதவிப் பக்கங்களைப்  பார்க்கவும்). நீங்கள் தவறுதலாக இங்கே வந்திருந்தால், உங்கள் உலாவி (browser) யின் பின்னே (back) பொத்தானைச் சொடுக்கவும்.",
+/*"anontalkpagetext" => "---- இது இன்னும் கணக்கொன்று ஏற்படுத்தாத அல்லது இதனை வழமையாகப் பயன்படுத்தாத பயனர்களுக்குரிய கலந்துரையாடல் பக்கமாகும். அதனால் நாங்கள் இவரை அடையாளம் காண்பதற்கு எண்சார்ந்த ஐபி (IP) முகவரி XXXயை உபயோகிக்கிறோம். இவ்வாறான ஐபி (IP) முகவரிகள் பல பயனர்(user) களினால் பகிர்ந்துகொள்ளப்படலாம். நீங்கள் ஒரு முகவரியற்ற பயனராயிருந்து, தொடர்பற்ற கருத்துக்கள் உங்களைக் குறித்துச் சொல்லப்பட்டிருப்பதாக நீங்கள் உணர்ந்தால், முகவரியற்ற ஏனைய பயனர்களுடனான குழப்பங்களை எதிர்காலத்தில் தவிர்ப்பதற்கு, தயவுசெய்து கணக்கொன்றை ஏற்படுத்துங்கள் அல்லது புகுபதிகை (login) செய்யுங்கள் </wiki/Special:Userlogin>.",*/
+"noarticletext" => "(இப் பக்கத்தில் தற்பொழுது எழுத்துக்கள் எதுவுமில்லை)",
+"updated" => "(இற்றைப்படுத்தப்பட்டது Updated)",
+"note" => "Note:",
+"previewnote" => "இது ஒரு முன்தோற்றம் (preview) மட்டுமே என்பதையும், இன்னும் சேமிக்கப்படவில்லை என்பதையும் ஞாபகத்தில் வைத்திருக்கவும்!",
+"previewconflict" => "இந்த முன்தோற்றம் உரை தொகுப்புப் பகுதியின் மேற்பகுதியிலுள்ள உரையைப் பிரதிபலிக்கின்றது. நீங்கள் இப்பொழுது சேமித்தால் மேற்படி தோற்றமே கிடைக்கும்.",
+"editing" => "தொகுத்தல் (Editting) $1",
+'editinguser' => "தொகுத்தல் (Editting) $1",
+"editingsection" => "தொகுத்தல் (Editting) $1 (பிரிவு)",
+"editingcomment" => "தொகுத்தல் (Editting) $1 (கருத்து)",
+"editconflict" => "முரண்பாடுகளைத் தொகுக்கவும் (edit): $1",
+"explainconflict" => "நீங்கள் தொகுக்கத் தொடங்கியதின் பின்னர் யாரோஒருவர் இப் பக்கங்களில் மாற்றங்கள் செய்துள்ளார். உரைப் பகுதியின் (text area ) மேற்பக்கம் தற்போதுள்ள உரைகளைக் கொண்டிருக்கும், நீங்கள் செய்த மாற்றங்கள் உரையின் கீழ்ப்பக்கம் காணப்படும். நீங்கள் உங்களுடைய மாற்றங்களை ஏற்கெனவேயிருக்கும் உரையுடன் ஒருங்கிணைக்க வேண்டியிருக்கும்.
+ \"Save page\" ஐ அழுத்தும்போது உரைப்பகுதியின் மேற்பக்கத்திலுள்ள உரை மட்டுமே சேமிக்கப்படும்.<br />",
+
+"yourtext" => "உங்கள் உரை",
+"storedversion" => "சேமிக்கப்பட்ட பதிப்பு",
+"editingold" => "எச்சரிக்கை: நீங்கள் தொகுத்துக்கொண்டிருப்பது இப் பக்கத்தின் பழைய திருத்தமொன்றை(revision)யாகும். இதை நீங்கள் சேமித்தால், மேற்படி திருத்தத்தின் பின்பு நீங்கள் செய்த மாற்றங்கள் அனைத்தும் இழக்கப்படும்.",
+"yourdiff" => "வித்தியாசங்கள்",
+/*"copyrightwarning" => "விக்கிபீடியாவுக்கான ஆக்கங்கள் அனைத்தும் ஜிஎன்யூ விடுதலை மனப்பாங்கொடு உருவான ஆவண அனுமதி (GNU Free Documentation License) முறையின் கீழ் வழங்கப்பட்டதாகவே கருதப்படும் என்பதைத் தயவு செய்து கவனிக்கவும். (விபரங்களுக்கு $1 ஐப் பார்க்க).
+
+உங்களுடைய எழுத்துக்கள் கடுமையாகத் தொகுக்கப்படுவதையோ, விரும்பியபடி விநியோகிக்கப்படுவதையோ நீங்கள் விரும்பாவிடில் இங்கே சமர்ப்பிக்காதீர்.<br />
+அத்துடன் நீங்களே இதை எழுதியதாகவோ, அல்லது வேறு பொதுக் களம் (domain) அல்லது அது போன்ற விடுதலையளிக்கும் மூலங்களிலிருந்து பிரதி பண்ணியிருப்பதாகவோ உறுதி கூறுகிறீர்கள்.
+<strong>பதிப்புரிமையுள்ள ஆக்கங்களை அனுமதியின்றி சமர்ப்பிக்க வேண்டாம்!</strong>",*/
+"longpagewarning" => "<strong>எச்சரிக்கை: இந்தப் பக்கம் $1 கிலோபைட்ஸ் நீளமானது; 32kb யை அண்மிக்கும் அல்லது அதிலும் கூடிய அளவுள்ள பக்கங்களைத் தொகுப்பதில் சில உலாவிகளுக்கு (browsers) பிரச்சினை உண்டு.
+தயவுசெய்து பக்கங்களைச் சிறிய பகுதிகளாகப் பிரிப்பது பற்றிக் கவனத்தில் எடுக்கவும்.</strong>",
+"readonlywarning" => "<strong>எச்சரிக்கை: பராமரிப்புக்காகத் தரவுத்தளம் பூட்டப்பட்டுள்ளது, எனவே உங்கள் தொகுப்புக்களை இப்பொழுது சேமிக்க முடியாது. உங்கள் உரையை (text) இன்னொரு உரைக் கோப்பில் (text file) வெட்டி ஒட்டி சேமித்துவைத்துப் பின்பு உபயோகிக்கலாம்.</strong>",
+"protectedpagewarning" => "<strong>எச்சரிக்கை: முறைமை செயற்படுத்துனர் (sysop) முன்னுரிமையுள்ள பயனர்கள் மட்டுமே தொகுக்கும் விதத்தில் இந்த பக்கம் பூட்டப்பட்டுள்ளது.  நீங்கள்
+[[Project:Protected_page_guidelines|காக்கப்பட்ட பக்கங்களுக்கான வழிகாட்டல்களைப் பின்பற்றுவதை உறுதி செய்துகொள்ளவும்]].</strong>",
+
+# History pages
+#
+"revhistory"	=> "திருத்த (revision) வரலாறு",
+"nohistory"		=> "இப் பக்கத்துக்குத் தொகுப்பு வரலாறு இல்லை.",
+"revnotfound"	=> "திருத்தம்(revision) காணப்படவில்லை",
+"revnotfoundtext" => "இப் பக்கத்துக்குரிய, நீங்கள் கோரிய பழைய திருத்தம் (revision) காணப்படவில்லை.
+இந்தப் பக்கத்தை அணுகுவதற்கு நீங்கள் பயன்படுத்திய URL ஐத் தயவுசெய்து சரி பார்க்கவும்.",
+"loadhist"		=> "பக்க வரலாறு ஏற்றப்படுகிறது",
+"currentrev"	=> "நடைமுறையிலுள்ள திருத்தம்",
+"revisionasof"	=> "$1 இல் நிலவும் திருத்தம் (Revision)",
+"cur"			=> "நடப்பு",
+"next"			=> "அடுத்த",
+"last"			=> "கடைசி",
+"orig"			=> "மூலம்",
+"histlegend"	=> "குறியீட்டு விளக்கம்: (நடப்பு) = நடைமுறையிலுள்ள பதிப்புடனான (version) வேறுபாடு,
+(கடைசி) = முந்திய பதிப்புடனான வேறுபாடு, M = சிறு தொகுப்பு",
+
+# Diffs
+#
+"difference"	=> "(திருத்தங்கள்(revisions) இடையிலான வேறுபாடு)",
+"loadingrev"	=> "diff க்காகத் திருத்தம் ஏற்றம் செய்யப்படுகிறது",
+"lineno"		=> "வரிசை $1:",
+"editcurrent"	=> "இப் பக்கத்தின் தற்போதைய பதிப்பைத் தொகுக்கவும்(edit)",
+
+# Search results
+#
+"searchresults" => "தேடல் முடிவுகள்",
+"searchresulttext" => "விக்கிபீடியாவில் தேடுவதற்கான மேலதிக விபரங்களுக்கு, [[விக்கிபீடியா:தேடல்|விக்கிபீடியாவில் தேடல்]] ஐப் பார்க்க.",
+"searchsubtitle"	=> "வினவலுக்காக\"[[:$1]]\"",
+"searchsubtitleinvalid"	=> "வினவலுக்காக\"$1\"",
+"badquery"		=> "பழுதுடன் செய்யப்பட்ட தேடல் வினவல் (search query)",
+"badquerytext"	=> "உங்களுடைய வினவலை எங்களால் செயலாக்க முடியவில்லை.
+இது ஏனென்றால், சிலவேளை மூன்று எழுத்துக்கள் நீளத்திலும் சிறிதான சொல்லைத் தேட முயன்றிருக்கலாம், இது இன்னும் ஆதரிக்கப்படவில்லை.
+தொடரை நீங்கள் பிழையாகத் தட்டச்சிட்டதனாலும் இது நேர்ந்திருக்கக்கூடும், உதாரணமாக \"fish and and scales\".
+தயவுசெய்து இன்னொரு வினவலை (query) முயலுங்கள்.",
+"matchtotals"	=> "வினவல் (query) \"$1\"  $2 கட்டுரைத்,தலைப்புக்களுடனும், $3 கட்டுரை உரைகளுடனும் பொருந்தியுள்ளது.",
+"noexactmatch" => "சரியாக இத் தலைப்பையுடைய பக்கமெதுவும் இல்லை, முழு உரைத் தேடல் நடைபெறுகிறது.",
+"titlematches"	=> "கட்டுரைத் தலைப்பு பொருந்துகிறது",
+"notitlematches" => "ஒரு கட்டுரைத் தலைப்பும் பொருந்தவில்லை",
+"textmatches"	=> "கட்டுரை உரை (text) பொருந்துகிறது",
+"notextmatches"	=> "கட்டுரை உரை (text) எதுவும் பொருந்தவில்லை",
+"prevn"			=> "முன் $1",
+"nextn"			=> "அடுத்த $1",
+"viewprevnext"	=> "பார் ($1) ($2) ($3).",
+"showingresults" => "#<b>$2</b> உடன் தொடங்கும் <b>$1</b> முடிவுகள் கீழே காட்டப்பட்டுள்ளன.",
+"showingresultsnum" => "#<b>$2</b> உடன் தொடங்கும் <b>$3</b> முடிவுகள் கீழே காட்டப்பட்டுள்ளன.",
+
+"nonefound"		=> "<strong>குறிப்பு</strong>: \"have\", \"from\" போன்ற பொதுவான, அட்டவணைப்படுத்தப்படாத, சொற்களைத் தேடும்போதோ அல்லது ஒன்றுக்கு மேற்பட்ட தேடலுக்கான சொற்களைக் குறிப்பிடும் போதோதான் (எல்லாத் தேடுதலுக்கான சொற்களையும் கொண்ட பக்கங்கள் மட்டுமே தேடல் முடிவில் காணப்படும்) தேடல் அடிக்கடி தோல்வியில் முடிகின்றது.",
+"powersearch" => "தேடு",
+"powersearchtext" => "பெயர்வெளிகளில் (namespaces) இல் தேடுக:<br />
+$1<br />
+$2 பட்டியல் &nbsp; $3 $9 க்கான தேடலை மீள்வழிப்படுத்துகிறது",
+"searchdisabled" => "<p>மன்னிக்கவும்! செயற்திறன் காரணங்களுக்காக முழு அளவு உரை தேடல் தற்காலிகமாக முடக்கப்பட்டுள்ளது. அதுவரை நீங்கள் கீழேயுள்ள கூகிள் (Google) தேடலைப் பயன்படுத்தலாம். இது சில சமயம் இற்றைப்படுத்தப்படாததாய் இருக்கக்கூடும்.</p>",
+"blanknamespace" => "(முதன்மை)",
+
+# Preferences page
+#
+"preferences"	=> "முன்னுரிமைகள்",
+"prefsnologin" => "புகுபதிகை செய்யப்படவில்லை",
+"prefsnologintext"	=> "பயனர் விருப்பத் தேர்வுகளை அமைப்பதற்கு நீங்கள் [[Special:Userlogin|புகுபதிகை செய்ய வேண்டும்]].",
+"prefsreset"	=> "உங்கள் விருப்புகள் சேமிப்பிலிருந்து மீட்டமைக்கப்பட்டுள்ளன (reset).",
+"qbsettings"	=> "விரைவுச் சட்ட அமைவுகள்",
+'qbsettings-none'	=> 'எதுவுமில்லை',
+'qbsettings-fixedleft'	=> 'இடம் நிலைத்த',
+'qbsettings-fixedright'	=> 'வலம் நிலைத்த',
+'qbsettings-floatingleft'	=> 'இடம் மிதப்பு',
+"changepassword" => "கடவுச்சொல்லை மாற்று",
+"skin"			=> "தோல் (Skin)",
+"math"			=> "பதிப்புவரை கணிதம் (Rendering math)",
+"dateformat"	=> "திகதி வடிவம்",
+"math_failure"		=> "பாகுபடுத்தல் (parse) தோல்வி",
+"math_unknown_error"	=> "அறியப்படாத தவறு",
+"math_unknown_function"	=> "அறியப்படாத பணி",
+"math_lexing_error"	=> "தொகுத்தல் (lexing) தவறு",
+"math_syntax_error"	=> "தொடரமைப்புத் தவறு (syntax error)",
+"saveprefs"		=> "விருப்பத் தேர்வுகளைச் சேமி",
+"resetprefs"	=> "விருப்பத் தேர்வுகளை மீட்டமை (Reset)",
+"oldpassword"	=> "பழைய கடவுச்சொல்",
+"newpassword"	=> "புதிய கடவுச்சொல்",
+"retypenew"		=> "புதிய கடவுச்சொல்லை மீண்டும் அச்சிடு",
+"textboxsize"	=> "உரைக் கட்ட (Textbox) அளவுகள்",
+"rows"			=> "வரிசைகள்",
+"columns"		=> "நிரல்கள் (Columns)",
+"searchresultshead" => "தேடல் முடிவு அமைவுகள் (settings)",
+"resultsperpage" => "ஒரு பக்கத்துக்குக் காட்டப்படவேண்டிய அடிகள் (Hits)",
+"contextlines"	=> "அடித்தலொன்றுக்குக் காட்டப்பட வேண்டிய வரிகள்",
+"contextchars"	=> "ஒரு வரிக்கான இடம்சார் (context) எழுத்துக்கள்",
+"stubthreshold" => "அடிப்படைக் காட்சிப்படுத்தலுக்கான மாறுநிலை (Threshold)",
+"recentchangescount" => "அண்மைய மாற்றங்களில் தலைப்புகள் எண்ணிக்கை",
+"savedprefs"	=> "உங்கள் விருப்புகள் சேமிக்கப்பட்டுள்ளன.",
+"timezonetext"	=> " வழங்கன் (server) நேரத்துக்கும் (UTC) உங்கள் உள்ளூர் நேரத்துக்குமுள்ள வேறுபாட்டை மணிகளில் பதிக.",
+"localtime"	=> "உள்ளூர் நேரக் காட்சிப்பாடு (display)",
+"timezoneoffset" => "நேர இடைவெளி",
+"servertime"	=> "தற்போது வழங்கன் (Server) நேரம்",
+"guesstimezone" => "உலவி (browser) யிலிருந்து நிரப்புக.",
+"defaultns"		=> "முன்னிருப்பாக இந்த பெயர்வெளிகளில் (namespaces) தேடவும்:",
+
+# Recent changes
+#
+"changes" => "மாற்றங்கள்",
+"recentchanges" => "அண்மைய மாற்றங்கள்",
+"rcnote" => "கீழே காணப்படுவது கடைசி $2 நாட்களில் செய்யப்பட்ட $1 மாற்றங்களாகும்.",
+"rcnotefrom" => "கீழே காணப்படுவது $2 இலிருந்து செய்யப்பட்ட மாற்றங்கள் ($1வரை காட்டப்பட்டுள்ளது).",
+"rclistfrom" => "$1 தொடக்கம் செய்யப்பட்ட புதிய மாற்றங்களைக் காட்டவும்",
+"rclinks" => "கடைசி $2 மணித்தியாலங்கள் / கடைசி $3 நாட்களில் செய்யப்பட்ட கடைசி $1 மாற்றங்களைக் காட்டு",
+"rclinks" => "கடைசி $2 நாட்களில் கடைசி $1 மாற்றங்களைக் காட்டு .",
+"diff" => "வேறுபாடு",
+"hist" => "வரலாறு",
+"hide" => "மறை",
+"show" => "காட்டு",
+"minoreditletter" => "M",
+"newpageletter" => "N",
+# Upload
+"upload" => "கோப்பைப் பதிவேற்று (Upload file)",
+"uploadbtn" => "கோப்பைப் பதிவேற்று (Upload file)",
+"reupload" => "மீளப் பதிவேற்று (Re-upload)",
+"reuploaddesc" => "பதிவேற்றும் படிவத்துக்கு மீளச் செல்.",
+"uploadnologin" => "புகுபதிகை (login) செய்யப்படவில்லை",
+"uploadnologintext" => "கோப்புகளைப் பதிவேற்றம் செய்வதற்கு நீங்கள்[[Special:Userlogin|புகுபதிகை செய்திருக்க வேண்டும்]].",
+"uploaderror" => "ஏற்றுத் தவறு",
+"uploadtext" => "நிறுத்தவும்! இங்கே பதிவேற்றம் செய்யுமுன், விக்கிபீடியாவின் [[Project:Image_use_policy|படிமம் பயன்படுத்தற் கொள்கை]] யை வாசித்துப் பின்பற்றுவதை உறுதிப்படுத்திக் கொள்ளவும்.
+நீங்கள் குறித்த பெயருடைய கோப்பு எற்கெனவே விக்கிபீடியாவில் இருக்குமாயின், அது எச்சரிக்கை கொடாமல் பிரதியீடு செய்யப்படும். எனவே கோப்பொன்றை இற்றைப்படுத்துவது (update) உங்கள் நோக்கமாக இல்லாவிடில், அதே பெயரில் வேறு கோப்பு உள்ளதா என முதலில் அறிந்து கொள்ளவும்.
+முன்னர் பதிவேற்றம் செய்யப்பட்ட படிமங்களைப் பார்ப்பதற்கு அல்லது தேடுவதற்கு, [[Special:Imagelist|பதிவேற்றம் செய்யப்பட்ட படிமங்களின் பட்டிய]] லுக்குச் செல்லவும். பதிவேற்றங்களும் நீக்கல்களும் [[Project:Upload_log|பதிவேற்றப் பதிகையில் (upload log)]] பதியப்பட்டுள்ளன.
+உங்கள் கட்டுரைகளில் பயன்படவுள்ள புதிய படிமங்களைப் பதிவேற்றுவதற்கு கீழேயுள்ள படிவத்தைப் பயன்படுத்தவும். பெரும்பாலான உலவிகளில், கோப்புத் திறக்கும் உரையாடல் பெட்டியைக் காட்டும் உங்கள் இயக்க முறைமையின் (operating system) இயல்பான ஒரு \"Browse...\" பொத்தானைக் காணலாம்.ஒரு கோப்பைத் தெரிவுசெய்யும்பொது, அதன் பெயர், பொத்தானுக்கு அருகிலுள்ள உரைப்புலத்தில் (text field) நிரப்பப்படும். கோப்பைப் பதிவேற்றம் செய்வதன் மூலம்எந்தப் பதிப்புரிமையையும் மீற்வில்லை என்பதை உறுதிப்படுத்த அதற்குரிய கட்டத்திலும் நீங்கள் குறியிடவேண்டும். பதிவேற்றத்தை நிறைவுசெய்வதற்கு \"Upload\" பொத்தானை அழுத்தவும். உங்கள் வலையக இணைப்பு வேகம் குறைந்ததாக இருப்பின், இதற்குச் சிறிது நேரன் எடுக்கக்கூடும்.
+புகைப்படப் படிமங்களுக்கு JPEG யும், வரைபடங்களுக்கும் ஏனைய குறியீட்டுப் (iconic) படிமங்களுக்கும் PNG யும், ஒலிக் கோப்புகளுக்கு OGG யும் விரும்பத்தக்க வடிவங்களாகும்.
+
+
+குழ்ப்பத்தைத் தவிர்ப்பதற்குத் தயவுசெய்து உங்கள் கோப்புகளுக்கு விபரமாகப் பெயரிடவும்.உங்கள் கட்டுரைகளில் படிமங்களைச் சேர்ப்பதற்கு,
+'''<nowiki>[[image:file.jpg]]</nowiki>''' அல்லது '''<nowiki>[[image:file.png|alt text]]</nowiki>''' இணைப்பு வடிவத்தையும், ஒலிகளுக்கு '''<nowiki>[[media:file.ogg]]</nowiki>''' இணைப்புவடிவத்தையும் பயன்படுத்தவும்.
+
+விக்கிபீடியா பக்கங்களைப் பொறுத்தவரை, கலைக் கழஞ்சியத்துக்கு உதவும் என்று மற்றவர்கள் கருதினால், உங்கள் பதிவேற்றத்தைத் தொகுக்கவோ அல்லது நீக்கவோ முடியும். அத்துடன் நீங்கள் இந்த முறைமையைத் துஷ்பிரயோகம் செய்தால், பதிவேற்றம் செய்வதிலிருந்து தடுக்கப்படவும் கூடும் என்பதையும் கவனிக்கவும்.",
+
+"uploadlog"		=> "பதிவேற்றப் பதிகை (Upload_log)",
+"uploadlogpage" => "பதிவேற்றப் பதிகை (Upload_log)",
+"uploadlogpagetext" => "கீழேயுள்ளது மிக அண்மையில் பதிவேற்றம் செய்யப்பட்ட கோப்புகளின் பட்டியலாகும்.
+காட்டப்பட்டுள்ள எல்லா நேரங்களும் வழங்கன் நேரமாகும்(UTC).
+<ul>
+</ul>",
+"filename"		=> "கோப்புப் பெயர்",
+"filedesc"		=> "சுருக்கம்",
+"filestatus" => "பதிப்புரிமை நிலை",
+"filesource" => "மூலம்",
+"copyrightpage" => "விக்கிபீடியா:பதிப்புரிமை",
+"copyrightpagename" => "விக்கிபீடியா பதிப்புரிமை",
+"uploadedfiles"	=> "ஏற்றப்பட்ட (Uploaded) கோப்புகள்",
+"minlength"		=> "படிமத்தின் (Image) பெயர் குறைந்தது மூன்று எழுத்துக்களாவது இருக்க வேண்டும்.",
+"badfilename"	=> "படிமப் (Image) பெயர் \"$1\" ஆக மாற்றப்பட்டுள்ளது.",
+"badfiletype"	=> "\".$1\" இது ஒரு சிபாரிசு செய்யப்பட்ட படிமக் கோப்பு வடிவம் (format) அல்ல.",
+"largefile"		=> "படிமங்களிமன் அளவு 100k க்கு மேற்படாதிருக்க சிபாரிசு செய்யப்படுகிறது.",
+"successfulupload" => "வெற்றிகரமான பதிவேற்றுதல் (upload)",
+"fileuploaded"	=> "File \"$1\" வெற்றிகரமாக பதிவேற்றப்பட்டது (uploaded).
+தயவுசெய்து விபரிப்புப் பக்கத்துக்குப் பின்வரும் இணைப்பைப் பின்பற்றவும்: ($2) அத்துடன் கோப்புப் பற்றிய, எங்கிருந்து கிடைத்தது, எப்பொழுது, யாரால் உருவாக்கப்பட்டது மற்றும் உங்களுக்குத் தெரிந்த இன்னோரன்ன தகவல்களையும் நிரப்பவும்.",
+"uploadwarning" => "பதிவேற்றுதல் எச்சரிக்கை",
+"savefile"		=> "கோப்பைச் சேமி",
+"uploadedimage" => "பதிவேற்றப்பட்டது \"[[$1]]\"",
+
+# Image list
+#
+"imagelist"		=> "படிமங்களின் பட்டியல்",
+"imagelisttext"	=> "கீழ் வருவது $2 பாகுபடுத்தப்பட்ட $1 படிமங்களின் பட்டியலாகும்.",
+"getimagelist"	=> "படிமப் பட்டியல் பெற்றுக் கொள்ளப்படுகிறது (fetching)",
+"ilsubmit"		=> "தேடல்",
+"showlast"		=> "$2 பாகுபடுத்தப்பட்ட கடைசி $1 படிமங்களைக் காட்டுக.",
+"byname"		=> "பெயர் வழி",
+"bydate"		=> "திகதி வழி",
+"bysize"		=> "அளவு வழி",
+"imgdelete"		=> "நீக்கு",
+"imgdesc"		=> "விபரம்",
+"imglegend"		=> "குறியீட்டு அட்டவணை: (விபரம்) = படிம விபரங்களைக் காட்டு/தொகு.",
+"imghistory"	=> "படிம வரலாறு",
+"revertimg"		=> "மீள்",
+"deleteimg"		=> "நீக்கு",
+"deleteimgcompletely"		=> "நீக்கு",
+"imghistlegend" => "குறியீட்டு அட்டவணை: (நடப்பு) = இது நடப்பிலுள்ள (current) படிமம், (நீக்கு) = இந்த பழைய பதிப்பை நீக்கு, (திரும்பு) = இப் பழைய பதிப்புக்குத் திரும்பு.
+<br /><i>அந்தத் திகதியில் பதிவேற்றம் செய்யப்பட்ட படிமங்களைப் பார்ப்பதற்கு, திகதி மீது சொடுக்கவும்</i>.",
+"imagelinks"	=> "படிம இணைப்புகள்",
+"linkstoimage"	=> "பின்வரும் பக்கங்கள் இப் படிமத்துக்கு இணைக்கப்பட்டுள்ளன:",
+"nolinkstoimage" => "இப் படிமத்துக்கு இணைக்கப்பட்டுள்ள பக்கங்கள் எதுவும் இல்லை.",
+
+# Statistics
+#
+"statistics"	=> "புள்ளி விபரங்கள்",
+"sitestats"		=> "தள புள்ளி விபரங்கள்",
+"userstats"		=> "பயனர் புள்ளி விபரங்கள்",
+"sitestatstext" => "<b>$1</b> மொத்தப் பக்கங்கள் தரவுத் தளத்தில் உள்ளன.
+இது \"talk\" பக்கங்கள், விக்கிபீடியா பற்றிய பக்கங்கள், குறைந்த அளவு \"stub\"
+பக்கங்கள், வழிமாற்றிகள் (redirects), மற்றும் கட்டுரைத் தரத்தில் இல்லாதிருக்கக்கூடிய ஏனையவற்றையும் உள்ளடக்கும். இவை தவிர்த்து, <b>$2</b> பக்கங்கள் முறையான (legitimate) ஆன கட்டுரைகளாக இருக்கக்கூடும்.<p>
+இங்கே மொத்தமாக <b>$3</b> பக்கங்கள் பார்க்கப்பட்டதுடன், மென்பொருள் தரமுயர்த்த்ப்பட்டதிலிருந்து (நவம்பர் 20, 2003) <b>$4</b> பக்கங்கள் தொகுக்கப்பட்டுள்ளன. இது ஒரு பக்கத்துக்கு <b>$5</b> சராசரித் தொகுப்புக்களும், ஒரு தொகுப்புக்கு <b>$6</b> பார்வைகளும் ஆகின்றது.",
+"userstatstext" => "<b>$1</b> பதிவு செய்யப்பட்ட பயனர்கள் உள்ளனர்.
+இவர்களில் <b>$2</b> பேர் நிர்வாகிகள்($3 பார்க்கவும்).",
+
+# Maintenance Page
+#
+"disambiguations"	=> "கவர்படுநிலைதீர் (Disambiguation) பக்கங்கள்",
+"disambiguationspage"	=> "விக்கிபீடியா:கவர்படுநிலைதீர்_பக்க_இணைப்புகள்",
+"disambiguationstext"	=> "இக் கட்டுரைகள் ஒரு <i>கவர்படுநிலைதீர் (disambiguation) பக்கத்து</i>க்கு இணைக்கப்பட்டுள்ளன. பதிலாக இவை பொருத்தமான தலைப்புக்களுக்கு இணைக்கப்பட வேண்டும்.<br />ஒரு பக்கம் $1 இலிருந்து இணைப்புக் கொடுபட்டிருந்தால் கவர்படுநிலைத் தீர்வாகக் (disambiguation) கருதப்படும்.<br /> ஏனைய பெயர்வெளிகளிலிருந்தான இணைப்புக்கள் இங்கே பட்டியலிடப்<i>படவில்லை</i>.",
+"doubleredirects"	=> "இரட்டை வழிமாற்றுகள் (Redirects)",
+"doubleredirectstext"	=> "<b>கவனிக்கவும்:</b> இந்தப் பட்டியல் போலியான நேர்மதிப்பு (positives) களைக் கொண்டிருக்கக்கூடும். இது வழக்கமாக, இணைப்புடன் கூடிய மேலதிக உரை முதலாவது #வழிமாற்றுக்குக் கீழ் இருப்பதைக் குறிக்கும்.<br />\nஒவ்வொரு வரியும், முதலாம் இரண்டாம் வழிமாற்றுகளுக்கு இணைப்புகளைக் கொண்டிருப்பதுடன், இரண்டாவது வழிமாற்று உரையின் முதல் வரிக்கும் இணைப்பைக் கொண்டிருக்கும், இது வழக்கமாக முதலாவது வழிமாற்று குறித்துக் காட்ட வேண்டிய \"real\" இலக்குக் கட்டுரையைக் (taget article) கொடுக்கும்.",
+"brokenredirects"	=> "முறிந்த வழிமாற்றுகள்(Redirects)",
+"brokenredirectstext"	=> "பின்வரும் வழிமாற்றுகள் ஒரு இல்லாத கட்டுரைகு இணைப்புக் கொடுபட்டுள்ளது.",
+
+
+# Miscellaneous special pages
+#
+"lonelypages"	=> "உறவிலிப்(Orphaned) பக்கங்கள்",
+"unusedimages"	=> "உபயோகப்படுத்தப்படாத படிமங்கள்",
+"popularpages"	=> "பிரபலமான பக்கங்கள்",
+"nviews"		=> "$1 காட்சிகள்",
+"wantedpages"	=> "வேண்டிய பக்கங்கள்",
+"nlinks"		=> "$1 இணைப்புகள்",
+"allpages"		=> "எல்ல பக்கங்கள்",
+"randompage"	=> "குறிப்பில்வழிப் (Random) பக்கம்",
+"shortpages"	=> "குறும் பக்கங்கள்",
+"longpages"		=> "நீளமான பக்கங்கள்",
+"listusers"		=> "பயனர் அட்டவணை",
+"specialpages"	=> "விசேட பக்கங்கள்",
+"spheading"		=> "எல்லாப் பயனர்களுக்குமான விசேட பக்கங்கள்",
+"recentchangeslinked" => "தொடர்பான மாற்றங்கள்",
+"rclsub"		=> "(\"$1\" இலிருந்து இணைக்கப்பட்ட பக்கங்களுக்கு)",
+"newpages"		=> "புதிய பக்கங்கள்",
+"ancientpages"		=> "மிகப்பழைய கட்டுரைகள்",
+"intl"		=> "மொழியிடை இணைப்புகள்",
+"movethispage"	=> "இப்பக்கத்தை அசை",
+"unusedimagestext" => "<p>இண்டர்நஷனல் விக்கிபீடியா போன்ற மற்ற வலைத் தளங்களில், நேரடி URL மூலம் ஒரு படிமம் இனைக்கப்பட்டிருக்கக் கூடுமென்பதுடன், செயல்படு (active) பயன்பாட்டில் இருந்தும் கூட இங்கே பட்டியலிடப்பட்டிருக்கக்கூடும் என்பதையும் கவனிக்கவும்.",
+"booksources"	=> "நூல் மூலங்கள்",
+"booksourcetext" => "புதிய, பயன்படுத்திய புத்தகங்களை விற்பதுடன், நீங்கள் தேடும் நூல்கள்பற்றிய மேலதிக தகவல்களையும் தரக்கூடிய  வேறு தளங்களுடனான இணைப்புகளின் பட்டியல் கீழே தரப்பட்டுள்ளது. விக்கிபீடியா இந்த வியாபார நிறுவனங்கள் எதனுடனும் கூட்டு வைத்திருக்கவில்லை. அத்துடன் இந்தப் பக்கத்தை ஒரு உத்தரவாதமாக (endorsement) அர்த்தப்படுத்திக்கொள்ளக் கூடாது.",
+
+"alphaindexline" => "$1 to $2",
+
+# Email this user
+#
+"mailnologin"	=> "அனுப்பும் முகவரி இல்லை",
+"mailnologintext" => "நீங்கள்[[Special:Userlogin|புகுபதிகை செய்திருப்பதுடன்]]
+ஏனைய பயனர்களுக்கு மின்னஞ்சல் அனுப்பக்கூடியத்தாக செல்லுபடியாகக்கூடிய மின்னஞ்சல் முகவரியொன்றும் உங்களுடைய  [[Special:Preferences|விருப்பத் தெரிவுகளில்]] கொடுபட்டிருக்கவேண்டும்.",
+"emailuser"		=> "இப் பயனருக்கு மின்னஞ்சல் செய்",
+"emailpage"		=> "மின்னஞ்சல் பயனர்",
+"emailpagetext"	=> "இப் பயனர் ஒரு செல்லுபடியாகக்கூடிய மின்னஞ்சல் முகவரியை அவரது பயனர் விருப்பத்தேர்வுகளில் கொடுத்திருந்தால், கீழ் வரும் படிவம் ஒரு தனித்த செய்தியை அனுப்பும்.
+பயனர் விருப்பத்தேர்வுகளில் நீங்கள் கொடுத்துள்ள மின்னஞ்சல் முகவரி, பெறுனர் பதில் எழுத முடியும் வகையில், அஞ்சலின் \"From\" முகவரியாகக் காட்சி தரும்.",
+"noemailtitle"	=> "மின்னஞ்சல் முகவரி இல்லை",
+"noemailtext" => "இப் பயனர் ஒரு செல்லுபடியாகக்கூடிய மின்னஞ்சல் முகவரியைக் குறிப்பிடவில்லை அல்லது பிற பயனர்களிடமிருந்து மின்னஞ்சல் பெறும் விருப்பத் தேர்வைத் தெரிவு செய்யவில்லை.",
+"emailfrom" => "அனுப்புனர்",
+"emailto" => "பெறுனர்",
+"emailsubject" => "உட்பொருள்",
+"emailmessage" => "செய்தி",
+"emailsend" => "அனுப்பு",
+"emailsent" => "மின்னஞ்சல் அனுப்பப்பட்டது",
+"emailsenttext" => "உங்கள் மின்னஞ்சல் செய்தி அனுப்பப்பட்டது.",
+# Watchlist
+"watchlist" => "என்னுடைய கவனிப்புப் பட்டியல்(watchlist)",
+"mywatchlist" => "என்னுடைய கவனிப்புப் பட்டியல்(watchlist)",
+"nowatchlist" => "உங்களுடைய கவனிப்புப் பட்டியலில் ஒரு விடயமும் இல்லை.",
+"watchnologin" => "புகுபதிகை செயப்படவில்லை",
+"watchnologintext" => "உங்கள் கவனிப்புப் பட்டியலில் திருத்தம் செய்வதற்கு, நீங்கள்[[Special:Userlogin|புகுபதிகை செய்திருக்கவேண்டும்]].",
+"addedwatch" => "கவனிப்புப் பட்டியலில் சேர்க்கப்பட்டது",
+"addedwatchtext" => "பக்கம்\"$1\" உங்கள்<a href=\"" .
+  "{{localurle:Special:Watchlist}}\">கவனிப்புப் பக்கத்தில்</a> சேர்க்கப்பட்டுள்ளது.
+இந்தப் பக்கத்துக்கு எதிகாலத்தில் செய்யப்படவுள்ள மாற்றங்களும், அதனோடிணைந்த பேச்சுப் பக்கமும், அங்கே பட்டியலிடப்படும். அத்துடன் தெரிந்தெடுக்க வசதியாக <a href=\"" .
+  "{{localurle:Special:Recentchanges}}\">அண்மைய மாற்றங்களின் பட்டியலில்</a> இது தடித்த எழுத்துக்களில் காட்டப்படும்.
+பின்னர், இப் பக்கத்தை உங்கள் கவனிப்புப் பட்டியலிலிருந்து நீக்க விரும்பினால், பக்கச் சட்டத் (sidebar) திலுள்ள \"Stop watching\" ஐச் சொடுக்கவும்.",
+"removedwatch" => "கவனிப்புப் பட்டியலிலிருந்து நீக்கப்பட்டது",
+"removedwatchtext" => "இந்தப் பக்கம் \"$1\" உங்கள் கவனிப்புப் பட்டியலிலிருந்து நீக்கப்பட்டது.",
+"watchthispage" => "இந்தப் பக்கத்தைக் கவனிக்கவும்",
+"unwatchthispage" => "கவனிப்பதை நிறுத்தவும்",
+"notanarticle" => "ஒரு கட்டுரை அல்ல",
+"watchnochange" => "காட்சிப்படுத்தப்பட்ட கால இடைவெளியில், கவனிப்பிலுள்ள, உங்கள் விடயமெதுவும் தொகுக்கப்பட்டிருக்கவில்லை.",
+"watchdetails" => "(பேச்சுப் பக்கங்களைக் கணக்கிடாமல், $1 பக்கங்கள் கவனிக்கப்பட்டன; வெட்டுநிலை (cutoff) யிலிருந்து, மொத்தம் $2 பக்கங்கள் தொகுக்கப்பட்டன; $3... [$4 முழுப் பட்டியலையும் காண்பித்துத் தொகுக்கவும்].)",
+"watchmethod-recent" => "கவனிக்கப்படுகின்ற பக்கங்களுக்காக, அண்மைய தொகுப்புகள் தேடிப் பார்க்கப்படுகிறன",
+"watchmethod-list" => "அண்மைய தொகுப்புகளுக்காக, கவனிக்கப்படுகின்ற பக்கங்கள் தேடிப் பார்க்கப்படுகிறன",
+"removechecked" => "குறியிடப்பட்ட விடயங்களைக் கவனிப்புப் பட்டியலிலிருந்து நீக்குக.",
+"watchlistcontains" => "உங்கள் கவனிப்புப் பட்டியல் $1 பக்கங்களைக் கொண்டுள்ளது.",
+"watcheditlist" => "இதோ உங்கள் கவனிப்புப் பக்கங்களுக்கான ஒரு அகரவரிசைப் பட்டியல். உங்கள் கவனிப்புப் பட்டியலிலிருந்து நீக்க விரும்பும் பக்கங்களுக்கான கட்டங்களில் குறியிட்டு, திரையின் கீழ்ப் பாகத்திலுள்ள 'குறியிடப்பட்டதை நீக்குக' பொத்தானைச் சொடுக்கவும்.",
+"removingchecked" => "கோரப்பட்ட விடயங்கள் கவனிப்புப் பட்டியலிலிருந்து நீக்கப்படுகின்றன ...",
+"couldntremove" => "விடயம்'$1' ஐ நீக்க முடியவில்லை...",
+"iteminvalidname" => "விடயம் '$1' தொடர்பில் பிரச்சினை உள்ளது, செல்லுபடியாகாத பெயர்...",
+"wlnote" => "பின்வருவன, கடைசி $2 மணிகளில் செய்யப்பட்ட, கடைசி $1 மாற்றங்களாகும்.",
+"wlshowlast" => "கடைசியைக் காட்டு",
+
+# Delete/protect/revert
+"deletepage" => "பக்கத்தை நீக்கு",
+"confirm" => "உறுதிசெய்",
+"excontent" => "இருந்த உள்ளடக்கம்: '$1'",
+"exbeforeblank" => "வெறுமைப்படுத்த (blanking) முன்னிருந்த உள்ளடக்கம்: '$1'",
+"exblank" => "பக்கம் வெறுமையாய் இருந்தது",
+"confirmdelete" => "நீக்குதலை உறுதிப்படுத்து",
+"deletesub" => "(\"$1\" நீக்கப்படுகிறது)",
+"historywarning" => "எச்சரிக்கை: நீங்கள் நீக்கவுள்ள பக்கத்துக்கு ஒரு வரலாறு உண்டு:",
+"actioncomplete" => "செயற்பாடு நிறைவுற்றது",
+"deletedtext" => "\"$1\" நீக்கப்பட்டு விட்டது. அண்மைய நீக்குதல்களின் பதிவுக்கு $2 ஐப் பார்க்க.",
+"deletedarticle" => "\"$1\" நீக்கப்பட்டது",
+"dellogpage" => "நீக்கல்_பதிவு",
+"dellogpagetext" => "கீழே காணப்படுவது மிக அண்மைய நீக்கல்களின் அட்டவணையாகும். எல்லா நேரங்களும் வழங்கன்(server) நேரங்களாகும்(UTC).",
+"deletionlog" => "நீக்கல்_பதிவு",
+"reverted" => "முன் திருத்தத்துக்கு மீள்விக்கப்பட்டுள்ளது",
+"deletecomment" => "நீக்கலுக்கான காரணம்",
+"imagereverted" => "வெற்றிகரமாக முன்னைய திருத்தத்துக்கு மீழ்விக்கப்பட்டது.",
+"rollback" => "முன்நிலையாக்கத் (Roll back ) தொகுப்புகள்",
+"rollbacklink" => "முன்நிலையாக்கு",
+"rollbackfailed" => "முன்நிலையாக்கம் (Rollback) தோல்வி",
+"cantrollback" => "தொகுப்பை மீழ்விக்க முடியாது; கடைசிப் பங்களிப்பாளரே (contributor) இக் கட்டுரையின் ஆசிரியராகும்.",
+"alreadyrolled" => " ( [[User:$3|$3]] ([[User talk:$3|Talk]]) ஆல் செய்யப்பட்ட [[:$1]] திகதிய கடைசித் தொகுப்பை முன்நிலையாக்க முடியாது; வேறு யாரோ இக் கட்டுரையை ஏற்கெனவே தொகுத்தோ அல்லது முன்நிலையாக்கியோ உள்ளார்.
+கடைசியாகத் தொகுத்தவர்[[User:$3|$3]] ([[User talk:$3|Talk]]).",
+# only shown if there is an edit comment
+"editcomment" => "தொகுப்புக்குரிய கருத்துரை (comment): \"$1\".",
+"revertpage" => "$1 ஆல் கடைசித் தொகுப்புக்கு முன்நிலையாக்கப்பட்டது",
+# Undelete
+"undelete" => "நீக்கப்பட்ட பக்கங்களை மீட்டெடு",
+"undeletepage" => "பார்ப்பதுடன், நீக்கப்பட்ட பக்கங்களை மீட்டெடு",
+"undeletepagetext" => "பின்வரும் பக்கங்கள் நீக்கப்பட்டுவிட்டன எனினும் காப்பகத்திலுள்ளதுடன் அவற்றை மீட்டெடுக்கவும் முடியும்.  காப்பகம் காலத்துக்குக் காலம் சுத்தப்படுத்தப்படலாம்.",
+"undeletearticle" => "நீக்கப்பட்ட கட்டுரையை மீட்டெடு",
+"undeleterevisions" => "$1 திருத்தங்கள் காப்பகப்படுத்த்ப்பட்டன",
+"undeletehistory" => "இந்தப் பக்கத்தை நீங்கள் மீள்வித்தால், எல்லாத் திருத்தங்களும் வரலாற்றுக்கு மீள்விக்கப்படும். நீக்குதலின் பின்னர், அதே பெயருடைய வேறொரு புதிய பக்கம் உருவாக்கப்பட்டிருந்தால், மீள்விக்கப்பட்ட திருத்தங்கள் முன்னைய வரலாற்றிலேயே காணப்படும், அத்துடன் உயிர்ப்பு நிலையிலுள்ள () நடப்புத் திருத்தம் தன்னியக்கமாகப் பிரதியீடு செய்யப்பட மாட்டாது.",
+"undeleterevision" => "$1 திருத்தத்தை நீக்கு",
+"undeletebtn" => "மீட்டெடு!",
+"undeletedarticle" => "\"$1\" மீட்டெடுக்கப்பட்டது",
+
+# Contributions
+#
+"contributions"	=> "பயனர் பங்களிப்புக்கள்",
+"mycontris" => "என் பங்களிப்புக்கள்",
+"contribsub2"	=> "$1 ($2) க்காக",
+"nocontribs"	=> "இந்த நிபந்தனையுடன் ஒத்துப்போகும் வகையில் மாற்றங்களெதுவும் காணப்படவில்லை.",
+"ucnote"		=> "பின்வருவது கடந்த <b>$2</b> நாட்களில் இப் பயனரினால் செய்யப்பட்ட கடைசி <b>$1</b> மாற்றங்களாகும்.",
+"uclinks"		=> "கடைசி $1 மாற்றங்களைக் காண்க; கடைசி $2 நாட்களைப் பார்.",
+"uctop"		=> " (மேல்)" ,
+
+# What links here
+#
+"whatlinkshere"	=> "இப் பக்கத்தை இணைத்தவை",
+"notargettitle" => "இலக்கு இல்லை",
+"notargettext"	=> "நீங்கள் இந்தச் செயலை எந்தப் பயனர் அல்லது பக்கம் தொடர்பில் செய்வது என்பதைக் குறிப்பிடவில்லை.",
+"linklistsub"	=> "(இணைப்புகளின் பட்டியல்)",
+"linkshere"		=> "பின்வரும் பக்கங்களில் இப்பக்கம் இணைக்கப்பட்டுள்ளது:",
+"nolinkshere"	=> "எந்தப் பக்கத்திலும் இந்தப் பக்கம் இணைக்கப்படவில்லை.",
+"isredirect"	=> "வழிமாற்றுப் பக்கம்",
+
+# Block/unblock IP
+#
+"blockip"		=> "பயனரைத் தடு",
+"blockiptext"	=> "ஒரு குறிப்பிட்ட ஐபி முகவரி அல்லது பயனரிடமிருந்து எழுத்து அணுக்கத்தைத் தடுப்பதற்குக் கீழேயுள்ள படிவத்தை உபயோகிக்கவும். இது விஷமத்தனத்தைத் தடுப்பதற்கும் [[{{ns:project}}:Policy|விக்கிபீடியா கொள்கை]]க்கு எற்புடைய வகையிலும் மட்டுமே பயன்படுத்தப்பட வேண்டும்.
+குறிப்பிட்ட காரணமொன்றைக் கீழே நிரப்புக (உதாரணமாக், விஷமத்தனம் செய்யப்பட்ட (vandalized) பக்கங்களை எடுத்துக் காட்டவும்).",
+"ipaddress"		=> "ஐபி (IP) முகவரி/பயனர்பெயர்",
+"ipbreason"		=> "காரணம்",
+"ipbsubmit"		=> "இப் பயனரைத் தடு",
+"badipaddress"	=> "அந்தப் பெயரில் பயனர் எவரும் இல்லை",
+"blockipsuccesssub" => "தடுப்பு வெற்றி",
+"blockipsuccesstext" => "\"$1\" தடுக்கப்பட்டுள்ளார்.
+<br />தடுப்பை மீளாய்வு செய்ய [[Special:Ipblocklist|IP block list]] ஐப் பார்க்கவும்.",
+"unblockip"		=> "பயனர் தடை நீக்கு",
+"unblockiptext"	=> "முன்னர் தடுக்கப்பட்ட ஐபி முகவரி அல்லது பயனர்பெயரின் எழுத்து அணுக்கத்தை மீழ்விப்பதற்கு கீழேயுள்ள படிவத்தை உபயோகிக்கவும்.",
+"ipusubmit"		=> "இம் முகவரியைத் தடை நீக்கு",
+"ipblocklist"	=> "தடுக்கப்பட்ட ஐபி முகவரிகளினதும், பயனர் பெயர்களினதும் பட்டியல்",
+"blocklistline"	=> "$1, $2 blocked $3 ($4)",
+"blocklink"		=> "தடு",
+"unblocklink"	=> "தடை நீக்கு",
+"contribslink"	=> "contribs",
+"autoblocker"	=> "நீங்கள் \"$1\" உடன் ஒரே ஐபி முகவரியைப் பகிர்ந்துகொள்வதால் தானியங்கித் தடை விதிக்கப்பட்டுள்ளது. காரணம் \"$2\".",
+"blocklogpage"	=> "தடைப்_பதிவு (Block_log)",
+"blocklogentry"	=> 'தடுக்கப்பட்டது "$1"',
+"blocklogtext"	=> "இது ஒரு பயனரின் தடுப்பு தடை நீக்கல் செயற்பாடுகளுக்கான பதிவாகும். தானியங்கி முறையில் தடுக்கப்படும் ஐபி முகவரிகள் இப்பட்டியலில் இடம்பெறா.  தற்போது செயற்பாட்டிலுள்ள தடைகளையும்் முடக்கங்களையும் [[Special:Ipblocklist|ஐபி தடுப்பு பட்டியலில்]] பார்க்க.",
+"unblocklogentry"	=> 'தடுப்பு நீக்கப்பட்டது "$1"',
+
+# Developer tools
+#
+"lockdb"		=> "தரவுத்தளத்தைப் பூட்டு",
+"unlockdb"		=> "தரவுத்தளத்தைத் திற",
+"lockdbtext"	=> "தரவுத்தளத்தைப் பூட்டுதல், பயனர்கள் பக்கங்களைத் தொகுக்கவும், விருப்பத் தேர்வுகளை மாற்றவும், கவனிப்புப் பட்டியல்களைத் தொகுக்கவும், மற்றும் தரவுத்தளத்தில் மாற்றங்கள் தேவைப்படும் பிற விடயங்களைச் செய்யவும் முடியாமல் இடை நிறுத்தும். இதுதான் உங்களுக்கு வேண்டியது என்பதையும், பராமரிப்பு முடிந்ததும் தரவுத்தளத்தைத் திறந்துவிடுவீர்கள் என்பதையும் தயவுசெய்து உறுதிப்படுத்தவும்.",
+"unlockdbtext"	=> "தரவுத்தளத்தைத் திறத்தல், பக்கங்களைத் தொகுக்கவும், விருப்பத் தேர்வுகளை மாற்றவும், கவனிப்புப் பட்டியல்களைத் தொகுக்கவும், மற்றும் தரவுத்தளத்தில் மாற்றங்கள் தேவைப்படும் பிற விடயங்களைச் செய்யவும் கூடிய திறனைப் பயனர்களுக்கு மீள்விக்கும். இதுதான் நீங்கள் செய்ய விரும்புகிறீர்கள் என்பதைத் தயவுசெய்து உறுதிப்படுத்துங்கள்.",
+"lockconfirm"	=> "ஆம், நான் உண்மையில் தரவுத்தளத்தைப் பூட்ட விரும்புகிறேன்.",
+"unlockconfirm"	=> "ஆம், நான் உண்மையில் தரவுத்தளத்தைத் திறக்க விரும்புகிறேன்.",
+"lockbtn"		=> "தரவுத்தளத்தைப் பூட்டுக",
+"unlockbtn"		=> "தரவுத்தளத்தைத் திறக்கவும்",
+"locknoconfirm" => "நீங்கள் உறுதிப்படுத்தல் கட்டத்துள் குறியிடவில்லை.",
+"lockdbsuccesssub" => "தரவுத்தளப் பூட்டல் வெற்றி",
+"unlockdbsuccesssub" => "தரவுத்தளப் பூட்டு நீக்கப்பட்டது",
+"lockdbsuccesstext" => "விக்கிபீடியா தரவுத்தளம் பூட்டப் பட்டது.
+<br />பராமரிப்பு முடிவடைந்ததும் பூட்டை நீக்க மறவாதீர்.",
+"unlockdbsuccesstext" => "விக்கிபீடியா தரவுத்தளம் திறக்கப்பட்டது.",
+
+# Move page
+#
+"movepage"		=> "பக்கத்தை நகர்த்து",
+"movepagetext"	=> "பின்வரும் படிவத்தைப் பயன்படுத்துவது, பக்கமொன்றின் பெயரை மாற்றி, இதனுடைய முழு வரலாற்றையும் புதிய பெயருக்கு நகர்த்தும். பழைய தலைப்பு, புதிய பக்கத்துக்கான ஒர் வழிகாட்டும் பக்கமாக ஆகும். பழைய பக்கத் தலைப்புக்கு உள்ள இணைப்புக்கள் மாறமாட்டா; இரட்டை அல்லது முறிந்த வழிமாற்றுகள் உள்ளனவா என்பதைச் சரி பார்த்து உறுதிசெய்யவும். இணைப்புகள் எவ்விடத்துக்குச் சென்றடைய வேண்டுமோ அவ்விடத்தைத் தொடர்ந்தும் குறிப்பதை உறுதி செய்து கொள்வது உங்கள் பொறுப்பாகும்.<br />
+ஏற்கெனவே புதிய தலைப்பில் ஒரு பக்கம் இருந்தால், இந்தப் பக்கம் வெறுமையாகவோ அல்லது ஒரு வழிமாற்றுப் பக்கமாகவோ இருப்பதுடன் பழைய தொகுப்பு வரலாறும் இல்லாதிருந்தால்தான்,  இப் பக்கம் நகர்த்தப்படும் என்பதைக் கவனிக்கவும். தற்செயலாக, நீங்கள் தவறு செய்துவிட்டால், எந்தப் பெயரிலிருந்து பெயர் மாற்றம் செய்தீர்களோ அதே பெயருக்கு மீண்டும் மாற்றமுடியும் என்பதுடன் ஏற்கெனவே இருக்கும் பக்கமொன்றை மேலெழுத (overwrite) முடியாது என்பதையும் இது குறிக்கின்றது.
+<b>எச்சரிக்கை!</b>
+இது பிரபலமான ஒரு பக்கத்துக்குச் செய்யும் கடுமையானதும், எதிர்பாராததுமான மாற்றமாக இருக்கக்கூடும்; தொடர்வதற்கு முன் இதன் விளைவுகளை விளங்கிக்கொண்டிருக்கிறீர்கள் என்பதை உறுதிப்படுத்திக் கொள்ளவும்.",
+"movepagetalktext" => "*நீங்கள் பக்கத்தைப் பெயர்வெளிகள் (namespaces) இடையே நகர்த்துகிறீர்கள் என்றோ,
+*ஒரு வெறுமையில்லாத பேச்சுப் பக்கம் புதிய பெயரில் ஏற்கெனவேயிருந்தோ, அல்லது
+*நீங்கள் கீழேயுள்ள கட்டத்தில் குறியிடாமல் விடுகிறீர்கள் என்றோ.
+ '''இல்லாவிடில்''' சேர்ந்திருக்கும் பேச்சுப் பக்கம், ஏதாவது இருந்தால், தன்னியக்கமாக அதனுடன் நகர்த்தப்படும்.
+இப்படியான சந்தர்ப்பங்களில், விரும்பினால், நகர்த்தலையோ அல்லது ஒன்றிணைத்தலையோ நீங்கள் கைவினையாகச் செய்யவேண்டியிருக்கும்.",
+"movearticle"	=> "பக்கத்தை இடம்பெயர்",
+"movenologin"	=> "புகுபதிகை செய்யப்படவில்லை",
+"movenologintext" => "இப் பக்கத்தை இடம்பெயர்ப்பதற்கு, நீங்கள் ஒரு பதிவு செய்யப்பட்ட பயனராயும்
+[[Special:Userlogin|புகுபதிகை செய்தும்]]
+இருக்க வேண்டும்.",
+"newtitle"		=> "புதிய தலைப்புக்கு",
+"movepagebtn"	=> "பக்கத்தை நகர்த்து",
+"pagemovedsub"	=> "நகர்த்தல் வெற்றி",
+"pagemovedtext" => "பக்கம் \"[[$1]]\" \"[[$2]]\" க்கு நகர்த்தப்பட்டுள்ளது.",
+"articleexists" => "அந்தப் பெயரையுடைய பக்கம் ஏற்கெனவே உள்ளது அல்லது நீங்கள் தெரிவு செய்த பெயர் செல்லுபடியாகாது. தயவுசெய்து வேறு பெயரைத் தெரியவும்.",
+"talkexists"	=> "பக்கம் வெற்றிகரமாக நகர்த்தப்பட்டது, ஆனால் பேச்சுப் பக்கத்தை நகர்த்த முடியவில்லை ஏனெனில் புதிய தலைப்பில் இன்னொன்று உள்ளது. தயவுசெய்து கையால் (manually) ஒன்றுகலக்கவும்.",
+"movedto"		=> "நகர்த்தப்பட்ட இடம்",
+"movetalk"		=> "தக்கதாயின் \"talk\" பக்கத்தையும் நகர்த்தவும்.",
+"talkpagemoved" => "ஒத்த பேச்சுப் பக்கமும் நகர்த்தப்பட்டுள்ளது.",
+"talkpagenotmoved" => "ஒத்த பெச்சுப் பக்கம் <strong>நகர்த்தப்படவில்லை</strong>.",
+
+"export"		=> "ஏற்றுமதிப் பக்கங்கள்",
+"exporttext"	=> "ஒரு பக்கத்தினதோ அல்லது ஒரு தொகுதி பக்கங்களினதோ உரையையும், தொகுப்பு வரலாற்றையும், ஏதாவது XML இல் சுற்றி (wrapped in) ஏற்றுமதி செய்ய முடியும்; இதைப் மீடியாவிக்கி மென்பொருளிலியங்கும் இன்னொரு விக்கிக்கு இறக்குமதி செய்து, அதில் மாற்றம் செய்யலாம் அல்லது உங்கள் தனிப்பட்ட தேவைக்கு வைத்துக்கொள்ளலாம்.",
+"exportcuronly"	=> "நடப்புத் திருத்தத்தை மட்டும் சேர்க்கவும்",
+);
+
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesTe.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesTe.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesTe.php	(revision 1280)
@@ -0,0 +1,844 @@
+<?php
+/** Telugu (Telugu)
+  *
+  * @addtogroup Language
+  *
+  * @author Ævar Arnfjörð Bjarmason <avarab@gmail.com>
+  */
+
+$namespaceNames = array(
+	NS_MEDIA            => 'మీడియా',
+	NS_SPECIAL          => 'ప్రత్యేక',
+	NS_MAIN             => '',
+	NS_TALK             => 'చర్చ',
+	NS_USER             => 'సభ్యుడు',
+	NS_USER_TALK        => 'సభ్యులపై_చర్చ',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK     => '$1_చర్చ',
+	NS_IMAGE            => 'బొమ్మ',
+	NS_IMAGE_TALK       => 'బొమ్మపై_చర్చ',
+	NS_MEDIAWIKI        => 'మీడియావికీ',
+	NS_MEDIAWIKI_TALK   => 'మీడియావికీ_చర్చ',
+	NS_TEMPLATE         => 'మూస',
+	NS_TEMPLATE_TALK    => 'మూస_చర్చ',
+	NS_HELP             => 'సహాయము',
+	NS_HELP_TALK        => 'సహాయము_చర్చ',
+	NS_CATEGORY         => 'వర్గం',
+	NS_CATEGORY_TALK    => 'వర్గం_చర్చ'
+);
+
+$namespaceAliases = array(
+	'సభ్యునిపై_చర్చ'         => NS_USER_TALK,
+	'బొమ్మపై_చర్చ'          => NS_IMAGE_TALK
+);
+
+
+$linkTrail = "/^([\xE0\xB0\x81-\xE0\xB1\xAF]+)(.*)$/sDu";
+
+// nobody seems to use these anymore
+/*$digitTransformTable = array(
+	'0' => '౦',
+	'1' => '౧',
+	'2' => '౨',
+	'3' => '౩',
+	'4' => '౪',
+	'5' => '౫',
+	'6' => '౬',
+	'7' => '౭',
+	'8' => '౮',
+	'9' => '౯'
+);*/
+
+$messages = array(
+'tog-underline'         => 'లింకుల కింద గీతగీయి:',
+'tog-highlightbroken'   => 'తెగిపోయిన లింకులను <a href="" class="new">ఇలా చూపించు</a> (ఇంకో పధ్ధతి: <a href="" class="internal">?</a>).',
+'tog-justify'           => 'పేరాలను ఇరు పక్కలా సమానంగా సర్దు',
+'tog-hideminor'         => 'ఇటీవలి మార్పులలో చిన్న మార్పులను దాచిపెట్టు',
+'tog-usenewrc'          => 'మెరుగైన ఇటీవలి మార్పులు (జావాస్క్రిప్టు)',
+'tog-numberheadings'    => 'శీర్షికలకు ఆటోమాటిక్‌గా వరుస సంఖ్యలు పెట్టు',
+'tog-showtoolbar'       => 'మార్పు పరికరాలపెట్టె చూపించు (జావాస్క్రిప్టు)',
+'tog-editondblclick'    => 'డబుల్‌ క్లిక్కు జరిగినప్పుడు పేజీలని మార్చు (జావాస్క్రిప్టు)',
+'tog-editsection'       => '[మార్చు] లింకు ద్వారా విభాగం మార్పు కావాలి',
+'tog-editsectiononrightclick'=> 'విభాగం పేరు మీద కుడి క్లిక్కుతో విభాగం<br /> మార్పు కావాలి (జావాస్క్రిప్టు)',
+'tog-showtoc'           => 'విషయసూచిక చూపించు (3 కంటే ఎక్కువ శీర్షికలున్న పేజీలకు)',
+'tog-rememberpassword'  => 'అన్ని సెషన్లలోనూ గుర్తుపెట్టుకో',
+'tog-editwidth'         => 'మార్పుల బాక్సు పూర్తి వెడల్పు ఉంటుంది',
+'tog-watchdefault'      => 'నేను మార్చె అన్ని పేజీలను నా వీక్షణ జాబితాకు చేర్చు',
+'tog-minordefault'      => 'ప్రత్యేకంగా ఏమీ చెయ్యకపొతే అన్ని మార్పులను చిన్న మార్పులుగా గుర్తించు',
+'tog-previewontop'      => 'వ్యాసం మార్పుల తరువాత ఎలావుంటుందో మార్పుల‌ బాక్సుకు పైన చూపు',
+'tog-previewonfirst'    => 'మొదటి మార్పు చెసినప్పుడు వ్యాసం ఎలావుంటుందో ముందుగా చూపించు',
+'tog-nocache'           => 'పాత పేజీలను దాచి వాటిని తరువాత చూపవద్దు',
+'tog-enotifwatchlistpages'=> 'నేను వీక్షించే పేజీల మార్పులు జరిగినప్పుడు నాకు ఈ-మెయిల్‌ పంపించు',
+'tog-enotifusertalkpages'=> 'నా గురించి చర్చ పేజీలో మార్పు జరిగినపుడు నాకు ఈ-మెయిల్‌ పంపించు',
+'tog-enotifminoredits'  => 'చిన్న మార్పుల గురించి కూడా నాకు ఈ-మెయిల్‌ పంపించు',
+'tog-enotifrevealaddr'  => 'ప్రకటన మెయిల్‌లలో నా ఈ-మెయిల్‌ చిరునామా చూపించు',
+'tog-shownumberswatching'=> 'వీకషకుల సంఖ్యను చూపించు',
+'tog-fancysig'          => 'సంతకం మాత్రమే (ఆటోమెటిక్‌ లింకు లేకుండా)',
+'tog-externaleditor'    => 'ఏమీ చేయనప్పుడు ముందుగా బయటి ఎడిటరును వాడు',
+'underline-always'      => 'ఎల్లప్పుడూ',
+'underline-never'       => 'ఎప్పటికీ వద్దు',
+'sunday'                => 'ఆదివారము',
+'monday'                => 'సోమవారము',
+'tuesday'               => 'మంగళవారము',
+'wednesday'             => 'బుధవారము',
+'thursday'              => 'గురువారము',
+'friday'                => 'శుక్రవారము',
+'saturday'              => 'శనివారము',
+'january'               => 'జనవరి',
+'february'              => 'ఫిబ్రవరి',
+'march'                 => 'మార్చి',
+'april'                 => 'ఏప్రిల్',
+'may_long'              => 'మే',
+'june'                  => 'జూన్',
+'july'                  => 'జూలై',
+'august'                => 'ఆగష్టు',
+'september'             => 'సెప్టెంబర్',
+'october'               => 'అక్టోబర్',
+'november'              => 'నవంబర్',
+'december'              => 'డిసెంబర్',
+'jan'                   => 'జనవరి',
+'feb'                   => 'ఫిబ్రవరి',
+'mar'                   => 'మార్చి',
+'apr'                   => 'ఏప్రిల్',
+'may'                   => 'మే',
+'jun'                   => 'జూన్',
+'jul'                   => 'జూలై',
+'aug'                   => 'ఆగష్టు',
+'sep'                   => 'సెప్టెంబర్',
+'oct'                   => 'అక్టోబర్',
+'nov'                   => 'నవంబర్',
+'dec'                   => 'డిసెంబర్‌',
+'categories'            => 'వర్గాలు',
+'pagecategories'        => '{{PLURAL:$1|వర్గం|వర్గాలు}}',
+'category_header'       => '"$1" వర్గంలో వ్యాసాలు',
+'subcategories'         => 'ఉపవర్గములు',
+'mainpage'              => 'మొదటి పేజీ',
+'portal'                => 'సముదాయ పందిరి',
+'about'                 => 'గురించి',
+'aboutsite'             => '{{SITENAME}} గురించి',
+'aboutpage'             => 'Project:గురించి',
+'article'               => 'వ్యాసము',
+'help'                  => 'సహాయము',
+'bugreportspage'        => 'Project:Bug reports',
+'sitesupport'           => 'విరాళములు',
+'sitesupport-url'       => 'Project:Site support',
+'faq'                   => 'తరచూ అడిగే ప్రశ్నలు',
+'faqpage'               => 'Project:తరచూ అడిగే ప్రశ్నలు',
+'newwindow'             => '(కొత్త విండోలో వస్తుంది)',
+'cancel'                => 'రద్దు',
+'qbpageoptions'         => 'ఈ పేజీ',
+'qbspecialpages'        => 'ప్రత్యేక పేజీలు',
+'moredotdotdot'         => 'ఇంకా...',
+'mypage'                => 'నా పేజీ',
+'mytalk'                => 'నా గురించి చర్చ',
+'anontalk'              => 'ఈ ఐ.పి.కి సంబంధించిన చర్చ',
+'navigation'            => 'మార్గదర్శకము',
+'currentevents'         => 'ప్రస్తుత ఘటనలు',
+'disclaimers'           => 'అస్వీకారములు',
+'disclaimerpage'        => 'Project:సాధారణ అస్వీకారము',
+'errorpagetitle'        => 'లోపం',
+'returnto'              => 'తిరిగి $1 పేజీకి వెళ్లు.',
+'tagline'               => '{{SITENAME}} నుండి',
+'search'                => 'అన్వేషణ',
+'searchbutton'          => 'అన్వేషణ',
+'go'                    => 'వెళ్లు',
+'searcharticle'                    => 'వెళ్లు',
+'history'               => 'పేజీ చరిత్ర',
+'history_short'         => 'చరిత్ర',
+'updatedmarker'         => 'నేను కిందటిసారి వచ్చిన తరువాత జరిగిన మార్పులు',
+'printableversion'      => 'ముద్రణా సంచిక',
+'permalink'             => 'శాశ్వత లింకు',
+'print'                 => 'ముద్రించు',
+'edit'                  => 'మార్చు',
+'editthispage'          => 'ఈ పేజీని మార్చు',
+'delete'                => 'తుడిచివేయి',
+'deletethispage'        => 'ఈ పేజీని తుడిచివేయి',
+'undelete_short'        => '{{PLURAL:$1|ఒక్క రచనను|$1 రచనలను}} పునఃస్థాపించు',
+'protect'               => 'కాపాడు',
+'protectthispage'       => 'ఈ పేజీని సంరక్షించు',
+'newpage'               => 'కొత్త పేజీ',
+'talkpage'              => 'ఈ పేజీని చర్చించు',
+'specialpage'           => 'ప్రత్యేక పేజీ',
+'personaltools'         => 'స్వకీయమైన పరికరాలు',
+'postcomment'           => 'వ్యాఖ్యానము చేయండి',
+'articlepage'           => 'వ్యాసము చూడండి',
+'talk'                  => 'చర్చ',
+'toolbox'               => 'పరికరాలపెట్టె',
+'imagepage'             => 'బొమ్మ పేజీని చూపించు',
+'viewtalkpage'          => 'చర్చ చూపించు',
+'otherlanguages'        => 'ఇతర భాషలలొ',
+'redirectedfrom'        => '($1 నుండి మళ్ళించబడింది)',
+'redirectpagesub'       => 'దారిమార్పు పేజీ',
+'lastmodifiedat'          => 'ఈ పేజీకి $2, $1న చివరి మార్పు జరిగినది.',
+'viewcount'             => 'ఈ పేజీ {{PLURAL:$1|ఒక్క సారి|$1 సార్లు}} దర్శించబడింది.',
+'copyright'             => 'విషయ సంగ్రహం $1  కి లోబడి లభ్యం.',
+'protectedpage'         => 'సంరక్షణలోని పేజీ',
+'badaccess'             => 'అనుమతి లోపం',
+'ok'                    => 'సరే',
+'pagetitle'             => '$1 - {{SITENAME}}',
+'youhavenewmessages'    => 'మీకు $1 ఉన్నాయి ($2).',
+'newmessageslink'       => 'కొత్త సందేశాలు',
+'newmessagesdifflink'   => 'క్రితం సంచికతో గల తేడాలు',
+'editsection'           => '<small>మార్చు</small>',
+'toc'                   => 'విషయ సూచిక',
+'showtoc'               => 'చూపించు',
+'thisisdeleted'         => '$1ను చూస్తారా, పునస్స్థాపిస్తారా?',
+'restorelink'           => '{{PLURAL:$1|ఒక్క తొలగించబడిన మార్పు|$1 తొలగించబడిన మార్పులు}}',
+'nstab-main'            => 'వ్యాసము',
+'nstab-user'            => 'సభ్యుని పేజీ',
+'nstab-media'           => 'మాధ్యమం',
+'nstab-special'         => 'ప్రత్యేక',
+'nstab-image'           => 'ఫైలు',
+'nstab-mediawiki'       => 'సందేశము',
+'nstab-template'        => 'మూస',
+'nstab-help'            => 'సహాయము',
+'nstab-category'        => 'వర్గము',
+'nosuchspecialpage'     => 'అటువంటి ప్రత్యేక పేజీ లేదు',
+'nospecialpagetext'     => 'మీరు అడిగిన ప్రత్యేకపేజీ సరైనది కాదు. సరైన ప్రత్యేకపేజీల జాబితా [[Special:Specialpages]] వద్ద ఉంది.',
+'error'                 => 'లోపం',
+'noconnect'             => 'సారీ! సాంకేతిక ఇబ్బందుల వలన డాటాబేసు సర్వరును సంప్రదించలేక పోతున్నాం.<br />
+$1',
+'cachederror'           => 'కింది పీజీ ముందే సేకరించి పెట్టుకున్నది, కాబట్టి తాజా మార్పులు దీనిలో లేకపోవచ్చు.',
+'laggedslavemode'       => 'హెచ్చరిక: పేజీలో ఇటీవల జరిగిన మార్పులు ఉండకపోవచ్చు.',
+'readonly'              => 'డేటాబేసు లాక్‌చెయ్యబడింది',
+'readonlytext'          => 'డేటాబేసు ప్రస్తుతం లాకు చేయబడింది. మార్పులు, చేర్పులు ప్రస్తుతం చెయ్యలేరు. మామూలుగా జరిగే నిర్వహణ కొరకు ఇది జరిగి ఉండవచ్చు; అది పూర్తి కాగానే తిరిగి మామూలుగా పనిచేస్తుంది. 
+
+దీనిని లాకు చేసిన నిర్వాహకుడు ఇలా తెలియజేస్తున్నాడు: $1',
+'readonly_lag'          => 'అనుచర (స్లేవ్) డేటాబేసు సర్వర్లు, ప్రధాన (మాస్టరు) సర్వరును అందుకునేందుకుగాను, డేటాబేసు ఆటోమాటిక్‌గా లాకు అయింది.',
+'filecopyerror'         => 'ఫైలు "$1"ని "$2"కు కాపీ చెయ్యటం కుదరలేదు.',
+'filerenameerror'       => 'ఫైలు "$1" పేరును "$2"గా మార్చటం కుదరలేదు.',
+'filedeleteerror'       => 'ఫైలు "$1"ని తీసివేయటం కుదరలేదు.',
+'filenotfound'          => 'ఫైలు "$1" కనబడలేదు.',
+'unexpected'            => 'అనుకోని విలువ: "$1"="$2".',
+'badarticleerror'       => 'ఈ పేజీపై ఈ పని చేయడం కుదరదు.',
+'cannotdelete'          => 'అడిగిన పేజీ లేదా ఫైలును తీసివేయటం కుదరలేదు. (ఇప్పటికే ఎవరైనా తీసివేసి ఉండవచ్చు)',
+'perfdisabled'          => 'క్షమించండి! ఈ అంశంవలన డేటాబేసు బాగా స్లో అయిపోయి, ఎవరూ వికీని వాడుకోలేరు. కాబట్టి, ప్రస్తుతానికి ఈ అంశాన్ని అందుబాటులో లేకుండా చేస్తున్నాం.',
+'perfcached'            => 'కింది డేటా ముందే సేకరించి పెట్టుకున్నది. కాబట్టి తాజా డేటాతో పోలిస్తే తేడాలుండవచ్చు.',
+'viewsource'            => 'మూలాన్ని చూపించు',
+'protectedtext'         => 'ఈ పేజీకి మార్పులు జరగకుండా సంరక్షించబడినది.
+
+ఈ పేజీ మూలాన్ని మీరు వీక్షించవచ్చు లేదా కాపీ తీయవచ్చు:',
+'logouttitle'           => 'సభ్యుని నిష్క్రమణ',
+'logouttext'            => '<strong>మీరు వికీపీడియా నుండి నిష్క్రమించారు.</strong><br /> 
+{{SITENAME}}ను అజ్ఞాతంగా వడుతుండొచ్చు లేదా వేరే సభ్యనామంతో గాని ఇదే సభ్యనామంతో గాని మళ్ళీ లాగిన్‌ కావచ్చు. ఒక గమనిక: బ్రౌజరులోని పాత పేజి కాపీలను తీసివేసే వరకు కొన్ని పేజీలు మీరింకా లాగిన్‌ అయి ఉన్నట్లు గానే చూపించవచ్చు.',
+'welcomecreation'       => '== స్వాగతం, $1! ==
+
+మీ అకౌంటు సృష్టించబడింది. మీ {{SITENAME}} అభిరుచులను మార్చుకోవడం మరువకండి.',
+'loginpagetitle'        => 'సభ్యుని లాగిన్',
+'yourname'              => 'సభ్యనామము',
+'yourpassword'          => 'మీ సంకేతపదం',
+'yourpasswordagain'     => 'మళ్లీ సంకేతపదం ఇవ్వండి',
+'remembermypassword'    => 'నన్ను గుర్తుపెట్టుకో',
+'yourdomainname'        => 'మీ డోమైను',
+'loginproblem'          => '<b>మీ లాగిన్‌తో ఏదో ఇబ్బంది ఉంది.</b><br />మళ్ళీ ప్రయత్నించండి!',
+'alreadyloggedin'       => '<strong>$1 గారు, మీరిప్పటికే లాగిన్ అయి ఉన్నారు!</strong><br />',
+'login'                 => 'లాగిన్',
+'loginprompt'           => '{{SITENAME}}లోకి లాగిన్‌ అవ్వాలంటే, మీ బ్రౌజరు కూకీలను దాచగలిగి ఉండాలి.',
+'userlogin'             => 'అకౌంటు సృష్టించు లేదా లాగిన్ అవ్వు',
+'logout'                => 'నిష్క్రమించు',
+'userlogout'            => 'నిష్క్రమించు',
+'notloggedin'           => 'లాగిన్ అయిలేరు',
+'nologin'               => 'సభ్యత్వం లేదా? $1.',
+'nologinlink'           => 'ఎకౌంటు సృష్టించుకోండి',
+'createaccount'         => 'అకౌంటు సృష్టించు',
+'gotaccount'            => 'ఇప్పటికే ఎకౌంటు ఉందా? $1.',
+'gotaccountlink'        => 'లాగిన్ అవండి',
+'createaccountmail'     => 'ఈ-మెయిల్‌ ద్వారా',
+'badretype'             => 'మీరు ఇచ్చిన రెండు సంకేతపదాలు ఒకదానితో మరొకటి సరిపోలడం లేదు.',
+'userexists'            => 'ఈ సభ్యనామం ఇప్పటికే వాడుక లో ఉంది. వేరే పేరు ఎంచుకోండి.',
+'youremail'             => 'మీ ఈ-మెయిల్*',
+'yourrealname'          => 'అసలు పేరు*',
+'yourlanguage'          => 'భాష:',
+'yournick'              => 'ముద్దు పేరు',
+'email'                 => 'ఈ-మెయిల్',
+'prefs-help-email-enotif'=> 'మీరు ఈ-మెయిల్‌ ప్రకటనలు కావాలని ఎంచుకుంటే, అవి ఈ చిరునామాకే వస్తాయి.',
+'prefs-help-realname'   => '* అసలు పేరు (తప్పనిసరి కాదు): మీ అసలు పేరు ఇవాలని ఎంచికుంటే, మీ రచనలపై మీ పేరు దరకాస్తు అవుతుంది.',
+'loginerror'            => 'లాగిన్ దోషము',
+'prefs-help-email'      => '* ఈ-మెయిల్‌ (తప్పనిసరి కాదు): మీ ఈ-మెయిల్‌ చిరునామా బయట పెట్టకుండానే, ఇతరులు మిమ్మల్ని సంప్రదించడానికి వీలు కలగ చేస్తుంది.',
+'nocookieslogin'        => 'సభ్యుల లాగిన్ కొరకు {{SITENAME}} కూకీలను వాడుతుంది. మీ కంప్యూటర్ కూకీలు దాచుకోటానికి సిద్ధంగా లేదు. దానిని సిద్ధంచేసి మళ్ళీ ప్రయత్నించండి.',
+'noname'                => 'మీరు సరైన సభ్యనామం ఇవ్వలేదు.',
+'loginsuccesstitle'     => 'లాగిన్ విజయవంతమైనది',
+'loginsuccess'          => 'సుస్వాగతము "$1" గారు, మీరు ఇప్పుడు {{SITENAME}}లో ప్రవేశించారు.',
+'nosuchuser'            => '"$1" అనే పేరుతో సభ్యులు లేరు. పేరు సరి చూసుకోండి, లేదా కింది ఫారం ఉపయోగించి, కొత్త అకౌంటు సృష్టించండి.',
+'nosuchusershort'       => '"$1" అనే పేరుతో సభ్యులు లేరు. పేరు సరి చూసుకోండి.',
+'wrongpassword'         => 'ఈ సంకేతపదం సరైనది కాదు. దయచేసి మళ్లీ ప్రయత్నించండి.',
+'wrongpasswordempty'    => 'ఖాళీ సంకేతపదం ఇచ్చారు. మళ్ళీ ప్రయత్నించండి.',
+'mailmypassword'        => 'నా సంకేతపదం మర్చిపోయాను, కొత్తది ఈ-మెయిల్‌లొ పంపించు',
+'passwordremindertitle' => '{{SITENAME}} నుండి సంకేతపదము యొక్క జ్ఞాపక సూచకం',
+'passwordremindertext'  => 'కొత్త {{SITENAME}} ($4) సంకేతపదం పంపించమని ఎవరో (బహుశ మీరే, ఐ.పీ. చిరునామా $1 నుండి) అడిగారు. సభ్యుడు "$2" యొక్క కొత్త సంకేతపదం "$3". మీరు లాగిన్‌ అయి, సంకేత పదం మార్చుకోవాలి.
+
+మరెవరో ఈ మనవి చేసినా లేదా మీకు మీ పాత సంకేతపదం గుర్తుకు వచ్చి దానిని మార్చకుడదని అనుకున్నా, మీరు ఈ సందేశాన్ని మరచి మీ పాత సంకేతపదాన్ని వాడటం కొనసాగించవచ్చు.',
+'noemail'               => 'సభ్యుడు "$1"కి ఈ-మెయిల్‌ చిరునామా నమోదయి లేదు.',
+'passwordsent'          => '"$1" గారు! మీరు నమోదు చేసుకున్న ఈ-మెయిల్ చిరునామాకు ఒక కొత్త సంకేతపదము పంపబడినది.
+అది అందిన తర్వాత దయచేసి మరలా లాగిన్‌ అవ్వండి.',
+'eauthentsent'          => 'ఇచ్చిన ఈ-మెయిల్ అడ్రసుకు ధృవీకరణ మెయిల్ వెళ్ళింది.
+మరిన్ని మెయిళ్ళు పంపే ముందు, మీరు ఆ మెయిల్‌లో సూచించినట్లుగా ఈ చిరునామా మీదేననిి ధృవీకరించండి.',
+'acct_creation_throttle_hit'=> 'క్షమించండి, మీరిప్పటికే $1 అకౌంట్లు సృష్టించారు. ఇహ కుదరదు.',
+'emailauthenticated'    => 'మీ ఈ-మెయిల్ చిరునామా $1న ధృవీకరింపబడింది.',
+'emailnotauthenticated' => 'మీ ఈ-మెయిల్‌ చిరునామా ధృవీకరణ ఇంకా కాలేదు. కింద ఇచ్చిన వాటికి సంబంధించి ఈ-మెయిల్‌ పంపబడదు.',
+'noemailprefs'          => 'కింది అంశాలు పని చెయ్యటానికి ఈ-మెయిల్‌ చిరునామాను నమొదుచయ్యండి.',
+'emailconfirmlink'      => 'మీ ఈ-మెయిల్ చిరునామాను ధృవీకరించండి',
+'extlink_tip'           => 'బయటి లింకు (దాని ముందు http:// ఇవ్వటం మరువకండి)',
+'sig_tip'               => 'టైంస్టాంపుతో సహా మీ సంతకం',
+'hr_tip'                => 'అడ్డం లైను (అరుదుగా వాడండి)',
+'summary'               => 'సారాంశము',
+'subject'               => 'విషయం/శీర్షిక',
+'minoredit'             => 'ఇది ఒక చిన్న మార్పు',
+'watchthis'             => 'ఈ పేజీ మీద కన్నేసి ఉంచు',
+'savearticle'           => 'పేజీ భధ్రపరచు',
+'preview'               => 'సరిచూడు',
+'showpreview'           => 'సరిచూడు',
+'showdiff'              => 'తేడాలు చూపించు',
+'anoneditwarning'       => 'మీరు లాగిన్ అయిలేరు. ఈ పేజీ చరిత్రలో మీ ఐ.పి.అడ్రసు నమొదు అవుతుంది.',
+'blockedtitle'          => 'సభ్యునిపై నిరోధం అమలయింది',
+'blockedtext'           => 'మీ సభ్యనామం లేదా ఐ.పి.అడ్రసును $1 నిరోధించారు.
+వారు ఇచ్చిన కారణం:<br />\'\'$2\'\'<br />ఈ నిరోధంపై చర్చించేందుకు $1ను గాని, మరెవరైనా [[Project:నిర్వాహకులు|నిర్వాహకులను]] గాని సంప్రదించండి.
+
+[[Special:Preferences|మీ అభిరుచులలో]] మీ ఈ-మెయిల్ అడ్రసు ఇచ్చిఉంటే తప్ప, "ఈ సభ్యునికి ఈ-మెయిల్ పంపు" అనే అంశాన్ని వాడుకోలేరని గమనించండి.
+
+మీ ఐ.పి.అడ్రసు $3. మీరు రాయబోయే ప్రతి జాబులోను ఈ అడ్రసును కూడా రాయండి.',
+'whitelistedittitle'    => 'మార్పులు చెయ్యడానికి లాగిన్‌ అయి ఉండాలి',
+'whitelistedittext'     => 'పేజీలకి మార్పులు చెయ్యడానికి మీరు $1 అయి ఉండాలి.',
+'whitelistreadtitle'    => 'చదవడానికి లాగిన్‌ అయి వుండాలి',
+'whitelistreadtext'     => 'పేజీలు చదవడానికి [[Special:Userlogin|లాగిన్‌]] అయి ఉండాలి.',
+'whitelistacctitle'     => 'మీకు అకౌంటు సృష్టించే అనుమతి లేదు',
+'whitelistacctext'      => 'ఈ వికీలో అకౌంట్లను సృష్టించడానికి మీరు [[Special:Userlogin|లాగిన్‌]] అయి ఉండాలి, మరియు తగువిధమైన అనుమతులు ఉండాలి.',
+'confirmedittitle'      => 'మార్పులు చేసేముందు ఈ-మెయిల్ చిరునామా ధృవీకరణ తప్పనిసరి',
+'confirmedittext'       => 'పేజీల్లో మార్పులు చేసేముందు మీ ఈ-మెయిల్ చిరునామా ధృవీకరించాలి. [[Special:Preferences|మీ అభిరుచుల]]లో మీ ఈ-మెయిల్ చిరునామా రాసి, ధృవీకరించండి.',
+'loginreqtitle'         => 'లాగిన్‌ ఆవసరము',
+'loginreqlink'          => 'లాగిన్',
+'loginreqpagetext'      => 'ఇతర పేజీలు చూడడానికి మీరు $1 అయి ఉండాలి.',
+'accmailtitle'          => 'సంకేతపదం పంపించబడింది.',
+'accmailtext'           => '"$1" యొక్క సంకేతపదం $2కు పంపించబడింది.',
+'newarticle'            => '(కొత్తది)',
+'newarticletext'        => 'ఈ లింకుకు సంబంధించిన పేజీ ఉనికిలొ లేదు. కింది పెట్టెలో మీ రచనను టైపు చేసి ఆ పేజీని సృష్టించండి (దీనిపై సమాచారం కొరకు [[Help:Contents|సహాయం]] పేజీ చూడండి). మీరిక్కడికి పొరపాటున వచ్చి ఉంటే, మీ బ్రౌజరు \'\'\'back\'\'\' మీట నొక్కండి.',
+'anontalkpagetext'      => '----\'\'ఇది ఒక అజ్ఞాత సభ్యుని చర్చా పేజీ. ఆ సభ్యుడు ఇంకా అకౌంటు సృష్టించ లేదు, లేదా దానిని ఉపయోగించడం లేదు. కాబట్టి వారి ఐ.పీ. అడ్రసే ఆ సభ్యుని గుర్తింపు. ఆ ఐ.పి. అడ్రసు చాలా మంది సభ్యులు వాడే అవకాశం ఉంది. మీరూ ఓ అజ్ఞాత సభ్యులైతే, ఒకే ఐ.పీ. అడ్రసు కారణంగా వేరే సభ్యులకు ఉద్దేశించిన వ్యాఖ్యానాలు మీకూ వర్తించే అవకాశం ఉంది. ఇకనుండి ఈ అయోమయం లేకుండా ఉండాలంటే, [[Special:Userlogin|అకౌంటు సృష్టించండి లేదా లాగిన్‌ అవండి]].\'\'',
+'noarticletext'         => 'ప్రస్తుతం ఈ పేజీ ఖాళీగా ఉంది, మీరు ఈ పేజీ శీర్షిక కొసం వెరె పెజీలు [[Special:Search/{{PAGENAME}}|వెతకవచ్చు]] లేదా [{{fullurl:{{FULLPAGENAME}}|action=edit}} ఈ పెజీని మార్చ] వచ్చు.',
+'clearyourcache'        => '\'\'\'గమనిక:\'\'\' భద్రపరచిన తరువాత, మార్పులను చూడాలంటే మీ బ్రౌజరులొ దాచబడిన పాత కాపీని తీసివేయాల్సిరావచ్చు. \'\'\'మొజిల్లా/ ఫైర్‌ఫాక్స్‌/ సఫారి:\'\'\' \'\'shift\'\' కీని నొక్కి పెట్టి \'\'Reload\'\' నొక్కండి, లేదా \'\'Ctrl-shift-R\'\' నొక్కండి (యాపుల్‌ మాక్‌‌లో \'\'Cmd-shift-R\'\'); \'\'\'IE:\'\'\' \'\'Ctrl\'\' నొక్కి పెట్టి, \'\'Refresh\'\' నొక్కండి, లేదా \'\'Ctrl-F5\'\' నొక్కండి; \'\'\'కాంకరర్‌:\'\'\': \'\'Reload\'\' మీట నొక్కండి, లేదా \'\'F5\'\' నొక్కండి; \'\'\'ఒపేరా\'\'\'ను వాడే వారు \'\'Tools→Preferences\'\'కు వెళ్ళి పాత పేజీల కాపీలనన్నిటిని పూర్తిగా తీసివేయ వలసిన అవసరం రావచ్చు.',
+'note'                  => '<strong>గమనిక:</strong>',
+'previewnote'           => '<strong>మీరు సరిచూసుకుంటున్నారు అంతే, ఇంకా భద్రపరచలేదని గుర్తుంచుకోండి!</strong>',
+'session_fail_preview'  => '<strong>క్షమించండి! సెషను డేటా పోవడం వలన మీ మార్పులను స్వీకరించలేకపోతున్నాం.
+మళ్ళీ ప్రయత్నించండి. అయినా పని జరక్కపోతే, ఓ సారి లాగౌట్ అయి, మళ్ళీ లాగిన్ అయి ప్రయత్నించండి.</strong>',
+'previewconflict'       => 'భద్రపరచిన తరువాత పై టెక్స్ట్‌ ఏరియాలోని టెక్స్టు ఇలాగ కనిపిస్తుంది.',
+'importing'             => '$1 దిగుమతి అవుతూంది',
+'editing'               => '$1కి మార్పులు',
+'editinguser'               => '$1కి మార్పులు',
+'editingsection'        => '$1కు మార్పులు (విభాగం)',
+'editconflict'          => 'మార్పులలో ఘర్షణ: $1',
+'explainconflict'       => 'మీరు మార్పులు చెయ్యడం మొదలుపెట్టిన తరువాత, ఇతర సభ్యులు ఈ పేజీలో మార్పులు చేసారు. పైన ఉన్న టెక్స్ట్ ఏరియాలో ప్రస్తుతపు సంచిక ఉన్నది. మీరు చేసిన మార్పులు కింద ఉన్న టెక్స్ట్ ఏరియాలో చూపించబడ్డాయి. మీరు మీ మార్పులను ప్రస్తుతపు సంచికతో విలీనం చెయ్యవలసి ఉంటుంది. మీరు "పేజీని భద్రపరుచు"ను నొక్కినపుడు, పైన ఉన్న సంచిక <b>మాత్రమే</b> భద్రపరచబడుతుంది.<br />',
+'editingold'            => '<strong>హెచ్చ రిక: ఈ పేజీ యొక్క కాలం చెల్లిన సంచికను మీరు మరుస్తున్నారు. దీనిని భద్రపరిస్తే, ఆ సంచిక తరువాత ఈ పేజీలో జరిగిన మార్పులన్నీ పోతాయి.</strong>',
+'yourdiff'              => 'తేడాలు',
+'copyrightwarning'      => '{{SITENAME}}కు సమర్పించే అన్ని రచనలూ $2కు లోబడి ప్రచురింపబడినట్లుగా భావించబడతాయి (వివరాలకు $1 చూడండి). మీ రచనలను ఎవ్వరూ మార్చ రాదనీ లెదా వేరే ఎవ్వరూ వాడుకో రాదని మీరు భావిస్తే, ఇక్కడ ప్రచురించకండి.<br /> మీ స్వీయ రచనను గాని, సార్వజనీనమైన రచననుగాని, ఇతర ఉచిత వనరుల నుండి సేకరించిన రచననుగాని మాత్రమే ప్రచురిస్తున్నానని కూడా మీరు ప్రమాణం చేస్తున్నారు. <strong>కాపీహక్కులుగల రచనను తగిన అనుమతి లేకుండా సమర్పించకండి!</strong>',
+'longpagewarning'       => '<strong>హెచ్చరిక: ఈ పేజీ సైజు $1  కిలోబైట్లు ఉంది; 32kb కంటే పెద్ద పేజీల తోటి కొన్ని బ్రౌజర్లు ఇబ్బంది పడతాయి. పేజీని చిన్న పేజీలుగా విడగొట్టడానికి అవకాశం ఉందేమో చూడండి. </strong>',
+'readonlywarning'       => '<strong>హెచ్చరిక: నిర్వహణ కొరకు డేటాబేసు లాకు చెయ్యబడింది కాబట్టి, మీ మార్పులు, చేర్పులను ఇప్పుడు భద్రపరచలేరు. మీ మార్పులను ఒక టెక్స్టు ఫైలులోకి కాపీ చేసి, భద్రపరచుకొని, తరువాత సమర్పించండి.</strong>',
+'protectedpagewarning'  => '<strong>హెచ్చరిక: ఈ పేజీ సంరక్షించబడినది, నిర్వాహకులు మాత్రమే మార్చగలరు. మీరు [[Project:Protected page guidelines|రక్షిత పేజీ మార్గదర్శకాలను]] పాటిస్తున్నారని నిర్ధారించుకోండి.</strong>',
+'semiprotectedpagewarning'=> '\'\'\'గమనిక:\'\'\' నమోదయిన సభ్యులు మాత్రమే మార్పులు చెయ్యగలిగేలా ఈ పేజీ లాకు చెయ్యబడింది.',
+'templatesused'         => 'ఈ పేజీలో వాడిన మూసలు:',
+'revhistory'            => 'సంచికల చరిత్ర',
+'nohistory'             => 'ఈ పేజీకి మార్పుల చరిత్ర లేదు.',
+'revnotfound'           => 'సంచిక కనబడలేదు',
+'currentrev'            => 'ప్రస్తుతపు సంచిక',
+'revisionasof'          => '$1 నాటి సంచిక',
+'previousrevision'      => '←పాత సంచిక',
+'nextrevision'          => 'దీని తరువాతి సంచిక→',
+'currentrevisionlink'   => 'ప్రస్తుతపు సంచిక',
+'cur'                   => 'ప్రస్తుత',
+'next'                  => 'తరువాయి',
+'last'                  => 'గత',
+'histlegend'            => 'తేడా ఎంపిక: సంచికల యొక్క రేడియో బాక్సులను ఎంచుకొని ఎంటర్‌ నొక్కండి, లేదా పైన/ కింద ఉన్న మీటను నొక్కండి.<br />
+సూచిక: (ప్రస్తుత) = ప్రస్తుత సంచికతో కల తేడాలు, (గత) = ఇంతకు ముందరి సంచికతో గల తేడాలు, చి = చిన్న మార్పు',
+'deletedrev'            => '[తొలగించబడినది]',
+'histfirst'             => 'తొట్టతొలి',
+'histlast'              => 'చిట్టచివరి',
+'difference'            => '(సంచికల మధ్య తేడా)',
+'editcurrent'           => 'ఈ పేజీ యొక్క ప్రస్తుతపు సంచికను సరిదిద్దండి',
+'selectnewerversionfordiff'=> 'పోల్చేందుకు ఒక కొత్త సంచికను ఎంచుకోండి',
+'selectolderversionfordiff'=> 'పోల్చేందుకు ఒక పాత సంచికను ఎంచుకోండి',
+'compareselectedversions'=> 'ఎంచుకున్న సంచికలను పోల్చిచూడు',
+'searchresults'         => 'అన్వేషణ ఫలితాలు',
+'searchresulttext'      => '{{SITENAME}}లో అన్వేషించే విషయమై మరింత సమాచారం కొరకు [[Project:Searching|{{SITENAME}}లో అన్వేషణ]] చూడండి.',
+'badquery'              => 'అన్వేషణ ప్రశ్న యొక్క రూపం సరిగా లేదు',
+'badquerytext'          => 'అన్వేషణ చెయ్యలేక పోయాం. 
+దీనికి కారణం మీరిచ్చిన ప్రశ్న మూడక్షరాల కంటే చిన్నది అయి ఉండవచ్చు. లేదా మీరు రాయడమే తప్పుగా రాసి ఉండవచ్చు, ఉదాహరణకు "ఇడ్లీ మరియు మరియు దోస". సరిచూసి మళ్ళీ ప్రయత్నించండి.',
+'matchtotals'           => '"$1" కొరకు అన్వేషించగా $2 పేజీ పేర్లు, $3 పేజీలలోని పాఠం సరిపోలాయి',
+'titlematches'          => 'వ్యాస శీర్షిక సరిపోయింది',
+'prevn'                 => 'క్రితం $1',
+'nextn'                 => 'తరువాతి $1',
+'showingresults'        => '#<b>$2</b> తో మొదలుకొని, <b>$1</b> వరకు ఫలితాలు కింద ఉన్నాయి.',
+'showingresultsnum'     => '#<b>$2</b> తో మొదలుకొని, <b>$3</b> ఫలితాలు కింద ఉన్నాయి.',
+'powersearch'           => 'అన్వేషణ',
+'powersearchtext'       => 'Search in namespaces:<br />$1<br />$2 List redirects<br />Search for $3 $9',
+'searchdisabled'        => '{{SITENAME}} అన్వేషణ తాత్కాలికంగా పని చెయ్యడం లేదు. ఈలోగా మీరు గూగుల్‌ ఉపయోగించి అన్వేషించవచ్చు. ఒక గమనిక: గూగుల్‌ ద్వారా కాలదోషం పట్టిన ఫలితాలు రావడానికి అవకాశం ఉంది.',
+'blanknamespace'        => '(మొదటి)',
+'preferences'           => 'నా అభిరుచులు',
+'prefsnologin'          => 'లాగిన్‌ అయిలేరు',
+'prefsnologintext'      => 'అభిరుచులను నిశ్చయించుకోడానికి, మీరు [[Special:Userlogin|లాగిన్‌]] అయి ఉండాలి.',
+'prefsreset'            => 'ఇదివరకటి అభిరుచులు పునరుధ్ధరించబడ్డాయి.',
+'changepassword'        => 'సంకేతపదం మార్చండి',
+'skin'                  => 'తొడుగు',
+'dateformat'            => 'తేదీ ఆకృతి',
+'datedefault'           => 'ఏదైనా పరవాలేదు',
+'datetime'              => 'తేదీ, సమయం',
+'prefs-personal'        => 'సభ్యుని వివరాలు',
+'prefs-rc'              => 'ఇటీవలి మార్పులు, మొలకలు',
+'prefs-misc'            => 'ఇతరాలు',
+'saveprefs'             => 'భధ్రపరచు',
+'resetprefs'            => 'మునుపటి వలె',
+'oldpassword'           => 'పాత సంకేతపదము',
+'newpassword'           => 'కొత్త సంకేతపదము',
+'retypenew'             => 'సంకేతపదం, మళ్ళీ',
+'textboxsize'           => 'మార్పులు',
+'rows'                  => 'వరుసలు',
+'columns'               => 'వరుసలు:',
+'searchresultshead'     => 'అన్వేషణ',
+'resultsperpage'        => 'పేజీకి ఫలితాలు:',
+'contextlines'          => 'హిట్టుకు లైన్లు:',
+'contextchars'          => 'లైనుకు సందర్భాలు:',
+'stubthreshold'         => 'మొలకలు చూపేందుకు, కనీస బైట్లు',
+'recentchangescount'    => '"ఇటీవలి మార్పులు"లో ఉండే శీర్షికలు',
+'savedprefs'            => 'మీ అభిరుచులు భద్రపరచబడ్డయి.',
+'timezonelegend'        => 'టైం జోను',
+'timezonetext'          => 'సర్వరు సమయానికి (యు.టీ.సీ.), మీ స్థానిక సమయానికి మధ్య గల తేడా, గంటల్లో.',
+'localtime'             => 'స్థానిక సమయం',
+'timezoneoffset'        => 'తేడా¹',
+'servertime'            => 'సర్వరు సమయం',
+'guesstimezone'         => 'తేడాను బ్రౌజరు నుండి తీసుకో',
+'allowemail'            => 'ఇతర సభ్యుల నుండి ఈ-మెయిల్ రానివ్వు',
+'defaultns'             => 'డిఫాల్టుగా ఈ నేంస్పేసులలో అన్వేషించు:',
+'default'               => 'డిఫాల్టు',
+'files'                 => 'ఫైళ్ళు',
+'changes'               => 'మార్పులు, చేర్పులు',
+'recentchanges'         => 'ఇటీవలి మార్పులు',
+'recentchangestext'     => 'వికీలో ఇటీవలి కాలంలో జరిగిన మార్పులను ఈ పేజీలో చూడండి.',
+'rcnote'                => '$3 నాటికి, గత <strong>$2</strong> రోజులలో చేసిన చివరి <strong>$1</strong> మార్పులు కింద ఉన్నాయి',
+'rcnotefrom'            => '<b>$2</b> నుండి జరిగిన మార్పులు (<b>$1</b> వరకు చూపబడ్డాయి).',
+'rclistfrom'            => '$1 వద్ద మొదలు పెట్టి కొత్త మార్పులు చూపించు',
+'rcshowhideminor'       => 'చిన్న మార్పులను $1',
+'rcshowhidebots'        => 'బాట్లను $1',
+'rcshowhideliu'         => 'లాగిన్ అయ్యున్న సభ్యులను $1',
+'rcshowhideanons'       => 'అజ్ఞాత సభ్యులను $1',
+'rcshowhidemine'        => 'నా మార్పులను $1',
+'rclinks'               => 'గత  $2 రోజుల లోని చివరి $1 మార్పులను చూపించు <br />$3',
+'diff'                  => 'తేడాలు',
+'hist'                  => 'చరిత్ర',
+'hide'                  => 'దాచు',
+'show'                  => 'చూపించు',
+'minoreditletter'       => 'చి',
+'newpageletter'         => 'కొ',
+'number_of_watching_users_pageview'=> '[$1 వీక్షిస్తున్న సభ్యులు]',
+'upload'                => 'ఫైలు అప్‌లోడ్',
+'uploadbtn'             => 'ఫైలు అప్‌లోడు చెయ్యి',
+'reupload'              => 'మళ్ళీ అప్‌లోడు చెయ్యి',
+'reuploaddesc'          => 'మళ్ళీ అప్‌లోడు ఫారంకు వెళ్ళు.',
+'uploadnologin'         => 'లాగిన్‌ అయిలేరు',
+'uploadnologintext'     => 'ఫైలు అప్‌లోడు చెయ్యాలంటే, మీరు [[Special:Userlogin|లాగిన్‌]] కావాలి',
+'uploaderror'           => 'అప్‌లోడు లోపం',
+'uploadtext'            => 'కింది ఫారంను ఉపయోగించి ఫైళ్ళు అప్‌లోడు చెయ్యండి, 
+ఇదివరలో అప్‌లోడు చేసిన బొమ్మలను చూడడానికి లేదా వెతకడానికి [[Special:Imagelist|అప్‌లోడు అయిన ఫైళ్ళ జాబితా]]కు వెళ్ళండి,
+అప్‌లోడులు, తొలగింపులు [[Special:Log/upload|అప్‌లోడు దినచర్య]]లొ నమోదవుతాయి.
+
+బొమ్మను ఏదైనా పేజీలో చేర్చడానికి, 
+* \'\'\'<nowiki>[[</nowiki>{{ns:Image}}<nowiki>:File.jpg]]</nowiki>\'\'\'
+* \'\'\'<nowiki>[[</nowiki>{{ns:Image}}<nowiki>:File.png|ప్రత్యామ్న్యయ పాఠ్యం]]</nowiki>\'\'\'
+అని లింకు చెయ్యవచ్చు. లేదా
+* \'\'\'<nowiki>[[</nowiki>{{ns:Media}}<nowiki>:File.ogg]]</nowiki>\'\'\'
+అని రాసి సరాసరి బొమ్మ ఫైలుకే లింకు ఇవ్వవచ్చు.',
+'uploadlogpage'         => 'అప్‌లోడ్ దినచర్య',
+'uploadlogpagetext'     => 'ఇటీవల జరిగిన ఫైలు అప్‌లోడుల జాబితా ఇది.',
+'filename'              => 'ఫైలు పేరు',
+'filedesc'              => 'సారాంశం',
+'fileuploadsummary'     => 'సారాంశం:',
+'filestatus'            => 'కాపీహక్కు స్థితి',
+'filesource'            => 'మూలం',
+'copyrightpage'         => 'Project:ప్రచురణ హక్కులు',
+'copyrightpagename'     => '{{SITENAME}} ప్రచురణ హక్కు',
+'ignorewarning'         => 'హెచ్చరికను పట్టించుకోకుండా ఫైలును భద్రపరచు.',
+'ignorewarnings'        => 'హెచ్చరికలను పట్టించుకోవద్దు',
+'minlength'             => 'ఫైలు పేరులో కనీసం మూడు అక్షరాలు ఉండాలి.',
+'illegalfilename'       => 'ఫైలు పేరు "$1"లోని కొన్ని అక్షరాలు, పేజీ శీర్షికలలో వాడకూడనివి ఉన్నాయి. ఫైలు పేరు మార్చి, మళ్ళీ అప్‌లోడు చెయ్యడానికి ప్రయత్నించండి.',
+'badfilename'           => 'ఫైలు పేరు "$1"కి మార్చబడినది.',
+'badfiletype'           => '".$1" అనేది బొమ్మ ఫైలుకి శిఫార్సు చేసిన ఆకృతి కాదు.',
+'largefile'             => 'ఫైలుయొక్క పరిమాణం $1 బైట్లకంటె ఎక్కువ వుండకూడదని శిఫార్సు చేయటమైనది, ఈ ఫైలు $2 బైట్లు',
+'fileexists'            => 'ఈ పేరుతో ఒక ఫైలు ఇప్పటికే ఉంది. దీనిని మీరు మార్చాలో లేదో తెలియకపోతె ఫైలు $1ని చూడండి.',
+'fileexists-forbidden'  => 'ఈ పేరుతో ఇప్పటికే ఒక ఫైలు ఉంది; దీన్ని మరో పేరుతో అప్‌లోడు చెయ్యండి.
+[[Image:$1|thumb|center|$1]]',
+'fileexists-shared-forbidden'=> 'ఈ పేరుతో ఇప్పటికే ఒక ఫైలు అందరి ఫైళ్ళ ఖజానాలో ఉంది; దీన్ని మరో పేరుతో అప్‌లోడు చెయ్యండి.
+[[Image:$1|thumb|center|$1]]',
+'fileuploaded'          => 'ఫైలు $1 అప్‌లోడు అయింది.
+ఈ లింకు: $2 ను అనుసరించి వివరణ పేజీకి వెళ్ళి, ఫైలుకు
+సంబంధించిన వివరాలను - ఎక్కడినుండి వచ్చింది, ఎవరు ఎప్పుడు తయారుచేసారు,
+ఇంకా మీకు దీని గురించి తెలిసిన విషయాలు - అక్కడ రాయండి. ఇది ఒక బొమ్మ అయితే, దాన్ని పేజీలలో ఇలా
+వాడవచ్చు: <tt><nowiki>[[{{ns:Image}}:$1|thumb|వివరణ]]</nowiki></tt>',
+'uploadwarning'         => 'అప్‌లోడు హెచ్చరిక',
+'savefile'              => 'ఫైలు భధ్రపరచు',
+'uploadedimage'         => '"[[$1]]" అప్‌లోడు అయింది',
+'uploaddisabled'        => 'క్షమించండి, అప్‌లోడు చెయ్యడం ప్రస్తుతానికి ఆపబడింది',
+'uploadcorrupt'         => 'ఫైలు చెడిపోయింది లేదా దాని పేరులోని పొడగింపు తప్పు. ఒకసారి సరిచూసి మళ్ళీ ప్రయత్నించండి.',
+'uploadvirus'           => 'ఈ ఫైలులో వైరస్‌ ఉంది! వివరాలు: $1',
+'sourcefilename'        => 'మూలం ఫైలు పేరు',
+'destfilename'          => 'ఉద్దేశించిన ఫైలు పేరు',
+'imagelist'             => 'ఫైళ్ళ జాబితా',
+'imagelisttext'         => '$2 పేర్చిన $1 ఫైళ్ళ జాబితా ఇది.',
+'imagelistforuser'      => '$1 అప్‌లోడు చేసిన బొమ్మలను మాత్రమే ఇది చూపిస్తుంది.',
+'showlast'              => '$2 పేర్చిన గత $1 ఫైళ్ళను చూపించు',
+'byname'                => 'పేర్ల వారీగ',
+'bydate'                => 'తేదీ వారీగ',
+'bysize'                => 'సైజు వారీగ',
+'imgdesc'               => 'వివరణ',
+'imglegend'             => 'సూచిక: (వివరణ) = ఫైలు వివరణను చూపు/మార్చు.',
+'imghistory'            => 'ఫైలు చరిత్ర',
+'deleteimgcompletely'   => 'ఈ ఫైలు యొక్క అన్ని సంచికలను తీసివేయి',
+'imghistlegend'         => 'సూచిక: (ప్రస్తుతం) = ఇది ప్రస్తుతం ఉన్న ఫైలు, (తీసివేయి) = ఈ పాత సంచికను తీసివేయి, (తిప్పు) = ఈ పాత సంచికకు తిప్పు. <br /><i>తేదీని నొక్కి, ఆ తేదీన అప్‌లోడు చేసిన ఫైలును చూడండి</i>.',
+'imagelinks'            => 'లింకులు',
+'linkstoimage'          => 'కింది పేజీలలో ఈ ఫైలుకు లింకులు ఉన్నాయి:',
+'nolinkstoimage'        => 'ఈ ఫైలుకు లింకున్న పేజీలు లేవు.',
+'shareduploadwiki'      => 'మరింత సమాచారం కొరకు [$1 ఫైలు వివరణ పేజీ] చూడండి.',
+'shareduploadwiki-linktext'=> 'ఫైలు వివరణ పేజీ',
+'noimage'               => 'ఆ పేరుతో ఫైలేమీ లేదు, మీరు $1',
+'noimage-linktext'      => 'దాన్ని అప్‌లోడు చెయ్యవచ్చు',
+'listredirects'         => 'దారిమార్పుల జాబితా',
+'unusedtemplates'       => 'వాడని మూసలు',
+'statistics'            => 'గణాంకాలు',
+'sitestats'             => '{{SITENAME}} గణాంకాలు',
+'userstats'             => 'సభ్యుల గణాంకాలు',
+'sitestatstext'         => 'ప్రస్తుతము తెలుగు వికిపీడియాలో \'\'\'$2\'\'\' వ్యాసాలున్నాయి.
+{{SITENAME}}కు సంబంధించిన పేజీలు, "చర్చ" పేజీలు, "మొలక" పేజీలు, "దారిమార్పు" పేజీలు, మరియు {{SITENAME}}కు వ్యాసాలుగా భావించడానికి వీలుకాని ఇతర పేజీలు కలుపుకొని డేటాబేసులో మొత్తము \'\'\'$1\'\'\' సక్రమమైన పేజీలు వున్నాయి.
+
+\'\'\'$8\'\'\' ఫైళ్ళు అప్‌లోడ్ చేయబడ్డాయి.
+
+తెలుగు {{SITENAME}} ప్రారంభమైనప్పటినుండి మొత్తము \'\'\'$3\'\'\' పేజీ దర్శనలు, \'\'\'$4\'\'\' పేజీ మార్పులు జరిగాయి.
+అంటే, సగటున ప్రతీ పేజీకి \'\'\'$5\'\'\' మార్పులు మరియు ప్రతీ మార్పుకి \'\'\'$6\'\'\' దర్శనలు.
+
+[http://meta.wikimedia.org/wiki/Help:Job_queue చేయవలసిన పనుల జాబితా] పొడవు \'\'\'$7\'\'\'.',
+'userstatstext'         => 'ప్రస్తుతము \'\'\'$1\'\'\' మంది నమోదు చేసుకున్న సభ్యులు ఉన్నారు. అందులో \'\'\'$2\'\'\' (లేదా \'\'\'$4%\'\'\') మంది నిర్వాహకులు ($3 చూడండి).',
+'disambiguations'       => 'అయోమయ నివృత్తి పేజీలు',
+'disambiguationspage'   => 'Template:అయోమయ నివృత్తి',
+'disambiguationstext'   => 'కింది పేజీలకు ఏదో ఒక <i>అయోమయ నివృత్తి పేజీ</i>కి చూపుతున్నాయి. అలాకాక వాటికి సంబంధిత విష్యానికి చూపుతుండాాలి. <br />ఏదైనా పేజీకి $1 నుండి లింకు ఉన్నట్లయితే ఆ పేజీ అయోమయ నివృత్తి పేజీగా భావింపబడుతుంది. <br />ఇతర నేంస్పేసుల నుండి ఉండే లింకుల గురించి ఇక్కడ ప్రస్తావన<i>లేదు</i>.',
+'doubleredirects'       => 'జంట దారిమార్పులు',
+'doubleredirectstext'   => 'ప్రతీ వరుసలోను మొదటి, రెండవ దారిమార్పు లింకులు, రెండో దారిమార్పు పేజీలోని వ్యాసపు మొదటి లైను ఉన్నాయి. మొదటి దారిమార్పు యొక్క అసలైన లక్ష్యం ఈ రెండో దారిమార్పు పేజీయే!',
+'brokenredirects'       => 'తెగిపోయిన దారిమార్పులు',
+'brokenredirectstext'   => 'కింది దారిమార్పులు లేని పేజీలకు మాళ్ళించుతున్నాయి.',
+'nbytes'                => '$1 {{PLURAL:$1|బైటు|బైట్లు}}',
+'ncategories'           => '$1 {{PLURAL:$1|వర్గం|వర్గాలు}}',
+'nlinks'                => '$1 {{PLURAL:$1|లింకు|లింకులు}}',
+'nrevisions'            => '{{PLURAL:$1|ఒక సంచిక|$1 సంచికలు}}',
+'nviews'                => '$1 {{PLURAL:$1|దర్శనము|దర్శనలు}}',
+'lonelypages'           => 'అనాధ పేజీలు',
+'uncategorizedpages'    => 'వర్గీకరించని పేజీలు',
+'uncategorizedcategories'=> 'వర్గీకరించని వర్గములు',
+'unusedcategories'      => 'ఉపయోగించని వర్గాలు',
+'unusedimages'          => 'ఉపయోగించబడని ఫైళ్ళు',
+'wantedcategories'      => 'కోరిన వర్గాలు',
+'wantedpages'           => 'కోరిన పేజీలు',
+'mostlinked'            => 'అధిక లింకులు చూపే పేజీలు',
+'mostlinkedcategories'  => 'అధిక లింకులు చూపే వర్గాలు',
+'mostcategories'        => 'అధిక వర్గాలలో చేరిన వ్యాసాలు',
+'mostimages'            => 'అధిక లింకులు గల బొమ్మలు',
+'mostrevisions'         => 'అధిక సంచికలు గల వ్యాసాలు',
+'allpages'              => 'అన్ని పేజీలు',
+'randompage'            => 'యాధృచ్ఛిక పేజీ',
+'shortpages'            => 'చిన్న పేజీలు',
+'longpages'             => 'పొడవు పేజీలు',
+'deadendpages'          => 'అగాధ (డెడ్ఎండ్) పేజీలు',
+'listusers'             => 'సభ్యుల జాబితా',
+'specialpages'          => 'ప్రత్యేక పేజీలు',
+'spheading'             => 'సభ్యులందరి ప్రత్యేక పేజీలు',
+'restrictedpheading'    => 'నియంత్రిత ప్రత్యేక పేజీలు',
+'recentchangeslinked'   => 'సంబంధిత మార్పులు',
+'rclsub'                => '("$1" నుండి లింకున్న పేజీలకు)',
+'newpages'              => 'కొత్త పేజీలు',
+'ancientpages'          => 'పాత పేజీలు',
+'move'                  => 'తరలించు',
+'movethispage'          => 'ఈ పేజీని తరలించు',
+'unusedimagestext'      => '<p>ఇతర వెబ్ సైట్లు సూటి యు.ఆర్.ఎల్ ద్వారా ఇక్కడి బొమ్మలకు లింకు ఇవ్వవచ్చు. అటువంటి లింకులున్న బొమ్మలు కూడా ఇక్కడ చేరి ఉండవచ్చునని గమనించండి.</p>',
+'unusedcategoriestext'  => 'కింది వర్గాలకు పేజీలైతే ఉన్నాయి గానీ, వీటిని వ్యాసాలు గానీ, ఇతర వర్గాలు గానీ ఉపయోగించడం లేదు.',
+'booksources'           => 'పుస్తక మూలాలు',
+'categoriespagetext'    => 'వికీలో ఈ కింది వర్గాలు ఉన్నాయి.',
+'data'                  => 'డాటా',
+'booksourcetext'        => 'కొత్త, పాత పుస్తకాలమ్మే సైట్ల జాబితా ఇది. మీకవసరమైన పుస్తకాల గురించి మరింత సమాచారం కూడా అక్కడ దొరకొచ్చు.',
+'alphaindexline'        => '$1 నుండి $2',
+'version'               => 'సంచిక',
+'log'                   => 'దినచర్య పేజీలు',
+'alllogstext'           => 'అప్‌లోడు, తొలగింపు, సంరక్షణ, నిరోధం, నిర్వహణల లాగ్ ఇది. ప్రత్యేకించి ఒక లాగ్ రకాన్ని గానీ, ఓ సభ్యుని పేరు గానీ, ఓ పేజీని గాని ఎంచుకుని సంబంధిత లాగ్‌ను మాత్రమే చూడవచ్చు కూడా.',
+'nextpage'              => 'తరువాతి పేజీ ($1)',
+'allpagesfrom'          => 'ఇక్కడ మొదలు పెట్టి పేజీలు చూపించు:',
+'allarticles'           => 'అన్ని వ్యాసములు',
+'allinnamespace'        => 'అన్ని పేజీలు ($1 namespace)',
+'allnotinnamespace'     => 'అన్ని పేజీలు ($1 నేంస్పేస్ లేనివి)',
+'allpagesprev'          => 'పూర్వపు',
+'allpagesnext'          => 'తర్వాతి',
+'allpagessubmit'        => 'వెళ్లు',
+'mailnologintext'       => 'ఇతరులకు ఈ-మెయిల్‌ పంపించాలంటే, మీరు [[Special:Userlogin|లాగిన్‌]] అయి ఉండాలి, మరియు మీ [[Special:Preferences|అభిరుచుల]]లో సరైన ఈ-మెయిల్‌ చిరునామా ఇచ్చి ఉండాలి.',
+'emailuser'             => 'ఈ సభ్యునికి ఈ-మెయిల్‌ పంపు',
+'emailpage'             => 'సభ్యునికి ఈ-మెయిల్ పంపు',
+'emailpagetext'         => 'ఈ సభ్యుడు తన అభిరుచులలో సరైన ఈ-మెయిల్‌ చిరునామా ఇచ్చి ఉంటే, కింది ఫారం మీ సందేశాన్ని పంపిస్తుంది. మీ అభిరుచులలో మీరిచ్చిన ఈ-మెయిల్‌ చిరునామా "నుండి" ఆ సందేశంలో వచ్చినట్లుగా ఉంటుంది. ఆ సభ్యుడు ఈ చిరునామాకు జవాబు పంపుగలరు.',
+'defemailsubject'       => '{{SITENAME}} ఇ-మెయిల్',
+'noemailtitle'          => 'ఈ-మెయిల్‌ చిరునామా లేదు',
+'noemailtext'           => 'ఈ సభ్యుడు సరైన ఈ-మెయిల్‌ చిరునామా ఇవ్వలేదు, లేదా ఇతరుల నుండి ఈ-మెయిల్‌‌లను అందుకోవడానికి సుముఖంగా లేరు.',
+'emailfrom'             => 'నుండి',
+'emailto'               => 'కు',
+'emailsubject'          => 'విషయం',
+'emailmessage'          => 'సందేశం',
+'emailsend'             => 'పంపించు',
+'emailsent'             => 'ఈ-మెయిల్‌ వెళ్ళింది',
+'emailsenttext'         => 'మీ ఈ-మెయిల్‌ సందేశం పంపబడింది.',
+'watchlist'             => 'నా వీక్షణ జాబితా',
+'mywatchlist'             => 'నా వీక్షణ జాబితా',
+'nowatchlist'           => 'మీ వీక్షణ జాబితా ఖాళీగా ఉంది.',
+'watchnologin'          => 'లాగిన్‌ అయిలేరు',
+'watchnologintext'      => 'మీ వీక్షణ జాబితాను మార్చడానికి మీరు [[Special:Userlogin|లాగిన్‌]] అయి ఉండాలి.',
+'addedwatch'            => 'వీక్షణ జాబితాలో చేరింది',
+'addedwatchtext'        => '"$1" పేజీ మీ [[Special:వీక్షణ జాబితా|వీక్షణ జాబితా]]కు చేరింది. ఇకముందు ఈ పేజీలోను, దీని చర్చా పేజీలోను జరిగే మార్పుచేర్పులన్నీ అక్కడ చేరతాయి. సులభంగా గుర్తించడానికై [[Special:Recentchanges|ఇటీవలి మార్పుల జాబితా]]లో ఈ పేజీ పేరు \'\'\'బొద్దుగా\'\'\' కనపడుతుంది. 
+
+వీక్షణ జాబితా నుండి ఈ పేజీ తొలగించాలంటే, "Unwatch"ను నొక్కండి.',
+'removedwatch'          => 'వీక్షణ జాబితా నుండి తొలగించబడినది',
+'removedwatchtext'      => '"[[:$1]]" పేజీ మీ వీక్షణ జాబితా నుండి తొలగించబడినది.',
+'watch'                 => 'వీక్షించు',
+'watchthispage'         => 'ఈ పేజీ మీద కన్నేసి ఉంచు',
+'unwatch'               => 'వీక్షించ వద్దు',
+'unwatchthispage'       => 'వీక్షణను ఆపు',
+'notanarticle'          => 'వ్యాసం పేజీ కాదు',
+'watchnochange'         => 'మీ వీక్షణ జాబితాలోని ఏ పేజీలోనూ ఈ కాల అవధిలో మార్పులు జరగలేదు.',
+'watchdetails'          => '* చర్చా పేజీలు కాకుండా $1 పేజీలు వీక్షణ జాబితాలో ఉన్నాయి 
+* [[Special:Watchlist/edit|పూర్తి వీక్షణ జాబితాను చూపించు, మార్చు]]
+* [[Special:Watchlist/clear|అన్ని పేజీలను తీసివేయి]]',
+'wlheader-enotif'       => '* ఈ-మెయిల్‌ ప్రకటనలు పంపబడతాయి.',
+'wlheader-showupdated'  => '* మీ గత సందర్శన తరువాత మారిన పేజీలు \'\'\'బొద్దు\'\'\'గా చూపించబడ్డాయి.',
+'watchmethod-recent'    => 'వీక్షణ జాబితాలోని పేజీల కొరకు ఇటీవలి మార్పులు పరిశీలించబడుతున్నాయి',
+'watchmethod-list'      => 'ఇటీవలి మార్పుల కొరకు వీక్షణ జాబితాలోని పేజీలు పరిశీలించబడుతున్నాయి',
+'removechecked'         => 'టిక్కు పెట్టిన వాటిని వీక్షణ జాబితా నుండి తొలగించు',
+'watchlistcontains'     => 'మీ వీక్షణ జాబితాలో $1 పేజీలు ఉన్నాయి.',
+'watcheditlist'         => 'ఇది అక్షర క్రమంలో మీ వీక్షణ జాబితాలోని వ్యాసాల పేజీల పట్టిక. మీరు తీసివేయదలచుకున్న పేజీలకు ఎదురుగానున్న చెక్‌బాక్స్‌లో టిక్కు పెట్టి కిందనున్న \'టిక్కు పెట్టిన వాటిని వీక్షణ జాబితా నుండి తొలగించు\' అనే మీటను నొక్కండి (వ్యాసం పేజీని తొలగించినపుడు సంబంధిత చర్చా పేజీ కూడా పోతుంది. అలాగే చర్చా పేజీని తొలగించినపుడు సంబంధిత వ్యాసం పేజీ కూడా పోతుంది).',
+'couldntremove'         => '\'$1\'ను తొలగించటం కుదరలేదు...',
+'wlnote'                => 'గత <b>$2</b> గంటలలోని చివరి $1 మార్పులు కింద ఉన్నాయి.',
+'wlshowlast'            => 'గత $1 గంటలు $2 రోజులు $3 చూపించు',
+'wlsaved'               => 'ఇది భద్రపరచబడిన మీ వీక్షణ జాబితా.',
+'wlhideshowown'         => 'నా మార్పులను $1',
+'wlhideshowbots'        => 'బాట్ల మార్పులను $1',
+'enotif_mailer'         => '{{SITENAME}} ప్రకటన మెయిల్‌ పంపునది',
+'enotif_reset'          => 'అన్ని పేజీలను చూసినట్లుగా గుర్తించు',
+'enotif_newpagetext'    => 'ఇది ఒక కొత్త పేజీ.',
+'changed'               => 'మార్చబడింది',
+'created'               => 'సృష్టించబడింది',
+'enotif_lastvisited'    => 'మీ గత సందర్శన తరువాత జరిగిన మార్పుల కొరకు $1 చూడండి.',
+'deletepage'            => 'పేజీని తుడిచివేయి',
+'confirm'               => 'ధృవీకరించు',
+'excontent'             => 'ఇదివరకు విషయ సంగ్రహం: \'$1\'',
+'excontentauthor'       => 'ఇదివరకు విషయ సంగ్రహం: \'$1\' (మరియు దీని ఒకేఒక్క రచయిత \'$2\')',
+'exbeforeblank'         => 'ఖాళీ చెయ్యకముందు పేజీలో ఉన్న విషయ సంగ్రహం: \'$1\'',
+'exblank'               => 'పేజీ ఖాళీగా ఉంది',
+'confirmdelete'         => 'తొలగింపును ధృవీకరించండి',
+'deletesub'             => '("$1" తొలగింపబడుతుంది)',
+'historywarning'        => 'హెచ్చరిక: మీరు తొలగించబోయే పేజీకి చరిత్ర ఉంది:',
+'confirmdeletetext'     => 'మీరో పేజీనో, బొమ్మనో శాశ్వతంగా డేటాబేసు నుండి తీసెయ్యబోతున్నారు. మీరు చెయ్యదలచింది ఇదేననీ, దీని పర్యవసానాలు మీకు తెలుసనీ, దీన్ని [[Project::Policy|నిభందనల]] ప్రకారమే చేస్తున్నారనీ నిర్ధారించుకోండి.',
+'actioncomplete'        => 'పని పూర్తయింది',
+'deletedtext'           => '"$1" తుడిచివేయబడింది. ఇటీవలి తుడిచివేతలకు సంబంధించిన నివేదిక కొరకు $2 చూడండి.',
+'deletedarticle'        => '"$1" తుడిచివేయబడినది',
+'dellogpage'            => 'తొలగింపు దినచర్య పేజి',
+'dellogpagetext'        => 'ఇది ఇటీవలి తుడిచివేతల జాబితా.',
+'deletionlog'           => 'తొలగింపు దినచర్య పేజి',
+'deletecomment'         => 'తుడిచివేతకు కారణము',
+'imagereverted'         => 'విజయవంతంగా పాత సంచికకు వెళ్ళింది.',
+'cantrollback'          => 'రచనను వెనక్కి తీసుకువెళ్ళలేము; ఈ పేజీకి ఇదొక్కటే రచన.',
+'alreadyrolled'         => '[[:$1]]లో [[User:$2|$2]] ([[User talk:$2|చర్చ]]) చేసిన చివరి మార్పును రోల్‌బాక్ చెయ్యలేము; మరెవరో ఆ పేజీని రోల్‌బాక్ చేసారు, లేదా మార్చారు. 
+
+చివరి మార్పులు చేసినవారు: [[User:$3|$3]] ([[User talk:$3|చర్చ]]).',
+'revertpage'            => '[[Special:Contributions/$2|$2]] ([[User_talk:$2|చర్చ]]) చేసిన మార్పులను [[User:$1|$1]] వైనక్కు తేసుకువెళ్ళారు',
+'protectlogpage'        => 'సంరక్షణ దినచర్య',
+'protectlogtext'        => 'పేజీ సంరక్షణ గురించిన వివరాల జాబితా క్రింద వున్నది.',
+'protectedarticle'      => '"[[$1]]" సంరక్షించబడింది.',
+'protectmoveonly'       => 'తరలింపుల నుండి మాత్రమే సంరక్షించు',
+'protectcomment'        => 'సంరక్షించడానికి కారణం',
+'protect-text'          => 'ఈ పెజీ <strong>$1></strong> ఎంత సంరక్షణలొ వుందో మీరు ఇక్కడ చూడవచ్చు, మార్చవచ్చు.',
+'undelete'              => 'తుడిచివేయబడ్డ పేజీలను చూపించు',
+'undeletepage'          => 'తుడిచివేయబడిన పేజీలను చూపించు, పునఃస్థాపించు',
+'undeletepagetext'      => 'కీంది పేజీలు తుడిచివేయబడినవి, కానీ పునఃస్థాపనకు వీలుగా సంగ్రహంలో ఉన్నాయి. సంగ్రహం నిర్ణీత వ్యవధులలో పూర్తిగా ఖాళీ చేయబడుతుంటుంది.',
+'undeletearticle'       => 'తుడిచివేసిన పేజీని పునఃస్థాపించు',
+'undeletehistory'       => 'పేజీని పునఃస్థాపిస్తే, అన్ని సంచికలూ చరిత్రలోకి పునఃస్థాపించబడతాయి. 
+తుడిచివేయబడిన తరువాత, అదే పేరుతో వేరే పేజీ సృష్టించబడి ఉంటే, పునఃస్థాపించిన సంచికలు ముందరి చరిత్రలోకి వెళ్తాయి. పేజీ ప్రస్తుతపు సంచిక మాత్రం ఆటోమాటిక్‌గా తీసివేయబడదు.',
+'undeletehistorynoadmin'=> 'ఈ వ్యాసం తుడిచివేయబడినది. తుడిచివేయడానికి కారణము, పేజీలో మార్పులు చేసిన సభ్యులతో సహా కింద సారాంశంలో చూపబడింది. తుడిచివేయబడిన సంచికలలోని విషయ సంగ్రహం నిర్వాహకులకు మాత్రమే అందుబాటులో ఉంది.',
+'undeletebtn'           => 'పునఃస్థాపించు',
+'undeletedarticle'      => '"[[$1]]" పునఃస్థాపన జరిగింది',
+'undeletedrevisions'    => '$1 సంచికల పునఃస్థాపన జరిగింది',
+'namespace'             => 'నేంస్పేసు:',
+'invert'                => 'ఎంపికను తిరగవెయ్యి',
+'contributions'         => 'సభ్యుని రచనలు',
+'mycontris'             => 'నా మార్పులు-చేర్పులు',
+'contribsub2'            => '$1 ($2) కొరకు',
+'nocontribs'            => 'ఈ విధమైన మార్పులేమీ దొరకలేదు.',
+'ucnote'                => 'గత <b>$2</b> రోజులలో సభ్యుడు చేసిన చివరి <b>$1</b> మార్పులు కింద ఉన్నాయి.',
+'uclinks'               => 'చివరి $1 మార్పులు చూపించు; గత $2 రోజుల మార్పులు చూపించు.',
+'sp-contributions-newest'=> 'అన్నిటికంటే కొత్తవి',
+'sp-contributions-oldest'=> 'అన్నిటికంటే పాతవి',
+'sp-contributions-newer'=> 'కొత్త $1',
+'sp-contributions-older'=> 'పాత $1',
+'whatlinkshere'         => 'ఇక్కడికి లింకు చేస్తున్న పేజీలు',
+'notargettitle'         => 'గమ్యం లేదు',
+'notargettext'          => 'ఈ పని ఏ పేజీ లేదా సభ్యునిపై జరగాలనే గమ్యాన్ని మీరు సూచించలేదు.',
+'linkshere'             => 'కింది పేజీలలో ఇక్కడికి లింకులు ఉన్నాయి:',
+'nolinkshere'           => 'ఇక్కడికి ఏ పేజీ నుండీ లింకు లేదు.',
+'isredirect'            => 'దారిమార్పు పేజీ',
+'blockip'               => 'సభ్యుని నిరోధించు',
+'ipadressorusername'    => 'ఐ.పి. చిరునామా లేదా సభ్యనామం',
+'ipbexpiry'             => 'అంతమయ్యే గడువు',
+'ipbreason'             => 'కారణం',
+'ipbsubmit'             => 'ఈ సభ్యుని నిరోధించు',
+'ipbother'              => 'వేరే గడువు',
+'ipboptions'            => '2 గంటలు:2 గంటలు,1 రోజు:1 రోజు,3 రోజులు:3 రోజులు,1 వారం:1 వారం,2 వారాలు:2 వారాలు,1 నెల:1 నెల,3 నెలలు:3 నెలలు,6 నెలలు:6 నెలలు,1 సంవత్సరం:1 సంవత్సరం,ఎప్పటికీ:ఎప్పటికీ',
+'ipbotheroption'        => 'వేరే',
+'badipaddress'          => 'సరైన ఐ.పి. అడ్రసు కాదు',
+'blockipsuccesssub'     => 'నిరోధం విజయవంతం అయింది',
+'blockipsuccesstext'    => '[[Special:Contributions/$1|$1]] నిరోధించబడింది.
+<br />నిరోధాల సమీక్ష కొరకు [[Special:Ipblocklist|ఐ.పి. నిరొధాల జాబితా]] చూడండి.',
+'unblockip'             => 'సభ్యునిపై నిరోధాన్ని తొలగించు',
+'unblockiptext'         => 'కింది ఫారం ఉపయోగించి, నిరోధించబడిన ఐ.పీ. చిరునామా లేదా సభ్యునికి తిరిగి రచనలు చేసే అధికారం ఇవ్వవచ్చు.',
+'ipusubmit'             => 'ఈ చిరునామాపై నిరోధం తొలగించు',
+'unblocked'             => '[[User:$1|$1]]పై నిరోధం తొలగించబడింది',
+'ipblocklist'           => 'నిరోధించబడిన ఐ.పీ చిరునామాలు మరియు సభ్యులు',
+'blocklistline'         => '$1, $2లు $3 ($4)ను నిరోధించారు.',
+'blocklink'             => 'నిరోధించు',
+'unblocklink'           => 'నిరోధం తొలగించు',
+'contribslink'          => 'రచనలు',
+'autoblocker'           => 'మీ ఐ.పీ. అడ్రసును "[[User:$1|$1]]" ఇటీవల వాడుట చేత, అది ఆటోమాటిక్‌గా నిరోధించబడినది. $1ను నిరోధించడానికి కారణం: "\'\'\'$2\'\'\'"',
+'blocklogpage'          => 'నిరోద దినచర్య పేజి',
+'blocklogentry'         => '"[[$1]]" పై నిరోధం అమలయింది. నిరోధ కాలం $2',
+'blocklogtext'          => 'సభ్యుల నిరోధాలు, పునస్థాపనల దినచర్య పేజీ ఇది. ఆటోమాటిక్‌గా నిరోధానికి గురైన ఐ.పి. అడ్రసులు ఈ జాబితాలో ఉండవు. ప్రస్తుతం అమల్లో ఉన్న నిరోధాలు, నిషేధాల కొరకు [[Special:Ipblocklist|ఐ.పి. నిరోధాల జాబితా]]ను చూడండి.',
+'unblocklogentry'       => '$1పై నిరోధం తొలగించబడింది',
+'ipb_expiry_invalid'    => 'అంతమయ్యే గడువు సరైనది కాదు.',
+'lockdb'                => 'డాటాబేసును లాక్‌ చెయ్యి',
+'lockdbtext'            => 'డాటాబేసును లాక్‌ చెయ్యడం వలన సభ్యులు పేజీలు మార్చడం, అభిరుచులు మార్చడం, వీక్షణ జాబితాను మార్చడం వంటి డాటాబేసు ఆధారిత పనులు చెయ్యలేరు. మీరు చెయ్యదలచినది ఇదేనని, మీ పని కాగానే తిరిగి డాటాబేసును ప్రారంభిస్తాననీ ధృవీకరించండి.',
+'lockconfirm'           => 'అవును, డేటాబేసును లాకు చెయ్యాలని నిజంగానే అనుకుంటున్నాను.',
+'lockbtn'               => 'డాటాబేసును లాక్‌ చెయ్యి',
+'locknoconfirm'         => 'మీరు ధృవీకరణ పెట్టెలో టిక్కు పెట్టలేదు.',
+'lockdbsuccesssub'      => 'డాటాబేసు లాకు విజయవంతం అయ్యింది.',
+'lockdbsuccesstext'     => 'డాటాబేసు లాకయింది.<br />పని పూర్తి కాగానే లాకు తియ్యడం మర్చిపోకండి.',
+'makesysoptext'         => 'మామూలు సభ్యులను నిర్వాహకులు చెయ్యడానికి అధికారులు ఈ ఫారంను వాడతారు. దీని కొరకు సభ్యుని పేరు పెట్టెలో టైపు చేసి, మీట నొక్కండి.',
+'makesysopname'         => 'సభ్యుని పేరు:',
+'makesysopsubmit'       => 'ఈ సభ్యుని నిర్వాహకుడిని చెయ్యి',
+'makesysopok'           => '<b>సభ్యుడు "$1" ఇప్పుడు నిర్వాహకుడు</b>',
+'makesysopfail'         => '<b>సభ్యుడు "$1"ని నిర్వాహకుడిగా మార్చలేక పోయాం. (పేరు సరిగానే రాసారా?)</b>',
+'rights'                => 'హక్కులు:',
+'makesysop'             => 'సభ్యుడిని నిర్వాహకుడిగా మార్చు',
+'already_sysop'         => 'ఈ సభ్యుడు ఇప్పటికే నిర్వాహకుడు',
+'already_bureaucrat'    => 'ఈ సభ్యుడు ఇప్పటికే అధికారి',
+'movepage'              => 'పేజీని తరలించు',
+'movepagetext'          => 'కీంది ఫారం ఉపయోగించి, పేజీ పేరు మార్చవచ్చు. దాంతో పాటు దాని చరిత్ర అంతా కొత్త పేజీ చరిత్రగా మారుతుంది. పాత పేజీ కొత్త దానికి దారిమార్పు పేజీ అవుతుంది. పాత పేజీని చేరుకునే లింకులు అలాగే ఉంటాయి; తెగిపోయిన దారిమార్పులు, జంట దారిమార్పులు లేవని నిర్ధారించుకోండి. లింకులన్నీ అనుకున్నట్లుగా, చేరవలసిన చోటికే చేరుతున్నాయని నిర్ధారించుకోవలసిన బాధ్యత మీదే. 
+
+ఒకవేళ కొత్త పేజీ పేరుతో ఇప్పటికే ఒక పేజీ ఉండి - అది ఖాళీగా లేకున్నా / చరితం ఉన్నా- పేజీ తరలింపు \'\'\'జరగదు\'\'\'. అంటే కొత్తపేరును మార్చి తిరిగి పాతపేరుకు తీసుకురాగలరు మరియు ఇప్పటికే వున్న పేజీని తుడిచివేయలేరు. 
+
+<b>హెచ్చరిక!</b> 
+బాగా జనరంజకమైన అయిన పేజీని మారుస్తున్నారేమో చూడండి; దాని పరిణామాలను అర్ధం చేసుకుని ముందుకుసాగండి.',
+'movepagetalktext'      => 'దానితో పాటు సంబంధిత చర్చా పేజీ కూడా ఆటోమాటిక్‌‌గా తరలించబడుతుంది, \'\'\'కింది సందర్భాలలో తప్ప:\'\'\' 
+*ఒక నేంస్పేసు నుండి ఇంకోదానికి తరలించేటపుడు, 
+*కొత్త పేరుతో ఇప్పటికే ఒక చర్చా పేజీ ఉంటే, 
+*కింది చెక్‌బాక్సులో టిక్కు పెట్టకపోతే. 
+
+ఆ సందర్భాలలో, మీరు చర్చా పేజీని కూడా పనిగట్టుకుని తరలించవలసి ఉంటుంది, లేదా ఏకీకృత పరచవలసి ఉంటుంది.',
+'movearticle'           => 'పేజీని తరలించు',
+'movenologin'           => 'లాగిన్‌ అయిలేరు',
+'movenologintext'       => 'పేజీని తరలించడానికి మీరు [[Special:Userlogin|లాగిన్‌]] అయిఉండాలి.',
+'newtitle'              => 'కొత్త పేరుకి',
+'movepagebtn'           => 'పేజీని తరలించు',
+'pagemovedsub'          => 'తరలింపు విజయవంతమైనది',
+'pagemovedtext'         => '"[[$1]]" పేజీ "[[$2]]"కు తరలించబడింది.',
+'articleexists'         => 'ఆ పేరుతో ఇప్పటికే ఒక పేజీ ఉంది, లేదా మీరు ఎంచుకున్న పేరు సరైనది కాదు. వేరే పేరు ఎంచుకోండి.',
+'talkexists'            => '\'\'\'పేజీని జయప్రదంగా తరలించాము, కానీ చర్చా పేజీని తరలించలేక పోయాము. కొత్త పేరుతో చర్చ పేజీ ఇప్పటికే ఉంది, ఆ రెంటినీ మీరే ఏకీకృతం చెయ్యండి.\'\'\'',
+'movedto'               => 'తరలింపు',
+'movetalk'              => 'కూడా వున్న చర్చ పేజీని తరలించు',
+'talkpagemoved'         => 'సంబంధిత చర్చా పేజీ కూడా తరలించబడింది.',
+'talkpagenotmoved'      => 'సంబంధిత చర్చా పేజీని తరలించబడ<strong>లేదు</strong>.',
+'1movedto2'             => '$1, $2కు తరలించబడింది',
+'movelogpage'           => 'తరలింపు దినచర్య',
+'movelogpagetext'       => 'కింద తరలించిన పేజీల జాబితా ఉన్నది.',
+'movereason'            => 'కారణము',
+'delete_and_move'       => 'తొలగించి, తరలించు',
+'delete_and_move_text'  => '==తొలగింపు అవసరం==
+
+ఉద్దేశించిన వ్యాసం "[[$1]]" ఇప్పటికే ఉనికిలో ఉంది. ప్రస్తుత తరలింపుకు వీలుగా దాన్ని తొలగించేయమంటారా?',
+'delete_and_move_confirm'=> 'అవును, పేజీని తొలగించు',
+'delete_and_move_reason'=> 'తరలింపుకు వీలుగా తొలగించబడింది',
+'selfmove'              => 'మూలం, గమ్యం పేర్లు ఒకటే; పేజీని దాని పైకే తరలించడం కుదరదు.',
+'export'                => 'ఎగుమతి పేజీలు',
+'allmessages'           => 'అన్ని సిస్టం సందేశాలు',
+'allmessagesname'       => 'పేరు',
+'allmessagestext'       => 'మీడియావికీ నేంస్పేసులో ఉన్న అన్ని సిస్టం సందేశాల జాబితా ఇది.',
+'thumbnail-more'        => 'పెద్దది చెయ్యి',
+'missingimage'          => '<b>తప్పిపోయిన బొమ్మ</b><br /><i>$1</i>',
+'filemissing'           => 'ఫైలు కనపడుటలేదు',
+'thumbnail_error'       => '$1: నఖచిత్రం తయారుచెయ్యడంలో లోపం జరిగింది',
+'importfailed'          => 'దిగుమతి కాలేదు: $1',
+'tooltip-diff'          => 'పాఠానికి మీరు చేసిన మార్పులను చూపుంచు.',
+'anonymous'             => '{{SITENAME}} యొక్క అజ్ఞాత సభ్యులు',
+'siteuser'              => '{{SITENAME}} సభ్యుడు $1',
+'lastmodifiedatby'        => 'ఈ పేజీకి $3 $2, $1న చివరి మార్పు చేసారు.',
+'and'                   => 'మరియు',
+'siteusers'             => '{{SITENAME}} సభ్యులు $1',
+'spamprotectiontitle'   => 'స్పాం సంరక్షణ ఫిల్టరు',
+'spamprotectiontext'    => 'మీరు భద్రపరచదలచిన పేజీని మా స్పాం ఫిల్టరు నిరోధించింది. బహుశా ఇది ఏదైనా బయటి సైటుకు ఇచ్చిన లింకు కారణంగా జరిగి ఉండవచ్చు.',
+'spamprotectionmatch'   => 'మా స్పాం ఫిల్టరును ప్రేరేపించిన రచన భాగం ఇది: $1',
+'subcategorycount'      => 'ఈ వర్గములో {{PLURAL:$1|ఒక ఉపవర్గము ఉంది|$1 ఉపవర్గములు ఉన్నాయి}}.',
+'categoryarticlecount'  => 'ఈ వర్గంలో {{PLURAL:$1|ఒక వ్యాసం ఉంది|$1 వ్యాసాలున్నాయి}}.',
+'numedits'              => 'మార్పుల సంఖ్య (వ్యాసం): $1',
+'numtalkedits'          => 'మార్పుల సంఖ్య (చర్చా పేజీ): $1',
+'numwatchers'           => 'వీక్షకుల సంఖ్య: $1',
+'numauthors'            => 'భిన్నమైన రచయితల సంఖ్య (వ్యాసం): $1',
+'numtalkauthors'        => 'భిన్నమైన రచయితల సంఖ్య (చర్చా పేజీ): $1',
+'mw_math_html'          => 'వీలైతే ఎచ్‌టీఎంఎల్ లేకపోతే పింగ్',
+'mw_math_source'        => 'టెక్ గానే ఉండనివ్వు (టెక్స్ట్‌ బ్రౌజర్ల కొరకు)',
+'markaspatrolleddiff'   => 'పరీక్షించినట్లుగా గుర్తు పెట్టు',
+'markaspatrolledtext'   => 'ఈ వ్యాసాన్ని పరీక్షించినట్లుగా గుర్తు పెట్టు',
+'markedaspatrolled'     => 'పరీక్షింపబడినట్లు గుర్తింపబడింది',
+'markedaspatrolledtext' => 'ఎంచుకున్న సంచిక పరీక్షించబడినట్లుగా గుర్తింపబడింది.',
+'deletedrevision'       => 'పాత సంచిక $1 తొలగించబడినది.',
+'previousdiff'          => '← మునుపటి తేడా',
+'nextdiff'              => 'తరువాతి తేడా →',
+'imagemaxsize'          => 'బొమ్మ వివరణ పేజీలో బొమ్మ ఉండవలసిన సైజు:',
+'thumbsize'             => 'నఖచిత్రం వైశాల్యం:',
+'showbigimage'          => 'మరింత స్పష్టమైన సంచికను డౌనులోడు చేసుకోండి ($1x$2, $3 KB)',
+'newimages'             => 'కొత్త ఫైళ్ళ కొలువు',
+'noimages'              => 'చూసేందుకు ఏమీ లేదు.',
+'passwordtooshort'      => 'మీ సంకేతపదము మరీ చిన్నదయినది. అది కనీసం $1 అక్షరాల పొడవు ఉండాలి.',
+'mediawarning'          => '\'\'\'హెచ్చరిక\'\'\': ఈ ఫైలులో హానికరమైన కోడ్‌ ఉండవచ్చు, దానిని పనిచేయిస్తే మీ సిస్టము దెబ్బతినవచ్చు.<hr />',
+'metadata'              => 'మెటాడేటా',
+'exif-pixelxdimension'  => 'బొమ్మ సరైన ఎత్తు',
+'edit-externally'       => 'బయటి అప్లికేషను వాడి ఈ ఫైలును మార్చు',
+'edit-externally-help'  => 'మరింత సమాచారం కొరకు [http://meta.wikimedia.org/wiki/Help:External_editors సెటప్‌ సూచనలు] చూడండి.',
+'recentchangesall'      => 'అన్నీ',
+'watchlistall1'         => 'అన్నీ',
+'watchlistall2'         => 'అన్నీ',
+'namespacesall'         => 'అన్నీ',
+'confirmemail'          => 'ఈ-మెయిల్ చిరునామా ధృవీకరించండి',
+'confirmemail_text'     => 'ఈ వికీలో ఈ-మెయిల్ అంశాల్ని వాడుకునే ముందు మీ ఈ-మెయిల్ చిరునామాను నిర్ధారించవలసిన అవసరం ఉంది.
+కింది మీటను నొక్కగానే మీరిచ్చిన చిరునామాకు ధృవీకరణ మెయిలు వెళ్తుంది. ఆ మెయిల్లో ఒక సంకేతం కలిగిన ఒక లింకు ఉంటుంది; ఆ లింకును మీ బ్రౌజరులో తెరవండి. ఈ-మెయిల్ చిరునామా ధృవీకరణ అయిపోతుంది.',
+'confirmemail_send'     => 'ఒక ధృవీకరణ సంకేతాన్ని పంపించు',
+'confirmemail_sent'     => 'ధృవీకరణ ఈ-మెయిలును పంపబడినది',
+'confirmemail_sendfailed'=> 'ధృవీకరణ మెయిలును పంపలేకపోయాము. చిరునామాలో తప్పులున్నాయేమో చూసుకోండి.',
+'confirmemail_invalid'  => 'ధృవీకరణ సంకేతం సరైనది కాదు. దానికి కాలం చెల్లి ఉండవచ్చు.',
+'confirmemail_success'  => 'మీ ఈ-మెయిల్ చిరునామా ధృవీకరణ అయింది. ఇక లాగిన్ అయి, వికీని అస్వాదించండి.',
+'confirmemail_loggedin' => 'మీ ఈ-మెయిల్ చిరునామా ఇప్పుడు రూఢి అయింది.',
+'confirmemail_error'    => 'మీ ధృవీకరణను భద్రపరచడంలో ఏదో లోపం జరిగింది.',
+'confirmemail_subject'  => '{{SITENAME}} ఈ-మెయిల్ చిరునామా ధృవీకరణ',
+'confirmemail_body'     => 'ఈ ఈ-మెయిల్ చిరునామాతో $1 ఐ.పి. అడ్రసు నుండి ఎవరో, బహుశా మీరే, {{SITENAME}}లో "$2" అనే ఎకౌంటును సృష్టించారు.
+
+ఈ ఎకౌంటు నిజంగా మీదేనని ధృవీకరించేందుకు, అలాగే {{SITENAME}}లో 
+ఈ-మెయిల్‌ను వాడటం మొదలుపెట్టేందుకు కింది లింకును మీ బ్రౌజరులో తెరవండి:
+
+$3
+
+ఒకవేళ అది మీరు *కాకపోతే* ఏమీ చెయ్యకండి. నిర్ధారణ కొరకు మేము పంపిన ఈ సంకేతం
+$4తో కాలం చెల్లుతుంది.',
+'tryexact'              => 'ఖచ్చితమైన పోలిక కొరకు ప్రయత్నించు',
+'createarticle'         => 'వ్యాసాన్ని సృష్టించు',
+'scarytranscludetoolong'=> '[యుఆర్‌ఎల్ మరీ పొడుగ్గా ఉంది; క్షమించండి]',
+'deletedwhileediting'   => 'హెచ్చరిక: మీరు మార్పులు చేయటం మొదలుపెట్టాక, ఈ పేజీ తొలగించబడింది.',
+'confirmrecreate'       => 'మీరు పేజీ రాయటం మొదలుపెట్టిన తరువాత [[User:$1|$1]] ([[User talk:$1|చర్చ]]) దానిని తీసివేసారు. దానికి ఈ కారణం ఇచ్చారు: \'\'$2\'\'
+మీరు ఈ పేజీని మళ్ళీ తయారు చేయాలనుకుంటున్నారని ధృవీకరించండి.',
+'tooltip-recreate'      => 'పేజీ తుడిచివేయబడ్డాకానీ మళ్ళీ సృష్టించు',
+'redirectingto'         => '[[$1]]కు మళ్ళించబడుతుంది...',
+'confirm_purge'         => 'ఈ పేజీ యొక్క పాత కాపీని తొలగించమంటారా?
+
+$1',
+'confirm_purge_button'  => 'సరే',
+'articletitles'         => '\'\'$1\'\'తొ మొదలయ్యే వ్యాసాలు',
+);
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesTg.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesTg.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesTg.php	(revision 1280)
@@ -0,0 +1,33 @@
+<?php
+/**
+ * Tajik (Тоҷикӣ)
+ *
+ * @addtogroup Language
+ *
+ * @author Francis Tyers
+ */
+
+$namespaceNames = array(
+	NS_MEDIA          => "Медиа",
+	NS_SPECIAL        => "Вижа",
+	NS_MAIN           => "",
+	NS_TALK           => "Баҳс",
+	NS_USER           => "Корбар",
+	NS_USER_TALK      => "Баҳси_корбар",
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK   => "Баҳси_$1",
+	NS_IMAGE          => "Акс",
+	NS_IMAGE_TALK     => "Баҳси_акс",
+	NS_MEDIAWIKI      => "Медиавики",
+	NS_MEDIAWIKI_TALK => "Баҳси_медиавики",
+	NS_TEMPLATE       => "Шаблон",
+	NS_TEMPLATE_TALK  => "Баҳси_шаблон",
+	NS_HELP           => "Роҳнамо",
+	NS_HELP_TALK      => "Баҳси_роҳнамо",
+	NS_CATEGORY       => "Гурӯҳ",
+	NS_CATEGORY_TALK  => "Баҳси_гурӯҳ",
+);
+
+$linkTrail = '/^([a-zабвгдеёжзийклмнопрстуфхчшъэюяғӣқўҳҷцщыь]+)(.*)$/sDu';
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesTh.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesTh.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesTh.php	(revision 1280)
@@ -0,0 +1,216 @@
+<?php
+/**
+  * @addtogroup Language
+  */
+#--------------------------------------------------------------------------
+# ผู้แปล (Translators)
+# - วรากร อึ้งวิเชียร (Varakorn Ungvichian)
+# - จักรกฤช วงศ์สระหลวง (Jakkrit Vongsraluang) / PaePae
+#--------------------------------------------------------------------------
+
+
+$namespaceNames = array(
+	NS_MEDIA            => 'สื่อ',
+	NS_SPECIAL          => 'พิเศษ',
+	NS_MAIN	            => '',
+	NS_TALK	            => 'พูดคุย',
+	NS_USER             => 'ผู้ใช้',
+	NS_USER_TALK        => 'คุยกับผู้ใช้',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK     => 'คุยเรื่อง$1',
+	NS_IMAGE            => 'ภาพ',
+	NS_IMAGE_TALK       => 'คุยเรื่องภาพ',
+	NS_MEDIAWIKI        => 'มีเดียวิกิ',
+	NS_MEDIAWIKI_TALK   => 'คุยเรื่องมีเดียวิกิ',
+	NS_TEMPLATE         => 'แม่แบบ',
+	NS_TEMPLATE_TALK    => 'คุยเรื่องแม่แบบ',
+	NS_HELP             => 'วิธีใช้',
+	NS_HELP_TALK        => 'คุยเรื่องวิธีใช้',
+	NS_CATEGORY         => 'หมวดหมู่',
+	NS_CATEGORY_TALK    => 'คุยเรื่องหมวดหมู่',
+);
+
+$linkTrail = '/^([a-z]+)(.*)\$/sD';
+
+
+$messages = array(
+
+# User Toggles
+#
+
+"tog-underline" => "ขีดเส้นใต้ลิงก์",
+"tog-highlightbroken" => "จัดลิงก์ที่ไม่มี <a href=\"\" class=\"new\">เป็น ดังนี้</a> (หรือ เป็นดังนี้<a href=\"\" class=\"internal\">?</a>).",
+"tog-justify"	=> "จัดย่อหน้าให้เรียบร้อย",
+"tog-hideminor" => "ไม่แสดงการแก้ไขย่อยใน recent changes",
+"tog-usenewrc" => "Enhanced recent changes (ไม่สามารถใช้ได้กับทุกเว็บบราวเซอร์)",
+"tog-numberheadings" => "ใส่ตัวเลขหน้าหัวข้อโดยอัตโนมัติ",
+"tog-showtoolbar" => "Show edit toolbar",
+"tog-editondblclick" => "แก้ไขหน้าโดยใช้ double click (ผ่าน JavaScript)",
+"tog-editsection"=>"สามารถแก้ไขเฉพาะส่วนโดยใช้ลิงก์ [แก้ไข]",
+"tog-editsectiononrightclick"=>"สามารถแก้ไขเฉพาะส่วนโดยใช้ right click<br /> บนชื่อส่วนย่อย (ผ่าน JavaScript)",
+"tog-showtoc"=>"แสดงสารบัญ<br />(สำหรับบทความที่มีมากกว่า 3 หัวข้อ)",
+"tog-rememberpassword" => "จำ password ระหว่าง session",
+"tog-editwidth" => "กล่องสำหรับการแก้ไขกว้างเต็มหน้าจอ",
+"tog-watchdefault" => "นำหน้าที่แก้ไขไปใส่ watchlist",
+"tog-minordefault" => "กำหนด default ให้การแก้ไขทุกครั้งเป็นการแก้ไขย่อย",
+"tog-previewontop" => "แสดง preview ก่อนกล่องสำหรับการแก้ไข",
+"tog-nocache" => "ไม่นำหน้าต่าง ๆ มาใส่ใน cache",
+
+
+# Dates
+#
+
+'sunday' => "วันอาทิตย์",
+'monday' => "วันจันทร์",
+'tuesday' => "วันอังคาร",
+'wednesday' => "วันพุธ",
+'thursday' => "วันพฤหัสบดี",
+'friday' => "วันศุกร์",
+'saturday' => "วันเสาร์",
+'january' => "มกราคม",
+'february' => "กุมภาพันธ์",
+'march' => "มีนาคม",
+'april' => "เมษายน",
+'may_long' => "พฤษภาคม",
+'june' => "มิถุนายน",
+'july' => "กรกฎาคม",
+'august' => "สิงหาคม",
+'september' => "กันยายน",
+'october' => "ตุลาคม",
+'november' => "พฤศจิกายน",
+'december' => "ธันวาคม",
+'jan' => "ม.ค.",
+'feb' => "ก.พ.",
+'mar' => "มี.ค.",
+'apr' => "เม.ย.",
+'may' => "พ.ค.",
+'jun' => "มิ.ย.",
+'jul' => "ก.ค.",
+'aug' => "ส.ค.",
+'sep' => "ก.ย.",
+'oct' => "ต.ค.",
+'nov' => "พ.ย.",
+'dec' => "ธ.ค.",
+
+# Bits of text used by many pages:
+#
+"categories" => "ประเภทของหน้า",
+"pagecategories" => "ประเภทของหน้า",
+"category_header" => "บทความในประเภท \"$1\"",
+"subcategories" => "ประเภทย่อย",
+
+"mainpage"		=> "หน้าหลัก",
+"mainpagetext"	=> "Wiki software  ถูกติดตั้งเรียบร้อยแล้ว",
+"about"			=> "เกี่ยวกับ",
+"aboutsite"      => "เกี่ยวกับ {{SITENAME}}",
+"aboutpage"		=> "{{ns:project}}:เกี่ยวกับ",
+"help"			=> "ความช่วยเหลือ",
+"helppage"		=> "{{ns:project}}:ความช่วยเหลือ",
+"bugreports"	=> "รายงาน bug",
+"bugreportspage" => "{{ns:project}}:รายงาน bug",
+"sitesupport"   => "การบริจาค",
+"faq"			=> "FAQ",
+"faqpage"		=> "{{ns:project}}:FAQ",
+"edithelp"		=> "ความช่วยเหลือในการแก้ไขหน้า",
+"edithelppage"	=> "{{ns:project}}:การแก้ไขหน้า",
+"cancel"		=> "ยกเลิก",
+"qbfind"		=> "ค้นหา",
+"qbbrowse"		=> "ค้น",
+"qbedit"		=> "แก้ไข",
+"qbpageoptions" => "หน้านี้",
+"qbpageinfo"	=> "บริบท",
+"qbmyoptions"	=> "หน้าของฉัน",
+"qbspecialpages"	=> "หน้าพิเศษ",
+"moredotdotdot"	=> "อื่น ๆ ...",
+"mypage"		=> "หน้าของฉัน",
+"mytalk"		=> "หน้าพูดคุยของฉัน",
+"currentevents" => "เหตุการณ์ปัจจุบัน",
+"errorpagetitle" => "ความผิดพลาด",
+"returnto"		=> "กลับไปยัง $1.",
+"tagline"      	=> "จาก {{SITENAME}}, สารานุกรมฟรี",
+"whatlinkshere"	=> "หน้าที่ลิงก์มายังที่นี่",
+"help"			=> "ความช่วยเหลือ",
+"search"		=> "ค้นหา",
+"searchbutton"	=> "ค้นหา",
+"go"		=> "ไป",
+'searcharticle'		=> "ไป",
+"history"		=> "ประวัติของหน้านี้",
+"printableversion" => "Printable version",
+"editthispage"	=> "แก้ไขหน้านี้",
+"deletethispage" => "ลบหน้านี้",
+"protectthispage" => "ป้องกันหน้านี้",
+"unprotectthispage" => "ยกเลิกการป้องกันหน้านี้",
+"newpage" => "หน้าใหม่",
+"talkpage"		=> "พูดคุยเกี่ยวกับหน้านี้",
+"postcomment"   => "Post a comment",
+"articlepage"	=> "View article",
+"userpage" => "View user page",
+"projectpage" => "View meta page",
+"imagepage" => 	"View image page",
+"viewtalkpage" => "View discussion",
+"otherlanguages" => "Other languages",
+"redirectedfrom" => "(Redirected from $1)",
+"lastmodifiedat"	=> "This page was last modified $2, $1.",
+"viewcount"		=> "This page has been accessed $1 times.",
+"protectedpage" => "Protected page",
+
+"nbytes"		=> "$1 ไบต์",
+"ok"			=> "OK",
+"retrievedfrom" => "Retrieved from \"$1\"",
+"newmessageslink" => "ข้อความ",
+"editsection"=>"แก้ไข",
+"editold"=>"แก้ไข",
+"toc" => "สารบัญ",
+"showtoc" => "แสดงสารบัญ",
+"hidetoc" => "ซ่อนสารบัญ",
+"thisisdeleted" => "แสดงหรือคืน $1?",
+"restorelink" => "$1 การแก้ไขที่ลบแล้ว",
+
+# Main script and global functions
+#
+"nosuchaction"	=> "ไม่มีการกระทำดังกล่าว",
+"nosuchactiontext" => "การกระทำที่บอกไว้ใน URL ไม่
+เป็นที่ยอมรับของ wiki",
+"nosuchspecialpage" => "ไม่มีหน้าพิเศษดังกล่าว",
+"nospecialpagetext" => "คุณได้ขอหน้าพิเศษที่ไม่
+เป็นที่ยอมรับของ wiki",
+
+# Login and logout pages
+#
+"loginpagetitle" => "ล็อกอินผู้ใช้",
+"yourname"		=> "ชื่อผู้ใช้",
+"yourpassword"	=> "รหัสผ่าน",
+"yourpasswordagain" => "พิมพ์รหัสผ่านอีกครั้ง",
+
+"login"			=> "ล็อกอิน",
+"loginprompt"           => "ต้อง enable cookie เพื่อล็อกอินสู่ {{SITENAME}} ได้",
+"userlogin"		=> "ล็อกอิน",
+"logout"		=> "ล็อกเอาท์",
+"userlogout"	=> "ล็อกเอาท์",
+"notloggedin"	=> "ไม่ได้ล็อกอินไว้",
+"createaccount"	=> "สร้าง account ใหม่",
+"createaccountmail"	=> "ผ่านอีเมล์",
+"badretype"		=> "รหัสผ่านที่พิมพ์ไว้ไม่เหมือนกัน",
+"userexists"	=> "ชื่อผู้ใช้ที่พิมพ์ไว้ถูกใช้แล้ว โปรดเลือกชื่ออื่น",
+"youremail"		=> "อีเมล์ของคุณ*",
+
+# Edit pages
+#
+"newarticletext" =>
+"คุณได้ตามลิงก์ที่นำไปยังหน้าที่ยังไม่ปรากฏอยู่
+เพื่อเริ่มสร้างหน้าใหม่ พิมพ์ลงในกล่องข้างล่างนี้
+(ดู[[{{ns:project}}:ความช่วยเหลือ|หน้าความช่วยเหลือ]]สำหรับข้อมูลเพิ่มเติม)
+If you are here by mistake, just click your browser's '''back''' button.",
+"noarticletext" => "(ไม่มีข้อความในหน้านี้)",
+"updated"		=> "(ได้รับการแก้ไขแล้ว)",
+
+# Preferences page
+'qbsettings-none'	=> 'ไม่มี',
+'qbsettings-fixedleft'	=> 'อยู่ทางซ้าย',
+'qbsettings-fixedright'	=> 'อยู่ทางขวา',
+'qbsettings-floatingleft'	=> 'ลอยทางซ้าย',
+
+);
+
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesTlh.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesTlh.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesTlh.php	(revision 1280)
@@ -0,0 +1,29 @@
+<?php
+/** Klingon (tlhIngan-Hol)
+  *
+  * @addtogroup Language
+  */
+
+$namespaceNames = array(
+	NS_MEDIA            => "Doch",
+	NS_SPECIAL          => "le'",
+	NS_MAIN             => "",
+	NS_TALK             => "ja'chuq",
+	NS_USER             => "lo'wI'",
+	NS_USER_TALK        => "lo'wI'_ja'chuq",
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK     => "$1_ja'chuq",
+	NS_IMAGE            => "nagh_beQ",
+	NS_IMAGE_TALK       => "nagh_beQ_ja'chuq",
+	NS_MEDIAWIKI        => "MediaWiki",
+	NS_MEDIAWIKI_TALK   => "MediaWiki_ja'chuq",
+	NS_TEMPLATE         => "chen'ay'",
+	NS_TEMPLATE_TALK    => "chen'ay'_ja'chuq",
+	NS_HELP             => "QaH",
+	NS_HELP_TALK        => "QaH_ja'chuq",
+	NS_CATEGORY         => "Segh",
+	NS_CATEGORY_TALK    => "Segh_ja'chuq"
+);
+
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesTr.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesTr.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesTr.php	(revision 1280)
@@ -0,0 +1,1162 @@
+<?php
+/**
+ * Turkish (Türkçe)
+ *
+ * @addtogroup Language
+ */	
+
+$namespaceNames = array(
+	NS_MEDIA            => 'Media',
+	NS_SPECIAL          => 'Özel',
+	NS_MAIN             => '',
+	NS_TALK             => 'Tartışma',
+	NS_USER             => 'Kullanıcı',
+	NS_USER_TALK        => 'Kullanıcı_mesaj',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK     => '$1_tartışma',
+	NS_IMAGE            => 'Resim',
+	NS_IMAGE_TALK       => 'Resim_tartışma',
+	NS_MEDIAWIKI        => 'MedyaViki',
+	NS_MEDIAWIKI_TALK   => 'MedyaViki_tartışma',
+	NS_TEMPLATE         => 'Şablon',
+	NS_TEMPLATE_TALK    => 'Şablon_tartışma',
+	NS_HELP             => 'Yardım',
+	NS_HELP_TALK        => 'Yardım_tartışma',
+	NS_CATEGORY         => 'Kategori',
+	NS_CATEGORY_TALK    => 'Kategori_tartışma',
+);
+
+$separatorTransformTable = array(',' => '.', '.' => ',' );
+
+
+$messages = array(
+'tog-underline'         => 'Bağlatıların altını çiz',
+'tog-highlightbroken'   => 'Boş bağlantıları <a href="" class="new">bu şekilde</a> (alternatif: bu şekilde<a href="" class="internal">?</a>) göster.',
+'tog-justify'           => 'Paragraf iki yana yaslayarak ayarla',
+'tog-hideminor'         => 'Küçük değişiklikleri "Son değişiklikler" sayfasında gizle',
+'tog-extendwatchlist'   => 'Gelişmiş izleme listesi',
+'tog-usenewrc'          => 'Gelişmiş son değişiklikler listesi (her tarayıcı için uygun değil)',
+'tog-numberheadings'    => 'Başlıkları otomatik numaralandır',
+'tog-showtoolbar'       => 'Değişiklik yaparken yardımcı düğmeleri göster. (JavaScript)',
+'tog-editondblclick'    => 'Sayfayı çift tıklayarak değiştirmeye başla (JavaScript)',
+'tog-editsection'       => 'Bölümleri [değiştir] bağlantıları ile değiştirme hakkı ver',
+'tog-editsectiononrightclick'=> 'Bölüm başlığına sağ tıklayarak bölümde değişikliğe izin ver.(JavaScript)',
+'tog-showtoc'           => 'İçindekiler tablosunu oluştur<br />(3 taneden fazla başlığı olan sayfalar için)',
+'tog-rememberpassword'  => 'Parolayı hatırla',
+'tog-editwidth'         => 'Yazma alanı tam genişlikte olsun',
+'tog-watchcreations'    => 'Yaratmış olduğum sayfaları izleme listeme ekle',
+'tog-watchdefault'      => 'Değişiklik yapılan sayfayı izleme listesine ekle',
+'tog-minordefault'      => 'Değişikliği \'küçük değişiklik\' olarak seçili getir',
+'tog-previewontop'      => 'Önizlemeyi yazma alanın üstünde göster',
+'tog-previewonfirst'    => 'Değiştirmede önizlemeyi göster',
+'tog-nocache'           => 'Sayfaları bellekleme',
+'tog-enotifwatchlistpages'=> 'Sayfa değişikliklerinde bana e-posta gönder',
+'tog-enotifusertalkpages'=> 'Kullanıcı sayfamda değişiklik olduğunda bana e-posta gönder',
+'tog-enotifminoredits'  => 'Sayfalardaki küçük değişikliklerde de bana e-posta gönder',
+'tog-shownumberswatching'=> 'İzleyen kullanıcı sayısını göster',
+'tog-fancysig'          => 'Ham imza (İmzanız yukarda belirttiğiniz gibi görünür. Sayfanıza otomatik bağlantı yaratılmaz)',
+'tog-externaleditor'    => 'Değişiklikleri başka editör programı ile yap',
+'tog-externaldiff'      => 'Karşılaştırmaları dış programa yaptır.',
+'tog-showjumplinks'     => '"Git" bağlantısı etkinleştir',
+'tog-uselivepreview'    => 'Canlı önizleme özelliğini kullan (JavaScript) (daha deneme aşamasında)',
+'tog-autopatrol'        => 'Yaptığım değişiklikleri kontrol edilmiş olarak işaretle',
+'tog-forceeditsummary'  => 'Özeti boş bıraktığımda beni uyar',
+'tog-watchlisthideown'  => 'İzleme listemden benim değişikliklerimi gizle',
+'tog-watchlisthidebots' => 'İzleme listemden bot değişikliklerini gizle',
+'underline-always'      => 'Daima',
+'underline-never'       => 'Asla',
+'underline-default'     => 'Tarayıcı karar versin',
+'skinpreview'           => '(Önizleme)',
+'sunday'                => 'Pazar',
+'monday'                => 'Pazartesi',
+'tuesday'               => 'Salı',
+'wednesday'             => 'Çarşamba',
+'thursday'              => 'Perşembe',
+'friday'                => 'Cuma',
+'saturday'              => 'Cumartesi',
+'january'               => 'Ocak',
+'february'              => 'Şubat',
+'march'                 => 'Mart',
+'april'                 => 'Nisan',
+'may_long'              => 'Mayıs',
+'june'                  => 'Haziran',
+'july'                  => 'Temmuz',
+'august'                => 'Ağustos',
+'september'             => 'Eylül',
+'october'               => 'Ekim',
+'november'              => 'Kasım',
+'december'              => 'Aralık',
+'jan'                   => 'Ocak',
+'feb'                   => 'Şubat',
+'mar'                   => 'Mart',
+'apr'                   => 'Nisan',
+'may'                   => 'Mayıs',
+'jun'                   => 'Haziran',
+'jul'                   => 'Temmuz',
+'aug'                   => 'Ağustos',
+'sep'                   => 'Eylül',
+'oct'                   => 'Ekim',
+'nov'                   => 'Kasım',
+'dec'                   => 'Aralık',
+'categories'            => 'Sayfa kategorileri',
+'pagecategories'        => 'Sayfa {{PLURAL:$1|kategorisi|kategorileri}}',
+'category_header'       => '"$1" kategorisindeki sayfalar',
+'subcategories'         => 'Alt Kategoriler',
+'mainpage'              => 'Ana Sayfa',
+'mainpagetext'          => '<big>\'\'\'MediaWiki başarı ile kuruldu.\'\'\'</big>',
+'portal'                => 'Topluluk portalı',
+'portal-url'            => 'Project:Topluluk portalı',
+'about'                 => 'Hakkında',
+'aboutsite'             => '{{SITENAME}} Hakkında',
+'aboutpage'             => 'Project:Hakkında',
+'article'               => 'Madde',
+'help'                  => 'Yardım',
+'helppage'              => 'Yardım:İçindekiler',
+'bugreports'            => 'Hata Raporları',
+'bugreportspage'        => 'Project:Hata raporları',
+'sitesupport'           => 'Bağışlar',
+'sitesupport-url'       => 'Project:Bağış',
+'faq'                   => 'SSS',
+'faqpage'               => 'Project:SSS',
+'edithelp'              => 'Nasıl değiştirilir?',
+'newwindow'             => '(yeni bir pencerede açılır)',
+'edithelppage'          => 'Yardım:Sayfa nasıl değiştirilir',
+'cancel'                => 'İptal',
+'qbfind'                => 'Bul',
+'qbbrowse'              => 'Tara',
+'qbedit'                => 'Değiştir',
+'qbpageoptions'         => 'Bu sayfa',
+'qbpageinfo'            => 'Bağlam',
+'qbmyoptions'           => 'Sayfalarım',
+'qbspecialpages'        => 'Özel sayfalar',
+'moredotdotdot'         => 'Daha...',
+'mypage'                => 'Sayfam',
+'mytalk'                => 'Mesaj Sayfam',
+'anontalk'              => 'Bu IP\'nin mesajları',
+'navigation'            => 'Sitede yol bulma',
+'metadata_help'         => 'Metadata (bunun açıklama için [[Project:Metadata]] bakınız):',
+'currentevents'         => 'Güncel olaylar',
+'currentevents-url'     => 'Güncel olaylar',
+'disclaimers'           => 'Feragatname',
+'disclaimerpage'        => 'Project:Genel_Bilgi_Paktı',
+'privacy'               => 'Gizlilik ilkesi',
+'privacypage'           => 'Project:Gizlilik_ilkesi',
+'errorpagetitle'        => 'Hata',
+'returnto'              => '$1.',
+'tagline'               => '{{SITENAME}}, özgür ansiklopedi',
+'search'                => 'Ara',
+'searchbutton'          => 'Ara',
+'go'                    => 'Git',
+'searcharticle'                    => 'Git',
+'history'               => 'Sayfanın geçmişi',
+'history_short'         => 'Geçmiş',
+'updatedmarker'         => 'son ziyaretimden sonra güncellenmiş',
+'printableversion'      => 'Basılmaya uygun görünüm',
+'permalink'             => 'Son haline bağlantı',
+'print'                 => 'Bastır',
+'edit'                  => 'Değiştir',
+'editthispage'          => 'Sayfayı değiştir',
+'delete'                => 'Sil',
+'deletethispage'        => 'Sayfayı sil',
+'undelete_short'        => '$1 değişikliği geri getir',
+'protect'               => 'Korumaya al',
+'protectthispage'       => 'Sayfayı koruma altına al',
+'unprotect'             => 'Korumayı kaldır',
+'unprotectthispage'     => 'Sayfa korumasını kaldır',
+'newpage'               => 'Yeni sayfa',
+'talkpage'              => 'Sayfayı tartış',
+'specialpage'           => 'Özel Sayfa',
+'personaltools'         => 'Kişisel aletler',
+'postcomment'           => 'Yorum ekle',
+'articlepage'           => 'Maddeye git',
+'talk'                  => 'Tartışma',
+'views'                 => 'Görünümler',
+'toolbox'               => 'Araçlar',
+'userpage'              => 'Kullanıcı sayfasını görüntüle',
+'projectpage'           => 'Proje sayfasına bak',
+'viewtalkpage'          => 'Tartışma sayfasına git',
+'otherlanguages'        => 'Diğer diller',
+'redirectedfrom'        => '($1 sayfasından yönlendirildi)',
+'autoredircomment'      => '[[$1]] sayfasına yönlendirildi',
+'redirectpagesub'       => 'Yönlendirme sayfası',
+'lastmodifiedat'          => 'Bu sayfa son olarak $2, $1 tarihinde güncellenmiştir.',
+'viewcount'             => 'Bu sayfaya $1 defa erişilmiş.',
+'copyright'             => 'İçerik $1 altındadır.',
+'protectedpage'         => 'Korumalı sayfa',
+'jumpto'                => 'Git ve:',
+'jumptonavigation'      => 'kullan',
+'jumptosearch'          => 'ara',
+'badaccess'             => 'İzin hatası',
+'versionrequired'       => 'MedyaViki\'nin $1 sürümü gerekiyor',
+'ok'                    => 'TAMAM',
+'retrievedfrom'         => '"$1"\'dan alındı',
+'youhavenewmessages'    => 'Yeni <u>$1</u> var. ($2)',
+'newmessageslink'       => 'mesajınız',
+'newmessagesdifflink'   => 'Bir önceki sürüme göre eklenen yazı farkı',
+'editsection'           => 'değiştir',
+'editold'               => 'değiştir',
+'editsectionhint'       => 'Değiştirilen bölüm: $1',
+'toc'                   => 'Konu başlıkları',
+'showtoc'               => 'göster',
+'hidetoc'               => 'gizle',
+'thisisdeleted'         => '$1 görmek veya geri getirmek istermisin?',
+'viewdeleted'           => '$1 gör?',
+'restorelink'           => 'silinmiş $1 değişikliği',
+'nstab-main'            => 'Madde',
+'nstab-user'            => 'kullanıcı sayfası',
+'nstab-media'           => 'Medya',
+'nstab-special'         => 'Özel',
+'nstab-project'         => 'Proje sayfası',
+'nstab-image'           => 'Dosya',
+'nstab-mediawiki'       => 'arayüz metni',
+'nstab-template'        => 'şablon',
+'nstab-help'            => 'yardım',
+'nstab-category'        => 'Kategori',
+'nosuchspecialpage'     => 'Bu isimde bir özel sayfa yok',
+'nospecialpagetext'     => 'Bulunmayan bir özel sayfaya girdiniz. Varolan tüm özel sayfaları [[Special:Specialpages]] sayfasında görebilirsiniz.',
+'error'                 => 'Hata',
+'databaseerror'         => 'Veritabanı hatası',
+'dberrortext'           => 'Veritabanı hatası.
+Bu bir yazılım hatası olabilir.
+"<tt>$2</tt>" işlevinden denenen son sorgulama:
+<blockquote><tt>$1</tt></blockquote>.
+
+MySQL\'in rapor ettiği hata "<tt>$3: $4</tt>".',
+'cachederror'           => 'Aşağıdaki, istediğiniz sayfanın önbellekteki kopyasıdır ve güncel olmayabilir.',
+'readonly'              => 'Veritabanı kilitlendi',
+'readonlytext'          => 'Veritabanı olağan bakım/onarım çalışmaları sebebiyle, geçici olarak giriş ve değişiklik yapmaya kapatılmıştır. Kısa süre sonra normale dönecektir.
+
+Veritabanını kilitleyen operatörün açıklaması: $1',
+'internalerror'         => 'Yazılım hatası',
+'unexpected'            => 'beklenmeyen değer: "$1"="$2".',
+'badarticleerror'       => 'Yapmak istediğiniz işlem geçersizdir.',
+'cannotdelete'          => 'Belirtilen sayfa ya da görüntü silinemedi. (başka bir kullanıcı tarafından silinmiş olabilir).',
+'badtitle'              => 'Geçersiz başlık',
+'perfdisabled'          => 'Özür dileriz! Bu özellik, veritabanını kullanılamayacak derecede yavaşlattığı için, geçici olarak kullanımdan çıkarıldı.',
+'perfcached'            => 'Veriler daha önceden hazırlanmış olabilir. Bu sebeple güncel olmayabilir!',
+'perfcachedts'          => 'Aşağıda saklanmış bilgiler bulunmaktadır, son güncelleme zamanı: $1.',
+'viewsource'            => 'Kaynağı gör',
+'viewsourcefor'         => '$1 için',
+'protectedtext'         => 'Bu sayfa değiştirilmemesi için \'\'\'koruma altına alınmıştır\'\'\' ya da yalnız kayıtlı kullanıcılar tarafından değiştirilebilir. Bunun bir çok değişik sebebi olabilir. [[Project:Koruma altına alınmış sayfa|Koruma altına alınma sebepleri]] ile ilgili sayfaya gözatınız. Bunun nedenini [[{{TALKPAGENAME}}|sayfasında tartışabilirsiniz]].
+
+Bu sayfanın kaynak koduna bakıp kopyalayabilirsiniz:',
+'editinginterface'      => '<div style="background: #FFBDBD; border: 1px solid #BB7979; color: #000000; font-weight: bold; margin: 2em 0 1em; padding: .5em 1em; vertical-align: middle; clear: both;">UYARI: Yazılım için arayüz sağlamakta kullanılan bir sayfayı değiştirmektesiniz. Bu sayfadaki değişiklikler kullanıcı arayüzünü diğer kullanıcılar için de değiştirecektir.</div>',
+'logouttitle'           => 'Oturumu kapat',
+'logouttext'            => 'Oturumu kapattınız.
+Şimdi kimliğinizi belirtmeksizin {{SITENAME}} sitesini kullanmaya devam edebilirsiniz, ya da yeniden oturum açabilirsiniz (ister aynı kullanıcı adıyla, ister başka bir kullanıcı adıyla). Web tarayıcınızın önbelleğini temizleyene kadar bazı sayfalar sanki hala oturumunuz açıkmış gibi görünebilir.',
+'welcomecreation'       => '== Hoşgeldiniz, $1! ==
+
+Hesabınız yaratıldı. {{SITENAME}} tercihlerinizi değiştirmeyi unutmayın.',
+'loginpagetitle'        => 'Oturum aç',
+'yourname'              => 'Kullanıcı adınız',
+'yourpassword'          => 'Parolanız',
+'yourpasswordagain'     => 'Parolayı yeniden yaz',
+'remembermypassword'    => 'Parolayı hatırla.',
+'yourdomainname'        => 'Alan adınız',
+'alreadyloggedin'       => '<span style="color:#ff0000"><b>$1 rumuzlu kullanıcı, halen açık bir oturum var!</b></span><br />',
+'login'                 => 'Oturum aç',
+'loginprompt'           => 'Dikkat: {{SITENAME}} sitesinde oturum açabilmek için tarayıcınızda çerezlerin (cookies) aktifleştirilmiş olması gerekmektedir.<br />
+Kullanıcı adınız Türkçe karakter, boşluk \'\'\'içerebilir\'\'\'. Kullanıcı adınıza e-posta adresi \'\'\'girmemeniz\'\'\' tavsiye edilir.',
+'userlogin'             => 'Oturum aç ya da yeni hesap edin',
+'logout'                => 'Oturumu kapat',
+'userlogout'            => 'Oturumu kapat',
+'notloggedin'           => 'Oturum açık değil',
+'nologin'               => 'Daha üye değil misiniz? $1.',
+'nologinlink'           => 'Eğer şimdiye kadar kayıt olmadıysanız bu bağlantıyı takip edin.',
+'createaccount'         => 'Yeni hesap aç',
+'gotaccount'            => 'Daha önceden kayıt oldunuz mu? $1.',
+'gotaccountlink'        => 'Eğer önceden hesap açtırdıysanız bu bağlantıdan giriş yapınız.',
+'createaccountmail'     => 'e-posta ile',
+'badretype'             => 'Girdiğiniz parolalar birbirini tutmuyor.',
+'userexists'            => 'Girdiğiniz kullanıcı adı kullanımda. Lütfen farklı bir kullanıcı adı seçin.',
+'youremail'             => 'E-posta adresiniz*',
+'username'              => 'Kullanıcı adı:',
+'uid'                   => 'Kayıt numarası:',
+'yourrealname'          => 'Gerçek isminiz*',
+'yourlanguage'          => 'Arayüz dili',
+'yourvariant'           => 'Sizce',
+'yournick'              => 'İmzalarda gözükmesini istediğiniz isim',
+'email'                 => 'E-posta',
+'prefs-help-realname'   => '* Gerçek isim (isteğe bağlı): eğer gerçek isminizi vermeyi seçerseniz, çalışmanızı size atfederken kullanılacaktır.',
+'loginerror'            => 'Oturum açma hatası.',
+'prefs-help-email'      => '* E-posta (isteğe bağlı): Diğer kullanıcıların kullanıcı sayfanız aracılığıyla <strong>adresinizi bilmeksizin</strong> sizle iletişim kurmasını sağlar.',
+'nocookieslogin'        => '{{SITENAME}} sitesinde oturum açabilmek için çerezlerinizin açık olması gerekiyor. Sizin çerezleriniz kapalı. Lütfen açınız ve bir daha deneyiniz.',
+'loginsuccesstitle'     => 'Oturum açıldı',
+'loginsuccess'          => '{{SITENAME}} sitesinde "$1" kullanıcı adıyla oturum açmış bulunmaktasınız.',
+'wrongpassword'         => 'Parolayı yanlış girdiniz. Lütfen tekrar deneyiniz.',
+'wrongpasswordempty'    => 'Boş parola girdiniz. Lütfen tekrar deneyiniz.',
+'mailmypassword'        => 'Bana e-posta ile yeni bir parola gönder',
+'passwordremindertitle' => '{{SITENAME}} sitesinden şifre hatırlatıcısı.',
+'passwordremindertext'  => '$1 IP adresinden (muhtemelen siz) {{SERVERNAME}} için yeni bir {{SITENAME}} ($4) parolası gönderilmesi istendi.
+"$2" rumuzlu kullanıcının yeni parolası: "$3"
+Oturum açıp parolanızı değiştirmelisiniz.
+
+Parola değişimini siz istemediyseniz, ya da parolanızı hatırlayıp değiştirmekten vazgeçtiyseniz bu iletiyi görmezden gelip eski parolanızı kullanmaya devam edebilirsiniz.',
+'noemail'               => '"$1" adlı kullanıcıya kayıtlı bir e-posta adresi yok.',
+'passwordsent'          => '"$1" adına kayıtlı e-posta adresine yeni bir parola gönderildi. Oturumu, lütfen, iletiyi aldıktan sonra açın.',
+'eauthentsent'          => 'Kaydedilen adrese onay kodu içeren bir e-posta gönderildi.
+E-postadaki yönerge uygulanıp adresin size ait olduğu onaylanmadıkça başka e-posta gönderilmeyecek.',
+'mailerror'             => 'E-posta gönderim hatası: $1',
+'acct_creation_throttle_hit'=> '$1 tane kullanıcı hesabı açtırmış durumdasınız. Daha fazla açtıramazsınız.',
+'emailauthenticated'    => 'E-posta adresiniz $1 tarihinde doğrulanmıştı.',
+'emailnotauthenticated' => 'E-posta adresiniz henüz onaylanmadı.
+Aşağıdaki işlevlerin hiçbiri için e-posta gönderilmeyecektir.',
+'emailconfirmlink'      => 'E-posta adresinizi doğrulayın',
+'invalidemailaddress'   => 'E-posta adresi geçersizdir. Lütfen geçerli bir adres yazın ya da metin kutusunun içeriğini silin.',
+'accountcreated'        => 'Hesap açıldı',
+'accountcreatedtext'    => '$1 için bir kullanıcı hesabı açıldı.',
+'bold_sample'           => 'Kalın yazı',
+'bold_tip'              => 'Kalın yazı',
+'italic_sample'         => 'İtalik yazı',
+'italic_tip'            => 'İtalik yazı',
+'link_sample'           => 'Sayfanın başlığı',
+'link_tip'              => 'İç bağlantı',
+'extlink_sample'        => '{{SERVER}} adres açıklaması',
+'extlink_tip'           => 'Dış bağlantı (Adresin önüne http:// koymayı unutmayın)',
+'headline_sample'       => 'Başlık yazısı',
+'headline_tip'          => '2. seviye başlık',
+'math_sample'           => 'Matematiksel-ifadeyi-girin',
+'math_tip'              => 'Matematik formülü (LaTeX formatında)',
+'nowiki_sample'         => 'Serbest format yazınızı buraya yazınız',
+'nowiki_tip'            => 'wiki formatlamasını devre dışı bırak',
+'image_sample'          => 'Örnek.jpg',
+'image_tip'             => 'Resim ekleme',
+'media_sample'          => 'Örnek.ogg',
+'media_tip'             => 'Medya dosyasına bağlantı',
+'sig_tip'               => 'İmzanız ve tarih',
+'hr_tip'                => 'Yatay çizgi (çok sık kullanmayın)',
+'summary'               => 'Özet',
+'subject'               => 'Konu/başlık',
+'minoredit'             => 'Küçük değişiklik',
+'watchthis'             => 'Sayfayı izle',
+'savearticle'           => 'Sayfayı kaydet',
+'preview'               => 'Önizleme',
+'showpreview'           => 'Önizlemeyi göster',
+'showlivepreview'       => 'Canlı önizleme',
+'showdiff'              => 'Değişiklikleri göster',
+'anoneditwarning'       => 'Oturum açmadığınızdan maddenin değişiklik kayıtlarına rumuzunuz yerine IP adresiniz kaydedilecektir.',
+'missingsummary'        => '\'\'\'Uyarı:\'\'\' Herhangi bir özet yazmadın. Kaydet tuşu bir daha bastığında sayfayı özetsiz kaydetilecek.',
+'missingcommenttext'    => 'Lütfen aşağıda bir açıklama yazınız.',
+'blockedtitle'          => 'Kullanıcı erişimi engellendi.',
+'blockedtext'           => 'Erişiminiz $1 tarafından durdurulmuştur.
+Sebep:<br />\'\'$2\'\'<br />$1 ya da başka bir [[Project:Yöneticiler|yönetici]] ile bu durumu görüşebilirsiniz.
+
+Eğer [[Special:Preferences|tercihler]] kısmında geçerli bir e-posta adresi girmediyseniz "Kullanıcıya e-posta gönder" özelliğini kullanamazsınız.
+
+Sizin IP adresiniz $3. Lütfen sorgu yaparken bu adresi kullanınız.',
+'whitelistedittitle'    => 'Değişiklik yapmak için oturum açmalısınız',
+'whitelistedittext'     => 'Değişiklik yapabilmek için $1.',
+'whitelistreadtitle'    => 'Okumak için oturum açmalısınız',
+'whitelistreadtext'     => 'Sayfaları okuyabilmek için [[Special:Userlogin|oturum açmalısınız]].',
+'whitelistacctitle'     => 'Hesap açma izniniz yok.',
+'confirmedittitle'      => 'Değişiklik yapmak için e-posta onaylaması gerekiyor',
+'confirmedittext'       => 'Sayfa değiştirmeden önce e-posta adresinizi onaylamalısınız. Lütfen [[Special:Preferences|tercihler]] kısmından e-postanızı ekleyin ve onaylayın.',
+'loginreqtitle'         => 'Oturum açmanız gerekiyor',
+'loginreqlink'          => 'oturum aç',
+'accmailtitle'          => 'Parola gönderildi.',
+'accmailtext'           => '\'$1\' kullanıcısına ait parola $2 adresine gönderildi.',
+'newarticle'            => '(Yeni)',
+'newarticletext'        => 'Henüz varolmayan bir sayfaya konulmuş bir bağlantıya tıkladınız. Bu sayfayı yaratmak için aşağıdaki metin kutusunu kullanınız. Bilgi için [[Help:İçindekiler|yardım sayfasına]] bakınız. Buraya yanlışlıkla geldiyseniz, programınızın \'\'\'Geri\'\'\' tuşuna tıklayınız.',
+'anontalkpagetext'      => '<hr style="clear: both;" />
+\'\'Bu kayıtlı olmayan ya da sisteme girmeyip anonim kalmış bir kullanıcının mesaj sayfasıdır. Bu sebeple IP adresi ile gösterilmektedir. Bu tür IP adresleri diğer insanlar tarafından da kullanılabilir. Eğer siz de bir anonim kullanıcı iseniz ve yöneltilen yorumlar sizle ilgili değilse [[Special:Userlogin|kayıt olun ya da sisteme girin ki]] ileride başka yanlış anlaşılma olmasın.\'\'<br /><nowiki>[</nowiki><small>[[Yerel internet kayıtçıları|RIR]] [[WHOIS]] bakış: [http://ws.arin.net/whois/?queryinput={{PAGENAMEE}} Amerika] [http://www.ripe.net/fcgi-bin/whois?searchtext={{PAGENAMEE}} Avrupa] [http://www.afrinic.net/cgi-bin/whois?query={{PAGENAMEE}} Afrika] [http://www.apnic.net/apnic-bin/whois.pl?searchtext={{PAGENAMEE}} Asya-Pasifik] [http://www.lacnic.net/cgi-bin/lacnic/whois?lg=EN&query={{PAGENAMEE}} Latin Amerika/Karayip]</small><nowiki>]</nowiki>',
+'noarticletext'         => 'Bu sayfa boştur. Bu başlığı diğer sayfalarda [[Special:Search/{{PAGENAME}}|arayabilir]] veya bu sayfayı siz  [{{fullurl:{{FULLPAGENAME}}|action=edit}} yazabilirsiniz].',
+'clearyourcache'        => '\'\'\'Not:\'\'\' Ayarlarınızı kaydettikten sonra, tarayıcınızın belleğini de temizlemeniz gerekmektedir: \'\'\'Mozilla / Firefox / Safari:\'\'\' \'\'Shift\'\' e basılıyken safyayı yeniden yükleyerek veya \'\'Ctrl-Shift-R\'\' yaparak (Apple Mac için \'\'Cmd-Shift-R\'\');, \'\'\'IE:\'\'\' \'\'Ctrl-F5\'\', \'\'\'Konqueror:\'\'\' Sadece sayfayı yeniden yükle tuşuna basarak.',
+'usercssjsyoucanpreview'=> '<strong>İpucu:</strong> Sayfayı kaydetmeden önce <font style="border: 1px solid #0; background: #EEEEEE; padding : 2px">\'\'\'önizlemeyi göster\'\'\'</font>\'e tıklayarak yaptığınız yeni sayfayı gözden geçirin.',
+'usercsspreview'        => '\'\'\'Sadece test ediyorsun ya da önizleme görüyorsun - kullanıcı CSS dosyası henüz kaydolmadı.\'\'\'',
+'userjspreview'         => '\'\'\'Sadece test ediyorsun ya da önizleme görüyorsun - kullanıcı JavaScript\'i henüz kaydolmadı.\'\'\'',
+'userinvalidcssjstitle' => '\'\'Uyarı:\'\'\' "$1" adıyla bir tema yoktur. tema-adı.css ve .js dosyalarının adları küçük harf ile yazması gerek, yani User:Temel/\'\'\'M\'\'\'onobook.css değil, User:Temel/\'\'\'m\'\'\'onobook.css.',
+'updated'               => '(Güncellendi)',
+'note'                  => '<strong>Not: </strong>',
+'previewnote'           => 'Bu yalnızca bir önizlemedir, ve değişiklikleriniz henüz kaydedilmemiştir!',
+'session_fail_preview'  => 'Özür dileriz. Oturum açılması ile ilgili veri kaybından kaynaklı değişikliğinizi kaydedemedik. Lütfen tekrar deneyiniz. Eğer bu yöntem işe yaramazsa oturumu kapatıp tekrar sisteme geri giriş yapınız.',
+'editing'               => '"$1" sayfasını değiştirmektesiniz',
+'editinguser'               => '"$1" sayfasını değiştirmektesiniz',
+'editingsection'        => '"$1" sayfasında bölüm değiştirmektesiniz',
+'editingcomment'        => '$1 sayfasına mesaj eklemektesiniz.',
+'editconflict'          => 'Değişiklik çakışması: $1',
+'explainconflict'       => 'Siz sayfayı değiştirirken başka biri de değişiklik yaptı.
+Yukarıdaki yazı sayfanın şu anki halini göstermektedir.
+Sizin değişiklikleriniz alta gösterilmiştir. Son değişiklerinizi yazının içine eklemeniz gerekecektir. "Sayfayı kaydet"e bastığınızda <b>sadece</b> yukarıdaki yazı kaydedilecektir. <br />',
+'yourtext'              => 'Sizin metniniz',
+'storedversion'         => 'Kaydedilmiş metin',
+'editingold'            => '<strong>DİKKAT: Sayfanın eski bir sürümünde değişiklik yapmaktasınız. 
+Kaydettiğinizde bu tarihli sürümden günümüze kadar olan değişiklikler yok olacaktır.</strong>',
+'yourdiff'              => 'Karşılaştırma',
+'copyrightwarning'      => '<strong>Lütfen dikkat:</strong> {{SITENAME}} sitesine yapılan bütün katkılar <i>$2</i>
+sözleşmesi kapsamındadır (ayrıntılar için $1\'a bakınız).
+Yaptığınız katkının başka katılımcılarca acımasızca değiştirilmesini ya da özgürce ve sınırsızca başka yerlere dağıtılmasını istemiyorsanız, katkıda bulunmayınız.<br />
+Ayrıca, buraya katkıda bulunarak, bu katkının kendiniz tarafından yazıldığına, ya da kamuya açık bir kaynaktan ya da başka bir özgür kaynaktan kopyalandığına güvence vermiş oluyorsunuz.<br />
+<strong><center>TELİF HAKKI İLE KORUNAN HİÇBİR ÇALIŞMAYI BURAYA EKLEMEYİNİZ!</center></strong>',
+'longpagewarning'       => '<strong>UYARI: Bu sayfa $1 kilobayt büyüklüğündedir; bazı tarayıcılar değişiklik yaparken 32kb ve üstü büyüklüklerde sorunlar yaşayabilir. Sayfayı bölümlere ayırmaya çalışın.</strong>',
+'readonlywarning'       => '<strong>DİKKAT: Bakım nedeni ile veritabanı şu anda kilitlidir. Bu sebeple değişiklikleriniz şu anda kaydedilememektedir. Yazdıklarınızı başka bir editöre alıp saklayabilir ve daha sonra tekrar buraya getirip kaydedebilirsiniz</strong>',
+'protectedpagewarning'  => 'UYARI: Bu sayfa koruma altına alınmıştır ve yalnızca yönetici olanlar tarafından değiştirilebilir. Bu sayfayı değiştirirken lütfen [[Project:Koruma altına alınmış sayfa|korumalı sayfa kurallarını]] uygulayınız.',
+'semiprotectedpagewarning'=> '\'\'\'Uyarı\'\'\': Bu sayfa sadece kayıtlı kullanıcı olanlar tarafından değiştirilebilir.',
+'templatesused'         => 'Bu sayfada kullanılan şablonlar:',
+'revhistory'            => 'Sürüm geçmişi',
+'nohistory'             => 'Bu sayfanın geçmiş sürümü yok.',
+'revnotfound'           => 'Sürüm bulunmadı',
+'loadhist'              => 'Sayfa geçmişi yükleniyor',
+'currentrev'            => 'Güncel sürüm',
+'revisionasof'          => 'Sayfanın $1 tarihindeki hali',
+'previousrevision'      => '← Önceki hali',
+'nextrevision'          => 'Sonraki hali →',
+'currentrevisionlink'   => 'en güncel halini göster',
+'cur'                   => 'fark',
+'next'                  => 'sonraki',
+'last'                  => 'son',
+'orig'                  => 'asıl',
+'histlegend'            => '(fark)  = güncel sürümle aradaki fark,
+(son)  = önceki sürümle aradaki fark, K= küçük değişiklik',
+'deletedrev'            => '[silindi]',
+'histfirst'             => 'En eski',
+'histlast'              => 'En yeni',
+'rev-deleted-comment'   => '(yorum silindi)',
+'rev-deleted-user'      => '(kullanıcı adı silindi)',
+'rev-delundel'          => 'göster/gizle',
+'revisiondelete'        => 'Sürümleri sil/geri getir',
+'revdelete-hide-comment'=> 'Özeti gösterme',
+'revdelete-hide-user'   => 'Değişikliği yapan kullanıcı adını/IP\'i gizle',
+'revdelete-hide-restricted'=> 'Bu kısıtlamaları yöneticilere ve kullanıcılara uygula',
+'revdelete-submit'      => 'Seçilen sürüme uygula',
+'difference'            => '(Sürümler arası farklar)',
+'lineno'                => '$1. satır:',
+'editcurrent'           => 'Sayfanın şu anki sürümünü değiştir',
+'compareselectedversions'=> 'Seçilen sürümleri karşılaştır',
+'searchresults'         => 'Arama sonuçları',
+'searchresulttext'      => '{{SITENAME}} içinde arama yapmak konusunda bilgi almak için [[Project:Arama|"{{SITENAME}} içinde arama"]] sayfasına bakabilirsiniz.',
+'searchsubtitle'        => 'Aranan: "[[:$1]]" [[Special:Allpages/$1|&#x5B;Indeks&#x5D;]]',
+'noexactmatch'          => '<span style="font-size: 135%; font-weight: bold; margin-left: .6em">Başlığı bu olan bir madde bulunamadı.</span> <span style="display: block; margin: 1.5em 2em"> Bu maddenin yazılmasını [[:$1|\'\'\'siz başlatabilirsiniz\'\'\']], ya da bu maddenin yazılması isteğini [[Project:Madde istekleri|istenen maddeler listesine]] ekleyebilirsiniz. <span style="display:block; font-size: 89%; margin-left:.2em">Yeni bir madde yaratmadan önce lütfen site içinde deatylı arama yapınız. İstediğiniz madde başka bir adla zaten var olabilir.</span> </span>',
+'titlematches'          => 'Madde adı eşleşiyor',
+'notitlematches'        => 'Hiçbir başlıkta bulunamadı',
+'textmatches'           => 'Sayfa metni eşleşiyor',
+'notextmatches'         => 'Hiçbir sayfada bulunamadı',
+'prevn'                 => 'önceki $1',
+'nextn'                 => 'sonraki $1',
+'viewprevnext'          => '($1) ($2) ($3).',
+'showingresults'        => '<b>$2.</b> sonuçtan başlayarak <b>$1</b> sonuç aşağıdadır:',
+'showingresultsnum'     => '<b>$2.</b> sonuçtan başlayarak <b>$3</b> sonuç aşağıdadır:',
+'powersearch'           => 'Ara',
+'powersearchtext'       => 'Arama yapılacak alanları seçin :<br />
+$1<br />
+$2 yönlendirmeleri listele &nbsp; Aranacak: $3 $9',
+'searchdisabled'        => '{{SITENAME}} sitesinde arama yapma geçici olarak durdurulmuştur. Bu arada Google kullanarak {{SITENAME}} içinde arama yapabilirsiniz. Arama sitelerinde indekslemelerinin biraz eski kalmış olabileceğini göz önünde bulundurunuz.',
+'blanknamespace'        => '(Ana)',
+'preferences'           => 'Tercihler',
+'prefsnologin'          => 'Oturum açık değil',
+'qbsettings'            => 'Hızlı erişim sütun ayarları',
+'changepassword'        => 'Parola değiştir',
+'skin'                  => 'Tema',
+'math'                  => 'Matematiksel semboller',
+'dateformat'            => 'Tarih gösterimi',
+'datedefault'           => 'Tercih yok',
+'datetime'              => 'Tarih ve saat',
+'math_unknown_error'    => 'bilinmeyen hata',
+'prefs-personal'        => 'Kullanıcı bilgileri',
+'prefs-rc'              => 'Son değişiklikler',
+'prefs-watchlist'       => 'İzleme listesi',
+'prefs-watchlist-days'  => 'İzleme listesinde görüntülenecek gün sayısı:',
+'prefs-watchlist-edits' => 'Genişletilmiş izleme listesinde gösterilecek değişiklik sayısı:',
+'prefs-misc'            => 'Diğer ayarlar',
+'saveprefs'             => 'Değişiklikleri kaydet',
+'resetprefs'            => 'Ayarları ilk durumuna getir',
+'oldpassword'           => 'Eski parola',
+'newpassword'           => 'Yeni parola',
+'retypenew'             => 'Yeni parolayı tekrar girin',
+'textboxsize'           => 'Sayfa yazma alanı',
+'rows'                  => 'Satır',
+'columns'               => 'Sütun',
+'searchresultshead'     => 'Arama',
+'resultsperpage'        => 'Sayfada gösterilecek bulunan madde sayısı',
+'contextlines'          => 'Bulunan madde için ayrılan satır sayısı',
+'contextchars'          => 'Satırdaki karakter sayısı',
+'stubthreshold'         => 'Taslak olarak sınıflandırılabilmek için alt sınır',
+'recentchangescount'    => 'Son değişiklikler sayfasındaki madde sayısı',
+'savedprefs'            => 'Ayarlar kaydedildi.',
+'timezonelegend'        => 'Saat dilimi',
+'timezonetext'          => 'Viki sunucusu (UTC/GMT) ile aranızdaki saat farkı. (Türkiye için +02:00)',
+'localtime'             => 'Şu an sizin saatiniz',
+'timezoneoffset'        => 'Saat farkı',
+'servertime'            => 'Viki sunucusunda şu anki saat',
+'guesstimezone'         => 'Tarayıcınız sizin yerinize doldursun',
+'allowemail'            => 'Diğer kullanıcılar size e-posta atabilsin',
+'defaultns'             => 'Aramayı aşağıdaki seçili alanlarda yap.',
+'default'               => 'orijinal',
+'files'                 => 'Dosyalar',
+'userrights-lookup-user'=> 'Kullanıcı gruplarını yönet',
+'userrights-user-editname'=> 'Kullanıcı adı giriniz:',
+'editusergroup'         => 'Kullanıcı grupları düzenle',
+'userrights-editusergroup'=> 'Kullanıcı grupları düzenle',
+'group'                 => 'Grup:',
+'group-bot'             => 'Botlar',
+'group-sysop'           => 'Yöneticiler',
+'group-bureaucrat'      => 'Bürokratlar',
+'group-all'             => '(hepsi)',
+'group-sysop-member'    => 'Yönetici',
+'group-bureaucrat-member'=> 'Bürokrat',
+'grouppage-bot'         => 'Project:Botlar',
+'grouppage-sysop'       => 'Project:Yöneticiler',
+'grouppage-bureaucrat'  => 'Project:Yöneticiler#Bürokratlar',
+'changes'               => 'değişiklik',
+'recentchanges'         => 'Son değişiklikler',
+'recentchangestext'     => 'Yapılan en son değişiklikleri bu sayfadan izleyin.',
+'rcnote'                => '$3 (UTC) tarihinde son <strong>$2</strong> günde yapılan <strong>$1</strong> değişiklik:',
+'rcnotefrom'            => '<b>$2</b> tarihinden itibaren yapılan değişiklikler aşağıdadır (en fazla <b>$1</b> adet madde gösterilmektedir).',
+'rclistfrom'            => '$1 tarihinden beri yapılan değişiklikleri göster',
+'rcshowhideminor'       => 'küçük değişiklikleri $1',
+'rcshowhidebots'        => 'botları $1',
+'rcshowhideliu'         => 'kayıtlı kullanıcıları $1',
+'rcshowhideanons'       => 'anonim kullanıcıları $1',
+'rcshowhidepatr'        => 'izlenmiş değişiklikleri $1',
+'rcshowhidemine'        => 'değişikliklerimi $1',
+'rclinks'               => 'Son $2 günde yapılan son $1 değişikliği göster;<br /> $3',
+'diff'                  => 'fark',
+'hist'                  => 'geçmiş',
+'hide'                  => 'gizle',
+'show'                  => 'göster',
+'minoreditletter'       => 'K',
+'newpageletter'         => 'Y',
+'upload'                => 'Dosya yükle',
+'uploadbtn'             => 'Dosya yükle',
+'reupload'              => 'Yeniden yükle',
+'reuploaddesc'          => 'Yükleme formuna geri dön.',
+'uploadnologin'         => 'Oturum açık değil',
+'uploadnologintext'     => 'Dosya yükleyebilmek için [[Special:Userlogin|oturum aç]]manız gerekiyor.',
+'uploaderror'           => 'Yükleme hatası',
+'uploadtext'            => 'Dosya yüklemek için aşağıdaki formu kullanın,
+Önceden yüklenmiş resimleri görmek için  [[Special:Imagelist|resim listesine]] bakın,
+yüklenenler ve silinmişler [[Special:Log/upload|yükleme kaydı sayfasında da]] görülebilir.
+
+Sayfaya resim koymak için;
+*\'\'\'<nowiki>[[</nowiki>{{ns:Image}}<nowiki>:Örnek.jpg]]</nowiki>\'\'\'
+*\'\'\'<nowiki>[[</nowiki>{{ns:Image}}<nowiki>:Örnek.png|açıklama]]</nowiki>\'\'\'
+veya doğrudan bağlantı için
+*\'\'\'<nowiki>[[</nowiki>{{ns:Media}}<nowiki>:Örnek.ogg]]</nowiki>\'\'\'',
+'uploadlog'             => 'yükleme kaydı',
+'uploadlogpage'         => 'Dosya yükleme kayıtları',
+'uploadlogpagetext'     => 'Aşağıda en son eklenen dosyaların bir listesi bulunmaktadır.',
+'filename'              => 'Dosya',
+'filedesc'              => 'Dosya ile ilgili açıklama',
+'fileuploadsummary'     => 'Açıklama:',
+'filestatus'            => 'Telif hakkı durumu',
+'filesource'            => 'Kaynak',
+'copyrightpage'         => 'Project:Telif hakları',
+'copyrightpagename'     => '{{SITENAME}} telif hakları',
+'uploadedfiles'         => 'Yüklenen dosyalar',
+'ignorewarning'         => 'Uyarıyı önemsemeyip dosyayı yükle',
+'ignorewarnings'        => 'Uyarıyı önemseme',
+'badfilename'           => 'Görüntü dosyasının ismi "$1" olarak değiştirildi.',
+'badfiletype'           => '".$1" önerilen bir görüntü formatı değildir.',
+'largefile'             => 'Resimlerin boyutlarının $1 baytı geçmemesi gerekiyor, bu dosya $2 bayt uzunluğunda',
+'largefileserver'       => 'Bu dosyanın uzunluğu sunucuda izin verilenden daha büyüktür.',
+'fileexists'            => 'Bu isimde bir dosya mevcut. Eğer değiştirmekten emin değilseniz ilk önce $1 dosyasına bir gözatın.',
+'successfulupload'      => 'Yükleme başarılı',
+'fileuploaded'          => '$1 dosyası başarı ile yüklendi.
+
+Lütfen $2 bağlantısını takip ederek dosya ile ilgili açıklama yazısı yazınız. Dosya nerden geldi, kim tarafından ne zaman oluşturuldu ya da hakında bildiğiniz diğer bilgiler gibi.
+
+Eğer bu bir resim ise <tt><nowiki>[[{{ns:Image}}:$1|thumb|açıklama]]</nowiki></tt> şeklinde sayfaya yerleştirebilirsiniz. (açıklama yerine resim ile ilgili yazı yazınız)',
+'uploadwarning'         => 'Yükleme uyarısı',
+'savefile'              => 'Dosyayı kaydet',
+'uploadedimage'         => 'Yüklenen: "[[$1]]"',
+'uploaddisabled'        => 'Geçici olarak şu anda herhangi bir dosya yüklenmez. Biraz sonra bir daha deneyiniz.',
+'uploaddisabledtext'    => 'Bu wikide dosya yükleme özelliği iptal edilmiştir.',
+'uploadvirus'           => 'Bu dosya virüslüdür! Detayları: $1',
+'sourcefilename'        => 'Yüklemek istediğiniz dosya',
+'destfilename'          => '{{SITENAME}} sitesindeki dosya adı',
+'imagelist'             => 'Resim listesi',
+'ilsubmit'              => 'Ara',
+'showlast'              => 'En son $1 dosyayı $2 göster.',
+'byname'                => 'alfabetik sırayla',
+'bydate'                => 'kronolojik sırayla',
+'bysize'                => 'boyut sırasıyla',
+'imgdelete'             => 'sil',
+'imgdesc'               => 'tanım',
+'imglegend'             => 'Gösterim: (tanım) = Dosyanın açıklamasını göster ya da değiştir.',
+'imghistory'            => 'Dosya geçmişi',
+'deleteimg'             => 'sil',
+'deleteimgcompletely'   => 'Dosyayı tamamen silin',
+'imagelinks'            => 'Kullanıldığı sayfalar',
+'linkstoimage'          => 'Bu görüntü dosyasına bağlantısı olan sayfalar:',
+'nolinkstoimage'        => 'Bu görüntü dosyasına bağlanan sayfa yok.',
+'sharedupload'          => 'Bu dosya ortak alana yüklenmiştir ve diğer projelerde de kullanılıyor olabilir.',
+'shareduploadwiki-linktext'=> 'dosya açıklama sayfası',
+'noimage'               => 'Bu isimde dosya yok. Siz $1.',
+'noimage-linktext'      => 'yükleyebilirsiniz',
+'uploadnewversion-linktext'=> 'Dosyanın yenisini yükleyin',
+'mimesearch'            => 'MIME araması',
+'mimetype'              => 'MIME tipi:',
+'download'              => 'yükle',
+'unwatchedpages'        => 'İzlenmeyen sayfalar',
+'listredirects'         => 'Yönlendirmeleri listele',
+'unusedtemplates'       => 'Kullanılmayan şablonlar',
+'unusedtemplatestext'   => 'Bu sayfa şablon alan adında bulunan ve diğer sayfalara eklenmemiş olan şablonları göstermektedir. Şablonlara olan diğer bağlantıları da kontrol etmeden silmeyiniz.',
+'unusedtemplateswlh'    => 'diğer bağlantılar',
+'randomredirect'        => 'Rastgele yönlendirme',
+'statistics'            => 'İstatistikler',
+'sitestats'             => '{{SITENAME}} sitesi istatistikleri',
+'userstats'             => 'Kullanıcı istatistikleri',
+'sitestatstext'         => '{{SITENAME}} sitesinde şu anda \'\'\'$2\'\'\' geçerli sayfa mevcuttur.
+
+Bu sayıya; "yönlendirme", "tartışma", "resim", "kullanıcı", "yardım", "{{SITENAME}}", "şablon" alanlarındakiler ve iç bağlantı içermeyen maddeler dahil değildir. Geçerli madde sayısına bu sayfaların sayısı eklendiğinde ise toplam \'\'\'$1\'\'\' sayfa mevcuttur.
+
+$8 tane dosya yüklenmiştir.
+
+Site kurulduğundan bu güne kadar toplam \'\'\'$4\'\'\' sayfa değişikliği ve sayfa başına ortalama \'\'\'$5\'\'\' katkı olmuştur.
+
+Toplam sayfa görüntülenme sayısı \'\'\'$3\'\'\', değişiklik başına görüntüleme sayısı \'\'\'$6\'\'\' olmuştur.
+
+Şu andaki [http://meta.wikimedia.org/wiki/Help:Job_queue iş kuyruğu] sayısı \'\'\'$7\'\'\'.',
+'userstatstext'         => 'Şu anda \'\'\'$1\'\'\' kayıtlı kullanıcımız var. Bunlardan <b>$2</b> tanesi (ya da %$4) yöneticidir. (bakın $3)',
+'disambiguations'       => 'Anlam ayrım sayfaları',
+'disambiguationspage'   => 'Şablon:Anlam ayrım',
+'disambiguationstext'   => 'Aşağıdaki maddeler <i>anlam ayrım sayfaları</i>na bağlıdırlar. Onun yerine uygun başlığa yönlendirilmeliler.<br />Sayfalar, $1\'den bağlanılması halinde "anlam ayrım" sayfası olarak sınıflandırılıyor.<br />Diğer alan adlarına ait bağlantılar listelen<b>me</b>miştir:',
+'doubleredirects'       => 'Yönlendirmeye olan yönlendirmeler',
+'doubleredirectstext'   => 'Her satır, ikinci yönlendirme metninin ilk satırının (genellikle ikinci yönlendirmenin de işaret etmesi gereken "asıl" hedefin) yanısıra ilk ve ikinci yönlendirmeye bağlantılar içerir.',
+'brokenredirects'       => 'Varolmayan maddeye yapılmış yönlendirmeler',
+'brokenredirectstext'   => 'Aşağıdaki yönlendirme, mevcut olmayan bir sayfaya işaret ediyor.',
+'nbytes'                => '$1 bayt',
+'ncategories'           => '$1 kategori',
+'nlinks'                => '$1 bağlantı',
+'nmembers'              => '$1 üye',
+'nrevisions'            => '$1 gözden geçirme',
+'nviews'                => '$1 görünüm',
+'lonelypages'           => 'Kendisine hiç bağlantı olmayan sayfalar',
+'uncategorizedpages'    => 'Herhangi bir kategoride olmayan sayfalar',
+'uncategorizedcategories'=> 'Herhangi bir kategoride olmayan kategoriler',
+'uncategorizedimages'   => 'Herhangi bir kategoride olmayan resimler',
+'unusedcategories'      => 'Kullanılmayan kategoriler',
+'unusedimages'          => 'Kullanılmayan resimler',
+'popularpages'          => 'Popüler sayfalar',
+'wantedcategories'      => 'İstenen kategoriler',
+'wantedpages'           => 'İstenen sayfalar',
+'mostlinked'            => 'Kendisine en fazla bağlantı verilmiş sayfalar',
+'mostlinkedcategories'  => 'En çok maddeye sahip kategoriler',
+'mostcategories'        => 'En fazla kategoriye bağlanmış sayfalar',
+'mostimages'            => 'En çok kullanılan resimler',
+'mostrevisions'         => 'En çok değişikliğe uğramış sayfalar',
+'allpages'              => 'Tüm sayfalar',
+'randompage'            => 'Rastgele sayfa',
+'shortpages'            => 'Kısa sayfalar',
+'longpages'             => 'Uzun sayfalar',
+'deadendpages'          => 'Başka sayfalara bağlantısı olmayan sayfalar',
+'listusers'             => 'Kullanıcı listesi',
+'specialpages'          => 'Özel sayfalar',
+'spheading'             => 'Tüm kullanıcıları ilgilendirebilecek özel sayfalar',
+'restrictedpheading'    => 'Yöneticilerin yetkileri ile ilgili özel sayfalar',
+'recentchangeslinked'   => 'İlgili değişiklikler',
+'rclsub'                => '("$1" sayfasına bağlanan sayfalarda)',
+'newpages'              => 'Yeni sayfalar',
+'ancientpages'          => 'En son değişiklik tarihi en eski olan maddeler',
+'intl'                  => 'Diller arası bağlantılar',
+'move'                  => 'Adını değiştir',
+'movethispage'          => 'Sayfayı taşı',
+'booksources'           => 'Kaynak kitaplar',
+'categoriespagetext'    => 'Vikide aşağıdaki kategoriler mevcuttur.',
+'data'                  => 'Veri',
+'userrights'            => 'Kullanıcı hakları yönetimi.',
+'groups'                => 'Kullanıcı grupları',
+'booksourcetext'        => 'Aşağıda yeni ve kullanılmış kitap satan sitelerin linklerinin bir listesi var. Ayrıca aradığınız kitaplar hakkında daha fazla bilgiyi de bu sayfalarda bulabilirsiniz.',
+'alphaindexline'        => '$1 \'den $2\'e',
+'version'               => 'Sürüm',
+'log'                   => 'Kayıtlar',
+'alllogstext'           => '[[Special:Log/upload|Yükleme]], [[Special:Log/delete|silme]], [[Special:Log/move|taşıma]], [[Special:Log/protect|koruma altına alma]], [[Special:Log/newusers|yeni kullanıcı]], [[Special:Log/renameuser|kullanıcıların yeniden adlandırmaları]], [[Special:Log/block|erişim engelleme]], [[Special:Log/rights|yönetici hareketlerinin]] ve [[Special:Log/makebot|botların durumunun]] tümünün kayıtları. 
+
+Kayıt tipini, kullanıcı ismini, sayfa ismini girerek listeyi daraltabilirsiniz.',
+'logempty'              => 'Kayıtlarda eşleşen bilgi yok.',
+'nextpage'              => 'Sonraki sayfa ($1)',
+'allpagesfrom'          => 'Listelemeye başlanılacak harfler:',
+'allarticles'           => 'Tüm maddeler',
+'allinnamespace'        => 'Tüm sayfalar ($1 sayfaları)',
+'allnotinnamespace'     => 'Tüm sayfalar ($1 alanında olmayanlar)',
+'allpagesprev'          => 'Önceki',
+'allpagesnext'          => 'Sonraki sayfa',
+'allpagessubmit'        => 'Getir',
+'allpagesprefix'        => 'Yazdığınız harflerle başlayan sayfaları göster:',
+'mailnologin'           => 'Gönderi adresi yok.',
+'mailnologintext'       => 'Diğer kullanıcılara e-posta gönderebilmeniz için [[Special:Userlogin|oturum aç]]malısınız ve [[Special:Preferences|tercihler]] sayfasında geçerli bir e-posta adresiniz olmalı.',
+'emailuser'             => 'Kullanıcıya e-posta gönder',
+'emailpage'             => 'Kullanıcıya e-posta gönder',
+'emailpagetext'         => 'Aşağıdaki form kullanıcı hesabıyla ilişkilendirilmiş geçerli bir e-posta 
+adresi olduğu takdirde ilgili kişiye bir e-posta gönderecek.
+ 
+Yanıt alabilmeniz için "From" (Kimden) kısmına tercih formunda belirttiğiniz e-posta adresi eklenecek.',
+'defemailsubject'       => '{{SITENAME}} e-posta',
+'noemailtitle'          => 'e-posta adresi yok',
+'noemailtext'           => 'Kullanıcı e-posta adresi belirtmemiş ya da diğer kullanıcılardan posta almak istemiyor.',
+'emailfrom'             => 'Kimden',
+'emailto'               => 'Kime',
+'emailsubject'          => 'Konu',
+'emailmessage'          => 'E-posta',
+'emailsend'             => 'Gönder',
+'emailsent'             => 'E-posta gönderildi',
+'emailsenttext'         => 'e-postanız gönderildi.',
+'watchlist'             => 'İzleme listem',
+'mywatchlist'             => 'İzleme listem',
+'watchlistfor'          => '(\'\'\'$1\'\'\' için)',
+'watchlistanontext'     => 'Lütfen izleme listenizdeki maddeleri görmek yada değiştirmek için $1.',
+'watchlistcount'        => '\'\'\'İzleme listenizde $1 sayfa var (tartışma ve mesaj sayfa dahil).\'\'\'',
+'clearwatchlist'        => 'İzleme listesini temizle',
+'watchlistcleartext'    => 'İzleme listenizi tamamen silmek istediğinizden emin misiniz?',
+'watchlistclearbutton'  => 'İzleme listemi sil.',
+'watchlistcleardone'    => 'İzleme listesi silindi - $1 madde listeden çıkarıldı.',
+'watchnologin'          => 'Oturum açık değil.',
+'watchnologintext'      => 'İzleme listenizi değiştirebilmek için [[Special:Userlogin|oturum açmalısınız]].',
+'addedwatch'            => 'İzleme listesine kaydedildi.',
+'addedwatchtext'        => '"$1" adlı sayfa [[Special:Watchlist|izleme listenize]] kaydedildi.
+
+Gelecekte, bu sayfaya ve ilgili tartışma sayfasına yapılacak değişiklikler burada listelenecektir.
+
+Kolayca seçilebilmeleri için de [[Special:Recentchanges|son değişiklikler listesi]] başlığı altında koyu harflerle listeleneceklerdir.
+
+Sayfayı izleme listenizden çıkarmak istediğinizde "sayfayı izlemeyi durdur" bağlantısına tıklayabilirsiniz.',
+'removedwatch'          => 'İzleme listenizden silindi',
+'removedwatchtext'      => '"$1" sayfası izleme listenizden silinmiştir.',
+'watch'                 => 'İzlemeye al',
+'watchthispage'         => 'Sayfayı izle',
+'unwatch'               => 'Sayfa izlemeyi durdur',
+'unwatchthispage'       => 'Sayfa izlemeyi durdur',
+'watchnochange'         => 'Gösterilen zaman aralığında izleme listenizdeki sayfaların hiçbiri güncellenmemiş.',
+'watchdetails'          => '* Tartışma sayfaları hariç $1 sayfa izleme listenizdedir.
+* [[Special:Watchlist/edit|İzleme listesinin tamamını göster ve yapılandır]] 
+* [[Special:Watchlist/clear|İzleme listesini tamamen boşalt]]',
+'wlheader-enotif'       => '* E-mail ile haber verme açılmıştır.',
+'wlheader-showupdated'  => '* Son ziyaretinizden sonraki sayfa değişikleri \'\'\'kalın\'\'\' olarak gösterilmiştir.',
+'watchmethod-recent'    => 'son değişiklikler arasında izledğiniz sayfalar aranıyor',
+'watchmethod-list'      => 'izleme listenizdeki sayfalar kontrol ediliyor',
+'removechecked'         => 'İşaretli sayfaları izleme listesinden sil',
+'watchlistcontains'     => 'İzleme listenizde $1 sayfa var.',
+'watcheditlist'         => 'İzlediğiniz sayfaların alfabetik listesi aşağıdadır. 
+Sayfaları izleme listesinden çıkarmak için yanlarındaki
+kutucukları işaretleyip sayfanın altındaki \'işaretlenenleri sil\' 
+düğmesini tıklayınız.',
+'removingchecked'       => 'İşaretlenen sayfalar izleme listesinden siliniyor...',
+'wlnote'                => '{{CURRENTTIME}} {{CURRENTMONTHNAME}} {{CURRENTDAY}} (UTC) tarihinde son <b>$2</b> saatte yapılan $1 değişiklik aşağıdadır.',
+'wlshowlast'            => 'Son $1 saati $2 günü göster $3',
+'wlsaved'               => 'İzleme listenizin kaydedilmiş sürümüdür.',
+'wlhideshowown'         => 'Kendi değişikliklerimi $1.',
+'wlhideshowbots'        => 'Bot tarafından yapılan değişiklikleri $1',
+'wldone'                => 'Tamam.',
+'enotif_reset'          => 'Tüm sayfaları ziyaret edilmiş olarak işaretle',
+'enotif_newpagetext'    => 'Yeni bir sayfa.',
+'changed'               => 'değiştirildi',
+'created'               => 'yaratıldı',
+'enotif_body'           => 'Sayın $WATCHINGUSERNAME,
+
+{{SITENAME}} sitesindeki $PAGETITLE başlıklı sayfa $PAGEEDITDATE tarihinde $PAGEEDITOR tarafından $CHANGEDORCREATED. Geçerli sürüme $PAGETITLE_URL adresinden ulaşabilirsiniz.
+
+$NEWPAGE
+
+Açıklaması: $PAGESUMMARY $PAGEMINOREDIT
+
+Sayfayı değiştiren kullanıcının erişim bilgileri:
+e-posta: $PAGEEDITOR_EMAIL
+Viki: $PAGEEDITOR_WIKI
+
+Bahsi geçen sayfayı ziyaret etmediğiniz sürece sayfayla ilgili başka değişiklik uyarısı gönderilmeyecektir. Uyarı ayarlarını izleme listenizdeki tüm sayfalar için değiştirebilirsiniz.
+
+{{SITENAME}} uyarı sistemi.
+
+--
+Ayarları değiştirmek için:
+{{fullurl:Special:Watchlist/edit}}
+
+Yardım ve öneriler için:
+{{fullurl:Help:Contents}}',
+'deletepage'            => 'Sayfayı sil',
+'confirm'               => 'Onayla',
+'excontent'             => 'eski içerik: \'$1\'',
+'excontentauthor'       => 'eski içerik: \'$1\' (\'$2\' katkıda bulunmuş olan tek kullanıcı)',
+'exbeforeblank'         => 'Silinmeden önceki içerik: \'$1\'',
+'exblank'               => 'sayfa içeriği boş',
+'confirmdelete'         => 'Silme işlemini onayla',
+'deletesub'             => '("$1" siliniyor)',
+'historywarning'        => 'Uyarı: Silmek üzere olduğunuz sayfanın geçmişi vardır:',
+'confirmdeletetext'     => 'Bir sayfayı veya resmi tüm geçmişi ile birlikte veritabanından kalıcı olarak silmek üzeresiniz.
+Lütfen sonuçlarını anladığınızı, [[Special:Whatlinkshere/{{FULLPAGENAME}}|sayfaya bağlantılarını]] kontrol ettikten sonra ve [[Project:Silme politikası]]\'e uygunluğunu dikkate alarak, bunu yapmak istediğinizi onaylayınız.',
+'actioncomplete'        => 'İşlem tamamlandı.',
+'deletedtext'           => '"$1" silindi.
+yakın zamanda silinenleri görmek için: $2.',
+'deletedarticle'        => '"$1" silindi',
+'dellogpage'            => 'Silme kayıtları',
+'dellogpagetext'        => 'Aşağıdaki liste son silme kayıtlarıdır.',
+'deletionlog'           => 'silme kayıtları',
+'reverted'              => 'Önceki sürüm geri getirildi',
+'deletecomment'         => 'Silme nedeni',
+'rollback'              => 'değişiklikleri geri al',
+'rollback_short'        => 'geri al',
+'rollbacklink'          => 'eski haline getir',
+'rollbackfailed'        => 'geri alma işlemi başarısız',
+'cantrollback'          => 'Değişiklikler geri alınamıyor, son katkıda bulunan sayfaya katkıda bulunmuş tek kişi',
+'editcomment'           => 'Değiştirme notu: "<i>$1</i>" idi.',
+'revertpage'            => '[[User:$2|$2]] tarafından yapılan değişiklikler geri alınarak, [[User:$1|$1]] tarafından değiştirilmiş önceki sürüm geri getirildi.',
+'protectlogpage'        => 'Koruma kayıtları',
+'protectlogtext'        => 'Korumaya alma/kaldırma ile ilgili değişiklikleri görmektesiniz.
+Daha fazla bilgi için [[Project:Koruma altına alınmış sayfa]] sayfasına bakabilirsiniz.',
+'protectedarticle'      => '"[[$1]]" koruma altında alındı',
+'unprotectedarticle'    => 'koruma kaldırıldı: "[[$1]]"',
+'confirmprotecttext'    => 'Bu sayfayı gerçekten korumaya almak istiyormusunuz?',
+'confirmprotect'        => 'Korumayı onayla',
+'protectmoveonly'       => 'Sadece isim değişikliğinden koru',
+'protectcomment'        => 'Koruma altına alma nedeni',
+'unprotectsub'          => '(koruma kaldırılır "$1")',
+'confirmunprotecttext'  => 'Gerçekten sayfanın korumasını kaldırmak istiyor musunuz?',
+'confirmunprotect'      => 'Korumayı kaldırmayı onayla',
+'unprotectcomment'      => 'Korumayı kaldırmak için neden',
+'protect-text'          => '[[$1]] sayfasının koruma durumunu buradan görebilir ve değiştirebilirsiniz. Lütfen [[Project:Koruma politikası|koruma politikasına]] uygun hareket ettiğinizden emin olunuz.',
+'protect-default'       => '(standart)',
+'protect-level-autoconfirmed'=> 'kayıtlı olmayan değiştirmesin',
+'protect-level-sysop'   => 'sadece yöneticiler',
+'restriction-edit'      => 'Düzenle',
+'restriction-move'      => 'Taşı',
+'undelete'              => 'Silinmiş sayfaları göster',
+'undeletepage'          => 'Sayfanın silinmiş sürümlerine göz at ve geri getir.',
+'viewdeletedpage'       => 'Silinen sayfalara bak',
+'undeletearticle'       => 'Silinmiş sayfayı geri getir',
+'undeletebtn'           => 'Geri getir!',
+'undeletereset'         => 'Vazgeç',
+'undeletecomment'       => 'Neden:',
+'undeletedarticle'      => '"$1" geri getirildi.',
+'undeletedrevisions'    => 'Toplam $1 kayıt geri getirildi.',
+'namespace'             => 'Alan adı:',
+'invert'                => 'Seçili haricindekileri göster',
+'contributions'         => 'Kullanıcının katkıları',
+'mycontris'             => 'Katkılarım',
+'contribsub2'            => '$1 ($2)',
+'nocontribs'            => 'Bu kriterlere uyan değişiklik bulunamadı',
+'uctop'                 => '(son)',
+'newbies'               => 'yeni başlayanlar',
+'sp-contributions-newest'=> 'En yeni',
+'sp-contributions-oldest'=> 'En eski',
+'sp-contributions-newer'=> 'Sonraki $1',
+'sp-contributions-older'=> 'Önceki $1',
+'sp-contributions-newbies-sub'=> 'Yeni kullanıcılar için',
+'whatlinkshere'         => 'Sayfaya bağlantılar',
+'linklistsub'           => '(Bağlantı listesi)',
+'linkshere'             => 'Buraya bağlantısı olan sayfalar:',
+'nolinkshere'           => 'Buraya bağlanan sayfa yok.',
+'isredirect'            => 'yönlendirme sayfası',
+'istemplate'            => 'ekleme',
+'blockip'               => 'Bu IP\'den erişimi engelle',
+'blockiptext'           => 'Aşağıdaki formu kullanarak belli bir IP\'nin veya kullanıcının erişimini engelleyebilirsiniz. Bu sadece vandalizmi engellemek için ve [[Project:Kurallar|kurallara]] uygun olarak yapılmalı. Aşağıya mutlaka engelleme ile ilgili bir açıklama yazınız. (örnek: -Şu- sayfalarda vandalizm yapmıştır).',
+'ipaddress'             => 'IP Adresi',
+'ipadressorusername'    => 'IP adresi veya kullanıcı adı',
+'ipbexpiry'             => 'Bitiş süresi',
+'ipbreason'             => 'Sebep',
+'ipbsubmit'             => 'Bu kullanıcıyı engelle',
+'ipbother'              => 'Farklı zaman',
+'ipboptions'            => '15 dakika:15 minutes,1 saat:1 hour,3 saat:3 hours,24 saat:24 hours,48 saat:48 hours,1 hafta:1 week,1 ay:1 month,süresiz:indefinite',
+'ipbotheroption'        => 'farklı',
+'badipaddress'          => 'Geçersiz IP adresi',
+'blockipsuccesssub'     => 'IP adresi engelleme işlemi başarılı oldu',
+'blockipsuccesstext'    => '"$1" engellendi.
+<br />[[Special:Ipblocklist|IP adresi engellenenler]] listesine bakınız .',
+'unblockip'             => 'Kullanıcının engellemesini kaldır',
+'ipusubmit'             => 'Bu adresin engellemesini kaldır',
+'ipblocklist'           => 'Erişimi durdurulmuş kullanıcılar ve IP adresleri listesi',
+'blocklistline'         => '$1, $2 blok etti: $3 ($4)',
+'infiniteblock'         => 'süresiz',
+'expiringblock'         => '$1 tarihinde doluyor',
+'ipblocklistempty'      => 'Erişimi engellenmiş kimse yok.',
+'blocklink'             => 'engelle',
+'unblocklink'           => 'engellemeyi kaldır',
+'contribslink'          => 'Katkılar',
+'autoblocker'           => 'Otomatik olarak engellendiniz çünkü yakın zamanda IP adresiniz "[[User:$1|$1]]" kullanıcısı tarafından  kullanılmıştır. $1 isimli kullanıcının engellenmesi için verilen sebep: "\'\'\'$2\'\'\'"',
+'blocklogpage'          => 'Erişim engelleme kayıtları',
+'blocklogentry'         => '"[[$1]]" erişimi $2 durduruldu. Sebep',
+'blocklogtext'          => 'Burada kullanıcı erişimine yönelik engelleme ya da engelleme kaldırma kayıtları listelenmektedir. Otomatik  IP adresi engellemeleri listeye dahil değildir. Şu anda erişimi durdurulmuş kullanıcıları [[Special:Ipblocklist|IP engelleme listesi]] sayfasından görebilirsiniz.',
+'unblocklogentry'       => '$1 kullanıcının engellemesi kaldırıldı',
+'ipb_expiry_invalid'    => 'Geçersiz bitiş zamanı.',
+'ip_range_invalid'      => 'Geçersiz IP aralığı.',
+'lockdb'                => 'Veritabanı kilitli',
+'lockbtn'               => 'Veritabanı kilitli',
+'rights'                => 'Haklar:',
+'user_rights_set'       => '<b>"$1" için kullanıcı hakları güncellendi</b>',
+'already_sysop'         => 'Bu kullanıcı zaten yönetici',
+'already_bureaucrat'    => 'Bu kullanıcı zaten bürokrat',
+'movepage'              => 'İsim değişikliği',
+'movepagetext'          => 'Aşağıdaki form kullanılarak sayfanın adı değiştirilir. Beraberinde tüm geçmiş kayıtları da yeni isme aktarılır. Eski isim yeni isme yönlendirme haline dönüşür. Eski başlığa dogru olan bağlantılar olduğu gibi kalır; çift veya geçersiz yönlendirmeleri [[Special:Maintenance|kontrol ediniz.]] Yapacağınız bu değişikllike tüm bağlantıların olması gerektiği gibi çalıştığından sizin sorumlu olduğunuzu unutmayınız.
+
+Eğer yeni isimde bir isim zaten mevcutsa, isim değişikliği \'\'\'yapılmayacaktır\'\'\', ancak varolan sayfa içerik olarak boş ise veya sadece yönlendirme ise ve hiç geçmiş hali yoksa isim değişikliği mümkün olacaktır. Bu yanı zamanda demektir ki, yaptığınız isim değişikliğini ilk ismine değiştirerek geri alabilirsiniz ve hiç bir başka sayfaya da dokunmamış olursunuz.
+
+<b>UYARI!</b>
+Bu değişim popüler bir sayfa için beklenmeyen sonuçlar doğurabilir; lütfen değişikliği yapmadan önce olabilecekleri göz önüne alın.',
+'movepagetalktext'      => 'İlişikteki tartışma sayfası da (eğer varsa) otomatik olarak yeni isme taşınacaktır. Ama şu durumlarda \'\'\'taşınmaz\'\'\':
+
+*Alanlar arası bir taşıma ise, (örnek: "Project:" --> "Help:")
+*Yeni isimde bir tartışma sayfası zaten var ise,
+*Alttaki kutucuğu seçmediyseniz.
+
+Bu durumlarda sayfayı kendiniz aktarmalısınız.',
+'movearticle'           => 'Eski isim',
+'movenologin'           => 'Sistemde değilsiniz.',
+'movenologintext'       => 'Sayfanın adını değiştirebilmek için kayıtlı ve [[Special:Userlogin|sisteme]] giriş yapmış olmanız gerekmektedir.',
+'newtitle'              => 'Yeni isim',
+'movepagebtn'           => 'İsmi değiştir',
+'pagemovedsub'          => 'İsim değişikliği tamamlandı.',
+'pagemovedtext'         => '"[[$1]]" sayfası "[[$2]]" sayfasına aktarıldı.',
+'articleexists'         => 'Bu isimde bir sayfa bulunmakta veya seçmiş olduğunuz isim geçersizdir.
+Lütfen başka bir isim deneyiniz.',
+'movedto'               => 'taşındı:',
+'movetalk'              => 'Varsa "tartışma" sayfasını da aktar.',
+'talkpagemoved'         => 'İlgili tartışma sayfası da aktarıldı.',
+'talkpagenotmoved'      => 'İlgili tartışma sayfası <strong>aktarılmadı</strong>.',
+'1movedto2'             => '[[$1]] sayfasının yeni adı: [[$2]]',
+'1movedto2_redir'       => '[[$1]] sayfasının yeni adı: [[$2]]',
+'movelogpage'           => 'İsim değişikliği kayıtları',
+'movelogpagetext'       => 'Aşağıda bulunan liste adı değiştirilmiş sayfaları gösterir.',
+'movereason'            => 'Sebep',
+'revertmove'            => 'geriye al',
+'delete_and_move'       => 'Sil ve taşı',
+'delete_and_move_text'  => '==Silinmesi gerekiyor==
+
+Hedef "[[$1]]" maddesi zaten mevcut. O maddeyi silerek isim değişikliğine devam etmek istiyor musunuz?',
+'delete_and_move_confirm'=> 'Evet, sayfayı sil',
+'delete_and_move_reason'=> 'İsim değişikliğinin gerçekleşmesi için silindi.',
+'selfmove'              => 'Olmasını istediğiniz isim ile mevcut isim aynı. Değişiklik mümkün değil.',
+'export'                => 'Sayfa kaydet',
+'exporttext'            => 'You can export the text and editing history of a particular page or
+set of pages wrapped in some XML. This can be imported into another wiki using MediaWiki
+via the Special:Import page.
+
+To export pages, enter the titles in the text box below, one title per line, and
+select whether you want the current version as well as all old versions, with the page
+history lines, or just the current version with the info about the last edit.
+
+In the latter case you can also use a link, e.g. [[Special:Export/{{int:Mainpage}}]] for the page {{int:Mainpage}}.',
+'allmessages'           => 'Viki arayüz metinleri',
+'allmessagesname'       => 'İsim',
+'allmessagesdefault'    => 'Orjinal metin',
+'allmessagescurrent'    => 'Kullanımdaki metin',
+'allmessagestext'       => 'Bu liste  MediaWiki\'de mevcut olan tüm terimlerin listesidir',
+'allmessagesfilter'     => 'Metin ayrıştırıcı filtresi:',
+'allmessagesmodified'   => 'Sadece değiştirilmişleri göster',
+'thumbnail-more'        => 'Büyüt',
+'missingimage'          => '<b>Bulunmayan resim</b><br /><i>$1</i>',
+'filemissing'           => 'Dosya bulunmadı',
+'tooltip-search'        => '{{SITENAME}} içinde ara',
+'tooltip-minoredit'     => 'Küçük değişiklik olarak işaretle',
+'tooltip-save'          => 'Değişiklikleri kaydet',
+'tooltip-preview'       => 'Önizleme; kaydetmeden önce bu özelliği kullanarak değişikliklerinizi gözden geçirin!',
+'tooltip-diff'          => 'Metine yaptığınız değişiklikleri gösterir.',
+'tooltip-compareselectedversions'=> 'Seçilmiş iki sürüm arasındaki farkları göster.',
+'tooltip-watch'         => 'Sayfayı izleme listene ekle',
+'monobook.css'          => '/* monobook temasının ayarlarını değiştirmek için burayı değiştirin. Tüm sitede etkili olur. */',
+'siteuser'              => '{{SITENAME}} kullanıcı $1',
+'lastmodifiedatby'        => 'Sayfa en son $3 tarafından $2, $1 tarihinde değiştirildi.',
+'and'                   => 've',
+'others'                => 'diğerleri',
+'siteusers'             => '{{SITENAME}} kullanıcılar $1',
+'spamprotectiontitle'   => 'Spam karşı koruma filtresi',
+'spamprotectiontext'    => 'Kaydetmek istediğiniz sayfa spam filtresi tarafından blok edildi. Büyük ihtimalle bir dış bağlantıdan kaynaklanmaktadır.',
+'subcategorycount'      => 'Bu kategoride $1 altkategori var.',
+'categoryarticlecount'  => 'Bu kategoride $1 madde var.',
+'listingcontinuesabbrev'=> ' (devam)',
+'numwatchers'           => 'izleyici sayısı: $1',
+'mw_math_png'           => 'Daima PNG resim formatına çevir',
+'mw_math_simple'        => 'Çok basitse HTML, değilse PNG',
+'mw_math_html'          => 'Mümkünse HTML, değilse PNG',
+'mw_math_source'        => 'Değiştirmeden TeX olarak bırak  (metin tabanlı tarayıcılar için)',
+'mw_math_modern'        => 'Modern tarayıcılar için tavsiye edilen',
+'mw_math_mathml'        => 'Mümkünse MathML (daha deneme aşamasında)',
+'monobook.js' => '/* Deprecated; use [[MediaWiki:common.js]] */',
+ 
+'accesskey-pt-userpage' => '.',
+'tooltip-pt-userpage' => 'Kişisel sayfam',
+'accesskey-pt-anonuserpage' => '.',
+'tooltip-pt-anonuserpage' => 'The user page for the ip you',
+'accesskey-pt-mytalk' => 'n',
+'tooltip-pt-mytalk' => 'Mesaj sayfam',
+'accesskey-pt-anontalk' => 'n',
+'tooltip-pt-anontalk' => 'Bu IP adresinden yapılmış değişiklikleri tartış',
+'accesskey-pt-preferences' => '',
+'tooltip-pt-preferences' => 'Ayarlarım',
+'accesskey-pt-watchlist' => 'l',
+'tooltip-pt-watchlist' => 'İzlemeye aldığım sayfalar',
+'accesskey-pt-mycontris' => 'y',
+'tooltip-pt-mycontris' => 'Yaptığım katkıların listesi',
+'accesskey-pt-login' => 'o',
+'tooltip-pt-login' => 'Oturum açmanız tavsiye olunur ama mecbur değilsiniz.',
+'accesskey-pt-anonlogin' => 'o',
+'tooltip-pt-anonlogin' => 'Oturum açmanız tavsiye olunur ama mecbur değilsiniz.',
+'accesskey-pt-logout' => '',
+'tooltip-pt-logout' => 'Sistemden çık',
+'accesskey-ca-talk' => 't',
+'tooltip-ca-talk' => 'İçerik ile ilgili görüş belirt',
+'accesskey-ca-edit' => 'e',
+'tooltip-ca-edit' => 'Bu sayfayı değiştirebilirsiniz. Kaydetmeden önce önizleme yapmayı unutmayın.',
+'accesskey-ca-addsection' => '+',
+'tooltip-ca-addsection' => 'Bu tartışmaya yorum ekleyin.',
+'accesskey-ca-viewsource' => 'e',
+'tooltip-ca-viewsource' => 'Bu sayfa kormu altında. Kaynak kodunu sadece görebilirsiniz. Değiştiremezsiniz.',
+'accesskey-ca-history' => 'h',
+'tooltip-ca-history' => 'Bu sayfanın geçmiş versiyonları.',
+'accesskey-ca-protect' => '=',
+'tooltip-ca-protect' => 'Bu sayfayı koru',
+'accesskey-ca-delete' => 'd',
+'tooltip-ca-delete' => 'Sayfayı sil',
+'accesskey-ca-undelete' => 'd',
+'tooltip-ca-undelete' => 'Sayfayı silinmeden önceki haline geri getirin',
+'accesskey-ca-move' => 'm',
+'tooltip-ca-move' => 'Sayfanın adını değiştir',
+'accesskey-ca-nomove' => '',
+'tooltip-ca-nomove' => 'Bu sayfanın adını değiştirmeye yetkiniz yok',
+'accesskey-ca-watch' => 'w',
+'tooltip-ca-watch' => 'Bu sayfayı izlemeye al',
+'accesskey-ca-unwatch' => 'w',
+'tooltip-ca-unwatch' => 'Bu sayfayı izlemeyi bırakın',
+'accesskey-search' => 'f',
+'tooltip-search' => 'Bu vikide arama yap',
+'accesskey-p-logo' => '',
+'tooltip-p-logo' => 'Ana sayfa',
+'accesskey-n-mainpage' => 'z',
+'tooltip-n-mainpage' => 'Başlangıç sayfasına dönün',
+'accesskey-n-portal' => '',
+'tooltip-n-portal' => 'Proje üzerine, ne nerdedir, neler yapılabilir',
+'accesskey-n-currentevents' => '',
+'tooltip-n-currentevents' => 'Güncel olaylarla ilgili son bilgiler',
+'accesskey-n-recentchanges' => 'r',
+'tooltip-n-recentchanges' => 'Vikide yapılmış son değişikliklerin listesi.',
+'accesskey-n-randompage' => 'x',
+'tooltip-n-randompage' => 'Rastgele bir maddeye gidin',
+'accesskey-n-help' => '',
+'tooltip-n-help' => 'Yardım almak için.',
+'accesskey-n-sitesupport' => '',
+'tooltip-n-sitesupport' => 'Maddi destek',
+'accesskey-t-whatlinkshere' => 'j',
+'tooltip-t-whatlinkshere' => 'Bu sayfaya bağlantı vermiş diğer viki sayfalarının listesi',
+'accesskey-t-recentchangeslinked' => 'k',
+'tooltip-t-recentchangeslinked' => 'Bu sayfaya bağlantı veren sayfalardaki son değişiklikler',
+'accesskey-feed-rss' => '',
+'tooltip-feed-rss' => 'Bu sayfa için RSS beslemesi',
+'accesskey-feed-atom' => '',
+'tooltip-feed-atom' => 'Bu sayfa için atom beslemesi',
+'accesskey-t-contributions' => '',
+'tooltip-t-contributions' => 'Kullanıcının katkı listesini gör',
+'accesskey-t-emailuser' => '',
+'tooltip-t-emailuser' => 'Kullanıcıya e-posta gönder',
+'accesskey-t-upload' => 'u',
+'tooltip-t-upload' => 'Sisteme resim ya da medya dosyaları yükleyin',
+'accesskey-t-specialpages' => 'q',
+'tooltip-t-specialpages' => 'Tüm özel sayfaların listesini göster',
+'accesskey-ca-nstab-main' => 'c',
+'tooltip-ca-nstab-main' => 'Sayfayı göster',
+'accesskey-ca-nstab-user' => 'c',
+'tooltip-ca-nstab-user' => 'Kullanıcı sayfasını göster',
+'accesskey-ca-nstab-media' => 'c',
+'tooltip-ca-nstab-media' => 'Medya sayfasını göster',
+'accesskey-ca-nstab-special' => '',
+'tooltip-ca-nstab-special' => 'Bu özel sayfa olduğu için değişiklik yapamazsınız.',
+'accesskey-ca-nstab-project' => 'a',
+'tooltip-ca-nstab-project' => 'Proje sayfasını göster',
+'accesskey-ca-nstab-image' => 'c',
+'tooltip-ca-nstab-image' => 'Resim sayfasını göster',
+'accesskey-ca-nstab-mediawiki' => 'c',
+'tooltip-ca-nstab-mediawiki' => 'Sistem mesajını göster',
+'accesskey-ca-nstab-template' => 'c',
+'tooltip-ca-nstab-template' => 'Şablonu göster',
+'accesskey-ca-nstab-help' => 'c',
+'tooltip-ca-nstab-help' => 'Yardım sayfasını görmek için tıklayın',
+'accesskey-ca-nstab-category' => 'c',
+'tooltip-ca-nstab-category' => 'Kategori sayfasını göster',
+'deletedrevision'       => '$1 sayılı eski sürüm silindi.',
+'previousdiff'          => '← Önceki sürümle aradaki fark',
+'nextdiff'              => 'Sonraki sürümle aradaki fark →',
+'imagemaxsize'          => 'Resim açıklamalar sayfalarındaki resmin en büyük boyutu:',
+'thumbsize'             => 'Küçük boyut:',
+'showbigimage'          => 'Yüksek çözünürlüklü resim indirilir ($1 · $2, $3 KB)',
+'newimages'             => 'Yeni resimler',
+'showhidebots'          => '(botları $1)',
+'specialloguserlabel'   => 'Kullanıcı:',
+'speciallogtitlelabel'  => 'Başlık:',
+'passwordtooshort'      => 'Parolanız çok kısa. En az $1 harf ve/veya rakam içermeli.',
+'mediawarning'          => '\'\'\'DİKKAT!\'\'\': Bu dosyada kötü amaçlı (virüs gibi) kısım bulunabilir ve işletim sisteminize zarar verebilir.
+<hr />',
+'metadata'              => 'Resim detayları',
+'metadata-expand'       => 'Ayrıntıları göster',
+'metadata-collapse'     => 'Ayrıntıları gösterme',
+'exif-make'             => 'Kamera markası',
+'exif-model'            => 'Kamera modeli',
+'exif-artist'           => 'Yaratıcısı',
+'exif-colorspace'       => 'Renk aralığı',
+'exif-datetimeoriginal' => 'Çekim saati ve tarihi',
+'exif-exposuretime'     => 'Çekim süresi',
+'exif-exposuretime-format'=> '$1 saniye ($2)',
+'exif-fnumber'          => 'F numarası',
+'exif-spectralsensitivity'=> 'Spektral duyarlılık',
+'exif-aperturevalue'    => 'Açıklık',
+'exif-brightnessvalue'  => 'parlaklık',
+'exif-lightsource'      => 'Işık durumu',
+'exif-exposureindex'    => 'Poz dizini',
+'exif-scenetype'        => 'Çekim tipi',
+'exif-digitalzoomratio' => 'Yakınlaştırma oranı',
+'exif-contrast'         => 'Karşıtlık',
+'exif-saturation'       => 'Doygunluk',
+'exif-sharpness'        => 'Netlik',
+'exif-gpslatitude'      => 'Enlem',
+'exif-gpslongitude'     => 'Boylam',
+'exif-gpsaltitude'      => 'Yükseklik',
+'exif-gpstimestamp'     => 'GPS saati (atom saati)',
+'exif-gpssatellites'    => 'Ölçmek için kullandığı uydular',
+'exif-compression-1'    => 'Sıkıştırılmamış',
+'exif-orientation-3'    => '180° döndürülmüş',
+'exif-exposureprogram-1'=> 'Elle',
+'exif-subjectdistance-value'=> '$1 metre',
+'exif-meteringmode-0'   => 'Bilinmiyor',
+'exif-meteringmode-1'   => 'Orta',
+'exif-meteringmode-255' => 'Diğer',
+'exif-lightsource-0'    => 'Bilinmiyor',
+'exif-lightsource-2'    => 'Floresan',
+'exif-lightsource-9'    => 'Açık',
+'exif-lightsource-10'   => 'Kapalı',
+'exif-lightsource-11'   => 'Gölge',
+'exif-lightsource-15'   => 'Beyaz floresan (WW 3200 – 3700K)',
+'exif-sensingmethod-1'  => 'Tanımsız',
+'exif-scenecapturetype-0'=> 'Standart',
+'exif-scenecapturetype-2'=> 'Portre',
+'exif-scenecapturetype-3'=> 'Gece çekimi',
+'exif-subjectdistancerange-0'=> 'Bilinmiyor',
+'exif-subjectdistancerange-1'=> 'Makro',
+'edit-externally'       => 'Dosya üzerinde bilgisayarınızda bulunan uygulamalar ile değişiklikler yapın',
+'edit-externally-help'  => 'Daha fazla bilgi için metadaki [http://meta.wikimedia.org/wiki/Help:External_editors dış uygulama ayarları] (İngilizce) sayfasına bakabilirsiniz.',
+'imagelistall'          => 'Tümü',
+'watchlistall1'         => 'Hepsini göster',
+'watchlistall2'         => 'Hepsini göster',
+'namespacesall'         => 'Hepsi',
+'confirmemail'          => 'E-posta adresini onayla',
+'confirmemail_text'     => 'Viki\'nin e-posta işlevlerini kullanmadan önce e-posta adresinizin
+doğrulanması gerekiyor. Adresinize onay e-postası göndermek için aşağıdaki
+butonu tıklayın. Gönderilecek iletide adresinizi onaylamak için tarayıcınızla 
+erişebileceğiniz, onay kodu içeren bir bağlantı olacak.',
+'confirmemail_send'     => 'Onay kodu gönder',
+'confirmemail_sent'     => 'Onay e-postası gönderildi.',
+'confirmemail_sendfailed'=> 'Onay kodu gönderilemedi. Adreste geçersiz harf ya da işaret olmadığından emin misiniz?',
+'confirmemail_invalid'  => 'Geçersiz onay kodu. Onay kodunun son kullanma tarihi geçmiş olabilir.',
+'confirmemail_needlogin'=> '$1 yapmak için önce e-posta adresinizi onaylamalısınız.',
+'confirmemail_success'  => 'E-posta adresiniz onaylandı. Oturum açıp Viki\'nin tadını çıkarabilirsiniz.',
+'confirmemail_loggedin' => 'E-posta adresiniz onaylandı.',
+'confirmemail_error'    => 'Onayınız bilinmeyen bir hata nedeniyle kaydedilemedi.',
+'confirmemail_subject'  => '{{SITENAME}} e-posta adres onayı.',
+'confirmemail_body'     => '$1 internet adresinden yapılan erişimle {{SITENAME}} sitesinde 
+bu e-posta adresi ile ilişkilendirilen $2 kullanıcı hesabı 
+açıldı.  
+
+Bu e-posta adresinin bahsi geçen kullanıcı hesabına ait olduğunu
+onaylamak ve {{SITENAME}} sitesindeki e-posta işlevlerini aktif hale 
+getirmek için aşağıdakı bağlantıyı tıklayın.
+
+$3
+
+Bahsi geçen kullanıcı hesabı size ait değilse yapmanız gereken
+birşey yok.
+
+Bu onay kodu $4 tarihine kadar geçerli olacak.',
+'createarticle'         => 'Sayfayı oluştur',
+'deletedwhileediting'   => 'Uyarı: Bu sayfa siz değişiklik yapmaya başladıktan sonra silinmiş!',
+'redirectingto'         => 'Yönlendirme [[$1]]...',
+'confirm_purge'         => 'Sayfa önbelleği temizlesin mi? $1',
+'confirm_purge_button'  => 'Tamam',
+'youhavenewmessagesmulti'=> '$1\'de yeni mesajınız var.',
+'articletitles'         => '\'\'$1\'\' ile başlayan maddeler',
+'displaytitle'          => '(Bu sayfaya [[$1]] olarak bağlan)',
+);
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesTt.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesTt.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesTt.php	(revision 1280)
@@ -0,0 +1,832 @@
+<?php
+/**
+  *  Tatarish (Tatarça)
+  * @addtogroup Language
+  */
+
+
+$namespaceNames = array(
+        NS_MEDIA            => 'Media',
+        NS_SPECIAL          => 'Maxsus',
+        NS_MAIN             => '',
+        NS_TALK             => 'Bäxäs',
+        NS_USER             => 'Äğzä',
+        NS_USER_TALK        => "Äğzä_bäxäse",
+        # NS_PROJECT set by $wgMetaNamespace
+        NS_PROJECT_TALK     => '$1_bäxäse',
+        NS_IMAGE            => "Räsem",
+        NS_IMAGE_TALK       => "Räsem_bäxäse",
+        NS_MEDIAWIKI        => "MediaWiki",
+        NS_MEDIAWIKI_TALK   => "MediaWiki_bäxäse",
+        NS_TEMPLATE         => "Ürnäk",
+        NS_TEMPLATE_TALK    => "Ürnäk_bäxäse",
+        NS_HELP             => "Yärdäm",
+        NS_HELP_TALK        => "Yärdäm_bäxäse",
+        NS_CATEGORY         => "Törkem",
+        NS_CATEGORY_TALK    => "Törkem_bäxäse"
+);
+
+$datePreferences = false;
+
+$defaultDateFormat = 'dmy';
+
+$dateFormats = array(
+        'mdy time' => 'H:i',
+        'mdy date' => 'M j, Y',
+        'mdy both' => 'H:i, M j, Y',
+        'dmy time' => 'H:i',
+        'dmy date' => 'j. M Y',
+        'dmy both' => 'j. M Y, H:i',
+        'ymd time' => 'H:i',
+        'ymd date' => 'Y M j',
+        'ymd both' => 'H:i, Y M j',
+        'ISO 8601 time' => 'xnH:xni:xns',
+        'ISO 8601 date' => 'xnY-xnm-xnd',
+        'ISO 8601 both' => 'xnY-xnm-xnd"T"xnH:xni:xns',
+);
+
+$magicWords = array(
+#       ID                                 CASE  SYNONYMS
+        'redirect'               => array( 0,    '#yünältü',                '#REDIRECT'),
+        'notoc'                  => array( 0,    '__ETYUQ__',              '__NOTOC__'),
+        'forcetoc'               => array( 0,    '__ETTIQ__',              '__FORCETOC__'),
+        'toc'                    => array( 0,    '__ET__',                 '__TOC__'),
+        'noeditsection'          => array( 0,    '__BÜLEMTÖZÄTÜYUQ__',     '__NOEDITSECTION__'),
+        'start'                  => array( 0,    '__BAŞLAW__',             '__START__'),
+        'currentmonth'           => array( 1,    'AĞIMDAĞI_AY',            'CURRENTMONTH'),
+        'currentmonthname'       => array( 1,    'AĞIMDAĞI_AY_İSEME',      'CURRENTMONTHNAME'),
+        'currentday'             => array( 1,    'AĞIMDAĞI_KÖN',           'CURRENTDAY'),
+        'currentdayname'         => array( 1,    'AĞIMDAĞI_KÖN_İSEME',     'CURRENTDAYNAME'),
+        'currentyear'            => array( 1,    'AĞIMDAĞI_YIL',           'CURRENTYEAR'),
+        'currenttime'            => array( 1,    'AĞIMDAĞI_WAQIT',         'CURRENTTIME'),
+        'numberofarticles'       => array( 1,    'MÄQÄLÄ_SANI',            'NUMBEROFARTICLES'),
+        'currentmonthnamegen'    => array( 1,    'AĞIMDAĞI_AY_İSEME_GEN',  'CURRENTMONTHNAMEGEN'),
+        'pagename'               => array( 1,    'BİTİSEME',               'PAGENAME'),
+        'namespace'              => array( 1,    'İSEMARA',                'NAMESPACE'),
+        'subst'                  => array( 0,    'TÖPÇEK:',                'SUBST:'),
+        'msgnw'                  => array( 0,    'MSGNW:'                 ),
+        'img_thumbnail'          => array( 1,    'thumbnail', 'thumb'     ),
+        'img_right'              => array( 1,    'uñda',                   'right'),
+        'img_left'               => array( 1,    'sulda',                  'left'),
+        'img_none'               => array( 1,    'yuq',                    'none'),
+        'img_width'              => array( 1,    '$1px'                   ),
+        'img_center'             => array( 1,    'center', 'centre'       ),
+        'img_framed'             => array( 1,    'framed', 'enframed', 'frame' ),
+        'int'                    => array( 0,    'EÇKE:',                   'INT:'),
+        'sitename'               => array( 1,    'SÄXİFÄİSEME',            'SITENAME'),
+        'ns'                     => array( 0,    'İA:',                    'NS:'),
+        'localurl'               => array( 0,    'URINLIURL:',              'LOCALURL:'),
+        'localurle'              => array( 0,    'URINLIURLE:',             'LOCALURLE:'),
+        'server'                 => array( 0,    'SERVER'                 )
+);
+
+$fallback8bitEncoding = "windows-1254";
+
+$linkTrail = '/^([a-zäçğıñöşü“»]+)(.*)$/sDu';
+
+$messages = array(
+'skinpreview' => '(Küzläw)',
+
+# Dates
+'sunday'    => 'Yäkşämbe',
+'monday'    => 'Düşämbe',
+'tuesday'   => 'Sişämbe',
+'wednesday' => 'Çärşämbe',
+'thursday'  => 'Pänceşämbe',
+'friday'    => 'Comğa',
+'saturday'  => 'Şimbä',
+'sun'       => 'Yäk',
+'mon'       => 'Düş',
+'tue'       => 'Siş',
+'wed'       => 'Çär',
+'thu'       => 'Pän',
+'fri'       => 'Com',
+'sat'       => 'Şim',
+'january'   => 'Ğínwar',
+'february'  => 'Febräl',
+'march'     => 'Mart',
+'april'     => 'Äpril',
+'may_long'  => 'May',
+'june'      => 'Yün',
+'july'      => 'Yül',
+'august'    => 'August',
+'september' => 'Sentäber',
+'october'   => 'Öktäber',
+'november'  => 'Nöyäber',
+'december'  => 'Dekäber',
+'jan'       => 'Ğín',
+'feb'       => 'Feb',
+'mar'       => 'Mar',
+'apr'       => 'Äpr',
+'may'       => 'May',
+'jun'       => 'Yün',
+'jul'       => 'Yül',
+'aug'       => 'Aug',
+'sep'       => 'Sen',
+'oct'       => 'Ökt',
+'nov'       => 'Nöy',
+'dec'       => 'Dek',
+
+# Bits of text used by many pages
+'categories'         => 'Cíıntıqlar',
+'pagecategories'     => '{{PLURAL:$1|Cíıntıq|Cíıntıqlar}}',
+'pagecategorieslink' => '{{ns:special}}:Categories',
+'category_header'    => '«$1» cíıntığınıñ mäqäläläre',
+'subcategories'      => 'Eçke cíıntıqlar',
+
+'linkprefix'   => '/^(.*?)([a-zäçğıñöşüA-ZÄÇĞİÑÖŞÜ«„]+)$/sDu',
+'mainpage'     => 'Täwge Bit',
+'mainpagetext' => 'Wiki programı uñışlı quyıldı.',
+
+'portal'          => 'Cämğiät üzäge',
+'portal-url'      => '{{ns:project}}:Cämğiät Üzäge',
+'about'           => 'Turında',
+'aboutsite'       => '{{SITENAME}} Turında',
+'aboutpage'       => '{{ns:project}}:Turında',
+'article'         => 'Eçtälek bite',
+'help'            => 'Yärdäm',
+'helppage'        => '{{ns:help}}:Eçtälek',
+'bugreports'      => 'Xatanamä',
+'bugreportspage'  => '{{ns:project}}:Xata_yomğağı',
+'sitesupport'     => 'Ximäyäçegä',
+'sitesupport-url' => '{{ns:project}}:Ximäyäçegä',
+'faq'             => 'YBS',
+'faqpage'         => '{{ns:project}}:YBS',
+'edithelp'        => 'Üzgärtü xaqında',
+'newwindow'       => '(yaña täräzädä açılır)',
+'edithelppage'    => '{{ns:help}}:Üzgärtü',
+'cancel'          => 'Kiräkmi',
+'qbfind'          => 'Tap',
+'qbbrowse'        => 'Qaraw',
+'qbedit'          => 'Üzgärtü',
+'qbpageoptions'   => 'Bu bit',
+'qbpageinfo'      => 'Eçtälek',
+'qbmyoptions'     => 'Bitlärem',
+'qbspecialpages'  => 'Maxsus bitlär',
+'moredotdotdot'   => 'Kübräk...',
+'mypage'          => 'Bitem',
+'mytalk'          => 'Bäxäsem',
+'anontalk'        => 'Bu IP turında bäxäs',
+'navigation'      => 'Küçü',
+
+'currentevents'     => 'Xäzerge waqíğalar',
+'currentevents-url' => 'Xäzerge waqíğalar',
+
+'errorpagetitle'    => 'Xata',
+'returnto'          => '«$1» bitenä qaytu.',
+'tagline'           => "{{SITENAME}}'dan",
+'search'            => 'Ezläw',
+'searchbutton'      => 'Ezläw',
+'go'                => 'Küç',
+'searcharticle'     => 'Küç',
+'history'           => 'Bit taríxı',
+'history_short'     => 'Taríx',
+'info_short'        => 'Belem',
+'printableversion'  => 'Bastırulı yurama',
+'edit'              => 'Üzgärtü',
+'editthispage'      => 'Bit üzgärtü',
+'delete'            => 'Beter',
+'deletethispage'    => 'Beter bu bitne',
+'undelete_short'    => 'Torğız',
+'protect'           => 'Yaqla',
+'protectthispage'   => 'Yaqla bu bitne',
+'unprotect'         => 'İreklä',
+'unprotectthispage' => 'İreklä bu biten',
+'newpage'           => 'Yaña bit',
+'talkpage'          => 'Bit turında bäxäs',
+'specialpage'       => 'Maxsus Bit',
+'personaltools'     => 'Şäxes qoralı',
+'postcomment'       => 'Yazma qaldıru',
+'addsection'        => '+',
+'articlepage'       => 'Eçtälek biten kürü',
+'talk'              => 'Bäxäs',
+'toolbox'           => 'Äsbäptirä',
+'userpage'          => 'Äğzä biten qaraw',
+'imagepage'         => 'Räsem biten qaraw',
+'viewtalkpage'      => 'Bäxäsen qaraw',
+'otherlanguages'    => 'Başqa tellärdä',
+'redirectedfrom'    => '(«$1» bitennän yünältelde)',
+'viewcount'         => 'Bu bit $1 märtäbä qaralğan.',
+'copyright'         => 'Eçtälek $1 buyınça ireşüle.',
+'protectedpage'     => 'Yaqlanğan bit',
+'jumpto'            => 'Küç:',
+'jumptosearch'      => 'ezläw',
+
+'retrievedfrom'   => 'Bu bitneñ çığanağı: "$1"',
+'newmessageslink' => 'yaña xäbär',
+'editsection'     => 'üzgärtü',
+'editold'         => 'üzgärtü',
+'toc'             => 'Eçtälek tezmäse',
+'showtoc'         => 'kürsät',
+'hidetoc'         => 'yäşer',
+'thisisdeleted'   => 'Qaraw/torğızu: $1',
+'restorelink'     => '$1 beterelgän bit',
+'feedlinks'       => 'Tasma:',
+
+# Short words for each namespace, by default used in the 'article' tab in monobook
+'nstab-main'      => 'Mäqälä',
+'nstab-user'      => 'Äğzä bite',
+'nstab-media'     => 'Media bite',
+'nstab-special'   => 'Maxsus',
+'nstab-project'   => 'Proyekt bite',
+'nstab-image'     => 'Räsem',
+'nstab-mediawiki' => 'Sätir',
+'nstab-template'  => 'Äzerlämä',
+'nstab-help'      => 'Yärdäm',
+'nstab-category'  => 'Cíıntıq',
+
+# Main script and global functions
+'nosuchaction'      => 'Andí ğämäl barlıqta yuq',
+'nosuchspecialpage' => 'Andí maxsus bit yuq',
+
+# General errors
+'error'           => 'Xata',
+'databaseerror'   => 'Biremlek xatası',
+'readonly'        => 'Biremlek yabılğan ide',
+'internalerror'   => 'Eçke xata',
+'filecopyerror'   => 'Bu «$1» biremen «$2» iseme belän küpli almím.',
+'filerenameerror' => 'Bu «$1» biremen «$2» iseme belän küçerä almím.',
+'filedeleteerror' => 'Bu «$1» biremen beterep bulmí.',
+'filenotfound'    => 'Bu «$1» biremen tabalmím.',
+'formerror'       => 'Xata: formını künderä almím',
+'badtitle'        => 'Yaraqsız başlıq',
+'badtitletext'    => 'The requested page title was invalid, empty, or an incorrectly linked inter-language or inter-wiki title. It may contain one more characters which cannot be used in titles.',
+'perfdisabled'    => 'Kiçer! Biremlekneñ äkren buluına säbäple, bu mömkinlek waqıtlıça sünderelgän ide.',
+'perfdisabledsub' => '$1 biteneñ saqlanğan yuraması bu:', # obsolete?
+'perfcached'      => 'Astağı belem alxäterdän alındı wä anıñ xäzerge xäl belän turı kilmäwe bar:',
+'viewsource'      => 'Mäqälä çığanağı',
+
+# Login and logout pages
+'logouttitle'           => 'Äğzä çığuı',
+'welcomecreation'       => "== Räxim it, $1! ==
+
+Sineñ xísabıñ yasaldı. {{SITENAME}}'dağı köyläwläreñne dä üzgärtergä onıtma.",
+'loginpagetitle'        => 'Atama belän kerü',
+'yourname'              => 'İreşü isemeñ',
+'yourpassword'          => 'Sersüzeñ',
+'yourpasswordagain'     => 'Sersüz qabat',
+'remembermypassword'    => 'Tanı mine kergändä.',
+'loginproblem'          => '<b>Kerüeñ waqıtında nindider qíınlıq bulıp çıqtı.</b><br />Qabat kerep qara!',
+'alreadyloggedin'       => '<strong>«$1» atlı äğzä, sin kergänseñ iç inde!</strong><br />',
+'login'                 => 'İreşü',
+'userlogin'             => 'Xísap yasaw yä ki kerü',
+'logout'                => 'Çığış',
+'userlogout'            => 'Çığış',
+'notloggedin'           => 'Kermädeñ äle',
+'createaccount'         => 'Yaña xísap yasaw',
+'createaccountmail'     => 'email buyınça',
+'badretype'             => 'Kertelgän sersüzeñ kileşmi.',
+'userexists'            => 'Äle genä kertkäneñ äğzä iseme qullanıla inde. Başqa isem sayla zínhar.',
+'youremail'             => "Email'ıñ*",
+'yourrealname'          => 'Çın isemeñ*',
+'yournick'              => 'Atamañ:',
+'loginerror'            => 'Kerü xatası',
+'loginsuccesstitle'     => 'Uñışlı kergänbez',
+'loginsuccess'          => "Sin {{SITENAME}}'ğa «$1» atama belän kergän buldıñ.",
+'wrongpassword'         => 'Sin kertän sersüz xatalı axrısı. Tağın kertep qara zínhar.',
+'mailmypassword'        => 'Yaña sersüzne xat belän cibär',
+'passwordremindertitle' => '{{SITENAME}} sersüz xäterlätkeçe',
+'passwordsent'          => 'Yaña sersüz «$1» terkälüendä kertelgän e-mail buyınça cibärelde.
+Anı alğaç monda tağın kerep qara.',
+'mailerror'             => 'Xat künderü xatası: $1',
+
+# Edit page toolbar
+'bold_sample'     => 'Qalın mäten',
+'bold_tip'        => 'Qalın mäten',
+'italic_sample'   => 'Awışlı mäten',
+'italic_tip'      => 'Awışlı mäten',
+'link_sample'     => 'Läñker başlığı',
+'link_tip'        => 'Eçke läñker',
+'extlink_sample'  => 'http://www.example.com läñker başlığı',
+'extlink_tip'     => 'Tışqı läñker (alğı http:// quşımtasın onıtma)',
+'headline_sample' => 'Başlıq mätene',
+'headline_tip'    => '2. däräcäle başlıq',
+'math_sample'     => 'Formulnı monda kert',
+'math_tip'        => 'İsäpläw formulı (LaTeX)',
+'nowiki_sample'   => 'Taqır mäten urnaştıram',
+'nowiki_tip'      => 'Wiki-qalıp eşkärtmäskä',
+'image_sample'    => 'Example.jpg',
+'image_tip'       => 'Quşılğan räsem',
+'media_sample'    => 'Example.ogg',
+'sig_tip'         => 'Ímzañ belän zaman/waqıt tamğası',
+'hr_tip'          => 'Yatma sızıq (siräk qullan)',
+
+# Edit pages
+'summary'              => 'Yomğaq',
+'subject'              => 'Ni turında/başlıq',
+'minoredit'            => 'Bu waq-töyäk üzgärmä genä',
+'watchthis'            => 'Bitne küzätep torası',
+'savearticle'          => 'Saqla biremne',
+'preview'              => 'Küzläw',
+'showpreview'          => 'Qarap alu...',
+'blockedtitle'         => 'Qullanuçı tíıldı',
+'whitelistedittitle'   => 'Üzgärtü öçen, kerü täläp itelä',
+'whitelistedittext'    => 'Bitlärne üzgärtü öçen,
+säxifägä isem belän [[Special:Userlogin|keräse]].',
+'whitelistreadtitle'   => 'Uqu öçen kerü täläp itelä',
+'whitelistreadtext'    => 'Bitlärne uqu öçen,
+säxifägä isem belän [[Special:Userlogin|keräse]].',
+'whitelistacctitle'    => 'Siña xísap yasaw tíılğan',
+'loginreqtitle'        => 'Kerergä Kiräk',
+'loginreqlink'         => 'keräse',
+'accmailtitle'         => 'Sersüz künderelde.',
+'accmailtext'          => "Bu '$1' öçen digän sersüz '$2' adrésına cibärelde.",
+'newarticle'           => '(Yaña)',
+'newarticletext'       => "Bulmağan bitkä kürsätkän läñker buyınça küçkänseñ.
+Bu bit başlaw öçen, eçtälegen astağı qırda cía başla
+(kübräge [[Yärdäm:Eçtälek|yärdäm bitendä]] tarwírlana).
+Xata çığuınnan monda eläkkänseñ ikän, browserıñnıñ '''kire''' sädäfenä genä basası.",
+'clearyourcache'       => "'''İskärmä:''' Saqlawdan soñ, üzgärmälärne kürü öçen browserıñnıñ alxäteren buşatası bar: '''Mozilla:''' click ''reload''(yä ki ''ctrl-r''), '''IE / Opera:''' ''ctrl-f5'', '''Safari:''' ''cmd-r'', '''Konqueror''' ''ctrl-r''.",
+
+
+
+
+'updated'              => '(Yañartıldı)',
+'note'                 => '<strong>İskärmä:</strong>',
+
+
+
+'editing'              => 'Üzgärtü: $1',
+'editconflict'         => 'Üzgärtü qíınlığı: $1',
+'yourtext'             => 'Mäteneñ',
+'storedversion'        => 'Saqlanğan yurama',
+'editingold'           => '<strong>KİSÄTMÄ: Sin bu bitneñ iskergän yuramasın üzgärtäsen.
+Ägär sin monı saqlísıñ ikän, şul yuramadan soñ yasalğan üzgärmälär yuğalır.</strong>',
+'yourdiff'             => 'Ayırmalar',
+'longpagewarning'      => "KİSÄTMÄ: Bu bit zurlığı $1 KB; qayber browserlarda 32 KB'tan da zurraq bulğan bitlärne kürsätkändä qíınlıqlar bula.
+Zínhar, bu bitneñ wağraq kisäklärgä bülü turında uylap qara.",
+'protectedpagewarning' => 'KİSÄTMÄ: Bu bit yaqlanğan ide wä anı idäräçe xoquqı iä bulğan genä keşe üzgärtä ala. Kübrägen [[Project:Bit_yaqlaw_qullanması|bit yaqlaw qullanmasında]] uqıp bula.',
+
+# History pages
+'loadhist'   => 'Bit taríxın yökläw',
+'currentrev' => 'Ağımdağı yurama',
+'cur'        => 'xäzer',
+'next'       => 'kiläse',
+'last'       => 'soñğı',
+'orig'       => 'çığn',
+
+# Diffs
+'difference'              => '(Yuramalar ayırması)',
+'lineno'                  => '$1. yul:',
+'editcurrent'             => 'Bu bitneñ ağımdağı yuramanı üzgärtü',
+'compareselectedversions' => 'Saylanğan yurama çağıştıru',
+
+# Search results
+'searchresults'     => 'Ezläw näticäse',
+'badquery'          => 'Ezläw sorawı xata belän cíılğan',
+'titlematches'      => 'Mäqälä başlığı kileşä',
+'notitlematches'    => 'Kileşkän bit başlığı yuq',
+'notextmatches'     => 'Kileşkän bit mätene yuq',
+'prevn'             => 'uzğan $1',
+'nextn'             => 'kiläse $1',
+'showingresults'    => 'Asta <b>$1</b> näticä kürsätelä <b>$2</b>. keremnän başlap.',
+'showingresultsnum' => 'Asta <b>$3</b> näticä kürsätelä <b>$2</b>. keremnän başlap.',
+'powersearch'       => 'Ezläw',
+'blanknamespace'    => '(Töp)',
+
+# Preferences page
+'preferences'           => 'Köyläwlar',
+'mypreferences'         => 'Köyläwem',
+'prefsnologin'          => 'Kermägänseñ',
+'qbsettings'            => 'Tiztirä caylawı',
+'changepassword'        => 'Sersüz üzgärtü',
+'skin'                  => 'Tışlaw',
+'dateformat'            => 'Waqıt qalıbı',
+'math_failure'          => 'Uqí almadım',
+'math_unknown_error'    => 'tanılmağan xata',
+'math_unknown_function' => 'tanılmağan funksí',
+'math_lexing_error'     => 'nöhü xatası',
+'math_syntax_error'     => 'nöhü xatası',
+'prefs-misc'            => 'Başqa köyläwlär',
+'saveprefs'             => 'Saqla köyläwlärne',
+'resetprefs'            => 'Awdar köyläwne',
+'oldpassword'           => 'İske sersüz',
+'newpassword'           => 'Yaña sersüz',
+'retypenew'             => 'Yaña sersüz (qabat)',
+'textboxsize'           => 'Mätenqır ülçäme',
+'rows'                  => 'Yul:',
+'columns'               => 'Buy:',
+'searchresultshead'     => 'Ezläw',
+'resultsperpage'        => 'Bit sayın näticä sanı',
+'recentchangescount'    => 'Soñğı üzgärtmä tezmäsendä başlıq sanı',
+'savedprefs'            => 'Köyläwläreñ saqlandı.',
+'timezonelegend'        => 'Waqıt quşağı',
+'localtime'             => 'Cirle waqıt belän kürsätäse',
+'timezoneoffset'        => 'Çigenü',
+'servertime'            => 'Serverda xäzerge waqıt',
+'guesstimezone'         => 'Browserdan alası',
+'defaultns'             => 'Ğädättä bu isemarada ezlise:',
+'files'                 => 'Fayllar',
+
+'group-bot-member' => 'Bot',
+
+# Recent changes
+'changes'           => 'üzgärmä',
+'recentchanges'     => 'Soñğı üzgärtmälär',
+'recentchangestext' => 'Bu bittä wikidä bulğan iñ soñğı üzgärtmäläre kürsätelä.',
+'rcnote'            => 'Asta söñğı <strong>$2</strong> kön eçendä bulğan soñğı <strong>$1</strong> üzgärmä kürsätelä.',
+'rcnotefrom'        => 'Asta <b>$2</b> zamanınnan soñ bulğan üzgärtmälär (<b>$1</b> tikle).',
+'rclistfrom'        => '$1 zamannan soñ bulğan üzgärtmälär.',
+'rclinks'           => 'Soñğı $2 kön eçendä bulğan $1 üzgärtmä<br />$3',
+'diff'              => 'ayırma',
+'hist'              => 'taríx',
+'hide'              => 'yäşer',
+'show'              => 'kürsät',
+'minoreditletter'   => 'w',
+'newpageletter'     => 'Y',
+'boteditletter'     => 'b',
+'sectionlink'       => '→',
+
+# Upload
+'upload'            => 'Birem yökläw',
+'uploadbtn'         => 'Yöklä biremne',
+'reupload'          => 'Qabat yökläw',
+'reuploaddesc'      => 'Yökläw bitenä qaytu.',
+'uploadnologin'     => 'Kermädeñ',
+'uploadnologintext' => 'Birem yökläw öçen,
+säxifägä isem belän [[Special:Userlogin|keräse]].',
+'uploaderror'       => 'Yökläw xatası',
+'uploadlog'         => 'yökläw könlege',
+'uploadlogpage'     => 'Yökläw_könlege',
+'uploadlogpagetext' => 'Asta soñğı arada yöklängän birem tezmäse kiterelä.',
+'filename'          => 'Birem iseme',
+'filedesc'          => 'Yomğaq',
+'fileuploadsummary' => 'Yomğaq:',
+'filestatus'        => 'Qälämxaq xäläte',
+'filesource'        => 'Çığanaq',
+'copyrightpage'     => '{{ns:project}}:Qälämxaq',
+'copyrightpagename' => '{{SITENAME}} qälämxaqı',
+'uploadedfiles'     => 'Yöklängän biremnär',
+'ignorewarning'     => 'Kisätmägä qaramíçı biremne härxäldä saqla.',
+'minlength'         => 'Räsem iseme iñ kimendä öç xäreftän bulırğa tieş.',
+'badfilename'       => 'Räsem iseme «$1» itep üzgärtelde.',
+'badfiletype'       => '«.$1» törendä räsemnärne qullanırğa kiñäş itelmi.',
+'successfulupload'  => 'Yökläw uñışlı uzdı',
+'uploadwarning'     => 'Yökläw kisätmäse',
+'savefile'          => 'Saqla biremne',
+'uploadedimage'     => 'yöklände "$1"',
+'uploaddisabled'    => 'Ğafu it, yökläw sünderelgän kileş tora.',
+'uploadcorrupt'     => 'Bu birem yä üze watıq, yä quşımtası yaraqsız. Birem tikşerüdän soñ qabat yöklä zínhar.',
+
+# Image list
+'imagelist'           => 'Räsem tezmäse',
+'ilsubmit'            => 'Ezläw',
+'showlast'            => 'Soñğı $1 räsem kürsätäse, $2 tezep.',
+'byname'              => 'isem buyınça',
+'bydate'              => 'waqıt buyınça',
+'bysize'              => 'zurlıq buyınça',
+'imgdelete'           => 'beter',
+'imgdesc'             => 'añlatma',
+'imgfile'             => 'fayl',
+'imglegend'           => 'Añlatma: (täsw) = räsem täswiren qaraw/üzgärtü.',
+'imghistory'          => 'Räsem taríxı',
+'revertimg'           => 'qayart',
+'deleteimg'           => 'beter',
+'deleteimgcompletely' => 'Bar yuramalarnı beter',
+'imghistlegend'       => 'Añlatma: (ağımdağı) = ağımdağı räsem, (beter) = iske
+yurama beterü, (qaytart) = iske yurama qaytartu.
+<br /><i>Fälän köndä yöklängän räsemne kürü öçen şul könne törtäse</i>.',
+'imagelinks'          => 'Räsem läñkerläre',
+
+# Statistics
+'statistics' => 'Nöfüs',
+'sitestats'  => '{{SITENAME}} nöfüse',
+'userstats'  => 'Qullanuçı nöfüse',
+
+'disambiguations'     => 'Saylaqbit tezmäse',
+'disambiguationspage' => '{{ns:template}}:Disambig',
+
+'doubleredirects' => 'Küpmälle yünältü',
+
+'brokenredirects'     => 'Watıq Yünältülär',
+'brokenredirectstext' => 'Kiläse yünältülär bulmağan bitlärgä qarílar.',
+
+# Miscellaneous special pages
+'nbytes'              => '$1 bayt',
+'nlinks'              => '$1 läñker',
+'nviews'              => '$1 qaraw',
+'lonelypages'         => 'Yätim bitlär',
+'uncategorizedpages'  => 'Cíıntıqlanmağan bitlär',
+'unusedimages'        => 'Qullanılmağan räsemnär',
+'popularpages'        => 'Ğämäli bitlär',
+'wantedpages'         => 'Kiräkle bitlär',
+'allpages'            => 'Bar bitlär',
+'randompage'          => 'Berär bit kürü',
+'shortpages'          => 'Qısqa bitlär',
+'longpages'           => 'Ozın bitlär',
+'listusers'           => 'Äğzä isemlege',
+'specialpages'        => 'Maxsus bitlär',
+'spheading'           => 'Bar keşelär öçen',
+'recentchangeslinked' => 'Bäyle üzgärmä',
+'rclsub'              => '(«$1» bite belän bäyle bitlärgä)',
+'newpages'            => 'Yaña bitlär',
+'ancientpages'        => 'İñ iske bitlär',
+'intl'                => 'Tel-ara läñker',
+'move'                => 'Küçerü',
+'movethispage'        => 'Bu bit küçerü',
+'booksources'         => 'Kitap çığanağı',
+'categoriespagetext'  => "Bu wiki'dä kiläse cíıntıqlar bar.",
+'version'             => 'Yurama',
+
+# Special:Allpages
+'nextpage' => 'Kiläse bit ($1)',
+
+# E-mail user
+'emailuser'     => 'E-mail künderü',
+'emailpage'     => 'E-mail künderü',
+'noemailtitle'  => 'E-mail adres kürsätelmäde',
+'emailfrom'     => 'Kemnän',
+'emailto'       => 'Kemgä',
+'emailsubject'  => 'Ni turında',
+'emailmessage'  => 'Xäbär',
+'emailsend'     => 'Künder',
+'emailsent'     => 'E-mail künderelde',
+'emailsenttext' => "E-mail'ıñ künderelde.",
+
+# Watchlist
+'watchlist'         => 'Saqtezmäm',
+'mywatchlist'         => 'Saqtezmäm',
+'nowatchlist'       => 'Saqtezmäñdä kertemnär yuq.',
+'watchnologin'      => 'Kermädeñ',
+'watchnologintext'  => 'Saqtezmäñ üzgärtü öçen, säxifägä isem belän [[Special:Userlogin|keräse]].',
+'addedwatch'        => 'Saqtezmägä quşıldı',
+'addedwatchtext'    => '«[[:$1]]»  isemle mäqälä [[{{ns:special}}:Saqtezmä|saqtezmäseñä]] salındı.
+Future changes to this page and its associated Talk page will be listed there,
+and the page will appear \'\'\'bolded\'\'\' in the [[Special:Recentchanges|list of recent changes]] to
+make it easier to pick out.
+
+If you want to remove the page from your watchlist later, click "Unwatch" in the sidebar.',
+'removedwatch'      => 'Saqtezmädän salındı',
+'removedwatchtext'  => '«[[:$1]]» atlı bit saqtezmäñnän töşerelde.',
+'watch'             => 'Saqlaw',
+'watchthispage'     => 'Bitne küzätep torası',
+'notanarticle'      => 'Eçtälek belän bit tügel',
+'removechecked'     => 'Tamğalanğan keremne saqtezmädän salası',
+'watchlistcontains' => 'Saqtezmäñ eçenä $1 bit kertelgän.',
+'removingchecked'   => 'Tamğalanğan keremnärne saqtezmädän salu...',
+'couldntremove'     => 'Bu «$1» keremne beterä almím...',
+'wlnote'            => 'Asta soñğı <b>$2</b> säğät eçendä yasalğan $1 üzgärmä kürsätelä.',
+'wlsaved'           => 'Bu yurama säqtezmäñdä saqlanğan buldı',
+
+# Delete/protect/revert
+'deletepage'         => 'Beter bitne',
+'confirm'            => 'Raslaw',
+'excontent'          => 'eçtälege ide:',
+'exblank'            => 'bit buş ide',
+'confirmdelete'      => 'Beterüne raslaw',
+'deletesub'          => '(«$1» beterü)',
+'historywarning'     => 'Íğtíbar: Beterergä telägän biteneñ üz taríxı bar:',
+'actioncomplete'     => 'Ğämäl tämam',
+'deletedtext'        => '«$1» beterelgän buldı.
+Soñğı beterülär $2 bitendä terkälenä.',
+'deletedarticle'     => '«$1» beterelde',
+'dellogpage'         => 'Beterü_köndälege',
+'deletionlog'        => 'beterü köndälege',
+'reverted'           => 'Aldağı yuramanı qaytart',
+'deletecomment'      => 'Beterü säbäbe',
+'imagereverted'      => 'Aldağı yuramağa küçü uñışlı uzdı.',
+'editcomment'        => 'Bu üzgärtü taswírı: "<i>$1</i>".', # only shown if there is an edit comment
+'protectlogpage'     => 'Yaqlaw_köndälege',
+'protectedarticle'   => '[[$1]] yaqlandı',
+'unprotectedarticle' => '[[$1]] ireklände',
+'protectsub'         => '(«$1» yaqlaw)',
+'confirmprotect'     => 'Yaqlawnı raslaw',
+'protectcomment'     => 'Yaqlaw säbäbe',
+'confirmunprotect'   => 'Yaqlaw töşerüen raslaw',
+'unprotectcomment'   => 'İrekläw säbäbe',
+
+# Undelete
+'undelete'         => 'Beterelgän bit torğızu',
+'undeletearticle'  => 'Beterelgän bit torğızu',
+'undeletebtn'      => 'Torğız!',
+'undeletedarticle' => '«$1» torğızıldı',
+
+# Contributions
+'contributions' => 'Äğzä qatnaşuı',
+'mycontris'     => 'Qatnaşuım',
+'contribsub2'    => '$1 ($2) öçen',
+'uctop'         => ' (öskä)',
+
+# What links here
+'whatlinkshere' => 'Kem bäyle moña',
+'notargettitle' => 'Maqsatsız',
+'linklistsub'   => '(Läñker tezmäse)',
+'nolinkshere'   => 'Moña bäyle bitlär yuq.',
+'isredirect'    => 'küçerelü bite',
+
+# Block/unblock
+'blockip'            => 'Qullanuçı tíu',
+'ipaddress'          => 'IP Adres/äğzäisem',
+'ipbexpiry'          => 'İskerer',
+'ipbreason'          => 'Säbäp',
+'ipbsubmit'          => 'Bu keşene tíu',
+'badipaddress'       => 'Xatalı IP adrésı',
+'blockipsuccesssub'  => 'Tíu uzdı',
+'blockipsuccesstext' => '«$1» tíılğan buldı.
+<br />See [[Special:Ipblocklist|IP block list]] to review blocks.',
+'unblockip'          => 'Äğzäne irekläw',
+'ipusubmit'          => 'Bu adresnı irekläw',
+'ipblocklist'        => 'Tíılğan IP/äğzä tezmäse',
+'blocklink'          => 'tíu',
+'contribslink'       => 'qatnaşuı',
+'blocklogpage'       => 'Tíu_köndälege',
+'ipb_expiry_invalid' => 'İskärü waqıtı xatalı.',
+'ip_range_invalid'   => 'Xatalı IP arası.',
+'proxyblocker'       => 'Proxy tíu',
+'proxyblocksuccess'  => 'Buldı.',
+'sorbs'              => 'DNSBL',
+
+# Developer tools
+'lockdb'              => 'Biremlekne yozaqlaw',
+'unlockdb'            => 'Biremlek irekläw',
+'lockconfirm'         => 'Äye, min biremlekne çınlap ta yozaqlarğa buldım.',
+'lockbtn'             => 'Biremlekne yozaqlaw',
+'lockdbsuccesssub'    => 'Biremlek yözaqlandı',
+'unlockdbsuccesssub'  => 'Biremlek yozağı salındı',
+'unlockdbsuccesstext' => 'Bu biremlek yozağı salınğan ide.',
+
+# Make sysop
+
+# Move page
+'movepage'         => 'Bit küçerü',
+'movepagetalktext' => "Bäyle bulğan bäxäs bite kiläse oçraqlarda töp bite belän beryulı '''küçerelmi qala''':
+* Töp bit [[Yärdäm:İsemara|isemara]] arqılı küçerelä;
+* Yaña başlıq astında buş bulmağan ikençe bit bulğanda;
+* Astağı tamğaqır sünderelgän bulsa.
+
+Bu äytelgän oçraqlarda bäxäs biten ayırım küçerergä turı kiler.",
+'movearticle'      => 'Küçeräse bit',
+'movenologin'      => 'Kermädeñ',
+'newtitle'         => 'Yaña başlıq',
+'movepagebtn'      => 'Küçer bitne',
+'pagemovedsub'     => 'Küçerü uñışlı uzdı',
+'pagemovedtext'    => 'Bu «[[$1]]» atlı bit «[[$2]]» iseme belän küçerelde.',
+'articleexists'    => 'Andí atlı bit bar inde,
+yä isä saylanğan isem yaraqsız buldı. Başqa isem sayla zínhar.',
+'movedto'          => 'küçerelde:',
+'movetalk'         => 'Mömkin bulsa, «bäxäs» biten dä küçer.',
+'talkpagemoved'    => 'Aña bäyle bäxäs bite şulay uq küçerelde.',
+'talkpagenotmoved' => 'Aña bäyle bäxäs bite <strong>küçerelmäde</strong>.',
+'1movedto2'        => '$1 moña küçte: $2',
+'1movedto2_redir'  => '$1 moña küçte: $2 (yünältü aşa)',
+
+# Namespace 8 related
+'allmessages'     => 'Säxifäneñ bar sätirläre',
+'allmessagestext' => 'Bu säxifäneñ MediaWiki: atarasında bulğan yazmalar tezmäse.',
+
+# Thumbnails
+'thumbnail-more' => 'Zuraytası',
+'missingimage'   => '<b>Bulmağan räsem</b><br /><i>$1</i>',
+
+# Special:Import
+'import'        => 'Bitlärne yökläw',
+'importfailed'  => 'Yökläw xatası: $1',
+'importnotext'  => 'Buş yä ki mäten tügel',
+'importsuccess' => 'Yökläw uñışlı buldı!',
+
+# Keyboard access keys for power users
+'accesskey-search'                  => 'f',
+'accesskey-minoredit'               => 'i',
+'accesskey-save'                    => 's',
+'accesskey-preview'                 => 'p',
+'accesskey-diff'                    => 'v',
+'accesskey-compareselectedversions' => 'v',
+'accesskey-watch'                   => 'w',
+
+# Tooltip help for some actions, most are in Monobook.js
+'tooltip-search'    => "{{SITENAME}}'dä ezläw",
+'tooltip-minoredit' => 'Bu üzgärtmä waq-töyäk dip bilgelä',
+'tooltip-save'      => 'Üzgärtüne saqlaw',
+
+# Stylesheets
+'common.css'   => '/** CSS placed here will be applied to all skins */',
+'monobook.css' => '/* CSS placed here will affect users of the Monobook skin */',
+
+# Attribution
+'anonymous'     => "{{SITENAME}}'nıñ tanılmağan kerüçe",
+'siteuser'      => '{{SITENAME}} ägzäse $1',
+'and'           => 'wä',
+'othercontribs' => '«$1» eşenä nigezlänä.',
+'others'        => 'başqalar',
+'siteusers'     => '{{SITENAME}} ägzäse $1',
+'creditspage'   => 'Bit yasawında qatnaşqan',
+
+# Spam protection
+'spamprotectiontitle'  => 'Çüpläwdän saqlanu eläge',
+'subcategorycount'     => 'Bu cíıntıqnıñ $1 eçke cíıntıq bar.',
+'categoryarticlecount' => 'Bu cíıntıqqa $1 mäqälä kerä.',
+
+# Info page
+'infosubtitle' => 'Bit turında',
+'numedits'     => 'Üzgärtü sanı (mäqälä):',
+'numtalkedits' => 'Üzgärtü sanı (bäxäs bite):',
+'numwatchers'  => 'Küzätep toruçı sanı:',
+
+# Monobook.js: tooltips and access keys for monobook
+'monobook.js' => '/* Deprecated; use [[MediaWiki:common.js]] */',
+
+'accesskey-pt-userpage' => '.',
+'tooltip-pt-userpage' => 'Şäxsi bitem',
+'accesskey-pt-anonuserpage' => '.',
+'tooltip-pt-anonuserpage' => 'The user page for the ip you',
+'accesskey-pt-mytalk' => 'n',
+'tooltip-pt-mytalk' => 'Bäxäs bitem',
+'accesskey-pt-anontalk' => 'n',
+'tooltip-pt-anontalk' => 'Discussion about edits from this ip address',
+'accesskey-pt-preferences' => '',
+'tooltip-pt-preferences' => 'Köyläwlärem',
+'accesskey-pt-watchlist' => 'l',
+'tooltip-pt-watchlist' => 'The list of pages you',
+'accesskey-pt-mycontris' => 'y',
+'tooltip-pt-mycontris' => 'Qatnaşuım tezmäse',
+'accesskey-pt-login' => 'o',
+'tooltip-pt-login' => 'You are encouraged to log in, it is not mandatory however.',
+'accesskey-pt-anonlogin' => 'o',
+'tooltip-pt-anonlogin' => 'You are encouraged to log in, it is not mandatory however.',
+'accesskey-pt-logout' => '',
+'tooltip-pt-logout' => 'Çığış',
+'accesskey-ca-talk' => 't',
+'tooltip-ca-talk' => 'Discussion about the content page',
+'accesskey-ca-edit' => 'e',
+'tooltip-ca-edit' => 'You can edit Bu bit. Please use the preview button before saving.',
+'accesskey-ca-addsection' => '+',
+'tooltip-ca-addsection' => 'Bu bäxästä yazma östäw.',
+'accesskey-ca-viewsource' => 'e',
+'tooltip-ca-viewsource' => 'Bu bit yaqlanğan ide. Anıñ çığanağın kürä alasıñ.',
+'accesskey-ca-history' => 'h',
+'tooltip-ca-history' => 'Bu bitneñ soñğı yuramaları.',
+'accesskey-ca-protect' => '=',
+'tooltip-ca-protect' => 'Bu bit yaqlaw',
+'accesskey-ca-delete' => 'd',
+'tooltip-ca-delete' => 'Bu bit beterü',
+'accesskey-ca-undelete' => 'd',
+'tooltip-ca-undelete' => 'Restore the edits done to Bu bit before it was deleted',
+'accesskey-ca-move' => 'm',
+'tooltip-ca-move' => 'Bu bit küçerü',
+'accesskey-ca-nomove' => '',
+'tooltip-ca-nomove' => 'Bu bit küçerü öçen xoquqlarıñ citmi',
+'accesskey-ca-watch' => 'w',
+'tooltip-ca-watch' => 'Bu bitne saqtezmägä östäw',
+'accesskey-ca-unwatch' => 'w',
+'tooltip-ca-unwatch' => 'Bu bitne saqtezmädän töşerü',
+'accesskey-search' => 'e',
+'tooltip-search' => 'Äydä, ezlä monı',
+'accesskey-p-logo' => '',
+'tooltip-p-logo' => 'Täwge Bit',
+'accesskey-n-mainpage' => 'z',
+'tooltip-n-mainpage' => 'Täwge Bitkä küçü',
+'accesskey-n-portal' => '',
+'tooltip-n-portal' => 'About the project, what you can do, where to find things',
+'accesskey-n-currentevents' => '',
+'tooltip-n-currentevents' => 'Find background information on current events',
+'accesskey-n-recentchanges' => 'r',
+'tooltip-n-recentchanges' => 'The list of recent changes in the wiki.',
+'accesskey-n-randompage' => 'x',
+'tooltip-n-randompage' => 'Berär nindi bit kürsätä',
+'accesskey-n-help' => '',
+'tooltip-n-help' => 'The place to find out.',
+'accesskey-n-sitesupport' => '',
+'tooltip-n-sitesupport' => 'Ximäyäçe bul',
+'accesskey-t-whatlinkshere' => 'j',
+'tooltip-t-whatlinkshere' => 'List of all wiki pages that link here',
+'accesskey-t-recentchangeslinked' => 'k',
+'tooltip-t-recentchangeslinked' => 'Recent changes in pages linking to Bu bit',
+'accesskey-feed-rss' => '',
+'tooltip-feed-rss' => 'Bu bitneñ RSS tasması',
+'accesskey-feed-atom' => '',
+'tooltip-feed-atom' => 'Bu bitneñ Atom tasması',
+'accesskey-t-contributions' => '',
+'tooltip-t-contributions' => 'View the list of contributions of this user',
+'accesskey-t-emailuser' => '',
+'tooltip-t-emailuser' => 'Send a mail to this user',
+'accesskey-t-upload' => 'u',
+'tooltip-t-upload' => 'Upload images or media files',
+'accesskey-t-specialpages' => 'q',
+'tooltip-t-specialpages' => 'Bar maxsus bitlär tezmäse',
+'accesskey-ca-nstab-main' => 'c',
+'tooltip-ca-nstab-main' => 'Bu bit eçtälegen kürü',
+'accesskey-ca-nstab-user' => 'c',
+'tooltip-ca-nstab-user' => 'Bu äğzä biten kürü',
+'accesskey-ca-nstab-media' => 'c',
+'tooltip-ca-nstab-media' => 'Bu media biten kürü',
+'accesskey-ca-nstab-special' => '',
+'tooltip-ca-nstab-special' => 'Bu bit maxsus, wä sin anı üzgärtä almísıñ.',
+'accesskey-ca-nstab-project' => 'a',
+'tooltip-ca-nstab-project' => 'Proékt biten kürü',
+'accesskey-ca-nstab-image' => 'c',
+'tooltip-ca-nstab-image' => 'Bu räsem biten kürü',
+'accesskey-ca-nstab-mediawiki' => 'c',
+'tooltip-ca-nstab-mediawiki' => 'Bu säxifä sätiren kürü',
+'accesskey-ca-nstab-template' => 'c',
+'tooltip-ca-nstab-template' => 'Bu qalıpnı kürü',
+'accesskey-ca-nstab-help' => 'c',
+'tooltip-ca-nstab-help' => 'Bu yärdäm biten kürü',
+'accesskey-ca-nstab-category' => 'c',
+'tooltip-ca-nstab-category' => 'View the category page',
+
+# Common.js: contains nothing but a placeholder comment
+'common.js' => '/* Any JavaScript here will be loaded for all users on every page load. */',
+
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesTy.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesTy.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesTy.php	(revision 1280)
@@ -0,0 +1,8 @@
+<?php
+/** Tahitian (Reo Mā`ohi)
+  *
+  * @addtogroup Language
+  */
+
+$fallback = 'fr';
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesTyv.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesTyv.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesTyv.php	(revision 1280)
@@ -0,0 +1,303 @@
+<?php
+/** Tyvan localization (Тыва дыл)
+ * @addtogroup Language
+ */
+
+# From friends at tyvawiki.org
+
+$namespaceNames = array(
+	NS_MEDIA            => 'Медиа', //Media
+	NS_SPECIAL          => 'Тускай', //Special
+	NS_MAIN	            => '',
+	NS_TALK	            => 'Чугаа', //Talk
+	NS_USER             => 'Aжыглакчы', //User
+	NS_USER_TALK        => 'Aжыглакчы_чугаа', //User_talk
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK     => '$1_чугаа', //_talk
+	NS_IMAGE            => 'Чурук', //Image
+	NS_IMAGE_TALK       => 'Чурук_чугаа', //Image_talk
+	NS_MEDIAWIKI        => 'МедиаВики', //MediaWiki
+	NS_MEDIAWIKI_TALK   => 'МедиаВики_чугаа', //MediaWiki_talk
+	NS_TEMPLATE         => 'Хээ', //Template
+	NS_TEMPLATE_TALK    => 'Хээ_чугаа', //Template_talk
+	NS_HELP             => 'Дуза', //Help
+	NS_HELP_TALK        => 'Дуза_чугаа', //Help_talk
+	NS_CATEGORY         => 'Бөлүк', //Category
+	NS_CATEGORY_TALK    => 'Бөлүк_чугаа', //Category_talk
+);
+
+$skinNames = array(
+	'standard' => 'Classic', //Classic
+	'nostalgia' => 'Nostalgia', //Nostalgia
+	'cologneblue' => 'Cologne Blue', //Cologne Blue
+	'davinci' => 'ДаВинчи', //DaVinci
+	'mono' => 'Моно', //Mono
+	'monobook' => 'Моно-Ном', //MonoBook
+	'myskin' => 'MySkin', //MySkin
+	'chick' => 'Chick' //Chick
+);
+
+$bookstoreList = array(
+	'ОЗОН' => 'http://www.ozon.ru/?context=advsearch_book&isbn=$1',
+	'Books.Ru' => 'http://www.books.ru/shop/search/advanced?as%5Btype%5D=books&as%5Bname%5D=&as%5Bisbn%5D=$1&as%5Bauthor%5D=&as%5Bmaker%5D=&as%5Bcontents%5D=&as%5Binfo%5D=&as%5Bdate_after%5D=&as%5Bdate_before%5D=&as%5Bprice_less%5D=&as%5Bprice_more%5D=&as%5Bstrict%5D=%E4%E0&as%5Bsub%5D=%E8%F1%EA%E0%F2%FC&x=22&y=8',
+	'Яндекс.Маркет' => 'http://market.yandex.ru/search.xml?text=$1',
+	'Amazon.com' => 'http://www.amazon.com/exec/obidos/ISBN=$1',
+	'AddALL' => 'http://www.addall.com/New/Partner.cgi?query=$1&type=ISBN',
+	'PriceSCAN' => 'http://www.pricescan.com/books/bookDetail.asp?isbn=$1',
+	'Barnes & Noble' => 'http://shop.barnesandnoble.com/bookSearch/isbnInquiry.asp?isbn=$1'
+);
+
+$fallback8bitEncoding = "windows-1251";
+
+
+$messages = array(
+
+# User preference toggles
+'tog-hideminor' => 'Сөөлгү өскерлиишкиннер арында бичии өскерлиишкиннер чажырар', //Hide minor edits in recent changes
+'tog-showtoolbar'		=> 'Редактолаар херекселтер көргүзер (JavaScript)', //Show edit toolbar (JavaScript)
+'tog-editondblclick' => 'Арынны өскертирде ийи катап базар (JavaScript)', //Edit pages on double click (JavaScript)
+
+'underline-always' => 'Кезээде', //Always
+'underline-never' => 'Кажан-даа', //Never
+'underline-default' => 'Browser default', //Browser default
+
+# dates
+'sunday' => 'Чеди дугаар хүн', //Sunday
+'monday' => 'Бир дугаар хүн', //Monday
+'tuesday' => 'Ийи дугаар хүн', //Tuesday
+'wednesday' => 'Үш дугаар хүн', //Wednesday
+'thursday' => 'Дөрт дугаар хүн', //Thursday
+'friday' => 'Беш дугаар хүн', //Friday
+'saturday' => 'Алды дугаар хүн', //Saturday
+'january' => 'Бир ай', //January
+'february' => 'ийи ай', //February
+'march' => 'Үш ай', //March
+'april' => 'Дөрт ай', //April
+'may_long' => 'Беш ай', //May
+'june' => 'Алды ай', //June
+'july' => 'Чеди ай', //July
+'august' => 'Сес ай', //August
+'september' => 'Тос ай', //September
+'october' => 'Он ай', //October
+'november' => 'Он бир ай', //November
+'december' => 'Он ийи ай', //December
+'jan' => '1.ай', //Jan
+'feb' => '2.ай', //Feb
+'mar' => '3.ай', //Mar
+'apr' => '4.ай', //Apr
+'may' => '5.ай', //May
+'jun' => '6.ай', //Jun
+'jul' => '7.ай', //Jul
+'aug' => '8.ай', //Aug
+'sep' => '9.ай', //Sep
+'oct' => '10.ай', //Oct
+'nov' => '11.ай', //Nov
+'dec' => '12.ай', //Dec
+
+# Bits of text used by many pages:
+#
+'categories' => 'Бөлүктер', //Categories
+'pagecategories' => 'Бөлүктер', //{{PLURAL:$1|Category|Categories}}
+'category_header' => '"$1" бөлүкте чүүлдер', //Articles in category $1
+'subcategories' => 'Бичии бөлүктер', //Subcategories
+
+'mainpage'		=> 'Кол Арын', //Main Page
+
+'about'			=> 'Дугайында', //About
+'aboutsite'		=> '{{SITENAME}} дугайында', //About {{SITENAME}}
+'aboutpage'		=> 'Project:Дугайында', //Project:About
+'article'		=> 'Азыраары арын', //Content page
+'help'			=> 'Дуза', //Help
+'helppage'		=> 'Дуза:Допчузу', //Help:Contents
+'sitesupport'   => 'Белектер', //Donations
+'newwindow'		=> '(чаа козенектен ажар)', //(opens in new window)
+'edithelppage'	=> 'Дуза:Өскертир', //Help:Editing
+'cancel'		=> 'Ап каар', //Cancel (Солуур)
+'qbfind'		=> 'Тывар', //Find
+'qbbrowse'		=> 'Көөр', //Browse
+'qbedit'		=> 'Редакторлаар', //Edit
+'qbpageoptions' => 'Бо арын', //This page
+'qbpageinfo'	=> 'Context', //Context
+'qbmyoptions'	=> 'Мээң арыннарым', //My pages
+'qbspecialpages'	=> 'Тускай арыннар', //Special pages
+'moredotdotdot'	=> 'Ам-даа...', //More...
+'mypage'		=> 'Мээң арыным', //My page
+'mytalk'		=> 'Мээң чугаалажырым', //My talk чугааm?
+'anontalk'		=> 'Бо ИП-адрестиң чугаа', //Talk for this IP
+'navigation' => 'Навигация', //Navigation
+
+
+'errorpagetitle' => "Частырыг", //Error
+'returnto'		=> "{{grammar:directive1|$1}} дедир.", //Return to $1.
+'tagline'      	=> "{{grammar:ablative|{{SITENAME}}}}", //From {{SITENAME}}
+'whatlinkshere'	=> 'Pages that link here', //Pages that link here
+'help'			=> 'Дуза', //Help
+'search'		=> 'Дилээр', //Search
+'searchbutton'	=> 'Дилээр', //Search
+'go'		=> 'Чоруур', //Go
+'searcharticle'		=> 'Чоруур', //Go
+'history'		=> 'Арынның Төөгүзү', //Page history
+'history_short' => 'Төөгү', //History
+'printableversion' => 'Саазынга үндүрерин көөр', //Printable version (Парлатынар арын)
+'permalink'     => 'Permanent link',
+'print' => 'Саазынга үндүрер', //Print
+'edit' => 'Өскертир', //Edit
+'editthispage'	=> 'Бо арынны өскертир', //Edit this page
+'delete' => 'Ап каар', //Delete
+'deletethispage' => 'Бо арынны ап каар', //Delete this page
+'protect' => 'Камгалал', //Protect
+'protectthispage' => 'Бо арынны камгалаар', //Protect this page
+'unprotect' => 'Камгалалды ап каар', //unprotect
+'unprotectthispage' => 'Бо арынның камгалалын ап каар', //Unprotect this page
+'newpage' => 'Чаа Арын', //New page
+'talkpage'		=> 'Бо арын дугайында чугаалажыр', //Discuss this page
+'specialpage' => 'Тускай Арын', //Special Page
+'personaltools' => 'Херекселдер',  //Personal tools
+'articlepage'	=> 'Допчу арынны көргүзер', //View content page
+'talk' => 'Чугаалажыр', //Discussion
+'userpage' => 'Ажыглакчыниң арынын көргүзер', //View user page
+'imagepage' => 	'Чурук арынын көргүзер', //View image page
+'viewtalkpage' => 'Чугаалажыры көргүзер', //View discussion
+'otherlanguages' => 'Өске дылдарга', //In other languages
+'lastmodifiedat'	=> 'Бо арын сөөлгү каттап $1 өскерилген.', //This page was last modified $2, $1.
+//'viewcount'		=> 'Бо арын $1 каттап ажыттынган.', //This page has been accesed $1 times.
+'retrievedfrom' => "\"$1\" арынында парлаттынган", //Retrieved from \"$1\"
+'newmessageslink' => 'чаа чагаалар', //new messages
+'editsection'=>'өскертир', //edit
+'editold'=>'өскертир', //edit
+'toc' => 'Допчу', //Contents
+'showtoc' => 'көргүзер', //show
+'hidetoc' => 'чажырар', //hide
+'restorelink' => "$1 балаттынган өскерилгелер", //$1 deleted edits
+
+# Short words for each namespace, by default used in the 'article' tab in monobook
+'nstab-main' => 'Чүүл', //Article
+'nstab-user' => 'Ажыглакчының арыны', //User page
+'nstab-media' => 'Медиа арыны', //Media page
+'nstab-special' => 'Тускай', //Special
+'nstab-project' => 'Проект арыны', //Project page
+'nstab-image' => 'Файл', //File
+'nstab-mediawiki' => 'Чагаа', //Message
+'nstab-template' => 'Хээ', //Template
+'nstab-help' => 'Дуза', //Help
+'nstab-category' => 'Бөлүк', //Category
+
+# Main script and global functions
+#
+'nosuchspecialpage' => 'Ындыг арын чок', //No such special page
+
+# General errors
+#
+'noconnect'		=> 'Буруулуг болдувус! Викиде чамдык техниктиг бергедээшкиннер бар болганындан database серверинче коштунмаан. <br />
+$1', //Sorry! The wiki is experiencing some technical difficulties, and cannot contact the database server.
+'laggedslavemode'   => 'Оваарымчалыг: Бо арында чаартыышкыннар чок болуп болур', //Warning: Page may not contain recent updates.
+
+# Login and logout pages
+#
+'yourname'		=> 'Aжыглакчының ады', //Username
+'yourpassword'	=> 'Чажыт сөс', //Password
+'remembermypassword' => 'Мени сактып алыр', //Remember me
+'createaccountmail'	=> 'email-биле', //by e-mail
+'badretype'		=> 'Силернин парлаан чажыт созуңер таарышпас.', //The passwords you entered do not match.
+'userexists'	=> 'Силернин парлаан адыңар амгы уеде ажыглаттынып турар. өске аттан шилип алыңар.',  //Username entered is already in use.  Please choose a different name.
+'username'		=> 'Aжыглакчының ады:', //Username:
+'yourrealname'		=> 'Шын адыңар *', //Real name *
+'yourlanguage'	=> 'Дылыңар:', //Language:
+'yournick'		=> 'Шола ат:', //Nickname:
+
+# Edit page toolbar
+'bold_sample'=>'Карартыр',  //Bold text
+'italic_sample'=>'Ийлендирер', //Italic text
+'nowiki_sample'=>'Форматтаваан текстини бээр салыр', //Insert non-formatted text here
+
+# Edit pages
+#
+'watchthis'		=> 'Бо арынны көөр', //Watch this page
+'accmailtitle' => 'Чажыт сөс чоргустунган.', //Password sent.
+'accmailtext' => '"{{grammar:genitive|$1}}" чажыт сөстү {{grammar:directive1|$2}} чоргузуптувус.', //The password for "$1" has been sent to $2.
+'newarticle'	=> '(Чаа)', //(New)
+'yourtext'		=> 'Силерниң сөзүглел', //Your text
+
+# History pages
+#
+'next'			=> 'соонда', //next
+
+# Diffs
+#
+'compareselectedversions' => 'Шилип алган хевирлери деңнээр', //Compare selected versions
+
+# Preferences page
+#
+'preferences'	=> 'Дээре деп санаарылар', //Preferences
+'prefs-personal' => 'Ажыглакчының медээлери', //User profile
+'saveprefs'		=> 'Шыгжаар', //Save
+'oldpassword'	=> 'Эгри чажыт сөс:', //Old password:
+'newpassword'	=> 'Чаа чажыт сөс:', //New password:
+'searchresultshead' => 'Дилээр', //Search
+'files'			=> 'Файлдар', //Files
+
+# Recent changes
+#
+'recentchanges' => 'Өскерлиишкиннер', //Recent changes
+'hide'			=> 'Чажырар', //Hide
+'show'			=> 'көргүзер', //show
+
+# Upload
+#
+'filename'		=> 'Файлдың ады', //Filename
+'filesource' => 'Эгези', //Source
+
+# Image list
+#
+'ilsubmit'		=> 'Дилээр', //Search
+
+# Miscellaneous special pages
+#
+'randompage'	=> 'Даап арын', //Random page
+'specialpages'	=> 'Тускай арыннар', //Special pages
+'spheading'		=> 'Шупту ажыглакчыниң тускай арыннар', //Special pages for all users
+'newpages'		=> 'Чаа Арыннар', //New pages
+
+
+# Special:Allpages
+'allarticles'		=> 'Шупту чүүлдер', //All articles
+'allpagesprev'		=> 'Пертинде', //Previous
+'allpagesnext'		=> 'Соонда', //Next
+'allpagessubmit'	=> 'Чоруур', //Go
+
+# E this user
+#
+'emailmessage'	=> 'Дыңнадыры', //Message
+
+# Watchlist
+#
+'enotif_newpagetext'=> 'Бо чаа арын-дыр.', //This is a new page.
+
+# Delete/protect/revert
+#
+'actioncomplete' => 'Ажыл доосту', //Action complete
+
+# Contributions
+#
+'contributions' => 'Ажыглакчыниң деткимчемнер', //User contributions
+'mycontris'     => 'Мээң деткимчемнерим', //My contributions
+
+# Block/unblock IP
+#
+'ipaddress'		=> 'ИП-адрес', //IP Address
+'ipadressorusername' => 'ИП-адрес азы aжыглaкчының aды', //IP Address or username
+'badipaddress'	=> 'Багай ИП-адрес', //Invalid IP address
+'infiniteblock' => 'кезээ-мөңгеде', //infinite
+
+# Namespace 8 related
+
+'allmessages'	=> 'Системниң дыңнадырылар', //System messages
+'allmessagesname' => 'Ат', //Name
+'allmessagesdefault' => 'Default сөзүглел', //Default text
+'allmessagescurrent' => 'Амгы сөзүглел', //Current text
+
+# labels for User: and Title: on Special:Log pages
+'specialloguserlabel' => 'Ажыглакчы:', //User:
+
+);
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesUdm.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesUdm.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesUdm.php	(revision 1280)
@@ -0,0 +1,50 @@
+<?php
+/** Udmurt (Удмурт)
+ *
+ * @addtogroup Language
+ *
+ */
+
+$fallback = 'ru';
+
+$namespaceNames = array(
+	NS_MEDIA            => 'Медиа',
+	NS_SPECIAL          => 'Панель',
+	NS_MAIN             => '',
+	NS_TALK             => 'Вераськон',
+	NS_USER             => 'Викиавтор',
+	NS_USER_TALK        => 'Викиавтор_сярысь_вераськон',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK     => '$1_сярысь_вераськон',
+	NS_IMAGE            => 'Суред',
+	NS_IMAGE_TALK       => 'Суред_сярысь_вераськон',
+	NS_MEDIAWIKI        => 'MediaWiki',
+	NS_MEDIAWIKI_TALK   => 'MediaWiki_сярысь_вераськон',
+	NS_TEMPLATE         => 'Шаблон',
+	NS_TEMPLATE_TALK    => 'Шаблон_сярысь_вераськон',
+	NS_HELP             => 'Валэктон',
+	NS_HELP_TALK        => 'Валэктон_сярысь_вераськон',
+	NS_CATEGORY         => 'Категория',
+	NS_CATEGORY_TALK    => 'Категория_сярысь_вераськон',
+);
+
+$linkTrail = '/^([a-zа-яёӝӟӥӧӵ“»]+)(.*)$/sDu';
+$fallback8bitEncoding = 'windows-1251';
+$separatorTransformTable = array(',' => ' ', '.' => ',' );
+
+$messages = array(
+'linkprefix' => '/^(.*?)(„|«)$/sDu',
+'article' => 'Статья',
+'createaccount' => 'выль вики-авторлэн регистрациез',
+'edit' => 'тупатыны',
+'hist' => 'история',
+'history' => 'Бамлэн историез',
+'history_short' => 'история',
+'login' => 'Википедие пырон',
+'mycontris' => 'мынам статьяосы',
+'mytalk' => 'викиавтор сярысь вераськон',
+'nstab-user' => 'викиавтор',
+'preferences' => 'настройкаос',
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesUg.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesUg.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesUg.php	(revision 1280)
@@ -0,0 +1,9 @@
+<?php
+/** Uyghur (Oyghurque)
+  *
+  * @addtogroup Language
+  */
+
+$rtl = true;
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesUk.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesUk.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesUk.php	(revision 1280)
@@ -0,0 +1,2247 @@
+<?php
+/** Ukrainian (українська мова)
+  *
+  * Based on MessagesEn.php revision 18716 (2007-01-01)
+  * and uk.wikipedia MediaWiki namespace (2007-13-02)
+  *
+  * Maintainer: Gutsul (Gutsul.ua at Google Mail)
+  * 
+  * УВАГА! НЕ РЕДАГУЙТЕ ЦЕЙ ФАЙЛ!
+  *
+  * Якщо необхідно змінити переклад окремих частин інтерфейсу,
+  * то це можна зробити редагуючи сторінки типу «MediaWiki:*».
+  * Їх список можна знайти на сторінці «Special:Allmessages».
+  *
+  */
+
+$separatorTransformTable = array(
+	',' => "\xc2\xa0", # nbsp
+	'.' => ','
+);
+
+$fallback8bitEncoding = 'windows-1251';
+$linkPrefixExtension = true;
+
+$namespaceNames = array(
+	NS_MEDIA            => 'Медіа',
+	NS_SPECIAL          => 'Спеціальні',
+	NS_MAIN             => '',
+	NS_TALK             => 'Обговорення',
+	NS_USER             => 'Користувач',
+	NS_USER_TALK        => 'Обговорення_користувача', 
+	#NS_PROJECT set by $wgMetaNamespace
+  	NS_PROJECT_TALK     => 'Обговорення_{{grammar:genitive|$1}}',
+	NS_IMAGE            => 'Зображення',
+	NS_IMAGE_TALK       => 'Обговорення_зображення',
+	NS_MEDIAWIKI        => 'MediaWiki',
+	NS_MEDIAWIKI_TALK   => 'Обговорення_MediaWiki',
+	NS_TEMPLATE         => 'Шаблон',
+	NS_TEMPLATE_TALK    => 'Обговорення_шаблону',
+	NS_HELP             => 'Довідка',
+	NS_HELP_TALK        => 'Обговорення_довідки',
+	NS_CATEGORY         => 'Категорія',
+	NS_CATEGORY_TALK    => 'Обговорення_категорії',
+);
+
+
+
+$skinNames = array(
+	'standard' => 'Стандартне',
+	'nostalgia' => 'Ностальгія',
+	'cologneblue' => 'Кельнське Синє',
+	'davinci' => 'Да Вінчі',
+	'mono' => 'Моно',
+	'monobook' => 'Моно-книга',
+	'myskin' => 'Своє',
+	'chick' => 'Ціпка'
+);
+
+$dateFormats = array(
+	'mdy time' => 'H:i',
+	'mdy date' => 'xg j, Y',
+	'mdy both' => 'H:i, xg j, Y',
+
+	'dmy time' => 'H:i',
+	'dmy date' => 'j xg Y',
+	'dmy both' => 'H:i, j xg Y',
+
+	'ymd time' => 'H:i',
+	'ymd date' => 'Y xg j',
+	'ymd both' => 'H:i, Y xg j',
+
+	'ISO 8601 time' => 'xnH:xni:xns',
+	'ISO 8601 date' => 'xnY-xnm-xnd',
+	'ISO 8601 both' => 'xnY-xnm-xnd"T"xnH:xni:xns',
+
+);
+
+$bookstoreList = array(
+	'Amazon.com' => 'http://www.amazon.com/exec/obidos/ISBN=$1'
+);
+
+
+# Note to translators:
+#   Please include the English words as synonyms.  This allows people
+#   from other wikis to contribute more easily.
+#
+$magicWords = array(
+#   ID                                 CASE  SYNONYMS
+	'redirect'               => array( 0,    '#REDIRECT', '#ПЕРЕНАПРАВЛЕННЯ', '#ПЕРЕНАПР'),
+	'notoc'                  => array( 0,    '__NOTOC__', '__БЕЗ_ЗМІСТУ__'),
+	'nogallery'  			 => array( 0,    '__NOGALLERY__', '__БЕЗ_ГАЛЕРЕЇ__'),
+	'forcetoc'               => array( 0,    '__FORCETOC__',  '__ОБОВ_ЗМІСТ__'),
+	'toc'                    => array( 0,    '__TOC__', '__ЗМІСТ__'),
+	'noeditsection'          => array( 0,    '__NOEDITSECTION__', '__БЕЗ_РЕДАГУВ_РОЗДІЛУ__'),
+	'start'                  => array( 0,    '__START__', '__ПОЧАТОК__'),
+	'currentmonth'           => array( 1,    'CURRENTMONTH', 'ПОТОЧНИЙ_МІСЯЦЬ'),
+	'currentmonthname'       => array( 1,    'CURRENTMONTHNAME','НАЗВА_ПОТОЧНОГО_МІСЯЦЯ'),
+	'currentmonthnamegen'    => array( 1,    'CURRENTMONTHNAMEGEN','НАЗВА_ПОТОЧНОГО_МІСЯЦЯ_РОД'),
+	'currentmonthabbrev'     => array( 1,    'CURRENTMONTHABBREV', 'НАЗВА_ПОТОЧНОГО_МІСЯЦЯ_АБР'),
+	'currentday'             => array( 1,    'CURRENTDAY','ПОТОЧНИЙ_ДЕНЬ'),
+	'currentday2'            => array( 1,    'CURRENTDAY2','ПОТОЧНИЙ_ДЕНЬ_2'),
+	'currentdayname'         => array( 1,    'CURRENTDAYNAME','НАЗВА_ПОТОЧНОГО_ДНЯ'),
+	'currentyear'            => array( 1,    'CURRENTYEAR','ПОТОЧНИЙ_РІК'),
+	'currenttime'            => array( 1,    'CURRENTTIME','ПОТОЧНИЙ_ЧАС'),
+	'currenthour'            => array( 1,    'CURRENTHOUR' , 'ПОТОЧНА_ГОДИНА' ),
+	'localmonth'             => array( 1,    'LOCALMONTH', 'ЛОКАЛЬН_МІСЯЦЬ' ),
+	'localmonthname'         => array( 1,    'LOCALMONTHNAME', 'НАЗВА_ЛОКАЛЬН_МІСЯЦЯ'),
+	'localmonthnamegen'      => array( 1,    'LOCALMONTHNAMEGEN', 'НАЗВА_ЛОКАЛЬН_МІСЯЦЯ_РОД'),
+	'localmonthabbrev'       => array( 1,    'LOCALMONTHABBREV', 'НАЗВА_ЛОКАЛЬН_МІСЯЦЯ_АБР'),
+	'localday'               => array( 1,    'LOCALDAY' , 'ЛОКАЛЬН_ДЕНЬ'),
+	'localday2'              => array( 1,    'LOCALDAY2', 'ЛОКАЛЬН_ДЕНЬ_2'),
+	'localdayname'           => array( 1,    'LOCALDAYNAME', 'НАЗВА_ЛОКАЛЬН_ДНЯ'),
+	'localyear'              => array( 1,    'LOCALYEAR', 'ЛОКАЛЬН_РІК'),
+	'localtime'              => array( 1,    'LOCALTIME', 'ЛОКАЛЬН_ЧАС'),
+	'localhour'              => array( 1,    'LOCALHOUR', 'ЛОКАЛЬН_ГОДИНА'),
+	'numberofpages'          => array( 1,    'NUMBEROFPAGES', 'КІЛЬКІСТЬ_СТОРІНОК'),
+	'numberofarticles'       => array( 1,    'NUMBEROFARTICLES','КІЛЬКІСТЬ_СТАТЕЙ'),
+	'numberoffiles'          => array( 1,    'NUMBEROFFILES', 'КІЛЬКІСТЬ_ФАЙЛІВ'),
+	'numberofusers'          => array( 1,    'NUMBEROFUSERS', 'КІЛЬКІСТЬ_КОРИСТУВАЧІВ'),
+	'pagename'               => array( 1,    'PAGENAME','НАЗВА_СТОРІНКИ'),
+	'pagenamee'              => array( 1,    'PAGENAMEE','НАЗВА_СТОРІНКИ_2'),
+	'namespace'              => array( 1,    'NAMESPACE','ПРОСТІР_ІМЕН'),
+	'namespacee'              => array( 1,    'NAMESPACEE','ПРОСТІР_ІМЕН_2'),
+	'talkspace'              => array( 1,    'TALKSPACE', 'ПРОСТІР_ОБГОВОРЕННЯ'),
+	'talkspacee'             => array( 1,    'TALKSPACEE', 'ПРОСТІР_ОБГОВОРЕННЯ_2'),
+	'subjectspace'           => array( 1,    'SUBJECTSPACE', 'ARTICLESPACE', 'ПРОСТІР_СТАТЕЙ' ),
+	'subjectspacee'          => array( 1,    'SUBJECTSPACEE', 'ARTICLESPACEE', 'ПРОСТІР_СТАТЕЙ_2' ),
+	'fullpagename'           => array( 1,    'FULLPAGENAME', 'ПОВНА_НАЗВА_СТОРІНКИ' ),
+	'fullpagenamee'          => array( 1,    'FULLPAGENAMEE', 'ПОВНА_НАЗВА_СТОРІНКИ_2' ),
+	'subpagename'            => array( 1,    'SUBPAGENAME', 'НАЗВА_ПІДСТОРІНКИ' ),
+	'subpagenamee'           => array( 1,    'SUBPAGENAMEE', 'НАЗВА_ПІДСТОРІНКИ_2'),
+	'basepagename'           => array( 1,    'BASEPAGENAME', 'ОСНОВА_НАЗВИ_ПІДСТОРІНКИ'),
+	'basepagenamee'          => array( 1,    'BASEPAGENAMEE', 'ОСНОВА_НАЗВИ_ПІДСТОРІНКИ_2'),
+	'talkpagename'           => array( 1,    'TALKPAGENAME', 'НАЗВА_СТОРІНКИ_ОБГОВОРЕННЯ'),
+	'talkpagenamee'          => array( 1,    'TALKPAGENAMEE', 'НАЗВА_СТОРІНКИ_ОБГОВОРЕННЯ_2'),
+	'subjectpagename'        => array( 1,    'SUBJECTPAGENAME', 'ARTICLEPAGENAME', 'НАЗВА_СТОРІНКИ_СТАТТІ' ),
+	'subjectpagenamee'       => array( 1,    'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE', 'НАЗВА_СТОРІНКИ_СТАТТІ_2' ),
+	'msg'                    => array( 0,    'MSG:', 'ПОВІД:'),
+	'subst'                  => array( 0,    'SUBST:','ПІДРЯД:'),
+	'msgnw'                  => array( 0,    'MSGNW:', 'ПОВІД_БЕЗ_ВІКІ:'),
+	'end'                    => array( 0,    '__END__','__КІНЕЦЬ__'),
+	'img_thumbnail'          => array( 1,    'thumbnail', 'thumb', 'міні'),
+	'img_manualthumb'        => array( 1,    'thumbnail=$1', 'thumb=$1', 'міні=$1'),
+	'img_right'              => array( 1,    'right','праворуч'),
+	'img_left'               => array( 1,    'left','ліворуч'),
+	'img_none'               => array( 1,    'none', 'без'),
+	'img_width'              => array( 1,    '$1px','$1пкс'),
+	'img_center'             => array( 1,    'center', 'centre','центр'),
+	'img_framed'             => array( 1,    'framed', 'enframed', 'frame','обрамити'),
+	'img_page'               => array( 1,    'page=$1', 'page $1', 'сторінка=$1', 'сторінка $1' ),
+	'int'                    => array( 0,    'INT:', 'ВНУТР:'),
+	'sitename'               => array( 1,    'SITENAME','НАЗВА_САЙТУ'),
+	'ns'                     => array( 0,    'NS:','ПІ:'),
+	'localurl'               => array( 0,    'LOCALURL:', 'ЛОКАЛЬНА_АДРЕСА:'),
+	'localurle'              => array( 0,    'LOCALURLE:', 'ЛОКАЛЬНА_АДРЕСА_2:'),
+	'server'                 => array( 0,    'SERVER','СЕРВЕР'),
+	'servername'             => array( 0,    'SERVERNAME', 'НАЗВА_СЕРВЕРА'),
+	'scriptpath'             => array( 0,    'SCRIPTPATH', 'ШЛЯХ_ДО_СКРИПТУ'),
+	'grammar'                => array( 0,    'GRAMMAR:', 'ВІДМІНОК:'),
+	'notitleconvert'         => array( 0,    '__NOTITLECONVERT__', '__NOTC__', '__БЕЗ_ПЕРЕТВОРЕННЯ_ЗАГОЛОВКУ__'),
+	'nocontentconvert'       => array( 0,    '__NOCONTENTCONVERT__', '__NOCC__', '__БЕЗ_ПЕРЕТВОРЕННЯ_ТЕКСТУ__'),
+	'currentweek'            => array( 1,    'CURRENTWEEK','ПОТОЧНИЙ_ТИЖДЕНЬ'),
+	'currentdow'             => array( 1,    'CURRENTDOW','ПОТОЧНИЙ_ДЕНЬ_ТИЖНЯ'),
+	'localweek'              => array( 1,    'LOCALWEEK', 'ЛОКАЛЬН_ТИЖДЕНЬ' ),
+	'localdow'               => array( 1,    'LOCALDOW', 'ЛОКАЛЬН_ДЕНЬ_ТИЖНЯ' ),
+	'revisionid'             => array( 1,    'REVISIONID', 'ІД_ВЕРСІЇ'),
+	'revisionday'            => array( 1,    'REVISIONDAY', 'ДЕНЬ_ВЕРСІЇ' ),
+	'revisionday2'           => array( 1,    'REVISIONDAY2' , 'ДЕНЬ_ВЕРСІЇ_2'),
+	'revisionmonth'          => array( 1,    'REVISIONMONTH' , 'МІСЯЦЬ_ВЕРСІЇ'),
+	'revisionyear'           => array( 1,    'REVISIONYEAR' , 'РІК_ВЕРСІЇ'),
+	'revisiontimestamp'      => array( 1,    'REVISIONTIMESTAMP'      ),
+	'plural'                 => array( 0,    'PLURAL:', 'МНОЖИНА:' ),
+	'fullurl'                => array( 0,    'FULLURL:', 'ПОВНА_АДРЕСА:' ),
+	'fullurle'               => array( 0,    'FULLURLE:', 'ПОВНА_АДРЕСА_2:' ),
+	'lcfirst'                => array( 0,    'LCFIRST:', 'ПЕРША_БУКВА_МАЛА:' ),
+	'ucfirst'                => array( 0,    'UCFIRST:' , 'ПЕРША_БУКВА_ВЕЛИКА:' ),
+	'lc'                     => array( 0,    'LC:' , 'МАЛИМИ_БУКВАМИ:' ),
+	'uc'                     => array( 0,    'UC:', 'ВЕЛИКИМИ_БУКВАМИ:' ),
+	'raw'                    => array( 0,    'RAW:', 'НЕОБРОБ:' ),
+	'displaytitle'           => array( 1,    'DISPLAYTITLE' , 'ПОКАЗАТИ_ЗАГОЛОВОК' ),
+	'rawsuffix'              => array( 1,    'R' , 'Н' ),
+	'newsectionlink'         => array( 1,    '__NEWSECTIONLINK__', '__ПОСИЛАННЯ_НА_НОВИЙ_РОЗДІЛ__' ),
+	'currentversion'         => array( 1,    'CURRENTVERSION' , 'ПОТОЧНА_ВЕРСІЯ' ),
+	'urlencode'              => array( 0,    'URLENCODE:' , 'ЗАКОДОВАНА_АДРЕСА:' ),
+	'anchorencode'                   => array( 0,    'ANCHORENCODE', 'КОДУВАТИ_МІТКУ'),
+	'currenttimestamp'       => array( 1,    'CURRENTTIMESTAMP' , 'ШТАМП_ПОТОЧНОГО_ЧАСУ' ),
+	'localtimestamp'         => array( 1,    'LOCALTIMESTAMP' , 'ШТАМП_ЛОКОЛЬН_ЧАСУ'),
+	'directionmark'          => array( 1,    'DIRECTIONMARK', 'DIRMARK' , 'НАПРЯМОК_ПИСЬМА' ),
+	'language'               => array( 0,    '#LANGUAGE:' , '#МОВА:' ),
+	'contentlanguage'        => array( 1,    'CONTENTLANGUAGE', 'CONTENTLANG', 'МОВА_ЗМІСТУ' ),
+	'pagesinnamespace'       => array( 1,    'PAGESINNAMESPACE:', 'PAGESINNS:' , 'СТОРІНОК_В_ПРОСТОРІ_ІМЕН:' ),
+	'numberofadmins'         => array( 1,    'NUMBEROFADMINS', 'КІЛЬКІСТЬ_АДМІНІСТРАТОРІВ' ),
+	'formatnum'              => array( 0,    'FORMATNUM', 'ФОРМАТУВАТИ_ЧИСЛО' ),
+	'padleft'                => array( 0,    'PADLEFT', 'ЗАПОВНИТИ_ЛІВОРУЧ'),
+	'padright'               => array( 0,    'PADRIGHT', 'ЗАПОВНИТИ_ПРАВОРУЧ'),
+	'special'                => array( 0,    'special', 'спеціальна' ),
+	'defaultsort'           => array( 1,    'DEFAULTSORT:', 'СТАНДАРТНЕ_СОРТУВАННЯ'),
+);
+
+$linkTrail = '/^([a-zабвгґдеєжзиіїйклмнопрстуфхцчшщьєюяёъы“»]+)(.*)$/sDu';
+
+$messages = array(
+# User preference toggles
+'tog-underline'               => 'Підкреслювати посилання:',
+'tog-highlightbroken'         => 'Форматувати неіснуючі посилання <a href="" class="new">ось так</a> (Альтернатива: ось так<a href="" class="internal">?</a>).',
+'tog-justify'                 => 'Вирівнювати текст по ширині сторінки',
+'tog-hideminor'               => 'Ховати незначні редагування в списку нових редагувань',
+'tog-extendwatchlist'         => 'Розширений список спостереження',
+'tog-usenewrc'                => 'Покращений список останніх редагувань (JavaScript)',
+'tog-numberheadings'          => 'Автоматично нумерувати заголовки',
+'tog-showtoolbar'             => 'Показувати панель інструментів при редагуванні (JavaScript)',
+'tog-editondblclick'          => 'Редагувати статті при подвійному натисканні кнопки миші (JavaScript)',
+'tog-editsection'             => 'Показувати посилання «ред.» для кожної секції',
+'tog-editsectiononrightclick' => 'Редагувати секції по правій кнопці миші на назві секції (JavaScript)',
+'tog-showtoc'                 => 'Показувати зміст (для статей з більше ніж 3-ма заголовками)',
+'tog-rememberpassword'        => "Запам'ятовувати пароль між сеансами (на цьому комп'ютері)",
+'tog-editwidth'               => 'Розширяти вікно для редагування до меж вікна браузера',
+'tog-watchcreations'          => 'Додавати створені мною сторінки до мого списку спостереження',
+'tog-watchdefault'            => 'Додавати нові та змінені статті до мого списку спостереження',
+'tog-watchmoves'              => 'Додавати переміщені мною сторінки',
+'tog-watchdeletion'           => 'Додавати до списку спостереження вилучені мною сторінки',
+'tog-minordefault'            => 'Спочатку вважати всі зміни незначними',
+'tog-previewontop'            => 'Показувати попередній текст до вікна редагування, а не після',
+'tog-previewonfirst'          => 'Показувати попередній текст при першому редагуванні',
+'tog-nocache'                 => 'Заборонити кешування статей',
+'tog-enotifwatchlistpages'    => 'Надсилати мені електронного листа коли сторінка за якою я спостерігаю змінилас',
+'tog-enotifusertalkpages'     => 'Надсилати мені електронного листа коли моя сторінка обговорення була змінена',
+'tog-enotifminoredits'        => 'Надсилати мені електронного листа навіть при малих редашуваннях',
+'tog-enotifrevealaddr'        => 'Показувати мою поштову адресу в повідомленнях',
+'tog-shownumberswatching'     => 'Показувати кількість користувачів, які додали сторінку в свій список спостереження',
+'tog-fancysig'                => 'Простий підпис (без автоматичного посилання)',
+'tog-externaleditor'          => 'За замовчанням використовувати зовнішній редактор',
+'tog-externaldiff'            => 'За замовчанням використовувати зовнішню програму порівняння версій',
+'tog-showjumplinks'           => 'Активізувати допоміжні посилання «перейти до»',
+'tog-uselivepreview'          => 'Використовувати швидкий попередній перегляд (JavaScript, експериментально)',
+'tog-forceeditsummary'        => 'Попереджати, коли не вказано короткий опис редагування',
+'tog-watchlisthideown'        => 'Сховати мої редагування',
+'tog-watchlisthidebots'       => 'Сховати редагування ботів',
+'tog-watchlisthideminor'      => 'Сховати незначні редагування',
+'tog-nolangconversion'        => 'Відключити перетворення систем письма',
+'tog-ccmeonemails'            => 'Відправляти мені копії листів які я відправив іншим користувачам.',
+
+'underline-always'  => 'Завжди',
+'underline-never'   => 'Ніколи',
+'underline-default' => 'Використовувати налаштування браузера',
+
+'skinpreview' => '(Попередній перегляд)',
+
+# Dates
+'sunday'        => 'неділя',
+'monday'        => 'понеділок',
+'tuesday'       => 'вівторок',
+'wednesday'     => 'середа',
+'thursday'      => 'четвер',
+'friday'        => "п'ятниця",
+'saturday'      => 'субота',
+'sun'           => 'Нд',
+'mon'           => 'Пн',
+'tue'           => 'Вт',
+'wed'           => 'Ср',
+'thu'           => 'Чт',
+'fri'           => 'Пт',
+'sat'           => 'Сб',
+'january'       => 'січень',
+'february'      => 'лютий',
+'march'         => 'березень',
+'april'         => 'квітень',
+'may_long'      => 'травень',
+'june'          => 'червень',
+'july'          => 'липень',
+'august'        => 'серпень',
+'september'     => 'вересень',
+'october'       => 'жовтень',
+'november'      => 'листопад',
+'december'      => 'грудень',
+'january-gen'   => 'січня',
+'february-gen'  => 'лютого',
+'march-gen'     => 'березня',
+'april-gen'     => 'квітня',
+'may-gen'       => 'травня',
+'june-gen'      => 'червня',
+'july-gen'      => 'липня',
+'august-gen'    => 'серпня',
+'september-gen' => 'вересня',
+'october-gen'   => 'жовтня',
+'november-gen'  => 'листопада',
+'december-gen'  => 'грудня',
+'jan'           => 'січ',
+'feb'           => 'лют',
+'mar'           => 'бер',
+'apr'           => 'квіт',
+'may'           => 'трав',
+'jun'           => 'черв',
+'jul'           => 'лип',
+'aug'           => 'серп',
+'sep'           => 'вер',
+'oct'           => 'жов',
+'nov'           => 'лист',
+'dec'           => 'груд',
+
+# Bits of text used by many pages
+'categories'            => 'Категорії',
+'pagecategories'        => '{{PLURAL:$1|Категорія|Категорії|Категорій}}',
+'category_header'       => 'Статті в категорії «$1»',
+'subcategories'         => 'Підкатегорії',
+'category-media-header' => 'Файли в категорії «$1»',
+
+'linkprefix'        => '/^(.*?)(„|«)$/sD',
+'mainpagetext'      => '<big>Програмне забезпечення «MediaWiki» успішно встановлено.</big>',
+'mainpagedocfooter' => 'Інформацію про роботу з цією вікі можна знайти в [http://meta.wikimedia.org/wiki/%D0%9F%D0%BE%D0%BC%D0%BE%D1%89%D1%8C:%D0%A1%D0%BE%D0%B4%D0%B5%D1%80%D0%B6%D0%B0%D0%BD%D0%B8%D0%B5 посібнику користувача].
+
+== Деякі корисні ресурси ==
+* [http://www.mediawiki.org/wiki/Help:Configuration_settings Список налаштувань];
+* [http://www.mediawiki.org/wiki/Help:FAQ Питання? що часто задають по MediaWiki];
+* [http://mail.wikimedia.org/mailman/listinfo/mediawiki-announce Розсилка повідомлень про появу нових версій MediaWiki].',
+
+'about'          => 'Про',
+'article'        => 'Стаття',
+'newwindow'      => '(відкривається в новому вікні)',
+'cancel'         => 'Скасувати',
+'qbfind'         => 'Знайти',
+'qbbrowse'       => 'Переглянути',
+'qbedit'         => 'Редагувати',
+'qbpageoptions'  => 'Налаштування статті',
+'qbpageinfo'     => 'Інформація про статтю',
+'qbmyoptions'    => 'Ваші налаштування',
+'qbspecialpages' => 'Спеціальні сторінки',
+'moredotdotdot'  => 'Детальніше…',
+'mypage'         => 'Моя особиста сторінка',
+'mytalk'         => 'Моя сторінка обговорення',
+'anontalk'       => 'Обговорення цієї IP адреси',
+'navigation'     => 'Навігація',
+
+# Metadata in edit box
+'metadata_help' => 'Метадані (пояснення див. на сторінці [[{{ns:project}}:Метадані]]):',
+
+'errorpagetitle'    => 'Помилка',
+'returnto'          => 'Повернутися до $1.',
+'tagline'           => 'Матеріал з {{grammar:genitive|{{SITENAME}}}}.',
+'help'              => 'Довідка',
+'search'            => 'Пошук',
+'searchbutton'      => 'Пошук',
+'go'                => 'Перейти',
+'searcharticle'     => 'Перейти',
+'history'           => 'Історія',
+'history_short'     => 'Історія',
+'updatedmarker'     => 'оновлено після мого останнього перегляду',
+'info_short'        => 'Інформація',
+'printableversion'  => 'Версія для друку',
+'permalink'         => 'Постійне посилання',
+'print'             => 'Друк',
+'edit'              => 'Редагувати',
+'editthispage'      => 'Редагувати статтю',
+'delete'            => 'Вилучити',
+'deletethispage'    => 'Вилучити статтю',
+'undelete_short'    => 'Відновити $1 {{PLURAL:$1|редагування|редагування|редагувань}}',
+'protect'           => 'Захистити',
+'protectthispage'   => 'Встановити захист',
+'unprotect'         => 'Зняти захист',
+'unprotectthispage' => 'Зняти захист',
+'newpage'           => 'Нова стаття',
+'talkpage'          => 'Обговорення',
+'specialpage'       => 'Спеціальна сторінка',
+'personaltools'     => 'Особисті інструменти',
+'postcomment'       => 'Прокоментувати',
+'articlepage'       => 'Переглянути статтю',
+'talk'              => 'Обговорення',
+'views'             => 'Перегляди',
+'toolbox'           => 'Панель інструментів',
+'userpage'          => 'Переглянути сторінку користувача',
+'projectpage'       => 'Переглянути сторінку проекту',
+'imagepage'         => 'Переглянути сторінку зображення',
+'mediawikipage'     => 'Переглянути сторінку повідомлення',
+'templatepage'      => 'Переглянути сторінку шаблону',
+'viewhelppage'      => 'Отримати довідку',
+'categorypage'      => 'Переглянути сторінку категорії',
+'viewtalkpage'      => 'Переглянути обговорення',
+'otherlanguages'    => 'Іншими мовами',
+'redirectedfrom'    => '(Перенаправлено з $1)',
+'redirectpagesub'   => 'Сторінка-перенаправлення',
+'lastmodifiedat'    => 'Остання зміна: $2, $1.', # $1 date, $2 time
+'viewcount'         => 'Цю статтю переглядали $1 {{plural:$1|раз|рази|разів}}.',
+'protectedpage'     => 'Захищена стаття',
+'jumpto'            => 'Перейти до:',
+'jumptonavigation'  => 'навігація',
+'jumptosearch'      => 'пошук',
+
+# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
+'aboutsite'         => 'Про {{grammar:accusative|{{SITENAME}}}}',
+'aboutpage'         => '{{ns:project}}:Про',
+'bugreports'        => 'Звіт про помилку',
+'bugreportspage'    => '{{ns:project}}:Звіт про помилку',
+'copyright'         => 'Вміст доступний згідно з $1.',
+'copyrightpagename' => 'Авторські права проекту {{SITENAME}}',
+'copyrightpage'     => '{{ns:project}}:Авторське право',
+'currentevents'     => 'Поточні події',
+'currentevents-url' => 'Поточні події',
+'disclaimers'       => 'Умови використання',
+'disclaimerpage'    => '{{ns:project}}:Умови використання',
+'edithelp'          => 'Довідка про редагування',
+'edithelppage'      => '{{ns:project}}:Як редагувати статті',
+'faq'               => 'Часті питання',
+'faqpage'           => '{{ns:project}}:Часті питання',
+'helppage'          => '{{ns:project}}:Довідка',
+'mainpage'          => 'Головна стаття',
+'portal'            => 'Портал спільноти',
+'portal-url'        => '{{ns:project}}:Портал спільноти',
+'privacy'           => 'Політика конфіденційності',
+'privacypage'       => '{{ns:project}}:Політика конфіденційності',
+'sitesupport'       => 'Пожертвування',
+'sitesupport-url'   => '{{ns:project}}:Пожертвування',
+
+'badaccess'        => 'Доступ заборонено',
+'badaccess-group0' => 'Вам не дозволено виконувати дію, яку ви запросили.',
+'badaccess-group1' => 'Дія, яку ви запросили, дозволена лише користувачам з групи $1.',
+'badaccess-group2' => 'Дія, яку ви запросили, дозволена тільки користувачам з груп $1.',
+'badaccess-groups' => 'Дія, яку ви запросили, дозволена тільки користувачам з груп $1.',
+
+'versionrequired'     => 'Потрібна MediaWiki версій $1',
+'versionrequiredtext' => 'Для роботи з цією сторінкою потрібна MediaWiki версій $1. Див. [[{{ns:special}}:Version]].',
+
+'ok'                  => 'OK',
+'pagetitle'           => '$1 — {{SITENAME}}',
+'retrievedfrom'       => 'Отримано з $1',
+'youhavenewmessages'  => 'Ви отримали $1 ($2).',
+'newmessageslink'     => 'нові повідомлення',
+'newmessagesdifflink' => 'різниця останнього редагування',
+'editsection'         => 'ред.',
+'editold'             => 'ред.',
+'editsectionhint'     => 'Редагувати секцію: $1',
+'toc'                 => 'Зміст',
+'showtoc'             => 'показати',
+'hidetoc'             => 'сховати',
+'thisisdeleted'       => 'Переглянути чи відновити $1?',
+'viewdeleted'         => 'Переглянути $1?',
+'restorelink'         => '$1 {{PLURAL:$1|редагування|редагування|редагувань}} вилучено',
+'feedlinks'           => 'В вигляді:',
+'feed-invalid'        => 'Невірний тип каналу для підписки.',
+
+# Short words for each namespace, by default used in the 'article' tab in monobook
+'nstab-main'      => 'Стаття',
+'nstab-user'      => 'Сторінка користувача',
+'nstab-media'     => 'Медіа-сторінка',
+'nstab-special'   => 'Спеціальні',
+'nstab-project'   => 'Сторінка проекту',
+'nstab-image'     => 'Зображення',
+'nstab-mediawiki' => 'Повідомлення',
+'nstab-template'  => 'Шаблон',
+'nstab-help'      => 'Довідка',
+'nstab-category'  => 'Категорія',
+
+# Main script and global functions
+'nosuchaction'      => 'Такої дії не існує',
+'nosuchactiontext'  => 'Дія, вказана в URL, не розпізнається програмним забезпеченням вікі',
+'nosuchspecialpage' => 'Такої спеціальної сторінки не існує',
+'nospecialpagetext' => 'Спеціальної сторінки не існує. Див. [[{{ns:special}}:Specialpages|список спеціальних сторінок]].',
+
+# General errors
+'error'                => 'Помилка',
+'databaseerror'        => 'Помилка бази даних',
+'dberrortext'          => 'Знайдено синтаксичну помилку в запиті до бази даних.
+Останній запит до бази даних:
+<blockquote><tt>$1</tt></blockquote>
+відбувся з функції "<tt>$2</tt>".
+MySQL повернув помилку "<tt>$3: $4</tt>".',
+'dberrortextcl'        => 'Знайдено синтаксичну помилку в запиті до бази даних.
+Останній запит до бази даних:
+"$1"
+відбувся з функції "$2".
+MySQL повернув помилку "$3: $4".',
+'noconnect'            => "Вибачаємось! В зв'язку з технічними неполадками зараз неможливо зв'язатися з сервером баз даних.<br />
+$1",
+'nodb'                 => 'Неможливо вибрати базу даних $1',
+'cachederror'          => 'Нижче відображена кеш-копія запитаної статті, можливо вона застаріла.',
+'laggedslavemode'      => 'Увага: сторінка може не містити останніх редагувань.',
+'readonly'             => 'Збереження в базі даних заблоковано',
+'enterlockreason'      => 'Вкажіть причину блокування та інформацію про те, коли блокування буде знято',
+'readonlytext'         => 'Внесення нових статей та інші зміни бази даних в даний момент заблоковано, ймовірно, через планове сервісне обслуговування бази даних, після закінченню якого нормальний стан буде відновлено.
+Адміністратор, що заблокував базу, дав наступні пояснення:
+<p>$1',
+'missingarticle'       => 'База даних не знайшла тексту статті,
+хоча повинна була знайти під іменем "$1".
+<p>Це може бути викликано використанням застарілого посилання на журнал змін або відмінностей для статті, що була вилучена.
+<p>Якщо справа не в цьому, то, швидше за все, ви знайшли помилку в програмному забезпеченні вікі.
+Будь-ласка, повідомте про це адміністратору, вказавши URL.',
+'readonly_lag'         => 'База даних автоматично заблокована для редагувань доки вторинний сервер БД не синхронізується з первинним.',
+'internalerror'        => 'Внутрішня помилка',
+'filecopyerror'        => 'Неможливо скопіювати файл «$1» в «$2».',
+'filerenameerror'      => 'Неможливо перейменувати файл «$1» в «$2».',
+'filedeleteerror'      => 'Неможливо вилучити файл «$1».',
+'filenotfound'         => 'Неможливо знайти файл «$1».',
+'unexpected'           => 'Неочікуване значення: «$1»=«$2».',
+'formerror'            => 'Помилка: неможливо передати дані форми',
+'badarticleerror'      => 'Ця дія не може бути виконана над даною статтею.',
+'cannotdelete'         => 'Неможливо вилучити вказану статтю чи файл. (Можливо, його вже вилучив хтось інший.)',
+'badtitle'             => 'Неприпустима назва',
+'badtitletext'         => 'Невірна назва статті, порожня, або невірно вказана міжмовна або між-вікі назва.',
+'perfdisabled'         => 'Вибачаємося! Ця можливість тимчасово недоступна через обмеженість ресурсів.',
+'perfdisabledsub'      => 'Це - збережена копія від $1:', # obsolete?
+'perfcached'           => 'Наступні дані взяті з кешу і можуть бути застарілими:',
+'perfcachedts'         => 'Наступні дані взяті з кешу, востаннє він обновлявся $1.',
+'wrong_wfQuery_params' => 'Неприпустима параметри функцій wfQuery()<br />
+Функція: $1<br />
+Запит: $2',
+'viewsource'           => 'Переглянути початковий текст',
+'viewsourcefor'        => 'Сторінка «$1»',
+'viewsourcetext'       => 'Ви можете переглянути та скопіювати початковий текст цієї сторінки:',
+'protectedinterface'   => 'Ця сторінка є частиною інтерфейсу програмного забезпечення і її можуть редагувати лише адміністратори проекту.',
+'editinginterface'     => "'''Увага:''' Ви редагуєте сторінку, що є частиною текстового інтерфейсу. Зміни цієї сторінки викличуть зміну інтерфейсу для інших користувачів..",
+'sqlhidden'            => '(SQL запит приховано)',
+'cascadeprotected'     => 'Сторінка захищена від змін, оскільки включено в наступні сторінки, для яких активована можливість каскадного захисту:',
+
+# Login and logout pages
+'logouttitle'                => 'Вийти з системи',
+'logouttext'                 => 'Ви працюєте в тому ж режимі, який був до вашої реєстрації в системі. Ви ідентифікуєтесь не з іменем, а з IP-адресою.
+Ви можете продовжувати використовувати проект анонімно, або почати новий сеанс як той же самий чи інший користувач.',
+'welcomecreation'            => '== Вітаємо Вас, $1! ==
+
+Ви зареєстровані.
+Не забудьте [[{{ns:special}}:Preferences|налаштувати сайт]] так, як Вам зручно.',
+'loginpagetitle'             => 'Вхід в систему',
+'yourname'                   => "Ваше ім'я",
+'yourpassword'               => 'Ваш пароль',
+'yourpasswordagain'          => 'Повторне введення паролю:',
+'remembermypassword'         => "Запам'ятовувати ваш пароль між сеансами.",
+'yourdomainname'             => 'Ваш домен',
+'externaldberror'            => 'Сталася помилка при аутентифікації за допомогою зовнішньої бази даних, або у вас недостатньо прав для внесення змін до свого зовнішнього облікового запису.',
+'loginproblem'               => '<span style="color:red">Проблема при вході в систему. <br />попробуйте ще раз!</span>',
+'alreadyloggedin'            => '<strong>Користувач $1, ви вже ввійшли в систему!</strong><br />',
+'login'                      => 'Вхід в систему',
+'loginprompt'                => "*Реєстрація користувача займає декілька секунд, а зареєстровані користувачі мають [[{{ns:project}}:В чому доцільність реєстрації|ряд переваг]]
+*Для входу в систему необхідно, щоб були активовані [[куки]] (''cookies'').",
+'userlogin'                  => 'Вхід в систему',
+'logout'                     => 'Вийти з системи',
+'userlogout'                 => 'Вийти з системи',
+'notloggedin'                => 'Ви не ввійшли в систему',
+'nologin'                    => 'Ви ще не зареєструвались? $1.',
+'nologinlink'                => 'Зареєструвати користувача',
+'createaccount'              => 'Зареєструвати нового користувача',
+'gotaccount'                 => 'Вже зареєстровані? $1.',
+'gotaccountlink'             => 'Заходьте',
+'createaccountmail'          => 'ел. поштою',
+'badretype'                  => 'Введені вами паролі не збігаються.',
+'userexists'                 => "Введене вами ім'я користувача вже існує. Виберіть будь-ласка інше ім'я.",
+'youremail'                  => 'Адреса вашої електронної пошти *:',
+'username'                   => "Ім'я користувача:",
+'uid'                        => 'Код користувача:',
+'yourrealname'               => "Справжнє ім'я *:",
+'yourlanguage'               => 'Мова інтерфейсу:',
+'yourvariant'                => 'Варіант мови',
+'yournick'                   => 'Ваш псевдонім (для підписів):',
+'badsig'                     => 'Невірний підпис. Перевірте коректність HTML тегів.',
+'email'                      => 'Електронна пошта',
+'prefs-help-email-enotif'    => 'Ця адреса також використовується для відправки електронною поштою повідомлень про зміну сторінок, якщо ви активували відповідну опцію.',
+'prefs-help-realname'        => "* Справжнє ім'я (необов'язкове поле): якщо ви його вкажете, то воно буде використовуватися щоб показувати хто редагував сторінку.",
+'loginerror'                 => 'Помилка при вході в систему',
+'prefs-help-email'           => "* Адреса електронної пошти (необов'язкове поле): дає можливість іншим користувачам зв'язатися з вами не знаючи вашої електронної пошти.",
+'nocookiesnew'               => 'Користувач зареєструвався, але не представився. {{SITENAME}} використовує «cookies» для представлення користувачів. У вас «cookies» заборонені. Будь-ласка, дозвольте їх, а потім ввійдіть під вашим новим іменем користувача й паролем.',
+'nocookieslogin'             => '{{SITENAME}} використовує «cookies» для представлення користувачів. Ви їх вимкнули. Будь-ласка, ввімкніть їх й спробуйте знову.',
+'noname'                     => 'Користувача з таким іменем не існує.',
+'loginsuccesstitle'          => 'Успішний вхід в систему',
+'loginsuccess'               => 'Тепер ви працюєте у проекті під іменем "$1".',
+'nosuchuser'                 => 'Користувача з іменем "$1" не існує. Перевірте правильність написання, або скористайтеся формою нижче, щоб зареєструвати нового користувача.',
+'nosuchusershort'            => 'Користувача з іменем "$1" не існує. Перевірте правильність написання.',
+'nouserspecified'            => "Ви повинні вказати ім'я користувача.",
+'wrongpassword'              => 'Введений вами пароль невірний. Попробуйте ще раз.',
+'wrongpasswordempty'         => 'Будь-ласка, введіть непорожній пароль.',
+'mailmypassword'             => 'Надіслати новий пароль',
+'passwordremindertitle'      => "Пам'ятка пароля користувача {{grammar:genitive|{{SITENAME}}}}",
+'passwordremindertext'       => 'Хтось (можливо, ви - з IP-адреси $1)
+зробив запит на відправлення вам нового пароля користувача проекту {{SITENAME}}.
+Пароль користувача "$2" тепер такий: "$3".
+Тепер вам необхідно ввійти в систему й змінити пароль.
+
+Якщо ви не надсилали запиту на зміну паролю, або якщо ви вже згадали свій пароль,
+ви можете ігнорувати це повідомлення й далі використовувати свій старий пароль.',
+'noemail'                    => 'Для користувача "$1" не вказано адресу електронної пошти.',
+'passwordsent'               => 'Новий пароль відправлено на адресу електронної пошти, вказану для "$1".
+
+Будь-ласка, ввійдіть в систему після отримання пароля.',
+'blocked-mailpassword'       => 'Редагування з вашої IP-адреси заборонено, заблокована також функція відновлення пароля.',
+'eauthentsent'               => 'Тимчасовий пароль відправлено на адресу електронної пошти нового користувача $1. В листі описані дії необхідні для підтвердження, що ця адреса справді належить вам.',
+'throttled-mailpassword'     => 'Функція нагадування паролю вже використовувалась протягом останніх $1 годин. Для попередження зловживань дозволено виконувати не більше одного нагадування за $1 годин.',
+'mailerror'                  => 'Помилка при відправці пошти: $1',
+'acct_creation_throttle_hit' => 'Нажаль, ви вже створили $1 облікових записів. Ви не можете створити більше жодного.',
+'emailauthenticated'         => 'Адресу вашої електронної пошти підтверджено $1.',
+'emailnotauthenticated'      => 'Адресу вашої електронної пошти <strong>ще не підтверджено</strong>, функції вікі-двигуна роботи з ел. поштою відключені.',
+'noemailprefs'               => 'Адресу електронної пошти не вказано, функції вікі роботи з ел. поштою відключені.',
+'emailconfirmlink'           => 'Підтвердити адресу вашої електронної пошти',
+'invalidemailaddress'        => 'Введену адресу не можливо прийняти, вона не відповідає формату адрес електронної пошти. Будь-ласка, введіть коректну адресу або залиште поле порожнім.',
+'accountcreated'             => 'Обліковий запис створено.',
+'accountcreatedtext'         => 'Створено обліковий запис для користувача $1.',
+
+# Password reset dialog
+'resetpass'               => 'Очистити пароль облікового запису',
+'resetpass_announce'      => 'Ви ввійшли використовуючи тимчасовий пароль, який отримали ел. поштою. Для завершення входу в систему, ви повинні вказати новий пароль.',
+'resetpass_header'        => 'Очистити пароль',
+'resetpass_submit'        => 'Вказати пароль й ввійти',
+'resetpass_success'       => 'Ваш пароль успішно змінено! Виконується вхід в систему…',
+'resetpass_bad_temporary' => 'Недійсний тимчасовий пароль. Можливо, ви вже змінили ваш пароль. Спробуйте надіслати запит на тимчасовий пароль ще раз.',
+'resetpass_forbidden'     => 'Можливість зміни паролю в цій вікі-системі не передбачена',
+'resetpass_missing'       => 'Форма не містить даних.',
+
+# Edit page toolbar
+'bold_sample'     => 'Жирний текст',
+'bold_tip'        => 'Жирний текст',
+'italic_sample'   => 'Курсив',
+'italic_tip'      => 'Курсив',
+'link_sample'     => 'Назва посилання',
+'link_tip'        => 'Внутрішнє посилання',
+'extlink_sample'  => 'http://www.example.com назва посилання',
+'extlink_tip'     => 'Зовнішнє посилання (не забудьте про префікс http://)',
+'headline_sample' => 'Текст заголовку',
+'headline_tip'    => 'Заголовок 2-го рівня',
+'math_sample'     => 'Вставте сюди формулу',
+'math_tip'        => 'Математична формула (LaTeX)',
+'nowiki_sample'   => 'Вставляйте сюди невідформатований текст.',
+'nowiki_tip'      => 'Ігнорувати вікі-форматування',
+'image_sample'    => 'Example.jpg',
+'image_tip'       => 'Зображення',
+'media_sample'    => 'Example.ogg',
+'media_tip'       => 'Посилання на медіа-файл',
+'sig_tip'         => 'Ваш підпис з часовою міткою',
+'hr_tip'          => 'Горизонтальна лінія (не використовуйте часто)',
+
+# Edit pages
+'summary'                   => 'Короткий опис змін',
+'subject'                   => 'Тема/заголовок',
+'minoredit'                 => 'Незначна зміна',
+'watchthis'                 => 'Спостерігати за цією статтею',
+'savearticle'               => 'Зберегти статтю',
+'preview'                   => 'Попередній перегляд',
+'showpreview'               => 'Попередній перегляд',
+'showlivepreview'           => 'Швидкий попередній перегляд',
+'showdiff'                  => 'Показати зміни',
+'anoneditwarning'           => "'''Увага''': Ви не ввійшли в систему. Ваша IP-адреса буде записана в історію змін цієї сторінки.",
+'missingsummary'            => "'''Увага''': Ви не дали короткого опису змін. Натиснувши кнопку «Зберегти» ще раз, ви збережете зміни без коментарю.",
+'missingcommenttext'        => 'Будь-ласка, введіть нище ваше повідомлення.',
+'missingcommentheader'      => "'''Увага''': Ви не вказали заголовок коментарю. Натиснувши кнопку «Зберегти» ще раз, ви збережете коментар без заголовку.",
+'summary-preview'           => 'Опис буде',
+'subject-preview'           => 'Заголовок буде',
+'blockedtitle'              => 'Користувача заблоковано',
+'blockedtext'               => "<big>'''Ваш обліковий запис чи IP-адреса заблоковані.'''</big>
+
+Блокування виконане адміністратором $1.
+Причина блокування:<br />''$2''<p>Ви можете зв'язатися з $1 чи іншим
+[[{{ns:special}}:Listadmins|адміністратором]] щоб обговорити блокування.
+Зверніть увагу, що ви не можете використовувати функцію «Надіслати електронного листа користувачу», якщо ви не вказали адресу вашої електронної пошти в Ваших [[Спеціальні:Preferences|конфігураціях]]
+Ваша IP-адреса - $3. Будь-ласка, вказуйте, якщо будете запитувати про блокування.
+==Зауваження для користувачів America On-Line==
+Через багаторазові акти вандалізму одного з користувачів AOL, Вікіпедія часто блокує проксі-сервери AOL. Один й той же сервер може використовуватися різними користувачами, тому, нажаль, невинні користувачі AOL часто бувають _неспеціальне_ заблоковані. Ми вибачаємося за незручності.
+Якщо це відбулося з Вами, відправте, будь-ласка, електронною поштою листа адміністратору. Не забудьте вказати вашу IP-адресу, вказану вище.",
+'blockedoriginalsource'     => 'Зміст сторінки «$1» наведено нижче:',
+'blockededitsource'         => "Текст '''ваших редагувань''' сторінки «$1» наведено нижче:",
+'whitelistedittitle'        => 'Для редагування необхідно ввійти в систему',
+'whitelistedittext'         => 'Ви повинні $1 щоб редагувати сторінки.',
+'whitelistreadtitle'        => 'Для перегляду необхідно ввійти в систему',
+'whitelistreadtext'         => 'Ви повинні [[{{ns:special}}:Userlogin|зареєструватися]] для перегляду цих сторінок.',
+'whitelistacctitle'         => 'У вас немає прав для створення облікового запису',
+'whitelistacctext'          => 'Щоб мати можливість створення облікових записів в цій вікі, ви повинні [[{{ns:special}}:Userlogin|зареєструватися]] й мати відповідні права.',
+'confirmedittitle'          => 'Для редагування необхідно підтвердити адресу ел. пошти',
+'confirmedittext'           => 'Ви повинні підтвердити вашу адресу Ел-пошти перед редагуванням сторінок. Будь-ласка вкажіть та підтвердіть вашу адресу ел. пошти у вашій [[{{ns:special}}:Preferences|конфігурації користувача]].',
+'loginreqtitle'             => 'Необхідно ввійти в систему',
+'loginreqlink'              => 'ввійти в систему',
+'loginreqpagetext'          => 'Ви повинні $1, щоб переглянути інші сторінки.',
+'accmailtitle'              => 'Пароль відіслано.',
+'accmailtext'               => 'Пароль для $1 відіслано на $2.',
+'newarticle'                => '(Нова)',
+'newarticletext'            => "Ви перейшли на статтю, яка поки що не існує.
+Щоб створити нову статтю, наберіть текст в вікні нижче
+(див. [[{{ns:project}}:Довідка|довідкову статтю]] щоб отримати більше інформації).
+Якщо ви опинились тут помилково, просто натисніть кнопку браузера '''назад'''.",
+'anontalkpagetext'          => '---- 
+\'\'Це сторінка обговорення, що належить анонімному користувачу, який ще не зареєструвався або не скористався зареєстрованим ім\'ям. Тому ми вимушені використовувати [[IP-адреса|IP-адресу]] для його ідентифікації. Одна IP-адреса може використовуватися декількома користувачами. Якщо ви - анонімний користувач і вважаєте, що отримали коментарі, адресовані не вам, будь ласка [[Спеціальні:userlogin|зареєструйтесь або увійдіть в систему як зареєстрований користувач]], щоб у майбутньому уникнути можливої плутанини з іншими анонімними користувачами.\'\'<br/>
+{| id="anontalktext" class="plainlinks noeditsection" style="font-size:90%; background-color:#F8F8F8; border: 1px solid #B8B8B8; margin:1em 1em 0em 1em; padding:0.25em 1em 0.25em 1em; clear: both;" 
+| style="padding-right: 1em;" |&#91;[http://www.dnsstuff.com/tools/ipall.ch?domain={{PAGENAMEE}} IP info] · [http://www.dnsstuff.com/tools/tracert.ch?ip={{PAGENAMEE}} Traceroute] ·  [http://www.dnsstuff.com/tools/whois.ch?ip={{PAGENAMEE}} WHOIS] · [http://www.dnsstuff.com/tools/whois.ch?server=whois.abuse.net&ip={{PAGENAMEE}} Abuse] ·  [http://www.dnsstuff.com/tools/city.ch?ip={{PAGENAMEE}} City] ·  [http://www.dnsstuff.com/tools/ptr.ch?ip={{PAGENAMEE}} RDNS]&#93;
+| &#91;[[Regional Internet Registry|RIR]]s: [http://ws.arin.net/whois/?queryinput={{PAGENAMEE}} America] · [http://www.ripe.net/fcgi-bin/whois?searchtext={{PAGENAMEE}} Europe] · [http://www.afrinic.net/cgi-bin/whois?query={{PAGENAMEE}} Africa] · [http://www.apnic.net/apnic-bin/whois.pl?searchtext={{PAGENAMEE}} Asia-Pacific] · [http://www.lacnic.net/cgi-bin/lacnic/whois?lg=EN&query={{PAGENAMEE}} Latin America/Caribbean]&#93;
+|-
+|}',
+'noarticletext'             => "<div style=\"border: 1px solid #ccc; padding: 7px; background-color: #fff; color: #000\">'''На даний момент текст в цієї статті відсутній.'''
+* '''[{{SERVER}}{{localurl:{{NAMESPACE}}:{{PAGENAME}}|action=edit}} Створити статтю {{PAGENAME}} ]'''.
+* [[{{ns:special}}:Search/{{PAGENAMEE}}|Шукати {{PAGENAME}}]] у інших статтях.
+* [[Wiktionary:uk:{{NAMESPACE}}:{{PAGENAME}}|Глянути {{PAGENAME}}]] у ВікіСловнику, нашому братньому проекті.
+* [[Special:Whatlinkshere/{{NAMESPACE}}:{{PAGENAMEE}}|Показати статті, які посилаються на цю статтю]]
+----
+* '''Якщо ви створили цю статтю кілька хвилин тому і вона не з'явилась, це може бути викликане затримками в оновленні бази даних.''' Спробуйте [{{SERVER}}{{localurl:{{NAMESPACE}}:{{PAGENAME}}|action=purge}} очистити кеш], або зачекайте й перевірте знову перед повторним створенням статті.
+</div>",
+'clearyourcache'            => "'''Зауваження:''' Після зберігання, ви маєте відновити кеш вашого браузера, щоб побачити зміни. '''Mozilla / Firefox / Safari:''' тримайте ''Shift'' коли натискаєте ''Reload'', або натисніть ''Ctrl-Shift-R'' (''Cmd-Shift-R'' на Apple Mac); '''IE:''' тримайте ''Ctrl'' коли натискаєте ''Refresh'', або натисніть ''Ctrl-F5''; '''Konqueror:''': натисніть кнопку ''Reload'', або натисніть ''F5''; '''Opera''' користувачам може знадобитись повністю очистити кеш у ''Tools→Preferences''.",
+'usercssjsyoucanpreview'    => '<strong>Підказка:</strong> Використовуйте кнопку попереднього перегляду, щоб протестувати ваш новий css-файл чи js-файл перед збереженням.',
+'usercsspreview'            => "'''Пам'ятайте, що це лише попередній перегляд вашого css-файлу, його ще не збережено!'''",
+'userjspreview'             => "'''Пам'ятайте, що це тільки попередній перегляд вашого JavaScript-файлу і поки він ще не збережений!'''",
+'userinvalidcssjstitle'     => "'''Увага:''' теми оформлення «$1» не знайдено. Пам\'ятайте, що користувацькі .css и .js сторінки повинні мати назву, що складається лише з малих букв, наприклад «{{ns:user}}:Хтось/monobook.css», а не «{{ns:user}}:Хтось/Monobook.css».",
+'updated'                   => '(Оновлена)',
+'note'                      => '<strong>Зауваження:</strong>',
+'previewnote'               => 'Зверніть увагу, - це тільки попередній перегляд, текст ще не збережено!',
+'previewconflict'           => 'Цей попередній перегляд відображає текст з верхнього вікна редагування так, як він буде виглядіти, якщо ви вирішите зберегти його.',
+'session_fail_preview'      => '<strong>Система не може зберегти ваші редагування оскільки втрачені дані сесії. Будь ласка повторіть вашу спробу. Якщо помилка буде повторюватись, спробуйте вийти з системи і зайти знов.
+</strong>',
+'session_fail_preview_html' => "<sstrong>Вибачте! Неможливо зберегти ваші зміни через втрату даних HTML-сесії.</sstrong>
+	  	 
+''Так як дана вікі дозволяє використовувати чистий HTML, попередній перегляд відключено, щоб попередити JavaScript-атаки.''
+	  	 
+<sstrong>Якщо це доброякісна спроба редагування, будь-ласка, спробуйте ще раз. Якщо не вийде знову, - спробуйте завершити сеанс роботи й ще раз ввійти до системи.</sstrong>",
+'importing'                 => 'Імпорт $1',
+'editing'                   => 'Редагування $1',
+'editinguser'               => 'Редагування <b>$1</b>',
+'editingsection'            => 'Редагування $1 (секція)',
+'editingcomment'            => 'Редагування $1 (коментар)',
+'editconflict'              => 'Конфлікт редакцій: $1',
+'explainconflict'           => 'Ще хтось змінив цю статтю з того часу, як ви розпочали її змінювати.
+В верхній частині тексту показано, як стаття виглядає зараз. Ваші зміни показані в нижній частині тексту.
+Вам необхідно буде скомпонувати ваші зміни в існуючий текст.
+Якщо ви натиснете "Зберегти статтю", то буде збережено <b>тільки</b> текст в верхньому вікні редагування.
+<p>',
+'yourtext'                  => 'Ваш текст',
+'storedversion'             => 'Збережена версія',
+'nonunicodebrowser'         => '<strong>ПОПЕРЕДЖЕННЯ: Ваш [[браузер]] не підтримує кодування [[Юнікод]]. При редагуванні статей всі не-ASCII символи будуть замінені на свої шіснадцяткові коди.</strong>',
+'editingold'                => '<strong>ПОПЕРЕДЖЕННЯ: Ви редагуєте застарілу версію даної статті.
+Якщо ви збережете її, будь-які редагування, зроблені між версіями, будуть втрачені.</strong>',
+'yourdiff'                  => 'Відмінності',
+'copyrightwarning'          => "Будь ласка, зверніть увагу, що будь-які добавлення
+й зміни в {{SITENAME}} розглядаються як випущені на умовах ліцензії$2
+(див. $1).
+Якщо ви не бажаєте, щоб написане вами безжалісно редагувалось
+і розповсюджувалося за бажанням будь-кого, - не пишіть тут.<br />
+Ви також зобов'язуєтесь, що написане вами тут належить вам чи взято з джерела,
+що є суспільною власністю чи подібним вільним джерелом.
+<strong>НЕ ПУБЛІКУЙТЕ ТУТ БЕЗ ДОЗВОЛУ ТВОРИ, ЩО Є ОБ'ЄКТОМ АВТОРСКОГО ПРАВА,
+Й ЛІЦЕНЗІЯ ЯКИХ НЕ ДОЗВОЛЯЄ ПОДІБНОЇ ПУБЛІКАЦІЇ!</strong>",
+'copyrightwarning2'         => "Будь ласка, зверніть увагу, що всі внесені вами зміни
+можуть редагуватися чи бути видаленими іншими користувачами.
+Якщо ви не бажаєте, щоб написане вами безжалісно редагувалось - не пишіть тут.<br />
+Ви також зобов'язуєтесь, що написане вами тут належить вам чи взято з джерела,
+що є суспільною власністю чи подібним вільним джерелом (див. $1).<br />
+<strong>НЕ ПУБЛІКУЙТЕ ТУТ БЕЗ ДОЗВОЛУ ТВОРИ, ЩО Є ОБ'ЄКТОМ АВТОРСКОГО ПРАВА,
+Й ЛІЦЕНЗІЯ ЯКИХ НЕ ДОЗВОЛЯЄ ПОДІБНОЇ ПУБЛІКАЦІЇ!</strong>",
+'longpagewarning'           => '<strong>ПОПЕРЕДЖЕННЯ: Довжина цієї статті $1 кілобайт; статті, розмір яких перевищує 32кб. можуть створювати проблеми для деяких браузерів.
+Розгляньте, будь-ласка, варіанти розбиття статті на менші частини.</strong>',
+'longpageerror'             => '<strong>ПОМИЛКА: текст, що ви хочете зберегти має $1 кілобайт, що більше ніж встановлену межу $2 кілобайт. Сторінку неможливо зберегти.</strong>',
+'readonlywarning'           => "<strong>ПОПЕРЕДЖЕННЯ: База даних заблокована в зв'язку з процедурами обслуговування,
+тому, на даний момент, ви не можете записати ваші зміни.
+Можливо, вам варто зберегти текст в локальний файл (на своєму диску) й зберегти його пізніше.</strong>",
+'protectedpagewarning'      => '<strong>ПОПЕРЕДЖЕННЯ: Ця стаття заблокована, так що тільки [[{{ns:project}}:Адміністратори|адміністратори]] можуть змінювати її. Будь-ласка, перегляньте
+[[{{ns:project}}:Правила захисту статей|правила захисту статей]].</strong>',
+'semiprotectedpagewarning'  => "'''Примітка:''' Ця сторінка захищена. Її можуть редагувати тільки зареєстровані користувачі.",
+'cascadeprotectedwarning'   => "'''Попередження:''' Дана сторінка захищена так, що її можуть редагувати тільки учасники групи «адміністратори», оскільки включено в наступні сторінки, для яких активована можливість каскадного захисту:",
+'templatesused'             => 'Шаблони, використані на цій сторінці:',
+'templatesusedpreview'      => 'Шаблони, використані на цій сторінці:',
+'templatesusedsection'      => 'Шаблони, використані в цій секції:',
+'edittools'                 => '<!-- Розміщений тут текст буде відображатися під формою редагування и формою завантаження. -->',
+'nocreatetitle'             => 'Створення сторінок обмежено',
+'nocreatetext'              => 'На цьому сайті обмежено можливість створення нових сторінок.
+Ви можете повернуться назад й змінити існуючу сторінку, [[{{ns:special}}:Userlogin|ввійти в систему, або створити новий обліковий запис]].',
+
+# "Undo" feature
+'undo-success' => 'Редагування відмінено. Будь-ласка, натисніть «Зберегти», щоб зберегти зміни.',
+'undo-failure' => 'Неможливо відмінити редагування через несумісність проміжних змін.',
+'undo-summary' => 'Відміна редагування № $1 користувача [[Special:Contributions/$2|$2]] ([[User talk:$2|обговорення]])',
+
+# Account creation failure
+'cantcreateaccounttitle' => 'Не можливо створити обліковий запис',
+'cantcreateaccounttext'  => 'Створення облікового запису з цієї IP-адреси (<b>$1</b>) заблоковано.
+Ймовірно через постійний вандалізм користувачів з вашого закладу чи інтернет-провайдера.',
+
+# History pages
+'revhistory'          => 'Журнал редагувань',
+'viewpagelogs'        => 'Показати журнали для цієї сторінки',
+'nohistory'           => 'Для цієї статті відсутній журнал редагувань.',
+'revnotfound'         => 'Версію не знайдено',
+'revnotfoundtext'     => 'Неможливо знайти необхідну вам версію статті.
+Будь-ласка, перевірте правильність посилання, яке ви використовували для доступу до цієї статті.',
+'loadhist'            => 'Завантаження журналу редагувань статті',
+'currentrev'          => 'Поточна версія',
+'revisionasof'        => 'Версія $1',
+'revision-info'       => 'Версія від $1; $2',
+'previousrevision'    => '← Старіша версія',
+'nextrevision'        => 'Новіша версія →',
+'currentrevisionlink' => 'Поточна версія',
+'cur'                 => 'поточн.',
+'next'                => 'наст.',
+'last'                => 'ост.',
+'orig'                => 'ориг.',
+'histlegend'          => "Пояснення: (поточн.) = відмінності від поточної версії,
+(ост.) = відмінності від попередньої версії, '''м''' = незначне редагування",
+'deletedrev'          => '[видалено]',
+'histfirst'           => 'найстаріші',
+'histlast'            => 'останні',
+
+# Revision feed
+'history-feed-title'          => 'Історія редагувань',
+'history-feed-description'    => 'Історія редагувань цієї сторінки в вікі',
+'history-feed-item-nocomment' => '$1 в $2', # user at time
+'history-feed-empty'          => 'Такої сторінки не існує.
+Її могли вилучити чи перейменувати.
+Спробуйте [[{{ns:special}}:Search|знайти в вікі]] подібні сторінки.',
+
+# Revision deletion
+'rev-deleted-comment'         => '(коментар вилучено)',
+'rev-deleted-user'            => "(ім'я автора стерто)",
+'rev-deleted-text-permission' => '<div class="mw-warning plainlinks">
+Цю версію сторінки вилучено з загального архіву.
+Можливо є пояснення в [{{fullurl:{{ns:special}}:Log/delete|page={{PAGENAMEE}}}} протоколі вилучень].
+</div>',
+'rev-deleted-text-view'       => '<div class="mw-warning plainlinks">
+Цю версію сторінки вилучено з загального архіву.
+Ви можете переглянути її, так як є адміністратором сайту.
+Можливо є пояснення в [{{fullurl:{{ns:special}}:Log/delete|page={{PAGENAMEE}}}} протоколі вилучень].
+</div>',
+'rev-delundel'                => 'показати/сховати',
+'revisiondelete'              => 'Вилучити / відновити версії сторінки',
+'revdelete-nooldid-title'     => 'Не вказана цільова версія',
+'revdelete-nooldid-text'      => 'Ви не вказали цільову версію (чи версії) для виконання цієї функції.',
+'revdelete-selected'          => 'Обрана версія [[:$1]]:',
+'revdelete-text'              => 'Вилучені версії будуть відображатися в історії сторінки,
+але їх зміст не буде доступним звичайним користувачам.
+
+Адміністратори будуть мати доступ до прихованого змісту й зможуть відновити його за допомогою цього ж інтерфейсу,
+крім випадків, коли були встановлені додаткові обмеження власниками сайту.',
+'revdelete-legend'            => 'Встановити обмеження:',
+'revdelete-hide-text'         => 'Прихований текст цієї версії сторінки',
+'revdelete-hide-comment'      => 'Приховати коментар',
+'revdelete-hide-user'         => "Приховати ім'я автора",
+'revdelete-hide-restricted'   => 'Застосовувати обмеження також і до адміністраторів',
+'revdelete-log'               => 'Коментар:',
+'revdelete-submit'            => 'Застосувати до вибраної версії',
+'revdelete-logentry'          => 'Змінено видимість версії сторінки для [[$1]]',
+
+# Diffs
+'difference'                => '(відмінності між версіями)',
+'loadingrev'                => 'завантаження версії для розрізнення',
+'lineno'                    => 'Рядок $1:',
+'editcurrent'               => 'Редагувати поточну версію цієї статті',
+'selectnewerversionfordiff' => 'Виберіть нову версію для порівняння',
+'selectolderversionfordiff' => 'Виберіть стару версію для порівняння',
+'compareselectedversions'   => 'Порівняти вибрані версії',
+'editundo'                  => 'відмінити зміни',
+'diff-multi'                => '($1 {{plural:$1|проміжну версію|проміжні версії|проміжних версій}} не показано.)',
+
+# Search results
+'searchresults'         => 'Результати пошуку',
+'searchresulttext'      => 'Для отримання детальнішої інформації про пошук у проекті, див. [[{{ns:project}}:Пошук]].',
+'searchsubtitle'        => 'На запит «[[:$1]]»',
+'searchsubtitleinvalid' => 'На запит «$1»',
+'badquery'              => 'Невірно cфомульований запит',
+'badquerytext'          => 'Неможливо обробити ваш запит.
+Можливо ви намагались знайти слово, яке коротше трьох букв, що поки-що не підтримується.
+Можливо також, що ви припустилися одруку в запиті.
+Попробуйте інший запит.',
+'matchtotals'           => 'Запиту «$1» відповідає $2 {{plural:$2|назва статті|назви статей|назв статей}} і тексти $3 {{plural:$3|стаття|статті|статей}}.',
+'noexactmatch'          => 'Статті з назвою «$1» не існує, проводиться пошук по всьому тексту.
+
+<span style="display: block; margin: 1.5em 2em">
+<strong>[[:$1|Створити статтю]]</strong></span>',
+'titlematches'          => 'Збіг в назвах статей',
+'notitlematches'        => 'Немає збігу в назвах статей',
+'textmatches'           => 'Збіг в текстах статей',
+'notextmatches'         => 'Немає збігу в текстах статей',
+'prevn'                 => 'попередні $1',
+'nextn'                 => 'наступні $1',
+'viewprevnext'          => 'Переглянути ($1) ($2) ($3).',
+'showingresults'        => 'Нижче показано <strong>$1</strong> {{plural:$1|результат|результати|результатів}}, починаючи з №&nbsp;<strong>$2</strong>',
+'showingresultsnum'     => 'Нижче показано <strong>$3</strong> {{plural:$3|результат|результати|результатів}}, починаючи з №&nbsp;<strong>$2</strong>.',
+'nonefound'             => '<strong>Зауваження:</strong>: До невдалого пошуку часто може приводити спроба знайти загальні слова, які не підлягають індексації, наприклад - "також" and "що", або використання більш ніж одного ключового для пошуку слова (показуються тільки статті, що містять всі вказані для пошуку слова).',
+'powersearch'           => 'Пошук',
+'powersearchtext'       => '
+Пошук в просторі імен :<br />
+$1<br />
+$2 Показувати перенаправлення   Пошук на $3 $9',
+'searchdisabled'        => '<p>Вибачте, повнотекстовий пошук тимчасово недоступний через перевантаження сервера; передбачається, що ця функція буде знову включена після установки нового обладнання. Поки що ми пропонуємо вам скористатися Google чи Yahoo!:</p>',
+'blanknamespace'        => 'Статті',
+
+# Preferences page
+'preferences'              => 'Налаштування',
+'mypreferences'            => 'Налаштування',
+'prefsnologin'             => 'Ви не ввійшли в систему',
+'prefsnologintext'         => 'Щоб змінити налаштування користувача ви повинні [[{{ns:special}}:Userlogin|ввійти в систему]].',
+'prefsreset'               => 'Відновлено стандартні налаштування.',
+'qbsettings'               => 'Панель навігації',
+'qbsettings-none'          => 'Не показувати панель',
+'qbsettings-fixedleft'     => 'Фіксована ліворуч',
+'qbsettings-fixedright'    => 'Фіксована праворуч',
+'qbsettings-floatingleft'  => 'Плаваюча ліворуч',
+'qbsettings-floatingright' => 'Плаваюча праворуч',
+'changepassword'           => 'Змінити пароль',
+'skin'                     => 'Оформлення',
+'math'                     => 'Відображення формул',
+'dateformat'               => 'Формат дати',
+'datedefault'              => 'Стандартний',
+'datetime'                 => 'Дата й час',
+'math_failure'             => 'Неможливо розібрати вираз',
+'math_unknown_error'       => 'невідома помилка',
+'math_unknown_function'    => 'невідома функція',
+'math_lexing_error'        => 'лексична помилка',
+'math_syntax_error'        => 'синтаксична помилка',
+'math_image_error'         => 'Перетворення в PNG відбулося з помилкою; перевірте правильність встановлення latex, dvips, gs та convert',
+'math_bad_tmpdir'          => 'Не вдається створити чи записати в тимчасовий каталог математики',
+'math_bad_output'          => 'Не вдається створити чи записати в вихідний каталог математики',
+'math_notexvc'             => 'Не знайдено програму texvc; Див. math/README — довідку про налаштування.',
+'prefs-personal'           => 'Особисті дані',
+'prefs-rc'                 => 'Сторінка останніх редагувань',
+'prefs-watchlist'          => 'Список спостереження',
+'prefs-watchlist-days'     => 'Кількість днів, що відображаються у списку спостережень:',
+'prefs-watchlist-edits'    => 'Кількість редагувань для відображення у розширеному списку спостереження:',
+'prefs-misc'               => 'Інші налаштування',
+'saveprefs'                => 'Зберегти',
+'resetprefs'               => 'Встановити стандартні налаштування',
+'oldpassword'              => 'Старий пароль:',
+'newpassword'              => 'Новий пароль:',
+'retypenew'                => 'Ще раз введіть новий пароль:',
+'textboxsize'              => 'Розміри поля вводу',
+'rows'                     => 'Рядків:',
+'columns'                  => 'Колонок:',
+'searchresultshead'        => 'Результати пошуку',
+'resultsperpage'           => 'Кількість результатів на сторінку:',
+'contextlines'             => 'Кількість рядків на результат',
+'contextchars'             => 'Кількість символів контексту на рядок',
+'stubthreshold'            => 'Поріг визначення заглушки:',
+'recentchangescount'       => 'Кількість заголовків статей на сторінці нових редагувань:',
+'savedprefs'               => 'Ваші налаштування збережено.',
+'timezonelegend'           => 'Часовий пояс',
+'timezonetext'             => 'Введіть зміщення вашого місцевого часу (в годинах) від часу сервера (UTC - за Гринвічем).',
+'localtime'                => 'Місцевий час',
+'timezoneoffset'           => 'Зміщення',
+'servertime'               => 'Час сервера',
+'guesstimezone'            => 'Заповнити з браузера',
+'allowemail'               => 'Дозволити отримувати електронну пошту від інших користувачів',
+'defaultns'                => 'За замовчанням, шукати в таких просторах імен:',
+'default'                  => 'за замовчанням',
+'files'                    => 'Файли',
+
+# User rights
+'userrights-lookup-user'     => 'Управління групами користувача',
+'userrights-user-editname'   => "Введіть ім'я користувача:",
+'editusergroup'              => 'Редагувати групи користувачів',
+'userrights-editusergroup'   => 'Змінити групи користувача',
+'saveusergroups'             => 'Зберегти групи користувача',
+'userrights-groupsmember'    => 'Член груп:',
+'userrights-groupsavailable' => 'Доступні групи:',
+'userrights-groupshelp'      => 'Виберіть групи, в які ви бажаєте включити чи з яких бажаєте виключити користувача.
+Невибрані групи не зміняться. Зняти виділення з групи можна використовуючи CTRL + ліва кнопка миші.',
+
+# Groups
+'group'            => 'Група:',
+'group-bot'        => 'Боти',
+'group-sysop'      => 'Адміністратори',
+'group-bureaucrat' => 'Бюрократи',
+'group-all'        => '(всі)',
+
+'group-bot-member'        => 'бот',
+'group-sysop-member'      => 'адміністратор',
+'group-bureaucrat-member' => 'бюрократ',
+
+'grouppage-bot'        => '{{ns:project}}:Боти',
+'grouppage-sysop'      => '{{ns:project}}:Адміністратори',
+'grouppage-bureaucrat' => '{{ns:project}}:Бюрократи',
+
+# User rights log
+'rightslog'      => 'Журнал прав користувача',
+'rightslogtext'  => 'Це протокол зміни прав користувачів.',
+'rightslogentry' => 'Користувачу $1 змінено права доступу: з $2 на $3',
+'rightsnone'     => '(ні)',
+
+# Recent changes
+'recentchanges'                     => 'Нові редагування',
+'recentchangestext'                 => "<div style=\"text-align:center\">
+На цій сторінці показано [[{{ns:help}}:Нові редагування|нові редагування]] у {{grammar:genitive|{{SITENAME}}}}.
+
+[[{{CURRENTDAY}} {{CURRENTMONTHNAMEGEN}}|{{CURRENTDAY}} {{CURRENTMONTHNAMEGEN}}]] [[{{CURRENTYEAR}}]]. 
+В базі даних є '''[[{{ns:special}}:Statistics|{{NUMBEROFARTICLES}}]]''' статей.
+<br />Нові — [[{{ns:special}}:Newpages|статті]] — [[{{ns:special}}:Newimages|зображення]] — [[{{ns:special}}:Log/newusers|користувачі]] — [[{{ns:special}}:Contributions/newbies|редагування новачків]] — [[{{ns:special}}:Log|журнали]]
+</div>",
+'rcnote'                            => 'Останні <strong>$1</strong> редагувань за <strong>$2</strong> {{plural:$2|день|дні|днів}}, на момент часу $3.',
+'rcnotefrom'                        => 'Нижче відображені редагування з <strong>$2</strong> (до <strong>$1</strong>).',
+'rclistfrom'                        => 'Показати редагування починаючи з $1.',
+'rcshowhideminor'                   => '$1 незначні редагування',
+'rcshowhidebots'                    => '$1 ботів',
+'rcshowhideliu'                     => '$1 зареєстрованих',
+'rcshowhideanons'                   => '$1 анонімів',
+'rcshowhidepatr'                    => '$1 перевірені',
+'rcshowhidemine'                    => '$1 мої редагування',
+'rclinks'                           => 'Показати останні $1 редагувань за $2 {{plural:$2|день|дні|днів}};<br />$3.',
+'diff'                              => 'різн.',
+'hist'                              => 'історія',
+'hide'                              => 'сховати',
+'show'                              => 'показати',
+'minoreditletter'                   => 'м',
+'newpageletter'                     => 'Н',
+'boteditletter'                     => 'б',
+'sectionlink'                       => '→',
+'number_of_watching_users_pageview' => '[$1 користувачів, що спостерігають]',
+'rc_categories'                     => 'Тільки з категорій (разділювач «|»)',
+'rc_categories_any'                 => 'Будь-який',
+
+# Recent changes linked
+'recentchangeslinked' => "Пов'язані редагування",
+
+# Upload
+'upload'                      => 'Завантажити файл',
+'uploadbtn'                   => 'Завантажити файл',
+'reupload'                    => 'Повторно завантажити',
+'reuploaddesc'                => 'Повернутися до форми завантаження.',
+'uploadnologin'               => 'Ви не ввійшли в систему',
+'uploadnologintext'           => 'Щоб завантажувати файли ви повинні [[{{ns:special}}:Userlogin|ввійти в систему]].',
+'upload_directory_read_only'  => 'Веб-сервер не має прав запису в папку ($1), в якій планується зберігати завантажувані файли.',
+'uploaderror'                 => 'Помилка завантаження файлу',
+'uploadtext'                  => 'За допомогою цієї форми ви можете завантажити файли на сервер.
+
+Якщо файл із вказаною вами назвою вже існує в проекті, то його буде замінено без попередження. Тому, якщо ви не збираєтесь оновлювати файл,
+було б непогано перевірити, чи такий файл вже існує.
+
+Щоби переглянути вже завантажені файли,
+зайдіть на: [[Спеціальні:imagelist|список завантажених файлів]].
+
+Завантаження й вилучення відображаються в [[{{ns:special}}:Log|протоколі завантажень]].
+
+Для вставки зображень в статті можна використовувати такі рядки:
+* <nowiki>[[{{ns:image}}:Назва_зображення.jpg]]</nowiki> 
+* <nowiki>[[{{ns:image}}:Назва_зображення.jpg|thumb|Підпис під зображенням]]</nowiki> 
+
+для інших медіа-файлів використовуйте рядок виду: 
+* <nowiki>[[{{ns:media}}:Назва_звукового_файлу.ogg]]</nowiki></tt>.',
+'uploadlog'                   => 'протокол завантажень',
+'uploadlogpage'               => 'Протокол завантажень',
+'uploadlogpagetext'           => 'Нижче наведено список останніх завантажених файлів.
+Скрізь використовується час сервера (по Гринвічу, UTC).
+<ul>
+</ul>',
+'filename'                    => 'Назва файлу',
+'filedesc'                    => 'Опис файлу',
+'fileuploadsummary'           => 'Короткий опис:',
+'filestatus'                  => 'Умови поширення',
+'filesource'                  => 'Джерело',
+'uploadedfiles'               => 'Завантажені файли',
+'ignorewarning'               => 'Ігнорувати попередження і зберегти файл.',
+'ignorewarnings'              => 'Ігнорувати всі попередження',
+'minlength'                   => 'Назва файлу повинна містити щонайменше три символи.',
+'illegalfilename'             => 'Ім\'я файлу "$1" містить букви, що недозволені в заголовках сторінок. Будь ласка перейменуйте файл і спробуйте завантажити його знову.',
+'badfilename'                 => 'Назву файла було змінено на $1.',
+'large-file'                  => 'Рекомендується використовувати зображення, розмір яких не перевищує $1 байтів (размір завантаженого файлу складає $2 байтів).',
+'largefileserver'             => 'Розмір файлу більший за максимальнодозволений.',
+'emptyfile'                   => 'Завантажений вами файл ймовірно порожній. Можливо, це сталося через помилку при введенні імені файлу. Будь-ласка, перевірте, чи справді ви бажаєте звантажити цей файл.',
+'fileexists'                  => 'Файл з такою назвою вже існує. Перевірте, будь-ласка, $1 якщо ви не впевнені чи хочете змінювати його.',
+'fileexists-forbidden'        => 'Файл з такою назвою вже існує; будь ласка поверніться та завантажте цей файл під іншою назвою. [[Image:$1|thumb|center|$1]]',
+'fileexists-shared-forbidden' => 'Файл з такою назвою вже існує в загальному сховищі файлів; будь-ласка, поверніться назад й завантажте файл під іншою назвою. [[Image:$1|thumb|center|$1]]',
+'successfulupload'            => 'Завантаження успішно завершено',
+'fileuploaded'                => 'Файл "$1" успішно завантажено.
+
+Будь-ласка, перейдіть за наступним посиланням: ($2) до сторінки з описом і внесіть наступну інформацію про файл: джерело файлу, коли й ким він був створений, та іншу інформацію про цей файл.',
+'uploadwarning'               => 'Попередження',
+'savefile'                    => 'Зберегти файл',
+'uploadedimage'               => 'завантажено «[[$1]]»',
+'uploaddisabled'              => 'Завантаження заборонене.',
+'uploaddisabledtext'          => 'Вибачте, можливість завантаження на даному сайті відключена.',
+'uploadscripted'              => 'Файл містить HTML-код або скрипт, який може помилково обробитися браузером.',
+'uploadcorrupt'               => 'Файл пошкоджений, або має невірне розширення. Будь-ласка, перевірте файл й спробуйте завантажити його ще раз.',
+'uploadvirus'                 => 'Файл містить вірус! Див. $1',
+'sourcefilename'              => 'Назва початкового файлу',
+'destfilename'                => 'Назва завантаженого файлу',
+'watchthisupload'             => 'Додати цей файл до списку спостереження',
+'filewasdeleted'              => 'Файл з такою назвою вже існував, але був вилучений. Будь-ласка, перевірте $1 перед повторним завантаженням.',
+
+'upload-proto-error'      => 'Невірний протокол',
+'upload-proto-error-text' => 'Віддалене завантаження вимагає адресів, що починаються з <code>http://</code> або <code>ftp://</code>.',
+'upload-file-error'       => 'Внутрішня помилка',
+'upload-file-error-text'  => 'Внутрішня помилка при спробі створити тимчасовий файл на сервері. Будь-ласка, зверніться до системного адміністратора.',
+'upload-misc-error'       => 'Невідома помилка завантаження',
+'upload-misc-error-text'  => 'Невідома помилка завантаження. Будь-ласка, перевірте, що вказана адреса вірна й спробуйте ще. Якщо проблема виникає знову, зверніться до системного адміністратора.',
+
+# Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
+'upload-curl-error6'       => 'Неможливо досягнути вказану адресу.',
+'upload-curl-error6-text'  => 'Неможливо досягнути вказану адресу. Будь-ласка, перевірте, що вказана адреса вірна, а сайт доступний.',
+'upload-curl-error28'      => 'Час виділений на завантаження вичерпано',
+'upload-curl-error28-text' => 'Сайт надто довго не відповідає. Будь-ласка, перевірте, що сайт працює й після невеликої паузи спробуйте ще. Можливо, операцію слід провести в інший час, коли сайт менш завантажений.',
+
+'license'            => 'Ліцензування',
+'nolicense'          => 'Відсутнє',
+'upload_source_url'  => ' (вірна, публічно доступна інтернет-адреса)',
+'upload_source_file' => " (файл на вашому комп'ютері)",
+
+# Image list
+'imagelist'                 => 'Список файлів',
+'imagelisttext'             => "Нижче подано список з '''$1''' {{plural:$1|файлу|файлів|файлів}}, відсортованих $2.",
+'imagelistforuser'          => 'Тільки зображення завантажені користувачем $1.',
+'getimagelist'              => 'отримання списку файлів',
+'ilsubmit'                  => 'Шукати',
+'showlast'                  => 'Показати останні $1 {{plural:$1|файл|файли|файлів}}, {{plural:$1|впорядкований|впорядковані|впорядкованих}} $2.',
+'byname'                    => 'за назвою',
+'bydate'                    => 'за датою',
+'bysize'                    => 'за розміром',
+'imgdelete'                 => 'вилуч.',
+'imgdesc'                   => 'опис',
+'imgfile'                   => 'файл',
+'imglegend'                 => 'Пояснення: (опис) = показати/змінити опис зображення.',
+'imghistory'                => 'Журнал зображення',
+'revertimg'                 => 'відкин.',
+'deleteimg'                 => 'вилуч.',
+'deleteimgcompletely'       => 'Вилучити всі версії',
+'imghistlegend'             => 'Пояснення: (поточ.) = це - поточне зображення, (вилуч.) = вилучити цю стару версію, (відкин.) = відкинути до цієї старої версії.
+<br /><i>Виберіть дату, щоб переглянути список зображень, звантажених на цю дату</i>.',
+'imagelinks'                => 'Посилання',
+'linkstoimage'              => 'Ось статті, що посилаються на даний файл:',
+'nolinkstoimage'            => 'Статті, що посилаються на дане зображення, відсутні.',
+'sharedupload'              => '<div style="clear:both;"></div>
+{| align=center border=0 cellpadding=2 cellspacing=2 style="border: solid #aaa 1px; background: #f9f9f9; margin: .2em auto .2em auto;"
+|- 
+| [[Image:Commons-logo.svg|20px|Wikimedia Commons logo]]
+| [[Commons:Image:{{PAGENAME}}|Відомості про цей файл]] знаходяться в [[Wikimedia Commons|ВікіСховищі]], централізованому сховищі вільно розповсюджуваних зображень та мультимедія для використання у проектах [http://wikimediafoundation.org Фонду Вікімедія].
+|}',
+'shareduploadwiki'          => 'Додаткову інформацію можна знайти на $1.',
+'shareduploadwiki-linktext' => 'сторінка опису файлу',
+'noimage'                   => 'Немає файлу з такою назвою, ви можете $1.',
+'noimage-linktext'          => 'завантажити його',
+'uploadnewversion-linktext' => 'Завантажити нову версію цього файлу',
+'imagelist_date'            => 'Дата',
+'imagelist_name'            => 'Назва',
+'imagelist_user'            => 'Користувач',
+'imagelist_size'            => 'Розмір (в байтах)',
+'imagelist_description'     => 'Опис',
+'imagelist_search_for'      => 'Пошук по назві зображення:',
+
+# MIME search
+'mimesearch' => 'Пошук по MIME',
+'mimetype'   => 'MIME-тип:',
+'download'   => 'завантажити',
+
+# Unwatched pages
+'unwatchedpages' => 'Сторінки, за якими ніхто не спостерігає',
+
+# List redirects
+'listredirects' => 'Список перенаправлень',
+
+# Unused templates
+'unusedtemplates'     => 'Шаблони, що не використовуються',
+'unusedtemplatestext' => 'На цій сторінці перераховані все сторінки простору імен «Шаблони», які не включені в інші сторінки. Не забувайте перевірити відсутність інших посилань на шаблон, перш ніж вилучати його.',
+'unusedtemplateswlh'  => 'інші посилання',
+
+# Random redirect
+'randomredirect' => 'Випадкове перенаправлення',
+
+# Statistics
+'statistics'             => 'Статистика',
+'sitestats'              => 'Статистика сайту',
+'userstats'              => 'Статистика користувачів',
+'sitestatstext'          => "Загалом в базі даних є '''\$1''' сторінок.
+Сюди входять сторінки «обговорень», статті про Вікіпедію, мінімальні статті-\"заглушки\", перенаправлення, та інші сторінки, які, можливо, не повинні розглядатися як статті.
+За винятком них, є '''\$2''' сторінок, які вважаються повноцінними статтями. Для того щоб сторінка вважалася повноцінною статтею, вона повинна перебувати в основному просторі імен і містити хоча б одне внутрішнє посилання.<p>
+
+З моменту встановлення програмного забезпечення зроблено '''\$3''' переглядів та '''\$4''' редагувань статей.
+Таким чином, в середньому на одну сторінку припадає '''\$5''' редагувань та '''\$6''' переглядів на одне редагування.
+
+{{plural:\$8 | Був завантажений | Було завантажено | Було завантажено}} '''\$8''' {{plural:\$8 | файл | файли | файлів}}.
+
+Величина [[:meta:Help:Job queue | черги завдань]] становить '''\$7'''.
+
+",
+'userstatstext'          => "{{plural:$1|Зареєструвався|Зареєструвалося|Зареєструвалося}} '''$1''' {{plural:$1|користувач|користувачі|користувачів}}, з яких '''$2''' ($4 %) належать до групи «$5».",
+'statistics-mostpopular' => 'Сторінки, які найчастіше переглядають',
+
+'disambiguations'     => 'Багатозначні статті',
+'disambiguationspage' => '{{SITENAME}}:Посилання на багатозначні статті
+
+*[[{{ns:template}}:Disambig]]',
+
+'doubleredirects'     => 'Подвійні перенаправлення',
+'doubleredirectstext' => '<b>Увага:</b> Цей список може містити невірні елементи. Це значить, що після першої директиви #REDIRECT йде додатковий текст з посиланнями.<br />
+Кожен рядок містить посилання на перше та друге перенаправлення, а також перший рядок тексту другого перенаправлення, що, звичайно, містить "реальне" перенаправлення на необхідну статтю, куди повинно вказувати й перше перенаправлення.',
+
+'brokenredirects'        => 'Розірвані перенаправлення',
+'brokenredirectstext'    => 'Наступні перенаправлення вказують на неіснуючі статті:',
+'brokenredirects-edit'   => '(редагувати)',
+'brokenredirects-delete' => '(вилучити)',
+
+# Miscellaneous special pages
+'nbytes'                  => '$1 {{PLURAL:$1|байт|байти|байтів}}',
+'ncategories'             => '$1 {{PLURAL:$1|категорія|категорії|категорій}}',
+'nlinks'                  => '$1 {{PLURAL:$1|посилання|посилання|посилань}}',
+'nmembers'                => "$1 {{PLURAL:$1|об'єкт|об'єкти|об'єктів}}",
+'nrevisions'              => '$1 {{PLURAL:$1|версія|версії|версій}}',
+'nviews'                  => '$1 {{PLURAL:$1|перегляд|перегляди|переглядів}}',
+'lonelypages'             => 'Статті-сироти',
+'lonelypagestext'         => 'На наступні сторінки не посилається жодна стаття цієї вікі.',
+'uncategorizedpages'      => 'Некатегоризовані сторінки',
+'uncategorizedcategories' => 'Некатегоризовані категорії',
+'uncategorizedimages'     => 'Некатегоризовані зображення',
+'unusedcategories'        => 'Категорії, що не використовуються',
+'unusedimages'            => 'Файли, що не використовуються',
+'popularpages'            => 'Популярні статті',
+'wantedcategories'        => 'Необхідні категорії',
+'wantedpages'             => 'Необхідні статті',
+'mostlinked'              => 'Сторінки, на які найбільше посилань',
+'mostlinkedcategories'    => 'Категорії, на які найбільше посилань',
+'mostcategories'          => 'Статті з найбільшою кількістю категорій',
+'mostimages'              => 'Найвживаніші зображення',
+'mostrevisions'           => 'Статті з найбільшою кількістю редакцій',
+'allpages'                => 'Всі статті',
+'prefixindex'             => 'Статті, що починаються з',
+'randompage'              => 'Випадкова стаття',
+'shortpages'              => 'Короткі статті',
+'longpages'               => 'Довгі статті',
+'longpages-summary'       => '',
+'deadendpages'            => 'Статті без посилань',
+'deadendpagestext'        => 'Наступні сторінки не містять посилань на інші сторінки цієї вікі.',
+'listusers'               => 'Список користувачів',
+'specialpages'            => 'Спеціальні сторінки',
+'spheading'               => 'Спеціальні сторінки',
+'restrictedpheading'      => 'Спеціальні сторінки з обмеженим доступом',
+'rclsub'                  => '(на статті, посилання на які є на «$1»)',
+'newpages'                => 'Нові статті',
+'newpages-username'       => "Ім'я користувача:",
+'ancientpages'            => 'Найстаріші статті',
+'intl'                    => 'Міжмовні посилання',
+'move'                    => 'Перемістити',
+'movethispage'            => 'Перемістити статтю',
+'unusedimagestext'        => '<p>Будь-ласка, врахуйте, що інші веб-сайти можуть використовувати прямі посилання (URL) на це зображення, і тому зображення може активно використовуватися не дивлячись на його присутність в цьому списку.',
+'unusedcategoriestext'    => 'Існують такі сторінки-категорій, що не містять статей чи інших категорій.',
+
+# Book sources
+'booksources'               => 'Джерела книг',
+'booksources-search-legend' => 'Пошук інформації про книгу',
+'booksources-go'            => 'Знайти',
+'booksources-text'          => 'На цій сторінці наведено список посилань на сайти, де ви, можливо, знайдете додаткову інформацію про книгу. Це інтернет-магазини й системи пошуку в бібліотечних каталогах.',
+
+'categoriespagetext' => 'У вікі є такі категорії.',
+'data'               => 'Дані',
+'userrights'         => 'Управління правами користувачів',
+'groups'             => 'Групи користувачів',
+'isbn'               => 'ISBN',
+'alphaindexline'     => 'від $1 до $2',
+'version'            => 'Версія MediaWiki',
+
+# Special:Log
+'specialloguserlabel'  => 'Користувач:',
+'speciallogtitlelabel' => 'Назва:',
+'log'                  => 'Журнали',
+'alllogstext'          => 'Комбінований показ журналів завантаження, видалення, захисту, блокування й адміністрування. Ви можете відфільтрувати результати по типу журналу, імені користувача або сторінки.',
+'logempty'             => 'В журналі немає подібних записів.',
+
+# Special:Allpages
+'nextpage'          => 'Наступна сторінка ($1)',
+'prevpage'          => 'Попередня сторінка ($1)',
+'allpagesfrom'      => 'Показати статті починаючи з:',
+'allarticles'       => 'Всі статті',
+'allinnamespace'    => 'Всі сторінки (простір імен «$1»)',
+'allnotinnamespace' => 'Всі сторінки (крім простору імен «$1»)',
+'allpagesprev'      => 'попередні',
+'allpagesnext'      => 'наступні',
+'allpagessubmit'    => 'Виконати',
+'allpagesprefix'    => 'Показати статті, що починаються з:',
+'allpagesbadtitle'  => 'Заголовок даної сторінки не є допустимим: можливо, він занадто довгий або містить інтервікі чи міжмовний префікс. Можливо він містити інші символи, недопустимі у назвах.',
+
+# Special:Listusers
+'listusersfrom' => 'Показати користувачів починаючи з:',
+
+# E-mail user
+'mailnologin'     => 'Відсутня адреса для відправки',
+'mailnologintext' => 'Щоб мати можливість відправляти електронну пошту іншим користувачам ви повинні [[{{ns:special}}:Userlogin|ввійти в систему]]
+й мати адресу електронної пошти в ваших [[{{ns:special}}:Preferences|налаштуваннях]],
+щоб мати можливість надсилати електронну пошту іншим користувачам.',
+'emailuser'       => 'Надіслати електронного листа цьому користувачу',
+'emailpage'       => 'Надіслати електронного листа користувачу',
+'emailpagetext'   => 'Якщо цей користувач вказав справжню адресу електронної пошти в своїх настройках, то заповнивши наведену нижче форму, можна надіслати йому повідомлення.
+Електронна адреса, яку ви вказали в своїх настройках, буде вказана в полі "Від кого" листа, тому отримувач буде мати можливість відповісти.',
+'usermailererror' => 'При відправці повідомлення електронної пошти сталася помилка:',
+'defemailsubject' => '{{SITENAME}} e-mail',
+'noemailtitle'    => 'Відсутня адреса електронної пошти',
+'noemailtext'     => 'Цей користувач не вказав коректної адреси електронної пошти, або вказав, що не бажає отримувати листи від інших користувачів.',
+'emailfrom'       => 'Від кого',
+'emailto'         => 'Кому',
+'emailsubject'    => 'Тема листа',
+'emailmessage'    => 'Повідомлення',
+'emailsend'       => 'Надіслати',
+'emailccme'       => 'Надіслати мені копію повідомлення.',
+'emailccsubject'  => 'Копія вашого повідомлення до $1: $2',
+'emailsent'       => 'Електронне повідомлення надіслано',
+'emailsenttext'   => 'Ваше електронне повідомлення надіслано.',
+
+# Watchlist
+'watchlist'            => 'Список спостереження',
+'mywatchlist'            => 'Список спостереження',
+'watchlistfor'         => "(користувача '''$1''')",
+'nowatchlist'          => 'Ваш список спостереження порожній.',
+'watchlistanontext'    => 'Вам необхідно $1, щоб переглянути чи редагувати список спостереження.',
+'watchlistcount'       => "'''В вашому списку спостереження $1 {{plural:$1|сторінка|сторінки|стрінок}}, включно зі сторінками обговорення.'''",
+'clearwatchlist'       => 'Очистити список спостереження',
+'watchlistcleartext'   => 'Ви впевнені, що хочете їх вилучити?',
+'watchlistclearbutton' => 'Очистити список спостереження',
+'watchlistcleardone'   => 'Ваш список спостереження очищено. $1 {{plural:$1|сторінка|сторінки|сторінок}} вилучено зі списку.',
+'watchnologin'         => 'Ви не ввійшли в систему',
+'watchnologintext'     => 'Щоб змінювати список спостереження, ви повинні [[{{ns:special}}:Userlogin|ввійти в систему]].',
+'addedwatch'           => 'Додана до списку спостереження',
+'addedwatchtext'       => "Сторінка «[[:$1]]» додана до вашого [[{{ns:special}}:Watchlist|списку спостереження]]. Наступні редагування цієї статті й пов'язані з нею дискусії будуть відображатися тут, а також будуть відображатися <b>жирним шрифтом</b> на сторінці зі [[{{ns:special}}:Recentchanges|списком останніх редагувань]], щоб їх було легше помітити.
+
+Якщо пізніше ви захочете вилучити статтю зі свого списку спостереження, виберіть <b>«Скасувати спостереження»</b> в списку інструментів.",
+'removedwatch'         => 'Вилучена зі списку спостереження',
+'removedwatchtext'     => 'Статтю «[[:$1]]» вилучено з вашого списку спостереження.',
+'watch'                => 'Спостерігати',
+'watchthispage'        => 'Спостерігати за статтею',
+'unwatch'              => 'Скасувати спостереження',
+'unwatchthispage'      => 'Скасувати спостереження',
+'notanarticle'         => 'Не стаття',
+'watchnochange'        => 'За вказаний період в статтях з списку спостереження нічого не змінено.',
+'watchdetails'         => 'В вашому списку спостереження є $1 {{plural:$1|сторінка|сторінки|сторінок}} (не враховуючи сторінок обговорення).
+* [[{{ns:special}}:Watchlist/edit|Показати й відредагувати повний список]]
+* [[{{ns:special}}:Watchlist/clear|Вилучити всі сторінки зі списку]]',
+'wlheader-enotif'      => '* Звістка ел. поштою ввімкнено.',
+'wlheader-showupdated' => "* Сторінки, що змінилися після як ви їх востаннє відвідували, виділені '''жирним''' шрифтом.",
+'watchmethod-recent'   => 'перегляд останніх редагувань статей за якими ведеться спостереження',
+'watchmethod-list'     => 'перегляд статей за якими ведеться спостереження',
+'removechecked'        => 'Вилучити позначені елементи',
+'watchlistcontains'    => 'Ваш список спостереження містить $1 {{plural:$1|сторінку|сторінки|сторінок}}.',
+'watcheditlist'        => 'Нижче наведено алфавітний список статей, за якими ви спостерігаєте. Позначте статті, які ви хочете вилучити з вашого
+списку спостереження й натисніть кнопку "Вилучити позначені елементи"
+внизу сторінки.',
+'removingchecked'      => 'Вилучення вибраних елементів зі списку спостереження…',
+'couldntremove'        => 'Неможливо вилучити елемент «$1»…',
+'iteminvalidname'      => 'Проблема з елементом «$1», недопустима назва…',
+'wlnote'               => 'Нижче наведені останні $1 {{plural:$1|редагування|редагування|редагувань}} за {{plural:$2|останній|останні|останні}} <strong>$2</strong> {{plural:$2|годину|години|годин}}.',
+'wlshowlast'           => 'Показати останні $1 години $2 дні $3',
+'wlsaved'              => 'Це збережена версія вашого списку спостереження',
+'watchlist-show-bots'  => 'Показати редагування ботів',
+'watchlist-hide-bots'  => 'Сховати редагування ботів',
+'watchlist-show-own'   => 'показати мої редагування',
+'watchlist-hide-own'   => 'сховати мої редагування',
+'watchlist-show-minor' => 'показати незначні редагування',
+'watchlist-hide-minor' => 'сховати незначні редагування',
+'wldone'               => 'Виконано.',
+
+# Displayed when you click the "watch" button and it's in the process of watching
+'watching'   => 'Додати до списку спостереження…',
+'unwatching' => 'Вилучення зі списку спостереження…',
+
+'enotif_mailer'      => '{{SITENAME}} Служба сповіщення поштою',
+'enotif_reset'       => 'Помітити всі сторінки як переглянуті',
+'enotif_newpagetext' => 'Це нова сторінка.',
+'changed'            => 'змінено',
+'created'            => 'створено',
+'enotif_subject'     => 'Сторінку проекту «{{SITENAME}}» $PAGETITLE було $CHANGEDORCREATED користувачем $PAGEEDITOR',
+'enotif_lastvisited' => 'Див. $1 щоб переглянути всі зміни, що відбулися після вашого останнього перегляду.',
+'enotif_body'        => '$WATCHINGUSERNAME,
+
+$PAGEEDITDATE сторінку проекту «{{SITENAME}}» $PAGETITLE було $CHANGEDORCREATED користувачем $PAGEEDITOR, див. $PAGETITLE_URL щоб переглянути поточну версію.
+
+$NEWPAGE
+
+Короткий опис змін: $PAGESUMMARY $PAGEMINOREDIT
+
+Звернутися до користувача, що редагував:
+ел. почта $PAGEEDITOR_EMAIL
+вікі $PAGEEDITOR_WIKI
+
+Не буде подальшого сповіщення в разі нових змін, якщо Ви не відвідуєте цю сторінку. Ви могли також повторно встановити флаги сповіщення для всіх сторінок в вашому списку спостереження.
+
+             Система сповіщення {{grammar:genitive|{{SITENAME}}}}
+
+--
+Змінити налаштування вашого списку спостереження можна на
+{{fullurl:{{ns:special}}:Watchlist/edit}}
+
+Зворотній зв\'язок та допомога:
+{{fullurl:{{ns:help}}:Зміст}}',
+
+# Delete/protect/revert
+'deletepage'                  => 'Вилучити статтю',
+'confirm'                     => 'Підтвердження',
+'excontent'                   => 'зміст: «$1»',
+'excontentauthor'             => 'зміст був: «$1» (єдиним автором був [[{{ns:special}}:Contributions/$2|$2]])',
+'exbeforeblank'               => 'зміст до очистки: «$1»',
+'exblank'                     => 'стаття була порожньою',
+'confirmdelete'               => 'Підтвердити вилучення',
+'deletesub'                   => '(«$1» вилучається)',
+'historywarning'              => 'Попередження: Стаття, яку ви збираєтеся вилучити, має журнал редагувань:',
+'confirmdeletetext'           => 'Ви ось-ось назавжди вилучите статтю або файл і всі її журнали редагувань з бази даних.
+Будь-ласка, підтвердіть, що ви бажаєте зробити це, що ви повністю розумієте наслідки і що ви робите це у відповідності з [[{{ns:project}}:Правила|правилами Вікіпедії]].',
+'actioncomplete'              => 'Дію виконано',
+'deletedtext'                 => '"$1" було вилучено.
+Див. $2 для перегляду списку останніх вилучень.',
+'deletedarticle'              => 'вилучено "$1"',
+'dellogpage'                  => 'Список вилучень',
+'dellogpagetext'              => 'Далі наведено список останніх вилучень.
+Всюди використовується час сервера (за Гринвічем, UTC).
+<ul>
+</ul>',
+'deletionlog'                 => 'список вилучень',
+'reverted'                    => 'Відновлено зі старої версії',
+'deletecomment'               => 'Причина вилучення',
+'imagereverted'               => 'Повернення до молодшої версії виконано.',
+'rollback'                    => 'Відкинути редагування',
+'rollback_short'              => 'Відкинути',
+'rollbacklink'                => 'відкинути',
+'rollbackfailed'              => 'Відкинути зміни не вдалося',
+'cantrollback'                => 'Неможливо відкинути редагування, останній хто редагував є єдиним автором цієї статті.',
+'alreadyrolled'               => 'Неможливо відкинути останні редагування [[:$1]],
+зроблені [[User:$2|$2]] ([[User talk:$2|Talk]]); хтось інший вже змінив чи відкинув редагування цієї статті.
+
+Остані редагування зробив [[User:$3|$3]] ([[User talk:$3|Talk]]).',
+'editcomment'                 => 'Редагування прокоментовано так: <em>«$1»</em>.', # only shown if there is an edit comment
+'revertpage'                  => 'Відкинути всі редагування до зробленого $1',
+'sessionfailure'              => 'Здається, виникли проблеми с поточним сеансом роботи;
+цю дію було відмінено з ціллю попередити «захоплення сеансу».
+Будь-ласка, натисніть кнопку «Назад» й перезавантажте сторінку, з якої ви пришли.',
+'protectlogpage'              => 'Протокол захисту',
+'protectlogtext'              => 'Нижче наведено список установок й зняття захисту з сторінки.
+Додаткова інформація: [[{{ns:project}}:Захищена стаття]].',
+'protectedarticle'            => 'захист на [[$1]] встановлено',
+'unprotectedarticle'          => 'знято захист зі сторінки «[[$1]]»',
+'protectsub'                  => '(Встановлення захисту для «$1»)',
+'confirmprotecttext'          => 'Ви дійсно бажаєте встановити захист для даної сторінки?',
+'confirmprotect'              => 'Підтвердження встановлення захисту',
+'protectmoveonly'             => 'Захистити тільки від перейменування (переміщення)',
+'protectcomment'              => 'Причина встановлення захисту',
+'unprotectsub'                => '(Зняття захисту з «$1»)',
+'confirmunprotecttext'        => 'Ви дійсно бажаєте зняти захист даної сторінки?',
+'confirmunprotect'            => 'Підтвердження зняття захисту',
+'unprotectcomment'            => 'Причина зняття захисту',
+'protect-unchain'             => 'Розблокувати перейменування сторінки',
+'protect-text'                => 'Тут ви можете переглянути ти змінити рівень захисту сторінки <strong>[[:$1]]</strong>.',
+'protect-default'             => '(за замовчанням)',
+'protect-level-autoconfirmed' => 'Захистити від незареєстрованих та нових користувачів',
+'protect-level-sysop'         => 'Тільки адміністратори',
+
+# Restrictions (nouns)
+'restriction-edit' => 'Редагувати',
+'restriction-move' => 'Перемістити',
+
+# Undelete
+'undelete'                 => 'Переглянути вилучені статті',
+'undeletepage'             => 'Переглянути й відновити вилучені статті',
+'viewdeletedpage'          => 'Переглянути видалені сторінки',
+'undeletepagetext'         => 'Наступні статті було вилучено, але вони ще в архіві і тому можуть бути відновлені. Архів періодично очищається.',
+'undeleteextrahelp'        => "Для повного відновлення сторінки залиште всі поля пустими й натисніть '''«Відновити»'''. Для часткового відновлення відмітьте ті версії сторінки, які необхідно відновити й натисніть '''«Відновити»'''. Натисніть '''«Очистити»''', щоб вимкнути всі помітки й очистити коментар.",
+'undeleterevisions'        => 'В архіві $1 {{plural:$1|версія|версії|версій}}',
+'undeletehistory'          => 'Якщо ви відновите статтю, всі версії будуть також відновлені, разом з журналом редагувань.
+Якщо з моменту вилучення було створено статтю з такою ж назвою, відновлені версії будуть вказані в журналі редагувань перед новими записами, але поточна версія існуючої статті не буде замінена автоматично.',
+'undeletehistorynoadmin'   => 'Стаття вилучена. Причина вилучення та список користувачів, що редагували статтю до вилучення, вказані нижче. Текст вилученої статті можуть переглянути лише адміністратори.',
+'undeleterevision-missing' => 'Невірна версія. Помилкове посилання, або вказану версію сторінки вилучено з архіву.',
+'undeletebtn'              => 'Відновити',
+'undeletereset'            => 'Очистити',
+'undeletecomment'          => 'Коментар:',
+'undeletedarticle'         => '«[[$1]]» відновлено',
+'undeletedrevisions'       => '$1 {{plural:$1|редагування|редагування|редагувань}} відновлено',
+'undeletedrevisions-files' => '$1 {{plural:$1|версія|версії|версій}} та $2 {{plural:$2|файл|файли|файлів}} відновлено',
+'undeletedfiles'           => '$1 {{plural:$1|файл|файли|файлів}} відновлено',
+'cannotundelete'           => 'Не вдалося скасувати видалення, хтось інший вже міг відмінити видалення сторінки.',
+'undeletedpage'            => "<big>'''Статтю \"\$1\" відновлено'''</big>
+
+Подивіться [[{{ns:special}}:Log/delete|список вилучень]], щоб дізнатися про останні вилучення та відновлення.",
+
+# Namespace form on various pages
+'namespace' => 'Простір імен:',
+'invert'    => 'Крім вибраного',
+
+# Contributions
+'contributions' => 'Внесок користувача',
+'mycontris'     => 'Мій внесок',
+'contribsub2'    => 'Внесок $1 ($2)',
+'nocontribs'    => 'Редагувань, що задовольняють заданим умовам не знайдено.',
+'ucnote'        => 'Нижче наведено останні <strong>$1</strong> редагувань цього користувача за останні <strong>$2</strong> дні(ів).',
+'uclinks'       => 'Переглянути $1 {{plural:$1|останнє редагування|останніх редагування|останніх редагувань}}; за {{plural:$2|останній|останні|останні}} $2 {{plural:$2|день|дні|днів}}.',
+'uctop'         => ' (остання)',
+
+'sp-contributions-newest'      => 'Найновіші',
+'sp-contributions-oldest'      => 'Найдавніші',
+'sp-contributions-newer'       => 'Новіші $1',
+'sp-contributions-older'       => 'Давніші $1',
+'sp-contributions-newbies-sub' => 'Внесок новачків',
+'sp-contributions-blocklog'    => 'Протокол блокувань',
+
+'sp-newimages-showfrom' => 'Показати нові зображення починаючи з $1',
+
+# What links here
+'whatlinkshere' => 'Посилання сюди',
+'notargettitle' => 'Не вказано ціль',
+'notargettext'  => 'Ви не вказали цільову статтю чи користувача, для яких необхідно виконати цю дію.',
+'linklistsub'   => '(Список посилань)',
+'linkshere'     => "На '''[[:$1]]''' посилаються такі статті:",
+'nolinkshere'   => "На статтю '''[[:$1]]''' не вказує жодна стаття.",
+'isredirect'    => 'сторінка-перенаправлення',
+'istemplate'    => 'включення',
+
+# Block/unblock
+'blockip'                     => 'Заблокувати IP-адресу',
+'blockiptext'                 => 'Використовуйте форму нижче, щоби заблокувати можливість збереження зі вказаної IP-адреси. Це може бути зроблене виключно для попередження [[{{ns:project}}:Вандалізм|вандалізму]] і тільки у відповідності до [[{{ns:project}}:Правила|правил Вікіпедії]]. Нижче вкажіть конкретну причину (наприклад, процитуйте деякі статті з ознаками вандалізму).',
+'ipaddress'                   => 'IP-адреса',
+'ipadressorusername'          => "IP-адреса/Ім'я користувача",
+'ipbexpiry'                   => 'Закінчиться через',
+'ipbreason'                   => 'Причина',
+'ipbanononly'                 => 'Блокувати тільки анонімних користувачів',
+'ipbcreateaccount'            => 'Заборонити створення нових облікових записів',
+'ipbenableautoblock'          => 'Автоматично блокувати IP-адреси, які використовуються цим користувачем та будь-які наступні адреси, з яких він буде редагувати',
+'ipbsubmit'                   => 'Заблокувати доступ цьому користувачу',
+'ipbother'                    => 'Інший термін',
+'ipboptions'                  => '15 хвилин:15 minutes,2 години:2 hours,1 день:1 day,3 дні:3 days,1 тиждень:1 week,2 тижні:2 weeks,1 місяць:1 month,3 місяці:3 months,6 місяців:6 months,1 рік:1 year,назавжди:infinite',
+'ipbotheroption'              => 'Інший термін',
+'badipaddress'                => 'IP-адреса записана в невірному форматі, або користувача з таким іменем не існує.',
+'blockipsuccesssub'           => 'Блокування проведено',
+'blockipsuccesstext'          => '[[{{ns:Special}}:Contributions/$1|«$1»]] заблоковано.
+<br />Див. [[{{ns:special}}:Ipblocklist|список заблокованих IP-адрес]].',
+'unblockip'                   => 'Розблокувати IP-адресу',
+'unblockiptext'               => 'Використовуйте подану нижче форму, щоб відновити можливість збереження з раніше заблокованої IP-адреси.',
+'ipusubmit'                   => 'Розблокувати цю адресу',
+'unblocked'                   => '[[User:$1|$1]] розблоковано.',
+'ipblocklist'                 => 'Список заблокованих IP-адрес та користувачів',
+'blocklistline'               => '$1, $2 заблокував $3 ($4)',
+'infiniteblock'               => 'блокування на невизначений термін',
+'expiringblock'               => 'блокування закінчиться $1',
+'anononlyblock'               => 'тільки анонімів',
+'noautoblockblock'            => 'автоблокування вимкнене',
+'createaccountblock'          => 'Створення облікових записів заблоковане',
+'ipblocklistempty'            => 'Список блокувань порожній.',
+'blocklink'                   => 'заблокувати',
+'unblocklink'                 => 'розблокувати',
+'contribslink'                => 'внесок',
+'autoblocker'                 => 'Доступ заблоковано автоматично, тому що ви використовуєте ту саму адресу, що й "$1". Причина блокування: "$2".',
+'blocklogpage'                => 'Журнал блокувань',
+'blocklogentry'               => '«[[$1]]» заблоковано на $2',
+'blocklogtext'                => ":''<span class=\"plainlinks\">[{{fullurl:Special:Ipblocklist|action=unblock}} '''Розблокувати користувача''']</span> Журнал блокування й розблокування користувачів. IP-адреси, що блокуються автоматично тут не вказуються. Див. [[{{ns:special}}:Ipblocklist|список поточних заборон і блокувань]].",
+'unblocklogentry'             => '«$1» розблоковано',
+'block-log-flags-anononly'    => 'тільки анонімні користувачі',
+'block-log-flags-autoblock'   => 'автоблокування дозволено',
+'range_block_disabled'        => 'Адміністраторам заборонено блокувати діапазони.',
+'ipb_expiry_invalid'          => 'Невірно вказано термін.',
+'ipb_already_blocked'         => '«$1» уже заблоковано. Для того, щоб призначити новий термін блокування, спочатку розблокуйте його.',
+'ip_range_invalid'            => 'Неприпустимий діапазон IP-адрес.\n',
+'proxyblocker'                => 'Блокування проксі',
+'ipb_cant_unblock'            => 'Помилка: блокування з ID $1 не знайдено. Можливо користувача вже було розблоковано.',
+'proxyblockreason'            => "Вашу IP-адресу заблоковано тому, що це відкритий проксі. Будь-ласка, зв'яжіться з вашим інтернет-провайдером чи службою підтримки й повідомте їм про цю серйозну проблему безпеки.",
+'proxyblocksuccess'           => 'Виконано.',
+'sorbsreason'                 => 'Ваша IP-адреса числиться як відкритий проксі в DNSBL.',
+'sorbs_create_account_reason' => 'Ваша IP-адреса числиться як відкритий проксі в DNSBL. Ви не можете створити обліковий запис.',
+
+# Developer tools
+'lockdb'              => 'Заблокувати базу даних (режим "тільки для читання")',
+'unlockdb'            => 'Розблокувати базу даних',
+'lockdbtext'          => 'Блокування бази даних унеможливить редагування статей, налаштувань, списків спостереження та виконувати інші дії, що вимагають доступу до бази даних.
+Будь-ласка, підтвердіть, що це - саме те, що ви бажаєте зробити, і що ви відміните блокування коли закінчите обслуговування бази даних.',
+'unlockdbtext'        => 'Розблокування бази даних надасть можливість знову
+редагувати статті, конфігурації, списки спостереження та виконувати інші дії, що вимагають доступу до бази даних.
+Будь-ласка, підтвердіть, що це - саме те, що ви хочете зробити.',
+'lockconfirm'         => "Так, я дійсно хочу заблокувати базу даних (перейти в режим ''тільки для читання'').",
+'unlockconfirm'       => 'Так, я дійсно хочу розблокувати базу даних.',
+'lockbtn'             => "Заблокувати базу даних (режим ''тільки для читання'')",
+'unlockbtn'           => 'Розблокувати базу даних',
+'locknoconfirm'       => 'Ви не поставили галочку в поле підтвердження.',
+'lockdbsuccesssub'    => 'Базу даних заблоковано',
+'unlockdbsuccesssub'  => 'Базу даних розблоковано',
+'lockdbsuccesstext'   => 'Базу даних проекту заблоковано.
+<br />Не забудьте її [[{{ns:special}}:Unlockdb|розблокувати]] після завершення обслуговування.',
+'unlockdbsuccesstext' => 'Базу даних проекту розблоковано.',
+'lockfilenotwritable' => 'Немає права на запис в файл блокування бази даних. Щоб заблокувати чи розблокувати БД, веб-сервер повинен мати дозвіл на запис в цей файл.',
+'databasenotlocked'   => 'База даних не заблокована.',
+
+# Move page
+'movepage'                => 'Перемістити статтю',
+'movepagetext'            => "За допомогою форми що нижче, ви можете перейменувати статтю, одночасно перемістивши на нове місце і журнал її редагувань.
+Стаття з старою назвою стане перенаправленням на нову статтю.
+Посилання на стару назву не будуть змінені; обов'язково
+перевірте, що не з'явилося [[{{ns:special}}:DoubleRedirects|подвійних]] чи [[{{ns:special}}:BrokenRedirects|розірваних]] перенаправлень.
+Ви відповідаєте за те, щоб переконатися, що посилання далі вказують туди,
+куди припускалося.
+
+Зверніть увагу, що стаття '''не''' буде переміщена, якщо стаття
+з новою назвою вже існує, якщо тільки вона не пуста і не є
+перенаправленням, а журнал її редагувань порожній. Це означає, що ви
+можете повернути статті стару назву, якщо ви перейменували її
+помилково, але ви не можете затерти існуючу статтю.
+
+<b>ПОПЕРЕДЖЕННЯ!</b>
+
+Дана дія може стати причиною серйозних та неочікуваних змін популярних статей;
+будь-ласка, перед продовженням переконайтесь, що ви впевнені й розумієте можливі наслідки.",
+'movepagetalktext'        => "Приєднана сторінка обговорення, якщо така існує,
+також буде автоматично переміщена, '''крім наступних випадків:'''
+*Ви переміщаєте статтю з одного простору імен в інший,
+*Непуста сторінка обговорення з таким іменем вже існує, або
+*Ви не поставили галочку в полі, що нижче.
+
+В цих випадках, ви будете вимушені, в разі необхідності, перемістити чи об'єднати статті вручну.",
+'movearticle'             => 'Перемістити статтю',
+'movenologin'             => 'Ви не ввійшли в систему',
+'movenologintext'         => 'Щоб перемістити статтю, ви повинні [[{{ns:special}}:Userlogin|ввійти в систему]].',
+'newtitle'                => 'Нова назва',
+'move-watch'              => 'Спостерігати за цією статтею',
+'movepagebtn'             => 'Перемістити статтю',
+'pagemovedsub'            => 'Переміщення виконано',
+'pagemovedtext'           => 'Назву статті [[$1|«$1»]] змінена на [[$2|«$2»]].',
+'articleexists'           => '<b>Перейменування неможливе.</b> Сторінка з такою назвою вже існує, або
+вибрана вами назва неприпустима.
+
+Будь ласка, виберіть іншу назву або залиште запит [[{{ns:project}}:Адміністратори|адміністраторам]] на сторінці обговорення.
+
+<font color="red">Не переносьте текст зі сторінки на сторінку вручну</font>, тому що при цьому втрачається історія редагувань.',
+'talkexists'              => "Стаття була перейменована, але сторінка обговорення
+не може бути переміщена, бо сторінка з такаю назвою вже
+існує. Будь-ласка, об'єднайте їх вручну.",
+'movedto'                 => 'тепер називається',
+'movetalk'                => 'Перемістити також і сторінку обговорення , якщо це можливо.',
+'talkpagemoved'           => 'Відповідну сторінку обговорення також переміщено.',
+'talkpagenotmoved'        => 'Відповідну сторінку обговорення <strong>не</strong> переміщено.',
+'1movedto2'               => '«[[$1]]» змінено на «[[$2]]»',
+'1movedto2_redir'         => '«[[$1]]» змінено на «[[$2]]», встановлено перенаправлення',
+'movelogpage'             => 'Протокол перейменувань',
+'movelogpagetext'         => 'Далі подано список перейменованих сторінок.',
+'movereason'              => 'Причина',
+'revertmove'              => 'відкинути',
+'delete_and_move'         => 'Вилучити і перемістити',
+'delete_and_move_text'    => '==Потрібне видалення==
+
+Стаття з назвою "[[$1]]" вже існує. Бажаєте видалити її для звільнення шляху для переміщення?',
+'delete_and_move_confirm' => 'Так, вилучити цю сторінку',
+'delete_and_move_reason'  => 'Видалена для звільнення шляху для переміщення',
+'selfmove'                => 'Неможливо перейменувати сторінку: поточна й нова назви сторінки співпадають.',
+'immobile_namespace'      => 'Вихідний або цільовий заголовок спеціального типу; не можна переміщувати сторінки з або до цього простору імен.',
+
+# Export
+'export'          => 'Експорт статей',
+'exporttext'      => 'Ви можете експортувати текст та журнал змін конкретної сторінки чи множини сторінок в XML, який пізніше можна імпортувати в іншу вікі, що використовує програмне забезпечення MediaWiki.
+
+Щоб експортувати статті, введіть їх назви в поле редагування, одну назву на рядок, й виберіть чи бажаєте ви експортувати всю історію змін статей, чи тільки останні версії статей.
+
+Ви також можете використовувати спеціальну адресу для експорту тільки останньої версії. Наприклад, для сторіники «{{int:mainpage}}» ця адреса така: [[{{ns:Special}}:Export/{{int:mainpage}}]].',
+'exportcuronly'   => 'Включати тільки поточну версію, без повної історії',
+'exportnohistory' => "----
+'''Зауваження:''' експорт всієї історії змін сторінок вимкнутий через проблеми з ресурсами.",
+'export-submit'   => 'Експорт',
+
+# Namespace 8 related
+'allmessages'               => 'Всі повідомлення системи',
+'allmessagesname'           => 'Назва',
+'allmessagesdefault'        => 'Стандартний текст',
+'allmessagescurrent'        => 'Поточний текст',
+'allmessagestext'           => 'Це список усіх системних повідомлень, які доступні в просторі імен «MediaWiki:».',
+'allmessagesnotsupportedUI' => 'Встановлена поточна мова <strong>$1</strong> не підтримується Special:Allmessages на цьому сайті.',
+'allmessagesnotsupportedDB' => "'''Special:Allmessages''' не підтримується, так як вимкнена опція '''wgUseDatabaseMessages'''.",
+'allmessagesfilter'         => 'Фільтр в форматі регулярного виразу:',
+'allmessagesmodified'       => 'Показати лише змінені',
+
+# Thumbnails
+'thumbnail-more'  => 'Збільшити',
+'missingimage'    => '<strong>Відсутнє зображення</strong><br /><em>$1</em>\n',
+'filemissing'     => 'Файл не знайдено',
+'thumbnail_error' => 'Помилка створення мініатюри: $1',
+
+# Special:Import
+'import'                     => 'Імпорт статей',
+'importinterwiki'            => 'Міжвікі імпорт',
+'import-interwiki-text'      => 'Вкажіть вікі й назву імпортованої сторінки.
+Дати змін й імена авторів буде збережено.
+Всі операції межвікі імпорту реєструються в [[{{ns:special}}:Log/import|відповідному протоколі]].',
+'import-interwiki-history'   => 'Копіювати всю історію змін цієї сторінки',
+'import-interwiki-submit'    => 'Імпортувати',
+'import-interwiki-namespace' => 'Розміщати сторінки в просторі імен:',
+'importtext'                 => 'Будь-ласка, експортуйте сторінку з іншої вікі використовуючи інструмент Special:Export, збережіть файл, а потім завантажте його сюди.',
+'importstart'                => 'Імпорт сторінок…',
+'import-revision-count'      => '$1 {{PLURAL:$1|версія|версії|версій}}',
+'importnopages'              => 'Сторінки для імпорту відсутні.',
+'importfailed'               => 'Не вдалося імпортувати: $1',
+'importunknownsource'        => 'Невідомий тип імпортованої сторінки',
+'importcantopen'             => 'Неможливо відкрити файл імпорту',
+'importbadinterwiki'         => 'Невірне інтервікі-посилання',
+'importnotext'               => 'Текст відсутній',
+'importsuccess'              => 'Імпорт виконано!',
+'importhistoryconflict'      => 'Конфлікт існуючих версій (можливо, цю сторінку вже імпортували)',
+'importnosources'            => 'Не було вибрано джерело міжвікі імпорту, пряме завантаження історії змін вимкнете.',
+'importnofile'               => 'Файл імпорту не було завантажено.',
+'importuploaderror'          => 'Помилка завантаження файлу, можливо величина файлу перевищує встановлену норму.',
+
+# Import log
+'importlogpage'                    => 'Журнал імпорту',
+'importlogpagetext'                => 'Імпорт адміністраторами сторінок з історією редагувань з інших вікі.',
+'import-logentry-upload'           => '«[[$1]]» — імпорт з файлу',
+'import-logentry-upload-detail'    => '$1 версій',
+'import-logentry-interwiki'        => '«$1» — міжвікі імпорт',
+'import-logentry-interwiki-detail' => '$1 версій з $2',
+
+# Keyboard access keys for power users
+'accesskey-search'                  => 'f',
+'accesskey-minoredit'               => 'i',
+'accesskey-save'                    => 's',
+'accesskey-preview'                 => 'p',
+'accesskey-diff'                    => 'v',
+'accesskey-compareselectedversions' => 'v',
+'accesskey-watch'                   => 'w',
+
+# Tooltip help for the actions
+'tooltip-search'                  => 'Шукати [alt-f]',
+'tooltip-minoredit'               => 'Відмінити це редагування як незначне [alt-i]',
+'tooltip-save'                    => 'зберегти ваші редагування [alt-s]',
+'tooltip-preview'                 => 'Попередній перегляд сторінок, будь-ласка, використовуйте перед збереженням! [alt-p]',
+'tooltip-diff'                    => 'Показати зміни, що зроблені відносно початкового тексту. [alt-v]',
+'tooltip-compareselectedversions' => 'Переглянути різницю між двома вказаними версіями цієї сторінки. [alt-v]',
+'tooltip-watch'                   => 'Додати поточну сторінку в список спостереження [alt-w]',
+'tooltip-recreate'                => 'Відновити сторінку недивлячись на те, що її вилучено',
+
+# Stylesheets
+'common.css'   => '/** Розміщений тут CSS буде застосовуватися до всіх тем оформлення */',
+'monobook.css' => '/* Розміщений тут CSS буде застосовуватися до всіх тем оформлення Monobook */
+
+/*
+Це необхідно щоб в вікні пошуку кнопки не розбивались на два рядки
+нажаль в main.css для кнопки Go прописані паддінги .5em.
+Але український текст довший ("Перейти") --st0rm
+*/
+
+#searchGoButton {
+    padding-left: 0em;
+    padding-right: 0em;
+    font-weight: bold;
+}',
+
+# Scripts
+'common.js'   => '/* Розміщений тут код JavaScript буде завантажений всім користувачам при зверненні до будь-якої сторінки */',
+'monobook.js' => "/* tooltips and access keys */
+var ta = new Object();
+ta['pt-userpage'] = new Array('.','Моя сторінка користувача');
+ta['pt-anonuserpage'] = new Array('.','Сторінка користувача для мого IP');
+ta['pt-mytalk'] = new Array('n','Моя сторінка обговорення');
+ta['pt-anontalk'] = new Array('n','Сторінка обговорення для моєї IP-адреси');
+ta['pt-preferences'] = new Array('','Мої налаштування');
+ta['pt-watchlist'] = new Array('l','Список моїх сторінок спостереження.');
+ta['pt-mycontris'] = new Array('y','Список моїх внесків');
+ta['pt-login'] = new Array('o','Тут можна зареєструватися, та це не обов\"язково.');
+ta['pt-anonlogin'] = new Array('o','Тут можна зареєструватися, та це не обов\"язково.');
+ta['pt-logout'] = new Array('o','Вийти з системи');
+ta['ca-talk'] = new Array('t','Обговорення сторінки');
+ta['ca-edit'] = new Array('e','Ви можете редагувати цю сторінку. Будь ласка використовуйте кнопку попереднього перегляду перед тим, як зберегти зміни.');
+ta['ca-addsection'] = new Array('+','Додати коментар до цього обговорення.');
+ta['ca-viewsource'] = new Array('e','Ця сторінка захищена. Ви можете переглянути її зміст.');
+ta['ca-history'] = new Array('h','Попередні версії цієї сторінки.');
+ta['ca-protect'] = new Array('=','Захистити цю сторінку');
+ta['ca-delete'] = new Array('d','Вилучити цю сторінку');
+ta['ca-undelete'] = new Array('d','Відновити редагування, що були зроблені до вилучення цієї сторінки');
+ta['ca-move'] = new Array('m','Перемістити цю сторінку');
+ta['ca-watch'] = new Array('w','Додати цю сторінку до вашого списку спостереження');
+ta['ca-unwatch'] = new Array('w','Вилучити цю сторінку з вашого списку спостереження');
+ta['search'] = new Array('f','Пошук по цій вікі');
+ta['p-logo'] = new Array('','Головна стаття');
+ta['n-mainpage'] = new Array('z','Перейти до Головної статті');
+ta['n-portal'] = new Array('','Про проект, про те, що ви можете зробити, що й де знаходиться');
+ta['n-currentevents'] = new Array('','Інформація про актуальні події');
+ta['n-recentchanges'] = new Array('r','Список поточних редагувань у цій вікі.');
+ta['n-randompage'] = new Array('x','Перейти до випадкової статті');
+ta['n-help'] = new Array('','Довідка проекту.');
+ta['n-sitesupport'] = new Array('','Підтримати проект');
+ta['t-whatlinkshere'] = new Array('j','Список всіх сторінок вікі, що мають посилання сюди');
+ta['t-recentchangeslinked'] = new Array('k','Останні редагування сторінок, на які є посилання з цієї сторінки');
+ta['feed-rss'] = new Array('','Трансляція в форматі RSS для цієї сторінки');
+ta['feed-atom'] = new Array('','Трансляція в форматі Atom для цієї сторінки');
+ta['t-contributions'] = new Array('','Переглянути список редагувань цього користувача');
+ta['t-emailuser'] = new Array('','Відіслати електронного листа цьому користувачу');
+ta['t-upload'] = new Array('u','Завантажити зображення або медіа-файли');
+ta['t-specialpages'] = new Array('q','Список всіх спеціальних сторінок');
+ta['t-print']=new Array('', 'Версія без кнопок, придатна для друку');
+ta['t-permalink'] = new Array('', 'Посилання на поточну версію цієї сторінки');
+ta['ca-nstab-main'] = new Array('c','Переглянути зміст сторінки');
+ta['ca-nstab-user'] = new Array('c','Переглянути сторінку користувача');
+ta['ca-nstab-media'] = new Array('c','Переглянути медіа-сторінку');
+ta['ca-nstab-special'] = new Array('','Це спеціальна сторінка, ви не можете її редагувати.');
+ta['ca-nstab-wp'] = new Array('a','Переглянути захищену сторінку');
+ta['ca-nstab-project'] = new Array('a','Сторінка проекту');
+ta['ca-nstab-image'] = new Array('c','Переглянути сторінку зображення');
+ta['ca-nstab-mediawiki'] = new Array('c','Переглянути системне повідомлення');
+ta['ca-nstab-template'] = new Array('c','Переглянути шаблон');
+ta['ca-nstab-help'] = new Array('c','Переглянути сторінку допомоги');
+ta['ca-nstab-category'] = new Array('c','Переглянути категорію');",
+
+# Metadata
+'nodublincore'      => 'Метадані Dublin Core RDF заборонені для цього сервера.',
+'nocreativecommons' => 'Метадані Creative Commons RDF заборонені для цього сервера.',
+'notacceptable'     => "Вікі-сервер не може подати дані в форматі, який міг би прочитати ваш браузер.<br />
+The wiki server can't provide data in a format your client can read.",
+
+# Attribution
+'anonymous'        => 'Анонімні користувачі {{grammar:genitive|{{SITENAME}}}}',
+'siteuser'         => 'Користувач {{grammar:genitive|{{SITENAME}}}} $1',
+'lastmodifiedatby' => 'Остання зміна $2, $1 користувачем $3.', # $1 date, $2 time, $3 user
+'and'              => 'і',
+'othercontribs'    => 'Базується на праці $1.',
+'others'           => 'інші',
+'siteusers'        => 'Користувач(і) {{grammar:genitive|{{SITENAME}}}} $1',
+'creditspage'      => 'Подяки',
+'nocredits'        => 'Відсутній список користувачів для цієї статті',
+
+# Spam protection
+'spamprotectiontitle'    => 'Спам-фільтр',
+'spamprotectiontext'     => 'Сторінка, яку ви намагаєтесь зберегти, заблокована спам-фільтром. Ймовірно вона містить посилання на зовнішній сайт.',
+'spamprotectionmatch'    => 'Наступне повідомлення отримане від спам-фільтра: $1.',
+'subcategorycount'       => 'Ця категорія містить $1 {{PLURAL:$1|підкатегорію|підкатегорії|підкатегорій}}.',
+'categoryarticlecount'   => 'Категорія містить $1 {{PLURAL:$1|статтю|статті|статей}}.',
+'category-media-count'   => 'У цій категорії $1 {{PLURAL:$1|файл|файли|файлів}}.',
+'listingcontinuesabbrev' => ' (продовження)',
+'spambot_username'       => 'Очистка спаму',
+'spam_reverting'         => 'Відкинути до останньої версії, що не містить посилання на $1',
+'spam_blanking'          => 'Всі версії містять посилання на $1, очистка',
+
+# Info page
+'infosubtitle'   => 'Інформація про сторінку',
+'numedits'       => 'Кількість редагувань (стаття): $1',
+'numtalkedits'   => 'Кількість редагувань (сторінка обговорення): $1',
+'numwatchers'    => 'Кількість спостерігачів: $1',
+'numauthors'     => 'Кількість авторів (стаття): $1',
+'numtalkauthors' => 'Кількість авторів (сторінка обговорення): $1',
+
+# Math options
+'mw_math_png'    => 'Завжди генерувати PNG',
+'mw_math_simple' => 'HTML в простих випадках, інакше - PNG',
+'mw_math_html'   => 'Якщо можливо - HTML, інакше PNG',
+'mw_math_source' => 'Залишити в вигляді ТеХ (для текстових браузерів)',
+'mw_math_modern' => 'Рекомендовано для сучасних браузерів',
+'mw_math_mathml' => 'Якщо можливо - MathML (експериментальна опція)',
+
+# Patrolling
+'markaspatrolleddiff'                 => 'Позначити як перевірену',
+'markaspatrolledtext'                 => 'Позначити цю статтю як перевірену',
+'markedaspatrolled'                   => 'Позначити як перевірена',
+'markedaspatrolledtext'               => 'Вибрана версія позначена як перевірена.',
+'rcpatroldisabled'                    => 'Патрулювання останніх змін заборонене',
+'rcpatroldisabledtext'                => 'Можливість патрулювання останніх змін зараз вимкнена.',
+'markedaspatrollederror'              => 'Неможливо позначити як перевірену',
+'markedaspatrollederrortext'          => 'Ви повинні вказати редакцію, яку буде позначено як перевірену.',
+'markedaspatrollederror-noautopatrol' => 'Вам не дозволено відмічати власні редагування як перевірені.',
+
+# Image deletion
+'deletedrevision' => 'Видалена стара версія $1.',
+
+# Browsing diffs
+'previousdiff' => '← Попередня різниця',
+'nextdiff'     => 'Наступна різниця →',
+
+# Media information
+'mediawarning' => "'''Увага''': цей файл може містити шкідливий програмний код, виконання якого може бути небезпечним для вашої системи. <hr />",
+'imagemaxsize' => 'Обмежити розмір зображень на сторінках опису зображень до:',
+'thumbsize'    => 'Розмір зменшеної версії зображення:',
+'widthheight'  => '$1 × $2',
+
+'newimages'    => 'Галерея нових файлів',
+'showhidebots' => '($1 ботів)',
+'noimages'     => 'Файли відсутні.',
+
+'passwordtooshort' => 'Ваш пароль занадто короткий. Він має містити принаймні $1 символів.',
+
+# Metadata
+'metadata'          => 'Метадані',
+'metadata-help'     => 'Файл містить додаткові дані, які зазвичай додаються цифровими камерами чи сканерами. Якщо файл редагувався після створення, то деякі параметри можуть не відповідати цьому зображенню.',
+'metadata-expand'   => 'Показати додаткові дані',
+'metadata-collapse' => 'Приховати додаткові дані',
+'metadata-fields'   => 'Поля метаданих, перераховані в цьому списку, будуть автоматично відображені на сторінці зображення, всі інші будуть приховані.
+* make
+* model
+* datetimeoriginal
+* exposuretime
+* fnumber
+* focallength',
+
+# EXIF tags
+'exif-imagewidth'                  => 'Ширина',
+'exif-imagelength'                 => 'Висота',
+'exif-bitspersample'               => 'Глибина кольору',
+'exif-compression'                 => 'Метод стиснення',
+'exif-photometricinterpretation'   => 'Колірна модель',
+'exif-orientation'                 => 'Орієнтація кадру',
+'exif-samplesperpixel'             => 'Кількість кольорових компонентів',
+'exif-planarconfiguration'         => 'Принцип організації даних',
+'exif-ycbcrsubsampling'            => 'Відношення розмірів компонентів Y та C',
+'exif-ycbcrpositioning'            => 'Порядок розміщення компонентів Y та C',
+'exif-xresolution'                 => 'Горизонтальна роздільна здатність',
+'exif-yresolution'                 => 'Вертикальна роздільна здатність',
+'exif-resolutionunit'              => 'Одиниця вимірювання роздільної здатності',
+'exif-stripoffsets'                => 'Положення блоку даних',
+'exif-rowsperstrip'                => 'Кількість рядків в 1 блоці',
+'exif-stripbytecounts'             => 'Розмір стиснутого блоку',
+'exif-jpeginterchangeformat'       => 'Положення початку блоку preview',
+'exif-jpeginterchangeformatlength' => 'Розмір даних блоку preview',
+'exif-transferfunction'            => 'Функція перетворення колірного простору',
+'exif-whitepoint'                  => 'Колірність білої точки',
+'exif-primarychromaticities'       => 'Колірність основних кольорів',
+'exif-ycbcrcoefficients'           => 'Коефіцієнти перетворення колірної моделі',
+'exif-referenceblackwhite'         => 'Положенння білої й чорної точок',
+'exif-datetime'                    => 'Дата й час редагування файлу',
+'exif-imagedescription'            => 'Назва зображення',
+'exif-make'                        => 'Виробник камери',
+'exif-model'                       => 'Модель камери',
+'exif-software'                    => 'Програмне забезпечення',
+'exif-artist'                      => 'Автор',
+'exif-copyright'                   => 'Власник авторського права',
+'exif-exifversion'                 => 'Версія Exif',
+'exif-flashpixversion'             => 'Версія FlashPix, що підтримується',
+'exif-colorspace'                  => 'Колірний простір',
+'exif-componentsconfiguration'     => 'Конфігурація кольорових компонентів',
+'exif-compressedbitsperpixel'      => 'Глибина кольору після стиснення',
+'exif-pixelydimension'             => 'Повна висота зображення',
+'exif-pixelxdimension'             => 'Повна ширина зображення',
+'exif-makernote'                   => 'Додаткові дані виробника',
+'exif-usercomment'                 => 'Додатковий коментар',
+'exif-relatedsoundfile'            => 'Файл звукового коментаря',
+'exif-datetimeoriginal'            => 'Оригинальні дата й час',
+'exif-datetimedigitized'           => 'Дата й час оцифровки',
+'exif-subsectime'                  => 'Долі секунд часу редагування файлу',
+'exif-subsectimeoriginal'          => 'Долі секунд оригінального часу',
+'exif-subsectimedigitized'         => 'Долі секунд часу оцифровки',
+'exif-exposuretime'                => 'Час експозиції',
+'exif-exposuretime-format'         => '$1 з ($2)',
+'exif-fnumber'                     => 'Число діафрагми',
+'exif-fnumber-format'              => 'f/$1',
+'exif-exposureprogram'             => 'Програма експозиції',
+'exif-spectralsensitivity'         => 'Спектральна чутливість',
+'exif-isospeedratings'             => 'Світлочутливість ISO',
+'exif-oecf'                        => 'OECF (коефіцієнт оптикоелектричного перетворення)',
+'exif-shutterspeedvalue'           => 'Витримка',
+'exif-aperturevalue'               => 'Діафрагма',
+'exif-brightnessvalue'             => 'Яскравість',
+'exif-exposurebiasvalue'           => 'Компенсація експозиції',
+'exif-maxaperturevalue'            => 'Мінімальне число діафрагми',
+'exif-subjectdistance'             => "Відстань до об'єкту",
+'exif-meteringmode'                => 'Режим вимірювання експозиції',
+'exif-lightsource'                 => 'Джерело світла',
+'exif-flash'                       => 'Статус спалаху',
+'exif-focallength'                 => 'Фокусна відстань',
+'exif-focallength-format'          => '$1 мм',
+'exif-subjectarea'                 => "Положення й площа об'єкту зйомки",
+'exif-flashenergy'                 => 'Енергія спалаху',
+'exif-spatialfrequencyresponse'    => 'Просторова частотна характеристика',
+'exif-focalplanexresolution'       => 'Роздільна здатність по X в фокальній площині',
+'exif-focalplaneyresolution'       => 'Роздільна здатність по Y в фокальній площині',
+'exif-focalplaneresolutionunit'    => 'Одиниця вимірювання роздільної здатності в фокальній площині',
+'exif-subjectlocation'             => "Положення об'єкту відносно лівого верхнього кута",
+'exif-exposureindex'               => 'Індекс експозиції',
+'exif-sensingmethod'               => 'Тип сенсора',
+'exif-filesource'                  => 'Джерело файла',
+'exif-scenetype'                   => 'Тип сцени',
+'exif-cfapattern'                  => 'Тип кольорового фільтра',
+'exif-customrendered'              => 'Додаткова обробка',
+'exif-exposuremode'                => 'Режим обрання експозиції',
+'exif-whitebalance'                => 'Баланс білого',
+'exif-digitalzoomratio'            => 'Коефіцієнт цифрового збільшення (цифровий зум)',
+'exif-focallengthin35mmfilm'       => 'Еквівалентна фокусна відстань (для 35 мм плівки)',
+'exif-scenecapturetype'            => 'Тип сцени при зйомці',
+'exif-gaincontrol'                 => 'Підвищення яскравості',
+'exif-contrast'                    => 'Контрастність',
+'exif-saturation'                  => 'Насиченість',
+'exif-sharpness'                   => 'Різкість',
+'exif-devicesettingdescription'    => 'Опис налаштування камери',
+'exif-subjectdistancerange'        => "Відстань до об'єкту зйомки",
+'exif-imageuniqueid'               => 'Номер зображення (ID)',
+'exif-gpsversionid'                => 'Версія блоку GPS-інформації',
+'exif-gpslatituderef'              => 'Індекс широти',
+'exif-gpslatitude'                 => 'Широта',
+'exif-gpslongituderef'             => 'Індекс довготи',
+'exif-gpslongitude'                => 'Довгота',
+'exif-gpsaltituderef'              => 'Індекс висоти',
+'exif-gpsaltitude'                 => 'Висота',
+'exif-gpstimestamp'                => 'Точний час по UTC',
+'exif-gpssatellites'               => 'Опис використаних супутників',
+'exif-gpsstatus'                   => 'Статус приймача в момент зйомки',
+'exif-gpsmeasuremode'              => 'Метод вимірювання положення',
+'exif-gpsdop'                      => 'Точність вимірювання',
+'exif-gpsspeedref'                 => 'Одиниці вимірювання швидкості',
+'exif-gpsspeed'                    => 'Швидкість руху',
+'exif-gpstrackref'                 => 'Тип азимута приймача GPS (справжній, магнітний)',
+'exif-gpstrack'                    => 'Азимут приймача GPS',
+'exif-gpsimgdirectionref'          => 'Тип азимута зображення (справжній, магнітний)',
+'exif-gpsimgdirection'             => 'Азимут зображення',
+'exif-gpsmapdatum'                 => 'Використана геодезична система координат',
+'exif-gpsdestlatituderef'          => "Індекс довготи о'єктУа",
+'exif-gpsdestlatitude'             => "Довгота об'єкту",
+'exif-gpsdestlongituderef'         => "Індекс широти об'єкту",
+'exif-gpsdestlongitude'            => "Широта об'єкту",
+'exif-gpsdestbearingref'           => "Тип пеленга об'єкту (справжній, магнітний)",
+'exif-gpsdestbearing'              => "Пеленг об'єкту",
+'exif-gpsdestdistanceref'          => 'Одиниці вимірювання відстані',
+'exif-gpsdestdistance'             => 'Відстань',
+'exif-gpsprocessingmethod'         => 'Метод обчислення положення',
+'exif-gpsareainformation'          => 'Назва області GPS',
+'exif-gpsdatestamp'                => 'Дата',
+'exif-gpsdifferential'             => 'Диференційна поправка',
+
+# EXIF attributes
+'exif-compression-1' => 'Нестиснутий',
+'exif-compression-6' => 'JPEG',
+
+'exif-photometricinterpretation-2' => 'RGB',
+'exif-photometricinterpretation-6' => 'YCbCr',
+
+'exif-orientation-1' => 'Нормальна', # 0th row: top; 0th column: left
+'exif-orientation-2' => 'Відображено по горизонталі', # 0th row: top; 0th column: right
+'exif-orientation-3' => 'Повернуто на 180°', # 0th row: bottom; 0th column: right
+'exif-orientation-4' => 'Відображено по вертикалі', # 0th row: bottom; 0th column: left
+'exif-orientation-5' => 'Повернуто на 90° проти годинникової стрілки й відображено по вертикалі', # 0th row: left; 0th column: top
+'exif-orientation-6' => 'Повернуто на 90° за годинниковою стрілкою', # 0th row: right; 0th column: top
+'exif-orientation-7' => 'Повернуто на 90° за годинниковою стрілкою й відображено по вертикалі', # 0th row: right; 0th column: bottom
+'exif-orientation-8' => 'Повернуто на 90° проти годинникової стрілки', # 0th row: left; 0th column: bottom
+
+'exif-planarconfiguration-1' => 'формат «chunky»',
+'exif-planarconfiguration-2' => 'формат «planar»',
+
+'exif-xyresolution-i' => '$1 точок на дюйм',
+'exif-xyresolution-c' => '$1 точок на сантиметр',
+
+'exif-colorspace-1'      => 'sRGB',
+'exif-colorspace-ffff.h' => 'FFFF.H',
+
+'exif-componentsconfiguration-0' => 'не існує',
+'exif-componentsconfiguration-1' => 'Y',
+'exif-componentsconfiguration-2' => 'Cb',
+'exif-componentsconfiguration-3' => 'Cr',
+'exif-componentsconfiguration-4' => 'R',
+'exif-componentsconfiguration-5' => 'G',
+'exif-componentsconfiguration-6' => 'B',
+
+'exif-exposureprogram-0' => 'Невідомо',
+'exif-exposureprogram-1' => 'Ручний режим',
+'exif-exposureprogram-2' => 'Програмний режим (нормальний)',
+'exif-exposureprogram-3' => 'Пріоритет діафрагми',
+'exif-exposureprogram-4' => 'Пріоритет витримки',
+'exif-exposureprogram-5' => 'Художня програма (на основі необхідної глибини різкості)',
+'exif-exposureprogram-6' => 'Спортивний режим (з мінімальною витримкою)',
+'exif-exposureprogram-7' => 'Портретний режим (для знімків на близькій відстані, з фоном не в фокусі)',
+'exif-exposureprogram-8' => 'Пейзажний режим (для пейзажних знімків, з фоном в фокусі)',
+
+'exif-subjectdistance-value' => '$1 метрів',
+
+'exif-meteringmode-0'   => 'Невідомо',
+'exif-meteringmode-1'   => 'Середній',
+'exif-meteringmode-2'   => 'Центрозважений',
+'exif-meteringmode-3'   => 'Точковий',
+'exif-meteringmode-4'   => 'Багатоточковий',
+'exif-meteringmode-5'   => 'Матричний',
+'exif-meteringmode-6'   => 'Частковий',
+'exif-meteringmode-255' => 'Інший',
+
+'exif-lightsource-0'   => 'Невідомо',
+'exif-lightsource-1'   => 'Денне світло',
+'exif-lightsource-2'   => 'Лампа денного світла',
+'exif-lightsource-3'   => 'Лампа розжарювання',
+'exif-lightsource-4'   => 'Спалах',
+'exif-lightsource-9'   => 'Хороша погода',
+'exif-lightsource-10'  => 'Хмарно',
+'exif-lightsource-11'  => 'Тінь',
+'exif-lightsource-12'  => 'Лампа денного світла тип D (5700 − 7100K)',
+'exif-lightsource-13'  => 'Лампа денного світла тип N (4600 − 5400K)',
+'exif-lightsource-14'  => 'Лампа денного світла тип W (3900 − 4500K)',
+'exif-lightsource-15'  => 'Лампа денного світла тип WW (3200 − 3700K)',
+'exif-lightsource-17'  => 'Стандартне джерело світла типу A',
+'exif-lightsource-18'  => 'Стандартне джерело світла типу B',
+'exif-lightsource-19'  => 'Стандартне джерело світла типу C',
+'exif-lightsource-20'  => 'D55',
+'exif-lightsource-21'  => 'D65',
+'exif-lightsource-22'  => 'D75',
+'exif-lightsource-23'  => 'D50',
+'exif-lightsource-24'  => 'Студійна лампа стандарту ISO',
+'exif-lightsource-255' => 'Інше джерело світла',
+
+'exif-focalplaneresolutionunit-2' => 'дюймів',
+
+'exif-sensingmethod-1' => 'Невизначений',
+'exif-sensingmethod-2' => 'Однокристальний матричний сенсор кольорів',
+'exif-sensingmethod-3' => 'Сенсор кольорів з двома матрицями',
+'exif-sensingmethod-4' => 'Сенсор кольорів с трьома матрицями',
+'exif-sensingmethod-5' => 'Матричний сенсор з послідовною зміною кольору',
+'exif-sensingmethod-7' => 'Трьохколірний лінійний сенсор',
+'exif-sensingmethod-8' => 'Лінійний сенсор з послідовною зміною кольору',
+
+'exif-filesource-3' => 'Цифровий фотоапарат',
+
+'exif-scenetype-1' => 'Зображення сфотографовано напряму',
+
+'exif-customrendered-0' => 'Не виконувалась',
+'exif-customrendered-1' => 'Нестандартна обробка',
+
+'exif-exposuremode-0' => 'Автоматична експозиція',
+'exif-exposuremode-1' => 'Ручне налаштування експозиції',
+'exif-exposuremode-2' => 'Брекетінґ',
+
+'exif-whitebalance-0' => 'Автоматичний баланс білого',
+'exif-whitebalance-1' => 'Ручне налаштування балансу білого',
+
+'exif-scenecapturetype-0' => 'Стандартний',
+'exif-scenecapturetype-1' => 'Ландшафт',
+'exif-scenecapturetype-2' => 'Портрет',
+'exif-scenecapturetype-3' => 'Нічна зйомка',
+
+'exif-gaincontrol-0' => 'Немає',
+'exif-gaincontrol-1' => 'Невелике збільшення',
+'exif-gaincontrol-2' => 'Велике збільшення',
+'exif-gaincontrol-3' => 'Невелике зменшення',
+'exif-gaincontrol-4' => 'Сильне зменшення',
+
+'exif-contrast-0' => 'Нормальна',
+'exif-contrast-1' => "М'яке підвищення",
+'exif-contrast-2' => 'Сильне підвищення',
+
+'exif-saturation-0' => 'Нормальна',
+'exif-saturation-1' => 'Невелика насиченість',
+'exif-saturation-2' => 'Велика насиченість',
+
+'exif-sharpness-0' => 'Нормальна',
+'exif-sharpness-1' => "М'яке підвищення",
+'exif-sharpness-2' => 'Сильне підвищення',
+
+'exif-subjectdistancerange-0' => 'Невідомо',
+'exif-subjectdistancerange-1' => 'Макрозйомка',
+'exif-subjectdistancerange-2' => 'Зйомка з близької відстані',
+'exif-subjectdistancerange-3' => 'Зйомка здалеку',
+
+# Pseudotags used for GPSLatitudeRef and GPSDestLatitudeRef
+'exif-gpslatitude-n' => 'північної широти',
+'exif-gpslatitude-s' => 'південної широти',
+
+# Pseudotags used for GPSLongitudeRef and GPSDestLongitudeRef
+'exif-gpslongitude-e' => 'східної довготи',
+'exif-gpslongitude-w' => 'західної довготи',
+
+'exif-gpsstatus-a' => 'Вимірювання не завершено',
+'exif-gpsstatus-v' => 'Готовий до передачі даних',
+
+'exif-gpsmeasuremode-2' => 'Вимірювання 2-х координат',
+'exif-gpsmeasuremode-3' => 'Вимірювання 3-х координат',
+
+# Pseudotags used for GPSSpeedRef and GPSDestDistanceRef
+'exif-gpsspeed-k' => 'км/год',
+'exif-gpsspeed-m' => 'миль/год',
+'exif-gpsspeed-n' => 'вузлів',
+
+# Pseudotags used for GPSTrackRef, GPSImgDirectionRef and GPSDestBearingRef
+'exif-gpsdirection-t' => 'справжній',
+'exif-gpsdirection-m' => 'магнітний',
+
+# External editor support
+'edit-externally'      => 'Редагувати цей файл використовуючи зовнішню програму',
+'edit-externally-help' => 'Подробиці див. на сторінці [http://meta.wikimedia.org/wiki/Help:External_editors Meta:Help:External_editors].',
+
+# 'all' in various places, this might be different for inflected languages
+'recentchangesall' => 'всі',
+'imagelistall'     => 'всі',
+'watchlistall1'    => 'всі',
+'watchlistall2'    => 'всі',
+'namespacesall'    => 'всі',
+
+# E-mail address confirmation
+'confirmemail'            => 'Підтвердження адреси ел. пошти',
+'confirmemail_noemail'    => 'В вашій [[{{ns:special}}:Preferences|конфігурації користувача]] відсутня коректна адреса електронної пошти.',
+'confirmemail_text'       => 'Вікі-двигун потребує підтвердження адреси електронної пошти перед тим, як ви зможете нею користуватись. Натисніть на кнопку, щоб на вказану адресу одержати листа, який міститиме посилання на спеціальну сторінку, після відкриття котрої у веб-оглядачі адреса електронної пошти буде підтверджена.',
+'confirmemail_pending'    => '<div class="error">
+Код підтвердження вже відправлено на адресу вашої електронної пошти.
+Якщо ви щойно створили обліковий запис, будь-ласка, перш ніж робити запит нового коду, почекайте декілька хвилин до отримання вже відісланого.
+</div>',
+'confirmemail_send'       => 'Надіслати лист із запитом на підтвердження',
+'confirmemail_sent'       => 'Лист із запитом на підтвердження відправлений.',
+'confirmemail_oncreate'   => "Код підтвердження відправлено на вашу електронну адресу. Цей код не вимагається для входу в систему, але він вам знадобиться для активації будь-яких можливостей вікі, що пов'язані з використанням електронної пошти.",
+'confirmemail_sendfailed' => 'Неможливо відправити лист із запитом на підтвердження. Перевірте правильність адреси електронної пошти.
+
+Відповідь сервера: $1',
+'confirmemail_invalid'    => 'Невірний код підтвердження, або термін дії коду вичерпався.',
+'confirmemail_needlogin'  => 'Для підтвердження вашої адреси електронної пошти вам необхідно $1.',
+'confirmemail_success'    => 'Вашу адресу електронної пошти підтверджено.',
+'confirmemail_loggedin'   => 'Вашу адресу електронної пошти підтверджено.',
+'confirmemail_error'      => 'Під час процедури підтвердження адреси електронної пошти сталася помилка.',
+'confirmemail_subject'    => '{{SITENAME}}:Запит на підтвердження адреси ел. пошти',
+'confirmemail_body'       => 'Хтось (можливо Ви) із IP-адресою $1 , зареєстрував на сервері проекту {{SITENAME}} обліковий запис
+«$2», вказавши вашу адресу електронної пошти.
+
+Щоб підтвердити, що ви дозволяєте використовувати вашу адресу електронної пошти в цьому проекті, відкрийте у веб-оглядачі наведене далі посилання (це слід зробити до $4):
+
+$3
+
+Якщо ви не відправляли подібного запиту — просто ігноруйте цей лист.',
+
+# Inputbox extension, may be useful in other contexts as well
+'tryexact'       => 'Строгий пошук',
+'searchfulltext' => 'Повнотекстовий пошук',
+'createarticle'  => 'Створити статтю',
+
+# Scary transclusion
+'scarytranscludedisabled' => '[«Interwiki transcluding» вимкнено]',
+'scarytranscludefailed'   => '[Нажаль, невдалося звернення до шаблону $1]',
+'scarytranscludetoolong'  => '[Нажаль, URL надто довгий]',
+
+# Trackbacks
+'trackbackbox'      => '<div id="mw_trackbacks">
+Trackback для цієї статті:<br />
+$1
+</div>',
+'trackbackremove'   => ' ([$1 вилучити])',
+'trackbacklink'     => 'Trackback',
+'trackbackdeleteok' => 'Trackback вилучено.',
+
+# Delete conflict
+'deletedwhileediting' => 'Попередження: Ця сторінка була видалена після того, як ви розпочали редагування!',
+'confirmrecreate'     => "Користувач [[User:$1|$1]] ([[User talk:$1|обговорення]]) видалив цю сторінку після того, як ви почали редагування і вказав причиною:
+: ''$2''
+Будь ласка підтвердіть, що ви дійсно бажаєте створити цю сторінку заново.",
+'recreate'            => 'Повторно створити',
+
+'unit-pixel' => ' пікс.',
+
+# HTML dump
+'redirectingto' => 'Перенаправлення на сторінку [[$1]]…',
+
+# action=purge
+'confirm_purge'        => 'Очистити кеш цієї сторінки?
+
+$1',
+'confirm_purge_button' => 'OK',
+
+'youhavenewmessagesmulti' => 'Ви отримали нові повідомлення на $1',
+
+'searchcontaining' => 'Шукати статті, які містять «$1».',
+'searchnamed'      => 'Шукати статті з назвою «$1».',
+'articletitles'    => 'Статті, що починаються з «$1»',
+'hideresults'      => 'Сховати результати',
+
+# DISPLAYTITLE
+'displaytitle' => '(Посилання на цю сторінку — $1)',
+
+'loginlanguagelabel' => 'Мова: $1',
+
+# Multipage image navigation
+'imgmultipageprev' => '← попередня сторінка',
+'imgmultipagenext' => 'наступна сторінка →',
+'imgmultigo'       => 'Перейти!',
+'imgmultigotopre'  => 'Перейти на сторінку',
+
+# Table pager
+'ascending_abbrev'         => 'зрост',
+'descending_abbrev'        => 'спад',
+'table_pager_next'         => 'Наступна сторінка',
+'table_pager_prev'         => 'Попередня сторінка',
+'table_pager_first'        => 'Перша сторінка',
+'table_pager_last'         => 'Остання сторінка',
+'table_pager_limit'        => 'Показувати $1 елементів на сторінці',
+'table_pager_limit_submit' => 'Виконати',
+'table_pager_empty'        => 'Не знайдено',
+
+# Auto-summaries
+'autosumm-blank'   => 'Видалений весь вміст сторінки',
+'autosumm-replace' => 'Замінено сторінку на «$1»',
+'autoredircomment' => 'Перенаправлено на [[$1]]', # This should be changed to the new naming convention, but existed beforehand
+'autosumm-new'     => 'Нова сторінка: $1',
+
+# Size units
+'size-bytes'     => '$1 байтів',
+'size-kilobytes' => '$1 КБ',
+'size-megabytes' => '$1 МБ',
+'size-gigabytes' => '$1 ГБ',
+
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesUr.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesUr.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesUr.php	(revision 1280)
@@ -0,0 +1,648 @@
+<?php
+
+$rtl = true;
+$defaultUserOptionOverrides = array(
+	# Swap sidebar to right side by default
+	'quickbar' => 2,
+	# Underlines seriously harm legibility. Force off:
+	'underline' => 0,
+);
+
+$namespaceNames = array(
+	NS_MEDIA => 'زریعہ',
+	NS_SPECIAL => 'خاص',
+	NS_MAIN => '',
+	NS_TALK => 'تبادلۂ_خیال',
+	NS_USER => 'صارف',
+	NS_USER_TALK => 'تبادلۂ_خیال_صارف',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK => 'تبادلۂ_خیال_$1',
+	NS_IMAGE => 'تصویر',
+	NS_IMAGE_TALK => 'تبادلۂ_خیال_تصویر',
+	NS_MEDIAWIKI => 'میڈیاوکی',
+	NS_MEDIAWIKI_TALK => 'تبادلۂ_خیال_میڈیاوکی',
+	NS_TEMPLATE => 'سانچہ',
+	NS_TEMPLATE_TALK => 'تبادلۂ_خیال_سانچہ',
+	NS_HELP => 'معاونت',
+	NS_HELP_TALK => 'تبادلۂ_خیال_معاونت',
+	NS_CATEGORY => 'زمرہ',
+	NS_CATEGORY_TALK => 'تبادلۂ_خیال_زمرہ',
+);
+
+$messages = array(
+# User preference toggles
+'tog-fancysig'     => '(سادہ دستخط بلا خودکار ربط)',
+'tog-ccmeonemails' => 'دیگر صارفین کو ارسال کردہ برقی خطوط کی نقول مجھے ارسال کریں۔',
+
+'underline-always' => 'ہمیشہ',
+'underline-never'  => 'کبھی نہیں',
+
+# Dates
+'sunday'    => 'اتوار',
+'monday'    => 'پير',
+'tuesday'   => 'منگل',
+'wednesday' => 'بدھ',
+'thursday'  => 'جمعرات',
+'friday'    => 'جمعہ',
+'saturday'  => 'ہفتہ',
+'january'   => 'جنوری',
+'february'  => 'فروری',
+'march'     => 'مارچ',
+'april'     => 'اپريل',
+'may_long'  => 'مئی',
+'june'      => 'جون',
+'july'      => 'جولائی',
+'august'    => 'اگست',
+'september' => 'ستمبر',
+'october'   => 'اکتوبر',
+'november'  => 'نومبر',
+'december'  => 'دسمبر',
+'may'       => 'مئی',
+
+# Bits of text used by many pages
+'categories'      => '{{PLURAL:$1|زمرہ|زمرہ جات}}',
+'pagecategories'  => '{{PLURAL:$1|زمرہ|زمرہ جات}}',
+'category_header' => 'زمرہ "$1" میں مضامین',
+'subcategories'   => 'ذیلی ذمرہ جات',
+
+'about'         => 'تعارف',
+'newwindow'     => '(نـئی ونـڈو میـں)',
+'cancel'        => 'منسوخ',
+'moredotdotdot' => 'اور...',
+'mypage'        => 'میرا صفحہ',
+'mytalk'        => 'میری گفتگو',
+'anontalk'      => 'اس IP کیلیے بات چیت',
+'navigation'    => 'رہنمائی',
+
+'returnto'          => 'واپس $1۔',
+'tagline'           => 'وکیپیڈیا سے',
+'help'              => 'معاونت',
+'search'            => 'تلاش',
+'searchbutton'      => 'تلاش',
+'go'                => 'چلو',
+'searcharticle'     => 'چلو',
+'history'           => 'تاریخچۂ صفحہ',
+'history_short'     => 'تاریخچہ',
+'printableversion'  => 'قابل طبع نسخہ',
+'permalink'         => 'مستقل کڑی',
+'print'             => 'طباعت',
+'edit'              => 'ترمیم',
+'editthispage'      => 'اس صفحہ میں ترمیم کریں',
+'delete'            => 'حذف',
+'deletethispage'    => 'یہ صفحہ حذف کریں',
+'undelete_short'    => 'بحال {{PLURAL:$1|ایک ترمیم|$1 ترامیم}}',
+'protect'           => 'محفوظ',
+'protectthispage'   => 'اس صفحےکومحفوظ کریں',
+'unprotect'         => 'غیر محفوظ',
+'unprotectthispage' => 'اس صفحےکو غیر محفوظ کریں',
+'newpage'           => 'نیا صفحہ',
+'talkpage'          => 'اس صفحہ پر تبادلۂ خیال کریں',
+'specialpage'       => 'خصوصی صفحہ',
+'articlepage'       => 'مندرجاتی صفحہ دیکھیۓ',
+'talk'              => 'تبادلۂ خیال',
+'views'             => 'خیالات',
+'toolbox'           => 'آلات',
+'userpage'          => 'دیکھیں صارف کا صفحہ',
+'viewhelppage'      => 'صفحۂ معاونت دیکھیے',
+'otherlanguages'    => 'دیگر زبانیں',
+'redirectedfrom'    => '($1 سے پلٹایا گیا)',
+'redirectpagesub'   => 'لوٹایا گیا صفحہ',
+'lastmodifiedat'    => 'آخری بار تدوین $2, $1 کو کی گئی۔', # $1 date, $2 time
+'protectedpage'     => 'محفوظ شدہ صفحہ',
+
+# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
+'aboutsite'         => '{{SITENAME}} کا تعارف',
+'aboutpage'         => '{{ns:project}}:تعارف',
+'copyright'         => 'تمام مواد $1 کے تحت میسر ہے۔',
+'copyrightpagename' => 'ویـکـیـپـیـڈ یـا حق تصنیف',
+'copyrightpage'     => '{{ns:project}}:حقوق تصانیف',
+'currentevents'     => 'تعارف وکیپیڈیا',
+'currentevents-url' => '{{ns:project}}:تعارف وکیپیڈیا',
+'disclaimers'       => 'اعلانات',
+'edithelp'          => 'معاونت براۓ ترمیم',
+'faq'               => 'معلوماتِ عامہ',
+'faqpage'           => '{{ns:project}}:معلوماتِ عامہ',
+'helppage'          => '{{ns:project}}:فہرست',
+'mainpage'          => 'صفحہ اول',
+'portal'            => 'دیوان عام',
+'portal-url'        => 'تبادلۂ خیال منصوبہ:دیوان عام',
+'privacy'           => 'اصول براۓ اخفائے راز',
+'sitesupport'       => 'رابطہ',
+'sitesupport-url'   => '{{ns:project}}:رابطہ',
+
+'badaccess-group0' => 'آپ متمنی عمل کا اجراء کرنے کے مُجاز نہیں۔',
+
+'ok'                  => 'ٹھیک ہے',
+'pagetitle'           => '$1 - وکیپیڈیا',
+'youhavenewmessages'  => 'آپکے لیۓ ایک $1 ہے۔ ($2)',
+'newmessageslink'     => 'نیا پیغام',
+'newmessagesdifflink' => 'تـجـدیـد مـاقـبل آخـر سے فـرق',
+'editsection'         => 'ترمیم',
+'editold'             => 'ترمیم',
+'toc'                 => 'فہرست',
+'showtoc'             => 'دکھائیں',
+'hidetoc'             => 'غائب کریں',
+'thisisdeleted'       => 'دیکھیں یا بحال کریں $1؟',
+'restorelink'         => '$1 ترامیم ضائع کردی',
+'feed-atom'           => 'ایٹم',
+'feed-rss'            => 'آر ایس ایس',
+
+# Short words for each namespace, by default used in the 'article' tab in monobook
+'nstab-main'      => 'مضمون',
+'nstab-user'      => 'صفحۂ صارف',
+'nstab-special'   => 'خاص',
+'nstab-project'   => 'صفحۂ منصوبہ',
+'nstab-image'     => 'فائل',
+'nstab-mediawiki' => 'پیغام',
+'nstab-template'  => 'سانچہ',
+'nstab-help'      => 'معاونت',
+'nstab-category'  => 'زمرہ',
+
+# General errors
+'noconnect'         => 'بہ تاسف! ویکی کو چند طرزیاتی (ٹکنیکی) مشکلات کا سامنا ہے، اساسی موادی کمک کنندہ ( ڈیٹا بیس سرور ) سے تک پہنچنے میں ناکامی ہوئی۔ <br />$1',
+'badarticleerror'   => 'اس صفحہ پر یہ عمل انجام نہیں دیا جاسکتا۔',
+'cannotdelete'      => 'صفحہ یا مِلَف کو حذف نہیں کیا جا سکا۔ (ہوسکتا ہے کہ اسے پہلے ہی کسی نے حذف کردیاہو۔)',
+'viewsource'        => 'مسودہ',
+'viewsourcefor'     => 'براۓ $1',
+'protectedpagetext' => 'اس صفحہ کو تدوین سے محفوظ رکھنے کیلیے مقفل کر دیا گیا ہے۔',
+'viewsourcetext'    => 'آپ صرف مسودہ دیکھ سکتے ہیں اور اسکی نقل اتار سکتے ہیں:',
+'editinginterface'  => "'''انتباہ:''' آپ ایک ایسا صفحہ مرتب کر رہے ہیں کہ جو مصنع لطیف (سوفٹ ویئر) کے لیۓ وجیھت (انٹرفیس) مہیا کرنے کے لیۓ استعمال کیا جاتا ہے۔ اس صفحہ میں کی جانے والی ترمیم ، دیگر صارفوں کے لیۓ وجیھت کو تبدیل کردے گی۔",
+
+# Login and logout pages
+'logouttitle'                => 'اخراج صارف',
+'logouttext'                 => '<strong>اب آپ خارج ہوچکے ہیں</strong><br />
+آپ خفی الاسم {{SITENAME}}  کا استعمال جاری رکھ سکتے ہیں، یا دوبارہ اسی نام یا مختلف نام سے داخل بھی ہو سکتے ہیں۔  یہ یاد آوری کرلیجیۓ کہ کچھ صفحات ایسے نظر آتے رہیں گے کہ جیسے ابھی آپ خارج نہیں ہوۓ ، جب تک آپ اپنے تفصحہ (براؤزر) کا ابطن (cache) صاف نہ کردیں۔',
+'welcomecreation'            => '== خوش آمدید، $1 ! ==
+آپ کا کھاتہ بنا دیا گیا ہے۔ اپنی ویـکـیـپـیـڈ یـا کی ترجیحات تبدیل کرنا مت بھولیں۔',
+'loginpagetitle'             => 'داخلہ صارف',
+'yourname'                   => 'اسمِ رکنیت',
+'yourpassword'               => 'کلمۂ شناخت',
+'yourpasswordagain'          => 'کلمۂ شناخت دوبارہ لکھیں',
+'remembermypassword'         => 'مجھے یاد رکھیں',
+'loginproblem'               => '<b>داخلے میں کوئی مسلہ درپیش ہے</b><br />دوبارہ اندراج کیجیۓ!',
+'alreadyloggedin'            => '<strong>$1، آپ پہلے ہی داخل حالت میں ہیں!</strong><br />',
+'login'                      => 'داخل ہوں',
+'loginprompt'                => 'ویکیپیڈیا میں داخلے کیلۓ آپکے پاس قند (کوکیز) مجازہوناچاہیں۔',
+'userlogin'                  => 'کھاتہ بنائیں یا اندراج کریں',
+'logout'                     => 'اخراج',
+'userlogout'                 => 'خارج ہوجائیں',
+'nologin'                    => 'کیا آپ نے کھاتہ نہیں بنایا ہوا؟ $1۔',
+'nologinlink'                => 'کھاتا بنائیں',
+'createaccount'              => 'نیا کھاتہ بنائیں',
+'createaccountmail'          => 'بذریعۂ برقی ڈاک',
+'badretype'                  => 'درج شدہ کلمۂ شناخت اصل سے مطابقت نہیں رکھتا۔',
+'userexists'                 => 'آپ نےجونام درج کیا ہے پہلے سے زیراستعمال ہے۔ مختلف نام استعمال کریں۔',
+'youremail'                  => '٭ برقی خط',
+'username'                   => 'اسم صارف',
+'uid'                        => 'صارف نمبر:',
+'yourrealname'               => '* اصلی نام',
+'yourlanguage'               => 'زبان:',
+'yournick'                   => 'لقب',
+'email'                      => 'برقی خط',
+'loginerror'                 => 'داخلے میں غلطی',
+'loginsuccesstitle'          => 'داخلہ کامیاب',
+'loginsuccess'               => "'''اب آپ ویکیپیڈیا میں بنام \"\$1\" داخل ہوچکے ہیں۔'''",
+'nosuchuser'                 => '"$1" کے نام سے کوئی صارف موجود نہیں۔  براۓکرم ہجوں کے درست اندراج کی تصدیق کرلیجیۓ ، یا آپ چاہیں تو نیا کھاتا بھی بنا سکتے ہیں۔',
+'wrongpassword'              => 'آپ نے غلط کلمۂ شناخت درج کیا ہے۔ دوبارہ کو شش کریں۔',
+'wrongpasswordempty'         => 'کلمۂ شناخت ندارد۔ دوبارہ کوشش کریں۔',
+'mailmypassword'             => 'کلمۂ شناخت بذریعہ برقی خط',
+'passwordsent'               => 'ایک نیا کلمۂ شناخت "$1" کے نام سے بننے والی برقی ڈاک کے پتے کیلیے بھیج دیا گیا ہے۔ 
+جب وہ موصول ہو جاۓ تو براہ کرم اسکے ذریعے دوبارہ داخل ہوں۔',
+'mailerror'                  => 'مسلہ دوران ترسیل خط:$1',
+'acct_creation_throttle_hit' => 'عرض معذرت، چونکہ آپ پہلے ہی $1 کھاتے بنا چکے ہیں اس لیے مزید نہیں بنا سکتے۔',
+'emailauthenticated'         => 'آپ کے برقی خط کے پتے کی تصدیق $1 کو کی گئی۔',
+'accountcreated'             => 'تخلیقِ کھاتہ',
+'accountcreatedtext'         => 'تخیلقِ کھاتۂ صارف براۓ $1۔',
+
+# Edit page toolbar
+'headline_sample' => 'شہ سرخی',
+'headline_tip'    => 'شہ سرخی درجہ دوم',
+
+# Edit pages
+'summary'              => 'خلاصہ',
+'subject'              => 'مضمون/شہ سرخی',
+'minoredit'            => 'معمولی ترمیم',
+'watchthis'            => 'یہ صفحہ زیر نظر کیجیۓ',
+'savearticle'          => 'محفوظ',
+'preview'              => 'نمائش',
+'showpreview'          => 'نمائش',
+'anoneditwarning'      => 'آپ ویکیپیڈیا میں داخل نہیں ہوۓ لہذا آپکا IP پتہ اس صفحہ کے تاریخچہ ء ترمیم میں محفوظ ہوجاۓ گا۔',
+'summary-preview'      => 'نمائش خلاصہ',
+'whitelistedittext'    => 'ترمیم و تدوین کیلیے آپ کا [[Special:Userlogin|داخل ہونا]] لا زمی ہے۔',
+'loginreqtitle'        => 'داخلہ / اندراج لازم',
+'loginreqlink'         => 'داخلہ',
+'accmailtitle'         => 'کلمہ شناخت بھیج دیا گیا۔',
+'accmailtext'          => '"$1" کیلیۓ کلمہ شناخت $2 کو ارسال کردیا گیا۔',
+'newarticle'           => '(نیا)',
+'newarticletext'       => 'آپ ایک ایسے صفحے کے ربط تک آگۓ ہیں جو ابھی موجود نہیں۔ اگر آپ اس عنوان سے صفحہ بنانا چاہتے ہیں تو اپنا مضمون نیچے دیۓ گۓ احاطہ میں تحریر کیجیۓ اور محفوظ کردیجیۓ (مزید معلومات کیلیۓ معاونت کا صفحہ ملاحظہ کیجیۓ)۔ اگر آپ غلطی سے یہاں پہنچے ہیں تو واپسی کے لیۓ اپنے تصفحہ (براؤزر) کا بیک بٹن ٹک کیجیۓ۔',
+'anontalkpagetext'     => "----''یہ صفحہ ایک ایسے صارف کا ہے جنہوں نے یا تو اب تک اپنا کھاتا نہیں بنایا یا پھر وہ اسے استعمال نہیں کر رہے/ رہی ہیں۔ لہذا ہمیں انکی شناخت کے لیۓ ایک اعدادی آئی پی پتہ استعمال کرنا پڑرہا ہے۔ اس قسم کا آئی پی ایک سے زائد صارفین کے لیۓ مشترک بھی ہوسکتا ہے۔ اگر آپکی موجودہ حیثیت ایک گمنام صارف کی ہے اور آپ محسوس کریں کہ اس صفحہ پر آپکی جانب منسوب یہ بیان غیرضروری ہے تو براہ کرم [[Special:Userlogin|کھاتا بنائیے یا داخل نوشتہ (لاگ ان) ہوں]] تاکہ مستقبل میں آپکو، گمنام صارفین میں شمار کرنے سے پرہیز کیا جاسکے۔\"",
+'note'                 => '<strong>نوٹ:</strong>',
+'previewnote'          => 'یاد رکھیں، یہ صرف نمائش ہے ۔آپ کی ترامیم ابھی محفوظ نہیں کی گئیں۔',
+'editing'              => 'آپ "$1" میں ترمیم کر رہے ہیں۔',
+'editingsection'       => '$1 کے قطعہ کی تدوین',
+'editingcomment'       => 'زیرترمیم $1 (تبصرہ)',
+'editconflict'         => 'تنازعہ ترمیم:$1',
+'yourtext'             => 'آپ کی تحریر',
+'editingold'           => '<strong>انتباہ: آپ اس صفحے کا ایک پرانا مسودہ مرتب کررہے ہیں۔ اگر آپ اسے محفوظ کرتے ہیں تو اس صفحے کے اس پرانے مسودے سے اب تک کی جانے والی تمام تدوین ضائع ہو جاۓ گی۔</strong>',
+'yourdiff'             => 'تضادات',
+'templatesused'        => 'اس صفحے پر استعمال ہونے والے سانچے:',
+'templatesusedsection' => 'اس قطعے میں استعمال ہونے والے سانچے:',
+
+# History pages
+'revhistory'       => 'تـجدید تاریخـچہ',
+'viewpagelogs'     => 'اس صفحہ کیلیے نوشتہ جات دیکھیے',
+'currentrev'       => 'حـالیـہ تـجدید',
+'revisionasof'     => 'تـجدید بـمطابق $1',
+'previousrevision' => '←پرانی تدوین',
+'nextrevision'     => '→اگلا اعادہ',
+'cur'              => ' رائج',
+'next'             => 'آگے',
+'last'             => 'سابقہ',
+'histlegend'       => "انتخاب: مختلف نسخوں کا موازنہ کرنے کیلیے، پیامی خانوں کو نشان زد کر کے نیچے دیے گئے بٹن پر کلک کیجیئے۔
+
+'''علامات:'''
+
+(رائج) = موجودہ متن سے اخـتلاف، (سابقہ) = گزشتہ متن سے اختلاف ، م = معمولی ترمیم۔",
+'deletedrev'       => '[حذف کردیا گیا]',
+'histfirst'        => 'قدیم ترین',
+'histlast'         => 'تازہ ترین',
+
+# Diffs
+'difference'              => '(اصلاحات میں فرق)',
+'editcurrent'             => 'اس صفحے کا رائج متن مرتب کیجیۓ۔',
+'compareselectedversions' => 'منتخب متـن کا موازنہ',
+
+# Search results
+'searchresults'         => 'تلاش کا نتیجہ',
+'searchresulttext'      => 'ویکیپیڈیا میں تلاش کے بارے میں مزید معلومات کے لیۓ، ویکیپیڈیا میں تلاش کا صفحہ دیکھیۓ۔',
+'searchsubtitle'        => "آپ کی تلاش براۓ '''[[:$1]]'''",
+'searchsubtitleinvalid' => "آپ کی تلاش براۓ '''$1'''",
+'noexactmatch'          => '"$1" کے عنوان سے کوئی صفحہ موجود نہیں۔ آپ اگر چاہیں تو اس نام سے  [[:$1|صفحہ بنا سکتے ہیں]]',
+'prevn'                 => 'پچھلے $1',
+'nextn'                 => 'اگلے $1',
+'viewprevnext'          => 'دیکھیں($1) ($2) ($3)۔',
+'powersearch'           => 'تلاش کریں',
+'blanknamespace'        => '(مرکز)',
+
+# Preferences page
+'preferences'       => 'ترجیحات',
+'mypreferences'     => 'میری ترجیہات',
+'prefsnologin'      => 'نا داخل شدہ حالت',
+'changepassword'    => 'کلمۂ شناخت تبدیل کریں',
+'math'              => 'ریاضی',
+'datetime'          => 'تاریخ و وقت',
+'prefs-rc'          => 'حالیہ تبدیلیاں',
+'prefs-misc'        => 'دیگر',
+'saveprefs'         => 'محفوظ',
+'oldpassword'       => 'پرانا کلمۂ شناخت:',
+'newpassword'       => 'نیا کلمۂ شناخت',
+'retypenew'         => 'نیا کلمۂ شناخت دوبارہ درج کریں:',
+'rows'              => 'قـطاریں:',
+'searchresultshead' => 'تلاش',
+'savedprefs'        => 'آپ کی ترجیہات محفوظ کر لی گئی ہیں۔',
+'timezonelegend'    => 'منطقۂ وقت',
+'localtime'         => 'مقامی وقت',
+'allowemail'        => 'دوسرے صارفین کو برقی خظ لکھنے کا اختیار دیں',
+'default'           => 'طے شدہ',
+'files'             => 'فائلیں',
+
+# User rights
+'userrights-user-editname' => 'اسمِ رکنیت داخل کریں:',
+
+'group-bot-member' => 'خودکار صارف',
+
+'grouppage-sysop' => '{{ns:project}}:منتظمین',
+
+# Recent changes
+'nchanges'          => '$1 {{PLURAL:$1|تبدیلی|تبدیلیاں}}',
+'recentchanges'     => 'حالیہ تبدیلیاں',
+'recentchangestext' => 'اس صفحے پر ویکی میں ہونے والی تازہ تریں تبدیلیوں کا مشاہدہ کیجیۓ۔',
+'rcnote'            => 'مندرجہ ذیل گذ شتہ <strong>$2</strong> روز میں ہونے والی آخری <strong>$1</strong> تبدیلیاں ہیں',
+'rclistfrom'        => '$1 سےنئی تبدیلیاں دکھانا شروع کریں',
+'rcshowhideminor'   => 'معمولی ترامیم $1',
+'rcshowhidebots'    => 'خودکار صارف $1',
+'rcshowhideliu'     => 'داخل شدہ صارف $1',
+'rcshowhideanons'   => 'گمنام صارف $1',
+'rcshowhidemine'    => 'ذاتی ترامیم $1',
+'rclinks'           => 'آخری $2 روز میں ہونے والی $1 تبدیلیوں کا مشاہدہ کریں<br />$3',
+'diff'              => 'فرق',
+'hist'              => 'تاریخچہ',
+'hide'              => 'چھـپائیں',
+'minoreditletter'   => 'م',
+'newpageletter'     => 'نیا ..',
+'boteditletter'     => ' خودکار',
+'sectionlink'       => '<font face="Symbol">&amp;#172;</font>',
+
+# Recent changes linked
+'recentchangeslinked' => 'متعلقہ تبدیلیاں',
+
+# Upload
+'upload'            => 'زبراثقال ِملف (فائل اپ لوڈ)',
+'uploadbtn'         => 'زبراثقال ملف (اپ لوڈ فائل)',
+'reupload'          => 'زبراثقال مکرر',
+'reuploaddesc'      => 'زبراثقال ورقہ (فارم) کیجانب واپس۔',
+'uploadnologin'     => 'آپ داخل شدہ حالت میں نہیں',
+'uploadnologintext' => 'زبراثقال ملف (فائل اپ لوڈ) کے لیۓ آپکو  [[Special:Userlogin|داخل شدہ]] حالت میں ہونا لازم ہے۔',
+'uploadlog'         => 'نوشتۂ زبراثقال (اپ لوڈ لاگ)',
+'uploadlogpage'     => 'نوشتۂ زبراثقال (اپ لوڈ لاگ)',
+'uploadlogpagetext' => 'درج ذیل میں حالیہ زبراثقال (اپ لوڈ) کی گئی املاف (فائلوں) کی فہرست دی گئی ہے۔',
+'filedesc'          => 'خلاصہ',
+'fileuploadsummary' => 'خلاصہ :',
+'uploadedfiles'     => 'زبراثقال ملف (فائل اپ لوڈ)',
+'ignorewarning'     => 'انتباہ نظرانداز کرتے ہوۓ بہرصورت ملف (فائل) کو محفوظ کرلیا جاۓ۔',
+'ignorewarnings'    => 'ہر انتباہ نظرانداز کردیا جاۓ۔',
+'badfilename'       => 'ملف (فائل) کا نام "$1" ، تبدیل کردیا گیا۔',
+'fileexists'        => 'اس نام سے ایک ملف (فائل) پہلے ہی موجود ہے، اگر آپ کو یقین نہ ہو کہ اسے حذف کردیا جانا چاہیۓ تو براہ کرم  $1 کو ایک نظر دیکھ لیجیۓ۔',
+'uploadwarning'     => 'انتباہ بہ سلسلۂ زبراثقال',
+'savefile'          => 'فائل محفوظ کریں',
+'uploadedimage'     => 'زبراثقال (اپ لوڈ) براۓ "[[$1]]"',
+'sourcefilename'    => 'اسم ملف (فائل) کا منبع',
+'destfilename'      => 'تعین شدہ اسم ملف',
+'watchthisupload'   => 'یہ صفحہ زیر نظر کیجیۓ',
+
+# Image list
+'imagelist'           => 'فہرست فائل',
+'ilsubmit'            => 'تلاش',
+'byname'              => 'بالحاظ اسم',
+'bydate'              => 'بالحاظ تاریخ',
+'bysize'              => 'بالحاظ جسامت',
+'deleteimg'           => 'ضائع',
+'deleteimgcompletely' => 'اس مِلَف کی تمام تر تجدید ضائع کیجیئے۔',
+'imagelinks'          => 'روابط',
+'linkstoimage'        => 'اس ملف (فائل) سے درج ذیل صفحات رابطہ رکھتے ہیں:',
+'nolinkstoimage'      => 'ایسے کوئی صفحات نہیں جو اس ملف (فائل) سے رابطہ رکھتے ہوں۔',
+
+# MIME search
+'download' => 'زیراثقال (ڈاؤن لوڈ)',
+
+# List redirects
+'listredirects' => 'فہرست متبادل ربط',
+
+# Unused templates
+'unusedtemplates' => 'غیر استعمال شدہ سانچے',
+
+# Statistics
+'statistics'    => 'اعداد و شمار',
+'sitestats'     => 'وکیپیڈیا کے اعدادوشمار',
+'userstats'     => 'ارکان کے اعداد و شمار',
+'sitestatstext' => "اردو ویکیپیڈیا کے ذخیرے میں اب تک کل  '''$1''' صفحات ہیں۔ انمیں تبادلہءخیال صفحات ، ویکیپیڈیا کے بارے میں صفحات ، سٹب صفحات ، پلٹائے گۓ صفحات اور چند دیگر ایسے صفحات شامل ہیں جو کہ ممکنہ طور پر مقالات یا مضامین نہیں کہے جاسکتے۔ ان تمام کو نکال کر  '''$2''' ایسے صفحات ہیں جو کہ بجاطور پر مقالات کے زمرے میں شامل کیۓ جاسکتے ہیں۔ 
+
+اگر صفحات کے تناسب سے دیکھا جاۓ تو ، اردو ویکیپیڈیا کی ابتداء سے اب تک کل '''$4''' صفحات صارفین کی جانب سے  مرتب کیۓ گۓ۔ گویا فی صفحہ '''$5''' بار تدوین ہوئی۔  مزید تفصیل دیکھیں",
+'userstatstext' => "اردو ویکیپیڈیا میں '''$1''' مـثـبوت (رجسٹرڈ) صارف ہیں ، جنمیں  '''$2''' (یعنی '''$4%''') منتظمین میں شامل ہیں ، (دیکھیۓ $3) ۔",
+
+'disambiguations' => 'ضد ابہام صفحات',
+
+'doubleredirects' => 'دوہرے متبادل ربط',
+
+'brokenredirects' => 'نامکمل متبادل ربط',
+
+# Miscellaneous special pages
+'ncategories'             => '{{PLURAL:$1|زمرہ|زمرہ جات}} $1',
+'lonelypages'             => 'يتيم صفحات',
+'lonelypagestext'         => 'مندرجہ ذیل صفحات وہ صفحات ہیں جنھیں اس وکی میں موجود صفحوں سے کوئی ربط حاصل نہیں ہوپارہا۔',
+'uncategorizedpages'      => 'بے زمرہ صفحات',
+'uncategorizedcategories' => 'بے زمرہ زمرہ جات',
+'uncategorizedimages'     => 'بے زمرہ تصاویر',
+'unusedcategories'        => 'غیر استعمال شدہ زمرہ جات',
+'unusedimages'            => 'غیر استعمال شدہ فائلیں',
+'popularpages'            => 'مقبول صفحات',
+'wantedcategories'        => 'طلب شدہ زمرہ جات',
+'wantedpages'             => 'درخواست شدہ مضامین',
+'mostlinked'              => 'سب سے زیادہ ربط والے مضامین',
+'mostlinkedcategories'    => 'سب سے زیادہ ربط والے زمرہ جات',
+'mostcategories'          => 'سب سے زیادہ زمرہ جات والے مضامین',
+'mostimages'              => 'سب سے زیادہ استعمال کردہ تصاویر',
+'mostrevisions'           => 'زیادہ تجدید نظر کیے جانے والے صفحات',
+'allpages'                => 'تمام صفحات',
+'randompage'              => 'بےترتیب صفحہ',
+'shortpages'              => 'چھوٹے صفحات',
+'longpages'               => 'طویل ترین صفحات',
+'deadendpages'            => 'مردہ صفحات',
+'listusers'               => 'فہرست ارکان',
+'specialpages'            => 'خصوصی صفحات',
+'spheading'               => 'خصوصی صفحات براۓ تمام صارفین',
+'restrictedpheading'      => 'ممنوعہ خاص صفحہ',
+'newpages'                => 'جدید صفحات',
+'ancientpages'            => 'قدیم ترین صفحات',
+'move'                    => 'منتقـل',
+
+# Book sources
+'booksources' => 'کتابی وسائل',
+
+'categoriespagetext' => 'مندرجہ ذیل زمرہ جات وکیپیڈیا میں موجود ہیں۔',
+'userrights'         => 'صارف کے حقوق کا انتظام',
+'version'            => 'ورژن',
+
+# Special:Log
+'specialloguserlabel'  => 'صارف:',
+'speciallogtitlelabel' => 'عنوان:',
+'log'                  => 'نوشتہ جات',
+
+# Special:Allpages
+'nextpage'       => 'اگلا صفحہ ($1)',
+'prevpage'       => 'پچھلا صفحہ ($1)',
+'allpagesfrom'   => 'مطلوبہ حرف شروع ہونے والے صفحات کی نمائش:',
+'allarticles'    => 'تمام مقالات',
+'allpagesprev'   => 'پچھلا',
+'allpagesnext'   => 'اگلا',
+'allpagesprefix' => 'مطلوبہ سابقہ سے شروع ہونے والے صفحات کی نمائش:',
+
+# E-mail user
+'mailnologintext' => 'دیگر ارکان کو برقی خط ارسال کرنے کیلیۓ لازم ہے کہ آپ [[Special:Userlogin|داخل شدہ]] حالت میں ہوں اور آپ کی [[Special:Preferences|ترجیحات]] ایک درست برقی خط کا پتا درج ہو۔',
+'emailuser'       => 'صارف کو برقی خط لکھیں',
+'noemailtext'     => 'اس صارف نے برقی خط کے لیے کوئی پتہ فراہم نہیں کیا، یا یہ چاہتا ہے کا اس سے کوئی صارف رابطہ نہ کرے۔',
+'emailsubject'    => 'عنوان',
+'emailmessage'    => 'پیغام',
+
+# Watchlist
+'watchlist'         => 'میری زیرنظرفہرست',
+'mywatchlist'         => 'میری زیرنظرفہرست',
+'watchlistfor'      => "(براۓ '''$1''')",
+'addedwatch'        => 'زیر نظر فہرست میں اندراج کردیاگیا',
+'removedwatch'      => 'زیرنظرفہرست سے خارج کر دیا گیا',
+'removedwatchtext'  => 'صفحہ "$1" آپ کی زیر نظر فہرست سے خارج کر دیا گیا۔',
+'watch'             => 'زیرنظر',
+'watchthispage'     => 'یہ صفحہ زیر نظر کیجیۓ',
+'unwatch'           => 'زیرنظرمنسوخ',
+'watchdetails'      => '* $1 زیرنظر صفحات (صفحات تبادلۃ خیال کا شمار نہیں)
+* [[Special:Watchlist/edit|دیکھیں اور ترمیم کریں تمام زیرنظرفہرست]]
+* [[Special:Watchlist/clear|خارج تمام صغحات]]',
+'removechecked'     => 'نشان زدہ اشیاء زیر نظرفہرست سے خارج کر دی گئیں',
+'watchlistcontains' => 'آپ کی زیرنظرفہرست میں $1 صفحات ہیں۔',
+'removingchecked'   => 'درخواست شدہ اشیاء زیرنظر فہرست سے خارج ہو رہی ہیں۔۔۔',
+'wlnote'            => 'نیچےآخری $1 تبدیلیاں ہیں جو کے پیچھلے <b>$2</b> گھنٹوں میں کی گئیں۔',
+'wlshowlast'        => 'دکھائیں آخری $1 گھنٹے $2 دن $3',
+
+'enotif_newpagetext' => 'یہ نیا صفحہ ہے.',
+'changed'            => 'تبدیل کردیاگیا',
+'created'            => 'بنا دیا گیا',
+
+# Delete/protect/revert
+'deletepage'           => 'صفحہ ضائع کریں',
+'confirm'              => 'یقین',
+'excontent'            => "'$1':مواد تھا",
+'excontentauthor'      => "حذف شدہ مواد: '$1' (اور صرف '[[Special:Contributions/$2|$2]]' نے حصہ ڈالا)",
+'exblank'              => 'صفحہ خالی تھا',
+'confirmdelete'        => 'تائید تنسیخ',
+'deletesub'            => '(حذف کیا جارہاہے "$1")',
+'historywarning'       => 'انتباہ: جو صفحہ آپ حذف کرنے جارہے ہیں اس سے ایک تاریخچہ منسلک ہے۔',
+'confirmdeletetext'    => 'آپ نے اس صفحے کو اس سے ملحقہ تاریخچہ سمیت حذف کرنے کا ارادہ کیا ہے۔ براۓ مہربانی تصدیق کرلیجیۓ کہ آپ اس عمل کے نتائج سے بخوبی آگاہ ہیں، اور یہ بھی یقین کرلیجیۓ کہ آپ ایسا [[{{MediaWiki:policy-url}}|ویکیپیڈیا کی حکمت عملی]] کے دائرے میں رہ کر کر رہے ہیں۔',
+'actioncomplete'       => 'اقدام تکمیل کو پہنچا',
+'deletedtext'          => '"$1" کو حذف کر دیا گیا ہے ۔
+حالیہ حذف شدگی کے تاریخ نامہ کیلیۓ  $2  دیکھیۓ',
+'deletedarticle'       => 'حذف شدہ "[[$1]]"',
+'dellogpage'           => 'نوشتۂ حذف شدگی',
+'dellogpagetext'       => 'حالیہ حذف شدگی کی فہرست درج ذیل ہے۔',
+'deletionlog'          => 'نوشتۂ حذف شدگی',
+'deletecomment'        => 'حذف کرنے کی وجہ',
+'rollback'             => 'ترمیمات سابقہ حالت پرواپس',
+'rollback_short'       => 'واپس سابقہ حالت',
+'rollbacklink'         => 'واپس سابقہ حالت',
+'rollbackfailed'       => 'سابقہ حالت پر واپسی ناکام',
+'cantrollback'         => 'تدوین ثانی کا اعادہ نہیں کیا جاسکتا؛ کیونکہ اس میں آخری بار حصہ لینے والا ہی اس صفحہ کا واحد کاتب ہے۔',
+'protectlogpage'       => 'نوشتۂ محفوظ شدگی',
+'protectedarticle'     => '"[[$1]]" کومحفوظ کردیا',
+'unprotectedarticle'   => '"[[$1]]" کوغیر محفوظ کیا',
+'confirmprotecttext'   => 'کیا آپ واقعی اس صفحے کو محفوظ کرنا چاہتے ہیں؟',
+'protectcomment'       => 'محفوظ کرنے کی وجہ',
+'unprotectsub'         => '("$1" غیر محفوظ کی جا رہی ہے۔)',
+'confirmunprotecttext' => 'کیا آپ واقعی اس صفحے کو غیرمحفوظ کرنا چاہتے ہیں؟',
+'unprotectcomment'     => 'وجہ غیر محفوظ کرنے کی',
+'protect-default'      => '(طے شدہ)',
+'protect-level-sysop'  => 'صرف منتظمین',
+
+# Undelete
+'undelete'         => 'ضائع کردہ صفحات دیکھیں',
+'undeletepage'     => 'معائنہ خذف شدہ صفحات',
+'viewdeletedpage'  => 'حذف شدہ صفحات دیکھیے',
+'undeletebtn'      => 'بحال',
+'undeletecomment'  => 'تبصرہ:',
+'undeletedarticle' => 'بحال "[[$1]]"',
+
+# Namespace form on various pages
+'namespace' => 'جاۓ نام:',
+'invert'    => 'انتخاب بالعکس',
+
+# Contributions
+'contributions' => 'صارف کا حصہ',
+'mycontris'     => 'میرا حصہ',
+'contribsub2'    => 'براۓ $1 ($2)',
+'uclinks'       => 'دیکھیں آخری $1 تبدیلیاں؛ دیکھیں آخری $2 دن.',
+'uctop'         => ' (اوپر)',
+
+'sp-contributions-blocklog' => 'نوشتۂ پابندی',
+
+# What links here
+'whatlinkshere' => 'یہاں کس کا رابطہ ہے',
+'linklistsub'   => '(فہرست روابط)',
+'linkshere'     => 'یہاں درج ذیل صفحات رابطہ رکھتے ہیں:',
+'nolinkshere'   => 'یہاں کسی صفحہ کا ربط نہیں۔',
+
+# Block/unblock
+'blockip'           => 'داخلہ ممنوع براۓ صارف',
+'ipbreason'         => 'وجہ',
+'ipbsubmit'         => 'اس صارف کا داخلہ ممنوع کریں',
+'ipblocklist'       => 'فہرست ممنوع صارفین',
+'blocklink'         => 'پابندی لگائیں',
+'contribslink'      => 'شـراکـت',
+'blocklogpage'      => 'نوشتۂ پابندی',
+'proxyblocksuccess' => 'کردیا.',
+
+# Move page
+'movepage'                => 'منتقلئ صفحہ',
+'movepagetext'            => 'نیچے دیا گیا تشکیلہ (فـارم) استعمال کرکے اس صفحہ کا عنوان دوبارہ منتخب کیا جاسکتا ہے، ساتھ ہی اس سے منسلک تاریخچہ بھی نۓ نام پر منتقل ہوجاۓ گا۔ اسکے بعد سے اس صفحے کا پرانا نام ، نۓ نام کی جانب -- لوٹایا گیا صفحہ -- کی حیثیت اختیار کرلے گا۔ لیکن یادآوری کرلیجیۓ دیگر صفحات پر ، پرانے صفحہ کی جانب دیۓ گۓ روابط (لنکس) تبدیل نہیں ہونگے؛ اس بات کو یقینی بنانا ضروری ہے کہ کوئی دوہرا یا شکستہ -- پلٹایا گیا ربط -- نہ رہ جاۓ۔ 
+
+لہذا یہ یقینی بنانا آپکی ذمہ داری ہے کہ تمام روابط درست صفحات کی جانب رہنمائی کرتے رہیں۔
+
+یہ بات بھی ذہن نشین کرلیجیۓ کہ اگر نۓ منتخب کردہ نام کا صفحہ پہلے سے ہی موجود ہو تو ہوسکتا ہے کہ صفحہ منتقل نہ ہو ، ؛ ہاں اگر پہلے سے موجود صفحہ خالی ہے ، یا وہ صرف ایک -- لوٹایا گیا صفحہ -- ہو اور اس سے کوئی تاریخچہ منسلک نہ ہو تو منتقلی ہوجاۓ گی۔ گویا ، کسی خامی کی صورت میں آپ صفحہ کو دوبارہ اسی پرانے نام کی جانب منتقل کرسکتے ہیں اور اس طرح پہلے سے موجود کسی صفحہ میں کوئی حذف و خامی نہیں ہوگی۔
+
+<b><font face="times new roman"> انـتـبـاہ !</font></b> کسی اہم اور مقبول صفحہ کی منتقلی ، غیرمتوقع اور پریشان کن بھی ہی ہوسکتی ہے اس لیۓ ؛ منتقلی سے قبل براہ کرم یقین کرلیجۓ کہ آپ اسکے منطقی نتائج سے باخبر ہیں۔',
+'movearticle'             => 'مـنـتـقـل کـریں',
+'newtitle'                => 'نـیــا عـنــوان',
+'move-watch'              => 'صفحہ زیر نظر',
+'movepagebtn'             => 'مـنـتـقـل',
+'articleexists'           => 'اس عنوان سے کوئی صفحہ پہلے ہی موجود ہے، یا آپکا منتخب کردہ نام مستعمل نہیں۔ براۓ مہربانی دوسرا نام منتخب کیجیۓ۔',
+'1movedto2'               => '[[$1]] بجانب [[$2]] منتقل',
+'movelogpage'             => 'نوشتۂ منتقلی',
+'movereason'              => 'وجہ',
+'delete_and_move'         => 'حذف اور منتقل',
+'delete_and_move_text'    => '==حذف شدگی لازم==
+
+منتقلی کے سلسلے میں انتخاب کردہ مضمون "[[$1]]" پہلے ہی موجود ہے۔ کیا آپ اسے حذف کرکے منتقلی کیلیۓ راستہ بنانا چاہتے ہیں؟',
+'delete_and_move_confirm' => 'ہاں، صفحہ حذف کر دیا جائے',
+'delete_and_move_reason'  => 'منتقلی کے سلسلے میں حذف',
+
+# Export
+'export' => 'برآمد صفحات',
+
+# Namespace 8 related
+'allmessages'               => 'نظامی پیغامات',
+'allmessagesname'           => 'نام',
+'allmessagesdefault'        => 'طے شدہ متن',
+'allmessagescurrent'        => 'موجودہ متن',
+'allmessagestext'           => 'یہ میڈیاویکی: جاۓ نام میں دستیاب نظامی پیغامات کی فہرست ہے۔',
+'allmessagesnotsupportedUI' => 'آپکی بین السطحی زبان <b>$1</b> اس وقوع پر  Special:AllMessages میں قابل شناخت نہیں۔',
+'allmessagesfilter'         => 'مِصفاہ اسم پیغام:',
+'allmessagesmodified'       => 'فقط ترامیم کا اظہار',
+
+# Special:Import
+'import' => 'درآمد صفحات',
+
+# Attribution
+'anonymous' => '{{SITENAME}} گمنام صارف',
+'and'       => 'اور',
+'others'    => 'دیگر',
+
+# Spam protection
+'subcategorycount'       => 'اس زمرے  {{PLURAL:$1|کا ایک ذیلی زمرہ ہے|کے $1 ذیلی زمرہ جات ہیں}}۔',
+'categoryarticlecount'   => 'اس زمرے میں {{PLURAL:$1|ایک مضمون ہے|$1 مضامین ہیں}}۔',
+'listingcontinuesabbrev' => ' ۔جاری',
+
+# Image deletion
+'deletedrevision' => 'حذف شدہ پرانی ترمیم $1۔',
+
+# Browsing diffs
+'previousdiff' => '> گذشتہ فرق',
+'nextdiff'     => '< اگلا فرق',
+
+'newimages'    => 'نئی فائلوں کی گیلری',
+'showhidebots' => '($1 بوٹ)',
+
+'passwordtooshort' => 'آپکا منتخب کردہ کلمۂ شناخت بہت مختصر ہے۔ اسے کم از کم $1 حروف پر مشتمل ہونا چاہیۓ۔',
+
+# Metadata
+'metadata' => 'میٹا ڈیٹا',
+
+'exif-meteringmode-0' => 'نامعلوم',
+
+# 'all' in various places, this might be different for inflected languages
+'recentchangesall' => 'تمام',
+'watchlistall1'    => 'تمام',
+'watchlistall2'    => 'تمام',
+'namespacesall'    => 'تمام',
+
+# Inputbox extension, may be useful in other contexts as well
+'searchfulltext' => 'تلاش ِکل متن',
+'createarticle'  => 'نیا مضمون',
+
+# Delete conflict
+'deletedwhileediting' => 'انتباہ: آپ کے ترمیم شروع کرنے کے بعد یہ صفحہ حذف کیا جا چکا ہے!',
+
+# HTML dump
+'redirectingto' => 'کی جانب پلٹایا گیا [[$1]]...',
+
+# action=purge
+'confirm_purge_button' => 'جی!',
+
+'searchnamed'   => "مضمون بنام ''$1'' کیلیۓ تلاش۔",
+'articletitles' => "''$1'' سے شروع ہونے والے مضامین",
+'hideresults'   => 'نتیجہ چھپائیں',
+
+# Auto-summaries
+'autosumm-blank'   => 'تمام مندرجات حذف',
+'autoredircomment' => '[[$1]] سے رجوع مکرر', # This should be changed to the new naming convention, but existed beforehand
+'autosumm-new'     => 'نیا صفحہ: $1',
+
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesUz.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesUz.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesUz.php	(revision 1280)
@@ -0,0 +1,425 @@
+<?php
+/**
+ * Uzbek (O'zbek)
+ * Translated by: Behzod Saidov <behzodsaidov@gmail.com>
+ * 
+ * **********************************************************
+ * Iltimos, MediaWiki tarjimalari bilan bo'g'liq taklif va
+ * mulohazalaringiz bo'lsa men bilan e-mail orqali bo'g'laning
+ * **********************************************************
+ */
+
+$fallback8bitEncoding = 'windows-1252';
+
+$linkPrefixExtension = true;
+
+$namespaceNames = array(
+	NS_MEDIA            => 'Media',
+	NS_SPECIAL          => 'Maxsus',
+	NS_MAIN             => 'Asosiy',
+	NS_TALK             => 'Munozara',
+	NS_USER             => 'Foydalanuvchi',
+	NS_USER_TALK        => 'Foydalanuvchi_munozarasi',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK     => '$1_munozarasi',
+	NS_IMAGE            => 'Tasvir',
+	NS_IMAGE_TALK       => 'Tasvir_munozarasi',
+	NS_MEDIAWIKI        => 'MediaWiki',
+	NS_MEDIAWIKI_TALK   => 'MediaWiki_munozarasi',
+	NS_TEMPLATE         => 'Shablon',
+	NS_TEMPLATE_TALK    => 'Shablon_munozarasi',
+	NS_HELP             => 'Yordam',
+	NS_HELP_TALK        => 'Yordam_munozarasi',
+	NS_CATEGORY         => 'Kategoriya',
+	NS_CATEGORY_TALK    => 'Kategoriya_munozarasi',
+);
+	
+$namespaceAliases = array(
+	'Mediya'                => NS_MEDIA,
+	'MediyaViki'            => NS_MEDIAWIKI,
+	'MediyaViki_munozarasi' => NS_MEDIAWIKI_TALK,
+);
+
+$linkTrail = '/^([a-zʻʼ“»]+)(.*)$/sDu';
+
+$messages = array(
+# Dates
+'sunday'        => 'Yakshanba',
+'monday'        => 'Dushanba',
+'tuesday'       => 'Seshanba',
+'wednesday'     => 'Chorshanba',
+'thursday'      => 'Payshanba',
+'friday'        => 'Juma',
+'saturday'      => 'Shanba',
+'sun'           => 'Yak',
+'mon'           => 'Dsh',
+'tue'           => 'Ssh',
+'wed'           => 'Chr',
+'thu'           => 'Pay',
+'fri'           => 'Jum',
+'sat'           => 'Shn',
+'january'       => 'yanvar',
+'february'      => 'fevral',
+'march'         => 'mart',
+'april'         => 'aprel',
+'may_long'      => 'may',
+'june'          => 'iyun',
+'july'          => 'iyul',
+'august'        => 'avgust',
+'september'     => 'sentabr',
+'october'       => 'oktabr',
+'november'      => 'noyabr',
+'december'      => 'dekabr',
+'january-gen'   => 'yanvarning',
+'february-gen'  => 'fevralning',
+'march-gen'     => 'martning',
+'april-gen'     => 'aprelning',
+'may-gen'       => 'mayning',
+'june-gen'      => 'iyunning',
+'july-gen'      => 'iyulning',
+'august-gen'    => 'avgustning',
+'september-gen' => 'sentabrning',
+'october-gen'   => 'oktabrning',
+'november-gen'  => 'noyabrning',
+'december-gen'  => 'dekabrning',
+'jan'           => 'yan',
+'feb'           => 'fev',
+'mar'           => 'mar',
+'apr'           => 'apr',
+'may'           => 'may',
+'jun'           => 'iyn',
+'jul'           => 'iyl',
+'aug'           => 'avg',
+'sep'           => 'sen',
+'oct'           => 'okt',
+'nov'           => 'noy',
+'dec'           => 'dek',
+
+# Bits of text used by many pages
+'categories'      => 'Kategoriyalar',
+'pagecategories'  => '{{PLURAL:$1|Kategoriya|Kategoriyalar}}',
+'category_header' => '"$1" kategoriyadagi maqolalar.',
+'subcategories'   => 'Podkategoriyalar',
+
+'linkprefix'        => '/^(.*?)([a-zA-Z\x80-\xffʻʼ«„]+)$/sDu',
+'mainpagetext'      => "<big>'''MediaWiki muvaffaqiyatli o'rnatildi.'''</big>",
+'mainpagedocfooter' => "Wiki dasturini ishlatish haqida ma'lumot olish uchun  [http://meta.wikimedia.org/wiki/Help:Contents Foydalanuvchi qo'llanmasi] sahifasiga murojaat qiling.
+
+== Dastlabki qadamlar ==
+
+* [http://www.mediawiki.org/wiki/Help:Configuration_settings Moslamalar ro'yxati]
+* [http://www.mediawiki.org/wiki/Help:FAQ MediaWiki haqida ko'p so'raladigan savollar]
+* [http://mail.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki yangi versiyasi chiqqanda xabar berish ro'yxati]",
+
+'about'          => 'Haqida',
+'newwindow'      => '(yangi oyanada ochiladi)',
+'cancel'         => 'Voz kechish',
+'qbedit'         => 'Tahrirlash',
+'qbspecialpages' => 'Maxsus sahifalar',
+'mytalk'         => 'Mening suhbatim',
+'anontalk'       => 'Bu IP uchun suhbat',
+'navigation'     => 'Saytda harakatlanish',
+
+'returnto'         => '$1 sahifasiga qaytish.',
+'help'             => 'Yordam',
+'search'           => 'Qidirish',
+'searchbutton'     => 'Qidirish',
+'go'               => "O'tish",
+'searcharticle'    => "O'tish",
+'history'          => 'Sahifa tarixi',
+'history_short'    => 'Tarix',
+'printableversion' => 'Bosma uchun versiya',
+'permalink'        => "Doimiy bog'",
+'edit'             => 'Tahrirlash',
+'delete'           => "O'chirish",
+'protect'          => 'Himoyalash',
+'protectthispage'  => 'Bu sahifani himoyala',
+'unprotect'        => 'Himoyadan chiqarish',
+'specialpage'      => 'Maxsus sahifa',
+'talk'             => 'Munozara',
+'views'            => "Ko'rinishlar",
+'toolbox'          => 'Asboblar',
+'otherlanguages'   => 'Boshqa tillarda',
+'lastmodifiedat'   => 'Bu sahifa oxirgi marta $2, $1 sanasida tahrirlangan.', # $1 date, $2 time
+'viewcount'        => 'Bu sahifaga {{plural:$1|bir marta|$1 marta}} murojaat qilingan.',
+'jumptosearch'     => 'Qidir',
+
+# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
+'aboutsite'         => '{{SITENAME}} haqida',
+'aboutpage'         => 'Project:Haqida',
+'currentevents'     => 'Joriy hodisalar',
+'currentevents-url' => 'Project:Joriy hodisalar',
+'edithelp'          => 'Tahrirlash yordami',
+'edithelppage'      => 'Help:Tahrirlash',
+'helppage'          => 'Help:Mundarija',
+'mainpage'          => 'Bosh sahifa',
+'portal'            => 'Jamoa portali',
+'portal-url'        => 'Project:Jamoa portali',
+'privacy'           => 'Konfidensiallik siyosati',
+'privacypage'       => 'Project:Konfidensiallik siyosati',
+'sitesupport'       => "Loyihaga ko'mak",
+'sitesupport-url'   => "Project:Loyihaga ko'mak",
+
+'editsection' => 'tahrirlash',
+'toc'         => 'Mundarija',
+'showtoc'     => "Ko'rsatish",
+'hidetoc'     => 'yashirish',
+
+# Short words for each namespace, by default used in the 'article' tab in monobook
+'nstab-main'     => 'Maqola',
+'nstab-user'     => 'Foydalanuvchi sahifasi',
+'nstab-special'  => 'Maxsus',
+'nstab-project'  => 'Loyiha sahifasi',
+'nstab-image'    => 'Fayl',
+'nstab-template' => 'Shablon',
+'nstab-help'     => 'Yordam sahifasi',
+'nstab-category' => 'Kategoriya',
+
+# General errors
+'viewsource'        => "Ko'rib chiqish",
+'protectedpagetext' => 'Bu sahifa tahrirlashdan saqlanish maqsadida qulflangan.',
+'viewsourcetext'    => "Siz bu sahifaning manbasini ko'rishingiz va uni nusxasini olishingiz mumkin:",
+
+# Login and logout pages
+'logouttext'         => "<strong>Siz saytdan muvaffaqiyatli chiqdingiz.</strong><br />
+{{SITENAME}} saytidan anonim holda foydalanishda davom etishindiz mumkin. Yoki siz yana hozirgi yoki boshqa foydalanuvchi nomi bilan qaytadan tizimga kirishingiz mumkin. Shuni e'tiborga olingki, ayrim sahifalar siz brauzeringiz keshini tozalamaguningizga qadar xuddi tizimga kirganingizdagidek ko'rinishda davom etaverishi mumkin.",
+'yourname'           => 'Foydalanuvchi nomi',
+'yourpassword'       => "Maxfiy so'z",
+'yourpasswordagain'  => "Maxfiy so'zni qayta kiriting",
+'remembermypassword' => "Hisob ma'lumotlarini shu kompyuterda eslab qolish",
+'login'              => 'Kirish',
+'loginprompt'        => "{{SITENAME}}ga kirish uchun kukilar yoqilgan bo'lishi kerak.",
+'userlogin'          => 'Kirish / Hisob yaratish',
+'userlogout'         => 'Chiqish',
+'nologin'            => "Hisobingiz yo'q-mi? $1.",
+'nologinlink'        => 'Hisob yaratish',
+'createaccount'      => 'Hisob yaratish',
+'gotaccount'         => 'Hisobingiz bor-mi? $1.',
+'gotaccountlink'     => 'Kirish',
+'yourrealname'       => 'Haqiqiy ism *:',
+'loginsuccesstitle'  => 'Kirish muvaffaqiyatli amalga oshdi',
+'loginsuccess'       => "'''{{SITENAME}}ga \"\$1\" foydalanuvchi nomi bilan kirdingiz.'''",
+
+# Edit pages
+'summary'           => 'Qisqa izoh',
+'minoredit'         => 'Bu kichik tahrir',
+'watchthis'         => 'Sahifani kuzatish',
+'savearticle'       => 'Saqlash',
+'preview'           => "Ko'rib chiqish",
+'showpreview'       => "Ko'rib chiqish",
+'showdiff'          => "O'zgarishlarni ko'rsatish",
+'newarticletext'    => "Bu sahifa hali mavjud emas. Sahifani yaratish uchun quyida matn kiritishingiz mumkin (qo'shimcha axborot uchun [[Help:Mundarija|yordam sahifasini]] ko'ring). Agar bu sahifaga xatolik sabab kelgan bo'lsangiz brauzeringizning '''orqaga''' tugmasini bosing.",
+'noarticletext'     => "Bu sahifada hozircha hech qanday matn yo'q. Siz bu sarlavhani boshqa sahifalardan [[Special:Search/{{PAGENAME}}|qidirishingiz]] yoki bu sahifani [{{fullurl:{{FULLPAGENAME}}|action=edit}} tahrirlashingiz] mumkin.",
+'clearyourcache'    => "'''Etibor bering:''' O'zgartirishlaringiz ko'rish uchun, yangi moslamalaringizning saqlashdan keyin, brauser keshini tozalash kerak:<br />
+'''Mozilla / Firefox:''' ''Ctrl+Shift+R'', '''IE:''' ''Ctrl+F5'', '''Safari:''' ''Cmd+Shift+R'', '''Konqueror:''' ''F5'', '''Opera:''' ''Tools → Preferences'' orqali keshni tozalang.",
+'previewnote'       => "<strong>Bu shunchaki ko'rib chiqish. O'zgarishlar hali saqlangani yo'q!</strong>",
+'editing'           => '$1 tahrirlanmoqda',
+'copyrightwarning2' => "Iltimos, shuni esda tutingki, {{SITENAME}} sahifalaridagi barcha matnlar boshqa foydalanuvchilar tomonidan tahrirlanishi, almashtirilishi yoki o'chirilishi mumkin. Agar siz yozgan ma'lumotlaringizni bunday tartibda tahrirlanishiga rozi bo'lmasangiz, unda uni bu yerga joylashtirmang.<br />
+Bundan tashqari, siz ushbu ma'lumotlarni o'zingiz yozgan bo'lishingiz yoki ruxsat berilgan internet manzilidan yoki shu kabi erkin resursdan nusxa olgan bo'lishingiz lozim (Qo'shimcha ma'lumotlar ushun $1 sahifasiga murojaat qiling).
+<strong>MUALLIFLIK HUQUQI QO'YILGAN ISHLARNI RUXSATSIZ BU YERGA JOYLASHTIRMANG!</strong>",
+
+# History pages
+'next' => 'keyingi',
+
+# Search results
+'searchresults'    => 'Qidiruv natijalari',
+'searchresulttext' => "{{SITENAME}}da qidirish haqida qo'shimcha ma'lumotga ega bo'lishini xoxlasangiz, [[{{ns:project}}:Qidiruv|{{SITENAME}}da qidiruv]] sahifasini o'qing.",
+'noexactmatch'     => "'''\"\$1\" nomli birorta ham sahifa yo'q.''' Bu sahifani [[:\$1|yaratishingiz]] mumkin.",
+'prevn'            => 'oldingi $1',
+'nextn'            => 'keyingi $1',
+'viewprevnext'     => "Ko'rish ($1) ($2) ($3).",
+'showingresults'   => "#<b>$2</b> boshlanayotgan <b>$1</b> natijalar ko'rsatilyapti.",
+'powersearch'      => 'Qidiruv',
+
+# Preferences page
+'preferences'       => 'Moslamalar',
+'mypreferences'     => 'Mening moslamalarim',
+'skin'              => "Tashqi ko'rinish",
+'math'              => 'Formulalar',
+'datetime'          => 'Sana va vaqt',
+'prefs-personal'    => "Shaxsiy ma'lumotlar",
+'prefs-rc'          => "Yangi o'zgartirishlar",
+'prefs-watchlist'   => "Kuzatuv ro'yxati",
+'prefs-misc'        => 'Boshqa moslamalar',
+'saveprefs'         => 'Saqlash',
+'resetprefs'        => 'Bekor qilish',
+'textboxsize'       => 'Tahrirlash',
+'searchresultshead' => 'Qidiruv natijalari',
+'files'             => 'Fayllar',
+
+# Recent changes
+'recentchanges'     => "Yangi o'zgartirishlar",
+'recentchangestext' => "Bu sahifada siz oxirgi o'zgartirishlarni ko'rishingiz mumkin.",
+'rcnote'            => "Quyida oxirgi '''$2''' kun davomida sodir bo'lgan $1 o'zgartirishlar ko'rsatilgan. ($3)<!--Below are the last <strong>$1</strong> changes in the last <strong>$2</strong> days, as of $3.-->",
+'rclistfrom'        => "$1dan boshlab yangi o'zgartirishlarni ko'rsat.",
+'rcshowhideminor'   => 'Kichik tahrirlarni $1',
+'rcshowhidebots'    => 'Botlarni $1',
+'rcshowhideliu'     => "Ro'yxatdan o'tgan foydalanuvchilarni $1",
+'rcshowhideanons'   => 'Anonim foydalanuvchilarni $1',
+'rcshowhidepatr'    => 'Tekshirilgan tahrirlarni $1',
+'rcshowhidemine'    => "O'z tahrirlarimni $1",
+'rclinks'           => "Oxirgi $2 kun davomida sodir bo'lgan $1 o'zgartirishlarni ko'rsat.<br />$3",
+'diff'              => 'farq',
+'hist'              => 'tarix',
+'hide'              => 'yashirish',
+'show'              => "ko'rsat",
+'minoreditletter'   => 'k',
+'newpageletter'     => 'Y',
+'boteditletter'     => 'b',
+'sectionlink'       => '→',
+
+# Recent changes linked
+'recentchangeslinked' => "Bog'langan o'zgarishlar",
+
+# Upload
+'upload' => 'Fayl yuklash',
+
+# Image list
+'ilsubmit' => 'Qidirish',
+
+'disambiguationspage' => '{{ns:template}}:Disambig',
+
+# Miscellaneous special pages
+'ncategories'      => '$1 {{PLURAL:$1|kategoriya|kategoriyalar}}',
+'wantedcategories' => 'Talab qilinayotgan kategoriyalar',
+'mostcategories'   => "Eng ko'p kategoriyalarli sahifalar",
+'allpages'         => 'Barcha sahifalar',
+'randompage'       => 'Tasodifiy sahifa',
+'specialpages'     => 'Maxsus sahifalar',
+'move'             => "Ko'chirish",
+
+'categoriespagetext' => 'Ushbu kategoriyalar vikida bor.',
+
+# Special:Log
+'log-search-submit' => "O'tish",
+
+# Special:Allpages
+'allarticles'    => 'Barcha sahifalar',
+'allpagesnext'   => 'Keyingi',
+'allpagessubmit' => "O'tish",
+
+# Watchlist
+'watchlist'        => "Mening kuzatuv ro'yxatim",
+'mywatchlist'      => "Mening kuzatuv ro'yxatim",
+'watchlistfor'     => "('''$1''' uchun)",
+'nowatchlist'      => "Kuzatuv ro'yxatingizda hech narsa yo'q.",
+'addedwatch'       => "Kuzatuv ro'yxatiga qo'shildi",
+'addedwatchtext'   => "\"[[:\$1]]\" sahifasi sizning [[Special:Watchlist|kuzatuv ro'yxatingizga]] qo'shildi. Bu sahifada va unga mos munozara sahifasida bo'ladigan kelajakdagi o'zgarishlar bu yerda ro'yxatga olinadi, hamda bu sahifa topish qulay bo'lishi uchun [[Special:Recentchanges|yangi o'zgarishlar ro'yxati]]da '''qalin''' harflar bilan ko'rsatiladi.
+
+Agar siz bu sahifani kuzatuv ro'yxatingizdan o'chirmoqchi bo'lsangiz \"Kuzatmaslik\" yozuvini bosing.",
+'removedwatch'     => "Kuzatuv ro'yxatidan o'chirildi",
+'removedwatchtext' => '"[[:$1]]" sahifasi kuzatuv ro\'yxatingizdan o\'chirildi.',
+'watch'            => 'kuzatish',
+'watchthispage'    => 'Sahifani kuzatish',
+'unwatch'          => 'kuzatmaslik',
+'wlnote'           => "Pastda oxirgi '''$2''' soatda sodir bo'lgan $1 o'zgartirishlar ko'rsatilgan.",
+'wlshowlast'       => "Oxirgi $1 soatdagi $2 kundagi tahrirlarni ko'rsatish. $3 tahrirlarni ko'rsatish",
+
+# Delete/protect/revert
+'deletecomment'   => "O'chirish sababi",
+'protectmoveonly' => "Faqat ko'chirishdan himoyala",
+
+# Restrictions (nouns)
+'restriction-edit' => 'Tahrirlash',
+
+# Namespace form on various pages
+'namespace' => 'Soha:',
+'invert'    => 'Tanlash tartibini almashtirish',
+
+# Contributions
+'contributions' => 'Foydalanuvchining hissasi',
+'mycontris'     => 'mening hissam',
+
+# What links here
+'whatlinkshere' => "Bu sahifaga bog'langan sahifalar",
+'linklistsub'   => "(Bog'lanishlar ro'yxati)",
+'linkshere'     => "Quyidagi sahifalar '''[[:$1]]''' sahifasiga bog'langan:",
+'nolinkshere'   => "'''[[:$1]]''' sahifasiga hech qaysi sahifa bog'lanmagan.",
+
+# Move page
+'movearticle' => "Sahifani ko'chirish",
+'1movedto2'   => "[[$1]] [[$2]]ga ko'chirildi",
+
+# Tooltip help for the actions
+'tooltip-pt-userpage'             => 'Mening foydalanuvchi sahifam',
+'tooltip-pt-anonuserpage'         => 'Siznig ip manzilingiz foydalanuvchi sahifasi',
+'tooltip-pt-mytalk'               => 'Mening suhbat sahifam',
+'tooltip-pt-anontalk'             => 'Bu ip manzildan amalga oshirilgan tahrirlar munozarasi',
+'tooltip-pt-preferences'          => 'Mening moslamalarim',
+'tooltip-pt-watchlist'            => "Siz kuzatib borayotgan sahifalar ro\'yxati.",
+'tooltip-pt-mycontris'            => "Mening hissa qo'shgan sahifalarim ro'yxati",
+'tooltip-pt-login'                => "Bu majburiyat bo'lmasada, kirishingiz taklif qilinadi.",
+'tooltip-pt-anonlogin'            => "Bu majburiyat bo'lmasada, kirishingiz taklif qilinadi.",
+'tooltip-pt-logout'               => 'Chiqish',
+'tooltip-ca-talk'                 => 'Sahifa matni borasida munozara',
+'tooltip-ca-edit'                 => "Siz bu sahifani tahrirlashingiz mumkin. Iltimos, saqlashdan oldim ko'rib chiqish tugmasidan foydalaning.",
+'tooltip-ca-addsection'           => "Bu munozaraga izoh qo'shish.",
+'tooltip-ca-viewsource'           => "Bu sahifa himoyalangan. Siz uning manbasini ko'rishingiz mumkin.",
+'tooltip-ca-history'              => 'Bu sahifaning oldingi versiyalari.',
+'tooltip-ca-protect'              => 'Bu sahifani himoyalash',
+'tooltip-ca-delete'               => "Bu sahifani o'chirish",
+'tooltip-ca-undelete'             => "Bu sahifa o'chirilmasdan oldin qilingan tahrirlarni tiklash",
+'tooltip-ca-move'                 => "Bu sahifani ko'chirish",
+'tooltip-ca-watch'                => "Bu sahifani kuzatuv ro'yxatingizga qo'shish",
+'tooltip-ca-unwatch'              => "Bu sahifani kuzatuv ro'yxatingizga o'chirish",
+'tooltip-search'                  => '{{SITENAME}}da qidirish',
+'tooltip-p-logo'                  => 'Bosh sahifa',
+'tooltip-n-mainpage'              => "Bosh sahifaga o'tish",
+'tooltip-n-portal'                => 'Loyiha haqida, nimalar qilishingiz mumkin, nimalarni qayerdan topish mumkin',
+'tooltip-n-currentevents'         => "Joriy hodisalar haqida ma'lumot olish",
+'tooltip-n-recentchanges'         => "Yangi o'zgarishlar ro'yxati.",
+'tooltip-n-randompage'            => 'Tasodifiy sahifani yuklash',
+'tooltip-n-help'                  => "O'rganish uchun manzil.",
+'tooltip-n-sitesupport'           => "Bizni qo'llab quvvatlang.",
+'tooltip-t-whatlinkshere'         => "Bu sahifaga bog'langan sahifalar ro'yxati",
+'tooltip-t-recentchangeslinked'   => "Bu sahifa bog'langan sahifalardagi yangi o'zgarishlar",
+'tooltip-feed-rss'                => "Bu sahifa uchun RSS ta'minot",
+'tooltip-feed-atom'               => "Bu sahifa uchun Atom ta'minot",
+'tooltip-t-contributions'         => "Bu foydalanuvchinig qo'shgan hissasini ko'rish",
+'tooltip-t-emailuser'             => "Bu foydalanuvchiga xat jo'natish",
+'tooltip-t-upload'                => 'Rasmlar yoki media fayllar yuklash',
+'tooltip-t-specialpages'          => "Maxsus sahifalar ro'yxati",
+'tooltip-ca-nstab-main'           => "Sahifani ko'rish",
+'tooltip-ca-nstab-user'           => "Foydalanuvchi sahifasini ko'rish",
+'tooltip-ca-nstab-media'          => "Media sahifasini ko'rish",
+'tooltip-ca-nstab-special'        => 'Bu maxsus sahifa, uni tahrirlay olmaysiz.',
+'tooltip-ca-nstab-project'        => "Loyiha sahifasini ko'rish",
+'tooltip-ca-nstab-image'          => "Rasm sahifasini ko'rish",
+'tooltip-ca-nstab-mediawiki'      => "Tizim xabarini ko'rish",
+'tooltip-ca-nstab-template'       => "Shablonni ko'rish",
+'tooltip-ca-nstab-help'           => "Yordam sahifasini ko'rish",
+'tooltip-ca-nstab-category'       => "Kategoriya sahifasini ko'rish",
+'tooltip-minoredit'               => "Kichik o'zgarish sifatida belgilash",
+'tooltip-save'                    => "O'zgarishlarni saqlash",
+'tooltip-preview'                 => "O'zgarishlarni saqlash. Iltimos saqlashdan oldin uni ishlating!",
+'tooltip-diff'                    => "Matnga qanday o'zgarishlar kiritganligingizni ko'rish.",
+'tooltip-compareselectedversions' => "Bu sahifaning ikki tanlangan versiyalari o'rtasidagi farqni ko'rish.",
+'tooltip-watch'                   => "Bu sahifani kuzatuv ro'yxatingizga qo'shish",
+'tooltip-recreate'                => "Bu sahifani u o'chirilgan bo'lishiga qaramasdan qayta yaratish",
+
+# Attribution
+'and' => 'va',
+
+# Spam protection
+'subcategorycount'     => 'Bu kategoriya {{PLURAL:$1|bir|$1}} podkategoriyadan iborat.',
+'categoryarticlecount' => 'Bu kategoriyada {{PLURAL:$1|bitta|$1}} sahifa bor.',
+
+# Media information
+'imagemaxsize' => "Tasvir ta'rifi sahifasidagi tasvirning kattaligi:",
+'thumbsize'    => 'Tasvirning kichiklashtirilgan versiyasining kattaligi:',
+
+# 'all' in various places, this might be different for inflected languages
+'recentchangesall' => 'Barchasi',
+'imagelistall'     => 'Barchasi',
+'watchlistall1'    => 'Barcha',
+'watchlistall2'    => 'Barcha',
+'namespacesall'    => 'Barchasi',
+
+# Inputbox extension, may be useful in other contexts as well
+'createarticle' => 'Maqola kiritish',
+
+'unit-pixel' => 'piksel',
+
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesVec.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesVec.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesVec.php	(revision 1280)
@@ -0,0 +1,1214 @@
+<?php
+/** Venitian ( Vèneto )
+  *
+  * @addtogroup Language
+  */
+$fallback = 'it';
+
+$namespaceNames = array(		
+	NS_MEDIA            => 'Media',
+	NS_SPECIAL          => 'Speciale',
+	NS_MAIN             => '',
+	NS_TALK             => 'Discussion',
+	NS_USER             => 'Utente',
+	NS_USER_TALK        => 'Discussion_utente',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK     => 'Discussion_$1',
+	NS_IMAGE            => 'Imagine',
+	NS_IMAGE_TALK       => 'Discussion_imagine',
+	NS_MEDIAWIKI        => 'MediaWiki',
+	NS_MEDIAWIKI_TALK   => 'Discussion_MediaWiki',
+	NS_TEMPLATE         => 'Template',
+	NS_TEMPLATE_TALK    => 'Discussion_template',
+	NS_HELP             => 'Aiuto',
+	NS_HELP_TALK        => 'Discussion_aiuto',
+	NS_CATEGORY         => 'Categoria',
+	NS_CATEGORY_TALK    => 'Discussion_categoria'
+);
+
+$messages = array(
+'tog-underline'         => 'Sottolinea links',
+'tog-highlightbroken'   => 'Evidenzsia i links che i punta a <br />arthicołi ancora da scrivere',
+'tog-justify'           => 'Paragrafo: giustificato',
+'tog-hideminor'         => 'Nascondi le modifiche minori<br />nella pagina "Modifiche recenti"',
+'tog-numberheadings'    => 'Auto-numerazione dei<br />titoli di paragrafo',
+'tog-editondblclick'    => 'Doppio click per modificare l\'articolo<br />(richiede JavaScript)',
+'tog-editsection'       => 'Modifega de łe sezsioni tramite el cołegamento [modifica]',
+'tog-editsectiononrightclick'=> 'Modifega de łe sezsion tramite clic destro sul titoło (richiede JavaScript)',
+'tog-showtoc'           => 'Mostra l\'indexe par łe paxène con pì de 3 sezsion',
+'tog-rememberpassword'  => 'Ricorda la password<br />(non limitare a una sessione<br />- richiede uso di cookies)',
+'tog-editwidth'         => 'Casella di edizione ampliata<br />alla massima larghezza',
+'tog-watchcreations'    => 'Xonta łe paxène creae a i osservati speciałi',
+'tog-watchdefault'      => 'Xonta łe paxène modifegae a i osservati speciałi',
+'tog-minordefault'      => 'Indica ogni modifica come minore<br />(solo come predefinito)',
+'tog-watchlisthideown'  => 'Scondi łe me modifeghe ne i osservati speciałi',
+'tog-watchlisthidebots' => 'Scondi le modifighe de i bot ne i oservati speciałi',
+'skinpreview'           => 'Anteprima',
+'sunday'                => 'Domenica',
+'monday'                => 'Luni',
+'tuesday'               => 'Marti',
+'wednesday'             => 'Mèrcoli',
+'thursday'              => 'Xòbia',
+'friday'                => 'Vènerdi',
+'saturday'              => 'Sabo',
+'january'               => 'genaro',
+'february'              => 'Febraro',
+'march'                 => 'Marzso',
+'april'                 => 'Apriłe',
+'may_long'              => 'Majo',
+'july'                  => 'lujo',
+'august'                => 'Agosto',
+'september'             => 'Setenbre',
+'october'               => 'Otobre',
+'november'              => 'Novenbre',
+'december'              => 'Diçenbre',
+'jan'                   => 'Gen',
+'feb'                   => 'Feb',
+'mar'                   => 'Mar',
+'apr'                   => 'Apr',
+'may'                   => 'Mag',
+'jul'                   => 'Lug',
+'aug'                   => 'Ago',
+'sep'                   => 'Set',
+'oct'                   => 'Oto',
+'nov'                   => 'Nov',
+'dec'                   => 'Diç',
+'categories'            => 'Categorie',
+'pagecategories'        => '{{PLURAL:$1|Categoria|Categorie}}',
+'category_header'       => 'Voçi n\'te ła categoria "$1"',
+'mainpage'              => 'Paxèna prinzsipałe',
+'mainpagetext'          => '\'\'\'MediaWiki xè stà instałà con sucesso.\'\'\'',
+'mainpagedocfooter'     => 'Consult the [http://meta.wikimedia.org/wiki/Help:Contents User\'s Guide] for information on using the wiki software.
+
+== Getting started ==
+
+* [http://www.mediawiki.org/wiki/Help:Configuration_settings Configuration settings list]
+* [http://www.mediawiki.org/wiki/Help:FAQ MediaWiki FAQ]
+* [http://mail.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]',
+'portal-url'            => 'Project:Portałe Comunità',
+'about'                 => 'Se parla de',
+'aboutsite'             => 'Se parla de {{SITENAME}}',
+'aboutpage'             => 'Project:Se parla de',
+'article'               => 'Voçe',
+'help'                  => 'Ciacołe',
+'helppage'              => 'Help:Ciacołe',
+'bugreports'            => 'Malfunzsionamenti',
+'bugreportspage'        => 'Project:Malfunzsionamenti',
+'sitesupport'           => 'Donazsion',
+'sitesupport-url'       => 'Project:Donasioni',
+'newwindow'             => '(se verde in una nova finestra)',
+'edithelppage'          => 'Help:Come scrivere un articolo',
+'cancel'                => 'Anuła',
+'qbedit'                => 'Modifega',
+'qbpageoptions'         => 'Opzsion paxèna',
+'qbpageinfo'            => 'Informazsion su ła paxèna',
+'qbmyoptions'           => 'Le me opzsion',
+'qbspecialpages'        => 'Paxène speciałi',
+'moredotdotdot'         => 'More...',
+'mypage'                => 'La me paxèna',
+'mytalk'                => 'le me discussión',
+'anontalk'              => 'Discussion par sto IP',
+'navigation'            => 'Navigazsión',
+'currentevents'         => 'Atuałità',
+'currentevents-url'     => 'Atuałità',
+'errorpagetitle'        => 'Erór',
+'search'                => 'Serca',
+'searchbutton'          => 'Serca',
+'history'               => 'Versión precedenti',
+'history_short'         => 'Cronołogia',
+'info_short'            => 'Informazsion',
+'printableversion'      => 'Version de stampa',
+'edit'                  => 'Modifega',
+'editthispage'          => 'Modifica voçe',
+'delete'                => 'Scanceła',
+'deletethispage'        => 'Scanceła paxèna',
+'protect'               => 'Proteggi',
+'protectthispage'       => 'Protegi sta paxèna',
+'unprotect'             => 'sbloca',
+'unprotectthispage'     => 'Cava protezsion',
+'newpage'               => 'Nova paxèna',
+'talkpage'              => 'Discussion',
+'specialpage'           => 'Paxèna Speciałe',
+'articlepage'           => 'Varda voçe',
+'talk'                  => 'Discussion',
+'userpage'              => 'Varda paxèna Utente',
+'projectpage'           => 'Varda ła paxèna de servizsio',
+'imagepage'             => 'Paxèna imagine',
+'viewtalkpage'          => 'Varda ła paxèna de discussion',
+'otherlanguages'        => 'Altre łengoe',
+'redirectedfrom'        => '(Reindirizzamento da $1)',
+'autoredircomment'      => 'Redirect a ła paxèna [[$1]]',
+'redirectpagesub'       => 'Paxèna de redirect',
+'lastmodifiedat'          => 'Ultima modifica $2, $1.',
+'viewcount'             => 'Sta paxèna xè stà leta {{PLURAL:$1|na volta|$1 volte}}.',
+'copyright'             => 'Contenuto disponibile sotto $1.',
+'protectedpage'         => 'Paxèna proteta',
+'jumptonavigation'      => 'Navigazsion',
+'jumptosearch'          => 'zserca',
+'badaccess'             => 'Eròr ne i permessi',
+'versionrequired'       => 'Verzsion $1 de MediaWiki richiesta',
+'versionrequiredtext'   => 'Par usare sta paxèna xè necessario dispore de ła verzsion $1 del software MediaWiki. Varda [[Special:Version]]',
+'youhavenewmessages'    => 'Te ghè $1 ($2).',
+'newmessageslink'       => 'Novi messaj',
+'newmessagesdifflink'   => 'diff to penultimate revision',
+'editsectionhint'       => 'Modifica sezsión: $1',
+'hidetoc'               => 'scondi',
+'viewdeleted'           => 'Vedito $1?',
+'restorelink'           => '$1 edit scancełai',
+'feed-invalid'          => 'Modałità de sotoscrizsion de el feed non vałida.',
+'nstab-main'            => 'Voçe',
+'nstab-media'           => 'Media page',
+'nstab-image'           => 'Imagine',
+'nosuchaction'          => 'Operazsion non riconoszua',
+'nosuchactiontext'      => 'L\'operazione richiesta con la URL immessa non è stata riconosciuta dal software MediaWiki',
+'nosuchspecialpage'     => 'Non xè disponibiłe nesuna paxèna speciałe con sto nome',
+'nospecialpagetext'     => 'Hai richiesto una pagina speciale che non è stata riconosciuta dal software MediaWiki, o che non è disponibile.',
+'error'                 => 'Erór',
+'dberrortext'           => 'Errore de sintassi ne la richiesta inoltrà al database.
+L\'ultima richiesta inoltrà al database l\'è stà:
+<blockquote><tt>$1</tt></blockquote>
+da la funzsion "<tt>$2</tt>".
+MySQL gà restituio un errore "<tt>$3: $4</tt>".',
+'dberrortextcl'         => 'Se gà verificà un errore de sintassi ne la richiesta al database.
+L\'ultuma richiesta al database l\'è stà:
+"$1"
+da la funzsion "$2".
+MySQL gà restituio l\'errore "$3: $4".',
+'noconnect'             => 'Connessione al database fallita su $1',
+'nodb'                  => 'Selezione del database $1 fallita',
+'cachederror'           => 'La seguente xè na copia de riserva de la pagina richiesta, e podarìa non essere aggiornà.',
+'laggedslavemode'       => 'Atenzsion: la paxèna podaria non contegnere gli ultimi aggiornamenti.',
+'readonly'              => 'Accesso al database temporaneamente disabilitato',
+'enterlockreason'       => 'Fornisi na spiegazsion sui motivi del blocco, includendo le probabili data ed ora de riattivazsion o de rimozsion del blocco.',
+'readonlytext'          => 'Il database di {{SITENAME}} è al momento bloccato, e non consente nuove immissioni né modifiche, molto probabilmente per manutenzione server, nel qual caso il database sarà presto di nuovo completamente accessibile.<br />
+L\'amministratore di sistema che ha imposto il blocco, ha lasciato questa nota:
+<p>:$1</p>',
+'missingarticle'        => 'Il database non ha trovato il testo di una pagina, che invece avrebbe dovuto trovare, intitolata "$1".<br />
+Questo non è un errore del database, ma più probabilmente un problema del software.<br />
+Per favore, segnalate l\'accaduto ad un amministratore di sistema, segnalando la URL e l\'ora dell\'incidente.',
+'internalerror'         => 'Eròr interno',
+'filecopyerror'         => 'Non xè stà possibiłe copiare el file "$1" come "$2".',
+'filerenameerror'       => 'Non xè stà possibile rinominare el file "$1" in "$2".',
+'filedeleteerror'       => 'Non xè stà possibiłe scancełare el file "$1".',
+'filenotfound'          => 'Non xè stà possibile trovare el file "$1".',
+'formerror'             => 'Erór: el modulo non xè stà invià correttamente',
+'badarticleerror'       => 'Stà operazsión non xè consentia su stà paxèna.',
+'cannotdelete'          => 'Non xè mia possibiłe scancełare la paxèna o l\'imagine richiesta.',
+'badtitle'              => 'El titoło non xè mia coreto',
+'badtitletext'          => 'La paxèna richiesta non xè disponibiłe, ła podaria essare non vałida, voda, o podaria trattarzse de un erór in un cołegamento interlinguistico o fra diverzse verzsion de {{SITENAME}}.',
+'perfdisabled'          => 'Siamo davvero rammaricati, ma questa funzionalità è temporaneamente disabilitata durante le ore di maggiore accesso al database, per ragioni di accessibilità al resto del sito!<br />Torna fra le 02:00 e le 14:00 UTC e riprova.<br /><br />Grazie.',
+'perfcached'            => 'Sta quà xè na copia \'\'cache\'\' e quindi non podaria essere completamente agiornà:',
+'wrong_wfQuery_params'  => 'Parametri errai par wfQuery()<br />
+Funzsion: $1<br />
+Query: $2',
+'viewsource'            => 'Varda ła fonte',
+'protectedinterface'    => 'Sta paxèna contegne un elemento che fa parte de l\'interfaccia utente del software; è quindi xè proteta par evitare possibiłi abusi.',
+'editinginterface'      => '\'\'\'Atenzsion:\'\'\' El testo de sta paxèna fa parte de l\'interfaccia utente del sito. Tute łe modifiche apportae a sta paxèna łe se riflette su i messaj vixuałixai par tuti i utenti.',
+'logouttitle'           => 'Logout Utente',
+'logouttext'            => 'Logout effettuato.
+Ora puoi continuare ad usare {{SITENAME}} come utente anonimo (ma il tuo indirizzo IP resterà riconoscibile), oppure puoi nuovamente richiedere il login con il precedente username, oppure come uno diverso.',
+'welcomecreation'       => '<h2>Benvegnù, $1!</h2><p>El to account l\'è stà creà con sucesso.<br />
+Grasie par aver scelto de far cresere {{SITENAME}} co\'l to aiuto.<br />
+Par rendere {{SITENAME}} più tua, e par usarla più scorrevolmente, non dimenticare de personalixare le to preferense.',
+'loginpagetitle'        => 'Login',
+'yourname'              => 'El to nome utente (solo la prima en maiuscolo)',
+'yourpassword'          => 'Scegli na password',
+'yourpasswordagain'     => 'Scrivi la password de novo',
+'remembermypassword'    => 'Ricorda la mia password per più sessioni (richiede uso dei cookies).',
+'externaldberror'       => 'Si gà verificà un erór con el server de autenticazsion esterno, oppure non se dispone de łe autorixazsion necessarie par aggiornar el proprio açesso esterno.',
+'loginproblem'          => '<b>Si gà verificà un errore durante el to tentativo de login.</b><br />Riproa, te sarè più fortunà!',
+'alreadyloggedin'       => '<strong>Ehi, Utente $1, te ghe xà fato el login, te si xà conesso al nostro server!</strong><br />',
+'loginprompt'           => 'Par acedere a {{SITENAME}} xè necessario abiłitare i cookie.',
+'logout'                => 'Và fora',
+'userlogout'            => 'và fora',
+'nologin'               => 'Non gheto gnancora n\'acezso? $1.',
+'nologinlink'           => 'Crealo ora',
+'createaccount'         => 'Crea un novo accesso',
+'gotaccount'            => 'Gheto xà un to account? $1.',
+'createaccountmail'     => 'via email',
+'badretype'             => 'Le password che te ghè immesso non le coincide, le xè diverse fra lore.',
+'userexists'            => 'Siamo spiacenti.<br />Lo user name che hai scelto è già usato da un altro Utente.<br />Ti preghiamo perciò di voler scegliere uno user name diverso.',
+'youremail'             => 'La to e-mail',
+'yourrealname'          => 'El to vero nome*',
+'yourlanguage'          => 'Linguaggio del l\'interfaccia',
+'yourvariant'           => 'Variante de linguaggio',
+'yournick'              => 'El to soranome (par łe firme)',
+'badsig'                => 'Erór ne ła firma non standard, verifica i tag HTML.',
+'email'                 => 'E-mail',
+'loginerror'            => 'Errore de Login',
+'noname'                => 'Lo user name indicato non è valido, non è possibile creare un account a questo nome.',
+'loginsuccesstitle'     => 'Login effettuato con successo!',
+'loginsuccess'          => '\'\'\'El cołegamento al server de {{SITENAME}} con el nome utente "$1" xè ativo.\'\'\'',
+'nosuchuser'            => 'Attenzione<br /><br />a seguito di verifica, non ci risulta alcun Utente con il nome di  "$1".<br /><br />
+Controlla per favore il nome digitato, oppure usa il modulo qui sotto per creare un nuovo user account.',
+'nosuchusershort'       => 'Non xè registrà nessun utente de nome "$1". Verifica el nome inserio.',
+'wrongpassword'         => 'La password che te ghe messo non l\'è mia giusta.<br /><br />Riprova, per favore.',
+'wrongpasswordempty'    => 'La password inseria xè voda. Riproa.',
+'mailmypassword'        => 'Spediscimi una nuova password in posta elettronica',
+'passwordremindertext'  => 'Qualcuno (probabilmente ti, con indirizso IP $1) gà richiesto l\'invio de na nova password de acezso a {{SITENAME}} ($4).
+La password par l\'utente "$2" xè stà impostà a "$3". 
+Xè opportuno eseguire n\'acezso quanto prima e cambiare ła password immediatamente.',
+'noemail'               => 'Nessuna casella e-mail risulta registrata per l\'Utente "$1".',
+'passwordsent'          => 'Una nuova password è stata inviata alla casella e-mail registrata per l\'Utente "$1".
+Per favore, fai subito un log in non appena la ricevi.',
+'eauthentsent'          => 'Una email de conferma xè stà invià a l\'indirizzo che te ghè indicà. Prima che qualunque altra mail te vengna invià, te devi seguire le istruzsioni contegnue ne la mail ricevuta, par confermar che quell\'indirizzo xè veramente el tuo.',
+'mailerror'             => 'Ghe xè stà un eror nel mandare l\'email: $1',
+'acct_creation_throttle_hit'=> 'Me despiase, te ghe xà creà $1 account. Non te pol crearghine ancora.',
+'emailauthenticated'    => 'El to indiriszo de e-mail l\'è stado autenticado su $1.',
+'emailnotauthenticated' => 'El to indirizso email non xè ancora stà autenticà. Nessuna email la verrà invià tramite le funzsioni che seguono.',
+'emailconfirmlink'      => 'Conferma el to indiriszo de e-mail',
+'invalidemailaddress'   => 'L\'indiriszo email no\'l pode essere accettà parché el gà un formato non valido. Per favore inserisci un indirizso valido o svoda la caseła.',
+'accountcreated'        => 'Acesso creà',
+'accountcreatedtext'    => 'Xè stà creà un acesso par l\'utente $1.',
+'bold_sample'           => 'Grasseto',
+'bold_tip'              => 'Grasseto',
+'link_sample'           => 'Nome del link',
+'link_tip'              => 'Link interno',
+'extlink_sample'        => 'http://www.titolochevuoitu.com titolo del link',
+'extlink_tip'           => 'Link esterno (ricordate el prefisso http:// )',
+'headline_sample'       => 'Intestazsión',
+'headline_tip'          => 'Sottointestazsión',
+'math_sample'           => 'Insert formula here',
+'math_tip'              => 'Mathematical formula (LaTeX)',
+'image_tip'             => 'Imagine',
+'media_sample'          => 'Example.ogg',
+'media_tip'             => 'Media file link',
+'minoredit'             => 'Sta quà l\'è na modifica minore',
+'watchthis'             => 'Tegni d\'ocio sta voçe',
+'showpreview'           => 'Mostra anteprima',
+'showlivepreview'       => 'Live preview',
+'anoneditwarning'       => '\'\'\'Atenzsion:\'\'\' Acesso non effettuà. Ne ła cronołogia de ła paxèna verà redjstrà l\'indirizso IP.',
+'missingsummary'        => '\'\'\'Reminder:\'\'\' You have not provided an edit summary. If you click Save again, your edit will be saved without one.',
+'missingcommenttext'    => 'Please enter a comment below.',
+'blockedtitle'          => 'Stò nome utente corrisponde purtroppo a n\'Utente che xè stà disabilità a ła modifica de łe voçi.',
+'blockedtext'           => 'Sto nome utente o indirizso IP i xè stà blocai da $1.
+La motivazsion del bloco xè ła seguente:<br />:\'\'$2\'\'<br />Se te lo desideri, te podi contatare $1 o un altro [[Project:administrators|aministrador]] par discutere de el blocco.
+
+Si noti che ła funzsion \'Scrivi a l\'utente\' non xè attiva se non xè stà registrà un indiriszo e-mail vałido ne łe proprie [[Special:Preferences|preferenzse]].
+
+Specificare l\'indirizso IP coinvolto ($3) in qualsiasi richiesta de chiarimenti.',
+'blockedoriginalsource' => 'El codezse sorjente de \'\'\'$1\'\'\' el vegne mostrà de seguito:',
+'blockededitsource'     => 'Łe \'\'\'modifeghe\'\'\' apportae a \'\'\'$1\'\'\' łe vegne mostrae de seguito:',
+'whitelistedittitle'    => 'Occorre esser registrai par poder modificar la paxèna.',
+'whitelistedittext'     => 'Par modificare łe paxène ghe xè bisogno $1.',
+'whitelistreadtitle'    => 'Bisogna essere registrai par lexere ła paxèna',
+'whitelistreadtext'     => 'Xe necessario effettuar el [[Special:Userlogin|login]] par lexere i articoli.',
+'whitelistacctitle'     => 'Non te ghè el permesso de creare un account',
+'whitelistacctext'      => 'To be allowed to create accounts in this Wiki you have to [[Special:Userlogin|log]] in and have the appropriate permissions.',
+'confirmedittitle'      => 'Ghe vole ła conferma e-mail par scrivare',
+'confirmedittext'       => 'Te devi confermar l\'indirizso e-mail prime de editare le paxène. Par piaxèr sistema e valida el to indirizso e--mail usando [[Special:Preferences|user preferences]].',
+'loginreqtitle'         => 'Login Required',
+'loginreqlink'          => 'login',
+'loginreqpagetext'      => 'You must $1 to view other pages.',
+'accmailtitle'          => 'Password spedia.',
+'accmailtext'           => 'La password par \'$1\' l\'è sta spedia a $2.',
+'newarticle'            => '(Novo)',
+'newarticletext'        => 'El cołegamento appena seguio corisponde a na paxèna non ancora esistente.
+Se te desideri creare ła paxèna ora, basta comiçciare a scrivere el testo ne ła caseła qui sotto
+(fare riferimento a łe [[Project:Aiuto|paxène de aiuto]] par majori informazsion).
+Se el cołegamento xè stà seguio par eror, xè suficiente far clic sul botòn \'\'\'Indrio\'\'\' del proprio browser.',
+'anontalkpagetext'      => '----
+
+
+
+
+
+---- \'\'Sta quà l\'è la paxèna de discussion de un utente anonimo che non\'l se ga ancora registrà o che non effettua el login. De conseguenzsa xè necessario identificarlo tramite l\'[[Indirizzo IP|indirizzo IP]] numerico. Tale indirizso el pode esser condivixo da diversi utenti. Se te sì un utente anonimo e te pensi che ghe sia sta commenti irrilevanti, te podi [[Special:Userlogin|registrarte o effettuare el login]] par evitare confuxion con altri utenti in futuro.\'\'',
+'noarticletext'         => 'In sto momento ła paxèna richiesta xè voda. Xè possibiłe [[Special:Search/{{PAGENAME}}|çercar sto titoło]] ne łe altre paxène del sito oppure [{{fullurl:{{FULLPAGENAME}}|action=edit}} modificar ła paxèna \'desso].',
+'clearyourcache'        => '\'\'\'Nota:\'\'\' dopo aver salvà, te devi pulire la cache del to browser par veder i cambiamenti: \'\'\'Mozilla:\'\'\' clicca su \'\'reload\'\' (oppure \'\'ctrl-r\'\'), \'\'\'IE / Opera:\'\'\' \'\'ctrl-f5\'\', \'\'\'Safari:\'\'\' \'\'cmd-r\'\', \'\'\'Konqueror\'\'\' \'\'ctrl-r\'\'.',
+'previewnote'           => 'Tegni presente che sta qua xè solo n\'anteprima, e che la to verzsion NON xè stà ancora salvà!',
+'session_fail_preview'  => '<strong>Purtroppo non xè stà possibiłe salvare le to modifiche parché i dati de la sezsion i xè andai persi. Per favore, riproa.<br />
+Se te rizsevi sto messajo de erór pì olte, proa a scołegarte (struca su "và fora" in alto a destra) e a cołegarte novamente.</strong>',
+'previewconflict'       => 'Questa anteprima rappresenta il testo nella casella di edizione di sopra, l\'articolo apparirà in questa forma se sceglierai di salvare la pagina ora.',
+'importing'             => 'Importing $1',
+'editingsection'        => 'Modifica $1 (sezsion)',
+'editingcomment'        => 'Modifica $1 (commento)',
+'editconflict'          => 'Conflitto de edizsion: $1',
+'explainconflict'       => 'Qualcun altro ga salvà na so verszion de ła voçe nel tempo in cui te stavi preparando ła to verszion.<br /> La caselła de modifica de sora contegne el testo de la voçe ne ła so forma attuałe (el testo attualmente online). Le to modifiche łe xè inveçe contegnue ne ła caseła de modifica inferiore. Te dovarè inserire, se te vołi, le to modifiche nel testo esistente, e perciò scrivarle ne ła caseła de sora. <b>Soltanto</b> el testo ne ła caseła de sora sarà salvà se te struchi el botón "Salva".<br />',
+'yourtext'              => 'El to testo',
+'storedversion'         => 'Versione in archivio',
+'editingold'            => '<strong>Attenzsion: Te stè modificando na verzsion de ła voçe non aggiornà. Se te la salvi così, tuti i cambiamenti apportai dopo sta verzsion i verrà persi.</strong>',
+'yourdiff'              => 'Differense',
+'copyrightwarning2'     => 'Ocio che tuti i contributi a {{SITENAME}} i pode essere editai, alterai, o rimossi da altri contributori.
+Se non te voli che i to scriti vengna modificà senzsa pietà, alora non inserirli qua.<br />
+Sapi che te stè promettendo che te stè inserendo un testo scrito de to pugno, o copià da na fonte de pubblico dominio o similarmente libera (vedi $1 par i dettagli).
+<strong>NON INSERIRE OPERE PROTETTE DA COPYRIGHT SENZSA PERMESSO!</strong>',
+'longpagewarning'       => '<strong>ATENZSION: Sta paxèna xè longa $1 kilobyte; alcuni browser podaria prexentar dei problemi ne ła modifega de paxèna che se aviçina o supera i 32 KB. Valuta l\'opportunità de sudividere ła paxèna in sezsion pì piccołe.</strong>',
+'longpageerror'         => '<strong>ERROR: The text you have submitted is $1 kilobytes 
+long, which is longer than the maximum of $2 kilobytes. It cannot be saved.</strong>',
+'protectedpagewarning'  => '<strong>ATENZSION:  Sta paxèna xè sta protetta e soło i aministradori i pode modificarla. Varda, par essere sicuro ła [[Project:Guida a le paxène protette|Guida a le paxène protette]].</strong>',
+'semiprotectedpagewarning'=> '\'\'\'Nota:\'\'\' Sta paxèna xè stà blocà in modo che solo i utenti registrai i poda modefegarla.',
+'revhistory'            => 'Cronołogia de łe verzsion de sta paxèna.',
+'nohistory'             => 'Cronołogia de łe verzsion de sta paxèna non xè reperibiłe.',
+'revnotfound'           => 'Verzsion non trovà',
+'revnotfoundtext'       => 'La verzsion richiesta de ła paxèna non xè stà trovà.
+Verifica ła URL usà par açedere a sta paxèna.',
+'loadhist'              => 'Caricamento cronologia de sta paxèna',
+'currentrev'            => 'Verzsion atuałe',
+'revisionasof'          => 'Revixion $1',
+'previousrevision'      => '← Verzsion manco reçente',
+'nextrevision'          => 'Verzsion pì reçente →',
+'currentrevisionlink'   => 'Varda ła verzsion atuałe',
+'histlegend'            => 'Legenda: (corr) = differenzse con la versión corrente,
+(prec) = differenzse con la versión precedente, m = modifica minore',
+'deletedrev'            => '[scancełà]',
+'rev-delundel'          => 'mostra/scondi',
+'history-feed-title'    => 'Cronołogia',
+'history-feed-description'=> 'Cronołogia de ła paxèna su sto sito',
+'history-feed-empty'    => 'La paxèna richiesta non esiste; podaria essere stà scancełà dal sito o rinominà. Verifica con la [[Special:Search|paxèna de ricerca]] se ghe xè nove paxène.',
+'revisiondelete'        => 'Scanceła o ripristina verzsion',
+'revdelete-selected'    => 'Verzsion selezsionae de [[:$1]]:',
+'revdelete-hide-text'   => 'Scondi el testo de ła verzsion',
+'revdelete-hide-comment'=> 'Scondi l\'oggetto de ła modifega',
+'revdelete-hide-user'   => 'Scondi el nome o l\'indirizso IP dell\'autore',
+'revdelete-submit'      => 'Applica a ła revixion selezsionà',
+'difference'            => '(Diferenzse fra łe verzsion)',
+'loadingrev'            => 'caricamento revixion par differenzse',
+'editcurrent'           => 'Modifica la verzsion corente de stà paxèna',
+'selectnewerversionfordiff'=> 'Selezsiona na verzsion pì reçente par el confronto',
+'selectolderversionfordiff'=> 'Selezsiona na verzsion manco reçente par el confronto',
+'compareselectedversions'=> 'Confronta łe verzsión selezsionà',
+'searchresults'         => 'Risultato della ricerca',
+'searchresulttext'      => 'Per maggiori informazioni sulla ricerca interna di {{SITENAME}}, vedi [[Project:Ricerca|Ricerca in {{SITENAME}}]].',
+'badquery'              => 'Richiesta non xè posta bén',
+'badquerytext'          => 'La to richiesta non ła pode esser processà. Questo podria dipendare da l\'aver zsercà na paroła in manco de tre carateri. Oppure te podarezsi aver scritto małe ła richiesta, par esempio "pesce and and azzurro". Per favore, riproa.',
+'matchtotals'           => 'La ricerca per l\'esprezsion "$1" gà trovà<br />$2 riscontri nei titołi de le voci e<br />$3 riscontri ne i testi de le voci.',
+'noexactmatch'          => '\'\'\'La paxèna "$1" non ła esiste.\'\'\' Xè possibiłe [[:$1|crearla ora]].',
+'titlematches'          => 'Nei titołi de łe voçi',
+'notitlematches'        => 'Voce richiesta non trovata in titoli di articolo',
+'textmatches'           => 'Nel testo degli articoli',
+'notextmatches'         => 'Voce richiesta non trovata in testi di articolo',
+'viewprevnext'          => 'Varda ($1) ($2) ($3).',
+'showingresults'        => 'Qui de seguito \'\'\'$1\'\'\' risultati, partendo dal numero #\'\'\'$2\'\'\'.',
+'showingresultsnum'     => 'Qui de seguito \'\'\'$3\'\'\' risultati, partendo dal numero #\'\'\'$2\'\'\'.',
+'nonefound'             => '<strong>Nota</strong>: la ricerca di parole troppo comuni, come "avere" o "essere", che non sono indicizzate, può causare un esito negativo, così come indicare più di un termine da ricercare (solo le pagine che contengano tutti i termini ricercati verrebbero infatti visualizzate fra i risultati).',
+'powersearch'           => 'Zserca',
+'powersearchtext'       => '
+Cerca fra i campi :<br />
+$1<br />
+$2 Elenca i redirects &nbsp; cerca per $3 $9',
+'blanknamespace'        => '(Prinzsipałe)',
+'preferences'           => 'Preferenzse',
+'prefsnologin'          => 'Non te ghè eseguio el login',
+'prefsnologintext'      => 'Te ghè da aver eseguio el [[Special:Userlogin|login]]
+par poder personalixare le to preferenzse.',
+'prefsreset'            => 'Le to Preferenzse xè stà ripescae da la memoria de sistema del potente server de {{SITENAME}}.',
+'qbsettings'            => 'Settaggio barra menu',
+'qbsettings-none'	=> 'Nessun',
+'qbsettings-fixedleft'	=> 'Fisso a sinistra',
+'qbsettings-fixedright'	=> 'Fisso a destra',
+'qbsettings-floatingleft'	=> 'Fluttuante a sinistra',
+'qbsettings-floatingright'	=> 'Fluttuante a destra',
+'changepassword'        => 'Cambia ła password',
+'skin'                  => 'Aspetto',
+'math'                  => 'Formułe matematiche',
+'dateformat'            => 'Formato de la data',
+'datedefault'           => 'Nesuna preferenzsa',
+'math_failure'          => 'Failed to parse',
+'math_unknown_error'    => 'unknown error',
+'math_unknown_function' => 'unknown function',
+'math_lexing_error'     => 'lexing error',
+'math_syntax_error'     => 'syntax error',
+'math_image_error'      => 'Converzsion in PNG fałía',
+'math_bad_tmpdir'       => 'Can\'t write to or create math temp directory',
+'math_bad_output'       => 'Can\'t write to or create math output directory',
+'math_notexvc'          => 'Missing texvc executable; please see math/README to configure.',
+'prefs-personal'        => 'Profiło utente',
+'prefs-rc'              => 'Ultime modifeghe',
+'prefs-misc'            => 'Preferenzse varie',
+'saveprefs'             => 'Salva preferenze',
+'resetprefs'            => 'Resetta preferenzse',
+'oldpassword'           => 'Vecia password:',
+'newpassword'           => 'Nova password',
+'retypenew'             => 'Riscrivi la nuova password',
+'textboxsize'           => 'Dimensione della casella di edizione',
+'rows'                  => 'Righe',
+'columns'               => 'Cołone:',
+'searchresultshead'     => 'Settaggio preferenze di ricerca',
+'resultsperpage'        => 'Numero de risultati par paxèna:',
+'contextlines'          => 'Righe de testo par ciascun risultato',
+'contextchars'          => 'Caratteri par linea:',
+'stubthreshold'         => 'Stub visualizzati',
+'recentchangescount'    => 'Numero titołi in "modifeghe reçenti"',
+'savedprefs'            => 'Le to preferenzse łe xè stà salvae.',
+'timezonetext'          => 'Immetti il numero di ore di differenza fra la tua ora locale e la ora del server (UTC).',
+'localtime'             => 'Ora Locale',
+'guesstimezone'         => 'Usa l\'ora del to browser',
+'allowemail'            => 'Consenti la ricezsion de e-mail da altri utenti (1)',
+'defaultns'             => 'Szerca in sti namespace se non diversamente specificà:',
+'default'               => 'default',
+'files'                 => 'Imagini',
+'userrights-lookup-user'=> 'Gestion de i gruppi utente',
+'userrights-user-editname'=> 'Inserire el nome utente:',
+'userrights-groupshelp' => 'Selezsionar i gruppi ai quałi se vołe assoçiare o rimovere l\'utente. L\'appartenenzsa ai gruppi non selezsionai non verrà modifegà. Par desełezsionare un gruppo, premere Ctrl + el tasto sinistro del mouse.',
+'group-sysop'           => 'Aministradori',
+'group-sysop-member'    => 'Aministrador',
+'changes'               => 'cambiamenti',
+'recentchanges'         => 'Ultime modifeghe',
+'recentchangestext'     => 'Sta paxèna presenta łe ultime modifeghe aportae ai contenuti de el sito.',
+'rcnote'                => 'De seguito xè ełencae łe <strong>$1</strong> modifiche pì reçenti aportae ne i ultimi <strong>$2</strong> jorni, agiornae a $3.',
+'rcnotefrom'            => ' Qui di seguito sono elencate le modifiche da <b>$2</b> (fino a <b>$1</b>).',
+'rclistfrom'            => 'Mostra łe modifeghe aportae a partire da $1',
+'rcshowhideminor'       => '$1 le modifeghe minori',
+'rcshowhideliu'         => '$1 gli utenti registrai',
+'rcshowhidepatr'        => '$1 łe modifeghe controłae',
+'rcshowhidemine'        => '$1 łe me modifeghe',
+'rclinks'               => 'Mostra le ultime $1 modifiche nei ultimi $2 giorni<br />$3',
+'hide'                  => 'scondi',
+'show'                  => 'Mostra',
+'reupload'              => 'Ri-upload',
+'reuploaddesc'          => 'Torna al modulo per lo upload.',
+'uploadnologin'         => 'Te devi fare el login par exeguire sta operazsion.',
+'uploadnologintext'     => 'Te ghè da exeguire [[Special:Userlogin|el login]]
+par fare el upload de files.',
+'uploaderror'           => 'Errore di Upload',
+'uploadtext'            => 'Usa el moduło sotostante par caricare i novi file. Par vixualixare o riçercare i file xà caricai, consulta el [[Special:Imagelist|log de i file caricai]]. Caricamenti e scancełazsioni de file i xè registrai ne el [[Special:Log/upload|log de i upload]].
+
+Par inserire un\'imagine in na paxèna, fare un cołegamento de sto tipo:
+\'\'\'<nowiki>[[</nowiki>{{ns:Image}}<nowiki>:file.jpg]]</nowiki>\'\'\' o
+\'\'\'<nowiki>[[</nowiki>{{ns:Image}}<nowiki>:file.png|testo alternativo]]</nowiki>\'\'\'; usare inveçe
+\'\'\'<nowiki>[[</nowiki>{{ns:Media}}<nowiki>:file.ogg]]</nowiki>\'\'\' par cołegare diretamente gli altri tipi de file.',
+'uploadlog'             => 'File caricai',
+'uploadlogpage'         => 'Log dei file caricai',
+'uploadlogpagetext'     => 'Qui di seguito la lista degli ultimi files caricati sul server di {{SITENAME}}.
+Tutti i tempi indicati sono calcolati sul fuso orario del server (UTC).
+<ul>
+</ul>',
+'filedesc'              => 'Oggetto',
+'fileuploadsummary'     => 'Sommario:',
+'filestatus'            => 'Stato del copyright',
+'filesource'            => 'Sorgente',
+'copyrightpagename'     => '{{SITENAME}} copyright',
+'uploadedfiles'         => 'Files Caricati in {{SITENAME}}',
+'ignorewarning'         => 'Ignore warning and save file anyway.',
+'ignorewarnings'        => 'Ignora i messaggi de avvertimento del sistema',
+'minlength'             => 'I nomi de i file imagine i deve essere longhi almancoo tre caratteri.',
+'illegalfilename'       => 'Il nomefile "$1" contiene caratteri che xè permessi nei titoli delle pagine. Per favore rinomina el file e prova a ricaricarlo.',
+'badfilename'           => 'El nome de el file imagine xè stà convertio in "$1".',
+'badfiletype'           => '".$1" non xè mia un tipo de file raccomandà par łe imagini, almanco par i nostri fini.',
+'largefile'             => 'Se raccomanda de non superar łe dimenzsion de $1 byte par ciascun file; sto file xè grande $2 byte.',
+'largefileserver'       => 'This file is bigger than the server is configured to allow.',
+'emptyfile'             => 'El file che te ghè caricà xè apparentemente vuoto. Podaria essere par un errore nel nome del file. Per favore controlla se te vol veramente caricar stò file.',
+'fileexists'            => 'Un file con sto nome el esiste xà, per favore controła $1 se non te sì sicuro de volerlo sovrascrivere.',
+'fileexists-forbidden'  => 'Un file con sto nome el esiste xà; per favore torna indrio e cambia el nome che te voi dare al file. [[Image:$1|thumb|center|$1]]',
+'fileexists-shared-forbidden'=> 'Un file con sto nome esiste xè ne l\'archivio de risorse multimediałi condivixe. Per favore torna indrio e cambia el nome che te voi dare al file. [[Image:$1|thumb|center|$1]]',
+'fileuploaded'          => 'El file "$1" xè stà correttamente caricà sul server.
+Segui el cołegamento: $2 par modificare ła paxèna de descrizsion del file appena caricà, indicando ła fonte, l\'autore, ła data de creazsion e ogni altra informazsion che te ghè. Se se trata de n\'imagine, ła se pode inserire ne łe paxène con el comando:<br /><nowiki>[[</nowiki>{{ns:Image}}:$1|thumb|Descrizsion<nowiki>]]</nowiki>',
+'uploadwarning'         => 'Avixo de Upload',
+'uploadedimage'         => 'gà caricà "[[$1]]"',
+'uploaddisabledtext'    => 'El caricamento dei file non xè attivo su sto sito.',
+'uploadscripted'        => 'Sto file contegne codexe HTML o de script, che podaria essere interpretà eroneamente da un browser web.',
+'uploadvirus'           => 'Sto file contegne un virus! Detagli: $1',
+'destfilename'          => 'Destination filename',
+'filewasdeleted'        => 'Un file con sto nome xè stato xà caricà e scancełà in passato. Verifica $1 prima de caricarlo de novo.',
+'license'               => 'Licensing',
+'nolicense'             => 'Nessuna liçenzsa indicà',
+'imagelist'             => 'Imagini',
+'imagelisttext'         => 'Qui de seguito na łista de $1 imagini, ordinae par $2.',
+'imagelistforuser'      => 'This shows only images uploaded by $1.',
+'getimagelist'          => 'rizserca ne la lista de le immagini',
+'ilsubmit'              => 'Zserca',
+'showlast'              => 'Lista di $1, fra le ultime immagini, ordinate per $2.',
+'bysize'                => 'peso',
+'imglegend'             => 'Legenda: (desc) = mostra/modifica descrizsion imagine.',
+'imghistory'            => 'Cronołogia de sta imagine',
+'imghistlegend'         => 'Legenda: (corr) = imagine corente, (canc) = scanceła sta verzsion vecia, (ripr) = ripristina sta  verzsion vecia come verzsion atuałe.
+<br />\'\'Clicca su una data par vardare l\'imagine corrispondente.\'\'',
+'imagelinks'            => 'Collegamenti a le immagini',
+'linkstoimage'          => 'Le paxène seguenti riciama sta imagine:',
+'nolinkstoimage'        => 'Nessuna paxèna linka sta imagine.',
+'noimage'               => 'Un file con sto nome non esiste; $1?',
+'noimage-linktext'      => 'carica ora',
+'uploadnewversion-linktext'=> 'Carica na nova verzsion de sto file',
+'mimesearch'            => 'MIME search',
+'mimetype'              => 'MIME type:',
+'unwatchedpages'        => 'Paxène non osservae',
+'listredirects'         => 'List redirects',
+'unusedtemplateswlh'    => 'altri cołegamenti',
+'sitestats'             => 'Statistiche del sito',
+'userstats'             => 'Statistiche dei utenti',
+'sitestatstext'         => 'El database contegne complessivamente \'\'\'{{FORMATNUM|$1}}\'\'\' paxène.
+Sta çifra comprende anca łe paxène de discussion, quełe de servizsio de {{SITENAME}}, łe voçi pì esigue ("stub"), i redirect e altre paxène che probabilmente non łe va considerae tra i contenuti de el sito. Escludendo łe paxène sora descritte, ghe ne xè \'\'\'{{FORMATNUM|$2}}\'\'\' de contenuti veri e propri.
+
+Xè stà inoltre caricà \'\'\'{{FORMATNUM|$8}}\'\'\' file.
+
+Dall\'instałazsione del sito sino a sto momento ghe xè stà visitae \'\'\'{{FORMATNUM|$3}}\'\'\' paxène ed eseguie \'\'\'{{FORMATNUM|$4}}\'\'\' modifeghe, pari a na media de \'\'\'{{FORMATNUM|$5}}\'\'\' modifeghe par paxèna e \'\'\'{{FORMATNUM|$6}}\'\'\' richieste de lettura par ciascuna modifica.
+
+La [http://meta.wikimedia.org/wiki/Help:Job_queue coda] contegne \'\'\'{{FORMATNUM|$7}}\'\'\' proçessi.',
+'userstatstext'         => 'In sto momento ghe xè \'\'\'$1\'\'\' utenti registrai, dei quałi \'\'\'$2\'\'\' (pari al \'\'\'$4%\'\'\') xè aministradori (varda $3).',
+'disambiguations'       => 'Paxène de disambiguazsion',
+'disambiguationspage'   => 'Template:Disambigua',
+'disambiguationstext'   => 'Le paxène ne ła lista che segue contegne dei cołegamenti a <i>paxène de disambigua</i> piuttosto che a l\'argomento coreto cui i fà riferimento.<br />Le xè considerae paxène de disambigua tute quełe che contegne cołegamenti al $1.<br />I cołegamenti da altri namespace <i>non</i> xè considerai ne ła lista che segue.',
+'doubleredirectstext'   => '<b>Atenzsion:</b> Stà lista la pode talvolta contegnere dei risultati non corretti. Podaria magari accadere perchè ghe fusse del testo aggiuntivo o dei link dopo el tag #REDIRECT.<br /> Ogni riga contegne i link al primo ed al secondo redirect, oltre a la prima riga de testo del secondo redirect che de solito contegne el "reale" articolo de destinazsion, quello al quale anca el primo redirect dovaria puntare.',
+'brokenredirects'       => 'Redirect erái',
+'brokenredirectstext'   => 'I seguenti redirect i punta a articoli non ancora creai.',
+'nbytes'                => '$1 bytes',
+'ncategories'           => '$1 categories',
+'lonelypages'           => 'Paxène solitarie',
+'uncategorizedpages'    => 'Paxène prive de categorie',
+'uncategorizedcategories'=> 'Categorie prive de categorie',
+'uncategorizedimages'   => 'Imagini prive de categorie',
+'unusedcategories'      => 'Categorie non utilixae',
+'unusedimages'          => 'Imagini non utilixae',
+'popularpages'          => 'Paxène pì viste',
+'wantedpages'           => 'Paxène pì richieste',
+'mostlinked'            => 'Paxène piassè linkae',
+'mostlinkedcategories'  => 'Categorie piazsé riciamae',
+'mostcategories'        => 'Arthicołi con piazsé categorie',
+'mostimages'            => 'Most linked to images',
+'mostrevisions'         => 'Voçi con piazsé revixión',
+'allpages'              => 'Tute łe paxène',
+'randompage'            => 'Paxèna a caso',
+'shortpages'            => 'Paxène corte',
+'longpages'             => 'Paxène longhe',
+'deadendpages'          => 'Paxène senzsa uscita',
+'listusers'             => 'Elenco dei utenti',
+'specialpages'          => 'Paxène speciałi',
+'spheading'             => 'Paxène speciałi par tuti i utenti',
+'restrictedpheading'    => 'Paxène speciałi par i aministradori',
+'recentchangeslinked'   => 'Modifeghe corełae',
+'rclsub'                => '(a łe paxène linkae da "$1")',
+'newpages'              => 'Paxène nove',
+'ancientpages'          => 'Paxène pì vece',
+'intl'                  => 'Link a altri linguaggi',
+'unusedimagestext'      => '<p>Nota che altri siti web, come la {{SITENAME}} internazionale, potrebbero aver messo un link ad una immagine per mezzo di una URL diretta, perciò le immagini potrebbero essere listate qui, essendo inutilizzate in questa versione di {{SITENAME}}, anche essendo magari in uso altrove.',
+'unusedcategoriestext'  => 'Le paxène de łe categorie indicae de seguito łe xè stà creae ma non contegne nessuna paxèna né sotocategoria.',
+'categoriespagetext'    => 'In {{SITENAME}} ghèmo ste categorie',
+'data'                  => 'Data',
+'version'               => 'Verzsion',
+'log'                   => 'Logs',
+'alllogstext'           => 'Vixualixazsion unificà de i log de upload, scancełazsión, protezsión, blocking e de aministrazsión. Te podi restringere i criteri de rizserca selezsionando el tipo de log, username, o la paxèna interessà.',
+'logempty'              => 'No matching items in log.',
+'nextpage'              => 'Paxèna dopo ($1)',
+'allpagesfrom'          => 'Mostra łe paxène cominzsiando da:',
+'allarticles'           => 'Tuti le voçi',
+'allinnamespace'        => 'Tute łe paxène ($1 namespace)',
+'allnotinnamespace'     => 'Tute łe paxène (no ne el namespace $1)',
+'allpagesprev'          => 'Preçedenti',
+'allpagesnext'          => 'Prozsime',
+'allpagessubmit'        => 'Và',
+'allpagesprefix'        => 'Mostra łe voçi che inizsia con:',
+'mailnologin'           => 'No send address',
+'mailnologintext'       => 'Par inviare messaj e-mail ad altri utenti xè neçessario [[Special:Userlogin|açedere al sito]] e aver registrà un indirizso vałido ne łe proprie [[Special:Preferences|preferenzse]].',
+'emailpage'             => 'Scrivi una e-mail all\'utente',
+'emailpagetext'         => 'Se sto Utente gà registrà na casella e-mail valida, el modulo qui sotto te consentirà di scriverghe un solo messaggio. La e-mail che te ghè indicà ne le to preferenzse la apparirà nel campo "Da" de la mail, così che el destinatario possa, solo se el lo desidera però, risponderte.',
+'defemailsubject'       => '{{SITENAME}} e-mail',
+'noemailtitle'          => 'Nessun indirizso e-mail',
+'noemailtext'           => 'Questo Utente non ha registrato alcuna casella e-mail, oppure ha scelto di non ricevere posta elettronica dagli altri Utenti.',
+'emailmessage'          => 'Messajo',
+'emailsent'             => 'E-mail invià',
+'emailsenttext'         => 'La to e-mail xè stà invià',
+'watchlist'             => 'osservati speciali',
+'mywatchlist'             => 'osservati speciali',
+'watchlistfor'          => '(par \'\'\'$1\'\'\')',
+'nowatchlist'           => 'Non hai indicato articoli da tenere d\'occhio.',
+'watchlistanontext'     => 'Per vixualixare e modifegar l\'ełenco de i osservati speciałi xè necessario $1.',
+'watchlistcount'        => '\'\'\'La lista de i osservati speciałi contegne {{FORMATNUM|$1}} elementi (comprexe łe paxène de discussion).\'\'\'',
+'clearwatchlist'        => 'Svoda ła lista de i osservati speciałi',
+'watchlistcleartext'    => 'Conferma ła rimozsion de tuti gli elementi.',
+'watchlistclearbutton'  => 'Svoda ła łista',
+'watchlistcleardone'    => 'La łista de i osservati speciałi xè stà svodada. I xè stà eliminai $1 ełementi.',
+'watchnologin'          => 'No ghe xe el login',
+'watchnologintext'      => 'Devi prima fare il [[Special:Userlogin|login]]
+per modificare la tua lista di osservati speciali.',
+'addedwatch'            => 'Xontà ai tòi Osservati Speciali',
+'addedwatchtext'        => 'La paxèna  "$1" l\'è stà xontà a la tua [[Special:Watchlist|lista de osservati speciali]].
+Le future modifiche a stà pagina e a la relativa pagina de discussion le sarà elencae qui, e la paxèna apparirà in \'\'\'grasseto\'\'\' ne la paxèna de le [[Special:Recentchanges|modifiche recenti]] par essere pì facile da tener d\'ocio.
+
+Se pì avanti te vorè tojere stò articolo da la to lista de Osservati Speciali, clicca "Non seguire" nella barra dei menu.',
+'removedwatch'          => 'Rimosso dalla lista degli Osservati Speciali',
+'removedwatchtext'      => 'La paxèna  "$1" xè stà rimossa da ła łista de i toi Osservati Speciałi.',
+'watchthispage'         => 'Segui sta voçe',
+'notanarticle'          => 'Non xè na voçe',
+'watchnochange'         => 'Nezsun de i to ojeti osservai l\'è stà edità nel periodo mostrà.',
+'watchdetails'          => '* $1 ojeti osservai no i contegne discussioni
+* [[Special:Watchlist/edit|Mostra e modifica tuti i osservati speciałi]]',
+'wlheader-enotif'       => '* Xe attivà la notifica via e-mail.',
+'wlheader-showupdated'  => '* Le paxène che xe stà modificà da la to ultima visita le xe evidensià en \'\'\'grasseto\'\'\'',
+'watchmethod-recent'    => 'controło de łe modifeghe reçenti par i osservati speciałi',
+'watchmethod-list'      => 'controło de i osservati speciałi par modifeghe reçenti',
+'watchlistcontains'     => 'La lista de i osservati speciałi contiene $1 paxène.',
+'watcheditlist'         => 'De seguito łe xè ełencae tute łe paxène osservae, in ordine alfabetico. Selezsionare łe casełe rełative a łe paxène che se desidera eliminar da ła lista e fare clic sul boton \'Ełimina ełementi sełezsionà da ła łista\' in fondo a l\'ełenco par rimoverle. Quando vegne eliminà na paxèna da ła łista, anca ła corrispondente paxèna de discussion cessa de essere osservà (e viceversa).',
+'couldntremove'         => 'Non xè possibile rimuovere la paxèna \'$1\'...',
+'iteminvalidname'       => 'Problemi con la voçe \'$1\', nome non vałido...',
+'wlnote'                => 'Sotto te trovi le ultime $1 modifiche, nelle ultime <b>$2</b> ore.',
+'wlsaved'               => 'Questa l\'è na version salvà de la to lista de articoli sotto osservasión.',
+'wlhideshowown'         => '$1 le me modifeghe.',
+'wlhideshowbots'        => '$1 modifighe del bot.',
+'enotif_reset'          => 'Segna tute łe paxène visitae',
+'enotif_newpagetext'    => 'Sta quà xe na nova paxèna.',
+'changed'               => 'cambià',
+'created'               => 'Creà',
+'enotif_subject'        => '{{SITENAME}} page $PAGETITLE has been $CHANGEDORCREATED by $PAGEEDITOR',
+'enotif_lastvisited'    => 'Varda $1 par tutte le modifiche da la to ultima visita.',
+'enotif_body'           => 'Caro $WATCHINGUSERNAME,
+
+ła paxèna $PAGETITLE de {{SITENAME}} xè stà $CHANGEDORCREATED el $PAGEEDITDATE da $PAGEEDITOR, varda $PAGETITLE_URL par ła verzsione atuałe.
+
+$NEWPAGE
+
+Sommario del redattore: $PAGESUMMARY $PAGEMINOREDIT
+
+Contatta el redattore:
+mail: $PAGEEDITOR_EMAIL
+wiki: $PAGEEDITOR_WIKI
+
+Non ghe sarà altre notifiche in caso de ulteriori cambiamenti, a manco che ti non te visiti sta paxèna. Te podi anca rexettar l\'avvixo de notifica par tuti gli osservati speciałi de ła to łista.
+
+             El to amichevole sistema de notifica de {{SITENAME}}
+
+--
+Par cambiare łe impostazsion de i to osservati speciałi, visita
+{{fullurl:Special:Watchlist/edit}}
+
+Par riscontri e ulteriore assistenzsa:
+{{fullurl:Help:Ciacołe}}',
+'deletepage'            => 'Scanceła paxèna',
+'excontent'             => 'el contenuto xera: \'$1\'',
+'exbeforeblank'         => 'El contenuto prima de lo svodamento xera: \'$1\'',
+'exblank'               => 'ła paxèna l\'era voda',
+'confirmdelete'         => 'Conferma scancełazsión',
+'deletesub'             => '(Scancełazsion de "$1")',
+'historywarning'        => 'Atenzsion: La paxèna che te stè par scancełar gà na cronołogia:',
+'confirmdeletetext'     => 'Te stè par scancełar permanentemente da el database na paxèna o na imagine, insieme a tuta la so cronołogia.
+Par cortesia, conferma che l\'è to intenzsion proçedere a tałe scancełazsion, conferma che te ghè piena consapevołezsa de łe conseguenzse de la to azsion, e conferma che la to azsion l\'è pienamente ottemperante a łe regołe stabilíe ne ła
+[[Project:Policy]].',
+'actioncomplete'        => 'Azsión completà',
+'deletedtext'           => 'La paxèna "$1" l\'è stà scancełà. Varda $2 par un ełenco de łe paxène scancełae de reçente.',
+'deletedarticle'        => 'Scancełà "$1"',
+'dellogpage'            => 'Scancełazsión',
+'dellogpagetext'        => 'Qui de seguito, un ełenco de łe paxène scancełae de reçente.',
+'deletionlog'           => 'Log de scancełasión',
+'reverted'              => 'Ripristinata versione precedente',
+'deletecomment'         => 'Motivazsion de ła scancełazsion',
+'imagereverted'         => 'Version precedente correttamente ripristinata.',
+'rollback'              => 'Usa una revisione precedente',
+'rollbackfailed'        => 'Rollback non riuzsio',
+'cantrollback'          => 'No xè mia possibiłe tornar a na verzsión precedente: l\'ultima modifica xè stà apportà da l\'unico utente che gà laorà a stò arthicoło.',
+'alreadyrolled'         => 'Non xè mia possibile effettuare el rollback de [[:$1]] da [[User:$2|$2]] ([[User talk:$2|discussion]]); qualcun altro gà xà modificà o effetuà el rollback de sta voçe. L\'ultima modefega l\'è stà fata da [[User:$3|$3]] ([[User talk:$3|discussion]]).',
+'editcomment'           => 'El commento a la modifica xera: "<i>$1</i>".',
+'revertpage'            => 'Anułate łe modifeghe de [[Special:Contributions/$2|$2]] ([[User talk:$2|discussion]]), riportà a ła verzsion preçedente de [[User:$1|$1]]',
+'protectlogpage'        => 'Log de protezsión',
+'protectedarticle'      => 'proteto "[[$1]]"',
+'unprotectedarticle'    => 'unprotected "[[$1]]"',
+'protectsub'            => '(Protezsion de "$1")',
+'confirmprotecttext'    => 'Sito sicuro de voler protezxere stà paxèna?',
+'confirmprotect'        => 'Conferma la protezsion',
+'protectmoveonly'       => 'Protegi soło dallo spostamento',
+'protectcomment'        => 'Motivo de ła protezsion',
+'unprotectsub'          => '(Sbloco de "$1")',
+'confirmunprotecttext'  => 'Sito sicuro de voler sproteggere sta paxèna?',
+'confirmunprotect'      => 'Conferma sprotezsion',
+'protect-unchain'       => 'Scołega i permessi de spostamento',
+'protect-level-autoconfirmed'=> 'Solo utenti registrai',
+'protect-level-sysop'   => 'Solo aministradori',
+'restriction-edit'      => 'Modifega',
+'undelete'              => 'Recupera na paxèna scancełà',
+'undeletepage'          => 'Varda e recupera paxène scancełae',
+'viewdeletedpage'       => 'Varda łe paxène scancełae',
+'undeletepagetext'      => 'Le pagine qui di seguito indicate sono state cancellate, ma sono ancora in archivio e pertanto possono essere recuperate. L\'archivio viene svuotato periodicamente.',
+'undeleteextrahelp'     => 'Par recuperare l\'intera paxèna, lazsia tute łe casełe desełezsionae e fa clic su \'\'\'\'\'Ripristina\'\'\'\'\'. Par effettuare un ripristino sełetivo, selezsiona łe casełe corrispondenti a łe revixion da ripristinare e fa clic su \'\'\'\'\'Ripristina\'\'\'\'\'. Faxendo clic su \'\'\'\'\'Reset\'\'\'\'\' łe verà deselezsionae tute łe casełe e svodà lo spazsio par el commento.',
+'undeletearticle'       => 'Recupera na voçe scancełà',
+'undeletehistory'       => 'Recuperando sta paxèna, tute łe so revixion verà inserie de novo ne ła rełativa cronołogia. Se dopo ła scancełazsion xè stà creà na nova paxèna con lo stesso titoło, łe revixion recuperae sarà inserie ne ła cronołogia e ła verzsion attualmente online de ła paxèna non verrà modifegà.',
+'undeletehistorynoadmin'=> 'La paxèna xè stà scanceła. El motivo de ła scancełazsion xè indicà de seguito, assieme ai dati de i utenti che i gavea modifegà ła paxèna prima de ła scancełazsion. El testo contegnù ne łe revixion scancełae xè disponibiłe solo a i aministradori.',
+'undeleterevision'      => 'Scancełà revixion $1',
+'undeletebtn'           => 'RIPRISTINA!',
+'undeletedarticle'      => 'Recuperà "$1"',
+'undeletedrevisions'    => '$1 revixion recuperae',
+'undeletedrevisions-files'=> '$1 revixion e $2 file recuperai',
+'undeletedfiles'        => '$1 file recuperai',
+'cannotundelete'        => 'El recupero no\'l xè riusìo: qualcun altro podariae avere xà recuperà ła paxèna.',
+'undeletedpage'         => '<big>\'\'\'$1 xè stà recuperà\'\'\'</big>
+
+Consultare el [[Special:Log/delete|log delle scancełazsioni]] par vardare łe scancełazsion e i recuperi pì reçenti.',
+'invert'                => 'inverti ła selezsión',
+'mycontris'             => 'i me contributi',
+'nocontribs'            => 'Nessuna modifica trovata conformemente a questi criteri.',
+'ucnote'                => 'Qui sotto troverai le ultime <b>$1</b> modifiche effettuate da questo Utente negli ultimi <b>$2</b> giorni.',
+'uclinks'               => 'Vedi le ultime $1 modifiche; vedi gli ultimi $2 giorni.',
+'uctop'                 => ' (ultima par ła paxèna)',
+'newbies'               => 'newbies',
+'sp-newimages-showfrom' => 'Mostra łe imagini pì reçenti a partire da $1',
+'sp-contributions-older'=> '$1 manco reçenti',
+'whatlinkshere'         => 'Paxène che le punta qua',
+'notargettext'          => 'Non hai specificato una pagina o un Utente in relazione al quale eseguire l\'operazione richiesta.',
+'linklistsub'           => '(Lista di link)',
+'linkshere'             => 'Le seguenti paxène le contegne link che punta qua:',
+'nolinkshere'           => 'Nessuna paxèna contegne links che punta a sta quà.',
+'istemplate'            => 'inclusion',
+'blockip'               => 'Blocca indirizso IP',
+'blockiptext'           => 'Usare el moduło sottostante par bloccare l\'accesso in scrittura ad uno speçifico utente o indirizso IP. El bloco dev\'essere operà par prevegnere ati de vandalismo e in stretta osservanzsa de ła [[Project:Policy|policy de {{SITENAME}}]]. Speçificare in dettałio el motivo de el bloco nel campo seguente (ad es. indicando i titołi de łe paxène oggeto de vandalismo).',
+'ipaddress'             => 'Indiriszo IP (IP Address)',
+'ipadressorusername'    => 'Indiriszo IP o nome utente',
+'ipbexpiry'             => 'Scadenzsa',
+'ipbreason'             => 'Motivazsión',
+'ipbsubmit'             => 'Blocca sto indirizso IP',
+'ipbother'              => 'Other time',
+'ipboptions'            => '2 hours:2 hours,1 day:1 day,3 days:3 days,1 week:1 week,2 weeks:2 weeks,1 month:1 month,3 months:3 months,6 months:6 months,1 year:1 year,infinite:infinite',
+'ipbotheroption'        => 'other',
+'badipaddress'          => 'L\'indirizso IP indicà non xè coreto.',
+'blockipsuccesssub'     => 'Blocco eseguio',
+'blockipsuccesstext'    => 'L\'indirizzo IP "$1" l\'è sta bloccà.
+<br />Varda [[Special:Ipblocklist|lista IP bloccati]].',
+'unblockip'             => ' Sblocca indirizzo IP',
+'unblockiptext'         => 'Usa il modulo sottostante per restituire il diritto di scrittura ad un indirizzo IP precedentemente bloccato.',
+'ipusubmit'             => 'Sblocca sto indirizso IP',
+'ipblocklist'           => 'Indiriszi IP bloccai',
+'blocklistline'         => '$1, $2 gà bloccà $3 fino al $4',
+'infiniteblock'         => 'infinito',
+'ipblocklistempty'      => 'La lista de i indiriszi IP bloccai xè voda',
+'autoblocker'           => 'Bloccà automaticamente parché l\'indirisso IP xè condiviso con "$1". Motivo "$2".',
+'blocklogpage'          => 'Block_log',
+'blocklogentry'         => 'bloccà "$1" par un periodo di $2',
+'blocklogtext'          => 'Sto qua xè un elenco de azsioni de blocco e sblocco degli indirizzi IP. Gli indirizzi bloccai in automatico non xè elencai. Vrda [[Special:Ipblocklist|elenco IP bloccati]] per l\'elenco degli indirizzi il cui blocco xè operativo.',
+'ipb_expiry_invalid'    => 'Tempo de scadenzsa non valido. Controlla el [http://www.gnu.org/software/tar/manual/html_chapter/tar_7.html manuale de tar] par la sintassi esatta.',
+'ip_range_invalid'      => 'Intervało IP non vałido.',
+'proxyblocksuccess'     => 'Fatto.',
+'lockdb'                => 'Blocca el database',
+'unlockdb'              => 'Sbloca el database',
+'lockdbtext'            => 'Bloccare il database sospenderà la possibilità per tutti gli Utenti di modificare le pagine o di crearne di nuove, di cambiare le loro preferenze, di modificare le loro liste di Osservati Speciali, ed in genere non consentirà a nessuno di eseguire operazioni che richiedano modifiche del database.<br /><br />
+Per cortesia, conferma che questo è effettivamente quanto tu intendi ora effettuare e, soprattutto, che il prima possibile sbloccherai nuovamente il database, ripristinandone la corretta funzionalità, non appena avrai terminato le tue manutenzioni.',
+'unlockdbtext'          => 'Sbloccare il database ripristinerà la possibilità per tutti gli Utenti di modificare le pagine o di crearne di nuove, di cambiare le loro preferenze, di modificare le loro liste di Osservati Speciali, ed in genere di eseguire operazioni che richiedano modifiche del database.
+Per cortesia, conferma che questo è effettivamente quanto tu intendi ora effettuare.',
+'lockconfirm'           => 'Sì, effettivamente intendo, sotto la mia responsabilità, bloccare il database.',
+'unlockconfirm'         => ' Sì, effettivamente intendo, sotto la mia responsabilità, sbloccare il database.',
+'lockbtn'               => 'Blocca el database',
+'unlockbtn'             => 'Sbloca el database',
+'locknoconfirm'         => 'Non hai spuntato la casellina di conferma.',
+'lockdbsuccesssub'      => 'Blocco de el database eseguio',
+'unlockdbsuccesssub'    => 'Sblocco del database eseguito, rimosso blocco',
+'lockdbsuccesstext'     => 'Il database di {{SITENAME}} è stato bloccato.
+<br />Ricordati di rimuovere il blocco non appena avrai terminatoi le tue manutenzioni.',
+'unlockdbsuccesstext'   => ' Il database di {{SITENAME}} è stato sbloccato.',
+'movepage'              => 'Spostamento de paxèna',
+'movepagetext'          => 'Con el modulo sottostante te podi rinominar na paxèna, spostando anca tuta la so cronołogia al novo nome. El vecio titoło diverrà automaticamente un redirect che punta al novo titoło. I link a la vecia paxèna non sarà agiornai (e i punterà quindi al redirect); azsertai de [[Special:Manutenzsion|controłare con cura]] che non se crea doppi redirects o redirects interroti. Resta ne la to responsabilità de accertarte che i link i continua a puntare verso dove i deve dirigerse. Nota ben: la paxèna \'\'\'non\'\'\' sarà spostà se ve fusse xà una voçe con el novo nome, a meno che non sia na paxèna voda o un redirect, e sempre che non abbia cronologia. Questo significa che, se te commetti un error, te podi novamente rinominar na paxèna col vecio titoło, ma non te podi sovrascriver na paxèna xà esistente. <b>ATTENZSION!</b> Sto cambiamento drastico podaria crear inattesi contrattempi, specialmente se se tratta de na paxèna molto visità. Accertai de aver ben valutà le conseguenzse de lo spostamento, prima de procedere. Nel dubbio, contatta un Aministrador.',
+'movepagetalktext'      => 'La corrispondente paxèna de discussion sarà spostà automaticamente insieme a ła paxèna prinçipałe, \'\'\'tranne che nei seguenti casi:\'\'\'
+* Lo spostamento de ła paxèna xè tra namespace diversi
+* In corrispondenzsa del novo titoło esiste xà na paxèna de discussion (non voda)
+* La caseła chi soto xè stà desełezsionà.',
+'movearticle'           => 'Rinomina voçe',
+'movenologin'           => 'Non te ghè efetuà el login',
+'movenologintext'       => 'Te ghè da esser un Utente registrà ed aver effettuà el [[Special:Userlogin|login]] par poder spostare na paxèna.',
+'newtitle'              => 'Al novo titoło de',
+'movepagebtn'           => 'Sposta sta paxèna',
+'pagemovedtext'         => 'Paxèna "[[$1]]" rinominà in "[[$2]]".',
+'articleexists'         => 'Na paxèna con sto nome la existe xà, oppure el nome che te ghè zselto non xè vałido.<br /> Zsegli, per cortexia, un titoło diverso par ła voçe.',
+'talkexists'            => 'La pagina è stata spostata correttamente, ma non si è potuto spostare la pagina di discussione perché ne esiste già un\'altra con il nuovo titolo. Per favore, modifica manualmente i contenuti delle due pagine discussione, così da mantenerle entrambe per non perdere potenzialmente interessanti riflessioni.',
+'movedto'               => 'spostà a',
+'movetalk'              => 'Sposta anche la corrispondente pagina "discussione", se possibile.',
+'talkpagemoved'         => 'Anca ła corrispondente paxèna de discussion xè stà spostatà.',
+'talkpagenotmoved'      => 'La corrispondente paxèna de discussion <strong>non xè stà spostà</strong>.',
+'1movedto2'             => '[[$1]] spostà a [[$2]]',
+'1movedto2_redir'       => '$1 spostà a $2 co\'n redirect',
+'movelogpage'           => 'Move log',
+'movelogpagetext'       => 'Lista de paxène spostae.',
+'movereason'            => 'Reason',
+'delete_and_move'       => 'Scanceła e sposta',
+'delete_and_move_text'  => '==Scancełazsion richiesta==
+
+La voçe specificà come destinazsion "[[$1]]" l\'esiste già. Vóto scancełarlo par proseguire con ło spostamento?',
+'delete_and_move_confirm'=> 'Si! Scancèła ła paxèna',
+'delete_and_move_reason'=> 'Scancełà par rendere possibile lo spostamento',
+'selfmove'              => 'El novo titoło xè uguałe al vecio; impossibiłe spostare ła paxèna su se stessa.',
+'immobile_namespace'    => 'El titolo de destinazsion l\'è de tipo speciale; impossibile spostar paxène in quel namespace.',
+'export'                => 'Esporta paxène',
+'exporttext'            => 'Te podi esportar el testo e modificar ła cronołogia de na speçifica paxèna o de un gruppo de paxène raggruppae in XML; questo el pode in seguito essere importà in un altro wiki che utilixa el software MediaWiki, trasformà, o tegnù semplicemente par el to personałe divertimento.',
+'exportcuronly'         => 'Includi soło ła verzion attuałe, non l\'intera cronołogia',
+'exportnohistory'       => '----
+\'\'\'Ocio!\'\'\' par motivi de potenzsa xè stà disabiłità l\'esportazsion de tuta ła storia de łe paxène fata co \'sto modeło',
+'allmessages'           => 'Tuti i messaj de sistema',
+'allmessagesdefault'    => 'Testo de default',
+'allmessagescurrent'    => 'Testo come che el xe \'deso',
+'allmessagestext'       => 'Sta quà l\'è na lista de tutti i messaggi disponibili nel namespace MediaWiki:',
+'allmessagesnotsupportedUI'=> 'El linguaggio che te ghè scelto (\'\'\'$1\'\'\') non l\'è mia supportà da \'\'\'Special:Allmessages\'\'\' in sto sito.',
+'allmessagesnotsupportedDB'=> '\'\'\'Special:Allmessages\'\'\' no\'l xè supportà parché \'\'\'$wgUseDatabaseMessages\'\'\' no\'l xè ativo.',
+'allmessagesfilter'     => 'Filto su i messaj:',
+'allmessagesmodified'   => 'Mostra soło quełi modefegà.',
+'missingimage'          => '<b>Missing image</b><br /><i>$1</i>',
+'import'                => 'Importa paxène',
+'importinterwiki'       => 'Transwiki import',
+'import-interwiki-text' => 'Selezsionare un projeto wiki e el titoło de ła paxèna da importare.
+Le date de publicazsion e i nomi de i autori de łe varie verzsion i sarà conservai.
+Tute łe operazsion de importazsion trans-wiki łe xè registrae nel [[Special:Log/import|log de importazsion]].',
+'import-interwiki-history'=> 'Copia l\'intera cronołogia de sta paxèna',
+'importtext'            => 'Per favore, esporta el file da la wiki de origine usando l\'utility Special:Export, salvalo su el to disco e fa l\'upload qua.',
+'importstart'           => 'Importazsion de łe paxène in corso...',
+'import-revision-count' => '{{PLURAL:$1|una revixion importà|$1 revixion importae}}',
+'importnopages'         => 'Nessuna paxèna da importar.',
+'importfailed'          => 'Importazsion falía: $1',
+'importunknownsource'   => 'Tipo de origine sconozsuo par l\'importazsion',
+'importcantopen'        => 'Impozsibiłe verdere el file de importazsion',
+'importbadinterwiki'    => 'Cołegamento inter-wiki errà',
+'importnotext'          => 'Testo vodo o mancante',
+'importsuccess'         => 'Importazsion avvegnù con successo!',
+'importhistoryconflict' => 'Esiste revision de la cronołogia in conflitto (sta paxèna podaria essere xà sta importà)',
+'importnosources'       => 'Non xè stà definia na fonte par l\'importazsion transwiki; l\'importazsion direta de ła cronołogia non xè ativa.',
+'importnofile'          => 'Non xè stà caricà nessun file par l\'importazsion,',
+'importuploaderror'     => 'El caricamento de le imamgini xè falío, forse parché el file l\'è pì grosso del quel che xè permesso.',
+'importlogpage'         => 'Importazsion',
+'importlogpagetext'     => 'Registro de łe importazsion d\'uffiçio de paxène provenienti da altre wiki, complete de cronołogia.',
+'import-logentry-upload'=> 'gà importà [[$1]] tramite upload',
+'import-logentry-upload-detail'=> '{{PLURAL:$1|una revixion importà|$1 revixion importae}}',
+'import-logentry-interwiki'=> 'gà trasferio da altra wiki ła paxèna $1',
+'import-logentry-interwiki-detail'=> '{{PLURAL:$1|una revixion importà|$1 revixion importae}} da $2',
+'accesskey-diff'        => 'v',
+'tooltip-search'        => 'Zserca in {{SITENAME}}',
+'tooltip-minoredit'     => 'Segnała come modifega minore',
+'tooltip-save'          => 'Salva łe modifeghe',
+'tooltip-preview'       => 'Anteprima de łe modifeghe (consilià, prima de salvare!)',
+'tooltip-diff'          => 'Varda łe modifeghe apportae al testo.',
+'tooltip-compareselectedversions'=> 'Varda łe diferenzse tra łe do verzsion selezsionà de sta paxèna.',
+'notacceptable'         => 'El server wiki non xè in grado di fornire i dati in un formato łeggibiłe dal client utilixà.',
+'anonymous'             => 'Utente(/i) anonimo(/i) de {{SITENAME}}',
+'lastmodifiedatby'        => 'Sta paxèna xè stà modificà l\'ultima volta el $2, $1 da $3.',
+'creditspage'           => 'Crediti de ła paxèna',
+'subcategorycount'      => 'Sta categoria contegne {{PLURAL:$1|na sotocategoria| {{FORMATNUM|$1}} sotocategorie}}.',
+'categoryarticlecount'  => 'Ghè $1 voçi in sta categoria.',
+'listingcontinuesabbrev'=> '&nbsp;',
+'spam_blanking'         => 'Paxèna svodà, tute łe verzsion contegneva cołegamenti a $1',
+'infosubtitle'          => 'Informazsion par la paxèna',
+'numtalkedits'          => 'Numero de modifeghe (paxèna de discussion): $1',
+'numtalkauthors'        => 'Numero de autori distinti (paxèna de discussion): $1',
+'mw_math_png'           => 'Always render PNG',
+'mw_math_simple'        => 'HTML if very simple or else PNG',
+'mw_math_html'          => 'HTML if possible or else PNG',
+'mw_math_source'        => 'Leave it as TeX (for text browsers)',
+'mw_math_modern'        => 'Raccomandà par i browser pì novi',
+'mw_math_mathml'        => 'MathML if possible (experimental)',
+'markaspatrolleddiff'   => 'Segna la modifica come verificà',
+'markaspatrolledtext'   => 'Segna sto arthicoło come verificà',
+'markedaspatrolled'     => 'Segnà come verificà',
+'markedaspatrolledtext' => 'La revixion selezsionà xè stà segnà come verificata.',
+'rcpatroldisabled'      => 'Recent Changes Patrol disabled',
+'markedaspatrollederror'=> 'Impossibiłe contrassegnare ła voçe come verificà',
+'markedaspatrollederrortext'=> 'Occorre speçificare na revixion da contrazsegnare come verificà.',
+'monobook.js' => '/* Deprecated; use [[MediaWiki:common.js]] */',
+ 
+'accesskey-pt-userpage' => '.',
+'tooltip-pt-userpage' => 'La me paxèna utente',
+'accesskey-pt-anonuserpage' => '.',
+'tooltip-pt-anonuserpage' => 'La paxèna utente de l',
+'accesskey-pt-mytalk' => 'n',
+'tooltip-pt-mytalk' => 'Le me discussion',
+'accesskey-pt-anontalk' => 'n',
+'tooltip-pt-anontalk' => 'Discussioni riguardo le modifiche fate da sto ip',
+'accesskey-pt-preferences' => '',
+'tooltip-pt-preferences' => 'Le me preferenzse',
+'accesskey-pt-watchlist' => 'l',
+'tooltip-pt-watchlist' => 'La lista de le paxène che te stè tegnendo soto ocio.',
+'accesskey-pt-mycontris' => 'y',
+'tooltip-pt-mycontris' => 'La lista de i me contributi',
+'accesskey-pt-login' => 'o',
+'tooltip-pt-login' => 'Te consigliemo de registrarte, ma non l',
+'accesskey-pt-anonlogin' => 'o',
+'tooltip-pt-anonlogin' => 'Te consigliemo de registrarte, ma non l',
+'accesskey-pt-logout' => '',
+'tooltip-pt-logout' => 'Log out (esci)',
+'accesskey-ca-talk' => 't',
+'tooltip-ca-talk' => 'Varda łe discussion rełative a la voçe',
+'accesskey-ca-edit' => 'e',
+'tooltip-ca-edit' => 'Te podi modificar sta paxèna. Per favor usa el botton de anteprima prima de salvare.',
+'accesskey-ca-addsection' => '+',
+'tooltip-ca-addsection' => 'Xonta un commento a sta discussion.',
+'accesskey-ca-viewsource' => 'e',
+'tooltip-ca-viewsource' => 'Sta paxèna xè proteta, ma te podi vedar el suo codexe sorjente.',
+'accesskey-ca-history' => 'h',
+'tooltip-ca-history' => 'Verzsion preçedenti de sta paxèna.',
+'accesskey-ca-protect' => '=',
+'tooltip-ca-protect' => 'Protedj sta paxèna',
+'accesskey-ca-delete' => 'd',
+'tooltip-ca-delete' => 'Scanceła sta paxèna',
+'accesskey-ca-undelete' => 'd',
+'tooltip-ca-undelete' => 'Ripristina la paxèna come l',
+'accesskey-ca-move' => 'm',
+'tooltip-ca-move' => 'Sposta sta paxèna a un altro titoło',
+'accesskey-ca-nomove' => '',
+'tooltip-ca-nomove' => 'Non te ghè el permezso de spostar sta paxèna',
+'accesskey-ca-watch' => 'w',
+'tooltip-ca-watch' => 'Xonta sta paxèna a l',
+'accesskey-ca-unwatch' => 'w',
+'tooltip-ca-unwatch' => 'Cava sta paxèna da l',
+'accesskey-search' => 'f',
+'tooltip-search' => 'Serca sta wiki',
+'accesskey-p-logo' => '',
+'tooltip-p-logo' => 'Paxèna prinzsipałe',
+'accesskey-n-mainpage' => 'z',
+'tooltip-n-mainpage' => 'Visita la Paxèna prinzsipałe',
+'accesskey-n-portal' => '',
+'tooltip-n-portal' => 'Descrizsion del projeto, cosa te podi far, e dove trovar le robe',
+'accesskey-n-currentevents' => '',
+'tooltip-n-currentevents' => 'Eventi de atuałità',
+'accesskey-n-recentchanges' => 'r',
+'tooltip-n-recentchanges' => 'La lista de le ultime modifiche a sta wiki.',
+'accesskey-n-randompage' => 'x',
+'tooltip-n-randompage' => 'Mostra na paxèna a caso',
+'accesskey-n-help' => '',
+'tooltip-n-help' => 'Raccolta de manuałi.',
+'accesskey-n-sitesupport' => '',
+'tooltip-n-sitesupport' => 'Iútane',
+'accesskey-t-whatlinkshere' => 'j',
+'tooltip-t-whatlinkshere' => 'Lista de tute le paxène che le porta a sta',
+'accesskey-t-recentchangeslinked' => 'k',
+'tooltip-t-recentchangeslinked' => 'Lista de le ultime modifiche a le paxène linkae da sta quà.',
+'accesskey-feed-rss' => '',
+'tooltip-feed-rss' => 'RSS feed for this page',
+'accesskey-feed-atom' => '',
+'tooltip-feed-atom' => 'Atom feed for this page',
+'accesskey-t-contributions' => '',
+'tooltip-t-contributions' => 'Lista de i contributi de sto utente',
+'accesskey-t-emailuser' => '',
+'tooltip-t-emailuser' => 'Manda n',
+'accesskey-t-upload' => 'u',
+'tooltip-t-upload' => 'Meti imagini o file multimediałi su {{SITENAME}}',
+'accesskey-t-specialpages' => 'q',
+'tooltip-t-specialpages' => 'Lista de tute łe paxène speciali',
+'accesskey-ca-nstab-main' => 'c',
+'tooltip-ca-nstab-main' => 'Varda la voçe rełativa',
+'accesskey-ca-nstab-user' => 'c',
+'tooltip-ca-nstab-user' => 'Varda la paxèna utente',
+'accesskey-ca-nstab-media' => 'c',
+'tooltip-ca-nstab-media' => 'Vedi la paxèna de el file multimediale',
+'accesskey-ca-nstab-special' => '',
+'tooltip-ca-nstab-special' => 'Sta quà xè na paxèna speciale, non la pode essere modificà.',
+'accesskey-ca-nstab-project' => 'a',
+'tooltip-ca-nstab-project' => 'Varda la paxèna del projeto',
+'accesskey-ca-nstab-image' => 'c',
+'tooltip-ca-nstab-image' => 'Varda la paxèna dell\'imagine',
+'accesskey-ca-nstab-mediawiki' => 'c',
+'tooltip-ca-nstab-mediawiki' => 'Varda el messajo de sistema',
+'accesskey-ca-nstab-template' => 'c',
+'tooltip-ca-nstab-template' => 'Varda el template',
+'accesskey-ca-nstab-help' => 'c',
+'tooltip-ca-nstab-help' => 'Varda la paxèna de aiuto',
+'accesskey-ca-nstab-category' => 'c',
+'tooltip-ca-nstab-category' => 'Varda la paxèna de la categoria',
+'deletedrevision'       => 'Vecia verzsion scancełà $1',
+'nextdiff'              => 'Next diff →',
+'imagemaxsize'          => 'Limita łe imagini o łe paxène de descrizsion de łe imagini a:',
+'newimages'             => 'Imagini nove',
+'noimages'              => 'Non ghè gnente da vardare.',
+'speciallogtitlelabel'  => 'Titolo',
+'passwordtooshort'      => 'La to password l\'è massa breve. La deve contegnere almanco $1 caratteri.',
+'mediawarning'          => '\'\'\'Warning\'\'\': This file may contain malicious code, by executing it your system may be compromised.<hr />',
+'fileinfo'              => 'Dimenzsion: $1 KB, Tipo MIME: <code>$2</code>',
+'metadata'              => 'Metadata',
+'metadata-help'         => 'This file contains additional information, probably added from the digital camera or scanner used to create or digitize it. If the file has been modified from its original state, some details may not fully reflect the modified image.',
+'metadata-expand'       => 'Show extended details',
+'metadata-collapse'     => 'Hide extended details',
+'exif-imagewidth'       => 'Larghezsa',
+'exif-imagelength'      => 'Altezsa',
+'exif-bitspersample'    => 'Bit par campione',
+'exif-compression'      => 'Meccanismo de comprezsion',
+'exif-photometricinterpretation'=> 'Strutura de i pixel',
+'exif-samplesperpixel'  => 'Numero de łe componenti',
+'exif-planarconfiguration'=> 'Disposizsion de i dati',
+'exif-ycbcrsubsampling' => 'Raporto de campionamento Y / C',
+'exif-ycbcrpositioning' => 'Posizsionamento componenti Y e C',
+'exif-xresolution'      => 'Risoluzsion orixontałe',
+'exif-yresolution'      => 'Risoluzsion verticałe',
+'exif-resolutionunit'   => 'Unità de mixura rizsoluzsion X e Y',
+'exif-stripoffsets'     => 'Posizsion de i dati imagine',
+'exif-rowsperstrip'     => 'Numero righe par striscia',
+'exif-stripbytecounts'  => 'Numero de byte par strizsia compressa',
+'exif-jpeginterchangeformat'=> 'Posizsion byte SOI JPEG',
+'exif-jpeginterchangeformatlength'=> 'Numero de byte de dati JPEG',
+'exif-transferfunction' => 'Funzsione de trasferimento',
+'exif-whitepoint'       => 'Coordinate cromatiche de el punto de bianco',
+'exif-primarychromaticities'=> 'Coordinate cromatiche de i cołori primari',
+'exif-ycbcrcoefficients'=> 'Coeficienti matriçe de trasformazsion spazsi de i cołori',
+'exif-referenceblackwhite'=> 'Copia de vałori de riferimento (nero e bianco)',
+'exif-datetime'         => 'Data e ora de modifica de el file',
+'exif-imagedescription' => 'Descrizsion de l\'imagine',
+'exif-make'             => 'Produtore fotocamera',
+'exif-model'            => 'Modeło fotocamera',
+'exif-copyright'        => 'nformazsion su el copyright',
+'exif-exifversion'      => 'Verzsion de el formato Exif',
+'exif-flashpixversion'  => 'Verzsione Flashpix supportà',
+'exif-colorspace'       => 'Spazio de i cołori',
+'exif-componentsconfiguration'=> 'Significato de ciascuna componente',
+'exif-compressedbitsperpixel'=> 'Modalità de compression imagine',
+'exif-pixelydimension'  => 'Larghezsa efetiva imagine',
+'exif-pixelxdimension'  => 'Altezsa efetiva imagine',
+'exif-makernote'        => 'Note de el produtore',
+'exif-usercomment'      => 'Note de l\'utente',
+'exif-relatedsoundfile' => 'File audio cołegà',
+'exif-datetimeoriginal' => 'Data e ora de creazsion de i dati',
+'exif-datetimedigitized'=> 'Data e ora de digitałixazsion',
+'exif-subsectime'       => 'Data e ora, frazsion de secondo',
+'exif-subsectimeoriginal'=> 'Data e ora de creazsion, frazsion de secondo',
+'exif-subsectimedigitized'=> 'Data e ora de digitałixazsion, frazsion de secondo',
+'exif-exposuretime'     => 'Tempo de esposizsion',
+'exif-fnumber'          => 'Rapporto focałe',
+'exif-exposureprogram'  => 'Programa de esposizsion',
+'exif-spectralsensitivity'=> 'Sensibilità spetrałe',
+'exif-isospeedratings'  => 'Sensibiłità ISO',
+'exif-oecf'             => 'Fattore de converzsion optoełetronica',
+'exif-shutterspeedvalue'=> 'Tenpo de esposizsion',
+'exif-exposurebiasvalue'=> 'Corezsion esposizsion',
+'exif-maxaperturevalue' => 'Mazsima vérta',
+'exif-subjectdistance'  => 'Distanzsa de el sojeto',
+'exif-meteringmode'     => 'Metodo de misurazsion',
+'exif-lightsource'      => 'Sorgente łuminoxa',
+'exif-flash'            => 'Caratteristiche e stato de el flash',
+'exif-focallength'      => 'Distanzsa focałe obiettivo',
+'exif-subjectarea'      => 'Area inquadrante el sojeto',
+'exif-spatialfrequencyresponse'=> 'Risposta in frequenzsa spazsiałe',
+'exif-focalplanexresolution'=> 'Risoluzsion X sul piano focałe',
+'exif-focalplaneyresolution'=> 'Risoluzsion Y sul piano focałe',
+'exif-focalplaneresolutionunit'=> 'Unità de misura risoluzsion sul piano focałe',
+'exif-subjectlocation'  => 'Posizsion de el sojeto',
+'exif-exposureindex'    => 'Sensibilità impostà',
+'exif-sensingmethod'    => 'Metodo de riłevazsion',
+'exif-scenetype'        => 'Tipo de inquadratura',
+'exif-cfapattern'       => 'Disposizione filtro cołore',
+'exif-customrendered'   => 'Elaborazsion personałixà',
+'exif-exposuremode'     => 'Modalità de espoxizsion',
+'exif-whitebalance'     => 'Biłanciamento de el bianco',
+'exif-digitalzoomratio' => 'Rapporto zoom digitałe',
+'exif-focallengthin35mmfilm'=> 'Focałe equivalente su 35 mm',
+'exif-scenecapturetype' => 'Tipo de acquixizsion',
+'exif-gaincontrol'      => 'Controło inquadratura',
+'exif-contrast'         => 'Controło contrasto',
+'exif-saturation'       => 'Controło saturazsion',
+'exif-sharpness'        => 'Controło nitidezsa',
+'exif-devicesettingdescription'=> 'Descrizsion impostazsioni dispositivo',
+'exif-subjectdistancerange'=> 'Scała distanzsa sojeto',
+'exif-imageuniqueid'    => 'ID univoco imagine',
+'exif-gpsversionid'     => 'Verzsion de i tag GPS',
+'exif-gpsaltituderef'   => 'Riferimento par l\'altitudine',
+'exif-gpstimestamp'     => 'Ora GPS (orołogio atomico)',
+'exif-gpssatellites'    => 'Satelliti usai par ła mixurazsion',
+'exif-gpsstatus'        => 'Stato de el riçevitore',
+'exif-gpsmeasuremode'   => 'Modalità de misurazsion',
+'exif-gpsdop'           => 'Precixion de ła mixurazsion',
+'exif-gpsspeedref'      => 'Unità de mixura de ła veloçità',
+'exif-gpsspeed'         => 'Veloçità del riçevitore GPS',
+'exif-gpstrackref'      => 'Riferimento par ła direzsion movimento',
+'exif-gpstrack'         => 'Direzsion de el movimento',
+'exif-gpsimgdirectionref'=> 'Riferimento par ła direzsion de l\'imagine',
+'exif-gpsimgdirection'  => 'Direzsion de l\'immagine',
+'exif-gpsmapdatum'      => 'Rilevamento geodetico usà',
+'exif-gpsdestlatituderef'=> 'Riferimento par ła latitudine de ła destinazsion',
+'exif-gpsdestlatitude'  => 'Latitudine de ła destinazsion',
+'exif-gpsdestlongituderef'=> 'Riferimento par ła longitudine de ła destinazsion',
+'exif-gpsdestlongitude' => 'Longitudine de ła destinazsion',
+'exif-gpsdestbearingref'=> 'Riferimento par ła direzsion de ła destinazsion',
+'exif-gpsdestbearing'   => 'Direzsion de ła destinazsion',
+'exif-gpsdestdistanceref'=> 'Riferimento par ła distanzsa de ła destinazsion',
+'exif-gpsdestdistance'  => 'Distanzsa de ła destinazsion',
+'exif-gpsprocessingmethod'=> 'Nome de el metodo de elaborazsion GPS',
+'exif-gpsareainformation'=> 'Nome de ła xòna GPS',
+'exif-gpsdifferential'  => 'Corezsion diferenzsiałe GPS',
+'exif-orientation-1'    => 'Normałe',
+'exif-orientation-2'    => 'Roerzsà orixontalmente',
+'exif-orientation-3'    => 'Ruotà de 180°',
+'exif-orientation-4'    => 'Roersà verticalmente',
+'exif-orientation-5'    => 'Ruotà 90° in senso antiorario e roersà verticalmente',
+'exif-orientation-6'    => 'Ruotà 90° in senso orario',
+'exif-orientation-7'    => 'Ruotà 90° in senso orario e capovolto verticalmente',
+'exif-orientation-8'    => 'Ruotà 90° in senso antiorario',
+'exif-planarconfiguration-1'=> 'a blochi (chunky)',
+'exif-xyresolution-i'   => '$1 punti par połiçe (dpi)',
+'exif-xyresolution-c'   => '$1 punti par çentimetro (dpc)',
+'exif-exposureprogram-0'=> 'Non definio',
+'exif-exposureprogram-1'=> 'Manuałe',
+'exif-exposureprogram-4'=> 'Priorità all\'esposizsion',
+'exif-exposureprogram-5'=> 'Artistico (orientà a ła profondità de campo)',
+'exif-exposureprogram-6'=> 'Sportivo (orientà a ła veloçità de riprexa)',
+'exif-meteringmode-0'   => 'Sconozsuo',
+'exif-meteringmode-2'   => 'Media pesà çentrà',
+'exif-meteringmode-6'   => 'Parzsiałe',
+'exif-lightsource-0'    => 'Sconozsua',
+'exif-lightsource-1'    => 'Luçe diurna',
+'exif-lightsource-2'    => 'Lampada a floreçenzsa',
+'exif-lightsource-3'    => 'Lampada al tungsteno (a incandeçenzsa)',
+'exif-lightsource-9'    => 'Tenpo beło',
+'exif-lightsource-10'   => 'Nùvoło',
+'exif-lightsource-11'   => 'In ombrìa',
+'exif-lightsource-12'   => 'Daylight fluorescent (D 5700 â€“ 7100K)',
+'exif-lightsource-13'   => 'Day white fluorescent (N 4600 â€“ 5400K)',
+'exif-lightsource-14'   => 'Cool white fluorescent (W 3900 â€“ 4500K)',
+'exif-lightsource-15'   => 'White fluorescent (WW 3200 â€“ 3700K)',
+'exif-lightsource-17'   => 'Luçe standard A',
+'exif-lightsource-18'   => 'Luçe standard B',
+'exif-lightsource-19'   => 'Luçe standard C',
+'exif-lightsource-20'   => 'Iłuminante D55',
+'exif-lightsource-21'   => 'Iłuminante D65',
+'exif-lightsource-22'   => 'Iłuminante D75',
+'exif-lightsource-23'   => 'Iłuminante D50',
+'exif-lightsource-255'  => 'Altra sorgente łuminoxa',
+'exif-focalplaneresolutionunit-2'=> 'połiçi',
+'exif-sensingmethod-1'  => 'Non definio',
+'exif-sensingmethod-2'  => 'Sensore area cołore a 1 chip',
+'exif-sensingmethod-3'  => 'Sensore area cołore a 2 chip',
+'exif-sensingmethod-4'  => 'Sensore area cołore a 3 chip',
+'exif-sensingmethod-5'  => 'Sensore area cołore sequenzsiałe',
+'exif-sensingmethod-7'  => 'Sensore triłineare',
+'exif-sensingmethod-8'  => 'Sensore łineare cołore sequenzsiałe',
+'exif-scenetype-1'      => 'Fotografia direta',
+'exif-customrendered-0' => 'Processo normałe',
+'exif-customrendered-1' => 'Processo personałixà',
+'exif-exposuremode-0'   => 'Esposizsion automatega',
+'exif-exposuremode-1'   => 'Esposizsion manuałe',
+'exif-exposuremode-2'   => 'Bracketing automatego',
+'exif-whitebalance-0'   => 'Biłanciamento de el bianco automatico',
+'exif-whitebalance-1'   => 'Biłanciamento de el bianco manuałe',
+'exif-scenecapturetype-2'=> 'Ritrato',
+'exif-scenecapturetype-3'=> 'Noturna',
+'exif-gaincontrol-1'    => 'Enfasi par basso guadagno',
+'exif-gaincontrol-2'    => 'Enfasi par alto guadagno',
+'exif-gaincontrol-3'    => 'Deenfasi par basso guadagno',
+'exif-gaincontrol-4'    => 'Deenfasi par alto guadagno',
+'exif-contrast-0'       => 'Normałe',
+'exif-saturation-0'     => 'Normałe',
+'exif-saturation-1'     => 'Bassa saturazsion',
+'exif-saturation-2'     => 'Alta saturazsion',
+'exif-sharpness-0'      => 'Normałe',
+'exif-sharpness-1'      => 'Minore nitidezsa',
+'exif-sharpness-2'      => 'Major nitidezsa',
+'exif-subjectdistancerange-0'=> 'Sconozsua',
+'exif-subjectdistancerange-2'=> 'Sojeto viçin',
+'exif-subjectdistancerange-3'=> 'Sojeto łontano',
+'exif-gpsstatus-a'      => 'Mixurazsion in corzso',
+'exif-gpsstatus-v'      => 'Mixurazsion interoperabiłe',
+'exif-gpsmeasuremode-2' => 'Misurazsion bidimensionałe',
+'exif-gpsmeasuremode-3' => 'Misurazsion tridimensionałe',
+'exif-gpsspeed-k'       => 'Chiłometri orari',
+'exif-gpsdirection-t'   => 'Direzsion reałe',
+'exif-gpsdirection-m'   => 'Direzsion magnetica',
+'edit-externally'       => 'Modifica stò file usando un programma esterno',
+'edit-externally-help'  => 'Per maggiori informazioni varda le [http://meta.wikimedia.org/wiki/Help:External_editors istruzsioni] (in inglese)',
+'namespacesall'         => 'all',
+'confirmemail'          => 'Conferma indirizso e-mail',
+'confirmemail_text'     => 'Stà wiki richiede che el to indirizso email vengna verificà prima de poder usare le funzsioni connesse all\'email. Struca el botton sotto par inviare na mail de conferma al to indirizso. La mail include un link contenente un codice; inseriszi el link nel to browser par confermar che el to indirizso email xè valido.',
+'confirmemail_send'     => 'Spedisi un codice de conferma via mail.',
+'confirmemail_sent'     => 'Email de conferma invià.',
+'confirmemail_sendfailed'=> 'Impossibiłe inviar na mail de conferma. Controła che l\'indirizso non contengna caratteri non vałidi.',
+'confirmemail_invalid'  => 'Codice de conferma non valido. El codice podarìa esser scadù.',
+'confirmemail_needlogin'=> 'Xè necessario $1 par confermare el proprio indirizso e-mail.',
+'confirmemail_success'  => 'El to indirizso email l\'è stato confermà. Ora te podi loggarte e gòderte la wiki.',
+'confirmemail_loggedin' => 'El to indirizso email xè stà confermà.',
+'confirmemail_error'    => 'Qualcosa l\'è andà storto nel salvar la to conferma.',
+'confirmemail_subject'  => '{{SITENAME}}: email par la conferma dell\'indirizso',
+'confirmemail_body'     => 'Qualcuno, probabilmente ti stesso dall\'indirizso IP $1, ga registrà n\'account "$2" con sto indirizso e-mail su {{SITENAME}}. 
+
+Par confermar che deto account realmente el te apartegne e poder attivar łe opzsioni relative a łe e-mail su {{SITENAME}}, apri el cołegamento seguente con el to browser: 
+
+$3 
+
+Se l\'account *non* xè el tuo, non visitare el cołegamento. El codexe de conferma scadrà a łe $4.',
+'createarticle'         => 'Crea voçe',
+'deletedwhileediting'   => 'Attenzsion: Sta paxèna xè stà scancełà dopo che te ghè scominzsià a modificarla!',
+'confirmrecreate'       => 'L\'utente [[User:$1|$1]] ([[User talk:$1|discussion]]) ga scancełà sta voçe dopo che te ghè inizsià a modificarla, con ła seguente motivazsion: \'\'$2\'\' 
+Per favore conferma che te vołi veramente ricrear sta voçe.',
+'tooltip-recreate'      => 'Ricrea ła paxèna anca se xè stà scancełà',
+'confirm_purge'         => 'Vóto scancełar ła cache in sta paxèna?
+
+$1',
+'confirm_purge_button'  => 'OK',
+'searchcontaining'      => 'Riçerca de łe voçi che contegne \'\'$1\'\'.',
+'articletitles'         => 'Rizserca de łe voçi che łe inizsia par \'\'$1\'\'',
+'hideresults'           => 'Hide results',
+'displaytitle'          => '(Par i cołegamenti a sta paxèna, usare [[$1]])',
+);
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesVi.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesVi.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesVi.php	(revision 1280)
@@ -0,0 +1,1396 @@
+<?php
+/**
+  * Based on Language.php 1.645
+  * @addtogroup Language
+  * Compatible to MediaWiki 1.5
+  * Initial translation by Trần Thế Trung and Nguyễn Thanh Quang
+  * Last update 28 August 2005 (UTC)
+  */
+
+$namespaceNames = array(
+	NS_MEDIA			=> 'Phương_tiện',
+	NS_SPECIAL			=> 'Đặc_biệt',
+	NS_MAIN				=> '',
+	NS_TALK				=> 'Thảo_luận',
+	NS_USER				=> 'Thành_viên',
+	NS_USER_TALK		=> 'Thảo_luận_Thành_viên',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK		=> 'Thảo_luận_$1',
+	NS_IMAGE			=> 'Hình',
+	NS_IMAGE_TALK		=> 'Thảo_luận_Hình',
+	NS_MEDIAWIKI		=> 'MediaWiki',
+	NS_MEDIAWIKI_TALK	=> 'Thảo_luận_MediaWiki',
+	NS_TEMPLATE			=> 'Tiêu_bản',
+	NS_TEMPLATE_TALK	=> 'Thảo_luận_Tiêu_bản',
+	NS_HELP				=> 'Trợ_giúp',
+	NS_HELP_TALK		=> 'Thảo_luận_Trợ_giúp',
+	NS_CATEGORY			=> 'Thể_loại',
+	NS_CATEGORY_TALK	=> 'Thảo_luận_Thể_loại'
+);
+
+$skinNames = array(
+	'standard'		=> 'Cổ điển',
+	'nostalgia'		=> 'Vọng cổ',
+	'myskin'		=> 'Cá nhân'
+);
+
+$magicWords = array(
+	'redirect'               => array( 0,    '#redirect' , '#đổi'             ),
+	'notoc'                  => array( 0,    '__NOTOC__' , '__KHÔNGMỤCMỤC__'             ),
+	'forcetoc'               => array( 0,    '__FORCETOC__', '__LUÔNMỤCLỤC__'        ),
+	'toc'                    => array( 0,    '__TOC__' , '__MỤCLỤC__'               ),
+	'noeditsection'          => array( 0,    '__NOEDITSECTION__', '__KHÔNGSỬAMỤC__'      ),
+	'start'                  => array( 0,    '__START__' , '__BẮTĐẦU__'             ),
+	'currentmonth'           => array( 1,    'CURRENTMONTH' , 'THÁNGNÀY'          ),
+	'currentmonthname'       => array( 1,    'CURRENTMONTHNAME'  , 'TÊNTHÁNGNÀY'     ),
+	'currentmonthnamegen'    => array( 1,    'CURRENTMONTHNAMEGEN' , 'TÊNDÀITHÁNGNÀY'   ),
+	'currentmonthabbrev'     => array( 1,    'CURRENTMONTHABBREV'  , 'TÊNNGẮNTHÁNGNÀY'  ),
+	'currentday'             => array( 1,    'CURRENTDAY'       , 'NGÀYNÀY'     ),
+	'currentdayname'         => array( 1,    'CURRENTDAYNAME'   , 'TÊNNGÀYNÀY'      ),
+	'currentyear'            => array( 1,    'CURRENTYEAR'    , 'NĂMNÀY'        ),
+	'currenttime'            => array( 1,    'CURRENTTIME'     , 'GIỜNÀY'       ),
+	'numberofarticles'       => array( 1,    'NUMBEROFARTICLES'  , 'SỐBÀI'     ),
+	'numberoffiles'          => array( 1,    'NUMBEROFFILES'   , 'SỐTẬPTIN'       ),
+	'pagename'               => array( 1,    'PAGENAME'      , 'TÊNTRANG'        ),
+	'pagenamee'              => array( 1,    'PAGENAMEE'   , 'TÊNTRANG2'           ),
+	'namespace'              => array( 1,    'NAMESPACE'   , 'KHÔNGGIANTÊN'           ),
+	'msg'                    => array( 0,    'MSG:'     , 'NHẮN:'              ),
+	'subst'                  => array( 0,    'SUBST:'   ,  'THẾ:'            ),
+	'msgnw'                  => array( 0,    'MSGNW:'    ,  'NHẮNMỚI:'             ),
+	'img_thumbnail'          => array( 1,    'thumbnail', 'thumb' , 'nhỏ'    ),
+	'img_right'              => array( 1,    'right' , 'phải'                 ),
+	'img_left'               => array( 1,    'left'  , 'trái'                ),
+	'img_none'               => array( 1,    'none'  , 'không'                 ),
+	'img_width'              => array( 1,    '$1px'                   ),
+	'img_center'             => array( 1,    'center', 'centre' , 'giữa'      ),
+	'img_framed'             => array( 1,    'framed', 'enframed', 'frame' , 'khung'),
+	'int'                    => array( 0,    'INT:'                   ),
+	'sitename'               => array( 1,    'SITENAME'  , 'TÊNMẠNG'             ),
+	'ns'                     => array( 0,    'NS:'                    ),
+	'localurl'               => array( 0,    'LOCALURL:'              ),
+	'localurle'              => array( 0,    'LOCALURLE:'             ),
+	'server'                 => array( 0,    'SERVER'    , 'MÁYCHỦ'             ),
+	'servername'             => array( 0,    'SERVERNAME' , 'TÊNMÁYCHỦ'            ),
+	'scriptpath'             => array( 0,    'SCRIPTPATH'  , ''           ),
+	'grammar'                => array( 0,    'GRAMMAR:'   , 'NGỮPHÁP'            ),
+	'notitleconvert'         => array( 0,    '__NOTITLECONVERT__',
+'__NOTC__', '__KHÔNGCHUYỂNTÊN__'),
+	'nocontentconvert'       => array( 0,    '__NOCONTENTCONVERT__',
+'__NOCC__', '__KHÔNGCHUYỂNNỘIDUNG__'),
+	'currentweek'            => array( 1,    'CURRENTWEEK' , 'TUẦNNÀY'           ),
+	'currentdow'             => array( 1,    'CURRENTDOW'             ),
+	'revisionid'             => array( 1,    'REVISIONID'  , 'SỐBẢN'           ),
+ );
+
+$datePreferences = array(
+	'default',
+	'vi normal',
+	'vi spelloutmonth',
+	'vi shortcolon',
+	'vi shorth',
+	'ISO 8601',
+);
+
+$defaultDateFormat = 'vi normal';
+
+$dateFormats = array(
+	'vi normal time' => 'H:i',
+	'vi normal date' => '"ngày" j "tháng" n "năm" Y',
+	'vi normal both' => 'H:i, "ngày" j "tháng" n "năm" Y',
+
+	'vi spelloutmonth time' => 'H:i',
+	'vi spelloutmonth date' => '"ngày" j xg "năm" Y',
+	'vi spelloutmonth both' => 'H:i, "ngày" j xg "năm" Y',
+
+	'vi shortcolon time' => 'H:i',
+	'vi shortcolon date' => 'j/n/Y',
+	'vi shortcolon both' => 'H:i, j/n/Y',
+
+	'vi shorth time' => 'H"h"i',
+	'vi shorth date' => 'j/n/Y',
+	'vi shorth both' => 'H"h"i, j/n/Y',
+);
+
+$datePreferenceMigrationMap = array(
+	'default',
+	'vi normal',
+	'vi normal',
+	'vi normal',
+);
+
+
+$linkTrail = "/^([a-zàâçéèêîôûäëïöüùÇÉÂÊÎÔÛÄËÏÖÜÀÈÙ]+)(.*)$/sDu";
+$separatorTransformTable = array(',' => '.', '.' => ',' );
+
+
+$messages = array(
+# User Toggles
+
+'tog-editwidth' => 'Cửa sổ soạn thảo mở rộng',
+'tog-editondblclick' => 'Nhấn đúp để soạn thảo trang (JavaScript)',
+'tog-editsection'	=> 'Bấm liên kết [sửa] để soạn bài',
+'tog-editsectiononrightclick'	=> 'Bấm góc phải cạnh đề mục để soạn mục này (JavaScript)',
+'tog-fancysig' => 'Chữ ký không có liên kết đến trang cá nhân',
+'tog-hideminor' => 'Giấu <i>thay đổi</i> nhỏ',
+'tog-justify' => 'Căn đều hai bên đoạn văn',
+'tog-minordefault' => 'Các soạn thảo của tôi được mặc định là thay đổi nhỏ',
+'tog-nocache' => 'Không lưu trang trong bộ nhớ đệm',
+'tog-numberheadings' => 'Đánh số tự động các đề mục',
+'tog-previewonfirst' => 'Luôn xem thử trước khi lưu soạn thảo',
+'tog-previewontop' => 'Phần xem thử nằm trên hộp soạn thảo',
+'tog-rememberpassword' => 'Nhớ mật khẩu của tôi (cookie)',
+'tog-showtoc'	=> 'Hiển thị mục lục (cho bài có trên 3 đề mục)',
+'tog-showtoolbar' => 'Hiển thị thanh soạn thảo (JavaScript)',
+'tog-usenewrc' => 'Thay đổi gần đây nhiều chức năng (JavaScript)',
+'tog-underline' => 'Gạch chân liên kết',
+'tog-watchdefault' => 'Tự động theo dõi bài tôi viết hoặc sửa',
+'tog-highlightbroken' => 'Liên kết đến trang chưa có <a href="" class="new">như này</a> (nếu không thì <a href="" class="internal">như này</a>).',
+'tog-enotifminoredits' => 'Gửi thông báo cho tôi về cả sửa đổi nhỏ',
+'tog-enotifrevealaddr' => 'Thể hiện địa chỉ thư của tôi trong thư thông báo',
+'tog-enotifusertalkpages' => 'Gửi tôi thông báo khi trang thảo luận với tôi thay đổi',
+'tog-enotifwatchlistpages' => 'Gửi tôi thông báo về thay đổi của trang',
+'tog-externaldiff' => 'Mặc định dùng so sánh bên ngoài',
+'tog-externaleditor' => 'Mặc định dùng soạn thảo bên ngoài',
+'tog-shownumberswatching' => 'Xem số người xem',
+
+'underline-always' => 'Luôn',
+'underline-default' => 'Mặc định của trình duyệt',
+'underline-never' => 'Không bao giờ',
+
+# Dates
+'sunday' => 'chủ nhật',
+'monday' => 'thứ hai',
+'tuesday' => 'thứ ba',
+'wednesday' => 'thứ tư',
+'thursday' => 'thứ năm',
+'friday' => 'thứ sáu',
+'saturday' => 'thứ bảy',
+'sun' => 'chủ nhật',
+'mon' => 'thứ 2',
+'tue' => 'thứ 3',
+'wed' => 'thứ 4',
+'thu' => 'thứ 5',
+'fri' => 'thứ 6',
+'sat' => 'thứ 7',
+'january' => 'tháng 1',
+'february' => 'tháng 2',
+'march' => 'tháng 3',
+'april' => 'tháng 4',
+'may_long' => 'tháng 5',
+'june' => 'tháng 6',
+'july' => 'tháng 7',
+'august' => 'tháng 8',
+'september' => 'tháng 9',
+'october' => 'tháng 10',
+'november' => 'tháng 11',
+'december' => 'tháng 12',
+'january-gen'   => 'tháng Một',
+'february-gen'  => 'tháng Hai',
+'march-gen'     => 'tháng Ba',
+'april-gen'     => 'tháng Tư',
+'may-gen'  => 'tháng Năm',
+'june-gen'      => 'tháng Sáu',
+'july-gen'      => 'tháng Bảy',
+'august-gen'    => 'tháng Tám',
+'september-gen' => 'tháng Chín',
+'october-gen'   => 'tháng Mười',
+'november-gen'  => 'tháng Mười một',
+'december-gen'  => 'tháng Mười hai',
+'jan' => 'tháng 1',
+'feb' => 'tháng 2',
+'mar' => 'tháng 3',
+'apr' => 'tháng 4',
+'may' => 'tháng 5',
+'jun' => 'tháng 6',
+'jul' => 'tháng 7',
+'aug' => 'tháng 8',
+'sep' => 'tháng 9',
+'oct' => 'tháng 10',
+'nov' => 'tháng 11',
+'dec' => 'tháng 12',
+
+# Bits of text used by many pages:
+'categories'	=> 'Thể loại',
+'pagecategories'	=> 'Thể loại',
+'category_header' => 'Các bài trong Thể loại "$1"',
+'subcategories'	=> 'Tiểu thể loại',
+'subcategorycount' => 'Thể loại này có $1 tiểu thể loại.',
+'allarticles'   => 'Mọi bài',
+'mainpage'      => 'Trang đầu',
+'mainpagetext'	=> 'Phần mềm {{SITENAME}} đã cài đặt.',
+'portal'        => 'Cộng đồng',
+'portal-url'	=> '{{ns:4}}:Cộng_đồng',
+'about'         => 'Giới thiệu',
+'aboutsite'     => 'Giới thiệu {{SITENAME}}',
+'aboutpage'     => '{{ns:4}}:Giới_thiệu',
+'article'       => 'Bài',
+'help'          => 'Trợ giúp',
+'helppage'      => '{{ns:4}}:Trợ giúp',
+'bugreports'    => 'Báo lỗi',
+'bugreportspage' => '{{ns:4}}:Báo lỗi',
+'sitesupport'	=> 'Quyên góp',
+'faq'           => 'FAQ',
+'faqpage'       => '{{ns:4}}:FAQ',
+'edithelp'      => 'Trợ giúp',
+'edithelppage'  => 'Trợ_giúp:Soạn thảo',
+'cancel'        => 'Bỏ',
+'qbfind'        => 'Tìm kiếm',
+'qbbrowse'      => 'Dẫn lái',
+'qbedit'        => 'Sửa',
+'qbpageoptions' => 'Lựa chọn',
+'qbpageinfo'    => 'Thông tin',
+'qbmyoptions'   => 'Lựa chọn của tôi',
+'qbspecialpages'	=> 'Trang đặc biệt',
+'moredotdotdot'	=> 'Thêm nữa...',
+'mypage'        => 'Trang của tôi',
+'mytalk'        => 'Thảo luận với tôi',
+'anontalk'	=> 'Thảo luận với IP này',
+'navigation'	=> 'Dẫn lái',
+'currentevents' => 'Thời sự',
+'disclaimers'	=> 'Cảnh báo',
+'disclaimerpage' => '{{ns:4}}:Cảnh báo chung',
+'errorpagetitle' => 'Lỗi',
+'returnto'      => 'Quay lại $1.',
+'tagline'       => 'Bài từ dự án mở {{SITENAME}}.',
+'whatlinkshere' => 'Liên kết tới đây',
+'help'          => 'Trợ giúp',
+'search'        => 'Tìm kiếm',
+'searchbutton'  => 'Tìm kiếm',
+'history'       => 'Lịch sử',
+'printableversion' => 'Bản để in',
+'edit'		=> 'Sửa',
+'editthispage'  => 'Sửa trang này',
+'delete'	=> 'Xóa',
+'deletethispage' => 'Xóa trang này',
+'undelete_short' => 'Phục hồi',
+'protect' => 'Khóa',
+'protectthispage' => 'Khóa trang này',
+'unprotect' => 'Mở',
+'unprotectthispage' => 'Mở trang này',
+'newpage'       => 'Trang mới',
+'talkpage'      => 'Trang thảo luận',
+'specialpage'	=> 'Trang đặc biệt',
+'personaltools'	=> 'Công cụ cá nhân',
+'postcomment'	=> 'Thêm bàn luận',
+'articlepage'	=> 'Xem bài',
+'talk'		=> 'Thảo luận',
+'toolbox'	=> 'Công cụ',
+'userpage'      => 'Trang thành viên',
+'projectpage' => 'Trang Wikipedia',
+'imagepage'     => 'Trang hình',
+'viewtalkpage'  => 'Trang thảo luận',
+'otherlanguages' => 'Ngôn ngữ khác',
+'redirectedfrom' => '(đổi hướng từ $1)',
+'lastmodifiedat'  => 'Lần sửa cuối : $2, $1.',
+'viewcount'     => 'Trang này đã được đọc $1 lần.',
+'copyright'	=> 'Bản quyền $1.',
+'protectedpage' => 'Trang bị khóa',
+'nbytes'        => '$1 byte',
+'go'            => 'Xem',
+'searcharticle'            => 'Xem',
+'ok'            => 'OK',
+'pagetitle'	=> '$1 - {{SITENAME}}',
+'history'	=> 'Lịch sử trang',
+'history_short' => 'Lịch sử',
+'retrievedfrom' => 'Lấy từ « $1 »',
+'newmessageslink' => 'tin nhắn mới',
+'editsection'	=> 'Sửa',
+'editold'	=> 'Sửa',
+'toc'		=> 'Mục lục',
+'showtoc'	=> 'xem',
+'hidetoc'	=> 'giấu',
+'thisisdeleted' => 'Xem hay phục hồi $1 ?',
+'restorelink'	=> 'Phục hồi 1 sửa đổi',
+'feedlinks'	=> 'Nạp:',
+
+# Short words for each namespace, by default used in the 'article' tab in monobook
+'nstab-main' => 'Bài',
+'nstab-user' => 'Trang thành viên',
+'nstab-media' => 'Phương tiện',
+'nstab-special' => 'Đặc biệt',
+'nstab-project' => 'Giới thiệu',
+'nstab-image' => 'Hình',
+'nstab-mediawiki' => 'Tin nhắn',
+'nstab-template' => 'Tiêu bản',
+'nstab-help' => 'Trợ giúp',
+'nstab-category' => 'Thể loại',
+
+# Main script and global functions
+'nosuchaction'	=> 'Không hiểu',
+'nosuchactiontext' => 'Phần mềm không hiểu bạn muốn làm gì.',
+'nosuchspecialpage' => 'Không tìm thấy',
+'nospecialpagetext' => 'Không có trang đặc biệt này.',
+
+# General errors
+'error'		=> 'Lỗi',
+'badaccess' => 'Lỗi truy cập',
+'databaseerror' => 'Lỗi cơ sở dữ liệu',
+'dberrortext'	=> "Lỗi cú pháp trong cơ sở dữ liệu. Truy vấn vừa rồi là:
+<blockquote><tt>$1</tt></blockquote>
+từ hàm \"<tt>$2</tt>\".
+MySQL báo lỗi \"<tt>$3: $4</tt>\".",
+'dberrortextcl' => 'Một truy vấn cơ sở dữ liệu có lỗi cú pháp.  Truy vấn vừa rồi là:
+"$1"
+thực hiện bởi hàm "$2"
+MySQL báo lỗi "$3 : $4".',
+'noconnect'	=> "Hiện tại không kết nối với cơ sở dữ liệu được.",
+'nodb'		=> 'Không thấy cơ sở dữ liệu $1',
+'cachederror'	=> 'Đây là bản sao của trang bạn yêu cầu, có thể không cập nhật.',
+'readonly'	=> 'Cơ sở dữ liệu bị khóa',
+'enterlockreason' => 'Nêu lý do khóa, thời gian khóa',
+'readonlytext'	=> "Cơ sở dữ liệu {{SITENAME}} hiện bị khóa, có thể để bảo trì, sau đó sẽ trở lại bìn thường. Lý do khóa :
+<p>$1",
+'missingarticle' => 'Cơ sở dữ liệu không thấy trang "$1".
+Đây không phải lỗi cơ sở dữ liệu, mà có thể là lỗi phần mềm.
+Xin báo lỗi này cho người quản lý, nói rõ tên trang bị lỗi.',
+'internalerror' => 'Lỗi nội bộ',
+'filecopyerror' => 'Không sao chép « $1 » đến « $2 » được.',
+'fileinfo' => '$1Ko, type MIME: <tt>$2</tt>',
+'filerenameerror' => 'Không đổi tên « $1 » đến « $2 » được.',
+'filedeleteerror' => 'Không xóa « $1 » được.',
+'filenotfound'	=> 'Không thấy "$1".',
+'unexpected' => 'Chưa ngờ tới : "$1"="$2".',
+'formerror'	=> 'Lỗi: không gửi đơn đi được.',
+'badarticleerror' => 'Không thực hiện được hành động như vậy trên trang này.',
+'cannotdelete'	=> "Không xóa trang được.",
+'badtitle'	=> 'Đề mục sai',
+'badtitletext'	=> 'Đề mục sai, rỗng hay liên kết liên ngôn ngữ sai.',
+'laggedslavemode' => 'Chú ý : trang có thể chưa được cập nhật phiên bản cuối.',
+'readonly_lag' => 'Cơ sở dữ liệu bị khóa để các máy chủ cập nhật thông tin của nhau.',
+'perfdisabled' => 'Chức năng này bị khóa vì nó làm chậm cơ sở dữ liệu.',
+'perfdisabledsub' => 'Đây là bản lưu của $1:',
+'viewsource'	=> 'Xem mã nguồn',
+'protectedtext'	=> 'Trang này đã bị khóa. Xem [[{{ns:4}}:Trang bị khóa]] để biết các lý do.',
+'allmessagesnotsupportedDB' => 'Đặc biệt:AllMessages không xem được do wgUseDatabaseMessages bị khóa.',
+'allmessagesnotsupportedUI' => 'Đặc biệt:AllMessages không hỗ trợ ngôn ngữ (<b>$1</b>).',
+'wrong_wfQuery_params' => 'Tham số sai trong wfQuery()<br />
+Hàm : $1<br />
+Truy vấn : $2',
+'versionrequired' => 'Cần phiên bản $1 của MediaWiki',
+'versionrequiredtext' => 'Cần phiên bản $1 của MediaWiki để xem trang này. Xem [[Đặc_biệt:Phiên_bản]]',
+'sqlhidden' => '(giấu truy vấn sql)',
+
+# Login and logout pages
+#
+'logouttitle'	=> 'Đăng xuất',
+'logouttext'	=> "Bạn đã đang xuất.
+Bạn vẫn dùng {{SITENAME}} được như người vô danh, hoặc đăng nhập lại, có thể dưới tài khoản khác.",
+
+'welcomecreation' => "<h2>Chào mừng, $1!</h2><p>Tài khoản của bạn đã mở. Mời bạn vào trang Lựa chọn cá nhân dành cho bạn.",
+
+'loginpagetitle'     => 'Đăng nhập',
+'yourname'           => 'Tên',
+'yourpassword'       => 'Mật khẩu',
+'yourpasswordagain'  => 'Vào lại mật khẩu',
+'remembermypassword' => 'Nhớ mật khẩu (cookie)',
+'loginproblem'       => '<b>Trục trặc đăng nhập.</b><br />Mời thử lại!',
+'alreadyloggedin'    => '\'\'\'$1, bạn đã đăng nhập rồi!\'\'\'<br />',
+
+'login'         => 'Đăng nhập',
+'loginprompt'	=> 'Bạn cần bật cookie để đăng nhập vào {{SITENAME}}.',
+'userlogin'     => 'Mở tài khoản hay đăng nhập',
+'logout'        => 'Đăng xuất',
+'userlogout'    => 'Đăng xuất',
+'notloggedin'	=> 'Chưa đăng nhập',
+'createaccount' => 'Mở tài khoản',
+'createaccountmail'	=> 'qua thư điện tử',
+'badretype'     => '2 mật khẩu không khớp.',
+'userexists'    => "Tên thành viên đã có người lấy. Xin chọn tên khác.",
+'youremail'     => 'Thư điện tử *',
+'yournick'      => 'Chữ ký trong thảo luận (dùng ~~~)',
+'yourrealname'	=> 'Tên thật *',
+'prefs-help-realname' => '* <strong>Tên thật</strong> (tùy): tên này (nếu được nhập) sẽ được dùng trong các đóng góp của bạn.',
+'prefs-help-email' => '* <strong>Thư điện tử</strong> (tùy): người khác có thể gửi thư từ trang này cho bạn mà họ vẫn không biết địa chỉ thư của bạn; địa chỉ thư còn giúp gửi bạn mật khẩu nếu bạn quên.',
+'loginerror'    => 'Lỗi đăng nhập',
+'nocookiesnew'	=> "Tài khoản đã mở, nhưng bạn chưa được đăng nhập. Xin bật cookies và đăng nhập lại.",
+'nocookieslogin' => " Xin bật cookies và đăng nhập lại.",
+'noname'        => "Chưa nhập tên.",
+'loginsuccesstitle' => "Đăng nhập thành công.",
+'loginsuccess'  => "Bạn đã đăng nhập vào {{SITENAME}} với tên
+\"$1\".",
+'nosuchuser'    => "Thành viên \"$1\" không tồn tại. Xin kiểm tra lại tên, hoặc mở tài khoản mới.",
+'nosuchusershort' => 'Không có « $1 ». Xin kiểm tra lại.',
+'wrongpassword' => 'Mật khẩu sai, xin nhập lại.',
+'mailmypassword' => 'Gửi tôi mật khẩu',
+'passwordremindertitle' => "Mật khẩu {{SITENAME}}",
+'passwordremindertext' => "Ai đó (có thể là bạn) có địa chỉ IP $1 đã xin gửi mật khẩu mới tới thư điện tử của bạn. Mật khẩu mới của \"$2\" là \"$3\". Bạn nên đăng nhập và thay đổi mật khẩu này.",
+'noemail'  => "Thành viên \"$1\" không có thư điện tử.",
+'passwordsent' => "Mật khẩu mới đã được gửi tới thư điện tử của thành viên \"$1\". Xin đăng nhập ngay khi nhận được.",
+'mailerror'	=> 'Lỗi gửi thư : $1',
+'acct_creation_throttle_hit' => 'Bạn đã mở $1 tài khoản. Không thể mở thêm được nữa.',
+
+'eauthentsent' => 'Thư xác nhận đã được gửi. Trước khi dùng chức năng nhận thư, bạn cần thực hiện hướng dẫn trong thư xác nhận, để đảm bảo tài khoản thuộc về bạn.',
+'emailauthenticated' => 'Địa chỉ thư điện tử của bạn được xác nhận tại $1.',
+'emailconfirmlink' => 'Xác nhận địa chỉ thư điện tử',
+'emailnotauthenticated' => 'Địa chỉ thư điện tử của bạn chưa được xác nhận. Chức năng thư điện tử chưa bật.',
+
+# Edit page toolbar
+'bold_sample'   => 'Chữ đậm',
+'bold_tip'      => 'Chữ đậm',
+'italic_sample' => 'Chữ xiên',
+'italic_tip'    => 'Chữ xiên',
+'link_sample'   => 'Liên kết',
+'link_tip'      => 'Liên kết',
+'extlink_sample'  => 'http://www.vidu.com liên kết ngoài',
+'extlink_tip'     => 'Liên kết ngoài (nhớ http://)',
+'headline_sample' => 'Đề mục',
+'headline_tip'  => 'Đề mục cấp 2',
+'math_sample'   => 'Nhập công thức toán vào đây',
+'math_tip'      => 'Công thức toán (LaTeX)',
+'nowiki_sample' => 'Nhập dòng chữ không theo định dạng wiki vào đây',
+'nowiki_tip'    => 'Không theo định dạng wiki',
+'image_sample'  => 'Ví dụ.jpg',
+'image_tip'     => 'Chèn hình',
+'media_sample'  => 'Ví dụ.ogg',
+'media_tip'     => 'Liên kết phương tiện',
+'sig_tip'       => 'Ký tên có ngày',
+'hr_tip'        => 'Dòng kẻ ngang (không nên lạm dụng)',
+
+# Edit pages
+'summary'      => 'Tóm tắt&nbsp;',
+'subject'	   => 'Đề mục',
+'minoredit'    => 'Sửa đổi nhỏ',
+'watchthis'    => 'Theo dõi bài này',
+'savearticle'  => 'Lưu',
+'preview'      => 'Xem thử',
+'showpreview'  => 'Xem thử',
+'blockedtitle' => 'Thành viên bị chặn',
+"blockedtext"  => "Bạn bị chặn bởi $1 vì:<br />$2<p>Bạn có thể liên hệ với $1 hoặc các [[{{ns:4}}:Người quản lý|người quản lý]] khác để thảo luận.",
+'whitelistedittitle' => 'Cần đăng nhập để sửa bài',
+'whitelistedittext' => 'Bạn cần [[Đặc_biệt:Userlogin|đăng nhập]] để viết bài.',
+'whitelistreadtitle' => 'Cần đăng nhập để đọc bài',
+'whitelistreadtext' => 'Bạn cần [[Đặc_biệt:Userlogin|đăng nhập]] để đọc bài.',
+'whitelistacctitle' => 'Bạn không được phép mở tài khoản.',
+'whitelistacctext' => 'Bạn cần [[Đặc_biệt:Userlogin|đăng nhập]] để mở tài khoản.', // Looxix
+'loginreqtitle'	=> 'Cần nhập tên',
+'accmailtitle' => 'Đã gửi mật khẩu.',
+'accmailtext' => 'Mật khẩu của « $1 » đã được gửi đến $2.',
+
+'newarticle'   => '(mới)',
+'newarticletext' => 'Nhập nội dung bài viết vào đây.',
+'anontalkpagetext' => "---- ''Đây là trang thảo luận của một người vô danh (chưa mở tài khoản hoặc không dùng tài khoản). Chúng ta chỉ có thể dùng [[địa chỉ IP]] để liên hệ. Nhiều thành viên có thể có chung địa chỉ này. Nếu bạn, một thành viên vô danh, nhận được tin nhắn không liên quan đến bạn, bạn có thể [[Đặc_biệt:Userlogin|mở tài khoản]] để tránh nhầm lẫn này.",
+'noarticletext' => "(Trang này hiện chưa có gì)",
+'clearyourcache'    => "'''Chú ý:''' Sau khi lưu, bạn cần tái truy cập để xem sự thay đổi : Mozilla / Konqueror : ctrl-r, Firefox / IE / Opera : ctrl-f5, Safari : cmd-r.",
+'updated'      => '(Cập nhật)',
+'note'         => '<strong>Chú ý :</strong>',
+'previewnote'  => "Chú ý, đây chỉ là thử nghiệm, chưa lưu!",
+'previewconflict' => "Trang này có vẻ như đã được lưu bởi người khác sau khi bạn bắt đầu sửa.",
+'editing'         => 'Soạn thảo $1',
+'editinguser'         => 'Soạn thảo $1',
+'editingsection'  => 'Soạn thảo $1',
+'editingcomment'  => 'Soạn thảo $1',
+'editconflict' => 'Sửa đổi mâu thuẫn : $1',
+'explainconflict' => "<b>Trang này có đã được lưu bởi người khác sau khi bạn bắt đầu sửa. Phía trên là bản vừa được lưu. Phía dưới là sửa đổi của bạn. Bạn phải sửa lại từ bản đã lưu.</b><br />",
+'yourtext'     => 'Nội dung bạn nhập',
+'storedversion' => 'Phiên bản lưu',
+"editingold"   => "<strong>Chú ý: bạn đang sửa một phiên bản cũ. Nếu bạn lưu, các sửa đổi trên phiên bản mới hơn sẽ mất.</strong>",
+"yourdiff"  => "Khác",
+/*"copyrightwarning" => "*Xin dùng [[{{ns:4}}:Chỗ thử|chỗ thử soạn thảo]] nếu bạn chỉ muốn thử nghiệm.
+*Xin đọc thêm hướng dẫn về [[Trợ giúp:Soạn thảo|soạn thảo]] và [[Trợ giúp:Viết bài mới|viết bài mới]].
+*Mọi đóng góp cho {{SITENAME}} đều tuân theo GNU Free Documentation Licence (Xem $1). Nếu bạn không muốn nội dung bạn nhập bị người khác sửa, đừng viết vào đây. <br /><b>KHÔNG LẤY TÀI LIỆU TỪ NGUỒN KHÁC MÀ CHƯA XIN PHÉP!</b>",*/
+'copyrightwarning2' => "*Xin dùng [[{{ns:4}}:Chỗ thử|chỗ thử soạn thảo]] nếu bạn chỉ muốn thử nghiệm.
+*Xin đọc thêm hướng dẫn về [[Trợ giúp:Soạn thảo|soạn thảo]] và [[Trợ giúp:Viết bài mới|viết bài mới]].
+*Mọi đóng góp cho {{SITENAME}} đều tuân theo GNU Free Documentation Licence (Xem $1). Nếu bạn không muốn nội dung bạn nhập bị người khác sửa, đừng viết vào đây. <br /><b>KHÔNG LẤY TÀI LIỆU TỪ NGUỒN KHÁC MÀ CHƯA XIN PHÉP!</b>",
+"longpagewarning" => "<strong>Chú ý : Trang này dài $1 kb; nhiều trình duyệt không tải được trang dài hơn 32 kb. Bạn nên chia nhỏ trang này thành nhiều trang.</strong>",
+"readonlywarning" => "<strong>Chú ý : trang này bị khóa để bảo trì. Bạn chỉ có thể sao nội dung để sửa đổi trên máy cá nhân.</strong>",
+"protectedpagewarning" => "<strong>Chú ý : trang này bị khóa. Chỉ có quản lý viên mới sửa được. Chú ý tuân thủ [[{{ns:4}}:Trang_bị_khóa|quy định về trang bị khóa]].</strong>",
+
+# History pages
+#
+'revhistory'   => 'Bản cũ',
+'nohistory'    => "Trang này chưa có lịch sử.",
+'revnotfound'  => 'Không thấy',
+'revnotfoundtext' => "Không thấy phiên bản trước của trang này. Xin kiểm tra lại.",
+
+'loadhist'     => 'Đang mở lịch sử...',
+'currentrev'   => 'Hiện nay',
+'revisionasof' => '$1',
+'cur'    => 'nay',
+'next'   => 'sau',
+'last'   => 'cũ',
+'orig'   => 'gốc',
+'histlegend' => "Chú thích : (nay) = so sánh với bản hiện nay,
+(cũ) = so sánh với bản trước, n = sửa nhỏ",
+'selectnewerversionfordiff' => 'Chọn bản mới hơn',
+'selectolderversionfordiff' => 'Chọn bản cũ hơn',
+'previousdiff' => '&larr; So với trước',
+'previousrevision' => '&larr; Bản trước',
+'nextdiff' => 'So với sau &rarr;',
+'nextrevision' => 'Bản sau &rarr;',
+
+
+# Category pages
+#
+'categoriespagetext' => "Các thể loại :",
+'categoryarticlecount' => "Có $1 bài trong thể loại này.",
+
+
+#  Diffs
+#
+'difference' => '(Khác biệt giữa các bản)',
+'loadingrev' => 'đang lấy các bản để so sánh',
+'lineno'  => 'Dòng $1:',
+'editcurrent' => 'Sửa bản hiện nay',
+
+
+# Search results
+#
+'searchresults' => 'Kết quả tìm',
+'searchresulttext' => "Xem thêm [[{{ns:4}}:Tìm_kiếm|hướng dẫn tìm kiếm {{SITENAME}}]].",
+'searchsubtitle' => "Cho truy vấn \"[[:$1]]\"",
+'searchsubtitleinvalid' => "Cho truy vấn \"$1\"",
+'badquery'  => 'Truy vấn sai',
+'badquerytext' => "Truy vấn sai: ngắn hơn 3 chữ cái, hoặc sai chính tả ví dụ như \"mèo và và chuột\". Xin mời thử lại.",
+'matchtotals' => "Truy vấn \"$1\" phù hợp với $2 tên bài và câu chữ trong $3 bài.",
+'noexactmatch' => "Không có trang tên như này, xin thử công cụ tìm.",
+'titlematches' => "Đề mục tương tự",
+'notitlematches' => "Không có tên bài nào có nội dung tương tự",
+'textmatches' => "Câu chữ tương tự",
+'notextmatches' => "Không có câu chữ nào trong các bài có nội dung tương tự",
+'prevn'   => '$1 trước',
+'nextn'   => '$1 sau',
+'viewprevnext' => 'Xem ($1) ($2) ($3).',
+'showingresults' => "Xem <b>$1</b> kết quả bắt đầu từ #<b>$2</b>.",
+'showingresultsnum' => "Xem <b>$3</b> kết quả bắt đầu từ #<b>$2</b>.",
+'nonefound'  => "<strong>Chú ý</strong>: viết truy vấn tìm kiếm dài quá có thể gây khó khăn khi tìm.",
+'powersearch' => "Tìm",
+'powersearchtext' => "
+Tìm trong :<br />
+$1<br />
+$2 gồm cả trang đổi hướng &nbsp; Tìm $3 $9",
+'searchdisabled' => "<p>Công cụ tìm kiếm hiện bị khóa. Chức năng này sẽ được mở lại khi có điều kiện lắp thêm máy chủ. Hiện tại có thể tìm với Google:</p>",
+"blanknamespace" => "(Chính)",
+
+# Preferences page
+#
+'preferences'       => 'Lựa chọn cá nhân',
+'prefsnologin'      => 'Chưa đăng nhập',
+'prefsnologintext'  => "Bạn phải [[Đặc_biệt:Userlogin|đăng nhập]] để sửa các Lựa chọn cá nhân của bạn.",
+'prefsreset'        => 'Các Lựa chọn cá nhân đã được mặc định lại.',
+'qbsettings'        => 'Các lựa chọn cho thanh công cụ',
+'qbsettings-none'	=> 'Không',
+'qbsettings-fixedleft'	=> 'Trái',
+'qbsettings-fixedright'	=> 'Phải',
+'qbsettings-floatingleft'	=> 'Nổi bên trái',
+'changepassword'    => 'Đổi mật khẩu',
+'skin'              => 'Ngoại hình',
+'math'				=> 'Công thức toán',
+'dateformat'		=> 'Ngày tháng',
+'datedefault' => 'Không lựa chọn',
+'math_failure'		=> 'Lỗi toán',
+'math_unknown_error'	=> 'lỗi chưa rõ',
+'math_unknown_function'	=> 'hàm chưa rõ',
+'math_lexing_error'	=> 'lỗi chính tả',
+'math_syntax_error'	=> 'lỗi ngữ pháp',
+'math_image_error'	=> "Không chuyển sang định dạng PNG được, xin kiểm tra lại cài đặt Latex, dvips, gs và convert",
+'math_bad_tmpdir'	=> "Không tạo mới hay viết vào thư mục tạm thời được",
+'math_bad_output'	=> "Không tạo mới hay viết vào thư mục kết quả được",
+'math_notexvc'		=> "Không thấy 'texvc'. Xem math/README để cài đặt lại.",
+'prefs-personal'    => 'Thông tin cá nhân',
+'prefs-rc'          => 'Thay đổi gần đây',
+'prefs-misc'        => 'Lựa chọn khác',
+'saveprefs'         => 'Lưu lựa chọn',
+'resetprefs'        => 'Mặc định lại lựa chọn',
+'oldpassword'       => 'Mật khẩu cũ',
+'newpassword'       => 'Mật khẩu mới&nbsp;',
+'retypenew'         => 'Gõ lại',
+'textboxsize'       => 'Kích thước cửa sổ soạn thảo',
+'rows'              => 'Hàng&nbsp;',
+'columns'           => 'Cột',
+'searchresultshead' => 'Xem kết quả tìm kiếm',
+'resultsperpage'    => 'Số kết quả trong một trang&nbsp;',
+'contextlines'      => 'Số hàng trong một kết quả',
+'contextchars'      => 'Số chữ trong một hàng',
+'stubthreshold'     => 'Độ lớn tối thiểu của bài ngắn',
+'recentchangescount' => 'Số đề mục trong Thay đổi gần đây',
+'savedprefs'        => 'Đã lưu các lựa chọn cá nhân.',
+'timezonelegend'    => 'Múi giờ',
+'timezonetext'      => "Nếu không chọn, giờ mặc định UTC sẽ được dùng.",
+'localtime'         => 'Giờ địa phương',
+'timezoneoffset'    => 'Chênh giờ¹',
+'servertime'	    => 'Giờ máy chủ',
+'guesstimezone'     => 'Dùng giờ của trình duyệt',
+"defaultns"         => "Mặc định tìm kiếm trong không gian tên :",
+'yourlanguage' => "Ngôn ngữ&nbsp;",
+
+# Recent changes
+#
+"changes"	=> "sửa đổi",
+"recentchanges" => "Thay đổi gần đây",
+"recentchangestext" => "[[{{ns:4}}:Chào mừng người mới đến|Chào mừng]] bạn! Trang này dùng để theo dõi các thay đổi gần đây trên {{SITENAME}}.",
+'rcnote'  => "<strong>$1</strong> thay đổi của <strong>$2</strong> ngày qua.",
+'rcnotefrom'	=> "Thay đổi từ <strong>$2</strong> (<b>$1</b> tối đa).",
+'rclistfrom'	=> "Xem thay đổi từ $1.",
+'rclinks'	=> "Xem $1 thay đổi của $2 ngày qua; $3.",	// Looxix
+'diff'            => 'khác',
+'hist'            => 'sử',
+'hide'            => 'giấu',
+'show'            => 'xem',
+'minoreditletter' => 'n',
+'newpageletter'   => 'M',
+
+# Upload
+#
+'upload'       => 'Tải lên',
+'uploadbtn'    => 'Tải lên',
+'reupload'     => 'Tải lại',
+'reuploaddesc' => 'Quay lại.',
+
+'uploadnologin' => 'Chưa đăng nhập',
+'uploadnologintext' => "Bạn phải [[Đặc_biệt:Userlogin|đăng nhập]] để tải lên tệp tin.",
+'uploaderror'  => "Lỗi",
+'uploadtext'   => "Trước khi truyền hình lên:
+*Kiểm tra hình ảnh đã tải lên trước đây tại [[Đặc_biệt:Imagelist|danh sách những hình đã tải lên]].
+Khi truyền hình lên:
+*Tuân thủ [[{{ns:4}}:Quy định về hình ảnh|quy định về sử dụng hình ảnh]].
+*Ghi rõ thẻ quyền. Ví dụ {{<nowiki>PD</nowiki>}} hay {{<nowiki>GFDL</nowiki>}},... Xem thêm [[{{ns:4}}:Thẻ quyền cho hình ảnh|thẻ quyền cho hình ảnh]].
+*Dùng định dạng JPEG cho ảnh chụp, PNG cho hình vẽ, và OGG cho âm thanh hay video.
+*Ghi tóm lược về hình ảnh giúp người khác có thể dùng lại hình của bạn.
+Sau khi truyền hình lên:
+*Thông tin tải lên và xóa bỏ được ghi trong [[{{ns:4}}:Nhật trình tải lên|nhật trình tải lên]].
+*Để cho hình vào bài, xem [[{{ns:4}}:Cú pháp hình ảnh|cú pháp hình ảnh]].
+*Người khác có thể sửa hoặc xóa những thông tin bạn tải lên, và bạn có thể bị cấm tải lên nếu lạm dụng hệ thống.",
+"uploadlog"  => "Nhật trình tải lên",
+"uploadlogpage" => "Nhật_trình_tải_lên",
+"uploadlogpagetext" => "Danh sách các tệp tin đã tải lên, theo giờ máy chủ (UTC).
+<ul>
+</ul>",
+'filename'	=> 'Tên&nbsp;',
+'filedesc'	=> 'Mô tả&nbsp;',
+'filestatus'	=> 'Bản quyền',
+'filesource'	=> 'Nguồn',
+'copyrightpage' => "{{ns:4}}:Bản quyền",
+'copyrightpagename' => "giấy phép {{SITENAME}}",
+'uploadedfiles' => "Đã tải xong",
+'minlength'	=> "Tên phải dài hơn hai chữ.",
+'illegalfilename'	=> 'Tên « $1 » có chứa ký tự không dùng được cho tên trang. Xin hãy đổi tên và tải lại.',
+'badfilename' => 'Đổi thành tên « $1 ».',
+'badfiletype' => '« .$1 » không phải là định dạng ảnh phù hợp.',
+'largefile'  => 'Kích thước tập tin không nên vượt quá 100Kb.',
+'successfulupload' => 'Đã tải xong',
+'fileuploaded' => "Tập tin \"$1\" đã được tải lên thành công.
+Xin hãy theo liên kết: $2 đến trang mô tả và điền vào thông tin về tập tin, chẳng hạn như nó đến từ đâu, được tạo ra khi nào và bởi ai, và các chi tiết khác mà bạn biết về nó.
+Nếu đây là hình ảnh, bạn có thể cho vào trong trang như sau:
+<tt><nowiki>[[Image:$1|thumb|Mô tả hình]]</nowiki></tt>.",
+'uploadwarning' => 'Chú ý!',
+'savefile'  => 'Lưu tệp tin',
+'uploadedimage' => 'đã tải lên « [[$1]] »',
+'uploaddisabled' => 'Xin lỗi, chức năng tải lên bị khóa.',
+'uploadcorrupt' => "Tập tin bị hỏng hoặc có đuôi không chuẩn. Xin kiểm tra và tải lại.",
+'fileexists' => "'Một tệp tin với tên này đã tồn tại, xin hãy kiểm tra $1 nếu bạn không muốn thay đổi nó.",
+'filemissing' => 'Không thấy tệp tin này',
+
+# Image list
+'imagelist'  => 'Danh sách hình',
+'imagelisttext' => 'Danh sách $1 hình xếp theo $2.',
+'getimagelist' => 'Đang lấy danh sách hình',
+'ilsubmit'  => 'Tìm',
+'showlast'  => 'Xem $1 hình mới nhất xếp theo $2.',
+'byname'  => 'tên',
+'bydate'  => 'ngày',
+'bysize'  => 'kích cỡ',
+'imgdelete'  => 'xóa',
+'imgdesc'  => 'tả',
+'imglegend'  => "Chú thích: (tả) = xem/sửa mô tả về hình.",
+'imghistory' => 'Lịch sử hình',
+'revertimg'  => 'hồi',
+'deleteimg'  => 'xóa',
+'deleteimgcompletely'  => 'xóa hẳn',
+'imghistlegend' => "Chú thích: (nay) = Hình hiện nay, (xóa) = Xóa bản cũ, (hồi) = Phục hồi bản cũ.
+<br /><i>Ấn vào ngày để xem hình tải lên ngày đó</i>.",
+'imagelinks' => 'Liên kết đến hình',
+'linkstoimage' => 'Các trang sau có liên kết đến hình:',
+'nolinkstoimage' => 'Không có trang nào chứa liên kết đến hình.',
+'showbigimage' => 'Tái xuống bản có độ phân giải cao ($1x$2, $3 Kb)',
+'imagemaxsize' => 'Giới hạn độ phân giải ảnh là:&nbsp;',
+'newimages' => 'Trang trưng bày hình ảnh mới',
+'noimages'  => 'Không có hình nào.',
+# image deletion
+'deletedrevision' => 'Đã xóa phiên bản cũ $1.',
+
+# Statistics
+
+'statistics' => 'Thống kê',
+'sitestats'  => 'Thống kê',
+'userstats'  => 'Thống kê thành viên',
+'sitestatstext' =>'<p style="font-size: 125%; margin-bottom: 0px">Hiện đang có <b>$2</b> [[{{ns:4}}:Bài bách khoa là gì?|bài viết]].</p>
+
+Con số này không bao gồm các trang [[{{ns:4}}:Trang_thảo_luận|thảo luận]], các trang giới thiệu {{SITENAME}}, các [[{{ns:4}}:Trang_đổi_hướng|trang đổi hướng]], và các trang không được coi là có nội dung (ví dụ: không liên kết đến trang khác). Khi tính các trang đó vào, có <b>$1</b> trang.
+
+Đã có tổng cộng <b>$3</b> lần xem, và <b>$4</b> lần sửa kể từ khi dự án này được thiết lập. Trung bình có <b>$5</b> lần sửa cho mỗi trang, và <b>$6</b> lần xem cho mỗi sửa đổi.',
+'userstatstext' => "Có <b>$1</b> thành viên đã đăng ký, trong đó có <b>$2</b> là [[{{ns:4}}:Người quản lý|người quản lý]].",
+
+# Maintenance Page
+#
+'disambiguations'	=> 'Trang định hướng',
+'disambiguationspage'	=> "{{ns:4}}:Trang_định_hướng",
+'disambiguationstext'	=> "Những trang sau đây liên kết đến một <i>trang định hướng</i>. Lẽ ra chúng nên liên kết thẳng đến một trang phù hợp.<br />Xin xem thêm [$1 thông tin về trang định hướng].<br />Chú ý, dưới đây <i>không</i> liệt kê liên kết từ các không gian tên khác.",
+'doubleredirects'	=> 'Đổi hướng kép',
+'doubleredirectstext'	=> "Mỗi hàng có chứa các liên kết đến trang chuyển hướng thứ nhất và thứ hai, cũng như dòng đầu tiên của nội dung trang chuyển hướng thứ hai, thường chỉ tới trang đích \"thực sự\", là nơi mà trang chuyển hướng đầu tiên phải trỏ đến.",
+'brokenredirects'	=> 'Đổi hướng sai',
+'brokenredirectstext'	=> 'Các trang đổi hướng sau đây liên kết đến một trang không tồn tại.',
+
+
+# Miscellaneous special pages
+'uncategorizedpages'    => 'Trang chưa xếp thể loại',
+'uncategorizedcategories'   => 'Thể loại chưa phân loại',
+'unusedimages'  => 'Hình chưa dùng',
+'nlinks'        => '$1 liên kết',
+'allpages'      => 'Tất cả các trang',
+'deadendpages'  => 'Trang đường cùng',
+'lonelypages'   => 'Trang mồ côi',
+'popularpages'  => 'Trang nhiều người đọc',
+'nviews'        => '$1 lần xem',
+'wantedpages'   => 'Trang cần viết',
+'randompage'    => 'Trang ngẫu nhiên',
+'shortpages'    => 'Bài ngắn',
+'longpages'     => 'Bài dài',
+'listusers'     => 'Danh sách thành viên',
+'specialpages'  => 'Các trang đặc biệt',
+'spheading'     => 'Các trang đặc biệt',
+'recentchangeslinked' => 'Thay đổi liên quan',
+'rclsub'        => "(trang liên kết đến \"$1\")",
+'newpages'      => 'Các bài mới nhất',
+'ancientpages'	=> 'Các bài cũ nhất',
+'move'		=> 'đổi tên',
+'movethispage'  => 'Đổi tên trang này',
+'unusedimagestext' => '<p>Xin lưu ý là các địa chỉ mạng bên ngoài có thể liên kết đến một hình ở đây qua một địa chỉ trực tiếp, dù hình này được liệt kê là chưa dùng.</p>',
+'booksources'   => "Nguồn tham khảo",
+'booksourcetext' => "Dưới đây là danh sách các liên kết đến các địa chỉ bán sách cũ hoặc mới, và có thể có thông tin chi tiết về những sách mà bạn đang tìm. {{SITENAME}} không hề liên quan gì với những công ty trên đây, và danh sách này không nên được hiểu là một sự chứng nhận nào đó đối với những công ty trên.",
+'alphaindexline' => '$1 đến $2',
+'version' => 'Phiên bản',
+
+# All pages
+#
+'allinnamespace' => "Mọi trang (không gian $1)",
+'allpagesnext' => "Sau",
+'allpagesprev' => "Trước",
+'allpagessubmit' => "Hiển thị",
+
+# Email this user
+#
+'mailnologin' => 'Không có địa chỉ gửi thư',
+'mailnologintext' => 'Bạn phải [[Đặc_biệt:Userlogin|đăng nhập]] và có khai báo một địa chỉ thư điện tử hợp lệ trong phần [[Đặc_biệt:Preferences|lựa chọn cá nhân]] thì mới gửi được thư cho người khác.',
+'emailuser'  => 'Gửi thư cho người này',
+'emailpage'  => 'Gửi thư',
+'emailpagetext' => 'Nếu người này đã cung cấp địa chỉ thư điện tử, biểu mẫu dưới đây sẽ cho bạn gửi thư. Địa chỉ thư điện tử của bạn sẽ xuất hiện trong phần địa chỉ người gửi của bức thư, nên người nhận có thể trả lời lại bạn.',
+'noemailtitle' => 'Không có địa chỉ nhận thư',
+'noemailtext' => 'Người này không cung cấp một địa chỉ thư hợp lệ, hoặc đã chọn không nhận thư từ người khác.',
+
+'emailfrom'  => 'Từ',
+'emailto'  => 'Đến',
+'emailsubject' => 'Chủ đề',
+'emailmessage' => 'Nội dung',
+'emailsend'  => 'Gửi',
+'emailsent'  => 'Đã gửi',
+'emailsenttext' => 'Thư của bạn đã được gửi.',
+'usermailererror' => 'Lỗi gửi thư:',
+'defemailsubject' => 'thư gửi từ {{SITENAME}}',
+
+# Watchlist
+#
+'watchlist'	=> 'Trang tôi theo dõi',
+'mywatchlist'	=> 'Trang tôi theo dõi',
+'nowatchlist'	=> "Chưa có gì.",
+'watchnologin'	=> 'Chưa đăng nhập',
+'watchnologintext' => "Bạn phải [[Đặc_biệt:Userlogin|đăng nhập]] mới sửa đổi được danh sách theo dõi.",
+'addedwatch'	=> 'Đã vào danh sách theo dõi',
+'addedwatchtext' => "Trang \"$1\" đã được cho vào [[Đặc_biệt:Watchlist|danh sách theo dõi]].
+Những sửa đổi đối với trang này và trang thảo luận của nó sẽ được liệt kê, và được <b>in đậm</b> trong [[Đặc_biệt:Recentchanges|danh sách các thay đổi mới]].
+<p>Nếu bạn muốn cho trang này ra khỏi danh sách theo dõi, nhấn vào \"Ngừng theo dõi\" ở trên.",
+'removedwatch'	=> 'Đã ra khỏi danh sách theo dõi',
+'removedwatchtext' => "Trang « $1 » đã ra khỏi danh sách theo dõi.",
+'watch'		=> 'Theo dõi',
+'watchthispage'	=> 'Theo dõi trang này',
+'unwatch'	=> 'ngừng theo dõi',
+'unwatchthispage' => 'Ngừng theo dõi',
+'notanarticle'	=> 'Không phải bài viết',
+'watchnochange' => 'Không có trang nào bạn theo dõi được sửa đổi.',
+'watchdetails' => "* Bạn theo dõi $1 trang không kể trang thảo luận. $3 <br />
+*[$4 Xem và sửa lại danh sách]", // Looxix
+'watchmethod-recent'=> 'Dưới đây hiện thay đổi mới với các trang theo dõi.',
+'watchmethod-list'  => 'Dưới đây hiện danh sách các trang theo dõi.',
+'removechecked'     => 'Ngưng theo dõi mục đã chọn',
+'watchlistcontains' => "Danh sách theo dõi của bạn có $1 trang.",
+'watcheditlist'     => 'Đây là sắp xếp theo chữ cái các trang bạn theo dõi. Chọn các trang bạn muốn ngưng theo dõi và nhấn "Ngưng theo dõi mục đã chọn".',
+'removingchecked'   => 'Đang ngưng theo dõi trang yêu cầu...',
+'couldntremove'     => "Không thể ngưng theo dõi trang '$1'...",
+'iteminvalidname'   => "Tên trang '$1' không hợp lệ...",
+'wlnote'            => "$1 sửa đổi mới trong <b>$2</b> giờ qua.",
+'wlshowlast'        => "Xem $1 giờ $2 ngày qua, hoặc $3",
+'wlsaved'           => 'Đây là bản lưu danh sách theo dõi.',
+
+# Delete/protect/revert
+
+'deletepage'    => 'Xóa trang',
+'confirm'       => 'Khẳng định',
+'excontent' => 'nội dung cũ là:',
+'exbeforeblank' => 'nội dung trước khi xóa là:',
+'exblank' => 'trang rỗng',
+'confirmdelete' => 'Khẳng định xóa',
+'deletesub'     => "(Xóa  \"$1\")",
+'historywarning' => '<b>Chú ý</b>: trang bạn sắp xóa đã có lịch sử:',
+'confirmdeletetext' => "Bạn sắp xóa hẳn một trang hoặc hình cùng với tất cả lịch sử của nó khỏi cơ sở dữ liệu. Xin khẳng định bạn hiểu rõ hậu quả có thể xảy ra, và bạn thực hiện đúng [[{{ns:4}}:Quy_định|quy định]].",
+'actioncomplete' => 'Xong',
+'deletedtext'   => "\"$1\" đã được xóa. Xem danh sách các xóa bỏ gần nhất tại $2.",
+'deletedarticle' => "đã xóa \"$1\"",
+'dellogpage'    => 'Nhật trình xóa',
+'dellogpagetext' => 'Danh sách xóa mới, theo giờ máy chủ (UTC).
+<ul>
+</ul>',
+'deletionlog'   => 'nhật trình xóa',
+'reverted'      => 'Đã quay lại phiên bản cũ',
+'deletecomment' => 'Lý do',
+'imagereverted' => 'Đã quay lại phiên bản cũ.',
+'rollback'      => 'Quay lại sửa đổi cũ',
+'rollback_short' => 'Quay lại',
+'rollbacklink'  => 'quay lại',
+'rollbackfailed' => 'Không quay lại được',
+'cantrollback'  => 'Không quay lại được; trang này có 1 tác giả.',
+'alreadyrolled' => "Không thể quay lại phiên bản của [[:$1]] bởi [[Thành_viên:$2|$2]] ([[Thảo_luận_thành_viên:$2|Thảo luận]]). Đã có sửa đổi lần cuối bởi [[Thành_viên:$3|$3]] ([[Thảo_luận_thành_viên:$3|Thảo luận]]).",
+#   only shown if there is an edit comment
+'editcomment' => "Tóm lược sửa đổi: \"<i>$1</i>\".",
+'revertpage'    => "đã hủy sửa đổi của $2, quay về phiên bản của $1",
+'sessionfailure' => 'Có thể có trục trặc với phiên đăng nhập của bạn; thao tác này đã bị hủy để tránh việc cướp quyền đăng nhập. Xin hãy tải lại trang và thử lại.',
+'protectlogpage' => 'Nhật trình khóa',
+'protectlogtext' => "Danh sách khóa/mở (xem [[{{ns:4}}:Các trang bị khóa|các trang bị khóa]]).",
+'protectedarticle' => "đã khóa $1",
+'unprotectedarticle' => "đã mở $1",
+'protectsub' =>"(Khóa \"$1\")",
+'confirmprotecttext' => 'Bạn thật sự muốn khóa trang này?',
+'confirmprotect' => 'Khẳng định khóa',
+'protectmoveonly' => 'Chỉ không cho di chuyển',
+'protectcomment' => 'Lý do',
+'unprotectsub' =>"(Mở \"$1\")",
+'confirmunprotecttext' => 'Bạn thật sự muốn mở trang này?',
+'confirmunprotect' => 'Khẳng định mở',
+'unprotectcomment' => 'Lý do',
+
+# Groups
+'editusergroup' => 'Sửa các nhóm thành viên',
+
+
+'userrights-lookup-user' => 'Quản lý nhóm thành viên',
+'userrights-user-editname' => 'Nhập tên thành viên:',
+
+# user groups editing
+#
+'userrights-editusergroup' => 'Sửa nhóm thành viên',
+'saveusergroups' => 'Lưu nhóm thành viên',
+'userrights-groupsmember' => 'Thành viên của:',
+'userrights-groupsavailable' => 'Các nhóm hiện nay:',
+'userrights-groupshelp' => 'Chọn nhóm mà bạn muốn thêm hay bớt thành viên. Các nhóm không được chọn sẽ không thay đổi. Có thể chọn nhóm bằng CTRL + Chuột trái',
+
+# Special:Undelete
+'undelete' => 'Khôi phục',
+'undeletepage' => 'Xem và khôi phục trang bị xóa',
+'undeletepagetext' => 'Các trang sau có thể khôi phục được từ thùng rác. Thùng rác được xóa định kỳ.',
+'undeletearticle' => 'Khôi phục',
+'undeleterevisions' => "$1 bản được lưu",
+'undeletehistory' => 'Nếu bạn khôi phục trang này, tất cả các phiên bản của nó sẽ được phục hồi vào lịch sử của trang. Nếu một trang mới có cùng tên đã được tạo ra kể từ khi xóa trang này, các phiên bản được khôi phục sẽ xuất hiện trong lịch sử trước, và phiên bản hiện hành của trang mới sẽ không bị thay thế.',
+'undeleterevision' => "Xóa lúc $1",
+'undeletebtn' => 'Khôi phục',
+'undeletedarticle' => "đã khôi phục \"$1\"",
+'undeletedrevisions' => "$1 bản được khôi phục",
+
+# Contributions
+'contributions' => 'Đóng góp',
+'mycontris'     => 'Đóng góp của tôi',
+'contribsub2'    => "Của $1 ($2)",
+'nocontribs'    => 'Không tìm thấy.',
+'ucnote'        => "<b>$1</b> thay đổi mới của người này trong <b>$2</b> ngày qua.",
+'uclinks'       => "Xem $1 thay đổi mới; xem $2 ngày qua.",
+'uctop'         => '(mới nhất)' ,
+'newbies'       => 'người mới',
+
+# What links here
+'whatlinkshere' => 'Liên kết đến đây',
+'notargettitle' => 'Không hiểu',
+'notargettext'  => 'Xin chỉ rõ trang mục tiêu.',
+'linklistsub'   => '(Các liên kết)',
+'linkshere'     => 'Các trang sau liên kết đến đây:',
+'nolinkshere'   => 'Không có liên kết đến đây.',
+'isredirect'    => 'trang đổi hướng',
+
+# Block/unblock IP
+
+'blockip'       => 'Cấm thành viên',
+'blockiptext'   => "Mẫu dưới để cấm một địa chỉ IP hoặc một tài khoản.
+Chức năng này chỉ nên dùng để ngăn những hành vi phá hoại, và phải tuân theo [[{{ns:4}}:Quy_định|quy_định]]. Xin cho biết lý do cấm.",
+'ipaddress'     => 'Địa chỉ IP/tên tài khoản',
+'ipbexpiry'     => 'Thời hạn',
+'ipbreason'     => 'Lý do',
+'ipbsubmit'     => 'Cấm',
+'badipaddress'  => 'Địa chỉ IP không hợp lệ',
+'blockipsuccesssub' => 'Đã cấm',
+'blockipsuccesstext' => "\"$1\" đã bị cấm.
+<br />Xem lại những lần cấm tại [[Đặc_biệt:Ipblocklist|danh sách cấm]].",
+'unblockip'     => 'Bỏ cấm',
+'unblockiptext' => 'Mẫu sau để khôi phục lại quyền sửa bài đối với một địa chỉ IP hoặc tài khoản đã bị cấm trước đó.',
+'ipusubmit'     => 'Bỏ cấm',
+'ipblocklist'   => 'Danh sách cấm',
+'blocklistline' => "$1, $2 đã cấm $3 (thời hạn $4)",
+'blocklink'     => 'cấm',
+'unblocklink'   => 'bỏ cấm',
+'contribslink'  => 'đóng góp',
+'autoblocker'   => "Bị tự động cấm vì dùng chung địa chỉ IP với \"$1\". Lý do \"$2\".",
+'blocklogpage'  => 'Nhật trình cấm',
+'blocklogentry' => 'đã cấm "$1", thời hạn $2',
+'blocklogtext'  => 'Nhật trình lưu những lần cấm và bỏ cấm. Các địa chỉ IP bị cấm tự động không được liệt kê. Xem thêm
+[[Đặc_biệt:Ipblocklist|danh sách cấm]].',
+'unblocklogentry'   => 'đã hết cấm "$1"',
+'range_block_disabled'  => 'Không được cấm hàng loạt.',
+'ipb_expiry_invalid'    => 'Thời điểm hết hạn không hợp lệ.',
+'ip_range_invalid'  => "Dải IP không hợp lệ.",
+'proxyblocker'  => 'Chặn proxy',
+'proxyblockreason'  => 'Địa chỉ IP của bạn đã bị cấm vì là proxy mở. Xin hãy liên hệ nhà cung cấp dịch vụ Internet hoặc bộ phận hỗ trợ kỹ thuật của bạn và thông báo với họ về vấn đề an ninh nghiêm trọng này.',
+'proxyblocksuccess' => "Đã xong.",
+// Chỗ này có thể lỗi
+'sorbs'         => 'SORBS DNSBL',
+'sorbsreason'   => 'Địa chỉ IP của bạn bị liệt kê là một proxy mở theo [http://www.sorbs.net SORBS] DNSBL.',
+'sorbs_create_account_reason' => 'Địa chỉ IP của bạn bị liệt kê là một proxy mở theo [http://www.sorbs.net SORBS] DNSBL. Bạn không thể mở được tài khoản.',
+
+# Developer tools
+'lockdb'        => 'Khóa cơ sở dữ liệu',
+'unlockdb'      => 'Mở cơ sở dữ liệu',
+'lockdbtext'    => 'Khóa cơ sở dữ liệu sẽ không cho phép người dùng sửa đổi các trang, thay đổi thông số cá nhân của họ, sửa danh sách theo dõi, và những thao tác khác đòi hỏi phải thay đổi trong cơ sở dữ liệu.
+Xin hãy khẳng định là bạn có ý định thực hiện điều này, và bạn sẽ mở khóa cơ sở dữ liệu khi xong công việc bảo trì của bạn.',
+'unlockdbtext'  => 'Mở khóa cơ sở dữ liệu sẽ lại cho phép các người dùng có thể sửa đổi trang, thay đổi thông số cá nhân của họ, sửa đổi danh sách theo dõi của họ, và nhiều thao tác khác đòi hỏi phải có thay đổi trong cơ sở dữ liệu.
+Xin hãy khẳng định đây là điều bạn định làm.',
+'lockconfirm'   => 'Vâng, tôi thực sự muốn khóa cơ sở dữ liệu.',
+'unlockconfirm' => 'Vâng, tôi thực sự muốn mở cơ sở dữ liệu.',
+'lockbtn'       => 'Khóa cơ sở dữ liệu',
+'unlockbtn'     => 'Mở cơ sở dữ liệu',
+'locknoconfirm' => 'Bạn đã không chọn vào ô khẳng định.',
+'lockdbsuccesssub' => 'Khóa thành công cơ sở dữ liệu',
+'unlockdbsuccesssub' => 'Mở thành công cơ sở dữ liệu',
+'lockdbsuccesstext' => 'Cơ sở dữ liệu đã bị khóa.
+<br />Nhớ bỏ khóa sau khi bảo trì xong.',
+'unlockdbsuccesstext' => 'Cơ sở dữ liệu đã được mở khóa.',
+
+# Rights log
+'rightslogtext'     => 'Đây là nhật trình lưu những thay đổi đối với các quyền hạn thành viên.',
+
+# Spam
+'spamprotectiontitle' => 'Bộ lọc chống thư rác',
+'spamprotectiontext' => 'Trang bạn muốn lưu bị bộ lọc thư rác chặn lại. Đây có thể do một liên kết dẫn tới một địa chỉ bên ngoài.',
+'spamprotectionmatch' => 'Nội dung sau đây đã kích hoạt bộ lọc thư rác: $1',
+
+'subcategorycount' => "Có $1 tiểu thể loại trong thể loại này.",
+'categoryarticlecount' => "Có $1 bài trong thể loại này.",
+'listingcontinuesabbrev' => " tiếp",
+
+# Patrolling
+#
+'markaspatrolleddiff'   => "Đánh dấu tuần tra",
+'markaspatrolledtext'   => "Đánh dấu tuần tra",
+'markedaspatrolled'     => "Đã đánh dấu tuần tra",
+'markedaspatrolledtext' => "Bản được đánh dấu đã tuần tra.",
+'rcpatroldisabled'      => "\"Thay đổi gần đây\" của các trang tuần tra không bật",
+'rcpatroldisabledtext'  => "Chức năng \"thay đổi gần đây\"  của các trang tuần tra hiện không được bật.",
+
+# Move page
+
+'movepage'      => 'Di chuyển',
+'movepagetext'  => 'Dùng mẫu dưới đây sẽ đổi tên một trang, đồng thời chuyển tất cả lịch sử của nó sang tên mới.
+*Tên cũ sẽ tự động đổi hướng sang tên mới.
+*Trang sẽ <b>không</b> bị chuyển nếu đã có một trang tại tên mới, trừ khi nó rỗng hoặc là trang đổi hướng và không có lịch sử sửa đổi. Điều này có nghĩa là bạn có thể đổi tên một trang lại như trước lúc nó được đổi tên nếu bạn nhầm, và bạn không thể ghi đè một trang đã có sẵn.
+*Những liên kết đến tên trang cũ sẽ không thay đổi; cần [[Đặc_biệt:DoubleRedirects|kiểm tra]] những trang chuyển hướng kép và sai.<br />
+<b>Bạn phải đảm bảo những liên kết tiếp tục trỏ đến đúng trang cần thiết.</b>',
+'movepagetalktext' => 'Trang thảo luận đi kèm nếu có, sẽ được tự động chuyển theo \'\'\'trừ khi:\'\'\'
+*Bạn đang chuyển xuyên qua không gian tên,
+*Một trang thảo luận đã tồn tại dưới tên bạn chọn, hoặc
+*Bạn không chọn vào ô bên dưới.
+
+Trong những trường hợp này, bạn phải di chuyển hoặc hợp nhất trang theo kiểu thủ công nếu muốn.',
+'movearticle'   => 'Di chuyển',
+'movenologin'   => 'Chưa đăng nhập',
+'movenologintext' => "Bạn phải [[Đặc_biệt:Userlogin|đăng nhập]] mới di chuyển trang được.",
+'newtitle'      => 'Tên mới',
+'movepagebtn'   => 'Di chuyển',
+'pagemovedsub'  => 'Di chuyển thành công',
+'pagemovedtext' => "Trang \"[[$1]]\" đổi thành \"[[$2]]\".",
+'articleexists' => 'Đã có một trang với tên đó, hoặc tên bạn chọn không hợp lệ.
+Xin hãy chọn tên khác.',
+'talkexists'    => 'Trang được di chuyển thành công, nhưng trang thảo luận tương ứng không thể chuyển được vì đã có một trang thảo luận ở tên mới.
+Xin hãy hợp nhất chúng lại.',
+'movedto'       => 'đổi thành',
+'movetalk'      => 'Di chuyển trang "thảo luận" nếu có.',
+'talkpagemoved' => 'Trang thảo luận tương ứng đã chuyển.',
+'talkpagenotmoved' => 'Trang thảo luận tương ứng <strong>không</strong> chuyển.',
+'1movedto2'     => "$1 đổi thành $2",
+'1movedto2_redir' => '$1 đổi thành $2 qua đổi hướng',
+'movereason' => 'Lý do',
+
+# Export page
+'export'        => 'Xuất các trang',
+'exporttext'    => 'Bạn có thể xuất nội dung và lịch sử sửa đổi của một trang hay tập hợp trang nào đó vào trong các XML. Trong tương lai, cũng có thể nhập vào một mạng khác chạy phần mềm MediaWiki.
+
+Để xuất nội dung các bài, gõ vào tên bài trong cửa sổ dưới đây, mỗi tên một hàng, và cho biết là bạn muốn chọn phiên bản hiện tại cùng với các phiên bản cũ của nó, với các dòng về lịch sử trang, hay chỉ phiên bản hiện hành với thông tin về lần sửa đổi cuối cùng.',
+'exportcuronly' => 'Chỉ xuất phiên bản hiện hành, không xuất tất cả lịch sử trang',
+
+# Namespace 8 related
+'allmessages'   => 'Thông báo hệ thống',
+'allmessagesname' => 'Tên thông báo',
+'allmessagesdefault' => 'Nội dung mặc định',
+'allmessagescurrent' => 'Nội dung hiện thời',
+'allmessagestext'   => 'Đây là toàn bộ thông báo hệ thống có trong không gian tên MediaWiki: .',
+'allmessagesnotsupportedUI' => 'Ngôn ngữ giao diện hiện tại của bạn <b>$1</b> không được Đặc_biệt:AllMessages hỗ trợ tại đây.',
+'allmessagesnotsupportedDB' => 'Đặc_biệt:AllMessages không được hỗ trợ vì wgUseDatabaseMessages bị tắt.',
+
+# Thumbnails
+'thumbnail-more'    => 'Phóng lớn',
+'missingimage'      => "<b>Không có hình</b><br /><i>$1</i>",
+'filemissing'       => 'Không có tệp tin',
+
+# Special:Import
+'import'    => 'Nhập các trang',
+'importtext'    => 'Xin hãy xuất tập tin từ wiki nguồn sử dụng công cụ Đặc_biệt:Export, lưu nó vào đĩa và tải lên ở đây.',
+'importfailed'  => "Không nhập được: $1",
+'importnotext'  => 'Trang trống không có nội dung',
+'importsuccess' => 'Nhập thành công!',
+'importhistoryconflict' => 'Có mâu thuẫn trong lịch sử của các phiên bản (trang này có thể đã được nhập vào trước đó)',
+
+# Keyboard access keys for power users
+'accesskey-compareselectedversions' => 'v',
+'accesskey-minoredit'		=> 'i',
+'accesskey-preview'			=> 'p',
+'accesskey-save'			=> 's',
+'accesskey-search'			=> 'f',
+
+# tooltip help for the main actions
+'tooltip-search' => 'Tìm kiếm',
+'tooltip-minoredit' => 'Đánh dấu đây là sửa đổi nhỏ',
+'tooltip-save' => 'Lưu lại những thay đổi của bạn',
+'tooltip-preview' => 'Xem thử những thay đổi trước khi lưu!',
+'tooltip-compareselectedversions' => 'Xem khác biệt giữa hai phiên bản của trang này.',
+'tooltip-watch' => 'Cho trang này vào danh sách theo dõi',
+
+# Metadata
+'nodublincore' => 'Máy chủ không hỗ trợ siêu dữ liệu Dublin Core RDF.',
+'nocreativecommons' => 'Máy chủ không hỗ trợ siêu dữ liệu Creative Commons RDF.',
+'notacceptable' => 'Máy chủ không thể cho ra định dạng dữ liệu tương thích với phần mềm của bạn.',
+
+# Attribution
+'anonymous' => "Thành viên vô danh của {{SITENAME}}",
+'siteuser' => "Thành viên $1 của {{SITENAME}}",
+'lastmodifiedatby' => "Trang này được $3 cập nhật lần cuối lúc $2, $1.",
+'and' => 'và',
+'othercontribs' => "dựa trên công trình của $1.",
+'others' => 'những người khác',
+'siteusers' => "Thành viên $1 của {{SITENAME}}",
+'creditspage' => 'Trang ghi nhận đóng góp',
+'nocredits' => 'Không có thông tin ghi nhận đóng góp cho trang này.',
+
+# confirmemail
+'confirmemail' => 'Xác nhận thư điện tử',
+'confirmemail_text' => 'Cần kiểm tra địa chỉ thư điện tử trước khi lưu. Ấn nút bên dưới để gửi thư xác nhận đến địa chỉ. Thư xác nhận có một mã xác nhận; khi bạn nhập mã xác nhận vào đây, địa chỉ thư điện tử của bạn sẽ được xác nhận.',
+'confirmemail_send' => 'Gửi thư xác nhận',
+'confirmemail_sent' => 'Thư xác nhận đã được gửi',
+'confirmemail_sendfailed' => 'Không thể gửi thư xác nhận. Xin kiểm tra lại địa chỉ thư.',
+'confirmemail_invalid' => 'Mã xác nhận sai. Mã này có thể đã hết hạn',
+'confirmemail_success' => 'Thư điện tử của bạn đã được xác nhận. Bạn có thể đăng nhập được.',
+'confirmemail_loggedin' => 'Địa chỉ thư điện tử của bạn đã được xác nhận',
+'confirmemail_error' => 'Có trục trặc',
+'confirmemail_subject' => 'Xác nhận thư điện tử tại {{SITENAME}}',
+'confirmemail_body' => 'Ai đó, có thể là bạn, với địa chỉ thư điện tử $1, đã mở tài khoản "$2" dùng địa chỉ này ở {{SITENAME}}.
+
+Để xác nhận rằng tài khoản này của bạn và dùng chức năng thư điện tử ở {{SITENAME}}, xin mở địa chỉ mạng sau :
+
+$3
+
+Nếu không phải bạn, đừng mở địa chỉ này. Mã xác nhận này sẽ hết hạn lúc $4.',
+
+# Math
+'mw_math_png' => 'Luôn cho ra dạng hình PNG',
+'mw_math_simple' => 'HTML nếu rất đơn giản, nếu không PNG',
+'mw_math_html' => 'HTML nếu có thể, nếu không PNG',
+'mw_math_source' => 'Để là TeX (cho trình duyệt văn bản)',
+'mw_math_modern' => 'Dành cho trình duyệt hiện đại',
+'mw_math_mathml' => 'MathML nếu có thể',
+
+'usercssjsyoucanpreview' => "'''Chú ý :''' xem thử trước để kiểm tra trang css/js mới trước khi lưu.",
+'usercsspreview' => "'''Bạn đang xem thử trang css và nó chưa được lưu !'''",
+'userjspreview' => "'''Bạn đang xem thử trang Javascript và nó chưa được lưu !'''",
+
+# stylesheets
+'monobook.css' => '/* edit this file to customize the monobook skin for the entire site */',
+# Monobook.js: tooltips and access keys for monobook
+'monobook.js' => '/* Deprecated; use [[MediaWiki:common.js]] */',
+
+'accesskey-pt-userpage' => '.',
+'tooltip-pt-userpage' => 'Trang của tôi',
+'accesskey-pt-anonuserpage' => '.',
+'tooltip-pt-anonuserpage' => 'Trang của IP bạn đang dùng',
+'accesskey-pt-mytalk' => 'n',
+'tooltip-pt-mytalk' => 'Thảo luận với tôi',
+'accesskey-pt-anontalk' => 'n',
+'tooltip-pt-anontalk' => 'Thảo luận với địa chỉ IP này',
+'accesskey-pt-preferences' => '',
+'tooltip-pt-preferences' => 'Lựa chọn cá nhân của tôi',
+'accesskey-pt-watchlist' => 'l',
+'tooltip-pt-watchlist' => 'Thay đổi của các trang tôi theo dõi.',
+'accesskey-pt-mycontris' => 'y',
+'tooltip-pt-mycontris' => 'Đóng góp của tôi',
+'accesskey-pt-login' => 'o',
+'tooltip-pt-login' => 'Đăng nhập sẽ có lợi hơn, tuy nhiên không bắt buộc.',
+'accesskey-pt-anonlogin' => 'o',
+'tooltip-pt-anonlogin' => 'Không đăng nhập vẫn tham gia được, tuy nhiên đăng nhập sẽ lợi hơn.',
+'accesskey-pt-logout' => '',
+'tooltip-pt-logout' => 'Đăng xuất',
+'accesskey-ca-talk' => 't',
+'tooltip-ca-talk' => 'Thảo luận về trang này',
+'accesskey-ca-edit' => 'e',
+'tooltip-ca-edit' => 'Bạn có thể sửa được trang này. Xin xem thử trước khi lưu.',
+'accesskey-ca-addsection' => '+',
+'tooltip-ca-addsection' => 'Thêm bình luận vào đây.',
+'accesskey-ca-viewsource' => 'e',
+'tooltip-ca-viewsource' => 'Trang này được khóa. Bạn có thể xem mã nguồn.',
+'accesskey-ca-history' => 'h',
+'tooltip-ca-history' => 'Những phiên bản cũ của trang này.',
+'accesskey-ca-protect' => '=',
+'tooltip-ca-protect' => 'Khóa trang này lại',
+'accesskey-ca-delete' => 'd',
+'tooltip-ca-delete' => 'Xóa trang này',
+'accesskey-ca-undelete' => 'd',
+'tooltip-ca-undelete' => 'Khôi phục lại những sửa đổi trên trang này trước khi nó bị xóa',
+'accesskey-ca-move' => 'm',
+'tooltip-ca-move' => 'Di chuyển trang này',
+'accesskey-ca-nomove' => '',
+'tooltip-ca-nomove' => 'Bạn không thể di chuyển trang này',
+'accesskey-ca-watch' => 'w',
+'tooltip-ca-watch' => 'Thêm trang này vào danh sách theo dõi',
+'accesskey-ca-unwatch' => 'w',
+'tooltip-ca-unwatch' => 'Bỏ trang này khỏi danh sách theo dõi',
+'accesskey-search' => 'f',
+'tooltip-search' => 'Tìm kiếm',
+'accesskey-p-logo' => '',
+'tooltip-p-logo' => 'Trang đầu',
+'accesskey-n-mainpage' => 'z',
+'tooltip-n-mainpage' => 'Trang đầu của dự án mở',
+'accesskey-n-portal' => '',
+'tooltip-n-portal' => 'Giới thiệu dự án, cách sử dụng, tìm kiếm thông tin ở đây',
+'accesskey-n-currentevents' => '',
+'tooltip-n-currentevents' => 'Xem thời sự',
+'accesskey-n-recentchanges' => 'r',
+'tooltip-n-recentchanges' => 'Danh sách các thay đổi gần đây',
+'accesskey-n-randompage' => 'x',
+'tooltip-n-randompage' => 'Xem trang ngẫu nhiên',
+'accesskey-n-help' => '',
+'tooltip-n-help' => 'Nơi tìm hiểu thêm cách dùng.',
+'accesskey-n-sitesupport' => '',
+'tooltip-n-sitesupport' => 'Quyên góp xây dựng dự án mở',
+'accesskey-t-whatlinkshere' => 'j',
+'tooltip-t-whatlinkshere' => 'Các trang liên kết đến đây',
+'accesskey-t-recentchangeslinked' => 'k',
+'tooltip-t-recentchangeslinked' => 'Thay đổi gần đây của các trang liên kết đến đây',
+'accesskey-feed-rss' => '',
+'tooltip-feed-rss' => 'Nạp RSS cho trang này',
+'accesskey-feed-atom' => '',
+'tooltip-feed-atom' => 'Nạp Atom cho trang này',
+'accesskey-t-contributions' => '',
+'tooltip-t-contributions' => 'Xem đóng góp của người này',
+'accesskey-t-emailuser' => '',
+'tooltip-t-emailuser' => 'Gửi thư cho người này',
+'accesskey-t-upload' => 'u',
+'tooltip-t-upload' => 'Tải hình ảnh hoặc tệp tin lên',
+'accesskey-t-specialpages' => 'q',
+'tooltip-t-specialpages' => 'Danh sách các trang đặc biệt',
+'accesskey-ca-nstab-main' => 'c',
+'tooltip-ca-nstab-main' => 'Xem trang này',
+'accesskey-ca-nstab-user' => 'c',
+'tooltip-ca-nstab-user' => 'Xem trang về người này',
+'accesskey-ca-nstab-media' => 'c',
+'tooltip-ca-nstab-media' => 'Xem trang phương tiện',
+'accesskey-ca-nstab-special' => '',
+'tooltip-ca-nstab-special' => 'Đây là một trang dặc biệt, bạn không thể sửa đổi được nó.',
+'accesskey-ca-nstab-project' => 'a',
+'tooltip-ca-nstab-project' => 'Xem trang dự án',
+'accesskey-ca-nstab-image' => 'c',
+'tooltip-ca-nstab-image' => 'Xem trang hình',
+'accesskey-ca-nstab-mediawiki' => 'c',
+'tooltip-ca-nstab-mediawiki' => 'Xem thông báo hệ thống',
+'accesskey-ca-nstab-template' => 'c',
+'tooltip-ca-nstab-template' => 'Xem tiêu bản',
+'accesskey-ca-nstab-help' => 'c',
+'tooltip-ca-nstab-help' => 'Xem trang trợ giúp',
+'accesskey-ca-nstab-category' => 'c',
+'tooltip-ca-nstab-category' => 'Xem trang thể loại',
+
+
+# EXIF
+'exif-imagewidth' => 'Bề ngang',
+'exif-imagelength' => 'Chiều cao',
+'exif-compression' => 'Kiểu nén',
+'exif-samplesperpixel' => 'Số mẫu trên điểm ảnh',
+'exif-xresolution' => 'Phân giải trên bề ngang',
+'exif-yresolution' => 'Phân giải theo chiều cao',
+'exif-jpeginterchangeformat' => 'Vị trí SOI JPEG',
+'exif-jpeginterchangeformatlength' => 'Kích cỡ (byte) của JPEG',
+'exif-transferfunction' => 'Hàm chuyển đổi',
+'exif-datetime' => 'Ngày tháng sửa',
+'exif-imagedescription' => 'Tiêu đề của hình',
+'exif-make' => 'Hãng máy ảnh',
+'exif-model' => 'Kiểu máy ảnh',
+'exif-software' => 'Phần mềm đã dùng',
+'exif-artist' => 'Tác giả',
+'exif-copyright' => 'Bản quyền',
+'exif-exifversion' => 'Phiên bản exif',
+'exif-makernote' => 'Lưu ý của nhà sản xuất',
+'exif-relatedsoundfile' => 'Tệp âm thanh liên quan',
+'exif-flash' => 'Đèn chớp',
+'exif-whitebalance' => 'Độ sáng trắng',
+'exif-contrast' => 'Độ tương phản',
+'exif-saturation' => 'Độ bão hòa',
+'exif-compression-1' => 'Không nén',
+'exif-orientation-1' => 'Thường',
+'exif-orientation-2' => 'Lộn ngược theo phương ngang',
+'exif-orientation-3' => 'Quay 180°',
+'exif-orientation-4' => 'Lộn ngược theo phương dọc',
+'exif-orientation-5' => 'Quay 90° bên trái và lộn thẳng đứng',
+'exif-orientation-6' => 'Quay 90° bên phải',
+'exif-orientation-7' => 'Quay 90° bên phải và lộn thẳng đứng',
+'exif-orientation-8' => 'Quay 90° bên trái',
+'exif-componentsconfiguration-0' => 'không có',
+'exif-aperturevalue' => 'Độ mở ống kính',
+'exif-bitspersample' => 'Bit trên mẫu',
+'exif-brightnessvalue' => 'Độ sáng',
+'exif-cfapattern' => 'Mẫu CFA',
+'exif-colorspace' => 'Không gian màu',
+'exif-componentsconfiguration' => 'Ý nghĩa thành phần',
+'exif-compressedbitsperpixel' => 'Độ nén (bit/điểm)',
+'exif-contrast-0' => 'Thường',
+'exif-contrast-1' => 'Nhẹ',
+'exif-contrast-2' => 'Mạnh',
+'exif-customrendered' => 'Sửa hình thủ công',
+'exif-customrendered-0' => 'Thường',
+'exif-customrendered-1' => 'Thủ công',
+
+
+# Info
+"infosubtitle" => "Thông tin về trang",
+"numedits" => "Số lần sửa đổi (bài chính): $1",
+"numtalkedits" => "Số lần sửa đổi  (trang thảo luận): $1",
+"numwatchers" => "Số người theo dõi: $1",
+"numauthors" => "Số người sửa đổi khác nhau (bài chính): $1",
+"numtalkauthors" => "Số người sửa đổi khác nhau (trang thảo luận): $1",
+
+# labels for User: and Title: on Special:Log pages
+'specialloguserlabel' => 'Thành viên:',
+'speciallogtitlelabel' => 'Tên bài:',
+
+#Logs
+'alllogstext' => 'Xem nhật trình tải lên, xóa, khóa, cấm, quản lý. Có thể xem theo từng loại, theo tên thành viên, hoặc tên trang.',
+'allnotinnamespace' => 'Mọi trang (không trong không gian $1)',
+'allpagesfrom' => 'Xem trang từ:',
+
+# new stuffs
+'changed' => 'Đã sửa',
+'compareselectedversions' => 'So sánh các bản đã chọn',
+'createarticle' => 'Viết bài mới',
+'created' => 'đã viết mới',
+'currentevents-url' => 'Thời_sự',
+'currentrevisionlink' => 'xem bản hiện nay',
+'data' => 'dữ liệu',
+'default' => 'mặc định',
+'delete_and_move' => 'Xóa và đổi tên',
+'delete_and_move_reason' => 'Xóa để có chỗ đổi tên',
+'delete_and_move_text' => ' ==Cần xóa==
+Bài với tên "[[$1]]" đã tồn tại. Bạn có muốn xóa nó để di chuyển tới tên này không?',
+'deletedrev' => '[đã xóa]',
+'destfilename' => 'Tên mới',
+'edit-externally'=> 'Sửa bằng phần mềm bên ngoài',
+'edit-externally-help' => '* Xem thêm [http://meta.wikimedia.org/wiki/Help:External_editors hướng dẫn bằng tiếng Anh]',
+
+'emptyfile' => 'Tệp tin tải lên là rỗng. Xin kiểm tra lại tên tệp tin.',
+'enotif_body' => 'Gửi $WATCHINGUSERNAME,  trang $PAGETITLE tại {{SITENAME}} đã được $CHANGEDORCREATED vào $PAGEEDITDATE bởi $PAGEEDITOR, xem {{fullurl:$PAGETITLE_RAWURL}} để biết phiên bản hiện nay. Tóm tắt của $NEWPAGE: $PAGESUMMARY $PAGEMINOREDIT Liên hệ người sửa: thư {{fullurl:Special:Emailuser|target=$PAGEEDITOR_RAWURL}}  {{fullurl:User:$PAGEEDITOR_RAWURL}} Sẽ không có thông báo mới nếu bạn không xem trang này. Bạn có thể thay đổi các cài đặt về các trang theo dõi. Hệ thống thông báo {{SITENAME}} -- Để thay đổi cài đặt, mời vào {{fullurl:Special:Watchlist|edit=yes}} Góp ý của bạn: {{fullurl:Help:Contents}}',
+'enotif_lastvisited' => 'Xem {{fullurl:$PAGETITLE_RAWURL|diff=0&oldid=$OLDID}} để biết các thay đổi từ khi bạn xem lần cuối.',
+'enotif_mailer' => 'Thông báo của {{SITENAME}}',
+'enotif_newpagetext' => 'Trang này mới',
+'enotif_reset' => 'Đánh dấu đã xem mọi trang',
+'enotif_subject' => '$PAGETITLE tại {{SITENAME}} đã thay đổi $CHANGEDORCREATED bởi $PAGEEDITOR',
+'excontentauthor' => 'nội dung cũ: "$1" (người viết duy nhất "$2")',
+'externaldberror' => 'Có thể có lỗi cơ sở dữ liệu hoặc bạn không thể cập nhật tài khoản bên ngoài.',
+'files' => 'Tệp tin',
+'histfirst' => 'cũ nhất',
+'histlast' => 'mới nhất',
+'imagelistall' => 'tất cả',
+'immobile_namespace' => 'Tên mới đặc biệt; không đổi sang tên đó được.',
+'importinterwiki' => 'Nhập giữa các wiki',
+'importnosources' => 'Không có nguồn nhập giữa wiki và việc nhập lịch sử bị tắt.',
+'info_short' => 'Thông tin',
+'intl' => 'Liên kết liên ngôn ngữ',
+'invalidemailaddress' => 'Địa chỉ thư điện tử có vẻ sai. Xin nhập lại.',
+'invert' => 'Đảo ngược lựa chọn',
+'ipboptions' => '2 giờ:2 hours,1 ngày:1 day,3 ngày:3 days,1 tuần:1 week,2 tuần:2 weeks,1 tháng:1 month,3 tháng:3 months,6 tháng:6 months,1 năm:1 year,vô hạn:infinite',
+'ipbother' => 'Thời hạn khác',
+'ipbotheroption' => 'khác',
+'log' => 'Nhật trình',
+"mainpagedocfooter" => "Xin đọc [http://meta.wikimedia.org/wiki/MediaWiki_i18n tài liệu hướng dẫn cách tùy biến giao diện] và [http://meta.wikimedia.org/wiki/MediaWiki_User%27s_Guide Cẩm nang sử dụng] (bằng tiếng Anh) để biết cách dùng và thiết lập thông số.",
+'mediawarning' => " '''Cảnh báo''': Tệp tin này có thể làm hại máy tính của bạn. <hr />",
+'movelogpage' => 'Nhật trình đổi tên',
+'movelogpagetext' => 'Các trang bị đổi tên.',
+'namespace' => 'Không gian:',
+"newwindow"     => "(mở cửa sổ mới)",
+'nextpage'          => 'Bài sau ($1)',
+'noemailprefs' => '<strong>Không có địa chỉ thư điện tử</strong>, chức năng sau có thể không hoạt động.',
+'noimages'  => 'Chưa có hình',
+'nonunicodebrowser' => '<strong>CHU Y: Trinh duyet cua ban khong ho tro Unicode, xin sua lai truoc khi viet bai.</strong><strong>WARNING: Your browser is not unicode compliant, please change it before editing an article.</strong>',
+'number_of_watching_users_pageview' => ' [$1 người xem]',
+'passwordtooshort' => 'Mật khẩu cần chứa ít nhất $1 chữ.',
+'perfcached' => 'Dữ liệu sau lấy từ bộ nhớ đệm và có thể không cập nhật:',
+'prefs-help-email-enotif' => 'Địa chỉ thư này cũng được dùng để gửi bạn thư thông báo nếu bạn lựa chọn chức năng này.',
+'print' => 'In',
+'recentchangesall' => 'tất cả',
+'restrictedpheading' => 'Trang đặc biệt hạn chế',
+'revertmove' => 'lùi lại',
+'saveusergroups' => 'Lưu nhóm thành viên',
+'scarytranscludedisabled' => 'Liên wiki bị tắt',
+'scarytranscludefailed' => 'Tiêu bản cho $1 bị tắt',
+'scarytranscludetoolong' => 'Địa chỉ mạng dài quá',
+'searchfulltext' => 'Tìm toàn văn',
+'shareduploadwiki' => 'Xin xem thêm [$1 mô tả tệp tin]',
+'showdiff' => 'Xem thay đổi',
+'sourcefilename' => 'Tên tệp tin nguồn',
+
+'templatesused' => 'Các tiêu bản dùng trong trang này',
+'thumbsize' => 'Kích thước thu nhỏ:&nbsp;',
+'tooltip-diff' => 'Xem thay đổi bạn đã thực hiện',
+'tryexact' => 'Thử tìm đoạn văn khớp chính xác với từ khóa',
+'upload_directory_read_only' => 'Thư mục tải lên không ghi vào được',
+'uploadvirus' => 'Tệp tin có virút: $1',
+'userrights' => 'Quản lý quyền thành viên',
+'views' => 'Xem',
+'watchlistall1' => 'tất cả',
+'watchlistall2' => 'tất cả',
+'wlheader-enotif' => '* Đã bật thông báo qua thư điện tử.',
+'wlheader-showupdated' => "* Các trang đã thay đổi từ lần cuối bạn xem chúng được in '''đậm'''",
+'wlhideshowown' => '$1 sửa đổi của tôi',
+'yourdomainname' => 'Tên miền của bạn',
+'yourvariant' => 'Ngôn ngữ địa phương',
+'sitesupport-url' => '{{ns:4}}:Quyên_góp',
+'uploadnewversion-linktext' => 'Tải lên phiên bản mới',
+'selfmove' => 'Tên mới giống tên cũ; không đổi tên được.',
+'ipadressorusername' => 'Địa chỉ IP hay tên thành viên',
+'fileinfo' => ' $1Ko, kiểu MIME: <tt>$2</tt>',
+'groups' => 'Các nhóm',
+'noimage' => 'Không có hình này, bạn có thể [$1 tải nó lên]',
+'proxyblocksuccess'	=> "Xong.",
+
+'namespacesall' => 'tất cả',
+'fileuploadsummary' => 'tóm tắt',
+'prefixindex' => 'Mục lục theo không gian tên',
+'mostlinked'=>'Trang được liên kết đến nhiều nhất',
+'unusedcategories' => 'Thể loại chưa dùng',
+'permalink' => 'Liên kết thường trực',
+'noimage-linktext' => 'tải lên',
+'nolicense' => 'chưa chọn',
+
+# Còn cần việt hóa phần exif rất dài nữa
+
+// exifgps:
+
+);
+
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesVls.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesVls.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesVls.php	(revision 1280)
@@ -0,0 +1,29 @@
+<?php
+/**
+ * West Flemish (West-Vlams)
+ *
+ * @addtogroup Language
+*/
+
+$namespaceNames = array(
+	NS_MEDIA          => 'Media',
+	NS_SPECIAL        => 'Specioal',
+	NS_MAIN           => '',
+	NS_TALK           => 'Discuusje',
+	NS_USER           => 'Gebruker',
+	NS_USER_TALK      => 'Discuusje_gebruker',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK   => 'Discuusje_$1',
+	NS_IMAGE          => 'Ofbeeldienge',
+	NS_IMAGE_TALK     => 'Discuusje_ofbeeldienge',
+	NS_MEDIAWIKI      => 'MediaWiki',
+	NS_MEDIAWIKI_TALK => 'Discuusje_MediaWiki',
+	NS_TEMPLATE       => 'Patrôon',
+	NS_TEMPLATE_TALK  => 'Discuusje_patrôon',
+	NS_HELP           => 'Ulpe',
+	NS_HELP_TALK      => 'Discuusje_ulpe',
+	NS_CATEGORY       => 'Categorie',
+	NS_CATEGORY_TALK  => 'Discuusje_categorie',
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesWa.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesWa.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesWa.php	(revision 1280)
@@ -0,0 +1,1776 @@
+<?php
+/**
+ * Walloon (Walon)
+ *
+ * @addtogroup Language
+ */
+
+# lists "no preferences", normall (long) walloon date,
+# short walloon date, and ISO format
+# MW_DATE_DMY is alias for long format, as it is dd mmmmm yyyy.
+$datePreferences = array(
+	'default',
+	'dmy',
+	'walloon short',
+	'ISO 8601'
+);
+
+$datePreferenceMigrationMap = array(
+	0 => 'default',
+	2 => 'dmy',
+	4 => 'walloon short',
+);
+$defaultDateFormat = 'dmy';
+
+$dateFormats = array(
+	'walloon short time' => 'H:i'
+);
+
+$namespaceNames = array(
+	NS_MEDIA          => "Media", /* Media */
+	NS_SPECIAL        => "Sipeciås", /* Special */
+	NS_MAIN           => "",
+	NS_TALK           => "Copene", /* Talk */
+	NS_USER	          => "Uzeu", /* User */
+	NS_USER_TALK      => "Uzeu_copene", /* User_talk */
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK   => '$1_copene',
+	NS_IMAGE          => "Imådje", /* Image */
+	NS_IMAGE_TALK     => "Imådje_copene", /* Image_talk */
+	NS_MEDIAWIKI      => "MediaWiki", /* MediaWiki */
+	NS_MEDIAWIKI_TALK => "MediaWiki_copene", /* MediaWiki_talk */
+	NS_TEMPLATE       => "Modele",
+	NS_TEMPLATE_TALK  => "Modele_copene",
+	NS_HELP           => "Aidance",
+	NS_HELP_TALK      => "Aidance_copene",
+	NS_CATEGORY       => "Categoreye",
+	NS_CATEGORY_TALK  => "Categoreye_copene",
+);
+
+# definixha del cogne po les limeros
+# (number format definition)
+# en: 12,345.67 -> wa: 12 345,67
+$separatorTransformTable = array(',' => "\xc2\xa0", '.' => ',' );
+
+#$linkTrail = '/^([a-zåâêîôûçéèA-ZÅÂÊÎÔÛÇÉÈ]+)(.*)$/sDu';
+$linkTrail = '/^([a-zåâêîôûçéè]+)(.*)$/sDu';
+
+#
+# NOTE:
+# sysop = manaedjeu
+# bureaucrat = mwaisse-manaedjeu
+#
+
+$messages = array(
+# User preference toggles
+'tog-underline' => 'Sorlignî les loyéns',
+'tog-highlightbroken' => 'Håyner les vudes loyéns <a href="" class="new">come çouchal</a><br /> &nbsp;&nbsp;&nbsp; (oudonbén: come çouchal<a href="" class="internal">?</a>).',
+'tog-justify' => 'Djustifyî les hagnons',
+'tog-hideminor' => 'Èn nén moster les <i>dierins candjmints</i> mineurs',
+'tog-extendwatchlist' => 'Ragrandi l\' djivêye po mostrer tos les candjmints',
+'tog-usenewrc' => 'Ramidrés <i>dierins candjmints</i> (JavaScript)',
+'tog-numberheadings' => 'Limerotaedje otomatike des tites',
+'tog-showtoolbar' => 'Mostrer l\' bår d\' usteyes e môde candjmint (JavaScript)',
+'tog-editondblclick' => 'Candjî les pådjes avou on dobe-clitch (JavaScript)',
+'tog-editsection' => 'Eployî les loyéns «[candjî]» po candjî rén k\' ene seccion',
+'tog-editsectiononrightclick' => 'Candjî les seccions avou on dobe-clitch sol tite (JavaScript)',
+'tog-showtoc' => 'Mostrer l\' tåvlea d\' ådvins<br />(po ls årtikes avou pus di 3 seccions)',
+'tog-rememberpassword' => 'Rimimbrer li scret inte les sessions',
+'tog-editwidth' => 'Li boesse d\' aspougnaedje prind tote li lårdjeu',
+'tog-watchcreations' => 'Mete les pådjes ki dj\' askepieye dins l\' djivêye des pådjes shuvowes',
+'tog-watchdefault' => 'Shuve les årtikes ki dj\' fwai ou ki dj\' candje',
+'tog-minordefault' => 'Prémete mes candjmints come mineurs',
+'tog-previewontop' => 'Prévey l\' årtike å dzeu del boesse d\' aspougnaedje',
+'tog-previewonfirst' => 'Prévey l\' årtike å prumî candjmint',
+'tog-nocache' => 'Èn nén eployî d\' muchete pol håynaedje des pådjes',
+'tog-enotifwatchlistpages' => 'M\' emiler cwand ene pådje shuvowe candje',
+'tog-enotifusertalkpages' => 'M\' emiler cwand l\' pådje di copene da minne candje',
+'tog-enotifminoredits' => 'M\' emiler eto po les ptits candjmints',
+'tog-enotifrevealaddr' 		=> 'Moster mi adresse emile dins les emiles di notifiaedje',
+'tog-shownumberswatching' => 'Mostrer l\' nombe d\' uzeus ki shuvèt l\' pådje',
+'tog-fancysig' => 'Sinateure brute (sins loyén otomatike)',
+'tog-showjumplinks' => 'Mete en alaedje les loyéns di naiviaedje «potchî a» å dzeu del pådje (pol pea «Myskin» et ds ôtes)',
+'tog-uselivepreview' => 'Eployî l\' prévoeyaedje abeye (JavaScript) (Esperimintå)',
+'tog-forceeditsummary' => 'M\' advierti cwand dji lai vude on rascourti',
+'tog-watchlisthideown' => 'Èn nén mostrer les candjmints da minne',
+'tog-watchlisthidebots' => 'Èn nén mostrer les candjmints des robots',
+
+'underline-always' => 'Tofer',
+'underline-never' => 'Måy',
+'underline-default' => 'Valixhance do betchteu',
+
+'skinpreview' => '(vey divant)',
+
+# dates
+'sunday' => 'dimegne',
+'monday' => 'londi',
+'tuesday' => 'mårdi',
+'wednesday' => 'mierkidi',
+'thursday' => 'djudi',
+'friday' => 'vénrdi',
+'saturday' => 'semdi',
+'january' => 'djanvî',
+'february' => 'fevrî',
+'march' => 'måss',
+'april' => 'avri',
+'may_long' => 'may',
+'june' => 'djun',
+'july' => 'djulete',
+'august' => 'awousse',
+'september' => 'setimbe',
+'october' => 'octôbe',
+'november' => 'nôvimbe',
+'december' => 'decimbe',
+'jan' => 'dja',
+'feb' => 'fev',
+'mar' => 'mås',
+'apr' => 'avr',
+'may' => 'may',
+'jun' => 'djn',
+'jul' => 'djl',
+'aug' => 'awo',
+'sep' => 'set',
+'oct' => 'oct',
+'nov' => 'nôv',
+'dec' => 'dec',
+
+# Bits of text used by many pages:
+#
+'categories' => 'Categoreyes',
+'pagecategories' => '{{PLURAL:$1|Categoreye|Categoreyes}}',
+'category_header' => 'Årtikes el categoreye «$1»',
+'subcategories' => 'Dizo-categoreyes',
+#'linkprefix'		=> '/^(.*?)([a-zA-Z\x80-\xff]+)$/sD',
+'mainpage' => 'Mwaisse pådje',
+'mainpagetext' => '<big>\'\'\'Li programe Wiki a stî astalé a l\' idêye.\'\'\'</big>',
+
+'portal' => 'Inte di nozôtes',
+'portal-url' => '{{ns:project}}:Inte di nozôtes',
+'about' => 'Åd fwait',
+'aboutsite' => 'Åd fwait di {{SITENAME}}',
+'aboutpage' => '{{ns:project}}:Åd fwait',
+'article' => 'Årtike',
+'help' => 'Aidance',
+'helppage' => '{{ns:help}}:Aidance',
+'bugreports' => 'Rapoirts di bugs',
+'bugreportspage' => '{{ns:project}}:Rapoirts di bugs',
+'sitesupport' => 'Ecwårlaedje',
+'sitesupport-url' => '{{ns:project}}:Ecwårlaedje',
+'faq' => 'FAQ',
+'faqpage' => '{{ns:project}}:FAQ',
+'edithelp' => 'Aidance',
+'newwindow' => '(drovant en on novea purnea)',
+'edithelppage' => '{{ns:help}}:Kimint candjî ene pådje',
+'cancel' => 'Rinoncî',
+'qbfind' => 'Trover',
+'qbbrowse' => 'Foyter',
+'qbedit' => 'Candjî',
+'qbpageoptions' => 'Cisse pådje ci',
+'qbpageinfo' => 'Contecse',
+'qbmyoptions' => 'Mes pådjes',
+'qbspecialpages' => 'Pådjes sipeciåles',
+'moredotdotdot' => 'Co dpus...',
+'mypage' => 'Mi pådje',
+'mytalk' => 'Mi copinaedje',
+'anontalk' => 'Pådje di copene po ciste adresse IP',
+'navigation' => 'Naiviaedje',
+
+# Metadata in edit box
+'metadata_help' => 'Meta-dnêyes (loukîz [[{{ns:project}}:Meta-dnêyes]] po pus di racsegnes)',
+
+'currentevents' => 'Actouwålités',
+'currentevents-url' => 'Actouwålités',
+
+'errorpagetitle' => 'Aroke',
+'returnto' => 'Rivni al pådje «$1».',
+'tagline' => 'Èn årtike di {{SITENAME}}.',
+'search' => 'Cweri',
+'searchbutton' => 'Cweri',
+'go' => 'Potchî',
+'searcharticle' => 'Potchî',
+'history' => 'Istwere del pådje',
+'history_short' => 'Istwere',
+'updatedmarker' => 'candjî dispoy mi dierinne vizite',
+'info_short' => 'Informåcions',
+'printableversion' => 'Modêye sicrirece-amiståve',
+'print' => 'Imprimer',
+'edit' => 'Candjî',
+'editthispage' => 'Candjî l\' pådje',
+'delete' => 'Disfacer',
+'deletethispage' => 'Disfacer l\' pådje',
+'undelete_short' => 'Rapexhî $1 candjmints',
+'protect' => 'Protedjî',
+'protectthispage' => 'Protedjî l\' pådje',
+'unprotect' => 'Disprotedjî',
+'unprotectthispage' => 'Disprotedjî l\' pådje',
+'newpage' => 'Novele pådje',
+'talkpage' => 'Copene sol pådje',
+'specialpage' => 'Pådje sipeciåle',
+'personaltools' => 'Usteyes da vosse',
+'postcomment' => 'Sicrire on comintaire',
+'articlepage' => 'Vey l\' årtike',
+'talk' => 'Copene',
+'toolbox' => 'Boesse ås usteyes',
+'userpage' => 'Vey li pådje di l\' uzeu',
+'projectpage' => 'Vey li meta-pådje',
+'imagepage' => 'Vey li pådje di l\' imådje',
+'viewtalkpage' => 'Vey li pådje di copene',
+'otherlanguages' => 'Ôtes lingaedjes',
+'redirectedfrom' => '(Redjiblé di $1)',
+'autoredircomment' => 'Redjiblaedje viè [[$1]]',
+'redirectpagesub' => 'Pådje di redjiblaedje',
+'lastmodifiedat' => 'Cisse pådje a stî candjeye pol dierin côp li $2, $1.',
+'viewcount' => 'Cisse pådje la a stî léjhowe {{PLURAL:$1|on côp|$1 côps}}.',
+'copyright' => 'Li contnou est dizo l\' $1.',
+'protectedpage' => 'Pådje protedjeye',
+'jumpto' => 'Potchî a:',
+'jumptonavigation' => 'naiviaedje',
+'jumptosearch' => 'cweri',
+
+'badaccess' => 'Åk n\' a nén stî avou les permissions',
+
+'versionrequired' => 'I vs fåt l\' modêye $1 di MediaWiki',
+'versionrequiredtext' => 'I vs fåt l\' modêye $1 di MediaWiki po-z eployî cisse pådje ci. Loukîz a [[Special:Version]]',
+
+'ok' => '\'l est bon',
+'pagetitle' => '$1 - {{SITENAME}}',
+'retrievedfrom' => 'Prin del pådje «$1»',
+'youhavenewmessages' => 'Vos avoz des $1 ($2).',
+'newmessageslink' => 'noveas messaedjes',
+'newmessagesdifflink' => 'dierin candjmint',
+'editsection' => 'candjî',
+'editsectionhint' => 'Candjî l\' seccion: $1',
+'editold' => 'candjî',
+'toc' => 'Ådvins',
+'showtoc' => 'mostrer',
+'hidetoc' => 'catchî',
+'thisisdeleted' => 'Vey ou rapexhî $1?',
+'viewdeleted' => 'Vey $1?',
+'restorelink' => '{{PLURAL:$1|on candjmint disfacé|$1 candjmints disfacés}}',
+'feedlinks' => 'Sindicåcion:',
+'feed-invalid' => 'Sôre di sindicåcion nén valide.',
+#'anonnotice' => '-',
+
+# Short words for each namespace, by default used in the 'article' tab in monobook
+'nstab-main' => 'Årtike',
+'nstab-user' => 'Pådje di l\' uzeu',
+'nstab-media' => 'Media',
+'nstab-special' => 'Sipeciås',
+'nstab-project' => 'Pådje',
+'nstab-image' => 'Imådje',
+'nstab-mediawiki' => 'Messaedje',
+'nstab-template' => 'Modele',
+'nstab-help' => 'Aidance',
+'nstab-category' => 'Categoreye',
+
+# Main script and global functions
+#
+'nosuchaction' => 'Nole sifwaite accion',
+'nosuchactiontext' => 'L\' accion specifieye pal hårdêye n\' est nén ricnoxhowe på wiki.',
+'nosuchspecialpage' => 'Nole sifwaite pådje',
+'nospecialpagetext' => 'Vos avoz dmandé ene pådje sipeciåle nén valide, po ene djivêye des pådjes sipeciåles valides, loukîz a [[{{ns:special}}:Specialpages]].',
+
+# General errors
+#
+'error' => 'Aroke',
+'databaseerror' => 'Åk n\' a nén stî avou l\' båze di dnêyes',
+'dberrortext' => 'Åk n\' a nén stî avou l\' sintacse do cweraedje del båze di dnêyes. 
+Çoula pout esse cåze d\' on bug dins l\' programe.
+Li dierin cweraedje del båze di dnêyes di sayî esteut:
+<blockquote><tt>$1</tt></blockquote>
+a pårti del fonccion «<tt>$2</tt>».
+MySQL a rtourné l\' aroke «<tt>$3: $4</tt>».',
+'dberrortextcl' => 'Åk n\' a nén stî avou l\' sintacse do cweraedje del båze di dnêyes.
+Li dierin cweraedje del båze di dnêyes di sayî esteut:
+«$1»
+a pårti del fonccion «$2».
+MySQL a rtourné l\' aroke «$3: $4».',
+'noconnect' => 'Mande escuzes! Li wiki a des rujhes tecnikes pol moumint, eyet c\' est nén possibe di s\' raloyî al båze di dnêyes. <br />
+$1',
+'nodb' => 'Dji n\' sai tchoezi l\' båze di dnêyes $1',
+'cachederror' => 'Çou ki shût c\' est ene copeye e muchete del pådje k\' a stî dmandêye, et ça s\' pout ki ça n\' soeye nén a djoû.',
+'internalerror' => 'Divintrinne aroke',
+'filecopyerror' => 'Dji n\' a savou copyî l\' fitchî «$1» viè «$2».',
+'filerenameerror' => 'Dji n\' a savou rlomer l\' fitchî «$1» e «$2».',
+'filedeleteerror' => 'Dji n\' a savou disfacer l\' fitchî «$1».',
+'filenotfound' => 'Dji n\' a savou trover l\' fitchî «$1».',
+'unexpected' => 'Valixhance nén ratindowe: «$1»=«$2».',
+'badarticleerror' => 'Cisse accion la n\' si pout nén fé so cisse pådje ci.',
+'cannotdelete' => 'Dji n\' sai disfacer l\' pådje ou l\' imådje dimandêye (ça s\' pôreut k\' ene ôte sakî l\' a ddja disfacé).',
+'badtitle' => 'Måva tite',
+'badtitletext' => 'Li tite del pådje dimandêye n\' esteut nén valide, il estet vude, oudonbén c\' esteut on cron loyén eterlingaedje ou eterwiki. Ça s\' pout k\' il åye onk ou sacwants caracteres ki n\' polèt nén esse eployîs dins les tites.',
+'perfdisabled' => 'Mande escuzes! mins cisse fonccionålité ci a stî essoctêye pol moumint
+pask\' ele est trop pezante pol båze di dnêyes, ki dvént si télmint
+londjinne k\' on s\' endè pout pus siervi a môde di djin.',
+'perfdisabledsub' => 'Vochal ene copeye k\' a stî schapêye di $1:', # obsolete?
+'perfcached' => 'Les dnêyes ki shuvèt c\' est ene copeye e muchete, et ça s\' pout ki ça n\' soeye nén ttafwaitmint a djoû.',
+'perfcachedts' => 'Les dnêyes ki shuvèt c\' est ene copeye e muchete, ey elle ont stî metowes a djoû pol dierin côp li $1.',
+'wrong_wfQuery_params' => 'Parametes incoreks po wfQuery()<br />
+Fonccion: $1<br />
+Cweraedje: $2',
+'viewsource' => 'Vey côde sourdant',
+'viewsourcefor' => 'po $1',
+'protectedtext' => 'Cisse pådje chal a stî protedjeye siconte des candjmints; 
+i gn a sacwantès råjhons po çoula, loukîz
+[[{{ns:project}}:Pådje protedjeye]] s\' i vs plait.
+
+Mins nerén vos ploz vey eyet copyî li côde sourdant del pådje:',
+'protectedinterface' => 'Cisse pådje ci dene on tecse d\' eterface pol programe, eyet elle a stî protedjeye po s\' waeranti siconte des abus.',
+'editinginterface' =>  '\'\'\'Asteme:\'\'\' Vos candjîz ene pådje k\' est eployeye po dner on tecse d\' eterface pol programe. Les candjmints a cisse pådje ci vont-st aveur èn efet so l\' eterface d\' uzeu des ôtes uzeus.',
+
+# Login and logout pages
+#
+'logouttitle' => 'Dislodjaedje',
+'logouttext' => '<strong>Vos vs avoz dislodjî.</strong><br />
+Vos ploz continouwer a naivyî so {{SITENAME}} anonimmint, oudonbén
+vos relodjî dizo l\' minme uzeu ou dizo èn uzeu diferin. Notez ki des
+pådjes k\' i gn a si pôrént continowuer a vey come si vos estîz elodjî,
+disk\' a tant ki vos vudrîz l\' muchete di vosse betchteu waibe.',
+
+'welcomecreation' => '== Bénvnowe, $1! ==
+
+Vosse conte a stî ahivé.
+Èn rovyîz nén di candjî les preferinces di {{SITENAME}} a vosse môde.',
+
+'loginpagetitle' => 'Elodjaedje',
+'yourname' => 'Vosse no d\' elodjaedje',
+'yourpassword' => 'Vosse sicret',
+'yourpasswordagain' => 'Ritapez vosse sicret',
+'remembermypassword' => 'Rimimbrer m\' sicret inte les sessions.',
+'yourdomainname' => 'Vosse dominne',
+'loginproblem' => '<b>Åk n\' a nén stî tot vs elodjant.</b><br />Rissayîz s\' i vs plait!',
+'alreadyloggedin' => '<strong>Uzeu $1, vos estoz ddja elodjî!</strong><br />',
+
+'login' => 'S\' elodjî',
+'loginprompt' => 'Vos dvoz permete les coûkes po vs elodjî so {{SITENAME}}.',
+'userlogin' => 'S\' elodjî',
+'logout' => 'Si dislodjî',
+'userlogout' => 'Si dislodjî',
+'notloggedin' => 'Nén elodjî',
+'nologin' => 'Vos n\' avoz nén d\' conte so ç\' wiki ci? $1.',
+'nologinlink' => 'Ahivez on conte da vosse',
+'createaccount' => 'Ahiver on novea conte',
+'gotaccount' => 'Vos avoz ddja on conte so ç\' wiki ci? $1.',
+'gotaccountlink' => 'Elodjîz vs',
+'createaccountmail' => 'pa emile',
+'badretype' => 'Vos avoz dné deus screts diferins.',
+'userexists' => 'Li no d\' uzeu ki vs avoz tchoezi est ddja eployî. Tchoezixhoz è èn ôte s\' i vs plait.',
+'youremail' => 'Vost emile*',
+'username' => 'No d\' elodjaedje:',
+'uid' => 'Limero d\' l\' uzeu:',
+'yourrealname' => 'Li vraiy no da vosse*',
+'yourlanguage' => 'Lingaedje po l\' eterface',
+'yourvariant' => 'Variante do lingaedje',
+'yournick' => 'Vosse no metou (po les sinateures)',
+'email' => 'Emile',
+'prefs-help-email-enotif' => 'Ciste adresse chal est ossu eployeye po vs evoyî des notifiaedjes pa emile si vos avoz tchoezi cisse tchuze la.',
+'prefs-help-realname' => '* Li vraiy no da vosse (opcionel): si vos tchoezixhoz del diner i serè-st eployî po les contribouwaedjes da vosse.',
+'loginerror' => 'Aroke d\' elodjaedje',
+'prefs-help-email' => '* Emile (opcionel): Permete di rçure des emiles ki ds ôtes uzeus vos polèt evoyî a pårti del pådje d\' uzeu da vosse, sins ki voste adresse emile ni soeye håynêye.',
+'nocookiesnew' => 'Li conte a stî ahivé, mins vos n\' estoz nén elodjî. {{SITENAME}} eploye des coûkes po l\' elodjaedje des uzeus. Vos avoz dismetou l\' sopoirt des coûkes dins vosse betchteu waibe; rimetoz l\' en alaedje et relodjîz vs avou vosse novea no d\' elodjaedje eyet scret, s\' i vs plait.',
+'nocookieslogin' => '{{SITENAME}} eploye des coûkes po l\' elodjaedje des uzeus. Vos avoz dismetou l\' sopoirt des coûkes dins vosse betchteu waibe; rimetoz l\' en alaedje et relodjîz vs s\' i vs plait.',
+'noname' => 'Vos n\' avoz nén dné di no d\' uzeu valide.',
+'loginsuccesstitle' => 'Vos estoz elodjî',
+'loginsuccess' =>  '\'\'\'L\' elodjaedje a stî comifåt, asteure vos estoz elodjî dins {{SITENAME}} dizo l\' no d\' uzeu «$1».\'\'\'',
+'nosuchuser' => 'I g na nou uzeu dizo l\' no «$1».
+Verifyîz çou k\' vos avoz tapé, oudonbén rimplixhoz les ôtes tchamps
+et clitchîz sol boton po-z ahiver on novea conte.',
+'nosuchusershort' => 'I g na nou uzeu dizo l\' no «$1». Verifyîz çou k\' vos avoz tapé.',
+'nouserspecified' => 'Vos dvoz dner on no d\' elodjaedje.',
+'wrongpassword' => 'Li scret ki vs avoz dné est måva. Rissayîz s\' i vs plait.',
+'wrongpasswordempty' => 'Vos avoz dné on vude sicret. Rissayîz s\' i vs plait.',
+'mailmypassword' => 'M\' emiler on novea scret',
+'passwordremindertitle' => 'Rimimbraedje do scret po {{SITENAME}}',
+'passwordremindertext' => 'Ene sakî (probåblumint vos-minme, avou l\' adresse IP $1) a dmandé k\' on vs emile on novea scret po {{SITENAME}} ($4).
+Li scret po l\' uzeu «$2» est asteure «$3».
+Po pus di såvrité, vos vos dvrîz elodjî eyet rcandjî vosse sicret å pus abeye.
+
+Si ene ôte sakî a fwait l\' dimande, ou si vos vs avoz rtrové l\' vî scret eyet nel plus vleur candjî, vos ploz djusse ignorer ci messaedje ci eyet continouwer avou l\' vî scret.',
+'noemail' => 'I n\' a pont d\' adresse emile di cnoxhowe po l\' uzeu «$1».',
+'passwordsent' => 'On novea scret a stî emilé a l\' adresse emile
+racsegneye po l\' uzeu «$1».
+Relodjîz vs avou ç\' noû scret on côp ki vos l\' åroz rçuvou s\' i vs plait.',
+'eauthentsent' => 'Èn emile d\' acertinaedje a stî evoyî a l\' adresse emile tchoezeye.
+Divant d\' poleur evoyî èn ôte emile a ci conte la, vos dvroz shure les instruccions di l\' emile ki vos alez rçure, po-z acertiner ki l\' conte est bén da vosse.',
+#'signupend' => '{{int:loginend}}',
+'mailerror' => 'Åk n\' a nén stî tot-z evoyant l\' emile: $1',
+'acct_creation_throttle_hit' => 'Mande escuzes, mins vos avoz ddja ahivé $1 contes. Vos n\' endè ploz nén fé des ôtes.',
+'emailauthenticated' =>  'Voste adresse emile a stî acertinêye li $1.',
+'emailnotauthenticated' =>  'Voste adresse emile n\' a nén co stî acertinêye. Nol emile ni serè-st evoyî po les fonccions shuvantes.',
+'noemailprefs' =>  '<strong>Dinez ene adresse emile po ces fonccions si mete en alaedje.</strong>',
+'emailconfirmlink' => 'Acertinaedje di voste adresse emile',
+'invalidemailaddress' =>  'L\' adresse emile ni pout nén esse acceptêye la k\' i shonnreut k\' ele soeye dins ene cogne nén valide. Tapez ene adresse emile sicrîte comifåt oudobén vudîz l\' tchamp, s\' i vs plait.',
+'accountcreated' => 'Conte ahivé',
+'accountcreatedtext' => 'Li conte d\' uzeu «$1» a stî ahivé.',
+
+# Edit page toolbar
+'bold_sample' => 'Cråssès letes',
+'bold_tip' => 'Tecse e cråssès letes',
+'italic_sample' => 'Clintcheyès letes',
+'italic_tip' => 'Tecse e clintcheyès letes',
+'link_sample' => 'Tecse pol loyén',
+'link_tip' => 'Divintrin loyén',
+'extlink_sample' => 'http://www.egzimpe.com tecse pol hårdêye',
+'extlink_tip' => 'Difoûtrinne hårdêye (en rovyîz nén di mete «http://» pa dvant)',
+'headline_sample' => 'Tecse di tite',
+'headline_tip' => 'Tite di 2inme livea',
+'math_sample' => 'Tapez l\' formule matematike chal',
+'math_tip' => 'Formule matematike (LaTeX)',
+'nowiki_sample' => 'Tapez l\' tecse nén wiki chal',
+'nowiki_tip' => 'Èn nén analijhî des côdes wiki, eyet purade les håyner sins formater',
+'image_sample' => 'Egzimpe.jpg',
+'image_tip' => 'Ravalêye imådje',
+'media_sample' => 'Egzimpe.ogg',
+'media_tip' => 'Loyén viè on fitchî multimedia (come do son evnd)',
+'sig_tip' => 'Li sinateure da vosse, avou l\' date et l\' eure',
+'hr_tip' => 'Roye di coûtchî (a n\' nén eployî d\' trop)',
+
+# Edit pages
+#
+'summary' => 'Rascourti',
+'subject' => 'Sudjet/tiestire',
+'minoredit' => 'Ci n\' est k\' ene tchitcheye',
+'watchthis' => 'Shuve cist årtike',
+'savearticle' => 'Schaper l\' pådje',
+'preview' => 'Vey divant',
+'showpreview' => 'Vey divant',
+'showdiff' => 'Vey les candjmints',
+'anoneditwarning' =>  '\'\'\'Asteme:\'\'\' Vos n\' estoz nén elodjî. Voste adresse IP serè rashiowe dins l\' istwere di cisse pådje ci.',
+'missingsummary' =>  '\'\'\'Asteme:\'\'\' Vos n\' avoz nén dné on tecse di rascourti po vosse candjmint. Si vos rclitchîz sol boton «Schaper», li candjmint da vosse serè schapé sins nou tecse di rascourti po l\' istwere del pådje.',
+'missingcommenttext' => 'Tapez on comintaire chal pa dzo s\' i vs plait.',
+'blockedtitle' => 'L\' uzeu est bloké',
+'blockedtext' => 'Vosse no d\' uzeu ou voste adresse IP a stî blokêye pa $1.
+Li råjhon dnêye est:<br />\'\'$2\'\'<p>Vos ploz contacter $1 oudonbén onk des
+[[{{ns:project}}:Manaedjeus|manaedjeus]] po discuter do blocaedje.
+
+Notez ki vos n\' poloz nén eployî l\' fonccion «emiler a l\' uzeu» a moens ki vos åyîz ene adresse emile valide dins vos [[{{ns:special}}:Preferences|preferinces]].
+
+Voste adresse IP est $3. S\' i vs plait racsegnoz ciste adresse IP la dins les dmandes ki vos frîz.',
+'whitelistedittitle' => 'S\' elodjî po candjî',
+'whitelistedittext' => 'I vs fåt $1 po pleur candjî les årtikes.',
+'whitelistreadtitle' => 'S\' elodjî po lére',
+'whitelistreadtext' => 'I vs fåt [[{{ns:special}}:Userlogin|elodjî]] po pleur lére les årtikes.',
+'whitelistacctitle' => 'Vos n\' avoz nén l\' permission d\' ahiver on conte chal',
+'whitelistacctext' => 'Po pleur ahiver on conte so ç\' Wiki chal, vos dvoz esse [[{{ns:special}}:Userlogin|elodjî]] ey aveur les bounès permissions.',
+'confirmedittitle' => 'Acertiner vost emile po candjî',
+'confirmedittext' => 'I vs fåt acertiner vost emile po pleur candjî les årtikes. Dinez èn emile eyet l\' acertiner dins vos [[{{ns:special}}:Preferences|preferinces d\' uzeu]].',
+'loginreqtitle' => 'I vs fåt esse elodjî',
+'loginreqlink' => 'elodjî',
+'loginreqpagetext' => 'Vos vs divoz $1 po vey des ôtès pådjes.',
+'accmailtitle' => 'Li scret a stî evoyî.',
+'accmailtext' => 'Li scret po «$1» a stî evoyî a $2.',
+'newarticle' => '(Novea)',
+'newarticletext' => 'Vos avoz clitchî so on loyén viè ene pådje ki n\' egzistêye nén co.
+Mins \'\'\'vos\'\'\' l\' poloz askepyî! Po çoula, vos n\' avoz k\' a
+cmincî a taper vosse tecse dins l\' boesse di tecse chal pa dzo
+(alez vey li [[{{ns:project}}:Aidance|pådje d\' aidance]] po pus d\' informåcion).
+Si vos n\' voloz nén scrire cisse pådje chal, clitchîz simplumint
+sol boton \'\'\'En erî\'\'\' di vosse betchteu waibe po rivni al pådje di dvant.',
+#'newarticletextanon' => '{{int:newarticletext}}',
+'anontalkpagetext' => '---- \'\'Çouchal, c\' est li pådje di copene po èn uzeu anonime ki n\' a nén (co) fwait on conte por lu s\' elodjî, ou ki n\' l\' eploye nén. Ça fwait k\' on doet eployî si adresse IP limerike po l\' idintifyî. Come ene sifwaite adresse IP pout esse eployeye pa pus d\' èn uzeu, i s\' pout ki vos voeyoz chal des rmåkes et des messaedjes ki n\' sont nén por vos. Loukîz s\' i vs plait po [[{{ns:special}}:Userlogin|fé on novea conte ou s\' elodjî]] po n\' pus aveur d\' ecramiaedje avou des ôtes uzeus anonimes.\'\'',
+'noarticletext' => 'I gn a pol moumint nou tecse e cisse pådje chal, vos ploz [[{{ns:special}}:Search/{{PAGENAME}}|cweri après l\' tite di cisse pådje ci]] dins des ôtès pådjes, oudonbén [{{fullurl:{{NAMESPACE}}:{{PAGENAME}}|action=edit}} ahiver l\' pådje].',
+#'noarticletextanon' => '{{int:noarticletext}}',
+'clearyourcache' =>  '\'\'\'Note:\'\'\' après aveur schapé l\' pådje, vos l\' divoz rafrister, po pleur vey les candjmints dins vosse betchteu waibe: \'\'\'Mozilla / Firefox / Safari:\'\'\' tchôkîz so \'\'Shift\'\' to clitchant so \'\'Rafrister\'\', ou co fjhoz \'\'Ctrl-Shift-R\'\' (\'\'Cmd-Shift-R\'\' so on Macintosh); \'\'\'IE:\'\'\' tchôkîz so \'\'Ctrl\'\' tot clitchant so \'\'Rafrister\'\', ou co fjhoz \'\'Ctrl-F5\'\'; \'\'\'Konqueror:\'\'\' simplumint clitchîz so \'\'Rafrister\'\' ou l\' tape \'\'F5\'\'; les uzeus d\' \'\'\'Opera\'\'\' dvront motoit netyî pår leu muchete, dins \'\'Usteyes→Preferinces\'\'.',
+'usercssjsyoucanpreview' =>  '<strong>Racsegne:</strong> eployîz l\' boton «Vey divant» po sayî vosse novea CSS/JS divant del schaper.',
+'usercsspreview' =>  '\'\'\'Èn rovyîz nén ki c\' est djusse on prévoeyaedje di vosse stîle CSS d\' uzeu, i n\' a nén co stî schapé!\'\'\'',
+'userjspreview' =>  '\'\'\'Èn rovyîz nén ki c\' est djusse on prévoeyaedje/saye di vosse JavaScript d\' uzeu, i n\' a nén co stî schapé!\'\'\'',
+'userinvalidcssjstitle' => '\'\'\'Asteme:\'\'\' I n\' a pont d\' pea lomêye «$1». Tuzez ki les pådjes .css eyet .js des uzeus eployèt des tite e ptitès letes, metans {{ns:user}}:Toto/monobook.css et nén {{ns:user}}:Toto/Monobook.css.',
+'updated' => '(Ramidré)',
+'note' => '<strong>Note:</strong>',
+'previewnote' => '<strong>Èn rovyîz nén ki c\' est djusse on prévoeyaedje, li pådje n\' est nén co schapêye!</strong>',
+'session_fail_preview' => '<strong>Mande escuzes! Mins dji n\' a nén polou traitî vosse candjmint paski les dnêyes del session ont stî pierdowes.
+Rissayîz s\' i vs plait. Si çoula n\' va todi nén, sayîz di vs dislodjî eyet di vs relodjî.</strong>',
+'previewconflict' => 'Ci prévoeyaedje ci mostere kimint kel tecse del boesse di tecse do dzeu sereut håyné si vos decidez di clitchî so «schaper».',
+# obsoleted?
+'editing' => 'Candjant $1',
+'editinguser' => 'Candjant $1',
+'editingsection' => 'Candjant $1 (seccion)',
+'editingcomment' => 'Candjant $1 (comintaire)',
+'editconflict' => 'Conflit inte deus candjmints: $1',
+'explainconflict' => 'Ene sakî a candjî l\' pådje do tins ki vos estîz a scrire.
+Li boesse di tecse do dzeur mostere li tecse del pådje come il est 
+pol moumint sol sierveu. Li tecse da vosse est sol boesse di tecse do dzo.
+Les diferinces sont håynêyes å mitan. Vos dvoz mete vos candjmints dins 
+l\' tecse d\' asteure (å dzeur) si vos lez vloz co evoyî.
+<b>Seulmint</b> li tecse do dzeur serè candjî cwand vos clitchroz sol
+boton «Schaper l\' pådje».<br />',
+'yourtext' => 'Li tecse da vosse',
+'storedversion' => 'Modêye sol sierveu',
+'nonunicodebrowser' => '<strong>ASTEME: li betchteu waibe da vosse ni sopoite nén l\' ecôdaedje unicôde, cåze di çoula les caracteres nén-ASCII vont aparexhe dins l\' boesse di tecse come des côdes hecsadecimås, insi vos pôroz tot l\' minme candjî l\' pådje.</strong>',
+'editingold' => '<strong>ASTEME: Vos estoz ki candje ene viye modêye del pådje.
+Si vos l\' schapez, tos les candjmints k\' ont stî fwaits
+dispoy adon si vont piede.</strong>',
+'yourdiff' => 'Diferinces',
+'copyrightwarning' => 'Notez ki tos les contribouwaedjes fwaits po {{SITENAME}}
+dvèt esse dizo l\' licince $2 (loukîz $1 po pus di racsegnes).
+Si vos n\' voloz nén ki vosse tecse poye esse candjî eyet
+spårdou pa tot l\' minme kî, adon nel evoyîz nén chal.
+<br />
+Vos nos acertinez eto ki vos avoz scrît l\' tecse 
+vos-minme, oudonbén l\' avoz copyî d\' on sourdant libe 
+(dominne publik ou on sourdant pareymint libe).
+<br />
+<strong>N\' EVOYÎZ NÉN DES TECSES DIZO ABONDROETS SINS PERMISSION!</strong>',
+'copyrightwarning2' => 'Notez ki tos les contribouwaedjes fwaits po {{SITENAME}}
+polèt esse esse candjîs ou disfacés pa des ôtes contribouweus.
+Si vos n\' voloz nén scrire des årtikes ki polèt esse
+candjîs pa des ôtes, adon nels evoyîz nén chal.
+<br />
+Vos nos acertinez eto ki vos avoz scrît l\' tecse 
+vos-minme, oudonbén l\' avoz copyî d\' on sourdant libe 
+(voeyoz $1 po pus di racsegnes).
+<br />
+<strong>N\' EVOYÎZ NÉN DES TECSES DIZO ABONDROETS SINS PERMISSION!</strong>',
+'longpagewarning' => '<strong>ASTEME: Cisse pådje fwait $1 kilo-octets; des
+betchteus waibes k\' i gn a polèt aveut des rujhes po-z aspougnî
+des pådjes k\' aprepièt ou di pus di 32Ko.
+Vos dvrîz tuzer a pårti l\' pådje e pus ptits bokets.</strong>',
+'longpageerror' => '<strong>AROKE: Li tecse ki vos avoz evoyî fwait di pus d\' $1 kilo-octets, çou k\' est pus ki l\' macsimom di $2 kilo-octets. C\' est nén possible del schaper sol sierveu.</strong>',
+'readonlywarning' => '<strong>ASTEME: On-z overe sol båze di dnêyes pol moumint, ey elle a stî metowe e mode seulmint-lére.
+Do côp, vos n\' såroz schaper vos candjmints asteure; motoit vos dvrîz copyî et aclaper l\' tecse dins on fitchî da vosse pol poleur rimete pus tård.</strong>',
+'protectedpagewarning' => '<strong>ASTEME: Cisse pådje chal a stî protedjeye siconte
+des candjmints, seulmint les uzeus avou èn accès di manaedjeu el polèt candjî.
+Acertinez vs ki vos shuvoz les [[{{ns:project}}:Pådje_protedjeye|rîles po les pådjes protedjeyes]].</strong>',
+'semiprotectedpagewarning' => '\'\'\'Note:\'\'\' cisse pådje ci a stî protedjeye po k\' seulmint les uzeus edjîstrés el polexhe candjî.',
+'templatesused' => 'Modeles eployîs e cisse pådje ci:',
+'nocreatetitle' => 'Ahivaedje di pådjes limité',
+'nocreatetext' => 'Cisse waibe ci a limité l\' possibilité d\' ahiver des novelès pådjes. Vos ploz rivni en erî eyet candjî ene pådje k\' egzistêye dedja, oudonbén, [[{{ns:special}}:Userlogin|vos elodjî ou ahiver on conte d\' uzeu]].',
+
+# History pages
+#
+'revhistory' => 'Istwere des modêyes',
+'nohistory' => 'I n\' a pont d\' istwere des modêyes po cisse pådje chal.',
+'revnotfound' => 'Modêye nén trovêye',
+'revnotfoundtext' => 'Li viye modêye del pådje ki vos avoz dmandé n\' a nén stî trovêye.
+Verifyîz l\' hårdêye ki vs avoz eployî po-z ariver sol pådje s\' i vs plait.',
+'loadhist' => 'Tcherdjaedje del pådje di l\' istwere',
+'currentrev' => 'Modêye d\' asteure',
+'revisionasof' => 'Modêye do $1',
+'previousrevision' => '←Modêye di dvant',
+'nextrevision' => 'Modêye shuvante→',
+'currentrevisionlink' => 'vey li modêye d\' asteure',
+'cur' => 'ast.',
+'next' => 'shuv.',
+'last' => 'dif.',
+'orig' => 'oridj.',
+'histlegend' => 'Tchoezi les modêyes a comparer: clitchîz so les botons radio des deus modêyes
+ki vos vloz comparer et s\' tchôkîz sol tape «enter» ou clitchîz sol
+boton do dzo.<br />
+Ledjinde: (ast.) = diferince avou l\' modêye d\' asteure,
+(dif.) = diferince avou l\' modêye di dvant, M = candjmint mineur.',
+'deletedrev' => '[disfacé]',
+'histfirst' => 'Li pus vî',
+'histlast' => 'Li dierin',
+'rev-deleted-comment' => '(comintaire oisté)',
+'rev-deleted-user' => '(no d\' elodjaedje oisté)',
+'rev-deleted-text-permission' => '<div class="mw-warning plainlinks">
+Cisse modêye ci del pådje a stî oistêye foû des årtchives publikes.
+I gn a motoit des racsegnes sol [{{fullurl:{{ns:special}}:Log/delete|page={{PAGENAMEE}}}} djournå des disfaçaedjes].
+</div>',
+'rev-deleted-text-view' => '<div class="mw-warning plainlinks">
+Cisse modêye ci del pådje a stî oistêye foû des årtchives publikes.
+Come manaedjeu so ç\' wiki ci, vos avoz l\' droet del vey; i gn a motoit des detays sol [{{fullurl:{{ns:special}}:Log/delete|page={{PAGENAMEE}}}} djournå des disfaçaedjes].
+</div>',
+'rev-delundel' => 'mostrer/catchî',
+
+'history-feed-item-nocomment' => '$1 li $2', # user at time
+
+# Revision deletion
+#
+'revisiondelete' => 'Disfacer/rapexhî des modêyes',
+'revdelete-selected' => 'Tchoezeye modêye di [[:$1]]:',
+'revdelete-text' => 'Les disfacêyès modêyes vont continouwer d\' aparexhe dins l\' pådje di l\' istwere, mins leu contnou n\' serè nén veyåve do publik.
+
+Les ôtes manaedjeus so ç\' wiki ci pôront todi vey li contnou catchî eyet l\' rapexhî åd triviè di cisse minme eterface ci, a moens k\' ene restriccion di pus ni soeye metowe en alaedje pås mwaisses-manaedjeus del waibe.',
+'revdelete-legend' => 'Defini des restriccions sol modêye:',
+'revdelete-hide-text' => 'Catchî l\' tecse del modêye',
+'revdelete-hide-comment' => 'Catchî l\' comintaire di candjmint',
+'revdelete-hide-user' => 'Catchî l\' no d\' uzeu/adresse IP do candjeu',
+'revdelete-hide-restricted' => 'Apliker ces restrictions ossu åzès manaedjeus',
+'revdelete-log' => 'Comintaire pol djournå:',
+'revdelete-submit' => 'Apliker al modêye tchoezeye',
+'revdelete-logentry' => 'li veyåvisté des modêyes a stî candjeye po [[$1]]',
+
+# Diffs
+#
+'difference' => '(Diferinces inte les modêyes)',
+'loadingrev' => 'tcherdjaedje del modêye po les diferinces',
+'lineno' => 'Roye $1:',
+'editcurrent' => 'Candjî li modêye do moumint di cisse pådje chal',
+'selectnewerversionfordiff' => 'Tchoezi ene nouve modêye po comparer',
+'selectolderversionfordiff' => 'Tchoezi ene modêye pus viye po comparer',
+'compareselectedversions' => 'Comparer les modêyes tchoezeyes',
+
+# Search results
+#
+'searchresults' => 'Rizultats do cweraedje',
+'searchresulttext' => 'Po pus di racsegnes sol manire di fé des cweraedjes so {{SITENAME}}, loukîz [[{{ns:project}}:Cweraedje|Cweraedje so {{SITENAME}}]].',
+'searchsubtitle' => 'Pol cweraedje «[[:$1]]»',
+'searchsubtitleinvalid' => 'Pol cweraedje «$1»',
+'badquery' => 'Halcrosse tchinne di cweraedje',
+'badquerytext' => 'Vosse cweraedje èn s\' a nén polou fé.
+C\' est motoit bén paski vos avoz sayî d\' cweri
+après on mot di moens di troes letes, çou ki n\' est
+nén co sopoirté.
+I s\' pout eto ki vos avoz må tapé l\' ratourneure,
+metans «oujhea eyet eyet plomes».
+Rissayîz avou ene ôte tchinne di cweraedje.',
+'matchtotals' => 'Li cweraedje «$1» a trové $2 {{PLURAL:$2|årtike|årtikes}} avou l\' tite ki corespond eyet $3 {{PLURAL:$3|årtike|årtikes}} avou do tecse ki corespond.',
+'noexactmatch' => '\'\'\'I n\' a nole pådje avou l\' tite «$1».\'\'\' Vos poloz [[:$1|ahiver cisse pådje la]].',
+'titlematches' => 'Årtikes avou on tite ki corespond',
+'notitlematches' => 'Nol årtike avou on tite ki corespond',
+'textmatches' => 'Årtikes avou do tecse ki corespond',
+'notextmatches' => 'Nol årtike avou do tecse ki corespond',
+'prevn' => '$1 di dvant',
+'nextn' => '$1 shuvants',
+'viewprevnext' => 'Vey ($1) ($2) ($3).',
+'showingresults' => 'Chal pa dzo <b>$1</b> rizultats a pårti do limero <b>$2</b>.',
+'showingresultsnum' => 'Chal pa dzo <b>$3</b> rizultats a pårti do limero <b>$2</b>.',
+'nonefound' => '\'\'\'Note\'\'\': des cweraedjes ki n\' dinèt nou rzultat c\' est sovint li cweraedje di ptits mots trop corants (come «les», «des») ki n\' sont nén indecsés, oudonbén des cweraedjes di pus d\' on mot (seulmint les pådjes avou tos les mots dmandés sront håynêyes dins l\' rizultat do cweraedje).',
+'powersearch' => 'Cweri',
+'powersearchtext' => 'Cweraedje ezès espåces di nos:<br />$1<br />$2 Håyner les redjiblaedjes &nbsp; Cweri après $3 $9',
+'searchdisabled' => 'Mande escuzes! Li cweraedje å dvins des årtikes a stî dismetou pol moumint, cåze ki l\' sierveu est fortcherdjî. Tot ratindant, vos ploz eployî Google po fé les rcweraedjes so {{SITENAME}}, mins çoula pout esse ene miete vî.',
+
+'blanknamespace' => '(Mwaisse)',
+
+# Preferences page
+#
+'preferences' => 'Preferinces',
+'prefsnologin' => 'Vos n\' estoz nén elodjî',
+'prefsnologintext' => 'I vs fåt esse [[{{ns:special}}:Userlogin|elodjî]] po pleur candjî vos preferinces.',
+'prefsreset' => 'Les preferinces ont stî rmetowes come d\' avance a pårti des wårdêyès valixhances.',
+'qbsettings' => 'Apontiaedjes pol bår di menu',
+'qbsettings-none'	=> 'Nole bår',
+'qbsettings-fixedleft'	=> 'Aclawêye a hintche',
+'qbsettings-fixedright'	=> 'Aclawêye a droete',
+'qbsettings-floatingleft'	=> 'Flotante a hintche',
+'qbsettings-floatingright'	=> 'Flotante a droete',
+'changepassword' => 'Candjî l\' sicret',
+'skin' => 'Pea',
+'math' => 'Formules matematikes',
+'dateformat' => 'Cogne del date',
+'datedefault' => 'Nole preferince',
+'datetime' => 'Cogne del date',
+'math_unknown_error' => 'aroke nén cnoxhowe',
+'math_unknown_function' => 'fonccion nén cnoxhowe',
+'math_syntax_error' => 'aroke di sintacse',
+'math_image_error' => 'Li cviersaedje e PNG a fwait berwete; verifyîz ki les programes latex, dvips, gs eyet convert ont stî astalés comifåt',
+'math_bad_tmpdir' => 'Dji n\' sai nén scrire ou ahiver l\' ridant timporaire po les formules matematikes',
+'math_bad_output' => 'Dji n\' sai nén scrire ou ahiver l\' ridant po les fitchîs di rexhowe des formules matematikes',
+'math_notexvc' => 'I manke li fitchî enondåve texvc; lijhoz math/README po-z apontyî.',
+'prefs-personal' => 'Dinêyes da vosse',
+'prefs-rc' => 'Håynaedje des dierins candjmints',
+'prefs-watchlist' => 'Djivêye des shuvous',
+'prefs-watchlist-days' => 'Nombe di djoûs a mostrer dins l\' djivêye:',
+'prefs-watchlist-edits' => 'Nombe di candjmints a mostrer dins l\' djivêye:',
+'prefs-misc' => 'Totes sôres',
+'saveprefs' => 'Schaper les preferinces',
+'resetprefs' => 'Rimete les prémetowès valixhances',
+'oldpassword' => 'Vî scret',
+'newpassword' => 'Noû scret',
+'retypenew' => 'Ritapez l\' noû scret',
+'textboxsize' => 'Grandeu del boesse di tecse',
+'rows' => 'Royes',
+'columns' => 'Colones',
+'searchresultshead' => 'Håynaedje des rzultats di cweraedje',
+'resultsperpage' => 'Nombe di responses a håyner so ene pådje',
+'contextlines' => 'Nombe di royes a håyner po ene response',
+'contextchars' => 'Nombe di caracteres di contecse pa roye',
+'stubthreshold' => 'Grandeu minimom po håyner les courts årtikes',
+'recentchangescount' => 'Nombe di tites dins les dierins candjmints',
+'savedprefs' => 'Vos preferinces ont stî schapêyes.',
+'timezonelegend' => 'Coisse d\' eureye',
+'timezonetext' => 'Tapez li nombe d\' eures di diferince avou l\' tins univiersel (UTC).',
+'localtime' => 'Håyner l\' eure locåle',
+'timezoneoffset' => 'Diferince d\' eures¹',
+'servertime' => 'L\' eure sol sierveu',
+'guesstimezone' => 'Prinde d\' après l\' betchteu',
+'allowemail' => 'Permete di rçure des emiles d\' ôtes uzeus',
+'defaultns' => 'Prémetous spåces di nos pol cweraedje:',
+'default' => 'prémetou',
+'files' => 'Fitchîs',
+
+# User rights
+'userrights-lookup-user' => 'Manaedjî les groupes d\' uzeus',
+'userrights-user-editname' => 'Tapez on no d\' uzeu:',
+'editusergroup' => 'Candjî les groupes d\' uzeus',
+
+'userrights-editusergroup' => 'Candjî groupes d\' uzeus',
+'saveusergroups' => 'Schaper des groupes d\' uzeus',
+'userrights-groupsmember' => 'Mimbes di:',
+'userrights-groupsavailable' => 'Groupes k\' i gn a:',
+'userrights-groupshelp' => 'Tchoezixhoz les groupes ki vos vloz ki l\' uzeu (èn) soeye (pus) mimbe.
+Les groupes nén tchoezis èn seront nén candjîs. Vos ploz distchoezi on groupe tot fjhant Ctrl + clitch di hintche',
+
+# Groups
+'group'                   => 'Groupe:',
+'group-bot'               => 'Robots',
+'group-sysop'             => 'Manaedjeus',
+'group-bureaucrat'        => 'Mwaisse-manaedjeus',
+'group-all'               => '(tertos)',
+
+'group-bot-member'        => 'Robot',
+'group-sysop-member'      => 'Manaedjeu',
+'group-bureaucrat-member' => 'Mwaisse-manaedjeu',
+
+'grouppage-bot' => '{{ns:project}}:Robots',
+'grouppage-sysop' => '{{ns:project}}:Manaedjeus',
+'grouppage-bureaucrat' => '{{ns:project}}:Mwaisse-manaedjeus',
+
+# Recent changes
+#
+'changes' => 'candjmints',
+'recentchanges' => 'Dierins candjmints',
+'recentchangestext' => 'Shuvoz chal les dierins candjmints k\' i gn a yeu dsu {{SITENAME}}.',
+'rcnote' => 'Chal pa dzo les <strong>$1</strong> dierins candjmints des dierins <strong>$2</strong> djoûs, å $3.',
+'rcnotefrom' => 'Chal pa dzo les candjmints dispoy li <b>$2</b> (disk\' a <b>$1</b> di mostrés).',
+'rclistfrom' => 'Mostrer les candjmints k\' i gn a yeu a pårti do $1',
+'rcshowhideminor' => '$1 candjmints mineurs',
+'rcshowhidebots' => '$1 robots',
+'rcshowhideliu' => '$1 uzeus eredjîstrés',
+'rcshowhideanons' => '$1 uzeus anonimes',
+'rcshowhidepatr' => '$1 candjmints rwaitîs',
+'rcshowhidemine' => '$1 candjmints da minne',
+'rclinks' => 'Mostrer les $1 dierins candjmints des dierins $2 djoûs.<br />$3',
+'diff' => 'dif.',
+'hist' => 'ist.',
+'hide' => 'catch.',
+'show' => 'håy.',
+#'minoreditletter' => 'm',
+#'newpageletter' => 'N',
+#'sectionlink' => '→',
+'number_of_watching_users_pageview' => '[shuvou pa $1 uzeu(s)]',
+'rc_categories'	=> 'Limiter åzès categoreyes (separer avou des «|»)',
+'rc_categories_any' => 'Totes',
+
+# Upload
+#
+'upload' => 'Eberweter on fitchî',
+'uploadbtn' => 'Eberweter',
+# NOTE: 'En erî' purade ki 'Reberweter'; la ki c' est çou ki ç' boton la
+# fwait: rivni al pådje d' eberwetaedje
+'reupload' => 'En erî',
+'reuploaddesc' => 'Rivni al pådje d\' eberwetaedje.',
+'uploadnologin' => 'Nén elodjî',
+'uploadnologintext' => 'I vs fåt esse [[{{ns:special}}:Userlogin|elodjî]] por vos pleur eberweter des fitchîs.',
+'upload_directory_read_only' => 'Li sierveu waibe èn pout nén scrire sol ridant d\' eberwetaedje ($1).',
+'uploaderror' => 'Aroke d\' eberwetaedje',
+'uploadtext' => 'Eployîz les boesses d\' intrêye chal pa dzo po-z eberweter des noveas fitchîs d\' imådjes po vos årtikes. Sol plupårt des betchteus, vos voeroz on boton «Foyter...» (ou «Browse...») ki vs permetrè di foyter dins les ridants del deure plake da vosse po tchoezi l\' fitchî, çou ki rimplirè otomaticmint li tchamp do no do fitchî k\' est a costé.
+
+Po håyner ou cweri des imådjes k\' ont ddja stî rçuvowes, alez sol [[{{ns:special}}:Imagelist|djivêye des imådjes dedja eberwetêyes]]. Les eberwetaedjes et disfaçaedjes sont metous èn on [[{{ns:special}}:Log/upload|djournå des eberwetaedjes]].
+
+Po håyner l\' imådje dins èn årtike, eployîz on loyén del foûme
+* \'\'\'<nowiki>[[</nowiki>{{ns:image}}<nowiki>:fitchî.jpg]]</nowiki>\'\'\'
+* \'\'\'<nowiki>[[</nowiki>{{ns:image}}<nowiki>:fitchî.png|thumb|tecse a mete padzo]]</nowiki>\'\'\'
+ou co po les sons
+* \'\'\'<nowiki>[[</nowiki>{{ns:media}}<nowiki>:fitchî.ogg]]</nowiki>\'\'\'',
+
+'uploadlog' => 'djournå des eberwetaedjes',
+'uploadlogpage' => 'Djournå_des_eberwetaedjes',
+'uploadlogpagetext' => 'Chal pa dzo li djivêye des dierins eberwetaedjes.',
+'filename' => 'No do fitchî',
+'filedesc' => 'Discrijhaedje',
+'fileuploadsummary' => 'Discrijhaedje:',
+'filestatus' => 'Abondroets ey eployaedje',
+'filesource' => 'Sourdant',
+'copyrightpage' => '{{ns:project}}:Abondroets',
+'copyrightpagename' => 'Abondroets {{SITENAME}}',
+'uploadedfiles' => 'Fitchîs eberwetés',
+'ignorewarning' => 'Passer houte des adviertixhmints eyet schaper tot l\' minme li fitchî.',
+'ignorewarnings' => 'Passer houte des adviertixhmints',
+'minlength' => 'Les imådjes divèt aveur des nos di pol moens troes letes.',
+'illegalfilename' => 'Li no d\' fitchî «$1» a des caracteres ki n\' si polèt nén eployî dins l\' tite d\' ene pådje. Candjîz l\' no do fitchî eyet sayîz del reberweter s\' i vs plait.',
+'badfilename' => 'Li no d\' l\' imådje a stî candjî a «$1».',
+'badfiletype' => '«.$1» n\' est nén ene sôre d\' imådje ricmandêye.',
+'largefile' => 'C\' est mî k\' les imådjes åyexhe ene grandeu di moens di $1 octets, ci fitchî chal fwait $2 octets.',
+'largefileserver' => 'Ci fitchî ci est pus pezant ki çou k\' li sierveu est apontyî po-z accepter.',
+'emptyfile' => 'I shonnreut kel fitchî k\' vos eberwetez soeye vude. Çoula pout esse cåze d\' ene aroke di tapaedje dins l\' no do fitchî. Acertinez si vos vloz evoyî po do bon ç\' fitchî ci, s\' i vs plait.',
+'fileexists' => 'On fitchî avou ç\' no la egzistêye dedja, loukîz s\' i vs plait a $1 po vs acertiner ki vos vloz bén replaecî l\' fitchî avou l\' ci ki vos eberwetez asteure, oubén si vos l\' voloz eberweter dizo èn ôte no.',
+'fileexists-forbidden' => 'I gn a ddja on fitchî avou ç\' no la; rivnoz s\' i vs plait en erî et s\' reberwetez l\' fitchî dizo èn ôte no. [[{{ns:image}}:$1|thumb|center|$1]]',
+'fileexists-shared-forbidden' => 'I gn a ddja on fitchî avou ç\' no la e ridant des fitchîs pårtaedjîs; rivnoz s\' i vs plait en erî et s\' reberwetez l\' fitchî dizo èn ôte no. [[{{ns:image}}:$1|thumb|center|$1]]',
+'successfulupload' => 'L\' eberwetaedje a stî comifåt',
+'fileuploaded' => 'L\' eberwetaedje do fitchî «$1» a stî å paire des pôces.
+Shuvoz ci loyén chal: ($2) pol pådje di discrijhaedje eyet rimplixhoz les
+informåcions sol fitchî, come di wice k\' i vént, cwand il a stî
+fwait, et pa kî, et tot l\' minme kéne informåcion interessante ki vos ploz
+saveur åd fwait do fitchî.',
+'uploadwarning' => 'Adviertixhmint so l\' eberwetaedje',
+'savefile' => 'Schaper l\' fitchî',
+'uploadedimage' => 'eberwetaedje di «[[$1]]»',
+'uploaddisabled' => 'Eberwetaedje di fitchîs dismetou',
+'uploaddisabledtext' => 'Mande escuzes, mins l\' eberwetaedje di fitchîs a stî dismetou pol moumint.',
+'uploadscripted' => 'Ci fitchî ci a-st å dvins do côde HTML ou on scripe ki pôreut esse må comprin pa on betchteu waibe.',
+'uploadcorrupt' => 'Li fitchî est cron oudonbén il a-st ene mwaijhe cawete. Verifyîz l\' fitchî eyet l\' reberweter s\' i vs plait.',
+'uploadvirus' => 'Li fitchî a-st on virusse! Detays: $1',
+'sourcefilename' => 'No d\' fitchî so vosse copiutrece',
+'destfilename' => 'No d\' fitchî a eployî so {{SITENAME}}',
+
+'filewasdeleted' => 'On fitchî avou ç\' no la a ddja stî disfacé. Vos dvrîz loukî å $1 divant d\' continouwer.',
+
+'license' => 'Licince di l\' imådje',
+'nolicense' => 'Nole licince tchoezeye',
+#'licenses' => '-', # Don't duplicate this in translations
+
+# Image list
+#
+'imagelist' => 'Djivêye des imådjes',
+'imagelisttext' => 'Chal pa dzo c\' est ene djivêye di <strong>$1</strong> imådjes relîtes <strong>$2</strong>.',
+'imagelistforuser' => 'Çouci n\' mostere ki les imådjes eberwetêyes pa $1.',
+'getimagelist'	=> 'dji fwait l\' djivêye des imådjes',
+'ilsubmit' => 'Cweri',
+'showlast' => 'Mostrer les $1 dierinnès imådjes relîtes $2.',
+'byname' => 'påzès nos',
+'bydate' => 'pazès dates',
+'bysize' => 'pa grandeu',
+'imgdelete' => 'oist.',
+'imgdesc' => 'disc.',
+'imglegend' => 'Ledjinde: (disc.) = håyner/candjî l\' discrijhaedje di l\' imådje.',
+'imghistory' => 'Istwere di l\' imådje',
+'revertimg' => 'mod.',
+'deleteimg' => 'oist.',
+'deleteimgcompletely' => 'Disfacer totes les modêyes di ç\' fitchî ci.',
+'imghistlegend' => 'Ledjinde: (ast.) = c\' est l\' imådje k\' i gn a asteure, (oist.) = oister (disfacer)
+cisse viye modêye la, (mod.) = rivni a cisse viye modêye la.
+<br /><i>Clitchîz sol date po vey l\' imådje evoyeye a cisse date la.</i>',
+'imagelinks' => 'Loyéns viè ciste imådje chal',
+'linkstoimage' => 'Les pådjes shuvantes eployèt ciste imådje chal:',
+'nolinkstoimage' => 'I n\' a nole pådje k\' eploye ciste imådje chal.',
+'sharedupload' => 'Ci fitchî ci est so on ridant pårtaedjî ey i s\' pout k\' i soeye eployî pa ds ôtes pordjets.',
+'shareduploadwiki' => 'Loukîz li $1 po pus di racsegnes.',
+'shareduploadwiki-linktext' => 'pådje di discrijhaedje',
+'noimage' => 'I n\' a nou fitchî avou ç\' no la, vos l\' poloz $1',
+'noimage-linktext' => 'eberweter',
+'uploadnewversion-linktext' => 'Eberweter ene nouve modêye di ci fitchî ci',
+
+# Mime search
+#
+'mimesearch' => 'Cweraedje MIME',
+'mimetype' => 'sôre MIME:',
+'download' => 'aberweter',
+
+# Unwatchedpages
+#
+'unwatchedpages' => 'Pådjes nén shuvowes',
+
+# List redirects
+'listredirects' => 'Djivêye des redjiblaedjes',
+
+# Unused templates
+'unusedtemplates' => 'Modeles nén eployîs',
+'unusedtemplatestext' => 'Cisse pådje ci mostere totes les pådjes di modele (espåce di lomaedje «{{ns:template}}») ki n\' sont nén eployîs dins ene ôte pådje. Rimimbrez vs di verifyî s\' i n\' a nén des ôtes loyéns divant delzès disfacer.',
+'unusedtemplateswlh' => 'ôtes loyéns',
+
+# Random redirect
+'randomredirect' => 'Redjiblaedje a l\' astcheyance',
+
+# Statistics
+#
+'statistics' => 'Sitatistikes',
+'sitestats' => 'Sitatistikes di {{SITENAME}}',
+'userstats' => 'Sitatistikes des uzeus',
+'sitestatstext' => 'I gn a \'\'\'$1\'\'\' pådjes å totå el båze di dnêyes.
+Çoula tot contant les pådjes di «Copenes», les pådjes åd fwait di {{SITENAME}}, les pådjes «djermons» (pådjes sins waire di contnou), les redjiblaedjes, eyet co ds ôtes ki n\' sont nén vormint des årtikes.
+Si on n\' conte nén ces la, i gn a \'\'\'$2\'\'\' pådjes ki sont
+probåblumint des vraiys årtikes.
+
+\'\'\'$8\'\'\' fitchîz ont stî eberwetés.
+
+I gn a-st avou å totå \'\'\'$3\'\'\' riwaitaedjes di pådjes, eyet \'\'\'$4\'\'\' candjmints do contnou des pådjes dispoy ki ci wiki chal est en alaedje.
+Dj\' ô bén k\' i gn a ene moyene di \'\'\'$5\'\'\' candjmints par pådje, eyet \'\'\'$6\'\'\' riwaitaedjes po on candjmint.
+
+Li longueur del [http://meta.wikimedia.org/wiki/Help:Job_queue cawêye des bouyes] est di \'\'\'$7\'\'\'.',
+'userstatstext' => 'I gn a \'\'\'$1\'\'\' uzeus d\' eredjîstrés.
+\'\'\'$2\'\'\' (ou \'\'\'$4%\'\'\') di zels sont eto des manaedjeus (riloukîz a $3).',
+
+'disambiguations' => 'Pådjes d\' omonimeye',
+'disambiguationspage' => '{{ns:template}}:Omonimeye',
+'disambiguationstext' => 'Les årtikes shuvants ont des loyéns viè ene <i>pådje d\' omonimeye</i>. I dvrént purade loyî viè l\' boun årtike.<br />
+Ene pådje est considerêye come pådje d\' omonimeye si elle aparexhe e $1.<br />
+Les loyéns a pårti d\' ôtes espåces di lomaedje èn sont <i>nén</i> håynés chal.',
+
+'doubleredirects' => 'Dobes redjiblaedjes',
+'doubleredirectstext' => 'Tchaeke roye a-st on loyén viè l\' prumî eyet l\' deujhinme redjiblaedje, avou on mostraedje del prumire roye do tecse do deujhinme redjiblaedje, çou ki å pus sovint dene li «vraiy» årtike såme, ki l\' prumî redjiblaedje divreut evoyî viè lu.',
+
+'brokenredirects' => 'Pierdous redjiblaedjes',
+'brokenredirectstext' => 'Les redjiblaedjes shuvants evoyèt so ene pådje ki n\' egzistêye nén.',
+
+# Miscellaneous special pages
+#
+'nbytes'		=> '$1 {{PLURAL:$1|octet|octets}}',
+'ncategories'		=> '$1 {{PLURAL:$1|categoreye|categoreyes}}',
+'nlinks'		=> '$1 {{PLURAL:$1|loyén|loyéns}}',
+'nmembers'		=> '$1 {{PLURAL:$1|mimbe|mimbes}}',
+'nrevisions'		=> '$1 {{PLURAL:$1|modêye|modêyes}}',
+'nviews'		=> 'léjhowe $1 {{PLURAL:$1|côp|côps}}',
+
+'lonelypages' => 'Pådjes ôrfulinnes',
+'uncategorizedpages' => 'Pådjes sins nole categoreye',
+'uncategorizedcategories' => 'Categoreyes nén categorijheyes',
+'unusedcategories' => 'Categoreyes nén eployeyes',
+'unusedimages' => 'Imådjes nén eployeyes',
+'popularpages' => 'Pådjes les pus léjhowes',
+'wantedcategories' => 'Categoreyes les pus rcwerowes',
+'wantedpages' => 'Pådjes les pus rcwerowes',
+'mostlinked' => 'Pådjes les pus loyeyes',
+'mostlinkedcategories' => 'Categoreyes les pus loyeyes',
+'mostcategories' => 'Årtikes avou l\' pus di categoreyes',
+'mostimages' => 'Imådjes les pus loyeyes',
+'mostrevisions' => 'Årtikes avou l\' pus di candjmints',
+'allpages' => 'Totes les pådjes',
+'prefixindex'   => 'Indecse pa betchete',
+'randompage' => 'Årtike a l\' astcheyance',
+'shortpages' => 'Coûtès pådjes',
+'longpages' => 'Longowès pådjes',
+'deadendpages' => 'Pådjes sins nou loyén wiki',
+'listusers' => 'Djivêye des uzeus',
+'specialpages' => 'Pådjes sipeciåles',
+'spheading' => 'Pådjes sipeciåles po tos ls uzeus',
+'restrictedpheading' => 'Pådjes sipeciåles po les manaedjeus',
+'recentchangeslinked' => 'Candjmints aloyîs',
+'rclsub' => '(ezès pådjes ki «$1» a-st on loyén dzeu)',
+'newpages' => 'Novelès pådjes',
+'ancientpages' => 'Viyès pådjes',
+'intl' => 'Loyéns eterlingaedjes',
+'move' => 'Displaecî',
+'movethispage' => 'Displaecî cisse pådje',
+'unusedimagestext' => '<p>Notez tot l\' minme ki d\' ôtès waibes polèt aveur des loyéns viè ces imådjes la gråcès a ene direke hårdêye. Do côp, ces imådjes aparexhèt chal, mågré k\' ele soeyexhe eployeyes.</p>',
+'unusedcategoriestext' => 'Les pådjes di categoreye shuvantes egzistént, mins i n\' a nol årtike ni categoreye å dvins.',
+
+'booksources' => 'Sourdants po les lives',
+'categoriespagetext' => 'I gn a les categoreyes shuvantes sol wiki.',
+'data' => 'Dinêyes',
+'userrights' => 'Manaedjî les liveas des uzeus',
+'groups' => 'Groupes d\' uzeus',
+
+'booksourcetext' => 'Chal pa dzo c\' est ene djivêye di hårdêyes viè des waibes ki vindèt des lives, noûs ou di deujhinme mwin, et ki polèt aveur pus d\' informåcions åd fwait des lives ki vos cweroz après.',
+'isbn' => 'ISBN',
+'alphaindexline' => 'di $1 a $2',
+'version' => 'Modêye des programes',
+'log' => 'Djournås',
+'alllogstext' => 'Håynaedje etercroejhlé des djournås d\' eberwetaedje, disfaçaedje, protedjaedje, blocaedje eyet manaedjeus.
+Vos ploz limiter l\' håynaedje tot tchoezixhant ene sôre di djournå, on no d\' uzeu, ou l\' tite d\' ene pådje.',
+'logempty' => 'Rén n\' corespond dins l\' djournå.',
+
+# Special:Allpages
+'nextpage' => 'Pådje shuvante ($1)',
+'allpagesfrom' => 'Håyner les pådjes a pårti di:',
+'allarticles' => 'Tos les årtikes',
+'allinnamespace' => 'Totes les pådjes (espåce di lomaedje $1)',
+'allnotinnamespace' => 'Totes les pådjes (foû d\' l\' espåce di lomaedje $1)',
+'allpagesprev' => 'Di dvant',
+'allpagesnext' => 'Shuvant',
+'allpagessubmit' => 'I va',
+'allpagesprefix' => 'Håyner les pådjes avou l\' betchete:',
+
+# E this user
+#
+'mailnologin' => 'Nole adresse d\' evoyeu',
+'mailnologintext' => 'Po-z evoyî èn emile a èn ôte uzeu i vs fåt esse [[{{ns:special}}:Userlogin|elodjî]] eyet aveur ene adresse emile d\' evoyeu ki soeye valide dins vos [[{{ns:special}}:Preferences|preferinces]].',
+'emailuser' => 'Emiler a l\' uzeu',
+'emailpage' => 'Emilaedje a èn uzeu',
+'emailpagetext' => 'Si cist uzeu chal a dné ene adresse emile valide dins
+ses preferinces, vos lyi ploz evoyî èn emile a pårti di cisse pådje chal.
+L\' adresse emile k\' i gn a dins vos preferinces serè-st eployeye
+come adresse di l\' evoyeu (adresse «From:» di l\' emile),
+po ki l\' riçuveu poye risponde.',
+'usermailererror' => 'Åk n\' a nén stî tot voyant l\' emile:',
+'defemailsubject' => 'Emile da {{SITENAME}}',
+'noemailtitle' => 'Pont d\' adresse emile',
+'noemailtext' => 'Cist uzeu chal n\' a nén dné d\' adresse emile
+valide, ou n\' vout nén rçure des emiles des ôtes uzeus.
+Do côp, c\' est nén possibe di lyi evoyî èn emile.',
+'emailfrom' => 'Di',
+'emailto' => 'Po',
+'emailsubject' => 'Sudjet',
+'emailmessage' => 'Messaedje',
+'emailsend' => 'Evoyî',
+'emailsent' => 'Emile evoyî',
+'emailsenttext' => 'Vost emilaedje a stî evoyî comifåt.',
+
+# Watchlist
+#
+'watchlist' => 'Pådjes shuvowes',
+'mywatchlist' => 'Pådjes shuvowes',
+'nowatchlist' => 'Vosse djivêye des pådjes a shuve est vude.',
+'watchlistcount' => '\'\'\'Vos avoz $1 cayets dins vosse djivêye des shuvous, tot contant les pådjes di copene.\'\'\'',
+'clearwatchlist' => 'Netyî l\' djivêye des shuvous',
+'watchlistcleartext' => 'Estoz seur delzès voleur oister?',
+'watchlistclearbutton' => 'Netyî l\' djivêye',
+'watchlistcleardone' => 'Vosse djivêye des shuvous a stî netieye. {{PLURAL:$1|$1 cayet a stî bodjî|$1 cayets ont stî bodjîs}} foû.',
+'watchnologin' => 'Vos n\' estoz nén elodjî',
+'watchnologintext' => 'I vs fåt esse [[{{ns:special}}:Userlogin|elodjî]] po pleur candjî vosse djivêye des pådjes a shuve.',
+'addedwatch' => 'Radjouté ås shuvous',
+'addedwatchtext' => 'Li pådje «$1» a stî radjoutêye a vosse [[{{ns:special}}:Watchlist|djivêye des pådjes a shuve]].
+Tos les candjmints k\' i gn årè di cisse pådje chal, 
+eyet di si pådje di copene, seront håynés chal, eyet li pådje serè metowe e \'\'\'cråssès letes\'\'\'
+el [[{{ns:special}}:Recentchanges|djivêye des dierins candjmints]] po k\' ça soeye pus åjhey por vos del rimårker.
+
+Si vos vloz bodjî l\' pådje foû di vosse djivêye des shuvous, clitchîz so «Èn pus shuve li pådje» dins l\' bår di menu sol costé.',
+'removedwatch' => 'Bodjî foû des shuvous',
+'removedwatchtext' => 'Li pådje «$1» a stî bodjeye foû di vosse djivêye des pådjes a shuve.',
+'watch' => 'Shuve',
+'watchthispage' => 'Shuve cisse pådje',
+'unwatch' => 'Èn pus shuve',
+'unwatchthispage' => 'Èn pus shuve li pådje',
+'notanarticle' => 'Nén èn årtike',
+'watchnochange' => 'Nole des pådjes di vosse djivêye di pådjes a shuve n\' a stî candjeye dins l\' termene di tins dmandêye.',
+# NOTE: Messages.php n' eploye nén PLURAL
+'watchdetails' => '* {{PLURAL:$1|$1 pådje shuvowe|$1 pådjes shuvowes}} (sins conter les pådjes di copene)
+* [[{{ns:special}}:Watchlist/edit|Håyner eyet candjî l\' djivêye etire]]
+* [[{{ns:special}}:Watchlist/clear|Bodjî totes les pådjes foû del djivêye]]',
+'wlheader-enotif' => '* Li notifiaedje pa emile est en alaedje.',
+'wlheader-showupdated' => '* Les pådjes k\' ont candjî dispoy vosse dierinne vizite sont metowes e \'\'\'cråssès letes\'\'\'',
+'watchmethod-recent' => 'Cwerant après les pådjes k\' ont stî candjeyes dierinnmint ki sont eto des pådjes shuvowes',
+'watchmethod-list' => 'Cwerant après les pådjes shuvowes k\' ont stî candjeyes dierinnmint',
+'removechecked' => 'Bodjî les cayets tchoezis foû del djivêye des pådjes a shuve',
+# NOTE: Messages.php n' eploye nén PLURAL
+'watchlistcontains' => 'I gn a {{PLURAL:$1|$1 pådje|$1 pådjes}} e vosse djivêye des pådjes a shuve.',
+'watcheditlist' => 'Vochal ene djivêye alfabetike di vos pådjes shuvowes.
+Clitchîz so les boesses po les pådjes ki vos vloz bodjî di vosse djivêye di pådjes a shuve, poy clitchîz sol boton do dzo po lzès bodjî evoye (bodjî evoye ene pådje di contnou oistêye si pådje di copene avou et årvierdimint).',
+'removingchecked' => 'Bodjant les cayets dmandés foû del djivêye...',
+'couldntremove' => 'Dji n\' sai bodjî l\' cayet «$1» foû del djivêye...',
+'iteminvalidname' => 'Åk n\' a nén stî avou «$1», li no n\' est nén valide...',
+'wlnote' => 'Chal pa dzo les $1 dierins candjmints des <b>$2</b> dierinnès eures.',
+'wlshowlast' => 'Mostrer les dierin(nè)s $1 eures, $2 djoûs $3',
+'wlsaved' => 'Çouchal, c\' est ene modêye k\' a stî schapêye di vosse djivêye di pådjes shuvowes.',
+'wlhideshowown' => '$1 les candjmints da minne.',
+'wlhideshowbots' => '$1 les candjmints des robots.',
+'wldone' => 'Fwait.',
+
+'enotif_mailer' => 'Notifiaedje pa emile di {{SITENAME}}',
+'enotif_reset' => 'Mårker totes les pådjes come vizitêyes',
+'enotif_newpagetext' => 'C\' est ene nouve pådje.',
+'changed' => 'candjeye',
+'created' => 'ahivêye',
+'enotif_subject' => 'Li pådje «$PAGETITLE» so {{SITENAME}} a stî $CHANGEDORCREATED pa $PAGEEDITOR',
+'enotif_lastvisited' => 'Loukîz $1 po tos les candjmints dispoy vosse dierinne vizite.',
+'enotif_body' => 'Binamé $WATCHINGUSERNAME,
+
+Li pådje «$PAGETITLE» so {{SITENAME}} a stî $CHANGEDORCREATED li $PAGEEDITDATE pa $PAGEEDITOR, loukîz $PAGETITLE_URL pol modêye do moumint.
+
+$NEWPAGE
+
+Comintaire do candjeu: $PAGESUMMARY $PAGEMINOREDIT
+
+Contak do candjeu:
+emile: $PAGEEDITOR_EMAIL
+wiki: $PAGEEDITOR_WIKI
+
+I n\' årè nén d\' ôtes notifiaedjes po ds ôtes candjmints di ç\' minme pådje ci tant k\' vos n\' l\' åroz nén vizitêye. Vos ploz eto rimete a noû les drapeas di notifiaedje po totes les pådjes di vosse djivêye des pådjes a shuve.
+
+
+         Vosse binamé sistinme di notifiaedje so {{SITENAME}}
+
+--
+Po candjî l\' apontiaedje di vosse djivêye a shuve, loukîz
+{{fullurl:{{ns:special}}:Watchlist/edit}}
+
+Po pus d\' aidance:
+{{fullurl:{{ns:help}}:Aidance}}',
+
+# Delete/protect/revert
+#
+'deletepage' => 'Disfacer l\' pådje',
+'confirm' => 'Acertiner',
+'excontent' => 'li contnou esteut: «$1»',
+'excontentauthor' => 'li contnou esteut: «$1» (eyet l\' seu contribouweu esteut «$2»)',
+'exbeforeblank' => 'li contnou dvant l\' disfaçaedje esteut: «$1»',
+'exblank' => 'li pådje esteut vude',
+'confirmdelete' => 'Acertinaedje do disfaçaedje',
+'deletesub' => '(Disfaçaedje di «$1»)',
+'historywarning' => 'Asteme: Li pådje ki vos alez disfacer a-st ene istwere:',
+'confirmdeletetext' => 'Vos alez disfacer po tofer del båze di dnêyes ene
+pådje ou ene imådje, avou tote si istwere.
+Acertinez s\' i vs plait ki c\' est bén çoula ki vos vloz fé,
+ki vos comprindoz les consecwinces, et ki vos fjhoz çoula
+tot [[{{ns:project}}:Rîles a shure|shuvant les rîles]].',
+'actioncomplete' => 'Fwait',
+'deletedtext' => 'Li pådje «$1» a stî disfacêye. Loukîz li $2 po ene
+djivêye des dierins disfaçaedjes.',
+'deletedarticle' => 'pådje «$1» disfacêye',
+'dellogpage' => 'Djournå_des_disfaçaedjes',
+'dellogpagetext' => 'Chal pa dzo c\' est l\' djivêye des dierins disfaçaedjes.',
+'deletionlog' => 'djournå des disfaçaedjes',
+'reverted' => 'Rimetou ene modêye di dvant',
+'deletecomment' => 'Råjhon do disfaçaedje',
+'imagereverted' => 'Li rmetaedje del modêye di dvant a stî comifåt.',
+'cantrollback' => 'Dji n\' sai disfé les candjmints; li dierin contribouweu est li seu oteur po cist årtike ci.',
+'alreadyrolled' => 'Dji n\' sai disfé li dierin candjmint di [[:$1]]
+fwait pa [[{{ns:user}}:$2|$2]] ([[{{ns:user_talk}}:$2|Copene]]); 
+ene sakî d\' ôte a ddja candjî l\' årtike ou ddja rmetou l\' modêye di dvant. 
+
+Li dierin candjmint a stî fwait pa [[{{ns:user}}:$3|$3]] ([[{{ns:user_talk}}:$3|Copene]]).',
+#   only shown if there is an edit comment
+'editcomment' => 'Li comintaire do candjmint esteut: «<i>$1</i>».',
+'revertpage' => 'Disfwait li candjmint da [[{{ns:special}}:Contributions/$2|$2]] ([[{{ns:user_talk}}:$2|copene]]); li dierin candjmint est asteure da [[{{ns:user}}:$1|$1]]',
+'protectlogpage' => 'Djournå_des_protedjaedjes',
+'protectlogtext' => 'Chal pa dzo c\' est ene djivêye des protedjaedjes et disprotedjaedjes des pådjes.
+Loukîz [[{{ns:project}}:Pådje protedjeye]] po pus di racsegnes.',
+'protectedarticle' => '«[[$1]]» protedjî',
+'unprotectedarticle' => '«[[$1]]» disprotedjî',
+'protectsub' => '(Protedjant «$1»)',
+'confirmprotecttext' => 'Voloz vs vormint protedjî cisse pådje ci?',
+'confirmprotect' => 'Acertinez l\' protedjaedje',
+'protectmoveonly' => 'Protedjî seulmint conte les displaeçaedjes',
+'protectcomment' => 'Råjhon po protedjî',
+'unprotectsub' => '(Disprotedjant «$1»)',
+'confirmunprotecttext' => 'Voloz vs vormint disprotedjî cisse pådje ci?',
+'confirmunprotect' => 'Acertinez l\' disprotedjaedje',
+'unprotectcomment' => 'Råjhon po disprotedjî',
+'protect-unchain' => 'Disbloker les permissions di displaeçaedje',
+'protect-text' => 'Vos ploz droci vey eyet candjî l\' livea d\' protedjaedje pol pådje <strong>$1</strong>.
+S\' i vs plait acertinez vs di bén shure les [[{{ns:project}}:Pådje_protedjeye|rîles po les pådjes protedjeyes]].',
+'protect-viewtext' => 'Vosse conte d\' uzeu n\' a nén les permissions k\' i fåt po candjî les liveas d\' protedjaedje. Voci les cis metous pol moumint pol pådje <strong>$1</strong>:',
+'protect-default' => '(prémetou)',
+'protect-level-autoconfirmed' => 'Bloker les uzeus nén eredjîstrés',
+'protect-level-sysop' => 'Seulmint les manaedjeus',
+
+# restrictions (nouns)
+'restriction-edit' => 'Candjî',
+'restriction-move' => 'Displaecî',
+
+# Undelete
+'undelete' => 'Rapexhî des disfacêyès pådjes',
+'undeletepage' => 'Vey et rapexhî des disfacêyès pådjes',
+'viewdeletedpage' => 'Vey les disfacêyès pådjes',
+'undeletepagetext' => 'Les pådjes shuvantes ont stî disfacêyes mins ele sont co ezès årtchives, do côp ele polèt esse rapexheyes.',
+'undeleteextrahelp' =>  'Po rapexhî l\' pådje etire, leyîz vudes totes les boesses a clitchî eyet clitchîz sol boton «\'\'\'Rapexhî\'\'\'». Po rapexhî seulmint des modêyes k\' i gn a, tchoezixhoz les cenes ki vos vloz avou les boesses a clitchî, eyet poy clitchîz sol boton «\'\'\'Rapexhî\'\'\'». Si vos clitchîz sol boton «\'\'\'Netyî\'\'\'», çoula neteyrè l\' tchamp d\' comintaire eyet totes les boesses a clitchî.',
+'undeletearticle' => 'Rapexhî on disfacé årtike',
+'undeleterevisions' => '$1 modêyes ezès årtchives',
+'undeletehistory' => 'Si vos rapexhîz l\' pådje, l\' istwere del pådje
+serè rapexheye eto, avou totes les modêyes co ezès årtchives.
+Si ene novele pådje avou l\' minme no a stî askepieye dispoy li disfaçaedje
+di cisse chal, les rapexheyès modêyes seront metowes e l\' istwere mins
+c\' est l\' modêye do moumint, et nén l\' cisse rapexheye, ki
+srè håynêye.',
+'undeletehistorynoadmin' => 'Cist årtike a stî disfacé. Li råjhon do 
+disfaçaedje est dnêye chal pa dzo, avou les detays des uzeus k\' ont
+candjî l\' pådje divant do disfaçaedje. Li tecse di ces modêyes disfacêyes
+ni pout esse veyou ki des manaedjeus.',
+'undeleterevision' => 'Modêye disfacêye li $1',
+'undeletebtn' => 'Rapexhî!',
+'undeletereset' => 'Netyî',
+'undeletecomment' => 'Comintaire:',
+'undeletedarticle' => 'a rapexhî l\' pådje «[[$1]]»',
+# NOTE: Messages.php n' eploye nén PLURAL
+'undeletedrevisions' => '{{PLURAL:$1|ene modêye di rapexheye|$1 modêyes di rapexheyes}}',
+'undeletedpage' => '<big>\'\'\'Li pådje $1 a stî rapexheye.\'\'\'</big>
+
+Loukîz l\' [[Special:Log/delete|djournå des disfaçaedjes]] po ene djivêye des dierins disfaçaedjes eyet rapexhaedjes.',
+
+# Namespace form on various pages
+'namespace' => 'Espåce di lomaedje:',
+'invert' => 'Tchuze å rvier',
+
+# Contributions
+#
+'contributions' => 'Ovraedjes di l\' uzeu',
+'mycontris' => 'Mi ovraedje',
+'contribsub2' => 'Po l\' uzeu $1 ($2)',
+'nocontribs' => 'Nou candjmint di trové ki corespondreut a ç\' critere la.',
+'ucnote' => 'Chal pa dzo les <b>$1</b> dierins candjmints di l\' uzeu so les <b>$2</b> dierins djoûs.',
+'uclinks' => 'Vey les $1 dierins candjmints; vey les $2 dierins djoûs.',
+
+'sp-contributions-newest' => 'Dierins ovraedjes',
+'sp-contributions-oldest' => 'Prumîs ovraedjes',
+'sp-contributions-newer'  => '$1 di dvant',
+'sp-contributions-older'  => '$1 shuvants',
+
+
+# What links here
+#
+'whatlinkshere' => 'Pådjes ki loynut chal',
+'linklistsub' => '(Djivêye des loyéns)',
+'linkshere' => 'Les pådjes ki shuvèt ont des loyéns viè cisse ci:',
+'nolinkshere' => 'Nole pådje avou des loyéns viè cisse ci.',
+'isredirect' => 'pådje di redjiblaedje',
+
+# Block/unblock IP
+#
+'blockip' => 'Bloker èn uzeu',
+'blockiptext' => 'Rimplixhoz les tchamps chal pa dzo po bloker
+l\' accès e scrijhaedje d\' èn uzeu dné ou a pårt d\' ene
+adresse IP dnêye. Çouci èn doet esse fwait ki po-z arester les
+vandales, et çoula doet esse fwait tot shuvant les
+[[{{ns:project}}:Rîles a shure|rîles di {{SITENAME}}]].
+Dinez ene råjhon do blocaedje (eg: dijhoz les pådjes k\' ont
+stî vandalijheyes).',
+'ipaddress' => 'Adresse IP/no d\' uzeu',
+'ipadressorusername' => 'Adresse IP ou no d\' uzeu',
+'ipbexpiry' => 'Tins do blocaedje',
+'ipbreason' => 'Råjhon',
+'ipbsubmit' => 'Bloker cist uzeu',
+'ipbother' => 'Ôte termene',
+'ipboptions' => '2 eures:2 hours,1 djoû:1 day,3 djoûs:3 days,1 samwinne:1 week,2 samwinnes:2 weeks,1 moes:1 month,3 moes:3 months,6 moes:6 months,1 anêye:1 year,po todi:infinite',
+'ipbotheroption' => 'ôte',
+'badipaddress' => 'Nol uzeu avou ç\' no la, ou adresse IP nén valide',
+'blockipsuccesssub' => 'Li blocaedje a stî comifåt',
+'blockipsuccesstext' => '«[[{{ns:special}}:Contributions/$1|$1]]» a stî bloké.<br />Loukîz li [[{{ns:special}}:Ipblocklist|djivêye des blocaedjes]] po candjî on blocaedje.',
+'unblockip' => 'Disbloker èn uzeu',
+'unblockiptext' => 'Rimplixhoz les tchamps chal pa dzo po ridner accès e scrijhaedje a èn uzeu ou adresse IP k\' estént blokés.',
+'ipusubmit' => 'Disbloker ciste adresse ci',
+'ipblocklist' => 'Djivêye d\' adresses IP et di nos d\' uzeus ki sont blokés',
+'blocklistline' => '$1, $2 a bloké $3 ($4)',
+'infiniteblock' => 'po todi',
+'expiringblock' => 'disk\' å $1',
+'ipblocklistempty' => 'Li djivêye des blocaedjes est vude.',
+'blocklink' => 'bloker',
+'unblocklink' => 'disbloker',
+'contribslink' => 'contribouwaedjes',
+'autoblocker' => 'Bloké otomaticmint paski vos eployîz li minme adresse IP ki «[[{{ns:user}}:$1|$1]]». Råjhon do blocaedje «\'\'\'$2\'\'\'».',
+'blocklogpage' => 'Djournå_des_blocaedjes',
+'blocklogentry' => '«[[$1]]» a stî bloké po ene termene di $2',
+'blocklogtext' => 'Çouchal, c\' est on djournå des blocaedjes eyet disblocaedjes d\' uzeus. Les adresses IP blokêyes otomaticmint èn sont nén håynêyes. Loukîz li [[{{ns:special}}:Ipblocklist|djivêye des adresses IP blokêyes]] po vey les blocaedjes d\' adresses IP do moumint.',
+'unblocklogentry' => '«$1» a stî disbloké',
+'range_block_disabled' => 'Li possibilité po les manaedjeus di bloker des fortchetes d\' adresses IP a stî dismetowe.',
+'ipb_expiry_invalid' => 'Tins di blocaedje nén valide.',
+'ip_range_invalid' => 'Fortchete d\' adresses IP nén valide.',
+'proxyblocker' => 'Blocaedje di procsi',
+'proxyblockreason' => 'Voste adresse IP a stî blokêye paski c\' est on procsi k\' est å lådje. Contactez vost ahesseu Internet ou l\' siervice di sopoirt tecnike eyet lzî dire po çoula, la k\' c\' est on problinme di såvrité serieus.',
+'proxyblocksuccess' => 'Fwait.',
+#'sorbs' => 'SORBS DNSBL',
+'sorbsreason' => 'Voste adresse IP si trove dins l\' djivêye des procsis å lådje di [http://www.sorbs.net SORBS DNSBL].',
+'sorbs_create_account_reason' => 'Voste adresse IP si trove dins l\' djivêye des procsis å lådje di [http://www.sorbs.net SORBS DNSBL]. Vos n\' poloz nén ahiver on conte d\' uzeu.',
+
+# Developer tools
+#
+
+# Make sysop
+'rightslog' => 'Djournå des droets des uzeus',
+'rightslogtext' => 'Çouchal, c\' est on djournå des candjmints des droets des uzeus.',
+'rightslogentry' => 'l\' uzeu «$1» a stî candjî do groupe «$2» viè «$3»',
+'rightsnone' => '(nouk)',
+
+# Move page
+#
+'movepage' => 'Displaecî l\' pådje',
+'movepagetext' => 'Chal vos ploz candjî l\' no d\' ene pådje,
+dj\' ô bén displaecî l\' pådje, eyet si istwere, viè l\' novea no.
+Li vî tite divénrè-st ene pådje di redjiblaedje viè l\' novele.
+Les loyéns viè l\' viye pådje èn seront nén candjîs; acertinez vs di
+[[{{ns:special}}:DoubleRedirects|verifyî]] s\' i n\' a nén des dobes
+ou crons redjiblaedjes.
+Vos estoz responsåve di fé çou k\' i fåt po k\' les loyéns
+continouwexhe di moenner la k\' i fåt.
+
+Notez k\' el pådje èn serè \'\'\'nén\'\'\' displaeceye s\' i gn a ddja ene
+pådje avou l\' novea tite, a moens k\' ele soeye vude, ou ene pådje
+di redjiblaedje, et k\' ele n\' åye nole istwere.
+Çoula vout dire ki vos ploz ri-displaecî ene pådje viè l\' no k\' ele
+aveut djusse divant, et insi disfé vosse prumî displaeçaedje, å cas ou vos vs
+rindrîz conte ki vos avoz fwait ene flotche; ey eto ki vos n\' poloz nén
+spotchî par accidint ene pådje k\' egzistêye dedja.
+
+<b>ASTEME!</b>
+On displaeçaedje pout esse on consecant et nén atindou candjmint po ene
+pådje foirt léjhowe; s\' i vs plait tuzez bén åzès consecwinces divant
+d\' continouwer.',
+'movepagetalktext' => 'Li pådje di copene associeye, s\' end a ene, serè
+displaeceye otomaticmint avou, \'\'\'a moens ki:\'\'\'
+*Vos displaecîz l\' pådje d\' èn espåce di lomaedje a èn ôte,
+*Ene pådje di copene nén vude egzistêye dedja dizo l\' novea no,
+*Vos disclitchrîz l\' boesse a clitchî chal pa dzo.
+
+Dins ces cas la, vos dvroz displaecî l\' pådje di copene al mwin, ou rcopyî
+si contnou, si vos l\' vloz mete adlé l\' novea no
+d\' l\' årtike.',
+'movearticle' => 'Displaecî di',
+'movenologin' => 'Nén elodjî',
+'movenologintext' => 'I vs fåt esse èn uzeu eredjîstré eyet esse [[{{ns:special}}:Userlogin|elodjî]] por vos pleur displaecî ene pådje.',
+'newtitle' => 'Viè l\' novea tite',
+'movepagebtn' => 'Displaecî',
+'pagemovedsub' => 'Li displaçaedje a stî comifåt',
+'pagemovedtext' => 'Li pådje «[[$1]]» a stî displaceye viè «[[$2]]».',
+'articleexists' => 'Ene pådje egzistêye dedja avou ç\' no la, oudonbén
+li no k\' vos avoz tchoezi n\' est nén valide.
+Tchoezixhoz è èn ôte s\' i vs plait.',
+'talkexists' => '\'\'\'Li pådje leye minme a stî displaeceye comifåt, mins nén li pådje di copene, ca i gn aveut ddja ene pådje di copene k\' egzistéve al novele plaece. I vs fårè copyî l\' tecse del pådje di copene al mwin.\'\'\'',
+'movedto' => 'displaecî viè',
+'movetalk' => 'Displaecî li pådje di copene avou, si ça astchait.',
+'talkpagemoved' => 'Li pådje di copene corespondante a stî displaeceye avou.',
+'talkpagenotmoved' => 'Li pådje di copene corespondante n\' a <strong>nén</strong> stî displaeceye.',
+'1movedto2' => '[[$1]] displaecî viè [[$2]]',
+'1movedto2_redir' => '[[$1]] displaecî viè [[$2]] pa dsu on redjiblaedje',
+'movelogpage' => 'Djournå des displaçaedjes',
+'movelogpagetext' => 'Chal pa dzo c\' est ene djivêye des pådjes k\' on stî displaceyes.',
+'movereason' => 'Råjhon',
+'revertmove'	=> 'disfé',
+'delete_and_move' => 'Disfacer et displaecî',
+'delete_and_move_text' => '==I gn a mezåjhe di disfacer==
+
+L\' årtike såme «[[$1]]» egzistêye dedja. El voloz vs disfacer po vs permete di displaecî l\' ôte?',
+'delete_and_move_confirm' => 'Oyi, disfacer l\' pådje',
+'delete_and_move_reason' => 'Disfacé po permete on displaeçaedje',
+'selfmove' =>  'Les tites sourdant et såme sont les minmes; ene pådje ni pout nén esse displaeceye so leye minme.',
+'immobile_namespace' =>  'Li tite såme est d\' ene sôre especiåle; on n\' pout nén displaecî des pådjes dins cist espåce di lomaedje la.',
+
+# Export
+'export' => 'Ricopyî des pådjes foû',
+'exporttext' => 'Vos ploz rcopyî foû l\' tecse eyet l\' istwere des candjmints d\' ene pådje dinêye, ou co di sacwantes pådjes, eyet l\' aveur dins on fitchî e cogne XML. Çoula pout adon esse ristitchî dins èn ôte wiki k\' eploye MediaWiki, åd triviè del pådje di rstitchaedje (Special:Import).
+
+Po rcopyî des pådjes foû, metoz les tites des pådjes dins l\' boesse di tecse chal pa dzo, on tite pa roye, eyet tchoezixhoz si vos vloz totes les modêyes avou l\' istwere, ou rén kel dierinne modêye avou fok les racsegnes sol dierin candjmint.
+
+Dins ç\' dierin cas, vos ploz eto eployî ene hårdêye, eg: [[{{ns:special}}:Export/{{Mediawiki:mainpage}}]] pol pådje «{{Mediawiki:mainpage}}».',
+'exportcuronly' => 'Inclure fok li modêye do moumint, nén tote l\' istwere',
+'exportnohistory' => '----
+\'\'\'Note:\'\'\' li rcopiaedje foû di tote l\' istwere des pådjes a stî dismetou cåze di problinmes di tchedje des sierveus.',
+
+# Namespace 8 related
+'allmessages' => 'Tos les messaedjes ratournåves',
+'allmessagesname' => 'No del variåve',
+'allmessagesdefault' => 'Tecse prémetou',
+'allmessagescurrent' => 'Tecse pol moumint',
+'allmessagestext' => 'Çouchal est ene djivêye di tos les messaedjes k\' i gn a dins l\' espåce di lomaedje \'\'MediaWiki:\'\'',
+'allmessagesnotsupportedUI' => 'Vosse lingaedje do moumint po l\' eterface (<b>$1</b>) n\' est nén sopoirté pa Special:AllMessages so cisse waibe chal.',
+'allmessagesnotsupportedDB' => '\'\'\'Special:AllMessages\'\'\' n\' est nén sopoirté paski \'\'\'$wgUseDatabaseMessages\'\'\' est dismetou.',
+'allmessagesfilter' => 'Erîlêye ratourneure pol passete:',
+'allmessagesmodified' => 'Seulmint les cis candjîs',
+
+# Thumbnails
+'thumbnail-more' => 'Ragrandi',
+'missingimage' => '<b>Imådje mancante:</b><br /><i>$1</i>',
+'filemissing' => 'Fitchî mancant',
+'thumbnail_error' => 'Åk n\' a nén stî tot fjhant l\' pitite imådje: $1',
+
+# Special:Import
+'import' => 'Ristitchî des pådjes',
+'importtext'	=> 'S\' vs plait ricopyîz l\' fitchî foû do sourdant wiki avou l\' usteye di rcopiaedje foû (Special:Export), el schaper so voste éndjole, et poy l\' eberweter droci.',
+'importfailed'	=> 'Li ristitchaedje a fwait berwete: $1',
+'importnotext'	=> 'Vude ou pont d\' tecse',
+'importsuccess'	=> 'Li ristitchaedje a stî comifåt!',
+
+# Keyboard access keys for power users
+'accesskey-search' => 'f',
+'accesskey-minoredit' => 'i',
+'accesskey-save' => 's',
+'accesskey-preview' => 'p',
+'accesskey-diff' => 'v',
+'accesskey-compareselectedversions' => 'v',
+'accesskey-watch' => 'w',
+
+# tooltip help for some actions, most are in Monobook.js
+'tooltip-search' => 'Cweri so {{SITENAME}}',
+'tooltip-minoredit' => 'Mete çouci come on candjmint mineur',
+'tooltip-save' => 'Schaper vos candjmints',
+'tooltip-preview' => 'Prévey vos candjmints, fijhoz l\' divant d\' schaper s\' i vs plait!',
+'tooltip-diff' => 'Mostrer les candjmints ki vos avoz fwait e tecse.',
+'tooltip-compareselectedversions' => 'Mostrer les diferinces etur les deus modêyes tchoezeyes di cisse pådje ci.',
+'tooltip-watch' => 'Radjouter cisse pådje ci a vosse djivêye des shuvous',
+
+# stylesheets
+'monobook.css' => '/* candjî ci fitchî ci po candjî l\' foye di stîle eyet l\' rivnance del waibe etire */',
+#'monobook.js' => '/* Deprecated; use [[MediaWiki:common.js]] */',
+
+# Metadata
+'notacceptable' => 'Li sierveu wiki èn vos pout nén dner les dnêyes dins ene cogne ki vosse cliyint sait lére.',
+
+# Attribution
+'anonymous' => 'Uzeu(s) anonime(s) di {{SITENAME}}',
+'siteuser' => 'Uzeu d\' {{SITENAME}} «$1»',
+'lastmodifiedatby' => 'Cisse pådje a stî candjeye pol dierin côp li $2, $1 pa $3.',
+'and' => 'eyet',
+'othercontribs' => 'Båzé so l\' ovraedje da $1.',
+'others' => 'des ôtes',
+'siteusers' => 'Uzeu(s) d\' {{SITENAME}} «$1»',
+'creditspage' => 'Pådje di credits',
+'nocredits' => 'I n\' a pont d\' informåcion di credits po cisse pådje ci.',
+
+# Spam protection
+'subcategorycount' => 'I gn a {{PLURAL:$1|ene dizo-categoreye|$1 dizo-categoreyes}} e cisse categoreye ci.',
+'categoryarticlecount' => 'I gn a {{PLURAL:$1|èn årtike|$1 årtikes}} e cisse categoreye ci.',
+'listingcontinuesabbrev' => ' cont.',
+
+# Info page
+'infosubtitle' => 'Informåcions pol pådje',
+'numedits' => 'Nombe di candjmints (årtike): $1',
+'numtalkedits' => 'Nombe di candjmints (pådje di copene): $1',
+'numwatchers' => 'Nombe di shuveus: $1',
+'numauthors' => 'Nombe d\' oteurs diferins (årtike): $1',
+'numtalkauthors' => 'Nombe d\' oteurs diferins (pådje di copene): $1',
+
+# Math options
+'mw_math_png' => 'Håyner tofer come ene imådje PNG',
+'mw_math_simple' => 'Håyner en HTML si c\' est foirt simpe, ôtmint e PNG',
+'mw_math_html' => 'Håyner en HTML si c\' est possibe, ôtmint e PNG',
+'mw_math_source' => 'El leyî e TeX (po les betchteus e môde tecse)',
+'mw_math_modern' => 'Ricmandé po les betchteus modienes',
+'mw_math_mathml' => 'Eployî MathML si c\' est possibe (esperimintå)',
+
+
+# NOTE: les apostrofes divèt esse escapêyes.
+# Monobook.js: tooltips and access keys for monobook
+'monobook.js' => '/* Deprecated; use [[MediaWiki:common.js]] */',
+/* tooltips and access keys */
+
+'accesskey-pt-userpage' => '.',
+'tooltip-pt-userpage' => 'Pådje d\' uzeu da minne',
+'accesskey-pt-anonuserpage' => '.',
+'tooltip-pt-anonuserpage' => 'Li pådje d\' uzeu po l\' adresse IP ki vos eployîz pol moumint',
+'accesskey-pt-mytalk' => 'n',
+'tooltip-pt-mytalk' => 'Pådje di copene da minne',
+'accesskey-pt-anontalk' => 'n',
+'tooltip-pt-anontalk' => 'Pådje di copene po les candjmints fwaits a pårti di ciste adresse IP ci',
+'accesskey-pt-preferences' => '',
+'tooltip-pt-preferences' => 'Mes preferinces',
+'accesskey-pt-watchlist' => 'l',
+'tooltip-pt-watchlist' => 'Li djivêye des pådjes ki vos shujhoz po cwand ele sont candjeyes.',
+'accesskey-pt-mycontris' => 'y',
+'tooltip-pt-mycontris' => 'Djivêye des ovraedjes da minne',
+'accesskey-pt-login' => 'o',
+'tooltip-pt-login' => 'Vos estoz ecoraedjî d\' vos elodjî, mins nerén, c\' est nén oblidjî.',
+'accesskey-pt-anonlogin' => 'o',
+'tooltip-pt-anonlogin' => 'Vos estoz ecoraedjî d\' vos elodjî, mins nerén, c\' est nén oblidjî.',
+'accesskey-pt-logout' => '',
+'tooltip-pt-logout' => 'Vos dislodjî',
+'accesskey-ca-talk' => 't',
+'tooltip-ca-talk' => 'Copene åd fwait do contnou del pådje',
+'accesskey-ca-edit' => 'e',
+'tooltip-ca-edit' => 'Vos ploz candjî cisse pådje ci. S\' i vs plait, eployîz l\' boton «Vey divant» po vs acertiner k\' tot est comifåt dvant d\' schaper vos candjmints.',
+'accesskey-ca-addsection' => '+',
+'tooltip-ca-addsection' => 'Radjouter on comintaire a cisse copene ci.',
+'accesskey-ca-viewsource' => 'e',
+'tooltip-ca-viewsource' => 'Cisse pådje ci est protedjeye. Vos ploz seulmint vey li côde sourdant, mins nén l\' candjî.',
+'accesskey-ca-history' => 'h',
+'tooltip-ca-history' => 'Viyès modêyes del pådje.',
+'accesskey-ca-protect' => '=',
+'tooltip-ca-protect' => 'Protedjî cisse pådje ci',
+'accesskey-ca-delete' => 'd',
+'tooltip-ca-delete' => 'Disfacer ci pådje ci',
+'accesskey-ca-undelete' => 'd',
+'tooltip-ca-undelete' => 'Rapexhî les candjmitns fwaits al pådje divant k\' ele soeyexhe disfacêye',
+'accesskey-ca-move' => 'm',
+'tooltip-ca-move' => 'Displaecî cisse pådje ci',
+'accesskey-ca-watch' => 'w',
+'tooltip-ca-watch' => 'Radjouter cisse pådje ci al djivêye di vos årtikes shuvous',
+'accesskey-ca-unwatch' => 'w',
+'tooltip-ca-unwatch' => 'Bodjî cisse pådje ci di vosse djivêye des årtikes shuvous',
+'accesskey-search' => 'f',
+'tooltip-search' => 'Cweri so ci wiki chal',
+'accesskey-p-logo' => '',
+'tooltip-p-logo' => 'Mwaisse pådje',
+'accesskey-n-mainpage' => 'z',
+'tooltip-n-mainpage' => 'Vizitez li Mwaisse pådje',
+'accesskey-n-portal' => '',
+'tooltip-n-portal' => 'Åd fwait do pordjet, çou k\' vos ploz fé, wice trover des sacwès',
+'accesskey-n-currentevents' => '',
+'tooltip-n-currentevents' => 'Des informåcions so des evenmints d\' actouwålité',
+'accesskey-n-recentchanges' => 'r',
+'tooltip-n-recentchanges' => 'Li djivêye des dierins candjmints k\' i gn a-st avou sol wiki.',
+'accesskey-n-randompage' => 'x',
+'tooltip-n-randompage' => 'Tcherdjî ene pådje a l\' astcheyance',
+'accesskey-n-help' => '',
+'tooltip-n-help' => 'Li plaece po trover les responses a vos kesses so l\' eployaedje do wiki.',
+'accesskey-n-sitesupport' => '',
+'tooltip-n-sitesupport' => 'Sopoirter l\' pordjet',
+'accesskey-t-whatlinkshere' => 'j',
+'tooltip-t-whatlinkshere' => 'Djivêye di totes les pådjes k\' ont des loyéns viè cisse pådje ci',
+'accesskey-t-recentchangeslinked' => 'k',
+'tooltip-t-recentchangeslinked' => 'Dierins candjmints fwaits so des pådjes ki cisse pådje ci a des loyéns viè zeles',
+'accesskey-feed-rss' => '',
+'tooltip-feed-rss' => 'Sindicåcion RSS po cisse pådje ci',
+'accesskey-feed-atom' => '',
+'tooltip-feed-atom' => 'Sindicåcion Atom po cisse pådje ci',
+'accesskey-t-contributions' => '',
+'tooltip-t-contributions' => 'Vey li djivêye des ovraedjes fwait pa cist uzeu ci',
+'accesskey-t-emailuser' => '',
+'tooltip-t-emailuser' => 'Evoyî èn emile a cist uzeu ci',
+'accesskey-t-upload' => 'u',
+'tooltip-t-upload' => 'Eberweter sol sierveu des imådjes ou fitchîs media',
+'accesskey-t-specialpages' => 'q',
+'tooltip-t-specialpages' => 'Djivêye di totes les pådjes sipeciåles',
+'accesskey-ca-nstab-main' => 'c',
+'tooltip-ca-nstab-main' => 'Vey li pådje di contnou',
+'accesskey-ca-nstab-user' => 'c',
+'tooltip-ca-nstab-user' => 'Vey li pådje di l\' uzeu',
+'accesskey-ca-nstab-media' => 'c',
+'tooltip-ca-nstab-media' => 'Vey li pådje di media',
+'accesskey-ca-nstab-special' => '',
+'tooltip-ca-nstab-special' => 'Çouchal, c\' est ene pådje sipeciåle, vos n\' poloz nén candjî l\' pådje leyminme.',
+'accesskey-ca-nstab-project' => 'a',
+'tooltip-ca-nstab-project' => 'Vey li pådje di pordjet',
+'accesskey-ca-nstab-image' => 'c',
+'tooltip-ca-nstab-image' => 'Vey li pådje d\' imådje',
+'accesskey-ca-nstab-mediawiki' => 'c',
+'tooltip-ca-nstab-mediawiki' => 'Vey li messaedje ratournåve do sistinme',
+'accesskey-ca-nstab-template' => 'c',
+'tooltip-ca-nstab-template' => 'Vey li modele',
+'accesskey-ca-nstab-help' => 'c',
+'tooltip-ca-nstab-help' => 'Vey li pådje d\' aidance',
+'accesskey-ca-nstab-category' => 'c',
+'tooltip-ca-nstab-category' => 'Vey li pådje di categoreye',
+
+# image deletion
+'deletedrevision' => 'Viye modêye $1 disfacêye.',
+
+# browsing diffs
+'previousdiff' => '← Diferinces des candjmints di dvant',
+'nextdiff' => 'Diferinces des candjmints shuvants →',
+
+'imagemaxsize' => 'Limite pol håynaedje ezès pådjes d\' imådje:',
+'thumbsize' => 'Grandeu po les imådjetes (thumb):',
+'showbigimage' => 'Aberweter l\' grande modêye ($1x$2, $3 Ko)',
+
+'newimages' => 'Galreye des nouvès imådjes',
+'showhidebots' => '($1 robots)',
+'noimages'  => 'I n\' a rén a vey.',
+
+# short names for language variants used for language conversion links.
+# to disable showing a particular link, set it to 'disable', e.g.
+# 'variantname-zh-sg' => 'disable',
+#'variantname-zh-cn' => 'cn',
+#'variantname-zh-tw' => 'tw',
+#'variantname-zh-hk' => 'hk',
+#'variantname-zh-sg' => 'sg',
+#'variantname-zh' => 'zh',
+# variants for Serbian language
+#'variantname-sr-ec' => 'sr-ec',
+#'variantname-sr-el' => 'sr-el',
+#'variantname-sr-jc' => 'sr-jc',
+#'variantname-sr-jl' => 'sr-jl',
+#'variantname-sr' => 'sr',
+
+# labels for User: and Title: on Special:Log pages
+'specialloguserlabel' => 'Uzeu:',
+'speciallogtitlelabel' => 'Tite:',
+
+'passwordtooshort' => 'Li scret est pår trop court. I doet esse di pol moens $1 caracteres.',
+
+# Media Warning
+'mediawarning' => '\'\'\'Asteme\'\'\': Ci fitchî chal pôreut esse evirussé, si vos l\' enondez vos pôrîz infecter l\' sistinme da vosse.<hr />',
+
+'fileinfo' => '$1Ko, sôre MIME: <code>$2</code>',
+
+# Metadata
+'metadata' => 'Meta-dnêyes',
+'metadata-help' => 'Ci fitchî chal a des informåcions di rawete, motoit bén radjoutêyes pa l\' aparey foto limerike ou l\' sicanrece eployeye po fé l\' imådje. Si l\' imådje a stî candjeye dispoy adon, i s\' pout ki sacwants detays ni corespondexhe pus totafwait.',
+'metadata-expand' => 'Mostrer les stindous detays',
+'metadata-collapse' => 'Catchî les stindous detays',
+'metadata-fields' => 'Les tchamps di meta-dnêyes EXIF metous chal vont esse
+håynés ezès pådjes d\' imådje cwand l\' tåvlea di meta-dnêyes
+est raptiti. Les ôtes seront catchîs.
+* make
+* model
+* datetimeoriginal
+* exposuretime
+* fnumber
+* focallength',
+
+# Exif tags
+'exif-imagewidth' => 'Lårdjeur',
+'exif-imagelength' => 'Hôteur',
+'exif-bitspersample' =>'Bits pa compôzant',
+'exif-photometricinterpretation' =>'Compôzaedje des picsels',
+'exif-orientation' => 'Oryintåcion',
+'exif-samplesperpixel' =>'Nombe di compôzants',
+'exif-xresolution' => 'Finté d\' coûtchî',
+'exif-yresolution' => 'Finté d\' astampé',
+'exif-resolutionunit' => 'Unité pol finté d\' coûtchî/astampé',
+'exif-datetime' => 'Date ey eure ki l\' fitchî a stî candjî',
+'exif-imagedescription' => 'Tite di l\' imådje',
+'exif-make' => 'Måke del camera',
+'exif-model' => 'Modele del camera',
+'exif-software' => 'Programe eployî',
+'exif-artist' => 'Oteur',
+'exif-copyright' => 'Ditinteu des abondroets',
+'exif-exifversion' => 'Modêye d\' exif',
+'exif-colorspace' => 'Espåce di coleurs',
+'exif-makernote' => 'Notes do fabricant',
+'exif-usercomment' => 'Comintaires di l\' uzeu',
+'exif-datetimeoriginal' => 'Date ey eure ki les dnêyes ont stî fwaites',
+'exif-datetimedigitized' => 'Date ey eure do scanaedje',
+'exif-exposuretime-format' => '$1 seg ($2)',
+'exif-fnumber-format' =>'f/$1',
+'exif-lightsource' => 'Sourdant del loumire',
+'exif-focallength-format' =>'$1 mm',
+'exif-filesource' => 'Fitchî sourdant',
+'exif-scenetype' => 'Sôre di sinne',
+'exif-whitebalance' => 'Balance di blancs',
+'exif-digitalzoomratio' => 'Rapoirt di zoumaedje limerike',
+'exif-contrast' => 'Contrasse',
+'exif-saturation' => 'Saturaedje',
+'exif-gpslatituderef' => 'Latitude Nôr ou Sud',
+'exif-gpslatitude' => 'Latitude',
+'exif-gpslongituderef' => 'Londjitude Ess ou Ouwess',
+'exif-gpslongitude' => 'Londjitude',
+'exif-gpsaltituderef' => 'Referince di hôteur',
+'exif-gpsaltitude' => 'Hôteur',
+'exif-gpstimestamp' => 'Tins do GPS (ôrlodje atomike)',
+'exif-gpssatellites' => 'Sipoutniks eployîs pol mezuraedje',
+'exif-gpsmeasuremode' => 'Môde di mzuraedje',
+'exif-gpsdop' => 'Precizion di mzuraedje',
+'exif-gpsareainformation' => 'No del redjon GPS',
+'exif-gpsdatestamp' => 'Date do GPS',
+'exif-gpsdifferential' => 'Coridjaedje diferenciel do GPS',
+
+# Exif attributes
+'exif-compression-6' => 'JPEG',
+
+'exif-photometricinterpretation-2' => 'RGB',
+'exif-photometricinterpretation-6' => 'YCbCr',
+
+'exif-orientation-1' => 'Normå', # 0th row: top; 0th column: left
+'exif-orientation-3' => 'Tourné di 180°', # 0th row: bottom; 0th column: right
+
+
+'exif-xyresolution-i' => '$1 dpi',
+'exif-xyresolution-c' => '$1 dpc',
+
+'exif-colorspace-1' => 'sRGB',
+'exif-colorspace-ffff.h' => 'FFFF.H',
+
+'exif-componentsconfiguration-0' => 'n\' egzistêye nén',
+'exif-componentsconfiguration-1' => 'Y',
+'exif-componentsconfiguration-2' => 'Cb',
+'exif-componentsconfiguration-3' => 'Cr',
+'exif-componentsconfiguration-4' => 'R',
+'exif-componentsconfiguration-5' => 'G',
+'exif-componentsconfiguration-6' => 'B',
+
+'exif-exposureprogram-0' => 'Nén defini',
+'exif-exposureprogram-1' => 'Al mwin',
+'exif-exposureprogram-2' => 'Programaedje normå',
+
+'exif-subjectdistance-value' => '$1 metes',
+
+'exif-meteringmode-0' => 'Nén cnoxhou',
+'exif-meteringmode-1' => 'Moyene',
+'exif-meteringmode-255' => 'Ôte',
+
+'exif-lightsource-0' => 'Nén cnoxhou',
+'exif-lightsource-1' => 'Loumire do djoû',
+'exif-lightsource-9' => 'Bon tins',
+'exif-lightsource-10' => 'Tins avou des nûlêyes',
+'exif-lightsource-17' => 'Loumire standård A',
+'exif-lightsource-18' => 'Loumire standård B',
+'exif-lightsource-19' => 'Loumire standård C',
+'exif-lightsource-20' => 'D55',
+'exif-lightsource-21' => 'D65',
+'exif-lightsource-22' => 'D75',
+'exif-lightsource-23' => 'D50',
+'exif-lightsource-255' => 'Ôte sourdant d\' loumire',
+
+'exif-focalplaneresolutionunit-2' => 'pôces',
+
+'exif-sensingmethod-1' => 'Nén defineye',
+
+'exif-filesource-3' => 'DSC',
+
+'exif-scenetype-1' => 'On poitrait saetchî directumint',
+
+
+
+'exif-whitebalance-0' => 'Balance di blancs otomatike',
+'exif-whitebalance-1' => 'Balance di blancs al mwin',
+
+'exif-scenecapturetype-3' => 'Sinne di nute',
+
+
+'exif-contrast-0' => 'Normå',
+'exif-contrast-1' => 'Doûs',
+'exif-contrast-2' => 'Deur',
+
+'exif-saturation-0' => 'Normå',
+'exif-saturation-1' => 'Fwebe saturaedje',
+'exif-saturation-2' => 'Foirt saturaedje',
+
+'exif-sharpness-0' => 'Normåle',
+'exif-sharpness-1' => 'Doûce',
+'exif-sharpness-2' => 'Deure',
+
+'exif-subjectdistancerange-0' => 'Nén cnoxhowe',
+'exif-subjectdistancerange-2' => 'Did près',
+'exif-subjectdistancerange-3' => 'Did lon',
+
+// Pseudotags used for GPSLatitudeRef and GPSDestLatitudeRef
+'exif-gpslatitude-n' => 'Latitude Nôr',
+'exif-gpslatitude-s' => 'Latitude Sud',
+
+// Pseudotags used for GPSLongitudeRef and GPSDestLongitudeRef
+'exif-gpslongitude-e' => 'Londjitude Ess',
+'exif-gpslongitude-w' => 'Londjitude Ouwess',
+
+
+
+// Pseudotags used for GPSSpeedRef and GPSDestDistanceRef
+'exif-gpsspeed-k' => 'km/h',
+'exif-gpsspeed-m' => 'miles/h',
+'exif-gpsspeed-n' => 'nuks',
+
+// Pseudotags used for GPSTrackRef, GPSImgDirectionRef and GPSDestBearingRef
+
+# external editor support
+'edit-externally' => 'Candjî ç\' fitchî ci avou on dfoûtrin programe',
+'edit-externally-help' => 'Loukîz les [http://meta.wikimedia.org/wiki/Help:External_editors instruccions d\' apontiaedje] po pus di racsegnes.',
+
+# 'all' in various places, this might be different for inflected languages
+'recentchangesall' => 'totafwait',
+'imagelistall' => 'totafwait',
+'watchlistall1' => 'totafwait',
+'watchlistall2' => 'totafwait',
+'namespacesall' => 'tos',
+
+# E-mail address confirmation
+'confirmemail' => 'Acertinaedje di l\' adresse emile',
+'confirmemail_text' => 'Ci wiki chal a mezåjhe ki vos acertinîz voste adresse emile
+divant d\' poleur eployî les fonccions d\' emilaedje. Clitchîz sol boton
+chal pa dzo po-z evoyî èn emile d\' acertinaedje a voste adresse.
+Li messaedje a-st å dvins ene hårdêye (loyén) avou on côde;
+tcherdjîz l\' hårdêye dins l\' betchteu waibe da vosse, eyet
+acertinez ki l\' adresse emile est djusse tot dnant l\' côde.',
+'confirmemail_send' => 'Emiler on côde d\' acertinaedje',
+'confirmemail_sent' => 'L\' emile d\' acertinaedje a stî evoyî.',
+'confirmemail_sendfailed' => 'Dji n\' a savou evoyî l\' emile d\' acertinaedje. Verifyîz ki l\' adresse est bén djusse.',
+'confirmemail_invalid' => 'Côde d\' acertinaedje nén valide. Motoit k\' il esteut trop vî.',
+'confirmemail_needlogin' => 'I vs fåt $1 po pleur acertiner voste adresse emile.',
+'confirmemail_success' => 'Voste adresse emile a stî acertinêye. Vos vs poloz asteure elodjî eyet profiter do wiki.',
+'confirmemail_loggedin' => 'Voste adresse emile a stî acertinêye.',
+
+'confirmemail_subject' => 'Acertinaedje di l\' adresse emile po {{SITENAME}}',
+'confirmemail_body' => 'Ene sakî, probåblumint vos-minme, avou l\' adresse IP $1,
+a-st ahivé on conte so {{SITENAME}} avou ciste adresse
+emile ci eyet come no d\' elodjaedje «$2».
+
+Po-z acertiner ki ç\' conte ci est bén da vosse eyet mete
+en alaedje les fonccions d\' emilaedje so {{SITENAME}},
+alez drovî avou vosse betchteu waibe li hårdêye ki shût:
+
+$3
+
+Si c\' est *nén* vos k\' a-st ahivé l\' conte, adon èn shuvoz
+nén l\' hårdêye. Ci côde d\' acertinaedje ci va-st espirer
+po l\' $4.',
+
+# Inputbox extension, may be useful in other contexts as well
+'createarticle' => 'Ahiver årtike',
+
+# Scary transclusion
+
+
+# delete conflict
+'deletedwhileediting' => 'Asteme: Cisse pådje ci a stî disfacêye sol tins ki vos scrijhîz!',
+'confirmrecreate' => 'L\' uzeu [[{{ns:user}}:$1|$1]] ([[{{ns:user_talk}}:$1|copene]]) a disfacé cist årtike ci après ki vos avoz cmincî a scrire, li råjhon k\' il a dné c\' est:
+: \'\'$2\'\'.
+Acertinez s\' i vs plait ki vos vloz vormint rifé cist årtike ci.',
+'recreate' => 'Rifé',
+#'tooltip-recreate' => '',
+
+'unit-pixel' => 'px',
+
+# HTML dump
+'redirectingto' => 'Redjiblant viè [[$1]]...',
+
+# action=purge
+'confirm_purge' => 'Netyî l\' muchete di cisse pådje ci?
+
+$1',
+'confirm_purge_button' => '\'l est bon',
+
+'youhavenewmessagesmulti' => 'Vos avoz des noveas messaedjes so $1',
+'searchcontaining' => 'Cweri après des årtikes k\' ont «\'\'$1\'\'» å dvins.',
+'searchnamed' =>  'Cweri après des årtikes lomés «\'\'$1\'\'».',
+'articletitles' =>  'Årtikes ki cmincèt avou «\'\'$1\'\'»',
+'hideresults' => 'Catchî les rzultats',
+
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesXal.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesXal.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesXal.php	(revision 1280)
@@ -0,0 +1,54 @@
+<?php
+/**
+  * @addtogroup Language
+  */
+# Kalmyk stub localization;
+
+$namespaceNames = array(
+	NS_MEDIA            => 'Аһар',
+	NS_SPECIAL          => 'Көдлхнə',
+	NS_MAIN             => '',
+	NS_TALK             => 'Ухалвр',
+	NS_USER             => 'Орлцач',
+	NS_USER_TALK        => 'Орлцачна_тускар_ухалвр',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK     => '$1_тускар_ухалвр',
+	NS_IMAGE            => 'Зург',
+	NS_IMAGE_TALK       => 'Зургин_тускар_ухалвр',
+	NS_MEDIAWIKI        => 'MediaWiki',
+	NS_MEDIAWIKI_TALK   => 'MediaWiki_тускар_ухалвр',
+	NS_TEMPLATE         => 'Зура',
+	NS_TEMPLATE_TALK    => 'Зуран_тускар_ухалвр',
+	NS_HELP             => 'Цəəлһлһн',
+	NS_HELP_TALK        => 'Цəəлһлһин_тускар_ухалвр',
+	NS_CATEGORY         => 'Янз',
+	NS_CATEGORY_TALK    => 'Янзин_тускар_ухалвр',
+);
+
+$fallback8bitEncoding = "windows-1251";
+
+
+$messages = array(
+
+'edit' => 'Чиклх',
+'article' => 'Халх',
+'history' => 'Чикллһнə бүрткл',
+'nstab-main' => 'Халх',
+'nstab-user' => 'Орлцач',
+'nstab-template' => 'Зура',
+'nstab-help' => 'Цəəлһлһн',
+'nstab-category' => 'Янз',
+'talkpage' => 'Ухалвр',
+'history_short' => 'Чикллһнə бүрткл',
+
+
+'createaccount' => 'Выль вики-авторлэн регистрациез',
+'login' => 'Оруллһн',
+'mycontris' => 'Мини өгүллһдүд',
+'mytalk' => 'Мини күүндлһн бəəрм',
+'preferences' => 'Дурллһн',
+
+);
+
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesYi.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesYi.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesYi.php	(revision 1280)
@@ -0,0 +1,587 @@
+<?php
+/** Yiddish (ייִדיש)
+  *
+  * @addtogroup Language
+  */
+$fallback = 'he';
+
+$namespaceNames = array(
+	NS_MEDIA          => 'מעדיע',
+	NS_SPECIAL        => 'באַזונדער',
+	NS_MAIN           => '',
+	NS_TALK           => 'רעדן',
+	NS_USER           => 'באַניצער',
+	NS_USER_TALK      => 'באַניצער_רעדן',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK   => '$1_רעדן',
+	NS_IMAGE          => 'בילד',
+	NS_IMAGE_TALK     => 'בילד_רעדן',
+	NS_MEDIAWIKI      => 'מעדיעװיקי',
+	NS_MEDIAWIKI_TALK => 'מעדיעװיקי_רעדן',
+	NS_TEMPLATE       => 'מוסטער',
+	NS_TEMPLATE_TALK  => 'מוסטער_רעדן',
+	NS_HELP           => 'הילף',
+	NS_HELP_TALK      => 'הילף_רעדן',
+	NS_CATEGORY       => 'קאַטעגאָריע',
+	NS_CATEGORY_TALK  => 'קאַטעגאָריע_רעדן'
+);
+
+$namespaceAliases = array(
+	'באזונדער' => NS_SPECIAL,
+	'באנוצער' => NS_USER,
+	'באנוצער_רעדן' => NS_USER_TALK,
+	'מעדיעוויקי' => NS_MEDIAWIKI,
+	'מעדיעוויקי_רעדן' => NS_MEDIAWIKI_TALK,
+	'קאטעגאריע' => NS_CATEGORY,
+	'קאטעגאריע_רעדן' => NS_CATEGORY_TALK,
+	'באניצער' => NS_USER,
+	'באניצער_רעדן' => NS_USER_TALK,
+);
+
+$rtl = true;
+$defaultUserOptionOverrides = array(
+	# Swap sidebar to right side by default
+	'quickbar' => 2,
+);
+
+/**
+ * Magic words.
+ * Disabling the Hebrew aliases, adding a Yiddish alias for #REDIRECT.
+ */
+$magicWords = array(
+	'redirect'               => array( 0,    '#ווייטערפירן', '#REDIRECT'              ),
+	'notoc'                  => array( 0,    '__NOTOC__'              ),
+	'nogallery'              => array( 0,    '__NOGALLERY__'          ),
+	'forcetoc'               => array( 0,    '__FORCETOC__'           ),
+	'toc'                    => array( 0,    '__TOC__'                ),
+	'noeditsection'          => array( 0,    '__NOEDITSECTION__'      ),
+	'start'                  => array( 0,    '__START__'              ),
+	'currentmonth'           => array( 1,    'CURRENTMONTH'           ),
+	'currentmonthname'       => array( 1,    'CURRENTMONTHNAME'       ),
+	'currentmonthnamegen'    => array( 1,    'CURRENTMONTHNAMEGEN'    ),
+	'currentmonthabbrev'     => array( 1,    'CURRENTMONTHABBREV'     ),
+	'currentday'             => array( 1,    'CURRENTDAY'             ),
+	'currentday2'            => array( 1,    'CURRENTDAY2'            ),
+	'currentdayname'         => array( 1,    'CURRENTDAYNAME'         ),
+	'currentyear'            => array( 1,    'CURRENTYEAR'            ),
+	'currenttime'            => array( 1,    'CURRENTTIME'            ),
+	'currenthour'            => array( 1,    'CURRENTHOUR'            ),
+	'localmonth'             => array( 1,    'LOCALMONTH'             ),
+	'localmonthname'         => array( 1,    'LOCALMONTHNAME'         ),
+	'localmonthnamegen'      => array( 1,    'LOCALMONTHNAMEGEN'      ),
+	'localmonthabbrev'       => array( 1,    'LOCALMONTHABBREV'       ),
+	'localday'               => array( 1,    'LOCALDAY'               ),
+	'localday2'              => array( 1,    'LOCALDAY2'              ),
+	'localdayname'           => array( 1,    'LOCALDAYNAME'           ),
+	'localyear'              => array( 1,    'LOCALYEAR'              ),
+	'localtime'              => array( 1,    'LOCALTIME'              ),
+	'localhour'              => array( 1,    'LOCALHOUR'              ),
+	'numberofpages'          => array( 1,    'NUMBEROFPAGES'          ),
+	'numberofarticles'       => array( 1,    'NUMBEROFARTICLES'       ),
+	'numberoffiles'          => array( 1,    'NUMBEROFFILES'          ),
+	'numberofusers'          => array( 1,    'NUMBEROFUSERS'          ),
+	'pagename'               => array( 1,    'PAGENAME'               ),
+	'pagenamee'              => array( 1,    'PAGENAMEE'              ),
+	'namespace'              => array( 1,    'NAMESPACE'              ),
+	'namespacee'             => array( 1,    'NAMESPACEE'             ),
+	'talkspace'              => array( 1,    'TALKSPACE'              ),
+	'talkspacee'             => array( 1,    'TALKSPACEE'              ),
+	'subjectspace'           => array( 1,    'SUBJECTSPACE', 'ARTICLESPACE' ),
+	'subjectspacee'          => array( 1,    'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+	'fullpagename'           => array( 1,    'FULLPAGENAME'           ),
+	'fullpagenamee'          => array( 1,    'FULLPAGENAMEE'          ),
+	'subpagename'            => array( 1,    'SUBPAGENAME'            ),
+	'subpagenamee'           => array( 1,    'SUBPAGENAMEE'           ),
+	'basepagename'           => array( 1,    'BASEPAGENAME'           ),
+	'basepagenamee'          => array( 1,    'BASEPAGENAMEE'          ),
+	'talkpagename'           => array( 1,    'TALKPAGENAME'           ),
+	'talkpagenamee'          => array( 1,    'TALKPAGENAMEE'          ),
+	'subjectpagename'        => array( 1,    'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+	'subjectpagenamee'       => array( 1,    'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
+	'msg'                    => array( 0,    'MSG:'                   ),
+	'subst'                  => array( 0,    'SUBST:'                 ),
+	'msgnw'                  => array( 0,    'MSGNW:'                 ),
+	'img_thumbnail'          => array( 1,    'thumbnail', 'thumb'     ),
+	'img_manualthumb'        => array( 1,    'thumbnail=$1', 'thumb=$1'),
+	'img_right'              => array( 1,    'right'                  ),
+	'img_left'               => array( 1,    'left'                   ),
+	'img_none'               => array( 1,    'none'                   ),
+	'img_width'              => array( 1,    '$1px'                   ),
+	'img_center'             => array( 1,    'center', 'centre'       ),
+	'img_framed'             => array( 1,    'framed', 'enframed', 'frame' ),
+	'img_page'               => array( 1,    'page=$1', 'page $1'     ),
+	'int'                    => array( 0,    'INT:'                   ),
+	'sitename'               => array( 1,    'SITENAME'               ),
+	'ns'                     => array( 0,    'NS:'                    ),
+	'localurl'               => array( 0,    'LOCALURL:'              ),
+	'localurle'              => array( 0,    'LOCALURLE:'             ),
+	'server'                 => array( 0,    'SERVER'                 ),
+	'servername'             => array( 0,    'SERVERNAME'             ),
+	'scriptpath'             => array( 0,    'SCRIPTPATH'             ),
+	'grammar'                => array( 0,    'GRAMMAR:'               ),
+	'notitleconvert'         => array( 0,    '__NOTITLECONVERT__', '__NOTC__'),
+	'nocontentconvert'       => array( 0,    '__NOCONTENTCONVERT__', '__NOCC__'),
+	'currentweek'            => array( 1,    'CURRENTWEEK'            ),
+	'currentdow'             => array( 1,    'CURRENTDOW'             ),
+	'localweek'              => array( 1,    'LOCALWEEK'              ),
+	'localdow'               => array( 1,    'LOCALDOW'               ),
+	'revisionid'             => array( 1,    'REVISIONID'             ),
+	'revisionday'            => array( 1,    'REVISIONDAY'            ),
+	'revisionday2'           => array( 1,    'REVISIONDAY2'           ),
+	'revisionmonth'          => array( 1,    'REVISIONMONTH'          ),
+	'revisionyear'           => array( 1,    'REVISIONYEAR'           ),
+	'revisiontimestamp'      => array( 1,    'REVISIONTIMESTAMP'      ),
+	'plural'                 => array( 0,    'PLURAL:'                ),
+	'fullurl'                => array( 0,    'FULLURL:'               ),
+	'fullurle'               => array( 0,    'FULLURLE:'              ),
+	'lcfirst'                => array( 0,    'LCFIRST:'               ),
+	'ucfirst'                => array( 0,    'UCFIRST:'               ),
+	'lc'                     => array( 0,    'LC:'                    ),
+	'uc'                     => array( 0,    'UC:'                    ),
+	'raw'                    => array( 0,    'RAW:'                   ),
+	'displaytitle'           => array( 1,    'DISPLAYTITLE'           ),
+	'rawsuffix'              => array( 1,    'R'                      ),
+	'newsectionlink'         => array( 1,    '__NEWSECTIONLINK__'     ),
+	'currentversion'         => array( 1,    'CURRENTVERSION'         ),
+	'urlencode'              => array( 0,    'URLENCODE:'             ),
+	'anchorencode'           => array( 0,    'ANCHORENCODE'           ),
+	'currenttimestamp'       => array( 1,    'CURRENTTIMESTAMP'       ),
+	'localtimestamp'         => array( 1,    'LOCALTIMESTAMP'         ),
+	'directionmark'          => array( 1,    'DIRECTIONMARK', 'DIRMARK' ),
+	'language'               => array( 0,    '#LANGUAGE:'             ),
+	'contentlanguage'        => array( 1,    'CONTENTLANGUAGE', 'CONTENTLANG' ),
+	'pagesinnamespace'       => array( 1,    'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+	'numberofadmins'         => array( 1,    'NUMBEROFADMINS'         ),
+	'formatnum'              => array( 0,    'FORMATNUM'              ),
+	'padleft'                => array( 0,    'PADLEFT'                ),
+	'padright'               => array( 0,    'PADRIGHT'               ),
+	'special'                => array( 0,    'special',               ),
+	'defaultsort'            => array( 1,    'DEFAULTSORT:'           ),
+);
+
+$messages = array(
+'tog-usenewrc'          => 'פֿאַרבעסערטע "לעצטע ענדערונגען" (JavaScript)',
+'tog-watchdefault'      => 'נאָכפֿאָלג אױטאָמאַטיש די װערטן װאָס איך באַאַרבעט',
+'tog-previewontop'      => 'צײַגן דעם "פֿאָרויסיקע װײַזונג" גלײַך בײַם ערשטע באַאַרבעטונג',
+'tog-fancysig'          => '<br />
+Raw signatures (without automatic link)',
+'sunday'                => 'זונטיק',
+'monday'                => 'מאָנטיק',
+'tuesday'               => 'דינסטיק',
+'wednesday'             => 'מיטװאָך',
+'thursday'              => 'דאָנערשטיק',
+'friday'                => 'פֿרײַטיק',
+'saturday'              => 'שבת',
+'january'               => 'יאַנואַר',
+'february'              => 'פֿעברואַר',
+'march'                 => 'מאַרץ',
+'april'                 => 'אַפּריל',
+'may_long'              => 'מײַ',
+'june'                  => 'יוני',
+'july'                  => 'יולי',
+'august'                => 'אױגוסט',
+'september'             => 'סעפּטעמבער',
+'october'               => 'אָקטאָבער',
+'november'              => 'נאָװעמבער',
+'december'              => 'דעצעמבער',
+'jan'                   => 'יאַנ׳',
+'feb'                   => 'פֿעב׳',
+'mar'                   => 'מאַר׳',
+'apr'                   => 'אַפּר׳',
+'may'                   => 'מײַ',
+'jun'                   => 'יונ׳',
+'jul'                   => 'יול׳',
+'aug'                   => 'אױג׳',
+'sep'                   => 'סעפּ׳',
+'oct'                   => 'אָקט׳',
+'nov'                   => 'נאָװ׳',
+'dec'                   => 'דעץ׳',
+'categories'            => 'קאַטעגאָריעס',
+'pagecategories'        => '{{PLURAL:$1|קאַטעגאָריע|קאַטעגאָריעס}}',
+'category_header'       => 'אַרטיקלען אין קאַטעגאָריע "$1"',
+'subcategories'         => 'אונטערקאַטעגאָריעס',
+'mainpage'              => 'ערשטע זײַט',
+'portal'                => 'געמיינדע',
+'portal-url'            => 'Project:געמיינדע',
+'about'                 => 'איבער',
+'help'                  => 'הילף',
+'helppage'              => 'Help:אינהאַלט',
+'sitesupport'           => 'נדבֿות',
+'sitesupport-url'       => 'Project:נדבֿות',
+'edithelp'              => 'הילף ווי צו באַאַרבעטן',
+'newwindow'             => '(עס ווערט געהעפֿנט אין אַ נײַעם פענסטער)',
+'cancel'                => 'מבטל זײַן',
+'qbedit'                => 'ענדערן',
+'mytalk'                => 'מײַן רעדן בלאַט',
+'navigation'            => 'נאַװיגאַציע',
+'currentevents'         => 'נײַקײטן',
+'currentevents-url'     => '{{ns:project}}:נײַקײטן',
+'disclaimers'           => '
+פֿאַרלײקענען',
+'privacy'               => 'פערזענלעכקײַט דורכפֿירונג',
+'returnto'              => 'צוריקקערן צו $1.',
+'tagline'               => 'פֿון {{SITENAME}}',
+'search'                => 'זוכן',
+'searchbutton'          => 'זוכן',
+'go'                    => 'גײן',
+'searcharticle'                    => 'גײן',
+'history'               => 'אױפֿלאַגעס / מחברים',
+'history_short'         => 'געשיכטע',
+'printableversion'      => 'דרוק פֿעיקע װערסיע',
+'permalink'             => 'אײביקער בונד',
+'edit'                  => 'ענדערן און פארעכטן',
+'delete'                => 'אַראָפּנעמען',
+'protect'               => 'אױסהיטן',
+'unprotect'             => 'באַפֿרײַען',
+'newpage'               => 'א נײַעם בלאַט',
+'talkpage'              => 'רעדן',
+'specialpage'           => 'באַזונדער',
+'talk'                  => 'רעדן און שמועסן',
+'toolbox'               => 'מכשירים',
+'otherlanguages'        => 'אין אַנדערע שפראַכן',
+'redirectedfrom'        => '(אַריבערגעפֿירט פון $1)',
+'lastmodifiedat'          => 'די לעצטע ענדערונג פון די בלאט איז געווען $2, $1.',
+'copyright'             => 'אינהאַלט שטייט אונטער $1.',
+'jumptosearch'          => 'זוכן',
+'ok'                    => 'יאָ',
+'youhavenewmessages'    => 'דו האָסט $1 ($2).',
+'newmessageslink'       => 'אַ נײַעם מעלדונג',
+'newmessagesdifflink'   => 'אונטערשייד פון לעצטע ווערסיע',
+'editsection'           => 'בעאַרבעטן',
+'toc'                   => 'אינהאַלט',
+'showtoc'               => 'װאַיִזן',
+'hidetoc'               => 'באַהאַלטן',
+'thisisdeleted'         => 'זעה אדער שטעל צוריק $1?',
+'viewdeleted'           => 'װאַיִזן $1?',
+'nstab-main'            => 'אַרטיקל',
+'nstab-user'            => 'באַנוצער זײַט',
+'nstab-media'           => 'מעדיע',
+'nstab-special'         => 'באַזונדער',
+'nstab-image'           => 'בילד',
+'nstab-mediawiki'       => 'בשׂורה',
+'nstab-template'        => 'מוסטער',
+'nstab-help'            => 'הילף',
+'nstab-category'        => 'קאַטעגאָריע',
+'logouttext'            => '<strong>האָסט זיך ארויסלאָגירט מיט הצלחה.</strong>',
+'yourname'              => 'באַנוצער־נאָמען',
+'yourpassword'          => 'שפּריכװאָרט',
+'remembermypassword'    => 'געדיינק מיך',
+'login'                 => 'אַרײַנלאָגירן',
+'loginprompt'           => 'איר מוסט ערלויבן קיכלעך ("cookies") אויף צו אַרײַנלאָגירן אינעם {{SITENAME}}.',
+'userlogin'             => 'אײַנלאָגירן / זיך אײַנשרײַבן',
+'logout'                => 'אַרױסלאָגירן',
+'userlogout'            => 'אַרױסלאָגירן',
+'notloggedin'           => 'נישט איינגעשריבן',
+'youremail'             => 'בליצאַדרעס (*)',
+'username'              => 'באַנוצער־נאָמען:',
+'uid'                   => 'באַנוצער־נומער:',
+'yourlanguage'          => 'שפּראַך:',
+'yourvariant'           => 'װאַריאַנט',
+'yournick'              => 'אונטערשריפט',
+'email'                 => 'בליצבריוו',
+'loginsuccess'          => '\'\'\'דו ביסט יעצט אַרײַנלאָגירט אַלץ "$1" אינעם {{SITENAME}}.\'\'\'',
+'bold_sample'           => 'טייפּט דאָ אַריין די ווארט אדער ווערטער וואס זאל זיין מיט דיקע אותיות',
+'bold_tip'              => 'דאס טוישט צו \'\'\'בּאָלד (דיק)\'\'\' די אויסגעוועלטע ווארט.',
+'italic_sample'         => 'דאס וועט מאכן \'\'שיף\'\' די אויסגעוועלט ווארט.',
+'italic_tip'            => 'דאס וועט מאכן \'\'שיף\'\' די אויסגעוועלט פאנט.',
+'link_sample'           => 'שרײַבט דאָ אַרײַן די װערטער װאָס װעט זײַן אַ לינק צו {{SITENAME}} אַרטיקל אין דעם נושא',
+'link_tip'              => 'מאך דאס א \'\'\'לינק\'\'\' צו א וויקיפעדיע ארטיקל',
+'headline_sample'       => 'לייג דא אריין דעם טעקסט פונעם נייעם קעפּל',
+'headline_tip'          => 'אַ נײַער קעפּל, (אײַנצוטײלן דעם אַרטיקל)',
+'nowiki_sample'         => 'אינסערט נישט-פארמארטירטע טעקסט דא',
+'nowiki_tip'            => 'דאָס וועט איגנאָרירן די וויקי פֿאָרמאַטינג קאָוד',
+'image_tip'             => 'לייג ארויף א בילד',
+'sig_tip'               => 'אייער אינטערשריפט, מיט א צייט סטעמפּל ווען איר האט אונטערגעשריבן.',
+'hr_tip'                => 'א שטרייך אין די ברייט, (נישט נוצן אפט)',
+'summary'               => 'קורץ וואָרט',
+'minoredit'             => '‏איך האָב נאָר עטוואָס באַאַרבעט',
+'watchthis'             => 'זײט אױפֿפּאַסן',
+'savearticle'           => 'זײט אױפֿהיט',
+'preview'               => 'פאראויסיגע ווייזונג',
+'showpreview'           => 'פֿאָרױסיקע װײַזונג',
+'showdiff'              => 'ווײַז מײַן בײַטונג',
+'blockedtext'           => 'דיין באנוצער נאמען אדער דיין IP אדרעס איז פאַרשפאַרט געווארן דורך $1 פון וועגן $2.
+<p>קענסט זיך ווענדן צו $1 אדער צו אנדערע [[{{ns:Project}}:Administrators|דירעקטארס]] צו דורכרעדן וועגן דעם.<p>
+
+Note that you may not use the "e-mail this user" feature unless you have a valid e-mail address registered in your [[{{ns:Special}}:Preferences|user preferences]].
+
+Your IP address is $3. Please include this address in any queries you make.',
+'loginreqlink'          => 'login',
+'newarticletext'        => '\'\'\'דער בלאַט עקזיסטירט נאָך נישט!\'\'\' איר קענט יעצט שרײַבן אַ נײַעם אַרטיקל אין די אונטערשטע קעסטל. (זעהט דעם [[הילף:ווי צו שרייבן ווערטן|הילף בלאַט]] ווי אַזוי צו שרײַבן אַרטיקלען).',
+'clearyourcache'        => '<div dir="ltr">
+\'\'\'Note:\'\'\' After saving, you have to bypass your browser\'s cache to see the changes. \'\'\'Mozilla/Safari/Konqueror:\'\'\' hold down \'\'Shift\'\' while clicking \'\'Reload\'\' (or press \'\'Ctrl-Shift-R\'\'), \'\'\'IE:\'\'\' press \'\'Ctrl-F5\'\', \'\'\'Opera:\'\'\' press \'\'F5\'\'.
+</div>',
+'previewnote'           => '<strong>דאס איז נאָר אין אַ פֿאָרויסיקע ווייזונג, דער אַרטיקל איז דערווייל נאָך נישט געהיט!</strong>',
+'editing'               => 'בעארבעטן $1',
+'editinguser'               => 'בעארבעטן $1',
+'editconflict'          => 'ענדערן קאנפליקט: $1',
+'editingold'            => '<div style="background: #FFBDBD; border: 1px solid #BB7979; color: #000000; font-weight: bold; margin: 2em 0 1em; padding: .5em 1em; vertical-align: middle; clear: both;">פאָרזיכטיג! \'\'באארבעטסט יעצט נישט קיין אקטועלע ווערסיע, אויב דו וועסט היטן דעם באארבעטונג, וועט די לעצטע ענדרענונגען גיין קאַפוט.\'\'<!-- [[{{ns:Project}}:Reverting|removed]] -->.‎</div>',
+'copyrightwarning'      => '<small>ביטע מערק אויף אז דיינע אלע טיילונגען אינעם \'\'\'{{SITENAME}}\'\'\' איז אונטער דעם [http://www.gnu.org/copyleft/fdl.html $2] דערלויבן (מער פרטים זעה $1). אויב דו וויִלסט נישט זאלן דיינע טיילונגען דערשיינען ווערן און זאלן אנדערע קענען קאפירן דיין אינהאַלט - ביטע שרייב זיי נישט אַהער. איר זאגט צו אז איר האט געשריבן אן אייגענעם אינהאַלט, אדער האט איר באקומען א ערלויבונג צו איר שרייבן</small>',
+'currentrev'            => 'נײַע באַאַרבעטונג',
+'previousrevision'      => '→ Older revision',
+'nextrevision'          => 'Newer revision ←',
+'last'                  => 'צו לעצט',
+'histlegend'            => 'Diff selection: mark the radio boxes of the versions to compare and hit enter or the button at the bottom.<br />
+Legend: (cur) = difference with current version,
+(צו לעצט) = difference with preceding version, מ = minor edit.',
+'difference'            => '(אונטערשייד צווישן באַאַרבעטונגען)',
+'compareselectedversions'=> 'פארגלייך סעלעקטירטע ווערסיעס',
+'searchresulttext'      => 'לערנען מער ווי צו זוכן אינעם {{SITENAME}} [[{{ns:Help}}:זוכן|קוועטשט אַהער]]',
+'searchsubtitle'           => '[[:$1]]',
+'searchsubtitleinvalid'           => '$1',
+'noexactmatch'             => 'דערווייל איז נאָך נישטאָ א בלאט מיט דעם טיטל.<br /> איר זײַט געלאדנט [[:$1|אויפשרייבן א נייעם בלאט]], אדער [[Project:בעטן ווערטן|בעטן פון פריינד]] זאלן זיי שרייבן.',
+'viewprevnext'          => '($1) ($2) ($3).',
+'powersearch'           => 'זוכן',
+'blanknamespace'        => '(אַרטיקל)',
+'preferences'           => 'אײַנשטעלן',
+'changepassword'        => 'שפּריכװאָרט איבערמאַכן',
+'skin'                  => 'סקין',
+'math'                  => 'פאָרמאַל',
+'datetime'              => 'דאַטע אונד צײַט',
+'prefs-personal'        => 'באַנוצער פראָפֿיל',
+'prefs-rc'              => 'לעצטע ענדערונגען',
+'prefs-misc'            => 'באַאַרבעטן',
+'saveprefs'             => 'אױפֿהיטן',
+'resetprefs'            => 'צוריק שטעלן צום נאָרמאַל',
+'oldpassword'           => 'אַלטע שפּריכװאָרט:',
+'newpassword'           => 'נייע פּעסוואָרד:',
+'retypenew'             => 'שפריכוואָרט ווידער שרײַבן:',
+'textboxsize'           => 'באַאַרבעטן',
+'rows'                  => 'שורות:',
+'columns'               => 'זײַלן:',
+'searchresultshead'     => 'זוכן',
+'recentchangescount'    => 'דער צאָל פון ליניעס אין די לעצטע ענדערונגען:',
+'allowemail'            => 'ערלויבן אנדערע צו אײַך שיקן בליצבריוון',
+'files'                 => 'טעקעס',
+'changes'               => 'ענדערונגען',
+'recentchanges'         => 'לעצטע ענדערונגען',
+'rcnote'                => 'אונטער זײַנען די לעצטע <strong>$1</strong> ענדערונגען אין די לעצטע <strong>$2</strong> טאָג. $3',
+'rclistfrom'            => 'װײַזן די נײַע ענדערונגען זײַט $1',
+'rcshowhideminor'       => '$1 מינערדיקע רעדאַקטירן',
+'rcshowhidebots'        => '$1 ראָבאָטן',
+'rcshowhideliu'         => '$1 אײַנגעשריבינע באַנוצערס',
+'rcshowhideanons'       => '$1 אַנאָנימע באַנוצערס',
+'rcshowhidepatr'        => '$1 טעכנישע אַקציעס',
+'rcshowhidemine'        => '$1 מײַנע טיילונגען',
+'rclinks'               => 'װײַזן די לעצטע $1 ענדערונגען אין דעם לעצטע $2 טאָג.<br />$3',
+'diff'                  => 'אונטערשייד',
+'hist'                  => 'געשיכטע',
+'hide'                  => 'באַהאַלטן',
+'show'                  => 'װאַיִזן',
+'minoreditletter'       => 'מ',
+'newpageletter'         => 'נ',
+'sectionlink'           => '←',
+'upload'                => 'בילדער/פיילס אַרױפֿלאָדירן',
+'uploadbtn'             => 'טעקע אַרױפֿלאָדירן',
+'uploadlog'             => 'אויפלאָדירע לאָגבוך',
+'savefile'              => 'טעקע אױפֿהיטן',
+'uploadedimage'         => 'אַרױפֿלאָדירט "[[$1]]"',
+'imagelisttext'         => 'Below is a list of $1 files sorted $2.',
+'ilsubmit'              => 'זוכן',
+'statistics'            => 'סטאַטיסטיק',
+'sitestatstext'         => 'יעצט איז דא \'\'\'$2\'\'\' אַרטיקלען אינעם [[{{SITENAME}}]].
+
+און \'\'\'$1\'\'\' בלעטער (אריינגערעכנט מיט די אַרומנעמיקע בלעטער ווי "רעדן בלעטער", "רידיירעקטן" א.א.וו).
+
+‎\'\'\'$8\'\'\' files have been uploaded.‎
+
+\'\'\'$4\'\'\' באַאַרבעטונגען.
+דורכשניטלעך \'\'\'$5\'\'\' באַאַרבעטונגען פאַר יעדן בלאַט.',
+'disambiguationspage'   => '{{ns:template}}:באַטײַטן',
+'brokenredirects'       => 'צובראָכענע רידיירעקטן',
+'nbytes'                => '$1 bytes',
+'nlinks'                => '$1 לינקן',
+'wantedpages'           => 'װינטשט זײטן',
+'mostcategories'        => 'אַרטיקלען מיט די מערקסטע קאַטעגאָריעס',
+'mostrevisions'         => 'אַרטיקלען מיט די מערקסטע באַאַרבעטונגען',
+'randompage'            => 'צופֿעליקער אַרטיקל',
+'specialpages'          => 'ספּעציעלע זײטן',
+'recentchangeslinked'   => 'פֿאַרבונדענע ענדערונגען',
+'ancientpages'          => 'עלטסטער זײטן',
+'move'                  => 'באַװעגן',
+'booksources'           => 'דרויסנדיקע ליטעראַטור ISBN',
+'categoriespagetext'    => 'די ווײַטערדיקע קאַטעגאָריען עקסיסטירט אין {{SITENAME}}.',
+'allpagessubmit'        => 'גיין',
+'emailpage'             => 'אימעיל\'ט דעם באנוצער.',
+'defemailsubject'       => 'וויקיפעדיער בליצבריוו',
+'emailfrom'             => 'פון',
+'emailto'               => 'צו',
+'emailsubject'          => 'טעמע',
+'emailmessage'          => 'מעלדונג',
+'emailsend'             => 'שיקן',
+'watchlist'             => 'אַכטונגע ליסט',
+'mywatchlist'             => 'אַכטונגע ליסט',
+'addedwatch'            => 'צוגעלייגט געוואָרן צום "אַכטונגע ליסט"',
+'addedwatchtext'        => 'דער אַרטיקל "[[:$1]]" איז צוגעלײגט געוואָרן צו דײַן [[{{ns:Special}}:Watchlist|אַכטונגע ליסט]].
+
+<div dir="ltr">
+Future changes to this page and its associated Talk page will be listed there,
+and the page will appear \'\'\'bolded\'\'\' in the [[{{ns:Special}}:Recentchanges|list of recent changes]] to
+make it easier to pick out.
+
+<p>If you want to remove the page from your watchlist later, click "Stop watching" in the sidebar.</p>
+</div>',
+'removedwatch'          => 'אַראָפּגענומען פונעם "אַכטונגע ליסט"',
+'removedwatchtext'      => 'דער אַרטיקל "[[:$1]]" איז אָפּגעראַמעט געוואָרן פון דײַן אַכטונגע ליסט',
+'watch'                 => 'אױפֿפּאַסן',
+'watchthispage'         => 'זײט אױפֿפּאַסן',
+'unwatch'               => 'אויפֿהערן אויפֿפּאַסן',
+'wlhideshowown'         => '$1 מײנע רעדאַקטירן.',
+'wlhideshowbots'        => '$1 ראָבאָט רעדאַקטירן.',
+'deletepage'            => 'זײט אַראָפּנעמען',
+'excontent'             => 'מיטן אינהאַלט: \'$1\'',
+'excontentauthor'       => 'מיטן אינהאַלט: \'$1\' (זיין איינציגער באַאַרבעטער: \'$2\')',
+'rollback_short'        => 'אויפֿריכטן',
+'rollbacklink'          => 'צוריקדרייען',
+'revertpage'            => 'אויפֿגעריכט פון באַנוצער $2 צוריק צום לעצטע ווערסיע פון באַנוצער $1',
+'undeletebtn'           => 'Restore!',
+'namespace'             => 'באַגרעניצן צו:',
+'invert'                => 'ווײַז אַלע אויסער די',
+'contributions'         => 'באנוצער\'ס אלע טיילונגען',
+'mycontris'             => 'מײַנע טיילונגען',
+'whatlinkshere'         => 'װאָס די אױף דאָס זײט פֿאַרבינדט',
+'blockip'               => 'באַניצער אַרױסטרײבן',
+'ipbother'              => 'אַנדער צײַט',
+'ipboptions'            => '15 מינוטן:15 minutes,
+1 שעה:1 hour,
+2 שעהן:2 hours,
+1 טאָג:1 day,
+3 טעג:3 days,
+1 װאָך:1 week,
+2 װאָכן:2 weeks,
+1 מאָנאַט:1 month,
+3 מאָנאַטן:3 months,
+6 מאָנאַטן:6 months,
+1 יאָר:1 year,
+אויף אייביק:infinite',
+'ipbotheroption'        => 'אַנדער',
+'infiniteblock'         => 'אויף אייביק',
+'blocklink'             => 'אַרױסטרײַבן',
+'unblocklink'           => 'באַפֿרײַען',
+'contribslink'          => 'באַנוצערס שרײַבונגען',
+'blocklogentry'         => 'פֿאַשפּאַרט "[[$1]]" אויף אַ תקופה פון $2',
+'pagemovedsub'          => 'באַוועגט מיט הצלחה',
+'pagemovedtext'         => 'Page "[[$1]]" באַוועגנט צו "[[$2]]".',
+'movedto'               => 'באַוועגנט צו',
+'1movedto2'             => '[[:$1]] באַוועגנט צו [[:$2]]',
+'1movedto2_redir'       => '[[:$1]] באַוועגט צו [[:$2]] פון',
+'revertmove'            => 'צוריקדרייען',
+'allmessagesname'       => 'נאָמען',
+'tooltip-search'        => 'זוכן {{SITENAME}}',
+'tooltip-diff'          => 'Show which changes you made to the text.',
+'lastmodifiedatby'        => 'די לעצטע ענדערונג פון די בלאט איז געווען $2, $1 ביי $3.',
+'and'                   => 'און',
+'subcategorycount'      => 'ס\'איז דאָ $1 אונטערקאַטעגאָריעס צו די קאַטעגאָריע.',
+'categoryarticlecount'  => 'ס\'איז דאָ $1 אַרטיקלען אין די קאַטעגאָריע.',
+'monobook.js' => '/* Deprecated; use [[MediaWiki:common.js]] */',
+
+'accesskey-pt-userpage' => '.',
+'tooltip-pt-userpage' => 'מיין באניצער בלאט',
+'accesskey-pt-anonuserpage' => '.',
+'tooltip-pt-anonuserpage' => 'באניצער בלאט פון אנינונימער באניצער',
+'accesskey-pt-mytalk' => 'n',
+'tooltip-pt-mytalk' => 'מיין רעדן בלאט',
+'accesskey-pt-anontalk' => 'n',
+'tooltip-pt-anontalk' => 'רעדן אויף אנינונימע באטייליגען',
+'accesskey-pt-preferences' => '',
+'tooltip-pt-preferences' => 'מיינע פעיווערעטס',
+'accesskey-pt-watchlist' => 'l',
+'tooltip-pt-watchlist' => 'אויפפּאסן בלעטער',
+'accesskey-pt-mycontris' => 'y',
+'tooltip-pt-mycontris' => 'מיינע באטייליגונגן',
+'accesskey-pt-login' => 'o',
+'tooltip-pt-login' => 'ביטע איינשרייבן, אבער עס איז נישט קיין חוב',
+'accesskey-pt-anonlogin' => 'o',
+'tooltip-pt-anonlogin' => 'סבעסער איינשרייבן, אבער עס איז נישט קיין חוב',
+'accesskey-pt-logout' => '',
+'tooltip-pt-logout' => 'זיך אויסשרייבן',
+'accesskey-ca-talk' => 't',
+'tooltip-ca-talk' => 'שמועס אויף דעם בלאט',
+'accesskey-ca-edit' => 'e',
+'tooltip-ca-edit' => ' בעפארן אויפהיטן.',
+'accesskey-ca-addsection' => '+',
+'tooltip-ca-addsection' => 'לייג צו אייער ווארט צו דעם שמועס',
+'accesskey-ca-viewsource' => 'e',
+'tooltip-ca-viewsource' => 'דאס איז א פארשלאסן בלאט, קענסט נאר קוקן איר מקור',
+'accesskey-ca-history' => 'h',
+'tooltip-ca-history' => 'פריערדיגע ווערסיעס פון דעם בלאט.',
+'accesskey-ca-protect' => '=',
+'tooltip-ca-protect' => 'הגנו על דף זה',
+'accesskey-ca-delete' => 'd',
+'tooltip-ca-delete' => 'אויסמעקן דעם בלאט',
+'accesskey-ca-undelete' => 'd',
+'tooltip-ca-undelete' => 'צוריק דרייען די ענדערונגען פון דעם בלאט פארן מעקן',
+'accesskey-ca-move' => 'm',
+'tooltip-ca-move' => 'פירט אריבער דעם בלאט',
+'accesskey-ca-watch' => 'w',
+'tooltip-ca-watch' => 'לייגט צו דעם בלאט אויפצופאסן',
+'accesskey-ca-unwatch' => 'w',
+'tooltip-ca-unwatch' => 'נעמט אראפ דעם בלאט פון אויפפאסן',
+'accesskey-search' => 'f',
+'tooltip-search' => 'זוכט אינעם סייט',
+'accesskey-p-logo' => '',
+'tooltip-p-logo' => 'הויפט זייט',
+'accesskey-n-mainpage' => 'z',
+'tooltip-n-mainpage' => 'באזוכט דעם הויפט זייט',
+'accesskey-n-portal' => '',
+'tooltip-n-portal' => 'גייט אריין אין די געמיינדע צו שמועסן',
+'accesskey-n-currentevents' => '',
+'tooltip-n-currentevents' => 'לעצטע אינפארמאציע איבער טואונגען פון וויקיפעדיע',
+'accesskey-n-recentchanges' => 'r',
+'tooltip-n-recentchanges' => 'ליסטע פון לעצטע ענדערונגען',
+'accesskey-n-randompage' => 'x',
+'tooltip-n-randompage' => 'וועלט אויס א צופעליגער בלאט',
+'accesskey-n-help' => '',
+'tooltip-n-help' => 'הילף',
+'accesskey-n-sitesupport' => '',
+'tooltip-n-sitesupport' => 'צדקה אויפצוהאלטן דעם סייט',
+'accesskey-t-whatlinkshere' => 'j',
+'tooltip-t-whatlinkshere' => 'אלע בלעטער וואס פארבינדען צו דעם בלאט',
+'accesskey-t-recentchangeslinked' => 'k',
+'tooltip-t-recentchangeslinked' => 'אלע ענדערונגען פון בלעטער וואס זענען אהער פארבינדען',
+'accesskey-feed-rss' => '',
+'tooltip-feed-rss' => 'לייגט צו אן אטאמאטישער אפדעיט פון אר.עס.עס. RSS',
+'accesskey-feed-atom' => '',
+'tooltip-feed-atom' => 'לייג צו אן אטאמאטישער אפדעיט דורך אטאם Atom',
+'accesskey-t-contributions' => '',
+'tooltip-t-contributions' => 'אלע שרייבאכצער פון דעם באנוצער',
+'accesskey-t-emailuser' => '',
+'tooltip-t-emailuser' => 'שיקט אן אימעיל פאר דעם באניצער',
+'accesskey-t-upload' => 'u',
+'tooltip-t-upload' => 'לייגט ארויף פיילס און בילדער',
+'accesskey-t-specialpages' => 'q',
+'tooltip-t-specialpages' => 'אלע ספעציעלע בלעטער',
+'accesskey-ca-nstab-main' => 'c',
+'tooltip-ca-nstab-main' => 'בליקט אינעם אינהאלט בלאט',
+'accesskey-ca-nstab-user' => 'c',
+'tooltip-ca-nstab-user' => 'קוקט אין באניצער בלאט',
+'accesskey-ca-nstab-media' => 'c',
+'tooltip-ca-nstab-media' => 'קוקט אין די מידיע בלעטער',
+'accesskey-ca-nstab-special' => '',
+'tooltip-ca-nstab-special' => 'דאס איז א ספעציעלע בלאט, מקען איר נישט ענדערן',
+'accesskey-ca-nstab-project' => 'a',
+'tooltip-ca-nstab-project' => 'צפו בדף המיזם',
+'accesskey-ca-nstab-image' => 'c',
+'tooltip-ca-nstab-image' => 'צפו בדף תיאור התמונה',
+'accesskey-ca-nstab-mediawiki' => 'c',
+'tooltip-ca-nstab-mediawiki' => 'צפו בהודעת המערכת',
+'accesskey-ca-nstab-template' => 'c',
+'tooltip-ca-nstab-template' => 'צפו בתבנית',
+'accesskey-ca-nstab-help' => 'c',
+'tooltip-ca-nstab-help' => 'באזוכט די הילף בלעטער',
+'accesskey-ca-nstab-category' => 'c',
+'previousdiff'          => 'פריעריגע אונטערשייד →',
+'nextdiff'              => 'קומענדיקע אונטערשייד ←',
+'newimages'             => 'גאַלעריע אויף נײַע בילדער',
+'showhidebots'          => '($1 ראָבאָמן)',
+'exif-artist'           => 'מחבר',
+'exif-componentsconfiguration-0'=> 'עס עקזיסטירט נישט.',
+'recentchangesall'      => 'אַלע',
+'imagelistall'          => 'אַלע',
+'watchlistall1'         => 'אַלע',
+'watchlistall2'         => 'אַלע',
+'namespacesall'         => 'אַלע',
+'confirm_purge'         => '<span dir="ltr">Clear the cache of this page?</span> $1',
+'confirm_purge_button'  => 'יאָ',
+);
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesZa.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesZa.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesZa.php	(revision 1280)
@@ -0,0 +1,8 @@
+<?php
+/** Zhuang (壮语)
+  *
+  * @addtogroup Language
+  */
+
+$fallback = 'zh-cn';
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesZea.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesZea.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesZea.php	(revision 1280)
@@ -0,0 +1,34 @@
+<?php
+/**
+ * Zealandic (Zeêuws)
+ *
+ * @addtogroup Language
+ * @author Rob Church <robchur@gmail.com>
+ */
+ 
+/**
+ * Namespace names
+ * (bug 8708)
+ */
+$namespaceNames = array(
+	NS_MEDIA            => 'Media',
+	NS_SPECIAL          => 'Speciaol',
+	NS_MAIN             => '',
+	NS_TALK             => 'Overleg',
+	NS_USER             => 'Gebruker',
+	NS_USER_TALK        => 'Overleg_gebruker',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK     => 'Overleg_$1',
+	NS_IMAGE            => 'Plaetje',
+	NS_IMAGE_TALK       => 'Overleg_plaetje',
+	NS_MEDIAWIKI        => 'MediaWiki',
+	NS_MEDIAWIKI_TALK   => 'Overleg_MediaWiki',
+	NS_TEMPLATE         => 'Sjabloon',
+	NS_TEMPLATE_TALK    => 'Overleg_sjabloon',
+	NS_HELP             => 'Ulpe',
+	NS_HELP_TALK        => 'Overleg_ulpe',
+	NS_CATEGORY         => 'Categorie',
+	NS_CATEGORY_TALK    => 'Overleg_categorie',
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesZh.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesZh.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesZh.php	(revision 1280)
@@ -0,0 +1,7 @@
+<?php
+
+# Stub message file for converter code "zh"
+
+$fallback = 'zh-cn';
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesZh_classical.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesZh_classical.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesZh_classical.php	(revision 1280)
@@ -0,0 +1,1223 @@
+<?php
+/**
+  * Old Chinese / Late Middle Chinese (文言)
+  * Based on http://zh-classical.wikipedia.org/w/index.php?title=Wikipedia:%E7%94%A8%E6%88%B6%E4%BB%8B%E9%9D%A2%E7%BF%BB%E8%AD%AF/MessagesZh_classical.php&oldid=30887
+  *
+  * @addtogroup Language
+  */
+
+/**
+ * 風名。無稱者用英名。
+ */
+$skinNames = array(
+        'standard' => '經典',
+        'nostalgia' => '懷古',
+        'cologneblue' => '古龍水藍',
+        'davinci' => 'DaVinci',
+        'mono' => '素',
+        'monobook' => '單書',
+        'myskin' => '吾風',
+        'chick' => '窈窕'
+);
+
+/**
+ * A list of date format preference keys which can be selected in user 
+ * preferences. New preference keys can be added, provided they are supported
+ * by the language class's timeanddate(). Only the 5 keys listed below are 
+ * supported by the wikitext converter (DateFormatter.php).
+ *
+ * The special key "default" is an alias for either dmy or mdy depending on 
+ * $wgAmericanDates
+ */
+$datePreferences = false;
+
+$defaultDateFormat = 'zh';
+
+/**
+ * These are formats for dates generated by MediaWiki (as opposed to the wikitext
+ * DateFormatter). Documentation for the format string can be found in 
+ * Language.php, search for sprintfDate. 
+ *
+ * This array is automatically inherited by all subclasses. Individual keys can be
+ * overridden.
+ */
+$dateFormats = array(
+        'zh time' => 'H時i分',
+        'zh date' => 'Y年Fj日',
+        'zh both' => 'Y年Fj日H時i分',
+);
+
+$linkTrail = '/^([a-z]+)(.*)$/sD';
+
+#-------------------------------------------------------------------
+# Default messages
+#-------------------------------------------------------------------
+# Allowed characters in keys are: A-Z, a-z, 0-9, underscore (_) and
+# hyphen (-). If you need more characters, you may be able to change
+# the regex in MagicWord::initRegex
+
+$messages = array(
+# User preference toggles
+'tog-underline'               => '通者墊之',
+'tog-highlightbroken'         => '格不通<a href="" class="new">如斯</a>，替之以<a href="" class="internal">？</a>',
+'tog-justify'                 => '齊各段',
+'tog-hideminor'               => '隱校文',
+'tog-extendwatchlist'         => '全哨',
+'tog-usenewrc'                => '近易更善(JavaScript)',
+'tog-numberheadings'          => '自生章數',
+'tog-showtoolbar'             => '現多寶列(JavaScript)',
+'tog-editondblclick'          => '雙擊以修文(JavaScript)',
+'tog-editsection'             => '以[纂]纂',
+'tog-editsectiononrightclick' => '右擊節標以纂(JavaScript)',
+'tog-showtoc'                 => '逾三章者現目次',
+'tog-rememberpassword'        => '符節通越',
+'tog-editwidth'               => '全幅',
+'tog-watchcreations'          => '哨吾撰',
+'tog-watchdefault'            => '哨吾纂',
+'tog-minordefault'            => '常為校',
+'tog-previewontop'            => '覽文至頂',
+'tog-previewonfirst'          => '先覽後修',
+'tog-nocache'                 => '莫謄文',
+'tog-enotifwatchlistpages'    => '哨新遣函',
+'tog-enotifusertalkpages'     => '議新遣函',
+'tog-enotifminoredits'        => '校新遣函',
+'tog-enotifrevealaddr'        => '信內現吾址',
+'tog-shownumberswatching'     => '放哨有',
+'tog-fancysig'                => '署以本碼 (免自連)',
+'tog-externaleditor'          => '常以它器纂文',
+'tog-externaldiff'            => '常以它器纂辨',
+'tog-showjumplinks'           => '"往"字可通',
+'tog-uselivepreview'          => '即覽(JavaScript)，尚不穩',
+'tog-forceeditsummary'        => '缺概',
+'tog-watchlisthideown'        => '不哨吾文',
+'tog-watchlisthidebots'       => '不哨僕文',
+
+'underline-always'  => '恆',
+'underline-never'   => '絕',
+'underline-default' => '予定',
+
+'skinpreview' => '(預覽)',
+
+# Dates
+'sunday'        => '週日',
+'monday'        => '週一',
+'tuesday'       => '週二',
+'wednesday'     => '週三',
+'thursday'      => '週四',
+'friday'        => '週五',
+'saturday'      => '週六',
+'sun'           => '日',
+'mon'           => '一',
+'tue'           => '二',
+'wed'           => '三',
+'thu'           => '四',
+'fri'           => '五',
+'sat'           => '六',
+'january'       => '一月',
+'february'      => '二月',
+'march'         => '三月',
+'april'         => '四月',
+'may_long'      => '五月',
+'june'          => '六月',
+'july'          => '七月',
+'august'        => '八月',
+'september'     => '九月',
+'october'       => '十月',
+'november'      => '十一月',
+'december'      => '十二月',
+'january-gen'   => '一月',
+'february-gen'  => '二月',
+'march-gen'     => '三月',
+'april-gen'     => '四月',
+'may-gen'       => '五月',
+'june-gen'      => '六月',
+'july-gen'      => '七月',
+'august-gen'    => '八月',
+'september-gen' => '九月',
+'october-gen'   => '十月',
+'november-gen'  => '十一月',
+'december-gen'  => '十二月',
+'jan'           => '一月',
+'feb'           => '二月',
+'mar'           => '三月',
+'apr'           => '四月',
+'may'           => '五月',
+'jun'           => '六月',
+'jul'           => '七月',
+'aug'           => '八月',
+'sep'           => '九月',
+'oct'           => '十月',
+'nov'           => '十一月',
+'dec'           => '十二月',
+
+# Bits of text used by many pages
+'categories'      => '$1類',
+'category_header' => '"$1"文',
+'subcategories'   => '次類',
+
+'linkprefix'        => '/^(.*?)([a-zA-Z\x80-\xff]+)$/sD',
+'mainpagetext'      => "<big>'''媒維基安置矣'''</big>",
+'mainpagedocfooter' => "欲識維基，見[http://meta.wikimedia.org/wiki/Help:Contents User's Guide] 
+
+== 始 ==
+
+* [http://www.mediawiki.org/wiki/Help:Configuration_settings Configuration settings list]
+* [http://www.mediawiki.org/wiki/Help:FAQ MediaWiki FAQ]
+* [http://mail.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]",
+
+'about'          => '大典簡介',
+'article'        => '文',
+'newwindow'      => '撰新頁',
+'cancel'         => '捨',
+'qbfind'         => '尋',
+'qbbrowse'       => '覽',
+'qbedit'         => '纂',
+'qbpageoptions'  => '此頁',
+'qbpageinfo'     => '內文',
+'qbmyoptions'    => '吾好',
+'qbspecialpages' => '奇頁',
+'moredotdotdot'  => '逾…',
+'mypage'         => '寒舍',
+'mytalk'         => '書房',
+'anontalk'       => '與(IP)私議',
+'navigation'     => '導',
+
+# Metadata in edit box
+'metadata_help' => '衍意，見[[{{ns:project}}:Metadata]]',
+
+'errorpagetitle'    => '誤',
+'returnto'          => '返$1。',
+'tagline'           => '語出維基大典，自由之大典矣',
+'help'              => '助',
+'search'            => '索',
+'searchbutton'      => '尋之',
+'go'                => '往',
+'searcharticle'     => '往',
+'history'           => '誌',
+'history_short'     => '誌',
+'updatedmarker'     => '新也',
+'info_short'        => '快訊',
+'printableversion'  => '印版',
+'permalink'         => '恆通',
+'print'             => '印',
+'edit'              => '纂',
+'editthispage'      => '纂',
+'delete'            => '刪',
+'deletethispage'    => '刪',
+'undelete_short'    => '還$1已刪',
+'protect'           => '錮',
+'protectthispage'   => '錮此頁',
+'unprotect'         => '赦',
+'unprotectthispage' => '赦此頁',
+'newpage'           => '新頁',
+'talkpage'          => '參議此文',
+'specialpage'       => '奇頁',
+'personaltools'     => '家私',
+'postcomment'       => '贊',
+'addsection'        => '新議',
+'articlepage'       => '閱內文',
+'talk'              => '議',
+'views'             => '覽',
+'toolbox'           => '多寶格',
+'userpage'          => '簿',
+'projectpage'       => '計畫頁',
+'imagepage'         => '覽圖',
+'mediawikipage'     => '觀媒',
+'templatepage'      => '鑄模',
+'viewhelppage'      => '助文',
+'categorypage'      => '分類',
+'viewtalkpage'      => '見議',
+'otherlanguages'    => '他山',
+'redirectedfrom'    => '(轉自$1)',
+'redirectpagesub'   => '轉',
+'lastmodifiedat'    => '此頁$1$2方易', # $1 date, $2 time
+'viewcount'         => '此頁$1閱矣',
+'protectedpage'     => '此頁錮矣',
+'jumpto'            => '往：',
+'jumptonavigation'  => '嚮',
+'jumptosearch'      => '索',
+
+# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
+'aboutsite'         => '關於 {{SITENAME}}',
+'aboutpage'         => '{{ns:project}}:About',
+'bugreports'        => '稟明錯漏',
+'bugreportspage'    => '{{ns:project}}:錯漏集',
+'copyright'         => '文悉釋以$1。',
+'copyrightpagename' => '{{SITENAME}} copyright',
+'copyrightpage'     => '{{ns:project}}:Copyrights',
+'currentevents'     => '世事',
+'currentevents-url' => '天下大事',
+'disclaimers'       => '免責告示',
+'disclaimerpage'    => '{{ns:project}}:General_disclaimer',
+'edithelp'          => '助',
+'edithelppage'      => '{{ns:help}}:修',
+'faq'               => '頻答問',
+'faqpage'           => '{{ns:project}}:頻答問集',
+'helppage'          => 'Help:目錄',
+'mainpage'          => '卷首',
+'portal'            => '市集',
+'portal-url'        => '{{ns:project}}:市集',
+'privacy'           => '隱私通例',
+'privacypage'       => '{{ns:project}}:Privacy_policy',
+'sitesupport'       => '捐助',
+'sitesupport-url'   => '{{ns:project}}:捐助集',
+
+'badaccess'        => '子未逮',
+'badaccess-group0' => '子未逮，歉限之。',
+'badaccess-group1' => '子非$1，歉限之',
+
+'versionrequired'     => '$1媒維基務安之',
+'versionrequiredtext' => '$1媒維基務安之，見[[Special:Version]]',
+
+'ok'                 => '准',
+'pagetitle'          => '$1 - {{SITENAME}}',
+'retrievedfrom'      => '取自"$1"',
+'youhavenewmessages' => '子有$1($2)',
+'newmessageslink'    => '新訊',
+'editsection'        => '纂',
+'editold'            => '纂',
+'editsectionhint'    => '纂 $1',
+'toc'                => '目次',
+'showtoc'            => '見',
+'hidetoc'            => '藏',
+'thisisdeleted'      => '還$1或閱之?',
+'viewdeleted'        => '閱$1之?',
+'restorelink'        => '$1已刪',
+
+# Short words for each namespace, by default used in the 'article' tab in monobook
+'nstab-main'      => '文',
+'nstab-user'      => '齋',
+'nstab-media'     => '雅',
+'nstab-special'   => '奇',
+'nstab-project'   => '策',
+'nstab-image'     => '像',
+'nstab-mediawiki' => '媒',
+'nstab-template'  => '模',
+'nstab-help'      => '助',
+'nstab-category'  => '類',
+
+# Main script and global functions
+'nosuchaction'      => '無可為',
+'nosuchactiontext'  => '查無此址',
+'nosuchspecialpage' => '查無奇頁',
+'nospecialpagetext' => '查無奇頁,見[[{{ns:special}}:Specialpages]].',
+
+# General errors
+'error'                => '有誤',
+'databaseerror'        => '庫藏有誤',
+'dberrortext'          => '庫藏問語誤，或軟體有錯。
+末語道:
+<blockquote><tt>$1</tt></blockquote>
+內此函式"<tt>$2</tt>".
+MySQL報有誤"<tt>$3: $4</tt>".',
+'dberrortextcl'        => '庫藏問語有誤，末語道：
+"$1"
+內此函式"$2".
+MySQL報有誤"$3: $4"',
+'noconnect'            => '歉哉有變，莫能問庫藏。<br />
+$1',
+'nodb'                 => '莫能擇$1庫',
+'cachederror'          => '此為謄本，恐不新也',
+'laggedslavemode'      => '警兆，此頁不新',
+'readonly'             => '鎖庫藏',
+'enterlockreason'      => '何鎖？另附開赦之日。',
+'readonlytext'         => '或因檢修之故，庫藏鎖矣。莫可撰，亦莫可纂。鎖者告曰：「$1」',
+'missingarticle'       => '未見"$1"，或舊、或刪。若非此情，軟體恐錯，請上報網址。',
+'internalerror'        => '內誤',
+'filecopyerror'        => '"$1"未可謄至"$2".',
+'filerenameerror'      => '"$1"名未可更為"$2"',
+'filedeleteerror'      => '"$1"未可刪',
+'filenotfound'         => '未見"$1"',
+'unexpected'           => '異數，"$1"="$2".',
+'formerror'            => '有誤：表未可呈',
+'badarticleerror'      => '此頁莫為之',
+'cannotdelete'         => '此頁或刪矣，不復為之',
+'badtitle'             => '無此題',
+'badtitletext'         => '或別、或缺、或違、或他山謬通，此題不存。',
+'perfdisabled'         => '歉哉，此舉累甚，他恐不得，故封也。',
+'perfdisabledsub'      => '有謄本$1', # obsolete?
+'perfcached'           => '下為謄本，恐不新。',
+'perfcachedts'         => '下為謄本，$1已新之。',
+'wrong_wfQuery_params' => 'wfQuery()參數有誤<br />
+函式: $1<br />
+問語: $2',
+'viewsource'           => '覽本源',
+'viewsourcefor'        => '$1',
+'protectedinterface'   => '此頁司版面，錮之以遠濫。',
+'editinginterface'     => "'''警示：'''此頁司版面，一人易之眾人動，懇請戒慎之。",
+'sqlhidden'            => '藏SQL問語',
+
+# Login and logout pages
+'logouttitle'                => '去簿',
+'logouttext'                 => '<strong>子去簿矣</strong><br />
+子可匿名還覽{{SITENAME}}，或復登同簿、異簿。瀏覽器謄本未清，文舊，留意之。',
+'welcomecreation'            => '== $1大駕光臨! ==
+子簿已增，可更[[Special:Preferences|簿註]]。',
+'loginpagetitle'             => '合符節',
+'yourname'                   => '名',
+'yourpassword'               => '符節',
+'yourpasswordagain'          => '復核符節',
+'remembermypassword'         => '記之',
+'loginproblem'               => '<b>登簿有誤</b><br />請再之',
+'alreadyloggedin'            => '<strong>$1登簿矣</strong><br />',
+'login'                      => '登簿',
+'loginprompt'                => '登簿{{SITENAME}}須cookies，請釋之.',
+'userlogin'                  => '登簿 / 增簿',
+'logout'                     => '去簿',
+'userlogout'                 => '去簿',
+'notloggedin'                => '尚未登簿',
+'nologin'                    => '$1無簿乎？',
+'nologinlink'                => '增簿',
+'createaccount'              => '增簿',
+'gotaccount'                 => '$1有簿矣乎？',
+'gotaccountlink'             => '登簿',
+'createaccountmail'          => '同電郵',
+'badretype'                  => '符節不合',
+'userexists'                 => '簿名存矣，請更之',
+'youremail'                  => '電郵*',
+'username'                   => '簿名',
+'uid'                        => '名',
+'yourrealname'               => '本名',
+'yourlanguage'               => '語',
+'yournick'                   => '暱名',
+'email'                      => '電郵',
+'prefs-help-email-enotif'    => '信遣此',
+'prefs-help-realname'        => '*本名，可略: if you choose to provide it this will be used for giving you attribution for your work.',
+'loginerror'                 => '登簿有誤',
+'prefs-help-email'           => '*電郵，可略:以此通他人，或於共議處匿論',
+'nocookiesnew'               => '簿已增而未登。登簿{{SITENAME}}須cookies，請釋之後登。',
+'nocookieslogin'             => '登簿{{SITENAME}}須cookies，請釋之後登。',
+'noname'                     => '簿名缺',
+'loginsuccesstitle'          => '登簿成矣',
+'loginsuccess'               => "'''$1'''登簿{{SITENAME}}矣",
+'nosuchuser'                 => '查無"$1"，請核之或增簿。',
+'nosuchusershort'            => '查無"$1"，請核之。',
+'nouserspecified'            => '須簿名',
+'wrongpassword'              => '符節不合，請核之。',
+'wrongpasswordempty'         => '缺符節，請補之。',
+'mailmypassword'             => '遣吾符節',
+'passwordremindertitle'      => '符節遣自{{SITENAME}}',
+'passwordremindertext'       => '$1求遣{{SITENAME}}($4)"$2"符節於此，係"$3"。
+
+若非汝求，或省更之，略之即可。',
+'noemail'                    => '"$1"無存址',
+'passwordsent'               => '符節遣$1矣"，請復登之。',
+'eauthentsent'               => '核文遣矣。子循以核之，簿方可活。',
+'mailerror'                  => '$1信未遣之',
+'acct_creation_throttle_hit' => '歉哉，$1在矣，不可復增。',
+'emailauthenticated'         => '$1郵驛證矣',
+'emailnotauthenticated'      => '郵驛<strong>未證</strong>，下不遺書。',
+'noemailprefs'               => '下需郵驛：',
+'emailconfirmlink'           => '請考郵驛',
+'invalidemailaddress'        => '驛址不格，請正之或空白。',
+'accountcreated'             => '簿增矣',
+'accountcreatedtext'         => '$1簿增矣',
+
+# Edit page toolbar
+'bold_sample'     => '粗體',
+'bold_tip'        => '粗體',
+'italic_sample'   => '斜體',
+'italic_tip'      => '斜體',
+'link_sample'     => '通',
+'link_tip'        => '通內',
+'extlink_tip'     => '冠http://以通外',
+'headline_sample' => '題',
+'headline_tip'    => '二題',
+'math_sample'     => '此書方程式',
+'math_tip'        => '數學方程式(LaTeX)',
+'nowiki_sample'   => '此不排版',
+'nowiki_tip'      => '不排維基之版',
+'image_tip'       => '嵌圖',
+'media_tip'       => '通影音檔',
+'sig_tip'         => '署之與時',
+'hr_tip'          => '縱線，慎用之',
+
+# Edit pages
+'summary'                   => '概',
+'subject'                   => '題',
+'minoredit'                 => '校',
+'watchthis'                 => '派哨',
+'savearticle'               => '儲',
+'preview'                   => '預覽',
+'showpreview'               => '預覽',
+'showlivepreview'           => '即覽',
+'showdiff'                  => '辨異',
+'anoneditwarning'           => "'''警：'''子未登簿，IP將誌。",
+'missingsummary'            => "''''醒：'''子未概之，復存之則文倍焉。",
+'missingcommenttext'        => '請贊之',
+'blockedtitle'              => '子見禁',
+'blockedtext'               => "<big>'''子名、IP見禁。'''</big>
+禁者$1也， 因''$2''故，存惑可詢$1，或[[{{ns:project}}:Administrators|有秩]],[[Special:Preferences|簿註]]無驛則信不遣。
+另，子IP為$3，詢時切附之。",
+'blockedoriginalsource'     => "'''$1'''本源如下：",
+'blockededitsource'         => "子'''$1纂文'''如下：",
+'whitelistedittitle'        => '登簿以纂',
+'whitelistedittext'         => '$1後方可纂文。',
+'whitelistreadtitle'        => '登簿以閱',
+'whitelistreadtext'         => '[[Special:Userlogin|登簿]]後方可閱。',
+'whitelistacctitle'         => '拒增此簿',
+'whitelistacctext'          => '欲增此簿，[[Special:Userlogin|登簿]]求允',
+'confirmedittitle'          => '證驛以纂',
+'confirmedittext'           => '驛證方可纂文。請見[[Special:Preferences|簿註]]。',
+'loginreqtitle'             => '須登簿',
+'loginreqlink'              => '登簿',
+'loginreqpagetext'          => '$1以覽它頁。',
+'accmailtitle'              => '符節傳矣',
+'accmailtext'               => '"$1"符節傳$2矣',
+'newarticle'                => '撰',
+'newarticletext'            => '此頁尚缺。欲補，撰於下，有惑見[[{{ns:help}}:Contents|助]]。
+誤入者，返前即可。',
+'anontalkpagetext'          => "----''此乃匿名論壇，為未簿或不簿者設，所言俱錄IP以辨人焉。然IP不獨有，恐生亂象，不喜請[[Special:Userlogin|登簿]]以遠之。",
+'noarticletext'             => '此頁無文。子可 [[{{ns:special}}:Search/{{PAGENAME}}|尋同題]]，或[{{fullurl:{{FULLPAGENAME}}|action=edit}} 撰新文]。',
+'clearyourcache'            => "'''註：'''重取頁面，文方新焉。
+'''Mozilla / Firefox / Safari:'''押''Shift''並點''重新載入''，或合鍵''Ctrl-Shift-R''(Apple Mac為''Cmd-Shift-R'')。
+'''IE:'''押''Ctrl''並點''重新整理''，或合鍵''Ctrl-F5''。
+'''Konqueror:'''點''Reload''即可，或押''F5''。
+'''Opera:'''須至''Tools→Preferences''清謄本。",
+'usercssjsyoucanpreview'    => '<strong>訣：</strong>CSS/JS應先預覽而後存。',
+'usercsspreview'            => "'''預覽CSS，尚未儲焉。'''",
+'userjspreview'             => "'''預覽JavaScript，尚未儲焉。'''",
+'userinvalidcssjstitle'     => "'''警：'''\"\$1\"無此面版。自製者，全名務小寫，如User:Foo/monobook.css 而非User:Foo/Monobook.css",
+'updated'                   => '(新)',
+'note'                      => '<strong>註</strong>',
+'previewnote'               => '<strong>此乃預覽，尚未儲焉。</strong>',
+'session_fail_preview'      => '<strong>歉哉有變，子纂未存焉，請再之。如復不成，簿重登焉。</strong>',
+'session_fail_preview_html' => "<strong>歉哉有變，子纂未存焉</strong>
+
+''此維基亦合純HTML，除預覽以遠惡JavaScript侵。''
+<strong>纂文若合，請再之。如復不成，簿重登焉。</strong>",
+'importing'                 => '匯入$1',
+'editing'                   => '纂$1',
+'editinguser'               => '<b>$1</b>正纂之',
+'editingsection'            => '纂節$1',
+'editingcomment'            => '贊$1',
+'editconflict'              => '纂沖$1',
+'explainconflict'           => '子纂與他人沖，上者時也，下者子也，望子合之。
+註，<b>惟</b>上文儲焉<br />',
+'yourtext'                  => '子也',
+'storedversion'             => '時也',
+'nonunicodebrowser'         => '<strong>警：子之瀏覽器不允萬國碼，以十六進位數代之，以保纂可也。</strong>',
+'editingold'                => "<strong>'''警'''子纂已舊。如強儲之，則新易盡失矣。</strong>",
+'yourdiff'                  => '辨',
+'copyrightwarning'          => '{{SITENAME}}全文皆循$2，詳見$1。若不喜己文它變，但去可矣。文務親撰，或謄公本，
+<strong>萬勿盜版！</strong>',
+'copyrightwarning2'         => '{{SITENAME}}全文，允眾人撰、纂、刪、校。如不喜己文它變，但去可矣。<br />
+文務親撰，或謄公本，如$1。<strong>萬勿盜版！</strong>',
+'longpagewarning'           => '<strong>警：此頁長$1仟位元組，逾卅二，瀏覽器恐不盡堪，望子縮之、斷之。<strong>',
+'longpageerror'             => '<strong>警：子文長$1仟位元組，越限$2，未能儲焉。</strong>',
+'readonlywarning'           => '<strong>警：檢修之故，庫藏鎖，存儲封矣。子自備之而後用。</strong>',
+'protectedpagewarning'      => '<strong>警：庫藏鎖矣，惟有秩得纂之。</strong>',
+'semiprotectedpagewarning'  => "'''註'''庫藏鎖矣，惟登簿得纂之。",
+'templatesused'             => '此頁用模：',
+'nocreatetitle'             => '新題見禁',
+'nocreatetext'              => '新題見禁，惟舊可修。可赦之以[[Special:Userlogin|登簿、增簿]]。',
+
+# Account creation failure
+'cantcreateaccounttitle' => '新簿莫增',
+'cantcreateaccounttext'  => '子之IP <b>$1</b> 疑嘗惡，故見封。',
+
+# History pages
+'revhistory'          => '誌審',
+'viewpagelogs'        => '誌審',
+'nohistory'           => '此題無誌',
+'revnotfound'         => '此題無審',
+'revnotfoundtext'     => '審無尋，請校網址。',
+'loadhist'            => '正取誌…',
+'currentrev'          => '今審',
+'revisionasof'        => '$1審',
+'previousrevision'    => '前審',
+'nextrevision'        => '次審',
+'currentrevisionlink' => '今審',
+'cur'                 => '今',
+'next'                => '次',
+'last'                => '新',
+'orig'                => '原',
+'histlegend'          => '辨異：擇二孔後，按Enter、或點下鈕以辨之。<br />
+釋，（今）：與今審辨；(新)：與前審辨, M：校',
+'deletedrev'          => '[刪矣]',
+'histfirst'           => '初',
+'histlast'            => '末',
+
+# Revision feed
+'history-feed-title'          => '誌審',
+'history-feed-description'    => '維基誌審',
+'history-feed-item-nocomment' => '$1於$2', # user at time
+'history-feed-empty'          => '此頁不存，或刪、或更。類[[Special:Search|由此尋]]',
+
+# Revision deletion
+'rev-deleted-comment'         => '(此註刪矣)',
+'rev-deleted-user'            => '(此簿刪矣)',
+'rev-deleted-text-permission' => '<div class="mw-warning plainlinks">
+此審刪矣，詳見[{{fullurl:Special:Log/delete|page={{PAGENAMEE}}}}誌刪].
+</div>',
+'rev-deleted-text-view'       => '<div class="mw-warning plainlinks">
+此審刪矣，惟有秩可見之，詳見[{{fullurl:Special:Log/delete|page={{PAGENAMEE}}}} 誌刪].
+</div>',
+'rev-delundel'                => '見/藏',
+'revisiondelete'              => '刪、還審',
+'revdelete-nooldid-title'     => '無此審。',
+'revdelete-nooldid-text'      => '審未擇，不可為之。',
+'revdelete-selected'          => '審[[:$1]]已擇。',
+'revdelete-text'              => '刪審雖見誌，其文摒公眾，惟有秩可得之。無規則有秩可復還焉。',
+'revdelete-legend'            => '審，規之以：',
+'revdelete-hide-text'         => '藏審文',
+'revdelete-hide-comment'      => '藏贊',
+'revdelete-hide-user'         => '簿、IP以藏',
+'revdelete-log'               => '誌贊：',
+'revdelete-submit'            => '擇審使之',
+
+# Diffs
+'difference'                => '(辨異)',
+'loadingrev'                => '取審以辨…',
+'lineno'                    => '列$1：',
+'editcurrent'               => '纂今審',
+'selectnewerversionfordiff' => '擇一新以辨',
+'selectolderversionfordiff' => '擇一舊以辨',
+'compareselectedversions'   => '辨所擇',
+
+# Search results
+'searchresults'         => '得尋',
+'searchresulttext'      => '何索{{SITENAME}}，詳見[[{{ns:project}}:Searching|索{{SITENAME}}]]。',
+'searchsubtitle'        => "'''[[:$1]]'''尋焉",
+'searchsubtitleinvalid' => "'''$1'''索焉",
+'badquery'              => '問尋有誤',
+'badquerytext'          => '無尋也，蓋字節短於三，或謬焉。請更之再試。',
+'matchtotals'           => '"$1"者，合$2題與$3文',
+'noexactmatch'          => "'''無題曰\"\$1\"'''。子可[[:\$1|撰之]]。",
+'titlematches'          => '合題',
+'notitlematches'        => '無題合',
+'textmatches'           => '合文',
+'notextmatches'         => '無文合',
+'prevn'                 => '前$1',
+'nextn'                 => '次$1',
+'viewprevnext'          => '見 ($1) ($2) ($3).',
+'showingresults'        => '見<b>$1</b>尋，自<b>$2</b>始',
+'showingresultsnum'     => '見<b>$3</b>尋，自<b>$2</b>.始',
+'powersearch'           => '索',
+
+# Preferences page
+'preferences'           => '簿註',
+'mypreferences'         => '簿註',
+'prefsnologin'          => '未登簿',
+'prefsnologintext'      => '註記須[[Special:Userlogin|登簿]]。',
+'prefsreset'            => '簿註重謄',
+'changepassword'        => '易符節',
+'skin'                  => '面版',
+'math'                  => '數學',
+'dateformat'            => '日期格式',
+'datedefault'           => '原註',
+'datetime'              => '日期時間',
+'math_failure'          => '譯不成',
+'math_unknown_error'    => '未知之誤',
+'math_unknown_function' => '未知函式',
+'math_lexing_error'     => '律有誤',
+'math_syntax_error'     => '語法有誤',
+'prefs-personal'        => '概簿',
+'prefs-rc'              => '近易',
+'prefs-watchlist'       => '哨站',
+'prefs-watchlist-days'  => '哨報有日',
+'prefs-watchlist-edits' => '哨站有文',
+'prefs-misc'            => '雜',
+'saveprefs'             => '儲',
+'resetprefs'            => '重置',
+'oldpassword'           => '舊符節：',
+'newpassword'           => '新符節：',
+'retypenew'             => '新符節再之：',
+'textboxsize'           => '正纂',
+'rows'                  => '列：',
+'columns'               => '行：',
+'searchresultshead'     => '索',
+'resultsperpage'        => '頁有尋：',
+'contextlines'          => '尋有列：',
+'contextchars'          => '列有文：',
+'recentchangescount'    => '近易有題：',
+'savedprefs'            => '簿註書矣',
+'timezonelegend'        => '時區',
+'timezonetext'          => '與伺服器偏時有',
+'localtime'             => '本地時',
+'timezoneoffset'        => '偏¹',
+'servertime'            => '伺服器時',
+'guesstimezone'         => '瀏覽器填之',
+'allowemail'            => '予收信',
+'default'               => '予定',
+'files'                 => '檔',
+
+# User rights
+'userrights-lookup-user'     => '司社',
+'userrights-user-editname'   => '簿名：',
+'editusergroup'              => '治社',
+'userrights-editusergroup'   => '治社',
+'saveusergroups'             => '定之',
+'userrights-groupsmember'    => '有員：',
+'userrights-groupsavailable' => '社可治有：',
+'userrights-groupshelp'      => '揀社以增員、減員，未揀者不變也。欲略之，押Ctrl並左擊。',
+
+# Groups
+'group'            => '社:',
+'group-bot'        => '僕',
+'group-sysop'      => '有秩',
+'group-bureaucrat' => '門下',
+'group-all'        => '(眾)',
+
+'group-bot-member'        => '僕',
+'group-sysop-member'      => '有秩',
+'group-bureaucrat-member' => '門下',
+
+'grouppage-bot'        => '{{ns:project}}:僕',
+'grouppage-sysop'      => '{{ns:project}}:有秩',
+'grouppage-bureaucrat' => '{{ns:project}}:門下',
+
+# User rights log
+'rightsnone' => '(凡)',
+
+# Recent changes
+'recentchanges'                     => '近易',
+'recentchangestext'                 => '大典新易，悉列於此。',
+'rcnote'                            => '下為自<strong>$3</strong>起，<strong>$2</strong>日內<strong>$1</strong>近易也。',
+'rcnotefrom'                        => '下為自<b>$2</b至<b>$1</b>之易也。',
+'rclistfrom'                        => '自$1起之易也',
+'rcshowhideminor'                   => '$1校',
+'rcshowhidebots'                    => '$1僕',
+'rcshowhideliu'                     => '$1簿',
+'rcshowhideanons'                   => '$1匿名',
+'rcshowhidepatr'                    => '$1哨',
+'rcshowhidemine'                    => '$1吾纂',
+'rclinks'                           => '$2日內$1近易。<br />$3',
+'diff'                              => '辨',
+'hist'                              => '誌',
+'hide'                              => '藏',
+'show'                              => '見',
+'minoreditletter'                   => '校',
+'newpageletter'                     => '新',
+'boteditletter'                     => '僕',
+'number_of_watching_users_pageview' => '[放有$1哨]',
+'rc_categories_any'                 => '任',
+
+# Recent changes linked
+'recentchangeslinked' => '鍵出文',
+
+# Upload
+'upload'                     => '進獻',
+'uploadbtn'                  => '進獻',
+'reupload'                   => '復獻之',
+'reuploaddesc'               => '返載獻',
+'uploadnologin'              => '未登簿',
+'uploadnologintext'          => '[[Special:Userlogin|登簿]]始可進獻',
+'upload_directory_read_only' => '目錄$1禁入，無可獻。',
+'uploaderror'                => '進獻有變',
+'uploadtext'                 => "下表以獻，[[Special:Imagelist|載獻]]覽之。或見[[Special:Log/upload|誌獻]]。
+欲嵌頁中，是格通之：
+'''<nowiki>[[</nowiki>{{ns:image}}:File.jpg]]'''、
+'''<nowiki>[[</nowiki>{{ns:image}}:File.png|名]]'''或
+'''<nowiki>[[</nowiki>{{ns:media}}:File.ogg]]'''",
+'uploadlog'                  => '誌獻',
+'uploadlogpage'              => '誌獻',
+'uploadlogpagetext'          => '近獻如下：',
+'filename'                   => '名',
+'filedesc'                   => '概',
+'fileuploadsummary'          => '概：',
+'filestatus'                 => '授權',
+'filesource'                 => '源',
+'uploadedfiles'              => '進獻',
+'ignorewarning'              => '強儲之。',
+'ignorewarnings'             => '警略。',
+'minlength'                  => '名務逾三字元。',
+'illegalfilename'            => '名"$1"不格，更之再焉。',
+'badfilename'                => '更名"$1。".',
+'emptyfile'                  => '無以獻，疑謬名也，請核之。',
+'fileexists'                 => '$1存矣，欲蓋之則再也。',
+'successfulupload'           => '君成功置檔案於此',
+'sourcefilename'             => '源名',
+'destfilename'               => '欲置檔名',
+'watchthisupload'            => '派哨',
+
+# Image list
+'ilsubmit'              => '尋',
+'byname'                => '以名',
+'bydate'                => '以日',
+'bysize'                => '以量',
+'imgdelete'             => '刪',
+'deleteimg'             => '刪',
+'imagelinks'            => '通',
+'imagelist_date'        => '時',
+'imagelist_name'        => '名',
+'imagelist_user'        => '簿',
+'imagelist_size'        => '量(位元組)',
+'imagelist_description' => '述',
+'imagelist_search_for'  => '以圖名尋：',
+
+# Unwatched pages
+'unwatchedpages' => '無哨',
+
+# Statistics
+'statistics'             => '統計',
+'sitestats'              => '{{SITENAME}}統計',
+'userstats'              => '統計有簿者',
+'sitestatstext'          => "庫藏共'''$1'''頁，除議、釋、芻文、轉與不濟者，有足文$2、獻品'''$8'''。
+自大典始焉，閱頁'''$3'''，纂文'''$4'''。均之則每頁'''$5'''覽，每文'''$6'''纂。
+[http://meta.wikimedia.org/wiki/Help:Job_queue job queue]長'''$7'''",
+'userstatstext'          => "有簿者'''$1'''，中有'''$2'''人為$5，計有百分之'''$4'''。",
+'statistics-mostpopular' => '首博之頁',
+
+'disambiguations' => '釋義',
+
+'doubleredirects' => '複轉',
+
+'brokenredirects'     => '斷轉',
+'brokenredirectstext' => '不通',
+
+# Miscellaneous special pages
+'nbytes'                  => '$1位元組',
+'ncategories'             => '$1門',
+'nlinks'                  => '$1通',
+'nmembers'                => '$1簿',
+'nrevisions'              => '$1審',
+'nviews'                  => '$1閱',
+'lonelypages'             => '孤頁',
+'lonelypagestext'         => '此頁無通',
+'uncategorizedpages'      => '門無屬',
+'uncategorizedcategories' => '此門未屬焉',
+'uncategorizedimages'     => '圖無屬',
+'unusedcategories'        => '此圖未屬焉',
+'popularpages'            => '膾炙',
+'wantedcategories'        => '缺門',
+'wantedpages'             => '缺頁',
+'mostrevisions'           => '首審之文',
+'allpages'                => '全頁',
+'shortpages'              => '短頁',
+'longpages'               => '長頁',
+'listusers'               => '盡列有簿',
+'specialpages'            => '奇頁',
+'spheading'               => '白奇',
+'restrictedpheading'      => '密奇',
+'newpages'                => '新頁',
+'newpages-username'       => '名：',
+'ancientpages'            => '舊頁',
+'intl'                    => '通他語',
+'move'                    => '搬',
+'movethispage'            => '搬此頁',
+
+'categoriespagetext' => '大典有門：',
+'version'            => '版',
+
+# Special:Log
+'specialloguserlabel'  => '有簿：',
+'speciallogtitlelabel' => '題：',
+'log'                  => '誌',
+
+# Special:Allpages
+'nextpage'          => '次頁，$1',
+'allpagesfrom'      => '見頁自：',
+'allarticles'       => '全文',
+'allinnamespace'    => '全頁($1 namespace)',
+'allnotinnamespace' => '全頁(not in $1 namespace)',
+'allpagesprev'      => '前',
+'allpagesnext'      => '次',
+'allpagessubmit'    => '往',
+'allpagesprefix'    => '見頁冠以：',
+
+# Special:Listusers
+'listusersfrom' => '列有簿自：',
+
+# E-mail user
+'mailnologin'     => '無驛',
+'mailnologintext' => '[[Special:Userlogin|登簿]方可遺書。]
+and have a valid e-mail address in your [[Special:Preferences|preferences]]
+to send e-mail to other users.',
+'emailuser'       => '遺是君書',
+'emailpage'       => '遺書',
+'defemailsubject' => '{{SITENAME}}有信',
+'noemailtitle'    => '無驛',
+'emailfrom'       => '自',
+'emailto'         => '至',
+'emailsubject'    => '題',
+'emailmessage'    => '訊',
+'emailsend'       => '遣',
+'emailsent'       => '信遣矣',
+'emailsenttext'   => '信遣矣',
+
+# Watchlist
+'watchlist'            => '哨站',
+'watchlistfor'         => "(哨'''$1''')",
+'nowatchlist'          => '無哨',
+'watchlistanontext'    => '$1以治哨',
+'watchlistcount'       => "'''含議，有哨$1'''",
+'clearwatchlist'       => '清哨',
+'watchlistcleartext'   => '篤撤之？?',
+'watchlistclearbutton' => '清哨',
+'watchlistcleardone'   => '哨清矣。$1哨見撤。',
+'watchnologin'         => '未登簿',
+'watchnologintext'     => '[[Special:Userlogin|登簿]]以治哨。',
+'addedwatch'           => '派哨',
+'addedwatchtext'       => "加哨\"[[:\$1]]\"。後有易、議者可見於[[Special:Watchlist|哨站]]，或'''粗體'''醒於[[Special:Recentchanges|列近易]]。
+
+後如欲撤之，點側欄之\"撤哨\"即可。",
+'removedwatch'         => '撤哨',
+'removedwatchtext'     => '"[[:$1]]"哨已撤。',
+'watch'                => '哨',
+'watchthispage'        => '派哨',
+'unwatch'              => '無哨',
+'unwatchthispage'      => '撤哨',
+'notanarticle'         => '此頁非文',
+'watchnochange'        => '皆無易也',
+'watchdetails'         => '*共有$1哨，不含議論。
+* [[Special:Watchlist/edit|治哨站]]
+* [[Special:Watchlist/清哨]]',
+'wlheader-enotif'      => '*准報信。',
+'wlheader-showupdated' => "*有易者'''粗體'''。",
+'removechecked'        => '撤已揀',
+'watchlistcontains'    => '哨有$1頁',
+'watcheditlist'        => "此列有哨之文，以名序焉。如欲撤之，下有'撤已揀'，揀哨後點之即可。文撤議隨，反之亦然。",
+'removingchecked'      => '正撤哨…',
+'couldntremove'        => "'$1'哨未可撤…",
+'iteminvalidname'      => "'$1'謬名",
+'wlnote'               => '前<b>$2</b>時有$1者易',
+'wlsaved'              => '此為哨站錄本',
+'wldone'               => '已',
+
+'enotif_mailer'      => '{{SITENAME}}報',
+'enotif_reset'       => '記之通閱',
+'enotif_newpagetext' => '新頁',
+'changed'            => '易矣',
+'created'            => '撰矣',
+'enotif_subject'     => '{$PAGEEDITDATE}{{SITENAME}}有文{$PAGETITLE}為{$PAGEEDITOR}{$CHANGEDORCREATED}',
+'enotif_lastvisited' => '新易見$1',
+'enotif_body'        => '$WATCHINGUSERNAME鈞鑑，
+{$PAGEEDITDATE}{{SITENAME}}有文{$PAGETITLE}為{$PAGEEDITOR}{$CHANGEDORCREATED}，詳見{$PAGETITLE_URL}。
+
+$NEWPAGE
+
+編者略：$PAGESUMMARY $PAGEMINOREDIT
+
+聯繫之以
+電郵：$PAGEEDITOR_EMAIL
+維基：$PAGEEDITOR_WIKI
+
+後有哨報，悉照此例遣，或訪維基更之。
+
+             {{SITENAME}}敬上
+
+--
+哨報，見{{fullurl:{{ns:special}}:Watchlist/edit}}。
+饋之、助之，見{{fullurl:{{ns:help}}:Contents}}',
+
+# Delete/protect/revert
+'deletepage'                  => '刪頁',
+'confirm'                     => '准',
+'excontent'                   => "文乃：'$1'",
+'excontentauthor'             => "文乃： '$1' (and the only contributor was '$2')",
+'exblank'                     => '缺頁',
+'confirmdelete'               => '准刪',
+'deletesub'                   => '("$1"，正刪之)',
+'historywarning'              => '警：欲刪之頁有誌：',
+'confirmdeletetext'           => '子若欲久刪此物與其誌，知後果、合[[{{ns:project}}:Policy]]後再為之。',
+'actioncomplete'              => '已矣',
+'deletedtext'                 => '"$1"刪矣，見誌於$2。',
+'deletedarticle'              => '"[[$1]]"刪矣',
+'dellogpage'                  => '誌刪',
+'dellogpagetext'              => '近刪一覽.',
+'deletionlog'                 => '誌刪',
+'reverted'                    => '還',
+'deletecomment'               => '註刪',
+'imagereverted'               => '還矣',
+'editcomment'                 => '贊："<i>$1</i>"', # only shown if there is an edit comment
+'protectlogpage'              => '誌錮',
+'protectlogtext'              => '誌錮赦如下：',
+'protectedarticle'            => '"[[$1]]"有錮',
+'unprotectedarticle'          => '"[[$1]]"有赦',
+'protectsub'                  => '(正錮"$1")',
+'confirmprotecttext'          => '篤欲錮之？',
+'confirmprotect'              => '准錮',
+'protectmoveonly'             => '惟限搬之',
+'protectcomment'              => '錮之有由：',
+'unprotectsub'                => '(正赦"$1")',
+'confirmunprotecttext'        => '篤欲赦之？',
+'confirmunprotect'            => '准赦',
+'unprotectcomment'            => '赦之有由：',
+'protect-unchain'             => '准搬之',
+'protect-text'                => '錮級可見<strong>$1</strong>',
+'protect-default'             => '(予定)',
+'protect-level-autoconfirmed' => '驅無簿',
+'protect-level-sysop'         => '惟有秩',
+
+# Restrictions (nouns)
+'restriction-edit' => '纂',
+'restriction-move' => '搬',
+
+# Undelete
+'undelete'                 => '覽已刪',
+'undeletepage'             => '覽已刪並還之',
+'viewdeletedpage'          => '覽已刪',
+'undeletepagetext'         => '列已刪如下。有複存可還之，常清。',
+'undeleterevisions'        => '有審$1',
+'undeletebtn'              => '還',
+'undeletereset'            => '重置',
+'undeletecomment'          => '贊：',
+'undeletedarticle'         => '"[[$1]]"還矣',
+'undeletedrevisions'       => '$1審還矣',
+'undeletedrevisions-files' => '$1審$2檔還矣',
+'undeletedfiles'           => '$1檔還矣',
+'cannotundelete'           => '無以還檔，或早復矣。',
+'undeletedpage'            => "<big>'''$1還矣'''</big>
+見[[Special:Log/delete|刪還誌]]",
+
+# Namespace form on various pages
+'namespace' => '名集：',
+'invert'    => '逆擇',
+
+# Contributions
+'contributions' => '功績',
+'mycontris'     => '吾績',
+'contribsub2'   => '就$1',
+'nocontribs'    => '尺斯無易',
+'ucnote'        => '近<b>$2</b>有<b>$1</b>新易。',
+'uclinks'       => ' 近$1易，近$2日',
+'uctop'         => ' (頂)',
+
+'sp-contributions-newest'      => '末',
+'sp-contributions-oldest'      => '首',
+'sp-contributions-newer'       => '後$1',
+'sp-contributions-older'       => '前$1',
+'sp-contributions-newbies-sub' => '予新進',
+
+'sp-newimages-showfrom' => '賞新圖，自$1',
+
+# What links here
+'whatlinkshere' => '何通此',
+'notargettitle' => '無向',
+'linklistsub'   => '(表通)',
+'linkshere'     => "下文通'''[[:$1]]''':",
+'nolinkshere'   => "無頁通'''[[:$1]]'''.",
+'isredirect'    => '導',
+'istemplate'    => '含',
+
+# Block/unblock
+'blockip'             => '禁簿',
+'ipaddress'           => 'IP址',
+'ipadressorusername'  => 'IP或簿名',
+'ipbexpiry'           => '限期',
+'ipbreason'           => '綠',
+'ipbanononly'         => '禁名匿',
+'ipbcreateaccount'    => '禁增簿',
+'ipbsubmit'           => '禁此簿',
+'ipbother'            => '它時',
+'ipboptions'          => '2 hours:二時,1 day:一日,3 days:三日,1 week:一週,2 weeks:二週,1 month:一月,3 months:三月,6 months:六月,1 year:一年,infinite:永',
+'ipbotheroption'      => '他',
+'badipaddress'        => 'IP不格',
+'blockipsuccesssub'   => '見禁',
+'blockipsuccesstext'  => '[[{{ns:Special}}:Contributions/$1|$1]]見禁<br />見[[{{ns:Special}}:Ipblocklist|誌禁]]',
+'unblockip'           => '赦禁簿',
+'unblockiptext'       => '以下表赦禁簿、IP：',
+'ipusubmit'           => '赦此址',
+'unblocked'           => '[[User:$1|$1]]見赦。',
+'ipblocklist'         => '列禁簿、禁IP：',
+'blocklistline'       => '$1,$2禁$3($4)',
+'infiniteblock'       => '永',
+'expiringblock'       => '過$1',
+'anononlyblock'       => '惟名匿',
+'createaccountblock'  => '禁增簿',
+'ipblocklistempty'    => '誌空也。',
+'blocklink'           => '禁',
+'unblocklink'         => '赦',
+'contribslink'        => '功績',
+'autoblocker'         => '近日"[[User:$1|$1]]"用子IP"\'\'\'$2\'\'\'"，故禁',
+'blocklogpage'        => '誌禁',
+'blocklogentry'       => '禁"[[$1]]"至$2',
+'unblocklogentry'     => '赦$1',
+'ipb_expiry_invalid'  => '限期不格。',
+'ipb_already_blocked' => '"$1"早禁矣',
+'proxyblocksuccess'   => '已矣',
+
+# Developer tools
+'lockdb'              => '鎖庫藏',
+'unlockdb'            => '解庫藏',
+'lockconfirm'         => '篤欲鎖之',
+'unlockconfirm'       => '篤欲解之',
+'lockbtn'             => '鎖',
+'unlockbtn'           => '解',
+'lockdbsuccesssub'    => '庫藏鎖矣',
+'unlockdbsuccesssub'  => '庫藏解矣',
+'lockdbsuccesstext'   => '庫藏鎖矣。<br />檢修後務[[Special:Unlockdb|解之]]。',
+'unlockdbsuccesstext' => '庫藏解矣',
+'databasenotlocked'   => '庫藏未鎖',
+
+# Move page
+'movepage'         => '遷文',
+'movearticle'      => '遷此文',
+'movenologin'      => '未登簿',
+'movenologintext'  => '遷文須[[Special:Userlogin|登簿]]。',
+'newtitle'         => '至新題',
+'movepagebtn'      => '遷此頁',
+'pagemovedsub'     => '成',
+'pagemovedtext'    => '[[$1]]"遷"[[$2]]"矣。',
+'articleexists'    => '此頁復存，或名謬焉。請更之。',
+'movedto'          => '遷至',
+'movetalk'         => '並遷其議',
+'talkpagemoved'    => '議並遷矣。',
+'talkpagenotmoved' => '議<strong>未</strong>並遷。',
+'1movedto2'        => '[[$1]]遷[[$2]]矣',
+'1movedto2_redir'  => '[[$1]]遷[[$2]]矣',
+'movelogpage'      => '誌遷',
+'movelogpagetext'  => '有遷如下：',
+'movereason'       => '因',
+'revertmove'       => '還',
+'delete_and_move'  => '刪並遷',
+
+# Namespace 8 related
+'allmessages'         => '官訊',
+'allmessagesname'     => '名',
+'allmessagesdefault'  => '予定文',
+'allmessagescurrent'  => '今文',
+'allmessagesfilter'   => '濾訊名：',
+'allmessagesmodified' => '見曾易',
+
+# Thumbnails
+'thumbnail-more' => '放',
+'missingimage'   => '<b>失圖</b><br /><i>$1</i>',
+'filemissing'    => '檔已失。',
+
+# Special:Import
+'import-interwiki-submit' => '匯入',
+'importstart'             => '正匯入…',
+'import-revision-count'   => '共$1審',
+'importnopages'           => '無可匯。',
+'importfailed'            => '匯入有變：$1',
+'importsuccess'           => '匯入成矣！',
+
+# Import log
+'import-logentry-upload-detail'    => '共$1審',
+'import-logentry-interwiki-detail' => '$1審自$2',
+
+# Tooltip help for the actions
+'tooltip-search'                  => '索{{SITENAME}}',
+'tooltip-minoredit'               => '此為校文',
+'tooltip-save'                    => '儲簿註',
+'tooltip-preview'                 => '預覽，儲前務覽之',
+'tooltip-diff'                    => '覽易者',
+'tooltip-compareselectedversions' => '二揀辨異',
+'tooltip-watch'                   => '派哨',
+'tooltip-recreate'                => '重建之',
+
+# Attribution
+'anonymous'        => '{{SITENAME}}無簿',
+'siteuser'         => '{{SITENAME}}有簿$1',
+'lastmodifiedatby' => '$1$2，$3易之', # $1 date, $2 time, $3 user
+'and'              => '與',
+'othercontribs'    => '$1主撰',
+'others'           => '它',
+'siteusers'        => '{{SITENAME}}有簿$1',
+
+# Info page
+'infosubtitle'   => '頁註',
+'numedits'       => '有纂$1',
+'numtalkedits'   => '有議$1',
+'numwatchers'    => '有哨$1',
+'numauthors'     => '文有$1編者',
+'numtalkauthors' => '議有$1與會',
+
+# Patrolling
+'markaspatrolleddiff'        => '派哨',
+'markaspatrolledtext'        => '派哨',
+'markedaspatrolled'          => '派哨',
+'markedaspatrolledtext'      => '此審哨矣',
+'rcpatroldisabled'           => '不哨近易',
+'markedaspatrollederror'     => '未可哨',
+'markedaspatrollederrortext' => '揀之方可哨',
+
+# Image deletion
+'deletedrevision' => '刪舊審$1.',
+
+# Browsing diffs
+'previousdiff' => '前辨',
+'nextdiff'     => '後辨',
+
+# Media information
+'widthheight' => '長$1寬$2',
+
+'newimages'    => '新圖廊',
+'showhidebots' => '($1僕)',
+'noimages'     => '無',
+
+'passwordtooshort' => '符節過短，須逾$1字。',
+
+# Metadata
+'metadata' => '衍義',
+
+# EXIF tags
+'exif-imagewidth'  => '寬',
+'exif-imagelength' => '長',
+
+# 'all' in various places, this might be different for inflected languages
+'recentchangesall' => '全',
+'imagelistall'     => '全',
+'watchlistall1'    => '全',
+'watchlistall2'    => '全',
+'namespacesall'    => '全',
+
+# E-mail address confirmation
+'confirmemail'            => '核郵驛',
+'confirmemail_noemail'    => '[[Special:Preferences|簿註]]有驛。',
+'confirmemail_send'       => '遣核符',
+'confirmemail_sent'       => '核符遣矣',
+'confirmemail_sendfailed' => '信未遣焉，請核郵驛。',
+
+# Inputbox extension, may be useful in other contexts as well
+'tryexact'       => '查全合',
+'searchfulltext' => '尋全文',
+'createarticle'  => '撰文',
+
+# Scary transclusion
+'scarytranscludefailed'  => '[歉哉，$1模不得]',
+'scarytranscludetoolong' => '[歉哉，網址過長]',
+
+# Trackbacks
+'trackbackremove' => ' ([$1刪])',
+
+# Delete conflict
+'deletedwhileediting' => '警：纂中見刪。',
+'confirmrecreate'     => "[[User:$1|$1]]（[[User talk:$1|議]]）刪之有由：
+''$2''
+請審視之。",
+'recreate'            => '復',
+
+# HTML dump
+'redirectingto' => '轉至[[$1]]…',
+
+# action=purge
+'confirm_purge'        => '清謄本？
+
+$1',
+'confirm_purge_button' => '准',
+
+'youhavenewmessagesmulti' => '新訊於$1',
+
+'searchcontaining' => "尋文含''$1''",
+'searchnamed'      => "尋文名''$1''.",
+'articletitles'    => "文首為''$1''",
+'hideresults'      => '藏',
+
+'loginlanguagelabel' => '語：$1',
+
+# Multipage image navigation
+'imgmultipageprev' => '←前頁',
+'imgmultipagenext' => '次頁→',
+'imgmultigo'       => '往',
+'imgmultigotopre'  => '往',
+
+# Table pager
+'ascending_abbrev'         => '升冪',
+'descending_abbrev'        => '降冪',
+'table_pager_next'         => '次頁',
+'table_pager_prev'         => '前頁',
+'table_pager_first'        => '首頁',
+'table_pager_last'         => '末頁',
+'table_pager_limit'        => '頁有物$1',
+'table_pager_limit_submit' => '往',
+'table_pager_empty'        => '空',
+
+# Auto-summaries
+'autoredircomment' => '轉至[[$1]]', # This should be changed to the new naming convention, but existed beforehand
+
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesZh_cn.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesZh_cn.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesZh_cn.php	(revision 1280)
@@ -0,0 +1,2195 @@
+<?php
+/**
+  * @addtogroup Language
+  */
+
+$namespaceNames = array(
+	NS_MEDIA            => 'Media',
+	NS_SPECIAL          => 'Special',
+	NS_MAIN             => '',
+	NS_TALK             => 'Talk',
+	NS_USER             => 'User',
+	NS_USER_TALK        => 'User_talk',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK     => '$1_talk',
+	NS_IMAGE            => 'Image',
+	NS_IMAGE_TALK       => 'Image_talk',
+	NS_MEDIAWIKI        => 'MediaWiki',
+	NS_MEDIAWIKI_TALK   => 'MediaWiki_talk',
+	NS_TEMPLATE         => 'Template',
+	NS_TEMPLATE_TALK    => 'Template_talk',
+	NS_HELP             => 'Help',
+	NS_HELP_TALK        => 'Help_talk',
+	NS_CATEGORY         => 'Category',
+	NS_CATEGORY_TALK    => 'Category_talk'
+);
+
+$namespaceAliases = array(
+	'媒体'	=> NS_MEDIA,
+	'特殊'  => NS_SPECIAL,
+	'对话'  => NS_TALK,
+	'讨论'	=> NS_TALK,
+	'用户'  => NS_USER,
+	'用户对话' => NS_USER_TALK,
+	'用户讨论' => NS_USER_TALK,
+	# This has never worked so it's unlikely to annoy anyone if I disable it -- TS
+	#'{{SITENAME}}_对话' => NS_PROJECT_TALK
+	'图像' => NS_IMAGE,
+	'图像对话' => NS_IMAGE_TALK,
+	'模板'	=> NS_TEMPLATE,
+	'模板讨论'=> NS_TEMPLATE_TALK,
+	'帮助'	=> NS_HELP,
+	'帮助讨论'=> NS_HELP_TALK,
+	'分类'	=> NS_CATEGORY,
+	'分类讨论'=> NS_CATEGORY_TALK,
+);
+
+$skinNames = array(
+	'standard' => '标准',
+	'nostalgia' => '怀旧',
+	'cologneblue' => '科隆香水蓝',
+	'davinci' => '达芬奇',
+);
+
+$extraUserToggles = array(
+	'nolangconversion',
+);
+$datePreferences = array(
+	'default',
+	'ISO 8601',
+);
+$defaultDateFormat = 'zh';
+$dateFormats = array(
+	'zh time' => 'H:i',
+	'zh date' => 'Y年n月j日 (l)',
+	'zh both' => 'Y年n月j日 (D) H:i',
+);
+
+$bookstoreList = array(
+	'AddALL' => 'http://www.addall.com/New/Partner.cgi?query=$1&type=ISBN',
+	'PriceSCAN' => 'http://www.pricescan.com/books/bookDetail.asp?isbn=$1',
+	'Barnes & Noble' => 'http://search.barnesandnoble.com/bookSearch/isbnInquiry.asp?isbn=$1',
+	'亚马逊' => 'http://www.amazon.com/exec/obidos/ISBN=$1',
+	'博客来书店' => 'http://www.books.com.tw/exep/openfind_book_keyword.php?cat1=4&key1=$1',
+	'三民书店' => 'http://www.sanmin.com.tw/page-qsearch.asp?ct=search_isbn&qu=$1',
+	'天下书店' => 'http://www.cwbook.com.tw/cw/TS.jsp?schType=product.isbn&schStr=$1',
+	'新丝书店' => 'http://www.silkbook.com/function/Search_List_Book.asp?item=5&text=$1'
+);
+
+$messages = array(
+# User preference toggles
+'tog-underline'               => '链接下划线',
+'tog-highlightbroken'         => '无效链接格式<a href="" class="new">像这样</a> (或者像这个<a href="" class="internal">?</a>)',
+'tog-justify'                 => '段落对齐',
+'tog-hideminor'               => '最近更改中隐藏小修改',
+'tog-extendwatchlist'         => '增强监视列表以显示所有可用更改',
+'tog-usenewrc'                => '增强最近更改 (JavaScript)',
+'tog-numberheadings'          => '标题自动编号',
+'tog-showtoolbar'             => '显示编辑工具条 (JavaScript)',
+'tog-editondblclick'          => '双击时编辑页面 (JavaScript)',
+'tog-editsection'             => '允许通过点击[编辑]链接编辑段落',
+'tog-editsectiononrightclick' => '允许右击标题编辑段落 (JavaScript)',
+'tog-showtoc'                 => '显示目录 (针对一页超过3个标题的文章)',
+'tog-rememberpassword'        => '在这部电脑上记住我的密码',
+'tog-editwidth'               => '编辑框具有最大宽度',
+'tog-watchcreations'          => '将我创建的页面添加到我的监视列表',
+'tog-watchdefault'            => '将我编辑的页面添加到我的监视列表',
+'tog-watchmoves'              => '将我移动的页面添加到我的监视列表',
+'tog-watchdeletion'           => '将我删除的页面添加到我的监视列表',
+'tog-minordefault'            => '默认将编辑设置为小编辑',
+'tog-previewontop'            => '在编辑框上方显示预览',
+'tog-previewonfirst'          => '在首次编辑时显示预览',
+'tog-nocache'                 => '禁用页面缓存',
+'tog-enotifwatchlistpages'    => '在页面更改时发邮件通知我',
+'tog-enotifusertalkpages'     => '在我的讨论页更改时发邮件通知我',
+'tog-enotifminoredits'        => '在页面有微小编辑时也发邮件通知我',
+'tog-enotifrevealaddr'        => '在通邮件知列表中显示我的邮件地址',
+'tog-shownumberswatching'     => '显示监视此页的用户数',
+'tog-fancysig'                => '原始签名 (没有自动链接)',
+'tog-externaleditor'          => '默认使用外部编辑器',
+'tog-externaldiff'            => '默认使用外部差异分析',
+'tog-showjumplinks'           => '启用"转到"访问链接',
+'tog-uselivepreview'          => '使用实时预览 (Javascript) (试验中)',
+'tog-forceeditsummary'        => '当没有输入摘要时提醒我',
+'tog-watchlisthideown'        => '在监视列表中隐藏我的编辑',
+'tog-watchlisthidebots'       => '在监视列表中隐藏机器人的编辑',
+'tog-watchlisthideminor'      => '在监视列表中隐藏微小更改',
+'tog-nolangconversion'        => '不进行用字转换',
+'tog-ccmeonemails'            => '把我发送给其他用户的邮件同时发送副本给我自己',
+'tog-diffonly'                => '在比较两个修订版本差异时不显示文章内容',
+
+'underline-always'  => '总是使用',
+'underline-never'   => '从不使用',
+'underline-default' => '浏览器默认',
+
+'skinpreview' => '(预览)',
+
+# Dates
+'sunday'        => '星期日',
+'monday'        => '星期一',
+'tuesday'       => '星期二',
+'wednesday'     => '星期三',
+'thursday'      => '星期四',
+'friday'        => '星期五',
+'saturday'      => '星期六',
+'sun'           => '日',
+'mon'           => '一',
+'tue'           => '二',
+'wed'           => '三',
+'thu'           => '四',
+'fri'           => '五',
+'sat'           => '六',
+'january'       => '1月',
+'february'      => '2月',
+'march'         => '3月',
+'april'         => '4月',
+'may_long'      => '5月',
+'june'          => '6月',
+'july'          => '7月',
+'august'        => '8月',
+'september'     => '9月',
+'october'       => '10月',
+'november'      => '11月',
+'december'      => '12月',
+'january-gen'   => '一月',
+'february-gen'  => '二月',
+'march-gen'     => '三月',
+'april-gen'     => '四月',
+'may-gen'       => '五月',
+'june-gen'      => '六月',
+'july-gen'      => '七月',
+'august-gen'    => '八月',
+'september-gen' => '九月',
+'october-gen'   => '十月',
+'november-gen'  => '十一月',
+'december-gen'  => '十二月',
+'jan'           => '1月',
+'feb'           => '2月',
+'mar'           => '3月',
+'apr'           => '4月',
+'may'           => '5月',
+'jun'           => '6月',
+'jul'           => '7月',
+'aug'           => '8月',
+'sep'           => '9月',
+'oct'           => '10月',
+'nov'           => '11月',
+'dec'           => '12月',
+
+# Bits of text used by many pages
+'categories'            => '页面分类',
+'pagecategories'        => '$1个分类',
+'category_header'       => '"$1"分类中的文章',
+'subcategories'         => '亚类',
+'category-media-header' => '"$1"分类中的媒体',
+
+'linkprefix'        => '/^(.*?)([a-zA-Z\x80-\xff]+)$/sD',
+'mainpagetext'      => "<big>'''已成功安装 MediaWiki!'''</big>",
+'mainpagedocfooter' => '请访问 [http://meta.wikimedia.org/wiki/Help:Contents 用户手册] 以获得使用此 wiki 软件的信息！
+
+== 入门 ==
+
+* [http://www.mediawiki.org/wiki/Help:Configuration_settings MediaWiki 配置设置列表]
+* [http://www.mediawiki.org/wiki/Help:FAQ MediaWiki 常见问题解答]
+* [http://mail.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki 发布邮件列表]',
+
+'about'          => '关于',
+'article'        => '文章',
+'newwindow'      => '(在新窗口中打开)',
+'cancel'         => '取消',
+'qbfind'         => '查找',
+'qbbrowse'       => '浏览',
+'qbedit'         => '编辑',
+'qbpageoptions'  => '页面选项',
+'qbpageinfo'     => '页面信息',
+'qbmyoptions'    => '我的选项',
+'qbspecialpages' => '特殊页面',
+'moredotdotdot'  => '更多...',
+'mypage'         => '我的页面',
+'mytalk'         => '我的对话页',
+'anontalk'       => '该IP的对话页',
+'navigation'     => '导航',
+
+# Metadata in edit box
+'metadata_help' => '元数据:',
+
+'errorpagetitle'    => '错误',
+'returnto'          => '返回到$1。',
+'tagline'           => '出自{{SITENAME}}',
+'help'              => '帮助',
+'search'            => '搜索',
+'searchbutton'      => '搜索',
+'go'                => '进入',
+'searcharticle'     => '进入',
+'history'           => '页面历史',
+'history_short'     => '历史',
+'updatedmarker'     => '我上次访问以来的修改',
+'info_short'        => '资讯',
+'printableversion'  => '可打印版',
+'permalink'         => '永久链接',
+'print'             => '打印',
+'edit'              => '编辑',
+'editthispage'      => '编辑此页',
+'delete'            => '删除',
+'deletethispage'    => '删除此页',
+'undelete_short'    => '反删除$1项修订',
+'protect'           => '保护',
+'protect_change'    => '更改保护',
+'protectthispage'   => '保护此页',
+'unprotect'         => '解除保护',
+'unprotectthispage' => '解除此页保护',
+'newpage'           => '新建页面',
+'talkpage'          => '讨论此页',
+'talkpagelinktext'  => '对话',
+'specialpage'       => '特殊页面',
+'personaltools'     => '个人工具',
+'postcomment'       => '发表评论',
+'articlepage'       => '查看文章',
+'talk'              => '讨论',
+'views'             => '查看',
+'toolbox'           => '工具箱',
+'userpage'          => '查看用户页面',
+'projectpage'       => '查看计划页面',
+'imagepage'         => '查看图像页面',
+'mediawikipage'     => '查看信息页面',
+'templatepage'      => '查看模板页面',
+'viewhelppage'      => '查看帮助页面',
+'categorypage'      => '查看分类页面',
+'viewtalkpage'      => '查看讨论页面',
+'otherlanguages'    => '其它语言',
+'redirectedfrom'    => '(重定向自$1)',
+'redirectpagesub'   => '重定向页面',
+'lastmodifiedat'    => '这页的最后修订在 $1 $2。', # $1 date, $2 time
+'viewcount'         => '本页面已经被浏览$1次。',
+'protectedpage'     => '被保护页',
+'jumpto'            => '跳转到:',
+'jumptonavigation'  => '导航',
+'jumptosearch'      => '搜索',
+
+# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
+'aboutsite'         => '关于{{SITENAME}}',
+'aboutpage'         => '{{ns:project}}:关于',
+'bugreports'        => '错误报告',
+'bugreportspage'    => '{{ns:project}}:错误报告',
+'copyright'         => '本站的全部文本内容在$1之条款下提供。',
+'copyrightpagename' => '{{SITENAME}}版权',
+'copyrightpage'     => '{{ns:project}}:版权信息',
+'currentevents'     => '当前事件',
+'currentevents-url' => '当前事件',
+'disclaimers'       => '免责声明',
+'disclaimerpage'    => '{{ns:project}}:免责声明',
+'edithelp'          => '编辑帮助',
+'edithelppage'      => '{{ns:project}}:如何编辑页面',
+'faq'               => '常见问题解答',
+'faqpage'           => '{{ns:project}}:常见问题解答',
+'helppage'          => '{{ns:project}}:帮助',
+'mainpage'          => '首页',
+'policy-url'        => 'Project:方针',
+'portal'            => '社区',
+'portal-url'        => '{{ns:project}}:社区',
+'privacy'           => '隐私政策',
+'privacypage'       => '{{ns:project}}:隐私政策',
+'sitesupport'       => '资助',
+'sitesupport-url'   => '{{ns:project}}:资助',
+
+'badaccess'        => '权限错误',
+'badaccess-group0' => '您刚才的请求不允许执行。',
+'badaccess-group1' => '您刚才的请求只有$1用户组的用户才能使用。',
+'badaccess-group2' => '您刚才的请求只有$1用户组的用户才能使用。',
+'badaccess-groups' => '您刚才的请求只有$1用户组的用户才能使用。',
+
+'versionrequired'     => '需要MediaWiki $1 版',
+'versionrequiredtext' => '需要版本$1的 MediaWiki 才能使用此页。参见[[Special:Version|版本頁]]。',
+
+'ok'                  => '确定',
+'pagetitle'           => '$1 - {{SITENAME}}',
+'retrievedfrom'       => '取自"$1"',
+'youhavenewmessages'  => '您有$1（$2）。',
+'newmessageslink'     => '新信息',
+'newmessagesdifflink' => '上次更改',
+'editsection'         => '编辑',
+'editold'             => '编辑',
+'editsectionhint'     => '编辑段落: $1',
+'toc'                 => '目录',
+'showtoc'             => '显示',
+'hidetoc'             => '隐藏',
+'thisisdeleted'       => '查看或恢复$1?',
+'viewdeleted'         => '查看$1?',
+'restorelink'         => '$1个被删除的版本',
+'feedlinks'           => '订阅:',
+'feed-invalid'        => '无效的订阅类型。',
+
+# Short words for each namespace, by default used in the 'article' tab in monobook
+'nstab-main'      => '文章',
+'nstab-user'      => '用户页面',
+'nstab-media'     => '媒体页面',
+'nstab-special'   => '特殊页面',
+'nstab-project'   => '计划页面',
+'nstab-image'     => '文件',
+'nstab-mediawiki' => '信息',
+'nstab-template'  => '模板',
+'nstab-help'      => '帮助页面',
+'nstab-category'  => '分类',
+
+# Main script and global functions
+'nosuchaction'      => '没有这个命令',
+'nosuchactiontext'  => 'URL 请求的命令无法被这个wiki识别',
+'nosuchspecialpage' => '没有此特殊页面',
+'nospecialpagetext' => '您请求的特殊页面是无效的, 在[[Special:Specialpages]]可得到所有有效的特殊页面的列表。',
+
+# General errors
+'error'                => '错误',
+'databaseerror'        => '数据库错误',
+'dberrortext'          => '发生数据库查询语法错误。
+可能是由于软件自身的错误所引起。
+最后一次数据库查询指令是:
+<blockquote><tt>$1</tt></blockquote>
+来自于函数 "<tt>$2</tt>"。
+MySQL返回错误 "<tt>$3: $4</tt>"。',
+'dberrortextcl'        => '发生了一个数据库查询语法错误。
+最后一次的数据库查询是:
+“$1”
+来自于函数“$2”。
+MySQL返回错误“$3: $4”。',
+'noconnect'            => '抱歉！网站遇到一些技术问题，无法连接数据库服务器。<br />$1',
+'nodb'                 => '无法选择数据库$1',
+'cachederror'          => '下面的页面是被请求页面在缓存中的一个副本，可能不是最新版本的。',
+'laggedslavemode'      => '警告: 页面可能不包含最近的更新。',
+'readonly'             => '数据库被锁定',
+'enterlockreason'      => '请输入锁定的原因，包括预计重新开放的时间',
+'readonlytext'         => '数据库目前禁止输入新内容及更改，
+这很可能是由于数据库正在维修，完成后即可恢复。
+
+管理员有如下解释: $1',
+'missingarticle'       => '数据库找不到页面文子"$1"。
+
+通常这是由于修订历史页上过时的链接到已经被删除的页面所导致的。
+
+如果情况不是这样，您可能找到了软件内的一个错误。
+请记录下 URL 地址，并向管理员报告。',
+'readonly_lag'         => '附属数据库服务器正在将缓存更新到主服务器，数据库已被自动锁定',
+'internalerror'        => '内部错误',
+'filecopyerror'        => '无法复制文件"$1"到"$2"。',
+'filerenameerror'      => '无法重命名文件"$1" 到"$2"。',
+'filedeleteerror'      => '无法删除文件 "$1"。',
+'filenotfound'         => '找不到文件 "$1"。',
+'unexpected'           => '非正常值: "$1"="$2"。',
+'formerror'            => '错误: 无法提交表单',
+'badarticleerror'      => '无法在此页进行此项操作。',
+'cannotdelete'         => '无法删除选定的页面或图像（它可能已经被其他人删除了）。',
+'badtitle'             => '错误的标题',
+'badtitletext'         => '所请求页面的标题是无效的、不存在，跨语言或跨wiki链接的标题错误。它可能包含一个或更多的不能用于标题的字符。',
+'perfdisabled'         => '抱歉！由于此项操作有可能造成数据库瘫痪，目前暂时无法使用。',
+'perfdisabledsub'      => '这里是自$1的复制版本：', # obsolete?
+'perfcached'           => '下列是缓存数据，因此可能不是最新的:',
+'perfcachedts'         => '下列是缓存数据，其最后更新时间是$1。',
+'querypage-no-updates' => '当前禁止对此页面进行更新。此处的数据将不能被立即刷新。',
+'wrong_wfQuery_params' => '错误参数被传递到 wfQuery()<br />
+函数: $1<br />
+查询: $2',
+'viewsource'           => '源码',
+'viewsourcefor'        => '对$1的源码',
+'protectedpagetext'    => '该页面已被锁定以防止编辑。',
+'viewsourcetext'       => '您可以查看并复制此页面的源码:',
+'protectedinterface'   => '该页提供了软件的界面文本，它已被锁定以防止随意的修改。',
+'editinginterface'     => "'''警告:''' 您正在编辑的页面是用于提供软件的界面文本。改变此页将影响其他用户的界面外观。",
+'sqlhidden'            => '(SQL查询已隐藏)',
+'cascadeprotected'     => '这个页面已经被保护，因为这个页面被以下已标注"联锁保护"的{{PLURAL:$1|一个|多个}}被保护页面包含:',
+
+# Login and logout pages
+'logouttitle'                => '退出',
+'logouttext'                 => '<strong>您现在已经退出。</strong><br />
+您可以继续以匿名方式使用{{SITENAME}}，或再次以相同或不同用户身份登录。
+请注意一些页面可能仍然显示您为登录状态，直到您清空您的浏览器缓存为止。',
+'welcomecreation'            => '== 欢迎, $1! == 
+
+ 您的账户已经建立，不要忘记设置{{SITENAME}}的个人参数。',
+'loginpagetitle'             => '用户登录',
+'yourname'                   => '用户名',
+'yourpassword'               => '密码',
+'yourpasswordagain'          => '再次输入密码',
+'remembermypassword'         => '下次登录记住密码',
+'yourdomainname'             => '您的域名',
+'externaldberror'            => '这可能是由于外部验证数据库错误或您被禁止更新您的外部账号。',
+'loginproblem'               => '<b>登录有问题。</b><br />请再试一次！',
+'alreadyloggedin'            => '<strong>用户$1，您已经登录了!</strong><br />',
+'login'                      => '登录',
+'loginprompt'                => '您必须启用 Cookies 才能登录{{SITENAME}}。',
+'userlogin'                  => '登录／创建账户',
+'logout'                     => '退出',
+'userlogout'                 => '退出',
+'notloggedin'                => '未登录',
+'nologin'                    => '您还没有账户吗？$1。',
+'nologinlink'                => '创建新账户',
+'createaccount'              => '创建新账户',
+'gotaccount'                 => '已经拥有账户？$1。',
+'gotaccountlink'             => '登录',
+'createaccountmail'          => '通过电子邮件',
+'badretype'                  => '你所输入的密码并不相同。',
+'userexists'                 => '您所输入的用户名已有人使用。请另选一个。',
+'youremail'                  => '电子邮件 *:',
+'username'                   => '用户名:',
+'uid'                        => '用户ID:',
+'yourrealname'               => '真实姓名 *:',
+'yourlanguage'               => '界面语言:',
+'yourvariant'                => '字体变换:',
+'yournick'                   => '昵称:',
+'badsig'                     => '错误的原始签名；请检查HTML标签。',
+'email'                      => '电子邮箱',
+'prefs-help-email-enotif'    => '启用此选项时你的电子邮箱地址也将被用于发送邮件通知。',
+'prefs-help-realname'        => '* 真实姓名 (可选): 用以对您的贡献署名。',
+'loginerror'                 => '登录错误',
+'prefs-help-email'           => '* 电子邮件 (可选): 使得其他人可以在您没有公开自己的用户身份时通过您的用户页或用户讨论页与您联系。',
+'nocookiesnew'               => '已成功创建新账户！侦测到您已关闭 Cookies，请开启它并登录。',
+'nocookieslogin'             => '本站利用 Cookies 进行用户登录，侦测到您已关闭 Cookies，请开启它并重新登录。',
+'noname'                     => '你没有输入一个有效的用户名。',
+'loginsuccesstitle'          => '登录成功',
+'loginsuccess'               => '你现在以"$1"的身份登录{{SITENAME}}。',
+'nosuchuser'                 => '找不到用户"$1"。检查您的拼写，或者建立一个新账户。',
+'nosuchusershort'            => '没有一个名为“$1”的用户。请检查您输入的文字是否有错误。',
+'nouserspecified'            => '你需要指定一个用户名。',
+'wrongpassword'              => '您输入的密码错误，请再试一次。',
+'wrongpasswordempty'         => '您没有输入密码，请重试！',
+'mailmypassword'             => '将新密码寄给我',
+'passwordremindertitle'      => '{{SITENAME}}密码提醒',
+'passwordremindertext'       => '有人(可能是您，来自IP地址$1)要求我们将新的{{SITENAME}} ($4) 的登录密码寄给您。用户"$2"的密码现在是"$3"。请立即登录并更改密码。如果是其他人发出了该请求，或者您已经记起了您的密码并不准备改变它，您可以忽略此消息并继续使用您的旧密码。',
+'noemail'                    => '用户"$1"没有登记电子邮件地址。',
+'passwordsent'               => '用户"$1"的新密码已经寄往所登记的电子邮件地址。
+请在收到后再登录。',
+'blocked-mailpassword'       => '您的IP地址处于查封状态而不允许编辑，为了安全起见，密码恢复功能已被禁用。',
+'eauthentsent'               => '一封确认信已经发送到推荐的地址。在发送其它邮件到此账户前，您必须首先依照这封信中的指导确认这个电子邮箱真实有效。',
+'throttled-mailpassword'     => '密码提醒已在最近$1小时内发送。为了安全起见，在每$1小时内只能发送一个密码提醒。',
+'mailerror'                  => '发送邮件错误: $1',
+'acct_creation_throttle_hit' => '对不起，您已经创建了$1个账号。你不能再创建了。',
+'emailauthenticated'         => '您的电子邮箱地址已经于$1确认有效。',
+'emailnotauthenticated'      => '您的邮箱地址<strong>还没被认证</strong>。以下功能将不会发送任何邮件。',
+'noemailprefs'               => '<strong>指定一个电子邮箱地址以使用此功能</strong>',
+'emailconfirmlink'           => '确认您的邮箱地址',
+'invalidemailaddress'        => '邮箱地址格式不正确，请输入正确的邮箱地址或清空该输入框。',
+'accountcreated'             => '已建立账户',
+'accountcreatedtext'         => '$1的账户已经被创建。',
+
+# Password reset dialog
+'resetpass'               => '重设账户密码',
+'resetpass_announce'      => '您是通过一个临时的发送到邮件中的代码登录的。要完成登录，您必须在这里设定一个新密码:',
+'resetpass_text'          => '<!-- 在此处添加文本 -->',
+'resetpass_header'        => '重设密码',
+'resetpass_submit'        => '设定密码并登录',
+'resetpass_success'       => '您的密码已经被成功更改！现在正为您登录...',
+'resetpass_bad_temporary' => '无效的临时密码。您可能已成功地更改了您的密码，或者需要请求一个新的临时密码。',
+'resetpass_forbidden'     => '无法在此 wiki 上更改密码',
+'resetpass_missing'       => '无表单数据。',
+
+# Edit page toolbar
+'bold_sample'     => '粗体文字',
+'bold_tip'        => '粗体文字',
+'italic_sample'   => '斜体文字',
+'italic_tip'      => '斜体文字',
+'link_sample'     => '链接标题',
+'link_tip'        => '内部链接',
+'extlink_sample'  => 'http://www.example.com 链接标题',
+'extlink_tip'     => '外部链接(加前缀 http://)',
+'headline_sample' => '大标题文字',
+'headline_tip'    => '2级标题文字',
+'math_sample'     => '在此插入数学公式',
+'math_tip'        => '插入数学公式 (LaTeX)',
+'nowiki_sample'   => '在此插入非格式文本',
+'nowiki_tip'      => '插入非格式文本',
+'image_sample'    => 'Example.jpg',
+'image_tip'       => '嵌入图像',
+'media_sample'    => 'Example.ogg',
+'media_tip'       => '媒体文件链接',
+'sig_tip'         => '带有时间的签名',
+'hr_tip'          => '水平线 (小心使用)',
+
+# Edit pages
+'summary'                   => '摘要',
+'subject'                   => '标题',
+'minoredit'                 => '这是一个小修改',
+'watchthis'                 => '监视本页',
+'savearticle'               => '保存本页',
+'preview'                   => '预览',
+'showpreview'               => '显示预览',
+'showlivepreview'           => '实时预览',
+'showdiff'                  => '显示差异',
+'anoneditwarning'           => "'''警告:'''您没有登录，您的IP地址将记录在此页的编辑历史中。",
+'missingsummary'            => "'''提示:''' 您没有提供一个编辑摘要。如果您再次单击保存，您的编辑将不带编辑摘要保存。",
+'missingcommenttext'        => '请在下面输入评论。',
+'missingcommentheader'      => "'''提示:''' 您没有为此评论提供一个标题。如果您再次单击保存，您的编辑将不带标题保存。",
+'summary-preview'           => '摘要预览',
+'subject-preview'           => '标题预览',
+'blockedtitle'              => '用户被查封',
+'blockedtext'               => "<big>你的用户名或IP地址已经被$1查封。</big>
+
+这次查封是由$1所封的。当中的原因是''$2''。
+
+你可以联络$1或者其他的[[{{MediaWiki:grouppage-sysop}}|管理员]]，讨论这次查封。
+
+除非你已经在你的[[Special:Preferences|帐号参数设置]]中设置了一个有效的电子邮件地址，
+否则你是不能使用「电邮这位用户」的功能。你的IP地址是$3，而该查封ID是 #$5。 请你在所有查询中注明这地址及／或查封ID。",
+'blockedoriginalsource'     => "以下是'''$1'''的源码:",
+'blockededitsource'         => "你对'''$1'''进行'''编辑'''的文字如下:",
+'whitelistedittitle'        => '登录后才可编辑',
+'whitelistedittext'         => '您必须先$1才可编辑页面。',
+'whitelistreadtitle'        => '登录后才可阅读',
+'whitelistreadtext'         => '您必须先[[Special:Userlogin|登录]]才可阅读页面。',
+'whitelistacctitle'         => '您被禁止建立账户',
+'whitelistacctext'          => '在本Wiki中建立账户您必须先[[Special:Userlogin|登录]]并拥有相关权限。',
+'confirmedittitle'          => '邮件确认后才可编辑',
+'confirmedittext'           => '在编辑此页之前您必须确认您的邮箱地址。请通过[[Special:Preferences|参数设置]]设置并验证您的邮箱地址。',
+'nosuchsectiontitle'        => '没有这个段落',
+'nosuchsectiontext'         => '您尝试编辑的段落并不存在。在这里是无第$1个段落，所以是没有一个地方去存贮你的编辑。',
+'loginreqtitle'             => '需要登录',
+'loginreqlink'              => '登录',
+'loginreqpagetext'          => '您必须$1才能查看其它页面。',
+'accmailtitle'              => '密码已寄出',
+'accmailtext'               => "'$1'的密码已经被发送到$2。",
+'newarticle'                => '(新)',
+'newarticletext'            => '您进入了一个尚未创建的页面。
+要创建该页面，请在下面的编辑框中输入内容(详情参见[[Help:帮助|帮助]])。
+如果您是不小心来到此页面，直接点击您浏览器中的"返回"按钮返回。',
+'anontalkpagetext'          => "---- ''这是一个还未建立账户的匿名用户的讨论页, 因此我们只能用IP地址来与他或她联络。该IP地址可能由几名用户共享。如果您是一名匿名用户并认为此页上的评语与您无关，请[[Special:Userlogin|创建新账户或登录]]以避免在未来与其他匿名用户混淆。''",
+'noarticletext'             => '此页目前没有内容，您可以在其它页[[Special:Search/{{PAGENAME}}|搜索此页标题]]或[{{fullurl:{{NAMESPACE}}:{{PAGENAME}}|action=edit}} 编辑此页]。',
+'clearyourcache'            => "'''注意:''' 在保存以后, 您必须清除浏览器的缓存才能看到所作出的改变。 '''Mozilla / Firefox / Safari:''' 按着 ''Shift'' 再点击''刷新''(或按下''Ctrl-Shift-R''，在苹果Mac上按下''Cmd-Shift-R'')；'''IE:''' 按着 ''Ctrl'' 再点击 ''刷新''，或按下 ''Ctrl-F5''；'''Konqueror:''' 只需点击 ''刷新''；'''Opera:''' 用户需要在 ''工具-设置'' 中完整地清除它们的缓存。",
+'usercssjsyoucanpreview'    => "<strong>提示:</strong> 在保存前请用'显示预  '按钮来测试您新的 CSS/JS 。",
+'usercsspreview'            => "'''注意您只是在预览您的个人 CSS, 还没有保存！'''",
+'userjspreview'             => "'''注意您只是在测试／预览您的个人 JavaScript，还没有保存！'''",
+'userinvalidcssjstitle'     => "'''警告:''' 不存在皮肤\"\$1\"。注意自定义的 .css 和 .js 页要使用小写标题，例如，{{ns:user}}:Foo/monobook.css 不同于 {{ns:user}}:Foo/Monobook.css。",
+'updated'                   => '(已更新)',
+'note'                      => '<strong>注意:</strong>',
+'previewnote'               => '请记住这只是预览，内容还未保存！',
+'previewconflict'           => '这个预览显示了上面文字编辑区中的内容。它将在你选择保存后出现。',
+'session_fail_preview'      => '<strong>抱歉! 我们不能处理你在进程数据丢失时的编辑。请重试！如果再次失败，请登出后重新登陆。</strong>',
+'session_fail_preview_html' => "<strong>抱歉! 我们不能处理你在进程数据丢失时的编辑。</strong>
+
+''由于此 wiki 允许使用原始的 HTML，为了防范 JavaScript 攻击，预览已被隐藏。''
+
+<strong>如果这是一次合法的编辑，请重新进行尝试。如果还不行，请退出并重新登录。</strong>",
+'importing'                 => '正在导入$1',
+'editing'                   => '正在编辑$1',
+'editinguser'               => '正在编辑用户<b>$1</b>',
+'editingsection'            => '正在编辑$1 (段落)',
+'editingcomment'            => '正在编辑$1 (评论)',
+'editconflict'              => '编辑冲突: $1',
+'explainconflict'           => '有人在你开始编辑后更改了页面。
+上面的文字框内显示的是目前本页的内容。
+你所做的修改显示在下面的文字框中。
+你应当将你所做的修改加入现有的内容中。
+<b>只有</b>在上面文字框中的内容会在你点击"保存页面"后被保存。<br />',
+'yourtext'                  => '您的文字',
+'storedversion'             => '已保存版本',
+'nonunicodebrowser'         => '<strong>警告: 您的浏览器不兼容Unicode编码。这里有一个工作区将使您能安全地编辑文章: 非ASCII字符将以十六进制编码方式出现在编辑框中。</strong>',
+'editingold'                => '<strong>警告：你正在编辑的是本页的旧版本。
+如果你保存它的话，在本版本之后的任何修改都会丢失。</strong>',
+'yourdiff'                  => '差异',
+'copyrightwarning'          => '请注意您对{{SITENAME}}的所有贡献都被认为是在$2下发布，请查看在$1的细节。
+如果您不希望您的文字被任意修改和再散布，请不要提交。<br />
+您同时也要向我们保证您所提交的内容是您自己所作，或得自一个不受版权保护或相似自由的来源。
+<strong>不要在未获授权的情况下发表！</strong><br />',
+'copyrightwarning2'         => '请注意您对{{SITENAME}}的所有贡献
+都可能被其他贡献者编辑，修改或删除。
+如果您不希望您的文字被任意修改和再散布，请不要提交。<br />
+您同时也要向我们保证您所提交的内容是您自己所作，或得自一个不受版权保护或相似自由的来源（参阅$1的细节）。
+<strong>不要在未获授权的情况下发表！</strong>',
+'longpagewarning'           => '<strong>警告: 该页面的长度是$1KB；一些浏览器在编辑长度接近或大于32KB的页面可能存在问题。
+您应该考虑将此页面分成更小的章节。</strong>',
+'longpageerror'             => '<strong>错误: 您所提交的文本长度有$1KB，这大于$2KB的最大值。该文本不能被保存。</strong>',
+'readonlywarning'           => '<strong>警告: 数据库被锁以进行维护，所以您目前将无法保存您的修改。您或许希望先将本断文字复制并保存到文本文件，然后等一会儿再修改。</strong>',
+'protectedpagewarning'      => '<strong>警告: 此页已经被保护，只有拥有管理员权限的用户才可修改。</strong>',
+'semiprotectedpagewarning'  => "'''注意：''' 本页面被锁定，仅限注册用户编辑。",
+'cascadeprotectedwarning'   => '警告: 本页已经被保护，只有拥有管理员权限的用户才可修改，因为本页已被以下连锁保护的{{PLURAL:$1|一个|多个}}页面所包含:',
+'templatesused'             => '在这个页面上使用的模板有:',
+'templatesusedpreview'      => '此次预览中使用的模板有:',
+'templatesusedsection'      => '在这个段落上使用的模板有:',
+'template-protected'        => '(保护)',
+'template-semiprotected'    => '(半保护)',
+'edittools'                 => '<!-- 此处的文本将被显示在以下编辑和上传表单中。 -->',
+'nocreatetitle'             => '创建页面受限',
+'nocreatetext'              => '此网站限制了创建新页面的功能。你可以返回并编辑已有的页面，或者[[Special:Userlogin|登录或创建新账户]]。',
+
+# "Undo" feature
+'undo-success' => '此编辑可以被撤销。请检查以下对比以核实这正是您想做的，然后保存以下更改以完成撤销编辑。',
+'undo-failure' => '由于中途不一致的编辑，此编辑不能撤销。',
+'undo-summary' => '取消由[[Special:Contributions/$2|$2]] ([[User talk:$2|对话]])所作出的修订 $1',
+
+# Account creation failure
+'cantcreateaccounttitle' => '无法创建账户',
+'cantcreateaccounttext'  => '已经禁止从 IP 地址 (<b>$1</b>) 创建账户。 
+这可能是由于经常有来自您的学校和因特网服务提供商的故意破坏造成的。',
+
+# History pages
+'revhistory'          => '修订历史',
+'viewpagelogs'        => '查看此页面的日志',
+'nohistory'           => '此页没有修订记录。',
+'revnotfound'         => '没有找到修订记录',
+'revnotfoundtext'     => '您请求的更早版本的修订记录没有找到。
+请检查您请求本页面用的 URL 是否正确。',
+'loadhist'            => '载入页面修订历史',
+'currentrev'          => '当前修订版本',
+'revisionasof'        => '在$1所做的修订版本',
+'revision-info'       => '在$1由$2所做的修订版本',
+'previousrevision'    => '←上一修订',
+'nextrevision'        => '下一修订→',
+'currentrevisionlink' => '当前修订',
+'cur'                 => '当前',
+'next'                => '后继',
+'last'                => '先前',
+'orig'                => '初始',
+'page_first'          => '最前',
+'page_last'           => '最后',
+'histlegend'          => '差异选择: 标记要比较版本的单选按钮并点击底部的按钮进行比较。<br />
+说明: (当前) 指与当前版本比较，(先前) 指与前一个修订版本比较，小 = 小修改。',
+'deletedrev'          => '[已删除]',
+'histfirst'           => '最早版本',
+'histlast'            => '最新版本',
+'historysize'         => '($1 字节)',
+'historyempty'        => '(空)',
+
+# Revision feed
+'history-feed-title'          => '修订历史',
+'history-feed-description'    => '本站上此页的修订历史',
+'history-feed-item-nocomment' => '$1在$2', # user at time
+'history-feed-empty'          => '所请求的页面不存在。它可能已被删除或重命名。
+尝试[[Special:Search|搜索本站]]获得相关的新建页面。',
+
+# Revision deletion
+'rev-deleted-comment'         => '(注释已移除)',
+'rev-deleted-user'            => '(用户名已移除)',
+'rev-deleted-event'           => '(项目已移除)',
+'rev-deleted-text-permission' => '<div class="mw-warning plainlinks">该页面修订已经被从公共文档中移除。
+在[{{fullurl:Special:Log/delete|page={{PAGENAMEE}}}} 删除日志]中您可能会查看到详细的信息。</div>',
+'rev-deleted-text-view'       => "<div class='mw-warning plainlinks'>
+该页面修订已经被从公共文档中移除。作为此站点的管理员，您可以查看它；
+在[{{fullurl:Special:Log/delete|page={{PAGENAMEE}}}} 删除日志]中您可能会查看到详细的信息。
+</div>",
+'rev-delundel'                => '显示/隐藏',
+'revisiondelete'              => '删除/恢复删除修订',
+'revdelete-nooldid-title'     => '没有目标修订',
+'revdelete-nooldid-text'      => '您没有指定此操作的目标修订。',
+'revdelete-selected'          => "选取'''$1'''的$2次修订:",
+'logdelete-selected'          => "选取'''$1'''的$2个日志项目:",
+'revdelete-text'              => '删除的修订仍将显示在页面历史中, 但它们的文本内容已不能被公众访问。
+
+在此站点的其他管理员将仍能访问隐藏的内容并通过与此相同的界面恢复删除，除非站点工作者进行了一些附加的限制。',
+'revdelete-legend'            => '设置修订限制:',
+'revdelete-hide-text'         => '隐藏修订文本',
+'revdelete-hide-name'         => '隐藏动作和目标',
+'revdelete-hide-comment'      => '隐藏编辑说明',
+'revdelete-hide-user'         => '隐藏编辑者的用户名/IP',
+'revdelete-hide-restricted'   => '將此限制同樣應用於管理員',
+'revdelete-suppress'          => '同时压制由操作员以及其他用户的资料',
+'revdelete-hide-image'        => '隐藏文件内容',
+'revdelete-unsuppress'        => '在已恢复的修订中移除限制',
+'revdelete-log'               => '日志注释:',
+'revdelete-submit'            => '应用于选中的修订',
+'revdelete-logentry'          => '[[$1]]的修订可见性已更改',
+'logdelete-logentry'          => '[[$1]]的事件可见性已更改',
+'revdelete-logaction'         => '$1次修订己经设置至方式$2',
+'logdelete-logaction'         => '对于[[$3]]的$1个事件己经设置至方式$2',
+'revdelete-success'           => '修订的可见性已经成功设置。',
+'logdelete-success'           => '事件的可见性已经成功设置。',
+
+# Oversight log
+'oversightlog'    => '监督记录',
+'overlogpagetext' => '下面是一个最近删除以及由操作员封锁牵涉到的内容列表。参看下面的[[Special:Ipblocklist|IP封锁列表]]去查看现时进行的封锁。',
+
+# Diffs
+'difference'                => '(修订版本间差异)',
+'loadingrev'                => '载入修订版本比较',
+'lineno'                    => '第$1行:',
+'editcurrent'               => '编辑此页的当前修订版本',
+'selectnewerversionfordiff' => '选择更新的版本作比较',
+'selectolderversionfordiff' => '选择更老的版本作比较',
+'compareselectedversions'   => '比较选定的版本',
+'editundo'                  => '撤销',
+'diff-multi'                => '($1个中途的修订版本没有显示。)',
+
+# Search results
+'searchresults'         => '搜索结果',
+'searchresulttext'      => '有关搜索{{SITENAME}}的更多详情,参见[[{{MediaWiki:helppage}}|{{int:help}}]]。',
+'searchsubtitle'        => "搜索'''[[:$1]]'''",
+'searchsubtitleinvalid' => "搜索'''$1'''",
+'badquery'              => '搜索查询不正确',
+'badquerytext'          => '我们无法处理您的查询。
+这可能是由于您试图搜索一个短于3个字母的单词，
+或者您错误地输入了搜索项，例如"煤和和瓦斯"。
+请再尝试一个新的搜索项。',
+'matchtotals'           => '搜索项"$1"与$2条文章的题目相符，和$3条文章相符。',
+'noexactmatch'          => "'''没找到标题为\"\$1\"的页面。''' 您可以[[:\$1|创建此页面]]。",
+'titlematches'          => '文章题目相符',
+'notitlematches'        => '没有找到匹配文章题目',
+'textmatches'           => '文章内容相符',
+'notextmatches'         => '没有文章内容匹配',
+'prevn'                 => '前$1个',
+'nextn'                 => '后$1个',
+'viewprevnext'          => '查看 ($1) ($2) ($3)。',
+'showingresults'        => '下面显示从第<b>$2</b>条开始的<b>$1</b>条结果:',
+'showingresultsnum'     => '下面显示从第<b>$2</b>条开始的<b>$3</b>条结果:',
+'nonefound'             => '<strong>注意：</strong>失败的搜索往往是由于试图搜索诸如“的”或“和”之类的常见字所引起。',
+'powersearch'           => '搜索',
+'powersearchtext'       => '
+搜索名字空间：<br />$1<br />$2列出重定向页面；搜索$3 $9',
+'searchdisabled'        => '{{SITENAME}}由于性能方面的原因，全文搜索已被暂时禁用。您可以暂时通过Google搜索。请留意他们的索引可能会过时。',
+'blanknamespace'        => '(主)',
+
+# Preferences page
+'preferences'              => '参数设置',
+'mypreferences'            => '我的参数设置',
+'prefsnologin'             => '尚未登录',
+'prefsnologintext'         => '您必须先[[Special:Userlogin|登录]]才能设置个人参数。',
+'prefsreset'               => '参数已被重新设置。',
+'qbsettings'               => '快速导航条',
+'qbsettings-none'          => '无',
+'qbsettings-fixedleft'     => '左侧固定',
+'qbsettings-fixedright'    => '右侧固定',
+'qbsettings-floatingleft'  => '左侧漂移',
+'qbsettings-floatingright' => '右侧漂移',
+'changepassword'           => '更改密码',
+'skin'                     => '皮肤',
+'math'                     => '数学公式',
+'dateformat'               => '日期格式',
+'datedefault'              => '默认值',
+'datetime'                 => '日期和时间',
+'math_failure'             => '解析失败',
+'math_unknown_error'       => '未知错误',
+'math_unknown_function'    => '未知函数',
+'math_lexing_error'        => '句法错误',
+'math_syntax_error'        => '语法错误',
+'math_image_error'         => 'PNG 转换失败；请检查是否正确安装了 latex, dvips, gs 和 convert',
+'math_bad_tmpdir'          => '无法写入或建立数学公式临时目录',
+'math_bad_output'          => '无法写入或建立数学公式输出目录',
+'math_notexvc'             => '无法执行"texvc"；请参照 math/README 进行配置。',
+'prefs-personal'           => '用户资料',
+'prefs-rc'                 => '最近更改',
+'prefs-watchlist'          => '监视列表',
+'prefs-watchlist-days'     => '监视列表中显示记录的天数:',
+'prefs-watchlist-edits'    => '在增强的监视列表中显示的编辑次数:',
+'prefs-misc'               => '杂项',
+'saveprefs'                => '保存参数设置',
+'resetprefs'               => '重设参数',
+'oldpassword'              => '旧密码',
+'newpassword'              => '新密码',
+'retypenew'                => '确认密码:',
+'textboxsize'              => '编辑',
+'rows'                     => '行:',
+'columns'                  => '列:',
+'searchresultshead'        => '搜索结果设定',
+'resultsperpage'           => '每页显示链接数',
+'contextlines'             => '每链显示行数:',
+'contextchars'             => '每行显示字数:',
+'stubthreshold'            => '小作品显示门限值',
+'recentchangesdays'        => '最近更改中的顯示日數:',
+'recentchangescount'       => '最近更改中的編輯數:',
+'savedprefs'               => '您的个人参数设置已经保存。',
+'timezonelegend'           => '时区',
+'timezonetext'             => '输入当地时间与服务器时间(UTC)的时差。',
+'localtime'                => '当地时间',
+'timezoneoffset'           => '时差¹',
+'servertime'               => '服务器时间',
+'guesstimezone'            => '从浏览器填写',
+'allowemail'               => '接受来自其他用户的邮件',
+'defaultns'                => '默认搜索的名字空间',
+'default'                  => '默认',
+'files'                    => '文件',
+
+# User rights
+'userrights-lookup-user'     => '管理用户群组',
+'userrights-user-editname'   => '输入用户名:',
+'editusergroup'              => '编辑用户群组',
+'userrights-editusergroup'   => '编辑用户群组',
+'saveusergroups'             => '存储用户群组',
+'userrights-groupsmember'    => '隶属于:',
+'userrights-groupsavailable' => '可加入群组:',
+'userrights-groupshelp'      => '选择您想使该用户退出或加入的组群。反选时组群将不改变。您可以通过按住 CTRL 键 + 单击鼠标左键来反选',
+'userrights-reason'          => '更改原因:',
+
+# Groups
+'group'            => '群组:',
+'group-bot'        => '机器人',
+'group-sysop'      => '操作员',
+'group-bureaucrat' => '行政员',
+'group-all'        => '(全部)',
+
+'group-bot-member'        => '机器人',
+'group-sysop-member'      => '操作员',
+'group-bureaucrat-member' => '行政员',
+
+'grouppage-bot'        => '{{ns:project}}:机器人',
+'grouppage-sysop'      => '{{ns:project}}:操作员',
+'grouppage-bureaucrat' => '{{ns:project}}:行政员',
+
+# User rights log
+'rightslog'      => '用户权限日志',
+'rightslogtext'  => '以下记录了用户权限的更改记录。',
+'rightslogentry' => '将 $1 的权限从 $2 改为 $3',
+'rightsnone'     => '(无)',
+
+# Recent changes
+'nchanges'                          => '$1次更改',
+'recentchanges'                     => '最近更改',
+'recentchangestext'                 => '跟踪这个wiki上的最新更改。',
+'recentchanges-feed-description'    => '跟踪此订阅在 wiki 上的最近更改。',
+'rcnote'                            => "以下是在$3，最近'''$2'''天内的'''$1'''次最近更改记录:",
+'rcnotefrom'                        => '以下是自<b>$2</b>的更改(最多显示<b>$1</b>):',
+'rclistfrom'                        => '显示自$1以来的新更改',
+'rcshowhideminor'                   => '$1小编辑',
+'rcshowhidebots'                    => '$1机器人的编辑',
+'rcshowhideliu'                     => '$1登录用户的编辑',
+'rcshowhideanons'                   => '$1匿名用户的编辑',
+'rcshowhidepatr'                    => ' $1检查过的编辑',
+'rcshowhidemine'                    => '$1我的编辑',
+'rclinks'                           => '显示最近$2天内最新的$1次改动。<br />$3',
+'diff'                              => '差异',
+'hist'                              => '历史',
+'hide'                              => '隐藏',
+'show'                              => '显示',
+'minoreditletter'                   => '小',
+'newpageletter'                     => '新',
+'boteditletter'                     => '机',
+'number_of_watching_users_pageview' => '[$1个关注用户]',
+'rc_categories'                     => '分类界限(以"|"分割)',
+'rc_categories_any'                 => '任意',
+
+# Recent changes linked
+'recentchangeslinked'          => '链出更改',
+'recentchangeslinked-noresult' => '在这一段时间中连结的页面并无更改。',
+'recentchangeslinked-summary'  => "这一个特殊页面列示这一页链出页面的最近更改。在您监视列表中的页面会以'''粗体'''表示。",
+
+# Upload
+'upload'                      => '上传文件',
+'uploadbtn'                   => '上传文件',
+'reupload'                    => '重新上传',
+'reuploaddesc'                => '返回上传表单。',
+'uploadnologin'               => '未登录',
+'uploadnologintext'           => '您必须先[[Special:Userlogin|登录]]才能上传文件。',
+'upload_directory_read_only'  => '上传目录($1)不存在或无写权限。',
+'uploaderror'                 => '上载错误',
+'uploadtext'                  => "使用下面的表单来上传用在页面内新的图像文件。 
+要查看或搜索以前上传的图片
+可以进入[[Special:Imagelist|图像列表]]，
+上传和删除将在[[Special:Log/upload|上传日志]]中记录。
+
+要在文章中加入图像，使用以下形式的连接:
+'''<nowiki>[[{{ns:image}}:file.jpg]]</nowiki>'''，
+'''<nowiki>[[{{ns:image}}:file.png|替换文字]]</nowiki>''' 或
+'''<nowiki>[[{{ns:media}}:file.ogg]]</nowiki>'''。",
+'uploadlog'                   => '上传日志',
+'uploadlogpage'               => '上传日志',
+'uploadlogpagetext'           => '以下是一个最近上传文件的列表。',
+'filename'                    => '文件名',
+'filedesc'                    => '文件描述',
+'fileuploadsummary'           => '文件描述:',
+'filestatus'                  => '版权状态',
+'filesource'                  => '来源',
+'uploadedfiles'               => '已上传文件',
+'ignorewarning'               => '忽略警告并保存文件。',
+'ignorewarnings'              => '忽略所有警告',
+'minlength'                   => '文件名字必须至少有三个字母。',
+'illegalfilename'             => '文件名"$1"包含有页面标题所禁止的字符。请改名后重新上传。',
+'badfilename'                 => '文件名已被改为"$1"。',
+'filetype-badmime'            => 'MIME类别"$1"不是容许的文件格式。',
+'filetype-badtype'            => "'''\".\$1\"'''是不容许的文件类型
+: 以下是容许的文件类型: \$2",
+'filetype-missing'            => '该文件名称并没有副档名 (像 ".jpg")。',
+'large-file'                  => '建议文件大小不能超过 $1；本文件大小为 $2。',
+'largefileserver'             => '这个文件的大小比服务器配置允许的大小还要大。',
+'emptyfile'                   => '您所上传的文件不存在。这可能是由于文件名键入错误。请检查您是否真的要上传此文件。',
+'fileexists'                  => '已存在相同名称的文件，如果您无法确定您是否要改变它，请检查$1。',
+'fileexists-extension'        => '一个相似名称的文件已经存在:<br />
+上载文件的档名: <strong><tt>$1</tt></strong><br />
+现有文件的档名: <strong><tt>$2</tt></strong><br />
+请选择一个不同的名字。',
+'fileexists-thumb'            => "'''<center>已经存在的图像</center>'''",
+'fileexists-thumbnail-yes'    => '这个文件好像是一幅图像的缩图版本<i>(缩图)</i>。请检查清楚该文件<strong><tt>$1</tt></strong>。<br />
+如果检查后的文件是同原本图像的大小是一样的话，就不用再上载多一幅缩图。',
+'file-thumbnail-no'           => '该档名是以<strong><tt>$1</tt></strong>开始。它好像一幅图像的缩图版本<i>(缩图)</i>。
+如果你有该图像的完整大小，如不是请再修改文件名。',
+'fileexists-forbidden'        => '已存在相同名称的文件；请返回并用一个新的名称来上传此文件。[[Image:$1|thumb|center|$1]]',
+'fileexists-shared-forbidden' => '在共享文件库中已存在此名称的文件；请返回并用一个新的名称来上传此文件。[[Image:$1|thumb|center|$1]]',
+'successfulupload'            => '上传成功',
+'fileuploaded'                => '文件"$1"上传成功。
+请根据链接($2)到文件描述页添加有关文件信息，例如它的来源，在何时由谁创建，以及其他任何您知道的关于该文件的信息。如果这是一个图像，您可以通过<tt><nowiki>[[Image:$1|thumb|描述]]</nowiki></tt>将其插入页面',
+'uploadwarning'               => '上载警告',
+'savefile'                    => '保存文件',
+'uploadedimage'               => '已上载"[[$1]]"',
+'uploaddisabled'              => '无法上传',
+'uploaddisabledtext'          => '文件上传在此网站不可用。',
+'uploadscripted'              => '该文件包含可能被网络浏览器错误解释的 HTML 或脚本代码。',
+'uploadcorrupt'               => '该文件包含或具有一个不正确的扩展名。请检查此文件并重新上传。',
+'uploadvirus'                 => '该文件包含有病毒！详情: $1',
+'sourcefilename'              => '源文件名',
+'destfilename'                => '目标文件名',
+'watchthisupload'             => '监视此页',
+'filewasdeleted'              => '之前已经有一个同名文件被上传后又被删除了。在上传此文件之前您需要检查$1。',
+
+'upload-proto-error'      => '协议错误',
+'upload-proto-error-text' => '远程上传要求 URL 以 <code>http://</code> 或 <code>ftp://</code> 开头。',
+'upload-file-error'       => '内部错误',
+'upload-file-error-text'  => '当试图在服务器上创建临时文件时发生内部错误。请与系统管理员联系。',
+'upload-misc-error'       => '未知的上传错误',
+'upload-misc-error-text'  => '在上传时发生未知的错误. 请验证使用了正确并可访问的 URL，然后进行重试。如果问题仍然存在，请与系统管理员联系。',
+
+# Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
+'upload-curl-error6'       => '无法访问 URL',
+'upload-curl-error6-text'  => '无法访问所提供的 URL。请再次检查该 URL 是否正确，并且网站的访问是否正常。',
+'upload-curl-error28'      => '上传超时',
+'upload-curl-error28-text' => '站点响应时间过长。请检查此网站的访问是否正常，过一会再进行尝试。您可能需要在网络访问空闲时间再次进行尝试。',
+
+'license'            => '授权',
+'nolicense'          => '未选定',
+'upload_source_url'  => ' (一个有效的，可公开访问的 URL)',
+'upload_source_file' => ' (在您计算机上的一个文件)',
+
+# Image list
+'imagelist'                 => '文件列表',
+'imagelisttext'             => '以下是按$2排列的$1个文件列表。',
+'imagelistforuser'          => '此处仅仅显示由$1上传的图像。',
+'getimagelist'              => '正在获取文件列表',
+'ilsubmit'                  => '搜索',
+'showlast'                  => '显示按$2排列的最后$1个文件。',
+'byname'                    => '按名字',
+'bydate'                    => '按日期',
+'bysize'                    => '按大小',
+'imgdelete'                 => '删除',
+'imgdesc'                   => '描述',
+'imgfile'                   => '文件',
+'imglegend'                 => '说明: (描述) = 显示/编辑文件描述。',
+'imghistory'                => '文件历史',
+'revertimg'                 => '恢复',
+'deleteimg'                 => '删除',
+'deleteimgcompletely'       => '删除此文件的所有修订版本',
+'imghistlegend'             => '说明: (当前) = 这是当前文件，(删除) = 删除此旧版本，
+(恢复 = 恢复到此旧版本。
+<br /><i>点击日期查看当天上载的文件</i>。',
+'imagelinks'                => '鏈接',
+'linkstoimage'              => '以下页面鏈接到本文件:',
+'nolinkstoimage'            => '没有页面鏈接到本文件。',
+'sharedupload'              => '该文件是一个共享上传，它可能在其它项目中被应用。',
+'shareduploadwiki'          => '请参阅$1以了解其相关信息。',
+'shareduploadwiki-linktext' => '文件描述页面',
+'noimage'                   => '不存在此名称的文件，您可以$1。',
+'noimage-linktext'          => '上传它',
+'uploadnewversion-linktext' => '上传该文件的新版本',
+'imagelist_date'            => '日期',
+'imagelist_name'            => '名称',
+'imagelist_user'            => '用户',
+'imagelist_size'            => '字节',
+'imagelist_description'     => '描述',
+'imagelist_search_for'      => '按图像名称搜索:',
+
+# MIME search
+'mimesearch'         => 'MIME 搜索',
+'mimesearch-summary' => '本页面启用文件MIME类型过滤器。输入：内容类型/子类型，如 <tt>image/jpeg</tt>。',
+'mimetype'           => 'MIME 类型:',
+'download'           => '下载',
+
+# Unwatched pages
+'unwatchedpages' => '未被监视的页面',
+
+# List redirects
+'listredirects' => '重定向页面列表',
+
+# Unused templates
+'unusedtemplates'     => '未使用的模板',
+'unusedtemplatestext' => '此页面列出模板名字空间下所有未被其它页面使用的页面。请在删除这些模板前检查其它链入该模板的页面。',
+'unusedtemplateswlh'  => '其它链接',
+
+# Random redirect
+'randomredirect'         => '随机重定向页面',
+'randomredirect-nopages' => '在这个名字空间中没有重定向页面。',
+
+# Statistics
+'statistics'             => '统计',
+'sitestats'              => '{{SITENAME}}统计数据',
+'userstats'              => '用户统计',
+'sitestatstext'          => "数据库中共有'''\$1'''页页面。
+其中包括对话页、关于{{SITENAME}}的页面、最少量的\"小作品\"页、重定向的页面，
+以及未达到页面质量的页面。除此之外还有'''\$2'''页可能是合乎标准的页面。
+
+'''\$8'''个文件已被上传。
+
+从{{SITENAME}}设置以来，全站点共有页面浏览'''\$3'''次，页面编辑'''\$4'''次。
+即每页平均编辑'''\$5'''次，各次编辑后页面的每个版本平均浏览'''\$6'''次。
+
+[http://meta.wikimedia.org/wiki/Help:Job_queue 工作排队]的长度是'''\$7'''。",
+'userstatstext'          => "网站有'''$1'''位注册用户，其中
+'''$2''' (或 '''$4%''') 有$5权限。",
+'statistics-mostpopular' => '浏览最多的页面',
+
+'disambiguations'      => '消含糊页',
+'disambiguationspage'  => 'Template:disambig',
+'disambiguations-text' => '以下的页面都有到<b>消含糊页</b>的链接, 但它们应该是链到适当的标题。<br />一个页面会被视为消含糊页如果它是链自[[MediaWiki:disambiguationspage]]。',
+
+'doubleredirects'     => '双重重定向页面',
+'doubleredirectstext' => '每一行都包含到第一和第二个重定向页面的链接，以及第二个重定向页面的第一行文字，通常显示的都会是"真正"的目标页面，也就是第一个重定向页面应该指向的页面。',
+
+'brokenredirects'        => '损坏的重定向页',
+'brokenredirectstext'    => '以下的重定向页面指向的是不存在的页面:',
+'brokenredirects-edit'   => '(编辑)',
+'brokenredirects-delete' => '(删除)',
+
+'withoutinterwiki'        => '未有语言链接的页面',
+'withoutinterwiki-header' => '以下的页面是未有语言链接到其它语言版本:',
+
+'fewestrevisions' => '最少修订的文章',
+
+# Miscellaneous special pages
+'nbytes'                  => '$1字节',
+'ncategories'             => '$1个分类',
+'nlinks'                  => '$1个链接',
+'nmembers'                => '$1个成员',
+'nrevisions'              => '$1个修订',
+'nviews'                  => '$1次浏览',
+'specialpage-empty'       => '本页面没有内容。',
+'lonelypages'             => '孤立页面',
+'lonelypagestext'         => '以下页面没有链接这个wiki中的其它页面。',
+'uncategorizedpages'      => '未归类页面',
+'uncategorizedcategories' => '未归类分类',
+'uncategorizedimages'     => '未归类图像',
+'unusedcategories'        => '未使用分类',
+'unusedimages'            => '未使用图像',
+'popularpages'            => '热点页面',
+'wantedcategories'        => '待撰分类',
+'wantedpages'             => '待撰页面',
+'mostlinked'              => '最多链接页面',
+'mostlinkedcategories'    => '最多链接分类',
+'mostcategories'          => '最多分类文章',
+'mostimages'              => '最多链接图像',
+'mostrevisions'           => '最多修订文章',
+'allpages'                => '所有页面',
+'prefixindex'             => '前缀索引',
+'randompage'              => '随机页面',
+'randompage-nopages'      => '在这个名字空间中没有页面。',
+'shortpages'              => '短页面',
+'longpages'               => '长页面',
+'deadendpages'            => '断链页面',
+'deadendpagestext'        => '以下页面没有被被链接到这个wiki中的其它页面:',
+'protectedpages'          => '已保护页面',
+'protectedpagestext'      => '以下页面已经被保护以防止移移或编辑',
+'protectedpagesempty'     => '在这些参数下没有页面正在保护。',
+'listusers'               => '用户列表',
+'specialpages'            => '特殊页面',
+'spheading'               => '所有用户的特殊页面',
+'restrictedpheading'      => '受限的特殊页面',
+'rclsub'                  => '(从"$1"链出的页面)',
+'newpages'                => '最新页面',
+'newpages-username'       => '用户名:',
+'ancientpages'            => '最早页面',
+'intl'                    => '跨语言链接',
+'move'                    => '移动',
+'movethispage'            => '移动此页',
+'unusedimagestext'        => '<p>请注意其它网站可能直接通过 URL 链接此图像，所以这里列出的图像有可能依然被使用。</p>',
+'unusedcategoriestext'    => '虽然没有被其它文章或者分类所采用，但列表中的分类页依然存在。',
+
+# Book sources
+'booksources'               => '网络书源',
+'booksources-search-legend' => '搜索网络书源',
+'booksources-isbn'          => 'ISBN:',
+'booksources-go'            => '转到',
+'booksources-text'          => '以下是一些网络书店的链接列表，其中可能有您要找的书籍的更多信息:',
+
+'categoriespagetext' => '这个wiki中存在如下分类。',
+'data'               => '数据',
+'userrights'         => '用户权限管理',
+'groups'             => '用户群组',
+'isbn'               => 'ISBN',
+'alphaindexline'     => '$1到$2',
+'version'            => '版本',
+
+# Special:Log
+'specialloguserlabel'  => '用户:',
+'speciallogtitlelabel' => '标题:',
+'log'                  => '日志',
+'log-search-legend'    => '搜寻日志',
+'log-search-submit'    => '去',
+'alllogstext'          => '综合显示上传、删除、保护、查封以及管理日志。
+您可以选择日志类型，用户名或者相关页面来缩小查询范围。',
+'logempty'             => '在日志中不存在匹配项。',
+'log-title-wildcard'   => '搜寻以这个文字开始的标题',
+
+# Special:Allpages
+'nextpage'          => '下一页($1)',
+'prevpage'          => '上一页($1)',
+'allpagesfrom'      => '显示从此处开始的页面:',
+'allarticles'       => '所有文章',
+'allinnamespace'    => '所有页面(属于$1名字空间)',
+'allnotinnamespace' => '所有页面(不属于$1名字空间)',
+'allpagesprev'      => '前',
+'allpagesnext'      => '后',
+'allpagessubmit'    => '提交',
+'allpagesprefix'    => '显示具有此前缀(名字空间)的页面:',
+'allpagesbadtitle'  => '给定的页面标题是非法的，或者具有一个内部语言或内部 wiki 的前缀。它可能包含一个或更多的不能用于标题的字符。',
+
+# Special:Listusers
+'listusersfrom'      => '给定显示用户条件:',
+'listusers-submit'   => '显示',
+'listusers-noresult' => '找不到用户。',
+
+# E-mail user
+'mailnologin'     => '无电邮地址',
+'mailnologintext' => '您必须先[[Special:Userlogin|登录]]
+并在[[Special:Preferences|参数设置]]
+中有一个有效的电子邮箱地址才可以向其他用户发邮件。',
+'emailuser'       => '向该用户发邮件',
+'emailpage'       => '向用户发邮件',
+'emailpagetext'   => '如果该用户已经在他或她的参数设置页中输入了有效的电子邮箱地址，以下的表单将寄一个信息给该用户。您在您参数设置中所输入的电子邮箱地址将出现在邮件"发件人"一栏中，这样该用户就可以回复您。',
+'usermailererror' => 'Mail 对象返回错误:',
+'defemailsubject' => '{{SITENAME}}电子邮件',
+'noemailtitle'    => '无电子邮件地址',
+'noemailtext'     => '该用户还没有指定一个有效的电子邮件地址，
+或者选择不接受来自其他用户的电子邮件。',
+'emailfrom'       => '发件人',
+'emailto'         => '收件人',
+'emailsubject'    => '主题',
+'emailmessage'    => '信息',
+'emailsend'       => '发送',
+'emailccme'       => '将我的消息的副本发送一份到我的邮箱。',
+'emailccsubject'  => '将您的消息复制到 $1: $2',
+'emailsent'       => '电子邮件已发送',
+'emailsenttext'   => '您的电子邮件已经发出。',
+
+# Watchlist
+'watchlist'            => '监视列表',
+'mywatchlist'          => '我的监视列表',
+'watchlistfor'         => "('''$1'''的监视列表')",
+'nowatchlist'          => '您的监视列表为空。',
+'watchlistanontext'    => '请$1以查看或编辑您的监视列表。',
+'watchlistcount'       => "'''您的监视列表有$1项，其中包括讨论页。'''",
+'clearwatchlist'       => '清空监视列表',
+'watchlistcleartext'   => '您确定要将它们移除吗？',
+'watchlistclearbutton' => '清空监视列表',
+'watchlistcleardone'   => '您的监视列表已被清空。有$1项被移除。',
+'watchnologin'         => '未登录',
+'watchnologintext'     => '您必须先[[Special:Userlogin|登录]]才能更改您的监视列表。',
+'addedwatch'           => '已添加至监视列表',
+'addedwatchtext'       => "页面\"[[:\$1]]\"已经被加入到您的[[Special:Watchlist|监视列表]]中。
+将来有关此页面及其讨论页的任何修改将会在那里列出，
+而且还会在[[Special:Recentchanges|最近更改]]中
+以'''粗体'''形式列出以使起更容易识别。
+
+如果您之后想将该页面从监视列表中删除，可点击导航条中的\"停止监视\"链接。",
+'removedwatch'         => '已停止监视',
+'removedwatchtext'     => '页面"$1"已经从您的监视页面中移除。',
+'watch'                => '监视',
+'watchthispage'        => '监视此页',
+'unwatch'              => '取消监视',
+'unwatchthispage'      => '停止监视',
+'notanarticle'         => '不是文章',
+'watchnochange'        => '在显示的时间段内您所监视的页面没有更改。',
+'watchdetails'         => '* $1个页面(不含讨论页)被监视
+* [[Special:Watchlist/edit|显示并编辑完整列表]]
+* [[Special:Watchlist/clear|移除所有页面]]',
+'wlheader-enotif'      => '* 已经启动电子邮件通知功能。',
+'wlheader-showupdated' => "* 在你上次查看后有被修改过的页面会显示为'''粗体'''",
+'watchmethod-recent'   => '检查被监视页面的最近编辑',
+'watchmethod-list'     => '查看监视页中的最新修改',
+'removechecked'        => '将被选页面从监视列表中移除',
+'watchlistcontains'    => '您的监视列表包含$1个页面。',
+'watcheditlist'        => '这里是您所监视的页面的列表。要移除某一页面，只要选择该页面然后点击"移除页面"按钮(删除内容页面将同时删除与之相关的讨论页，反之亦然)。',
+'removingchecked'      => '从监视列表中移除选中项...',
+'couldntremove'        => '无法移除"$1"...',
+'iteminvalidname'      => "页面'$1'错误，无效命名...",
+'wlnote'               => "以下是最近'''$2'''小时内的最后'''$1'''次修改:",
+'wlshowlast'           => '显示最近$1小时 $2天 $3的修改',
+'wlsaved'              => '这是您的监视列表的一个保存版本。',
+'watchlist-show-bots'  => '显示机器人的编辑',
+'watchlist-hide-bots'  => '隐藏机器人的编辑',
+'watchlist-show-own'   => '显示我的编辑',
+'watchlist-hide-own'   => '隐藏我的编辑',
+'watchlist-show-minor' => '显示小编辑',
+'watchlist-hide-minor' => '隐藏小编辑',
+'wldone'               => '已完成。',
+
+# Displayed when you click the "watch" button and it's in the process of watching
+'watching'   => '监视...',
+'unwatching' => '解除监视...',
+
+'enotif_mailer'      => '{{SITENAME}}邮件通知器',
+'enotif_reset'       => '将所有页面标为已读',
+'enotif_newpagetext' => '这是新建页面。',
+'changed'            => '已修改',
+'created'            => '已建立',
+'enotif_subject'     => '{{SITENAME}}有页面 $PAGETITLE 被 $PAGEEDITOR $CHANGEDORCREATED',
+'enotif_lastvisited' => '查看您上次访问后的所有更改请访问$1。',
+'enotif_body'        => '亲爱的 $WATCHINGUSERNAME,
+
+$PAGEEDITOR 已经在 $PAGEEDITDATE $CHANGEDORCREATED 了{{SITENAME}}的 $PAGETITLE 页面，请到 $PAGETITLE_URL 查看当前版本。
+
+$NEWPAGE
+
+编辑摘要: $PAGESUMMARY $PAGEMINOREDIT
+
+联系此编辑者:
+
+邮件: $PAGEEDITOR_EMAIL
+
+本站: $PAGEEDITOR_WIKI
+
+在您访问此页之前，将来的更改将不会向您发通知。您也可以重设您所有监视页面的通知标记。
+
+                {{SITENAME}}通知系统
+
+--
+要改变您的监视列表设置，请访问
+{{fullurl:{{ns:special}}:Watchlist/edit}}
+
+反馈和进一步的帮助:
+{{fullurl:{{MediaWiki:helppage}}}}',
+
+# Delete/protect/revert
+'deletepage'                  => '删除页面',
+'confirm'                     => '确认',
+'excontent'                   => '内容为: "$1"',
+'excontentauthor'             => '内容为: "$1" (而且唯一贡献者为"$2")',
+'exbeforeblank'               => '被清空前的内容为: "$1"',
+'exblank'                     => '页面为空',
+'confirmdelete'               => '确认删除',
+'deletesub'                   => '(正在删除"$1")',
+'historywarning'              => '警告: 您将要删除的页内含有历史',
+'confirmdeletetext'           => '您即将从数据库中永远删除一个页面或图像以及其历史。
+请确定您要进行此项操作，并且了解其后果，同时您的行为符合[[{{MediaWiki:policy-url}}]]。',
+'actioncomplete'              => '操作完成',
+'deletedtext'                 => '"$1"已经被删除。
+最近删除的纪录请参见$2。',
+'deletedarticle'              => '已删除"$1"',
+'dellogpage'                  => '删除日志',
+'dellogpagetext'              => '以下是最近删除的纪录列列表:',
+'deletionlog'                 => '删除日志',
+'reverted'                    => '恢复到早期版本',
+'deletecomment'               => '删除原因',
+'imagereverted'               => '恢复到早期版本操作完成。',
+'rollback'                    => '恢复编辑',
+'rollback_short'              => '恢复',
+'rollbacklink'                => '恢复',
+'rollbackfailed'              => '恢复失败',
+'cantrollback'                => '无法恢复编辑；最后的贡献者是本文的唯一作者。',
+'alreadyrolled'               => '无法恢复由[[User:$2|$2]] ([[User talk:$2|讨论]])进行的[[$1]]的最后编辑；
+其他人已经编辑或是恢复了该页。
+
+最后编辑者: [[User:$3|$3]] ([[User talk:$3|讨论]])。',
+'editcomment'                 => '编辑说明: "<i>$1</i>"。', # only shown if there is an edit comment
+'revertpage'                  => '恢复由[[Special:Contributions/$2|$2]] ([[User talk:$2|对话]])的编辑；更改回[[User:$1|$1]]的最后一个版本',
+'sessionfailure'              => '似乎在您登录时发生问题，作为一项防范性措施，该动作已经被取消。请单击"后退"再次尝试！',
+'protectlogpage'              => '保护日志',
+'protectlogtext'              => '下面是页面锁定和取消锁定的列表。请参考[[Special:Protectedpages|保护页面列表]]以查看当前进行的页面保护。',
+'protectedarticle'            => '已保护"[[$1]]"',
+'unprotectedarticle'          => '已取消保护"[[$1]]"',
+'protectsub'                  => '(正在保护"$1")',
+'confirmprotecttext'          => '确认要保护该页？',
+'confirmprotect'              => '确认保护',
+'protectmoveonly'             => '只针对移动做保护',
+'protectcomment'              => '保护的原因',
+'protectexpiry'               => '终止时间',
+'protect_expiry_invalid'      => '输入的终止时间无效。',
+'protect_expiry_old'          => '终止时间已过去。',
+'unprotectsub'                => '(正在取消保护"$1")',
+'confirmunprotecttext'        => '您是否真的想解除保护这页？',
+'confirmunprotect'            => '确认取消保护',
+'unprotectcomment'            => '取消保护的原因',
+'protect-unchain'             => '移动权限解锁',
+'protect-text'                => '你可以在这里浏览和修改对页面<strong>$1</strong>的保护级别。',
+'protect-locked-blocked'      => '您不能在被查封时更改保护级别。
+以下是<strong>$1</strong>现时的保护级别:',
+'protect-locked-dblock'       => '在资料库锁定时无法更改保护级别。
+以下是<strong>$1</strong>现时的保护级别:',
+'protect-locked-access'       => '您的帐户权限不能修改保护级别。
+以下是<strong>$1</strong>现时的保护级别:',
+'protect-cascadeon'           => '以下的{{PLURAL:$1|一个|多个}}页面包含  本页面的同时，启动了连锁保护，因此本页面目前也被保护，未能编辑。您可以设置本页面的保护级别，但这并不会对连锁保护有所影响。',
+'protect-default'             => '(默认)',
+'protect-level-autoconfirmed' => '禁止未注册用户',
+'protect-level-sysop'         => '仅操作员',
+'protect-summary-cascade'     => '联锁',
+'protect-expiring'            => '终止于 $1 (UTC)',
+'protect-cascade'             => '连锁保护 - 本页包含的所有页面均一并保护。',
+'restriction-type'            => '权限',
+'restriction-level'           => '限制级别',
+'minimum-size'                => '最小大小 (字节)',
+
+# Restrictions (nouns)
+'restriction-edit' => '编辑',
+'restriction-move' => '移动',
+
+# Restriction levels
+'restriction-level-sysop'         => '全保护',
+'restriction-level-autoconfirmed' => '半保护',
+'restriction-level-all'           => '任何级别',
+
+# Undelete
+'undelete'                 => '恢复被删页面',
+'undeletepage'             => '浏览及恢复被删页面',
+'viewdeletedpage'          => '查看被删页面',
+'undeletepagetext'         => '以下页面已经被删除，但依然在档案中并可以被恢复。
+档案库可能被定时清理。',
+'undeleteextrahelp'        => "恢复整个页面时，请清除所有复选框后点击 '''''恢复'''''。恢复特定版本时，请选择相应版本前的复选框后点击 '''''恢复'''''。点击 '''''重设''''' 将清除评论内容及所有复选框。",
+'undeleterevisions'        => '$1版本存档',
+'undeletehistory'          => '如果您恢复了该页面，所有版本都会被恢复到修订历史中。
+如果本页删除后有一个同名的新页面建立，
+被恢复的版本将会称为较新的历史，而新页面的当前版本将无法被自动复原。',
+'undeleterevdel'           => '如果把最新修订部份删除，反删除便无法进行。如果遇到这种情况，您必须反选或反隐藏最新已删除的修订。对于您没有权限去查看的修订是无法恢复的。',
+'undeletehistorynoadmin'   => '这个文章已被删除。删除原因显示在下方编辑摘要中，被删除前的所有修订文本连同删除前贡献用户的细节信息只对管理员可见。',
+'undelete-revision'        => '删除$1时在$2的修订版本',
+'undeleterevision-missing' => '无效或丢失的修订版本。您可能使用了错误的链接，或者此修订版本已经被从存档中恢复或移除。',
+'undeletebtn'              => '恢复',
+'undeletereset'            => '重设',
+'undeletecomment'          => '评论:',
+'undeletedarticle'         => '已恢复的"[[$1]]"',
+'undeletedrevisions'       => '$1个修订版本已恢复',
+'undeletedrevisions-files' => '$1个修订版本和$2个文件已经被恢复',
+'undeletedfiles'           => '$1个文件已经被恢复',
+'cannotundelete'           => '恢复删除失败；可能已有其他人先行恢复了此页面。',
+'undeletedpage'            => "<big>'''$1已经被恢复'''</big>
+
+参考[[Special:Log/delete|删除日志]]查看删除及恢复记录。",
+'undelete-header'          => '如要查询最近的记录请参阅[[Special:Log/delete|删除日志]]。',
+'undelete-search-box'      => '搜索已删除页面',
+'undelete-search-prefix'   => '显示页面自:',
+'undelete-search-submit'   => '搜索',
+'undelete-no-results'      => '删除记录里没有符合的结果。',
+
+# Namespace form on various pages
+'namespace' => '名字空间:',
+'invert'    => '反向选定',
+
+# Contributions
+'contributions' => '用户贡献',
+'mycontris'     => '我的贡献',
+'contribsub2'    => '$1的贡献 ($2)',
+'nocontribs'    => '没有找到符合特征的更改。',
+'ucnote'        => '以下是该用户最近<b>$2</b>天内的最后<b>$1</b>次修改。',
+'uclinks'       => '参看最后$1次修改；参看最后$2天。',
+'uctop'         => ' (顶)',
+
+'sp-contributions-newest'      => '最新',
+'sp-contributions-oldest'      => '最早',
+'sp-contributions-newer'       => '前$1次',
+'sp-contributions-older'       => '后$1次',
+'sp-contributions-newbies'     => '只显示新创建之用户的贡献',
+'sp-contributions-newbies-sub' => '新手',
+'sp-contributions-blocklog'    => '查封记录',
+'sp-contributions-search'      => '搜寻贡献记录',
+'sp-contributions-username'    => 'IP地址或用户名称：',
+'sp-contributions-submit'      => '搜索',
+
+'sp-newimages-showfrom' => '从$1开始显示新图像',
+
+# What links here
+'whatlinkshere'      => '链入页面',
+'notargettitle'      => '无目标',
+'notargettext'       => '您还没有指定一个目标页面或用户以进行此项操作。',
+'linklistsub'        => '(链接列表)',
+'linkshere'          => '以下页面链接到[[:$1]]：',
+'nolinkshere'        => '没有页面链接到[[:$1]]。',
+'nolinkshere-ns'     => '在所选的名字空间内没有页面链接到[[:$1]]。',
+'isredirect'         => '重定向页',
+'istemplate'         => '包含',
+'whatlinkshere-prev' => '前$1个',
+'whatlinkshere-next' => '后$1个',
+
+# Block/unblock
+'blockip'                     => '查封IP地址',
+'blockiptext'                 => '用下面的表单来禁止来自某一特定IP地址的修改权限。
+只有在为防止破坏，及符合[[{{MediaWiki:policy-url}}|守则]]的情况下才可采取此行动。
+请在下面输入一个具体的理由（例如引述一个被破坏的页面）。',
+'ipaddress'                   => 'IP地址',
+'ipadressorusername'          => 'IP地址或用户名',
+'ipbexpiry'                   => '期限',
+'ipbreason'                   => '原因',
+'ipbreasonotherlist'          => '其它原因',
+'ipbreason-dropdown'          => '
+*一般的封禁理由
+** 屡次增加不实资料
+** 删除页面内容
+** 外部连结广告
+** 在页面中增加无意义文字
+** 无礼的行为、攻击／骚扰别人
+** 滥用多个帐号
+** 不能接受的用户名',
+'ipbanononly'                 => '仅阻止匿名用户',
+'ipbcreateaccount'            => '阻止创建新账号',
+'ipbenableautoblock'          => '自动查封此用户最后所用的IP地址，以及后来试图编辑所用的所有地址',
+'ipbsubmit'                   => '查封该地址',
+'ipbother'                    => '其它时间',
+'ipboptions'                  => '2小时:2 hours,1天:1 day,3天:3 days,1周:1 week,2周:2 weeks,1个月:1 month,3个月:3 months,6个月:6 months,1年:1 year,永久:infinite',
+'ipbotheroption'              => '其它',
+'ipbotherreason'              => '其它／附带原因',
+'ipbhidename'                 => '在查封日志、活跃查封列表以及用户列表中隐藏用户名／IP',
+'badipaddress'                => 'IP地址不正确。',
+'blockipsuccesssub'           => '查封成功',
+'blockipsuccesstext'          => '[[Special:Contributions/$1|$1]]已经被查封。
+<br />参看[[Special:Ipblocklist|被封IP地址列表]]以复审查封。',
+'ipb-edit-dropdown'           => '编辑查封原因',
+'ipb-unblock-addr'            => '解除封禁$1',
+'ipb-unblock'                 => '解除禁封用户名或IP地址',
+'ipb-blocklist-addr'          => '查看$1的现有封禁',
+'ipb-blocklist'               => '查看现有的封禁',
+'unblockip'                   => '解除禁封IP地址',
+'unblockiptext'               => '用下面的表单来恢复先前被禁封的IP地址的书写权。',
+'ipusubmit'                   => '解封此地址',
+'unblocked'                   => '[[User:$1|$1]]已经被解封',
+'ipblocklist'                 => '被封IP地址列表',
+'ipblocklist-submit'          => '搜索',
+'blocklistline'               => '$1，$2禁封$3 ($4)',
+'infiniteblock'               => '永久',
+'expiringblock'               => '$1 到期',
+'anononlyblock'               => '仅限匿名用户',
+'noautoblockblock'            => '禁用自动查封',
+'createaccountblock'          => '禁止创建账户',
+'ipblocklistempty'            => '查封列表为空或所要求的IP地址/用户名没有被查封。',
+'blocklink'                   => '禁封',
+'unblocklink'                 => '解除禁封',
+'contribslink'                => '贡献',
+'autoblocker'                 => '因为您与"[[$1]]"共享一个IP地址而被自动查封。$1被封的理由是"$2"。',
+'blocklogpage'                => '查封日志',
+'blocklogentry'               => '"[[$1]]"已被查封 $3 ，终止时间为$2',
+'blocklogtext'                => '这是关于用户查封和解封操作的日志。
+被自动查封的IP地址没有被列出。请参看[[Special:Ipblocklist|被封IP地址列表]]。',
+'unblocklogentry'             => '"[[$1]]"已被解封',
+'block-log-flags-anononly'    => '仅限匿名用户',
+'block-log-flags-nocreate'    => '禁止此IP/用户建立新帐户',
+'block-log-flags-noautoblock' => '禁用自动封禁',
+'range_block_disabled'        => '只有管理员才能创建禁止查封的范围。',
+'ipb_expiry_invalid'          => '无效的终止时间。',
+'ipb_already_blocked'         => '已经封锁"$1"',
+'ip_range_invalid'            => '无效的IP范围。\n',
+'proxyblocker'                => '代理封锁器',
+'ipb_cant_unblock'            => '错误: 没有发现 Block ID $1。该 IP 可能已经被解封。',
+'proxyblockreason'            => '您的IP地址是一个开放的代理，它已经被封锁。请联系您的因特网服务提供商或技术支持者并告知告知他们该严重的安全问题。',
+'proxyblocksuccess'           => '完成。\n',
+'sorbs'                       => 'DNSBL',
+'sorbsreason'                 => '您的IP地址被[http://www.sorbs.net SORBS] DNSBL 列为属于开放代理服务器。',
+'sorbs_create_account_reason' => '由于您的IP地址被[http://www.sorbs.net SORBS] DNSBL 列为属于开放代理服务器，所以您不能创建新账户。',
+
+# Developer tools
+'lockdb'              => '锁定数据库',
+'unlockdb'            => '解锁数据库',
+'lockdbtext'          => '锁住数据库将禁止所有用户进行编辑页面、更改参数、编辑监视列表以及其他需要更改数据库的操作。
+请确认您的决定，并且保证您在维护工作结束后会重新开放数据库。',
+'unlockdbtext'        => '开放数据库将会恢复所有用户进行编辑页面、修改参数、编辑监视列表以及其他需要更改数据库的操作。
+请确认您的决定。',
+'lockconfirm'         => '是的，我确实想要锁定数据库。',
+'unlockconfirm'       => '是的，我确实想要解锁数据库。',
+'lockbtn'             => '数据库锁定',
+'unlockbtn'           => '解锁数据库',
+'locknoconfirm'       => '您并没有勾选确认按钮。',
+'lockdbsuccesssub'    => '数据库锁定成功',
+'unlockdbsuccesssub'  => '数据库解锁',
+'lockdbsuccesstext'   => '{{SITENAME}}数据库已经锁定。
+<br />请记住在维护完成后重新开放数据库。',
+'unlockdbsuccesstext' => '{{SITENAME}}数据库重新开放。',
+'lockfilenotwritable' => '数据库锁定文件不可写。要锁定和解锁数据库，该文件必须对网络服务器可写。',
+'databasenotlocked'   => '数据库没有锁定。',
+
+# Move page
+'movepage'                => '移动页面',
+'movepagetext'            => "用下面的表单来重命名一个页面，并将其修订历史同时移动到新页面。
+老的页面将成为新页面的重定向页。
+链接到老页面的链接并不会自动更改；
+请检查双重或损坏重定向链接。
+您应当负责确定所有链接依然会链到指定的页面。
+
+注意如果新页面已经有内容的话，页面将'''不会'''被移动，
+除非新页面无内容或是重定向页，而且没有修订历史。
+这意味着您再必要时可以在移动到新页面后再移回老的页面，
+同时您也无法覆盖现有页面。
+
+<b>警告！</b>
+对一个经常被访问的页面而言这可能是一个重大与唐突的更改；
+请在行动前先了结其所可能带来的后果。",
+'movepagetalktext'        => "有关的讨论页将被自动与该页面一起移动，'''除非''': 
+*新页面已经有一个包含内容的讨论页，或者
+*您不勾选下面的复选框。
+
+在这些情况下，您在必要时必须手工移动或合并页面。",
+'movearticle'             => '移动页面',
+'movenologin'             => '未登录',
+'movenologintext'         => '您必须是一名登记用户并且[[Special:Userlogin|登录]]
+后才可移动一个页面。',
+'newtitle'                => '新标题',
+'move-watch'              => '监视此页',
+'movepagebtn'             => '移动页面',
+'pagemovedsub'            => '移动成功',
+'pagemovedtext'           => '页面“[[$1]]”已经移动到“[[$2]]”。',
+'articleexists'           => '该名字的页面已经存在，或者您选择的名字无效。请再选一个名字。',
+'talkexists'              => '页面本身移动成功，
+但是由于新标题下已经有对话页存在，所以对话页无法移动。请手工合并两个页面。',
+'movedto'                 => '移动到',
+'movetalk'                => '移动关联的讨论页',
+'talkpagemoved'           => '相应的对话页也已经移动。',
+'talkpagenotmoved'        => '相应的对话页<strong>没有</strong>被移动。',
+'1movedto2'               => '[[$1]]移动到[[$2]]',
+'1movedto2_redir'         => '[[$1]]通过重定向移动到[[$2]]',
+'movelogpage'             => '移动日志',
+'movelogpagetext'         => '以下是已经移动的页面列表:',
+'movereason'              => '原因',
+'revertmove'              => '恢复该移动',
+'delete_and_move'         => '删除并移动',
+'delete_and_move_text'    => '==需要删除==
+	
+目标文章"[[$1]]"已经存在。你确认需要删除原页面并以进行移动吗？',
+'delete_and_move_confirm' => '是的，删除此页面',
+'delete_and_move_reason'  => '删除以便移动',
+'selfmove'                => '原始标题和目标标题相同，不能移动一个页面到它自身。',
+'immobile_namespace'      => '目标标题属于特别类型；不能将页面移入这个名字空间。',
+
+# Export
+'export'            => '导出页面',
+'exporttext'        => '您可以将特定页面或一组页面的文本以及编辑历史以 XML 格式导出；这样可以将有关页面通过"[[Special:Import|导入页面]]"页面导入到另一个运行 MediaWiki 的网站。
+
+要导出页面，请在下面的文本框中输入页面标题，每行一个标题，
+并选择你是否需要导出带有页面历史的以前的版本，
+或是只选择导出带有最后一次编辑信息的当前版本。
+
+此外你还可以利用链接导出文件，例如你可以使用[[{{ns:special}}:Export/{{int:mainpage}}]]导出{{int:mainpage}}页面。',
+'exportcuronly'     => '仅包含当前的修订，而不是全部的历史。',
+'exportnohistory'   => "----
+'''注意:''' 由于性能原因，从此表单导出页面的全部历史已被禁用。",
+'export-submit'     => '导出',
+'export-addcattext' => '由分类中添加页面:',
+'export-addcat'     => '添加',
+
+# Namespace 8 related
+'allmessages'               => '系统界面',
+'allmessagesname'           => '名称',
+'allmessagesdefault'        => '默认的文字',
+'allmessagescurrent'        => '当前的文字',
+'allmessagestext'           => '这里列出所有可定制的系统界面。',
+'allmessagesnotsupportedUI' => '您当前的界面语言<b>$1</b>在此站点不被[[Special:AllMessages|系统界面消息]]支持。',
+'allmessagesnotsupportedDB' => '系统界面功能处于关闭状态 (wgUseDatabaseMessages)。',
+'allmessagesfilter'         => '按消息名称筛选:',
+'allmessagesmodified'       => '仅显示已修改的',
+
+# Thumbnails
+'thumbnail-more'           => '放大',
+'missingimage'             => '<b>缺少图像</b><br /><i>$1</i>',
+'filemissing'              => '无法找到文件',
+'thumbnail_error'          => '创建缩略图错误: $1',
+'djvu_page_error'          => 'DjVu页面超出范围',
+'djvu_no_xml'              => '无法在DjVu文件中撷取XML',
+'thumbnail_invalid_params' => '不正确的缩略图参数',
+'thumbnail_dest_directory' => '无法建立目标目录',
+
+# Special:Import
+'import'                     => '导入页面',
+'importinterwiki'            => '跨 wiki 导入',
+'import-interwiki-text'      => '选择一个 wiki 和页面标题以进行导入。
+修订日期和编辑者名字将同时被保存。
+所有的跨 wiki 导入操作被记录在[[Special:Log/import|导入日志]]。',
+'import-interwiki-history'   => '复制此页的所有历史版本',
+'import-interwiki-submit'    => '导入',
+'import-interwiki-namespace' => '将页面转移到名字空间:',
+'importtext'                 => '请使用 Special:Export 功能从源 wiki 导出文件，保存到您的磁盘并上传到这里。',
+'importstart'                => '正在导入页面...',
+'import-revision-count'      => '$1个修订',
+'importnopages'              => '没有导入的页面。',
+'importfailed'               => '导入失败: $1',
+'importunknownsource'        => '未知的源导入类型',
+'importcantopen'             => '无法打开导入文件',
+'importbadinterwiki'         => '损坏的内部 wiki 链接',
+'importnotext'               => '空或没有文本',
+'importsuccess'              => '导入成功！',
+'importhistoryconflict'      => '存在冲突的修订历史(可能在之前已经导入过此页面)',
+'importnosources'            => '跨Wiki导入源没有定义，同时不允许直接的历史上传。',
+'importnofile'               => '没有上传导入文件。',
+'importuploaderror'          => '上传导入文件失败；可能是该文件大于允许的文件上传大小。',
+
+# Import log
+'importlogpage'                    => '导入日志',
+'importlogpagetext'                => '来自其它 wiki 的行政性的带编辑历史导入页面。',
+'import-logentry-upload'           => '通过文件上传导入的$1',
+'import-logentry-upload-detail'    => '$1个修订',
+'import-logentry-interwiki'        => '跨 wiki $1',
+'import-logentry-interwiki-detail' => '来自$2的$1个修订',
+
+# Tooltip help for the actions
+'tooltip-pt-userpage'             => '我的用户页',
+'tooltip-pt-anonuserpage'         => '您编辑本站所用IP的对应用户页',
+'tooltip-pt-mytalk'               => '我的对话页',
+'tooltip-pt-anontalk'             => '对于来自此IP地址的编辑的对话',
+'tooltip-pt-preferences'          => '我的参数设置',
+'tooltip-pt-watchlist'            => '我的监视列表',
+'tooltip-pt-mycontris'            => '我的贡献列表',
+'tooltip-pt-login'                => '我们鼓励您登录，但这并不是强制性的',
+'tooltip-pt-anonlogin'            => '我们鼓励您登录，但这并不是强制性的',
+'tooltip-pt-logout'               => '退出',
+'tooltip-ca-talk'                 => '关于页面正文的讨论',
+'tooltip-ca-edit'                 => '你可编辑此页，请在保存前先预览一下。',
+'tooltip-ca-addsection'           => '在该讨论页增加新的评论主题',
+'tooltip-ca-viewsource'           => '该页面已被保护。你可以查看该页源码。',
+'tooltip-ca-history'              => '此页面的早前版本',
+'tooltip-ca-protect'              => '保护此页',
+'tooltip-ca-delete'               => '删除此页',
+'tooltip-ca-undelete'             => '将这个页面恢复到被删除以前的状态',
+'tooltip-ca-move'                 => '移动此页',
+'tooltip-ca-watch'                => '将此页面加入监视列表',
+'tooltip-ca-unwatch'              => '将此页面从监视列表中移去',
+'tooltip-search'                  => '搜索该网站',
+'tooltip-p-logo'                  => '首页',
+'tooltip-n-mainpage'              => '访问首页',
+'tooltip-n-portal'                => '关于本计划, 您可以做什么, 应该如何做',
+'tooltip-n-currentevents'         => '提供当前事件的背景资料',
+'tooltip-n-recentchanges'         => '列出该网站的最近修改',
+'tooltip-n-randompage'            => '随机载入一个页面',
+'tooltip-n-help'                  => '寻求帮助',
+'tooltip-n-sitesupport'           => '资助我们',
+'tooltip-t-whatlinkshere'         => '列出所有与此页相链的页面',
+'tooltip-t-recentchangeslinked'   => '从此页链出的所有页面的更改',
+'tooltip-feed-rss'                => '此页的 RSS 订阅',
+'tooltip-feed-atom'               => '此页的 Atom 订阅',
+'tooltip-t-contributions'         => '查看该用户的贡献列表',
+'tooltip-t-emailuser'             => '向该用户发送一封邮件',
+'tooltip-t-upload'                => '上传图像或媒体文件',
+'tooltip-t-specialpages'          => '所有特殊页面列表',
+'tooltip-ca-nstab-main'           => '查看页面内容',
+'tooltip-ca-nstab-user'           => '查看用户页面',
+'tooltip-ca-nstab-media'          => '查看媒体页面',
+'tooltip-ca-nstab-special'        => '这是一个特殊页面，您不能对它进行编辑',
+'tooltip-ca-nstab-project'        => '查看计划页面',
+'tooltip-ca-nstab-image'          => '查看图像页面',
+'tooltip-ca-nstab-mediawiki'      => '查看系统界面消息',
+'tooltip-ca-nstab-template'       => '查看模板',
+'tooltip-ca-nstab-help'           => '查看帮助页面',
+'tooltip-ca-nstab-category'       => '查看分类页面',
+'tooltip-minoredit'               => '将此标记为小更改',
+'tooltip-save'                    => '保存您的更改',
+'tooltip-preview'                 => '预览您的更改，请在保存前使用此功能！',
+'tooltip-diff'                    => '显示您对该文字所做的更改。',
+'tooltip-compareselectedversions' => '查看此页面两个选定的版本间的差异。',
+'tooltip-watch'                   => '将该页面加到您的监视列表',
+'tooltip-recreate'                => '重建该页面，无论是否被删除。',
+
+# Stylesheets
+'common.css'   => '/* 此处的 CSS 将应用于所有的皮肤 */',
+'monobook.css' => '/* 此处的 CSS 将影响使用 Monobook 皮肤的用户 */',
+
+# Scripts
+'common.js'   => '/* 此处的JavaScript将载入于所有用户每一个页面。 */',
+'monobook.js' => '/* 已经不再使用；请用[[MediaWiki:common.js]] */',
+
+# Metadata
+'nodublincore'      => 'Dublin Core RDF 元数据在该服务器不可用。',
+'nocreativecommons' => 'Creative Commons RDF 元数据在该服务器不可用。',
+'notacceptable'     => '该网站服务器不能提供您的客户端能识别的数据格式。',
+
+# Attribution
+'anonymous'        => '{{SITENAME}}的匿名用户',
+'siteuser'         => '{{SITENAME}}用户$1',
+'lastmodifiedatby' => '此页由$3于$1 $2的最后更改。', # $1 date, $2 time, $3 user
+'and'              => '和',
+'othercontribs'    => '在$1的工作基础上。',
+'others'           => '其他',
+'siteusers'        => '{{SITENAME}}用户$1',
+'creditspage'      => '页面致谢',
+'nocredits'        => '该页没有致谢名单信息。',
+
+# Spam protection
+'spamprotectiontitle'    => '广告保护过滤器',
+'spamprotectiontext'     => '您要保存的页面被广告过滤器阻止。这可能是由于一个到外部站点的链接引起的。',
+'spamprotectionmatch'    => '以下是触发广告过滤器的文本: $1',
+'subcategorycount'       => '在这个分类中有$1个亚类。',
+'categoryarticlecount'   => '在这个分类中有$1篇文章。',
+'category-media-count'   => '在这个分类中有$1个文件。',
+'listingcontinuesabbrev' => '续',
+'spambot_username'       => 'MediaWiki 广告清除',
+'spam_reverting'         => '恢复到不包含链接至$1的最近版本',
+'spam_blanking'          => '所有包含链接至$1的修订，消隐',
+
+# Info page
+'infosubtitle'   => '页面信息',
+'numedits'       => '编辑数 (文章): $1',
+'numtalkedits'   => '编辑数 (讨论页): $1',
+'numwatchers'    => '监视者数目: $1',
+'numauthors'     => '作者数量 (文章): $1',
+'numtalkauthors' => '作者数量 (讨论页): $1',
+
+# Math options
+'mw_math_png'    => '永远使用PNG图像',
+'mw_math_simple' => '如果是简单的公式使用HTML，否则使用PNG图像',
+'mw_math_html'   => '如果可以用HTML，否则用PNG图像',
+'mw_math_source' => '显示为TeX代码 (使用文字浏览器时)',
+'mw_math_modern' => '推荐为新版浏览器使用',
+'mw_math_mathml' => '尽可能使用MathML (试验中)',
+
+# Patrolling
+'markaspatrolleddiff'                 => '标记为已检查',
+'markaspatrolledtext'                 => '标记此文章为已检查',
+'markedaspatrolled'                   => '标记为已检查',
+'markedaspatrolledtext'               => '选定的版本已被标记为已检查.',
+'rcpatroldisabled'                    => '最新更改检查被关闭',
+'rcpatroldisabledtext'                => '最新更改检查的功能目前已关闭。',
+'markedaspatrollederror'              => '不能标志为已检查',
+'markedaspatrollederrortext'          => '你需要指定某个版本才能标志为已检查。',
+'markedaspatrollederror-noautopatrol' => '您无法将你自己所作的更改标记为已检查。',
+
+# Patrol log
+'patrol-log-page' => '巡查记录',
+'patrol-log-line' => '已经标示$1/$2版做已巡查的$3',
+'patrol-log-auto' => '(自动)',
+'patrol-log-diff' => 'r$1',
+
+# Image deletion
+'deletedrevision' => '已删除旧版本$1。',
+
+# Browsing diffs
+'previousdiff' => '←上一个',
+'nextdiff'     => '下一个→',
+
+# Media information
+'mediawarning'         => "'''警告''': 该文件可能包含恶意代码，运行它可能对您的系统带来危险。<hr>",
+'imagemaxsize'         => '在图像描述页对图像大小限制为:',
+'thumbsize'            => '缩略图大小:',
+'file-info'            => '(文件大小: $1, MIME 类型: $2)',
+'file-info-size'       => '($1 × $2 像素，文件大小：$3 ，MIME类型：$4)',
+'file-nohires'         => '<small>无更高解像度可提供。</small>',
+'file-svg'             => '<small>这是一幅无损可缩放的矢量图像。基本大小: $1 × $2 像素。</small>',
+'show-big-image'       => '完整分辨率',
+'show-big-image-thumb' => '<small>这幅略缩图的分辨率: $1 × $2 像素</small>',
+
+'newimages'    => '新建图像画廊',
+'showhidebots' => '($1机器人)',
+'noimages'     => '无可查看图像。',
+
+/*
+Short names for language variants used for language conversion links.
+To disable showing a particular link, set it to 'disable', e.g.
+'variantname-zh-sg' => 'disable',
+Variants for Chinese language
+*/
+'variantname-zh-cn' => '大陆简体',
+'variantname-zh-tw' => '台湾繁体',
+'variantname-zh-hk' => '香港繁体',
+'variantname-zh-sg' => '新加坡简体',
+'variantname-zh'    => '不转换',
+
+# Variants for Serbian language
+'variantname-sr-ec' => 'sr-ec',
+'variantname-sr-el' => 'sr-el',
+'variantname-sr-jc' => 'sr-jc',
+'variantname-sr-jl' => 'sr-jl',
+'variantname-sr'    => 'sr',
+
+# Variants for Kazakh language
+'variantname-kk-tr' => 'kk-tr',
+'variantname-kk-kz' => 'kk-kz',
+'variantname-kk-cn' => 'kk-cn',
+'variantname-kk'    => 'kk',
+
+'passwordtooshort' => '您的密码不正确或太短，不能少于$1个字元，而且必须跟用户名不同。',
+
+# Metadata
+'metadata'          => '元数据',
+'metadata-help'     => '此文件中包含有扩展的信息。这些信息可能是由数码相机或扫描仪在创建或数字化过程中所添加的。
+
+如果此文件的源文件已经被修改，一些信息在修改后的文件中将不能完全反映出来。',
+'metadata-expand'   => '显示详细资料',
+'metadata-collapse' => '隐藏详细资料',
+'metadata-fields'   => '在本信息中所列出的 EXIF 元数据域将包含在图片显示页面, 
+当元数据表损坏时只显示以下信息，其他的元数据默认为隐藏。
+* 相机制造商
+* 相机型号
+* 原始日期时间
+* 曝光时间
+* 光圈(F值)
+* 焦距',
+
+# EXIF tags
+'exif-imagewidth'                  => '宽度',
+'exif-imagelength'                 => '高度',
+'exif-bitspersample'               => '每象素比特数',
+'exif-compression'                 => '压缩方案',
+'exif-photometricinterpretation'   => '象素合成',
+'exif-orientation'                 => '方位',
+'exif-samplesperpixel'             => '象素数',
+'exif-planarconfiguration'         => '数据排列',
+'exif-ycbcrsubsampling'            => '黄色对洋红二次抽样比率',
+'exif-ycbcrpositioning'            => '黄色和洋红配置',
+'exif-xresolution'                 => '水平分辨率',
+'exif-yresolution'                 => '垂直分辨率',
+'exif-resolutionunit'              => 'X 轴与 Y 轴分辨率单位',
+'exif-stripoffsets'                => '图像数据区',
+'exif-rowsperstrip'                => '每带行数',
+'exif-stripbytecounts'             => '每压缩带字节数',
+'exif-jpeginterchangeformat'       => 'JPEG SOI 偏移',
+'exif-jpeginterchangeformatlength' => 'JPEG 数据字节',
+'exif-transferfunction'            => '转移功能',
+'exif-whitepoint'                  => '白点色度',
+'exif-primarychromaticities'       => '主要色度',
+'exif-ycbcrcoefficients'           => '颜色空间转换矩阵系数',
+'exif-referenceblackwhite'         => '黑白参照值对',
+'exif-datetime'                    => '文件更改日期和时间',
+'exif-imagedescription'            => '图像标题',
+'exif-make'                        => '照相机制造商',
+'exif-model'                       => '照相机型号',
+'exif-software'                    => '所用软件',
+'exif-artist'                      => '作者',
+'exif-copyright'                   => '版权所有者',
+'exif-exifversion'                 => 'Exif 版本',
+'exif-flashpixversion'             => '支持的 Flashpix 版本',
+'exif-colorspace'                  => '颜色空间',
+'exif-componentsconfiguration'     => '每分量含义',
+'exif-compressedbitsperpixel'      => '图像压缩模式',
+'exif-pixelydimension'             => '有效图像宽度',
+'exif-pixelxdimension'             => '有效图像高度',
+'exif-makernote'                   => '制造商注释',
+'exif-usercomment'                 => '用户注释',
+'exif-relatedsoundfile'            => '相关的音频文件',
+'exif-datetimeoriginal'            => '数据产生时间',
+'exif-datetimedigitized'           => '数字化处理时间',
+'exif-subsectime'                  => '日期时间秒',
+'exif-subsectimeoriginal'          => '原始日期时间秒',
+'exif-subsectimedigitized'         => '数字化日期时间秒',
+'exif-exposuretime'                => '曝光时间',
+'exif-exposuretime-format'         => '$1 秒 ($2)',
+'exif-fnumber'                     => '光圈(F值)',
+'exif-fnumber-format'              => 'f/$1',
+'exif-exposureprogram'             => '曝光模式',
+'exif-spectralsensitivity'         => '感光',
+'exif-isospeedratings'             => 'ISO 速率',
+'exif-oecf'                        => '光电转换因子',
+'exif-shutterspeedvalue'           => '快门速度',
+'exif-aperturevalue'               => '光圈',
+'exif-brightnessvalue'             => '亮度',
+'exif-exposurebiasvalue'           => '曝光补偿',
+'exif-maxaperturevalue'            => '最大陆地光圈',
+'exif-subjectdistance'             => '物距',
+'exif-meteringmode'                => '测量模式',
+'exif-lightsource'                 => '光源',
+'exif-flash'                       => '闪光灯',
+'exif-focallength'                 => '焦距',
+'exif-focallength-format'          => '$1 mm',
+'exif-subjectarea'                 => '主体区域',
+'exif-flashenergy'                 => '闪光灯强度',
+'exif-spatialfrequencyresponse'    => '空间频率响应',
+'exif-focalplanexresolution'       => 'X轴焦平面分辨率',
+'exif-focalplaneyresolution'       => 'Y轴焦平面分辨率',
+'exif-focalplaneresolutionunit'    => '焦平面分辨率单位',
+'exif-subjectlocation'             => '主题位置',
+'exif-exposureindex'               => '曝光指数',
+'exif-sensingmethod'               => '感光模式',
+'exif-filesource'                  => '文件源',
+'exif-scenetype'                   => '场景类型',
+'exif-cfapattern'                  => 'CFA 模式',
+'exif-customrendered'              => '自定义图像处理',
+'exif-exposuremode'                => '曝光模式',
+'exif-whitebalance'                => '白平衡',
+'exif-digitalzoomratio'            => '数字变焦比率',
+'exif-focallengthin35mmfilm'       => '35毫米胶片焦距',
+'exif-scenecapturetype'            => '情景拍摄类型',
+'exif-gaincontrol'                 => '场景控制',
+'exif-contrast'                    => '对比度',
+'exif-saturation'                  => '饱和度',
+'exif-sharpness'                   => '锐化',
+'exif-devicesettingdescription'    => '设备设定描述',
+'exif-subjectdistancerange'        => '主体距离范围',
+'exif-imageuniqueid'               => '唯一图像ID',
+'exif-gpsversionid'                => 'GPS 标签(tag)版本',
+'exif-gpslatituderef'              => '北纬或南纬',
+'exif-gpslatitude'                 => '纬度',
+'exif-gpslongituderef'             => '东经或西经',
+'exif-gpslongitude'                => '经度',
+'exif-gpsaltituderef'              => '海拔正负参照',
+'exif-gpsaltitude'                 => '海拔',
+'exif-gpstimestamp'                => 'GPS 时间(原子时钟)',
+'exif-gpssatellites'               => '测量使用的卫星',
+'exif-gpsstatus'                   => '接收器状态',
+'exif-gpsmeasuremode'              => '测量模式',
+'exif-gpsdop'                      => '测量精度',
+'exif-gpsspeedref'                 => '速度单位',
+'exif-gpsspeed'                    => 'GPS 接收器速度',
+'exif-gpstrackref'                 => '运动方位参照',
+'exif-gpstrack'                    => '运动方位',
+'exif-gpsimgdirectionref'          => '图像方位参照',
+'exif-gpsimgdirection'             => '图像方位',
+'exif-gpsmapdatum'                 => '使用地理测绘数据',
+'exif-gpsdestlatituderef'          => '目标纬度参照',
+'exif-gpsdestlatitude'             => '目标纬度',
+'exif-gpsdestlongituderef'         => '目标经度的参照',
+'exif-gpsdestlongitude'            => '目标经度',
+'exif-gpsdestbearingref'           => '目标方位参照',
+'exif-gpsdestbearing'              => '目标方位',
+'exif-gpsdestdistanceref'          => '目标距离参照',
+'exif-gpsdestdistance'             => '目标距离',
+'exif-gpsprocessingmethod'         => 'GPS 处理方法名称',
+'exif-gpsareainformation'          => 'GPS 区域名称',
+'exif-gpsdatestamp'                => 'GPS 日期',
+'exif-gpsdifferential'             => 'GPS 差动修正',
+
+# EXIF attributes
+'exif-compression-1' => '未压缩',
+'exif-compression-6' => 'JPEG',
+
+'exif-photometricinterpretation-2' => 'RGB',
+'exif-photometricinterpretation-6' => 'YCbCr',
+
+'exif-unknowndate' => '未知的日期',
+
+'exif-orientation-1' => '标准', # 0th row: top; 0th column: left
+'exif-orientation-2' => '水平翻转', # 0th row: top; 0th column: right
+'exif-orientation-3' => '旋转180°', # 0th row: bottom; 0th column: right
+'exif-orientation-4' => '垂直翻转', # 0th row: bottom; 0th column: left
+'exif-orientation-5' => '旋转90° 逆时针并垂直翻转', # 0th row: left; 0th column: top
+'exif-orientation-6' => '旋转90° 顺时针', # 0th row: right; 0th column: top
+'exif-orientation-7' => '旋转90° 顺时针并垂直翻转', # 0th row: right; 0th column: bottom
+'exif-orientation-8' => '旋转90° 逆时针', # 0th row: left; 0th column: bottom
+
+'exif-planarconfiguration-1' => '矮胖格式',
+'exif-planarconfiguration-2' => '平面格式',
+
+'exif-xyresolution-i' => '$1 dpi',
+'exif-xyresolution-c' => '$1 dpc',
+
+'exif-colorspace-1'      => 'sRGB',
+'exif-colorspace-ffff.h' => 'FFFF.H',
+
+'exif-componentsconfiguration-0' => '不存在',
+'exif-componentsconfiguration-1' => 'Y',
+'exif-componentsconfiguration-2' => 'Cb',
+'exif-componentsconfiguration-3' => 'Cr',
+'exif-componentsconfiguration-4' => 'R',
+'exif-componentsconfiguration-5' => 'G',
+'exif-componentsconfiguration-6' => 'B',
+
+'exif-exposureprogram-0' => '未定义',
+'exif-exposureprogram-1' => '手动',
+'exif-exposureprogram-2' => '标准程序',
+'exif-exposureprogram-3' => '光圈优先模式',
+'exif-exposureprogram-4' => '快门优先模式',
+'exif-exposureprogram-5' => '艺术程序(景深优先)',
+'exif-exposureprogram-6' => '运动程序(快速快门速度优先)',
+'exif-exposureprogram-7' => '肖像模式(适用于背景在焦距以外的近距摄影)',
+'exif-exposureprogram-8' => '风景模式(适用于背景在焦距上的风景照片)',
+
+'exif-subjectdistance-value' => '$1米',
+
+'exif-meteringmode-0'   => '未知',
+'exif-meteringmode-1'   => '平均水平',
+'exif-meteringmode-2'   => '中心加权平均测量',
+'exif-meteringmode-3'   => '点测',
+'exif-meteringmode-4'   => '多点测',
+'exif-meteringmode-5'   => '模式测量',
+'exif-meteringmode-6'   => '局部测量',
+'exif-meteringmode-255' => '其它',
+
+'exif-lightsource-0'   => '未知',
+'exif-lightsource-1'   => '日光灯',
+'exif-lightsource-2'   => '荧光灯',
+'exif-lightsource-3'   => '钨丝灯(白炽灯)',
+'exif-lightsource-4'   => '闪光灯',
+'exif-lightsource-9'   => '晴天',
+'exif-lightsource-10'  => '多云',
+'exif-lightsource-11'  => '深色调阴影',
+'exif-lightsource-12'  => '日光荧光灯(色温 D 5700 – 7100K)',
+'exif-lightsource-13'  => '日温白色荧光灯(N 4600 – 5400K)',
+'exif-lightsource-14'  => '冷白色荧光灯(W 3900 – 4500K)',
+'exif-lightsource-15'  => '白色荧光 (WW 3200 – 3700K)',
+'exif-lightsource-17'  => '标准灯光A',
+'exif-lightsource-18'  => '标准灯光B',
+'exif-lightsource-19'  => '标准灯光C',
+'exif-lightsource-20'  => 'D55',
+'exif-lightsource-21'  => 'D65',
+'exif-lightsource-22'  => 'D75',
+'exif-lightsource-23'  => 'D50',
+'exif-lightsource-24'  => 'ISO摄影棚钨灯',
+'exif-lightsource-255' => '其他光源',
+
+'exif-focalplaneresolutionunit-2' => '英寸',
+
+'exif-sensingmethod-1' => '未定义',
+'exif-sensingmethod-2' => '一块彩色区域传感器',
+'exif-sensingmethod-3' => '两块彩色区域传感器',
+'exif-sensingmethod-4' => '三块彩色区域传感器',
+'exif-sensingmethod-5' => '连续彩色区域传感器',
+'exif-sensingmethod-7' => '三线传感器',
+'exif-sensingmethod-8' => '连续彩色线性传感器',
+
+'exif-filesource-3' => 'DSC',
+
+'exif-scenetype-1' => '直接照像图片',
+
+'exif-customrendered-0' => '标准处理',
+'exif-customrendered-1' => '自定义处理',
+
+'exif-exposuremode-0' => '自动曝光',
+'exif-exposuremode-1' => '手动曝光',
+'exif-exposuremode-2' => '自动曝光感知调节',
+
+'exif-whitebalance-0' => '自动白平衡',
+'exif-whitebalance-1' => '手动白平衡',
+
+'exif-scenecapturetype-0' => '标准',
+'exif-scenecapturetype-1' => '风景',
+'exif-scenecapturetype-2' => '肖像',
+'exif-scenecapturetype-3' => '夜景',
+
+'exif-gaincontrol-0' => '无',
+'exif-gaincontrol-1' => '低增益',
+'exif-gaincontrol-2' => '高增益',
+'exif-gaincontrol-3' => '低减益',
+'exif-gaincontrol-4' => '高减益',
+
+'exif-contrast-0' => '标准',
+'exif-contrast-1' => '低',
+'exif-contrast-2' => '高',
+
+'exif-saturation-0' => '标准',
+'exif-saturation-1' => '低饱和度',
+'exif-saturation-2' => '高饱和度',
+
+'exif-sharpness-0' => '标准',
+'exif-sharpness-1' => '低',
+'exif-sharpness-2' => '高',
+
+'exif-subjectdistancerange-0' => '未知',
+'exif-subjectdistancerange-1' => '自动处理程序(宏)',
+'exif-subjectdistancerange-2' => '近景',
+'exif-subjectdistancerange-3' => '远景',
+
+# Pseudotags used for GPSLatitudeRef and GPSDestLatitudeRef
+'exif-gpslatitude-n' => '北纬',
+'exif-gpslatitude-s' => '南纬',
+
+# Pseudotags used for GPSLongitudeRef and GPSDestLongitudeRef
+'exif-gpslongitude-e' => '东经',
+'exif-gpslongitude-w' => '西经',
+
+'exif-gpsstatus-a' => '测量过程',
+'exif-gpsstatus-v' => '互动测量',
+
+'exif-gpsmeasuremode-2' => '二维测量',
+'exif-gpsmeasuremode-3' => '三维测量',
+
+# Pseudotags used for GPSSpeedRef and GPSDestDistanceRef
+'exif-gpsspeed-k' => '公里每小时',
+'exif-gpsspeed-m' => '英里每小时',
+'exif-gpsspeed-n' => '海里每小时(节)',
+
+# Pseudotags used for GPSTrackRef, GPSImgDirectionRef and GPSDestBearingRef
+'exif-gpsdirection-t' => '真方位',
+'exif-gpsdirection-m' => '地磁方位',
+
+# External editor support
+'edit-externally'      => '用外部程序编辑此文件',
+'edit-externally-help' => '请参见[http://meta.wikimedia.org/wiki/Help:External_editors 设置步骤]了解详细信息。',
+
+# 'all' in various places, this might be different for inflected languages
+'recentchangesall' => '全部',
+'imagelistall'     => '全部',
+'watchlistall1'    => '全部',
+'watchlistall2'    => '全部',
+'namespacesall'    => '全部',
+
+# E-mail address confirmation
+'confirmemail'            => '确认邮箱地址',
+'confirmemail_noemail'    => '您没有在您的[[Special:Preferences|用户设置]]里面输入一个有效的 email 地址。',
+'confirmemail_text'       => '此网站要求您在使用邮件功能之前验证您的邮箱地址。
+点击以下按钮可向您的邮箱发送一封确认邮件。该邮件包含有一行代码链接；
+请在您的浏览器中加载此链接以确认您的邮箱地址是有效的。',
+'confirmemail_pending'    => '<div class="error">
+一个确认代码已经被发送到您的邮箱，您可能需要等几分钟才能收到。如果无法收到，请在申请一个新的确认码！
+</div>',
+'confirmemail_send'       => '邮发确认代码',
+'confirmemail_sent'       => '确认邮件已发送。',
+'confirmemail_oncreate'   => '一个确认代码已经被发送到您的邮箱。该代码并不要求您进行登录，
+但若您要启用在此 wiki 上的任何基于电子邮件的功能，您必须先提交此代码。',
+'confirmemail_sendfailed' => '不能发送确认邮件，请检查邮箱地址是否包含非法字符。
+
+邮件传送员回应: $1',
+'confirmemail_invalid'    => '无效的确认码，该代码可能已经过期。',
+'confirmemail_needlogin'  => '您需要$1以确认您的邮箱地址。',
+'confirmemail_success'    => '您的邮箱已经被确认。您现在可以登录并使用此网站了。',
+'confirmemail_loggedin'   => '您的邮箱地址现在已被确认。',
+'confirmemail_error'      => '你的确认过程发生错误。',
+'confirmemail_subject'    => '{{SITENAME}}邮箱地址确认',
+'confirmemail_body'       => '拥有IP地址$1的用户(可能是您)在{{SITENAME}}创建了账户"$2"，并提交了您的电子邮箱地址。
+		
+请确认这个账户是属于您的，并同时激活在{{SITENAME}}上的
+电子邮件功能。请在浏览器中打开下面的链接:
+
+$3
+
+如果您*没有*提出这个请求，请不要点击此链接。确认码会在$4过期。',
+
+# Inputbox extension, may be useful in other contexts as well
+'tryexact'       => '尝试精确匹配',
+'searchfulltext' => '全文搜索',
+'createarticle'  => '建立文章',
+
+# Scary transclusion
+'scarytranscludedisabled' => '[跨网站的编码转换不可用]',
+'scarytranscludefailed'   => '[抱歉，提取$1失败]',
+'scarytranscludetoolong'  => '[抱歉，URL 过长]',
+
+# Trackbacks
+'trackbackbox'      => '<div id="mw_trackbacks">
+此文章的引用:<br />
+$1
+</div>',
+'trackbackremove'   => '([$1删除])',
+'trackbacklink'     => '引用',
+'trackbackdeleteok' => '该引用已被成功删除。',
+
+# Delete conflict
+'deletedwhileediting' => '警告: 此页在您开始编辑之后已经被删除！',
+'confirmrecreate'     => '在您编辑这个页面后，用户[[User:$1|$1]]([[User talk:$1|对话]])以下列原因删除了这个页面: $2。请在重新创建页面前三思。',
+'recreate'            => '重建',
+
+'unit-pixel' => 'px',
+
+# HTML dump
+'redirectingto' => '重定向到[[$1]]...',
+
+# action=purge
+'confirm_purge'        => '要清除此页面的缓存吗?\n\n$1',
+'confirm_purge_button' => '确定',
+
+'youhavenewmessagesmulti' => '您在$1上有新消息',
+
+'searchcontaining' => "搜索包含''$1''的文章。",
+'searchnamed'      => "搜索名为''$1''的文章。",
+'articletitles'    => '文章以"$1"开头',
+'hideresults'      => '隐藏结果',
+
+# DISPLAYTITLE
+'displaytitle' => '(以[[$1]]链接到此页)',
+
+'loginlanguagelabel' => '语言: $1',
+
+# Multipage image navigation
+'imgmultipageprev'   => '← 上一页',
+'imgmultipagenext'   => '下一页 →',
+'imgmultigo'         => '确定！',
+'imgmultigotopre'    => '到第',
+'imgmultigotopost'   => '页',
+'imgmultiparseerror' => '镜像文件可能已损坏或不正确，因此{{SITENAME}}无法找回页面列表。',
+
+# Table pager
+'ascending_abbrev'         => '升',
+'descending_abbrev'        => '降',
+'table_pager_next'         => '下一页',
+'table_pager_prev'         => '上一页',
+'table_pager_first'        => '第一页',
+'table_pager_last'         => '末一页',
+'table_pager_limit'        => '每页显示$1项',
+'table_pager_limit_submit' => '到',
+'table_pager_empty'        => '没有结果',
+
+# Auto-summaries
+'autosumm-blank'   => '移除所有页面内容',
+'autosumm-replace' => "正在将页面替换为 '$1'",
+'autoredircomment' => '正在重定向到 [[$1]]', # This should be changed to the new naming convention, but existed beforehand
+'autosumm-new'     => '新页面: $1',
+
+# Size units
+'size-bytes'     => '$1 字节',
+'size-kilobytes' => '$1 KB',
+'size-megabytes' => '$1 MB',
+'size-gigabytes' => '$1 GB',
+
+# Live preview
+'livepreview-loading' => '正在加载…',
+'livepreview-ready'   => '正在加载… 完成!',
+'livepreview-failed'  => "实时预览失败!\n尝试标准预览。",
+'livepreview-error'   => "连接失败: $1 \"$2\"\n尝试标准预览。",
+
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesZh_hk.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesZh_hk.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesZh_hk.php	(revision 1280)
@@ -0,0 +1,9 @@
+<?php
+
+/**
+  * @addtogroup Language
+  */
+# Inherit everything for now
+$fallback = 'zh-tw';
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesZh_sg.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesZh_sg.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesZh_sg.php	(revision 1280)
@@ -0,0 +1,9 @@
+<?php
+
+/**
+  * @addtogroup Language
+  */
+# Inherit everything for now
+$fallback = 'zh-cn';
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesZh_tw.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesZh_tw.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesZh_tw.php	(revision 1280)
@@ -0,0 +1,2159 @@
+<?php
+/**
+  * @addtogroup Language
+  */
+
+$fallback = 'zh-cn';
+
+$namespaceNames = array(
+	NS_MEDIA            => 'Media',
+	NS_SPECIAL          => 'Special',
+	NS_MAIN             => '',
+	NS_TALK             => 'Talk',
+	NS_USER             => 'User',
+	NS_USER_TALK        => 'User_talk',
+	# NS_PROJECT set by $wgMetaNamespace
+	NS_PROJECT_TALK     => '$1_talk',
+	NS_IMAGE            => 'Image',
+	NS_IMAGE_TALK       => 'Image_talk',
+	NS_MEDIAWIKI        => 'MediaWiki',
+	NS_MEDIAWIKI_TALK   => 'MediaWiki_talk',
+	NS_TEMPLATE         => 'Template',
+	NS_TEMPLATE_TALK    => 'Template_talk',
+	NS_HELP             => 'Help',
+	NS_HELP_TALK        => 'Help_talk',
+	NS_CATEGORY         => 'Category',
+	NS_CATEGORY_TALK    => 'Category_talk'
+);
+
+$namespaceAliases = array(
+	"媒體" => NS_MEDIA,
+	"特殊" => NS_SPECIAL,
+	"對話" => NS_TALK, 
+	"用戶" => NS_USER,
+	"用戶對話" => NS_USER_TALK,
+	# This has never worked so it's unlikely to annoy anyone if I disable it -- TS
+	#"{{SITENAME}}_對話" => NS_PROJECT_TALK
+	"圖像" => NS_IMAGE,
+	"圖像對話" => NS_IMAGE_TALK,
+	"樣板" => NS_TEMPLATE,
+	"樣板討論" => NS_TEMPLATE_TALK,
+	"幫助" => NS_HELP,
+	"幫助討論" => NS_HELP_TALK,
+	"分類" => NS_CATEGORY,
+	"分類討論" => NS_CATEGORY_TALK,
+);
+
+$skinNames = array(
+	'standard' => '標準',
+	'nostalgia' => '懷舊',
+	'cologneblue' => '科隆香水藍',
+	'davinci' => '達芬奇',
+);
+
+$bookstoreList = array(
+	"博客來書店" => "http://www.books.com.tw/exep/openfind_book_keyword.php?cat1=4&key1=$1",
+	"三民書店" => "http://www.sanmin.com.tw/page-qsearch.asp?ct=search_isbn&qu=$1",
+	"天下書店" => "http://www.cwbook.com.tw/cw/TS.jsp?schType=product.isbn&schStr=$1",
+	"新絲書店" => "http://www.silkbook.com/function/Search_List_Book.asp?item=5&text=$1"
+);
+
+
+$messages = array(
+# User preference toggles
+'tog-underline'               => '下劃鏈結',
+'tog-highlightbroken'         => '毀壞的鏈結格式<a href="" class="new">像這樣</a> (或者像這個<a href="" class="internal">?</a>)',
+'tog-justify'                 => '段落對齊',
+'tog-hideminor'               => '最近更改中隱藏小修改',
+'tog-extendwatchlist'         => '增強監視清單以顯示所有可用更改',
+'tog-usenewrc'                => '增強最近更改 (JavaScript)',
+'tog-numberheadings'          => '標題自動編號',
+'tog-showtoolbar'             => '顯示編輯工具欄',
+'tog-editondblclick'          => '雙擊編輯頁面 (JavaScript)',
+'tog-editsection'             => '允許通過點擊[編輯]連結編輯段落',
+'tog-editsectiononrightclick' => '允許右擊標題編輯段落 (JavaScript)',
+'tog-showtoc'                 => '顯示目錄 (針對一頁超過3個標題的文章)',
+'tog-rememberpassword'        => '在這部電腦上記住我的密碼',
+'tog-editwidth'               => '編輯欄位已有最大寬度',
+'tog-watchcreations'          => '將我創建的頁面添加到我的監視列表中',
+'tog-watchdefault'            => '將我更改的頁面添加到我的監視列表中',
+'tog-watchmoves'              => '將我移動的頁面加入我的監視列表',
+'tog-watchdeletion'           => '將我刪除的頁面加入我的監視列表',
+'tog-minordefault'            => '預設將編輯設定為小編輯',
+'tog-previewontop'            => '在編輯框上方顯示預覽',
+'tog-previewonfirst'          => '第一次編輯時顯示原文內容的預覽',
+'tog-nocache'                 => '停用頁面快取',
+'tog-enotifwatchlistpages'    => '當我監視的頁面改變時發電子郵件給我',
+'tog-enotifusertalkpages'     => '當我的對話頁發生改變時發電子郵件給我',
+'tog-enotifminoredits'        => '即使是頁面的小修改也向我發電子郵件',
+'tog-enotifrevealaddr'        => '在通知郵件中顯示我的電子郵件位址',
+'tog-shownumberswatching'     => '顯示監視用戶的數目',
+'tog-fancysig'                => '使用原始簽名 (不產生自動連結)',
+'tog-externaleditor'          => '預設使用外部編輯器',
+'tog-externaldiff'            => '預設使用外部差異分析',
+'tog-showjumplinks'           => '啟用「跳轉到」訪問連結',
+'tog-uselivepreview'          => '使用實時預覽 (JavaScript) (試驗中)',
+'tog-forceeditsummary'        => '當沒有輸入摘要時提醒我',
+'tog-watchlisthideown'        => '監視列表中隱藏我的編輯',
+'tog-watchlisthidebots'       => '監視列表中隱藏機器人的編輯',
+'tog-watchlisthideminor'      => '監視列表中隱藏小修改',
+'tog-nolangconversion'        => '不進行用字轉換',
+'tog-ccmeonemails'            => '當我寄電子郵件給其他用戶時，也寄一份複本到我的信箱。',
+'tog-diffonly'                => '在比較兩個修訂版本差異時不顯示文章內容',
+
+'underline-always'  => '總是使用',
+'underline-never'   => '從不使用',
+'underline-default' => '瀏覽器預設',
+
+'skinpreview' => '(預覽)',
+
+# Dates
+'sunday'        => '星期日',
+'monday'        => '星期一',
+'tuesday'       => '星期二',
+'wednesday'     => '星期三',
+'thursday'      => '星期四',
+'friday'        => '星期五',
+'saturday'      => '星期六',
+'sun'           => '日',
+'mon'           => '一',
+'tue'           => '二',
+'wed'           => '三',
+'thu'           => '四',
+'fri'           => '五',
+'sat'           => '六',
+'january'       => '1月',
+'february'      => '2月',
+'march'         => '3月',
+'april'         => '4月',
+'may_long'      => '5月',
+'june'          => '6月',
+'july'          => '7月',
+'august'        => '8月',
+'september'     => '9月',
+'october'       => '10月',
+'november'      => '11月',
+'december'      => '12月',
+'january-gen'   => '一月',
+'february-gen'  => '二月',
+'march-gen'     => '三月',
+'april-gen'     => '四月',
+'may-gen'       => '五月',
+'june-gen'      => '六月',
+'july-gen'      => '七月',
+'august-gen'    => '八月',
+'september-gen' => '九月',
+'october-gen'   => '十月',
+'november-gen'  => '十一月',
+'december-gen'  => '十二月',
+'jan'           => '1月',
+'feb'           => '2月',
+'mar'           => '3月',
+'apr'           => '4月',
+'may'           => '5月',
+'jun'           => '6月',
+'jul'           => '7月',
+'aug'           => '8月',
+'sep'           => '9月',
+'oct'           => '10月',
+'nov'           => '11月',
+'dec'           => '12月',
+
+# Bits of text used by many pages
+'categories'            => '頁面分類',
+'pagecategories'        => '$1個分類',
+'category_header'       => '類別「$1」中的文章',
+'subcategories'         => '附分類',
+'category-media-header' => '"$1"分類中的媒體',
+
+'linkprefix'        => '/^(.*?)([a-zA-Z\x80-\xff]+)$/sD',
+'mainpagetext'      => "<big>'''已成功安裝 MediaWiki!'''</big>",
+'mainpagedocfooter' => '請訪問 [http://meta.wikimedia.org/wiki/Help:Contents 用戶手冊] 以獲得使用此 wiki 軟件的訊息！
+
+== 入門 ==
+
+* [http://www.mediawiki.org/wiki/Help:Configuration_settings MediaWiki 配置設定清單]
+* [http://www.mediawiki.org/wiki/Help:FAQ MediaWiki 常見問題解答]
+* [http://mail.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki 發佈郵件清單]',
+
+'about'          => '關於',
+'article'        => '文章',
+'newwindow'      => '(在新視窗中打開)',
+'cancel'         => '取消',
+'qbfind'         => '尋找',
+'qbbrowse'       => '瀏覽',
+'qbedit'         => '編輯',
+'qbpageoptions'  => '頁面選項',
+'qbpageinfo'     => '頁面訊息',
+'qbmyoptions'    => '我的選項',
+'qbspecialpages' => '特殊頁面',
+'moredotdotdot'  => '更多...',
+'mypage'         => '我的頁面',
+'mytalk'         => '我的對話頁',
+'anontalk'       => '該IP的對話頁',
+'navigation'     => '導航',
+
+# Metadata in edit box
+'metadata_help' => '元數據:',
+
+'errorpagetitle'    => '錯誤',
+'returnto'          => '返回到$1。',
+'tagline'           => '出自{{SITENAME}}',
+'help'              => '幫助',
+'search'            => '搜索',
+'searchbutton'      => '搜索',
+'go'                => '進入',
+'searcharticle'     => '進入',
+'history'           => '頁面歷史',
+'history_short'     => '歷史',
+'updatedmarker'     => '我上次訪問以來的修改',
+'info_short'        => '資訊',
+'printableversion'  => '可列印版',
+'permalink'         => '永久連結',
+'print'             => '列印',
+'edit'              => '編輯',
+'editthispage'      => '編輯本頁',
+'delete'            => '刪除',
+'deletethispage'    => '刪除本頁',
+'undelete_short'    => '反刪除$1項修訂',
+'protect'           => '保護',
+'protect_change'    => '更改保護',
+'protectthispage'   => '保護本頁',
+'unprotect'         => '解除保護',
+'unprotectthispage' => '解除此頁保護',
+'newpage'           => '新頁面',
+'talkpage'          => '討論本頁',
+'talkpagelinktext'  => '對話',
+'specialpage'       => '特殊頁面',
+'personaltools'     => '個人工具',
+'postcomment'       => '發表評論',
+'articlepage'       => '查看文章',
+'talk'              => '討論',
+'views'             => '檢視',
+'toolbox'           => '工具箱',
+'userpage'          => '查看用戶頁面',
+'projectpage'       => '查看計劃頁面',
+'imagepage'         => '查看圖像頁面',
+'mediawikipage'     => '檢視信息頁面',
+'templatepage'      => '檢視模板頁面',
+'viewhelppage'      => '檢視說明頁面',
+'categorypage'      => '檢視分類頁面',
+'viewtalkpage'      => '檢視討論頁面',
+'otherlanguages'    => '其它語言',
+'redirectedfrom'    => '(重定向自$1)',
+'redirectpagesub'   => '重定向頁面',
+'lastmodifiedat'    => '這頁的最後修訂在 $1 $2。', # $1 date, $2 time
+'viewcount'         => '本頁面已經被瀏覽$1次。',
+'protectedpage'     => '被保護頁',
+'jumpto'            => '跳轉到:',
+'jumptonavigation'  => '導航',
+'jumptosearch'      => '搜索',
+
+# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
+'aboutsite'         => '關於{{SITENAME}}',
+'aboutpage'         => '{{ns:project}}:關於',
+'bugreports'        => '錯誤報告',
+'bugreportspage'    => '{{ns:project}}:錯誤報告',
+'copyright'         => '本站的全部文本內容在$1之條款下提供。',
+'copyrightpagename' => '{{SITENAME}}版權',
+'copyrightpage'     => '{{ns:project}}:版權訊息',
+'currentevents'     => '現時事件',
+'currentevents-url' => '現時事件',
+'disclaimers'       => '免責聲明',
+'disclaimerpage'    => 'Project:一般免責聲明',
+'edithelp'          => '編輯幫助',
+'edithelppage'      => '{{ns:project}}:如何編輯頁面',
+'faq'               => '常見問題解答',
+'faqpage'           => '{{ns:project}}:常見問題解答',
+'helppage'          => '{{ns:project}}:幫助',
+'mainpage'          => '首頁',
+'policy-url'        => 'Project:方針',
+'portal'            => '社區',
+'portal-url'        => '{{ns:project}}:社區',
+'privacy'           => '隱私政策',
+'privacypage'       => 'Project:隱私政策',
+'sitesupport'       => '贊助',
+'sitesupport-url'   => '{{ns:project}}:贊助',
+
+'badaccess'        => '權限錯誤',
+'badaccess-group0' => '您剛才的請求不允許執行。',
+'badaccess-group1' => '您剛才的請求只有$1用戶組的用戶才能使用。',
+'badaccess-group2' => '您剛才的請求只有$1用戶組的用戶才能使用。',
+'badaccess-groups' => '您剛才的請求只有$1用戶組的用戶才能使用。',
+
+'versionrequired'     => '需要MediaWiki $1 版',
+'versionrequiredtext' => '需要版本$1的 MediaWiki 才能使用此页。参见[[Special:Version|版本頁]]。',
+
+'ok'                  => 'OK',
+'pagetitle'           => '$1 - {{SITENAME}}',
+'retrievedfrom'       => '取自"$1"',
+'youhavenewmessages'  => '您有$1（$2）。',
+'newmessageslink'     => '新信息',
+'newmessagesdifflink' => '上次更改',
+'editsection'         => '編輯',
+'editold'             => '編輯',
+'editsectionhint'     => '編輯段落: $1',
+'toc'                 => '目錄',
+'showtoc'             => '顯示',
+'hidetoc'             => '隱藏',
+'thisisdeleted'       => '查看或恢復$1?',
+'viewdeleted'         => '檢視$1',
+'restorelink'         => '$1個被刪除的版本',
+'feedlinks'           => '訂閱:',
+'feed-invalid'        => '無效的訂閱類型。',
+
+# Short words for each namespace, by default used in the 'article' tab in monobook
+'nstab-main'      => '文章',
+'nstab-user'      => '用戶頁面',
+'nstab-media'     => '媒體頁面',
+'nstab-special'   => '特殊頁面',
+'nstab-project'   => '計劃頁面',
+'nstab-image'     => '檔案',
+'nstab-mediawiki' => '信息',
+'nstab-template'  => '模板',
+'nstab-help'      => '幫助頁面',
+'nstab-category'  => '分類',
+
+# Main script and global functions
+'nosuchaction'      => '沒有這個命令',
+'nosuchactiontext'  => 'URL請求的命令無法被這個wiki識別。',
+'nosuchspecialpage' => '沒有這個特殊頁面',
+'nospecialpagetext' => '您請求的頁面無法被這個wiki識別。',
+
+# General errors
+'error'                => '錯誤',
+'databaseerror'        => '資料庫錯誤',
+'dberrortext'          => '發生資料庫查詢語法錯誤。
+可能是由於軟體自身的錯誤所引起。
+最後一次資料庫查詢指令是: 
+<blockquote><tt>$1</tt></blockquote>
+來自於函數 "<tt>$2</tt>"。
+MySQL返回錯誤 "<tt>$3: $4</tt>"。',
+'dberrortextcl'        => '發生了一個資料庫查詢語法錯誤。
+最後一次的資料庫查詢是:
+「$1」
+來自於函數「$2」。
+MySQL返回錯誤「$3: $4」。',
+'noconnect'            => '無法在$1上連接資料庫',
+'nodb'                 => '無法選擇資料庫 $1',
+'cachederror'          => '下面的頁面是被請求頁面在快取中的一個副本，可能不是最新版本的。',
+'laggedslavemode'      => '警告: 頁面可能不包含最近的更新。',
+'readonly'             => '資料庫禁止訪問',
+'enterlockreason'      => '請輸入禁止訪問原因, 包括估計重新開放的時間',
+'readonlytext'         => '資料庫目前禁止輸入新內容及更改，
+這很可能是由於資料庫正在維修，之後即可恢復。
+管理員有如下解釋:
+<p>$1</p>',
+'missingarticle'       => '資料庫找不到文字"$1"。
+
+<p>通常這是由於修訂歷史頁上過時的連結到已經被刪除的頁面所導致的。</p>
+
+<p>如果情況不是這樣，您可能找到了軟體內的一個臭蟲。
+請記錄下URL地址，並向管理員報告。</p>',
+'readonly_lag'         => '附屬資料庫伺服器正在將快取更新到主伺服器，資料庫已被自動鎖定',
+'internalerror'        => '內部錯誤',
+'filecopyerror'        => '無法複製文件"$1"到"$2"。',
+'filerenameerror'      => '無法重命名文件"$1"到"$2"。',
+'filedeleteerror'      => '無法刪除文件"$1"。',
+'filenotfound'         => '找不到文件"$1"。',
+'unexpected'           => '不正常值："$1"="$2"。',
+'formerror'            => '錯誤：無法提交表單',
+'badarticleerror'      => '無法在本頁上進行此項操作。',
+'cannotdelete'         => '無法刪除選定的頁面或圖像（它可能已經被其他人刪除了）。',
+'badtitle'             => '錯誤的標題',
+'badtitletext'         => '所請求頁面的標題是無效的、不存在，跨語言或跨wiki連結的標題錯誤。',
+'perfdisabled'         => '抱歉！由於此項操作有可能造成資料庫癱瘓，目前暫時無法使用。',
+'perfdisabledsub'      => '這裡是自$1的複製版本：', # obsolete?
+'perfcached'           => '下列是快取資料，因此可能不是最新的:',
+'perfcachedts'         => '下列是快取資料，其最後更新時間是$1。',
+'querypage-no-updates' => '當前禁止對此頁面進行更新。此處的資料將不能被立即重新整理。',
+'wrong_wfQuery_params' => '錯誤的參數導致wfQuery()<br />函數：$1<br />查詢：$2',
+'viewsource'           => '原始碼',
+'viewsourcefor'        => '$1的原始碼',
+'protectedpagetext'    => '該頁面已被鎖定以防止編輯。',
+'viewsourcetext'       => '你可以檢視並複製本頁面的原始碼。',
+'protectedinterface'   => '該頁提供了軟體的介面文字，它已被鎖定以防止隨意的修改。',
+'editinginterface'     => "'''警告:''' 您正在編輯的頁面是用於提供軟體的介面文字。改變此頁將影響其他用戶的介面外觀。",
+'sqlhidden'            => '(隱藏SQL查詢)',
+'cascadeprotected'     => '這個頁面已經被保護，因為這個頁面被以下已標註"聯鎖保護"的{{PLURAL:$1|一個|多個}}被保護頁面包含:',
+
+# Login and logout pages
+'logouttitle'                => '用戶退出',
+'logouttext'                 => '您現在已經退出。
+您可以繼續以匿名方式使用{{SITENAME}}，或再次以相同或不同用戶身份登入。',
+'welcomecreation'            => '<h2>歡迎，$1!</h2><p>您的帳號已經建立，不要忘記設置{{SITENAME}}個人參數。</p>',
+'loginpagetitle'             => '用戶登入',
+'yourname'                   => '您的用戶名',
+'yourpassword'               => '您的密碼',
+'yourpasswordagain'          => '再次輸入密碼',
+'remembermypassword'         => '下次登入記住密碼。',
+'yourdomainname'             => '您的網域',
+'externaldberror'            => '這可能是由於外部驗證資料庫錯誤或您被禁止更新您的外部帳號。',
+'loginproblem'               => '<b>登入有問題。</b><br />再試一次！',
+'alreadyloggedin'            => '<strong>用戶$1，您已經登入了!</strong><br />',
+'login'                      => '登入',
+'loginprompt'                => '您必須允許瀏覽器紀錄Cookie才能成功登入 {{SITENAME}} 並順利進行操作',
+'userlogin'                  => '登入／建立新帳號',
+'logout'                     => '登出',
+'userlogout'                 => '登出',
+'notloggedin'                => '未登入',
+'nologin'                    => '您還沒有帳號嗎？$1。',
+'nologinlink'                => '建立新帳號',
+'createaccount'              => '建立新帳號',
+'gotaccount'                 => '已經擁有帳號？$1。',
+'gotaccountlink'             => '登入',
+'createaccountmail'          => '通過e-Mail',
+'badretype'                  => '你所輸入的密碼並不相同。',
+'userexists'                 => '您所輸入的用戶名稱已經存在，請另選一個。',
+'youremail'                  => '電子郵件 *:',
+'username'                   => '用戶名:',
+'uid'                        => '用戶ID:',
+'yourrealname'               => '真實姓名 *:',
+'yourlanguage'               => '介面語言:',
+'yourvariant'                => '字體變換:',
+'yournick'                   => '暱稱:',
+'badsig'                     => '錯誤的原始簽名；請檢查HTML標籤。',
+'email'                      => '電子郵件',
+'prefs-help-email-enotif'    => '啟用此選項時你的電子郵件地址也將被用於發送郵件通知。',
+'prefs-help-realname'        => '* 真實姓名 (可選):用以對您的貢獻署名。',
+'loginerror'                 => '登入錯誤',
+'prefs-help-email'           => '* 電子郵件 (可選):讓他人通過網站在不知道您的電子郵件地址的情況下通過電子郵件與您聯絡，以及通過電子郵件取得遺忘的密碼。',
+'nocookiesnew'               => '已成功創建新賬戶！偵測到您已關閉 Cookies，請開啟它並登入。',
+'nocookieslogin'             => '本站利用 Cookies 進行用戶登入，偵測到您已關閉 Cookies，請開啟它並重新登入。',
+'noname'                     => '你沒有輸入一個有效的用戶名。',
+'loginsuccesstitle'          => '登入成功',
+'loginsuccess'               => '你現在以 "$1"的身份登入{{SITENAME}}。',
+'nosuchuser'                 => '找不到用戶 "$1"。
+檢查您的拼寫，或者用下面的表格建立一個新帳號。',
+'nosuchusershort'            => '沒有一個名為「$1」的用戶。請檢查您輸入的文字是否有錯誤。',
+'nouserspecified'            => '你需要指定一個用戶名。',
+'wrongpassword'              => '您輸入的密碼錯誤，請再試一次。',
+'wrongpasswordempty'         => '沒有輸入密碼！請重試。',
+'mailmypassword'             => '將新密碼寄給我',
+'passwordremindertitle'      => '{{SITENAME}}密碼提醒',
+'passwordremindertext'       => '有人(可能是您，來自IP位址$1)要求我們將新的{{SITENAME}} ($4) 的登入密碼寄給您。用戶"$2"的密碼現在是"$3"。請立即登入並更改密碼。如果是其他人發出了該請求，或者您已經記起了您的密碼並不準備改變它，您可以忽略此消息並繼續使用您的舊密碼。',
+'noemail'                    => '用戶"$1"沒有登記電子郵件地址。',
+'passwordsent'               => '用戶"$1"的新密碼已經寄往所登記的電子郵件地址。
+請在收到後再登入。',
+'blocked-mailpassword'       => '由於這個用戶被封禁，我們暫時禁止您請求申請新密碼。造成不便敬請見諒',
+'eauthentsent'               => '一封確認信已經發送到所示的地址。在發送其它郵件到此帳戶前，您必須首先依照這封信中的指導確認這個電子郵件信箱真實有效。',
+'throttled-mailpassword'     => '密碼提醒已經在前$1小時內發送。為防止濫用，限定在$1小時內僅發送一次密碼提醒。',
+'mailerror'                  => '發送郵件錯誤: $1',
+'acct_creation_throttle_hit' => '對不起，您已經註冊了$1帳號。你不能再註冊了。',
+'emailauthenticated'         => '您的電子郵件地址已經於$1確認有效。',
+'emailnotauthenticated'      => '您的郵箱位址<strong>還沒被認証</strong>。以下功能將不會發送任何郵件。',
+'noemailprefs'               => '<strong>指定一個電子郵件地址以使用此功能</strong>',
+'emailconfirmlink'           => '確認您的郵箱地址',
+'invalidemailaddress'        => '郵箱地址格式不正確，請輸入正確的郵箱位址或清空該輸入框。',
+'accountcreated'             => '已建立帳戶',
+'accountcreatedtext'         => '$1的帳戶已經被創建。',
+
+# Password reset dialog
+'resetpass'               => '重設帳戶密碼',
+'resetpass_announce'      => '您是透過一個臨時的發送到郵件中的代碼登入的。要完成登入，您必須在這裡設定一個新密碼:',
+'resetpass_text'          => '<!-- 在此處加入文字 -->',
+'resetpass_header'        => '重設密碼',
+'resetpass_submit'        => '設定密碼並登入',
+'resetpass_success'       => '您的密碼已經被成功更改﹗現下正為您登入...',
+'resetpass_bad_temporary' => '無效的臨時密碼。您可能已成功地更改了您的密碼，或者需要請求一個新的臨時密碼。',
+'resetpass_forbidden'     => '無法在此 wiki 上更改密碼',
+'resetpass_missing'       => '無表單資料。',
+
+# Edit page toolbar
+'bold_sample'     => '粗體文字',
+'bold_tip'        => '粗體文字',
+'italic_sample'   => '斜體文字',
+'italic_tip'      => '斜體文字',
+'link_sample'     => '連結標題',
+'link_tip'        => '內部連結',
+'extlink_sample'  => 'http://www.example.com 連結標題',
+'extlink_tip'     => '外部連結(加前綴 http://)',
+'headline_sample' => '大標題文字',
+'headline_tip'    => '2級標題文字',
+'math_sample'     => '在此插入數學公式',
+'math_tip'        => '插入數學公式 (LaTeX)',
+'nowiki_sample'   => '在此插入非格式文字',
+'nowiki_tip'      => '插入非格式文字',
+'image_sample'    => 'Example.jpg',
+'image_tip'       => '嵌入圖像',
+'media_sample'    => 'Example.ogg',
+'media_tip'       => '媒體檔案連結',
+'sig_tip'         => '帶有時間的簽名',
+'hr_tip'          => '水平線 (小心使用)',
+
+# Edit pages
+'summary'                   => '摘要',
+'subject'                   => '主題',
+'minoredit'                 => '這是一個小修改',
+'watchthis'                 => '監視本頁',
+'savearticle'               => '保存本頁',
+'preview'                   => '預覽',
+'showpreview'               => '顯示預覽',
+'showlivepreview'           => '即時預覽',
+'showdiff'                  => '顯示差異',
+'anoneditwarning'           => "'''警告:'''您沒有登錄，您的IP位址將記錄在此頁的編輯歷史中。",
+'missingsummary'            => "'''提示:''' 您沒有提供一個編輯摘要。如果您再次單擊儲存，您的編輯將不帶編輯摘要儲存。",
+'missingcommenttext'        => '請在下面輸入評論。',
+'missingcommentheader'      => "'''提示:''' 您沒有為此評論提供一個標題。如果您再次單擊儲存，您的編輯將不帶標題儲存。",
+'summary-preview'           => '摘要預覽',
+'subject-preview'           => '主題/標題預覽',
+'blockedtitle'              => '用戶被查封',
+'blockedtext'               => "<big>你的用戶名或IP地址已經被$1查封。</big>
+
+這次查封是由$1所封的。當中的原因是''$2''。
+
+你可以聯絡$1或者其他的[[{{MediaWiki:grouppage-sysop}}|管理員]]，討論這次查封。
+
+除非你已經在你的[[Special:Preferences|帳號參數設置]]中設定了一個有效的電子郵件地址，
+否則你是不能使用「電郵這位用戶」的功能。你的IP地址是$3，而該查封ID是 #$5。 請你在所有查詢中註明這地址及／或查封ID。",
+'blockedoriginalsource'     => "以下是'''$1'''的原始碼:",
+'blockededitsource'         => "你對'''$1'''進行'''編輯'''的文字如下:",
+'whitelistedittitle'        => '登入後才可編輯',
+'whitelistedittext'         => '您必須先$1才可編輯頁面。',
+'whitelistreadtitle'        => '登入後才可閱讀',
+'whitelistreadtext'         => '您必須先[[Special:Userlogin|登入]]才可閱讀頁面。',
+'whitelistacctitle'         => '您被禁止建立帳號',
+'whitelistacctext'          => '在本Wiki中建立帳號您必須先[[Special:Userlogin|登入]]並擁有相關許可權。',
+'confirmedittitle'          => '郵件確認後才可編輯',
+'confirmedittext'           => '在編輯此頁之前您必須確認您的郵箱位址。請透過[[Special:Preferences|參數設定]]設定並驗証您的郵箱位址。',
+'nosuchsectiontitle'        => '沒有這個段落',
+'nosuchsectiontext'         => '您嘗試編輯的段落並不存在。在這裡是無第$1個段落，所以是沒有一個地方去儲存你的編輯。',
+'loginreqtitle'             => '需要登入',
+'loginreqlink'              => '登入',
+'loginreqpagetext'          => '您必須$1才能檢視其它頁面。',
+'accmailtitle'              => '密碼已寄出',
+'accmailtext'               => "'$1'的密碼已經寄到$2。",
+'newarticle'                => '(新)',
+'newarticletext'            => '您進入了一個尚未創建的頁面。
+要創建該頁面，請在下面的編輯框中輸入內容(詳情參見[[Help:幫助|幫助]])。
+如果您是不小心來到此頁面，直接點擊您瀏覽器中的"返回"按鈕返回。',
+'anontalkpagetext'          => "---- ''這是一個還未建立帳號的匿名用戶的對話頁。我們因此只能用IP地址來與他／她聯絡。該IP地址可能由幾名用戶共享。如果您是一名匿名用戶並認為本頁上的評語與您無關，請[[Special:Userlogin|創建新帳號或登入]]以避免在未來於其他匿名用戶混淆。''",
+'noarticletext'             => '此頁目前沒有內容，您可以在其它頁[[Special:Search/{{PAGENAME}}|搜索此頁標題]]或[{{fullurl:{{NAMESPACE}}:{{PAGENAME}}|action=edit}} 編輯此頁]。',
+'clearyourcache'            => "'''注意:''' 在儲存以後, 您必須清除瀏覽器的快取才能看到所作出的改變。 '''Mozilla / Firefox / Safari:''' 按著 ''Shift'' 再點擊''重新整理''(或按下''Ctrl-Shift-R''，在蘋果Mac上按下''Cmd-Shift-R'')；'''IE:''' 按著 ''Ctrl'' 再點擊 ''重新整理''，或按下 ''Ctrl-F5''；'''Konqueror:''' 只需點擊 ''重新整理''；'''Opera:''' 用戶需要在 ''工具-設定'' 中完整地清除它們的快取。",
+'usercssjsyoucanpreview'    => "<strong>提示:</strong> 在保存前請用'顯示預覧'按鈕來測試您新的 CSS/JS 。",
+'usercsspreview'            => "'''注意您只是在預覽您的個人 CSS, 還沒有儲存﹗'''",
+'userjspreview'             => "'''注意您只是在測試／預覽您的個人 JavaScript，還沒有儲存﹗'''",
+'userinvalidcssjstitle'     => "'''警告:''' 不存在面板\"\$1\"。注意自訂的 .css 和 .js 頁要使用小寫標題，例如，{{ns:user}}:Foo/monobook.css 不同於 {{ns:user}}:Foo/Monobook.css。",
+'updated'                   => '(已更新)',
+'note'                      => '<strong>注意:</strong>',
+'previewnote'               => '請記住這只是預覽，內容還未保存！',
+'previewconflict'           => '這個預覽顯示了上面文字編輯區中的內容。它將在你選擇保存後出現。',
+'session_fail_preview'      => '<strong>很抱歉！由於部份資料遺失，我們無法處理您的編輯。請再試一次，如果仍然失敗，請登出後重新登入。</strong>',
+'session_fail_preview_html' => '<strong>很抱歉！部份資料已遺失，我們無法處理您的編輯。</strong><strong>如果這個編輯過程沒有問題，請再試一次。如果仍然有問題，請登出後再重新登入一次。</strong>',
+'importing'                 => '正在匯入$1',
+'editing'                   => '正在編輯$1',
+'editinguser'               => '正在編輯用戶<b>$1</b>',
+'editingsection'            => '正在編輯$1 (段落)',
+'editingcomment'            => '正在編輯$1 (評論)',
+'editconflict'              => '編輯衝突：$1',
+'explainconflict'           => '有人在你開始編輯後更改了頁面。
+上面的文字框內顯示的是目前本頁的內容。
+你所做的修改顯示在下面的文字框中。
+你應當將你所做的修改加入現有的內容中。
+<b>只有</b>在上面文字框中的內容會在你點擊"保存頁面"後被保存。<br />',
+'yourtext'                  => '您的文字',
+'storedversion'             => '已保存版本',
+'nonunicodebrowser'         => '<strong>警告: 您的瀏覽器不兼容Unicode編碼。這裡有一個工作區將使您能安全地編輯文章: 非ASCII字元將以十六進製編碼模式出現在編輯框中。</strong>',
+'editingold'                => '<strong>警告：你正在編輯的是本頁的舊版本。
+如果你保存它的話，在本版本之後的任何修改都會丟失。</strong>',
+'yourdiff'                  => '差異',
+'copyrightwarning'          => '請注意您對{{SITENAME}}的所有貢獻都被認為是在$2下發佈，請查看在$1的細節。
+如果您不希望您的文字被任意修改和再散佈，請不要提交。<br />
+您同時也要向我們保證您所提交的內容是您自己所作，或得自一個不受版權保護或相似自由的來源。
+<strong>不要在未獲授權的情況下發表！</strong><br />',
+'copyrightwarning2'         => '請注意您對{{SITENAME}}的所有貢獻
+都可能被其他貢獻者編輯，修改或刪除。
+如果您不希望您的文字被任意修改和再散佈，請不要提交。<br />
+您同時也要向我們保證您所提交的內容是您自己所作，或得自一個不受版權保護或相似自由的來源（參閱$1的細節）。
+<strong>不要在未獲授權的情況下發表！</strong>',
+'longpagewarning'           => '<strong>警告: 本頁長度達$1KB；一些瀏覽器將無法編輯長過32KB文章。請考慮將本文切割成幾個小段落。</strong>',
+'longpageerror'             => '<strong>錯誤: 您所提交的文字長度有$1KB，這大於$2KB的最大值。該文本不能被儲存。</strong>',
+'readonlywarning'           => '<strong>警告: 資料庫被鎖以進行維護，所以您目前將無法保存您的修改。您或許希望先將本斷文字複製並保存到文字文件，然後等一會兒再修改。</strong>',
+'protectedpagewarning'      => '<strong>警告: 本頁已經被保護，只有擁有管理員許可權的用戶才可修改。</strong>',
+'semiprotectedpagewarning'  => "'''注意:''' 本頁面被鎖定，僅限註冊用戶編輯。",
+'cascadeprotectedwarning'   => '警告: 本頁已經被保護，只有擁有管理員權限的用戶才可修改，因為本頁已被以下連鎖保護的{{PLURAL:$1|一個|多個}}頁面所包含:',
+'templatesused'             => '在這個頁面上使用的模板有:',
+'templatesusedpreview'      => '此次預覽中使用的模板有:',
+'templatesusedsection'      => '在這個段落上使用的模板有:',
+'template-protected'        => '(保護)',
+'template-semiprotected'    => '(半保護)',
+'edittools'                 => '<!-- 此處的文字將被顯示在以下編輯和上傳表單中。 -->',
+'nocreatetitle'             => '創建頁面受限',
+'nocreatetext'              => '此網站限制了創建新頁面的功能。你可以返回並編輯已有的頁面，或者[[Special:Userlogin|登錄或創建新賬戶]]。',
+
+# "Undo" feature
+'undo-success' => '該編輯可以被撤銷。請檢查以下對比以核實這正是您想做的，然後儲存以下更改以完成撤銷編輯。',
+'undo-failure' => '由於中途的編輯不一致，此編輯不能撤銷。',
+'undo-summary' => '取消由[[Special:Contributions/$2|$2]] ([[User talk:$2|對話]])所作出的修訂 $1',
+
+# Account creation failure
+'cantcreateaccounttitle' => '無法創建帳戶',
+'cantcreateaccounttext'  => '已經禁止從IP位址 (<b>$1</b>) 創建帳戶。 
+這可能是由於經常有來自您的學校和網際網路服務提供商的故意破壞造成的。',
+
+# History pages
+'revhistory'          => '修訂歷史',
+'viewpagelogs'        => '查詢這個頁面的日誌',
+'nohistory'           => '沒有本頁的修訂記錄。',
+'revnotfound'         => '沒有找到修訂記錄',
+'revnotfoundtext'     => '您請求的更早版本的修訂記錄沒有找到。
+請檢查您請求本頁面用的URL是否正確。',
+'loadhist'            => '載入頁面修訂歷史',
+'currentrev'          => '當前修訂版本',
+'revisionasof'        => '在$1所做的修訂版本',
+'revision-info'       => '在$1由$2所做的修訂版本',
+'previousrevision'    => '←上一修訂',
+'nextrevision'        => '下一修訂→',
+'currentrevisionlink' => '當前修訂',
+'cur'                 => '當前',
+'next'                => '後繼',
+'last'                => '先前',
+'orig'                => '初始',
+'page_first'          => '最前',
+'page_last'           => '最後',
+'histlegend'          => '差異選擇: 標記要比較版本的單選按鈕並點擊底部的按鈕進行比較。<br />
+說明: (當前) 指與當前版本比較，(先前) 指與前一個修訂版本比較，小 = 小修改。',
+'deletedrev'          => '[已刪除]',
+'histfirst'           => '最早版本',
+'histlast'            => '最新版本',
+'historysize'         => '($1 位元組)',
+'historyempty'        => '(空)',
+
+# Revision feed
+'history-feed-title'          => '修訂歷史',
+'history-feed-description'    => '本站上此頁的修訂歷史',
+'history-feed-item-nocomment' => '$1在$2', # user at time
+'history-feed-empty'          => '所請求的頁面不存在。它可能已被刪除或重新命名。
+嘗試[[Special:Search|搜索本站]]獲得相關的新建頁面。',
+
+# Revision deletion
+'rev-deleted-comment'         => '(註釋已移除)',
+'rev-deleted-user'            => '(用戶名已移除)',
+'rev-deleted-event'           => '(項目已移除)',
+'rev-deleted-text-permission' => '<div class="mw-warning plainlinks">該頁面修訂已經被從公共文檔中移除。
+在[{{fullurl:Special:Log/delete|page={{PAGENAMEE}}}} 刪除日誌]中您可能會檢視到詳細的信息。</div>',
+'rev-deleted-text-view'       => "<div class='mw-warning plainlinks'>
+該頁面修訂已經被從公共文檔中移除。作為此網站的管理員，您可以檢視它；
+在[{{fullurl:Special:Log/delete|page={{PAGENAMEE}}}} 刪除日誌]中您可能會檢視到詳細的信息。
+</div>",
+'rev-delundel'                => '顯示/隱藏',
+'revisiondelete'              => '刪除/恢復刪除修訂',
+'revdelete-nooldid-title'     => '沒有目標修訂',
+'revdelete-nooldid-text'      => '您沒有指定此操作的目標修訂。',
+'revdelete-selected'          => "選取'''$1'''的$2次修訂:",
+'logdelete-selected'          => "選取'''$1'''的$2個日誌項目:",
+'revdelete-text'              => '刪除的修訂仍將顯示在頁面歷史中, 但它們的文字內容已不能被公眾訪問。
+
+在此網站的其他管理員將仍能訪問隱藏的內容並透過與此相同的介面恢復刪除，除非網站工作者進行了一些附加的限制。',
+'revdelete-legend'            => '設定修訂限制:',
+'revdelete-hide-text'         => '隱藏修訂文字',
+'revdelete-hide-name'         => '隱藏動作和目標',
+'revdelete-hide-comment'      => '隱藏編輯說明',
+'revdelete-hide-user'         => '隱藏編輯者的用戶名/IP',
+'revdelete-hide-restricted'   => '將此限制同樣應用於管理員',
+'revdelete-suppress'          => '同時壓制由操作員以及其他用戶的資料',
+'revdelete-hide-image'        => '隱藏檔案內容',
+'revdelete-unsuppress'        => '在已恢復的修訂中移除限制',
+'revdelete-log'               => '日誌註釋:',
+'revdelete-submit'            => '應用於選取的修訂',
+'revdelete-logentry'          => '[[$1]]的修訂可見性已更改',
+'logdelete-logentry'          => '[[$1]]的事件可見性已更改',
+'revdelete-logaction'         => '$1次修訂己經設定至模式$2',
+'logdelete-logaction'         => '對於[[$3]]的$1個事件己經設定至模式$2',
+'revdelete-success'           => '修訂的可見性已經成功設定。',
+'logdelete-success'           => '事件的可見性已經成功設定。',
+
+# Oversight log
+'oversightlog'    => '監督記錄',
+'overlogpagetext' => '下面是一個最近刪除以及由操作員封鎖牽涉到的內容列表。參看下面的[[Special:Ipblocklist|IP封鎖列表]]去查看現時進行的封鎖。',
+
+# Diffs
+'difference'                => '(修訂版本間差異)',
+'loadingrev'                => '載入修訂版本比較',
+'lineno'                    => '第$1行：',
+'editcurrent'               => '編輯本頁的當前修訂版本',
+'selectnewerversionfordiff' => '選擇更新的版本作比較',
+'selectolderversionfordiff' => '選擇更老的版本作比較',
+'compareselectedversions'   => '比較選定的版本',
+'editundo'                  => '撤銷',
+'diff-multi'                => '($1個中途的修訂版本沒有顯示。)',
+
+# Search results
+'searchresults'         => '搜索結果',
+'searchresulttext'      => '有關搜索{{SITENAME}}的更多詳情,參見[[{{MediaWiki:helppage}}|{{int:help}}]]。',
+'searchsubtitle'        => '查詢"[[:$1]]"',
+'searchsubtitleinvalid' => '查詢"$1"',
+'badquery'              => '搜索查詢不正確',
+'badquerytext'          => '我們無法處理您的查詢。
+這可能是由於您試圖搜索一個短於3個字母的單詞，
+或者您錯誤地輸入了搜索項，例如"煤和和瓦斯"。
+請再嘗試一個新的搜索項。',
+'matchtotals'           => '搜索項"$1"與$2條文章的題目相符，和$3條文章相符。',
+'noexactmatch'          => "'''沒找到標題為\"\$1\"的頁面。''' 您可以[[:\$1|創建此頁面]]。",
+'titlematches'          => '文章題目相符',
+'notitlematches'        => '沒有找到匹配文章題目',
+'textmatches'           => '文章內容相符',
+'notextmatches'         => '沒有文章內容匹配',
+'prevn'                 => '前$1個',
+'nextn'                 => '後$1個',
+'viewprevnext'          => '檢視 ($1) ($2) ($3)。',
+'showingresults'        => '下面顯示從第<b>$2</b>條開始的<b>$1</b>條結果:',
+'showingresultsnum'     => '下面顯示從第<b>$2</b>條開始的<b>$3</b>條結果:',
+'nonefound'             => '<strong>注意：</strong>失敗的搜索往往是由於試圖搜索諸如「的」或「和」之類的常見字所引起。',
+'powersearch'           => '搜索',
+'powersearchtext'       => '
+搜索名字空間：<br />$1<br />$2列出重定向頁面；搜索$3 $9',
+'searchdisabled'        => '{{SITENAME}}由於性能方面的原因，全文搜索已被暫時停用。您可以暫時透過Google搜索。請留意他們的索引可能會過時。',
+'blanknamespace'        => '(主)',
+
+# Preferences page
+'preferences'              => '參數設置',
+'mypreferences'            => '我的參數設置',
+'prefsnologin'             => '還未登入',
+'prefsnologintext'         => '您必須先[[Special:Userlogin|登入]]才能設置個人參數。',
+'prefsreset'               => '參數已重新設置。',
+'qbsettings'               => '快速導航條',
+'qbsettings-none'          => '無',
+'qbsettings-fixedleft'     => '左側固定',
+'qbsettings-fixedright'    => '右側固定',
+'qbsettings-floatingleft'  => '左側漂移',
+'qbsettings-floatingright' => '右側漂移',
+'changepassword'           => '更改密碼',
+'skin'                     => '面板',
+'math'                     => '數學公式',
+'dateformat'               => '日期格式',
+'datedefault'              => '預設值',
+'datetime'                 => '日期和时间',
+'math_failure'             => '解析失敗',
+'math_unknown_error'       => '未知錯誤',
+'math_unknown_function'    => '未知函數',
+'math_lexing_error'        => '句法錯誤',
+'math_syntax_error'        => '語法錯誤',
+'math_image_error'         => 'PNG 轉換失敗；請檢查是否正確安裝了 latex, dvips, gs 和 convert',
+'math_bad_tmpdir'          => '無法寫入或建立數學公式臨時目錄',
+'math_bad_output'          => '無法寫入或建立數學公式輸出目錄',
+'math_notexvc'             => '無法執行"texvc"；請參照 math/README 進行配置。',
+'prefs-personal'           => '用戶資料',
+'prefs-rc'                 => '最近更改',
+'prefs-watchlist'          => '監視列表',
+'prefs-watchlist-days'     => '監視列表中顯示記錄的天數:',
+'prefs-watchlist-edits'    => '在增強的監視列表中顯示的編輯次數:',
+'prefs-misc'               => '雜項',
+'saveprefs'                => '保存參數設置',
+'resetprefs'               => '重設參數',
+'oldpassword'              => '舊密碼',
+'newpassword'              => '新密碼',
+'retypenew'                => '確認密碼:',
+'textboxsize'              => '編輯',
+'rows'                     => '列:',
+'columns'                  => '欄:',
+'searchresultshead'        => '搜索結果設定',
+'resultsperpage'           => '每頁顯示連結數',
+'contextlines'             => '每連結行數:',
+'contextchars'             => '每行字數:',
+'stubthreshold'            => '短文章顯示基本限制',
+'recentchangesdays'        => '最近更改中的顯示日數:',
+'recentchangescount'       => '最近更改中的編輯數:',
+'savedprefs'               => '您的個人參數設置已經保存。',
+'timezonelegend'           => '時區',
+'timezonetext'             => '輸入當地時間與伺服器時間(UTC)的時差。',
+'localtime'                => '當地時間',
+'timezoneoffset'           => '時差¹',
+'servertime'               => '伺服器時間',
+'guesstimezone'            => '從瀏覽器填寫',
+'allowemail'               => '接受來自其他用戶的郵件',
+'defaultns'                => '預設搜索的名字空間',
+'default'                  => '預設',
+'files'                    => '檔案',
+
+# User rights
+'userrights-lookup-user'     => '管理用戶群組',
+'userrights-user-editname'   => '輸入用戶名:',
+'editusergroup'              => '編輯用戶群組',
+'userrights-editusergroup'   => '編輯用戶群組',
+'saveusergroups'             => '保存用戶群組',
+'userrights-groupsmember'    => '屬於:',
+'userrights-groupsavailable' => '可用群組:',
+'userrights-groupshelp'      => '請選擇您想讓用戶加入或退出的群組。沒有選擇的群組將不會被改變。您也可以用"CTRL + 左擊滑鼠"複選或取消已經選擇的群組。',
+'userrights-reason'          => '更改原因:',
+
+# Groups
+'group'            => '群組:',
+'group-bot'        => '機器人',
+'group-sysop'      => '操作員',
+'group-bureaucrat' => '行政員',
+'group-all'        => '(全部)',
+
+'group-bot-member'        => '機器人',
+'group-sysop-member'      => '操作員',
+'group-bureaucrat-member' => '行政員',
+
+'grouppage-bot'        => '{{ns:project}}:機器人',
+'grouppage-sysop'      => '{{ns:project}}:操作員',
+'grouppage-bureaucrat' => '{{ns:project}}:行政員',
+
+# User rights log
+'rightslog'      => '用戶權限日誌',
+'rightslogtext'  => '以下記錄了用戶權限的更改記錄。',
+'rightslogentry' => '將 $1 的權限從 $2 改為 $3',
+'rightsnone'     => '(無)',
+
+# Recent changes
+'nchanges'                          => '$1次更改',
+'recentchanges'                     => '最近更改',
+'recentchangestext'                 => '跟蹤這個wiki上的最新更改。',
+'recentchanges-feed-description'    => '跟蹤此訂閱在 wiki 上的最近更改。',
+'rcnote'                            => "以下是在$3，最近'''$2'''天內的'''$1'''次最近更改記錄:",
+'rcnotefrom'                        => '下面是自<b>$2</b>(最多顯示<b>$1</b>):',
+'rclistfrom'                        => '顯示自$1以來的新更改',
+'rcshowhideminor'                   => '$1小編輯',
+'rcshowhidebots'                    => '$1機器人的編輯',
+'rcshowhideliu'                     => '$1已登入用戶的編輯',
+'rcshowhideanons'                   => '$1匿名用戶的編輯',
+'rcshowhidepatr'                    => ' $1檢查過的編輯',
+'rcshowhidemine'                    => '$1我的編輯',
+'rclinks'                           => '顯示最近$2天內最新的$1次改動。<br />$3',
+'diff'                              => '差異',
+'hist'                              => '歷史',
+'hide'                              => '隱藏',
+'show'                              => '顯示',
+'minoreditletter'                   => '小',
+'newpageletter'                     => '新',
+'boteditletter'                     => '機',
+'number_of_watching_users_pageview' => '[$1個關注用戶]',
+'rc_categories'                     => '分類界限(以"|"分割)',
+'rc_categories_any'                 => '任意',
+
+# Recent changes linked
+'recentchangeslinked'          => '鏈出更改',
+'recentchangeslinked-noresult' => '在這一段時間中連結的頁面並無更改。',
+'recentchangeslinked-summary'  => "這一個特殊頁面列示這一頁鏈出頁面的最近更改。在您監視列表中的頁面會以'''粗體'''表示。",
+
+# Upload
+'upload'                      => '上傳檔案',
+'uploadbtn'                   => '上傳檔案',
+'reupload'                    => '重新上載',
+'reuploaddesc'                => '返回上載表單。',
+'uploadnologin'               => '未登入',
+'uploadnologintext'           => '您必須先[[Special:Userlogin|登入]]
+才能上載文件。',
+'upload_directory_read_only'  => '上傳目錄($1)不存在或無寫權限。',
+'uploaderror'                 => '上載錯誤',
+'uploadtext'                  => "使用下面的表單來上傳用在頁面內新的圖像檔案。 
+要檢視或搜索以前上傳的圖片
+可以進入[[Special:Imagelist|圖像清單]]，
+上傳和刪除將在[[Special:Log/upload|上傳日誌]]中記錄。
+
+要在文章中加入圖像，使用以下形式的連接:
+'''<nowiki>[[{{ns:image}}:file.jpg]]</nowiki>'''，
+'''<nowiki>[[{{ns:image}}:file.png|替換文字]]</nowiki>''' 或
+'''<nowiki>[[{{ns:media}}:file.ogg]]</nowiki>'''。",
+'uploadlog'                   => '上載紀錄',
+'uploadlogpage'               => '上載紀錄',
+'uploadlogpagetext'           => '以下是最近上載的文件的一覽表。',
+'filename'                    => '檔案名',
+'filedesc'                    => '檔案描述',
+'fileuploadsummary'           => '檔案描述:',
+'filestatus'                  => '版權狀態',
+'filesource'                  => '來源',
+'uploadedfiles'               => '已上載文件',
+'ignorewarning'               => '忽略警告並儲存檔案。',
+'ignorewarnings'              => '忽略所有警告',
+'minlength'                   => '檔案名字必須至少有三個字母。',
+'illegalfilename'             => '檔案名"$1"包含有頁面標題所禁止的字符。請改名後重新上傳。',
+'badfilename'                 => '檔案名已被改為"$1"。',
+'filetype-badmime'            => 'MIME類別"$1"不是容許的檔案格式。',
+'filetype-badtype'            => "'''\".\$1\"'''是不容許的檔案類型
+: 以下是容許的檔案類型: \$2",
+'filetype-missing'            => '該檔案名稱並沒有副檔名 (像 ".jpg")。',
+'large-file'                  => '建議檔案大小不能超過 $1；本檔案大小為 $2。',
+'largefileserver'             => '這個檔案的大小比伺服器配置允許的大小還要大。',
+'emptyfile'                   => '您所上傳的檔案不存在。這可能是由於檔案名鍵入錯誤。請檢查您是否真的要上傳此檔案。',
+'fileexists'                  => '已存在相同名稱的檔案，如果您無法確定您是否要改變它，請檢查$1。',
+'fileexists-extension'        => '一個相似檔名的檔案已經存在:<br />
+上載檔案的檔名: <strong><tt>$1</tt></strong><br />
+現有檔案的檔名: <strong><tt>$2</tt></strong><br />
+請選擇一個不同的名字。',
+'fileexists-thumb'            => "'''<center>已經存在的圖像</center>'''",
+'fileexists-thumbnail-yes'    => '這個檔案好像是一幅圖像的縮圖版本<i>(縮圖)</i>。請檢查清楚該檔案<strong><tt>$1</tt></strong>。<br />
+如果檢查後的檔案是同原本圖像的大小是一樣的話，就不用再上載多一幅縮圖。',
+'file-thumbnail-no'           => '該檔名是以<strong><tt>$1</tt></strong>開始。它好像一幅圖像的縮圖版本<i>(縮圖)</i>。
+如果你有該圖像的完整大小，如不是請再修改檔名。',
+'fileexists-forbidden'        => '已存在相同名稱的檔案；請返回並用一個新的名稱來上傳此檔案。[[Image:$1|thumb|center|$1]]',
+'fileexists-shared-forbidden' => '在共享檔案庫中已存在此名稱的檔案；請返回並用一個新的名稱來上傳此檔案。[[Image:$1|thumb|center|$1]]',
+'successfulupload'            => '上傳成功',
+'fileuploaded'                => '檔案"$1"上傳成功。
+請根據連結($2)到檔案描述頁添加有關檔案訊息，例如它的來源，在何時由誰創建，以及其他任何您知道的關於該檔案的訊息。如果這是一個圖像，您可以透過<tt><nowiki>[[Image:$1|thumb|描述]]</nowiki></tt>將其插入頁面',
+'uploadwarning'               => '上載警告',
+'savefile'                    => '保存文件',
+'uploadedimage'               => '已上載"[[$1]]"',
+'uploaddisabled'              => '無法上傳',
+'uploaddisabledtext'          => '檔案上傳在此網站不可用。',
+'uploadscripted'              => '該檔案包含可能被網路瀏覽器錯誤解釋的 HTML 或腳本代碼。',
+'uploadcorrupt'               => '該檔案包含或具有一個不正確的擴展名。請檢查此檔案並重新上傳。',
+'uploadvirus'                 => '該檔案包含有病毒！詳情: $1',
+'sourcefilename'              => '來源檔案名',
+'destfilename'                => '目標檔案名',
+'watchthisupload'             => '監視此頁',
+'filewasdeleted'              => '之前已經有一個同名檔案被上傳後又被刪除了。在上傳此檔案之前您需要檢查$1。',
+
+'upload-proto-error'      => '協議錯誤',
+'upload-proto-error-text' => '遠程上傳要求 URL 以 <code>http://</code> 或 <code>ftp://</code> 開頭。',
+'upload-file-error'       => '內部錯誤',
+'upload-file-error-text'  => '當試圖在伺服器上創建臨時檔案時發生內部錯誤。請與系統管理員聯繫。',
+'upload-misc-error'       => '未知的上傳錯誤',
+'upload-misc-error-text'  => '在上傳時發生未知的錯誤. 請驗証使用了正確並可訪問的 URL，然後進行重試。如果問題仍然存在，請與系統管理員聯繫。',
+
+# Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
+'upload-curl-error6'       => '無法訪問 URL',
+'upload-curl-error6-text'  => '無法訪問所提供的 URL。請再次檢查該 URL 是否正確，並且網站的訪問是否正常。',
+'upload-curl-error28'      => '上傳超時',
+'upload-curl-error28-text' => '網站回應時間過長。請檢查此網站的訪問是否正常，過一會再進行嘗試。您可能需要在網路訪問空閒時間再次進行嘗試。',
+
+'license'            => '授權',
+'nolicense'          => '未選定',
+'upload_source_url'  => ' (一個有效的，可公開訪問的 URL)',
+'upload_source_file' => ' (在您電腦上的一個檔案)',
+
+# Image list
+'imagelist'                 => '檔案列表',
+'imagelisttext'             => '以下是按$2排列的$1個檔案列表。',
+'imagelistforuser'          => '此處僅僅顯示由$1上傳的圖像。',
+'getimagelist'              => '正在獲取檔案列表',
+'ilsubmit'                  => '搜尋',
+'showlast'                  => '顯示按$2排列的最後$1個檔案。',
+'byname'                    => '按名字',
+'bydate'                    => '按日期',
+'bysize'                    => '按大小',
+'imgdelete'                 => '刪除',
+'imgdesc'                   => '描述',
+'imgfile'                   => '檔案',
+'imglegend'                 => '說明: (描述) = 顯示/編輯檔案描述。',
+'imghistory'                => '檔案歷史',
+'revertimg'                 => '恢復',
+'deleteimg'                 => '刪除',
+'deleteimgcompletely'       => '刪除此檔案的所有修訂版本',
+'imghistlegend'             => '說明: (當前) = 這是當前檔案，(刪除) = 刪除此舊版本，
+(恢復 = 恢復到此舊版本。
+<br /><i>點擊日期檢視當天上載的檔案</i>。',
+'imagelinks'                => '連結',
+'linkstoimage'              => '以下頁面連接到本檔案:',
+'nolinkstoimage'            => '沒有頁面連接到本檔案。',
+'sharedupload'              => '該檔案是一個共享上傳，它可能在其它項目中被應用。',
+'shareduploadwiki'          => '請參閱$1以了解其相關資訊。',
+'shareduploadwiki-linktext' => '檔案描述頁面',
+'noimage'                   => '不存在此名稱的檔案，您可以$1。',
+'noimage-linktext'          => '上傳它',
+'uploadnewversion-linktext' => '上傳該檔案的新版本',
+'imagelist_date'            => '日期',
+'imagelist_name'            => '名稱',
+'imagelist_user'            => '用戶',
+'imagelist_size'            => '位元組',
+'imagelist_description'     => '描述',
+'imagelist_search_for'      => '按圖像名稱搜索:',
+
+# MIME search
+'mimesearch'         => 'MIME 搜索',
+'mimesearch-summary' => '本頁面啟用檔案MIME類型過濾器。輸入︰內容類型/子類型，如 <tt>image/jpeg</tt>。',
+'mimetype'           => 'MIME 類型:',
+'download'           => '下載',
+
+# Unwatched pages
+'unwatchedpages' => '未被監視的頁面',
+
+# List redirects
+'listredirects' => '重定向頁面清單',
+
+# Unused templates
+'unusedtemplates'     => '未使用的模板',
+'unusedtemplatestext' => '本頁面列出模板名字空間下所有未被其他頁面使用的頁面。請在刪除這些模板前檢查其他鏈入該模板的頁面。',
+'unusedtemplateswlh'  => '其他連結',
+
+# Random redirect
+'randomredirect'         => '隨機重定向頁面',
+'randomredirect-nopages' => '在這個名字空間中沒有重定向頁面。',
+
+# Statistics
+'statistics'             => '統計',
+'sitestats'              => '{{SITENAME}}統計數據',
+'userstats'              => '用戶統計',
+'sitestatstext'          => "資料庫中共有'''\$1'''頁頁面。
+其中包括對話頁、關於{{SITENAME}}的頁面、最少量的\"stub\"頁、重定向的頁面，
+以及未達到頁面質量的頁面。除此之外還有'''\$2'''頁可能是合乎標準的頁面。
+
+'''\$8'''個檔案已被上傳。
+
+從{{SITENAME}}設定以來，全網站共有頁面瀏覽'''\$3'''次，頁面編輯'''\$4'''次。
+即每頁平均編輯'''\$5'''次，各次編輯後頁面的每個版本平均瀏覽'''\$6'''次。
+
+[http://meta.wikimedia.org/wiki/Help:Job_queue 工作隊列]的長度是'''\$7'''。",
+'userstatstext'          => "網站有'''$1'''位註冊用戶，其中
+'''$2''' (或 '''$4%''') 有$5許可權。",
+'statistics-mostpopular' => '被查閱次數最多的頁面',
+
+'disambiguations'      => '消含糊頁',
+'disambiguationspage'  => 'Template:disambig',
+'disambiguations-text' => '以下的頁面都有到<b>消含糊頁</b>的鏈接, 但它們應該是連到適當的標題。<br />一個頁面會被視為消含糊頁如果它是連自[[MediaWiki:disambiguationspage]]。',
+
+'doubleredirects'     => '雙重重定向頁面',
+'doubleredirectstext' => '每一行都包含到第一和第二個重定向頁面的鏈接，以及第二個重定向頁面的第一行文字，通常顯示的都會是"真正"的目標頁面，也就是第一個重定向頁面應該指向的頁面。',
+
+'brokenredirects'        => '損壞的重定向頁',
+'brokenredirectstext'    => '以下的重定向頁指向的是不存在的頁面:',
+'brokenredirects-edit'   => '(編輯)',
+'brokenredirects-delete' => '(刪除)',
+
+'withoutinterwiki'        => '未有語言鏈接的頁面',
+'withoutinterwiki-header' => '以下的頁面是未有語言鏈接到其它語言版本:',
+
+'fewestrevisions' => '最少修訂的文章',
+
+# Miscellaneous special pages
+'nbytes'                  => '$1位元組',
+'ncategories'             => '$1個分類',
+'nlinks'                  => '$1個連結',
+'nmembers'                => '$1個成員',
+'nrevisions'              => '$1個修訂',
+'nviews'                  => '$1次瀏覽',
+'specialpage-empty'       => '本頁面沒有內容。',
+'lonelypages'             => '孤立頁面',
+'lonelypagestext'         => '以下頁面沒有連結這個wiki中的其它頁面。',
+'uncategorizedpages'      => '待分類頁面',
+'uncategorizedcategories' => '待分類類別',
+'uncategorizedimages'     => '待分類圖片',
+'unusedcategories'        => '未使用的分類',
+'unusedimages'            => '未使用圖像',
+'popularpages'            => '熱點頁面',
+'wantedcategories'        => '需要的分類',
+'wantedpages'             => '待撰頁面',
+'mostlinked'              => '最多連結頁面',
+'mostlinkedcategories'    => '最多連結分類',
+'mostcategories'          => '最多分類文章',
+'mostimages'              => '最多連結圖像',
+'mostrevisions'           => '最多修訂文章',
+'allpages'                => '所有頁面',
+'prefixindex'             => '前綴索引',
+'randompage'              => '隨機頁面',
+'randompage-nopages'      => '在這個名字空間中沒有頁面。',
+'shortpages'              => '短頁面',
+'longpages'               => '長頁面',
+'deadendpages'            => '斷鏈頁面',
+'deadendpagestext'        => '以下頁面沒有被被連結到這個wiki中的其它頁面:',
+'protectedpages'          => '已保護頁面',
+'protectedpagestext'      => '以下頁面已經被保護以防止移移或編輯',
+'protectedpagesempty'     => '在這些參數下沒有頁面正在保護。',
+'listusers'               => '用戶列表',
+'specialpages'            => '特殊頁面',
+'spheading'               => '所有用戶的特殊頁面',
+'restrictedpheading'      => '受限的特殊頁面',
+'rclsub'                  => '（從 "$1"鏈出的頁面）',
+'newpages'                => '最新頁面',
+'newpages-username'       => '用户名:',
+'ancientpages'            => '最舊頁面',
+'intl'                    => '跨語言連結',
+'move'                    => '移動',
+'movethispage'            => '移動本頁',
+'unusedimagestext'        => '<p>請注意其它網站可能直接透過 URL 鏈接此圖像，所以這裡列出的圖像有可能依然被使用。</p>',
+'unusedcategoriestext'    => '雖然沒有被其它文章或者分類所採用，但列表中的分類頁依然存在。',
+
+# Book sources
+'booksources'               => '站外書源',
+'booksources-search-legend' => '尋找站外書源',
+'booksources-isbn'          => 'ISBN:',
+'booksources-go'            => '送出',
+'booksources-text'          => '以下是一份銷售新書或二手書的列表，並可能有你正尋找的書的進一步訊息：',
+
+'categoriespagetext' => '以下列出所有的頁面分類。',
+'data'               => '資料',
+'userrights'         => '用戶權限管理',
+'groups'             => '用戶群组',
+'isbn'               => 'ISBN',
+'alphaindexline'     => '$1 到 $2',
+'version'            => '版本',
+
+# Special:Log
+'specialloguserlabel'  => '用戶:',
+'speciallogtitlelabel' => '標題:',
+'log'                  => '日誌',
+'log-search-legend'    => '搜尋日誌',
+'log-search-submit'    => '去',
+'alllogstext'          => '綜合顯示上傳、刪除、保護、查封以及站務日誌。',
+'logempty'             => '在日誌中不存在匹配項。',
+'log-title-wildcard'   => '搜尋以這個文字開始的標題',
+
+# Special:Allpages
+'nextpage'          => '下一頁($1)',
+'prevpage'          => '上一頁($1)',
+'allpagesfrom'      => '顯示從此處開始的頁面:',
+'allarticles'       => '所有文章',
+'allinnamespace'    => '所有頁面(屬於$1名字空間)',
+'allnotinnamespace' => '所有頁面(不屬於$1名字空間)',
+'allpagesprev'      => '前',
+'allpagesnext'      => '後',
+'allpagessubmit'    => '提交',
+'allpagesprefix'    => '顯示具有此前綴(名字空間)的頁面:',
+'allpagesbadtitle'  => '給定的頁面標題是非法的，或者具有一個內部語言或內部 wiki 的前綴。它可能包含一個或更多的不能用於標題的字元。',
+
+# Special:Listusers
+'listusersfrom'      => '給定顯示用戶條件:',
+'listusers-submit'   => '顯示',
+'listusers-noresult' => '找不到用戶。',
+
+# E-mail user
+'mailnologin'     => '無電郵地址',
+'mailnologintext' => '您必須先[[Special:Userlogin|登入]]
+並在[[Special:Preferences|參數設置]]
+中有一個有效的e-mail地址才可以電郵其他用戶。',
+'emailuser'       => 'E-mail該用戶',
+'emailpage'       => 'E-mail用戶',
+'emailpagetext'   => '如果該用戶已經在他或她的參數設置頁中輸入了有效的e-mail地址，以下的表格將寄一個訊息給該用戶。您在您參數設置中所輸入的e-mail地址將出現在郵件「發件人」一欄中，這樣該用戶就可以回覆您。',
+'usermailererror' => '目標郵件地址返回錯誤：',
+'defemailsubject' => '{{SITENAME}}電子郵件',
+'noemailtitle'    => '無e-mail地址',
+'noemailtext'     => '該用戶還沒有指定一個有效的e-mail地址，
+或者選擇不接受來自其他用戶的e-mail。',
+'emailfrom'       => '發件人',
+'emailto'         => '收件人',
+'emailsubject'    => '主題',
+'emailmessage'    => '訊息',
+'emailsend'       => '發送',
+'emailccme'       => '將我的消息的副本發送一份到我的電郵信箱。',
+'emailccsubject'  => '將您的信息複製到 $1: $2',
+'emailsent'       => '電子郵件已發送',
+'emailsenttext'   => '您的電子郵件已經發出。',
+
+# Watchlist
+'watchlist'            => '監視列表',
+'mywatchlist'          => '我的監視列表',
+'watchlistfor'         => "('''$1'''的監視列表)",
+'nowatchlist'          => '您的監視列表為空。',
+'watchlistanontext'    => '請$1以檢視或編輯您的監視列表。',
+'watchlistcount'       => "'''您的監視列表中共有$1個項目，包括討論頁。'''",
+'clearwatchlist'       => '清除監視列表',
+'watchlistcleartext'   => '確定要移除所有的項目嗎？',
+'watchlistclearbutton' => '清除監視列表',
+'watchlistcleardone'   => '您的監視列表已經清除完畢。總共清除$1個項目。',
+'watchnologin'         => '未登入',
+'watchnologintext'     => '您必須先[[Special:Userlogin|登入]]
+才能更改您的監視列表',
+'addedwatch'           => '加入到監視列表',
+'addedwatchtext'       => "頁面\"[[:\$1]]\"已經被加入到您的[[Special:Watchlist|監視清單]]中。
+將來有關此頁面及其討論頁的任何修改將會在那裡列出，
+而且還會在[[Special:Recentchanges|最近更改]]中
+以'''粗體'''形式列出以使起更容易識別。
+
+如果您之後想將該頁面從監視清單中刪除，可點擊導航條中的\"停止監視\"連結。",
+'removedwatch'         => '已停止監視',
+'removedwatchtext'     => '頁面「$1」已經從您的監視頁面中移除。',
+'watch'                => '監視',
+'watchthispage'        => '監視本頁',
+'unwatch'              => '取消監視',
+'unwatchthispage'      => '停止監視',
+'notanarticle'         => '不是文章',
+'watchnochange'        => '在顯示的時間段內您所監視的頁面沒有更改。',
+'watchdetails'         => '* 不包含討論頁，您的監視列表共有 $1 頁。
+* [[Special:Watchlist/edit|顯示或修改您的監視列表]]
+* [[Special:Watchlist/clear|移除全部的頁面]]',
+'wlheader-enotif'      => '* 已經啟動電子郵件通知功能。',
+'wlheader-showupdated' => "* 在你上次檢視後有被修改過的頁面會顯示為'''粗體'''",
+'watchmethod-recent'   => '檢查被監視頁面的最近編輯',
+'watchmethod-list'     => '檢查最近編輯的被監視頁面',
+'removechecked'        => '將被選頁面從監視列表中移除',
+'watchlistcontains'    => '您的監視列表包含$1個頁面。',
+'watcheditlist'        => '這裡是您所監視的頁面的清單。要移除某一頁面，只要選擇該頁面然後點擊"移除頁面"按鈕(刪除內容頁面將同時刪除與之相關的討論頁，反之亦然)。',
+'removingchecked'      => '從監視清單中移除已要求項目...',
+'couldntremove'        => "無法移除'$1'...",
+'iteminvalidname'      => "頁面'$1'錯誤，無效命名...",
+'wlnote'               => '以下是最近<b>$2</b>小時內的最後$1次修改。',
+'wlshowlast'           => '顯示最近$1小時；$2天；$3的修改。',
+'wlsaved'              => '您的監視列表如下：',
+'watchlist-show-bots'  => '顯示機器人的編輯',
+'watchlist-hide-bots'  => '隱藏機器人編輯',
+'watchlist-show-own'   => '顯示我的修改',
+'watchlist-hide-own'   => '隱藏我的修改',
+'watchlist-show-minor' => '顯示小修改',
+'watchlist-hide-minor' => '隱藏小修改',
+'wldone'               => '完成。',
+
+# Displayed when you click the "watch" button and it's in the process of watching
+'watching'   => '正在監視...',
+'unwatching' => '正在停止監視...',
+
+'enotif_mailer'      => '{{SITENAME}}郵件通知器',
+'enotif_reset'       => '將所有頁面標為已閱讀',
+'enotif_newpagetext' => '這是新建頁面。',
+'changed'            => '已修改',
+'created'            => '已建立',
+'enotif_subject'     => '{{SITENAME}}有頁面 $PAGETITLE 被 $PAGEEDITOR $CHANGEDORCREATED',
+'enotif_lastvisited' => '檢視您上次訪問後的所有更改請訪問$1。',
+'enotif_body'        => '親愛的 $WATCHINGUSERNAME,
+
+$PAGEEDITOR 已經在 $PAGEEDITDATE $CHANGEDORCREATED 了{{SITENAME}}的 $PAGETITLE 頁面，請到 $PAGETITLE_URL 檢視當前版本。
+
+$NEWPAGE
+
+編輯摘要: $PAGESUMMARY $PAGEMINOREDIT
+
+聯繫此編輯者:
+
+郵件: $PAGEEDITOR_EMAIL
+
+本站: $PAGEEDITOR_WIKI
+
+在您訪問此頁之前，將來的更改將不會向您發通知。您也可以重設您所有監視頁面的通知標記。
+
+                {{SITENAME}}通知系統
+
+--
+要改變您的監視列表設定，請訪問
+{{fullurl:{{ns:special}}:Watchlist/edit}}
+
+回饋和進一步的幫助:
+{{fullurl:{{MediaWiki:helppage}}}}',
+
+# Delete/protect/revert
+'deletepage'                  => '刪除頁面',
+'confirm'                     => '確認',
+'excontent'                   => '內容為: "$1"',
+'excontentauthor'             => '內容為: "$1" (而且唯一貢獻者為"$2")',
+'exbeforeblank'               => '被清空前的內容為: "$1"',
+'exblank'                     => '頁面為空',
+'confirmdelete'               => '確認刪除',
+'deletesub'                   => '（正在刪除「$1」）',
+'historywarning'              => '警告: 您將要刪除的頁內含有歷史',
+'confirmdeletetext'           => '您即將從資料庫中永遠刪除一個頁面或圖像以及其歷史。
+請確定您要進行此項操作，並且了解其後果，同時您的行為符合[[{{MediaWiki:policy-url}}]]。',
+'actioncomplete'              => '操作完成',
+'deletedtext'                 => '「$1」已經被刪除。
+最近刪除的紀錄請參見$2。',
+'deletedarticle'              => '已刪除「$1」',
+'dellogpage'                  => '刪除紀錄',
+'dellogpagetext'              => '以下是最近刪除的紀錄列表。
+所有的時間都是使用伺服器時間。
+<ul>
+</ul>',
+'deletionlog'                 => '刪除紀錄',
+'reverted'                    => '恢復到早期版本',
+'deletecomment'               => '刪除理由',
+'imagereverted'               => '恢復到早期版本操作完成。',
+'rollback'                    => '恢復',
+'rollback_short'              => '恢復',
+'rollbacklink'                => '恢復',
+'rollbackfailed'              => '無法恢復',
+'cantrollback'                => '無法恢復編輯；最後的貢獻者是本文的唯一作者。',
+'alreadyrolled'               => '無法恢復由[[User:$2|$2]] ([[User talk:$2|討論]])進行的[[$1]]的最後編輯；
+其他人已經編輯或是恢復了該頁。
+
+最後編輯者: [[User:$3|$3]] ([[User talk:$3|討論]])。',
+'editcomment'                 => '編輯說明: "<i>$1</i>"。', # only shown if there is an edit comment
+'revertpage'                  => '恢復由[[Special:Contributions/$2|$2]] ([[User talk:$2|對話]])的編輯；更改回[[User:$1|$1]]的最後一個版本',
+'sessionfailure'              => '您的登入資訊似乎有問題，為防止此該訊息被攔截，本次操作已經取消，請按「上一頁」重新載入。',
+'protectlogpage'              => '保護日誌',
+'protectlogtext'              => '下面是頁面鎖定和取消鎖定的列表。請參考[[Special:Protectedpages|保護頁面清單]]以檢視當前進行的頁面保護。',
+'protectedarticle'            => '已保護"[[$1]]"',
+'unprotectedarticle'          => '已解除保護"[[$1]]"',
+'protectsub'                  => '(正在保護"$1")',
+'confirmprotecttext'          => '確認要保護這頁？',
+'confirmprotect'              => '確認保護',
+'protectmoveonly'             => '只針對移動做保護',
+'protectcomment'              => '保護的原因',
+'protectexpiry'               => '終止時間',
+'protect_expiry_invalid'      => '輸入的終止時間無效。',
+'protect_expiry_old'          => '終止時間已過去。',
+'unprotectsub'                => '(正在解除保護"$1")',
+'confirmunprotecttext'        => '您是否真的想解除保護這頁？',
+'confirmunprotect'            => '確認解除保護',
+'unprotectcomment'            => '解除保護原因',
+'protect-unchain'             => '移動權限解鎖',
+'protect-text'                => '你可以在這裡瀏覽和修改對頁面<strong>$1</strong>的保護級別。',
+'protect-locked-blocked'      => '您不能在被查封時更改保護級別。
+以下是<strong>$1</strong>現時的保護級別:',
+'protect-locked-dblock'       => '在資料庫鎖定時無法更改保護級別。
+以下是<strong>$1</strong>現時的保護級別:',
+'protect-locked-access'       => '您的帳戶權限不能修改保護級別。
+以下是<strong>$1</strong>現時的保護級別:',
+'protect-cascadeon'           => '以下的{{PLURAL:$1|一個|多個}}頁面包含着本頁面的同時，啟動了連鎖保護，因此本頁面目前也被保護，未能編輯。您可以設定本頁面的保護級別，但這並不會對連鎖保護有所影響。',
+'protect-default'             => '(預設)',
+'protect-level-autoconfirmed' => '禁止未註冊用戶',
+'protect-level-sysop'         => '僅操作員',
+'protect-summary-cascade'     => '連鎖',
+'protect-expiring'            => '終止於 $1 (UTC)',
+'protect-cascade'             => '連鎖保護 - 本頁包含的所有頁面均一併保護。',
+'restriction-type'            => '權限',
+'restriction-level'           => '限制級別',
+'minimum-size'                => '最小大小 (位元組)',
+
+# Restrictions (nouns)
+'restriction-edit' => '編輯',
+'restriction-move' => '移動',
+
+# Restriction levels
+'restriction-level-sysop'         => '全保護',
+'restriction-level-autoconfirmed' => '半保護',
+'restriction-level-all'           => '任何級別',
+
+# Undelete
+'undelete'                 => '恢復被刪頁面',
+'undeletepage'             => '瀏覽及恢復被刪頁面',
+'viewdeletedpage'          => '檢視被刪除的頁面',
+'undeletepagetext'         => '以下頁面已經被刪除，但依然在檔案中並可以被恢復。
+檔案庫可能被定時清理。',
+'undeleteextrahelp'        => "恢復整個頁面時，請清除所有複選框後按 '''''恢復''''' 。 恢復特定版本時，請選擇相應版本前的複選框後按'''''恢復''''' 。按 '''''重設''''' 將清除評論內容及所有複選框。",
+'undeleterevisions'        => '$1版本存檔',
+'undeletehistory'          => '如果您恢復了該頁面，所有版本都會被恢復到修訂歷史中。
+如果本頁刪除後有一個同名的新頁面建立，
+被恢復的版本將會稱為較新的歷史，而新頁面的當前版本將無法被自動復原。',
+'undeleterevdel'           => '如果把最新修訂部份刪除，反刪除便無法進行。如果遇到這種情況，您必須反選或反隱藏最新已刪除的修訂。對於您沒有權限去檢視的修訂是無法恢復的。',
+'undeletehistorynoadmin'   => '這個文章已經被刪除，刪除原因顯示在下方編輯摘要中。被刪除前的所有修訂版本，連同刪除前貢獻用戶等等
+細節只有[[Wikipedia:管理員|管理員]]可以看見。',
+'undelete-revision'        => '刪除版本 $1 自 $2：',
+'undeleterevision-missing' => '此版本的內容不正確或已經遺失。可能連結錯誤、被移除或已經被恢復。',
+'undeletebtn'              => '恢復',
+'undeletereset'            => '重設',
+'undeletecomment'          => '原因',
+'undeletedarticle'         => '已經恢復「$1」',
+'undeletedrevisions'       => '$1個修訂版本已經恢復',
+'undeletedrevisions-files' => '$1 個版本和 $2 個文件被恢復',
+'undeletedfiles'           => '$1 個文件被恢復',
+'cannotundelete'           => '恢復失敗；可能之前已經被其他人恢復。',
+'undeletedpage'            => "<big>'''$1已經被恢復'''</big> 請參考[[Special:Log/delete|刪除日誌]]來查詢刪除及恢復記錄。",
+'undelete-header'          => '如要查詢最近的記錄請參閱[[Special:Log/delete|刪除日誌]]。',
+'undelete-search-box'      => '搜尋已刪除頁面',
+'undelete-search-prefix'   => '顯示頁面自:',
+'undelete-search-submit'   => '搜尋',
+'undelete-no-results'      => '刪除記錄裡沒有符合的結果。',
+
+# Namespace form on various pages
+'namespace' => '名字空間:',
+'invert'    => '反向選擇',
+
+# Contributions
+'contributions' => '用戶貢獻',
+'mycontris'     => '我的貢獻',
+'contribsub2'    => '$1的貢獻 ($2)',
+'nocontribs'    => '沒有找到符合特徵的更改。',
+'ucnote'        => '以下是該用戶最近<b>$2</b>天內的最後<b>$1</b>次修改。',
+'uclinks'       => '參看最後$1次修改；參看最後$2天。',
+'uctop'         => ' (頂)',
+
+'sp-contributions-newest'      => '最新',
+'sp-contributions-oldest'      => '最舊',
+'sp-contributions-newer'       => '前$1次',
+'sp-contributions-older'       => '後$1次',
+'sp-contributions-newbies'     => '只顯示新建立之用戶的貢獻',
+'sp-contributions-newbies-sub' => '新手',
+'sp-contributions-blocklog'    => '封禁記錄',
+'sp-contributions-search'      => '搜尋貢獻記錄',
+'sp-contributions-username'    => 'IP位址或用戶名稱：',
+'sp-contributions-submit'      => '搜尋',
+
+'sp-newimages-showfrom' => '從$1開始顯示新圖像',
+
+# What links here
+'whatlinkshere'      => '鏈入頁面',
+'notargettitle'      => '無目標',
+'notargettext'       => '您還沒有指定一個目標頁面或用戶以進行此項操作。',
+'linklistsub'        => '(連結列表)',
+'linkshere'          => '以下頁面連結到[[:$1]]：',
+'nolinkshere'        => '沒有頁面連結到[[:$1]]。',
+'nolinkshere-ns'     => '在所選的名字空間內沒有頁面鏈接到[[:$1]]。',
+'isredirect'         => '重定向頁',
+'istemplate'         => '包含',
+'whatlinkshere-prev' => '前$1個',
+'whatlinkshere-next' => '後$1個',
+
+# Block/unblock
+'blockip'                     => '查封IP地址',
+'blockiptext'                 => '用下面的表單來禁止來自某一特定IP地址的修改許可權。
+只有在為防止破壞，及符合[[{{MediaWiki:policy-url}}|守則]]的情況下才可採取此行動。
+請在下面輸入一個具體的理由（例如引述一個被破壞的頁面）。',
+'ipaddress'                   => 'IP地址',
+'ipadressorusername'          => 'IP地址或用戶名',
+'ipbexpiry'                   => '期限',
+'ipbreason'                   => '原因',
+'ipbreasonotherlist'          => '其它原因',
+'ipbreason-dropdown'          => '
+*一般的封禁理由
+** 屢次增加不實資料
+** 刪除頁面內容
+** 外部連結廣告
+** 在頁面中增加無意義文字
+** 無禮的行為、攻擊／騷擾別人
+** 濫用多個帳號
+** 不能接受的用戶名',
+'ipbanononly'                 => '僅阻止匿名用戶',
+'ipbcreateaccount'            => '阻止創建新帳號',
+'ipbenableautoblock'          => '自動查封此用戶最後所用的IP位址，以及後來試圖編輯所用的所有位址',
+'ipbsubmit'                   => '查封該地址',
+'ipbother'                    => '其它時間',
+'ipboptions'                  => '2小時:2 hours,1天:1 day,3天:3 days,1周:1 week,2周:2 weeks,1個月:1 month,3個月:3 months,6個月:6 months,1年:1 year,永久:infinite',
+'ipbotheroption'              => '其它',
+'ipbotherreason'              => '其它／附帶原因',
+'ipbhidename'                 => '在查封日誌、活躍查封列表以及用戶列表中隱藏用戶名／IP',
+'badipaddress'                => 'IP地址不正確。',
+'blockipsuccesssub'           => '查封成功',
+'blockipsuccesstext'          => '[[Special:Contributions/$1|$1]]已經被查封。
+<br />參看[[Special:Ipblocklist|被封IP地址列表]]以覆審查封。',
+'ipb-edit-dropdown'           => '編輯查封原因',
+'ipb-unblock-addr'            => '解除封禁$1',
+'ipb-unblock'                 => '解除禁封用戶名或IP地址',
+'ipb-blocklist-addr'          => '檢視$1的現有封禁',
+'ipb-blocklist'               => '檢視現有的封禁',
+'unblockip'                   => '解除禁封IP地址',
+'unblockiptext'               => '用下面的表單來恢復先前被禁封的IP地址的書寫權。',
+'ipusubmit'                   => '解除禁封',
+'unblocked'                   => '[[{{ns:2}}:$1|$1]] 的封禁已經解除。',
+'ipblocklist'                 => '被封IP地址列表',
+'ipblocklist-submit'          => '搜尋',
+'blocklistline'               => '$1，$2禁封$3 ($4)',
+'infiniteblock'               => '永久',
+'expiringblock'               => '$1 到期',
+'anononlyblock'               => '僅限匿名用戶',
+'noautoblockblock'            => '禁用自動查封',
+'createaccountblock'          => '禁止創建賬戶',
+'ipblocklistempty'            => '查封列表為空或所要求的IP地址/用戶名沒有被查封。',
+'blocklink'                   => '禁封',
+'unblocklink'                 => '解除禁封',
+'contribslink'                => '貢獻',
+'autoblocker'                 => '你的IP和被封了的 "$1" 是一樣的。封鎖原因： "$2".',
+'blocklogpage'                => '封鎖記錄',
+'blocklogentry'               => '"[[$1]]"已被查封 $3 ，終止時間為$2',
+'blocklogtext'                => '這是關於用戶封禁和解除封禁操作的記錄。被自動封禁的IP地址沒有被列出。請參閱[[Special:Ipblocklist|被查封的IP地址和用戶列表]]。',
+'unblocklogentry'             => '「[[$1]]」已被解封',
+'block-log-flags-anononly'    => '僅限匿名用戶',
+'block-log-flags-nocreate'    => '禁止此IP/用戶建立新帳戶',
+'block-log-flags-noautoblock' => '停用自動封禁',
+'range_block_disabled'        => '只有管理員才能創建禁止查封的範圍。',
+'ipb_expiry_invalid'          => '無效的終止時間。',
+'ipb_already_blocked'         => '已經封鎖"$1"',
+'ip_range_invalid'            => '無效的IP範圍。\n',
+'proxyblocker'                => '代理封鎖器',
+'ipb_cant_unblock'            => '錯誤: 沒有發現 Block ID $1。該 IP 可能已經被解封。',
+'proxyblockreason'            => '您的IP位址是一個開放的代理，它已經被封鎖。請聯繫您的網際網路服務提供商或技術支援者並告知告知他們該嚴重的安全問題。',
+'proxyblocksuccess'           => '完成。\n',
+'sorbs'                       => 'DNSBL',
+'sorbsreason'                 => '您的IP位址被[http://www.sorbs.net SORBS] DNSBL列為屬於開放代理服務器.',
+'sorbs_create_account_reason' => '由於您的IP位址被[http://www.sorbs.net SORBS] DNSBL列為屬於開放代理服務器，所以您無法建立帳號。',
+
+# Developer tools
+'lockdb'              => '禁止更改資料庫',
+'unlockdb'            => '開放更改資料庫',
+'lockdbtext'          => '鎖住資料庫將禁止所有用戶進行編輯頁面、更改參數、編輯監視列表以及其他需要更改資料庫的操作。
+請確認您的決定，並且保證您在維護工作結束後會重新開放資料庫。',
+'unlockdbtext'        => '開放資料庫將會恢復所有用戶進行編輯頁面、修改參數、編輯監視列表以及其他需要更改資料庫的操作。
+請確認您的決定。',
+'lockconfirm'         => '是的，我確實想要封鎖資料庫。',
+'unlockconfirm'       => '是的，我確實想要開放資料庫。',
+'lockbtn'             => '資料庫上鎖',
+'unlockbtn'           => '開放資料庫',
+'locknoconfirm'       => '您並沒有勾選確認按鈕。',
+'lockdbsuccesssub'    => '資料庫成功上鎖',
+'unlockdbsuccesssub'  => '資料庫開放',
+'lockdbsuccesstext'   => '{{SITENAME}}資料庫已經上鎖。
+<br />請記住在維護完成後重新開放資料庫。',
+'unlockdbsuccesstext' => '{{SITENAME}}資料庫重新開放。',
+'lockfilenotwritable' => '資料庫鎖定檔案不可寫入。要鎖定和解鎖資料庫，該檔案必須對網路伺服器可寫入。',
+'databasenotlocked'   => '資料庫沒有鎖定。',
+
+# Move page
+'movepage'                => '移動頁面',
+'movepagetext'            => "用下面的表單來重新命名一個頁面，並將其修訂歷史同時移動到新頁面。
+老的頁面將成為新頁面的重定向頁。
+連結到老頁面的連結並不會自動更改；
+請檢查雙重或損壞重定向連結。
+您應當負責確定所有連結依然會連到指定的頁面。
+
+注意如果新頁面已經有內容的話，頁面將'''不會'''被移動，
+除非新頁面無內容或是重定向頁，而且沒有修訂歷史。
+這意味著您再必要時可以在移動到新頁面後再移回老的頁面，
+同時您也無法覆蓋現有頁面。
+
+<b>警告！</b>
+對一個經常被訪問的頁面而言這可能是一個重大與唐突的更改；
+請在行動前先了結其所可能帶來的後果。",
+'movepagetalktext'        => "有關的對話頁（如果有的話）將被自動與該頁面一起移動，'''除非'''：
+*您將頁面移動到不同的名字空間；
+*新頁面已經有一個包含內容的對話頁，或者
+*您不勾選下面的覆選框。
+
+在這些情況下，您在必要時必須手工移動或合併頁面。",
+'movearticle'             => '移動頁面',
+'movenologin'             => '未登入',
+'movenologintext'         => '您必須是一名登記用戶並且[[Special:Userlogin|登入]]
+後才可移動一個頁面。',
+'newtitle'                => '新標題',
+'move-watch'              => '監視此頁',
+'movepagebtn'             => '移動頁面',
+'pagemovedsub'            => '移動成功',
+'pagemovedtext'           => '頁面「[[$1]]」已經移動到「[[$2]]」。',
+'articleexists'           => '該名字的頁面已經存在，或者您選擇的名字無效。請再選一個名字。',
+'talkexists'              => '頁面本身移動成功，
+但是由於新標題下已經有對話頁存在，所以對話頁無法移動。請手工合併兩個頁面。',
+'movedto'                 => '移動到',
+'movetalk'                => '如果可能的話，請同時移動對話頁。',
+'talkpagemoved'           => '相應的對話頁也已經移動。',
+'talkpagenotmoved'        => '相應的對話頁<strong>沒有</strong>被移動。',
+'1movedto2'               => '[[$1]]移動到[[$2]]',
+'1movedto2_redir'         => '[[$1]]透過重定向移動到[[$2]]',
+'movelogpage'             => '移動日誌',
+'movelogpagetext'         => '以下是已經移動的頁面清單:',
+'movereason'              => '原因',
+'revertmove'              => '恢復該移動',
+'delete_and_move'         => '刪除並移動',
+'delete_and_move_text'    => '==需要刪除==
+	
+目標文章"[[$1]]"已經存在。你確認需要刪除原頁面並以進行移動嗎？',
+'delete_and_move_confirm' => '是的，刪除此頁面',
+'delete_and_move_reason'  => '刪除以便移動',
+'selfmove'                => '原始標題與目標標題相同，您不能移動一頁覆蓋本身。',
+'immobile_namespace'      => '目標標題屬於特別類型；不能將頁面移入這個名字空間。',
+
+# Export
+'export'            => '匯出頁面',
+'exporttext'        => '您可以將特定頁面或一組頁面的文本以及編輯歷史以 XML 格式匯出；這樣可以將有關頁面透過"[[Special:Import|匯入頁面]]"頁面匯入到另一個運行 MediaWiki 的網站。
+
+要匯出頁面，請在下面的文字框中輸入頁面標題，每行一個標題，
+並選擇你是否需要匯出帶有頁面歷史的以前的版本，
+或是只選擇匯出帶有最後一次編輯訊息的當前版本。
+
+此外你還可以利用連結匯出檔案，例如你可以使用[[{{ns:special}}:Export/{{int:mainpage}}]]匯出{{int:mainpage}}頁面。',
+'exportcuronly'     => '僅包含當前的修訂，而不是全部的歷史。',
+'exportnohistory'   => "----
+'''注意:''' 由於性能原因，從此表單匯出頁面的全部歷史已被停用。",
+'export-submit'     => '匯出',
+'export-addcattext' => '由分類中加入頁面:',
+'export-addcat'     => '加入',
+
+# Namespace 8 related
+'allmessages'               => '系統介面',
+'allmessagesname'           => '名稱',
+'allmessagesdefault'        => '預設的文字',
+'allmessagescurrent'        => '當前的文字',
+'allmessagestext'           => '這裡列出所有可定製的系統介面。',
+'allmessagesnotsupportedUI' => 'Special:Allmessages不支援您目前使用的介面語言<b>$1</b>。',
+'allmessagesnotsupportedDB' => '系統介面功能處於關閉狀態 (wgUseDatabaseMessages)。',
+'allmessagesfilter'         => '正則表達式過濾條件：',
+'allmessagesmodified'       => '僅顯示修改過的',
+
+# Thumbnails
+'thumbnail-more'           => '放大',
+'missingimage'             => '<b>缺少圖像</b><br /><i>$1</i>',
+'filemissing'              => '無法找到檔案',
+'thumbnail_error'          => '創建縮圖錯誤: $1',
+'djvu_page_error'          => 'DjVu頁面超出範圍',
+'djvu_no_xml'              => '無法在DjVu檔案中擷取XML',
+'thumbnail_invalid_params' => '不正確的縮圖參數',
+'thumbnail_dest_directory' => '無法建立目標目錄',
+
+# Special:Import
+'import'                     => '匯入頁面',
+'importinterwiki'            => '跨 wiki 匯入',
+'import-interwiki-text'      => '選擇一個 wiki 和頁面標題以進行匯入。
+修訂日期和編輯者名字將同時被儲存。
+所有的跨 wiki 匯入操作被記錄在[[Special:Log/import|匯入日誌]]。',
+'import-interwiki-history'   => '複製此頁的所有歷史版本',
+'import-interwiki-submit'    => '匯入',
+'import-interwiki-namespace' => '將頁面轉移到名字空間:',
+'importtext'                 => '請使用 Special:Export 功能從源 wiki 匯出檔案，儲存到您的磁片並上傳到這裡。',
+'importstart'                => '正在匯入頁面...',
+'import-revision-count'      => '$1個修訂',
+'importnopages'              => '沒有匯入的頁面。',
+'importfailed'               => '匯入失敗: $1',
+'importunknownsource'        => '未知的源匯入類型',
+'importcantopen'             => '無法打開匯入檔案',
+'importbadinterwiki'         => '損壞的內部 wiki 連結',
+'importnotext'               => '空或沒有文字',
+'importsuccess'              => '匯入成功﹗',
+'importhistoryconflict'      => '存在衝突的修訂歷史(可能在之前已經匯入過此頁面)',
+'importnosources'            => '跨Wiki匯入源沒有定義，同時不允許直接的歷史上傳。',
+'importnofile'               => '沒有上傳匯入檔案。',
+'importuploaderror'          => '上傳匯入檔案失敗；可能是該檔案大於允許的檔案上傳大小。',
+
+# Import log
+'importlogpage'                    => '匯入日誌',
+'importlogpagetext'                => '來自其它 wiki 的行政性的帶編輯歷史匯入頁面。',
+'import-logentry-upload'           => '透過檔案上傳匯入的$1',
+'import-logentry-upload-detail'    => '$1個修訂',
+'import-logentry-interwiki'        => '跨 wiki $1',
+'import-logentry-interwiki-detail' => '來自$2的$1個修訂',
+
+# Tooltip help for the actions
+'tooltip-pt-userpage'             => '我的用戶頁',
+'tooltip-pt-anonuserpage'         => '您編輯本站所用IP的對應用戶頁',
+'tooltip-pt-mytalk'               => '我的對話頁',
+'tooltip-pt-anontalk'             => '對於來自此IP地址編輯的對話',
+'tooltip-pt-preferences'          => '我的參數設置',
+'tooltip-pt-watchlist'            => '我的監視列表',
+'tooltip-pt-mycontris'            => '我的貢獻列表',
+'tooltip-pt-login'                => '建議您登入，儘管並非必須。',
+'tooltip-pt-anonlogin'            => '建議您登入，儘管並非必須。',
+'tooltip-pt-logout'               => '登出',
+'tooltip-ca-talk'                 => '關於頁面正文的討論',
+'tooltip-ca-edit'                 => '您可以編輯此頁，請在保存之前先預覽一下。',
+'tooltip-ca-addsection'           => '於本討論頁增加新的討論主題',
+'tooltip-ca-viewsource'           => '該頁面已被保護。你可以查看該頁原始碼。',
+'tooltip-ca-history'              => '本頁面的早前版本。',
+'tooltip-ca-protect'              => '保護該頁面',
+'tooltip-ca-delete'               => '刪除本頁',
+'tooltip-ca-undelete'             => '將這個頁面恢復到被刪除以前的狀態',
+'tooltip-ca-move'                 => '移動本頁',
+'tooltip-ca-watch'                => '將此頁面加入監視列表',
+'tooltip-ca-unwatch'              => '將此頁面從監視列表中移除',
+'tooltip-search'                  => '搜尋該網站',
+'tooltip-p-logo'                  => '首頁',
+'tooltip-n-mainpage'              => '訪問首頁',
+'tooltip-n-portal'                => '關於本計畫、你可以做什麼、應該如何做',
+'tooltip-n-currentevents'         => '提供當前新聞事件的背景資料',
+'tooltip-n-recentchanges'         => '列出該網站中的最近修改',
+'tooltip-n-randompage'            => '隨機載入一個頁面',
+'tooltip-n-help'                  => '尋求幫助',
+'tooltip-n-sitesupport'           => '資助我們',
+'tooltip-t-whatlinkshere'         => '列出所有與本頁相鏈的頁面',
+'tooltip-t-recentchangeslinked'   => '頁面鏈出所有頁面的更改',
+'tooltip-feed-rss'                => '訂閱本頁面歷史的RSS資訊',
+'tooltip-feed-atom'               => '訂閱本頁面歷史的Atom訊息',
+'tooltip-t-contributions'         => '查看該用戶的貢獻列表',
+'tooltip-t-emailuser'             => '向該用戶發送電子郵件',
+'tooltip-t-upload'                => '上傳圖像或多媒體檔',
+'tooltip-t-specialpages'          => '全部特殊頁面的列表',
+'tooltip-ca-nstab-main'           => '查看頁面內容',
+'tooltip-ca-nstab-user'           => '查看用戶頁',
+'tooltip-ca-nstab-media'          => '查看多媒體檔案資訊頁面',
+'tooltip-ca-nstab-special'        => '本頁面會隨著資料庫的數據即時更新，任何人均不能直接編輯',
+'tooltip-ca-nstab-project'        => '查看項目頁面',
+'tooltip-ca-nstab-image'          => '查詢圖片頁面',
+'tooltip-ca-nstab-mediawiki'      => '查看系統資訊',
+'tooltip-ca-nstab-template'       => '查看模板',
+'tooltip-ca-nstab-help'           => '查看幫助頁面',
+'tooltip-ca-nstab-category'       => '查看分類頁面',
+'tooltip-minoredit'               => '標記為小修改',
+'tooltip-save'                    => '保存您的修改',
+'tooltip-preview'                 => '預覽您的編輯，請先使用本功能再保存！',
+'tooltip-diff'                    => '顯示您對文章的貢獻',
+'tooltip-compareselectedversions' => '查看本頁被點選的兩個版本間的差異',
+'tooltip-watch'                   => '將此頁加入您的監視列表',
+'tooltip-recreate'                => '重建該頁面，無論是否被刪除。',
+
+# Stylesheets
+'common.css'   => '/* 此處的 CSS 將應用於所有的面板 */',
+'monobook.css' => '/* 此處的 CSS 將影響使用 Monobook 面板的用戶 */',
+
+# Scripts
+'common.js'   => '/* 此處的JavaScript將載入於所有用戶每一個頁面。 */',
+'monobook.js' => '/* 已經不再使用；請用[[MediaWiki:common.js]] */',
+
+# Metadata
+'nodublincore'      => 'Dublin Core RDF 元數據在該伺服器不可使用。',
+'nocreativecommons' => 'Creative Commons RDF 元數據在該伺服器不可使用。',
+'notacceptable'     => '該網站伺服器不能提供您的客戶端能識別的數據格式。',
+
+# Attribution
+'anonymous'        => '{{SITENAME}}的匿名用戶',
+'siteuser'         => '{{SITENAME}}用戶$1',
+'lastmodifiedatby' => '此頁由$3於$1 $2的最後更改。', # $1 date, $2 time, $3 user
+'and'              => '和',
+'othercontribs'    => '在$1的工作基礎上。',
+'others'           => '其他',
+'siteusers'        => '{{SITENAME}}用戶$1',
+'creditspage'      => '頁面致謝',
+'nocredits'        => '該頁沒有致謝名單訊息。',
+
+# Spam protection
+'spamprotectiontitle'    => '垃圾過濾器',
+'spamprotectiontext'     => '垃圾過濾器禁止保存您剛才提交的頁面，這可能是由於您所加入的外部網站鏈接所產生的問題。',
+'spamprotectionmatch'    => '觸發了我們的垃圾過濾器的文本如下：$1',
+'subcategorycount'       => '這個分類下有$1個子分類。',
+'categoryarticlecount'   => '這個分類中共有$1篇文章',
+'category-media-count'   => '在這個分類中有$1個檔案。',
+'listingcontinuesabbrev' => ' 續',
+'spambot_username'       => 'MediaWiki 廣告清除',
+'spam_reverting'         => '恢復到不包含連結至$1的最近版本',
+'spam_blanking'          => '所有包含連結至$1的修訂，清空',
+
+# Info page
+'infosubtitle'   => '頁面信息',
+'numedits'       => '編輯數 (文章): $1',
+'numtalkedits'   => '編輯數 (討論頁): $1',
+'numwatchers'    => '監視者數目: $1',
+'numauthors'     => '作者數量 (文章): $1',
+'numtalkauthors' => '作者數量 (討論頁): $1',
+
+# Math options
+'mw_math_png'    => '永遠使用PNG圖像',
+'mw_math_simple' => '如果是簡單的公式使用HTML，否則使用PNG圖像',
+'mw_math_html'   => '如果可以用HTML，否則用PNG圖像',
+'mw_math_source' => '顯示為TeX代碼 (使用文字瀏覽器時)',
+'mw_math_modern' => '推薦為新版瀏覽器使用',
+'mw_math_mathml' => '儘可能使用MathML (試驗中)',
+
+# Patrolling
+'markaspatrolleddiff'                 => '標記為已檢查',
+'markaspatrolledtext'                 => '標記此文章為已檢查',
+'markedaspatrolled'                   => '標記為已檢查',
+'markedaspatrolledtext'               => '選定的版本已被標記為已檢查.',
+'rcpatroldisabled'                    => '最新更改檢查被關閉',
+'rcpatroldisabledtext'                => '最新更改檢查的功能目前已關閉。',
+'markedaspatrollederror'              => '不能標誌為已檢查',
+'markedaspatrollederrortext'          => '你需要指定某個版本才能標誌為已檢查。',
+'markedaspatrollederror-noautopatrol' => '您無法將你自己所作的更改標記為已檢查。',
+
+# Patrol log
+'patrol-log-page' => '巡查記錄',
+'patrol-log-line' => '已經標示$1/$2版做已巡查的$3',
+'patrol-log-auto' => '(自動)',
+'patrol-log-diff' => 'r$1',
+
+# Image deletion
+'deletedrevision' => '已刪除舊版本$1。',
+
+# Browsing diffs
+'previousdiff' => '←上一個',
+'nextdiff'     => '下一個→',
+
+# Media information
+'mediawarning'         => "'''警告''': 該檔案可能包含惡意代碼，執行它可能對您的系統帶來危險。<hr>",
+'imagemaxsize'         => '在圖像描述頁對圖像大小限制為:',
+'thumbsize'            => '略圖大小:',
+'file-info'            => '(檔案大小: $1, MIME 類型: $2)',
+'file-info-size'       => '($1 × $2 像素，檔案大小：$3 ，MIME類型：$4)',
+'file-nohires'         => '<small>無更高解像度可提供。</small>',
+'file-svg'             => '<small>這是一幅無損可縮放的向量圖像。基本大小: $1 × $2 像素。</small>',
+'show-big-image'       => '完整解像度',
+'show-big-image-thumb' => '<small>這幅縮圖的解像度: $1 × $2 像素</small>',
+
+'newimages'    => '新建圖像畫廊',
+'showhidebots' => '($1機器人)',
+'noimages'     => '無可檢視圖像。',
+
+/*
+Short names for language variants used for language conversion links.
+To disable showing a particular link, set it to 'disable', e.g.
+'variantname-zh-sg' => 'disable',
+Variants for Chinese language
+*/
+'variantname-zh-cn' => '大陸簡體',
+'variantname-zh-tw' => '台灣繁體',
+'variantname-zh-hk' => '香港繁體',
+'variantname-zh-sg' => '新加坡簡體',
+'variantname-zh'    => '不轉換',
+
+'passwordtooshort' => '您的密碼不正確或太短，不能少於$1個字元，而且必須跟用戶名不同。',
+
+# Metadata
+'metadata'          => '元數據',
+'metadata-help'     => '此檔案中包含有擴展的訊息。這些訊息可能是由數位相機或掃描儀在創建或數字化過程中所添加的。
+
+如果此檔案的源檔案已經被修改，一些訊息在修改後的檔案中將不能完全反映出來。',
+'metadata-expand'   => '顯示詳細資料',
+'metadata-collapse' => '隱藏詳細資料',
+'metadata-fields'   => '在本訊息中所列出的 EXIF 元數據域將包含在圖片顯示頁面, 
+當元數據表損壞時只顯示以下訊息，其他的元數據預設為隱藏。
+* 相機製造商
+* 相機型號
+* 原始日期時間
+* 曝光時間
+* 光圈(F值)
+* 焦距',
+
+# EXIF tags
+'exif-imagewidth'                  => '寬度',
+'exif-imagelength'                 => '高度',
+'exif-bitspersample'               => '每象素比特數',
+'exif-compression'                 => '壓縮方案',
+'exif-photometricinterpretation'   => '象素合成',
+'exif-orientation'                 => '方位',
+'exif-samplesperpixel'             => '象素數',
+'exif-planarconfiguration'         => '數據排列',
+'exif-ycbcrsubsampling'            => '黃色對洋紅二次抽樣比率',
+'exif-ycbcrpositioning'            => '黃色和洋紅配置',
+'exif-xresolution'                 => '水準分辨率',
+'exif-yresolution'                 => '垂直分辨率',
+'exif-resolutionunit'              => 'X 軸與 Y 軸分辨率單位',
+'exif-stripoffsets'                => '圖像數據區',
+'exif-rowsperstrip'                => '每帶行數',
+'exif-stripbytecounts'             => '每壓縮帶位元組數',
+'exif-jpeginterchangeformat'       => 'JPEG SOI 偏移',
+'exif-jpeginterchangeformatlength' => 'JPEG 數據位元組',
+'exif-transferfunction'            => '轉移功能',
+'exif-whitepoint'                  => '白點色度',
+'exif-primarychromaticities'       => '主要色度',
+'exif-ycbcrcoefficients'           => '顏色空間轉換矩陣系數',
+'exif-referenceblackwhite'         => '黑白參照值對',
+'exif-datetime'                    => '檔案更改日期和時間',
+'exif-imagedescription'            => '圖像標題',
+'exif-make'                        => '照相機製造商',
+'exif-model'                       => '照相機型號',
+'exif-software'                    => '所用軟體',
+'exif-artist'                      => '作者',
+'exif-copyright'                   => '版權所有者',
+'exif-exifversion'                 => 'Exif 版本',
+'exif-flashpixversion'             => '支援的 Flashpix 版本',
+'exif-colorspace'                  => '顏色空間',
+'exif-componentsconfiguration'     => '每分量含義',
+'exif-compressedbitsperpixel'      => '圖像壓縮模式',
+'exif-pixelydimension'             => '有效圖像寬度',
+'exif-pixelxdimension'             => '有效圖像高度',
+'exif-makernote'                   => '製造商註釋',
+'exif-usercomment'                 => '用戶註釋',
+'exif-relatedsoundfile'            => '相關的音頻檔案',
+'exif-datetimeoriginal'            => '數據產生時間',
+'exif-datetimedigitized'           => '數字化處理時間',
+'exif-subsectime'                  => '日期時間秒',
+'exif-subsectimeoriginal'          => '原始日期時間秒',
+'exif-subsectimedigitized'         => '數字化日期時間秒',
+'exif-exposuretime'                => '曝光時間',
+'exif-exposuretime-format'         => '$1 秒 ($2)',
+'exif-fnumber'                     => '光圈(F值)',
+'exif-fnumber-format'              => 'f/$1',
+'exif-exposureprogram'             => '曝光模式',
+'exif-spectralsensitivity'         => '感光',
+'exif-isospeedratings'             => 'ISO 速率',
+'exif-oecf'                        => '光電轉換因子',
+'exif-shutterspeedvalue'           => '快門速度',
+'exif-aperturevalue'               => '光圈',
+'exif-brightnessvalue'             => '亮度',
+'exif-exposurebiasvalue'           => '曝光補償',
+'exif-maxaperturevalue'            => '最大陸地光圈',
+'exif-subjectdistance'             => '物距',
+'exif-meteringmode'                => '測量模式',
+'exif-lightsource'                 => '光源',
+'exif-flash'                       => '閃光燈',
+'exif-focallength'                 => '焦距',
+'exif-focallength-format'          => '$1 mm',
+'exif-subjectarea'                 => '主體區域',
+'exif-flashenergy'                 => '閃光燈強度',
+'exif-spatialfrequencyresponse'    => '空間頻率附應',
+'exif-focalplanexresolution'       => 'X軸焦平面分辨率',
+'exif-focalplaneyresolution'       => 'Y軸焦平面分辨率',
+'exif-focalplaneresolutionunit'    => '焦平面分辨率單位',
+'exif-subjectlocation'             => '主題位置',
+'exif-exposureindex'               => '曝光指數',
+'exif-sensingmethod'               => '感光模式',
+'exif-filesource'                  => '檔案源',
+'exif-scenetype'                   => '場景類型',
+'exif-cfapattern'                  => 'CFA 模式',
+'exif-customrendered'              => '自定義圖像處理',
+'exif-exposuremode'                => '曝光模式',
+'exif-whitebalance'                => '白平衡',
+'exif-digitalzoomratio'            => '數字變焦比率',
+'exif-focallengthin35mmfilm'       => '35毫米膠片焦距',
+'exif-scenecapturetype'            => '情景拍攝類型',
+'exif-gaincontrol'                 => '場景控制',
+'exif-contrast'                    => '對比度',
+'exif-saturation'                  => '飽和度',
+'exif-sharpness'                   => '銳化',
+'exif-devicesettingdescription'    => '設備設定描述',
+'exif-subjectdistancerange'        => '主體距離範圍',
+'exif-imageuniqueid'               => '唯一圖像ID',
+'exif-gpsversionid'                => 'GPS 標籤(tag)版本',
+'exif-gpslatituderef'              => '北緯或南緯',
+'exif-gpslatitude'                 => '緯度',
+'exif-gpslongituderef'             => '東經或西經',
+'exif-gpslongitude'                => '經度',
+'exif-gpsaltituderef'              => '海拔正負參照',
+'exif-gpsaltitude'                 => '海拔',
+'exif-gpstimestamp'                => 'GPS 時間(原子時鐘)',
+'exif-gpssatellites'               => '測量使用的衛星',
+'exif-gpsstatus'                   => '接收器狀態',
+'exif-gpsmeasuremode'              => '測量模式',
+'exif-gpsdop'                      => '測量精度',
+'exif-gpsspeedref'                 => '速度單位',
+'exif-gpsspeed'                    => 'GPS 接收器速度',
+'exif-gpstrackref'                 => '運動方位參照',
+'exif-gpstrack'                    => '運動方位',
+'exif-gpsimgdirectionref'          => '圖像方位參照',
+'exif-gpsimgdirection'             => '圖像方位',
+'exif-gpsmapdatum'                 => '使用地理測繪數據',
+'exif-gpsdestlatituderef'          => '目標緯度參照',
+'exif-gpsdestlatitude'             => '目標緯度',
+'exif-gpsdestlongituderef'         => '目標經度的參照',
+'exif-gpsdestlongitude'            => '目標經度',
+'exif-gpsdestbearingref'           => '目標方位參照',
+'exif-gpsdestbearing'              => '目標方位',
+'exif-gpsdestdistanceref'          => '目標距離參照',
+'exif-gpsdestdistance'             => '目標距離',
+'exif-gpsprocessingmethod'         => 'GPS 處理方法名稱',
+'exif-gpsareainformation'          => 'GPS 區域名稱',
+'exif-gpsdatestamp'                => 'GPS 日期',
+'exif-gpsdifferential'             => 'GPS 差動修正',
+
+# EXIF attributes
+'exif-compression-1' => '未壓縮',
+'exif-compression-6' => 'JPEG',
+
+'exif-photometricinterpretation-2' => 'RGB',
+'exif-photometricinterpretation-6' => 'YCbCr',
+
+'exif-unknowndate' => '未知的日期',
+
+'exif-orientation-1' => '標準', # 0th row: top; 0th column: left
+'exif-orientation-2' => '水準翻轉', # 0th row: top; 0th column: right
+'exif-orientation-3' => '旋轉180°', # 0th row: bottom; 0th column: right
+'exif-orientation-4' => '垂直翻轉', # 0th row: bottom; 0th column: left
+'exif-orientation-5' => '旋轉90° 逆時針並垂直翻轉', # 0th row: left; 0th column: top
+'exif-orientation-6' => '旋轉90° 順時針', # 0th row: right; 0th column: top
+'exif-orientation-7' => '旋轉90° 順時針並垂直翻轉', # 0th row: right; 0th column: bottom
+'exif-orientation-8' => '旋轉90° 逆時針', # 0th row: left; 0th column: bottom
+
+'exif-planarconfiguration-1' => '矮胖格式',
+'exif-planarconfiguration-2' => '平面格式',
+
+'exif-xyresolution-i' => '$1 dpi',
+'exif-xyresolution-c' => '$1 dpc',
+
+'exif-colorspace-1'      => 'sRGB',
+'exif-colorspace-ffff.h' => 'FFFF.H',
+
+'exif-componentsconfiguration-0' => '不存在',
+'exif-componentsconfiguration-1' => 'Y',
+'exif-componentsconfiguration-2' => 'Cb',
+'exif-componentsconfiguration-3' => 'Cr',
+'exif-componentsconfiguration-4' => 'R',
+'exif-componentsconfiguration-5' => 'G',
+'exif-componentsconfiguration-6' => 'B',
+
+'exif-exposureprogram-0' => '未定義',
+'exif-exposureprogram-1' => '手動',
+'exif-exposureprogram-2' => '標準程式',
+'exif-exposureprogram-3' => '光圈優先模式',
+'exif-exposureprogram-4' => '快門優先模式',
+'exif-exposureprogram-5' => '藝術程式(景深優先)',
+'exif-exposureprogram-6' => '運動程式(快速快門速度優先)',
+'exif-exposureprogram-7' => '肖像模式(適用於背景在焦距以外的近距攝影)',
+'exif-exposureprogram-8' => '風景模式(適用於背景在焦距上的風景照片)',
+
+'exif-subjectdistance-value' => '$1米',
+
+'exif-meteringmode-0'   => '未知',
+'exif-meteringmode-1'   => '平均水準',
+'exif-meteringmode-2'   => '中心加權平均測量',
+'exif-meteringmode-3'   => '點測',
+'exif-meteringmode-4'   => '多點測',
+'exif-meteringmode-5'   => '模式測量',
+'exif-meteringmode-6'   => '局部測量',
+'exif-meteringmode-255' => '其它',
+
+'exif-lightsource-0'   => '未知',
+'exif-lightsource-1'   => '日光燈',
+'exif-lightsource-2'   => '熒光燈',
+'exif-lightsource-3'   => '鎢絲燈(白熾燈)',
+'exif-lightsource-4'   => '閃光燈',
+'exif-lightsource-9'   => '晴天',
+'exif-lightsource-10'  => '多雲',
+'exif-lightsource-11'  => '深色調陰影',
+'exif-lightsource-12'  => '日光熒光燈(色溫 D 5700    7100K)',
+'exif-lightsource-13'  => '日溫白色熒光燈(N 4600    5400K)',
+'exif-lightsource-14'  => '冷白色熒光燈(W 3900    4500K)',
+'exif-lightsource-15'  => '白色熒光 (WW 3200    3700K)',
+'exif-lightsource-17'  => '標準燈光A',
+'exif-lightsource-18'  => '標準燈光B',
+'exif-lightsource-19'  => '標準燈光C',
+'exif-lightsource-20'  => 'D55',
+'exif-lightsource-21'  => 'D65',
+'exif-lightsource-22'  => 'D75',
+'exif-lightsource-23'  => 'D50',
+'exif-lightsource-24'  => 'ISO攝影棚鎢燈',
+'exif-lightsource-255' => '其他光源',
+
+'exif-focalplaneresolutionunit-2' => '英寸',
+
+'exif-sensingmethod-1' => '未定義',
+'exif-sensingmethod-2' => '一塊彩色區域傳感器',
+'exif-sensingmethod-3' => '兩塊彩色區域傳感器',
+'exif-sensingmethod-4' => '三塊彩色區域傳感器',
+'exif-sensingmethod-5' => '連續彩色區域傳感器',
+'exif-sensingmethod-7' => '三線傳感器',
+'exif-sensingmethod-8' => '連續彩色線性傳感器',
+
+'exif-filesource-3' => 'DSC',
+
+'exif-scenetype-1' => '直接照像圖片',
+
+'exif-customrendered-0' => '標準處理',
+'exif-customrendered-1' => '自定義處理',
+
+'exif-exposuremode-0' => '自動曝光',
+'exif-exposuremode-1' => '手動曝光',
+'exif-exposuremode-2' => '自動曝光感知調節',
+
+'exif-whitebalance-0' => '自動白平衡',
+'exif-whitebalance-1' => '手動白平衡',
+
+'exif-scenecapturetype-0' => '標準',
+'exif-scenecapturetype-1' => '風景',
+'exif-scenecapturetype-2' => '肖像',
+'exif-scenecapturetype-3' => '夜景',
+
+'exif-gaincontrol-0' => '無',
+'exif-gaincontrol-1' => '低增益',
+'exif-gaincontrol-2' => '高增益',
+'exif-gaincontrol-3' => '低減益',
+'exif-gaincontrol-4' => '高減益',
+
+'exif-contrast-0' => '標準',
+'exif-contrast-1' => '低',
+'exif-contrast-2' => '高',
+
+'exif-saturation-0' => '標準',
+'exif-saturation-1' => '低飽和度',
+'exif-saturation-2' => '高飽和度',
+
+'exif-sharpness-0' => '標準',
+'exif-sharpness-1' => '低',
+'exif-sharpness-2' => '高',
+
+'exif-subjectdistancerange-0' => '未知',
+'exif-subjectdistancerange-1' => '自動處理程式(宏)',
+'exif-subjectdistancerange-2' => '近景',
+'exif-subjectdistancerange-3' => '遠景',
+
+# Pseudotags used for GPSLatitudeRef and GPSDestLatitudeRef
+'exif-gpslatitude-n' => '北緯',
+'exif-gpslatitude-s' => '南緯',
+
+# Pseudotags used for GPSLongitudeRef and GPSDestLongitudeRef
+'exif-gpslongitude-e' => '東經',
+'exif-gpslongitude-w' => '西經',
+
+'exif-gpsstatus-a' => '測量過程',
+'exif-gpsstatus-v' => '互動測量',
+
+'exif-gpsmeasuremode-2' => '二維測量',
+'exif-gpsmeasuremode-3' => '三維測量',
+
+# Pseudotags used for GPSSpeedRef and GPSDestDistanceRef
+'exif-gpsspeed-k' => '公里每小時',
+'exif-gpsspeed-m' => '英里每小時',
+'exif-gpsspeed-n' => '海里每小時(節)',
+
+# Pseudotags used for GPSTrackRef, GPSImgDirectionRef and GPSDestBearingRef
+'exif-gpsdirection-t' => '真方位',
+'exif-gpsdirection-m' => '地磁方位',
+
+# External editor support
+'edit-externally'      => '用外部程式編輯此檔案',
+'edit-externally-help' => '請參見[http://meta.wikimedia.org/wiki/Help:External_editors 設定步驟]了解詳細信息。',
+
+# 'all' in various places, this might be different for inflected languages
+'recentchangesall' => '全部',
+'imagelistall'     => '全部',
+'watchlistall1'    => '全部',
+'watchlistall2'    => '全部',
+'namespacesall'    => '全部',
+
+# E-mail address confirmation
+'confirmemail'            => '確認郵箱位址',
+'confirmemail_noemail'    => '您沒有在您的[[Special:Preferences|用戶設定]]裡面輸入一個有效的 email 位址。',
+'confirmemail_text'       => '此網站要求您在使用郵件功能之前驗證您的郵箱位址。
+點擊以下按鈕可向您的郵箱發送一封確認郵件。該郵件包含有一行代碼連結；
+請在您的瀏覽器中加載此連結以確認您的郵箱位址是有效的。',
+'confirmemail_pending'    => '<div class="error">
+一個確認代碼已經被發送到您的郵箱，您可能需要等幾分鐘才能收到。如果無法收到，請在申請一個新的確認碼！
+</div>',
+'confirmemail_send'       => '郵發確認代碼',
+'confirmemail_sent'       => '確認郵件已發送。',
+'confirmemail_oncreate'   => '一個確認代碼已經被發送到您的郵箱。該代碼並不要求您進行登錄，
+但若您要啟用在此 wiki 上的任何基於電子郵件的功能，您必須先提交此代碼。',
+'confirmemail_sendfailed' => '不能發送確認郵件，請檢查郵箱位址是否包含非法字元。
+
+郵件傳送員回應: $1',
+'confirmemail_invalid'    => '無效的確認碼，該代碼可能已經過期。',
+'confirmemail_needlogin'  => '您需要$1以確認您的郵箱位址。',
+'confirmemail_success'    => '您的郵箱已經被確認。您現下可以登錄並使用此網站了。',
+'confirmemail_loggedin'   => '您的郵箱位址現下已被確認。',
+'confirmemail_error'      => '你的確認過程發生錯誤。',
+'confirmemail_subject'    => '{{SITENAME}}郵箱位址確認',
+'confirmemail_body'       => '擁有IP位址$1的用戶(可能是您)在{{SITENAME}}創建了帳戶"$2"，並提交了您的電子郵箱位址。
+		
+請確認這個帳戶是屬於您的，並同時啟用在{{SITENAME}}上的
+電子郵件功能。請在瀏覽器中打開下面的連結:
+
+$3
+
+如果您*沒有*提出這個請求，請不要點擊此連結。確認碼會在$4過期。',
+
+# Inputbox extension, may be useful in other contexts as well
+'tryexact'       => '嘗試精確匹配',
+'searchfulltext' => '全文檢索',
+'createarticle'  => '建立文章',
+
+# Scary transclusion
+'scarytranscludedisabled' => '[跨wiki轉換代碼不可用]',
+'scarytranscludefailed'   => '[抱歉，模板$1讀取失敗]',
+'scarytranscludetoolong'  => '[抱歉，URL 地址太長]',
+
+# Trackbacks
+'trackbackbox'      => '<div id="mw_trackbacks">
+此文章的引用:<br />
+$1
+</div>',
+'trackbackremove'   => '([$1删除])',
+'trackbacklink'     => '迴響',
+'trackbackdeleteok' => 'Trackback 刪除成功。',
+
+# Delete conflict
+'deletedwhileediting' => '警告: 此頁在您開始編輯之後已經被刪除﹗',
+'confirmrecreate'     => '在您編輯這個頁面後，用戶[[User:$1|$1]]([[User talk:$1|對話]])以下列原因刪除了這個頁面: $2。請在重新創建頁面前三思。',
+'recreate'            => '重建',
+
+'unit-pixel' => 'px',
+
+# HTML dump
+'redirectingto' => '重定向到[[$1]]...',
+
+# action=purge
+'confirm_purge'        => '要清除此頁面的快取嗎?\n\n$1',
+'confirm_purge_button' => '確定',
+
+'youhavenewmessagesmulti' => '您在 $1 有一條新訊息',
+
+'searchcontaining' => "搜索包含''$1''的文章。",
+'searchnamed'      => "搜索名稱為''$1''的文章。",
+'articletitles'    => '文章以"$1"開頭',
+'hideresults'      => '隱藏結果',
+
+# DISPLAYTITLE
+'displaytitle' => '(以[[$1]]連結到此頁)',
+
+'loginlanguagelabel' => '語言: $1',
+
+# Multipage image navigation
+'imgmultipageprev'   => '← 上一頁',
+'imgmultipagenext'   => '下一頁 →',
+'imgmultigo'         => '確定！',
+'imgmultigotopre'    => '到第',
+'imgmultigotopost'   => '頁',
+'imgmultiparseerror' => '鏡像檔案可能已損壞或不正確，因此{{SITENAME}}無法找回頁面列表。',
+
+# Table pager
+'ascending_abbrev'         => '遞增',
+'descending_abbrev'        => '遞減',
+'table_pager_next'         => '下一頁',
+'table_pager_prev'         => '上一頁',
+'table_pager_first'        => '第一頁',
+'table_pager_last'         => '最末頁',
+'table_pager_limit'        => '每頁顯示 $1 筆記錄',
+'table_pager_limit_submit' => '送出',
+'table_pager_empty'        => '沒有結果',
+
+# Auto-summaries
+'autosumm-blank'   => '移除所有頁面內容',
+'autosumm-replace' => "正在將頁面替換為 '$1'",
+'autoredircomment' => '正在重定向到 [[$1]]', # This should be changed to the new naming convention, but existed beforehand
+'autosumm-new'     => '新頁面: $1',
+
+# Size units
+'size-bytes'     => '$1 位元組',
+'size-kilobytes' => '$1 KB',
+'size-megabytes' => '$1 MB',
+'size-gigabytes' => '$1 GB',
+
+# Live preview
+'livepreview-loading' => '正在載入…',
+'livepreview-ready'   => '正在載入… 完成!',
+'livepreview-failed'  => "實時預覽失敗!\n嘗試標準預覽。",
+'livepreview-error'   => "連接失敗: $1 \"$2\"\n嘗試標準預覽。",
+
+);
+
+?>
Index: /MediaWiki/branches/1.11/languages/messages/MessagesZh_yue.php
===================================================================
--- /MediaWiki/branches/1.11/languages/messages/MessagesZh_yue.php	(revision 1280)
+++ /MediaWiki/branches/1.11/languages/messages/MessagesZh_yue.php	(revision 1280)
@@ -0,0 +1,2329 @@
+<?php
+/**
+  * Cantonese (粵語/廣東話)
+  *
+  * @addtogroup Language
+  */
+
+$skinNames = array(
+	'standard' 	=> '傳統', /* "Classic, Standard" */
+	'nostalgia' 	=> '懷舊', /* "Nostalgia" */
+	'cologneblue' 	=> '科隆藍', /* "Cologne Blue" */
+	'davinci' 	=> '達文西', /* "DaVinci" */
+	'mono' 		=> '簡單', /* "Mono" */
+	'monobook' 	=> 'MonoBook',
+	'myskin' 	=> '我嘅皮', /* "MySkin" */
+	'chick' 	=> '小妞', /* "Chick" */
+	'simple' 	=> '簡單' /* "Simple" */
+);
+
+$bookstoreList = array(
+	'AddALL' => 'http://www.addall.com/New/Partner.cgi?query=$1&type=ISBN',
+	'PriceSCAN' => 'http://www.pricescan.com/books/bookDetail.asp?isbn=$1',
+	'Barnes & Noble' => 'http://search.barnesandnoble.com/bookSearch/isbnInquiry.asp?isbn=$1',
+	'亞馬遜' => 'http://www.amazon.com/exec/obidos/ISBN=$1',
+	'博客來書店' => 'http://www.books.com.tw/exep/openfind_book_keyword.php?cat1=4&key1=$1',
+	'三民書店' => 'http://www.sanmin.com.tw/page-qsearch.asp?ct=search_isbn&qu=$1',
+	'天下書店' => 'http://www.cwbook.com.tw/cw/TS.jsp?schType=product.isbn&schStr=$1',
+	'新絲書店' => 'http://www.silkbook.com/function/Search_List_Book.asp?item=5&text=$1'
+);
+
+$datePreferences = array(
+	'default',
+	'yue dmy',
+	'yue mdy',
+	'yue ymd',
+	'ISO 8601',
+);
+
+$defaultDateFormat = 'yue';
+
+$dateFormats = array(
+	'yue time' => 'H:i',
+	'yue date' => 'Y年n月j號 (l)',
+	'yue both' => 'Y年n月j號 (D) H:i',
+
+	'yue dmy time' => 'H:i',
+	'yue dmy date' => 'j-n-Y',
+	'yue dmy both' => 'j-n-Y H:i',
+
+	'yue mdy time' => 'H:i',
+	'yue mdy date' => 'n-j-Y',
+	'yue mdy both' => 'n-j-Y H:i',
+
+	'yue ymd time' => 'H:i',
+	'yue ymd date' => 'Y-n-j',
+	'yue ymd both' => 'Y-n-j H:i',
+);
+
+$namespaceNames = array(
+	NS_MEDIA 		=> 'Media',
+	NS_SPECIAL 		=> 'Special',
+	NS_MAIN			=> '',
+	NS_TALK			=> 'Talk',
+	NS_USER 		=> 'User',
+	NS_USER_TALK 		=> 'User_talk',
+	# NS_PROJECT 		=> $wgMetaNamespace,
+	NS_PROJECT_TALK 	=> '$1_talk',
+	NS_IMAGE 		=> 'Image',
+	NS_IMAGE_TALK 		=> 'Image_talk',
+	NS_MEDIAWIKI 		=> 'MediaWiki',
+	NS_MEDIAWIKI_TALK 	=> 'MediaWiki_talk',
+	NS_TEMPLATE 		=> 'Template',
+	NS_TEMPLATE_TALK 	=> 'Template_talk',
+	NS_HELP 		=> 'Help',
+	NS_HELP_TALK 		=> 'Help_talk',
+	NS_CATEGORY 		=> 'Category',
+	NS_CATEGORY_TALK 	=> 'Category_talk',
+);
+
+$namespaceAliases = array(
+	"媒體" 			=> NS_MEDIA,
+	"媒体" 			=> NS_MEDIA,
+	"特別" 			=> NS_SPECIAL,
+	"特殊" 			=> NS_SPECIAL,
+	"對話" 			=> NS_TALK,
+	"对话" 			=> NS_TALK,
+	"討論" 			=> NS_TALK,
+	"讨论" 			=> NS_TALK,
+	"用戶" 			=> NS_USER,
+	"用户" 			=> NS_USER,
+	"用戶 對話" 		=> NS_USER_TALK,
+	"用户 对话" 		=> NS_USER_TALK,
+	"用戶 討論" 		=> NS_USER_TALK,
+	"用户 讨论" 		=> NS_USER_TALK,
+	# This has never worked so it's unlikely to annoy anyone if I disable it -- TS
+	#"{$wgMetaNamespace} 討論" => NS_PROJECT_TALK,
+	#"{$wgMetaNamespace} 讨论" => NS_PROJECT_TALK,
+	"圖" 			=> NS_IMAGE,
+	"圖像" 			=> NS_IMAGE,
+	"图" 			=> NS_IMAGE,
+	"图像" 			=> NS_IMAGE,
+	"圖 討論" 		=> NS_IMAGE_TALK,
+	"图 讨论" 		=> NS_IMAGE_TALK,
+	"圖像 討論" 		=> NS_IMAGE_TALK,
+	"图像 讨论" 		=> NS_IMAGE_TALK,
+	"模" 			=> NS_TEMPLATE,
+	"模 討論" 		=> NS_TEMPLATE_TALK,
+	"模 讨论" 		=> NS_TEMPLATE_TALK,
+	"幫手" 			=> NS_HELP,
+	"幫助" 			=> NS_HELP,
+	"說明" 			=> NS_HELP,
+	"帮手" 			=> NS_HELP,
+	"帮助" 			=> NS_HELP,
+	"说明" 			=> NS_HELP,
+	"幫手 討論" 		=> NS_HELP_TALK,
+	"幫助 討論" 		=> NS_HELP_TALK,
+	"說明 討論" 		=> NS_HELP_TALK,
+	"帮手 讨论" 		=> NS_HELP_TALK,
+	"帮助 讨论" 		=> NS_HELP_TALK,
+	"说明 讨论" 		=> NS_HELP_TALK,
+	"類" 			=> NS_CATEGORY,
+	"分類" 			=> NS_CATEGORY,
+	"类" 			=> NS_CATEGORY,
+	"分类" 			=> NS_CATEGORY,
+	"類 討論" 		=> NS_CATEGORY_TALK,
+	"分類 討論" 		=> NS_CATEGORY_TALK,
+	"类 讨论" 		=> NS_CATEGORY_TALK,
+	"分类 讨论" 		=> NS_CATEGORY_TALK,
+);
+
+$linkTrail = '/^([a-z]+)(.*)$/sD';
+
+#-------------------------------------------------------------------
+# Default messages
+#-------------------------------------------------------------------
+# Allowed characters in keys are: A-Z, a-z, 0-9, underscore (_) and
+# hyphen (-). If you need more characters, you may be able to change
+# the regex in MagicWord::initRegex
+
+$messages = array(
+
+# User preference toggles
+'tog-underline' 		=> '連結加底線：',
+'tog-highlightbroken' 		=> '格式化連結 <a href="" class="new">好似咁</a>（又或者: 好似咁<a href="" class="internal">?</a>）.',
+'tog-justify' 			=> '拍齊段落',
+'tog-hideminor' 		=> '最新更改唔顯示小修改',
+'tog-extendwatchlist' 		=> '展開監視清單去顯示合適嘅更改',
+'tog-usenewrc' 			=> '強化版最近更改（JavaScript）',
+'tog-numberheadings' 		=> '標題自動編號',
+'tog-showtoolbar'		=> '顯示修改工具列（JavaScript）',
+'tog-editondblclick' 		=> '雙擊可以改嘢（JavaScript）',
+'tog-editsection'		=> '可以用 [修改] 掣更改個別段落',
+'tog-editsectiononrightclick'	=> '可以撳右掣更改個別段落（JavaScript）',
+'tog-showtoc'			=> '喺多過三個段落嘅時候顯示目錄',
+'tog-rememberpassword' 		=> '響呢部電腦度記住我嘅密碼',
+'tog-editwidth' 		=> '全螢幕咁闊嘅修改欄',
+'tog-watchcreations' 		=> '將我開嘅頁面加入到監視清單',
+'tog-watchdefault' 		=> '將我修改嘅頁面加入到監視清單',
+'tog-watchmoves' 		=> '將我移動嘅頁面加入到監視清單',
+'tog-watchdeletion' 		=> '將我刪除嘅頁面加入到監視清單',
+'tog-minordefault' 		=> '所有編輯預設為小修改',
+'tog-previewontop' 		=> '喺修改欄上方顯示預覽',
+'tog-previewonfirst' 		=> '第一次修改時顯示預覽',
+'tog-nocache' 			=> '停用頁面快取',
+'tog-enotifwatchlistpages' 	=> '當我監視嘅頁面有修改時電郵通知我',
+'tog-enotifusertalkpages' 	=> '個人留言版有修改時電郵通知我',
+'tog-enotifminoredits' 		=> '小修改都要電郵通知我',
+'tog-enotifrevealaddr' 		=> '喺通知信上面話畀人聽我嘅電郵地址',
+'tog-shownumberswatching' 	=> '顯示有幾多人監視',
+'tog-fancysig' 			=> '程式碼簽名（冇自動連結）',
+'tog-externaleditor' 		=> '預設用外掛編輯器',
+'tog-externaldiff' 		=> '預設用外掛比較器',
+'tog-showjumplinks' 		=> '啟用 "跳至" 協助連結',
+'tog-uselivepreview' 		=> '用即時預覽（JavaScript）（實驗緊）',
+'tog-forceeditsummary' 		=> '我冇入修改註解時通知我',
+'tog-watchlisthideown' 		=> '響監視清單度隱藏我嘅編輯',
+'tog-watchlisthidebots' 	=> '響監視清單度隱藏機械人嘅編輯',
+'tog-watchlisthideminor' 	=> '響監視清單度隱藏小修改',
+'tog-nolangconversion' 		=> '唔要用字轉換',
+'tog-ccmeonemails' 		=> '當我寄電郵畀其他人嗰陣寄返封副本畀我',
+'tog-diffonly' 			=> "響差異下面唔顯示頁面內容",
+
+'underline-always' 		=> '全部',
+'underline-never' 		=> '永不',
+'underline-default' 		=> '瀏覽器預設',
+
+'skinpreview' 			=> '(預覽)',
+
+# dates
+'sunday' 	=> '星期日',
+'monday' 	=> '星期一',
+'tuesday' 	=> '星期二',
+'wednesday' 	=> '星期三',
+'thursday' 	=> '星期四',
+'friday' 	=> '星期五',
+'saturday' 	=> '星期六',
+'sun' 		=> '日',
+'mon' 		=> '一',
+'tue' 		=> '二',
+'wed' 		=> '三',
+'thu' 		=> '四',
+'fri' 		=> '五',
+'sat' 		=> '六',
+'january' 	=> '1月',
+'february' 	=> '2月',
+'march' 	=> '3月',
+'april' 	=> '4月',
+'may_long' 	=> '5月',
+'june' 		=> '6月',
+'july' 		=> '7月',
+'august' 	=> '8月',
+'september' 	=> '9月',
+'october' 	=> '10月',
+'november' 	=> '11月',
+'december' 	=> '12月',
+'january-gen' 	=> '一月',
+'february-gen' 	=> '二月',
+'march-gen' 	=> '三月',
+'april-gen' 	=> '四月',
+'may-gen' 	=> '五月',
+'june-gen' 	=> '六月',
+'july-gen' 	=> '七月',
+'august-gen' 	=> '八月',
+'september-gen' => '九月',
+'october-gen' 	=> '十月',
+'november-gen' 	=> '十一月',
+'december-gen' 	=> '十二月',
+'jan' 		=> '1月',
+'feb' 		=> '2月',
+'mar' 		=> '3月',
+'apr' 		=> '4月',
+'may' 		=> '5月',
+'jun' 		=> '6月',
+'jul' 		=> '7月',
+'aug' 		=> '8月',
+'sep' 		=> '9月',
+'oct' 		=> '10月',
+'nov' 		=> '11月',
+'dec' 		=> '12月',
+# Bits of text used by many pages:
+#
+'categories' 		=> '分類',
+'pagecategories' 	=> '$1個分類',
+'category_header' 	=> '"$1" 分類中嘅文章',
+'subcategories' 	=> '次分類',
+'category-media-header' => '響 "$1" 分類嘅媒體',
+
+'mainpage' 		=> '頭版',
+'mainpagetext' 		=> "<big>'''成功安裝MediaWiki。'''</big>",
+'mainpagedocfooter' 	=> "參閱[http://meta.wikimedia.org/wiki/Help:Contents 用戶指引]（英），裏面有資料講點用wiki軟件。
+
+==開始使用==
+* [http://www.mediawiki.org/wiki/Help:Configuration_settings 配置設定清單]（英）
+* [http://www.mediawiki.org/wiki/Help:FAQ MediaWiki 常見問題]（英）
+* [http://mail.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki 發佈郵件名單]（英）",
+
+'portal' 		=> '社區大堂',
+'portal-url' 		=> 'Project:社區大堂',
+'about'			=> '關於',
+'aboutsite' 		=> '關於{{SITENAME}}',
+'aboutpage' 		=> 'Project:關於',
+'article' 		=> '內容頁',
+'help' 			=> '幫手',
+'helppage' 		=> 'Help:目錄',
+'bugreports' 		=> '臭蟲回報',
+'bugreportspage' 	=> 'Project:臭蟲回報',
+'sitesupport' 		=> '慷慨解囊',
+'sitesupport-url' 	=> 'Project:支持網站',
+'faq' 			=> 'FAQ',
+'faqpage' 		=> 'Project:FAQ',
+'edithelp' 		=> '編輯協助',
+'newwindow' 		=> '（響新視窗度打開）',
+'edithelppage' 		=> 'Help:編輯',
+'cancel' 		=> '取消',
+'qbfind' 		=> '搵嘢',
+'qbbrowse' 		=> '瀏覽',
+'qbedit' 		=> '編輯',
+'qbpageoptions' 	=> '呢一頁',
+'qbpageinfo' 		=> '附近文字',
+'qbmyoptions' 		=> '我嘅選項',
+'qbspecialpages' 	=> '特殊頁',
+'moredotdotdot'		=> '更多...',
+'mypage' 		=> '我嘅頁面',
+'mytalk' 		=> '我嘅對話',
+'anontalk' 		=> '同呢個 IP 對話',
+'navigation' 		=> '導航',
+
+# Metadata in edit box
+'metadata_help' 	=> 'Metadata',
+
+'currentevents' 	=> '最近發生嘅事', //唔好釋做「新聞動態」或「時人時事」(Wikipedia specific) -- Man
+'currentevents-url' 	=> '最近發生嘅事',
+
+'disclaimers' 		=> '免責聲明',
+'disclaimerpage' 	=> 'Project:一般免責聲明',
+'privacy' 		=> '私隱政策',
+'privacypage' 		=> 'Project:私隱政策',
+'errorpagetitle' 	=> '錯誤',
+'returnto'		=> '返去$1 。',
+'tagline'      		=> '出自{{SITENAME}}',
+'whatlinkshere'		=> '連結嚟呢道嘅頁面',
+'help'			=> '幫助',
+'search'		=> '搵嘢',
+'searchbutton' 		=> '搵嘢',
+'go'			=> '去',
+'searcharticle'		=> '去',
+'history'		=> '頁面歷史',
+'history_short' 	=> '歷史',
+'updatedmarker' 	=> '我上次到訪之後嘅修改',
+'info_short'		=> '資訊',
+'printableversion' 	=> '可打印版本',
+'permalink'     	=> '永久連結',
+'print' 		=> '打印',
+'edit' 			=> '編輯',
+'editthispage'		=> '編輯呢頁',
+'delete' 		=> '刪除',
+'deletethispage' 	=> '刪除呢頁', 
+'undelete_short' 	=> '反刪除$1個修改', //原文為 UNDELETE, 不可譯成 "還原", 下同 -- DC
+'protect' 		=> '保護',
+'protect_change' 	=> '更改保護',
+'protectthispage' 	=> '保護呢頁',
+'unprotect' 		=> '解除保護',
+'unprotectthispage' 	=> '解除保護呢頁',
+'newpage' 		=> '開新頁',
+'talkpage'		=> '討論呢版',
+'talkpagelinktext'	=> '對話',
+'specialpage' 		=> '特別頁',
+'personaltools' 	=> '個人工具',
+'postcomment'   	=> '寫句意見',
+'articlepage'		=> '睇目錄',
+'talk' 			=> '討論',
+'views' 		=> '去睇', 
+'toolbox' 		=> '工具箱',
+'userpage' 		=> '去睇用戶頁',
+'projectpage' 		=> '去睇專題頁',
+'imagepage' 		=> '去睇圖片頁',
+'mediawikipage' 	=> '去睇信息頁',
+'templatepage' 		=> '去睇模頁',
+'viewhelppage' 		=> '去睇幫手頁',
+'categorypage' 		=> '去睇分類頁',
+'viewtalkpage' 		=> '睇討論',
+'otherlanguages' 	=> '其它語言',
+'redirectedfrom' 	=> '(由 $1 重新定向)', //REDIRECT
+'redirectpagesub' 	=> '重新定向頁',
+'lastmodifiedat'		=> '呢一頁嘅最後修改係響$1 $2。',
+'viewcount'		=> '呢一頁已經有$1人次睇過。',
+'copyright'		=> '響版度嘅內容係根據$1嘅條款發佈。',
+'protectedpage' 	=> '受保護頁',
+'jumpto' 		=> '跳去:',
+'jumptonavigation' 	=> '定向',
+'jumptosearch' 		=> '搵嘢',
+
+'badaccess' 		=> '權限錯誤',
+'badaccess-group0' 	=> '你係唔准執行你要求嘅動作。',
+'badaccess-group1' 	=> '你所要求嘅動作只係限制畀$1組嘅用戶。',
+'badaccess-group2' 	=> '你所要求嘅動作只係限制畀$1組嘅其中一位用戶。',
+'badaccess-groups' 	=> '你所要求嘅動作只係限制畀$1組嘅其中一位用戶。',
+
+
+'versionrequired' 	=> '係需要用 $1 版嘅 MediaWiki',
+'versionrequiredtext' 	=> '要用呢一頁，係需要用MediaWiki版本 $1 。睇睇[[Special:Version|版本頁]]。',
+
+'ok'			=> 'OK',
+'pagetitle'		=> '$1 - {{SITENAME}}',
+'retrievedfrom' 	=> '由 "$1" 接收',
+'youhavenewmessages' 	=> '你有$1（$2）。',
+'newmessageslink' 	=> '新信息',
+'newmessagesdifflink' 	=> '上次更改',
+'editsection' 		=> '編輯',
+'editold' 		=> '編輯',
+'editsectionhint' 	=> '編輯小節: $1',
+'toc' 			=> '目錄',
+'showtoc' 		=> '展開',
+'hidetoc' 		=> '收埋',
+'thisisdeleted' 	=> '睇下定係還原 $1 ？',
+'viewdeleted' 		=> '去睇$1？',
+'restorelink' 		=> '$1 個已刪除嘅編輯',
+'feedlinks' 		=> 'Feed:',
+'feed-invalid' 		=> '唔正確嘅 feed 類型。',
+
+# Short words for each namespace, by default used in the 'article' tab in monobook
+'nstab-main' 		=> '文章',
+'nstab-user' 		=> '用戶頁',
+'nstab-media' 		=> '媒體頁',
+'nstab-special' 	=> '特別頁',
+'nstab-project' 	=> '專題頁',
+'nstab-image' 		=> '檔案',
+'nstab-mediawiki' 	=> '信息',
+'nstab-template' 	=> '模',
+'nstab-help' 		=> '幫助頁',
+'nstab-category' 	=> '分類',
+
+# Main script and global functions
+#
+'nosuchaction'		=> '冇呢個動作',
+'nosuchactiontext' 	=> '呢個 URL 嘅指定動作 wiki 識別唔到',
+'nosuchspecialpage' 	=> '冇呢頁特別頁',
+'nospecialpagetext' 	=> '你所要求嘅特別頁唔啱，喺[[Special:Specialpages|特別頁一覽]]可以搵到所有用得嘅特別頁。',
+
+# General errors
+#
+'error'			=> '錯誤',
+'databaseerror' 	=> '資料庫錯誤',
+'dberrortext'		=> '資料庫查詢語法錯咗。
+咁係可能指出軟件中可能有臭蟲。
+最後一次資料庫嘅嘗試係：
+<blockquote><tt>$1</tt></blockquote>
+於 "<tt>$2</tt>" 功能中。
+MySQL 嘅錯誤回應 "<tt>$3: $4</tt>"。',
+'dberrortextcl' 	=> '資料庫查詢語法錯咗。
+最後一次資料庫嘅嘗試係：
+"$1"
+於 "$2"功能中。
+MySQL 嘅錯誤回應 "$3: $4"',
+'noconnect'		=> '對唔住！Wiki 而家有啲技術問題，連唔上資料庫伺服器。<br />$1',
+'nodb'			=> '唔能夠選擇伺服器 $1',
+'cachederror'		=> '以下係已請求頁面嘅快取複本，內容可能唔係最新嘅。',
+'laggedslavemode'   	=> '警告：面頁可能未包括最新嘅更新。',
+'readonly'		=> '資料庫已經鎖上',
+'enterlockreason'	=> '請輸入鎖上資料庫嘅原因，包括預計幾耐後會解鎖',
+'readonlytext'		=> '{{SITENAME}}資料庫而家鎖住咗，唔可以增加新內容或進行其他修改。可能係因為做緊維修，搞掂就會回復正常。
+
+管理員有以下嘅解釋： $1',
+'missingarticle' 	=> '資料庫搵唔到你要嘅文章，「$1」。
+
+通常係因為修訂歷史頁上面，由過時嘅連結去到刪除咗嘅文章所引起嘅。
+
+如果唔係，你可能係搵到軟件裏面嘅臭蟲。
+請記低 URL 地址，向管理員報告。',
+'readonly_lag' 		=> '當從伺服器追上主伺服器嘅時候，資料庫會被自動鎖上',
+'internalerror' 	=> '內部錯誤',
+'filecopyerror' 	=> '唔可以複製檔案 "$1" 到$2"。',
+'filerenameerror' 	=> '唔可以更名檔案 "$1" 到 "$2"。',
+'filedeleteerror' 	=> '唔可以刪除檔案 "$1"。',
+'filenotfound'		=> '搵唔到檔案 "$1"。',
+'unexpected'		=> '意外數值。 "$1"="$2"。',
+'formerror'		=> '錯誤：唔可以遞交表格',
+'badarticleerror' 	=> '呢個動作唔可以喺頁面度進行。',
+'cannotdelete'		=> '唔可以刪除指定嘅頁面或檔案。（可能呢個頁面或檔案已經刪除咗。）',
+'badtitle'		=> '錯誤嘅標題',
+'badtitletext' 		=> '所要求嘅頁面標題唔正確、空白，跨語言或者跨維基連結標題錯誤。亦可能係標題包括咗一個或多過一個字元。',
+'perfdisabled' 		=> '對唔住！呢個功能有可能造成資料庫癱瘓，所以要暫時停用。',
+'perfdisabledsub' 	=> '呢個係嚟自 $1 嘅儲存複本。', # obsolete?
+'perfcached' 		=> '以下嘅資料係嚟自快取，可能唔係最新嘅。',
+'perfcachedts' 		=> '以下嘅資料係嚟自快取，上一次嘅更新喺$1。',
+'querypage-no-updates' 	=> '響呢一頁嘅更新現時停用。啲資料將唔會即時更新。',
+'wrong_wfQuery_params' 	=> 'wfQuery() 嘅參數錯誤<br />
+函數： $1<br />
+查詢： $2',
+'viewsource' 		=> '睇吓原始碼',
+'viewsourcefor' 	=> '$1嘅原始碼',
+'protectedpagetext' 	=> '呢一頁已經鎖咗唔畀改。',
+'viewsourcetext' 	=> '你可以睇吓或者複製呢一頁嘅原始碼：',
+'protectedinterface' 	=> '呢一頁提供軟件嘅介面文字，呢一頁已經鎖上以預防濫用。',
+'editinginterface' 	=> "'''警告：'''你而家編輯緊嘅呢一個用嚟提供介面文字嘅頁面。響呢一頁嘅更改會影響到其他用戶使用中嘅介面外觀。",
+'sqlhidden' 		=> '(SQL 查詢隱藏)',
+'cascadeprotected' 	=> '呢一版已經保護咗唔能夠編輯，因為佢係響以下嘅{{PLURAL:$1|一|幾}}頁度包含咗，當中啟用咗"連串"保護選項來保護嗰一版：',
+
+# Login and logout pages
+#
+'logouttitle'		=> '用戶登出',
+'logouttext'		=> '<strong>你而家已經登出咗。</strong><br />
+你仍然可以用匿名身份用{{SITENAME}}，又或者重新登入。
+但係留意某啲頁面可能會繼續話你登入咗，除非等你清除瀏覽器嘅快取儲存。',
+
+'welcomecreation' 	=> "== 歡迎， $1！ ==
+
+你個戶口已經起好。唔好唔記得去改改你嘅{{SITENAME}}喜好設定喎。",
+
+'loginpagetitle' 	=> '用戶登入',
+'yourname'		=> '用戶名',
+'yourpassword'		=> '密碼',
+'yourpasswordagain' 	=> '再輸入密碼',
+'remembermypassword' 	=> '響呢部電腦度記住我嘅密碼',
+'yourdomainname' 	=> '你嘅網域',
+'externaldberror' 	=> '外部驗證資料庫出錯，或者唔允許你更新你嘅外部帳戶。',
+'loginproblem' 		=> '<b>你嘅登入手續出咗問題。</b><br />唔該再試吓登入。',
+'alreadyloggedin' 	=> "<strong>用戶$1，你已經登入咗喇喎！</strong><br />",
+
+'login'			=> '登入',
+'loginprompt'		=> '你一定要開咗 cookies 先登入到{{SITENAME}}。',
+'userlogin'		=> '登入／開新戶口',
+'logout'		=> '登出',
+'userlogout'		=> '登出',
+'notloggedin'		=> '未登入',
+'nologin'		=> '重未有戶口？ $1。',
+'nologinlink'		=> '開一個新嘅戶口',
+'createaccount'		=> '建立戶口',
+'gotaccount'		=> '已經有戶口？ $1 。',
+'gotaccountlink'	=> '登入',
+'createaccountmail'	=> '用電郵',
+'badretype'		=> '你所入嘅密碼唔一致。',
+'userexists'		=> '你入嘅用戶名已經有人用緊，唔該揀過另外一個名啦。',
+'youremail'		=> '電郵 *：',
+'username'		=> '用戶名：',
+'uid'			=> '用戶 ID：',
+'yourrealname'		=> '真實姓名 *：',
+'yourlanguage'		=> '語言：',
+'yourvariant'  		=> '字體變化：',
+'yournick'		=> '綽號（簽名時用）',
+'badsig'		=> '無效嘅程式碼簽名；請檢查 HTML 有無錯。所有屬性都要用雙引號括住。',
+'email'			=> '電郵',
+'prefs-help-email-enotif' => '如果你已經選呢個項，電郵通知亦都會用呢個電郵地址寄畀你。',
+'prefs-help-realname' 	=> '* 真名（可以選填）：你嘅真名，用來喺有需要嘅時候標示你嘅作品。',
+'loginerror'		=> '登入錯誤',
+'prefs-help-email'      => '* 電郵（可以選填）：啟用後等人可以響唔知你電郵地址嘅情況之下都可以聯絡你。',
+'nocookiesnew'		=> '已經建立咗戶口，但你未登入。 {{SITENAME}} 要用 cookies 嚟登入。你已經停咗用 cookies。麻煩啟用返先，然後再用你新嘅用戶名同密碼。',
+'nocookieslogin'	=> '{{SITENAME}} 要用 cookies 嚟登入。你已經停用 cookies。請先啟用後再度試過喇。',
+'noname'		=> '你未指定一個有效嘅用戶名。',
+'loginsuccesstitle' => '登入成功',
+'loginsuccess'		=> "'''你已經成功咁喺{{SITENAME}}登入做「$1」。'''",
+'nosuchuser'		=> '呢度冇叫做 "$1"嘅用戶。 請檢查你個名嘅輸入方法，或者建立一個新嘅戶口。',
+'nosuchusershort'	=> '呢度冇叫做 "$1"嘅用戶。 請檢查你個名嘅輸入方法。',
+'nouserspecified'	=> '你需要指定一個用戶名。',
+'wrongpassword'		=> '密碼唔啱，麻煩你再試多次。',
+'wrongpasswordempty'	=> '你都未入密碼，唔該再試多次啦。',
+'mailmypassword' 	=> '寄返個密碼畀我',
+'passwordremindertitle' => '{{SITENAME}}嘅密碼提醒',
+'passwordremindertext' 	=> '有人（可能係你，IP 位置 $1）
+請求我哋傳送個$4嘅 {{SITENAME}} 新登入密碼畀你。
+而家用戶 "$2" 嘅新密碼係 "$3"。
+唔該即刻登入，改咗個密碼。
+
+如果係其他人作出呢個請求，又或者你記得返你嘅密碼而又唔想再轉，
+你可以唔使理呢個信息，繼續用舊密碼。',
+'noemail' 		=> '呢度冇用戶 "$1" 嘅電郵地址記錄。',
+'passwordsent'		=> '新嘅密碼已經寄咗畀呢位用戶 "$1" 嘅電郵地址。
+收到之後請重新登入。',
+'blocked-mailpassword' 	=> '你嘅IP地址而家被封鎖緊，唔可以用密碼復原功能以防止濫用。',
+'eauthentsent' 		=>  '確認電郵已經傳送到指定嘅電郵地址。
+喺其它嘅郵件傳送到呢個戶口之前，你需要按電郵嘅指示，嚟確認呢個戶口真係屬於你嘅。',
+'throttled-mailpassword' => '一個密碼提醒已經響$1個鐘頭之前發送咗。
+為咗防止濫用，響$1個鐘頭之內只可以發送一個密碼提醒。',
+'mailerror' 		=> '傳送電郵錯誤： $1',
+'acct_creation_throttle_hit' => '對唔住，你已經開咗 $1 個戶口，唔可以再開多個戶口。',
+'emailauthenticated' 	=> '你嘅電郵地址已經喺 $1 確認。',
+'emailnotauthenticated' => '你嘅電郵地址重未確認。 任何傳送電郵嘅功能都唔會運作。',
+'noemailprefs' 		=> '設置一個電郵地址令到呢啲功能開始運作。',
+'emailconfirmlink' 	=> '確認你嘅電郵地址',
+'invalidemailaddress' 	=> '呢個電郵地址嘅格式唔啱，所以接受唔到。
+唔該輸入一個啱格式嘅地址，或清咗嗰個空格。',
+'accountcreated' 	=> '戶口已經建立咗',
+'accountcreatedtext' 	=> '$1 嘅用戶戶口已經建立好。',
+
+# Password reset dialog
+'resetpass' 		=> '重設戶口密碼',
+'resetpass_announce' 	=> '你已經用咗一個臨時電郵碼登入。要完成登入，你一定要響呢度定一個新嘅密碼：',
+'resetpass_text' 	=> "<!-- 響呢度加入文字 -->",
+'resetpass_header' 	=> '重設密碼',
+'resetpass_submit' 	=> '設定密碼同登入',
+'resetpass_success' 	=> '你嘅密碼已經成功咁更改！而家幫你登入緊...',
+'resetpass_bad_temporary' => '唔啱嘅臨時密碼。你可能已經成功咁更改你嘅密碼，又或者重新請求過一個新嘅臨時密碼。',
+'resetpass_forbidden' 	=> '響呢個wiki度唔可以更改密碼',
+'resetpass_missing' 	=> '響資料度搵唔到嘢。',
+
+# Edit page toolbar
+'bold_sample' 		=> '粗體字',
+'bold_tip' 		=> '粗體字',
+'italic_sample' 	=> '斜體字',
+'italic_tip' 		=> '斜體字',
+'link_sample' 		=> '連結標題',
+'link_tip' 		=> '內部連結',
+'extlink_sample' 	=> 'http://www.example.com 連結標題',
+'extlink_tip' 		=> '外部連結（記得要加 http:// 開頭）',
+'headline_sample' 	=> '標題文字',
+'headline_tip' 		=> '二級標題',
+'math_sample' 		=> '喺呢度插入方程式',
+'math_tip' 		=> '數學方程（LaTeX）',
+'nowiki_sample' 	=> '喺呢度插入非格式代文字',
+'nowiki_tip' 		=> '唔理 wiki 格式',
+'image_sample' 		=> 'Example.jpg',
+'image_tip' 		=> '嵌入圖像',
+'media_sample' 		=> 'Example.ogg',
+'media_tip' 		=> '媒體檔案連結',
+'sig_tip' 		=> '你嘅簽名同埋時間戳',
+'hr_tip' 		=> '橫線（請謹慎咁用）',
+
+# Edit pages
+#
+'summary'		=> '摘要',
+'subject'		=> '主題／標題',
+'minoredit'		=> '呢個係小修改',
+'watchthis'		=> '睇實呢一頁',
+'savearticle'		=> '儲存呢頁',
+'preview'		=> '預覽',
+'showpreview'		=> '顯示預覽',
+'showlivepreview'	=> '實時預覽',
+'showdiff'		=> '顯示差異',
+'anoneditwarning' 	=> "'''警告：'''你重未登入。你嘅 IP 位址會喺呢個頁面嘅修訂歷史中記錄落嚟。",
+'missingsummary' 	=> "'''提醒：''' 你未提供編輯摘要。如果你再撳多一下儲存嘅話，咁你儲存嘅編輯就會無摘要。",
+'missingcommenttext' 	=> '請輸入一個註解。',
+'missingcommentheader' 	=> "'''提醒：'''你響呢個註解度並無提供一個主題／標題。如果你再撳一次儲存，你嘅編輯就會無題。",
+'summary-preview' 	=> '摘要預覽',
+'subject-preview' 	=> '標題／頭條預覽',
+'blockedtitle'		=> '用戶已經封鎖',
+'blockedtext'		=> "<big>你嘅用戶名或者 IP 位址已經被 $1 封咗。</big>
+
+呢次封鎖係由$1所封嘅。當中嘅原因係''$2''。
+
+你可以聯絡 $1 或者其他嘅[[{{MediaWiki:grouppage-sysop}}|管理員]]，討論呢次封鎖。
+
+除非你已經響你嘅[[Special:Preferences|戶口喜好設定]]入面設定咗有效嘅電郵地址，
+否則你係唔可以用「電郵呢個用戶」嘅功能。你嘅 IP 位址係 $3 ，而個封鎖 ID 係 #$5。 請你喺所有查詢都註明呢個位址同埋／或者個封鎖 ID 。",
+'blockedoriginalsource' => "有關'''$1'''嘅原始碼響下面列示：",
+'blockededitsource' 	=> "有關'''你'''對'''$1'''嘅'''編輯'''文字響下面列示：",
+'whitelistedittitle' 	=> '需要登入之後先至可以編輯',
+'whitelistedittext' 	=> '你需要$1去編輯呢頁。',
+'whitelistreadtitle' 	=> '需要登入之後先至睇到',
+'whitelistreadtext' 	=> '你需要[[Special:Userlogin|登入]]先可以去睇呢頁。',
+'whitelistacctitle' 	=> '你唔可以開一個新戶口',
+'whitelistacctext' 	=> '要喺呢個 wiki 開戶口，你要[[Special:Userlogin|登入]]同提供適當嘅許可。',
+'confirmedittitle' 	=> '要用電郵確定咗先可以改',
+'confirmedittext' 	=> '你個電郵地址要確定咗先可以編輯。唔該先去[[Special:Preferences|喜好設定]]填咗電郵地址，並做埋確認手續。',
+'nosuchsectiontitle' 	=> '無呢個小節',
+'nosuchsectiontext' 	=> '你嘗試編輯嘅小節並唔存在。之不過呢度係無第$1小節，所以係無一個地方去儲存你嘅編輯。',
+'loginreqtitle'		=> '需要登入',
+'loginreqlink' 		=> '登入',
+'loginreqpagetext'	=> '你一定$1去睇其它嘅頁面。',
+'accmailtitle' 		=> '密碼寄咗喇。',
+'accmailtext' 		=> '「$1」嘅密碼已經寄咗去 $2。',
+'newarticle'		=> '(新)',
+'newarticletext' 	=>
+"你連連過嚟嘅頁面重未存在。
+要起版新嘅，請你喺下面嗰格度輸入。
+(睇睇[[{{MediaWiki:helppage}}|自助版]]拎多啲資料。)
+如果你係唔覺意嚟到呢度，撳一次你個瀏覽器'''返轉頭'''個掣。",
+'anontalkpagetext' 	=> "----''呢度係匿名用戶嘅討論頁，佢可能係重未開戶口，或者佢重唔識開戶口。我哋會用數字表示嘅IP地址嚟代表佢。一個IP地址係可以由幾個用戶夾來用。如果你係匿名用戶，同覺得呢啲留言係同你冇關係嘅話，唔該去[[Special:Userlogin|開一個新戶口或登入]]，避免喺以後嘅留言會同埋其它用戶混淆。''",
+'noarticletext' 	=> '喺呢一頁而家並冇任何嘅文字，你可以喺其它嘅頁面中[[Special:Search/{{PAGENAME}}|搵呢一頁嘅標題]]或者[{{fullurl:{{FULLPAGENAME}}|action=edit}} 編輯呢一頁]。',
+'clearyourcache' 	=> "'''注意：'''喺儲存之後，你可能要先略過你嘅瀏覽器快取去睇到更改。'''Mozilla / Firefox / Safari:''' 㩒住''Shift''掣再撳''重新載入''，又或者㩒''Ctrl-Shift-R''（喺蘋果Mac中㩒''Cmd-Shift-R''掣）； '''IE:''' 㩒住''Ctrl''掣再撳''重新整理''，又或者㩒''Ctrl-F5''掣； '''Konqueror:''' 就咁以撳個''重載''掣，又或者㩒''F5''； '''Opera'''嘅用戶可能需要先喺''工具→喜好設定''之中清佢哋嘅快取。",
+'usercssjsyoucanpreview' => '<strong>提示：</strong>響儲存前，用「顯示預覽」個掣嚟測試你嘅新CSS/JS。',
+'usercsspreview' => '\'\'\'請注意你而家只係預覽緊你嘅用戶CSS樣式表，內容仍未儲存！\'\'\'',
+'userjspreview' => '\'\'\'請注意你而家只係測試／預覽緊你定義嘅JavaScript，佢嘅內容重未儲存！\'\'\'',
+'userinvalidcssjstitle' => "'''警告：''' 未有名稱 \"$1\" 嘅皮。請記住自訂介面的 .css 和 .js 頁面時應使用細楷，例如：{{ns:user}}:Foo/monobook.css 而唔係 {{ns:user}}:Foo/Monobook.css 。",
+'updated' => '(己更新)',
+'note' => '<strong>Note:</strong>',
+'previewnote' => '<strong>請記住呢個只係預覽；更改嘅内容重未儲存！</strong>',
+'session_fail_preview' 	=> '<strong>對唔住！由於小節嘅資料唔見咗，我哋唔能夠處理你嘅編輯。
+請再試過喇。如果仍然唔得嘅話，試下登出，然後重新登入。</strong>',
+'previewconflict' => '呢個預覽係反映如果你選擇儲存嘅話，嘅上面嘅文字編輯區裏面嘅字會儲存落嚟。',
+'session_fail_preview_html' => '<strong>對唔住！有關嘅程序資料已經遺失，我哋唔能夠處理你嘅編輯。</strong>
+
+\'\'由於哩個 wiki 已經開放咗原 HTML 碼，預覽已經隱藏落嚟以預防 JavaScript 嘅攻擊。\'\'
+
+<strong>如果呢個係正當嘅編輯嘗試，請再試過。如果重係唔得嘅話，請先登出然後再登入。</strong>',
+'importing' 		=> '而家喺度滙入$1',
+'editing' 		=> '而家喺度編輯$1',
+'editinguser' 		=> '而家喺度編輯用戶<b>$1</b>',
+'editingsection' 	=> '而家喺度編輯$1 （小節）',
+'editingcomment' 	=> '而家喺度編輯$1 （評論）',
+'editconflict' 		=> '編輯衝突：$1',
+'explainconflict' 	=> '有其他人喺你開始編輯之後已經更改呢一頁。
+喺上面嗰個空間而家現存嘅頁面文字。
+你嘅更改會喺下面嘅文字空間顯示。
+你需要合併你嘅更改到原有嘅文字。
+喺你撳「儲存頁面」之後，<b>只有</b>喺上面嘅文字區會被儲存。<br />',
+'yourtext'		=> '你嘅文字',
+'storedversion' 	=> '已經儲存咗嘅版本',
+'nonunicodebrowser' 	=> "<strong>警告：你嘅瀏覽器係唔係用緊 Unicode 。而家暫時有個解決方法，方便你可以安全咁編輯文章：唔係 ASCII 嘅字元會喺編輯框裏面用十六進位編碼顯示。</strong>",
+'editingold'	=> "<strong>警告：你而家係編輯緊喺呢一頁嘅過時版本。
+如果你儲存佢，喺呢個版本嘅任何更改都會被遺失。</strong>",
+'yourdiff'		=> '差異',
+'copyrightwarning' 	=> '請留意喺{{SITENAME}}度，所有喺呢度嘅貢獻會被考慮到喺$2之下發出（睇$1有更詳細嘅資訊）。如果你係唔想你編輯嘅文字無喇喇咁被分發，咁就唔好喺呢度遞交。<br />
+你亦都要同我哋保證啲文字係你自己寫嘅，或者係由公有領域或相似嘅自由資源複製落嚟。
+<strong>喺未有任何許可嘅情況之下千祈唔好遞交有版權嘅作品！</strong>',
+'copyrightwarning2' 	=> '請留意喺{{SITENAME}}度，所有嘅貢獻可能會被其他嘅貢獻者編輯、修改，或者刪除。如果你係唔想你編輯嘅文字無喇喇咁被編輯，咁就唔好喺呢度遞交。<br />
+你亦都要同我哋保證啲文字係你自己寫嘅，或者係由公有領域或相似嘅自由資源複製落嚟（睇$1有更詳細嘅資訊）。
+<strong>喺未有任何許可嘅情況之下千祈唔好遞交有版權嘅作品！</strong>',
+'longpagewarning' 	=> "<strong>警告：呢一頁有 $1 kilobytes 咁長；有啲瀏覽器可能會喺就離或者超過 32kb 編輯頁面會出現一啲問題。
+請考慮分割呢個頁面到細啲嘅小節。</strong>",
+'longpageerror' 	=> "<strong>錯誤：你所遞交嘅文字係有 $1 kilobytes 咁長，
+係長過最大嘅 $2 kilobytes。儲唔到你遞交嘅文字。</strong>",
+'readonlywarning' 	=> '<strong>錯誤：資料庫已經鎖上去做保定期保養，
+咁你係唔可以喺而家儲起你嘅編輯。你或者可以將文字儲落一個文字檔度供以後使用。</strong>',
+'protectedpagewarning' 	=> "<strong>警告：呢版已經受到保護，只有管理員權限嘅用戶先至可以改。</strong>",
+'semiprotectedpagewarning' => "'''注意：'''呢一頁已經鎖咗，只有已經註冊嘅用戶先至可以改。",
+'cascadeprotectedwarning' => "'''警告：'''呢一頁已經鎖咗，只有管理員權限嘅用戶先至可以改，因為佢係響以下連串保護嘅{{PLURAL:$1|一|幾}}頁度包含咗：",
+'templatesused'		=> '喺呢一頁所用嘅模：',
+'templatesusedpreview' 	=> '喺呢一次預覽所用嘅模：',
+'templatesusedsection' 	=> '喺呢一小節所用嘅模：',
+'template-protected' 	=> '(保護)',
+'template-semiprotected' => '(半保護)',
+'edittools' 		=> '<!-- 喺呢度嘅文字會喺編輯框下面同埋上載表格中顯示。 -->',
+'nocreatetitle' 	=> '頁面建立被限制',
+'nocreatetext' 		=> '呢個網站已經限制咗起新版嘅能力。
+你可以番轉頭去編輯一啲已經存在嘅頁面，或者[[Special:Userlogin|登入或開個新戶口]]。',
+
+# "Undo" feature
+'undo-success' => '呢個編輯可以取消。請檢查一下個差異去確認呢個係你要去做嘅，跟住儲存下面嘅更改去完成編輯。',
+'undo-failure' => '呢個編輯唔能夠取消，由於同途中嘅編輯有衝突。',
+'undo-summary' => '取消由[[Special:Contributions/$2|$2]] ([[User talk:$2|對話]])所做嘅修訂 $1',
+
+# Account creation failure
+'cantcreateaccounttitle' => '唔可以開新戶口',
+'cantcreateaccounttext' => '由呢個IP地址 (<b>$1</b>) 嘅新戶口已經被封鎖。
+咁可能係你嘅學校或者網絡供應商 (ISP) 所用嘅 IP地址持續咁進行破壞。',
+
+# History pages
+#
+'revhistory'		=> '修改歷程',
+'viewpagelogs' 		=> '睇呢頁嘅日誌',
+'nohistory'		=> '呢版冇歷史。',
+'revnotfound'		=> '搵唔到歷史',
+'revnotfoundtext' 	=> "呢版無你要搵嗰個版本喎。
+唔該睇下條網址啱唔啱。",
+'loadhist'		=> '攞緊版嘅歷史',
+'currentrev'		=> '家下嘅版本',
+'revisionasof'  => '喺$1嘅修訂',
+'revision-info' => '喺$1嘅修訂；修訂自$2',
+'previousrevision'	=> '←之前嘅修訂',
+'nextrevision'		=> '新啲嘅修訂→',
+'currentrevisionlink'   => '家下嘅修訂版本',
+'cur'			=> '現時',
+'next'			=> '之後',
+'last'			=> '之前',
+'orig'			=> '原本',
+'page_first' 		=> '最頭',
+'page_last' 		=> '最尾',
+'histlegend'		=> '選擇唔同版本：響兩個唔同版本嘅圓框分別撳一下，再撳最底的「比較被選版本」掣以作比較。<br />
+說明：（現時）= 同現時修訂版本嘅差別，（先前）= 與前一個修訂版本嘅差別，M = 小修改。',
+'deletedrev' 		=> '[刪除咗]',
+'histfirst' 		=> '最早',
+'histlast' 		=> '最近',
+'historysize' 		=> '($1 bytes)',
+'historyempty' 		=> '(空)',
+
+# Revision feed
+#
+'history-feed-title' 	=> '修訂歷史',
+'history-feed-description' => '響哩個wiki嘅哩一頁嘅修訂歷史',
+'history-feed-item-nocomment' => '$1 響 $2', # user at time
+'history-feed-empty' 	=> '要求嘅頁面並唔存在。
+佢可能響哩個 wiki 度刪除咗或者改咗名。
+試吓[[Special:Search|響哩個wiki度搵]]有關新頁面嘅資料。',
+
+# Revision deletion
+#
+'rev-deleted-comment' 		=> '(評論已經移除咗)',
+'rev-deleted-user' 		=> '(用戶名已經移除咗)',
+'rev-deleted-event' 		=> '(項目已經移除咗)',
+'rev-deleted-text-permission' 	=> '<div class="mw-warning plainlinks">
+呢頁嘅修訂喺公共檔案庫中已經被洗咗。
+喺[{{fullurl:Special:Log/delete|page={{PAGENAMEE}}}} 刪除日誌]裏面可能會有更詳細嘅資料。
+</div>',
+'rev-deleted-text-view' => '<div class="mw-warning plainlinks">
+呢頁嘅修訂喺公共檔案庫中已經洗咗。
+作為一個喺呢個網站嘅管理員，你可以去睇吓佢；
+喺[{{fullurl:Special:Log/delete|page={{PAGENAMEE}}}} 刪除日誌]裏面可能會有更詳細嘅資料。
+</div>',
+'rev-delundel' 		=> '顯示／隱藏',
+'revisiondelete' 	=> '刪除／反刪除修訂',
+'revdelete-nooldid-title' => '無目標修訂',
+'revdelete-nooldid-text' => '你重未指定一個或多個修訂去進行呢個功能。',
+'revdelete-selected' 	=> '揀[[:$1]]嘅$2次修訂：',
+'logdelete-selected' 	=> "揀[[:$1]]嘅$2次日誌事件：",
+'revdelete-text' 	=> "刪除咗嘅修訂係會仍然出現喺個頁面歷史以及日誌度，
+但係佢哋嘅文字內容係唔可以供公眾瀏覽。
+
+其他喺呢一個wiki嘅管理員仍然可以睇已經隱藏咗嘅內容，
+同埋可以透過同一個介面去反刪除佢，除非已經設定咗附加嘅限制。",
+'revdelete-legend' 	=> '設定修訂限制：',
+'revdelete-hide-text' 	=> '隱藏修訂嘅文字',
+'revdelete-hide-name' 	=> '隱藏動作同目標',
+'revdelete-hide-comment' => '隱藏編輯註解',
+'revdelete-hide-user' 	=> '隱藏編輯者嘅用戶名／IP',
+'revdelete-hide-restricted' => '應用呢嘅限制至操作員同埋其他用戶',
+'revdelete-suppress' 	=> '同時壓制由操作員以及其他用戶的資料',
+'revdelete-hide-image' 	=> '隱藏資料內容',
+'revdelete-unsuppress' 	=> '響已經恢復咗嘅修訂度移除限制',
+'revdelete-log' 	=> '記錄註解：', // <-- Log Comment: ?
+'revdelete-submit' 	=> '應用到已經選取嘅修訂',
+'revdelete-logentry' 	=> '已經更改[[$1]]嘅修訂可見性',
+'logdelete-logentry' 	=> '已經更改[[$1]]嘅事件可見性',
+'revdelete-logaction' 	=> '$1個修訂設定咗去模式$2',
+'logdelete-logaction' 	=> '對於[[$3]]嘅$1件事設定咗去模式$2',
+'revdelete-success' 	=> '修訂可見性已經成功噉設定。',
+'logdelete-success' 	=> '事件可見性已經成功噉設定。',
+
+# Oversight log
+#
+'oversightlog' => '監督記錄',
+'overlogpagetext' => '下面係一個最近刪除以及由操作員封鎖牽涉到嘅內容清單。睇睇下面嘅[[Special:Ipblocklist|IP封鎖名單]]去睇現時進行緊嘅封鎖。',
+
+# Diffs
+#
+'difference'		=> '（修訂之間嘅差異）',
+'loadingrev'		=> '載入緊修訂嘅差異', 
+'lineno'		=> "第$1行：",
+'editcurrent'		=> '編輯呢一頁嘅現時版本',
+'selectnewerversionfordiff' => '選擇一個新啲嘅版本做個比較',
+'selectolderversionfordiff' => '選擇一個舊啲嘅版本做個比較',
+'compareselectedversions' => '比較被選嘅版本',
+'editundo' 		=> '復原',
+'diff-multi' 		=> "(當中有$1次嘅修訂唔會顯示。)",
+
+# Search results
+#
+'searchresults' 	=> '搵嘢結果',
+'searchresulttext' 	=> "有關搵{{SITENAME}}嘅更多資料請參考[[{{MediaWiki:helppage}}|{{int:help}}]]。",
+'searchsubtitle' 	=> "你利用'''[[:$1]]'''搵",
+'searchsubtitleinvalid' => "你利用'''$1'''搵",
+'badquery'		=> '錯誤嘅搵嘢內容格式',
+'badquerytext'		=> '我哋無法處理閣下嘅搵嘢內容。可能你試圖搵吓3個字元以下長度嘅字詞，
+噉樣嘅字詞目前係唔支援嘅。又或者你輸入嘅條件式唔啱，
+比如好似“fish and and scales”噉。請試吓搵過第二啲嘢啦。',
+'matchtotals'		=> "有$2個頁面嘅標題以及$3個頁面嘅正文匹配\"$1\"。",
+'noexactmatch' 		=> "'''標題為\"$1\"嘅頁面重未有人開。''' 你可以而家[[:$1|開呢個新頁]]。",
+'titlematches' 		=> '文章標題符合',
+'notitlematches' 	=> '冇頁面嘅標題符合',
+'textmatches' 		=> '頁面文字符合',
+'notextmatches'		=> '冇頁面文字符合',
+'prevn'			=> "前$1",
+'nextn'			=> "後$1",
+'viewprevnext'		=> "去睇 ($1) ($2) ($3)。",
+'showingresults' 	=> "自#<b>$2</b>起顯示最多<b>$1</b>個結果。",
+'showingresultsnum' 	=> "自#<b>$2</b>起顯示<b>$3</b>個結果。",
+'nonefound'		=> "'''注意'''：搵嘢結果為空通常係因為你搵嘅係\"have\"、
+\"from\"等太常用而唔會被索引入數據庫嘅詞，
+又或者係你指定咗太多嘅關鍵字（只有包含所有你指定嘅關鍵字嘅頁面先至會被搵到出嚟）。",
+'powersearch' 		=> '搵嘢',
+'powersearchtext' 	=> "喺以下嘅空間名度搵 :<br />$1<br />$2 彈去清單 &nbsp; $3 嘅搜尋 $9",
+'searchdisabled' 	=> '{{SITENAME}}嘅搜尋功能已經關閉。你可以利用Google嚟搵。不過佢哋對{{SITENAME}}嘅索引可能唔係最新嘅。',
+
+'blanknamespace' 	=> '（主）',
+
+# Preferences page
+#
+'preferences'		=> '喜好設定',
+'mypreferences'		=> '我嘅喜好設定',
+'prefsnologin' 		=> '重未登入',
+'prefsnologintext'	=> "你一定要去[[Special:Userlogin|登入]]設定好用戶喜好值先。",
+'prefsreset'		=> '喜好設定已經從儲存空間中重設。',
+'qbsettings'		=> '快捷列',
+'qbsettings-none'	=> '無',
+'qbsettings-fixedleft'	=> '左邊固定',
+'qbsettings-fixedright'	=> '右邊固定',
+'qbsettings-floatingleft'	=> '左邊浮動',
+'qbsettings-floatingright'	=> '右邊浮動',
+'changepassword' 	=> '改密碼',
+'skin'			=> '皮',
+'math'			=> '數',
+'dateformat'		=> '日期格式',
+'datedefault'		=> '冇喜好',
+'datetime'		=> '日期同埋時間',
+'math_failure'		=> '語法拼砌失敗',
+'math_unknown_error'	=> '唔知錯乜',
+'math_unknown_function'	=> '唔知乜函數',
+'math_lexing_error'	=> 'lexing錯誤',
+'math_syntax_error'	=> '語法錯誤',
+'math_image_error'	=> 'PNG 轉換失敗；檢查latex、dvips、gs同埋convert係唔係已經正確咁樣安裝',
+'math_bad_tmpdir'	=> '唔能夠寫入或建立臨時數目錄',
+'math_bad_output'	=> '唔能夠寫入或建立輸出數目錄',
+'math_notexvc'		=> 'texvc 執行檔已經遺失；請睇睇 math/README 去較吓。',
+'prefs-personal' 	=> '用戶簡介',
+'prefs-rc' 		=> '最近更改',
+'prefs-watchlist' 	=> '監視清單',
+'prefs-watchlist-days' 	=> '監視清單嘅顯示日數：',
+'prefs-watchlist-edits' => '喺加強版監視清單度嘅顯示編輯數：',
+'prefs-misc' 		=> '雜項',
+'saveprefs'		=> '儲存',
+'resetprefs'		=> '重設',
+'oldpassword'		=> '舊密碼：',
+'newpassword'		=> '新密碼：',
+'retypenew'		=> '打多次新密碼：',
+'textboxsize'		=> '編輯中',
+'rows'			=> '列：',
+'columns'		=> '行：',
+'searchresultshead' 	=> '搵嘢',
+'resultsperpage' 	=> '每頁顯示嘅擊中數：',
+'contextlines'		=> '每一擊顯示嘅行數：',
+'contextchars'		=> '每一行嘅字數：',
+'stubthreshold' 	=> '楔位文章門檻：',
+'recentchangesdays' 	=> '最近更改中嘅顯示日數：',
+'recentchangescount' 	=> '最近更改中嘅編輯數：',
+'savedprefs'		=> '你嘅喜好設定已經儲存。',
+'timezonelegend' 	=> '時區',
+'timezonetext'		=> '你嘅本地時間同伺服器時間 (UTC) 之間嘅差，以鐘頭為單位。',
+'localtime'		=> '本地時間',
+'timezoneoffset' 	=> '時間偏移¹',
+'servertime'		=> '伺機器時間',
+'guesstimezone' 	=> '由瀏覽器填上',
+'allowemail'		=> '由其它用戶啟用電子郵件',
+'defaultns'		=> '預設喺呢啲空間名搵嘢：',
+'default'		=> '預設',
+'files'			=> '檔案',
+
+# User rights
+'userrights-lookup-user' => '管理用戶組',
+'userrights-user-editname' => '輸入一個用戶名：',
+'editusergroup' 	=> '編輯用戶組',
+
+'userrights-editusergroup' 	=> '編輯用戶組',
+'saveusergroups' 		=> '儲存用戶組',
+'userrights-groupsmember' 	=> '屬於：',
+'userrights-groupsavailable' 	=> '可用嘅組：',
+'userrights-groupshelp' 	=> '選擇你想畀用戶加入或移出嘅組。未選擇嘅組將唔會被改變。你可以用CTRL + 撳滑鼠左掣以取消已經選擇嘅一個組',
+'userrights-reason' 		=> '更改嘅原因:',
+
+# Groups
+#
+'group' 			=> '組：',
+'group-bot' 			=> '機械人',
+'group-sysop' 			=> '操作員',
+'group-bureaucrat' 		=> '事務員',
+'group-all' 			=> '(全部)',
+
+'group-bot-member' 		=> '機械人',
+'group-sysop-member' 		=> '操作員',
+'group-bureaucrat-member' 	=> '事務員',
+
+'grouppage-bot' 		=> '{{ns:project}}:機械人',
+'grouppage-sysop' 		=> '{{ns:project}}:管理員',
+'grouppage-bureaucrat' 		=> '{{ns:project}}:事務員',
+
+# User rights log
+'rightslog'		=> '用戶權限日誌', 
+'rightslogtext'		=> '呢個係用戶權力嘅修改日誌。',
+'rightslogentry'	=> '已經將$1嘅組別從$2改到去$3',
+'rightsnone'		=> '(無)',
+
+# Recent changes
+#
+'nchanges' 		=> '$1次更改',
+'recentchanges' 	=> '最近更改',
+'recentchangestext' 	=> '追蹤對哩一個 wiki 嘅最後更改。',
+'recentchanges-feed-description' => '追蹤對哩一個 wiki 度呢個集合嘅最後更改。',
+'rcnote'		=> "以下係響$3，近<strong>$2</strong>日嘅最後<strong>$1</strong>次修改。",
+'rcnotefrom'		=> "以下係自<b>$2</b>嘅更改（顯示到<b>$1</b>）。",
+'rclistfrom'		=> "顯示由$1嘅新更改",
+'rcshowhideminor' 	=> '$1小編輯',
+'rcshowhidebots' 	=> '$1機械人',
+'rcshowhideliu' 	=> '$1登入咗嘅用戶',
+'rcshowhideanons' 	=> '$1匿名用戶',
+'rcshowhidepatr' 	=> '$1巡邏過嘅編輯',
+'rcshowhidemine' 	=> '$1我嘅編輯',
+'rclinks'		=> "顯示最後$1次喺$2日內嘅更改<br />$3",
+'diff'			=> '差異',
+'hist'			=> '歷史',
+'hide'			=> '隱藏',
+'show'			=> '顯示',
+'minoreditletter' 	=> 'm',
+'newpageletter' 	=> 'N',
+'boteditletter' 	=> 'b',
+'sectionlink' 		=> '→',
+'number_of_watching_users_pageview' 	=> '[$1位用戶監視]',
+'rc_categories'		=> '限定到分類（以"|"作分隔）',
+'rc_categories_any'	=> '任何',
+
+# Recentchangeslinked
+'recentchangeslinked' 		=> '連結頁嘅更改',
+'recentchangeslinked-noresult'  => '響呢一段時間內連結頁並無更改。',
+'recentchangeslinked-summary'   => "呢一個特別頁列示咗呢一版連出去嘅頁面嘅最近更改。響你嘅監視清單度嘅頁面會以'''粗體'''表示。",
+
+# Upload
+#
+'upload'		=> '上載檔案',
+'uploadbtn'		=> '上載檔案',
+'reupload'		=> '再上載',
+'reuploaddesc'		=> '返到去上載表格。',
+'uploadnologin' 	=> '重未登入',
+'uploadnologintext'	=> "你必須先[[Special:Userlogin|登入]]去上載檔案。",
+'upload_directory_read_only' => '嗰個上載嘅目錄 ($1) 而家唔能夠被網頁伺服器寫入。',
+'uploaderror'		=> '上載錯誤',
+'uploadtext'		=> "用下面嘅表格嚟上載檔案，要睇或者搵嘢之前上載嘅圖像請去[[Special:Imagelist|已上載檔案一覽]]，上載同刪除嘅動作會喺[[Special:Log/upload|上載日誌]]裏面記錄落嚟。
+
+如果要喺頁面度引入呢張圖像，可以使用以下方式嘅連結：
+'''<nowiki>[[</nowiki>{{ns:image}}:file.jpg<nowiki>]]</nowiki>'''，
+'''<nowiki>[[</nowiki>{{ns:image}}:file.png|替代文字<nowiki>]]</nowiki>''' 或者用
+'''<nowiki>[[</nowiki>{{ns:media}}:file.ogg<nowiki>]]</nowiki>''' 直接連結到檔案。",
+'uploadlog'		=> 'upload log',
+'uploadlogpage' 	=> '上載日誌',
+'uploadlogpagetext' 	=> '以下係最近檔案上載嘅一覽表。',
+'filename'		=> '檔名',
+'filedesc'		=> '摘要',
+'fileuploadsummary' 	=> '摘要：',
+'filestatus' 		=> '版權狀態',
+'filesource' 		=> '來源',
+'copyrightpage' 	=> "Project:版權",
+'copyrightpagename' 	=> "{{SITENAME}}版權",
+'uploadedfiles'		=> '上載檔案中',
+'ignorewarning' 	=> '總要忽略警告同埋儲存檔案。',
+'ignorewarnings'	=> '忽略任何警告',
+'minlength'		=> '檔名必須最少要有三個字。',
+'illegalfilename'	=> '檔名「$1」含有頁面標題所唔允許嘅字。請試下改檔名再上載。',
+'badfilename'		=> '檔名已經更改成「$1」。',
+'filetype-badmime' 	=> '「$1」嘅MIME類型檔案係唔容許上載嘅。',
+'filetype-badtype' 	=> "'''「.$1」'''係一種唔需要嘅檔案類型
+: 以下係容許嘅檔案類型： $2",
+'filetype-missing' 	=> '個檔名並冇副檔名（好以「.jpg」）。',
+'large-file'		=> '建議檔案嘅大細唔好大過$1 bytes，呢個檔案有$2 bytes',
+'largefileserver' 	=> '呢個檔案超過咗伺服器設定允許嘅大細。',
+'emptyfile'		=> '你上載嘅檔案似乎係空嘅。噉樣可能係因為你打錯咗個檔名。請檢查吓你係唔係真係要上載呢個檔案。',
+'fileexists'		=> '呢個檔名已經存在，如果你唔肯定係唔係要更改<strong><tt>$1</tt></strong>，請先檢查佢。',
+'fileexists-extension' 	=> '一個相似檔名嘅檔案已經存在:<br />
+上載檔案嘅檔名: <strong><tt>$1</tt></strong><br />
+現有檔案嘅檔名: <strong><tt>$2</tt></strong><br />
+請揀一個唔同嘅名。',
+'fileexists-thumb'      => "'''<center>已經存在嘅圖像</center>'''",
+'fileexists-thumbnail-yes' => "呢個檔案好似係一幅圖像縮細咗嘅版本<i>（縮圖）</i>。請檢查清楚個檔案<strong><tt>$1</tt></strong>。<br />
+如果檢查咗嘅檔案係同原本幅圖個大細係一樣嘅話，就唔使再上載多一幅縮圖。",
+'file-thumbnail-no' 	=> "個檔名係以<strong><tt>$1</tt></strong>開始。佢好似係一幅圖像嘅縮細版本<i>（縮圖）</i>。
+如果你有呢幅圖像嘅完整大細，唔係嘅話請再改過個檔名。",
+'fileexists-forbidden' 	=> '呢個檔案嘅名已經存在；麻煩返轉去用第二個名嚟上載呢個檔案。[[Image:$1|thumb|center|$1]]',
+'fileexists-shared-forbidden' => '共享檔案庫入面已經有一個同名嘅檔案；麻煩返轉去用第二個名嚟上載呢個檔案。[[Image:$1|thumb|center|$1]]',
+'successfulupload' 	=> '成功嘅上載',
+'fileuploaded'		=> "檔案「$1」上載成功。
+請跟住呢條連結：$2，去描述頁面度填寫檔案嘅有關資訊，
+比如佢嚟自邊度、幾時創建由邊個創建，以及你所知嘅所有其它關於佢嘅嘢。
+如果呢個係一張圖像，你可以噉樣插入佢：<tt><nowiki>[[</nowiki>{{ns:image}}<nowiki>:$1|thumb|描述]]</nowiki></tt>",
+'uploadwarning' 	=> '上載警告',
+'savefile'		=> '儲存檔案',
+'uploadedimage' 	=> "上載咗\"[[$1]]\"",
+'uploaddisabled' 	=> '上載已停用',
+'uploaddisabledtext' 	=> '呢個 wiki 嘅檔案上載已經停用。',
+'uploadscripted' 	=> '呢個檔案包含可能會誤被瀏覽器解釋執行嘅 HTML 或 script 代碼。',
+'uploadcorrupt' 	=> '呢個檔案已損壞或係用咗錯誤嘅副檔名。請檢查吓個檔案，然後再試下上載多次。',
+'uploadvirus' 		=> '呢個檔案有病毒！詳情：$1',
+'sourcefilename' 	=> '來源檔名',
+'destfilename' 		=> '目標檔名',
+'watchthisupload'	=> '監視呢頁',
+'filewasdeleted' 	=> '呢個檔案所使用嘅名曾經上載後，跟住就刪除咗。你應該響重新上載佢之前檢查吓$1。',
+'upload-proto-error' => '唔正確嘅協議',
+'upload-proto-error-text' => '遙遠上載需要一個以 <code>http://</code> 或者 <code>ftp://</code> 作為開頭嘅URL。',
+'upload-file-error' => '內部錯誤',
+'upload-file-error-text' => '當響伺服器度建立一個暫存檔時發生咗一個內部錯誤。請聯絡一位系統管理員。',
+'upload-misc-error' => '未知嘅上載錯誤',
+'upload-misc-error-text' => '響上載時發生咗未知嘅錯誤。請確認輸入咗嘅URL係可以訪問嘅，之後再試多一次。如果重有問題嘅話，請聯絡一位系統管理員。',
+'upload-curl-error6' => "唔可以到嗰個URL",
+'upload-curl-error6-text' => '輸入嘅URL唔能夠去到。請重新檢查個URL係正確嘅同埋個網站係已經上綫。',
+'upload-curl-error28' => '上載遇時',
+'upload-curl-error28-text' => '個網站用咗太多時間回應。請檢查個網站已經係上咗綫，等多一陣然後再試過。你可以響冇咁繁忙嘅時間再試。',
+
+'license' 		=> '協議',
+'nolicense' 		=> '未揀',
+'upload_source_url' => ' （一個正確嘅，公眾可到嘅網址）',
+'upload_source_file' => ' （你部電腦裏面嘅一個檔案）',
+
+# Image list
+#
+'imagelist'		=> '檔案清單',
+'imagelisttext'		=> "以下係'''$1'''個檔案'''$2'''排序嘅清單。",
+'imagelistforuser' 	=> "只顯示$1上載嘅檔案。",
+'getimagelist'		=> '獲取檔案清單中',
+'ilsubmit'		=> '搵嘢',
+'showlast'		=> '顯示$2排序嘅最後$1個檔案。',
+'byname'		=> '以檔名',
+'bydate'		=> '以時間',
+'bysize'		=> '以大細',
+'imgdelete'		=> '刪除',
+'imgdesc'		=> '描述',
+'imgfile' 		=> '檔案',
+'imglegend'		=> '說明：（描述）顯示／編輯檔案描述。',
+'imghistory'		=> '檔案歷史',
+'revertimg'		=> '回復',
+'deleteimg'		=> '刪除',
+'deleteimgcompletely'	=> '刪除呢個檔案嘅所有修改',
+'imghistlegend' 	=> '說明：(現) = 呢個係目前嘅檔案，(刪除) = 刪除呢個舊版本，
+(回復) = 恢復到呢個舊版本。
+<br /><i>撳日期嚟睇喺嗰個日期上載嘅檔案。</i>',
+'imagelinks'		=> '連結',
+'linkstoimage'		=> '以下嘅頁面連結到呢個檔案：',
+'nolinkstoimage' 	=> '冇個頁面連結到呢個檔案。', //(用原有講法嘅話中文會有歧異)
+'sharedupload' 		=> '呢個檔案係共用嘅上載，可以喺其他計劃中使用。“', //shared upload”討論吓中文點譯好
+'shareduploadwiki' 	=> '更多資訊請睇$1。',
+'shareduploadwiki-linktext' => '檔案描述頁面',
+'noimage'       	=> '冇同名嘅檔案存在，你可以$1。',
+'noimage-linktext' 	=> '上載佢',
+'uploadnewversion-linktext' => '上載呢個檔案嘅一個新版本',
+'imagelist_date' 	=> '日期',
+'imagelist_name' 	=> '名',
+'imagelist_user' 	=> '用戶',
+'imagelist_size' 	=> '大細 (bytes)',
+'imagelist_description' => '描述',
+'imagelist_search_for' 	=> '搵圖像名：',
+
+# Mime search
+#
+'mimesearch' 		=> 'MIME 搜尋',
+'mimesearch-summary' 	=> '呢一版可以過濾有關檔案嘅MIME類型。輸入方法：contenttype/subtype，例如 <tt>image/jpeg</tt>。',
+'mimetype' 		=> 'MIME 類型：',
+'download' 		=> '下載',
+
+# Unwatchedpages
+#
+'unwatchedpages' 	=> '未監視嘅頁面',
+
+# List redirects
+'listredirects' 	=> '彈嚟彈去一覽',
+
+# Unused templates
+'unusedtemplates' 	=> '未用嘅模',
+'unusedtemplatestext' 	=> '呢一頁列示喺template空間名未包括喺其它頁面嘅全部頁面。請記得喺刪除佢哋之前檢查其它連結到呢個模嘅頁面。',
+'unusedtemplateswlh' 	=> '其它連結',
+
+# Random redirect
+'randomredirect' 	=> '隨便彈',
+'randomredirect-nopages' => '響呢個空間名度冇一個彈去版。',
+
+# Statistics
+#
+'statistics'		=> '統計',
+'sitestats'		=> '{{SITENAME}}嘅統計',
+'userstats'		=> '用戶統計',
+'sitestatstext' 	=> "資料庫中而家有'''$1'''頁。
+其中包括咗「討論」頁、關於{{SITENAME}}嘅頁、好短嘅「楔位」
+文章、重新定向, 以及其他唔計入內容嘅頁。
+唔計非內容頁在內，則總共有'''$2'''頁可能會計入正規嘅內容。
+
+'''$8''' 個檔案已經上載。
+
+呢個Wiki喺建立以嚟，總共有'''$3'''次瀏覽，同埋'''$4'''次編輯。
+平均每個頁面有'''$5'''次瀏覽，同埋'''$6'''次編輯。
+
+[http://meta.wikimedia.org/wiki/Help:Job_queue job queue]嘅長度係'''$7'''。",
+'userstatstext' 	=> "目前有'''$1'''個註冊用戶，其中有'''$2'''人（即'''$4%'''）係$5。",
+'statistics-mostpopular' => '最多人睇嘅頁',
+
+'disambiguations'	=> '搞清楚頁',
+'disambiguationspage'	=> 'Template:disambig',
+'disambiguations-text'	=> "以下呢啲頁面連結去一個'''搞清楚頁'''。佢哋先至應該指去正確嘅主題。<br />如果一個頁面連結自[[MediaWiki:disambiguationspage]]，噉就會當佢係搞清楚頁。",
+
+'doubleredirects'	=> '雙重跳轉',
+'doubleredirectstext'	=> "每一行包括指去第一個同第二個跳轉嘅連結，以及第二個跳轉嘅首行文字。呢行文字通常畀出咗第一個跳轉應該指去嘅嗰個「真正」嘅目標頁面",
+
+'brokenredirects'	=> '破碎嘅跳轉',
+'brokenredirectstext'	=> '以下嘅跳轉係指向唔存在嘅頁面：',
+'brokenredirects-edit' 	=> '(編輯)', 
+'brokenredirects-delete' => '(刪除)',
+
+'withoutinterwiki' 	=> '未有語言連連嘅頁面',
+'withoutinterwiki-header' => '以下嘅頁面係重未有連結到其它嘅語言版本：',
+
+'fewestrevisions' 	=> '有最少修改嘅文章',
+
+# Miscellaneous special pages
+#
+'nbytes'		=> '$1 {{PLURAL:$1|byte|bytes}}',
+'ncategories'		=> '$1 個分類',
+'nlinks'		=> '$1 條連結',
+'nmembers'		=> '$1 位成員',
+'nrevisions'		=> '$1 次修訂',
+'nviews'		=> '$1 次瀏覽',
+'specialpage-empty' 	=> '呢一版係空嘅。',
+'lonelypages'		=> '孤立咗嘅頁面',
+'lonelypagestext' 	=> '以下嘅面頁係響呢個wiki度未有連結到其它頁面。',
+'uncategorizedpages'	=> '未有分類嘅頁面',
+'uncategorizedcategories'	=> '未有分類嘅分類',
+'uncategorizedimages' 	=> '未有分類嘅圖像',
+'unusedcategories' 	=> '未用嘅分類',
+'unusedimages'		=> '未用嘅檔案',
+'popularpages'		=> '受歡迎嘅頁面',
+'wantedcategories' 	=> '被徵求嘅分類',
+'wantedpages'		=> '被徵求嘅頁面',
+'mostlinked'		=> '有最多連結嘅頁面',
+'mostlinkedcategories' 	=> '有最多連結嘅分類',
+'mostcategories' 	=> '有最多分類嘅面頁',
+'mostimages'		=> '有最多連結嘅圖像',
+'mostrevisions' 	=> '有最多修改嘅文章',
+'allpages'		=> '所有頁面',
+'prefixindex'   	=> '前綴索引',
+'randompage'		=> '隨機文章',
+'randompage-nopages'	=> '響呢個空間名度搵唔到一版。',
+'shortpages'		=> '短頁',
+'longpages'		=> '長頁',
+'deadendpages'  	=> '掘頭頁',
+'deadendpagestext' 	=> '以下嘅面頁響呢個wiki度連結到其它頁面。',
+'protectedpages' 	=> '保護頁',
+'protectedpagestext' 	=> '以下嘅頁面係受保頁面，唔能夠移動或編輯',
+'protectedpagesempty' 	=> '響呢啲參數度，現時無頁面響度保護緊。',
+'listusers'		=> '用戶一覽',
+'specialpages'		=> '特別頁',
+'spheading'		=> '所有用戶嘅特別頁',
+'restrictedpheading'	=> '有限制嘅特別頁',
+'rclsub'		=> "(由\"$1\"已經連結嘅頁面)",
+'newpages'		=> '新頁面',
+'newpages-username' 	=> '用戶名：',
+'ancientpages'		=> '舊頁面',
+'intl'			=> '誇語言連結',
+'move' 			=> '移動',
+'movethispage'		=> '移動呢一頁',
+'unusedimagestext' 	=> '<p>請留意其它嘅網站會用一個直接嘅URL連結到一幅圖像，
+因此喺呢度用緊嘅圖像可能會仍然喺呢度列示。</p>',
+'unusedcategoriestext' 	=> '以下現存分類頁面存在，但未有其它嘅頁面或者分類去用佢哋。',
+
+# Book sources
+'booksources'		=> '書籍來源',
+'booksources-search-legend' => '搵書源',
+'booksources-isbn' 	=> 'ISBN:',
+'booksources-go' 	=> '去',
+'booksources-text' 	=> '以下嘅連結清單列出其它一啲賣新書同二手書嘅網站，
+可能可以提供到有關你想搵嘅書嘅更多資料：',
+
+'categoriespagetext' 	=> '喺呢個 wiki 中存在住以下嘅分類。',
+'data'			=> '資料',
+'userrights' 		=> '用戶權限管理',
+'groups' 		=> '用戶組',
+'isbn'			=> 'ISBN',
+'alphaindexline' 	=> "$1到$2",
+'version'		=> '版本',
+
+# Special:Logs
+'specialloguserlabel' 	=> '用戶:',
+'speciallogtitlelabel' 	=> '標題:',
+'log'			=> '日誌',
+'log-search-legend' 	=> '搵日誌',
+'log-search-submit' 	=> '去',
+'alllogstext'		=> '響{{SITENAME}}度全部日誌嘅綜合顯示。
+你可以選擇一個日誌類型、用戶名、或者受影響嘅頁面，嚟縮窄顯示嘅範圍。',
+'logempty' 		=> '日誌中冇符合嘅項目。',
+'log-title-wildcard' 	=> '搵以呢個文字開始嘅標題',
+
+# Special:Allpages
+'nextpage' 		=> '下一頁 ($1)',
+'prevpage' 		=> '上一頁 ($1)',
+'allpagesfrom'		=> '顯示以下位置開始嘅頁面：',
+'allarticles'		=> '所有文章',
+'allinnamespace'	=> '所有頁面（喺$1空間名入面）', //“namespace”大陸講法係“名稱空間
+'allnotinnamespace'	=> '所有頁面（唔喺$1空間名入面）',
+'allpagesprev'		=> '上一頁',
+'allpagesnext'		=> '下一頁',
+'allpagessubmit'	=> '去搵',
+'allpagesprefix'	=> '用以下開頭嘅頁面：',
+'allpagesbadtitle' 	=> '提供嘅頁面名無效，又或者有一個跨語言或跨wiki嘅字頭。佢可能包括一個或多個字係唔可以用響標題度嘅。',
+
+# Special:Listusers
+'listusersfrom' 	=> '顯示由呢個字開始嘅用戶：',
+'listusers-submit'   	=> '顯示',
+'listusers-noresult' 	=> '搵唔到用戶。',
+
+# Email this user
+#
+'mailnologin'		=> '冇傳送地址',
+'mailnologintext' 	=> "你一定要[[Special:Userlogin|登入咗]]
+同埋喺你嘅[[Special:Preferences|喜好設定]]度有個有效嘅電郵地址
+先可以傳送電郵畀其他用戶。",
+'emailuser'		=> '發電郵畀呢位用戶',
+'emailpage'		=> '發電郵畀用戶',
+'emailpagetext'		=> '如果呢位用戶已經喺佢嘅用戶使用偏好入邊填咗個合法嘅電郵地址，以下表格會發送單單一條訊息。
+你喺你嘅用戶喜好設定入面填寫嘅電郵地址會出現喺呢封電郵「由」嘅地址度，以便收件人可以回覆到。',
+'usermailererror' 	=> '目標郵件地址返回錯誤：',
+'defemailsubject'  	=> "{{SITENAME}} 電郵",
+'noemailtitle'		=> '無電郵地址',
+'noemailtext'		=> '呢個用戶重指指定一個有效嘅電郵電址，
+又或者佢揀咗唔收其他用戶畀佢嘅電郵。',
+'emailfrom'		=> '由',
+'emailto'		=> '到',
+'emailsubject'		=> '主題',
+'emailmessage'		=> '信息',
+'emailsend'		=> '傳送',
+'emailccme' 		=> '傳送一個我嘅信息電郵畀我。',
+'emailccsubject' 	=> '複製你嘅信息到 $1: $2',
+'emailsent'		=> '電郵已傳送',
+'emailsenttext' 	=> '你嘅電郵訊息已傳送。',
+
+# Watchlist
+'watchlist'		=> '監視清單',
+'mywatchlist'		=> '我張監視清單',
+'watchlistfor'		=> "（用戶「'''$1'''」嘅監視清單)",
+'nowatchlist'		=> '你嘅監視清單度並冇任何項目。',
+'watchlistanontext' 	=> '請先$1去睇或者改響你監視清單度嘅項目。',
+'watchlistcount' 	=> "'''你有 $1 個項目喺你嘅監視清單度，包括埋對話頁。'''",
+'clearwatchlist' 	=> '清除監視清單',
+'watchlistcleartext' 	=> '你係咪肯定想移除全部嘅項目？',
+'watchlistclearbutton' 	=> '清除監視清單',
+'watchlistcleardone' 	=> '你嘅監視清單已經啱啱清除咗。 $1 個項目已經被移除。',
+'watchnologin'		=> '未登入',
+'watchnologintext'	=> '你必須先[[Special:Userlogin|登入]]至可以更改你嘅監視清單。',
+'addedwatch'		=> '加到監視清單度',
+'addedwatchtext'	=> "頁面「[[:$1]]」已加入到你嘅[[Special:Watchlist|監視清單]]度。
+呢個頁面以及佢個討論頁以後嘅修改都會列喺嗰度，
+佢喺[[Special:Recentchanges|最近更改清單]]度會以'''粗體'''顯示，等你可以容易啲睇到佢。
+
+如果以後你要喺監視清單度刪除佢嘅話，就喺側邊欄度點「唔使監視」。",
+'removedwatch'		=> '已經由監視清單中刪除',
+'removedwatchtext' 	=> "頁面「[[:$1]]」已經喺你嘅監視清單中刪除。",
+'watch' => '監視',
+'watchthispage'		=> '監視呢頁',
+'unwatch' => '唔使監視',
+'unwatchthispage' 	=> '停止監視',
+'notanarticle'		=> '唔係一個內容頁',
+'watchnochange' 	=> '響顯示嘅時間之內，你所監視嘅頁面並無任何嘅更改。',
+'watchdetails'		=> '* 唔計討論頁，你個監視清單有 $1 版。
+* [[Special:Watchlist/edit|顯示同修改你個監視清單]]
+* [[Special:Watchlist/clear|移除全部嘅頁面]]',
+'wlheader-enotif' 	=> "* 電子郵件通知已經啟用。",
+'wlheader-showupdated' 	=> "* '''粗體字'''嘅頁面係你響上次嚟完之後被人更改過嘅頁面",
+'watchmethod-recent' 	=> '正檢查最近被編輯嘅監視頁面',
+'watchmethod-list'	=> '正檢查被監視頁面嘅最近編輯',
+'removechecked' 	=> '將剔咗嘅項目由監視清單中刪除',
+'watchlistcontains' 	=> "你嘅監視清單裏面有$1頁。",
+'watcheditlist'		=> '呢度係以字母順序排列你所監視嘅內容頁嘅一覽表。要喺你個監視清單中移除某個頁面，只需要選擇嗰一頁嘅複選框，然後撳屏幕底部嘅「移除已複選嘅頁面」按鈕。（移除內容頁亦都會一併將佢相應嘅對話頁移除，相反嘅亦都係咁）。',
+'removingchecked' 	=> '刪除緊已經請求嘅項目出監視清單...',
+'couldntremove' 	=> "項目'$1'刪除唔到...",
+'iteminvalidname' 	=> "項目'$1'出錯，無效嘅名稱...",
+'wlnote' 		=> '以下係最近<b>$2</b>小時入面嘅最新$1次修改。',
+'wlshowlast' 		=> '顯示最近 $1 個鐘 $2 日 $3 嘅修改',
+'wlsaved'		=> '呢個係你嘅監視清單入面儲存咗嘅版本。',
+'watchlist-show-bots' 	=> '顯示機械人嘅編輯',
+'watchlist-hide-bots' 	=> '隱藏機械人嘅編輯',
+'watchlist-show-own' 	=> '顯示我嘅編輯',
+'watchlist-hide-own' 	=> '隱藏我嘅編輯',
+'watchlist-show-minor' 	=> '顯示小修改',
+'watchlist-hide-minor' 	=> '隱藏小修改',
+'wldone' 		=> '完成。',
+# Displayed when you click the "watch" button and it's in the process of watching
+'watching' 		=> '監視緊...',
+'unwatching' 		=> '唔再監視緊...',
+
+'enotif_mailer' 	=> '{{SITENAME}}通知郵遞員',
+'enotif_reset'		=> '將所有頁面標成已視察',
+'enotif_newpagetext' 	=> '呢個係一個新頁面。',
+'changed'		=> '已修改',
+'created'		=> '已建立',
+'enotif_subject' 	=> '{{SITENAME}}嘅頁面$PAGETITLE已由$PAGEEDITOR$CHANGEDORCREATED',
+'enotif_lastvisited' 	=> '你上次視察以嚟嘅修改請睇$1。',
+'enotif_body' 		=> '$WATCHINGUSERNAME先生／小姐你好,
+
+{{SITENAME}}嘅頁面$PAGETITLE已經由$PAGEEDITOR喺$PAGEEDITDATE$CHANGEDORCREATED過，現時版本請睇$PAGETITLE_URL。
+
+$NEWPAGE
+
+編輯者留低嘅摘要：$PAGESUMMARY $PAGEMINOREDIT
+
+連絡呢個編輯者:
+mail: $PAGEEDITOR_EMAIL
+wiki: $PAGEEDITOR_WIKI
+
+今後唔會再有進一步嘅通知，除非你再次訪問呢個頁面。你亦都可以喺你嘅監視清單度復位所有監視頁面嘅通知標誌。
+
+            {{SITENAME}}通知系統敬上
+
+--
+要修改你嘅監視清單設定，請睇{{fullurl:{{ns:special}}:Watchlist/edit}}
+
+回饋及更多幫助：
+{{fullurl:{{MediaWiki:helppage}}}}',
+
+# Delete/protect/revert
+#
+'deletepage'		=> '刪除頁面',
+'confirm'		=> '確認',
+'excontent' 		=> "內容係：'$1'",
+'excontentauthor' 	=> "內容係：'$1' (而且唯一嘅貢獻者係'[[Special:Contributions/$2|$2]]')",
+'exbeforeblank' 	=> "喺清空之前嘅內容係：'$1'",
+'exblank' 		=> '頁面之前係空嘅',
+'confirmdelete' 	=> '確認刪除',
+'deletesub'		=> "(\"$1\"刪除中)",
+'historywarning' 	=> '警告：你要刪除嘅頁面有歷史版本：',
+'confirmdeletetext' 	=> "你準備從資料庫度徹底刪除一個頁面或者圖像，包括佢嘅所有歷史版本。
+請確認你打算噉做，而且你知道後果係點，加上確認你噉做冇違反到[[{{MediaWiki:policy-url}}]]。",
+'policy-url' 		=> 'Project:政策',
+'actioncomplete' 	=> '操作完成',
+'deletedtext'		=> "\"$1\"已經刪除。
+最近嘅刪除記錄請睇$2。",
+'deletedarticle' 	=> "已經刪除\"[[$1]]\"",
+'dellogpage'		=> '刪除日誌',
+'dellogpagetext' 	=> '以下係最近嘅刪除清單。',
+'deletionlog'		=> '刪除日誌',
+'reverted'		=> '恢復到先前嘅修訂',
+'deletecomment'		=> '刪除原因',
+'imagereverted' 	=> '恢復到先前版本嘅操作已經成功。',
+'rollback'		=> '還原修改',
+'rollback_short' 	=> '還原',
+'rollbacklink'		=> '還原',
+'rollbackfailed' 	=> '還原失敗',
+'cantrollback'		=> '還原唔到；上一位貢獻者係唯一修改過呢版嘅人。',
+'alreadyrolled'		=> "無法反轉[[User:$2|$2]]（[[User talk:$2|留言]]）對[[:$1]]嘅最後編輯；
+有人已經修改過或者反轉咗呢個頁面。
+
+上次編輯係由[[User:$3|$3]]（[[User talk:$3|留言]]）做嘅。",
+#   only shown if there is an edit comment
+'editcomment' 		=> "編輯摘要係：\"<i>$1</i>\".",
+'revertpage'		=> "已經反轉由[[Special:Contributions/$2|$2]]（[[User talk:$2|對話]]）所寫嘅編輯，恢復到[[User:$1|$1]]嘅最後版本。",
+'sessionfailure' 	=> '你嘅登入會話 (session) 好似有啲問題；
+為咗防止會話劫持，呢個操作已經取消。
+請撳「返轉頭」然後重新載入你嚟自嘅頁面，然後再試吓啦。',
+'protectlogpage' 	=> '保護日誌',
+'protectlogtext' 	=> "下面係一個保護同埋解除保護頁面嘅一覽表。睇吓[[Special:Protectedpages|保護頁面一覽]]去拎現時進行緊嘅頁面保護一覽。",
+'protectedarticle' 	=> '已經保護 "[[$1]]"',
+'unprotectedarticle' 	=> '已經唔再保護 "[[$1]]"',
+'protectsub' 		=> '（保護緊「$1」）',
+'confirmprotecttext' 	=> '你係唔係真係要保護呢個頁面？',
+'confirmprotect' 	=> '確認保護',
+'protectmoveonly' 	=> '只保護頁面嘅移動',
+'protectcomment' 	=> '保護原因',
+'protectexpiry' 	=> '到期',
+'protect_expiry_invalid' => '到期時間唔正確。',
+'protect_expiry_old' 	=> '到期時間係響之前過去嘅。',
+'unprotectsub' 		=>"（解除緊\"$1\"嘅保護）",
+'confirmunprotecttext' 	=> '你係唔係真係要解除呢個頁面嘅保護？',
+'confirmunprotect' 	=> '確認解除保護',
+'unprotectcomment' 	=> '解除保護嘅原因',
+'protect-unchain' 	=> '解除移動權限嘅鎖定',
+'protect-text' 		=> '你可以喺呢度睇到同修改頁面<strong>$1</strong>嘅保護等級。',
+'protect-locked-blocked' => '當你響被封鎖嗰陣唔可以改呢版嘅保護等級。
+呢個係<strong>$1</strong>版嘅現時設定：',
+'protect-locked-dblock' => '響資料庫主動鎖住咗嗰陣係唔可以改呢版嘅保護等級。
+呢個係<strong>$1</strong>版嘅現時設定：',
+'protect-locked-access' => '你嘅戶口係無權限去改呢版嘅保護等級。
+呢個係<strong>$1</strong>版嘅現時設定：',
+'protect-cascadeon' 	=> "呢一版現時正響度保護緊，因為佢係響以下嘅{{PLURAL:$1|一|幾}}頁度包含咗，而當中又開咗連串保護。你可以更改呢一版嘅保護等級，但係呢個修改係唔會影響到嗰個連串保護。",
+'protect-default' 	=> '（預設）',
+'protect-level-autoconfirmed' => '限制未註冊嘅用戶',
+'protect-level-sysop' 	=> '只限操作員',
+'protect-summary-cascade' => '連串保護',
+'protect-expiring' 	=> '響 $1 (UTC) 到期',
+'protect-cascade' 	=> '連串保護 - 保護包含響呢一版嘅任何頁面。',
+'restriction-type' 	=> '許可',
+'restriction-level' 	=> '限制等級',
+'minimum-size' 		=> '最小大細 (bytes)',
+
+# restrictions (nouns)
+'restriction-edit' 	=> '編輯',
+'restriction-move' 	=> '移動',
+
+# restriction levels
+'restriction-level-sysop' => '全保護', 
+'restriction-level-autoconfirmed' => '半保護',
+'restriction-level-all' => '任何等級',
+
+# Undelete
+# 以下翻譯有啲混亂，revision有時指修改嘅動作，有時指修改後嘅嗰個版本，所以翻譯嘅時候好難跟返原文。
+'undelete' 		=> '去睇刪除咗嘅頁面',
+'undeletepage' 		=> '去睇同恢復刪除咗嘅頁面',
+'viewdeletedpage' 	=> '去睇被刪除咗嘅頁面',
+'undeletepagetext' 	=> '以下頁面已經刪除，但係重喺檔庫度可以恢復。
+檔案庫可能會定時清理。',
+'undeleteextrahelp' 	=> "要恢復成個頁面，唔好剔任何嘅核選盒，再撳'''''恢復'''''。
+要恢復已經選擇咗嘅修訂，將要恢復代表有關修訂嘅核選盒剔上，再撳'''''恢復'''''。撳'''''重設'''''會清除註解文字同埋全部嘅核選盒。",
+'undeleterevisions' 	=> "$1個修訂都已經存檔",
+'undeleterevision-missing' => "唔正確或者遺失咗修訂。你可能有一個壞連結，
+或者嗰個修訂已經響存檔度恢復咗或者刪除咗。",
+'undeletehistory' 	=> '如果你恢復呢個頁面，佢嘅所有修改歷史都會恢復返到嗰篇頁面嘅歷史度。
+如果喺佢刪除之後又新開咗同名嘅頁面，你恢復嘅修改歷史會顯示喺先前歷史度，
+新頁面而家嘅修改唔會自動覆蓋咗去。同時請留意響個檔案修訂嘅限制會響恢復嗰陣遺失。',
+'undeleterevdel' 	=> '如果響最新修訂度部份刪除，噉反刪除就唔能夠進行。如果遇到呢種情況，你一定要反選或者反隱藏最新刪除咗嘅修訂。對於你冇權限去睇嘅修訂係唔能夠恢復嘅。',
+'undeletehistorynoadmin' => '呢篇文已經刪咗。刪除嘅原因喺下面嘅摘要度，
+連同重有刪除之前編輯過呢個頁面嘅用戶嘅詳細資料。
+所刪除嘅版本嘅實際內容得管理員可以睇到。',
+'undelete-revision' 	=> "已經刪除咗由$2嘅修訂$1：",
+'undeletebtn' 		=> '恢復',
+'undeletereset' 	=> '重設',
+'undeletecomment' 	=> '註解：',
+'undeletedarticle' 	=> "已經恢復咗\"[[$1]]\"",
+'undeletedrevisions' 	=> "$1個修訂已經恢復",
+'undeletedrevisions-files' => "$1個修訂同$2個檔案已經恢復",
+'undeletedfiles' 	=> "$1個檔案已經恢復",
+'cannotundelete' 	=> '反刪除失敗；可能有其他人已經反刪除嗰一頁。',
+'undeletedpage' 	=> "<big>'''$1已經成功恢復'''</big>
+
+最近嘅刪除同恢復記錄請睇[[Special:Log/delete]]。",
+'undelete-header' 	=> '睇吓[[Special:Log/delete|刪除日誌]]去睇之前刪除嘅頁頁。',
+'undelete-search-box' 	=> '搵刪除咗嘅頁面',
+'undelete-search-prefix' => '顯示由以下開頭嘅頁面：',
+'undelete-search-submit' => '搵嘢',
+'undelete-no-results' => '響刪除存檔度搵唔到符合嘅頁面。',
+
+# Namespace form on various pages
+'namespace' 	=> '空間名：',
+'invert' 	=> '反選',
+
+# Contributions
+#
+'contributions' => '用戶貢獻',
+'mycontris'     => '我嘅貢獻',
+'contribsub2'    => "$1嘅貢獻 ($2)",
+'nocontribs'    => '搵唔到符合呢啲條件嘅修改。',
+'ucnote'        => "以下係呢個用戶喺最近<b>$2</b>日內嘅最後<b>$1</b>次修改。",
+'uclinks'       => "睇吓最近$2日；睇吓最近嘅$1次修改。",
+'uctop'         => ' (最頂)' ,
+
+'sp-contributions-newest' 	=> '最新',
+'sp-contributions-oldest' 	=> '最舊',
+'sp-contributions-newer' 	=> '較新嘅$1次',
+'sp-contributions-older' 	=> '較舊嘅$1次',
+'sp-contributions-newbies' 	=> '只顯示新戶口嘅貢獻',
+'sp-contributions-newbies-sub' 	=> '新戶口嘅貢獻',
+'sp-contributions-blocklog' 	=> '封鎖日誌', 
+'sp-contributions-search' 	=> '搵貢獻',
+'sp-contributions-username' 	=> 'IP地址或用戶名：',
+'sp-contributions-submit' 	=> '搵',
+
+'sp-newimages-showfrom' 	=> '顯示由$1嘅新圖像',
+
+# What links here
+#
+'whatlinkshere'	=> '有乜嘢連結到呢度',
+'notargettitle' => '冇目標',
+'notargettext'	=> '你冇指定到呢個功能要用喺嘅對象頁面或用戶。', //會唔會好拗口？所以我唔中意啲乜野保持原文可逆嘅原則，保持原意兼且睇得舒服先至係讀者嘅最大需要
+'linklistsub'	=> '（連結一覽）',
+'linkshere'	=> "以下頁面連結到'''[[:$1]]'''：",
+'nolinkshere'	=> "無頁面連結到'''[[:$1]]'''。",
+'nolinkshere-ns' => "響已經揀咗嘅空間名度並無頁面連結到'''[[:$1]]'''。",
+'isredirect'	=> '跳轉頁',
+'istemplate'	=> '包含',
+'whatlinkshere-prev'    => '前$1版',
+'whatlinkshere-next'    => '後$1版',
+
+# Block/unblock IP
+#
+'blockip'		=> '封鎖用戶',
+'blockiptext'		=> "使用以下嘅表格嚟去阻止指定嘅IP地址或用戶名嘅寫權限。
+僅當僅當為咗避免文章畀人惡意破壞嘅時候先可以使用，而且唔可以違反[[{{MediaWiki:policy-url}}|政策]]。
+喺下面填寫阻止嘅確切原因（比如：引用咗某啲已經破壞咗嘅頁面）。",
+'ipaddress'		=> 'IP地址',
+'ipadressorusername' 	=> 'IP地址或用戶名',
+'ipbexpiry'		=> '期限',
+'ipbreason'		=> '原因',
+'ipbreasonotherlist'    => '其它原因',
+
+// These are examples only. They can be translated but should be adjusted via
+// [[MediaWiki:ipbreason-list]] by the local community
+// defines a block reason not part of a group
+// * defines a block reason group in the drow down menu
+// ** defines a block reason
+// To disable this drop down menu enter '-' in [[MediaWiki:ipbreason-dropdown]].
+'ipbreason-dropdown'    => '
+*共用封鎖原因
+** 插入錯嘅資料
+** 響頁面度扲走
+** 亂加入外部連結
+** 響頁度加入冇意義嘅嘢
+** 嚇人／騷擾
+** 濫用多個戶口
+** 唔能夠接受嘅用戶名',
+'ipbanononly'   	=> '只係封鎖匿名用戶',
+'ipbcreateaccount' 	=> '防止開新戶口',
+'ipbenableautoblock' 	=> '自動封鎖呢個用戶上次用過嘅IP地址，同埋佢地做過編輯嘅IP地址',
+'ipbsubmit'		=> '封鎖呢位用戶',
+'ipbother'		=> '其它時間',
+'ipboptions'		=> '兩個鐘頭:2 hours,一日:1 day,三日:3 days,一個禮拜:1 week,兩個禮拜:2 weeks,一個月:1 month,三個月:3 months,六個月:6 months,一年:1 year,終身:infinite',
+'ipbotheroption'	=> '其它',
+'ipbotherreason'        => '其它／附加嘅原因',
+'ipbhidename'		=> '響個封鎖日誌、現時嘅封鎖名單以用戶名單度隱藏用戶名／IP',
+'badipaddress'		=> '無效嘅IP地址',
+'blockipsuccesssub' 	=> '封鎖成功',
+'blockipsuccesstext' 	=> '[[{{ns:Special}}:Contributions/$1|$1]]已經封鎖。
+<br />去[[{{ns:Special}}:Ipblocklist|IP封鎖清單]]睇返封鎖名單。',
+'ipb-edit-dropdown' 	=> '改封鎖原因',
+'ipb-unblock-addr' 	=> '解封$1',
+'ipb-unblock' 		=> '解封一個用戶名或IP地址',
+'ipb-blocklist-addr' 	=> '去睇$1嘅現時封鎖',
+'ipb-blocklist' 	=> '去睇現時嘅封鎖',
+'unblockip'		=> '解封用戶',
+'unblockiptext'		=> '使用以下表格恢復之前阻止嘅某個IP地址或者某個用戶名嘅寫權限。',
+'ipusubmit'		=> '解封呢個地址',
+'unblocked'		=> '"[[User:$1|$1]]"已經解封',
+'ipblocklist'		=> 'IP地址同用戶名阻止名單',
+'ipblocklist-submit' 	=> '搵',
+'blocklistline'		=> "$1，$2已經封鎖咗$3（$4）",
+'infiniteblock' 	=> '不設期限',
+'expiringblock' 	=> '$1 期滿',
+'anononlyblock' 	=> '只限匿名',
+'noautoblockblock' 	=> '自動封鎖已經停用',
+'createaccountblock' 	=> '封咗開新戶口',
+'ipblocklistempty'	=> '封鎖名單係空嘅。',
+'blocklink'		=> '封鎖',
+'unblocklink'		=> '解封',
+'contribslink'		=> '貢獻',
+'autoblocker'		=> '已經自動封鎖，因為你嘅IP地址冇幾耐之前"[[User:$1|$1]]"使用過。$1\嘅封鎖原因係: 「$2」',
+'blocklogpage'		=> '封鎖日誌',
+'blocklogentry'		=> '已封鎖"[[$1]]"，到期時間為$2 $3',
+'blocklogtext'		=> '呢個係封鎖同埋解封動作嘅日誌。自動封鎖IP地址嘅動作冇列出嚟。去[[Special:Ipblocklist|IP封鎖名單]]睇現時生效嘅封鎖名單',
+'unblocklogentry'	=> '已經解封$1',
+'block-log-flags-anononly' => '只限匿名用戶',
+'block-log-flags-nocreate' => '停用開新戶口',
+'block-log-flags-noautoblock' => '停用自動封鎖器',
+'range_block_disabled'	=> '操作員嘅建立範圍封鎖已經停用。',
+'ipb_expiry_invalid'	=> '無效嘅期限。',
+'ipb_already_blocked' 	=> '"$1"已經封鎖咗',
+'ip_range_invalid' 	=> '無效嘅IP範圍',
+'proxyblocker'		=> 'Proxy 封鎖器',
+'ipb_cant_unblock' 	=> '錯誤：搵唔到封鎖ID$1。可能已經解封咗。',
+'proxyblockreason'	=> '你嘅IP係一個公開（指任何人都可以用，無須身份認證？）嘅代理地址，因此被封鎖。請聯絡你嘅Internet服務提供商或技術支援，向佢哋報告呢個嚴重嘅安全問題。',
+'proxyblocksuccess'	=> '完成。',
+'sorbs'         	=> 'DNSBL',
+'sorbsreason'   	=> '你嘅IP地址已經畀響呢個網站度用嘅DNSBL列咗做公開代理。',
+'sorbs_create_account_reason' => '你嘅IP地址已經畀響呢個網站度用嘅DNSBL列咗做公開代理。你唔可以開新戶口。',
+
+
+# Developer tools
+#
+'lockdb'		=> '鎖定資料庫',
+'unlockdb'		=> '解除鎖定資料庫',
+'lockdbtext'    	=> '鎖定資料庫會暫停所有用戶去編輯頁面、更改佢哋嘅喜好設定、
+編輯佢哋嘅監視清單嘅能力，同埋其它需要喺資料庫中更改嘅動作。
+請確認你的確係需要要噉做，喺你嘅維護工作完成之後會解除鎖定資料庫。',
+'unlockdbtext'  	=> '解除鎖定資料庫會恢復所有用戶去編輯頁面、更改佢哋嘅喜好設定、
+編輯佢哋嘅監視清單嘅能力，同埋其它需要喺資料庫中更改嘅動作。
+請確認你的確係需要要噉做。',
+'unlockdbtext' 		=> '解除資料庫鎖定以便其他用戶可以恢復進行編輯頁面、修改使用
+偏好、修改監視清單以及其他需要修改資料庫嘅操作。
+請確認你的而且確打算噉做。',
+'lockconfirm'		=> '係，我真係想去鎖定資料庫。',
+'unlockconfirm'		=> '係，我真係想去解除鎖定資料庫。',
+'lockbtn'		=> '鎖定資料庫',
+'unlockbtn'		=> '解除鎖定資料庫',
+'locknoconfirm' 	=> '你未剔個確認框喎。',
+'lockdbsuccesssub' 	=> '資料庫鎖定已經成功',
+'unlockdbsuccesssub' 	=> '資料庫鎖定已成功移除',
+'lockdbsuccesstext' 	=> '資料庫現已鎖定。
+<br />請一定要記得喺完成系統維護工作之後[[Special:Unlockdb|解除資料庫嘅鎖定]]。',
+'unlockdbsuccesstext' 	=> '資料庫鎖定現已解除。',
+'lockfilenotwritable' 	=> '資料庫封鎖檔案係唔可以寫入嘅。要鎖定或解鎖資料庫，係需要由網頁伺服器中寫入。',
+'databasenotlocked' 	=> '資料庫而家冇鎖到。',
+
+# Move page
+#
+'movepage'		=> '搬頁',
+'movepagetext' 		=> '使用以下表格會將頁面改名，兼且連同搬埋佢嘅歷史過去。
+舊標題會變成指去新標題嘅跳轉頁。
+指去舊標題嘅連結唔會修改到；請務必要檢查吓有冇雙重跳轉或者死跳轉（嘅情況發生）。
+你有責任確保啲連結依然指去佢哋應該指去嘅地方。
+
+注意如果已經有一個同個新名同名嘅頁面，噉呢個頁面係搬\'\'\'唔到\'\'\'嘅，除非嗰個同名嘅頁面係空嘅或者佢係一個跳轉頁，兼且要之前冇編輯過（冇編輯歷史）先得。噉即係講萬一你搞錯咗，你可以將呢個頁面改返去佢改之前噉，你唔可以覆蓋一個現有嘅頁面。
+
+<b>警告！</b>
+噉樣對於一個好多人經過嘅頁面嚟講可能係一個好大嘅同埋出人意表嘅修改；
+請你喺行動之前確認你清楚噉做嘅後果。',
+'movepagetalktext' => '相應嘅討論頁會連同佢一齊自動搬過去，\'\'\'除非\'\'\'：
+*新嘅頁面名下面已經有咗一個非空嘅討論頁，又或者
+*你唔剔下面個框。
+
+喺呢啲情況下，需要嘅話你唯有手動搬同合併個頁面。',
+'movearticle'	=> '搬頁',
+'movenologin'	=> '未登入',
+'movenologintext' => "你要係註冊用戶而且要[[Special:Userlogin|登入]]咗先可以搬頁",
+'newtitle'		=> '到新標題',
+'move-watch' 	=> '睇實呢一版',
+'movepagebtn'	=> '搬頁',
+'pagemovedsub'	=> '搬頁成功',
+'pagemovedtext' => "頁面\"[[$1]]\"已經搬到去\"[[$2]]\"。",
+'articleexists' => '已經有頁面叫嗰個名，或者你揀嘅名唔合法。
+請揀過第二個名。',
+'talkexists'	=> "'''頁面本身已經成功搬咗，但係個討論頁搬唔到，因為已經有一個同名嘅討論頁。請手工合併佢哋。'''",
+'movedto'		=> '搬去',
+'movetalk'		=> '搬相應嘅討論頁',
+'talkpagemoved' => '相應嘅討論頁已經搬咗。',
+'talkpagenotmoved' => '相應嘅討論頁<strong>冇</strong>搬到。',
+'1movedto2'		=> '[[$1]]搬到去[[$2]]',
+'1movedto2_redir' => '[[$1]]通過跳轉搬到去[[$2]]',
+'movelogpage' => '移動日誌',
+'movelogpagetext' => '以下係搬過嘅頁面清單。',
+'movereason'	=> '原因',
+'revertmove'	=> '恢復',
+#下面個“and”唔確定表示並列定係表示先後（係先刪除，移動，再恢復舊頁歷史）
+'delete_and_move' => '刪除並移動',
+'delete_and_move_text'	=>
+'==需要刪除==
+
+目標文章「[[$1]]」已經存在。你要唔要刪咗佢空個位出嚟畀個搬文動作？',
+'delete_and_move_confirm' => '好，刪咗嗰個頁面',
+'delete_and_move_reason' => '已經刪咗嚟畀位畀個搬文動作',
+'selfmove' => "原始標題同目的標題一樣；唔可以將個頁面搬返去自己度。",
+'immobile_namespace' => "來源或目的標題屬於特別類型；唔可以將頁面搬自或搬去嗰個空間名。",
+
+# Export
+
+'export' 	=> '倒出/導出/匯出（Export）頁面',
+'exporttext' 	=> '你可以倒出文字、編輯某個頁面、編輯封裝（wrap）喺一啲XML度嘅一組頁面。
+呢啲嘢可以用MediaWiki透過[[Special:Import|倒入]]頁倒入去其他wiki度。
+
+要倒出頁面嘅話，就喺下面嘅文字框度打標題名，一行一個標題，
+然後揀你係要現時版本加上所有嘅舊版本同歷史，定係淨係要現時版本同最後編輯嘅相關資訊。
+
+喺後面嗰種情況下，你亦都可以用一個連結，例如[[{{ns:Special}}:Export/{{MediaWiki:mainpage}}]]對頁面{{MediaWiki:mainpage}}。',
+'exportcuronly' => '淨係包括而家嘅修訂版本，唔包括完整歷史',
+'exportnohistory' => "----
+'''注意：'''因為性能嘅原因，已經停用禁止咗使用呢個表格倒出頁面嘅完整歷史",
+'export-submit' => '倒出/導出/匯出',
+'export-addcattext' => '由分類度加入頁面：',
+'export-addcat' => '加入',
+
+# Namespace 8 related
+
+'allmessages'		=> '系統信息',
+'allmessagesname' 	=> '名稱',
+'allmessagesdefault' 	=> '預設文字',
+'allmessagescurrent' 	=> '現時文字',
+'allmessagestext'	=> '以下係 MediaWiki 空間名入邊現有系統訊息嘅清單。',
+'allmessagesnotsupportedUI' => '呢個網站嘅{{ns:special}}:AllMessages唔支持你現時嘅介面語言<b>$1</b>。',
+'allmessagesnotsupportedDB' => '唔可以用\'\'\'{{ns:special}}:AllMessages\'\'\'，因為\'\'\'$wgUseDatabaseMessages\'\'\'已經閂咗。',
+'allmessagesfilter' 	=> '訊息名過濾（器）：',
+'allmessagesmodified' 	=> '只顯示修改過嘅',
+
+
+# Thumbnails
+
+'thumbnail-more'	=> '放大',
+'missingimage'		=> '<b>唔見張圖</b><br /><i>$1</i>',
+'filemissing'		=> '唔見個檔案',
+'thumbnail_error' 	=> '整唔到縮圖: $1',
+'djvu_page_error' 	=> 'DjVu頁超出範圍',
+'djvu_no_xml' 		=> '唔能夠響DjVu檔度攞個XML',
+'thumbnail_invalid_params' => '唔正確嘅縮圖參數',
+'thumbnail_dest_directory' => '唔能夠開目標目錄',
+
+# Special:Import
+'import'	=> '倒入頁面',
+# 未用過Transwiki，唔知係乜，呢段等第二個嚟翻^c^ （Transwiki係需要轉載原修訂歷史到另外一個計劃中，e.g.百科&rarr;詞典）
+'importinterwiki' => 'Transwiki 倒入',
+'import-interwiki-text' => '揀一個 wiki 同埋一頁去倒入。
+修訂日期同編輯者會被保存落嚟。
+所有 transwiki 嘅倒入動作會響[[Special:Log/import|倒入日誌]]度記錄落嚟。',
+'import-interwiki-history' => '複製呢一頁所有嘅歷史版本',
+'import-interwiki-submit' => '倒入',
+'import-interwiki-namespace' => '轉移頁面到空間名：',
+'importtext'	=> '請由原 wiki 嘅 Special:Export 工具匯出成檔案，儲存喺你個磁碟度，然後再上載到呢度。',
+'importstart' => "倒入頁面中...",
+'import-revision-count' => '$1次修訂',
+'importnopages' => "冇頁面去倒入。",
+'importfailed'	=> "倒入失敗：$1",
+'importunknownsource' => "不明嘅倒入來源類型",
+'importcantopen' => "唔能夠開個倒入檔案",
+'importbadinterwiki' => "壞嘅跨 wiki 連結",
+'importnotext'	=> '空白或者唔係文字',
+'importsuccess'	=> '已經成功倒入！',
+'importhistoryconflict' => '存在有衝突嘅歷史版本（之前可能曾經倒入過呢頁）',
+'importnosources' => '未定義 transwiki 嘅匯入來源，同埋歷史嘅直接上載已經停用。',
+'importnofile' => '冇上載到任何要倒入嘅檔案。',
+'importuploaderror' => '上載要倒入嘅文件失敗；可能文件超過咗允許嘅上載大細。',
+
+# import log
+'importlogpage' => '倒入日誌',
+'importlogpagetext' => '管理員由其它嘅 wiki 倒入頁面同埋佢哋嘅編輯歷史記錄。',
+'import-logentry-upload' => '由檔案上載倒入咗 [[$1]]',
+'import-logentry-upload-detail' => '$1個修訂',
+'import-logentry-interwiki' => 'transwiki咗 $1',
+'import-logentry-interwiki-detail' => '由$2嘅$1個修訂',
+
+# Tooltip help for the actions 
+'tooltip-pt-userpage' => '我嘅用戶頁',
+'tooltip-pt-anonuserpage' => '你編輯呢個IP嘅對應用戶頁',
+'tooltip-pt-mytalk' => '我嘅對話頁',
+'tooltip-pt-anontalk' => '對於嚟自呢一個IP地址編輯嘅討論',
+'tooltip-pt-preferences' => '我嘅喜好設定',
+'tooltip-pt-watchlist' => '你所監視嘅頁面更改一覽',
+'tooltip-pt-mycontris' => '我嘅貢獻一覽',
+'tooltip-pt-login' => '登入係唔需要嘅，但會帶嚟好多嘅好處',
+'tooltip-pt-anonlogin' => '登入係唔需要嘅，但會帶嚟好多嘅好處',
+'tooltip-pt-logout' => '登出',
+'tooltip-ca-talk' => '關於內容頁嘅討論',
+'tooltip-ca-edit' => '你可以編輯呢一頁。請在儲存之前先預覽一吓。',
+'tooltip-ca-addsection' => '開始新嘅討論',
+'tooltip-ca-viewsource' => '呢一頁已經被保護。你可以睇吓呢一頁呢原始碼。',
+'tooltip-ca-history' => '呢一頁之前嘅版本',
+'tooltip-ca-protect' => '保護呢一頁',
+'tooltip-ca-delete' => '刪除呢一頁',
+'tooltip-ca-undelete' => '將呢個頁面還原到被刪除之前嘅狀態',
+'tooltip-ca-move' => '移動呢一頁',
+'tooltip-ca-watch' => '將呢一頁加到去你嘅監視清單',
+'tooltip-ca-unwatch' => '將呢一頁喺你嘅監視清單中移去',
+'tooltip-search' => '搵吓呢個 wiki',
+'tooltip-p-logo' => '頭版',
+'tooltip-n-mainpage' => '睇頭版',
+'tooltip-n-portal' => '關於呢個計劃，你可以做乜，應該要點做',
+'tooltip-n-currentevents' => '提供而家發生嘅事嘅背景資料',
+'tooltip-n-recentchanges' => '列出呢個 wiki 中嘅最近修改',
+'tooltip-n-randompage' => '是但載入一個頁面',
+'tooltip-n-help' => '搵吓點做嘅地方',
+'tooltip-n-sitesupport' => '資持我哋',
+'tooltip-t-whatlinkshere' => '列出所有連接過嚟呢度嘅頁面',
+'tooltip-t-recentchangeslinked' => '喺呢個頁面連出嘅頁面更改',
+'tooltip-feed-rss' => '呢一頁嘅RSS集合',
+'tooltip-feed-atom' => '呢一頁嘅Atom集合',
+'tooltip-t-contributions' => '睇吓呢個用戶嘅貢獻一覽',
+'tooltip-t-emailuser' => '寄封電子郵件畀呢一位用戶',
+'tooltip-t-upload' => '上載圖像或者多媒體檔案',
+'tooltip-t-specialpages' => '所有特別頁嘅一覽',
+'tooltip-ca-nstab-main' => '睇吓內容頁',
+'tooltip-ca-nstab-user' => '睇吓用戶頁',
+'tooltip-ca-nstab-media' => '睇吓媒體頁',
+'tooltip-ca-nstab-special' => '呢個係一個特別頁；你唔能夠嗰一頁進行編輯。',
+'tooltip-ca-nstab-project' => '睇吓專案頁',
+'tooltip-ca-nstab-image' => '睇吓圖像頁',
+'tooltip-ca-nstab-mediawiki' => '睇吓系統信息',
+'tooltip-ca-nstab-template' => '睇吓個模',
+'tooltip-ca-nstab-help' => '睇吓幫助頁',
+'tooltip-ca-nstab-category' => '睇吓分類頁',
+'tooltip-search' => '搵{{SITENAME}}',
+'tooltip-minoredit' => '標為細嘅修訂[alt-i]',
+'tooltip-save' => '保存你嘅更改[alt-s]',
+'tooltip-preview' => '預覽你嘅修改，請喺保存之前先預覽一次先！[alt-p]',
+'tooltip-diff' => '顯示你對文章所作嘅修改[alt-v]',
+'tooltip-compareselectedversions' => '顯示該頁面兩個所選版本嘅唔同之處。[alt-v]',
+'tooltip-watch' => '將呢頁加到去你嘅監視清單度[alt-w]',
+'tooltip-recreate' => '即使已經刪除過都要重新整過呢頁',
+
+# stylesheets
+'common.css' => '/* 響呢度放 CSS 碼去改成個網站嘅皮 */', 
+'monobook.css' => '/* 響呢度放 CSS 碼去改用戶用嘅 Monobook 皮 */',
+
+# Scripts
+'common.js' => '/* 響每一次個頁面載入時，所有用戶都會載入呢度所有嘅JavaScript。 */',
+'monobook.js' => '/* 己經唔用；用 [[MediaWiki:common.js]] */',
+
+# Metadata
+# 元數據（大陸）
+'nodublincore' => 'Dublin Core RDF metadata 已經喺呢一個伺服器上停用。',
+'nocreativecommons' => 'Creative Commons RDF metadata 已經喺呢一個伺服器上停用。',
+'notacceptable' => '呢個 wiki 伺服器唔能夠畀一個可以讀嘅資料畀個客。',
+
+# Attribution
+
+'anonymous' => '{{SITENAME}}嘅匿名用戶',
+'siteuser' => '{{SITENAME}}嘅用戶$1',
+'lastmodifiedatby' => '呢一頁最後響 $1 $2 畀 $3 修改。',
+'and' => '同埋',
+'othercontribs' => '以$1嘅作品為基礎。',
+'others' => '其他',
+'siteusers' => '{{SITENAME}}嘅用戶$1',
+'creditspage' => '頁面信譽', //Page credits
+'nocredits' => '呢一頁並無任何嘅信譽資料可以提供。',
+
+# Spam protection
+
+'spamprotectiontitle' => '隔垃圾器',
+'spamprotectiontext' => '隔垃圾器已經擋住咗你要儲存嘅頁面。噉可能係由指去外部網站嘅連結引起。',
+'spamprotectionmatch' => '以下係觸發我哋嘅反垃圾過濾器嘅文字：$1',
+'subcategorycount' => "呢個類別入邊有$1個細類別。",
+'categoryarticlecount' => "呢個類別入邊有$1篇文章。",
+'category-media-count' => "呢個類別入邊有$1個檔案。",
+'listingcontinuesabbrev' => " 續",
+'spambot_username' => 'MediaWiki垃圾清除',
+'spam_reverting' => '恢復返去最後一個唔包含指去$1嘅連結嘅嗰個版本。',
+'spam_blanking' => '全部版本都含有指去$1嘅連結，留空',
+
+# Info page
+'infosubtitle' => '頁面嘅資訊',
+'numedits' => '編輯次數（文章）：$1',
+'numtalkedits' => '編輯次數（討論頁）：$1',
+'numwatchers' => '監視者數：$1',
+'numauthors' => '唔同編者嘅數目（文章）：$1',
+'numtalkauthors' => '唔同編者嘅數目（討論頁）：$1',
+
+# Math options
+'mw_math_png' => '全部用PNG表示',
+'mw_math_simple' => '如果好簡單嘅就用HTML，否則就用PNG',
+'mw_math_html' => '可以嘅話都用HTML，否則就用PNG',
+'mw_math_source' => '保留返用TeX（文字瀏覽器用）',
+'mw_math_modern' => '新式瀏覽器嘅建議選項',
+'mw_math_mathml' => '可以嘅話用MathML（實驗中）',
+
+# Patrolling
+'markaspatrolleddiff'   => "標示為已巡查嘅",
+'markaspatrolledtext'   => "標示呢篇文為已巡查嘅",
+'markedaspatrolled'     => "已經標示做已巡查嘅",
+'markedaspatrolledtext' => "已經選擇咗嘅修訂已經標示咗做已巡查嘅。",
+'rcpatroldisabled'      => "最近修改巡查已經停用",
+'rcpatroldisabledtext'  => "最近修改嘅巡查功能現時停用中。",
+'markedaspatrollederror'  => "唔可以標示做已巡查嘅",
+'markedaspatrollederrortext' => "你需要指定一個修訂用嚟將佢標示做已巡查嘅。",
+'markedaspatrollederror-noautopatrol' => '你係唔准去標示你自己嘅更改做已巡查嘅。',
+
+# Patrol log
+'patrol-log-page' => '巡查日誌',
+'patrol-log-line' => '已經標示咗$1/$2版做已經巡查嘅$3',
+'patrol-log-auto' => '(自動)',
+'patrol-log-diff' => 'r$1',
+
+# image deletion
+'deletedrevision' => '刪除咗$1嘅舊有修訂。',
+
+# browsing diffs
+'previousdiff' => '← 上一個差異',
+'nextdiff' => '下一個差異 →',
+
+# media-info
+'mediawarning' 		=> '\'\'\'警告\'\'\'：呢個檔案可能有一啲惡意嘅程式編碼，如果執行佢嘅話，你嘅系統可能會被波及。<hr />',
+'imagemaxsize'          => '限制圖像描述頁中嘅圖像一細到：',
+'thumbsize'             => '縮圖大細：',
+'file-info'             => '(檔案大細：$1 ，MIME類型：$2)',
+'file-info-size'        => '($1 × $2 像素，檔案大細：$3 ，MIME類型：$4)',
+'file-nohires'          => '<small>冇更高解像度嘅圖像。</small>',
+'file-svg'              => '<small>呢個係一幅無損，可以放大縮細嘅向量圖像。基礎大細： $1 × $2 像素。</small>',
+'show-big-image'        => '完整解像度',
+'show-big-image-thumb'  => '<small>呢個預覽嘅大細： $1 × $2 像素</small>',
+
+'newimages' => '新檔案畫廊',
+'showhidebots' => '($1 機械人)',
+'noimages'  => '冇嘢去睇。',
+
+# short names for language variants used for language conversion links.
+# to disable showing a particular link, set it to 'disable', e.g.
+# 'variantname-zh-sg' => 'disable',
+'variantname-zh-cn' => '簡體（中國大陸）',
+'variantname-zh-tw' => '正體（台灣）',
+'variantname-zh-hk' => '繁體（香港）',
+'variantname-zh-sg' => '簡體（新加坡）',
+'variantname-zh' => '無變換',
+# variants for Serbian language
+'variantname-sr-ec' => '斯拉夫易卡語',
+'variantname-sr-el' => '拉丁易卡語',
+'variantname-sr-jc' => '斯拉夫耶卡語',
+'variantname-sr-jl' => '拉丁耶卡語',
+'variantname-sr' => '無變換',
+# variants for Kazakh language
+'variantname-kk-tr' => '哈薩克拉丁文',
+'variantname-kk-kz' => '哈薩克西里爾字',
+'variantname-kk-cn' => '哈薩克阿剌伯文',
+'variantname-kk' => 'disable',
+
+'passwordtooshort' => '你嘅密碼唔正確或者太短喇。佢最少要有$1個半形字元，同埋要同你嘅用戶名唔同。',
+
+# Metadata
+'metadata' => 'Metadata',
+'metadata-help' => '呢個檔案有額外嘅資料。佢應該係數碼相機或者掃描器整出來嘅。如果佢整咗之後畀人改過，裏面嘅資料未必同改過之後相符。',
+'metadata-expand' => '打開詳細資料',
+'metadata-collapse' => '收埋詳細資料',
+'metadata-fields' => '響呢個信息列出嘅 EXIF 元數據項目會喺圖像頁中包含起嚟，
+而且個元數據表除咗喺下面列出嘅項目之外，其它嘅項目預設會被隱藏。
+* 相機廠商 (make)
+* 相機型號 (model)
+* 原創日期時間 (datetimeoriginal)
+* 曝光長度 (exposuretime)
+* F 值 (fnumber)
+* 鏡頭焦距 (focallength)',
+
+# Exif tags
+'exif-imagewidth' =>'闊',
+'exif-imagelength' =>'高',
+'exif-bitspersample' =>'每部位位元數',
+'exif-compression' =>'壓細方法',
+'exif-photometricinterpretation' =>'像素構成',
+'exif-orientation' =>'攞放方向',
+'exif-samplesperpixel' =>'部位數',
+'exif-planarconfiguration' =>'資料編排',
+'exif-ycbcrsubsampling' =>'Y 到 C 嘅二次抽樣比例',
+'exif-ycbcrpositioning' =>'Y 同 C 位置',
+'exif-xresolution' =>'橫解像度',
+'exif-yresolution' =>'直解像度',
+'exif-resolutionunit' =>'橫直解像度單位',
+'exif-stripoffsets' =>'圖像資料位置',
+'exif-rowsperstrip' =>'每帶行數',
+'exif-stripbytecounts' =>'每壓縮帶 bytes 數',
+'exif-jpeginterchangeformat' =>'JPEG SOI 嘅偏移量',
+'exif-jpeginterchangeformatlength' =>'JPEG 資料嘅 bytes 數',
+'exif-transferfunction' =>'轉移功能',
+'exif-whitepoint' =>'白點色度',
+'exif-primarychromaticities' =>'主要嘅色度',
+'exif-ycbcrcoefficients' =>'顏色空間轉換矩陣系數',
+'exif-referenceblackwhite' =>'黑白對參照值',
+'exif-datetime' =>'檔案更動日期時間',
+'exif-imagedescription' =>'圖名',
+'exif-make' =>'相機廠商',
+'exif-model' =>'相機型號',
+'exif-software' =>'用過嘅軟件',
+'exif-artist' =>'作者',
+'exif-copyright' =>'版權人',
+'exif-exifversion' =>'Exif版本',
+'exif-flashpixversion' =>'支援嘅 Flashpix 版本',
+'exif-colorspace' =>'色彩空間',
+'exif-componentsconfiguration' =>'每個部份嘅意思',
+'exif-compressedbitsperpixel' =>'影像壓縮模式', //Image compression mode, 呢個varible 同　英文唔同嘅？
+'exif-pixelydimension' =>'影像有效闊度',
+'exif-pixelxdimension' =>'影像有效高度',
+'exif-makernote' =>'廠商註腳',
+'exif-usercomment' =>'用家註腳',
+'exif-relatedsoundfile' =>'相關聲音檔',
+'exif-datetimeoriginal' =>'原創日期時間',
+'exif-datetimedigitized' =>'制成數碼日期時間',
+'exif-subsectime' =>'日期時間細秒', //DateTime subseconds
+'exif-subsectimeoriginal' =>'日期時間原細秒', //DateTimeOriginal subseconds
+'exif-subsectimedigitized' =>'日期時間數碼化細秒', //DateTimeDigitized subseconds
+'exif-exposuretime' =>'曝光長度',
+'exif-exposuretime-format' => '$1 秒 ($2)',
+'exif-fnumber' =>'F 值',
+'exif-fnumber-format' =>'f/$1',
+'exif-exposureprogram' =>'曝光程序',
+'exif-spectralsensitivity' =>'光譜敏感度',
+'exif-isospeedratings' =>'ISO 速率',
+'exif-oecf' =>'光電轉換因子',
+'exif-shutterspeedvalue' =>'快門速度',
+'exif-aperturevalue' =>'光圈',
+'exif-brightnessvalue' =>'光度',
+'exif-exposurebiasvalue' =>'曝光偏壓', //Exposure bias
+'exif-maxaperturevalue' =>'最大陸地孔徑',
+'exif-subjectdistance' =>'主體距離',
+'exif-meteringmode' =>'測距模式',
+'exif-lightsource' =>'光源',
+'exif-flash' =>'閃光燈',
+'exif-focallength' =>'鏡頭焦距',
+'exif-focallength-format' =>'$1 毫米',
+'exif-subjectarea' =>'主體面積',
+'exif-flashenergy' =>'閃光燈能量',
+'exif-spatialfrequencyresponse' =>'空間頻率響應',
+'exif-focalplanexresolution' =>'焦點平面 X 嘅解像度',
+'exif-focalplaneyresolution' =>'焦點平面 Y 嘅解像度',
+'exif-focalplaneresolutionunit' =>'焦點平面解像度單位',
+'exif-subjectlocation' =>'主題位置',
+'exif-exposureindex' =>'曝光指數',
+'exif-sensingmethod' =>'感知方法',
+'exif-filesource' =>'檔案來源',
+'exif-scenetype' =>'埸景類型',
+'exif-cfapattern' =>'CFA 形式',
+'exif-customrendered' =>'自訂影像處理', //Custom image processing
+'exif-exposuremode' =>'曝光模式',
+'exif-whitebalance' =>'白平衡',
+'exif-digitalzoomratio' =>'數碼放大比例',
+'exif-focallengthin35mmfilm' =>'以35毫米菲林計嘅焦距',
+'exif-scenecapturetype' =>'場景捕捉類型', //Scene capture type
+'exif-gaincontrol' =>'場景控制', //Scene control
+'exif-contrast' =>'對比',
+'exif-saturation' =>'飽和度',
+'exif-sharpness' =>'清晰度',
+'exif-devicesettingdescription' =>'裝置設定描述',
+'exif-subjectdistancerange' =>'物件距離範圍',
+'exif-imageuniqueid' =>'影像獨有編號',
+'exif-gpsversionid' =>'全球定位版本',
+'exif-gpslatituderef' =>'南北緯',
+'exif-gpslatitude' =>'緯度',
+'exif-gpslongituderef' =>'東西經',
+'exif-gpslongitude' =>'經度',
+'exif-gpsaltituderef' =>'海拔參考點',
+'exif-gpsaltitude' =>'海拔',
+'exif-gpstimestamp' =>'全球定位時間（原子鐘）',
+'exif-gpssatellites' =>'量度用嘅衞星',
+'exif-gpsstatus' =>'接收器狀態',
+'exif-gpsmeasuremode' =>'量度模式',
+'exif-gpsdop' =>'量度準繩度',
+'exif-gpsspeedref' =>'速度單位',
+'exif-gpsspeed' =>'全球定位儀嘅速度',
+'exif-gpstrackref' =>'移動方向參考點',
+'exif-gpstrack' =>'移動方向',
+'exif-gpsimgdirectionref' =>'影像方向參考點',
+'exif-gpsimgdirection' =>'影像方向',
+'exif-gpsmapdatum' =>'用咗嘅大地測量資料',
+'exif-gpsdestlatituderef' =>'目的地緯度參考點',
+'exif-gpsdestlatitude' =>'目的地緯度',
+'exif-gpsdestlongituderef' =>'目的地經度參考點',
+'exif-gpsdestlongitude' =>'目的地經度',
+'exif-gpsdestbearingref' =>'目的地坐向參考點',
+'exif-gpsdestbearing' =>'目的地坐向',
+'exif-gpsdestdistanceref' =>'目的地距離參考點',
+'exif-gpsdestdistance' =>'目的地距離',
+'exif-gpsprocessingmethod' =>'GPS 處理方法名',
+'exif-gpsareainformation' =>'GPS 地區名',
+'exif-gpsdatestamp' =>'GPS 日期',
+'exif-gpsdifferential' =>'GPS 差動修正',
+
+# Exif attributes
+
+'exif-compression-1' => '未壓過',
+'exif-compression-6' => 'JPEG',
+
+'exif-unknowndate' => '未知日期',
+
+'exif-photometricinterpretation-2' => 'RGB',
+'exif-photometricinterpretation-6' => 'YCbCr',
+
+'exif-orientation-1' => '正常', // 0th row: top; 0th column: left
+'exif-orientation-2' => '左右倒轉', // 0th row: top; 0th column: right
+'exif-orientation-3' => '轉一百八十度', // 0th row: bottom; 0th column: right
+'exif-orientation-4' => '上下倒轉', // 0th row: bottom; 0th column: left
+'exif-orientation-5' => '逆時針轉九十度，再上下倒轉', // 0th row: left; 0th column: top
+'exif-orientation-6' => '順時針轉九十度', // 0th row: right; 0th column: top
+'exif-orientation-7' => '順時針轉九十度，再上下倒轉', // 0th row: right; 0th column: bottom
+'exif-orientation-8' => '逆時針轉九十度', // 0th row: left; 0th column: bottom
+
+'exif-planarconfiguration-1' => 'chunky 格式',
+'exif-planarconfiguration-2' => 'planar 格式',
+
+'exif-xyresolution-i' => '$1 dpi',
+'exif-xyresolution-c' => '$1 dpc',
+
+'exif-colorspace-1' => 'sRGB',
+'exif-colorspace-ffff.h' => 'FFFF.H',
+
+'exif-componentsconfiguration-0' => '根本無',
+'exif-componentsconfiguration-1' => 'Y',
+'exif-componentsconfiguration-2' => 'Cb',
+'exif-componentsconfiguration-3' => 'Cr',
+'exif-componentsconfiguration-4' => 'R',
+'exif-componentsconfiguration-5' => 'G',
+'exif-componentsconfiguration-6' => 'B',
+
+'exif-exposureprogram-0' => '無定義',
+'exif-exposureprogram-1' => '人手',
+'exif-exposureprogram-2' => '平常程序',
+'exif-exposureprogram-3' => '着重光圈',
+'exif-exposureprogram-4' => '着重快門',
+'exif-exposureprogram-5' => '創作程序(加重景深)',
+'exif-exposureprogram-6' => '動作程序(加大快門速度)',
+'exif-exposureprogram-7' => '人像模式(近睇，背景矇)',
+'exif-exposureprogram-8' => '風景模式(風景相，聚焦背景)',
+
+'exif-subjectdistance-value' => '$1米',
+
+'exif-meteringmode-0' => '唔知',
+'exif-meteringmode-1' => '平均',
+'exif-meteringmode-2' => '中間加權平均',
+'exif-meteringmode-3' => '一點',
+'exif-meteringmode-4' => '多點',
+'exif-meteringmode-5' => '圖案',
+'exif-meteringmode-6' => '部分',
+'exif-meteringmode-255' => '其他',
+
+'exif-lightsource-0' => '唔知',
+'exif-lightsource-1' => '日光',
+'exif-lightsource-2' => '光管',
+'exif-lightsource-3' => '燈泡(鎢絲)',
+'exif-lightsource-4' => '閃光燈',
+'exif-lightsource-9' => '晴朗',
+'exif-lightsource-10' => '有雲',
+'exif-lightsource-11' => '陰影',
+'exif-lightsource-12' => '日光螢光燈 (D 5700 – 7100K)',
+'exif-lightsource-13' => '日光白色螢光燈 (N 4600 – 5400K)',
+'exif-lightsource-14' => '冷白螢光燈 (W 3900 – 4500K)',
+'exif-lightsource-15' => '白色螢光燈 (WW 3200 – 3700K)',
+'exif-lightsource-17' => '標準光 A',
+'exif-lightsource-18' => '標準光 B',
+'exif-lightsource-19' => '標準光 C',
+'exif-lightsource-20' => 'D55',
+'exif-lightsource-21' => 'D65',
+'exif-lightsource-22' => 'D75',
+'exif-lightsource-23' => 'D50',
+'exif-lightsource-24' => 'ISO 攝影廠鎢燈',
+'exif-lightsource-255' => '其它光源',
+
+'exif-focalplaneresolutionunit-2' => '吋',
+
+'exif-sensingmethod-1' => '無定義',
+'exif-sensingmethod-2' => '單晶片色彩空間感應器',
+'exif-sensingmethod-3' => '雙晶片色彩空間感應器',
+'exif-sensingmethod-4' => '三晶片色彩空間感應器',
+'exif-sensingmethod-5' => '連續色彩空間感應器',
+'exif-sensingmethod-7' => '三綫感應器',
+'exif-sensingmethod-8' => '連續色彩綫性感應器',
+
+'exif-filesource-3' => 'DSC',
+
+'exif-scenetype-1' => '一張直接映像',
+
+'exif-customrendered-0' => '一般程序',
+'exif-customrendered-1' => '度身程序',
+
+'exif-exposuremode-0' => '自動曝光',
+'exif-exposuremode-1' => '手動曝光',
+'exif-exposuremode-2' => '自動曝光感知調節',
+
+'exif-whitebalance-0' => '自動白平衡',
+'exif-whitebalance-1' => '手動白平衡',
+
+'exif-scenecapturetype-0' => '標準',
+'exif-scenecapturetype-1' => '風景',
+'exif-scenecapturetype-2' => '人像',
+'exif-scenecapturetype-3' => '夜景',
+
+'exif-gaincontrol-0' => '高',
+'exif-gaincontrol-1' => '小增',
+'exif-gaincontrol-2' => '大增',
+'exif-gaincontrol-3' => '小減',
+'exif-gaincontrol-4' => '大減',
+
+'exif-contrast-0' => '平常',
+'exif-contrast-1' => '軟',
+'exif-contrast-2' => '硬',
+
+'exif-saturation-0' => '平常',
+'exif-saturation-1' => '低飽和',
+'exif-saturation-2' => '高飽和',
+
+'exif-sharpness-0' => '平常',
+'exif-sharpness-1' => '軟',
+'exif-sharpness-2' => '硬',
+
+'exif-subjectdistancerange-0' => '唔知',
+'exif-subjectdistancerange-1' => '微觀',
+'exif-subjectdistancerange-2' => '近鏡',
+'exif-subjectdistancerange-3' => '遠鏡',
+
+// Pseudotags used for GPSLatitudeRef and GPSDestLatitudeRef
+'exif-gpslatitude-n' => '北緯',
+'exif-gpslatitude-s' => '南緯',
+
+// Pseudotags used for GPSLongitudeRef and GPSDestLongitudeRef
+'exif-gpslongitude-e' => '東經',
+'exif-gpslongitude-w' => '西經',
+
+'exif-gpsstatus-a' => '度緊',
+'exif-gpsstatus-v' => '互度',
+
+'exif-gpsmeasuremode-2' => '二維量度',
+'exif-gpsmeasuremode-3' => '三維量度',
+
+// Pseudotags used for GPSSpeedRef and GPSDestDistanceRef
+'exif-gpsspeed-k' => '千米/小時',
+'exif-gpsspeed-m' => '英里/小時',
+'exif-gpsspeed-n' => '浬',
+
+// Pseudotags used for GPSTrackRef, GPSImgDirectionRef and GPSDestBearingRef
+'exif-gpsdirection-t' => '真實方向',
+'exif-gpsdirection-m' => '地磁方向',
+
+# external editor support
+'edit-externally' => '用外面程式來改呢個檔案',
+'edit-externally-help' => '去[http://meta.wikimedia.org/wiki/Help:External_editors setup instructions] 睇多啲資料',
+
+# 'all' in various places, this might be different for inflected languages
+'recentchangesall' => '全部',
+'imagelistall' => '全部',
+'watchlistall1' => '全部',
+'watchlistall2' => '全部',
+'namespacesall' => '全部',
+
+# E-mail address confirmation
+'confirmemail' => '確認電郵地址',
+'confirmemail_noemail' => '你唔需要響你嘅[[Special:Preferences|用戶喜好設定]]度設定一個有效嘅電郵地址。',
+'confirmemail_text' => "呢個wiki需要你喺使用電郵功能之前驗證吓你嘅電郵地址。
+啟用下邊個掣嚟發封確認信去你個地址度。
+封信入面會附帶一條包含代碼嘅連結；
+喺你個瀏覽器度打開條連結嚟確認你嘅電郵地址係有效嘅。",
+'confirmemail_pending' => '<div class="error">
+一個確認碼已經電郵咗畀你；
+如果你係啱啱開咗個新戶口嘅，
+你可以響請求一個新嘅確認碼之前等多幾分鐘等佢寄畀你。
+</div>',
+'confirmemail_send' => '寄出確認碼。',
+'confirmemail_sent' => '確認電郵已經寄出。',
+'confirmemail_oncreate' => '一個確認碼已經寄送咗到嘅嘅電郵地址。
+呢個代碼唔係登入嗰陣去用，但係你需要佢去開響呢個wiki度，任何同電郵有關嘅功能。',
+'confirmemail_sendfailed' => '發唔到確認信。請檢查吓個地址有冇無效嘅字。
+
+郵件遞送員回應咗：$1',
+'confirmemail_invalid' => '無效嘅確認碼。個代碼可能已經過咗期。',
+'confirmemail_needlogin' => '你需要先$1去確認你嘅電郵地址。',
+'confirmemail_success' => '你嘅電郵地址已經得到確認。你而家可以登入同盡情享受wiki啦。',
+'confirmemail_loggedin' => '你嘅電郵地址現已得到確認。',
+'confirmemail_error' => '儲存你嘅確認資料嘅時候有小小嘢發生咗意外。',
+
+'confirmemail_subject' => '{{SITENAME}}電郵地址確認',
+'confirmemail_body' => "有人（好有可能係嚟自你嘅IP地址 $1）已經用呢個電郵地址喺{{SITENAME}}度註冊咗帳戶\"$2\"
+
+要確認呢個帳戶的而且確屬於你同埋啟用{{SITENAME}}嘅電郵功能，
+請喺你嘅瀏覽器度打開呢條連結：
+
+$3
+
+如果呢個*唔係*你，請唔好打開條連結。
+呢個確認代碼會喺$4到期。",
+
+# Inputbox extension, may be useful in other contexts as well
+'tryexact' => '試吓精確嘅比較',
+'searchfulltext' => '搵全文',
+'createarticle' => '建立文章',
+
+# Scary transclusion
+'scarytranscludedisabled' => '[跨 wiki 滲漏正停用]',
+'scarytranscludefailed' => '[$1嘅頡取模動作失敗；對唔住]',
+'scarytranscludetoolong' => '[URL 太長；對唔住]',
+
+# Trackbacks
+'trackbackbox' => '<div id="mw_trackbacks">
+呢一篇文嘅過去追蹤：<br />
+$1
+</div>',
+'trackbackremove' => ' ([$1 刪除])',
+'trackbacklink' => '過去追蹤',
+'trackbackdeleteok' => '過去追蹤已經成功噉樣刪除。',
+
+
+# delete conflict
+
+'deletedwhileediting' => '警告：你寫緊文嗰陣，有用戶洗咗呢版！',
+'confirmrecreate' => '你寫緊文嗰陣，阿用戶 [[User:$1|$1]] ([[User talk:$1|talk]]) 洗咗呢一頁。以下係佢個理由：
+: \'\'$2\'\'
+你係咪真係想重新整過呢版？',
+'recreate' => '重新整過',
+
+'unit-pixel' => 'px',
+
+# HTML dump
+'redirectingto' => '重新定向到[[$1]]...',
+
+# action=purge
+'confirm_purge' => "肯定要洗咗呢版個快取版本？\n\n$1",
+'confirm_purge_button' => '肯定',
+
+'youhavenewmessagesmulti' => "你響 $1 有一個新信息",
+
+'searchcontaining' => "搵含有''$1''嘅文章。",
+'searchnamed' => "搵個名係''$1''嘅文章。",
+'articletitles' => "以''$1''開頭嘅文章",
+'hideresults' => '收埋結果',
+
+# DISPLAYTITLE
+'displaytitle' => '（以[[$1]]連結到呢一頁）',
+
+'loginlanguagelabel' => '語言：$1',
+
+# Multipage image navigation
+'imgmultipageprev' => '← 上一版',
+'imgmultipagenext' => '下一版 →',
+'imgmultigo' => '去!',
+'imgmultigotopre' => '去到第',
+'imgmultigotopost' => '版',
+'imgmultiparseerror' => '個圖像檔可能已經損毀又或者唔正確，{{SITENAME}}唔能夠拎到頁面一覽。',
+
+# Table pager
+'ascending_abbrev' => '增',
+'descending_abbrev' => '減',
+'table_pager_next' => '下一版',
+'table_pager_prev' => '上一版',
+'table_pager_first' => '第一版',
+'table_pager_last' => '最後一版',
+'table_pager_limit' => '每一版顯示$1個項目',
+'table_pager_limit_submit' => '去',
+'table_pager_empty' => '無結果',
+
+# Auto-summaries
+'autosumm-blank' => '移除緊響嗰一版嘅全部內容',
+'autosumm-replace' => '用 \'$1\' 取代緊嗰一版',
+'autoredircomment' 	=> '重新定向緊到[[$1]]', # This should be changed to the new naming convention, but existed beforehand.
+'autosumm-new' => '新頁： $1',
+
+# Size units
+'size-bytes' 		=> '$1 B',
+'size-kilobytes' 	=> '$1 KB',
+'size-megabytes' 	=> '$1 MB',
+'size-gigabytes' 	=> '$1 GB',
+
+# Live preview
+'livepreview-loading' 	=> '載入緊…',
+'livepreview-ready' 	=> '載入緊… 預備好！',
+'livepreview-failed' 	=> "實時預覽失敗！\n試吓標準預覽。",
+'livepreview-error' 	=> "連接失敗： $1 \"$2\"\n試吓標準預覽。",
+
+);
+
+?>
Index: /MediaWiki/branches/1.11/locale/README
===================================================================
--- /MediaWiki/branches/1.11/locale/README	(revision 1280)
+++ /MediaWiki/branches/1.11/locale/README	(revision 1280)
@@ -0,0 +1,1 @@
+This directory is for .po files generated by ./maintenance/lang2po.php
Index: /MediaWiki/branches/1.11/maintenance/.htaccess
===================================================================
--- /MediaWiki/branches/1.11/maintenance/.htaccess	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/.htaccess	(revision 1280)
@@ -0,0 +1,1 @@
+Deny from all
Index: /MediaWiki/branches/1.11/maintenance/Doxyfile
===================================================================
--- /MediaWiki/branches/1.11/maintenance/Doxyfile	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/Doxyfile	(revision 1280)
@@ -0,0 +1,279 @@
+# Doxyfile 1.4.6
+
+#
+# Some placeholders have been added for MediaWiki usage:
+# {{OUTPUT_DIRECTORY}}
+# {{STRIP_FROM_PATH}}
+# {{INPUT}}
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+PROJECT_NAME           = MediaWiki
+PROJECT_NUMBER         = trunk
+OUTPUT_DIRECTORY       = {{OUTPUT_DIRECTORY}}
+CREATE_SUBDIRS         = NO
+OUTPUT_LANGUAGE        = English
+USE_WINDOWS_ENCODING   = NO
+BRIEF_MEMBER_DESC      = YES
+REPEAT_BRIEF           = YES
+ABBREVIATE_BRIEF       = "The $name class" \
+                         "The $name widget" \
+                         "The $name file" \
+                         is \
+                         provides \
+                         specifies \
+                         contains \
+                         represents \
+                         a \
+                         an \
+                         the
+ALWAYS_DETAILED_SEC    = NO
+INLINE_INHERITED_MEMB  = NO
+FULL_PATH_NAMES        = YES
+STRIP_FROM_PATH        = {{STRIP_FROM_PATH}}
+STRIP_FROM_INC_PATH    = 
+SHORT_NAMES            = NO
+JAVADOC_AUTOBRIEF      = YES
+MULTILINE_CPP_IS_BRIEF = NO
+DETAILS_AT_TOP         = NO
+INHERIT_DOCS           = YES
+SEPARATE_MEMBER_PAGES  = NO
+TAB_SIZE               = 8
+ALIASES                = 
+OPTIMIZE_OUTPUT_FOR_C  = NO
+OPTIMIZE_OUTPUT_JAVA   = NO
+BUILTIN_STL_SUPPORT    = NO
+DISTRIBUTE_GROUP_DOC   = NO
+SUBGROUPING            = YES
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+EXTRACT_ALL            = YES
+EXTRACT_PRIVATE        = YES
+EXTRACT_STATIC         = YES
+EXTRACT_LOCAL_CLASSES  = YES
+EXTRACT_LOCAL_METHODS  = NO
+HIDE_UNDOC_MEMBERS     = NO
+HIDE_UNDOC_CLASSES     = NO
+HIDE_FRIEND_COMPOUNDS  = NO
+HIDE_IN_BODY_DOCS      = NO
+INTERNAL_DOCS          = NO
+CASE_SENSE_NAMES       = YES
+HIDE_SCOPE_NAMES       = NO
+SHOW_INCLUDE_FILES     = YES
+INLINE_INFO            = YES
+SORT_MEMBER_DOCS       = YES
+SORT_BRIEF_DOCS        = NO
+SORT_BY_SCOPE_NAME     = NO
+GENERATE_TODOLIST      = YES
+GENERATE_TESTLIST      = YES
+GENERATE_BUGLIST       = YES
+GENERATE_DEPRECATEDLIST= YES
+ENABLED_SECTIONS       = 
+MAX_INITIALIZER_LINES  = 30
+SHOW_USED_FILES        = YES
+SHOW_DIRECTORIES       = NO
+FILE_VERSION_FILTER    = 
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+QUIET                  = NO
+WARNINGS               = YES
+WARN_IF_UNDOCUMENTED   = YES
+WARN_IF_DOC_ERROR      = YES
+WARN_NO_PARAMDOC       = NO
+WARN_FORMAT            = "$file:$line: $text"
+WARN_LOGFILE           = 
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+INPUT                  = {{INPUT}}
+FILE_PATTERNS          = *.c \
+                         *.cc \
+                         *.cxx \
+                         *.cpp \
+                         *.c++ \
+                         *.d \
+                         *.java \
+                         *.ii \
+                         *.ixx \
+                         *.ipp \
+                         *.i++ \
+                         *.inl \
+                         *.h \
+                         *.hh \
+                         *.hxx \
+                         *.hpp \
+                         *.h++ \
+                         *.idl \
+                         *.odl \
+                         *.cs \
+                         *.php \
+                         *.php3 \
+                         *.inc \
+                         *.m \
+                         *.mm \
+                         *.dox \
+                         *.py \
+                         *.C \
+                         *.CC \
+                         *.C++ \
+                         *.II \
+                         *.I++ \
+                         *.H \
+                         *.HH \
+                         *.H++ \
+                         *.CS \
+                         *.PHP \
+                         *.PHP3 \
+                         *.M \
+                         *.MM \
+                         *.PY
+RECURSIVE              = YES
+EXCLUDE                = 
+EXCLUDE_SYMLINKS       = NO
+EXCLUDE_PATTERNS       = LocalSettings.php AdminSettings.php
+EXAMPLE_PATH           = 
+EXAMPLE_PATTERNS       = *
+EXAMPLE_RECURSIVE      = NO
+IMAGE_PATH             = 
+INPUT_FILTER           = 
+FILTER_PATTERNS        = 
+FILTER_SOURCE_FILES    = NO
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+SOURCE_BROWSER         = YES
+INLINE_SOURCES         = NO
+STRIP_CODE_COMMENTS    = YES
+REFERENCED_BY_RELATION = YES
+REFERENCES_RELATION    = YES
+USE_HTAGS              = NO
+VERBATIM_HEADERS       = YES
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+ALPHABETICAL_INDEX     = NO
+COLS_IN_ALPHA_INDEX    = 5
+IGNORE_PREFIX          = 
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+GENERATE_HTML          = YES
+HTML_OUTPUT            = html
+HTML_FILE_EXTENSION    = .html
+HTML_HEADER            = 
+HTML_FOOTER            = 
+HTML_STYLESHEET        = 
+HTML_ALIGN_MEMBERS     = YES
+GENERATE_HTMLHELP      = NO
+CHM_FILE               = 
+HHC_LOCATION           = 
+GENERATE_CHI           = NO
+BINARY_TOC             = NO
+TOC_EXPAND             = NO
+DISABLE_INDEX          = NO
+ENUM_VALUES_PER_LINE   = 4
+GENERATE_TREEVIEW      = YES
+TREEVIEW_WIDTH         = 250
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+GENERATE_LATEX         = NO
+LATEX_OUTPUT           = latex
+LATEX_CMD_NAME         = latex
+MAKEINDEX_CMD_NAME     = makeindex
+COMPACT_LATEX          = NO
+PAPER_TYPE             = a4wide
+EXTRA_PACKAGES         = 
+LATEX_HEADER           = 
+PDF_HYPERLINKS         = NO
+USE_PDFLATEX           = NO
+LATEX_BATCHMODE        = NO
+LATEX_HIDE_INDICES     = NO
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+GENERATE_RTF           = NO
+RTF_OUTPUT             = rtf
+COMPACT_RTF            = NO
+RTF_HYPERLINKS         = NO
+RTF_STYLESHEET_FILE    = 
+RTF_EXTENSIONS_FILE    = 
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+GENERATE_MAN           = YES
+MAN_OUTPUT             = man
+MAN_EXTENSION          = .3
+MAN_LINKS              = NO
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+GENERATE_XML           = NO
+XML_OUTPUT             = xml
+XML_SCHEMA             = 
+XML_DTD                = 
+XML_PROGRAMLISTING     = YES
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+GENERATE_AUTOGEN_DEF   = NO
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+GENERATE_PERLMOD       = NO
+PERLMOD_LATEX          = NO
+PERLMOD_PRETTY         = YES
+PERLMOD_MAKEVAR_PREFIX = 
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor   
+#---------------------------------------------------------------------------
+ENABLE_PREPROCESSING   = YES
+MACRO_EXPANSION        = NO
+EXPAND_ONLY_PREDEF     = NO
+SEARCH_INCLUDES        = YES
+INCLUDE_PATH           = 
+INCLUDE_FILE_PATTERNS  = 
+PREDEFINED             = 
+EXPAND_AS_DEFINED      = 
+SKIP_FUNCTION_MACROS   = YES
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references   
+#---------------------------------------------------------------------------
+TAGFILES               = 
+GENERATE_TAGFILE       = 
+ALLEXTERNALS           = NO
+EXTERNAL_GROUPS        = YES
+PERL_PATH              = /usr/bin/perl
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool   
+#---------------------------------------------------------------------------
+CLASS_DIAGRAMS         = NO
+HIDE_UNDOC_RELATIONS   = YES
+HAVE_DOT               = NO
+CLASS_GRAPH            = YES
+COLLABORATION_GRAPH    = YES
+GROUP_GRAPHS           = YES
+UML_LOOK               = NO
+TEMPLATE_RELATIONS     = NO
+INCLUDE_GRAPH          = YES
+INCLUDED_BY_GRAPH      = YES
+CALL_GRAPH             = YES
+GRAPHICAL_HIERARCHY    = YES
+DIRECTORY_GRAPH        = YES
+DOT_IMAGE_FORMAT       = png
+DOT_PATH               = 
+DOTFILE_DIRS           = 
+MAX_DOT_GRAPH_WIDTH    = 1024
+MAX_DOT_GRAPH_HEIGHT   = 1024
+MAX_DOT_GRAPH_DEPTH    = 1000
+DOT_TRANSPARENT        = NO
+DOT_MULTI_TARGETS      = NO
+GENERATE_LEGEND        = YES
+DOT_CLEANUP            = YES
+#---------------------------------------------------------------------------
+# Configuration::additions related to the search engine   
+#---------------------------------------------------------------------------
+SEARCHENGINE           = NO
Index: /MediaWiki/branches/1.11/maintenance/FiveUpgrade.inc
===================================================================
--- /MediaWiki/branches/1.11/maintenance/FiveUpgrade.inc	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/FiveUpgrade.inc	(revision 1280)
@@ -0,0 +1,1179 @@
+<?php
+
+require_once( 'cleanupDupes.inc' );
+require_once( 'userDupes.inc' );
+require_once( 'updaters.inc' );
+
+define( 'MW_UPGRADE_COPY',     false );
+define( 'MW_UPGRADE_ENCODE',   true  );
+define( 'MW_UPGRADE_NULL',     null  );
+define( 'MW_UPGRADE_CALLBACK', null  ); // for self-documentation only
+
+class FiveUpgrade {
+	function FiveUpgrade() {
+		$this->conversionTables = $this->prepareWindows1252();
+
+		$this->dbw =& $this->newConnection();
+		$this->dbr =& $this->streamConnection();
+
+		$this->cleanupSwaps = array();
+		$this->emailAuth = false; # don't preauthenticate emails
+		$this->maxLag    = 10; # if slaves are lagged more than 10 secs, wait
+	}
+
+	function doing( $step ) {
+		return is_null( $this->step ) || $step == $this->step;
+	}
+
+	function upgrade( $step ) {
+		$this->step = $step;
+
+		$tables = array(
+			'page',
+			'links',
+			'user',
+			'image',
+			'oldimage',
+			'watchlist',
+			'logging',
+			'archive',
+			'imagelinks',
+			'categorylinks',
+			'ipblocks',
+			'recentchanges',
+			'querycache' );
+		foreach( $tables as $table ) {
+			if( $this->doing( $table ) ) {
+				$method = 'upgrade' . ucfirst( $table );
+				$this->$method();
+			}
+		}
+
+		if( $this->doing( 'cleanup' ) ) {
+			$this->upgradeCleanup();
+		}
+	}
+
+
+	/**
+	 * Open a connection to the master server with the admin rights.
+	 * @return Database
+	 * @access private
+	 */
+	function &newConnection() {
+		global $wgDBadminuser, $wgDBadminpassword;
+		global $wgDBserver, $wgDBname;
+		$db = new Database( $wgDBserver, $wgDBadminuser, $wgDBadminpassword, $wgDBname );
+		return $db;
+	}
+
+	/**
+	 * Open a second connection to the master server, with buffering off.
+	 * This will let us stream large datasets in and write in chunks on the
+	 * other end.
+	 * @return Database
+	 * @access private
+	 */
+	function &streamConnection() {
+		$timeout = 3600 * 24;
+		$db =& $this->newConnection();
+		$db->bufferResults( false );
+		$db->query( "SET net_read_timeout=$timeout" );
+		$db->query( "SET net_write_timeout=$timeout" );
+		return $db;
+	}
+
+	/**
+	 * Prepare a conversion array for converting Windows Code Page 1252 to
+	 * UTF-8. This should provide proper conversion of text that was miscoded
+	 * as Windows-1252 by naughty user-agents, and doesn't rely on an outside
+	 * iconv library.
+	 *
+	 * @return array
+	 * @access private
+	 */
+	function prepareWindows1252() {
+		# Mappings from:
+		# http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1252.TXT
+		static $cp1252 = array(
+			0x80 => 0x20AC,	#EURO SIGN
+			0x81 => 0xFFFD, #REPLACEMENT CHARACTER (no mapping)
+			0x82 => 0x201A,	#SINGLE LOW-9 QUOTATION MARK
+			0x83 => 0x0192,	#LATIN SMALL LETTER F WITH HOOK
+			0x84 => 0x201E,	#DOUBLE LOW-9 QUOTATION MARK
+			0x85 => 0x2026,	#HORIZONTAL ELLIPSIS
+			0x86 => 0x2020,	#DAGGER
+			0x87 => 0x2021,	#DOUBLE DAGGER
+			0x88 => 0x02C6,	#MODIFIER LETTER CIRCUMFLEX ACCENT
+			0x89 => 0x2030,	#PER MILLE SIGN
+			0x8A => 0x0160,	#LATIN CAPITAL LETTER S WITH CARON
+			0x8B => 0x2039,	#SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+			0x8C => 0x0152,	#LATIN CAPITAL LIGATURE OE
+			0x8D => 0xFFFD, #REPLACEMENT CHARACTER (no mapping)
+			0x8E => 0x017D,	#LATIN CAPITAL LETTER Z WITH CARON
+			0x8F => 0xFFFD, #REPLACEMENT CHARACTER (no mapping)
+			0x90 => 0xFFFD, #REPLACEMENT CHARACTER (no mapping)
+			0x91 => 0x2018,	#LEFT SINGLE QUOTATION MARK
+			0x92 => 0x2019,	#RIGHT SINGLE QUOTATION MARK
+			0x93 => 0x201C,	#LEFT DOUBLE QUOTATION MARK
+			0x94 => 0x201D,	#RIGHT DOUBLE QUOTATION MARK
+			0x95 => 0x2022,	#BULLET
+			0x96 => 0x2013,	#EN DASH
+			0x97 => 0x2014,	#EM DASH
+			0x98 => 0x02DC,	#SMALL TILDE
+			0x99 => 0x2122,	#TRADE MARK SIGN
+			0x9A => 0x0161,	#LATIN SMALL LETTER S WITH CARON
+			0x9B => 0x203A,	#SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+			0x9C => 0x0153,	#LATIN SMALL LIGATURE OE
+			0x9D => 0xFFFD, #REPLACEMENT CHARACTER (no mapping)
+			0x9E => 0x017E,	#LATIN SMALL LETTER Z WITH CARON
+			0x9F => 0x0178,	#LATIN CAPITAL LETTER Y WITH DIAERESIS
+			);
+		$pairs = array();
+		for( $i = 0; $i < 0x100; $i++ ) {
+			$unicode = isset( $cp1252[$i] ) ? $cp1252[$i] : $i;
+			$pairs[chr( $i )] = codepointToUtf8( $unicode );
+		}
+		return $pairs;
+	}
+
+	/**
+	 * Convert from 8-bit Windows-1252 to UTF-8 if necessary.
+	 * @param string $text
+	 * @return string
+	 * @access private
+	 */
+	function conv( $text ) {
+		global $wgUseLatin1;
+		return is_null( $text )
+			? null
+			: ( $wgUseLatin1
+				? strtr( $text, $this->conversionTables )
+				: $text );
+	}
+
+	/**
+	 * Dump timestamp and message to output
+	 * @param string $message
+	 * @access private
+	 */
+	function log( $message ) {
+		echo wfWikiID() . ' ' . wfTimestamp( TS_DB ) . ': ' . $message . "\n";
+		flush();
+	}
+
+	/**
+	 * Initialize the chunked-insert system.
+	 * Rows will be inserted in chunks of the given number, rather
+	 * than in a giant INSERT...SELECT query, to keep the serialized
+	 * MySQL database replication from getting hung up. This way other
+	 * things can be going on during conversion without waiting for
+	 * slaves to catch up as badly.
+	 *
+	 * @param int $chunksize Number of rows to insert at once
+	 * @param int $final Total expected number of rows / id of last row,
+	 *                   used for progress reports.
+	 * @param string $table to insert on
+	 * @param string $fname function name to report in SQL
+	 * @access private
+	 */
+	function setChunkScale( $chunksize, $final, $table, $fname ) {
+		$this->chunkSize  = $chunksize;
+		$this->chunkFinal = $final;
+		$this->chunkCount = 0;
+		$this->chunkStartTime = wfTime();
+		$this->chunkOptions = array( 'IGNORE' );
+		$this->chunkTable = $table;
+		$this->chunkFunction = $fname;
+	}
+
+	/**
+	 * Chunked inserts: perform an insert if we've reached the chunk limit.
+	 * Prints a progress report with estimated completion time.
+	 * @param array &$chunk -- This will be emptied if an insert is done.
+	 * @param int $key A key identifier to use in progress estimation in
+	 *                 place of the number of rows inserted. Use this if
+	 *                 you provided a max key number instead of a count
+	 *                 as the final chunk number in setChunkScale()
+	 * @access private
+	 */
+	function addChunk( &$chunk, $key = null ) {
+		if( count( $chunk ) >= $this->chunkSize ) {
+			$this->insertChunk( $chunk );
+
+			$this->chunkCount += count( $chunk );
+			$now = wfTime();
+			$delta = $now - $this->chunkStartTime;
+			$rate = $this->chunkCount / $delta;
+
+			if( is_null( $key ) ) {
+				$completed = $this->chunkCount;
+			} else {
+				$completed = $key;
+			}
+			$portion = $completed / $this->chunkFinal;
+
+			$estimatedTotalTime = $delta / $portion;
+			$eta = $this->chunkStartTime + $estimatedTotalTime;
+
+			printf( "%s: %6.2f%% done on %s; ETA %s [%d/%d] %.2f/sec\n",
+				wfTimestamp( TS_DB, intval( $now ) ),
+				$portion * 100.0,
+				$this->chunkTable,
+				wfTimestamp( TS_DB, intval( $eta ) ),
+				$completed,
+				$this->chunkFinal,
+				$rate );
+			flush();
+
+			$chunk = array();
+		}
+	}
+
+	/**
+	 * Chunked inserts: perform an insert unconditionally, at the end, and log.
+	 * @param array &$chunk -- This will be emptied if an insert is done.
+	 * @access private
+	 */
+	function lastChunk( &$chunk ) {
+		$n = count( $chunk );
+		if( $n > 0 ) {
+			$this->insertChunk( $chunk );
+		}
+		$this->log( "100.00% done on $this->chunkTable (last chunk $n rows)." );
+	}
+
+	/**
+	 * Chunked inserts: perform an insert.
+	 * @param array &$chunk -- This will be emptied if an insert is done.
+	 * @access private
+	 */
+	function insertChunk( &$chunk ) {
+		// Give slaves a chance to catch up
+		wfWaitForSlaves( $this->maxLag );
+		$this->dbw->insert( $this->chunkTable, $chunk, $this->chunkFunction, $this->chunkOptions );
+	}
+
+
+	/**
+	 * Copy and transcode a table to table_temp.
+	 * @param string $name Base name of the source table
+	 * @param string $tabledef CREATE TABLE definition, w/ $1 for the name
+	 * @param array $fields set of destination fields to these constants:
+	 *              MW_UPGRADE_COPY   - straight copy
+	 *              MW_UPGRADE_ENCODE - for old Latin1 wikis, conv to UTF-8
+	 *              MW_UPGRADE_NULL   - just put NULL
+	 * @param callable $callback An optional callback to modify the data
+	 *                           or perform other processing. Func should be
+	 *                           ( object $row, array $copy ) and return $copy
+	 * @access private
+	 */
+	function copyTable( $name, $tabledef, $fields, $callback = null ) {
+		$fname = 'FiveUpgrade::copyTable';
+
+		$name_temp = $name . '_temp';
+		$this->log( "Migrating $name table to $name_temp..." );
+
+		$table_temp = $this->dbw->tableName( $name_temp );
+
+		// Create temporary table; we're going to copy everything in there,
+		// then at the end rename the final tables into place.
+		$def = str_replace( '$1', $table_temp, $tabledef );
+		$this->dbw->query( $def, $fname );
+
+		$numRecords = $this->dbw->selectField( $name, 'COUNT(*)', '', $fname );
+		$this->setChunkScale( 100, $numRecords, $name_temp, $fname );
+
+		// Pull all records from the second, streaming database connection.
+		$sourceFields = array_keys( array_filter( $fields,
+			create_function( '$x', 'return $x !== MW_UPGRADE_NULL;' ) ) );
+		$result = $this->dbr->select( $name,
+			$sourceFields,
+			'',
+			$fname );
+
+		$add = array();
+		while( $row = $this->dbr->fetchObject( $result ) ) {
+			$copy = array();
+			foreach( $fields as $field => $source ) {
+				if( $source === MW_UPGRADE_COPY ) {
+					$copy[$field] = $row->$field;
+				} elseif( $source === MW_UPGRADE_ENCODE ) {
+					$copy[$field] = $this->conv( $row->$field );
+				} elseif( $source === MW_UPGRADE_NULL ) {
+					$copy[$field] = null;
+				} else {
+					$this->log( "Unknown field copy type: $field => $source" );
+				}
+			}
+			if( is_callable( $callback ) ) {
+				$copy = call_user_func( $callback, $row, $copy );
+			}
+			$add[] = $copy;
+			$this->addChunk( $add );
+		}
+		$this->lastChunk( $add );
+		$this->dbr->freeResult( $result );
+
+		$this->log( "Done converting $name." );
+		$this->cleanupSwaps[] = $name;
+	}
+
+	function upgradePage() {
+		$fname = "FiveUpgrade::upgradePage";
+		$chunksize = 100;
+
+		if( $this->dbw->tableExists( 'page' ) ) {
+			$this->log( 'Page table already exists; aborting.' );
+			die( -1 );
+		}
+
+		$this->log( "Checking cur table for unique title index and applying if necessary" );
+		checkDupes( true );
+
+		$this->log( "...converting from cur/old to page/revision/text DB structure." );
+
+		list ($cur, $old, $page, $revision, $text) = $this->dbw->tableNamesN( 'cur', 'old', 'page', 'revision', 'text' );
+
+		$this->log( "Creating page and revision tables..." );
+		$this->dbw->query("CREATE TABLE $page (
+  			page_id int(8) unsigned NOT NULL auto_increment,
+  			page_namespace int NOT NULL,
+  			page_title varchar(255) binary NOT NULL,
+  			page_restrictions tinyblob NOT NULL default '',
+  			page_counter bigint(20) unsigned NOT NULL default '0',
+  			page_is_redirect tinyint(1) unsigned NOT NULL default '0',
+  			page_is_new tinyint(1) unsigned NOT NULL default '0',
+  			page_random real unsigned NOT NULL,
+  			page_touched char(14) binary NOT NULL default '',
+  			page_latest int(8) unsigned NOT NULL,
+  			page_len int(8) unsigned NOT NULL,
+
+  			PRIMARY KEY page_id (page_id),
+  			UNIQUE INDEX name_title (page_namespace,page_title),
+  			INDEX (page_random),
+  			INDEX (page_len)
+			) TYPE=InnoDB", $fname );
+		$this->dbw->query("CREATE TABLE $revision (
+  			rev_id int(8) unsigned NOT NULL auto_increment,
+  			rev_page int(8) unsigned NOT NULL,
+  			rev_text_id int(8) unsigned NOT NULL,
+  			rev_comment tinyblob NOT NULL default '',
+  			rev_user int(5) unsigned NOT NULL default '0',
+  			rev_user_text varchar(255) binary NOT NULL default '',
+  			rev_timestamp char(14) binary NOT NULL default '',
+  			rev_minor_edit tinyint(1) unsigned NOT NULL default '0',
+			rev_deleted tinyint(1) unsigned NOT NULL default '0',
+
+  			PRIMARY KEY rev_page_id (rev_page, rev_id),
+  			UNIQUE INDEX rev_id (rev_id),
+  			INDEX rev_timestamp (rev_timestamp),
+  			INDEX page_timestamp (rev_page,rev_timestamp),
+  			INDEX user_timestamp (rev_user,rev_timestamp),
+  			INDEX usertext_timestamp (rev_user_text,rev_timestamp)
+			) TYPE=InnoDB", $fname );
+
+		$maxold = intval( $this->dbw->selectField( 'old', 'max(old_id)', '', $fname ) );
+		$this->log( "Last old record is {$maxold}" );
+
+		global $wgLegacySchemaConversion;
+		if( $wgLegacySchemaConversion ) {
+			// Create HistoryBlobCurStub entries.
+			// Text will be pulled from the leftover 'cur' table at runtime.
+			echo "......Moving metadata from cur; using blob references to text in cur table.\n";
+			$cur_text = "concat('O:18:\"historyblobcurstub\":1:{s:6:\"mCurId\";i:',cur_id,';}')";
+			$cur_flags = "'object'";
+		} else {
+			// Copy all cur text in immediately: this may take longer but avoids
+			// having to keep an extra table around.
+			echo "......Moving text from cur.\n";
+			$cur_text = 'cur_text';
+			$cur_flags = "''";
+		}
+
+		$maxcur = $this->dbw->selectField( 'cur', 'max(cur_id)', '', $fname );
+		$this->log( "Last cur entry is $maxcur" );
+
+		/**
+		 * Copy placeholder records for each page's current version into old
+		 * Don't do any conversion here; text records are converted at runtime
+		 * based on the flags (and may be originally binary!) while the meta
+		 * fields will be converted in the old -> rev and cur -> page steps.
+		 */
+		$this->setChunkScale( $chunksize, $maxcur, 'old', $fname );
+		$result = $this->dbr->query(
+			"SELECT cur_id, cur_namespace, cur_title, $cur_text AS text, cur_comment,
+			cur_user, cur_user_text, cur_timestamp, cur_minor_edit, $cur_flags AS flags
+  			FROM $cur
+  			ORDER BY cur_id", $fname );
+  		$add = array();
+		while( $row = $this->dbr->fetchObject( $result ) ) {
+			$add[] = array(
+				'old_namespace'  => $row->cur_namespace,
+				'old_title'      => $row->cur_title,
+				'old_text'       => $row->text,
+				'old_comment'    => $row->cur_comment,
+				'old_user'       => $row->cur_user,
+				'old_user_text'  => $row->cur_user_text,
+				'old_timestamp'  => $row->cur_timestamp,
+				'old_minor_edit' => $row->cur_minor_edit,
+				'old_flags'      => $row->flags );
+			$this->addChunk( $add, $row->cur_id );
+		}
+		$this->lastChunk( $add );
+		$this->dbr->freeResult( $result );
+
+		/**
+		 * Copy revision metadata from old into revision.
+		 * We'll also do UTF-8 conversion of usernames and comments.
+		 */
+		#$newmaxold = $this->dbw->selectField( 'old', 'max(old_id)', '', $fname );
+		#$this->setChunkScale( $chunksize, $newmaxold, 'revision', $fname );
+		#$countold = $this->dbw->selectField( 'old', 'count(old_id)', '', $fname );
+		$countold = $this->dbw->selectField( 'old', 'max(old_id)', '', $fname );
+		$this->setChunkScale( $chunksize, $countold, 'revision', $fname );
+
+		$this->log( "......Setting up revision table." );
+		$result = $this->dbr->query(
+			"SELECT old_id, cur_id, old_comment, old_user, old_user_text,
+			old_timestamp, old_minor_edit
+			FROM $old,$cur WHERE old_namespace=cur_namespace AND old_title=cur_title",
+			$fname );
+
+		$add = array();
+		while( $row = $this->dbr->fetchObject( $result ) ) {
+			$add[] = array(
+				'rev_id'         =>              $row->old_id,
+				'rev_page'       =>              $row->cur_id,
+				'rev_text_id'    =>              $row->old_id,
+				'rev_comment'    => $this->conv( $row->old_comment ),
+				'rev_user'       =>              $row->old_user,
+				'rev_user_text'  => $this->conv( $row->old_user_text ),
+				'rev_timestamp'  =>              $row->old_timestamp,
+				'rev_minor_edit' =>              $row->old_minor_edit );
+			$this->addChunk( $add );
+		}
+		$this->lastChunk( $add );
+		$this->dbr->freeResult( $result );
+
+
+		/**
+		 * Copy page metadata from cur into page.
+		 * We'll also do UTF-8 conversion of titles.
+		 */
+		$this->log( "......Setting up page table." );
+		$this->setChunkScale( $chunksize, $maxcur, 'page', $fname );
+		$result = $this->dbr->query( "
+			SELECT cur_id, cur_namespace, cur_title, cur_restrictions, cur_counter, cur_is_redirect, cur_is_new,
+    				cur_random, cur_touched, rev_id, LENGTH(cur_text) AS len
+  			FROM $cur,$revision
+  			WHERE cur_id=rev_page AND rev_timestamp=cur_timestamp AND rev_id > {$maxold}
+  			ORDER BY cur_id", $fname );
+		$add = array();
+		while( $row = $this->dbr->fetchObject( $result ) ) {
+			$add[] = array(
+				'page_id'           =>              $row->cur_id,
+				'page_namespace'    =>              $row->cur_namespace,
+				'page_title'        => $this->conv( $row->cur_title ),
+				'page_restrictions' =>              $row->cur_restrictions,
+				'page_counter'      =>              $row->cur_counter,
+				'page_is_redirect'  =>              $row->cur_is_redirect,
+				'page_is_new'       =>              $row->cur_is_new,
+				'page_random'       =>              $row->cur_random,
+				'page_touched'      =>              $this->dbw->timestamp(),
+				'page_latest'       =>              $row->rev_id,
+				'page_len'          =>              $row->len );
+			#$this->addChunk( $add, $row->cur_id );
+			$this->addChunk( $add );
+		}
+		$this->lastChunk( $add );
+		$this->dbr->freeResult( $result );
+
+		$this->log( "...done with cur/old -> page/revision." );
+	}
+
+	function upgradeLinks() {
+		$fname = 'FiveUpgrade::upgradeLinks';
+		$chunksize = 200;
+		list ($links, $brokenlinks, $pagelinks, $cur) = $this->dbw->tableNamesN( 'links', 'brokenlinks', 'pagelinks', 'cur' );
+
+		$this->log( 'Checking for interwiki table change in case of bogus items...' );
+		if( $this->dbw->fieldExists( 'interwiki', 'iw_trans' ) ) {
+			$this->log( 'interwiki has iw_trans.' );
+		} else {
+			global $IP;
+			$this->log( 'adding iw_trans...' );
+			dbsource( $IP . '/maintenance/archives/patch-interwiki-trans.sql', $this->dbw );
+			$this->log( 'added iw_trans.' );
+		}
+
+		$this->log( 'Creating pagelinks table...' );
+		$this->dbw->query( "
+CREATE TABLE $pagelinks (
+  -- Key to the page_id of the page containing the link.
+  pl_from int(8) unsigned NOT NULL default '0',
+
+  -- Key to page_namespace/page_title of the target page.
+  -- The target page may or may not exist, and due to renames
+  -- and deletions may refer to different page records as time
+  -- goes by.
+  pl_namespace int NOT NULL default '0',
+  pl_title varchar(255) binary NOT NULL default '',
+
+  UNIQUE KEY pl_from(pl_from,pl_namespace,pl_title),
+  KEY (pl_namespace,pl_title)
+
+) TYPE=InnoDB" );
+
+		$this->log( 'Importing live links -> pagelinks' );
+		$nlinks = $this->dbw->selectField( 'links', 'count(*)', '', $fname );
+		if( $nlinks ) {
+			$this->setChunkScale( $chunksize, $nlinks, 'pagelinks', $fname );
+			$result = $this->dbr->query( "
+			  SELECT l_from,cur_namespace,cur_title
+				FROM $links, $cur
+				WHERE l_to=cur_id", $fname );
+			$add = array();
+			while( $row = $this->dbr->fetchObject( $result ) ) {
+				$add[] = array(
+					'pl_from'      =>              $row->l_from,
+					'pl_namespace' =>              $row->cur_namespace,
+					'pl_title'     => $this->conv( $row->cur_title ) );
+				$this->addChunk( $add );
+			}
+			$this->lastChunk( $add );
+		} else {
+			$this->log( 'no links!' );
+		}
+
+		$this->log( 'Importing brokenlinks -> pagelinks' );
+		$nbrokenlinks = $this->dbw->selectField( 'brokenlinks', 'count(*)', '', $fname );
+		if( $nbrokenlinks ) {
+			$this->setChunkScale( $chunksize, $nbrokenlinks, 'pagelinks', $fname );
+			$result = $this->dbr->query(
+				"SELECT bl_from, bl_to FROM $brokenlinks",
+				$fname );
+			$add = array();
+			while( $row = $this->dbr->fetchObject( $result ) ) {
+				$pagename = $this->conv( $row->bl_to );
+				$title = Title::newFromText( $pagename );
+				if( is_null( $title ) ) {
+					$this->log( "** invalid brokenlink: $row->bl_from -> '$pagename' (converted from '$row->bl_to')" );
+				} else {
+					$add[] = array(
+						'pl_from'      => $row->bl_from,
+						'pl_namespace' => $title->getNamespace(),
+						'pl_title'     => $title->getDBkey() );
+					$this->addChunk( $add );
+				}
+			}
+			$this->lastChunk( $add );
+		} else {
+			$this->log( 'no brokenlinks!' );
+		}
+
+		$this->log( 'Done with links.' );
+	}
+
+	function upgradeUser() {
+		// Apply unique index, if necessary:
+		$duper = new UserDupes( $this->dbw );
+		if( $duper->hasUniqueIndex() ) {
+			$this->log( "Already have unique user_name index." );
+		} else {
+			$this->log( "Clearing user duplicates..." );
+			if( !$duper->clearDupes() ) {
+				$this->log( "WARNING: Duplicate user accounts, may explode!" );
+			}
+		}
+
+		$tabledef = <<<END
+CREATE TABLE $1 (
+  user_id int(5) unsigned NOT NULL auto_increment,
+  user_name varchar(255) binary NOT NULL default '',
+  user_real_name varchar(255) binary NOT NULL default '',
+  user_password tinyblob NOT NULL default '',
+  user_newpassword tinyblob NOT NULL default '',
+  user_email tinytext NOT NULL default '',
+  user_options blob NOT NULL default '',
+  user_touched char(14) binary NOT NULL default '',
+  user_token char(32) binary NOT NULL default '',
+  user_email_authenticated CHAR(14) BINARY,
+  user_email_token CHAR(32) BINARY,
+  user_email_token_expires CHAR(14) BINARY,
+
+  PRIMARY KEY user_id (user_id),
+  UNIQUE INDEX user_name (user_name),
+  INDEX (user_email_token)
+
+) TYPE=InnoDB
+END;
+		$fields = array(
+			'user_id'                  => MW_UPGRADE_COPY,
+			'user_name'                => MW_UPGRADE_ENCODE,
+			'user_real_name'           => MW_UPGRADE_ENCODE,
+			'user_password'            => MW_UPGRADE_COPY,
+			'user_newpassword'         => MW_UPGRADE_COPY,
+			'user_email'               => MW_UPGRADE_ENCODE,
+			'user_options'             => MW_UPGRADE_ENCODE,
+			'user_touched'             => MW_UPGRADE_CALLBACK,
+			'user_token'               => MW_UPGRADE_COPY,
+			'user_email_authenticated' => MW_UPGRADE_CALLBACK,
+			'user_email_token'         => MW_UPGRADE_NULL,
+			'user_email_token_expires' => MW_UPGRADE_NULL );
+		$this->copyTable( 'user', $tabledef, $fields,
+			array( &$this, 'userCallback' ) );
+	}
+
+	function userCallback( $row, $copy ) {
+		$now = $this->dbw->timestamp();
+		$copy['user_touched'] = $now;
+		$copy['user_email_authenticated'] = $this->emailAuth ? $now : null;
+		return $copy;
+	}
+
+	function upgradeImage() {
+		$tabledef = <<<END
+CREATE TABLE $1 (
+  img_name varchar(255) binary NOT NULL default '',
+  img_size int(8) unsigned NOT NULL default '0',
+  img_width int(5)  NOT NULL default '0',
+  img_height int(5)  NOT NULL default '0',
+  img_metadata mediumblob NOT NULL,
+  img_bits int(3)  NOT NULL default '0',
+  img_media_type ENUM("UNKNOWN", "BITMAP", "DRAWING", "AUDIO", "VIDEO", "MULTIMEDIA", "OFFICE", "TEXT", "EXECUTABLE", "ARCHIVE") default NULL,
+  img_major_mime ENUM("unknown", "application", "audio", "image", "text", "video", "message", "model", "multipart") NOT NULL default "unknown",
+  img_minor_mime varchar(32) NOT NULL default "unknown",
+  img_description tinyblob NOT NULL default '',
+  img_user int(5) unsigned NOT NULL default '0',
+  img_user_text varchar(255) binary NOT NULL default '',
+  img_timestamp char(14) binary NOT NULL default '',
+
+  PRIMARY KEY img_name (img_name),
+  INDEX img_size (img_size),
+  INDEX img_timestamp (img_timestamp)
+) TYPE=InnoDB
+END;
+		$fields = array(
+			'img_name'        => MW_UPGRADE_ENCODE,
+			'img_size'        => MW_UPGRADE_COPY,
+			'img_width'       => MW_UPGRADE_CALLBACK,
+			'img_height'      => MW_UPGRADE_CALLBACK,
+			'img_metadata'    => MW_UPGRADE_CALLBACK,
+			'img_bits'        => MW_UPGRADE_CALLBACK,
+			'img_media_type'  => MW_UPGRADE_CALLBACK,
+			'img_major_mime'  => MW_UPGRADE_CALLBACK,
+			'img_minor_mime'  => MW_UPGRADE_CALLBACK,
+			'img_description' => MW_UPGRADE_ENCODE,
+			'img_user'        => MW_UPGRADE_COPY,
+			'img_user_text'   => MW_UPGRADE_ENCODE,
+			'img_timestamp'   => MW_UPGRADE_COPY );
+		$this->copyTable( 'image', $tabledef, $fields,
+			array( &$this, 'imageCallback' ) );
+	}
+
+	function imageCallback( $row, $copy ) {
+		global $options;
+		if( !isset( $options['noimage'] ) ) {
+			// Fill in the new image info fields
+			$info = $this->imageInfo( $row->img_name );
+
+			$copy['img_width'     ] = $info['width'];
+			$copy['img_height'    ] = $info['height'];
+			$copy['img_metadata'  ] = ""; // loaded on-demand
+			$copy['img_bits'      ] = $info['bits'];
+			$copy['img_media_type'] = $info['media'];
+			$copy['img_major_mime'] = $info['major'];
+			$copy['img_minor_mime'] = $info['minor'];
+		}
+
+		// If doing UTF8 conversion the file must be renamed
+		$this->renameFile( $row->img_name, 'wfImageDir' );
+
+		return $copy;
+	}
+
+	function imageInfo( $name, $subdirCallback='wfImageDir', $basename = null ) {
+		if( is_null( $basename ) ) $basename = $name;
+		$dir = call_user_func( $subdirCallback, $basename );
+		$filename = $dir . '/' . $name;
+		$info = array(
+			'width'  => 0,
+			'height' => 0,
+			'bits'   => 0,
+			'media'  => '',
+			'major'  => '',
+			'minor'  => '' );
+
+		$magic =& wfGetMimeMagic();
+		$mime = $magic->guessMimeType( $filename, true );
+		list( $info['major'], $info['minor'] ) = explode( '/', $mime );
+
+		$info['media'] = $magic->getMediaType( $filename, $mime );
+
+		# Height and width
+		$gis = false;
+		if( $mime == 'image/svg' ) {
+			$gis = wfGetSVGsize( $filename );
+		} elseif( $magic->isPHPImageType( $mime ) ) {
+			$gis = getimagesize( $filename );
+		} else {
+			$this->log( "Surprising mime type: $mime" );
+		}
+		if( $gis ) {
+			$info['width' ] = $gis[0];
+			$info['height'] = $gis[1];
+		}
+		if( isset( $gis['bits'] ) ) {
+			$info['bits'] = $gis['bits'];
+		}
+
+		return $info;
+	}
+
+
+	/**
+	 * Truncate a table.
+	 * @param string $table The table name to be truncated
+	 */
+	function clearTable( $table ) {
+		print "Clearing $table...\n";
+		$tableName = $this->db->tableName( $table );
+		$this->db->query( "TRUNCATE $tableName" );
+	}
+
+	/**
+	 * Rename a given image or archived image file to the converted filename,
+	 * leaving a symlink for URL compatibility.
+	 *
+	 * @param string $oldname pre-conversion filename
+	 * @param string $basename pre-conversion base filename for dir hashing, if an archive
+	 * @access private
+	 */
+	function renameFile( $oldname, $subdirCallback='wfImageDir', $basename=null ) {
+		$newname = $this->conv( $oldname );
+		if( $newname == $oldname ) {
+			// No need to rename; another field triggered this row.
+			return false;
+		}
+
+		if( is_null( $basename ) ) $basename = $oldname;
+		$ubasename = $this->conv( $basename );
+		$oldpath = call_user_func( $subdirCallback, $basename ) . '/' . $oldname;
+		$newpath = call_user_func( $subdirCallback, $ubasename ) . '/' . $newname;
+
+		$this->log( "$oldpath -> $newpath" );
+		if( rename( $oldpath, $newpath ) ) {
+			$relpath = wfRelativePath( $newpath, dirname( $oldpath ) );
+			if( !symlink( $relpath, $oldpath ) ) {
+				$this->log( "... symlink failed!" );
+			}
+			return $newname;
+		} else {
+			$this->log( "... rename failed!" );
+			return false;
+		}
+	}
+
+	function upgradeOldImage() {
+		$tabledef = <<<END
+CREATE TABLE $1 (
+  -- Base filename: key to image.img_name
+  oi_name varchar(255) binary NOT NULL default '',
+
+  -- Filename of the archived file.
+  -- This is generally a timestamp and '!' prepended to the base name.
+  oi_archive_name varchar(255) binary NOT NULL default '',
+
+  -- Other fields as in image...
+  oi_size int(8) unsigned NOT NULL default 0,
+  oi_width int(5) NOT NULL default 0,
+  oi_height int(5) NOT NULL default 0,
+  oi_bits int(3) NOT NULL default 0,
+  oi_description tinyblob NOT NULL default '',
+  oi_user int(5) unsigned NOT NULL default '0',
+  oi_user_text varchar(255) binary NOT NULL default '',
+  oi_timestamp char(14) binary NOT NULL default '',
+
+  INDEX oi_name (oi_name(10))
+
+) TYPE=InnoDB;
+END;
+		$fields = array(
+			'oi_name'         => MW_UPGRADE_ENCODE,
+			'oi_archive_name' => MW_UPGRADE_ENCODE,
+			'oi_size'         => MW_UPGRADE_COPY,
+			'oi_width'        => MW_UPGRADE_CALLBACK,
+			'oi_height'       => MW_UPGRADE_CALLBACK,
+			'oi_bits'         => MW_UPGRADE_CALLBACK,
+			'oi_description'  => MW_UPGRADE_ENCODE,
+			'oi_user'         => MW_UPGRADE_COPY,
+			'oi_user_text'    => MW_UPGRADE_ENCODE,
+			'oi_timestamp'    => MW_UPGRADE_COPY );
+		$this->copyTable( 'oldimage', $tabledef, $fields,
+			array( &$this, 'oldimageCallback' ) );
+	}
+
+	function oldimageCallback( $row, $copy ) {
+		global $options;
+		if( !isset( $options['noimage'] ) ) {
+			// Fill in the new image info fields
+			$info = $this->imageInfo( $row->oi_archive_name, 'wfImageArchiveDir', $row->oi_name );
+			$copy['oi_width' ] = $info['width' ];
+			$copy['oi_height'] = $info['height'];
+			$copy['oi_bits'  ] = $info['bits'  ];
+		}
+
+		// If doing UTF8 conversion the file must be renamed
+		$this->renameFile( $row->oi_archive_name, 'wfImageArchiveDir', $row->oi_name );
+
+		return $copy;
+	}
+
+
+	function upgradeWatchlist() {
+		$fname = 'FiveUpgrade::upgradeWatchlist';
+		$chunksize = 100;
+
+		list ($watchlist, $watchlist_temp) = $this->dbw->tableNamesN( 'watchlist', 'watchlist_temp' );
+
+		$this->log( 'Migrating watchlist table to watchlist_temp...' );
+		$this->dbw->query(
+"CREATE TABLE $watchlist_temp (
+  -- Key to user_id
+  wl_user int(5) unsigned NOT NULL,
+
+  -- Key to page_namespace/page_title
+  -- Note that users may watch patches which do not exist yet,
+  -- or existed in the past but have been deleted.
+  wl_namespace int NOT NULL default '0',
+  wl_title varchar(255) binary NOT NULL default '',
+
+  -- Timestamp when user was last sent a notification e-mail;
+  -- cleared when the user visits the page.
+  -- FIXME: add proper null support etc
+  wl_notificationtimestamp varchar(14) binary NOT NULL default '0',
+
+  UNIQUE KEY (wl_user, wl_namespace, wl_title),
+  KEY namespace_title (wl_namespace,wl_title)
+
+) TYPE=InnoDB;", $fname );
+
+		// Fix encoding for Latin-1 upgrades, add some fields,
+		// and double article to article+talk pairs
+		$numwatched = $this->dbw->selectField( 'watchlist', 'count(*)', '', $fname );
+
+		$this->setChunkScale( $chunksize, $numwatched * 2, 'watchlist_temp', $fname );
+		$result = $this->dbr->select( 'watchlist',
+			array(
+				'wl_user',
+				'wl_namespace',
+				'wl_title' ),
+			'',
+			$fname );
+
+		$add = array();
+		while( $row = $this->dbr->fetchObject( $result ) ) {
+			$add[] = array(
+				'wl_user'      =>                        $row->wl_user,
+				'wl_namespace' => Namespace::getSubject( $row->wl_namespace ),
+				'wl_title'     =>           $this->conv( $row->wl_title ),
+				'wl_notificationtimestamp' =>            '0' );
+			$this->addChunk( $add );
+
+			$add[] = array(
+				'wl_user'      =>                        $row->wl_user,
+				'wl_namespace' =>    Namespace::getTalk( $row->wl_namespace ),
+				'wl_title'     =>           $this->conv( $row->wl_title ),
+				'wl_notificationtimestamp' =>            '0' );
+			$this->addChunk( $add );
+		}
+		$this->lastChunk( $add );
+		$this->dbr->freeResult( $result );
+
+		$this->log( 'Done converting watchlist.' );
+		$this->cleanupSwaps[] = 'watchlist';
+	}
+
+	function upgradeLogging() {
+		$tabledef = <<<END
+CREATE TABLE $1 (
+  -- Symbolic keys for the general log type and the action type
+  -- within the log. The output format will be controlled by the
+  -- action field, but only the type controls categorization.
+  log_type char(10) NOT NULL default '',
+  log_action char(10) NOT NULL default '',
+
+  -- Timestamp. Duh.
+  log_timestamp char(14) NOT NULL default '19700101000000',
+
+  -- The user who performed this action; key to user_id
+  log_user int unsigned NOT NULL default 0,
+
+  -- Key to the page affected. Where a user is the target,
+  -- this will point to the user page.
+  log_namespace int NOT NULL default 0,
+  log_title varchar(255) binary NOT NULL default '',
+
+  -- Freeform text. Interpreted as edit history comments.
+  log_comment varchar(255) NOT NULL default '',
+
+  -- LF separated list of miscellaneous parameters
+  log_params blob NOT NULL default '',
+
+  KEY type_time (log_type, log_timestamp),
+  KEY user_time (log_user, log_timestamp),
+  KEY page_time (log_namespace, log_title, log_timestamp)
+
+) TYPE=InnoDB
+END;
+		$fields = array(
+			'log_type'      => MW_UPGRADE_COPY,
+			'log_action'    => MW_UPGRADE_COPY,
+			'log_timestamp' => MW_UPGRADE_COPY,
+			'log_user'      => MW_UPGRADE_COPY,
+			'log_namespace' => MW_UPGRADE_COPY,
+			'log_title'     => MW_UPGRADE_ENCODE,
+			'log_comment'   => MW_UPGRADE_ENCODE,
+			'log_params'    => MW_UPGRADE_ENCODE );
+		$this->copyTable( 'logging', $tabledef, $fields );
+	}
+
+	function upgradeArchive() {
+		$tabledef = <<<END
+CREATE TABLE $1 (
+  ar_namespace int NOT NULL default '0',
+  ar_title varchar(255) binary NOT NULL default '',
+  ar_text mediumblob NOT NULL default '',
+
+  ar_comment tinyblob NOT NULL default '',
+  ar_user int(5) unsigned NOT NULL default '0',
+  ar_user_text varchar(255) binary NOT NULL,
+  ar_timestamp char(14) binary NOT NULL default '',
+  ar_minor_edit tinyint(1) NOT NULL default '0',
+
+  ar_flags tinyblob NOT NULL default '',
+
+  ar_rev_id int(8) unsigned,
+  ar_text_id int(8) unsigned,
+
+  KEY name_title_timestamp (ar_namespace,ar_title,ar_timestamp)
+
+) TYPE=InnoDB
+END;
+		$fields = array(
+			'ar_namespace'  => MW_UPGRADE_COPY,
+			'ar_title'      => MW_UPGRADE_ENCODE,
+			'ar_text'       => MW_UPGRADE_COPY,
+			'ar_comment'    => MW_UPGRADE_ENCODE,
+			'ar_user'       => MW_UPGRADE_COPY,
+			'ar_user_text'  => MW_UPGRADE_ENCODE,
+			'ar_timestamp'  => MW_UPGRADE_COPY,
+			'ar_minor_edit' => MW_UPGRADE_COPY,
+			'ar_flags'      => MW_UPGRADE_COPY,
+			'ar_rev_id'     => MW_UPGRADE_NULL,
+			'ar_text_id'    => MW_UPGRADE_NULL );
+		$this->copyTable( 'archive', $tabledef, $fields );
+	}
+
+	function upgradeImagelinks() {
+		global $wgUseLatin1;
+		if( $wgUseLatin1 ) {
+			$tabledef = <<<END
+CREATE TABLE $1 (
+  -- Key to page_id of the page containing the image / media link.
+  il_from int(8) unsigned NOT NULL default '0',
+
+  -- Filename of target image.
+  -- This is also the page_title of the file's description page;
+  -- all such pages are in namespace 6 (NS_IMAGE).
+  il_to varchar(255) binary NOT NULL default '',
+
+  UNIQUE KEY il_from(il_from,il_to),
+  KEY (il_to)
+
+) TYPE=InnoDB
+END;
+			$fields = array(
+				'il_from' => MW_UPGRADE_COPY,
+				'il_to'   => MW_UPGRADE_ENCODE );
+			$this->copyTable( 'imagelinks', $tabledef, $fields );
+		}
+	}
+
+	function upgradeCategorylinks() {
+		global $wgUseLatin1;
+		if( $wgUseLatin1 ) {
+			$tabledef = <<<END
+CREATE TABLE $1 (
+  cl_from int(8) unsigned NOT NULL default '0',
+  cl_to varchar(255) binary NOT NULL default '',
+  cl_sortkey varchar(86) binary NOT NULL default '',
+  cl_timestamp timestamp NOT NULL,
+
+  UNIQUE KEY cl_from(cl_from,cl_to),
+  KEY cl_sortkey(cl_to,cl_sortkey),
+  KEY cl_timestamp(cl_to,cl_timestamp)
+) TYPE=InnoDB
+END;
+			$fields = array(
+				'cl_from'      => MW_UPGRADE_COPY,
+				'cl_to'        => MW_UPGRADE_ENCODE,
+				'cl_sortkey'   => MW_UPGRADE_ENCODE,
+				'cl_timestamp' => MW_UPGRADE_COPY );
+			$this->copyTable( 'categorylinks', $tabledef, $fields );
+		}
+	}
+
+	function upgradeIpblocks() {
+		global $wgUseLatin1;
+		if( $wgUseLatin1 ) {
+			$tabledef = <<<END
+CREATE TABLE $1 (
+  ipb_id int(8) NOT NULL auto_increment,
+  ipb_address varchar(40) binary NOT NULL default '',
+  ipb_user int(8) unsigned NOT NULL default '0',
+  ipb_by int(8) unsigned NOT NULL default '0',
+  ipb_reason tinyblob NOT NULL default '',
+  ipb_timestamp char(14) binary NOT NULL default '',
+  ipb_auto tinyint(1) NOT NULL default '0',
+  ipb_expiry char(14) binary NOT NULL default '',
+
+  PRIMARY KEY ipb_id (ipb_id),
+  INDEX ipb_address (ipb_address),
+  INDEX ipb_user (ipb_user)
+
+) TYPE=InnoDB
+END;
+			$fields = array(
+				'ipb_id'        => MW_UPGRADE_COPY,
+				'ipb_address'   => MW_UPGRADE_COPY,
+				'ipb_user'      => MW_UPGRADE_COPY,
+				'ipb_by'        => MW_UPGRADE_COPY,
+				'ipb_reason'    => MW_UPGRADE_ENCODE,
+				'ipb_timestamp' => MW_UPGRADE_COPY,
+				'ipb_auto'      => MW_UPGRADE_COPY,
+				'ipb_expiry'    => MW_UPGRADE_COPY );
+			$this->copyTable( 'ipblocks', $tabledef, $fields );
+		}
+	}
+
+	function upgradeRecentchanges() {
+		// There's a format change in the namespace field
+		$tabledef = <<<END
+CREATE TABLE $1 (
+  rc_id int(8) NOT NULL auto_increment,
+  rc_timestamp varchar(14) binary NOT NULL default '',
+  rc_cur_time varchar(14) binary NOT NULL default '',
+
+  rc_user int(10) unsigned NOT NULL default '0',
+  rc_user_text varchar(255) binary NOT NULL default '',
+
+  rc_namespace int NOT NULL default '0',
+  rc_title varchar(255) binary NOT NULL default '',
+
+  rc_comment varchar(255) binary NOT NULL default '',
+  rc_minor tinyint(3) unsigned NOT NULL default '0',
+
+  rc_bot tinyint(3) unsigned NOT NULL default '0',
+  rc_new tinyint(3) unsigned NOT NULL default '0',
+
+  rc_cur_id int(10) unsigned NOT NULL default '0',
+  rc_this_oldid int(10) unsigned NOT NULL default '0',
+  rc_last_oldid int(10) unsigned NOT NULL default '0',
+
+  rc_type tinyint(3) unsigned NOT NULL default '0',
+  rc_moved_to_ns tinyint(3) unsigned NOT NULL default '0',
+  rc_moved_to_title varchar(255) binary NOT NULL default '',
+
+  rc_patrolled tinyint(3) unsigned NOT NULL default '0',
+
+  rc_ip char(15) NOT NULL default '',
+
+  PRIMARY KEY rc_id (rc_id),
+  INDEX rc_timestamp (rc_timestamp),
+  INDEX rc_namespace_title (rc_namespace, rc_title),
+  INDEX rc_cur_id (rc_cur_id),
+  INDEX new_name_timestamp(rc_new,rc_namespace,rc_timestamp),
+  INDEX rc_ip (rc_ip)
+
+) TYPE=InnoDB
+END;
+		$fields = array(
+			'rc_id'             => MW_UPGRADE_COPY,
+			'rc_timestamp'      => MW_UPGRADE_COPY,
+			'rc_cur_time'       => MW_UPGRADE_COPY,
+			'rc_user'           => MW_UPGRADE_COPY,
+			'rc_user_text'      => MW_UPGRADE_ENCODE,
+			'rc_namespace'      => MW_UPGRADE_COPY,
+			'rc_title'          => MW_UPGRADE_ENCODE,
+			'rc_comment'        => MW_UPGRADE_ENCODE,
+			'rc_minor'          => MW_UPGRADE_COPY,
+			'rc_bot'            => MW_UPGRADE_COPY,
+			'rc_new'            => MW_UPGRADE_COPY,
+			'rc_cur_id'         => MW_UPGRADE_COPY,
+			'rc_this_oldid'     => MW_UPGRADE_COPY,
+			'rc_last_oldid'     => MW_UPGRADE_COPY,
+			'rc_type'           => MW_UPGRADE_COPY,
+			'rc_moved_to_ns'    => MW_UPGRADE_COPY,
+			'rc_moved_to_title' => MW_UPGRADE_ENCODE,
+			'rc_patrolled'      => MW_UPGRADE_COPY,
+			'rc_ip'             => MW_UPGRADE_COPY );
+		$this->copyTable( 'recentchanges', $tabledef, $fields );
+	}
+
+	function upgradeQuerycache() {
+		// There's a format change in the namespace field
+		$tabledef = <<<END
+CREATE TABLE $1 (
+  -- A key name, generally the base name of of the special page.
+  qc_type char(32) NOT NULL,
+
+  -- Some sort of stored value. Sizes, counts...
+  qc_value int(5) unsigned NOT NULL default '0',
+
+  -- Target namespace+title
+  qc_namespace int NOT NULL default '0',
+  qc_title char(255) binary NOT NULL default '',
+
+  KEY (qc_type,qc_value)
+
+) TYPE=InnoDB
+END;
+		$fields = array(
+			'qc_type'      => MW_UPGRADE_COPY,
+			'qc_value'     => MW_UPGRADE_COPY,
+			'qc_namespace' => MW_UPGRADE_COPY,
+			'qc_title'     => MW_UPGRADE_ENCODE );
+		$this->copyTable( 'querycache', $tabledef, $fields );
+	}
+
+	/**
+	 * Rename all our temporary tables into final place.
+	 * We've left things in place so a read-only wiki can continue running
+	 * on the old code during all this.
+	 */
+	function upgradeCleanup() {
+		$this->renameTable( 'old', 'text' );
+
+		foreach( $this->cleanupSwaps as $table ) {
+			$this->swap( $table );
+		}
+	}
+
+	function renameTable( $from, $to ) {
+		$this->log( "Renaming $from to $to..." );
+
+		$fromtable = $this->dbw->tableName( $from );
+		$totable   = $this->dbw->tableName( $to );
+		$this->dbw->query( "ALTER TABLE $fromtable RENAME TO $totable" );
+	}
+
+	function swap( $base ) {
+		$this->renameTable( $base, "{$base}_old" );
+		$this->renameTable( "{$base}_temp", $base );
+	}
+
+}
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/Makefile
===================================================================
--- /MediaWiki/branches/1.11/maintenance/Makefile	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/Makefile	(revision 1280)
@@ -0,0 +1,17 @@
+mediawiki_version := $(shell  php -r "include('commandLine.inc'); print SpecialVersion::getVersion();")
+
+help:
+	@echo "Run 'make test' to run the parser tests."
+	@echo "Run 'make doc' to run the phpdoc generation."
+	@echo "Run 'make doxydoc' (unsupported doxygen generation)."
+
+test:
+	php parserTests.php --quiet
+
+doc:
+	php mwdocgen.php -all
+	echo 'Doc generation done. Look at ./docs/html/'
+
+doxydoc:
+	cd .. && /bin/sed -e "s/MW_VERSION_PLACEHOLDER/$(mediawiki_version)/" maintenance/mwdoxygen.cfg | doxygen -
+	echo 'Doc generation done. Look at ./docs/html/'
Index: /MediaWiki/branches/1.11/maintenance/README
===================================================================
--- /MediaWiki/branches/1.11/maintenance/README	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/README	(revision 1280)
@@ -0,0 +1,85 @@
+== MediaWiki Maintenance ==
+
+The .sql scripts in this directory are not intended to be run standalone,
+although this is appropriate in some cases, e.g. manual creation of blank tables
+prior to an import.
+
+Most of the PHP scripts need to be run from the command line. Prior to doing so,
+ensure that the LocalSettings.php file in the directory above points to the
+proper installation.
+
+Certain scripts will require elevated access to the database. In order to
+provide this, first create a MySQL user with "all" permissions on the wiki
+database, and then place their username and password in an AdminSettings.php
+file in the directory above. See AdminSettings.sample for specifics on this.
+
+=== Brief explanation of files ===
+
+A lot of the files in this directory are PHP scripts used to perform various
+maintenance tasks on the wiki database, e.g. rebuilding link tables, updating
+the search indices, etc. The files in the "archives" directory are used to
+upgrade the database schema when updating the software. Some schema definitions
+for alternative (as yet unsupported) database management systems are stored
+here too.
+
+The "storage" directory contains scripts and resources useful for working with
+external storage clusters, and are not likely to be particularly useful to the
+vast majority of installations. This directory does contain the compressOld
+scripts, however, which can be useful for compacting old data.
+
+=== Maintenance scripts ===
+
+As noted above, these should be run from the command line. Not all scripts are
+listed, as some are Wikimedia-specific, and some are not applicable to most
+installations.
+
+	changePassword.php
+	Reset the password of a specified user
+
+	cleanupSpam.php
+	Mass-revert insertion of linkspam
+
+	deleteOldRevisions.php
+	Erase old revisions of pages from the database
+
+	dumpBackup.php
+	Backup dump script
+
+	dumpHTML.php
+	Produce an HTML dump of a wiki
+
+	importDump.php
+	XML dump importer
+	
+	importImages.php
+	Imports images into the wiki
+	
+	importTextFile.php
+	Imports the contents of a text file into a wiki page
+
+	nukePage.php
+	Wipe a page and all revisions from the database
+
+	reassignEdits.php
+	Reassign edits from one user to another
+
+	rebuildImages.php
+	Update image metadata records
+
+	rebuildMessages.php
+	Update the MediaWiki namespace after changing site language
+
+	rebuildtextindex.php
+	Rebuild the fulltext search indices
+
+	refreshLinks.php
+	Rebuild the link tables
+
+	removeUnusedAccounts.php
+	Remove user accounts which have made no edits
+
+	runJobs.php
+	Immediately complete all jobs in the job queue
+
+	update.php
+	Check and upgrade the database schema to the current version
Index: /MediaWiki/branches/1.11/maintenance/addwiki.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/addwiki.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/addwiki.php	(revision 1280)
@@ -0,0 +1,236 @@
+<?php
+
+$wgNoDBParam = true;
+
+require_once( "commandLine.inc" );
+require_once( "rebuildInterwiki.inc" );
+require_once( "languages/Names.php" );
+if ( count( $args ) != 3 ) {
+	wfDie( "Usage: php addwiki.php <language> <site> <dbname>\n" );
+}
+
+addWiki( $args[0], $args[1], $args[2] );
+
+# -----------------------------------------------------------------
+
+function addWiki( $lang, $site, $dbName )
+{
+	global $IP, $wgLanguageNames, $wgDefaultExternalStore;
+
+	$name = $wgLanguageNames[$lang];
+
+	$dbw = wfGetDB( DB_WRITE );
+	$common = "/home/wikipedia/common";
+	$maintenance = "$IP/maintenance";
+
+	print "Creating database $dbName for $lang.$site\n";
+	
+	# Set up the database
+	$dbw->query( "SET table_type=Innodb" );
+	$dbw->query( "CREATE DATABASE $dbName" );
+	$dbw->selectDB( $dbName );
+
+	print "Initialising tables\n";
+	dbsource( "$maintenance/tables.sql", $dbw );
+	dbsource( "$IP/extensions/OAI/update_table.sql", $dbw );
+	dbsource( "$IP/extensions/AntiSpoof/mysql/patch-antispoof.sql", $dbw );
+	dbsource( "$IP/extensions/CheckUser/cu_changes.sql", $dbw );
+	$dbw->query( "INSERT INTO site_stats(ss_row_id) VALUES (1)" );
+
+	# Initialise external storage
+	if ( is_array( $wgDefaultExternalStore ) ) {
+		$stores = $wgDefaultExternalStore;
+	} elseif ( $stores ) {
+		$stores = array( $wgDefaultExternalStore );
+	} else {
+		$stores = array();
+	}
+	if ( count( $stores ) ) {
+		require_once( 'ExternalStoreDB.php' );
+		print "Initialising external storage $store...\n";
+		global $wgDBuser, $wgDBpassword, $wgExternalServers;
+		foreach ( $stores as $storeURL ) {
+			$m = array();
+			if ( !preg_match( '!^DB://(.*)$!', $storeURL, $m ) ) {
+				continue;
+			}
+			
+			$cluster = $m[1];
+			
+			# Hack
+			$wgExternalServers[$cluster][0]['user'] = $wgDBuser;
+			$wgExternalServers[$cluster][0]['password'] = $wgDBpassword;
+			
+			$store = new ExternalStoreDB;
+			$extdb =& $store->getMaster( $cluster );
+			$extdb->query( "SET table_type=InnoDB" );
+			$extdb->query( "CREATE DATABASE $dbName" );
+			$extdb->selectDB( $dbName );
+			dbsource( "$maintenance/storage/blobs.sql", $extdb );
+			$extdb->immediateCommit();
+		}
+	}
+
+	$wgTitle = Title::newMainPage();
+	$wgArticle = new Article( $wgTitle );
+	$ucsite = ucfirst( $site );
+
+	$wgArticle->insertNewArticle( "
+==This subdomain is reserved for the creation of a $ucsite in '''[[:en:{$name}|{$name}]]''' language==
+
+If you can write in this language and want to collaborate in the creation of this encyclopedia then '''you''' can make it.
+
+Go ahead. Translate this page and start working on your encyclopedia.
+
+For help, see '''[[m:Help:How to start a new Wikipedia|how to start a new Wikipedia]]'''.
+
+==Sister projects==
+[http://meta.wikipedia.org Meta-Wikipedia] | [http://www.wiktionary.org Wikitonary] | [http://www.wikibooks.org Wikibooks] | [http://www.wikinews.org Wikinews] | [http://www.wikiquote.org Wikiquote] | [http://www.wikisource.org Wikisource]
+
+See the [http://www.wikipedia.org Wikipedia portal] for other language Wikipedias.
+
+[[aa:]]
+[[af:]]
+[[als:]]
+[[ar:]]
+[[de:]]
+[[en:]]
+[[as:]]
+[[ast:]]
+[[ay:]]
+[[az:]]
+[[be:]]
+[[bg:]]
+[[bn:]]
+[[bo:]]
+[[bs:]]
+[[cs:]]
+[[co:]]
+[[cs:]]
+[[cy:]]
+[[da:]]
+[[el:]]
+[[eo:]]
+[[es:]]
+[[et:]]
+[[eu:]]
+[[fa:]]
+[[fi:]]
+[[fr:]]
+[[fy:]]
+[[ga:]]
+[[gl:]]
+[[gn:]]
+[[gu:]]
+[[he:]]
+[[hi:]]
+[[hr:]]
+[[hy:]]
+[[ia:]]
+[[id:]]
+[[is:]]
+[[it:]]
+[[ja:]]
+[[ka:]]
+[[kk:]]
+[[km:]]
+[[kn:]]
+[[ko:]]
+[[ks:]]
+[[ku:]]
+[[ky:]]
+[[la:]]
+[[ln:]]
+[[lo:]]
+[[lt:]]
+[[lv:]]
+[[hu:]]
+[[mi:]]
+[[mk:]]
+[[ml:]]
+[[mn:]]
+[[mr:]]
+[[ms:]]
+[[mt:]]
+[[my:]]
+[[na:]]
+[[nah:]]
+[[nds:]]
+[[ne:]]
+[[nl:]]
+[[no:]]
+[[oc:]]
+[[om:]]
+[[pa:]]
+[[pl:]]
+[[ps:]]
+[[pt:]]
+[[qu:]]
+[[ro:]]
+[[ru:]]
+[[sa:]]
+[[si:]]
+[[sk:]]
+[[sl:]]
+[[sq:]]
+[[sr:]]
+[[sv:]]
+[[sw:]]
+[[ta:]]
+[[te:]]
+[[tg:]]
+[[th:]]
+[[tk:]]
+[[tl:]]
+[[tr:]]
+[[tt:]]
+[[ug:]]
+[[uk:]]
+[[ur:]]
+[[uz:]]
+[[vi:]]
+[[vo:]]
+[[xh:]]
+[[yo:]]
+[[za:]]
+[[zh:]]
+[[zu:]]
+", '', false, false );
+
+	print "Adding to dblists\n";
+
+	# Add to dblist
+	$file = fopen( "$common/all.dblist", "a" );
+	fwrite( $file, "$dbName\n" );
+	fclose( $file );
+
+	# Update the sublists
+	system("cd $common && ./refresh-dblist");
+
+	print "Constructing interwiki SQL\n";
+	# Rebuild interwiki tables
+	$sql = getRebuildInterwikiSQL();
+	$tempname = tempnam( '/tmp', 'addwiki' );
+	$file = fopen( $tempname, 'w' );
+	if ( !$file ) {
+		wfDie( "Error, unable to open temporary file $tempname\n" );
+	}
+	fwrite( $file, $sql );
+	fclose( $file );
+	print "Sourcing interwiki SQL\n";
+	dbsource( $tempname, $dbw );
+	#unlink( $tempname );
+	
+	# Create the upload dir
+	global $wgUploadDirectory;
+	if( file_exists( $wgUploadDirectory ) ) {
+		echo "$wgUploadDirectory already exists.\n";
+	} else {
+		echo "Creating $wgUploadDirectory...\n";
+		mkdir( $wgUploadDirectory, 0777 );
+		chmod( $wgUploadDirectory, 0777 );
+	}
+
+	print "Script ended. You now want to run sync-common-all to publish *dblist files (check them for duplicates first)\n";
+}
+?>
Index: /MediaWiki/branches/1.11/maintenance/apache-ampersand.diff
===================================================================
--- /MediaWiki/branches/1.11/maintenance/apache-ampersand.diff	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/apache-ampersand.diff	(revision 1280)
@@ -0,0 +1,53 @@
+--- orig/apache_1.3.26/src/modules/standard/mod_rewrite.h	Wed Mar 13 13:05:34 2002
++++ apache_1.3.26/src/modules/standard/mod_rewrite.h	Tue Oct 15 14:07:21 2002
+@@ -447,6 +447,7 @@
+ static char *rewrite_mapfunc_toupper(request_rec *r, char *key);
+ static char *rewrite_mapfunc_tolower(request_rec *r, char *key);
+ static char *rewrite_mapfunc_escape(request_rec *r, char *key);
++static char *rewrite_mapfunc_ampescape(request_rec *r, char *key);
+ static char *rewrite_mapfunc_unescape(request_rec *r, char *key);
+ static char *select_random_value_part(request_rec *r, char *value);
+ static void  rewrite_rand_init(void);
+--- orig/apache_1.3.26/src/modules/standard/mod_rewrite.c	Wed May 29 10:39:23 2002
++++ apache_1.3.26/src/modules/standard/mod_rewrite.c	Tue Oct 15 14:07:49 2002
+@@ -502,6 +502,9 @@
+         else if (strcmp(a2+4, "unescape") == 0) {
+             new->func = rewrite_mapfunc_unescape;
+         }
++        else if (strcmp(a2+4, "ampescape") == 0) {
++            new->func = rewrite_mapfunc_ampescape;
++        }
+         else if (sconf->state == ENGINE_ENABLED) {
+             return ap_pstrcat(cmd->pool, "RewriteMap: internal map not found:",
+                               a2+4, NULL);
+@@ -2982,6 +2985,30 @@
+ 
+     value = ap_escape_uri(r->pool, key);
+     return value;
++}
++
++static char *rewrite_mapfunc_ampescape(request_rec *r, char *key)
++{
++    /* We only need to escape the ampersand */
++    char *copy = ap_palloc(r->pool, 3 * strlen(key) + 3);
++    const unsigned char *s = (const unsigned char *)key;
++    unsigned char *d = (unsigned char *)copy;
++    unsigned c;
++
++    while ((c = *s)) {
++	if (c == '&') {
++	    *d++ = '%';
++	    *d++ = '2';
++	    *d++ = '6';
++	}
++	else {
++	    *d++ = c;
++	}
++	++s;
++    }
++    *d = '\0';
++    
++    return copy;
+ }
+ 
+ static char *rewrite_mapfunc_unescape(request_rec *r, char *key)
Index: /MediaWiki/branches/1.11/maintenance/archives/.htaccess
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/.htaccess	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/.htaccess	(revision 1280)
@@ -0,0 +1,1 @@
+Deny from all
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-ar_deleted.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-ar_deleted.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-ar_deleted.sql	(revision 1280)
@@ -0,0 +1,3 @@
+-- Adding ar_deleted field for revisiondelete
+ALTER TABLE /*$wgDBprefix*/archive
+  ADD ar_deleted tinyint unsigned NOT NULL default '0';
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-ar_len.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-ar_len.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-ar_len.sql	(revision 1280)
@@ -0,0 +1,3 @@
+ALTER TABLE /*$wgDBprefix*/archive
+  ADD ar_len INT UNSIGNED;
+
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-archive-rev_id.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-archive-rev_id.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-archive-rev_id.sql	(revision 1280)
@@ -0,0 +1,6 @@
+-- New field in archive table to preserve revision IDs across undeletion.
+-- Added 2005-03-10
+
+ALTER TABLE /*$wgDBprefix*/archive
+  ADD
+    ar_rev_id int unsigned;
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-archive-text_id.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-archive-text_id.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-archive-text_id.sql	(revision 1280)
@@ -0,0 +1,14 @@
+-- New field in archive table to preserve text source IDs across undeletion.
+--
+-- Older entries containing NULL in this field will contain text in the
+-- ar_text and ar_flags fields, and will cause the (re)creation of a new
+-- text record upon undeletion.
+--
+-- Newer ones will reference a text.old_id with this field, and the existing
+-- entries will be used as-is; only a revision record need be created.
+--
+-- Added 2005-05-01
+
+ALTER TABLE /*$wgDBprefix*/archive
+  ADD
+    ar_text_id int unsigned;
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-backlinkindexes.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-backlinkindexes.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-backlinkindexes.sql	(revision 1280)
@@ -0,0 +1,19 @@
+-- 
+-- patch-backlinkindexes.sql
+-- 
+-- Per bug 6440 / http://bugzilla.wikimedia.org/show_bug.cgi?id=6440
+--
+-- Improve performance of the "what links here"-type queries
+-- 
+
+ALTER TABLE /*$wgDBprefix*/pagelinks
+   DROP INDEX pl_namespace,
+   ADD INDEX pl_namespace(pl_namespace, pl_title, pl_from);
+
+ALTER TABLE /*$wgDBprefix*/templatelinks
+   DROP INDEX tl_namespace,
+   ADD INDEX tl_namespace(tl_namespace, tl_title, tl_from);
+   
+ALTER TABLE /*$wgDBprefix*/imagelinks
+   DROP INDEX il_to,
+   ADD INDEX il_to(il_to, il_from);
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-bot.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-bot.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-bot.sql	(revision 1280)
@@ -0,0 +1,11 @@
+-- Add field to recentchanges for easy filtering of bot entries
+-- edits by a user with 'bot' in user.user_rights should be
+-- marked 1 in rc_bot.
+
+-- Change made 2002-12-15 by Brion VIBBER <brion@pobox.com>
+-- this affects code in Article.php, User.php SpecialRecentchanges.php
+-- column also added to buildTables.inc
+
+ALTER TABLE /*$wgDBprefix*/recentchanges
+  ADD COLUMN rc_bot tinyint unsigned NOT NULL default '0'
+  AFTER rc_minor;
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-cache.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-cache.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-cache.sql	(revision 1280)
@@ -0,0 +1,41 @@
+-- patch-cache.sql
+-- 2003-03-22  <brion@pobox.com>
+--
+-- Add 'last touched' fields to cur and user tables.
+-- These are useful for maintaining cache consistency.
+-- (Updates to OutputPage.php and elsewhere.)
+--
+-- cur_touched should be set to the current time whenever:
+--  * the page is updated
+--  * a linked page is created
+--  * a linked page is destroyed
+--
+-- The cur_touched time will then be compared against the
+-- timestamps of cached pages to ensure consistency; if
+-- cur_touched is later, the page must be regenerated.
+
+ALTER TABLE /*$wgDBprefix*/cur
+  ADD COLUMN cur_touched binary(14) NOT NULL default '';
+
+-- Existing pages should be initialized to the current
+-- time so they don't needlessly rerender until they are
+-- changed for the first time:
+
+UPDATE /*$wgDBprefix*/cur
+  SET cur_touched=NOW()+0;
+
+-- user_touched should be set to the current time whenever:
+--  * the user logs in
+--  * the user saves preferences (if no longer default...?)
+--  * the user's newtalk status is altered
+--
+-- The user_touched time should also be checked against the
+-- timestamp reported by a browser requesting revalidation.
+-- If user_touched is later than the reported last modified
+-- time, the page should be rerendered with new options and
+-- sent again.
+
+ALTER TABLE /*$wgDBprefix*/user
+  ADD COLUMN user_touched binary(14) NOT NULL default '';
+UPDATE /*$wgDBprefix*/user
+  SET user_touched=NOW()+0;
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-categorylinks.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-categorylinks.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-categorylinks.sql	(revision 1280)
@@ -0,0 +1,37 @@
+--
+-- Track category inclusions *used inline*
+-- This tracks a single level of category membership
+-- (folksonomic tagging, really).
+--
+CREATE TABLE /*$wgDBprefix*/categorylinks (
+  -- Key to page_id of the page defined as a category member.
+  cl_from int unsigned NOT NULL default '0',
+  
+  -- Name of the category.
+  -- This is also the page_title of the category's description page;
+  -- all such pages are in namespace 14 (NS_CATEGORY).
+  cl_to varchar(255) binary NOT NULL default '',
+
+  -- The title of the linking page, or an optional override
+  -- to determine sort order. Sorting is by binary order, which
+  -- isn't always ideal, but collations seem to be an exciting
+  -- and dangerous new world in MySQL...
+  --
+  -- Truncate so that the cl_sortkey key fits in 1000 bytes 
+  -- (MyISAM 5 with server_character_set=utf8)
+  cl_sortkey varchar(70) binary NOT NULL default '',
+  
+  -- This isn't really used at present. Provided for an optional
+  -- sorting method by approximate addition time.
+  cl_timestamp timestamp NOT NULL,
+  
+  UNIQUE KEY cl_from(cl_from,cl_to),
+  
+  -- This key is trouble. It's incomplete, AND it's too big
+  -- when collation is set to UTF-8. Bleeeacch!
+  KEY cl_sortkey(cl_to,cl_sortkey),
+  
+  -- Not really used?
+  KEY cl_timestamp(cl_to,cl_timestamp)
+
+) /*$wgDBTableOptions*/;
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-drop-user_newtalk.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-drop-user_newtalk.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-drop-user_newtalk.sql	(revision 1280)
@@ -0,0 +1,3 @@
+-- Patch for email authentication T.Gries/M.Arndt 27.11.2004
+-- Table user_newtalk is dropped, as the table watchlist is now also used for storing user_talk-page notifications
+DROP TABLE /*$wgDBprefix*/user_newtalk;
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-drop_img_type.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-drop_img_type.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-drop_img_type.sql	(revision 1280)
@@ -0,0 +1,3 @@
+-- img_type is no longer used, delete it
+
+ALTER TABLE /*$wgDBprefix*/image DROP COLUMN img_type;
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-email-authentication.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-email-authentication.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-email-authentication.sql	(revision 1280)
@@ -0,0 +1,3 @@
+-- Added early in 1.5 alpha development, removed 2005-04-25
+
+ALTER TABLE /*$wgDBprefix*/user DROP COLUMN user_emailauthenticationtimestamp;
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-email-notification.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-email-notification.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-email-notification.sql	(revision 1280)
@@ -0,0 +1,11 @@
+-- Patch for email notification on page changes T.Gries/M.Arndt 11.09.2004
+
+-- A new column 'wl_notificationtimestamp' is added to the table 'watchlist'.
+-- When a page watched by a user X is changed by someone else, an email is sent to the watching user X
+-- if and only if the field 'wl_notificationtimestamp' is '0'. The time/date of sending the mail is then stored in that field.
+-- Further pages changes do not trigger new notification mails as long as user X has not re-visited that page.
+-- The field is reset to '0' when user X re-visits the page or when he or she resets all notification timestamps
+-- ("notification flags") at once by clicking the new button on his/her watchlist page.
+-- T. Gries/M. Arndt  11.09.2004 - December 2004
+
+ALTER TABLE /*$wgDBprefix*/watchlist ADD (wl_notificationtimestamp varbinary(14));
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-externallinks.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-externallinks.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-externallinks.sql	(revision 1280)
@@ -0,0 +1,13 @@
+--
+-- Track links to external URLs
+--
+CREATE TABLE /*$wgDBprefix*/externallinks (
+  el_from int(8) unsigned NOT NULL default '0',
+  el_to blob NOT NULL,
+  el_index blob NOT NULL,
+  
+  KEY (el_from, el_to(40)),
+  KEY (el_to(60), el_from),
+  KEY (el_index(60))
+) /*$wgDBTableOptions*/;
+
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-fa_deleted.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-fa_deleted.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-fa_deleted.sql	(revision 1280)
@@ -0,0 +1,3 @@
+-- Adding fa_deleted field for additional content suppression
+ALTER TABLE /*$wgDBprefix*/filearchive 
+  ADD fa_deleted tinyint unsigned NOT NULL default '0';
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-filearchive.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-filearchive.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-filearchive.sql	(revision 1280)
@@ -0,0 +1,51 @@
+--
+-- Record of deleted file data
+--
+CREATE TABLE /*$wgDBprefix*/filearchive (
+  -- Unique row id
+  fa_id int not null auto_increment,
+  
+  -- Original base filename; key to image.img_name, page.page_title, etc
+  fa_name varchar(255) binary NOT NULL default '',
+  
+  -- Filename of archived file, if an old revision
+  fa_archive_name varchar(255) binary default '',
+  
+  -- Which storage bin (directory tree or object store) the file data
+  -- is stored in. Should be 'deleted' for files that have been deleted;
+  -- any other bin is not yet in use.
+  fa_storage_group varbinary(16),
+  
+  -- SHA-1 of the file contents plus extension, used as a key for storage.
+  -- eg 8f8a562add37052a1848ff7771a2c515db94baa9.jpg
+  --
+  -- If NULL, the file was missing at deletion time or has been purged
+  -- from the archival storage.
+  fa_storage_key varbinary(64) default '',
+  
+  -- Deletion information, if this file is deleted.
+  fa_deleted_user int,
+  fa_deleted_timestamp binary(14) default '',
+  fa_deleted_reason text,
+  
+  -- Duped fields from image
+  fa_size int unsigned default '0',
+  fa_width int  default '0',
+  fa_height int  default '0',
+  fa_metadata mediumblob,
+  fa_bits int  default '0',
+  fa_media_type ENUM("UNKNOWN", "BITMAP", "DRAWING", "AUDIO", "VIDEO", "MULTIMEDIA", "OFFICE", "TEXT", "EXECUTABLE", "ARCHIVE") default NULL,
+  fa_major_mime ENUM("unknown", "application", "audio", "image", "text", "video", "message", "model", "multipart") default "unknown",
+  fa_minor_mime varbinary(32) default "unknown",
+  fa_description tinyblob,
+  fa_user int unsigned default '0',
+  fa_user_text varchar(255) binary default '',
+  fa_timestamp binary(14) default '',
+  
+  PRIMARY KEY (fa_id),
+  INDEX (fa_name, fa_timestamp),             -- pick out by image name
+  INDEX (fa_storage_group, fa_storage_key),  -- pick out dupe files
+  INDEX (fa_deleted_timestamp),              -- sort by deletion time
+  INDEX (fa_deleted_user)                    -- sort by deleter
+
+) /*$wgDBTableOptions*/;
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-hitcounter.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-hitcounter.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-hitcounter.sql	(revision 1280)
@@ -0,0 +1,9 @@
+--
+-- hitcounter table is used to buffer page hits before they are periodically 
+-- counted and added to the cur_counter column in the cur table.
+-- December 2003
+--
+
+CREATE TABLE /*$wgDBprefix*/hitcounter (
+  hc_id INTEGER UNSIGNED NOT NULL
+) TYPE=HEAP MAX_ROWS=25000;
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-image_name_primary.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-image_name_primary.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-image_name_primary.sql	(revision 1280)
@@ -0,0 +1,6 @@
+-- Make the image name index unique
+
+ALTER TABLE /*$wgDBprefix*/image DROP INDEX img_name;
+
+ALTER TABLE /*$wgDBprefix*/image
+  ADD PRIMARY KEY img_name (img_name);
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-image_name_unique.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-image_name_unique.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-image_name_unique.sql	(revision 1280)
@@ -0,0 +1,6 @@
+-- Make the image name index unique
+
+ALTER TABLE /*$wgDBprefix*/image DROP INDEX img_name;
+
+ALTER TABLE /*$wgDBprefix*/image
+  ADD UNIQUE INDEX img_name (img_name);
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-img_exif.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-img_exif.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-img_exif.sql	(revision 1280)
@@ -0,0 +1,3 @@
+-- Extra image exif metadata, added for 1.5 but quickly removed.
+
+ALTER TABLE /*$wgDBprefix*/image DROP img_exif;
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-img_media_type.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-img_media_type.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-img_media_type.sql	(revision 1280)
@@ -0,0 +1,17 @@
+-- media type columns, added for 1.5
+-- this alters the scheme for 1.5, img_type is no longer used.
+
+ALTER TABLE /*$wgDBprefix*/image ADD (
+  -- Media type as defined by the MEDIATYPE_xxx constants
+  img_media_type ENUM("UNKNOWN", "BITMAP", "DRAWING", "AUDIO", "VIDEO", "MULTIMEDIA", "OFFICE", "TEXT", "EXECUTABLE", "ARCHIVE") default NULL,
+  
+  -- major part of a MIME media type as defined by IANA
+  -- see http://www.iana.org/assignments/media-types/
+  img_major_mime ENUM("unknown", "application", "audio", "image", "text", "video", "message", "model", "multipart") NOT NULL default "unknown",
+  
+  -- minor part of a MIME media type as defined by IANA
+  -- the minor parts are not required to adher to any standard
+  -- but should be consistent throughout the database
+  -- see http://www.iana.org/assignments/media-types/
+  img_minor_mime varbinary(32) NOT NULL default "unknown"
+);
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-img_metadata.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-img_metadata.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-img_metadata.sql	(revision 1280)
@@ -0,0 +1,6 @@
+-- Moving img_exif to img_metadata, so the name won't be so confusing when we
+-- Use it for Ogg metadata or something like that.
+
+ALTER TABLE /*$wgDBprefix*/image ADD (
+  img_metadata mediumblob NOT NULL
+);
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-img_width.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-img_width.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-img_width.sql	(revision 1280)
@@ -0,0 +1,18 @@
+-- Extra image metadata, added for 1.5
+
+-- NOTE: as by patch-img_media_type.sql, the img_type
+-- column is no longer used and has therefore be removed from this patch
+
+ALTER TABLE /*$wgDBprefix*/image ADD (
+  img_width int NOT NULL default 0,
+  img_height int NOT NULL default 0,
+  img_bits int NOT NULL default 0
+);
+
+ALTER TABLE /*$wgDBprefix*/oldimage ADD (
+  oi_width int NOT NULL default 0,
+  oi_height int NOT NULL default 0,
+  oi_bits int NOT NULL default 0
+);
+
+
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-indexes.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-indexes.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-indexes.sql	(revision 1280)
@@ -0,0 +1,24 @@
+-- 
+-- patch-indexes.sql
+-- 
+-- Fix up table indexes; new to stable release in November 2003
+-- 
+
+ALTER TABLE IF EXISTS/*$wgDBprefix*/links
+   DROP INDEX l_from,
+   ADD INDEX l_from (l_from);
+
+ALTER TABLE /*$wgDBprefix*/brokenlinks
+   DROP INDEX bl_to,
+   ADD INDEX bl_to (bL_to);
+
+ALTER TABLE /*$wgDBprefix*/recentchanges
+   ADD INDEX rc_timestamp (rc_timestamp),
+   ADD INDEX rc_namespace_title (rc_namespace, rc_title),
+   ADD INDEX rc_cur_id (rc_cur_id);
+
+ALTER TABLE /*$wgDBprefix*/archive
+   ADD KEY name_title_timestamp (ar_namespace,ar_title,ar_timestamp);
+
+ALTER TABLE /*$wgDBprefix*/watchlist
+   ADD KEY namespace_title (wl_namespace,wl_title);
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-interwiki-trans.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-interwiki-trans.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-interwiki-trans.sql	(revision 1280)
@@ -0,0 +1,2 @@
+ALTER TABLE /*$wgDBprefix*/interwiki
+	ADD COLUMN iw_trans TINYINT NOT NULL DEFAULT 0;
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-interwiki.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-interwiki.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-interwiki.sql	(revision 1280)
@@ -0,0 +1,20 @@
+-- Creates interwiki prefix<->url mapping table
+-- used from 2003-08-21 dev version.
+-- Import the default mappings from maintenance/interwiki.sql
+
+CREATE TABLE /*$wgDBprefix*/interwiki (
+  -- The interwiki prefix, (e.g. "Meatball", or the language prefix "de")
+  iw_prefix varchar(32) NOT NULL,
+  
+  -- The URL of the wiki, with "$1" as a placeholder for an article name.
+  -- Any spaces in the name will be transformed to underscores before
+  -- insertion.
+  iw_url blob NOT NULL,
+  
+  -- A boolean value indicating whether the wiki is in this project
+  -- (used, for example, to detect redirect loops)
+  iw_local BOOL NOT NULL,
+  
+  UNIQUE KEY iw_prefix (iw_prefix)
+
+) /*$wgDBTableOptions*/;
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-inverse_timestamp.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-inverse_timestamp.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-inverse_timestamp.sql	(revision 1280)
@@ -0,0 +1,15 @@
+-- Removes the inverse_timestamp field from early 1.5 alphas.
+-- This field was used in the olden days as a crutch for sorting
+-- limitations in MySQL 3.x, but is being dropped now as an
+-- unnecessary burden. Serious wikis should be running on 4.x.
+--
+-- Updater added 2005-03-13
+
+ALTER TABLE /*$wgDBprefix*/revision
+  DROP COLUMN inverse_timestamp,
+  DROP INDEX page_timestamp,
+  DROP INDEX user_timestamp,
+  DROP INDEX usertext_timestamp,
+  ADD  INDEX page_timestamp (rev_page,rev_timestamp),
+  ADD  INDEX user_timestamp (rev_user,rev_timestamp),
+  ADD  INDEX usertext_timestamp (rev_user_text,rev_timestamp);
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-ipb_anon_only.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-ipb_anon_only.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-ipb_anon_only.sql	(revision 1280)
@@ -0,0 +1,44 @@
+-- Add extra option fields to the ipblocks table, add some extra indexes, 
+-- convert infinity values in ipb_expiry to something that sorts better, 
+-- extend ipb_address and range fields, add a unique index for block conflict 
+-- detection.
+
+-- Conflicts in the new unique index can be handled by creating a new 
+-- table and inserting into it instead of doing an ALTER TABLE.
+
+
+DROP TABLE IF EXISTS /*$wgDBprefix*/ipblocks_newunique;
+
+CREATE TABLE /*$wgDBprefix*/ipblocks_newunique (
+  ipb_id int NOT NULL auto_increment,
+  ipb_address tinyblob NOT NULL,
+  ipb_user int unsigned NOT NULL default '0',
+  ipb_by int unsigned NOT NULL default '0',
+  ipb_reason tinyblob NOT NULL,
+  ipb_timestamp binary(14) NOT NULL default '',
+  ipb_auto bool NOT NULL default 0,
+  ipb_anon_only bool NOT NULL default 0,
+  ipb_create_account bool NOT NULL default 1,
+  ipb_expiry varbinary(14) NOT NULL default '',
+  ipb_range_start tinyblob NOT NULL,
+  ipb_range_end tinyblob NOT NULL,
+  
+  PRIMARY KEY ipb_id (ipb_id),
+  UNIQUE INDEX ipb_address_unique (ipb_address(255), ipb_user, ipb_auto),
+  INDEX ipb_user (ipb_user),
+  INDEX ipb_range (ipb_range_start(8), ipb_range_end(8)),
+  INDEX ipb_timestamp (ipb_timestamp),
+  INDEX ipb_expiry (ipb_expiry)
+
+) /*$wgDBTableOptions*/;
+
+INSERT IGNORE INTO /*$wgDBprefix*/ipblocks_newunique 
+        (ipb_id, ipb_address, ipb_user, ipb_by, ipb_reason, ipb_timestamp, ipb_auto, ipb_expiry, ipb_range_start, ipb_range_end, ipb_anon_only, ipb_create_account) 
+  SELECT ipb_id, ipb_address, ipb_user, ipb_by, ipb_reason, ipb_timestamp, ipb_auto, ipb_expiry, ipb_range_start, ipb_range_end, 0            , ipb_user=0
+  FROM /*$wgDBprefix*/ipblocks;
+
+DROP TABLE IF EXISTS /*$wgDBprefix*/ipblocks_old;
+RENAME TABLE /*$wgDBprefix*/ipblocks TO /*$wgDBprefix*/ipblocks_old;
+RENAME TABLE /*$wgDBprefix*/ipblocks_newunique TO /*$wgDBprefix*/ipblocks;
+
+UPDATE /*$wgDBprefix*/ipblocks SET ipb_expiry='infinity' WHERE ipb_expiry='';
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-ipb_deleted.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-ipb_deleted.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-ipb_deleted.sql	(revision 1280)
@@ -0,0 +1,3 @@
+-- Adding ipb_deleted field for hiding usernames
+ALTER TABLE /*$wgDBprefix*/ipblocks 
+  ADD ipb_deleted bool NOT NULL default 0;
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-ipb_expiry.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-ipb_expiry.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-ipb_expiry.sql	(revision 1280)
@@ -0,0 +1,8 @@
+-- Adds the ipb_expiry field to ipblocks
+
+ALTER TABLE /*$wgDBprefix*/ipblocks ADD ipb_expiry varbinary(14) NOT NULL default '';
+
+-- All IP blocks have one day expiry
+UPDATE /*$wgDBprefix*/ipblocks SET ipb_expiry = date_format(date_add(ipb_timestamp,INTERVAL 1 DAY),"%Y%m%d%H%i%s") WHERE ipb_user = 0;
+
+-- Null string is fine for user blocks, since this indicates infinity
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-ipb_optional_autoblock.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-ipb_optional_autoblock.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-ipb_optional_autoblock.sql	(revision 1280)
@@ -0,0 +1,3 @@
+-- Add an extra option field "ipb_enable_autoblock" into the ipblocks table. This allows a block to be placed that does not trigger any autoblocks.
+
+ALTER TABLE /*$wgDBprefix*/ipblocks ADD COLUMN ipb_enable_autoblock bool NOT NULL default '1';
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-ipb_range_start.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-ipb_range_start.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-ipb_range_start.sql	(revision 1280)
@@ -0,0 +1,25 @@
+-- Add the range handling fields
+ALTER TABLE /*$wgDBprefix*/ipblocks 
+  ADD ipb_range_start tinyblob NOT NULL default '',
+  ADD ipb_range_end tinyblob NOT NULL default '',
+  ADD INDEX ipb_range (ipb_range_start(8), ipb_range_end(8));
+
+
+-- Initialise fields
+-- Only range blocks match ipb_address LIKE '%/%', this fact is used in the code already
+UPDATE /*$wgDBprefix*/ipblocks 
+  SET 
+    ipb_range_start = LPAD(HEX( 
+        (SUBSTRING_INDEX(ipb_address, '.', 1) << 24)
+      + (SUBSTRING_INDEX(SUBSTRING_INDEX(ipb_address, '.', 2), '.', -1) << 16)
+      + (SUBSTRING_INDEX(SUBSTRING_INDEX(ipb_address, '.', 3), '.', -1) << 24)
+      + (SUBSTRING_INDEX(SUBSTRING_INDEX(ipb_address, '/', 1), '.', -1)) ), 8, '0' ),
+
+    ipb_range_end = LPAD(HEX( 
+        (SUBSTRING_INDEX(ipb_address, '.', 1) << 24)
+      + (SUBSTRING_INDEX(SUBSTRING_INDEX(ipb_address, '.', 2), '.', -1) << 16)
+      + (SUBSTRING_INDEX(SUBSTRING_INDEX(ipb_address, '.', 3), '.', -1) << 24)
+      + (SUBSTRING_INDEX(SUBSTRING_INDEX(ipb_address, '/', 1), '.', -1))
+      + ((1 << (32 - SUBSTRING_INDEX(ipb_address, '/', -1))) - 1) ), 8, '0' )
+
+  WHERE ipb_address LIKE '%/%';
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-ipblocks.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-ipblocks.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-ipblocks.sql	(revision 1280)
@@ -0,0 +1,6 @@
+-- For auto-expiring blocks --
+
+ALTER TABLE /*$wgDBprefix*/ipblocks
+	ADD ipb_auto tinyint NOT NULL default '0',
+	ADD ipb_id int NOT NULL auto_increment,
+	ADD PRIMARY KEY (ipb_id);
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-job.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-job.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-job.sql	(revision 1280)
@@ -0,0 +1,20 @@
+
+-- Jobs performed by parallel apache threads or a command-line daemon
+CREATE TABLE /*$wgDBprefix*/job (
+  job_id int unsigned NOT NULL auto_increment,
+  
+  -- Command name, currently only refreshLinks is defined
+  job_cmd varbinary(60) NOT NULL default '',
+
+  -- Namespace and title to act on
+  -- Should be 0 and '' if the command does not operate on a title
+  job_namespace int NOT NULL,
+  job_title varchar(255) binary NOT NULL,
+
+  -- Any other parameters to the command
+  -- Presently unused, format undefined
+  job_params blob NOT NULL,
+
+  PRIMARY KEY job_id (job_id),
+  KEY (job_cmd, job_namespace, job_title)
+) /*$wgDBTableOptions*/;
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-langlinks.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-langlinks.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-langlinks.sql	(revision 1280)
@@ -0,0 +1,14 @@
+CREATE TABLE /*$wgDBprefix*/langlinks (
+  -- page_id of the referring page
+  ll_from int unsigned NOT NULL default '0',
+  
+  -- Language code of the target
+  ll_lang varbinary(20) NOT NULL default '',
+
+  -- Title of the target, including namespace
+  ll_title varchar(255) binary NOT NULL default '',
+
+  UNIQUE KEY (ll_from, ll_lang),
+  KEY (ll_lang, ll_title)
+) /*$wgDBTableOptions*/;
+
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-linkscc-1.3.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-linkscc-1.3.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-linkscc-1.3.sql	(revision 1280)
@@ -0,0 +1,6 @@
+--
+-- linkscc table used to cache link lists in easier to digest form.
+-- New schema for 1.3 - removes old lcc_title column.
+-- May 2004
+--
+ALTER TABLE /*$wgDBprefix*/linkscc DROP COLUMN lcc_title;
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-linkscc.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-linkscc.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-linkscc.sql	(revision 1280)
@@ -0,0 +1,12 @@
+--
+-- linkscc table used to cache link lists in easier to digest form
+-- November 2003
+--
+-- Format later updated.
+--
+
+CREATE TABLE /*$wgDBprefix*/linkscc (
+  lcc_pageid INT UNSIGNED NOT NULL UNIQUE KEY,
+  lcc_cacheobj MEDIUMBLOB NOT NULL
+
+) /*$wgDBTableOptions*/;
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-linktables.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-linktables.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-linktables.sql	(revision 1280)
@@ -0,0 +1,70 @@
+--
+-- Track links that do exist
+-- l_from and l_to key to cur_id
+--
+DROP TABLE IF EXISTS /*$wgDBprefix*/links;
+CREATE TABLE /*$wgDBprefix*/links (
+  -- Key to the page_id of the page containing the link.
+  l_from int unsigned NOT NULL default '0',
+  
+  -- Key to the page_id of the link target.
+  -- An unfortunate consequence of this is that rename
+  -- operations require changing the links entries for
+  -- all links to the moved page.
+  l_to int unsigned NOT NULL default '0',
+  
+  UNIQUE KEY l_from(l_from,l_to),
+  KEY (l_to)
+
+) /*$wgDBTableOptions*/;
+
+--
+-- Track links to pages that don't yet exist.
+-- bl_from keys to cur_id
+-- bl_to is a text link (namespace:title)
+--
+DROP TABLE IF EXISTS /*$wgDBprefix*/brokenlinks;
+CREATE TABLE /*$wgDBprefix*/brokenlinks (
+  -- Key to the page_id of the page containing the link.
+  bl_from int unsigned NOT NULL default '0',
+  
+  -- Text of the target page title ("namesapce:title").
+  -- Unfortunately this doesn't split the namespace index
+  -- key and therefore can't easily be joined to anything.
+  bl_to varchar(255) binary NOT NULL default '',
+  UNIQUE KEY bl_from(bl_from,bl_to),
+  KEY (bl_to)
+
+) /*$wgDBTableOptions*/;
+
+--
+-- Track links to images *used inline*
+-- il_from keys to cur_id, il_to keys to image_name.
+-- We don't distinguish live from broken links.
+--
+DROP TABLE IF EXISTS /*$wgDBprefix*/imagelinks;
+CREATE TABLE /*$wgDBprefix*/imagelinks (
+  -- Key to page_id of the page containing the image / media link.
+  il_from int unsigned NOT NULL default '0',
+  
+  -- Filename of target image.
+  -- This is also the page_title of the file's description page;
+  -- all such pages are in namespace 6 (NS_IMAGE).
+  il_to varchar(255) binary NOT NULL default '',
+  
+  UNIQUE KEY il_from(il_from,il_to),
+  KEY (il_to)
+
+) /*$wgDBTableOptions*/;
+
+--
+-- Stores (possibly gzipped) serialized objects with
+-- cache arrays to reduce database load slurping up
+-- from links and brokenlinks.
+--
+DROP TABLE IF EXISTS /*$wgDBprefix*/linkscc;
+CREATE TABLE /*$wgDBprefix*/linkscc (
+  lcc_pageid INT UNSIGNED NOT NULL UNIQUE KEY,
+  lcc_cacheobj MEDIUMBLOB NOT NULL
+
+) /*$wgDBTableOptions*/;
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-list.txt
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-list.txt	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-list.txt	(revision 1280)
@@ -0,0 +1,182 @@
+List of database patches and upgrades as the PediaWiki software evolves...
+
+* 2002-11-23: Search index format changed for UTF-8 wikis
+For wikis using the UTF-8 languages, the search index entries
+need to be rebuild to allow searching to work. (Other wikis
+that have been run through the old phase2->phase3 conversion
+script should also be reindexed to catch apostrophe misplacement.)
+
+Run rebuildIndex.php on your wiki.
+
+
+
+* 2002-11-27: Watchlist format changed
+Converts the user_watchlist entries out to a separate table which
+links user_id<->cur_id and can be more handily queried.
+
+Run upgradeWatchlist.php on your wiki.
+
+
+
+* 2002-12-14: Recentchanges table bot/hidden column
+Adds a column to indicate changes by registered bots (or perhaps
+later other admin actions) that should be hidden from the default
+Recentchanges list because people think they're tedious, but should
+still be available in article histories, contribs lists, and
+power-user RC lists.
+
+Run bot.sql against your database.
+
+
+
+* 2002-12-17: Watchlist format changed again
+Now using namespace, title instead of cur_id. This can track deleted/
+recreated pages better, makes it easier to handle talk pages (now with
+the auto-watch feature there's a lot more watching of talk pages!)
+and whatnot.
+
+Run patch-watchlist.sql against your database. If all is well, drop
+the oldwatchlist table which is no longer needed. (Note that this update
+also drops the vestigial user_watchlist column.)
+
+
+
+* 2002-12-26: TeX math rendering adds 'math' table
+A new 'math' table is used to cache TeX sections.
+
+Run patch-math.sql against your database, and add 'tmp' and 'math'
+subdirectories to your tree alongside the upload directory, and copy
+the 'math' source subdirectory under the wiki's PHP directory and run
+"make" to compile the texvc evaluator. (whew!)
+
+TeX support requires TeX, OCaml, and ImageMagick. If you don't want
+to use TeX support on your wiki, you can globally disable it by
+setting $wgUseTeX=false in LocalSettings.php.
+
+
+
+* 2003-01-25: searchindex table
+A new 'searchindex' table separates the fulltext index fields from
+'cur'. This enables use of InnoDB tables, which don't support fulltext
+search, for the main data, and will keep junk out of the backup dumps.
+
+Run patch-searchindex.sql on the database. If you wish to change table
+tables on the others, use 'alter table' manually. (See MySQL docs.)
+
+
+* 2003-01-24: Talk pages for anonymous users
+A new table user_newtalk contains a list of talk pages that were
+changed, both pages by anonymous and those by non-anonymous users.
+
+Run patch-usernewtalk.sql if your database was created before
+this date.
+
+
+* 2003-02-02: Math table changed
+Rerun patch-math.sql to recreate it.
+
+* 2003-02-03: Index added to USER table for performance reasons. Run
+patch-userindex.sql to create it.
+
+
+* 2003-02-09: Random table & inverse timestamps
+The random page queue table has been removed in favor of a column
+in the cur table. This eliminates the ssllooww queue refill step;
+pre-storing random indices in an indexed column means we can do the
+random sort instantly; each element is re-randomized upon selection.
+
+Also, an inverse_timestamp field has been added to the cur and old
+tables. This will allow fast index-based sorting in history lists,
+user contribs, linked recentchanges, etc with MySQL 3, which doesn't
+allow DESC ordering on an indexed field. This may be removed later
+when MySQL is found to be stable.
+
+
+* 2003-03-22: Last touched fields for caching
+'Last touched' timestamp fields have been added to the cur and user
+tables to aid in maintaining cache consistency. Web clients will
+be forced to reload a page if it has been touched since the client's
+cached copy (this will catch indirect changes like creation of
+linked pages) or if a user changes preferences or logs in anew (so
+visual changes and login status are taken into account).
+
+Run patch-cache.sql on the database to set these fields up. This is
+required for changes to OutputPage.php and elsewhere to continue
+working on an older database.
+
+
+* 2003-05-23: Index for "Oldest articles"
+"Oldest articles" needs an index on namespace, redirect and timestamp
+to be reasonably fast. (patch-oldestindex.sql)
+
+OutputPage.php User.php maintenance/buildTables.inc maintenance/patch-cache.sql maintenance/patch-list.txt
+
+* 2003-09: Ipblocks auto-expiry update
+patch-ipblocks.sql
+
+* Interwiki URL table
+Moves the interwiki prefix<->url mapping table from a static array
+into the database. If you've got a custom table, be sure to make
+your changes!
+ 
+Run patch-interwiki.sql to create the interwiki table, then the
+plain interwiki.sql to load up the default set of mappings.
+
+* 2003-05-30: File upload license fields
+Adds fields to 'image' table.
+INCOMPLETE, DO NOT USE
+
+
+* 2003-08-21: Interwiki URL table
+Moves the interwiki prefix<->url mapping table from a static array
+into the database. If you've got a custom table, be sure to make
+your changes!
+
+Run patch-interwiki.sql to create the interwiki table, then the
+plain interwiki.sql to load up the default set of mappings.
+
+* 2003-09: Ipblocks auto-expiry update
+patch-ipblocks.sql
+
+* Interwiki URL table
+Moves the interwiki prefix<->url mapping table from a static array
+into the database. If you've got a custom table, be sure to make
+your changes!
+ 
+Run patch-interwiki.sql to create the interwiki table, then the
+plain interwiki.sql to load up the default set of mappings.
+
+* 2003-11: Indexes
+Fixes up indexes on links, brokenlinks, recentchanges, watchlist,
+and archive tables to boost speed.
+
+Run patch-indexes.sql.
+
+* 2003-11: linkscc table creation
+patch-linkscc.sql
+
+
+* 2004-01-25: recentchanges additional index
+Adds an index to recentchanges to optimize Special:Newpages
+patch-rc-newindex.sql
+
+* 2004-02-14: Adds the ipb_expiry field to ipblocks
+patch-ipb_expiry.sql
+
+
+* 2004-03-11: Recreate links tables to avoid duplicating titles
+everywhere. **Rebuild your links after this with refreshLinks.php**
+
+patch-linktables.sql
+
+
+* 2004-04: Add user_real_name field
+patch-user-realname.sql
+
+* 2004-05-08: Add querycache table for caching special pages and generic
+	object cache to cover some slow operations w/o memcached.
+patch-querycache.sql
+patch-objectcache.sql
+
+* 2004-05-14: Add categorylinks table for handling category membership
+patch-categorylinks.sql
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-log_deleted.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-log_deleted.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-log_deleted.sql	(revision 1280)
@@ -0,0 +1,3 @@
+-- Adding ar_deleted field for revisiondelete
+ALTER TABLE /*$wgDBprefix*/logging
+  ADD log_deleted tinyint unsigned NOT NULL default '0';
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-log_id.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-log_id.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-log_id.sql	(revision 1280)
@@ -0,0 +1,8 @@
+-- Log_id field that means one log entry can be referred to with a single number,
+-- rather than a dirty great big mess of features.
+-- This might be useful for single-log-entry deletion, et cetera.
+-- Andrew Garrett, February 2007.
+
+ALTER TABLE /*$wgDBprefix*/logging
+	ADD COLUMN log_id int unsigned not null auto_increment,
+	ADD PRIMARY KEY log_id (log_id);
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-log_params.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-log_params.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-log_params.sql	(revision 1280)
@@ -0,0 +1,1 @@
+ALTER TABLE /*$wgDBprefix*/logging ADD log_params blob NOT NULL;
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-logging-times-index.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-logging-times-index.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-logging-times-index.sql	(revision 1280)
@@ -0,0 +1,9 @@
+-- 
+-- patch-logging-times-index.sql
+-- 
+-- Add a very humble index on logging times
+-- 
+
+ALTER TABLE /*$wgDBprefix*/logging
+   ADD INDEX times (log_timestamp);
+
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-logging-title.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-logging-title.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-logging-title.sql	(revision 1280)
@@ -0,0 +1,6 @@
+-- 1.4 betas were missing the 'binary' marker from logging.log_title,
+-- which causes a collation mismatch error on joins in MySQL 4.1.
+
+ALTER TABLE /*$wgDBprefix*/logging
+  CHANGE COLUMN log_title
+    log_title varchar(255) binary NOT NULL default '';
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-logging.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-logging.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-logging.sql	(revision 1280)
@@ -0,0 +1,37 @@
+-- Add the logging table and adjust recentchanges to accomodate special pages
+-- 2004-08-24
+
+CREATE TABLE /*$wgDBprefix*/logging (
+  -- Symbolic keys for the general log type and the action type
+  -- within the log. The output format will be controlled by the
+  -- action field, but only the type controls categorization.
+  log_type varbinary(10) NOT NULL default '',
+  log_action varbinary(10) NOT NULL default '',
+  
+  -- Timestamp. Duh.
+  log_timestamp binary(14) NOT NULL default '19700101000000',
+  
+  -- The user who performed this action; key to user_id
+  log_user int unsigned NOT NULL default 0,
+  
+  -- Key to the page affected. Where a user is the target,
+  -- this will point to the user page.
+  log_namespace int NOT NULL default 0,
+  log_title varchar(255) binary NOT NULL default '',
+  
+  -- Freeform text. Interpreted as edit history comments.
+  log_comment varchar(255) NOT NULL default '',
+  
+  -- LF separated list of miscellaneous parameters
+  log_params blob NOT NULL,
+
+  KEY type_time (log_type, log_timestamp),
+  KEY user_time (log_user, log_timestamp),
+  KEY page_time (log_namespace, log_title, log_timestamp)
+
+) /*$wgDBTableOptions*/;
+
+
+-- Change from unsigned to signed so we can store special pages
+ALTER TABLE recentchanges
+  MODIFY rc_namespace tinyint(3) NOT NULL default '0';
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-math.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-math.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-math.sql	(revision 1280)
@@ -0,0 +1,28 @@
+-- Creates table math used for caching TeX blocks.  Needs to be run
+-- on old installations when adding TeX support (2002-12-26)
+-- Or, TeX can be disabled via $wgUseTeX=false in LocalSettings.php
+
+-- Note: math table has changed, and this script needs to be run again
+-- to create it. (2003-02-02)
+
+DROP TABLE IF EXISTS /*$wgDBprefix*/math;
+CREATE TABLE /*$wgDBprefix*/math (
+  -- Binary MD5 hash of the latex fragment, used as an identifier key.
+  math_inputhash varbinary(16) NOT NULL,
+  
+  -- Not sure what this is, exactly...
+  math_outputhash varbinary(16) NOT NULL,
+  
+  -- texvc reports how well it thinks the HTML conversion worked;
+  -- if it's a low level the PNG rendering may be preferred.
+  math_html_conservativeness tinyint NOT NULL,
+  
+  -- HTML output from texvc, if any
+  math_html text,
+  
+  -- MathML output from texvc, if any
+  math_mathml text,
+  
+  UNIQUE KEY math_inputhash (math_inputhash)
+
+) /*$wgDBTableOptions*/;
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-mimesearch-indexes.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-mimesearch-indexes.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-mimesearch-indexes.sql	(revision 1280)
@@ -0,0 +1,22 @@
+-- Add indexes to the mime types in image for use on Special:MIMEsearch,
+-- changes a query like
+--
+-- SELECT img_name FROM image WHERE img_major_mime = "image" AND img_minor_mime = "svg";
+-- from:
+-- +-------+------+---------------+------+---------+------+------+-------------+
+-- | table | type | possible_keys | key  | key_len | ref  | rows | Extra       |
+-- +-------+------+---------------+------+---------+------+------+-------------+
+-- | image | ALL  | NULL          | NULL |    NULL | NULL |  194 | Using where |
+-- +-------+------+---------------+------+---------+------+------+-------------+
+-- to:
+-- +-------+------+-------------------------------+----------------+---------+-------+------+-------------+
+-- | table | type | possible_keys                 | key            | key_len | ref   | rows | Extra       |
+-- +-------+------+-------------------------------+----------------+---------+-------+------+-------------+
+-- | image | ref  | img_major_mime,img_minor_mime | img_minor_mime |      32 | const |    4 | Using where |
+-- +-------+------+-------------------------------+----------------+---------+-------+------+-------------+
+
+ALTER TABLE /*$wgDBprefix*/image
+	ADD INDEX img_major_mime (img_major_mime);
+ALTER TABLE /*$wgDBprefix*/image
+	ADD INDEX img_minor_mime (img_minor_mime);
+
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-objectcache.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-objectcache.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-objectcache.sql	(revision 1280)
@@ -0,0 +1,9 @@
+-- For a few generic cache operations if not using Memcached
+CREATE TABLE /*$wgDBprefix*/objectcache (
+  keyname varbinary(255) binary not null default '',
+  value mediumblob,
+  exptime datetime,
+  unique key (keyname),
+  key (exptime)
+
+) /*$wgDBTableOptions*/;
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-oldestindex.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-oldestindex.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-oldestindex.sql	(revision 1280)
@@ -0,0 +1,5 @@
+-- Add index for "Oldest articles" (Special:Ancientpages)
+-- 2003-05-23 Erik Moeller <moeller@scireview.de>
+
+ALTER TABLE /*$wgDBprefix*/cur
+   ADD INDEX namespace_redirect_timestamp(cur_namespace,cur_is_redirect,cur_timestamp);
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-page_len.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-page_len.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-page_len.sql	(revision 1280)
@@ -0,0 +1,16 @@
+-- Page length field (in bytes) for current revision of page.
+-- Since page text is now stored separately, it may be compressed
+-- or otherwise difficult to calculate. Additionally, the field
+-- can be indexed for handy 'long' and 'short' page lists.
+--
+-- Added 2005-03-12
+
+ALTER TABLE /*$wgDBprefix*/page
+  ADD page_len int unsigned NOT NULL,
+  ADD INDEX (page_len);
+
+-- Not accurate if upgrading from intermediate
+-- 1.5 alpha and have revision compression on.
+UPDATE /*$wgDBprefix*/page, /*$wgDBprefix*/text
+  SET page_len=LENGTH(old_text)
+  WHERE page_latest=old_id;
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-page_restrictions.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-page_restrictions.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-page_restrictions.sql	(revision 1280)
@@ -0,0 +1,22 @@
+--- Used for storing page restrictions (i.e. protection levels)
+CREATE TABLE /*$wgDBprefix*/page_restrictions (
+	-- Page to apply restrictions to (Foreign Key to page).
+	pr_page int NOT NULL,
+	-- The protection type (edit, move, etc)
+	pr_type varbinary(60) NOT NULL,
+	-- The protection level (Sysop, autoconfirmed, etc)
+	pr_level varbinary(60) NOT NULL,
+	-- Whether or not to cascade the protection down to pages transcluded.
+	pr_cascade tinyint NOT NULL,
+	-- Field for future support of per-user restriction.
+	pr_user int NULL,
+	-- Field for time-limited protection.
+	pr_expiry varbinary(14) NULL,
+
+	PRIMARY KEY pr_pagetype (pr_page,pr_type),
+
+	KEY pr_page (pr_page),
+	KEY pr_typelevel (pr_type,pr_level),
+	KEY pr_level (pr_level),
+	KEY pr_cascade (pr_cascade)
+) /*$wgDBTableOptions*/;
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-page_restrictions_sortkey.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-page_restrictions_sortkey.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-page_restrictions_sortkey.sql	(revision 1280)
@@ -0,0 +1,8 @@
+-- Add a sort-key to page_restrictions table.
+-- First immediate use of this is as a sort-key for coming modifications
+-- of Special:Protectedpages.
+-- Andrew Garrett, February 2007
+
+ALTER TABLE /*$wgDBprefix*/page_restrictions
+	ADD COLUMN pr_id int unsigned not null auto_increment,
+	ADD UNIQUE KEY pr_id (pr_id);
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-pagelinks.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-pagelinks.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-pagelinks.sql	(revision 1280)
@@ -0,0 +1,56 @@
+--
+-- Create the new pagelinks table to merge links and brokenlinks data,
+-- and populate it.
+-- 
+-- Unlike the old links and brokenlinks, these records will not need to be
+-- altered when target pages are created, deleted, or renamed. This should
+-- reduce the amount of severe database frustration that happens when widely-
+-- linked pages are altered.
+--
+-- Fixups for brokenlinks to pages in namespaces need to be run after this;
+-- this is done by updaters.inc if run through the regular update scripts.
+--
+-- 2005-05-26
+--
+
+--
+-- Track page-to-page hyperlinks within the wiki.
+--
+CREATE TABLE /*$wgDBprefix*/pagelinks (
+  -- Key to the page_id of the page containing the link.
+  pl_from int unsigned NOT NULL default '0',
+  
+  -- Key to page_namespace/page_title of the target page.
+  -- The target page may or may not exist, and due to renames
+  -- and deletions may refer to different page records as time
+  -- goes by.
+  pl_namespace int NOT NULL default '0',
+  pl_title varchar(255) binary NOT NULL default '',
+  
+  UNIQUE KEY pl_from(pl_from,pl_namespace,pl_title),
+  KEY (pl_namespace,pl_title)
+
+) /*$wgDBTableOptions*/;
+
+
+-- Import existing-page links
+INSERT
+  INTO /*$wgDBprefix*/pagelinks (pl_from,pl_namespace,pl_title)
+  SELECT l_from,page_namespace,page_title
+    FROM /*$wgDBprefix*/links, /*$wgDBprefix*/page
+    WHERE l_to=page_id;
+
+-- import brokenlinks
+-- NOTE: We'll have to fix up individual entries that aren't in main NS
+INSERT INTO /*$wgDBprefix*/pagelinks (pl_from,pl_namespace,pl_title)
+  SELECT bl_from, 0, bl_to
+  FROM /*$wgDBprefix*/brokenlinks;
+
+-- For each namespace do something like:
+--
+-- UPDATE /*$wgDBprefix*/pagelinks
+--   SET pl_namespace=$ns,
+--       pl_title=TRIM(LEADING '$prefix:' FROM pl_title)
+-- WHERE pl_namespace=0
+--   AND pl_title LIKE '$likeprefix:%'";
+--
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-parsercache.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-parsercache.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-parsercache.sql	(revision 1280)
@@ -0,0 +1,15 @@
+--
+-- parsercache table, for cacheing complete parsed articles 
+-- before they are imbedded in the skin.
+--
+
+CREATE TABLE /*$wgDBprefix*/parsercache (
+  pc_pageid INT(11) NOT NULL,
+  pc_title VARCHAR(255) NOT NULL,
+  pc_prefhash CHAR(32) NOT NULL,
+  pc_expire DATETIME NOT NULL,
+  pc_data MEDIUMBLOB NOT NULL,
+  PRIMARY KEY (pc_pageid, pc_prefhash),
+  KEY(pc_title),
+  KEY(pc_expire)
+) /*$wgDBTableOptions*/;
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-profiling.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-profiling.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-profiling.sql	(revision 1280)
@@ -0,0 +1,10 @@
+-- profiling table
+-- This is optional
+
+CREATE TABLE /*$wgDBprefix*/profiling (
+  pf_count int NOT NULL default 0,
+  pf_time float NOT NULL default 0,
+  pf_name varchar(255) NOT NULL default '',
+  pf_server varchar(30) NOT NULL default '',
+  UNIQUE KEY pf_name_server (pf_name, pf_server)
+) TYPE=HEAP;
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-querycache.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-querycache.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-querycache.sql	(revision 1280)
@@ -0,0 +1,16 @@
+-- Used for caching expensive grouped queries
+
+CREATE TABLE /*$wgDBprefix*/querycache (
+  -- A key name, generally the base name of of the special page.
+  qc_type varbinary(32) NOT NULL,
+  
+  -- Some sort of stored value. Sizes, counts...
+  qc_value int unsigned NOT NULL default '0',
+  
+  -- Target namespace+title
+  qc_namespace int NOT NULL default '0',
+  qc_title varchar(255) binary NOT NULL default '',
+  
+  KEY (qc_type,qc_value)
+
+) /*$wgDBTableOptions*/;
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-querycacheinfo.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-querycacheinfo.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-querycacheinfo.sql	(revision 1280)
@@ -0,0 +1,12 @@
+CREATE TABLE /*$wgDBprefix*/querycache_info (
+
+	-- Special page name
+	-- Corresponds to a qc_type value
+	qci_type varbinary(32) NOT NULL default '',
+
+	-- Timestamp of last update
+	qci_timestamp binary(14) NOT NULL default '19700101000000',
+
+	UNIQUE KEY ( qci_type )
+
+) /*$wgDBTableOptions*/;
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-querycachetwo.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-querycachetwo.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-querycachetwo.sql	(revision 1280)
@@ -0,0 +1,22 @@
+-- Used for caching expensive grouped queries that need two links (for example double-redirects)
+
+CREATE TABLE /*$wgDBprefix*/querycachetwo (
+  -- A key name, generally the base name of of the special page.
+  qcc_type varbinary(32) NOT NULL,
+  
+  -- Some sort of stored value. Sizes, counts...
+  qcc_value int unsigned NOT NULL default '0',
+  
+  -- Target namespace+title
+  qcc_namespace int NOT NULL default '0',
+  qcc_title varchar(255) binary NOT NULL default '',
+  
+  -- Target namespace+title2
+  qcc_namespacetwo int NOT NULL default '0',
+  qcc_titletwo varchar(255) binary NOT NULL default '',
+
+  KEY qcc_type (qcc_type,qcc_value),
+  KEY qcc_title (qcc_type,qcc_namespace,qcc_title),
+  KEY qcc_titletwo (qcc_type,qcc_namespacetwo,qcc_titletwo)
+
+) /*$wgDBTableOptions*/;
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-random-dateindex.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-random-dateindex.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-random-dateindex.sql	(revision 1280)
@@ -0,0 +1,54 @@
+-- patch-random-dateindex.sql
+-- 2003-02-09
+--
+-- This patch does two things:
+--  * Adds cur_random column to replace random table
+--    (Requires change to SpecialRandom.php)
+--    random table no longer needs refilling
+--    Note: short-term duplicate results *are* possible, but very unlikely on large wiki
+--
+--  * Adds inverse_timestamp columns to cur and old and indexes
+--    to allow descending timestamp sort in history, contribs, etc
+--    (Requires changes to Article.php, DatabaseFunctions.php,
+--     ... )
+--                       cur_timestamp  inverse_timestamp
+--     99999999999999 - 20030209222556 = 79969790777443
+--     99999999999999 - 20030211083412 = 79969788916587
+--
+--    We won't need this on MySQL 4; there will be a removal patch later.
+
+-- Indexes:
+-- cur needs (cur_random) for random sort
+-- cur and old need (namespace,title,timestamp) index for history,watchlist,rclinked
+-- cur and old need (user,timestamp) index for contribs
+-- cur and old need (user_text,timestamp) index for contribs
+
+ALTER TABLE /*$wgDBprefix*/cur
+  DROP INDEX cur_user,
+  DROP INDEX cur_user_text,
+  ADD COLUMN cur_random real unsigned NOT NULL,
+  ADD COLUMN inverse_timestamp char(14) binary NOT NULL default '',
+  ADD INDEX (cur_random),
+  ADD INDEX name_title_timestamp (cur_namespace,cur_title,inverse_timestamp),
+  ADD INDEX user_timestamp (cur_user,inverse_timestamp),
+  ADD INDEX usertext_timestamp (cur_user_text,inverse_timestamp);
+
+UPDATE /*$wgDBprefix*/cur SET
+  inverse_timestamp=99999999999999-cur_timestamp,
+  cur_random=RAND();
+
+ALTER TABLE /*$wgDBprefix*/old
+  DROP INDEX old_user,
+  DROP INDEX old_user_text,
+  ADD COLUMN inverse_timestamp char(14) binary NOT NULL default '',
+  ADD INDEX name_title_timestamp (old_namespace,old_title,inverse_timestamp),
+  ADD INDEX user_timestamp (old_user,inverse_timestamp),
+  ADD INDEX usertext_timestamp (old_user_text,inverse_timestamp);
+
+UPDATE /*$wgDBprefix*/old SET
+  inverse_timestamp=99999999999999-old_timestamp;
+
+-- If leaving wiki publicly accessible in read-only mode during
+-- the upgrade, comment out the below line; leave 'random' table
+-- in place until the new software is installed.
+DROP TABLE /*$wgDBprefix*/random;
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-rc-newindex.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-rc-newindex.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-rc-newindex.sql	(revision 1280)
@@ -0,0 +1,9 @@
+--
+-- patch-rc-newindex.sql
+-- Adds an index to recentchanges to optimize Special:Newpages
+-- 2004-01-25
+--
+
+ALTER TABLE /*$wgDBprefix*/recentchanges
+	ADD INDEX new_name_timestamp(rc_new,rc_namespace,rc_timestamp);
+
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-rc-patrol.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-rc-patrol.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-rc-patrol.sql	(revision 1280)
@@ -0,0 +1,9 @@
+--
+-- patch-rc-patrol.sql
+-- Adds a row to recentchanges for the patrolling feature
+-- 2004-08-09
+--
+
+ALTER TABLE /*$wgDBprefix*/recentchanges
+	ADD COLUMN rc_patrolled tinyint(3) unsigned NOT NULL default '0';
+
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-rc_deleted.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-rc_deleted.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-rc_deleted.sql	(revision 1280)
@@ -0,0 +1,8 @@
+-- Adding rc_deleted field for revisiondelete
+-- Add rc_logid to match log_id
+ALTER TABLE /*$wgDBprefix*/recentchanges 
+  ADD rc_deleted tinyint unsigned NOT NULL default '0',
+  ADD rc_logid int unsigned NOT NULL default '0',
+  ADD rc_log_type varbinary(255) NULL default NULL,
+  ADD rc_log_action varbinary(255) NULL default NULL,
+  ADD rc_params blob NOT NULL default '';
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-rc_id.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-rc_id.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-rc_id.sql	(revision 1280)
@@ -0,0 +1,7 @@
+-- Primary key in recentchanges
+
+ALTER TABLE /*$wgDBprefix*/recentchanges 
+  ADD rc_id int NOT NULL auto_increment,
+  ADD PRIMARY KEY rc_id (rc_id);
+
+
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-rc_ip.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-rc_ip.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-rc_ip.sql	(revision 1280)
@@ -0,0 +1,7 @@
+-- Adding the rc_ip field for logging of IP addresses in recentchanges
+
+ALTER TABLE /*$wgDBprefix*/recentchanges 
+  ADD rc_ip varbinary(40) NOT NULL default '',
+  ADD INDEX rc_ip (rc_ip);
+
+
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-rc_len.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-rc_len.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-rc_len.sql	(revision 1280)
@@ -0,0 +1,9 @@
+--
+-- patch-rc_len.sql
+-- Adds two rows to recentchanges to hold the text size befor and after the edit
+-- 2006-12-03
+--
+
+ALTER TABLE /*$wgDBprefix*/recentchanges
+	ADD COLUMN rc_old_len int, ADD COLUMN rc_new_len int;
+
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-rc_type.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-rc_type.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-rc_type.sql	(revision 1280)
@@ -0,0 +1,9 @@
+-- recentchanges improvements --
+
+ALTER TABLE /*$wgDBprefix*/recentchanges
+  ADD rc_type tinyint unsigned NOT NULL default '0',
+  ADD rc_moved_to_ns tinyint unsigned NOT NULL default '0',
+  ADD rc_moved_to_title varchar(255) binary NOT NULL default '';
+
+UPDATE /*$wgDBprefix*/recentchanges SET rc_type=1 WHERE rc_new;
+UPDATE /*$wgDBprefix*/recentchanges SET rc_type=3 WHERE rc_namespace=4 AND (rc_title='Deletion_log' OR rc_title='Upload_log');
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-rc_user_text-index.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-rc_user_text-index.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-rc_user_text-index.sql	(revision 1280)
@@ -0,0 +1,7 @@
+-- Add an index to recentchanges on rc_user_text
+--
+-- Added 2006-11-08
+--
+
+     ALTER TABLE /*$wgDBprefix*/recentchanges
+ADD INDEX rc_user_text(rc_user_text, rc_timestamp);
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-recentchanges-utindex.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-recentchanges-utindex.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-recentchanges-utindex.sql	(revision 1280)
@@ -0,0 +1,4 @@
+--- July 2006
+--- Index on recentchanges.( rc_namespace, rc_user_text )
+--- Helps the username filtering in Special:Newpages
+ALTER TABLE /*$wgDBprefix*/recentchanges ADD INDEX `rc_ns_usertext` ( `rc_namespace` , `rc_user_text` );
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-redirect.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-redirect.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-redirect.sql	(revision 1280)
@@ -0,0 +1,28 @@
+--
+-- Create the new redirect table.
+-- For each redirect, this table contains exactly one row defining its target
+-- 
+CREATE TABLE /*$wgDBprefix*/redirect (
+  -- Key to the page_id of the redirect page
+  rd_from int unsigned NOT NULL default '0',
+
+  -- Key to page_namespace/page_title of the target page.
+  -- The target page may or may not exist, and due to renames
+  -- and deletions may refer to different page records as time
+  -- goes by.
+  rd_namespace int NOT NULL default '0',
+  rd_title varchar(255) binary NOT NULL default '',
+
+  PRIMARY KEY rd_from (rd_from),
+  KEY rd_ns_title (rd_namespace,rd_title,rd_from)
+) /*$wgDBTableOptions*/;
+
+-- Import existing redirects
+-- Using ignore because some of the redirect pages contain more than one link
+INSERT IGNORE
+  INTO /*$wgDBprefix*/redirect (rd_from,rd_namespace,rd_title)
+  SELECT pl_from,pl_namespace,pl_title
+    FROM /*$wgDBprefix*/pagelinks, /*$wgDBprefix*/page
+    WHERE pl_from=page_id AND page_is_redirect=1;
+
+
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-rename-user_groups-and_rights.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-rename-user_groups-and_rights.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-rename-user_groups-and_rights.sql	(revision 1280)
@@ -0,0 +1,9 @@
+
+ALTER TABLE /*$wgDBprefix*/user_groups
+	CHANGE user_id ug_user INT UNSIGNED NOT NULL DEFAULT '0',
+	CHANGE group_id ug_group INT UNSIGNED NOT NULL DEFAULT '0';
+
+ALTER TABLE /*$wgDBprefix*/user_rights
+	CHANGE user_id ur_user INT UNSIGNED NOT NULL,
+	CHANGE user_rights ur_rights TINYBLOB NOT NULL;
+
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-restructure.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-restructure.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-restructure.sql	(revision 1280)
@@ -0,0 +1,147 @@
+-- The Great Restructuring of October 2004
+-- Creates 'page', 'revision' tables and transforms the classic
+-- cur+old into a separate page+revision+text structure.
+--
+-- The pre-conversion 'old' table is renamed to 'text' and used
+-- without internal restructuring to avoid rebuilding the entire
+-- table. (This can be done separately if desired.)
+--
+-- The pre-conversion 'cur' table is now redundant and can be
+-- discarded when done.
+
+CREATE TABLE /*$wgDBprefix*/page (
+  page_id int unsigned NOT NULL auto_increment,
+  page_namespace tinyint NOT NULL,
+  page_title varchar(255) binary NOT NULL,
+  page_restrictions tinyblob NOT NULL,
+  page_counter bigint unsigned NOT NULL default '0',
+  page_is_redirect tinyint unsigned NOT NULL default '0',
+  page_is_new tinyint unsigned NOT NULL default '0',
+  page_random real unsigned NOT NULL,
+  page_touched binary(14) NOT NULL default '',
+  page_latest int unsigned NOT NULL,
+  page_len int unsigned NOT NULL,
+
+  PRIMARY KEY page_id (page_id),
+  UNIQUE INDEX name_title (page_namespace,page_title),
+  INDEX (page_random),
+  INDEX (page_len)
+);
+
+CREATE TABLE /*$wgDBprefix*/revision (
+  rev_id int unsigned NOT NULL auto_increment,
+  rev_page int unsigned NOT NULL,
+  rev_comment tinyblob NOT NULL,
+  rev_user int unsigned NOT NULL default '0',
+  rev_user_text varchar(255) binary NOT NULL default '',
+  rev_timestamp binary(14) NOT NULL default '',
+  rev_minor_edit tinyint unsigned NOT NULL default '0',
+  rev_deleted tinyint unsigned NOT NULL default '0',
+
+  
+  PRIMARY KEY rev_page_id (rev_page, rev_id),
+  UNIQUE INDEX rev_id (rev_id),
+  INDEX rev_timestamp (rev_timestamp),
+  INDEX page_timestamp (rev_page,rev_timestamp),
+  INDEX user_timestamp (rev_user,rev_timestamp),
+  INDEX usertext_timestamp (rev_user_text,rev_timestamp)
+);
+
+-- If creating new 'text' table it would look like this:
+--
+-- CREATE TABLE /*$wgDBprefix*/text (
+--   old_id int(8) unsigned NOT NULL auto_increment,
+--   old_text mediumtext NOT NULL,
+--   old_flags tinyblob NOT NULL,
+--   
+--   PRIMARY KEY old_id (old_id)
+-- );
+
+
+-- Lock!
+LOCK TABLES /*$wgDBprefix*/page WRITE, /*$wgDBprefix*/revision WRITE, /*$wgDBprefix*/old WRITE, /*$wgDBprefix*/cur WRITE;
+
+-- Save the last old_id value for later
+SELECT (@maxold:=MAX(old_id)) FROM /*$wgDBprefix*/old;
+
+-- First, copy all current entries into the old table.
+INSERT
+  INTO /*$wgDBprefix*/old
+    (old_namespace,
+    old_title,
+    old_text,
+    old_comment,
+    old_user,
+    old_user_text,
+    old_timestamp,
+    old_minor_edit,
+    old_flags)
+  SELECT
+    cur_namespace,
+    cur_title,
+    cur_text,
+    cur_comment,
+    cur_user,
+    cur_user_text,
+    cur_timestamp,
+    cur_minor_edit,
+    ''
+  FROM /*$wgDBprefix*/cur;
+
+-- Now, copy all old data except the text into revisions
+INSERT
+  INTO /*$wgDBprefix*/revision
+    (rev_id,
+    rev_page,
+    rev_comment,
+    rev_user,
+    rev_user_text,
+    rev_timestamp,
+    rev_minor_edit)
+  SELECT
+    old_id,
+    cur_id,
+    old_comment,
+    old_user,
+    old_user_text,
+    old_timestamp,
+    old_minor_edit
+  FROM /*$wgDBprefix*/old,/*$wgDBprefix*/cur
+  WHERE old_namespace=cur_namespace
+    AND old_title=cur_title;
+
+-- And, copy the cur data into page
+INSERT
+  INTO /*$wgDBprefix*/page
+    (page_id,
+    page_namespace,
+    page_title,
+    page_restrictions,
+    page_counter,
+    page_is_redirect,
+    page_is_new,
+    page_random,
+    page_touched,
+    page_latest)
+  SELECT
+    cur_id,
+    cur_namespace,
+    cur_title,
+    cur_restrictions,
+    cur_counter,
+    cur_is_redirect,
+    cur_is_new,
+    cur_random,
+    cur_touched,
+    rev_id
+  FROM /*$wgDBprefix*/cur,/*$wgDBprefix*/revision
+  WHERE cur_id=rev_page
+    AND rev_timestamp=cur_timestamp
+    AND rev_id > @maxold;
+
+UNLOCK TABLES;
+
+-- Keep the old table around as the text store.
+-- Its extra fields will be ignored, but trimming them is slow
+-- so we won't bother doing it for now.
+ALTER TABLE /*$wgDBprefix*/old RENAME TO /*$wgDBprefix*/text;
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-rev_deleted.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-rev_deleted.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-rev_deleted.sql	(revision 1280)
@@ -0,0 +1,11 @@
+--
+-- Add rev_deleted flag to revision table.
+-- Deleted revisions can thus continue to be listed in history
+-- and user contributions, and their text storage doesn't have
+-- to be disturbed.
+--
+-- 2005-03-31
+--
+
+ALTER TABLE /*$wgDBprefix*/revision
+  ADD rev_deleted tinyint unsigned NOT NULL default '0';
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-rev_len.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-rev_len.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-rev_len.sql	(revision 1280)
@@ -0,0 +1,3 @@
+ALTER TABLE /*$wgDBprefix*/revision
+  ADD rev_len INT UNSIGNED;
+
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-rev_parent_id.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-rev_parent_id.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-rev_parent_id.sql	(revision 1280)
@@ -0,0 +1,9 @@
+--
+-- Key to revision.rev_id
+-- This field is used to add support for a tree structure (The Adjacency List Model)
+--
+-- 2007-03-04
+--
+
+ALTER TABLE /*$wgDBprefix*/revision
+  ADD rev_parent_id int unsigned default NULL;
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-rev_text_id.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-rev_text_id.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-rev_text_id.sql	(revision 1280)
@@ -0,0 +1,17 @@
+--
+-- Adds rev_text_id field to revision table.
+-- This is a key to text.old_id, so that revisions can be stored
+-- for non-save operations without duplicating text, and so that
+-- a back-end storage system can provide its own numbering system
+-- if necessary.
+--
+-- rev.rev_id and text.old_id are no longer assumed to be the same.
+--
+-- 2005-03-28
+--
+
+ALTER TABLE /*$wgDBprefix*/revision
+  ADD rev_text_id int unsigned NOT NULL;
+
+UPDATE /*$wgDBprefix*/revision
+  SET rev_text_id=rev_id;
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-searchindex.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-searchindex.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-searchindex.sql	(revision 1280)
@@ -0,0 +1,40 @@
+-- Break fulltext search index out to separate table from cur
+-- This is being done mainly to allow us to use InnoDB tables
+-- for the main db while keeping the MyISAM fulltext index for
+-- search.
+
+-- 2002-12-16, 2003-01-25 Brion VIBBER <brion@pobox.com>
+
+-- Creating searchindex table...
+DROP TABLE IF EXISTS /*$wgDBprefix*/searchindex;
+CREATE TABLE /*$wgDBprefix*/searchindex (
+  -- Key to page_id
+  si_page int unsigned NOT NULL,
+  
+  -- Munged version of title
+  si_title varchar(255) NOT NULL default '',
+  
+  -- Munged version of body text
+  si_text mediumtext NOT NULL,
+  
+  UNIQUE KEY (si_page)
+
+) TYPE=MyISAM;
+
+-- Copying data into new table...
+INSERT INTO /*$wgDBprefix*/searchindex
+  (si_page,si_title,si_text)
+  SELECT
+    cur_id,cur_ind_title,cur_ind_text
+    FROM /*$wgDBprefix*/cur;
+
+
+-- Creating fulltext index...
+ALTER TABLE /*$wgDBprefix*/searchindex
+  ADD FULLTEXT si_title (si_title),
+  ADD FULLTEXT si_text (si_text);
+
+-- Dropping index columns from cur table.
+ALTER TABLE /*$wgDBprefix*/cur
+  DROP COLUMN cur_ind_title,
+  DROP COLUMN cur_ind_text;
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-ss_images.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-ss_images.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-ss_images.sql	(revision 1280)
@@ -0,0 +1,5 @@
+-- More statistics, for version 1.6
+
+ALTER TABLE /*$wgDBprefix*/site_stats ADD ss_images int default '0';
+SELECT @images := COUNT(*) FROM /*$wgDBprefix*/image;
+UPDATE /*$wgDBprefix*/site_stats SET ss_images=@images;
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-ss_total_articles.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-ss_total_articles.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-ss_total_articles.sql	(revision 1280)
@@ -0,0 +1,6 @@
+-- Faster statistics, as of 1.4.3
+
+ALTER TABLE /*$wgDBprefix*/site_stats
+  ADD ss_total_pages bigint default -1,
+  ADD ss_users bigint default -1,
+  ADD ss_admins int default -1;
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-templatelinks.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-templatelinks.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-templatelinks.sql	(revision 1280)
@@ -0,0 +1,19 @@
+--
+-- Track template inclusions.
+--
+CREATE TABLE /*$wgDBprefix*/templatelinks (
+  -- Key to the page_id of the page containing the link.
+  tl_from int unsigned NOT NULL default '0',
+  
+  -- Key to page_namespace/page_title of the target page.
+  -- The target page may or may not exist, and due to renames
+  -- and deletions may refer to different page records as time
+  -- goes by.
+  tl_namespace int NOT NULL default '0',
+  tl_title varchar(255) binary NOT NULL default '',
+  
+  UNIQUE KEY tl_from(tl_from,tl_namespace,tl_title),
+  KEY (tl_namespace,tl_title)
+
+) /*$wgDBTableOptions*/;
+
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-trackbacks.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-trackbacks.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-trackbacks.sql	(revision 1280)
@@ -0,0 +1,10 @@
+CREATE TABLE /*$wgDBprefix*/trackbacks (
+	tb_id		INTEGER AUTO_INCREMENT PRIMARY KEY,
+	tb_page		INTEGER REFERENCES page(page_id) ON DELETE CASCADE,
+	tb_title	VARCHAR(255) NOT NULL,
+	tb_url		BLOB NOT NULL,
+	tb_ex		TEXT,
+	tb_name		VARCHAR(255),
+
+	INDEX (tb_page)
+);
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-transcache.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-transcache.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-transcache.sql	(revision 1280)
@@ -0,0 +1,7 @@
+CREATE TABLE /*$wgDBprefix*/transcache (
+	tc_url		varbinary(255) NOT NULL,
+	tc_contents	TEXT,
+	tc_time		INT NOT NULL,
+	UNIQUE INDEX tc_url_idx(tc_url)
+) /*$wgDBTableOptions*/;
+
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-user-realname.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-user-realname.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-user-realname.sql	(revision 1280)
@@ -0,0 +1,5 @@
+-- Add a 'real name' field where users can specify the name they want
+-- used for author attribution or other places that real names matter.
+
+ALTER TABLE user 
+        ADD (user_real_name varchar(255) binary NOT NULL default '');
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-user_editcount.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-user_editcount.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-user_editcount.sql	(revision 1280)
@@ -0,0 +1,5 @@
+ALTER TABLE /*$wgDBprefix*/user
+  ADD COLUMN user_editcount int;
+
+-- Don't initialize values immediately... or should we?
+-- They will be lazy-evaluated, or batch-filled via maintenance/initEditCount.php
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-user_email_token.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-user_email_token.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-user_email_token.sql	(revision 1280)
@@ -0,0 +1,12 @@
+--
+-- E-mail confirmation token and expiration timestamp,
+-- for verification of e-mail addresses.
+--
+-- 2005-04-25
+--
+
+ALTER TABLE /*$wgDBprefix*/user
+  ADD COLUMN user_email_authenticated binary(14),
+  ADD COLUMN user_email_token binary(32),
+  ADD COLUMN user_email_token_expires binary(14),
+  ADD INDEX (user_email_token);
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-user_groups.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-user_groups.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-user_groups.sql	(revision 1280)
@@ -0,0 +1,25 @@
+--
+-- User permissions have been broken out to a separate table;
+-- this allows sites with a shared user table to have different
+-- permissions assigned to a user in each project.
+--
+-- This table replaces the old user_rights field which used a
+-- comma-separated blob.
+--
+CREATE TABLE /*$wgDBprefix*/user_groups (
+  -- Key to user_id
+  ug_user int unsigned NOT NULL default '0',
+  
+  -- Group names are short symbolic string keys.
+  -- The set of group names is open-ended, though in practice
+  -- only some predefined ones are likely to be used.
+  --
+  -- At runtime $wgGroupPermissions will associate group keys
+  -- with particular permissions. A user will have the combined
+  -- permissions of any group they're explicitly in, plus
+  -- the implicit '*' and 'user' groups.
+  ug_group varbinary(16) NOT NULL default '',
+  
+  PRIMARY KEY (ug_user,ug_group),
+  KEY (ug_group)
+) /*$wgDBTableOptions*/;
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-user_nameindex.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-user_nameindex.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-user_nameindex.sql	(revision 1280)
@@ -0,0 +1,13 @@
+--
+-- Change the index on user_name to a unique index to prevent
+-- duplicate registrations from creeping in.
+--
+-- Run maintenance/userDupes.php or through the updater first
+-- to clean up any prior duplicate accounts.
+--
+-- Added 2005-06-05
+--
+
+     ALTER TABLE /*$wgDBprefix*/user
+      DROP INDEX user_name,
+ADD UNIQUE INDEX user_name(user_name);
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-user_newpass_time.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-user_newpass_time.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-user_newpass_time.sql	(revision 1280)
@@ -0,0 +1,4 @@
+-- Timestamp of the last time when a new password was
+-- sent, for throttling purposes
+ALTER TABLE /*$wgDBprefix*/user ADD user_newpass_time binary(14);
+
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-user_registration.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-user_registration.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-user_registration.sql	(revision 1280)
@@ -0,0 +1,9 @@
+--
+-- New user field for tracking registration time
+-- 2005-12-21
+--
+
+ALTER TABLE /*$wgDBprefix*/user
+  -- Timestamp of account registration.
+  -- Accounts predating this schema addition may contain NULL.
+  ADD user_registration binary(14);
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-user_rights.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-user_rights.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-user_rights.sql	(revision 1280)
@@ -0,0 +1,21 @@
+-- Split user table into two parts:
+--   user
+--   user_rights
+-- The later contains only the permissions of the user. This way,
+-- you can store the accounts for several wikis in one central
+-- database but keep user rights local to the wiki.
+
+CREATE TABLE /*$wgDBprefix*/user_rights (
+  -- Key to user_id
+  ur_user int unsigned NOT NULL,
+  
+  -- Comma-separated list of permission keys
+  ur_rights tinyblob NOT NULL,
+  
+  UNIQUE KEY ur_user (ur_user)
+
+) /*$wgDBTableOptions*/;
+
+INSERT INTO /*$wgDBprefix*/user_rights SELECT user_id,user_rights FROM /*$wgDBprefix*/user;
+
+ALTER TABLE /*$wgDBprefix*/user DROP COLUMN user_rights;
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-user_token.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-user_token.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-user_token.sql	(revision 1280)
@@ -0,0 +1,15 @@
+-- user_token patch
+-- 2004-09-23
+
+ALTER TABLE /*$wgDBprefix*/user ADD user_token  binary(32) NOT NULL default '';
+
+UPDATE /*$wgDBprefix*/user SET user_token = concat(
+	substring(rand(),3,4),
+	substring(rand(),3,4),
+	substring(rand(),3,4),
+	substring(rand(),3,4),
+	substring(rand(),3,4),
+	substring(rand(),3,4),
+	substring(rand(),3,4),
+	substring(rand(),3,4)
+);
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-userindex.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-userindex.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-userindex.sql	(revision 1280)
@@ -0,0 +1,1 @@
+ ALTER TABLE /*$wgDBprefix*/user ADD INDEX ( `user_name` );
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-userlevels.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-userlevels.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-userlevels.sql	(revision 1280)
@@ -0,0 +1,8 @@
+
+-- Relation table between user and groups
+CREATE TABLE /*$wgDBprefix*/user_groups (
+	ug_user int unsigned NOT NULL default '0',
+	ug_group varbinary(16) NOT NULL default '0',
+	PRIMARY KEY  (ug_user,ug_group)
+  KEY (ug_group)
+) /*$wgDBTableOptions*/;
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-usernewtalk.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-usernewtalk.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-usernewtalk.sql	(revision 1280)
@@ -0,0 +1,20 @@
+--- This table stores all the IDs of users whose talk
+--- page has been changed (the respective row is deleted
+--- when the user looks at the page).
+--- The respective column in the user table is no longer
+--- required and therefore dropped.
+
+CREATE TABLE /*$wgDBprefix*/user_newtalk (
+  user_id int NOT NULL default '0',
+  user_ip varbinary(40) NOT NULL default '',
+  KEY user_id (user_id),
+  KEY user_ip (user_ip)
+) /*$wgDBTableOptions*/;
+
+INSERT INTO
+  /*$wgDBprefix*/user_newtalk (user_id, user_ip)
+  SELECT user_id, ''
+    FROM user
+    WHERE user_newtalk != 0;
+
+ALTER TABLE /*$wgDBprefix*/user DROP COLUMN user_newtalk;
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-val_ip.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-val_ip.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-val_ip.sql	(revision 1280)
@@ -0,0 +1,4 @@
+-- Column added 2005-05-24
+
+ALTER TABLE /*$wgDBprefix*/validate
+  ADD COLUMN val_ip varchar(20) NOT NULL default '';
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-validate.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-validate.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-validate.sql	(revision 1280)
@@ -0,0 +1,13 @@
+-- For article validation
+
+DROP TABLE IF EXISTS /*$wgDBprefix*/validate;
+CREATE TABLE /*$wgDBprefix*/validate (
+  `val_user` int(11) NOT NULL default '0',
+  `val_page` int(11) unsigned NOT NULL default '0',
+  `val_revision` int(11) unsigned NOT NULL default '0',
+  `val_type` int(11) unsigned NOT NULL default '0',
+  `val_value` int(11) default '0',
+  `val_comment` varchar(255) NOT NULL default '',
+  `val_ip` varchar(20) NOT NULL default '',
+  KEY `val_user` (`val_user`,`val_revision`)
+) /*$wgDBTableOptions*/;
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-watchlist-null.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-watchlist-null.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-watchlist-null.sql	(revision 1280)
@@ -0,0 +1,9 @@
+-- Set up wl_notificationtimestamp with NULL support.
+-- 2005-08-17
+
+ALTER TABLE /*$wgDBprefix*/watchlist
+  CHANGE wl_notificationtimestamp wl_notificationtimestamp varbinary(14);
+
+UPDATE /*$wgDBprefix*/watchlist
+  SET wl_notificationtimestamp=NULL
+  WHERE wl_notificationtimestamp='0';
Index: /MediaWiki/branches/1.11/maintenance/archives/patch-watchlist.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/patch-watchlist.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/patch-watchlist.sql	(revision 1280)
@@ -0,0 +1,30 @@
+-- Convert watchlists to new new format ;)
+
+-- Ids just aren't convenient when what we want is to
+-- treat article and talk pages as equivalent.
+-- Better to use namespace (drop the 1 bit!) and title
+
+-- 2002-12-17 by Brion Vibber <brion@pobox.com>
+-- affects, affected by changes to SpecialWatchlist.php, User.php,
+-- Article.php, Title.php, SpecialRecentchanges.php
+
+DROP TABLE IF EXISTS watchlist2;
+CREATE TABLE watchlist2 (
+  wl_user int unsigned NOT NULL,
+  wl_namespace int unsigned NOT NULL default '0',
+  wl_title varchar(255) binary NOT NULL default '',
+  UNIQUE KEY (wl_user, wl_namespace, wl_title)
+) /*$wgDBTableOptions*/;
+
+INSERT INTO watchlist2 (wl_user,wl_namespace,wl_title)
+  SELECT DISTINCT wl_user,(cur_namespace | 1) - 1,cur_title
+  FROM watchlist,cur WHERE wl_page=cur_id;
+
+ALTER TABLE watchlist RENAME TO oldwatchlist;
+ALTER TABLE watchlist2 RENAME TO watchlist;
+
+-- Check that the new one is correct, then:
+-- DROP TABLE oldwatchlist;
+
+-- Also should probably drop the ancient and now unused:
+ALTER TABLE user DROP COLUMN user_watch;
Index: /MediaWiki/branches/1.11/maintenance/archives/rebuildRecentchanges.inc
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/rebuildRecentchanges.inc	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/rebuildRecentchanges.inc	(revision 1280)
@@ -0,0 +1,121 @@
+<?php
+/**
+ * Rebuild recent changes table
+ *
+ * @deprecated
+ * @addtogroup MaintenanceArchive
+ */
+
+/** */
+function rebuildRecentChangesTable()
+{
+	$sql = "DROP TABLE IF EXISTS recentchanges";
+	wfQuery( $sql );
+
+	$sql = "CREATE TABLE recentchanges (
+  rc_timestamp varchar(14) binary NOT NULL default '',
+  rc_cur_time varchar(14) binary NOT NULL default '',
+  rc_user int(10) unsigned NOT NULL default '0',
+  rc_user_text varchar(255) binary NOT NULL default '',
+  rc_namespace tinyint(3) unsigned NOT NULL default '0',
+  rc_title varchar(255) binary NOT NULL default '',
+  rc_comment varchar(255) binary NOT NULL default '',
+  rc_minor tinyint(3) unsigned NOT NULL default '0',
+  rc_new tinyint(3) unsigned NOT NULL default '0',
+  rc_cur_id int(10) unsigned NOT NULL default '0',
+  rc_this_oldid int(10) unsigned NOT NULL default '0',
+  rc_last_oldid int(10) unsigned NOT NULL default '0',
+  INDEX rc_cur_id (rc_cur_id),
+  INDEX rc_cur_time (rc_cur_time),
+  INDEX rc_timestamp (rc_timestamp),
+  INDEX rc_namespace (rc_namespace),
+  INDEX rc_title (rc_title)
+) TYPE=MyISAM PACK_KEYS=1;";
+	wfQuery( $sql );
+
+	print( "Loading from CUR table...\n" );
+
+	$sql = "INSERT INTO recentchanges (rc_timestamp,rc_cur_time,rc_user," .
+	  "rc_user_text,rc_namespace,rc_title,rc_comment,rc_minor,rc_new," .
+	  "rc_cur_id,rc_this_oldid,rc_last_oldid) SELECT cur_timestamp," .
+	  "cur_timestamp,cur_user,cur_user_text,cur_namespace,cur_title," .
+	  "cur_comment,cur_minor_edit,cur_is_new,cur_id,0,0 FROM cur " .
+	  "ORDER BY cur_timestamp DESC LIMIT 5000";
+	wfQuery( $sql );
+
+	print( "Loading from OLD table...\n" );
+
+	$sql = "INSERT INTO recentchanges (rc_timestamp,rc_cur_time,rc_user," .
+      "rc_user_text,rc_namespace,rc_title,rc_comment,rc_minor,rc_new," .
+      "rc_cur_id,rc_this_oldid,rc_last_oldid) SELECT old_timestamp,''," .
+	  "old_user,old_user_text,old_namespace,old_title,old_comment," .
+	  "old_minor_edit,0,0,old_id,0 FROM old ORDER BY old_timestamp " .
+	  "DESC LIMIT 5000";
+	wfQuery( $sql );
+
+	$sql = "SELECT rc_timestamp FROM recentchanges " .
+	  "ORDER BY rc_timestamp DESC LIMIT 5000,1";
+	$res = wfQuery( $sql );
+	$obj = wfFetchObject( $res );
+	$ts = $obj->rc_timestamp;
+
+	$sql = "DELETE FROM recentchanges WHERE rc_timestamp < '{$ts}'";
+	wfQuery( $sql );
+
+	rebuildRecentChangesTablePass2();
+}
+
+function rebuildRecentChangesTablePass2()
+{
+	$ns = $id = $count = 0;
+	$title = $ct =  "";
+
+	print( "Updating links...\n" );
+
+	$sql = "SELECT rc_namespace,rc_title,rc_timestamp FROM recentchanges " .
+	  "ORDER BY rc_namespace,rc_title,rc_timestamp DESC";
+	$res = wfQuery( $sql );
+
+	while ( $obj = wfFetchObject( $res ) ) {
+		if ( ! ( $ns == $obj->rc_namespace &&
+			   0 == strcmp( $title, wfStrencode( $obj->rc_title ) ) ) ) {
+
+			$ns = $obj->rc_namespace;
+			$title = wfStrencode( $obj->rc_title );
+
+			$sql = "SELECT cur_id,cur_timestamp FROM cur WHERE " .
+			  "cur_namespace={$ns} AND cur_title='{$title}'";
+			$res2 = wfQuery( $sql );
+			$obj2 = wfFetchObject( $res2 );
+
+			$id = $obj2->cur_id;
+			$ct = $obj2->cur_timestamp;
+		}
+		$sql = "SELECT old_id FROM old WHERE old_namespace={$ns} " .
+		  "AND old_title='{$title}' AND old_timestamp < '" .
+		  "{$obj->rc_timestamp}' ORDER BY old_timestamp DESC LIMIT 1";
+		$res2 = wfQuery( $sql );
+
+		if ( 0 != wfNumRows( $res2 ) ) {
+			$obj2 = wfFetchObject( $res2 );
+
+			$sql = "UPDATE recentchanges SET rc_cur_id={$id},rc_cur_time=" .
+			  "'{$ct}',rc_last_oldid={$obj2->old_id} WHERE " .
+			  "rc_namespace={$ns} AND rc_title='{$title}' AND " .
+			  "rc_timestamp='{$obj->rc_timestamp}'";
+			wfQuery( $sql );
+		} else {
+			$sql = "UPDATE recentchanges SET rc_cur_id={$id},rc_cur_time=" .
+			  "'{$ct}' WHERE rc_namespace={$ns} AND rc_title='{$title}' " .
+			  "AND rc_timestamp='{$obj->rc_timestamp}'";
+			wfQuery( $sql );
+		}
+
+		if ( 0 == ( ++$count % 500 ) ) {
+			printf( "%d records processed.\n", $count );
+		}
+	}
+}
+
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/archives/upgradeWatchlist.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/archives/upgradeWatchlist.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/archives/upgradeWatchlist.php	(revision 1280)
@@ -0,0 +1,66 @@
+<?php
+/**
+ * @deprecated
+ * @addtogroup MaintenanceArchive
+ */
+
+/** */
+print "This script is obsolete!";
+print "It is retained in the source here in case some of its
+code might be useful for ad-hoc conversion tasks, but it is
+not maintained and probably won't even work as is.";
+exit();
+
+# Convert watchlists to new format
+
+global $IP;
+require_once( "../LocalSettings.php" );
+require_once( "$IP/Setup.php" );
+
+$wgTitle = Title::newFromText( "Rebuild links script" );
+set_time_limit(0);
+
+$wgDBuser			= "wikiadmin";
+$wgDBpassword		= $wgDBadminpassword;
+
+$sql = "DROP TABLE IF EXISTS watchlist";
+wfQuery( $sql, DB_MASTER );
+$sql = "CREATE TABLE watchlist (
+  wl_user int(5) unsigned NOT NULL,
+  wl_page int(8) unsigned NOT NULL,
+  UNIQUE KEY (wl_user, wl_page)
+) TYPE=MyISAM PACK_KEYS=1";
+wfQuery( $sql, DB_MASTER );
+
+$lc = new LinkCache;
+
+# Now, convert!
+$sql = "SELECT user_id,user_watch FROM user";
+$res = wfQuery( $sql, DB_SLAVE );
+$nu = wfNumRows( $res );
+$sql = "INSERT into watchlist (wl_user,wl_page) VALUES ";
+$i = $n = 0;
+while( $row = wfFetchObject( $res ) ) {
+	$list = explode( "\n", $row->user_watch );
+	$bits = array();
+	foreach( $list as $title ) {
+		if( $id = $lc->addLink( $title ) and ! $bits[$id]++) {
+			$sql .= ($i++ ? "," : "") . "({$row->user_id},{$id})";
+		}
+	}
+	if( ($n++ % 100) == 0 ) echo "$n of $nu users done...\n";
+}
+echo "$n users done.\n";
+if( $i ) {
+	wfQuery( $sql, DB_MASTER );
+}
+
+
+# Add index
+# is this necessary?
+$sql = "ALTER TABLE watchlist
+  ADD INDEX wl_user (wl_user),
+  ADD INDEX wl_page (wl_page)";
+#wfQuery( $sql, DB_MASTER );
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/attachLatest.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/attachLatest.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/attachLatest.php	(revision 1280)
@@ -0,0 +1,72 @@
+<?php
+// quick hackjob to fix damages imports on wikisource
+// page records have page_latest wrong
+
+/**
+ * Copyright (C) 2005 Brion Vibber <brion@pobox.com>
+ * http://www.mediawiki.org/
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @addtogroup Maintenance
+ */
+
+require_once( 'commandLine.inc' );
+
+$fixit = isset( $options['fix'] );
+$fname = 'attachLatest';
+
+echo "Looking for pages with page_latest set to 0...\n";
+$dbw = wfGetDB( DB_MASTER );
+$result = $dbw->select( 'page',
+	array( 'page_id', 'page_namespace', 'page_title' ),
+	array( 'page_latest' => 0 ),
+	$fname );
+
+$n = 0;
+while( $row = $dbw->fetchObject( $result ) ) {
+	$pageId = intval( $row->page_id );
+	$title = Title::makeTitle( $row->page_namespace, $row->page_title );
+	$name = $title->getPrefixedText();
+	$latestTime = $dbw->selectField( 'revision',
+		'MAX(rev_timestamp)',
+		array( 'rev_page' => $pageId ),
+		$fname );
+	if( !$latestTime ) {
+		echo wfWikiID()." $pageId [[$name]] can't find latest rev time?!\n";
+		continue;
+	}
+
+	$revision = Revision::loadFromTimestamp( $dbw, $title, $latestTime );
+	if( is_null( $revision ) ) {
+		echo wfWikiID()." $pageId [[$name]] latest time $latestTime, can't find revision id\n";
+		continue;
+	}
+	$id = $revision->getId();
+	echo wfWikiID()." $pageId [[$name]] latest time $latestTime, rev id $id\n";
+	if( $fixit ) {
+		$article = new Article( $title );
+		$article->updateRevisionOn( $dbw, $revision );
+	}
+	$n++;
+}
+$dbw->freeResult( $result );
+echo "Done! Processed $n pages.\n";
+if( !$fixit ) {
+	echo "This was a dry run; rerun with --fix to update page_latest.\n";
+}
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/attribute.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/attribute.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/attribute.php	(revision 1280)
@@ -0,0 +1,104 @@
+<?php
+/**
+ * Script for re-attributing edits
+ *
+ * @addtogroup Maintenance
+ */
+
+/** */
+require_once( "commandLine.inc" );
+
+# Parameters
+if ( count( $args ) < 2 ) {
+	print "Not enough parameters\n";
+	if ( $wgWikiFarm ) {
+		print "Usage: php attribute.php <language> <site> <source> <destination>\n";
+	} else {
+		print "Usage: php attribute.php <source> <destination>\n";
+	}
+	exit;
+}
+
+$source = $args[0];
+$dest = $args[1];
+
+$dbr = wfGetDB( DB_SLAVE );
+extract( $dbr->tableNames( 'page', 'revision','user' ));
+$eSource = $dbr->strencode( $source );
+$eDest = $dbr->strencode( $dest );
+
+# Get user id
+$res = $dbr->query( "SELECT user_id FROM $user WHERE user_name='$eDest'" );
+$row = $dbr->fetchObject( $res );
+if ( !$row ) {
+	print "Warning: the target name \"$dest\" does not exist";
+	$uid = 0;
+} else {
+	$uid = $row->user_id;
+}
+
+# Initialise files
+$logfile = fopen( "attribute.log", "a" );
+$sqlfile = fopen( "attribute.sql", "a" );
+
+fwrite( $logfile, "* $source &rarr; $dest\n" );
+
+fwrite( $sqlfile,
+"-- Changing attribution SQL file
+-- Generated with attribute.php
+-- $source -> $dest ($uid)
+");
+
+$omitTitle = "Wikipedia:Changing_attribution_for_an_edit";
+
+# Get revisions
+print "\nPage revisions\n\n";
+
+$res = $dbr->query( "SELECT page_namespace, page_title, rev_id, rev_timestamp
+FROM $revision,$page
+WHERE rev_user_text='$eSource' and rev_page=page_id" );
+$row = $dbr->fetchObject( $res );
+
+if ( $row ) {
+/*
+	if ( $row->old_title=='Votes_for_deletion' && $row->old_namespace == 4 ) {
+		# We don't have that long
+		break;
+	}
+*/
+	fwrite( $logfile, "**Revision IDs: " );
+	fwrite( $sqlfile, "UPDATE $revision SET rev_user=$uid, rev_user_text='$eDest' WHERE rev_id IN (\n" );
+
+	for ( $first=true; $row; $row = $dbr->fetchObject( $res ) ) {
+		$title = Title::makeTitle( $row->page_namespace, $row->page_title );
+		$fullTitle = $title->getPrefixedDbKey();
+		if ( $fullTitle == $omitTitle ) {
+			continue;
+		}
+
+		print "$fullTitle\n";
+		$url = $title->getFullUrl( "oldid={$row->rev_id}" );
+
+		# Output
+		fwrite( $sqlfile, "      " );
+		if ( $first ) {
+			$first = false;
+		} else {
+			fwrite( $sqlfile, ", " );
+			fwrite( $logfile, ", " );
+		}
+
+		fwrite( $sqlfile, "{$row->rev_id} -- $url\n" );
+		fwrite( $logfile, "[$url {$row->rev_id}]" );
+
+	}
+	fwrite( $sqlfile, ");\n" );
+	fwrite( $logfile, "\n" );
+}
+
+print "\n";
+
+fclose( $sqlfile );
+fclose( $logfile );
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/backup.inc
===================================================================
--- /MediaWiki/branches/1.11/maintenance/backup.inc	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/backup.inc	(revision 1280)
@@ -0,0 +1,296 @@
+<?php
+/**
+ * Copyright (C) 2005 Brion Vibber <brion@pobox.com>
+ * http://www.mediawiki.org/
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @addtogroup SpecialPage
+ */
+
+class DumpDBZip2Output extends DumpPipeOutput {
+	function DumpDBZip2Output( $file ) {
+		parent::DumpPipeOutput( "dbzip2", $file );
+	}
+}
+
+class BackupDumper {
+	var $reportingInterval = 100;
+	var $reporting = true;
+	var $pageCount = 0;
+	var $revCount  = 0;
+	var $server    = null; // use default
+	var $pages     = null; // all pages
+	var $skipHeader = false; // don't output <mediawiki> and <siteinfo>
+	var $skipFooter = false; // don't output </mediawiki>
+	var $startId    = 0;
+	var $endId      = 0;
+	var $sink       = null; // Output filters
+	var $stubText   = false; // include rev_text_id instead of text; for 2-pass dump
+
+	function BackupDumper( $args ) {
+		$this->stderr = fopen( "php://stderr", "wt" );
+
+		// Built-in output and filter plugins
+		$this->registerOutput( 'file', 'DumpFileOutput' );
+		$this->registerOutput( 'gzip', 'DumpGZipOutput' );
+		$this->registerOutput( 'bzip2', 'DumpBZip2Output' );
+		$this->registerOutput( 'dbzip2', 'DumpDBZip2Output' );
+		$this->registerOutput( '7zip', 'Dump7ZipOutput' );
+
+		$this->registerFilter( 'latest', 'DumpLatestFilter' );
+		$this->registerFilter( 'notalk', 'DumpNotalkFilter' );
+		$this->registerFilter( 'namespace', 'DumpNamespaceFilter' );
+
+		$this->sink = $this->processArgs( $args );
+	}
+
+	/**
+	 * @param string $name
+	 * @param string $class name of output filter plugin class
+	 */
+	function registerOutput( $name, $class ) {
+		$this->outputTypes[$name] = $class;
+	}
+
+	/**
+	 * @param string $name
+	 * @param string $class name of filter plugin class
+	 */
+	function registerFilter( $name, $class ) {
+		$this->filterTypes[$name] = $class;
+	}
+
+	/**
+	 * Load a plugin and register it
+	 * @param string $class Name of plugin class; must have a static 'register'
+	 *                      method that takes a BackupDumper as a parameter.
+	 * @param string $file Full or relative path to the PHP file to load, or empty
+	 */
+	function loadPlugin( $class, $file ) {
+		if( $file != '' ) {
+			require_once( $file );
+		}
+		$register = array( $class, 'register' );
+		call_user_func_array( $register, array( &$this ) );
+	}
+
+	/**
+	 * @param array $args
+	 * @return array
+	 * @static
+	 */
+	function processArgs( $args ) {
+		$sink = null;
+		$sinks = array();
+		foreach( $args as $arg ) {
+			$matches = array();
+			if( preg_match( '/^--(.+?)(?:=(.+?)(?::(.+?))?)?$/', $arg, $matches ) ) {
+				@list( /* $full */ , $opt, $val, $param ) = $matches;
+				switch( $opt ) {
+				case "plugin":
+					$this->loadPlugin( $val, $param );
+					break;
+				case "output":
+					if( !is_null( $sink ) ) {
+						$sinks[] = $sink;
+					}
+					if( !isset( $this->outputTypes[$val] ) ) {
+						wfDie( "Unrecognized output sink type '$val'\n" );
+					}
+					$type = $this->outputTypes[$val];
+					$sink = new $type( $param );
+					break;
+				case "filter":
+					if( is_null( $sink ) ) {
+						$this->progress( "Warning: assuming stdout for filter output\n" );
+						$sink = new DumpOutput();
+					}
+					if( !isset( $this->filterTypes[$val] ) ) {
+						wfDie( "Unrecognized filter type '$val'\n" );
+					}
+					$type = $this->filterTypes[$val];
+					$filter = new $type( $sink, $param );
+
+					// references are lame in php...
+					unset( $sink );
+					$sink = $filter;
+
+					break;
+				case "report":
+					$this->reportingInterval = intval( $val );
+					break;
+				case "server":
+					$this->server = $val;
+					break;
+				case "force-normal":
+					if( !function_exists( 'utf8_normalize' ) ) {
+						dl( "php_utfnormal.so" );
+						if( !function_exists( 'utf8_normalize' ) ) {
+							wfDie( "Failed to load UTF-8 normalization extension. " .
+								"Install or remove --force-normal parameter to use slower code.\n" );
+						}
+					}
+					break;
+				default:
+					$this->processOption( $opt, $val, $param );
+				}
+			}
+		}
+
+		if( is_null( $sink ) ) {
+			$sink = new DumpOutput();
+		}
+		$sinks[] = $sink;
+
+		if( count( $sinks ) > 1 ) {
+			return new DumpMultiWriter( $sinks );
+		} else {
+			return $sink;
+		}
+	}
+
+	function processOption( $opt, $val, $param ) {
+		// extension point for subclasses to add options
+	}
+
+	function dump( $history, $text = MW_EXPORT_TEXT ) {
+		# Notice messages will foul up your XML output even if they're
+		# relatively harmless.
+		ini_set( 'display_errors', false );
+
+		$this->initProgress( $history );
+
+		$db = $this->backupDb();
+		$exporter = new WikiExporter( $db, $history, WikiExporter::STREAM, $text );
+
+		$wrapper = new ExportProgressFilter( $this->sink, $this );
+		$exporter->setOutputSink( $wrapper );
+
+		if( !$this->skipHeader )
+			$exporter->openStream();
+
+		if( is_null( $this->pages ) ) {
+			if( $this->startId || $this->endId ) {
+				$exporter->pagesByRange( $this->startId, $this->endId );
+			} else {
+				$exporter->allPages();
+			}
+		} else {
+			$exporter->pagesByName( $this->pages );
+		}
+
+		if( !$this->skipFooter )
+			$exporter->closeStream();
+
+		$this->report( true );
+	}
+	
+	/**
+	 * Initialise starting time and maximum revision count.
+	 * We'll make ETA calculations based an progress, assuming relatively
+	 * constant per-revision rate.
+	 * @param int $history WikiExporter::CURRENT or WikiExporter::FULL
+	 */
+	function initProgress( $history = WikiExporter::FULL ) {
+		$table = ($history == WikiExporter::CURRENT) ? 'page' : 'revision';
+		$field = ($history == WikiExporter::CURRENT) ? 'page_id' : 'rev_id';
+		
+		$dbr = wfGetDB( DB_SLAVE );
+		$this->maxCount = $dbr->selectField( $table, "MAX($field)", '', 'BackupDumper::dump' );
+		$this->startTime = wfTime();
+	}
+
+	function backupDb() {
+		global $wgDBadminuser, $wgDBadminpassword;
+		global $wgDBname, $wgDebugDumpSql, $wgDBtype;
+		$flags = ($wgDebugDumpSql ? DBO_DEBUG : 0) | DBO_DEFAULT; // god-damn hack
+
+		$class = 'Database' . ucfirst($wgDBtype);
+		$db = new $class( $this->backupServer(), $wgDBadminuser, $wgDBadminpassword, $wgDBname, false, $flags );
+		
+		// Discourage the server from disconnecting us if it takes a long time
+		// to read out the big ol' batch query.
+		$db->setTimeout( 3600 * 24 );
+		
+		return $db;
+	}
+
+	function backupServer() {
+		global $wgDBserver;
+		return $this->server
+			? $this->server
+			: $wgDBserver;
+	}
+
+	function reportPage() {
+		$this->pageCount++;
+	}
+
+	function revCount() {
+		$this->revCount++;
+		$this->report();
+	}
+
+	function report( $final = false ) {
+		if( $final xor ( $this->revCount % $this->reportingInterval == 0 ) ) {
+			$this->showReport();
+		}
+	}
+
+	function showReport() {
+		if( $this->reporting ) {
+			$delta = wfTime() - $this->startTime;
+			$now = wfTimestamp( TS_DB );
+			if( $delta ) {
+				$rate = $this->pageCount / $delta;
+				$revrate = $this->revCount / $delta;
+				$portion = $this->revCount / $this->maxCount;
+				$eta = $this->startTime + $delta / $portion;
+				$etats = wfTimestamp( TS_DB, intval( $eta ) );
+			} else {
+				$rate = '-';
+				$revrate = '-';
+				$etats = '-';
+			}
+			$this->progress( sprintf( "%s: %s %d pages (%0.3f/sec), %d revs (%0.3f/sec), ETA %s [max %d]",
+				$now, wfWikiID(), $this->pageCount, $rate, $this->revCount, $revrate, $etats, $this->maxCount ) );
+		}
+	}
+
+	function progress( $string ) {
+		fwrite( $this->stderr, $string . "\n" );
+	}
+}
+
+class ExportProgressFilter extends DumpFilter {
+	function ExportProgressFilter( &$sink, &$progress ) {
+		parent::DumpFilter( $sink );
+		$this->progress = $progress;
+	}
+
+	function writeClosePage( $string ) {
+		parent::writeClosePage( $string );
+		$this->progress->reportPage();
+	}
+
+	function writeRevision( $rev, $string ) {
+		parent::writeRevision( $rev, $string );
+		$this->progress->revCount();
+	}
+}
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/backupPrefetch.inc
===================================================================
--- /MediaWiki/branches/1.11/maintenance/backupPrefetch.inc	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/backupPrefetch.inc	(revision 1280)
@@ -0,0 +1,203 @@
+<?php
+
+// Some smart guy removed XMLReader's global constants from PHP 5.1
+// and replaced them with class constants. Breaking source compatibility
+// is SUPER awesome, and I love languages which do this constantly!
+$xmlReaderConstants = array(
+	"NONE",
+	"ELEMENT",
+	"ATTRIBUTE", 
+	"TEXT",
+	"CDATA",
+	"ENTITY_REF",
+	"ENTITY",
+	"PI",
+	"COMMENT",
+	"DOC",
+	"DOC_TYPE",
+	"DOC_FRAGMENT",
+	"NOTATION",
+	"WHITESPACE",
+	"SIGNIFICANT_WHITESPACE",
+	"END_ELEMENT",
+	"END_ENTITY",
+	"XML_DECLARATION",
+	"LOADDTD",
+	"DEFAULTATTRS",
+	"VALIDATE",
+	"SUBST_ENTITIES" );
+foreach( $xmlReaderConstants as $name ) {
+	$fullName = "XMLREADER_$name";
+	$newName = "XMLReader::$name";
+	if( !defined( $fullName ) ) {
+		if( defined( $newName ) ) {
+			define( $fullName, constant( $newName ) );
+		} else {
+			// broken or missing the extension...
+		}
+	}
+}
+
+/**
+ * Readahead helper for making large MediaWiki data dumps;
+ * reads in a previous XML dump to sequentially prefetch text
+ * records already normalized and decompressed.
+ *
+ * This can save load on the external database servers, hopefully.
+ *
+ * Assumes that dumps will be recorded in the canonical order:
+ * - ascending by page_id
+ * - ascending by rev_id within each page
+ * - text contents are immutable and should not change once
+ *   recorded, so the previous dump is a reliable source
+ *
+ * Requires PHP 5 and the XMLReader PECL extension.
+ */
+class BaseDump {
+	var $reader = null;
+	var $atEnd = false;
+	var $atPageEnd = false;
+	var $lastPage = 0;
+	var $lastRev = 0;
+
+	function BaseDump( $infile ) {
+		$this->reader = new XMLReader();
+		$this->reader->open( $infile );
+	}
+
+	/**
+	 * Attempts to fetch the text of a particular page revision
+	 * from the dump stream. May return null if the page is
+	 * unavailable.
+	 *
+	 * @param int $page ID number of page to read
+	 * @param int $rev ID number of revision to read
+	 * @return string or null
+	 */
+	function prefetch( $page, $rev ) {
+		$page = intval( $page );
+		$rev = intval( $rev );
+		while( $this->lastPage < $page && !$this->atEnd ) {
+			$this->debug( "BaseDump::prefetch at page $this->lastPage, looking for $page" );
+			$this->nextPage();
+		}
+		if( $this->lastPage > $page || $this->atEnd ) {
+			$this->debug( "BaseDump::prefetch already past page $page looking for rev $rev  [$this->lastPage, $this->lastRev]" );
+			return null;
+		}
+		while( $this->lastRev < $rev && !$this->atEnd && !$this->atPageEnd ) {
+			$this->debug( "BaseDump::prefetch at page $this->lastPage, rev $this->lastRev, looking for $page, $rev" );
+			$this->nextRev();
+		}
+		if( $this->lastRev == $rev && !$this->atEnd ) {
+			$this->debug( "BaseDump::prefetch hit on $page, $rev [$this->lastPage, $this->lastRev]" );
+			return $this->nextText();
+		} else {
+			$this->debug( "BaseDump::prefetch already past rev $rev on page $page  [$this->lastPage, $this->lastRev]" );
+			return null;
+		}
+	}
+
+	function debug( $str ) {
+		wfDebug( $str . "\n" );
+		//global $dumper;
+		//$dumper->progress( $str );
+	}
+
+	/**
+	 * @access private
+	 */
+	function nextPage() {
+		if( $this->skipTo( 'page', 'mediawiki' ) ) {
+			if( $this->skipTo( 'id' ) ) {
+				$this->lastPage = intval( $this->nodeContents() );
+				$this->lastRev = 0;
+				$this->atPageEnd = false;
+			}
+		} else {
+			$this->atEnd = true;
+		}
+	}
+
+	/**
+	 * @access private
+	 */
+	function nextRev() {
+		if( $this->skipTo( 'revision' ) ) {
+			if( $this->skipTo( 'id' ) ) {
+				$this->lastRev = intval( $this->nodeContents() );
+			}
+		} else {
+			$this->atPageEnd = true;
+		}
+	}
+
+	/**
+	 * @access private
+	 */
+	function nextText() {
+		$this->skipTo( 'text' );
+		return strval( $this->nodeContents() );
+	}
+
+	/**
+	 * @access private
+	 */
+	function skipTo( $name, $parent='page' ) {
+		if( $this->atEnd ) {
+			return false;
+		}
+		while( $this->reader->read() ) {
+			if( $this->reader->nodeType == XMLREADER_ELEMENT &&
+				$this->reader->name == $name ) {
+				return true;
+			}
+			if( $this->reader->nodeType == XMLREADER_END_ELEMENT &&
+				$this->reader->name == $parent ) {
+				$this->debug( "BaseDump::skipTo found </$parent> searching for <$name>" );
+				return false;
+			}
+		}
+		return $this->close();
+	}
+
+	/**
+	 * Shouldn't something like this be built-in to XMLReader?
+	 * Fetches text contents of the current element, assuming
+	 * no sub-elements or such scary things.
+	 * @return string
+	 * @access private
+	 */
+	function nodeContents() {
+		if( $this->atEnd ) {
+			return null;
+		}
+		if( $this->reader->isEmptyElement ) {
+			return "";
+		}
+		$buffer = "";
+		while( $this->reader->read() ) {
+			switch( $this->reader->nodeType ) {
+			case XMLREADER_TEXT:
+//			case XMLREADER_WHITESPACE:
+			case XMLREADER_SIGNIFICANT_WHITESPACE:
+				$buffer .= $this->reader->value;
+				break;
+			case XMLREADER_END_ELEMENT:
+				return $buffer;
+			}
+		}
+		return $this->close();
+	}
+
+	/**
+	 * @access private
+	 */
+	function close() {
+		$this->reader->close();
+		$this->atEnd = true;
+		return null;
+	}
+}
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/benchmarkPurge.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/benchmarkPurge.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/benchmarkPurge.php	(revision 1280)
@@ -0,0 +1,64 @@
+<?php
+/**
+ * Squid purge benchmark script
+ * @addtogroup Maintenance
+ */
+
+/** */
+require_once( "commandLine.inc" );
+
+/** @todo document */
+function benchSquid( $urls, $trials = 1 ) {
+	$start = wfTime();
+	for( $i = 0; $i < $trials; $i++) {
+		SquidUpdate::purge( $urls );
+	}
+	$delta = wfTime() - $start;
+	$pertrial = $delta / $trials;
+	$pertitle = $pertrial / count( $urls );
+	return sprintf( "%4d titles in %6.2fms (%6.2fms each)",
+		count( $urls ), $pertrial * 1000.0, $pertitle * 1000.0 );
+}
+
+/** @todo document */
+function randomUrlList( $length ) {
+	$list = array();
+	for( $i = 0; $i < $length; $i++ ) {
+		$list[] = randomUrl();
+	}
+	return $list;
+}
+
+/** @todo document */
+function randomUrl() {
+	global $wgServer, $wgArticlePath;
+	return $wgServer . str_replace( '$1', randomTitle(), $wgArticlePath );
+}
+
+/** @todo document */
+function randomTitle() {
+	$str = '';
+	$length = mt_rand( 1, 20 );
+	for( $i = 0; $i < $length; $i++ ) {
+		$str .= chr( mt_rand( ord('a'), ord('z') ) );
+	}
+	return ucfirst( $str );
+}
+
+if( !$wgUseSquid ) {
+	wfDie( "Squid purge benchmark doesn't do much without squid support on.\n" );
+} else {
+	printf( "There are %d defined squid servers:\n", count( $wgSquidServers ) );
+	#echo implode( "\n", $wgSquidServers ) . "\n";
+	if( isset( $options['count'] ) ) {
+		$lengths = array( intval( $options['count'] ) );
+	} else {
+		$lengths = array( 1, 10, 100 );
+	}
+	foreach( $lengths as $length ) {
+		$urls = randomUrlList( $length );
+		$trial = benchSquid( $urls );
+		print "$trial\n";
+	}
+}
+?>
Index: /MediaWiki/branches/1.11/maintenance/build-intl-wiki.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/build-intl-wiki.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/build-intl-wiki.sql	(revision 1280)
@@ -0,0 +1,31 @@
+-- Experimental: create shared international database
+-- for new interlinking code.
+--
+
+CREATE DATABASE intl;
+
+GRANT DELETE,INSERT,SELECT,UPDATE ON intl.*
+TO wikiuser@'%' IDENTIFIED BY 'userpass';
+GRANT DELETE,INSERT,SELECT,UPDATE ON intl.*
+TO wikiuser@localhost IDENTIFIED BY 'userpass';
+GRANT DELETE,INSERT,SELECT,UPDATE ON intl.*
+TO wikiuser@localhost.localdomain IDENTIFIED BY 'userpass';
+
+USE intl;
+
+CREATE TABLE ilinks (
+ lang_from varchar(5) default NULL,
+ lang_to varchar(5) default NULL,
+ title_from tinyblob,
+ title_to tinyblob,
+ target_exists tinyint(1) default NULL
+) TYPE=MyISAM;
+
+CREATE TABLE recentchanges (
+ user_name tinyblob,
+ user_lang varchar(5) default NULL,
+ date timestamp(14) NOT NULL,
+ message tinyblob
+) TYPE=MyISAM;
+
+
Index: /MediaWiki/branches/1.11/maintenance/changePassword.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/changePassword.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/changePassword.php	(revision 1280)
@@ -0,0 +1,52 @@
+<?php
+/**
+ * Change the password of a given user
+ *
+ * @addtogroup Maintenance
+ *
+ * @author Ævar Arnfjörð Bjarmason <avarab@gmail.com>
+ * @copyright Copyright © 2005, Ævar Arnfjörð Bjarmason
+ * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
+ */
+
+class ChangePassword {
+	var $dbw;
+	var $user, $password;
+
+	function ChangePassword( $user, $password ) {
+		$this->user = User::newFromName( $user );
+		$this->password = $password;
+
+		$this->dbw = wfGetDB( DB_MASTER );
+	}
+
+	function main() {
+		$fname = 'ChangePassword::main';
+
+		$this->dbw->update( 'user',
+			array(
+				'user_password' => wfEncryptPassword( $this->user->getID(), $this->password )
+			),
+			array(
+				'user_id' => $this->user->getID()
+			),
+			$fname
+		);
+	}
+}
+
+$optionsWithArgs = array( 'user', 'password' );
+require_once 'commandLine.inc';
+
+if( in_array( '--help', $argv ) )
+	wfDie(
+		"Usage: php changePassword.php [--user=user --password=password | --help]\n" .
+		"\toptions:\n" .
+		"\t\t--help\tshow this message\n" .
+		"\t\t--user\tthe username to operate on\n" .
+		"\t\t--password\tthe password to use\n"
+	);
+
+$cp = new ChangePassword( @$options['user'], @$options['password'] );
+$cp->main();
+?>
Index: /MediaWiki/branches/1.11/maintenance/changeuser.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/changeuser.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/changeuser.sql	(revision 1280)
@@ -0,0 +1,12 @@
+set @oldname = 'At18'; 
+set @newname = 'Alfio';
+
+update low_priority /*$wgDBprefix*/user set user_name=@newname where user_name=@oldname;
+update low_priority /*$wgDBprefix*/user_newtalk set user_ip=@newname where user_ip=@oldname;
+update low_priority /*$wgDBprefix*/cur set cur_user_text=@newname where cur_user_text=@oldname;
+update low_priority /*$wgDBprefix*/old set old_user_text=@newname where old_user_text=@oldname;
+update low_priority /*$wgDBprefix*/archive set ar_user_text=@newname where ar_user_text=@oldname;
+update low_priority /*$wgDBprefix*/ipblocks set ipb_address=@newname where ipb_address=@oldname;
+update low_priority /*$wgDBprefix*/oldimage set oi_user_text=@newname where oi_user_text=@oldname;
+update low_priority /*$wgDBprefix*/recentchanges set rc_user_text=@newname where rc_user_text=@oldname;
+
Index: /MediaWiki/branches/1.11/maintenance/checkUsernames.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/checkUsernames.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/checkUsernames.php	(revision 1280)
@@ -0,0 +1,34 @@
+<?php
+error_reporting(E_ALL ^ E_NOTICE);
+require_once 'commandLine.inc';
+
+class checkUsernames {
+	var $stderr, $log;
+
+	function checkUsernames() {
+		$this->stderr = fopen( 'php://stderr', 'wt' );
+	}
+	function main() {
+		$fname = 'checkUsernames::main';
+
+		$dbr = wfGetDB( DB_SLAVE );
+
+		$res = $dbr->select( 'user',
+			array( 'user_id', 'user_name' ),
+			null,
+			$fname
+		);
+
+		while ( $row = $dbr->fetchObject( $res ) ) {
+			if ( ! User::isValidUserName( $row->user_name ) ) {
+				$out = sprintf( "%s: %6d: '%s'\n", wfWikiID(), $row->user_id, $row->user_name );
+				fwrite( $this->stderr, $out );
+				wfDebugLog( 'checkUsernames', $out );
+			}
+		}
+	}
+}
+
+$cun = new checkUsernames();
+$cun->main();
+?>
Index: /MediaWiki/branches/1.11/maintenance/cleanupCaps.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/cleanupCaps.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/cleanupCaps.php	(revision 1280)
@@ -0,0 +1,156 @@
+<?php
+/*
+ * Script to clean up broken page links when somebody turns on $wgCapitalLinks.
+ *
+ * Usage: php cleanupCaps.php [--dry-run]
+ * Options:
+ *   --dry-run  don't actually try moving them
+ *
+ * Copyright (C) 2005 Brion Vibber <brion@pobox.com>
+ * http://www.mediawiki.org/
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @author Brion Vibber <brion at pobox.com>
+ * @addtogroup maintenance
+ */
+
+$options = array( 'dry-run' );
+
+require_once( 'commandLine.inc' );
+require_once( 'FiveUpgrade.inc' );
+
+class CapsCleanup extends FiveUpgrade {
+	function CapsCleanup( $dryrun = false, $namespace=0 ) {
+		parent::FiveUpgrade();
+
+		$this->maxLag = 10; # if slaves are lagged more than 10 secs, wait
+		$this->dryrun = $dryrun;
+		$this->namespace = intval( $namespace );
+	}
+
+	function cleanup() {
+		global $wgCapitalLinks;
+		if( $wgCapitalLinks ) {
+			echo "\$wgCapitalLinks is on -- no need for caps links cleanup.\n";
+			return false;
+		}
+
+		$this->runTable( 'page', 'WHERE page_namespace=' . $this->namespace,
+			array( &$this, 'processPage' ) );
+	}
+
+	function init( $count, $table ) {
+		$this->processed = 0;
+		$this->updated = 0;
+		$this->count = $count;
+		$this->startTime = wfTime();
+		$this->table = $table;
+	}
+
+	function progress( $updated ) {
+		$this->updated += $updated;
+		$this->processed++;
+		if( $this->processed % 100 != 0 ) {
+			return;
+		}
+		$portion = $this->processed / $this->count;
+		$updateRate = $this->updated / $this->processed;
+
+		$now = wfTime();
+		$delta = $now - $this->startTime;
+		$estimatedTotalTime = $delta / $portion;
+		$eta = $this->startTime + $estimatedTotalTime;
+
+		printf( "%s: %6.2f%% done on %s; ETA %s [%d/%d] %.2f/sec <%.2f%% updated>\n",
+			wfTimestamp( TS_DB, intval( $now ) ),
+			$portion * 100.0,
+			$this->table,
+			wfTimestamp( TS_DB, intval( $eta ) ),
+			$this->processed,
+			$this->count,
+			$this->processed / $delta,
+			$updateRate * 100.0 );
+		flush();
+	}
+
+	function runTable( $table, $where, $callback ) {
+		$fname = 'CapsCleanup::buildTable';
+
+		$count = $this->dbw->selectField( $table, 'count(*)', '', $fname );
+		$this->init( $count, 'page' );
+		$this->log( "Processing $table..." );
+
+		$tableName = $this->dbr->tableName( $table );
+		$sql = "SELECT * FROM $tableName $where";
+		$result = $this->dbr->query( $sql, $fname );
+
+		while( $row = $this->dbr->fetchObject( $result ) ) {
+			call_user_func( $callback, $row );
+		}
+		$this->log( "Finished $table... $this->updated of $this->processed rows updated" );
+		$this->dbr->freeResult( $result );
+	}
+
+	function processPage( $row ) {
+		global $wgContLang;
+
+		$current = Title::makeTitle( $row->page_namespace, $row->page_title );
+		$display = $current->getPrefixedText();
+		$upper = $row->page_title;
+		$lower = $wgContLang->lcfirst( $row->page_title );
+		if( $upper == $lower ) {
+			$this->log( "\"$display\" already lowercase." );
+			return $this->progress( 0 );
+		}
+
+		$target = Title::makeTitle( $row->page_namespace, $lower );
+		$targetDisplay = $target->getPrefixedText();
+		if( $target->exists() ) {
+			$this->log( "\"$display\" skipped; \"$targetDisplay\" already exists" );
+			return $this->progress( 0 );
+		}
+
+		if( $this->dryrun ) {
+			$this->log( "\"$display\" -> \"$targetDisplay\": DRY RUN, NOT MOVED" );
+			$ok = true;
+		} else {
+			$ok = $current->moveTo( $target, false, 'Converting page titles to lowercase' );
+			$this->log( "\"$display\" -> \"$targetDisplay\": $ok" );
+		}
+		if( $ok === true ) {
+			$this->progress( 1 );
+
+			if( $row->page_namespace == $this->namespace ) {
+				$talk = $target->getTalkPage();
+				$row->page_namespace = $talk->getNamespace();
+				if( $talk->exists() ) {
+					return $this->processPage( $row );
+				}
+			}
+		} else {
+			$this->progress( 0 );
+		}
+	}
+
+}
+
+$wgUser->setName( 'Conversion script' );
+$ns = isset( $options['namespace'] ) ? $options['namespace'] : 0;
+$caps = new CapsCleanup( isset( $options['dry-run'] ), $ns );
+$caps->cleanup();
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/cleanupDupes.inc
===================================================================
--- /MediaWiki/branches/1.11/maintenance/cleanupDupes.inc	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/cleanupDupes.inc	(revision 1280)
@@ -0,0 +1,129 @@
+<?php
+# Copyright (C) 2004 Brion Vibber <brion@pobox.com>
+# http://www.mediawiki.org/
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+# http://www.gnu.org/copyleft/gpl.html
+
+/**
+ * If on the old non-unique indexes, check the cur table for duplicate
+ * entries and remove them...
+ *
+ * @addtogroup Maintenance
+ */
+
+function fixDupes( $fixthem = false) {
+	$dbw = wfGetDB( DB_MASTER );
+	$cur = $dbw->tableName( 'cur' );
+	$old = $dbw->tableName( 'old' );
+	$dbw->query( "LOCK TABLES $cur WRITE, $old WRITE" );
+	echo "Checking for duplicate cur table entries... (this may take a while on a large wiki)\n";
+	$res = $dbw->query( <<<END
+SELECT cur_namespace,cur_title,count(*) as c,min(cur_id) as id
+  FROM $cur
+ GROUP BY cur_namespace,cur_title
+HAVING c > 1
+END
+	);
+	$n = $dbw->numRows( $res );
+	echo "Found $n titles with duplicate entries.\n";
+	if( $n > 0 ) {
+		if( $fixthem ) {
+			echo "Correcting...\n";
+		} else {
+			echo "Just a demo...\n";
+		}
+		while( $row = $dbw->fetchObject( $res ) ) {
+			$ns = intval( $row->cur_namespace );
+			$title = $dbw->addQuotes( $row->cur_title );
+
+			# Get the first responding ID; that'll be the one we keep.
+			$id = $dbw->selectField( 'cur', 'cur_id', array(
+				'cur_namespace' => $row->cur_namespace,
+				'cur_title'     => $row->cur_title ) );
+
+			echo "$ns:$row->cur_title (canonical ID $id)\n";
+			if( $id != $row->id ) {
+				echo "  ** minimum ID $row->id; ";
+				$timeMin = $dbw->selectField( 'cur', 'cur_timestamp', array(
+					'cur_id' => $row->id ) );
+				$timeFirst = $dbw->selectField( 'cur', 'cur_timestamp', array(
+					'cur_id' => $id ) );
+				if( $timeMin == $timeFirst ) {
+					echo "timestamps match at $timeFirst; ok\n";
+				} else {
+					echo "timestamps don't match! min: $timeMin, first: $timeFirst; ";
+					if( $timeMin > $timeFirst ) {
+						$id = $row->id;
+						echo "keeping minimum: $id\n";
+					} else {
+						echo "keeping first: $id\n";
+					}
+				}
+			}
+
+			if( $fixthem ) {
+				$dbw->query( <<<END
+INSERT
+  INTO $old
+      (old_namespace, old_title,      old_text,
+       old_comment,   old_user,       old_user_text,
+       old_timestamp, old_minor_edit, old_flags,
+       inverse_timestamp)
+SELECT cur_namespace, cur_title,      cur_text,
+       cur_comment,   cur_user,       cur_user_text,
+       cur_timestamp, cur_minor_edit, '',
+       inverse_timestamp
+  FROM $cur
+ WHERE cur_namespace=$ns
+   AND cur_title=$title
+   AND cur_id != $id
+END
+				);
+				$dbw->query( <<<END
+DELETE
+  FROM $cur
+ WHERE cur_namespace=$ns
+   AND cur_title=$title
+   AND cur_id != $id
+END
+				);
+			}
+		}
+	}
+	$dbw->query( 'UNLOCK TABLES' );
+	if( $fixthem ) {
+		echo "Done.\n";
+	} else {
+		echo "Run again with --fix option to delete the duplicates.\n";
+	}
+}
+
+function checkDupes( $fixthem = false, $indexonly = false ) {
+	$dbw = wfGetDB( DB_MASTER );
+	if( $dbw->indexExists( 'cur', 'name_title' ) &&
+	    $dbw->indexUnique( 'cur', 'name_title' ) ) {
+		echo wfWikiID().": cur table has the current unique index; no duplicate entries.\n";
+	} elseif( $dbw->indexExists( 'cur', 'name_title_dup_prevention' ) ) {
+		echo wfWikiID().": cur table has a temporary name_title_dup_prevention unique index; no duplicate entries.\n";
+	} else {
+		echo wfWikiID().": cur table has the old non-unique index and may have duplicate entries.\n";
+		if( !$indexonly ) {
+			fixDupes( $fixthem );
+		}
+	}
+}
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/cleanupDupes.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/cleanupDupes.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/cleanupDupes.php	(revision 1280)
@@ -0,0 +1,36 @@
+<?php
+# Copyright (C) 2004 Brion Vibber <brion@pobox.com>
+# http://www.mediawiki.org/
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+# http://www.gnu.org/copyleft/gpl.html
+
+/**
+ * If on the old non-unique indexes, check the cur table for duplicate
+ * entries and remove them...
+ *
+ * @addtogroup Maintenance
+ */
+
+$options = array( 'fix', 'index' );
+
+/** */
+require_once( 'commandLine.inc' );
+require_once( 'cleanupDupes.inc' );
+$wgTitle = Title::newFromText( 'Dupe cur entry cleanup script' );
+
+checkDupes( isset( $options['fix'] ), isset( $options['index'] ) );
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/cleanupImages.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/cleanupImages.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/cleanupImages.php	(revision 1280)
@@ -0,0 +1,167 @@
+<?php
+/*
+ * Script to clean up broken, unparseable upload filenames.
+ *
+ * Usage: php cleanupImages.php [--fix]
+ * Options:
+ *   --fix  Actually clean up titles; otherwise just checks for them
+ *
+ * Copyright (C) 2005-2006 Brion Vibber <brion@pobox.com>
+ * http://www.mediawiki.org/
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @author Brion Vibber <brion at pobox.com>
+ * @addtogroup maintenance
+ */
+
+require_once( 'commandLine.inc' );
+require_once( 'cleanupTable.inc' );
+
+class ImageCleanup extends TableCleanup {
+	function __construct( $dryrun = false ) {
+		parent::__construct( 'image', $dryrun );
+	}
+
+	function processPage( $row ) {
+		global $wgContLang;
+
+		$source = $row->img_name;
+		if( $source == '' ) {
+			// Ye olde empty rows. Just kill them.
+			$this->killRow( $source );
+			return $this->progress( 1 );
+		}
+		
+		$cleaned = $source;
+		
+		// About half of old bad image names have percent-codes
+		$cleaned = rawurldecode( $cleaned );
+		
+		// Some are old latin-1
+		$cleaned = $wgContLang->checkTitleEncoding( $cleaned );
+		
+		// Many of remainder look like non-normalized unicode
+		$cleaned = UtfNormal::cleanUp( $cleaned );
+		
+		$title = Title::makeTitleSafe( NS_IMAGE, $cleaned );
+		
+		if( is_null( $title ) ) {
+			$this->log( "page $source ($cleaned) is illegal." );
+			$safe = $this->buildSafeTitle( $cleaned );
+			$this->pokeFile( $source, $safe );
+			return $this->progress( 1 );
+		}
+
+		if( $title->getDbKey() !== $source ) {
+			$munged = $title->getDbKey();
+			$this->log( "page $source ($munged) doesn't match self." );
+			$this->pokeFile( $source, $munged );
+			return $this->progress( 1 );
+		}
+
+		$this->progress( 0 );
+	}
+	
+	function killRow( $name ) {
+		if( $this->dryrun ) {
+			$this->log( "DRY RUN: would delete bogus row '$name'" );
+		} else {
+			$this->log( "deleting bogus row '$name'" );
+			$db = wfGetDB( DB_MASTER );
+			$db->delete( 'image',
+				array( 'img_name' => $name ),
+				__METHOD__ );
+		}
+	}
+	
+	function filePath( $name ) {
+		return wfImageDir( $name ) . "/$name";
+	}
+	
+	function pokeFile( $orig, $new ) {
+		$path = $this->filePath( $orig );
+		if( !file_exists( $path ) ) {
+			$this->log( "missing file: $path" );
+			return $this->killRow( $orig );
+		}
+		
+		$db = wfGetDB( DB_MASTER );
+		$version = 0;
+		$final = $new;
+		
+		while( $db->selectField( 'image', 'img_name',
+			array( 'img_name' => $final ), __METHOD__ ) ) {
+			$this->log( "Rename conflicts with '$final'..." );
+			$version++;
+			$final = $this->appendTitle( $new, "_$version" );
+		}
+		
+		$finalPath = $this->filePath( $final );
+		
+		if( $this->dryrun ) {
+			$this->log( "DRY RUN: would rename $path to $finalPath" );
+		} else {
+			$this->log( "renaming $path to $finalPath" );
+			$db->begin();
+			$db->update( 'image',
+				array( 'img_name' => $final ),
+				array( 'img_name' => $orig ),
+				__METHOD__ );
+			$dir = dirname( $finalPath );
+			if( !file_exists( $dir ) ) {
+				if( !mkdir( $dir, 0777, true ) ) {
+					$this->log( "RENAME FAILED, COULD NOT CREATE $dir" );
+					$db->rollback();
+					return;
+				}
+			}
+			if( rename( $path, $finalPath ) ) {
+				$db->commit();
+			} else {
+				$this->log( "RENAME FAILED" );
+				$db->rollback();
+			}
+		}
+	}
+	
+	function appendTitle( $name, $suffix ) {
+		return preg_replace( '/^(.*)(\..*?)$/',
+			"\\1$suffix\\2", $name );
+	}
+	
+	function buildSafeTitle( $name ) {
+		global $wgLegalTitleChars;
+		$x = preg_replace_callback(
+			"/([^$wgLegalTitleChars])/",
+			array( $this, 'hexChar' ),
+			$name );
+		
+		$test = Title::makeTitleSafe( NS_IMAGE, $x );
+		if( is_null( $test ) || $test->getDbKey() !== $x ) {
+			$this->log( "Unable to generate safe title from '$name', got '$x'" );
+			return false;
+		}
+		
+		return $x;
+	}
+}
+
+$wgUser->setName( 'Conversion script' );
+$caps = new ImageCleanup( !isset( $options['fix'] ) );
+$caps->cleanup();
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/cleanupSpam.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/cleanupSpam.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/cleanupSpam.php	(revision 1280)
@@ -0,0 +1,111 @@
+<?php
+
+require_once( 'commandLine.inc' );
+require_once( "$IP/includes/LinkFilter.php" );
+
+function cleanupArticle( $id, $domain ) {
+	$title = Title::newFromID( $id );
+	if ( !$title ) {
+		print "Internal error: no page for ID $id\n";
+		return;
+	}
+
+	print $title->getPrefixedDBkey() . " ...";
+	$rev = Revision::newFromTitle( $title );
+	$revId = $rev->getId();
+	$currentRevId = $revId;
+	$regex = LinkFilter::makeRegex( $domain );
+	
+	while ( $rev && preg_match( $regex, $rev->getText() ) ) {
+		# Revision::getPrevious can't be used in this way before MW 1.6 (Revision.php 1.26)
+		#$rev = $rev->getPrevious();
+		$revId = $title->getPreviousRevisionID( $revId );
+		if ( $revId ) {
+			$rev = Revision::newFromTitle( $title, $revId );
+		} else {
+			$rev = false;
+		}
+	}
+	if ( $revId == $currentRevId ) {
+		// The regex didn't match the current article text
+		// This happens e.g. when a link comes from a template rather than the page itself
+		print "False match\n";
+	} else {
+		$dbw = wfGetDB( DB_MASTER );
+		$dbw->immediateBegin();
+		if ( !$rev ) {
+			// Didn't find a non-spammy revision, blank the page
+			print "blanking\n";
+			$article = new Article( $title );
+			$article->updateArticle( '', wfMsg( 'spam_blanking', $domain ),
+				false, false );
+
+		} else {
+			// Revert to this revision
+			print "reverting\n";
+			$article = new Article( $title );
+			$article->updateArticle( $rev->getText(), wfMsg( 'spam_reverting', $domain ), false, false );
+		}
+		$dbw->immediateCommit();
+		wfDoUpdates();
+	}
+}
+//------------------------------------------------------------------------------
+
+
+
+
+$username = wfMsg( 'spambot_username' );
+$fname = $username;
+$wgUser = User::newFromName( $username );
+// Create the user if necessary
+if ( !$wgUser->getID() ) {
+	$wgUser->addToDatabase();
+}
+
+if ( !isset( $args[0] ) ) {
+	print "Usage: php cleanupSpam.php <hostname>\n";
+	exit(1);
+}
+$spec = $args[0];
+$like = LinkFilter::makeLike( $spec );
+if ( !$like ) {
+	print "Not a valid hostname specification: $spec\n";
+	exit(1);
+}
+
+$dbr = wfGetDB( DB_SLAVE );
+
+if ( isset($options['all']) ) {
+	// Clean up spam on all wikis
+	$dbr = wfGetDB( DB_SLAVE );
+	print "Finding spam on " . count($wgLocalDatabases) . " wikis\n";
+	$found = false;
+	foreach ( $wgLocalDatabases as $db ) {
+		$count = $dbr->selectField( "`$db`.externallinks", 'COUNT(*)', 
+			array( 'el_index LIKE ' . $dbr->addQuotes( $like ) ), $fname );
+		if ( $count ) {
+			$found = true;
+			passthru( "php cleanupSpam.php $db $spec | sed s/^/$db:  /" );
+		}
+	}
+	if ( $found ) {
+		print "All done\n";
+	} else {
+		print "None found\n";
+	}
+} else {
+	// Clean up spam on this wiki
+	$res = $dbr->select( 'externallinks', array( 'DISTINCT el_from' ), 
+		array( 'el_index LIKE ' . $dbr->addQuotes( $like ) ), $fname );
+	$count = $dbr->numRows( $res );
+	print "Found $count articles containing $spec\n";
+	while ( $row = $dbr->fetchObject( $res ) ) {
+		cleanupArticle( $row->el_from, $spec );
+	}
+	if ( $count ) {
+		print "Done\n";
+	}
+}
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/cleanupTable.inc
===================================================================
--- /MediaWiki/branches/1.11/maintenance/cleanupTable.inc	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/cleanupTable.inc	(revision 1280)
@@ -0,0 +1,86 @@
+<?php
+
+require_once( 'FiveUpgrade.inc' );
+
+abstract class TableCleanup extends FiveUpgrade {
+	function __construct( $table, $dryrun = false ) {
+		parent::__construct();
+
+		$this->targetTable = $table;
+		$this->maxLag = 10; # if slaves are lagged more than 10 secs, wait
+		$this->dryrun = $dryrun;
+	}
+
+	function cleanup() {
+		if( $this->dryrun ) {
+			echo "Checking for bad titles...\n";
+		} else {
+			echo "Checking and fixing bad titles...\n";
+		}
+		$this->runTable( $this->targetTable,
+			'', //'WHERE page_namespace=0',
+			array( $this, 'processPage' ) );
+	}
+
+	function init( $count, $table ) {
+		$this->processed = 0;
+		$this->updated = 0;
+		$this->count = $count;
+		$this->startTime = wfTime();
+		$this->table = $table;
+	}
+
+	function progress( $updated ) {
+		$this->updated += $updated;
+		$this->processed++;
+		if( $this->processed % 100 != 0 ) {
+			return;
+		}
+		$portion = $this->processed / $this->count;
+		$updateRate = $this->updated / $this->processed;
+
+		$now = wfTime();
+		$delta = $now - $this->startTime;
+		$estimatedTotalTime = $delta / $portion;
+		$eta = $this->startTime + $estimatedTotalTime;
+
+		printf( "%s %s: %6.2f%% done on %s; ETA %s [%d/%d] %.2f/sec <%.2f%% updated>\n",
+			wfWikiID(),
+			wfTimestamp( TS_DB, intval( $now ) ),
+			$portion * 100.0,
+			$this->table,
+			wfTimestamp( TS_DB, intval( $eta ) ),
+			$this->processed,
+			$this->count,
+			$this->processed / $delta,
+			$updateRate * 100.0 );
+		flush();
+	}
+
+	function runTable( $table, $where, $callback ) {
+		$fname = 'CapsCleanup::buildTable';
+
+		$count = $this->dbw->selectField( $table, 'count(*)', '', $fname );
+		$this->init( $count, $table );
+		$this->log( "Processing $table..." );
+
+		$tableName = $this->dbr->tableName( $table );
+		$sql = "SELECT * FROM $tableName $where";
+		$result = $this->dbr->query( $sql, $fname );
+
+		while( $row = $this->dbr->fetchObject( $result ) ) {
+			call_user_func( $callback, $row );
+		}
+		$this->log( "Finished $table... $this->updated of $this->processed rows updated" );
+		$this->dbr->freeResult( $result );
+	}
+
+	function hexChar( $matches ) {
+		return sprintf( "\\x%02x", ord( $matches[1] ) );
+	}
+	
+	abstract function processPage( $row );
+	
+}
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/cleanupTitles.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/cleanupTitles.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/cleanupTitles.php	(revision 1280)
@@ -0,0 +1,138 @@
+<?php
+/*
+ * Script to clean up broken, unparseable titles.
+ *
+ * Usage: php cleanupTitles.php [--fix]
+ * Options:
+ *   --fix  Actually clean up titles; otherwise just checks for them
+ *
+ * Copyright (C) 2005 Brion Vibber <brion@pobox.com>
+ * http://www.mediawiki.org/
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @author Brion Vibber <brion at pobox.com>
+ * @addtogroup maintenance
+ */
+
+require_once( 'commandLine.inc' );
+require_once( 'cleanupTable.inc' );
+
+class TitleCleanup extends TableCleanup {
+	function __construct( $dryrun = false ) {
+		parent::__construct( 'page', $dryrun );
+	}
+
+	function processPage( $row ) {
+		$current = Title::makeTitle( $row->page_namespace, $row->page_title );
+		$display = $current->getPrefixedText();
+
+		$verified = UtfNormal::cleanUp( $display );
+
+		$title = Title::newFromText( $verified );
+
+		if( is_null( $title ) ) {
+			$this->log( "page $row->page_id ($display) is illegal." );
+			$this->moveIllegalPage( $row );
+			return $this->progress( 1 );
+		}
+
+		if( !$title->equals( $current ) ) {
+			$this->log( "page $row->page_id ($display) doesn't match self." );
+			$this->moveInconsistentPage( $row, $title );
+			return $this->progress( 1 );
+		}
+
+		$this->progress( 0 );
+	}
+
+	function moveIllegalPage( $row ) {
+		$legal = 'A-Za-z0-9_/\\\\-';
+		$legalized = preg_replace_callback( "!([^$legal])!",
+			array( &$this, 'hexChar' ),
+			$row->page_title );
+		if( $legalized == '.' ) $legalized = '(dot)';
+		if( $legalized == '_' ) $legalized = '(space)';
+		$legalized = 'Broken/' . $legalized;
+
+		$title = Title::newFromText( $legalized );
+		if( is_null( $title ) ) {
+			$clean = 'Broken/id:' . $row->page_id;
+			$this->log( "Couldn't legalize; form '$legalized' still invalid; using '$clean'" );
+			$title = Title::newFromText( $clean );
+		} elseif( $title->exists() ) {
+			$clean = 'Broken/id:' . $row->page_id;
+			$this->log( "Legalized for '$legalized' exists; using '$clean'" );
+			$title = Title::newFromText( $clean );
+		}
+
+		$dest = $title->getDbKey();
+		if( $this->dryrun ) {
+			$this->log( "DRY RUN: would rename $row->page_id ($row->page_namespace,'$row->page_title') to ($row->page_namespace,'$dest')" );
+		} else {
+			$this->log( "renaming $row->page_id ($row->page_namespace,'$row->page_title') to ($row->page_namespace,'$dest')" );
+			$dbw = wfGetDB( DB_MASTER );
+			$dbw->update( 'page',
+				array( 'page_title' => $dest ),
+				array( 'page_id' => $row->page_id ),
+				'cleanupTitles::moveInconsistentPage' );
+		}
+	}
+
+	function moveInconsistentPage( $row, $title ) {
+		if( $title->exists() || $title->getInterwiki() ) {
+			if( $title->getInterwiki() ) {
+				$prior = $title->getPrefixedDbKey();
+			} else {
+				$prior = $title->getDbKey();
+			}
+			$clean = 'Broken/' . $prior;
+			$verified = Title::makeTitleSafe( $row->page_namespace, $clean );
+			if( $verified->exists() ) {
+				$blah = "Broken/id:" . $row->page_id;
+				$this->log( "Couldn't legalize; form '$clean' exists; using '$blah'" );
+				$verified = Title::makeTitleSafe( $row->page_namespace, $blah );
+			}
+			$title = $verified;
+		}
+		if( is_null( $title ) ) {
+			wfDie( "Something awry; empty title.\n" );
+		}
+		$ns = $title->getNamespace();
+		$dest = $title->getDbKey();
+		if( $this->dryrun ) {
+			$this->log( "DRY RUN: would rename $row->page_id ($row->page_namespace,'$row->page_title') to ($row->page_namespace,'$dest')" );
+		} else {
+			$this->log( "renaming $row->page_id ($row->page_namespace,'$row->page_title') to ($ns,'$dest')" );
+			$dbw = wfGetDB( DB_MASTER );
+			$dbw->update( 'page',
+				array(
+					'page_namespace' => $ns,
+					'page_title' => $dest
+				),
+				array( 'page_id' => $row->page_id ),
+				'cleanupTitles::moveInconsistentPage' );
+			$linkCache =& LinkCache::singleton();
+			$linkCache->clear();
+		}
+	}
+}
+
+$wgUser->setName( 'Conversion script' );
+$caps = new TitleCleanup( !isset( $options['fix'] ) );
+$caps->cleanup();
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/cleanupWatchlist.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/cleanupWatchlist.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/cleanupWatchlist.php	(revision 1280)
@@ -0,0 +1,137 @@
+<?php
+/*
+ * Script to remove broken, unparseable titles in the Watchlist.
+ *
+ * Usage: php cleanupWatchlist.php [--fix]
+ * Options:
+ *   --fix  Actually remove entries; without will only report.
+ *
+ * Copyright (C) 2005,2006 Brion Vibber <brion@pobox.com>
+ * http://www.mediawiki.org/
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @author Brion Vibber <brion at pobox.com>
+ * @addtogroup maintenance
+ */
+
+$options = array( 'fix' );
+
+require_once( 'commandLine.inc' );
+require_once( 'FiveUpgrade.inc' );
+
+class WatchlistCleanup extends FiveUpgrade {
+	function WatchlistCleanup( $dryrun = false ) {
+		parent::FiveUpgrade();
+
+		$this->maxLag = 10; # if slaves are lagged more than 10 secs, wait
+		$this->dryrun = $dryrun;
+	}
+
+	function cleanup() {
+		$this->runTable( 'watchlist',
+			'',
+			array( &$this, 'processEntry' ) );
+	}
+
+	function init( $count, $table ) {
+		$this->processed = 0;
+		$this->updated = 0;
+		$this->count = $count;
+		$this->startTime = wfTime();
+		$this->table = $table;
+	}
+
+	function progress( $updated ) {
+		$this->updated += $updated;
+		$this->processed++;
+		if( $this->processed % 100 != 0 ) {
+			return;
+		}
+		$portion = $this->processed / $this->count;
+		$updateRate = $this->updated / $this->processed;
+
+		$now = wfTime();
+		$delta = $now - $this->startTime;
+		$estimatedTotalTime = $delta / $portion;
+		$eta = $this->startTime + $estimatedTotalTime;
+
+		printf( "%s %s: %6.2f%% done on %s; ETA %s [%d/%d] %.2f/sec <%.2f%% updated>\n",
+			wfWikiID(),
+			wfTimestamp( TS_DB, intval( $now ) ),
+			$portion * 100.0,
+			$this->table,
+			wfTimestamp( TS_DB, intval( $eta ) ),
+			$this->processed,
+			$this->count,
+			$this->processed / $delta,
+			$updateRate * 100.0 );
+		flush();
+	}
+
+	function runTable( $table, $where, $callback ) {
+		$fname = 'WatchlistCleanup::runTable';
+
+		$count = $this->dbw->selectField( $table, 'count(*)', '', $fname );
+		$this->init( $count, 'watchlist' );
+		$this->log( "Processing $table..." );
+
+		$tableName = $this->dbr->tableName( $table );
+		$sql = "SELECT * FROM $tableName $where";
+		$result = $this->dbr->query( $sql, $fname );
+
+		while( $row = $this->dbr->fetchObject( $result ) ) {
+			call_user_func( $callback, $row );
+		}
+		$this->log( "Finished $table... $this->updated of $this->processed rows updated" );
+		$this->dbr->freeResult( $result );
+	}
+
+	function processEntry( $row ) {
+		$current = Title::makeTitle( $row->wl_namespace, $row->wl_title );
+		$display = $current->getPrefixedText();
+
+		$verified = UtfNormal::cleanUp( $display );
+
+		$title = Title::newFromText( $verified );
+
+		if( $row->wl_user == 0 || is_null( $title ) || !$title->equals( $current ) ) {
+			$this->log( "invalid watch by {$row->wl_user} for ({$row->wl_namespace}, \"{$row->wl_title}\")" );
+			$this->removeWatch( $row );
+			return $this->progress( 1 );
+		}
+
+		$this->progress( 0 );
+	}
+	
+	function removeWatch( $row ) {
+		if( !$this->dryrun) {
+			$dbw = wfGetDB( DB_MASTER );
+			$dbw->delete( 'watchlist', array(
+				'wl_user'      => $row->wl_user,
+				'wl_namespace' => $row->wl_namespace,
+				'wl_title'     => $row->wl_title ),
+			'WatchlistCleanup::removeWatch' );
+			$this->log( '- removed' );
+		}
+	}
+}
+
+$wgUser->setName( 'Conversion script' );
+$caps = new WatchlistCleanup( !isset( $options['fix'] ) );
+$caps->cleanup();
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/clear_interwiki_cache.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/clear_interwiki_cache.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/clear_interwiki_cache.php	(revision 1280)
@@ -0,0 +1,25 @@
+<?php
+/**
+ * This script is used to clear the interwiki links for ALL languages in
+ * memcached.
+ * @addtogroup Maintenance
+ */
+
+/** */
+require_once('commandLine.inc');
+
+$dbr = wfGetDB( DB_SLAVE );
+$res = $dbr->select( 'interwiki', array( 'iw_prefix' ), false );
+$prefixes = array();
+while ( $row = $dbr->fetchObject( $res ) ) {
+	$prefixes[] = $row->iw_prefix;
+}
+
+foreach ( $wgLocalDatabases as $db ) {
+	print "$db ";
+	foreach ( $prefixes as $prefix ) {
+		$wgMemc->delete("$db:interwiki:$prefix");
+	}
+}
+print "\n";
+?>
Index: /MediaWiki/branches/1.11/maintenance/clear_stats.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/clear_stats.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/clear_stats.php	(revision 1280)
@@ -0,0 +1,31 @@
+<?php
+require_once('commandLine.inc');
+
+foreach ( $wgLocalDatabases as $db ) {
+	noisyDelete("$db:stats:request_with_session");
+	noisyDelete("$db:stats:request_without_session");
+	noisyDelete("$db:stats:pcache_hit");
+	noisyDelete("$db:stats:pcache_miss_invalid");
+	noisyDelete("$db:stats:pcache_miss_expired");
+	noisyDelete("$db:stats:pcache_miss_absent");
+	noisyDelete("$db:stats:pcache_miss_stub");
+	noisyDelete("$db:stats:image_cache_hit");
+	noisyDelete("$db:stats:image_cache_miss");
+	noisyDelete("$db:stats:image_cache_update");
+	noisyDelete("$db:stats:diff_cache_hit");
+	noisyDelete("$db:stats:diff_cache_miss");
+	noisyDelete("$db:stats:diff_uncacheable");
+}
+
+function noisyDelete( $key ) {
+	global $wgMemc;
+	/*
+	print "$key ";
+	if ( $wgMemc->delete($key) ) {
+		print "deleted\n";
+	} else {
+		print "FAILED\n";
+	}*/
+	$wgMemc->delete($key);
+}
+?>
Index: /MediaWiki/branches/1.11/maintenance/commandLine.inc
===================================================================
--- /MediaWiki/branches/1.11/maintenance/commandLine.inc	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/commandLine.inc	(revision 1280)
@@ -0,0 +1,244 @@
+<?php
+/**
+ * @todo document
+ * @addtogroup Maintenance
+ */
+
+$wgRequestTime = microtime(true);
+
+/** */
+# Abort if called from a web server
+if ( isset( $_SERVER ) && array_key_exists( 'REQUEST_METHOD', $_SERVER ) ) {
+	print "This script must be run from the command line\n";
+	exit();
+}
+
+if( version_compare( PHP_VERSION, '5.0.0' ) < 0 ) {
+	print "Sorry! This version of MediaWiki requires PHP 5; you are running " .
+		PHP_VERSION . ".\n\n" .
+		"If you are sure you already have PHP 5 installed, it may be " .
+		"installed\n" .
+		"in a different path from PHP 4. Check with your system administrator.\n";
+	die( -1 );
+}
+
+define('MEDIAWIKI',true);
+
+# Process command line arguments
+# $options becomes an array with keys set to the option names
+# $optionsWithArgs is an array of GNU-style options that take an argument. The arguments are returned
+# in the values of $options.
+# $args becomes a zero-based array containing the non-option arguments
+
+if ( !isset( $optionsWithArgs ) ) {
+	$optionsWithArgs = array();
+}
+$optionsWithArgs[] = 'conf'; # For specifying the location of LocalSettings.php
+
+$self = array_shift( $argv );
+$IP = realpath( dirname( __FILE__ ) . '/..' );
+#chdir( $IP );
+require_once( "$IP/StartProfiler.php" );
+
+$options = array();
+$args = array();
+
+
+# Parse arguments
+for( $arg = reset( $argv ); $arg !== false; $arg = next( $argv ) ) {
+	if ( $arg == '--' ) {
+		# End of options, remainder should be considered arguments
+		$arg = next( $argv );
+		while( $arg !== false ) {
+			$args[] = $arg;
+			$arg = next( $argv );
+		}
+		break;
+	} elseif ( substr( $arg, 0, 2 ) == '--' ) {
+		# Long options
+		$option = substr( $arg, 2 );
+		if ( in_array( $option, $optionsWithArgs ) ) {
+			$param = next( $argv );
+			if ( $param === false ) {
+				echo "$arg needs an value after it\n";
+				die( -1 );
+			}
+			$options[$option] = $param;
+		} else {
+			$bits = explode( '=', $option, 2 );
+			if( count( $bits ) > 1 ) {
+				$option = $bits[0];
+				$param = $bits[1];
+			} else {
+				$param = 1;
+			}
+			$options[$option] = $param;
+		}
+	} elseif ( substr( $arg, 0, 1 ) == '-' ) {
+		# Short options
+		for ( $p=1; $p<strlen( $arg ); $p++ ) {
+			$option = $arg{$p};
+			if ( in_array( $option, $optionsWithArgs ) ) {
+				$param = next( $argv );
+				if ( $param === false ) {
+					echo "$arg needs an value after it\n";
+					die( -1 );
+				}
+				$options[$option] = $param;
+			} else {
+				$options[$option] = 1;
+			}
+		}
+	} else {
+		$args[] = $arg;
+	}
+}
+
+
+# General initialisation
+
+$wgCommandLineMode = true;
+# Turn off output buffering if it's on
+@ob_end_flush();
+$sep = PATH_SEPARATOR;
+
+if (!isset( $wgUseNormalUser ) ) {
+	$wgUseNormalUser = false;
+}
+
+if ( file_exists( '/home/wikipedia/common/langlist' ) ) {
+	$wgWikiFarm = true;
+	$cluster = trim( file_get_contents( '/etc/cluster' ) );
+	require_once( "$IP/includes/SiteConfiguration.php" );
+
+	# Get $wgConf
+	require( "$IP/wgConf.php" );
+
+	if ( empty( $wgNoDBParam ) ) {
+		# Check if we were passed a db name
+		$db = array_shift( $args );
+		list( $site, $lang ) = $wgConf->siteFromDB( $db );
+
+		# If not, work out the language and site the old way
+		if ( is_null( $site ) || is_null( $lang ) ) {
+			if ( !$db ) {
+				$lang = 'aa';
+			} else {
+				$lang = $db;
+			}
+			if ( isset( $args[0] ) ) {
+				$site = array_shift( $args );
+			} else {
+				$site = 'wikipedia';
+			}
+		}
+	} else {
+		$lang = 'aa';
+		$site = 'wikipedia';
+	}
+
+	# This is for the IRC scripts, which now run as the apache user
+	# The apache user doesn't have access to the wikiadmin_pass command
+	if ( $_ENV['USER'] == 'apache' ) {
+	#if ( posix_geteuid() == 48 ) {
+		$wgUseNormalUser = true;
+	}
+
+	putenv( 'wikilang='.$lang);
+
+	$DP = $IP;
+	ini_set( 'include_path', ".:$IP:$IP/includes:$IP/languages:$IP/maintenance" );
+
+	#require_once( $IP.'/includes/ProfilerStub.php' );
+	require_once( $IP.'/includes/Defines.php' );
+	require_once( $IP.'/CommonSettings.php' );
+
+	$bin = '/home/wikipedia/bin';
+	if ( $wgUseRootUser ) {
+		$wgDBuser = $wgDBadminuser = 'root';
+		$wgDBpassword = $wgDBadminpassword = trim(`$bin/mysql_root_pass`);
+	} elseif ( !$wgUseNormalUser ) {
+		$wgDBuser = $wgDBadminuser = 'wikiadmin';
+		$wgDBpassword = $wgDBadminpassword = trim(`$bin/wikiadmin_pass`);
+	}
+} else {
+	$wgWikiFarm = false;
+	if ( isset( $options['conf'] ) ) {
+		$settingsFile = $options['conf'];
+	} else {
+		$settingsFile = "$IP/LocalSettings.php";
+	}
+
+	if ( ! is_readable( $settingsFile ) ) {
+		print "A copy of your installation's LocalSettings.php\n" .
+		  "must exist and be readable in the source directory.\n";
+		exit( 1 );
+	}
+	$wgCommandLineMode = true;
+	$DP = $IP;
+	#require_once( $IP.'/includes/ProfilerStub.php' );
+	require_once( $IP.'/includes/Defines.php' );
+	require_once( $settingsFile );
+	ini_set( 'include_path', ".$sep$IP$sep$IP/includes$sep$IP/languages$sep$IP/maintenance" );
+
+	if ( is_readable( $IP.'/AdminSettings.php' ) ) {
+		require_once( $IP.'/AdminSettings.php' );
+	}
+}
+
+# Turn off output buffering again, it might have been turned on in the settings files
+if( ob_get_level() ) {
+	ob_end_flush();
+}
+# Same with these
+$wgCommandLineMode = true;
+
+if ( empty( $wgUseNormalUser ) && isset( $wgDBadminuser ) ) {
+	$wgDBuser = $wgDBadminuser;
+	$wgDBpassword = $wgDBadminpassword;
+
+	if( $wgDBservers ) {
+		foreach ( $wgDBservers as $i => $server ) {
+			$wgDBservers[$i]['user'] = $wgDBuser;
+			$wgDBservers[$i]['password'] = $wgDBpassword;
+		}
+	}
+}
+
+if ( defined( 'MW_CMDLINE_CALLBACK' ) ) {
+	$fn = MW_CMDLINE_CALLBACK;
+	$fn();
+}
+
+ini_set( 'memory_limit', -1 );
+
+$wgShowSQLErrors = true;
+
+require_once( 'Setup.php' );
+require_once( 'install-utils.inc' );
+$wgTitle = null; # Much much faster startup than creating a title object
+set_time_limit(0);
+
+// --------------------------------------------------------------------
+// Functions
+// --------------------------------------------------------------------
+
+function wfWaitForSlaves( $maxLag ) {
+	global $wgLoadBalancer;
+	if ( $maxLag ) {
+		list( $host, $lag ) = $wgLoadBalancer->getMaxLag();
+		while ( $lag > $maxLag ) {
+			$name = @gethostbyaddr( $host );
+			if ( $name !== false ) {
+				$host = $name;
+			}
+			print "Waiting for $host (lagged $lag seconds)...\n";
+			sleep($maxLag);
+			list( $host, $lag ) = $wgLoadBalancer->getMaxLag();
+		}
+	}
+}
+
+
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/convertLinks.inc
===================================================================
--- /MediaWiki/branches/1.11/maintenance/convertLinks.inc	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/convertLinks.inc	(revision 1280)
@@ -0,0 +1,219 @@
+<?php
+/**
+ * @todo document
+ * @addtogroup Maintenance
+ */
+
+/** */
+function convertLinks() {
+	global $wgDBtype;
+	if( $wgDBtype == 'postgres' ) {
+		print "Links table already ok on Postgres.\n";
+		return;
+	}
+
+	print "Converting links table to ID-ID...\n";
+
+	global $wgLang, $wgDBserver, $wgDBadminuser, $wgDBadminpassword, $wgDBname;
+	global $noKeys, $logPerformance, $fh;
+
+	$tuplesAdded = $numBadLinks = $curRowsRead = 0; #counters etc
+	$totalTuplesInserted = 0; # total tuples INSERTed into links_temp
+
+	$reportCurReadProgress = true; #whether or not to give progress reports while reading IDs from cur table
+	$curReadReportInterval = 1000; #number of rows between progress reports
+
+	$reportLinksConvProgress = true; #whether or not to give progress reports during conversion
+	$linksConvInsertInterval = 1000; #number of rows per INSERT
+
+	$initialRowOffset = 0;
+	#$finalRowOffset = 0; # not used yet; highest row number from links table to process
+
+	# Overwrite the old links table with the new one.  If this is set to false,
+	# the new table will be left at links_temp.
+	$overwriteLinksTable = true;
+
+	# Don't create keys, and so allow duplicates in the new links table.
+	# This gives a huge speed improvement for very large links tables which are MyISAM. (What about InnoDB?)
+	$noKeys = false;
+
+
+	$logPerformance = false; # output performance data to a file
+	$perfLogFilename = "convLinksPerf.txt";
+	#--------------------------------------------------------------------
+
+	$dbw = wfGetDB( DB_MASTER );
+	list ($cur, $links, $links_temp, $links_backup) = $dbw->tableNamesN( 'cur', 'links', 'links_temp', 'links_backup' );
+
+	$res = $dbw->query( "SELECT l_from FROM $links LIMIT 1" );
+	if ( $dbw->fieldType( $res, 0 ) == "int" ) {
+		print "Schema already converted\n";
+		return;
+	}
+
+	$res = $dbw->query( "SELECT COUNT(*) AS count FROM $links" );
+	$row = $dbw->fetchObject($res);
+	$numRows = $row->count;
+	$dbw->freeResult( $res );
+
+	if ( $numRows == 0 ) {
+		print "Updating schema (no rows to convert)...\n";
+		createTempTable();
+	} else {
+		if ( $logPerformance ) { $fh = fopen ( $perfLogFilename, "w" ); }
+		$baseTime = $startTime = getMicroTime();
+		# Create a title -> cur_id map
+		print "Loading IDs from $cur table...\n";
+		performanceLog ( "Reading $numRows rows from cur table...\n" );
+		performanceLog ( "rows read vs seconds elapsed:\n" );
+
+		$dbw->bufferResults( false );
+		$res = $dbw->query( "SELECT cur_namespace,cur_title,cur_id FROM $cur" );
+		$ids = array();
+
+		while ( $row = $dbw->fetchObject( $res ) ) {
+			$title = $row->cur_title;
+			if ( $row->cur_namespace ) {
+				$title = $wgLang->getNsText( $row->cur_namespace ) . ":$title";
+			}
+			$ids[$title] = $row->cur_id;
+			$curRowsRead++;
+			if ($reportCurReadProgress) {
+				if (($curRowsRead % $curReadReportInterval) == 0) {
+					performanceLog( $curRowsRead . " " . (getMicroTime() - $baseTime) . "\n" );
+					print "\t$curRowsRead rows of $cur table read.\n";
+				}
+			}
+		}
+		$dbw->freeResult( $res );
+		$dbw->bufferResults( true );
+		print "Finished loading IDs.\n\n";
+		performanceLog( "Took " . (getMicroTime() - $baseTime) . " seconds to load IDs.\n\n" );
+	#--------------------------------------------------------------------
+
+		# Now, step through the links table (in chunks of $linksConvInsertInterval rows),
+		# convert, and write to the new table.
+		createTempTable();
+		performanceLog( "Resetting timer.\n\n" );
+		$baseTime = getMicroTime();
+		print "Processing $numRows rows from $links table...\n";
+		performanceLog( "Processing $numRows rows from $links table...\n" );
+		performanceLog( "rows inserted vs seconds elapsed:\n" );
+
+		for ($rowOffset = $initialRowOffset; $rowOffset < $numRows; $rowOffset += $linksConvInsertInterval) {
+			$sqlRead = "SELECT * FROM $links ";
+			$sqlRead = $dbw->limitResult($sqlRead, $linksConvInsertInterval,$rowOffset);
+			$res = $dbw->query($sqlRead);
+			if ( $noKeys ) {
+				$sqlWrite = array("INSERT INTO $links_temp (l_from,l_to) VALUES ");
+			} else {
+				$sqlWrite = array("INSERT IGNORE INTO $links_temp (l_from,l_to) VALUES ");
+			}
+
+			$tuplesAdded = 0; # no tuples added to INSERT yet
+			while ( $row = $dbw->fetchObject($res) ) {
+				$fromTitle = $row->l_from;
+				if ( array_key_exists( $fromTitle, $ids ) ) { # valid title
+					$from = $ids[$fromTitle];
+					$to = $row->l_to;
+					if ( $tuplesAdded != 0 ) {
+						$sqlWrite[] = ",";
+					}
+					$sqlWrite[] = "($from,$to)";
+					$tuplesAdded++;
+				} else { # invalid title
+					$numBadLinks++;
+				}
+			}
+			$dbw->freeResult($res);
+			#print "rowOffset: $rowOffset\ttuplesAdded: $tuplesAdded\tnumBadLinks: $numBadLinks\n";
+			if ( $tuplesAdded != 0  ) {
+				if ($reportLinksConvProgress) {
+					print "Inserting $tuplesAdded tuples into $links_temp...";
+				}
+				$dbw->query( implode("",$sqlWrite) );
+				$totalTuplesInserted += $tuplesAdded;
+				if ($reportLinksConvProgress)
+					print " done. Total $totalTuplesInserted tuples inserted.\n";
+					performanceLog( $totalTuplesInserted . " " . (getMicroTime() - $baseTime) . "\n"  );
+			}
+		}
+		print "$totalTuplesInserted valid titles and $numBadLinks invalid titles were processed.\n\n";
+		performanceLog( "$totalTuplesInserted valid titles and $numBadLinks invalid titles were processed.\n" );
+		performanceLog( "Total execution time: " . (getMicroTime() - $startTime) . " seconds.\n" );
+		if ( $logPerformance ) { fclose ( $fh ); }
+	}
+	#--------------------------------------------------------------------
+
+	if ( $overwriteLinksTable ) {
+		$dbConn = Database::newFromParams( $wgDBserver, $wgDBadminuser, $wgDBadminpassword, $wgDBname );
+		if (!($dbConn->isOpen())) {
+			print "Opening connection to database failed.\n";
+			return;
+		}
+		# Check for existing links_backup, and delete it if it exists.
+		print "Dropping backup links table if it exists...";
+		$dbConn->query( "DROP TABLE IF EXISTS $links_backup", DB_MASTER);
+		print " done.\n";
+
+		# Swap in the new table, and move old links table to links_backup
+		print "Swapping tables '$links' to '$links_backup'; '$links_temp' to '$links'...";
+		$dbConn->query( "RENAME TABLE links TO $links_backup, $links_temp TO $links", DB_MASTER );
+		print " done.\n\n";
+
+		$dbConn->close();
+		print "Conversion complete. The old table remains at $links_backup;\n";
+		print "delete at your leisure.\n";
+	} else {
+		print "Conversion complete.  The converted table is at $links_temp;\n";
+		print "the original links table is unchanged.\n";
+	}
+}
+
+#--------------------------------------------------------------------
+
+function createTempTable() {
+	global $wgDBserver, $wgDBadminuser, $wgDBadminpassword, $wgDBname;
+	global $noKeys;
+	$dbConn = Database::newFromParams( $wgDBserver, $wgDBadminuser, $wgDBadminpassword, $wgDBname );
+
+	if (!($dbConn->isOpen())) {
+		print "Opening connection to database failed.\n";
+		return;
+	}
+	$links_temp = $dbConn->tableName( 'links_temp' );
+
+	print "Dropping temporary links table if it exists...";
+	$dbConn->query( "DROP TABLE IF EXISTS $links_temp");
+	print " done.\n";
+
+	print "Creating temporary links table...";
+	if ( $noKeys ) {
+		$dbConn->query( "CREATE TABLE $links_temp ( " .
+		"l_from int(8) unsigned NOT NULL default '0', " .
+		"l_to int(8) unsigned NOT NULL default '0')");
+	} else {
+		$dbConn->query( "CREATE TABLE $links_temp ( " .
+		"l_from int(8) unsigned NOT NULL default '0', " .
+		"l_to int(8) unsigned NOT NULL default '0', " .
+		"UNIQUE KEY l_from(l_from,l_to), " .
+		"KEY (l_to))");
+	}
+	print " done.\n\n";
+}
+
+function performanceLog( $text ) {
+	global $logPerformance, $fh;
+	if ( $logPerformance ) {
+		fwrite( $fh, $text );
+	}
+}
+
+function getMicroTime() { # return time in seconds, with microsecond accuracy
+	list($usec, $sec) = explode(" ", microtime());
+	return ((float)$usec + (float)$sec);
+}
+
+
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/convertLinks.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/convertLinks.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/convertLinks.php	(revision 1280)
@@ -0,0 +1,15 @@
+<?php
+/**
+ * Convert from the old links schema (string->ID) to the new schema (ID->ID)
+ * The wiki should be put into read-only mode while this script executes
+ *
+ * @addtogroup Maintenance
+ */
+
+/** */
+require_once( "commandLine.inc" );
+require_once( "convertLinks.inc" );
+
+convertLinks();
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/counter.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/counter.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/counter.php	(revision 1280)
@@ -0,0 +1,5 @@
+<?php
+function print_c($last, $current) {
+	echo str_repeat( chr(8), strlen( $last ) ) . $current;
+}
+?>
Index: /MediaWiki/branches/1.11/maintenance/createAndPromote.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/createAndPromote.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/createAndPromote.php	(revision 1280)
@@ -0,0 +1,46 @@
+<?php
+
+/**
+ * Maintenance script to create an account and grant it administrator rights
+ *
+ * @addtogroup Maintenance
+ * @author Rob Church <robchur@gmail.com>
+ */
+ 
+require_once( 'commandLine.inc' );
+
+if( !count( $args ) == 2 ) {
+	echo( "Please provide a username and password for the new account.\n" );
+	die( 1 );
+}
+
+$username = $args[0];
+$password = $args[1];
+
+echo( wfWikiID() . ": Creating and promoting User:{$username}..." );
+
+# Validate username and check it doesn't exist
+$user = User::newFromName( $username );
+if( !is_object( $user ) ) {
+	echo( "invalid username.\n" );
+	die( 1 );
+} elseif( 0 != $user->idForName() ) {
+	echo( "account exists.\n" );
+	die( 1 );
+}
+
+# Insert the account into the database
+$user->addToDatabase();
+$user->setPassword( $password );
+$user->setToken();
+
+# Promote user
+$user->addGroup( 'sysop' );
+
+# Increment site_stats.ss_users
+$ssu = new SiteStatsUpdate( 0, 0, 0, 0, 1 );
+$ssu->doUpdate();
+
+echo( "done.\n" );
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/database.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/database.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/database.sql	(revision 1280)
@@ -0,0 +1,7 @@
+-- SQL script to create database for wiki.  This is run from
+-- the installation script which replaces the variables with
+-- their values from local settings.
+--
+
+DROP DATABASE IF EXISTS `{$wgDBname}`;
+CREATE DATABASE `{$wgDBname}`;
Index: /MediaWiki/branches/1.11/maintenance/delete-idle-wiki-users.pl
===================================================================
--- /MediaWiki/branches/1.11/maintenance/delete-idle-wiki-users.pl	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/delete-idle-wiki-users.pl	(revision 1280)
@@ -0,0 +1,138 @@
+#!/usr/bin/perl
+#
+# Nuke idle wiki accounts from the wiki's user database.
+#
+# Copyright (C) 2005 Ralf Baechle (ralf@linux-mips.org)
+#
+# This program is free software; you can redistribute  it and/or modify it
+# under  the terms of  the GNU General  Public License as published by the
+# Free Software Foundation;  either version 2 of the  License, or (at your
+# option) any later version.
+#
+# THIS  SOFTWARE  IS PROVIDED   ``AS  IS'' AND   ANY  EXPRESS OR IMPLIED
+# WARRANTIES,   INCLUDING, BUT NOT  LIMITED  TO, THE IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN
+# NO  EVENT  SHALL   THE AUTHOR  BE    LIABLE FOR ANY   DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED   TO, PROCUREMENT OF  SUBSTITUTE GOODS  OR SERVICES; LOSS OF
+# USE, DATA,  OR PROFITS; OR  BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN  CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+# You should have received a copy of the  GNU General Public License along
+# with this program; if not, write  to the Free Software Foundation, Inc.,
+# 675 Mass Ave, Cambridge, MA 02139, USA.
+#
+
+my $database = "DBI:mysql:database=wikidb;host=localhost";
+my $dbuser   = "wikiuser";
+my $dbpasswd = "password";
+
+use strict;
+use DBI();
+
+my $verbose = 0;
+my $for_real = 1;
+
+sub do_db_op
+{
+	my ($dbh, $sql) = @_;
+
+	if ($verbose >= 3) {
+		print $sql . ";\n"
+	}
+
+	if ($for_real == 1) {
+		$dbh->do($sql);
+	}
+}
+
+sub undo_user
+{
+	my ($ref, $dbh, $sth, $killed);
+
+	# Connect to the database.
+	$dbh = DBI->connect($database, $dbuser, $dbpasswd, {RaiseError => 1});
+
+	$sth = $dbh->prepare("SELECT * FROM user");
+	$sth->execute();
+
+	$ref = $sth->fetchrow_hashref();
+
+	if ($sth->rows == 0) {
+		print "There is no user in this wiki.\n";
+		return;
+	}
+
+	while ($ref = $sth->fetchrow_hashref()) {
+		my ($user_id, $user_name, $cph, $oph, $edits);
+
+		$user_name = $ref->{user_name};
+		$user_id = $ref->{user_id};
+		if ($verbose >= 2) {
+			print "Annihilating user " . $user_name .
+			      " has user_id " . $user_id . ".\n";
+		}
+
+		$cph = $dbh->prepare("SELECT * FROM cur where " .
+		                "cur_user = $user_id" .
+		                " AND " .
+		                "cur_user_text = " . $dbh->quote("$user_name"));
+		$cph->execute();
+
+		$oph = $dbh->prepare("SELECT * FROM old where " .
+		                "old_user = $user_id" .
+		                " AND " .
+		                "old_user_text = " . $dbh->quote("$user_name"));
+		$oph->execute();
+
+		$edits = $cph->rows + $oph->rows;
+
+		$cph->finish();
+		$oph->finish();
+
+		if ($edits == 0) {
+			if ($verbose >= 2) {
+				print "Keeping user " . $user_name .
+				      ", user_id " . $user_id . ".\n";
+			}
+
+			do_db_op($dbh,
+		         "DELETE FROM user WHERE user_name = " .
+		         $dbh->quote("$user_name") .
+		         " AND " .
+		         "user_id = $user_id");
+
+			$killed++;
+		}
+	}
+
+	$sth->finish();
+
+	$dbh->disconnect();
+
+	if ($verbose >= 1) {
+		print "Killed " . $killed . " users\n";
+	}
+}
+
+my (@users, $user, $this, $opts);
+
+@users = ();
+$opts = 1;
+
+foreach $this (@ARGV) {
+	if ($opts == 1 && $this eq '-v') {
+		$verbose++;
+	} elsif ($opts == 1 && $this eq '--verbose') {
+		$verbose = 1;
+	} elsif ($opts == 1 && $this eq '--') {
+		$opts = 0;
+	} else {
+		push(@users, $this);
+	}
+}
+
+undo_user();
+
Index: /MediaWiki/branches/1.11/maintenance/deleteBatch.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/deleteBatch.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/deleteBatch.php	(revision 1280)
@@ -0,0 +1,88 @@
+<?php
+
+# delete a batch of pages
+# Usage: php deleteBatch.php [-u <user>] [-r <reason>] [-i <interval>] <listfile>
+# where
+# 	<listfile> is a file where each line contains the title of a page to be deleted.
+#	<user> is the username
+#	<reason> is the delete reason
+#	<interval> is the number of seconds to sleep for after each delete
+
+$oldCwd = getcwd();
+$optionsWithArgs = array( 'u', 'r', 'i' );
+require_once( 'commandLine.inc' );
+
+chdir( $oldCwd );
+
+# Options processing
+
+$filename = 'php://stdin';
+$user = 'Delete page script';
+$reason = '';
+$interval = 0;
+
+if ( isset( $args[0] ) ) {
+	$filename = $args[0];
+}
+if ( isset( $options['u'] ) ) {
+	$user = $options['u'];
+}
+if ( isset( $options['r'] ) ) {
+	$reason = $options['r'];
+}
+if ( isset( $options['i'] ) ) {
+	$interval = $options['i'];
+}
+
+$wgUser = User::newFromName( $user );
+
+
+# Setup complete, now start
+
+$file = fopen( $filename, 'r' );
+if ( !$file ) {
+	print "Unable to read file, exiting\n";
+	exit;
+}
+
+$dbw = wfGetDB( DB_MASTER );
+
+for ( $linenum = 1; !feof( $file ); $linenum++ ) {
+	$line = trim( fgets( $file ) );
+	if ( $line == '' ) {
+		continue;
+	}
+	$page = Title::newFromText( $line );
+	if ( is_null( $page ) ) {
+		print "Invalid title '$line' on line $linenum\n";
+		continue;
+	}
+	if( !$page->exists() ) {
+		print "Skipping nonexistent page '$line'\n";
+		continue;
+	}
+
+
+	print $page->getPrefixedText();
+	$dbw->begin();
+	if( $page->getNamespace() == NS_IMAGE ) {
+		$art = new ImagePage( $page );
+	} else {
+		$art = new Article( $page );
+	}
+	$success = $art->doDeleteArticle( $reason );
+	$dbw->immediateCommit();
+	if ( $success ) {
+		print "\n";
+	} else {
+		print " FAILED\n";
+	}
+
+	if ( $interval ) {
+		sleep( $interval );
+	}
+	wfWaitForSlaves( 5 );
+}
+
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/deleteDefaultMessages.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/deleteDefaultMessages.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/deleteDefaultMessages.php	(revision 1280)
@@ -0,0 +1,45 @@
+<?php
+
+/**
+ * Deletes all pages in the MediaWiki namespace which were last edited by 
+ * "MediaWiki default".
+ */
+
+if ( !defined( 'MEDIAWIKI' ) ) {
+	require_once( 'commandLine.inc' );
+	deleteDefaultMessages();
+}
+
+function deleteDefaultMessages() {
+	$user = 'MediaWiki default';
+	$reason = 'No longer required';
+
+	global $wgUser;
+	$wgUser = User::newFromName( $user );
+	$wgUser->addGroup( 'bot' );
+	
+	$dbr = wfGetDB( DB_SLAVE );
+	$res = $dbr->select( array( 'page', 'revision' ),
+		array( 'page_namespace', 'page_title' ),
+		array(
+			'page_namespace' => NS_MEDIAWIKI,
+			'page_latest=rev_id',
+			'rev_user_text' => 'MediaWiki default',
+		)
+	);
+
+	$dbw = wfGetDB( DB_MASTER );
+
+	while ( $row = $dbr->fetchObject( $res ) ) {
+		if ( function_exists( 'wfWaitForSlaves' ) ) {
+			wfWaitForSlaves( 5 );
+		}
+		$dbw->ping();
+		$title = Title::makeTitle( $row->page_namespace, $row->page_title );
+		$article = new Article( $title );
+		$dbw->begin();
+		$article->doDeleteArticle( $reason );
+		$dbw->commit();
+	}
+}
+?>
Index: /MediaWiki/branches/1.11/maintenance/deleteImageMemcached.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/deleteImageMemcached.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/deleteImageMemcached.php	(revision 1280)
@@ -0,0 +1,60 @@
+<?php
+// php deleteImageMemcached.php --until "2005-09-05 00:00:00" --sleep 0 --report 10
+$optionsWithArgs = array( 'until', 'sleep', 'report' );
+
+require_once 'commandLine.inc';
+
+class DeleteImageCache {
+	var $until, $sleep, $report;
+
+	function DeleteImageCache( $until, $sleep, $report ) {
+		$this->until = $until;
+		$this->sleep = $sleep;
+		$this->report = $report;
+	}
+
+	function main() {
+		global $wgMemc;
+		$fname = 'DeleteImageCache::main';
+
+		ini_set( 'display_errors', false );
+
+		$dbr = wfGetDB( DB_SLAVE );
+
+		$res = $dbr->select( 'image',
+			array( 'img_name' ),
+			array( "img_timestamp < {$this->until}" ),
+			$fname
+		);
+
+		$i = 0;
+		$total = $this->getImageCount();
+
+		while ( $row = $dbr->fetchObject( $res ) ) {
+			if ($i % $this->report == 0)
+				printf("%s: %13s done (%s)\n", wfWikiID(), "$i/$total", wfPercent( $i / $total * 100 ));
+			$md5 = md5( $row->img_name );
+			$wgMemc->delete( wfMemcKey( 'Image', $md5 ) );
+
+			if ($this->sleep != 0)
+				usleep( $this->sleep );
+
+			++$i;
+		}
+	}
+
+	function getImageCount() {
+		$fname = 'DeleteImageCache::getImageCount';
+
+		$dbr = wfGetDB( DB_SLAVE );
+		return $dbr->selectField( 'image', 'COUNT(*)', array(), $fname );
+	}
+}
+
+$until = preg_replace( "/[^\d]/", '', $options['until'] );
+$sleep = (int)$options['sleep'] * 1000; // milliseconds
+$report = (int)$options['report'];
+
+$dic = new DeleteImageCache( $until, $sleep, $report );
+$dic->main();
+?>
Index: /MediaWiki/branches/1.11/maintenance/deleteOldRevisions.inc
===================================================================
--- /MediaWiki/branches/1.11/maintenance/deleteOldRevisions.inc	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/deleteOldRevisions.inc	(revision 1280)
@@ -0,0 +1,59 @@
+<?php
+
+/**
+ * Support functions for the deleteOldRevisions script
+ *
+ * @addtogroup Maintenance
+ * @author Rob Church <robchur@gmail.com>
+ */
+ 
+require_once( 'purgeOldText.inc' );
+
+function DeleteOldRevisions( $delete = false ) {
+
+	# Data should come off the master, wrapped in a transaction
+	$dbw = wfGetDB( DB_MASTER );
+	$dbw->begin();
+	
+	$tbl_pag = $dbw->tableName( 'page' );
+	$tbl_rev = $dbw->tableName( 'revision' );
+	
+	# Get "active" revisions from the page table
+	echo( "Searching for active revisions..." );
+	$res = $dbw->query( "SELECT page_latest FROM $tbl_pag" );
+	while( $row = $dbw->fetchObject( $res ) ) {
+		$cur[] = $row->page_latest;
+	}
+	echo( "done.\n" );
+	
+	# Get all revisions that aren't in this set
+	echo( "Searching for inactive revisions..." );
+	$set = implode( ', ', $cur );
+	$res = $dbw->query( "SELECT rev_id FROM $tbl_rev WHERE rev_id NOT IN ( $set )" );
+	while( $row = $dbw->fetchObject( $res ) ) {
+		$old[] = $row->rev_id;
+	}
+	echo( "done.\n" );
+	
+	# Inform the user of what we're going to do
+	$count = count( $old );
+	echo( "$count old revisions found.\n" );
+	
+	# Delete as appropriate
+	if( $delete && $count ) {
+		echo( "Deleting..." );
+		$set = implode( ', ', $old );
+		$dbw->query( "DELETE FROM $tbl_rev WHERE rev_id IN ( $set )" );
+		echo( "done.\n" );
+	}
+	
+	# This bit's done
+	# Purge redundant text records
+	$dbw->commit();
+	if( $delete ) {
+		PurgeRedundantText( true );
+	}
+
+}
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/deleteOldRevisions.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/deleteOldRevisions.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/deleteOldRevisions.php	(revision 1280)
@@ -0,0 +1,29 @@
+<?php
+
+/**
+ * Delete old (non-current) revisions from the database
+ *
+ * @addtogroup Maintenance
+ * @author Rob Church <robchur@gmail.com>
+ */
+
+$options = array( 'delete', 'help' );
+require_once( 'commandLine.inc' );
+require_once( 'deleteOldRevisions.inc' );
+
+echo( "Delete Old Revisions\n\n" );
+
+if( @$options['help'] ) {
+	ShowUsage();
+} else {
+	DeleteOldRevisions( @$options['delete'] );
+}
+
+function ShowUsage() {
+	echo( "Deletes non-current revisions from the database.\n\n" );
+	echo( "Usage: php deleteOldRevisions.php [--delete|--help]\n\n" );
+	echo( "delete : Performs the deletion\n" );
+	echo( "  help : Show this usage information\n" );
+}
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/deleteOrphanedRevisions.inc.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/deleteOrphanedRevisions.inc.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/deleteOrphanedRevisions.inc.php	(revision 1280)
@@ -0,0 +1,32 @@
+<?php
+
+/**
+ * Support functions for the deleteOrphanedRevisions maintenance script
+ *
+ * @addtogroup Maintenance
+ * @author Rob Church <robchur@gmail.com>
+ */
+
+/**
+ * Delete one or more revisions from the database
+ * Do this inside a transaction
+ *
+ * @param $id Array of revision id values
+ * @param $db Database class (needs to be a master)
+ */
+function deleteRevisions( $id, &$dbw ) {
+	if( !is_array( $id ) )
+		$id = array( $id );
+	$dbw->delete( 'revision', array( 'rev_id' => $id ), 'deleteRevision' );
+}
+
+/**
+ * Spit out script usage information and exit
+ */
+function showUsage() {
+	echo( "Finds revisions which refer to nonexisting pages and deletes them from the database\n" );
+	echo( "USAGE: php deleteOrphanedRevisions.php [--report]\n\n" );
+	echo( " --report : Prints out a count of affected revisions but doesn't delete them\n\n" );
+}
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/deleteOrphanedRevisions.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/deleteOrphanedRevisions.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/deleteOrphanedRevisions.php	(revision 1280)
@@ -0,0 +1,54 @@
+<?php
+
+/**
+ * Maintenance script to delete revisions which refer to a nonexisting page
+ * Sometimes manual deletion done in a rush leaves crap in the database
+ *
+ * @addtogroup Maintenance
+ * @author Rob Church <robchur@gmail.com>
+ * @todo More efficient cleanup of text records
+ */
+ 
+$options = array( 'report', 'help' );
+require_once( 'commandLine.inc' );
+require_once( 'deleteOrphanedRevisions.inc.php' );
+echo( "Delete Orphaned Revisions\n" );
+
+if( isset( $options['help'] ) )
+	showUsage();
+
+$report = isset( $options['report'] );
+
+$dbw = wfGetDB( DB_MASTER );
+$dbw->immediateBegin();
+extract( $dbw->tableNames( 'page', 'revision' ) );
+
+# Find all the orphaned revisions
+echo( "Checking for orphaned revisions..." );
+$sql = "SELECT rev_id FROM {$revision} LEFT JOIN {$page} ON rev_page = page_id WHERE page_namespace IS NULL";
+$res = $dbw->query( $sql, 'deleteOrphanedRevisions' );
+
+# Stash 'em all up for deletion (if needed)
+while( $row = $dbw->fetchObject( $res ) )
+	$revisions[] = $row->rev_id;
+$dbw->freeResult( $res );
+$count = count( $revisions );
+echo( "found {$count}.\n" );
+
+# Nothing to do?
+if( $report || $count == 0 ) {
+	$dbw->immediateCommit();
+	exit();
+}
+
+# Delete each revision
+echo( "Deleting..." );
+deleteRevisions( $revisions, $dbw );
+echo( "done.\n" );
+
+# Close the transaction and call the script to purge unused text records
+$dbw->immediateCommit();
+require_once( 'purgeOldText.inc' );
+PurgeRedundantText( true );
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/deleteRevision.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/deleteRevision.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/deleteRevision.php	(revision 1280)
@@ -0,0 +1,40 @@
+<?php
+require_once( 'commandLine.inc' );
+
+$dbw = wfGetDB( DB_MASTER );
+
+if ( count( $args ) == 0 ) {
+	echo "Usage: php deleteRevision.php <revid> [<revid> ...]\n";
+	exit(1);
+}
+
+echo "Deleting revision(s) " . implode( ',', $args ) . " from ".wfWikiID()."...\n";
+
+$affected = 0;
+foreach ( $args as $revID ) {
+	$dbw->insertSelect( 'archive', array( 'page', 'revision' ),
+		array(
+			'ar_namespace'  => 'page_namespace',
+			'ar_title'      => 'page_title',
+			'ar_comment'    => 'rev_comment',
+			'ar_user'       => 'rev_user',
+			'ar_user_text'  => 'rev_user_text',
+			'ar_timestamp'  => 'rev_timestamp',
+			'ar_minor_edit' => 'rev_minor_edit',
+			'ar_rev_id'     => 'rev_id',
+			'ar_text_id'    => 'rev_text_id',
+		), array(
+			'rev_id' => $revID,
+			'page_id = rev_page'
+		), $fname
+	);
+	if ( !$dbw->affectedRows() ) {
+		echo "Revision $revID not found\n";
+	} else {
+		$affected += $dbw->affectedRows();
+		$dbw->delete( 'revision', array( 'rev_id' => $revID ) );
+	}
+}
+
+print "Deleted $affected revisions\n";
+?>
Index: /MediaWiki/branches/1.11/maintenance/dtrace/counts.d
===================================================================
--- /MediaWiki/branches/1.11/maintenance/dtrace/counts.d	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/dtrace/counts.d	(revision 1280)
@@ -0,0 +1,23 @@
+/*
+ * This software is in the public domain.
+ *
+ * $Id: counts.d 10510 2005-08-15 01:46:19Z kateturner $
+ */
+
+#pragma D option quiet
+
+self int tottime;
+BEGIN {
+	tottime = timestamp;
+}
+
+php$target:::function-entry
+	@counts[copyinstr(arg0)] = count();
+}
+
+END {
+	printf("Total time: %dus\n", (timestamp - tottime) / 1000);
+	printf("# calls by function:\n");
+	printa("%-40s %@d\n", @counts);
+}
+
Index: /MediaWiki/branches/1.11/maintenance/dtrace/tree.d
===================================================================
--- /MediaWiki/branches/1.11/maintenance/dtrace/tree.d	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/dtrace/tree.d	(revision 1280)
@@ -0,0 +1,26 @@
+/*
+ * This software is in the public domain.
+ *
+ * $Id: tree.d 10510 2005-08-15 01:46:19Z kateturner $
+ */
+
+#pragma D option quiet
+
+self int indent;
+self int times[int];
+
+php$target:::function-entry
+{
+	@counts[copyinstr(arg0)] = count();
+        printf("%*s", self->indent, "");
+        printf("-> %s\n", copyinstr(arg0));
+	self->times[self->indent] = timestamp;
+        self->indent += 2;
+}
+
+php$target:::function-return
+{
+        self->indent -= 2;
+        printf("%*s", self->indent, "");
+        printf("<- %s %dus\n", copyinstr(arg0), (timestamp - self->times[self->indent]) / 1000);
+}
Index: /MediaWiki/branches/1.11/maintenance/dumpBackup.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/dumpBackup.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/dumpBackup.php	(revision 1280)
@@ -0,0 +1,98 @@
+<?php
+/**
+ * Copyright (C) 2005 Brion Vibber <brion@pobox.com>
+ * http://www.mediawiki.org/
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @addtogroup SpecialPage
+ */
+
+$originalDir = getcwd();
+
+$optionsWithArgs = array( 'pagelist', 'start', 'end' );
+
+require_once( 'commandLine.inc' );
+require_once( 'SpecialExport.php' );
+require_once( 'maintenance/backup.inc' );
+
+$dumper = new BackupDumper( $argv );
+
+if( isset( $options['quiet'] ) ) {
+	$dumper->reporting = false;
+}
+
+if ( isset( $options['pagelist'] ) ) {
+	$olddir = getcwd();
+	chdir( $originalDir );
+	$pages = file( $options['pagelist'] );
+	chdir( $olddir );
+	if ( $pages === false ) {
+		wfDie( "Unable to open file {$options['pagelist']}\n" );
+	}
+	$pages = array_map( 'trim', $pages );
+	$dumper->pages = array_filter( $pages, create_function( '$x', 'return $x !== "";' ) );
+}
+
+if( isset( $options['start'] ) ) {
+	$dumper->startId = intval( $options['start'] );
+}
+if( isset( $options['end'] ) ) {
+	$dumper->endId = intval( $options['end'] );
+}
+$dumper->skipHeader = isset( $options['skip-header'] );
+$dumper->skipFooter = isset( $options['skip-footer'] );
+
+$textMode = isset( $options['stub'] ) ? WikiExporter::STUB : WikiExporter::TEXT;
+
+if( isset( $options['full'] ) ) {
+	$dumper->dump( WikiExporter::FULL, $textMode );
+} elseif( isset( $options['current'] ) ) {
+	$dumper->dump( WikiExporter::CURRENT, $textMode );
+} else {
+	$dumper->progress( <<<END
+This script dumps the wiki page database into an XML interchange wrapper
+format for export or backup.
+
+XML output is sent to stdout; progress reports are sent to stderr.
+
+Usage: php dumpBackup.php <action> [<options>]
+Actions:
+  --full      Dump complete history of every page.
+  --current   Includes only the latest revision of each page.
+
+Options:
+  --quiet     Don't dump status reports to stderr.
+  --report=n  Report position and speed after every n pages processed.
+              (Default: 100)
+  --server=h  Force reading from MySQL server h
+  --start=n   Start from page_id n
+  --end=n     Stop before page_id n (exclusive)
+  --skip-header Don't output the <mediawiki> header
+  --skip-footer Don't output the </mediawiki> footer
+  --stub      Don't perform old_text lookups; for 2-pass dump
+
+Fancy stuff:
+  --plugin=<class>[:<file>]   Load a dump plugin class
+  --output=<type>:<file>      Begin a filtered output stream;
+                              <type>s: file, gzip, bzip2, 7zip
+  --filter=<type>[:<options>] Add a filter on an output branch
+
+END
+);
+}
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/dumpHTML.inc
===================================================================
--- /MediaWiki/branches/1.11/maintenance/dumpHTML.inc	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/dumpHTML.inc	(revision 1280)
@@ -0,0 +1,1006 @@
+<?php
+/**
+ * @addtogroup Maintenance
+ */
+
+define( 'REPORTING_INTERVAL', 10 );
+
+require_once( 'includes/ImagePage.php' );
+require_once( 'includes/CategoryPage.php' );
+require_once( 'includes/RawPage.php' );
+
+class DumpHTML {
+	# Destination directory
+	var $dest;
+
+	# Skip existing files
+	var $noOverwrite = false;
+
+	# Show interlanguage links?
+	var $interwiki = true;
+
+	# Depth of HTML directory tree
+	var $depth = 3;
+
+	# Directory that commons images are copied into
+	var $sharedStaticDirectory;
+
+	# Directory that the images are in, after copying
+	var $destUploadDirectory;
+
+	# Relative path to image directory
+	var $imageRel = 'upload';
+
+	# Copy commons images instead of symlinking
+	var $forceCopy = false;
+
+	# Make a copy of all images encountered
+	var $makeSnapshot = false;
+
+	# Don't image description pages in doEverything()
+	var $noSharedDesc = false;
+
+	# Make links assuming the script path is in the same directory as
+	# the destination
+	var $alternateScriptPath = false;
+
+	# Original values of various globals
+	var $oldArticlePath = false, $oldCopyrightIcon = false;
+
+	# Has setupGlobals been called?
+	var $setupDone = false;
+
+	# Has to compress html pages
+	var $compress = false;
+
+	# List of raw pages used in the current article
+	var $rawPages;
+
+	# Skin to use
+	var $skin = 'htmldump';
+
+	# Checkpoint stuff
+	var $checkpointFile = false, $checkpoints = false;
+
+	var $startID = 1, $endID = false;
+
+	var $sliceNumerator = 1, $sliceDenominator = 1;
+
+	# Max page ID, lazy initialised
+	var $maxPageID = false;
+
+	# UDP profiling
+	var $udpProfile, $udpProfileCounter = 0, $udpProfileInit = false;
+
+	function DumpHTML( $settings = array() ) {
+		foreach ( $settings as $var => $value ) {
+			$this->$var = $value;
+		}
+	}
+
+	function loadCheckpoints() {
+		if ( $this->checkpoints !== false ) {
+			return true;
+		} elseif ( !$this->checkpointFile ) {
+			return false;
+		} else {
+			$lines = @file( $this->checkpointFile );
+			if ( $lines === false ) {
+				print "Starting new checkpoint file \"{$this->checkpointFile}\"\n";
+				$this->checkpoints = array();
+			} else {
+				$lines = array_map( 'trim', $lines );
+				$this->checkpoints = array();
+				foreach ( $lines as $line ) {
+					list( $name, $value ) = explode( '=', $line, 2 );
+					$this->checkpoints[$name] = $value;
+				}
+			}
+			return true;
+		}
+	}
+
+	function getCheckpoint( $type, $defValue = false ) {
+		if ( !$this->loadCheckpoints() ) {
+			return false;
+		}
+		if ( !isset( $this->checkpoints[$type] ) ) {
+			return false;
+		} else {
+			return $this->checkpoints[$type];
+		}
+	}
+
+	function setCheckpoint( $type, $value ) {
+		if ( !$this->checkpointFile ) {
+			return;
+		}
+		$this->checkpoints[$type] = $value;
+		$blob = '';
+		foreach ( $this->checkpoints as $type => $value ) {
+			$blob .= "$type=$value\n";
+		}
+		file_put_contents( $this->checkpointFile, $blob );
+	}
+
+	function doEverything() {
+		if ( $this->getCheckpoint( 'everything' ) == 'done' ) {
+			print "Checkpoint says everything is already done\n";
+			return;
+		}
+		$this->doArticles();
+		$this->doCategories();
+		$this->doRedirects();
+		if ( $this->sliceNumerator == 1 ) {
+			$this->doSpecials();
+		}
+		$this->doLocalImageDescriptions();
+
+		if ( !$this->noSharedDesc ) {
+			$this->doSharedImageDescriptions();
+		}
+
+		$this->setCheckpoint( 'everything', 'done' );
+	}
+
+	/**
+	 * Write a set of articles specified by start and end page_id
+	 * Skip categories and images, they will be done separately
+	 */
+	function doArticles() {
+		if ( $this->endID === false ) {
+			$end = $this->getMaxPageID();
+		} else {
+			$end = $this->endID;
+		}
+		$start = $this->startID;
+		
+		# Start from the checkpoint
+		$cp = $this->getCheckpoint( 'article' );
+		if ( $cp == 'done' ) {
+			print "Articles already done\n";
+			return;
+		} elseif ( $cp !== false ) {
+			$start = $cp;
+			print "Resuming article dump from checkpoint at page_id $start of $end\n";
+		} else {
+			print "Starting from page_id $start of $end\n";
+		}
+
+		# Move the start point to the correct slice if it isn't there already
+		$start = $this->modSliceStart( $start );
+
+		$this->setupGlobals();
+
+		$mainPageObj = Title::newMainPage();
+		$mainPage = $mainPageObj->getPrefixedDBkey();
+
+		for ( $id = $start, $i = 0; $id <= $end; $id += $this->sliceDenominator, $i++ ) {
+			wfWaitForSlaves( 20 );
+			if ( !( $i % REPORTING_INTERVAL) ) {
+				print "Processing ID: $id\r";
+				$this->setCheckpoint( 'article', $id );
+			}
+			if ( !($i % (REPORTING_INTERVAL*10) ) ) {
+				print "\n";
+			}
+			$title = Title::newFromID( $id );
+			if ( $title ) {
+				$ns = $title->getNamespace() ;
+				if ( $ns != NS_CATEGORY && $ns != NS_MEDIAWIKI && 
+				  $title->getPrefixedDBkey() != $mainPage ) {
+					$this->doArticle( $title );
+				}
+			}
+		}
+		$this->setCheckpoint( 'article', 'done' );
+		print "\n";
+	}
+
+	function doSpecials() {
+		$this->doMainPage();
+
+		$this->setupGlobals();
+		print "Special:Categories...";
+		$this->doArticle( SpecialPage::getTitleFor( 'Categories' ) );
+		print "\n";
+	}
+
+	/** Write the main page as index.html */
+	function doMainPage() {
+
+		print "Making index.html  ";
+
+		// Set up globals with no ../../.. in the link URLs
+		$this->setupGlobals( 0 );
+
+		$title = Title::newMainPage();
+		$text = $this->getArticleHTML( $title );
+		
+		# Parse the XHTML to find the images
+		$images = $this->findImages( $text );
+		$this->copyImages( $images );
+		
+		$file = fopen( "{$this->dest}/index.html", "w" );
+		if ( !$file ) {
+			print "\nCan't open index.html for writing\n";
+			return false;
+		}
+		fwrite( $file, $text );
+		fclose( $file );
+		print "\n";
+	}
+
+	function doImageDescriptions() {
+		$this->doLocalImageDescriptions();
+		if ( !$this->noSharedDesc ) {
+			$this->doSharedImageDescriptions();
+		}
+	}
+
+	/**
+	 * Dump image description pages that don't have an associated article, but do
+	 * have a local image
+	 */
+	function doLocalImageDescriptions() {
+		$chunkSize = 1000;
+
+		$dbr = wfGetDB( DB_SLAVE );
+		
+		$cp = $this->getCheckpoint( 'local image' );
+		if ( $cp == 'done' ) {
+			print "Local image descriptions already done\n";
+			return;
+		} elseif ( $cp !== false ) {
+			print "Writing image description pages starting from $cp\n";
+			$conds = array(	'img_name >= ' . $dbr->addQuotes( $cp ) );
+		} else {
+			print "Writing image description pages for local images\n";		
+			$conds = false;
+		}
+
+		$this->setupGlobals();
+		$i = 0;
+
+		do {
+			$res = $dbr->select( 'image', array( 'img_name' ), $conds, __METHOD__, 
+				array( 'ORDER BY' => 'img_name', 'LIMIT' => $chunkSize ) );
+			$numRows = $dbr->numRows( $res );
+
+			while ( $row = $dbr->fetchObject( $res ) ) {
+				# Update conds for the next chunk query
+				$conds = array( 'img_name > ' . $dbr->addQuotes( $row->img_name ) );
+				
+				// Slice the result set with a filter
+				if ( !$this->sliceFilter( $row->img_name ) ) {
+					continue;
+				}
+
+				wfWaitForSlaves( 10 );
+				if ( !( ++$i % REPORTING_INTERVAL ) ) {
+					print "{$row->img_name}\n";
+					if ( $row->img_name !== 'done' ) {
+						$this->setCheckpoint( 'local image', $row->img_name );
+					}
+				}
+				$title = Title::makeTitle( NS_IMAGE, $row->img_name );
+				if ( $title->getArticleID() ) {
+					// Already done by dumpHTML
+					continue;
+				}
+				$this->doArticle( $title );
+			}
+			$dbr->freeResult( $res );
+		} while ( $numRows );
+		
+		$this->setCheckpoint( 'local image', 'done' );
+		print "\n";
+	}
+
+	/**
+	 * Dump images which only have a real description page on commons
+	 */
+	function doSharedImageDescriptions() {
+		list( $start, $end ) = $this->sliceRange( 0, 255 );
+
+		$cp = $this->getCheckpoint( 'shared image' );
+		if ( $cp == 'done' ) {
+			print "Shared description pages already done\n";
+			return;
+		} elseif ( $cp !== false ) {
+			print "Writing description pages for commons images starting from directory $cp/255\n";
+			$start = $cp;
+		} else {
+			print "Writing description pages for commons images\n";
+		}
+
+		$this->setupGlobals();
+		$i = 0;
+		for ( $hash = $start; $hash <= $end; $hash++ ) {
+			$this->setCheckpoint( 'shared image', $hash );
+
+			$dir = sprintf( "%s/%01x/%02x", $this->sharedStaticDirectory,
+		       		intval( $hash / 16 ), $hash );
+			$handle = @opendir( $dir );
+			while ( $handle && $file = readdir( $handle ) ) {
+				if ( $file[0] == '.' ) {
+					continue;
+				}
+				if ( !(++$i % REPORTING_INTERVAL ) ) {
+					print "$i\r";
+				}
+
+				$title = Title::makeTitleSafe( NS_IMAGE, $file );
+				$this->doArticle( $title );
+			}
+			if ( $handle ) {
+				closedir( $handle );
+			}
+		}
+		$this->setCheckpoint( 'shared image', 'done' );
+		print "\n";
+	}
+
+	function doCategories() {
+		$chunkSize = 1000;
+		
+		$this->setupGlobals();
+		$dbr = wfGetDB( DB_SLAVE );
+		
+		$cp = $this->getCheckpoint( 'category' );
+		if ( $cp == 'done' ) {
+			print "Category pages already done\n";
+			return;
+		} elseif ( $cp !== false ) {
+			print "Resuming category page dump from $cp\n";
+			$conds = array( 'cl_to >= ' . $dbr->addQuotes( $cp ) );
+		} else {
+			print "Starting category pages\n";
+			$conds = false;
+		}
+
+		$i = 0;
+		do {
+			$res = $dbr->select( 'categorylinks', 'DISTINCT cl_to', $conds, __METHOD__, 
+				array( 'ORDER BY' => 'cl_to', 'LIMIT' => $chunkSize ) );
+			$numRows = $dbr->numRows( $res );
+			
+			while ( $row = $dbr->fetchObject( $res ) ) {
+				// Set conditions for next chunk
+				$conds = array( 'cl_to > ' . $dbr->addQuotes( $row->cl_to ) );
+				
+				// Filter pages from other slices
+				if ( !$this->sliceFilter( $row->cl_to ) ) {
+					continue;
+				}
+
+				wfWaitForSlaves( 10 );
+				if ( !(++$i % REPORTING_INTERVAL ) ) {
+					print "{$row->cl_to}\n";
+					if ( $row->cl_to != 'done' ) {
+						$this->setCheckpoint( 'category', $row->cl_to );
+					}
+				}
+				$title = Title::makeTitle( NS_CATEGORY, $row->cl_to );
+				$this->doArticle( $title );
+			}
+			$dbr->freeResult( $res );
+		} while ( $numRows );
+		
+		$this->setCheckpoint( 'category', 'done' );
+		print "\n";
+	}
+
+	function doRedirects() {
+		print "Doing redirects...\n";
+
+		$chunkSize = 10000;
+		$end = $this->getMaxPageID();
+		$cp = $this->getCheckpoint( 'redirect' );
+		if ( $cp == 'done' )  {
+			print "Redirects already done\n";
+			return;
+		} elseif ( $cp !== false ) {
+			print "Resuming redirect generation from page_id $cp\n";
+			$start = intval( $cp );
+		} else {
+			$start = 1;
+		}
+
+		$this->setupGlobals();
+		$dbr = wfGetDB( DB_SLAVE );
+		$i = 0;
+
+		for ( $chunkStart = $start; $chunkStart <= $end; $chunkStart += $chunkSize ) {
+			$chunkEnd = min( $end, $chunkStart + $chunkSize - 1 );
+			$conds = array( 
+				'page_is_redirect' => 1,
+				"page_id BETWEEN $chunkStart AND $chunkEnd"
+			);
+			# Modulo slicing in SQL
+			if ( $this->sliceDenominator != 1 ) {
+				$n = intval( $this->sliceNumerator );
+				$m = intval( $this->sliceDenominator );
+				$conds[] = "page_id % $m = $n";
+			}
+			$res = $dbr->select( 'page', array( 'page_id', 'page_namespace', 'page_title' ),
+				$conds, __METHOD__ );
+			
+			while ( $row = $dbr->fetchObject( $res ) ) {
+				$title = Title::makeTitle( $row->page_namespace, $row->page_title );
+				if ( !(++$i % (REPORTING_INTERVAL*10) ) ) {
+					printf( "Done %d redirects (%2.3f%%)\n", $i, $row->page_id / $end * 100 );
+					$this->setCheckpoint( 'redirect', $row->page_id );
+				}
+				$this->doArticle( $title );
+			}
+			$dbr->freeResult( $res );
+		}
+		$this->setCheckpoint( 'redirect', 'done' );
+	}
+
+	/** Write an article specified by title */
+	function doArticle( $title ) {
+		if ( $this->noOverwrite ) {
+			$fileName = $this->dest.'/'.$this->getHashedFilename( $title );
+			if ( file_exists( $fileName ) ) {
+				return;
+			}
+		}
+
+		$this->profile();
+
+		$this->rawPages = array();
+		$text = $this->getArticleHTML( $title );
+
+		if ( $text === false ) {
+			return;
+		}
+
+		# Parse the XHTML to find the images
+		$images = $this->findImages( $text );
+		$this->copyImages( $images );
+
+		# Write to file
+		$this->writeArticle( $title, $text );
+
+		# Do raw pages
+		wfMkdirParents( "{$this->dest}/raw", 0755 );
+		foreach( $this->rawPages as $record ) {
+			list( $file, $title, $params ) = $record;
+
+			$path = "{$this->dest}/raw/$file";
+			if ( !file_exists( $path ) ) {
+				$article = new Article( $title );
+				$request = new FauxRequest( $params );
+				$rp = new RawPage( $article, $request );
+				$text = $rp->getRawText();
+
+				print "Writing $file\n";
+				$file = fopen( $path, 'w' );
+				if ( !$file ) {
+					print("Can't open file $path for writing\n");
+					continue;
+				}
+				fwrite( $file, $text );
+				fclose( $file );
+			}
+		}
+
+		wfIncrStats( 'dumphtml_article' );
+	}
+
+	/** Write the given text to the file identified by the given title object */
+	function writeArticle( $title, $text ) {
+		$filename = $this->getHashedFilename( $title );
+
+		# Temporary hack for current dump, this should be moved to 
+		# getFriendlyName() at the earliest opportunity.
+		#
+		# Limit filename length to 255 characters, so it works on ext3.
+		# Titles are in fact limited to 255 characters, but dumpHTML 
+		# adds a suffix which may put them over the limit.
+		$length = strlen( $filename );
+		if ( $length > 255 ) {
+			print "Warning: Filename too long ($length bytes). Skipping.\n";
+			return;
+		}
+			
+		$fullName = "{$this->dest}/$filename";
+		$fullDir = dirname( $fullName );
+
+		if ( $this->compress ) {
+			$fullName .= ".gz";
+			$text = gzencode( $text, 9 );				
+		}
+
+		wfMkdirParents( $fullDir, 0755 );
+
+		wfSuppressWarnings();
+		$file = fopen( $fullName, 'w' );
+		wfRestoreWarnings();
+
+		if ( !$file ) {
+			die("Can't open file '$fullName' for writing.\nCheck permissions or use another destination (-d).\n");
+			return;
+		}
+
+		fwrite( $file, $text );
+		fclose( $file );
+	}
+
+	/** Set up globals required for parsing */
+	function setupGlobals( $currentDepth = NULL ) {
+		global $wgUser, $wgStylePath, $wgArticlePath, $wgMathPath;
+		global $wgUploadPath, $wgLogo, $wgMaxCredits, $wgSharedUploadPath;
+		global $wgHideInterlanguageLinks, $wgUploadDirectory, $wgThumbnailScriptPath;
+		global $wgSharedThumbnailScriptPath, $wgEnableParserCache, $wgHooks, $wgServer;
+		global $wgRightsUrl, $wgRightsText, $wgCopyrightIcon, $wgEnableSidebarCache;
+		global $wgGenerateThumbnailOnParse;
+
+		static $oldLogo = NULL;
+
+		if ( !$this->setupDone ) {
+			$wgHooks['GetLocalURL'][] =& $this;
+			$wgHooks['GetFullURL'][] =& $this;
+			$wgHooks['SiteNoticeBefore'][] =& $this;
+			$wgHooks['SiteNoticeAfter'][] =& $this;
+			$this->oldArticlePath = $wgServer . $wgArticlePath;
+		}
+
+		if ( is_null( $currentDepth ) ) {
+			$currentDepth = $this->depth;
+		}
+
+		if ( $this->alternateScriptPath ) {
+			if ( $currentDepth == 0 ) {
+				$wgScriptPath = '.';
+			} else {
+				$wgScriptPath = '..' . str_repeat( '/..', $currentDepth - 1 );
+			}
+		} else {
+			$wgScriptPath = '..' . str_repeat( '/..', $currentDepth );
+		}
+
+		$wgArticlePath = str_repeat( '../', $currentDepth ) . '$1';
+
+		# Logo image
+		# Allow for repeated setup
+		if ( !is_null( $oldLogo ) ) {
+			$wgLogo = $oldLogo;
+		} else {
+			$oldLogo = $wgLogo;
+		}
+
+		if ( strpos( $wgLogo, $wgUploadPath ) === 0 ) {
+			# If it's in the upload directory, rewrite it to the new upload directory
+			$wgLogo = "$wgScriptPath/{$this->imageRel}/" . substr( $wgLogo, strlen( $wgUploadPath ) + 1 );
+		} elseif ( $wgLogo{0} == '/' ) {
+			# This is basically heuristic
+			# Rewrite an absolute logo path to one relative to the the script path
+			$wgLogo = $wgScriptPath . $wgLogo;
+		}
+
+		# Another ugly hack
+		if ( !$this->setupDone ) {
+			$this->oldCopyrightIcon = $wgCopyrightIcon;
+		}
+		$wgCopyrightIcon = str_replace( 'src="/images',
+			'src="' . htmlspecialchars( $wgScriptPath ) . '/images', $this->oldCopyrightIcon );
+
+		$wgStylePath = "$wgScriptPath/skins";
+		$wgUploadPath = "$wgScriptPath/{$this->imageRel}";
+		$wgSharedUploadPath = "$wgUploadPath/shared";
+		$wgMaxCredits = -1;
+		$wgHideInterlanguageLinks = !$this->interwiki;
+		$wgThumbnailScriptPath = $wgSharedThumbnailScriptPath = false;
+		$wgEnableParserCache = false;
+		$wgMathPath = "$wgScriptPath/math";
+		$wgEnableSidebarCache = false;
+		$wgGenerateThumbnailOnParse = true;
+
+		if ( !empty( $wgRightsText ) ) {
+			$wgRightsUrl = "$wgScriptPath/COPYING.html";
+		}
+
+		$wgUser = new User;
+		$wgUser->setOption( 'skin', $this->skin );
+		$wgUser->setOption( 'editsection', 0 );
+
+		$this->destUploadDirectory = "{$this->dest}/{$this->imageRel}";
+		if ( realpath( $this->destUploadDirectory ) == realpath( $wgUploadDirectory ) ) {
+			print "Disabling image snapshot because the destination is the same as the source\n";
+			$this->makeSnapshot = false;
+		}
+		$this->sharedStaticDirectory = "{$this->destUploadDirectory}/shared";
+
+		$this->setupDone = true;
+	}
+
+	/** Reads the content of a title object, executes the skin and captures the result */
+	function getArticleHTML( $title ) {
+		global $wgOut, $wgTitle, $wgArticle, $wgUser;
+
+		$linkCache =& LinkCache::singleton();
+		$linkCache->clear();
+		$wgTitle = $title;
+		if ( is_null( $wgTitle ) ) {
+			return false;
+		}
+
+		$ns = $wgTitle->getNamespace();
+		if ( $ns == NS_SPECIAL ) {
+			$wgOut = new OutputPage;
+			$wgOut->setParserOptions( new ParserOptions );
+			SpecialPage::executePath( $wgTitle );
+		} else {
+			/** @todo merge with Wiki.php code */
+			if ( $ns == NS_IMAGE ) {
+				$wgArticle = new ImagePage( $wgTitle );
+			} elseif ( $ns == NS_CATEGORY ) {
+				$wgArticle = new CategoryPage( $wgTitle );
+			} else {
+				$wgArticle = new Article( $wgTitle );
+			}
+			$rt = Title::newFromRedirect( $wgArticle->fetchContent() );
+			if ( $rt != NULL ) {
+				return $this->getRedirect( $rt );
+			} else {
+				$wgOut = new OutputPage;
+				$wgOut->setParserOptions( new ParserOptions );
+
+				$wgArticle->view();
+			}
+		}
+
+	
+		$sk =& $wgUser->getSkin();
+		ob_start();
+		$sk->outputPage( $wgOut );
+		$text = ob_get_contents();
+		ob_end_clean();
+
+		return $text;
+	}
+
+	function getRedirect( $rt ) {
+		$url = $rt->escapeLocalURL();
+		$text = $rt->getPrefixedText();
+		return <<<ENDTEXT
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+  <meta http-equiv="Refresh" content="0;url=$url" />
+</head>
+<body>
+  <p>Redirecting to <a href="$url">$text</a></p>
+</body>
+</html>
+ENDTEXT;
+	}
+
+	/** Returns image paths used in an XHTML document */
+	function findImages( $text ) {
+		global $wgOutputEncoding, $wgDumpImages;
+		$parser = xml_parser_create( $wgOutputEncoding );
+		xml_set_element_handler( $parser, 'wfDumpStartTagHandler', 'wfDumpEndTagHandler' );
+
+		$wgDumpImages = array();
+		xml_parse( $parser, $text );
+		xml_parser_free( $parser );
+
+		return $wgDumpImages;
+	}
+
+	/**
+	 * Copy a file specified by a URL to a given directory
+	 * 
+	 * @param string $srcPath The source URL
+	 * @param string $srcPathBase The base directory of the source URL
+	 * @param string $srcDirBase The base filesystem directory of the source URL
+	 * @param string $destDirBase The base filesystem directory of the destination URL
+	 */
+	function relativeCopy( $srcPath, $srcPathBase, $srcDirBase, $destDirBase ) {
+		$rel = substr( $srcPath, strlen( $srcPathBase ) + 1 ); // +1 for slash
+		$sourceLoc = "$srcDirBase/$rel";
+		$destLoc = "$destDirBase/$rel";
+		#print "Copying $sourceLoc to $destLoc\n";
+		if ( !file_exists( $destLoc ) ) {
+			wfMkdirParents( dirname( $destLoc ), 0755 );
+			if ( function_exists( 'symlink' ) && !$this->forceCopy ) {
+				if ( !symlink( $sourceLoc, $destLoc ) ) {
+					print "Warning: unable to create symlink at $destLoc\n";
+				}
+			} else {
+				if ( !copy( $sourceLoc, $destLoc ) ) {
+					print "Warning: unable to copy $sourceLoc to $destLoc\n";
+				}
+			}
+		}
+	}
+
+	/**
+	 * Copy an image, and if it is a thumbnail, copy its parent image too
+	 */
+	function copyImage( $srcPath, $srcPathBase, $srcDirBase, $destDirBase ) {
+		global $wgUploadPath, $wgUploadDirectory, $wgSharedUploadPath;
+		$this->relativeCopy( $srcPath, $srcPathBase, $srcDirBase, $destDirBase );
+		if ( substr( $srcPath, strlen( $srcPathBase ) + 1, 6 ) == 'thumb/' ) {
+			# The image was a thumbnail
+			# Copy the source image as well
+			$rel = substr( $srcPath, strlen( $srcPathBase ) + 1 );
+			$parts = explode( '/', $rel );
+			$rel = "{$parts[1]}/{$parts[2]}/{$parts[3]}";
+			$newSrc = "$srcPathBase/$rel";
+			$this->relativeCopy( $newSrc, $srcPathBase, $srcDirBase, $destDirBase );
+		}
+	}
+	
+	/**
+	 * Copy images (or create symlinks) from commons to a static directory.
+	 * This is necessary even if you intend to distribute all of commons, because
+	 * the directory contents is used to work out which image description pages
+	 * are needed.
+	 *
+	 * Also copies math images, and full-sized images if the makeSnapshot option 
+	 * is specified.
+	 *
+	 */
+	function copyImages( $images ) {
+		global $wgUploadPath, $wgUploadDirectory, $wgSharedUploadPath, $wgSharedUploadDirectory, 
+			$wgMathPath, $wgMathDirectory;
+		# Find shared uploads and copy them into the static directory
+		$sharedPathLength = strlen( $wgSharedUploadPath );
+		$mathPathLength = strlen( $wgMathPath );
+		$uploadPathLength = strlen( $wgUploadPath );
+		foreach ( $images as $escapedImage => $dummy ) {
+			$image = urldecode( $escapedImage );
+
+			if ( substr( $image, 0, $sharedPathLength ) == $wgSharedUploadPath ) {
+				$this->copyImage( $image, $wgSharedUploadPath, $wgSharedUploadDirectory, $this->sharedStaticDirectory );
+			} elseif ( substr( $image, 0, $mathPathLength ) == $wgMathPath ) {
+				$this->relativeCopy( $image, $wgMathPath, $wgMathDirectory, "{$this->dest}/math" );
+			} elseif ( $this->makeSnapshot && substr( $image, 0, $uploadPathLength ) == $wgUploadPath ) {
+				$this->copyImage( $image, $wgUploadPath, $wgUploadDirectory, $this->destUploadDirectory );
+			}
+		}
+	}
+
+	function onGetFullURL( &$title, &$url, $query ) {
+		global $wgContLang, $wgArticlePath;
+
+		$iw = $title->getInterwiki();
+		if ( $title->isExternal() && $wgContLang->getLanguageName( $iw ) ) {
+			if ( $title->getDBkey() == '' ) {
+				$url = str_replace( '$1', "../$iw/index.html", $wgArticlePath );
+			} else {
+				$url = str_replace( '$1', "../$iw/" . wfUrlencode( $this->getHashedFilename( $title ) ),
+					$wgArticlePath );
+			}
+			$url .= $this->compress ? ".gz" : "";
+			return false;
+		} else {
+			return true;
+		}
+	}
+
+	function onGetLocalURL( &$title, &$url, $query ) {
+		global $wgArticlePath;
+
+		if ( $title->isExternal() ) {
+			# Default is fine for interwiki
+			return true;
+		}
+
+		$url = false;
+		if ( $query != '' ) {
+			$params = array();
+			parse_str( $query, $params );
+			if ( isset($params['action']) && $params['action'] == 'raw' ) {
+				if ( $params['gen'] == 'css' || $params['gen'] == 'js' ) {
+					$file = 'gen.' . $params['gen'];
+				} else {
+					$file = $this->getFriendlyName( $title->getPrefixedDBkey() );
+					// Clean up Monobook.css etc.
+					$matches = array();
+					if ( preg_match( '/^(.*)\.(css|js)_[0-9a-f]{4}$/', $file, $matches ) ) {
+						$file = $matches[1] . '.' . $matches[2];
+					}
+				}
+				$this->rawPages[$file] = array( $file, $title, $params );
+				$url = str_replace( '$1', "raw/" . wfUrlencode( $file ), $wgArticlePath );
+			}
+		}
+		if ( $url === false ) {
+			$url = str_replace( '$1', wfUrlencode( $this->getHashedFilename( $title ) ), $wgArticlePath );
+		}
+		$url .= $this->compress ? ".gz" : "";
+		return false;
+	}
+
+	function getHashedFilename( &$title ) {
+		if ( '' != $title->mInterwiki ) {
+			$dbkey = $title->getDBkey();
+		} else {
+			$dbkey = $title->getPrefixedDBkey();
+		}
+
+		$mainPage = Title::newMainPage();
+		if ( $mainPage->getPrefixedDBkey() == $dbkey ) {
+			return 'index.html';
+		}
+
+		return $this->getHashedDirectory( $title ) . '/' .
+			$this->getFriendlyName( $dbkey ) . '.html';
+	}
+
+	function getFriendlyName( $name ) {
+		global $wgLang;
+		# Replace illegal characters for Windows paths with underscores
+		$friendlyName = strtr( $name, '/\\*?"<>|~', '_________' );
+
+		# Work out lower case form. We assume we're on a system with case-insensitive
+		# filenames, so unless the case is of a special form, we have to disambiguate
+		if ( function_exists( 'mb_strtolower' ) ) {
+			$lowerCase = $wgLang->ucfirst( mb_strtolower( $name ) );
+		} else {
+			$lowerCase = ucfirst( strtolower( $name ) );
+		}
+
+		# Make it mostly unique
+		if ( $lowerCase != $friendlyName  ) {
+			$friendlyName .= '_' . substr(md5( $name ), 0, 4);
+		}
+		# Handle colon specially by replacing it with tilde
+		# Thus we reduce the number of paths with hashes appended
+		$friendlyName = str_replace( ':', '~', $friendlyName );
+
+		return $friendlyName;
+	}
+
+	/**
+	 * Get a relative directory for putting a title into
+	 */
+	function getHashedDirectory( &$title ) {
+		if ( '' != $title->getInterwiki() ) {
+			$pdbk = $title->getDBkey();
+		} else {
+			$pdbk = $title->getPrefixedDBkey();
+		}
+
+		# Find the first colon if there is one, use characters after it
+		$p = strpos( $pdbk, ':' );
+		if ( $p !== false ) {
+			$dbk = substr( $pdbk, $p + 1 );
+			$dbk = substr( $dbk, strspn( $dbk, '_' ) );
+		} else {
+			$dbk = $pdbk;
+		}
+
+		# Split into characters
+		$m = array();
+		preg_match_all( '/./us', $dbk, $m );
+
+		$chars = $m[0];
+		$length = count( $chars );
+		$dir = '';
+
+		for ( $i = 0; $i < $this->depth; $i++ ) {
+			if ( $i ) {
+				$dir .= '/';
+			}
+			if ( $i >= $length ) {
+				$dir .= '_';
+			} else {
+				$c = $chars[$i];
+				if ( ord( $c ) >= 128 || preg_match( '/[a-zA-Z0-9!#$%&()+,[\]^_`{}-]/', $c ) ) {
+					if ( function_exists( 'mb_strtolower' ) ) {
+						$dir .= mb_strtolower( $c );
+					} else {
+						$dir .= strtolower( $c );
+					}
+				} else {
+					$dir .= sprintf( "%02X", ord( $c ) );
+				}
+			}
+		}
+		return $dir;
+	}
+
+	/**
+	 * Calculate the start end end of a job based on the current slice
+	 * @param integer $start
+	 * @param integer $end
+	 * @return array of integers
+	 */
+	function sliceRange( $start, $end ) {
+		$count = $end - $start + 1;
+		$each = $count / $this->sliceDenominator;
+		$sliceStart = $start + intval( $each * ( $this->sliceNumerator - 1 ) );
+		if ( $this->sliceNumerator == $this->sliceDenominator ) {
+			$sliceEnd = $end;
+		} else {
+			$sliceEnd = $start + intval( $each * $this->sliceNumerator ) - 1;
+		}
+		return array( $sliceStart, $sliceEnd );
+	}
+
+	/**
+	 * Adjust a start point so that it belongs to the current slice, where slices are defined by integer modulo
+	 * @param integer $start
+	 * @param integer $base The true start of the range; the minimum start
+	 */
+	function modSliceStart( $start, $base = 1 ) {
+		return $start - ( $start % $this->sliceDenominator ) + $this->sliceNumerator - 1 + $base;
+	}
+
+	/**
+	 * Determine whether a string belongs to the current slice, based on hash
+	 */
+	function sliceFilter( $s ) {
+		return crc32( $s ) % $this->sliceDenominator == $this->sliceNumerator - 1;
+	}
+
+	/**
+	 * No site notice
+	 */
+	function onSiteNoticeBefore( &$text ) {
+		$text = '';
+		return false;
+	}
+	function onSiteNoticeAfter( &$text ) {
+		$text = '';
+		return false;
+	}
+
+	function getMaxPageID() {
+		if ( $this->maxPageID === false ) {
+			$dbr = wfGetDB( DB_SLAVE );
+			$this->maxPageID = $dbr->selectField( 'page', 'max(page_id)', false, __METHOD__ );
+		}
+		return $this->maxPageID;
+	}
+
+	function profile() {
+		global $wgProfiler;
+
+		if ( !$this->udpProfile ) {
+			return;
+		}
+		if ( !$this->udpProfileInit ) {
+			$this->udpProfileInit = true;
+		} elseif ( $this->udpProfileCounter == 1 % $this->udpProfile ) {
+			$wgProfiler->getFunctionReport();
+			$wgProfiler = new DumpHTML_ProfilerStub;
+		}
+		if ( $this->udpProfileCounter == 0 ) {
+			$wgProfiler = new ProfilerSimpleUDP;
+			$wgProfiler->setProfileID( 'dumpHTML' );
+		}
+		$this->udpProfileCounter = ( $this->udpProfileCounter + 1 ) % $this->udpProfile;
+	}
+}
+
+class DumpHTML_ProfilerStub {
+	function profileIn() {}
+	function profileOut() {}
+	function getOutput() {}
+	function close() {}
+	function getFunctionReport() {}
+}
+
+/** XML parser callback */
+function wfDumpStartTagHandler( $parser, $name, $attribs ) {
+	global $wgDumpImages;
+
+	if ( $name == 'IMG' && isset( $attribs['SRC'] ) ) {
+		$wgDumpImages[$attribs['SRC']] = true;
+	}
+}
+
+/** XML parser callback */
+function wfDumpEndTagHandler( $parser, $name ) {}
+
+# vim: syn=php
+?>
Index: /MediaWiki/branches/1.11/maintenance/dumpHTML.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/dumpHTML.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/dumpHTML.php	(revision 1280)
@@ -0,0 +1,150 @@
+<?php
+/**
+ * @todo document
+ * @addtogroup Maintenance
+ */
+
+/**
+ * Usage:
+ * php dumpHTML.php [options...]
+ *
+ * -d <dest>            destination directory
+ * -s <start>           start ID
+ * -e <end>             end ID
+ * -k <skin>            skin to use (defaults to htmldump)
+ * --no-overwrite       skip existing HTML files
+ * --checkpoint <file>  use a checkpoint file to allow restarting of interrupted dumps
+ * --slice <n/m>        split the job into m segments and do the n'th one
+ * --images             only do image description pages
+ * --shared-desc        only do shared (commons) image description pages
+ * --no-shared-desc     don't do shared image description pages
+ * --categories         only do category pages
+ * --redirects          only do redirects
+ * --special            only do miscellaneous stuff
+ * --force-copy         copy commons instead of symlink, needed for Wikimedia
+ * --interlang          allow interlanguage links
+ * --image-snapshot     copy all images used to the destination directory
+ * --compress           generate compressed version of the html pages
+ * --udp-profile <N>    profile 1/N rendering operations using ProfilerSimpleUDP
+ */
+
+
+$optionsWithArgs = array( 's', 'd', 'e', 'k', 'checkpoint', 'slice', 'udp-profile' );
+
+$profiling = false;
+
+if ( $profiling ) {
+	define( 'MW_CMDLINE_CALLBACK', 'wfSetupDump' );
+	function wfSetupDump() {
+		global $wgProfiling, $wgProfileToDatabase, $wgProfileSampleRate;
+		$wgProfiling = true;
+		$wgProfileToDatabase = false;
+		$wgProfileSampleRate = 1;
+	}
+}
+
+if ( in_array( '--udp-profile', $argv ) ) {
+	define( 'MW_FORCE_PROFILE', 1 );
+}
+
+require_once( "commandLine.inc" );
+require_once( "dumpHTML.inc" );
+
+error_reporting( E_ALL & (~E_NOTICE) );
+
+if ( !empty( $options['s'] ) ) {
+	$start = $options['s'];
+} else {
+	$start = 1;
+}
+
+if ( !empty( $options['e'] ) ) {
+	$end = $options['e'];
+} else {
+	$dbr = wfGetDB( DB_SLAVE );
+	$end = $dbr->selectField( 'page', 'max(page_id)', false );
+}
+
+if ( !empty( $options['d'] ) ) {
+	$dest = $options['d'];
+} else {
+	$dest = "$IP/static";
+}
+
+$skin = isset( $options['k'] ) ? $options['k'] : 'htmldump';
+
+if ( $options['slice'] ) {
+	$bits = explode( '/', $options['slice'] );
+	if ( count( $bits ) != 2 || $bits[0] < 1 || $bits[0] > $bits[1] ) {
+		print "Invalid slice specification";
+		exit;
+	}
+	$sliceNumerator = $bits[0];
+	$sliceDenominator = $bits[1];
+} else {
+	$sliceNumerator = $sliceDenominator = 1;
+}
+
+$wgHTMLDump = new DumpHTML( array(
+	'dest' => $dest,
+	'forceCopy' => $options['force-copy'],
+	'alternateScriptPath' => $options['interlang'],
+	'interwiki' => $options['interlang'],
+	'skin' => $skin,
+	'makeSnapshot' => $options['image-snapshot'],
+	'checkpointFile' => $options['checkpoint'],
+	'startID' => $start,
+	'endID' => $end,
+	'sliceNumerator' => $sliceNumerator,
+	'sliceDenominator' => $sliceDenominator,
+	'noOverwrite' => $options['no-overwrite'],
+	'compress' => $options['compress'],
+	'noSharedDesc' => $options['no-shared-desc'],
+	'udpProfile' => $options['udp-profile'],
+));
+
+
+if ( $options['special'] ) {
+	$wgHTMLDump->doSpecials();
+} elseif ( $options['images'] ) {
+	$wgHTMLDump->doImageDescriptions();
+} elseif ( $options['categories'] ) {
+	$wgHTMLDump->doCategories();
+} elseif ( $options['redirects'] ) {
+	$wgHTMLDump->doRedirects();
+} elseif ( $options['shared-desc'] ) {
+	$wgHTMLDump->doSharedImageDescriptions();
+} else {
+	print "Creating static HTML dump in directory $dest. \n";
+	$dbr = wfGetDB( DB_SLAVE );
+	$server = $dbr->getProperty( 'mServer' );
+	print "Using database {$server}\n";
+
+	if ( !isset( $options['e'] ) ) {
+		$wgHTMLDump->doEverything();
+	} else {
+		$wgHTMLDump->doArticles();
+	}
+}
+
+if ( isset( $options['debug'] ) ) {
+	#print_r($GLOBALS);
+	# Workaround for bug #36957
+	$globals = array_keys( $GLOBALS );
+	#sort( $globals );
+	$sizes = array();
+	foreach ( $globals as $name ) {
+		 $sizes[$name] = strlen( serialize( $GLOBALS[$name] ) );
+	}
+	arsort($sizes);
+	$sizes = array_slice( $sizes, 0, 20 );
+	foreach ( $sizes as $name => $size ) {
+		printf( "%9d %s\n", $size, $name );
+	}
+}
+
+if ( $profiling ) {
+	echo $wgProfiler->getOutput();
+}
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/dumpInterwiki.inc
===================================================================
--- /MediaWiki/branches/1.11/maintenance/dumpInterwiki.inc	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/dumpInterwiki.inc	(revision 1280)
@@ -0,0 +1,211 @@
+<?php
+/**
+ * Rebuild interwiki table using the file on meta and the language list
+ * Wikimedia specific!
+ *
+ * @todo document
+ * @addtogroup Maintenance
+ */
+
+/** */
+
+/**
+ * @todo document
+ * @addtogroup Maintenance
+ */
+class Site {
+	var $suffix, $lateral, $url;
+
+	function Site( $s, $l, $u ) {
+		$this->suffix = $s;
+		$this->lateral = $l;
+		$this->url = $u;
+	}
+
+	function getURL( $lang ) {
+		$xlang = str_replace( '_', '-', $lang );
+		return "http://$xlang.{$this->url}/wiki/\$1";
+	}
+}
+
+function getRebuildInterwikiDump() {
+	global $langlist, $languageAliases, $prefixRewrites;
+
+	# Multi-language sites
+	# db suffix => db suffix, iw prefix, hostname
+	$sites = array(
+		'wiki' => new Site( 'wiki', 'w', 'wikipedia.org' ),
+		'wiktionary' => new Site( 'wiktionary', 'wikt', 'wiktionary.org' ),
+		'wikiquote' => new Site( 'wikiquote', 'q', 'wikiquote.org' ),
+		'wikibooks' => new Site( 'wikibooks', 'b', 'wikibooks.org' ),
+		'wikinews' => new Site( 'wikinews', 'n', 'wikinews.org' ),
+		'wikisource' => new Site( 'wikisource', 's', 'wikisource.org' ),
+		'wikimedia' => new Site( 'wikimedia', 'chapter', 'wikimedia.org' ),
+		'wikiversity' => new Site( 'wikiversity', 'v', 'wikiversity.org' ),
+	);
+
+	# List of language prefixes likely to be found in multi-language sites
+	$langlist = array_map( "trim", file( "/home/wikipedia/common/langlist" ) );
+
+	# List of all database names
+	$dblist = array_map( "trim", file( "/home/wikipedia/common/all.dblist" ) );
+
+	# Special-case databases
+	$specials = array_flip(
+		array_map( "trim",
+			file( "/home/wikipedia/common/special.dblist" ) ) );
+
+	# Extra interwiki links that can't be in the intermap for some reason
+	$extraLinks = array(
+		array( 'm', 'http://meta.wikimedia.org/wiki/$1', 1 ),
+		array( 'meta', 'http://meta.wikimedia.org/wiki/$1', 1 ),
+		array( 'sep11', 'http://sep11.wikipedia.org/wiki/$1', 1 ),
+	);
+
+	# Language aliases, usually configured as redirects to the real wiki in apache
+	# Interlanguage links are made directly to the real wiki
+	# Something horrible happens if you forget to list an alias here, I can't
+	#   remember what
+	$languageAliases = array(
+		'zh-cn' => 'zh',
+		'zh-tw' => 'zh',
+		'dk' => 'da',
+		'nb' => 'no',
+	);
+
+	# Special case prefix rewrites, for the benefit of Swedish which uses s:t
+	# as an abbreviation for saint
+	$prefixRewrites = array(
+                'svwiki' => array ( 's' => 'src'),
+	); 
+
+	# Construct a list of reserved prefixes
+	$reserved = array();
+	foreach ( $langlist as $lang ) {
+		$reserved[$lang] = 1;
+	}
+	foreach ( $languageAliases as $alias => $lang ) {
+		$reserved[$alias] = 1;
+	}
+	foreach( $sites as $site ) {
+		$reserved[$site->lateral] = 1;
+	}
+
+	# Extract the intermap from meta
+	$intermap = wfGetHTTP( 'http://meta.wikimedia.org/w/index.php?title=Interwiki_map&action=raw', 30 );
+	$lines = array_map( 'trim', explode( "\n", trim( $intermap ) ) );
+
+	if ( !$lines || count( $lines ) < 2 ) {
+		wfDie( "m:Interwiki_map not found" );
+	}
+
+	# Global iterwiki map
+	foreach ( $lines as $line ) {
+		if ( preg_match( '/^\|\s*(.*?)\s*\|\|\s*(.*?)\s*$/', $line, $matches ) ) {
+			$prefix = strtolower( $matches[1] );
+			$url = $matches[2];
+			if ( preg_match( '/(wikipedia|wiktionary|wikisource|wikiquote|wikibooks|wikimedia)\.org/', $url ) ) {
+				$local = 1;
+			} else {
+				$local = 0;
+			}
+
+			if ( empty( $reserved[$prefix] ) ) {
+			    $imap  = array( "iw_prefix" => $prefix, "iw_url" => $url, "iw_local" => $local );
+                            makeLink ($imap, "__global");
+			}
+		}
+	}
+
+        # Exclude Wikipedia for Wikipedia
+        makeLink ( array ('iw_prefix' => 'wikipedia', 'is_url' => null ), "_wiki" );
+        
+        #Multilanguage sites
+        foreach ($sites as $site) 
+            makeLanguageLinks ( $site, "_".$site->suffix );
+
+
+        foreach ( $dblist as $db ) {
+		if ( isset( $specials[$db] ) ) {
+			# Special wiki
+			# Has interwiki links and interlanguage links to wikipedia
+
+                        makeLink( array( 'iw_prefix' => $db, 'iw_url' => "wiki"), "__sites" );
+			# Links to multilanguage sites
+			foreach ( $sites as $targetSite ) {
+				makeLink( array( 'iw_prefix' => $targetSite->lateral, 
+                                                    'iw_url' =>$targetSite->getURL( 'en' ),
+                                                    'iw_local' => 1 ), $db );
+			}
+
+		} else {
+			# Find out which site this DB belongs to
+			$site = false;
+			foreach( $sites as $candidateSite ) {
+				$suffix = $candidateSite->suffix;
+				if ( preg_match( "/(.*)$suffix$/", $db, $matches ) ) {
+				$site = $candidateSite;
+					break;
+				}
+			}
+                        makeLink( array( 'iw_prefix' => $db, 'iw_url' => $site->suffix), "__sites" );
+			if ( !$site ) {
+				print "Invalid database $db\n";
+				continue;
+			}
+			$lang = $matches[1];
+
+			# Lateral links
+			foreach ( $sites as $targetSite ) {
+				if ( $targetSite->suffix != $site->suffix ) {
+					makeLink( array( 'iw_prefix' => $targetSite->lateral, 
+                                                            'iw_url' => $targetSite->getURL( $lang ), 
+                                                            'iw_local' => 1 ), $db );
+				}
+			}
+
+			if ( $site->suffix == "wiki" ) {
+				makeLink( array('iw_prefix' => 'w', 
+                                                'iw_url' => "http://en.wikipedia.org/wiki/$1", 
+                                                'iw_local' => 1), $db );
+			}
+
+		}
+	}
+	foreach ( $extraLinks as $link )
+		makeLink( $link, "__global" );
+}
+
+# ------------------------------------------------------------------------------------------
+
+# Executes part of an INSERT statement, corresponding to all interlanguage links to a particular site
+function makeLanguageLinks( &$site, $source ) {
+	global $langlist, $languageAliases;
+	# Actual languages with their own databases
+	foreach ( $langlist as $targetLang ) {
+		makeLink( array( $targetLang, $site->getURL( $targetLang ), 1 ), $source );
+	}
+
+	# Language aliases
+	foreach ( $languageAliases as $alias => $lang ) {
+		makeLink( array( $alias, $site->getURL( $lang ), 1 ), $source );
+	}
+}
+
+function makeLink( $entry, $source ) {
+	global $prefixRewrites, $dbFile;
+	if ( isset( $prefixRewrites[$source] ) && isset( $prefixRewrites[$source][$entry[0]] ) )
+		$entry[0] = $prefixRewrites[$source][$entry[0]];
+        if (!array_key_exists("iw_prefix",$entry))
+            $entry = array("iw_prefix" => $entry[0], "iw_url" => $entry[1], "iw_local" => $entry[2]);
+        if ( array_key_exists($source,$prefixRewrites) && 
+                array_key_exists($entry['iw_prefix'],$prefixRewrites[$source]))
+                    $entry['iw_prefix'] = $prefixRewrites[$source][$entry['iw_prefix']];
+        if ($dbFile)
+            dba_insert("{$source}:{$entry['iw_prefix']}", trim("{$entry['iw_local']} {$entry['iw_url']}"),$dbFile);
+        else
+            print "{$source}:{$entry['iw_prefix']} {$entry['iw_url']} {$entry['iw_local']}\n";
+
+    }
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/dumpInterwiki.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/dumpInterwiki.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/dumpInterwiki.php	(revision 1280)
@@ -0,0 +1,24 @@
+<?php
+/**
+ * Rebuild interwiki table using the file on meta and the language list
+ * Wikimedia specific!
+ * @todo document
+ * @addtogroup Maintenance
+ */
+
+/** */
+$oldCwd = getcwd();
+
+$optionsWithArgs = array( "o" );
+include_once( "commandLine.inc" );
+include_once( "dumpInterwiki.inc" );
+chdir( $oldCwd );
+
+# Output
+if ( isset( $options['o'] ) ) {
+    # To database specified with -o
+    $dbFile = dba_open( $options['o'], "n", "cdb_make" );
+} 
+
+getRebuildInterwikiDump();
+?>
Index: /MediaWiki/branches/1.11/maintenance/dumpLinks.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/dumpLinks.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/dumpLinks.php	(revision 1280)
@@ -0,0 +1,62 @@
+<?php
+/**
+ * Copyright (C) 2005 Brion Vibber <brion@pobox.com>
+ * http://www.mediawiki.org/
+ *
+ * Quick demo hack to generate a plaintext link dump,
+ * per the proposed wiki link database standard:
+ * http://www.usemod.com/cgi-bin/mb.pl?LinkDatabase
+ *
+ * Includes all (live and broken) intra-wiki links.
+ * Does not include interwiki or URL links.
+ * Dumps ASCII text to stdout; command-line.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @addtogroup SpecialPage
+ */
+
+require_once 'commandLine.inc';
+
+$dbr = wfGetDB( DB_SLAVE );
+$result = $dbr->select( array( 'pagelinks', 'page' ),
+	array(
+		'page_id',
+		'page_namespace',
+		'page_title',
+		'pl_namespace',
+		'pl_title' ),
+	array( 'page_id=pl_from' ),
+	'dumpLinks',
+	array( 'ORDER BY' => 'page_id' ) );
+
+$lastPage = null;
+while( $row = $dbr->fetchObject( $result ) ) {
+	if( $lastPage != $row->page_id ) {
+		if( isset( $lastPage ) ) {
+			print "\n";
+		}
+		$page = Title::makeTitle( $row->page_namespace, $row->page_title );
+		print $page->getPrefixedUrl();
+		$lastPage = $row->page_id;
+	}
+	$link = Title::makeTitle( $row->pl_namespace, $row->pl_title );
+	print " " . $link->getPrefixedUrl();
+}
+if( isset( $lastPage ) )
+	print "\n";
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/dumpReplayLog.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/dumpReplayLog.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/dumpReplayLog.php	(revision 1280)
@@ -0,0 +1,117 @@
+<?php
+/**
+ * @addtogroup Maintenance
+ */
+error_reporting(E_ALL);
+
+/** */
+require_once( "commandLine.inc" );
+require_once( 'includes/SpecialExport.php' );
+
+/** */
+function dumpReplayLog( $start ) {
+	$dbw = wfGetDB( DB_MASTER );
+	$recentchanges = $dbw->tableName( 'recentchanges' );
+	$result =& $dbw->safeQuery( "SELECT * FROM $recentchanges WHERE rc_timestamp >= "
+		. $dbw->timestamp( $start ) . ' ORDER BY rc_timestamp');
+
+	global $wgInputEncoding;
+	echo '<' . '?xml version="1.0" encoding="' . $wgInputEncoding . '" ?' . ">\n";
+	echo "<wikilog version='experimental'>\n";
+	echo "<!-- Do not use this script for any purpose. It's scary. -->\n";
+	while( $row = $dbw->fetchObject( $result ) ) {
+		echo dumpReplayEntry( $row );
+	}
+	echo "</wikilog>\n";
+	$dbw->freeResult( $result );
+}
+
+/** */
+function dumpReplayEntry( $row ) {
+	$title = Title::MakeTitle( $row->rc_namespace, $row->rc_title );
+	switch( $row->rc_type ) {
+	case RC_EDIT:
+	case RC_NEW:
+		# Edit
+		$dbr = wfGetDB( DB_MASTER );
+
+		$out = "  <edit>\n";
+		$out .= "    <title>" . xmlsafe( $title->getPrefixedText() ) . "</title>\n";
+
+		# Get previous edit timestamp
+		if( $row->rc_last_oldid ) {
+			$s = $dbr->selectRow( 'old',
+				array( 'old_timestamp' ),
+				array( 'old_id' => $row->rc_last_oldid ) );
+			$out .= "    <lastedit>" . wfTimestamp2ISO8601( $s->old_timestamp ) . "</lastedit>\n";
+		} else {
+			$out .= "    <newpage/>\n";
+		}
+
+		if( $row->rc_this_oldid ) {
+			$s = $dbr->selectRow( 'old', array( 'old_id as id','old_timestamp as timestamp',
+				'old_user as user', 'old_user_text as user_text', 'old_comment as comment',
+				'old_text as text', 'old_flags as flags' ),
+				array( 'old_id' => $row->rc_this_oldid ) );
+			$out .= revision2xml( $s, true, false );
+		} else {
+			$s = $dbr->selectRow( 'cur', array( 'cur_id as id','cur_timestamp as timestamp','cur_user as user',
+				'cur_user_text as user_text', 'cur_restrictions as restrictions','cur_comment as comment',
+				'cur_text as text' ),
+				array( 'cur_id' => $row->rc_cur_id ) );
+			$out .= revision2xml( $s, true, true );
+		}
+		$out .= "  </edit>\n";
+		break;
+	case RC_LOG:
+		$dbr = wfGetDB( DB_MASTER );
+		$s = $dbr->selectRow( 'logging',
+			array( 'log_type', 'log_action', 'log_timestamp', 'log_user',
+				'log_namespace', 'log_title', 'log_comment' ),
+			array( 'log_timestamp' => $row->rc_timestamp,
+			       'log_user'      => $row->rc_user ) );
+		$ts = wfTimestamp2ISO8601( $row->rc_timestamp );
+		$target = Title::MakeTitle( $s->log_namespace, $s->log_title );
+		$out  = "  <log>\n";
+		$out .= "    <type>" . xmlsafe( $s->log_type ) . "</type>\n";
+		$out .= "    <action>" . xmlsafe( $s->log_action ) . "</action>\n";
+		$out .= "    <timestamp>" . $ts . "</timestamp>\n";
+		$out .= "    <contributor><username>" . xmlsafe( $row->rc_user_text ) . "</username></contributor>\n";
+		$out .= "    <target>" . xmlsafe( $target->getPrefixedText() ) . "</target>\n";
+		$out .= "    <comment>" . xmlsafe( $s->log_comment ) . "</comment>\n";
+		$out .= "  </log>\n";
+		break;
+	case RC_MOVE:
+	case RC_MOVE_OVER_REDIRECT:
+		$target = Title::MakeTitle( $row->rc_moved_to_ns, $row->rc_moved_to_title );
+		$out  = "  <move>\n";
+		$out .= "    <title>" . xmlsafe( $title->getPrefixedText() ) . "</title>\n";
+		$out .= "    <target>" . xmlsafe( $target->getPrefixedText() ) . "</target>\n";
+		if( $row->rc_type == RC_MOVE_OVER_REDIRECT ) {
+			$out .= "    <override/>\n";
+		}
+		$ts = wfTimestamp2ISO8601( $row->rc_timestamp );
+		$out .= "    <id>$row->rc_cur_id</id>\n";
+		$out .= "    <timestamp>$ts</timestamp>\n";
+		if($row->rc_user_text) {
+			$u = "<username>" . xmlsafe( $row->rc_user_text ) . "</username>";
+			$u .= "<id>$row->rc_user</id>";
+		} else {
+			$u = "<ip>" . xmlsafe( $row->rc_user_text ) . "</ip>";
+		}
+		$out .= "    <contributor>$u</contributor>\n";
+		$out .= "  </move>\n";
+	}
+	return $out;
+}
+
+
+if( isset( $options['start'] ) ) {
+	$start = wfTimestamp( TS_MW, $options['start'] );
+	dumpReplayLog( $start );
+} else {
+	echo "This is an experimental script to encapsulate data from recent edits.\n";
+	echo "Usage:  php dumpReplayLog.php --start=20050118032544\n";
+}
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/dumpSisterSites.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/dumpSisterSites.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/dumpSisterSites.php	(revision 1280)
@@ -0,0 +1,48 @@
+<?php
+/**
+ * Quickie page name dump script for SisterSites usage.
+ * http://www.eekim.com/cgi-bin/wiki.pl?SisterSites
+ *
+ * Copyright (C) 2006 Brion Vibber <brion@pobox.com>
+ * http://www.mediawiki.org/
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @addtogroup SpecialPage
+ */
+
+require_once( 'commandLine.inc' );
+
+$dbr = wfGetDB( DB_SLAVE );
+$dbr->bufferResults( false );
+$result = $dbr->select( 'page',
+	array( 'page_namespace', 'page_title' ),
+	array(
+		'page_namespace'   => NS_MAIN,
+		'page_is_redirect' => 0,
+	),
+	'dumpSisterSites' );
+
+while( $row = $dbr->fetchObject( $result ) ) {
+	$title = Title::makeTitle( $row->page_namespace, $row->page_title );
+	$url = $title->getFullUrl();
+	$text = $title->getPrefixedText();
+	echo "$url $text\n";
+}
+
+$dbr->freeResult( $result );
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/dumpTextPass.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/dumpTextPass.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/dumpTextPass.php	(revision 1280)
@@ -0,0 +1,370 @@
+<?php
+/**
+ * Copyright (C) 2005 Brion Vibber <brion@pobox.com>
+ * http://www.mediawiki.org/
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @addtogroup SpecialPage
+ */
+
+$originalDir = getcwd();
+
+require_once( 'commandLine.inc' );
+require_once( 'SpecialExport.php' );
+require_once( 'maintenance/backup.inc' );
+
+/**
+ * Stream wrapper around 7za filter program.
+ * Required since we can't pass an open file resource to XMLReader->open()
+ * which is used for the text prefetch.
+ */
+class SevenZipStream {
+	var $stream;
+	
+	private function stripPath( $path ) {
+		$prefix = 'mediawiki.compress.7z://';
+		return substr( $path, strlen( $prefix ) );
+	}
+	
+	function stream_open( $path, $mode, $options, &$opened_path ) {
+		if( $mode{0} == 'r' ) {
+			$options = 'e -bd -so';
+		} elseif( $mode{0} == 'w' ) {
+			$options = 'a -bd -si';
+		} else {
+			return false;
+		}
+		$arg = wfEscapeShellArg( $this->stripPath( $path ) );
+		$command = "7za $options $arg";
+		if( !wfIsWindows() ) {
+			// Suppress the stupid messages on stderr
+			$command .= ' 2>/dev/null';
+		}
+		$this->stream = popen( $command, $mode );
+		return ($this->stream !== false);
+	}
+	
+	function url_stat( $path, $flags ) {
+		return stat( $this->stripPath( $path ) );
+	}
+	
+	// This is all so lame; there should be a default class we can extend
+	
+	function stream_close() {
+		return fclose( $this->stream );
+	}
+	
+	function stream_flush() {
+		return fflush( $this->stream );
+	}
+	
+	function stream_read( $count ) {
+		return fread( $this->stream, $count );
+	}
+	
+	function stream_write( $data ) {
+		return fwrite( $this->stream, $data );
+	}
+	
+	function stream_tell() {
+		return ftell( $this->stream );
+	}
+	
+	function stream_eof() {
+		return feof( $this->stream );
+	}
+	
+	function stream_seek( $offset, $whence ) {
+		return fseek( $this->stream, $offset, $whence );
+	}
+}
+stream_wrapper_register( 'mediawiki.compress.7z', 'SevenZipStream' );
+
+
+class TextPassDumper extends BackupDumper {
+	var $prefetch = null;
+	var $input = "php://stdin";
+	var $history = WikiExporter::FULL;
+	var $fetchCount = 0;
+	var $prefetchCount = 0;
+	
+	var $failures = 0;
+	var $maxFailures = 200;
+	var $failureTimeout = 5; // Seconds to sleep after db failure
+
+	function dump() {
+		# This shouldn't happen if on console... ;)
+		header( 'Content-type: text/html; charset=UTF-8' );
+
+		# Notice messages will foul up your XML output even if they're
+		# relatively harmless.
+//		ini_set( 'display_errors', false );
+
+		$this->initProgress( $this->history );
+
+		$this->db = $this->backupDb();
+
+		$this->egress = new ExportProgressFilter( $this->sink, $this );
+
+		$input = fopen( $this->input, "rt" );
+		$result = $this->readDump( $input );
+
+		if( WikiError::isError( $result ) ) {
+			wfDie( $result->getMessage() );
+		}
+
+		$this->report( true );
+	}
+
+	function processOption( $opt, $val, $param ) {
+		$url = $this->processFileOpt( $val, $param );
+		
+		switch( $opt ) {
+		case 'prefetch':
+			require_once 'maintenance/backupPrefetch.inc';
+			$this->prefetch = new BaseDump( $url );
+			break;
+		case 'stub':
+			$this->input = $url;
+			break;
+		case 'current':
+			$this->history = WikiExporter::CURRENT;
+			break;
+		case 'full':
+			$this->history = WikiExporter::FULL;
+			break;
+		}
+	}
+	
+	function processFileOpt( $val, $param ) {
+		switch( $val ) {
+		case "file":
+			return $param;
+		case "gzip":
+			return "compress.zlib://$param";
+		case "bzip2":
+			return "compress.bzip2://$param";
+		case "7zip":
+			return "mediawiki.compress.7z://$param";
+		default:
+			return $val;
+		}
+	}
+
+	/**
+	 * Overridden to include prefetch ratio if enabled.
+	 */
+	function showReport() {
+		if( !$this->prefetch ) {
+			return parent::showReport();
+		}
+		
+		if( $this->reporting ) {
+			$delta = wfTime() - $this->startTime;
+			$now = wfTimestamp( TS_DB );
+			if( $delta ) {
+				$rate = $this->pageCount / $delta;
+				$revrate = $this->revCount / $delta;
+				$portion = $this->revCount / $this->maxCount;
+				$eta = $this->startTime + $delta / $portion;
+				$etats = wfTimestamp( TS_DB, intval( $eta ) );
+				$fetchrate = 100.0 * $this->prefetchCount / $this->fetchCount;
+			} else {
+				$rate = '-';
+				$revrate = '-';
+				$etats = '-';
+				$fetchrate = '-';
+			}
+			$this->progress( sprintf( "%s: %s %d pages (%0.3f/sec), %d revs (%0.3f/sec), %0.1f%% prefetched, ETA %s [max %d]",
+				$now, wfWikiID(), $this->pageCount, $rate, $this->revCount, $revrate, $fetchrate, $etats, $this->maxCount ) );
+		}
+	}
+
+	function readDump( $input ) {
+		$this->buffer = "";
+		$this->openElement = false;
+		$this->atStart = true;
+		$this->state = "";
+		$this->lastName = "";
+		$this->thisPage = 0;
+		$this->thisRev = 0;
+
+		$parser = xml_parser_create( "UTF-8" );
+		xml_parser_set_option( $parser, XML_OPTION_CASE_FOLDING, false );
+
+		xml_set_element_handler( $parser, array( &$this, 'startElement' ), array( &$this, 'endElement' ) );
+		xml_set_character_data_handler( $parser, array( &$this, 'characterData' ) );
+
+		$offset = 0; // for context extraction on error reporting
+		$bufferSize = 512 * 1024;
+		do {
+			$chunk = fread( $input, $bufferSize );
+			if( !xml_parse( $parser, $chunk, feof( $input ) ) ) {
+				wfDebug( "TextDumpPass::readDump encountered XML parsing error\n" );
+				return new WikiXmlError( $parser, 'XML import parse failure', $chunk, $offset );
+			}
+			$offset += strlen( $chunk );
+		} while( $chunk !== false && !feof( $input ) );
+		xml_parser_free( $parser );
+		
+		return true;
+	}
+
+	function getText( $id ) {
+		$this->fetchCount++;
+		if( isset( $this->prefetch ) ) {
+			$text = $this->prefetch->prefetch( $this->thisPage, $this->thisRev );
+			if( $text === null ) {
+				// Entry missing from prefetch dump
+			} elseif( $text === "" ) {
+				// Blank entries may indicate that the prior dump was broken.
+				// To be safe, reload it.
+			} else {
+				$this->prefetchCount++;
+				return $text;
+			}
+		}
+		while( true ) {
+			try {
+				return $this->doGetText( $id );
+			} catch (DBQueryError $ex) {
+				$this->failures++;
+				if( $this->failures > $this->maxFailures ) {
+					throw $ex;
+				} else {
+					$this->progress( "Database failure $this->failures " .
+						"of allowed $this->maxFailures! " .
+						"Pausing $this->failureTimeout seconds..." );
+					sleep( $this->failureTimeout );
+				}
+			}
+		}
+	}
+	
+	/**
+	 * May throw a database error if, say, the server dies during query.
+	 */
+	private function doGetText( $id ) {
+		$id = intval( $id );
+		$row = $this->db->selectRow( 'text',
+			array( 'old_text', 'old_flags' ),
+			array( 'old_id' => $id ),
+			'TextPassDumper::getText' );
+		$text = Revision::getRevisionText( $row );
+		$stripped = str_replace( "\r", "", $text );
+		$normalized = UtfNormal::cleanUp( $stripped );
+		return $normalized;
+	}
+
+	function startElement( $parser, $name, $attribs ) {
+		$this->clearOpenElement( null );
+		$this->lastName = $name;
+
+		if( $name == 'revision' ) {
+			$this->state = $name;
+			$this->egress->writeOpenPage( null, $this->buffer );
+			$this->buffer = "";
+		} elseif( $name == 'page' ) {
+			$this->state = $name;
+			if( $this->atStart ) {
+				$this->egress->writeOpenStream( $this->buffer );
+				$this->buffer = "";
+				$this->atStart = false;
+			}
+		}
+
+		if( $name == "text" && isset( $attribs['id'] ) ) {
+			$text = $this->getText( $attribs['id'] );
+			$this->openElement = array( $name, array( 'xml:space' => 'preserve' ) );
+			if( strlen( $text ) > 0 ) {
+				$this->characterData( $parser, $text );
+			}
+		} else {
+			$this->openElement = array( $name, $attribs );
+		}
+	}
+
+	function endElement( $parser, $name ) {
+		if( $this->openElement ) {
+			$this->clearOpenElement( "" );
+		} else {
+			$this->buffer .= "</$name>";
+		}
+
+		if( $name == 'revision' ) {
+			$this->egress->writeRevision( null, $this->buffer );
+			$this->buffer = "";
+			$this->thisRev = "";
+		} elseif( $name == 'page' ) {
+			$this->egress->writeClosePage( $this->buffer );
+			$this->buffer = "";
+			$this->thisPage = "";
+		} elseif( $name == 'mediawiki' ) {
+			$this->egress->writeCloseStream( $this->buffer );
+			$this->buffer = "";
+		}
+	}
+
+	function characterData( $parser, $data ) {
+		$this->clearOpenElement( null );
+		if( $this->lastName == "id" ) {
+			if( $this->state == "revision" ) {
+				$this->thisRev .= $data;
+			} elseif( $this->state == "page" ) {
+				$this->thisPage .= $data;
+			}
+		}
+		$this->buffer .= htmlspecialchars( $data );
+	}
+
+	function clearOpenElement( $style ) {
+		if( $this->openElement ) {
+			$this->buffer .= wfElement( $this->openElement[0], $this->openElement[1], $style );
+			$this->openElement = false;
+		}
+	}
+}
+
+
+$dumper = new TextPassDumper( $argv );
+
+if( true ) {
+	$dumper->dump();
+} else {
+	$dumper->progress( <<<END
+This script postprocesses XML dumps from dumpBackup.php to add
+page text which was stubbed out (using --stub).
+
+XML input is accepted on stdin.
+XML output is sent to stdout; progress reports are sent to stderr.
+
+Usage: php dumpTextPass.php [<options>]
+Options:
+  --stub=<type>:<file> To load a compressed stub dump instead of stdin
+  --prefetch=<type>:<file> Use a prior dump file as a text source, to save
+              pressure on the database.
+              (Requires PHP 5.0+ and the XMLReader PECL extension)
+  --quiet     Don't dump status reports to stderr.
+  --report=n  Report position and speed after every n pages processed.
+              (Default: 100)
+  --server=h  Force reading from MySQL server h
+  --current   Base ETA on number of pages in database instead of all revisions
+END
+);
+}
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/dumpUploads.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/dumpUploads.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/dumpUploads.php	(revision 1280)
@@ -0,0 +1,116 @@
+<?php
+
+require_once 'commandLine.inc';
+
+class UploadDumper {
+	
+	function __construct( $args ) {
+		global $IP, $wgUseSharedUploads;
+		$this->mAction = 'fetchUsed';
+		$this->mBasePath = $IP;
+		$this->mShared = $wgUseSharedUploads;
+		
+		if( isset( $args['help'] ) ) {
+			$this->mAction = 'help';
+		}
+		
+		if( isset( $args['base'] ) ) {
+			$this->mBasePath = $args['base'];
+		}
+	}
+	
+	function run() {
+		$this->{$this->mAction}();
+	}
+	
+	function help() {
+		echo <<<END
+Generates list of uploaded files which can be fed to tar or similar.
+By default, outputs relative paths against the parent directory of
+\$wgUploadDirectory.
+
+Usage:
+php dumpUploads.php [options] > list-o-files.txt
+
+Options:
+--base=<path>  Set base relative path instead of wiki include root
+
+FIXME: other options not implemented yet ;)
+
+--local        List all local files, used or not. No shared files included.
+--used         Skip local images that are not used
+--shared       Include images used from shared repository
+
+END;
+	}
+	
+	/**
+	 * Fetch a list of all or used images from a particular image source.
+	 * @param string $table
+	 * @param string $directory Base directory where files are located
+	 * @param bool $shared true to pass shared-dir settings to hash func
+	 */
+	function fetchUsed() {
+		$dbr = wfGetDB( DB_SLAVE );
+		$image = $dbr->tableName( 'image' );
+		$imagelinks = $dbr->tableName( 'imagelinks' );
+		
+		$sql = "SELECT DISTINCT il_to, img_name
+			FROM $imagelinks
+			LEFT OUTER JOIN $image
+			ON il_to=img_name";
+		$result = $dbr->query( $sql );
+		
+		while( $row = $dbr->fetchObject( $result ) ) {
+			if( is_null( $row->img_name ) ) {
+				if( $this->mShared ) {
+					$this->outputShared( $row->il_to );
+				}
+			} else {
+				$this->outputLocal( $row->il_to );
+			}
+		}
+		$dbr->freeResult( $result );
+	}
+	
+	function outputLocal( $name ) {
+		global $wgUploadDirectory;
+		return $this->outputItem( $name, $wgUploadDirectory, false );
+	}
+	
+	function outputShared( $name ) {
+		global $wgSharedUploadDirectory;
+		return $this->outputItem( $name, $wgSharedUploadDirectory, true );
+	}
+	
+	function outputItem( $name, $directory, $shared ) {
+		$filename = $directory .
+			wfGetHashPath( $name, $shared ) .
+			$name;
+		$rel = $this->relativePath( $filename, $this->mBasePath );
+		echo "$rel\n";
+	}
+
+	/**
+	 * Return a relative path to $path from the base directory $base
+	 * For instance relativePath( '/foo/bar/baz', '/foo' ) should return
+	 * 'bar/baz'.
+	 */
+	function relativePath( $path, $base) {
+		$path = explode( DIRECTORY_SEPARATOR, $path );
+		$base = explode( DIRECTORY_SEPARATOR, $base );
+		while( count( $base ) && $path[0] == $base[0] ) {
+			array_shift( $path );
+			array_shift( $base );
+		}
+		foreach( $base as $prefix ) {
+			array_unshift( $path, '..' );
+		}
+		return implode( DIRECTORY_SEPARATOR, $path );
+	}
+}
+
+$dumper = new UploadDumper( $options );
+$dumper->run();
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/edit.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/edit.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/edit.php	(revision 1280)
@@ -0,0 +1,68 @@
+<?php
+
+$optionsWithArgs = array( 'u', 's' );
+
+require_once( 'commandLine.inc' );
+
+if ( count( $args ) == 0 || isset( $options['help'] ) ) {
+	print <<<EOT
+Edit an article from the command line
+
+Usage: php edit.php [options...] <title>
+
+Options:
+  -u <user>         Username
+  -s <summary>      Edit summary
+  -m                Minor edit
+  -b                Bot (hidden) edit
+  -a                Enable autosummary
+  --no-rc           Do not show the change in recent changes
+
+If the specified user does not exist, it will be created. 
+The text for the edit will be read from stdin.
+
+EOT;
+	exit( 1 );
+}
+
+$userName = isset( $options['u'] ) ? $options['u'] : 'Maintenance script';
+$summary = isset( $options['s'] ) ? $options['s'] : '';
+$minor = isset( $options['m'] );
+$bot = isset( $options['b'] );
+$autoSummary = isset( $options['a'] );
+$noRC = isset( $options['no-rc'] );
+
+$wgUser = User::newFromName( $userName );
+if ( !$wgUser ) {
+	print "Invalid username\n";
+	exit( 1 );
+}
+if ( $wgUser->isAnon() ) {
+	$wgUser->addToDatabase();
+}
+
+$wgTitle = Title::newFromText( $args[0] );
+if ( !$wgTitle ) {
+	print "Invalid title\n";
+	exit( 1 );
+}
+
+$wgArticle = new Article( $wgTitle );
+
+# Read the text
+$text = file_get_contents( 'php://stdin' );
+
+# Do the edit
+print "Saving... ";
+$success = $wgArticle->doEdit( $text, $summary, 
+	( $minor ? EDIT_MINOR : 0 ) |
+	( $bot ? EDIT_FORCE_BOT : 0 ) | 
+	( $autoSummary ? EDIT_AUTOSUMMARY : 0 ) |
+	( $noRC ? EDIT_SUPPRESS_RC : 0 ) );
+if ( $success ) {
+	print "done\n";
+} else {
+	print "failed\n";
+	exit( 1 );
+}
+?>
Index: /MediaWiki/branches/1.11/maintenance/eval.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/eval.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/eval.php	(revision 1280)
@@ -0,0 +1,62 @@
+<?php
+/**
+ * PHP lacks an interactive mode, but this can be very helpful when debugging.
+ * This script lets a command-line user start up the wiki engine and then poke
+ * about by issuing PHP commands directly.
+ *
+ * Unlike eg Python, you need to use a 'return' statement explicitly for the
+ * interactive shell to print out the value of the expression. Multiple lines
+ * are evaluated separately, so blocks need to be input without a line break.
+ * Fatal errors such as use of undeclared functions can kill the shell.
+ *
+ * To get decent line editing behavior, you should compile PHP with support
+ * for GNU readline (pass --with-readline to configure).
+ *
+ * @addtogroup Maintenance
+ */
+
+$wgForceLoadBalancing = (getenv('MW_BALANCE') ? true : false);
+$wgUseNormalUser = (getenv('MW_WIKIUSER') ? true : false);
+if (getenv('MW_PROFILING')) {
+	define('MW_CMDLINE_CALLBACK', 'wfSetProfiling');
+}
+function wfSetProfiling() { $GLOBALS['wgProfiling'] = true; }
+
+$optionsWithArgs = array( 'd' );
+
+/** */
+require_once( "commandLine.inc" );
+
+if ( isset( $options['d'] ) ) {
+	$d = $options['d'];
+	if ( $d > 0 ) {
+		$wgDebugLogFile = '/dev/stdout';
+	}
+	if ( $d > 1 ) {
+		foreach ( $wgLoadBalancer->mServers as $i => $server ) {
+			$wgLoadBalancer->mServers[$i]['flags'] |= DBO_DEBUG;
+		}
+	}
+	if ( $d > 2 ) {
+		$wgDebugFunctionEntry = true;
+	}
+}
+
+
+while ( ( $line = readconsole( '> ' ) ) !== false ) {
+	$val = eval( $line . ";" );
+	if( is_null( $val ) ) {
+		echo "\n";
+	} elseif( is_string( $val ) || is_numeric( $val ) ) {
+		echo "$val\n";
+	} else {
+		var_dump( $val );
+	}
+	if ( function_exists( "readline_add_history" ) ) {
+		readline_add_history( $line );
+	}
+}
+
+print "\n";
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/fetchInterwiki.pl
===================================================================
--- /MediaWiki/branches/1.11/maintenance/fetchInterwiki.pl	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/fetchInterwiki.pl	(revision 1280)
@@ -0,0 +1,102 @@
+#!/usr/bin/env perl
+# Copyright (C) 2005 Ævar Arnfjörð Bjarmason
+use strict;
+use warnings;
+use Socket;
+
+# Conf
+my $map = &get(&url('http://usemod.com/intermap.txt'));
+
+# --- #
+my $cont;
+my @map = split /\n/, $map;
+
+$cont .= '<?php
+# Note: this file is generated by maintenance/fetchInterwiki.pl
+# Edit and rerun that script rather than modifying this directly.
+
+/* private */ $wgValidInterwikis = array(
+';
+
+$cont .= "\t# The usemod interwiki map\n";
+for (my $i=0;$i<=$#map;++$i) {
+	my ($name, $url) = $map[$i] =~ m#^([^ ]+) (.+)#i;
+	$cont .= "\t'$name' => '$url\$1',\n";
+}
+
+my @iso = qw(
+aa ab af als am ar as ay az ba be bg bh bi bn bo bs ca chr co cs csb cy da de dk:da dz el en eo
+es et eu fa fi fj fo fr fy ga gd gl gn gu gv ha he hi hr hu hy ia id ik io is it iu ja jv ka kk
+kl km kn ko ks ku ky la lo lt lv mg mi mk ml mn mo mr ms my na nah nb nds ne nl no oc om or pa
+pl ps pt qu rm rn ro ru rw sa sd sg sh si sk sl sm sn so sq sr ss st su sv sw ta te tg th ti tk
+tl tn to tp tpi tr ts tt tw ug uk ur uz vi vo wa wo xh yi yo za zh zh-cn zh-tw zu);
+
+$cont .= '
+	# Some custom additions:
+	"ReVo"	=>	"http://purl.org/NET/voko/revo/art/$1.html",
+	  # eg [[ReVo:cerami]], [[ReVo:astero]] - note X-sensitive!
+	"EcheI"	=>	"http://www.ikso.net/cgi-bin/wiki.pl?$1",
+	"E\\xc4\\x89eI" =>	"http://www.ikso.net/cgi-bin/wiki.pl?$1",
+	"UnuMondo"	=>	"http://unumondo.com/cgi-bin/wiki.pl?$1", # X-sensitive!
+	"JEFO"	=>	"http://esperanto.jeunes.free.fr/vikio/index.php?$1",
+	"PMEG"	=>	"http://www.bertilow.com/pmeg/$1.php",
+		# ekz [[PMEG:gramatiko/kunligaj vortetoj/au]]
+	"EnciclopediaLibre" => "http://enciclopedia.us.es/wiki.phtml?title=$1",
+
+	# Wikipedia-specific stuff:
+	# Special cases
+	"w"		=> "http://www.wikipedia.org/wiki/$1",
+	"m"		=> "http://meta.wikipedia.org/wiki/$1",
+	"meta"		=> "http://meta.wikipedia.org/wiki/$1",
+	"sep11"		=> "http://sep11.wikipedia.org/wiki/$1",
+	"simple"=> "http://simple.wikipedia.com/wiki.cgi?$1",
+	"wiktionary"	=> "http://wiktionary.wikipedia.org/wiki/$1",
+	"PageHistory" => "http://www.wikipedia.org/w/wiki.phtml?title=$1&action=history",
+	"UserContributions" => "http://www.wikipedia.org/w/wiki.phtml?title=Special:Contributions&target=$1",
+	"BackLinks" => "http://www.wikipedia.org/w/wiki.phtml?title=Special:Whatlinkshere&target=$1",
+
+	# ISO 639 2-letter language codes
+';
+
+for(my $i=0; $i<=$#iso;++$i) {
+	my @arr = split /:/, $iso[$i];
+	$cont .= "\t";
+	$cont .= "'$arr[0]' => 'http://";
+	
+	if ($arr[1]) {
+		$cont .= $arr[1];
+	} else {
+		$cont .= $arr[0];
+	}
+	$cont .= ".wikipedia.org/wiki/\$1',\n";
+}
+
+$cont .= '
+);
+?>
+';
+
+open IW, ">Interwiki.php";
+print IW $cont;
+close IW;
+
+sub get {
+	my ($host, $url) = @_;
+	my $cont;
+	my $eat;
+
+	my $proto = getprotobyname('tcp');
+	socket(Socket, AF_INET, SOCK_STREAM, $proto);
+	my $iaddr = inet_aton("$host");
+	my $port = getservbyname('http', 'tcp');
+	my $sin = sockaddr_in($port, $iaddr);
+	connect(Socket, $sin);
+	send Socket, "GET $url HTTP/1.0\r\nHost: $host\r\n\r\n",0;
+	while (<Socket>) {
+		$cont .= $_ if $eat; # mmm, food
+		++$eat if ($_ =~ /^(\n|\r\n|)$/);
+	}
+	return $cont;
+}
+
+sub url {my ($server, $path) = $_[0] =~ m#.*(?=//)//([^/]*)(.*)#g;}
Index: /MediaWiki/branches/1.11/maintenance/findhooks.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/findhooks.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/findhooks.php	(revision 1280)
@@ -0,0 +1,94 @@
+<?php
+/**
+ * Simple script that try to find documented hook and hooks actually
+ * in the code and show what's missing.
+ * 
+ * This script assumes that:
+ * - hooks names in hooks.txt are at the beginning of a line and single quoted.
+ * - hooks names in code are the first parameter of wfRunHooks.
+ *
+ * @addtogroup Maintenance
+ *
+ * @author Ashar Voultoiz <hashar@altern.org>
+ * @copyright Copyright © Ashar voultoiz
+ * @license http://www.gnu.org/copyleft/gpl.html GNU General Public Licence 2.0 or later
+ */
+
+/** This is a command line script*/
+include('commandLine.inc');
+
+
+# GLOBALS
+
+$doc = $IP . '/docs/hooks.txt';
+$pathinc = $IP . '/includes/';
+
+
+# FUNCTIONS
+
+/**
+ * @return array of documented hooks
+ */
+function getHooksFromDoc() {
+	global $doc;
+	$content = file_get_contents( $doc );
+	$m = array();
+	preg_match_all( "/\n'(.*?)'/", $content, $m);
+	return $m[1];
+}
+
+/**
+ * Get hooks from a php file
+ * @param $file Full filename to the PHP file.
+ * @return array of hooks found.
+ */
+function getHooksFromFile( $file ) {
+	$content = file_get_contents( $file );
+	$m = array();
+	preg_match_all( "/wfRunHooks\(\s*\'(.*?)\'/", $content, $m);
+	return $m[1];
+}
+
+/**
+ * Get hooks from the source code.
+ * @param $path Directory where the include files can be found
+ * @return array of hooks found.
+ */
+function getHooksFromPath( $path ) {
+	$hooks = array();
+	if( $dh = opendir($path) ) {
+		while(($file = readdir($dh)) !== false) {
+			if( filetype($path.$file) == 'file' ) {
+				$hooks = array_merge( $hooks, getHooksFromFile($path.$file) );
+			}
+		}
+		closedir($dh);
+	}
+	return $hooks;
+}
+
+/**
+ * Nicely output the array
+ * @param $msg A message to show before the value
+ * @param $arr An array
+ * @param $sort Boolean : wheter to sort the array (Default: true)
+ */
+function printArray( $msg, $arr, $sort = true ) {
+	if($sort) asort($arr); 
+	foreach($arr as $v) print "$msg: $v\n";
+}
+
+
+# MAIN
+
+$documented = getHooksFromDoc($doc);
+$potential = getHooksFromPath($pathinc);
+
+$todo = array_diff($potential, $documented);
+$deprecated = array_diff($documented, $potential);
+
+// let's show the results:
+printArray('undocumented', $todo );
+printArray('not found', $deprecated );
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/fixSlaveDesync.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/fixSlaveDesync.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/fixSlaveDesync.php	(revision 1280)
@@ -0,0 +1,192 @@
+<?php
+
+$wgUseRootUser = true;
+require_once( 'commandLine.inc' );
+
+//$wgDebugLogFile = '/dev/stdout';
+
+$slaveIndexes = array();
+for ( $i = 1; $i < count( $wgDBservers ); $i++ ) {
+	if ( $wgLoadBalancer->isNonZeroLoad( $i ) ) {
+		$slaveIndexes[] = $i;
+	}
+}
+/*
+foreach ( $wgLoadBalancer->mServers as $i => $server ) {
+	$wgLoadBalancer->mServers[$i]['flags'] |= DBO_DEBUG;
+}*/
+$reportingInterval = 1000;
+
+if ( isset( $args[0] ) ) {
+	desyncFixPage( $args[0] );
+} else {
+	$dbw = wfGetDB( DB_MASTER );
+	$maxPage = $dbw->selectField( 'page', 'MAX(page_id)', false, 'fixDesync.php' );
+	$corrupt = findPageLatestCorruption();
+	foreach ( $corrupt as $id => $dummy ) {
+		desyncFixPage( $id );
+	}
+		/*
+	for ( $i=1; $i <= $maxPage; $i++ ) {
+		desyncFixPage( $i );
+		if ( !($i % $reportingInterval) ) {
+			print "$i\n";
+		}
+	}*/
+}
+
+function findPageLatestCorruption() {
+	$desync = array();
+	$n = 0;
+	$dbw = wfGetDB( DB_MASTER );
+	$masterIDs = array();
+	$res = $dbw->select( 'page', array( 'page_id', 'page_latest' ), array( 'page_id<6054123' ), __METHOD__ );
+	print "Number of pages: " . $dbw->numRows( $res ) . "\n";
+	while ( $row = $dbw->fetchObject( $res ) ) {
+		$masterIDs[$row->page_id] = $row->page_latest;
+		if ( !( ++$n % 10000 ) ) {
+			print "$n\r";
+		}
+	}
+	print "\n";
+	$dbw->freeResult( $res );
+	
+	global $slaveIndexes;
+	foreach ( $slaveIndexes as $i ) {
+		$db = wfGetDB( $i );
+		$res = $db->select( 'page', array( 'page_id', 'page_latest' ), array( 'page_id<6054123' ), __METHOD__ );
+		while ( $row = $db->fetchObject( $res ) ) {
+			if ( isset( $masterIDs[$row->page_id] ) && $masterIDs[$row->page_id] != $row->page_latest ) {
+				$desync[$row->page_id] = true;
+				print $row->page_id . "\t";
+			}
+		}
+		$db->freeResult( $res );
+	}
+	print "\n";
+	return $desync;
+}
+
+function desyncFixPage( $pageID ) {
+	global $slaveIndexes;
+	$fname = 'desyncFixPage';
+
+	# Check for a corrupted page_latest
+	$dbw = wfGetDB( DB_MASTER );
+	$dbw->begin();
+	$realLatest = $dbw->selectField( 'page', 'page_latest', array( 'page_id' => $pageID ), 
+		$fname, 'FOR UPDATE' );
+	#list( $masterFile, $masterPos ) = $dbw->getMasterPos();
+	$found = false;
+	foreach ( $slaveIndexes as $i ) {
+		$db = wfGetDB( $i );
+		/*
+		if ( !$db->masterPosWait( $masterFile, $masterPos, 10 ) ) {
+		       echo "Slave is too lagged, aborting\n";
+		       $dbw->commit();
+		       sleep(10);
+		       return;
+		}*/	       
+		$latest = $db->selectField( 'page', 'page_latest', array( 'page_id' => $pageID ), $fname );
+		$max = $db->selectField( 'revision', 'MAX(rev_id)', false, $fname );
+		if ( $latest != $realLatest && $realLatest < $max ) {
+			print "page_latest corrupted in page $pageID, server $i\n";
+			$found = true;
+			break;
+		}
+	}
+	if ( !$found ) {
+		print "page_id $pageID seems fine\n";
+		$dbw->commit();
+		return;
+	}
+
+	# Find the missing revisions
+	$res = $dbw->select( 'revision', array( 'rev_id' ), array( 'rev_page' => $pageID ), 
+		$fname, 'FOR UPDATE' );
+	$masterIDs = array();
+	while ( $row = $dbw->fetchObject( $res ) ) {
+		$masterIDs[] = $row->rev_id;
+	}
+	$dbw->freeResult( $res );
+
+	$res = $db->select( 'revision', array( 'rev_id' ), array( 'rev_page' => $pageID ), $fname );
+	$slaveIDs = array();
+	while ( $row = $db->fetchObject( $res ) ) {
+		$slaveIDs[] = $row->rev_id;
+	}
+	$db->freeResult( $res );
+	if ( count( $masterIDs ) < count( $slaveIDs ) ) {
+		$missingIDs = array_diff( $slaveIDs, $masterIDs );
+		if ( count( $missingIDs ) ) {
+			print "Found " . count( $missingIDs ) . " lost in master, copying from slave... ";
+			$dbFrom = $db;
+			$found = true;
+			$toMaster = true;
+		} else {
+			$found = false;
+		}
+	} else {
+		$missingIDs = array_diff( $masterIDs, $slaveIDs );
+		if ( count( $missingIDs ) ) {
+			print "Found " . count( $missingIDs ) . " missing revision(s), copying from master... ";
+			$dbFrom = $dbw;
+			$found = true;
+			$toMaster = false;
+		} else {
+			$found = false;
+		}
+	}
+
+	if ( $found ) {
+		foreach ( $missingIDs as $rid ) {
+			print "$rid ";
+			# Revision
+			$row = $dbFrom->selectRow( 'revision', '*', array( 'rev_id' => $rid ), $fname );
+			if ( $toMaster ) {
+				$id = $dbw->selectField( 'revision', 'rev_id', array( 'rev_id' => $rid ), 
+					$fname,	'FOR UPDATE' );
+				if ( $id ) {
+					echo "Revision already exists\n";
+					$found = false;
+					break;
+				} else {
+					$dbw->insert( 'revision', get_object_vars( $row ), $fname, 'IGNORE' );
+				}
+			} else {
+				foreach ( $slaveIndexes as $i ) {
+					$db = wfGetDB( $i );
+					$db->insert( 'revision', get_object_vars( $row ), $fname, 'IGNORE' );
+				}
+			}
+
+			# Text
+			$row = $dbFrom->selectRow( 'text', '*', array( 'old_id' => $row->rev_text_id ), $fname );
+			if ( $toMaster ) {
+				$dbw->insert( 'text', get_object_vars( $row ), $fname, 'IGNORE' );
+			} else {
+				foreach ( $slaveIndexes as $i ) {
+					$db = wfGetDB( $i );
+					$db->insert( 'text', get_object_vars( $row ), $fname, 'IGNORE' );
+				}
+			}
+		}
+		print "done\n";
+	}
+
+	if ( $found ) {
+		print "Fixing page_latest... ";
+		if ( $toMaster ) {
+			#$dbw->update( 'page', array( 'page_latest' => $realLatest ), array( 'page_id' => $pageID ), $fname );
+		} else {
+			foreach ( $slaveIndexes as $i ) {
+				$db = wfGetDB( $i );
+				$db->update( 'page', array( 'page_latest' => $realLatest ), array( 'page_id' => $pageID ), $fname );
+			}
+		}
+		print "done\n";
+	}
+	$dbw->commit();
+}
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/fixTimestamps.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/fixTimestamps.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/fixTimestamps.php	(revision 1280)
@@ -0,0 +1,104 @@
+<?php
+
+/**
+ * This script fixes timestamp corruption caused by one or more webservers 
+ * temporarily being set to the wrong time. The time offset must be known and
+ * consistent. Start and end times (in 14-character format) restrict the search, 
+ * and must bracket the damage. There must be a majority of good timestamps in the 
+ * search period.
+ */
+
+require_once( 'commandLine.inc' );
+
+if ( count( $args ) < 3 ) {
+	echo "Usage: php fixTimestamps.php <offset in hours> <start time> <end time>\n";
+	exit(1);
+}
+
+$offset = $args[0] * 3600;
+$start = $args[1];
+$end = $args[2];
+$fname = 'fixTimestamps.php';
+$grace = 60; // maximum normal clock offset
+
+# Find bounding revision IDs
+$dbw = wfGetDB( DB_MASTER );
+$revisionTable = $dbw->tableName( 'revision' );
+$res = $dbw->query( "SELECT MIN(rev_id) as minrev, MAX(rev_id) as maxrev FROM $revisionTable " .
+	"WHERE rev_timestamp BETWEEN '{$start}' AND '{$end}'", $fname );
+$row = $dbw->fetchObject( $res );
+
+if ( is_null( $row->minrev ) ) {
+	echo "No revisions in search period.\n";
+	exit(0);
+}
+
+$minRev = $row->minrev;
+$maxRev = $row->maxrev;
+
+# Select all timestamps and IDs
+$sql = "SELECT rev_id, rev_timestamp FROM $revisionTable " .
+	"WHERE rev_id BETWEEN $minRev AND $maxRev";
+if ( $offset > 0 ) {
+	$sql .= " ORDER BY rev_id DESC";
+	$expectedSign = -1;
+} else {
+	$expectedSign = 1;
+}
+
+$res = $dbw->query( $sql, $fname );
+
+$lastNormal = 0;
+$badRevs = array();
+$numGoodRevs = 0;
+
+while ( $row = $dbw->fetchObject( $res ) ) {
+	$timestamp = wfTimestamp( TS_UNIX, $row->rev_timestamp );
+	$delta = $timestamp - $lastNormal;
+	$sign = $delta == 0 ? 0 : $delta / abs( $delta );
+	if ( $sign == 0 || $sign == $expectedSign ) {
+		// Monotonic change
+		$lastNormal = $timestamp;
+		++ $numGoodRevs;
+		continue;
+	} elseif ( abs( $delta ) <= $grace ) {
+		// Non-monotonic change within grace interval
+		++ $numGoodRevs;
+		continue;
+	} else {
+		// Non-monotonic change larger than grace interval
+		$badRevs[] = $row->rev_id;
+	}
+}
+$dbw->freeResult( $res );
+
+$numBadRevs = count( $badRevs );
+if ( $numBadRevs > $numGoodRevs ) {
+	echo 
+"The majority of revisions in the search interval are marked as bad.
+
+Are you sure the offset ($offset) has the right sign? Positive means the clock 
+was incorrectly set forward, negative means the clock was incorrectly set back.
+
+If the offset is right, then increase the search interval until there are enough 
+good revisions to provide a majority reference.
+";
+
+	exit(1);
+} elseif ( $numBadRevs == 0 ) {
+	echo "No bad revisions found.\n";
+	exit(0);
+}
+
+printf( "Fixing %d revisions (%.2f%% of revisions in search interval)\n", 
+	$numBadRevs, $numBadRevs / ($numGoodRevs + $numBadRevs) * 100 );
+
+$fixup = -$offset;
+$sql = "UPDATE $revisionTable " .
+	"SET rev_timestamp=DATE_FORMAT(DATE_ADD(rev_timestamp, INTERVAL $fixup SECOND), '%Y%m%d%H%i%s') " .
+	"WHERE rev_id IN (" . $dbw->makeList( $badRevs ) . ')';
+//echo "$sql\n";
+$dbw->query( $sql, $fname );
+echo "Done\n";
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/fixUserRegistration.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/fixUserRegistration.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/fixUserRegistration.php	(revision 1280)
@@ -0,0 +1,31 @@
+<?php
+/**
+ * Fix the user_registration field.
+ * In particular, for values which are NULL, set them to the date of the first edit
+ */
+
+require_once( 'commandLine.inc' );
+
+$fname = 'fixUserRegistration.php';
+
+$dbr = wfGetDB( DB_SLAVE );
+$dbw = wfGetDB( DB_MASTER );
+
+// Get user IDs which need fixing
+$res = $dbr->select( 'user', 'user_id', 'user_registration IS NULL', $fname );
+
+while ( $row = $dbr->fetchObject( $res ) ) {
+	$id = $row->user_id;
+	// Get first edit time
+	$timestamp = $dbr->selectField( 'revision', 'MIN(rev_timestamp)', array( 'rev_user' => $id ), $fname );
+	// Update
+	if ( !empty( $timestamp ) ) {
+		$dbw->update( 'user', array( 'user_registration' => $timestamp ), array( 'user_id' => $id ), $fname );
+		print "$id $timestamp\n";
+	} else {
+		print "$id NULL\n";
+	}
+}
+print "\n";
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/fuzz-tester.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/fuzz-tester.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/fuzz-tester.php	(revision 1280)
@@ -0,0 +1,2747 @@
+<?php
+/**
+* @addtogroup Maintenance
+* @author Nick Jenkins ( http://nickj.org/ ).
+* @copyright 2006 Nick Jenkins
+* @licence GNU General Public Licence 2.0
+
+Started: 18 May 2006.
+
+Description:
+  Performs fuzz-style testing of MediaWiki's parser and forms.
+
+How:
+  - Generate lots of nasty wiki text.
+  - Ask the Parser to render that wiki text to HTML, or ask MediaWiki's forms 
+    to deal with that wiki text.
+  - Check MediaWiki's output for problems. 
+  - Repeat.
+
+Why:
+  - To help find bugs.
+  - To help find security issues, or potential security issues.
+
+What type of problems are being checked for:
+  - Unclosed tags.
+  - Errors or interesting warnings from Tidy.
+  - PHP errors / warnings / notices.
+  - MediaWiki internal errors.
+  - Very slow responses.
+  - No response from apache.
+  - Optionally checking for malformed HTML using the W3C validator.
+
+Background:
+  Many of the wikiFuzz class methods are a modified PHP port, 
+  of a "shameless" Python port, of LCAMTUF'S MANGELME:
+  - http://www.securiteam.com/tools/6Z00N1PBFK.html
+  - http://www.securityfocus.com/archive/1/378632/2004-10-15/2004-10-21/0
+
+Video:
+  There's an XviD video discussing this fuzz tester. You can get it from:
+  http://files.nickj.org/MediaWiki/Fuzz-Testing-MediaWiki-xvid.avi
+
+Requirements:
+  To run this, you will need:
+  - Command-line PHP5, with PHP-curl enabled (not all installations have this 
+    enabled - try "apt-get install php5-curl" if you're on Debian to install).
+  - the Tidy standalone executable. ("apt-get install tidy").
+
+Optional:
+  - If you want to run the curl scripts, you'll need standalone curl installed
+    ("apt-get install curl")
+  - For viewing the W3C validator output on a command line, the "html2text"
+    program may be useful ("apt-get install html2text")
+
+Saving tests and test results:
+  Any of the fuzz tests which find problems are saved for later review.
+  In order to help track down problems, tests are saved in a number of
+  different formats. The default filename extensions and their meanings are:
+  - ".test.php" : PHP script that reproduces just that one problem using PHP-Curl.
+  - ".curl.sh"  : Shell script that reproduces that problem using standalone curl.
+  - ".data.bin" : The serialized PHP data so that this script can re-run the test.
+  - ".info.txt" : A human-readable text file with details of the field contents.
+
+Wiki configuration for testing:
+  You should make some additions to LocalSettings.php in order to catch the most
+  errors. Note this configuration is for **TESTING PURPOSES ONLY**, and is IN NO
+  WAY, SHAPE, OR FORM suitable for deployment on a hostile network. That said, 
+  personally I find these additions to be the most helpful for testing purposes:
+
+  // --------- Start ---------
+  // Everyone can do everything. Very useful for testing, yet useless for deployment.
+  $wgGroupPermissions['*']['autoconfirmed']   = true;
+  $wgGroupPermissions['*']['block']           = true;
+  $wgGroupPermissions['*']['bot']             = true;
+  $wgGroupPermissions['*']['delete']          = true;
+  $wgGroupPermissions['*']['deletedhistory']  = true;
+  $wgGroupPermissions['*']['deleterevision']  = true;
+  $wgGroupPermissions['*']['editinterface']   = true;
+  $wgGroupPermissions['*']['hiderevision']    = true;
+  $wgGroupPermissions['*']['import']          = true;
+  $wgGroupPermissions['*']['importupload']    = true;
+  $wgGroupPermissions['*']['minoredit']       = true;
+  $wgGroupPermissions['*']['move']            = true;
+  $wgGroupPermissions['*']['patrol']          = true;
+  $wgGroupPermissions['*']['protect']         = true;
+  $wgGroupPermissions['*']['proxyunbannable'] = true;
+  $wgGroupPermissions['*']['renameuser']      = true;
+  $wgGroupPermissions['*']['reupload']        = true;
+  $wgGroupPermissions['*']['reupload-shared'] = true;
+  $wgGroupPermissions['*']['rollback']        = true;
+  $wgGroupPermissions['*']['siteadmin']       = true;
+  $wgGroupPermissions['*']['trackback']       = true;
+  $wgGroupPermissions['*']['unwatchedpages']  = true;
+  $wgGroupPermissions['*']['upload']          = true;
+  $wgGroupPermissions['*']['userrights']      = true;
+  $wgGroupPermissions['*']['renameuser']      = true;
+  $wgGroupPermissions['*']['makebot']         = true;
+  $wgGroupPermissions['*']['makesysop']       = true;
+
+  // Enable weird and wonderful options:
+                              // Increase default error reporting level.
+  error_reporting (E_ALL);    // At a later date could be increased to E_ALL | E_STRICT
+  $wgBlockOpenProxies = true; // Some block pages require this to be true in order to test.
+  $wgEnableUploads = true;    // enable uploads.
+  //$wgUseTrackbacks = true;  // enable trackbacks; However this breaks the viewPageTest, so currently disabled.
+  $wgDBerrorLog = "/root/mediawiki-db-error-log.txt";  // log DB errors, replace with suitable path.
+  $wgShowSQLErrors = true;    // Show SQL errors (instead of saying the query was hidden).
+  $wgShowExceptionDetails = true;  // want backtraces.
+  $wgEnableAPI = true;        // enable API.
+  $wgEnableWriteAPI = true;   // enable API.
+
+  // Install & enable Parser Hook extensions to increase code coverage. E.g.:
+  require_once("extensions/ParserFunctions/ParserFunctions.php");
+  require_once("extensions/Cite/Cite.php");
+  require_once("extensions/inputbox/inputbox.php");
+  require_once("extensions/Sort/Sort.php");
+  require_once("extensions/wikihiero/wikihiero.php");
+  require_once("extensions/CharInsert/CharInsert.php");
+  require_once("extensions/FixedImage/FixedImage.php");
+
+  // Install & enable Special Page extensions to increase code coverage. E.g.:
+  require_once("extensions/Cite/SpecialCite.php");
+  require_once("extensions/Filepath/SpecialFilepath.php");
+  require_once("extensions/Makebot/Makebot.php");
+  require_once("extensions/Makesysop/SpecialMakesysop.php");
+  require_once("extensions/Renameuser/SpecialRenameuser.php");
+  require_once("extensions/LinkSearch/LinkSearch.php");
+  // --------- End ---------
+  
+  If you want to try E_STRICT error logging, add this to the above:
+  // --------- Start ---------
+  error_reporting (E_ALL | E_STRICT);
+  set_error_handler( 'error_handler' );
+  function error_handler ($type, $message, $file=__FILE__, $line=__LINE__) {
+     if ($message == "var: Deprecated. Please use the public/private/protected modifiers") return;
+     print "<br />\n<b>Strict Standards:</b> Type: <b>$type</b>:  $message in <b>$file</b> on line <b>$line</b><br />\n";
+  }
+  // --------- End ---------
+
+  Also add/change this in AdminSettings.php:
+  // --------- Start ---------
+  $wgEnableProfileInfo = true;
+  $wgDBserver = "localhost"; // replace with DB server hostname
+  // --------- End ---------
+
+Usage:
+  Run with "php fuzz-tester.php".
+  To see the various command-line options, run "php fuzz-tester.php --help".
+  To stop the script, press Ctrl-C.
+
+Console output:
+  - If requested, first any previously failed tests will be rerun.
+  - Then new tests will be generated and run. Any tests that fail will be saved,
+    and a brief message about why they failed will be printed on the console.
+  - The console will show the number of tests run, time run, number of tests
+    failed, number of tests being done per minute, and the name of the current test.
+
+TODO:
+  Some known things that could improve this script:
+  - Logging in with cookie jar storage needed for some tests (as there are some 
+    pages that cannot be tested without being logged in, and which are currently 
+    untested - e.g. Special:Emailuser, Special:Preferences, adding to Watchist).
+  - Testing of Timeline extension (I cannot test as ploticus has/had issues on
+    my architecture).
+
+*/
+
+/////////////////////////// COMMAND LINE HELP ////////////////////////////////////
+
+// This is a command line script, load MediaWiki env (gives command line options);
+include('commandLine.inc');
+
+// if the user asked for an explanation of command line options.
+if ( isset( $options["help"] ) ) {
+    print <<<ENDS
+MediaWiki $wgVersion fuzz tester
+Usage: php {$_SERVER["SCRIPT_NAME"]} [--quiet] [--base-url=<url-to-test-wiki>]
+                           [--directory=<failed-test-path>] [--include-binary]
+                           [--w3c-validate] [--delete-passed-retests] [--help]
+                           [--user=<username>] [--password=<password>]
+                           [--rerun-failed-tests] [--max-errors=<int>] 
+                           [--max-runtime=<num-minutes>]
+                           [--specific-test=<test-name>]
+
+Options:
+  --quiet                 : Hides passed tests, shows only failed tests.
+  --base-url              : URL to a wiki on which to run the tests. 
+                            The "http://" is optional and can be omitted.
+  --directory             : Full path to directory for storing failed tests.
+                            Will be created if it does not exist.
+  --include-binary        : Includes non-alphanumeric characters in the tests.
+  --w3c-validate          : Validates pages using the W3C's web validator. 
+                            Slow. Currently many pages fail validation.
+  --user                  : Login name of a valid user on your test wiki.
+  --password              : Password for the valid user on your test wiki. 
+  --delete-passed-retests : Will delete retests that now pass.
+                            Requires --rerun-failed-tests to be meaningful.
+  --rerun-failed-tests    : Whether to rerun any previously failed tests.
+  --max-errors            : Maximum number of errors to report before exiting.
+                            Does not include errors from --rerun-failed-tests
+  --max-runtime           : Maximum runtime, in minutes, to run before exiting.
+                            Only applies to new tests, not --rerun-failed-tests
+  --specific-test         : Runs only the specified fuzz test. 
+                            Only applies to new tests, not --rerun-failed-tests
+  --keep-passed-tests     : Saves all test files, even those that pass.
+  --help                  : Show this help message.
+
+Example:
+  If you wanted to fuzz test a nightly MediaWiki checkout using cron for 1 hour, 
+  and only wanted to be informed of errors, and did not want to redo previously
+  failed tests, and wanted a maximum of 100 errors, then you could do:
+  php {$_SERVER["SCRIPT_NAME"]} --quiet --max-errors=100 --max-runtime=60
+
+
+ENDS;
+
+    exit( 0 );
+}
+
+
+// if we got command line options, check they look valid.
+$validOptions = array ("quiet", "base-url", "directory", "include-binary",
+        "w3c-validate", "user", "password", "delete-passed-retests",
+        "rerun-failed-tests", "max-errors",
+        "max-runtime", "specific-test", "keep-passed-tests", "help" );
+if (!empty($options)) {
+    $unknownArgs = array_diff (array_keys($options), $validOptions);
+    foreach ($unknownArgs as $invalidArg) {
+        print "Ignoring invalid command-line option: --$invalidArg\n";
+    }
+}
+
+
+///////////////////////////// CONFIGURATION ////////////////////////////////////
+
+// URL to some wiki on which we can run our tests.
+if (!empty($options["base-url"])) {
+    define("WIKI_BASE_URL", $options["base-url"]);
+} else {
+    define("WIKI_BASE_URL", $wgServer . $wgScriptPath . '/');
+}
+
+// The directory name where we store the output.
+// Example for Windows: "c:\\temp\\wiki-fuzz"
+if (!empty($options["directory"])) {
+    define("DIRECTORY", $options["directory"] );
+} else {
+    define("DIRECTORY", "{$wgUploadDirectory}/fuzz-tests");
+}
+
+// Should our test fuzz data include binary strings?
+define("INCLUDE_BINARY",  isset($options["include-binary"]) );
+
+// Whether we want to validate HTML output on the web.
+// At the moment very few generated pages will validate, so not recommended.
+define("VALIDATE_ON_WEB", isset($options["w3c-validate"]) );
+// URL to use to validate our output:
+define("VALIDATOR_URL",  "http://validator.w3.org/check");
+
+// Location of Tidy standalone executable.
+define("PATH_TO_TIDY",  "/usr/bin/tidy");
+
+// The name of a user who has edited on your wiki. Used 
+// when testing the Special:Contributions and Special:Userlogin page.
+if (!empty($options["user"])) {
+    define("USER_ON_WIKI", $options["user"] );
+} else {
+    define("USER_ON_WIKI", "nickj");
+}
+
+// The password of the above user. Used when testing the login page,
+// and to do this we sometimes need to login successfully. 
+if (!empty($options["password"])) {
+    define("USER_PASSWORD", $options["password"] );
+} else {
+    // And no, this is not a valid password on any public wiki.
+    define("USER_PASSWORD", "nickj");
+}
+
+// If we have a test that failed, and then we run it again, and it passes,
+// do you want to delete it or keep it?
+define("DELETE_PASSED_RETESTS", isset($options["delete-passed-retests"]) );
+
+// Do we want to rerun old saved tests at script startup?
+// Set to true to help catch regressions, or false if you only want new stuff.
+define("RERUN_OLD_TESTS", isset($options["rerun-failed-tests"]) );
+
+// File where the database errors are logged. Should be defined in LocalSettings.php.
+define("DB_ERROR_LOG_FILE", $wgDBerrorLog );
+
+// Run in chatty mode (all output, default), or run in quiet mode (only prints out details of failed tests)?
+define("QUIET", isset($options["quiet"]) );
+
+// Keep all test files, even those that pass. Potentially useful to tracking input that causes something
+// unusual to happen, if you don't know what "unusual" is until later.
+define("KEEP_PASSED_TESTS", isset($options["keep-passed-tests"]) );
+
+// The maximum runtime, if specified.
+if (!empty($options["max-runtime"]) && intval($options["max-runtime"])>0) {
+    define("MAX_RUNTIME", intval($options["max-runtime"]) );
+}
+
+// The maximum number of problems to find, if specified. Excludes retest errors.
+if (!empty($options["max-errors"]) && intval($options["max-errors"])>0) {
+    define("MAX_ERRORS", intval($options["max-errors"]) );
+}
+
+// if the user has requested a specific test (instead of all tests), and the test they asked for looks valid.
+if (!empty($options["specific-test"])) {
+    if (class_exists($options["specific-test"]) && get_parent_class($options["specific-test"])=="pageTest") {
+        define("SPECIFIC_TEST", $options["specific-test"] );
+    }
+    else {
+        print "Ignoring invalid --specific-test\n";
+    }
+}
+
+// Define the file extensions we'll use:
+define("PHP_TEST" , ".test.php");
+define("CURL_TEST", ".curl.sh" );
+define("DATA_FILE", ".data.bin");
+define("INFO_FILE", ".info.txt");
+define("HTML_FILE", ".wiki_preview.html");
+
+// If it goes wrong, we want to know about it.
+error_reporting(E_ALL | E_STRICT);
+
+////////////////  A CLASS THAT GENERATES RANDOM NASTY WIKI & HTML STRINGS  //////////////////////
+
+class wikiFuzz {
+
+    // Only some HTML tags are understood with params by MediaWiki, the rest are ignored.
+    // List the tags that accept params below, as well as what those params are.
+    public static $data = array(
+            "B"          => array("CLASS", "ID", "STYLE", "lang", "dir", "title"),
+            "CAPTION"    => array("CLASS", "ID", "STYLE", "align", "lang", "dir", "title"),
+            "CENTER"     => array("CLASS", "STYLE", "ID", "lang", "dir", "title"),
+            "DIV"        => array("CLASS", "STYLE", "ID", "align", "lang", "dir", "title"),
+            "FONT"       => array("CLASS", "STYLE", "ID", "lang", "dir", "title", "face", "size", "color"),
+            "H1"         => array("STYLE", "CLASS", "ID", "align", "lang", "dir", "title"),
+            "H2"         => array("STYLE", "CLASS", "ID", "align", "lang", "dir", "title"),
+            "HR"         => array("STYLE", "CLASS", "ID", "WIDTH", "lang", "dir", "title", "size", "noshade"),
+            "LI"         => array("CLASS", "ID", "STYLE", "lang", "dir", "title", "type", "value"),
+            "TABLE"      => array("STYLE", "CLASS", "ID", "BGCOLOR", "WIDTH", "ALIGN", "BORDER", "CELLPADDING", 
+                                   "CELLSPACING", "lang", "dir", "title", "summary", "frame", "rules"),
+            "TD"         => array("STYLE", "CLASS", "ID", "BGCOLOR", "WIDTH", "ALIGN", "COLSPAN", "ROWSPAN",
+                                  "VALIGN", "abbr", "axis", "headers", "scope", "nowrap", "height", "lang",
+                                  "dir", "title", "char", "charoff"),
+            "TH"         => array("STYLE", "CLASS", "ID", "BGCOLOR", "WIDTH", "ALIGN", "COLSPAN", "ROWSPAN",
+                                  "VALIGN", "abbr", "axis", "headers", "scope", "nowrap", "height", "lang", 
+                                  "dir", "title", "char", "charoff"),
+            "TR"         => array("CLASS", "STYLE", "ID", "BGCOLOR", "ALIGN", "VALIGN", "lang", "dir", "title", "char", "charoff"),
+            "UL"         => array("CLASS", "STYLE", "ID", "lang", "dir", "title", "type"),
+            "P"          => array("style", "class", "id", "align", "lang", "dir", "title"),
+            "blockquote" => array("CLASS", "ID", "STYLE", "lang", "dir", "title", "cite"),
+            "span"       => array("CLASS", "ID", "STYLE", "align", "lang", "dir", "title"),
+            "code"       => array("CLASS", "ID", "STYLE", "lang", "dir", "title"),
+            "tt"         => array("CLASS", "ID", "STYLE", "lang", "dir", "title"),
+            "small"      => array("CLASS", "ID", "STYLE", "lang", "dir", "title"),
+            "big"        => array("CLASS", "ID", "STYLE", "lang", "dir", "title"),
+            "s"          => array("CLASS", "ID", "STYLE", "lang", "dir", "title"),
+            "u"          => array("CLASS", "ID", "STYLE", "lang", "dir", "title"),
+            "del"        => array("CLASS", "ID", "STYLE", "lang", "dir", "title", "datetime", "cite"),
+            "ins"        => array("CLASS", "ID", "STYLE", "lang", "dir", "title", "datetime", "cite"),
+            "sub"        => array("CLASS", "ID", "STYLE", "lang", "dir", "title"),
+            "sup"        => array("CLASS", "ID", "STYLE", "lang", "dir", "title"),
+            "ol"         => array("CLASS", "ID", "STYLE", "lang", "dir", "title", "type", "start"),
+            "br"         => array("CLASS", "ID", "STYLE", "title", "clear"),
+            "cite"       => array("CLASS", "ID", "STYLE", "lang", "dir", "title"),
+            "var"        => array("CLASS", "ID", "STYLE", "lang", "dir", "title"),
+            "dl"         => array("CLASS", "ID", "STYLE", "lang", "dir", "title"),
+            "ruby"       => array("CLASS", "ID", "STYLE", "lang", "dir", "title"),
+            "rt"         => array("CLASS", "ID", "STYLE", "lang", "dir", "title"),
+            "rp"         => array("CLASS", "ID", "STYLE", "lang", "dir", "title"),
+            "dt"         => array("CLASS", "ID", "STYLE", "lang", "dir", "title"),
+            "dl"         => array("CLASS", "ID", "STYLE", "lang", "dir", "title"),
+            "em"         => array("CLASS", "ID", "STYLE", "lang", "dir", "title"),
+            "strong"     => array("CLASS", "ID", "STYLE", "lang", "dir", "title"),
+            "i"          => array("CLASS", "ID", "STYLE", "lang", "dir", "title"),
+            "thead"      => array("CLASS", "ID", "STYLE", "lang", "dir", "title",  'align', 'char', 'charoff', 'valign'),
+            "tfoot"      => array("CLASS", "ID", "STYLE", "lang", "dir", "title",  'align', 'char', 'charoff', 'valign'),
+            "tbody"      => array("CLASS", "ID", "STYLE", "lang", "dir", "title",  'align', 'char', 'charoff', 'valign'),
+            "colgroup"   => array("CLASS", "ID", "STYLE", "lang", "dir", "title",  'align', 'char', 'charoff', 'valign', 'span', 'width'),
+            "col"        => array("CLASS", "ID", "STYLE", "lang", "dir", "title",  'align', 'char', 'charoff', 'valign', 'span', 'width'),
+            "pre"        => array("CLASS", "ID", "STYLE", "lang", "dir", "title", "width"),
+
+            // extension tags that accept parameters:
+            "sort"         => array("order", "class"),
+            "ref"          => array("name"),
+            "categorytree" => array("hideroot", "mode", "style"),
+            "chemform"     => array("link", "wikilink", "query"),
+            "section"      => array("begin", "new"),
+
+            // older MW transclusion.
+            "transclude"   => array("page"),            
+                );
+
+    // The types of the HTML that we will be testing were defined above
+    // Note: this needs to be initialized later to be equal to: array_keys(wikiFuzz::$data);
+    // as such, it also needs to also be publicly modifiable.
+    public static $types;
+
+
+    // Some attribute values.
+    static private $other = array("&","=",":","?","\"","\n","%n%n%n%n%n%n%n%n%n%n%n%n","\\");
+    static private $ints  = array(
+            // various numbers
+            "0","-1","127","-7897","89000","808080","90928345",
+            "0xfffffff","ffff",
+
+            // Different ways of saying: '
+            "&#0000039;", // Long UTF-8 Unicode encoding
+            "&#39;",  // dec version.
+            "&#x27;", // hex version.
+            "&#xA7;", // malformed hex variant, MSB not zero.
+
+            // Different ways of saying: "
+            "&#0000034;", // Long UTF-8 Unicode encoding
+            "&#34;",
+            "&#x22;", // hex version.
+            "&#xA2;", // malformed hex variant, MSB not zero.
+
+            // Different ways of saying: <
+            "<",
+            "&#0000060",  // Long UTF-8 Unicode encoding without semicolon (Mediawiki wants the colon)
+            "&#0000060;", // Long UTF-8 Unicode encoding with semicolon
+            "&#60;",
+            "&#x3C;",     // hex version.
+            "&#xBC;",     // malformed hex variant, MSB not zero.
+            "&#x0003C;",  // mid-length hex version
+            "&#X00003C;", // slightly longer hex version, with capital "X"
+
+            // Different ways of saying: >
+            ">",
+            "&#0000062;", // Long UTF-8 Unicode encoding
+            "&#62;",
+            "&#x3E;",     // hex version.
+            "&#xBE;",     // malformed variant, MSB not zero.
+
+            // Different ways of saying: [
+            "&#0000091;", // Long UTF-8 Unicode encoding
+            "&#91;",
+            "&#x5B;",     // hex version.
+
+            // Different ways of saying: {{
+            "&#0000123;&#0000123;", // Long UTF-8 Unicode encoding
+            "&#123;&#123;",
+            "&#x7B;&#x7B;",         // hex version.
+
+            // Different ways of saying: |
+            "&#0000124;", // Long UTF-8 Unicode encoding
+            "&#124;",
+            "&#x7C;",     // hex version.
+            "&#xFC;",     // malformed hex variant, MSB not zero.
+
+            // a "lignature" - http://www.robinlionheart.com/stds/html4/spchars#ligature
+            "&zwnj;"
+                );
+
+    // Defines various wiki-related bits of syntax, that can potentially cause 
+    // MediaWiki to do something other than just print that literal text.
+    static private $ext = array(
+            // links, templates, parameters.
+            "[[", "]]", "{{", "}}", "|", "[", "]", "{{{", "}}}", "|]]", 
+
+            // wiki tables.
+            "\n{|", "\n|}",
+            "!",
+            "\n!",
+            "!!",
+            "||",
+            "\n|-", "| ", "\n|",
+
+            // section headings.
+            "=", "==", "===", "====", "=====", "======",
+
+            // lists (ordered and unordered) and indentation.
+            "\n*", "*", "\n:", ":", 
+            "\n#", "#",
+
+            // definition lists (dl, dt, dd), newline, and newline with pre, and a tab.
+            "\n;", ";", "\n ",
+
+            // Whitespace: newline, tab, space.
+            "\n", "\t", " ",
+
+            // Some XSS attack vectors from http://ha.ckers.org/xss.html 
+            "&#x09;", // tab
+            "&#x0A;", // newline
+            "&#x0D;", // carriage return
+            "\0",     // null character
+            " &#14; ", // spaces and meta characters
+            "'';!--\"<XSS>=&{()}", // compact injection of XSS & SQL tester
+            
+            // various NULL fields
+            "%00",
+            "&#00;",
+            "\0",
+
+            // horizontal rule.
+            "-----", "\n-----",
+
+            // signature, redirect, bold, italics.
+            "~~~~", "#REDIRECT [[", "'''", "''", 
+
+            // comments.
+            "<!--", "-->", 
+
+            // quotes.
+            "\"", "'",
+
+            // tag start and tag end.
+            "<", ">",
+
+            // implicit link creation on URIs.
+            "http://",
+            "https://",
+            "ftp://",
+            "irc://",
+            "news:",
+            'gopher://',
+            'telnet://',
+            'nntp://',
+            'worldwind://',
+            'mailto:',
+
+            // images.
+            "[[image:",
+            ".gif",
+            ".png",
+            ".jpg",
+            ".jpeg",
+            'thumbnail=',
+            'thumbnail',
+            'thumb=',
+            'thumb',
+            'right',
+            'none',
+            'left',
+            'framed',
+            'frame',
+            'enframed',
+            'centre',
+            'center',
+            "Image:",
+            "[[:Image",
+            'px',
+
+            // misc stuff to throw at the Parser.
+            '%08X',
+            '/',
+            ":x{|",
+            "\n|+",
+            "<noinclude>",
+            "</noinclude>",
+            " \302\273",
+            " :",
+            " !",
+            " ;",
+            "\302\253",
+            "[[category:",
+            "?=",
+            "(",
+            ")",
+            "]]]",
+            "../",
+            "{{{{",
+            "}}}}",
+            "[[Special:",
+            "<includeonly>",
+            "</includeonly>",
+            "<!--MWTEMPLATESECTION=",
+            '<!--MWTOC-->',
+
+            // implicit link creation on booknum, RFC, and PubMed ID usage (both with and without IDs)
+            "ISBN 2",
+            "RFC 000",
+            "PMID 000",
+            "ISBN ",
+            "RFC ",
+            "PMID ",
+
+            // magic words:
+            '__NOTOC__',
+            '__FORCETOC__',
+            '__NOEDITSECTION__',
+            '__START__',
+            '__NOTITLECONVERT__',
+            '__NOCONTENTCONVERT__',
+            '__END__',
+            '__TOC__',
+            '__NOTC__',
+            '__NOCC__',
+            "__FORCETOC__",
+            "__NEWSECTIONLINK__",
+            "__NOGALLERY__",
+
+            // more magic words / internal templates.
+            '{{PAGENAME}}',
+            '{{PAGENAMEE}}',
+            '{{NAMESPACE}}',
+            "{{MSG:",
+            "}}",
+            "{{MSGNW:",
+            "}}",
+            "{{INT:",
+            "}}",
+            '{{SITENAME}}',        
+            "{{NS:",        
+            "}}",
+            "{{LOCALURL:",        
+            "}}",
+            "{{LOCALURLE:",        
+            "}}",
+            "{{SCRIPTPATH}}",        
+            "{{GRAMMAR:gentiv|",        
+            "}}",
+            "{{REVISIONID}}",
+            "{{SUBPAGENAME}}",
+            "{{SUBPAGENAMEE}}",
+            "{{ns:0}}",
+            "{{fullurle:",
+            "}}",
+            "{{subst:",
+            "}}",
+            "{{UCFIRST:",
+            "}}",
+            "{{UC:",
+            '{{SERVERNAME}}',
+            '{{SERVER}}',
+            "{{RAW:",
+            "}}",
+            "{{PLURAL:",
+            "}}",
+            "{{LCFIRST:",
+            "}}",
+            "{{LC:",
+            "}}",
+            '{{CURRENTWEEK}}',
+            '{{CURRENTDOW}}',
+            "{{INT:{{LC:contribs-showhideminor}}|",
+            "}}",
+            "{{INT:googlesearch|",
+            "}}",
+            "{{BASEPAGENAME}}",
+            "{{CONTENTLANGUAGE}}",
+            "{{PAGESINNAMESPACE:}}",
+            "{{#language:",
+            "}}",
+            "{{#special:",
+            "}}",
+            "{{#special:emailuser",
+            "}}",
+
+            // Some raw link for magic words.
+            "{{NUMBEROFPAGES:R",
+            "}}",
+            "{{NUMBEROFUSERS:R",
+            "}}",
+            "{{NUMBEROFARTICLES:R",
+            "}}",
+            "{{NUMBEROFFILES:R",
+            "}}",
+            "{{NUMBEROFADMINS:R",
+            "}}",
+            "{{padleft:",
+            "}}",
+            "{{padright:",
+            "}}",
+            "{{DEFAULTSORT:",
+            "}}",
+
+            // internal Math "extension":
+            "<math>",
+            "</math>",
+
+            // Parser extension functions:
+            "{{#expr:",
+            "{{#if:",
+            "{{#ifeq:",
+            "{{#ifexist:",
+            "{{#ifexpr:",
+            "{{#switch:",
+            "{{#time:",
+            "}}",
+
+            // references table for the Cite extension.
+            "<references/>",
+
+            // Internal Parser tokens - try inserting some of these.
+            "UNIQ25f46b0524f13e67NOPARSE",
+            "UNIQ17197916557e7cd6-HTMLCommentStrip46238afc3bb0cf5f00000002",
+            "\x07UNIQ17197916557e7cd6-HTMLCommentStrip46238afc3bb0cf5f00000002-QINU",
+
+            // Inputbox extension:
+            "<inputbox>\ntype=search\nsearchbuttonlabel=\n",
+            "</inputbox>",
+
+            // charInsert extension:
+            "<charInsert>",
+            "</charInsert>",
+
+            // wikiHiero extension:
+            "<hiero>",
+            "</hiero>",
+
+            // Image gallery:
+            "<gallery>",
+            "</gallery>",
+
+            // FixedImage extension.
+            "<fundraising/>",
+
+            // Timeline extension: currently untested.
+
+            // Nowiki:
+            "<nOwIkI>",
+            "</nowiki>",
+
+            // an external image to test the external image displaying code
+            "http://debian.org/Pics/debian.png",
+
+            // LabeledSectionTransclusion extension.
+            "{{#lstx:",
+            "}}",
+            "{{#lst:",
+            "}}",
+            "{{#lst:Main Page|",
+            "}}"
+            );
+
+    /**
+     ** Randomly returns one element of the input array.
+     */
+    static public function chooseInput(array $input) {
+        $randindex = wikiFuzz::randnum(count($input) - 1);
+        return $input[$randindex];
+    }
+
+    // Max number of parameters for HTML attributes.
+    static private $maxparams = 10;
+
+    /** 
+     ** Returns random number between finish and start.
+     */
+    static public function randnum($finish,$start=0) {
+        return mt_rand($start,$finish);
+    }
+
+    /**
+     ** Returns a mix of random text and random wiki syntax.
+     */
+    static private function randstring() {
+        $thestring = "";
+
+        for ($i=0; $i<40; $i++) {
+            $what = wikiFuzz::randnum(1);
+
+            if ($what == 0) { // include some random wiki syntax
+                $which = wikiFuzz::randnum(count(wikiFuzz::$ext) - 1);
+                $thestring .= wikiFuzz::$ext[$which];
+            }
+            else { // include some random text
+                $char = INCLUDE_BINARY 
+                    // Decimal version:
+                    // "&#" . wikiFuzz::randnum(255) . ";"
+                    // Hex version:
+                    ? "&#x" . str_pad(dechex(wikiFuzz::randnum(255)), wikiFuzz::randnum(2, 7), "0", STR_PAD_LEFT) . ";" 
+                    // A truly binary version:
+                    // ? chr(wikiFuzz::randnum(0,255))
+                    : chr(wikiFuzz::randnum(126,32));
+
+                $length = wikiFuzz::randnum(8);
+                $thestring .= str_repeat ($char, $length);
+            }
+        }
+        return $thestring;
+    }
+
+    /**
+     ** Returns either random text, or random wiki syntax, or random data from "ints",
+     **        or random data from "other".
+     */
+    static private function makestring() {
+        $what = wikiFuzz::randnum(2);
+        if ($what == 0) {
+            return wikiFuzz::randstring();
+        }
+        elseif ($what == 1) {
+            return wikiFuzz::$ints[wikiFuzz::randnum(count(wikiFuzz::$ints) - 1)];
+        }
+        else {
+            return wikiFuzz::$other[wikiFuzz::randnum(count(wikiFuzz::$other) - 1)];
+        }
+    }
+
+
+    /**
+     ** Strips out the stuff that Mediawiki balks at in a page's title.
+     **        Implementation copied/pasted from cleanupTable.inc & cleanupImages.php
+     */
+    static public function makeTitleSafe($str) {
+        $legalTitleChars = " %!\"$&'()*,\\-.\\/0-9:;=?@A-Z\\\\^_`a-z~\\x80-\\xFF";
+        return preg_replace_callback(
+                "/([^$legalTitleChars])/",
+                create_function(
+                    // single quotes are essential here,
+                    // or alternative escape all $ as \$
+                    '$matches',
+                    'return sprintf( "\\x%02x", ord( $matches[1] ) );'
+                    ),
+                $str );
+    }
+
+    /**
+     ** Returns a string of fuzz text.
+     */
+    static private function loop() {
+        switch ( wikiFuzz::randnum(3) ) {
+            case 1: // an opening tag, with parameters.
+                $string = "";
+                $i = wikiFuzz::randnum(count(wikiFuzz::$types) - 1);
+                $t = wikiFuzz::$types[$i];
+                $arr = wikiFuzz::$data[$t];
+                $string .= "<" . $t . " ";
+                $num_params = min(wikiFuzz::$maxparams, count($arr));
+                for ($z=0; $z<$num_params; $z++) {
+                    $badparam = $arr[wikiFuzz::randnum(count($arr) - 1)];
+                    $badstring = wikiFuzz::makestring();
+                    $string .= $badparam . "=" . wikiFuzz::getRandQuote() . $badstring . wikiFuzz::getRandQuote() . " ";
+                }
+                $string .= ">\n";
+                return $string;
+            case 2: // a closing tag.
+                $i = wikiFuzz::randnum(count(wikiFuzz::$types) - 1);
+                return "</". wikiFuzz::$types[$i] . ">"; 
+            case 3: // a random string, between tags.
+                return wikiFuzz::makeString();
+        }
+        return "";    // catch-all, should never be called.
+    }
+
+    /**
+     ** Returns one of the three styles of random quote: ', ", and nothing.
+     */
+    static private function getRandQuote() {
+        switch ( wikiFuzz::randnum(3) ) {
+            case 1 : return "'";
+            case 2 : return "\"";
+            default: return "";
+        }
+    }
+
+    /**
+     ** Returns fuzz text, with the parameter indicating approximately how many lines of text you want.
+     */
+    static public function makeFuzz($maxtypes = 2) {
+        $page = "";
+        for ($k=0; $k<$maxtypes; $k++) {
+            $page .= wikiFuzz::loop();
+        }
+        return $page;
+    }
+}
+
+
+////////   MEDIAWIKI PAGES TO TEST, AND HOW TO TEST THEM  ///////
+
+/**
+ ** A page test has just these things:
+ **        1) Form parameters.
+ **        2) the URL we are going to test those parameters on.
+ **        3) Any cookies required for the test.
+ **        4) Whether Tidy should validate the page. Defaults to true, but can be turned off.
+ **        Declared abstract because it should be extended by a class 
+ **        that supplies these parameters.
+ */
+abstract class pageTest {
+    protected $params;
+    protected $pagePath;
+    protected $cookie = "";
+    protected $tidyValidate = true;
+
+    public function getParams() {
+        return $this->params;
+    }
+
+    public function getPagePath() {
+        return $this->pagePath;
+    }
+
+    public function getCookie() {
+        return $this->cookie;
+    }
+    
+    public function tidyValidate() {
+    	return $this->tidyValidate;
+    }
+}
+
+
+/**
+ ** a page test for the "Edit" page. Tests Parser.php and Sanitizer.php.
+ */
+class editPageTest extends pageTest {
+    function __construct() {
+        $this->pagePath = "index.php?title=WIKIFUZZ";
+
+        $this->params = array (
+                "action"        => "submit",
+                "wpMinoredit"   => wikiFuzz::makeFuzz(2),
+                "wpPreview"     => wikiFuzz::makeFuzz(2),
+                "wpSection"     => wikiFuzz::makeFuzz(2),
+                "wpEdittime"    => wikiFuzz::makeFuzz(2),
+                "wpSummary"     => wikiFuzz::makeFuzz(2),
+                "wpScrolltop"   => wikiFuzz::makeFuzz(2),
+                "wpStarttime"   => wikiFuzz::makeFuzz(2),
+                "wpAutoSummary" => wikiFuzz::makeFuzz(2),
+                "wpTextbox1"    => wikiFuzz::makeFuzz(40)  // the main wiki text, need lots of this.
+                );
+
+        // sometimes we don't want to specify certain parameters.
+        if (wikiFuzz::randnum(6) == 0) unset($this->params["wpSection"]);
+        if (wikiFuzz::randnum(6) == 0) unset($this->params["wpEdittime"]);
+        if (wikiFuzz::randnum(6) == 0) unset($this->params["wpSummary"]);
+        if (wikiFuzz::randnum(6) == 0) unset($this->params["wpScrolltop"]);
+        if (wikiFuzz::randnum(6) == 0) unset($this->params["wpStarttime"]);
+        if (wikiFuzz::randnum(6) == 0) unset($this->params["wpAutoSummary"]);
+        if (wikiFuzz::randnum(6) == 0) unset($this->params["wpTextbox1"]);
+    }
+}
+
+
+/**
+ ** a page test for "Special:Listusers".
+ */
+class listusersTest extends pageTest {
+    function __construct() {
+        $this->pagePath = "index.php?title=Special:Listusers";
+
+        $this->params = array (
+                "title"        => wikiFuzz::makeFuzz(2),
+                "group"        => wikiFuzz::makeFuzz(2),
+                "username"     => wikiFuzz::makeFuzz(2),
+                "Go"           => wikiFuzz::makeFuzz(2),
+                "limit"        => wikiFuzz::chooseInput( array("0", "-1", "---'----------0", "+1", "8134", wikiFuzz::makeFuzz(2)) ),
+                "offset"       => wikiFuzz::chooseInput( array("0", "-1", "--------'-----0", "+1", "81343242346234234", wikiFuzz::makeFuzz(2)) )
+                );
+    }
+}
+
+
+/**
+ ** a page test for "Special:Search".
+ */
+class searchTest extends pageTest {
+    function __construct() {
+        $this->pagePath = "index.php?title=Special:Search";
+
+        $this->params = array (
+                "action"        => "index.php?title=Special:Search",
+                "ns0"           => wikiFuzz::makeFuzz(2),
+                "ns1"           => wikiFuzz::makeFuzz(2),
+                "ns2"           => wikiFuzz::makeFuzz(2),
+                "ns3"           => wikiFuzz::makeFuzz(2),
+                "ns4"           => wikiFuzz::makeFuzz(2),
+                "ns5"           => wikiFuzz::makeFuzz(2),
+                "ns6"           => wikiFuzz::makeFuzz(2),
+                "ns7"           => wikiFuzz::makeFuzz(2),
+                "ns8"           => wikiFuzz::makeFuzz(2),
+                "ns9"           => wikiFuzz::makeFuzz(2),
+                "ns10"          => wikiFuzz::makeFuzz(2),
+                "ns11"          => wikiFuzz::makeFuzz(2),
+                "ns12"          => wikiFuzz::makeFuzz(2),
+                "ns13"          => wikiFuzz::makeFuzz(2),
+                "ns14"          => wikiFuzz::makeFuzz(2),
+                "ns15"          => wikiFuzz::makeFuzz(2),
+                "redirs"        => wikiFuzz::makeFuzz(2),
+                "search"        => wikiFuzz::makeFuzz(2),
+                "offset"        => wikiFuzz::chooseInput( array("", "0", "-1", "--------'-----0", "+1", "81343242346234234", wikiFuzz::makeFuzz(2)) ),
+                "fulltext"      => wikiFuzz::chooseInput( array("", "0", "1", "--------'-----0", "+1", wikiFuzz::makeFuzz(2)) ),
+                "searchx"       => wikiFuzz::chooseInput( array("", "0", "1", "--------'-----0", "+1", wikiFuzz::makeFuzz(2)) )
+                    );
+    }
+}
+
+
+/**
+ ** a page test for "Special:Recentchanges".
+ */
+class recentchangesTest extends pageTest {
+    function __construct() {
+        $this->pagePath = "index.php?title=Special:Recentchanges";
+
+        $this->params = array (
+                "action"        => wikiFuzz::makeFuzz(2),
+                "title"         => wikiFuzz::makeFuzz(2),
+                "namespace"     => wikiFuzz::chooseInput( range(-1, 15) ),
+                "Go"            => wikiFuzz::makeFuzz(2),
+                "invert"        => wikiFuzz::chooseInput( array("-1", "---'----------0", "+1", "8134", wikiFuzz::makeFuzz(2)) ),
+                "hideanons"     => wikiFuzz::chooseInput( array("-1", "------'-------0", "+1", "8134", wikiFuzz::makeFuzz(2)) ),
+                'limit'         => wikiFuzz::chooseInput( array("0", "-1", "---------'----0", "+1", "81340909772349234",  wikiFuzz::makeFuzz(2)) ),
+                "days"          => wikiFuzz::chooseInput( array("-1", "----------'---0", "+1", "8134", wikiFuzz::makeFuzz(2)) ),
+                "hideminor"     => wikiFuzz::chooseInput( array("-1", "-----------'--0", "+1", "8134", wikiFuzz::makeFuzz(2)) ),
+                "hidebots"      => wikiFuzz::chooseInput( array("-1", "---------'----0", "+1", "8134", wikiFuzz::makeFuzz(2)) ),
+                "hideliu"       => wikiFuzz::chooseInput( array("-1", "-------'------0", "+1", "8134", wikiFuzz::makeFuzz(2)) ),
+                "hidepatrolled" => wikiFuzz::chooseInput( array("-1", "-----'--------0", "+1", "8134", wikiFuzz::makeFuzz(2)) ),
+                "hidemyself"    => wikiFuzz::chooseInput( array("-1", "--'-----------0", "+1", "8134", wikiFuzz::makeFuzz(2)) ),
+                'categories_any'=> wikiFuzz::chooseInput( array("-1", "--'-----------0", "+1", "8134", wikiFuzz::makeFuzz(2)) ),
+                'categories'    => wikiFuzz::chooseInput( array("-1", "--'-----------0", "+1", "8134", wikiFuzz::makeFuzz(2)) ),
+                'feed'          => wikiFuzz::chooseInput( array("-1", "--'-----------0", "+1", "8134", wikiFuzz::makeFuzz(2)) )
+                );
+    }
+}
+
+
+/**
+ ** a page test for "Special:Prefixindex".
+ */
+class prefixindexTest extends pageTest {
+    function __construct() {
+        $this->pagePath = "index.php?title=Special:Prefixindex";
+
+        $this->params = array (
+                "title"         => "Special:Prefixindex",
+                "namespace"     => wikiFuzz::randnum(-10,101),
+                "Go"            => wikiFuzz::makeFuzz(2)
+                );
+
+        // sometimes we want 'prefix', sometimes we want 'from', and sometimes we want nothing.
+        if (wikiFuzz::randnum(3) == 0) {
+            $this->params["prefix"] = wikiFuzz::chooseInput( array("-1", "-----'--------0", "+++--+1",
+                                                 wikiFuzz::randnum(-10,8134), wikiFuzz::makeFuzz(2)) );
+        }
+        if (wikiFuzz::randnum(3) == 0) {
+            $this->params["from"]   = wikiFuzz::chooseInput( array("-1", "-----'--------0", "+++--+1", 
+                                                wikiFuzz::randnum(-10,8134), wikiFuzz::makeFuzz(2)) );
+        }
+    }
+}
+
+
+/**
+ ** a page test for "Special:MIMEsearch".
+ */
+class mimeSearchTest extends pageTest {
+    function __construct() {
+        $this->pagePath = "index.php?title=Special:MIMEsearch";
+
+        $this->params = array (
+                "action"        => "index.php?title=Special:MIMEsearch",
+                "mime"          => wikiFuzz::makeFuzz(3),
+                'limit'         => wikiFuzz::chooseInput( array("0", "-1", "-------'------0", "+1", "81342321351235325",  wikiFuzz::makeFuzz(2)) ),
+                'offset'        => wikiFuzz::chooseInput( array("0", "-1", "-----'--------0", "+1", "81341231235365252234324",  wikiFuzz::makeFuzz(2)) )
+                );
+    }
+}
+
+
+/**
+ ** a page test for "Special:Log".
+ */
+class specialLogTest extends pageTest {
+    function __construct() {
+        $this->pagePath = "index.php?title=Special:Log";
+
+        $this->params = array (
+                "type"        => wikiFuzz::chooseInput( array("", wikiFuzz::makeFuzz(2)) ),
+                "par"         => wikiFuzz::makeFuzz(2),
+                "user"        => wikiFuzz::makeFuzz(2),
+                "page"        => wikiFuzz::makeFuzz(2),
+                "from"        => wikiFuzz::makeFuzz(2),
+                "until"       => wikiFuzz::makeFuzz(2),
+                "title"       => wikiFuzz::makeFuzz(2)
+                );
+    }
+}
+
+
+/**
+ ** a page test for "Special:Userlogin", with a successful login.
+ */
+class successfulUserLoginTest extends pageTest {
+    function __construct() {
+        $this->pagePath = "index.php?title=Special:Userlogin&action=submitlogin&type=login&returnto=" . wikiFuzz::makeFuzz(2);
+
+        $this->params = array (
+                "wpName"          => USER_ON_WIKI,
+                // sometimes real password, sometimes not:
+                'wpPassword'      => wikiFuzz::chooseInput( array( wikiFuzz::makeFuzz(2), USER_PASSWORD ) ),
+                'wpRemember'      => wikiFuzz::makeFuzz(2)
+                );
+
+        $this->cookie = "wikidb_session=" .  wikiFuzz::chooseInput( array("1" , wikiFuzz::makeFuzz(2) ) );
+    }
+}
+
+
+/**
+ ** a page test for "Special:Userlogin".
+ */
+class userLoginTest extends pageTest {
+    function __construct() {
+
+        $this->pagePath = "index.php?title=Special:Userlogin";
+
+        $this->params = array (
+                'wpRetype'        => wikiFuzz::makeFuzz(2),
+                'wpRemember'      => wikiFuzz::makeFuzz(2),
+                'wpRealName'      => wikiFuzz::makeFuzz(2),
+                'wpPassword'      => wikiFuzz::makeFuzz(2),
+                'wpName'          => wikiFuzz::makeFuzz(2),
+                'wpMailmypassword'=> wikiFuzz::makeFuzz(2),
+                'wpLoginattempt'  => wikiFuzz::makeFuzz(2),
+                'wpEmail'         => wikiFuzz::makeFuzz(2),
+                'wpDomain'        => wikiFuzz::chooseInput( array("", "local", wikiFuzz::makeFuzz(2)) ),
+                'wpCreateaccountMail' => wikiFuzz::chooseInput( array("", wikiFuzz::makeFuzz(2)) ),
+                'wpCreateaccount' => wikiFuzz::chooseInput( array("", wikiFuzz::makeFuzz(2)) ),
+                'wpCookieCheck'   => wikiFuzz::chooseInput( array("", wikiFuzz::makeFuzz(2)) ),
+                'type'            => wikiFuzz::chooseInput( array("signup", "login", "", wikiFuzz::makeFuzz(2)) ),
+                'returnto'        => wikiFuzz::makeFuzz(2),
+                'action'          => wikiFuzz::chooseInput( array("", "submitlogin", wikiFuzz::makeFuzz(2)) )
+                );
+
+        $this->cookie = "wikidb_session=" . wikiFuzz::chooseInput( array("1" , wikiFuzz::makeFuzz(2) ) );
+    }
+}
+
+
+/**
+ ** a page test for "Special:Ipblocklist" (also includes unblocking)
+ */
+class ipblocklistTest extends pageTest {
+    function __construct() {
+        $this->pagePath = "index.php?title=Special:Ipblocklist";
+
+        $this->params = array (
+                'wpUnblockAddress'=> wikiFuzz::makeFuzz(2),
+                'ip'              => wikiFuzz::chooseInput( array("20398702394", "", "Nickj2", wikiFuzz::makeFuzz(2),
+                                     // something like an IP address, sometimes invalid:
+                                     ( wikiFuzz::randnum(300,-20) . "." . wikiFuzz::randnum(300,-20) . "."
+                                       . wikiFuzz::randnum(300,-20) . "." .wikiFuzz::randnum(300,-20) ) ) ),
+                'id'              => wikiFuzz::makeFuzz(2),
+                'wpUnblockReason' => wikiFuzz::makeFuzz(2),
+                'action'          => wikiFuzz::chooseInput( array(wikiFuzz::makeFuzz(2), "success", "submit", "unblock") ),
+                'wpEditToken'     => wikiFuzz::makeFuzz(2),
+                'wpBlock'         => wikiFuzz::chooseInput( array(wikiFuzz::makeFuzz(2), "") ),
+                'limit'           => wikiFuzz::chooseInput( array("0", "-1", "--------'-----0", "+1", 
+                                                 "09700982312351132098234",  wikiFuzz::makeFuzz(2)) ),
+                'offset'          => wikiFuzz::chooseInput( array("0", "-1", "------'-------0", "+1", 
+                                                 "09700980982341535324234234", wikiFuzz::makeFuzz(2)) )
+                );
+
+        // sometimes we don't want to specify certain parameters.
+        if (wikiFuzz::randnum(4) == 0) unset($this->params["action"]);
+        if (wikiFuzz::randnum(3) == 0) unset($this->params["ip"]);
+        if (wikiFuzz::randnum(2) == 0) unset($this->params["id"]);
+        if (wikiFuzz::randnum(3) == 0) unset($this->params["wpUnblockAddress"]);
+    }
+}
+
+
+/**
+ ** a page test for "Special:Newimages".
+ */
+class newImagesTest extends  pageTest {
+    function __construct() {
+        $this->pagePath = "index.php?title=Special:Newimages";
+
+        $this->params = array (
+                'hidebots'  => wikiFuzz::chooseInput( array(wikiFuzz::makeFuzz(2), "1", "", "-1") ),
+                'wpIlMatch' => wikiFuzz::makeFuzz(2),
+                'until'     => wikiFuzz::makeFuzz(2),
+                'from'      => wikiFuzz::makeFuzz(2)
+                );
+
+        // sometimes we don't want to specify certain parameters.
+        if (wikiFuzz::randnum(6) == 0) unset($this->params["until"]);
+        if (wikiFuzz::randnum(6) == 0) unset($this->params["from"]);
+    }
+}
+
+
+/**
+ ** a page test for the "Special:Imagelist" page.
+ */
+class imagelistTest extends pageTest {
+    function __construct() {
+        $this->pagePath = "index.php?title=Special:Imagelist";
+
+        $this->params = array (
+                'sort'      => wikiFuzz::chooseInput( array("bysize", "byname" , "bydate", wikiFuzz::makeFuzz(2)) ),
+                'limit'     => wikiFuzz::chooseInput( array("0", "-1", "--------'-----0", "+1", "09700982312351132098234",  wikiFuzz::makeFuzz(2)) ),
+                'offset'    => wikiFuzz::chooseInput( array("0", "-1", "------'-------0", "+1", "09700980982341535324234234", wikiFuzz::makeFuzz(2)) ),
+                'wpIlMatch' => wikiFuzz::makeFuzz(2)
+                );
+    }
+}
+
+
+/**
+ ** a page test for "Special:Export".
+ */
+class specialExportTest extends pageTest {
+    function __construct() {
+        $this->pagePath = "index.php?title=Special:Export";
+
+        $this->params = array (
+                'action'      => wikiFuzz::chooseInput( array("submit", "", wikiFuzz::makeFuzz(2)) ),
+                'pages'       => wikiFuzz::makeFuzz(2),
+                'curonly'     => wikiFuzz::chooseInput( array("", "0", "-1", wikiFuzz::makeFuzz(2)) ),
+                'listauthors' => wikiFuzz::chooseInput( array("", "0", "-1", wikiFuzz::makeFuzz(2)) ),
+                'history'     => wikiFuzz::chooseInput( array("0", "-1", "------'-------0", "+1", "09700980982341535324234234", wikiFuzz::makeFuzz(2)) ),
+
+                );
+
+        // For the time being, need to disable "submit" action as Tidy barfs on MediaWiki's XML export.
+        if ($this->params['action'] == 'submit') $this->params['action'] = '';
+
+        // Sometimes remove the history field.
+        if (wikiFuzz::randnum(2) == 0) unset($this->params["history"]);
+        
+        // page does not produce HTML.
+        $this->tidyValidate = false; 
+    }
+}
+
+
+/**
+ ** a page test for "Special:Booksources".
+ */
+class specialBooksourcesTest extends pageTest {
+    function __construct() {
+        $this->pagePath = "index.php?title=Special:Booksources";
+
+        $this->params = array (
+                'go'    => wikiFuzz::makeFuzz(2),
+                // ISBN codes have to contain some semi-numeric stuff or will be ignored:
+                'isbn'  => "0X0" . wikiFuzz::makeFuzz(2)
+                );
+    }
+}
+
+
+/**
+ ** a page test for "Special:Allpages".
+ */
+class specialAllpagesTest extends pageTest {
+    function __construct() {
+        $this->pagePath = "index.php?title=Special%3AAllpages";
+
+        $this->params = array (
+                'from'      => wikiFuzz::makeFuzz(2),
+                'namespace' => wikiFuzz::chooseInput( range(-1, 15) ),
+                'go'        => wikiFuzz::makeFuzz(2)
+                );
+    }
+}
+
+
+/**
+ ** a page test for the page History.
+ */
+class pageHistoryTest extends pageTest {
+    function __construct() {
+        $this->pagePath = "index.php?title=Main_Page&action=history";
+
+        $this->params = array (
+                'limit'     => wikiFuzz::chooseInput( array("-1", "0", "-------'------0", "+1", "8134",  wikiFuzz::makeFuzz(2)) ),
+                'offset'    => wikiFuzz::chooseInput( array("-1", "0", "------'-------0", "+1", "9823412312312412435", wikiFuzz::makeFuzz(2)) ),
+                "go"        => wikiFuzz::chooseInput( array("first", "last", wikiFuzz::makeFuzz(2)) ),
+                "dir"       => wikiFuzz::chooseInput( array("prev", "next", wikiFuzz::makeFuzz(2)) ),
+                "diff"      => wikiFuzz::chooseInput( array("-1", "--------'-----0", "+1", "8134", wikiFuzz::makeFuzz(2)) ),
+                "oldid"     => wikiFuzz::chooseInput( array("prev", "-1", "+1", "8134", wikiFuzz::makeFuzz(2)) ),
+                "feed"      => wikiFuzz::makeFuzz(2)
+                );
+    }
+}
+
+
+/**
+ ** a page test for the Special:Contributions".
+ */
+class contributionsTest extends pageTest {
+    function __construct() {
+        $this->pagePath = "index.php?title=Special:Contributions/" . USER_ON_WIKI;
+
+        $this->params = array (
+                'target'    => wikiFuzz::chooseInput( array(wikiFuzz::makeFuzz(2), "newbies", USER_ON_WIKI) ),
+                'namespace' => wikiFuzz::chooseInput( array(-1, 15, 1, wikiFuzz::makeFuzz(2)) ),
+                'offset'    => wikiFuzz::chooseInput( array("0", "-1", "------'-------0", "+1", "982342131232131231241", wikiFuzz::makeFuzz(2)) ),
+                'bot'       => wikiFuzz::chooseInput( array("", "-1", "0", "1", wikiFuzz::makeFuzz(2)) ),         
+                'go'        => wikiFuzz::chooseInput( array("-1", 'prev', 'next', wikiFuzz::makeFuzz(2)) )
+                );
+    }
+}
+
+
+/**
+ ** a page test for viewing a normal page, whilst posting various params.
+ */
+class viewPageTest extends pageTest {
+    function __construct() {
+        $this->pagePath = "index.php?title=Main_Page";
+
+        $this->params = array (
+                "useskin"        => wikiFuzz::chooseInput( array("chick", "cologneblue", "myskin", 
+                                        "nostalgia", "simple", "standard", wikiFuzz::makeFuzz(2)) ),
+                "uselang"        => wikiFuzz::chooseInput( array( wikiFuzz::makeFuzz(2),
+                        "ab", "af", "an", "ar", "arc", "as", "ast", "av", "ay", "az", "ba",
+                        "bat-smg", "be", "bg", "bm", "bn", "bo", "bpy", "br", "bs", "ca",
+                        "ce", "cs", "csb", "cv", "cy", "da", "de", "dv", "dz", "el", "en",
+                        "eo", "es", "et", "eu", "fa", "fi", "fo", "fr", "fur", "fy", "ga",
+                        "gn", "gsw", "gu", "he", "hi", "hr", "hu", "ia", "id", "ii", "is", 
+                        "it", "ja", "jv", "ka", "km", "kn", "ko", "ks", "ku", "kv", "la", 
+                        "li", "lo", "lt", "lv", "mk", "ml", "ms", "nah", "nap", "nds", 
+                        "nds-nl", "nl", "nn", "no", "non", "nv", "oc", "or", "os", "pa", 
+                        "pl", "pms", "ps", "pt", "pt-br", "qu", "rmy", "ro", "ru", "sc", 
+                        "sd", "sk", "sl", "sq", "sr", "sr-ec", "sr-el", "sr-jc", "sr-jl", 
+                        "su", "sv", "ta", "te", "th", "tlh", "tr", "tt", "ty", "tyv", "udm", 
+                        "ug", "uk", "ur", "utf8", "vec", "vi", "wa", "xal", "yi", "za", 
+                        "zh", "zh-cn", "zh-hk", "zh-sg", "zh-tw", "zh-tw") ),
+                "returnto"       => wikiFuzz::makeFuzz(2),
+                "feed"           => wikiFuzz::chooseInput( array("atom", "rss", wikiFuzz::makeFuzz(2)) ),
+                "rcid"           => wikiFuzz::makeFuzz(2),
+                "action"         => wikiFuzz::chooseInput( array("view", "raw", "render", wikiFuzz::makeFuzz(2), "markpatrolled") ),
+                "printable"      => wikiFuzz::makeFuzz(2),
+                "oldid"          => wikiFuzz::makeFuzz(2),
+                "redirect"       => wikiFuzz::makeFuzz(2),
+                "diff"           => wikiFuzz::makeFuzz(2),
+                "search"         => wikiFuzz::makeFuzz(2),
+                "rdfrom"         => wikiFuzz::makeFuzz(2),  // things from Article.php from here on:
+                "token"          => wikiFuzz::makeFuzz(2),
+                "tbid"           => wikiFuzz::makeFuzz(2),
+                "action"         => wikiFuzz::chooseInput( array("purge", wikiFuzz::makeFuzz(2)) ),
+                "wpReason"       => wikiFuzz::makeFuzz(2),
+                "wpEditToken"    => wikiFuzz::makeFuzz(2),
+                "from"           => wikiFuzz::makeFuzz(2),
+                "bot"            => wikiFuzz::makeFuzz(2),
+                "summary"        => wikiFuzz::makeFuzz(2),
+                "direction"      => wikiFuzz::chooseInput( array("next", "prev", wikiFuzz::makeFuzz(2)) ),
+                "section"        => wikiFuzz::makeFuzz(2),
+                "preload"        => wikiFuzz::makeFuzz(2),
+
+                );
+
+        // Tidy does not know how to valid atom or rss, so exclude from testing for the time being.
+        if ($this->params["feed"] == "atom")     { unset($this->params["feed"]); }
+        else if ($this->params["feed"] == "rss") { unset($this->params["feed"]); }
+
+        // Raw pages cannot really be validated
+        if ($this->params["action"] == "raw") unset($this->params["action"]);
+
+        // sometimes we don't want to specify certain parameters.
+        if (wikiFuzz::randnum(6) == 0) unset($this->params["rcid"]);
+        if (wikiFuzz::randnum(6) == 0) unset($this->params["diff"]);
+        if (wikiFuzz::randnum(6) == 0) unset($this->params["rdfrom"]);
+        if (wikiFuzz::randnum(3) == 0) unset($this->params["oldid"]);
+
+        // usually don't want action == purge.
+        if (wikiFuzz::randnum(6) > 1) unset($this->params["action"]);
+    }
+}
+
+
+/**
+ ** a page test for "Special:Allmessages".
+ */
+class specialAllmessagesTest extends pageTest {
+    function __construct() {
+        $this->pagePath = "index.php?title=Special:Allmessages";
+
+        // only really has one parameter
+        $this->params = array (
+                "ot"     => wikiFuzz::chooseInput( array("php", "html", wikiFuzz::makeFuzz(2)) )
+                );
+    }
+}
+
+/**
+ ** a page test for "Special:Newpages".
+ */
+class specialNewpages extends pageTest {
+    function __construct() {
+        $this->pagePath = "index.php?title=Special:Newpages";
+
+        $this->params = array (
+                "namespace" => wikiFuzz::chooseInput( range(-1, 15) ),
+                "feed"      => wikiFuzz::chooseInput( array("atom", "rss", wikiFuzz::makeFuzz(2)) ),
+                'limit'     => wikiFuzz::chooseInput( array("-1", "0", "-------'------0", "+1", "8134",  wikiFuzz::makeFuzz(2)) ),
+                'offset'    => wikiFuzz::chooseInput( array("-1", "0", "------'-------0", "+1", "9823412312312412435", wikiFuzz::makeFuzz(2)) )
+                );
+
+        // Tidy does not know how to valid atom or rss, so exclude from testing for the time being.
+        if ($this->params["feed"] == "atom")     { unset($this->params["feed"]); }
+        else if ($this->params["feed"] == "rss") { unset($this->params["feed"]); }
+    }
+}
+
+/**
+ ** a page test for "redirect.php"
+ */
+class redirectTest extends pageTest {
+    function __construct() {
+        $this->pagePath = "redirect.php";
+
+        $this->params = array (
+                "wpDropdown" => wikiFuzz::makeFuzz(2)
+                );
+
+        // sometimes we don't want to specify certain parameters.
+        if (wikiFuzz::randnum(6) == 0) unset($this->params["wpDropdown"]);
+    }
+}
+
+
+/**
+ ** a page test for "Special:Confirmemail"
+ */
+class confirmEmail extends pageTest {
+    function __construct() {
+        // sometimes we send a bogus confirmation code, and sometimes we don't.
+        $this->pagePath = "index.php?title=Special:Confirmemail" . wikiFuzz::chooseInput( array("", "/" . wikiFuzz::makeTitleSafe(wikiFuzz::makeFuzz(1)) ) );
+
+        $this->params = array (
+                "token" => wikiFuzz::makeFuzz(2)
+                );
+    }
+}
+
+
+/**
+ ** a page test for "Special:Watchlist"
+ **        Note: this test would be better if we were logged in.
+ */
+class watchlistTest extends pageTest {
+    function __construct() {
+        $this->pagePath = "index.php?title=Special:Watchlist";
+
+        $this->params = array (
+                "remove"   => wikiFuzz::chooseInput( array("Remove checked items from watchlist", wikiFuzz::makeFuzz(2))),
+                'days'     => wikiFuzz::chooseInput( array(0, -1, -230, "--", 3, 9, wikiFuzz::makeFuzz(2)) ),
+                'hideOwn'  => wikiFuzz::chooseInput( array("", "0", "1", wikiFuzz::makeFuzz(2)) ),
+                'hideBots' => wikiFuzz::chooseInput( array("", "0", "1", wikiFuzz::makeFuzz(2)) ),
+                'namespace'=> wikiFuzz::chooseInput( array("", "0", "1", wikiFuzz::makeFuzz(2)) ),
+                'action'   => wikiFuzz::chooseInput( array("submit", "clear", wikiFuzz::makeFuzz(2)) ),
+                'id[]'     => wikiFuzz::makeFuzz(2),
+                'edit'     => wikiFuzz::makeFuzz(2),
+                'token'    => wikiFuzz::chooseInput( array("", "1243213", wikiFuzz::makeFuzz(2)) )
+                );
+
+        // sometimes we specifiy "reset", and sometimes we don't.
+        if (wikiFuzz::randnum(3) == 0) $this->params["reset"] = wikiFuzz::chooseInput( array("", "0", "1", wikiFuzz::makeFuzz(2)) );
+    }
+}
+
+
+/**
+ ** a page test for "Special:Blockme"
+ */
+class specialBlockmeTest extends pageTest {
+    function __construct() {
+        $this->pagePath = "index.php?title=Special:Blockme";
+
+        $this->params = array ( );
+
+        // sometimes we specify "ip", and sometimes we don't.
+        if (wikiFuzz::randnum(1) == 0) {
+            $this->params["ip"] = wikiFuzz::chooseInput( array("10.12.41.213", wikiFuzz::randnum(-10,8134), wikiFuzz::makeFuzz(2)) );
+        }
+    }
+}
+
+
+/**
+ ** a page test for "Special:Movepage"
+ */
+class specialMovePage extends pageTest {
+    function __construct() {
+        $this->pagePath = "index.php?title=Special:Movepage";
+
+        $this->params = array (
+                "action"      => wikiFuzz::chooseInput( array("success", "submit", "", wikiFuzz::makeFuzz(2)) ),
+                'wpEditToken' => wikiFuzz::chooseInput( array('', 0, 34987987, wikiFuzz::makeFuzz(2)) ),
+                'target'      => wikiFuzz::chooseInput( array("x", wikiFuzz::makeTitleSafe(wikiFuzz::makeFuzz(2)) ) ),
+                'wpOldTitle'  => wikiFuzz::chooseInput( array("z", wikiFuzz::makeTitleSafe(wikiFuzz::makeFuzz(2)), wikiFuzz::makeFuzz(2) ) ),
+                'wpNewTitle'  => wikiFuzz::chooseInput( array("y", wikiFuzz::makeTitleSafe(wikiFuzz::makeFuzz(2)), wikiFuzz::makeFuzz(2) ) ),
+                'wpReason'    => wikiFuzz::chooseInput( array(wikiFuzz::makeFuzz(2)) ),
+                'wpMovetalk'  => wikiFuzz::chooseInput( array("0", "1", "++--34234", wikiFuzz::makeFuzz(2)) ),
+                'wpDeleteAndMove'  => wikiFuzz::chooseInput( array("0", "1", "++--34234", wikiFuzz::makeFuzz(2)) ),
+                'wpConfirm'   => wikiFuzz::chooseInput( array("0", "1", "++--34234", wikiFuzz::makeFuzz(2)) ),
+                'talkmoved'   => wikiFuzz::chooseInput( array("1", wikiFuzz::makeFuzz(2), "articleexists", 'notalkpage') ),
+                'oldtitle'    => wikiFuzz::makeFuzz(2),
+                'newtitle'    => wikiFuzz::makeFuzz(2),
+                'wpMovetalk'  => wikiFuzz::chooseInput( array("1", "0", wikiFuzz::makeFuzz(2)) )
+                );
+
+        // sometimes we don't want to specify certain parameters.
+        if (wikiFuzz::randnum(2) == 0) unset($this->params["wpEditToken"]);
+        if (wikiFuzz::randnum(3) == 0) unset($this->params["target"]);
+        if (wikiFuzz::randnum(3) == 0) unset($this->params["wpNewTitle"]);
+        if (wikiFuzz::randnum(4) == 0) unset($this->params["wpReason"]);
+        if (wikiFuzz::randnum(4) == 0) unset($this->params["wpOldTitle"]);
+    }
+}
+
+
+/**
+ ** a page test for "Special:Undelete"
+ */
+class specialUndelete extends pageTest {
+    function __construct() {
+        $this->pagePath = "index.php?title=Special:Undelete";
+
+        $this->params = array (
+                "action"      => wikiFuzz::chooseInput( array("submit", "", wikiFuzz::makeFuzz(2)) ),
+                'wpEditToken' => wikiFuzz::chooseInput( array('', 0, 34987987, wikiFuzz::makeFuzz(2)) ),
+                'target'      => wikiFuzz::chooseInput( array("x", wikiFuzz::makeTitleSafe(wikiFuzz::makeFuzz(2)) ) ),
+                'timestamp'   => wikiFuzz::chooseInput( array("125223", wikiFuzz::makeFuzz(2) ) ),
+                'file'        => wikiFuzz::chooseInput( array("0", "1", "++--34234", wikiFuzz::makeFuzz(2)) ),
+                'restore'     => wikiFuzz::chooseInput( array("0", "1", wikiFuzz::makeFuzz(2)) ),
+                'preview'     => wikiFuzz::chooseInput( array("0", "1", wikiFuzz::makeFuzz(2)) ),
+                'wpComment'   => wikiFuzz::makeFuzz(2)
+                );
+
+        // sometimes we don't want to specify certain parameters.
+        if (wikiFuzz::randnum(2) == 0) unset($this->params["wpEditToken"]);
+        if (wikiFuzz::randnum(4) == 0) unset($this->params["target"]);
+        if (wikiFuzz::randnum(1) == 0) unset($this->params["restore"]);
+        if (wikiFuzz::randnum(1) == 0) unset($this->params["preview"]);
+    }
+}
+
+
+/**
+ ** a page test for "Special:Unlockdb"
+ */
+class specialUnlockdb extends pageTest {
+    function __construct() {
+        $this->pagePath = "index.php?title=Special:Unlockdb";
+
+        $this->params = array (
+                "action"        => wikiFuzz::chooseInput( array("submit", "success", "", wikiFuzz::makeFuzz(2)) ),
+                'wpEditToken'   => wikiFuzz::chooseInput( array("20398702394", "", wikiFuzz::makeFuzz(2)) ),
+                'wpLockConfirm' => wikiFuzz::chooseInput( array("0", "1", wikiFuzz::makeFuzz(2)) )
+                );
+
+        // sometimes we don't want to specify certain parameters.
+        if (wikiFuzz::randnum(4) == 0) unset($this->params["wpEditToken"]);
+        if (wikiFuzz::randnum(4) == 0) unset($this->params["action"]);
+        if (wikiFuzz::randnum(4) == 0) unset($this->params["wpLockConfirm"]);
+    }
+}
+
+
+/**
+ ** a page test for "Special:Lockdb"
+ */
+class specialLockdb extends pageTest {
+    function __construct() {
+        $this->pagePath = "index.php?title=Special:Lockdb";
+
+        $this->params = array (
+                "action"       => wikiFuzz::chooseInput( array("submit", "success", "", wikiFuzz::makeFuzz(2)) ),
+                'wpEditToken'  => wikiFuzz::chooseInput( array("20398702394", "", wikiFuzz::makeFuzz(2)) ),
+                'wpLockReason' => wikiFuzz::makeFuzz(2),
+                'wpLockConfirm'=> wikiFuzz::chooseInput( array("0", "1", "++--34234", wikiFuzz::makeFuzz(2)) )
+                );
+
+        // sometimes we don't want to specify certain parameters.
+        if (wikiFuzz::randnum(4) == 0) unset($this->params["wpEditToken"]);
+        if (wikiFuzz::randnum(4) == 0) unset($this->params["action"]);
+        if (wikiFuzz::randnum(4) == 0) unset($this->params["wpLockConfirm"]);
+    }
+}
+
+
+/**
+ ** a page test for "Special:Userrights"
+ */
+class specialUserrights extends pageTest {
+    function __construct() {
+        $this->pagePath = "index.php?title=Special:Userrights";
+
+        $this->params = array (
+                'wpEditToken'   => wikiFuzz::chooseInput( array("20398702394", "", wikiFuzz::makeFuzz(2)) ),
+                'user-editname' => wikiFuzz::chooseInput( array("Nickj2", "Nickj2\n<xyz>", wikiFuzz::makeFuzz(2)) ),
+                'ssearchuser'   => wikiFuzz::chooseInput( array("0", "1", "++--34234", wikiFuzz::makeFuzz(2)) ),
+                'saveusergroups'=> wikiFuzz::chooseInput( array("0", "1", "++--34234", wikiFuzz::makeFuzz(2)), "Save User Groups"),
+                'member[]'      => wikiFuzz::chooseInput( array("0", "bot", "1", "++--34234", wikiFuzz::makeFuzz(2)) ),
+                "available[]"   => wikiFuzz::chooseInput( array("0", "sysop", "bureaucrat", "1", "++--34234", wikiFuzz::makeFuzz(2)) )
+                );
+
+        // sometimes we don't want to specify certain parameters.
+        if (wikiFuzz::randnum(3) == 0) unset($this->params['ssearchuser']);
+        if (wikiFuzz::randnum(3) == 0) unset($this->params['saveusergroups']);
+    }
+}
+
+
+/**
+ ** a test for page protection and unprotection.
+ */
+class pageProtectionForm extends pageTest {
+    function __construct() {
+        $this->pagePath = "index.php?title=Main_Page";
+
+        $this->params = array (
+                "action"               => "protect",
+                'wpEditToken'          => wikiFuzz::chooseInput( array("20398702394", "", wikiFuzz::makeFuzz(2)) ),
+                "mwProtect-level-edit" => wikiFuzz::chooseInput( array('', 'autoconfirmed', 'sysop', wikifuzz::makeFuzz(2)) ),
+                "mwProtect-level-move" => wikiFuzz::chooseInput( array('', 'autoconfirmed', 'sysop', wikifuzz::makeFuzz(2)) ),
+                "mwProtectUnchained"   => wikiFuzz::chooseInput( array("0", "1", "++--34234", wikiFuzz::makeFuzz(2)) ),
+                'mwProtect-reason'     => wikiFuzz::chooseInput( array("because it was there", wikifuzz::makeFuzz(2)) )
+                );
+
+
+        // sometimes we don't want to specify certain parameters.
+        if (wikiFuzz::randnum(3) == 0) unset($this->params["mwProtectUnchained"]);
+        if (wikiFuzz::randnum(3) == 0) unset($this->params['mwProtect-reason']);
+    }
+}
+
+
+/**
+ ** a page test for "Special:Blockip".
+ */
+class specialBlockip extends pageTest {
+    function __construct() {
+        $this->pagePath = "index.php?title=Special:Blockip";
+
+        $this->params = array (
+                "action"          => wikiFuzz::chooseInput( array("submit", "",  wikiFuzz::makeFuzz(2)) ),
+                'wpEditToken'     => wikiFuzz::chooseInput( array("20398702394", "", wikiFuzz::makeFuzz(2)) ),
+                "wpBlockAddress"  => wikiFuzz::chooseInput( array("20398702394", "", "Nickj2", wikiFuzz::makeFuzz(2),
+                                      // something like an IP address, sometimes invalid:
+                                     ( wikiFuzz::randnum(300,-20) . "." . wikiFuzz::randnum(300,-20) . "." 
+                                      . wikiFuzz::randnum(300,-20) . "." .wikiFuzz::randnum(300,-20) ) ) ),
+                "ip"              => wikiFuzz::chooseInput( array("20398702394", "", "Nickj2", wikiFuzz::makeFuzz(2),
+                                      // something like an IP address, sometimes invalid:
+                                     ( wikiFuzz::randnum(300,-20) . "." . wikiFuzz::randnum(300,-20) . "."
+                                      . wikiFuzz::randnum(300,-20) . "." .wikiFuzz::randnum(300,-20) ) ) ),
+                "wpBlockOther"    => wikiFuzz::chooseInput( array('', 'Nickj2', wikifuzz::makeFuzz(2)) ),
+                "wpBlockExpiry"   => wikiFuzz::chooseInput( array("other", "2 hours", "1 day", "3 days", "1 week", "2 weeks",
+                                          "1 month", "3 months", "6 months", "1 year", "infinite", wikiFuzz::makeFuzz(2)) ),
+                "wpBlockReason"   => wikiFuzz::chooseInput( array("because it was there", wikifuzz::makeFuzz(2)) ),
+                "wpAnonOnly"      => wikiFuzz::chooseInput( array("0", "1", "++--34234", wikiFuzz::makeFuzz(2)) ),
+                "wpCreateAccount" => wikiFuzz::chooseInput( array("0", "1", "++--34234", wikiFuzz::makeFuzz(2)) ),
+                "wpBlock"         => wikiFuzz::chooseInput( array("0", "1", "++--34234", wikiFuzz::makeFuzz(2)) )
+                );
+
+        // sometimes we don't want to specify certain parameters.
+        if (wikiFuzz::randnum(4) == 0) unset($this->params["wpBlockOther"]);
+        if (wikiFuzz::randnum(4) == 0) unset($this->params["wpBlockExpiry"]);
+        if (wikiFuzz::randnum(4) == 0) unset($this->params["wpBlockReason"]);
+        if (wikiFuzz::randnum(4) == 0) unset($this->params["wpAnonOnly"]);
+        if (wikiFuzz::randnum(4) == 0) unset($this->params["wpCreateAccount"]);
+        if (wikiFuzz::randnum(4) == 0) unset($this->params["wpBlockAddress"]);
+        if (wikiFuzz::randnum(4) == 0) unset($this->params["ip"]);
+    }
+}
+
+
+/**
+ ** a test for the imagepage.
+ */
+class imagepageTest extends pageTest {
+    function __construct() {
+        $this->pagePath = "index.php?title=Image:Small-email.png";
+
+        $this->params = array (
+                "image"         => wikiFuzz::chooseInput( array("Small-email.png", wikifuzz::makeFuzz(2)) ),
+                "wpReason"      => wikifuzz::makeFuzz(2),
+                "oldimage"      => wikiFuzz::chooseInput( array("Small-email.png", wikifuzz::makeFuzz(2)) ),
+                "wpEditToken"   => wikiFuzz::chooseInput( array("20398702394", "", wikiFuzz::makeFuzz(2)) ),
+                );
+
+        // sometimes we don't want to specify certain parameters.
+        if (wikiFuzz::randnum(6) == 0) unset($this->params["image"]);
+        if (wikiFuzz::randnum(6) == 0) unset($this->params["wpReason"]);
+        if (wikiFuzz::randnum(6) == 0) unset($this->params["oldimage"]);
+        if (wikiFuzz::randnum(6) == 0) unset($this->params["wpEditToken"]);
+    }
+}
+
+
+/**
+ ** a test for page deletion form.
+ */
+class pageDeletion extends pageTest {
+    function __construct() {
+        $this->pagePath = "index.php?title=Main_Page&action=delete";
+
+        $this->params = array (
+                "wpEditToken" => wikiFuzz::chooseInput( array("20398702394", "", wikiFuzz::makeFuzz(2)) ),
+                "wpReason"    => wikiFuzz::chooseInput( array("0", "1", "++--34234", wikiFuzz::makeFuzz(2)) ),
+                "wpConfirm"   => wikiFuzz::chooseInput( array("0", "1", "++--34234", wikiFuzz::makeFuzz(2)) ),
+                );
+
+        // sometimes we don't want to specify certain parameters.
+        if (wikiFuzz::randnum(5) == 0) unset($this->params["wpReason"]);
+        if (wikiFuzz::randnum(5) == 0) unset($this->params["wpEditToken"]);
+        if (wikiFuzz::randnum(5) == 0) unset($this->params["wpConfirm"]);
+    }
+}
+
+
+
+/**
+ ** a test for Revision Deletion.
+ */
+class specialRevisionDelete extends pageTest {
+    function __construct() {
+        $this->pagePath = "index.php?title=Special:Revisiondelete";
+
+        $this->params = array (
+                "target"               => wikiFuzz::chooseInput( array("Main Page", wikifuzz::makeFuzz(2)) ),
+                "oldid"                => wikifuzz::makeFuzz(2),
+                "oldid[]"              => wikifuzz::makeFuzz(2),
+                "wpReason"             => wikiFuzz::chooseInput( array("0", "1", "++--34234", wikiFuzz::makeFuzz(2)) ),
+                "revdelete-hide-text"  => wikiFuzz::chooseInput( array("0", "1", "++--34234", wikiFuzz::makeFuzz(2)) ),
+                "revdelete-hide-comment" => wikiFuzz::chooseInput( array("0", "1", "++--34234", wikiFuzz::makeFuzz(2)) ),
+                "revdelete-hide-user"  => wikiFuzz::chooseInput( array("0", "1", "++--34234", wikiFuzz::makeFuzz(2)) ),
+                "revdelete-hide-restricted" => wikiFuzz::chooseInput( array("0", "1", "++--34234", wikiFuzz::makeFuzz(2)) ),
+                );
+
+        // sometimes we don't want to specify certain parameters.
+        if (wikiFuzz::randnum(3) == 0) unset($this->params["target"]);
+        if (wikiFuzz::randnum(6) == 0) unset($this->params["oldid"]);
+        if (wikiFuzz::randnum(6) == 0) unset($this->params["oldid[]"]);
+        if (wikiFuzz::randnum(6) == 0) unset($this->params["wpReason"]);
+        if (wikiFuzz::randnum(6) == 0) unset($this->params["revdelete-hide-text"]);
+        if (wikiFuzz::randnum(6) == 0) unset($this->params["revdelete-hide-comment"]);
+        if (wikiFuzz::randnum(6) == 0) unset($this->params["revdelete-hide-user"]);
+        if (wikiFuzz::randnum(6) == 0) unset($this->params["revdelete-hide-restricted"]);
+    }
+}
+
+
+/**
+ ** a test for Special:Import.
+ */
+class specialImport extends pageTest {
+    function __construct() {
+        $this->pagePath = "index.php?title=Special:Import";
+
+        $this->params = array (
+                "action"         => "submit",
+                "source"         => wikiFuzz::chooseInput( array("upload", "interwiki", wikifuzz::makeFuzz(2)) ),
+                "MAX_FILE_SIZE"  => wikiFuzz::chooseInput( array("0", "1", "++--34234", wikifuzz::makeFuzz(2)) ),
+                "xmlimport"      => wikiFuzz::chooseInput( array("/var/www/hosts/mediawiki/wiki/AdminSettings.php", "1", "++--34234", wikiFuzz::makeFuzz(2)) ),
+                "namespace"      => wikiFuzz::chooseInput( array(wikiFuzz::randnum(30,-6), wikiFuzz::makeFuzz(2)) ),
+                "interwiki"      => wikiFuzz::makeFuzz(2),
+                "interwikiHistory" => wikiFuzz::makeFuzz(2),
+                "frompage"       => wikiFuzz::makeFuzz(2),
+                );
+
+        // sometimes we don't want to specify certain parameters.
+        if (wikiFuzz::randnum(6) == 0) unset($this->params["action"]);
+        if (wikiFuzz::randnum(6) == 0) unset($this->params["source"]);
+        if (wikiFuzz::randnum(6) == 0) unset($this->params["MAX_FILE_SIZE"]);
+        if (wikiFuzz::randnum(6) == 0) unset($this->params["xmlimport"]);
+        if (wikiFuzz::randnum(6) == 0) unset($this->params["interwiki"]);
+        if (wikiFuzz::randnum(6) == 0) unset($this->params["interwikiHistory"]);
+        if (wikiFuzz::randnum(6) == 0) unset($this->params["frompage"]);
+
+        // Note: Need to do a file upload to fully test this Special page.
+    }
+}
+
+
+/**
+ ** a test for thumb.php
+ */
+class thumbTest extends pageTest {
+    function __construct() {
+        $this->pagePath = "thumb.php";
+
+        $this->params = array (
+                "f"  => wikiFuzz::chooseInput( array("..", "\\", "small-email.png", wikifuzz::makeFuzz(2)) ),
+                "w"  => wikiFuzz::chooseInput( array("80", wikiFuzz::randnum(6000,-200), wikifuzz::makeFuzz(2)) ),
+                "r"  => wikiFuzz::chooseInput( array("0", wikifuzz::makeFuzz(2)) ),
+                );
+
+        // sometimes we don't want to specify certain parameters.
+        if (wikiFuzz::randnum(6) == 0) unset($this->params["f"]);
+        if (wikiFuzz::randnum(6) == 0) unset($this->params["w"]);
+        if (wikiFuzz::randnum(6) == 0) unset($this->params["r"]);
+    }
+}
+
+
+/**
+ ** a test for trackback.php
+ */
+class trackbackTest extends pageTest {
+    function __construct() {
+        $this->pagePath = "trackback.php";
+
+        $this->params = array (
+                "url"       => wikifuzz::makeFuzz(2),
+                "blog_name" => wikiFuzz::chooseInput( array("80", wikiFuzz::randnum(6000,-200), wikifuzz::makeFuzz(2)) ),
+                "article"   => wikiFuzz::chooseInput( array("Main Page", wikifuzz::makeFuzz(2)) ),
+                "title"     => wikiFuzz::chooseInput( array("Main Page", wikifuzz::makeFuzz(2)) ),
+                "excerpt"   => wikifuzz::makeFuzz(2),
+                );
+
+        // sometimes we don't want to specify certain parameters.
+        if (wikiFuzz::randnum(3) == 0) unset($this->params["title"]);
+        if (wikiFuzz::randnum(3) == 0) unset($this->params["excerpt"]);
+        
+        // page does not produce HTML.
+        $this->tidyValidate = false; 
+    }
+}
+
+
+/**
+ ** a test for profileinfo.php
+ */
+class profileInfo extends pageTest {
+    function __construct() {
+        $this->pagePath = "profileinfo.php";
+
+        $this->params = array (
+                "expand"  => wikifuzz::makeFuzz(2),
+                "sort"    => wikiFuzz::chooseInput( array("time", "count", "name", wikifuzz::makeFuzz(2)) ),
+                "filter"  => wikiFuzz::chooseInput( array("Main Page", wikifuzz::makeFuzz(2)) ),
+                );
+
+        // sometimes we don't want to specify certain parameters.
+        if (wikiFuzz::randnum(3) == 0) unset($this->params["sort"]);
+        if (wikiFuzz::randnum(3) == 0) unset($this->params["filter"]);
+    }
+}
+
+
+/**
+ ** a test for Special:Cite (extension Special page).
+ */
+class specialCite extends pageTest {
+    function __construct() {
+        $this->pagePath = "index.php?title=Special:Cite";
+
+        $this->params = array (
+                "page"    => wikiFuzz::chooseInput( array("\" onmouseover=\"alert(1);\"", "Main Page", wikifuzz::makeFuzz(2)) ),
+                "id"      => wikiFuzz::chooseInput( array("-1", "0", "------'-------0", "+1", "-9823412312312412435", wikiFuzz::makeFuzz(2)) ),
+                );
+
+        // sometimes we don't want to specify certain parameters.
+        if (wikiFuzz::randnum(6) == 0) unset($this->params["page"]);
+        if (wikiFuzz::randnum(6) == 0) unset($this->params["id"]);
+    }
+}
+
+
+/**
+ ** a test for Special:Filepath (extension Special page).
+ */
+class specialFilepath extends pageTest {
+    function __construct() {
+        $this->pagePath = "index.php?title=Special:Filepath";
+
+        $this->params = array (
+                "file"    => wikiFuzz::chooseInput( array("Small-email.png", "Small-email.png" . wikifuzz::makeFuzz(1), wikiFuzz::makeFuzz(2)) ),
+                );
+    }
+}
+
+
+/**
+ ** a test for Special:Makebot (extension Special page).
+ */
+class specialMakebot extends pageTest {
+    function __construct() {
+        $this->pagePath = "index.php?title=Special:Makebot";
+
+        $this->params = array (
+                "username" => wikiFuzz::chooseInput( array("Nickj2", "192.168.0.2", wikifuzz::makeFuzz(1) ) ),
+                "dosearch" => wikiFuzz::chooseInput( array("0", "1", "++--34234", wikifuzz::makeFuzz(2)) ),
+                "grant"    => wikiFuzz::chooseInput( array("0", "1", "++--34234", wikifuzz::makeFuzz(2)) ),
+                "comment"  => wikiFuzz::chooseInput( array("20398702394", "", wikiFuzz::makeFuzz(2)) ), 
+                "token"    => wikiFuzz::chooseInput( array("20398702394", "", wikiFuzz::makeFuzz(2)) ),
+                );
+
+        // sometimes we don't want to specify certain parameters.
+        if (wikiFuzz::randnum(2) == 0) unset($this->params["dosearch"]);
+        if (wikiFuzz::randnum(2) == 0) unset($this->params["grant"]);
+        if (wikiFuzz::randnum(5) == 0) unset($this->params["token"]);
+    }
+}
+
+
+/**
+ ** a test for Special:Makesysop (extension Special page).
+ */
+class specialMakesysop extends pageTest {
+    function __construct() {
+        $this->pagePath = "index.php?title=Special:Makesysop";
+
+        $this->params = array (
+                "wpMakesysopUser"   => wikiFuzz::chooseInput( array("Nickj2", "192.168.0.2", wikifuzz::makeFuzz(1) ) ),
+                "action"            => wikiFuzz::chooseInput( array("0", "1", "++--34234", wikifuzz::makeFuzz(2)) ),
+                "wpMakesysopSubmit" => wikiFuzz::chooseInput( array("0", "1", "++--34234", wikifuzz::makeFuzz(2)) ),
+                "wpEditToken"       => wikiFuzz::chooseInput( array("20398702394", "", wikiFuzz::makeFuzz(2)) ),
+                "wpSetBureaucrat"   => wikiFuzz::chooseInput( array("20398702394", "", wikiFuzz::makeFuzz(2)) ),
+                );
+
+        // sometimes we don't want to specify certain parameters.
+        if (wikiFuzz::randnum(3) == 0) unset($this->params["wpMakesysopSubmit"]);
+        if (wikiFuzz::randnum(3) == 0) unset($this->params["wpEditToken"]);
+        if (wikiFuzz::randnum(3) == 0) unset($this->params["wpSetBureaucrat"]);
+    }
+}
+
+
+/**
+ ** a test for Special:Renameuser (extension Special page).
+ */
+class specialRenameuser extends pageTest {
+    function __construct() {
+        $this->pagePath = "index.php?title=Special:Renameuser";
+
+        $this->params = array (
+                "oldusername"   => wikiFuzz::chooseInput( array("Nickj2", "192.168.0.2", wikifuzz::makeFuzz(1) ) ),
+                "newusername"   => wikiFuzz::chooseInput( array("Nickj2", "192.168.0.2", wikifuzz::makeFuzz(1) ) ),
+                "token"         => wikiFuzz::chooseInput( array("20398702394", "", wikiFuzz::makeFuzz(2)) ),
+                );
+    }
+}
+
+
+/**
+ ** a test for Special:Linksearch (extension Special page).
+ */
+class specialLinksearch extends pageTest {
+    function __construct() {
+        $this->pagePath = "index.php?title=Special%3ALinksearch";
+
+        $this->params = array (
+                "target" => wikifuzz::makeFuzz(2),
+                );
+
+        // sometimes we don't want to specify certain parameters.
+        if (wikiFuzz::randnum(10) == 0) unset($this->params["target"]);
+    }
+}
+
+
+/**
+ ** a test for Special:CategoryTree (extension Special page).
+ */
+class specialCategoryTree extends pageTest {
+    function __construct() {
+        $this->pagePath = "index.php?title=Special:CategoryTree";
+
+        $this->params = array (
+                "target" => wikifuzz::makeFuzz(2),
+                "from"   => wikifuzz::makeFuzz(2),
+                "until"  => wikifuzz::makeFuzz(2),
+                "showas" => wikifuzz::makeFuzz(2),
+                "mode"   => wikiFuzz::chooseInput( array("pages", "categories", "all", wikifuzz::makeFuzz(2)) ),
+                );
+
+        // sometimes we do want to specify certain parameters.
+        if (wikiFuzz::randnum(5) == 0) $this->params["notree"] = wikiFuzz::chooseInput( array("1", 0, "", wikiFuzz::makeFuzz(2)) );
+    }
+}
+
+
+/**
+ ** a test for "Special:Chemicalsources" (extension Special page).
+ */
+class specialChemicalsourcesTest extends pageTest {
+    function __construct() {
+    	$this->pagePath = "index.php?title=Special:Chemicalsources";
+
+    	// choose an input format to use.
+    	$format =  wikiFuzz::chooseInput(
+			    	array(  'go',
+			    	        'CAS',
+			    	        'EINECS',
+			    	        'CHEBI',
+			    	        'PubChem',
+			    	        'SMILES',
+			    	        'InChI',
+			    	        'ATCCode',
+			    	        'KEGG',
+			    	        'RTECS',
+			    	        'ECNumber',
+			    	        'DrugBank',
+			    	        'Formula',
+			    	        'Name'
+			    	     )
+			    	);
+
+        // values for different formats usually start with either letters or numbers.
+        switch ($format) {
+        	case 'Name'   : $value = "A"; break;
+        	case 'InChI'  :
+        	case 'SMILES' :
+        	case 'Formula': $value = "C"; break;
+        	default       : $value = "0"; break;
+        }
+
+        // and then we append the fuzz input.
+        $this->params = array ($format => $value . wikifuzz::makeFuzz(2) );
+    }
+}
+
+
+/**
+ ** A test for api.php (programmatic interface to MediaWiki in XML/JSON/RSS/etc formats).
+ ** Quite involved to test because there are lots of options/parameters, and because
+ ** for a lot of the functionality if all the parameters don't make sense then it just
+ ** returns the help screen - so currently a lot of the tests aren't actually doing much
+ ** because something wasn't right in the query.
+ **
+ ** @todo: Incomplete / unfinished; Runs too fast (suggests not much testing going on).
+ */
+class api extends pageTest {
+
+    // API login mode.
+    private static function loginMode() {
+        $arr =  array ( "lgname"        => wikifuzz::makeFuzz(2),
+                        "lgpassword"    => wikifuzz::makeFuzz(2), 
+                       );
+        // sometimes we want to specify the extra "lgdomain" parameter.
+        if (wikiFuzz::randnum(3) == 0) {
+        	$arr["lgdomain"] = wikiFuzz::chooseInput( array("1", 0, "", wikiFuzz::makeFuzz(2)) );
+        }
+
+        return $arr;
+    }
+
+    // API OpenSearch mode.
+    private static function opensearchMode() {
+    	return array ("search"        => wikifuzz::makeFuzz(2));
+    }
+
+    // API watchlist feed mode.
+    private static function feedwatchlistMode() {
+    	// FIXME: add "wikifuzz::makeFuzz(2)" as possible value below?
+    	return array ("feedformat"    => wikiFuzz::chooseInput( array("rss", "atom") ) );
+    }
+
+    // API query mode.
+    private static function queryMode() {
+    	// FIXME: add "wikifuzz::makeFuzz(2)" as possible params for the elements below?
+    	//        Suspect this will stuff up the tests more, but need to check.
+    	$params = array (
+	                 // FIXME: More titles.
+	                 "titles"        => wikiFuzz::chooseInput( array("Main Page")),
+	                 // FIXME: More pageids.	                 
+	                 "pageids"       => 1,
+	                 "prop"          => wikiFuzz::chooseInput( array("info", "revisions", "watchlist")),
+	                 "list"          => wikiFuzz::chooseInput( array("allpages", "logevents", "watchlist", "usercontribs", "recentchanges", "backlinks", "embeddedin", "imagelinks") ),
+	                 "meta"          => wikiFuzz::chooseInput( array("siteinfo")),
+	                 "generator"     => wikiFuzz::chooseInput( array("allpages", "logevents", "watchlist", "info", "revisions") ),
+	                 "siprop"        => wikiFuzz::chooseInput( array("general", "namespaces", "general|namespaces") ),
+                   );
+         
+         // Add extra parameters based on what list choice we got.
+         switch ($params["list"]) {
+         	case "usercontribs" : self::addListParams ($params, "uc", array("limit", "start", "end", "user", "dir") ); break;
+         	case "allpages"     : self::addListParams ($params, "ap", array("from", "prefix", "namespace", "filterredir", "limit") ); break;
+         	case "watchlist"    : self::addListParams ($params, "wl", array("allrev", "start", "end", "namespace", "dir", "limit", "prop") ); break;
+         	case "logevents"    : self::addListParams ($params, "le", array("limit", "type", "start", "end", "user", "dir") ); break;
+         	case "recentchanges": self::addListParams ($params, "rc", array("limit", "prop", "show", "namespace", "start", "end", "dir") ); break;
+         	case "backlinks"    : self::addListParams ($params, "bl", array("continue", "namespace", "redirect", "limit") ); break;
+         	case "embeddedin"   : self::addListParams ($params, "ei", array("continue", "namespace", "redirect", "limit") ); break;
+         	case "imagelinks"   : self::addListParams ($params, "il", array("continue", "namespace", "redirect", "limit") ); break;
+         }
+
+         if ($params["prop"] == "revisions") {
+         	self::addListParams ($params, "rv", array("prop", "limit", "startid", "endid", "end", "dir") );
+         }
+
+         // Sometimes we want redirects, sometimes we don't.
+         if (wikiFuzz::randnum(3) == 0) {
+         	$params["redirects"] = wikiFuzz::chooseInput( array("1", 0, "", wikiFuzz::makeFuzz(2)) );
+         }
+
+         return $params;
+    }
+
+    // Adds all the elements to the array, using the specified prefix.
+    private static function addListParams(&$array, $prefix, $elements)  {
+    	foreach ($elements as $element) {
+    		$array[$prefix . $element] = self::getParamDetails($element);
+    	}
+    }
+
+    // For a given element name, returns the data for that element.
+    private static function getParamDetails($element) {
+    	switch ($element) {
+    		case 'startid'    :
+    		case 'endid'      :
+    		case 'start'      :
+    		case 'end'        :
+    		case 'limit'      : return wikiFuzz::chooseInput( array("0", "-1", "---'----------0", "+1", "8134", "320742734234235", "20060230121212", wikiFuzz::randnum(9000, -100), wikiFuzz::makeFuzz(2)) );
+    		case 'dir'        : return wikiFuzz::chooseInput( array("newer", "older", wikifuzz::makeFuzz(2) ) );
+    		case 'user'       : return wikiFuzz::chooseInput( array(USER_ON_WIKI, wikifuzz::makeFuzz(2) ) );
+    		case 'namespace'  : return wikiFuzz::chooseInput( array(-2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 200000, wikifuzz::makeFuzz(2)) );
+    		case 'filterredir': return wikiFuzz::chooseInput( array("all", "redirects", "nonredirectsallpages", wikifuzz::makeFuzz(2)) );
+    		case 'allrev'     : return wikiFuzz::chooseInput( array("1", 0, "", wikiFuzz::makeFuzz(2)) );
+    		case 'prop'       : return wikiFuzz::chooseInput( array("user", "comment", "timestamp", "patrol", "flags", "user|user|comment|flags", wikifuzz::makeFuzz(2) ) );
+    		case 'type'       : return wikiFuzz::chooseInput( array("block", "protect", "rights", "delete", "upload", "move", "import", "renameuser", "newusers", "makebot", wikifuzz::makeFuzz(2) ) );
+    		case 'hide'       : return wikiFuzz::chooseInput( array("minor", "bots", "anons", "liu", "liu|bots|", wikifuzz::makeFuzz(2) ) );
+    		case 'show'       : return wikiFuzz::chooseInput( array('minor', '!minor', 'bot', '!bot', 'anon', '!anon', wikifuzz::makeFuzz(2) ) );
+    		default           : return wikifuzz::makeFuzz(2);
+    	}
+    }
+
+    // Entry point.
+    function __construct() {
+    	$this->pagePath = "api.php";
+
+        $modes = array ("help",
+                        "login",
+                        "opensearch",
+                        "feedwatchlist",
+                        "query");
+        $action = wikiFuzz::chooseInput( array_merge ($modes, array(wikifuzz::makeFuzz(2))) );
+        
+        switch ($action) {
+            case "login"         : $this->params = self::loginMode();
+                                   break;
+            case "opensearch"    : $this->params = self::opensearchMode();
+                                   break;
+            case "feedwatchlist" : $this->params = self::feedwatchlistMode();
+                                   break;
+            case "query"         : $this->params = self::queryMode();
+                                   break;
+            case "help"         : 
+            default             :  // Do something random - "Crazy Ivan" mode.
+                                   $random_mode = wikiFuzz::chooseInput( $modes ) . "Mode";
+                                   // There is no "helpMode".
+                                   if ($random_mode == "helpMode") $random_mode = "queryMode"; 
+                                   $this->params = self::$random_mode();
+                                   break;
+        }
+        
+        // Save the selected action.
+        $this->params["action"] = $action;
+
+        // Set the cookie:
+        // FIXME: need to get this cookie dynamically set, rather than hard-coded.
+        $this->cookie = "wikidbUserID=10001; wikidbUserName=Test; wikidb_session=178df0fe68c75834643af65dec9ec98a; wikidbToken=1adc6753d62c44aec950c024d7ae0540";
+
+        // Output format
+        $this->params["format"] = wikiFuzz::chooseInput( array("json", "jsonfm", "php", "phpfm",
+                                                               "wddx", "wddxfm", "xml", "xmlfm", 
+                                                               "yaml", "yamlfm", "raw", "rawfm",
+                                                               wikifuzz::makeFuzz(2) ) );
+
+        // Page does not produce HTML (sometimes).
+        $this->tidyValidate = false;
+    }
+}
+
+
+/**
+ ** a page test for the GeSHi extension.
+ */
+class GeSHi_Test extends pageTest {
+	
+	private function getGeSHiContent()	 {
+		return "<source lang=\"" . $this->getLang() . "\" "
+		       . (wikiFuzz::randnum(2) == 0 ? "line " : "")
+		       . (wikiFuzz::randnum(2) == 0 ? "strict " : "")
+			   . "start=" . wikiFuzz::chooseInput( array(wikiFuzz::randnum(-6000,6000), wikifuzz::makeFuzz(2)) )
+			   . ">"
+		       . wikiFuzz::makeFuzz(2)
+		       . "</source>";
+	}
+	
+	private function getLang() {
+		return wikiFuzz::chooseInput( array( "actionscript", "ada", "apache", "applescript", "asm", "asp", "autoit", "bash", "blitzbasic", "bnf", "c", "c_mac", "caddcl", "cadlisp", "cfdg", "cfm", "cpp", "cpp-qt", 
+               "csharp", "css", "d", "delphi", "diff", "div", "dos", "eiffel", "fortran", "freebasic", "gml", "groovy", "html4strict", "idl", "ini", "inno", "io", "java", "java5",
+               "javascript", "latex", "lisp", "lua", "matlab", "mirc", "mpasm", "mysql", "nsis", "objc", "ocaml", "ocaml-brief", "oobas", "oracle8", "pascal", "perl", "php",
+               "php-brief", "plsql", "python", "qbasic", "rails", "reg", "robots", "ruby", "sas", "scheme", "sdlbasic", "smalltalk", "smarty", "sql", "tcl", "text", "thinbasic",
+               "tsql", "vb", "vbnet", "vhdl", "visualfoxpro", "winbatch", "xml", "xpp", "z80", wikifuzz::makeFuzz(1) ) );
+	}
+	
+    function __construct() {
+        $this->pagePath = "index.php?title=WIKIFUZZ";
+
+        $this->params = array (
+                "action"        => "submit",
+                "wpMinoredit"   => "test",
+                "wpPreview"     => "test",
+                "wpSection"     => "test",
+                "wpEdittime"    => "test",
+                "wpSummary"     => "test",
+                "wpScrolltop"   => "test",
+                "wpStarttime"   => "test",
+                "wpAutoSummary" => "test",
+                "wpTextbox1"    => $this->getGeSHiContent() // the main wiki text, contains fake GeSHi content.
+                );
+    }
+}
+
+
+/**
+ ** selects a page test to run.
+ */
+function selectPageTest($count) {
+
+    // if the user only wants a specific test, then only ever give them that.
+    if (defined("SPECIFIC_TEST")) {
+        $testType = SPECIFIC_TEST;
+        return new $testType ();
+    }
+
+    // Some of the time we test Special pages, the remaining
+    // time we test using the standard edit page.
+    switch ($count % 100) {
+        case 0 : return new successfulUserLoginTest();
+        case 1 : return new listusersTest();
+        case 2 : return new searchTest();
+        case 3 : return new recentchangesTest();
+        case 4 : return new prefixindexTest();
+        case 5 : return new mimeSearchTest();
+        case 6 : return new specialLogTest();
+        case 7 : return new userLoginTest();
+        case 8 : return new ipblocklistTest();
+        case 9 : return new newImagesTest();
+        case 10: return new imagelistTest();
+        case 11: return new specialExportTest();
+        case 12: return new specialBooksourcesTest();
+        case 13: return new specialAllpagesTest();
+        case 14: return new pageHistoryTest();
+        case 15: return new contributionsTest();
+        case 16: return new viewPageTest();
+        case 17: return new specialAllmessagesTest();
+        case 18: return new specialNewpages();
+        case 19: return new searchTest();
+        case 20: return new redirectTest();
+        case 21: return new confirmEmail();
+        case 22: return new watchlistTest();
+        case 23: return new specialBlockmeTest();
+        case 24: return new specialUndelete();
+        case 25: return new specialMovePage();
+        case 26: return new specialUnlockdb();
+        case 27: return new specialLockdb();
+        case 28: return new specialUserrights();
+        case 29: return new pageProtectionForm();
+        case 30: return new specialBlockip();
+        case 31: return new imagepageTest();
+        case 32: return new pageDeletion();
+        case 33: return new specialRevisionDelete();
+        case 34: return new specialImport();
+        case 35: return new thumbTest();
+        case 36: return new trackbackTest();
+        case 37: return new profileInfo();
+        case 38: return new specialCite();
+        case 39: return new specialFilepath();
+        case 40: return new specialMakebot();
+        case 41: return new specialMakesysop();
+        case 42: return new specialRenameuser();
+        case 43: return new specialLinksearch();
+        case 44: return new specialCategoryTree();
+        case 45: return new api();
+        case 45: return new specialChemicalsourcesTest();
+        default: return new editPageTest();
+    }
+}
+
+
+///////////////////////  SAVING OUTPUT  /////////////////////////
+
+/**
+ ** Utility function for saving a file. Currently has no error checking.
+ */
+function saveFile($data, $name) {
+    file_put_contents($name, $data);
+}
+
+
+/**
+ ** Returns a test as an experimental GET-to-POST URL.
+ **        This doesn't seem to always work though, and sometimes the output is too long 
+ **        to be a valid GET URL, so we also save in other formats.
+ */
+function getAsURL(pageTest $test) {
+    $used_question_mark = (strpos($test->getPagePath(), "?") !== false);
+    $retval = "http://get-to-post.nickj.org/?" . WIKI_BASE_URL . $test->getPagePath();
+    foreach ($test->getParams() as $param => $value) {
+        if (!$used_question_mark) {
+            $retval .= "?";
+            $used_question_mark = true;
+        }
+        else {
+            $retval .= "&";
+        }
+        $retval .= $param . "=" . urlencode($value);
+    }
+    return $retval;
+}
+
+
+/**
+ ** Saves a plain-text human-readable version of a test.
+ */
+function saveTestAsText(pageTest $test, $filename) {
+    $str = "Test: " . $test->getPagePath();
+    foreach ($test->getParams() as $param => $value) {
+        $str .= "\n$param: $value";
+    }
+    $str .= "\nGet-to-post URL: " . getAsURL($test) . "\n";
+    saveFile($str, $filename);
+}
+
+
+/**
+ ** Saves a test as a standalone basic PHP script that shows this one problem.
+ **        Resulting script requires PHP-Curl be installed in order to work.
+ */
+function saveTestAsPHP(pageTest $test, $filename) {
+    $str = "<?php\n"
+        . "\$params = " . var_export(escapeForCurl($test->getParams()), true) . ";\n"
+        . "\$ch = curl_init();\n"
+        . "curl_setopt(\$ch, CURLOPT_POST, 1);\n"
+        . "curl_setopt(\$ch, CURLOPT_POSTFIELDS, \$params );\n"
+        . "curl_setopt(\$ch, CURLOPT_URL, " . var_export(WIKI_BASE_URL . $test->getPagePath(), true) . ");\n"
+        . "curl_setopt(\$ch, CURLOPT_RETURNTRANSFER,1);\n"
+        .  ($test->getCookie() ? "curl_setopt(\$ch, CURLOPT_COOKIE, " . var_export($test->getCookie(), true) . ");\n" : "")
+        . "\$result=curl_exec(\$ch);\n"
+        . "curl_close (\$ch);\n"
+        . "print \$result;\n"
+        . "?>\n";
+    saveFile($str, $filename);
+}
+
+
+/**
+ ** Escapes a value so that it can be used on the command line by Curl.
+ **        Specifically, "<" and "@" need to be escaped if they are the first character, 
+ **        otherwise  curl interprets these as meaning that we want to insert a file.
+ */
+function escapeForCurl(array $input_params) {
+    $output_params = array();
+    foreach ($input_params as $param => $value) {
+        if (strlen($value) > 0 && ( $value[0] == "@" || $value[0] == "<")) {
+            $value = "\\" . $value;
+        }
+        $output_params[$param] = $value;
+    }
+    return $output_params;
+}
+
+
+/**
+ ** Saves a test as a standalone CURL shell script that shows this one problem.
+ **        Resulting script requires standalone Curl be installed in order to work.
+ */
+function saveTestAsCurl(pageTest $test, $filename) {
+    $str = "#!/bin/bash\n"
+        . "curl --silent --include --globoff \\\n"
+        . ($test->getCookie() ? " --cookie " . escapeshellarg($test->getCookie()) . " \\\n" : "");
+    foreach (escapeForCurl($test->getParams()) as $param => $value) {
+        $str .= " -F " . escapeshellarg($param) . "=" . escapeshellarg($value) . " \\\n";
+    }
+    $str .= " " . escapeshellarg(WIKI_BASE_URL . $test->getPagePath()); // beginning space matters.
+    $str .= "\n";
+    saveFile($str, $filename);
+    chmod($filename, 0755); // make executable
+}
+
+
+/**
+ ** Saves the internal data structure to file.
+ */
+function saveTestData (pageTest $test, $filename) {
+    saveFile(serialize($test),  $filename);
+}
+
+
+/**
+ ** saves a test in the various formats.
+ */
+function saveTest(pageTest $test, $testname) {
+    $base_name = DIRECTORY . "/" . $testname;
+    saveTestAsText($test, $base_name . INFO_FILE);
+    saveTestAsPHP ($test, $base_name . PHP_TEST );
+    saveTestAsCurl($test, $base_name . CURL_TEST);
+    saveTestData  ($test, $base_name . DATA_FILE);
+}
+
+
+//////////////////// MEDIAWIKI OUTPUT /////////////////////////
+
+/**
+ ** Asks MediaWiki for the HTML output of a test.
+ */
+function wikiTestOutput(pageTest $test) {
+
+    $ch = curl_init();
+
+    // specify the cookie, if required.
+    if ($test->getCookie()) curl_setopt($ch, CURLOPT_COOKIE, $test->getCookie());
+    curl_setopt($ch, CURLOPT_POST, 1);                          // save form using a POST
+
+    $params = escapeForCurl($test->getParams());
+    curl_setopt($ch, CURLOPT_POSTFIELDS, $params );             // load the POST variables
+
+    curl_setopt($ch, CURLOPT_URL, WIKI_BASE_URL . $test->getPagePath() );  // set url to post to
+    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);                 // return into a variable
+
+    $result=curl_exec ($ch);
+
+    // if we encountered an error, then say so, and return an empty string.
+    if (curl_error($ch)) {
+        print "\nCurl error #: " . curl_errno($ch) . " - " . curl_error ($ch);
+        $result = "";
+    }
+
+    curl_close ($ch);
+
+    return $result;
+}
+
+
+//////////////////// HTML VALIDATION /////////////////////////
+
+/*
+ ** Asks the validator whether this is valid HTML, or not.
+ */
+function validateHTML($text) {
+
+    $params = array ("fragment"   => $text);
+
+    $ch = curl_init();
+
+    curl_setopt($ch, CURLOPT_POST, 1);                    // save form using a POST
+    curl_setopt($ch, CURLOPT_POSTFIELDS, $params);        // load the POST variables
+    curl_setopt($ch, CURLOPT_URL, VALIDATOR_URL);         // set url to post to
+    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);           // return into a variable
+
+    $result=curl_exec ($ch);
+
+    // if we encountered an error, then log it, and exit.
+    if (curl_error($ch)) {
+        trigger_error("Curl error #: " . curl_errno($ch) . " - " . curl_error ($ch) );
+        print "Curl error #: " . curl_errno($ch) . " - " . curl_error ($ch) . " - exiting.\n";
+        exit();
+    }
+
+    curl_close ($ch);
+
+    $valid = (strpos($result, "Failed validation") === false ? true : false);
+
+    return array($valid, $result);
+}
+
+
+/**
+ ** Get tidy to check for no HTML errors in the output file (e.g. unescaped strings).
+ */
+function tidyCheckFile($name) {
+    $file = DIRECTORY . "/" . $name;
+    $command = PATH_TO_TIDY . " -output /tmp/out.html -quiet $file 2>&1";
+    $x = `$command`;
+
+    // Look for the most interesting Tidy errors and warnings.
+    if (   strpos($x,"end of file while parsing attributes") !== false 
+            || strpos($x,"attribute with missing trailing quote mark") !== false
+            || strpos($x,"missing '>' for end of tag") !== false 
+            || strpos($x,"Error:") !== false) {
+        print "\nTidy found something - view details with: $command";
+        return false;
+    } else {
+        return true;
+    }
+}
+
+
+/**
+ ** Returns whether or not an database error log file has changed in size since
+ **        the last time this was run. This is used to tell if a test caused a DB error.
+ */
+function dbErrorLogged() {
+    static $filesize;
+
+    // first time running this function
+    if (!isset($filesize)) {
+        // create log if it does not exist
+        if (!file_exists(DB_ERROR_LOG_FILE)) {
+            saveFile("", DB_ERROR_LOG_FILE);
+        }
+        $filesize = filesize(DB_ERROR_LOG_FILE);
+        return false;
+    }
+
+    $newsize = filesize(DB_ERROR_LOG_FILE);
+    // if the log has grown, then assume the current test caused it.
+    if ($newsize != $filesize) {
+        $filesize = $newsize;
+        return true;
+    }
+
+    return false;
+}
+
+////////////////// TOP-LEVEL PROBLEM-FINDING FUNCTION ////////////////////////
+
+/**
+ ** takes a page test, and runs it and tests it for problems in the output.
+ **        Returns: False on finding a problem, or True on no problems being found.
+ */
+function runWikiTest(pageTest $test, &$testname, $can_overwrite = false) {
+
+    // by default don't overwrite a previous test of the same name.
+    while ( ! $can_overwrite && file_exists(DIRECTORY . "/" . $testname . DATA_FILE)) {
+        $testname .= "-" . mt_rand(0,9);
+    }
+
+    $filename = DIRECTORY . "/" . $testname . DATA_FILE;
+
+    // Store the time before and after, to find slow pages.
+    $before = microtime(true);
+
+    // Get MediaWiki to give us the output of this test.
+    $wiki_preview = wikiTestOutput($test);
+
+    $after = microtime(true);
+
+    // if we received no response, then that's interesting.
+    if ($wiki_preview == "") {
+        print "\nNo response received for: $filename";
+        return false;
+    }
+
+    // save output HTML to file.
+    $html_file = DIRECTORY . "/" . $testname . HTML_FILE;
+    saveFile($wiki_preview,  $html_file);
+
+    // if there were PHP errors in the output, then that's interesting too.
+    if (       strpos($wiki_preview, "<b>Warning</b>: "        ) !== false 
+            || strpos($wiki_preview, "<b>Fatal error</b>: "    ) !== false
+            || strpos($wiki_preview, "<b>Notice</b>: "         ) !== false
+            || strpos($wiki_preview, "<b>Error</b>: "          ) !== false 
+            || strpos($wiki_preview, "<b>Strict Standards:</b>") !== false
+            ) {
+        $error = substr($wiki_preview, strpos($wiki_preview, "</b>:") + 7, 50);
+        // Avoid probable PHP bug with bad session ids; http://bugs.php.net/bug.php?id=38224 
+        if ($error != "Unknown: The session id contains illegal character") {
+            print "\nPHP error/warning/notice in HTML output: $html_file ; $error";
+            return false;
+        }
+    }
+
+    // if there was a MediaWiki Backtrace message in the output, then that's also interesting.
+    if( strpos($wiki_preview, "Backtrace:") !== false ) {
+        print "\nInternal MediaWiki error in HTML output: $html_file";
+        return false;
+    }
+
+    // if there was a Parser error comment in the output, then that's potentially interesting.
+    if( strpos($wiki_preview, "!-- ERR") !== false ) {
+        print "\nParser Error comment in HTML output: $html_file";
+        return false;
+    }
+
+    // if a database error was logged, then that's definitely interesting.
+    if( dbErrorLogged() ) {
+        print "\nDatabase Error logged for: $filename";
+        return false;
+    }
+
+    // validate result
+    $valid = true;
+    if( VALIDATE_ON_WEB ) {
+        list ($valid, $validator_output) = validateHTML($wiki_preview);
+        if (!$valid) print "\nW3C web validation failed - view details with: html2text " . DIRECTORY . "/" . $testname . ".validator_output.html";
+    }
+
+    // Get tidy to check the page, unless we already know it produces non-XHTML output.
+    if( $test->tidyValidate() ) {
+        $valid = tidyCheckFile( $testname . HTML_FILE ) && $valid;
+    }
+
+    // if it took more than 2 seconds to render, then it may be interesting too. (Possible DoS attack?)
+    if (($after - $before) >= 2) {
+        print "\nParticularly slow to render (" . round($after - $before, 2) . " seconds): $filename";
+        return false;
+    }
+
+    if( $valid ) {
+        // Remove temp HTML file if test was valid:
+        unlink( $html_file );
+    } elseif( VALIDATE_ON_WEB ) {
+        saveFile($validator_output,   DIRECTORY . "/" . $testname . ".validator_output.html");
+    }
+
+    return $valid;
+}
+
+
+/////////////////// RERUNNING OLD TESTS ///////////////////
+
+/**
+ ** We keep our failed tests so that they can be rerun.
+ **        This function does that retesting.
+ */
+function rerunPreviousTests() {
+    print "Retesting previously found problems.\n";
+
+    $dir_contents = scandir (DIRECTORY);
+
+    // sort file into the order a normal person would use.
+    natsort ($dir_contents);
+
+    foreach ($dir_contents as $file) {
+
+        // if file is not a test, then skip it. 
+        // Note we need to escape any periods or will be treated as "any character".
+        $matches = array();
+        if (!ereg("(.*)" . str_replace(".", "\.", DATA_FILE) . "$", $file, $matches)) continue;
+
+        // reload the test.
+        $full_path = DIRECTORY . "/" . $file;
+        $test = unserialize(file_get_contents($full_path));
+
+        // if this is not a valid test, then skip it.
+        if (! $test instanceof pageTest) {
+            print "\nSkipping invalid test - $full_path";
+            continue;
+        }
+
+        // The date format is in Apache log format, which makes it easier to locate 
+        // which retest caused which error in the Apache logs (only happens usually if 
+        // apache segfaults).
+        if (!QUIET) print "[" . date ("D M d H:i:s Y") . "] Retesting $file (" . get_class($test) . ")";
+
+        // run test
+        $testname = $matches[1];
+        $valid = runWikiTest($test, $testname, true);
+
+        if (!$valid) {
+            saveTest($test, $testname);
+            if (QUIET) {
+                print "\nTest: " . get_class($test) . " ; Testname: $testname\n------";
+            } else {
+                print "\n";
+            }
+        }
+        else {
+            if (!QUIET) print "\r";
+            if (DELETE_PASSED_RETESTS) {
+                $prefix = DIRECTORY . "/" . $testname;
+                if (is_file($prefix . DATA_FILE)) unlink($prefix . DATA_FILE);
+                if (is_file($prefix . PHP_TEST )) unlink($prefix . PHP_TEST );
+                if (is_file($prefix . CURL_TEST)) unlink($prefix . CURL_TEST);
+                if (is_file($prefix . INFO_FILE)) unlink($prefix . INFO_FILE);
+            }
+        }
+    }
+
+    print "\nDone retesting.\n";
+}
+
+
+//////////////////////  MAIN LOOP  ////////////////////////
+
+
+// first check whether CURL is installed, because sometimes it's not.
+if( ! function_exists('curl_init') ) {
+    die("Could not find 'curl_init' function. Is the curl extension compiled into PHP?\n");
+}
+
+// Initialization of types. wikiFuzz doesn't have a constructor because we want to 
+// access it staticly and not have any globals.
+wikiFuzz::$types = array_keys(wikiFuzz::$data);
+
+// Make directory if doesn't exist
+if (!is_dir(DIRECTORY)) {
+    mkdir (DIRECTORY, 0700 );
+}
+// otherwise, we first retest the things that we have found in previous runs
+else if (RERUN_OLD_TESTS) {
+    rerunPreviousTests();
+}
+
+// main loop.
+$start_time = date("U");
+$num_errors = 0;
+if (!QUIET) {
+    print "Beginning main loop. Results are stored in the " . DIRECTORY . " directory.\n";
+    print "Press CTRL+C to stop testing.\n";
+}
+
+for ($count=0; true; $count++) {
+    if (!QUIET) {
+        // spinning progress indicator.
+        switch( $count % 4 ) {
+            case '0': print "\r/";  break;
+            case '1': print "\r-";  break;
+            case '2': print "\r\\"; break;
+            case '3': print "\r|";  break;
+        }
+        print " $count";
+    }
+
+    // generate a page test to run.
+    $test = selectPageTest($count);
+
+    $mins = ( date("U") - $start_time ) / 60;
+    if (!QUIET && $mins > 0) {
+        print ".  $num_errors poss errors. " 
+            . floor($mins) . " mins. " 
+            . round ($count / $mins, 0) . " tests/min. " 
+            . get_class($test); // includes the current test name.
+    }
+
+    // run this test against MediaWiki, and see if the output was valid.
+    $testname = $count;
+    $valid = runWikiTest($test, $testname, false);
+
+    // save the failed test
+    if ( ! $valid ) {
+        if (QUIET) {
+            print "\nTest: " . get_class($test) . " ; Testname: $testname\n------";
+        } else {
+            print "\n";
+        }
+        saveTest($test, $testname);
+        $num_errors += 1;
+    } else if ( KEEP_PASSED_TESTS ) {
+        // print current time, with microseconds (matches "strace" format), and the test name.
+        print " " . date("H:i:s.") . substr(current(explode(" ", microtime())), 2) . " " . $testname;
+        saveTest($test, $testname);
+    }
+
+    // stop if we have reached max number of errors.
+    if (defined("MAX_ERRORS") && $num_errors>=MAX_ERRORS) {
+        break;
+    }
+
+    // stop if we have reached max number of mins runtime.
+    if (defined("MAX_RUNTIME") && $mins>=MAX_RUNTIME) {
+        break;
+    }
+}
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/generateSitemap.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/generateSitemap.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/generateSitemap.php	(revision 1280)
@@ -0,0 +1,474 @@
+<?php
+define( 'GS_MAIN', -2 );
+define( 'GS_TALK', -1 );
+/**
+ * Creates a Google sitemap for the site
+ *
+ * @addtogroup Maintenance
+ *
+ * @copyright Copyright © 2005, Ævar Arnfjörð Bjarmason
+ * @copyright Copyright © 2005, Jens Frank <jeluf@gmx.de>
+ * @copyright Copyright © 2005, Brion Vibber <brion@pobox.com>
+ *
+ * @link http://www.google.com/webmasters/sitemaps/docs/en/about.html
+ * @link http://www.google.com/schemas/sitemap/0.84/sitemap.xsd
+ *
+ * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
+ */
+
+class GenerateSitemap {
+	/**
+	 * The maximum amount of urls in a sitemap file
+	 *
+	 * @link http://www.google.com/schemas/sitemap/0.84/sitemap.xsd
+	 *
+	 * @var int
+	 */
+	var $url_limit;
+
+	/**
+	 * The maximum size of a sitemap file
+	 *
+	 * @link http://www.google.com/webmasters/sitemaps/docs/en/protocol.html#faq_sitemap_size
+	 *
+	 * @var int
+	 */
+	var $size_limit;
+
+	/**
+	 * The path to prepend to the filename
+	 *
+	 * @var string
+	 */
+	var $fspath;
+
+	/**
+	 * The path to append to the domain name
+	 *
+	 * @var string
+	 */
+	var $path;
+
+	/**
+	 * Whether or not to use compression
+	 *
+	 * @var bool
+	 */
+	var $compress;
+
+	/**
+	 * The number of entries to save in each sitemap file
+	 *
+	 * @var array
+	 */
+	var $limit = array();
+
+	/**
+	 * Key => value entries of namespaces and their priorities
+	 *
+	 * @var array
+	 */
+	var $priorities = array(
+		// Custom main namespaces
+		GS_MAIN			=> '0.5',
+		// Custom talk namesspaces
+		GS_TALK			=> '0.1',
+		// MediaWiki standard namespaces
+		NS_MAIN			=> '1.0',
+		NS_TALK			=> '0.1',
+		NS_USER			=> '0.5',
+		NS_USER_TALK		=> '0.1',
+		NS_PROJECT		=> '0.5',
+		NS_PROJECT_TALK		=> '0.1',
+		NS_IMAGE		=> '0.5',
+		NS_IMAGE_TALK		=> '0.1',
+		NS_MEDIAWIKI		=> '0.0',
+		NS_MEDIAWIKI_TALK	=> '0.1',
+		NS_TEMPLATE		=> '0.0',
+		NS_TEMPLATE_TALK	=> '0.1',
+		NS_HELP			=> '0.5',
+		NS_HELP_TALK		=> '0.1',
+		NS_CATEGORY		=> '0.5',
+		NS_CATEGORY_TALK	=> '0.1',
+	);
+
+	/**
+	 * A one-dimensional array of namespaces in the wiki
+	 *
+	 * @var array
+	 */
+	var $namespaces = array();
+
+	/**
+	 * When this sitemap batch was generated
+	 *
+	 * @var string
+	 */
+	var $timestamp;
+
+	/**
+	 * A database slave object
+	 *
+	 * @var object
+	 */
+	var $dbr;
+
+	/**
+	 * A resource pointing to the sitemap index file
+	 *
+	 * @var resource
+	 */
+	var $findex;
+
+
+	/**
+	 * A resource pointing to a sitemap file
+	 *
+	 * @var resource
+	 */
+	var $file;
+
+	/**
+	 * A resource pointing to php://stderr
+	 *
+	 * @var resource
+	 */
+	var $stderr;
+
+	/**
+	 * Constructor
+	 *
+	 * @param string $fspath The path to prepend to the filenames, used to
+	 *                     save them somewhere else than in the root directory
+	 * @param string $path The path to append to the domain name
+	 * @param bool $compress Whether to compress the sitemap files
+	 */
+	function GenerateSitemap( $fspath, $compress ) {
+		global $wgScriptPath;
+
+		$this->url_limit = 50000;
+		$this->size_limit = pow( 2, 20 ) * 10;
+		$this->fspath = isset( $fspath ) ? $fspath : '';
+		$this->compress = $compress;
+
+		$this->stderr = fopen( 'php://stderr', 'wt' );
+		$this->dbr = wfGetDB( DB_SLAVE );
+		$this->generateNamespaces();
+		$this->timestamp = wfTimestamp( TS_ISO_8601, wfTimestampNow() );
+		$this->findex = fopen( "{$this->fspath}sitemap-index-" . wfWikiID() . ".xml", 'wb' );
+	}
+
+	/**
+	 * Generate a one-dimensional array of existing namespaces
+	 */
+	function generateNamespaces() {
+		$fname = 'GenerateSitemap::generateNamespaces';
+
+		$res = $this->dbr->select( 'page',
+			array( 'page_namespace' ),
+			array(),
+			$fname,
+			array(
+				'GROUP BY' => 'page_namespace',
+				'ORDER BY' => 'page_namespace',
+			)
+		);
+
+		while ( $row = $this->dbr->fetchObject( $res ) )
+			$this->namespaces[] = $row->page_namespace;
+	}
+
+	/**
+	 * Get the priority of a given namespace
+	 *
+	 * @param int $namespace The namespace to get the priority for
+	 +
+	 * @return string
+	 */
+
+	function priority( $namespace ) {
+		return isset( $this->priorities[$namespace] ) ? $this->priorities[$namespace] : $this->guessPriority( $namespace );
+	}
+
+	/**
+	 * If the namespace isn't listed on the priority list return the
+	 * default priority for the namespace, varies depending on whether it's
+	 * a talkpage or not.
+	 *
+	 * @param int $namespace The namespace to get the priority for
+	 *
+	 * @return string
+	 */
+	function guessPriority( $namespace ) {
+		return Namespace::isMain( $namespace ) ? $this->priorities[GS_MAIN] : $this->priorities[GS_TALK];
+	}
+
+	/**
+	 * Return a database resolution of all the pages in a given namespace
+	 *
+	 * @param int $namespace Limit the query to this namespace
+	 *
+	 * @return resource
+	 */
+	function getPageRes( $namespace ) {
+		$fname = 'GenerateSitemap::getPageRes';
+
+		return $this->dbr->select( 'page',
+			array(
+				'page_namespace',
+				'page_title',
+				'page_touched',
+			),
+			array( 'page_namespace' => $namespace ),
+			$fname
+		);
+	}
+
+	/**
+	 * Main loop
+	 *
+	 * @access public
+	 */
+	function main() {
+		global $wgContLang;
+
+		fwrite( $this->findex, $this->openIndex() );
+
+		foreach ( $this->namespaces as $namespace ) {
+			$res = $this->getPageRes( $namespace );
+			$this->file = false;
+			$this->generateLimit( $namespace );
+			$length = $this->limit[0];
+			$i = $smcount = 0;
+
+			$fns = $wgContLang->getFormattedNsText( $namespace );
+			$this->debug( "$namespace ($fns)" );
+			while ( $row = $this->dbr->fetchObject( $res ) ) {
+				if ( $i++ === 0 || $i === $this->url_limit + 1 || $length + $this->limit[1] + $this->limit[2] > $this->size_limit ) {
+					if ( $this->file !== false ) {
+						$this->write( $this->file, $this->closeFile() );
+						$this->close( $this->file );
+					}
+					$filename = $this->sitemapFilename( $namespace, $smcount++ );
+					$this->file = $this->open( $this->fspath . $filename, 'wb' );
+					$this->write( $this->file, $this->openFile() );
+					fwrite( $this->findex, $this->indexEntry( $filename ) );
+					$this->debug( "\t$filename" );
+					$length = $this->limit[0];
+					$i = 1;
+				}
+				$title = Title::makeTitle( $row->page_namespace, $row->page_title );
+				$date = wfTimestamp( TS_ISO_8601, $row->page_touched );
+				$entry = $this->fileEntry( $title->getFullURL(), $date, $this->priority( $namespace ) );
+				$length += strlen( $entry );
+				$this->write( $this->file, $entry );
+				// generate pages for language variants
+				if($wgContLang->hasVariants()){
+					$variants = $wgContLang->getVariants();
+					foreach($variants as $vCode){
+						if($vCode==$wgContLang->getCode()) continue; // we don't want default variant
+						$entry = $this->fileEntry( $title->getFullURL('',$vCode), $date, $this->priority( $namespace ) );
+						$length += strlen( $entry );
+						$this->write( $this->file, $entry );
+					}
+				}
+			}
+			if ( $this->file ) {
+				$this->write( $this->file, $this->closeFile() );
+				$this->close( $this->file );
+			}
+		}
+		fwrite( $this->findex, $this->closeIndex() );
+		fclose( $this->findex );
+	}
+
+	/**
+	 * gzopen() / fopen() wrapper
+	 *
+	 * @return resource
+	 */
+	function open( $file, $flags ) {
+		return $this->compress ? gzopen( $file, $flags ) : fopen( $file, $flags );
+	}
+
+	/**
+	 * gzwrite() / fwrite() wrapper
+	 */
+	function write( &$handle, $str ) {
+		if ( $this->compress )
+			gzwrite( $handle, $str );
+		else
+			fwrite( $handle, $str );
+	}
+
+	/**
+	 * gzclose() / fclose() wrapper
+	 */
+	function close( &$handle ) {
+		if ( $this->compress )
+			gzclose( $handle );
+		else
+			fclose( $handle );
+	}
+
+	/**
+	 * Get a sitemap filename
+	 *
+	 * @static
+	 *
+	 * @param int $namespace The namespace
+	 * @param int $count The count
+	 *
+	 * @return string
+	 */
+	function sitemapFilename( $namespace, $count ) {
+		$ext = $this->compress ? '.gz' : '';
+		return "sitemap-".wfWikiID()."-NS_$namespace-$count.xml$ext";
+	}
+
+	/**
+	 * Return the XML required to open an XML file
+	 *
+	 * @static
+	 *
+	 * @return string
+	 */
+	function xmlHead() {
+		return '<?xml version="1.0" encoding="UTF-8"?>' . "\n";
+	}
+
+	/**
+	 * Return the XML schema being used
+	 *
+	 * @static
+	 *
+	 * @returns string
+	 */
+	function xmlSchema() {
+		return 'http://www.google.com/schemas/sitemap/0.84';
+	}
+
+	/**
+	 * Return the XML required to open a sitemap index file
+	 *
+	 * @return string
+	 */
+	function openIndex() {
+		return $this->xmlHead() . '<sitemapindex xmlns="' . $this->xmlSchema() . '">' . "\n";
+	}
+
+	/**
+	 * Return the XML for a single sitemap indexfile entry
+	 *
+	 * @static
+	 *
+	 * @param string $filename The filename of the sitemap file
+	 *
+	 * @return string
+	 */
+	function indexEntry( $filename ) {
+		return
+			"\t<sitemap>\n" .
+			"\t\t<loc>$filename</loc>\n" .
+			"\t\t<lastmod>{$this->timestamp}</lastmod>\n" .
+			"\t</sitemap>\n";
+	}
+
+	/**
+	 * Return the XML required to close a sitemap index file
+	 *
+	 * @static
+	 *
+	 * @return string
+	 */
+	function closeIndex() {
+		return "</sitemapindex>\n";
+	}
+
+	/**
+	 * Return the XML required to open a sitemap file
+	 *
+	 * @return string
+	 */
+	function openFile() {
+		return $this->xmlHead() . '<urlset xmlns="' . $this->xmlSchema() . '">' . "\n";
+	}
+
+	/**
+	 * Return the XML for a single sitemap entry
+	 *
+	 * @static
+	 *
+	 * @param string $url An RFC 2396 compilant URL
+	 * @param string $date A ISO 8601 date
+	 * @param string $priority A priority indicator, 0.0 - 1.0 inclusive with a 0.1 stepsize
+	 *
+	 * @return string
+	 */
+	function fileEntry( $url, $date, $priority ) {
+		return
+			"\t<url>\n" .
+			"\t\t<loc>$url</loc>\n" .
+			"\t\t<lastmod>$date</lastmod>\n" .
+			"\t\t<priority>$priority</priority>\n" .
+			"\t</url>\n";
+	}
+
+	/**
+	 * Return the XML required to close sitemap file
+	 *
+	 * @static
+	 * @return string
+	 */
+	function closeFile() {
+		return "</urlset>\n";
+	}
+
+	/**
+	 * Write a string to stderr followed by a UNIX newline
+	 */
+	function debug( $str ) {
+		fwrite( $this->stderr, "$str\n" );
+	}
+
+	/**
+	 * Populate $this->limit
+	 */
+	function generateLimit( $namespace ) {
+		$title = Title::makeTitle( $namespace, str_repeat( "\xf0\xa8\xae\x81", 63 ) . "\xe5\x96\x83" );
+
+		$this->limit = array(
+			strlen( $this->openFile() ),
+			strlen( $this->fileEntry( $title->getFullUrl(), wfTimestamp( TS_ISO_8601, wfTimestamp() ), $this->priority( $namespace ) ) ),
+			strlen( $this->closeFile() )
+		);
+	}
+}
+
+if ( in_array( '--help', $argv ) ) {
+	echo <<<EOT
+Usage: php generateSitemap.php [options]
+	--help			show this message
+
+	--fspath=<path>		The file system path to save to, e.g /tmp/sitemap/
+
+	--server=<server>	The protocol and server name to use in URLs, e.g.
+		http://en.wikipedia.org. This is sometimes necessary because
+		server name detection may fail in command line scripts.
+
+	--compress=[yes|no]	compress the sitemap files, default yes
+
+EOT;
+	die( -1 );
+}
+
+$optionsWithArgs = array( 'fspath', 'server', 'compress' );
+require_once( dirname( __FILE__ ) . '/commandLine.inc' );
+
+if ( isset( $options['server'] ) ) {
+	$wgServer = $options['server'];
+}
+
+$gs = new GenerateSitemap( @$options['fspath'], @$options['compress'] !== 'no' );
+$gs->main();
+?>
Index: /MediaWiki/branches/1.11/maintenance/getLagTimes.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/getLagTimes.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/getLagTimes.php	(revision 1280)
@@ -0,0 +1,24 @@
+<?php
+
+require 'commandLine.inc';
+
+if( empty( $wgDBservers ) ) {
+	echo "This script dumps replication lag times, but you don't seem to have\n";
+	echo "a multi-host db server configuration.\n";
+} else {
+	$lags = $wgLoadBalancer->getLagTimes();
+	foreach( $lags as $n => $lag ) {
+		$host = $wgDBservers[$n]["host"];
+		if( IP::isValid( $host ) ) {
+			$ip = $host;
+			$host = gethostbyaddr( $host );
+		} else {
+			$ip = gethostbyname( $host );
+		}
+		$starLen = min( intval( $lag ), 40 );
+		$stars = str_repeat( '*', $starLen );
+		printf( "%10s %20s %3d %s\n", $ip, $host, $lag, $stars );
+	}
+}
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/getSlaveServer.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/getSlaveServer.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/getSlaveServer.php	(revision 1280)
@@ -0,0 +1,15 @@
+<?php
+
+require_once( dirname(__FILE__).'/commandLine.inc' );
+
+if( isset( $options['group'] ) ) {
+	$db = wfGetDB( DB_SLAVE, $options['group'] );
+	$host = $db->getProperty( 'mServer' );
+} else {
+	$i = $wgLoadBalancer->getReaderIndex();
+	$host = $wgDBservers[$i]['host'];
+}
+
+print "$host\n";
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/importDump.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/importDump.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/importDump.php	(revision 1280)
@@ -0,0 +1,142 @@
+<?php
+/**
+ * Copyright (C) 2005 Brion Vibber <brion@pobox.com>
+ * http://www.mediawiki.org/
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @addtogroup Maintenance
+ */
+
+$optionsWithArgs = array( 'report' );
+
+require_once( 'commandLine.inc' );
+require_once( 'SpecialImport.php' );
+
+class BackupReader {
+	var $reportingInterval = 100;
+	var $reporting = true;
+	var $pageCount = 0;
+	var $revCount  = 0;
+	var $dryRun    = false;
+
+	function BackupReader() {
+		$this->stderr = fopen( "php://stderr", "wt" );
+	}
+
+	function reportPage( $page ) {
+		$this->pageCount++;
+	}
+
+	function handleRevision( $rev ) {
+		$title = $rev->getTitle();
+		if (!$title) {
+			$this->progress( "Got bogus revision with null title!" );
+			return;
+		}
+		#$timestamp = $rev->getTimestamp();
+		#$display = $title->getPrefixedText();
+		#echo "$display $timestamp\n";
+
+		$this->revCount++;
+		$this->report();
+
+		if( !$this->dryRun ) {
+			call_user_func( $this->importCallback, $rev );
+		}
+	}
+
+	function report( $final = false ) {
+		if( $final xor ( $this->pageCount % $this->reportingInterval == 0 ) ) {
+			$this->showReport();
+		}
+	}
+
+	function showReport() {
+		if( $this->reporting ) {
+			$delta = wfTime() - $this->startTime;
+			if( $delta ) {
+				$rate = sprintf("%.2f", $this->pageCount / $delta);
+				$revrate = sprintf("%.2f", $this->revCount / $delta);
+			} else {
+				$rate = '-';
+				$revrate = '-';
+			}
+			$this->progress( "$this->pageCount ($rate pages/sec $revrate revs/sec)" );
+		}
+	}
+
+	function progress( $string ) {
+		fwrite( $this->stderr, $string . "\n" );
+	}
+
+	function importFromFile( $filename ) {
+		if( preg_match( '/\.gz$/', $filename ) ) {
+			$filename = 'compress.zlib://' . $filename;
+		}
+		$file = fopen( $filename, 'rt' );
+		return $this->importFromHandle( $file );
+	}
+
+	function importFromStdin() {
+		$file = fopen( 'php://stdin', 'rt' );
+		return $this->importFromHandle( $file );
+	}
+
+	function importFromHandle( $handle ) {
+		$this->startTime = wfTime();
+
+		$source = new ImportStreamSource( $handle );
+		$importer = new WikiImporter( $source );
+
+		$importer->setPageCallback( array( &$this, 'reportPage' ) );
+		$this->importCallback =  $importer->setRevisionCallback(
+			array( &$this, 'handleRevision' ) );
+
+		return $importer->doImport();
+	}
+}
+
+if( wfReadOnly() ) {
+	wfDie( "Wiki is in read-only mode; you'll need to disable it for import to work.\n" );
+}
+
+$reader = new BackupReader();
+if( isset( $options['quiet'] ) ) {
+	$reader->reporting = false;
+}
+if( isset( $options['report'] ) ) {
+	$reader->reportingInterval = intval( $options['report'] );
+}
+if( isset( $options['dry-run'] ) ) {
+	$reader->dryRun = true;
+}
+
+if( isset( $args[0] ) ) {
+	$result = $reader->importFromFile( $args[0] );
+} else {
+	$result = $reader->importFromStdin();
+}
+
+if( WikiError::isError( $result ) ) {
+	echo $result->getMessage() . "\n";
+} else {
+	echo "Done!\n";
+	echo "You might want to run rebuildrecentchanges.php to regenerate\n";
+	echo "the recentchanges page.\n";
+}
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/importImages.inc.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/importImages.inc.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/importImages.inc.php	(revision 1280)
@@ -0,0 +1,66 @@
+<?php
+
+/**
+ * Support functions for the importImages script
+ *
+ * @addtogroup Maintenance
+ * @author Rob Church <robchur@gmail.com>
+ */
+
+/**
+ * Search a directory for files with one of a set of extensions
+ *
+ * @param $dir Path to directory to search
+ * @param $exts Array of extensions to search for
+ * @return mixed Array of filenames on success, or false on failure
+ */
+function findFiles( $dir, $exts ) {
+	if( is_dir( $dir ) ) {
+		if( $dhl = opendir( $dir ) ) {
+			while( ( $file = readdir( $dhl ) ) !== false ) {
+				if( is_file( $dir . '/' . $file ) ) {
+					list( /* $name */, $ext ) = splitFilename( $dir . '/' . $file );
+					if( array_search( strtolower( $ext ), $exts ) !== false )
+						$files[] = $dir . '/' . $file;
+				}
+			}
+			return $files;
+		} else {
+			return false;
+		}
+	} else {
+		return false;
+	}
+}
+
+/**
+ * Split a filename into filename and extension
+ *
+ * @param $filename Filename
+ * @return array
+ */
+function splitFilename( $filename ) {
+	$parts = explode( '.', $filename );
+	$ext = $parts[ count( $parts ) - 1 ];
+	unset( $parts[ count( $parts ) - 1 ] );
+	$fname = implode( '.', $parts );
+	return array( $fname, $ext );
+}
+
+/**
+ * Given an image hash, check that the structure exists to save the image file
+ * and create it if it doesn't
+ *
+ * @param $hash Part of an image hash, e.g. /f/fd/
+ */
+function makeHashPath( $hash ) {
+	global $wgUploadDirectory;
+	$parts = explode( '/', substr( $hash, 1, strlen( $hash ) - 2 ) );
+	if( !is_dir( $wgUploadDirectory . '/' . $parts[0] ) )
+		mkdir( $wgUploadDirectory . '/' . $parts[0] );
+	if( !is_dir( $wgUploadDirectory . '/' . $hash ) )
+		mkdir( $wgUploadDirectory . '/' . $hash );
+}
+
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/importImages.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/importImages.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/importImages.php	(revision 1280)
@@ -0,0 +1,121 @@
+<?php
+
+/**
+ * Maintenance script to import one or more images from the local file system into
+ * the wiki without using the web-based interface
+ *
+ * @addtogroup Maintenance
+ * @author Rob Church <robchur@gmail.com>
+ */
+
+require_once( 'commandLine.inc' );
+require_once( 'importImages.inc.php' );
+echo( "Import Images\n\n" );
+
+# Need a directory and at least one extension
+if( count( $args ) > 1 ) {
+
+	$dir = array_shift( $args );
+
+	# Check the allowed extensions
+	while( $ext = array_shift( $args ) )
+		$exts[] = ltrim( $ext, '.' );
+		
+	# Search the directory given and pull out suitable candidates
+	$files = findFiles( $dir, $exts );
+
+	# Initialise the user for this operation
+	$user = isset( $options['user'] )
+		? User::newFromName( $options['user'] )
+		: User::newFromName( 'Maintenance script' );
+	if( !$user instanceof User )
+		$user = User::newFromName( 'Maintenance script' );
+	$wgUser = $user;
+	
+	# Get the upload comment
+	$comment = isset( $options['comment'] )
+		? $options['comment']
+		: 'Importing image file';
+	
+	# Get the license specifier
+	$license = isset( $options['license'] ) ? $options['license'] : '';
+	
+	# Batch "upload" operation
+	foreach( $files as $file ) {
+	
+		$base = wfBaseName( $file );
+		
+		# Validate a title
+		$title = Title::makeTitleSafe( NS_IMAGE, $base );
+		if( is_object( $title ) ) {
+			
+			# Check existence
+			$image = new Image( $title );
+			if( !$image->exists() ) {
+			
+				global $wgUploadDirectory;
+				
+				# copy() doesn't create paths so if the hash path doesn't exist, we
+				# have to create it
+				makeHashPath( wfGetHashPath( $image->name ) );
+				
+				# Stash the file
+				echo( "Saving {$base}..." );
+				
+				if( copy( $file, $image->getFullPath() ) ) {
+				
+					echo( "importing..." );
+				
+					# Grab the metadata
+					$image->loadFromFile();
+					
+					# Record the upload
+					if( $image->recordUpload( '', $comment, $license ) ) {
+					
+						# We're done!
+						echo( "done.\n" );
+						
+					} else {
+						echo( "failed.\n" );
+					}
+				
+				} else {
+					echo( "failed.\n" );
+				}
+			
+			} else {
+				echo( "{$base} could not be imported; a file with this name exists in the wiki\n" );
+			}
+		
+		} else {
+			echo( "{$base} could not be imported; a valid title cannot be produced\n" );
+		}
+		
+	}
+	
+
+} else {
+	showUsage();
+}
+
+exit();
+
+function showUsage( $reason = false ) {
+	if( $reason )
+		echo( $reason . "\n" );
+	echo <<<END
+USAGE: php importImages.php [options] <dir> <ext1> ...
+
+<dir> : Path to the directory containing images to be imported
+<ext1+> File extensions to import
+
+Options:
+--user=<username> Set username of uploader, default 'Image import script'
+--comment=<text>  Set upload summary comment, default 'Importing image file'
+--license=<code>  Use an optional license template
+
+END;
+	exit();
+}
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/importLogs.inc
===================================================================
--- /MediaWiki/branches/1.11/maintenance/importLogs.inc	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/importLogs.inc	(revision 1280)
@@ -0,0 +1,145 @@
+<?php
+# Copyright (C) 2004 Brion Vibber <brion@pobox.com>
+# http://www.mediawiki.org/
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+# http://www.gnu.org/copyleft/gpl.html
+
+/**
+ * Attempt to import existing log pages into the log tables.
+ *
+ * Not yet complete.
+ *
+ * @todo document
+ * @addtogroup Maintenance
+ */
+
+/** */
+require_once( 'GlobalFunctions.php' );
+require_once( 'Database.php' );
+require_once( 'Article.php' );
+require_once( 'LogPage.php' );
+
+/**
+ * Log importer
+ * @todo document
+ * @addtogroup Maintenance
+ */
+class LogImporter {
+	var $dummy = false;
+
+	function LogImporter( $type ) {
+		$this->type = $type;
+		$this->db = wfGetDB( DB_MASTER );
+		$this->actions = $this->setupActions();
+	}
+
+	function setupActions() {
+		$actions = array();
+		foreach( LogPage::validActions( $this->type ) as $action ) {
+			$key = "{$this->type}/$action";
+			$actions[$key] = $this->makeLineRegexp( $this->type, $action );
+		}
+		return $actions;
+	}
+
+	function makeLineRegexp( $type, $action ) {
+		$linkRegexp = '(?:\[\[)?([^|\]]+?)(?:\|[^\]]+?)?(?:\]\])?';
+		$linkRegexp2 = '\[\[([^|\]]+?)(?:\|[^\]]+?)?\]\]';
+
+		$text = LogPage::actionText( $type, $action );
+		$text = preg_quote( $text, '/' );
+		$text = str_replace( '\$1', $linkRegexp, $text );
+		$text = '^(.*?) ' . $linkRegexp2 . ' ' . $text;
+		$text .= '(?: <em>\((.*)\)<\/em>)?';
+		$text = "/$text/";
+		return $text;
+	}
+
+	function importText( $text ) {
+		if( $this->dummy ) {
+			print $text;
+			var_dump( $this->actions );
+		}
+		$lines = explode( '<li>', $text );
+		foreach( $lines as $line ) {
+			$matches = array();
+			if( preg_match( '!^(.*)</li>!', $line, $matches ) ) {
+				$this->importLine( $matches[1] );
+			}
+		}
+	}
+
+	function fixDate( $date ) {
+		# Yuck! Parsing multilingual date formats??!!!!???!!??!
+		# 01:55, 23 Aug 2004 - won't take in strtotimr
+		# "Aug 23 2004 01:55" - seems ok
+		# TODO: multilingual attempt to extract from the data in Language
+		$matches = array();
+		if( preg_match( '/^(\d+:\d+(?::\d+)?), (.*)$/', $date, $matches ) ) {
+			$date = $matches[2] . ' ' . $matches[1];
+		}
+		$n = strtotime( $date ) + date("Z");
+		# print gmdate( 'D, d M Y H:i:s T', $n ) . "\n";
+		$timestamp = wfTimestamp( TS_MW, $n );
+		return $timestamp;
+	}
+
+	function importLine( $line ) {
+		foreach( $this->actions as $action => $regexp ) {
+			$matches = array();
+			if( preg_match( $regexp, $line, $matches ) ) {
+				if( $this->dummy ) {
+					#var_dump( $matches );
+				}
+				$date = $this->fixDate( $matches[1] );
+				$user = Title::newFromText( $matches[2] );
+				$target = Title::newFromText( $matches[3] );
+				if( isset( $matches[4] ) ) {
+					$comment = $matches[4];
+				} else {
+					$comment = '';
+				}
+
+				$insert = array(
+					'log_type' => $this->type,
+					'log_action' => preg_replace( '!^.*/!', '', $action ),
+					'log_timestamp' => $date,
+					'log_user' => intval( User::idFromName( $user->getText() ) ),
+					'log_namespace' => $target->getNamespace(),
+					'log_title' => $target->getDBkey(),
+					'log_comment' => wfUnescapeWikiText( $comment ),
+				);
+				if( $this->dummy ) {
+					var_dump( $insert );
+				} else {
+					# FIXME: avoid duplicates!
+					$this->db->insert( 'logging', $insert );
+				}
+				break;
+			}
+		}
+	}
+}
+
+function wfUnescapeWikiText( $text ) {
+	$text = str_replace(
+		array( '&#91;', '&#124;', '&#39;', 'ISBN&#32;', '&#58;//' , "\n&#61;", '&#123;&#123;' ),
+		array( '[',		'|',	  "'",	   'ISBN '	  , '://'	  , "\n=", '{{' ),
+		$text );
+	return $text;
+}
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/importLogs.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/importLogs.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/importLogs.php	(revision 1280)
@@ -0,0 +1,26 @@
+<?php
+/**
+ * @todo document
+ * @addtogroup Maintenance
+ */
+
+/** */
+require_once( "commandLine.inc" );
+require_once( "importLogs.inc" );
+
+#print $text;
+#exit();
+
+foreach( LogPage::validTypes() as $type ) {
+	if( $type == '' ) continue;
+
+	$page = LogPage::logName( $type );
+	$log = new Article( Title::makeTitleSafe( NS_PROJECT, $page ) );
+	$text = $log->fetchContent();
+
+	$importer = new LogImporter( $type );
+	$importer->dummy = true;
+	$importer->importText( $text );
+}
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/importPhase2.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/importPhase2.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/importPhase2.php	(revision 1280)
@@ -0,0 +1,368 @@
+<?php
+# MediaWiki 'phase 2' to current format import script
+# (import format current as of 1.2.0, March 2004)
+#
+# Copyright (C) 2004 Brion Vibber <brion@pobox.com>
+# Portions by Lee Daniel Crocker, 2002
+# http://www.mediawiki.org/
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+# http://www.gnu.org/copyleft/gpl.html
+
+/**
+ * @todo document
+ * @deprecated
+ * @addtogroup Maintenance
+ */
+
+/** */
+die( "This import script is not currently maintained.
+If you need it you'll have to modify it as necessary.\n");
+
+if ( ! is_readable( "../LocalSettings.php" ) ) {
+	print "A copy of your installation's LocalSettings.php\n" .
+	  "must exist in the source directory.\n";
+	exit();
+}
+
+$wgCommandLineMode = true;
+ini_set("implicit_flush", 1);
+
+$DP = "../includes";
+require_once( "../LocalSettings.php" );
+require_once( "../AdminSettings.php" );
+
+$wgDBuser = $wgDBadminuser;
+$wgDBpassword = $wgDBadminpassword;
+
+$sep = ( DIRECTORY_SEPARATOR == "\\" ) ? ";" : ":";
+ini_set( "include_path", "$IP$sep$include_path" );
+
+require_once( "Setup.php" );
+
+require_once( "../install-utils.inc" );
+require_once( "InitialiseMessages.inc" );
+require_once( "rebuildlinks.inc" );
+require_once( "rebuildrecentchanges.inc" );
+require_once( "rebuildtextindex.inc" );
+
+/**
+ * @todo document
+ * @addtogroup Maintenance
+ */
+class Phase2Importer {
+	var $olddb, $titleCache;
+
+	function Phase2Importer( $database ) {
+		$this->olddb = $database;
+		$this->titleCache = new TitleCache;
+	}
+
+	function importAll() {
+		$this->importCurData();
+		$this->fixCurTitles();
+
+		$this->importOldData();
+		$this->fixOldTitles();
+
+		$this->importUserData();
+		$this->fixUserOptions();
+
+		$this->importWatchlists();
+
+		$this->importLinkData();
+
+		/*
+		# For some reason this is broken. RecentChanges will just start anew...
+		rebuildRecentChangesTablePass1();
+		rebuildRecentChangesTablePass2();
+		*/
+
+		print "Rebuilding search index:\n";
+		dropTextIndex();
+		rebuildTextIndex();
+		createTextIndex();
+
+		initialiseMessages();
+	}
+
+	# Simple import functions; for the most part these are pretty straightforward.
+	# MySQL copies everything over to the new database and tweaks a few things.
+	function importCurData() {
+		print "Clearing pages from default install, if any...\n";
+		wfQuery( "DELETE FROM cur", DB_MASTER );
+
+		print "Importing current revision data...\n";
+		wfQuery( "INSERT INTO cur (cur_id,cur_namespace,cur_title,cur_text,cur_comment,
+			cur_user,cur_user_text,cur_timestamp,cur_restrictions,cur_counter,
+			cur_is_redirect,cur_minor_edit,cur_is_new,cur_random,cur_touched)
+			SELECT cur_id,0,cur_title,cur_text,cur_comment,
+				cur_user,cur_user_text,cur_timestamp,REPLACE(cur_restrictions,'is_',''),cur_counter,
+				cur_text like '#redirect%',cur_minor_edit,0,RAND(),NOW()+0,
+			FROM {$this->olddb}.cur", DB_MASTER );
+		$n = mysql_affected_rows();
+		print "$n rows imported.\n";
+	}
+
+	function importOldData() {
+		print "Clearing old revision data from default install, if any...\n";
+		wfQuery( "DELETE FROM old", DB_MASTER );
+
+		print "Importing old revision data...\n";
+		wfQuery( "INSERT INTO old (old_id,old_namespace,old_title,old_text,old_comment,
+			old_user,old_user_text,old_timestamp,old_minor_edit,old_flags)
+			SELECT old_id,0,old_title,old_text,old_comment,
+				old_user,old_user_text,old_timestamp,old_minor_edit,''
+			FROM {$this->olddb}.old", DB_MASTER );
+		$n = mysql_affected_rows();
+		print "$n rows imported.\n";
+	}
+
+	function importUserData() {
+		print "Clearing users from default install, if any...\n";
+		wfQuery( "DELETE FROM user", DB_MASTER );
+
+		print "Importing user data...\n";
+		wfQuery( "INSERT INTO user (user_id,user_name,user_rights,
+			user_password,user_newpassword,user_email,user_options,user_touched)
+			SELECT user_id,user_name,REPLACE(user_rights,'is_',''),
+				MD5(CONCAT(user_id,'-',MD5(user_password))),'',user_email,user_options,NOW()+0
+			FROM {$this->olddb}.user", DB_MASTER );
+		$n = mysql_affected_rows();
+		print "$n rows imported.\n";
+	}
+
+	# A little less clean...
+	function importWatchlists() {
+		print "Clearing watchlists from default install, if any...\n";
+		wfQuery( "DELETE FROM watchlist", DB_MASTER );
+
+		print "Importing watchlists...";
+		$res = wfQuery( "SELECT user_id,user_watch FROM {$this->olddb}.user WHERE user_watch != ''", DB_MASTER );
+		$total = wfNumRows( $res );
+		$n = 0;
+		print " ($total total)\n";
+
+		while( $row = wfFetchObject( $res ) ) {
+			$id = intval( $row->user_id );
+			$list = explode( "\n", $row->user_watch );
+			foreach( $list as $page ) {
+				$title = $this->titleCache->fetch( $page );
+				if( is_null( $title ) ) {
+					print "Caught bad title '{$row->title}'\n";
+				} else {
+					$ns = $title->getNamespace();
+					$t = wfStrencode( $title->getDBkey() );
+					wfQuery( "INSERT INTO watchlist(wl_user,wl_namespace,wl_title) VALUES ($id,$ns,'$t')", DB_MASTER );
+				}
+			}
+			if( ++$n % 50 == 0 ) {
+				print "$n\n";
+			}
+		}
+		wfFreeResult( $res );
+	}
+
+	function importLinkData() {
+		# MUST BE CALLED BEFORE! fixCurTitles()
+		print "Clearing links from default install, if any...\n";
+		wfQuery( "DELETE FROM links", DB_MASTER );
+		wfQuery( "DELETE FROM brokenlinks", DB_MASTER );
+
+		print "Importing live links...";
+		wfQuery( "INSERT INTO links (l_from, l_to)
+					SELECT DISTINCT linked_from,cur_id
+					FROM {$this->olddb}.linked,{$this->olddb}.cur
+					WHERE linked_to=cur_title", DB_MASTER );
+		$n = mysql_affected_rows();
+		print "$n rows imported.\n";
+
+		print "Importing broken links...";
+		wfQuery( "INSERT INTO brokenlinks (bl_from, bl_to)
+					SELECT DISTINCT cur_id,unlinked_to
+					FROM {$this->olddb}.unlinked,{$this->olddb}.cur
+					WHERE unlinked_from=cur_title", DB_MASTER );
+		$n = mysql_affected_rows();
+		print "$n rows imported.\n";
+	}
+
+	# Fixup functions: munge data that's already been brought into tables
+	function fixCurTitles() {
+		$this->fixTitles( "cur" );
+	}
+
+	function fixOldTitles() {
+		$this->fixTitles( "old" );
+	}
+
+	function fixTitles( $table ) {
+		print "Fixing titles in $table...";
+		$res = wfQuery( "SELECT DISTINCT {$table}_title AS title FROM $table", DB_MASTER );
+		$total = wfNumRows( $res );
+		$n = 0;
+		print " ($total total)\n";
+
+		while( $row = wfFetchObject( $res ) ) {
+			$xt = wfStrencode( $row->title );
+			$title = $this->titleCache->fetch( $row->title );
+			if( is_null( $title ) ) {
+				print "Caught bad title '{$row->title}'\n";
+			} else {
+				$ns = $title->getNamespace();
+				$t = wfStrencode( $title->getDBkey() );
+				wfQuery( "UPDATE $table SET {$table}_namespace=$ns,{$table}_title='$t'
+								WHERE {$table}_namespace=0 AND {$table}_title='$xt'", DB_MASTER );
+			}
+			if( ++$n % 50 == 0 ) {
+				print "$n\n";
+			}
+		}
+		wfFreeResult( $res );
+	}
+
+	function rewriteUserOptions( $in )
+	{
+		$s = urldecode( $in );
+		$a = explode( "\n", $s );
+
+		foreach ( $a as $l ) {
+			$m = array();
+			if ( preg_match( "/^([A-Za-z0-9_]+)=(.*)/", $l, $m ) ) {
+				$ops[$m[1]] = $m[2];
+			}
+		}
+		$nops = array();
+
+		$q = strtolower( $ops["quickBar"] );
+		if ( $q == "none" ) { $q = 0; }
+		else { $q = 1; } # Default to left
+		$nops["quickbar"] = $q;
+
+		if ( $ops["markupNewTopics"] == "inverse" ) {
+			$nops["highlightbroken"] = 1;
+		}
+		$sk = substr( strtolower( $ops["skin"] ), 0, 4 );
+		if ( "star" == $sk ) { $sk = 0; }
+		else if ( "nost" == $sk ) { $sk = 1; }
+		else if ( "colo" == $sk ) { $sk = 2; }
+		else { $sk = 0; }
+		$nops["skin"] = $sk;
+
+		$u = strtolower( $ops["underlineLinks"] );
+		if ( "yes" == $u || "on" == $u ) { $nops["underline"] = 1; }
+		else { $nops["underline"] = 0; }
+
+		$t = ( (int) ($ops["hourDiff"]) );
+		if ( $t < -23 || $t > 23 ) { $t = 0; }
+		if ( 0 != $t ) { $nops["timecorrection"] = $t; }
+
+		$j = strtolower( $ops["justify"] );
+		if ( "yes" == $j || "on" == $j ) { $nops["justify"] = 1; }
+		$n = strtolower( $ops["numberHeadings"] );
+		if ( "yes" == $n || "on" == $n ) { $nops["numberheadings"] = 1; }
+		$h = strtolower( $ops["hideMinor"] );
+		if ( "yes" == $h || "on" == $h ) { $nops["hideminor"] = 1; }
+		$r = strtolower( $ops["rememberPassword"] );
+		if ( "yes" == $r || "on" == $r ) { $nops["rememberpassword"] = 1; }
+		$s = strtolower( $ops["showHover"] );
+		if ( "yes" == $s || "on" == $s ) { $nops["hover"] = 1; }
+
+		$c = $ops["cols"];
+		if ( $c < 20 || $c > 200 ) { $nops["cols"] = 80; }
+		else { $nops["cols"] = $c; }
+		$r = $ops["rows"];
+		if ( $r < 5 || $r > 100 ) { $nops["rows"] = 20; }
+		else { $nops["rows"] = $r; }
+		$r = $ops["resultsPerPage"];
+		if ( $r < 3 || $r > 500 ) { $nops["searchlimit"] = 20; }
+		else { $nops["searchlimit"] = $r; }
+		$r = $ops["viewRecentChanges"];
+		if ( $r < 10 || $r > 1000 ) { $nops["rclimit"] = 50; }
+		else { $nops["rclimit"] = $r; }
+		$nops["rcdays"] = 3;
+
+		$a = array();
+		foreach ( $nops as $oname => $oval ) {
+			array_push( $a, "$oname=$oval" );
+		}
+		$s = implode( "\n", $a );
+		return $s;
+	}
+
+	function fixUserOptions() {
+		print "Fixing user options...";
+		$res = wfQuery( "SELECT user_id,user_options FROM user", DB_MASTER );
+		$total = wfNumRows( $res );
+		$n = 0;
+		print " ($total total)\n";
+
+		while( $row = wfFetchObject( $res ) ) {
+			$id = intval( $row->user_id );
+			$option = wfStrencode( $this->rewriteUserOptions( $row->user_options ) );
+			wfQuery( "UPDATE user SET user_options='$option' WHERE user_id=$id LIMIT 1", DB_MASTER );
+			if( ++$n % 50 == 0 ) {
+				print "$n\n";
+			}
+		}
+		wfFreeResult( $res );
+	}
+
+}
+
+/**
+ * @todo document
+ * @addtogroup Maintenance
+ */
+class TitleCache {
+	var $hash = array();
+
+	function &fetch( $dbkey ) {
+		if( !isset( $this->hash[$dbkey] ) ) {
+			$this->hash[$dbkey] = Title::newFromDBkey( $dbkey );
+		}
+		return $this->hash[$dbkey];
+	}
+
+}
+
+#
+print "You should have already run the installer to create a fresh, blank database.\n";
+print "Data will be inserted into '$wgDBname'. THIS SHOULD BE EMPTY AND ANY DATA IN IN WILL BE ERASED!\n";
+print "\nIf that's not what you want, ABORT NOW!\n\n";
+
+print "Please enter the name of the old 'phase 2'-format database that will be used as a source:\n";
+print "Old database name [enciclopedia]: ";
+$olddb = readconsole();
+if( empty( $olddb ) ) $olddb = "enciclopedia";
+
+if( $olddb == $wgDBname ) {
+	die( "Can't upgrade in-place! You must create a new database and copy data into it.\n" );
+}
+
+print "\nSource database: '$olddb'\n";
+print "  Dest database: '$wgDBname'\n";
+print "Is this correct? Anything in '$wgDBname' WILL BE DESTROYED. [y/N] ";
+$response = readconsole();
+if( strtolower( $response{0} ) != 'y' ) {
+	die( "\nAborted by user.\n" );
+}
+
+print "Starting import....\n";
+
+$wgTitle = Title::newFromText( "Conversion script" );
+$importer = new Phase2Importer( $olddb );
+$importer->importAll();
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/importTextFile.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/importTextFile.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/importTextFile.php	(revision 1280)
@@ -0,0 +1,86 @@
+<?php
+
+/**
+ * Maintenance script allows creating or editing pages using
+ * the contents of a text file
+ *
+ * @addtogroup Maintenance
+ * @author Rob Church <robchur@gmail.com>
+ */
+
+$options = array( 'help', 'nooverwrite', 'norc' ); 
+$optionsWithArgs = array( 'title', 'user', 'comment' );
+require_once( 'commandLine.inc' );
+echo( "Import Text File\n\n" );
+
+if( count( $args ) < 1 || isset( $options['help'] ) ) {
+	showHelp();
+} else {
+
+	$filename = $args[0];
+	echo( "Using {$filename}..." );
+	if( is_file( $filename ) ) {
+		
+		$title = isset( $options['title'] ) ? $options['title'] : titleFromFilename( $filename );
+		$title = Title::newFromUrl( $title );
+		echo( "\nUsing title '" . $title->getPrefixedText() . "'..." );
+		
+		if( is_object( $title ) ) {
+			
+			if( !$title->exists() || !isset( $options['nooverwrite'] ) ) {
+			
+				$text = file_get_contents( $filename );
+				$user = isset( $options['user'] ) ? $options['user'] : 'Maintenance script';
+				$user = User::newFromName( $user );
+				echo( "\nUsing username '" . $user->getName() . "'..." );
+				
+				if( is_object( $user ) ) {
+				
+					$wgUser =& $user;
+					$comment = isset( $options['comment'] ) ? $options['comment'] : 'Importing text file';
+					$flags = 0 | ( isset( $options['norc'] ) ? EDIT_SUPPRESS_RC : 0 );
+					
+					echo( "\nPerforming edit..." );
+					$article = new Article( $title );
+					$article->doEdit( $text, $comment, $flags );
+					echo( "done.\n" );
+				
+				} else {
+					echo( "invalid username.\n" );
+				}
+			
+			} else {
+				echo( "page exists.\n" );
+			}
+			
+		} else {
+			echo( "invalid title.\n" );
+		}
+		
+	} else {
+		echo( "does not exist.\n" );
+	}
+
+}
+
+function titleFromFilename( $filename ) {
+	$parts = explode( '/', $filename );
+	$parts = explode( '.', $parts[ count( $parts ) - 1 ] );
+	return $parts[0];
+}
+
+function showHelp() {
+	echo( "Import the contents of a text file into a wiki page.\n" );
+	echo( "USAGE: php importTextFile.php <options> <filename>\n\n" );
+	echo( "<filename> : Path to the file containing page content to import\n\n" );
+	echo( "Options:\n\n" );
+	echo( "--title <title>\n\tTitle for the new page; default is to use the filename as a base\n" );
+	echo( "--user <user>\n\tUser to be associated with the edit\n" );
+	echo( "--comment <comment>\n\tEdit summary\n" );
+	echo( "--nooverwrite\n\tDon't overwrite existing content\n" );
+	echo( "--norc\n\tDon't update recent changes\n" );
+	echo( "--help\n\tShow this information\n" );
+	echo( "\n" );
+}
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/importUseModWiki.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/importUseModWiki.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/importUseModWiki.php	(revision 1280)
@@ -0,0 +1,365 @@
+<?php
+
+/**
+ * Import data from a UseModWiki into a MediaWiki wiki
+ * 2003-02-09 Brion VIBBER <brion@pobox.com>
+ * Based loosely on Magnus's code from 2001-2002
+ *
+ * Updated limited version to get something working temporarily
+ * 2003-10-09
+ * Be sure to run the link & index rebuilding scripts!
+ *
+ * Some more munging for charsets etc
+ * 2003-11-28
+ *
+ * Partial fix for pages starting with lowercase letters (??)
+ * and CamelCase and /Subpage link conversion
+ * 2004-11-17
+ *
+ * Rewrite output to create Special:Export format for import
+ * instead of raw SQL. Should be 'future-proof' against future
+ * schema changes.
+ * 2005-03-14
+ *
+ * @todo document
+ * @addtogroup Maintenance
+ */
+
+if( php_sapi_name() != 'cli' ) {
+	echo "Please customize the settings and run me from the command line.";
+	die( -1 );
+}
+
+/** Set these correctly! */
+$wgImportEncoding = "CP1252"; /* We convert all to UTF-8 */
+$wgRootDirectory = "/kalman/Projects/wiki2002/wiki/lib-http/db/wiki";
+
+/* On a large wiki, you might run out of memory */
+@ini_set( 'memory_limit', '40M' );
+
+/* globals */
+$wgFieldSeparator = "\xb3"; # Some wikis may use different char
+	$FS = $wgFieldSeparator ;
+	$FS1 = $FS."1" ;
+	$FS2 = $FS."2" ;
+	$FS3 = $FS."3" ;
+
+# Unicode sanitization tools
+require_once( '../includes/normal/UtfNormal.php' );
+
+$usercache = array();
+
+importPages();
+
+# ------------------------------------------------------------------------------
+
+function importPages()
+{
+	global $wgRootDirectory;
+
+	$gt = '>';
+	echo <<<END
+<?xml version="1.0" encoding="UTF-8" ?$gt
+<mediawiki xmlns="http://www.mediawiki.org/xml/export-0.1/"
+           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+           xsi:schemaLocation="http://www.mediawiki.org/xml/export-0.1/
+                               http://www.mediawiki.org/xml/export-0.1.xsd"
+           version="0.1"
+           xml:lang="en">
+<!-- generated by importUseModWiki.php -->
+
+END;
+	$letters = array(
+		'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I',
+		'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R',
+		'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'other' );
+	foreach( $letters as $letter ) {
+		$dir = "$wgRootDirectory/page/$letter";
+		if( is_dir( $dir ) )
+			importPageDirectory( $dir );
+	}
+	echo <<<END
+</mediawiki>
+
+END;
+}
+
+function importPageDirectory( $dir, $prefix = "" )
+{
+	echo "\n<!-- Checking page directory " . xmlCommentSafe( $dir ) . " -->\n";
+	$mydir = opendir( $dir );
+	while( $entry = readdir( $mydir ) ) {
+		$m = array();
+		if( preg_match( '/^(.+)\.db$/', $entry, $m ) ) {
+			echo importPage( $prefix . $m[1] );
+		} else {
+			if( is_dir( "$dir/$entry" ) ) {
+				if( $entry != '.' && $entry != '..' ) {
+					importPageDirectory( "$dir/$entry", "$entry/" );
+				}
+			} else {
+				echo "<!-- File '" . xmlCommentSafe( $entry ) . "' doesn't seem to contain an article. Skipping. -->\n";
+			}
+		}
+	}
+}
+
+
+# ------------------------------------------------------------------------------
+
+/* fetch_ functions
+	Grab a given item from the database
+	*/
+
+function useModFilename( $title ) {
+	$c = substr( $title, 0, 1 );
+	if(preg_match( '/[A-Z]/i', $c ) ) {
+		return strtoupper( $c ) . "/$title";
+	}
+	return "other/$title";
+}
+
+function fetchPage( $title )
+{
+	global $FS1,$FS2,$FS3, $wgRootDirectory;
+
+	$fname = $wgRootDirectory . "/page/" . useModFilename( $title ) . ".db";
+	if( !file_exists( $fname ) ) {
+		echo "Couldn't open file '$fname' for page '$title'.\n";
+		die( -1 );
+	}
+
+	$page = splitHash( $FS1, file_get_contents( $fname ) );
+	$section = splitHash( $FS2, $page["text_default"] );
+	$text = splitHash( $FS3, $section["data"] );
+
+	return array2object( array( "text" => $text["text"] , "summary" => $text["summary"] ,
+		"minor" => $text["minor"] , "ts" => $section["ts"] ,
+		"username" => $section["username"] , "host" => $section["host"] ) );
+}
+
+function fetchKeptPages( $title )
+{
+	global $FS1,$FS2,$FS3, $wgRootDirectory;
+
+	$fname = $wgRootDirectory . "/keep/" . useModFilename( $title ) . ".kp";
+	if( !file_exists( $fname ) ) return array();
+
+	$keptlist = explode( $FS1, file_get_contents( $fname ) );
+	array_shift( $keptlist ); # Drop the junk at beginning of file
+
+	$revisions = array();
+	foreach( $keptlist as $rev ) {
+		$section = splitHash( $FS2, $rev );
+		$text = splitHash( $FS3, $section["data"] );
+		if ( $text["text"] && $text["minor"] != "" && ( $section["ts"]*1 > 0 ) ) {
+			array_push( $revisions, array2object( array ( "text" => $text["text"] , "summary" => $text["summary"] ,
+				"minor" => $text["minor"] , "ts" => $section["ts"] ,
+				"username" => $section["username"] , "host" => $section["host"] ) ) );
+		} else {
+			echo "<!-- skipped a bad old revision -->\n";
+		}
+	}
+	return $revisions;
+}
+
+function splitHash ( $sep , $str ) {
+	$temp = explode ( $sep , $str ) ;
+	$ret = array () ;
+	for ( $i = 0; $i+1 < count ( $temp ) ; $i++ ) {
+		$ret[$temp[$i]] = $temp[++$i] ;
+		}
+	return $ret ;
+	}
+
+
+/* import_ functions
+	Take a fetched item and produce SQL
+	*/
+
+function checkUserCache( $name, $host )
+{
+	global $usercache;
+
+	if( $name ) {
+		if( in_array( $name, $usercache ) ) {
+			$userid = $usercache[$name];
+		} else {
+			# If we haven't imported user accounts
+			$userid = 0;
+		}
+		$username = str_replace( '_', ' ', $name );
+	} else {
+		$userid = 0;
+		$username = $host;
+	}
+	return array( $userid, $username );
+}
+
+function importPage( $title )
+{
+	global $usercache;
+
+	echo "\n<!-- Importing page " . xmlCommentSafe( $title ) . " -->\n";
+	$page = fetchPage( $title );
+
+	$newtitle = xmlsafe( str_replace( '_', ' ', recodeText( $title ) ) );
+
+	$munged = mungeFormat( $page->text );
+	if( $munged != $page->text ) {
+		/**
+		 * Save a *new* revision with the conversion, and put the
+		 * previous last version into the history.
+		 */
+		$next = array2object( array(
+			'text'     => $munged,
+			'minor'    => 1,
+			'username' => 'Conversion script',
+			'host'     => '127.0.0.1',
+			'ts'       => time(),
+			'summary'  => 'link fix',
+			) );
+		$revisions = array( $page, $next );
+	} else {
+		/**
+		 * Current revision:
+		 */
+		$revisions = array( $page );
+	}
+	$xml = <<<END
+	<page>
+		<title>$newtitle</title>
+
+END;
+
+	# History
+	$revisions = array_merge( $revisions, fetchKeptPages( $title ) );
+	if(count( $revisions ) == 0 ) {
+		return NULL; // Was "$sql", which does not appear to be defined.
+	}
+
+	foreach( $revisions as $rev ) {
+		$text      = xmlsafe( recodeText( $rev->text ) );
+		$minor     = ($rev->minor ? '<minor/>' : '');
+		list( /* $userid */ , $username ) = checkUserCache( $rev->username, $rev->host );
+		$username  = xmlsafe( recodeText( $username ) );
+		$timestamp = xmlsafe( timestamp2ISO8601( $rev->ts ) );
+		$comment   = xmlsafe( recodeText( $rev->summary ) );
+
+		$xml .= <<<END
+		<revision>
+			<timestamp>$timestamp</timestamp>
+			<contributor><username>$username</username></contributor>
+			$minor
+			<comment>$comment</comment>
+			<text>$text</text>
+		</revision>
+
+END;
+	}
+	$xml .= "</page>\n\n";
+	return $xml;
+}
+
+# Whee!
+function recodeText( $string ) {
+	global $wgImportEncoding;
+	# For currently latin-1 wikis
+	$string = str_replace( "\r\n", "\n", $string );
+	$string = @iconv( $wgImportEncoding, "UTF-8", $string );
+	$string = wfMungeToUtf8( $string ); # Any old &#1234; stuff
+	return $string;
+}
+
+function wfUtf8Sequence($codepoint) {
+	if($codepoint <     0x80) return chr($codepoint);
+	if($codepoint <    0x800) return chr($codepoint >>  6 & 0x3f | 0xc0) .
+                                     chr($codepoint       & 0x3f | 0x80);
+    if($codepoint <  0x10000) return chr($codepoint >> 12 & 0x0f | 0xe0) .
+                                     chr($codepoint >>  6 & 0x3f | 0x80) .
+                                     chr($codepoint       & 0x3f | 0x80);
+	if($codepoint < 0x100000) return chr($codepoint >> 18 & 0x07 | 0xf0) . # Double-check this
+	                                 chr($codepoint >> 12 & 0x3f | 0x80) .
+                                     chr($codepoint >>  6 & 0x3f | 0x80) .
+                                     chr($codepoint       & 0x3f | 0x80);
+	# Doesn't yet handle outside the BMP
+	return "&#$codepoint;";
+}
+
+function wfMungeToUtf8($string) {
+	$string = preg_replace ( '/&#([0-9]+);/e', 'wfUtf8Sequence($1)', $string );
+	$string = preg_replace ( '/&#x([0-9a-f]+);/ie', 'wfUtf8Sequence(0x$1)', $string );
+	# Should also do named entities here
+	return $string;
+}
+
+function timestamp2ISO8601( $ts ) {
+	#2003-08-05T18:30:02Z
+	return gmdate( 'Y-m-d', $ts ) . 'T' . gmdate( 'H:i:s', $ts ) . 'Z';
+}
+
+function xmlsafe( $string ) {
+	/**
+	 * The page may contain old data which has not been properly normalized.
+	 * Invalid UTF-8 sequences or forbidden control characters will make our
+	 * XML output invalid, so be sure to strip them out.
+	 */
+	$string = UtfNormal::cleanUp( $string );
+
+	$string = htmlspecialchars( $string );
+	return $string;
+}
+
+function xmlCommentSafe( $text ) {
+	return str_replace( '--', '\\-\\-', xmlsafe( recodeText( $text ) ) );
+}
+
+
+function array2object( $arr ) {
+	$o = (object)0;
+	foreach( $arr as $x => $y ) {
+		$o->$x = $y;
+	}
+	return $o;
+}
+
+
+/**
+ * Make CamelCase and /Talk links work
+ */
+function mungeFormat( $text ) {
+	global $nowiki;
+	$nowiki = array();
+	$staged = preg_replace_callback(
+		'/(<nowiki>.*?<\\/nowiki>|(?:http|https|ftp):\\S+|\[\[[^]\\n]+]])/s',
+		'nowikiPlaceholder', $text );
+
+	# This is probably not  100% correct, I'm just
+	# glancing at the UseModWiki code.
+	$upper   = "[A-Z]";
+	$lower   = "[a-z_0-9]";
+	$any     = "[A-Za-z_0-9]";
+	$camel   = "(?:$upper+$lower+$upper+$any*)";
+	$subpage = "(?:\\/$any+)";
+	$substart = "(?:\\/$upper$any*)";
+
+	$munged = preg_replace( "/(?!\\[\\[)($camel$subpage*|$substart$subpage*)\\b(?!\\]\\]|>)/",
+		'[[$1]]', $staged );
+
+	$final = preg_replace( '/' . preg_quote( placeholder() ) . '/es',
+		'array_shift( $nowiki )', $munged );
+	return $final;
+}
+
+
+function placeholder( $x = null ) {
+	return '\xffplaceholder\xff';
+}
+
+function nowikiPlaceholder( $matches ) {
+	global $nowiki;
+	$nowiki[] = $matches[1];
+	return placeholder();
+}
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/initEditCount.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/initEditCount.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/initEditCount.php	(revision 1280)
@@ -0,0 +1,85 @@
+<?php
+
+require_once "commandLine.inc";
+
+if( isset( $options['help'] ) ) {
+	die( "Batch-recalculate user_editcount fields from the revision table.
+Options:
+  --quick        Force the update to be done in a single query.
+  --background   Force replication-friendly mode; may be inefficient but
+                 avoids locking tables or lagging slaves with large updates;
+                 calculates counts on a slave if possible.
+
+Background mode will be automatically used if the server is MySQL 4.0
+(which does not support subqueries) or if multiple servers are listed
+in \$wgDBservers, usually indicating a replication environment.
+
+");
+}
+$dbw = wfGetDB( DB_MASTER );
+$user = $dbw->tableName( 'user' );
+$revision = $dbw->tableName( 'revision' );
+
+$dbver = $dbw->getServerVersion();
+
+// Autodetect mode...
+$backgroundMode = count( $wgDBservers ) > 1 ||
+	($dbw instanceof DatabaseMySql && version_compare( $dbver, '4.1' ) < 0);
+
+if( isset( $options['background'] ) ) {
+	$backgroundMode = true;
+} elseif( isset( $options['quick'] ) ) {
+	$backgroundMode = false;
+}
+
+if( $backgroundMode ) {
+	echo "Using replication-friendly background mode...\n";
+	
+	$dbr = wfGetDB( DB_SLAVE );
+	$chunkSize = 100;
+	$lastUser = $dbr->selectField( 'user', 'MAX(user_id)', '', __FUNCTION__ );
+	
+	$start = microtime( true );
+	$migrated = 0;
+	for( $min = 0; $min <= $lastUser; $min += $chunkSize ) {
+		$max = $min + $chunkSize;
+		$result = $dbr->query(
+			"SELECT
+				user_id,
+				COUNT(rev_user) AS user_editcount
+			FROM $user
+			LEFT OUTER JOIN $revision ON user_id=rev_user
+			WHERE user_id > $min AND user_id <= $max
+			GROUP BY user_id",
+			__FUNCTION__ );
+		
+		while( $row = $dbr->fetchObject( $result ) ) {
+			$dbw->update( 'user',
+				array( 'user_editcount' => $row->user_editcount ),
+				array( 'user_id' => $row->user_id ),
+				__FUNCTION__ );
+			++$migrated;
+		}
+		$dbr->freeResult( $result );
+		
+		$delta = microtime( true ) - $start;
+		$rate = ($delta == 0.0) ? 0.0 : $migrated / $delta;
+		printf( "%s %d (%0.1f%%) done in %0.1f secs (%0.3f accounts/sec).\n",
+			$wgDBname,
+			$migrated,
+			min( $max, $lastUser ) / $lastUser * 100.0,
+			$delta,
+			$rate );
+		
+		wfWaitForSlaves( 10 );
+	}
+} else {
+	// Subselect should work on modern MySQLs etc
+	echo "Using single-query mode...\n";
+	$sql = "UPDATE $user SET user_editcount=(SELECT COUNT(*) FROM $revision WHERE rev_user=user_id)";
+	$dbw->query( $sql );
+}
+
+echo "Done!\n";
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/initStats.inc
===================================================================
--- /MediaWiki/branches/1.11/maintenance/initStats.inc	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/initStats.inc	(revision 1280)
@@ -0,0 +1,55 @@
+<?php
+
+function wfInitStats( $options=array() ) {
+	$dbr = wfGetDB( DB_SLAVE );
+
+	echo "Counting total edits...";
+	$edits = $dbr->selectField( 'revision', 'COUNT(*)', '', __METHOD__ );
+	$edits += $dbr->selectField( 'archive', 'COUNT(*)', '', __METHOD__ );
+	echo "{$edits}\nCounting number of articles...";
+
+	global $wgContentNamespaces;
+	$good  = $dbr->selectField( 'page', 'COUNT(*)', array( 'page_namespace' => $wgContentNamespaces, 'page_is_redirect' => 0, 'page_len > 0' ), __METHOD__ );
+	echo "{$good}\nCounting total pages...";
+
+	$pages = $dbr->selectField( 'page', 'COUNT(*)', '', __METHOD__ );
+	echo "{$pages}\nCounting number of users...";
+
+	$users = $dbr->selectField( 'user', 'COUNT(*)', '', __METHOD__ );
+	echo "{$users}\nCounting number of admins...";
+
+	$admin = $dbr->selectField( 'user_groups', 'COUNT(*)', array( 'ug_group' => 'sysop' ), __METHOD__ );
+	echo "{$admin}\nCounting number of images...";
+
+	$image = $dbr->selectField( 'image', 'COUNT(*)', '', __METHOD__ );
+	echo "{$image}\n";
+
+	if( !isset( $options['noviews'] ) ) {
+		echo "Counting total page views...";
+		$views = $dbr->selectField( 'page', 'SUM(page_counter)', '', __METHOD__ );
+		echo "{$views}\n";
+	}
+
+	echo "\nUpdating site statistics...";
+
+	$dbw = wfGetDB( DB_MASTER );
+	$values = array( 'ss_total_edits' => $edits,
+					'ss_good_articles' => $good,
+					'ss_total_pages' => $pages,
+					'ss_users' => $users,
+					'ss_admins' => $admin,
+					'ss_images' => $image );
+	$conds = array( 'ss_row_id' => 1 );
+	$views = array( 'ss_total_views' => isset( $views ) ? $views : 0 );
+				
+	if( isset( $options['update'] ) ) {
+		$dbw->update( 'site_stats', $values, $conds, __METHOD__ );
+	} else {
+		$dbw->delete( 'site_stats', $conds, __METHOD__ );
+		$dbw->insert( 'site_stats', array_merge( $values, $conds, $views ), __METHOD__ );
+	}
+
+	echo( "done.\n" );
+}
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/initStats.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/initStats.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/initStats.php	(revision 1280)
@@ -0,0 +1,31 @@
+<?php
+
+/**
+ * Maintenance script to re-initialise or update the site statistics table
+ *
+ * @addtogroup Maintenance
+ * @author Brion Vibber
+ * @author Rob Church <robchur@gmail.com>
+ * @licence GNU General Public Licence 2.0 or later
+ */
+ 
+$options = array( 'help', 'update', 'noviews' );
+require_once( 'commandLine.inc' );
+echo( "Refresh Site Statistics\n\n" );
+
+if( isset( $options['help'] ) ) {
+	showHelp();
+	exit();
+}
+
+require "$IP/maintenance/initStats.inc";
+wfInitStats( $options );
+
+function showHelp() {
+	echo( "Re-initialise the site statistics tables.\n\n" );
+	echo( "Usage: php initStats.php [--update|--noviews]\n\n" );
+	echo( " --update : Update the existing statistics (preserves the ss_total_views field)\n" );
+	echo( "--noviews : Don't update the page view counter\n\n" );
+}
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/installExtension.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/installExtension.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/installExtension.php	(revision 1280)
@@ -0,0 +1,655 @@
+<?php
+/**
+ * Copyright (C) 2006 Daniel Kinzler, brightbyte.de
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @addtogroup Maintenance
+ */
+
+$optionsWithArgs = array( 'target', 'repository', 'repos' );
+
+require_once( 'commandLine.inc' );
+
+define('EXTINST_NOPATCH', 0);
+define('EXTINST_WRITEPATCH', 6);
+define('EXTINST_HOTPATCH', 10);
+
+class InstallerRepository {
+	var $path;
+	
+	function InstallerRepository( $path ) {
+		$this->path = $path;
+	}
+
+	function printListing( ) {
+		trigger_error( 'override InstallerRepository::printListing()', E_USER_ERROR );
+	}        
+
+	function getResource( $name ) {
+		trigger_error( 'override InstallerRepository::getResource()', E_USER_ERROR );
+	}        
+	
+	/*static*/ function makeRepository( $path, $type = NULL ) {
+		if ( !$type ) {
+			$m = array();
+			preg_match( '!(([-+\w]+)://)?.*?(\.[-\w\d.]+)?$!', $path, $m );
+			$proto = @$m[2];
+			
+			if ( !$proto ) {
+				$type = 'dir';
+			} else if ( ( $proto == 'http' || $proto == 'https' ) && preg_match( '!([^\w]svn|svn[^\w])!i', $path) ) {
+				$type = 'svn'; #HACK!
+			} else  {
+				$type = $proto;
+			}
+		}
+		
+		if ( $type == 'dir' || $type == 'file' ) { return new LocalInstallerRepository( $path ); }
+		else if ( $type == 'http' || $type == 'http' ) { return new WebInstallerRepository( $path ); }
+		else { return new SVNInstallerRepository( $path ); }
+	}
+}
+
+class LocalInstallerRepository extends InstallerRepository {
+
+	function LocalInstallerRepository ( $path ) {
+		InstallerRepository::InstallerRepository( $path );
+	}
+
+	function printListing( ) {
+		$ff = glob( "{$this->path}/*" );
+		if ( $ff === false || $ff === NULL ) {
+			ExtensionInstaller::error( "listing directory {$this->path} failed!" );
+			return false;
+		}
+		
+		foreach ( $ff as $f ) {
+			$n = basename($f);
+			
+			if ( !is_dir( $f ) ) {
+				$m = array();
+				if ( !preg_match( '/(.*)\.(tgz|tar\.gz|zip)/', $n, $m ) ) continue;
+				$n = $m[1];
+			}
+
+			print "\t$n\n";
+		}
+	}        
+
+	function getResource( $name ) {
+		$path = $this->path . '/' . $name;
+
+		if ( !file_exists( $path ) || !is_dir( $path ) ) $path = $this->path . '/' . $name . '.tgz';
+		if ( !file_exists( $path ) ) $path = $this->path . '/' . $name . '.tar.gz';
+		if ( !file_exists( $path ) ) $path = $this->path . '/' . $name . '.zip';
+
+		return new LocalInstallerResource( $path );
+	}        
+}
+
+class WebInstallerRepository extends InstallerRepository {
+
+	function WebInstallerRepository ( $path ) {
+		InstallerRepository::InstallerRepository( $path );
+	}
+
+	function printListing( ) {
+		ExtensionInstaller::note( "listing index from {$this->path}..." );
+		
+		$txt = @file_get_contents( $this->path . '/index.txt' );
+		if ( $txt ) {
+			print $txt;
+			print "\n";
+		}
+		else {
+			$txt = file_get_contents( $this->path );
+			if ( !$txt ) {
+				ExtensionInstaller::error( "listing index from {$this->path} failed!" );
+				print ( $txt );
+				return false;
+			}
+
+			$m = array();
+			$ok = preg_match_all( '!<a\s[^>]*href\s*=\s*['."'".'"]([^/'."'".'"]+)\.tgz['."'".'"][^>]*>.*?</a>!si', $txt, $m, PREG_SET_ORDER ); 
+			if ( !$ok ) {
+				ExtensionInstaller::error( "listing index from {$this->path} does not match!" );
+				print ( $txt );
+				return false;
+			}
+			
+			foreach ( $m as $l ) {
+				$n = $l[1];
+				print "\t$n\n";
+			}
+		}
+	}        
+
+	function getResource( $name ) {
+		$path = $this->path . '/' . $name . '.tgz';
+		return new WebInstallerResource( $path );
+	}        
+}
+
+class SVNInstallerRepository extends InstallerRepository {
+
+	function SVNInstallerRepository ( $path ) {
+		InstallerRepository::InstallerRepository( $path );
+	}
+
+	function printListing( ) {
+		ExtensionInstaller::note( "SVN list {$this->path}..." );
+		$code = null; // Shell Exec return value.
+		$txt = wfShellExec( 'svn ls ' . escapeshellarg( $this->path ), $code );
+		if ( $code !== 0 ) {
+			ExtensionInstaller::error( "svn list for {$this->path} failed!" );
+			return false;
+		}
+		
+		$ll = preg_split('/(\s*[\r\n]\s*)+/', $txt);
+		
+		foreach ( $ll as $line ) {
+			$m = array();
+			if ( !preg_match('!^(.*)/$!', $line, $m) ) continue;
+			$n = $m[1];
+			          
+			print "\t$n\n";
+		}
+	}        
+
+	function getResource( $name ) {
+		$path = $this->path . '/' . $name;
+		return new SVNInstallerResource( $path );
+	}        
+}
+
+class InstallerResource {
+	var $path;
+	var $isdir;
+	var $islocal;
+	
+	function InstallerResource( $path, $isdir, $islocal ) {
+		$this->path = $path;
+		
+		$this->isdir= $isdir;
+		$this->islocal = $islocal;
+
+		$m = array();
+		preg_match( '!([-+\w]+://)?.*?(\.[-\w\d.]+)?$!', $path, $m );
+
+		$this->protocol = @$m[1];
+		$this->extensions = @$m[2];
+
+		if ( $this->extensions ) $this->extensions = strtolower( $this->extensions );
+	}
+
+	function fetch( $target ) {
+		trigger_error( 'override InstallerResource::fetch()', E_USER_ERROR );
+	}        
+
+	function extract( $file, $target ) {
+		
+		if ( $this->extensions == '.tgz' || $this->extensions == '.tar.gz' ) { #tgz file
+			ExtensionInstaller::note( "extracting $file..." );
+			$code = null; // shell Exec return value.
+			wfShellExec( 'tar zxvf ' . escapeshellarg( $file ) . ' -C ' . escapeshellarg( $target ), $code );
+			
+			if ( $code !== 0 ) {
+				ExtensionInstaller::error( "failed to extract $file!" );
+				return false;
+			}
+		}
+		else if ( $this->extensions == '.zip' ) { #zip file
+			ExtensionInstaller::note( "extracting $file..." );
+			$code = null; // shell Exec return value.
+			wfShellExec( 'unzip ' . escapeshellarg( $file ) . ' -d ' . escapeshellarg( $target ) , $code );
+			
+			if ( $code !== 0 ) {
+				ExtensionInstaller::error( "failed to extract $file!" );
+				return false;
+			}
+		}
+		else { 
+			ExtensionInstaller::error( "unknown extension {$this->extensions}!" );
+			return false;
+		}
+
+		return true;
+	}        
+
+	/*static*/ function makeResource( $url ) {
+		$m = array();
+		preg_match( '!(([-+\w]+)://)?.*?(\.[-\w\d.]+)?$!', $url, $m );
+		$proto = @$m[2];
+		$ext = @$m[3];
+		if ( $ext ) $ext = strtolower( $ext );
+		
+		if ( !$proto ) { return new LocalInstallerResource( $url, $ext ? false : true ); }
+		else if ( $ext && ( $proto == 'http' || $proto == 'http' || $proto == 'ftp' ) ) { return new WebInstallerResource( $url ); }
+		else { return new SVNInstallerResource( $url ); }
+	}
+}
+
+class LocalInstallerResource extends InstallerResource {
+	function LocalInstallerResource( $path ) {
+		InstallerResource::InstallerResource( $path, is_dir( $path ), true );
+	}
+        
+	function fetch( $target ) {
+		if ( $this->isdir ) return ExtensionInstaller::copyDir( $this->path, dirname( $target ) );
+		else return $this->extract( $this->path, dirname( $target ) );
+	}
+        
+}
+
+class WebInstallerResource extends InstallerResource {
+	function WebInstallerResource( $path ) {
+		InstallerResource::InstallerResource( $path, false, false );
+	}
+        
+	function fetch( $target ) {
+		$tmp = wfTempDir() . '/' . basename( $this->path );
+		
+		ExtensionInstaller::note( "downloading {$this->path}..." );
+		$ok = copy( $this->path, $tmp );
+		
+		if ( !$ok ) {
+			ExtensionInstaller::error( "failed to download {$this->path}" );
+			return false;
+		}
+		
+		$this->extract( $tmp, dirname( $target ) );
+		unlink($tmp);
+		
+		return true;
+	}        
+}
+
+class SVNInstallerResource extends InstallerResource {
+	function SVNInstallerResource( $path ) {
+		InstallerResource::InstallerResource( $path, true, false );
+	}
+        
+	function fetch( $target ) {
+		ExtensionInstaller::note( "SVN checkout of {$this->path}..." );
+		$code = null; // shell exec return val.
+		wfShellExec( 'svn co ' . escapeshellarg( $this->path ) . ' ' . escapeshellarg( $target ), $code );
+
+		if ( $code !== 0 ) {
+			ExtensionInstaller::error( "checkout failed for {$this->path}!" );
+			return false;
+		}
+		
+		return true;
+	}        
+}
+
+class ExtensionInstaller {
+	var $source;
+	var $target;
+	var $name;
+	var $dir;
+	var $tasks;
+
+	function ExtensionInstaller( $name, $source, $target ) {
+		if ( !is_object( $source ) ) $source = InstallerResource::makeResource( $source );
+
+		$this->name = $name;
+		$this->source = $source;
+		$this->target = realpath( $target );
+		$this->extdir = "$target/extensions";
+		$this->dir = "{$this->extdir}/$name";
+		$this->incpath = "extensions/$name";
+		$this->tasks = array();
+		
+		#TODO: allow a subdir different from "extensions"
+		#TODO: allow a config file different from "LocalSettings.php"
+	}
+
+	function note( $msg ) {
+		print "$msg\n";
+	}
+
+	function warn( $msg ) {
+		print "WARNING: $msg\n";
+	}
+
+	function error( $msg ) {
+		print "ERROR: $msg\n";
+	}
+
+	function prompt( $msg ) {
+		if ( function_exists( 'readline' ) ) {
+			$s = readline( $msg );
+		}
+		else {
+			if ( !@$this->stdin ) $this->stdin = fopen( 'php://stdin', 'r' );
+			if ( !$this->stdin ) die( "Failed to open stdin for user interaction!\n" );
+			
+			print $msg;
+			flush();
+			
+			$s = fgets( $this->stdin );
+		}
+		
+		$s = trim( $s );
+		return $s;                
+	}
+
+	function confirm( $msg ) {
+		while ( true ) {        
+			$s = $this->prompt( $msg . " [yes/no]: ");
+			$s = strtolower( trim($s) );
+			
+			if ( $s == 'yes' || $s == 'y' ) { return true; }
+			else if ( $s == 'no' || $s == 'n' ) { return false; }
+			else { print "bad response: $s\n"; }
+		}
+	}
+
+	function deleteContents( $dir ) {
+		$ff = glob( $dir . "/*" );
+		if ( !$ff ) return;
+
+		foreach ( $ff as $f ) {
+			if ( is_dir( $f ) && !is_link( $f ) ) $this->deleteContents( $f );
+			unlink( $f );
+		}
+	}
+        
+	function copyDir( $dir, $tgt ) {
+		$d = $tgt . '/' . basename( $dir );
+		
+		if ( !file_exists( $d ) ) {
+			$ok = mkdir( $d );
+			if ( !$ok ) {
+				ExtensionInstaller::error( "failed to create director $d" );
+				return false;
+			}
+		}
+
+		$ff = glob( $dir . "/*" );
+		if ( $ff === false || $ff === NULL ) return false;
+
+		foreach ( $ff as $f ) {
+			if ( is_dir( $f ) && !is_link( $f ) ) {
+				$ok = ExtensionInstaller::copyDir( $f, $d );
+				if ( !$ok ) return false;
+			}
+			else {
+				$t = $d . '/' . basename( $f );
+				$ok = copy( $f, $t );
+
+				if ( !$ok ) {
+					ExtensionInstaller::error( "failed to copy $f to $t" );
+					return false;
+				}
+			}
+		}
+		
+		return true;
+	}
+
+	function setPermissions( $dir, $dirbits, $filebits ) {
+		if ( !chmod( $dir, $dirbits ) ) ExtensionInstaller::warn( "faield to set permissions for $dir" );
+        
+		$ff = glob( $dir . "/*" );
+		if ( $ff === false || $ff === NULL ) return false;
+
+		foreach ( $ff as $f ) {
+			$n= basename( $f );
+			if ( $n{0} == '.' ) continue; #HACK: skip dot files
+			
+			if ( is_link( $f ) ) continue; #skip link
+			
+			if ( is_dir( $f ) ) {
+				ExtensionInstaller::setPermissions( $f, $dirbits, $filebits );
+			}
+			else {
+				if ( !chmod( $f, $filebits ) ) ExtensionInstaller::warn( "faield to set permissions for $f" );
+			}
+		}
+		
+		return true;
+	}
+
+	function fetchExtension( ) {
+		if ( $this->source->islocal && $this->source->isdir && realpath( $this->source->path ) === $this->dir ) {
+			$this->note( "files are already in the extension dir" );
+			return true;
+		}
+
+		if ( file_exists( $this->dir ) && glob( $this->dir . "/*" ) ) {
+			if ( $this->confirm( "{$this->dir} exists and is not empty.\nDelete all files in that directory?" ) ) {
+				$this->deleteContents( $this->dir );
+			}                        
+			else {
+				return false;
+			}                        
+		}
+
+		$ok = $this->source->fetch( $this->dir );
+		if ( !$ok ) return false;
+
+		if ( !file_exists( $this->dir ) && glob( $this->dir . "/*" ) ) {
+			$this->error( "{$this->dir} does not exist or is empty. Something went wrong, sorry." );
+			return false;
+		}
+
+		if ( file_exists( $this->dir . '/README' ) ) $this->tasks[] = "read the README file in {$this->dir}";
+		if ( file_exists( $this->dir . '/INSTALL' ) ) $this->tasks[] = "read the INSTALL file in {$this->dir}";
+		if ( file_exists( $this->dir . '/RELEASE-NOTES' ) ) $this->tasks[] = "read the RELEASE-NOTES file in {$this->dir}";
+
+		#TODO: configure this smartly...?
+		$this->setPermissions( $this->dir, 0755, 0644 );
+
+		$this->note( "fetched extension to {$this->dir}" );
+		return true;
+	}
+
+	function patchLocalSettings( $mode ) {
+		#NOTE: if we get a better way to hook up extensions, that should be used instead.
+
+		$f = $this->dir . '/install.settings';
+		$t = $this->target . '/LocalSettings.php';
+		
+		#TODO: assert version ?!
+		#TODO: allow custom installer scripts + sql patches
+		
+		if ( !file_exists( $f ) ) {
+			$this->warn( "No install.settings file provided!" );
+			$this->tasks[] = "Please read the instructions and edit LocalSettings.php manually to activate the extension.";
+			return '?';
+		}
+		else {
+			$this->note( "applying settings patch..." );
+		}
+		
+		$settings = file_get_contents( $f );
+		                
+		if ( !$settings ) {
+			$this->error( "failed to read settings from $f!" );
+			return false;
+		}
+		                
+		$settings = str_replace( '{{path}}', $this->incpath, $settings );
+		
+		if ( $mode == EXTINST_NOPATCH ) {
+			$this->tasks[] = "Please put the following into your LocalSettings.php:" . "\n$settings\n";
+			$this->note( "Skipping patch phase, automatic patching is off." );
+			return true;
+		}
+		
+		if ( $mode == EXTINST_HOTPATCH ) {
+			#NOTE: keep php extension for backup file!
+			$bak = $this->target . '/LocalSettings.install-' . $this->name . '-' . wfTimestamp(TS_MW) . '.bak.php';
+			                
+			$ok = copy( $t, $bak );
+			                
+			if ( !$ok ) {
+				$this->warn( "failed to create backup of LocalSettings.php!" );
+				return false;
+			}
+			else {
+				$this->note( "created backup of LocalSettings.php at $bak" );
+			}
+		}
+		                
+		$localsettings = file_get_contents( $t );
+		                
+		if ( !$settings ) {
+			$this->error( "failed to read $t for patching!" );
+			return false;
+		}
+		                
+		$marker = "<@< extension {$this->name} >@>";
+		$blockpattern = "/\n\s*#\s*BEGIN\s*$marker.*END\s*$marker\s*/smi";
+		
+		if ( preg_match( $blockpattern, $localsettings ) ) {
+			$localsettings = preg_replace( $blockpattern, "\n", $localsettings );
+			$this->warn( "removed old configuration block for extension {$this->name}!" );
+		}
+		
+		$newblock= "\n# BEGIN $marker\n$settings\n# END $marker\n";
+		
+		$localsettings = preg_replace( "/\?>\s*$/si", "$newblock?>", $localsettings );
+		
+		if ( $mode != EXTINST_HOTPATCH ) {
+			$t = $this->target . '/LocalSettings.install-' . $this->name . '-' . wfTimestamp(TS_MW) . '.php';
+		}
+		
+		$ok = file_put_contents( $t, $localsettings );
+		
+		if ( !$ok ) {
+			$this->error( "failed to patch $t!" );
+			return false;
+		}
+		else if ( $mode == EXTINST_HOTPATCH ) {
+			$this->note( "successfully patched $t" );
+		}
+		else  {
+			$this->note( "created patched settings file $t" );
+			$this->tasks[] = "Replace your current LocalSettings.php with ".basename($t);
+		}
+		
+		return true;
+	}
+
+	function printNotices( ) {
+		if ( !$this->tasks ) {
+			$this->note( "Installation is complete, no pending tasks" );
+		}
+		else {
+			$this->note( "" );
+			$this->note( "PENDING TASKS:" );
+			$this->note( "" );
+			   
+			foreach ( $this->tasks as $t ) {
+				$this->note ( "* " . $t );
+			}
+			
+			$this->note( "" );
+		}
+		
+		return true;
+	}
+        
+}
+
+$tgt = isset ( $options['target'] ) ? $options['target'] : $IP;
+
+$repos = @$options['repository'];
+if ( !$repos ) $repos = @$options['repos'];
+if ( !$repos ) $repos = @$wgExtensionInstallerRepository;
+
+if ( !$repos && file_exists("$tgt/.svn") && is_dir("$tgt/.svn") ) {
+	$svn = file_get_contents( "$tgt/.svn/entries" );
+	
+	$m = array();
+	if ( preg_match( '!url="(.*?)"!', $svn, $m ) ) {
+		$repos = dirname( $m[1] ) . '/extensions';
+	}
+}
+
+if ( !$repos ) $repos = 'http://svn.wikimedia.org/svnroot/mediawiki/trunk/extensions';
+
+if( !isset( $args[0] ) && !@$options['list'] ) {
+	die( "USAGE: installExtension.php [options] <name> [source]\n" .
+		"OPTIONS: \n" . 
+		"    --list            list available extensions. <name> is ignored / may be omitted.\n" .
+		"    --repository <n>  repository to fetch extensions from. May be a local directoy,\n" .
+		"                      an SVN repository or a HTTP directory\n" .
+		"    --target <dir>    mediawiki installation directory to use\n" .
+		"    --nopatch         don't create a patched LocalSettings.php\n" .
+		"    --hotpatch        patched LocalSettings.php directly (creates a backup)\n" .
+		"SOURCE: specifies the package source directly. If given, the repository is ignored.\n" . 
+		"        The source my be a local file (tgz or zip) or directory, the URL of a\n" .
+		"        remote file (tgz or zip), or a SVN path.\n" 
+                );
+}
+
+$repository = InstallerRepository::makeRepository( $repos );
+
+if ( isset( $options['list'] ) ) {
+	$repository->printListing();
+	exit(0);
+}
+
+$name = $args[0];
+
+$src = isset( $args[1] ) ? $args[1] : $repository->getResource( $name );
+
+#TODO: detect $source mismatching $name !!
+
+$mode = EXTINST_WRITEPATCH;
+if ( isset( $options['nopatch'] ) || @$wgExtensionInstallerNoPatch ) { $mode = EXTINST_NOPATCH; }
+else if ( isset( $options['hotpatch'] ) || @$wgExtensionInstallerHotPatch ) { $mode = EXTINST_HOTPATCH; }
+
+if ( !file_exists( "$tgt/LocalSettings.php" ) ) {
+	die("can't find $tgt/LocalSettings.php\n");
+}
+
+if ( $mode == EXTINST_HOTPATCH && !is_writable( "$tgt/LocalSettings.php" ) ) {
+	die("can't write to  $tgt/LocalSettings.php\n");
+}
+
+if ( !file_exists( "$tgt/extensions" ) ) {
+	die("can't find $tgt/extensions\n");
+}
+
+if ( !is_writable( "$tgt/extensions" ) ) {
+	die("can't write to  $tgt/extensions\n");
+}
+
+$installer = new ExtensionInstaller( $name, $src, $tgt );
+
+$installer->note( "Installing extension {$installer->name} from {$installer->source->path} to {$installer->dir}" );
+
+print "\n";
+print "\tTHIS TOOL IS EXPERIMENTAL!\n";
+print "\tEXPECT THE UNEXPECTED!\n";
+print "\n";
+
+if ( !$installer->confirm("continue") ) die("aborted\n");
+
+$ok = $installer->fetchExtension();
+
+if ( $ok ) $ok = $installer->patchLocalSettings( $mode );
+
+if ( $ok ) $ok = $installer->printNotices();
+
+if ( $ok ) $installer->note( "$name extension installed." );
+?>
Index: /MediaWiki/branches/1.11/maintenance/interwiki.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/interwiki.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/interwiki.sql	(revision 1280)
@@ -0,0 +1,182 @@
+-- Based more or less on the public interwiki map from MeatballWiki
+-- Default interwiki prefixes...
+
+REPLACE INTO /*$wgDBprefix*/interwiki (iw_prefix,iw_url,iw_local) VALUES
+('abbenormal','http://www.ourpla.net/cgi-bin/pikie.cgi?$1',0),
+('acadwiki','http://xarch.tu-graz.ac.at/autocad/wiki/$1',0),
+('acronym','http://www.acronymfinder.com/af-query.asp?String=exact&Acronym=$1',0),
+('advogato','http://www.advogato.org/$1',0),
+('aiwiki','http://www.ifi.unizh.ch/ailab/aiwiki/aiw.cgi?$1',0),
+('alife','http://news.alife.org/wiki/index.php?$1',0),
+('annotation','http://bayle.stanford.edu/crit/nph-med.cgi/$1',0),
+('annotationwiki','http://www.seedwiki.com/page.cfm?wikiid=368&doc=$1',0),
+('arxiv','http://www.arxiv.org/abs/$1',0),
+('aspienetwiki','http://aspie.mela.de/Wiki/index.php?title=$1',0),
+('bemi','http://bemi.free.fr/vikio/index.php?$1',0),
+('benefitswiki','http://www.benefitslink.com/cgi-bin/wiki.cgi?$1',0),
+('brasilwiki','http://rio.ifi.unizh.ch/brasilienwiki/index.php/$1',0),
+('bridgeswiki','http://c2.com/w2/bridges/$1',0),
+('c2find','http://c2.com/cgi/wiki?FindPage&value=$1',0),
+('cache','http://www.google.com/search?q=cache:$1',0),
+('ciscavate','http://ciscavate.org/index.php/$1',0),
+('cliki','http://ww.telent.net/cliki/$1',0),
+('cmwiki','http://www.ourpla.net/cgi-bin/wiki.pl?$1',0),
+('codersbase','http://www.codersbase.com/$1',0),
+('commons','http://commons.wikimedia.org/wiki/$1',0),
+('consciousness','http://teadvus.inspiral.org/',0),
+('corpknowpedia','http://corpknowpedia.org/wiki/index.php/$1',0),
+('creationmatters','http://www.ourpla.net/cgi-bin/wiki.pl?$1',0),
+('dejanews','http://www.deja.com/=dnc/getdoc.xp?AN=$1',0),
+('demokraatia','http://wiki.demokraatia.ee/',0),
+('dictionary','http://www.dict.org/bin/Dict?Database=*&Form=Dict1&Strategy=*&Query=$1',0),
+('disinfopedia','http://www.disinfopedia.org/wiki.phtml?title=$1',0),
+('diveintoosx','http://diveintoosx.org/$1',0),
+('docbook','http://docbook.org/wiki/moin.cgi/$1',0),
+('dolphinwiki','http://www.object-arts.com/wiki/html/Dolphin/$1',0),
+('drumcorpswiki','http://www.drumcorpswiki.com/index.php/$1',0),
+('dwjwiki','http://www.suberic.net/cgi-bin/dwj/wiki.cgi?$1',0),
+('eĉei','http://www.ikso.net/cgi-bin/wiki.pl?$1',0),
+('echei','http://www.ikso.net/cgi-bin/wiki.pl?$1',0),
+('ecxei','http://www.ikso.net/cgi-bin/wiki.pl?$1',0),
+('efnetceewiki','http://purl.net/wiki/c/$1',0),
+('efnetcppwiki','http://purl.net/wiki/cpp/$1',0),
+('efnetpythonwiki','http://purl.net/wiki/python/$1',0),
+('efnetxmlwiki','http://purl.net/wiki/xml/$1',0),
+('eljwiki','http://elj.sourceforge.net/phpwiki/index.php/$1',0),
+('emacswiki','http://www.emacswiki.org/cgi-bin/wiki.pl?$1',0),
+('elibre','http://enciclopedia.us.es/index.php/$1',0),
+('eokulturcentro','http://esperanto.toulouse.free.fr/wakka.php?wiki=$1',0),
+('evowiki','http://www.evowiki.org/index.php/$1',0),
+('finalempire','http://final-empire.sourceforge.net/cgi-bin/wiki.pl?$1',0),
+('firstwiki','http://firstwiki.org/index.php/$1',0),
+('foldoc','http://www.foldoc.org/foldoc/foldoc.cgi?$1',0),
+('foxwiki','http://fox.wikis.com/wc.dll?Wiki~$1',0),
+('fr.be','http://fr.wikinations.be/$1',0),
+('fr.ca','http://fr.ca.wikinations.org/$1',0),
+('fr.fr','http://fr.fr.wikinations.org/$1',0),
+('fr.org','http://fr.wikinations.org/$1',0),
+('freebsdman','http://www.FreeBSD.org/cgi/man.cgi?apropos=1&query=$1',0),
+('gamewiki','http://gamewiki.org/wiki/index.php/$1',0),
+('gej','http://www.esperanto.de/cgi-bin/aktivikio/wiki.pl?$1',0),
+('gentoo-wiki','http://gentoo-wiki.com/$1',0),
+('globalvoices','http://cyber.law.harvard.edu/dyn/globalvoices/wiki/$1',0),
+('gmailwiki','http://www.gmailwiki.com/index.php/$1',0),
+('google','http://www.google.com/search?q=$1',0),
+('googlegroups','http://groups.google.com/groups?q=$1',0),
+('gotamac','http://www.got-a-mac.org/$1',0),
+('greencheese','http://www.greencheese.org/$1',0),
+('hammondwiki','http://www.dairiki.org/HammondWiki/index.php3?$1',0),
+('haribeau','http://wiki.haribeau.de/cgi-bin/wiki.pl?$1',0),
+('hewikisource','http://he.wikisource.org/wiki/$1',1),
+('herzkinderwiki','http://www.herzkinderinfo.de/Mediawiki/index.php/$1',0),
+('hrwiki','http://www.hrwiki.org/index.php/$1',0),
+('iawiki','http://www.IAwiki.net/$1',0),
+('imdb','http://us.imdb.com/Title?$1',0),
+('infosecpedia','http://www.infosecpedia.org/pedia/index.php/$1',0),
+('jargonfile','http://sunir.org/apps/meta.pl?wiki=JargonFile&redirect=$1',0),
+('jefo','http://www.esperanto-jeunes.org/vikio/index.php?$1',0),
+('jiniwiki','http://www.cdegroot.com/cgi-bin/jini?$1',0),
+('jspwiki','http://www.ecyrd.com/JSPWiki/Wiki.jsp?page=$1',0),
+('kerimwiki','http://wiki.oxus.net/$1',0),
+('kmwiki','http://www.voght.com/cgi-bin/pywiki?$1',0),
+('knowhow','http://www2.iro.umontreal.ca/~paquetse/cgi-bin/wiki.cgi?$1',0),
+('lanifexwiki','http://opt.lanifex.com/cgi-bin/wiki.pl?$1',0),
+('lasvegaswiki','http://wiki.gmnow.com/index.php/$1',0),
+('linuxwiki','http://www.linuxwiki.de/$1',0),
+('lojban','http://www.lojban.org/tiki/tiki-index.php?page=$1',0),
+('lqwiki','http://wiki.linuxquestions.org/wiki/$1',0),
+('lugkr','http://lug-kr.sourceforge.net/cgi-bin/lugwiki.pl?$1',0),
+('lutherwiki','http://www.lutheranarchives.com/mw/index.php/$1',0),
+('mathsongswiki','http://SeedWiki.com/page.cfm?wikiid=237&doc=$1',0),
+('mbtest','http://www.usemod.com/cgi-bin/mbtest.pl?$1',0),
+('meatball','http://www.usemod.com/cgi-bin/mb.pl?$1',0),
+('mediazilla','http://bugzilla.wikipedia.org/$1',1),
+('mediawikiwiki','http://www.mediawiki.org/wiki/$1',0),
+('memoryalpha','http://www.memory-alpha.org/en/index.php/$1',0),
+('metaweb','http://www.metaweb.com/wiki/wiki.phtml?title=$1',0),
+('metawiki','http://sunir.org/apps/meta.pl?$1',0),
+('metawikipedia','http://meta.wikimedia.org/wiki/$1',0),
+('moinmoin','http://purl.net/wiki/moin/$1',0),
+('mozillawiki','http://wiki.mozilla.org/index.php/$1',0),
+('muweb','http://www.dunstable.com/scripts/MuWebWeb?$1',0),
+('netvillage','http://www.netbros.com/?$1',0),
+('oeis','http://www.research.att.com/cgi-bin/access.cgi/as/njas/sequences/eisA.cgi?Anum=$1',0),
+('openfacts','http://openfacts.berlios.de/index.phtml?title=$1',0),
+('openwiki','http://openwiki.com/?$1',0),
+('opera7wiki','http://nontroppo.org/wiki/$1',0),
+('orgpatterns','http://www.bell-labs.com/cgi-user/OrgPatterns/OrgPatterns?$1',0),
+('osi reference model','http://wiki.tigma.ee/',0),
+('pangalacticorg','http://www.pangalactic.org/Wiki/$1',0),
+('personaltelco','http://www.personaltelco.net/index.cgi/$1',0),
+('patwiki','http://gauss.ffii.org/$1',0),
+('phpwiki','http://phpwiki.sourceforge.net/phpwiki/index.php?$1',0),
+('pikie','http://pikie.darktech.org/cgi/pikie?$1',0),
+('pmeg','http://www.bertilow.com/pmeg/$1.php',0),
+('ppr','http://c2.com/cgi/wiki?$1',0),
+('purlnet','http://purl.oclc.org/NET/$1',0),
+('pythoninfo','http://www.python.org/cgi-bin/moinmoin/$1',0),
+('pythonwiki','http://www.pythonwiki.de/$1',0),
+('pywiki','http://www.voght.com/cgi-bin/pywiki?$1',0),
+('raec','http://www.raec.clacso.edu.ar:8080/raec/Members/raecpedia/$1',0),
+('revo','http://purl.org/NET/voko/revo/art/$1.html',0),
+('rfc','http://www.rfc-editor.org/rfc/rfc$1.txt',0),
+('s23wiki','http://is-root.de/wiki/index.php/$1',0),
+('scoutpedia','http://www.scoutpedia.info/index.php/$1',0),
+('seapig','http://www.seapig.org/$1',0),
+('seattlewiki','http://seattlewiki.org/wiki/$1',0),
+('seattlewireless','http://seattlewireless.net/?$1',0),
+('seeds','http://www.IslandSeeds.org/wiki/$1',0),
+('senseislibrary','http://senseis.xmp.net/?$1',0),
+('shakti','http://cgi.algonet.se/htbin/cgiwrap/pgd/ShaktiWiki/$1',0),
+('slashdot','http://slashdot.org/article.pl?sid=$1',0),
+('smikipedia','http://www.smikipedia.org/$1',0),
+('sockwiki','http://wiki.socklabs.com/$1',0),
+('sourceforge','http://sourceforge.net/$1',0),
+('squeak','http://minnow.cc.gatech.edu/squeak/$1',0),
+('strikiwiki','http://ch.twi.tudelft.nl/~mostert/striki/teststriki.pl?$1',0),
+('susning','http://www.susning.nu/$1',0),
+('svgwiki','http://www.protocol7.com/svg-wiki/default.asp?$1',0),
+('tavi','http://tavi.sourceforge.net/$1',0),
+('tejo','http://www.tejo.org/vikio/$1',0),
+('terrorwiki','http://www.liberalsagainstterrorism.com/wiki/index.php/$1',0),
+('tmbw','http://www.tmbw.net/wiki/index.php/$1',0),
+('tmnet','http://www.technomanifestos.net/?$1',0),
+('tmwiki','http://www.EasyTopicMaps.com/?page=$1',0),
+('turismo','http://www.tejo.org/turismo/$1',0),
+('theopedia','http://www.theopedia.com/$1',0),
+('twiki','http://twiki.org/cgi-bin/view/$1',0),
+('twistedwiki','http://purl.net/wiki/twisted/$1',0),
+('uea','http://www.tejo.org/uea/$1',0),
+('unreal','http://wiki.beyondunreal.com/wiki/$1',0),
+('ursine','http://wiki.ursine.ca/$1',0),
+('usej','http://www.tejo.org/usej/$1',0),
+('usemod','http://www.usemod.com/cgi-bin/wiki.pl?$1',0),
+('visualworks','http://wiki.cs.uiuc.edu/VisualWorks/$1',0),
+('warpedview','http://www.warpedview.com/index.php/$1',0),
+('webdevwikinl','http://www.promo-it.nl/WebDevWiki/index.php?page=$1',0),
+('webisodes','http://www.webisodes.org/$1',0),
+('webseitzwiki','http://webseitz.fluxent.com/wiki/$1',0),
+('why','http://clublet.com/c/c/why?$1',0),
+('wiki','http://c2.com/cgi/wiki?$1',0),
+('wikia','http://www.wikia.com/wiki/$1',0),
+('wikibooks','http://en.wikibooks.org/wiki/$1',1),
+('wikicities','http://www.wikicities.com/index.php/$1',0),
+('wikif1','http://www.wikif1.org/$1',0),
+('wikihow','http://www.wikihow.com/$1',0),
+('wikinfo','http://www.wikinfo.org/wiki.php?title=$1',0),
+('wikimedia','http://wikimediafoundation.org/wiki/$1',0),
+('wikiquote','http://en.wikiquote.org/wiki/$1',1),
+('wikinews','http://en.wikinews.org/wiki/$1',0),
+('wikisource','http://sources.wikipedia.org/wiki/$1',1),
+('wikispecies','http://species.wikipedia.org/wiki/$1',1),
+('wikitravel','http://wikitravel.org/en/$1',0),
+('wikiworld','http://WikiWorld.com/wiki/index.php/$1',0),
+('wiktionary','http://en.wiktionary.org/wiki/$1',1),
+('wikipedia', 'http://en.wikipedia.org/wiki/$1', 1),
+('wlug','http://www.wlug.org.nz/$1',0),
+('wlwiki','http://winslowslair.supremepixels.net/wiki/index.php/$1',0),
+('ypsieyeball','http://sknkwrks.dyndns.org:1957/writewiki/wiki.pl?$1',0),
+('zwiki','http://www.zwiki.org/$1',0),
+('zzz wiki','http://wiki.zzz.ee/',0),
+('wikt','http://en.wiktionary.org/wiki/$1',1);
+
Index: /MediaWiki/branches/1.11/maintenance/language/alltrans.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/language/alltrans.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/language/alltrans.php	(revision 1280)
@@ -0,0 +1,15 @@
+<?php
+/**
+ * @addtogroup Maintenance
+ *
+ * Get all the translations messages, as defined in the English language file.
+ */
+
+require_once( dirname(__FILE__).'/../commandLine.inc' );
+
+$wgEnglishMessages = array_keys( Language::getMessagesFor( 'en' ) );
+foreach( $wgEnglishMessages as $key ) {
+	echo "$key\n";
+}
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/language/checkExtensioni18n.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/language/checkExtensioni18n.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/language/checkExtensioni18n.php	(revision 1280)
@@ -0,0 +1,279 @@
+<?php
+/**
+ * Copyright (C) 2007 Ashar Voultoiz <hashar@altern.org>
+ *
+ * Based on dumpBackup:
+ * Copyright (C) 2005 Brion Vibber <brion@pobox.com>
+ *
+ * http://www.mediawiki.org
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @addtogroup SpecialPage
+ */
+
+#
+# Lacking documentation. Examples:
+# php checkExtensioni18n.php /opt/mw/extensions/CentralAuth/CentralAuth.i18n.php wgCentralAuthMessages
+# php checkExtensioni18n.php --extdir /opt/mw/extensions/
+#
+# BUGS: cant guess registered extensions :)
+# TODO: let users set parameters to configure checklanguage.inc (it uses globals)
+
+// Filename for the extension i18n files database:
+define( 'EXT_I18N_DB', 'i18n.db' );
+
+// Global parameters for checkLanguage.inc
+$wgDisplayLevel = 2;
+$wgChecks = array( 'untranslated', 'obsolete', 'variables', 'empty', 'whitespace', 'xhtml', 'chars' );
+
+$optionsWithArgs = array( 'extdir', 'lang' );
+
+require_once( dirname(__FILE__).'/../commandLine.inc' );
+require_once( 'languages.inc' );
+require_once( 'checkLanguage.inc' );
+
+
+class extensionLanguages extends languages {
+	private $mExt18nFilename, $mExtArrayName ;
+	private $mExtArray;
+
+	function __construct( $ext18nFilename, $extArrayName ) {
+		$this->mExt18nFilename = $ext18nFilename;
+		$this->mExtArrayName = $extArrayName;
+
+		$this->mIgnoredMessages = array();
+		$this->mOptionalMessages = array();
+
+		if ( file_exists( $this->mExt18nFilename ) ) {
+			require_once( $this->mExt18nFilename );
+
+			$foundarray = false;
+			if( isset( ${$this->mExtArrayName} ) )  {
+				// File provided in the db file
+				$foundarray = ${$this->mExtArrayName};
+			} else {
+
+				/* For extensions included elsewhere. For some reason other extensions
+				 * break with the global statement, so recheck here.
+				 */
+				global ${$this->mExtArrayName};
+				if( is_array( ${$this->mExtArrayName} ) )  {
+					$foundarray = ${$this->mExtArrayName};
+				}
+
+				/* we might have been given a function name, test it too */
+				if( function_exists( $this->mExtArrayName  ) ) {
+					// Load data
+					$funcName = $this->mExtArrayName ;
+					$foundarray = $funcName();
+				}
+
+				if(!$foundarray) {
+					// Provided array could not be found we try to guess it.
+
+					# Using the extension path ($m[1]) and filename ($m[2]):
+					$m = array();
+					preg_match( '%.*/(.*)/(.*).i18n\.php%', $this->mExt18nFilename, $m);
+					$arPathCandidate = 'wg' . $m[1].'Messages';
+					$arFileCandidate = 'wg' . $m[2].'Messages';
+					$funcCandidate = "ef{$m[2]}Messages";
+
+					// Try them:
+					if( isset($$arPathCandidate) && is_array( $$arPathCandidate ) ) {
+						print "warning> messages from guessed path array \$$arPathCandidate.\n";
+						$foundarray = $$arPathCandidate;
+					} elseif( isset($$arFileCandidate) && is_array( $$arFileCandidate ) ) {
+						print "warning> messages from guessed file array \$$arFileCandidate.\n";
+						$foundarray = $$arFileCandidate;
+					} elseif( function_exists( $funcCandidate ) ) {
+						print "warning> messages build from guessed function {$funcCandidate}().\n";
+						$foundarray = $funcCandidate();
+					}
+				}
+
+				# We are unlucky, return empty stuff
+				if(!$foundarray) {
+					print "ERROR> failed to guess an array to use.\n";
+					$this->mExtArray = null;
+					$this->mLanguages = null;
+					return;
+				}
+			}
+
+			$this->mExtArray = $foundarray ;
+			$this->mLanguages = array_keys( $this->mExtArray );
+		} else {
+			wfDie( "File $this->mExt18nFilename not found\n" );
+		}
+	}
+
+	protected function loadRawMessages( $code ) {
+		if ( isset( $this->mRawMessages[$code] ) ) {
+			return;
+		}
+		if( isset( $this->mExtArray[$code] ) ) {
+			$this->mRawMessages[$code] = $this->mExtArray[$code] ;
+		} else {
+			$this->mRawMessages[$code] = array();
+		}
+	}
+
+	public function getLanguages() {
+		return $this->mLanguages;
+	}
+}
+
+/**
+ * @param $filename Filename containing the extension i18n
+ * @param $arrayname The name of the array in the filename
+ * @param $filter Optional, restrict check to a given language code (default; null)
+ */
+function checkExtensionLanguage( $filename, $arrayname, $filter = null ) {
+	global $wgGeneralMessages, $wgRequiredMessagesNumber;
+
+	$extLanguages = new extensionLanguages($filename, $arrayname);
+
+	// Stuff needed by the checkLanguage routine (globals)
+	$wgGeneralMessages = $extLanguages->getGeneralMessages();
+	$wgRequiredMessagesNumber = count( $wgGeneralMessages['required'] );
+
+	$langs = $extLanguages->getLanguages();
+	if( !$langs ) {
+		print "ERROR> \$$arrayname array does not exist.\n";
+		return false;
+	}
+
+	$nErrors = 0;
+	if( $filter ) {
+		$nErrors += checkLanguage( $extLanguages, $filter );
+	} else {
+		print "Will check ". count($langs) . " languages : " . implode(' ', $langs) .".\n";
+		foreach( $langs as $lang ) {
+			if( $lang == 'en' ) {
+				#print "Skipped english language\n";
+				continue;
+			}
+
+			$nErrors += checkLanguage( $extLanguages, $lang );
+		}
+	}
+
+	return $nErrors;
+}
+
+/**
+ * Read the db file, parse it, start the check.
+ */
+function checkExtensionRepository( $extdir, $db ) {
+	$fh = fopen( $extdir. '/' . $db, 'r' );
+
+	$line_number = 0;
+	while( $line = fgets( $fh ) ) {
+		$line_number++;
+
+		// Ignore comments
+		if( preg_match( '/^#/', $line ) ) {
+			continue;
+		}
+
+		// Load data from i18n database
+		$data = split( ' ', chop($line) );
+		$i18n_file = @$data[0];
+		$arrayname = @$data[1];
+
+		print "------------------------------------------------------\n";
+		print "Checking $i18n_file (\$$arrayname).\n";
+
+		// Check data
+		if( !file_exists( $extdir . '/' . $i18n_file ) ) {
+			print "ERROR> $i18n_file not found ($db:$line_number).\n";
+			continue;
+		}
+#		if( $arrayname == '' ) {
+#			print "warning> no array name for $i18n_file ($db:$line_number).\n";
+#		}
+
+ 		$i18n_file = $extdir . '/' . $i18n_file ;
+
+		global $myLang;
+		$nErrors = checkExtensionLanguage( $i18n_file, $arrayname, $myLang );
+		if($nErrors == 1 ) {
+			print "\nFound $nErrors error for this extension.\n";
+		} elseif($nErrors) {
+			print "\nFound $nErrors errors for this extension.\n";
+		} else {
+			print "Looks OK.\n";
+		}
+
+		print "\n";
+	}
+}
+
+
+function usage() {
+// Usage
+print <<<END
+Usage:
+    php checkExtensioni18n.php <filename> <arrayname>
+    php checkExtensioni18n.php --extdir <extension repository>
+
+Common option:
+    --lang <language code> : only check the given language.
+
+
+END;
+die;
+}
+
+// Play with options and arguments
+$myLang = isset($options['lang']) ? $options['lang'] : null;
+
+if( isset( $options['extdir'] ) ) {
+	$extdb = $options['extdir'] . '/' . EXT_I18N_DB ;
+
+	if( file_exists( $extdb ) ) {
+		checkExtensionRepository( $options['extdir'], EXT_I18N_DB );
+	} else {
+		print "$extdb does not exist\n";
+	}
+
+} else {
+	// Check arguments
+	if ( isset( $argv[0] ) ) {
+
+		if (file_exists( $argv[0] ) ) {
+			$filename = $argv[0];
+		} else {
+			print "Unable to open file '{$argv[0]}'\n";
+			usage();
+		}
+
+		if ( isset( $argv[1] ) ) {
+			$arrayname = $argv[1];
+		} else {
+			print "You must give an array name to be checked\n";
+			usage();
+		}
+
+		global $myLang;
+		checkExtensionLanguage( $filename, $arrayname, $myLang );
+	} else {
+		usage();
+	}
+}
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/language/checkLanguage.inc
===================================================================
--- /MediaWiki/branches/1.11/maintenance/language/checkLanguage.inc	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/language/checkLanguage.inc	(revision 1280)
@@ -0,0 +1,92 @@
+<?php
+/**
+ * Check a language.
+ *
+ * @todo Stop with globals.
+ * @param $code The language code.
+ * @return Number of errors found.
+ */
+function checkLanguage( $wgLanguages, $code ) {
+	global $wgRequiredMessagesNumber, $wgDisplayLevel, $wgLinks, $wgWikiLanguage, $wgChecks;
+
+	# Get messages
+	$messages = $wgLanguages->getMessages( $code );
+	$messagesNumber = count( $messages['translated'] );
+
+	# Skip the checks if specified
+	if ( $wgDisplayLevel == 0 ) {
+		return;
+	}
+
+	// Initialize counts
+	$untranslatedMessagesNumber = $duplicateMessagesNumber = $obsoleteMessagesNumber
+	= $messagesWithoutVariablesNumber = $messagesWithoutPluralNumber = $emptyMessagesNumber
+	= $messagesWithWhitespaceNumber = $nonXHTMLMessagesNumber = $messagesWithWrongCharsNumber
+	= 0;
+
+	# Untranslated messages
+	if ( in_array( 'untranslated', $wgChecks ) ) {
+		$untranslatedMessages = $wgLanguages->getUntranslatedMessages( $code );
+		$untranslatedMessagesNumber = count( $untranslatedMessages );
+		$wgLanguages->outputMessagesList( $untranslatedMessages, $code, "\n$untranslatedMessagesNumber messages of $wgRequiredMessagesNumber are not translated to $code, but exist in en:", $wgDisplayLevel, $wgLinks, $wgWikiLanguage );
+	}
+
+	# Duplicate messages
+	if ( in_array( 'duplicate', $wgChecks ) ) {
+		$duplicateMessages = $wgLanguages->getDuplicateMessages( $code );
+		$duplicateMessagesNumber = count( $duplicateMessages );
+		$wgLanguages->outputMessagesList( $duplicateMessages, $code, "\n$duplicateMessagesNumber messages of $messagesNumber are translated the same in en and $code:", $wgDisplayLevel, $wgLinks, $wgWikiLanguage );
+	}
+
+	# Obsolete messages
+	if ( in_array( 'obsolete', $wgChecks ) ) {
+		$obsoleteMessages = $messages['obsolete'];
+		$obsoleteMessagesNumber = count( $obsoleteMessages );
+		$wgLanguages->outputMessagesList( $obsoleteMessages, $code, "\n$obsoleteMessagesNumber messages of $messagesNumber are not exist in en (or are in the ignored list), but still exist in $code:", $wgDisplayLevel, $wgLinks, $wgWikiLanguage );
+	}
+
+	# Messages without variables
+	if ( in_array( 'variables', $wgChecks ) ) {
+		$messagesWithoutVariables = $wgLanguages->getMessagesWithoutVariables( $code );
+		$messagesWithoutVariablesNumber = count( $messagesWithoutVariables );
+		$wgLanguages->outputMessagesList( $messagesWithoutVariables, $code, "\n$messagesWithoutVariablesNumber messages of $messagesNumber in $code don't use some variables while en uses them:", $wgDisplayLevel, $wgLinks, $wgWikiLanguage );
+	}
+
+	# Messages without plural
+	if ( in_array( 'plural', $wgChecks ) ) {
+		$messagesWithoutPlural = $wgLanguages->getMessagesWithoutPlural( $code );
+		$messagesWithoutPluralNumber = count( $messagesWithoutPlural );
+		$wgLanguages->outputMessagesList( $messagesWithoutPlural, $code, "\n$messagesWithoutPluralNumber messages of $messagesNumber in $code don't use {{plural}} while en uses it:", $wgDisplayLevel, $wgLinks, $wgWikiLanguage );
+	}
+
+	# Empty messages
+	if ( in_array( 'empty', $wgChecks ) ) {
+		$emptyMessages = $wgLanguages->getEmptyMessages( $code );
+		$emptyMessagesNumber = count( $emptyMessages );
+		$wgLanguages->outputMessagesList( $emptyMessages, $code, "\n$emptyMessagesNumber messages of $messagesNumber in $code are empty or -:", $wgDisplayLevel, $wgLinks, $wgWikiLanguage );
+	}
+
+	# Messages with whitespace
+	if ( in_array( 'whitespace', $wgChecks ) ) {
+		$messagesWithWhitespace = $wgLanguages->getMessagesWithWhitespace( $code );
+		$messagesWithWhitespaceNumber = count( $messagesWithWhitespace );
+		$wgLanguages->outputMessagesList( $messagesWithWhitespace, $code, "\n$messagesWithWhitespaceNumber messages of $messagesNumber in $code have a trailing whitespace:", $wgDisplayLevel, $wgLinks, $wgWikiLanguage );
+	}
+
+	# Non-XHTML messages
+	if ( in_array( 'xhtml', $wgChecks ) ) {
+		$nonXHTMLMessages = $wgLanguages->getNonXHTMLMessages( $code );
+		$nonXHTMLMessagesNumber = count( $nonXHTMLMessages );
+		$wgLanguages->outputMessagesList( $nonXHTMLMessages, $code, "\n$nonXHTMLMessagesNumber messages of $messagesNumber in $code are not well-formed XHTML:", $wgDisplayLevel, $wgLinks, $wgWikiLanguage );
+	}
+
+	# Messages with wrong characters
+	if ( in_array( 'chars', $wgChecks ) ) {
+		$messagesWithWrongChars = $wgLanguages->getMessagesWithWrongChars( $code );
+		$messagesWithWrongCharsNumber = count( $messagesWithWrongChars );
+		$wgLanguages->outputMessagesList( $messagesWithWrongChars, $code, "\n$messagesWithWrongCharsNumber messages of $messagesNumber in $code include hidden chars which should not be used in the messages:", $wgDisplayLevel, $wgLinks, $wgWikiLanguage );
+	}
+
+	return ($untranslatedMessagesNumber + $duplicateMessagesNumber + $obsoleteMessagesNumber + $messagesWithoutVariablesNumber + $messagesWithoutPluralNumber + $emptyMessagesNumber + $messagesWithWhitespaceNumber + $nonXHTMLMessagesNumber + $messagesWithWrongCharsNumber);
+}
+?>
Index: /MediaWiki/branches/1.11/maintenance/language/checkLanguage.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/language/checkLanguage.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/language/checkLanguage.php	(revision 1280)
@@ -0,0 +1,107 @@
+<?php
+/**
+ * Check a language file.
+ *
+ * @addtogroup Maintenance
+ */
+
+require_once( dirname(__FILE__).'/../commandLine.inc' );
+require_once( 'languages.inc' );
+require_once( 'checkLanguage.inc' );
+
+# Show help
+if ( isset( $options['help'] ) ) {
+	echo <<<END
+Run this script to check a specific language file, or all of them.
+Parameters:
+	* lang: Language code (default: the installation default language). You can also specify "all" to check all the languages.
+	* help: Show this help.
+	* level: Show the following level (default: 2).
+	* links: Link the message values (default off).
+	* wikilang: For the links, what is the content language of the wiki to display the output in (default en).
+	* whitelist: Make only the following checks (form: code,code).
+	* blacklist: Don't make the following checks (form: code,code).
+	* duplicate: Additionally check for messages which are translated the same to English (default off).
+	* plural: Additionally check for messages that don't use plural while English does (default off).
+	* noexif: Don't check for EXIF messages (a bit hard and boring to translate), if you know that they are currently not translated and want to focus on other problems (default off).
+Check codes (ideally, all of them should result 0; all the checks are executed by default):
+	* untranslated: Messages which are required to translate, but are not translated.
+	* obsolete: Messages which are untranslatable, but translated.
+	* variables: Messages without variables which should be used.
+	* empty: Empty messages.
+	* whitespace: Messages which have trailing whitespace.
+	* xhtml: Messages which are not well-formed XHTML.
+	* chars: Messages with hidden characters.
+Display levels (default: 2):
+	* 0: Skip the checks (useful for checking syntax).
+	* 1: Show only the stub headers and number of wrong messages, without list of messages.
+	* 2: Show only the headers and the message keys, without the message values.
+	* 3: Show both the headers and the complete messages, with both keys and values.
+
+END;
+	exit();
+}
+
+# Get the language code
+if ( isset( $options['lang'] ) ) {
+	$wgCode = $options['lang'];
+} else {
+	$wgCode = $wgContLang->getCode();
+}
+
+# Get the display level
+if ( isset( $options['level'] ) ) {
+	$wgDisplayLevel = $options['level'];
+} else {
+	$wgDisplayLevel = 2;
+}
+
+# Get the links options
+$wgLinks = isset( $options['links'] );
+$wgWikiLanguage = isset( $options['wikilang'] ) ? $options['wikilang'] : 'en';
+
+# Get the checks to do
+$wgChecks = array( 'untranslated', 'obsolete', 'variables', 'empty', 'whitespace', 'xhtml', 'chars' );
+if ( isset( $options['whitelist'] ) ) {
+	$wgChecks = explode( ',', $options['whitelist'] );
+} elseif ( isset( $options['blacklist'] ) ) {
+	$wgChecks = array_diff( $wgChecks, explode( ',', $options['blacklist'] ) );
+}
+
+# Add duplicate and plural options if specified
+if ( isset( $options['duplicate'] ) ) {
+	$wgChecks[] = 'duplicate';
+}
+if ( isset( $options['plural'] ) ) {
+	$wgChecks[] = 'plural';
+}
+
+# Should check for EXIF?
+$wgCheckEXIF = !isset( $options['noexif'] );
+
+# Get language objects
+$wgLanguages = new languages( $wgCheckEXIF );
+
+# Get the general messages
+$wgGeneralMessages = $wgLanguages->getGeneralMessages();
+$wgRequiredMessagesNumber = count( $wgGeneralMessages['required'] );
+
+# Check the language
+if ( $wgCode == 'all' ) {
+	foreach ( $wgLanguages->getLanguages() as $language ) {
+		if ( $language != 'en' && $language != 'enRTL' ) {
+			checkLanguage( $wgLanguages, $language );
+		}
+	}
+} else {
+	# Can't check English
+	if ( $wgCode == 'en' ) {
+		echo "Current selected language is English, which cannot be checked.\n";
+	} else if ( $wgCode == 'enRTL' ) {
+		echo "Current selected language is RTL English, which cannot be checked.\n";
+	} else {
+		checkLanguage( $wgLanguages, $wgCode );
+	}
+}
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/language/date-formats.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/language/date-formats.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/language/date-formats.php	(revision 1280)
@@ -0,0 +1,46 @@
+<?php
+
+$ts = '20010115123456';
+
+	
+$IP = dirname( __FILE__ ) . '/../..';
+require_once( "$IP/maintenance/commandLine.inc" );
+
+foreach ( glob( "$IP/languages/messages/Messages*.php" ) as $filename ) {
+	$base = basename( $filename );
+	$m = array();
+	if ( !preg_match( '/Messages(.*)\.php$/', $base, $m ) ) {
+		continue;
+	}
+	$code = str_replace( '_', '-', strtolower( $m[1] ) );
+	print "$code ";
+	$lang = Language::factory( $code );
+	$prefs = $lang->getDatePreferences();
+	if ( !$prefs ) {
+		$prefs = array( 'default' );
+	}
+	print "date: ";
+	foreach ( $prefs as $index => $pref ) {
+		if ( $index > 0 ) {
+			print ' | ';
+		}
+		print $lang->date( $ts, false, $pref );
+	}
+	print "\n$code time: ";
+	foreach ( $prefs as $index => $pref ) {
+		if ( $index > 0 ) {
+			print ' | ';
+		}
+		print $lang->time( $ts, false, $pref );
+	}
+	print "\n$code both: "; 
+	foreach ( $prefs as $index => $pref ) {
+		if ( $index > 0 ) {
+			print ' | ';
+		}
+		print $lang->timeanddate( $ts, false, $pref );
+	}
+	print "\n\n";
+}
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/language/diffLanguage.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/language/diffLanguage.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/language/diffLanguage.php	(revision 1280)
@@ -0,0 +1,159 @@
+<?php
+# MediaWiki web-based config/installation
+# Copyright (C) 2004 Ashar Voultoiz <thoane@altern.org> and others
+# http://www.mediawiki.org/
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+# http://www.gnu.org/copyleft/gpl.html
+
+/**
+ * Usage: php DiffLanguage.php [lang [file]]
+ *
+ * lang: Enter the language code following "Language" of the LanguageXX.php you
+ * want to check. If using linux you might need to follow case aka Zh and not
+ * zh.
+ *
+ * file: A php language file you want to include to compare mediawiki
+ * Language{Lang}.php against (for example Special:Allmessages PHP output).
+ *
+ * The goal is to get a list of messages not yet localised in a languageXX.php
+ * file using the language.php file as reference.
+ *
+ * The script then print a list of wgAllMessagesXX keys that aren't localised, a
+ * percentage of messages correctly localised and the number of messages to be
+ * translated.
+ *
+ * @addtogroup Maintenance
+ */
+
+/** This script run from the commandline */
+require_once( dirname(__FILE__).'/../parserTests.inc' );
+require_once( dirname(__FILE__).'/../commandLine.inc' );
+
+if( isset($options['help']) ) { usage(); wfDie(); }
+
+$wgLanguageCode = ucfirstlcrest($wgLanguageCode);
+/** Language messages we will use as reference. By default 'en' */
+$referenceMessages = $wgAllMessagesEn;
+$referenceLanguage = 'En';
+$referenceFilename = 'Language'.$referenceLanguage.'.php';
+/** Language messages we will test. */
+$testMessages = array();
+$testLanguage = '';
+/** whereas we use an external language file */
+$externalRef = false;
+
+# FUNCTIONS
+/** @todo more informations !! */
+function usage() {
+echo 'php DiffLanguage.php [lang [file]] [--color=(yes|no|light)]'."\n";
+}
+
+/** Return a given string with first letter upper case, the rest lowercase */
+function ucfirstlcrest($string) {
+	return strtoupper(substr($string,0,1)).strtolower(substr($string,1));
+}
+
+/**
+ * Return a $wgAllmessages array shipped in MediaWiki
+ * @param string $languageCode Formated language code
+ * @return array The MediaWiki default $wgAllMessages array requested
+ */
+function getMediawikiMessages($languageCode = 'En') {
+
+	$foo = "wgAllMessages$languageCode";
+	global $$foo;
+	global $wgSkinNamesEn; // potentially unused global declaration?
+
+	// it might already be loaded in LocalSettings.php
+	if(!isset($$foo)) {
+		global $IP;
+		$langFile = $IP.'/languages/classes/Language'.$languageCode.'.php';
+		if (file_exists( $langFile ) ) {
+			print "Including $langFile\n";
+			global $wgNamespaceNamesEn;  // potentially unused global declaration?
+			include($langFile);
+		} else wfDie("ERROR: The file $langFile does not exist !\n");
+	}
+	return $$foo;
+}
+
+/**
+ * Return a $wgAllmessages array in a given file. Language of the array
+ * need to be given cause we can not detect which language it provides
+ * @param string $filename Filename of the file containing a message array
+ * @param string $languageCode Language of the external array
+ * @return array A $wgAllMessages array from an external file.
+ */
+function getExternalMessages($filename, $languageCode) {
+	print "Including external file $filename.\n";
+	include($filename);
+	$foo = "wgAllMessages$languageCode";
+	return $$foo;
+}
+
+# MAIN ENTRY
+if ( isset($args[0]) ) {
+	$lang = ucfirstlcrest($args[0],1);
+
+	// eventually against another language file we will use as reference instead
+	// of the default english language.
+	if( isset($args[1])) {
+		// we assume the external file contain an array of messages for the
+		// lang we are testing
+		$referenceMessages = getExternalMessages( $args[1], $lang );
+		$referenceLanguage = $lang;
+		$referenceFilename = $args[1];
+		$externalRef = true;
+	}
+
+	// Load datas from MediaWiki
+	$testMessages = getMediawikiMessages($lang);
+	$testLanguage = $lang;
+} else {
+	usage();
+	wfDie();
+}
+
+/** parsertest is used to do differences */
+$myParserTest = new ParserTest();
+
+# Get all references messages and check if they exist in the tested language
+$i = 0;
+
+$msg = "MW Language{$testLanguage}.php against ";
+if($externalRef) { $msg .= 'external file '; }
+else { $msg .= 'internal file '; }
+$msg .= $referenceFilename.' ('.$referenceLanguage."):\n----\n";
+echo $msg;
+
+// process messages
+foreach($referenceMessages as $index => $ref)
+{
+	// message is not localized
+	if(!(isset($testMessages[$index]))) {
+		$i++;
+		print "'$index' => \"$ref\",\n";
+	// Messages in the same language differs
+	} elseif( ($lang == $referenceLanguage) AND ($testMessages[$index] != $ref)) {
+		print "\n$index differs:\n";
+		print $myParserTest->quickDiff($testMessages[$index],$ref,'tested','reference');
+	}
+}
+
+echo "\n----\n".$msg;
+echo "$referenceLanguage language is complete at ".number_format((100 - $i/count($wgAllMessagesEn) * 100),2)."%\n";
+echo "$i unlocalised messages of the ".count($wgAllMessagesEn)." messages available.\n";
+?>
Index: /MediaWiki/branches/1.11/maintenance/language/dumpMessages.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/language/dumpMessages.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/language/dumpMessages.php	(revision 1280)
@@ -0,0 +1,19 @@
+<?php
+/**
+ * @todo document
+ * @addtogroup Maintenance
+ */
+
+/** */
+require_once( dirname(__FILE__).'/../commandLine.inc' );
+$wgMessageCache->disableTransform();
+$messages = array();
+$wgEnglishMessages = array_keys( Language::getMessagesFor( 'en' ) );
+foreach ( $wgEnglishMessages as $key )
+{
+	$messages[$key] = wfMsg( $key );
+}
+print "MediaWiki $wgVersion language file\n";
+print serialize( $messages );
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/language/function-list.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/language/function-list.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/language/function-list.php	(revision 1280)
@@ -0,0 +1,44 @@
+<?php
+
+define( 'MEDIAWIKI', 1 );
+define( 'NOT_REALLY_MEDIAWIKI', 1 );
+
+class Language {}
+foreach ( glob( 'Language*.php' ) as $file ) {
+	if ( $file != 'Language.php' ) {
+		require_once( $file );
+	}
+}
+
+$removedFunctions = array( 'date', 'time', 'timeanddate', 'formatMonth', 'formatDay', 
+	'getMonthName', 'getMonthNameGen', 'getMonthAbbreviation', 'getWeekdayName', 
+	'userAdjust', 'dateFormat', 'timeSeparator', 'timeDateSeparator', 'timeBeforeDate',
+	'monthByLatinNumber', 'getSpecialMonthName',
+
+	'commafy'
+);
+
+$numRemoved = 0;
+$total = 0;
+$classes = get_declared_classes();
+ksort( $classes );
+foreach ( $classes as $class ) {
+	if ( !preg_match( '/^Language/', $class ) || $class == 'Language' || $class == 'LanguageConverter' ) {
+		continue;
+	}
+
+	print "$class\n";
+	$methods = get_class_methods( $class );
+	print_r( $methods );
+
+	if ( !count( array_diff( $methods, $removedFunctions ) ) ) {
+		print "removed\n";
+		$numRemoved++;
+	}
+	$total++;
+	print "\n";
+}
+
+print "$numRemoved will be removed out of $total\n";
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/language/lang2po.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/language/lang2po.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/language/lang2po.php	(revision 1280)
@@ -0,0 +1,147 @@
+<?php
+/**
+ * Convert Language files to .po files !
+ *
+ * Todo:
+ *   - generate .po header
+ *   - fix escaping of \
+ */
+
+/** This is a command line script */
+require_once(dirname(__FILE__).'/../commandLine.inc');
+require_once(dirname(__FILE__).'/languages.inc');
+
+define('ALL_LANGUAGES',    true);
+define('XGETTEXT_BIN',     'xgettext');
+define('MSGMERGE_BIN',     'msgmerge');
+
+// used to generate the .pot
+define('XGETTEXT_OPTIONS', '-n --keyword=wfMsg --keyword=wfMsgForContent --keyword=wfMsgHtml --keyword=wfMsgWikiHtml ');
+define('MSGMERGE_OPTIONS', ' -v ');
+
+define('LOCALE_OUTPUT_DIR', $IP.'/locale');
+
+
+if( isset($options['help']) ) { usage(); wfDie(); }
+// default output is WikiText
+if( !isset($options['lang']) ) { $options['lang'] = ALL_LANGUAGES; }
+
+function usage() {
+print <<<END
+Usage: php lang2po.php [--help] [--lang=<langcode>] [--stdout]
+  --help: this message.
+  --lang: a lang code you want to generate a .po for (default: all languages).
+
+END;
+}
+
+
+/**
+ * Return a dummy header for later edition.
+ * @return string A dummy header
+ */
+function poHeader() {
+return
+'# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 2005 MediaWiki
+# This file is distributed under the same license as the MediaWiki package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: bugzilllaaaaa\n"
+"POT-Creation-Date: 2005-08-16 20:13+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: VARIOUS <nobody>\n"
+"Language-Team: LANGUAGE <nobody>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+';
+}
+
+/**
+ * generate and write a file in .po format.
+ *
+ * @param string $langcode Code of a language it will process.
+ * @param array &$messages Array containing the various messages.
+ * @return string Filename where stuff got saved or false.
+ */
+function generatePo($langcode, $messages) {
+	$data = poHeader();
+
+	// Generate .po entries
+	foreach($messages as $identifier => $content) {
+		$data .= "msgid \"$identifier\"\n";
+
+		// Escape backslashes
+		$tmp = str_replace('\\', '\\\\', $content);
+		// Escape doublelquotes
+		$tmp = preg_replace( "/(?<!\\\\)\"/", '\"', $tmp);
+		// Rewrite multilines to gettext format
+		$tmp = str_replace("\n", "\"\n\"", $tmp);
+
+		$data .= 'msgstr "'. $tmp . "\"\n\n";
+	}
+
+	// Write the content to a file in locale/XX/messages.po
+	$dir = LOCALE_OUTPUT_DIR.'/'.$langcode;
+	if( !is_dir($dir) ) { mkdir( $dir, 0770 ); }
+	$filename = $dir.'/fromlanguagefile.po';
+
+	$file = fopen( $filename , 'wb' );
+	if( fwrite( $file, $data ) ) {
+		fclose( $file );
+		return $filename;
+	} else {
+		fclose( $file );
+		return false;
+	}
+}
+
+function generatePot() {
+	global $IP;
+	$curdir = getcwd();
+	chdir($IP);
+	exec( XGETTEXT_BIN
+	  .' '.XGETTEXT_OPTIONS
+	  .' -o '.LOCALE_OUTPUT_DIR.'/wfMsg.pot'
+	  .' includes/*php'
+	  );
+	chdir($curdir);
+}
+
+function applyPot($langcode) {
+	$langdir = LOCALE_OUTPUT_DIR.'/'.$langcode;
+
+	$from = $langdir.'/fromlanguagefile.po';
+	$pot = LOCALE_OUTPUT_DIR.'/wfMsg.pot';
+	$dest = $langdir.'/messages.po';
+
+	// Merge template and generate file to get final .po
+	exec(MSGMERGE_BIN.MSGMERGE_OPTIONS." $from $pot -o $dest ");
+	// delete no more needed file
+//	unlink($from);
+}
+
+// Generate a template .pot based on source tree
+echo "Getting 'gettext' default messages from sources:";
+generatePot();
+echo "done.\n";
+
+
+$langTool = new languages();
+
+// Do all languages
+foreach ( $langTool->getLanguages() as $langcode) {
+	echo "Loading messages for $langcode:\n";
+	if( ! generatePo($langcode, $langTool->getMessages($langcode) ) ) {
+		echo "ERROR: Failed to wrote file.\n";
+	} else {
+		echo "Applying template:";
+		applyPot($langcode);
+	}
+}
+?>
Index: /MediaWiki/branches/1.11/maintenance/language/langmemusage.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/language/langmemusage.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/language/langmemusage.php	(revision 1280)
@@ -0,0 +1,30 @@
+<?php
+/**
+ * Dumb program that tries to get the memory usage
+ * for each language file.
+ */
+
+/** This is a command line script */
+require_once(dirname(__FILE__).'/../commandLine.inc');
+require_once(dirname(__FILE__).'/languages.inc');
+
+$langtool = new languages();
+
+if ( ! function_exists( 'memory_get_usage' ) )
+	wfDie( "You must compile PHP with --enable-memory-limit\n" );
+
+$memlast = $memstart = memory_get_usage();
+
+print 'Base memory usage: '.$memstart."\n";
+
+foreach ( $langtool->getLanguages() as $langcode ) {
+	Language::factory( $langcode );
+	$memstep = memory_get_usage();
+	printf( "%12s: %d\n", $langcode, ($memstep- $memlast) );
+	$memlast = $memstep;
+}
+
+$memend = memory_get_usage();
+
+echo ' Total Usage: '.($memend - $memstart)."\n";
+?>
Index: /MediaWiki/branches/1.11/maintenance/language/languages.inc
===================================================================
--- /MediaWiki/branches/1.11/maintenance/language/languages.inc	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/language/languages.inc	(revision 1280)
@@ -0,0 +1,414 @@
+<?php
+/**
+ * Handle messages in the language files.
+ *
+ * @addtogroup Maintenance
+ */
+
+require_once( 'messageTypes.inc' );
+
+class languages {
+	protected $mLanguages; # List of languages
+	protected $mRawMessages; # Raw list of the messages in each language
+	protected $mMessages; # Messages in each language (except for English), divided to groups
+	protected $mGeneralMessages; # General messages in English, divided to groups
+	protected $mIgnoredMessages; # All the messages which should be exist only in the English file
+	protected $mOptionalMessages; # All the messages which may be translated or not, depending on the language
+
+	/**
+	 * Load the list of languages: all the Messages*.php
+	 * files in the languages directory.
+	 *
+	 * @param $exif Treat the EXIF messages?
+	 */
+	function __construct( $exif = true ) {
+		global $wgIgnoredMessages, $wgOptionalMessages, $wgEXIFMessages;
+		$this->mIgnoredMessages = $wgIgnoredMessages;
+		if ( $exif ) {
+			$this->mOptionalMessages = array_merge( $wgOptionalMessages );
+		} else {
+			$this->mOptionalMessages = array_merge( $wgOptionalMessages, $wgEXIFMessages );
+		}
+
+		$this->mLanguages = array_keys( Language::getLanguageNames( true ) );
+		sort( $this->mLanguages );
+	}
+
+	/**
+	 * Get the language list.
+	 *
+	 * @return The language list.
+	 */
+	public function getLanguages() {
+		return $this->mLanguages;
+	}
+
+	/**
+	 * Get the ignored messages list.
+	 *
+	 * @return The ignored messages list.
+	 */
+	public function getIgnoredMessages() {
+		return $this->mIgnoredMessages;
+	}
+
+	/**
+	 * Get the optional messages list.
+	 *
+	 * @return The optional messages list.
+	 */
+	public function getOptionalMessages() {
+		return $this->mOptionalMessages;
+	}
+
+	/**
+	 * Load the raw messages for a specific langauge from the messages file.
+	 *
+	 * @param $code The langauge code.
+	 */
+	protected function loadRawMessages( $code ) {
+		if ( isset( $this->mRawMessages[$code] ) ) {
+			return;
+		}
+		$filename = Language::getMessagesFileName( $code );
+		if ( file_exists( $filename ) ) {
+			require( $filename );
+			if ( isset( $messages ) ) {
+				$this->mRawMessages[$code] = $messages;
+			} else {
+				$this->mRawMessages[$code] = array();
+			}
+		} else {
+			$this->mRawMessages[$code] = array();
+		}
+	}
+
+	/**
+	 * Load the messages for a specific language (which is not English) and divide them to groups:
+	 * all - all the messages.
+	 * required - messages which should be translated in order to get a complete translation.
+	 * optional - messages which can be translated, the fallback translation is used if not translated.
+	 * obsolete - messages which should not be translated, either because they are not exist, or they are ignored messages.
+	 * translated - messages which are either required or optional, but translated from English and needed.
+	 *
+	 * @param $code The language code.
+	 */
+	private function loadMessages( $code ) {
+		if ( isset( $this->mMessages[$code] ) ) {
+			return;
+		}
+		$this->loadRawMessages( $code );
+		$this->loadGeneralMessages();
+		$this->mMessages[$code]['all'] = $this->mRawMessages[$code];
+		$this->mMessages[$code]['required'] = array();
+		$this->mMessages[$code]['optional'] = array();
+		$this->mMessages[$code]['obsolete'] = array();
+		$this->mMessages[$code]['translated'] = array();
+		foreach ( $this->mMessages[$code]['all'] as $key => $value ) {
+			if ( isset( $this->mGeneralMessages['required'][$key] ) ) {
+				$this->mMessages[$code]['required'][$key] = $value;
+				$this->mMessages[$code]['translated'][$key] = $value;
+			} else if ( isset( $this->mGeneralMessages['optional'][$key] ) ) {
+				$this->mMessages[$code]['optional'][$key] = $value;
+				$this->mMessages[$code]['translated'][$key] = $value;
+			} else {
+				$this->mMessages[$code]['obsolete'][$key] = $value;
+			}
+		}
+	}
+
+	/**
+	 * Load the messages for English and divide them to groups:
+	 * all - all the messages.
+	 * required - messages which should be translated to other languages in order to get a complete translation.
+	 * optional - messages which can be translated to other languages, but it's not required for a complete translation.
+	 * ignored - messages which should not be translated to other languages.
+	 * translatable - messages which are either required or optional, but can be translated from English.
+	 */
+	private function loadGeneralMessages() {
+		if ( isset( $this->mGeneralMessages ) ) {
+			return;
+		}
+		$this->loadRawMessages( 'en' );
+		$this->mGeneralMessages['all'] = $this->mRawMessages['en'];
+		$this->mGeneralMessages['required'] = array();
+		$this->mGeneralMessages['optional'] = array();
+		$this->mGeneralMessages['ignored'] = array();
+		$this->mGeneralMessages['translatable'] = array();
+		foreach ( $this->mGeneralMessages['all'] as $key => $value ) {
+			if ( in_array( $key, $this->mIgnoredMessages ) ) {
+				$this->mGeneralMessages['ignored'][$key] = $value;
+			} else if ( in_array( $key, $this->mOptionalMessages ) ) {
+				$this->mGeneralMessages['optional'][$key] = $value;
+				$this->mGeneralMessages['translatable'][$key] = $value;
+			} else {
+				$this->mGeneralMessages['required'][$key] = $value;
+				$this->mGeneralMessages['translatable'][$key] = $value;
+			}
+		}
+	}
+
+	/**
+	 * Get all the messages for a specific langauge (not English), without the
+	 * fallback language messages, divided to groups:
+	 * all - all the messages.
+	 * required - messages which should be translated in order to get a complete translation.
+	 * optional - messages which can be translated, the fallback translation is used if not translated.
+	 * obsolete - messages which should not be translated, either because they are not exist, or they are ignored messages.
+	 * translated - messages which are either required or optional, but translated from English and needed.
+	 *
+	 * @param $code The langauge code.
+	 *
+	 * @return The messages in this language.
+	 */
+	public function getMessages( $code ) {
+		$this->loadMessages( $code );
+		return $this->mMessages[$code];
+	}
+
+	/**
+	 * Get all the general English messages, divided to groups:
+	 * all - all the messages.
+	 * required - messages which should be translated to other languages in order to get a complete translation.
+	 * optional - messages which can be translated to other languages, but it's not required for a complete translation.
+	 * ignored - messages which should not be translated to other languages.
+	 * translatable - messages which are either required or optional, but can be translated from English.
+	 *
+	 * @return The general English messages.
+	 */
+	public function getGeneralMessages() {
+		$this->loadGeneralMessages();
+		return $this->mGeneralMessages;
+	}
+
+	/**
+	 * Get the untranslated messages for a specific language.
+	 *
+	 * @param $code The langauge code.
+	 *
+	 * @return The untranslated messages for this language.
+	 */
+	public function getUntranslatedMessages( $code ) {
+		$this->loadGeneralMessages();
+		$this->loadMessages( $code );
+		$requiredGeneralMessages = array_keys( $this->mGeneralMessages['required'] );
+		$requiredMessages = array_keys( $this->mMessages[$code]['required'] );
+		$untranslatedMessages = array();
+		foreach ( array_diff( $requiredGeneralMessages, $requiredMessages ) as $key ) {
+			$untranslatedMessages[$key] = $this->mGeneralMessages['required'][$key];
+		}
+		return $untranslatedMessages;
+	}
+
+	/**
+	 * Get the duplicate messages for a specific language.
+	 *
+	 * @param $code The langauge code.
+	 *
+	 * @return The duplicate messages for this language.
+	 */
+	public function getDuplicateMessages( $code ) {
+		$this->loadGeneralMessages();
+		$this->loadMessages( $code );
+		$duplicateMessages = array();
+		foreach ( $this->mMessages[$code]['translated'] as $key => $value ) {
+			if ( $this->mGeneralMessages['translatable'][$key] == $value ) {
+				$duplicateMessages[$key] = $value;
+			}
+		}
+		return $duplicateMessages;
+	}
+
+	/**
+	 * Get the messages which do not use some variables.
+	 *
+	 * @param $code The langauge code.
+	 *
+	 * @return The messages which do not use some variables in this language.
+	 */
+	public function getMessagesWithoutVariables( $code ) {
+		$this->loadGeneralMessages();
+		$this->loadMessages( $code );
+		$variables = array( '\$1', '\$2', '\$3', '\$4', '\$5', '\$6', '\$7', '\$8', '\$9' );
+		$messagesWithoutVariables = array();
+		foreach ( $this->mMessages[$code]['translated'] as $key => $value ) {
+			$missing = false;
+			foreach ( $variables as $var ) {
+				if ( preg_match( "/$var/sU", $this->mGeneralMessages['translatable'][$key] ) &&
+					!preg_match( "/$var/sU", $value ) ) {
+					$missing = true;
+				}
+			}
+			if ( $missing ) {
+				$messagesWithoutVariables[$key] = $value;
+			}
+		}
+		return $messagesWithoutVariables;
+	}
+
+	/**
+	 * Get the messages which do not use plural.
+	 *
+	 * @param $code The langauge code.
+	 *
+	 * @return The messages which do not use plural in this language.
+	 */
+	public function getMessagesWithoutPlural( $code ) {
+		$this->loadGeneralMessages();
+		$this->loadMessages( $code );
+		$messagesWithoutPlural = array();
+		foreach ( $this->mMessages[$code]['translated'] as $key => $value ) {
+			if ( stripos( $this->mGeneralMessages['translatable'][$key], '{{plural:' ) !== false && stripos( $value, '{{plural:' ) === false ) {
+				$messagesWithoutPlural[$key] = $value;
+			}
+		}
+		return $messagesWithoutPlural;
+	}
+
+	/**
+	 * Get the empty messages.
+	 *
+	 * @param $code The langauge code.
+	 *
+	 * @return The empty messages for this language.
+	 */
+	public function getEmptyMessages( $code ) {
+		$this->loadGeneralMessages();
+		$this->loadMessages( $code );
+		$emptyMessages = array();
+		foreach ( $this->mMessages[$code]['translated'] as $key => $value ) {
+			if ( $value === '' || $value === '-' ) {
+				$emptyMessages[$key] = $value;
+			}
+		}
+		return $emptyMessages;
+	}
+
+	/**
+	 * Get the messages with trailing whitespace.
+	 *
+	 * @param $code The langauge code.
+	 *
+	 * @return The messages with trailing whitespace in this language.
+	 */
+	public function getMessagesWithWhitespace( $code ) {
+		$this->loadGeneralMessages();
+		$this->loadMessages( $code );
+		$messagesWithWhitespace = array();
+		foreach ( $this->mMessages[$code]['translated'] as $key => $value ) {
+			if ( $this->mGeneralMessages['translatable'][$key] !== '' && $value !== rtrim( $value ) ) {
+				$messagesWithWhitespace[$key] = $value;
+			}
+		}
+		return $messagesWithWhitespace;
+	}
+
+	/**
+	 * Get the non-XHTML messages.
+	 *
+	 * @param $code The langauge code.
+	 *
+	 * @return The non-XHTML messages for this language.
+	 */
+	public function getNonXHTMLMessages( $code ) {
+		$this->loadGeneralMessages();
+		$this->loadMessages( $code );
+		$wrongPhrases = array(
+			'<hr *\\?>',
+			'<br *\\?>',
+			'<hr/>',
+			'<br/>',
+		);
+		$wrongPhrases = '~(' . implode( '|', $wrongPhrases ) . ')~sDu';
+		$nonXHTMLMessages = array();
+		foreach ( $this->mMessages[$code]['translated'] as $key => $value ) {
+			if ( preg_match( $wrongPhrases, $value ) ) {
+				$nonXHTMLMessages[$key] = $value;
+			}
+		}
+		return $nonXHTMLMessages;
+	}
+
+	/**
+	 * Get the messages which include wrong characters.
+	 *
+	 * @param $code The langauge code.
+	 *
+	 * @return The messages which include wrong characters in this language.
+	 */
+	public function getMessagesWithWrongChars( $code ) {
+		$this->loadGeneralMessages();
+		$this->loadMessages( $code );
+		$wrongChars = array(
+			'[LRM]' => "\xE2\x80\x8E",
+			'[RLM]' => "\xE2\x80\x8F",
+			'[LRE]' => "\xE2\x80\xAA",
+			'[RLE]' => "\xE2\x80\xAB",
+			'[POP]' => "\xE2\x80\xAC",
+			'[LRO]' => "\xE2\x80\xAD",
+			'[RLO]' => "\xE2\x80\xAB",
+			'[ZWSP]'=> "\xE2\x80\x8B",
+			'[NBSP]'=> "\xC2\xA0",
+			'[WJ]'  => "\xE2\x81\xA0",
+			'[BOM]' => "\xEF\xBB\xBF",
+			'[FFFD]'=> "\xEF\xBF\xBD",
+		);
+		$wrongRegExp = '/(' . implode( '|', array_values( $wrongChars ) ) . ')/sDu';
+		$wrongCharsMessages = array();
+		foreach ( $this->mMessages[$code]['translated'] as $key => $value ) {
+			if ( preg_match( $wrongRegExp, $value ) ) {
+				foreach ( $wrongChars as $viewableChar => $hiddenChar ) {
+					$value = str_replace( $hiddenChar, $viewableChar, $value );
+				}
+				$wrongCharsMessages[$key] = $value;
+			}
+		}
+		return $wrongCharsMessages;
+	}
+
+	/**
+	 * Output a messages list
+	 *
+	 * @param $messages The messages list
+	 * @param $code The language code
+	 * @param $text The text to show before the list (optional)
+	 * @param $level The display level (optional)
+	 * @param $links Show links (optional)
+	 * @param $wikilang The langauge of the wiki to display the list in, for the links (optional)
+	 */
+	public function outputMessagesList( $messages, $code, $text = '', $level = 2, $links = false, $wikilang = null ) {
+		if ( count( $messages ) == 0 ) {
+			return;
+		}
+		if ( $text ) {
+			echo "$text\n";
+		}
+		if ( $level == 1 ) {
+			echo "[messages are hidden]\n";
+		} else {
+			foreach ( $messages as $key => $value ) {
+				if ( $links ) {
+					$displayKey = ucfirst( $key );
+					if ( !isset( $wikilang ) ) {
+						global $wgContLang;
+						$wikilang = $wgContLang->getCode();
+					}
+					if ( $code == $wikilang ) {
+						$displayKey = "[[MediaWiki:$displayKey|$key]]";
+					} else {
+						$displayKey = "[[MediaWiki:$displayKey/$code|$key]]";
+					}
+				} else {
+					$displayKey = $key;
+				}
+				if ( $level == 2 ) {
+					echo "* $displayKey\n";
+				} else {
+					echo "* $displayKey:		'$value'\n";
+				}
+			}
+		}
+	}
+}
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/language/messageTypes.inc
===================================================================
--- /MediaWiki/branches/1.11/maintenance/language/messageTypes.inc	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/language/messageTypes.inc	(revision 1280)
@@ -0,0 +1,408 @@
+<?php
+/**
+ * Several types of messages.
+ *
+ * @addtogroup Maintenance
+ */
+
+/** Ignored messages, which should be exist only in the English messages file. */
+$wgIgnoredMessages = array(
+	'sidebar',
+	'accesskey-pt-userpage',
+	'accesskey-pt-anonuserpage',
+	'accesskey-pt-mytalk',
+	'accesskey-pt-anontalk',
+	'accesskey-pt-preferences',
+	'accesskey-pt-watchlist',
+	'accesskey-pt-mycontris',
+	'accesskey-pt-login',
+	'accesskey-pt-anonlogin',
+	'accesskey-pt-logout',
+	'accesskey-ca-talk',
+	'accesskey-ca-edit',
+	'accesskey-ca-addsection',
+	'accesskey-ca-viewsource',
+	'accesskey-ca-history',
+	'accesskey-ca-protect',
+	'accesskey-ca-delete',
+	'accesskey-ca-undelete',
+	'accesskey-ca-move',
+	'accesskey-ca-watch',
+	'accesskey-ca-unwatch',
+	'accesskey-search',
+	'accesskey-p-logo',
+	'accesskey-n-mainpage',
+	'accesskey-n-portal',
+	'accesskey-n-currentevents',
+	'accesskey-n-recentchanges',
+	'accesskey-n-randompage',
+	'accesskey-n-help',
+	'accesskey-n-sitesupport',
+	'accesskey-t-whatlinkshere',
+	'accesskey-t-recentchangeslinked',
+	'accesskey-feed-rss',
+	'accesskey-feed-atom',
+	'accesskey-t-contributions',
+	'accesskey-t-emailuser',
+	'accesskey-t-upload',
+	'accesskey-t-specialpages',
+	'accesskey-ca-nstab-main',
+	'accesskey-ca-nstab-user',
+	'accesskey-ca-nstab-media',
+	'accesskey-ca-nstab-special',
+	'accesskey-ca-nstab-project',
+	'accesskey-ca-nstab-image',
+	'accesskey-ca-nstab-mediawiki',
+	'accesskey-ca-nstab-template',
+	'accesskey-ca-nstab-help',
+	'accesskey-ca-nstab-category',
+	'accesskey-minoredit',
+	'accesskey-save',
+	'accesskey-preview',
+	'accesskey-diff',
+	'accesskey-compareselectedversions',
+	'accesskey-watch',
+	'addsection',
+	'anonnotice',
+	'autoblock_whitelist',
+	'catseparator',
+	'googlesearch',
+	'exif-make-value',
+	'exif-model-value',
+	'exif-software-value',
+	'history_copyright',
+	'licenses',
+	'loginend',
+	'loginlanguagelinks',
+	'markaspatrolledlink',
+	'newarticletextanon',
+	'newtalkseperator',
+	'noarticletextanon',
+	'number_of_watching_users_RCview',
+	'pagecategorieslink',
+	'patrol-log-header',
+	'pubmedurl',
+	'randompage-url',
+	'rc-change-size',
+	'recentchanges-url',
+	'revision-nav',
+	'rfcurl',
+	'shareddescriptionfollows',
+	'signupend',
+	'sitenotice',
+	'sitesubtitle',
+	'sitetitle',
+	'sp-contributions-footer',
+	'sp-contributions-footer-anon',
+	'statistics-footer',
+	'talkpagetext',
+	'trackback',
+	'trackbackexcerpt',
+	'widthheight',
+);
+
+/** Optional messages, which may be translated only if changed in the other language. */
+$wgOptionalMessages = array(
+	'imgmultigotopost',
+	'linkprefix',
+	'feed-atom',
+	'feed-rss',
+	'sectionlink',
+	'unit-pixel',
+	'allpages-summary',
+	'booksources-summary',
+	'ipblocklist-summary',
+	'listusers-summary',
+	'longpages-summary',
+	'preferences-summary',
+	'specialpages-summary',
+	'whatlinkshere-summary',
+	'whatlinkshere-barrow',
+	'imagelist-summary',
+	'listredirects-summary',
+	'uncategorizedpages-summary',
+	'uncategorizedcategories-summary',
+	'uncategorizedimages-summary',
+	'popularpages-summary',
+	'wantedcategories-summary',
+	'wantedpages-summary',
+	'mostlinked-summary',
+	'mostlinkedcategories-summary',
+	'mostcategories-summary',
+	'mostimages-summary',
+	'mostrevisions-summary',
+	'prefixindex-summary',
+	'shortpages-summary',
+	'newpages-summary',
+	'ancientpages-summary',
+	'newimages-summary',
+	'unwatchedpages-summary',
+	'userrights-summary',
+	'brokenredirects-summary',
+	'deadendpages-summary',
+	'protectedpages-summary',
+	'disambiguations-summary',
+	'doubleredirects-summary',
+	'lonelypages-summary',
+	'unusedtemplates-summary',
+	'recentchangeslinked-summary',
+	'fewestrevisions-summary',
+	'withoutinterwiki-summary',
+	'variantname-zh-cn',
+	'variantname-zh-tw',
+	'variantname-zh-hk',
+	'variantname-zh-sg',
+	'variantname-zh',
+	'variantname-sr-ec',
+	'variantname-sr-el',
+	'variantname-sr-jc',
+	'variantname-sr-jl',
+	'variantname-sr',
+	'variantname-kk-tr',
+	'variantname-kk-kz',
+	'variantname-kk-cn',
+	'variantname-kk',
+);
+
+/** EXIF messages, which may be set as optional in several checks, but are generally mandatory */
+$wgEXIFMessages = array(
+	'exif-imagewidth',
+	'exif-imagelength',
+	'exif-bitspersample',
+	'exif-compression',
+	'exif-photometricinterpretation',
+	'exif-orientation',
+	'exif-samplesperpixel',
+	'exif-planarconfiguration',
+	'exif-ycbcrsubsampling',
+	'exif-ycbcrpositioning',
+	'exif-xresolution',
+	'exif-yresolution',
+	'exif-resolutionunit',
+	'exif-stripoffsets',
+	'exif-rowsperstrip',
+	'exif-stripbytecounts',
+	'exif-jpeginterchangeformat',
+	'exif-jpeginterchangeformatlength',
+	'exif-transferfunction',
+	'exif-whitepoint',
+	'exif-primarychromaticities',
+	'exif-ycbcrcoefficients',
+	'exif-referenceblackwhite',
+	'exif-datetime',
+	'exif-imagedescription',
+	'exif-make',
+	'exif-model',
+	'exif-software',
+	'exif-artist',
+	'exif-copyright',
+	'exif-exifversion',
+	'exif-flashpixversion',
+	'exif-colorspace',
+	'exif-componentsconfiguration',
+	'exif-compressedbitsperpixel',
+	'exif-pixelydimension',
+	'exif-pixelxdimension',
+	'exif-makernote',
+	'exif-usercomment',
+	'exif-relatedsoundfile',
+	'exif-datetimeoriginal',
+	'exif-datetimedigitized',
+	'exif-subsectime',
+	'exif-subsectimeoriginal',
+	'exif-subsectimedigitized',
+	'exif-exposuretime',
+	'exif-exposuretime-format',
+	'exif-fnumber',
+	'exif-fnumber-format',
+	'exif-exposureprogram',
+	'exif-spectralsensitivity',
+	'exif-isospeedratings',
+	'exif-oecf',
+	'exif-shutterspeedvalue',
+	'exif-aperturevalue',
+	'exif-brightnessvalue',
+	'exif-exposurebiasvalue',
+	'exif-maxaperturevalue',
+	'exif-subjectdistance',
+	'exif-meteringmode',
+	'exif-lightsource',
+	'exif-flash',
+	'exif-focallength',
+	'exif-focallength-format',
+	'exif-subjectarea',
+	'exif-flashenergy',
+	'exif-spatialfrequencyresponse',
+	'exif-focalplanexresolution',
+	'exif-focalplaneyresolution',
+	'exif-focalplaneresolutionunit',
+	'exif-subjectlocation',
+	'exif-exposureindex',
+	'exif-sensingmethod',
+	'exif-filesource',
+	'exif-scenetype',
+	'exif-cfapattern',
+	'exif-customrendered',
+	'exif-exposuremode',
+	'exif-whitebalance',
+	'exif-digitalzoomratio',
+	'exif-focallengthin35mmfilm',
+	'exif-scenecapturetype',
+	'exif-gaincontrol',
+	'exif-contrast',
+	'exif-saturation',
+	'exif-sharpness',
+	'exif-devicesettingdescription',
+	'exif-subjectdistancerange',
+	'exif-imageuniqueid',
+	'exif-gpsversionid',
+	'exif-gpslatituderef',
+	'exif-gpslatitude',
+	'exif-gpslongituderef',
+	'exif-gpslongitude',
+	'exif-gpsaltituderef',
+	'exif-gpsaltitude',
+	'exif-gpstimestamp',
+	'exif-gpssatellites',
+	'exif-gpsstatus',
+	'exif-gpsmeasuremode',
+	'exif-gpsdop',
+	'exif-gpsspeedref',
+	'exif-gpsspeed',
+	'exif-gpstrackref',
+	'exif-gpstrack',
+	'exif-gpsimgdirectionref',
+	'exif-gpsimgdirection',
+	'exif-gpsmapdatum',
+	'exif-gpsdestlatituderef',
+	'exif-gpsdestlatitude',
+	'exif-gpsdestlongituderef',
+	'exif-gpsdestlongitude',
+	'exif-gpsdestbearingref',
+	'exif-gpsdestbearing',
+	'exif-gpsdestdistanceref',
+	'exif-gpsdestdistance',
+	'exif-gpsprocessingmethod',
+	'exif-gpsareainformation',
+	'exif-gpsdatestamp',
+	'exif-gpsdifferential',
+	'exif-compression-1',
+	'exif-compression-6',
+	'exif-unknowndate',
+	'exif-photometricinterpretation-2',
+	'exif-photometricinterpretation-6',
+	'exif-orientation-1',
+	'exif-orientation-2',
+	'exif-orientation-3',
+	'exif-orientation-4',
+	'exif-orientation-5',
+	'exif-orientation-6',
+	'exif-orientation-7',
+	'exif-orientation-8',
+	'exif-planarconfiguration-1',
+	'exif-planarconfiguration-2',
+	'exif-xyresolution-i',
+	'exif-xyresolution-c',
+	'exif-colorspace-1',
+	'exif-colorspace-ffff.h',
+	'exif-componentsconfiguration-0',
+	'exif-componentsconfiguration-1',
+	'exif-componentsconfiguration-2',
+	'exif-componentsconfiguration-3',
+	'exif-componentsconfiguration-4',
+	'exif-componentsconfiguration-5',
+	'exif-componentsconfiguration-6',
+	'exif-exposureprogram-0',
+	'exif-exposureprogram-1',
+	'exif-exposureprogram-2',
+	'exif-exposureprogram-3',
+	'exif-exposureprogram-4',
+	'exif-exposureprogram-5',
+	'exif-exposureprogram-6',
+	'exif-exposureprogram-7',
+	'exif-exposureprogram-8',
+	'exif-subjectdistance-value',
+	'exif-meteringmode-0',
+	'exif-meteringmode-1',
+	'exif-meteringmode-2',
+	'exif-meteringmode-3',
+	'exif-meteringmode-4',
+	'exif-meteringmode-5',
+	'exif-meteringmode-6',
+	'exif-meteringmode-255',
+	'exif-lightsource-0',
+	'exif-lightsource-1',
+	'exif-lightsource-2',
+	'exif-lightsource-3',
+	'exif-lightsource-4',
+	'exif-lightsource-9',
+	'exif-lightsource-10',
+	'exif-lightsource-11',
+	'exif-lightsource-12',
+	'exif-lightsource-13',
+	'exif-lightsource-14',
+	'exif-lightsource-15',
+	'exif-lightsource-17',
+	'exif-lightsource-18',
+	'exif-lightsource-19',
+	'exif-lightsource-20',
+	'exif-lightsource-21',
+	'exif-lightsource-22',
+	'exif-lightsource-23',
+	'exif-lightsource-24',
+	'exif-lightsource-255',
+	'exif-focalplaneresolutionunit-2',
+	'exif-sensingmethod-1',
+	'exif-sensingmethod-2',
+	'exif-sensingmethod-3',
+	'exif-sensingmethod-4',
+	'exif-sensingmethod-5',
+	'exif-sensingmethod-7',
+	'exif-sensingmethod-8',
+	'exif-filesource-3',
+	'exif-scenetype-1',
+	'exif-customrendered-0',
+	'exif-customrendered-1',
+	'exif-exposuremode-0',
+	'exif-exposuremode-1',
+	'exif-exposuremode-2',
+	'exif-whitebalance-0',
+	'exif-whitebalance-1',
+	'exif-scenecapturetype-0',
+	'exif-scenecapturetype-1',
+	'exif-scenecapturetype-2',
+	'exif-scenecapturetype-3',
+	'exif-gaincontrol-0',
+	'exif-gaincontrol-1',
+	'exif-gaincontrol-2',
+	'exif-gaincontrol-3',
+	'exif-gaincontrol-4',
+	'exif-contrast-0',
+	'exif-contrast-1',
+	'exif-contrast-2',
+	'exif-saturation-0',
+	'exif-saturation-1',
+	'exif-saturation-2',
+	'exif-sharpness-0',
+	'exif-sharpness-1',
+	'exif-sharpness-2',
+	'exif-subjectdistancerange-0',
+	'exif-subjectdistancerange-1',
+	'exif-subjectdistancerange-2',
+	'exif-subjectdistancerange-3',
+	'exif-gpslatitude-n',
+	'exif-gpslatitude-s',
+	'exif-gpslongitude-e',
+	'exif-gpslongitude-w',
+	'exif-gpsstatus-a',
+	'exif-gpsstatus-v',
+	'exif-gpsmeasuremode-2',
+	'exif-gpsmeasuremode-3',
+	'exif-gpsspeed-k',
+	'exif-gpsspeed-m',
+	'exif-gpsspeed-n',
+	'exif-gpsdirection-t',
+	'exif-gpsdirection-m',
+);
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/language/messages.inc
===================================================================
--- /MediaWiki/branches/1.11/maintenance/language/messages.inc	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/language/messages.inc	(revision 1280)
@@ -0,0 +1,2295 @@
+<?php
+/**
+ * Define the messages structure in the messages file, for an automated rewriting.
+ *
+ * @addtogroup Maintenance
+ */
+
+/** The structure of the messages, divided to blocks */
+$wgMessageStructure = array(
+	'sidebar' => array(
+		'sidebar',
+	),
+	'toggles' => array(
+		'tog-underline',
+		'tog-highlightbroken',
+		'tog-justify',
+		'tog-hideminor',
+		'tog-extendwatchlist',
+		'tog-usenewrc',
+		'tog-numberheadings',
+		'tog-showtoolbar',
+		'tog-editondblclick',
+		'tog-editsection',
+		'tog-editsectiononrightclick',
+		'tog-showtoc',
+		'tog-rememberpassword',
+		'tog-editwidth',
+		'tog-watchcreations',
+		'tog-watchdefault',
+		'tog-watchmoves',
+		'tog-watchdeletion',
+		'tog-minordefault',
+		'tog-previewontop',
+		'tog-previewonfirst',
+		'tog-nocache',
+		'tog-enotifwatchlistpages',
+		'tog-enotifusertalkpages',
+		'tog-enotifminoredits',
+		'tog-enotifrevealaddr',
+		'tog-shownumberswatching',
+		'tog-fancysig',
+		'tog-externaleditor',
+		'tog-externaldiff',
+		'tog-showjumplinks',
+		'tog-uselivepreview',
+		'tog-forceeditsummary',
+		'tog-watchlisthideown',
+		'tog-watchlisthidebots',
+		'tog-watchlisthideminor',
+		'tog-nolangconversion',
+		'tog-ccmeonemails',
+		'tog-diffonly',
+	),
+	'underline' => array(
+		'underline-always',
+		'underline-never',
+		'underline-default',
+	),
+	'skinpreview' => array(
+		'skinpreview',
+	),
+	'dates' => array(
+		'sunday',
+		'monday',
+		'tuesday',
+		'wednesday',
+		'thursday',
+		'friday',
+		'saturday',
+		'sun',
+		'mon',
+		'tue',
+		'wed',
+		'thu',
+		'fri',
+		'sat',
+		'january',
+		'february',
+		'march',
+		'april',
+		'may_long',
+		'june',
+		'july',
+		'august',
+		'september',
+		'october',
+		'november',
+		'december',
+		'january-gen',
+		'february-gen',
+		'march-gen',
+		'april-gen',
+		'may-gen',
+		'june-gen',
+		'july-gen',
+		'august-gen',
+		'september-gen',
+		'october-gen',
+		'november-gen',
+		'december-gen',
+		'jan',
+		'feb',
+		'mar',
+		'apr',
+		'may',
+		'jun',
+		'jul',
+		'aug',
+		'sep',
+		'oct',
+		'nov',
+		'dec',
+	),
+	'categories' => array(
+		'categories',
+		'pagecategories',
+		'pagecategorieslink',
+		'category_header',
+		'subcategories',
+		'category-media-header',
+	),
+	'mainpage' => array(
+		'linkprefix',
+		'mainpagetext',
+		'mainpagedocfooter',
+	),
+	'miscellaneous1' => array(
+		'about',
+		'article',
+		'newwindow',
+		'cancel',
+		'qbfind',
+		'qbbrowse',
+		'qbedit',
+		'qbpageoptions',
+		'qbpageinfo',
+		'qbmyoptions',
+		'qbspecialpages',
+		'moredotdotdot',
+		'mypage',
+		'mytalk',
+		'anontalk',
+		'navigation',
+	),
+	'metadata_help' => array(
+		'metadata_help',
+	),
+	'miscellaneous2' => array(
+		'errorpagetitle',
+		'returnto',
+		'tagline',
+		'help',
+		'search',
+		'searchbutton',
+		'go',
+		'searcharticle',
+		'history',
+		'history_short',
+		'updatedmarker',
+		'info_short',
+		'printableversion',
+		'permalink',
+		'print',
+		'edit',
+		'editthispage',
+		'delete',
+		'deletethispage',
+		'undelete_short',
+		'protect',
+		'protect_change',
+		'protectthispage',
+		'unprotect',
+		'unprotectthispage',
+		'newpage',
+		'talkpage',
+		'talkpagelinktext',
+		'specialpage',
+		'personaltools',
+		'postcomment',
+		'addsection',
+		'articlepage',
+		'talk',
+		'views',
+		'toolbox',
+		'userpage',
+		'projectpage',
+		'imagepage',
+		'mediawikipage',
+		'templatepage',
+		'viewhelppage',
+		'categorypage',
+		'viewtalkpage',
+		'otherlanguages',
+		'redirectedfrom',
+		'redirectpagesub',
+		'lastmodifiedat',
+		'viewcount',
+		'protectedpage',
+		'jumpto',
+		'jumptonavigation',
+		'jumptosearch',
+	),
+	'links' => array(
+		'aboutsite',
+		'aboutpage',
+		'bugreports',
+		'bugreportspage',
+		'copyright',
+		'copyrightpagename',
+		'copyrightpage',
+		'currentevents',
+		'currentevents-url',
+		'disclaimers',
+		'disclaimerpage',
+		'edithelp',
+		'edithelppage',
+		'faq',
+		'faqpage',
+		'help',
+		'helppage',
+		'mainpage',
+		'policy-url',
+		'portal',
+		'portal-url',
+		'privacy',
+		'privacypage',
+		'sitesupport',
+		'sitesupport-url',
+	),
+	'badaccess' => array(
+		'badaccess',
+		'badaccess-group0',
+		'badaccess-group1',
+		'badaccess-group2',
+		'badaccess-groups',
+	),
+	'versionrequired' => array(
+		'versionrequired',
+		'versionrequiredtext',
+	),
+	'miscellaneous3' => array(
+		'ok',
+		'sitetitle',
+		'pagetitle',
+		'sitesubtitle',
+		'retrievedfrom',
+		'youhavenewmessages',
+		'newmessageslink',
+		'newmessagesdifflink',
+		'editsection',
+		'editold',
+		'editsectionhint',
+		'toc',
+		'showtoc',
+		'hidetoc',
+		'thisisdeleted',
+		'viewdeleted',
+		'restorelink',
+		'feedlinks',
+		'feed-invalid',
+		'feed-atom',
+		'feed-rss',
+		'sitenotice',
+		'anonnotice',
+	),
+	'nstab' => array(
+		'nstab-main',
+		'nstab-user',
+		'nstab-media',
+		'nstab-special',
+		'nstab-project',
+		'nstab-image',
+		'nstab-mediawiki',
+		'nstab-template',
+		'nstab-help',
+		'nstab-category',
+	),
+	'main' => array(
+		'nosuchaction',
+		'nosuchactiontext',
+		'nosuchspecialpage',
+		'nospecialpagetext',
+	),
+	'errors' => array(
+		'error',
+		'databaseerror',
+		'dberrortext',
+		'dberrortextcl',
+		'noconnect',
+		'nodb',
+		'cachederror',
+		'laggedslavemode',
+		'readonly',
+		'enterlockreason',
+		'readonlytext',
+		'missingarticle',
+		'readonly_lag',
+		'internalerror',
+		'filecopyerror',
+		'filerenameerror',
+		'filedeleteerror',
+		'filenotfound',
+		'unexpected',
+		'formerror',
+		'badarticleerror',
+		'cannotdelete',
+		'badtitle',
+		'badtitletext',
+		'perfdisabled',
+		'perfdisabledsub',
+		'perfcached',
+		'perfcachedts',
+		'querypage-no-updates',
+		'wrong_wfQuery_params',
+		'viewsource',
+		'viewsourcefor',
+		'protectedpagetext',
+		'viewsourcetext',
+		'protectedinterface',
+		'editinginterface',
+		'sqlhidden',
+		'cascadeprotected',
+	),
+	'login' => array(
+		'logouttitle',
+		'logouttext',
+		'welcomecreation',
+		'loginpagetitle',
+		'yourname',
+		'yourpassword',
+		'yourpasswordagain',
+		'remembermypassword',
+		'yourdomainname',
+		'externaldberror',
+		'loginproblem',
+		'alreadyloggedin',
+		'login',
+		'loginprompt',
+		'userlogin',
+		'logout',
+		'userlogout',
+		'notloggedin',
+		'nologin',
+		'nologinlink',
+		'createaccount',
+		'gotaccount',
+		'gotaccountlink',
+		'createaccountmail',
+		'badretype',
+		'userexists',
+		'youremail',
+		'username',
+		'uid',
+		'yourrealname',
+		'yourlanguage',
+		'yourvariant',
+		'yournick',
+		'badsig',
+		'email',
+		'prefs-help-email-enotif',
+		'prefs-help-realname',
+		'loginerror',
+		'prefs-help-email',
+		'nocookiesnew',
+		'nocookieslogin',
+		'noname',
+		'loginsuccesstitle',
+		'loginsuccess',
+		'nosuchuser',
+		'nosuchusershort',
+		'nouserspecified',
+		'wrongpassword',
+		'wrongpasswordempty',
+		'mailmypassword',
+		'passwordremindertitle',
+		'passwordremindertext',
+		'noemail',
+		'passwordsent',
+		'blocked-mailpassword',
+		'eauthentsent',
+		'throttled-mailpassword',
+		'loginend',
+		'signupend',
+		'mailerror',
+		'acct_creation_throttle_hit',
+		'emailauthenticated',
+		'emailnotauthenticated',
+		'noemailprefs',
+		'emailconfirmlink',
+		'invalidemailaddress',
+		'accountcreated',
+		'accountcreatedtext',
+	),
+	'resetpass' => array(
+		'resetpass',
+		'resetpass_announce',
+		'resetpass_text',
+		'resetpass_header',
+		'resetpass_submit',
+		'resetpass_success',
+		'resetpass_bad_temporary',
+		'resetpass_forbidden',
+		'resetpass_missing',
+	),
+	'toolbar' => array(
+		'bold_sample',
+		'bold_tip',
+		'italic_sample',
+		'italic_tip',
+		'link_sample',
+		'link_tip',
+		'extlink_sample',
+		'extlink_tip',
+		'headline_sample',
+		'headline_tip',
+		'math_sample',
+		'math_tip',
+		'nowiki_sample',
+		'nowiki_tip',
+		'image_sample',
+		'image_tip',
+		'media_sample',
+		'media_tip',
+		'sig_tip',
+		'hr_tip',
+	),
+	'edit' => array(
+		'summary',
+		'subject',
+		'minoredit',
+		'watchthis',
+		'savearticle',
+		'preview',
+		'showpreview',
+		'showlivepreview',
+		'showdiff',
+		'anoneditwarning',
+		'missingsummary',
+		'missingcommenttext',
+		'missingcommentheader',
+		'summary-preview',
+		'subject-preview',
+		'blockedtitle',
+		'blockedtext',
+		'blockedoriginalsource',
+		'blockededitsource',
+		'whitelistedittitle',
+		'whitelistedittext',
+		'whitelistreadtitle',
+		'whitelistreadtext',
+		'whitelistacctitle',
+		'whitelistacctext',
+		'confirmedittitle',
+		'confirmedittext',
+		'nosuchsectiontitle',
+		'nosuchsectiontext',
+		'loginreqtitle',
+		'loginreqlink',
+		'loginreqpagetext',
+		'accmailtitle',
+		'accmailtext',
+		'newarticle',
+		'newarticletext',
+		'newarticletextanon',
+		'talkpagetext',
+		'anontalkpagetext',
+		'noarticletext',
+		'noarticletextanon',
+		'clearyourcache',
+		'usercssjsyoucanpreview',
+		'usercsspreview',
+		'userjspreview',
+		'userinvalidcssjstitle',
+		'updated',
+		'note',
+		'previewnote',
+		'previewconflict',
+		'session_fail_preview',
+		'session_fail_preview_html',
+		'importing',
+		'editing',
+		'editinguser',
+		'editingsection',
+		'editingcomment',
+		'editconflict',
+		'explainconflict',
+		'yourtext',
+		'storedversion',
+		'nonunicodebrowser',
+		'editingold',
+		'yourdiff',
+		'copyrightwarning',
+		'copyrightwarning2',
+		'longpagewarning',
+		'longpageerror',
+		'readonlywarning',
+		'protectedpagewarning',
+		'semiprotectedpagewarning',
+		'cascadeprotectedwarning',
+		'templatesused',
+		'templatesusedpreview',
+		'templatesusedsection',
+		'template-protected',
+		'template-semiprotected',
+		'edittools',
+		'nocreatetitle',
+		'nocreatetext',
+	),
+	'undo' => array(
+		'undo-success',
+		'undo-failure',
+		'undo-summary',
+	),
+	'cantcreateaccount' => array(
+		'cantcreateaccounttitle',
+		'cantcreateaccounttext',
+	),
+	'history' => array(
+		'revhistory',
+		'viewpagelogs',
+		'nohistory',
+		'revnotfound',
+		'revnotfoundtext',
+		'loadhist',
+		'currentrev',
+		'revisionasof',
+		'revision-info',
+		'revision-nav',
+		'previousrevision',
+		'nextrevision',
+		'currentrevisionlink',
+		'cur',
+		'next',
+		'last',
+		'orig',
+		'page_first',
+		'page_last',
+		'histlegend',
+		'history_copyright',
+		'deletedrev',
+		'histfirst',
+		'histlast',
+		'historysize',
+		'historyempty',
+	),
+	'history-feed' => array(
+		'history-feed-title',
+		'history-feed-description',
+		'history-feed-item-nocomment',
+		'history-feed-empty',
+	),
+	'revdelete' => array(
+		'rev-deleted-comment',
+		'rev-deleted-user',
+		'rev-deleted-event',
+		'rev-deleted-text-permission',
+		'rev-deleted-text-view',
+		'rev-delundel',
+		'revisiondelete',
+		'revdelete-nooldid-title',
+		'revdelete-nooldid-text',
+		'revdelete-selected',
+		'logdelete-selected',
+		'revdelete-text',
+		'revdelete-legend',
+		'revdelete-hide-text',
+		'revdelete-hide-name',
+		'revdelete-hide-comment',
+		'revdelete-hide-user',
+		'revdelete-hide-restricted',
+		'revdelete-suppress',
+		'revdelete-hide-image',
+		'revdelete-unsuppress',
+		'revdelete-log',
+		'revdelete-submit',
+		'revdelete-logentry',
+		'logdelete-logentry',
+		'revdelete-logaction',
+		'logdelete-logaction',
+		'revdelete-success',
+		'logdelete-success',
+	),
+	'oversightlog' => array(
+		'oversightlog',
+		'overlogpagetext',
+	),
+	'diffs' => array(
+		'difference',
+		'loadingrev',
+		'lineno',
+		'editcurrent',
+		'selectnewerversionfordiff',
+		'selectolderversionfordiff',
+		'compareselectedversions',
+		'editundo',
+		'diff-multi',
+	),
+	'search' => array(
+		'searchresults',
+		'searchresulttext',
+		'searchsubtitle',
+		'searchsubtitleinvalid',
+		'badquery',
+		'badquerytext',
+		'matchtotals',
+		'noexactmatch',
+		'titlematches',
+		'notitlematches',
+		'textmatches',
+		'notextmatches',
+		'prevn',
+		'nextn',
+		'viewprevnext',
+		'showingresults',
+		'showingresultsnum',
+		'nonefound',
+		'powersearch',
+		'powersearchtext',
+		'searchdisabled',
+		'googlesearch',
+		'blanknamespace',
+	),
+	'preferences' => array(
+		'preferences',
+		'preferences-summary',
+		'mypreferences',
+		'prefsnologin',
+		'prefsnologintext',
+		'prefsreset',
+		'qbsettings',
+		'qbsettings-none',
+		'qbsettings-fixedleft',
+		'qbsettings-fixedright',
+		'qbsettings-floatingleft',
+		'qbsettings-floatingright',
+		'changepassword',
+		'skin',
+		'math',
+		'dateformat',
+		'datedefault',
+		'datetime',
+		'math_failure',
+		'math_unknown_error',
+		'math_unknown_function',
+		'math_lexing_error',
+		'math_syntax_error',
+		'math_image_error',
+		'math_bad_tmpdir',
+		'math_bad_output',
+		'math_notexvc',
+		'prefs-personal',
+		'prefs-rc',
+		'prefs-watchlist',
+		'prefs-watchlist-days',
+		'prefs-watchlist-edits',
+		'prefs-misc',
+		'saveprefs',
+		'resetprefs',
+		'oldpassword',
+		'newpassword',
+		'retypenew',
+		'textboxsize',
+		'rows',
+		'columns',
+		'searchresultshead',
+		'resultsperpage',
+		'contextlines',
+		'contextchars',
+		'stubthreshold',
+		'recentchangesdays',
+		'recentchangescount',
+		'savedprefs',
+		'timezonelegend',
+		'timezonetext',
+		'localtime',
+		'timezoneoffset',
+		'servertime',
+		'guesstimezone',
+		'allowemail',
+		'defaultns',
+		'default',
+		'files',
+	),
+	'userrights' => array(
+		'userrights-lookup-user',
+		'userrights-user-editname',
+		'editusergroup',
+		'userrights-editusergroup',
+		'saveusergroups',
+		'userrights-groupsmember',
+		'userrights-groupsavailable',
+		'userrights-groupshelp',
+		'userrights-reason',
+	),
+	'group' => array(
+		'group',
+		'group-bot',
+		'group-sysop',
+		'group-bureaucrat',
+		'group-all',
+	),
+	'group-member' => array(
+		'group-bot-member',
+		'group-sysop-member',
+		'group-bureaucrat-member',
+	),
+	'grouppage' => array(
+		'grouppage-bot',
+		'grouppage-sysop',
+		'grouppage-bureaucrat',
+	),
+	'rightslog' => array(
+		'rightslog',
+		'rightslogtext',
+		'rightslogentry',
+		'rightsnone',
+	),
+	'recentchanges' => array(
+		'nchanges',
+		'recentchanges',
+		'recentchanges-url',
+		'recentchangestext',
+		'recentchanges-feed-description',
+		'rcnote',
+		'rcnotefrom',
+		'rclistfrom',
+		'rcshowhideminor',
+		'rcshowhidebots',
+		'rcshowhideliu',
+		'rcshowhideanons',
+		'rcshowhidepatr',
+		'rcshowhidemine',
+		'rclinks',
+		'diff',
+		'hist',
+		'hide',
+		'show',
+		'minoreditletter',
+		'newpageletter',
+		'boteditletter',
+		'sectionlink',
+		'number_of_watching_users_RCview',
+		'number_of_watching_users_pageview',
+		'rc_categories',
+		'rc_categories_any',
+		'rc-change-size',
+	),
+	'recentchangeslinked' => array(
+		'recentchangeslinked',
+		'recentchangeslinked-noresult',
+		'recentchangeslinked-summary',
+	),
+	'upload' => array(
+		'upload',
+		'uploadbtn',
+		'reupload',
+		'reuploaddesc',
+		'uploadnologin',
+		'uploadnologintext',
+		'upload_directory_read_only',
+		'uploaderror',
+		'uploadtext',
+		'uploadlog',
+		'uploadlogpage',
+		'uploadlogpagetext',
+		'filename',
+		'filedesc',
+		'fileuploadsummary',
+		'filestatus',
+		'filesource',
+		'uploadedfiles',
+		'ignorewarning',
+		'ignorewarnings',
+		'minlength',
+		'illegalfilename',
+		'badfilename',
+		'filetype-badmime',
+		'filetype-badtype',
+		'filetype-missing',
+		'large-file',
+		'largefileserver',
+		'emptyfile',
+		'fileexists',
+		'fileexists-extension',
+		'fileexists-thumb',
+		'fileexists-thumbnail-yes',
+		'file-thumbnail-no',
+		'fileexists-forbidden',
+		'fileexists-shared-forbidden',
+		'successfulupload',
+		'fileuploaded',
+		'uploadwarning',
+		'savefile',
+		'uploadedimage',
+		'uploaddisabled',
+		'uploaddisabledtext',
+		'uploadscripted',
+		'uploadcorrupt',
+		'uploadvirus',
+		'sourcefilename',
+		'destfilename',
+		'watchthisupload',
+		'filewasdeleted',
+	),
+	'upload-errors' => array(
+		'upload-proto-error',
+		'upload-proto-error-text',
+		'upload-file-error',
+		'upload-file-error-text',
+		'upload-misc-error',
+		'upload-misc-error-text',
+	),
+	'upload-curl-errors' => array(
+		'upload-curl-error6',
+		'upload-curl-error6-text',
+		'upload-curl-error28',
+		'upload-curl-error28-text',
+	),
+	'licenses' => array(
+		'license',
+		'nolicense',
+		'licenses',
+		'upload_source_url',
+		'upload_source_file',
+	),
+	'imagelist' => array(
+		'imagelist',
+		'imagelist-summary',
+		'imagelisttext',
+		'imagelistforuser',
+		'getimagelist',
+		'ilsubmit',
+		'showlast',
+		'byname',
+		'bydate',
+		'bysize',
+		'imgdelete',
+		'imgdesc',
+		'imgfile',
+		'imglegend',
+		'imghistory',
+		'revertimg',
+		'deleteimg',
+		'deleteimgcompletely',
+		'imghistlegend',
+		'imagelinks',
+		'linkstoimage',
+		'nolinkstoimage',
+		'sharedupload',
+		'shareduploadwiki',
+		'shareduploadwiki-linktext',
+		'shareddescriptionfollows',
+		'noimage',
+		'noimage-linktext',
+		'uploadnewversion-linktext',
+		'imagelist_date',
+		'imagelist_name',
+		'imagelist_user',
+		'imagelist_size',
+		'imagelist_description',
+		'imagelist_search_for',
+	),
+	'mimesearch' => array(
+		'mimesearch',
+		'mimesearch-summary',
+		'mimetype',
+		'download',
+	),
+	'unwatchedpages' => array(
+		'unwatchedpages',
+		'unwatchedpages-summary',
+	),
+	'listredirects' => array(
+		'listredirects',
+		'listredirects-summary',
+	),
+	'unusedtemplates' => array(
+		'unusedtemplates',
+		'unusedtemplates-summary',
+		'unusedtemplatestext',
+		'unusedtemplateswlh',
+	),
+	'randomredirect' => array(
+		'randomredirect',
+		'randomredirect-nopages',
+	),
+	'statistics' => array(
+		'statistics',
+		'sitestats',
+		'userstats',
+		'sitestatstext',
+		'userstatstext',
+		'statistics-mostpopular',
+		'statistics-footer',
+	),
+	'disambiguations' => array(
+		'disambiguations',
+		'disambiguations-summary',
+		'disambiguationspage',
+		'disambiguations-text',
+	),
+	'doubleredirects' => array(
+		'doubleredirects',
+		'doubleredirects-summary',
+		'doubleredirectstext',
+	),
+	'brokenredirects' => array(
+		'brokenredirects',
+		'brokenredirects-summary',
+		'brokenredirectstext',
+		'brokenredirects-edit',
+		'brokenredirects-delete',
+	),
+	'withoutinterwiki' => array(
+		'withoutinterwiki',
+		'withoutinterwiki-header',
+		'withoutinterwiki-summary',
+	),
+	'fewestrevisions' => array(
+		'fewestrevisions',
+		'fewestrevisions-summary',
+	),
+	'specialpages' => array(
+		'nbytes',
+		'ncategories',
+		'nlinks',
+		'nmembers',
+		'nrevisions',
+		'nviews',
+		'nchanges',
+		'specialpage-empty',
+		'lonelypages',
+		'lonelypages-summary',
+		'lonelypagestext',
+		'uncategorizedpages',
+		'uncategorizedpages-summary',
+		'uncategorizedcategories',
+		'uncategorizedcategories-summary',
+		'uncategorizedimages',
+		'uncategorizedimages-summary',
+		'unusedcategories',
+		'unusedimages',
+		'popularpages',
+		'popularpages-summary',
+		'wantedcategories',
+		'wantedcategories-summary',
+		'wantedpages',
+		'wantedpages-summary',
+		'mostlinked',
+		'mostlinked-summary',
+		'mostlinkedcategories',
+		'mostlinkedcategories-summary',
+		'mostcategories',
+		'mostcategories-summary',
+		'mostimages',
+		'mostimages-summary',
+		'mostrevisions',
+		'mostrevisions-summary',
+		'allpages',
+		'allpages-summary',
+		'prefixindex',
+		'prefixindex-summary',
+		'randompage',
+		'randompage-nopages',
+		'randompage-url',
+		'shortpages',
+		'shortpages-summary',
+		'longpages',
+		'longpages-summary',
+		'deadendpages',
+		'deadendpages-summary',
+		'deadendpagestext',
+		'protectedpages',
+		'protectedpages-summary',
+		'protectedpagestext',
+		'protectedpagesempty',
+		'listusers',
+		'listusers-summary',
+		'specialpages',
+		'specialpages-summary',
+		'spheading',
+		'restrictedpheading',
+		'rclsub',
+		'newpages',
+		'newpages-summary',
+		'newpages-username',
+		'ancientpages',
+		'ancientpages-summary',
+		'intl',
+		'move',
+		'movethispage',
+		'unusedimagestext',
+		'unusedcategoriestext',
+	),
+	'booksources' => array(
+		'booksources',
+		'booksources-summary',
+		'booksources-search-legend',
+		'booksources-isbn',
+		'booksources-go',
+		'booksources-text',
+	),
+	'specialpages2' => array(
+		'categoriespagetext',
+		'data',
+		'userrights',
+		'userrights-summary',
+		'groups',
+		'isbn',
+		'rfcurl',
+		'pubmedurl',
+		'alphaindexline',
+		'version',
+	),
+	'logpages' => array(
+		'specialloguserlabel',
+		'speciallogtitlelabel',
+		'log',
+		'log-search-legend',
+		'log-search-submit',
+		'alllogstext',
+		'logempty',
+		'log-title-wildcard',
+	),
+	'allpages' => array(
+		'nextpage',
+		'prevpage',
+		'allpagesfrom',
+		'allarticles',
+		'allinnamespace',
+		'allnotinnamespace',
+		'allpagesprev',
+		'allpagesnext',
+		'allpagessubmit',
+		'allpagesprefix',
+		'allpagesbadtitle',
+	),
+	'listusers' => array(
+		'listusersfrom',
+		'listusers-submit',
+		'listusers-noresult',
+	),
+	'emailuser' => array(
+		'mailnologin',
+		'mailnologintext',
+		'emailuser',
+		'emailpage',
+		'emailpagetext',
+		'usermailererror',
+		'defemailsubject',
+		'noemailtitle',
+		'noemailtext',
+		'emailfrom',
+		'emailto',
+		'emailsubject',
+		'emailmessage',
+		'emailsend',
+		'emailccme',
+		'emailccsubject',
+		'emailsent',
+		'emailsenttext',
+	),
+	'watchlist' => array(
+		'watchlist',
+		'mywatchlist',
+		'watchlistfor',
+		'nowatchlist',
+		'watchlistanontext',
+		'watchlistcount',
+		'clearwatchlist',
+		'watchlistcleartext',
+		'watchlistclearbutton',
+		'watchlistcleardone',
+		'watchnologin',
+		'watchnologintext',
+		'addedwatch',
+		'addedwatchtext',
+		'removedwatch',
+		'removedwatchtext',
+		'watch',
+		'watchthispage',
+		'unwatch',
+		'unwatchthispage',
+		'notanarticle',
+		'watchnochange',
+		'watchdetails',
+		'wlheader-enotif',
+		'wlheader-showupdated',
+		'watchmethod-recent',
+		'watchmethod-list',
+		'removechecked',
+		'watchlistcontains',
+		'watcheditlist',
+		'removingchecked',
+		'couldntremove',
+		'iteminvalidname',
+		'wlnote',
+		'wlshowlast',
+		'wlsaved',
+		'watchlist-show-bots',
+		'watchlist-hide-bots',
+		'watchlist-show-own',
+		'watchlist-hide-own',
+		'watchlist-show-minor',
+		'watchlist-hide-minor',
+		'wldone',
+	),
+	'watching' => array(
+		'watching',
+		'unwatching',
+	),
+	'enotif' => array(
+		'enotif_mailer',
+		'enotif_reset',
+		'enotif_newpagetext',
+		'changed',
+		'created',
+		'enotif_subject',
+		'enotif_lastvisited',
+		'enotif_body',
+	),
+	'deleteprotectrev' => array(
+		'deletepage',
+		'confirm',
+		'excontent',
+		'excontentauthor',
+		'exbeforeblank',
+		'exblank',
+		'confirmdelete',
+		'deletesub',
+		'historywarning',
+		'confirmdeletetext',
+		'actioncomplete',
+		'deletedtext',
+		'deletedarticle',
+		'dellogpage',
+		'dellogpagetext',
+		'deletionlog',
+		'reverted',
+		'deletecomment',
+		'imagereverted',
+		'rollback',
+		'rollback_short',
+		'rollbacklink',
+		'rollbackfailed',
+		'cantrollback',
+		'alreadyrolled',
+		'editcomment',
+		'revertpage',
+		'sessionfailure',
+		'protectlogpage',
+		'protectlogtext',
+		'protectedarticle',
+		'unprotectedarticle',
+		'protectsub',
+		'confirmprotecttext',
+		'confirmprotect',
+		'protectmoveonly',
+		'protectcomment',
+		'protectexpiry',
+		'protect_expiry_invalid',
+		'protect_expiry_old',
+		'unprotectsub',
+		'confirmunprotecttext',
+		'confirmunprotect',
+		'unprotectcomment',
+		'protect-unchain',
+		'protect-text',
+		'protect-locked-blocked',
+		'protect-locked-dblock',
+		'protect-locked-access',
+		'protect-cascadeon',
+		'protect-default',
+		'protect-level-autoconfirmed',
+		'protect-level-sysop',
+		'protect-summary-cascade',
+		'protect-expiring',
+		'protect-cascade',
+		'restriction-type',
+		'restriction-level',
+		'minimum-size',
+	),
+	'restrictions' => array(
+		'restriction-edit',
+		'restriction-move',
+	),
+	'restriction-levels' => array(
+		'restriction-level-sysop',
+		'restriction-level-autoconfirmed',
+		'restriction-level-all',
+	),
+	'undelete' => array(
+		'undelete',
+		'undeletepage',
+		'viewdeletedpage',
+		'undeletepagetext',
+		'undeleteextrahelp',
+		'undeleterevisions',
+		'undeletehistory',
+		'undeleterevdel',
+		'undeletehistorynoadmin',
+		'undelete-revision',
+		'undeleterevision-missing',
+		'undeletebtn',
+		'undeletereset',
+		'undeletecomment',
+		'undeletedarticle',
+		'undeletedrevisions',
+		'undeletedrevisions-files',
+		'undeletedfiles',
+		'cannotundelete',
+		'undeletedpage',
+		'undelete-header',
+		'undelete-search-box',
+		'undelete-search-prefix',
+		'undelete-search-submit',
+		'undelete-no-results',
+	),
+	'nsform' => array(
+		'namespace',
+		'invert',
+	),
+	'contributions' => array(
+		'contributions',
+		'mycontris',
+		'contribsub2',
+		'nocontribs',
+		'ucnote',
+		'uclinks',
+		'uctop',
+	),
+	'sp-contributions' => array(
+		'sp-contributions-newest',
+		'sp-contributions-oldest',
+		'sp-contributions-newer',
+		'sp-contributions-older',
+		'sp-contributions-newbies',
+		'sp-contributions-newbies-sub',
+		'sp-contributions-blocklog',
+		'sp-contributions-search',
+		'sp-contributions-username',
+		'sp-contributions-submit',
+		'sp-contributions-footer',
+		'sp-contributions-footer-anon',
+	),
+	'newimages-showfrom' => array(
+		'sp-newimages-showfrom',
+	),
+	'whatlinkshere' => array(
+		'whatlinkshere',
+		'whatlinkshere-summary',
+		'whatlinkshere-barrow',
+		'notargettitle',
+		'notargettext',
+		'linklistsub',
+		'linkshere',
+		'nolinkshere',
+		'nolinkshere-ns',
+		'isredirect',
+		'istemplate',
+		'whatlinkshere-prev',
+		'whatlinkshere-next',
+	),
+	'block' => array(
+		'blockip',
+		'blockiptext',
+		'ipaddress',
+		'ipadressorusername',
+		'ipbexpiry',
+		'ipbreason',
+		'ipbreasonotherlist',
+		'ipbreason-dropdown',
+		'ipbanononly',
+		'ipbcreateaccount',
+		'ipbenableautoblock',
+		'ipbsubmit',
+		'ipbother',
+		'ipboptions',
+		'ipbotheroption',
+		'ipbotherreason',
+		'ipbhidename',
+		'badipaddress',
+		'blockipsuccesssub',
+		'blockipsuccesstext',
+		'ipb-edit-dropdown',
+		'ipb-unblock-addr',
+		'ipb-unblock',
+		'ipb-blocklist-addr',
+		'ipb-blocklist',
+		'unblockip',
+		'unblockiptext',
+		'ipusubmit',
+		'unblocked',
+		'ipblocklist',
+		'ipblocklist-summary',
+		'ipblocklist-submit',
+		'blocklistline',
+		'infiniteblock',
+		'expiringblock',
+		'anononlyblock',
+		'noautoblockblock',
+		'createaccountblock',
+		'ipblocklistempty',
+		'blocklink',
+		'unblocklink',
+		'contribslink',
+		'autoblocker',
+		'blocklogpage',
+		'blocklogentry',
+		'blocklogtext',
+		'unblocklogentry',
+		'block-log-flags-anononly',
+		'block-log-flags-nocreate',
+		'block-log-flags-noautoblock',
+		'range_block_disabled',
+		'ipb_expiry_invalid',
+		'ipb_already_blocked',
+		'ip_range_invalid',
+		'proxyblocker',
+		'ipb_cant_unblock',
+		'proxyblockreason',
+		'proxyblocksuccess',
+		'sorbs',
+		'sorbsreason',
+		'sorbs_create_account_reason',
+	),
+	'developertools' => array(
+		'lockdb',
+		'unlockdb',
+		'lockdbtext',
+		'unlockdbtext',
+		'lockconfirm',
+		'unlockconfirm',
+		'lockbtn',
+		'unlockbtn',
+		'locknoconfirm',
+		'lockdbsuccesssub',
+		'unlockdbsuccesssub',
+		'lockdbsuccesstext',
+		'unlockdbsuccesstext',
+		'lockfilenotwritable',
+		'databasenotlocked',
+	),
+	'movepage' => array(
+		'movepage',
+		'movepagetext',
+		'movepagetalktext',
+		'movearticle',
+		'movenologin',
+		'movenologintext',
+		'newtitle',
+		'move-watch',
+		'movepagebtn',
+		'pagemovedsub',
+		'pagemovedtext',
+		'articleexists',
+		'talkexists',
+		'movedto',
+		'movetalk',
+		'talkpagemoved',
+		'talkpagenotmoved',
+		'1movedto2',
+		'1movedto2_redir',
+		'movelogpage',
+		'movelogpagetext',
+		'movereason',
+		'revertmove',
+		'delete_and_move',
+		'delete_and_move_text',
+		'delete_and_move_confirm',
+		'delete_and_move_reason',
+		'selfmove',
+		'immobile_namespace',
+	),
+	'export' => array(
+		'export',
+		'exporttext',
+		'exportcuronly',
+		'exportnohistory',
+		'export-submit',
+		'export-addcattext',
+		'export-addcat',
+	),
+	'allmessages' => array(
+		'allmessages',
+		'allmessagesname',
+		'allmessagesdefault',
+		'allmessagescurrent',
+		'allmessagestext',
+		'allmessagesnotsupportedUI',
+		'allmessagesnotsupportedDB',
+		'allmessagesfilter',
+		'allmessagesmodified',
+	),
+	'thumbnails' => array(
+		'thumbnail-more',
+		'missingimage',
+		'filemissing',
+		'thumbnail_error',
+		'djvu_page_error',
+		'djvu_no_xml',
+		'thumbnail_invalid_params',
+		'thumbnail_dest_directory',
+	),
+	'import' => array(
+		'import',
+		'importinterwiki',
+		'import-interwiki-text',
+		'import-interwiki-history',
+		'import-interwiki-submit',
+		'import-interwiki-namespace',
+		'importtext',
+		'importstart',
+		'import-revision-count',
+		'importnopages',
+		'importfailed',
+		'importunknownsource',
+		'importcantopen',
+		'importbadinterwiki',
+		'importnotext',
+		'importsuccess',
+		'importhistoryconflict',
+		'importnosources',
+		'importnofile',
+		'importuploaderror',
+	),
+	'importlog' => array(
+		'importlogpage',
+		'importlogpagetext',
+		'import-logentry-upload',
+		'import-logentry-upload-detail',
+		'import-logentry-interwiki',
+		'import-logentry-interwiki-detail',
+	),
+	'accesskeys' => array(
+		'accesskey-pt-userpage',
+		'accesskey-pt-anonuserpage',
+		'accesskey-pt-mytalk',
+		'accesskey-pt-anontalk',
+		'accesskey-pt-preferences',
+		'accesskey-pt-watchlist',
+		'accesskey-pt-mycontris',
+		'accesskey-pt-login',
+		'accesskey-pt-anonlogin',
+		'accesskey-pt-logout',
+		'accesskey-ca-talk',
+		'accesskey-ca-edit',
+		'accesskey-ca-addsection',
+		'accesskey-ca-viewsource',
+		'accesskey-ca-history',
+		'accesskey-ca-protect',
+		'accesskey-ca-delete',
+		'accesskey-ca-undelete',
+		'accesskey-ca-move',
+		'accesskey-ca-watch',
+		'accesskey-ca-unwatch',
+		'accesskey-search',
+		'accesskey-p-logo',
+		'accesskey-n-mainpage',
+		'accesskey-n-portal',
+		'accesskey-n-currentevents',
+		'accesskey-n-recentchanges',
+		'accesskey-n-randompage',
+		'accesskey-n-help',
+		'accesskey-n-sitesupport',
+		'accesskey-t-whatlinkshere',
+		'accesskey-t-recentchangeslinked',
+		'accesskey-feed-rss',
+		'accesskey-feed-atom',
+		'accesskey-t-contributions',
+		'accesskey-t-emailuser',
+		'accesskey-t-upload',
+		'accesskey-t-specialpages',
+		'accesskey-ca-nstab-main',
+		'accesskey-ca-nstab-user',
+		'accesskey-ca-nstab-media',
+		'accesskey-ca-nstab-special',
+		'accesskey-ca-nstab-project',
+		'accesskey-ca-nstab-image',
+		'accesskey-ca-nstab-mediawiki',
+		'accesskey-ca-nstab-template',
+		'accesskey-ca-nstab-help',
+		'accesskey-ca-nstab-category',
+		'accesskey-minoredit',
+		'accesskey-save',
+		'accesskey-preview',
+		'accesskey-diff',
+		'accesskey-compareselectedversions',
+		'accesskey-watch',
+	),
+	'tooltips' => array(
+		'tooltip-pt-userpage',
+		'tooltip-pt-anonuserpage',
+		'tooltip-pt-mytalk',
+		'tooltip-pt-anontalk',
+		'tooltip-pt-preferences',
+		'tooltip-pt-watchlist',
+		'tooltip-pt-mycontris',
+		'tooltip-pt-login',
+		'tooltip-pt-anonlogin',
+		'tooltip-pt-logout',
+		'tooltip-ca-talk',
+		'tooltip-ca-edit',
+		'tooltip-ca-addsection',
+		'tooltip-ca-viewsource',
+		'tooltip-ca-history',
+		'tooltip-ca-protect',
+		'tooltip-ca-delete',
+		'tooltip-ca-undelete',
+		'tooltip-ca-move',
+		'tooltip-ca-watch',
+		'tooltip-ca-unwatch',
+		'tooltip-search',
+		'tooltip-p-logo',
+		'tooltip-n-mainpage',
+		'tooltip-n-portal',
+		'tooltip-n-currentevents',
+		'tooltip-n-recentchanges',
+		'tooltip-n-randompage',
+		'tooltip-n-help',
+		'tooltip-n-sitesupport',
+		'tooltip-t-whatlinkshere',
+		'tooltip-t-recentchangeslinked',
+		'tooltip-feed-rss',
+		'tooltip-feed-atom',
+		'tooltip-t-contributions',
+		'tooltip-t-emailuser',
+		'tooltip-t-upload',
+		'tooltip-t-specialpages',
+		'tooltip-ca-nstab-main',
+		'tooltip-ca-nstab-user',
+		'tooltip-ca-nstab-media',
+		'tooltip-ca-nstab-special',
+		'tooltip-ca-nstab-project',
+		'tooltip-ca-nstab-image',
+		'tooltip-ca-nstab-mediawiki',
+		'tooltip-ca-nstab-template',
+		'tooltip-ca-nstab-help',
+		'tooltip-ca-nstab-category',
+		'tooltip-minoredit',
+		'tooltip-save',
+		'tooltip-preview',
+		'tooltip-diff',
+		'tooltip-compareselectedversions',
+		'tooltip-watch',
+		'tooltip-recreate',
+	),
+	'stylesheets' => array(
+		'common.css',
+		'monobook.css',
+	),
+	'scripts' => array(
+		'common.js',
+		'monobook.js',
+	),
+	'metadata_cc' => array(
+		'nodublincore',
+		'nocreativecommons',
+		'notacceptable',
+	),
+	'attribution' => array(
+		'anonymous',
+		'siteuser',
+		'lastmodifiedatby',
+		'and',
+		'othercontribs',
+		'others',
+		'siteusers',
+		'creditspage',
+		'nocredits',
+	),
+	'spamprotection' => array(
+		'spamprotectiontitle',
+		'spamprotectiontext',
+		'spamprotectionmatch',
+		'subcategorycount',
+		'categoryarticlecount',
+		'category-media-count',
+		'listingcontinuesabbrev',
+		'spambot_username',
+		'spam_reverting',
+		'spam_blanking',
+	),
+	'info' => array(
+		'infosubtitle',
+		'numedits',
+		'numtalkedits',
+		'numwatchers',
+		'numauthors',
+		'numtalkauthors',
+	),
+	'math' => array(
+		'mw_math_png',
+		'mw_math_simple',
+		'mw_math_html',
+		'mw_math_source',
+		'mw_math_modern',
+		'mw_math_mathml',
+	),
+	'patrolling' => array(
+		'markaspatrolleddiff',
+		'markaspatrolledlink',
+		'markaspatrolledtext',
+		'markedaspatrolled',
+		'markedaspatrolledtext',
+		'rcpatroldisabled',
+		'rcpatroldisabledtext',
+		'markedaspatrollederror',
+		'markedaspatrollederrortext',
+		'markedaspatrollederror-noautopatrol',
+	),
+	'patrol-log' => array(
+		'patrol-log-page',
+		'patrol-log-header',
+		'patrol-log-line',
+		'patrol-log-auto',
+		'patrol-log-diff',
+	),
+	'imagedeletion' => array(
+		'deletedrevision',
+	),
+	'browsediffs' => array(
+		'previousdiff',
+		'nextdiff',
+	),
+	'media-info' => array(
+		'mediawarning',
+		'imagemaxsize',
+		'thumbsize',
+		'widthheight',
+		'file-info',
+		'file-info-size',
+		'file-nohires',
+		'file-svg',
+		'show-big-image',
+		'show-big-image-thumb',
+	),
+	'newimages' => array(
+		'newimages',
+		'newimages-summary',
+		'showhidebots',
+		'noimages',
+	),
+	'variantname-zh' => array(
+		'variantname-zh-cn',
+		'variantname-zh-tw',
+		'variantname-zh-hk',
+		'variantname-zh-sg',
+		'variantname-zh',
+	),
+	'variantname-sr' => array(
+		'variantname-sr-ec',
+		'variantname-sr-el',
+		'variantname-sr-jc',
+		'variantname-sr-jl',
+		'variantname-sr',
+	),
+	'variantname-kk' => array(
+		'variantname-kk-tr',
+		'variantname-kk-kz',
+		'variantname-kk-cn',
+		'variantname-kk',
+	),
+	'passwordtooshort' => array(
+		'passwordtooshort',
+	),
+	'metadata' => array(
+		'metadata',
+		'metadata-help',
+		'metadata-expand',
+		'metadata-collapse',
+		'metadata-fields',
+	),
+	'exif' => array(
+		'exif-imagewidth',
+		'exif-imagelength',
+		'exif-bitspersample',
+		'exif-compression',
+		'exif-photometricinterpretation',
+		'exif-orientation',
+		'exif-samplesperpixel',
+		'exif-planarconfiguration',
+		'exif-ycbcrsubsampling',
+		'exif-ycbcrpositioning',
+		'exif-xresolution',
+		'exif-yresolution',
+		'exif-resolutionunit',
+		'exif-stripoffsets',
+		'exif-rowsperstrip',
+		'exif-stripbytecounts',
+		'exif-jpeginterchangeformat',
+		'exif-jpeginterchangeformatlength',
+		'exif-transferfunction',
+		'exif-whitepoint',
+		'exif-primarychromaticities',
+		'exif-ycbcrcoefficients',
+		'exif-referenceblackwhite',
+		'exif-datetime',
+		'exif-imagedescription',
+		'exif-make',
+		'exif-model',
+		'exif-software',
+		'exif-artist',
+		'exif-copyright',
+		'exif-exifversion',
+		'exif-flashpixversion',
+		'exif-colorspace',
+		'exif-componentsconfiguration',
+		'exif-compressedbitsperpixel',
+		'exif-pixelydimension',
+		'exif-pixelxdimension',
+		'exif-makernote',
+		'exif-usercomment',
+		'exif-relatedsoundfile',
+		'exif-datetimeoriginal',
+		'exif-datetimedigitized',
+		'exif-subsectime',
+		'exif-subsectimeoriginal',
+		'exif-subsectimedigitized',
+		'exif-exposuretime',
+		'exif-exposuretime-format',
+		'exif-fnumber',
+		'exif-fnumber-format',
+		'exif-exposureprogram',
+		'exif-spectralsensitivity',
+		'exif-isospeedratings',
+		'exif-oecf',
+		'exif-shutterspeedvalue',
+		'exif-aperturevalue',
+		'exif-brightnessvalue',
+		'exif-exposurebiasvalue',
+		'exif-maxaperturevalue',
+		'exif-subjectdistance',
+		'exif-meteringmode',
+		'exif-lightsource',
+		'exif-flash',
+		'exif-focallength',
+		'exif-focallength-format',
+		'exif-subjectarea',
+		'exif-flashenergy',
+		'exif-spatialfrequencyresponse',
+		'exif-focalplanexresolution',
+		'exif-focalplaneyresolution',
+		'exif-focalplaneresolutionunit',
+		'exif-subjectlocation',
+		'exif-exposureindex',
+		'exif-sensingmethod',
+		'exif-filesource',
+		'exif-scenetype',
+		'exif-cfapattern',
+		'exif-customrendered',
+		'exif-exposuremode',
+		'exif-whitebalance',
+		'exif-digitalzoomratio',
+		'exif-focallengthin35mmfilm',
+		'exif-scenecapturetype',
+		'exif-gaincontrol',
+		'exif-contrast',
+		'exif-saturation',
+		'exif-sharpness',
+		'exif-devicesettingdescription',
+		'exif-subjectdistancerange',
+		'exif-imageuniqueid',
+		'exif-gpsversionid',
+		'exif-gpslatituderef',
+		'exif-gpslatitude',
+		'exif-gpslongituderef',
+		'exif-gpslongitude',
+		'exif-gpsaltituderef',
+		'exif-gpsaltitude',
+		'exif-gpstimestamp',
+		'exif-gpssatellites',
+		'exif-gpsstatus',
+		'exif-gpsmeasuremode',
+		'exif-gpsdop',
+		'exif-gpsspeedref',
+		'exif-gpsspeed',
+		'exif-gpstrackref',
+		'exif-gpstrack',
+		'exif-gpsimgdirectionref',
+		'exif-gpsimgdirection',
+		'exif-gpsmapdatum',
+		'exif-gpsdestlatituderef',
+		'exif-gpsdestlatitude',
+		'exif-gpsdestlongituderef',
+		'exif-gpsdestlongitude',
+		'exif-gpsdestbearingref',
+		'exif-gpsdestbearing',
+		'exif-gpsdestdistanceref',
+		'exif-gpsdestdistance',
+		'exif-gpsprocessingmethod',
+		'exif-gpsareainformation',
+		'exif-gpsdatestamp',
+		'exif-gpsdifferential',
+	),
+	'exif-values' => array(
+		'exif-make-value',
+		'exif-model-value',
+		'exif-software-value',
+	),
+	'exif-compression' => array(
+		'exif-compression-1',
+		'exif-compression-6',
+	),
+	'exif-photometricinterpretation' => array(
+		'exif-photometricinterpretation-2',
+		'exif-photometricinterpretation-6',
+	),
+	'exif-unknowndate' => array(
+		'exif-unknowndate',
+	),
+	'exif-orientation' => array(
+		'exif-orientation-1',
+		'exif-orientation-2',
+		'exif-orientation-3',
+		'exif-orientation-4',
+		'exif-orientation-5',
+		'exif-orientation-6',
+		'exif-orientation-7',
+		'exif-orientation-8',
+	),
+	'exif-planarconfiguration' => array(
+		'exif-planarconfiguration-1',
+		'exif-planarconfiguration-2',
+	),
+	'exif-xyresolution' => array(
+		'exif-xyresolution-i',
+		'exif-xyresolution-c',
+	),
+	'exif-colorspace' => array(
+		'exif-colorspace-1',
+		'exif-colorspace-ffff.h',
+	),
+	'exif-componentsconfiguration' => array(
+		'exif-componentsconfiguration-0',
+		'exif-componentsconfiguration-1',
+		'exif-componentsconfiguration-2',
+		'exif-componentsconfiguration-3',
+		'exif-componentsconfiguration-4',
+		'exif-componentsconfiguration-5',
+		'exif-componentsconfiguration-6',
+	),
+	'exif-exposureprogram' => array(
+		'exif-exposureprogram-0',
+		'exif-exposureprogram-1',
+		'exif-exposureprogram-2',
+		'exif-exposureprogram-3',
+		'exif-exposureprogram-4',
+		'exif-exposureprogram-5',
+		'exif-exposureprogram-6',
+		'exif-exposureprogram-7',
+		'exif-exposureprogram-8',
+	),
+	'exif-subjectdistance-value' => array(
+		'exif-subjectdistance-value',
+	),
+	'exif-meteringmode' => array(
+		'exif-meteringmode-0',
+		'exif-meteringmode-1',
+		'exif-meteringmode-2',
+		'exif-meteringmode-3',
+		'exif-meteringmode-4',
+		'exif-meteringmode-5',
+		'exif-meteringmode-6',
+		'exif-meteringmode-255',
+	),
+	'exif-lightsource' => array(
+		'exif-lightsource-0',
+		'exif-lightsource-1',
+		'exif-lightsource-2',
+		'exif-lightsource-3',
+		'exif-lightsource-4',
+		'exif-lightsource-9',
+		'exif-lightsource-10',
+		'exif-lightsource-11',
+		'exif-lightsource-12',
+		'exif-lightsource-13',
+		'exif-lightsource-14',
+		'exif-lightsource-15',
+		'exif-lightsource-17',
+		'exif-lightsource-18',
+		'exif-lightsource-19',
+		'exif-lightsource-20',
+		'exif-lightsource-21',
+		'exif-lightsource-22',
+		'exif-lightsource-23',
+		'exif-lightsource-24',
+		'exif-lightsource-255',
+	),
+	'exif-focalplaneresolutionunit' => array(
+		'exif-focalplaneresolutionunit-2',
+	),
+	'exif-sensingmethod' => array(
+		'exif-sensingmethod-1',
+		'exif-sensingmethod-2',
+		'exif-sensingmethod-3',
+		'exif-sensingmethod-4',
+		'exif-sensingmethod-5',
+		'exif-sensingmethod-7',
+		'exif-sensingmethod-8',
+	),
+	'exif-filesource' => array(
+		'exif-filesource-3',
+	),
+	'exif-scenetype' => array(
+		'exif-scenetype-1',
+	),
+	'exif-customrendered' => array(
+		'exif-customrendered-0',
+		'exif-customrendered-1',
+	),
+	'exif-exposuremode' => array(
+		'exif-exposuremode-0',
+		'exif-exposuremode-1',
+		'exif-exposuremode-2',
+	),
+	'exif-whitebalance' => array(
+		'exif-whitebalance-0',
+		'exif-whitebalance-1',
+	),
+	'exif-scenecapturetype' => array(
+		'exif-scenecapturetype-0',
+		'exif-scenecapturetype-1',
+		'exif-scenecapturetype-2',
+		'exif-scenecapturetype-3',
+	),
+	'exif-gaincontrol' => array(
+		'exif-gaincontrol-0',
+		'exif-gaincontrol-1',
+		'exif-gaincontrol-2',
+		'exif-gaincontrol-3',
+		'exif-gaincontrol-4',
+	),
+	'exif-contrast' => array(
+		'exif-contrast-0',
+		'exif-contrast-1',
+		'exif-contrast-2',
+	),
+	'exif-saturation' => array(
+		'exif-saturation-0',
+		'exif-saturation-1',
+		'exif-saturation-2',
+	),
+	'exif-sharpness' => array(
+		'exif-sharpness-0',
+		'exif-sharpness-1',
+		'exif-sharpness-2',
+	),
+	'exif-subjectdistancerange' => array(
+		'exif-subjectdistancerange-0',
+		'exif-subjectdistancerange-1',
+		'exif-subjectdistancerange-2',
+		'exif-subjectdistancerange-3',
+	),
+	'exif-gpslatitude' => array(
+		'exif-gpslatitude-n',
+		'exif-gpslatitude-s',
+	),
+	'exif-gpslongitude' => array(
+		'exif-gpslongitude-e',
+		'exif-gpslongitude-w',
+	),
+	'exif-gpsstatus' => array(
+		'exif-gpsstatus-a',
+		'exif-gpsstatus-v',
+	),
+	'exif-gpsmeasuremode' => array(
+		'exif-gpsmeasuremode-2',
+		'exif-gpsmeasuremode-3',
+	),
+	'exif-gpsspeed' => array(
+		'exif-gpsspeed-k',
+		'exif-gpsspeed-m',
+		'exif-gpsspeed-n',
+	),
+	'exif-gpsdirection' => array(
+		'exif-gpsdirection-t',
+		'exif-gpsdirection-m',
+	),
+	'edit-externally' => array(
+		'edit-externally',
+		'edit-externally-help',
+	),
+	'all' => array(
+		'recentchangesall',
+		'imagelistall',
+		'watchlistall1',
+		'watchlistall2',
+		'namespacesall',
+	),
+	'confirmemail' => array(
+		'confirmemail',
+		'confirmemail_noemail',
+		'confirmemail_text',
+		'confirmemail_pending',
+		'confirmemail_send',
+		'confirmemail_sent',
+		'confirmemail_oncreate',
+		'confirmemail_sendfailed',
+		'confirmemail_invalid',
+		'confirmemail_needlogin',
+		'confirmemail_success',
+		'confirmemail_loggedin',
+		'confirmemail_error',
+		'confirmemail_subject',
+		'confirmemail_body',
+	),
+	'inputbox' => array(
+		'tryexact',
+		'searchfulltext',
+		'createarticle',
+	),
+	'scarytransclusion' => array(
+		'scarytranscludedisabled',
+		'scarytranscludefailed',
+		'scarytranscludetoolong',
+	),
+	'trackbacks' => array(
+		'trackbackbox',
+		'trackback',
+		'trackbackexcerpt',
+		'trackbackremove',
+		'trackbacklink',
+		'trackbackdeleteok',
+	),
+	'deleteconflict' => array(
+		'deletedwhileediting',
+		'confirmrecreate',
+		'recreate',
+	),
+	'unit-pixel' => array(
+		'unit-pixel',
+	),
+	'htmldump' => array(
+		'redirectingto',
+	),
+	'purge' => array(
+		'confirm_purge',
+		'confirm_purge_button',
+	),
+	'newmessagesmulti' => array(
+		'youhavenewmessagesmulti',
+		'newtalkseperator',
+	),
+	'search2' => array(
+		'searchcontaining',
+		'searchnamed',
+		'articletitles',
+		'hideresults',
+	),
+	'displaytitle' => array(
+		'displaytitle',
+	),
+	'catseparator' => array(
+		'catseparator',
+	),
+	'loginlanguage' => array(
+		'loginlanguagelabel',
+		'loginlanguagelinks',
+	),
+	'imgmulti' => array(
+		'imgmultipageprev',
+		'imgmultipagenext',
+		'imgmultigo',
+		'imgmultigotopre',
+		'imgmultigotopost',
+		'imgmultiparseerror',
+	),
+	'tablepager' => array(
+		'ascending_abbrev',
+		'descending_abbrev',
+		'table_pager_next',
+		'table_pager_prev',
+		'table_pager_first',
+		'table_pager_last',
+		'table_pager_limit',
+		'table_pager_limit_submit',
+		'table_pager_empty',
+	),
+	'autosumm' => array(
+		'autosumm-blank',
+		'autosumm-replace',
+		'autoredircomment',
+		'autosumm-new',
+	),
+	'autoblock_whitelist' => array(
+		'autoblock_whitelist',
+	),
+	'sizeunits' => array(
+		'size-bytes',
+		'size-kilobytes',
+		'size-megabytes',
+		'size-gigabytes',
+	),
+	'livepreview' => array(
+		'livepreview-loading',
+		'livepreview-ready',
+		'livepreview-failed',
+		'livepreview-error',
+	),
+);
+/** Comments for each block */
+$wgBlockComments = array(
+	'sidebar'             => "The sidebar for MonoBook is generated from this message, lines that do not
+begin with * or ** are discarded, furthermore lines that do begin with ** and
+do not contain | are also discarded, but don't depend on this behaviour for
+future releases. Also note that since each list value is wrapped in a unique
+XHTML id it should only appear once and include characters that are legal
+XHTML id names.",
+	'toggles'             => 'User preference toggles',
+	'underline'           => '',
+	'skinpreview'         => '',
+	'dates'               => 'Dates',
+	'categories'          => 'Bits of text used by many pages',
+	'mainpage'            => '',
+	'miscellaneous1'      => '',
+	'metadata_help'       => 'Metadata in edit box',
+	'miscellaneous2'      => '',
+	'links'               => 'All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).',
+	'badaccess'           => '',
+	'versionrequired'     => '',
+	'miscellaneous3'      => '',
+	'nstab'               => "Short words for each namespace, by default used in the 'article' tab in monobook",
+	'main'                => 'Main script and global functions',
+	'errors'              => 'General errors',
+	'login'               => 'Login and logout pages',
+	'resetpass'           => 'Password reset dialog',
+	'toolbar'             => 'Edit page toolbar',
+	'edit'                => 'Edit pages',
+	'undo'                => '"Undo" feature',
+	'cantcreateaccount'   => 'Account creation failure',
+	'history'             => 'History pages',
+	'history-feed'        => 'Revision feed',
+	'revdelete'           => 'Revision deletion',
+	'oversightlog'       => 'Oversight log',
+	'diffs'               => 'Diffs',
+	'search'              => 'Search results',
+	'preferences'         => 'Preferences page',
+	'userrights'          => 'User rights',
+	'group'               => 'Groups',
+	'group-member'        => '',
+	'grouppage'           => '',
+	'rightslog'           => 'User rights log',
+	'recentchanges'       => 'Recent changes',
+	'recentchangeslinked' => 'Recent changes linked',
+	'upload'              => 'Upload',
+	'upload-errors'       => '',
+	'upload-curl-errors'  => 'Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>',
+	'licenses'            => '',
+	'imagelist'           => 'Image list',
+	'mimesearch'          => 'MIME search',
+	'unwatchedpages'      => 'Unwatched pages',
+	'listredirects'       => 'List redirects',
+	'unusedtemplates'     => 'Unused templates',
+	'randomredirect'      => 'Random redirect',
+	'statistics'          => 'Statistics',
+	'disambiguations'     => '',
+	'doubleredirects'     => '',
+	'brokenredirects'     => '',
+	'withoutinterwiki'    => '',
+	'fewestrevisions'     => '',
+	'specialpages'        => 'Miscellaneous special pages',
+	'booksources'         => 'Book sources',
+	'specialpages2'       => '',
+	'logpages'            => 'Special:Log',
+	'allpages'            => 'Special:Allpages',
+	'listusers'           => 'Special:Listusers',
+	'emailuser'           => 'E-mail user',
+	'watchlist'           => 'Watchlist',
+	'watching'            => 'Displayed when you click the "watch" button and it\'s in the process of watching',
+	'enotif'              => '',
+	'deleteprotectrev'    => 'Delete/protect/revert',
+	'restrictions'        => 'Restrictions (nouns)',
+	'restriction-levels'  => 'Restriction levels',
+	'undelete'            => 'Undelete',
+	'nsform'              => 'Namespace form on various pages',
+	'contributions'       => 'Contributions',
+	'sp-contributions'    => '',
+	'newimages-showfrom'  => '',
+	'whatlinkshere'       => 'What links here',
+	'block'               => 'Block/unblock',
+	'developertools'      => 'Developer tools',
+	'movepage'            => 'Move page',
+	'export'              => 'Export',
+	'allmessages'         => 'Namespace 8 related',
+	'thumbnails'          => 'Thumbnails',
+	'import'              => 'Special:Import',
+	'importlog'           => 'Import log',
+	'accesskeys'          => 'Keyboard access keys for power users',
+	'tooltips'            => 'Tooltip help for the actions',
+	'stylesheets'         => 'Stylesheets',
+	'scripts'             => 'Scripts',
+	'metadata_cc'         => 'Metadata',
+	'attribution'         => 'Attribution',
+	'spamprotection'      => 'Spam protection',
+	'info'                => 'Info page',
+	'math'                => 'Math options',
+	'patrolling'          => 'Patrolling',
+	'patrol-log'          => 'Patrol log',
+	'imagedeletion'       => 'Image deletion',
+	'browsediffs'         => 'Browsing diffs',
+	'newimages'           => '',
+	'variantname-zh'      => "Short names for language variants used for language conversion links.
+To disable showing a particular link, set it to 'disable', e.g.
+'variantname-zh-sg' => 'disable',
+Variants for Chinese language",
+	'variantname-sr'      => 'Variants for Serbian language',
+	'variantname-kk'      => 'Variants for Kazakh language',
+	'passwordtooshort'    => '',
+	'media-info'          => 'Media information',
+	'metadata'            => 'Metadata',
+	'exif'                           => 'EXIF tags',
+	'exif-values'                    => 'Make & model, can be wikified in order to link to the camera and model name',
+	'exif-compression'               => 'EXIF attributes',
+	'exif-unknowndate'               => '',
+	'exif-photometricinterpretation' => '',
+	'exif-orientation'               => '',
+	'exif-planarconfiguration'       => '',
+	'exif-xyresolution'              => '',
+	'exif-colorspace'                => '',
+	'exif-componentsconfiguration'   => '',
+	'exif-exposureprogram'           => '',
+	'exif-subjectdistance-value'     => '',
+	'exif-meteringmode'              => '',
+	'exif-lightsource'               => '',
+	'exif-focalplaneresolutionunit'  => '',
+	'exif-sensingmethod'             => '',
+	'exif-filesource'                => '',
+	'exif-scenetype'                 => '',
+	'exif-customrendered'            => '',
+	'exif-exposuremode'              => '',
+	'exif-whitebalance'              => '',
+	'exif-scenecapturetype'          => '',
+	'exif-gaincontrol'               => '',
+	'exif-contrast'                  => '',
+	'exif-saturation'                => '',
+	'exif-sharpness'                 => '',
+	'exif-subjectdistancerange'      => '',
+	'exif-gpslatitude'               => 'Pseudotags used for GPSLatitudeRef and GPSDestLatitudeRef',
+	'exif-gpslongitude'              => 'Pseudotags used for GPSLongitudeRef and GPSDestLongitudeRef',
+	'exif-gpsstatus'                 => '',
+	'exif-gpsmeasuremode'            => '',
+	'exif-gpsspeed'                  => 'Pseudotags used for GPSSpeedRef and GPSDestDistanceRef',
+	'exif-gpsdirection'              => 'Pseudotags used for GPSTrackRef, GPSImgDirectionRef and GPSDestBearingRef',
+	'edit-externally'     => 'External editor support',
+	'all'                 => "'all' in various places, this might be different for inflected languages",
+	'confirmemail'        => 'E-mail address confirmation',
+	'inputbox'            => 'Inputbox extension, may be useful in other contexts as well',
+	'scarytransclusion'   => 'Scary transclusion',
+	'trackbacks'          => 'Trackbacks',
+	'deleteconflict'      => 'Delete conflict',
+	'unit-pixel'          => '',
+	'htmldump'            => 'HTML dump',
+	'purge'               => 'action=purge',
+	'newmessagesmulti'    => '',
+	'search2'             => '',
+	'displaytitle'        => 'DISPLAYTITLE',
+	'catseparator'        => 'Separator for categories in page lists',
+	'loginlanguage'       => '',
+	'imgmulti'            => 'Multipage image navigation',
+	'tablepager'          => 'Table pager',
+	'autosumm'            => 'Auto-summaries',
+	'autoblock_whitelist' => 'Autoblock whitelist',
+	'sizeunits'           => 'Size units',
+	'livepreview'         => 'Live preview',
+);
+
+/** Short comments for standalone messages */
+$wgMessageComments = array(
+	'lastmodifiedat'              => '$1 date, $2 time',
+	'sitenotice'                  => 'the equivalent to wgSiteNotice',
+	'perfdisabledsub'             => 'obsolete?',
+	'history-feed-item-nocomment' => 'user at time',
+	'editcomment'                 => 'only shown if there is an edit comment',
+	'lastmodifiedatby'            => '$1 date, $2 time, $3 user',
+	'exif-orientation-1'          => '0th row: top; 0th column: left',
+	'exif-orientation-2'          => '0th row: top; 0th column: right',
+	'exif-orientation-3'          => '0th row: bottom; 0th column: right',
+	'exif-orientation-4'          => '0th row: bottom; 0th column: left',
+	'exif-orientation-5'          => '0th row: left; 0th column: top',
+	'exif-orientation-6'          => '0th row: right; 0th column: top',
+	'exif-orientation-7'          => '0th row: right; 0th column: bottom',
+	'exif-orientation-8'          => '0th row: left; 0th column: bottom',
+	'autoredircomment'            => 'This should be changed to the new naming convention, but existed beforehand',
+);
+
+/** Messages which contain dollar signs (which are not followed by numbers), and therefore should use a single apostrophe */
+$wgMessagseWithDollarSigns = array(
+	'linkprefix',
+	'enotif_subject',
+	'enotif_body',
+	'allmessagesnotsupportedDB',
+);
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/language/rebuildLanguage.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/language/rebuildLanguage.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/language/rebuildLanguage.php	(revision 1280)
@@ -0,0 +1,64 @@
+<?php
+/**
+ * Rewrite the messages array in the files languages/messages/MessagesXX.php.
+ *
+ * @addtogroup Maintenance
+ */
+
+require_once( dirname(__FILE__).'/../commandLine.inc' );
+require_once( 'languages.inc' );
+require_once( 'writeMessagesArray.inc' );
+
+/**
+ * Rewrite a messages array.
+ *
+ * @param $code The language code.
+ * @param $write Write to the messages file?
+ * @param $listUnknown List the unknown messages?
+ */
+function rebuildLanguage( $code, $write, $listUnknown ) {
+	global $wgLanguages;
+	$messages = $wgLanguages->getMessages( $code );
+	$messages = $messages['all'];
+	writeMessagesToFile( $messages, $code, $write, $listUnknown );
+}
+
+# Show help
+if ( isset( $options['help'] ) ) {
+	echo <<<END
+Run this script to rewrite the messages array in the files languages/messages/MessagesXX.php.
+Parameters:
+	* lang: Language code (default: the installation default language). You can also specify "all" to check all the languages.
+	* help: Show this help.
+Options:
+	* dry-run: Don't write the array to the file.
+	* no-unknown: Don't list the unknown messages.
+
+END;
+	exit();
+}
+
+# Get the language code
+if ( isset( $options['lang'] ) ) {
+	$wgCode = $options['lang'];
+} else {
+	$wgCode = $wgContLang->getCode();
+}
+
+# Get the options
+$wgWriteToFile = !isset( $options['dry-run'] );
+$wgListUnknownMessages = !isset( $options['no-unknown'] );
+
+# Get language objects
+$wgLanguages = new languages();
+
+# Write all the language
+if ( $wgCode == 'all' ) {
+	foreach ( $wgLanguages->getLanguages() as $language ) {
+		rebuildLanguage( $language, $wgWriteToFile, $wgListUnknownMessages );
+	}
+} else {
+	rebuildLanguage( $wgCode, $wgWriteToFile, $wgListUnknownMessages );
+}
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/language/splitLanguageFiles.inc
===================================================================
--- /MediaWiki/branches/1.11/maintenance/language/splitLanguageFiles.inc	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/language/splitLanguageFiles.inc	(revision 1280)
@@ -0,0 +1,1168 @@
+<?php
+/**
+ * This is an experimental list. It will later be used with a script to split
+ * the languages files in several parts then the message system will only load
+ * in memory the parts which are actually needed.
+ *
+ * Generated using: grep -r foobar *
+ *
+ * $commonMsg is the default array. Other arrays will only be loaded if needed.
+ */
+$installerMsg = array (
+'mainpagetext',
+'mainpagedocfooter',
+);
+
+$ActionMsg = array (
+'delete' => array(
+	'delete',
+	'deletethispage',
+	'undelete_short1',
+	'undelete_short',
+	'undelete',
+	'undeletepage',
+	'undeletepagetext',
+	'undeletearticle',
+	'undeleterevisions',
+	'undeletehistory',
+	'undeleterevision',
+	'undeletebtn',
+	'undeletedarticle',
+	'undeletedrevisions',
+	'undeletedtext',
+	),
+'move' => array(
+	'move',
+	'movethispage',
+),
+'revert' => array(
+
+),
+'protect' => array(
+	'confirmprotect',
+	'confirmprotecttext',
+	'confirmunprotect',
+	'confirmunprotecttext',
+	'protect',
+	'protectcomment',
+	'protectmoveonly',
+	'protectpage',
+	'protectsub',
+	'protectthispage',
+	'unprotect',
+	'unprotectthispage',
+	'unprotectsub',
+	'unprotectcomment',
+),
+);
+
+$CreditsMsg = array(
+'anonymous',
+'siteuser',
+'lastmodifiedby',
+'and',
+'othercontribs',
+'others',
+'siteusers',
+'creditspage',
+'nocredits',
+);
+
+// When showing differences
+$DifferenceMsg = array(
+'previousdiff',
+'nextdiff',
+);
+
+// used on page edition
+$EditMsg = array(
+'bold_sample',
+'bold_tip',
+'italic_sample',
+'italic_tip',
+'link_sample',
+'link_tip',
+'extlink_sample',
+'extlink_tip',
+'headline_sample',
+'headline_tip',
+'math_sample',
+'math_tip',
+'nowiki_sample',
+'nowiki_tip',
+'image_sample',
+'image_tip',
+'media_sample',
+'media_tip',
+'sig_tip',
+'hr_tip',
+
+'accesskey-search',
+'accesskey-minoredit',
+'accesskey-save',
+'accesskey-preview',
+'accesskey-diff',
+'accesskey-compareselectedversions',
+'tooltip-search',
+'tooltip-minoredit',
+'tooltip-save',
+'tooltip-preview',
+'tooltip-diff',
+'tooltip-compareselectedversions',
+'tooltip-watch',
+
+'copyrightwarning',
+'copyrightwarning2',
+'editconflict',
+'editing',
+'editingcomment',
+'editingold',
+'editingsection',
+'explainconflict',
+'infobox',
+'infobox_alert',
+'longpagewarning',
+'nonunicodebrowser',
+'previewconflict',
+'previewnote',
+'protectedpagewarning',
+'readonlywarning',
+'spamprotectiontitle',
+'spamprotectiontext',
+'spamprotectionmatch',
+'templatesused',
+'yourdiff',
+'yourtext',
+);
+
+// Per namespace
+$NamespaceCategory = array (
+'category_header',
+'categoryarticlecount',
+'categoryarticlecount1',
+'listingcontinuesabbrev',
+'subcategories',
+'subcategorycount',
+'subcategorycount1',
+'usenewcategorypage',
+);
+
+$NamespaceImage = array (
+'deletedrevision',
+'edit-externally',
+'edit-externally-help',
+'showbigimage',
+);
+
+$NamespaceSpecialMsg = array(
+'nosuchspecialpage',
+'nospecialpagetext',
+);
+
+
+
+// per special pages
+$SpecialAllMessages = array(
+'allmessages',
+'allmessagesname',
+'allmessagesdefault',
+'allmessagescurrent',
+'allmessagestext',
+'allmessagesnotsupportedUI',
+'allmessagesnotsupportedDB',
+);
+
+
+$SpecialAllPages = array(
+'articlenamespace',
+'allpagesformtext1',
+'allpagesformtext2',
+'allarticles',
+'allpagesprev',
+'allpagesnext',
+'allpagesnamespace',
+'allpagessubmit',
+);
+
+
+$SpecialAskSQLMsg = array(
+'asksql',
+'asksqltext',
+'sqlislogged',
+'sqlquery',
+'querybtn',
+'selectonly',
+'querysuccessful',
+);
+
+$SpecialBlockip = array(
+'blockip',
+'blockiptext',
+'range_block_disabled',
+'ipb_expiry_invalid',
+'ip_range_invalid',
+'ipbexpiry',
+'ipbsubmit',
+);
+
+$SpecialContributions = array(
+'contribsub',
+'contributionsall',
+'newbies',
+'nocontribs',
+'ucnote',
+'uclinks',
+'uctop',
+);
+
+$SpecialExportMsg = array (
+'export',
+'exporttext',
+'exportcuronly',
+);
+
+$SpecialImagelist = array(
+'imagelistall',
+);
+
+$SpecialImportMsg = array (
+'import',
+'importtext',
+'importfailed',
+'importnotext',
+'importsuccess',
+'importhistoryconflict',
+);
+
+$SpecialLockdbMsg = array(
+'lockdb',
+'unlockdb',
+'lockdbtext',
+'unlockdbtext',
+'lockconfirm',
+'unlockconfirm',
+'lockbtn',
+'unlockbtn',
+'locknoconfirm',
+'lockdbsuccesssub',
+'unlockdbsuccesssub',
+'lockdbsuccesstext',
+'unlockdbsuccesstext',
+);
+
+$SpecialLogMsg = array(
+'specialloguserlabel',
+'speciallogtitlelabel',
+);
+
+$SpecialMaintenance = array(
+'maintenance',
+'maintnancepagetext',
+'maintenancebacklink',
+'disambiguations',
+'disambiguationspage',
+'disambiguationstext',
+'doubleredirects',
+'doubleredirectstext',
+'brokenredirects',
+'brokenredirectstext',
+'selflinks',
+'selflinkstext',
+'mispeelings',
+'mispeelingstext',
+'mispeelingspage',
+'missinglanguagelinks',
+'missinglanguagelinksbutton',
+'missinglanguagelinkstext',
+);
+
+$SpecialMakeSysopMsg = array (
+'already_bureaucrat',
+'already_sysop',
+'makesysop',
+'makesysoptitle',
+'makesysoptext',
+'makesysopname',
+'makesysopsubmit',
+'makesysopok',
+'makesysopfail',
+'rights',
+'set_rights_fail',
+'set_user_rights',
+'user_rights_set',
+);
+
+$SpecialMovepageMsg = array(
+'newtitle',
+'movearticle',
+'movenologin',
+'movenologintext',
+'movepage',
+'movepagebtn',
+'movepagetalktext',
+'movepagetext',
+'movetalk',
+'pagemovedsub',
+'pagemovedtext',
+'talkexists',
+'talkpagemoved',
+'talkpagenotmoved',
+
+);
+
+$SpecialPreferencesMsg = array(
+'tog-underline',
+'tog-highlightbroken',
+'tog-justify',
+'tog-hideminor',
+'tog-usenewrc',
+'tog-numberheadings',
+'tog-showtoolbar',
+'tog-editondblclick',
+'tog-editsection',
+'tog-editsectiononrightclick',
+'tog-showtoc',
+'tog-rememberpassword',
+'tog-editwidth',
+'tog-watchdefault',
+'tog-minordefault',
+'tog-previewontop',
+'tog-previewonfirst',
+'tog-nocache',
+'tog-enotifwatchlistpages',
+'tog-enotifusertalkpages',
+'tog-enotifminoredits',
+'tog-enotifrevealaddr',
+'tog-shownumberswatching',
+'tog-rcusemodstyle',
+'tog-showupdated',
+'tog-fancysig',
+'tog-externaleditor',
+
+'imagemaxsize',
+'prefs-help-email',
+'prefs-help-email-enotif',
+'prefs-help-realname',
+'prefs-help-userdata',
+'prefs-misc',
+'prefs-personal',
+'prefs-rc',
+'resetprefs',
+'saveprefs',
+'oldpassword',
+'newpassword',
+'retypenew',
+'textboxsize',
+'rows',
+'columns',
+'searchresultshead',
+'resultsperpage',
+'contextlines',
+'contextchars',
+'stubthreshold',
+'recentchangescount',
+'savedprefs',
+'timezonelegend',
+'timezonetext',
+'localtime',
+'timezoneoffset',
+'servertime',
+'guesstimezone',
+'emailflag',
+'defaultns',
+'default',
+);
+
+$SpecialRecentchangesMsg = array(
+'changes',
+'recentchanges',
+'recentchanges-url',
+'recentchangestext',
+'rcloaderr',
+'rcnote',
+'rcnotefrom',
+'rclistfrom',
+'showhideminor',
+'rclinks',
+'rchide',
+'rcliu',
+'diff',
+'hist',
+'hide',
+'show',
+'tableform',
+'listform',
+'nchanges',
+'minoreditletter',
+'newpageletter',
+'sectionlink',
+'number_of_watching_users_RCview',
+'number_of_watching_users_pageview',
+'recentchangesall',
+);
+
+$SpecialRecentchangeslinkedMsg = array(
+'rclsub',
+);
+
+$SpecialSearchMsg = array(
+'searchresults',
+'searchresulttext',
+'searchquery',
+'badquery',
+'badquerytext',
+'matchtotals',
+'nogomatch',
+'titlematches',
+'notitlematches',
+'textmatches',
+'notextmatches',
+);
+
+$SpecialSitesettingsMsg = array(
+'sitesettings',
+'sitesettings-features',
+'sitesettings-permissions',
+'sitesettings-memcached',
+'sitesettings-debugging',
+'sitesettings-caching',
+'sitesettings-wgShowIPinHeader',
+'sitesettings-wgUseDatabaseMessages',
+'sitesettings-wgUseCategoryMagic',
+'sitesettings-wgUseCategoryBrowser',
+'sitesettings-wgHitcounterUpdateFreq',
+'sitesettings-wgAllowExternalImages',
+'sitesettings-permissions-readonly',
+'sitesettings-permissions-whitelist',
+'sitesettings-permissions-banning',
+'sitesettings-permissions-miser',
+'sitesettings-wgReadOnly',
+'sitesettings-wgReadOnlyFile',
+'sitesettings-wgWhitelistEdit',
+'sitesettings-wgWhitelistRead',
+'sitesettings-wgWhitelistAccount-user',
+'sitesettings-wgWhitelistAccount-sysop',
+'sitesettings-wgWhitelistAccount-developer',
+'sitesettings-wgSysopUserBans',
+'sitesettings-wgSysopRangeBans',
+'sitesettings-wgDefaultBlockExpiry',
+'sitesettings-wgMiserMode',
+'sitesettings-wgDisableQueryPages',
+'sitesettings-wgUseWatchlistCache',
+'sitesettings-wgWLCacheTimeout',
+'sitesettings-cookies',
+'sitesettings-performance',
+'sitesettings-images',
+);
+
+$SpecialStatisticsMsg = array(
+'statistics',
+'sitestats',
+'userstats',
+'sitestatstext',
+'userstatstext',
+);
+
+$SpecialUndelte = array(
+'deletepage',
+);
+
+$SpecialUploadMsg = array(
+'affirmation',
+'badfilename',
+'badfiletype',
+'emptyfile',
+'fileexists',
+'filedesc',
+'filename',
+'filesource',
+'filestatus',
+'fileuploaded',
+'ignorewarning',
+'illegalfilename',
+'largefile',
+'minlength',
+'noaffirmation',
+'reupload',
+'reuploaddesc',
+'savefile',
+'successfulupload',
+'upload',
+'uploadbtn',
+'uploadcorrupt',
+'uploaddisabled',
+'uploadfile',
+'uploadedimage',
+'uploaderror',
+'uploadlink',
+'uploadlog',
+'uploadlogpage',
+'uploadlogpagetext',
+'uploadnologin',
+'uploadnologintext',
+'uploadtext',
+'uploadwarning',
+);
+
+$SpecialUserlevelsMsg = array(
+'saveusergroups',
+'userlevels-editusergroup',
+'userlevels-groupsavailable',
+'userlevels-groupshelp',
+'userlevels-groupsmember',
+);
+
+$SpecialUserloginMsg = array(
+'acct_creation_throttle_hit',
+'loginend',
+'loginsuccesstitle',
+'loginsuccess',
+'nocookiesnew',
+'nocookieslogin',
+'noemail',
+'noname',
+'nosuchuser',
+'mailmypassword',
+'mailmypasswordauthent',
+'passwordremindermailsubject',
+'passwordremindermailbody',
+'passwordsent',
+'passwordsentforemailauthentication',
+'userexists',
+'wrongpassword',
+);
+
+$SpecialValidateMsg = array(
+'val_yes',
+'val_no',
+'val_revision',
+'val_time',
+'val_list_header',
+'val_add',
+'val_del',
+'val_warning',
+'val_rev_for',
+'val_rev_stats_link',
+'val_iamsure',
+'val_clear_old',
+'val_merge_old',
+'val_form_note',
+'val_noop',
+'val_percent',
+'val_percent_single',
+'val_total',
+'val_version',
+'val_tab',
+'val_this_is_current_version',
+'val_version_of',
+'val_table_header',
+'val_stat_link_text',
+'val_view_version',
+'val_validate_version',
+'val_user_validations',
+'val_no_anon_validation',
+'val_validate_article_namespace_only',
+'val_validated',
+'val_article_lists',
+'val_page_validation_statistics',
+);
+
+$SpecialVersionMsg = array(
+'special_version_prefix',
+'special_version_postfix'
+);
+
+$SpecialWatchlistMsg = array(
+'watchlistall1',
+'watchlistall2',
+'wlnote',
+'wlshowlast',
+'wlsaved',
+'wlhideshowown',
+'wlshow',
+'wlhide',
+);
+
+$SpecialWhatlinkshereMsg = array(
+'linklistsub',
+'nolinkshere',
+'isredirect',
+);
+
+
+$commonMsg = array (
+'sunday',
+'monday',
+'tuesday',
+'wednesday',
+'thursday',
+'friday',
+'saturday',
+'january',
+'february',
+'march',
+'april',
+'may_long',
+'june',
+'july',
+'august',
+'september',
+'october',
+'november',
+'december',
+'jan',
+'feb',
+'mar',
+'apr',
+'may',
+'jun',
+'jul',
+'aug',
+'sep',
+'oct',
+'nov',
+'dec',
+'categories',
+'category',
+'linktrail',
+'mainpage',
+'portal',
+'portal-url',
+'about',
+'aboutsite',
+'aboutpage',
+'article',
+'help',
+'helppage',
+'wikititlesuffix',
+'bugreports',
+'bugreportspage',
+'sitesupport',
+'sitesupport-url',
+'faq',
+'faqpage',
+'edithelp',
+'newwindow',
+'edithelppage',
+'cancel',
+'qbfind',
+'qbbrowse',
+'qbedit',
+'qbpageoptions',
+'qbpageinfo',
+'qbmyoptions',
+'qbspecialpages',
+'moredotdotdot',
+'mypage',
+'mytalk',
+'anontalk',
+'navigation',
+'metadata',
+'metadata_page',
+'currentevents',
+'currentevents-url',
+'disclaimers',
+'disclaimerpage',
+'errorpagetitle',
+'returnto',
+'tagline',
+'whatlinkshere',
+'search',
+'go',
+'history',
+'history_short',
+'info_short',
+'printableversion',
+'edit',
+'editthispage',
+'newpage',
+'talkpage',
+'specialpage',
+'personaltools',
+'postcomment',
+'addsection',
+'articlepage',
+'subjectpage',
+'talk',
+'toolbox',
+'userpage',
+'wikipediapage',
+'imagepage',
+'viewtalkpage',
+'otherlanguages',
+'redirectedfrom',
+'lastmodified',
+'viewcount',
+'copyright',
+'poweredby',
+'printsubtitle',
+'protectedpage',
+'administrators',
+'sysoptitle',
+'sysoptext',
+'developertitle',
+'developertext',
+'bureaucrattitle',
+'bureaucrattext',
+'nbytes',
+'ok',
+'sitetitle',
+'pagetitle',
+'sitesubtitle',
+'retrievedfrom',
+'newmessages',
+'newmessageslink',
+'editsection',
+'toc',
+'showtoc',
+'hidetoc',
+'thisisdeleted',
+'restorelink',
+'feedlinks',
+'sitenotice',
+'nstab-main',
+'nstab-user',
+'nstab-media',
+'nstab-special',
+'nstab-wp',
+'nstab-image',
+'nstab-mediawiki',
+'nstab-template',
+'nstab-help',
+'nstab-category',
+'nosuchaction',
+'nosuchactiontext',
+
+
+'error',
+'databaseerror',
+'dberrortext',
+'dberrortextcl',
+'noconnect',
+'nodb',
+'cachederror',
+'laggedslavemode',
+'readonly',
+'enterlockreason',
+'readonlytext',
+'missingarticle',
+'internalerror',
+'filecopyerror',
+'filerenameerror',
+'filedeleteerror',
+'filenotfound',
+'unexpected',
+'formerror',
+'badarticleerror',
+'cannotdelete',
+'badtitle',
+'badtitletext',
+'perfdisabled',
+'perfdisabledsub',
+'perfcached',
+'wrong_wfQuery_params',
+'viewsource',
+'protectedtext',
+'seriousxhtmlerrors',
+'logouttitle',
+'logouttext',
+'welcomecreation',
+
+'loginpagetitle',
+'yourname',
+'yourpassword',
+'yourpasswordagain',
+'newusersonly',
+'remembermypassword',
+'loginproblem',
+'alreadyloggedin',
+'login',
+'loginprompt',
+'userlogin',
+'logout',
+'userlogout',
+'notloggedin',
+'createaccount',
+'createaccountmail',
+'badretype',
+
+'youremail',
+'yourrealname',
+'yourlanguage',
+'yourvariant',
+'yournick',
+'emailforlost',
+'loginerror',
+'nosuchusershort',
+
+'mailerror',
+'emailauthenticated',
+'emailnotauthenticated',
+'invalidemailaddress',
+'disableduntilauthent',
+'disablednoemail',
+
+'summary',
+'subject',
+'minoredit',
+'watchthis',
+'savearticle',
+'preview',
+'showpreview',
+'showdiff',
+'blockedtitle',
+'blockedtext',
+'whitelistedittitle',
+'whitelistedittext',
+'whitelistreadtitle',
+'whitelistreadtext',
+'whitelistacctitle',
+'whitelistacctext',
+'loginreqtitle',
+'loginreqtext',
+'accmailtitle',
+'accmailtext',
+'newarticle',
+'newarticletext',
+'talkpagetext',
+'anontalkpagetext',
+'noarticletext',
+'clearyourcache',
+'usercssjsyoucanpreview',
+'usercsspreview',
+'userjspreview',
+'updated',
+'note',
+'storedversion', // not used ? Editpage ?
+'revhistory',
+'nohistory',
+'revnotfound',
+'revnotfoundtext',
+'loadhist',
+'currentrev',
+'revisionasof',
+'revisionasofwithlink',
+'previousrevision',
+'nextrevision',
+'currentrevisionlink',
+'cur',
+'next',
+'last',
+'orig',
+'histlegend',
+'history_copyright',
+'difference',
+'loadingrev',
+'lineno',
+'editcurrent',
+'selectnewerversionfordiff',
+'selectolderversionfordiff',
+'compareselectedversions',
+
+'prevn',
+'nextn',
+'viewprevnext',
+'showingresults',
+'showingresultsnum',
+'nonefound',
+'powersearch',
+'powersearchtext',
+'searchdisabled',
+'googlesearch',
+'blanknamespace',
+'preferences',
+'prefsnologin',
+'prefsnologintext',
+'prefslogintext',
+'prefsreset',
+'qbsettings',
+'qbsettingsnote',
+'changepassword',
+'skin',
+'math',
+'dateformat',
+
+'math_failure',
+'math_unknown_error',
+'math_unknown_function',
+'math_lexing_error',
+'math_syntax_error',
+'math_image_error',
+'math_bad_tmpdir',
+'math_bad_output',
+'math_notexvc',
+
+
+
+
+
+
+'grouplevels-lookup-group',
+'grouplevels-group-edit',
+'editgroup',
+'addgroup',
+'userlevels-lookup-user',
+'userlevels-user-editname',
+'editusergroup',
+'grouplevels-editgroup',
+'grouplevels-addgroup',
+'grouplevels-editgroup-name',
+'grouplevels-editgroup-description',
+'savegroup',
+
+// common to several pages
+'copyrightpage',
+'copyrightpagename',
+'imagelist',
+'imagelisttext',
+'ilshowmatch',
+'ilsubmit',
+'showlast',
+'byname',
+'bydate',
+'bysize',
+
+
+
+'imgdelete',
+'imgdesc',
+'imglegend',
+'imghistory',
+'revertimg',
+'deleteimg',
+'deleteimgcompletely',
+'imghistlegend',
+'imagelinks',
+'linkstoimage',
+'nolinkstoimage',
+
+// unused ??
+'uploadedfiles',
+'getimagelist',
+
+
+'sharedupload',
+'shareduploadwiki',
+
+// Special pages names
+'orphans',
+'geo',
+'validate',
+'lonelypages',
+'uncategorizedpages',
+'uncategorizedcategories',
+'unusedimages',
+'popularpages',
+'nviews',
+'wantedpages',
+'nlinks',
+'allpages',
+'randompage',
+'randompage-url',
+'shortpages',
+'longpages',
+'deadendpages',
+'listusers',
+'specialpages',
+'spheading',
+'restrictedpheading',
+'recentchangeslinked',
+
+
+'debug',
+'newpages',
+'ancientpages',
+'intl',
+'unusedimagestext',
+'booksources',
+'categoriespagetext',
+'data',
+'userlevels',
+'grouplevels',
+'booksourcetext',
+'isbn',
+'rfcurl',
+'pubmedurl',
+'alphaindexline',
+'version',
+'log',
+'alllogstext',
+'nextpage',
+'mailnologin',
+'mailnologintext',
+'emailuser',
+'emailpage',
+'emailpagetext',
+'usermailererror',
+'defemailsubject',
+'noemailtitle',
+'noemailtext',
+'emailfrom',
+'emailto',
+'emailsubject',
+'emailmessage',
+'emailsend',
+'emailsent',
+'emailsenttext',
+'watchlist',
+'watchlistsub',
+'nowatchlist',
+'watchnologin',
+'watchnologintext',
+'addedwatch',
+'addedwatchtext',
+'removedwatch',
+'removedwatchtext',
+'watch',
+'watchthispage',
+'unwatch',
+'unwatchthispage',
+'notanarticle',
+'watchnochange',
+'watchdetails',
+'watchmethod-recent',
+'watchmethod-list',
+'removechecked',
+'watchlistcontains',
+'watcheditlist',
+'removingchecked',
+'couldntremove',
+'iteminvalidname',
+
+'updatedmarker',
+'email_notification_mailer',
+'email_notification_infotext',
+'email_notification_reset',
+'email_notification_newpagetext',
+'email_notification_to',
+'email_notification_subject',
+'email_notification_lastvisitedrevisiontext',
+'email_notification_body',
+
+'confirm',
+'excontent',
+'exbeforeblank',
+'exblank',
+'confirmdelete',
+'deletesub',
+'historywarning',
+'confirmdeletetext',
+'actioncomplete',
+'deletedtext',
+'deletedarticle',
+'dellogpage',
+'dellogpagetext',
+'deletionlog',
+'reverted',
+'deletecomment',
+'imagereverted',
+'rollback',
+'rollback_short',
+'rollbacklink',
+'rollbackfailed',
+'cantrollback',
+'alreadyrolled',
+'revertpage',
+'editcomment',
+'sessionfailure',
+
+'protectlogpage',
+'protectlogtext',
+
+'protectedarticle',
+'unprotectedarticle',
+
+'contributions',
+'mycontris',
+'notargettitle', // not used ?
+'notargettext', // not used ?
+
+'linkshere',
+
+'ipaddress',
+'ipadressorusername', // not used ?
+'ipbreason',
+
+'badipaddress',
+'noblockreason',
+'blockipsuccesssub',
+'blockipsuccesstext',
+'unblockip',
+'unblockiptext',
+'ipusubmit',
+'ipusuccess',
+'ipblocklist',
+'blocklistline',
+'blocklink',
+'unblocklink',
+'contribslink',
+'autoblocker',
+'blocklogpage',
+'blocklogentry',
+'blocklogtext',
+'unblocklogentry', // not used ?
+
+'proxyblocker',
+'proxyblockreason',
+'proxyblocksuccess',
+'sorbs',
+'sorbsreason',
+
+'setbureaucratflag',
+'bureaucratlog',
+'rightslogtext',
+'bureaucratlogentry',
+
+'articleexists', // not used ?
+
+'movedto',
+'1movedto2',
+'1movedto2_redir',
+'movelogpage',
+'movelogpagetext',
+
+'thumbnail-more',
+'missingimage',
+'filemissing',
+'monobook.css',
+'nodublincore',
+'nocreativecommons',
+'notacceptable',
+
+// used in Article::
+'infosubtitle',
+'numedits',
+'numtalkedits',
+'numwatchers',
+'numauthors',
+'numtalkauthors',
+
+// not used ?
+'mw_math_png',
+'mw_math_simple',
+'mw_math_html',
+'mw_math_source',
+'mw_math_modern',
+'mw_math_mathml',
+
+// Patrolling
+'markaspatrolleddiff',
+'markaspatrolledlink',
+'markaspatrolledtext',
+'markedaspatrolled',
+'markedaspatrolledtext',
+'rcpatroldisabled', // not used ?
+'rcpatroldisabledtext', // not used ?
+
+'monobook.js',
+'newimages',
+'noimages',
+'variantname-zh-cn',
+'variantname-zh-tw',
+'variantname-zh-hk',
+'variantname-zh-sg',
+'variantname-zh',
+'zhconversiontable',
+'passwordtooshort', // sp preferences / userlogin
+);
+?>
Index: /MediaWiki/branches/1.11/maintenance/language/splitLanguageFiles.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/language/splitLanguageFiles.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/language/splitLanguageFiles.php	(revision 1280)
@@ -0,0 +1,13 @@
+<?php
+/**
+ * splitLanguageFiles
+ * Should read each of the languages files then split them in several subpart
+ * under ./languages/XX/ according to the arrays in splitLanguageFiles.inc .
+ *
+ * Also need to rewrite the wfMsg system / message-cache.
+ */
+
+include(dirname(__FILE__).'/../commandLine.inc');
+
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/language/transstat.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/language/transstat.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/language/transstat.php	(revision 1280)
@@ -0,0 +1,212 @@
+<?php
+/**
+ * Statistics about the localisation.
+ *
+ * @addtogroup Maintenance
+ *
+ * @author Ævar Arnfjörð Bjarmason <avarab@gmail.com>
+ * @author Ashar Voultoiz <thoane@altern.org>
+ *
+ * Output is posted from time to time on:
+ * http://meta.wikimedia.org/wiki/Localization_statistics
+ */
+
+require_once( dirname(__FILE__).'/../commandLine.inc' );
+require_once( 'languages.inc' );
+
+if ( isset( $options['help'] ) ) {
+	showUsage();
+}
+
+# Default output is WikiText
+if ( !isset( $options['output'] ) ) {
+	$options['output'] = 'wiki';
+}
+
+/** Print a usage message*/
+function showUsage() {
+	print <<<END
+Usage: php transstat.php [--help] [--output=csv|text|wiki]
+	--help : this helpful message
+	--output : select an output engine one of:
+		* 'csv'      : Comma Separated Values.
+		* 'wiki'     : MediaWiki syntax (default).
+		* 'metawiki' : MediaWiki syntax used for Meta-Wiki.
+		* 'text'     : Text with tabs.
+Example: php maintenance/transstat.php --output=text
+
+END;
+	exit();
+}
+
+/** A general output object. Need to be overriden */
+class statsOutput {
+	function formatPercent( $subset, $total, $revert = false, $accuracy = 2 ) {
+		return @sprintf( '%.' . $accuracy . 'f%%', 100 * $subset / $total );
+	}
+
+	# Override the following methods
+	function heading() {
+	}
+	function footer() {
+	}
+	function blockstart() {
+	}
+	function blockend() {
+	}
+	function element( $in, $heading = false ) {
+	}
+}
+
+/** Outputs WikiText */
+class wikiStatsOutput extends statsOutput {
+	function heading() {
+		global $IP;
+		$version = SpecialVersion::getVersion( $IP );
+		echo "'''Statistics are based on:''' <code>" . $version . "</code>\n\n";
+		echo "'''Note:''' These statistics can be generated by running <code>php maintenance/language/transstat.php</code>.\n\n";
+		echo "For additional information on specific languages (the message names, the actual problems, etc.), run <code>php maintenance/language/checkLanguage.php --lang=foo</code>.\n\n";
+		echo '{| class="sortable wikitable" border="2" cellpadding="4" cellspacing="0" style="background-color: #F9F9F9; border: 1px #AAAAAA solid; border-collapse: collapse; clear:both;" width="100%"'."\n";
+	}
+	function footer() {
+		echo "|}\n";
+	}
+	function blockstart() {
+		echo "|-\n";
+	}
+	function blockend() {
+		echo '';
+	}
+	function element( $in, $heading = false ) {
+		echo ($heading ? '!' : '|') . " $in\n";
+	}
+	function formatPercent( $subset, $total, $revert = false, $accuracy = 2 ) {
+		$v = @round(255 * $subset / $total);
+		if ( $revert ) {
+			$v = 255 - $v;
+		}
+		if ( $v < 128 ) {
+			# Red to Yellow
+			$red = 'FF';
+			$green = sprintf( '%02X', 2 * $v );
+		} else {
+			# Yellow to Green
+			$red = sprintf('%02X', 2 * ( 255 - $v ) );
+			$green = 'FF';
+		}
+		$blue = '00';
+		$color = $red . $green . $blue;
+
+		$percent = statsOutput::formatPercent( $subset, $total, $revert, $accuracy );
+		return 'bgcolor="#'. $color .'" | '. $percent;
+	}
+}
+
+/** Outputs WikiText and appends category and text only used for Meta-Wiki */
+class metawikiStatsOutput extends wikiStatsOutput {
+	function heading() {
+		echo "See [[MediaWiki localisation]] to learn how you can help translating MediaWiki.\n\n";
+		parent::heading();
+	}
+	function footer() {
+		parent::footer();
+		echo "\n[[Category:Localisation|Statistics]]\n";
+	}
+}
+
+/** Output text. To be used on a terminal for example. */
+class textStatsOutput extends statsOutput {
+	function element( $in, $heading = false ) {
+		echo $in."\t";
+	}
+	function blockend() {
+		echo "\n";
+	}
+}
+
+/** csv output. Some people love excel */
+class csvStatsOutput extends statsOutput {
+	function element( $in, $heading = false ) {
+		echo $in . ";";
+	}
+	function blockend() {
+		echo "\n";
+	}
+}
+
+# Select an output engine
+switch ( $options['output'] ) {
+	case 'wiki':
+		$wgOut = new wikiStatsOutput();
+		break;
+	case 'metawiki':
+		$wgOut = new metawikiStatsOutput();
+		break;
+	case 'text':
+		$wgOut = new textStatsOutput();
+		break;
+	case 'csv':
+		$wgOut = new csvStatsOutput();
+		break;
+	default:
+		showUsage();
+}
+
+# Languages
+$wgLanguages = new languages();
+
+# Header
+$wgOut->heading();
+$wgOut->blockstart();
+$wgOut->element( 'Language', true );
+$wgOut->element( 'Code', true );
+$wgOut->element( 'Translated', true );
+$wgOut->element( '%', true );
+$wgOut->element( 'Obsolete', true );
+$wgOut->element( '%', true );
+$wgOut->element( 'Problematic', true );
+$wgOut->element( '%', true );
+$wgOut->blockend();
+
+$wgGeneralMessages = $wgLanguages->getGeneralMessages();
+$wgRequiredMessagesNumber = count( $wgGeneralMessages['required'] );
+
+foreach ( $wgLanguages->getLanguages() as $code ) {
+	# Don't check English or RTL English
+	if ( $code == 'en' || $code == 'enRTL' ) {
+		continue;
+	}
+
+	# Calculate the numbers
+	$language = $wgContLang->getLanguageName( $code );
+	$messages = $wgLanguages->getMessages( $code );
+	$messagesNumber = count( $messages['translated'] );
+	$requiredMessagesNumber = count( $messages['required'] );
+	$requiredMessagesPercent = $wgOut->formatPercent( $requiredMessagesNumber, $wgRequiredMessagesNumber );
+	$obsoleteMessagesNumber = count( $messages['obsolete'] );
+	$obsoleteMessagesPercent = $wgOut->formatPercent( $obsoleteMessagesNumber, $messagesNumber, true );
+	$messagesWithoutVariables = $wgLanguages->getMessagesWithoutVariables( $code );
+	$emptyMessages = $wgLanguages->getEmptyMessages( $code );
+	$messagesWithWhitespace = $wgLanguages->getMessagesWithWhitespace( $code );
+	$nonXHTMLMessages = $wgLanguages->getNonXHTMLMessages( $code );
+	$messagesWithWrongChars = $wgLanguages->getMessagesWithWrongChars( $code );
+	$problematicMessagesNumber = count( array_unique( array_merge( $messagesWithoutVariables, $emptyMessages, $messagesWithWhitespace, $nonXHTMLMessages, $messagesWithWrongChars ) ) );
+	$problematicMessagesPercent = $wgOut->formatPercent( $problematicMessagesNumber, $messagesNumber, true );
+
+	# Output them
+	$wgOut->blockstart();
+	$wgOut->element( "$language" );
+	$wgOut->element( "$code" );
+	$wgOut->element( "$requiredMessagesNumber/$wgRequiredMessagesNumber" );
+	$wgOut->element( $requiredMessagesPercent );
+	$wgOut->element( "$obsoleteMessagesNumber/$messagesNumber" );
+	$wgOut->element( $obsoleteMessagesPercent );
+	$wgOut->element( "$problematicMessagesNumber/$messagesNumber" );
+	$wgOut->element( $problematicMessagesPercent );
+	$wgOut->blockend();
+}
+
+# Footer
+$wgOut->footer();
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/language/validate.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/language/validate.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/language/validate.php	(revision 1280)
@@ -0,0 +1,40 @@
+<?php
+
+if ( !isset( $argv[1] ) ) {
+	print "Usage: php {$argv[0]} <filename>\n";
+	exit( 1 );
+}
+array_shift( $argv );
+
+define( 'MEDIAWIKI', 1 );
+define( 'NOT_REALLY_MEDIAWIKI', 1 );
+
+$IP = dirname( __FILE__ ) . '/../..';
+
+require_once( "$IP/includes/Defines.php" );
+require_once( "$IP/languages/Language.php" );
+
+$files = array();
+foreach ( $argv as $arg ) {
+	$files = array_merge( $files, glob( $arg ) );
+}
+
+foreach ( $files as $filename ) {
+	print "$filename...";
+	$vars = getVars( $filename );
+	$keys = array_keys( $vars );
+	$diff = array_diff( $keys, Language::$mLocalisationKeys );
+	if ( $diff ) {
+		print "\nWarning: unrecognised variable(s): " . implode( ', ', $diff ) ."\n";
+	} else {
+		print " ok\n";
+	}
+}
+
+function getVars( $filename ) {
+	require( $filename );
+	$vars = get_defined_vars();
+	unset( $vars['filename'] );
+	return $vars;
+}
+?>
Index: /MediaWiki/branches/1.11/maintenance/language/writeMessagesArray.inc
===================================================================
--- /MediaWiki/branches/1.11/maintenance/language/writeMessagesArray.inc	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/language/writeMessagesArray.inc	(revision 1280)
@@ -0,0 +1,184 @@
+<?php
+/**
+ * Write a messages array as a PHP text.
+ *
+ * @addtogroup Maintenance
+ */
+
+require_once( 'messages.inc' );
+require_once( 'messageTypes.inc' );
+
+/**
+ * Write a messages array as a PHP text and write it to the messages file.
+ *
+ * @param $messages The messages array.
+ * @param $code The language code.
+ * @param $write Write to the messages file?
+ * @param $listUnknown List the unknown messages?
+ */
+function writeMessagesToFile( $messages, $code, $write, $listUnknown ) {
+	# Rewrite the messages array
+	$messages = writeMessagesArray( $messages, $code == 'en' );
+	$messagesText = $messages[0];
+	$sortedMessages = $messages[1];
+
+	# Write to the file
+	$filename = Language::getMessagesFileName( $code );
+	$contents = file_get_contents( $filename );
+	if ( strpos( $contents, '$messages' ) !== false ) {
+		$contents = explode( '$messages', $contents );
+		if ( $messagesText . "\n?>\n" == '$messages' . $contents[1] ) {
+			echo "Generated messages for language $code. Same to the current file.\n";
+		} else {
+			if ( $write ) {
+				$new = $contents[0];
+				$new .= $messagesText;
+				$new .= "\n?>\n";
+				file_put_contents( $filename, $new );
+				echo "Generated and wrote messages for language $code.\n";
+			} else {
+				echo "Generated messages for language $code. Please run the script again (without the parameter \"dry-run\") to write the array to the file.\n";
+			}
+		}
+		if ( $listUnknown && isset( $sortedMessages['unknown'] ) && !empty( $sortedMessages['unknown'] ) ) {
+			echo "\nThere are " . count( $sortedMessages['unknown'] ) . " unknown messages, please check them:\n";
+			foreach ( $sortedMessages['unknown'] as $key => $value ) {
+				echo "* " . $key . "\n";
+			}
+		}
+	} else {
+		echo "Generated messages for language $code. There seems to be no messages array in the file.\n";
+	}
+}
+
+/**
+ * Write a messages array as a PHP text.
+ *
+ * @param $messages The messages array.
+ * @param $ignoredComments Show comments about ignored and optional messages? (For English.)
+ *
+ * @return Array of the PHP text and the sorted messages array.
+ */
+function writeMessagesArray( $messages, $ignoredComments = false ) {
+	global $wgMessageStructure, $wgBlockComments;
+
+	# Sort messages to blocks
+	$sortedMessages['unknown'] = $messages;
+	foreach ( $wgMessageStructure as $blockName => $block ) {
+		foreach ( $block as $key ) {
+			if ( array_key_exists( $key, $sortedMessages['unknown'] ) ) {
+				$sortedMessages[$blockName][$key] = $sortedMessages['unknown'][$key];
+				unset( $sortedMessages['unknown'][$key] );
+			}
+		}
+	}
+
+	# Write all the messages
+	$messagesText = "\$messages = array(\n";
+	foreach( $sortedMessages as $block => $messages ) {
+		# Skip if it's the block of unknown messages - handle that in the end of file
+		if ( $block == 'unknown' ) {
+			continue;
+		}
+
+		# Write the block
+		$messagesText .= writeMessagesBlock( $block, $wgBlockComments[$block], $messages, $ignoredComments );
+	}
+	ksort( $sortedMessages['unknown'] );
+	$messagesText .= writeMessagesBlock( 'unknown', 'Unknown messages', $sortedMessages['unknown'], $ignoredComments ); # Write the unknown messages, alphabetically sorted
+	$messagesText .= ");\n";
+
+	return array( $messagesText, $sortedMessages );
+}
+
+/**
+ * Write a block of messages to PHP.
+ *
+ * @param $name The block name.
+ * @param $comment The block comment.
+ * @param $messages The block messages.
+ * @param $ignoredComments Show comments about ignored and optional messages? (For English.)
+ *
+ * @return The block, formatted in PHP.
+ */
+function writeMessagesBlock( $name, $comment, $messages, $ignoredComments ) {
+	global $wgMessageComments, $wgMessagseWithDollarSigns;
+	global $wgIgnoredMessages, $wgOptionalMessages;
+	$blockText = '';
+
+	# Skip the block if it includes no messages
+	if ( empty( $messages ) ) {
+		return '';
+	}
+
+	# Format the block comment (if exists); check for multiple lines comments
+	if ( !empty( $comment ) ) {
+		if ( strpos( $comment, "\n" ) === false ) {
+			$blockText .= "# $comment\n";
+		} else {
+			$blockText .= "/*\n$comment\n*/\n";
+		}
+	}
+
+	# Get max key length
+	$maxKeyLength = max( array_map( 'strlen', array_keys( $messages ) ) );
+
+	# Format the messages
+	foreach( $messages as $key => $value ) {
+		# Add the key name
+		$blockText .= "'$key'";
+
+		# Add the appropriate block whitespace
+		$blockText .= str_repeat( ' ', $maxKeyLength - strlen( $key ) );
+
+		# Refer to the value
+		$blockText .= ' => ';
+
+		# Check for the appropriate apostrophe and add the value
+		if ( strpos( $value, "'" ) === false ) {
+			$blockText .= "'$value'";
+		} elseif ( strpos( $value, '"' ) === false && !in_array( $key, $wgMessagseWithDollarSigns ) ) {
+			$blockText .= "\"$value\"";
+		} else {
+			# Pick the less numerous one to escape
+			$quote = substr_count( $value, '"' ) + substr_count( $value, '$' ) >= substr_count( $value, "'" ) ? "'" : '"';
+			if ('"' == $quote) { $extra = '$'; }
+			else { $extra = ''; }
+			$blockText .= $quote . addcslashes( $value, $quote.'\\'.$extra ) . $quote;
+		}
+
+		# Comma
+		$blockText .= ',';
+
+		$ignoredComment = "don't translate or duplicate this message to other languages";
+		$optionalComment = "only translate this message to other languages if you have to change it";
+		$showIgnoredOrOptionalComment = in_array( $key, $wgIgnoredMessages ) || in_array( $key, $wgOptionalMessages );
+		if ( $ignoredComments ) {
+			if ( array_key_exists( $key, $wgMessageComments ) ) {
+				$blockText .= ' # ' . $wgMessageComments[$key];
+				if ( $showIgnoredOrOptionalComment ) {
+					$blockText .= '; ';
+				}
+			} elseif ( $showIgnoredOrOptionalComment ) {
+				$blockText .= ' # ';
+			}
+			if ( in_array( $key, $wgIgnoredMessages ) ) {
+				$blockText .= $ignoredComment;
+			} elseif ( in_array( $key, $wgOptionalMessages ) ) {
+				$blockText .= $optionalComment;
+			}
+		} elseif ( array_key_exists( $key, $wgMessageComments ) ) {
+			$blockText .= ' # ' . $wgMessageComments[$key];
+		}
+
+		# Newline
+		$blockText .= "\n";
+	}
+
+	# Newline to end the block
+	$blockText .= "\n";
+
+	return $blockText;
+}
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/mcc.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/mcc.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/mcc.php	(revision 1280)
@@ -0,0 +1,176 @@
+<?php
+/**
+ * memcached diagnostic tool
+ *
+ * @todo document
+ * @addtogroup Maintenance
+ */
+
+/** */
+require_once( 'commandLine.inc' );
+require_once( 'memcached-client.php' );
+
+$mcc = new memcached( array('persistant' => true/*, 'debug' => true*/) );
+$mcc->set_servers( $wgMemCachedServers );
+#$mcc->set_debug( true );
+
+function mccShowHelp($command) {
+
+	if(! $command ) { $command = 'fullhelp'; }
+	$onlyone = true;
+
+	switch ( $command ) {
+
+		case 'fullhelp':
+			// will show help for all commands
+			$onlyone = false;
+
+		case 'get':
+			print "get: grabs something\n";
+		if($onlyone) { break; }
+
+		case 'getsock':
+			print "getsock: lists sockets\n";
+		if($onlyone) { break; }
+
+		case 'set':
+			print "set: changes something\n";
+		if($onlyone) { break; }
+
+		case 'delete':
+			print "delete: deletes something\n";
+		if($onlyone) { break; }
+
+		case 'history':
+			print "history: show command line history\n";
+		if($onlyone) { break; }
+
+		case 'server':
+			print "server: show current memcached server\n";
+		if($onlyone) { break; }
+
+		case 'dumpmcc':
+			print "dumpmcc: shows the whole thing\n";
+		if($onlyone) { break; }
+
+		case 'exit':
+		case 'quit':
+			print "exit or quit: exit mcc\n";
+		if($onlyone) { break; }
+
+		case 'help':
+			print "help: help about a command\n";
+		if($onlyone) { break; }
+
+		default:
+			if($onlyone) {
+				print "$command: command does not exist or no help for it\n";
+			}
+	}
+}
+
+do {
+	$bad = false;
+	$showhelp = false;
+	$quit = false;
+
+	$line = readconsole( '> ' );
+	if ($line === false) exit;
+
+	$args = explode( ' ', $line );
+	$command = array_shift( $args );
+
+	// process command
+	switch ( $command ) {
+		case 'help':
+			// show an help message
+			mccShowHelp(array_shift($args));
+		break;
+
+		case 'get':
+			print "Getting {$args[0]}[{$args[1]}]\n";
+			$res = $mcc->get( $args[0] );
+			if ( array_key_exists( 1, $args ) ) {
+				$res = $res[$args[1]];
+			}
+			if ( $res === false ) {
+				#print 'Error: ' . $mcc->error_string() . "\n";
+				print "MemCached error\n";
+			} elseif ( is_string( $res ) ) {
+				print "$res\n";
+			} else {
+				var_dump( $res );
+			}
+		break;
+
+		case 'getsock':
+			$res = $mcc->get( $args[0] );
+			$sock = $mcc->get_sock( $args[0] );
+			var_dump( $sock );
+			break;
+
+		case 'server':
+			$res = $mcc->get( $args[0] );
+			$hv = $mcc->_hashfunc( $args[0] );
+			for ( $i = 0; $i < 3; $i++ ) {
+				print $mcc->_buckets[$hv % $mcc->_bucketcount] . "\n";
+				$hv += $mcc->_hashfunc( $i . $args[0] );
+			}
+			break;
+
+		case 'set':
+			$key = array_shift( $args );
+			if ( $args[0] == "#" && is_numeric( $args[1] ) ) {
+				$value = str_repeat( '*', $args[1] );
+			} else {
+				$value = implode( ' ', $args );
+			}
+			if ( !$mcc->set( $key, $value, 0 ) ) {
+				#print 'Error: ' . $mcc->error_string() . "\n";
+				print "MemCached error\n";
+			}
+			break;
+
+		case 'delete':
+			$key = implode( ' ', $args );
+			if ( !$mcc->delete( $key ) ) {
+				#print 'Error: ' . $mcc->error_string() . "\n";
+				print "MemCached error\n";
+			}
+			break;
+
+		case 'history':
+			if ( function_exists( 'readline_list_history' ) ) {
+				foreach( readline_list_history() as $num => $line) {
+					print "$num: $line\n";
+				}
+			} else {
+				print "readline_list_history() not available\n";
+			}
+			break;
+
+		case 'dumpmcc':
+			var_dump( $mcc );
+			break;
+
+		case 'quit':
+		case 'exit':
+			$quit = true;
+			break;
+
+		default:
+			$bad = true;
+	} // switch() end
+
+	if ( $bad ) {
+		if ( $command ) {
+			print "Bad command\n";
+		}
+	} else {
+		if ( function_exists( 'readline_add_history' ) ) {
+			readline_add_history( $line );
+		}
+	}
+} while ( !$quit );
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/mctest.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/mctest.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/mctest.php	(revision 1280)
@@ -0,0 +1,58 @@
+<?php
+/* $Id: mctest.php 19364 2007-01-17 00:54:54Z brion $ */
+
+$optionsWithArgs = array( 'i' );
+
+require_once('commandLine.inc');
+
+function microtime_float()
+{
+   list($usec, $sec) = explode(" ", microtime());
+   return ((float)$usec + (float)$sec);
+}
+
+
+#$wgDebugLogFile = '/dev/stdout';
+
+if ( isset( $args[0] ) ) {
+	$wgMemCachedServers = array( $args[0] );
+}
+if ( isset( $options['i'] ) ) {
+	$iterations = $options['i'];
+} else {
+	$iterations = 100;
+}
+
+foreach ( $wgMemCachedServers as $server ) {
+        print "$server ";
+	$mcc = new MemCachedClientforWiki( array('persistant' => true) );
+	$mcc->set_servers( array( $server ) );
+	$set = 0;
+	$incr = 0;
+	$get = 0;
+        $time_start=microtime_float();
+	for ( $i=1; $i<=$iterations; $i++ ) {
+		if ( !is_null( $mcc->set( "test$i", $i ) ) ) {
+			$set++;
+		}
+	}
+
+	for ( $i=1; $i<=$iterations; $i++ ) {
+		if ( !is_null( $mcc->incr( "test$i", $i ) ) ) {
+			$incr++;
+		}
+	}
+
+	for ( $i=1; $i<=$iterations; $i++ ) {
+		$value = $mcc->get( "test$i" );
+		if ( $value == $i*2 ) {
+			$get++;
+		}
+	}
+        $exectime=microtime_float()-$time_start;
+
+	print "set: $set   incr: $incr   get: $get time: $exectime\n";
+}
+
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/moveBatch.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/moveBatch.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/moveBatch.php	(revision 1280)
@@ -0,0 +1,94 @@
+<?php
+
+/**
+ * Maintenance script to move a batch of pages
+ *
+ * @addtogroup Maintenance
+ * @author Tim Starling
+ *
+ * USAGE: php moveBatch.php [-u <user>] [-r <reason>] [-i <interval>] <listfile>
+ *
+ * <listfile> - file with two titles per line, separated with pipe characters;
+ * the first title is the source, the second is the destination
+ * <user> - username to perform moves as
+ * <reason> - reason to be given for moves
+ * <interval> - number of seconds to sleep after each move
+ *
+ * This will print out error codes from Title::moveTo() if something goes wrong,
+ * e.g. immobile_namespace for namespaces which can't be moved
+ */
+
+$oldCwd = getcwd();
+$optionsWithArgs = array( 'u', 'r', 'i' );
+require_once( 'commandLine.inc' );
+
+chdir( $oldCwd );
+
+# Options processing
+
+$filename = 'php://stdin';
+$user = 'Move page script';
+$reason = '';
+$interval = 0;
+
+if ( isset( $args[0] ) ) {
+	$filename = $args[0];
+}
+if ( isset( $options['u'] ) ) {
+	$user = $options['u'];
+}
+if ( isset( $options['r'] ) ) {
+	$reason = $options['r'];
+}
+if ( isset( $options['i'] ) ) {
+	$interval = $options['i'];
+}
+
+$wgUser = User::newFromName( $user );
+
+
+# Setup complete, now start
+
+$file = fopen( $filename, 'r' );
+if ( !$file ) {
+	print "Unable to read file, exiting\n";
+	exit;
+}
+
+$dbw = wfGetDB( DB_MASTER );
+
+for ( $linenum = 1; !feof( $file ); $linenum++ ) {
+	$line = fgets( $file );
+	if ( $line === false ) {
+		break;
+	}
+	$parts = array_map( 'trim', explode( '|', $line ) );
+	if ( count( $parts ) != 2 ) {
+		print "Error on line $linenum, no pipe character\n";
+		continue;
+	}
+	$source = Title::newFromText( $parts[0] );
+	$dest = Title::newFromText( $parts[1] );
+	if ( is_null( $source ) || is_null( $dest ) ) {
+		print "Invalid title on line $linenum\n";
+		continue;
+	}
+
+
+	print $source->getPrefixedText() . ' --> ' . $dest->getPrefixedText();
+	$dbw->begin();
+	$err = $source->moveTo( $dest, false, $reason );
+	if( $err !== true ) {
+		print "\nFAILED: $err";
+	}
+	$dbw->immediateCommit();
+	print "\n";
+
+	if ( $interval ) {
+		sleep( $interval );
+	}
+	wfWaitForSlaves( 5 );
+}
+
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/mwdocgen.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/mwdocgen.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/mwdocgen.php	(revision 1280)
@@ -0,0 +1,204 @@
+<?php
+/**
+ * Script to easily generate the mediawiki documentation using doxygen.
+ *
+ * By default it will generate the whole documentation but you will be able to
+ * generate just some parts.
+ *
+ * Usage:
+ *   php mwdocgen.php
+ *
+ * Then make a selection from the menu
+ *
+ * KNOWN BUGS:
+ *
+ * - pass_thru seems to always use buffering (even with ob_implicit_flush()),
+ * that make output slow when doxygen parses language files.
+ * - the menu doesnt work, got disabled at revision 13740. Need to code it.
+ *
+ *
+ * @todo document
+ * @addtogroup Maintenance
+ *
+ * @author Ashar Voultoiz <thoane@altern.org>
+ * @version first release
+ */
+
+#
+# Variables / Configuration
+#
+
+if( php_sapi_name() != 'cli' ) {
+	echo 'Run me from the command line.';
+	die( -1 );
+}
+
+/** Figure out the base directory for MediaWiki location */
+$mwPath = dirname( dirname( __FILE__ ) ) . DIRECTORY_SEPARATOR;
+
+/** Global variable: temporary directory */
+$tmpPath = '/tmp/';
+
+/** doxygen binary script */
+$doxygenBin = 'doxygen';
+
+/** doxygen configuration template for mediawiki */
+$doxygenTemplate = $mwPath . 'maintenance/Doxyfile';
+
+/** where Phpdoc should output documentation */
+#$doxyOutput = '/var/www/mwdoc/';
+$doxyOutput = $mwPath . 'docs' . DIRECTORY_SEPARATOR ;
+
+/** MediaWiki subpaths */
+$mwPathI = $mwPath.'includes/';
+$mwPathL = $mwPath.'languages/';
+$mwPathM = $mwPath.'maintenance/';
+$mwPathS = $mwPath.'skins/';
+
+/** Variable to get user input */
+$input = '';
+
+/** shell command that will be run */
+$command = $doxygenBin;
+
+#
+# Functions
+#
+
+function readaline( $prompt = '') {
+	print $prompt;
+	$fp = fopen( "php://stdin", "r" );
+	$resp = trim( fgets( $fp, 1024 ) );
+	fclose( $fp );
+	return $resp;
+	}
+
+/**
+ * Generate a configuration file given user parameters and return the temporary filename.
+ * @param $doxygenTemplate String: full path for the template.
+ * @param $outputDirectory String: directory where the stuff will be output.
+ * @param $stripFromPath String: path that should be stripped out (usually mediawiki base path).
+ * @param $input String: Path to analyze.
+ */
+function generateConfigFile($doxygenTemplate, $outputDirectory, $stripFromPath, $input) {
+	global $tmpPath ;
+
+	$template = file_get_contents($doxygenTemplate);
+
+	// Replace template placeholders by correct values.	
+	$tmpCfg = str_replace(
+			array(
+				'{{OUTPUT_DIRECTORY}}',
+				'{{STRIP_FROM_PATH}}',
+				'{{INPUT}}',
+			),
+			array(
+				$outputDirectory,
+				$stripFromPath,
+				$input,
+			),
+			$template
+		);
+	$tmpFileName = $tmpPath . 'mwdocgen'. rand() .'.tmp';
+	file_put_contents( $tmpFileName , $tmpCfg ) or die("Could not write doxygen configuration to file $tmpFileName\n");
+
+	return $tmpFileName;
+}
+
+#
+# Main !
+#
+
+unset( $file );
+
+if( is_array( $argv ) && isset( $argv[1] ) ) {
+	switch( $argv[1] ) {
+	case '--all':         $input = 0; break;
+	case '--includes':    $input = 1; break;
+	case '--languages':   $input = 2; break;
+	case '--maintenance': $input = 3; break;
+	case '--skins':       $input = 4; break;
+	case '--file':
+		$input = 5;
+		if( isset( $argv[2] ) ) {
+			$file = $argv[2];
+		}
+		break;
+	}
+}
+
+if( $input === '' ) {
+?>Several documentation possibilities:
+ 0 : whole documentation (1 + 2 + 3 + 4)
+ 1 : only includes
+ 2 : only languages
+ 3 : only maintenance
+ 4 : only skins
+ 5 : only a given file<?php
+	while ( !is_numeric($input) )
+	{
+		$input = readaline( "\nEnter your choice [0]:" );
+		if($input == '') {
+			$input = 0;
+		}
+	}
+}
+/*
+switch ($input) {
+case 0:
+	$command .= " -f $mwBaseFiles -d $mwPathI,$mwPathL,$mwPathM,$mwPathS";
+	break;
+case 1:
+	$command .= "-d $mwPathI";
+	break;
+case 2:
+	$command .= "-d $mwPathL";
+	break;
+case 3:
+	$command .= "-d $mwPathM";
+	break;
+case 4:
+	$command .= "-d $mwPathS";
+	break;
+case 5:
+	if( !isset( $file ) ) {
+		$file = readaline("Enter file name $mwPath");
+	}
+	$command .= ' -f '.$mwPath.$file;
+}
+
+$command .= " -t $pdOutput ".$pdOthers;
+
+*/
+
+// TODO : generate a list of paths ))
+$input = $mwPath;
+
+$generatedConf = generateConfigFile($doxygenTemplate, $doxyOutput, $mwPath, $input );
+$command = $doxygenBin . ' ' . $generatedConf ;
+
+?>
+---------------------------------------------------
+Launching the command:
+
+<?php echo $command ?>
+
+---------------------------------------------------
+<?php
+
+passthru($command);
+
+?>
+---------------------------------------------------
+Doxygen execution finished.
+Check above for possible errors.
+
+You might want to deleted the temporary file <?php echo $generatedConf; ?>
+
+<?php
+
+# phpdoc -d ./mediawiki/includes/ ./mediawiki/maintenance/ -f ./mediawiki/*php -t ./mwdoc/ -dn 'MediaWiki' --title 'MediaWiki generated documentation' -o 'HTML:frames:DOM/earthli'
+
+# phpdoc -f ./mediawiki/includes/GlobalFunctions.php -t ./mwdoc/ -dn 'MediaWiki' --title 'MediaWiki generated documentation' -o 'HTML:frames:DOM/earthli'
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/mwdoxygen.cfg
===================================================================
--- /MediaWiki/branches/1.11/maintenance/mwdoxygen.cfg	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/mwdoxygen.cfg	(revision 1280)
@@ -0,0 +1,230 @@
+# Doxyfile 1.5.1
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+PROJECT_NAME           = MediaWiki
+PROJECT_NUMBER         = MW_VERSION_PLACEHOLDER
+OUTPUT_DIRECTORY       = docs
+CREATE_SUBDIRS         = NO
+OUTPUT_LANGUAGE        = English
+USE_WINDOWS_ENCODING   = NO
+BRIEF_MEMBER_DESC      = YES
+REPEAT_BRIEF           = YES
+ABBREVIATE_BRIEF       = 
+ALWAYS_DETAILED_SEC    = YES
+INLINE_INHERITED_MEMB  = NO
+FULL_PATH_NAMES        = YES
+STRIP_FROM_PATH        = 
+STRIP_FROM_INC_PATH    = 
+SHORT_NAMES            = NO
+JAVADOC_AUTOBRIEF      = YES
+MULTILINE_CPP_IS_BRIEF = NO
+DETAILS_AT_TOP         = YES
+INHERIT_DOCS           = YES
+SEPARATE_MEMBER_PAGES  = NO
+TAB_SIZE               = 4
+ALIASES                = 
+OPTIMIZE_OUTPUT_FOR_C  = NO
+OPTIMIZE_OUTPUT_JAVA   = NO
+BUILTIN_STL_SUPPORT    = NO
+DISTRIBUTE_GROUP_DOC   = NO
+SUBGROUPING            = YES
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+EXTRACT_ALL            = YES
+EXTRACT_PRIVATE        = YES
+EXTRACT_STATIC         = YES
+EXTRACT_LOCAL_CLASSES  = YES
+EXTRACT_LOCAL_METHODS  = NO
+HIDE_UNDOC_MEMBERS     = NO
+HIDE_UNDOC_CLASSES     = NO
+HIDE_FRIEND_COMPOUNDS  = NO
+HIDE_IN_BODY_DOCS      = NO
+INTERNAL_DOCS          = NO
+CASE_SENSE_NAMES       = YES
+HIDE_SCOPE_NAMES       = NO
+SHOW_INCLUDE_FILES     = YES
+INLINE_INFO            = YES
+SORT_MEMBER_DOCS       = YES
+SORT_BRIEF_DOCS        = NO
+SORT_BY_SCOPE_NAME     = NO
+GENERATE_TODOLIST      = YES
+GENERATE_TESTLIST      = YES
+GENERATE_BUGLIST       = YES
+GENERATE_DEPRECATEDLIST= YES
+ENABLED_SECTIONS       = 
+MAX_INITIALIZER_LINES  = 30
+SHOW_USED_FILES        = YES
+SHOW_DIRECTORIES       = YES
+FILE_VERSION_FILTER    = bin/svnstat 
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+QUIET                  = NO
+WARNINGS               = YES
+WARN_IF_UNDOCUMENTED   = YES
+WARN_IF_DOC_ERROR      = YES
+WARN_NO_PARAMDOC       = NO
+WARN_FORMAT            = "$file:$line: $text"
+WARN_LOGFILE           = 
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+INPUT                  = config \
+                         includes \
+                         maintenance \
+                         skins \
+                         tests
+FILE_PATTERNS          = *.php \
+                         *.inc
+RECURSIVE              = NO
+EXCLUDE                = 
+EXCLUDE_SYMLINKS       = NO
+EXCLUDE_PATTERNS       = 
+EXAMPLE_PATH           = 
+EXAMPLE_PATTERNS       = 
+EXAMPLE_RECURSIVE      = NO
+IMAGE_PATH             = 
+INPUT_FILTER           = 
+FILTER_PATTERNS        = 
+FILTER_SOURCE_FILES    = NO
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+SOURCE_BROWSER         = NO
+INLINE_SOURCES         = NO
+STRIP_CODE_COMMENTS    = YES
+REFERENCED_BY_RELATION = YES
+REFERENCES_RELATION    = YES
+REFERENCES_LINK_SOURCE = YES
+USE_HTAGS              = NO
+VERBATIM_HEADERS       = YES
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+ALPHABETICAL_INDEX     = NO
+COLS_IN_ALPHA_INDEX    = 5
+IGNORE_PREFIX          = 
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+GENERATE_HTML          = YES
+HTML_OUTPUT            = html
+HTML_FILE_EXTENSION    = .html
+HTML_HEADER            = 
+HTML_FOOTER            = 
+HTML_STYLESHEET        = 
+HTML_ALIGN_MEMBERS     = YES
+GENERATE_HTMLHELP      = NO
+CHM_FILE               = 
+HHC_LOCATION           = 
+GENERATE_CHI           = NO
+BINARY_TOC             = NO
+TOC_EXPAND             = NO
+DISABLE_INDEX          = NO
+ENUM_VALUES_PER_LINE   = 4
+GENERATE_TREEVIEW      = YES
+TREEVIEW_WIDTH         = 250
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+GENERATE_LATEX         = NO
+LATEX_OUTPUT           = latex
+LATEX_CMD_NAME         = latex
+MAKEINDEX_CMD_NAME     = makeindex
+COMPACT_LATEX          = NO
+PAPER_TYPE             = a4wide
+EXTRA_PACKAGES         = 
+LATEX_HEADER           = 
+PDF_HYPERLINKS         = NO
+USE_PDFLATEX           = NO
+LATEX_BATCHMODE        = NO
+LATEX_HIDE_INDICES     = NO
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+GENERATE_RTF           = NO
+RTF_OUTPUT             = rtf
+COMPACT_RTF            = NO
+RTF_HYPERLINKS         = NO
+RTF_STYLESHEET_FILE    = 
+RTF_EXTENSIONS_FILE    = 
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+GENERATE_MAN           = NO
+MAN_OUTPUT             = man
+MAN_EXTENSION          = .3
+MAN_LINKS              = NO
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+GENERATE_XML           = NO
+XML_OUTPUT             = xml
+XML_SCHEMA             = 
+XML_DTD                = 
+XML_PROGRAMLISTING     = YES
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+GENERATE_AUTOGEN_DEF   = NO
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+GENERATE_PERLMOD       = NO
+PERLMOD_LATEX          = NO
+PERLMOD_PRETTY         = YES
+PERLMOD_MAKEVAR_PREFIX = 
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor   
+#---------------------------------------------------------------------------
+ENABLE_PREPROCESSING   = NO
+MACRO_EXPANSION        = NO
+EXPAND_ONLY_PREDEF     = NO
+SEARCH_INCLUDES        = YES
+INCLUDE_PATH           = 
+INCLUDE_FILE_PATTERNS  = 
+PREDEFINED             = 
+EXPAND_AS_DEFINED      = 
+SKIP_FUNCTION_MACROS   = YES
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references   
+#---------------------------------------------------------------------------
+TAGFILES               = 
+GENERATE_TAGFILE       = 
+ALLEXTERNALS           = NO
+EXTERNAL_GROUPS        = YES
+PERL_PATH              = /usr/bin/perl
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool   
+#---------------------------------------------------------------------------
+CLASS_DIAGRAMS         = YES
+HIDE_UNDOC_RELATIONS   = YES
+HAVE_DOT               = YES
+CLASS_GRAPH            = YES
+COLLABORATION_GRAPH    = NO
+GROUP_GRAPHS           = YES
+UML_LOOK               = NO
+TEMPLATE_RELATIONS     = NO
+INCLUDE_GRAPH          = YES
+INCLUDED_BY_GRAPH      = YES
+CALL_GRAPH             = NO
+CALLER_GRAPH           = NO
+GRAPHICAL_HIERARCHY    = YES
+DIRECTORY_GRAPH        = YES
+DOT_IMAGE_FORMAT       = png
+DOT_PATH               = 
+DOTFILE_DIRS           = 
+MAX_DOT_GRAPH_WIDTH    = 1024
+MAX_DOT_GRAPH_HEIGHT   = 1024
+MAX_DOT_GRAPH_DEPTH    = 0
+DOT_TRANSPARENT        = NO
+DOT_MULTI_TARGETS      = NO
+GENERATE_LEGEND        = YES
+DOT_CLEANUP            = YES
+#---------------------------------------------------------------------------
+# Configuration::additions related to the search engine   
+#---------------------------------------------------------------------------
+SEARCHENGINE           = YES 
Index: /MediaWiki/branches/1.11/maintenance/namespace2sql.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/namespace2sql.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/namespace2sql.php	(revision 1280)
@@ -0,0 +1,14 @@
+<?php
+#
+# Print SQL to insert namespace names into database.
+# This source code is in the public domain.
+
+require_once( "commandLine.inc" );
+
+for ($i = -2; $i < 16; ++$i) {
+	$nsname = mysql_escape_string( $wgLang->getNsText( $i ) );
+	$dbname = mysql_escape_string( $wgDBname );
+	print "INSERT INTO ns_name(ns_db, ns_num, ns_name) VALUES('$dbname', $i, '$nsname');\n";
+}
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/namespaceDupes.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/namespaceDupes.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/namespaceDupes.php	(revision 1280)
@@ -0,0 +1,195 @@
+<?php
+# Copyright (C) 2005 Brion Vibber <brion@pobox.com>
+# http://www.mediawiki.org/
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+# http://www.gnu.org/copyleft/gpl.html
+
+$options = array( 'fix', 'suffix', 'help' );
+
+/** */
+require_once( 'commandLine.inc' );
+#require_once( 'maintenance/userDupes.inc' );
+
+if(isset( $options['help'] ) ) {
+print <<<END
+usage: namespaceDupes.php [--fix] [--suffix=<text>] [--help]
+    --help          : this help message
+    --fix           : attempt to automatically fix errors
+    --suffix=<text> : dupes will be renamed with correct namespace with <text>
+                      appended after the article name.
+
+END;
+die;
+}
+
+class NamespaceConflictChecker {
+	function NamespaceConflictChecker( &$db ) {
+		$this->db =& $db;
+	}
+
+	function checkAll( $fix, $suffix = '' ) {
+		global $wgContLang;
+		$spaces = $wgContLang->getNamespaces();
+		$ok = true;
+		foreach( $spaces as $ns => $name ) {
+			$ok = $this->checkNamespace( $ns, $name, $fix, $suffix ) && $ok;
+		}
+		return $ok;
+	}
+
+	function checkNamespace( $ns, $name, $fix, $suffix = '' ) {
+		echo "Checking namespace $ns: \"$name\"\n";
+		if( $name == '' ) {
+			echo "... skipping article namespace\n";
+			return true;
+		}
+
+		$conflicts = $this->getConflicts( $ns, $name );
+		$count = count( $conflicts );
+		if( $count == 0 ) {
+			echo "... no conflicts detected!\n";
+			return true;
+		}
+
+		echo "... $count conflicts detected:\n";
+		$ok = true;
+		foreach( $conflicts as $row ) {
+			$resolvable = $this->reportConflict( $row, $suffix );
+			$ok = $ok && $resolvable;
+			if( $fix && ( $resolvable || $suffix != '' ) ) {
+				$ok = $this->resolveConflict( $row, $resolvable, $suffix ) && $ok;
+			}
+		}
+		return $ok;
+	}
+	
+	/**
+	 * @fixme: do this for reals
+	 */
+	function checkPrefix( $key, $prefix, $fix, $suffix = '' ) {
+		echo "Checking prefix \"$prefix\" vs namespace $key\n";
+		return $this->checkNamespace( $key, $prefix, $fix, $suffix );
+	}
+
+	function getConflicts( $ns, $name ) {
+		$page  = $this->newSchema() ? 'page' : 'cur';
+		$table = $this->db->tableName( $page );
+
+		$prefix     = $this->db->strencode( $name );
+		$likeprefix = str_replace( '_', '\\_', $prefix);
+
+		$sql = "SELECT {$page}_id                                  AS id,
+		               {$page}_title                               AS oldtitle,
+		               $ns                                         AS namespace,
+		               TRIM(LEADING '$prefix:' FROM {$page}_title) AS title
+		          FROM {$table}
+		         WHERE {$page}_namespace=0
+		           AND {$page}_title LIKE '$likeprefix:%'";
+
+		$result = $this->db->query( $sql, 'NamespaceConflictChecker::getConflicts' );
+
+		$set = array();
+		while( $row = $this->db->fetchObject( $result ) ) {
+			$set[] = $row;
+		}
+		$this->db->freeResult( $result );
+
+		return $set;
+	}
+
+	function reportConflict( $row, $suffix ) {
+		$newTitle = Title::makeTitleSafe( $row->namespace, $row->title );
+		printf( "... %d (0,\"%s\") -> (%d,\"%s\") [[%s]]\n",
+			$row->id,
+			$row->oldtitle,
+			$newTitle->getNamespace(),
+			$newTitle->getDbKey(),
+			$newTitle->getPrefixedText() );
+
+		$id = $newTitle->getArticleId();
+		if( $id ) {
+			echo "...  *** cannot resolve automatically; page exists with ID $id ***\n";
+			return false;
+		} else {
+			return true;
+		}
+	}
+
+	function resolveConflict( $row, $resolvable, $suffix ) {
+		if( !$resolvable ) {
+			$row->title .= $suffix;
+			$title = Title::makeTitleSafe( $row->namespace, $row->title );
+			echo "...  *** using suffixed form [[" . $title->getPrefixedText() . "]] ***\n";
+		}
+		$tables = $this->newSchema()
+			? array( 'page' )
+			: array( 'cur', 'old' );
+		foreach( $tables as $table ) {
+			$this->resolveConflictOn( $row, $table );
+		}
+		return true;
+	}
+
+	function resolveConflictOn( $row, $table ) {
+		$fname = 'NamespaceConflictChecker::resolveConflictOn';
+		echo "... resolving on $table... ";
+		$newTitle = Title::makeTitleSafe( $row->namespace, $row->title );
+		$this->db->update( $table,
+			array(
+				"{$table}_namespace" => $newTitle->getNamespace(),
+				"{$table}_title"     => $newTitle->getDbKey(),
+			),
+			array(
+				"{$table}_namespace" => 0,
+				"{$table}_title"     => $row->oldtitle,
+			),
+			$fname );
+		echo "ok.\n";
+		return true;
+	}
+
+	function newSchema() {
+		return class_exists( 'Revision' );
+	}
+}
+
+
+
+
+$wgTitle = Title::newFromText( 'Namespace title conflict cleanup script' );
+
+$fix = isset( $options['fix'] );
+$suffix = isset( $options['suffix'] ) ? $options['suffix'] : '';
+$prefix = isset( $options['prefix'] ) ? $options['prefix'] : '';
+$key = isset( $options['key'] ) ? intval( $options['key'] ) : 0;
+$dbw = wfGetDB( DB_MASTER );
+$duper = new NamespaceConflictChecker( $dbw );
+
+if( $prefix ) {
+	$retval = $duper->checkPrefix( $key, $prefix, $fix, $suffix );
+} else {
+	$retval = $duper->checkAll( $fix, $suffix );
+}
+
+if( $retval ) {
+	echo "\nLooks good!\n";
+	exit( 0 );
+} else {
+	echo "\nOh noeees\n";
+	exit( -1 );
+}
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/nextJobDB.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/nextJobDB.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/nextJobDB.php	(revision 1280)
@@ -0,0 +1,48 @@
+<?php
+
+/*
+ * Pick a database that has pending jobs
+ */
+
+require_once( 'commandLine.inc' );
+
+$pendingDBs = $wgMemc->get( 'jobqueue:dbs' );
+if ( !$pendingDBs ) {
+	$pendingDBs = array();
+	# Cross-reference DBs by master DB server
+	$dbsByMaster = array();
+	$defaultMaster = $wgAlternateMaster['DEFAULT'];
+	foreach ( $wgLocalDatabases as $db ) {
+		if ( isset( $wgAlternateMaster[$db] ) ) {
+			$dbsByMaster[$wgAlternateMaster[$db]][] = $db;
+		} else {
+			$dbsByMaster[$defaultMaster][] = $db;
+		}
+	}
+
+	foreach ( $dbsByMaster as $master => $dbs ) {
+		$dbConn = new Database( $master, $wgDBuser, $wgDBpassword );
+
+		# Padding row for MySQL bug
+		$sql = "(SELECT '-------------------------------------------')";
+		foreach ( $dbs as $dbName ) {
+			if ( $sql != '' ) {
+				$sql .= ' UNION ';
+			}
+			$sql .= "(SELECT '$dbName' FROM `$dbName`.job LIMIT 1)";
+		}
+		$res = $dbConn->query( $sql, 'nextJobDB.php' );
+		$row = $dbConn->fetchRow( $res ); // discard padding row
+		while ( $row = $dbConn->fetchRow( $res ) ) {
+			$pendingDBs[] = $row[0];
+		}
+	}
+
+	$wgMemc->set( 'jobqueue:dbs', $pendingDBs, 300 );
+}
+
+if ( $pendingDBs ) {
+	echo $pendingDBs[mt_rand(0, count( $pendingDBs ) - 1)];
+}
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/nukeNS.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/nukeNS.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/nukeNS.php	(revision 1280)
@@ -0,0 +1,108 @@
+<?php
+
+/**
+ * Remove pages with only 1 revision from the MediaWiki namespace, without
+ * flooding recent changes, delete logs, etc.
+ * Irreversible (can't use standard undelete) and does not update link tables
+ *
+ * This is mainly useful to run before maintenance/update.php when upgrading
+ * to 1.9, to prevent flooding recent changes/deletion logs.  It's intended
+ * to be conservative, so it's possible that a few entries will be left for
+ * deletion by the upgrade script.  It's also possible that it hasn't been
+ * tested thouroughly enough, and will delete something it shouldn't; so
+ * back up your DB if there's anything in the MediaWiki that is important to
+ * you.
+ *
+ * @addtogroup Maintenance
+ * @author Steve Sanbeg
+ * based on nukePage by Rob Church
+ */
+
+require_once( 'commandLine.inc' );
+require_once( 'nukePage.inc' );
+
+$ns = NS_MEDIAWIKI;
+$delete = false;
+
+if (isset($options['ns'])) 
+{
+  $ns = $options['ns'];
+}
+
+if (isset( $options['delete'] ) and $options['delete']) 
+{
+  $delete = true;
+}
+
+
+NukeNS( $ns, $delete);
+
+function NukeNS($ns_no, $delete) {
+
+  $dbw = wfGetDB( DB_MASTER );
+  $dbw->begin();
+  
+  $tbl_pag = $dbw->tableName( 'page' );
+  $tbl_rev = $dbw->tableName( 'revision' );
+  $res = $dbw->query( "SELECT page_title FROM $tbl_pag WHERE page_namespace = $ns_no" );
+
+  $n_deleted = 0;
+  
+  while( $row = $dbw->fetchObject( $res ) ) {
+    //echo "$ns_name:".$row->page_title, "\n";
+    $title = Title::newFromText($row->page_title, $ns_no);
+    $id   = $title->getArticleID();
+
+    // Get corresponding revisions
+    $res2 = $dbw->query( "SELECT rev_id FROM $tbl_rev WHERE rev_page = $id" );
+    $revs = array();
+    
+    while( $row2 = $dbw->fetchObject( $res2 ) ) {
+      $revs[] = $row2->rev_id;
+    }
+    $count = count( $revs );
+
+    //skip anything that looks modified (i.e. multiple revs)
+    if (($count == 1)) {
+      #echo $title->getPrefixedText(), "\t", $count, "\n";
+      echo "delete: ", $title->getPrefixedText(), "\n";
+      
+      //as much as I hate to cut & paste this, it's a little different, and
+      //I already have the id & revs
+      
+      if( $delete ) {
+	$dbw->query( "DELETE FROM $tbl_pag WHERE page_id = $id" );
+	$dbw->commit();
+	// Delete revisions as appropriate
+	DeleteRevisions( $revs );
+	PurgeRedundantText( true );
+	$n_deleted ++;
+      }
+    } else {
+      echo "skip: ", $title->getPrefixedText(), "\n";
+    }
+    
+    
+  }
+  $dbw->commit();
+  
+  if ($n_deleted > 0) {
+    #update statistics - better to decrement existing count, or just count
+    #the page table?
+    $pages = $dbw->selectField('site_stats', 'ss_total_pages');
+    $pages -= $n_deleted;
+    $dbw->update( 'site_stats', 
+		  array('ss_total_pages' => $pages ), 
+		  array( 'ss_row_id' => 1),
+		  __METHOD__ );
+    
+  }
+  
+  if (!$delete) {
+    echo( "To update the database, run the script with the --delete option.\n" );
+  }
+  
+}
+
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/nukePage.inc
===================================================================
--- /MediaWiki/branches/1.11/maintenance/nukePage.inc	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/nukePage.inc	(revision 1280)
@@ -0,0 +1,87 @@
+<?php
+
+/**
+ * Support functions for the nukeArticle script
+ *
+ * @addtogroup Maintenance
+ * @author Rob Church <robchur@gmail.com>
+ */
+
+require_once( 'purgeOldText.inc' );
+
+function NukePage( $name, $delete = false ) {
+
+	$dbw = wfGetDB( DB_MASTER );
+	$dbw->begin();
+	
+	$tbl_pag = $dbw->tableName( 'page' );
+	$tbl_rec = $dbw->tableName( 'recentchanges' );
+	$tbl_rev = $dbw->tableName( 'revision' );
+	
+	# Get page ID
+	echo( "Searching for \"$name\"..." );
+	$title = Title::newFromText( $name );
+	if( $title ) {
+		$id   = $title->getArticleID();
+		$real = $title->getPrefixedText();
+		echo( "found \"$real\" with ID $id.\n" );
+		
+		# Get corresponding revisions
+		echo( "Searching for revisions..." );
+		$res = $dbw->query( "SELECT rev_id FROM $tbl_rev WHERE rev_page = $id" );
+		while( $row = $dbw->fetchObject( $res ) ) {
+			$revs[] = $row->rev_id;
+		}
+		$count = count( $revs );
+		echo( "found $count.\n" );
+		
+		# Delete the page record and associated recent changes entries
+		if( $delete ) {
+			echo( "Deleting page record..." );
+			$dbw->query( "DELETE FROM $tbl_pag WHERE page_id = $id" );
+			echo( "done.\n" );
+			echo( "Cleaning up recent changes..." );
+			$dbw->query( "DELETE FROM $tbl_rec WHERE rc_cur_id = $id" );
+			echo( "done.\n" );
+		}
+
+		$dbw->commit();
+		
+		# Delete revisions as appropriate
+		if( $delete && $count ) {
+			echo( "Deleting revisions..." );
+			DeleteRevisions( $revs );
+			echo( "done.\n" );
+			PurgeRedundantText( true );
+		}
+		
+	} else {
+		echo( "not found in database.\n" );
+		$dbw->commit();
+	}
+	
+}
+
+function DeleteRevisions( $ids ) {
+
+	$dbw = wfGetDB( DB_MASTER );
+	$dbw->begin();
+	
+	$tbl_rev = $dbw->tableName( 'revision' );
+	
+	$set = implode( ', ', $ids );
+	$dbw->query( "DELETE FROM $tbl_rev WHERE rev_id IN ( $set )" );
+	
+	$dbw->commit();	
+
+	#TODO: see if this is a "good" page, to decrement that as well.
+	$pages = $dbw->selectField('site_stats', 'ss_total_pages');
+	$pages--;
+	$dbw->update( 'site_stats', 
+		      array('ss_total_pages' => $pages ), 
+		      array( 'ss_row_id' => 1),
+		      __METHOD__ );
+	
+}
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/nukePage.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/nukePage.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/nukePage.php	(revision 1280)
@@ -0,0 +1,29 @@
+<?php
+
+/**
+ * Erase a page record from the database
+ * Irreversible (can't use standard undelete) and does not update link tables
+ *
+ * @addtogroup Maintenance
+ * @author Rob Church <robchur@gmail.com>
+ */
+
+require_once( 'commandLine.inc' );
+require_once( 'nukePage.inc' );
+
+echo( "Erase Page Record\n\n" );
+
+if( isset( $args[0] ) ) {
+	NukePage( $args[0], true );
+} else {
+	ShowUsage();
+}
+
+/** Show script usage information */
+function ShowUsage() {
+	echo( "Remove a page record from the database.\n\n" );
+	echo( "Usage: php nukePage.php <title>\n\n" );
+	echo( "	<title> : Page title; spaces escaped with underscores\n\n" );
+}
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/ora/tables.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/ora/tables.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/ora/tables.sql	(revision 1280)
@@ -0,0 +1,437 @@
+-- SQL to create the initial tables for the MediaWiki database.
+-- This is read and executed by the install script; you should
+-- not have to run it by itself unless doing a manual install.
+-- This is the Oracle version (based on PostgreSQL schema).
+-- For information about each table, please see the notes in maintenance/tables.sql
+
+CREATE SEQUENCE user_user_id_seq MINVALUE 0 START WITH 0;
+
+CREATE TABLE mwuser ( -- replace reserved word 'user'
+  user_id                   INTEGER  NOT NULL  PRIMARY KEY,
+  user_name                 VARCHAR(255)     NOT NULL  UNIQUE,
+  user_real_name            CLOB,
+  user_password             CLOB,
+  user_newpassword          CLOB,
+  user_newpass_time         TIMESTAMP WITH TIME ZONE,
+  user_token                CHAR(32),
+  user_email                CLOB,
+  user_email_token          CHAR(32),
+  user_email_token_expires  TIMESTAMP WITH TIME ZONE,
+  user_email_authenticated  TIMESTAMP WITH TIME ZONE,
+  user_options              CLOB,
+  user_touched              TIMESTAMP WITH TIME ZONE,
+  user_registration         TIMESTAMP WITH TIME ZONE,
+  user_editcount            INTEGER
+);
+CREATE INDEX user_email_token_idx ON mwuser (user_email_token);
+
+-- Create a dummy user to satisfy fk contraints especially with revisions
+INSERT INTO mwuser
+  VALUES (user_user_id_seq.nextval,'Anonymous','',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, '', current_timestamp, current_timestamp, 0);
+
+CREATE TABLE user_groups (
+  ug_user   INTEGER      NULL  REFERENCES mwuser(user_id) ON DELETE CASCADE,
+  ug_group  CHAR(16)     NOT NULL
+);
+CREATE UNIQUE INDEX user_groups_unique ON user_groups (ug_user, ug_group);
+
+CREATE TABLE user_newtalk (
+  user_id  INTEGER NOT NULL  REFERENCES mwuser(user_id) ON DELETE CASCADE,
+  user_ip  VARCHAR(40)        NULL
+);
+CREATE INDEX user_newtalk_id_idx ON user_newtalk (user_id);
+CREATE INDEX user_newtalk_ip_idx ON user_newtalk (user_ip);
+
+CREATE SEQUENCE page_page_id_seq;
+CREATE TABLE page (
+  page_id            INTEGER        NOT NULL PRIMARY KEY,
+  page_namespace     SMALLINT       NOT NULL,
+  page_title         VARCHAR(255)           NOT NULL,
+  page_restrictions  CLOB,
+  page_counter       INTEGER         DEFAULT 0 NOT NULL,
+  page_is_redirect   CHAR           DEFAULT 0 NOT NULL,
+  page_is_new        CHAR           DEFAULT 0 NOT NULL,
+  page_random        NUMERIC(15,14) NOT NULL,
+  page_touched       TIMESTAMP WITH TIME ZONE,
+  page_latest        INTEGER        NOT NULL, -- FK?
+  page_len           INTEGER        NOT NULL
+);
+CREATE UNIQUE INDEX page_unique_name ON page (page_namespace, page_title);
+CREATE INDEX page_random_idx         ON page (page_random);
+CREATE INDEX page_len_idx            ON page (page_len);
+
+CREATE TRIGGER page_set_random BEFORE INSERT ON page
+        FOR EACH ROW WHEN (new.page_random IS NULL)
+        BEGIN
+                SELECT dbms_random.value INTO :new.page_random FROM dual;
+        END;
+/
+
+CREATE SEQUENCE rev_rev_id_val;
+CREATE TABLE revision (
+  rev_id          INTEGER      NOT NULL PRIMARY KEY,
+  rev_page        INTEGER          NULL  REFERENCES page (page_id) ON DELETE CASCADE,
+  rev_text_id     INTEGER          NULL, -- FK
+  rev_comment     CLOB,
+  rev_user        INTEGER      NOT NULL  REFERENCES mwuser(user_id),
+  rev_user_text   VARCHAR(255)         NOT NULL,
+  rev_timestamp   TIMESTAMP WITH TIME ZONE  NOT NULL,
+  rev_minor_edit  CHAR         DEFAULT '0' NOT NULL,
+  rev_deleted     CHAR         DEFAULT '0' NOT NULL,
+  rev_len         INTEGER          NULL,
+  rev_parent_id   INTEGER      	   DEFAULT NULL
+);
+CREATE UNIQUE INDEX revision_unique ON revision (rev_page, rev_id);
+CREATE INDEX rev_text_id_idx        ON revision (rev_text_id);
+CREATE INDEX rev_timestamp_idx      ON revision (rev_timestamp);
+CREATE INDEX rev_user_idx           ON revision (rev_user);
+CREATE INDEX rev_user_text_idx      ON revision (rev_user_text);
+
+
+CREATE SEQUENCE text_old_id_val;
+CREATE TABLE pagecontent ( -- replaces reserved word 'text'
+  old_id     INTEGER  NOT NULL PRIMARY KEY,
+  old_text   CLOB,
+  old_flags  CLOB
+);
+
+
+CREATE SEQUENCE pr_id_val;
+CREATE TABLE page_restrictions (
+  pr_id      INTEGER      NOT NULL UNIQUE,
+  pr_page    INTEGER          NULL  REFERENCES page (page_id) ON DELETE CASCADE,
+  pr_type    VARCHAR(255)         NOT NULL,
+  pr_level   VARCHAR(255)         NOT NULL,
+  pr_cascade SMALLINT     NOT NULL,
+  pr_user    INTEGER          NULL,
+  pr_expiry  TIMESTAMP WITH TIME ZONE      NULL
+);
+ALTER TABLE page_restrictions ADD CONSTRAINT page_restrictions_pk PRIMARY KEY (pr_page,pr_type);
+
+CREATE TABLE archive (
+  ar_namespace   SMALLINT     NOT NULL,
+  ar_title       VARCHAR(255)         NOT NULL,
+  ar_text        CLOB,
+  ar_comment     CLOB,
+  ar_user        INTEGER          NULL  REFERENCES mwuser(user_id) ON DELETE SET NULL,
+  ar_user_text   CLOB         NOT NULL,
+  ar_timestamp   TIMESTAMP WITH TIME ZONE  NOT NULL,
+  ar_minor_edit  CHAR         DEFAULT '0' NOT NULL,
+  ar_flags       CLOB,
+  ar_rev_id      INTEGER,
+  ar_text_id     INTEGER,
+  ar_deleted     INTEGER      DEFAULT '0' NOT NULL
+);
+CREATE INDEX archive_name_title_timestamp ON archive (ar_namespace,ar_title,ar_timestamp);
+
+CREATE TABLE redirect (
+  rd_from       INTEGER  NOT NULL  REFERENCES page(page_id) ON DELETE CASCADE,
+  rd_namespace  SMALLINT NOT NULL,
+  rd_title      VARCHAR(255)     NOT NULL
+);
+CREATE INDEX redirect_ns_title ON redirect (rd_namespace,rd_title,rd_from);
+
+
+CREATE TABLE pagelinks (
+  pl_from       INTEGER   NOT NULL  REFERENCES page(page_id) ON DELETE CASCADE,
+  pl_namespace  SMALLINT  NOT NULL,
+  pl_title      VARCHAR(255)      NOT NULL
+);
+CREATE UNIQUE INDEX pagelink_unique ON pagelinks (pl_from,pl_namespace,pl_title);
+
+CREATE TABLE templatelinks (
+  tl_from       INTEGER  NOT NULL  REFERENCES page(page_id) ON DELETE CASCADE,
+  tl_namespace  INTEGER     NOT NULL,
+  tl_title      VARCHAR(255)     NOT NULL
+);
+CREATE UNIQUE INDEX templatelinks_unique ON templatelinks (tl_namespace,tl_title,tl_from);
+
+CREATE TABLE imagelinks (
+  il_from  INTEGER  NOT NULL  REFERENCES page(page_id) ON DELETE CASCADE,
+  il_to    VARCHAR(255)     NOT NULL
+);
+CREATE UNIQUE INDEX il_from ON imagelinks (il_to,il_from);
+
+CREATE TABLE categorylinks (
+  cl_from       INTEGER      NOT NULL  REFERENCES page(page_id) ON DELETE CASCADE,
+  cl_to         VARCHAR(255)         NOT NULL,
+  cl_sortkey    VARCHAR(86),
+  cl_timestamp  TIMESTAMP WITH TIME ZONE  NOT NULL
+);
+CREATE UNIQUE INDEX cl_from ON categorylinks (cl_from, cl_to);
+CREATE INDEX cl_sortkey     ON categorylinks (cl_to, cl_sortkey);
+
+CREATE TABLE externallinks (
+  el_from   INTEGER  NOT NULL  REFERENCES page(page_id) ON DELETE CASCADE,
+  el_to     VARCHAR(2048) NOT NULL,
+  el_index  CLOB     NOT NULL
+);
+-- XXX CREATE INDEX externallinks_from_to ON externallinks (el_from,el_to);
+-- XXX CREATE INDEX externallinks_index   ON externallinks (el_index);
+
+CREATE TABLE langlinks (
+  ll_from    INTEGER  NOT NULL  REFERENCES page (page_id) ON DELETE CASCADE,
+  ll_lang    VARCHAR(10),
+  ll_title   VARCHAR(255)
+);
+CREATE UNIQUE INDEX langlinks_unique ON langlinks (ll_from,ll_lang);
+CREATE INDEX langlinks_lang_title    ON langlinks (ll_lang,ll_title);
+
+
+CREATE TABLE site_stats (
+  ss_row_id         INTEGER  NOT NULL  UNIQUE,
+  ss_total_views    INTEGER            DEFAULT 0,
+  ss_total_edits    INTEGER            DEFAULT 0,
+  ss_good_articles  INTEGER            DEFAULT 0,
+  ss_total_pages    INTEGER            DEFAULT -1,
+  ss_users          INTEGER            DEFAULT -1,
+  ss_admins         INTEGER            DEFAULT -1,
+  ss_images         INTEGER            DEFAULT 0
+);
+
+CREATE TABLE hitcounter (
+  hc_id  INTEGER  NOT NULL
+);
+
+
+CREATE SEQUENCE ipblocks_ipb_id_val;
+CREATE TABLE ipblocks (
+  ipb_id                INTEGER      NOT NULL PRIMARY KEY,
+  ipb_address           VARCHAR(255)     NULL,
+  ipb_user              INTEGER          NULL  REFERENCES mwuser(user_id) ON DELETE SET NULL,
+  ipb_by                INTEGER      NOT NULL  REFERENCES mwuser(user_id) ON DELETE CASCADE,
+  ipb_reason            VARCHAR(255)         NOT NULL,
+  ipb_timestamp         TIMESTAMP WITH TIME ZONE  NOT NULL,
+  ipb_auto              CHAR         DEFAULT '0' NOT NULL,
+  ipb_anon_only         CHAR         DEFAULT '0' NOT NULL,
+  ipb_create_account    CHAR         DEFAULT '1' NOT NULL,
+  ipb_enable_autoblock  CHAR         DEFAULT '1' NOT NULL,
+  ipb_expiry            TIMESTAMP WITH TIME ZONE  NOT NULL,
+  ipb_range_start       CHAR(8),
+  ipb_range_end         CHAR(8),
+  ipb_deleted           INTEGER      DEFAULT '0' NOT NULL
+);
+CREATE INDEX ipb_address ON ipblocks (ipb_address);
+CREATE INDEX ipb_user    ON ipblocks (ipb_user);
+CREATE INDEX ipb_range   ON ipblocks (ipb_range_start,ipb_range_end);
+
+
+CREATE TABLE image (
+  img_name         VARCHAR(255)      NOT NULL  PRIMARY KEY,
+  img_size         INTEGER   NOT NULL,
+  img_width        INTEGER   NOT NULL,
+  img_height       INTEGER   NOT NULL,
+  img_metadata     CLOB,
+  img_bits         SMALLINT,
+  img_media_type   CLOB,
+  img_major_mime   CLOB                DEFAULT 'unknown',
+  img_minor_mime   CLOB                DEFAULT 'unknown',
+  img_description  CLOB      NOT NULL,
+  img_user         INTEGER       NULL  REFERENCES mwuser(user_id) ON DELETE SET NULL,
+  img_user_text    CLOB      NOT NULL,
+  img_timestamp    TIMESTAMP WITH TIME ZONE
+);
+CREATE INDEX img_size_idx      ON image (img_size);
+CREATE INDEX img_timestamp_idx ON image (img_timestamp);
+
+CREATE TABLE oldimage (
+  oi_name          VARCHAR(255)         NOT NULL  REFERENCES image(img_name),
+  oi_archive_name  VARCHAR(255)         NOT NULL,
+  oi_size          INTEGER      NOT NULL,
+  oi_width         INTEGER      NOT NULL,
+  oi_height        INTEGER      NOT NULL,
+  oi_bits          SMALLINT     NOT NULL,
+  oi_description   CLOB,
+  oi_user          INTEGER          NULL  REFERENCES mwuser(user_id) ON DELETE SET NULL,
+  oi_user_text     CLOB         NOT NULL,
+  oi_timestamp     TIMESTAMP WITH TIME ZONE  NOT NULL
+);
+CREATE INDEX oi_name ON oldimage (oi_name);
+
+CREATE SEQUENCE filearchive_fa_id_seq;
+CREATE TABLE filearchive (
+  fa_id                 INTEGER       NOT NULL  PRIMARY KEY,
+  fa_name               VARCHAR(255)         NOT NULL,
+  fa_archive_name       VARCHAR(255),
+  fa_storage_group      VARCHAR(16),
+  fa_storage_key        CHAR(64),
+  fa_deleted_user       INTEGER          NULL  REFERENCES mwuser(user_id) ON DELETE SET NULL,
+  fa_deleted_timestamp  TIMESTAMP WITH TIME ZONE  NOT NULL,
+  fa_deleted_reason     CLOB,
+  fa_size               SMALLINT     NOT NULL,
+  fa_width              SMALLINT     NOT NULL,
+  fa_height             SMALLINT     NOT NULL,
+  fa_metadata           CLOB,
+  fa_bits               SMALLINT,
+  fa_media_type         CLOB,
+  fa_major_mime         CLOB                   DEFAULT 'unknown',
+  fa_minor_mime         CLOB                   DEFAULT 'unknown',
+  fa_description        CLOB         NOT NULL,
+  fa_user               INTEGER          NULL  REFERENCES mwuser(user_id) ON DELETE SET NULL,
+  fa_user_text          CLOB         NOT NULL,
+  fa_timestamp          TIMESTAMP WITH TIME ZONE,
+  fa_deleted            INTEGER      DEFAULT '0' NOT NULL
+);
+CREATE INDEX fa_name_time ON filearchive (fa_name, fa_timestamp);
+CREATE INDEX fa_dupe      ON filearchive (fa_storage_group, fa_storage_key);
+CREATE INDEX fa_notime    ON filearchive (fa_deleted_timestamp);
+CREATE INDEX fa_nouser    ON filearchive (fa_deleted_user);
+
+
+CREATE SEQUENCE rc_rc_id_seq;
+CREATE TABLE recentchanges (
+  rc_id              INTEGER      NOT NULL PRIMARY KEY,
+  rc_timestamp       TIMESTAMP WITH TIME ZONE  NOT NULL,
+  rc_cur_time        TIMESTAMP WITH TIME ZONE  NOT NULL,
+  rc_user            INTEGER          NULL  REFERENCES mwuser(user_id) ON DELETE SET NULL,
+  rc_user_text       CLOB         NOT NULL,
+  rc_namespace       SMALLINT     NOT NULL,
+  rc_title           VARCHAR(255)         NOT NULL,
+  rc_comment         VARCHAR(255),
+  rc_minor           CHAR         DEFAULT '0' NOT NULL,
+  rc_bot             CHAR         DEFAULT '0' NOT NULL,
+  rc_new             CHAR         DEFAULT '0' NOT NULL,
+  rc_cur_id          INTEGER          NULL  REFERENCES page(page_id) ON DELETE SET NULL,
+  rc_this_oldid      INTEGER      NOT NULL,
+  rc_last_oldid      INTEGER      NOT NULL,
+  rc_type            CHAR         DEFAULT '0' NOT NULL,
+  rc_moved_to_ns     SMALLINT,
+  rc_moved_to_title  CLOB,
+  rc_patrolled       CHAR         DEFAULT '0' NOT NULL,
+  rc_ip              VARCHAR(15),
+  rc_old_len         INTEGER,
+  rc_new_len         INTEGER,
+  rc_deleted         INTEGER      DEFAULT '0' NOT NULL,
+  rc_logid           INTEGER      DEFAULT '0' NOT NULL,
+  rc_log_type      	 CLOB,
+  rc_log_action      CLOB,
+  rc_params      	 CLOB
+);
+CREATE INDEX rc_timestamp       ON recentchanges (rc_timestamp);
+CREATE INDEX rc_namespace_title ON recentchanges (rc_namespace, rc_title);
+CREATE INDEX rc_cur_id          ON recentchanges (rc_cur_id);
+CREATE INDEX new_name_timestamp ON recentchanges (rc_new, rc_namespace, rc_timestamp);
+CREATE INDEX rc_ip              ON recentchanges (rc_ip);
+
+
+CREATE TABLE watchlist (
+  wl_user                   INTEGER     NOT NULL  REFERENCES mwuser(user_id) ON DELETE CASCADE,
+  wl_namespace              SMALLINT    DEFAULT 0 NOT NULL,
+  wl_title                  VARCHAR(255)        NOT NULL,
+  wl_notificationtimestamp  TIMESTAMP WITH TIME ZONE
+);
+CREATE UNIQUE INDEX wl_user_namespace_title ON watchlist (wl_namespace, wl_title, wl_user);
+
+
+CREATE TABLE math (
+  math_inputhash              VARCHAR(16)      NOT NULL  UNIQUE,
+  math_outputhash             VARCHAR(16)      NOT NULL,
+  math_html_conservativeness  SMALLINT  NOT NULL,
+  math_html                   CLOB,
+  math_mathml                 CLOB
+);
+
+
+CREATE TABLE interwiki (
+  iw_prefix  VARCHAR(32)   NOT NULL  UNIQUE,
+  iw_url     VARCHAR(127)  NOT NULL,
+  iw_local   CHAR  NOT NULL,
+  iw_trans   CHAR  DEFAULT '0' NOT NULL
+);
+
+CREATE TABLE querycache (
+  qc_type       CHAR(32)      NOT NULL,
+  qc_value      SMALLINT  NOT NULL,
+  qc_namespace  SMALLINT  NOT NULL,
+  qc_title      CHAR(255)      NOT NULL
+);
+CREATE INDEX querycache_type_value ON querycache (qc_type, qc_value);
+
+CREATE TABLE querycache_info (
+  qci_type       VARCHAR(32)              UNIQUE,
+  qci_timestamp  TIMESTAMP WITH TIME ZONE NULL
+);
+
+CREATE TABLE querycachetwo (
+  qcc_type          CHAR(32)     NOT NULL,
+  qcc_value         SMALLINT DEFAULT 0 NOT NULL,
+  qcc_namespace     INTEGER  DEFAULT 0 NOT NULL,
+  qcc_title         CHAR(255)     DEFAULT '' NOT NULL,
+  qcc_namespacetwo  INTEGER  DEFAULT 0 NOT NULL,
+  qcc_titletwo      CHAR(255)     DEFAULT '' NOT NULL
+);
+CREATE INDEX querycachetwo_type_value ON querycachetwo (qcc_type, qcc_value);
+CREATE INDEX querycachetwo_title      ON querycachetwo (qcc_type,qcc_namespace,qcc_title);
+CREATE INDEX querycachetwo_titletwo   ON querycachetwo (qcc_type,qcc_namespacetwo,qcc_titletwo);
+
+
+CREATE TABLE objectcache (
+  keyname  CHAR(255)              UNIQUE,
+  value    BLOB,
+  exptime  TIMESTAMP WITH TIME ZONE  NOT NULL
+);
+CREATE INDEX objectcacache_exptime ON objectcache (exptime);
+
+CREATE TABLE transcache (
+  tc_url       VARCHAR(255)         NOT NULL  UNIQUE,
+  tc_contents  CLOB         NOT NULL,
+  tc_time      TIMESTAMP WITH TIME ZONE  NOT NULL
+);
+
+
+CREATE SEQUENCE log_log_id_seq;
+CREATE TABLE logging (
+  log_type        VARCHAR(10)         NOT NULL,
+  log_action      VARCHAR(10)         NOT NULL,
+  log_timestamp   TIMESTAMP WITH TIME ZONE  NOT NULL,
+  log_user        INTEGER                REFERENCES mwuser(user_id) ON DELETE SET NULL,
+  log_namespace   SMALLINT     NOT NULL,
+  log_title       VARCHAR(255)         NOT NULL,
+  log_comment     VARCHAR(255),
+  log_params      CLOB,
+  log_deleted     INTEGER      DEFAULT '0' NOT NULL,
+  log_id          INTEGER      NOT NULL PRIMARY KEY
+);
+CREATE INDEX logging_type_name ON logging (log_type, log_timestamp);
+CREATE INDEX logging_user_time ON logging (log_timestamp, log_user);
+CREATE INDEX logging_page_time ON logging (log_namespace, log_title, log_timestamp);
+
+CREATE SEQUENCE trackbacks_tb_id_seq;
+CREATE TABLE trackbacks (
+  tb_id     INTEGER   NOT NULL PRIMARY KEY,
+  tb_page   INTEGER            REFERENCES page(page_id) ON DELETE CASCADE,
+  tb_title  VARCHAR(255)     NOT NULL,
+  tb_url    VARCHAR(255)     NOT NULL,
+  tb_ex     CLOB,
+  tb_name   VARCHAR(255) 
+);
+CREATE INDEX trackback_page ON trackbacks (tb_page);
+
+CREATE SEQUENCE job_job_id_seq;
+CREATE TABLE job (
+  job_id         INTEGER   NOT NULL PRIMARY KEY,
+  job_cmd        VARCHAR(255)      NOT NULL,
+  job_namespace  SMALLINT  NOT NULL,
+  job_title      VARCHAR(255)      NOT NULL,
+  job_params     CLOB      NOT NULL
+);
+CREATE INDEX job_cmd_namespace_title ON job (job_cmd, job_namespace, job_title);
+
+-- This table is not used unless profiling is turned on
+--CREATE TABLE profiling (
+--  pf_count   INTEGER         DEFAULT 0 NOT NULL,
+--  pf_time    NUMERIC(18,10)  DEFAULT 0 NOT NULL,
+--  pf_name    CLOB            NOT NULL,
+--  pf_server  CLOB            NULL
+--);
+--CREATE UNIQUE INDEX pf_name_server ON profiling (pf_name, pf_server);
+
+CREATE TABLE searchindex (
+  si_page	INTEGER UNIQUE NOT NULL,
+  si_title	VARCHAR(255) DEFAULT '' NOT NULL,
+  si_text	CLOB NOT NULL
+);
+
+
+CREATE INDEX si_title_idx ON searchindex(si_title) INDEXTYPE IS ctxsys.context;
+CREATE INDEX si_text_idx ON searchindex(si_text) INDEXTYPE IS ctxsys.context;
Index: /MediaWiki/branches/1.11/maintenance/orphans.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/orphans.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/orphans.php	(revision 1280)
@@ -0,0 +1,206 @@
+<?php
+# Copyright (C) 2005 Brion Vibber <brion@pobox.com>
+# http://www.mediawiki.org/
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+# http://www.gnu.org/copyleft/gpl.html
+
+/**
+ * Look for 'orphan' revisions hooked to pages which don't exist
+ * And 'childless' pages with no revisions.
+ * Then, kill the poor widows and orphans.
+ * Man this is depressing.
+ *
+ * @author <brion@pobox.com>
+ * @addtogroup Maintenance
+ */
+
+$options = array( 'fix' );
+
+/** */
+require_once( 'commandLine.inc' );
+$wgTitle = Title::newFromText( 'Orphan revision cleanup script' );
+
+checkOrphans( isset( $options['fix'] ) );
+checkSeparation( isset( $options['fix'] ) );
+#checkWidows( isset( $options['fix'] ) );
+
+# ------
+
+function checkOrphans( $fix ) {
+	$dbw = wfGetDB( DB_MASTER );
+	$page = $dbw->tableName( 'page' );
+	$revision = $dbw->tableName( 'revision' );
+
+	if( $fix ) {
+		$dbw->query( "LOCK TABLES $page WRITE, $revision WRITE" );
+	}
+
+	echo "Checking for orphan revision table entries... (this may take a while on a large wiki)\n";
+	$result = $dbw->query( "
+		SELECT *
+		FROM $revision LEFT OUTER JOIN $page ON rev_page=page_id
+		WHERE page_id IS NULL
+	");
+	$orphans = $dbw->numRows( $result );
+	if( $orphans > 0 ) {
+		global $wgContLang;
+		echo "$orphans orphan revisions...\n";
+		printf( "%10s %10s %14s %20s %s\n", 'rev_id', 'rev_page', 'rev_timestamp', 'rev_user_text', 'rev_comment' );
+		while( $row = $dbw->fetchObject( $result ) ) {
+			$comment = ( $row->rev_comment == '' )
+				? ''
+				: '(' . $wgContLang->truncate( $row->rev_comment, 40, '...' ) . ')';
+			printf( "%10d %10d %14s %20s %s\n",
+				$row->rev_id,
+				$row->rev_page,
+				$row->rev_timestamp,
+				$wgContLang->truncate( $row->rev_user_text, 17, '...' ),
+				$comment );
+			if( $fix ) {
+				$dbw->delete( 'revision', array( 'rev_id' => $row->rev_id ) );
+			}
+		}
+		if( !$fix ) {
+			echo "Run again with --fix to remove these entries automatically.\n";
+		}
+	} else {
+		echo "No orphans! Yay!\n";
+	}
+
+	if( $fix ) {
+		$dbw->query( "UNLOCK TABLES" );
+	}
+}
+
+/**
+ * @todo DON'T USE THIS YET! It will remove entries which have children,
+ *       but which aren't properly attached (eg if page_latest is bogus
+ *       but valid revisions do exist)
+ */
+function checkWidows( $fix ) {
+	$dbw = wfGetDB( DB_MASTER );
+	$page = $dbw->tableName( 'page' );
+	$revision = $dbw->tableName( 'revision' );
+
+	if( $fix ) {
+		$dbw->query( "LOCK TABLES $page WRITE, $revision WRITE" );
+	}
+
+	echo "\nChecking for childless page table entries... (this may take a while on a large wiki)\n";
+	$result = $dbw->query( "
+		SELECT *
+		FROM $page LEFT OUTER JOIN $revision ON page_latest=rev_id
+		WHERE rev_id IS NULL
+	");
+	$widows = $dbw->numRows( $result );
+	if( $widows > 0 ) {
+		global $wgContLang;
+		echo "$widows childless pages...\n";
+		printf( "%10s %11s %2s %s\n", 'page_id', 'page_latest', 'ns', 'page_title' );
+		while( $row = $dbw->fetchObject( $result ) ) {
+			printf( "%10d %11d %2d %s\n",
+				$row->page_id,
+				$row->page_latest,
+				$row->page_namespace,
+				$row->page_title );
+			if( $fix ) {
+				$dbw->delete( 'page', array( 'page_id' => $row->page_id ) );
+			}
+		}
+		if( !$fix ) {
+			echo "Run again with --fix to remove these entries automatically.\n";
+		}
+	} else {
+		echo "No childless pages! Yay!\n";
+	}
+
+	if( $fix ) {
+		$dbw->query( "UNLOCK TABLES" );
+	}
+}
+
+
+function checkSeparation( $fix ) {
+	$dbw = wfGetDB( DB_MASTER );
+	$page     = $dbw->tableName( 'page' );
+	$revision = $dbw->tableName( 'revision' );
+	$text     = $dbw->tableName( 'text' );
+
+	if( $fix ) {
+		$dbw->query( "LOCK TABLES $page WRITE, $revision WRITE, $text WRITE" );
+	}
+
+	echo "\nChecking for pages whose page_latest links are incorrect... (this may take a while on a large wiki)\n";
+	$result = $dbw->query( "
+		SELECT *
+		FROM $page LEFT OUTER JOIN $revision ON page_latest=rev_id
+	");
+	$found = 0;
+	while( $row = $dbw->fetchObject( $result ) ) {
+		$result2 = $dbw->query( "
+			SELECT MAX(rev_timestamp) as max_timestamp
+			FROM $revision
+			WHERE rev_page=$row->page_id
+		" );
+		$row2 = $dbw->fetchObject( $result2 );
+		$dbw->freeResult( $result2 );
+		if( $row2 ) {
+			if( $row->rev_timestamp != $row2->max_timestamp ) {
+				if( $found == 0 ) {
+					printf( "%10s %10s %14s %14s\n",
+						'page_id', 'rev_id', 'timestamp', 'max timestamp' );
+				}
+				++$found;
+				printf( "%10d %10d %14s %14s\n",
+					$row->page_id,
+					$row->page_latest,
+					$row->rev_timestamp,
+					$row2->max_timestamp );
+				if( $fix ) {
+					# ...
+					$maxId = $dbw->selectField(
+						'revision',
+						'rev_id',
+						array(
+							'rev_page'      => $row->page_id,
+							'rev_timestamp' => $row2->max_timestamp ) );
+					echo "... updating to revision $maxId\n";
+					$maxRev = Revision::newFromId( $maxId );
+					$title = Title::makeTitle( $row->page_namespace, $row->page_title );
+					$article = new Article( $title );
+					$article->updateRevisionOn( $dbw, $maxRev );
+				}
+			}
+		} else {
+			echo "wtf\n";
+		}
+	}
+
+	if( $found ) {
+		echo "Found $found pages with incorrect latest revision.\n";
+	} else {
+		echo "No pages with incorrect latest revision. Yay!\n";
+	}
+	if( !$fix && $found > 0 ) {
+		echo "Run again with --fix to remove these entries automatically.\n";
+	}
+
+	if( $fix ) {
+		$dbw->query( "UNLOCK TABLES" );
+	}
+}
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/ourusers.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/ourusers.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/ourusers.php	(revision 1280)
@@ -0,0 +1,69 @@
+<?php
+/**
+ * @todo document
+ * @addtogroup Maintenance
+ */
+
+/** */
+$wikiuser_pass = `wikiuser_pass`;
+$wikiadmin_pass = `wikiadmin_pass`;
+$wikisql_pass = `wikisql_pass`;
+
+if ( @$argv[1] == 'yaseo' ) {
+	$hosts = array(
+		'localhost',
+		'211.115.107.158',
+		'211.115.107.159',
+		'211.115.107.160',
+		'211.115.107.138',
+		'211.115.107.139',
+		'211.115.107.140',
+		'211.115.107.141',
+		'211.115.107.142',
+		'211.115.107.143',
+		'211.115.107.144',
+		'211.115.107.145',
+		'211.115.107.146',
+		'211.115.107.147',
+		'211.115.107.148',
+		'211.115.107.149',
+		'211.115.107.150',
+		'211.115.107.152',
+		'211.115.107.153',
+		'211.115.107.154',
+		'211.115.107.155',
+		'211.115.107.156',
+		'211.115.107.157',
+	);
+} else {
+	$hosts = array(
+		'localhost',
+		'10.0.%',
+		'66.230.200.%',
+	);
+}
+
+$databases = array(
+	'%wik%',
+);
+
+print "/*!40100 set old_passwords=1 */;";
+print "/*!40100 set global old_passwords=1 */;";
+
+foreach( $hosts as $host ) {
+	print "--\n-- $host\n--\n\n-- wikiuser\n\n";
+	print "GRANT REPLICATION CLIENT,PROCESS ON *.* TO 'wikiuser'@'$host' IDENTIFIED BY '$wikiuser_pass';\n";
+	print "GRANT ALL PRIVILEGES ON `boardvote%`.* TO 'wikiuser'@'$host' IDENTIFIED BY '$wikiuser_pass';\n";
+	foreach( $databases as $db ) {
+		print "GRANT SELECT, INSERT, UPDATE, DELETE ON `$db`.* TO 'wikiuser'@'$host' IDENTIFIED BY '$wikiuser_pass';\n";
+	}
+
+	print "\n-- wikiadmin\n\n";
+	print "GRANT PROCESS, REPLICATION CLIENT ON *.* TO 'wikiadmin'@'$host' IDENTIFIED BY '$wikiadmin_pass';\n";
+	print "GRANT ALL PRIVILEGES ON `boardvote%`.* TO wikiadmin@'$host' IDENTIFIED BY '$wikiadmin_pass';\n";
+	foreach ( $databases as $db ) {
+		print "GRANT ALL PRIVILEGES ON `$db`.* TO wikiadmin@'$host' IDENTIFIED BY '$wikiadmin_pass';\n";
+	}
+	print "\n";
+}
+?>
Index: /MediaWiki/branches/1.11/maintenance/parserTests.inc
===================================================================
--- /MediaWiki/branches/1.11/maintenance/parserTests.inc	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/parserTests.inc	(revision 1280)
@@ -0,0 +1,1136 @@
+<?php
+# Copyright (C) 2004 Brion Vibber <brion@pobox.com>
+# http://www.mediawiki.org/
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+# http://www.gnu.org/copyleft/gpl.html
+
+/**
+ * @todo Make this more independent of the configuration (and if possible the database)
+ * @todo document
+ * @addtogroup Maintenance
+ */
+
+/** */
+$options = array( 'quick', 'color', 'quiet', 'help', 'show-output', 'record' );
+$optionsWithArgs = array( 'regex' );
+
+require_once( 'commandLine.inc' );
+require_once( "$IP/maintenance/parserTestsParserHook.php" );
+require_once( "$IP/maintenance/parserTestsStaticParserHook.php" );
+require_once( "$IP/maintenance/parserTestsParserTime.php" );
+
+/**
+ * @addtogroup Maintenance
+ */
+class ParserTest {
+	/**
+	 * boolean $color whereas output should be colorized
+	 */
+	private $color;
+
+	/**
+	 * boolean $showOutput Show test output
+	 */
+	private $showOutput;
+
+	/**
+	 * Sets terminal colorization and diff/quick modes depending on OS and
+	 * command-line options (--color and --quick).
+	 */
+	public function ParserTest() {
+		global $options;
+
+		# Only colorize output if stdout is a terminal.
+		$this->color = !wfIsWindows() && posix_isatty(1);
+
+		if( isset( $options['color'] ) ) {
+			switch( $options['color'] ) {
+			case 'no':
+				$this->color = false;
+				break;
+			case 'yes':
+			default:
+				$this->color = true;
+				break;
+			}
+		}
+		$this->term = $this->color
+			? new AnsiTermColorer()
+			: new DummyTermColorer();
+
+		$this->showDiffs = !isset( $options['quick'] );
+		$this->showProgress = !isset( $options['quiet'] );
+		$this->showFailure = !(
+			isset( $options['quiet'] )
+			&& ( isset( $options['record'] )
+				|| isset( $options['compare'] ) ) ); // redundant output
+		
+		$this->showOutput = isset( $options['show-output'] );
+
+
+		if (isset($options['regex'])) {
+			$this->regex = $options['regex'];
+		} else {
+			# Matches anything
+			$this->regex = '';
+		}
+
+		if( isset( $options['record'] ) ) {
+			$this->recorder = new DbTestRecorder( $this->term );
+		} elseif( isset( $options['compare'] ) ) {
+			$this->recorder = new DbTestPreviewer( $this->term );
+		} else {
+			$this->recorder = new TestRecorder( $this->term );
+		}
+
+		$this->hooks = array();
+		$this->functionHooks = array();
+	}
+
+	/**
+	 * Remove last character if it is a newline
+	 */
+	private function chomp($s) {
+		if (substr($s, -1) === "\n") {
+			return substr($s, 0, -1);
+		}
+		else {
+			return $s;
+		}
+	}
+
+	/**
+	 * Run a series of tests listed in the given text files.
+	 * Each test consists of a brief description, wikitext input,
+	 * and the expected HTML output.
+	 *
+	 * Prints status updates on stdout and counts up the total
+	 * number and percentage of passed tests.
+	 *
+	 * @param array of strings $filenames
+	 * @return bool True if passed all tests, false if any tests failed.
+	 */
+	public function runTestsFromFiles( $filenames ) {
+		$this->recorder->start();
+		$ok = true;
+		foreach( $filenames as $filename ) {
+			$ok = $this->runFile( $filename ) && $ok;
+		}
+		$this->recorder->report();
+		$this->recorder->end();
+		return $ok;
+	}
+
+	private function runFile( $filename ) {
+		$infile = fopen( $filename, 'rt' );
+		if( !$infile ) {
+			wfDie( "Couldn't open $filename\n" );
+		} else {
+			global $IP;
+			$relative = wfRelativePath( $filename, $IP );
+			print $this->term->color( 1 ) .
+				"Reading tests from \"$relative\"..." .
+				$this->term->reset() .
+				"\n";
+		}
+
+		$data = array();
+		$section = null;
+		$n = 0;
+		$ok = true;
+		while( false !== ($line = fgets( $infile ) ) ) {
+			$n++;
+			$matches = array();
+			if( preg_match( '/^!!\s*(\w+)/', $line, $matches ) ) {
+				$section = strtolower( $matches[1] );
+				if( $section == 'endarticle') {
+					if( !isset( $data['text'] ) ) {
+						wfDie( "'endarticle' without 'text' at line $n of $filename\n" );
+					}
+					if( !isset( $data['article'] ) ) {
+						wfDie( "'endarticle' without 'article' at line $n of $filename\n" );
+					}
+					$this->addArticle($this->chomp($data['article']), $this->chomp($data['text']), $n);
+					$data = array();
+					$section = null;
+					continue;
+				}
+				if( $section == 'endhooks' ) {
+					if( !isset( $data['hooks'] ) ) {
+						wfDie( "'endhooks' without 'hooks' at line $n of $filename\n" );
+					}
+					foreach( explode( "\n", $data['hooks'] ) as $line ) {
+						$line = trim( $line );
+						if( $line ) {
+							$this->requireHook( $line );
+						}
+					}
+					$data = array();
+					$section = null;
+					continue;
+				}
+				if( $section == 'endfunctionhooks' ) {
+					if( !isset( $data['functionhooks'] ) ) {
+						wfDie( "'endfunctionhooks' without 'functionhooks' at line $n of $filename\n" );
+					}
+					foreach( explode( "\n", $data['functionhooks'] ) as $line ) {
+						$line = trim( $line );
+						if( $line ) {
+							$this->requireFunctionHook( $line );
+						}
+					}
+					$data = array();
+					$section = null;
+					continue;
+				}
+				if( $section == 'end' ) {
+					if( !isset( $data['test'] ) ) {
+						wfDie( "'end' without 'test' at line $n of $filename\n" );
+					}
+					if( !isset( $data['input'] ) ) {
+						wfDie( "'end' without 'input' at line $n of $filename\n" );
+					}
+					if( !isset( $data['result'] ) ) {
+						wfDie( "'end' without 'result' at line $n of $filename\n" );
+					}
+					if( !isset( $data['options'] ) ) {
+						$data['options'] = '';
+					}
+					else {
+						$data['options'] = $this->chomp( $data['options'] );
+					}
+					if (preg_match('/\\bdisabled\\b/i', $data['options'])
+						|| !preg_match("/{$this->regex}/i", $data['test'])) {
+						# disabled test
+						$data = array();
+						$section = null;
+						continue;
+					}
+					$result = $this->runTest(
+						$this->chomp( $data['test'] ),
+						$this->chomp( $data['input'] ),
+						$this->chomp( $data['result'] ),
+						$this->chomp( $data['options'] ) );
+					$ok = $ok && $result;
+					$this->recorder->record( $this->chomp( $data['test'] ), $result );
+					$data = array();
+					$section = null;
+					continue;
+				}
+				if ( isset ($data[$section] ) ) {
+					wfDie( "duplicate section '$section' at line $n of $filename\n" );
+				}
+				$data[$section] = '';
+				continue;
+			}
+			if( $section ) {
+				$data[$section] .= $line;
+			}
+		}
+		if ( $this->showProgress ) {
+			print "\n";
+		}
+		return $ok;
+	}
+
+	/**
+	 * Run a given wikitext input through a freshly-constructed wiki parser,
+	 * and compare the output against the expected results.
+	 * Prints status and explanatory messages to stdout.
+	 *
+	 * @param string $input Wikitext to try rendering
+	 * @param string $result Result to output
+	 * @return bool
+	 */
+	private function runTest( $desc, $input, $result, $opts ) {
+		if( $this->showProgress ) {
+			$this->showTesting( $desc );
+		}
+
+		$this->setupGlobals($opts);
+
+		$user = new User();
+		$options = ParserOptions::newFromUser( $user );
+
+		if (preg_match('/\\bmath\\b/i', $opts)) {
+			# XXX this should probably be done by the ParserOptions
+			$options->setUseTex(true);
+		}
+
+		$m = array();
+		if (preg_match('/title=\[\[(.*)\]\]/', $opts, $m)) {
+			$titleText = $m[1];
+		}
+		else {
+			$titleText = 'Parser test';
+		}
+
+		$noxml = (bool)preg_match( '~\\b noxml \\b~x', $opts );
+
+		$parser = new Parser();
+		foreach( $this->hooks as $tag => $callback ) {
+			$parser->setHook( $tag, $callback );
+		}
+		foreach( $this->functionHooks as $tag => $callback ) {
+			$parser->setFunctionHook( $tag, $callback );
+		}
+		wfRunHooks( 'ParserTestParser', array( &$parser ) );
+
+		$title =& Title::makeTitle( NS_MAIN, $titleText );
+
+		$matches = array();
+		if (preg_match('/\\bpst\\b/i', $opts)) {
+			$out = $parser->preSaveTransform( $input, $title, $user, $options );
+		} elseif (preg_match('/\\bmsg\\b/i', $opts)) {
+			$out = $parser->transformMsg( $input, $options );
+		} elseif( preg_match( '/\\bsection=(\d+)\b/i', $opts, $matches ) ) {
+			$section = intval( $matches[1] );
+			$out = $parser->getSection( $input, $section );
+		} elseif( preg_match( '/\\breplace=(\d+),"(.*?)"/i', $opts, $matches ) ) {
+			$section = intval( $matches[1] );
+			$replace = $matches[2];
+			$out = $parser->replaceSection( $input, $section, $replace );
+		} else {
+			$output = $parser->parse( $input, $title, $options, true, true, 1337 );
+			$out = $output->getText();
+
+			if (preg_match('/\\bill\\b/i', $opts)) {
+				$out = $this->tidy( implode( ' ', $output->getLanguageLinks() ) );
+			} else if (preg_match('/\\bcat\\b/i', $opts)) {
+				global $wgOut;
+				$wgOut->addCategoryLinks($output->getCategories());
+				$out = $this->tidy ( implode( ' ', $wgOut->getCategoryLinks() ) );
+			}
+
+			$result = $this->tidy($result);
+		}
+
+		$this->teardownGlobals();
+
+		if( $result === $out && ( $noxml === true || $this->wellFormed( $out ) ) ) {
+			return $this->showSuccess( $desc );
+		} else {
+			return $this->showFailure( $desc, $result, $out );
+		}
+	}
+
+	/**
+	 * Set up the global variables for a consistent environment for each test.
+	 * Ideally this should replace the global configuration entirely.
+	 */
+	private function setupGlobals($opts = '') {
+		# Save the prefixed / quoted table names for later use when we make the temporaries.
+		$db = wfGetDB( DB_READ );
+		$this->oldTableNames = array();
+		foreach( $this->listTables() as $table ) {
+			$this->oldTableNames[$table] = $db->tableName( $table );
+		}
+		if( !isset( $this->uploadDir ) ) {
+			$this->uploadDir = $this->setupUploadDir();
+		}
+
+		$m = array();
+		if( preg_match( '/language=([a-z]+(?:_[a-z]+)?)/', $opts, $m ) ) {
+			$lang = $m[1];
+		} else {
+			$lang = 'en';
+		}
+
+		if( preg_match( '/variant=([a-z]+(?:-[a-z]+)?)/', $opts, $m ) ) {
+			$variant = $m[1];
+		} else {
+			$variant = false;
+		}
+
+
+		$settings = array(
+			'wgServer' => 'http://localhost',
+			'wgScript' => '/index.php',
+			'wgScriptPath' => '/',
+			'wgArticlePath' => '/wiki/$1',
+			'wgActionPaths' => array(),
+			'wgUploadPath' => 'http://example.com/images',
+			'wgUploadDirectory' => $this->uploadDir,
+			'wgStyleSheetPath' => '/skins',
+			'wgSitename' => 'MediaWiki',
+			'wgServerName' => 'Britney Spears',
+			'wgLanguageCode' => $lang,
+			'wgContLanguageCode' => $lang,
+			'wgDBprefix' => 'parsertest_',
+			'wgRawHtml' => preg_match('/\\brawhtml\\b/i', $opts),
+			'wgLang' => null,
+			'wgContLang' => null,
+			'wgNamespacesWithSubpages' => array( 0 => preg_match('/\\bsubpage\\b/i', $opts)),
+			'wgMaxTocLevel' => 999,
+			'wgCapitalLinks' => true,
+			'wgNoFollowLinks' => true,
+			'wgThumbnailScriptPath' => false,
+			'wgUseTeX' => false,
+			'wgLocaltimezone' => 'UTC',
+			'wgAllowExternalImages' => true,
+			'wgUseTidy' => false,
+			'wgDefaultLanguageVariant' => $variant,
+			'wgVariantArticlePath' => false,
+			);
+		$this->savedGlobals = array();
+		foreach( $settings as $var => $val ) {
+			$this->savedGlobals[$var] = $GLOBALS[$var];
+			$GLOBALS[$var] = $val;
+		}
+		$langObj = Language::factory( $lang );
+		$GLOBALS['wgLang'] = $langObj;
+		$GLOBALS['wgContLang'] = $langObj;
+
+		$GLOBALS['wgLoadBalancer']->loadMasterPos();
+		//$GLOBALS['wgMessageCache'] = new MessageCache( new BagOStuff(), false, 0, $GLOBALS['wgDBname'] );
+		$this->setupDatabase();
+
+		global $wgUser;
+		$wgUser = new User();
+	}
+
+	/**
+	 * List of temporary tables to create, without prefix.
+	 * Some of these probably aren't necessary.
+	 */
+	private function listTables() {
+		$tables = array('user', 'page', 'page_restrictions', 'revision', 'text',
+			'pagelinks', 'imagelinks', 'categorylinks',
+			'templatelinks', 'externallinks', 'langlinks',
+			'site_stats', 'hitcounter',
+			'ipblocks', 'image', 'oldimage',
+			'recentchanges',
+			'watchlist', 'math', 'searchindex',
+			'interwiki', 'querycache',
+			'objectcache', 'job', 'redirect',
+			'querycachetwo'
+		);
+		
+		// Allow extensions to add to the list of tables to duplicate;
+		// may be necessary if they hook into page save or other code
+		// which will require them while running tests.
+		wfRunHooks( 'ParserTestTables', array( &$tables ) );
+
+		return $tables;
+	}
+
+	/**
+	 * Set up a temporary set of wiki tables to work with for the tests.
+	 * Currently this will only be done once per run, and any changes to
+	 * the db will be visible to later tests in the run.
+	 */
+	private function setupDatabase() {
+		static $setupDB = false;
+		global $wgDBprefix;
+
+		# Make sure we don't mess with the live DB
+		if (!$setupDB && $wgDBprefix === 'parsertest_') {
+			# oh teh horror
+			$GLOBALS['wgLoadBalancer'] = LoadBalancer::newFromParams( $GLOBALS['wgDBservers'] );
+			$db = wfGetDB( DB_MASTER );
+
+			$tables = $this->listTables();
+
+			if (!(strcmp($db->getServerVersion(), '4.1') < 0 and stristr($db->getSoftwareLink(), 'MySQL'))) {
+				# Database that supports CREATE TABLE ... LIKE
+				global $wgDBtype;
+				if( $wgDBtype == 'postgres' ) {
+					$def = 'INCLUDING DEFAULTS';
+				} else {
+					$def = '';
+				}
+				foreach ($tables as $tbl) {
+					$newTableName = $db->tableName( $tbl );
+					$tableName = $this->oldTableNames[$tbl];
+					$db->query("CREATE TEMPORARY TABLE $newTableName (LIKE $tableName $def)");
+				}
+			} else {
+				# Hack for MySQL versions < 4.1, which don't support
+				# "CREATE TABLE ... LIKE". Note that
+				# "CREATE TEMPORARY TABLE ... SELECT * FROM ... LIMIT 0"
+				# would not create the indexes we need....
+				foreach ($tables as $tbl) {
+					$res = $db->query("SHOW CREATE TABLE {$this->oldTableNames[$tbl]}");
+					$row = $db->fetchRow($res);
+					$create = $row[1];
+					$create_tmp = preg_replace('/CREATE TABLE `(.*?)`/', 'CREATE TEMPORARY TABLE `'
+						. $wgDBprefix . $tbl .'`', $create);
+					if ($create === $create_tmp) {
+						# Couldn't do replacement
+						wfDie("could not create temporary table $tbl");
+					}
+					$db->query($create_tmp);
+				}
+
+			}
+
+			# Hack: insert a few Wikipedia in-project interwiki prefixes,
+			# for testing inter-language links
+			$db->insert( 'interwiki', array(
+				array( 'iw_prefix' => 'Wikipedia',
+				       'iw_url'    => 'http://en.wikipedia.org/wiki/$1',
+				       'iw_local'  => 0 ),
+				array( 'iw_prefix' => 'MeatBall',
+				       'iw_url'    => 'http://www.usemod.com/cgi-bin/mb.pl?$1',
+				       'iw_local'  => 0 ),
+				array( 'iw_prefix' => 'zh',
+				       'iw_url'    => 'http://zh.wikipedia.org/wiki/$1',
+				       'iw_local'  => 1 ),
+				array( 'iw_prefix' => 'es',
+				       'iw_url'    => 'http://es.wikipedia.org/wiki/$1',
+				       'iw_local'  => 1 ),
+				array( 'iw_prefix' => 'fr',
+				       'iw_url'    => 'http://fr.wikipedia.org/wiki/$1',
+				       'iw_local'  => 1 ),
+				array( 'iw_prefix' => 'ru',
+				       'iw_url'    => 'http://ru.wikipedia.org/wiki/$1',
+				       'iw_local'  => 1 ),
+				) );
+
+			# Hack: Insert an image to work with
+			$db->insert( 'image', array(
+				'img_name'        => 'Foobar.jpg',
+				'img_size'        => 12345,
+				'img_description' => 'Some lame file',
+				'img_user'        => 1,
+				'img_user_text'   => 'WikiSysop',
+				'img_timestamp'   => $db->timestamp( '20010115123500' ),
+				'img_width'       => 1941,
+				'img_height'      => 220,
+				'img_bits'        => 24,
+				'img_media_type'  => MEDIATYPE_BITMAP,
+				'img_major_mime'  => "image",
+				'img_minor_mime'  => "jpeg",
+				'img_metadata'    => serialize( array() ),
+				) );
+
+			# Update certain things in site_stats
+			$db->insert( 'site_stats', array( 'ss_row_id' => 1, 'ss_images' => 1, 'ss_good_articles' => 1 ) );
+
+			$setupDB = true;
+		}
+	}
+
+	/**
+	 * Create a dummy uploads directory which will contain a couple
+	 * of files in order to pass existence tests.
+	 * @return string The directory
+	 */
+	private function setupUploadDir() {
+		global $IP;
+
+		$dir = wfTempDir() . "/mwParser-" . mt_rand() . "-images";
+		mkdir( $dir );
+		mkdir( $dir . '/3' );
+		mkdir( $dir . '/3/3a' );
+
+		$img = "$IP/skins/monobook/headbg.jpg";
+		$h = fopen($img, 'r');
+		$c = fread($h, filesize($img));
+		fclose($h);
+
+		$f = fopen( $dir . '/3/3a/Foobar.jpg', 'wb' );
+		fwrite( $f, $c );
+		fclose( $f );
+		return $dir;
+	}
+
+	/**
+	 * Restore default values and perform any necessary clean-up
+	 * after each test runs.
+	 */
+	private function teardownGlobals() {
+		foreach( $this->savedGlobals as $var => $val ) {
+			$GLOBALS[$var] = $val;
+		}
+		if( isset( $this->uploadDir ) ) {
+			$this->teardownUploadDir( $this->uploadDir );
+			unset( $this->uploadDir );
+		}
+	}
+
+	/**
+	 * Remove the dummy uploads directory
+	 */
+	private function teardownUploadDir( $dir ) {
+		// delete the files first, then the dirs.
+		self::deleteFiles(
+			array (
+				"$dir/3/3a/Foobar.jpg",
+				"$dir/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg",
+				"$dir/thumb/3/3a/Foobar.jpg/200px-Foobar.jpg",
+				"$dir/thumb/3/3a/Foobar.jpg/640px-Foobar.jpg",
+				"$dir/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg",
+			)
+		);
+
+		self::deleteDirs(
+			array (
+				"$dir/3/3a",
+				"$dir/3",
+				"$dir/thumb/6/65",
+				"$dir/thumb/6",
+				"$dir/thumb/3/3a/Foobar.jpg",
+				"$dir/thumb/3/3a",
+				"$dir/thumb/3",
+				"$dir/thumb",
+				"$dir",
+			)
+		);
+	}
+
+	/**
+	 * @desc delete the specified files, if they exist.
+	 * @param array $files full paths to files to delete.
+	 */
+	private static function deleteFiles( $files ) {
+		foreach( $files as $file ) {
+			if( file_exists( $file ) ) {
+				unlink( $file );
+			}
+		}
+	}
+
+	/**
+	 * @desc delete the specified directories, if they exist. Must be empty.
+	 * @param array $dirs full paths to directories to delete.
+	 */
+	private static function deleteDirs( $dirs ) {
+		foreach( $dirs as $dir ) {
+			if( is_dir( $dir ) ) {
+				rmdir( $dir );
+			}
+		}
+	}
+
+	/**
+	 * "Running test $desc..."
+	 */
+	private function showTesting( $desc ) {
+		print "Running test $desc... ";
+	}
+
+	/**
+	 * Print a happy success message.
+	 *
+	 * @param string $desc The test name
+	 * @return bool
+	 */
+	private function showSuccess( $desc ) {
+		if( $this->showProgress ) {
+			print $this->term->color( '1;32' ) . 'PASSED' . $this->term->reset() . "\n";
+		}
+		return true;
+	}
+
+	/**
+	 * Print a failure message and provide some explanatory output
+	 * about what went wrong if so configured.
+	 *
+	 * @param string $desc The test name
+	 * @param string $result Expected HTML output
+	 * @param string $html Actual HTML output
+	 * @return bool
+	 */
+	private function showFailure( $desc, $result, $html ) {
+		if( $this->showFailure ) {
+			if( !$this->showProgress ) {
+				# In quiet mode we didn't show the 'Testing' message before the
+				# test, in case it succeeded. Show it now:
+				$this->showTesting( $desc );
+			}
+			print $this->term->color( '31' ) . 'FAILED!' . $this->term->reset() . "\n";
+			if ( $this->showOutput ) {
+				print "--- Expected ---\n$result\n--- Actual ---\n$html\n";
+			}
+			if( $this->showDiffs ) {
+				print $this->quickDiff( $result, $html );
+				if( !$this->wellFormed( $html ) ) {
+					print "XML error: $this->mXmlError\n";
+				}
+			}
+		}
+		return false;
+	}
+
+	/**
+	 * Run given strings through a diff and return the (colorized) output.
+	 * Requires writable /tmp directory and a 'diff' command in the PATH.
+	 *
+	 * @param string $input
+	 * @param string $output
+	 * @param string $inFileTail Tailing for the input file name
+	 * @param string $outFileTail Tailing for the output file name
+	 * @return string
+	 */
+	private function quickDiff( $input, $output, $inFileTail='expected', $outFileTail='actual' ) {
+		$prefix = wfTempDir() . "/mwParser-" . mt_rand();
+
+		$infile = "$prefix-$inFileTail";
+		$this->dumpToFile( $input, $infile );
+
+		$outfile = "$prefix-$outFileTail";
+		$this->dumpToFile( $output, $outfile );
+
+		$diff = `diff -au $infile $outfile`;
+		unlink( $infile );
+		unlink( $outfile );
+
+		return $this->colorDiff( $diff );
+	}
+
+	/**
+	 * Write the given string to a file, adding a final newline.
+	 *
+	 * @param string $data
+	 * @param string $filename
+	 */
+	private function dumpToFile( $data, $filename ) {
+		$file = fopen( $filename, "wt" );
+		fwrite( $file, $data . "\n" );
+		fclose( $file );
+	}
+
+	/**
+	 * Colorize unified diff output if set for ANSI color output.
+	 * Subtractions are colored blue, additions red.
+	 *
+	 * @param string $text
+	 * @return string
+	 */
+	private function colorDiff( $text ) {
+		return preg_replace(
+			array( '/^(-.*)$/m', '/^(\+.*)$/m' ),
+			array( $this->term->color( 34 ) . '$1' . $this->term->reset(),
+			       $this->term->color( 31 ) . '$1' . $this->term->reset() ),
+			$text );
+	}
+
+	/**
+	 * Insert a temporary test article
+	 * @param string $name the title, including any prefix
+	 * @param string $text the article text
+	 * @param int $line the input line number, for reporting errors
+	 */
+	private function addArticle($name, $text, $line) {
+		$this->setupGlobals();
+		$title = Title::newFromText( $name );
+		if ( is_null($title) ) {
+			wfDie( "invalid title at line $line\n" );
+		}
+
+		$aid = $title->getArticleID( GAID_FOR_UPDATE );
+		if ($aid != 0) {
+			wfDie( "duplicate article at line $line\n" );
+		}
+
+		$art = new Article($title);
+		$art->insertNewArticle($text, '', false, false );
+		$this->teardownGlobals();
+	}
+
+	/**
+	 * Steal a callback function from the primary parser, save it for
+	 * application to our scary parser. If the hook is not installed,
+	 * die a painful dead to warn the others.
+	 * @param string $name
+	 */
+	private function requireHook( $name ) {
+		global $wgParser;
+		if( isset( $wgParser->mTagHooks[$name] ) ) {
+			$this->hooks[$name] = $wgParser->mTagHooks[$name];
+		} else {
+			wfDie( "This test suite requires the '$name' hook extension.\n" );
+		}
+	}
+
+	/**
+	 * Steal a callback function from the primary parser, save it for
+	 * application to our scary parser. If the hook is not installed,
+	 * die a painful dead to warn the others.
+	 * @param string $name
+	 */
+	private function requireFunctionHook( $name ) {
+		global $wgParser;
+		if( isset( $wgParser->mFunctionHooks[$name] ) ) {
+			$this->functionHooks[$name] = $wgParser->mFunctionHooks[$name];
+		} else {
+			wfDie( "This test suite requires the '$name' function hook extension.\n" );
+		}
+	}
+
+	/*
+	 * Run the "tidy" command on text if the $wgUseTidy
+	 * global is true
+	 *
+	 * @param string $text the text to tidy
+	 * @return string
+	 * @static
+	 */
+	private function tidy( $text ) {
+		global $wgUseTidy;
+		if ($wgUseTidy) {
+			$text = Parser::tidy($text);
+		}
+		return $text;
+	}
+
+	private function wellFormed( $text ) {
+		$html =
+			Sanitizer::hackDocType() .
+			'<html>' .
+			$text .
+			'</html>';
+
+		$parser = xml_parser_create( "UTF-8" );
+
+		# case folding violates XML standard, turn it off
+		xml_parser_set_option( $parser, XML_OPTION_CASE_FOLDING, false );
+
+		if( !xml_parse( $parser, $html, true ) ) {
+			$err = xml_error_string( xml_get_error_code( $parser ) );
+			$position = xml_get_current_byte_index( $parser );
+			$fragment = $this->extractFragment( $html, $position );
+			$this->mXmlError = "$err at byte $position:\n$fragment";
+			xml_parser_free( $parser );
+			return false;
+		}
+		xml_parser_free( $parser );
+		return true;
+	}
+
+	private function extractFragment( $text, $position ) {
+		$start = max( 0, $position - 10 );
+		$before = $position - $start;
+		$fragment = '...' .
+			$this->term->color( 34 ) .
+			substr( $text, $start, $before ) .
+			$this->term->color( 0 ) .
+			$this->term->color( 31 ) .
+			$this->term->color( 1 ) .
+			substr( $text, $position, 1 ) .
+			$this->term->color( 0 ) .
+			$this->term->color( 34 ) .
+			substr( $text, $position + 1, 9 ) .
+			$this->term->color( 0 ) .
+			'...';
+		$display = str_replace( "\n", ' ', $fragment );
+		$caret = '   ' .
+			str_repeat( ' ', $before ) .
+			$this->term->color( 31 ) .
+			'^' .
+			$this->term->color( 0 );
+		return "$display\n$caret";
+	}
+}
+
+class AnsiTermColorer {
+	function __construct() {
+	}
+
+	/**
+	 * Return ANSI terminal escape code for changing text attribs/color
+	 *
+	 * @param string $color Semicolon-separated list of attribute/color codes
+	 * @return string
+	 */
+	public function color( $color ) {
+		global $wgCommandLineDarkBg;
+		$light = $wgCommandLineDarkBg ? "1;" : "0;";
+		return "\x1b[{$light}{$color}m";
+	}
+
+	/**
+	 * Return ANSI terminal escape code for restoring default text attributes
+	 *
+	 * @return string
+	 */
+	public function reset() {
+		return $this->color( 0 );
+	}
+}
+
+/* A colour-less terminal */
+class DummyTermColorer {
+	public function color( $color ) {
+		return '';
+	}
+
+	public function reset() {
+		return '';
+	}
+}
+
+class TestRecorder {
+	function __construct( $term ) {
+		$this->term = $term;
+	}
+
+	function start() {
+		$this->total = 0;
+		$this->success = 0;
+	}
+
+	function record( $test, $result ) {
+		$this->total++;
+		$this->success += ($result ? 1 : 0);
+	}
+
+	function end() {
+		// dummy
+	}
+
+	function report() {
+		if( $this->total > 0 ) {
+			$this->reportPercentage( $this->success, $this->total );
+		} else {
+			wfDie( "No tests found.\n" );
+		}
+	}
+
+	function reportPercentage( $success, $total ) {
+		$ratio = wfPercent( 100 * $success / $total );
+		print $this->term->color( 1 ) . "Passed $success of $total tests ($ratio)... ";
+		if( $success == $total ) {
+			print $this->term->color( 32 ) . "ALL TESTS PASSED!";
+		} else {
+			$failed = $total - $success ;
+			print $this->term->color( 31 ) . "$failed tests failed!";
+		}
+		print $this->term->reset() . "\n";
+		return ($success == $total);
+	}
+}
+
+class DbTestRecorder extends TestRecorder  {
+	protected $db;      ///< Database connection to the main DB
+	protected $curRun;  ///< run ID number for the current run
+	protected $prevRun; ///< run ID number for the previous run, if any
+
+	function __construct( $term ) {
+		parent::__construct( $term );
+		$this->db = wfGetDB( DB_MASTER );
+	}
+
+	/**
+	 * Set up result recording; insert a record for the run with the date
+	 * and all that fun stuff
+	 */
+	function start() {
+		parent::start();
+
+		$this->db->begin();
+
+		if( ! $this->db->tableExists( 'testrun' ) or ! $this->db->tableExists( 'testitem') ) {
+			print "WARNING> `testrun` table not found in database. Trying to create table.\n";
+			dbsource( 'testRunner.sql',  $this->db );
+			echo "OK, resuming.\n";
+		}
+
+		// We'll make comparisons against the previous run later...
+		$this->prevRun = $this->db->selectField( 'testrun', 'MAX(tr_id)' );
+
+		$this->db->insert( 'testrun',
+			array(
+				'tr_date'        => $this->db->timestamp(),
+				'tr_mw_version'  => SpecialVersion::getVersion(),
+				'tr_php_version' => phpversion(),
+				'tr_db_version'  => $this->db->getServerVersion(),
+				'tr_uname'       => php_uname()
+			),
+			__METHOD__ );
+		$this->curRun = $this->db->insertId();
+	}
+
+	/**
+	 * Record an individual test item's success or failure to the db
+	 * @param string $test
+	 * @param bool $result
+	 */
+	function record( $test, $result ) {
+		parent::record( $test, $result );
+		$this->db->insert( 'testitem',
+			array(
+				'ti_run'     => $this->curRun,
+				'ti_name'    => $test,
+				'ti_success' => $result ? 1 : 0,
+			),
+			__METHOD__ );
+	}
+
+	/**
+	 * Commit transaction and clean up for result recording
+	 */
+	function end() {
+		$this->db->commit();
+		parent::end();
+	}
+
+	function report() {
+		if( $this->prevRun ) {
+			$table = array(
+				array( 'previously failing test(s) now PASSING! :)', 0, 1 ),
+				array( 'previously PASSING test(s) removed o_O', 1, null ),
+				array( 'new PASSING test(s) :)', null, 1 ),
+
+				array( 'previously passing test(s) now FAILING! :(', 1, 0 ),
+				array( 'previously FAILING test(s) removed O_o', 0, null ),
+				array( 'new FAILING test(s) :(', null, 0 ),
+				array( 'still FAILING test(s) :(', 0, 0 ),
+			);
+			foreach( $table as $criteria ) {
+				list( $label, $before, $after ) = $criteria;
+				$differences = $this->compareResult( $before, $after );
+				if( $differences ) {
+					$count = count($differences);
+					printf( "\n%4d %s\n", $count, $label );
+					foreach ($differences as $differing_test_name => $statusInfo) {
+						print "      * $differing_test_name  [$statusInfo]\n";
+					}
+				}
+			}
+		} else {
+			print "No previous test runs to compare against.\n";
+		}
+		print "\n";
+		parent::report();
+	}
+
+	/**
+	 ** Returns an array of the test names with changed results, based on the specified
+	 ** before/after criteria.
+	 */
+	private function compareResult( $before, $after ) {
+		$testitem = $this->db->tableName( 'testitem' );
+		$prevRun = intval( $this->prevRun );
+		$curRun = intval( $this->curRun );
+		$prevStatus = $this->condition( $before );
+		$curStatus = $this->condition( $after );
+
+		// note: requires mysql >= ver 4.1 for subselects
+		if( is_null( $after ) ) {
+			$sql = "
+				select prev.ti_name as t from $testitem as prev
+					where prev.ti_run=$prevRun and
+						prev.ti_success $prevStatus and
+						(select current.ti_success from $testitem as current
+							where current.ti_run=$curRun
+								and prev.ti_name=current.ti_name) $curStatus";
+		} else {
+			$sql = "
+				select current.ti_name as t from $testitem as current 
+					where current.ti_run=$curRun and
+						current.ti_success $curStatus and
+						(select prev.ti_success from $testitem as prev
+							where prev.ti_run=$prevRun
+								and prev.ti_name=current.ti_name) $prevStatus";
+		}
+		$result = $this->db->query( $sql, __METHOD__ );
+		$retval = array();
+		while ($row = $this->db->fetchObject( $result )) {
+			$testname = $row->t;
+			$retval[$testname] = $this->getTestStatusInfo( $testname, $after, $curRun );
+		}
+		$this->db->freeResult( $result );
+		return $retval;
+	}
+
+	/**
+	 ** Returns a string giving information about when a test last had a status change.
+	 ** Could help to track down when regressions were introduced, as distinct from tests
+	 ** which have never passed (which are more change requests than regressions).
+	 */
+	private function getTestStatusInfo($testname, $after, $curRun) {
+
+		// If we're looking at a test that has just been removed, then say when it first appeared.
+		if ( is_null( $after ) ) {
+			$changedRun = $this->db->selectField ( 'testitem',
+												   'MIN(ti_run)',
+												   array( 'ti_name' => $testname ),
+												   __METHOD__ );
+			$appear = $this->db->selectRow ( 'testrun',
+											 array( 'tr_date', 'tr_mw_version' ),
+											 array( 'tr_id' => $changedRun ),
+											 __METHOD__ );
+			return "First recorded appearance: "
+			       . date( "d-M-Y H:i:s",  strtotime ( $appear->tr_date ) )
+			       .  ", " . $appear->tr_mw_version;
+		}
+
+		// Otherwise, this test has previous recorded results.
+		// See when this test last had a different result to what we're seeing now.
+		$changedRun = $this->db->selectField ( 'testitem',
+											   'MAX(ti_run)',
+											   array( 
+											       'ti_name'    => $testname,
+											       'ti_success' => ($after ? "0" : "1"),
+											       "ti_run != " . $this->db->addQuotes ( $curRun )
+												), 
+												__METHOD__ );
+
+		// If no record of ever having had a different result.
+		if ( is_null ( $changedRun ) ) {
+			if ($after == "0") {
+				return "Has never passed";
+			} else {
+				return "Has never failed";
+			}
+		}
+
+		// Otherwise, we're looking at a test whose status has changed.
+		// (i.e. it used to work, but now doesn't; or used to fail, but is now fixed.)
+		// In this situation, give as much info as we can as to when it changed status.
+		$pre  = $this->db->selectRow ( 'testrun',
+										array( 'tr_date', 'tr_mw_version' ),
+										array( 'tr_id' => $changedRun ),
+										__METHOD__ );
+		$post = $this->db->selectRow ( 'testrun',
+										array( 'tr_date', 'tr_mw_version' ),
+										array( "tr_id > " . $this->db->addQuotes ( $changedRun) ),
+										__METHOD__,
+										array( "LIMIT" => 1, "ORDER BY" => 'tr_id' )
+									 );
+
+		return ( $after == "0" ? "Introduced" : "Fixed" ) . " between "
+				. date( "d-M-Y H:i:s",  strtotime ( $pre->tr_date ) ) .  ", " . $pre->tr_mw_version
+				. " and "
+				. date( "d-M-Y H:i:s",  strtotime ( $post->tr_date  ) ) .  ", " . $post->tr_mw_version ;
+	}
+
+	/**
+	 ** Helper function for compareResult() database querying.
+	 */
+	private function condition( $value ) {
+		if( is_null( $value ) ) {
+			return 'IS NULL';
+		} else {
+			return '=' . intval( $value );
+		}
+	}
+
+}
+
+class DbTestPreviewer extends DbTestRecorder  {
+	/**
+	 * Commit transaction and clean up for result recording
+	 */
+	function end() {
+		$this->db->rollback();
+		TestRecorder::end();
+	}
+}
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/parserTests.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/parserTests.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/parserTests.php	(revision 1280)
@@ -0,0 +1,71 @@
+<?php
+# Copyright (C) 2004 Brion Vibber <brion@pobox.com>
+# http://www.mediawiki.org/
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+# http://www.gnu.org/copyleft/gpl.html
+
+/**
+ * @addtogroup Maintenance
+ */
+
+/** */
+require('parserTests.inc');
+
+if( isset( $options['help'] ) ) {
+    echo <<<ENDS
+MediaWiki $wgVersion parser test suite
+Usage: php parserTests.php [--quick] [--quiet] [--show-output]
+                           [--color[=(yes|no)]]
+                           [--regex=<expression>] [--file=<testfile>]
+                           [--record] [--compare]
+                           [--help]
+Options:
+  --quick          Suppress diff output of failed tests
+  --quiet          Suppress notification of passed tests (shows only failed tests)
+  --show-output    Show expected and actual output
+  --color          Override terminal detection and force color output on or off
+                   use wgCommandLineDarkBg = true; if your term is dark 
+  --regex          Only run tests whose descriptions which match given regex
+  --file           Run test cases from a custom file instead of parserTests.txt
+  --record         Record tests in database
+  --compare        Compare with recorded results, without updating the database.
+  --help           Show this help message
+
+
+ENDS;
+    exit( 0 );
+}
+
+# There is a convention that the parser should never
+# refer to $wgTitle directly, but instead use the title
+# passed to it.
+$wgTitle = Title::newFromText( 'Parser test script do not use' );
+$tester = new ParserTest();
+
+if( isset( $options['file'] ) ) {
+	$files = array( $options['file'] );
+} else {
+	// Default parser tests and any set from extensions or local config
+	$files = $wgParserTestFiles;
+}
+
+# Print out software version to assist with locating regressions
+$version = SpecialVersion::getVersion();
+echo( "This is MediaWiki version {$version}.\n\n" );
+$ok = $tester->runTestsFromFiles( $files );
+
+exit ($ok ? 0 : -1);
+?>
Index: /MediaWiki/branches/1.11/maintenance/parserTests.txt
===================================================================
--- /MediaWiki/branches/1.11/maintenance/parserTests.txt	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/parserTests.txt	(revision 1280)
@@ -0,0 +1,6580 @@
+﻿# MediaWiki Parser test cases
+# Some taken from http://meta.wikimedia.org/wiki/Parser_testing
+# All (C) their respective authors and released under the GPL
+#
+# The syntax should be fairly self-explanatory.
+#
+# Currently supported test options:
+#	One of the following three:
+#
+#	(default)	generate HTML output
+# 	pst 		apply pre-save transform
+#	msg 		apply message transform
+#
+#	Plus any combination of these:
+#
+#	cat		add category links
+#	ill		add inter-language links
+#	subpage		enable subpages (disabled by default)
+#	noxml		don't check for XML well formdness
+#	title=[[XXX]]	run test using article title XXX
+# 	language=XXX	set content language to XXX for this test
+# 	variant=XXX  	set the variant of language for this test (eg zh-tw)
+#	disabled	do not run test
+#
+# For testing purposes, temporary articles can created:
+# !!article / NAMESPACE:TITLE / !!text / ARTICLE TEXT / !!endarticle
+# where '/' denotes a newline.
+
+# This is the standard article assumed to exist.
+!! article
+Main Page
+!! text
+blah blah
+!! endarticle
+
+###
+### Basic tests
+###
+!! test
+Blank input
+!! input
+!! result
+!! end
+
+
+!! test
+Simple paragraph
+!! input
+This is a simple paragraph.
+!! result
+<p>This is a simple paragraph.
+</p>
+!! end
+
+!! test
+Simple list
+!! input
+* Item 1
+* Item 2
+!! result
+<ul><li> Item 1
+</li><li> Item 2
+</li></ul>
+
+!! end
+
+!! test
+Italics and bold
+!! input
+* plain
+* plain''italic''plain
+* plain''italic''plain''italic''plain
+* plain'''bold'''plain
+* plain'''bold'''plain'''bold'''plain
+* plain''italic''plain'''bold'''plain
+* plain'''bold'''plain''italic''plain
+* plain''italic'''bold-italic'''italic''plain
+* plain'''bold''bold-italic''bold'''plain
+* plain'''''bold-italic'''italic''plain
+* plain'''''bold-italic''bold'''plain
+* plain''italic'''bold-italic'''''plain
+* plain'''bold''bold-italic'''''plain
+* plain l'''italic''plain
+!! result
+<ul><li> plain
+</li><li> plain<i>italic</i>plain
+</li><li> plain<i>italic</i>plain<i>italic</i>plain
+</li><li> plain<b>bold</b>plain
+</li><li> plain<b>bold</b>plain<b>bold</b>plain
+</li><li> plain<i>italic</i>plain<b>bold</b>plain
+</li><li> plain<b>bold</b>plain<i>italic</i>plain
+</li><li> plain<i>italic<b>bold-italic</b>italic</i>plain
+</li><li> plain<b>bold<i>bold-italic</i>bold</b>plain
+</li><li> plain<i><b>bold-italic</b>italic</i>plain
+</li><li> plain<b><i>bold-italic</i>bold</b>plain
+</li><li> plain<i>italic<b>bold-italic</b></i>plain
+</li><li> plain<b>bold<i>bold-italic</i></b>plain
+</li><li> plain l'<i>italic</i>plain
+</li></ul>
+
+!! end
+
+###
+### <nowiki> test cases
+###
+
+!! test
+<nowiki> unordered list
+!! input
+<nowiki>* This is not an unordered list item.</nowiki>
+!! result
+<p>* This is not an unordered list item.
+</p>
+!! end
+
+!! test
+<nowiki> spacing
+!! input
+<nowiki>Lorem ipsum dolor
+
+sed abit.
+  sed nullum.
+
+:and a colon
+</nowiki>
+!! result
+<p>Lorem ipsum dolor
+
+sed abit.
+  sed nullum.
+
+:and a colon
+
+</p>
+!! end
+
+!! test
+nowiki 3
+!! input
+:There is not nowiki.
+:There is <nowiki>nowiki</nowiki>.
+
+#There is not nowiki.
+#There is <nowiki>nowiki</nowiki>.
+
+*There is not nowiki.
+*There is <nowiki>nowiki</nowiki>.
+!! result
+<dl><dd>There is not nowiki.
+</dd><dd>There is nowiki.
+</dd></dl>
+<ol><li>There is not nowiki.
+</li><li>There is nowiki.
+</li></ol>
+<ul><li>There is not nowiki.
+</li><li>There is nowiki.
+</li></ul>
+
+!! end
+
+
+###
+### Comments
+###
+!! test
+Comment test 1
+!! input
+<!-- comment 1 --> asdf
+<!-- comment 2 -->
+!! result
+<pre>asdf
+</pre>
+
+!! end
+
+!! test
+Comment test 2
+!! input
+asdf
+<!-- comment 1 -->
+jkl
+!! result
+<p>asdf
+jkl
+</p>
+!! end
+
+!! test
+Comment test 3
+!! input
+asdf
+<!-- comment 1 -->
+<!-- comment 2 -->
+jkl
+!! result
+<p>asdf
+jkl
+</p>
+!! end
+
+!! test
+Comment test 4
+!! input
+asdf<!-- comment 1 -->jkl
+!! result
+<p>asdfjkl
+</p>
+!! end
+
+!! test
+Comment spacing
+!! input
+a
+ <!-- foo --> b <!-- bar -->
+c
+!! result
+<p>a
+</p>
+<pre> b 
+</pre>
+<p>c
+</p>
+!! end
+
+!! test
+Comment whitespace
+!! input
+<!-- returns a single newline, not nothing, since the newline after > is not stripped -->
+!! result
+
+!! end
+
+!! test
+Comment semantics and delimiters
+!! input
+<!-- --><!----><!-----><!------>
+!! result
+
+!! end
+
+!! test
+Comment semantics and delimiters, redux
+!! input
+<!-- In SGML every "foo" here would actually show up in the text -- foo -- bar
+-- foo -- funky huh? ... -->
+!! result
+
+!! end
+
+!! test
+Comment semantics and delimiters: directors cut
+!! input
+<!-- ... However we like to keep things simple and somewhat XML-ish so we eat
+everything starting with < followed by !-- until the first -- and > we see,
+that wouldn't be valid XML however, since in XML -- has to terminate a comment
+-->-->
+!! result
+<p>--&gt;
+</p>
+!! end
+
+!! test
+Comment semantics: nesting
+!! input
+<!--<!-- no, we're not going to do anything fancy here -->-->
+!! result
+<p>--&gt;
+</p>
+!! end
+
+!! test
+Comment semantics: unclosed comment at end
+!! input
+<!--This comment will run out to the end of the document
+!! result
+
+!! end
+
+
+###
+### Preformatted text
+###
+!! test
+Preformatted text
+!! input
+ This is some
+ Preformatted text
+ With ''italic''
+ And '''bold'''
+ And a [[Main Page|link]]
+!! result
+<pre>This is some
+Preformatted text
+With <i>italic</i>
+And <b>bold</b>
+And a <a href="/wiki/Main_Page" title="Main Page">link</a>
+</pre>
+!! end
+
+!! test
+<pre> with <nowiki> inside (compatibility with 1.6 and earlier)
+!! input
+<pre><nowiki>
+<b>
+<cite>
+<em>
+</nowiki></pre>
+!! result
+<pre>
+&lt;b&gt;
+&lt;cite&gt;
+&lt;em&gt;
+</pre>
+
+!! end
+
+!! test
+Regression with preformatted in <center>
+!! input
+<center>
+ Blah
+</center>
+!! result
+<center>
+<pre>Blah
+</pre>
+</center>
+
+!! end
+
+!! test
+<pre> with attributes (bug 3202)
+!! input
+<pre style="background: blue; color:white">Bluescreen of WikiDeath</pre>
+!! result
+<pre style="background: blue; color:white">Bluescreen of WikiDeath</pre>
+
+!! end
+
+!! test
+<pre> with width attribute (bug 3202)
+!! input
+<pre width="8">Narrow screen goodies</pre>
+!! result
+<pre width="8">Narrow screen goodies</pre>
+
+!! end
+
+!! test
+<pre> with forbidden attribute (bug 3202)
+!! input
+<pre width="8" onmouseover="alert(document.cookie)">Narrow screen goodies</pre>
+!! result
+<pre width="8">Narrow screen goodies</pre>
+
+!! end
+
+!! test
+<pre> with forbidden attribute values (bug 3202)
+!! input
+<pre width="8" style="border-width: expression(alert(document.cookie))">Narrow screen goodies</pre>
+!! result
+<pre width="8">Narrow screen goodies</pre>
+
+!! end
+
+###
+### Definition lists
+###
+!! test
+Simple definition
+!! input
+; name : Definition
+!! result
+<dl><dt> name&nbsp;</dt><dd> Definition
+</dd></dl>
+
+!! end
+
+!! test
+Definition list for indentation only
+!! input
+: Indented text
+!! result
+<dl><dd> Indented text
+</dd></dl>
+
+!! end
+
+!! test
+Definition list with no space
+!! input
+;name:Definition
+!! result
+<dl><dt>name</dt><dd>Definition
+</dd></dl>
+
+!!end
+
+!! test
+Definition list with URL link
+!! input
+; http://example.com/ : definition
+!! result
+<dl><dt> <a href="http://example.com/" class="external free" title="http://example.com/" rel="nofollow">http://example.com/</a>&nbsp;</dt><dd> definition
+</dd></dl>
+
+!! end
+
+!! test
+Definition list with bracketed URL link
+!! input
+;[http://www.example.com/ Example]:Something about it
+!! result
+<dl><dt><a href="http://www.example.com/" class="external text" title="http://www.example.com/" rel="nofollow">Example</a></dt><dd>Something about it
+</dd></dl>
+
+!! end
+
+!! test
+Definition list with wikilink containing colon
+!! input
+; [[Help:FAQ]]: The least-read page on Wikipedia
+!! result
+<dl><dt> <a href="/index.php?title=Help:FAQ&amp;action=edit" class="new" title="Help:FAQ">Help:FAQ</a></dt><dd> The least-read page on Wikipedia
+</dd></dl>
+
+!! end
+
+# At Brion's and JeLuF's insistence... :)
+!! test
+Definition list with news link containing colon
+!! input
+;  news:alt.wikipedia.rox: This isn't even a real newsgroup!
+!! result
+<dl><dt>  <a href="news:alt.wikipedia.rox" class="external free" title="news:alt.wikipedia.rox" rel="nofollow">news:alt.wikipedia.rox</a></dt><dd> This isn't even a real newsgroup!
+</dd></dl>
+
+!! end
+
+!! test
+Malformed definition list with colon
+!! input
+;  news:alt.wikipedia.rox -- don't crash or enter an infinite loop
+!! result
+<dl><dt>  <a href="news:alt.wikipedia.rox" class="external free" title="news:alt.wikipedia.rox" rel="nofollow">news:alt.wikipedia.rox</a> -- don't crash or enter an infinite loop
+</dt></dl>
+
+!! end
+
+!! test
+Definition lists: colon in external link text
+!! input
+; [http://www.wikipedia2.org/ Wikipedia : The Next Generation]: OK, I made that up
+!! result
+<dl><dt> <a href="http://www.wikipedia2.org/" class="external text" title="http://www.wikipedia2.org/" rel="nofollow">Wikipedia&nbsp;: The Next Generation</a></dt><dd> OK, I made that up
+</dd></dl>
+
+!! end
+
+!! test
+Definition lists: colon in HTML attribute
+!! input
+;<b style="display: inline">bold</b>
+!! result
+<dl><dt><b style="display: inline">bold</b>
+</dt></dl>
+
+!! end
+
+
+!! test
+Definition lists: self-closed tag
+!! input
+;one<br/>two : two-line fun
+!! result
+<dl><dt>one<br />two&nbsp;</dt><dd> two-line fun
+</dd></dl>
+
+!! end
+
+
+###
+### External links
+###
+!! test
+External links: non-bracketed
+!! input
+Non-bracketed: http://example.com
+!! result
+<p>Non-bracketed: <a href="http://example.com" class="external free" title="http://example.com" rel="nofollow">http://example.com</a>
+</p>
+!! end
+
+!! test
+External links: numbered
+!! input
+Numbered: [http://example.com]
+Numbered: [http://example.net]
+Numbered: [http://example.org]
+!! result
+<p>Numbered: <a href="http://example.com" class="external autonumber" title="http://example.com" rel="nofollow">[1]</a>
+Numbered: <a href="http://example.net" class="external autonumber" title="http://example.net" rel="nofollow">[2]</a>
+Numbered: <a href="http://example.org" class="external autonumber" title="http://example.org" rel="nofollow">[3]</a>
+</p>
+!!end
+
+!! test
+External links: specified text
+!! input
+Specified text: [http://example.com link]
+!! result
+<p>Specified text: <a href="http://example.com" class="external text" title="http://example.com" rel="nofollow">link</a>
+</p>
+!!end
+
+!! test
+External links: trail
+!! input
+Linktrails should not work for external links: [http://example.com link]s
+!! result
+<p>Linktrails should not work for external links: <a href="http://example.com" class="external text" title="http://example.com" rel="nofollow">link</a>s
+</p>
+!! end
+
+!! test
+External links: dollar sign in URL
+!! input
+http://example.com/1$2345
+!! result
+<p><a href="http://example.com/1$2345" class="external free" title="http://example.com/1$2345" rel="nofollow">http://example.com/1$2345</a>
+</p>
+!! end
+
+!! test
+External links: dollar sign in URL (named)
+!! input
+[http://example.com/1$2345]
+!! result
+<p><a href="http://example.com/1$2345" class="external autonumber" title="http://example.com/1$2345" rel="nofollow">[1]</a>
+</p>
+!!end
+
+!! test
+External links: open square bracket forbidden in URL (bug 4377)
+!! input
+http://example.com/1[2345
+!! result
+<p><a href="http://example.com/1" class="external free" title="http://example.com/1" rel="nofollow">http://example.com/1</a>[2345
+</p>
+!! end
+
+!! test
+External links: open square bracket forbidden in URL (named) (bug 4377)
+!! input
+[http://example.com/1[2345]
+!! result
+<p><a href="http://example.com/1" class="external text" title="http://example.com/1" rel="nofollow">[2345</a>
+</p>
+!!end
+
+!! test
+External links: nowiki in URL link text (bug 6230)
+!!input
+[http://example.com/ <nowiki>''example site''</nowiki>]
+!! result
+<p><a href="http://example.com/" class="external text" title="http://example.com/" rel="nofollow">''example site''</a>
+</p>
+!! end
+
+!! test
+External links: newline forbidden in text (bug 6230 regression check)
+!! input
+[http://example.com/ first
+second]
+!! result
+<p>[<a href="http://example.com/" class="external free" title="http://example.com/" rel="nofollow">http://example.com/</a> first
+second]
+</p>
+!!end
+
+!! test
+External image
+!! input
+External image: http://meta.wikimedia.org/upload/f/f1/Ncwikicol.png
+!! result
+<p>External image: <img src="http://meta.wikimedia.org/upload/f/f1/Ncwikicol.png" alt="Ncwikicol.png" />
+</p>
+!! end
+
+!! test
+External image from https
+!! input
+External image from https: https://meta.wikimedia.org/upload/f/f1/Ncwikicol.png
+!! result
+<p>External image from https: <img src="https://meta.wikimedia.org/upload/f/f1/Ncwikicol.png" alt="Ncwikicol.png" />
+</p>
+!! end
+
+!! test
+Link to non-http image, no img tag
+!! input
+Link to non-http image, no img tag: ftp://example.com/test.jpg
+!! result
+<p>Link to non-http image, no img tag: <a href="ftp://example.com/test.jpg" class="external free" title="ftp://example.com/test.jpg" rel="nofollow">ftp://example.com/test.jpg</a>
+</p>
+!! end
+
+!! test
+External links: terminating separator
+!! input
+Terminating separator: http://example.com/thing,
+!! result
+<p>Terminating separator: <a href="http://example.com/thing" class="external free" title="http://example.com/thing" rel="nofollow">http://example.com/thing</a>,
+</p>
+!! end
+
+!! test
+External links: intervening separator
+!! input
+Intervening separator: http://example.com/1,2,3
+!! result
+<p>Intervening separator: <a href="http://example.com/1,2,3" class="external free" title="http://example.com/1,2,3" rel="nofollow">http://example.com/1,2,3</a>
+</p>
+!! end
+
+!! test
+External links: old bug with URL in query
+!! input
+Old bug with URL in query: [http://example.com/thing?url=http://example.com link]
+!! result
+<p>Old bug with URL in query: <a href="http://example.com/thing?url=http://example.com" class="external text" title="http://example.com/thing?url=http://example.com" rel="nofollow">link</a>
+</p>
+!! end
+
+!! test
+External links: old URL-in-URL bug, mixed protocols
+!! input
+And again with mixed protocols: [ftp://example.com?url=http://example.com link]
+!! result
+<p>And again with mixed protocols: <a href="ftp://example.com?url=http://example.com" class="external text" title="ftp://example.com?url=http://example.com" rel="nofollow">link</a>
+</p>
+!!end
+
+!! test
+External links: URL in text
+!! input
+URL in text: [http://example.com http://example.com]
+!! result
+<p>URL in text: <a href="http://example.com" class="external free" title="http://example.com" rel="nofollow">http://example.com</a>
+</p>
+!! end
+
+!! test
+External links: Clickable images
+!! input
+ja-style clickable images: [http://example.com http://meta.wikimedia.org/upload/f/f1/Ncwikicol.png]
+!! result
+<p>ja-style clickable images: <a href="http://example.com" class="external text" title="http://example.com" rel="nofollow"><img src="http://meta.wikimedia.org/upload/f/f1/Ncwikicol.png" alt="Ncwikicol.png" /></a>
+</p>
+!!end
+
+!! test
+External links: raw ampersand
+!! input
+Old &amp; use: http://x&y
+!! result
+<p>Old &amp; use: <a href="http://x&amp;y" class="external free" title="http://x&amp;y" rel="nofollow">http://x&amp;y</a>
+</p>
+!! end
+
+!! test
+External links: encoded ampersand
+!! input
+Old &amp; use: http://x&amp;y
+!! result
+<p>Old &amp; use: <a href="http://x&amp;y" class="external free" title="http://x&amp;y" rel="nofollow">http://x&amp;y</a>
+</p>
+!! end
+
+!! test
+External links: encoded equals (bug 6102)
+!! input
+http://example.com/?foo&#61;bar
+!! result
+<p><a href="http://example.com/?foo=bar" class="external free" title="http://example.com/?foo=bar" rel="nofollow">http://example.com/?foo=bar</a>
+</p>
+!! end
+
+!! test
+External links: [raw ampersand]
+!! input
+Old &amp; use: [http://x&y]
+!! result
+<p>Old &amp; use: <a href="http://x&amp;y" class="external autonumber" title="http://x&amp;y" rel="nofollow">[1]</a>
+</p>
+!! end
+
+!! test
+External links: [encoded ampersand]
+!! input
+Old &amp; use: [http://x&amp;y]
+!! result
+<p>Old &amp; use: <a href="http://x&amp;y" class="external autonumber" title="http://x&amp;y" rel="nofollow">[1]</a>
+</p>
+!! end
+
+!! test
+External links: [encoded equals] (bug 6102)
+!! input
+[http://example.com/?foo&#61;bar]
+!! result
+<p><a href="http://example.com/?foo=bar" class="external autonumber" title="http://example.com/?foo=bar" rel="nofollow">[1]</a>
+</p>
+!! end
+
+!! test
+External links: [IDN ignored character reference in hostname; strip it right off]
+!! input
+[http://e&zwnj;xample.com/]
+!! result
+<p><a href="http://example.com/" class="external autonumber" title="http://example.com/" rel="nofollow">[1]</a>
+</p>
+!! end
+
+!! test
+External links: IDN ignored character reference in hostname; strip it right off
+!! input
+http://e&zwnj;xample.com/
+!! result
+<p><a href="http://example.com/" class="external free" title="http://example.com/" rel="nofollow">http://example.com/</a>
+</p>
+!! end
+
+!! test
+External links: www.jpeg.org (bug 554)
+!! input
+http://www.jpeg.org
+!!result
+<p><a href="http://www.jpeg.org" class="external free" title="http://www.jpeg.org" rel="nofollow">http://www.jpeg.org</a>
+</p>
+!! end
+
+!! test
+External links: URL within URL (original bug 2)
+!! input
+[http://www.unausa.org/newindex.asp?place=http://www.unausa.org/programs/mun.asp]
+!! result
+<p><a href="http://www.unausa.org/newindex.asp?place=http://www.unausa.org/programs/mun.asp" class="external autonumber" title="http://www.unausa.org/newindex.asp?place=http://www.unausa.org/programs/mun.asp" rel="nofollow">[1]</a>
+</p>
+!! end
+
+!! test
+BUG 361: URL inside bracketed URL
+!! input
+[http://www.example.com/foo http://www.example.com/bar]
+!! result
+<p><a href="http://www.example.com/foo" class="external text" title="http://www.example.com/foo" rel="nofollow">http://www.example.com/bar</a>
+</p>
+!! end
+
+!! test
+BUG 361: URL within URL, not bracketed
+!! input
+http://www.example.com/foo?=http://www.example.com/bar
+!! result
+<p><a href="http://www.example.com/foo?=http://www.example.com/bar" class="external free" title="http://www.example.com/foo?=http://www.example.com/bar" rel="nofollow">http://www.example.com/foo?=http://www.example.com/bar</a>
+</p>
+!! end
+
+!! test
+BUG 289: ">"-token in URL-tail
+!! input
+http://www.example.com/<hello>
+!! result
+<p><a href="http://www.example.com/" class="external free" title="http://www.example.com/" rel="nofollow">http://www.example.com/</a>&lt;hello&gt;
+</p>
+!!end
+
+!! test
+BUG 289: literal ">"-token in URL-tail
+!! input
+http://www.example.com/<b>html</b>
+!! result
+<p><a href="http://www.example.com/" class="external free" title="http://www.example.com/" rel="nofollow">http://www.example.com/</a><b>html</b>
+</p>
+!!end
+
+!! test
+BUG 289: ">"-token in bracketed URL
+!! input
+[http://www.example.com/<hello> stuff]
+!! result
+<p><a href="http://www.example.com/" class="external text" title="http://www.example.com/" rel="nofollow">&lt;hello&gt; stuff</a>
+</p>
+!!end
+
+!! test
+BUG 289: literal ">"-token in bracketed URL
+!! input
+[http://www.example.com/<b>html</b> stuff]
+!! result
+<p><a href="http://www.example.com/" class="external text" title="http://www.example.com/" rel="nofollow"><b>html</b> stuff</a>
+</p>
+!!end
+
+!! test
+BUG 289: literal double quote at end of URL
+!! input
+http://www.example.com/"hello"
+!! result
+<p><a href="http://www.example.com/" class="external free" title="http://www.example.com/" rel="nofollow">http://www.example.com/</a>"hello"
+</p>
+!!end
+
+!! test
+BUG 289: literal double quote in bracketed URL
+!! input
+[http://www.example.com/"hello" stuff]
+!! result
+<p><a href="http://www.example.com/" class="external text" title="http://www.example.com/" rel="nofollow">"hello" stuff</a>
+</p>
+!!end
+
+!! test
+External links: invalid character
+Fixme: the missing char seems to have gone missing
+!! options
+disabled
+!! input
+[http://www.example.com  test]
+!! result
+<p>[<a href="http://www.example.com" class="external free" title="http://www.example.com" rel="nofollow">http://www.example.com</a>  test]
+</p>
+!! end
+
+!! test
+External links: multiple legal whitespace is fine, Magnus. Don't break it please. (bug 5081)
+!! input
+[http://www.example.com  test]
+!! result
+<p><a href="http://www.example.com" class="external text" title="http://www.example.com" rel="nofollow">test</a>
+</p>
+!! end
+
+!! test
+External links: wiki links within external link (Bug 3695)
+!! input
+[http://example.com [[wikilink]] embedded in ext link]
+!! result
+<p><a href="http://example.com" class="external text" title="http://example.com" rel="nofollow"></a><a href="/index.php?title=Wikilink&amp;action=edit" class="new" title="Wikilink">wikilink</a><a href="http://example.com" class="external text" title="http://example.com" rel="nofollow"> embedded in ext link</a>
+</p>
+!! end
+
+!! test
+BUG 787: Links with one slash after the url protocol are invalid
+!! input
+http:/example.com
+
+[http:/example.com title]
+!! result
+<p>http:/example.com
+</p><p>[http:/example.com title]
+</p>
+!! end
+
+!! test
+Bug 2702: Mismatched <i>, <b> and <a> tags are invalid
+!! input
+''[http://example.com text'']
+[http://example.com '''text]'''
+''Something [http://example.com in italic'']
+''Something [http://example.com mixed''''', even bold]'''
+'''''Now [http://example.com both''''']
+!! result
+<p><a href="http://example.com" class="external text" title="http://example.com" rel="nofollow"><i>text</i></a>
+<a href="http://example.com" class="external text" title="http://example.com" rel="nofollow"><b>text</b></a>
+<i>Something </i><a href="http://example.com" class="external text" title="http://example.com" rel="nofollow"><i>in italic</i></a>
+<i>Something </i><a href="http://example.com" class="external text" title="http://example.com" rel="nofollow"><i>mixed</i><b>, even bold</b></a>
+<i><b>Now </b></i><a href="http://example.com" class="external text" title="http://example.com" rel="nofollow"><i><b>both</b></i></a>
+</p>
+!! end
+
+
+!! test
+Bug 4781: %26 in URL
+!! input
+http://www.example.com/?title=AT%26T
+!! result
+<p><a href="http://www.example.com/?title=AT%26T" class="external free" title="http://www.example.com/?title=AT%26T" rel="nofollow">http://www.example.com/?title=AT%26T</a>
+</p>
+!! end
+
+!! test
+Bug 4781, 5267: %26 in URL
+!! input
+http://www.example.com/?title=100%25_Bran
+!! result
+<p><a href="http://www.example.com/?title=100%25_Bran" class="external free" title="http://www.example.com/?title=100%25_Bran" rel="nofollow">http://www.example.com/?title=100%25_Bran</a>
+</p>
+!! end
+
+!! test
+Bug 4781, 5267: %28, %29 in URL
+!! input
+http://www.example.com/?title=Ben-Hur_%281959_film%29
+!! result
+<p><a href="http://www.example.com/?title=Ben-Hur_%281959_film%29" class="external free" title="http://www.example.com/?title=Ben-Hur_%281959_film%29" rel="nofollow">http://www.example.com/?title=Ben-Hur_%281959_film%29</a>
+</p>
+!! end
+
+
+!! test
+Bug 4781: %26 in autonumber URL
+!! input
+[http://www.example.com/?title=AT%26T]
+!! result
+<p><a href="http://www.example.com/?title=AT%26T" class="external autonumber" title="http://www.example.com/?title=AT%26T" rel="nofollow">[1]</a>
+</p>
+!! end
+
+!! test
+Bug 4781, 5267: %26 in autonumber URL
+!! input
+[http://www.example.com/?title=100%25_Bran]
+!! result
+<p><a href="http://www.example.com/?title=100%25_Bran" class="external autonumber" title="http://www.example.com/?title=100%25_Bran" rel="nofollow">[1]</a>
+</p>
+!! end
+
+!! test
+Bug 4781, 5267: %28, %29 in autonumber URL
+!! input
+[http://www.example.com/?title=Ben-Hur_%281959_film%29]
+!! result
+<p><a href="http://www.example.com/?title=Ben-Hur_%281959_film%29" class="external autonumber" title="http://www.example.com/?title=Ben-Hur_%281959_film%29" rel="nofollow">[1]</a>
+</p>
+!! end
+
+
+!! test
+Bug 4781: %26 in bracketed URL
+!! input
+[http://www.example.com/?title=AT%26T link]
+!! result
+<p><a href="http://www.example.com/?title=AT%26T" class="external text" title="http://www.example.com/?title=AT%26T" rel="nofollow">link</a>
+</p>
+!! end
+
+!! test
+Bug 4781, 5267: %26 in bracketed URL
+!! input
+[http://www.example.com/?title=100%25_Bran link]
+!! result
+<p><a href="http://www.example.com/?title=100%25_Bran" class="external text" title="http://www.example.com/?title=100%25_Bran" rel="nofollow">link</a>
+</p>
+!! end
+
+!! test
+Bug 4781, 5267: %28, %29 in bracketed URL
+!! input
+[http://www.example.com/?title=Ben-Hur_%281959_film%29 link]
+!! result
+<p><a href="http://www.example.com/?title=Ben-Hur_%281959_film%29" class="external text" title="http://www.example.com/?title=Ben-Hur_%281959_film%29" rel="nofollow">link</a>
+</p>
+!! end
+
+!! test
+External link containing double-single-quotes in text '' (bug 4598 sanity check)
+!! input
+Some [http://example.com/ pretty ''italics'' and stuff]!
+!! result
+<p>Some <a href="http://example.com/" class="external text" title="http://example.com/" rel="nofollow">pretty <i>italics</i> and stuff</a>!
+</p>
+!! end
+
+!! test
+External link containing double-single-quotes in text embedded in italics (bug 4598 sanity check)
+!! input
+''Some [http://example.com/ pretty ''italics'' and stuff]!''
+!! result
+<p><i>Some </i><a href="http://example.com/" class="external text" title="http://example.com/" rel="nofollow"><i>pretty </i>italics<i> and stuff</i></a><i>!</i>
+</p>
+!! end
+
+!! test
+URL-encoding in URL functions (single parameter)
+!! input
+{{localurl:Some page|amp=&}}
+!! result
+<p>/index.php?title=Some_page&amp;amp=%26
+</p>
+!! end
+
+!! test
+URL-encoding in URL functions (multiple parameters)
+!! input
+{{localurl:Some page|q=?&amp=&}}
+!! result
+<p>/index.php?title=Some_page&amp;q=%3F&amp;amp=%26
+</p>
+!! end
+
+###
+### Quotes
+###
+
+!! test
+Quotes
+!! input
+Normal text. '''Bold text.''' Normal text. ''Italic text.''
+
+Normal text. '''''Bold italic text.''''' Normal text.
+!!result
+<p>Normal text. <b>Bold text.</b> Normal text. <i>Italic text.</i>
+</p><p>Normal text. <i><b>Bold italic text.</b></i> Normal text.
+</p>
+!! end
+
+
+!! test
+Unclosed and unmatched quotes
+!! input
+'''''Bold italic text '''with bold deactivated''' in between.'''''
+
+'''''Bold italic text ''with italic deactivated'' in between.'''''
+
+'''Bold text..
+
+..spanning two paragraphs (should not work).'''
+
+'''Bold tag left open
+
+''Italic tag left open
+
+Normal text.
+
+<!-- Unmatching number of opening, closing tags: -->
+'''This year''''s election ''should'' beat '''last year''''s.
+
+''Tom'''s car is bigger than ''Susan'''s.
+!! result
+<p><i><b>Bold italic text </b>with bold deactivated<b> in between.</b></i>
+</p><p><b><i>Bold italic text </i>with italic deactivated<i> in between.</i></b>
+</p><p><b>Bold text..</b>
+</p><p>..spanning two paragraphs (should not work).
+</p><p><b>Bold tag left open</b>
+</p><p><i>Italic tag left open</i>
+</p><p>Normal text.
+</p><p><b>This year'</b>s election <i>should</i> beat <b>last year'</b>s.
+</p><p><i>Tom<b>s car is bigger than </b></i><b>Susan</b>s.
+</p>
+!! end
+
+###
+### Tables
+###
+### some content taken from http://meta.wikimedia.org/wiki/MediaWiki_User%27s_Guide:_Using_tables
+###
+
+# This should not produce <table></table> as <table><tr><td></td></tr></table>
+# is the bare minimun required by the spec, see:
+# http://www.w3.org/TR/xhtml-modularization/dtd_module_defs.html#a_module_Basic_Tables
+!! test
+A table with no data.
+!! input
+{||}
+!! result
+!! end
+
+# A table with nothing but a caption is invalid XHTML, we might want to render
+# this as <p>caption</p>
+!! test
+A table with nothing but a caption
+!! input 
+{|
+|+ caption
+|}
+!! result
+<table>
+<caption> caption
+</caption><tr><td></td></tr></table>
+
+!! end
+
+!! test
+Simple table
+!! input
+{| 
+| 1 || 2
+|- 
+| 3 || 4
+|}
+!! result
+<table>
+<tr>
+<td> 1 </td><td> 2
+</td></tr>
+<tr>
+<td> 3 </td><td> 4
+</td></tr></table>
+
+!! end
+
+!! test
+Multiplication table
+!! input
+{| border="1" cellpadding="2"
+|+Multiplication table
+|-
+! &times; !! 1 !! 2 !! 3
+|-
+! 1
+| 1 || 2 || 3
+|-
+! 2
+| 2 || 4 || 6
+|-
+! 3
+| 3 || 6 || 9
+|-
+! 4
+| 4 || 8 || 12
+|-
+! 5
+| 5 || 10 || 15
+|}
+!! result
+<table border="1" cellpadding="2">
+<caption>Multiplication table
+</caption>
+<tr>
+<th> &times; </th><th> 1 </th><th> 2 </th><th> 3
+</th></tr>
+<tr>
+<th> 1
+</th><td> 1 </td><td> 2 </td><td> 3
+</td></tr>
+<tr>
+<th> 2
+</th><td> 2 </td><td> 4 </td><td> 6
+</td></tr>
+<tr>
+<th> 3
+</th><td> 3 </td><td> 6 </td><td> 9
+</td></tr>
+<tr>
+<th> 4
+</th><td> 4 </td><td> 8 </td><td> 12
+</td></tr>
+<tr>
+<th> 5
+</th><td> 5 </td><td> 10 </td><td> 15
+</td></tr></table>
+
+!! end
+
+!! test
+Table rowspan
+!! input
+{| align=right border=1
+| Cell 1, row 1 
+|rowspan=2| Cell 2, row 1 (and 2) 
+| Cell 3, row 1 
+|- 
+| Cell 1, row 2 
+| Cell 3, row 2 
+|}
+!! result
+<table align="right" border="1">
+<tr>
+<td> Cell 1, row 1
+</td><td rowspan="2"> Cell 2, row 1 (and 2)
+</td><td> Cell 3, row 1
+</td></tr>
+<tr>
+<td> Cell 1, row 2
+</td><td> Cell 3, row 2
+</td></tr></table>
+
+!! end
+
+!! test
+Nested table
+!! input
+{| border=1
+| &alpha;
+|
+{| bgcolor=#ABCDEF border=2
+|nested
+|-
+|table
+|}
+|the original table again
+|}
+!! result
+<table border="1">
+<tr>
+<td> &alpha;
+</td><td>
+<table bgcolor="#ABCDEF" border="2">
+<tr>
+<td>nested
+</td></tr>
+<tr>
+<td>table
+</td></tr></table>
+</td><td>the original table again
+</td></tr></table>
+
+!! end
+
+!! test
+Invalid attributes in table cell (bug 1830)
+!! input
+{|
+|Cell:|broken
+|}
+!! result
+<table>
+<tr>
+<td>broken
+</td></tr></table>
+
+!! end
+
+
+# FIXME: this one has incorrect tag nesting still.
+!! test
+Table security: embedded pipes (http://mail.wikipedia.org/pipermail/wikitech-l/2006-April/034637.html)
+!! input
+{|
+| |[ftp://|x||]" onmouseover="alert(document.cookie)">test
+!! result
+<table>
+<tr>
+<td><a href="ftp://|x||" class="external autonumber" title="ftp://|x||" rel="nofollow">[1]</td><td></a>" onmouseover="alert(document.cookie)">test
+</td>
+</tr>
+</table>
+
+!! end
+
+
+###
+### Internal links
+###
+!! test
+Plain link, capitalized
+!! input
+[[Main Page]]
+!! result
+<p><a href="/wiki/Main_Page" title="Main Page">Main Page</a>
+</p>
+!! end
+
+!! test
+Plain link, uncapitalized
+!! input
+[[main Page]]
+!! result
+<p><a href="/wiki/Main_Page" title="Main Page">main Page</a>
+</p>
+!! end
+
+!! test
+Piped link
+!! input
+[[Main Page|The Main Page]]
+!! result
+<p><a href="/wiki/Main_Page" title="Main Page">The Main Page</a>
+</p>
+!! end
+
+!! test
+Broken link
+!! input
+[[Zigzagzogzagzig]]
+!! result
+<p><a href="/index.php?title=Zigzagzogzagzig&amp;action=edit" class="new" title="Zigzagzogzagzig">Zigzagzogzagzig</a>
+</p>
+!! end
+
+!! test
+Link with prefix
+!! input
+xxx[[main Page]], xxx[[Main Page]], Xxx[[main Page]] XXX[[main Page]], XXX[[Main Page]]
+!! result
+<p>xxx<a href="/wiki/Main_Page" title="Main Page">main Page</a>, xxx<a href="/wiki/Main_Page" title="Main Page">Main Page</a>, Xxx<a href="/wiki/Main_Page" title="Main Page">main Page</a> XXX<a href="/wiki/Main_Page" title="Main Page">main Page</a>, XXX<a href="/wiki/Main_Page" title="Main Page">Main Page</a>
+</p>
+!! end
+
+!! test
+Link with suffix
+!! input
+[[Main Page]]xxx, [[Main Page]]XXX
+!! result
+<p><a href="/wiki/Main_Page" title="Main Page">Main Pagexxx</a>, <a href="/wiki/Main_Page" title="Main Page">Main Page</a>XXX
+</p>
+!! end
+
+!! test
+Link with 3 brackets
+!! input
+[[[main page]]]
+!! result
+<p>[[[main page]]]
+</p>
+!! end
+
+!! test
+Piped link with 3 brackets
+!! input
+[[[main page|the main page]]]
+!! result
+<p>[[[main page|the main page]]]
+</p>
+!! end
+
+!! test
+Link with multiple pipes
+!! input
+[[Main Page|The|Main|Page]]
+!! result
+<p><a href="/wiki/Main_Page" title="Main Page">The|Main|Page</a>
+</p>
+!! end
+
+!! test
+Link to namespaces
+!! input
+[[Talk:Parser testing]], [[Meta:Disclaimers]]
+!! result
+<p><a href="/index.php?title=Talk:Parser_testing&amp;action=edit" class="new" title="Talk:Parser testing">Talk:Parser testing</a>, <a href="/index.php?title=Meta:Disclaimers&amp;action=edit" class="new" title="Meta:Disclaimers">Meta:Disclaimers</a>
+</p>
+!! end
+
+!! test
+Piped link to namespace
+!! input
+[[Meta:Disclaimers|The disclaimers]]
+!! result
+<p><a href="/index.php?title=Meta:Disclaimers&amp;action=edit" class="new" title="Meta:Disclaimers">The disclaimers</a>
+</p>
+!! end
+
+!! test
+Link containing }
+!! input
+[[Usually caused by a typo (oops}]]
+!! result
+<p>[[Usually caused by a typo (oops}]]
+</p>
+!! end
+
+!! test
+Link containing % (not as a hex sequence)
+!! input
+[[7% Solution]]
+!! result
+<p><a href="/index.php?title=7%25_Solution&amp;action=edit" class="new" title="7% Solution">7% Solution</a>
+</p>
+!! end
+
+!! test
+Link containing % as a single hex sequence interpreted to char
+!! input
+[[7%25 Solution]]
+!! result
+<p><a href="/index.php?title=7%25_Solution&amp;action=edit" class="new" title="7% Solution">7% Solution</a>
+</p>
+!!end
+
+!! test
+Link containing % as a double hex sequence interpreted to hex sequence
+!! input
+[[7%2525 Solution]]
+!! result
+<p>[[7%2525 Solution]]
+</p>
+!!end
+
+!! test
+Link containing "#<" and "#>" % as a hex sequences- these are valid section anchors
+Example for such a section: == < ==
+!! input
+[[%23%3c]][[%23%3e]]
+!! result
+<p><a href="#.3C" title="">#&lt;</a><a href="#.3E" title="">#&gt;</a>
+</p>
+!! end
+
+!! test
+Link containing "<#" and ">#" as a hex sequences
+!! input
+[[%3c%23]][[%3e%23]]
+!! result
+<p>[[%3c%23]][[%3e%23]]
+</p>
+!! end
+
+!! test
+Link containing double-single-quotes '' (bug 4598)
+!! input
+[[Lista d''e paise d''o munno]]
+!! result
+<p><a href="/index.php?title=Lista_d%27%27e_paise_d%27%27o_munno&amp;action=edit" class="new" title="Lista d''e paise d''o munno">Lista d''e paise d''o munno</a>
+</p>
+!! end
+
+!! test
+Link containing double-single-quotes '' in text (bug 4598 sanity check)
+!! input
+Some [[Link|pretty ''italics'' and stuff]]!
+!! result
+<p>Some <a href="/index.php?title=Link&amp;action=edit" class="new" title="Link">pretty <i>italics</i> and stuff</a>!
+</p>
+!! end
+
+!! test
+Link containing double-single-quotes '' in text embedded in italics (bug 4598 sanity check)
+!! input
+''Some [[Link|pretty ''italics'' and stuff]]!
+!! result
+<p><i>Some </i><a href="/index.php?title=Link&amp;action=edit" class="new" title="Link"><i>pretty </i>italics<i> and stuff</i></a><i>!</i>
+</p>
+!! end
+
+!! test
+Plain link to URL
+!! input
+[[http://www.example.org]]
+!! result
+<p>[<a href="http://www.example.org" class="external autonumber" title="http://www.example.org" rel="nofollow">[1]</a>]
+</p>
+!! end
+
+# I'm fairly sure the expected result here is wrong.
+# We want these to be URL links, not pseudo-pages with URLs for titles....
+# However the current output is also pretty screwy.
+#
+# ----
+# I'm changing it to match the current output--it arguably makes more
+# sense in the light of the test above. Old expected result was:
+#<p>Piped link to URL: <a href="/index.php?title=Http://www.example.org&amp;action=edit" class="new" title="Http://www.example.org">an example URL</a>
+#</p>
+# But I think this test is bordering on "garbage in, garbage out" anyway.
+# -- wtm
+!! test
+Piped link to URL
+!! input
+Piped link to URL: [[http://www.example.org|an example URL]]
+!! result
+<p>Piped link to URL: [<a href="http://www.example.org|an" class="external text" title="http://www.example.org|an" rel="nofollow">example URL</a>]
+</p>
+!! end
+
+!! test
+BUG 2: [[page|http://url/]] should link to page, not http://url/
+!! input
+[[Main Page|http://url/]]
+!! result
+<p><a href="/wiki/Main_Page" title="Main Page">http://url/</a>
+</p>
+!! end
+
+!! test
+BUG 337: Escaped self-links should be bold
+!! options
+title=[[Bug462]]
+!! input
+[[Bu&#103;462]] [[Bug462]]
+!! result
+<p><strong class="selflink">Bu&#103;462</strong> <strong class="selflink">Bug462</strong>
+</p>
+!! end
+
+!! test
+Self-link to section should not be bold
+!! options
+title=[[Main Page]]
+!! input
+[[Main Page#section]]
+!! result
+<p><a href="/wiki/Main_Page#section" title="Main Page">Main Page#section</a>
+</p>
+!! end
+
+!! article
+00
+!! text
+This is 00.
+!! endarticle
+
+!!test
+Self-link to numeric title
+!!options
+title=[[0]]
+!!input
+[[0]]
+!!result
+<p><strong class="selflink">0</strong>
+</p>
+!!end
+
+!!test
+Link to numeric-equivalent title
+!!options
+title=[[0]]
+!!input
+[[00]]
+!!result
+<p><a href="/wiki/00" title="00">00</a>
+</p>
+!!end
+
+!! test
+<nowiki> inside a link
+!! input
+[[Main<nowiki> Page</nowiki>]] [[Main Page|the main page <nowiki>[it's not very good]</nowiki>]]
+!! result
+<p>[[Main Page]] <a href="/wiki/Main_Page" title="Main Page">the main page [it's not very good]</a>
+</p>
+!! end
+
+###
+### Interwiki links (see maintenance/interwiki.sql)
+###
+
+!! test
+Inline interwiki link
+!! input
+[[MeatBall:SoftSecurity]]
+!! result
+<p><a href="http://www.usemod.com/cgi-bin/mb.pl?SoftSecurity" class="extiw" title="meatball:SoftSecurity">MeatBall:SoftSecurity</a>
+</p>
+!! end
+
+!! test
+Inline interwiki link with empty title (bug 2372)
+!! input
+[[MeatBall:]]
+!! result
+<p><a href="http://www.usemod.com/cgi-bin/mb.pl?" class="extiw" title="meatball:">MeatBall:</a>
+</p>
+!! end
+
+!! test
+Interwiki link encoding conversion (bug 1636)
+!! input
+*[[Wikipedia:ro:Olteni&#0355;a]]
+*[[Wikipedia:ro:Olteni&#355;a]]
+!! result
+<ul><li><a href="http://en.wikipedia.org/wiki/ro:Olteni%C5%A3a" class="extiw" title="wikipedia:ro:Olteniţa">Wikipedia:ro:Olteni&#355;a</a>
+</li><li><a href="http://en.wikipedia.org/wiki/ro:Olteni%C5%A3a" class="extiw" title="wikipedia:ro:Olteniţa">Wikipedia:ro:Olteni&#355;a</a>
+</li></ul>
+
+!! end
+
+!! test
+Interwiki link with fragment (bug 2130)
+!! input
+[[MeatBall:SoftSecurity#foo]]
+!! result
+<p><a href="http://www.usemod.com/cgi-bin/mb.pl?SoftSecurity#foo" class="extiw" title="meatball:SoftSecurity">MeatBall:SoftSecurity#foo</a>
+</p>
+!! end
+
+!! test
+Interlanguage link
+!! input
+Blah blah blah
+[[zh:Chinese]]
+!!result
+<p>Blah blah blah
+</p>
+!! end
+
+!! test
+Double interlanguage link
+!! input
+Blah blah blah
+[[es:Spanish]]
+[[zh:Chinese]]
+!!result
+<p>Blah blah blah
+</p>
+!! end
+
+!! test
+Interlanguage link, with prefix links
+!! options
+language=ln
+!! input
+Blah blah blah
+[[zh:Chinese]]
+!!result
+<p>Blah blah blah
+</p>
+!! end
+
+!! test
+Double interlanguage link, with prefix links (bug 8897)
+!! options
+language=ln
+!! input
+Blah blah blah
+[[es:Spanish]]
+[[zh:Chinese]]
+!!result
+<p>Blah blah blah
+</p>
+!! end
+
+
+##
+## XHTML tidiness
+###
+
+!! test
+<br> to <br />
+!! input
+1<br>2<br />3
+!! result
+<p>1<br />2<br />3
+</p>
+!! end
+
+!! test
+Incorrecly removing closing slashes from correctly formed XHTML
+!! input
+<br style="clear:both;" />
+!! result
+<p><br style="clear:both;" />
+</p>
+!! end
+
+!! test 
+Failing to transform badly formed HTML into correct XHTML
+!! input
+<br clear=left>
+<br clear=right>
+<br clear=all>
+!! result
+<p><br clear="left" />
+<br clear="right" />
+<br clear="all" />
+</p>
+!!end
+
+!! test 
+Horizontal ruler (should it add that extra space?)
+!! input 
+<hr>
+<hr >
+foo <hr
+> bar
+!! result 
+<hr />
+<hr />
+foo <hr /> bar
+
+!! end
+
+###
+### Block-level elements
+###
+!! test
+Common list
+!! input
+*Common list
+* item 2
+*item 3
+!! result
+<ul><li>Common list
+</li><li> item 2
+</li><li>item 3
+</li></ul>
+
+!! end
+
+!! test
+Numbered list
+!! input
+#Numbered list
+#item 2
+# item 3
+!! result
+<ol><li>Numbered list
+</li><li>item 2
+</li><li> item 3
+</li></ol>
+
+!! end
+
+!! test
+Mixed list
+!! input
+*Mixed list
+*# with numbers
+** and bullets
+*# and numbers
+*bullets again
+**bullet level 2
+***bullet level 3
+***#Number on level 4
+**bullet level 2
+**#Number on level 3
+**#Number on level 3
+*#number level 2
+*Level 1
+!! result
+<ul><li>Mixed list
+<ol><li> with numbers
+</li></ol>
+<ul><li> and bullets
+</li></ul>
+<ol><li> and numbers
+</li></ol>
+</li><li>bullets again
+<ul><li>bullet level 2
+<ul><li>bullet level 3
+<ol><li>Number on level 4
+</li></ol>
+</li></ul>
+</li><li>bullet level 2
+<ol><li>Number on level 3
+</li><li>Number on level 3
+</li></ol>
+</li></ul>
+<ol><li>number level 2
+</li></ol>
+</li><li>Level 1
+</li></ul>
+
+!! end
+
+!! test
+List items are not parsed correctly following a <pre> block (bug 785)
+!! input
+* <pre>foo</pre>
+* <pre>bar</pre>
+* zar
+!! result
+<ul><li> <pre>foo</pre>
+</li><li> <pre>bar</pre>
+</li><li> zar
+</li></ul>
+
+!! end
+
+###
+### Magic Words
+###
+
+!! test
+Magic Word: {{CURRENTDAY}}
+!! input
+{{CURRENTDAY}}
+!! result
+<p>1
+</p>
+!! end
+
+!! test
+Magic Word: {{CURRENTDAY2}}
+!! input
+{{CURRENTDAY2}}
+!! result
+<p>01
+</p>
+!! end
+
+!! test
+Magic Word: {{CURRENTDAYNAME}}
+!! input
+{{CURRENTDAYNAME}}
+!! result
+<p>Thursday
+</p>
+!! end
+
+!! test
+Magic Word: {{CURRENTDOW}}
+!! input
+{{CURRENTDOW}}
+!! result
+<p>4
+</p>
+!! end
+
+!! test
+Magic Word: {{CURRENTMONTH}}
+!! input
+{{CURRENTMONTH}}
+!! result
+<p>01
+</p>
+!! end
+
+!! test
+Magic Word: {{CURRENTMONTHABBREV}}
+!! input
+{{CURRENTMONTHABBREV}}
+!! result
+<p>Jan
+</p>
+!! end
+
+!! test
+Magic Word: {{CURRENTMONTHNAME}}
+!! input
+{{CURRENTMONTHNAME}}
+!! result
+<p>January
+</p>
+!! end
+
+!! test
+Magic Word: {{CURRENTMONTHNAMEGEN}}
+!! input
+{{CURRENTMONTHNAMEGEN}}
+!! result
+<p>January
+</p>
+!! end
+
+!! test
+Magic Word: {{CURRENTTIME}}
+!! input
+{{CURRENTTIME}}
+!! result
+<p>00:02
+</p>
+!! end
+
+!! test
+Magic Word: {{CURRENTWEEK}} (@bug 4594)
+!! input
+{{CURRENTWEEK}}
+!! result
+<p>1
+</p>
+!! end
+
+!! test
+Magic Word: {{CURRENTYEAR}}
+!! input
+{{CURRENTYEAR}}
+!! result
+<p>1970
+</p>
+!! end
+
+!! test
+Magic Word: {{FULLPAGENAME}}
+!! options
+title=[[User:Ævar Arnfjörð Bjarmason]]
+!! input
+{{FULLPAGENAME}}
+!! result
+<p>User:Ævar Arnfjörð Bjarmason
+</p>
+!! end
+
+!! test
+Magic Word: {{FULLPAGENAMEE}}
+!! options
+title=[[User:Ævar Arnfjörð Bjarmason]]
+!! input
+{{FULLPAGENAMEE}}
+!! result
+<p>User:%C3%86var_Arnfj%C3%B6r%C3%B0_Bjarmason
+</p>
+!! end
+
+!! test
+Magic Word: {{NAMESPACE}}
+!! options
+title=[[User:Ævar Arnfjörð Bjarmason]]
+disabled # FIXME
+!! input
+{{NAMESPACE}}
+!! result
+<p>User
+</p>
+!! end
+
+!! test
+Magic Word: {{NAMESPACEE}}
+!! options
+title=[[User:Ævar Arnfjörð Bjarmason]]
+disabled # FIXME
+!! input
+{{NAMESPACEE}}
+!! result
+<p>User
+</p>
+!! end
+
+!! test
+Magic Word: {{NUMBEROFARTICLES}}
+!! input
+{{NUMBEROFARTICLES}}
+!! result
+<p>1
+</p>
+!! end
+
+!! test
+Magic Word: {{NUMBEROFFILES}}
+!! input
+{{NUMBEROFFILES}}
+!! result
+<p>1
+</p>
+!! end
+
+!! test
+Magic Word: {{PAGENAME}}
+!! options
+title=[[User:Ævar Arnfjörð Bjarmason]]
+disabled # FIXME
+!! input
+{{PAGENAME}}
+!! result
+<p>Ævar Arnfjörð Bjarmason
+</p>
+!! end
+
+!! test
+Magic Word: {{PAGENAMEE}}
+!! options
+title=[[User:Ævar Arnfjörð Bjarmason]]
+!! input
+{{PAGENAMEE}}
+!! result
+<p>User:%C3%86var_Arnfj%C3%B6r%C3%B0_Bjarmason
+</p>
+!! end
+
+!! test
+Magic Word: {{REVISIONID}}
+!! input
+{{REVISIONID}}
+!! result
+<p>1337
+</p>
+!! end
+
+!! test
+Magic Word: {{SCRIPTPATH}}
+!! input
+{{SCRIPTPATH}}
+!! result
+<p>/
+</p>
+!! end
+
+!! test
+Magic Word: {{SERVER}}
+!! input
+{{SERVER}}
+!! result
+<p><a href="http://localhost" class="external free" title="http://localhost" rel="nofollow">http://localhost</a>
+</p>
+!! end
+
+!! test
+Magic Word: {{SERVERNAME}}
+!! input
+{{SERVERNAME}}
+!! result
+<p>Britney Spears
+</p>
+!! end
+
+!! test
+Magic Word: {{SITENAME}}
+!! input
+{{SITENAME}}
+!! result
+<p>MediaWiki
+</p>
+!! end
+
+!! test
+Namespace 1 {{ns:1}}
+!! input
+{{ns:1}}
+!! result
+<p>Talk
+</p>
+!! end
+
+!! test
+Namespace 1 {{ns:01}}
+!! input
+{{ns:01}}
+!! result
+<p>Talk
+</p>
+!! end
+
+!! test
+Namespace 0 {{ns:0}} (bug 4783)
+!! input
+{{ns:0}}
+!! result
+
+!! end
+
+!! test
+Namespace 0 {{ns:00}} (bug 4783)
+!! input
+{{ns:00}}
+!! result
+
+!! end
+
+!! test
+Namespace -1 {{ns:-1}}
+!! input
+{{ns:-1}}
+!! result
+<p>Special
+</p>
+!! end
+
+!! test
+Namespace Project {{ns:User}}
+!! input
+{{ns:User}}
+!! result
+<p>User
+</p>
+!! end
+
+
+###
+### Magic links
+###
+!! test
+Magic links: internal link to RFC (bug 479)
+!! input
+[[RFC 123]]
+!! result
+<p><a href="/index.php?title=RFC_123&amp;action=edit" class="new" title="RFC 123">RFC 123</a>
+</p>
+!! end
+
+!! test
+Magic links: RFC (bug 479)
+!! input
+RFC 822
+!! result
+<p><a href="http://tools.ietf.org/html/rfc822" class="external" title="http://tools.ietf.org/html/rfc822">RFC 822</a>
+</p>
+!! end
+
+!! test
+Magic links: ISBN (bug 1937)
+!! input
+ISBN 0-306-40615-2
+!! result
+<p><a href="/index.php?title=Special:Booksources&amp;isbn=0306406152" class="internal">ISBN 0-306-40615-2</a>
+</p>
+!! end
+
+!! test
+Magic links: PMID incorrectly converts space to underscore
+!! input
+PMID 1234
+!! result
+<p><a href="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=Retrieve&amp;db=pubmed&amp;dopt=Abstract&amp;list_uids=1234" class="external" title="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=Retrieve&amp;db=pubmed&amp;dopt=Abstract&amp;list_uids=1234">PMID 1234</a>
+</p>
+!! end
+
+###
+### Templates
+####
+
+!! test
+Nonexistant template
+!! input
+{{thistemplatedoesnotexist}}
+!! result
+<p><a href="/index.php?title=Template:Thistemplatedoesnotexist&amp;action=edit" class="new" title="Template:Thistemplatedoesnotexist">Template:Thistemplatedoesnotexist</a>
+</p>
+!! end
+
+!! article
+Template:test
+!! text
+This is a test template
+!! endarticle
+
+!! test
+Simple template
+!! input
+{{test}}
+!! result
+<p>This is a test template
+</p>
+!! end
+
+!! test
+Template with explicit namespace
+!! input
+{{Template:test}}
+!! result
+<p>This is a test template
+</p>
+!! end
+
+
+!! article
+Template:paramtest
+!! text
+This is a test template with parameter {{{param}}}
+!! endarticle
+
+!! test
+Template parameter
+!! input
+{{paramtest|param=foo}}
+!! result
+<p>This is a test template with parameter foo
+</p>
+!! end
+
+!! article
+Template:paramtestnum
+!! text
+[[{{{1}}}|{{{2}}}]]
+!! endarticle
+
+!! test
+Template unnamed parameter
+!! input
+{{paramtestnum|Main Page|the main page}}
+!! result
+<p><a href="/wiki/Main_Page" title="Main Page">the main page</a>
+</p>
+!! end
+
+!! article
+Template:templatesimple
+!! text
+(test)
+!! endarticle
+
+!! article
+Template:templateredirect
+!! text
+#redirect [[Template:templatesimple]]
+!! endarticle
+
+!! article
+Template:templateasargtestnum
+!! text
+{{{{{1}}}}}
+!! endarticle
+
+!! article
+Template:templateasargtest
+!! text
+{{template{{{templ}}}}}
+!! endarticle
+
+!! article
+Template:templateasargtest2
+!! text
+{{{{{templ}}}}}
+!! endarticle
+
+!! test
+Template with template name as unnamed argument
+!! input
+{{templateasargtestnum|templatesimple}}
+!! result
+<p>(test)
+</p>
+!! end
+
+!! test
+Template with template name as argument
+!! input
+{{templateasargtest|templ=simple}}
+!! result
+<p>(test)
+</p>
+!! end
+
+!! test
+Template with template name as argument (2)
+!! input
+{{templateasargtest2|templ=templatesimple}}
+!! result
+<p>(test)
+</p>
+!! end
+
+!! article
+Template:templateasargtestdefault
+!! text
+{{{{{templ|templatesimple}}}}}
+!! endarticle
+
+!! article
+Template:templa
+!! text
+'''templ'''
+!! endarticle
+
+!! test
+Template with default value
+!! input
+{{templateasargtestdefault}}
+!! result
+<p>(test)
+</p>
+!! end
+
+!! test
+Template with default value (value set)
+!! input
+{{templateasargtestdefault|templ=templa}}
+!! result
+<p><b>templ</b>
+</p>
+!! end
+
+!! test
+Template redirect
+!! input
+{{templateredirect}}
+!! result
+<p>(test)
+</p>
+!! end
+
+!! test
+Template with argument in separate line
+!! input
+{{ templateasargtest  |
+ templ = simple }}
+!! result
+<p>(test)
+</p>
+!! end
+
+!! test
+Template with complex template as argument
+!! input
+{{paramtest|
+  param ={{ templateasargtest  |
+ templ = simple }}}}
+!! result
+<p>This is a test template with parameter (test)
+</p>
+!! end
+
+!! test
+Template with thumb image (with link in description)
+!! input
+{{paramtest|
+  param =[[Image:noimage.png|thumb|[[no link|link]] [[no link|caption]]]]}}
+!! result
+This is a test template with parameter <div class="thumb tright"><div class="thumbinner" style="width:122px;"><a href="/index.php?title=Special:Upload&amp;wpDestFile=Noimage.png" class="new" title="Image:Noimage.png">Image:Noimage.png</a>  <div class="thumbcaption"><a href="/index.php?title=No_link&amp;action=edit" class="new" title="No link">link</a> <a href="/index.php?title=No_link&amp;action=edit" class="new" title="No link">caption</a></div></div></div>
+
+!! end
+
+!! article
+Template:complextemplate
+!! text
+{{{1}}} {{paramtest|
+  param ={{{param}}}}}
+!! endarticle
+
+!! test
+Template with complex arguments
+!! input
+{{complextemplate|
+  param ={{ templateasargtest  |
+ templ = simple }}|[[Template:complextemplate|link]]}}
+!! result
+<p><a href="/wiki/Template:Complextemplate" title="Template:Complextemplate">link</a> This is a test template with parameter (test)
+</p>
+!! end
+
+!! test
+BUG 553: link with two variables in a piped link
+!! input
+{| 
+|[[{{{1}}}|{{{2}}}]]
+|}
+!! result
+<table>
+<tr>
+<td>[[{{{1}}}|{{{2}}}]]
+</td></tr></table>
+
+!! end
+
+!! test
+Magic variable as template parameter
+!! input
+{{paramtest|param={{SITENAME}}}}
+!! result
+<p>This is a test template with parameter MediaWiki
+</p>
+!! end
+
+!! article
+Template:linktest
+!! text
+[[{{{param}}}|link]]
+!! endarticle
+
+!! test
+Template parameter as link source
+!! input
+{{linktest|param=Main Page}}
+!! result
+<p><a href="/wiki/Main_Page" title="Main Page">link</a>
+</p>
+!! end
+
+
+!!article
+Template:paramtest2
+!! text
+including another template, {{paramtest|param={{{arg}}}}}
+!! endarticle
+
+!! test
+Template passing argument to another template
+!! input
+{{paramtest2|arg='hmm'}}
+!! result
+<p>including another template, This is a test template with parameter 'hmm'
+</p>
+!! end
+
+!! article
+Template:Linktest2
+!! text
+Main Page
+!! endarticle
+
+!! test
+Template as link source
+!! input
+[[{{linktest2}}]]
+!! result
+<p><a href="/wiki/Main_Page" title="Main Page">Main Page</a>
+</p>
+!! end
+
+
+!! article
+Template:loop1
+!! text
+{{loop2}}
+!! endarticle
+
+!! article
+Template:loop2
+!! text
+{{loop1}}
+!! endarticle
+
+!! test
+Template infinite loop
+!! input
+{{loop1}}
+!! result
+<p><a href="/index.php?title=Loop1&amp;action=edit" class="new" title="Loop1">loop1</a><!-- WARNING: template loop detected -->
+</p>
+!! end
+
+!! test
+Template from main namespace
+!! input
+{{:Main Page}}
+!! result
+<p>blah blah
+</p>
+!! end
+
+!! article
+Template:table
+!! text
+{| 
+| 1 || 2
+|- 
+| 3 || 4
+|}
+!! endarticle
+
+!! test
+BUG 529: Template with table, not included at beginning of line
+!! input
+foo {{table}}
+!! result
+<p>foo 
+</p>
+<table>
+<tr>
+<td> 1 </td><td> 2
+</td></tr>
+<tr>
+<td> 3 </td><td> 4
+</td></tr></table>
+
+!! end
+
+!! test
+BUG 523: Template shouldn't eat newline (or add an extra one before table)
+!! input
+foo
+{{table}}
+!! result
+<p>foo
+</p>
+<table>
+<tr>
+<td> 1 </td><td> 2
+</td></tr>
+<tr>
+<td> 3 </td><td> 4
+</td></tr></table>
+
+!! end
+
+!! test
+BUG 41: Template parameters shown as broken links
+!! input
+{{{parameter}}}
+!! result
+<p>{{{parameter}}}
+</p>
+!! end
+
+
+!! article
+Template:MSGNW test
+!! text
+''None'' of '''this''' should be 
+* interepreted
+ but rather passed unmodified
+{{test}}
+!! endarticle
+
+# hmm, fix this or just deprecate msgnw and document its behavior?
+!! test
+msgnw keyword
+!! options
+disabled
+!! input
+{{msgnw:MSGNW test}}
+!! result
+<p>''None'' of '''this''' should be 
+* interepreted
+ but rather passed unmodified
+{{test}}
+</p>
+!! end
+
+!! test
+int keyword
+!! input
+{{int:youhavenewmessages|lots of money|not!}}
+!! result
+<p>You have lots of money (not!).
+</p>
+!! end
+
+!! article
+Template:Includes
+!! text
+Foo<noinclude>zar</noinclude><includeonly>bar</includeonly>
+!! endarticle
+
+!! test
+<includeonly> and <noinclude> being included
+!! input
+{{Includes}}
+!! result
+<p>Foobar
+</p>
+!! end
+
+!! article
+Template:Includes2
+!! text
+<onlyinclude>Foo</onlyinclude>bar
+!! endarticle
+
+!! test
+<onlyinclude> being included
+!! input
+{{Includes2}}
+!! result
+<p>Foo
+</p>
+!! end
+
+
+!! article
+Template:Includes3
+!! text
+<onlyinclude>Foo</onlyinclude>bar<includeonly>zar</includeonly>
+!! endarticle
+
+!! test
+<onlyinclude> and <includeonly> being included
+!! input
+{{Includes3}}
+!! result
+<p>Foo
+</p>
+!! end
+
+!! test
+<includeonly> and <noinclude> on a page
+!! input
+Foo<noinclude>zar</noinclude><includeonly>bar</includeonly>
+!! result
+<p>Foozar
+</p>
+!! end
+
+!! test
+<onlyinclude> on a page
+!! input
+<onlyinclude>Foo</onlyinclude>bar
+!! result
+<p>Foobar
+</p>
+!! end
+
+###
+### Pre-save transform tests
+###
+!! test
+pre-save transform: subst:
+!! options
+PST
+!! input
+{{subst:test}}
+!! result
+This is a test template
+!! end
+
+!! test
+pre-save transform: normal template
+!! options
+PST
+!! input
+{{test}}
+!! result
+{{test}}
+!! end
+
+!! test
+pre-save transform: nonexistant template
+!! options
+PST
+!! input
+{{thistemplatedoesnotexist}}
+!! result
+{{thistemplatedoesnotexist}}
+!! end
+
+
+!! test
+pre-save transform: subst magic variables
+!! options
+PST
+!! input
+{{subst:SITENAME}}
+!! result
+MediaWiki
+!! end
+
+# This is bug 89, which I fixed. -- wtm
+!! test
+pre-save transform: subst: templates with parameters
+!! options
+pst
+!! input
+{{subst:paramtest|param="something else"}}
+!! result
+This is a test template with parameter "something else"
+!! end
+
+!! article
+Template:nowikitest
+!! text
+<nowiki>'''not wiki'''</nowiki>
+!! endarticle
+
+!! test
+pre-save transform: nowiki in subst (bug 1188)
+!! options
+pst
+!! input
+{{subst:nowikitest}}
+!! result
+<nowiki>'''not wiki'''</nowiki>
+!! end
+
+
+!! article
+Template:commenttest
+!! text
+This template has <!-- a comment --> in it.
+!! endarticle
+
+!! test
+pre-save transform: comment in subst (bug 1936)
+!! options
+pst
+!! input
+{{subst:commenttest}}
+!! result
+This template has <!-- a comment --> in it.
+!! end
+
+!! test
+pre-save transform: unclosed tag
+!! options
+pst noxml
+!! input
+<nowiki>'''not wiki'''
+!! result
+<nowiki>'''not wiki'''
+!! end
+
+!! test
+pre-save transform: mixed tag case
+!! options
+pst noxml
+!! input
+<NOwiki>'''not wiki'''</noWIKI>
+!! result
+<NOwiki>'''not wiki'''</noWIKI>
+!! end
+
+!! test
+pre-save transform: unclosed comment in <nowiki>
+!! options
+pst noxml
+!! input
+wiki<nowiki>nowiki<!--nowiki</nowiki>wiki
+!! result
+wiki<nowiki>nowiki<!--nowiki</nowiki>wiki
+!!end
+
+!! article
+Template:dangerous
+!!text
+<span onmouseover="alert('crap')">Oh no</span>
+!!endarticle
+
+!!test
+(confirming safety of fix for subst bug 1936)
+!! input
+{{Template:dangerous}}
+!! result
+<p><span>Oh no</span>
+</p>
+!! end
+
+!! test
+pre-save transform: comment containing gallery (bug 5024)
+!! options
+pst
+!! input
+<!-- <gallery>data</gallery> -->
+!!result
+<!-- <gallery>data</gallery> -->
+!!end
+
+!! test
+pre-save transform: comment containing extension
+!! options
+pst
+!! input
+<!-- <tag>data</tag> -->
+!!result
+<!-- <tag>data</tag> -->
+!!end
+
+!! test
+pre-save transform: comment containing nowiki
+!! options
+pst
+!! input
+<!-- <nowiki>data</nowiki> -->
+!!result
+<!-- <nowiki>data</nowiki> -->
+!!end
+
+!! test
+pre-save transform: comment containing math
+!! options
+pst
+!! input
+<!-- <math>data</math> -->
+!!result
+<!-- <math>data</math> -->
+!!end
+
+!! test
+pre-save transform: <noinclude> in subst (bug 3298)
+!! options
+pst
+!! input
+{{subst:Includes}}
+!! result
+Foobar
+!! end
+
+!! test
+pre-save transform: <onlyinclude> in subst (bug 3298)
+!! options
+pst
+!! input
+{{subst:Includes2}}
+!! result
+Foo
+!! end
+
+!! test
+pre-save transform: context links ("pipe trick")
+!! options
+pst
+!! input
+[[Article (context)|]]
+[[Bar:Article|]]
+[[:Bar:Article|]]
+[[Bar:Article (context)|]]
+[[:Bar:Article (context)|]]
+[[|Article]]
+[[|Article (context)]]
+[[Bar:X (Y) Z|]]
+[[:Bar:X (Y) Z|]]
+!! result
+[[Article (context)|Article]]
+[[Bar:Article|Article]]
+[[:Bar:Article|Article]]
+[[Bar:Article (context)|Article]]
+[[:Bar:Article (context)|Article]]
+[[Article]]
+[[Article (context)]]
+[[Bar:X (Y) Z|X (Y) Z]]
+[[:Bar:X (Y) Z|X (Y) Z]]
+!! end
+
+!! test
+pre-save transform: context links ("pipe trick") with interwiki prefix
+!! options
+pst
+!! input
+[[interwiki:Article|]]
+[[:interwiki:Article|]]
+[[interwiki:Bar:Article|]]
+[[:interwiki:Bar:Article|]]
+!! result
+[[interwiki:Article|Article]]
+[[:interwiki:Article|Article]]
+[[interwiki:Bar:Article|Bar:Article]]
+[[:interwiki:Bar:Article|Bar:Article]]
+!! end
+
+!! test
+pre-save transform: context links ("pipe trick") with parens in title
+!! options
+pst title=[[Somearticle (context)]]
+!! input
+[[|Article]]
+!! result
+[[Article (context)|Article]]
+!! end
+
+!! test
+pre-save transform: context links ("pipe trick") with comma in title
+!! options
+pst title=[[Someplace, Somewhere]]
+!! input
+[[|Otherplace]]
+[[Otherplace, Elsewhere|]]
+[[Otherplace, Elsewhere, Anywhere|]]
+!! result
+[[Otherplace, Somewhere|Otherplace]]
+[[Otherplace, Elsewhere|Otherplace]]
+[[Otherplace, Elsewhere, Anywhere|Otherplace]]
+!! end
+
+!! test
+pre-save transform: context links ("pipe trick") with parens and comma
+!! options
+pst title=[[Someplace (IGNORED), Somewhere]]
+!! input
+[[|Otherplace]]
+[[Otherplace (place), Elsewhere|]]
+!! result
+[[Otherplace, Somewhere|Otherplace]]
+[[Otherplace (place), Elsewhere|Otherplace]]
+!! end
+
+!! test
+pre-save transform: context links ("pipe trick") with comma and parens
+!! options
+pst title=[[Who, me? (context)]]
+!! input
+[[|Yes, you.]]
+[[Me, Myself, and I (1937 song)|]]
+!! result
+[[Yes, you. (context)|Yes, you.]]
+[[Me, Myself, and I (1937 song)|Me, Myself, and I]]
+!! end
+
+!! test
+pre-save transform: context links ("pipe trick") with namespace
+!! options
+pst title=[[Ns:Somearticle]]
+!! input
+[[|Article]]
+!! result
+[[Ns:Article|Article]]
+!! end
+
+!! test
+pre-save transform: context links ("pipe trick") with namespace and parens
+!! options
+pst title=[[Ns:Somearticle (context)]]
+!! input
+[[|Article]]
+!! result
+[[Ns:Article (context)|Article]]
+!! end
+
+!! test
+pre-save transform: context links ("pipe trick") with namespace and comma
+!! options
+pst title=[[Ns:Somearticle, Context, Whatever]]
+!! input
+[[|Article]]
+!! result
+[[Ns:Article, Context, Whatever|Article]]
+!! end
+
+!! test
+pre-save transform: context links ("pipe trick") with namespace, comma and parens
+!! options
+pst title=[[Ns:Somearticle, Context (context)]]
+!! input
+[[|Article]]
+!! result
+[[Ns:Article (context)|Article]]
+!! end
+
+!! test
+pre-save transform: context links ("pipe trick") with namespace, parens and comma
+!! options
+pst title=[[Ns:Somearticle (IGNORED), Context]]
+!! input
+[[|Article]]
+!! result
+[[Ns:Article, Context|Article]]
+!! end
+
+
+###
+### Message transform tests
+###
+!! test
+message transform: magic variables
+!! options
+msg
+!! input
+{{SITENAME}}
+!! result
+MediaWiki
+!! end
+
+!! test
+message transform: should not transform wiki markup
+!! options
+msg
+!! input
+''test''
+!! result
+''test''
+!! end
+
+!! test
+message transform: <noinclude> in transcluded template (bug 4926)
+!! options
+msg
+!! input
+{{Includes}}
+!! result
+Foobar
+!! end
+
+!! test
+message transform: <onlyinclude> in transcluded template (bug 4926)
+!! options
+msg
+!! input
+{{Includes2}}
+!! result
+Foo
+!! end
+
+!! test
+{{#special:}} page name, known
+!! options
+msg
+!! input
+{{#special:Recentchanges}}
+!! result
+Special:Recentchanges
+!! end
+
+!! test
+{{#special:}} page name, unknown
+!! options
+msg
+!! input
+{{#special:foobarnonexistent}}
+!! result
+No such special page
+!! end
+
+###
+### Images
+###
+!! test
+Simple image
+!! input
+[[Image:foobar.jpg]]
+!! result
+<p><a href="/wiki/Image:Foobar.jpg" class="image" title="Image:foobar.jpg"><img alt="Image:foobar.jpg" longdesc="/wiki/Image:Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
+</p>
+!! end
+
+!! test
+Right-aligned image
+!! input
+[[Image:foobar.jpg|right]]
+!! result
+<div class="floatright"><span><a href="/wiki/Image:Foobar.jpg" class="image" title=""><img alt="" longdesc="/wiki/Image:Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a></span></div>
+
+!! end
+
+!! test
+Image with caption
+!! input
+[[Image:foobar.jpg|right|Caption text]]
+!! result
+<div class="floatright"><span><a href="/wiki/Image:Foobar.jpg" class="image" title="Caption text"><img alt="Caption text" longdesc="/wiki/Image:Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a></span></div>
+
+!! end
+
+!! test
+Image with frame and link
+!! input
+[[Image:Foobar.jpg|frame|left|This is a test image [[Main Page]]]]
+!! result
+<div class="thumb tleft"><div class="thumbinner" style="width:1943px;"><a href="/wiki/Image:Foobar.jpg" class="internal" title="This is a test image Main Page"><img alt="This is a test image Main Page" longdesc="/wiki/Image:Foobar.jpg" class="thumbimage" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>  <div class="thumbcaption">This is a test image <a href="/wiki/Main_Page" title="Main Page">Main Page</a></div></div></div>
+
+!! end
+
+!! test
+Link to image page- image page normally doesn't exists, hence edit link
+Add test with existing image page
+#<p><a href="/wiki/Image:Test" title="Image:Test">Image:test</a>
+!! input
+[[:Image:test]]
+!! result
+<p><a href="/index.php?title=Image:Test&amp;action=edit" class="new" title="Image:Test">Image:test</a>
+</p>
+!! end
+
+!! test
+Frameless image caption with a free URL
+!! input
+[[Image:foobar.jpg|http://example.com]]
+!! result
+<p><a href="/wiki/Image:Foobar.jpg" class="image" title="http://example.com"><img alt="http://example.com" longdesc="/wiki/Image:Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
+</p>
+!! end
+
+!! test
+Thumbnail image caption with a free URL
+!! input
+[[Image:foobar.jpg|thumb|http://example.com]]
+!! result
+<div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/Image:Foobar.jpg" class="internal" title="http://example.com"><img alt="http://example.com" longdesc="/wiki/Image:Foobar.jpg" class="thumbimage" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" /></a>  <div class="thumbcaption"><div class="magnify" style="float:right"><a href="/wiki/Image:Foobar.jpg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div><a href="http://example.com" class="external free" title="http://example.com" rel="nofollow">http://example.com</a></div></div></div>
+
+!! end
+
+!! test
+BUG 1887: A ISBN with a thumbnail
+!! input
+[[Image:foobar.jpg|thumb|ISBN 1235467890]]
+!! result
+<div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/Image:Foobar.jpg" class="internal" title="ISBN 1235467890"><img alt="ISBN 1235467890" longdesc="/wiki/Image:Foobar.jpg" class="thumbimage" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" /></a>  <div class="thumbcaption"><div class="magnify" style="float:right"><a href="/wiki/Image:Foobar.jpg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div><a href="/index.php?title=Special:Booksources&amp;isbn=1235467890" class="internal">ISBN 1235467890</a></div></div></div>
+
+!! end
+
+!! test
+BUG 1887: A RFC with a thumbnail
+!! input
+[[Image:foobar.jpg|thumb|This is RFC 12354]]
+!! result
+<div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/Image:Foobar.jpg" class="internal" title="This is RFC 12354"><img alt="This is RFC 12354" longdesc="/wiki/Image:Foobar.jpg" class="thumbimage" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" /></a>  <div class="thumbcaption"><div class="magnify" style="float:right"><a href="/wiki/Image:Foobar.jpg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div>This is <a href="http://tools.ietf.org/html/rfc12354" class="external" title="http://tools.ietf.org/html/rfc12354">RFC 12354</a></div></div></div>
+
+!! end
+
+!! test
+BUG 1887: A mailto link with a thumbnail
+!! input
+[[Image:foobar.jpg|thumb|Please mailto:nobody@example.com]]
+!! result
+<div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/Image:Foobar.jpg" class="internal" title="Please mailto:nobody@example.com"><img alt="Please mailto:nobody@example.com" longdesc="/wiki/Image:Foobar.jpg" class="thumbimage" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" /></a>  <div class="thumbcaption"><div class="magnify" style="float:right"><a href="/wiki/Image:Foobar.jpg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div>Please <a href="mailto:nobody@example.com" class="external free" title="mailto:nobody@example.com" rel="nofollow">mailto:nobody@example.com</a></div></div></div>
+
+!! end
+
+!! test
+BUG 1887: A <math> with a thumbnail- we don't render math in the parsertests by default,
+so math is not stripped and turns up as escaped &lt;math&gt; tags.
+!! input
+[[Image:foobar.jpg|thumb|<math>2+2</math>]]
+!! result
+<div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/Image:Foobar.jpg" class="internal" title="&lt;math&gt;2+2&lt;/math&gt;"><img alt="&lt;math&gt;2+2&lt;/math&gt;" longdesc="/wiki/Image:Foobar.jpg" class="thumbimage" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" /></a>  <div class="thumbcaption"><div class="magnify" style="float:right"><a href="/wiki/Image:Foobar.jpg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div>&lt;math&gt;2+2&lt;/math&gt;</div></div></div>
+
+!! end
+
+!! test
+BUG 1887, part 2: A <math> with a thumbnail- math enabled
+!! options
+math
+!! input
+[[Image:foobar.jpg|thumb|<math>2+2</math>]]
+!! result
+<div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/Image:Foobar.jpg" class="internal" title="2 + 2"><img alt="2 + 2" longdesc="/wiki/Image:Foobar.jpg" class="thumbimage" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" /></a>  <div class="thumbcaption"><div class="magnify" style="float:right"><a href="/wiki/Image:Foobar.jpg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div><span class="texhtml">2 + 2</span></div></div></div>
+
+!! end
+
+# Pending resolution to bug 368
+!! test
+BUG 648: Frameless image caption with a link
+!! input
+[[Image:foobar.jpg|text with a [[link]] in it]]
+!! result
+<p><a href="/wiki/Image:Foobar.jpg" class="image" title="text with a link in it"><img alt="text with a link in it" longdesc="/wiki/Image:Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
+</p>
+!! end
+
+!! test
+BUG 648: Frameless image caption with a link (suffix)
+!! input
+[[Image:foobar.jpg|text with a [[link]]foo in it]]
+!! result
+<p><a href="/wiki/Image:Foobar.jpg" class="image" title="text with a linkfoo in it"><img alt="text with a linkfoo in it" longdesc="/wiki/Image:Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
+</p>
+!! end
+
+!! test
+BUG 648: Frameless image caption with an interwiki link
+!! input
+[[Image:foobar.jpg|text with a [[MeatBall:Link]] in it]]
+!! result
+<p><a href="/wiki/Image:Foobar.jpg" class="image" title="text with a MeatBall:Link in it"><img alt="text with a MeatBall:Link in it" longdesc="/wiki/Image:Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
+</p>
+!! end
+
+!! test
+BUG 648: Frameless image caption with a piped interwiki link
+!! input
+[[Image:foobar.jpg|text with a [[MeatBall:Link|link]] in it]]
+!! result
+<p><a href="/wiki/Image:Foobar.jpg" class="image" title="text with a link in it"><img alt="text with a link in it" longdesc="/wiki/Image:Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
+</p>
+!! end
+
+!! test
+Escape HTML special chars in image alt text
+!! input
+[[Image:foobar.jpg|& < > "]]
+!! result
+<p><a href="/wiki/Image:Foobar.jpg" class="image" title="&amp; &lt; &gt; &quot;"><img alt="&amp; &lt; &gt; &quot;" longdesc="/wiki/Image:Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
+</p>
+!! end
+
+!! test
+BUG 499: Alt text should have &#1234;, not &amp;1234;
+!! input
+[[Image:foobar.jpg|&#9792;]]
+!! result
+<p><a href="/wiki/Image:Foobar.jpg" class="image" title="♀"><img alt="♀" longdesc="/wiki/Image:Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
+</p>
+!! end
+
+!! test
+Broken image caption with link
+!! input
+[[Image:Foobar.jpg|thumb|This is a broken caption. But [[Main Page|this]] is just an ordinary link.
+!! result
+<p>[[Image:Foobar.jpg|thumb|This is a broken caption. But <a href="/wiki/Main_Page" title="Main Page">this</a> is just an ordinary link.
+</p>
+!! end
+
+!! test
+Image caption containing another image
+!! input
+[[Image:Foobar.jpg|thumb|This is a caption with another [[Image:icon.png|image]] inside it!]]
+!! result
+<div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/Image:Foobar.jpg" class="internal" title="This is a caption with another Image:Icon.png inside it!"><img alt="This is a caption with another Image:Icon.png inside it!" longdesc="/wiki/Image:Foobar.jpg" class="thumbimage" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" /></a>  <div class="thumbcaption"><div class="magnify" style="float:right"><a href="/wiki/Image:Foobar.jpg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div>This is a caption with another <a href="/index.php?title=Special:Upload&amp;wpDestFile=Icon.png" class="new" title="Image:Icon.png">Image:Icon.png</a> inside it!</div></div></div>
+
+!! end
+
+!! test
+Image caption containing a newline
+!! input
+[[Image:Foobar.jpg|This
+*is some text]]
+!! result
+<p><a href="/wiki/Image:Foobar.jpg" class="image" title="This *is some text"><img alt="This *is some text" longdesc="/wiki/Image:Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
+</p>
+!!end
+
+
+!! test
+Bug 3090: External links other than http: in image captions
+!! input
+[[Image:Foobar.jpg|thumb|200px|This caption has [irc://example.net irc] and [https://example.com Secure] ext links in it.]]
+!! result
+<div class="thumb tright"><div class="thumbinner" style="width:202px;"><a href="/wiki/Image:Foobar.jpg" class="internal" title="This caption has irc and Secure ext links in it."><img alt="This caption has irc and Secure ext links in it." longdesc="/wiki/Image:Foobar.jpg" class="thumbimage" src="http://example.com/images/thumb/3/3a/Foobar.jpg/200px-Foobar.jpg" width="200" height="23" /></a>  <div class="thumbcaption"><div class="magnify" style="float:right"><a href="/wiki/Image:Foobar.jpg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div>This caption has <a href="irc://example.net" class="external text" title="irc://example.net" rel="nofollow">irc</a> and <a href="https://example.com" class="external text" title="https://example.com" rel="nofollow">Secure</a> ext links in it.</div></div></div>
+
+!! end
+
+
+###
+### Subpages
+###
+!! article
+Subpage test/subpage
+!! text
+foo
+!! endarticle
+
+!! test
+Subpage link
+!! options
+subpage title=[[Subpage test]]
+!! input
+[[/subpage]]
+!! result
+<p><a href="/wiki/Subpage_test/subpage" title="Subpage test/subpage">/subpage</a>
+</p>
+!! end
+
+!! test
+Subpage noslash link
+!! options
+subpage title=[[Subpage test]]
+!!input
+[[/subpage/]]
+!! result
+<p><a href="/wiki/Subpage_test/subpage" title="Subpage test/subpage">subpage</a>
+</p>
+!! end
+
+!! test
+Disabled subpages
+!! input
+[[/subpage]]
+!! result
+<p><a href="/index.php?title=/subpage&amp;action=edit" class="new" title="/subpage">/subpage</a>
+</p>
+!! end
+
+!! test
+BUG 561: {{/Subpage}}
+!! options
+subpage title=[[Page]]
+!! input
+{{/Subpage}}
+!! result
+<p><a href="/index.php?title=Page/Subpage&amp;action=edit" class="new" title="Page/Subpage">Page/Subpage</a>
+</p>
+!! end
+
+###
+### Categories
+###
+!! article
+Category:MediaWiki User's Guide
+!! text
+blah
+!! endarticle
+
+!! test
+Link to category
+!! input
+[[:Category:MediaWiki User's Guide]]
+!! result
+<p><a href="/wiki/Category:MediaWiki_User%27s_Guide" title="Category:MediaWiki User's Guide">Category:MediaWiki User's Guide</a>
+</p>
+!! end
+
+!! test
+Simple category
+!! options
+cat
+!! input
+[[Category:MediaWiki User's Guide]]
+!! result
+<a href="/wiki/Category:MediaWiki_User%27s_Guide" title="Category:MediaWiki User's Guide">MediaWiki User's Guide</a>
+!! end
+
+###
+### Inter-language links
+###
+!! test
+Inter-language links
+!! options
+ill
+!! input
+[[es:Alimento]]
+[[fr:Nourriture]]
+[[zh:&#39135;&#21697;]]
+!! result
+es:Alimento fr:Nourriture zh:食品
+!! end
+
+###
+### Sections
+###
+!! test
+Basic section headings
+!! input
+== Headline 1 ==
+Some text
+
+==Headline 2==
+More
+===Smaller headline===
+Blah blah
+!! result
+<a name="Headline_1"></a><h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: Headline 1">edit</a>]</span> <span class="mw-headline"> Headline 1 </span></h2>
+<p>Some text
+</p>
+<a name="Headline_2"></a><h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: Headline 2">edit</a>]</span> <span class="mw-headline">Headline 2</span></h2>
+<p>More
+</p>
+<a name="Smaller_headline"></a><h3><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=3" title="Edit section: Smaller headline">edit</a>]</span> <span class="mw-headline">Smaller headline</span></h3>
+<p>Blah blah
+</p>
+!! end
+
+!! test
+Section headings with TOC
+!! input
+== Headline 1 ==
+=== Subheadline 1 ===
+===== Skipping a level =====
+====== Skipping a level ======
+
+== Headline 2 ==
+Some text
+===Another headline===
+!! result
+<table id="toc" class="toc" summary="Contents"><tr><td><div id="toctitle"><h2>Contents</h2></div>
+<ul>
+<li class="toclevel-1"><a href="#Headline_1"><span class="tocnumber">1</span> <span class="toctext">Headline 1</span></a>
+<ul>
+<li class="toclevel-2"><a href="#Subheadline_1"><span class="tocnumber">1.1</span> <span class="toctext">Subheadline 1</span></a>
+<ul>
+<li class="toclevel-3"><a href="#Skipping_a_level"><span class="tocnumber">1.1.1</span> <span class="toctext">Skipping a level</span></a>
+<ul>
+<li class="toclevel-4"><a href="#Skipping_a_level_2"><span class="tocnumber">1.1.1.1</span> <span class="toctext">Skipping a level</span></a></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="toclevel-1"><a href="#Headline_2"><span class="tocnumber">2</span> <span class="toctext">Headline 2</span></a>
+<ul>
+<li class="toclevel-2"><a href="#Another_headline"><span class="tocnumber">2.1</span> <span class="toctext">Another headline</span></a></li>
+</ul>
+</li>
+</ul>
+</td></tr></table><script type="text/javascript"> if (window.showTocToggle) { var tocShowText = "show"; var tocHideText = "hide"; showTocToggle(); } </script>
+<a name="Headline_1"></a><h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: Headline 1">edit</a>]</span> <span class="mw-headline"> Headline 1 </span></h2>
+<a name="Subheadline_1"></a><h3><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: Subheadline 1">edit</a>]</span> <span class="mw-headline"> Subheadline 1 </span></h3>
+<a name="Skipping_a_level"></a><h5><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=3" title="Edit section: Skipping a level">edit</a>]</span> <span class="mw-headline"> Skipping a level </span></h5>
+<a name="Skipping_a_level_2"></a><h6><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=4" title="Edit section: Skipping a level">edit</a>]</span> <span class="mw-headline"> Skipping a level </span></h6>
+<a name="Headline_2"></a><h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=5" title="Edit section: Headline 2">edit</a>]</span> <span class="mw-headline"> Headline 2 </span></h2>
+<p>Some text
+</p>
+<a name="Another_headline"></a><h3><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=6" title="Edit section: Another headline">edit</a>]</span> <span class="mw-headline">Another headline</span></h3>
+
+!! end
+
+# perl -e 'print "="x$_," Level $_ heading","="x$_,"\n" for 1..10'
+!! test
+Handling of sections up to level 6 and beyond
+!! input 
+= Level 1 Heading=
+== Level 2 Heading==
+=== Level 3 Heading===
+==== Level 4 Heading====
+===== Level 5 Heading=====
+====== Level 6 Heading======
+======= Level 7 Heading=======
+======== Level 8 Heading========
+========= Level 9 Heading=========
+========== Level 10 Heading==========
+!! result
+<table id="toc" class="toc" summary="Contents"><tr><td><div id="toctitle"><h2>Contents</h2></div>
+<ul>
+<li class="toclevel-1"><a href="#Level_1_Heading"><span class="tocnumber">1</span> <span class="toctext">Level 1 Heading</span></a>
+<ul>
+<li class="toclevel-2"><a href="#Level_2_Heading"><span class="tocnumber">1.1</span> <span class="toctext">Level 2 Heading</span></a>
+<ul>
+<li class="toclevel-3"><a href="#Level_3_Heading"><span class="tocnumber">1.1.1</span> <span class="toctext">Level 3 Heading</span></a>
+<ul>
+<li class="toclevel-4"><a href="#Level_4_Heading"><span class="tocnumber">1.1.1.1</span> <span class="toctext">Level 4 Heading</span></a>
+<ul>
+<li class="toclevel-5"><a href="#Level_5_Heading"><span class="tocnumber">1.1.1.1.1</span> <span class="toctext">Level 5 Heading</span></a>
+<ul>
+<li class="toclevel-6"><a href="#Level_6_Heading"><span class="tocnumber">1.1.1.1.1.1</span> <span class="toctext">Level 6 Heading</span></a></li>
+<li class="toclevel-6"><a href="#.3D_Level_7_Heading.3D"><span class="tocnumber">1.1.1.1.1.2</span> <span class="toctext">= Level 7 Heading=</span></a></li>
+<li class="toclevel-6"><a href="#.3D.3D_Level_8_Heading.3D.3D"><span class="tocnumber">1.1.1.1.1.3</span> <span class="toctext">== Level 8 Heading==</span></a></li>
+<li class="toclevel-6"><a href="#.3D.3D.3D_Level_9_Heading.3D.3D.3D"><span class="tocnumber">1.1.1.1.1.4</span> <span class="toctext">=== Level 9 Heading===</span></a></li>
+<li class="toclevel-6"><a href="#.3D.3D.3D.3D_Level_10_Heading.3D.3D.3D.3D"><span class="tocnumber">1.1.1.1.1.5</span> <span class="toctext">==== Level 10 Heading====</span></a></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</td></tr></table><script type="text/javascript"> if (window.showTocToggle) { var tocShowText = "show"; var tocHideText = "hide"; showTocToggle(); } </script>
+<a name="Level_1_Heading"></a><h1><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: Level 1 Heading">edit</a>]</span> <span class="mw-headline"> Level 1 Heading</span></h1>
+<a name="Level_2_Heading"></a><h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: Level 2 Heading">edit</a>]</span> <span class="mw-headline"> Level 2 Heading</span></h2>
+<a name="Level_3_Heading"></a><h3><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=3" title="Edit section: Level 3 Heading">edit</a>]</span> <span class="mw-headline"> Level 3 Heading</span></h3>
+<a name="Level_4_Heading"></a><h4><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=4" title="Edit section: Level 4 Heading">edit</a>]</span> <span class="mw-headline"> Level 4 Heading</span></h4>
+<a name="Level_5_Heading"></a><h5><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=5" title="Edit section: Level 5 Heading">edit</a>]</span> <span class="mw-headline"> Level 5 Heading</span></h5>
+<a name="Level_6_Heading"></a><h6><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=6" title="Edit section: Level 6 Heading">edit</a>]</span> <span class="mw-headline"> Level 6 Heading</span></h6>
+<a name=".3D_Level_7_Heading.3D"></a><h6><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=7" title="Edit section: = Level 7 Heading=">edit</a>]</span> <span class="mw-headline">= Level 7 Heading=</span></h6>
+<a name=".3D.3D_Level_8_Heading.3D.3D"></a><h6><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=8" title="Edit section: == Level 8 Heading==">edit</a>]</span> <span class="mw-headline">== Level 8 Heading==</span></h6>
+<a name=".3D.3D.3D_Level_9_Heading.3D.3D.3D"></a><h6><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=9" title="Edit section: === Level 9 Heading===">edit</a>]</span> <span class="mw-headline">=== Level 9 Heading===</span></h6>
+<a name=".3D.3D.3D.3D_Level_10_Heading.3D.3D.3D.3D"></a><h6><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=10" title="Edit section: ==== Level 10 Heading====">edit</a>]</span> <span class="mw-headline">==== Level 10 Heading====</span></h6>
+
+!! end
+
+!! test
+TOC regression (bug 9764)
+!! input
+== title 1 ==
+=== title 1.1 ===
+==== title 1.1.1 ====
+=== title 1.2 ===
+== title 2 ==
+=== title 2.1 ===
+!! result
+<table id="toc" class="toc" summary="Contents"><tr><td><div id="toctitle"><h2>Contents</h2></div>
+<ul>
+<li class="toclevel-1"><a href="#title_1"><span class="tocnumber">1</span> <span class="toctext">title 1</span></a>
+<ul>
+<li class="toclevel-2"><a href="#title_1.1"><span class="tocnumber">1.1</span> <span class="toctext">title 1.1</span></a>
+<ul>
+<li class="toclevel-3"><a href="#title_1.1.1"><span class="tocnumber">1.1.1</span> <span class="toctext">title 1.1.1</span></a></li>
+</ul>
+</li>
+<li class="toclevel-2"><a href="#title_1.2"><span class="tocnumber">1.2</span> <span class="toctext">title 1.2</span></a></li>
+</ul>
+</li>
+<li class="toclevel-1"><a href="#title_2"><span class="tocnumber">2</span> <span class="toctext">title 2</span></a>
+<ul>
+<li class="toclevel-2"><a href="#title_2.1"><span class="tocnumber">2.1</span> <span class="toctext">title 2.1</span></a></li>
+</ul>
+</li>
+</ul>
+</td></tr></table><script type="text/javascript"> if (window.showTocToggle) { var tocShowText = "show"; var tocHideText = "hide"; showTocToggle(); } </script>
+<a name="title_1"></a><h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: title 1">edit</a>]</span> <span class="mw-headline"> title 1 </span></h2>
+<a name="title_1.1"></a><h3><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: title 1.1">edit</a>]</span> <span class="mw-headline"> title 1.1 </span></h3>
+<a name="title_1.1.1"></a><h4><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=3" title="Edit section: title 1.1.1">edit</a>]</span> <span class="mw-headline"> title 1.1.1 </span></h4>
+<a name="title_1.2"></a><h3><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=4" title="Edit section: title 1.2">edit</a>]</span> <span class="mw-headline"> title 1.2 </span></h3>
+<a name="title_2"></a><h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=5" title="Edit section: title 2">edit</a>]</span> <span class="mw-headline"> title 2 </span></h2>
+<a name="title_2.1"></a><h3><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=6" title="Edit section: title 2.1">edit</a>]</span> <span class="mw-headline"> title 2.1 </span></h3>
+
+!! end
+
+!! test
+Resolving duplicate section names
+!! input
+== Foo bar ==
+== Foo bar ==
+!! result
+<a name="Foo_bar"></a><h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: Foo bar">edit</a>]</span> <span class="mw-headline"> Foo bar </span></h2>
+<a name="Foo_bar_2"></a><h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: Foo bar">edit</a>]</span> <span class="mw-headline"> Foo bar </span></h2>
+
+!! end
+
+!! article
+Template:sections
+!! text
+===Section 1===
+==Section 2==
+!! endarticle
+
+!! test
+Template with sections, __NOTOC__
+!! input
+__NOTOC__
+==Section 0==
+{{sections}}
+==Section 4==
+!! result
+<a name="Section_0"></a><h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: Section 0">edit</a>]</span> <span class="mw-headline">Section 0</span></h2>
+<a name="Section_1"></a><h3><span class="editsection">[<a href="/index.php?title=Template:Sections&amp;action=edit&amp;section=1" title="Template:Sections">edit</a>]</span> <span class="mw-headline">Section 1</span></h3>
+<a name="Section_2"></a><h2><span class="editsection">[<a href="/index.php?title=Template:Sections&amp;action=edit&amp;section=2" title="Template:Sections">edit</a>]</span> <span class="mw-headline">Section 2</span></h2>
+<a name="Section_4"></a><h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: Section 4">edit</a>]</span> <span class="mw-headline">Section 4</span></h2>
+
+!! end
+
+!! test
+__NOEDITSECTION__ keyword
+!! input
+__NOEDITSECTION__
+==Section 1==
+==Section 2==
+!! result
+<a name="Section_1"></a><h2> <span class="mw-headline">Section 1</span></h2>
+<a name="Section_2"></a><h2> <span class="mw-headline">Section 2</span></h2>
+
+!! end
+
+!! test
+Link inside a section heading
+!! input
+==Section with a [[Main Page|link]] in it==
+!! result
+<a name="Section_with_a_link_in_it"></a><h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: Section with a link in it">edit</a>]</span> <span class="mw-headline">Section with a <a href="/wiki/Main_Page" title="Main Page">link</a> in it</span></h2>
+
+!! end
+
+
+!! test
+BUG 1219 URL next to image (good)
+!! input
+http://example.com [[Image:foobar.jpg]]
+!! result
+<p><a href="http://example.com" class="external free" title="http://example.com" rel="nofollow">http://example.com</a> <a href="/wiki/Image:Foobar.jpg" class="image" title="Image:foobar.jpg"><img alt="Image:foobar.jpg" longdesc="/wiki/Image:Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
+</p>
+!!end
+
+!! test
+BUG 1219 URL next to image (broken)
+!! input
+http://example.com[[Image:foobar.jpg]]
+!! result
+<p><a href="http://example.com" class="external free" title="http://example.com" rel="nofollow">http://example.com</a><a href="/wiki/Image:Foobar.jpg" class="image" title="Image:foobar.jpg"><img alt="Image:foobar.jpg" longdesc="/wiki/Image:Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
+</p>
+!!end
+
+!! test
+Bug 1186 news: in the middle of text
+!! input
+http://en.wikinews.org/wiki/Wikinews:Workplace
+!! result
+<p><a href="http://en.wikinews.org/wiki/Wikinews:Workplace" class="external free" title="http://en.wikinews.org/wiki/Wikinews:Workplace" rel="nofollow">http://en.wikinews.org/wiki/Wikinews:Workplace</a>
+</p>
+!!end
+
+
+!! test
+Namespaced link must have a title
+!! input
+[[Project:]]
+!! result
+<p>[[Project:]]
+</p>
+!!end
+
+!! test
+Namespaced link must have a title (bad fragment version)
+!! input
+[[Project:#fragment]]
+!! result
+<p>[[Project:#fragment]]
+</p>
+!!end
+
+
+!! test
+div with no attributes
+!! input
+<div>HTML rocks</div>
+!! result
+<div>HTML rocks</div>
+
+!! end
+
+!! test
+div with double-quoted attribute
+!! input
+<div id="rock">HTML rocks</div>
+!! result
+<div id="rock">HTML rocks</div>
+
+!! end
+
+!! test
+div with single-quoted attribute
+!! input
+<div id='rock'>HTML rocks</div>
+!! result
+<div id="rock">HTML rocks</div>
+
+!! end
+
+!! test
+div with unquoted attribute
+!! input
+<div id=rock>HTML rocks</div>
+!! result
+<div id="rock">HTML rocks</div>
+
+!! end
+
+!! test
+div with illegal double attributes
+!! input
+<div align="center" align="right">HTML rocks</div>
+!! result
+<div align="right">HTML rocks</div>
+
+!!end
+
+!! test
+HTML multiple attributes correction
+!! input
+<p class="error" class="awesome">Awesome!</p>
+!! result
+<p class="awesome">Awesome!</p>
+
+!!end
+
+!! test
+Table multiple attributes correction
+!! input
+{|
+!+ class="error" class="awesome"| status
+|}
+!! result
+<table>
+<tr>
+<th class="awesome"> status
+</th></tr></table>
+
+!!end
+
+!! test
+DIV IN UPPERCASE
+!! input
+<DIV ALIGN="center">HTML ROCKS</DIV>
+!! result
+<div align="center">HTML ROCKS</div>
+
+!!end
+
+
+!! test
+text with amp in the middle of nowhere
+!! input
+Remember AT&T?
+!!result
+<p>Remember AT&amp;T?
+</p>
+!! end
+
+!! test
+text with character entity: eacute
+!! input
+I always thought &eacute; was a cute letter.
+!! result
+<p>I always thought &eacute; was a cute letter.
+</p>
+!! end
+
+!! test
+text with undefined character entity: xacute
+!! input
+I always thought &xacute; was a cute letter.
+!! result
+<p>I always thought &amp;xacute; was a cute letter.
+</p>
+!! end
+
+
+###
+### Media links
+###
+
+!! test
+Media link
+!! input
+[[Media:Foobar.jpg]]
+!! result
+<p><a href="http://example.com/images/3/3a/Foobar.jpg" class="internal" title="Foobar.jpg">Media:Foobar.jpg</a>
+</p>
+!! end
+
+!! test
+Media link with text
+!! input
+[[Media:Foobar.jpg|A neat file to look at]]
+!! result
+<p><a href="http://example.com/images/3/3a/Foobar.jpg" class="internal" title="Foobar.jpg">A neat file to look at</a>
+</p>
+!! end
+
+# FIXME: this is still bad HTML tag nesting
+!! test
+Media link with nasty text
+fixme: doBlockLevels won't wrap this in a paragraph because it contains a div
+!! input
+[[Media:Foobar.jpg|Safe Link<div style=display:none>" onmouseover="alert(document.cookie)" onfoo="</div>]]
+!! result
+<a href="http://example.com/images/3/3a/Foobar.jpg" class="internal" title="Foobar.jpg">Safe Link&lt;div style="display:none"&gt;" onmouseover="alert(document.cookie)" onfoo="&lt;/div&gt;</a>
+
+!! end
+
+!! test
+Media link to nonexistent file (bug 1702)
+!! input
+[[Media:No such.jpg]]
+!! result
+<p><a href="/index.php?title=Special:Upload&amp;wpDestFile=No_such.jpg" class="new" title="No such.jpg">Media:No such.jpg</a>
+</p>
+!! end
+
+!! test
+Image link to nonexistent file (bug 1850 - good)
+!! input
+[[Image:No such.jpg]]
+!! result
+<p><a href="/index.php?title=Special:Upload&amp;wpDestFile=No_such.jpg" class="new" title="Image:No such.jpg">Image:No such.jpg</a>
+</p>
+!! end
+
+!! test
+:Image link to nonexistent file (bug 1850 - bad)
+!! input
+[[:Image:No such.jpg]]
+!! result
+<p><a href="/index.php?title=Image:No_such.jpg&amp;action=edit" class="new" title="Image:No such.jpg">Image:No such.jpg</a>
+</p>
+!! end
+
+
+
+!! test
+Character reference normalization in link text (bug 1938)
+!! input
+[[Main Page|this&that]]
+!! result
+<p><a href="/wiki/Main_Page" title="Main Page">this&amp;that</a>
+</p>
+!!end
+
+!! test
+Empty attribute crash test (bug 2067)
+!! input
+<font color="">foo</font>
+!! result
+<p><font color="">foo</font>
+</p>
+!! end
+
+!! test
+Empty attribute crash test single-quotes (bug 2067)
+!! input
+<font color=''>foo</font>
+!! result
+<p><font color="">foo</font>
+</p>
+!! end
+
+!! test
+Attribute test: equals, then nothing
+!! input
+<font color=>foo</font>
+!! result
+<p><font>foo</font>
+</p>
+!! end
+
+!! test
+Attribute test: unquoted value
+!! input
+<font color=x>foo</font>
+!! result
+<p><font color="x">foo</font>
+</p>
+!! end
+
+!! test
+Attribute test: unquoted but illegal value (hash)
+!! input
+<font color=#x>foo</font>
+!! result
+<p><font color="#x">foo</font>
+</p>
+!! end
+
+!! test
+Attribute test: no value
+!! input
+<font color>foo</font>
+!! result
+<p><font color="color">foo</font>
+</p>
+!! end
+
+!! test
+Bug 2095: link with three closing brackets
+!! input
+[[Main Page]]]
+!! result
+<p><a href="/wiki/Main_Page" title="Main Page">Main Page</a>]
+</p>
+!! end
+
+!! test
+Bug 2095: link with pipe and three closing brackets
+!! input
+[[Main Page|link]]]
+!! result
+<p><a href="/wiki/Main_Page" title="Main Page">link</a>]
+</p>
+!! end
+
+!! test
+Bug 2095: link with pipe and three closing brackets, version 2
+!! input
+[[Main Page|[http://example.com/]]]
+!! result
+<p><a href="/wiki/Main_Page" title="Main Page">[http://example.com/]</a>
+</p>
+!! end
+
+
+###
+### Safety
+###
+
+!! article
+Template:Dangerous attribute
+!! text
+" onmouseover="alert(document.cookie)
+!! endarticle
+
+!! article
+Template:Dangerous style attribute
+!! text
+border-size: expression(alert(document.cookie))
+!! endarticle
+
+!! article
+Template:Div style
+!! text
+<div style="float: right; {{{1}}}">Magic div</div>
+!! endarticle
+
+!! test
+Bug 2304: HTML attribute safety (safe template; regression bug 2309)
+!! input
+<div title="{{test}}"></div>
+!! result
+<div title="This is a test template"></div>
+
+!! end
+
+!! test
+Bug 2304: HTML attribute safety (dangerous template; 2309)
+!! input
+<div title="{{dangerous attribute}}"></div>
+!! result
+<div title=""></div>
+
+!! end
+
+!! test
+Bug 2304: HTML attribute safety (dangerous style template; 2309)
+!! input
+<div style="{{dangerous style attribute}}"></div>
+!! result
+<div></div>
+
+!! end
+
+!! test
+Bug 2304: HTML attribute safety (safe parameter; 2309)
+!! input
+{{div style|width: 200px}}
+!! result
+<div style="float: right; width: 200px">Magic div</div>
+
+!! end
+
+!! test
+Bug 2304: HTML attribute safety (unsafe parameter; 2309)
+!! input
+{{div style|width: expression(alert(document.cookie))}}
+!! result
+<div>Magic div</div>
+
+!! end
+
+!! test
+Bug 2304: HTML attribute safety (unsafe breakout parameter; 2309)
+!! input
+{{div style|"><script>alert(document.cookie)</script>}}
+!! result
+<div>Magic div</div>
+
+!! end
+
+!! test
+Bug 2304: HTML attribute safety (unsafe breakout parameter 2; 2309)
+!! input
+{{div style|" ><script>alert(document.cookie)</script>}}
+!! result
+<div style="float: right;">Magic div</div>
+
+!! end
+
+!! test
+Bug 2304: HTML attribute safety (link)
+!! input
+<div title="[[Main Page]]"></div>
+!! result
+<div title="&#91;&#91;Main Page]]"></div>
+
+!! end
+
+!! test
+Bug 2304: HTML attribute safety (italics)
+!! input
+<div title="''foobar''"></div>
+!! result
+<div title="&#39;&#39;foobar&#39;&#39;"></div>
+
+!! end
+
+!! test
+Bug 2304: HTML attribute safety (bold)
+!! input
+<div title="'''foobar'''"></div>
+!! result
+<div title="&#39;&#39;'foobar&#39;&#39;'"></div>
+
+!! end
+
+
+!! test
+Bug 2304: HTML attribute safety (ISBN)
+!! input
+<div title="ISBN 1234567890"></div>
+!! result
+<div title="&#73;SBN 1234567890"></div>
+
+!! end
+
+!! test
+Bug 2304: HTML attribute safety (RFC)
+!! input
+<div title="RFC 1234"></div>
+!! result
+<div title="&#82;FC 1234"></div>
+
+!! end
+
+!! test
+Bug 2304: HTML attribute safety (PMID)
+!! input
+<div title="PMID 1234567890"></div>
+!! result
+<div title="&#80;MID 1234567890"></div>
+
+!! end
+
+!! test
+Bug 2304: HTML attribute safety (web link)
+!! input
+<div title="http://example.com/"></div>
+!! result
+<div title="http&#58;//example.com/"></div>
+
+!! end
+
+!! test
+Bug 2304: HTML attribute safety (named web link)
+!! input
+<div title="[http://example.com/ link]"></div>
+!! result
+<div title="&#91;http&#58;//example.com/ link]"></div>
+
+!! end
+
+!! test
+Bug 3244: HTML attribute safety (extension; safe)
+!! input
+<div style="<nowiki>background:blue</nowiki>"></div>
+!! result
+<div style="background:blue"></div>
+
+!! end
+
+!! test
+Bug 3244: HTML attribute safety (extension; unsafe)
+!! input
+<div style="<nowiki>border-left:expression(alert(document.cookie))</nowiki>"></div>
+!! result
+<div></div>
+
+!! end
+
+!! test
+Math section safety when disabled
+!! input
+<math><script>alert(document.cookies);</script></math>
+!! result
+<p>&lt;math&gt;&lt;script&gt;alert(document.cookies);&lt;/script&gt;&lt;/math&gt;
+</p>
+!! end
+
+# More MSIE fun discovered by Tom Gilder
+
+!! test
+MSIE CSS safety test: spurious slash
+!! input
+<div style="background-image:u\rl(javascript:alert('boo'))">evil</div>
+!! result
+<div>evil</div>
+
+!! end
+
+!! test
+MSIE CSS safety test: hex code
+!! input
+<div style="background-image:u\72l(javascript:alert('boo'))">evil</div>
+!! result
+<div>evil</div>
+
+!! end
+
+!! test
+MSIE CSS safety test: comment in url
+!! input
+<div style="background-image:u/**/rl(javascript:alert('boo'))">evil</div>
+!! result
+<div style="background-image:u rl(javascript:alert('boo'))">evil</div>
+
+!! end
+
+!! test
+MSIE CSS safety test: comment in expression
+!! input
+<div style="background-image:expres/**/sion(alert('boo4'))">evil4</div>
+!! result
+<div style="background-image:expres sion(alert('boo4'))">evil4</div>
+
+!! end
+
+
+!! test
+Table attribute legitimate extension
+!! input
+{|
+!+ style="<nowiki>color:blue</nowiki>"| status
+|}
+!! result
+<table>
+<tr>
+<th style="color:blue"> status
+</th></tr></table>
+
+!!end
+
+!! test
+Table attribute safety
+!! input
+{|
+!+ style="<nowiki>border-width:expression(0+alert(document.cookie))</nowiki>"| status
+|}
+!! result
+<table>
+<tr>
+<th> status
+</th></tr></table>
+
+!! end
+
+
+!! article
+Template:Identity
+!! text
+{{{1}}}
+!! endarticle
+
+!! test
+Expansion of multi-line templates in attribute values (bug 6255)
+!! input
+<div style="background: {{identity|#00FF00}}">-</div>
+!! result
+<div style="background: #00FF00">-</div>
+
+!! end
+
+
+!! test
+Expansion of multi-line templates in attribute values (bug 6255 sanity check)
+!! input
+<div style="background: 
+#00FF00">-</div>
+!! result
+<div style="background: #00FF00">-</div>
+
+!! end
+
+!! test
+Expansion of multi-line templates in attribute values (bug 6255 sanity check 2)
+!! input
+<div style="background: &#10;#00FF00">-</div>
+!! result
+<div style="background: &#10;#00FF00">-</div>
+
+!! end
+
+###
+### Parser hooks (see maintenance/parserTestsParserHook.php for the <tag> extension)
+###
+!! test
+Parser hook: empty input
+!! input
+<tag></tag>
+!! result
+<pre>
+string(0) ""
+array(0) {
+}
+</pre>
+
+!! end
+
+!! test
+Parser hook: empty input using terminated empty elements
+!! input
+<tag/>
+!! result
+<pre>
+NULL
+array(0) {
+}
+</pre>
+
+!! end
+
+!! test
+Parser hook: empty input using terminated empty elements (space before)
+!! input
+<tag />
+!! result
+<pre>
+NULL
+array(0) {
+}
+</pre>
+
+!! end
+
+!! test
+Parser hook: basic input
+!! input
+<tag>input</tag>
+!! result
+<pre>
+string(5) "input"
+array(0) {
+}
+</pre>
+
+!! end
+
+
+!! test
+Parser hook: case insensetive
+!! input
+<TAG>input</TAG>
+!! result
+<pre>
+string(5) "input"
+array(0) {
+}
+</pre>
+
+!! end
+
+
+!! test
+Parser hook: case insensetive, redux
+!! input
+<TaG>input</TAg>
+!! result
+<pre>
+string(5) "input"
+array(0) {
+}
+</pre>
+
+!! end
+
+!! test
+Parser hook: nested tags
+!! options
+noxml
+!! input
+<tag><tag></tag></tag>
+!! result
+<pre>
+string(5) "<tag>"
+array(0) {
+}
+</pre>&lt;/tag&gt;
+
+!! end
+
+!! test
+Parser hook: basic arguments
+!! input
+<tag width=200 height = "100" depth = '50' square></tag>
+!! result
+<pre>
+string(0) ""
+array(4) {
+  ["width"]=>
+  string(3) "200"
+  ["height"]=>
+  string(3) "100"
+  ["depth"]=>
+  string(2) "50"
+  ["square"]=>
+  string(6) "square"
+}
+</pre>
+
+!! end
+
+!! test
+Parser hook: argument containing a forward slash (bug 5344)
+!! input
+<tag filename='/tmp/bla'></tag>
+!! result
+<pre>
+string(0) ""
+array(1) {
+  ["filename"]=>
+  string(8) "/tmp/bla"
+}
+</pre>
+
+!! end
+
+!! test
+Parser hook: empty input using terminated empty elements (bug 2374)
+!! input
+<tag foo=bar/>text
+!! result
+<pre>
+NULL
+array(1) {
+  ["foo"]=>
+  string(3) "bar"
+}
+</pre>text
+
+!! end
+
+# </tag> should be output literally since there is no matching tag that begins it
+!! test
+Parser hook: basic arguments using terminated empty elements (bug 2374)
+!! input
+<tag width=200 height = "100" depth = '50' square/>
+other stuff
+</tag>
+!! result
+<pre>
+NULL
+array(4) {
+  ["width"]=>
+  string(3) "200"
+  ["height"]=>
+  string(3) "100"
+  ["depth"]=>
+  string(2) "50"
+  ["square"]=>
+  string(6) "square"
+}
+</pre>
+<p>other stuff
+&lt;/tag&gt;
+</p>
+!! end
+
+###
+### (see maintenance/parserTestsStaticParserHook.php for the <statictag> extension)
+###
+
+!! test
+Parser hook: static parser hook not inside a comment
+!! input
+<statictag>hello, world</statictag>
+<statictag action=flush/>
+!! result
+<p>hello, world
+</p>
+!! end
+
+
+!! test
+Parser hook: static parser hook inside a comment
+!! input
+<!-- <statictag>hello, world</statictag> -->
+<statictag action=flush/>
+!! result
+<p><br />
+</p>
+!! end
+
+# Nested template calls; this case was broken by Parser.php rev 1.506,
+# since reverted.
+
+!! article
+Template:One-parameter
+!! text
+(My parameter is: {{{1}}})
+!! endarticle
+
+!! article
+Template:Map-one-parameter
+!! text
+{{{{{1}}}|{{{2}}}}}
+!! endarticle
+
+!! test
+Nested template calls
+!! input
+{{Map-one-parameter|One-parameter|param}}
+!! result
+<p>(My parameter is: param)
+</p>
+!! end
+
+
+###
+### Sanitizer
+###
+!! test
+Sanitizer: Closing of open tags
+!! input
+<s></s><table></table>
+!! result
+<s></s><table></table>
+
+!! end
+
+!! test
+Sanitizer: Closing of open but not closed tags
+!! input
+<s>foo
+!! result
+<p><s>foo</s>
+</p>
+!! end
+
+!! test
+Sanitizer: Closing of closed but not open tags
+!! input
+</s>
+!! result
+<p>&lt;/s&gt;
+</p>
+!! end
+
+!! test
+Sanitizer: Closing of closed but not open table tags
+!! input
+Table not started</td></tr></table>
+!! result
+<p>Table not started&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
+</p>
+!! end
+
+!! test
+Sanitizer: Escaping of spaces, multibyte characters, colons & other stuff in id=""
+!! input
+<span id="æ: v">byte</span>[[#æ: v|backlink]]
+!! result
+<p><span id=".C3.A6:_v">byte</span><a href="#.C3.A6:_v" title="">backlink</a>
+</p>
+!! end
+
+!! test
+Sanitizer: Validating the contents of the id attribute (bug 4515)
+!! options
+disabled
+!! input
+<br id=9 />
+!! result
+Something, but defenetly not <br id="9" />...
+!! end
+
+!! test
+Sanitizer: Validating id attribute uniqueness (bug 4515, bug 6301)
+!! options
+disabled
+!! input
+<br id="foo" /><br id="foo" />
+!! result
+Something need to be done. foo-2 ? 
+!! end
+
+!! test
+Language converter: output gets cut off unexpectedly (bug 5757)
+!! options
+language=zh
+!! input
+this bit is safe: }-
+
+but if we add a conversion instance: -{zh-cn:xxx;zh-tw:yyy}-
+
+then we get cut off here: }-
+
+all additional text is vanished
+!! result
+<p>this bit is safe: }-
+</p><p>but if we add a conversion instance: xxx
+</p><p>then we get cut off here: }-
+</p><p>all additional text is vanished
+</p>
+!! end
+
+!! test
+Self closed html pairs (bug 5487)
+!! options
+!! input
+<center><font id="bug" />Centered text</center>
+<div><font id="bug2" />In div text</div>
+!! result
+<center>&lt;font id="bug" /&gt;Centered text</center>
+<div>&lt;font id="bug2" /&gt;In div text</div>
+
+!! end
+
+#
+#
+#
+
+!! test
+HTML bullet list, closed tags (bug 5497)
+!! input
+<ul>
+<li>One</li>
+<li>Two</li>
+</ul>
+!! result
+<ul>
+<li>One</li>
+<li>Two</li>
+</ul>
+
+!! end
+
+!! test
+HTML bullet list, unclosed tags (bug 5497)
+!! input
+<ul>
+<li>One
+<li>Two
+</ul>
+!! result
+<ul>
+<li>One
+</li><li>Two
+</li></ul>
+
+!! end
+
+!! test
+HTML ordered list, closed tags (bug 5497)
+!! input
+<ol>
+<li>One</li>
+<li>Two</li>
+</ol>
+!! result
+<ol>
+<li>One</li>
+<li>Two</li>
+</ol>
+
+!! end
+
+!! test
+HTML ordered list, unclosed tags (bug 5497)
+!! input
+<ol>
+<li>One
+<li>Two
+</ol>
+!! result
+<ol>
+<li>One
+</li><li>Two
+</li></ol>
+
+!! end
+
+!! test
+HTML nested bullet list, closed tags (bug 5497)
+!! input
+<ul>
+<li>One</li>
+<li>Two:
+<ul>
+<li>Sub-one</li>
+<li>Sub-two</li>
+</ul>
+</li>
+</ul>
+!! result
+<ul>
+<li>One</li>
+<li>Two:
+<ul>
+<li>Sub-one</li>
+<li>Sub-two</li>
+</ul>
+</li>
+</ul>
+
+!! end
+
+!! test
+HTML nested bullet list, open tags (bug 5497)
+!! input
+<ul>
+<li>One
+<li>Two:
+<ul>
+<li>Sub-one
+<li>Sub-two
+</ul>
+</ul>
+!! result
+<ul>
+<li>One
+</li><li>Two:
+<ul>
+<li>Sub-one
+</li><li>Sub-two
+</li></ul>
+</li></ul>
+
+!! end
+
+!! test
+HTML nested ordered list, closed tags (bug 5497)
+!! input
+<ol>
+<li>One</li>
+<li>Two:
+<ol>
+<li>Sub-one</li>
+<li>Sub-two</li>
+</ol>
+</li>
+</ol>
+!! result
+<ol>
+<li>One</li>
+<li>Two:
+<ol>
+<li>Sub-one</li>
+<li>Sub-two</li>
+</ol>
+</li>
+</ol>
+
+!! end
+
+!! test
+HTML nested ordered list, open tags (bug 5497)
+!! input
+<ol>
+<li>One
+<li>Two:
+<ol>
+<li>Sub-one
+<li>Sub-two
+</ol>
+</ol>
+!! result
+<ol>
+<li>One
+</li><li>Two:
+<ol>
+<li>Sub-one
+</li><li>Sub-two
+</li></ol>
+</li></ol>
+
+!! end
+
+!! test
+HTML ordered list item with parameters oddity
+!! input
+<ol><li id="fragment">One</li></ol>
+!! result
+<ol><li id="fragment">One</li></ol>
+
+!! end
+
+!!test
+bug 5918: autonumbering
+!! input
+[http://first/] [http://second] [ftp://ftp]
+
+ftp://inlineftp
+
+[mailto:enclosed@mail.tld With target]
+
+[mailto:enclosed@mail.tld]
+
+mailto:inline@mail.tld
+!! result
+<p><a href="http://first/" class="external autonumber" title="http://first/" rel="nofollow">[1]</a> <a href="http://second" class="external autonumber" title="http://second" rel="nofollow">[2]</a> <a href="ftp://ftp" class="external autonumber" title="ftp://ftp" rel="nofollow">[3]</a>
+</p><p><a href="ftp://inlineftp" class="external free" title="ftp://inlineftp" rel="nofollow">ftp://inlineftp</a>
+</p><p><a href="mailto:enclosed@mail.tld" class="external text" title="mailto:enclosed@mail.tld" rel="nofollow">With target</a>
+</p><p><a href="mailto:enclosed@mail.tld" class="external autonumber" title="mailto:enclosed@mail.tld" rel="nofollow">[4]</a>
+</p><p><a href="mailto:inline@mail.tld" class="external free" title="mailto:inline@mail.tld" rel="nofollow">mailto:inline@mail.tld</a>
+</p>
+!! end
+
+
+#
+# Security and HTML correctness
+# From Nick Jenkins' fuzz testing
+#
+
+!! test
+Fuzz testing: Parser13
+!! input
+{| 
+| http://a|
+!! result
+<table>
+<tr>
+<td>
+</td>
+</tr>
+</table>
+
+!! end
+
+!! test
+Fuzz testing: Parser14
+!! input
+== onmouseover= ==
+http://__TOC__
+!! result
+<a name="onmouseover.3D"></a><h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: onmouseover=">edit</a>]</span> <span class="mw-headline"> onmouseover= </span></h2>
+http://<table id="toc" class="toc" summary="Contents"><tr><td><div id="toctitle"><h2>Contents</h2></div>
+<ul>
+<li class="toclevel-1"><a href="#onmouseover.3D"><span class="tocnumber">1</span> <span class="toctext">onmouseover=</span></a></li>
+</ul>
+</td></tr></table><script type="text/javascript"> if (window.showTocToggle) { var tocShowText = "show"; var tocHideText = "hide"; showTocToggle(); } </script>
+
+!! end
+
+!! test
+Fuzz testing: Parser14-table
+!! input
+==a==
+{| STYLE=__TOC__
+!! result
+<a name="a"></a><h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: a">edit</a>]</span> <span class="mw-headline">a</span></h2>
+<table style="&#95;_TOC&#95;_">
+<tr><td></td></tr>
+</table>
+
+!! end
+
+# Known to produce bogus xml (extra </td>)
+!! test
+Fuzz testing: Parser16
+!! options
+noxml
+!! input
+{|
+!https://||||||
+!! result
+<table>
+<tr>
+<th>https://</th><th></th><th></th><th>
+</td>
+</tr>
+</table>
+
+!! end
+
+!! test
+Fuzz testing: Parser21
+!! input
+{|
+! irc://{{ftp://a" onmouseover="alert('hello world');"
+|
+!! result
+<table>
+<tr>
+<th> <a href="irc://{{ftp://a" class="external free" title="irc://{{ftp://a" rel="nofollow">irc://{{ftp://a</a>" onmouseover="alert('hello world');"
+</th><td>
+</td>
+</tr>
+</table>
+
+!! end
+
+!! test
+Fuzz testing: Parser22
+!! input
+http://===r:::https://b
+
+{|
+!!result
+<p><a href="http://===r:::https://b" class="external free" title="http://===r:::https://b" rel="nofollow">http://===r:::https://b</a>
+</p>
+<table>
+<tr><td></td></tr>
+</table>
+
+!! end
+
+# Known to produce bad XML for now
+!! test
+Fuzz testing: Parser24
+!! options
+noxml
+!! input
+{|
+{{{|
+<u CLASS=
+| {{{{SSSll!!!!!!!VVVV)]]][[Special:*xxxxxxx--><noinclude>}}}} >
+<br style="onmouseover='alert(document.cookie);' " />
+
+MOVE YOUR MOUSE CURSOR OVER THIS TEXT
+|
+!! result
+<table>
+
+<u class="&#124;">} &gt;
+<br style="onmouseover='alert(document.cookie);'" />
+
+MOVE YOUR MOUSE CURSOR OVER THIS TEXT
+<tr>
+<td></u>
+</td>
+</tr>
+</table>
+
+!! end
+
+# Known to produce bad XML for now
+!!test
+Fuzz testing: Parser25 (bug 6055)
+!! options
+noxml
+!! input
+{{{
+| 
+<LI CLASS=||
+ >
+}}}blah" onmouseover="alert('hello world');" align="left"'''MOVE MOUSE CURSOR OVER HERE
+!! result
+<li class="&#124;&#124;">
+blah" onmouseover="alert('hello world');" align="left"<b>MOVE MOUSE CURSOR OVER HERE</b>
+
+!! end
+
+!!test
+Fuzz testing: URL adjacent extension (with space, clean)
+!! options
+!! input
+http://example.com <nowiki>junk</nowiki>
+!! result
+<p><a href="http://example.com" class="external free" title="http://example.com" rel="nofollow">http://example.com</a> junk
+</p>
+!!end
+
+!!test
+Fuzz testing: URL adjacent extension (no space, dirty; nowiki)
+!! options
+!! input
+http://example.com<nowiki>junk</nowiki>
+!! result
+<p><a href="http://example.com" class="external free" title="http://example.com" rel="nofollow">http://example.com</a>junk
+</p>
+!!end
+
+!!test
+Fuzz testing: URL adjacent extension (no space, dirty; pre)
+!! options
+!! input
+http://example.com<pre>junk</pre>
+!! result
+<a href="http://example.com" class="external free" title="http://example.com" rel="nofollow">http://example.com</a><pre>junk</pre>
+
+!!end
+
+!!test
+Fuzz testing: image with bogus manual thumbnail
+!!input
+[[Image:foobar.jpg|thumbnail= ]]
+!!result
+<div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/Image:Foobar.jpg" class="internal" title=""><img alt="" longdesc="/wiki/Image:Foobar.jpg" class="thumbimage" src="http://example.com/images/3/3a/Foobar.jpg" width="180" height="20" /></a>  <div class="thumbcaption"><div class="magnify" style="float:right"><a href="/wiki/Image:Foobar.jpg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div></div></div></div>
+
+!!end
+
+!! test
+Fuzz testing: encoded newline in generated HTML replacements (bug 6577)
+!! input
+<pre dir="&#10;"></pre>
+!! result
+<pre dir="&#10;"></pre>
+
+!! end
+
+!! test
+Parsing optional HTML elements (Bug 6171)
+!! options
+!! input
+<table>
+  <tr>
+    <td> Some tabular data</td>
+    <td> More tabular data ...
+    <td> And yet som tabular data</td>
+  </tr>
+</table>
+!! result
+<table>
+  <tr>
+    <td> Some tabular data</td>
+    <td> More tabular data ...
+    </td><td> And yet som tabular data</td>
+  </tr>
+</table>
+
+!! end
+
+!! test
+Correct handling of <td>, <tr> (Bug 6171)
+!! options
+!! input
+<table>
+  <tr>
+    <td> Some tabular data</td>
+    <td> More tabular data ...</td>
+    <td> And yet som tabular data</td>
+  </tr>
+</table>
+!! result
+<table>
+  <tr>
+    <td> Some tabular data</td>
+    <td> More tabular data ...</td>
+    <td> And yet som tabular data</td>
+  </tr>
+</table>
+
+!! end
+
+
+!! test
+Parsing crashing regression (fr:JavaScript)
+!! input
+</body></x>
+!! result
+<p>&lt;/body&gt;&lt;/x&gt;
+</p>
+!! end
+
+!! test
+Inline wiki vs wiki block nesting
+!! input
+'''Bold paragraph
+
+New wiki paragraph
+!! result
+<p><b>Bold paragraph</b>
+</p><p>New wiki paragraph
+</p>
+!! end
+
+!! test
+Inline HTML vs wiki block nesting
+!! input
+<b>Bold paragraph
+
+New wiki paragraph
+!! result
+<p><b>Bold paragraph</b>
+</p><p>New wiki paragraph
+</p>
+!! end
+
+
+!!test
+Mixing markup for italics and bold
+!! options
+!! input
+'''bold''''''bold''bolditalics'''''
+!! result
+<p><b>bold</b><b>bold<i>bolditalics</i></b>
+</p>
+!! end
+
+
+!! article
+Xyzzyx
+!! text
+Article for special page transclusion test
+!! endarticle
+
+!! test
+Special page transclusion
+!! options
+!! input
+{{Special:Prefixindex/Xyzzyx}}
+!! result
+<p><br />
+</p>
+<table style="background: inherit;" border="0" width="100%"><tr><td><a href="/wiki/Xyzzyx" title="Xyzzyx">Xyzzyx</a></td></tr></table>
+
+!! end
+
+!! test
+Special page transclusion twice (bug 5021)
+!! options
+!! input
+{{Special:Prefixindex/Xyzzyx}}
+{{Special:Prefixindex/Xyzzyx}}
+!! result
+<p><br />
+</p>
+<table style="background: inherit;" border="0" width="100%"><tr><td><a href="/wiki/Xyzzyx" title="Xyzzyx">Xyzzyx</a></td></tr></table>
+<p><br />
+</p>
+<table style="background: inherit;" border="0" width="100%"><tr><td><a href="/wiki/Xyzzyx" title="Xyzzyx">Xyzzyx</a></td></tr></table>
+
+!! end
+
+!! test
+Transclusion of default MediaWiki message
+!! input
+{{MediaWiki:Mainpage}}
+!!result
+<p>Main Page
+</p>
+!! end
+
+!! test
+Transclusion of nonexistent MediaWiki message
+!! input
+{{MediaWiki:Mainpagexxx}}
+!!result
+<p><a href="/index.php?title=MediaWiki:Mainpagexxx&amp;action=edit" class="new" title="MediaWiki:Mainpagexxx">MediaWiki:Mainpagexxx</a>
+</p>
+!! end
+
+!! test
+Transclusion of MediaWiki message with underscore
+!! input
+{{MediaWiki:history_short}}
+!! result
+<p>History
+</p>
+!! end
+
+!! test
+Transclusion of MediaWiki message with space
+!! input
+{{MediaWiki:history short}}
+!! result
+<p>History
+</p>
+!! end
+
+!! test
+Invalid header with following text
+!! input
+= x = y
+!! result
+<p>= x = y
+</p>
+!! end
+
+
+!! test
+Section extraction test (section 0)
+!! options
+section=0
+!! input
+start
+==a==
+===aa===
+====aaa====
+==b==
+===ba===
+===bb===
+====bba====
+===bc===
+==c==
+===ca===
+!! result
+start
+!! end
+
+!! test
+Section extraction test (section 1)
+!! options
+section=1
+!! input
+start
+==a==
+===aa===
+====aaa====
+==b==
+===ba===
+===bb===
+====bba====
+===bc===
+==c==
+===ca===
+!! result
+==a==
+===aa===
+====aaa====
+!! end
+
+!! test
+Section extraction test (section 2)
+!! options
+section=2
+!! input
+start
+==a==
+===aa===
+====aaa====
+==b==
+===ba===
+===bb===
+====bba====
+===bc===
+==c==
+===ca===
+!! result
+===aa===
+====aaa====
+!! end
+
+!! test
+Section extraction test (section 3)
+!! options
+section=3
+!! input
+start
+==a==
+===aa===
+====aaa====
+==b==
+===ba===
+===bb===
+====bba====
+===bc===
+==c==
+===ca===
+!! result
+====aaa====
+!! end
+
+!! test
+Section extraction test (section 4)
+!! options
+section=4
+!! input
+start
+==a==
+===aa===
+====aaa====
+==b==
+===ba===
+===bb===
+====bba====
+===bc===
+==c==
+===ca===
+!! result
+==b==
+===ba===
+===bb===
+====bba====
+===bc===
+!! end
+
+!! test
+Section extraction test (section 5)
+!! options
+section=5
+!! input
+start
+==a==
+===aa===
+====aaa====
+==b==
+===ba===
+===bb===
+====bba====
+===bc===
+==c==
+===ca===
+!! result
+===ba===
+!! end
+
+!! test
+Section extraction test (section 6)
+!! options
+section=6
+!! input
+start
+==a==
+===aa===
+====aaa====
+==b==
+===ba===
+===bb===
+====bba====
+===bc===
+==c==
+===ca===
+!! result
+===bb===
+====bba====
+!! end
+
+!! test
+Section extraction test (section 7)
+!! options
+section=7
+!! input
+start
+==a==
+===aa===
+====aaa====
+==b==
+===ba===
+===bb===
+====bba====
+===bc===
+==c==
+===ca===
+!! result
+====bba====
+!! end
+
+!! test
+Section extraction test (section 8)
+!! options
+section=8
+!! input
+start
+==a==
+===aa===
+====aaa====
+==b==
+===ba===
+===bb===
+====bba====
+===bc===
+==c==
+===ca===
+!! result
+===bc===
+!! end
+
+!! test
+Section extraction test (section 9)
+!! options
+section=9
+!! input
+start
+==a==
+===aa===
+====aaa====
+==b==
+===ba===
+===bb===
+====bba====
+===bc===
+==c==
+===ca===
+!! result
+==c==
+===ca===
+!! end
+
+!! test
+Section extraction test (section 10)
+!! options
+section=10
+!! input
+start
+==a==
+===aa===
+====aaa====
+==b==
+===ba===
+===bb===
+====bba====
+===bc===
+==c==
+===ca===
+!! result
+===ca===
+!! end
+
+!! test
+Section extraction test (nonexistent section 11)
+!! options
+section=11
+!! input
+start
+==a==
+===aa===
+====aaa====
+==b==
+===ba===
+===bb===
+====bba====
+===bc===
+==c==
+===ca===
+!! result
+!! end
+
+!! test
+Section extraction test with bogus heading (section 1)
+!! options
+section=1
+!! input
+==a==
+==bogus== not a legal section
+==b==
+!! result
+==a==
+==bogus== not a legal section
+!! end
+
+!! test
+Section extraction test with bogus heading (section 2)
+!! options
+section=2
+!! input
+==a==
+==bogus== not a legal section
+==b==
+!! result
+==b==
+!! end
+
+!! test
+Section extraction test with comment after heading (section 1)
+!! options
+section=1
+!! input
+==a==
+==legal== <!-- a legal section -->
+==b==
+!! result
+==a==
+!! end
+
+!! test
+Section extraction test with comment after heading (section 2)
+!! options
+section=2
+!! input
+==a==
+==legal== <!-- a legal section -->
+==b==
+!! result
+==legal== <!-- a legal section -->
+!! end
+
+!! test
+Section extraction test with bogus <nowiki> heading (section 1)
+!! options
+section=1
+!! input
+==a==
+==bogus== <nowiki>not a legal section</nowiki>
+==b==
+!! result
+==a==
+==bogus== <nowiki>not a legal section</nowiki>
+!! end
+
+!! test
+Section extraction test with bogus <nowiki> heading (section 2)
+!! options
+section=2
+!! input
+==a==
+==bogus== <nowiki>not a legal section</nowiki>
+==b==
+!! result
+==b==
+!! end
+
+
+!! test
+Section extraction prefixed by comment (section 1) (bug 2587)
+!! options
+section=1
+!! input
+<!-- -->==sec1==
+==sec2==
+!!result
+<!-- -->==sec1==
+!!end
+
+!! test
+Section extraction prefixed by comment (section 2) (bug 2587)
+!! options
+section=2
+!! input
+<!-- -->==sec1==
+==sec2==
+!!result
+==sec2==
+!!end
+
+
+!! test
+Section extraction, mixed wiki and html (section 1) (bug 2607)
+!! options
+section=1
+!! input
+<h2>1</h2>
+one
+==2==
+two
+==3==
+three
+!! result
+<h2>1</h2>
+one
+!! end
+
+!! test
+Section extraction, mixed wiki and html (section 2) (bug 2607)
+!! options
+section=2
+!! input
+<h2>1</h2>
+one
+==2==
+two
+==3==
+three
+!! result
+==2==
+two
+!! end
+
+
+!! test
+Section extraction, heading surrounded by <noinclude> (bug 3342)
+!! options
+section=1
+!! input
+<noinclude>==a==</noinclude>
+text
+!! result
+<noinclude>==a==</noinclude>
+text
+!!end
+
+
+!! test
+Section extraction, HTML heading subsections (bug 5272)
+!! options
+section=1
+!! input
+<h2>a</h2>
+<h3>aa</h3>
+<h2>b</h2>
+!! result
+<h2>a</h2>
+<h3>aa</h3>
+!! end
+
+!! test
+Section extraction, HTML headings should be ignored in extensions (bug 3476)
+!! options
+section=2
+!! input
+<h2>a</h2>
+<tag>
+<h2>not b</h2>
+</tag>
+<h2>b</h2>
+!! result
+<h2>b</h2>
+!! end
+
+!! test
+Section replacement test (section 0)
+!! options
+replace=0,"xxx"
+!! input
+start
+==a==
+===aa===
+====aaa====
+==b==
+===ba===
+===bb===
+====bba====
+===bc===
+==c==
+===ca===
+!! result
+xxx
+
+==a==
+===aa===
+====aaa====
+==b==
+===ba===
+===bb===
+====bba====
+===bc===
+==c==
+===ca===
+!! end
+
+!! test
+Section replacement test (section 1)
+!! options
+replace=1,"xxx"
+!! input
+start
+==a==
+===aa===
+====aaa====
+==b==
+===ba===
+===bb===
+====bba====
+===bc===
+==c==
+===ca===
+!! result
+start
+xxx
+
+==b==
+===ba===
+===bb===
+====bba====
+===bc===
+==c==
+===ca===
+!! end
+
+!! test
+Section replacement test (section 2)
+!! options
+replace=2,"xxx"
+!! input
+start
+==a==
+===aa===
+====aaa====
+==b==
+===ba===
+===bb===
+====bba====
+===bc===
+==c==
+===ca===
+!! result
+start
+==a==
+xxx
+
+==b==
+===ba===
+===bb===
+====bba====
+===bc===
+==c==
+===ca===
+!! end
+
+!! test
+Section replacement test (section 3)
+!! options
+replace=3,"xxx"
+!! input
+start
+==a==
+===aa===
+====aaa====
+==b==
+===ba===
+===bb===
+====bba====
+===bc===
+==c==
+===ca===
+!! result
+start
+==a==
+===aa===
+xxx
+
+==b==
+===ba===
+===bb===
+====bba====
+===bc===
+==c==
+===ca===
+!! end
+
+!! test
+Section replacement test (section 4)
+!! options
+replace=4,"xxx"
+!! input
+start
+==a==
+===aa===
+====aaa====
+==b==
+===ba===
+===bb===
+====bba====
+===bc===
+==c==
+===ca===
+!! result
+start
+==a==
+===aa===
+====aaa====
+xxx
+
+==c==
+===ca===
+!! end
+
+!! test
+Section replacement test (section 5)
+!! options
+replace=5,"xxx"
+!! input
+start
+==a==
+===aa===
+====aaa====
+==b==
+===ba===
+===bb===
+====bba====
+===bc===
+==c==
+===ca===
+!! result
+start
+==a==
+===aa===
+====aaa====
+==b==
+xxx
+
+===bb===
+====bba====
+===bc===
+==c==
+===ca===
+!! end
+
+!! test
+Section replacement test (section 6)
+!! options
+replace=6,"xxx"
+!! input
+start
+==a==
+===aa===
+====aaa====
+==b==
+===ba===
+===bb===
+====bba====
+===bc===
+==c==
+===ca===
+!! result
+start
+==a==
+===aa===
+====aaa====
+==b==
+===ba===
+xxx
+
+===bc===
+==c==
+===ca===
+!! end
+
+!! test
+Section replacement test (section 7)
+!! options
+replace=7,"xxx"
+!! input
+start
+==a==
+===aa===
+====aaa====
+==b==
+===ba===
+===bb===
+====bba====
+===bc===
+==c==
+===ca===
+!! result
+start
+==a==
+===aa===
+====aaa====
+==b==
+===ba===
+===bb===
+xxx
+
+===bc===
+==c==
+===ca===
+!! end
+
+!! test
+Section replacement test (section 8)
+!! options
+replace=8,"xxx"
+!! input
+start
+==a==
+===aa===
+====aaa====
+==b==
+===ba===
+===bb===
+====bba====
+===bc===
+==c==
+===ca===
+!! result
+start
+==a==
+===aa===
+====aaa====
+==b==
+===ba===
+===bb===
+====bba====
+xxx
+
+==c==
+===ca===
+!!end
+
+!! test
+Section replacement test (section 9)
+!! options
+replace=9,"xxx"
+!! input
+start
+==a==
+===aa===
+====aaa====
+==b==
+===ba===
+===bb===
+====bba====
+===bc===
+==c==
+===ca===
+!! result
+start
+==a==
+===aa===
+====aaa====
+==b==
+===ba===
+===bb===
+====bba====
+===bc===
+xxx
+!! end
+
+!! test
+Section replacement test (section 10)
+!! options
+replace=10,"xxx"
+!! input
+start
+==a==
+===aa===
+====aaa====
+==b==
+===ba===
+===bb===
+====bba====
+===bc===
+==c==
+===ca===
+!! result
+start
+==a==
+===aa===
+====aaa====
+==b==
+===ba===
+===bb===
+====bba====
+===bc===
+==c==
+xxx
+!! end
+
+
+!! test
+Section extraction, HTML headings not at line boundaries (section 0)
+!! options
+section=0
+!! input
+<h2>Evil</h2><i>blah blah blah</i>
+
+evil blah
+
+<h2>Nice</h2>
+
+nice blah
+
+<i>extra evil</i><h2>Extra nasty</h2>
+
+extra nasty
+!! result
+!! end
+
+!! test
+Section extraction, HTML headings not at line boundaries (section 1)
+!! options
+section=1
+!! input
+<h2>Evil</h2><i>blah blah blah</i>
+
+evil blah
+
+<h2>Nice</h2>
+
+nice blah
+
+<i>extra evil</i><h2>Extra nasty</h2>
+
+extra nasty
+!! result
+<h2>Evil</h2><i>blah blah blah</i>
+
+evil blah
+!! end
+
+!! test
+Section extraction, HTML headings not at line boundaries (section 2)
+!! options
+section=2
+!! input
+<h2>Evil</h2><i>blah blah blah</i>
+
+evil blah
+
+<h2>Nice</h2>
+
+nice blah
+
+<i>extra evil</i><h2>Extra nasty</h2>
+
+extra nasty
+!! result
+<h2>Nice</h2>
+
+nice blah
+
+<i>extra evil</i>
+!! end
+
+!! test
+Section extraction, HTML headings not at line boundaries (section 3)
+!! options
+section=3
+!! input
+<h2>Evil</h2><i>blah blah blah</i>
+
+evil blah
+
+<h2>Nice</h2>
+
+nice blah
+
+<i>extra evil</i><h2>Extra nasty</h2>
+
+extra nasty
+!! result
+<h2>Extra nasty</h2>
+
+extra nasty
+!! end
+
+
+!! test
+Section extraction, heading followed by pre with 20 spaces (bug 6398)
+!! options
+section=1
+!! input
+==a==
+                    a
+!! result
+==a==
+                    a
+!! end
+
+!! test
+Section extraction, heading followed by pre with 19 spaces (bug 6398 sanity check)
+!! options
+section=1
+!! input
+==a==
+                   a
+!! result
+==a==
+                   a
+!! end
+
+!! test
+Handling of &#x0A; in URLs
+!! input
+**irc://&#x0A;a
+!! result
+<ul><li><ul><li><a href="irc://%0Aa" class="external free" title="irc://%0Aa" rel="nofollow">irc://%0Aa</a>
+</li></ul>
+</li></ul>
+
+!!end
+
+!! test
+5 quotes, code coverage +1 line
+!! input
+'''''
+!! result
+!! end
+
+!! test
+Special:Search page linking.
+!! input
+{{Special:search}}
+!! result
+<p><a href="/wiki/Special:Search" title="Special:Search">Special:Search</a>
+</p>
+!! end
+
+!! test
+Say the magic word
+!! input
+* {{PAGENAME}}
+* {{BASEPAGENAME}}
+* {{SUBPAGENAME}}
+* {{SUBPAGENAMEE}}
+* {{BASEPAGENAME}}
+* {{BASEPAGENAMEE}}
+* {{TALKPAGENAME}}
+* {{TALKPAGENAMEE}}
+* {{SUBJECTPAGENAME}}
+* {{SUBJECTPAGENAMEE}}
+* {{NAMESPACEE}}
+* {{NAMESPACE}}
+* {{TALKSPACE}}
+* {{TALKSPACEE}}
+* {{SUBJECTSPACE}}
+* {{SUBJECTSPACEE}}
+* {{Dynamic|{{NUMBEROFUSERS}}|{{NUMBEROFPAGES}}|{{CURRENTVERSION}}|{{CONTENTLANGUAGE}}|{{DIRECTIONMARK}}|{{CURRENTTIMESTAMP}}|{{NUMBEROFARTICLES}}}}
+!! result
+<ul><li> Parser test
+</li><li> Parser test
+</li><li> Parser test
+</li><li> Parser_test
+</li><li> Parser test
+</li><li> Parser_test
+</li><li> Talk:Parser test
+</li><li> Talk:Parser_test
+</li><li> Parser test
+</li><li> Parser_test
+</li><li> 
+</li><li> 
+</li><li> Talk
+</li><li> Talk
+</li><li> 
+</li><li> 
+</li><li> <a href="/index.php?title=Template:Dynamic&amp;action=edit" class="new" title="Template:Dynamic">Template:Dynamic</a>
+</li></ul>
+
+!! end
+### Note: Above tests excludes the "{{NUMBEROFADMINS}}" magic word because it generates a MySQL error when included.
+
+!! test
+Gallery
+!! input
+<gallery>
+image1.png |
+image2.gif|||||
+
+image3|
+image4    |300px| centre
+ image5.svg| http://///////
+[[x|xx]]]]
+* image6
+</gallery>
+!! result
+<table class="gallery" cellspacing="0" cellpadding="0">
+	<tr>
+		<td><div class="gallerybox" style="width: 150px;">
+			<div style="height: 152px;">Image1.png</div>
+			<div class="gallerytext">
+			</div>
+		</div></td>
+		<td><div class="gallerybox" style="width: 150px;">
+			<div style="height: 152px;">Image2.gif</div>
+			<div class="gallerytext">
+<p>||||
+</p>
+			</div>
+		</div></td>
+		<td><div class="gallerybox" style="width: 150px;">
+			<div style="height: 152px;">Image3</div>
+			<div class="gallerytext">
+			</div>
+		</div></td>
+		<td><div class="gallerybox" style="width: 150px;">
+			<div style="height: 152px;">Image4</div>
+			<div class="gallerytext">
+<p>300px| centre
+</p>
+			</div>
+		</div></td>
+	</tr>
+	<tr>
+		<td><div class="gallerybox" style="width: 150px;">
+			<div style="height: 152px;">Image5.svg</div>
+			<div class="gallerytext">
+<pre><a href="http://///////" class="external free" title="http://///////" rel="nofollow">http://///////</a>
+</pre>
+			</div>
+		</div></td>
+		<td><div class="gallerybox" style="width: 150px;">
+			<div style="height: 152px;">* image6</div>
+			<div class="gallerytext">
+			</div>
+		</div></td>
+	</tr>
+</table>
+
+!! end
+
+!! test
+HTML Hex character encoding (spells the word "JavaScript")
+!! input
+&#x4A;&#x061;&#x0076;&#x00061;&#x000053;&#x0000063;&#114;&#x0000069;&#00000112;&#x0000000074;
+!! result
+<p>&#x4a;&#x61;&#x76;&#x61;&#x53;&#x63;&#114;&#x69;&#112;&#x74;
+</p>
+!! end
+
+!! test
+__FORCETOC__ override
+!! input 
+__NEWSECTIONLINK__
+__FORCETOC__
+!! result
+<p><br />
+</p>
+!! end
+
+!! test
+ISBN code coverage
+!! input
+ISBN  978-0-1234-56&#x20;789
+!! result
+<p><a href="/index.php?title=Special:Booksources&amp;isbn=9780123456" class="internal">ISBN 978-0-1234-56</a>&#x20;789
+</p>
+!! end
+
+!! test
+ISBN followed by 5 spaces
+!! input
+ISBN    
+!! result
+<p>ISBN    
+</p>
+!! end
+
+!! test
+Double ISBN
+!! input
+ISBN ISBN 1234567890
+!! result
+<p>ISBN <a href="/index.php?title=Special:Booksources&amp;isbn=1234567890" class="internal">ISBN 1234567890</a>
+</p>
+!! end
+
+!! test
+Double RFC
+!! input
+RFC RFC 1234
+!! result
+<p>RFC <a href="http://tools.ietf.org/html/rfc1234" class="external" title="http://tools.ietf.org/html/rfc1234">RFC 1234</a>
+</p>
+!! end
+
+!! test
+Double RFC with a wiki link 
+!! input
+RFC [[RFC 1234]]
+!! result
+<p>RFC <a href="/index.php?title=RFC_1234&amp;action=edit" class="new" title="RFC 1234">RFC 1234</a>
+</p>
+!! end
+
+!! test
+RFC code coverage
+!! input
+RFC   983&#x20;987
+!! result
+<p><a href="http://tools.ietf.org/html/rfc983" class="external" title="http://tools.ietf.org/html/rfc983">RFC 983</a>&#x20;987
+</p>
+!! end
+
+!! test
+Centre-aligned image
+!! input
+[[Image:foobar.jpg|centre]]
+!! result
+<div class="center"><div class="floatnone"><span><a href="/wiki/Image:Foobar.jpg" class="image" title=""><img alt="" longdesc="/wiki/Image:Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a></span></div></div>
+
+!!end
+
+!! test
+None-aligned image
+!! input
+[[Image:foobar.jpg|none]]
+!! result
+<div class="floatnone"><span><a href="/wiki/Image:Foobar.jpg" class="image" title=""><img alt="" longdesc="/wiki/Image:Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a></span></div>
+
+!!end
+
+!! test
+Width + Height sized image (using px) (height is ignored)
+!! input
+[[Image:foobar.jpg|640x480px]]
+!! result
+<p><a href="/wiki/Image:Foobar.jpg" class="image" title=""><img alt="" longdesc="/wiki/Image:Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/640px-Foobar.jpg" width="640" height="73" /></a>
+</p>
+!!end
+
+!! test
+Another italics / bold test
+!! input
+ ''' ''x'
+!! result
+<pre>'<i> </i>x'
+</pre>
+!!end
+
+# Note the results may be incorrect, as parserTest output included this:
+# XML error: Mismatched tag at byte 6120:
+# ...<dd> </dt></dl> </dd...
+!! test
+dt/dd/dl test
+!! input
+:;;;::
+!! result
+<dl><dd><dl><dt><dl><dt><dl><dt><dl><dd><dl><dd>
+</dd></dl>
+</dd></dl>
+</dt></dl>
+</dt></dl>
+</dt></dl>
+</dd></dl>
+
+!!end
+
+
+# Images with the "|" character in external URLs in comment tags; Eats half the comment, leaves unmatched "</a>" tag.
+!! test
+Images with the "|" character in the comment
+!! input
+[[image:Foobar.jpg|thumb|An [http://test/?param1=|left|&param2=|x external] URL]]
+!! result
+<div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/Image:Foobar.jpg" class="internal" title="An external URL"><img alt="An external URL" longdesc="/wiki/Image:Foobar.jpg" class="thumbimage" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" /></a>  <div class="thumbcaption"><div class="magnify" style="float:right"><a href="/wiki/Image:Foobar.jpg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div>An <a href="http://test/?param1=|left|&amp;param2=|x" class="external text" title="http://test/?param1=|left|&amp;param2=|x" rel="nofollow">external</a> URL</div></div></div>
+
+!!end
+
+!! test
+[Before] HTML without raw HTML enabled ($wgRawHtml==false)
+!! input
+<html><script>alert(1);</script></html>
+!! result
+<p>&lt;html&gt;&lt;script&gt;alert(1);&lt;/script&gt;&lt;/html&gt;
+</p>
+!! end
+
+!! test
+HTML with raw HTML ($wgRawHtml==true)
+!! options
+rawhtml
+!! input
+<html><script>alert(1);</script></html>
+!! result
+<p><script>alert(1);</script>
+</p>
+!! end
+
+!! test
+Parents of subpages, one level up
+!! options
+subpage title=[[Subpage test/L1/L2/L3]]
+!! input
+[[../|L2]]
+!! result
+<p><a href="/index.php?title=Subpage_test/L1/L2&amp;action=edit" class="new" title="Subpage test/L1/L2">L2</a>
+</p>
+!! end
+
+
+!! test
+Parents of subpages, one level up, not named
+!! options
+subpage title=[[Subpage test/L1/L2/L3]]
+!! input
+[[../]]
+!! result
+<p><a href="/index.php?title=Subpage_test/L1/L2&amp;action=edit" class="new" title="Subpage test/L1/L2">Subpage test/L1/L2</a>
+</p>
+!! end
+
+
+
+!! test
+Parents of subpages, two levels up
+!! options
+disabled
+subpage title=[[Subpage test/L1/L2/L3]]
+!! input
+[[../../|L1]]2
+!! result
+<p><a href="/index.php?title=Subpage_test/L1&amp;action=edit" class="new" title="Subpage test/L1">L1</a>
+</p>
+!! end
+
+
+# Question: should result be "/index.php?title=Subpage_test/L1&amp;action=edit" instead?
+!! test
+Parents of subpages, two levels up, without trailing slash or name.
+!! options
+subpage title=[[Subpage test/L1/L2/L3]]
+!! input
+[[../..]]
+!! result
+<p><a href="/index.php?title=Subpage_test/L1/L2/..&amp;action=edit" class="new" title="Subpage test/L1">../..</a>
+</p>
+!! end
+
+# Question: Why should the link text in the above test be "../..", yet in this test the "../.." part is silently dropped?
+# Current result: <p><a href="/index.php?title=Subpage_test/L1////&amp;action=edit" class="new" title="Subpage test/L1////">///
+!! test
+Parents of subpages, two levels up, with lots of extra trailing slashes.
+!! options
+subpage title=[[Subpage test/L1/L2/L3]]
+!! input
+[[../../////]]
+!! result
+<p><a href="/index.php?title=Subpage_test/L1&amp;action=edit" class="new" title="Subpage test/L1">Subpage test/L1</a>
+</p>
+!! end
+
+!! test
+Definition list code coverage
+!! input
+; title   : def
+; title : def
+;title: def
+!! result
+<dl><dt> title  &nbsp;</dt><dd> def
+</dd><dt> title&nbsp;</dt><dd> def
+</dd><dt>title</dt><dd> def
+</dd></dl>
+
+!! end
+
+!! test
+Don't fall for the self-closing div
+!! input
+<div>hello world</div/>
+!! result
+<div>hello world</div>
+
+!! end
+
+!! test
+MSGNW magic word
+!! input
+{{MSGNW:msg}}
+!! result
+<p>&#91;&#91;:Template:Msg]]
+</p>
+!! end
+
+!! test
+RAW magic word
+!! input
+{{RAW:QUERTY}}
+!! result
+<p><a href="/index.php?title=Template:QUERTY&amp;action=edit" class="new" title="Template:QUERTY">Template:QUERTY</a>
+</p>
+!! end
+
+# This isn't needed for XHTML conformance, but would be handy as a fallback security measure
+!! test
+Always escape literal '>' in output, not just after '<'
+!! input
+><>
+!! result
+<p>&gt;&lt;&gt;
+</p>
+!! end
+
+!! test
+Template caching
+!! input
+{{Test}}
+{{Test}}
+!! result
+<p>This is a test template
+This is a test template
+</p>
+!! end
+
+
+!! article
+MediaWiki:Fake
+!! text
+==header==
+!! endarticle
+
+!! test
+Inclusion of !userCanEdit() content
+!! input
+{{MediaWiki:Fake}}
+!! result
+<a name="header"></a><h2><span class="editsection">[<a href="/index.php?title=MediaWiki:Fake&amp;action=edit&amp;section=1" title="MediaWiki:Fake">edit</a>]</span> <span class="mw-headline">header</span></h2>
+
+!! end
+
+
+!! test
+Out-of-order TOC heading levels
+!! input
+==2==
+======6======
+===3===
+=1=
+=====5=====
+==2==
+!! result
+<table id="toc" class="toc" summary="Contents"><tr><td><div id="toctitle"><h2>Contents</h2></div>
+<ul>
+<li class="toclevel-1"><a href="#2"><span class="tocnumber">1</span> <span class="toctext">2</span></a>
+<ul>
+<li class="toclevel-2"><a href="#6"><span class="tocnumber">1.1</span> <span class="toctext">6</span></a></li>
+<li class="toclevel-2"><a href="#3"><span class="tocnumber">1.2</span> <span class="toctext">3</span></a></li>
+</ul>
+</li>
+<li class="toclevel-1"><a href="#1_7"><span class="tocnumber">2</span> <span class="toctext">1</span></a>
+<ul>
+<li class="toclevel-2"><a href="#5"><span class="tocnumber">2.1</span> <span class="toctext">5</span></a></li>
+<li class="toclevel-2"><a href="#2_4"><span class="tocnumber">2.2</span> <span class="toctext">2</span></a></li>
+</ul>
+</li>
+</ul>
+</td></tr></table><script type="text/javascript"> if (window.showTocToggle) { var tocShowText = "show"; var tocHideText = "hide"; showTocToggle(); } </script>
+<a name="2"></a><h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: 2">edit</a>]</span> <span class="mw-headline">2</span></h2>
+<a name="6"></a><h6><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: 6">edit</a>]</span> <span class="mw-headline">6</span></h6>
+<a name="3"></a><h3><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=3" title="Edit section: 3">edit</a>]</span> <span class="mw-headline">3</span></h3>
+<a name="1_7"></a><h1><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=4" title="Edit section: 1">edit</a>]</span> <span class="mw-headline">1</span></h1>
+<a name="5"></a><h5><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=5" title="Edit section: 5">edit</a>]</span> <span class="mw-headline">5</span></h5>
+<a name="2_4"></a><h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=6" title="Edit section: 2">edit</a>]</span> <span class="mw-headline">2</span></h2>
+
+!! end
+
+
+!! test
+ISBN with a dummy number
+!! input
+ISBN ---
+!! result
+<p>ISBN ---
+</p>
+!! end
+
+
+!! test
+ISBN with space-delimited number
+!! input
+ISBN 92 9017 032 8
+!! result
+<p><a href="/index.php?title=Special:Booksources&amp;isbn=9290170328" class="internal">ISBN 92 9017 032 8</a>
+</p>
+!! end
+
+
+!! test
+ISBN with multiple spaces, no number
+!! input
+ISBN  foo
+!! result
+<p>ISBN  foo
+</p>
+!! end
+
+
+!! test
+ISBN length
+!! input
+ISBN 123456789
+
+ISBN 1234567890
+
+ISBN 12345678901
+!! result
+<p>ISBN 123456789
+</p><p><a href="/index.php?title=Special:Booksources&amp;isbn=1234567890" class="internal">ISBN 1234567890</a>
+</p><p>ISBN 12345678901
+</p>
+!! end
+
+
+!! test
+ISBN with trailing year (bug 8110)
+!! input
+ISBN 1-234-56789-0 - 2006
+
+ISBN 1 234 56789 0 - 2006
+!! result
+<p><a href="/index.php?title=Special:Booksources&amp;isbn=1234567890" class="internal">ISBN 1-234-56789-0</a> - 2006
+</p><p><a href="/index.php?title=Special:Booksources&amp;isbn=1234567890" class="internal">ISBN 1 234 56789 0</a> - 2006
+</p>
+!! end
+
+
+!! test
+Pages in namespace (Magic word disabled currently)
+!! input
+{{PAGESINNAMESPACE:}}
+!! result
+
+!! end
+
+
+!! test
+anchorencode
+!! input
+{{anchorencode:foo bar©#%n}}
+!! result
+<p>foo_bar.C2.A9.23.25n
+</p>
+!! end
+
+
+!! test
+Bug 8293: Use of center tag ruins paragraph formatting
+!! input
+<center>
+foo
+</center>
+
+bar
+
+ baz
+!! result
+<center>
+<p>foo
+</p>
+</center>
+<p>bar
+</p>
+<pre>baz
+</pre>
+!! end
+
+
+###
+### Language variants related tests
+###
+!! test
+Self-link in language variants
+!! options
+title=[[Dunav]] language=sr
+!! input
+Both [[Dunav]] and [[Дунав]] are names for this river.
+!! result
+<p>Both <strong class="selflink">Dunav</strong> and <strong class="selflink">Дунав</strong> are names for this river.
+</p>
+!!end
+
+
+!! test
+Link to pages in language variants
+!! options
+language=sr
+!! input
+Main Page can be written as [[Маин Паге]]
+!! result
+<p>Main Page can be written as <a href="/wiki/Main_Page" title="Main Page">Маин Паге</a>
+</p>
+!!end
+
+
+!! test
+Multiple links to pages in language variants
+!! options
+language=sr
+!! input
+[[Main Page]] can be written as [[Маин Паге]] same as [[Маин Паге]].
+!! result
+<p><a href="/wiki/Main_Page" title="Main Page">Main Page</a> can be written as <a href="/wiki/Main_Page" title="Main Page">Маин Паге</a> same as <a href="/wiki/Main_Page" title="Main Page">Маин Паге</a>.
+</p>
+!!end
+
+
+!! test
+Simple template in language variants
+!! options
+language=sr
+!! input
+{{тест}}
+!! result
+<p>This is a test template
+</p>
+!! end
+
+
+!! test
+Template with explicit namespace in language variants
+!! options
+language=sr
+!! input
+{{Template:тест}}
+!! result
+<p>This is a test template
+</p>
+!! end
+
+
+!! test
+Basic test for template parameter in language variants
+!! options
+language=sr
+!! input
+{{парамтест|param=foo}}
+!! result
+<p>This is a test template with parameter foo
+</p>
+!! end
+
+
+!! test
+Simple category in language variants
+!! options
+language=sr cat
+!! input
+[[:Category:МедиаWики Усер'с Гуиде]]
+!! result
+<a href="/wiki/Category:MediaWiki_User%27s_Guide" title="Category:MediaWiki User's Guide">MediaWiki User's Guide</a>
+!! end
+
+
+!! test
+Stripping -{}- tags (language variants)
+!! options
+language=sr
+!! input
+Latin proverb: -{Ne nuntium necare}-
+!! result
+<p>Latin proverb: Ne nuntium necare
+</p>
+!! end
+
+
+!! test
+Prevent conversion with -{}- tags (language variants)
+!! options
+language=sr variant=sr-ec
+!! input
+Latinski: -{Ne nuntium necare}-
+!! result
+<p>Латински: Ne nuntium necare
+</p>
+!! end
+
+
+!! test
+Prevent conversion of text with -{}- tags (language variants)
+!! options
+language=sr variant=sr-ec
+!! input
+Latinski: -{Ne nuntium necare}-
+!! result
+<p>Латински: Ne nuntium necare
+</p>
+!! end
+
+
+!! test
+Prevent conversion of links with -{}- tags (language variants)
+!! options
+language=sr variant=sr-ec
+!! input
+-{[[Main Page]]}-
+!! result
+<p><a href="/index.php?title=Main_Page&amp;variant=sr-ec" title="Main Page">Main Page</a>
+</p>
+!! end
+
+
+!! test
+-{}- tags within headlines (within html for parserConvert())
+!! options
+language=sr variant=sr-ec
+!! input
+== -{Naslov}- ==
+!! result
+<a name="-.7BNaslov.7D-"></a><h2><span class="editsection">[<a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Уреди део: Naslov">уреди</a>]</span> <span class="mw-headline"> Naslov </span></h2>
+
+!! end
+
+
+!! test
+Explicit definition of language variant alternatives
+!! options
+language=zh variant=zh-tw
+!! input
+-{zh:China;zh-tw:Taiwan}-, not China
+!! result
+<p>Taiwan, not China
+</p>
+!! end
+
+
+!! test
+Adding explicit session-wise language variant mapping (A flag)
+!! options
+language=zh variant=zh-tw
+!! input
+-{A|zh:China;zh-tw:Taiwan}- is China
+!! result
+<p>Taiwan is Taiwan
+</p>
+!! end
+
+
+!! test
+Adding explicit conversion rule for title (T flag)
+!! options
+language=zh variant=zh-tw
+!! input
+Should be stripped-{T|zh:China;zh-tw:Taiwan}-!
+!! result
+<p>Should be stripped!
+</p>
+!! end
+
+
+!! test
+Raw output of variant escape tags (R flag)
+!! options
+language=zh variant=zh-tw
+!! input
+Raw: -{R|zh:China;zh-tw:Taiwan}-
+!! result
+<p>Raw: zh:China;zh-tw:Taiwan
+</p>
+!! end
+
+
+!! test
+Do not convert roman numbers to language variants
+!! options
+language=sr variant=sr-ec
+!! input
+Fridrih IV je car.
+!! result
+<p>Фридрих IV је цар.
+</p>
+!! end
+
+
+#
+#
+#
+
+TODO:
+more images
+more tables
+math
+character entities
+and much more
+Try for 100% code coverage
Index: /MediaWiki/branches/1.11/maintenance/parserTestsParserHook.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/parserTestsParserHook.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/parserTestsParserHook.php	(revision 1280)
@@ -0,0 +1,33 @@
+<?php
+if ( ! defined( 'MEDIAWIKI' ) )
+	die( -1 );
+/**
+ * A basic extension that's used by the parser tests to test whether input and
+ * arguments are passed to extensions properly.
+ *
+ * @addtogroup Maintenance
+ *
+ * @author Ævar Arnfjörð Bjarmason <avarab@gmail.com>
+ * @copyright Copyright © 2005, 2006 Ævar Arnfjörð Bjarmason
+ * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
+ */
+
+$wgHooks['ParserTestParser'][] = 'wfParserTestParserHookSetup';
+
+function wfParserTestParserHookSetup( &$parser ) {
+	$parser->setHook( 'tag', 'wfParserTestParserHookHook' );
+
+	return true;
+}
+
+function wfParserTestParserHookHook( $in, $argv ) {
+	ob_start();
+	var_dump(
+		$in,
+		$argv
+	);
+	$ret = ob_get_clean();
+
+	return "<pre>\n$ret</pre>";
+}
+?>
Index: /MediaWiki/branches/1.11/maintenance/parserTestsParserTime.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/parserTestsParserTime.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/parserTestsParserTime.php	(revision 1280)
@@ -0,0 +1,25 @@
+<?php
+if ( ! defined( 'MEDIAWIKI' ) )
+	die( -1 );
+/**
+ * A basic extension that's used by the parser tests to test date magic words
+ *
+ * Handy so that we don't have to upgrade the parsertests every second to
+ * compensate with the passage of time and certainly less expensive than a
+ * time-freezing device, get yours now!
+ *
+ * @addtogroup Maintenance
+ *
+ * @author Ævar Arnfjörð Bjarmason <avarab@gmail.com>
+ * @copyright Copyright © 2005, 2006 Ævar Arnfjörð Bjarmason
+ * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
+ */
+
+$wgHooks['ParserGetVariableValueTs'][] = 'wfParserTimeSetup';
+
+function wfParserTimeSetup( &$parser, &$ts ) {
+	$ts = 123; //$ perl -le 'print scalar localtime 123' ==> Thu Jan  1 00:02:03 1970
+	
+	return true;
+}
+?>
Index: /MediaWiki/branches/1.11/maintenance/parserTestsStaticParserHook.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/parserTestsStaticParserHook.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/parserTestsStaticParserHook.php	(revision 1280)
@@ -0,0 +1,43 @@
+<?php
+if ( ! defined( 'MEDIAWIKI' ) )
+	die( -1 );
+/**
+ * A basic extension that's used by the parser tests to test whether the parser
+ * calls extensions when they're called inside comments, it shouldn't do that
+ *
+ * @addtogroup Maintenance
+ *
+ * @author Ævar Arnfjörð Bjarmason <avarab@gmail.com>
+ * @copyright Copyright © 2005, 2006 Ævar Arnfjörð Bjarmason
+ * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
+ */
+
+$wgHooks['ParserTestParser'][] = 'wfParserTestStaticParserHookSetup';
+
+function wfParserTestStaticParserHookSetup( &$parser ) {
+	$parser->setHook( 'statictag', 'wfParserTestStaticParserHookHook' );
+
+	return true;
+}
+
+function wfParserTestStaticParserHookHook( $in, $argv ) {
+	static $buf = null;
+	
+	if ( ! count( $argv ) ) {
+		$buf = $in;
+		return '';
+	} else if ( count( $argv ) === 1 && $argv['action'] === 'flush' && $in === null ) {
+		// Clear the buffer, we probably don't need to
+		$tmp = $buf;
+		$buf = null;
+		return $tmp;
+	} else
+		// wtf?
+		die(
+			"\nCall this extension as <statictag>string</statictag> or as" .
+			" <statictag action=flush/>, not in any other way.\n" .
+			"text: " . var_export( $in, true ) . "\n" .
+			"argv: " . var_export( $argv, true ) . "\n"
+		);
+}
+?>
Index: /MediaWiki/branches/1.11/maintenance/postgres/archives/patch-archive-ar_deleted.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/postgres/archives/patch-archive-ar_deleted.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/postgres/archives/patch-archive-ar_deleted.sql	(revision 1280)
@@ -0,0 +1,1 @@
+ALTER TABLE archive ADD ar_deleted INTEGER NOT NULL DEFAULT '0';
Index: /MediaWiki/branches/1.11/maintenance/postgres/archives/patch-archive2.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/postgres/archives/patch-archive2.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/postgres/archives/patch-archive2.sql	(revision 1280)
@@ -0,0 +1,15 @@
+ALTER TABLE archive RENAME to archive2;
+CREATE VIEW archive AS
+SELECT
+  ar_namespace, ar_title, ar_text, ar_comment, ar_user, ar_user_text,
+  ar_minor_edit, ar_flags, ar_rev_id, ar_text_id,
+       TO_CHAR(ar_timestamp, 'YYYYMMDDHH24MISS') AS ar_timestamp
+FROM archive2;
+
+CREATE RULE archive_insert AS ON INSERT TO archive
+DO INSTEAD INSERT INTO archive2 VALUES (
+  NEW.ar_namespace, NEW.ar_title, NEW.ar_text, NEW.ar_comment, NEW.ar_user, NEW.ar_user_text,
+  TO_DATE(NEW.ar_timestamp, 'YYYYMMDDHH24MISS'),
+  NEW.ar_minor_edit, NEW.ar_flags, NEW.ar_rev_id, NEW.ar_text_id
+);
+
Index: /MediaWiki/branches/1.11/maintenance/postgres/archives/patch-archive_delete.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/postgres/archives/patch-archive_delete.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/postgres/archives/patch-archive_delete.sql	(revision 1280)
@@ -0,0 +1,5 @@
+CREATE RULE archive_delete AS ON DELETE TO archive
+DO INSTEAD DELETE FROM archive2 WHERE
+  archive2.ar_title = OLD.ar_title AND
+  archive2.ar_namespace = OLD.ar_namespace AND
+  archive2.ar_rev_id = OLD.ar_rev_id;
Index: /MediaWiki/branches/1.11/maintenance/postgres/archives/patch-archive_insert.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/postgres/archives/patch-archive_insert.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/postgres/archives/patch-archive_insert.sql	(revision 1280)
@@ -0,0 +1,6 @@
+CREATE OR REPLACE RULE archive_insert AS ON INSERT TO archive
+DO INSTEAD INSERT INTO archive2 VALUES (
+  NEW.ar_namespace, NEW.ar_title, NEW.ar_text, NEW.ar_comment, NEW.ar_user, NEW.ar_user_text,
+  TO_TIMESTAMP(NEW.ar_timestamp, 'YYYYMMDDHH24MISS'),
+  NEW.ar_minor_edit, NEW.ar_flags, NEW.ar_rev_id, NEW.ar_text_id
+);
Index: /MediaWiki/branches/1.11/maintenance/postgres/archives/patch-mediawiki_version.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/postgres/archives/patch-mediawiki_version.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/postgres/archives/patch-mediawiki_version.sql	(revision 1280)
@@ -0,0 +1,18 @@
+CREATE TABLE mediawiki_version (
+  type         TEXT         NOT NULL,
+  mw_version   TEXT         NOT NULL,
+  notes        TEXT             NULL,
+
+  pg_version   TEXT             NULL,
+  pg_dbname    TEXT             NULL,
+  pg_user      TEXT             NULL,
+  pg_port      TEXT             NULL,
+  mw_schema    TEXT             NULL,
+  ts2_schema   TEXT             NULL,
+  ctype        TEXT             NULL,
+
+  sql_version  TEXT             NULL,
+  sql_date     TEXT             NULL,
+  cdate        TIMESTAMPTZ  NOT NULL DEFAULT now()
+);
+
Index: /MediaWiki/branches/1.11/maintenance/postgres/archives/patch-mwuser.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/postgres/archives/patch-mwuser.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/postgres/archives/patch-mwuser.sql	(revision 1280)
@@ -0,0 +1,1 @@
+ALTER TABLE "user" RENAME TO mwuser;
Index: /MediaWiki/branches/1.11/maintenance/postgres/archives/patch-page_deleted.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/postgres/archives/patch-page_deleted.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/postgres/archives/patch-page_deleted.sql	(revision 1280)
@@ -0,0 +1,11 @@
+CREATE FUNCTION page_deleted() RETURNS TRIGGER LANGUAGE plpgsql AS
+$mw$
+BEGIN
+DELETE FROM recentchanges WHERE rc_namespace = OLD.page_namespace AND rc_title = OLD.page_title;
+RETURN NULL;
+END;
+$mw$;
+
+CREATE TRIGGER page_deleted AFTER DELETE ON page
+  FOR EACH ROW EXECUTE PROCEDURE page_deleted();
+
Index: /MediaWiki/branches/1.11/maintenance/postgres/archives/patch-page_restrictions.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/postgres/archives/patch-page_restrictions.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/postgres/archives/patch-page_restrictions.sql	(revision 1280)
@@ -0,0 +1,10 @@
+CREATE TABLE page_restrictions (
+  pr_page      INTEGER       NULL  REFERENCES page (page_id) ON DELETE CASCADE,
+  pr_type   TEXT         NOT NULL,
+  pr_level  TEXT         NOT NULL,
+  pr_cascade SMALLINT    NOT NULL,
+  pr_user   INTEGER          NULL,
+  pr_expiry TIMESTAMPTZ      NULL
+);
+ALTER TABLE page_restrictions ADD CONSTRAINT page_restrictions_pk PRIMARY KEY (pr_page,pr_type);
+
Index: /MediaWiki/branches/1.11/maintenance/postgres/archives/patch-pagecontent.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/postgres/archives/patch-pagecontent.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/postgres/archives/patch-pagecontent.sql	(revision 1280)
@@ -0,0 +1,1 @@
+ALTER TABLE "text" RENAME TO pagecontent;
Index: /MediaWiki/branches/1.11/maintenance/postgres/archives/patch-profiling.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/postgres/archives/patch-profiling.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/postgres/archives/patch-profiling.sql	(revision 1280)
@@ -0,0 +1,7 @@
+CREATE TABLE profiling (
+  pf_count   INTEGER         NOT NULL DEFAULT 0,
+  pf_time    NUMERIC(18,10)  NOT NULL DEFAULT 0,
+  pf_name    TEXT            NOT NULL,
+  pf_server  TEXT            NULL
+);
+CREATE UNIQUE INDEX pf_name_server ON profiling (pf_name, pf_server);
Index: /MediaWiki/branches/1.11/maintenance/postgres/archives/patch-querycachetwo.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/postgres/archives/patch-querycachetwo.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/postgres/archives/patch-querycachetwo.sql	(revision 1280)
@@ -0,0 +1,12 @@
+CREATE TABLE querycachetwo (
+  qcc_type          TEXT     NOT NULL,
+  qcc_value         SMALLINT NOT NULL  DEFAULT 0,
+  qcc_namespace     INTEGER  NOT NULL  DEFAULT 0,
+  qcc_title         TEXT     NOT NULL  DEFAULT '',
+  qcc_namespacetwo  INTEGER  NOT NULL  DEFAULT 0,
+  qcc_titletwo      TEXT     NOT NULL  DEFAULT ''
+);
+CREATE INDEX querycachetwo_type_value ON querycachetwo (qcc_type, qcc_value);
+CREATE INDEX querycachetwo_title      ON querycachetwo (qcc_type,qcc_namespace,qcc_title);
+CREATE INDEX querycachetwo_titletwo   ON querycachetwo (qcc_type,qcc_namespacetwo,qcc_titletwo);
+
Index: /MediaWiki/branches/1.11/maintenance/postgres/archives/patch-rc_cur_id-not-null.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/postgres/archives/patch-rc_cur_id-not-null.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/postgres/archives/patch-rc_cur_id-not-null.sql	(revision 1280)
@@ -0,0 +1,1 @@
+ALTER TABLE recentchanges ALTER rc_cur_id DROP NOT NULL;
Index: /MediaWiki/branches/1.11/maintenance/postgres/archives/patch-redirect.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/postgres/archives/patch-redirect.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/postgres/archives/patch-redirect.sql	(revision 1280)
@@ -0,0 +1,7 @@
+CREATE TABLE redirect (
+  rd_from       INTEGER  NOT NULL  REFERENCES page(page_id) ON DELETE CASCADE,
+  rd_namespace  SMALLINT NOT NULL,
+  rd_title      TEXT     NOT NULL
+);
+CREATE INDEX redirect_ns_title ON redirect (rd_namespace,rd_title,rd_from);
+
Index: /MediaWiki/branches/1.11/maintenance/postgres/archives/patch-remove-archive2.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/postgres/archives/patch-remove-archive2.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/postgres/archives/patch-remove-archive2.sql	(revision 1280)
@@ -0,0 +1,3 @@
+DROP VIEW archive;
+ALTER TABLE archive2 RENAME TO archive;
+ALTER TABLE archive ADD ar_len INTEGER;
Index: /MediaWiki/branches/1.11/maintenance/postgres/archives/patch-rev_text_id_idx.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/postgres/archives/patch-rev_text_id_idx.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/postgres/archives/patch-rev_text_id_idx.sql	(revision 1280)
@@ -0,0 +1,1 @@
+CREATE INDEX rev_text_id_idx ON revision (rev_text_id);
Index: /MediaWiki/branches/1.11/maintenance/postgres/archives/patch-revision_rev_user_fkey.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/postgres/archives/patch-revision_rev_user_fkey.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/postgres/archives/patch-revision_rev_user_fkey.sql	(revision 1280)
@@ -0,0 +1,4 @@
+ALTER TABLE revision DROP CONSTRAINT revision_rev_user_fkey;
+ALTER TABLE revision ADD CONSTRAINT revision_rev_user_fkey
+  FOREIGN KEY (rev_user) REFERENCES mwuser(user_id) ON DELETE RESTRICT;
+
Index: /MediaWiki/branches/1.11/maintenance/postgres/compare_schemas.pl
===================================================================
--- /MediaWiki/branches/1.11/maintenance/postgres/compare_schemas.pl	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/postgres/compare_schemas.pl	(revision 1280)
@@ -0,0 +1,245 @@
+#!/usr/bin/perl
+
+## Rough check that the base and postgres "tables.sql" are in sync
+## Should be run from maintenance/postgres
+
+use strict;
+use warnings;
+use Data::Dumper;
+
+my @old = ('../tables.sql');
+my $new = 'tables.sql';
+my @xfile;
+
+## Read in exceptions and other metadata
+my %ok;
+while (<DATA>) {
+	next unless /^(\w+)\s*:\s*([^#]+)/;
+	my ($name,$val) = ($1,$2);
+	chomp $val;
+	if ($name eq 'RENAME') {
+		die "Invalid rename\n" unless $val =~ /(\w+)\s+(\w+)/;
+		$ok{OLD}{$1} = $2;
+		$ok{NEW}{$2} = $1;
+		next;
+	}
+	if ($name eq 'XFILE') {
+		push @xfile, $val;
+		next;
+	}
+	for (split /\s+/ => $val) {
+		$ok{$name}{$_} = 0;
+	}
+}
+
+my $datatype = join '|' => qw(
+bool
+tinyint int bigint real float
+tinytext mediumtext text char varchar varbinary
+timestamp datetime
+tinyblob mediumblob blob
+);
+$datatype .= q{|ENUM\([\"\w, ]+\)};
+$datatype = qr{($datatype)};
+
+my $typeval = qr{(\(\d+\))?};
+
+my $typeval2 = qr{ unsigned| binary| NOT NULL| NULL| auto_increment| default ['\-\d\w"]+| REFERENCES .+CASCADE};
+
+my $indextype = join '|' => qw(INDEX KEY FULLTEXT), 'PRIMARY KEY', 'UNIQUE INDEX', 'UNIQUE KEY';
+$indextype = qr{$indextype};
+
+my $engine = qr{TYPE|ENGINE};
+
+my $tabletype = qr{InnoDB|MyISAM|HEAP|HEAP MAX_ROWS=\d+|InnoDB MAX_ROWS=\d+ AVG_ROW_LENGTH=\d+};
+
+my $charset = qr{utf8|binary};
+
+open my $newfh, '<', $new or die qq{Could not open $new: $!\n};
+
+
+my ($table,%old);
+
+## Read in the xfiles
+my %xinfo;
+for my $xfile (@xfile) {
+	print "Loading $xfile\n";
+	my $info = &parse_sql($xfile);
+	for (keys %$info) {
+		$xinfo{$_} = $info->{$_};
+	}
+}
+
+for my $oldfile (@old) {
+	print "Loading $oldfile\n";
+	my $info = &parse_sql($oldfile);
+	for (keys %xinfo) {
+		$info->{$_} = $xinfo{$_};
+	}
+	$old{$oldfile} = $info;
+}
+
+sub parse_sql {
+
+	my $oldfile = shift;
+
+	open my $oldfh, '<', $oldfile or die qq{Could not open $oldfile: $!\n};
+
+	my %info;
+	while (<$oldfh>) {
+		next if /^\s*\-\-/ or /^\s+$/;
+		s/\s*\-\- [\w ]+$//;
+		chomp;
+
+		if (/CREATE\s*TABLE/i) {
+			m{^CREATE TABLE /\*\$wgDBprefix\*/(\w+) \($}
+				or die qq{Invalid CREATE TABLE at line $. of $oldfile\n};
+			$table = $1;
+			$info{$table}{name}=$table;
+		}
+		elsif (m#^\) /\*\$wgDBTableOptions\*/#) {
+			$info{$table}{engine} = 'TYPE';
+			$info{$table}{type} = 'variable';
+		}
+		elsif (/^\) ($engine)=($tabletype);$/) {
+			$info{$table}{engine}=$1;
+			$info{$table}{type}=$2;
+		}
+		elsif (/^\) ($engine)=($tabletype), DEFAULT CHARSET=($charset);$/) {
+			$info{$table}{engine}=$1;
+			$info{$table}{type}=$2;
+			$info{$table}{charset}=$3;
+		}
+		elsif (/^  (\w+) $datatype$typeval$typeval2{0,3},?$/) {
+			$info{$table}{column}{$1} = $2;
+		}
+		elsif (/^  ($indextype)(?: (\w+))? \(([\w, \(\)]+)\),?$/) {
+			$info{$table}{lc $1.'_name'} = $2 ? $2 : '';
+			$info{$table}{lc $1.'pk_target'} = $3;
+		}
+		else {
+			die "Cannot parse line $. of $oldfile:\n$_\n";
+		}
+
+	}
+	close $oldfh;
+
+	return \%info;
+
+} ## end of parse_sql
+
+for my $oldfile (@old) {
+
+## Begin non-standard indent
+
+## MySQL sanity checks
+for my $table (sort keys %{$old{$oldfile}}) {
+	my $t = $old{$oldfile}{$table};
+	if (($oldfile =~ /5/ and $t->{engine} ne 'ENGINE')
+		or
+		($oldfile !~ /5/ and $t->{engine} ne 'TYPE')) {
+		die "Invalid engine for $oldfile: $t->{engine}\n" unless $t->{name} eq 'profiling';
+	}
+	my $charset = $t->{charset} || '';
+	if ($oldfile !~ /binary/ and $charset eq 'binary') {
+		die "Invalid charset for $oldfile: $charset\n";
+	}
+}
+
+my $dtype = join '|' => qw(
+SMALLINT INTEGER BIGINT NUMERIC SERIAL
+TEXT CHAR VARCHAR
+BYTEA
+TIMESTAMPTZ
+CIDR
+);
+$dtype = qr{($dtype)};
+my %new;
+my ($infunction,$inview,$inrule) = (0,0,0);
+seek $newfh, 0, 0;
+while (<$newfh>) {
+	next if /^\s*\-\-/ or /^\s*$/;
+	s/\s*\-\- [\w ']+$//;
+	next if /^BEGIN;/ or /^SET / or /^COMMIT;/;
+	next if /^CREATE SEQUENCE/;
+	next if /^CREATE(?: UNIQUE)? INDEX/;
+	next if /^CREATE FUNCTION/;
+	next if /^CREATE TRIGGER/ or /^  FOR EACH ROW/;
+	next if /^INSERT INTO/ or /^  VALUES \(/;
+	next if /^ALTER TABLE/;
+	chomp;
+
+	if (/^\$mw\$;?$/) {
+		$infunction = $infunction ? 0 : 1;
+		next;
+	}
+	next if $infunction;
+
+	next if /^CREATE VIEW/ and $inview = 1;
+	if ($inview) {
+		/;$/ and $inview = 0;
+		next;
+	}
+
+	next if /^CREATE RULE/ and $inrule = 1;
+	if ($inrule) {
+		/;$/ and $inrule = 0;
+		next;
+	}
+
+	if (/^CREATE TABLE "?(\w+)"? \($/) {
+		$table = $1;
+		$new{$table}{name}=$table;
+	}
+	elsif (/^\);$/) {
+	}
+	elsif (/^  (\w+) +$dtype/) {
+		$new{$table}{column}{$1} = $2;
+	}
+	else {
+		die "Cannot parse line $. of $new:\n$_\n";
+	}
+}
+
+## Old but not new
+for my $t (sort keys %{$old{$oldfile}}) {
+	if (!exists $new{$t} and !exists $ok{OLD}{$t}) {
+		print "Table not in $new: $t\n";
+		next;
+	}
+	next if exists $ok{OLD}{$t} and !$ok{OLD}{$t};
+	my $newt = exists $ok{OLD}{$t} ? $ok{OLD}{$t} : $t;
+	my $oldcol = $old{$oldfile}{$t}{column};
+	my $newcol = $new{$newt}{column};
+	for my $c (keys %$oldcol) {
+		if (!exists $newcol->{$c}) {
+			print "Column $t.$c not in $new\n";
+			next;
+		}
+	}
+	for my $c (keys %$newcol) {
+		if (!exists $oldcol->{$c}) {
+			print "Column $t.$c not in $oldfile\n";
+			next;
+		}
+	}
+}
+## New but not old:
+for (sort keys %new) {
+	if (!exists $old{$oldfile}{$_} and !exists $ok{NEW}{$_}) {
+		print "Not in $oldfile: $_\n";
+		next;
+	}
+}
+
+
+} ## end each file to be parsed
+
+
+__DATA__
+## Known exceptions
+OLD: searchindex          ## We use tsearch2 directly on the page table instead
+RENAME: user mwuser       ## Reserved word causing lots of problems
+RENAME: text pagecontent  ## Reserved word
+NEW: mediawiki_version    ## Just us, for now
+XFILE: ../archives/patch-profiling.sql
Index: /MediaWiki/branches/1.11/maintenance/postgres/mediawiki_mysql2postgres.pl
===================================================================
--- /MediaWiki/branches/1.11/maintenance/postgres/mediawiki_mysql2postgres.pl	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/postgres/mediawiki_mysql2postgres.pl	(revision 1280)
@@ -0,0 +1,444 @@
+#!/usr/bin/perl
+
+## Convert data from a MySQL mediawiki database into a Postgres mediawiki database
+## svn: $Id: mediawiki_mysql2postgres.pl 21254 2007-04-14 02:10:03Z greg $
+
+use strict;
+use warnings;
+use Data::Dumper;
+use Getopt::Long;
+
+use vars qw(%table %tz %special @torder $COM);
+my $VERSION = '1.2';
+
+## The following options can be changed via command line arguments:
+my $MYSQLDB       = '';
+my $MYSQLUSER     = '';
+
+## If the following are zero-length, we omit their arguments entirely:
+my $MYSQLHOST     = '';
+my $MYSQLPASSWORD = '';
+my $MYSQLSOCKET   = '';
+
+## Name of the dump file created
+my $MYSQLDUMPFILE = 'mediawiki_upgrade.pg';
+
+## How verbose should this script be (0, 1, or 2)
+my $verbose = 0;
+
+my $help = 0;
+
+my $USAGE = "
+Usage: $0 --db=<dbname> --user=<user> [OPTION]...
+Example: $0 --db=wikidb --user=wikiuser --pass=sushi
+
+Converts a MediaWiki schema from MySQL to Postgres
+Options:
+  db       Name of the MySQL database
+  user     MySQL database username
+  pass     MySQL database password
+  host     MySQL database host
+  socket   MySQL database socket
+  verbose  Verbosity, increases with multiple uses
+";
+
+GetOptions
+	(
+	 'db=s'     => \$MYSQLDB,
+	 'user=s'   => \$MYSQLUSER,
+	 'pass=s'   => \$MYSQLPASSWORD,
+	 'host=s'   => \$MYSQLHOST,
+	 'socket=s' => \$MYSQLSOCKET,
+	 'verbose+' => \$verbose,
+	 'help'     => \$help,
+ );
+
+die $USAGE
+	if ! length $MYSQLDB
+	or ! length $MYSQLUSER
+	or $help;
+
+## The Postgres schema file: should not be changed
+my $PG_SCHEMA = 'tables.sql';
+
+## What version we default to when we can't parse the old schema
+my $MW_DEFAULT_VERSION = 110;
+
+## Try and find a working version of mysqldump
+$verbose and warn "Locating the mysqldump executable\n";
+my @MYSQLDUMP = ('/usr/local/bin/mysqldump', '/usr/bin/mysqldump');
+my $MYSQLDUMP;
+for my $mytry (@MYSQLDUMP) {
+	next if ! -e $mytry;
+	-x $mytry or die qq{Not an executable file: "$mytry"\n};
+	my $version = qx{$mytry -V};
+	$version =~ /^mysqldump\s+Ver\s+\d+/ or die qq{Program at "$mytry" does not act like mysqldump\n};
+	$MYSQLDUMP = $mytry;
+}
+$MYSQLDUMP or die qq{Could not find the mysqldump program\n};
+
+## Flags we use for mysqldump
+my @MYSQLDUMPARGS = qw(
+--skip-lock-tables
+--complete-insert
+--skip-extended-insert
+--skip-add-drop-table
+--skip-add-locks
+--skip-disable-keys
+--skip-set-charset
+--skip-comments
+--skip-quote-names
+);
+
+
+$verbose and warn "Checking that mysqldump can handle our flags\n";
+## Make sure this version can handle all the flags we want.
+## Combine with user dump below
+my $MYSQLDUMPARGS = join ' ' => @MYSQLDUMPARGS;
+## Argh. Any way to make this work on Win32?
+my $version = qx{$MYSQLDUMP $MYSQLDUMPARGS 2>&1};
+if ($version =~ /unknown option/) {
+	die qq{Sorry, you need to use a newer version of the mysqldump program than the one at "$MYSQLDUMP"\n};
+}
+
+push @MYSQLDUMPARGS, "--user=$MYSQLUSER";
+length $MYSQLPASSWORD and push @MYSQLDUMPARGS, "--password=$MYSQLPASSWORD";
+length $MYSQLHOST and push @MYSQLDUMPARGS, "--host=$MYSQLHOST";
+
+## Open the dump file to hold the mysqldump output
+open my $mdump, '+>', $MYSQLDUMPFILE or die qq{Could not open "$MYSQLDUMPFILE": $!\n};
+print qq{Writing file "$MYSQLDUMPFILE"\n};
+
+open my $mfork2, '-|' or exec $MYSQLDUMP, @MYSQLDUMPARGS, '--no-data', $MYSQLDB;
+my $oldselect = select $mdump;
+
+print while <$mfork2>;
+
+## Slurp in the current schema
+my $current_schema;
+seek $mdump, 0, 0;
+{
+	local $/;
+	$current_schema = <$mdump>;
+}
+seek $mdump, 0, 0;
+truncate $mdump, 0;
+
+warn qq{Trying to determine database version...\n} if $verbose;
+
+my $current_version = 0;
+if ($current_schema =~ /CREATE TABLE \S+cur /) {
+	$current_version = 103;
+}
+elsif ($current_schema =~ /CREATE TABLE \S+brokenlinks /) {
+	$current_version = 104;
+}
+elsif ($current_schema !~ /CREATE TABLE \S+templatelinks /) {
+	$current_version = 105;
+}
+elsif ($current_schema !~ /CREATE TABLE \S+validate /) {
+	$current_version = 106;
+}
+elsif ($current_schema !~ /ipb_auto tinyint/) {
+	$current_version = 107;
+}
+elsif ($current_schema !~ /CREATE TABLE \S+profiling /) {
+	$current_version = 108;
+}
+elsif ($current_schema !~ /CREATE TABLE \S+querycachetwo /) {
+	$current_version = 109;
+}
+else {
+	$current_version = $MW_DEFAULT_VERSION;
+}
+
+if (!$current_version) {
+	warn qq{WARNING! Could not figure out the old version, assuming MediaWiki $MW_DEFAULT_VERSION\n};
+	$current_version = $MW_DEFAULT_VERSION;
+}
+
+## Check for a table prefix:
+my $table_prefix = '';
+if ($current_schema =~ /CREATE TABLE (\S+)querycache /) {
+	$table_prefix = $1;
+}
+
+warn qq{Old schema is from MediaWiki version $current_version\n} if $verbose;
+warn qq{Table prefix is "$table_prefix"\n} if $verbose and length $table_prefix;
+
+$verbose and warn qq{Writing file "$MYSQLDUMPFILE"\n};
+my $now = scalar localtime;
+my $conninfo = '';
+$MYSQLHOST and $conninfo .= "\n--   host      $MYSQLHOST";
+$MYSQLSOCKET and $conninfo .= "\n--   socket    $MYSQLSOCKET";
+
+print qq{
+-- Dump of MySQL Mediawiki tables for import into a Postgres Mediawiki schema
+-- Performed by the program: $0
+-- Version: $VERSION (subversion }.q{$LastChangedRevision: 21254 $}.qq{)
+-- Author: Greg Sabino Mullane <greg\@turnstep.com> Comments welcome
+--
+-- This file was created: $now
+-- Executable used: $MYSQLDUMP
+-- Connection information:
+--   database:  $MYSQLDB
+--   user:      $MYSQLUSER$conninfo
+
+-- This file can be imported manually with psql like so:
+-- psql -p port# -h hostname -U username -f $MYSQLDUMPFILE databasename
+-- This will overwrite any existing MediaWiki information, so be careful
+
+};
+
+## psql specific stuff
+print q{
+\\set ON_ERROR_STOP
+BEGIN;
+SET client_min_messages = 'WARNING';
+SET timezone = 'GMT';
+};
+
+warn qq{Reading in the Postgres schema information\n} if $verbose;
+open my $schema, '<', $PG_SCHEMA
+	or die qq{Could not open "$PG_SCHEMA": make sure this script is run from maintenance/postgres/\n};
+my $t;
+while (<$schema>) {
+	if (/CREATE TABLE\s+(\S+)/) {
+		$t = $1;
+		$table{$t}={};
+		$verbose > 1 and warn qq{  Found table $t\n};
+	}
+	elsif (/^ +(\w+)\s+TIMESTAMP/) {
+		$tz{$t}{$1}++;
+		$verbose > 1 and warn qq{    Got a timestamp for column $1\n};
+	}
+	elsif (/REFERENCES\s*([^( ]+)/) {
+		my $ref = $1;
+		exists $table{$ref} or die qq{No parent table $ref found for $t\n};
+		$table{$t}{$ref}++;
+	}
+}
+close $schema or die qq{Could not close "$PG_SCHEMA": $!\n};
+
+## Read in special cases and table/version information
+$verbose and warn qq{Reading in schema exception information\n};
+my %version_tables;
+while (<DATA>) {
+	if (/^VERSION\s+(\d+\.\d+):\s+(.+)/) {
+		my $list = join '|' => split /\s+/ => $2;
+		$version_tables{$1} = qr{\b$list\b};
+		next;
+	}
+	next unless /^(\w+)\s*(.*)/;
+	$special{$1} = $2||'';
+	$special{$2} = $1 if length $2;
+}
+
+## Determine the order of tables based on foreign key constraints
+$verbose and warn qq{Figuring out order of tables to dump\n};
+my %dumped;
+my $bail = 0;
+{
+	my $found=0;
+	T: for my $t (sort keys %table) {
+		next if exists $dumped{$t} and $dumped{$t} >= 1;
+		$found=1;
+		for my $dep (sort keys %{$table{$t}}) {
+			next T if ! exists $dumped{$dep} or $dumped{$dep} < 0;
+		}
+		$dumped{$t} = -1 if ! exists $dumped{$t};
+		## Skip certain tables that are not imported
+		next if exists $special{$t} and !$special{$t};
+		push @torder, $special{$t} || $t;
+	}
+	last if !$found;
+	push @torder, '---';
+	for (values %dumped) { $_+=2; }
+	die "Too many loops!\n" if $bail++ > 1000;
+	redo;
+}
+
+## Prepare the Postgres database for the move
+$verbose and warn qq{Writing Postgres transformation information\n};
+
+print "\n-- Empty out all existing tables\n";
+$verbose and warn qq{Writing truncates to empty existing tables\n};
+
+
+for my $t (@torder, 'objectcache', 'querycache') {
+	next if $t eq '---';
+	my $tname = $special{$t}||$t;
+	printf qq{TRUNCATE TABLE %-20s CASCADE;\n}, qq{"$tname"};
+}
+print "\n\n";
+
+print qq{-- Temporarily rename pagecontent to "text"\n};
+print qq{ALTER TABLE pagecontent RENAME TO "text";\n\n};
+
+print qq{-- Allow rc_ip to contain empty string, will convert at end\n};
+print qq{ALTER TABLE recentchanges ALTER rc_ip TYPE text USING host(rc_ip);\n\n};
+
+print "-- Changing all timestamp fields to handle raw integers\n";
+for my $t (sort keys %tz) {
+	next if $t eq 'archive2';
+	for my $c (sort keys %{$tz{$t}}) {
+		printf "ALTER TABLE %-18s ALTER %-25s TYPE TEXT;\n", $t, $c;
+	}
+}
+print "\n";
+
+print q{
+INSERT INTO page VALUES (0,-1,'Dummy Page','',0,0,0,default,now(),0,10);
+};
+
+## If we have a table _prefix, we need to temporarily rename all of our Postgres
+## tables temporarily for the import. Perhaps consider making this an auto-schema
+## thing in the future.
+if (length $table_prefix) {
+	print qq{\n\n-- Temporarily renaming tables to accomodate the table_prefix "$table_prefix"\n\n};
+	for my $t (@torder) {
+		next if $t eq '---';
+		my $tname = $special{$t}||$t;
+		printf qq{ALTER TABLE %-18s RENAME TO "${table_prefix}$tname"\n}, qq{"$tname"};
+	}
+}
+
+
+## Try and dump the ill-named "user" table:
+## We do this table alone because "user" is a reserved word.
+print q{
+
+SET escape_string_warning TO 'off';
+\\o /dev/null
+
+-- Postgres uses a table name of "mwuser" instead of "user"
+
+-- Create a dummy user to satisfy fk contraints especially with revisions
+SELECT setval('user_user_id_seq',0,'false');
+INSERT INTO mwuser
+  VALUES (DEFAULT,'Anonymous','',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,now(),now());
+
+};
+
+push @MYSQLDUMPARGS, '--no-create-info';
+
+$verbose and warn qq{Dumping "user" table\n};
+$verbose > 2 and warn Dumper \@MYSQLDUMPARGS;
+my $usertable = "${table_prefix}user";
+open my $mfork, '-|' or exec $MYSQLDUMP, @MYSQLDUMPARGS, $MYSQLDB, $usertable;
+## Unfortunately, there is no easy way to catch errors
+my $numusers = 0;
+while (<$mfork>) {
+	++$numusers and print if s/INSERT INTO $usertable/INSERT INTO mwuser/;
+}
+close $mfork;
+if ($numusers < 1) {
+	warn qq{No users found, probably a connection error.\n};
+	print qq{ERROR: No users found, connection failed, or table "$usertable" does not exist. Dump aborted.\n};
+	close $mdump or die qq{Could not close "$MYSQLDUMPFILE": $!\n};
+	exit;
+}
+print "\n-- Users loaded: $numusers\n\n-- Loading rest of the mediawiki schema:\n";
+
+warn qq{Dumping all other tables from the MySQL schema\n} if $verbose;
+
+## Dump the rest of the tables, in chunks based on constraints
+## We do not need the user table:
+my @dumplist = grep { $_ ne 'user'} @torder;
+my @alist;
+{
+	undef @alist;
+	PICKATABLE: {
+		my $tname = shift @dumplist;
+		## XXX Make this dynamic below
+		for my $ver (sort {$b <=> $a } keys %version_tables) {
+			redo PICKATABLE if $tname =~ $version_tables{$ver};
+		}
+		$tname = "${table_prefix}$tname" if length $table_prefix;
+		next if $tname !~ /^\w/;
+		push @alist, $tname;
+		$verbose and warn "  $tname...\n";
+		pop @alist and last if index($alist[-1],'---') >= 0;
+		redo if @dumplist;
+	}
+
+	## Dump everything else
+	open my $mfork2, '-|' or exec $MYSQLDUMP, @MYSQLDUMPARGS, $MYSQLDB, @alist;
+	print while <$mfork2>;
+	close $mfork2;
+	warn qq{Finished dumping from MySQL\n} if $verbose;
+
+	redo if @dumplist;
+}
+
+warn qq{Writing information to return Postgres database to normal\n} if $verbose;
+print qq{ALTER TABLE "${table_prefix}text" RENAME TO pagecontent;\n};
+print qq{ALTER TABLE ${table_prefix}recentchanges ALTER rc_ip TYPE cidr USING\n};
+print qq{  CASE WHEN rc_ip = '' THEN NULL ELSE rc_ip::cidr END;\n};
+
+## Return tables to their original names if a table prefix was used.
+if (length $table_prefix) {
+	print qq{\n\n-- Renaming tables by removing table prefix "$table_prefix"\n\n};
+	my $maxsize = 18;
+	for (@torder) {
+		$maxsize = length "$_$table_prefix" if length "$_$table_prefix" > $maxsize;
+	}
+	for my $t (@torder) {
+		next if $t eq '---' or $t eq 'text';
+		my $tname = $special{$t}||$t;
+		printf qq{ALTER TABLE %*s RENAME TO "$tname"\n}, $maxsize+1, qq{"${table_prefix}$tname"};
+	}
+}
+
+print qq{\n\n--Returning timestamps to normal\n};
+for my $t (sort keys %tz) {
+	next if $t eq 'archive2';
+	for my $c (sort keys %{$tz{$t}}) {
+		printf "ALTER TABLE %-18s ALTER %-25s TYPE timestamptz\n".
+				"  USING TO_TIMESTAMP($c,'YYYYMMDDHHMISS');\n", $t, $c;
+	}
+}
+
+## Reset sequences
+print q{
+SELECT setval('filearchive_fa_id_seq', 1+coalesce(max(fa_id)  ,0),false) FROM filearchive;
+SELECT setval('ipblocks_ipb_id_val',   1+coalesce(max(ipb_id) ,0),false) FROM ipblocks;
+SELECT setval('job_job_id_seq',        1+coalesce(max(job_id) ,0),false) FROM job;
+SELECT setval('log_log_id_seq',        1+coalesce(max(log_id) ,0),false) FROM logging;
+SELECT setval('page_page_id_seq',      1+coalesce(max(page_id),0),false) FROM page;
+SELECT setval('pr_id_val',             1+coalesce(max(pr_id)  ,0),false) FROM page_restrictions;
+SELECT setval('rc_rc_id_seq',          1+coalesce(max(rc_id)  ,0),false) FROM recentchanges;
+SELECT setval('rev_rev_id_val',        1+coalesce(max(rev_id) ,0),false) FROM revision;
+SELECT setval('text_old_id_val',       1+coalesce(max(old_id) ,0),false) FROM pagecontent;
+SELECT setval('trackbacks_tb_id_seq',  1+coalesce(max(tb_id)  ,0),false) FROM trackbacks;
+SELECT setval('user_user_id_seq',      1+coalesce(max(user_id),0),false) FROM mwuser;
+};
+
+## Finally, make a record in the mediawiki_version table about this import
+print qq{
+INSERT INTO mediawiki_version (type,mw_version,notes) VALUES ('MySQL import','??',
+'Imported from file created on $now. Old version: $current_version');
+};
+
+print "COMMIT;\n\\o\n\n-- End of dump\n\n";
+select $oldselect;
+close $mdump or die qq{Could not close "$MYSQLDUMPFILE": $!\n};
+exit;
+
+
+__DATA__
+## Known remappings: either indicate the MySQL name,
+## or leave blank if it should be skipped
+pagecontent text
+mwuser user
+mediawiki_version
+archive2
+profiling
+objectcache
+
+## Which tables to ignore depending on the version
+VERSION 1.5: trackback
+VERSION 1.6: externallinks job templatelinks transcache
+VERSION 1.7: filearchive langlinks querycache_info
+VERSION 1.9: querycachetwo page_restrictions redirect
+
Index: /MediaWiki/branches/1.11/maintenance/postgres/tables.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/postgres/tables.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/postgres/tables.sql	(revision 1280)
@@ -0,0 +1,516 @@
+-- SQL to create the initial tables for the MediaWiki database.
+-- This is read and executed by the install script; you should
+-- not have to run it by itself unless doing a manual install.
+-- This is the PostgreSQL version.
+-- For information about each table, please see the notes in maintenance/tables.sql
+-- Please make sure all dollar-quoting uses $mw$ at the start of the line
+-- We can't use SERIAL everywhere: the sequence names are hard-coded into the PHP
+-- TODO: Change CHAR to BOOL (still needed as CHAR due to some PHP code)
+
+BEGIN;
+SET client_min_messages = 'ERROR';
+
+CREATE SEQUENCE user_user_id_seq MINVALUE 0 START WITH 0;
+CREATE TABLE mwuser ( -- replace reserved word 'user'
+  user_id                   INTEGER  NOT NULL  PRIMARY KEY DEFAULT nextval('user_user_id_seq'),
+  user_name                 TEXT     NOT NULL  UNIQUE,
+  user_real_name            TEXT,
+  user_password             TEXT,
+  user_newpassword          TEXT,
+  user_newpass_time         TIMESTAMPTZ,
+  user_token                CHAR(32),
+  user_email                TEXT,
+  user_email_token          CHAR(32),
+  user_email_token_expires  TIMESTAMPTZ,
+  user_email_authenticated  TIMESTAMPTZ,
+  user_options              TEXT,
+  user_touched              TIMESTAMPTZ,
+  user_registration         TIMESTAMPTZ,
+  user_editcount            INTEGER
+);
+CREATE INDEX user_email_token_idx ON mwuser (user_email_token);
+
+-- Create a dummy user to satisfy fk contraints especially with revisions
+INSERT INTO mwuser
+  VALUES (DEFAULT,'Anonymous','',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,now(),now());
+
+CREATE TABLE user_groups (
+  ug_user   INTEGER      NULL  REFERENCES mwuser(user_id) ON DELETE CASCADE,
+  ug_group  TEXT     NOT NULL
+);
+CREATE UNIQUE INDEX user_groups_unique ON user_groups (ug_user, ug_group);
+
+CREATE TABLE user_newtalk (
+  user_id  INTEGER NOT NULL  REFERENCES mwuser(user_id) ON DELETE CASCADE,
+  user_ip  TEXT        NULL
+);
+CREATE INDEX user_newtalk_id_idx ON user_newtalk (user_id);
+CREATE INDEX user_newtalk_ip_idx ON user_newtalk (user_ip);
+
+
+CREATE SEQUENCE page_page_id_seq;
+CREATE TABLE page (
+  page_id            INTEGER        NOT NULL  PRIMARY KEY DEFAULT nextval('page_page_id_seq'),
+  page_namespace     SMALLINT       NOT NULL,
+  page_title         TEXT           NOT NULL,
+  page_restrictions  TEXT,
+  page_counter       BIGINT         NOT NULL  DEFAULT 0,
+  page_is_redirect   CHAR           NOT NULL  DEFAULT 0,
+  page_is_new        CHAR           NOT NULL  DEFAULT 0,
+  page_random        NUMERIC(15,14) NOT NULL  DEFAULT RANDOM(),
+  page_touched       TIMESTAMPTZ,
+  page_latest        INTEGER        NOT NULL, -- FK?
+  page_len           INTEGER        NOT NULL
+);
+CREATE UNIQUE INDEX page_unique_name ON page (page_namespace, page_title);
+CREATE INDEX page_main_title         ON page (page_title) WHERE page_namespace = 0;
+CREATE INDEX page_talk_title         ON page (page_title) WHERE page_namespace = 1;
+CREATE INDEX page_user_title         ON page (page_title) WHERE page_namespace = 2;
+CREATE INDEX page_utalk_title        ON page (page_title) WHERE page_namespace = 3;
+CREATE INDEX page_project_title      ON page (page_title) WHERE page_namespace = 4;
+CREATE INDEX page_random_idx         ON page (page_random);
+CREATE INDEX page_len_idx            ON page (page_len);
+
+CREATE FUNCTION page_deleted() RETURNS TRIGGER LANGUAGE plpgsql AS
+$mw$
+BEGIN
+DELETE FROM recentchanges WHERE rc_namespace = OLD.page_namespace AND rc_title = OLD.page_title;
+RETURN NULL;
+END;
+$mw$;
+
+CREATE TRIGGER page_deleted AFTER DELETE ON page
+  FOR EACH ROW EXECUTE PROCEDURE page_deleted();
+
+CREATE SEQUENCE rev_rev_id_val;
+CREATE TABLE revision (
+  rev_id          INTEGER      NOT NULL  UNIQUE DEFAULT nextval('rev_rev_id_val'),
+  rev_page        INTEGER          NULL  REFERENCES page (page_id) ON DELETE CASCADE,
+  rev_text_id     INTEGER          NULL, -- FK
+  rev_comment     TEXT,
+  rev_user        INTEGER      NOT NULL  REFERENCES mwuser(user_id) ON DELETE RESTRICT,
+  rev_user_text   TEXT         NOT NULL,
+  rev_timestamp   TIMESTAMPTZ  NOT NULL,
+  rev_minor_edit  CHAR         NOT NULL  DEFAULT '0',
+  rev_deleted     CHAR         NOT NULL  DEFAULT '0',
+  rev_len         INTEGER          NULL,
+  rev_parent_id   INTEGER          NULL
+);
+CREATE UNIQUE INDEX revision_unique ON revision (rev_page, rev_id);
+CREATE INDEX rev_text_id_idx        ON revision (rev_text_id);
+CREATE INDEX rev_timestamp_idx      ON revision (rev_timestamp);
+CREATE INDEX rev_user_idx           ON revision (rev_user);
+CREATE INDEX rev_user_text_idx      ON revision (rev_user_text);
+
+
+CREATE SEQUENCE text_old_id_val;
+CREATE TABLE pagecontent ( -- replaces reserved word 'text'
+  old_id     INTEGER  NOT NULL  PRIMARY KEY DEFAULT nextval('text_old_id_val'),
+  old_text   TEXT,
+  old_flags  TEXT
+);
+
+
+CREATE SEQUENCE pr_id_val;
+CREATE TABLE page_restrictions (
+  pr_id      INTEGER      NOT NULL  UNIQUE DEFAULT nextval('pr_id_val'),
+  pr_page    INTEGER          NULL  REFERENCES page (page_id) ON DELETE CASCADE,
+  pr_type    TEXT         NOT NULL,
+  pr_level   TEXT         NOT NULL,
+  pr_cascade SMALLINT     NOT NULL,
+  pr_user    INTEGER          NULL,
+  pr_expiry  TIMESTAMPTZ      NULL
+);
+ALTER TABLE page_restrictions ADD CONSTRAINT page_restrictions_pk PRIMARY KEY (pr_page,pr_type);
+
+
+CREATE TABLE archive (
+  ar_namespace   SMALLINT     NOT NULL,
+  ar_title       TEXT         NOT NULL,
+  ar_text        TEXT,
+  ar_comment     TEXT,
+  ar_user        INTEGER          NULL  REFERENCES mwuser(user_id) ON DELETE SET NULL,
+  ar_user_text   TEXT         NOT NULL,
+  ar_timestamp   TIMESTAMPTZ  NOT NULL,
+  ar_minor_edit  CHAR         NOT NULL  DEFAULT '0',
+  ar_flags       TEXT,
+  ar_rev_id      INTEGER,
+  ar_text_id     INTEGER,
+  ar_deleted     INTEGER      NOT NULL  DEFAULT 0,
+  ar_len         INTEGER          NULL
+);
+CREATE INDEX archive_name_title_timestamp ON archive (ar_namespace,ar_title,ar_timestamp);
+
+
+CREATE TABLE redirect (
+  rd_from       INTEGER  NOT NULL  REFERENCES page(page_id) ON DELETE CASCADE,
+  rd_namespace  SMALLINT NOT NULL,
+  rd_title      TEXT     NOT NULL
+);
+CREATE INDEX redirect_ns_title ON redirect (rd_namespace,rd_title,rd_from);
+
+
+CREATE TABLE pagelinks (
+  pl_from       INTEGER   NOT NULL  REFERENCES page(page_id) ON DELETE CASCADE,
+  pl_namespace  SMALLINT  NOT NULL,
+  pl_title      TEXT      NOT NULL
+);
+CREATE UNIQUE INDEX pagelink_unique ON pagelinks (pl_from,pl_namespace,pl_title);
+
+CREATE TABLE templatelinks (
+  tl_from       INTEGER  NOT NULL  REFERENCES page(page_id) ON DELETE CASCADE,
+  tl_namespace  TEXT     NOT NULL,
+  tl_title      TEXT     NOT NULL
+);
+CREATE UNIQUE INDEX templatelinks_unique ON templatelinks (tl_namespace,tl_title,tl_from);
+
+CREATE TABLE imagelinks (
+  il_from  INTEGER  NOT NULL  REFERENCES page(page_id) ON DELETE CASCADE,
+  il_to    TEXT     NOT NULL
+);
+CREATE UNIQUE INDEX il_from ON imagelinks (il_to,il_from);
+
+CREATE TABLE categorylinks (
+  cl_from       INTEGER      NOT NULL  REFERENCES page(page_id) ON DELETE CASCADE,
+  cl_to         TEXT         NOT NULL,
+  cl_sortkey    TEXT,
+  cl_timestamp  TIMESTAMPTZ  NOT NULL
+);
+CREATE UNIQUE INDEX cl_from ON categorylinks (cl_from, cl_to);
+CREATE INDEX cl_sortkey     ON categorylinks (cl_to, cl_sortkey);
+
+CREATE TABLE externallinks (
+  el_from   INTEGER  NOT NULL  REFERENCES page(page_id) ON DELETE CASCADE,
+  el_to     TEXT     NOT NULL,
+  el_index  TEXT     NOT NULL
+);
+CREATE INDEX externallinks_from_to ON externallinks (el_from,el_to);
+CREATE INDEX externallinks_index   ON externallinks (el_index);
+
+CREATE TABLE langlinks (
+  ll_from    INTEGER  NOT NULL  REFERENCES page (page_id) ON DELETE CASCADE,
+  ll_lang    TEXT,
+  ll_title   TEXT
+);
+CREATE UNIQUE INDEX langlinks_unique ON langlinks (ll_from,ll_lang);
+CREATE INDEX langlinks_lang_title    ON langlinks (ll_lang,ll_title);
+
+
+CREATE TABLE site_stats (
+  ss_row_id         INTEGER  NOT NULL  UNIQUE,
+  ss_total_views    INTEGER            DEFAULT 0,
+  ss_total_edits    INTEGER            DEFAULT 0,
+  ss_good_articles  INTEGER            DEFAULT 0,
+  ss_total_pages    INTEGER            DEFAULT -1,
+  ss_users          INTEGER            DEFAULT -1,
+  ss_admins         INTEGER            DEFAULT -1,
+  ss_images         INTEGER            DEFAULT 0
+);
+
+CREATE TABLE hitcounter (
+  hc_id  BIGINT  NOT NULL
+);
+
+
+CREATE SEQUENCE ipblocks_ipb_id_val;
+CREATE TABLE ipblocks (
+  ipb_id                INTEGER      NOT NULL  PRIMARY KEY DEFAULT nextval('ipblocks_ipb_id_val'),
+  ipb_address           TEXT             NULL,
+  ipb_user              INTEGER          NULL  REFERENCES mwuser(user_id) ON DELETE SET NULL,
+  ipb_by                INTEGER      NOT NULL  REFERENCES mwuser(user_id) ON DELETE CASCADE,
+  ipb_reason            TEXT         NOT NULL,
+  ipb_timestamp         TIMESTAMPTZ  NOT NULL,
+  ipb_auto              CHAR         NOT NULL  DEFAULT '0',
+  ipb_anon_only         CHAR         NOT NULL  DEFAULT '0',
+  ipb_create_account    CHAR         NOT NULL  DEFAULT '1',
+  ipb_enable_autoblock  CHAR         NOT NULL  DEFAULT '1',
+  ipb_expiry            TIMESTAMPTZ  NOT NULL,
+  ipb_range_start       TEXT,
+  ipb_range_end         TEXT,
+  ipb_deleted           INTEGER      NOT NULL  DEFAULT 0
+);
+CREATE INDEX ipb_address ON ipblocks (ipb_address);
+CREATE INDEX ipb_user    ON ipblocks (ipb_user);
+CREATE INDEX ipb_range   ON ipblocks (ipb_range_start,ipb_range_end);
+
+
+CREATE TABLE image (
+  img_name         TEXT      NOT NULL  PRIMARY KEY,
+  img_size         INTEGER   NOT NULL,
+  img_width        INTEGER   NOT NULL,
+  img_height       INTEGER   NOT NULL,
+  img_metadata     TEXT,
+  img_bits         SMALLINT,
+  img_media_type   TEXT,
+  img_major_mime   TEXT                DEFAULT 'unknown',
+  img_minor_mime   TEXT                DEFAULT 'unknown',
+  img_description  TEXT      NOT NULL,
+  img_user         INTEGER       NULL  REFERENCES mwuser(user_id) ON DELETE SET NULL,
+  img_user_text    TEXT      NOT NULL,
+  img_timestamp    TIMESTAMPTZ
+);
+CREATE INDEX img_size_idx      ON image (img_size);
+CREATE INDEX img_timestamp_idx ON image (img_timestamp);
+
+CREATE TABLE oldimage (
+  oi_name          TEXT         NOT NULL  REFERENCES image(img_name),
+  oi_archive_name  TEXT         NOT NULL,
+  oi_size          INTEGER      NOT NULL,
+  oi_width         INTEGER      NOT NULL,
+  oi_height        INTEGER      NOT NULL,
+  oi_bits          SMALLINT     NOT NULL,
+  oi_description   TEXT,
+  oi_user          INTEGER          NULL  REFERENCES mwuser(user_id) ON DELETE SET NULL,
+  oi_user_text     TEXT         NOT NULL,
+  oi_timestamp     TIMESTAMPTZ  NOT NULL
+);
+CREATE INDEX oi_name ON oldimage (oi_name);
+
+
+CREATE TABLE filearchive (
+  fa_id                 SERIAL       NOT NULL  PRIMARY KEY,
+  fa_name               TEXT         NOT NULL,
+  fa_archive_name       TEXT,
+  fa_storage_group      VARCHAR(16),
+  fa_storage_key        CHAR(64),
+  fa_deleted_user       INTEGER          NULL  REFERENCES mwuser(user_id) ON DELETE SET NULL,
+  fa_deleted_timestamp  TIMESTAMPTZ  NOT NULL,
+  fa_deleted_reason     TEXT,
+  fa_size               SMALLINT     NOT NULL,
+  fa_width              SMALLINT     NOT NULL,
+  fa_height             SMALLINT     NOT NULL,
+  fa_metadata           TEXT,
+  fa_bits               SMALLINT,
+  fa_media_type         TEXT,
+  fa_major_mime         TEXT                   DEFAULT 'unknown',
+  fa_minor_mime         TEXT                   DEFAULT 'unknown',
+  fa_description        TEXT         NOT NULL,
+  fa_user               INTEGER          NULL  REFERENCES mwuser(user_id) ON DELETE SET NULL,
+  fa_user_text          TEXT         NOT NULL,
+  fa_timestamp          TIMESTAMPTZ,
+  fa_deleted            INTEGER      NOT NULL DEFAULT 0
+);
+CREATE INDEX fa_name_time ON filearchive (fa_name, fa_timestamp);
+CREATE INDEX fa_dupe      ON filearchive (fa_storage_group, fa_storage_key);
+CREATE INDEX fa_notime    ON filearchive (fa_deleted_timestamp);
+CREATE INDEX fa_nouser    ON filearchive (fa_deleted_user);
+
+
+CREATE SEQUENCE rc_rc_id_seq;
+CREATE TABLE recentchanges (
+  rc_id              INTEGER      NOT NULL  PRIMARY KEY DEFAULT nextval('rc_rc_id_seq'),
+  rc_timestamp       TIMESTAMPTZ  NOT NULL,
+  rc_cur_time        TIMESTAMPTZ  NOT NULL,
+  rc_user            INTEGER          NULL  REFERENCES mwuser(user_id) ON DELETE SET NULL,
+  rc_user_text       TEXT         NOT NULL,
+  rc_namespace       SMALLINT     NOT NULL,
+  rc_title           TEXT         NOT NULL,
+  rc_comment         TEXT,
+  rc_minor           CHAR         NOT NULL  DEFAULT '0',
+  rc_bot             CHAR         NOT NULL  DEFAULT '0',
+  rc_new             CHAR         NOT NULL  DEFAULT '0',
+  rc_cur_id          INTEGER          NULL  REFERENCES page(page_id) ON DELETE SET NULL,
+  rc_this_oldid      INTEGER      NOT NULL,
+  rc_last_oldid      INTEGER      NOT NULL,
+  rc_type            CHAR         NOT NULL  DEFAULT '0',
+  rc_moved_to_ns     SMALLINT,
+  rc_moved_to_title  TEXT,
+  rc_patrolled       CHAR         NOT NULL  DEFAULT '0',
+  rc_ip              CIDR,
+  rc_old_len         INTEGER,
+  rc_new_len         INTEGER,
+  rc_deleted         INTEGER      NOT NULL  DEFAULT 0,
+  rc_logid           INTEGER      NOT NULL  DEFAULT 0,
+  rc_log_type        TEXT,
+  rc_log_action      TEXT,
+  rc_params          TEXT
+);
+CREATE INDEX rc_timestamp       ON recentchanges (rc_timestamp);
+CREATE INDEX rc_namespace_title ON recentchanges (rc_namespace, rc_title);
+CREATE INDEX rc_cur_id          ON recentchanges (rc_cur_id);
+CREATE INDEX new_name_timestamp ON recentchanges (rc_new, rc_namespace, rc_timestamp);
+CREATE INDEX rc_ip              ON recentchanges (rc_ip);
+
+
+CREATE TABLE watchlist (
+  wl_user                   INTEGER     NOT NULL  REFERENCES mwuser(user_id) ON DELETE CASCADE,
+  wl_namespace              SMALLINT    NOT NULL  DEFAULT 0,
+  wl_title                  TEXT        NOT NULL,
+  wl_notificationtimestamp  TIMESTAMPTZ
+);
+CREATE UNIQUE INDEX wl_user_namespace_title ON watchlist (wl_namespace, wl_title, wl_user);
+
+
+CREATE TABLE math (
+  math_inputhash              BYTEA     NOT NULL  UNIQUE,
+  math_outputhash             BYTEA     NOT NULL,
+  math_html_conservativeness  SMALLINT  NOT NULL,
+  math_html                   TEXT,
+  math_mathml                 TEXT
+);
+
+
+CREATE TABLE interwiki (
+  iw_prefix  TEXT  NOT NULL  UNIQUE,
+  iw_url     TEXT  NOT NULL,
+  iw_local   CHAR  NOT NULL,
+  iw_trans   CHAR  NOT NULL  DEFAULT '0'
+);
+
+
+CREATE TABLE querycache (
+  qc_type       TEXT      NOT NULL,
+  qc_value      SMALLINT  NOT NULL,
+  qc_namespace  SMALLINT  NOT NULL,
+  qc_title      TEXT      NOT NULL
+);
+CREATE INDEX querycache_type_value ON querycache (qc_type, qc_value);
+
+CREATE TABLE querycache_info (
+  qci_type       TEXT              UNIQUE,
+  qci_timestamp  TIMESTAMPTZ NULL
+);
+
+CREATE TABLE querycachetwo (
+  qcc_type          TEXT     NOT NULL,
+  qcc_value         SMALLINT NOT NULL  DEFAULT 0,
+  qcc_namespace     INTEGER  NOT NULL  DEFAULT 0,
+  qcc_title         TEXT     NOT NULL  DEFAULT '',
+  qcc_namespacetwo  INTEGER  NOT NULL  DEFAULT 0,
+  qcc_titletwo      TEXT     NOT NULL  DEFAULT ''
+);
+CREATE INDEX querycachetwo_type_value ON querycachetwo (qcc_type, qcc_value);
+CREATE INDEX querycachetwo_title      ON querycachetwo (qcc_type,qcc_namespace,qcc_title);
+CREATE INDEX querycachetwo_titletwo   ON querycachetwo (qcc_type,qcc_namespacetwo,qcc_titletwo);
+
+CREATE TABLE objectcache (
+  keyname  CHAR(255)              UNIQUE,
+  value    BYTEA        NOT NULL  DEFAULT '',
+  exptime  TIMESTAMPTZ  NOT NULL
+);
+CREATE INDEX objectcacache_exptime ON objectcache (exptime);
+
+CREATE TABLE transcache (
+  tc_url       TEXT         NOT NULL  UNIQUE,
+  tc_contents  TEXT         NOT NULL,
+  tc_time      TIMESTAMPTZ  NOT NULL
+);
+
+
+CREATE SEQUENCE log_log_id_seq;
+CREATE TABLE logging (
+  log_id          INTEGER      NOT NULL  PRIMARY KEY DEFAULT nextval('log_log_id_seq'),
+  log_type        TEXT         NOT NULL,
+  log_action      TEXT         NOT NULL,
+  log_timestamp   TIMESTAMPTZ  NOT NULL,
+  log_user        INTEGER                REFERENCES mwuser(user_id) ON DELETE SET NULL,
+  log_namespace   SMALLINT     NOT NULL,
+  log_title       TEXT         NOT NULL,
+  log_comment     TEXT,
+  log_params      TEXT,
+  log_deleted     INTEGER      NOT NULL DEFAULT 0
+);
+CREATE INDEX logging_type_name ON logging (log_type, log_timestamp);
+CREATE INDEX logging_user_time ON logging (log_timestamp, log_user);
+CREATE INDEX logging_page_time ON logging (log_namespace, log_title, log_timestamp);
+
+
+CREATE TABLE trackbacks (
+  tb_id     SERIAL   NOT NULL  PRIMARY KEY,
+  tb_page   INTEGER            REFERENCES page(page_id) ON DELETE CASCADE,
+  tb_title  TEXT     NOT NULL,
+  tb_url    TEXT     NOT NULL,
+  tb_ex     TEXT,
+  tb_name   TEXT
+);
+CREATE INDEX trackback_page ON trackbacks (tb_page);
+
+
+CREATE SEQUENCE job_job_id_seq;
+CREATE TABLE job (
+  job_id         INTEGER   NOT NULL  PRIMARY KEY DEFAULT nextval('job_job_id_seq'),
+  job_cmd        TEXT      NOT NULL,
+  job_namespace  SMALLINT  NOT NULL,
+  job_title      TEXT      NOT NULL,
+  job_params     TEXT      NOT NULL
+);
+CREATE INDEX job_cmd_namespace_title ON job (job_cmd, job_namespace, job_title);
+
+-- Tsearch2 2 stuff. Will fail if we don't have proper access to the tsearch2 tables
+
+ALTER TABLE page ADD titlevector tsvector;
+CREATE FUNCTION ts2_page_title() RETURNS TRIGGER LANGUAGE plpgsql AS
+$mw$
+BEGIN
+IF TG_OP = 'INSERT' THEN
+  NEW.titlevector = to_tsvector('default',NEW.page_title);
+ELSIF NEW.page_title != OLD.page_title THEN
+  NEW.titlevector := to_tsvector('default',NEW.page_title);
+END IF;
+RETURN NEW;
+END;
+$mw$;
+
+CREATE TRIGGER ts2_page_title BEFORE INSERT OR UPDATE ON page
+  FOR EACH ROW EXECUTE PROCEDURE ts2_page_title();
+
+
+ALTER TABLE pagecontent ADD textvector tsvector;
+CREATE FUNCTION ts2_page_text() RETURNS TRIGGER LANGUAGE plpgsql AS
+$mw$
+BEGIN
+IF TG_OP = 'INSERT' THEN
+  NEW.textvector = to_tsvector('default',NEW.old_text);
+ELSIF NEW.old_text != OLD.old_text THEN
+  NEW.textvector := to_tsvector('default',NEW.old_text);
+END IF;
+RETURN NEW;
+END;
+$mw$;
+
+CREATE TRIGGER ts2_page_text BEFORE INSERT OR UPDATE ON pagecontent
+  FOR EACH ROW EXECUTE PROCEDURE ts2_page_text();
+
+-- These are added by the setup script due to version compatibility issues
+-- If using 8.1, switch from "gin" to "gist"
+-- CREATE INDEX ts2_page_title ON page USING gin(titlevector);
+-- CREATE INDEX ts2_page_text ON pagecontent USING gin(textvector);
+
+CREATE FUNCTION add_interwiki (TEXT,INT,CHAR) RETURNS INT LANGUAGE SQL AS
+$mw$
+  INSERT INTO interwiki (iw_prefix, iw_url, iw_local) VALUES ($1,$2,$3);
+  SELECT 1;
+$mw$;
+
+-- This table is not used unless profiling is turned on
+CREATE TABLE profiling (
+  pf_count   INTEGER         NOT NULL DEFAULT 0,
+  pf_time    NUMERIC(18,10)  NOT NULL DEFAULT 0,
+  pf_name    TEXT            NOT NULL,
+  pf_server  TEXT            NULL
+);
+CREATE UNIQUE INDEX pf_name_server ON profiling (pf_name, pf_server);
+
+
+CREATE TABLE mediawiki_version (
+  type         TEXT         NOT NULL,
+  mw_version   TEXT         NOT NULL,
+  notes        TEXT             NULL,
+
+  pg_version   TEXT             NULL,
+  pg_dbname    TEXT             NULL,
+  pg_user      TEXT             NULL,
+  pg_port      TEXT             NULL,
+  mw_schema    TEXT             NULL,
+  ts2_schema   TEXT             NULL,
+  ctype        TEXT             NULL,
+
+  sql_version  TEXT             NULL,
+  sql_date     TEXT             NULL,
+  cdate        TIMESTAMPTZ  NOT NULL DEFAULT now()
+);
+
+INSERT INTO mediawiki_version (type,mw_version,sql_version,sql_date)
+  VALUES ('Creation','??','$LastChangedRevision: 20687 $','$LastChangedDate: 2007-03-25 20:12:26 -0400 (Sun, 25 Mar 2007) $');
+
+
Index: /MediaWiki/branches/1.11/maintenance/purgeList.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/purgeList.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/purgeList.php	(revision 1280)
@@ -0,0 +1,37 @@
+<?php
+
+/**
+ * Send purge requests for listed pages to squid
+ */
+
+require_once( "commandLine.inc" );
+
+$stdin = fopen( "php://stdin", "rt" );
+$urls = array();
+
+while( !feof( $stdin ) ) {
+	$page = trim( fgets( $stdin ) );
+	if ( substr( $page, 0, 7 ) == 'http://' ) {
+		$urls[] = $page;
+	} elseif( $page !== '' ) {
+		$title = Title::newFromText( $page );
+		if( $title ) {
+			$url = $title->getFullUrl();
+			echo "$url\n";
+			$urls[] = $url;
+			if( isset( $options['purge'] ) ) {
+				$title->invalidateCache();
+			}
+		} else {
+			echo "(Invalid title '$page')\n";
+		}
+	}
+}
+
+echo "Purging " . count( $urls ) . " urls...\n";
+$u = new SquidUpdate( $urls );
+$u->doUpdate();
+
+echo "Done!\n";
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/purgeOldText.inc
===================================================================
--- /MediaWiki/branches/1.11/maintenance/purgeOldText.inc	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/purgeOldText.inc	(revision 1280)
@@ -0,0 +1,63 @@
+<?php
+
+/**
+ * Support functions for cleaning up redundant text records
+ *
+ * @addtogroup Maintenance
+ * @author Rob Church <robchur@gmail.com>
+ */
+
+function PurgeRedundantText( $delete = false ) {
+	
+	# Data should come off the master, wrapped in a transaction
+	$dbw = wfGetDB( DB_MASTER );
+	$dbw->begin();
+	
+	$tbl_arc = $dbw->tableName( 'archive' );
+	$tbl_rev = $dbw->tableName( 'revision' );
+	$tbl_txt = $dbw->tableName( 'text' );
+	
+	# Get "active" text records from the revisions table
+	echo( "Searching for active text records in revisions table..." );
+	$res = $dbw->query( "SELECT DISTINCTROW rev_text_id FROM $tbl_rev" );
+	while( $row = $dbw->fetchObject( $res ) ) {
+		$cur[] = $row->rev_text_id;
+	}
+	echo( "done.\n" );
+	
+	# Get "active" text records from the archive table
+	echo( "Searching for active text records in archive table..." );
+	$res = $dbw->query( "SELECT DISTINCTROW ar_text_id FROM $tbl_arc" );
+	while( $row = $dbw->fetchObject( $res ) ) {
+		$cur[] = $row->ar_text_id;
+	}
+	echo( "done.\n" );
+	
+	# Get the IDs of all text records not in these sets
+	echo( "Searching for inactive text records..." );
+	$set = implode( ', ', $cur );
+	$res = $dbw->query( "SELECT old_id FROM $tbl_txt WHERE old_id NOT IN ( $set )" );
+	$old = array();
+	while( $row = $dbw->fetchObject( $res ) ) {
+		$old[] = $row->old_id;
+	}
+	echo( "done.\n" );
+	
+	# Inform the user of what we're going to do
+	$count = count( $old );
+	echo( "$count inactive items found.\n" );
+	
+	# Delete as appropriate
+	if( $delete && $count ) {
+		echo( "Deleting..." );
+		$set = implode( ', ', $old );
+		$dbw->query( "DELETE FROM $tbl_txt WHERE old_id IN ( $set )" );
+		echo( "done.\n" );
+	}
+	
+	# Done
+	$dbw->commit();
+	
+}
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/purgeOldText.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/purgeOldText.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/purgeOldText.php	(revision 1280)
@@ -0,0 +1,29 @@
+<?php
+
+/**
+ * Purge old text records from the database
+ *
+ * @addtogroup Maintenance
+ * @author Rob Church <robchur@gmail.com>
+ */
+
+$options = array( 'purge', 'help' );
+require_once( 'commandLine.inc' );
+require_once( 'purgeOldText.inc' );
+
+echo( "Purge Old Text\n\n" );
+
+if( @$options['help'] ) {
+	ShowUsage();
+} else {
+	PurgeRedundantText( @$options['purge'] );
+}
+
+function ShowUsage() {
+	echo( "Prunes unused text records from the database.\n\n" );
+	echo( "Usage: php purgeOldText.php [--purge]\n\n" );
+	echo( "purge : Performs the deletion\n" );
+	echo( " help : Show this usage information\n" );
+}
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/reassignEdits.inc.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/reassignEdits.inc.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/reassignEdits.inc.php	(revision 1280)
@@ -0,0 +1,143 @@
+<?php
+
+/**
+ * Support functions for the reassignEdits script
+ *
+ * @addtogroup Maintenance
+ * @author Rob Church <robchur@gmail.com>
+ * @licence GNU General Public Licence 2.0 or later
+ */
+
+/**
+ * Reassign edits from one user to another
+ *
+ * @param $from User to take edits from
+ * @param $to User to assign edits to
+ * @param $rc Update the recent changes table
+ * @param $report Don't change things; just echo numbers
+ * @return integer Number of entries changed, or that would be changed
+ */
+function reassignEdits( &$from, &$to, $rc = false, $report = false ) {
+	$dbw = wfGetDB( DB_MASTER );
+	$dbw->immediateBegin();
+	$fname = 'reassignEdits';
+		
+	# Count things
+	out( "Checking current edits..." );
+	$res = $dbw->select( 'revision', 'COUNT(*) AS count', userConditions( $from, 'rev_user', 'rev_user_text' ), $fname );
+	$row = $dbw->fetchObject( $res );
+	$cur = $row->count;
+	out( "found {$cur}.\n" );
+	
+	out( "Checking deleted edits..." );
+	$res = $dbw->select( 'archive', 'COUNT(*) AS count', userConditions( $from, 'ar_user', 'ar_user_text' ), $fname );
+	$row = $dbw->fetchObject( $res );
+	$del = $row->count;
+	out( "found {$del}.\n" );
+	
+	# Don't count recent changes if we're not supposed to
+	if( $rc ) {
+		out( "Checking recent changes..." );
+		$res = $dbw->select( 'recentchanges', 'COUNT(*) AS count', userConditions( $from, 'rc_user', 'rc_user_text' ), $fname );
+		$row = $dbw->fetchObject( $res );
+		$rec = $row->count;
+		out( "found {$rec}.\n" );
+	} else {
+		$rec = 0;
+	}
+	
+	$total = $cur + $del + $rec;
+	out( "\nTotal entries to change: {$total}\n" );
+	
+	if( !$report ) {
+		if( $total ) {
+			# Reassign edits
+			out( "\nReassigning current edits..." );
+			$res = $dbw->update( 'revision', userSpecification( $to, 'rev_user', 'rev_user_text' ), userConditions( $from, 'rev_user', 'rev_user_text' ), $fname );
+			out( "done.\nReassigning deleted edits..." );
+			$res = $dbw->update( 'archive', userSpecification( $to, 'ar_user', 'ar_user_text' ), userConditions( $from, 'ar_user', 'ar_user_text' ), $fname );
+			out( "done.\n" );
+			# Update recent changes if required
+			if( $rc ) {
+				out( "Updating recent changes..." );
+				$res = $dbw->update( 'recentchanges', userSpecification( $to, 'rc_user', 'rc_user_text' ), userConditions( $from, 'rc_user', 'rc_user_text' ), $fname );
+				out( "done.\n" );
+			}
+		}	
+	}
+	
+	$dbw->immediateCommit();
+	return (int)$total;	
+}
+
+/**
+ * Return the most efficient set of user conditions
+ * i.e. a user => id mapping, or a user_text => text mapping
+ *
+ * @param $user User for the condition
+ * @param $idfield Field name containing the identifier
+ * @param $utfield Field name containing the user text
+ * @return array
+ */
+function userConditions( &$user, $idfield, $utfield ) {
+	return $user->getId() ? array( $idfield => $user->getID() ) : array( $utfield => $user->getName() );
+}
+
+/**
+ * Return user specifications
+ * i.e. user => id, user_text => text
+ *
+ * @param $user User for the spec
+ * @param $idfield Field name containing the identifier
+ * @param $utfield Field name containing the user text
+ * @return array
+ */
+function userSpecification( &$user, $idfield, $utfield ) {
+	return array( $idfield => $user->getId(), $utfield => $user->getName() );
+}
+
+/**
+ * Echo output if $wgSilent is off
+ *
+ * @param $output Output to echo
+ * @return bool True if the output was echoed
+ */
+function out( $output ) {
+	global $wgSilent;
+	if( !$wgSilent ) {
+		echo( $output );
+		return true;
+	} else {
+		return false;
+	}
+}
+
+/**
+ * Mutator for $wgSilent
+ *
+ * @param $silent Switch on $wgSilent
+ */
+function silent( $silent = true ) {
+	global $wgSilent;
+	$wgSilent = $silent;
+}
+
+/**
+ * Initialise the user object
+ *
+ * @param $username Username or IP address
+ * @return User
+ */
+function initialiseUser( $username ) {
+	if( User::isIP( $username ) ) {
+		$user = new User();
+		$user->setId( 0 );
+		$user->setName( $username );
+	} else {
+		$user = User::newFromName( $username );
+	}
+	$user->load();
+	return $user;
+}
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/reassignEdits.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/reassignEdits.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/reassignEdits.php	(revision 1280)
@@ -0,0 +1,56 @@
+<?php
+
+/**
+ * Reassign edits from a user or IP address to another user
+ *
+ * @addtogroup Maintenance
+ * @author Rob Church <robchur@gmail.com>
+ * @licence GNU General Public Licence 2.0 or later
+ */
+
+$options = array( 'force', 'norc', 'quiet', 'report' );
+require_once( 'commandLine.inc' );
+require_once( 'reassignEdits.inc.php' );
+
+# Set silent mode; --report overrides --quiet
+if( !@$options['report'] && @$options['quiet'] )
+	setSilent();
+	
+out( "Reassign Edits\n\n" );
+
+if( @$args[0] && @$args[1] ) {
+
+	# Set up the users involved
+	$from =& initialiseUser( $args[0] );
+	$to   =& initialiseUser( $args[1] );
+	
+	# If the target doesn't exist, and --force is not set, stop here
+	if( $to->getId() || @$options['force'] ) {
+		# Reassign the edits
+		$report = @$options['report'];
+		$count = reassignEdits( $from, $to, !@$options['norc'], $report );
+		# If reporting, and there were items, advise the user to run without --report	
+		if( $report )
+			out( "Run the script again without --report to update.\n" );
+	} else {
+		$ton = $to->getName();
+		echo( "User '{$ton}' not found.\n" );
+	}
+	
+} else {
+	ShowUsage();
+}
+
+/** Show script usage information */
+function ShowUsage() {
+	echo( "Reassign edits from one user to another.\n\n" );
+	echo( "Usage: php reassignEdits.php [--force|--quiet|--norc|--report] <from> <to>\n\n" );
+	echo( "    <from> : Name of the user to assign edits from\n" );
+	echo( "      <to> : Name of the user to assign edits to\n" );
+	echo( "   --force : Reassign even if the target user doesn't exist\n" );
+	echo( "   --quiet : Don't print status information (except for errors)\n" );
+	echo( "    --norc : Don't update the recent changes table\n" );
+	echo( "  --report : Print out details of what would be changed, but don't update it\n\n" );
+}
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/rebuildImages.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/rebuildImages.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/rebuildImages.php	(revision 1280)
@@ -0,0 +1,274 @@
+<?php
+/*
+ * Script to update image metadata records
+ *
+ * Usage: php rebuildImages.php [--missing] [--dry-run]
+ * Options:
+ *   --missing  Crawl the uploads dir for images without records, and
+ *              add them only.
+ *
+ * Copyright (C) 2005 Brion Vibber <brion@pobox.com>
+ * http://www.mediawiki.org/
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @author Brion Vibber <brion at pobox.com>
+ * @addtogroup maintenance
+ */
+
+$options = array( 'missing', 'dry-run' );
+
+require_once( 'commandLine.inc' );
+require_once( 'FiveUpgrade.inc' );
+
+class ImageBuilder extends FiveUpgrade {
+	function ImageBuilder( $dryrun = false ) {
+		parent::FiveUpgrade();
+
+		$this->maxLag = 10; # if slaves are lagged more than 10 secs, wait
+		$this->dryrun = $dryrun;
+	}
+
+	function build() {
+		$this->buildImage();
+		$this->buildOldImage();
+	}
+
+	function init( $count, $table ) {
+		$this->processed = 0;
+		$this->updated = 0;
+		$this->count = $count;
+		$this->startTime = wfTime();
+		$this->table = $table;
+	}
+
+	function progress( $updated ) {
+		$this->updated += $updated;
+		$this->processed++;
+		if( $this->processed % 100 != 0 ) {
+			return;
+		}
+		$portion = $this->processed / $this->count;
+		$updateRate = $this->updated / $this->processed;
+
+		$now = wfTime();
+		$delta = $now - $this->startTime;
+		$estimatedTotalTime = $delta / $portion;
+		$eta = $this->startTime + $estimatedTotalTime;
+
+		printf( "%s: %6.2f%% done on %s; ETA %s [%d/%d] %.2f/sec <%.2f%% updated>\n",
+			wfTimestamp( TS_DB, intval( $now ) ),
+			$portion * 100.0,
+			$this->table,
+			wfTimestamp( TS_DB, intval( $eta ) ),
+			$completed,   // $completed does not appear to be defined.
+			$this->count,
+			$rate,        // $rate does not appear to be defined.
+			$updateRate * 100.0 );
+		flush();
+	}
+
+	function buildTable( $table, $key, $callback ) {
+		$fname = 'ImageBuilder::buildTable';
+
+		$count = $this->dbw->selectField( $table, 'count(*)', '', $fname );
+		$this->init( $count, $table );
+		$this->log( "Processing $table..." );
+
+		$tableName = $this->dbr->tableName( $table );
+		$sql = "SELECT * FROM $tableName";
+		$result = $this->dbr->query( $sql, $fname );
+
+		while( $row = $this->dbr->fetchObject( $result ) ) {
+			$update = call_user_func( $callback, $row );
+			if( is_array( $update ) ) {
+				if( !$this->dryrun ) {
+					$this->dbw->update( $table,
+						$update,
+						array( $key => $row->$key ),
+						$fname );
+				}
+				$this->progress( 1 );
+			} else {
+				$this->progress( 0 );
+			}
+		}
+		$this->log( "Finished $table... $this->updated of $this->processed rows updated" );
+		$this->dbr->freeResult( $result );
+	}
+
+	function buildImage() {
+		$callback = array( &$this, 'imageCallback' );
+		$this->buildTable( 'image', 'img_name', $callback );
+	}
+
+	function imageCallback( $row ) {
+		if( $row->img_width ) {
+			// Already processed
+			return null;
+		}
+
+		// Fill in the new image info fields
+		$info = $this->imageInfo( $row->img_name );
+
+		global $wgMemc;
+		$key = wfMemcKey( "Image", md5( $row->img_name ) );
+		$wgMemc->delete( $key );
+
+		return array(
+			'img_width'      => $info['width'],
+			'img_height'     => $info['height'],
+			'img_bits'       => $info['bits'],
+			'img_media_type' => $info['media'],
+			'img_major_mime' => $info['major'],
+			'img_minor_mime' => $info['minor'] );
+	}
+
+
+	function buildOldImage() {
+		$this->buildTable( 'oldimage', 'oi_archive_name',
+			array( &$this, 'oldimageCallback' ) );
+	}
+
+	function oldimageCallback( $row ) {
+		if( $row->oi_width ) {
+			return null;
+		}
+
+		// Fill in the new image info fields
+		$info = $this->imageInfo( $row->oi_archive_name, 'wfImageArchiveDir', $row->oi_name );
+		return array(
+			'oi_width'  => $info['width' ],
+			'oi_height' => $info['height'],
+			'oi_bits'   => $info['bits'  ] );
+	}
+
+	function crawlMissing() {
+		global $wgUploadDirectory, $wgHashedUploadDirectory;
+		if( $wgHashedUploadDirectory ) {
+			for( $i = 0; $i < 16; $i++ ) {
+				for( $j = 0; $j < 16; $j++ ) {
+					$dir = sprintf( '%s%s%01x%s%02x',
+						$wgUploadDirectory,
+						DIRECTORY_SEPARATOR,
+						$i,
+						DIRECTORY_SEPARATOR,
+						$i * 16 + $j );
+					$this->crawlDirectory( $dir );
+				}
+			}
+		} else {
+			$this->crawlDirectory( $wgUploadDirectory );
+		}
+	}
+
+	function crawlDirectory( $dir ) {
+		if( !file_exists( $dir ) ) {
+			return $this->log( "no directory, skipping $dir" );
+		}
+		if( !is_dir( $dir ) ) {
+			return $this->log( "not a directory?! skipping $dir" );
+		}
+		if( !is_readable( $dir ) ) {
+			return $this->log( "dir not readable, skipping $dir" );
+		}
+		$source = opendir( $dir );
+		if( $source === false ) {
+			return $this->log( "couldn't open dir, skipping $dir" );
+		}
+
+		$this->log( "crawling $dir" );
+		while( false !== ( $filename = readdir( $source ) ) ) {
+			$fullpath = $dir . DIRECTORY_SEPARATOR . $filename;
+			if( is_dir( $fullpath ) ) {
+				continue;
+			}
+			if( is_link( $fullpath ) ) {
+				$this->log( "skipping symlink at $fullpath" );
+				continue;
+			}
+			$this->checkMissingImage( $filename, $fullpath );
+		}
+		closedir( $source );
+	}
+
+	function checkMissingImage( $filename, $fullpath ) {
+		$fname = 'ImageBuilder::checkMissingImage';
+		$row = $this->dbw->selectRow( 'image',
+			array( 'img_name' ),
+			array( 'img_name' => $filename ),
+			$fname );
+
+		if( $row ) {
+			// already known, move on
+			return;
+		} else {
+			$this->addMissingImage( $filename, $fullpath );
+		}
+	}
+
+	function addMissingImage( $filename, $fullpath ) {
+		$fname = 'ImageBuilder::addMissingImage';
+
+		$size = filesize( $fullpath );
+		$info = $this->imageInfo( $filename );
+		$timestamp = $this->dbw->timestamp( filemtime( $fullpath ) );
+
+		global $wgContLang;
+		$altname = $wgContLang->checkTitleEncoding( $filename );
+		if( $altname != $filename ) {
+			if( $this->dryrun ) {
+				$filename = $altname;
+				$this->log( "Estimating transcoding... $altname" );
+			} else {
+				$filename = $this->renameFile( $filename );
+			}
+		}
+
+		if( $filename == '' ) {
+			$this->log( "Empty filename for $fullpath" );
+			return;
+		}
+
+		$fields = array(
+			'img_name'       => $filename,
+			'img_size'       => $size,
+			'img_width'      => $info['width'],
+			'img_height'     => $info['height'],
+			'img_metadata'   => '', // filled in on-demand
+			'img_bits'       => $info['bits'],
+			'img_media_type' => $info['media'],
+			'img_major_mime' => $info['major'],
+			'img_minor_mime' => $info['minor'],
+			'img_description' => '(recovered file, missing upload log entry)',
+			'img_user'        => 0,
+			'img_user_text'   => 'Conversion script',
+			'img_timestamp'   => $timestamp );
+		if( !$this->dryrun ) {
+			$this->dbw->insert( 'image', $fields, $fname );
+		}
+		$this->log( $fullpath );
+	}
+}
+
+$builder = new ImageBuilder( isset( $options['dry-run'] ) );
+if( isset( $options['missing'] ) ) {
+	$builder->crawlMissing();
+} else {
+	$builder->build();
+}
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/rebuildInterwiki.inc
===================================================================
--- /MediaWiki/branches/1.11/maintenance/rebuildInterwiki.inc	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/rebuildInterwiki.inc	(revision 1280)
@@ -0,0 +1,260 @@
+<?php
+/**
+ * Rebuild interwiki table using the file on meta and the language list
+ * Wikimedia specific!
+ *
+ * @todo document
+ * @addtogroup Maintenance
+ */
+
+/** */
+
+/**
+ * @todo document
+ * @addtogroup Maintenance
+ */
+class Site {
+	var $suffix, $lateral, $url;
+
+	function Site( $s, $l, $u ) {
+		$this->suffix = $s;
+		$this->lateral = $l;
+		$this->url = $u;
+	}
+
+	function getURL( $lang ) {
+		$xlang = str_replace( '_', '-', $lang );
+		return "http://$xlang.{$this->url}/wiki/\$1";
+	}
+}
+
+function getRebuildInterwikiSQL() {
+	global $langlist, $languageAliases, $prefixRewrites;
+
+	# Multi-language sites
+	# db suffix => db suffix, iw prefix, hostname
+	$sites = array(
+		'wiki' => new Site( 'wiki', 'w', 'wikipedia.org' ),
+		'wiktionary' => new Site( 'wiktionary', 'wikt', 'wiktionary.org' ),
+		'wikiquote' => new Site( 'wikiquote', 'q', 'wikiquote.org' ),
+		'wikibooks' => new Site( 'wikibooks', 'b', 'wikibooks.org' ),
+		'wikinews' => new Site( 'wikinews', 'n', 'wikinews.org' ),
+		'wikisource' => new Site( 'wikisource', 's', 'wikisource.org' ),
+		'wikimedia' => new Site( 'wikimedia', 'chapter', 'wikimedia.org' ),
+	);
+
+	# List of language prefixes likely to be found in multi-language sites
+	$langlist = array_map( "trim", file( "/home/wikipedia/common/langlist" ) );
+
+	# List of all database names
+	$dblist = array_map( "trim", file( "/home/wikipedia/common/all.dblist" ) );
+
+	# Special-case hostnames
+	$specials = array(
+		'sourceswiki' => 'sources.wikipedia.org',
+		'quotewiki' => 'wikiquote.org',
+		'textbookwiki' => 'wikibooks.org',
+		'sep11wiki' => 'sep11.wikipedia.org',
+		'metawiki' => 'meta.wikimedia.org',
+		'commonswiki' => 'commons.wikimedia.org',
+		'specieswiki' => 'species.wikimedia.org',
+	);
+
+	# Extra interwiki links that can't be in the intermap for some reason
+	$extraLinks = array(
+		array( 'm', 'http://meta.wikimedia.org/wiki/$1', 1 ),
+		array( 'meta', 'http://meta.wikimedia.org/wiki/$1', 1 ),
+		array( 'sep11', 'http://sep11.wikipedia.org/wiki/$1', 1 ),
+	);
+
+	# Language aliases, usually configured as redirects to the real wiki in apache
+	# Interlanguage links are made directly to the real wiki
+	# Something horrible happens if you forget to list an alias here, I can't
+	#   remember what
+	$languageAliases = array(
+		'zh-cn' => 'zh',
+		'zh-tw' => 'zh',
+		'dk' => 'da',
+		'nb' => 'no',
+	);
+
+	# Special case prefix rewrites, for the benefit of Swedish which uses s:t
+	# as an abbreviation for saint
+	$prefixRewrites = array(
+		'svwiki' => array( 's' => 'src' ),
+	);
+
+	# Construct a list of reserved prefixes
+	$reserved = array();
+	foreach ( $langlist as $lang ) {
+		$reserved[$lang] = 1;
+	}
+	foreach ( $languageAliases as $alias => $lang ) {
+		$reserved[$alias] = 1;
+	}
+	foreach( $sites as $site ) {
+		$reserved[$site->lateral] = 1;
+	}
+
+	# Extract the intermap from meta
+	$intermap = wfGetHTTP( 'http://meta.wikimedia.org/w/index.php?title=Interwiki_map&action=raw', 30 );
+	$lines = array_map( 'trim', explode( "\n", trim( $intermap ) ) );
+
+	if ( !$lines || count( $lines ) < 2 ) {
+		wfDie( "m:Interwiki_map not found" );
+	}
+
+	$iwArray = array();
+
+	foreach ( $lines as $line ) {
+		$matches = array();
+		if ( preg_match( '/^\|\s*(.*?)\s*\|\|\s*(https?:\/\/.*?)\s*$/', $line, $matches ) ) {
+			$prefix = strtolower( $matches[1] );
+			$url = $matches[2];
+			if ( preg_match( '/(wikipedia|wiktionary|wikisource|wikiquote|wikibooks|wikimedia)\.org/', $url ) ) {
+				$local = 1;
+			} else {
+				$local = 0;
+			}
+
+			if ( empty( $reserved[$prefix] ) ) {
+				$iwArray[$prefix] = array( "iw_prefix" => $prefix, "iw_url" => $url, "iw_local" => $local );
+			}
+		}
+	}
+
+	$sql = "-- Generated by rebuildInterwiki.php";
+
+
+	foreach ( $dblist as $db ) {
+		if ( isset( $specials[$db] ) ) {
+			# Special wiki
+			# Has interwiki links and interlanguage links to wikipedia
+
+			$host = $specials[$db];
+			$sql .= "\n--$host\n\n";
+			$sql .= "USE $db;\n" .
+					"TRUNCATE TABLE interwiki;\n" .
+					"INSERT INTO interwiki (iw_prefix, iw_url, iw_local) VALUES \n";
+			$first = true;
+
+			# Intermap links
+			foreach ( $iwArray as $iwEntry ) {
+				$sql .= makeLink( $iwEntry, $first, $db );
+			}
+
+			# Links to multilanguage sites
+			foreach ( $sites as $targetSite ) {
+				$sql .= makeLink( array( $targetSite->lateral, $targetSite->getURL( 'en' ), 1 ), $first, $db );
+			}
+
+			# Interlanguage links to wikipedia
+			$sql .= makeLanguageLinks( $sites['wiki'], $first, $db );
+
+			# Extra links
+			foreach ( $extraLinks as $link ) {
+				$sql .= makeLink( $link, $first, $db );
+			}
+
+			$sql .= ";\n";
+		} else {
+			# Find out which site this DB belongs to
+			$site = false;
+			foreach( $sites as $candidateSite ) {
+				$suffix = $candidateSite->suffix;
+				if ( preg_match( "/(.*)$suffix$/", $db, $matches ) ) {
+					$site = $candidateSite;
+					break;
+				}
+			}
+			if ( !$site ) {
+				print "Invalid database $db\n";
+				continue;
+			}
+			$lang = $matches[1];
+			$host = "$lang." . $site->url;
+			$sql .= "\n--$host\n\n";
+
+			$sql .= "USE $db;\n" .
+					"TRUNCATE TABLE interwiki;\n" .
+					"INSERT INTO interwiki (iw_prefix,iw_url,iw_local) VALUES\n";
+			$first = true;
+
+			# Intermap links
+			foreach ( $iwArray as $iwEntry ) {
+				# Suppress links with the same name as the site
+				if ( ( $suffix == 'wiki' && $iwEntry['iw_prefix'] != 'wikipedia' ) ||
+				  ( $suffix != 'wiki' && $suffix != $iwEntry['iw_prefix'] ) )
+				{
+					$sql .= makeLink( $iwEntry, $first, $db );
+				}
+			}
+
+			# Lateral links
+			foreach ( $sites as $targetSite ) {
+				# Suppress link to self
+				if ( $targetSite->suffix != $site->suffix ) {
+					$sql .= makeLink( array( $targetSite->lateral, $targetSite->getURL( $lang ), 1 ), $first, $db );
+				}
+			}
+
+			# Interlanguage links
+			$sql .= makeLanguageLinks( $site, $first, $db );
+
+			# w link within wikipedias
+			# Other sites already have it as a lateral link
+			if ( $site->suffix == "wiki" ) {
+				$sql .= makeLink( array("w", "http://en.wikipedia.org/wiki/$1", 1), $first, $db );
+			}
+
+			# Extra links
+			foreach ( $extraLinks as $link ){
+					$sql .= makeLink( $link, $first, $db );
+			}
+			$sql .= ";\n\n";
+		}
+	}
+	return $sql;
+}
+
+# ------------------------------------------------------------------------------------------
+
+# Returns part of an INSERT statement, corresponding to all interlanguage links to a particular site
+function makeLanguageLinks( &$site, &$first, $source ) {
+	global $langlist, $languageAliases;
+
+	$sql = "";
+
+	# Actual languages with their own databases
+	foreach ( $langlist as $targetLang ) {
+		$sql .= makeLink( array( $targetLang, $site->getURL( $targetLang ), 1 ), $first, $source );
+	}
+
+	# Language aliases
+	foreach ( $languageAliases as $alias => $lang ) {
+		$sql .= makeLink( array( $alias, $site->getURL( $lang ), 1 ), $first, $source );
+	}
+	return $sql;
+}
+
+# Make SQL for a single link from an array
+function makeLink( $entry, &$first, $source ) {
+	global $prefixRewrites;
+
+	if ( isset( $prefixRewrites[$source] ) && isset( $prefixRewrites[$source][$entry[0]] ) ) {
+		$entry[0] = $prefixRewrites[$source][$entry[0]];
+	}
+
+	$sql = "";
+	# Add comma
+	if ( $first ) {
+		$first = false;
+	} else {
+		$sql .= ",\n";
+	}
+	$dbr = wfGetDB( DB_SLAVE );
+	$sql .= "(" . $dbr->makeList( $entry ) . ")";
+	return $sql;
+}
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/rebuildInterwiki.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/rebuildInterwiki.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/rebuildInterwiki.php	(revision 1280)
@@ -0,0 +1,30 @@
+<?php
+/**
+ * Rebuild interwiki table using the file on meta and the language list
+ * Wikimedia specific!
+ * @todo document
+ * @addtogroup Maintenance
+ */
+
+/** */
+$oldCwd = getcwd();
+
+$optionsWithArgs = array( "o" );
+include_once( "commandLine.inc" );
+include_once( "rebuildInterwiki.inc" );
+chdir( $oldCwd );
+
+$sql = getRebuildInterwikiSQL();
+
+# Output
+if ( isset( $options['o'] ) ) {
+	# To file specified with -o
+	$file = fopen( $options['o'], "w" );
+	fwrite( $file, $sql );
+	fclose( $file );
+} else {
+	# To stdout
+	print $sql;
+}
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/rebuildall.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/rebuildall.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/rebuildall.php	(revision 1280)
@@ -0,0 +1,38 @@
+<?php
+/**
+ * Rebuild link tracking tables from scratch.  This takes several
+ * hours, depending on the database size and server configuration.
+ * @todo document
+ * @addtogroup Maintenance
+ */
+
+/** */
+require_once( "commandLine.inc" );
+
+#require_once( "rebuildlinks.inc" );
+require_once( "refreshLinks.inc" );
+require_once( "rebuildtextindex.inc" );
+require_once( "rebuildrecentchanges.inc" );
+
+$database = Database::newFromParams( $wgDBserver, $wgDBadminuser, $wgDBadminpassword, $wgDBname );
+
+print "** Rebuilding fulltext search index (if you abort this will break searching; run this script again to fix):\n";
+dropTextIndex( $database );
+rebuildTextIndex( $database );
+createTextIndex( $database );
+
+print "\n\n** Rebuilding recentchanges table:\n";
+rebuildRecentChangesTablePass1();
+rebuildRecentChangesTablePass2();
+
+# Doesn't work anymore
+# rebuildLinkTables();
+
+# Use the slow incomplete one instead. It's designed to work in the background
+print "\n\n** Rebuilding links tables -- this can take a long time. It should be safe to abort via ctrl+C if you get bored.\n";
+refreshLinks( 1 );
+
+print "Done.\n";
+exit();
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/rebuildrecentchanges.inc
===================================================================
--- /MediaWiki/branches/1.11/maintenance/rebuildrecentchanges.inc	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/rebuildrecentchanges.inc	(revision 1280)
@@ -0,0 +1,93 @@
+<?php
+/**
+ * Rebuild recent changes table.
+ *
+ * @todo document
+ * @addtogroup Maintenance
+ */
+
+/** */
+function rebuildRecentChangesTablePass1()
+{
+	$fname = 'rebuildRecentChangesTablePass1';
+	$dbw = wfGetDB( DB_MASTER );
+	extract( $dbw->tableNames( 'recentchanges', 'cur', 'old' ) );
+
+	$dbw->delete( 'recentchanges', '*' );
+
+	print( "Loading from page and revision tables...\n" );
+
+	global $wgRCMaxAge;
+	$cutoff = time() - $wgRCMaxAge;
+	$dbw->insertSelect( 'recentchanges', array( 'page', 'revision' ),
+		array(
+			'rc_timestamp'  => 'rev_timestamp',
+			'rc_cur_time'   => 'rev_timestamp',
+			'rc_user'       => 'rev_user',
+			'rc_user_text'  => 'rev_user_text',
+			'rc_namespace'  => 'page_namespace',
+			'rc_title'      => 'page_title',
+			'rc_comment'    => 'rev_comment',
+			'rc_minor'      => 'rev_minor_edit',
+			'rc_bot'        => 0,
+			'rc_new'        => 'page_is_new',
+			'rc_cur_id'     => 'page_id',
+			'rc_this_oldid' => 'rev_id',
+			'rc_last_oldid' => 0, // is this ok?
+			'rc_type'       => $dbw->conditional( 'page_is_new != 0', RC_NEW, RC_EDIT ),
+		), array(
+			'rev_timestamp > ' . $dbw->addQuotes( $dbw->timestamp( $cutoff ) ),
+			'rev_page=page_id'
+		), $fname,
+		array(), // INSERT options
+		array( 'ORDER BY' => 'rev_timestamp DESC', 'LIMIT' => 5000 ) // SELECT options
+	);
+}
+
+function rebuildRecentChangesTablePass2()
+{
+	$dbw = wfGetDB( DB_MASTER );
+	list ($recentchanges, $revision) = $dbw->tableNamesN( 'recentchanges', 'revision' );
+
+	print( "Updating links...\n" );
+
+	# Fill in the rc_last_oldid field, which points to the previous edit
+	#
+	$sql = "SELECT rc_cur_id,rc_this_oldid,rc_timestamp FROM $recentchanges " .
+	  "ORDER BY rc_cur_id,rc_timestamp";
+	$res = $dbw->query( $sql, DB_MASTER );
+
+	$lastCurId = 0;
+	$lastOldId = 0;
+	while ( $obj = $dbw->fetchObject( $res ) ) {
+		$new = 0;
+		if( $obj->rc_cur_id != $lastCurId ) {
+			# Switch! Look up the previous last edit, if any
+			$lastCurId = intval( $obj->rc_cur_id );
+			$emit = $obj->rc_timestamp;
+			$sql2 = "SELECT rev_id FROM $revision " .
+				"WHERE rev_page={$lastCurId} ".
+				"AND rev_timestamp<'{$emit}' ORDER BY rev_timestamp DESC LIMIT 1";
+			$res2 = $dbw->query( $sql2 );
+			if( $row = $dbw->fetchObject( $res2 ) ) {
+				$lastOldId = intval( $row->rev_id );
+			} else {
+				# No previous edit
+				$lastOldId = 0;
+				$new = 1;
+			}
+			$dbw->freeResult( $res2 );
+		}
+		if( $lastCurId == 0 ) {
+			print "Uhhh, something wrong? No curid\n";
+		} else {
+			$sql3 = "UPDATE $recentchanges SET rc_last_oldid=$lastOldId,rc_new=$new,rc_type=$new " .
+				"WHERE rc_cur_id={$lastCurId} AND rc_this_oldid={$obj->rc_this_oldid}";
+			$dbw->query( $sql3 );
+			$lastOldId = intval( $obj->rc_this_oldid );
+		}
+	}
+	$dbw->freeResult( $res );
+}
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/rebuildrecentchanges.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/rebuildrecentchanges.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/rebuildrecentchanges.php	(revision 1280)
@@ -0,0 +1,24 @@
+<?php
+/**
+ * Rebuild link tracking tables from scratch.  This takes several
+ * hours, depending on the database size and server configuration.
+ *
+ * @todo document
+ * @addtogroup Maintenance
+ */
+
+/** */
+require_once( "commandLine.inc" );
+require_once( "rebuildrecentchanges.inc" );
+$wgTitle = Title::newFromText( "Rebuild recent changes script" );
+
+$wgDBuser			= $wgDBadminuser;
+$wgDBpassword		= $wgDBadminpassword;
+
+rebuildRecentChangesTablePass1();
+rebuildRecentChangesTablePass2();
+
+print "Done.\n";
+exit();
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/rebuildtextindex.inc
===================================================================
--- /MediaWiki/branches/1.11/maintenance/rebuildtextindex.inc	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/rebuildtextindex.inc	(revision 1280)
@@ -0,0 +1,67 @@
+<?php
+require_once 'counter.php';
+/**
+ * Rebuild the fulltext search indexes. This may take a while
+ * depending on the database size and server configuration.
+ *
+ * Rebuilding is faster if you drop the index and recreate it,
+ * but that will prevent searches from working while it runs.
+ *
+ * @todo document
+ * @addtogroup Maintenance
+ */
+
+/** */
+define( "RTI_CHUNK_SIZE", 500 );
+
+function dropTextIndex( &$database )
+{
+	$searchindex = $database->tableName( 'searchindex' );
+	if ( $database->indexExists( "searchindex", "si_title" ) ) {
+		echo "Dropping index...\n";
+		$sql = "ALTER TABLE $searchindex DROP INDEX si_title, DROP INDEX si_text";
+		$database->query($sql, "dropTextIndex" );
+	}
+}
+
+function createTextIndex( &$database )
+{
+	$searchindex = $database->tableName( 'searchindex' );
+	echo "\nRebuild the index...\n";
+	$sql = "ALTER TABLE $searchindex ADD FULLTEXT si_title (si_title), " .
+	  "ADD FULLTEXT si_text (si_text)";
+	$database->query($sql, "createTextIndex" );
+}
+
+function rebuildTextIndex( &$database )
+{
+	list ($page, $revision, $text, $searchindex) = $database->tableNamesN( 'page', 'revision', 'text', 'searchindex' );
+
+	$sql = "SELECT MAX(page_id) AS count FROM $page";
+	$res = $database->query($sql, "rebuildTextIndex" );
+	$s = $database->fetchObject($res);
+	$count = $s->count;
+	echo "Rebuilding index fields for {$count} pages...\n";
+	$n = 0;
+
+	while ( $n < $count ) {
+		print_c( $n - 1, $n);
+		$end = $n + RTI_CHUNK_SIZE - 1;
+		$sql = "SELECT page_id, page_namespace, page_title, old_flags, old_text
+		          FROM $page, $revision, $text
+		         WHERE page_id BETWEEN $n AND $end
+		           AND page_latest=rev_id
+		           AND rev_text_id=old_id";
+		$res = $database->query($sql, "rebuildTextIndex" );
+
+		while( $s = $database->fetchObject($res) ) {
+			$revtext = Revision::getRevisionText( $s );
+			$u = new SearchUpdate( $s->page_id, $s->page_title, $revtext );
+			$u->doUpdate();
+		}
+		$database->freeResult( $res );
+		$n += RTI_CHUNK_SIZE;
+	}
+}
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/rebuildtextindex.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/rebuildtextindex.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/rebuildtextindex.php	(revision 1280)
@@ -0,0 +1,24 @@
+<?php
+/**
+ * Rebuild search index table from scratch.  This takes several
+ * hours, depending on the database size and server configuration.
+ *
+ * @todo document
+ * @addtogroup Maintenance
+ */
+
+/** */
+require_once( "commandLine.inc" );
+require_once( "rebuildtextindex.inc" );
+$wgTitle = Title::newFromText( "Rebuild text index script" );
+
+$database = Database::newFromParams( $wgDBserver, $wgDBadminuser, $wgDBadminpassword, $wgDBname );
+
+dropTextIndex( $database );
+rebuildTextIndex( $database );
+createTextIndex( $database );
+
+print "Done.\n";
+exit();
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/refreshImageCount.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/refreshImageCount.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/refreshImageCount.php	(revision 1280)
@@ -0,0 +1,25 @@
+<?php
+
+// Quickie hack; patch-ss_images.sql uses variables which don't
+// replicate properly.
+
+require_once( "commandLine.inc" );
+
+$dbw = wfGetDB( DB_MASTER );
+
+// Load the current value from the master
+$count = $dbw->selectField( 'site_stats', 'ss_images' );
+
+echo wfWikiID().": forcing ss_images to $count\n";
+
+// First set to NULL so that it changes on the master
+$dbw->update( 'site_stats',
+	array( 'ss_images' => null ),
+	array( 'ss_row_id' => 1 ) );
+
+// Now this update will be forced to go out
+$dbw->update( 'site_stats',
+	array( 'ss_images' => $count ),
+	array( 'ss_row_id' => 1 ) );
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/refreshLinks.inc
===================================================================
--- /MediaWiki/branches/1.11/maintenance/refreshLinks.inc	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/refreshLinks.inc	(revision 1280)
@@ -0,0 +1,130 @@
+<?php
+/**
+ * @todo document
+ * @addtogroup Maintenance
+ */
+
+/** */
+define( "REPORTING_INTERVAL", 100 );
+#define( "REPORTING_INTERVAL", 1 );
+
+function refreshLinks( $start, $newOnly = false, $maxLag = false, $end = 0 ) {
+	global $wgUser, $wgParser, $wgUseImageResize, $wgUseTidy;
+
+	$fname = 'refreshLinks';
+	$dbr = wfGetDB( DB_SLAVE );
+	$start = intval( $start );
+
+	# Don't generate TeX PNGs (lack of a sensible current directory causes errors anyway)
+	$wgUser->setOption('math', MW_MATH_SOURCE);
+
+	# Don't generate extension images (e.g. Timeline)
+	$wgParser->mTagHooks = array();
+
+	# Don't generate thumbnail images
+	$wgUseImageResize = false;
+	$wgUseTidy = false;
+
+	if ( $newOnly ) {
+		print "Refreshing links from ";
+		$res = $dbr->select( 'page',
+			array( 'page_id' ),
+			array(
+				'page_is_new' => 1,
+				"page_id > $start" ),
+			$fname
+		);
+		$num = $dbr->numRows( $res );
+		print "$num new articles...\n";
+
+		$i = 0;
+		while ( $row = $dbr->fetchObject( $res ) ) {
+			if ( !( ++$i % REPORTING_INTERVAL ) ) {
+				print "$i\n";
+				wfWaitForSlaves( $maxLag );
+			}
+
+			fixLinksFromArticle( $row->page_id );
+		}
+	} else {
+		print "Refreshing link table.\n";
+		if ( !$end ) {
+			$end = $dbr->selectField( 'page', 'max(page_id)', false );
+		}
+		print("Starting from page_id $start of $end.\n");
+
+		for ($id = $start; $id <= $end; $id++) {
+
+			if ( !($id % REPORTING_INTERVAL) ) {
+				print "$id\n";
+				wfWaitForSlaves( $maxLag );
+			}
+			fixLinksFromArticle( $id );
+		}
+	}
+}
+
+function fixLinksFromArticle( $id ) {
+	global $wgTitle, $wgParser;
+	
+	$wgTitle = Title::newFromID( $id );
+	$dbw = wfGetDB( DB_MASTER );
+
+	$linkCache =& LinkCache::singleton();
+	$linkCache->clear();
+	
+	if ( is_null( $wgTitle ) ) {
+		return;
+	}
+	$dbw->begin();
+
+	$revision = Revision::newFromTitle( $wgTitle );
+	if ( !$revision ) {
+		return;
+	}
+
+	$options = new ParserOptions;
+	$parserOutput = $wgParser->parse( $revision->getText(), $wgTitle, $options, true, true, $revision->getId() );
+	$update = new LinksUpdate( $wgTitle, $parserOutput, false );
+	$update->doUpdate();
+	$dbw->immediateCommit();
+}
+
+function deleteLinksFromNonexistent( $maxLag = 0 ) {
+	$fname = 'deleteLinksFromNonexistent';
+
+	wfWaitForSlaves( $maxLag );
+
+	$dbw = wfGetDB( DB_WRITE );
+
+	$linksTables = array(
+		'pagelinks' => 'pl_from',
+		'imagelinks' => 'il_from',
+		'categorylinks' => 'cl_from',
+		'templatelinks' => 'tl_from',
+		'externallinks' => 'el_from',
+	);
+
+	$page = $dbw->tableName( 'page' );
+
+
+	foreach ( $linksTables as $table => $field ) {
+		if ( !$dbw->ping() ) {
+			print "DB disconnected, reconnecting...";
+			while ( !$dbw->ping() ) {
+				print ".";
+				sleep(10);
+			}
+			print "\n";
+		}
+
+		$pTable = $dbw->tableName( $table );
+		$sql = "DELETE $pTable FROM $pTable LEFT JOIN $page ON page_id=$field WHERE page_id IS NULL";
+
+		print "Deleting $table from non-existent articles...";
+		$dbw->query( $sql, $fname );
+		print " fixed " .$dbw->affectedRows() . " row(s)\n";
+	}
+}
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/refreshLinks.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/refreshLinks.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/refreshLinks.php	(revision 1280)
@@ -0,0 +1,31 @@
+<?php
+/**
+ * @todo document
+ * @addtogroup Maintenance
+ */
+
+/** */
+$optionsWithArgs = array( 'm', 'e' );
+require_once( "commandLine.inc" );
+require_once( "refreshLinks.inc" );
+
+error_reporting( E_ALL & (~E_NOTICE) );
+
+if ( !$options['dfn-only'] ) {
+	if ($args[0]) {
+		$start = (int)$args[0];
+	} else {
+		$start = 1;
+	}
+
+	refreshLinks( $start, $options['new-only'], $options['m'], $options['e'] );
+}
+// this bit's bad for replication: disabling temporarily
+// --brion 2005-07-16
+//deleteLinksFromNonexistent();
+
+if ( $options['globals'] ) {
+	print_r( $GLOBALS );
+}
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/removeUnusedAccounts.inc
===================================================================
--- /MediaWiki/branches/1.11/maintenance/removeUnusedAccounts.inc	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/removeUnusedAccounts.inc	(revision 1280)
@@ -0,0 +1,46 @@
+<?php
+
+/**
+ * Support functions for the removeUnusedAccounts maintenance script
+ *
+ *
+ * @addtogroup Maintenance
+ * @author Rob Church <robchur@gmail.com>
+ */
+
+/**
+ * Could the specified user account be deemed inactive?
+ * (No edits, no deleted edits, no log entries, no current/old uploads)
+ *
+ * @param $id User's ID
+ * @param $master Perform checking on the master
+ * @return bool
+ */
+function isInactiveAccount( $id, $master = false ) {
+	$dbo = wfGetDB( $master ? DB_MASTER : DB_SLAVE );
+	$fname = 'isInactiveAccount';
+	$checks = array( 'revision' => 'rev', 'archive' => 'ar', 'logging' => 'log',
+					 'image' => 'img', 'oldimage' => 'oi' );
+	$count = 0;
+
+	$dbo->immediateBegin();
+	foreach( $checks as $table => $fprefix ) {
+		$conds = array( $fprefix . '_user' => $id );
+		$count += (int)$dbo->selectField( $table, 'COUNT(*)', $conds, $fname );
+	}
+	$dbo->immediateCommit();
+
+	return $count == 0;
+}
+
+/**
+ * Show help for the maintenance script
+ */
+function showHelp() {
+	echo( "Delete unused user accounts from the database.\n\n" );
+	echo( "USAGE: php removeUnusedAccounts.php [--delete]\n\n" );
+	echo( "  --delete : Delete accounts which are discovered to be inactive\n" );
+	echo( "\n" );
+}
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/removeUnusedAccounts.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/removeUnusedAccounts.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/removeUnusedAccounts.php	(revision 1280)
@@ -0,0 +1,57 @@
+<?php
+
+/**
+ * Remove unused user accounts from the database
+ * An unused account is one which has made no edits
+ *
+ * @addtogroup Maintenance
+ * @author Rob Church <robchur@gmail.com>
+ */
+
+/**
+ * @todo Don't delete sysops or bureaucrats
+ */
+
+$options = array( 'help', 'delete' );
+require_once( 'commandLine.inc' );
+require_once( 'removeUnusedAccounts.inc' );
+echo( "Remove Unused Accounts\n\n" );
+$fname = 'removeUnusedAccounts';
+
+if( isset( $options['help'] ) ) {
+	showHelp();
+	exit();
+}
+
+# Do an initial scan for inactive accounts and report the result
+echo( "Checking for unused user accounts...\n" );
+$del = array();
+$dbr = wfGetDB( DB_SLAVE );
+$res = $dbr->select( 'user', array( 'user_id', 'user_name' ), '', $fname );
+while( $row = $dbr->fetchObject( $res ) ) {
+	# Check the account, but ignore it if it's the primary administrator
+	if( $row->user_id > 1 && isInactiveAccount( $row->user_id, true ) ) {
+		# Inactive; print out the name and flag it
+		$del[] = $row->user_id;
+		echo( $row->user_name . "\n" );
+	}
+}
+$count = count( $del );
+echo( "...found {$count}.\n" );
+
+# If required, go back and delete each marked account
+if( $count > 0 && isset( $options['delete'] ) ) {
+	echo( "\nDeleting inactive accounts..." );
+	$dbw = wfGetDB( DB_MASTER );
+	$dbw->delete( 'user', array( 'user_id' => $del ), $fname );
+	echo( "done.\n" );
+	# Update the site_stats.ss_users field
+	$users = $dbw->selectField( 'user', 'COUNT(*)', array(), $fname );
+	$dbw->update( 'site_stats', array( 'ss_users' => $users ), array( 'ss_row_id' => 1 ), $fname );
+} else {
+	if( $count > 0 )
+		echo( "\nRun the script again with --delete to remove them from the database.\n" );
+}
+echo( "\n" );
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/renamewiki.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/renamewiki.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/renamewiki.php	(revision 1280)
@@ -0,0 +1,60 @@
+<?php
+require_once( "commandLine.inc" );
+
+/**
+ * Why yes, this *is* another special-purpose Wikimedia maintenance script!
+ * Should be fixed up and generalized.
+ */
+
+if ( count( $args ) != 2 ) {
+	wfDie( "Rename external storage dbs and leave a new one...\n" .
+			"Usage: php renamewiki.php <olddb> <newdb>\n" );
+}
+
+list( $from, $to ) = $args;
+
+echo "Renaming blob tables in ES from $from to $to...\n";
+echo "Sleeping 5 seconds...";
+sleep(5);
+echo "\n";
+
+$maintenance = "$IP/maintenance";
+
+# Initialise external storage
+if ( is_array( $wgDefaultExternalStore ) ) {
+	$stores = $wgDefaultExternalStore;
+} elseif ( $wgDefaultExternalStore ) {
+	$stores = array( $wgDefaultExternalStore );
+} else {
+	$stores = array();
+}
+if ( count( $stores ) ) {
+	require_once( 'ExternalStoreDB.php' );
+	print "Initialising external storage $store...\n";
+	global $wgDBuser, $wgDBpassword, $wgExternalServers;
+	foreach ( $stores as $storeURL ) {
+		$m = array();
+		if ( !preg_match( '!^DB://(.*)$!', $storeURL, $m ) ) {
+			continue;
+		}
+		
+		$cluster = $m[1];
+		
+		# Hack
+		$wgExternalServers[$cluster][0]['user'] = $wgDBuser;
+		$wgExternalServers[$cluster][0]['password'] = $wgDBpassword;
+		
+		$store = new ExternalStoreDB;
+		$extdb =& $store->getMaster( $cluster );
+		$extdb->query( "SET table_type=InnoDB" );
+		$extdb->query( "CREATE DATABASE {$to}" );
+		$extdb->query( "ALTER TABLE {$from}.blobs RENAME TO {$to}.blobs" );
+		$extdb->selectDB( $from );
+		dbsource( "$maintenance/storage/blobs.sql", $extdb );
+		$extdb->immediateCommit();
+	}
+}
+
+echo "done.\n";
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/renderDump.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/renderDump.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/renderDump.php	(revision 1280)
@@ -0,0 +1,102 @@
+<?php
+/**
+ * Take page text out of an XML dump file and render basic HTML out to files.
+ * This is *NOT* suitable for publishing or offline use; it's intended for
+ * running comparitive tests of parsing behavior using real-world data.
+ *
+ * Templates etc are pulled from the local wiki database, not from the dump.
+ *
+ * Copyright (C) 2006 Brion Vibber <brion@pobox.com>
+ * http://www.mediawiki.org/
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @addtogroup Maintenance
+ */
+
+$optionsWithArgs = array( 'report' );
+
+require_once( 'commandLine.inc' );
+require_once( 'SpecialImport.php' );
+
+class DumpRenderer {
+	function __construct( $dir ) {
+		$this->stderr = fopen( "php://stderr", "wt" );
+		$this->outputDirectory = $dir;
+		$this->count = 0;
+	}
+
+	function handleRevision( $rev ) {
+		$title = $rev->getTitle();
+		if (!$title) {
+			fprintf( $this->stderr, "Got bogus revision with null title!" );
+			return;
+		}
+		$display = $title->getPrefixedText();
+		
+		$this->count++;
+		
+		$sanitized = rawurlencode( $display );
+		$filename = sprintf( "%s/wiki-%07d-%s.html", 
+			$this->outputDirectory,
+			$this->count,
+			$sanitized );
+		fprintf( $this->stderr, "%s\n", $filename, $display );
+		
+		// fixme
+		$user = new User();
+		$parser = new Parser();
+		$options = ParserOptions::newFromUser( $user );
+		
+		$output = $parser->parse( $rev->getText(), $title, $options );
+		
+		file_put_contents( $filename,
+			"<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" " .
+			"\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n" .
+			"<html xmlns=\"http://www.w3.org/1999/xhtml\">\n" .
+			"<head>\n" .
+			"<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n" .
+			"<title>" . htmlspecialchars( $display ) . "</title>\n" .
+			"</head>\n" . 
+			"<body>\n" .
+			$output->getText() .
+			"</body>\n" .
+			"</html>" );
+	}
+
+	function run() {
+		$this->startTime = wfTime();
+
+		$file = fopen( 'php://stdin', 'rt' );
+		$source = new ImportStreamSource( $file );
+		$importer = new WikiImporter( $source );
+
+		$importer->setRevisionCallback(
+			array( &$this, 'handleRevision' ) );
+
+		return $importer->doImport();
+	}
+}
+
+if( isset( $options['output-dir'] ) ) {
+	$dir = $options['output-dir'];
+} else {
+	wfDie( "Must use --output-dir=/some/dir\n" );
+}
+$render = new DumpRenderer( $dir );
+$render->run();
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/runJobs.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/runJobs.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/runJobs.php	(revision 1280)
@@ -0,0 +1,33 @@
+<?php
+
+$optionsWithArgs = array( 'maxjobs' );
+$wgUseNormalUser = true;
+require_once( 'commandLine.inc' );
+require_once( "$IP/includes/JobQueue.php" );
+require_once( "$IP/includes/FakeTitle.php" );
+
+if ( isset( $options['maxjobs'] ) ) {
+	$maxJobs = $options['maxjobs'];
+} else {
+	$maxJobs = 10000;
+}
+
+$wgTitle = Title::newFromText( 'RunJobs.php' );
+
+$dbw = wfGetDB( DB_MASTER );
+$n = 0;
+while ( $dbw->selectField( 'job', 'count(*)', '', 'runJobs.php' ) ) {
+	$offset=0;
+	while ( false != ($job = Job::pop($offset)) ) {
+		wfWaitForSlaves( 5 );
+		print $job->id . "  " . $job->toString() . "\n";
+		$offset=$job->id;
+		if ( !$job->run() ) {
+			print "Error: {$job->error}\n";
+		}
+		if ( $maxJobs && ++$n > $maxJobs ) {
+			break 2;
+		}
+	}
+}
+?>
Index: /MediaWiki/branches/1.11/maintenance/showJobs.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/showJobs.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/showJobs.php	(revision 1280)
@@ -0,0 +1,19 @@
+<?php
+/**
+ * Based on runJobs.php
+ *
+ * @author Tim Starling
+ * @author Ashar Voultoiz
+ */
+require_once( 'commandLine.inc' );
+require_once( "$IP/includes/JobQueue.php" );
+require_once( "$IP/includes/FakeTitle.php" );
+
+// Trigger errors on inappropriate use of $wgTitle
+$wgTitle = new FakeTitle;
+
+$dbw = wfGetDB( DB_MASTER );
+$count = $dbw->selectField( 'job', 'count(*)', '', 'runJobs.php' );
+print $count."\n";
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/showStats.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/showStats.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/showStats.php	(revision 1280)
@@ -0,0 +1,46 @@
+<?php
+
+/**
+ * Maintenance script to show the cached statistics.
+ * Give out the same output as [[Special:Statistics]]
+ *
+ * @author Ashar Voultoiz <hashar@altern.org>
+ * Based on initStats.php by:
+ * @author Brion Vibber
+ * @author Rob Church <robchur@gmail.com>
+ *
+ * @licence GNU General Public License 2.0 or later
+ */
+
+require_once( 'commandLine.inc' );
+
+#
+# Configuration
+#
+$fields = array(
+	'ss_total_views' => 'Total views',
+	'ss_total_edits' => 'Total edits',
+	'ss_good_articles' => 'Number of articles',
+	'ss_total_pages' => 'Total pages',
+	'ss_users' => 'Number of users',
+	'ss_admins' => 'Number of admins',
+	'ss_images' => 'Number of images',
+);
+
+// Get cached stats from slave database
+$dbr = wfGetDB( DB_SLAVE );
+$fname = 'showStats';
+$stats = $dbr->selectRow( 'site_stats', '*', '' );
+
+// Get maximum size for each column
+$max_length_value = $max_length_desc = 0;
+foreach( $fields as $field => $desc ) {
+	$max_length_value = max( $max_length_value, strlen( $stats->$field ) );
+	$max_length_desc  = max( $max_length_desc , strlen( $desc )) ;
+}
+
+// Show them
+foreach( $fields as $field => $desc ) {
+	printf( "%-{$max_length_desc}s: %{$max_length_value}d\n", $desc, $stats->$field );
+}
+?>
Index: /MediaWiki/branches/1.11/maintenance/sql.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/sql.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/sql.php	(revision 1280)
@@ -0,0 +1,67 @@
+<?php
+
+/**
+ * Send SQL queries from the specified file to the database, performing
+ * variable replacement along the way.
+ */
+
+require_once( dirname(__FILE__) . '/' . 'commandLine.inc' );
+
+if ( isset( $options['help'] ) ) {
+	echo "Send SQL queries to a MediaWiki database.\nUsage: php sql.php [<file>]\n";
+	exit( 1 );
+}
+
+if ( isset( $args[0] ) ) {
+	$fileName = $args[0];
+	$file = fopen( $fileName, 'r' );
+	$promptCallback = false;
+} else {
+	$file = STDIN;
+	$promptObject = new SqlPromptPrinter( "> " );
+	$promptCallback = $promptObject->cb();
+}
+
+if ( !$file  ) {
+	echo "Unable to open input file\n";
+	exit( 1 );
+}
+
+$dbw =& wfGetDB( DB_MASTER );
+$error = $dbw->sourceStream( $file, $promptCallback, 'sqlPrintResult' );
+if ( $error !== true ) {
+	echo $error;
+	exit( 1 );
+} else {
+	exit( 0 );
+}
+
+//-----------------------------------------------------------------------------
+class SqlPromptPrinter {
+	function __construct( $prompt ) {
+		$this->prompt = $prompt;
+	}
+
+	function cb() {
+		return array( $this, 'printPrompt' );
+	}
+
+	function printPrompt() {
+		echo $this->prompt;
+	}
+}
+
+function sqlPrintResult( $res ) {
+	if ( !$res ) {
+		// Do nothing
+	} elseif ( $res->numRows() ) {
+		while ( $row = $res->fetchObject() ) {
+			print_r( $row );
+		}
+	} else {
+		$affected = $res->db->affectedRows();
+		echo "Query OK, $affected row(s) affected\n";
+	}
+}
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/stats.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/stats.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/stats.php	(revision 1280)
@@ -0,0 +1,49 @@
+<?php
+require_once('commandLine.inc');
+
+if( get_class( $wgMemc ) == 'FakeMemCachedClient' ) {
+	die("You are running FakeMemCachedClient, I can not provide any statistics.\n");
+}
+
+print "Requests\n";
+$session = intval($wgMemc->get(wfMemcKey('stats','request_with_session')));
+$noSession = intval($wgMemc->get(wfMemcKey('stats','request_without_session')));
+$total = $session + $noSession;
+printf( "with session:      %-10d %6.2f%%\n", $session, $session/$total*100 );
+printf( "without session:   %-10d %6.2f%%\n", $noSession, $noSession/$total*100 );
+printf( "total:             %-10d %6.2f%%\n", $total, 100 );
+
+
+print "\nParser cache\n";
+$hits = intval($wgMemc->get(wfMemcKey('stats','pcache_hit')));
+$invalid = intval($wgMemc->get(wfMemcKey('stats','pcache_miss_invalid')));
+$expired = intval($wgMemc->get(wfMemcKey('stats','pcache_miss_expired')));
+$absent = intval($wgMemc->get(wfMemcKey('stats','pcache_miss_absent')));
+$stub = intval($wgMemc->get(wfMemcKey('stats','pcache_miss_stub')));
+$total = $hits + $invalid + $expired + $absent + $stub;
+printf( "hits:              %-10d %6.2f%%\n", $hits, $hits/$total*100 );
+printf( "invalid:           %-10d %6.2f%%\n", $invalid, $invalid/$total*100 );
+printf( "expired:           %-10d %6.2f%%\n", $expired, $expired/$total*100 );
+printf( "absent:            %-10d %6.2f%%\n", $absent, $absent/$total*100 );
+printf( "stub threshold:    %-10d %6.2f%%\n", $stub, $stub/$total*100 );
+printf( "total:             %-10d %6.2f%%\n", $total, 100 );
+
+$hits = intval($wgMemc->get(wfMemcKey('stats','image_cache_hit')));
+$misses = intval($wgMemc->get(wfMemcKey('stats','image_cache_miss')));
+$updates = intval($wgMemc->get(wfMemcKey('stats','image_cache_update')));
+$total = $hits + $misses;
+print("\nImage cache\n");
+printf( "hits:              %-10d %6.2f%%\n", $hits, $hits/$total*100 );
+printf( "misses:            %-10d %6.2f%%\n", $misses, $misses/$total*100 );
+printf( "updates:           %-10d\n", $updates );
+
+$hits = intval($wgMemc->get(wfMemcKey('stats','diff_cache_hit')));
+$misses = intval($wgMemc->get(wfMemcKey('stats','diff_cache_miss')));
+$uncacheable = intval($wgMemc->get(wfMemcKey('stats','diff_uncacheable')));
+$total = $hits + $misses + $uncacheable;
+print("\nDiff cache\n");
+printf( "hits:              %-10d %6.2f%%\n", $hits, $hits/$total*100 );
+printf( "misses:            %-10d %6.2f%%\n", $misses, $misses/$total*100 );
+printf( "uncacheable:       %-10d %6.2f%%\n", $uncacheable, $uncacheable/$total*100 );
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/storage/blobs.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/storage/blobs.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/storage/blobs.sql	(revision 1280)
@@ -0,0 +1,8 @@
+-- Blobs table for external storage
+
+CREATE TABLE /*$wgDBprefix*/blobs (
+	blob_id integer UNSIGNED NOT NULL AUTO_INCREMENT,
+	blob_text longblob,
+	PRIMARY KEY  (blob_id)
+) TYPE=MyISAM MAX_ROWS=1000000 AVG_ROW_LENGTH=1000000;
+
Index: /MediaWiki/branches/1.11/maintenance/storage/checkStorage.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/storage/checkStorage.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/storage/checkStorage.php	(revision 1280)
@@ -0,0 +1,470 @@
+<?php
+
+/**
+ * Fsck for MediaWiki
+ */
+
+define( 'CONCAT_HEADER', 'O:27:"concatenatedgziphistoryblob"' );
+
+if ( !defined( 'MEDIAWIKI' ) ) {
+	require_once( dirname(__FILE__) . '/../commandLine.inc' );
+	require_once( 'ExternalStore.php' );
+	require_once( 'ExternalStoreDB.php' );
+	require_once( 'SpecialImport.php' );
+
+	$cs = new CheckStorage;
+	$fix = isset( $options['fix'] );
+	if ( isset( $args[0] ) ) {
+		$xml = $args[0];
+	} else {
+		$xml = false;
+	}
+	$cs->check( $fix, $xml );
+}
+
+
+//----------------------------------------------------------------------------------
+
+class CheckStorage
+{
+	var $oldIdMap, $errors;
+	var $dbStore = null;
+
+	var $errorDescriptions = array(
+		'restore text' => 'Damaged text, need to be restored from a backup',
+		'restore revision' => 'Damaged revision row, need to be restored from a backup',
+		'unfixable' => 'Unexpected errors with no automated fixing method',
+		'fixed' => 'Errors already fixed',
+		'fixable' => 'Errors which would already be fixed if --fix was specified',
+	);		
+
+	function check( $fix = false, $xml = '' ) {
+		$fname = 'checkStorage';
+		$dbr = wfGetDB( DB_SLAVE );
+		if ( $fix ) {
+			$dbw = wfGetDB( DB_MASTER );
+			print "Checking, will fix errors if possible...\n";
+		} else {
+			print "Checking...\n";
+		}
+		$maxRevId = $dbr->selectField( 'revision', 'MAX(rev_id)', false, $fname );
+		$chunkSize = 1000;
+		$flagStats = array();
+		$objectStats = array();
+		$knownFlags = array( 'external', 'gzip', 'object', 'utf-8' );
+		$this->errors = array(
+			'restore text' => array(),
+			'restore revision' => array(),
+			'unfixable' => array(),
+			'fixed' => array(),
+			'fixable' => array(),
+		);
+
+		for ( $chunkStart = 1 ; $chunkStart < $maxRevId; $chunkStart += $chunkSize ) {
+			$chunkEnd = $chunkStart + $chunkSize - 1;
+			//print "$chunkStart of $maxRevId\n";
+
+			// Fetch revision rows
+			$this->oldIdMap = array();
+			$dbr->ping();		
+			$res = $dbr->select( 'revision', array( 'rev_id', 'rev_text_id' ), 
+				array( "rev_id BETWEEN $chunkStart AND $chunkEnd" ), $fname );
+			while ( $row = $dbr->fetchObject( $res ) ) {
+				$this->oldIdMap[$row->rev_id] = $row->rev_text_id;
+			}
+			$dbr->freeResult( $res );
+
+			if ( !count( $this->oldIdMap ) ) {
+				continue;
+			}
+
+			// Fetch old_flags
+			$missingTextRows = array_flip( $this->oldIdMap );
+			$externalRevs = array();
+			$objectRevs = array();
+			$res = $dbr->select( 'text', array( 'old_id', 'old_flags' ), 
+				'old_id IN (' . implode( ',', $this->oldIdMap ) . ')', $fname );
+			while ( $row = $dbr->fetchObject( $res ) ) {
+				$flags = $row->old_flags;
+				$id = $row->old_id;
+
+				// Create flagStats row if it doesn't exist
+				$flagStats = $flagStats + array( $flags => 0 );
+				// Increment counter
+				$flagStats[$flags]++;
+
+				// Not missing
+				unset( $missingTextRows[$row->old_id] );
+
+				// Check for external or object
+				if ( $flags == '' ) {
+					$flagArray = array();
+				} else {
+					$flagArray = explode( ',', $flags );
+				}
+				if ( in_array( 'external', $flagArray ) ) {
+					$externalRevs[] = $id;
+				} elseif ( in_array( 'object', $flagArray ) ) {
+					$objectRevs[] = $id;
+				}
+
+				// Check for unrecognised flags
+				if ( $flags == '0' ) {
+					// This is a known bug from 2004
+					// It's safe to just erase the old_flags field
+					if ( $fix ) {
+						$this->error( 'fixed', "Warning: old_flags set to 0", $id );
+						$dbw->ping();
+						$dbw->update( 'text', array( 'old_flags' => '' ), 
+							array( 'old_id' => $id ), $fname );
+						echo "Fixed\n";
+					} else {
+						$this->error( 'fixable', "Warning: old_flags set to 0", $id );
+					}
+				} elseif ( count( array_diff( $flagArray, $knownFlags ) ) ) {
+					$this->error( 'unfixable', "Error: invalid flags field \"$flags\"", $id );
+				}
+			}
+			$dbr->freeResult( $res );
+
+			// Output errors for any missing text rows
+			foreach ( $missingTextRows as $oldId => $revId ) {
+				$this->error( 'restore revision', "Error: missing text row", $oldId );
+			}
+
+			// Verify external revisions
+			$externalConcatBlobs = array();
+			$externalNormalBlobs = array();
+			if ( count( $externalRevs ) ) {
+				$res = $dbr->select( 'text', array( 'old_id', 'old_flags', 'old_text' ), 
+					array( 'old_id IN (' . implode( ',', $externalRevs ) . ')' ), $fname );
+				while ( $row = $dbr->fetchObject( $res ) ) {
+					$urlParts = explode( '://', $row->old_text, 2 );
+					if ( count( $urlParts ) !== 2 || $urlParts[1] == '' ) {
+						$this->error( 'restore text', "Error: invalid URL \"{$row->old_text}\"", $row->old_id );
+						continue;
+					}
+					list( $proto, $path ) = $urlParts;
+					if ( $proto != 'DB' ) {
+						$this->error( 'restore text', "Error: invalid external protocol \"$proto\"", $row->old_id );
+						continue;
+					}
+					$path = explode( '/', $row->old_text );
+					$cluster = $path[2];
+					$id = $path[3];
+					if ( isset( $path[4] ) ) {
+						$externalConcatBlobs[$cluster][$id][] = $row->old_id;
+					} else {
+						$externalNormalBlobs[$cluster][$id][] = $row->old_id;
+					}
+				}
+				$dbr->freeResult( $res );
+			}
+
+			// Check external concat blobs for the right header
+			$this->checkExternalConcatBlobs( $externalConcatBlobs );
+			
+			// Check external normal blobs for existence
+			if ( count( $externalNormalBlobs ) ) {
+				if ( is_null( $this->dbStore ) ) {
+					$this->dbStore = new ExternalStoreDB;
+				}
+				foreach ( $externalConcatBlobs as $cluster => $xBlobIds ) {
+					$blobIds = array_keys( $xBlobIds );
+					$extDb =& $this->dbStore->getSlave( $cluster );
+					$blobsTable = $this->dbStore->getTable( $extDb );
+					$res = $extDb->select( $blobsTable, 
+						array( 'blob_id' ), 
+						array( 'blob_id IN( ' . implode( ',', $blobIds ) . ')' ), $fname );
+					while ( $row = $extDb->fetchObject( $res ) ) {
+						unset( $xBlobIds[$row->blob_id] );
+					}
+					$extDb->freeResult( $res );
+					// Print errors for missing blobs rows
+					foreach ( $xBlobIds as $blobId => $oldId ) {
+						$this->error( 'restore text', "Error: missing target $blobId for one-part ES URL", $oldId );
+					}
+				}
+			}
+
+			// Check local objects
+			$dbr->ping();
+			$concatBlobs = array();
+			$curIds = array();
+			if ( count( $objectRevs ) ) {
+				$headerLength = 300;
+				$res = $dbr->select( 'text', array( 'old_id', 'old_flags', "LEFT(old_text, $headerLength) AS header" ), 
+					array( 'old_id IN (' . implode( ',', $objectRevs ) . ')' ), $fname );
+				while ( $row = $dbr->fetchObject( $res ) ) {
+					$oldId = $row->old_id;
+					$matches = array();
+					if ( !preg_match( '/^O:(\d+):"(\w+)"/', $row->header, $matches ) ) {
+						$this->error( 'restore text', "Error: invalid object header", $oldId );
+						continue;
+					}
+
+					$className = strtolower( $matches[2] );
+					if ( strlen( $className ) != $matches[1] ) {
+						$this->error( 'restore text', "Error: invalid object header, wrong class name length", $oldId );
+						continue;
+					}
+
+					$objectStats = $objectStats + array( $className => 0 );
+					$objectStats[$className]++;
+
+					switch ( $className ) {
+						case 'concatenatedgziphistoryblob':
+							// Good
+							break;
+						case 'historyblobstub':
+						case 'historyblobcurstub':
+							if ( strlen( $row->header ) == $headerLength ) {
+								$this->error( 'unfixable', "Error: overlong stub header", $oldId );
+								continue;
+							}
+							$stubObj = unserialize( $row->header );
+							if ( !is_object( $stubObj ) ) {
+								$this->error( 'restore text', "Error: unable to unserialize stub object", $oldId );
+								continue;
+							}
+							if ( $className == 'historyblobstub' ) {
+								$concatBlobs[$stubObj->mOldId][] = $oldId;
+							} else {
+								$curIds[$stubObj->mCurId][] = $oldId;
+							}
+							break;
+						default:
+							$this->error( 'unfixable', "Error: unrecognised object class \"$className\"", $oldId );
+					}
+				}
+				$dbr->freeResult( $res );
+			}
+
+			// Check local concat blob validity
+			$externalConcatBlobs = array();
+			if ( count( $concatBlobs ) ) {
+				$headerLength = 300;
+				$res = $dbr->select( 'text', array( 'old_id', 'old_flags', "LEFT(old_text, $headerLength) AS header" ), 
+					array( 'old_id IN (' . implode( ',', array_keys( $concatBlobs ) ) . ')' ), $fname );
+				while ( $row = $dbr->fetchObject( $res ) ) {
+					$flags = explode( ',', $row->old_flags );
+					if ( in_array( 'external', $flags ) ) {
+						// Concat blob is in external storage?
+						if ( in_array( 'object', $flags ) ) {
+							$urlParts = explode( '/', $row->header );
+							if ( $urlParts[0] != 'DB:' ) {
+								$this->error( 'unfixable', "Error: unrecognised external storage type \"{$urlParts[0]}", $row->old_id );
+							} else {
+								$cluster = $urlParts[2];
+								$id = $urlParts[3];
+								if ( !isset( $externalConcatBlobs[$cluster][$id] ) ) {
+									$externalConcatBlobs[$cluster][$id] = array();
+								}
+								$externalConcatBlobs[$cluster][$id] = array_merge( 
+									$externalConcatBlobs[$cluster][$id], $concatBlobs[$row->old_id]
+								);
+							}
+						} else {
+							$this->error( 'unfixable', "Error: invalid flags \"{$row->old_flags}\" on concat bulk row {$row->old_id}",
+								$concatBlobs[$row->old_id] );
+						}
+					} elseif ( strcasecmp( substr( $row->header, 0, strlen( CONCAT_HEADER ) ), CONCAT_HEADER ) ) {
+						$this->error( 'restore text', "Error: Incorrect object header for concat bulk row {$row->old_id}", 
+							$concatBlobs[$row->old_id] );
+					} # else good
+
+					unset( $concatBlobs[$row->old_id] );
+				}
+				$dbr->freeResult( $res );
+			}
+
+			// Check targets of unresolved stubs
+			$this->checkExternalConcatBlobs( $externalConcatBlobs );
+
+			// next chunk
+		}
+
+		print "\n\nErrors:\n";
+		foreach( $this->errors as $name => $errors ) {
+			if ( count( $errors ) ) {
+				$description = $this->errorDescriptions[$name];
+				echo "$description: " . implode( ',', array_keys( $errors ) ) . "\n";
+			}
+		}
+
+		if ( count( $this->errors['restore text'] ) && $fix ) {
+			if ( (string)$xml !== '' ) {
+				$this->restoreText( array_keys( $this->errors['restore text'] ), $xml );
+			} else {
+				echo "Can't fix text, no XML backup specified\n";
+			}
+		}
+
+		print "\nFlag statistics:\n";
+		$total = array_sum( $flagStats );
+		foreach ( $flagStats as $flag => $count ) {
+			printf( "%-30s %10d %5.2f%%\n", $flag, $count, $count / $total * 100 );
+		}
+		print "\nLocal object statistics:\n";
+		$total = array_sum( $objectStats );
+		foreach ( $objectStats as $className => $count ) {
+			printf( "%-30s %10d %5.2f%%\n", $className, $count, $count / $total * 100 );
+		}
+	}
+
+
+	function error( $type, $msg, $ids ) {
+		if ( is_array( $ids ) && count( $ids ) == 1 ) {
+			$ids = reset( $ids );
+		}
+		if ( is_array( $ids ) ) {
+			$revIds = array();
+			foreach ( $ids as $id ) {
+				$revIds = array_merge( $revIds, array_keys( $this->oldIdMap, $id ) );
+			}
+			print "$msg in text rows " . implode( ', ', $ids ) . 
+				", revisions " . implode( ', ', $revIds ) . "\n";
+		} else {
+			$id = $ids;
+			$revIds = array_keys( $this->oldIdMap, $id );
+			if ( count( $revIds ) == 1 ) {
+				print "$msg in old_id $id, rev_id {$revIds[0]}\n";
+			} else {
+				print "$msg in old_id $id, revisions " . implode( ', ', $revIds ) . "\n";
+			}
+		}
+		$this->errors[$type] = $this->errors[$type] + array_flip( $revIds );
+	}
+
+	function checkExternalConcatBlobs( $externalConcatBlobs ) {
+		$fname = 'CheckStorage::checkExternalConcatBlobs';
+		if ( !count( $externalConcatBlobs ) ) {
+			return;
+		}
+
+		if ( is_null( $this->dbStore ) ) {
+			$this->dbStore = new ExternalStoreDB;
+		}
+		
+		foreach ( $externalConcatBlobs as $cluster => $oldIds ) {
+			$blobIds = array_keys( $oldIds );
+			$extDb =& $this->dbStore->getSlave( $cluster );
+			$blobsTable = $this->dbStore->getTable( $extDb );
+			$headerLength = strlen( CONCAT_HEADER );
+			$res = $extDb->select( $blobsTable, 
+				array( 'blob_id', "LEFT(blob_text, $headerLength) AS header" ), 
+				array( 'blob_id IN( ' . implode( ',', $blobIds ) . ')' ), $fname );
+			while ( $row = $extDb->fetchObject( $res ) ) {
+				if ( strcasecmp( $row->header, CONCAT_HEADER ) ) {
+					$this->error( 'restore text', "Error: invalid header on target $cluster/{$row->blob_id} of two-part ES URL", 
+						$oldIds[$row->blob_id] );
+				}
+				unset( $oldIds[$row->blob_id] );
+
+			}
+			$extDb->freeResult( $res );
+
+			// Print errors for missing blobs rows
+			foreach ( $oldIds as $blobId => $oldIds ) {
+				$this->error( 'restore text', "Error: missing target $cluster/$blobId for two-part ES URL", $oldIds );
+			}
+		}
+	}
+
+	function restoreText( $revIds, $xml ) {
+		global $wgTmpDirectory, $wgDBname;
+
+		if ( !count( $revIds ) ) {
+			return;
+		}
+
+		print "Restoring text from XML backup...\n";
+
+		$revFileName = "$wgTmpDirectory/broken-revlist-$wgDBname";
+		$filteredXmlFileName = "$wgTmpDirectory/filtered-$wgDBname.xml";
+		
+		// Write revision list
+		if ( !file_put_contents( $revFileName, implode( "\n", $revIds ) ) ) {
+			echo "Error writing revision list, can't restore text\n";
+			return;
+		}
+
+		// Run mwdumper
+		echo "Filtering XML dump...\n";
+		$exitStatus = 0;
+		passthru( 'mwdumper ' . 
+			wfEscapeShellArg( 
+				"--output=file:$filteredXmlFileName",
+				"--filter=revlist:$revFileName",
+				$xml
+			), $exitStatus
+		);
+
+		if ( $exitStatus ) {
+			echo "mwdumper died with exit status $exitStatus\n";
+			return;
+		}
+
+		$file = fopen( $filteredXmlFileName, 'r' );
+		if ( !$file ) {
+			echo "Unable to open filtered XML file\n";
+			return;
+		}
+
+		$dbr = wfGetDB( DB_SLAVE );
+		$dbw = wfGetDB( DB_MASTER );
+		$dbr->ping();
+		$dbw->ping();
+		
+		$source = new ImportStreamSource( $file );
+		$importer = new WikiImporter( $source );
+		$importer->setRevisionCallback( array( &$this, 'importRevision' ) );
+		$importer->doImport();
+	}
+
+	function importRevision( &$revision, &$importer ) {
+		$fname = 'CheckStorage::importRevision';
+
+		$id = $revision->getID();
+		$text = $revision->getText();
+		if ( $text === '' ) {
+			// This is what happens if the revision was broken at the time the 
+			// dump was made. Unfortunately, it also happens if the revision was 
+			// legitimately blank, so there's no way to tell the difference. To
+			// be safe, we'll skip it and leave it broken
+			$id = $id ? $id : '';
+			echo "Revision $id is blank in the dump, may have been broken before export\n";
+			return;
+		}
+
+		if ( !$id )  {
+			// No ID, can't import
+			echo "No id tag in revision, can't import\n";
+			return;
+		}
+
+		// Find text row again
+		$dbr = wfGetDB( DB_SLAVE );
+		$oldId = $dbr->selectField( 'revision', 'rev_text_id', array( 'rev_id' => $id ), $fname );
+		if ( !$oldId ) {
+			echo "Missing revision row for rev_id $id\n";
+			return;
+		}
+
+		// Compress the text
+		$flags = Revision::compressRevisionText( $text );
+
+		// Update the text row
+		$dbw = wfGetDB( DB_MASTER );
+		$dbw->update( 'text', 
+			array( 'old_flags' => $flags, 'old_text' => $text ),
+			array( 'old_id' => $oldId ),
+			$fname, array( 'LIMIT' => 1 )
+		);
+
+		// Remove it from the unfixed list and add it to the fixed list
+		unset( $this->errors['restore text'][$id] );
+		$this->errors['fixed'][$id] = true;
+	}
+}
+?>
Index: /MediaWiki/branches/1.11/maintenance/storage/compressOld.inc
===================================================================
--- /MediaWiki/branches/1.11/maintenance/storage/compressOld.inc	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/storage/compressOld.inc	(revision 1280)
@@ -0,0 +1,303 @@
+<?php
+/**
+ * @addtogroup Maintenance
+ */
+
+/** */
+require_once( 'Revision.php' );
+require_once( 'ExternalStoreDB.php' );
+
+/** @todo document */
+function compressOldPages( $start = 0, $extdb = '' ) {
+	$fname = 'compressOldPages';
+
+	$chunksize = 50;
+	print "Starting from old_id $start...\n";
+	$dbw = wfGetDB( DB_MASTER );
+	do {
+		$res = $dbw->select( 'text', array( 'old_id','old_flags','old_namespace','old_title','old_text' ),
+			"old_id>=$start", $fname, array( 'ORDER BY' => 'old_id', 'LIMIT' => $chunksize, 'FOR UPDATE' ) );
+		if( $dbw->numRows( $res ) == 0 ) {
+			break;
+		}
+		$last = $start;
+		while( $row = $dbw->fetchObject( $res ) ) {
+			# print "  {$row->old_id} - {$row->old_namespace}:{$row->old_title}\n";
+			compressPage( $row, $extdb );
+			$last = $row->old_id;
+		}
+		$dbw->freeResult( $res );
+		$start = $last + 1; # Deletion may leave long empty stretches
+		print "$start...\n";
+	} while( true );
+}
+
+/** @todo document */
+function compressPage( $row, $extdb ) {
+	$fname = 'compressPage';
+	if ( false !== strpos( $row->old_flags, 'gzip' ) || false !== strpos( $row->old_flags, 'object' ) ) {
+		#print "Already compressed row {$row->old_id}\n";
+		return false;
+	}
+	$dbw = wfGetDB( DB_MASTER );
+	$flags = $row->old_flags ? "{$row->old_flags},gzip" : "gzip";
+	$compress = gzdeflate( $row->old_text );
+
+	# Store in external storage if required
+	if ( $extdb !== '' ) {
+		$storeObj = new ExternalStoreDB;
+		$compress = $storeObj->store( $extdb, $compress );
+		if ( $compress === false ) {
+			print "Unable to store object\n";
+			return false;
+		}
+	}
+
+	# Update text row
+	$dbw->update( 'text',
+		array( /* SET */
+			'old_flags' => $flags,
+			'old_text' => $compress
+		), array( /* WHERE */
+			'old_id' => $row->old_id
+		), $fname, 'LIMIT 1'
+	);
+	return true;
+}
+
+define( 'LS_INDIVIDUAL', 0 );
+define( 'LS_CHUNKED', 1 );
+
+/** @todo document */
+function compressWithConcat( $startId, $maxChunkSize, $maxChunkFactor, $factorThreshold, $beginDate,
+	$endDate, $extdb="", $maxPageId = false )
+{
+	$fname = 'compressWithConcat';
+	$loadStyle = LS_CHUNKED;
+
+	$dbr = wfGetDB( DB_SLAVE );
+	$dbw = wfGetDB( DB_MASTER );
+
+	# Set up external storage
+	if ( $extdb != '' ) {
+		$storeObj = new ExternalStoreDB;
+	}
+
+	# Get all articles by page_id
+	if ( !$maxPageId ) {
+		$maxPageId = $dbr->selectField( 'page', 'max(page_id)', '', $fname );
+	}
+	print "Starting from $startId of $maxPageId\n";
+	$pageConds = array();
+
+	/*
+	if ( $exclude_ns0 ) {
+		print "Excluding main namespace\n";
+		$pageConds[] = 'page_namespace<>0';
+	}
+	if ( $queryExtra ) {
+                $pageConds[] = $queryExtra;
+	}
+	 */
+
+	# For each article, get a list of revisions which fit the criteria
+	
+	# No recompression, use a condition on old_flags
+	# Don't compress object type entities, because that might produce data loss when
+	# overwriting bulk storage concat rows. Don't compress external references, because
+	# the script doesn't yet delete rows from external storage.
+	$conds = array(
+		"old_flags NOT LIKE '%object%' AND old_flags NOT LIKE '%external%'");
+
+	if ( $beginDate ) {
+		if ( !preg_match( '/^\d{14}$/', $beginDate ) ) {
+			print "Invalid begin date \"$beginDate\"\n";
+			return false;
+		}
+		$conds[] = "rev_timestamp>'" . $beginDate . "'";
+	}
+	if ( $endDate )  {
+		if ( !preg_match( '/^\d{14}$/', $endDate ) ) {
+			print "Invalid end date \"$endDate\"\n";
+			return false;
+		}
+		$conds[] = "rev_timestamp<'" . $endDate . "'";
+	}
+	if ( $loadStyle == LS_CHUNKED ) {
+		$tables = array( 'revision', 'text' );
+		$fields = array( 'rev_id', 'rev_text_id', 'old_flags', 'old_text' );
+		$conds[] = 'rev_text_id=old_id';
+		$revLoadOptions = 'FOR UPDATE';
+	} else {
+		$tables = array( 'revision' );
+		$fields = array( 'rev_id', 'rev_text_id' );
+		$revLoadOptions = array();
+	}
+
+	# Don't work with current revisions
+	# Don't lock the page table for update either -- TS 2006-04-04
+	#$tables[] = 'page';
+	#$conds[] = 'page_id=rev_page AND rev_id != page_latest';
+
+	for ( $pageId = $startId; $pageId <= $maxPageId; $pageId++ ) {
+		wfWaitForSlaves( 5 );
+
+		# Wake up
+		$dbr->ping();		
+
+		# Get the page row
+		$pageRes = $dbr->select( 'page', 
+			array('page_id', 'page_namespace', 'page_title','page_latest'),
+			$pageConds + array('page_id' => $pageId), $fname );
+		if ( $dbr->numRows( $pageRes ) == 0 ) {
+			continue;
+		}
+		$pageRow = $dbr->fetchObject( $pageRes );
+
+		# Display progress
+		$titleObj = Title::makeTitle( $pageRow->page_namespace, $pageRow->page_title );
+		print "$pageId\t" . $titleObj->getPrefixedDBkey() . " ";
+
+		# Load revisions
+		$revRes = $dbw->select( $tables, $fields,
+			array_merge( array( 
+				'rev_page' => $pageRow->page_id, 
+				# Don't operate on the current revision
+				# Use < instead of <> in case the current revision has changed 
+				# since the page select, which wasn't locking
+				'rev_id < ' . $pageRow->page_latest
+			), $conds ),
+			$fname,
+			$revLoadOptions
+		);
+		$revs = array();
+		while ( $revRow = $dbw->fetchObject( $revRes ) ) {
+			$revs[] = $revRow;
+		}
+
+		if ( count( $revs ) < 2) {
+			# No revisions matching, no further processing
+			print "\n";
+			continue;
+		}
+
+		# For each chunk
+		$i = 0;
+		while ( $i < count( $revs ) ) {
+			if ( $i < count( $revs ) - $maxChunkSize ) {
+				$thisChunkSize = $maxChunkSize;
+			} else {
+				$thisChunkSize = count( $revs ) - $i;
+			}
+
+			$chunk = new ConcatenatedGzipHistoryBlob();
+			$stubs = array();
+			$dbw->begin();
+			$usedChunk = false;
+			$primaryOldid = $revs[$i]->rev_text_id;
+
+			# Get the text of each revision and add it to the object
+			for ( $j = 0; $j < $thisChunkSize && $chunk->isHappy( $maxChunkFactor, $factorThreshold ); $j++ ) {
+				$oldid = $revs[$i + $j]->rev_text_id;
+
+				# Get text
+				if ( $loadStyle == LS_INDIVIDUAL ) {
+					$textRow = $dbw->selectRow( 'text',
+						array( 'old_flags', 'old_text' ),
+						array( 'old_id' => $oldid ),
+						$fname,
+						'FOR UPDATE'
+					);
+					$text = Revision::getRevisionText( $textRow );
+				} else {
+					$text = Revision::getRevisionText( $revs[$i + $j] );
+				}
+
+				if ( $text === false ) {
+					print "\nError, unable to get text in old_id $oldid\n";
+					#$dbw->delete( 'old', array( 'old_id' => $oldid ) );
+				}
+
+				if ( $extdb == "" && $j == 0 ) {
+					$chunk->setText( $text );
+					print '.';
+				} else {
+					# Don't make a stub if it's going to be longer than the article
+					# Stubs are typically about 100 bytes
+					if ( strlen( $text ) < 120 ) {
+						$stub = false;
+						print 'x';
+					} else {
+						$stub = $chunk->addItem( $text );
+						$stub->setLocation( $primaryOldid );
+						$stub->setReferrer( $oldid );
+						print '.';
+						$usedChunk = true;
+					}
+					$stubs[$j] = $stub;
+				}
+			}
+			$thisChunkSize = $j;
+
+			# If we couldn't actually use any stubs because the pages were too small, do nothing
+			if ( $usedChunk ) {
+				if ( $extdb != "" ) {
+					# Move blob objects to External Storage
+					$stored = $storeObj->store( $extdb, serialize( $chunk ));
+					if ($stored === false) {
+						print "Unable to store object\n";
+						return false;
+					}
+					# Store External Storage URLs instead of Stub placeholders
+					foreach ($stubs as $stub) {
+						if ($stub===false)
+							continue;
+						# $stored should provide base path to a BLOB
+						$url = $stored."/".$stub->getHash();
+						$dbw->update( 'text',
+							array( /* SET */
+								'old_text' => $url,
+								'old_flags' => 'external,utf-8',
+							), array ( /* WHERE */
+								'old_id' => $stub->getReferrer(),
+							)
+						);
+					}
+				} else {
+					# Store the main object locally
+					$dbw->update( 'text',
+						array( /* SET */
+							'old_text' => serialize( $chunk ),
+							'old_flags' => 'object,utf-8',
+						), array( /* WHERE */
+							'old_id' => $primaryOldid
+						)
+					);
+
+					# Store the stub objects
+					for ( $j = 1; $j < $thisChunkSize; $j++ ) {
+						# Skip if not compressing and don't overwrite the first revision
+						if ( $stubs[$j] !== false && $revs[$i + $j]->rev_text_id != $primaryOldid ) {
+							$dbw->update( 'text',
+								array( /* SET */
+									'old_text' => serialize($stubs[$j]),
+									'old_flags' => 'object,utf-8',
+								), array( /* WHERE */
+									'old_id' => $revs[$i + $j]->rev_text_id
+								)
+							);
+						}
+					}
+				}
+			}
+			# Done, next
+			print "/";
+			$dbw->commit();
+			$i += $thisChunkSize;
+			wfWaitForSlaves( 5 );
+		}
+		print "\n";
+	}
+	return true;
+}
+?>
Index: /MediaWiki/branches/1.11/maintenance/storage/compressOld.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/storage/compressOld.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/storage/compressOld.php	(revision 1280)
@@ -0,0 +1,81 @@
+<?php
+/**
+ * Compress the text of a wiki
+ *
+ * @addtogroup Maintenance
+ */
+
+/** */
+
+/**
+ * Usage:
+ *
+ * Non-wikimedia
+ * php compressOld.php [options...]
+ *
+ * Wikimedia
+ * php compressOld.php <database> [options...]
+ *
+ * Options are:
+ *  -t <type>           set compression type to either:
+ *                          gzip: compress revisions independently
+ *                          concat: concatenate revisions and compress in chunks (default)
+ *  -c <chunk-size>     maximum number of revisions in a concat chunk
+ *  -b <begin-date>     earliest date to check for uncompressed revisions
+ *  -e <end-date>       latest revision date to compress
+ *  -s <start-id>       the old_id to start from
+ *  -f <max-factor>     the maximum ratio of compressed chunk bytes to uncompressed avg. revision bytes
+ *  -h <threshold>      is a minimum number of KB, where <max-factor> cuts in
+ *  --extdb <cluster>   store specified revisions in an external cluster (untested)
+ *
+ */
+
+$optionsWithArgs = array( 't', 'c', 's', 'f', 'h', 'extdb', 'endid', 'e' );
+require_once( dirname(__FILE__) . '/../commandLine.inc' );
+require_once( "compressOld.inc" );
+
+if( !function_exists( "gzdeflate" ) ) {
+	print "You must enable zlib support in PHP to compress old revisions!\n";
+	print "Please see http://www.php.net/manual/en/ref.zlib.php\n\n";
+	wfDie();
+}
+
+$defaults = array(
+	't' => 'concat',
+	'c' => 20,
+	's' => 0,
+	'f' => 5,
+	'h' => 100,
+	'b' => '',
+    'e' => '',
+    'extdb' => '',
+    'endid' => false,
+);
+
+$options = $options + $defaults;
+
+if ( $options['t'] != 'concat' && $options['t'] != 'gzip' ) {
+	print "Type \"{$options['t']}\" not supported\n";
+}
+
+if ( $options['extdb'] != '' ) {
+	print "Compressing database $wgDBname to external cluster {$options['extdb']}\n" . str_repeat('-', 76) . "\n\n";
+} else {
+	print "Compressing database $wgDBname\n" . str_repeat('-', 76) . "\n\n";
+}
+
+$success = true;
+if ( $options['t'] == 'concat' ) {
+    $success = compressWithConcat( $options['s'], $options['c'], $options['f'], $options['h'], $options['b'],
+        $options['e'], $options['extdb'], $options['endid'] );
+} else {
+	compressOldPages( $options['s'], $options['extdb'] );
+}
+
+if ( $success ) {
+	print "Done.\n";
+}
+
+exit();
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/storage/dumpRev.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/storage/dumpRev.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/storage/dumpRev.php	(revision 1280)
@@ -0,0 +1,15 @@
+<?php
+
+require_once( dirname(__FILE__) . '/../commandLine.inc' );
+
+$dbr = wfGetDB( DB_SLAVE );
+$row = $dbr->selectRow( 'text', array( 'old_flags', 'old_text' ), array( 'old_id' => $args[0] ) );
+$obj = unserialize( $row->old_text );
+
+if ( get_class( $obj ) == 'concatenatedgziphistoryblob' ) {
+	print_r( array_keys( $obj->mItems ) );
+} else {
+	var_dump( $obj );
+}
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/storage/make-blobs
===================================================================
--- /MediaWiki/branches/1.11/maintenance/storage/make-blobs	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/storage/make-blobs	(revision 1280)
@@ -0,0 +1,11 @@
+#!/bin/bash
+
+if [ X$2 == X ];then
+	echo 'Usage: make-blobs <server> <db>'
+	exit 1
+fi
+
+echo "CREATE DATABASE $2" | mysql -u wikiadmin -p`wikiadmin_pass` -h $1 && \
+mysql -u wikiadmin -p`wikiadmin_pass` -h $1 $2 < blobs.sql
+	
+	
Index: /MediaWiki/branches/1.11/maintenance/storage/moveToExternal.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/storage/moveToExternal.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/storage/moveToExternal.php	(revision 1280)
@@ -0,0 +1,113 @@
+<?php
+
+define( 'REPORTING_INTERVAL', 1 );
+
+if ( !defined( 'MEDIAWIKI' ) ) {
+	$optionsWithArgs = array( 'm', 's' );
+
+	require_once( dirname(__FILE__) . '/../commandLine.inc' );
+	require_once( 'ExternalStoreDB.php' );
+	require_once( 'resolveStubs.php' );
+
+	$fname = 'moveToExternal';
+
+	if ( !isset( $args[0] ) ) {
+		print "Usage: php moveToExternal.php [-s <startid>] [-e <endid>] <cluster>\n";
+		exit;
+	}
+
+	$cluster = $args[0];
+	$dbw = wfGetDB( DB_MASTER );
+
+	if ( isset( $options['e'] ) ) {
+		$maxID = $options['e'];
+	} else {
+		$maxID = $dbw->selectField( 'text', 'MAX(old_id)', false, $fname );
+	}
+	$minID = isset( $options['s'] ) ? $options['s'] : 1;
+
+	moveToExternal( $cluster, $maxID, $minID );
+}
+
+
+
+function moveToExternal( $cluster, $maxID, $minID = 1 ) {
+	$fname = 'moveToExternal';
+	$dbw = wfGetDB( DB_MASTER );
+	$dbr = wfGetDB( DB_SLAVE );
+
+	$count = $maxID - $minID + 1;
+	$blockSize = 1000;
+	$numBlocks = ceil( $count / $blockSize );
+	print "Moving text rows from $minID to $maxID to external storage\n";
+	$ext = new ExternalStoreDB;
+	$numMoved = 0;
+	$numStubs = 0;
+	
+	for ( $block = 0; $block < $numBlocks; $block++ ) {
+		$blockStart = $block * $blockSize + $minID;
+		$blockEnd = $blockStart + $blockSize - 1;
+		
+		if ( !($block % REPORTING_INTERVAL) ) {
+			print "oldid=$blockStart, moved=$numMoved\n";
+			wfWaitForSlaves( 2 );
+		}
+		
+		$res = $dbr->select( 'text', array( 'old_id', 'old_flags', 'old_text' ),
+			array(
+				"old_id BETWEEN $blockStart AND $blockEnd",
+				"old_flags NOT LIKE '%external%'",
+			), $fname );
+		while ( $row = $dbr->fetchObject( $res ) ) {
+			# Resolve stubs
+			$text = $row->old_text;
+			$id = $row->old_id;
+			if ( $row->old_flags === '' ) {
+				$flags = 'external';
+			} else {
+				$flags = "{$row->old_flags},external";
+			}
+			
+			if ( strpos( $flags, 'object' ) !== false ) {
+				$obj = unserialize( $text );
+				$className = strtolower( get_class( $obj ) );
+				if ( $className == 'historyblobstub' ) {
+					#resolveStub( $id, $row->old_text, $row->old_flags );
+					#$numStubs++;
+					continue;
+				} elseif ( $className == 'historyblobcurstub' ) {
+					$text = gzdeflate( $obj->getText() );
+					$flags = 'utf-8,gzip,external';
+				} elseif ( $className == 'concatenatedgziphistoryblob' ) {
+					// Do nothing
+				} else {
+					print "Warning: unrecognised object class \"$className\"\n";
+					continue;
+				}
+			} else {
+				$className = false;
+			}
+
+			if ( strlen( $text ) < 100 && $className === false ) {
+				// Don't move tiny revisions
+				continue;
+			}
+
+			#print "Storing "  . strlen( $text ) . " bytes to $url\n";
+			#print "old_id=$id\n";
+
+			$url = $ext->store( $cluster, $text );
+			if ( !$url ) {
+				print "Error writing to external storage\n";
+				exit;
+			}
+			$dbw->update( 'text',
+				array( 'old_flags' => $flags, 'old_text' => $url ),
+				array( 'old_id' => $id ), $fname );
+			$numMoved++;
+		}
+		$dbr->freeResult( $res );
+	}
+}
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/storage/resolveStubs.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/storage/resolveStubs.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/storage/resolveStubs.php	(revision 1280)
@@ -0,0 +1,97 @@
+<?php
+
+define( 'REPORTING_INTERVAL', 100 );
+
+if ( !defined( 'MEDIAWIKI' ) ) {
+	$optionsWithArgs = array( 'm' );
+
+	require_once( dirname(__FILE__) . '/../commandLine.inc' );
+	require_once( 'includes/ExternalStoreDB.php' );
+
+	resolveStubs();
+}
+
+/**
+ * Convert history stubs that point to an external row to direct
+ * external pointers
+ */
+function resolveStubs() {
+	$fname = 'resolveStubs';
+
+	$dbr = wfGetDB( DB_SLAVE );
+	$maxID = $dbr->selectField( 'text', 'MAX(old_id)', false, $fname );
+	$blockSize = 10000;
+	$numBlocks = intval( $maxID / $blockSize ) + 1;
+
+	for ( $b = 0; $b < $numBlocks; $b++ ) {
+		wfWaitForSlaves( 2 );
+		
+		printf( "%5.2f%%\n", $b / $numBlocks * 100 );
+		$start = intval($maxID / $numBlocks) * $b + 1;
+		$end = intval($maxID / $numBlocks) * ($b + 1);
+		
+		$res = $dbr->select( 'text', array( 'old_id', 'old_text', 'old_flags' ),
+			"old_id>=$start AND old_id<=$end " .
+			# Using a more restrictive flag set for now, until I do some more analysis -- TS
+			#"AND old_flags LIKE '%object%' AND old_flags NOT LIKE '%external%' ".
+			
+			"AND old_flags='object' " .
+			"AND LOWER(LEFT(old_text,22)) = 'O:15:\"historyblobstub\"'", $fname );
+		while ( $row = $dbr->fetchObject( $res ) ) {
+			resolveStub( $row->old_id, $row->old_text, $row->old_flags );
+		}
+		$dbr->freeResult( $res );
+
+		
+	}
+	print "100%\n";
+}
+
+/**
+ * Resolve a history stub
+ */
+function resolveStub( $id, $stubText, $flags ) {
+	$fname = 'resolveStub';
+
+	$stub = unserialize( $stubText );
+	$flags = explode( ',', $flags );
+
+	$dbr = wfGetDB( DB_SLAVE );
+	$dbw = wfGetDB( DB_MASTER );
+
+	if ( strtolower( get_class( $stub ) ) !== 'historyblobstub' ) {
+		print "Error found object of class " . get_class( $stub ) . ", expecting historyblobstub\n";
+		return;
+	}
+
+	# Get the (maybe) external row
+	$externalRow = $dbr->selectRow( 'text', array( 'old_text' ),
+		array( 'old_id' => $stub->mOldId, "old_flags LIKE '%external%'" ),
+		$fname
+	);
+
+	if ( !$externalRow ) {
+		# Object wasn't external
+		return;
+	}
+
+	# Preserve the legacy encoding flag, but switch from object to external
+	if ( in_array( 'utf-8', $flags ) ) {
+		$newFlags = 'external,utf-8';
+	} else {
+		$newFlags = 'external';
+	}
+
+	# Update the row
+	#print "oldid=$id\n";
+	$dbw->update( 'text',
+		array( /* SET */
+			'old_flags' => $newFlags,
+			'old_text' => $externalRow->old_text . '/' . $stub->mHash
+		),
+		array( /* WHERE */
+			'old_id' => $id
+		), $fname
+	);
+}
+?>
Index: /MediaWiki/branches/1.11/maintenance/tables.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/tables.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/tables.sql	(revision 1280)
@@ -0,0 +1,1143 @@
+-- SQL to create the initial tables for the MediaWiki database.
+-- This is read and executed by the install script; you should
+-- not have to run it by itself unless doing a manual install.
+
+--
+-- General notes:
+--
+-- If possible, create tables as InnoDB to benefit from the
+-- superior resiliency against crashes and ability to read
+-- during writes (and write during reads!)
+--
+-- Only the 'searchindex' table requires MyISAM due to the
+-- requirement for fulltext index support, which is missing
+-- from InnoDB.
+--
+--
+-- The MySQL table backend for MediaWiki currently uses
+-- 14-character BINARY or VARBINARY fields to store timestamps.
+-- The format is YYYYMMDDHHMMSS, which is derived from the
+-- text format of MySQL's TIMESTAMP fields.
+--
+-- Historically TIMESTAMP fields were used, but abandoned
+-- in early 2002 after a lot of trouble with the fields
+-- auto-updating.
+--
+-- The Postgres backend uses DATETIME fields for timestamps,
+-- and we will migrate the MySQL definitions at some point as
+-- well.
+--
+--
+-- The /*$wgDBprefix*/ comments in this and other files are
+-- replaced with the defined table prefix by the installer
+-- and updater scripts. If you are installing or running
+-- updates manually, you will need to manually insert the
+-- table prefix if any when running these scripts.
+--
+
+
+--
+-- The user table contains basic account information,
+-- authentication keys, etc.
+--
+-- Some multi-wiki sites may share a single central user table
+-- between separate wikis using the $wgSharedDB setting.
+--
+-- Note that when a external authentication plugin is used,
+-- user table entries still need to be created to store
+-- preferences and to key tracking information in the other
+-- tables.
+--
+CREATE TABLE /*$wgDBprefix*/user (
+  user_id int unsigned NOT NULL auto_increment,
+  
+  -- Usernames must be unique, must not be in the form of
+  -- an IP address. _Shouldn't_ allow slashes or case
+  -- conflicts. Spaces are allowed, and are _not_ converted
+  -- to underscores like titles. See the User::newFromName() for
+  -- the specific tests that usernames have to pass.
+  user_name varchar(255) binary NOT NULL default '',
+  
+  -- Optional 'real name' to be displayed in credit listings
+  user_real_name varchar(255) binary NOT NULL default '',
+  
+  -- Password hashes, normally hashed like so:
+  -- MD5(CONCAT(user_id,'-',MD5(plaintext_password))), see
+  -- wfEncryptPassword() in GlobalFunctions.php
+  user_password tinyblob NOT NULL,
+  
+  -- When using 'mail me a new password', a random
+  -- password is generated and the hash stored here.
+  -- The previous password is left in place until
+  -- someone actually logs in with the new password,
+  -- at which point the hash is moved to user_password
+  -- and the old password is invalidated.
+  user_newpassword tinyblob NOT NULL,
+  
+  -- Timestamp of the last time when a new password was
+  -- sent, for throttling purposes
+  user_newpass_time binary(14),
+
+  -- Note: email should be restricted, not public info.
+  -- Same with passwords.
+  user_email tinytext NOT NULL,
+  
+  -- Newline-separated list of name=value defining the user
+  -- preferences
+  user_options blob NOT NULL,
+  
+  -- This is a timestamp which is updated when a user
+  -- logs in, logs out, changes preferences, or performs
+  -- some other action requiring HTML cache invalidation
+  -- to ensure that the UI is updated.
+  user_touched binary(14) NOT NULL default '',
+  
+  -- A pseudorandomly generated value that is stored in
+  -- a cookie when the "remember password" feature is
+  -- used (previously, a hash of the password was used, but
+  -- this was vulnerable to cookie-stealing attacks)
+  user_token binary(32) NOT NULL default '',
+  
+  -- Initially NULL; when a user's e-mail address has been
+  -- validated by returning with a mailed token, this is
+  -- set to the current timestamp.
+  user_email_authenticated binary(14),
+  
+  -- Randomly generated token created when the e-mail address
+  -- is set and a confirmation test mail sent.
+  user_email_token binary(32),
+  
+  -- Expiration date for the user_email_token
+  user_email_token_expires binary(14),
+  
+  -- Timestamp of account registration.
+  -- Accounts predating this schema addition may contain NULL.
+  user_registration binary(14),
+  
+  -- Count of edits and edit-like actions.
+  --
+  -- *NOT* intended to be an accurate copy of COUNT(*) WHERE rev_user=user_id
+  -- May contain NULL for old accounts if batch-update scripts haven't been
+  -- run, as well as listing deleted edits and other myriad ways it could be
+  -- out of sync.
+  --
+  -- Meant primarily for heuristic checks to give an impression of whether
+  -- the account has been used much.
+  --
+  user_editcount int,
+
+  PRIMARY KEY user_id (user_id),
+  UNIQUE INDEX user_name (user_name),
+  INDEX (user_email_token)
+
+) /*$wgDBTableOptions*/;
+
+--
+-- User permissions have been broken out to a separate table;
+-- this allows sites with a shared user table to have different
+-- permissions assigned to a user in each project.
+--
+-- This table replaces the old user_rights field which used a
+-- comma-separated blob.
+--
+CREATE TABLE /*$wgDBprefix*/user_groups (
+  -- Key to user_id
+  ug_user int unsigned NOT NULL default '0',
+  
+  -- Group names are short symbolic string keys.
+  -- The set of group names is open-ended, though in practice
+  -- only some predefined ones are likely to be used.
+  --
+  -- At runtime $wgGroupPermissions will associate group keys
+  -- with particular permissions. A user will have the combined
+  -- permissions of any group they're explicitly in, plus
+  -- the implicit '*' and 'user' groups.
+  ug_group varbinary(16) NOT NULL default '',
+  
+  PRIMARY KEY (ug_user,ug_group),
+  KEY (ug_group)
+) /*$wgDBTableOptions*/;
+
+-- Stores notifications of user talk page changes, for the display
+-- of the "you have new messages" box
+CREATE TABLE /*$wgDBprefix*/user_newtalk (
+  -- Key to user.user_id
+  user_id int NOT NULL default '0',
+  -- If the user is an anonymous user their IP address is stored here
+  -- since the user_id of 0 is ambiguous
+  user_ip varbinary(40) NOT NULL default '',
+  INDEX user_id (user_id),
+  INDEX user_ip (user_ip)
+
+) /*$wgDBTableOptions*/;
+
+
+--
+-- Core of the wiki: each page has an entry here which identifies
+-- it by title and contains some essential metadata.
+--
+CREATE TABLE /*$wgDBprefix*/page (
+  -- Unique identifier number. The page_id will be preserved across
+  -- edits and rename operations, but not deletions and recreations.
+  page_id int unsigned NOT NULL auto_increment,
+  
+  -- A page name is broken into a namespace and a title.
+  -- The namespace keys are UI-language-independent constants,
+  -- defined in includes/Defines.php
+  page_namespace int NOT NULL,
+  
+  -- The rest of the title, as text.
+  -- Spaces are transformed into underscores in title storage.
+  page_title varchar(255) binary NOT NULL,
+  
+  -- Comma-separated set of permission keys indicating who
+  -- can move or edit the page.
+  page_restrictions tinyblob NOT NULL,
+  
+  -- Number of times this page has been viewed.
+  page_counter bigint unsigned NOT NULL default '0',
+  
+  -- 1 indicates the article is a redirect.
+  page_is_redirect tinyint unsigned NOT NULL default '0',
+  
+  -- 1 indicates this is a new entry, with only one edit.
+  -- Not all pages with one edit are new pages.
+  page_is_new tinyint unsigned NOT NULL default '0',
+  
+  -- Random value between 0 and 1, used for Special:Randompage
+  page_random real unsigned NOT NULL,
+  
+  -- This timestamp is updated whenever the page changes in
+  -- a way requiring it to be re-rendered, invalidating caches.
+  -- Aside from editing this includes permission changes,
+  -- creation or deletion of linked pages, and alteration
+  -- of contained templates.
+  page_touched binary(14) NOT NULL default '',
+
+  -- Handy key to revision.rev_id of the current revision.
+  -- This may be 0 during page creation, but that shouldn't
+  -- happen outside of a transaction... hopefully.
+  page_latest int unsigned NOT NULL,
+  
+  -- Uncompressed length in bytes of the page's current source text.
+  page_len int unsigned NOT NULL,
+
+  PRIMARY KEY page_id (page_id),
+  UNIQUE INDEX name_title (page_namespace,page_title),
+  
+  -- Special-purpose indexes
+  INDEX (page_random),
+  INDEX (page_len)
+
+) /*$wgDBTableOptions*/;
+
+--
+-- Every edit of a page creates also a revision row.
+-- This stores metadata about the revision, and a reference
+-- to the text storage backend.
+--
+CREATE TABLE /*$wgDBprefix*/revision (
+  rev_id int unsigned NOT NULL auto_increment,
+  
+  -- Key to page_id. This should _never_ be invalid.
+  rev_page int unsigned NOT NULL,
+  
+  -- Key to text.old_id, where the actual bulk text is stored.
+  -- It's possible for multiple revisions to use the same text,
+  -- for instance revisions where only metadata is altered
+  -- or a rollback to a previous version.
+  rev_text_id int unsigned NOT NULL,
+  
+  -- Text comment summarizing the change.
+  -- This text is shown in the history and other changes lists,
+  -- rendered in a subset of wiki markup by Linker::formatComment()
+  rev_comment tinyblob NOT NULL,
+  
+  -- Key to user.user_id of the user who made this edit.
+  -- Stores 0 for anonymous edits and for some mass imports.
+  rev_user int unsigned NOT NULL default '0',
+  
+  -- Text username or IP address of the editor.
+  rev_user_text varchar(255) binary NOT NULL default '',
+  
+  -- Timestamp
+  rev_timestamp binary(14) NOT NULL default '',
+  
+  -- Records whether the user marked the 'minor edit' checkbox.
+  -- Many automated edits are marked as minor.
+  rev_minor_edit tinyint unsigned NOT NULL default '0',
+  
+  -- Not yet used; reserved for future changes to the deletion system.
+  rev_deleted tinyint unsigned NOT NULL default '0',
+  
+  -- Length of this revision in bytes
+  rev_len int unsigned,
+
+  -- Key to revision.rev_id
+  -- This field is used to add support for a tree structure (The Adjacency List Model)
+  rev_parent_id int unsigned default NULL,
+
+  PRIMARY KEY rev_page_id (rev_page, rev_id),
+  UNIQUE INDEX rev_id (rev_id),
+  INDEX rev_timestamp (rev_timestamp),
+  INDEX page_timestamp (rev_page,rev_timestamp),
+  INDEX user_timestamp (rev_user,rev_timestamp),
+  INDEX usertext_timestamp (rev_user_text,rev_timestamp)
+
+) /*$wgDBTableOptions*/ MAX_ROWS=10000000 AVG_ROW_LENGTH=1024;
+-- In case tables are created as MyISAM, use row hints for MySQL <5.0 to avoid 4GB limit
+
+--
+-- Holds text of individual page revisions.
+--
+-- Field names are a holdover from the 'old' revisions table in
+-- MediaWiki 1.4 and earlier: an upgrade will transform that
+-- table into the 'text' table to minimize unnecessary churning
+-- and downtime. If upgrading, the other fields will be left unused.
+--
+CREATE TABLE /*$wgDBprefix*/text (
+  -- Unique text storage key number.
+  -- Note that the 'oldid' parameter used in URLs does *not*
+  -- refer to this number anymore, but to rev_id.
+  --
+  -- revision.rev_text_id is a key to this column
+  old_id int unsigned NOT NULL auto_increment,
+  
+  -- Depending on the contents of the old_flags field, the text
+  -- may be convenient plain text, or it may be funkily encoded.
+  old_text mediumblob NOT NULL,
+  
+  -- Comma-separated list of flags:
+  -- gzip: text is compressed with PHP's gzdeflate() function.
+  -- utf8: text was stored as UTF-8.
+  --       If $wgLegacyEncoding option is on, rows *without* this flag
+  --       will be converted to UTF-8 transparently at load time.
+  -- object: text field contained a serialized PHP object.
+  --         The object either contains multiple versions compressed
+  --         together to achieve a better compression ratio, or it refers
+  --         to another row where the text can be found.
+  old_flags tinyblob NOT NULL,
+  
+  PRIMARY KEY old_id (old_id)
+
+) /*$wgDBTableOptions*/ MAX_ROWS=10000000 AVG_ROW_LENGTH=10240;
+-- In case tables are created as MyISAM, use row hints for MySQL <5.0 to avoid 4GB limit
+
+--
+-- Holding area for deleted articles, which may be viewed
+-- or restored by admins through the Special:Undelete interface.
+-- The fields generally correspond to the page, revision, and text
+-- fields, with several caveats.
+--
+CREATE TABLE /*$wgDBprefix*/archive (
+  ar_namespace int NOT NULL default '0',
+  ar_title varchar(255) binary NOT NULL default '',
+  
+  -- Newly deleted pages will not store text in this table,
+  -- but will reference the separately existing text rows.
+  -- This field is retained for backwards compatibility,
+  -- so old archived pages will remain accessible after
+  -- upgrading from 1.4 to 1.5.
+  -- Text may be gzipped or otherwise funky.
+  ar_text mediumblob NOT NULL,
+  
+  -- Basic revision stuff...
+  ar_comment tinyblob NOT NULL,
+  ar_user int unsigned NOT NULL default '0',
+  ar_user_text varchar(255) binary NOT NULL,
+  ar_timestamp binary(14) NOT NULL default '',
+  ar_minor_edit tinyint NOT NULL default '0',
+  
+  -- See ar_text note.
+  ar_flags tinyblob NOT NULL,
+  
+  -- When revisions are deleted, their unique rev_id is stored
+  -- here so it can be retained after undeletion. This is necessary
+  -- to retain permalinks to given revisions after accidental delete
+  -- cycles or messy operations like history merges.
+  -- 
+  -- Old entries from 1.4 will be NULL here, and a new rev_id will
+  -- be created on undeletion for those revisions.
+  ar_rev_id int unsigned,
+  
+  -- For newly deleted revisions, this is the text.old_id key to the
+  -- actual stored text. To avoid breaking the block-compression scheme
+  -- and otherwise making storage changes harder, the actual text is
+  -- *not* deleted from the text table, merely hidden by removal of the
+  -- page and revision entries.
+  --
+  -- Old entries deleted under 1.2-1.4 will have NULL here, and their
+  -- ar_text and ar_flags fields will be used to create a new text
+  -- row upon undeletion.
+  ar_text_id int unsigned,
+
+  -- rev_deleted for archives
+  ar_deleted tinyint unsigned NOT NULL default '0',
+
+  -- Length of this revision in bytes
+  ar_len int unsigned,
+  
+  KEY name_title_timestamp (ar_namespace,ar_title,ar_timestamp)
+
+) /*$wgDBTableOptions*/;
+
+
+--
+-- Track page-to-page hyperlinks within the wiki.
+--
+CREATE TABLE /*$wgDBprefix*/pagelinks (
+  -- Key to the page_id of the page containing the link.
+  pl_from int unsigned NOT NULL default '0',
+  
+  -- Key to page_namespace/page_title of the target page.
+  -- The target page may or may not exist, and due to renames
+  -- and deletions may refer to different page records as time
+  -- goes by.
+  pl_namespace int NOT NULL default '0',
+  pl_title varchar(255) binary NOT NULL default '',
+  
+  UNIQUE KEY pl_from (pl_from,pl_namespace,pl_title),
+  KEY (pl_namespace,pl_title,pl_from)
+
+) /*$wgDBTableOptions*/;
+
+
+--
+-- Track template inclusions.
+--
+CREATE TABLE /*$wgDBprefix*/templatelinks (
+  -- Key to the page_id of the page containing the link.
+  tl_from int unsigned NOT NULL default '0',
+  
+  -- Key to page_namespace/page_title of the target page.
+  -- The target page may or may not exist, and due to renames
+  -- and deletions may refer to different page records as time
+  -- goes by.
+  tl_namespace int NOT NULL default '0',
+  tl_title varchar(255) binary NOT NULL default '',
+  
+  UNIQUE KEY tl_from (tl_from,tl_namespace,tl_title),
+  KEY (tl_namespace,tl_title,tl_from)
+
+) /*$wgDBTableOptions*/;
+
+--
+-- Track links to images *used inline*
+-- We don't distinguish live from broken links here, so
+-- they do not need to be changed on upload/removal.
+--
+CREATE TABLE /*$wgDBprefix*/imagelinks (
+  -- Key to page_id of the page containing the image / media link.
+  il_from int unsigned NOT NULL default '0',
+  
+  -- Filename of target image.
+  -- This is also the page_title of the file's description page;
+  -- all such pages are in namespace 6 (NS_IMAGE).
+  il_to varchar(255) binary NOT NULL default '',
+  
+  UNIQUE KEY il_from (il_from,il_to),
+  KEY (il_to,il_from)
+
+) /*$wgDBTableOptions*/;
+
+--
+-- Track category inclusions *used inline*
+-- This tracks a single level of category membership
+-- (folksonomic tagging, really).
+--
+CREATE TABLE /*$wgDBprefix*/categorylinks (
+  -- Key to page_id of the page defined as a category member.
+  cl_from int unsigned NOT NULL default '0',
+  
+  -- Name of the category.
+  -- This is also the page_title of the category's description page;
+  -- all such pages are in namespace 14 (NS_CATEGORY).
+  cl_to varchar(255) binary NOT NULL default '',
+  
+  -- The title of the linking page, or an optional override
+  -- to determine sort order. Sorting is by binary order, which
+  -- isn't always ideal, but collations seem to be an exciting
+  -- and dangerous new world in MySQL... The sortkey is updated
+  -- if no override exists and cl_from is renamed.
+  --
+  -- Truncate so that the cl_sortkey key fits in 1000 bytes 
+  -- (MyISAM 5 with server_character_set=utf8)
+  cl_sortkey varchar(70) binary NOT NULL default '',
+  
+  -- This isn't really used at present. Provided for an optional
+  -- sorting method by approximate addition time.
+  cl_timestamp timestamp NOT NULL,
+  
+  UNIQUE KEY cl_from (cl_from,cl_to),
+  
+  -- We always sort within a given category...
+  KEY cl_sortkey (cl_to,cl_sortkey),
+  
+  -- Not really used?
+  KEY cl_timestamp (cl_to,cl_timestamp)
+
+) /*$wgDBTableOptions*/;
+
+--
+-- Track links to external URLs
+--
+CREATE TABLE /*$wgDBprefix*/externallinks (
+  -- page_id of the referring page
+  el_from int unsigned NOT NULL default '0',
+
+  -- The URL
+  el_to blob NOT NULL,
+
+  -- In the case of HTTP URLs, this is the URL with any username or password
+  -- removed, and with the labels in the hostname reversed and converted to 
+  -- lower case. An extra dot is added to allow for matching of either
+  -- example.com or *.example.com in a single scan.
+  -- Example: 
+  --      http://user:password@sub.example.com/page.html
+  --   becomes
+  --      http://com.example.sub./page.html
+  -- which allows for fast searching for all pages under example.com with the
+  -- clause: 
+  --      WHERE el_index LIKE 'http://com.example.%'
+  el_index blob NOT NULL,
+  
+  KEY (el_from, el_to(40)),
+  KEY (el_to(60), el_from),
+  KEY (el_index(60))
+) /*$wgDBTableOptions*/;
+
+-- 
+-- Track interlanguage links
+--
+CREATE TABLE /*$wgDBprefix*/langlinks (
+  -- page_id of the referring page
+  ll_from int unsigned NOT NULL default '0',
+  
+  -- Language code of the target
+  ll_lang varbinary(20) NOT NULL default '',
+
+  -- Title of the target, including namespace
+  ll_title varchar(255) binary NOT NULL default '',
+
+  UNIQUE KEY (ll_from, ll_lang),
+  KEY (ll_lang, ll_title)
+) /*$wgDBTableOptions*/;
+
+--
+-- Contains a single row with some aggregate info
+-- on the state of the site.
+--
+CREATE TABLE /*$wgDBprefix*/site_stats (
+  -- The single row should contain 1 here.
+  ss_row_id int unsigned NOT NULL,
+  
+  -- Total number of page views, if hit counters are enabled.
+  ss_total_views bigint unsigned default '0',
+  
+  -- Total number of edits performed.
+  ss_total_edits bigint unsigned default '0',
+  
+  -- An approximate count of pages matching the following criteria:
+  -- * in namespace 0
+  -- * not a redirect
+  -- * contains the text '[['
+  -- See Article::isCountable() in includes/Article.php
+  ss_good_articles bigint unsigned default '0',
+  
+  -- Total pages, theoretically equal to SELECT COUNT(*) FROM page; except faster
+  ss_total_pages bigint default '-1',
+
+  -- Number of users, theoretically equal to SELECT COUNT(*) FROM user;
+  ss_users bigint default '-1',
+
+  -- Deprecated, no longer updated as of 1.5
+  ss_admins int default '-1',
+
+  -- Number of images, equivalent to SELECT COUNT(*) FROM image
+  ss_images int default '0',
+
+  UNIQUE KEY ss_row_id (ss_row_id)
+
+) /*$wgDBTableOptions*/;
+
+--
+-- Stores an ID for every time any article is visited;
+-- depending on $wgHitcounterUpdateFreq, it is
+-- periodically cleared and the page_counter column
+-- in the page table updated for the all articles
+-- that have been visited.)
+--
+CREATE TABLE /*$wgDBprefix*/hitcounter (
+  hc_id int unsigned NOT NULL
+) TYPE=HEAP MAX_ROWS=25000;
+
+
+--
+-- The internet is full of jerks, alas. Sometimes it's handy
+-- to block a vandal or troll account.
+--
+CREATE TABLE /*$wgDBprefix*/ipblocks (
+  -- Primary key, introduced for privacy.
+  ipb_id int NOT NULL auto_increment,
+  
+  -- Blocked IP address in dotted-quad form or user name.
+  ipb_address tinyblob NOT NULL,
+  
+  -- Blocked user ID or 0 for IP blocks.
+  ipb_user int unsigned NOT NULL default '0',
+  
+  -- User ID who made the block.
+  ipb_by int unsigned NOT NULL default '0',
+  
+  -- Text comment made by blocker.
+  ipb_reason tinyblob NOT NULL,
+  
+  -- Creation (or refresh) date in standard YMDHMS form.
+  -- IP blocks expire automatically.
+  ipb_timestamp binary(14) NOT NULL default '',
+  
+  -- Indicates that the IP address was banned because a banned
+  -- user accessed a page through it. If this is 1, ipb_address
+  -- will be hidden, and the block identified by block ID number.
+  ipb_auto bool NOT NULL default 0,
+
+  -- If set to 1, block applies only to logged-out users
+  ipb_anon_only bool NOT NULL default 0,
+
+  -- Block prevents account creation from matching IP addresses
+  ipb_create_account bool NOT NULL default 1,
+
+  -- Block triggers autoblocks
+  ipb_enable_autoblock bool NOT NULL default '1',
+  
+  -- Time at which the block will expire.
+  -- May be "infinity"
+  ipb_expiry varbinary(14) NOT NULL default '',
+  
+  -- Start and end of an address range, in hexadecimal
+  -- Size chosen to allow IPv6
+  ipb_range_start tinyblob NOT NULL,
+  ipb_range_end tinyblob NOT NULL,
+
+  -- Flag for entries hidden from users and Sysops
+  ipb_deleted bool NOT NULL default 0,
+  
+  PRIMARY KEY ipb_id (ipb_id),
+
+  -- Unique index to support "user already blocked" messages
+  -- Any new options which prevent collisions should be included
+  UNIQUE INDEX ipb_address (ipb_address(255), ipb_user, ipb_auto, ipb_anon_only),
+
+  INDEX ipb_user (ipb_user),
+  INDEX ipb_range (ipb_range_start(8), ipb_range_end(8)),
+  INDEX ipb_timestamp (ipb_timestamp),
+  INDEX ipb_expiry (ipb_expiry)
+
+) /*$wgDBTableOptions*/;
+
+
+--
+-- Uploaded images and other files.
+--
+CREATE TABLE /*$wgDBprefix*/image (
+  -- Filename.
+  -- This is also the title of the associated description page,
+  -- which will be in namespace 6 (NS_IMAGE).
+  img_name varchar(255) binary NOT NULL default '',
+  
+  -- File size in bytes.
+  img_size int unsigned NOT NULL default '0',
+  
+  -- For images, size in pixels.
+  img_width int NOT NULL default '0',
+  img_height int NOT NULL default '0',
+  
+  -- Extracted EXIF metadata stored as a serialized PHP array.
+  img_metadata mediumblob NOT NULL,
+  
+  -- For images, bits per pixel if known.
+  img_bits int NOT NULL default '0',
+  
+  -- Media type as defined by the MEDIATYPE_xxx constants
+  img_media_type ENUM("UNKNOWN", "BITMAP", "DRAWING", "AUDIO", "VIDEO", "MULTIMEDIA", "OFFICE", "TEXT", "EXECUTABLE", "ARCHIVE") default NULL,
+  
+  -- major part of a MIME media type as defined by IANA
+  -- see http://www.iana.org/assignments/media-types/
+  img_major_mime ENUM("unknown", "application", "audio", "image", "text", "video", "message", "model", "multipart") NOT NULL default "unknown",
+  
+  -- minor part of a MIME media type as defined by IANA
+  -- the minor parts are not required to adher to any standard
+  -- but should be consistent throughout the database
+  -- see http://www.iana.org/assignments/media-types/
+  img_minor_mime varbinary(32) NOT NULL default "unknown",
+  
+  -- Description field as entered by the uploader.
+  -- This is displayed in image upload history and logs.
+  img_description tinyblob NOT NULL,
+  
+  -- user_id and user_name of uploader.
+  img_user int unsigned NOT NULL default '0',
+  img_user_text varchar(255) binary NOT NULL,
+  
+  -- Time of the upload.
+  img_timestamp varbinary(14) NOT NULL default '',
+  
+  PRIMARY KEY img_name (img_name),
+  
+  -- Used by Special:Imagelist for sort-by-size
+  INDEX img_size (img_size),
+
+  -- Used by Special:Newimages and Special:Imagelist
+  INDEX img_timestamp (img_timestamp)
+
+) /*$wgDBTableOptions*/;
+
+--
+-- Previous revisions of uploaded files.
+-- Awkwardly, image rows have to be moved into
+-- this table at re-upload time.
+--
+CREATE TABLE /*$wgDBprefix*/oldimage (
+  -- Base filename: key to image.img_name
+  oi_name varchar(255) binary NOT NULL default '',
+  
+  -- Filename of the archived file.
+  -- This is generally a timestamp and '!' prepended to the base name.
+  oi_archive_name varchar(255) binary NOT NULL default '',
+  
+  -- Other fields as in image...
+  oi_size int unsigned NOT NULL default 0,
+  oi_width int NOT NULL default 0,
+  oi_height int NOT NULL default 0,
+  oi_bits int NOT NULL default 0,
+  oi_description tinyblob NOT NULL,
+  oi_user int unsigned NOT NULL default '0',
+  oi_user_text varchar(255) binary NOT NULL,
+  oi_timestamp binary(14) NOT NULL default '',
+
+  INDEX oi_name (oi_name(10))
+
+) /*$wgDBTableOptions*/;
+
+--
+-- Record of deleted file data
+--
+CREATE TABLE /*$wgDBprefix*/filearchive (
+  -- Unique row id
+  fa_id int NOT NULL auto_increment,
+  
+  -- Original base filename; key to image.img_name, page.page_title, etc
+  fa_name varchar(255) binary NOT NULL default '',
+  
+  -- Filename of archived file, if an old revision
+  fa_archive_name varchar(255) binary default '',
+  
+  -- Which storage bin (directory tree or object store) the file data
+  -- is stored in. Should be 'deleted' for files that have been deleted;
+  -- any other bin is not yet in use.
+  fa_storage_group varbinary(16),
+  
+  -- SHA-1 of the file contents plus extension, used as a key for storage.
+  -- eg 8f8a562add37052a1848ff7771a2c515db94baa9.jpg
+  --
+  -- If NULL, the file was missing at deletion time or has been purged
+  -- from the archival storage.
+  fa_storage_key varbinary(64) default '',
+  
+  -- Deletion information, if this file is deleted.
+  fa_deleted_user int,
+  fa_deleted_timestamp binary(14) default '',
+  fa_deleted_reason text,
+  
+  -- Duped fields from image
+  fa_size int unsigned default '0',
+  fa_width int default '0',
+  fa_height int default '0',
+  fa_metadata mediumblob,
+  fa_bits int default '0',
+  fa_media_type ENUM("UNKNOWN", "BITMAP", "DRAWING", "AUDIO", "VIDEO", "MULTIMEDIA", "OFFICE", "TEXT", "EXECUTABLE", "ARCHIVE") default NULL,
+  fa_major_mime ENUM("unknown", "application", "audio", "image", "text", "video", "message", "model", "multipart") default "unknown",
+  fa_minor_mime varbinary(32) default "unknown",
+  fa_description tinyblob,
+  fa_user int unsigned default '0',
+  fa_user_text varchar(255) binary,
+  fa_timestamp binary(14) default '',
+
+  -- Visibility of deleted revisions, bitfield
+  fa_deleted tinyint unsigned NOT NULL default '0',
+  
+  PRIMARY KEY (fa_id),
+  INDEX (fa_name, fa_timestamp),             -- pick out by image name
+  INDEX (fa_storage_group, fa_storage_key),  -- pick out dupe files
+  INDEX (fa_deleted_timestamp),              -- sort by deletion time
+  INDEX (fa_deleted_user)                    -- sort by deleter
+
+) /*$wgDBTableOptions*/;
+
+--
+-- Primarily a summary table for Special:Recentchanges,
+-- this table contains some additional info on edits from
+-- the last few days, see Article::editUpdates()
+--
+CREATE TABLE /*$wgDBprefix*/recentchanges (
+  rc_id int NOT NULL auto_increment,
+  rc_timestamp varbinary(14) NOT NULL default '',
+  rc_cur_time varbinary(14) NOT NULL default '',
+  
+  -- As in revision
+  rc_user int unsigned NOT NULL default '0',
+  rc_user_text varchar(255) binary NOT NULL,
+  
+  -- When pages are renamed, their RC entries do _not_ change.
+  rc_namespace int NOT NULL default '0',
+  rc_title varchar(255) binary NOT NULL default '',
+  
+  -- as in revision...
+  rc_comment varchar(255) binary NOT NULL default '',
+  rc_minor tinyint unsigned NOT NULL default '0',
+  
+  -- Edits by user accounts with the 'bot' rights key are
+  -- marked with a 1 here, and will be hidden from the
+  -- default view.
+  rc_bot tinyint unsigned NOT NULL default '0',
+  
+  rc_new tinyint unsigned NOT NULL default '0',
+  
+  -- Key to page_id (was cur_id prior to 1.5).
+  -- This will keep links working after moves while
+  -- retaining the at-the-time name in the changes list.
+  rc_cur_id int unsigned NOT NULL default '0',
+  
+  -- rev_id of the given revision
+  rc_this_oldid int unsigned NOT NULL default '0',
+  
+  -- rev_id of the prior revision, for generating diff links.
+  rc_last_oldid int unsigned NOT NULL default '0',
+  
+  -- These may no longer be used, with the new move log.
+  rc_type tinyint unsigned NOT NULL default '0',
+  rc_moved_to_ns tinyint unsigned NOT NULL default '0',
+  rc_moved_to_title varchar(255) binary NOT NULL default '',
+  
+  -- If the Recent Changes Patrol option is enabled,
+  -- users may mark edits as having been reviewed to
+  -- remove a warning flag on the RC list.
+  -- A value of 1 indicates the page has been reviewed.
+  rc_patrolled tinyint unsigned NOT NULL default '0',
+  
+  -- Recorded IP address the edit was made from, if the
+  -- $wgPutIPinRC option is enabled.
+  rc_ip varbinary(40) NOT NULL default '',
+  
+  -- Text length in characters before
+  -- and after the edit
+  rc_old_len int,
+  rc_new_len int,
+
+  -- Visibility of deleted revisions, bitfield
+  rc_deleted tinyint unsigned NOT NULL default '0',
+
+  -- Value corresonding to log_id, specific log entries
+  rc_logid int unsigned NOT NULL default '0',
+  -- Store log type info here, or null
+  rc_log_type varbinary(255) NULL default NULL,
+  -- Store log action or null
+  rc_log_action varbinary(255) NULL default NULL,
+  -- Log params
+  rc_params blob NOT NULL default '',
+  
+  PRIMARY KEY rc_id (rc_id),
+  INDEX rc_timestamp (rc_timestamp),
+  INDEX rc_namespace_title (rc_namespace, rc_title),
+  INDEX rc_cur_id (rc_cur_id),
+  INDEX new_name_timestamp (rc_new,rc_namespace,rc_timestamp),
+  INDEX rc_ip (rc_ip),
+  INDEX rc_ns_usertext (rc_namespace, rc_user_text),
+  INDEX rc_user_text (rc_user_text, rc_timestamp)
+
+) /*$wgDBTableOptions*/;
+
+CREATE TABLE /*$wgDBprefix*/watchlist (
+  -- Key to user.user_id
+  wl_user int unsigned NOT NULL,
+  
+  -- Key to page_namespace/page_title
+  -- Note that users may watch pages which do not exist yet,
+  -- or existed in the past but have been deleted.
+  wl_namespace int NOT NULL default '0',
+  wl_title varchar(255) binary NOT NULL default '',
+  
+  -- Timestamp when user was last sent a notification e-mail;
+  -- cleared when the user visits the page.
+  wl_notificationtimestamp varbinary(14),
+  
+  UNIQUE KEY (wl_user, wl_namespace, wl_title),
+  KEY namespace_title (wl_namespace, wl_title)
+
+) /*$wgDBTableOptions*/;
+
+
+--
+-- Used by the math module to keep track
+-- of previously-rendered items.
+--
+CREATE TABLE /*$wgDBprefix*/math (
+  -- Binary MD5 hash of the latex fragment, used as an identifier key.
+  math_inputhash varbinary(16) NOT NULL,
+  
+  -- Not sure what this is, exactly...
+  math_outputhash varbinary(16) NOT NULL,
+  
+  -- texvc reports how well it thinks the HTML conversion worked;
+  -- if it's a low level the PNG rendering may be preferred.
+  math_html_conservativeness tinyint NOT NULL,
+  
+  -- HTML output from texvc, if any
+  math_html text,
+  
+  -- MathML output from texvc, if any
+  math_mathml text,
+  
+  UNIQUE KEY math_inputhash (math_inputhash)
+
+) /*$wgDBTableOptions*/;
+
+--
+-- When using the default MySQL search backend, page titles
+-- and text are munged to strip markup, do Unicode case folding,
+-- and prepare the result for MySQL's fulltext index.
+--
+-- This table must be MyISAM; InnoDB does not support the needed
+-- fulltext index.
+--
+CREATE TABLE /*$wgDBprefix*/searchindex (
+  -- Key to page_id
+  si_page int unsigned NOT NULL,
+  
+  -- Munged version of title
+  si_title varchar(255) NOT NULL default '',
+  
+  -- Munged version of body text
+  si_text mediumtext NOT NULL,
+  
+  UNIQUE KEY (si_page),
+  FULLTEXT si_title (si_title),
+  FULLTEXT si_text (si_text)
+
+) TYPE=MyISAM;
+
+--
+-- Recognized interwiki link prefixes
+--
+CREATE TABLE /*$wgDBprefix*/interwiki (
+  -- The interwiki prefix, (e.g. "Meatball", or the language prefix "de")
+  iw_prefix varchar(32) NOT NULL,
+  
+  -- The URL of the wiki, with "$1" as a placeholder for an article name.
+  -- Any spaces in the name will be transformed to underscores before
+  -- insertion.
+  iw_url blob NOT NULL,
+  
+  -- A boolean value indicating whether the wiki is in this project
+  -- (used, for example, to detect redirect loops)
+  iw_local bool NOT NULL,
+  
+  -- Boolean value indicating whether interwiki transclusions are allowed.
+  iw_trans tinyint NOT NULL default 0,
+  
+  UNIQUE KEY iw_prefix (iw_prefix)
+
+) /*$wgDBTableOptions*/;
+
+--
+-- Used for caching expensive grouped queries
+--
+CREATE TABLE /*$wgDBprefix*/querycache (
+  -- A key name, generally the base name of of the special page.
+  qc_type varbinary(32) NOT NULL,
+  
+  -- Some sort of stored value. Sizes, counts...
+  qc_value int unsigned NOT NULL default '0',
+  
+  -- Target namespace+title
+  qc_namespace int NOT NULL default '0',
+  qc_title char(255) binary NOT NULL default '',
+  
+  KEY (qc_type,qc_value)
+
+) /*$wgDBTableOptions*/;
+
+--
+-- For a few generic cache operations if not using Memcached
+--
+CREATE TABLE /*$wgDBprefix*/objectcache (
+  keyname varbinary(255) NOT NULL default '',
+  value mediumblob,
+  exptime datetime,
+  UNIQUE KEY (keyname),
+  KEY (exptime)
+
+) /*$wgDBTableOptions*/;
+
+--
+-- Cache of interwiki transclusion
+--
+CREATE TABLE /*$wgDBprefix*/transcache (
+  tc_url varbinary(255) NOT NULL,
+  tc_contents text,
+  tc_time int NOT NULL,
+  UNIQUE INDEX tc_url_idx (tc_url)
+) /*$wgDBTableOptions*/;
+
+CREATE TABLE /*$wgDBprefix*/logging (
+  -- Symbolic keys for the general log type and the action type
+  -- within the log. The output format will be controlled by the
+  -- action field, but only the type controls categorization.
+  log_type varbinary(10) NOT NULL default '',
+  log_action varbinary(10) NOT NULL default '',
+  
+  -- Timestamp. Duh.
+  log_timestamp binary(14) NOT NULL default '19700101000000',
+  
+  -- The user who performed this action; key to user_id
+  log_user int unsigned NOT NULL default 0,
+  
+  -- Key to the page affected. Where a user is the target,
+  -- this will point to the user page.
+  log_namespace int NOT NULL default 0,
+  log_title varchar(255) binary NOT NULL default '',
+  
+  -- Freeform text. Interpreted as edit history comments.
+  log_comment varchar(255) NOT NULL default '',
+  
+  -- LF separated list of miscellaneous parameters
+  log_params blob NOT NULL,
+
+  -- Log ID, for referring to this specific log entry, probably for deletion and such.
+  log_id int unsigned NOT NULL auto_increment,
+
+  -- rev_deleted for logs
+  log_deleted tinyint unsigned NOT NULL default '0',
+
+  PRIMARY KEY log_id (log_id),
+  KEY type_time (log_type, log_timestamp),
+  KEY user_time (log_user, log_timestamp),
+  KEY page_time (log_namespace, log_title, log_timestamp),
+  KEY times (log_timestamp)
+
+) /*$wgDBTableOptions*/;
+
+CREATE TABLE /*$wgDBprefix*/trackbacks (
+  tb_id int auto_increment,
+  tb_page int REFERENCES page(page_id) ON DELETE CASCADE,
+  tb_title varchar(255) NOT NULL,
+  tb_url blob NOT NULL,
+  tb_ex text,
+  tb_name varchar(255),
+
+  PRIMARY KEY (tb_id),
+  INDEX (tb_page)
+) /*$wgDBTableOptions*/;
+
+
+-- Jobs performed by parallel apache threads or a command-line daemon
+CREATE TABLE /*$wgDBprefix*/job (
+  job_id int unsigned NOT NULL auto_increment,
+  
+  -- Command name
+  -- Limited to 60 to prevent key length overflow
+  job_cmd varbinary(60) NOT NULL default '',
+
+  -- Namespace and title to act on
+  -- Should be 0 and '' if the command does not operate on a title
+  job_namespace int NOT NULL,
+  job_title varchar(255) binary NOT NULL,
+
+  -- Any other parameters to the command
+  -- Presently unused, format undefined
+  job_params blob NOT NULL,
+
+  PRIMARY KEY job_id (job_id),
+  KEY (job_cmd, job_namespace, job_title)
+) /*$wgDBTableOptions*/;
+
+
+-- Details of updates to cached special pages
+CREATE TABLE /*$wgDBprefix*/querycache_info (
+
+  -- Special page name
+  -- Corresponds to a qc_type value
+  qci_type varbinary(32) NOT NULL default '',
+
+  -- Timestamp of last update
+  qci_timestamp binary(14) NOT NULL default '19700101000000',
+
+  UNIQUE KEY ( qci_type )
+
+) /*$wgDBTableOptions*/;
+
+-- For each redirect, this table contains exactly one row defining its target
+CREATE TABLE /*$wgDBprefix*/redirect (
+  -- Key to the page_id of the redirect page
+  rd_from int unsigned NOT NULL default '0',
+
+  -- Key to page_namespace/page_title of the target page.
+  -- The target page may or may not exist, and due to renames
+  -- and deletions may refer to different page records as time
+  -- goes by.
+  rd_namespace int NOT NULL default '0',
+  rd_title varchar(255) binary NOT NULL default '',
+
+  PRIMARY KEY rd_from (rd_from),
+  KEY rd_ns_title (rd_namespace,rd_title,rd_from)
+) /*$wgDBTableOptions*/;
+
+-- Used for caching expensive grouped queries that need two links (for example double-redirects)
+CREATE TABLE /*$wgDBprefix*/querycachetwo (
+  -- A key name, generally the base name of of the special page.
+  qcc_type varbinary(32) NOT NULL,
+  
+  -- Some sort of stored value. Sizes, counts...
+  qcc_value int unsigned NOT NULL default '0',
+  
+  -- Target namespace+title
+  qcc_namespace int NOT NULL default '0',
+  qcc_title char(255) binary NOT NULL default '',
+  
+  -- Target namespace+title2
+  qcc_namespacetwo int NOT NULL default '0',
+  qcc_titletwo char(255) binary NOT NULL default '',
+
+  KEY qcc_type (qcc_type,qcc_value),
+  KEY qcc_title (qcc_type,qcc_namespace,qcc_title),
+  KEY qcc_titletwo (qcc_type,qcc_namespacetwo,qcc_titletwo)
+
+) /*$wgDBTableOptions*/;
+
+--- Used for storing page restrictions (i.e. protection levels)
+CREATE TABLE /*$wgDBprefix*/page_restrictions (
+  -- Page to apply restrictions to (Foreign Key to page).
+  pr_page int NOT NULL,
+  -- The protection type (edit, move, etc)
+  pr_type varbinary(60) NOT NULL,
+  -- The protection level (Sysop, autoconfirmed, etc)
+  pr_level varbinary(60) NOT NULL,
+  -- Whether or not to cascade the protection down to pages transcluded.
+  pr_cascade tinyint NOT NULL,
+  -- Field for future support of per-user restriction.
+  pr_user int NULL,
+  -- Field for time-limited protection.
+  pr_expiry varbinary(14) NULL,
+  -- Field for an ID for this restrictions row (sort-key for Special:ProtectedPages)
+  pr_id int unsigned NOT NULL auto_increment,
+
+  PRIMARY KEY pr_pagetype (pr_page,pr_type),
+
+  UNIQUE KEY pr_id (pr_id),
+  KEY pr_page (pr_page),
+  KEY pr_typelevel (pr_type,pr_level),
+  KEY pr_level (pr_level),
+  KEY pr_cascade (pr_cascade)
+) /*$wgDBTableOptions*/;
+
+-- vim: sw=2 sts=2 et
Index: /MediaWiki/branches/1.11/maintenance/testRunner.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/testRunner.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/testRunner.sql	(revision 1280)
@@ -0,0 +1,35 @@
+--
+-- Optional tables for parserTests recording mode
+-- With --record option, success data will be saved to these tables,
+-- and comparisons of what's changed from the previous run will be
+-- displayed at the end of each run.
+--
+-- These tables currently require MySQL 5 (or maybe 4.1?) for subselects.
+--
+
+drop table if exists /*$wgDBprefix*/testitem;
+drop table if exists /*$wgDBprefix*/testrun;
+
+create table /*$wgDBprefix*/testrun (
+  tr_id int not null auto_increment,
+  
+  tr_date char(14) binary,
+  tr_mw_version blob,
+  tr_php_version blob,
+  tr_db_version blob,
+  tr_uname blob,
+  
+  primary key (tr_id)
+) engine=InnoDB;
+
+create table /*$wgDBprefix*/testitem (
+  ti_run int not null,
+  ti_name varchar(255),
+  ti_success bool,
+  
+  unique key (ti_run, ti_name),
+  key (ti_run, ti_success),
+  
+  foreign key (ti_run) references /*$wgDBprefix*/testrun(tr_id)
+    on delete cascade
+) engine=InnoDB;
Index: /MediaWiki/branches/1.11/maintenance/update.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/update.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/update.php	(revision 1280)
@@ -0,0 +1,63 @@
+<?php
+require_once 'counter.php';
+/**
+ * Run all updaters.
+ *
+ * @todo document
+ * @addtogroup Maintenance
+ */
+
+/** */
+$wgUseMasterForMaintenance = true;
+$options = array( 'quick', 'nopurge' );
+require_once( "commandLine.inc" );
+require_once( "updaters.inc" );
+$wgTitle = Title::newFromText( "MediaWiki database updater" );
+$dbclass = 'Database' . ucfirst( $wgDBtype ) ;
+
+echo( "MediaWiki {$wgVersion} Updater\n\n" );
+
+install_version_checks();
+
+# Do a pre-emptive check to ensure we've got credentials supplied
+# We can't, at this stage, check them, but we can detect their absence,
+# which seems to cause most of the problems people whinge about
+if( !isset( $wgDBadminuser ) || !isset( $wgDBadminpassword ) ) {
+	echo( "No superuser credentials could be found. Please provide the details\n" );
+	echo( "of a user with appropriate permissions to update the database. See\n" );
+	echo( "AdminSettings.sample for more details.\n\n" );
+	exit();
+}
+
+# Attempt to connect to the database as a privileged user
+# This will vomit up an error if there are permissions problems
+$wgDatabase = new $dbclass( $wgDBserver, $wgDBadminuser, $wgDBadminpassword, $wgDBname, 1 );
+
+if( !$wgDatabase->isOpen() ) {
+	# Appears to have failed
+	echo( "A connection to the database could not be established. Check the\n" );
+	echo( "values of \$wgDBadminuser and \$wgDBadminpassword.\n" );
+	exit();
+}
+
+print "Going to run database updates for ".wfWikiID()."\n";
+print "Depending on the size of your database this may take a while!\n";
+
+if( !isset( $options['quick'] ) ) {
+	print "Abort with control-c in the next five seconds... ";
+
+	for ($i = 6; $i >= 1;) {
+		print_c($i, --$i);
+		sleep(1);
+	}
+	echo "\n";
+}
+
+$shared = isset( $options['doshared'] );
+$purge = !isset( $options['nopurge'] );
+
+do_all_updates( $shared, $purge );
+
+print "Done.\n";
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/updateArticleCount.inc.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/updateArticleCount.inc.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/updateArticleCount.inc.php	(revision 1280)
@@ -0,0 +1,66 @@
+<?php
+
+/**
+ * Support class for the updateArticleCount.php maintenance script
+ *
+ * @addtogroup Maintenance
+ * @author Rob Church <robchur@gmail.com>
+ */
+
+class ArticleCounter {
+
+	var $dbr;
+	var $namespaces;
+	
+	function ArticleCounter() {
+		global $wgContentNamespaces;
+		$this->namespaces = $wgContentNamespaces;
+		$this->dbr = wfGetDB( DB_SLAVE );
+	}
+	
+	/**
+	 * Produce a comma-delimited set of namespaces
+	 * Includes paranoia
+	 *
+	 * @return string
+	 */
+	function makeNsSet() {
+		foreach( $this->namespaces as $namespace )
+			$namespaces[] = intval( $namespace );
+		return implode( ', ', $namespaces );
+	}
+	
+	/**
+	 * Produce SQL for the query
+	 *
+	 * @return string
+	 */
+	function makeSql() {
+		list( $page, $pagelinks ) = $this->dbr->tableNamesN( 'page', 'pagelinks' );
+		$nsset = $this->makeNsSet();
+		return "SELECT DISTINCT page_namespace,page_title FROM $page,$pagelinks " .
+			"WHERE pl_from=page_id and page_namespace IN ( $nsset ) " .
+			"AND page_is_redirect = 0 AND page_len > 0";
+	}
+	
+	/**
+	 * Count the number of valid content pages in the wiki
+	 *
+	 * @return mixed Integer, or false if there's a problem
+	 */
+	function count() {
+		$res = $this->dbr->query( $this->makeSql(), __METHOD__ );
+		if( $res ) {
+			$count = $this->dbr->numRows( $res );
+			$this->dbr->freeResult( $res );
+			return $count;
+		} else {
+			# Look out for this when handling the result
+			#    - Actually it's unreachable, !$res throws an exception -- TS
+			return false; 
+		}
+	}
+
+}
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/updateArticleCount.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/updateArticleCount.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/updateArticleCount.php	(revision 1280)
@@ -0,0 +1,41 @@
+<?php
+
+/**
+ * Maintenance script to provide a better count of the number of articles
+ * and update the site statistics table, if desired
+ *
+ * @addtogroup Maintenance
+ * @author Rob Church <robchur@gmail.com>
+ */
+
+$options = array( 'update', 'help' );
+require_once( 'commandLine.inc' );
+require_once( 'updateArticleCount.inc.php' );
+echo( "Update Article Count\n\n" );
+
+if( isset( $options['help'] ) && $options['help'] ) {
+	echo( "Usage: php updateArticleCount.php [--update]\n\n" );
+	echo( "--update : Update site statistics table\n" );
+	exit( 0 );
+}
+
+echo( "Counting articles..." );
+$counter = new ArticleCounter();
+$result = $counter->count();
+
+if( $result !== false ) {
+	echo( "found {$result}.\n" );
+	if( isset( $options['update'] ) && $options['update'] ) {
+		echo( "Updating site statistics table... " );
+		$dbw = wfGetDB( DB_MASTER );
+		$dbw->update( 'site_stats', array( 'ss_good_articles' => $result ), array( 'ss_row_id' => 1 ), __METHOD__ );
+		echo( "done.\n" );
+	} else {
+		echo( "To update the site statistics table, run the script with the --update option.\n" );
+	}
+} else {
+	echo( "failed.\n" );
+}
+echo( "\n" );
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/updateRestrictions.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/updateRestrictions.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/updateRestrictions.php	(revision 1280)
@@ -0,0 +1,67 @@
+<?php
+
+/*
+ * Makes the required database updates for Special:ProtectedPages
+ * to show all protected pages, even ones before the page restrictions
+ * schema change. All remaining page_restriction column values are moved
+ * to the new table.
+ */
+
+define( 'BATCH_SIZE', 100 );
+
+require_once 'commandLine.inc';
+	
+$db =& wfGetDB( DB_MASTER );
+if ( !$db->tableExists( 'page_restrictions' ) ) {
+	echo "page_restrictions does not exist\n";
+	exit( 1 );
+}
+
+migrate_page_restrictions( $db );
+
+function migrate_page_restrictions( $db ) {
+	
+	$start = $db->selectField( 'page', 'MIN(page_id)', false, __FUNCTION__ );
+	$end = $db->selectField( 'page', 'MAX(page_id)', false, __FUNCTION__ );
+	$blockStart = $start;
+	$blockEnd = $start + BATCH_SIZE - 1;
+	$encodedExpiry = Block::decodeExpiry('');
+	while ( $blockEnd <= $end ) {
+		$cond = "page_id BETWEEN $blockStart AND $blockEnd AND page_restrictions !=''";
+		$res = $db->select( 'page', array('page_id', 'page_restrictions'), $cond, __FUNCTION__ );
+		$batch = array();
+		while ( $row = $db->fetchObject( $res ) ) {
+			$oldRestrictions = array();
+			foreach( explode( ':', trim( $row->page_restrictions ) ) as $restrict ) {
+				$temp = explode( '=', trim( $restrict ) );
+				if(count($temp) == 1) {
+					// old old format should be treated as edit/move restriction
+					$oldRestrictions["edit"] = trim( $temp[0] );
+					$oldRestrictions["move"] = trim( $temp[0] );
+				} else {
+					$oldRestrictions[$temp[0]] = trim( $temp[1] );
+				}
+			}
+			# Update restrictions table
+			foreach( $oldRestrictions as $action => $restrictions ) {
+				$batch[] = array( 
+					'pr_page' => $row->page_id,
+					'pr_type' => $action,
+					'pr_level' => $restrictions,
+					'pr_cascade' => 0,
+					'pr_expiry' => $encodedExpiry
+				);
+			}
+		}
+		# We use insert() and not replace() as Article.php replaces
+		# page_restrictions with '' when protected in the restrictions table
+		if ( count( $batch ) ) {
+			$db->insert( 'page_restrictions', $batch, __FUNCTION__ );
+		}
+		$blockStart += BATCH_SIZE;
+		$blockEnd += BATCH_SIZE;
+		wfWaitForSlaves( 5 );
+	}
+}
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/updateSearchIndex.inc
===================================================================
--- /MediaWiki/branches/1.11/maintenance/updateSearchIndex.inc	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/updateSearchIndex.inc	(revision 1280)
@@ -0,0 +1,116 @@
+<?php
+/**
+ * @addtogroup Maintenance
+ */
+
+/** */
+function updateSearchIndex( $start, $end, $maxLockTime, $quiet ) {
+	global $wgQuiet;
+	global $wgDisableSearchUpdate;
+
+	$fname = "updateSearchIndex";
+
+	$wgQuiet = $quiet;
+	$wgDisableSearchUpdate = false;
+
+	$dbw = wfGetDB( DB_MASTER );
+	$recentchanges = $dbw->tableName( 'recentchanges' );
+
+	output( "Updating searchindex between $start and $end\n" );
+
+	# Select entries from recentchanges which are on top and between the specified times
+	$start = $dbw->strencode( $start );
+	$end = $dbw->strencode( $end );
+
+	$page = $dbw->tableName( 'page' );
+	$sql = "SELECT rc_cur_id,rc_type,rc_moved_to_ns,rc_moved_to_title FROM $recentchanges
+	  JOIN $page ON rc_cur_id=page_id AND rc_this_oldid=page_latest
+	  WHERE rc_timestamp BETWEEN '$start' AND '$end'
+	  ";
+	$res = $dbw->query( $sql, $fname );
+	
+
+	# Lock searchindex
+	if ( $maxLockTime ) {
+		output( "   --- Waiting for lock ---" );
+		lockSearchindex( $dbw );
+		$lockTime = time();
+		output( "\n" );
+	}
+
+	# Loop through the results and do a search update
+	while ( $row = $dbw->fetchObject( $res ) ) {
+		# Allow reads to be processed
+		if ( $maxLockTime && time() > $lockTime + $maxLockTime ) {
+			output( "    --- Relocking ---" );
+			relockSearchindex( $dbw );
+			$lockTime = time();
+			output( "\n" );
+		}
+		if ( $row->rc_type == RC_LOG ) {
+			continue;
+		} elseif ( $row->rc_type == RC_MOVE || $row->rc_type == RC_MOVE_OVER_REDIRECT ) {
+			# Rename searchindex entry
+			$titleObj = Title::makeTitle( $row->rc_moved_to_ns, $row->rc_moved_to_title );
+			$title = $titleObj->getPrefixedDBkey();
+			output( "$title..." );
+			$u = new SearchUpdate( $row->rc_cur_id, $title, false );
+			output( "\n" );
+		} else {
+			// Get current revision
+			$rev = Revision::loadFromPageId( $dbw, $row->rc_cur_id );
+			if( $rev ) {
+				$titleObj = $rev->getTitle();
+				$title = $titleObj->getPrefixedDBkey();
+				output( $title );
+				# Update searchindex
+				$u = new SearchUpdate( $row->rc_cur_id, $titleObj->getText(), $rev->getText() );
+				$u->doUpdate();
+				output( "\n" );
+			}
+		}
+	}
+
+	# Unlock searchindex
+	if ( $maxLockTime ) {
+		output( "    --- Unlocking --" );
+		unlockSearchindex( $dbw );
+		output( "\n" );
+	}
+	output( "Done\n" );
+}
+
+function lockSearchindex( &$db ) {
+	$write = array( 'searchindex' );
+	$read = array( 'page', 'revision', 'text', 'interwiki' );
+	$items = array();
+	
+	foreach( $write as $table ) {
+		$items[] = $db->tableName( $table ) . ' LOW_PRIORITY WRITE';
+	}
+	foreach( $read as $table ) {
+		$items[] = $db->tableName( $table ) . ' READ';
+	}
+	$sql = "LOCK TABLES " . implode( ',', $items );
+	$db->query( $sql, 'updateSearchIndex.inc ' . __METHOD__ );
+}
+
+function unlockSearchindex( &$db ) {
+	$db->query( "UNLOCK TABLES", 'updateSearchIndex.inc ' . __METHOD__ );
+}
+
+# Unlock and lock again
+# Since the lock is low-priority, queued reads will be able to complete
+function relockSearchindex( &$db ) {
+	unlockSearchindex( $db );
+	lockSearchindex( $db );
+}
+
+function output( $text ) {
+	global $wgQuiet;
+	if ( !$wgQuiet ) {
+		print $text;
+	}
+}
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/updateSearchIndex.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/updateSearchIndex.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/updateSearchIndex.php	(revision 1280)
@@ -0,0 +1,56 @@
+<?php
+/**
+ * Script for periodic off-peak updating of the search index
+ *
+ * Usage: php updateSearchIndex.php [-s START] [-e END] [-p POSFILE] [-l LOCKTIME] [-q]
+ * Where START is the starting timestamp
+ * END is the ending timestamp
+ * POSFILE is a file to load timestamps from and save them to, searchUpdate.pos by default
+ * LOCKTIME is how long the searchindex and cur tables will be locked for
+ * -q means quiet
+ *
+ * @addtogroup Maintenance
+ */
+
+/** */
+$optionsWithArgs = array( 's', 'e', 'p' );
+
+require_once( 'commandLine.inc' );
+require_once( 'updateSearchIndex.inc' );
+
+if ( isset( $options['p'] ) ) {
+	$posFile = $options['p'];
+} else {
+	$posFile = 'searchUpdate.pos';
+}
+
+if ( isset( $options['e'] ) ) {
+	$end = $options['e'];
+} else {
+	$end = wfTimestampNow();
+}
+
+if ( isset( $options['s'] ) ) {
+	$start = $options['s'];
+} else {
+	$start = @file_get_contents( $posFile );
+	if ( !$start ) {
+		$start = wfTimestamp( TS_MW, time() - 86400 );
+	}
+}
+
+if ( isset( $options['l'] ) ) {
+	$lockTime = $options['l'];
+} else {
+	$lockTime = 20;
+}
+
+$quiet = (bool)(@$options['q']);
+
+updateSearchIndex( $start, $end, $lockTime, $quiet );
+
+$file = fopen( $posFile, 'w' );
+fwrite( $file, $end );
+fclose( $file );
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/updateSpecialPages.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/updateSpecialPages.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/updateSpecialPages.php	(revision 1280)
@@ -0,0 +1,104 @@
+<?php
+
+# Run this script periodically if you have miser mode enabled, to refresh the caches
+$options = array('only','help');
+
+require_once( 'commandLine.inc' );
+
+require_once( 'SpecialPage.php' );
+require_once( 'QueryPage.php' );
+
+if(@$options['help']) {
+	print "usage:updateSpecialPages.php [--help] [--only=page]\n";
+	print "  --help      : this help message\n";
+	print "  --list      : list special pages names\n";
+	print "  --only=page : only update 'page'. Ex: --only=BrokenRedirects\n";
+	wfDie();
+}
+
+$wgOut->disable();
+$dbw = wfGetDB( DB_MASTER );
+
+foreach ( $wgQueryPages as $page ) {
+	@list( $class, $special, $limit ) = $page;
+
+	# --list : just show the name of pages
+	if( @$options['list'] ) {
+		print "$special\n";
+		continue;
+	}
+
+	if ( $wgDisableQueryPageUpdate && in_array( $special, $wgDisableQueryPageUpdate ) ) {
+		printf("%-30s disabled\n", $special);
+		continue;
+	}
+
+	$specialObj = SpecialPage::getPage( $special );
+	if ( !$specialObj ) {
+		print "No such special page: $special\n";
+		exit;
+	}
+	if ( !class_exists( $class ) ) {
+		$file = $specialObj->getFile();
+		require_once( $file );
+	}
+	$queryPage = new $class;
+
+	if( !(isset($options['only'])) or ($options['only'] == $queryPage->getName()) ) {
+	printf( '%-30s ',  $special );
+
+	if ( $queryPage->isExpensive() ) {
+		$t1 = explode( ' ', microtime() );
+		# Do the query
+		$num = $queryPage->recache( $limit === null ? $wgQueryCacheLimit : $limit );
+		$t2 = explode( ' ', microtime() );
+
+		if ( $num === false ) {
+			print "FAILED: database error\n";
+		} else {
+			print "got $num rows in ";
+
+			$elapsed = ($t2[0] - $t1[0]) + ($t2[1] - $t1[1]);
+			$hours = intval( $elapsed / 3600 );
+			$minutes = intval( $elapsed % 3600 / 60 );
+			$seconds = $elapsed - $hours * 3600 - $minutes * 60;
+			if ( $hours ) {
+				print $hours . 'h ';
+			}
+			if ( $minutes ) {
+				print $minutes . 'm ';
+			}
+			printf( "%.2fs\n", $seconds );
+		}
+
+		# Reopen any connections that have closed
+		if ( !$wgLoadBalancer->pingAll())  {
+			print "\n";
+			do {
+				print "Connection failed, reconnecting in 10 seconds...\n";
+				sleep(10);
+			} while ( !$wgLoadBalancer->pingAll() );
+			print "Reconnected\n\n";
+		} else {
+			# Commit the results
+			$dbw->immediateCommit();
+		}
+
+		# Wait for the slave to catch up
+		/*
+		$slaveDB = wfGetDB( DB_SLAVE, array('QueryPage::recache', 'vslow' ) );
+		while( $slaveDB->getLag() > 600 ) {
+			print "Slave lagged, waiting...\n";
+			sleep(30);
+
+		}
+		*/
+		wfWaitForSlaves( 5 );
+
+	} else {
+		print "cheap, skipped\n";
+	}
+	}
+}
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/updaters.inc
===================================================================
--- /MediaWiki/branches/1.11/maintenance/updaters.inc	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/updaters.inc	(revision 1280)
@@ -0,0 +1,1389 @@
+<?php
+/**
+ * @addtogroup Maintenance
+ */
+
+ /** */
+
+if ( !defined( 'MEDIAWIKI' ) ) {
+	echo "This file is not a valid entry point\n";
+	exit( 1 );
+}
+
+require_once 'convertLinks.inc';
+require_once 'userDupes.inc';
+require_once 'deleteDefaultMessages.php';
+
+$wgRenamedTables = array(
+#           from             to                  patch file
+#	array( 'group',         'groups',           'patch-rename-group.sql' ),
+);
+
+$wgNewTables = array(
+#            table          patch file (in maintenance/archives)
+	array( 'hitcounter',    'patch-hitcounter.sql' ),
+	array( 'querycache',    'patch-querycache.sql' ),
+	array( 'objectcache',   'patch-objectcache.sql' ),
+	array( 'categorylinks', 'patch-categorylinks.sql' ),
+	array( 'logging',       'patch-logging.sql' ),
+	array( 'user_newtalk',  'patch-usernewtalk2.sql' ),
+	array( 'transcache',	'patch-transcache.sql' ),
+	array( 'trackbacks',	'patch-trackbacks.sql' ),
+	array( 'externallinks', 'patch-externallinks.sql' ),
+	array( 'job',           'patch-job.sql' ),
+	array( 'langlinks',     'patch-langlinks.sql' ),
+	array( 'querycache_info', 'patch-querycacheinfo.sql' ),
+	array( 'filearchive',   'patch-filearchive.sql' ),
+	array( 'querycachetwo',	'patch-querycachetwo.sql' ),
+);
+
+$wgNewFields = array(
+#           table            field             patch file (in maintenance/archives)
+	array( 'ipblocks',      'ipb_id',           'patch-ipblocks.sql' ),
+	array( 'ipblocks',      'ipb_expiry',       'patch-ipb_expiry.sql' ),
+	array( 'recentchanges', 'rc_type',          'patch-rc_type.sql' ),
+	array( 'recentchanges', 'rc_ip',            'patch-rc_ip.sql' ),
+	array( 'recentchanges', 'rc_id',            'patch-rc_id.sql' ),
+	array( 'recentchanges', 'rc_patrolled',     'patch-rc-patrol.sql' ),
+	array( 'recentchanges', 'rc_old_len',       'patch-rc_len.sql' ),
+	array( 'user',          'user_real_name',   'patch-user-realname.sql' ),
+	array( 'user',          'user_token',       'patch-user_token.sql' ),
+	array( 'user',          'user_email_token', 'patch-user_email_token.sql' ),
+	array( 'user',          'user_registration','patch-user_registration.sql' ),
+ 	array( 'logging',       'log_params',       'patch-log_params.sql' ),
+ 	array( 'archive',       'ar_rev_id',        'patch-archive-rev_id.sql' ),
+ 	array( 'archive',       'ar_text_id',       'patch-archive-text_id.sql' ),
+ 	array( 'page',          'page_len',         'patch-page_len.sql' ),
+ 	array( 'revision',      'rev_deleted',      'patch-rev_deleted.sql' ),
+	array( 'image',         'img_width',        'patch-img_width.sql' ),
+	array( 'image',         'img_metadata',     'patch-img_metadata.sql' ),
+	array( 'image',         'img_media_type',   'patch-img_media_type.sql' ),
+	array( 'site_stats',    'ss_total_pages',   'patch-ss_total_articles.sql' ),
+	array( 'interwiki',     'iw_trans',         'patch-interwiki-trans.sql' ),
+	array( 'ipblocks',      'ipb_range_start',  'patch-ipb_range_start.sql' ),
+	array( 'site_stats',    'ss_images',        'patch-ss_images.sql' ),
+	array( 'ipblocks',      'ipb_anon_only',    'patch-ipb_anon_only.sql' ),
+	array( 'ipblocks',		'ipb_enable_autoblock', 'patch-ipb_optional_autoblock.sql' ),
+	array( 'user',          'user_newpass_time','patch-user_newpass_time.sql' ),
+	array( 'user',          'user_editcount',   'patch-user_editcount.sql' ),
+	array( 'recentchanges', 'rc_deleted',		'patch-rc_deleted.sql' ),
+	array( 'logging',		'log_id',			'patch-log_id.sql' ),
+	array( 'logging',		'log_deleted',		'patch-log_deleted.sql' ),
+	array( 'archive',		'ar_deleted',		'patch-ar_deleted.sql' ),
+	array( 'ipblocks',		'ipb_deleted',		'patch-ipb_deleted.sql' ),
+	array( 'filearchive',	'fa_deleted',		'patch-fa_deleted.sql' ),
+	array( 'revision',	    'rev_len',          'patch-rev_len.sql' ),
+	array( 'archive',	    'ar_len',           'patch-ar_len.sql' ),
+ 	array( 'revision',	    'rev_parent_id',    'patch-rev_parent_id.sql' ),
+	array( 'page_restrictions', 'pr_id',		'patch-page_restrictions_sortkey.sql' ),
+);
+
+function rename_table( $from, $to, $patch ) {
+	global $wgDatabase;
+	if ( $wgDatabase->tableExists( $from ) ) {
+		if ( $wgDatabase->tableExists( $to ) ) {
+			echo "...can't move table $from to $to, $to already exists.\n";
+		} else {
+			echo "Moving table $from to $to...";
+			dbsource( archive($patch), $wgDatabase );
+			echo "ok\n";
+		}
+	} else {
+		// Source table does not exist
+		// Renames are done before creations, so this is typical for a new installation
+		// Ignore silently
+	}
+}
+
+function add_table( $name, $patch ) {
+	global $wgDatabase;
+	if ( $wgDatabase->tableExists( $name ) ) {
+		echo "...$name table already exists.\n";
+	} else {
+		echo "Creating $name table...";
+		dbsource( archive($patch), $wgDatabase );
+		echo "ok\n";
+	}
+}
+
+function add_field( $table, $field, $patch ) {
+	global $wgDatabase;
+	if ( !$wgDatabase->tableExists( $table ) ) {
+		echo "...$table table does not exist, skipping new field patch\n";
+	} elseif ( $wgDatabase->fieldExists( $table, $field ) ) {
+		echo "...have $field field in $table table.\n";
+	} else {
+		echo "Adding $field field to table $table...";
+		dbsource( archive($patch) , $wgDatabase );
+		echo "ok\n";
+	}
+}
+
+function do_revision_updates() {
+	global $wgSoftwareRevision;
+	if ( $wgSoftwareRevision < 1001 ) {
+		update_passwords();
+	}
+}
+
+function update_passwords() {
+	wfDebugDieBacktrace( "This function needs to be updated or removed.\n" );
+
+	global $wgDatabase;
+	$fname = "Update script: update_passwords()";
+	print "\nIt appears that you need to update the user passwords in your\n" .
+	  "database. If you have already done this (if you've run this update\n" .
+	  "script once before, for example), doing so again will make all your\n" .
+	  "user accounts inaccessible, so be sure you only do this once.\n" .
+	  "Update user passwords? (yes/no)";
+
+	$resp = readconsole();
+    if ( ! ( "Y" == $resp{0} || "y" == $resp{0} ) ) { return; }
+
+	$sql = "SELECT user_id,user_password FROM user";
+	$source = $wgDatabase->query( $sql, $fname );
+
+	while ( $row = $wgDatabase->fetchObject( $source ) ) {
+		$id = $row->user_id;
+		$oldpass = $row->user_password;
+		$newpass = md5( "{$id}-{$oldpass}" );
+
+		$sql = "UPDATE user SET user_password='{$newpass}' " .
+		  "WHERE user_id={$id}";
+		$wgDatabase->query( $sql, $fname );
+	}
+}
+
+function do_interwiki_update() {
+	# Check that interwiki table exists; if it doesn't source it
+	global $wgDatabase, $IP;
+	if( $wgDatabase->tableExists( "interwiki" ) ) {
+		echo "...already have interwiki table\n";
+		return true;
+	}
+	echo "Creating interwiki table: ";
+	dbsource( archive("patch-interwiki.sql") );
+	echo "ok\n";
+	echo "Adding default interwiki definitions: ";
+	dbsource( "$IP/maintenance/interwiki.sql" );
+	echo "ok\n";
+}
+
+function do_index_update() {
+	# Check that proper indexes are in place
+	global $wgDatabase;
+	$meta = $wgDatabase->fieldInfo( "recentchanges", "rc_timestamp" );
+	if( !$meta->isMultipleKey() ) {
+		echo "Updating indexes to 20031107: ";
+		dbsource( archive("patch-indexes.sql") );
+		echo "ok\n";
+		return true;
+	}
+	echo "...indexes seem up to 20031107 standards\n";
+	return false;
+}
+
+function do_image_index_update() {
+	global $wgDatabase;
+
+	$meta = $wgDatabase->fieldInfo( "image", "img_major_mime" );
+	if( !$meta->isMultipleKey() ) {
+		echo "Updating indexes to 20050912: ";
+		dbsource( archive("patch-mimesearch-indexes.sql") );
+		echo "ok\n";
+		return true;
+	}
+	echo "...indexes seem up to 20050912 standards\n";
+	return false;
+}
+
+function do_image_name_unique_update() {
+	global $wgDatabase;
+	if( $wgDatabase->indexExists( 'image', 'PRIMARY' ) ) {
+		echo "...image primary key already set.\n";
+	} else {
+		echo "Making img_name the primary key... ";
+		dbsource( archive("patch-image_name_primary.sql"), $wgDatabase );
+		echo "ok\n";
+	}
+}
+
+function do_logging_timestamp_index() {
+	global $wgDatabase;
+	if( $wgDatabase->indexExists( 'logging', 'times' ) ) {
+		echo "...timestamp key on logging already exists.\n";
+	} else {
+		echo "Adding timestamp key on logging table... ";
+		dbsource( archive("patch-logging-times-index.sql"), $wgDatabase );
+		echo "ok\n";
+	}
+}
+
+
+function do_watchlist_update() {
+	global $wgDatabase;
+	$fname = 'do_watchlist_update';
+	if( $wgDatabase->fieldExists( 'watchlist', 'wl_notificationtimestamp' ) ) {
+		echo "The watchlist table is already set up for email notification.\n";
+	} else {
+		echo "Adding wl_notificationtimestamp field for email notification management.";
+		/* ALTER TABLE watchlist ADD (wl_notificationtimestamp varchar(14) binary NOT NULL default '0'); */
+		dbsource( archive( 'patch-email-notification.sql' ), $wgDatabase );
+		echo "ok\n";
+	}
+	# Check if we need to add talk page rows to the watchlist
+	$talk = $wgDatabase->selectField( 'watchlist', 'count(*)', 'wl_namespace & 1', $fname );
+	$nontalk = $wgDatabase->selectField( 'watchlist', 'count(*)', 'NOT (wl_namespace & 1)', $fname );
+	if ( $talk != $nontalk ) {
+		echo "Adding missing watchlist talk page rows... ";
+		flush();
+
+		$wgDatabase->insertSelect( 'watchlist', 'watchlist', 
+			array(
+				'wl_user' => 'wl_user',
+				'wl_namespace' => 'wl_namespace | 1',
+				'wl_title' => 'wl_title',
+				'wl_notificationtimestamp' => 'wl_notificationtimestamp'
+			), array( 'NOT (wl_namespace & 1)' ), $fname, 'IGNORE' );
+		echo "ok\n";
+	} else {
+		echo "...watchlist talk page rows already present\n";
+	}
+}
+
+function do_copy_newtalk_to_watchlist() {
+	global $wgDatabase;
+	global $wgCommandLineMode;	# this needs to be saved while getID() and getName() are called
+
+	$res = $wgDatabase->safeQuery( 'SELECT user_id, user_ip FROM !',
+		$wgDatabase->tableName( 'user_newtalk' ) );
+	$num_newtalks=$wgDatabase->numRows($res);
+	echo "Now converting ".$num_newtalks." user_newtalk entries to watchlist table entries ... \n";
+
+	$user = new User();
+	for ( $i = 1; $i <= $num_newtalks; $i++ ) {
+		$wluser = $wgDatabase->fetchObject( $res );
+		if ($wluser->user_id == 0) { # anonymous users ... have IP numbers as "names"
+			if ($user->isIP($wluser->user_ip)) { # do only if it really looks like an IP number (double checked)
+				$wgDatabase->replace( 'watchlist',
+					array(array('wl_user','wl_namespace', 'wl_title', 'wl_notificationtimestamp' )),
+					  array('wl_user' 			=> 0,
+						'wl_namespace' 			=> NS_USER_TALK,
+						'wl_title' 			=> $wluser->user_ip,
+						'wl_notificationtimestamp' 	=> '19700101000000'
+						), 'updaters.inc::do_watchlist_update2'
+					);
+			}
+		} else { # normal users ... have user_ids
+			$user->setID($wluser->user_id);
+			$wgDatabase->replace( 'watchlist',
+				array(array('wl_user','wl_namespace', 'wl_title', 'wl_notificationtimestamp' )),
+				  array('wl_user' 			=> $user->getID(),
+					'wl_namespace' 			=> NS_USER_TALK,
+					'wl_title' 			=> $user->getName(),
+					'wl_notificationtimestamp' 	=> '19700101000000'
+					), 'updaters.inc::do_watchlist_update3'
+				);
+		}
+	}
+	echo "Done.\n";
+}
+
+
+function do_user_update() {
+	global $wgDatabase;
+	if( $wgDatabase->fieldExists( 'user', 'user_emailauthenticationtimestamp' ) ) {
+		echo "User table contains old email authentication field. Dropping... ";
+		dbsource( archive( 'patch-email-authentication.sql' ), $wgDatabase );
+		echo "ok\n";
+	} else {
+		echo "...user table does not contain old email authentication field.\n";
+	}
+}
+
+/**
+ * 1.4 betas were missing the 'binary' marker from logging.log_title,
+ * which causes a collation mismatch error on joins in MySQL 4.1.
+ */
+function do_logging_encoding() {
+	global $wgDatabase, $wgDBtype;
+	if ($wgDBtype != 'mysql')
+		return;
+	$logging = $wgDatabase->tableName( 'logging' );
+	$res = $wgDatabase->query( "SELECT log_title FROM $logging LIMIT 0" );
+	$flags = explode( ' ', mysql_field_flags( $res, 0 ) );
+	$wgDatabase->freeResult( $res );
+
+	if( in_array( 'binary', $flags ) ) {
+		echo "Logging table has correct title encoding.\n";
+	} else {
+		echo "Fixing title encoding on logging table... ";
+		dbsource( archive( 'patch-logging-title.sql' ), $wgDatabase );
+		echo "ok\n";
+	}
+}
+
+function do_schema_restructuring() {
+	global $wgDatabase;
+	$fname="do_schema_restructuring";
+	if ( $wgDatabase->tableExists( 'page' ) ) {
+		echo "...page table already exists.\n";
+	} else {
+		echo "...converting from cur/old to page/revision/text DB structure.\n"; flush();
+		echo wfTimestamp( TS_DB );
+		echo "......checking for duplicate entries.\n"; flush();
+
+		list ($cur, $old, $page, $revision, $text) = $wgDatabase->tableNamesN( 'cur', 'old', 'page', 'revision', 'text' );
+
+		$rows = $wgDatabase->query( "SELECT cur_title, cur_namespace, COUNT(cur_namespace) AS c
+				FROM $cur GROUP BY cur_title, cur_namespace HAVING c>1", $fname );
+
+		if ( $wgDatabase->numRows( $rows ) > 0 ) {
+			echo wfTimestamp( TS_DB );
+			echo "......<b>Found duplicate entries</b>\n";
+			echo ( sprintf( "<b>      %-60s %3s %5s</b>\n", 'Title', 'NS', 'Count' ) );
+			while ( $row = $wgDatabase->fetchObject( $rows ) ) {
+				if ( ! isset( $duplicate[$row->cur_namespace] ) ) {
+					$duplicate[$row->cur_namespace] = array();
+				}
+				$duplicate[$row->cur_namespace][] = $row->cur_title;
+				echo ( sprintf( "      %-60s %3s %5s\n", $row->cur_title, $row->cur_namespace, $row->c ) );
+			}
+			$sql = "SELECT cur_title, cur_namespace, cur_id, cur_timestamp FROM $cur WHERE ";
+			$firstCond = true;
+			foreach ( $duplicate as $ns => $titles ) {
+				if ( $firstCond ) {
+					$firstCond = false;
+				} else {
+					$sql .= ' OR ';
+				}
+				$sql .= "( cur_namespace = {$ns} AND cur_title in (";
+				$first = true;
+				foreach ( $titles as $t ) {
+					if ( $first ) {
+						$sql .= $wgDatabase->addQuotes( $t );
+						$first = false;
+					} else {
+						$sql .= ', ' . $wgDatabase->addQuotes( $t );
+					}
+				}
+				$sql .= ") ) \n";
+			}
+			# By sorting descending, the most recent entry will be the first in the list.
+			# All following entries will be deleted by the next while-loop.
+			$sql .= 'ORDER BY cur_namespace, cur_title, cur_timestamp DESC';
+
+			$rows = $wgDatabase->query( $sql, $fname );
+
+			$prev_title = $prev_namespace = false;
+			$deleteId = array();
+
+			while ( $row = $wgDatabase->fetchObject( $rows ) ) {
+				if ( $prev_title == $row->cur_title && $prev_namespace == $row->cur_namespace ) {
+					$deleteId[] = $row->cur_id;
+				}
+				$prev_title     = $row->cur_title;
+				$prev_namespace = $row->cur_namespace;
+			}
+			$sql = "DELETE FROM $cur WHERE cur_id IN ( " . join( ',', $deleteId ) . ')';
+			$rows = $wgDatabase->query( $sql, $fname );
+			echo wfTimestamp( TS_DB );
+			echo "......<b>Deleted</b> ".$wgDatabase->affectedRows()." records.\n";
+		}
+
+
+		echo wfTimestamp( TS_DB );
+		echo "......Creating tables.\n";
+		$wgDatabase->query("CREATE TABLE $page (
+  			page_id int(8) unsigned NOT NULL auto_increment,
+  			page_namespace int NOT NULL,
+  			page_title varchar(255) binary NOT NULL,
+  			page_restrictions tinyblob NOT NULL,
+  			page_counter bigint(20) unsigned NOT NULL default '0',
+  			page_is_redirect tinyint(1) unsigned NOT NULL default '0',
+  			page_is_new tinyint(1) unsigned NOT NULL default '0',
+  			page_random real unsigned NOT NULL,
+  			page_touched char(14) binary NOT NULL default '',
+  			page_latest int(8) unsigned NOT NULL,
+  			page_len int(8) unsigned NOT NULL,
+
+  			PRIMARY KEY page_id (page_id),
+  			UNIQUE INDEX name_title (page_namespace,page_title),
+  			INDEX (page_random),
+  			INDEX (page_len)
+			) TYPE=InnoDB", $fname );
+		$wgDatabase->query("CREATE TABLE $revision (
+  			rev_id int(8) unsigned NOT NULL auto_increment,
+  			rev_page int(8) unsigned NOT NULL,
+  			rev_comment tinyblob NOT NULL,
+  			rev_user int(5) unsigned NOT NULL default '0',
+  			rev_user_text varchar(255) binary NOT NULL default '',
+  			rev_timestamp char(14) binary NOT NULL default '',
+  			rev_minor_edit tinyint(1) unsigned NOT NULL default '0',
+			rev_deleted tinyint(1) unsigned NOT NULL default '0',
+			rev_len int(8) unsigned,
+			rev_parent_id int(8) unsigned default NULL,
+  			PRIMARY KEY rev_page_id (rev_page, rev_id),
+  			UNIQUE INDEX rev_id (rev_id),
+  			INDEX rev_timestamp (rev_timestamp),
+  			INDEX page_timestamp (rev_page,rev_timestamp),
+  			INDEX user_timestamp (rev_user,rev_timestamp),
+  			INDEX usertext_timestamp (rev_user_text,rev_timestamp)
+			) TYPE=InnoDB", $fname );
+
+		echo wfTimestamp( TS_DB );
+		echo "......Locking tables.\n";
+		$wgDatabase->query( "LOCK TABLES $page WRITE, $revision WRITE, $old WRITE, $cur WRITE", $fname );
+
+		$maxold = intval( $wgDatabase->selectField( 'old', 'max(old_id)', '', $fname ) );
+		echo wfTimestamp( TS_DB );
+		echo "......maxold is {$maxold}\n";
+
+		echo wfTimestamp( TS_DB );
+		global $wgLegacySchemaConversion;
+		if( $wgLegacySchemaConversion ) {
+			// Create HistoryBlobCurStub entries.
+			// Text will be pulled from the leftover 'cur' table at runtime.
+			echo "......Moving metadata from cur; using blob references to text in cur table.\n";
+			$cur_text = "concat('O:18:\"historyblobcurstub\":1:{s:6:\"mCurId\";i:',cur_id,';}')";
+			$cur_flags = "'object'";
+		} else {
+			// Copy all cur text in immediately: this may take longer but avoids
+			// having to keep an extra table around.
+			echo "......Moving text from cur.\n";
+			$cur_text = 'cur_text';
+			$cur_flags = "''";
+		}
+		$wgDatabase->query( "INSERT INTO $old (old_namespace, old_title, old_text, old_comment, old_user, old_user_text,
+    				old_timestamp, old_minor_edit, old_flags)
+  			SELECT cur_namespace, cur_title, $cur_text, cur_comment, cur_user, cur_user_text, cur_timestamp, cur_minor_edit, $cur_flags
+  			FROM $cur", $fname );
+
+		echo wfTimestamp( TS_DB );
+		echo "......Setting up revision table.\n";
+		$wgDatabase->query( "INSERT INTO $revision (rev_id, rev_page, rev_comment, rev_user, rev_user_text, rev_timestamp,
+    				rev_minor_edit)
+			SELECT old_id, cur_id, old_comment, old_user, old_user_text,
+    				old_timestamp, old_minor_edit
+			FROM $old,$cur WHERE old_namespace=cur_namespace AND old_title=cur_title", $fname );
+
+		echo wfTimestamp( TS_DB );
+		echo "......Setting up page table.\n";
+		$wgDatabase->query( "INSERT INTO $page (page_id, page_namespace, page_title, page_restrictions, page_counter,
+    				page_is_redirect, page_is_new, page_random, page_touched, page_latest, page_len)
+  			SELECT cur_id, cur_namespace, cur_title, cur_restrictions, cur_counter, cur_is_redirect, cur_is_new,
+    				cur_random, cur_touched, rev_id, LENGTH(cur_text)
+  			FROM $cur,$revision
+  			WHERE cur_id=rev_page AND rev_timestamp=cur_timestamp AND rev_id > {$maxold}", $fname );
+
+		echo wfTimestamp( TS_DB );
+		echo "......Unlocking tables.\n";
+		$wgDatabase->query( "UNLOCK TABLES", $fname );
+
+		echo wfTimestamp( TS_DB );
+		echo "......Renaming old.\n";
+		$wgDatabase->query( "ALTER TABLE $old RENAME TO $text", $fname );
+
+		echo wfTimestamp( TS_DB );
+		echo "...done.\n";
+	}
+}
+
+function do_inverse_timestamp() {
+	global $wgDatabase;
+	if( $wgDatabase->fieldExists( 'revision', 'inverse_timestamp' ) ) {
+		echo "Removing revision.inverse_timestamp and fixing indexes... ";
+		dbsource( archive( 'patch-inverse_timestamp.sql' ), $wgDatabase );
+		echo "ok\n";
+	} else {
+		echo "revision timestamp indexes already up to 2005-03-13\n";
+	}
+}
+
+function do_text_id() {
+	global $wgDatabase;
+	if( $wgDatabase->fieldExists( 'revision', 'rev_text_id' ) ) {
+		echo "...rev_text_id already in place.\n";
+	} else {
+		echo "Adding rev_text_id field... ";
+		dbsource( archive( 'patch-rev_text_id.sql' ), $wgDatabase );
+		echo "ok\n";
+	}
+}
+
+function do_namespace_size() {
+	$tables = array(
+		'page'          => 'page',
+		'archive'       => 'ar',
+		'recentchanges' => 'rc',
+		'watchlist'     => 'wl',
+		'querycache'    => 'qc',
+		'logging'       => 'log',
+	);
+	foreach( $tables as $table => $prefix ) {
+		do_namespace_size_on( $table, $prefix );
+		flush();
+	}
+}
+
+function do_namespace_size_on( $table, $prefix ) {
+	global $wgDatabase, $wgDBtype;
+	if ($wgDBtype != 'mysql')
+		return;
+	$field = $prefix . '_namespace';
+
+	$tablename = $wgDatabase->tableName( $table );
+	$result = $wgDatabase->query( "SHOW COLUMNS FROM $tablename LIKE '$field'" );
+	$info = $wgDatabase->fetchObject( $result );
+	$wgDatabase->freeResult( $result );
+
+	if( substr( $info->Type, 0, 3 ) == 'int' ) {
+		echo "...$field is already a full int ($info->Type).\n";
+	} else {
+		echo "Promoting $field from $info->Type to int... ";
+
+		$sql = "ALTER TABLE $tablename MODIFY $field int NOT NULL";
+		$wgDatabase->query( $sql );
+
+		echo "ok\n";
+	}
+}
+
+function do_pagelinks_update() {
+	global $wgDatabase;
+	if( $wgDatabase->tableExists( 'pagelinks' ) ) {
+		echo "...already have pagelinks table.\n";
+	} else {
+		echo "Converting links and brokenlinks tables to pagelinks... ";
+		dbsource( archive( 'patch-pagelinks.sql' ), $wgDatabase );
+		echo "ok\n";
+		flush();
+
+		global $wgCanonicalNamespaceNames;
+		foreach( $wgCanonicalNamespaceNames as $ns => $name ) {
+			if( $ns != 0 ) {
+				do_pagelinks_namespace( $ns );
+			}
+		}
+	}
+}
+
+function do_pagelinks_namespace( $namespace ) {
+	global $wgDatabase, $wgContLang;
+
+	$ns = intval( $namespace );
+	echo "Cleaning up broken links for namespace $ns... ";
+
+	$pagelinks = $wgDatabase->tableName( 'pagelinks' );
+	$name = $wgContLang->getNsText( $ns );
+	$prefix = $wgDatabase->strencode( $name );
+	$likeprefix = str_replace( '_', '\\_', $prefix);
+
+	$sql = "UPDATE $pagelinks
+	           SET pl_namespace=$ns,
+	               pl_title=TRIM(LEADING '$prefix:' FROM pl_title)
+	         WHERE pl_namespace=0
+	           AND pl_title LIKE '$likeprefix:%'";
+
+	$wgDatabase->query( $sql, 'do_pagelinks_namespace' );
+	echo "ok\n";
+}
+
+function do_drop_img_type() {
+	global $wgDatabase;
+
+	if( $wgDatabase->fieldExists( 'image', 'img_type' ) ) {
+		echo "Dropping unused img_type field in image table... ";
+		dbsource( archive( 'patch-drop_img_type.sql' ), $wgDatabase );
+		echo "ok\n";
+	} else {
+		echo "No img_type field in image table; Good.\n";
+	}
+}
+
+function do_old_links_update() {
+	global $wgDatabase;
+	if( $wgDatabase->tableExists( 'pagelinks' ) ) {
+		echo "Already have pagelinks; skipping old links table updates.\n";
+	} else {
+		convertLinks(); flush();
+	}
+}
+
+function do_user_unique_update() {
+	global $wgDatabase;
+	$duper = new UserDupes( $wgDatabase );
+	if( $duper->hasUniqueIndex() ) {
+		echo "Already have unique user_name index.\n";
+	} else {
+		if( !$duper->clearDupes() ) {
+			echo "WARNING: This next step will probably fail due to unfixed duplicates...\n";
+		}
+		echo "Adding unique index on user_name... ";
+		dbsource( archive( 'patch-user_nameindex.sql' ), $wgDatabase );
+		echo "ok\n";
+	}
+}
+
+function do_user_groups_update() {
+	$fname = 'do_user_groups_update';
+	global $wgDatabase;
+
+	if( $wgDatabase->tableExists( 'user_groups' ) ) {
+		echo "...user_groups table already exists.\n";
+		return do_user_groups_reformat();
+	}
+
+	echo "Adding user_groups table... ";
+	dbsource( archive( 'patch-user_groups.sql' ), $wgDatabase );
+	echo "ok\n";
+
+	if( !$wgDatabase->tableExists( 'user_rights' ) ) {
+		if( $wgDatabase->fieldExists( 'user', 'user_rights' ) ) {
+			echo "Upgrading from a 1.3 or older database? Breaking out user_rights for conversion...";
+			dbsource( archive( 'patch-user_rights.sql' ), $wgDatabase );
+			echo "ok\n";
+		} else {
+			echo "*** WARNING: couldn't locate user_rights table or field for upgrade.\n";
+			echo "*** You may need to manually configure some sysops by manipulating\n";
+			echo "*** the user_groups table.\n";
+			return;
+		}
+	}
+
+	echo "Converting user_rights table to user_groups... ";
+	$result = $wgDatabase->select( 'user_rights',
+		array( 'ur_user', 'ur_rights' ),
+		array( "ur_rights != ''" ),
+		$fname );
+
+	while( $row = $wgDatabase->fetchObject( $result ) ) {
+		$groups = array_unique(
+			array_map( 'trim',
+				explode( ',', $row->ur_rights ) ) );
+
+		foreach( $groups as $group ) {
+			$wgDatabase->insert( 'user_groups',
+				array(
+					'ug_user'  => $row->ur_user,
+					'ug_group' => $group ),
+				$fname );
+		}
+	}
+	$wgDatabase->freeResult( $result );
+	echo "ok\n";
+}
+
+function do_user_groups_reformat() {
+	# Check for bogus formats from previous 1.5 alpha code.
+	global $wgDatabase;
+	$info = $wgDatabase->fieldInfo( 'user_groups', 'ug_group' );
+
+	if( $info->type() == 'int' ) {
+		$oldug = $wgDatabase->tableName( 'user_groups' );
+		$newug = $wgDatabase->tableName( 'user_groups_bogus' );
+		echo "user_groups is in bogus intermediate format. Renaming to $newug... ";
+		$wgDatabase->query( "ALTER TABLE $oldug RENAME TO $newug" );
+		echo "ok\n";
+
+		echo "Re-adding fresh user_groups table... ";
+		dbsource( archive( 'patch-user_groups.sql' ), $wgDatabase );
+		echo "ok\n";
+
+		echo "***\n";
+		echo "*** WARNING: You will need to manually fix up user permissions in the user_groups\n";
+		echo "*** table. Old 1.5 alpha versions did some pretty funky stuff...\n";
+		echo "***\n";
+	} else {
+		echo "...user_groups is in current format.\n";
+	}
+
+}
+
+function do_watchlist_null() {
+	# Make sure wl_notificationtimestamp can be NULL,
+	# and update old broken items.
+	global $wgDatabase;
+	$info = $wgDatabase->fieldInfo( 'watchlist', 'wl_notificationtimestamp' );
+
+	if( !$info->nullable() ) {
+		echo "Making wl_notificationtimestamp nullable... ";
+		dbsource( archive( 'patch-watchlist-null.sql' ), $wgDatabase );
+		echo "ok\n";
+	} else {
+		echo "...wl_notificationtimestamp is already nullable.\n";
+	}
+
+}
+
+/**
+ * @bug 3946
+ */
+function do_page_random_update() {
+	global $wgDatabase;
+
+	echo "Setting page_random to a random value on rows where it equals 0...";
+
+	$page = $wgDatabase->tableName( 'page' );
+	$wgDatabase->query( "UPDATE $page SET page_random = RAND() WHERE page_random = 0", 'do_page_random_update' );
+	$rows = $wgDatabase->affectedRows();
+
+	echo "changed $rows rows\n";
+}
+
+function do_templatelinks_update() {
+	global $wgDatabase, $wgLoadBalancer;
+	$fname = 'do_templatelinks_update';
+
+	if ( $wgDatabase->tableExists( 'templatelinks' ) ) {
+		echo "...templatelinks table already exists\n";
+		return;
+	}
+	echo "Creating templatelinks table...\n";
+	dbsource( archive('patch-templatelinks.sql'), $wgDatabase );
+	echo "Populating...\n";
+	if ( isset( $wgLoadBalancer ) && $wgLoadBalancer->getServerCount() > 1 ) {
+		// Slow, replication-friendly update
+		$res = $wgDatabase->select( 'pagelinks', array( 'pl_from', 'pl_namespace', 'pl_title' ),
+			array( 'pl_namespace' => NS_TEMPLATE ), $fname );
+		$count = 0;
+		while ( $row = $wgDatabase->fetchObject( $res ) ) {
+			$count = ($count + 1) % 100;
+			if ( $count == 0 ) {
+				if ( function_exists( 'wfWaitForSlaves' ) ) {
+					wfWaitForSlaves( 10 );
+				} else {
+					sleep( 1 );
+				}
+			}
+			$wgDatabase->insert( 'templatelinks',
+				array(
+					'tl_from' => $row->pl_from,
+					'tl_namespace' => $row->pl_namespace,
+					'tl_title' => $row->pl_title,
+				), $fname
+			);
+
+		}
+		$wgDatabase->freeResult( $res );
+	} else {
+		// Fast update
+		$wgDatabase->insertSelect( 'templatelinks', 'pagelinks',
+			array(
+				'tl_from' => 'pl_from',
+				'tl_namespace' => 'pl_namespace',
+				'tl_title' => 'pl_title'
+			), array(
+				'pl_namespace' => 10
+			), $fname
+		);
+	}
+	echo "Done. Please run maintenance/refreshLinks.php for a more thorough templatelinks update.\n";
+}
+
+# July 2006
+# Add ( rc_namespace, rc_user_text ) index [R. Church]
+function do_rc_indices_update() {
+	global $wgDatabase;
+	echo( "Checking for additional recent changes indices...\n" );
+	# See if we can find the index we want
+	$info = $wgDatabase->indexInfo( 'recentchanges', 'rc_ns_usertext', __METHOD__ );
+	if( !$info ) {
+		# None, so create
+		echo( "...index on ( rc_namespace, rc_user_text ) not found; creating\n" );
+		dbsource( archive( 'patch-recentchanges-utindex.sql' ) );
+	} else {
+		# Index seems to exist
+		echo( "...index on ( rc_namespace, rc_user_text ) seems to be ok\n" );
+	}
+
+	#Add (rc_user_text, rc_timestamp) index [A. Garrett], November 2006
+	# See if we can find the index we want
+	$info = $wgDatabase->indexInfo( 'recentchanges', 'rc_user_text', __METHOD__ );
+	if( !$info ) {
+		# None, so create
+		echo( "...index on ( rc_user_text, rc_timestamp ) not found; creating\n" );
+		dbsource( archive( 'patch-rc_user_text-index.sql' ) );
+	} else {
+		# Index seems to exist
+		echo( "...index on ( rc_user_text, rc_timestamp ) seems to be ok\n" );
+	}
+}
+
+function index_has_field($table, $index, $field) {
+	global $wgDatabase;
+	echo( "Checking if $table index $index includes field $field...\n" );
+	$info = $wgDatabase->indexInfo( $table, $index, __METHOD__ );
+	if( $info ) {
+		foreach($info as $row) {
+			if($row->Column_name == $field) {
+				echo( "...index $index on table $table seems to be ok\n" );
+				return true;
+			}
+		}
+	}
+	echo( "...index $index on table $table has no field $field; adding\n" );
+	return false;
+}
+
+function do_backlinking_indices_update() {
+	echo( "Checking for backlinking indices...\n" );
+	if (!index_has_field('pagelinks', 'pl_namespace', 'pl_from') ||
+		!index_has_field('templatelinks', 'tl_namespace', 'tl_from') ||
+		!index_has_field('imagelinks', 'il_to', 'il_from'))
+	{	
+		dbsource( archive( 'patch-backlinkindexes.sql' ) );
+	}
+}
+
+function do_stats_init() {
+	// Sometimes site_stats table is not properly populated.
+	global $wgDatabase;
+	echo "Checking site_stats row...";
+	$row = $wgDatabase->selectRow( 'site_stats', '*', array( 'ss_row_id' => 1 ), __METHOD__ );
+	if( $row === false ) {
+		echo "data is missing! rebuilding...\n";
+		
+		global $IP;
+		require_once "$IP/maintenance/initStats.inc";
+		wfInitStats();
+	} else {
+		echo "ok.\n";
+	}
+}
+
+function purge_cache() {
+	global $wgDatabase;
+	# We can't guarantee that the user will be able to use TRUNCATE,
+	# but we know that DELETE is available to us
+	echo( "Purging caches..." );
+	$wgDatabase->delete( 'objectcache', '*', __METHOD__ );
+	echo( "done.\n" );
+}
+
+function do_all_updates( $shared = false, $purge = true ) {
+	global $wgNewTables, $wgNewFields, $wgRenamedTables, $wgSharedDB, $wgDatabase, $wgDBtype, $IP;
+
+	$doUser = !$wgSharedDB || $shared;
+
+	if ($wgDBtype === 'postgres') {
+		do_postgres_updates();
+		return;
+	}
+
+	# Rename tables
+	foreach ( $wgRenamedTables as $tableRecord ) {
+		rename_table( $tableRecord[0], $tableRecord[1], $tableRecord[2] );
+	}
+
+	# Add missing tables
+	foreach ( $wgNewTables as $tableRecord ) {
+		add_table( $tableRecord[0], $tableRecord[1] );
+		flush();
+	}
+
+	# Add missing fields
+	foreach ( $wgNewFields as $fieldRecord ) {
+		if ( $fieldRecord[0] != 'user' || $doUser ) {
+			add_field( $fieldRecord[0], $fieldRecord[1], $fieldRecord[2] );
+		}
+		flush();
+	}
+
+	# Do schema updates which require special handling
+	do_interwiki_update(); flush();
+	do_index_update(); flush();
+	do_old_links_update(); flush();
+	do_image_name_unique_update(); flush();
+	do_watchlist_update(); flush();
+	if ( $doUser ) {
+		do_user_update(); flush();
+	}
+######	do_copy_newtalk_to_watchlist(); flush();
+	do_logging_encoding(); flush();
+
+	do_schema_restructuring(); flush();
+	do_inverse_timestamp(); flush();
+	do_text_id(); flush();
+	do_namespace_size(); flush();
+
+	do_pagelinks_update(); flush();
+	do_templatelinks_update(); flush(); // after pagelinks
+
+	do_drop_img_type(); flush();
+
+	if ( $doUser ) {
+		do_user_unique_update(); flush();
+	}
+	do_user_groups_update(); flush();
+
+	do_watchlist_null(); flush();
+
+	//do_image_index_update(); flush();
+
+	do_logging_timestamp_index(); flush();
+
+	do_page_random_update(); flush();
+	
+	do_rc_indices_update(); flush();
+
+	add_table( 'redirect', 'patch-redirect.sql' );
+
+	do_backlinking_indices_update(); flush();
+
+	do_restrictions_update(); flush ();
+
+	echo "Deleting old default messages (this may take a long time!)..."; flush();
+	deleteDefaultMessages();
+	echo "Done\n"; flush();
+	
+	do_stats_init(); flush();
+	
+	if( $purge ) {
+		purge_cache();
+		flush();
+	}
+}
+
+function archive($name) {
+	global $wgDBtype, $IP;
+	switch ($wgDBtype) {
+	case "postgres":
+		return "$IP/maintenance/postgres/archives/$name";
+	default:
+		return "$IP/maintenance/archives/$name";
+	}
+}
+
+function do_restrictions_update() {
+	# Adding page_restrictions table, obsoleting page.page_restrictions.
+	#  Migrating old restrictions to new table
+	# -- Andrew Garrett, January 2007.
+
+	global $wgDatabase;
+
+	$name = 'page_restrictions';
+	$patch = 'patch-page_restrictions.sql';
+	$patch2 = 'patch-page_restrictions_sortkey.sql';
+
+	if ( $wgDatabase->tableExists( $name ) ) {
+		echo "...$name table already exists.\n";
+	} else {
+		echo "Creating $name table...";
+		dbsource( archive($patch), $wgDatabase );
+		dbsource( archive($patch2), $wgDatabase );
+		echo "ok\n";
+
+		echo "Migrating old restrictions to new table...";
+
+		$res = $wgDatabase->select( 'page', array( 'page_id', 'page_restrictions' ), array("page_restrictions!=''", "page_restrictions!='edit=:move='"), __METHOD__ );
+
+		$count = 0;
+
+		while ($row = $wgDatabase->fetchObject($res) ) {
+			$count = ($count + 1) % 100;
+
+			if ($count == 0) {
+				if ( function_exists( 'wfWaitForSlaves' ) ) {
+					wfWaitForSlaves( 10 );
+				} else {
+					sleep( 1 );
+				}
+			}
+
+			# Figure out what the restrictions are..
+			$id = $row->page_id;
+			$flatrestrictions = explode( ':', $row->page_restrictions );
+
+			$restrictions = array ();
+			foreach( $flatrestrictions as $restriction ) {
+				$thisrestriction = explode( '=', $restriction, 2 );
+				if( count( $thisrestriction ) == 1 ) {
+					// Compatibility with old protections from before
+					// separate move protection was added.
+					list( $level ) = $thisrestriction;
+					if( $level ) {
+						$restrictions['edit'] = $level;
+						$restrictions['move'] = $level;
+					}
+				} else {
+					list( $type, $level ) = $thisrestriction;
+					if( $level ) {
+						$restrictions[$type] = $level;
+					}
+				}
+
+			$wgDatabase->update( 'page', array ( 'page_restrictions' => ''), array( 'page_id' => $id ), __METHOD__ );
+
+			}
+			
+			foreach( $restrictions as $type => $level ) {
+				$wgDatabase->insert( 'page_restrictions', array ( 'pr_page' => $id,
+											'pr_type' => $type,
+											'pr_level' => $level,
+											'pr_cascade' => 0 ),
+											__METHOD__ );
+			}
+		}
+		print "ok\n";
+	}
+	
+}
+
+function
+pg_describe_table($table)
+{
+global	$wgDatabase, $wgDBmwschema;
+	$q = <<<END
+SELECT attname, attnum FROM pg_namespace, pg_class, pg_attribute
+	WHERE pg_class.relnamespace = pg_namespace.oid 
+	  AND attrelid=pg_class.oid AND attnum > 0
+	  AND relname=%s AND nspname=%s
+END;
+	$res = $wgDatabase->query(sprintf($q,
+			$wgDatabase->addQuotes($table),
+			$wgDatabase->addQuotes($wgDBmwschema)));
+	if (!$res)
+		return null;
+
+	$cols = array();
+	while ($r = $wgDatabase->fetchRow($res)) {
+		$cols[] = array(	
+				"name" => $r[0],
+				"ord" => $r[1],
+			);
+	}
+	return $cols;
+}
+
+function
+pg_describe_index($idx)
+{
+global	$wgDatabase, $wgDBmwschema;
+
+	// first fetch the key (which is a list of columns ords) and
+	// the table the index applies to (an oid)
+	$q = <<<END
+SELECT indkey, indrelid FROM pg_namespace, pg_class, pg_index
+	WHERE nspname=%s
+	  AND pg_class.relnamespace = pg_namespace.oid
+	  AND relname=%s
+	  AND indexrelid=pg_class.oid
+END;
+	$res = $wgDatabase->query(sprintf($q,
+			$wgDatabase->addQuotes($wgDBmwschema),
+			$wgDatabase->addQuotes($idx)));
+	if (!$res)
+		return null;
+	if (!($r = $wgDatabase->fetchRow($res))) {
+		$wgDatabase->freeResult($res);
+		return null;
+	}
+
+	$indkey = $r[0];
+	$relid = intval($r[1]);
+	$indkeys = explode(" ", $indkey);
+	$wgDatabase->freeResult($res);
+
+	$colnames = array();
+	foreach ($indkeys as $rid) {
+		$query = <<<END
+SELECT attname FROM pg_class, pg_attribute
+	WHERE attrelid=$relid
+	  AND attnum=%d
+	  AND attrelid=pg_class.oid
+END;
+		$r2 = $wgDatabase->query(sprintf($query, $rid));
+		if (!$r2)
+			return null;
+		if (!($row2 = $wgDatabase->fetchRow($r2))) {
+			$wgDatabase->freeResult($r2);
+			return null;
+		}
+		$colnames[] = $row2[0];
+		$wgDatabase->freeResult($r2);
+	}
+
+	return $colnames;
+}
+
+function
+pg_index_exists($table, $index)
+{
+global	$wgDatabase, $wgDBmwschema;
+	$exists = $wgDatabase->selectField("pg_indexes", "indexname",
+			array(	"indexname" => $index,
+				"tablename" => $table,
+				"schemaname" => $wgDBmwschema));
+	return $exists === $index;
+}
+
+function
+pg_fkey_deltype($fkey)
+{
+global	$wgDatabase, $wgDBmwschema;
+	$q = <<<END
+SELECT confdeltype FROM pg_constraint, pg_namespace
+	WHERE connamespace=pg_namespace.oid
+	  AND nspname=%s
+	  AND conname=%s;
+END;
+	$r = $wgDatabase->query(sprintf($q,
+		$wgDatabase->addQuotes($wgDBmwschema),
+		$wgDatabase->addQuotes($fkey)));
+	if (!($row = $wgDatabase->fetchRow($r)))
+		return null;
+	return $row[0];
+}
+
+function
+pg_rule_def($table, $rule)
+{
+global	$wgDatabase, $wgDBmwschema;
+	$q = <<<END
+SELECT definition FROM pg_rules
+	WHERE schemaname = %s
+	  AND tablename = %s
+	  AND rulename = %s
+END;
+	$r = $wgDatabase->query(sprintf($q,
+			$wgDatabase->addQuotes($wgDBmwschema),
+			$wgDatabase->addQuotes($table),
+			$wgDatabase->addQuotes($rule)));
+	$row = $wgDatabase->fetchRow($r);
+	if (!$row)
+		return null;
+	$d = $row[0];
+	$wgDatabase->freeResult($r);
+	return $d;
+}
+
+function do_postgres_updates() {
+	global $wgDatabase, $wgVersion, $wgDBmwschema, $wgDBts2schema, $wgShowExceptionDetails, $wgDBuser;
+
+	$wgShowExceptionDetails = 1;
+
+	# Just in case their LocalSettings.php does not have this:
+	if ( !isset( $wgDBmwschema ))
+		$wgDBmwschema = 'mediawiki';
+
+	# Verify that this user is configured correctly
+	$safeuser = $wgDatabase->addQuotes($wgDBuser);
+	$SQL = "SELECT array_to_string(useconfig,'*') FROM pg_user WHERE usename = $safeuser";
+	$config = pg_fetch_result( $wgDatabase->doQuery( $SQL ), 0, 0 );
+	$conf = array();
+	foreach( explode( '*', $config ) as $c ) {
+		list( $x,$y ) = explode( '=', $c );
+		$conf[$x] = $y;
+	}
+	$newpath = array();
+	if( !array_key_exists( 'search_path', $conf ) or strpos( $conf['search_path'],$wgDBmwschema ) === false ) {
+		print "Adding in schema \"$wgDBmwschema\" to search_path for user \"$wgDBuser\"\n";
+		$newpath[$wgDBmwschema] = 1;
+	}
+	if( !array_key_exists( 'search_path', $conf ) or strpos( $conf['search_path'],$wgDBts2schema ) === false ) {
+		print "Adding in schema \"$wgDBts2schema\" to search_path for user \"$wgDBuser\"\n";
+		$newpath[$wgDBts2schema] = 1;
+	}
+	$searchpath = implode( ',', array_keys( $newpath ) );
+	if( strlen( $searchpath ) ) {
+		$wgDatabase->doQuery( "ALTER USER $wgDBuser SET search_path = $searchpath" );
+	}
+	$goodconf = array(
+		'client_min_messages' => 'error',
+		'DateStyle'           => 'ISO, YMD',
+		'TimeZone'            => 'GMT'
+	);
+	foreach( array_keys( $goodconf ) AS $key ) {
+		$value = $goodconf[$key];
+		if( !array_key_exists( $key, $conf ) or $conf[$key] !== $value ) {
+			print "Setting $key to '$value' for user \"$wgDBuser\"\n";
+			$wgDatabase->doQuery( "ALTER USER $wgDBuser SET $key = '$value'" );
+		}
+	}
+
+	$newsequences = array(
+		"log_log_id_seq",
+		"pr_id_val",
+	);
+
+	$newtables = array(
+		array("mediawiki_version", "patch-mediawiki_version.sql"),
+		array("mwuser",            "patch-mwuser.sql"),
+		array("pagecontent",       "patch-pagecontent.sql"),
+		array("querycachetwo",     "patch-querycachetwo.sql"),
+		array("page_restrictions", "patch-page_restrictions.sql"),
+		array("profiling",         "patch-profiling.sql"),
+		array("redirect",          "patch-redirect.sql"),
+	);
+
+	$newcols = array(
+		array("archive",       "ar_len",               "INTEGER"),
+		array("ipblocks",      "ipb_anon_only",        "CHAR NOT NULL DEFAULT '0'"),
+		array("ipblocks",      "ipb_create_account",   "CHAR NOT NULL DEFAULT '1'"),
+		array("ipblocks",      "ipb_deleted",          "INTEGER NOT NULL DEFAULT 0"),
+		array("ipblocks",      "ipb_enable_autoblock", "CHAR NOT NULL DEFAULT '1'"),
+		array("filearchive",   "fa_deleted",           "INTEGER NOT NULL DEFAULT 0"),
+		array("logging",       "log_deleted",          "INTEGER NOT NULL DEFAULT 0"),
+		array("logging",       "log_id",               "INTEGER NOT NULL PRIMARY KEY DEFAULT nextval('log_log_id_seq')"),
+		array("logging",       "log_params",           "TEXT"),
+		array("mwuser",        "user_editcount",       "INTEGER"),
+		array("mwuser",        "user_newpass_time",    "TIMESTAMPTZ"),
+		array("page_restrictions", "pr_id",            "INTEGER NOT NULL UNIQUE DEFAULT nextval('pr_id_val')"),
+		array("recentchanges", "rc_deleted",           "INTEGER NOT NULL DEFAULT 0"),
+		array("recentchanges", "rc_log_action",        "TEXT"),
+        array("recentchanges", "rc_log_type",          "TEXT"),
+        array("recentchanges", "rc_logid",             "INTEGER NOT NULL DEFAULT 0"),
+		array("recentchanges", "rc_new_len",           "INTEGER"),
+		array("recentchanges", "rc_old_len",           "INTEGER"),
+		array("recentchanges", "rc_params",            "TEXT"),
+		array("revision",      "rev_len",              "INTEGER"),
+	);
+
+
+	# table, column, desired type, USING clause if needed
+	$typechanges = array(
+		array("image",        "img_size",        "int4",  ""),
+		array("image",        "img_width",       "int4",  ""),
+		array("image",        "img_height",      "int4",  ""),
+		array("ipblocks",     "ipb_address",     "text", "ipb_address::text"),
+		array("math",         "math_inputhash",  "bytea", "decode(math_inputhash,'escape')"),
+		array("math",         "math_outputhash", "bytea", "decode(math_outputhash,'escape')"),
+		array("oldimage",     "oi_size",         "int4",  ""),
+		array("oldimage",     "oi_width",        "int4",  ""),
+		array("oldimage",     "oi_height",       "int4",  ""),
+		array("user_newtalk", "user_ip",         "text", "host(user_ip)"),
+	);
+
+	$newindexes = array(
+		array("revision", "rev_text_id_idx", "patch-rev_text_id_idx.sql")
+	);
+
+	$newrules = array(
+	);
+
+	foreach ($newsequences as $ns) {
+		if ($wgDatabase->sequenceExists($ns)) {
+			echo "... sequence $ns already exists\n";
+			continue;
+		}
+
+		echo "... create sequence $ns\n";
+		$wgDatabase->query("CREATE SEQUENCE $ns");
+	}
+
+	foreach ($newtables as $nt) {
+		if ($wgDatabase->tableExists($nt[0])) {
+			echo "... table $nt[0] already exists\n";
+			continue;
+		}
+
+		echo "... create table $nt[0]\n";
+		dbsource(archive($nt[1]));
+	}
+
+	## Needed before newcols
+	if ($wgDatabase->tableExists("archive2")) {
+		echo "... convert archive2 back to normal archive table\n";
+		if ($wgDatabase->ruleExists("archive", "archive_insert")) {
+			echo "...   drop rule archive_insert\n";
+			$wgDatabase->query("DROP RULE archive_insert ON archive");
+		}
+		if ($wgDatabase->ruleExists("archive", "archive_delete")) {
+			echo "...   drop rule archive_delete\n";
+			$wgDatabase->query("DROP RULE archive_delete ON archive");
+		}
+
+		dbsource(archive("patch-remove-archive2.sql"));
+	} else
+		echo "... obsolete archive2 not present\n";
+
+	foreach ($newcols as $nc) {
+		$fi = $wgDatabase->fieldInfo($nc[0], $nc[1]);
+		if (!is_null($fi)) {
+			echo "... column $nc[0].$nc[1] already exists\n";
+			continue;
+		}
+
+		echo "... add column $nc[0].$nc[1]\n";
+		$wgDatabase->query("ALTER TABLE $nc[0] ADD $nc[1] $nc[2]");
+	}
+
+	foreach ($typechanges as $tc) {
+		$fi = $wgDatabase->fieldInfo($tc[0], $tc[1]);
+		if (is_null($fi)) {
+			echo "... error: expected column $tc[0].$tc[1] to exist\n";
+			exit(1);
+		}
+
+		if ($fi->type() === $tc[2])
+			echo "... $tc[0].$tc[1] is already $tc[2]\n";
+		else {
+			echo "... change $tc[0].$tc[1] from {$fi->type()} to $tc[2]\n";
+			$sql = "ALTER TABLE $tc[0] ALTER $tc[1] TYPE $tc[2]";
+			if (strlen($tc[3])) {
+				$sql .= " USING $tc[3]";
+			}
+			$sql .= ";\nCOMMIT;\n";
+			$wgDatabase->query($sql);
+		}
+	}
+
+	foreach ($newindexes as $ni) {
+		if (pg_index_exists($ni[0], $ni[1])) {
+			echo "... index $ni[1] on $ni[0] already exists\n";
+			continue;
+		}
+		dbsource(archive($ni[2]));
+	}
+
+	foreach ($newrules as $nr) {
+		if ($wgDatabase->ruleExists($nr[0], $nr[1])) {
+			echo "... rule $nr[1] on $nr[0] already exists\n";
+			continue;
+		}
+		dbsource(archive($nr[2]));
+	}
+
+	if (!$wgDatabase->triggerExists("page", "page_deleted")) {
+		echo "... create page_deleted trigger\n";
+		dbsource(archive('patch-page_deleted.sql'));
+	}
+
+	$fi = $wgDatabase->fieldInfo("recentchanges", "rc_cur_id");
+	if (!$fi->nullable()) {
+		echo "... remove NOT NULL constraint on recentchanges.rc_cur_id\n";
+		dbsource(archive('patch-rc_cur_id-not-null.sql'));
+	}
+
+	$pu = pg_describe_index("pagelink_unique");
+	if (!is_null($pu) && ($pu[0] != "pl_from" || $pu[1] != "pl_namespace" || $pu[2] != "pl_title")) {
+		echo "... dropping obsolete pagelink_unique index\n";
+		$wgDatabase->query("DROP INDEX pagelink_unique");
+		$pu = null;
+	} else
+		echo "... obsolete pagelink_unique index not present\n";
+
+	if (is_null($pu)) {
+		echo "... adding new pagelink_unique index\n";
+		$wgDatabase->query("CREATE UNIQUE INDEX pagelink_unique ON pagelinks (pl_from,pl_namespace,pl_title)");
+	} else
+		echo "... already have current pagelink_unique index\n";
+
+	if (pg_fkey_deltype("revision_rev_user_fkey") == 'r') {
+		echo "... revision_rev_user_fkey is already ON DELETE RESTRICT\n";
+	} else {
+		echo "... change revision_rev_user_fkey to ON DELETE RESTRICT\n";
+		dbsource(archive('patch-revision_rev_user_fkey.sql'));
+	}
+
+	if (is_null($wgDatabase->fieldInfo("archive", "ar_deleted"))) {
+		echo "... add archive.ar_deleted\n";
+		dbsource(archive("patch-archive-ar_deleted.sql"));
+	} else
+		echo "... archive.ar_deleted already exists\n";
+
+	return;
+}
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/upgrade1_5.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/upgrade1_5.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/upgrade1_5.php	(revision 1280)
@@ -0,0 +1,24 @@
+<?php
+
+// Alternate 1.4 -> 1.5 schema upgrade
+// This does only the main tables + UTF-8
+// and is designed to allow upgrades to interleave
+// with other updates on the replication stream so
+// that large wikis can be upgraded without disrupting
+// other services.
+//
+// Note: this script DOES NOT apply every update, nor
+// will it probably handle much older versions, etc.
+// Run this, FOLLOWED BY update.php, for upgrading
+// from 1.4.5 release to 1.5.
+
+$options = array( 'step', 'noimages' );
+
+require_once( 'commandLine.inc' );
+require_once( 'FiveUpgrade.inc' );
+
+$upgrade = new FiveUpgrade();
+$step = isset( $options['step'] ) ? $options['step'] : null;
+$upgrade->upgrade( $step );
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/userDupes.inc
===================================================================
--- /MediaWiki/branches/1.11/maintenance/userDupes.inc	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/userDupes.inc	(revision 1280)
@@ -0,0 +1,326 @@
+<?php
+# Copyright (C) 2005 Brion Vibber <brion@pobox.com>
+# http://www.mediawiki.org/
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+# http://www.gnu.org/copyleft/gpl.html
+
+/**
+ * Look for duplicate user table entries and optionally prune them.
+ */
+class UserDupes {
+	var $db;
+	var $reassigned;
+	var $trimmed;
+	var $failed;
+
+	function UserDupes( &$database ) {
+		$this->db =& $database;
+	}
+
+	/**
+	 * Check if this database's user table has already had a unique
+	 * user_name index applied.
+	 * @return bool
+	 */
+	function hasUniqueIndex() {
+		$fname = 'UserDupes::hasUniqueIndex';
+		$info = $this->db->indexInfo( 'user', 'user_name', $fname );
+		if( !$info ) {
+			echo "WARNING: doesn't seem to have user_name index at all!\n";
+			return false;
+		}
+
+		# Confusingly, 'Non_unique' is 0 for *unique* indexes,
+		# and 1 for *non-unique* indexes. Pass the crack, MySQL,
+		# it's obviously some good stuff!
+		return ( $info[0]->Non_unique == 0 );
+	}
+
+	/**
+	 * Checks the database for duplicate user account records
+	 * and remove them in preparation for application of a unique
+	 * index on the user_name field. Returns true if the table is
+	 * clean or if duplicates have been resolved automatically.
+	 *
+	 * May return false if there are unresolvable problems.
+	 * Status information will be echo'd to stdout.
+	 *
+	 * @return bool
+	 */
+	function clearDupes() {
+		return $this->checkDupes( true );
+	}
+
+	/**
+	 * Checks the database for duplicate user account records
+	 * in preparation for application of a unique index on the
+	 * user_name field. Returns true if the table is clean or
+	 * if duplicates can be resolved automatically.
+	 *
+	 * Returns false if there are duplicates and resolution was
+	 * not requested. (If doing resolution, edits may be reassigned.)
+	 * Status information will be echo'd to stdout.
+	 *
+	 * @param bool $doDelete pass true to actually remove things
+	 *                       from the database; false to just check.
+	 * @return bool
+	 */
+	function checkDupes( $doDelete = false ) {
+		if( $this->hasUniqueIndex() ) {
+			echo wfWikiID()." already has a unique index on its user table.\n";
+			return true;
+		}
+
+		$this->lock();
+
+		echo "Checking for duplicate accounts...\n";
+		$dupes = $this->getDupes();
+		$count = count( $dupes );
+
+		echo "Found $count accounts with duplicate records on ".wfWikiID().".\n";
+		$this->trimmed    = 0;
+		$this->reassigned = 0;
+		$this->failed     = 0;
+		foreach( $dupes as $name ) {
+			$this->examine( $name, $doDelete );
+		}
+
+		$this->unlock();
+
+		echo "\n";
+
+		if( $this->reassigned > 0 ) {
+			if( $doDelete ) {
+				echo "$this->reassigned duplicate accounts had edits reassigned to a canonical record id.\n";
+			} else {
+				echo "$this->reassigned duplicate accounts need to have edits reassigned.\n";
+			}
+		}
+
+		if( $this->trimmed > 0 ) {
+			if( $doDelete ) {
+				echo "$this->trimmed duplicate user records were deleted from ".wfWikiID().".\n";
+			} else {
+				echo "$this->trimmed duplicate user accounts were found on ".wfWikiID()." which can be removed safely.\n";
+			}
+		}
+
+		if( $this->failed > 0 ) {
+			echo "Something terribly awry; $this->failed duplicate accounts were not removed.\n";
+			return false;
+		}
+
+		if( $this->trimmed == 0 || $doDelete ) {
+			echo "It is now safe to apply the unique index on user_name.\n";
+			return true;
+		} else {
+			echo "Run this script again with the --fix option to automatically delete them.\n";
+			return false;
+		}
+	}
+
+	/**
+	 * We don't want anybody to mess with our stuff...
+	 * @access private
+	 */
+	function lock() {
+		$fname = 'UserDupes::lock';
+		if( $this->newSchema() ) {
+			$set = array( 'user', 'revision' );
+		} else {
+			$set = array( 'user', 'cur', 'old' );
+		}
+		$names = array_map( array( $this, 'lockTable' ), $set );
+		$tables = implode( ',', $names );
+
+		$this->db->query( "LOCK TABLES $tables", $fname );
+	}
+
+	function lockTable( $table ) {
+		return $this->db->tableName( $table ) . ' WRITE';
+	}
+
+	/**
+	 * @return bool
+	 * @access private
+	 */
+	function newSchema() {
+		return class_exists( 'Revision' );
+	}
+
+	/**
+	 * @access private
+	 */
+	function unlock() {
+		$fname = 'UserDupes::unlock';
+		$this->db->query( "UNLOCK TABLES", $fname );
+	}
+
+	/**
+	 * Grab usernames for which multiple records are present in the database.
+	 * @return array
+	 * @access private
+	 */
+	function getDupes() {
+		$fname = 'UserDupes::listDupes';
+		$user = $this->db->tableName( 'user' );
+		$result = $this->db->query(
+			 "SELECT user_name,COUNT(*) AS n
+			    FROM $user
+			GROUP BY user_name
+			  HAVING n > 1", $fname );
+
+		$list = array();
+		while( $row = $this->db->fetchObject( $result ) ) {
+			$list[] = $row->user_name;
+		}
+		$this->db->freeResult( $result );
+
+		return $list;
+	}
+
+	/**
+	 * Examine user records for the given name. Try to see which record
+	 * will be the one that actually gets used, then check remaining records
+	 * for edits. If the dupes have no edits, we can safely remove them.
+	 * @param string $name
+	 * @param bool $doDelete
+	 * @access private
+	 */
+	function examine( $name, $doDelete ) {
+		$fname = 'UserDupes::listDupes';
+		$result = $this->db->select( 'user',
+			array( 'user_id' ),
+			array( 'user_name' => $name ),
+			$fname );
+
+		$firstRow = $this->db->fetchObject( $result );
+		$firstId  = $firstRow->user_id;
+		echo "Record that will be used for '$name' is user_id=$firstId\n";
+
+		while( $row = $this->db->fetchObject( $result ) ) {
+			$dupeId = $row->user_id;
+			echo "... dupe id $dupeId: ";
+			$edits = $this->editCount( $dupeId );
+			if( $edits > 0 ) {
+				$this->reassigned++;
+				echo "has $edits edits! ";
+				if( $doDelete ) {
+					$this->reassignEdits( $dupeId, $firstId );
+					$newEdits = $this->editCount( $dupeId );
+					if( $newEdits == 0 ) {
+						echo "confirmed cleaned. ";
+					} else {
+						$this->failed++;
+						echo "WARNING! $newEdits remaining edits for $dupeId; NOT deleting user.\n";
+						continue;
+					}
+				} else {
+					echo "(will need to reassign edits on fix)";
+				}
+			} else {
+				echo "ok, no edits. ";
+			}
+			$this->trimmed++;
+			if( $doDelete ) {
+				$this->trimAccount( $dupeId );
+			}
+			echo "\n";
+		}
+		$this->db->freeResult( $result );
+	}
+
+	/**
+	 * Count the number of edits attributed to this user.
+	 * Does not currently check log table or other things
+	 * where it might show up...
+	 * @param int $userid
+	 * @return int
+	 * @access private
+	 */
+	function editCount( $userid ) {
+		if( $this->newSchema() ) {
+			return $this->editCountOn( 'revision', 'rev_user', $userid );
+		} else {
+			return $this->editCountOn( 'cur', 'cur_user', $userid ) +
+				$this->editCountOn( 'old', 'old_user', $userid );
+		}
+	}
+
+	/**
+	 * Count the number of hits on a given table for this account.
+	 * @param string $table
+	 * @param string $field
+	 * @param int $userid
+	 * @return int
+	 * @access private
+	 */
+	function editCountOn( $table, $field, $userid ) {
+		$fname = 'UserDupes::editCountOn';
+		return intval( $this->db->selectField(
+			$table,
+			'COUNT(*)',
+			array( $field => $userid ),
+			$fname ) );
+	}
+
+	/**
+	 * @param int $from
+	 * @param int $to
+	 * @access private
+	 */
+	function reassignEdits( $from, $to ) {
+		$set = $this->newSchema()
+			? array( 'revision' => 'rev_user' )
+			: array( 'cur' => 'cur_user', 'old' => 'old_user' );
+		foreach( $set as $table => $field ) {
+			$this->reassignEditsOn( $table, $field, $from, $to );
+		}
+	}
+
+	/**
+	 * @param string $table
+	 * @param string $field
+	 * @param int $from
+	 * @param int $to
+	 * @access private
+	 */
+	function reassignEditsOn( $table, $field, $from, $to ) {
+		$fname = 'UserDupes::reassignEditsOn';
+		echo "reassigning on $table... ";
+		$this->db->update( $table,
+			array( $field => $to ),
+			array( $field => $from ),
+			$fname );
+		echo "ok. ";
+	}
+
+	/**
+	 * Remove a user account line.
+	 * @param int $userid
+	 * @access private
+	 */
+	function trimAccount( $userid ) {
+		$fname = 'UserDupes::trimAccount';
+		echo "deleting...";
+		$this->db->delete( 'user', array( 'user_id' => $userid ), $fname );
+		echo " ok";
+	}
+
+}
+
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/userDupes.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/userDupes.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/userDupes.php	(revision 1280)
@@ -0,0 +1,41 @@
+<?php
+# Copyright (C) 2005 Brion Vibber <brion@pobox.com>
+# http://www.mediawiki.org/
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+# http://www.gnu.org/copyleft/gpl.html
+
+$options = array( 'fix' );
+
+/** */
+require_once( 'commandLine.inc' );
+require_once( 'maintenance/userDupes.inc' );
+
+$wgTitle = Title::newFromText( 'Dupe user entry cleanup script' );
+
+$fix = isset( $options['fix'] );
+$dbw = wfGetDB( DB_MASTER );
+$duper = new UserDupes( $dbw );
+$retval = $duper->checkDupes( $fix );
+
+if( $retval ) {
+	echo "\nLooks good!\n";
+	exit( 0 );
+} else {
+	echo "\nOh noeees\n";
+	exit( -1 );
+}
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/userOptions.inc
===================================================================
--- /MediaWiki/branches/1.11/maintenance/userOptions.inc	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/userOptions.inc	(revision 1280)
@@ -0,0 +1,237 @@
+<?php
+// Options we will use
+$options = array( 'list', 'nowarn', 'quiet', 'usage', 'dry' );
+$optionsWithArgs = array( 'old', 'new' );
+
+require_once( 'commandLine.inc' );
+
+class userOptions {
+	public $mQuick;
+	public $mQuiet;
+	public $mDry;
+	public $mAnOption;
+	public $mOldValue;
+	public $mNewValue;
+
+	private $mMode, $mReady ;
+
+	/** Constructor. Will show usage and exit if script options are not correct */
+	function __construct( $opts, $args ) {
+		if( !$this->checkOpts( $opts, $args ) ) {
+			userOptions::showUsageAndExit();
+		} else {
+			$this->mReady = $this->initializeOpts( $opts, $args );
+		}
+	}
+
+
+	/** This is used to check options. Only needed on construction */
+	private function checkOpts( $opts, $args ) {
+		// The three possible ways to run the script:
+		$list   = isset( $opts['list'] );
+		$usage  = isset( $opts['usage'] ) && (count($args) <= 1);
+		$change = isset( $opts['old']) && isset($opts['new']) && (count($args) <= 1) ;
+
+		// We want only one of them
+		$isValid = (($list + $usage + $change) == 1);
+
+		return $isValid;
+	}
+
+	/** load script options in the object */
+	private function initializeOpts( $opts, $args ) {
+
+		$this->mQuick = isset( $opts['nowarn'] );
+		$this->mQuiet = isset( $opts['quiet'] );
+		$this->mDry   = isset( $opts['dry'] );
+
+		// Set object properties, specially 'mMode' used by run()
+		if( isset($opts['list']) ) {
+			$this->mMode = 'LISTER' ;
+		} elseif( isset($opts['usage']) ) {
+			$this->mMode = 'USAGER' ;
+			$this->mAnOption = isset($args[0]) ? $args[0] : false ;
+		} elseif( isset($opts['old']) && isset($opts['new']) ) {
+			$this->mMode = 'CHANGER' ;
+			$this->mOldValue = $opts['old'] ;
+			$this->mNewValue = $opts['new'] ;
+			$this->mAnOption = $args[0];
+		} else {
+			die("There is a bug in the software, this should never happen\n");
+		}
+
+		return true;
+	}
+
+	// Dumb stuff to run a mode.
+	public function run() {
+		if(!$this->mReady ) {
+			return false;
+		}
+
+		$this->{$this->mMode}( );
+
+	}
+
+	#
+	# Modes.
+	# 
+
+	/** List default options and their value */
+	private function LISTER( ) {
+		$def = User::getDefaultOptions();
+		ksort($def);
+		$maxOpt = 0;
+		foreach( $def as $opt => $value ) {
+			$maxOpt = max( $maxOpt, strlen($opt) );
+		}
+		foreach( $def as $opt => $value ) {
+			printf( "%-{$maxOpt}s: %s\n", $opt, $value );
+		}
+	}
+
+	/** List options usage */
+	private function USAGER( ) {
+		$ret = array();
+		$defaultOptions = User::getDefaultOptions();
+
+		// We list user by user_id from one of the slave database
+		$dbr = wfGetDB( DB_SLAVE );
+		$result = $dbr->select( 'user',
+			array( 'user_id' ),
+			array(),
+			__METHOD__
+			);
+
+		while( $id = $dbr->fetchObject( $result ) ) {
+
+			$user = User::newFromId( $id->user_id );
+
+			// Get the options and update stats
+			foreach( $defaultOptions as $name => $defaultValue ) {
+				$userValue = $user->getOption( $name );
+				if( $userValue <> $defaultValue ) {
+					@$ret[$name][$userValue]++;
+				}
+			}
+		}
+
+		foreach( $ret as $optionName => $usageStats ) {
+			print "Usage for <$optionName> (default: '{$defaultOptions[$optionName]}'):\n";
+			foreach( $usageStats as $value => $count ) {
+				print " $count user(s): '$value'\n";
+			}
+			print "\n";
+		}
+	}
+
+
+	/** Change our users options */
+	private function CHANGER( ) {
+		$this->warn();
+
+		// We list user by user_id from one of the slave database
+		$dbr = wfGetDB( DB_SLAVE );
+		$result = $dbr->select( 'user',
+			array( 'user_id' ),
+			array(),
+			__METHOD__
+			);
+
+		while( $id = $dbr->fetchObject( $result ) ) {
+
+			$user = User::newFromId( $id->user_id );
+
+			$curValue = $user->getOption( $this->mAnOption );
+			$username = $user->getName();
+
+			if( $curValue == $this->mOldValue ) {
+
+				if(!$this->mQuiet) {
+					print "Setting {$this->mAnOption} for $username from '{$this->mOldValue}' to '{$this->mNewValue}'): ";
+				}
+
+				// Change value 
+				$user->setOption( $this->mAnOption, $this->mNewValue );
+
+				// Will not save the settings if run with --dry
+				if(!$this->mDry) {
+					$user->saveSettings();
+				}
+				if( !$this->mQuiet) { print " OK\n"; }
+
+			} elseif( !$this->mQuiet ) {
+				print "Not changing '$username' using <{$this->mAnOption}> = '$curValue'\n";
+			}
+		}
+	}
+
+
+	/** Return an array of option names */
+	public static function getDefaultOptionsNames() {
+		$def = User::getDefaultOptions();
+		$ret = array();
+		foreach( $def as $optname => $defaultValue) {
+			array_push( $ret, $optname );
+		}
+		return $ret;
+	}
+
+
+	#
+	# Helper methods
+	#
+
+	public static function showUsageAndExit() {
+print <<<USAGE
+
+This script pass through all users and change one of their options.
+The new option is NOT validated.
+
+Usage:
+    php userOptions.php --list
+    php userOptions.php <user option> --usage
+    php userOptions.php [options] <user option> --old <old value> --new <new value>
+
+Switchs:
+    --list : list available user options and their default value
+
+    --usage <option name> : report statistics about an option
+
+    --old <old value> : the value to look for
+    --new <new value> : new value to update users with
+
+Options:
+    --nowarn: hides the 5 seconds warning
+    --quiet : do not print what is happening
+    --dry   : do not save user settings back to database
+
+USAGE;
+    exit(0);
+	}
+
+	/** The warning message and countdown */
+	public function warn() {
+
+		if( $this->mQuick ) {
+			return true;
+		}
+
+print <<<WARN
+The script is about to change the skin for ALL USERS in the database.
+Users with option <$this->mAnOption> = '$this->mOldValue' will be made to use '$this->mNewValue'.
+
+Abort with control-c in the next five seconds....
+WARN;
+		require('counter.php');
+		for ($i=6;$i>=1;) {
+			print_c($i, --$i);
+			sleep(1);
+		}
+		print "\n";
+
+		return true;
+	}
+
+}
+?>
Index: /MediaWiki/branches/1.11/maintenance/userOptions.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/userOptions.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/userOptions.php	(revision 1280)
@@ -0,0 +1,21 @@
+<?php
+/**
+ * Script to change users skins on the fly.
+ * This is for at least MediaWiki 1.10alpha (r19611) and have not been
+ * tested with previous versions. It should probably work with 1.7+.
+ *
+ * Made on an original idea by Fooey (freenode)
+ *
+ * @author Ashar Voultoiz <hashar@altern.org>
+ */
+
+// This is a command line script, load tools and parse args
+require_once( 'userOptions.inc' );
+
+// Load up our tool system, exit with usage() if options are not fine
+$uo = new userOptions( $options, $args );
+
+$uo->run();
+
+print "Done.\n";
+?>
Index: /MediaWiki/branches/1.11/maintenance/users.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/users.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/users.sql	(revision 1280)
@@ -0,0 +1,12 @@
+-- SQL script to create required database users with proper
+-- access rights.  This is run from the installation script
+-- which replaces the password variables with their values
+-- from local settings.
+--
+
+GRANT DELETE,INSERT,SELECT,UPDATE,CREATE TEMPORARY TABLES ON `{$wgDBname}`.*
+ TO '{$wgDBuser}'@'%' IDENTIFIED BY '{$wgDBpassword}';
+GRANT DELETE,INSERT,SELECT,UPDATE,CREATE TEMPORARY TABLES ON `{$wgDBname}`.*
+ TO '{$wgDBuser}'@localhost IDENTIFIED BY '{$wgDBpassword}';
+GRANT DELETE,INSERT,SELECT,UPDATE,CREATE TEMPORARY TABLES ON `{$wgDBname}`.*
+ TO '{$wgDBuser}'@localhost.localdomain IDENTIFIED BY '{$wgDBpassword}';
Index: /MediaWiki/branches/1.11/maintenance/waitForSlave.php
===================================================================
--- /MediaWiki/branches/1.11/maintenance/waitForSlave.php	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/waitForSlave.php	(revision 1280)
@@ -0,0 +1,16 @@
+<?php
+require_once( "commandLine.inc" );
+
+# Don't wait for benet
+foreach ( $wgLoadBalancer->mServers as $i => $server ) {
+	if ( $server['host'] == '10.0.0.29' ) {
+		unset($wgLoadBalancer->mServers[$i]);
+	}
+}
+if ( isset( $args[0] ) ) {
+	wfWaitForSlaves($args[0]);
+} else {
+	wfWaitForSlaves(10);
+}
+
+?>
Index: /MediaWiki/branches/1.11/maintenance/wikipedia-interwiki.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/wikipedia-interwiki.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/wikipedia-interwiki.sql	(revision 1280)
@@ -0,0 +1,237 @@
+-- For convenience, here are the *in-project* interwiki prefixes
+-- for Wikipedia.
+
+REPLACE INTO /*$wgDBprefix*/interwiki (iw_prefix,iw_url,iw_local) VALUES
+-- Non-Wikipedia sites:
+('q','http://en.wikiquote.org/wiki/$1',1),
+('b','http://en.wikibooks.org/wiki/$1',1),
+('n','http://en.wikinews.org/wiki/$1',1),
+('meta','http://meta.wikimedia.org/wiki/$1',1),
+('m','http://meta.wikimedia.org/wiki/$1',1),
+-- An alphabetical list of Wikipedia sites:
+('aa','http://aa.wikipedia.org/wiki/$1',1),
+('ab','http://ab.wikipedia.org/wiki/$1',1),
+('af','http://af.wikipedia.org/wiki/$1',1),
+('ak','http://ak.wikipedia.org/wiki/$1',1),
+('als','http://als.wikipedia.org/wiki/$1',1),
+('am','http://am.wikipedia.org/wiki/$1',1),
+('ang','http://ang.wikipedia.org/wiki/$1',1),
+('an','http://an.wikipedia.org/wiki/$1',1),
+('arc','http://arc.wikipedia.org/wiki/$1',1),
+('ar','http://ar.wikipedia.org/wiki/$1',1),
+('as','http://as.wikipedia.org/wiki/$1',1),
+('ast','http://ast.wikipedia.org/wiki/$1',1),
+('av','http://av.wikipedia.org/wiki/$1',1),
+('ay','http://ay.wikipedia.org/wiki/$1',1),
+('az','http://az.wikipedia.org/wiki/$1',1),
+('ba','http://ba.wikipedia.org/wiki/$1',1),
+('bar','http://bar.wikipedia.org/wiki/$1',1),
+('bat-smg','http://bat-smg.wikipedia.org/wiki/$1',1),
+('be','http://be.wikipedia.org/wiki/$1',1),
+('bg','http://bg.wikipedia.org/wiki/$1',1),
+('bh','http://bh.wikipedia.org/wiki/$1',1),
+('bi','http://bi.wikipedia.org/wiki/$1',1),
+('bm','http://bm.wikipedia.org/wiki/$1',1),
+('bn','http://bn.wikipedia.org/wiki/$1',1),
+('bo','http://bo.wikipedia.org/wiki/$1',1),
+('br','http://br.wikipedia.org/wiki/$1',1),
+('bs','http://bs.wikipedia.org/wiki/$1',1),
+('ca','http://ca.wikipedia.org/wiki/$1',1),
+('ce','http://ce.wikipedia.org/wiki/$1',1),
+('ch','http://ch.wikipedia.org/wiki/$1',1),
+('cho','http://cho.wikipedia.org/wiki/$1',1),
+('chr','http://chr.wikipedia.org/wiki/$1',1),
+('chy','http://chy.wikipedia.org/wiki/$1',1),
+('co','http://co.wikipedia.org/wiki/$1',1),
+('cr','http://cr.wikipedia.org/wiki/$1',1),
+('csb','http://csb.wikipedia.org/wiki/$1',1),
+('cs','http://cs.wikipedia.org/wiki/$1',1),
+('cu','http://cu.wikipedia.org/wiki/$1',1),
+('cv','http://cv.wikipedia.org/wiki/$1',1),
+('cy','http://cy.wikipedia.org/wiki/$1',1),
+('da','http://da.wikipedia.org/wiki/$1',1),
+('de','http://de.wikipedia.org/wiki/$1',1),
+('dk','http://da.wikipedia.org/wiki/$1',1),
+('dv','http://dv.wikipedia.org/wiki/$1',1),
+('dz','http://dz.wikipedia.org/wiki/$1',1),
+('ee','http://ee.wikipedia.org/wiki/$1',1),
+('el','http://el.wikipedia.org/wiki/$1',1),
+('en','http://en.wikipedia.org/wiki/$1',1),
+('eo','http://eo.wikipedia.org/wiki/$1',1),
+('es','http://es.wikipedia.org/wiki/$1',1),
+('et','http://et.wikipedia.org/wiki/$1',1),
+('eu','http://eu.wikipedia.org/wiki/$1',1),
+('fa','http://fa.wikipedia.org/wiki/$1',1),
+('ff','http://ff.wikipedia.org/wiki/$1',1),
+('fi','http://fi.wikipedia.org/wiki/$1',1),
+('fj','http://fj.wikipedia.org/wiki/$1',1),
+('fo','http://fo.wikipedia.org/wiki/$1',1),
+('fr','http://fr.wikipedia.org/wiki/$1',1),
+('frp','http://frp.wikipedia.org/wiki/$1',1),
+('fur','http://fur.wikipedia.org/wiki/$1',1),
+('fy','http://fy.wikipedia.org/wiki/$1',1),
+('ga','http://ga.wikipedia.org/wiki/$1',1),
+('gd','http://gd.wikipedia.org/wiki/$1',1),
+('gl','http://gl.wikipedia.org/wiki/$1',1),
+('gn','http://gn.wikipedia.org/wiki/$1',1),
+('got','http://got.wikipedia.org/wiki/$1',1),
+('gu','http://gu.wikipedia.org/wiki/$1',1),
+('gv','http://gv.wikipedia.org/wiki/$1',1),
+('ha','http://ha.wikipedia.org/wiki/$1',1),
+('haw','http://haw.wikipedia.org/wiki/$1',1),
+('he','http://he.wikipedia.org/wiki/$1',1),
+('hi','http://hi.wikipedia.org/wiki/$1',1),
+('ho','http://ho.wikipedia.org/wiki/$1',1),
+('hr','http://hr.wikipedia.org/wiki/$1',1),
+('ht','http://ht.wikipedia.org/wiki/$1',1),
+('hu','http://hu.wikipedia.org/wiki/$1',1),
+('hy','http://hy.wikipedia.org/wiki/$1',1),
+('hz','http://hz.wikipedia.org/wiki/$1',1),
+('ia','http://ia.wikipedia.org/wiki/$1',1),
+('id','http://id.wikipedia.org/wiki/$1',1),
+('ie','http://ie.wikipedia.org/wiki/$1',1),
+('ig','http://ig.wikipedia.org/wiki/$1',1),
+('ii','http://ii.wikipedia.org/wiki/$1',1),
+('ik','http://ik.wikipedia.org/wiki/$1',1),
+('ilo','http://ilo.wikipedia.org/wiki/$1',1),
+('io','http://io.wikipedia.org/wiki/$1',1),
+('is','http://is.wikipedia.org/wiki/$1',1),
+('it','http://it.wikipedia.org/wiki/$1',1),
+('iu','http://iu.wikipedia.org/wiki/$1',1),
+('ja','http://ja.wikipedia.org/wiki/$1',1),
+('jbo','http://jbo.wikipedia.org/wiki/$1',1),
+('jv','http://jv.wikipedia.org/wiki/$1',1),
+('ka','http://ka.wikipedia.org/wiki/$1',1),
+('kg','http://kg.wikipedia.org/wiki/$1',1),
+('ki','http://ki.wikipedia.org/wiki/$1',1),
+('kj','http://kj.wikipedia.org/wiki/$1',1),
+('kk','http://kk.wikipedia.org/wiki/$1',1),
+('kl','http://kl.wikipedia.org/wiki/$1',1),
+('km','http://km.wikipedia.org/wiki/$1',1),
+('kn','http://kn.wikipedia.org/wiki/$1',1),
+('ko','http://ko.wikipedia.org/wiki/$1',1),
+('kr','http://kr.wikipedia.org/wiki/$1',1),
+('ks','http://ks.wikipedia.org/wiki/$1',1),
+('ku','http://ku.wikipedia.org/wiki/$1',1),
+('kv','http://kv.wikipedia.org/wiki/$1',1),
+('kw','http://kw.wikipedia.org/wiki/$1',1),
+('ky','http://ky.wikipedia.org/wiki/$1',1),
+('lad','http://lad.wikipedia.org/wiki/$1',1),
+('la','http://la.wikipedia.org/wiki/$1',1),
+('lb','http://lb.wikipedia.org/wiki/$1',1),
+('lg','http://lg.wikipedia.org/wiki/$1',1),
+('li','http://li.wikipedia.org/wiki/$1',1),
+('lmo','http://lmo.wikipedia.org/wiki/$1',1),
+('ln','http://ln.wikipedia.org/wiki/$1',1),
+('lo','http://lo.wikipedia.org/wiki/$1',1),
+('lt','http://lt.wikipedia.org/wiki/$1',1),
+('lv','http://lv.wikipedia.org/wiki/$1',1),
+('mg','http://mg.wikipedia.org/wiki/$1',1),
+('mh','http://mh.wikipedia.org/wiki/$1',1),
+('mi','http://mi.wikipedia.org/wiki/$1',1),
+('minnan','http://zh-min-nan.wikipedia.org/wiki/$1',1),
+('mk','http://mk.wikipedia.org/wiki/$1',1),
+('ml','http://ml.wikipedia.org/wiki/$1',1),
+('mn','http://mn.wikipedia.org/wiki/$1',1),
+('mo','http://mo.wikipedia.org/wiki/$1',1),
+('mr','http://mr.wikipedia.org/wiki/$1',1),
+('ms','http://ms.wikipedia.org/wiki/$1',1),
+('mt','http://mt.wikipedia.org/wiki/$1',1),
+('mus','http://mus.wikipedia.org/wiki/$1',1),
+('my','http://my.wikipedia.org/wiki/$1',1),
+('nah','http://nah.wikipedia.org/wiki/$1',1),
+('na','http://na.wikipedia.org/wiki/$1',1),
+('nap','http://nap.wikipedia.org/wiki/$1',1),
+('nb','http://nb.wikipedia.org/wiki/$1',1),
+('nds','http://nds.wikipedia.org/wiki/$1',1),
+('nds-nl','http://nds-nl.wikipedia.org/wiki/$1',1),
+('ne','http://ne.wikipedia.org/wiki/$1',1),
+('ng','http://ng.wikipedia.org/wiki/$1',1),
+('nl','http://nl.wikipedia.org/wiki/$1',1),
+('nn','http://nn.wikipedia.org/wiki/$1',1),
+('no','http://no.wikipedia.org/wiki/$1',1),
+('nrm','http://nrm.wikipedia.org/wiki/$1',1),
+('nv','http://nv.wikipedia.org/wiki/$1',1),
+('ny','http://ny.wikipedia.org/wiki/$1',1),
+('oc','http://oc.wikipedia.org/wiki/$1',1),
+('om','http://om.wikipedia.org/wiki/$1',1),
+('or','http://or.wikipedia.org/wiki/$1',1),
+('os','http://os.wikipedia.org/wiki/$1',1),
+('pa','http://pa.wikipedia.org/wiki/$1',1),
+('pam','http://pam.wikipedia.org/wiki/$1',1),
+('pdc','http://pdc.wikipedia.org/wiki/$1',1),
+('pi','http://pi.wikipedia.org/wiki/$1',1),
+('pl','http://pl.wikipedia.org/wiki/$1',1),
+('ps','http://ps.wikipedia.org/wiki/$1',1),
+('pt','http://pt.wikipedia.org/wiki/$1',1),
+('qu','http://qu.wikipedia.org/wiki/$1',1),
+('rm','http://rm.wikipedia.org/wiki/$1',1),
+('rmy','http://rmy.wikipedia.org/wiki/$1',1),
+('rn','http://rn.wikipedia.org/wiki/$1',1),
+('roa-rup','http://roa-rup.wikipedia.org/wiki/$1',1),
+('ro','http://ro.wikipedia.org/wiki/$1',1),
+('ru','http://ru.wikipedia.org/wiki/$1',1),
+('rw','http://rw.wikipedia.org/wiki/$1',1),
+('sa','http://sa.wikipedia.org/wiki/$1',1),
+('sc','http://sc.wikipedia.org/wiki/$1',1),
+('scn','http://scn.wikipedia.org/wiki/$1',1),
+('sco','http://sco.wikipedia.org/wiki/$1',1),
+('sd','http://sd.wikipedia.org/wiki/$1',1),
+('se','http://se.wikipedia.org/wiki/$1',1),
+('sep11','http://sep11.wikipedia.org/wiki/$1',1),
+('sg','http://sg.wikipedia.org/wiki/$1',1),
+('sh','http://sh.wikipedia.org/wiki/$1',1),
+('si','http://si.wikipedia.org/wiki/$1',1),
+('simple','http://simple.wikipedia.org/wiki/$1',1),
+('sk','http://sk.wikipedia.org/wiki/$1',1),
+('sl','http://sl.wikipedia.org/wiki/$1',1),
+('sm','http://sm.wikipedia.org/wiki/$1',1),
+('sn','http://sn.wikipedia.org/wiki/$1',1),
+('so','http://so.wikipedia.org/wiki/$1',1),
+('sq','http://sq.wikipedia.org/wiki/$1',1),
+('sr','http://sr.wikipedia.org/wiki/$1',1),
+('ss','http://ss.wikipedia.org/wiki/$1',1),
+('st','http://st.wikipedia.org/wiki/$1',1),
+('su','http://su.wikipedia.org/wiki/$1',1),
+('sv','http://sv.wikipedia.org/wiki/$1',1),
+('sw','http://sw.wikipedia.org/wiki/$1',1),
+('ta','http://ta.wikipedia.org/wiki/$1',1),
+('te','http://te.wikipedia.org/wiki/$1',1),
+('tg','http://tg.wikipedia.org/wiki/$1',1),
+('th','http://th.wikipedia.org/wiki/$1',1),
+('ti','http://ti.wikipedia.org/wiki/$1',1),
+('tk','http://tk.wikipedia.org/wiki/$1',1),
+('tlh','http://tlh.wikipedia.org/wiki/$1',1),
+('tl','http://tl.wikipedia.org/wiki/$1',1),
+('tn','http://tn.wikipedia.org/wiki/$1',1),
+('to','http://to.wikipedia.org/wiki/$1',1),
+('tokipona','http://tokipona.wikipedia.org/wiki/$1',1),
+('tpi','http://tpi.wikipedia.org/wiki/$1',1),
+('tr','http://tr.wikipedia.org/wiki/$1',1),
+('ts','http://ts.wikipedia.org/wiki/$1',1),
+('tt','http://tt.wikipedia.org/wiki/$1',1),
+('tum','http://tum.wikipedia.org/wiki/$1',1),
+('tw','http://tw.wikipedia.org/wiki/$1',1),
+('ty','http://ty.wikipedia.org/wiki/$1',1),
+('ug','http://ug.wikipedia.org/wiki/$1',1),
+('uk','http://uk.wikipedia.org/wiki/$1',1),
+('ur','http://ur.wikipedia.org/wiki/$1',1),
+('uz','http://uz.wikipedia.org/wiki/$1',1),
+('ve','http://ve.wikipedia.org/wiki/$1',1),
+('vi','http://vi.wikipedia.org/wiki/$1',1),
+('vo','http://vo.wikipedia.org/wiki/$1',1),
+('wa','http://wa.wikipedia.org/wiki/$1',1),
+('w','http://en.wikipedia.org/wiki/$1',1),
+('wo','http://wo.wikipedia.org/wiki/$1',1),
+('xh','http://xh.wikipedia.org/wiki/$1',1),
+('yi','http://yi.wikipedia.org/wiki/$1',1),
+('yo','http://yo.wikipedia.org/wiki/$1',1),
+('za','http://za.wikipedia.org/wiki/$1',1),
+('zh-cfr','http://zh-min-nan.wikipedia.org/wiki/$1',1),
+('zh-classical','http://pam.wikipedia.org/wiki/$1',1),
+('zh-cn','http://zh.wikipedia.org/wiki/$1',1),
+('zh','http://zh.wikipedia.org/wiki/$1',1),
+('zh-min-nan','http://zh-min-nan.wikipedia.org/wiki/$1',1),
+('zh-tw','http://zh.wikipedia.org/wiki/$1',1),
+('zh-yue','http://zh-yue.wikipedia.org/wiki/$1',1),
+('zu','http://zu.wikipedia.org/wiki/$1',1);
Index: /MediaWiki/branches/1.11/maintenance/wiktionary-interwiki.sql
===================================================================
--- /MediaWiki/branches/1.11/maintenance/wiktionary-interwiki.sql	(revision 1280)
+++ /MediaWiki/branches/1.11/maintenance/wiktionary-interwiki.sql	(revision 1280)
@@ -0,0 +1,160 @@
+-- For convenience, here are the *in-project* interwiki prefixes
+-- for Wikipedia.
+
+REPLACE INTO /*$wgDBprefix*/interwiki (iw_prefix,iw_url,iw_local) VALUES
+('w','http://www.wikipedia.org/wiki/$1',1),
+('m','http://meta.wikipedia.org/wiki/$1',1),
+('meta','http://meta.wikipedia.org/wiki/$1',1),
+('sep11','http://sep11.wikipedia.org/wiki/$1',1),
+('simple','http://simple.wiktionary.org/wiki/$1',1),
+('aa','http://aa.wiktionary.org/wiki/$1',1),
+('ab','http://ab.wiktionary.org/wiki/$1',1),
+('af','http://af.wiktionary.org/wiki/$1',1),
+('als','http://als.wiktionary.org/wiki/$1',1),
+('am','http://am.wiktionary.org/wiki/$1',1),
+('ar','http://ar.wiktionary.org/wiki/$1',1),
+('as','http://as.wiktionary.org/wiki/$1',1),
+('ay','http://ay.wiktionary.org/wiki/$1',1),
+('az','http://az.wiktionary.org/wiki/$1',1),
+('ba','http://ba.wiktionary.org/wiki/$1',1),
+('be','http://be.wiktionary.org/wiki/$1',1),
+('bg','http://bg.wiktionary.org/wiki/$1',1),
+('bh','http://bh.wiktionary.org/wiki/$1',1),
+('bi','http://bi.wiktionary.org/wiki/$1',1),
+('bn','http://bn.wiktionary.org/wiki/$1',1),
+('bo','http://bo.wiktionary.org/wiki/$1',1),
+('bs','http://bs.wiktionary.org/wiki/$1',1),
+('ca','http://ca.wiktionary.org/wiki/$1',1),
+('chr','http://chr.wiktionary.org/wiki/$1',1),
+('co','http://co.wiktionary.org/wiki/$1',1),
+('cs','http://cs.wiktionary.org/wiki/$1',1),
+('csb','http://csb.wiktionary.org/wiki/$1',1),
+('cy','http://cy.wiktionary.org/wiki/$1',1),
+('da','http://da.wiktionary.org/wiki/$1',1),
+('de','http://de.wiktionary.org/wiki/$1',1),
+('dk','http://da.wiktionary.org/wiki/$1',1),
+('dz','http://dz.wiktionary.org/wiki/$1',1),
+('el','http://el.wiktionary.org/wiki/$1',1),
+('en','http://en.wiktionary.org/wiki/$1',1),
+('eo','http://eo.wiktionary.org/wiki/$1',1),
+('es','http://es.wiktionary.org/wiki/$1',1),
+('et','http://et.wiktionary.org/wiki/$1',1),
+('eu','http://eu.wiktionary.org/wiki/$1',1),
+('fa','http://fa.wiktionary.org/wiki/$1',1),
+('fi','http://fi.wiktionary.org/wiki/$1',1),
+('fj','http://fj.wiktionary.org/wiki/$1',1),
+('fo','http://fo.wiktionary.org/wiki/$1',1),
+('fr','http://fr.wiktionary.org/wiki/$1',1),
+('fy','http://fy.wiktionary.org/wiki/$1',1),
+('ga','http://ga.wiktionary.org/wiki/$1',1),
+('gd','http://gd.wiktionary.org/wiki/$1',1),
+('gl','http://gl.wiktionary.org/wiki/$1',1),
+('gn','http://gn.wiktionary.org/wiki/$1',1),
+('gu','http://gu.wiktionary.org/wiki/$1',1),
+('gv','http://gv.wiktionary.org/wiki/$1',1),
+('ha','http://ha.wiktionary.org/wiki/$1',1),
+('he','http://he.wiktionary.org/wiki/$1',1),
+('hi','http://hi.wiktionary.org/wiki/$1',1),
+('hr','http://hr.wiktionary.org/wiki/$1',1),
+('hu','http://hu.wiktionary.org/wiki/$1',1),
+('hy','http://hy.wiktionary.org/wiki/$1',1),
+('ia','http://ia.wiktionary.org/wiki/$1',1),
+('id','http://id.wiktionary.org/wiki/$1',1),
+('ik','http://ik.wiktionary.org/wiki/$1',1),
+('io','http://io.wiktionary.org/wiki/$1',1),
+('is','http://is.wiktionary.org/wiki/$1',1),
+('it','http://it.wiktionary.org/wiki/$1',1),
+('iu','http://iu.wiktionary.org/wiki/$1',1),
+('ja','http://ja.wiktionary.org/wiki/$1',1),
+('jv','http://jv.wiktionary.org/wiki/$1',1),
+('ka','http://ka.wiktionary.org/wiki/$1',1),
+('kk','http://kk.wiktionary.org/wiki/$1',1),
+('kl','http://kl.wiktionary.org/wiki/$1',1),
+('km','http://km.wiktionary.org/wiki/$1',1),
+('kn','http://kn.wiktionary.org/wiki/$1',1),
+('ko','http://ko.wiktionary.org/wiki/$1',1),
+('ks','http://ks.wiktionary.org/wiki/$1',1),
+('ku','http://ku.wiktionary.org/wiki/$1',1),
+('ky','http://ky.wiktionary.org/wiki/$1',1),
+('la','http://la.wiktionary.org/wiki/$1',1),
+('lo','http://lo.wiktionary.org/wiki/$1',1),
+('lt','http://lt.wiktionary.org/wiki/$1',1),
+('lv','http://lv.wiktionary.org/wiki/$1',1),
+('mg','http://mg.wiktionary.org/wiki/$1',1),
+('mi','http://mi.wiktionary.org/wiki/$1',1),
+('mk','http://mk.wiktionary.org/wiki/$1',1),
+('ml','http://ml.wiktionary.org/wiki/$1',1),
+('mn','http://mn.wiktionary.org/wiki/$1',1),
+('mo','http://mo.wiktionary.org/wiki/$1',1),
+('mr','http://mr.wiktionary.org/wiki/$1',1),
+('ms','http://ms.wiktionary.org/wiki/$1',1),
+('my','http://my.wiktionary.org/wiki/$1',1),
+('na','http://na.wiktionary.org/wiki/$1',1),
+('nah','http://nah.wiktionary.org/wiki/$1',1),
+('nb', 'http://no.wiktionary.org/wiki/$1',1),
+('nds','http://nds.wiktionary.org/wiki/$1',1),
+('ne','http://ne.wiktionary.org/wiki/$1',1),
+('nl','http://nl.wiktionary.org/wiki/$1',1),
+('no','http://no.wiktionary.org/wiki/$1',1),
+('oc','http://oc.wiktionary.org/wiki/$1',1),
+('om','http://om.wiktionary.org/wiki/$1',1),
+('or','http://or.wiktionary.org/wiki/$1',1),
+('pa','http://pa.wiktionary.org/wiki/$1',1),
+('pl','http://pl.wiktionary.org/wiki/$1',1),
+('ps','http://ps.wiktionary.org/wiki/$1',1),
+('pt','http://pt.wiktionary.org/wiki/$1',1),
+('qu','http://qu.wiktionary.org/wiki/$1',1),
+('rm','http://rm.wiktionary.org/wiki/$1',1),
+('rn','http://rn.wiktionary.org/wiki/$1',1),
+('ro','http://ro.wiktionary.org/wiki/$1',1),
+('ru','http://ru.wiktionary.org/wiki/$1',1),
+('rw','http://rw.wiktionary.org/wiki/$1',1),
+('sa','http://sa.wiktionary.org/wiki/$1',1),
+('sd','http://sd.wiktionary.org/wiki/$1',1),
+('sg','http://sg.wiktionary.org/wiki/$1',1),
+('sh','http://sh.wiktionary.org/wiki/$1',1),
+('si','http://si.wiktionary.org/wiki/$1',1),
+('sk','http://sk.wiktionary.org/wiki/$1',1),
+('sl','http://sl.wiktionary.org/wiki/$1',1),
+('sm','http://sm.wiktionary.org/wiki/$1',1),
+('sn','http://sn.wiktionary.org/wiki/$1',1),
+('so','http://so.wiktionary.org/wiki/$1',1),
+('sq','http://sq.wiktionary.org/wiki/$1',1),
+('sr','http://sr.wiktionary.org/wiki/$1',1),
+('ss','http://ss.wiktionary.org/wiki/$1',1),
+('st','http://st.wiktionary.org/wiki/$1',1),
+('su','http://su.wiktionary.org/wiki/$1',1),
+('sv','http://sv.wiktionary.org/wiki/$1',1),
+('sw','http://sw.wiktionary.org/wiki/$1',1),
+('ta','http://ta.wiktionary.org/wiki/$1',1),
+('te','http://te.wiktionary.org/wiki/$1',1),
+('tg','http://tg.wiktionary.org/wiki/$1',1),
+('th','http://th.wiktionary.org/wiki/$1',1),
+('ti','http://ti.wiktionary.org/wiki/$1',1),
+('tk','http://tk.wiktionary.org/wiki/$1',1),
+('tl','http://tl.wiktionary.org/wiki/$1',1),
+('tn','http://tn.wiktionary.org/wiki/$1',1),
+('to','http://to.wiktionary.org/wiki/$1',1),
+('tokipona','http://tokipona.wiktionary.org/wiki/$1',1),
+('tpi','http://tpi.wiktionary.org/wiki/$1',1),
+('tr','http://tr.wiktionary.org/wiki/$1',1),
+('ts','http://ts.wiktionary.org/wiki/$1',1),
+('tt','http://tt.wiktionary.org/wiki/$1',1),
+('tw','http://tw.wiktionary.org/wiki/$1',1),
+('ug','http://ug.wiktionary.org/wiki/$1',1),
+('uk','http://uk.wiktionary.org/wiki/$1',1),
+('ur','http://ur.wiktionary.org/wiki/$1',1),
+('uz','http://uz.wiktionary.org/wiki/$1',1),
+('vi','http://vi.wiktionary.org/wiki/$1',1),
+('vo','http://vo.wiktionary.org/wiki/$1',1),
+('wa','http://wa.wiktionary.org/wiki/$1',1),
+('wo','http://wo.wiktionary.org/wiki/$1',1),
+('xh','http://xh.wiktionary.org/wiki/$1',1),
+('yi','http://yi.wiktionary.org/wiki/$1',1),
+('yo','http://yo.wiktionary.org/wiki/$1',1),
+('za','http://za.wiktionary.org/wiki/$1',1),
+('zh','http://zh.wiktionary.org/wiki/$1',1),
+('zh-cn','http://zh.wiktionary.org/wiki/$1',1),
+('zh-tw','http://zh.wiktionary.org/wiki/$1',1),
+('zu','http://zu.wiktionary.org/wiki/$1',1);
+
Index: /MediaWiki/branches/1.11/math/.htaccess
===================================================================
--- /MediaWiki/branches/1.11/math/.htaccess	(revision 1280)
+++ /MediaWiki/branches/1.11/math/.htaccess	(revision 1280)
@@ -0,0 +1,1 @@
+Deny from all
Index: /MediaWiki/branches/1.11/math/.svnignore
===================================================================
--- /MediaWiki/branches/1.11/math/.svnignore	(revision 1280)
+++ /MediaWiki/branches/1.11/math/.svnignore	(revision 1280)
@@ -0,0 +1,7 @@
+texvc
+texvc_test
+texvc_tex
+*.cmi
+*.cmx
+*.mli
+*~
Index: /MediaWiki/branches/1.11/math/Makefile
===================================================================
--- /MediaWiki/branches/1.11/math/Makefile	(revision 1280)
+++ /MediaWiki/branches/1.11/math/Makefile	(revision 1280)
@@ -0,0 +1,64 @@
+OBJ=render_info.cmo tex.cmo texutil.cmo parser.cmo lexer.cmo texvc.cmo \
+render_info.cmx tex.cmx texutil.cmx parser.cmx lexer.cmx texvc.cmx \
+lexer.cmi parser.cmi render_info.cmi tex.cmi texutil.cmi texvc.cmi \
+lexer.o parser.o render_info.o tex.o texutil.o texvc.o \
+lexer.ml parser.ml parser.mli texvc texvc.bc texvc_test.cmo \
+texvc_test.cmx texvc_test.cmi texvc_test.o texvc_test util.o \
+util.cmo util.cmx util.cmi texvc_cgi.cmi texvc_cgi texvc_cgi.cmo \
+render.o render.cmi render.cmo render.cmx texvc_tex.cmx \
+texvc_tex.o texvc_tex.cmi texvc_tex html.cmi html.cmo html.cmx \
+html.o mathml.cmi mathml.cmo mathml.cmx mathml.o
+CGIPATH=-I /usr/lib/ocaml/cgi -I /usr/lib/ocaml/netstring -I /usr/lib/ocaml/pcre
+
+all: texvc texvc_test texvc_tex
+texvc.bc: util.cmo parser.cmo html.cmo mathml.cmo texutil.cmo render.cmo lexer.cmo texvc.cmo
+	ocamlc -o $@ unix.cma $^
+texvc: util.cmx parser.cmx html.cmx mathml.cmx texutil.cmx render.cmx lexer.cmx texvc.cmx
+	ocamlopt -o $@ unix.cmxa $^
+texvc_test: util.cmx parser.cmx html.cmx mathml.cmx texutil.cmx lexer.cmx texvc_test.cmx
+	ocamlopt -o $@ $^
+texvc_tex: util.cmx parser.cmx html.cmx mathml.cmx texutil.cmx lexer.cmx texvc_tex.cmx
+	ocamlopt -o $@ $^
+%.ml: %.mll
+	ocamllex $<
+%.mli %.ml: %.mly
+	ocamlyacc $<
+%.cmo: %.ml
+	ocamlc -c $<
+%.cmx: %.ml
+	ocamlopt -c $<
+%.cmi: %.mli
+	ocamlc -c $<
+texvc_cgi.cmo: texvc_cgi.ml
+	ocamlc -c $(CGIPATH) $<
+texvc_cgi: util.cmo parser.cmo texutil.cmo render.cmo lexer.cmo texvc_cgi.cmo
+	ocamlc -o $@ unix.cma $(CGIPATH) pcre.cma netstring.cma cgi.cma $^
+	chmod g-w $@
+clean:
+	rm -f $(OBJ)
+
+html.cmo: render_info.cmi tex.cmi util.cmo html.cmi 
+html.cmx: render_info.cmi tex.cmi util.cmx html.cmi 
+html.cmi: tex.cmi 
+lexer.cmo: parser.cmi render_info.cmi tex.cmi texutil.cmi 
+lexer.cmx: parser.cmx render_info.cmi tex.cmi texutil.cmx 
+mathml.cmo: tex.cmi mathml.cmi 
+mathml.cmx: tex.cmi mathml.cmi 
+mathml.cmi: tex.cmi 
+parser.cmo: render_info.cmi tex.cmi parser.cmi 
+parser.cmx: render_info.cmi tex.cmi parser.cmi 
+parser.cmi: render_info.cmi tex.cmi 
+render.cmo: texutil.cmi util.cmo 
+render.cmx: texutil.cmx util.cmx 
+tex.cmi: render_info.cmi 
+texutil.cmo: html.cmi parser.cmi render_info.cmi tex.cmi util.cmo texutil.cmi 
+texutil.cmx: html.cmx parser.cmx render_info.cmi tex.cmi util.cmx texutil.cmi 
+texutil.cmi: parser.cmi tex.cmi 
+texvc.cmo: html.cmi lexer.cmo mathml.cmi parser.cmi render.cmo texutil.cmi util.cmo 
+texvc.cmx: html.cmx lexer.cmx mathml.cmx parser.cmx render.cmx texutil.cmx util.cmx 
+texvc_cgi.cmo: lexer.cmo parser.cmi render.cmo texutil.cmi util.cmo 
+texvc_cgi.cmx: lexer.cmx parser.cmx render.cmx texutil.cmx util.cmx 
+texvc_test.cmo: html.cmi lexer.cmo parser.cmi texutil.cmi util.cmo 
+texvc_test.cmx: html.cmx lexer.cmx parser.cmx texutil.cmx util.cmx 
+texvc_tex.cmo: lexer.cmo parser.cmi texutil.cmi util.cmo 
+texvc_tex.cmx: lexer.cmx parser.cmx texutil.cmx util.cmx 
Index: /MediaWiki/branches/1.11/math/README
===================================================================
--- /MediaWiki/branches/1.11/math/README	(revision 1280)
+++ /MediaWiki/branches/1.11/math/README	(revision 1280)
@@ -0,0 +1,120 @@
+== About texvc ==
+
+texvc takes LaTeX-compatible equations and produces formatted output in
+HTML, MathML, and (via LaTeX/dvipng) rasterized PNG images.
+Input data is parsed and scrutinized for safety, and the output includes
+an estimate of whether the code is simple enough that HTML rendering will
+look acceptable.
+
+The program was written by Tomasz Wegrzanowski for use with MediaWiki;
+it's included as part of the MediaWiki package (http://wikipedia.sf.net)
+and is under the GPL license.
+
+Please report bugs at: http://bugzilla.wikimedia.org/ (under "MediaWiki")
+
+== Setup ==
+
+=== Requirements ===
+
+OCaml 3.06 or later is required to compile texvc; this can be acquired
+from http://caml.inria.fr/ if your system doesn't have it available.
+
+The makefile requires GNU make.
+
+Rasterization is done via LaTeX, dvipng. These need
+to be installed and in the PATH: latex, dvipng
+
+AMS* packages for LaTeX also need to be installed. Without AMS* some
+equations will render correctly while others won't render.
+Most distributions of TeX already contain AMS*.
+In Debian/Ubuntu you need to install tetex-extra.
+
+To work properly with rendering non-ASCII Unicode characters, a
+supplemental TeX package is needed (cjk-latex in Debian)
+
+=== Installation ===
+
+Run 'make' (or 'gmake' if GNU make is not your default make). This should
+produce the texvc executable.
+
+If you're using MediaWiki's install.php and have enabled $wgUseTeX in your
+LocalSettings.php, the installer will try to copy texvc into place, in the
+'math' subdirectory under where wiki.phtml is installed.
+
+
+== Usage ==
+
+Normally texvc is called from MediaWiki's Math.php modules and everything
+Just Works. It can be run manually for testing or for use in another app.
+
+=== Command-line parameters ===
+
+    texvc <temp directory> <output directory> <TeX code> <encoding>
+
+Be sure to properly quote the TeX code!
+
+Example:
+
+    texvc /home/wiki/tmp /home/wiki/math "y=x+2" iso-8859-1
+
+=== Output format ===
+
+Status codes and HTML/MathML transformations are returned on stdout.
+A rasterized PNG file will be written to the output directory, named
+for the MD5 hash code.
+
+texvc output format is like this:
+    +%5		ok, but not html or mathml
+    c%5%h	ok, conservative html, no mathml
+    m%5%h	ok, moderate html, no mathml
+    l%5%h	ok, liberal html, no mathml
+    C%5%h\0%m	ok, conservative html, with mathml
+    M%5%h\0%m	ok, moderate html, with mathml
+    L%5%h\0%m	ok, liberal html, with mathml
+    X%5%m	ok, no html, with mathml
+    S		syntax error
+    E		lexing error
+    F%s		unknown function %s
+    -		other error
+
+ \0 - null character
+ %5 - md5, 32 hex characters
+ %h - html code, without \0 characters
+ %m - mathml code, without \0 characters
+
+
+== Troubleshooting ==
+
+Unforunately, many error conditions with rasterization are not well reported.
+texvc will return as though everything is successful, and the only obvious
+sign of problems for the user is a big X on a wiki page where an equation
+should be.
+
+Try running texvc from the command line to ensure that the software it relies
+upon is all set up.
+
+Ensure that the temporary and math directories exist and can be written to by
+the user account the web server runs under; if you don't control the server,
+you may have to make them world-writable.
+
+If some equations render correctly while others don't, you probably don't have
+AMS* packages for LaTeX installed. Most distributions of TeX come with AMS*.
+In Debian/Ubuntu AMS* is in tetex-extra package.
+To check if that is the problem you can try those two equations:
+    x + y
+    x \implies y
+The first uses only standard LaTeX, while the second uses symbol \implies from AMS*.
+If the first renders, but the second doesn't, you need to install AMS*.
+
+== Hacking ==
+
+Before you start hacking on the math package its good to know the workflow,
+which is basically:
+
+1. texvc gets called by includes/Math.php (check out the line begining with "$cmd")
+2. texvc does its magic, which is basically to check for invalid latex code.
+3. texvc takes the user input if valid and creates a latex file containing it, see
+   get_preface in texutil.ml
+4. dvipng(1) gets called to create a .png file
+   See render.ml for this process (commenting out the removal of
+   the temporary file is useful for debugging).
Index: /MediaWiki/branches/1.11/math/TODO
===================================================================
--- /MediaWiki/branches/1.11/math/TODO	(revision 1280)
+++ /MediaWiki/branches/1.11/math/TODO	(revision 1280)
@@ -0,0 +1,3 @@
+* It would be better if PNGs were transparent
+* CJK support
+* Documentation, in particular about instalation of Latex support for Unicode
Index: /MediaWiki/branches/1.11/math/html.ml
===================================================================
--- /MediaWiki/branches/1.11/math/html.ml	(revision 1280)
+++ /MediaWiki/branches/1.11/math/html.ml	(revision 1280)
@@ -0,0 +1,142 @@
+open Render_info
+open Tex
+open Util
+
+exception Too_difficult_for_html
+type context = CTX_NORMAL | CTX_IT | CTX_RM 
+type conservativeness_t = CONSERVATIVE | MODERATE | LIBERAL
+
+let conservativeness = ref CONSERVATIVE
+let html_liberal () = conservativeness := LIBERAL
+let html_moderate () = if !conservativeness = CONSERVATIVE then conservativeness := MODERATE else ()
+
+
+let new_ctx = function
+    FONTFORCE_IT -> CTX_IT
+  | FONTFORCE_RM -> CTX_RM
+let font_render lit = function
+    (_,     FONT_UFH) -> lit
+  | (_,     FONT_UF)  -> lit
+  | (CTX_IT,FONT_RTI) -> raise Too_difficult_for_html
+  | (_,     FONT_RTI) -> lit
+  | (CTX_IT,FONT_RM)  -> "<i>"^lit^"</i>"
+  | (_,     FONT_RM)  -> lit
+  | (CTX_RM,FONT_IT)  -> lit
+  | (_,     FONT_IT)  -> "<i>"^lit^"</i>"
+
+let rec html_render_flat ctx = function
+    TEX_LITERAL (HTMLABLE (ft,_,sh))::r -> (html_liberal (); (font_render sh (ctx,ft))^html_render_flat ctx r)
+  | TEX_LITERAL (HTMLABLEC(ft,_,sh))::r -> (font_render sh (ctx,ft))^html_render_flat ctx r
+  | TEX_LITERAL (MHTMLABLEC(ft,_,sh,_,_))::r -> (font_render sh (ctx,ft))^html_render_flat ctx r
+  | TEX_LITERAL (HTMLABLEM(ft,_,sh))::r -> (html_moderate(); (font_render sh (ctx,ft))^html_render_flat ctx r)
+  | TEX_LITERAL (HTMLABLE_BIG (_,sh))::r -> (html_liberal (); sh^html_render_flat ctx r)
+  | TEX_FUN1hl (_,(f1,f2),a)::r -> f1^(html_render_flat ctx [a])^f2^html_render_flat ctx r
+  | TEX_FUN1hf (_,ff,a)::r -> (html_render_flat (new_ctx ff) [a])^html_render_flat ctx r
+  | TEX_DECLh (_,ff,a)::r -> (html_render_flat (new_ctx ff) a)^html_render_flat ctx r
+  | TEX_CURLY ls::r -> html_render_flat ctx (ls @ r)
+  | TEX_DQ (a,b)::r  -> (html_liberal ();
+			 let bs = html_render_flat ctx [b] in match html_render_size ctx a with
+		         true, s -> raise Too_difficult_for_html
+		       | false, s -> s^"<sub>"^bs^"</sub>")^html_render_flat ctx r
+  | TEX_UQ (a,b)::r  -> (html_liberal ();
+		         let bs = html_render_flat ctx [b] in match html_render_size ctx a with
+		         true, s ->  raise Too_difficult_for_html
+		       | false, s -> s^"<sup>"^bs^"</sup>")^html_render_flat ctx r
+  | TEX_FQ (a,b,c)::r -> (html_liberal ();
+			 (let bs = html_render_flat ctx [b] in let cs = html_render_flat ctx [c] in
+		          match html_render_size ctx a with
+		          true, s -> raise Too_difficult_for_html
+		        | false, s -> s^"<sub>"^bs^"</sub><sup>"^cs^"</sup>")^html_render_flat ctx r)
+  | TEX_DQN (a)::r  -> (html_liberal ();
+                 let bs = html_render_flat ctx [a] in "<sub>"^bs^"</sub>")^html_render_flat ctx r
+  | TEX_UQN (a)::r  -> (html_liberal ();
+                 let bs = html_render_flat ctx [a] in "<sup>"^bs^"</sup>")^html_render_flat ctx r
+  | TEX_FQN (a,b)::r -> (html_liberal ();
+			 (let bs = html_render_flat ctx [a] in let cs = html_render_flat ctx [b] in  "<sub>"^bs^"</sub><sup>"^cs^"</sup>")^html_render_flat ctx r)  
+  | TEX_BOX (_,s)::r -> s^html_render_flat ctx r
+  | TEX_LITERAL (TEX_ONLY _)::_ -> raise Too_difficult_for_html
+  | TEX_FUN1 _::_ -> raise Too_difficult_for_html
+  | TEX_FUN2  _::_ -> raise Too_difficult_for_html
+  | TEX_FUN2nb  _::_ -> raise Too_difficult_for_html
+  | TEX_FUN2h  _::_ -> raise Too_difficult_for_html
+  | TEX_FUN2sq  _::_ -> raise Too_difficult_for_html
+  | TEX_INFIX _::_ -> raise Too_difficult_for_html
+  | TEX_INFIXh _::_ -> raise Too_difficult_for_html
+  | TEX_MATRIX _::_ -> raise Too_difficult_for_html
+  | TEX_LR _::_ -> raise Too_difficult_for_html
+  | TEX_BIG _::_ -> raise Too_difficult_for_html
+  | [] -> ""
+and html_render_size ctx = function
+    TEX_LITERAL (HTMLABLE_BIG (_,sh)) -> true,sh
+  | x -> false,html_render_flat ctx [x]
+
+let rec html_render_deep ctx = function
+    TEX_LITERAL (HTMLABLE (ft,_,sh))::r -> (html_liberal (); ("",(font_render sh (ctx,ft)),"")::html_render_deep ctx r)
+  | TEX_LITERAL (HTMLABLEM(ft,_,sh))::r -> (html_moderate(); ("",(font_render sh (ctx,ft)),"")::html_render_deep ctx r)
+  | TEX_LITERAL (HTMLABLEC(ft,_,sh))::r -> ("",(font_render sh (ctx,ft)),"")::html_render_deep ctx r
+  | TEX_LITERAL (MHTMLABLEC(ft,_,sh,_,_))::r -> ("",(font_render sh (ctx,ft)),"")::html_render_deep ctx r
+  | TEX_LITERAL (HTMLABLE_BIG (_,sh))::r -> (html_liberal (); ("",sh,"")::html_render_deep ctx r)
+  | TEX_FUN2h (_,f,a,b)::r -> (html_liberal (); (f a b)::html_render_deep ctx r)
+  | TEX_INFIXh (_,f,a,b)::r -> (html_liberal (); (f a b)::html_render_deep ctx r)
+  | TEX_CURLY ls::r -> html_render_deep ctx (ls @ r)
+  | TEX_DQ (a,b)::r  -> (let bs = html_render_flat ctx [b] in match html_render_size ctx a with
+  true, s ->  "","<span style='font-size: x-large; font-family: serif;'>"^s^"</span>",bs
+		       | false, s -> "",(s^"<sub>"^bs^"</sub>"),"")::html_render_deep ctx r
+  | TEX_UQ (a,b)::r  -> (let bs = html_render_flat ctx [b] in match html_render_size ctx a with
+  true, s ->  bs,"<span style='font-size: x-large; font-family: serif;'>"^s^"</span>",""
+		       | false, s -> "",(s^"<sup>"^bs^"</sup>"),"")::html_render_deep ctx r
+  | TEX_FQ (a,b,c)::r -> (html_liberal ();
+			 (let bs = html_render_flat ctx [b] in let cs = html_render_flat ctx [c] in
+		          match html_render_size ctx a with
+                  true, s ->  (cs,"<span style='font-size: x-large; font-family: serif;'>"^s^"</span>",bs)
+		        | false, s -> ("",(s^"<sub>"^bs^"</sub><sup>"^cs^"</sup>"),""))::html_render_deep ctx r)
+  | TEX_DQN (a)::r  -> (let bs = html_render_flat ctx [a] in "",("<sub>"^bs^"</sub>"),"")::html_render_deep ctx r
+  | TEX_UQN (a)::r  -> (let bs = html_render_flat ctx [a] in "",("<sup>"^bs^"</sup>"),"")::html_render_deep ctx r
+  | TEX_FQN (a,b)::r -> (html_liberal ();
+			 (let bs = html_render_flat ctx [a] in let cs = html_render_flat ctx [b] in
+		         ("",("<sub>"^bs^"</sub><sup>"^cs^"</sup>"),""))::html_render_deep ctx r)  
+  | TEX_FUN1hl (_,(f1,f2),a)::r -> ("",f1,"")::(html_render_deep ctx [a]) @ ("",f2,"")::html_render_deep ctx r
+  | TEX_FUN1hf (_,ff,a)::r -> (html_render_deep (new_ctx ff) [a]) @ html_render_deep ctx r
+  | TEX_DECLh  (_,ff,a)::r -> (html_render_deep (new_ctx ff) a) @ html_render_deep ctx r
+  | TEX_BOX (_,s)::r -> ("",s,"")::html_render_deep ctx r
+  | TEX_LITERAL (TEX_ONLY _)::_ -> raise Too_difficult_for_html
+  | TEX_FUN1 _::_ -> raise Too_difficult_for_html
+  | TEX_FUN2 _::_ -> raise Too_difficult_for_html
+  | TEX_FUN2nb _::_ -> raise Too_difficult_for_html
+  | TEX_FUN2sq  _::_ -> raise Too_difficult_for_html
+  | TEX_INFIX _::_ -> raise Too_difficult_for_html
+  | TEX_MATRIX _::_ -> raise Too_difficult_for_html
+  | TEX_LR _::_ -> raise Too_difficult_for_html
+  | TEX_BIG _::_ -> raise Too_difficult_for_html
+  | [] -> []
+
+let rec html_render_table = function
+    sf,u,d,("",a,"")::("",b,"")::r -> html_render_table (sf,u,d,(("",a^b,"")::r))
+  | sf,u,d,(("",a,"") as c)::r     -> html_render_table (c::sf,u,d,r)
+  | sf,u,d,((_,a,"") as c)::r      -> html_render_table (c::sf,true,d,r)
+  | sf,u,d,(("",a,_) as c)::r      -> html_render_table (c::sf,u,true,r)
+  | sf,u,d,((_,a,_) as c)::r       -> html_render_table (c::sf,true,true,r)
+  | sf,false,false,[]              -> mapjoin (function (u,m,d) -> m) (List.rev sf)
+  | sf,true,false,[]               -> let ustr,mstr = List.fold_left (fun (us,ms) (u,m,d) -> (us^"<td>"^u^"</td>",ms^"<td>"^u^"</td>"))
+					("","") (List.rev sf) in
+                    "\n<table>\n" ^
+                    "\t\t<tr style='text-align: center; vertical-align: bottom;'>" ^ ustr ^ "</tr>\n" ^
+                    "\t\t<tr style='text-align: center;'>" ^ mstr ^ "</tr>\n" ^ 
+                    "</table>\n"
+  | sf,false,true,[]               -> let mstr,dstr = List.fold_left (fun (ms,ds) (u,m,d) -> (ms^"<td>"^m^"</td>",ds^"<td>"^d^"</td>"))
+					("","") (List.rev sf) in
+                    "\n<table>\n" ^ 
+                    "\t\t<tr style='text-align: center;'>" ^ mstr ^ "</tr>\n" ^ 
+                    "\t\t<tr style='text-align: center; vertical-align: top;'>" ^ dstr ^ "</tr>\n" ^
+                    "</table>\n"
+  | sf,true,true,[]               -> let ustr,mstr,dstr = List.fold_left (fun (us,ms,ds) (u,m,d) ->
+					(us^"<td>"^u^"</td>",ms^"<td>"^m^"</td>",ds^"<td>"^d^"</td>")) ("","","") (List.rev sf) in
+					"\n<table>\n" ^ 
+                    "\t\t<tr style='text-align: center; vertical-align: bottom;'>" ^ ustr ^ "</tr>\n" ^ 
+                    "\t\t<tr style='text-align: center;'>" ^ mstr ^ "</tr>\n" ^ 
+                    "\t\t<tr style='text-align: center; vertical-align: top;'>" ^ dstr ^ "</tr>\n" ^ 
+                    "</table>\n"
+
+let html_render tree = html_render_table ([],false,false,html_render_deep CTX_NORMAL tree)
+
+let render tree = try Some (html_render tree) with _ -> None
Index: /MediaWiki/branches/1.11/math/html.mli
===================================================================
--- /MediaWiki/branches/1.11/math/html.mli	(revision 1280)
+++ /MediaWiki/branches/1.11/math/html.mli	(revision 1280)
@@ -0,0 +1,5 @@
+val render : Tex.t list -> string option
+val html_render : Tex.t list -> string
+
+type conservativeness_t = CONSERVATIVE | MODERATE | LIBERAL
+val conservativeness : conservativeness_t ref
Index: /MediaWiki/branches/1.11/math/lexer.mll
===================================================================
--- /MediaWiki/branches/1.11/math/lexer.mll	(revision 1280)
+++ /MediaWiki/branches/1.11/math/lexer.mll	(revision 1280)
@@ -0,0 +1,107 @@
+{
+    open Parser
+    open Render_info
+    open Tex
+}
+let space = [' ' '\t' '\n' '\r']
+let alpha = ['a'-'z' 'A'-'Z']
+let literal_id = ['a'-'z' 'A'-'Z']
+let literal_mn = ['0'-'9']
+let literal_uf_lt = [',' ':' ';' '?' '!' '\'']
+let delimiter_uf_lt = ['(' ')' '.']
+let literal_uf_op = ['+' '-' '*' '=']
+let delimiter_uf_op = ['/' '|']
+let boxchars  = ['0'-'9' 'a'-'z' 'A'-'Z' '+' '-' '*' ',' '=' '(' ')' ':' '/' ';' '?' '.' '!' ' ' '\128'-'\255']
+let aboxchars = ['0'-'9' 'a'-'z' 'A'-'Z' '+' '-' '*' ',' '=' '(' ')' ':' '/' ';' '?' '.' '!' ' ']
+
+rule token = parse
+    space +			{ token lexbuf }
+  | "\\text" space * '{' boxchars + '}'
+				{ Texutil.tex_use_ams (); let str = Lexing.lexeme lexbuf in
+				  let n = String.index str '{' + 1 in
+				  BOX ("\\text", String.sub str n (String.length str - n - 1)) }
+  | "\\mbox" space * '{' aboxchars + '}'
+				{ let str = Lexing.lexeme lexbuf in
+				  let n = String.index str '{' + 1 in
+				  BOX ("\\mbox", String.sub str n (String.length str - n - 1)) }
+  | "\\hbox" space * '{' aboxchars + '}'
+				{ let str = Lexing.lexeme lexbuf in
+				  let n = String.index str '{' + 1 in
+				  BOX ("\\hbox", String.sub str n (String.length str - n - 1)) }
+  | "\\vbox" space * '{' aboxchars + '}'
+				{ let str = Lexing.lexeme lexbuf in
+				  let n = String.index str '{' + 1 in
+				  BOX ("\\vbox", String.sub str n (String.length str - n - 1)) }
+  | "\\mbox" space * '{' boxchars + '}'
+				{ let str = Lexing.lexeme lexbuf in
+				  let n = String.index str '{' + 1 in
+				  Texutil.tex_use_nonascii();
+				  BOX ("\\mbox", String.sub str n (String.length str - n - 1)) }
+  | "\\hbox" space * '{' boxchars + '}'
+				{ let str = Lexing.lexeme lexbuf in
+				  let n = String.index str '{' + 1 in
+				  Texutil.tex_use_nonascii();
+				  BOX ("\\hbox", String.sub str n (String.length str - n - 1)) }
+  | "\\vbox" space * '{' boxchars + '}'
+				{ let str = Lexing.lexeme lexbuf in
+				  let n = String.index str '{' + 1 in
+				  Texutil.tex_use_nonascii();
+				  BOX ("\\vbox", String.sub str n (String.length str - n - 1)) }
+  | literal_id			{ let str = Lexing.lexeme lexbuf in LITERAL (MHTMLABLEC (FONT_IT, str,str,MI,str)) }
+  | literal_mn			{ let str = Lexing.lexeme lexbuf in LITERAL (MHTMLABLEC (FONT_RM, str,str,MN,str)) }
+  | literal_uf_lt		{ let str = Lexing.lexeme lexbuf in LITERAL (HTMLABLEC (FONT_UFH, str,str)) }
+  | delimiter_uf_lt		{ let str = Lexing.lexeme lexbuf in DELIMITER (HTMLABLEC (FONT_UFH, str,str)) }
+  | "-"				{ let str = Lexing.lexeme lexbuf in LITERAL (MHTMLABLEC (FONT_UFH,"-"," &minus; ",MO,str))}
+  | literal_uf_op		{ let str = Lexing.lexeme lexbuf in LITERAL (MHTMLABLEC (FONT_UFH, str," "^str^" ",MO,str)) }
+  | delimiter_uf_op		{ let str = Lexing.lexeme lexbuf in DELIMITER (MHTMLABLEC (FONT_UFH, str," "^str^" ",MO,str)) }
+  | "\\" alpha + 		{ Texutil.find (Lexing.lexeme lexbuf) }
+  | "\\sqrt" space * "["	{ FUN_AR1opt "\\sqrt" }
+  | "\\xleftarrow" space * "["	{ Texutil.tex_use_ams(); FUN_AR1opt "\\xleftarrow" }
+  | "\\xrightarrow" space * "["	{ Texutil.tex_use_ams(); FUN_AR1opt "\\xrightarrow" }
+  | "\\," 			{ LITERAL (HTMLABLE (FONT_UF, "\\,","&nbsp;")) }
+  | "\\ " 			{ LITERAL (HTMLABLE (FONT_UF, "\\ ","&nbsp;")) }
+  | "\\;" 			{ LITERAL (HTMLABLE (FONT_UF, "\\;","&nbsp;")) }
+  | "\\!" 			{ LITERAL (TEX_ONLY "\\!") }
+  | "\\{" 			{ DELIMITER (HTMLABLEC(FONT_UFH,"\\{","{")) }
+  | "\\}" 			{ DELIMITER (HTMLABLEC(FONT_UFH,"\\}","}")) }
+  | "\\|" 			{ DELIMITER (HTMLABLE (FONT_UFH,"\\|","||")) }
+  | "\\_" 			{ LITERAL (HTMLABLEC(FONT_UFH,"\\_","_")) }
+  | "\\#" 			{ LITERAL (HTMLABLE (FONT_UFH,"\\#","#")) }
+  | "\\%"			{ LITERAL (HTMLABLE (FONT_UFH,"\\%","%")) }
+  | "\\$"			{ LITERAL (HTMLABLE (FONT_UFH,"\\$","$")) }
+  | "&"				{ NEXT_CELL }
+  | "\\\\"			{ NEXT_ROW }
+  | "\\begin{matrix}"		{ Texutil.tex_use_ams(); BEGIN__MATRIX }
+  | "\\end{matrix}"		{ END__MATRIX }
+  | "\\begin{pmatrix}"		{ Texutil.tex_use_ams(); BEGIN_PMATRIX }
+  | "\\end{pmatrix}"		{ END_PMATRIX }
+  | "\\begin{bmatrix}"		{ Texutil.tex_use_ams(); BEGIN_BMATRIX }
+  | "\\end{bmatrix}"		{ END_BMATRIX }
+  | "\\begin{Bmatrix}"		{ Texutil.tex_use_ams(); BEGIN_BBMATRIX }
+  | "\\end{Bmatrix}"		{ END_BBMATRIX }
+  | "\\begin{vmatrix}"		{ Texutil.tex_use_ams(); BEGIN_VMATRIX }
+  | "\\end{vmatrix}"		{ END_VMATRIX }
+  | "\\begin{Vmatrix}"		{ Texutil.tex_use_ams(); BEGIN_VVMATRIX }
+  | "\\end{Vmatrix}"		{ END_VVMATRIX }
+  | "\\begin{array}"		{ Texutil.tex_use_ams(); BEGIN_ARRAY }
+  | "\\end{array}"  		{ END_ARRAY }
+  | "\\begin{align}"		{ Texutil.tex_use_ams(); BEGIN_ALIGN }
+  | "\\end{align}"  		{ END_ALIGN }
+  | "\\begin{alignat}"		{ Texutil.tex_use_ams(); BEGIN_ALIGNAT }
+  | "\\end{alignat}"  		{ END_ALIGNAT }
+  | "\\begin{smallmatrix}"	{ Texutil.tex_use_ams(); BEGIN_SMALLMATRIX }
+  | "\\end{smallmatrix}"  	{ END_SMALLMATRIX }
+  | "\\begin{cases}"		{ Texutil.tex_use_ams(); BEGIN_CASES }
+  | "\\end{cases}"		{ END_CASES }
+  | '>'				{ LITERAL (HTMLABLEC(FONT_UFH,">"," &gt; ")) }
+  | '<'				{ LITERAL (HTMLABLEC(FONT_UFH,"<"," &lt; ")) }
+  | '%'				{ LITERAL (HTMLABLEC(FONT_UFH,"\\%","%")) }
+  | '$'				{ LITERAL (HTMLABLEC(FONT_UFH,"\\$","$")) }
+  | '~'				{ LITERAL (HTMLABLE (FONT_UF, "~","&nbsp;")) }
+  | '['				{ DELIMITER (HTMLABLEC(FONT_UFH,"[","[")) }
+  | ']'				{ SQ_CLOSE }
+  | '{'				{ CURLY_OPEN }
+  | '}'				{ CURLY_CLOSE }
+  | '^'				{ SUP }
+  | '_'				{ SUB }
+  | eof				{ EOF }
Index: /MediaWiki/branches/1.11/math/mathml.ml
===================================================================
--- /MediaWiki/branches/1.11/math/mathml.ml	(revision 1280)
+++ /MediaWiki/branches/1.11/math/mathml.ml	(revision 1280)
@@ -0,0 +1,20 @@
+open Tex
+open Render_info
+
+type t = TREE_MN of string | TREE_MO of string | TREE_MI of string
+
+let rec make_mathml_tree = function
+    TREE_MN a::otr,TEX_LITERAL(MHTMLABLEC(_,_,_,MN,b))::itr -> make_mathml_tree(TREE_MN (a^b)::otr,itr)
+  | otr,TEX_LITERAL(MHTMLABLEC(_,_,_,MN,a))::itr -> make_mathml_tree(TREE_MN a::otr,itr)
+  | otr,TEX_LITERAL(MHTMLABLEC(_,_,_,MO,a))::itr -> make_mathml_tree(TREE_MO a::otr,itr)
+  | otr,TEX_LITERAL(MHTMLABLEC(_,_,_,MI,a))::itr -> make_mathml_tree(TREE_MI a::otr,itr)
+  | otr,TEX_CURLY(crl)::itr -> make_mathml_tree(otr,crl@itr)
+  | otr,[] -> List.rev otr
+  | _ -> failwith "failed to render mathml"
+
+let render_mathml_tree = function
+    TREE_MN s -> "<mn>"^s^"</mn>"
+  | TREE_MI s -> "<mi>"^s^"</mi>"
+  | TREE_MO s -> "<mo>"^s^"</mo>"
+
+let render tree = try Some (Util.mapjoin render_mathml_tree (make_mathml_tree ([],tree))) with _ -> None
Index: /MediaWiki/branches/1.11/math/mathml.mli
===================================================================
--- /MediaWiki/branches/1.11/math/mathml.mli	(revision 1280)
+++ /MediaWiki/branches/1.11/math/mathml.mli	(revision 1280)
@@ -0,0 +1,1 @@
+val render : Tex.t list -> string option
Index: /MediaWiki/branches/1.11/math/parser.mly
===================================================================
--- /MediaWiki/branches/1.11/math/parser.mly	(revision 1280)
+++ /MediaWiki/branches/1.11/math/parser.mly	(revision 1280)
@@ -0,0 +1,118 @@
+%{
+    open Tex
+    open Render_info
+    
+    let sq_close_ri = HTMLABLEC(FONT_UFH,"]", "]")
+%}
+%token <Render_info.t> LITERAL DELIMITER
+%token <string> FUN_AR2 FUN_INFIX FUN_AR1 DECL FUN_AR1opt BIG FUN_AR2nb
+%token <string*string> BOX
+%token <string*(string*string)> FUN_AR1hl
+%token <string*Render_info.font_force> FUN_AR1hf DECLh
+%token <string*(Tex.t->Tex.t->string*string*string)> FUN_AR2h
+%token <string*(Tex.t list->Tex.t list->string*string*string)> FUN_INFIXh
+%token EOF CURLY_OPEN CURLY_CLOSE SUB SUP SQ_CLOSE NEXT_CELL NEXT_ROW
+%token BEGIN__MATRIX BEGIN_PMATRIX BEGIN_BMATRIX BEGIN_BBMATRIX BEGIN_VMATRIX BEGIN_VVMATRIX BEGIN_CASES BEGIN_ARRAY BEGIN_ALIGN BEGIN_ALIGNAT BEGIN_SMALLMATRIX
+%token END__MATRIX END_PMATRIX END_BMATRIX END_BBMATRIX END_VMATRIX END_VVMATRIX END_CASES END_ARRAY END_ALIGN END_ALIGNAT END_SMALLMATRIX
+%token LEFT RIGHT 
+%type <Tex.t list> tex_expr
+%start tex_expr
+
+%%
+tex_expr:
+    expr EOF			{ $1 }
+  | ne_expr FUN_INFIX ne_expr EOF
+				{ [TEX_INFIX($2,$1,$3)] }
+  | ne_expr FUN_INFIXh ne_expr EOF
+				{ let t,h=$2 in [TEX_INFIXh(t,h,$1,$3)] }
+expr:
+    /* */			{ [] }
+  | ne_expr			{ $1 }
+ne_expr:
+    lit_aq expr			{ $1 :: $2 }
+  | litsq_aq expr		{ $1 :: $2 }
+  | DECLh expr			{ let t,h = $1 in [TEX_DECLh(t,h,$2)] }
+litsq_aq:
+    litsq_zq			{ $1 }
+  | litsq_dq			{ let base,downi = $1 in TEX_DQ(base,downi) }
+  | litsq_uq			{ let base,upi = $1   in TEX_UQ(base,upi)}
+  | litsq_fq			{ $1 }
+litsq_fq:
+    litsq_dq SUP lit		{ let base,downi = $1 in TEX_FQ(base,downi,$3) }
+  | litsq_uq SUB lit		{ let base,upi = $1   in TEX_FQ(base,$3,upi) }
+litsq_uq:
+    litsq_zq SUP lit		{ $1,$3 }
+litsq_dq:
+    litsq_zq SUB lit		{ $1,$3 }
+litsq_zq:
+  | SQ_CLOSE 			{ TEX_LITERAL sq_close_ri }
+expr_nosqc:
+    /* */			{ [] }
+  | lit_aq expr_nosqc		{ $1 :: $2 }
+lit_aq:
+    lit				{ $1 }
+  | lit_dq			{ let base,downi = $1 in TEX_DQ(base,downi) }
+  | lit_uq			{ let base,upi = $1   in TEX_UQ(base,upi)}
+  | lit_dqn			{ TEX_DQN($1) }
+  | lit_uqn			{ TEX_UQN($1) }
+  | lit_fq			{ $1 }
+
+lit_fq:
+    lit_dq SUP lit		{ let base,downi = $1 in TEX_FQ(base,downi,$3) }
+  | lit_uq SUB lit		{ let base,upi = $1   in TEX_FQ(base,$3,upi) }
+  | lit_dqn SUP lit     { TEX_FQN($1, $3) }
+
+lit_uq:
+    lit SUP lit			{ $1,$3 }
+lit_dq:
+    lit SUB lit			{ $1,$3 }
+lit_uqn:
+    SUP lit             { $2 }
+lit_dqn:
+    SUB lit             { $2 }
+
+
+left:
+    LEFT DELIMITER		{ $2 }
+  | LEFT SQ_CLOSE		{ sq_close_ri }
+right:
+    RIGHT DELIMITER		{ $2 }
+  | RIGHT SQ_CLOSE		{ sq_close_ri }
+lit:
+    LITERAL			{ TEX_LITERAL $1 }
+  | DELIMITER			{ TEX_LITERAL $1 }
+  | BIG DELIMITER		{ TEX_BIG ($1,$2) }
+  | BIG SQ_CLOSE		{ TEX_BIG ($1,sq_close_ri) }
+  | left expr right		{ TEX_LR ($1,$3,$2) }
+  | FUN_AR1 lit			{ TEX_FUN1($1,$2) }
+  | FUN_AR1hl lit		{ let t,h=$1 in TEX_FUN1hl(t,h,$2) }
+  | FUN_AR1hf lit		{ let t,h=$1 in TEX_FUN1hf(t,h,$2) }
+  | FUN_AR1opt expr_nosqc SQ_CLOSE lit { TEX_FUN2sq($1,TEX_CURLY $2,$4) }
+  | FUN_AR2 lit lit		{ TEX_FUN2($1,$2,$3) }
+  | FUN_AR2nb lit lit		{ TEX_FUN2nb($1,$2,$3) }
+  | FUN_AR2h lit lit		{ let t,h=$1 in TEX_FUN2h(t,h,$2,$3) }
+  | BOX				{ let bt,s = $1 in TEX_BOX (bt,s) }
+  | CURLY_OPEN expr CURLY_CLOSE
+				{ TEX_CURLY $2 }
+  | CURLY_OPEN ne_expr FUN_INFIX ne_expr CURLY_CLOSE
+				{ TEX_INFIX($3,$2,$4) }
+  | CURLY_OPEN ne_expr FUN_INFIXh ne_expr CURLY_CLOSE
+				{ let t,h=$3 in TEX_INFIXh(t,h,$2,$4) }
+  | BEGIN__MATRIX  matrix END__MATRIX	{ TEX_MATRIX ("matrix", $2) }
+  | BEGIN_PMATRIX  matrix END_PMATRIX	{ TEX_MATRIX ("pmatrix", $2) }
+  | BEGIN_BMATRIX  matrix END_BMATRIX	{ TEX_MATRIX ("bmatrix", $2) }
+  | BEGIN_BBMATRIX matrix END_BBMATRIX	{ TEX_MATRIX ("Bmatrix", $2) }
+  | BEGIN_VMATRIX  matrix END_VMATRIX	{ TEX_MATRIX ("vmatrix", $2) }
+  | BEGIN_VVMATRIX matrix END_VVMATRIX	{ TEX_MATRIX ("Vmatrix", $2) }
+  | BEGIN_ARRAY    matrix END_ARRAY	    { TEX_MATRIX ("array", $2) }
+  | BEGIN_ALIGN    matrix END_ALIGN	    { TEX_MATRIX ("aligned", $2) }
+  | BEGIN_ALIGNAT  matrix END_ALIGNAT	{ TEX_MATRIX ("alignedat", $2) }
+  | BEGIN_SMALLMATRIX  matrix END_SMALLMATRIX { TEX_MATRIX ("smallmatrix", $2) }
+  | BEGIN_CASES    matrix END_CASES	{ TEX_MATRIX ("cases", $2) }
+matrix:
+    line			{ [$1] }
+  | line NEXT_ROW matrix	{ $1::$3 }
+line:
+    expr			{ [$1] }
+  | expr NEXT_CELL line		{ $1::$3 }
+;;
Index: /MediaWiki/branches/1.11/math/render.ml
===================================================================
--- /MediaWiki/branches/1.11/math/render.ml	(revision 1280)
+++ /MediaWiki/branches/1.11/math/render.ml	(revision 1280)
@@ -0,0 +1,40 @@
+let cmd_dvips tmpprefix = "dvips -R -E " ^ tmpprefix ^ ".dvi -f >" ^ tmpprefix ^ ".ps"
+let cmd_latex tmpprefix = "latex " ^ tmpprefix ^ ".tex >/dev/null"
+(* Putting -transparent white in converts arguments will sort-of give you transperancy *)
+let cmd_convert tmpprefix finalpath = "convert -quality 100 -density 120 " ^ tmpprefix ^ ".ps " ^ finalpath ^ " >/dev/null 2>/dev/null"
+(* Putting -bg Transparent in dvipng's arguments will give full-alpha transparency *)
+(* Note that IE have problems with such PNGs and need an additional javascript snippet *)
+(* Putting -bg transparent in dvipng's arguments will give binary transparency *)
+let cmd_dvipng tmpprefix finalpath = "dvipng -gamma 1.5 -D 120 -T tight --strict " ^ tmpprefix ^ ".dvi -o " ^ finalpath ^ " >/dev/null 2>/dev/null"
+
+exception ExternalCommandFailure of string
+
+let render tmppath finalpath outtex md5 =
+    let tmpprefix0 = (string_of_int (Unix.getpid ()))^"_"^md5 in
+    let tmpprefix = (tmppath^"/"^tmpprefix0) in
+    let unlink_all () =
+      begin
+        (* Commenting this block out will aid in debugging *)
+	Sys.remove (tmpprefix ^ ".dvi");
+	Sys.remove (tmpprefix ^ ".aux");
+	Sys.remove (tmpprefix ^ ".log");
+        Sys.remove (tmpprefix ^ ".tex");
+	if Sys.file_exists (tmpprefix ^ ".ps")
+	then Sys.remove (tmpprefix ^ ".ps");
+      end in
+    let f = (Util.open_out_unless_exists (tmpprefix ^ ".tex")) in
+      begin
+	output_string f (Texutil.get_preface ());
+	output_string f outtex;
+	output_string f (Texutil.get_footer ());
+	close_out f;
+	if Util.run_in_other_directory tmppath (cmd_latex tmpprefix0) != 0
+	then (unlink_all (); raise (ExternalCommandFailure "latex"))
+	else if (Sys.command (cmd_dvipng tmpprefix (finalpath^"/"^md5^".png")) != 0)
+	then (if (Sys.command (cmd_dvips tmpprefix) != 0)
+	then (unlink_all (); raise (ExternalCommandFailure "dvips"))
+	else if (Sys.command (cmd_convert tmpprefix (finalpath^"/"^md5^".png")) != 0)
+	then (unlink_all (); raise (ExternalCommandFailure "convert"))
+	else unlink_all ())
+	else unlink_all ()
+      end
Index: /MediaWiki/branches/1.11/math/render_info.mli
===================================================================
--- /MediaWiki/branches/1.11/math/render_info.mli	(revision 1280)
+++ /MediaWiki/branches/1.11/math/render_info.mli	(revision 1280)
@@ -0,0 +1,20 @@
+type font_force =
+    FONTFORCE_IT
+  | FONTFORCE_RM
+type font_class =
+    FONT_IT  (* IT default, may be forced to be RM *)
+  | FONT_RM  (* RM default, may be forced to be IT *)
+  | FONT_UF  (* not affected by IT/RM setting *)
+  | FONT_RTI (* RM - any, IT - not available in HTML *)
+  | FONT_UFH (* in TeX UF, in HTML RM *)
+type math_class =
+    MN
+  | MI
+  | MO
+type t =
+      HTMLABLEC of font_class * string * string
+    | HTMLABLEM of font_class * string * string
+    | HTMLABLE of font_class * string * string
+    | MHTMLABLEC of font_class * string * string * math_class * string
+    | HTMLABLE_BIG of string * string
+    | TEX_ONLY of string
Index: /MediaWiki/branches/1.11/math/tex.mli
===================================================================
--- /MediaWiki/branches/1.11/math/tex.mli	(revision 1280)
+++ /MediaWiki/branches/1.11/math/tex.mli	(revision 1280)
@@ -0,0 +1,23 @@
+type t =
+      TEX_LITERAL of Render_info.t
+    | TEX_CURLY of t list
+    | TEX_FQ of t * t * t
+    | TEX_DQ of t * t
+    | TEX_UQ of t * t
+    | TEX_FQN of t * t
+    | TEX_DQN of t
+    | TEX_UQN of t
+    | TEX_LR of Render_info.t * Render_info.t * t list
+    | TEX_BOX of string * string
+    | TEX_BIG of string * Render_info.t
+    | TEX_FUN1 of string * t
+    | TEX_FUN2 of string * t * t
+    | TEX_FUN2nb of string * t * t
+    | TEX_INFIX of string * t list * t list
+    | TEX_FUN2sq of string * t * t
+    | TEX_FUN1hl  of string * (string * string) * t
+    | TEX_FUN1hf  of string * Render_info.font_force * t
+    | TEX_FUN2h  of string * (t -> t -> string * string * string) * t * t
+    | TEX_INFIXh of string * (t list -> t list -> string * string * string) * t list * t list
+    | TEX_MATRIX of string * t list list list
+    | TEX_DECLh  of string * Render_info.font_force * t list
Index: /MediaWiki/branches/1.11/math/texutil.ml
===================================================================
--- /MediaWiki/branches/1.11/math/texutil.ml	(revision 1280)
+++ /MediaWiki/branches/1.11/math/texutil.ml	(revision 1280)
@@ -0,0 +1,720 @@
+open Parser
+open Render_info
+open Tex
+open Util
+
+let tex_part = function
+    HTMLABLE (_,t,_) -> t
+  | HTMLABLEM (_,t,_) -> t
+  | HTMLABLEC (_,t,_) -> t
+  | MHTMLABLEC (_,t,_,_,_) -> t
+  | HTMLABLE_BIG (t,_) -> t
+  | TEX_ONLY t -> t
+let rec render_tex = function
+    TEX_FQ (a,b,c) -> (render_tex a) ^ "_{" ^ (render_tex  b) ^ "}^{" ^ (render_tex  c) ^ "}"
+  | TEX_DQ (a,b) -> (render_tex a) ^ "_{" ^ (render_tex  b) ^ "}"
+  | TEX_UQ (a,b) -> (render_tex a) ^ "^{" ^ (render_tex  b) ^ "}"
+  | TEX_FQN (a,b) -> "_{" ^ (render_tex  a) ^ "}^{" ^ (render_tex  b) ^ "}"
+  | TEX_DQN (a) -> "_{" ^ (render_tex  a) ^ "}"
+  | TEX_UQN (a) -> "^{" ^ (render_tex  a) ^ "}"
+  | TEX_LITERAL s -> tex_part s
+  | TEX_FUN1 (f,a) -> "{" ^ f ^ " " ^ (render_tex a) ^ "}"
+  | TEX_FUN1hl (f,_,a) -> "{" ^ f ^ " " ^ (render_tex a) ^ "}"
+  | TEX_FUN1hf (f,_,a) -> "{" ^ f ^ " " ^ (render_tex a) ^ "}"
+  | TEX_DECLh (f,_,a) -> "{" ^ f ^ "{" ^ (mapjoin render_tex a) ^ "}}"
+  | TEX_FUN2 (f,a,b) -> "{" ^ f ^ " " ^ (render_tex a) ^ (render_tex b) ^ "}"
+  | TEX_FUN2nb (f,a,b) -> f ^ (render_tex a) ^ (render_tex b)
+  | TEX_FUN2h (f,_,a,b) -> "{" ^ f ^ " " ^ (render_tex a) ^ (render_tex b) ^ "}"
+  | TEX_FUN2sq (f,a,b) -> "{" ^ f ^ "[ " ^ (render_tex a) ^ "]" ^ (render_tex b) ^ "}"
+  | TEX_CURLY (tl) -> "{" ^ (mapjoin render_tex tl) ^ "}"
+  | TEX_INFIX (s,ll,rl) -> "{" ^ (mapjoin render_tex ll) ^ " " ^ s ^ "" ^ (mapjoin render_tex rl) ^ "}"
+  | TEX_INFIXh (s,_,ll,rl) -> "{" ^ (mapjoin render_tex ll) ^ " " ^ s ^ "" ^ (mapjoin render_tex rl) ^ "}"
+  | TEX_BOX (bt,s) -> "{"^bt^"{" ^ s ^ "}}"
+  | TEX_BIG (bt,d) -> "{"^bt^(tex_part d)^"}"
+  | TEX_MATRIX (t,rows) -> "{\\begin{"^t^"}"^(mapjoine "\\\\" (mapjoine "&" (mapjoin render_tex)) rows)^"\\end{"^t^"}}"
+  | TEX_LR (l,r,tl) -> "\\left "^(tex_part l)^(mapjoin render_tex tl)^"\\right "^(tex_part r)
+
+
+(* Dynamic loading*)
+type encoding_t = LATIN1 | LATIN2 | UTF8
+
+let modules_ams = ref false
+let modules_nonascii = ref false
+let modules_encoding = ref UTF8
+let modules_color = ref false
+
+let tex_use_ams ()     = modules_ams := true
+let tex_use_nonascii () = modules_nonascii := true
+let tex_use_color ()  = modules_color := true
+let tex_mod_reset ()   = (modules_ams := false; modules_nonascii := false; modules_encoding := UTF8; modules_color := false)
+
+let get_encoding = function
+    UTF8 -> "\\usepackage{ucs}\n\\usepackage[utf8]{inputenc}\n"
+  | LATIN1 -> "\\usepackage[latin1]{inputenc}\n"
+  | LATIN2 -> "\\usepackage[latin2]{inputenc}\n"
+
+let get_preface ()  = "\\nonstopmode\n\\documentclass[12pt]{article}\n" ^
+              (if !modules_nonascii then get_encoding !modules_encoding else "") ^
+              (if !modules_ams then "\\usepackage{amsmath}\n\\usepackage{amsfonts}\n\\usepackage{amssymb}\n" else "") ^
+              (if !modules_color then "\\usepackage[dvips,usenames]{color}\n" else "") ^
+              "\\pagestyle{empty}\n\\begin{document}\n$$\n"
+let get_footer  ()  = "\n$$\n\\end{document}\n"
+
+let set_encoding = function
+    "ISO-8859-1" -> modules_encoding := LATIN1
+  | "iso-8859-1" -> modules_encoding := LATIN1
+  | "ISO-8859-2" -> modules_encoding := LATIN2
+  | _ -> modules_encoding := UTF8
+
+(* Turn that into hash table lookup *)
+exception Illegal_tex_function of string
+
+let find = function
+      "\\alpha"            -> LITERAL (HTMLABLEC (FONT_UF,  "\\alpha ", "&alpha;"))
+    | "\\Alpha"            -> (tex_use_ams (); LITERAL (HTMLABLEC (FONT_UF,
+    "\\mathrm{A}", "&Alpha;")))
+    | "\\beta"             -> LITERAL (HTMLABLEC (FONT_UF,  "\\beta ",  "&beta;"))
+    | "\\Beta"             -> (tex_use_ams (); LITERAL (HTMLABLEC (FONT_UF,
+    "\\mathrm{B}",  "&Beta;")))
+    | "\\gamma"            -> LITERAL (HTMLABLEC (FONT_UF,  "\\gamma ", "&gamma;"))
+    | "\\Gamma"            -> LITERAL (HTMLABLEC (FONT_UF, "\\Gamma ", "&Gamma;"))
+    | "\\delta"            -> LITERAL (HTMLABLEC (FONT_UF,  "\\delta ", "&delta;"))
+    | "\\Delta"            -> LITERAL (HTMLABLEC (FONT_UF, "\\Delta ", "&Delta;"))
+    | "\\epsilon"          -> LITERAL (HTMLABLEC (FONT_UF,  "\\epsilon ", "&epsilon;"))
+    | "\\Epsilon"          -> (tex_use_ams (); LITERAL (HTMLABLEC (FONT_UF,
+    "\\mathrm{E}", "&Epsilon;")))
+    | "\\varepsilon"       -> LITERAL (TEX_ONLY "\\varepsilon ")
+    | "\\zeta"             -> LITERAL (HTMLABLEC (FONT_UF,  "\\zeta ", "&zeta;"))
+    | "\\Zeta"             -> (tex_use_ams (); LITERAL (HTMLABLEC (FONT_UF,
+    "\\mathrm{Z}", "&Zeta;")))
+    | "\\eta"              -> LITERAL (HTMLABLEC (FONT_UF,  "\\eta ", "&eta;"))
+    | "\\Eta"              -> (tex_use_ams (); LITERAL (HTMLABLEC (FONT_UF,
+    "\\mathrm{H}", "&Eta;")))
+    | "\\theta"            -> LITERAL (HTMLABLEC (FONT_UF,  "\\theta ", "&theta;"))
+    | "\\Theta"            -> LITERAL (HTMLABLEC (FONT_UF, "\\Theta ", "&Theta;"))
+    | "\\vartheta"         -> LITERAL (HTMLABLE  (FONT_UF,  "\\vartheta ", "&thetasym;"))
+    | "\\thetasym"         -> LITERAL (HTMLABLE  (FONT_UF,  "\\vartheta ", "&thetasym;"))
+    | "\\iota"             -> LITERAL (HTMLABLEC (FONT_UF,  "\\iota ", "&iota;"))
+    | "\\Iota"             -> (tex_use_ams (); LITERAL (HTMLABLEC (FONT_UF,
+    "\\mathrm{I}", "&Iota;")))
+    | "\\kappa"            -> LITERAL (HTMLABLEC (FONT_UF,  "\\kappa ", "&kappa;"))
+    | "\\Kappa"            -> (tex_use_ams (); LITERAL (HTMLABLEC (FONT_UF,
+    "\\mathrm{K}", "&Kappa;")))
+    | "\\lambda"           -> LITERAL (HTMLABLEC (FONT_UF,  "\\lambda ", "&lambda;"))
+    | "\\Lambda"           -> LITERAL (HTMLABLEC (FONT_UF, "\\Lambda ", "&Lambda;"))
+    | "\\mu"               -> LITERAL (HTMLABLEC (FONT_UF,  "\\mu ", "&mu;"))
+    | "\\Mu"               -> (tex_use_ams (); LITERAL (HTMLABLEC (FONT_UF,
+    "\\mathrm{M}", "&Mu;")))
+    | "\\nu"               -> LITERAL (HTMLABLEC (FONT_UF,  "\\nu ", "&nu;"))
+    | "\\Nu"               -> (tex_use_ams (); LITERAL (HTMLABLEC (FONT_UF,
+    "\\mathrm{N}", "&Nu;")))
+    | "\\pi"               -> LITERAL (HTMLABLEC (FONT_UF,  "\\pi ", "&pi;"))
+    | "\\Pi"               -> LITERAL (HTMLABLEC (FONT_UF, "\\Pi ", "&Pi;"))
+    | "\\varpi"            -> LITERAL (TEX_ONLY "\\varpi ")
+    | "\\rho"              -> LITERAL (HTMLABLEC (FONT_UF,  "\\rho ", "&rho;"))
+    | "\\Rho"              -> (tex_use_ams (); LITERAL (HTMLABLEC (FONT_UF,
+    "\\mathrm{P}", "&Rho;")))
+    | "\\varrho"           -> LITERAL (TEX_ONLY "\\varrho ")
+    | "\\sim"              -> LITERAL (HTMLABLEC (FONT_UF,  "\\sim ", "&tilde;"))
+    | "\\sigma"            -> LITERAL (HTMLABLEC (FONT_UF,  "\\sigma ", "&sigma;"))
+    | "\\Sigma"            -> LITERAL (HTMLABLEC (FONT_UF, "\\Sigma ", "&Sigma;"))
+    | "\\varsigma"         -> LITERAL (TEX_ONLY "\\varsigma ")
+    | "\\tau"              -> LITERAL (HTMLABLEC (FONT_UF,  "\\tau ", "&tau;"))
+    | "\\Tau"              -> (tex_use_ams (); LITERAL (HTMLABLEC (FONT_UF,
+    "\\mathrm{T}", "&Tau;")))
+    | "\\upsilon"          -> LITERAL (HTMLABLEC (FONT_UF,  "\\upsilon ", "&upsilon;"))
+    | "\\Upsilon"          -> LITERAL (HTMLABLEC (FONT_UF, "\\Upsilon ", "&Upsilon;"))
+    | "\\phi"              -> LITERAL (HTMLABLEC (FONT_UF,  "\\phi ", "&phi;"))
+    | "\\Phi"              -> LITERAL (HTMLABLEC (FONT_UF, "\\Phi ", "&Phi;"))
+    | "\\varphi"           -> LITERAL (TEX_ONLY "\\varphi ")
+    | "\\chi"              -> LITERAL (HTMLABLEC (FONT_UF,  "\\chi ", "&chi;"))
+    | "\\Chi"              -> (tex_use_ams (); LITERAL (HTMLABLEC (FONT_UF,
+    "\\mathrm{X}", "&Chi;")))
+    | "\\psi"              -> LITERAL (HTMLABLEC (FONT_UF,  "\\psi ", "&psi;"))
+    | "\\Psi"              -> LITERAL (HTMLABLEC (FONT_UF, "\\Psi ", "&Psi;"))
+    | "\\omega"            -> LITERAL (HTMLABLEC (FONT_UF,  "\\omega ", "&omega;"))
+    | "\\Omega"            -> LITERAL (HTMLABLEC (FONT_UF, "\\Omega ", "&Omega;"))
+    | "\\xi"               -> LITERAL (HTMLABLEC (FONT_UF,  "\\xi ", "&xi;"))
+    | "\\Xi"               -> LITERAL (HTMLABLEC (FONT_UF, "\\Xi ", "&Xi;"))
+    | "\\aleph"            -> LITERAL (HTMLABLE  (FONT_UF,  "\\aleph ", "&alefsym;"))
+    | "\\alef"             -> LITERAL (HTMLABLE  (FONT_UF,  "\\aleph ", "&alefsym;"))
+    | "\\alefsym"          -> LITERAL (HTMLABLE  (FONT_UF,  "\\aleph ", "&alefsym;"))
+    | "\\larr"             -> LITERAL (HTMLABLEM (FONT_UF,  "\\leftarrow ", "&larr;"))
+    | "\\leftarrow"        -> LITERAL (HTMLABLEM (FONT_UF,  "\\leftarrow ", "&larr;"))
+    | "\\rarr"             -> LITERAL (HTMLABLEM (FONT_UF,  "\\rightarrow ", "&rarr;"))
+    | "\\to"               -> LITERAL (HTMLABLEM (FONT_UF,  "\\to ", "&rarr;"))
+    | "\\gets"             -> LITERAL (HTMLABLEM (FONT_UF,  "\\gets ", "&larr;"))
+    | "\\rightarrow"       -> LITERAL (HTMLABLEM (FONT_UF,  "\\rightarrow ", "&rarr;"))
+    | "\\longleftarrow"    -> LITERAL (HTMLABLE  (FONT_UF,  "\\longleftarrow ", "&larr;"))
+    | "\\longrightarrow"   -> LITERAL (HTMLABLE  (FONT_UF,  "\\longrightarrow ", "&rarr;"))
+    | "\\Larr"             -> LITERAL (HTMLABLE  (FONT_UF,  "\\Leftarrow ", "&lArr;"))
+    | "\\lArr"             -> LITERAL (HTMLABLE  (FONT_UF,  "\\Leftarrow ", "&lArr;"))
+    | "\\Leftarrow"        -> LITERAL (HTMLABLE  (FONT_UF,  "\\Leftarrow ", "&lArr;"))
+    | "\\Rarr"             -> LITERAL (HTMLABLE  (FONT_UF,  "\\Rightarrow ", "&rArr;"))
+    | "\\rArr"             -> LITERAL (HTMLABLE  (FONT_UF,  "\\Rightarrow ", "&rArr;"))
+    | "\\Rightarrow"       -> LITERAL (HTMLABLEM (FONT_UF,  "\\Rightarrow ", "&rArr;"))
+    | "\\mapsto"           -> LITERAL (HTMLABLE  (FONT_UF,  "\\mapsto ", "&rarr;"))
+    | "\\longmapsto"       -> LITERAL (HTMLABLE  (FONT_UF,  "\\longmapsto ", "&rarr;"))
+    | "\\Longleftarrow"    -> LITERAL (HTMLABLE  (FONT_UF,  "\\Longleftarrow ", "&lArr;"))
+    | "\\Longrightarrow"   -> LITERAL (HTMLABLE  (FONT_UF,  "\\Longrightarrow ", "&rArr;"))
+    | "\\uarr"             -> DELIMITER (HTMLABLEM (FONT_UF,  "\\uparrow ", "&uarr;"))
+    | "\\uparrow"          -> DELIMITER (HTMLABLEM (FONT_UF,  "\\uparrow ", "&uarr;"))
+    | "\\uArr"             -> DELIMITER (HTMLABLE  (FONT_UF,  "\\Uparrow ", "&uArr;"))
+    | "\\Uarr"             -> DELIMITER (HTMLABLE  (FONT_UF,  "\\Uparrow ", "&uArr;"))
+    | "\\Uparrow"          -> DELIMITER (HTMLABLE  (FONT_UF,  "\\Uparrow ", "&uArr;"))
+    | "\\darr"             -> DELIMITER (HTMLABLEM (FONT_UF,  "\\downarrow ", "&darr;"))
+    | "\\downarrow"        -> DELIMITER (HTMLABLEM (FONT_UF,  "\\downarrow ", "&darr;"))
+    | "\\dArr"             -> DELIMITER (HTMLABLE  (FONT_UF,  "\\Downarrow ", "&dArr;"))
+    | "\\Darr"             -> DELIMITER (HTMLABLE  (FONT_UF,  "\\Downarrow ", "&dArr;"))
+    | "\\Downarrow"        -> DELIMITER (HTMLABLE  (FONT_UF,  "\\Downarrow ", "&dArr;"))
+    | "\\updownarrow"      -> DELIMITER (TEX_ONLY "\\updownarrow ")
+    | "\\Updownarrow"      -> DELIMITER (TEX_ONLY "\\Updownarrow ")
+    | "\\ulcorner"         -> (tex_use_ams (); DELIMITER (TEX_ONLY "\\ulcorner "))
+    | "\\urcorner"         -> (tex_use_ams (); DELIMITER (TEX_ONLY "\\urcorner "))
+    | "\\llcorner"         -> (tex_use_ams (); DELIMITER (TEX_ONLY "\\llcorner "))
+    | "\\lrcorner"         -> (tex_use_ams (); DELIMITER (TEX_ONLY "\\lrcorner "))
+    | "\\twoheadleftarrow" -> (tex_use_ams (); DELIMITER (TEX_ONLY "\\twoheadleftarrow "))
+    | "\\twoheadrightarrow" -> (tex_use_ams (); DELIMITER (TEX_ONLY "\\twoheadrightarrow "))
+    | "\\xleftarrow"       -> (tex_use_ams (); FUN_AR1 "\\xleftarrow ")
+    | "\\xrightarrow"       -> (tex_use_ams (); FUN_AR1 "\\xrightarrow ")
+    | "\\rightleftharpoons" -> DELIMITER (TEX_ONLY "\\rightleftharpoons ")
+    | "\\leftrightarrow"   -> LITERAL (HTMLABLE  (FONT_UF,  "\\leftrightarrow ", "&harr;"))
+    | "\\lrarr"            -> LITERAL (HTMLABLE  (FONT_UF,  "\\leftrightarrow ", "&harr;"))
+    | "\\harr"             -> LITERAL (HTMLABLE  (FONT_UF,  "\\leftrightarrow ", "&harr;"))
+    | "\\Leftrightarrow"   -> LITERAL (HTMLABLE  (FONT_UF,  "\\Leftrightarrow ", "&hArr;"))
+    | "\\Lrarr"            -> LITERAL (HTMLABLE  (FONT_UF,  "\\Leftrightarrow ", "&hArr;"))
+    | "\\Harr"             -> LITERAL (HTMLABLE  (FONT_UF,  "\\Leftrightarrow ", "&hArr;"))
+    | "\\lrArr"            -> LITERAL (HTMLABLE  (FONT_UF,  "\\Leftrightarrow ", "&hArr;"))
+    | "\\hAar"             -> LITERAL (HTMLABLE  (FONT_UF,  "\\Leftrightarrow ", "&hArr;"))
+    | "\\longleftrightarrow"->LITERAL (HTMLABLE  (FONT_UF,  "\\longleftrightarrow ", "&harr;"))
+    | "\\Longleftrightarrow"->LITERAL (HTMLABLE  (FONT_UF,  "\\Longleftrightarrow ", "&harr;"))
+    | "\\iff"              -> LITERAL (HTMLABLE  (FONT_UF,  "\\iff ", "&harr;"))
+    | "\\ll"		   -> LITERAL (TEX_ONLY "\\ll ")
+    | "\\gg"		   -> LITERAL (TEX_ONLY "\\gg ")
+    | "\\div"		   -> LITERAL (TEX_ONLY "\\div ")
+    | "\\searrow"          -> LITERAL (TEX_ONLY "\\searrow ")
+    | "\\nearrow"          -> LITERAL (TEX_ONLY "\\nearrow ")
+    | "\\swarrow"          -> LITERAL (TEX_ONLY "\\swarrow ")
+    | "\\nwarrow"          -> LITERAL (TEX_ONLY "\\nwarrow ")
+    | "\\simeq"            -> LITERAL (TEX_ONLY "\\simeq ")
+    | "\\ast"              -> LITERAL (TEX_ONLY "\\ast ")
+    | "\\star"             -> LITERAL (TEX_ONLY "\\star ")
+    | "\\ell"              -> LITERAL (TEX_ONLY "\\ell ")
+    | "\\P"                -> LITERAL (TEX_ONLY "\\P ")
+    | "\\smile"            -> LITERAL (TEX_ONLY "\\smile ")
+    | "\\frown"            -> LITERAL (TEX_ONLY "\\frown ")
+    | "\\bigcap"           -> LITERAL (TEX_ONLY "\\bigcap ")
+    | "\\bigodot"          -> LITERAL (TEX_ONLY "\\bigodot ")
+    | "\\bigcup"           -> LITERAL (TEX_ONLY "\\bigcup ")
+    | "\\bigotimes"        -> LITERAL (TEX_ONLY "\\bigotimes ")
+    | "\\coprod"           -> LITERAL (TEX_ONLY "\\coprod ")
+    | "\\bigsqcup"         -> LITERAL (TEX_ONLY "\\bigsqcup ")
+    | "\\bigoplus"         -> LITERAL (TEX_ONLY "\\bigoplus ")
+    | "\\bigvee"           -> LITERAL (TEX_ONLY "\\bigvee ")
+    | "\\biguplus"         -> LITERAL (TEX_ONLY "\\biguplus ")
+    | "\\oint"             -> LITERAL (TEX_ONLY "\\oint ")
+    | "\\bigwedge"         -> LITERAL (TEX_ONLY "\\bigwedge ")
+    | "\\models"           -> LITERAL (TEX_ONLY "\\models ")
+    | "\\vdash"            -> LITERAL (TEX_ONLY "\\vdash ")
+    | "\\triangle"         -> LITERAL (TEX_ONLY "\\triangle ")
+	| "\\bowtie"           -> LITERAL (TEX_ONLY "\\bowtie ")
+    | "\\wr"               -> LITERAL (TEX_ONLY "\\wr ")
+    | "\\triangleleft"     -> LITERAL (TEX_ONLY "\\triangleleft ")
+    | "\\triangleright"    -> LITERAL (TEX_ONLY "\\triangleright ")
+    | "\\textvisiblespace" -> LITERAL (TEX_ONLY "\\textvisiblespace ")
+    | "\\ker"              -> LITERAL (TEX_ONLY "\\ker ")
+    | "\\lim"              -> LITERAL (TEX_ONLY "\\lim ")
+    | "\\limsup"           -> LITERAL (TEX_ONLY "\\limsup ")
+    | "\\liminf"           -> LITERAL (TEX_ONLY "\\liminf ")
+    | "\\sup"              -> LITERAL (TEX_ONLY "\\sup ")
+    | "\\Pr"               -> LITERAL (TEX_ONLY "\\Pr ")
+    | "\\hom"              -> LITERAL (TEX_ONLY "\\hom ")
+    | "\\arg"              -> LITERAL (TEX_ONLY "\\arg ")
+    | "\\dim"              -> LITERAL (TEX_ONLY "\\dim ")
+    | "\\inf"              -> LITERAL (TEX_ONLY "\\inf ")
+    | "\\circ"             -> LITERAL (TEX_ONLY "\\circ ")
+    | "\\hbar"             -> LITERAL (TEX_ONLY "\\hbar ")
+    | "\\imath"            -> LITERAL (TEX_ONLY "\\imath ")
+    | "\\jmath"            -> LITERAL (TEX_ONLY "\\jmath ")
+    | "\\lnot"             -> LITERAL (TEX_ONLY "\\lnot ")
+    | "\\hookrightarrow"   -> LITERAL (TEX_ONLY "\\hookrightarrow ")
+    | "\\hookleftarrow"    -> LITERAL (TEX_ONLY "\\hookleftarrow ")
+    | "\\mp"               -> LITERAL (TEX_ONLY "\\mp ")
+    | "\\approx"           -> LITERAL (TEX_ONLY "\\approx ")
+    | "\\propto"           -> LITERAL (TEX_ONLY "\\propto ")
+    | "\\flat"             -> LITERAL (TEX_ONLY "\\flat ")
+    | "\\sharp"            -> LITERAL (TEX_ONLY "\\sharp ")
+    | "\\natural"          -> LITERAL (TEX_ONLY "\\natural ")
+    | "\\int"              -> LITERAL (HTMLABLE_BIG ("\\int ", "&int;"))
+    | "\\sum"              -> LITERAL (HTMLABLE_BIG ("\\sum ", "&sum;"))
+    | "\\prod"             -> LITERAL (HTMLABLE_BIG ("\\prod ", "&prod;"))
+    | "\\vdots"            -> LITERAL (TEX_ONLY "\\vdots ")
+    | "\\limits"           -> LITERAL (TEX_ONLY "\\limits ")
+    | "\\nolimits"         -> LITERAL (TEX_ONLY "\\nolimits ")
+    | "\\top"              -> LITERAL (TEX_ONLY "\\top ")
+    | "\\sin"              -> LITERAL (HTMLABLEC(FONT_UFH,"\\sin ","sin"))
+    | "\\cos"              -> LITERAL (HTMLABLEC(FONT_UFH,"\\cos ","cos"))
+    | "\\sinh"             -> LITERAL (HTMLABLEC(FONT_UFH,"\\sinh ","sinh"))
+    | "\\cosh"             -> LITERAL (HTMLABLEC(FONT_UFH,"\\cosh ","cosh"))
+    | "\\tan"              -> LITERAL (HTMLABLEC(FONT_UFH,"\\tan ","tan"))
+    | "\\tanh"             -> LITERAL (HTMLABLEC(FONT_UFH,"\\tanh ","tanh"))
+    | "\\sec"              -> LITERAL (HTMLABLEC(FONT_UFH,"\\sec ","sec"))
+    | "\\csc"              -> LITERAL (HTMLABLEC(FONT_UFH,"\\csc ","csc"))
+    | "\\arcsin"           -> LITERAL (HTMLABLEC(FONT_UFH,"\\arcsin ","arcsin"))
+    | "\\arctan"           -> LITERAL (HTMLABLEC(FONT_UFH,"\\arctan ","arctan"))
+    | "\\arccos"           -> (tex_use_ams (); LITERAL (HTMLABLEC(FONT_UFH,"\\mathop{\\mathrm{arccos}}","arccos")))
+    | "\\arccot"           -> (tex_use_ams (); LITERAL (HTMLABLEC(FONT_UFH,"\\mathop{\\mathrm{arccot}}","arccot")))
+    | "\\arcsec"           -> (tex_use_ams (); LITERAL (HTMLABLEC(FONT_UFH,"\\mathop{\\mathrm{arcsec}}","arcsec")))
+    | "\\arccsc"           -> (tex_use_ams (); LITERAL (HTMLABLEC(FONT_UFH,"\\mathop{\\mathrm{arccsc}}","arccsc")))
+    | "\\sgn"              -> (tex_use_ams (); LITERAL (HTMLABLEC(FONT_UFH,"\\mathop{\\mathrm{sgn}}","sgn")))
+    | "\\cot"              -> LITERAL (HTMLABLEC(FONT_UFH,"\\cot ","cot"))
+    | "\\coth"             -> LITERAL (HTMLABLEC(FONT_UFH,"\\coth ","coth"))
+    | "\\log"              -> LITERAL (HTMLABLEC(FONT_UFH,"\\log ", "log"))
+    | "\\lg"               -> LITERAL (HTMLABLEC(FONT_UFH,"\\lg ", "lg"))
+    | "\\ln"               -> LITERAL (HTMLABLEC(FONT_UFH,"\\ln ", "ln"))
+    | "\\exp"              -> LITERAL (HTMLABLEC(FONT_UFH,"\\exp ", "exp"))
+    | "\\min"              -> LITERAL (HTMLABLEC(FONT_UFH,"\\min ", "min"))
+    | "\\max"              -> LITERAL (HTMLABLEC(FONT_UFH,"\\max ", "max"))
+    | "\\gcd"              -> LITERAL (HTMLABLEC(FONT_UFH,"\\gcd ", "gcd"))
+    | "\\deg"              -> LITERAL (HTMLABLEC(FONT_UFH,"\\deg ", "deg"))
+    | "\\det"              -> LITERAL (HTMLABLEC(FONT_UFH,"\\det ", "det"))
+    | "\\bullet"           -> LITERAL (HTMLABLE (FONT_UFH, "\\bullet ", "&bull;"))
+    | "\\bull"             -> LITERAL (HTMLABLE (FONT_UFH, "\\bullet ", "&bull;"))
+    | "\\angle"            -> (tex_use_ams (); LITERAL (HTMLABLE (FONT_UF, "\\angle ", "&ang;")))
+    | "\\dagger"           -> LITERAL (HTMLABLEM(FONT_UFH, "\\dagger ", "&dagger;"))
+    | "\\ddagger"          -> LITERAL (HTMLABLEM(FONT_UFH, "\\ddagger ", "&Dagger;"))
+    | "\\Dagger"           -> LITERAL (HTMLABLEM(FONT_UFH, "\\ddagger ", "&Dagger;"))
+    | "\\colon"            -> LITERAL (HTMLABLEC(FONT_UFH, "\\colon ", ":"))
+    | "\\Vert"             -> DELIMITER (HTMLABLEM(FONT_UFH, "\\Vert ", "||"))
+    | "\\vert"             -> DELIMITER (HTMLABLEM(FONT_UFH, "\\vert ", "|"))
+    | "\\wp"               -> LITERAL (HTMLABLE (FONT_UF,  "\\wp ", "&weierp;"))
+    | "\\weierp"           -> LITERAL (HTMLABLE (FONT_UF,  "\\wp ", "&weierp;"))
+    | "\\wedge"            -> LITERAL (HTMLABLE (FONT_UF,  "\\wedge ", "&and;"))
+    | "\\and"              -> LITERAL (HTMLABLE (FONT_UF,  "\\land ", "&and;"))
+    | "\\land"             -> LITERAL (HTMLABLE (FONT_UF,  "\\land ", "&and;"))
+    | "\\vee"              -> LITERAL (HTMLABLE (FONT_UF,  "\\vee ", "&or;"))
+    | "\\or"               -> LITERAL (HTMLABLE (FONT_UF,  "\\lor ", "&or;"))
+    | "\\lor"              -> LITERAL (HTMLABLE (FONT_UF,  "\\lor ", "&or;"))
+    | "\\sub"              -> LITERAL (HTMLABLE (FONT_UF,  "\\subset ", "&sub;"))
+    | "\\supe"             -> LITERAL (HTMLABLE (FONT_UF,  "\\supseteq ", "&supe;"))
+    | "\\sube"             -> LITERAL (HTMLABLE (FONT_UF,  "\\subseteq ", "&sube;"))
+    | "\\supset"           -> LITERAL (HTMLABLE (FONT_UF,  "\\supset ", "&sup;"))
+    | "\\subset"           -> LITERAL (HTMLABLE (FONT_UF,  "\\subset ", "&sub;"))
+    | "\\supseteq"         -> LITERAL (HTMLABLE (FONT_UF,  "\\supseteq ", "&supe;"))
+    | "\\subseteq"         -> LITERAL (HTMLABLE (FONT_UF,  "\\subseteq ", "&sube;"))
+    | "\\sqsupset"         -> (tex_use_ams (); LITERAL (TEX_ONLY "\\sqsupset "))
+    | "\\sqsubset"         -> (tex_use_ams (); LITERAL (TEX_ONLY "\\sqsubset "))
+    | "\\sqsupseteq"       -> (tex_use_ams (); LITERAL (TEX_ONLY "\\sqsupseteq "))
+    | "\\sqsubseteq"       -> (tex_use_ams (); LITERAL (TEX_ONLY "\\sqsubseteq "))
+    | "\\perp"             -> LITERAL (HTMLABLE (FONT_UF,  "\\perp ", "&perp;"))
+    | "\\bot"              -> LITERAL (HTMLABLE (FONT_UF,  "\\bot ", "&perp;"))
+    | "\\lfloor"           -> DELIMITER (HTMLABLE (FONT_UF,  "\\lfloor ", "&lfloor;"))
+    | "\\rfloor"           -> DELIMITER (HTMLABLE (FONT_UF,  "\\rfloor ", "&rfloor;"))
+    | "\\lceil"            -> DELIMITER (HTMLABLE (FONT_UF,  "\\lceil ", "&lceil;"))
+    | "\\rceil"            -> DELIMITER (HTMLABLE (FONT_UF,  "\\rceil ", "&rceil;"))
+    | "\\lbrace"           -> DELIMITER (HTMLABLEC(FONT_UFH, "\\lbrace ", "{"))
+    | "\\rbrace"           -> DELIMITER (HTMLABLEC(FONT_UFH, "\\rbrace ", "}"))
+    | "\\infty"            -> LITERAL (HTMLABLEM(FONT_UF,  "\\infty ", "&infin;"))
+    | "\\infin"            -> LITERAL (HTMLABLEM(FONT_UF,  "\\infty ", "&infin;"))
+    | "\\isin"             -> LITERAL (HTMLABLE (FONT_UF,  "\\in ", "&isin;"))
+    | "\\in"               -> LITERAL (HTMLABLE (FONT_UF,  "\\in ", "&isin;"))
+    | "\\ni"               -> LITERAL (HTMLABLE (FONT_UF,  "\\ni ", "&ni;"))
+    | "\\notin"            -> LITERAL (HTMLABLE (FONT_UF,  "\\notin ", "&notin;"))
+    | "\\smallsetminus"    -> (tex_use_ams (); LITERAL (TEX_ONLY "\\smallsetminus "))
+    | "\\And"              -> (tex_use_ams (); LITERAL (HTMLABLEM(FONT_UFH, "\\And ", "&nbsp;&amp;&nbsp;")))
+    | "\\forall"           -> LITERAL (HTMLABLE (FONT_UFH, "\\forall ", "&forall;"))
+    | "\\exists"           -> LITERAL (HTMLABLE (FONT_UFH, "\\exists ", "&exist;"))
+    | "\\exist"            -> LITERAL (HTMLABLE (FONT_UFH, "\\exists ", "&exist;"))
+    | "\\equiv"            -> LITERAL (HTMLABLEM(FONT_UFH, "\\equiv ", "&equiv;"))
+    | "\\ne"               -> LITERAL (HTMLABLEM(FONT_UFH, "\\neq ", "&ne;"))
+    | "\\neq"              -> LITERAL (HTMLABLEM(FONT_UFH, "\\neq ", "&ne;"))
+    | "\\Re"               -> LITERAL (HTMLABLE (FONT_UF,  "\\Re ", "&real;"))
+    | "\\real"             -> LITERAL (HTMLABLE (FONT_UF,  "\\Re ", "&real;"))
+    | "\\Im"               -> LITERAL (HTMLABLE (FONT_UF,  "\\Im ", "&image;"))
+    | "\\image"            -> LITERAL (HTMLABLE (FONT_UF,  "\\Im ", "&image;"))
+    | "\\prime"            -> LITERAL (HTMLABLE (FONT_UFH,"\\prime ", "&prime;"))
+    | "\\backslash"        -> DELIMITER (HTMLABLEM(FONT_UFH,"\\backslash ", "\\"))
+    | "\\setminus"         -> LITERAL (HTMLABLEM(FONT_UFH,"\\setminus ", "\\"))
+    | "\\times"            -> LITERAL (HTMLABLEM(FONT_UFH,"\\times ", "&times;"))
+    | "\\pm"               -> LITERAL (HTMLABLEM(FONT_UFH,"\\pm ", "&plusmn;"))
+    | "\\plusmn"           -> LITERAL (HTMLABLEM(FONT_UFH,"\\pm ", "&plusmn;"))
+    | "\\cdot"             -> LITERAL (HTMLABLE (FONT_UFH,"\\cdot ", "&sdot;"))
+    | "\\AA"               -> LITERAL (HTMLABLE (FONT_UFH,"\\AA ", "&Aring;"))
+    | "\\cdots"            -> LITERAL (HTMLABLE (FONT_UFH,"\\cdots ", "&sdot;&sdot;&sdot;"))
+    | "\\sdot"             -> LITERAL (HTMLABLE (FONT_UFH,"\\cdot ", "&sdot;"))
+    | "\\oplus"            -> LITERAL (HTMLABLE (FONT_UF, "\\oplus ", "&oplus;"))
+    | "\\otimes"           -> LITERAL (HTMLABLE (FONT_UF, "\\otimes ", "&otimes;"))
+    | "\\cap"              -> LITERAL (HTMLABLEM(FONT_UF, "\\cap ", "&cap;"))
+    | "\\cup"              -> LITERAL (HTMLABLE (FONT_UF, "\\cup ", "&cup;"))
+    | "\\uplus"            -> LITERAL (TEX_ONLY "\\uplus ")
+    | "\\sqcap"            -> (tex_use_ams (); LITERAL (TEX_ONLY "\\sqcap "))
+    | "\\sqcup"            -> (tex_use_ams (); LITERAL (TEX_ONLY "\\sqcup "))
+    | "\\empty"            -> LITERAL (HTMLABLE (FONT_UF, "\\emptyset ", "&empty;"))
+    | "\\emptyset"         -> LITERAL (HTMLABLE (FONT_UF, "\\emptyset ", "&empty;"))
+    | "\\O"                -> LITERAL (HTMLABLE (FONT_UF, "\\emptyset ", "&empty;"))
+    | "\\S"                -> LITERAL (HTMLABLEM(FONT_UFH,"\\S ", "&sect;"))
+    | "\\sect"             -> LITERAL (HTMLABLEM(FONT_UFH,"\\S ", "&sect;"))
+    | "\\nabla"            -> LITERAL (HTMLABLE (FONT_UF, "\\nabla ", "&nabla;"))
+    | "\\geq"              -> LITERAL (HTMLABLE (FONT_UFH,"\\geq ", "&ge;"))
+    | "\\ge"               -> LITERAL (HTMLABLE (FONT_UFH,"\\geq ", "&ge;"))
+    | "\\leq"              -> LITERAL (HTMLABLE (FONT_UFH,"\\leq ", "&le;"))
+    | "\\le"               -> LITERAL (HTMLABLE (FONT_UFH,"\\leq ", "&le;"))
+    | "\\cong"             -> LITERAL (HTMLABLE (FONT_UF, "\\cong ", "&cong;"))
+    | "\\ang"              -> LITERAL (HTMLABLE (FONT_UF, "\\angle ", "&ang;"))
+    | "\\part"             -> LITERAL (HTMLABLEM(FONT_UF, "\\partial ", "&part;"))
+    | "\\partial"          -> LITERAL (HTMLABLEM(FONT_UF, "\\partial ", "&part;"))
+    | "\\ldots"            -> LITERAL (HTMLABLEM(FONT_UFH,"\\ldots ", "..."))
+    | "\\dots"             -> LITERAL (HTMLABLEM(FONT_UFH,"\\dots ", "..."))
+    | "\\quad"             -> LITERAL (HTMLABLE (FONT_UF, "\\quad ","&nbsp;&nbsp;"))
+    | "\\qquad"            -> LITERAL (HTMLABLE (FONT_UF, "\\qquad ","&nbsp;&nbsp;&nbsp;&nbsp;"))
+    | "\\mid"              -> LITERAL (HTMLABLEM(FONT_UFH,"\\mid ", " | "))
+    | "\\neg"              -> LITERAL (HTMLABLEM(FONT_UFH,"\\neg ", "&not;"))
+    | "\\langle"           -> DELIMITER (HTMLABLE (FONT_UFH,"\\langle ","&lang;"))
+    | "\\rangle"           -> DELIMITER (HTMLABLE (FONT_UFH,"\\rangle ","&rang;"))
+    | "\\lang"             -> DELIMITER (HTMLABLE (FONT_UFH,"\\langle ","&lang;"))
+    | "\\rang"             -> DELIMITER (HTMLABLE (FONT_UFH,"\\rangle ","&rang;"))
+    | "\\lbrack"           -> DELIMITER (HTMLABLEC(FONT_UFH,"[","["))
+    | "\\rbrack"           -> DELIMITER (HTMLABLEC(FONT_UFH,"]","]"))
+    | "\\surd"             -> LITERAL (TEX_ONLY "\\surd ")
+    | "\\ddots"            -> LITERAL (TEX_ONLY "\\ddots ")
+    | "\\clubs"            -> LITERAL (TEX_ONLY "\\clubsuit ")
+    | "\\clubsuit"         -> LITERAL (TEX_ONLY "\\clubsuit ")
+    | "\\spades"           -> LITERAL (TEX_ONLY "\\spadesuit ")
+    | "\\spadesuit"        -> LITERAL (TEX_ONLY "\\spadesuit ")
+    | "\\hearts"           -> LITERAL (TEX_ONLY "\\heartsuit ")
+    | "\\heartsuit"        -> LITERAL (TEX_ONLY "\\heartsuit ")
+    | "\\diamonds"         -> LITERAL (TEX_ONLY "\\diamondsuit ")
+    | "\\diamond"          -> LITERAL (TEX_ONLY "\\diamond ")
+    | "\\bigtriangleup"    -> LITERAL (TEX_ONLY "\\bigtriangleup ")
+    | "\\bigtriangledown"  -> LITERAL (TEX_ONLY "\\bigtriangledown ")
+    | "\\diamondsuit"      -> LITERAL (TEX_ONLY "\\diamondsuit ")
+    | "\\ominus"           -> LITERAL (TEX_ONLY "\\ominus ")
+    | "\\oslash"           -> LITERAL (TEX_ONLY "\\oslash ")
+    | "\\odot"             -> LITERAL (TEX_ONLY "\\odot ")
+    | "\\bigcirc"          -> LITERAL (TEX_ONLY "\\bigcirc ")
+    | "\\amalg"            -> LITERAL (TEX_ONLY "\\amalg ")
+    | "\\prec"             -> LITERAL (TEX_ONLY "\\prec ")
+    | "\\succ"             -> LITERAL (TEX_ONLY "\\succ ")
+    | "\\preceq"           -> LITERAL (TEX_ONLY "\\preceq ")
+    | "\\succeq"           -> LITERAL (TEX_ONLY "\\succeq ")
+    | "\\dashv"            -> LITERAL (TEX_ONLY "\\dashv ")
+    | "\\asymp"            -> LITERAL (TEX_ONLY "\\asymp ")
+    | "\\doteq"            -> LITERAL (TEX_ONLY "\\doteq ")
+    | "\\parallel"         -> LITERAL (TEX_ONLY "\\parallel ")
+    | "\\implies"          -> (tex_use_ams (); LITERAL (HTMLABLE (FONT_UF, "\\implies ", "&rArr;")))
+    | "\\mod"              -> (tex_use_ams (); LITERAL (HTMLABLE (FONT_UFH,"\\mod ", "mod")))
+    | "\\Diamond"          -> (tex_use_ams (); LITERAL (HTMLABLE (FONT_UF, "\\Diamond ", "&loz;")))
+    | "\\dotsb"            -> (tex_use_ams (); LITERAL (HTMLABLE (FONT_UF, "\\dotsb ", "&sdot;&sdot;&sdot;")))
+    | "\\reals"            -> (tex_use_ams (); LITERAL (HTMLABLE (FONT_UFH,"\\mathbb{R}", "<b>R</b>")))
+    | "\\Reals"            -> (tex_use_ams (); LITERAL (HTMLABLE (FONT_UFH,"\\mathbb{R}", "<b>R</b>")))
+    | "\\R"                -> (tex_use_ams (); LITERAL (HTMLABLE (FONT_UFH,"\\mathbb{R}", "<b>R</b>")))
+    | "\\cnums"            -> (tex_use_ams (); LITERAL (HTMLABLE (FONT_UFH,"\\mathbb{C}", "<b>C</b>")))
+    | "\\Complex"          -> (tex_use_ams (); LITERAL (HTMLABLE (FONT_UFH,"\\mathbb{C}", "<b>C</b>")))
+    | "\\Z"                -> (tex_use_ams (); LITERAL (HTMLABLE (FONT_UFH,"\\mathbb{Z}", "<b>Z</b>")))
+    | "\\natnums"          -> (tex_use_ams (); LITERAL (HTMLABLE (FONT_UFH,"\\mathbb{N}", "<b>N</b>")))
+    | "\\N"                -> (tex_use_ams (); LITERAL (HTMLABLE (FONT_UFH,"\\mathbb{N}", "<b>N</b>")))
+    | "\\lVert"            -> (tex_use_ams (); LITERAL (HTMLABLE (FONT_UFH,"\\lVert ", "||")))
+    | "\\rVert"            -> (tex_use_ams (); LITERAL (HTMLABLE (FONT_UFH,"\\rVert ", "||")))
+    | "\\nmid"             -> (tex_use_ams (); LITERAL (TEX_ONLY "\\nmid "))
+    | "\\lesssim"          -> (tex_use_ams (); LITERAL (TEX_ONLY "\\lesssim "))
+    | "\\ngeq"             -> (tex_use_ams (); LITERAL (TEX_ONLY "\\ngeq "))
+    | "\\smallsmile"       -> (tex_use_ams (); LITERAL (TEX_ONLY "\\smallsmile "))
+    | "\\smallfrown"       -> (tex_use_ams (); LITERAL (TEX_ONLY "\\smallfrown "))
+    | "\\nleftarrow"       -> (tex_use_ams (); LITERAL (TEX_ONLY "\\nleftarrow "))
+    | "\\nrightarrow"      -> (tex_use_ams (); LITERAL (TEX_ONLY "\\nrightarrow "))
+    | "\\trianglelefteq"   -> (tex_use_ams (); LITERAL (TEX_ONLY "\\trianglelefteq "))
+    | "\\trianglerighteq"  -> (tex_use_ams (); LITERAL (TEX_ONLY "\\trianglerighteq "))
+    | "\\square"           -> (tex_use_ams (); LITERAL (TEX_ONLY "\\square "))
+    | "\\checkmark"        -> (tex_use_ams (); LITERAL (TEX_ONLY "\\checkmark "))
+    | "\\supsetneq"        -> (tex_use_ams (); LITERAL (TEX_ONLY "\\supsetneq "))
+    | "\\subsetneq"        -> (tex_use_ams (); LITERAL (TEX_ONLY "\\subsetneq "))
+    | "\\Box"              -> (tex_use_ams (); LITERAL (TEX_ONLY "\\Box "))
+    | "\\nleq"             -> (tex_use_ams (); LITERAL (TEX_ONLY "\\nleq "))
+    | "\\upharpoonright"   -> (tex_use_ams (); LITERAL (TEX_ONLY "\\upharpoonright "))
+    | "\\restriction"      -> (tex_use_ams (); LITERAL (TEX_ONLY "\\upharpoonright "))
+    | "\\upharpoonleft"    -> (tex_use_ams (); LITERAL (TEX_ONLY "\\upharpoonleft "))
+    | "\\downharpoonright" -> (tex_use_ams (); LITERAL (TEX_ONLY "\\downharpoonright "))
+    | "\\downharpoonleft"  -> (tex_use_ams (); LITERAL (TEX_ONLY "\\downharpoonleft "))
+    | "\\rightharpoonup"   -> (tex_use_ams (); LITERAL (TEX_ONLY "\\rightharpoonup "))
+    | "\\rightharpoondown" -> (tex_use_ams (); LITERAL (TEX_ONLY "\\rightharpoondown "))
+    | "\\leftharpoonup"    -> (tex_use_ams (); LITERAL (TEX_ONLY "\\leftharpoonup "))
+    | "\\leftharpoondown"  -> (tex_use_ams (); LITERAL (TEX_ONLY "\\leftharpoondown "))
+    | "\\nless"            -> (tex_use_ams (); LITERAL (TEX_ONLY "\\nless "))
+    | "\\Vdash"            -> (tex_use_ams (); LITERAL (TEX_ONLY "\\Vdash "))
+    | "\\vDash"            -> (tex_use_ams (); LITERAL (TEX_ONLY "\\vDash "))
+    | "\\varkappa"         -> (tex_use_ams (); LITERAL (TEX_ONLY "\\varkappa "))
+    | "\\digamma"          -> (tex_use_ams (); LITERAL (TEX_ONLY "\\digamma "))
+    | "\\beth"             -> (tex_use_ams (); LITERAL (TEX_ONLY "\\beth "))
+    | "\\daleth"           -> (tex_use_ams (); LITERAL (TEX_ONLY "\\daleth "))
+    | "\\gimel"            -> (tex_use_ams (); LITERAL (TEX_ONLY "\\gimel "))
+    | "\\complement"       -> (tex_use_ams (); LITERAL (TEX_ONLY "\\complement "))
+    | "\\eth"              -> (tex_use_ams (); LITERAL (TEX_ONLY "\\eth "))
+    | "\\hslash"           -> (tex_use_ams (); LITERAL (TEX_ONLY "\\hslash "))
+    | "\\mho"              -> (tex_use_ams (); LITERAL (TEX_ONLY "\\mho "))
+    | "\\Finv"             -> (tex_use_ams (); LITERAL (TEX_ONLY "\\Finv "))
+    | "\\Game"             -> (tex_use_ams (); LITERAL (TEX_ONLY "\\Game "))
+    | "\\varlimsup"        -> (tex_use_ams (); LITERAL (TEX_ONLY "\\varlimsup "))
+    | "\\varliminf"        -> (tex_use_ams (); LITERAL (TEX_ONLY "\\varliminf "))
+    | "\\varinjlim"        -> (tex_use_ams (); LITERAL (TEX_ONLY "\\varinjlim "))
+    | "\\varprojlim"       -> (tex_use_ams (); LITERAL (TEX_ONLY "\\varprojlim "))
+    | "\\injlim"           -> (tex_use_ams (); LITERAL (TEX_ONLY "\\injlim "))
+    | "\\projlim"          -> (tex_use_ams (); LITERAL (TEX_ONLY "\\projlim "))
+    | "\\iint"             -> (tex_use_ams (); LITERAL (TEX_ONLY "\\iint "))
+    | "\\iiint"            -> (tex_use_ams (); LITERAL (TEX_ONLY "\\iiint "))
+    | "\\iiiint"           -> (tex_use_ams (); LITERAL (TEX_ONLY "\\iiiint "))
+    | "\\varnothing"       -> (tex_use_ams (); LITERAL (TEX_ONLY "\\varnothing "))
+    | "\\left"             -> LEFT
+    | "\\right"            -> RIGHT
+    | "\\hat"              -> FUN_AR1 "\\hat "
+    | "\\widehat"          -> LITERAL (TEX_ONLY "\\widehat ")
+    | "\\overline"         -> LITERAL (TEX_ONLY "\\overline ")
+    | "\\overbrace"        -> LITERAL (TEX_ONLY "\\overbrace ")
+    | "\\underline"        -> LITERAL (TEX_ONLY "\\underline ")
+    | "\\underbrace"       -> LITERAL (TEX_ONLY "\\underbrace ")
+    | "\\overleftarrow"    -> LITERAL (TEX_ONLY "\\overleftarrow ")
+    | "\\overrightarrow"   -> LITERAL (TEX_ONLY "\\overrightarrow ")
+    | "\\overleftrightarrow"->LITERAL (TEX_ONLY "\\overleftrightarrow ")
+    | "\\check"            -> FUN_AR1 "\\check "
+    | "\\acute"            -> FUN_AR1 "\\acute "
+    | "\\grave"            -> FUN_AR1 "\\grave "
+    | "\\bar"              -> FUN_AR1 "\\bar "
+    | "\\vec"              -> FUN_AR1 "\\vec "
+    | "\\dot"              -> FUN_AR1 "\\dot "
+    | "\\ddot"             -> FUN_AR1 "\\ddot "
+    | "\\breve"            -> FUN_AR1 "\\breve "
+    | "\\tilde"            -> FUN_AR1 "\\tilde "
+    | "\\not"              -> LITERAL (TEX_ONLY "\\not ")
+    | "\\choose"           -> FUN_INFIX "\\choose "
+    | "\\atop"             -> FUN_INFIX "\\atop "
+    | "\\binom"            -> (tex_use_ams (); FUN_AR2 "\\binom ")
+    | "\\dbinom"            -> (tex_use_ams (); FUN_AR2 "\\dbinom ")
+    | "\\tbinom"            -> (tex_use_ams (); FUN_AR2 "\\tbinom ")
+    | "\\stackrel"         -> FUN_AR2 "\\stackrel "
+    | "\\sideset"         -> (tex_use_ams (); FUN_AR2nb "\\sideset ")
+    | "\\underset"         -> (tex_use_ams (); FUN_AR2 "\\underset ")
+    | "\\overset"         -> (tex_use_ams (); FUN_AR2 "\\overset ")
+    | "\\frac"             -> FUN_AR2h ("\\frac ", fun num den -> Html.html_render [num], "<hr style=\"{background: black}\"/>", Html.html_render [den])
+    | "\\dfrac"             -> (tex_use_ams () ; FUN_AR2 "\\dfrac ")
+    | "\\tfrac"             -> (tex_use_ams () ; FUN_AR2h ("\\tfrac ", fun num den -> Html.html_render [num], "<hr style=\"background: black\">", Html.html_render [den]))
+    | "\\cfrac"            -> (tex_use_ams (); FUN_AR2h ("\\cfrac ", fun num den -> Html.html_render [num], "<hr style=\"{background: black}\">", Html.html_render [den]))
+    | "\\over"             -> FUN_INFIXh ("\\over ", fun num den -> Html.html_render num, "<hr style=\"{background: black}\"/>", Html.html_render den)
+    | "\\sqrt"             -> FUN_AR1 "\\sqrt "
+    | "\\pmod"             -> FUN_AR1hl ("\\pmod ", ("(mod ", ")"))
+    | "\\bmod"             -> FUN_AR1hl ("\\bmod ", ("mod ", ""))
+    | "\\emph"             -> FUN_AR1 "\\emph "
+    | "\\texttt"           -> FUN_AR1 "\\texttt "
+    | "\\textbf"           -> FUN_AR1 "\\textbf "
+    | "\\textit"           -> FUN_AR1hf ("\\textit ", FONTFORCE_IT)
+    | "\\textrm"           -> FUN_AR1hf ("\\textrm ", FONTFORCE_RM)
+    | "\\rm"               -> DECLh ("\\rm ", FONTFORCE_RM)
+    | "\\it"               -> DECLh ("\\it ", FONTFORCE_IT)
+    | "\\cal"              -> DECL "\\cal "
+    | "\\displaystyle"     -> LITERAL (TEX_ONLY  "\\displaystyle ")
+    | "\\scriptstyle"      -> LITERAL (TEX_ONLY "\\scriptstyle ")
+    | "\\textstyle"        -> LITERAL (TEX_ONLY "\\textstyle ")
+    | "\\scriptscriptstyle"-> LITERAL (TEX_ONLY "\\scriptscriptstyle ")
+    | "\\bf"               -> DECL "\\bf "
+    | "\\big"              -> BIG "\\big "
+    | "\\Big"              -> BIG "\\Big "
+    | "\\bigg"             -> BIG "\\bigg "
+    | "\\Bigg"             -> BIG "\\Bigg "
+    | "\\bigl"             -> (tex_use_ams ();BIG "\\bigl ")
+    | "\\bigr"             -> (tex_use_ams ();BIG "\\bigr ")
+    | "\\Bigl"             -> (tex_use_ams ();BIG "\\Bigl ")
+    | "\\Bigr"             -> (tex_use_ams ();BIG "\\Bigr ")
+    | "\\biggl"             -> (tex_use_ams ();BIG "\\biggl ")
+    | "\\biggr"             -> (tex_use_ams ();BIG "\\biggr ")
+    | "\\Biggl"             -> (tex_use_ams ();BIG "\\Biggl ")
+    | "\\Biggr"             -> (tex_use_ams ();BIG "\\Biggr ")
+    | "\\vartriangle"      -> (tex_use_ams (); LITERAL (TEX_ONLY "\\vartriangle "))
+    | "\\triangledown"     -> (tex_use_ams (); LITERAL (TEX_ONLY "\\triangledown "))
+    | "\\lozenge"          -> (tex_use_ams (); LITERAL (TEX_ONLY "\\lozenge "))
+    | "\\circledS"         -> (tex_use_ams (); LITERAL (TEX_ONLY "\\circledS "))
+    | "\\measuredangle"    -> (tex_use_ams (); LITERAL (TEX_ONLY "\\measuredangle "))
+    | "\\nexists"          -> (tex_use_ams (); LITERAL (TEX_ONLY "\\nexists "))
+    | "\\Bbbk"             -> (tex_use_ams (); LITERAL (TEX_ONLY "\\Bbbk "))
+    | "\\backprime"        -> (tex_use_ams (); LITERAL (TEX_ONLY "\\backprime "))
+    | "\\blacktriangle"    -> (tex_use_ams (); LITERAL (TEX_ONLY "\\blacktriangle "))
+    | "\\blacktriangledown"-> (tex_use_ams (); LITERAL (TEX_ONLY "\\blacktriangledown "))
+    | "\\blacksquare"      -> (tex_use_ams (); LITERAL (TEX_ONLY "\\blacksquare "))
+    | "\\blacklozenge"     -> (tex_use_ams (); LITERAL (TEX_ONLY "\\blacklozenge "))
+    | "\\bigstar"          -> (tex_use_ams (); LITERAL (TEX_ONLY "\\bigstar "))
+    | "\\sphericalangle"   -> (tex_use_ams (); LITERAL (TEX_ONLY "\\sphericalangle "))
+    | "\\diagup"           -> (tex_use_ams (); LITERAL (TEX_ONLY "\\diagup "))
+    | "\\diagdown"         -> (tex_use_ams (); LITERAL (TEX_ONLY "\\diagdown "))
+    | "\\dotplus"          -> (tex_use_ams (); LITERAL (TEX_ONLY "\\dotplus "))
+    | "\\Cap"              -> (tex_use_ams (); LITERAL (TEX_ONLY "\\Cap "))
+    | "\\doublecap"        -> (tex_use_ams (); LITERAL (TEX_ONLY "\\Cap "))
+    | "\\Cup"              -> (tex_use_ams (); LITERAL (TEX_ONLY "\\Cup "))
+    | "\\doublecup"        -> (tex_use_ams (); LITERAL (TEX_ONLY "\\Cup "))
+    | "\\barwedge"         -> (tex_use_ams (); LITERAL (TEX_ONLY "\\barwedge "))
+    | "\\veebar"           -> (tex_use_ams (); LITERAL (TEX_ONLY "\\veebar "))
+    | "\\doublebarwedge"   -> (tex_use_ams (); LITERAL (TEX_ONLY "\\doublebarwedge "))
+    | "\\boxminus"         -> (tex_use_ams (); LITERAL (TEX_ONLY "\\boxminus "))
+    | "\\boxtimes"         -> (tex_use_ams (); LITERAL (TEX_ONLY "\\boxtimes "))
+    | "\\boxdot"           -> (tex_use_ams (); LITERAL (TEX_ONLY "\\boxdot "))
+    | "\\boxplus"          -> (tex_use_ams (); LITERAL (TEX_ONLY "\\boxplus "))
+    | "\\divideontimes"    -> (tex_use_ams (); LITERAL (TEX_ONLY "\\divideontimes "))
+    | "\\ltimes"           -> (tex_use_ams (); LITERAL (TEX_ONLY "\\ltimes "))
+    | "\\rtimes"           -> (tex_use_ams (); LITERAL (TEX_ONLY "\\rtimes "))
+    | "\\leftthreetimes"   -> (tex_use_ams (); LITERAL (TEX_ONLY "\\leftthreetimes "))
+    | "\\rightthreetimes"  -> (tex_use_ams (); LITERAL (TEX_ONLY "\\rightthreetimes "))
+    | "\\curlywedge"       -> (tex_use_ams (); LITERAL (TEX_ONLY "\\curlywedge "))
+    | "\\curlyvee"         -> (tex_use_ams (); LITERAL (TEX_ONLY "\\curlyvee "))
+    | "\\circleddash"      -> (tex_use_ams (); LITERAL (TEX_ONLY "\\circleddash "))
+    | "\\circledast"       -> (tex_use_ams (); LITERAL (TEX_ONLY "\\circledast "))
+    | "\\circledcirc"      -> (tex_use_ams (); LITERAL (TEX_ONLY "\\circledcirc "))
+    | "\\centerdot"        -> (tex_use_ams (); LITERAL (TEX_ONLY "\\centerdot "))
+    | "\\intercal"         -> (tex_use_ams (); LITERAL (TEX_ONLY "\\intercal "))
+    | "\\leqq"             -> (tex_use_ams (); LITERAL (TEX_ONLY "\\leqq "))
+    | "\\leqslant"         -> (tex_use_ams (); LITERAL (TEX_ONLY "\\leqslant "))
+    | "\\eqslantless"      -> (tex_use_ams (); LITERAL (TEX_ONLY "\\eqslantless "))
+    | "\\lessapprox"       -> (tex_use_ams (); LITERAL (TEX_ONLY "\\lessapprox "))
+    | "\\approxeq"         -> (tex_use_ams (); LITERAL (TEX_ONLY "\\approxeq "))
+    | "\\lessdot"          -> (tex_use_ams (); LITERAL (TEX_ONLY "\\lessdot "))
+    | "\\lll"              -> (tex_use_ams (); LITERAL (TEX_ONLY "\\lll "))
+    | "\\lessgtr"          -> (tex_use_ams (); LITERAL (TEX_ONLY "\\lessgtr "))
+    | "\\lesseqgtr"        -> (tex_use_ams (); LITERAL (TEX_ONLY "\\lesseqgtr "))
+    | "\\lesseqqgtr"       -> (tex_use_ams (); LITERAL (TEX_ONLY "\\lesseqqgtr "))
+    | "\\doteqdot"         -> (tex_use_ams (); LITERAL (TEX_ONLY "\\doteqdot "))
+    | "\\Doteq"            -> (tex_use_ams (); LITERAL (TEX_ONLY "\\doteqdot "))
+    | "\\risingdotseq"     -> (tex_use_ams (); LITERAL (TEX_ONLY "\\risingdotseq "))
+    | "\\fallingdotseq"    -> (tex_use_ams (); LITERAL (TEX_ONLY "\\fallingdotseq "))
+    | "\\backsim"          -> (tex_use_ams (); LITERAL (TEX_ONLY "\\backsim "))
+    | "\\backsimeq"        -> (tex_use_ams (); LITERAL (TEX_ONLY "\\backsimeq "))
+    | "\\subseteqq"        -> (tex_use_ams (); LITERAL (TEX_ONLY "\\subseteqq "))
+    | "\\Subset"           -> (tex_use_ams (); LITERAL (TEX_ONLY "\\Subset "))
+    | "\\preccurlyeq"      -> (tex_use_ams (); LITERAL (TEX_ONLY "\\preccurlyeq "))
+    | "\\curlyeqprec"      -> (tex_use_ams (); LITERAL (TEX_ONLY "\\curlyeqprec "))
+    | "\\precsim"          -> (tex_use_ams (); LITERAL (TEX_ONLY "\\precsim "))
+    | "\\precapprox"       -> (tex_use_ams (); LITERAL (TEX_ONLY "\\precapprox "))
+    | "\\vartriangleleft"  -> (tex_use_ams (); LITERAL (TEX_ONLY "\\vartriangleleft "))
+    | "\\Vvdash"           -> (tex_use_ams (); LITERAL (TEX_ONLY "\\Vvdash "))
+    | "\\bumpeq"           -> (tex_use_ams (); LITERAL (TEX_ONLY "\\bumpeq "))
+    | "\\Bumpeq"           -> (tex_use_ams (); LITERAL (TEX_ONLY "\\Bumpeq "))
+    | "\\geqq"             -> (tex_use_ams (); LITERAL (TEX_ONLY "\\geqq "))
+    | "\\geqslant"         -> (tex_use_ams (); LITERAL (TEX_ONLY "\\geqslant "))
+    | "\\eqslantgtr"       -> (tex_use_ams (); LITERAL (TEX_ONLY "\\eqslantgtr "))
+    | "\\gtrsim"           -> (tex_use_ams (); LITERAL (TEX_ONLY "\\gtrsim "))
+    | "\\gtrapprox"        -> (tex_use_ams (); LITERAL (TEX_ONLY "\\gtrapprox "))
+    | "\\eqsim"            -> (tex_use_ams (); LITERAL (TEX_ONLY "\\eqsim "))
+    | "\\gtrdot"           -> (tex_use_ams (); LITERAL (TEX_ONLY "\\gtrdot "))
+    | "\\ggg"              -> (tex_use_ams (); LITERAL (TEX_ONLY "\\ggg "))
+    | "\\gggtr"            -> (tex_use_ams (); LITERAL (TEX_ONLY "\\ggg "))
+    | "\\gtrless"          -> (tex_use_ams (); LITERAL (TEX_ONLY "\\gtrless "))
+    | "\\gtreqless"        -> (tex_use_ams (); LITERAL (TEX_ONLY "\\gtreqless "))
+    | "\\gtreqqless"       -> (tex_use_ams (); LITERAL (TEX_ONLY "\\gtreqqless "))
+    | "\\eqcirc"           -> (tex_use_ams (); LITERAL (TEX_ONLY "\\eqcirc "))
+    | "\\circeq"           -> (tex_use_ams (); LITERAL (TEX_ONLY "\\circeq "))
+    | "\\triangleq"        -> (tex_use_ams (); LITERAL (TEX_ONLY "\\triangleq "))
+    | "\\thicksim"         -> (tex_use_ams (); LITERAL (TEX_ONLY "\\thicksim "))
+    | "\\thickapprox"      -> (tex_use_ams (); LITERAL (TEX_ONLY "\\thickapprox "))
+    | "\\supseteqq"        -> (tex_use_ams (); LITERAL (TEX_ONLY "\\supseteqq "))
+    | "\\Supset"           -> (tex_use_ams (); LITERAL (TEX_ONLY "\\Supset "))
+    | "\\succcurlyeq"      -> (tex_use_ams (); LITERAL (TEX_ONLY "\\succcurlyeq "))
+    | "\\curlyeqsucc"      -> (tex_use_ams (); LITERAL (TEX_ONLY "\\curlyeqsucc "))
+    | "\\succsim"          -> (tex_use_ams (); LITERAL (TEX_ONLY "\\succsim "))
+    | "\\succapprox"       -> (tex_use_ams (); LITERAL (TEX_ONLY "\\succapprox "))
+    | "\\vartriangleright" -> (tex_use_ams (); LITERAL (TEX_ONLY "\\vartriangleright "))
+    | "\\shortmid"         -> (tex_use_ams (); LITERAL (TEX_ONLY "\\shortmid "))
+    | "\\shortparallel"    -> (tex_use_ams (); LITERAL (TEX_ONLY "\\shortparallel "))
+    | "\\between"          -> (tex_use_ams (); LITERAL (TEX_ONLY "\\between "))
+    | "\\pitchfork"        -> (tex_use_ams (); LITERAL (TEX_ONLY "\\pitchfork "))
+    | "\\varpropto"        -> (tex_use_ams (); LITERAL (TEX_ONLY "\\varpropto "))
+    | "\\blacktriangleleft"-> (tex_use_ams (); LITERAL (TEX_ONLY "\\blacktriangleleft "))
+    | "\\therefore"        -> (tex_use_ams (); LITERAL (TEX_ONLY "\\therefore "))
+    | "\\backepsilon"      -> (tex_use_ams (); LITERAL (TEX_ONLY "\\backepsilon "))
+    | "\\blacktriangleright"-> (tex_use_ams (); LITERAL (TEX_ONLY "\\blacktriangleright "))
+    | "\\because"          -> (tex_use_ams (); LITERAL (TEX_ONLY "\\because "))
+    | "\\nleqslant"        -> (tex_use_ams (); LITERAL (TEX_ONLY "\\nleqslant "))
+    | "\\nleqq"            -> (tex_use_ams (); LITERAL (TEX_ONLY "\\nleqq "))
+    | "\\lneq"             -> (tex_use_ams (); LITERAL (TEX_ONLY "\\lneq "))
+    | "\\lneqq"            -> (tex_use_ams (); LITERAL (TEX_ONLY "\\lneqq "))
+    | "\\lvertneqq"        -> (tex_use_ams (); LITERAL (TEX_ONLY "\\lvertneqq "))
+    | "\\lnsim"            -> (tex_use_ams (); LITERAL (TEX_ONLY "\\lnsim "))
+    | "\\lnapprox"         -> (tex_use_ams (); LITERAL (TEX_ONLY "\\lnapprox "))
+    | "\\nprec"            -> (tex_use_ams (); LITERAL (TEX_ONLY "\\nprec "))
+    | "\\npreceq"          -> (tex_use_ams (); LITERAL (TEX_ONLY "\\npreceq "))
+    | "\\precneqq"         -> (tex_use_ams (); LITERAL (TEX_ONLY "\\precneqq "))
+    | "\\precnsim"         -> (tex_use_ams (); LITERAL (TEX_ONLY "\\precnsim "))
+    | "\\precnapprox"      -> (tex_use_ams (); LITERAL (TEX_ONLY "\\precnapprox "))
+    | "\\nsim"             -> (tex_use_ams (); LITERAL (TEX_ONLY "\\nsim "))
+    | "\\nshortmid"        -> (tex_use_ams (); LITERAL (TEX_ONLY "\\nshortmid "))
+    | "\\nvdash"           -> (tex_use_ams (); LITERAL (TEX_ONLY "\\nvdash "))
+    | "\\nVdash"           -> (tex_use_ams (); LITERAL (TEX_ONLY "\\nVdash "))
+    | "\\ntriangleleft"    -> (tex_use_ams (); LITERAL (TEX_ONLY "\\ntriangleleft "))
+    | "\\ntrianglelefteq"  -> (tex_use_ams (); LITERAL (TEX_ONLY "\\ntrianglelefteq "))
+    | "\\nsubseteq"        -> (tex_use_ams (); LITERAL (TEX_ONLY "\\nsubseteq "))
+    | "\\nsubseteqq"       -> (tex_use_ams (); LITERAL (TEX_ONLY "\\nsubseteqq "))
+    | "\\varsubsetneq"     -> (tex_use_ams (); LITERAL (TEX_ONLY "\\varsubsetneq "))
+    | "\\subsetneqq"       -> (tex_use_ams (); LITERAL (TEX_ONLY "\\subsetneqq "))
+    | "\\varsubsetneqq"    -> (tex_use_ams (); LITERAL (TEX_ONLY "\\varsubsetneqq "))
+    | "\\ngtr"             -> (tex_use_ams (); LITERAL (TEX_ONLY "\\ngtr "))
+    | "\\ngeqslant"        -> (tex_use_ams (); LITERAL (TEX_ONLY "\\ngeqslant "))
+    | "\\ngeqq"            -> (tex_use_ams (); LITERAL (TEX_ONLY "\\ngeqq "))
+    | "\\gneq"             -> (tex_use_ams (); LITERAL (TEX_ONLY "\\gneq "))
+    | "\\gneqq"            -> (tex_use_ams (); LITERAL (TEX_ONLY "\\gneqq "))
+    | "\\gvertneqq"        -> (tex_use_ams (); LITERAL (TEX_ONLY "\\gvertneqq "))
+    | "\\gnsim"            -> (tex_use_ams (); LITERAL (TEX_ONLY "\\gnsim "))
+    | "\\gnapprox"         -> (tex_use_ams (); LITERAL (TEX_ONLY "\\gnapprox "))
+    | "\\nsucc"            -> (tex_use_ams (); LITERAL (TEX_ONLY "\\nsucc "))
+    | "\\nsucceq"          -> (tex_use_ams (); LITERAL (TEX_ONLY "\\nsucceq "))
+    | "\\succneqq"         -> (tex_use_ams (); LITERAL (TEX_ONLY "\\succneqq "))
+    | "\\succnsim"         -> (tex_use_ams (); LITERAL (TEX_ONLY "\\succnsim "))
+    | "\\succnapprox"      -> (tex_use_ams (); LITERAL (TEX_ONLY "\\succnapprox "))
+    | "\\ncong"            -> (tex_use_ams (); LITERAL (TEX_ONLY "\\ncong "))
+    | "\\nshortparallel"   -> (tex_use_ams (); LITERAL (TEX_ONLY "\\nshortparallel "))
+    | "\\nparallel"        -> (tex_use_ams (); LITERAL (TEX_ONLY "\\nparallel "))
+    | "\\nvDash"           -> (tex_use_ams (); LITERAL (TEX_ONLY "\\nvDash "))
+    | "\\nVDash"           -> (tex_use_ams (); LITERAL (TEX_ONLY "\\nVDash "))
+    | "\\ntriangleright"   -> (tex_use_ams (); LITERAL (TEX_ONLY "\\ntriangleright "))
+    | "\\ntrianglerighteq" -> (tex_use_ams (); LITERAL (TEX_ONLY "\\ntrianglerighteq "))
+    | "\\nsupseteq"        -> (tex_use_ams (); LITERAL (TEX_ONLY "\\nsupseteq "))
+    | "\\nsupseteqq"       -> (tex_use_ams (); LITERAL (TEX_ONLY "\\nsupseteqq "))
+    | "\\varsupsetneq"     -> (tex_use_ams (); LITERAL (TEX_ONLY "\\varsupsetneq "))
+    | "\\supsetneqq"       -> (tex_use_ams (); LITERAL (TEX_ONLY "\\supsetneqq "))
+    | "\\varsupsetneqq"    -> (tex_use_ams (); LITERAL (TEX_ONLY "\\varsupsetneqq "))
+    | "\\leftleftarrows"   -> (tex_use_ams (); LITERAL (TEX_ONLY "\\leftleftarrows "))
+    | "\\leftrightarrows"  -> (tex_use_ams (); LITERAL (TEX_ONLY "\\leftrightarrows "))
+    | "\\Lleftarrow"       -> (tex_use_ams (); LITERAL (TEX_ONLY "\\Lleftarrow "))
+    | "\\leftarrowtail"    -> (tex_use_ams (); LITERAL (TEX_ONLY "\\leftarrowtail "))
+    | "\\looparrowleft"    -> (tex_use_ams (); LITERAL (TEX_ONLY "\\looparrowleft "))
+    | "\\leftrightharpoons"-> (tex_use_ams (); LITERAL (TEX_ONLY "\\leftrightharpoons "))
+    | "\\curvearrowleft"   -> (tex_use_ams (); LITERAL (TEX_ONLY "\\curvearrowleft "))
+    | "\\circlearrowleft"  -> (tex_use_ams (); LITERAL (TEX_ONLY "\\circlearrowleft "))
+    | "\\Lsh"              -> (tex_use_ams (); LITERAL (TEX_ONLY "\\Lsh "))
+    | "\\upuparrows"       -> (tex_use_ams (); LITERAL (TEX_ONLY "\\upuparrows "))
+    | "\\rightrightarrows" -> (tex_use_ams (); LITERAL (TEX_ONLY "\\rightrightarrows "))
+    | "\\rightleftarrows"  -> (tex_use_ams (); LITERAL (TEX_ONLY "\\rightleftarrows "))
+    | "\\Rrightarrow"      -> (tex_use_ams (); LITERAL (TEX_ONLY "\\Rrightarrow "))
+    | "\\rightarrowtail"   -> (tex_use_ams (); LITERAL (TEX_ONLY "\\rightarrowtail "))
+    | "\\looparrowright"   -> (tex_use_ams (); LITERAL (TEX_ONLY "\\looparrowright "))
+    | "\\curvearrowright"  -> (tex_use_ams (); LITERAL (TEX_ONLY "\\curvearrowright "))
+    | "\\circlearrowright" -> (tex_use_ams (); LITERAL (TEX_ONLY "\\circlearrowright "))
+    | "\\Rsh"              -> (tex_use_ams (); LITERAL (TEX_ONLY "\\Rsh "))
+    | "\\downdownarrows"   -> (tex_use_ams (); LITERAL (TEX_ONLY "\\downdownarrows "))
+    | "\\multimap"         -> (tex_use_ams (); LITERAL (TEX_ONLY "\\multimap "))
+    | "\\leftrightsquigarrow"-> (tex_use_ams (); LITERAL (TEX_ONLY "\\leftrightsquigarrow "))
+    | "\\rightsquigarrow"  -> (tex_use_ams (); LITERAL (TEX_ONLY "\\rightsquigarrow "))
+    | "\\nLeftarrow"       -> (tex_use_ams (); LITERAL (TEX_ONLY "\\nLeftarrow "))
+    | "\\nleftrightarrow"  -> (tex_use_ams (); LITERAL (TEX_ONLY "\\nleftrightarrow "))
+    | "\\nRightarrow"      -> (tex_use_ams (); LITERAL (TEX_ONLY "\\nRightarrow "))
+    | "\\nLeftrightarrow"  -> (tex_use_ams (); LITERAL (TEX_ONLY "\\nLeftrightarrow "))
+    | "\\mathit"           -> (tex_use_ams (); FUN_AR1hf ("\\mathit ", FONTFORCE_IT))
+    | "\\mathrm"           -> (tex_use_ams (); FUN_AR1hf ("\\mathrm ", FONTFORCE_RM))
+    | "\\mathop"           -> (tex_use_ams (); FUN_AR1 "\\mathop ")
+    | "\\boldsymbol"       -> (tex_use_ams (); FUN_AR1 "\\boldsymbol ")
+    | "\\bold"             -> (tex_use_ams (); FUN_AR1 "\\mathbf ")
+    | "\\Bbb"              -> (tex_use_ams (); FUN_AR1 "\\mathbb ")
+    | "\\mathbf"           -> (tex_use_ams (); FUN_AR1 "\\mathbf ")
+    | "\\mathsf"           -> (tex_use_ams (); FUN_AR1 "\\mathsf ")
+    | "\\mathcal"          -> (tex_use_ams (); FUN_AR1 "\\mathcal ")
+    | "\\mathbb"           -> (tex_use_ams (); FUN_AR1 "\\mathbb ")
+    | "\\mathfrak"         -> (tex_use_ams (); FUN_AR1 "\\mathfrak ")
+    | "\\operatorname"     -> (tex_use_ams (); FUN_AR1 "\\operatorname ")
+    | "\\text"             -> raise (Failure "malformatted \\text")
+    | "\\mbox"             -> raise (Failure "malformatted \\mbox")
+    | "\\vbox"             -> raise (Failure "malformatted \\vbox")
+    | "\\hbox"             -> raise (Failure "malformatted \\hbox")
+    | "\\color"            -> (tex_use_color (); LITERAL (TEX_ONLY "\\color"))
+    | s                    -> raise (Illegal_tex_function s)
Index: /MediaWiki/branches/1.11/math/texutil.mli
===================================================================
--- /MediaWiki/branches/1.11/math/texutil.mli	(revision 1280)
+++ /MediaWiki/branches/1.11/math/texutil.mli	(revision 1280)
@@ -0,0 +1,11 @@
+val render_tex : Tex.t -> string
+
+val set_encoding : string -> unit
+val tex_use_nonascii: unit -> unit
+val tex_use_ams: unit -> unit
+
+val get_preface : unit -> string
+val get_footer : unit -> string
+
+exception Illegal_tex_function of string
+val find: string -> Parser.token
Index: /MediaWiki/branches/1.11/math/texvc.ml
===================================================================
--- /MediaWiki/branches/1.11/math/texvc.ml	(revision 1280)
+++ /MediaWiki/branches/1.11/math/texvc.ml	(revision 1280)
@@ -0,0 +1,34 @@
+exception LexerException of string
+let lexer_token_safe lexbuf =
+    try Lexer.token lexbuf
+    with Failure s -> raise (LexerException s)
+
+let render tmppath finalpath tree =
+    let outtex = Util.mapjoin Texutil.render_tex tree in
+    let md5 = Digest.to_hex (Digest.string outtex) in
+    begin
+	let mathml = Mathml.render tree
+	and html = Html.render tree
+	in print_string (match (html,!Html.conservativeness,mathml) with
+	    None,_,None -> "+" ^ md5 
+	  | Some h,Html.CONSERVATIVE,None -> "c" ^ md5  ^ h
+	  | Some h,Html.MODERATE,None -> "m" ^ md5  ^ h
+	  | Some h,Html.LIBERAL,None -> "l" ^ md5  ^ h
+	  | Some h,Html.CONSERVATIVE,Some m -> "C" ^ md5  ^ h ^ "\000" ^ m
+	  | Some h,Html.MODERATE,Some m -> "M" ^ md5  ^ h ^ "\000" ^ m
+	  | Some h,Html.LIBERAL,Some m -> "L" ^ md5 ^ h ^ "\000" ^ m
+	  | None,_,Some m -> "X" ^ md5   ^ m
+	);
+	Render.render tmppath finalpath outtex md5
+    end
+let _ =
+    Texutil.set_encoding (try Sys.argv.(4) with _ -> "UTF-8");
+    try render Sys.argv.(1) Sys.argv.(2) (Parser.tex_expr lexer_token_safe (Lexing.from_string Sys.argv.(3)))
+    with Parsing.Parse_error -> print_string "S"
+       | LexerException _ -> print_string "E"
+       | Texutil.Illegal_tex_function s -> print_string ("F" ^ s)
+       | Util.FileAlreadyExists -> print_string "-"
+       | Invalid_argument _ -> print_string "-"
+       | Failure _ -> print_string "-"
+       | Render.ExternalCommandFailure s -> ()
+       | _ -> print_string "-"
Index: /MediaWiki/branches/1.11/math/texvc_cgi.ml
===================================================================
--- /MediaWiki/branches/1.11/math/texvc_cgi.ml	(revision 1280)
+++ /MediaWiki/branches/1.11/math/texvc_cgi.ml	(revision 1280)
@@ -0,0 +1,62 @@
+open Netcgi;;
+open Netcgi_types;;
+open Netcgi_env;;
+open Netchannels;;
+
+let cgi = new Netcgi.std_activation ()
+let out = cgi # output # output_string
+let math = cgi # argument_value ~default:"" "math"
+let tmppath = "/home/taw/public_html/wiki/tmp/"
+let finalpath = "/home/taw/public_html/wiki/math/"
+let finalurl = "http://wroclaw.taw.pl.eu.org/~taw/wiki/math/"
+;;
+
+let h_header = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\""^
+	     " \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"^
+	     "<html><head><title>texvc</title></head><body>"^
+	     "<form method=post action=\"http://wroclaw.taw.pl.eu.org/~taw/cgi-bin/newcodebase/math/texvc_cgi\">"^
+	     "<textarea name='math' rows=10 cols=80>"
+let h_middle = "</textarea><br /><input type=submit value=\"Preview\" name='preview'></form>"
+let h_footer = "</body></html>\n"
+
+let render tmppath finalpath tree =
+    let outtex = Texutil.mapjoin Texutil.print tree in
+    let md5 = Digest.to_hex (Digest.string outtex) in
+    begin
+	out "<h3>TeX</h3>";
+        out outtex; (* <, &  and > should be protected *)
+	(try out ("<h3>HTML</h3>" ^ (Texutil.html_render tree))
+         with _ -> out "<h3>HTML could not be rendered</h3>");
+	try  Render.render tmppath finalpath outtex md5;
+	    out ("<h3>Image:</h3><img src=\""^finalurl^md5^".png\">")
+	with Util.FileAlreadyExists -> out ("<h3>Image:</h3><img src=\""^finalurl^md5^".png\">")
+           | Failure s -> out ("<h3>Other failure: " ^ s ^ "</h3>")
+	   | Render.ExternalCommandFailure "latex" -> out "<h3>latex failed</h3>"
+	   | Render.ExternalCommandFailure "dvips" -> out "<h3>dvips failed</h3>"
+           | _ ->  out "<h3>Other failure</h3>"
+    end
+;;
+
+cgi#set_header ();;
+
+out h_header;;
+out math;;
+out h_middle;;
+
+exception LexerException of string
+let lexer_token_safe lexbuf =
+    try Lexer.token lexbuf
+    with Failure s -> raise (LexerException s)
+;;
+if math = ""
+then ()
+else try
+	render tmppath finalpath (Parser.tex_expr lexer_token_safe (Lexing.from_string math))
+    with Parsing.Parse_error -> out "<h3>Parse error</h3>"
+       | LexerException s -> out "<h3>Lexing failure</h3>"
+       | Texutil.Illegal_tex_function s -> out ("<h3>Illegal TeX function: " ^ s ^ "</h3>")
+       | Failure s -> out ("<h3>Other failure: " ^ s ^ "</h3>")
+       | _ -> out "<h3>Other failure</h3>"
+;;
+
+out h_footer
Index: /MediaWiki/branches/1.11/math/texvc_test.ml
===================================================================
--- /MediaWiki/branches/1.11/math/texvc_test.ml	(revision 1280)
+++ /MediaWiki/branches/1.11/math/texvc_test.ml	(revision 1280)
@@ -0,0 +1,24 @@
+exception LexerException of string
+let lexer_token_safe lexbuf =
+    try Lexer.token lexbuf
+    with Failure s -> raise (LexerException s)
+
+let rec foo () =
+    try
+	let line = input_line stdin in
+	(try
+	    let tree = Parser.tex_expr lexer_token_safe (Lexing.from_string line) in
+	    (match Html.render tree with
+		Some _ -> print_string "$^\n"
+	      | None -> print_string "$_\n";
+	    )
+        with
+	    Texutil.Illegal_tex_function s -> print_string ("$T" ^ s ^ " " ^ line ^ "\n")
+	  | LexerException s		   -> print_string ("$L" ^ line ^ "\n")
+	  | _ 				   -> print_string ("$ " ^ line ^ "\n"));
+	flush stdout;
+	foo ();
+    with
+	End_of_file -> ()
+;;
+foo ();;
Index: /MediaWiki/branches/1.11/math/texvc_tex.ml
===================================================================
--- /MediaWiki/branches/1.11/math/texvc_tex.ml	(revision 1280)
+++ /MediaWiki/branches/1.11/math/texvc_tex.ml	(revision 1280)
@@ -0,0 +1,3 @@
+Texutil.set_encoding (try Sys.argv.(2) with _ -> "UTF-8");
+try print_string (Util.mapjoin Texutil.render_tex (Parser.tex_expr Lexer.token (Lexing.from_string Sys.argv.(1))))
+with _ -> ()
Index: /MediaWiki/branches/1.11/math/util.ml
===================================================================
--- /MediaWiki/branches/1.11/math/util.ml	(revision 1280)
+++ /MediaWiki/branches/1.11/math/util.ml	(revision 1280)
@@ -0,0 +1,17 @@
+let mapjoin f l = (List.fold_left (fun a b -> a ^ (f b)) "" l)
+let mapjoine e f = function
+    [] -> ""
+  | h::t -> (List.fold_left (fun a b -> a ^ e ^ (f b)) (f h) t)
+
+exception FileAlreadyExists
+let open_out_unless_exists path =
+    if Sys.file_exists path
+    then raise FileAlreadyExists
+    else open_out path
+
+let run_in_other_directory tmppath cmd =
+    let prevdir = Sys.getcwd () in(
+	Sys.chdir tmppath;
+	let retval = Sys.command cmd in
+	    (Sys.chdir prevdir; retval)
+    )
Index: /MediaWiki/branches/1.11/opensearch_desc.php
===================================================================
--- /MediaWiki/branches/1.11/opensearch_desc.php	(revision 1280)
+++ /MediaWiki/branches/1.11/opensearch_desc.php	(revision 1280)
@@ -0,0 +1,45 @@
+<?php
+
+/**
+ * Generate an OpenSearch description file
+ */
+
+require_once( dirname(__FILE__) . '/includes/WebStart.php' );
+require_once( dirname(__FILE__) . '/languages/Names.php' );
+$fullName = "$wgSitename ({$wgLanguageNames[$wgLanguageCode]})";
+$shortName = htmlspecialchars( mb_substr( $fullName, 0, 24 ) );
+$siteName = htmlspecialchars( $fullName );
+
+if ( !preg_match( '/^https?:/', $wgFavicon ) ) {
+	$favicon = htmlspecialchars( $wgServer . $wgFavicon );
+} else {
+	$favicon = htmlspecialchars( $wgFavicon );
+}
+
+$title = SpecialPage::getTitleFor( 'Search' );
+$template = $title->escapeFullURL( 'search={searchTerms}' );
+
+$suggest = htmlspecialchars($wgServer . $wgScriptPath . '/api.php?action=opensearch&search={searchTerms}');
+
+
+$response = $wgRequest->response();
+$response->header( 'Content-type: application/opensearchdescription+xml' );
+
+# Set an Expires header so that squid can cache it for a short time
+# Short enough so that the sysadmin barely notices when $wgSitename is changed
+$expiryTime = 300; # 5 minutes
+$response->header( 'Expires: ' . gmdate( 'D, d M Y H:i:s', time() + $expiryTime ) . ' GMT' );
+
+echo <<<EOT
+<?xml version="1.0"?>
+<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/">
+<ShortName>$shortName</ShortName>
+<Description>$siteName</Description>
+<Image height="16" width="16" type="image/x-icon">$favicon</Image>
+<Url type="text/html" method="get" template="$template"/>
+<Url type="application/x-suggestions+json" method="GET" template="$suggest"/>
+</OpenSearchDescription>
+EOT;
+
+
+?>
Index: /MediaWiki/branches/1.11/profileinfo.php
===================================================================
--- /MediaWiki/branches/1.11/profileinfo.php	(revision 1280)
+++ /MediaWiki/branches/1.11/profileinfo.php	(revision 1280)
@@ -0,0 +1,247 @@
+<!--
+     Show profiling data.
+
+     Copyright 2005 Kate Turner.
+
+     Permission is hereby granted, free of charge, to any person obtaining a copy
+     of this software and associated documentation files (the "Software"), to deal
+     in the Software without restriction, including without limitation the rights
+     to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+     copies of the Software, and to permit persons to whom the Software is
+     furnished to do so, subject to the following conditions:
+
+     The above copyright notice and this permission notice shall be included in
+     all copies or substantial portions of the Software.
+
+     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+     IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+     FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+     AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+     LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+     OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+     SOFTWARE.
+
+-->
+<html>
+<head>
+<title>Profiling data</title>
+<style type="text/css">
+	th {
+		text-align: left;
+		border-bottom: solid 1px black;
+	}
+
+	th, td {
+		padding-left: 0.5em;
+		padding-right: 0.5em;
+	}
+
+	td.time, td.count {
+		text-align: right;
+	}
+</style>
+</head>
+<body>
+<?php
+
+$wgDBadminuser = $wgDBadminpassword = $wgDBserver = $wgDBname = $wgEnableProfileInfo = false;
+
+define( 'MW_NO_SETUP', 1 );
+require_once( './includes/WebStart.php' );
+require_once("./AdminSettings.php");
+
+if (!$wgEnableProfileInfo) {
+	echo "disabled\n";
+	exit( 1 );
+}
+
+foreach (array("wgDBadminuser", "wgDBadminpassword", "wgDBserver", "wgDBname") as $var)
+	if ($$var === false) {
+		echo "AdminSettings.php not correct\n";
+		exit( 1 );
+	}
+
+
+$expand = array();
+if (isset($_REQUEST['expand']))
+	foreach(explode(",", $_REQUEST['expand']) as $f)
+		$expand[$f] = true;
+
+class profile_point {
+	var $name;
+	var $count;
+	var $time;
+	var $children;
+
+	function profile_point($name, $count, $time) {
+		$this->name = $name;
+		$this->count = $count;
+		$this->time = $time;
+		$this->children = array();
+	}
+
+	function add_child($child) {
+		$this->children[] = $child;
+	}
+
+	function display($indent = 0.0) {
+		global $expand;
+		usort($this->children, "compare_point");
+
+		$extet = '';
+		if (isset($expand[$this->name()]))
+			$ex = true;
+		else	$ex = false;
+		if (!$ex) {
+			if (count($this->children)) {
+				$url = makeurl(false, false, $expand + array($this->name() => true));
+				$extet = " <a href=\"$url\">[+]</a>";
+			} else $extet = '';
+		} else {
+			$e = array();
+			foreach ($expand as $name => $ep)
+				if ($name != $this->name())
+					$e += array($name => $ep);
+
+			$extet = " <a href=\"" . makeurl(false, false, $e) . "\">[&ndash;]</a>";
+		}
+		?>
+		<tr>
+		<td class="time"><tt><?php echo $this->fmttime() ?></tt></td>
+		<td class="count"><?php echo $this->count() ?></td>
+		<td class="name" style="padding-left: <?php echo $indent ?>em">
+			<?php echo htmlspecialchars($this->name()) . $extet ?>
+		</td>
+		</tr>
+		<?php
+		if ($ex)
+			foreach ($this->children as $child)
+				$child->display($indent + 2);
+	}
+
+	function name() {
+		return $this->name;
+	}
+
+	function count() {
+		return $this->count;
+	}
+
+	function time() {
+		return $this->time;
+	}
+
+	function fmttime() {
+		return sprintf("%5.02f", $this->time);
+	}
+};
+
+function compare_point($a, $b) {
+	global $sort;
+	switch ($sort) {
+	case "name":
+		return strcmp($a->name(), $b->name());
+	case "time":
+		return $a->time() > $b->time() ? -1 : 1;
+	case "count":
+		return $a->count() > $b->count() ? -1 : 1;
+	}
+}
+
+$sorts = array("time", "count", "name");
+$sort = 'time';
+if (isset($_REQUEST['sort']) && in_array($_REQUEST['sort'], $sorts))
+	$sort = $_REQUEST['sort'];
+
+$dbh = mysql_connect($wgDBserver, $wgDBadminuser, $wgDBadminpassword)
+	or die("mysql server failed: " . mysql_error());
+mysql_select_db($wgDBname, $dbh) or die(mysql_error($dbh));
+$res = mysql_query("
+	SELECT pf_count, pf_time, pf_name
+	FROM profiling
+	ORDER BY pf_name ASC
+", $dbh) or die("query failed: " . mysql_error());
+
+if (isset($_REQUEST['filter']))
+	$filter = $_REQUEST['filter'];
+else	$filter = '';
+
+?>
+<form method="profiling.php">
+<p>
+<input type="text" name="filter" value="<?php echo htmlspecialchars($filter)?>"/>
+<input type="hidden" name="sort" value="<?php echo htmlspecialchars($sort)?>"/>
+<input type="hidden" name="expand" value="<?php echo htmlspecialchars(implode(",", array_keys($expand)))?>"/>
+<input type="submit" value="Filter" />
+</p>
+</form>
+
+<table cellspacing="0">
+<tr id="top">
+<th><a href="<?php echo makeurl(false, "time") ?>">Time</a></th>
+<th><a href="<?php echo makeurl(false, "count") ?>">Count</a></th>
+<th><a href="<?php echo makeurl(false, "name") ?>">Name</a></th>
+</tr>
+<?php
+$totaltime = 0.0;
+
+function makeurl($_filter = false, $_sort = false, $_expand = false) {
+	global $filter, $sort, $expand;
+
+	if ($_expand === false)
+		$_expand = $expand;
+
+	$nfilter = $_filter ? $_filter : $filter;
+	$nsort = $_sort ? $_sort : $sort;
+	$exp = urlencode(implode(',', array_keys($_expand)));
+	return "?filter=$nfilter&amp;sort=$nsort&amp;expand=$exp";
+}
+
+$points = array();
+$queries = array();
+$sqltotal = 0.0;
+
+$last = false;
+while (($o = mysql_fetch_object($res)) !== false) {
+	$next = new profile_point($o->pf_name, $o->pf_count, $o->pf_time);
+	$totaltime += $next->time();
+	if ($last !== false) {
+		if (preg_match("/^".preg_quote($last->name(), "/")."/", $next->name())) {
+			$last->add_child($next);
+			continue;
+		}
+	}
+	$last = $next;
+	if (preg_match("/^query: /", $next->name())) {
+		$sqltotal += $next->time();
+		$queries[] = $next;
+	} else {
+		$points[] = $next;
+	}
+}
+
+$s = new profile_point("SQL Queries", 0, $sqltotal);
+foreach ($queries as $q)
+	$s->add_child($q);
+$points[] = $s;
+
+usort($points, "compare_point");
+
+foreach ($points as $point) {
+	if (strlen($filter) && !strstr($point->name(), $filter))
+		continue;
+
+	$point->display();
+}
+?>
+</table>
+
+<p>Total time: <tt><?php printf("%5.02f", $totaltime) ?></p>
+<?php
+
+mysql_free_result($res);
+mysql_close($dbh);
+
+?>
+</body>
+</html>
Index: /MediaWiki/branches/1.11/redirect.php
===================================================================
--- /MediaWiki/branches/1.11/redirect.php	(revision 1280)
+++ /MediaWiki/branches/1.11/redirect.php	(revision 1280)
@@ -0,0 +1,14 @@
+<?php
+define( 'MW_NO_SETUP', 1 );
+require_once( './includes/WebStart.php' );
+global $wgArticlePath;
+
+require_once( 'includes/WebRequest.php' );
+$wgRequest = new WebRequest();
+
+$page = $wgRequest->getVal( 'wpDropdown' );
+
+$url = str_replace( "$1", urlencode( $page ), $wgArticlePath );
+
+header( "Location: {$url}" );
+?>
Index: /MediaWiki/branches/1.11/redirect.phtml
===================================================================
--- /MediaWiki/branches/1.11/redirect.phtml	(revision 1280)
+++ /MediaWiki/branches/1.11/redirect.phtml	(revision 1280)
@@ -0,0 +1,4 @@
+<?php
+// stub file for compatibility with older versions
+include_once('./redirect.php');
+?>
Index: /MediaWiki/branches/1.11/serialized/Makefile
===================================================================
--- /MediaWiki/branches/1.11/serialized/Makefile	(revision 1280)
+++ /MediaWiki/branches/1.11/serialized/Makefile	(revision 1280)
@@ -0,0 +1,28 @@
+
+MESSAGE_SOURCES=$(wildcard ../languages/messages/Messages*.php)
+MESSAGE_TARGETS=$(patsubst ../languages/messages/Messages%.php, Messages%.ser, $(MESSAGE_SOURCES))
+SPECIAL_TARGETS=Utf8Case.ser
+ALL_TARGETS=$(MESSAGE_TARGETS) $(SPECIAL_TARGETS)
+DIST_TARGETS=$(SPECIAL_TARGETS) \
+	     MessagesDe.ser \
+	     MessagesEn.ser \
+	     MessagesFr.ser \
+	     MessagesJa.ser \
+	     MessagesNl.ser \
+	     MessagesPl.ser \
+	     MessagesSv.ser
+
+.PHONY: all dist clean
+
+all: $(ALL_TARGETS)
+
+dist: $(DIST_TARGETS)
+
+clean:
+	rm -f $(ALL_TARGETS)
+
+Utf8Case.ser : ../includes/Utf8Case.php
+	php serialize.php -o $@ $<
+
+Messages%.ser : ../languages/messages/Messages%.php ../languages/messages/MessagesEn.php
+	php serialize-localisation.php -o $@ $<
Index: /MediaWiki/branches/1.11/serialized/README
===================================================================
--- /MediaWiki/branches/1.11/serialized/README	(revision 1280)
+++ /MediaWiki/branches/1.11/serialized/README	(revision 1280)
@@ -0,0 +1,37 @@
+This directory contains data files in the format of PHP's serialize() function. 
+The source data are typically array literals in PHP source files. We have 
+observed that unserialize(file_get_contents(...)) is faster than executing such 
+a file from an oparray cache like APC, and very much faster than loading it by 
+parsing the source file without such a cache. It should also be faster than 
+loading the data across the network with memcached, as long as you are careful 
+to put your MediaWiki root directory on a local hard drive rather than on NFS. 
+This is a good idea for performance in any case.
+
+To generate all data files:
+
+   cd /path/to/wiki/serialized
+   make
+
+This requires GNU Make. At present, the only serialized data file which is 
+strictly required is Utf8Case.ser. This contains UTF-8 case conversion tables, 
+which have essentially never changed since MediaWiki was invented. 
+
+The Messages*.ser files are localisation files, containing user interface text 
+and various other data related to language-specific behaviour. Because they 
+are merged with the fallback language (usually English) before caching, they 
+are all quite large, about 140 KB each at the time of writing. If you generate 
+all of them, they take up about 20 MB. Hence, I don't expect we will include 
+all of them in the release tarballs. However, to obtain optimum performance, 
+YOU SHOULD GENERATE ALL THE LOCALISATION FILES THAT YOU WILL BE USING ON YOUR 
+WIKIS.
+
+You can generate individual files by typing a command such as:
+   cd /path/to/wiki/serialized
+   make MessagesAr.ser
+
+If you change a Messages*.php source file, you must recompile any serialized 
+data files which are present. If you change MessagesEn.php, this will 
+invalidate *all* Messages*.ser files. 
+
+I think we should distribute a few Messages*.ser files in the release tarballs,
+specifically the ones created by "make dist". 
Index: /MediaWiki/branches/1.11/serialized/Utf8Case.ser
===================================================================
--- /MediaWiki/branches/1.11/serialized/Utf8Case.ser	(revision 1280)
+++ /MediaWiki/branches/1.11/serialized/Utf8Case.ser	(revision 1280)
@@ -0,0 +1,1 @@
+a:2:{s:14:"wikiUpperChars";a:745:{s:1:"a";s:1:"A";s:1:"b";s:1:"B";s:1:"c";s:1:"C";s:1:"d";s:1:"D";s:1:"e";s:1:"E";s:1:"f";s:1:"F";s:1:"g";s:1:"G";s:1:"h";s:1:"H";s:1:"i";s:1:"I";s:1:"j";s:1:"J";s:1:"k";s:1:"K";s:1:"l";s:1:"L";s:1:"m";s:1:"M";s:1:"n";s:1:"N";s:1:"o";s:1:"O";s:1:"p";s:1:"P";s:1:"q";s:1:"Q";s:1:"r";s:1:"R";s:1:"s";s:1:"S";s:1:"t";s:1:"T";s:1:"u";s:1:"U";s:1:"v";s:1:"V";s:1:"w";s:1:"W";s:1:"x";s:1:"X";s:1:"y";s:1:"Y";s:1:"z";s:1:"Z";s:2:"µ";s:2:"Μ";s:2:"à";s:2:"À";s:2:"á";s:2:"Á";s:2:"â";s:2:"Â";s:2:"ã";s:2:"Ã";s:2:"ä";s:2:"Ä";s:2:"å";s:2:"Å";s:2:"æ";s:2:"Æ";s:2:"ç";s:2:"Ç";s:2:"è";s:2:"È";s:2:"é";s:2:"É";s:2:"ê";s:2:"Ê";s:2:"ë";s:2:"Ë";s:2:"ì";s:2:"Ì";s:2:"í";s:2:"Í";s:2:"î";s:2:"Î";s:2:"ï";s:2:"Ï";s:2:"ð";s:2:"Ð";s:2:"ñ";s:2:"Ñ";s:2:"ò";s:2:"Ò";s:2:"ó";s:2:"Ó";s:2:"ô";s:2:"Ô";s:2:"õ";s:2:"Õ";s:2:"ö";s:2:"Ö";s:2:"ø";s:2:"Ø";s:2:"ù";s:2:"Ù";s:2:"ú";s:2:"Ú";s:2:"û";s:2:"Û";s:2:"ü";s:2:"Ü";s:2:"ý";s:2:"Ý";s:2:"þ";s:2:"Þ";s:2:"ÿ";s:2:"Ÿ";s:2:"ā";s:2:"Ā";s:2:"ă";s:2:"Ă";s:2:"ą";s:2:"Ą";s:2:"ć";s:2:"Ć";s:2:"ĉ";s:2:"Ĉ";s:2:"ċ";s:2:"Ċ";s:2:"č";s:2:"Č";s:2:"ď";s:2:"Ď";s:2:"đ";s:2:"Đ";s:2:"ē";s:2:"Ē";s:2:"ĕ";s:2:"Ĕ";s:2:"ė";s:2:"Ė";s:2:"ę";s:2:"Ę";s:2:"ě";s:2:"Ě";s:2:"ĝ";s:2:"Ĝ";s:2:"ğ";s:2:"Ğ";s:2:"ġ";s:2:"Ġ";s:2:"ģ";s:2:"Ģ";s:2:"ĥ";s:2:"Ĥ";s:2:"ħ";s:2:"Ħ";s:2:"ĩ";s:2:"Ĩ";s:2:"ī";s:2:"Ī";s:2:"ĭ";s:2:"Ĭ";s:2:"į";s:2:"Į";s:2:"ı";s:1:"I";s:2:"ĳ";s:2:"Ĳ";s:2:"ĵ";s:2:"Ĵ";s:2:"ķ";s:2:"Ķ";s:2:"ĺ";s:2:"Ĺ";s:2:"ļ";s:2:"Ļ";s:2:"ľ";s:2:"Ľ";s:2:"ŀ";s:2:"Ŀ";s:2:"ł";s:2:"Ł";s:2:"ń";s:2:"Ń";s:2:"ņ";s:2:"Ņ";s:2:"ň";s:2:"Ň";s:2:"ŋ";s:2:"Ŋ";s:2:"ō";s:2:"Ō";s:2:"ŏ";s:2:"Ŏ";s:2:"ő";s:2:"Ő";s:2:"œ";s:2:"Œ";s:2:"ŕ";s:2:"Ŕ";s:2:"ŗ";s:2:"Ŗ";s:2:"ř";s:2:"Ř";s:2:"ś";s:2:"Ś";s:2:"ŝ";s:2:"Ŝ";s:2:"ş";s:2:"Ş";s:2:"š";s:2:"Š";s:2:"ţ";s:2:"Ţ";s:2:"ť";s:2:"Ť";s:2:"ŧ";s:2:"Ŧ";s:2:"ũ";s:2:"Ũ";s:2:"ū";s:2:"Ū";s:2:"ŭ";s:2:"Ŭ";s:2:"ů";s:2:"Ů";s:2:"ű";s:2:"Ű";s:2:"ų";s:2:"Ų";s:2:"ŵ";s:2:"Ŵ";s:2:"ŷ";s:2:"Ŷ";s:2:"ź";s:2:"Ź";s:2:"ż";s:2:"Ż";s:2:"ž";s:2:"Ž";s:2:"ſ";s:1:"S";s:2:"ƃ";s:2:"Ƃ";s:2:"ƅ";s:2:"Ƅ";s:2:"ƈ";s:2:"Ƈ";s:2:"ƌ";s:2:"Ƌ";s:2:"ƒ";s:2:"Ƒ";s:2:"ƕ";s:2:"Ƕ";s:2:"ƙ";s:2:"Ƙ";s:2:"ơ";s:2:"Ơ";s:2:"ƣ";s:2:"Ƣ";s:2:"ƥ";s:2:"Ƥ";s:2:"ƨ";s:2:"Ƨ";s:2:"ƭ";s:2:"Ƭ";s:2:"ư";s:2:"Ư";s:2:"ƴ";s:2:"Ƴ";s:2:"ƶ";s:2:"Ƶ";s:2:"ƹ";s:2:"Ƹ";s:2:"ƽ";s:2:"Ƽ";s:2:"ƿ";s:2:"Ƿ";s:2:"ǅ";s:2:"Ǆ";s:2:"ǆ";s:2:"Ǆ";s:2:"ǈ";s:2:"Ǉ";s:2:"ǉ";s:2:"Ǉ";s:2:"ǋ";s:2:"Ǌ";s:2:"ǌ";s:2:"Ǌ";s:2:"ǎ";s:2:"Ǎ";s:2:"ǐ";s:2:"Ǐ";s:2:"ǒ";s:2:"Ǒ";s:2:"ǔ";s:2:"Ǔ";s:2:"ǖ";s:2:"Ǖ";s:2:"ǘ";s:2:"Ǘ";s:2:"ǚ";s:2:"Ǚ";s:2:"ǜ";s:2:"Ǜ";s:2:"ǝ";s:2:"Ǝ";s:2:"ǟ";s:2:"Ǟ";s:2:"ǡ";s:2:"Ǡ";s:2:"ǣ";s:2:"Ǣ";s:2:"ǥ";s:2:"Ǥ";s:2:"ǧ";s:2:"Ǧ";s:2:"ǩ";s:2:"Ǩ";s:2:"ǫ";s:2:"Ǫ";s:2:"ǭ";s:2:"Ǭ";s:2:"ǯ";s:2:"Ǯ";s:2:"ǲ";s:2:"Ǳ";s:2:"ǳ";s:2:"Ǳ";s:2:"ǵ";s:2:"Ǵ";s:2:"ǹ";s:2:"Ǹ";s:2:"ǻ";s:2:"Ǻ";s:2:"ǽ";s:2:"Ǽ";s:2:"ǿ";s:2:"Ǿ";s:2:"ȁ";s:2:"Ȁ";s:2:"ȃ";s:2:"Ȃ";s:2:"ȅ";s:2:"Ȅ";s:2:"ȇ";s:2:"Ȇ";s:2:"ȉ";s:2:"Ȉ";s:2:"ȋ";s:2:"Ȋ";s:2:"ȍ";s:2:"Ȍ";s:2:"ȏ";s:2:"Ȏ";s:2:"ȑ";s:2:"Ȑ";s:2:"ȓ";s:2:"Ȓ";s:2:"ȕ";s:2:"Ȕ";s:2:"ȗ";s:2:"Ȗ";s:2:"ș";s:2:"Ș";s:2:"ț";s:2:"Ț";s:2:"ȝ";s:2:"Ȝ";s:2:"ȟ";s:2:"Ȟ";s:2:"ȣ";s:2:"Ȣ";s:2:"ȥ";s:2:"Ȥ";s:2:"ȧ";s:2:"Ȧ";s:2:"ȩ";s:2:"Ȩ";s:2:"ȫ";s:2:"Ȫ";s:2:"ȭ";s:2:"Ȭ";s:2:"ȯ";s:2:"Ȯ";s:2:"ȱ";s:2:"Ȱ";s:2:"ȳ";s:2:"Ȳ";s:2:"ɓ";s:2:"Ɓ";s:2:"ɔ";s:2:"Ɔ";s:2:"ɖ";s:2:"Ɖ";s:2:"ɗ";s:2:"Ɗ";s:2:"ə";s:2:"Ə";s:2:"ɛ";s:2:"Ɛ";s:2:"ɠ";s:2:"Ɠ";s:2:"ɣ";s:2:"Ɣ";s:2:"ɨ";s:2:"Ɨ";s:2:"ɩ";s:2:"Ɩ";s:2:"ɯ";s:2:"Ɯ";s:2:"ɲ";s:2:"Ɲ";s:2:"ɵ";s:2:"Ɵ";s:2:"ʀ";s:2:"Ʀ";s:2:"ʃ";s:2:"Ʃ";s:2:"ʈ";s:2:"Ʈ";s:2:"ʊ";s:2:"Ʊ";s:2:"ʋ";s:2:"Ʋ";s:2:"ʒ";s:2:"Ʒ";s:2:"ͅ";s:2:"Ι";s:2:"ά";s:2:"Ά";s:2:"έ";s:2:"Έ";s:2:"ή";s:2:"Ή";s:2:"ί";s:2:"Ί";s:2:"α";s:2:"Α";s:2:"β";s:2:"Β";s:2:"γ";s:2:"Γ";s:2:"δ";s:2:"Δ";s:2:"ε";s:2:"Ε";s:2:"ζ";s:2:"Ζ";s:2:"η";s:2:"Η";s:2:"θ";s:2:"Θ";s:2:"ι";s:2:"Ι";s:2:"κ";s:2:"Κ";s:2:"λ";s:2:"Λ";s:2:"μ";s:2:"Μ";s:2:"ν";s:2:"Ν";s:2:"ξ";s:2:"Ξ";s:2:"ο";s:2:"Ο";s:2:"π";s:2:"Π";s:2:"ρ";s:2:"Ρ";s:2:"ς";s:2:"Σ";s:2:"σ";s:2:"Σ";s:2:"τ";s:2:"Τ";s:2:"υ";s:2:"Υ";s:2:"φ";s:2:"Φ";s:2:"χ";s:2:"Χ";s:2:"ψ";s:2:"Ψ";s:2:"ω";s:2:"Ω";s:2:"ϊ";s:2:"Ϊ";s:2:"ϋ";s:2:"Ϋ";s:2:"ό";s:2:"Ό";s:2:"ύ";s:2:"Ύ";s:2:"ώ";s:2:"Ώ";s:2:"ϐ";s:2:"Β";s:2:"ϑ";s:2:"Θ";s:2:"ϕ";s:2:"Φ";s:2:"ϖ";s:2:"Π";s:2:"ϛ";s:2:"Ϛ";s:2:"ϝ";s:2:"Ϝ";s:2:"ϟ";s:2:"Ϟ";s:2:"ϡ";s:2:"Ϡ";s:2:"ϣ";s:2:"Ϣ";s:2:"ϥ";s:2:"Ϥ";s:2:"ϧ";s:2:"Ϧ";s:2:"ϩ";s:2:"Ϩ";s:2:"ϫ";s:2:"Ϫ";s:2:"ϭ";s:2:"Ϭ";s:2:"ϯ";s:2:"Ϯ";s:2:"ϰ";s:2:"Κ";s:2:"ϱ";s:2:"Ρ";s:2:"ϲ";s:2:"Σ";s:2:"ϵ";s:2:"Ε";s:2:"а";s:2:"А";s:2:"б";s:2:"Б";s:2:"в";s:2:"В";s:2:"г";s:2:"Г";s:2:"д";s:2:"Д";s:2:"е";s:2:"Е";s:2:"ж";s:2:"Ж";s:2:"з";s:2:"З";s:2:"и";s:2:"И";s:2:"й";s:2:"Й";s:2:"к";s:2:"К";s:2:"л";s:2:"Л";s:2:"м";s:2:"М";s:2:"н";s:2:"Н";s:2:"о";s:2:"О";s:2:"п";s:2:"П";s:2:"р";s:2:"Р";s:2:"с";s:2:"С";s:2:"т";s:2:"Т";s:2:"у";s:2:"У";s:2:"ф";s:2:"Ф";s:2:"х";s:2:"Х";s:2:"ц";s:2:"Ц";s:2:"ч";s:2:"Ч";s:2:"ш";s:2:"Ш";s:2:"щ";s:2:"Щ";s:2:"ъ";s:2:"Ъ";s:2:"ы";s:2:"Ы";s:2:"ь";s:2:"Ь";s:2:"э";s:2:"Э";s:2:"ю";s:2:"Ю";s:2:"я";s:2:"Я";s:2:"ѐ";s:2:"Ѐ";s:2:"ё";s:2:"Ё";s:2:"ђ";s:2:"Ђ";s:2:"ѓ";s:2:"Ѓ";s:2:"є";s:2:"Є";s:2:"ѕ";s:2:"Ѕ";s:2:"і";s:2:"І";s:2:"ї";s:2:"Ї";s:2:"ј";s:2:"Ј";s:2:"љ";s:2:"Љ";s:2:"њ";s:2:"Њ";s:2:"ћ";s:2:"Ћ";s:2:"ќ";s:2:"Ќ";s:2:"ѝ";s:2:"Ѝ";s:2:"ў";s:2:"Ў";s:2:"џ";s:2:"Џ";s:2:"ѡ";s:2:"Ѡ";s:2:"ѣ";s:2:"Ѣ";s:2:"ѥ";s:2:"Ѥ";s:2:"ѧ";s:2:"Ѧ";s:2:"ѩ";s:2:"Ѩ";s:2:"ѫ";s:2:"Ѫ";s:2:"ѭ";s:2:"Ѭ";s:2:"ѯ";s:2:"Ѯ";s:2:"ѱ";s:2:"Ѱ";s:2:"ѳ";s:2:"Ѳ";s:2:"ѵ";s:2:"Ѵ";s:2:"ѷ";s:2:"Ѷ";s:2:"ѹ";s:2:"Ѹ";s:2:"ѻ";s:2:"Ѻ";s:2:"ѽ";s:2:"Ѽ";s:2:"ѿ";s:2:"Ѿ";s:2:"ҁ";s:2:"Ҁ";s:2:"ҍ";s:2:"Ҍ";s:2:"ҏ";s:2:"Ҏ";s:2:"ґ";s:2:"Ґ";s:2:"ғ";s:2:"Ғ";s:2:"ҕ";s:2:"Ҕ";s:2:"җ";s:2:"Җ";s:2:"ҙ";s:2:"Ҙ";s:2:"қ";s:2:"Қ";s:2:"ҝ";s:2:"Ҝ";s:2:"ҟ";s:2:"Ҟ";s:2:"ҡ";s:2:"Ҡ";s:2:"ң";s:2:"Ң";s:2:"ҥ";s:2:"Ҥ";s:2:"ҧ";s:2:"Ҧ";s:2:"ҩ";s:2:"Ҩ";s:2:"ҫ";s:2:"Ҫ";s:2:"ҭ";s:2:"Ҭ";s:2:"ү";s:2:"Ү";s:2:"ұ";s:2:"Ұ";s:2:"ҳ";s:2:"Ҳ";s:2:"ҵ";s:2:"Ҵ";s:2:"ҷ";s:2:"Ҷ";s:2:"ҹ";s:2:"Ҹ";s:2:"һ";s:2:"Һ";s:2:"ҽ";s:2:"Ҽ";s:2:"ҿ";s:2:"Ҿ";s:2:"ӂ";s:2:"Ӂ";s:2:"ӄ";s:2:"Ӄ";s:2:"ӈ";s:2:"Ӈ";s:2:"ӌ";s:2:"Ӌ";s:2:"ӑ";s:2:"Ӑ";s:2:"ӓ";s:2:"Ӓ";s:2:"ӕ";s:2:"Ӕ";s:2:"ӗ";s:2:"Ӗ";s:2:"ә";s:2:"Ә";s:2:"ӛ";s:2:"Ӛ";s:2:"ӝ";s:2:"Ӝ";s:2:"ӟ";s:2:"Ӟ";s:2:"ӡ";s:2:"Ӡ";s:2:"ӣ";s:2:"Ӣ";s:2:"ӥ";s:2:"Ӥ";s:2:"ӧ";s:2:"Ӧ";s:2:"ө";s:2:"Ө";s:2:"ӫ";s:2:"Ӫ";s:2:"ӭ";s:2:"Ӭ";s:2:"ӯ";s:2:"Ӯ";s:2:"ӱ";s:2:"Ӱ";s:2:"ӳ";s:2:"Ӳ";s:2:"ӵ";s:2:"Ӵ";s:2:"ӹ";s:2:"Ӹ";s:2:"ա";s:2:"Ա";s:2:"բ";s:2:"Բ";s:2:"գ";s:2:"Գ";s:2:"դ";s:2:"Դ";s:2:"ե";s:2:"Ե";s:2:"զ";s:2:"Զ";s:2:"է";s:2:"Է";s:2:"ը";s:2:"Ը";s:2:"թ";s:2:"Թ";s:2:"ժ";s:2:"Ժ";s:2:"ի";s:2:"Ի";s:2:"լ";s:2:"Լ";s:2:"խ";s:2:"Խ";s:2:"ծ";s:2:"Ծ";s:2:"կ";s:2:"Կ";s:2:"հ";s:2:"Հ";s:2:"ձ";s:2:"Ձ";s:2:"ղ";s:2:"Ղ";s:2:"ճ";s:2:"Ճ";s:2:"մ";s:2:"Մ";s:2:"յ";s:2:"Յ";s:2:"ն";s:2:"Ն";s:2:"շ";s:2:"Շ";s:2:"ո";s:2:"Ո";s:2:"չ";s:2:"Չ";s:2:"պ";s:2:"Պ";s:2:"ջ";s:2:"Ջ";s:2:"ռ";s:2:"Ռ";s:2:"ս";s:2:"Ս";s:2:"վ";s:2:"Վ";s:2:"տ";s:2:"Տ";s:2:"ր";s:2:"Ր";s:2:"ց";s:2:"Ց";s:2:"ւ";s:2:"Ւ";s:2:"փ";s:2:"Փ";s:2:"ք";s:2:"Ք";s:2:"օ";s:2:"Օ";s:2:"ֆ";s:2:"Ֆ";s:3:"ḁ";s:3:"Ḁ";s:3:"ḃ";s:3:"Ḃ";s:3:"ḅ";s:3:"Ḅ";s:3:"ḇ";s:3:"Ḇ";s:3:"ḉ";s:3:"Ḉ";s:3:"ḋ";s:3:"Ḋ";s:3:"ḍ";s:3:"Ḍ";s:3:"ḏ";s:3:"Ḏ";s:3:"ḑ";s:3:"Ḑ";s:3:"ḓ";s:3:"Ḓ";s:3:"ḕ";s:3:"Ḕ";s:3:"ḗ";s:3:"Ḗ";s:3:"ḙ";s:3:"Ḙ";s:3:"ḛ";s:3:"Ḛ";s:3:"ḝ";s:3:"Ḝ";s:3:"ḟ";s:3:"Ḟ";s:3:"ḡ";s:3:"Ḡ";s:3:"ḣ";s:3:"Ḣ";s:3:"ḥ";s:3:"Ḥ";s:3:"ḧ";s:3:"Ḧ";s:3:"ḩ";s:3:"Ḩ";s:3:"ḫ";s:3:"Ḫ";s:3:"ḭ";s:3:"Ḭ";s:3:"ḯ";s:3:"Ḯ";s:3:"ḱ";s:3:"Ḱ";s:3:"ḳ";s:3:"Ḳ";s:3:"ḵ";s:3:"Ḵ";s:3:"ḷ";s:3:"Ḷ";s:3:"ḹ";s:3:"Ḹ";s:3:"ḻ";s:3:"Ḻ";s:3:"ḽ";s:3:"Ḽ";s:3:"ḿ";s:3:"Ḿ";s:3:"ṁ";s:3:"Ṁ";s:3:"ṃ";s:3:"Ṃ";s:3:"ṅ";s:3:"Ṅ";s:3:"ṇ";s:3:"Ṇ";s:3:"ṉ";s:3:"Ṉ";s:3:"ṋ";s:3:"Ṋ";s:3:"ṍ";s:3:"Ṍ";s:3:"ṏ";s:3:"Ṏ";s:3:"ṑ";s:3:"Ṑ";s:3:"ṓ";s:3:"Ṓ";s:3:"ṕ";s:3:"Ṕ";s:3:"ṗ";s:3:"Ṗ";s:3:"ṙ";s:3:"Ṙ";s:3:"ṛ";s:3:"Ṛ";s:3:"ṝ";s:3:"Ṝ";s:3:"ṟ";s:3:"Ṟ";s:3:"ṡ";s:3:"Ṡ";s:3:"ṣ";s:3:"Ṣ";s:3:"ṥ";s:3:"Ṥ";s:3:"ṧ";s:3:"Ṧ";s:3:"ṩ";s:3:"Ṩ";s:3:"ṫ";s:3:"Ṫ";s:3:"ṭ";s:3:"Ṭ";s:3:"ṯ";s:3:"Ṯ";s:3:"ṱ";s:3:"Ṱ";s:3:"ṳ";s:3:"Ṳ";s:3:"ṵ";s:3:"Ṵ";s:3:"ṷ";s:3:"Ṷ";s:3:"ṹ";s:3:"Ṹ";s:3:"ṻ";s:3:"Ṻ";s:3:"ṽ";s:3:"Ṽ";s:3:"ṿ";s:3:"Ṿ";s:3:"ẁ";s:3:"Ẁ";s:3:"ẃ";s:3:"Ẃ";s:3:"ẅ";s:3:"Ẅ";s:3:"ẇ";s:3:"Ẇ";s:3:"ẉ";s:3:"Ẉ";s:3:"ẋ";s:3:"Ẋ";s:3:"ẍ";s:3:"Ẍ";s:3:"ẏ";s:3:"Ẏ";s:3:"ẑ";s:3:"Ẑ";s:3:"ẓ";s:3:"Ẓ";s:3:"ẕ";s:3:"Ẕ";s:3:"ẛ";s:3:"Ṡ";s:3:"ạ";s:3:"Ạ";s:3:"ả";s:3:"Ả";s:3:"ấ";s:3:"Ấ";s:3:"ầ";s:3:"Ầ";s:3:"ẩ";s:3:"Ẩ";s:3:"ẫ";s:3:"Ẫ";s:3:"ậ";s:3:"Ậ";s:3:"ắ";s:3:"Ắ";s:3:"ằ";s:3:"Ằ";s:3:"ẳ";s:3:"Ẳ";s:3:"ẵ";s:3:"Ẵ";s:3:"ặ";s:3:"Ặ";s:3:"ẹ";s:3:"Ẹ";s:3:"ẻ";s:3:"Ẻ";s:3:"ẽ";s:3:"Ẽ";s:3:"ế";s:3:"Ế";s:3:"ề";s:3:"Ề";s:3:"ể";s:3:"Ể";s:3:"ễ";s:3:"Ễ";s:3:"ệ";s:3:"Ệ";s:3:"ỉ";s:3:"Ỉ";s:3:"ị";s:3:"Ị";s:3:"ọ";s:3:"Ọ";s:3:"ỏ";s:3:"Ỏ";s:3:"ố";s:3:"Ố";s:3:"ồ";s:3:"Ồ";s:3:"ổ";s:3:"Ổ";s:3:"ỗ";s:3:"Ỗ";s:3:"ộ";s:3:"Ộ";s:3:"ớ";s:3:"Ớ";s:3:"ờ";s:3:"Ờ";s:3:"ở";s:3:"Ở";s:3:"ỡ";s:3:"Ỡ";s:3:"ợ";s:3:"Ợ";s:3:"ụ";s:3:"Ụ";s:3:"ủ";s:3:"Ủ";s:3:"ứ";s:3:"Ứ";s:3:"ừ";s:3:"Ừ";s:3:"ử";s:3:"Ử";s:3:"ữ";s:3:"Ữ";s:3:"ự";s:3:"Ự";s:3:"ỳ";s:3:"Ỳ";s:3:"ỵ";s:3:"Ỵ";s:3:"ỷ";s:3:"Ỷ";s:3:"ỹ";s:3:"Ỹ";s:3:"ἀ";s:3:"Ἀ";s:3:"ἁ";s:3:"Ἁ";s:3:"ἂ";s:3:"Ἂ";s:3:"ἃ";s:3:"Ἃ";s:3:"ἄ";s:3:"Ἄ";s:3:"ἅ";s:3:"Ἅ";s:3:"ἆ";s:3:"Ἆ";s:3:"ἇ";s:3:"Ἇ";s:3:"ἐ";s:3:"Ἐ";s:3:"ἑ";s:3:"Ἑ";s:3:"ἒ";s:3:"Ἒ";s:3:"ἓ";s:3:"Ἓ";s:3:"ἔ";s:3:"Ἔ";s:3:"ἕ";s:3:"Ἕ";s:3:"ἠ";s:3:"Ἠ";s:3:"ἡ";s:3:"Ἡ";s:3:"ἢ";s:3:"Ἢ";s:3:"ἣ";s:3:"Ἣ";s:3:"ἤ";s:3:"Ἤ";s:3:"ἥ";s:3:"Ἥ";s:3:"ἦ";s:3:"Ἦ";s:3:"ἧ";s:3:"Ἧ";s:3:"ἰ";s:3:"Ἰ";s:3:"ἱ";s:3:"Ἱ";s:3:"ἲ";s:3:"Ἲ";s:3:"ἳ";s:3:"Ἳ";s:3:"ἴ";s:3:"Ἴ";s:3:"ἵ";s:3:"Ἵ";s:3:"ἶ";s:3:"Ἶ";s:3:"ἷ";s:3:"Ἷ";s:3:"ὀ";s:3:"Ὀ";s:3:"ὁ";s:3:"Ὁ";s:3:"ὂ";s:3:"Ὂ";s:3:"ὃ";s:3:"Ὃ";s:3:"ὄ";s:3:"Ὄ";s:3:"ὅ";s:3:"Ὅ";s:3:"ὑ";s:3:"Ὑ";s:3:"ὓ";s:3:"Ὓ";s:3:"ὕ";s:3:"Ὕ";s:3:"ὗ";s:3:"Ὗ";s:3:"ὠ";s:3:"Ὠ";s:3:"ὡ";s:3:"Ὡ";s:3:"ὢ";s:3:"Ὢ";s:3:"ὣ";s:3:"Ὣ";s:3:"ὤ";s:3:"Ὤ";s:3:"ὥ";s:3:"Ὥ";s:3:"ὦ";s:3:"Ὦ";s:3:"ὧ";s:3:"Ὧ";s:3:"ὰ";s:3:"Ὰ";s:3:"ά";s:3:"Ά";s:3:"ὲ";s:3:"Ὲ";s:3:"έ";s:3:"Έ";s:3:"ὴ";s:3:"Ὴ";s:3:"ή";s:3:"Ή";s:3:"ὶ";s:3:"Ὶ";s:3:"ί";s:3:"Ί";s:3:"ὸ";s:3:"Ὸ";s:3:"ό";s:3:"Ό";s:3:"ὺ";s:3:"Ὺ";s:3:"ύ";s:3:"Ύ";s:3:"ὼ";s:3:"Ὼ";s:3:"ώ";s:3:"Ώ";s:3:"ᾀ";s:3:"ᾈ";s:3:"ᾁ";s:3:"ᾉ";s:3:"ᾂ";s:3:"ᾊ";s:3:"ᾃ";s:3:"ᾋ";s:3:"ᾄ";s:3:"ᾌ";s:3:"ᾅ";s:3:"ᾍ";s:3:"ᾆ";s:3:"ᾎ";s:3:"ᾇ";s:3:"ᾏ";s:3:"ᾐ";s:3:"ᾘ";s:3:"ᾑ";s:3:"ᾙ";s:3:"ᾒ";s:3:"ᾚ";s:3:"ᾓ";s:3:"ᾛ";s:3:"ᾔ";s:3:"ᾜ";s:3:"ᾕ";s:3:"ᾝ";s:3:"ᾖ";s:3:"ᾞ";s:3:"ᾗ";s:3:"ᾟ";s:3:"ᾠ";s:3:"ᾨ";s:3:"ᾡ";s:3:"ᾩ";s:3:"ᾢ";s:3:"ᾪ";s:3:"ᾣ";s:3:"ᾫ";s:3:"ᾤ";s:3:"ᾬ";s:3:"ᾥ";s:3:"ᾭ";s:3:"ᾦ";s:3:"ᾮ";s:3:"ᾧ";s:3:"ᾯ";s:3:"ᾰ";s:3:"Ᾰ";s:3:"ᾱ";s:3:"Ᾱ";s:3:"ᾳ";s:3:"ᾼ";s:3:"ι";s:2:"Ι";s:3:"ῃ";s:3:"ῌ";s:3:"ῐ";s:3:"Ῐ";s:3:"ῑ";s:3:"Ῑ";s:3:"ῠ";s:3:"Ῠ";s:3:"ῡ";s:3:"Ῡ";s:3:"ῥ";s:3:"Ῥ";s:3:"ῳ";s:3:"ῼ";s:3:"ⅰ";s:3:"Ⅰ";s:3:"ⅱ";s:3:"Ⅱ";s:3:"ⅲ";s:3:"Ⅲ";s:3:"ⅳ";s:3:"Ⅳ";s:3:"ⅴ";s:3:"Ⅴ";s:3:"ⅵ";s:3:"Ⅵ";s:3:"ⅶ";s:3:"Ⅶ";s:3:"ⅷ";s:3:"Ⅷ";s:3:"ⅸ";s:3:"Ⅸ";s:3:"ⅹ";s:3:"Ⅹ";s:3:"ⅺ";s:3:"Ⅺ";s:3:"ⅻ";s:3:"Ⅻ";s:3:"ⅼ";s:3:"Ⅼ";s:3:"ⅽ";s:3:"Ⅽ";s:3:"ⅾ";s:3:"Ⅾ";s:3:"ⅿ";s:3:"Ⅿ";s:3:"ⓐ";s:3:"Ⓐ";s:3:"ⓑ";s:3:"Ⓑ";s:3:"ⓒ";s:3:"Ⓒ";s:3:"ⓓ";s:3:"Ⓓ";s:3:"ⓔ";s:3:"Ⓔ";s:3:"ⓕ";s:3:"Ⓕ";s:3:"ⓖ";s:3:"Ⓖ";s:3:"ⓗ";s:3:"Ⓗ";s:3:"ⓘ";s:3:"Ⓘ";s:3:"ⓙ";s:3:"Ⓙ";s:3:"ⓚ";s:3:"Ⓚ";s:3:"ⓛ";s:3:"Ⓛ";s:3:"ⓜ";s:3:"Ⓜ";s:3:"ⓝ";s:3:"Ⓝ";s:3:"ⓞ";s:3:"Ⓞ";s:3:"ⓟ";s:3:"Ⓟ";s:3:"ⓠ";s:3:"Ⓠ";s:3:"ⓡ";s:3:"Ⓡ";s:3:"ⓢ";s:3:"Ⓢ";s:3:"ⓣ";s:3:"Ⓣ";s:3:"ⓤ";s:3:"Ⓤ";s:3:"ⓥ";s:3:"Ⓥ";s:3:"ⓦ";s:3:"Ⓦ";s:3:"ⓧ";s:3:"Ⓧ";s:3:"ⓨ";s:3:"Ⓨ";s:3:"ⓩ";s:3:"Ⓩ";s:3:"ａ";s:3:"Ａ";s:3:"ｂ";s:3:"Ｂ";s:3:"ｃ";s:3:"Ｃ";s:3:"ｄ";s:3:"Ｄ";s:3:"ｅ";s:3:"Ｅ";s:3:"ｆ";s:3:"Ｆ";s:3:"ｇ";s:3:"Ｇ";s:3:"ｈ";s:3:"Ｈ";s:3:"ｉ";s:3:"Ｉ";s:3:"ｊ";s:3:"Ｊ";s:3:"ｋ";s:3:"Ｋ";s:3:"ｌ";s:3:"Ｌ";s:3:"ｍ";s:3:"Ｍ";s:3:"ｎ";s:3:"Ｎ";s:3:"ｏ";s:3:"Ｏ";s:3:"ｐ";s:3:"Ｐ";s:3:"ｑ";s:3:"Ｑ";s:3:"ｒ";s:3:"Ｒ";s:3:"ｓ";s:3:"Ｓ";s:3:"ｔ";s:3:"Ｔ";s:3:"ｕ";s:3:"Ｕ";s:3:"ｖ";s:3:"Ｖ";s:3:"ｗ";s:3:"Ｗ";s:3:"ｘ";s:3:"Ｘ";s:3:"ｙ";s:3:"Ｙ";s:3:"ｚ";s:3:"Ｚ";s:4:"𐐨";s:4:"𐐀";s:4:"𐐩";s:4:"𐐁";s:4:"𐐪";s:4:"𐐂";s:4:"𐐫";s:4:"𐐃";s:4:"𐐬";s:4:"𐐄";s:4:"𐐭";s:4:"𐐅";s:4:"𐐮";s:4:"𐐆";s:4:"𐐯";s:4:"𐐇";s:4:"𐐰";s:4:"𐐈";s:4:"𐐱";s:4:"𐐉";s:4:"𐐲";s:4:"𐐊";s:4:"𐐳";s:4:"𐐋";s:4:"𐐴";s:4:"𐐌";s:4:"𐐵";s:4:"𐐍";s:4:"𐐶";s:4:"𐐎";s:4:"𐐷";s:4:"𐐏";s:4:"𐐸";s:4:"𐐐";s:4:"𐐹";s:4:"𐐑";s:4:"𐐺";s:4:"𐐒";s:4:"𐐻";s:4:"𐐓";s:4:"𐐼";s:4:"𐐔";s:4:"𐐽";s:4:"𐐕";s:4:"𐐾";s:4:"𐐖";s:4:"𐐿";s:4:"𐐗";s:4:"𐑀";s:4:"𐐘";s:4:"𐑁";s:4:"𐐙";s:4:"𐑂";s:4:"𐐚";s:4:"𐑃";s:4:"𐐛";s:4:"𐑄";s:4:"𐐜";s:4:"𐑅";s:4:"𐐝";s:4:"𐑆";s:4:"𐐞";s:4:"𐑇";s:4:"𐐟";s:4:"𐑈";s:4:"𐐠";s:4:"𐑉";s:4:"𐐡";s:4:"𐑊";s:4:"𐐢";s:4:"𐑋";s:4:"𐐣";s:4:"𐑌";s:4:"𐐤";s:4:"𐑍";s:4:"𐐥";}s:14:"wikiLowerChars";a:735:{s:1:"A";s:1:"a";s:1:"B";s:1:"b";s:1:"C";s:1:"c";s:1:"D";s:1:"d";s:1:"E";s:1:"e";s:1:"F";s:1:"f";s:1:"G";s:1:"g";s:1:"H";s:1:"h";s:1:"I";s:1:"i";s:1:"J";s:1:"j";s:1:"K";s:1:"k";s:1:"L";s:1:"l";s:1:"M";s:1:"m";s:1:"N";s:1:"n";s:1:"O";s:1:"o";s:1:"P";s:1:"p";s:1:"Q";s:1:"q";s:1:"R";s:1:"r";s:1:"S";s:1:"s";s:1:"T";s:1:"t";s:1:"U";s:1:"u";s:1:"V";s:1:"v";s:1:"W";s:1:"w";s:1:"X";s:1:"x";s:1:"Y";s:1:"y";s:1:"Z";s:1:"z";s:2:"À";s:2:"à";s:2:"Á";s:2:"á";s:2:"Â";s:2:"â";s:2:"Ã";s:2:"ã";s:2:"Ä";s:2:"ä";s:2:"Å";s:2:"å";s:2:"Æ";s:2:"æ";s:2:"Ç";s:2:"ç";s:2:"È";s:2:"è";s:2:"É";s:2:"é";s:2:"Ê";s:2:"ê";s:2:"Ë";s:2:"ë";s:2:"Ì";s:2:"ì";s:2:"Í";s:2:"í";s:2:"Î";s:2:"î";s:2:"Ï";s:2:"ï";s:2:"Ð";s:2:"ð";s:2:"Ñ";s:2:"ñ";s:2:"Ò";s:2:"ò";s:2:"Ó";s:2:"ó";s:2:"Ô";s:2:"ô";s:2:"Õ";s:2:"õ";s:2:"Ö";s:2:"ö";s:2:"Ø";s:2:"ø";s:2:"Ù";s:2:"ù";s:2:"Ú";s:2:"ú";s:2:"Û";s:2:"û";s:2:"Ü";s:2:"ü";s:2:"Ý";s:2:"ý";s:2:"Þ";s:2:"þ";s:2:"Ā";s:2:"ā";s:2:"Ă";s:2:"ă";s:2:"Ą";s:2:"ą";s:2:"Ć";s:2:"ć";s:2:"Ĉ";s:2:"ĉ";s:2:"Ċ";s:2:"ċ";s:2:"Č";s:2:"č";s:2:"Ď";s:2:"ď";s:2:"Đ";s:2:"đ";s:2:"Ē";s:2:"ē";s:2:"Ĕ";s:2:"ĕ";s:2:"Ė";s:2:"ė";s:2:"Ę";s:2:"ę";s:2:"Ě";s:2:"ě";s:2:"Ĝ";s:2:"ĝ";s:2:"Ğ";s:2:"ğ";s:2:"Ġ";s:2:"ġ";s:2:"Ģ";s:2:"ģ";s:2:"Ĥ";s:2:"ĥ";s:2:"Ħ";s:2:"ħ";s:2:"Ĩ";s:2:"ĩ";s:2:"Ī";s:2:"ī";s:2:"Ĭ";s:2:"ĭ";s:2:"Į";s:2:"į";s:2:"İ";s:1:"i";s:2:"Ĳ";s:2:"ĳ";s:2:"Ĵ";s:2:"ĵ";s:2:"Ķ";s:2:"ķ";s:2:"Ĺ";s:2:"ĺ";s:2:"Ļ";s:2:"ļ";s:2:"Ľ";s:2:"ľ";s:2:"Ŀ";s:2:"ŀ";s:2:"Ł";s:2:"ł";s:2:"Ń";s:2:"ń";s:2:"Ņ";s:2:"ņ";s:2:"Ň";s:2:"ň";s:2:"Ŋ";s:2:"ŋ";s:2:"Ō";s:2:"ō";s:2:"Ŏ";s:2:"ŏ";s:2:"Ő";s:2:"ő";s:2:"Œ";s:2:"œ";s:2:"Ŕ";s:2:"ŕ";s:2:"Ŗ";s:2:"ŗ";s:2:"Ř";s:2:"ř";s:2:"Ś";s:2:"ś";s:2:"Ŝ";s:2:"ŝ";s:2:"Ş";s:2:"ş";s:2:"Š";s:2:"š";s:2:"Ţ";s:2:"ţ";s:2:"Ť";s:2:"ť";s:2:"Ŧ";s:2:"ŧ";s:2:"Ũ";s:2:"ũ";s:2:"Ū";s:2:"ū";s:2:"Ŭ";s:2:"ŭ";s:2:"Ů";s:2:"ů";s:2:"Ű";s:2:"ű";s:2:"Ų";s:2:"ų";s:2:"Ŵ";s:2:"ŵ";s:2:"Ŷ";s:2:"ŷ";s:2:"Ÿ";s:2:"ÿ";s:2:"Ź";s:2:"ź";s:2:"Ż";s:2:"ż";s:2:"Ž";s:2:"ž";s:2:"Ɓ";s:2:"ɓ";s:2:"Ƃ";s:2:"ƃ";s:2:"Ƅ";s:2:"ƅ";s:2:"Ɔ";s:2:"ɔ";s:2:"Ƈ";s:2:"ƈ";s:2:"Ɖ";s:2:"ɖ";s:2:"Ɗ";s:2:"ɗ";s:2:"Ƌ";s:2:"ƌ";s:2:"Ǝ";s:2:"ǝ";s:2:"Ə";s:2:"ə";s:2:"Ɛ";s:2:"ɛ";s:2:"Ƒ";s:2:"ƒ";s:2:"Ɠ";s:2:"ɠ";s:2:"Ɣ";s:2:"ɣ";s:2:"Ɩ";s:2:"ɩ";s:2:"Ɨ";s:2:"ɨ";s:2:"Ƙ";s:2:"ƙ";s:2:"Ɯ";s:2:"ɯ";s:2:"Ɲ";s:2:"ɲ";s:2:"Ɵ";s:2:"ɵ";s:2:"Ơ";s:2:"ơ";s:2:"Ƣ";s:2:"ƣ";s:2:"Ƥ";s:2:"ƥ";s:2:"Ʀ";s:2:"ʀ";s:2:"Ƨ";s:2:"ƨ";s:2:"Ʃ";s:2:"ʃ";s:2:"Ƭ";s:2:"ƭ";s:2:"Ʈ";s:2:"ʈ";s:2:"Ư";s:2:"ư";s:2:"Ʊ";s:2:"ʊ";s:2:"Ʋ";s:2:"ʋ";s:2:"Ƴ";s:2:"ƴ";s:2:"Ƶ";s:2:"ƶ";s:2:"Ʒ";s:2:"ʒ";s:2:"Ƹ";s:2:"ƹ";s:2:"Ƽ";s:2:"ƽ";s:2:"Ǆ";s:2:"ǆ";s:2:"ǅ";s:2:"ǆ";s:2:"Ǉ";s:2:"ǉ";s:2:"ǈ";s:2:"ǉ";s:2:"Ǌ";s:2:"ǌ";s:2:"ǋ";s:2:"ǌ";s:2:"Ǎ";s:2:"ǎ";s:2:"Ǐ";s:2:"ǐ";s:2:"Ǒ";s:2:"ǒ";s:2:"Ǔ";s:2:"ǔ";s:2:"Ǖ";s:2:"ǖ";s:2:"Ǘ";s:2:"ǘ";s:2:"Ǚ";s:2:"ǚ";s:2:"Ǜ";s:2:"ǜ";s:2:"Ǟ";s:2:"ǟ";s:2:"Ǡ";s:2:"ǡ";s:2:"Ǣ";s:2:"ǣ";s:2:"Ǥ";s:2:"ǥ";s:2:"Ǧ";s:2:"ǧ";s:2:"Ǩ";s:2:"ǩ";s:2:"Ǫ";s:2:"ǫ";s:2:"Ǭ";s:2:"ǭ";s:2:"Ǯ";s:2:"ǯ";s:2:"Ǳ";s:2:"ǳ";s:2:"ǲ";s:2:"ǳ";s:2:"Ǵ";s:2:"ǵ";s:2:"Ƕ";s:2:"ƕ";s:2:"Ƿ";s:2:"ƿ";s:2:"Ǹ";s:2:"ǹ";s:2:"Ǻ";s:2:"ǻ";s:2:"Ǽ";s:2:"ǽ";s:2:"Ǿ";s:2:"ǿ";s:2:"Ȁ";s:2:"ȁ";s:2:"Ȃ";s:2:"ȃ";s:2:"Ȅ";s:2:"ȅ";s:2:"Ȇ";s:2:"ȇ";s:2:"Ȉ";s:2:"ȉ";s:2:"Ȋ";s:2:"ȋ";s:2:"Ȍ";s:2:"ȍ";s:2:"Ȏ";s:2:"ȏ";s:2:"Ȑ";s:2:"ȑ";s:2:"Ȓ";s:2:"ȓ";s:2:"Ȕ";s:2:"ȕ";s:2:"Ȗ";s:2:"ȗ";s:2:"Ș";s:2:"ș";s:2:"Ț";s:2:"ț";s:2:"Ȝ";s:2:"ȝ";s:2:"Ȟ";s:2:"ȟ";s:2:"Ȣ";s:2:"ȣ";s:2:"Ȥ";s:2:"ȥ";s:2:"Ȧ";s:2:"ȧ";s:2:"Ȩ";s:2:"ȩ";s:2:"Ȫ";s:2:"ȫ";s:2:"Ȭ";s:2:"ȭ";s:2:"Ȯ";s:2:"ȯ";s:2:"Ȱ";s:2:"ȱ";s:2:"Ȳ";s:2:"ȳ";s:2:"Ά";s:2:"ά";s:2:"Έ";s:2:"έ";s:2:"Ή";s:2:"ή";s:2:"Ί";s:2:"ί";s:2:"Ό";s:2:"ό";s:2:"Ύ";s:2:"ύ";s:2:"Ώ";s:2:"ώ";s:2:"Α";s:2:"α";s:2:"Β";s:2:"β";s:2:"Γ";s:2:"γ";s:2:"Δ";s:2:"δ";s:2:"Ε";s:2:"ε";s:2:"Ζ";s:2:"ζ";s:2:"Η";s:2:"η";s:2:"Θ";s:2:"θ";s:2:"Ι";s:2:"ι";s:2:"Κ";s:2:"κ";s:2:"Λ";s:2:"λ";s:2:"Μ";s:2:"μ";s:2:"Ν";s:2:"ν";s:2:"Ξ";s:2:"ξ";s:2:"Ο";s:2:"ο";s:2:"Π";s:2:"π";s:2:"Ρ";s:2:"ρ";s:2:"Σ";s:2:"σ";s:2:"Τ";s:2:"τ";s:2:"Υ";s:2:"υ";s:2:"Φ";s:2:"φ";s:2:"Χ";s:2:"χ";s:2:"Ψ";s:2:"ψ";s:2:"Ω";s:2:"ω";s:2:"Ϊ";s:2:"ϊ";s:2:"Ϋ";s:2:"ϋ";s:2:"Ϛ";s:2:"ϛ";s:2:"Ϝ";s:2:"ϝ";s:2:"Ϟ";s:2:"ϟ";s:2:"Ϡ";s:2:"ϡ";s:2:"Ϣ";s:2:"ϣ";s:2:"Ϥ";s:2:"ϥ";s:2:"Ϧ";s:2:"ϧ";s:2:"Ϩ";s:2:"ϩ";s:2:"Ϫ";s:2:"ϫ";s:2:"Ϭ";s:2:"ϭ";s:2:"Ϯ";s:2:"ϯ";s:2:"ϴ";s:2:"θ";s:2:"Ѐ";s:2:"ѐ";s:2:"Ё";s:2:"ё";s:2:"Ђ";s:2:"ђ";s:2:"Ѓ";s:2:"ѓ";s:2:"Є";s:2:"є";s:2:"Ѕ";s:2:"ѕ";s:2:"І";s:2:"і";s:2:"Ї";s:2:"ї";s:2:"Ј";s:2:"ј";s:2:"Љ";s:2:"љ";s:2:"Њ";s:2:"њ";s:2:"Ћ";s:2:"ћ";s:2:"Ќ";s:2:"ќ";s:2:"Ѝ";s:2:"ѝ";s:2:"Ў";s:2:"ў";s:2:"Џ";s:2:"џ";s:2:"А";s:2:"а";s:2:"Б";s:2:"б";s:2:"В";s:2:"в";s:2:"Г";s:2:"г";s:2:"Д";s:2:"д";s:2:"Е";s:2:"е";s:2:"Ж";s:2:"ж";s:2:"З";s:2:"з";s:2:"И";s:2:"и";s:2:"Й";s:2:"й";s:2:"К";s:2:"к";s:2:"Л";s:2:"л";s:2:"М";s:2:"м";s:2:"Н";s:2:"н";s:2:"О";s:2:"о";s:2:"П";s:2:"п";s:2:"Р";s:2:"р";s:2:"С";s:2:"с";s:2:"Т";s:2:"т";s:2:"У";s:2:"у";s:2:"Ф";s:2:"ф";s:2:"Х";s:2:"х";s:2:"Ц";s:2:"ц";s:2:"Ч";s:2:"ч";s:2:"Ш";s:2:"ш";s:2:"Щ";s:2:"щ";s:2:"Ъ";s:2:"ъ";s:2:"Ы";s:2:"ы";s:2:"Ь";s:2:"ь";s:2:"Э";s:2:"э";s:2:"Ю";s:2:"ю";s:2:"Я";s:2:"я";s:2:"Ѡ";s:2:"ѡ";s:2:"Ѣ";s:2:"ѣ";s:2:"Ѥ";s:2:"ѥ";s:2:"Ѧ";s:2:"ѧ";s:2:"Ѩ";s:2:"ѩ";s:2:"Ѫ";s:2:"ѫ";s:2:"Ѭ";s:2:"ѭ";s:2:"Ѯ";s:2:"ѯ";s:2:"Ѱ";s:2:"ѱ";s:2:"Ѳ";s:2:"ѳ";s:2:"Ѵ";s:2:"ѵ";s:2:"Ѷ";s:2:"ѷ";s:2:"Ѹ";s:2:"ѹ";s:2:"Ѻ";s:2:"ѻ";s:2:"Ѽ";s:2:"ѽ";s:2:"Ѿ";s:2:"ѿ";s:2:"Ҁ";s:2:"ҁ";s:2:"Ҍ";s:2:"ҍ";s:2:"Ҏ";s:2:"ҏ";s:2:"Ґ";s:2:"ґ";s:2:"Ғ";s:2:"ғ";s:2:"Ҕ";s:2:"ҕ";s:2:"Җ";s:2:"җ";s:2:"Ҙ";s:2:"ҙ";s:2:"Қ";s:2:"қ";s:2:"Ҝ";s:2:"ҝ";s:2:"Ҟ";s:2:"ҟ";s:2:"Ҡ";s:2:"ҡ";s:2:"Ң";s:2:"ң";s:2:"Ҥ";s:2:"ҥ";s:2:"Ҧ";s:2:"ҧ";s:2:"Ҩ";s:2:"ҩ";s:2:"Ҫ";s:2:"ҫ";s:2:"Ҭ";s:2:"ҭ";s:2:"Ү";s:2:"ү";s:2:"Ұ";s:2:"ұ";s:2:"Ҳ";s:2:"ҳ";s:2:"Ҵ";s:2:"ҵ";s:2:"Ҷ";s:2:"ҷ";s:2:"Ҹ";s:2:"ҹ";s:2:"Һ";s:2:"һ";s:2:"Ҽ";s:2:"ҽ";s:2:"Ҿ";s:2:"ҿ";s:2:"Ӂ";s:2:"ӂ";s:2:"Ӄ";s:2:"ӄ";s:2:"Ӈ";s:2:"ӈ";s:2:"Ӌ";s:2:"ӌ";s:2:"Ӑ";s:2:"ӑ";s:2:"Ӓ";s:2:"ӓ";s:2:"Ӕ";s:2:"ӕ";s:2:"Ӗ";s:2:"ӗ";s:2:"Ә";s:2:"ә";s:2:"Ӛ";s:2:"ӛ";s:2:"Ӝ";s:2:"ӝ";s:2:"Ӟ";s:2:"ӟ";s:2:"Ӡ";s:2:"ӡ";s:2:"Ӣ";s:2:"ӣ";s:2:"Ӥ";s:2:"ӥ";s:2:"Ӧ";s:2:"ӧ";s:2:"Ө";s:2:"ө";s:2:"Ӫ";s:2:"ӫ";s:2:"Ӭ";s:2:"ӭ";s:2:"Ӯ";s:2:"ӯ";s:2:"Ӱ";s:2:"ӱ";s:2:"Ӳ";s:2:"ӳ";s:2:"Ӵ";s:2:"ӵ";s:2:"Ӹ";s:2:"ӹ";s:2:"Ա";s:2:"ա";s:2:"Բ";s:2:"բ";s:2:"Գ";s:2:"գ";s:2:"Դ";s:2:"դ";s:2:"Ե";s:2:"ե";s:2:"Զ";s:2:"զ";s:2:"Է";s:2:"է";s:2:"Ը";s:2:"ը";s:2:"Թ";s:2:"թ";s:2:"Ժ";s:2:"ժ";s:2:"Ի";s:2:"ի";s:2:"Լ";s:2:"լ";s:2:"Խ";s:2:"խ";s:2:"Ծ";s:2:"ծ";s:2:"Կ";s:2:"կ";s:2:"Հ";s:2:"հ";s:2:"Ձ";s:2:"ձ";s:2:"Ղ";s:2:"ղ";s:2:"Ճ";s:2:"ճ";s:2:"Մ";s:2:"մ";s:2:"Յ";s:2:"յ";s:2:"Ն";s:2:"ն";s:2:"Շ";s:2:"շ";s:2:"Ո";s:2:"ո";s:2:"Չ";s:2:"չ";s:2:"Պ";s:2:"պ";s:2:"Ջ";s:2:"ջ";s:2:"Ռ";s:2:"ռ";s:2:"Ս";s:2:"ս";s:2:"Վ";s:2:"վ";s:2:"Տ";s:2:"տ";s:2:"Ր";s:2:"ր";s:2:"Ց";s:2:"ց";s:2:"Ւ";s:2:"ւ";s:2:"Փ";s:2:"փ";s:2:"Ք";s:2:"ք";s:2:"Օ";s:2:"օ";s:2:"Ֆ";s:2:"ֆ";s:3:"Ḁ";s:3:"ḁ";s:3:"Ḃ";s:3:"ḃ";s:3:"Ḅ";s:3:"ḅ";s:3:"Ḇ";s:3:"ḇ";s:3:"Ḉ";s:3:"ḉ";s:3:"Ḋ";s:3:"ḋ";s:3:"Ḍ";s:3:"ḍ";s:3:"Ḏ";s:3:"ḏ";s:3:"Ḑ";s:3:"ḑ";s:3:"Ḓ";s:3:"ḓ";s:3:"Ḕ";s:3:"ḕ";s:3:"Ḗ";s:3:"ḗ";s:3:"Ḙ";s:3:"ḙ";s:3:"Ḛ";s:3:"ḛ";s:3:"Ḝ";s:3:"ḝ";s:3:"Ḟ";s:3:"ḟ";s:3:"Ḡ";s:3:"ḡ";s:3:"Ḣ";s:3:"ḣ";s:3:"Ḥ";s:3:"ḥ";s:3:"Ḧ";s:3:"ḧ";s:3:"Ḩ";s:3:"ḩ";s:3:"Ḫ";s:3:"ḫ";s:3:"Ḭ";s:3:"ḭ";s:3:"Ḯ";s:3:"ḯ";s:3:"Ḱ";s:3:"ḱ";s:3:"Ḳ";s:3:"ḳ";s:3:"Ḵ";s:3:"ḵ";s:3:"Ḷ";s:3:"ḷ";s:3:"Ḹ";s:3:"ḹ";s:3:"Ḻ";s:3:"ḻ";s:3:"Ḽ";s:3:"ḽ";s:3:"Ḿ";s:3:"ḿ";s:3:"Ṁ";s:3:"ṁ";s:3:"Ṃ";s:3:"ṃ";s:3:"Ṅ";s:3:"ṅ";s:3:"Ṇ";s:3:"ṇ";s:3:"Ṉ";s:3:"ṉ";s:3:"Ṋ";s:3:"ṋ";s:3:"Ṍ";s:3:"ṍ";s:3:"Ṏ";s:3:"ṏ";s:3:"Ṑ";s:3:"ṑ";s:3:"Ṓ";s:3:"ṓ";s:3:"Ṕ";s:3:"ṕ";s:3:"Ṗ";s:3:"ṗ";s:3:"Ṙ";s:3:"ṙ";s:3:"Ṛ";s:3:"ṛ";s:3:"Ṝ";s:3:"ṝ";s:3:"Ṟ";s:3:"ṟ";s:3:"Ṡ";s:3:"ṡ";s:3:"Ṣ";s:3:"ṣ";s:3:"Ṥ";s:3:"ṥ";s:3:"Ṧ";s:3:"ṧ";s:3:"Ṩ";s:3:"ṩ";s:3:"Ṫ";s:3:"ṫ";s:3:"Ṭ";s:3:"ṭ";s:3:"Ṯ";s:3:"ṯ";s:3:"Ṱ";s:3:"ṱ";s:3:"Ṳ";s:3:"ṳ";s:3:"Ṵ";s:3:"ṵ";s:3:"Ṷ";s:3:"ṷ";s:3:"Ṹ";s:3:"ṹ";s:3:"Ṻ";s:3:"ṻ";s:3:"Ṽ";s:3:"ṽ";s:3:"Ṿ";s:3:"ṿ";s:3:"Ẁ";s:3:"ẁ";s:3:"Ẃ";s:3:"ẃ";s:3:"Ẅ";s:3:"ẅ";s:3:"Ẇ";s:3:"ẇ";s:3:"Ẉ";s:3:"ẉ";s:3:"Ẋ";s:3:"ẋ";s:3:"Ẍ";s:3:"ẍ";s:3:"Ẏ";s:3:"ẏ";s:3:"Ẑ";s:3:"ẑ";s:3:"Ẓ";s:3:"ẓ";s:3:"Ẕ";s:3:"ẕ";s:3:"Ạ";s:3:"ạ";s:3:"Ả";s:3:"ả";s:3:"Ấ";s:3:"ấ";s:3:"Ầ";s:3:"ầ";s:3:"Ẩ";s:3:"ẩ";s:3:"Ẫ";s:3:"ẫ";s:3:"Ậ";s:3:"ậ";s:3:"Ắ";s:3:"ắ";s:3:"Ằ";s:3:"ằ";s:3:"Ẳ";s:3:"ẳ";s:3:"Ẵ";s:3:"ẵ";s:3:"Ặ";s:3:"ặ";s:3:"Ẹ";s:3:"ẹ";s:3:"Ẻ";s:3:"ẻ";s:3:"Ẽ";s:3:"ẽ";s:3:"Ế";s:3:"ế";s:3:"Ề";s:3:"ề";s:3:"Ể";s:3:"ể";s:3:"Ễ";s:3:"ễ";s:3:"Ệ";s:3:"ệ";s:3:"Ỉ";s:3:"ỉ";s:3:"Ị";s:3:"ị";s:3:"Ọ";s:3:"ọ";s:3:"Ỏ";s:3:"ỏ";s:3:"Ố";s:3:"ố";s:3:"Ồ";s:3:"ồ";s:3:"Ổ";s:3:"ổ";s:3:"Ỗ";s:3:"ỗ";s:3:"Ộ";s:3:"ộ";s:3:"Ớ";s:3:"ớ";s:3:"Ờ";s:3:"ờ";s:3:"Ở";s:3:"ở";s:3:"Ỡ";s:3:"ỡ";s:3:"Ợ";s:3:"ợ";s:3:"Ụ";s:3:"ụ";s:3:"Ủ";s:3:"ủ";s:3:"Ứ";s:3:"ứ";s:3:"Ừ";s:3:"ừ";s:3:"Ử";s:3:"ử";s:3:"Ữ";s:3:"ữ";s:3:"Ự";s:3:"ự";s:3:"Ỳ";s:3:"ỳ";s:3:"Ỵ";s:3:"ỵ";s:3:"Ỷ";s:3:"ỷ";s:3:"Ỹ";s:3:"ỹ";s:3:"Ἀ";s:3:"ἀ";s:3:"Ἁ";s:3:"ἁ";s:3:"Ἂ";s:3:"ἂ";s:3:"Ἃ";s:3:"ἃ";s:3:"Ἄ";s:3:"ἄ";s:3:"Ἅ";s:3:"ἅ";s:3:"Ἆ";s:3:"ἆ";s:3:"Ἇ";s:3:"ἇ";s:3:"Ἐ";s:3:"ἐ";s:3:"Ἑ";s:3:"ἑ";s:3:"Ἒ";s:3:"ἒ";s:3:"Ἓ";s:3:"ἓ";s:3:"Ἔ";s:3:"ἔ";s:3:"Ἕ";s:3:"ἕ";s:3:"Ἠ";s:3:"ἠ";s:3:"Ἡ";s:3:"ἡ";s:3:"Ἢ";s:3:"ἢ";s:3:"Ἣ";s:3:"ἣ";s:3:"Ἤ";s:3:"ἤ";s:3:"Ἥ";s:3:"ἥ";s:3:"Ἦ";s:3:"ἦ";s:3:"Ἧ";s:3:"ἧ";s:3:"Ἰ";s:3:"ἰ";s:3:"Ἱ";s:3:"ἱ";s:3:"Ἲ";s:3:"ἲ";s:3:"Ἳ";s:3:"ἳ";s:3:"Ἴ";s:3:"ἴ";s:3:"Ἵ";s:3:"ἵ";s:3:"Ἶ";s:3:"ἶ";s:3:"Ἷ";s:3:"ἷ";s:3:"Ὀ";s:3:"ὀ";s:3:"Ὁ";s:3:"ὁ";s:3:"Ὂ";s:3:"ὂ";s:3:"Ὃ";s:3:"ὃ";s:3:"Ὄ";s:3:"ὄ";s:3:"Ὅ";s:3:"ὅ";s:3:"Ὑ";s:3:"ὑ";s:3:"Ὓ";s:3:"ὓ";s:3:"Ὕ";s:3:"ὕ";s:3:"Ὗ";s:3:"ὗ";s:3:"Ὠ";s:3:"ὠ";s:3:"Ὡ";s:3:"ὡ";s:3:"Ὢ";s:3:"ὢ";s:3:"Ὣ";s:3:"ὣ";s:3:"Ὤ";s:3:"ὤ";s:3:"Ὥ";s:3:"ὥ";s:3:"Ὦ";s:3:"ὦ";s:3:"Ὧ";s:3:"ὧ";s:3:"ᾈ";s:3:"ᾀ";s:3:"ᾉ";s:3:"ᾁ";s:3:"ᾊ";s:3:"ᾂ";s:3:"ᾋ";s:3:"ᾃ";s:3:"ᾌ";s:3:"ᾄ";s:3:"ᾍ";s:3:"ᾅ";s:3:"ᾎ";s:3:"ᾆ";s:3:"ᾏ";s:3:"ᾇ";s:3:"ᾘ";s:3:"ᾐ";s:3:"ᾙ";s:3:"ᾑ";s:3:"ᾚ";s:3:"ᾒ";s:3:"ᾛ";s:3:"ᾓ";s:3:"ᾜ";s:3:"ᾔ";s:3:"ᾝ";s:3:"ᾕ";s:3:"ᾞ";s:3:"ᾖ";s:3:"ᾟ";s:3:"ᾗ";s:3:"ᾨ";s:3:"ᾠ";s:3:"ᾩ";s:3:"ᾡ";s:3:"ᾪ";s:3:"ᾢ";s:3:"ᾫ";s:3:"ᾣ";s:3:"ᾬ";s:3:"ᾤ";s:3:"ᾭ";s:3:"ᾥ";s:3:"ᾮ";s:3:"ᾦ";s:3:"ᾯ";s:3:"ᾧ";s:3:"Ᾰ";s:3:"ᾰ";s:3:"Ᾱ";s:3:"ᾱ";s:3:"Ὰ";s:3:"ὰ";s:3:"Ά";s:3:"ά";s:3:"ᾼ";s:3:"ᾳ";s:3:"Ὲ";s:3:"ὲ";s:3:"Έ";s:3:"έ";s:3:"Ὴ";s:3:"ὴ";s:3:"Ή";s:3:"ή";s:3:"ῌ";s:3:"ῃ";s:3:"Ῐ";s:3:"ῐ";s:3:"Ῑ";s:3:"ῑ";s:3:"Ὶ";s:3:"ὶ";s:3:"Ί";s:3:"ί";s:3:"Ῠ";s:3:"ῠ";s:3:"Ῡ";s:3:"ῡ";s:3:"Ὺ";s:3:"ὺ";s:3:"Ύ";s:3:"ύ";s:3:"Ῥ";s:3:"ῥ";s:3:"Ὸ";s:3:"ὸ";s:3:"Ό";s:3:"ό";s:3:"Ὼ";s:3:"ὼ";s:3:"Ώ";s:3:"ώ";s:3:"ῼ";s:3:"ῳ";s:3:"Ω";s:2:"ω";s:3:"K";s:1:"k";s:3:"Å";s:2:"å";s:3:"Ⅰ";s:3:"ⅰ";s:3:"Ⅱ";s:3:"ⅱ";s:3:"Ⅲ";s:3:"ⅲ";s:3:"Ⅳ";s:3:"ⅳ";s:3:"Ⅴ";s:3:"ⅴ";s:3:"Ⅵ";s:3:"ⅵ";s:3:"Ⅶ";s:3:"ⅶ";s:3:"Ⅷ";s:3:"ⅷ";s:3:"Ⅸ";s:3:"ⅸ";s:3:"Ⅹ";s:3:"ⅹ";s:3:"Ⅺ";s:3:"ⅺ";s:3:"Ⅻ";s:3:"ⅻ";s:3:"Ⅼ";s:3:"ⅼ";s:3:"Ⅽ";s:3:"ⅽ";s:3:"Ⅾ";s:3:"ⅾ";s:3:"Ⅿ";s:3:"ⅿ";s:3:"Ⓐ";s:3:"ⓐ";s:3:"Ⓑ";s:3:"ⓑ";s:3:"Ⓒ";s:3:"ⓒ";s:3:"Ⓓ";s:3:"ⓓ";s:3:"Ⓔ";s:3:"ⓔ";s:3:"Ⓕ";s:3:"ⓕ";s:3:"Ⓖ";s:3:"ⓖ";s:3:"Ⓗ";s:3:"ⓗ";s:3:"Ⓘ";s:3:"ⓘ";s:3:"Ⓙ";s:3:"ⓙ";s:3:"Ⓚ";s:3:"ⓚ";s:3:"Ⓛ";s:3:"ⓛ";s:3:"Ⓜ";s:3:"ⓜ";s:3:"Ⓝ";s:3:"ⓝ";s:3:"Ⓞ";s:3:"ⓞ";s:3:"Ⓟ";s:3:"ⓟ";s:3:"Ⓠ";s:3:"ⓠ";s:3:"Ⓡ";s:3:"ⓡ";s:3:"Ⓢ";s:3:"ⓢ";s:3:"Ⓣ";s:3:"ⓣ";s:3:"Ⓤ";s:3:"ⓤ";s:3:"Ⓥ";s:3:"ⓥ";s:3:"Ⓦ";s:3:"ⓦ";s:3:"Ⓧ";s:3:"ⓧ";s:3:"Ⓨ";s:3:"ⓨ";s:3:"Ⓩ";s:3:"ⓩ";s:3:"Ａ";s:3:"ａ";s:3:"Ｂ";s:3:"ｂ";s:3:"Ｃ";s:3:"ｃ";s:3:"Ｄ";s:3:"ｄ";s:3:"Ｅ";s:3:"ｅ";s:3:"Ｆ";s:3:"ｆ";s:3:"Ｇ";s:3:"ｇ";s:3:"Ｈ";s:3:"ｈ";s:3:"Ｉ";s:3:"ｉ";s:3:"Ｊ";s:3:"ｊ";s:3:"Ｋ";s:3:"ｋ";s:3:"Ｌ";s:3:"ｌ";s:3:"Ｍ";s:3:"ｍ";s:3:"Ｎ";s:3:"ｎ";s:3:"Ｏ";s:3:"ｏ";s:3:"Ｐ";s:3:"ｐ";s:3:"Ｑ";s:3:"ｑ";s:3:"Ｒ";s:3:"ｒ";s:3:"Ｓ";s:3:"ｓ";s:3:"Ｔ";s:3:"ｔ";s:3:"Ｕ";s:3:"ｕ";s:3:"Ｖ";s:3:"ｖ";s:3:"Ｗ";s:3:"ｗ";s:3:"Ｘ";s:3:"ｘ";s:3:"Ｙ";s:3:"ｙ";s:3:"Ｚ";s:3:"ｚ";s:4:"𐐀";s:4:"𐐨";s:4:"𐐁";s:4:"𐐩";s:4:"𐐂";s:4:"𐐪";s:4:"𐐃";s:4:"𐐫";s:4:"𐐄";s:4:"𐐬";s:4:"𐐅";s:4:"𐐭";s:4:"𐐆";s:4:"𐐮";s:4:"𐐇";s:4:"𐐯";s:4:"𐐈";s:4:"𐐰";s:4:"𐐉";s:4:"𐐱";s:4:"𐐊";s:4:"𐐲";s:4:"𐐋";s:4:"𐐳";s:4:"𐐌";s:4:"𐐴";s:4:"𐐍";s:4:"𐐵";s:4:"𐐎";s:4:"𐐶";s:4:"𐐏";s:4:"𐐷";s:4:"𐐐";s:4:"𐐸";s:4:"𐐑";s:4:"𐐹";s:4:"𐐒";s:4:"𐐺";s:4:"𐐓";s:4:"𐐻";s:4:"𐐔";s:4:"𐐼";s:4:"𐐕";s:4:"𐐽";s:4:"𐐖";s:4:"𐐾";s:4:"𐐗";s:4:"𐐿";s:4:"𐐘";s:4:"𐑀";s:4:"𐐙";s:4:"𐑁";s:4:"𐐚";s:4:"𐑂";s:4:"𐐛";s:4:"𐑃";s:4:"𐐜";s:4:"𐑄";s:4:"𐐝";s:4:"𐑅";s:4:"𐐞";s:4:"𐑆";s:4:"𐐟";s:4:"𐑇";s:4:"𐐠";s:4:"𐑈";s:4:"𐐡";s:4:"𐑉";s:4:"𐐢";s:4:"𐑊";s:4:"𐐣";s:4:"𐑋";s:4:"𐐤";s:4:"𐑌";s:4:"𐐥";s:4:"𐑍";}}
Index: /MediaWiki/branches/1.11/serialized/serialize-localisation.php
===================================================================
--- /MediaWiki/branches/1.11/serialized/serialize-localisation.php	(revision 1280)
+++ /MediaWiki/branches/1.11/serialized/serialize-localisation.php	(revision 1280)
@@ -0,0 +1,35 @@
+<?php
+
+$wgNoDBParam = true;
+$optionsWithArgs = array( 'o' );
+require_once( dirname(__FILE__).'/../maintenance/commandLine.inc' );
+require_once( dirname(__FILE__).'/serialize.php' );
+
+$stderr = fopen( 'php://stderr', 'w' );
+if ( !isset( $args[0] ) ) {
+	fwrite( $stderr, "No input file specified\n" );
+	exit( 1 );
+}
+$file = $args[0];
+$code = str_replace( 'Messages', '', basename( $file ) );
+$code = str_replace( '.php', '', $code );
+$code = strtolower( str_replace( '_', '-', $code ) );
+
+$localisation = Language::getLocalisationArray( $code, true );
+if ( wfIsWindows() ) {
+	$localisation = unixLineEndings( $localisation );
+}
+
+if ( isset( $options['o'] ) ) {
+	$out = fopen( $options['o'], 'wb' );
+	if ( !$out ) {
+		fwrite( $stderr, "Unable to open file \"{$options['o']}\" for output\n" );
+		exit( 1 );
+	}
+} else {
+	$out = fopen( 'php://stdout', 'wb' );
+}
+
+fwrite( $out, serialize( $localisation ) );
+
+?>
Index: /MediaWiki/branches/1.11/serialized/serialize.php
===================================================================
--- /MediaWiki/branches/1.11/serialized/serialize.php	(revision 1280)
+++ /MediaWiki/branches/1.11/serialized/serialize.php	(revision 1280)
@@ -0,0 +1,75 @@
+<?php
+
+if ( !defined( 'MEDIAWIKI' ) ) {
+	$wgNoDBParam = true;
+	$optionsWithArgs = array( 'o' );
+	require_once( dirname(__FILE__).'/../maintenance/commandLine.inc' );
+
+	$stderr = fopen( 'php://stderr', 'w' );
+	if ( !isset( $args[0] ) ) {
+		fwrite( $stderr, "No input file specified\n" );
+		exit( 1 );
+	}
+	if ( wfIsWindows() ) {
+		$files = array();
+		foreach ( $args as $arg ) {
+			$files = array_merge( $files, glob( $arg ) );
+		}
+		if ( !$files ) {
+			fwrite( $stderr, "No files found\n" );
+		}
+	} else {
+		$files = $args;
+	}
+
+	if ( isset( $options['o'] ) ) {
+		$out = fopen( $options['o'], 'wb' );
+		if ( !$out ) {
+			fwrite( $stderr, "Unable to open file \"{$options['o']}\" for output\n" );
+			exit( 1 );
+		}
+	} else {
+		$out = fopen( 'php://stdout', 'wb' );
+	}
+
+	$vars = array();
+	foreach ( $files as $inputFile ) {
+		$vars = array_merge( $vars, getVars( $inputFile ) );
+	}
+	fwrite( $out, serialize( $vars ) );
+	fclose( $out );
+	exit( 0 );
+}
+
+//----------------------------------------------------------------------------
+
+function getVars( $_gv_filename ) {
+	require( $_gv_filename );
+	$vars = get_defined_vars();
+	unset( $vars['_gv_filename'] );
+
+	# Clean up line endings
+	if ( wfIsWindows() ) {
+		$vars = unixLineEndings( $vars );
+	}
+	return $vars;
+}
+
+function unixLineEndings( $var ) {
+	static $recursionLevel = 0;
+	if ( $recursionLevel > 50 ) {
+		global $stderr;
+		fwrite( $stderr, "Error: Recursion limit exceeded. Possible circular reference in array variable.\n" );
+		exit( 2 );
+	}
+	
+	if ( is_array( $var ) ) {
+		++$recursionLevel;
+		$var = array_map( 'unixLineEndings', $var );
+		--$recursionLevel;
+	} elseif ( is_string( $var ) ) {
+		$var = str_replace( "\r\n", "\n", $var );
+	}
+	return $var;
+}
+?>
Index: /MediaWiki/branches/1.11/skins/Chick.deps.php
===================================================================
--- /MediaWiki/branches/1.11/skins/Chick.deps.php	(revision 1280)
+++ /MediaWiki/branches/1.11/skins/Chick.deps.php	(revision 1280)
@@ -0,0 +1,13 @@
+<?php
+// This file exists to ensure that base classes are preloaded before
+// Chick.php is compiled, working around a bug in the APC opcode
+// cache on PHP 5, where cached code can break if the include order
+// changed on a subsequent page view.
+// see http://mail.wikipedia.org/pipermail/wikitech-l/2006-January/033660.html
+
+if ( ! defined( 'MEDIAWIKI' ) )
+	die( 1 );
+
+require_once('includes/SkinTemplate.php');
+require_once( dirname(__FILE__) . '/MonoBook.php' );
+?>
Index: /MediaWiki/branches/1.11/skins/Chick.php
===================================================================
--- /MediaWiki/branches/1.11/skins/Chick.php	(revision 1280)
+++ /MediaWiki/branches/1.11/skins/Chick.php	(revision 1280)
@@ -0,0 +1,28 @@
+<?php
+/**
+ * See skin.txt
+ *
+ * @todo document
+ * @addtogroup Skins
+ */
+
+if( !defined( 'MEDIAWIKI' ) )
+	die( -1 );
+
+/** */
+require_once( dirname(__FILE__) . '/MonoBook.php' );
+
+/**
+ * @todo document
+ * @addtogroup Skins
+ */
+class SkinChick extends SkinTemplate {
+	function initPage( &$out ) {
+		SkinTemplate::initPage( $out );
+		$this->skinname  = 'chick';
+		$this->stylename = 'chick';
+		$this->template  = 'MonoBookTemplate';
+	}
+}
+
+?>
Index: /MediaWiki/branches/1.11/skins/CologneBlue.php
===================================================================
--- /MediaWiki/branches/1.11/skins/CologneBlue.php	(revision 1280)
+++ /MediaWiki/branches/1.11/skins/CologneBlue.php	(revision 1280)
@@ -0,0 +1,312 @@
+<?php
+/**
+ * See skin.txt
+ *
+ * @todo document
+ * @addtogroup Skins
+ */
+
+if( !defined( 'MEDIAWIKI' ) )
+	die( -1 );
+
+/**
+ * @todo document
+ * @addtogroup Skins
+ */
+class SkinCologneBlue extends Skin {
+
+	private $searchboxes = '';
+	// How many search boxes have we made?  Avoid duplicate id's.
+
+	function getStylesheet() {
+		return 'common/cologneblue.css';
+	}
+	function getSkinName() {
+		return "cologneblue";
+	}
+
+	function doBeforeContent() {
+
+		$s = "";
+		$qb = $this->qbSetting();
+		$mainPageObj = Title::newMainPage();
+
+		$s .= "\n<div id='content'>\n<div id='topbar'>" .
+		  "<table width='100%' border='0' cellspacing='0' cellpadding='8'><tr>";
+
+		$s .= "<td class='top' align='left' valign='middle' nowrap='nowrap'>";
+		$s .= "<a href=\"" . $mainPageObj->escapeLocalURL() . "\">";
+		$s .= "<span id='sitetitle'>" . wfMsg( "sitetitle" ) . "</span></a>";
+
+		$s .= "</td><td class='top' align='right' valign='bottom' width='100%'>";
+		$s .= $this->sysLinks();
+		$s .= "</td></tr><tr><td valign='top'>";
+
+		$s .= "<font size='-1'><span id='sitesub'>";
+		$s .= htmlspecialchars( wfMsg( "sitesubtitle" ) ) . "</span></font>";
+		$s .= "</td><td align='right'>" ;
+
+		$s .= "<font size='-1'><span id='langlinks'>" ;
+		$s .= str_replace ( "<br />" , "" , $this->otherLanguages() );
+		$cat = $this->getCategoryLinks();
+		if( $cat ) $s .= "<br />$cat\n";
+		$s .= "<br />" . $this->pageTitleLinks();
+		$s .= "</span></font>";
+
+		$s .= "</td></tr></table>\n";
+
+		$s .= "\n</div>\n<div id='article'>";
+
+		$notice = wfGetSiteNotice();
+		if( $notice ) {
+			$s .= "\n<div id='siteNotice'>$notice</div>\n";
+		}
+		$s .= $this->pageTitle();
+		$s .= $this->pageSubtitle() . "\n";
+		return $s;
+	}
+
+	function doAfterContent()
+	{
+		global $wgOut;
+
+		$s = "\n</div><br clear='all' />\n";
+
+		$s .= "\n<div id='footer'>";
+		$s .= "<table width='98%' border='0' cellspacing='0'><tr>";
+
+		$qb = $this->qbSetting();
+		if ( 1 == $qb || 3 == $qb ) { # Left
+			$s .= $this->getQuickbarCompensator();
+		}
+		$s .= "<td class='bottom' align='center' valign='top'>";
+
+		$s .= $this->bottomLinks();
+		$s .= "\n<br />" . $this->makeKnownLinkObj( Title::newMainPage() ) . " | "
+		  . $this->aboutLink() . " | "
+		  . $this->searchForm( wfMsg( "qbfind" ) );
+
+		$s .= "\n<br />" . $this->pageStats();
+
+		$s .= "</td>";
+		if ( 2 == $qb ) { # Right
+			$s .= $this->getQuickbarCompensator();
+		}
+		$s .= "</tr></table>\n</div>\n</div>\n";
+
+		if ( 0 != $qb ) { $s .= $this->quickBar(); }
+		return $s;
+	}
+
+	function doGetUserStyles() {
+		global $wgOut;
+		$s = parent::doGetUserStyles();
+		$qb = $this->qbSetting();
+
+		if ( 2 == $qb ) { # Right
+			$s .= "#quickbar { position: absolute; right: 4px; }\n" .
+			  "#article { margin-left: 4px; margin-right: 148px; }\n";
+		} else if ( 1 == $qb ) {
+			$s .= "#quickbar { position: absolute; left: 4px; }\n" .
+			  "#article { margin-left: 148px; margin-right: 4px; }\n";
+		} else if ( 3 == $qb ) { # Floating left
+			$s .= "#quickbar { position:absolute; left:4px } \n" .
+			  "#topbar { margin-left: 148px }\n" .
+			  "#article { margin-left:148px; margin-right: 4px; } \n" .
+			  "body>#quickbar { position:fixed; left:4px; top:4px; overflow:auto ;bottom:4px;} \n"; # Hides from IE
+		} else if ( 4 == $qb ) { # Floating right
+			$s .= "#quickbar { position: fixed; right: 4px; } \n" .
+			  "#topbar { margin-right: 148px }\n" .
+			  "#article { margin-right: 148px; margin-left: 4px; } \n" .
+			  "body>#quickbar { position: fixed; right: 4px; top: 4px; overflow: auto ;bottom:4px;} \n"; # Hides from IE
+		}
+		return $s;
+	}
+
+	function sysLinks() {
+		global $wgUser, $wgContLang, $wgTitle;
+		$li = $wgContLang->specialPage("Userlogin");
+		$lo = $wgContLang->specialPage("Userlogout");
+
+		$rt = $wgTitle->getPrefixedURL();
+		if ( 0 == strcasecmp( urlencode( $lo ), $rt ) ) {
+			$q = "";
+		} else {
+			$q = "returnto={$rt}";
+		}
+
+		$s = "" .
+		  $this->mainPageLink()
+		  . " | " .
+		  $this->makeKnownLink( wfMsgForContent( "aboutpage" ), wfMsg( "about" ) )
+		  . " | " .
+		  $this->makeKnownLink( wfMsgForContent( "helppage" ), wfMsg( "help" ) )
+		  . " | " .
+		  $this->makeKnownLink( wfMsgForContent( "faqpage" ), wfMsg("faq") )
+		  . " | " .
+		  $this->specialLink( "specialpages" );
+
+		/* show links to different language variants */
+		$s .= $this->variantLinks();
+		$s .= $this->extensionTabLinks();
+		
+		$s .= " | ";
+		if ( $wgUser->isLoggedIn() ) {
+			$s .=  $this->makeKnownLink( $lo, wfMsg( "logout" ), $q );
+		} else {
+			$s .=  $this->makeKnownLink( $li, wfMsg( "login" ), $q );
+		}
+
+		return $s;
+	}
+
+	/**
+	 * Compute the sidebar
+	 * @access private
+	 */
+	function quickBar()
+	{
+		global $wgOut, $wgTitle, $wgUser, $wgLang, $wgContLang, $wgEnableUploads;
+
+		$tns=$wgTitle->getNamespace();
+
+		$s = "\n<div id='quickbar'>";
+
+		$sep = "<br />";
+		$s .= $this->menuHead( "qbfind" );
+		$s .= $this->searchForm();
+
+		$s .= $this->menuHead( "qbbrowse" );
+
+		# Use the first heading from the Monobook sidebar as the "browse" section
+		$bar = $this->buildSidebar();
+		$browseLinks = reset( $bar );
+
+		foreach ( $browseLinks as $link ) {
+			if ( $link['text'] != '-' ) {
+				$s .= "<a href=\"{$link['href']}\">" .
+					htmlspecialchars( $link['text'] ) . '</a>' . $sep;
+			}
+		}
+
+		if ( $wgOut->isArticle() ) {
+			$s .= $this->menuHead( "qbedit" );
+			$s .= "<strong>" . $this->editThisPage() . "</strong>";
+
+			$s .= $sep . $this->makeKnownLink( wfMsgForContent( "edithelppage" ), wfMsg( "edithelp" ) );
+
+			if( $wgUser->isLoggedIn() ) {
+				$s .= $sep . $this->moveThisPage();
+			}
+			if ( $wgUser->isAllowed('delete') ) {
+				$dtp = $this->deleteThisPage();
+				if ( "" != $dtp ) {
+					$s .= $sep . $dtp;
+				}
+			}
+			if ( $wgUser->isAllowed('protect') ) {
+				$ptp = $this->protectThisPage();
+				if ( "" != $ptp ) {
+					$s .= $sep . $ptp;
+				}
+			}
+			$s .= $sep;
+
+			$s .= $this->menuHead( "qbpageoptions" );
+			$s .= $this->talkLink()
+			  . $sep . $this->commentLink()
+			  . $sep . $this->printableLink();
+			if ( $wgUser->isLoggedIn() ) {
+				$s .= $sep . $this->watchThisPage();
+			}
+
+			$s .= $sep;
+
+			$s .= $this->menuHead("qbpageinfo")
+			  . $this->historyLink()
+			  . $sep . $this->whatLinksHere()
+			  . $sep . $this->watchPageLinksLink();
+
+			if( $tns == NS_USER || $tns == NS_USER_TALK ) {
+				$id=User::idFromName($wgTitle->getText());
+				if ($id != 0) {
+					$s .= $sep . $this->userContribsLink();
+					if( $this->showEmailUser( $id ) ) {
+						$s .= $sep . $this->emailUserLink();
+					}
+				}
+			}
+			$s .= $sep;
+		}
+
+		$s .= $this->menuHead( "qbmyoptions" );
+		if ( $wgUser->isLoggedIn() ) {
+			$name = $wgUser->getName();
+			$tl = $this->makeKnownLinkObj( $wgUser->getTalkPage(),
+				wfMsg( 'mytalk' ) );
+			if ( $wgUser->getNewtalk() ) {
+				$tl .= " *";
+			}
+
+			$s .= $this->makeKnownLinkObj( $wgUser->getUserPage(),
+				wfMsg( "mypage" ) )
+			  . $sep . $tl
+			  . $sep . $this->specialLink( "watchlist" )
+			  . $sep . $this->makeKnownLinkObj( SpecialPage::getSafeTitleFor( "Contributions", $wgUser->getName() ),
+			  	wfMsg( "mycontris" ) )
+		  	  . $sep . $this->specialLink( "preferences" )
+		  	  . $sep . $this->specialLink( "userlogout" );
+		} else {
+			$s .= $this->specialLink( "userlogin" );
+		}
+
+		$s .= $this->menuHead( "qbspecialpages" )
+		  . $this->specialLink( "newpages" )
+		  . $sep . $this->specialLink( "imagelist" )
+		  . $sep . $this->specialLink( "statistics" )
+		  . $sep . $this->bugReportsLink();
+		if ( $wgUser->isLoggedIn() && $wgEnableUploads ) {
+			$s .= $sep . $this->specialLink( "upload" );
+		}
+		global $wgSiteSupportPage;
+		if( $wgSiteSupportPage) {
+			$s .= $sep."<a href=\"".htmlspecialchars($wgSiteSupportPage)."\" class =\"internal\">"
+			      .wfMsg( "sitesupport" )."</a>";
+		}
+
+		$s .= $sep . $this->makeKnownLinkObj(
+			SpecialPage::getTitleFor( 'Specialpages' ),
+			wfMsg( 'moredotdotdot' ) );
+
+		$s .= $sep . "\n</div>\n";
+		return $s;
+	}
+
+	function menuHead( $key )
+	{
+		$s = "\n<h6>" . wfMsg( $key ) . "</h6>";
+		return $s;
+	}
+
+	function searchForm( $label = "" )
+	{
+		global $wgRequest;
+
+		$search = $wgRequest->getText( 'search' );
+		$action = $this->escapeSearchLink();
+		$s = "<form id=\"searchform{$this->searchboxes}\" method=\"get\" class=\"inline\" action=\"$action\">";
+		if ( "" != $label ) { $s .= "{$label}: "; }
+
+		$s .= "<input type='text' id=\"searchInput{$this->searchboxes}\" class=\"mw-searchInput\" name=\"search\" size=\"14\" value=\""
+		  . htmlspecialchars(substr($search,0,256)) . "\" /><br />"
+		  . "<input type='submit' id=\"searchGoButton{$this->searchboxes}\" class=\"searchButton\" name=\"go\" value=\"" . htmlspecialchars( wfMsg( "searcharticle" ) ) . "\" />"
+		  . "<input type='submit' id=\"mw-searchButton{$this->searchboxes}\" class=\"searchButton\" name=\"fulltext\" value=\"" . htmlspecialchars( wfMsg( "search" ) ) . "\" /></form>";
+
+		// Ensure unique id's for search boxes made after the first
+		$this->searchboxes = $this->searchboxes == '' ? 2 : $this->searchboxes + 1;
+
+		return $s;
+	}
+}
+
+?>
Index: /MediaWiki/branches/1.11/skins/MonoBook.deps.php
===================================================================
--- /MediaWiki/branches/1.11/skins/MonoBook.deps.php	(revision 1280)
+++ /MediaWiki/branches/1.11/skins/MonoBook.deps.php	(revision 1280)
@@ -0,0 +1,12 @@
+<?php
+// This file exists to ensure that base classes are preloaded before
+// MonoBook.php is compiled, working around a bug in the APC opcode
+// cache on PHP 5, where cached code can break if the include order
+// changed on a subsequent page view.
+// see http://mail.wikipedia.org/pipermail/wikitech-l/2006-January/033660.html
+
+if ( ! defined( 'MEDIAWIKI' ) )
+	die( 1 );
+
+require_once('includes/SkinTemplate.php');
+?>
Index: /MediaWiki/branches/1.11/skins/MonoBook.php
===================================================================
--- /MediaWiki/branches/1.11/skins/MonoBook.php	(revision 1280)
+++ /MediaWiki/branches/1.11/skins/MonoBook.php	(revision 1280)
@@ -0,0 +1,287 @@
+<?php
+/**
+ * MonoBook nouveau
+ *
+ * Translated from gwicke's previous TAL template version to remove
+ * dependency on PHPTAL.
+ *
+ * @todo document
+ * @addtogroup Skins
+ */
+
+if( !defined( 'MEDIAWIKI' ) )
+	die( -1 );
+
+/** */
+require_once('includes/SkinTemplate.php');
+
+/**
+ * Inherit main code from SkinTemplate, set the CSS and template filter.
+ * @todo document
+ * @addtogroup Skins
+ */
+class SkinMonoBook extends SkinTemplate {
+	/** Using monobook. */
+	function initPage( &$out ) {
+		SkinTemplate::initPage( $out );
+		$this->skinname  = 'monobook';
+		$this->stylename = 'monobook';
+		$this->template  = 'MonoBookTemplate';
+	}
+}
+
+/**
+ * @todo document
+ * @addtogroup Skins
+ */
+class MonoBookTemplate extends QuickTemplate {
+	/**
+	 * Template filter callback for MonoBook skin.
+	 * Takes an associative array of data set from a SkinTemplate-based
+	 * class, and a wrapper for MediaWiki's localization database, and
+	 * outputs a formatted page.
+	 *
+	 * @access private
+	 */
+	function execute() {
+		global $wgUser;
+		$skin = $wgUser->getSkin();
+
+		// Suppress warnings to prevent notices about missing indexes in $this->data
+		wfSuppressWarnings();
+
+?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="<?php $this->text('xhtmldefaultnamespace') ?>" <?php 
+	foreach($this->data['xhtmlnamespaces'] as $tag => $ns) {
+		?>xmlns:<?php echo "{$tag}=\"{$ns}\" ";
+	} ?>xml:lang="<?php $this->text('lang') ?>" lang="<?php $this->text('lang') ?>" dir="<?php $this->text('dir') ?>">
+	<head>
+		<meta http-equiv="Content-Type" content="<?php $this->text('mimetype') ?>; charset=<?php $this->text('charset') ?>" />
+		<?php $this->html('headlinks') ?>
+		<title><?php $this->text('pagetitle') ?></title>
+		<style type="text/css" media="screen,projection">/*<![CDATA[*/ @import "<?php $this->text('stylepath') ?>/<?php $this->text('stylename') ?>/main.css?<?php echo $GLOBALS['wgStyleVersion'] ?>"; /*]]>*/</style>
+		<link rel="stylesheet" type="text/css" <?php if(empty($this->data['printable']) ) { ?>media="print"<?php } ?> href="<?php $this->text('stylepath') ?>/common/commonPrint.css?<?php echo $GLOBALS['wgStyleVersion'] ?>" />
+		<link rel="stylesheet" type="text/css" media="handheld" href="<?php $this->text('stylepath') ?>/<?php $this->text('stylename') ?>/handheld.css?<?php echo $GLOBALS['wgStyleVersion'] ?>" />
+		<!--[if lt IE 5.5000]><style type="text/css">@import "<?php $this->text('stylepath') ?>/<?php $this->text('stylename') ?>/IE50Fixes.css?<?php echo $GLOBALS['wgStyleVersion'] ?>";</style><![endif]-->
+		<!--[if IE 5.5000]><style type="text/css">@import "<?php $this->text('stylepath') ?>/<?php $this->text('stylename') ?>/IE55Fixes.css?<?php echo $GLOBALS['wgStyleVersion'] ?>";</style><![endif]-->
+		<!--[if IE 6]><style type="text/css">@import "<?php $this->text('stylepath') ?>/<?php $this->text('stylename') ?>/IE60Fixes.css?<?php echo $GLOBALS['wgStyleVersion'] ?>";</style><![endif]-->
+		<!--[if IE 7]><style type="text/css">@import "<?php $this->text('stylepath') ?>/<?php $this->text('stylename') ?>/IE70Fixes.css?<?php echo $GLOBALS['wgStyleVersion'] ?>";</style><![endif]-->
+		<!--[if lt IE 7]><script type="<?php $this->text('jsmimetype') ?>" src="<?php $this->text('stylepath') ?>/common/IEFixes.js?<?php echo $GLOBALS['wgStyleVersion'] ?>"></script>
+		<meta http-equiv="imagetoolbar" content="no" /><![endif]-->
+		
+		<?php print Skin::makeGlobalVariablesScript( $this->data ); ?>
+                
+		<script type="<?php $this->text('jsmimetype') ?>" src="<?php $this->text('stylepath' ) ?>/common/wikibits.js?<?php echo $GLOBALS['wgStyleVersion'] ?>"><!-- wikibits js --></script>
+<?php	if($this->data['jsvarurl'  ]) { ?>
+		<script type="<?php $this->text('jsmimetype') ?>" src="<?php $this->text('jsvarurl'  ) ?>"><!-- site js --></script>
+<?php	} ?>
+<?php	if($this->data['pagecss'   ]) { ?>
+		<style type="text/css"><?php $this->html('pagecss'   ) ?></style>
+<?php	}
+		if($this->data['usercss'   ]) { ?>
+		<style type="text/css"><?php $this->html('usercss'   ) ?></style>
+<?php	}
+		if($this->data['userjs'    ]) { ?>
+		<script type="<?php $this->text('jsmimetype') ?>" src="<?php $this->text('userjs' ) ?>"></script>
+<?php	}
+		if($this->data['userjsprev']) { ?>
+		<script type="<?php $this->text('jsmimetype') ?>"><?php $this->html('userjsprev') ?></script>
+<?php	}
+		if($this->data['trackbackhtml']) print $this->data['trackbackhtml']; ?>
+		<!-- Head Scripts -->
+<?php $this->html('headscripts') ?>
+	</head>
+<body <?php if($this->data['body_ondblclick']) { ?>ondblclick="<?php $this->text('body_ondblclick') ?>"<?php } ?>
+<?php if($this->data['body_onload'    ]) { ?>onload="<?php     $this->text('body_onload')     ?>"<?php } ?>
+ class="mediawiki <?php $this->text('nsclass') ?> <?php $this->text('dir') ?> <?php $this->text('pageclass') ?>">
+	<div id="globalWrapper">
+		<div id="column-content">
+	<div id="content">
+		<a name="top" id="top"></a>
+		<?php if($this->data['sitenotice']) { ?><div id="siteNotice"><?php $this->html('sitenotice') ?></div><?php } ?>
+		<h1 class="firstHeading"><?php $this->data['displaytitle']!=""?$this->html('title'):$this->text('title') ?></h1>
+		<div id="bodyContent">
+			<h3 id="siteSub"><?php $this->msg('tagline') ?></h3>
+			<div id="contentSub"><?php $this->html('subtitle') ?></div>
+			<?php if($this->data['undelete']) { ?><div id="contentSub2"><?php     $this->html('undelete') ?></div><?php } ?>
+			<?php if($this->data['newtalk'] ) { ?><div class="usermessage"><?php $this->html('newtalk')  ?></div><?php } ?>
+			<?php if($this->data['showjumplinks']) { ?><div id="jump-to-nav"><?php $this->msg('jumpto') ?> <a href="#column-one"><?php $this->msg('jumptonavigation') ?></a>, <a href="#searchInput"><?php $this->msg('jumptosearch') ?></a></div><?php } ?>
+			<!-- start content -->
+			<?php $this->html('bodytext') ?>
+			<?php if($this->data['catlinks']) { ?><div id="catlinks"><?php       $this->html('catlinks') ?></div><?php } ?>
+			<!-- end content -->
+			<div class="visualClear"></div>
+		</div>
+	</div>
+		</div>
+		<div id="column-one">
+	<div id="p-cactions" class="portlet">
+		<h5><?php $this->msg('views') ?></h5>
+		<div class="pBody">
+			<ul>
+	<?php			foreach($this->data['content_actions'] as $key => $tab) { ?>
+				 <li id="ca-<?php echo Sanitizer::escapeId($key) ?>"<?php
+					 	if($tab['class']) { ?> class="<?php echo htmlspecialchars($tab['class']) ?>"<?php }
+					 ?>><a href="<?php echo htmlspecialchars($tab['href']) ?>"<?php echo $skin->tooltipAndAccesskey('ca-'.$key) ?>><?php
+					 echo htmlspecialchars($tab['text']) ?></a></li>
+	<?php			 } ?>
+			</ul>
+		</div>
+	</div>
+	<div class="portlet" id="p-personal">
+		<h5><?php $this->msg('personaltools') ?></h5>
+		<div class="pBody">
+			<ul>
+<?php 			foreach($this->data['personal_urls'] as $key => $item) { ?>
+				<li id="pt-<?php echo Sanitizer::escapeId($key) ?>"<?php
+					if ($item['active']) { ?> class="active"<?php } ?>><a href="<?php
+				echo htmlspecialchars($item['href']) ?>"<?php echo $skin->tooltipAndAccesskey('pt-'.$key) ?><?php
+				if(!empty($item['class'])) { ?> class="<?php
+				echo htmlspecialchars($item['class']) ?>"<?php } ?>><?php
+				echo htmlspecialchars($item['text']) ?></a></li>
+<?php			} ?>
+			</ul>
+		</div>
+	</div>
+	<div class="portlet" id="p-logo">
+		<a style="background-image: url(<?php $this->text('logopath') ?>);" <?php
+			?>href="<?php echo htmlspecialchars($this->data['nav_urls']['mainpage']['href'])?>"<?php
+			echo $skin->tooltipAndAccesskey('n-mainpage') ?>></a>
+	</div>
+	<script type="<?php $this->text('jsmimetype') ?>"> if (window.isMSIE55) fixalpha(); </script>
+	<?php foreach ($this->data['sidebar'] as $bar => $cont) { ?>
+	<div class='portlet' id='p-<?php echo Sanitizer::escapeId($bar) ?>'<?php echo $skin->tooltip('p-'.$bar) ?>>
+		<h5><?php $out = wfMsg( $bar ); if (wfEmptyMsg($bar, $out)) echo $bar; else echo $out; ?></h5>
+		<div class='pBody'>
+			<ul>
+<?php 			foreach($cont as $key => $val) { ?>
+				<li id="<?php echo Sanitizer::escapeId($val['id']) ?>"<?php
+					if ( $val['active'] ) { ?> class="active" <?php }
+				?>><a href="<?php echo htmlspecialchars($val['href']) ?>"<?php echo $skin->tooltipAndAccesskey($val['id']) ?>><?php echo htmlspecialchars($val['text']) ?></a></li>
+<?php			} ?>
+			</ul>
+		</div>
+	</div>
+	<?php } ?>
+	<div id="p-search" class="portlet">
+		<h5><label for="searchInput"><?php $this->msg('search') ?></label></h5>
+		<div id="searchBody" class="pBody">
+			<form action="<?php $this->text('searchaction') ?>" id="searchform"><div>
+				<input id="searchInput" name="search" type="text"<?php echo $skin->tooltipAndAccesskey('search');
+					if( isset( $this->data['search'] ) ) {
+						?> value="<?php $this->text('search') ?>"<?php } ?> />
+				<input type='submit' name="go" class="searchButton" id="searchGoButton"	value="<?php $this->msg('searcharticle') ?>" />&nbsp;
+				<input type='submit' name="fulltext" class="searchButton" id="mw-searchButton" value="<?php $this->msg('searchbutton') ?>" />
+			</div></form>
+		</div>
+	</div>
+	<div class="portlet" id="p-tb">
+		<h5><?php $this->msg('toolbox') ?></h5>
+		<div class="pBody">
+			<ul>
+<?php
+		if($this->data['notspecialpage']) { ?>
+				<li id="t-whatlinkshere"><a href="<?php
+				echo htmlspecialchars($this->data['nav_urls']['whatlinkshere']['href'])
+				?>"<?php echo $skin->tooltipAndAccesskey('t-whatlinkshere') ?>><?php $this->msg('whatlinkshere') ?></a></li>
+<?php
+			if( $this->data['nav_urls']['recentchangeslinked'] ) { ?>
+				<li id="t-recentchangeslinked"><a href="<?php
+				echo htmlspecialchars($this->data['nav_urls']['recentchangeslinked']['href'])
+				?>"<?php echo $skin->tooltipAndAccesskey('t-recentchangeslinked') ?>><?php $this->msg('recentchangeslinked') ?></a></li>
+<?php 		}
+		}
+		if(isset($this->data['nav_urls']['trackbacklink'])) { ?>
+			<li id="t-trackbacklink"><a href="<?php
+				echo htmlspecialchars($this->data['nav_urls']['trackbacklink']['href'])
+				?>"<?php echo $skin->tooltipAndAccesskey('t-trackbacklink') ?>><?php $this->msg('trackbacklink') ?></a></li>
+<?php 	}
+		if($this->data['feeds']) { ?>
+			<li id="feedlinks"><?php foreach($this->data['feeds'] as $key => $feed) {
+					?><span id="feed-<?php echo Sanitizer::escapeId($key) ?>"><a href="<?php
+					echo htmlspecialchars($feed['href']) ?>"<?php echo $skin->tooltipAndAccesskey('feed-'.$key) ?>><?php echo htmlspecialchars($feed['text'])?></a>&nbsp;</span>
+					<?php } ?></li><?php
+		}
+
+		foreach( array('contributions', 'blockip', 'emailuser', 'upload', 'specialpages') as $special ) {
+
+			if($this->data['nav_urls'][$special]) {
+				?><li id="t-<?php echo $special ?>"><a href="<?php echo htmlspecialchars($this->data['nav_urls'][$special]['href'])
+				?>"<?php echo $skin->tooltipAndAccesskey('t-'.$special) ?>><?php $this->msg($special) ?></a></li>
+<?php		}
+		}
+
+		if(!empty($this->data['nav_urls']['print']['href'])) { ?>
+				<li id="t-print"><a href="<?php echo htmlspecialchars($this->data['nav_urls']['print']['href'])
+				?>"<?php echo $skin->tooltipAndAccesskey('t-print') ?>><?php $this->msg('printableversion') ?></a></li><?php
+		}
+
+		if(!empty($this->data['nav_urls']['permalink']['href'])) { ?>
+				<li id="t-permalink"><a href="<?php echo htmlspecialchars($this->data['nav_urls']['permalink']['href'])
+				?>"<?php echo $skin->tooltipAndAccesskey('t-permalink') ?>><?php $this->msg('permalink') ?></a></li><?php
+		} elseif ($this->data['nav_urls']['permalink']['href'] === '') { ?>
+				<li id="t-ispermalink"<?php echo $skin->tooltip('t-ispermalink') ?>><?php $this->msg('permalink') ?></li><?php
+		}
+
+		wfRunHooks( 'MonoBookTemplateToolboxEnd', array( &$this ) );
+?>
+			</ul>
+		</div>
+	</div>
+<?php
+		if( $this->data['language_urls'] ) { ?>
+	<div id="p-lang" class="portlet">
+		<h5><?php $this->msg('otherlanguages') ?></h5>
+		<div class="pBody">
+			<ul>
+<?php		foreach($this->data['language_urls'] as $langlink) { ?>
+				<li class="<?php echo htmlspecialchars($langlink['class'])?>"><?php
+				?><a href="<?php echo htmlspecialchars($langlink['href']) ?>"><?php echo $langlink['text'] ?></a></li>
+<?php		} ?>
+			</ul>
+		</div>
+	</div>
+<?php	} ?>
+		</div><!-- end of the left (by default at least) column -->
+			<div class="visualClear"></div>
+			<div id="footer">
+<?php
+		if($this->data['poweredbyico']) { ?>
+				<div id="f-poweredbyico"><?php $this->html('poweredbyico') ?></div>
+<?php 	}
+		if($this->data['copyrightico']) { ?>
+				<div id="f-copyrightico"><?php $this->html('copyrightico') ?></div>
+<?php	}
+
+		// Generate additional footer links
+?>
+			<ul id="f-list">
+<?php
+		$footerlinks = array(
+			'lastmod', 'viewcount', 'numberofwatchingusers', 'credits', 'copyright',
+			'privacy', 'about', 'disclaimer', 'tagline',
+		);
+		foreach( $footerlinks as $aLink ) {
+			if( isset( $this->data[$aLink] ) && $this->data[$aLink] ) {
+?>				<li id="<?php echo$aLink?>"><?php $this->html($aLink) ?></li>
+<?php 		}
+		}
+?>
+			</ul>
+		</div>
+		
+	<?php $this->html('bottomscripts'); /* JS call to runBodyOnloadHook */ ?>
+</div>
+<?php $this->html('reporttime') ?>
+<?php if ( $this->data['debug'] ): ?>
+<!-- Debug output:
+<?php $this->text( 'debug' ); ?>
+
+-->
+<?php endif; ?>
+</body></html>
+<?php
+	wfRestoreWarnings();
+	} // end of execute() method
+} // end of class
+?>
Index: /MediaWiki/branches/1.11/skins/MySkin.deps.php
===================================================================
--- /MediaWiki/branches/1.11/skins/MySkin.deps.php	(revision 1280)
+++ /MediaWiki/branches/1.11/skins/MySkin.deps.php	(revision 1280)
@@ -0,0 +1,13 @@
+<?php
+// This file exists to ensure that base classes are preloaded before
+// MySkin.php is compiled, working around a bug in the APC opcode
+// cache on PHP 5, where cached code can break if the include order
+// changed on a subsequent page view.
+// see http://mail.wikipedia.org/pipermail/wikitech-l/2006-January/033660.html
+
+if ( ! defined( 'MEDIAWIKI' ) )
+	die( 1 );
+
+require_once('includes/SkinTemplate.php');
+require_once( dirname(__FILE__) . '/MonoBook.php' );
+?>
Index: /MediaWiki/branches/1.11/skins/MySkin.php
===================================================================
--- /MediaWiki/branches/1.11/skins/MySkin.php	(revision 1280)
+++ /MediaWiki/branches/1.11/skins/MySkin.php	(revision 1280)
@@ -0,0 +1,28 @@
+<?php
+/**
+ * See skin.txt
+ *
+ * @todo document
+ * @addtogroup Skins
+ */
+
+if( !defined( 'MEDIAWIKI' ) )
+	die( -1 );
+
+/** */
+require_once( dirname(__FILE__) . '/MonoBook.php' );
+
+/**
+ * @todo document
+ * @addtogroup Skins
+ */
+class SkinMySkin extends SkinTemplate {
+	function initPage( &$out ) {
+		SkinTemplate::initPage( $out );
+		$this->skinname  = 'myskin';
+		$this->stylename = 'myskin';
+		$this->template  = 'MonoBookTemplate';
+	}
+}
+
+?>
Index: /MediaWiki/branches/1.11/skins/Nostalgia.php
===================================================================
--- /MediaWiki/branches/1.11/skins/Nostalgia.php	(revision 1280)
+++ /MediaWiki/branches/1.11/skins/Nostalgia.php	(revision 1280)
@@ -0,0 +1,97 @@
+<?php
+/**
+ * See skin.txt
+ *
+ * @todo document
+ * @addtogroup Skins
+ */
+
+if( !defined( 'MEDIAWIKI' ) )
+	die( -1 );
+
+/**
+ * @todo document
+ * @addtogroup Skins
+ */
+class SkinNostalgia extends Skin {
+
+	function getStylesheet() {
+		return 'common/nostalgia.css';
+	}
+	function getSkinName() {
+		return "nostalgia";
+	}
+
+	function doBeforeContent() {
+
+		$s = "\n<div id='content'>\n<div id='topbar'>";
+		$s .= $this->logoText( "right" );
+
+		$s .= $this->pageTitle();
+		$s .= $this->pageSubtitle() . "\n";
+
+		$s .= $this->topLinks() . "\n<br />";
+
+		$notice = wfGetSiteNotice();
+		if( $notice ) {
+			$s .= "\n<div id='siteNotice'>$notice</div>\n";
+		}
+		$s .= $this->pageTitleLinks();
+
+		$ol = $this->otherLanguages();
+		if($ol) $s .= "<br />" . $ol;
+
+		$cat = $this->getCategoryLinks();
+		if($cat) $s .= "<br />" . $cat;
+
+		$s .= "<br clear='all' /><hr />\n</div>\n";
+		$s .= "\n<div id='article'>";
+
+		return $s;
+	}
+
+	function topLinks() {
+		global $wgOut, $wgUser;
+		$sep = " |\n";
+
+		$s = $this->mainPageLink() . $sep
+		  . $this->specialLink( "recentchanges" );
+
+		if ( $wgOut->isArticle() ) {
+			$s .=  $sep . $this->editThisPage()
+			  . $sep . $this->historyLink();
+		}
+		
+		/* show links to different language variants */
+		$s .= $this->variantLinks();
+		$s .= $this->extensionTabLinks();
+		
+		if ( $wgUser->isAnon() ) {
+			$s .= $sep . $this->specialLink( "userlogin" );
+		} else {
+			$s .= $sep . $this->specialLink( "userlogout" );
+		}
+		
+		$s .= $sep . $this->specialPagesList();
+
+		return $s;
+	}
+
+	function doAfterContent() {
+		$s = "\n</div><br clear='all' />\n";
+
+		$s .= "\n<div id='footer'><hr />";
+
+		$s .= $this->bottomLinks();
+		$s .= "\n<br />" . $this->pageStats();
+		$s .= "\n<br />" . $this->mainPageLink()
+		  . " | " . $this->aboutLink()
+		  . " | " . $this->searchForm();
+
+		$s .= "\n</div>\n</div>\n";
+
+		return $s;
+	}
+}
+
+?>
Index: /MediaWiki/branches/1.11/skins/Simple.deps.php
===================================================================
--- /MediaWiki/branches/1.11/skins/Simple.deps.php	(revision 1280)
+++ /MediaWiki/branches/1.11/skins/Simple.deps.php	(revision 1280)
@@ -0,0 +1,13 @@
+<?php
+// This file exists to ensure that base classes are preloaded before
+// Simple.php is compiled, working around a bug in the APC opcode
+// cache on PHP 5, where cached code can break if the include order
+// changed on a subsequent page view.
+// see http://mail.wikipedia.org/pipermail/wikitech-l/2006-January/033660.html
+
+if ( ! defined( 'MEDIAWIKI' ) )
+	die( 1 );
+
+require_once('includes/SkinTemplate.php');
+require_once( dirname(__FILE__) . '/MonoBook.php' );
+?>
Index: /MediaWiki/branches/1.11/skins/Simple.php
===================================================================
--- /MediaWiki/branches/1.11/skins/Simple.php	(revision 1280)
+++ /MediaWiki/branches/1.11/skins/Simple.php	(revision 1280)
@@ -0,0 +1,68 @@
+<?php
+/**
+ * See skin.txt
+ *
+ * @todo document
+ * @addtogroup Skins
+ */
+
+if( !defined( 'MEDIAWIKI' ) )
+	die( -1 );
+
+/** */
+require_once( dirname(__FILE__) . '/MonoBook.php' );
+
+/**
+ * @todo document
+ * @addtogroup Skins
+ */
+class SkinSimple extends SkinTemplate {
+	function initPage( &$out ) {
+		SkinTemplate::initPage( $out );
+		$this->skinname  = 'simple';
+		$this->stylename = 'simple';
+		$this->template  = 'MonoBookTemplate';
+	}
+
+	function reallyDoGetUserStyles() {
+		global $wgUser;
+		$s = '';
+		if (($undopt = $wgUser->getOption("underline")) != 2) {
+			$underline = $undopt ? 'underline' : 'none';
+			$s .= "a { text-decoration: $underline; }\n";
+		}
+		if ($wgUser->getOption('highlightbroken')) {
+			$s .= "a.new, #quickbar a.new { text-decoration: line-through; }\n";
+		} else {
+			$s .= <<<END
+a.new, #quickbar a.new,
+a.stub, #quickbar a.stub {
+	color: inherit;
+	text-decoration: inherit;
+}
+a.new:after, #quickbar a.new:after {
+	content: "?";
+	color: #CC2200;
+	text-decoration: $underline;
+}
+a.stub:after, #quickbar a.stub:after {
+	content: "!";
+	color: #772233;
+	text-decoration: $underline;
+}
+END;
+		}
+		if ($wgUser->getOption('justify')) {
+			$s .= "#article, #bodyContent { text-align: justify; }\n";
+		}
+		if (!$wgUser->getOption('showtoc')) {
+			$s .= "#toc { display: none; }\n";
+		}
+		if (!$wgUser->getOption('editsection')) {
+			$s .= ".editsection { display: none; }\n";
+		}
+		return $s;
+	}
+}
+
+?>
Index: /MediaWiki/branches/1.11/skins/Skin.sample
===================================================================
--- /MediaWiki/branches/1.11/skins/Skin.sample	(revision 1280)
+++ /MediaWiki/branches/1.11/skins/Skin.sample	(revision 1280)
@@ -0,0 +1,19 @@
+<?php
+# Your class extension is defined there.
+#
+# Do NOT use PHPTal with this sample, if you want PHPTal support have a look at
+# the other sample : SkinPHPTal.sample.
+#
+# The class name MUST begin with 'Skin' and the rest is the name of the file
+# excluding '.php'
+# This file is named Skin.sample (but it should end with php). So the
+# class name will be 'Skin' . 'Skin'
+
+class SkinSkin extends Skin {
+# Override method below
+#
+
+}
+
+}
+?>
Index: /MediaWiki/branches/1.11/skins/SkinPHPTal.sample
===================================================================
--- /MediaWiki/branches/1.11/skins/SkinPHPTal.sample	(revision 1280)
+++ /MediaWiki/branches/1.11/skins/SkinPHPTal.sample	(revision 1280)
@@ -0,0 +1,28 @@
+<?php
+require_once('includes/SkinPHPTal.php');
+
+# Test if PHPTal is enabled. If not MediaWiki will load the 'standard' skin
+# which doesnt use PHPTal
+if( class_exists( 'SkinPHPTal' ) ) {
+	
+	# Your class extension is defined there.
+	#
+	# The class name MUST begin with 'Skin' and the rest is the name of the file
+	# excluding '.php'
+	# This file is named SkinPHPTal.sample (but it should end with php). So the
+	# class name will be 'Skin' . 'SkinPHPTal'
+	
+	class SkinSkinPHPTal extends SkinPHPTal {
+		function initPage( &$out ) {
+			SkinPHPTal::initPage( $out );
+			$this->skinname = 'name of your skin all lower case';
+			$this->template = 'phptal template used do not put the .pt';
+		}
+	
+	# Override method below
+	#
+	
+	}
+
+}
+?>
Index: /MediaWiki/branches/1.11/skins/Standard.php
===================================================================
--- /MediaWiki/branches/1.11/skins/Standard.php	(revision 1280)
+++ /MediaWiki/branches/1.11/skins/Standard.php	(revision 1280)
@@ -0,0 +1,302 @@
+<?php
+/**
+ * See skin.txt
+ *
+ * @todo document
+ * @addtogroup Skins
+ */
+
+if( !defined( 'MEDIAWIKI' ) )
+	die( -1 );
+
+/**
+ * @todo document
+ * @addtogroup Skins
+ */
+class SkinStandard extends Skin {
+
+	/**
+	 *
+	 */
+	function getHeadScripts() {
+		global $wgStylePath, $wgJsMimeType, $wgStyleVersion;
+
+		$s = parent::getHeadScripts();
+		if ( 3 == $this->qbSetting() ) { # Floating left
+			$s .= "<script language='javascript' type='$wgJsMimeType' " .
+			  "src='{$wgStylePath}/common/sticky.js?$wgStyleVersion'></script>\n";
+		}
+		return $s;
+	}
+
+	/**
+	 *
+	 */
+	function getUserStyles() {
+		global $wgStylePath, $wgStyleVersion;
+		$s = '';
+		if ( 3 == $this->qbSetting() ) { # Floating left
+			$s .= "<style type='text/css'>\n" .
+			  "@import '{$wgStylePath}/common/quickbar.css?$wgStyleVersion';\n</style>\n";
+		} else if ( 4 == $this->qbSetting() ) { # Floating right
+			$s .= "<style type='text/css'>\n" .
+			  "@import '{$wgStylePath}/common/quickbar-right.css?$wgStyleVersion';\n</style>\n";
+		}
+		$s .= parent::getUserStyles();
+		return $s;
+	}
+
+	/**
+	 *
+	 */
+	function doGetUserStyles() {
+		global $wgStylePath;
+
+		$s = parent::doGetUserStyles();
+		$qb = $this->qbSetting();
+
+		if ( 2 == $qb ) { # Right
+			$s .= "#quickbar { position: absolute; top: 4px; right: 4px; " .
+			  "border-left: 2px solid #000000; }\n" .
+			  "#article { margin-left: 4px; margin-right: 152px; }\n";
+		} else if ( 1 == $qb || 3 == $qb ) {
+			$s .= "#quickbar { position: absolute; top: 4px; left: 4px; " .
+			  "border-right: 1px solid gray; }\n" .
+			  "#article { margin-left: 152px; margin-right: 4px; }\n";
+		} else if ( 4 == $qb) {
+			$s .= "#quickbar { border-right: 1px solid gray; }\n" .
+			  "#article { margin-right: 152px; margin-left: 4px; }\n";
+		}
+		return $s;
+	}
+
+	/**
+	 *
+	 */
+	function getBodyOptions() {
+		$a = parent::getBodyOptions();
+
+		if ( 3 == $this->qbSetting() ) { # Floating left
+			$qb = "setup(\"quickbar\")";
+			if($a["onload"]) {
+				$a["onload"] .= ";$qb";
+			} else {
+				$a["onload"] = $qb;
+			}
+		}
+		return $a;
+	}
+
+	function doAfterContent() {
+		global $wgContLang;
+		$fname =  'SkinStandard::doAfterContent';
+		wfProfileIn( $fname );
+		wfProfileIn( $fname.'-1' );
+
+		$s = "\n</div><br style=\"clear:both\" />\n";
+		$s .= "\n<div id='footer'>";
+		$s .= '<table border="0" cellspacing="0"><tr>';
+
+		wfProfileOut( $fname.'-1' );
+		wfProfileIn( $fname.'-2' );
+
+		$qb = $this->qbSetting();
+		$shove = ($qb != 0);
+		$left = ($qb == 1 || $qb == 3);
+		if($wgContLang->isRTL()) $left = !$left;
+
+		if ( $shove && $left ) { # Left
+				$s .= $this->getQuickbarCompensator();
+		}
+		wfProfileOut( $fname.'-2' );
+		wfProfileIn( $fname.'-3' );
+		$l = $wgContLang->isRTL() ? 'right' : 'left';
+		$s .= "<td class='bottom' align='$l' valign='top'>";
+
+		$s .= $this->bottomLinks();
+		$s .= "\n<br />" . $this->mainPageLink()
+		  . ' | ' . $this->aboutLink()
+		  . ' | ' . $this->specialLink( 'recentchanges' )
+		  . ' | ' . $this->searchForm()
+		  . '<br /><span id="pagestats">' . $this->pageStats() . '</span>';
+
+		$s .= "</td>";
+		if ( $shove && !$left ) { # Right
+			$s .= $this->getQuickbarCompensator();
+		}
+		$s .= "</tr></table>\n</div>\n</div>\n";
+
+		wfProfileOut( $fname.'-3' );
+		wfProfileIn( $fname.'-4' );
+		if ( 0 != $qb ) { $s .= $this->quickBar(); }
+		wfProfileOut( $fname.'-4' );
+		wfProfileOut( $fname );
+		return $s;
+	}
+
+	function quickBar() {
+		global $wgOut, $wgTitle, $wgUser, $wgRequest, $wgContLang;
+		global $wgEnableUploads, $wgRemoteUploads;
+
+		$fname =  'Skin::quickBar';
+		wfProfileIn( $fname );
+
+		$action = $wgRequest->getText( 'action' );
+		$wpPreview = $wgRequest->getBool( 'wpPreview' );
+		$tns=$wgTitle->getNamespace();
+
+		$s = "\n<div id='quickbar'>";
+		$s .= "\n" . $this->logoText() . "\n<hr class='sep' />";
+
+		$sep = "\n<br />";
+
+		# Use the first heading from the Monobook sidebar as the "browse" section
+		$bar = $this->buildSidebar();
+		$browseLinks = reset( $bar );
+
+		foreach ( $browseLinks as $link ) {
+			if ( $link['text'] != '-' ) {
+				$s .= "<a href=\"{$link['href']}\">" .
+					htmlspecialchars( $link['text'] ) . '</a>' . $sep;
+			}
+		}
+
+		if( $wgUser->isLoggedIn() ) {
+			$s.= $this->specialLink( 'watchlist' ) ;
+			$s .= $sep . $this->makeKnownLink( $wgContLang->specialPage( 'Contributions' ),
+				wfMsg( 'mycontris' ), 'target=' . wfUrlencode($wgUser->getName() ) );
+		}
+		// only show watchlist link if logged in
+		$s .= "\n<hr class='sep' />";
+		$articleExists = $wgTitle->getArticleId();
+		if ( $wgOut->isArticle() || $action =='edit' || $action =='history' || $wpPreview) {
+			if($wgOut->isArticle()) {
+				$s .= '<strong>' . $this->editThisPage() . '</strong>';
+			} else { # backlink to the article in edit or history mode
+				if($articleExists){ # no backlink if no article
+					switch($tns) {
+						case NS_TALK:
+						case NS_USER_TALK:
+						case NS_PROJECT_TALK:
+						case NS_IMAGE_TALK:
+						case NS_MEDIAWIKI_TALK:
+						case NS_TEMPLATE_TALK:
+						case NS_HELP_TALK:
+						case NS_CATEGORY_TALK:
+							$text = wfMsg('viewtalkpage');
+							break;
+						case NS_MAIN:
+							$text = wfMsg( 'articlepage' );
+							break;
+						case NS_USER:
+							$text = wfMsg( 'userpage' );
+							break;
+						case NS_PROJECT:
+							$text = wfMsg( 'projectpage' );
+							break;
+						case NS_IMAGE:
+							$text = wfMsg( 'imagepage' );
+							break;
+						case NS_MEDIAWIKI:
+							$text = wfMsg( 'mediawikipage' );
+							break;
+						case NS_TEMPLATE:
+							$text = wfMsg( 'templatepage' );
+							break;
+						case NS_HELP:
+							$text = wfMsg( 'viewhelppage' );
+							break;
+						case NS_CATEGORY:
+							$text = wfMsg( 'categorypage' );
+							break;
+						default:
+							$text= wfMsg( 'articlepage' );
+					}
+
+					$link = $wgTitle->getText();
+					if ($nstext = $wgContLang->getNsText($tns) ) { # add namespace if necessary
+						$link = $nstext . ':' . $link ;
+					}
+
+					$s .= $this->makeLink( $link, $text );
+				} elseif( $wgTitle->getNamespace() != NS_SPECIAL ) {
+					# we just throw in a "New page" text to tell the user that he's in edit mode,
+					# and to avoid messing with the separator that is prepended to the next item
+					$s .= '<strong>' . wfMsg('newpage') . '</strong>';
+				}
+
+			}
+
+			# "Post a comment" link
+			if( ( $wgTitle->isTalkPage() || $wgOut->showNewSectionLink() ) && $action != 'edit' && !$wpPreview )
+				$s .= '<br />' . $this->makeKnownLinkObj( $wgTitle, wfMsg( 'postcomment' ), 'action=edit&section=new' );
+			
+			#if( $tns%2 && $action!='edit' && !$wpPreview) {
+				#$s.= '<br />'.$this->makeKnownLink($wgTitle->getPrefixedText(),wfMsg('postcomment'),'action=edit&section=new');
+			#}
+
+			/*
+			watching could cause problems in edit mode:
+			if user edits article, then loads "watch this article" in background and then saves
+			article with "Watch this article" checkbox disabled, the article is transparently
+			unwatched. Therefore we do not show the "Watch this page" link in edit mode
+			*/
+			if ( $wgUser->isLoggedIn() && $articleExists) {
+				if($action!='edit' && $action != 'submit' )
+				{
+					$s .= $sep . $this->watchThisPage();
+				}
+				if ( $wgTitle->userCan( 'edit' ) )
+					$s .= $sep . $this->moveThisPage();
+			}
+			if ( $wgUser->isAllowed('delete') and $articleExists ) {
+				$s .= $sep . $this->deleteThisPage() .
+				$sep . $this->protectThisPage();
+			}
+			$s .= $sep . $this->talkLink();
+			if ($articleExists && $action !='history') {
+				$s .= $sep . $this->historyLink();
+			}
+			$s.=$sep . $this->whatLinksHere();
+
+			if($wgOut->isArticleRelated()) {
+				$s .= $sep . $this->watchPageLinksLink();
+			}
+
+			if ( NS_USER == $wgTitle->getNamespace()
+				|| $wgTitle->getNamespace() == NS_USER_TALK ) {
+
+				$id=User::idFromName($wgTitle->getText());
+				$ip=User::isIP($wgTitle->getText());
+
+				if($id||$ip) {
+					$s .= $sep . $this->userContribsLink();
+				}
+				if( $this->showEmailUser( $id ) ) {
+					$s .= $sep . $this->emailUserLink();
+				}
+			}
+			$s .= "\n<br /><hr class='sep' />";
+		}
+
+		if ( $wgUser->isLoggedIn() && ( $wgEnableUploads || $wgRemoteUploads ) ) {
+			$s .= $this->specialLink( 'upload' ) . $sep;
+		}
+		$s .= $this->specialLink( 'specialpages' )
+		  . $sep . $this->bugReportsLink();
+
+		global $wgSiteSupportPage;
+		if( $wgSiteSupportPage ) {
+			$s .= "\n<br /><a href=\"" . htmlspecialchars( $wgSiteSupportPage ) .
+			  '" class="internal">' . wfMsg( 'sitesupport' ) . '</a>';
+		}
+
+		$s .= "\n<br /></div>\n";
+		wfProfileOut( $fname );
+		return $s;
+	}
+
+
+}
+
+?>
Index: /MediaWiki/branches/1.11/skins/chick/IE50Fixes.css
===================================================================
--- /MediaWiki/branches/1.11/skins/chick/IE50Fixes.css	(revision 1280)
+++ /MediaWiki/branches/1.11/skins/chick/IE50Fixes.css	(revision 1280)
@@ -0,0 +1,67 @@
+/*
+** IE5.0 Fix Stylesheet
+*/
+
+#column-content {
+    margin: 0 !important;
+    float: none;
+}
+#column-content #content { 
+    margin-top: 3em; 
+    height: 1%;
+}
+#column-one {
+    position: absolute;
+    overflow: visible;
+    top: 0;
+    left: 0;
+    z-index: 3;
+}
+#footer {
+    margin: 0 0 0 13.6em;
+}
+
+/* IE 5 & 5.5 interpret keyword sizes one off */
+body { font-size: xx-small; }
+/*
+** the edit tabs
+*/
+#p-cactions li {
+    float: left;
+    padding-top: 0;
+    padding-bottom: 0 !important;
+    height: 0.9em;
+}
+#p-cactions li a {
+    display: block;
+    padding-bottom: 0.045em;
+}
+#p-cactions li.selected a {
+    padding-bottom: 0.17em;
+}
+#p-cactions li a:hover {
+    padding-bottom: 0.17em;
+}
+/* 5.0 doesn't like the background icon for external links and user */
+.link-external,
+.external {
+    background: none;
+    padding: 0;
+}
+#p-personal ul { float: right }
+#p-personal li { float: left }
+li#pt-userpage,
+li#pt-anonuserpage,
+li#pt-login,
+li#pt-logout {
+    background: none;
+    padding-left: none;
+}
+.visualClear {
+    width:100%;
+    height: 0px;
+    padding:0;
+    margin:0;
+}
+.firstHeading { margin-bottom: 0.3em; }
+/*div{ border:1px solid Red !important;}*/
Index: /MediaWiki/branches/1.11/skins/chick/IE55Fixes.css
===================================================================
--- /MediaWiki/branches/1.11/skins/chick/IE55Fixes.css	(revision 1280)
+++ /MediaWiki/branches/1.11/skins/chick/IE55Fixes.css	(revision 1280)
@@ -0,0 +1,81 @@
+/* IE5.5/win- only fixes */
+
+#column-content { 
+    float: none; 
+    margin-left: 0;
+    height: 1%;
+}
+#column-content #content {
+    position: relative;
+    z-index: 5;
+    margin-left: 12.2em;
+    margin-top: 3em;
+    height: 1%;
+}
+#column-one {
+    position: absolute;
+    top: 0;
+    left: 0;
+    z-index: 4;
+    width: 100%;
+}
+#footer {
+    margin-left: 13.6em;
+    border-left: 1px solid #fabd23;
+}
+
+/*#bodyContent div,
+#bodyContent pre { overflow: auto; }*/
+
+#p-personal { padding-bottom: 0.1em; }
+
+body { font-size: xx-small; }
+
+#p-cactions {
+    width: 76% !important;
+    z-index: 3 !important;
+    float: none;
+}
+#p-cactions li {
+    padding-bottom: 0 !important;
+    border: none;
+    background-color: transparent;
+    cursor: default;
+    float: none !important;
+}
+#p-cactions li a {
+    display: inline-block !important;
+    vertical-align: top;
+    padding-bottom: 0;
+    border: solid #aaa;
+    border-width: 1px 1px 0;
+}
+#p-cactions li.selected a {
+    border-color: #fabd23;
+    padding-bottom: 0.17em;
+}
+#p-cactions li a:hover {
+    padding-bottom: 0.17em;
+}
+.portlet {
+    overflow:hidden;
+}
+#bodyContent a.external {
+    background: url(external.png) center right no-repeat;
+    padding-right: 13px;
+}
+/* show the hand */
+#p-logo a,
+#p-logo a:hover {
+    cursor: pointer;
+}
+.visualClear {
+    width:90%;
+    height: 1px;
+    padding:0;
+    margin:0;
+}
+
+#editform {
+    width: 100%;
+}
Index: /MediaWiki/branches/1.11/skins/chick/IE60Fixes.css
===================================================================
--- /MediaWiki/branches/1.11/skins/chick/IE60Fixes.css	(revision 1280)
+++ /MediaWiki/branches/1.11/skins/chick/IE60Fixes.css	(revision 1280)
@@ -0,0 +1,79 @@
+/* 6.0 - only fixes */
+/* content area */ 
+/* workaround for various ie float bugs */
+#column-content { 
+    float: none; 
+    margin-left: 0;
+    height: 1%;
+}
+#column-content #content {
+    margin-left: 12.2em;
+    margin-top: 3em;
+    height: 1%;
+}
+#column-one {
+    position: absolute;
+    top: 0;
+    left: 0;
+    z-index: 4;
+}
+#footer {
+    margin-left: 13.6em;
+    border-left: 1px solid #fabd23;
+}
+
+/* the tabs */
+
+#p-cactions {
+    z-index: 3;
+}
+
+#p-cactions li {
+    padding-bottom: 0 !important;
+    border: none;
+    background-color: transparent;
+    cursor: default;
+    float: none !important;
+}
+#p-cactions li a {
+    display: inline-block !important;
+    vertical-align: top;
+    padding-bottom: 0;
+    border: solid #aaa;
+    border-width: 1px 1px 0;
+}
+#p-cactions li.selected a {
+    border-color: #fabd23;
+    padding-bottom: 0.17em;
+}
+#p-cactions li a:hover {
+    padding-bottom: 0.17em;
+}
+#portal-personaltools {
+    padding-bottom: 0.1em;
+}
+#bodyContent a.external {
+    background: url(external.png) center right no-repeat;
+    padding-right: 13px;
+}
+
+/* show the hand */
+#p-logo a,
+#p-logo a:hover {
+    cursor: pointer;
+}
+div.visualClear {
+    width:100%;
+    line-height: 0;
+}
+textarea {
+    width: 96%;
+}
+
+div.editsection,
+#catlinks,
+div.tright,
+div.tleft {
+    position: relative;
+}
+/*{ border:1px solid Red !important;}*/
Index: /MediaWiki/branches/1.11/skins/chick/main.css
===================================================================
--- /MediaWiki/branches/1.11/skins/chick/main.css	(revision 1280)
+++ /MediaWiki/branches/1.11/skins/chick/main.css	(revision 1280)
@@ -0,0 +1,495 @@
+/*
+** MediaWiki 'chick' style sheet for PDAs or other small-screen devices.
+** Copyright Timwi
+** License: GPL (http://www.gnu.org/copyleft/gpl.html)
+**
+** Loosely based on Monobook by Gabriel Wicke
+*/
+
+body {
+    font-family: sans-serif;
+    color: Black;
+    margin: 0;
+    padding: 0.3em;
+}
+
+a { color: #002bb8; }
+a:visited { color: #5a3696; }
+a:active { color: #ffa500; }
+a.stub { color: #772233; }
+a.new,
+#p-personal a.new { color:#ba0000; }
+a.new:visited,
+#p-personal a.new:visited { color:#a55858; }
+
+img {
+    border: none;
+    vertical-align: middle;
+}
+p {
+    margin: 0.4em 0em 0.5em 0em;
+    line-height: 1.5em;
+}
+
+p img { margin: 0; }
+
+hr {
+    height: 1px;
+    color: #aaaaaa;
+    background-color: #aaaaaa;
+    border: 0;
+    margin: 0.2em 0 0.2em 0;
+}
+
+h1, h2, h3, h4, h5, h6 {
+    color: Black;
+    background: none;
+    font-weight: normal;
+    margin: 0;
+    padding-top: 0.5em;
+    padding-bottom: 0.17em;
+    border-bottom: 1px solid #aaaaaa;
+}
+.editsection {
+	font-weight: normal;
+	float: right;
+	margin-left: 5px;
+}
+h1 { font-size: 188%; }
+h1 .editsection { font-size: 53.2%; }
+h2 { font-size: 150%; }
+h2 .editsection { font-size: 66.7%; }
+h3, h4, h5, h6 {
+    border-bottom: none;
+    font-weight: bold;
+}
+h3 { font-size: 132%; }
+h3 .editsection { font-size: 75.8%; }
+h4 { font-size: 116%; }
+h4 .editsection { font-size: 86.2%; }
+h5 { font-size: 100%; }
+h6 { font-size: 80%;  }
+h6 .editsection { font-size: 125%; }
+
+ul {
+    line-height: 1.5em;
+    margin: 0.3em 0 0 1.5em;
+    padding:0;
+}
+ol {
+    line-height: 1.5em;
+    margin: 0.3em 0 0 3.2em;
+    padding:0;
+    list-style-image: none;
+}
+li { margin-bottom: 0.1em; }
+dt {
+    font-weight: bold;
+    margin-bottom: 0.1em;
+}
+dl{
+    margin-top: 0.2em;
+    margin-bottom: 0.5em;
+}
+dd {
+    line-height: 1.5em;
+    margin-left: 2em;
+    margin-bottom: 0.1em;
+}
+
+fieldset {
+    border: 1px solid #2f6fab;
+    margin: 1em 0em 1em 0em;
+    padding: 0em 1em 1em 1em;
+    line-height: 1.5em;
+}
+legend {
+    background: White;
+    padding: 0.5em;
+    font-size: 95%;
+}
+form {
+    border: none;
+    margin: 0;
+}
+
+textarea {
+    border: 1px solid #2f6fab;
+    color: Black;
+    background-color: white;
+    width: 100%;
+    padding: 0.1em;
+    overflow: auto;
+}
+/* hide this from ie/mac and konq2.2 */
+@media All {
+    head:first-child+body input {
+        visibility: visible;
+        border: 1px solid #2f6fab;
+        color: Black;
+        background-color: white;
+        vertical-align: middle;
+        padding: 0.2em;
+    }
+}
+input.historysubmit {
+    padding: 0 0.3em 0.3em 0.3em !important;
+    font-size: 94%;
+    cursor: pointer;
+    height: 1.7em !important;
+    margin-left: 1.6em;
+}
+input[type="radio"],
+input[type="checkbox"] { border:none; }
+select {
+    border: 1px solid #2f6fab;
+    color: Black;
+    vertical-align: top;
+}
+abbr, acronym, .explain {
+    border-bottom: 1px dotted Black;
+    color: Black;
+    background: none;
+    cursor: help;
+}
+q {
+    font-family: Times, "Times New Roman", serif;
+    font-style: italic;
+}
+code { background-color: #f9f9f9; }
+pre {
+    padding: 1em;
+    border: 1px dashed #2f6fab;
+    color: Black;
+    background-color: #f9f9f9;
+    line-height: 1.1em;
+}
+
+/*
+** the main content area
+*/
+
+span.subpages { display: block; }
+
+/* Some space under the headers in the content area */
+#bodyContent h1, #bodyContent h2 { margin-bottom:0.6em; }
+#bodyContent h3,
+#bodyContent h4,
+#bodyContent h5 {
+    margin-bottom: 0.3em;
+}
+.firstHeading { margin-bottom:0.1em; }
+
+/* user notification thing */
+.usermessage {
+    background-color: #ffce7b;
+    border: 1px solid #ffa500;
+    color: Black;
+    font-weight: bold;
+    margin: 0.1em 0 0 0;
+    padding: 2px 5px;
+    vertical-align: middle;
+}
+#siteNotice {
+    text-align: center;
+    font-size: 95%;
+    padding: 0 0.9em 0 0.9em;
+}
+#siteNotice p { margin: 0; padding: 0; }
+.error {
+    color: red;
+    font-size: larger;
+}
+#catlinks {
+    border:1px solid #aaaaaa;
+    background-color:#f9f9f9;
+    padding: 2px 5px;
+    margin: 0.1em 0 0 0;
+    clear: both;
+}
+p.catlinks { margin: 0; padding: 0; }
+
+
+/* currently unused, intended to be used by a metadata box
+in the bottom-right corner of the content area */
+.documentDescription {
+    /* The summary text describing the document */
+    font-weight: bold;
+    display: block;
+    margin: 1em 0em;
+    line-height: 1.5em;
+}
+.documentByLine {
+    text-align: right;
+    font-size: 90%;
+    clear: both;
+    font-weight: normal;
+    color: #76797c;
+}
+
+/* emulate center */
+.center {
+    width: 100%;
+    text-align: center;
+}
+*.center * {
+    margin-left: auto;
+    margin-right: auto;
+}
+/* small for tables and similar */
+.small, .small * { font-size: 94%; }
+table.small { font-size: 100% }
+
+/*
+** content styles
+*/
+
+#toc {
+    /*border:1px solid #2f6fab;*/
+    border:1px solid #aaaaaa;
+    background-color:#f9f9f9;
+    padding:5px;
+    font-size: 95%;
+}
+#toc ul { margin-left: 2em; }
+#toc .toctoggle { font-size: 94%; }
+#toc .editsection {
+    margin-top: 0.7em;
+    font-size: 94%;
+}
+
+/* images */
+div.floatright, table.floatright {
+    clear: right;
+    float: right;
+    margin: 0;
+    position: relative;
+    border: 0.5em solid White;
+    border-width: 0.5em 0 0.8em 1.4em;
+}
+div.floatright p { font-style: italic; }
+div.floatleft, table.floatleft {
+    float: left;
+    clear: left;
+    margin: 0.3em 0.5em 0.5em 0;
+    position: relative;
+    border: 0.5em solid White;
+    border-width: 0.5em 1.4em 0.8em 0;
+}
+div.floatleft p { font-style: italic; }
+/* thumbnails */
+div.thumb {
+    margin-bottom: 0.5em;
+    border-style: solid; border-color: White;
+    width: auto;
+}
+div.thumb div {
+    border:1px solid #cccccc;
+    padding: 3px !important;
+    background-color:#f9f9f9;
+    font-size: 94%;
+    text-align: center;
+    overflow: hidden;
+}
+div.thumb div a img {
+    border:1px solid #cccccc;
+}
+div.thumb div div.thumbcaption {
+    border: none;
+    text-align: left;
+    line-height: 1.4em;
+    padding: 0.3em 0 0.1em 0;
+}
+div.magnify {
+    float: right;
+    border: none !important;
+    background: none !important;
+}
+div.magnify a, div.magnify img {
+    display: block;
+    border: none !important;
+    background: none !important;
+}
+div.tright {
+    clear: right;
+    float: right;
+    border-width: 0.5em 0 0.8em 1.4em;
+}
+div.tleft {
+    float: left;
+    clear: left;
+    margin-right:0.5em;
+    border-width: 0.5em 1.4em 0.8em 0;
+}
+
+.hiddenStructure {
+    display: none;
+}
+img.tex { vertical-align: middle; }
+span.texhtml { font-family: serif; }
+
+/*
+** classes for special content elements like town boxes
+** intended to be referenced directly from the wiki src
+*/
+
+/*
+** User styles
+*/
+/* table standards */
+table.rimage {
+    float:right;
+    position:relative;
+    margin-left:1em;
+    margin-bottom:1em;
+    text-align:center;
+}
+.toccolours {
+    border:1px solid #aaaaaa;
+    background-color:#f9f9f9;
+    padding:5px;
+    font-size: 95%;
+}
+div.townBox {
+    position:relative;
+    float:right;
+    background:White;
+    margin-left:1em;
+    border: 1px solid gray;
+    padding:0.3em;
+    width: 200px;
+    overflow: hidden;
+    clear: right;
+}
+div.townBox dl {
+    padding: 0;
+    margin: 0 0 0.3em 0;
+    font-size: 96%;
+}
+div.townBox dl dt {
+    background: none;
+    margin: 0.4em 0 0 0;
+}
+div.townBox dl dd {
+    margin: 0.1em 0 0 1.1em;
+    background-color: #f3f3f3;
+}
+
+/*
+** edit views etc
+*/
+.special li {
+    line-height: 1.4em;
+    margin: 0;
+    padding: 0;
+}
+
+/* Page history styling */
+/* the auto-generated edit comments */
+.autocomment { color: gray; }
+#pagehistory span.user {
+    margin-left: 1.4em;
+    margin-right: 0.4em;
+}
+#pagehistory span.minor { font-weight: bold; }
+#pagehistory li { border: 1px solid White; }
+#pagehistory li.selected {
+    background-color:#f9f9f9;
+    border:1px dashed #aaaaaa;
+}
+/*
+** Diff rendering
+*/
+table.diff { background:white; }
+td.diff-otitle { background:#ffffff; }
+td.diff-ntitle { background:#ffffff; }
+td.diff-addedline {
+    background:#ccffcc;
+    font-size: smaller;
+}
+td.diff-deletedline {
+    background:#ffffaa;
+    font-size: smaller;
+}
+td.diff-context {
+    background:#eeeeee;
+    font-size: smaller;
+}
+.diffchange { color: red; text-decoration: none; }
+
+a.external { color: #3366bb; }
+
+div#footer { text-align: center; }
+
+ul#f-list li { list-style: none;  text-align: center; }
+
+div.portlet { margin: 0.5em 0; }
+
+.redirectText {
+	font-size:150%;
+	margin:5px;
+}
+
+ul.special li.not-patrolled, ol.special li.not-patrolled {
+	background-color: #ffa;
+}
+div.patrollink {
+	font-size: 75%;
+	text-align: right;
+}
+span.newpage, span.minor {
+	font-weight: bold;
+}
+
+span.updatedmarker {
+	color:black;
+	background-color:#00FF00;
+}
+
+table.gallery {
+        border:  1px solid #cccccc;
+        margin:  2px;
+        padding: 2px;
+        background-color:#ffffff;
+}
+
+table.gallery tr { 
+        vertical-align:top;
+}
+
+table.gallery td {
+      vertical-align:top;
+      background-color:#f9f9f9;
+      border: solid 2px white;
+}
+
+div.gallerybox {
+        margin: 2px;
+        width:  150px;
+}
+
+div.gallerybox div.thumb {
+        text-align: center;
+        border: 1px solid #cccccc;
+        margin: 2px;
+}       
+
+div.gallerytext {
+        font-size: 94%;
+        padding: 2px 4px;
+}       
+
+#jump-to-nav {
+  display: none;
+}
+
+.templatesUsed { margin-top: 1.5em; }
+
+/**
+ * Here is some stuff that's ACTUALLY COMMON TO ALL SKINS.
+ * When the day comes, it can be moved to a *real* common.css.
+ */
+.mw-plusminus-null { color: #aaa; }
+.texvc { direction: ltr; unicode-bidi: embed; }
+/* Stop floats from intruding into edit area in previews */
+#toolbar, #wpTextbox1 { clear: both; }
Index: /MediaWiki/branches/1.11/skins/common/IEFixes.js
===================================================================
--- /MediaWiki/branches/1.11/skins/common/IEFixes.js	(revision 1280)
+++ /MediaWiki/branches/1.11/skins/common/IEFixes.js	(revision 1280)
@@ -0,0 +1,127 @@
+// IE fixes javascript
+
+var isMSIE55 = (window.showModalDialog && window.clipboardData && window.createPopup);
+var doneIETransform;
+var doneIEAlphaFix;
+
+if (document.attachEvent)
+  document.attachEvent('onreadystatechange', hookit);
+
+function hookit() {
+    if (!doneIETransform && document.getElementById && document.getElementById('bodyContent')) {
+        doneIETransform = true;
+        relativeforfloats();
+        fixalpha();
+    }
+}
+
+// png alpha transparency fixes
+function fixalpha() {
+    // bg
+    if (isMSIE55 && !doneIEAlphaFix)
+    {
+        var plogo = document.getElementById('p-logo');
+        if (!plogo) return;
+
+        var logoa = plogo.getElementsByTagName('a')[0];
+        if (!logoa) return;
+
+        var bg = logoa.currentStyle.backgroundImage;
+        var imageUrl = bg.substring(5, bg.length-2);
+
+        doneIEAlphaFix = true;
+
+        if (imageUrl.substr(imageUrl.length-4).toLowerCase() == '.png') {
+            var logospan = logoa.appendChild(document.createElement('span'));
+
+            logoa.style.backgroundImage = 'none';
+            logospan.style.filter = 'progid:DXImageTransform.Microsoft.AlphaImageLoader(src=' + imageUrl + ')';
+            logospan.style.height = '100%';
+            logospan.style.position = 'absolute';
+            logospan.style.width = logoa.currentStyle.width;
+            logospan.style.cursor = 'hand';
+            // Center image with hack for IE5.5
+            if (document.documentElement.dir == "rtl")
+            {
+              logospan.style.right = '50%';
+              logospan.style.setExpression('marginRight', '"-" + (this.offsetWidth / 2) + "px"');
+            }
+            else
+            {
+              logospan.style.left = '50%';
+              logospan.style.setExpression('marginLeft', '"-" + (this.offsetWidth / 2) + "px"');
+            }
+            logospan.style.top = '50%';
+            logospan.style.setExpression('marginTop', '"-" + (this.offsetHeight / 2) + "px"');
+
+            var linkFix = logoa.appendChild(logoa.cloneNode());
+            linkFix.style.position = 'absolute';
+            linkFix.style.height = '100%';
+            linkFix.style.width = '100%';
+        }
+    }
+}
+
+// fix ie6 disappering float bug
+function relativeforfloats() {
+    var bc = document.getElementById('bodyContent');
+    if (bc) {
+        var tables = bc.getElementsByTagName('table');
+        var divs = bc.getElementsByTagName('div');
+    }
+    setrelative(tables);
+    setrelative(divs);
+}
+function setrelative (nodes) {
+    var i = 0;
+    while (i < nodes.length) {
+        if(((nodes[i].style.float && nodes[i].style.float != ('none') ||
+        (nodes[i].align && nodes[i].align != ('none'))) &&
+        (!nodes[i].style.position || nodes[i].style.position != 'relative'))) 
+        {
+            nodes[i].style.position = 'relative';
+        }
+        i++;
+    }
+}
+
+
+// Expand links for printing
+
+String.prototype.hasClass = function(classWanted)
+{
+    var classArr = this.split(/\s/);
+    for (var i=0; i<classArr.length; i++)
+      if (classArr[i].toLowerCase() == classWanted.toLowerCase()) return true;
+    return false;
+}
+
+var expandedURLs;
+
+onbeforeprint = function() { 
+    expandedURLs = [];
+
+    var contentEl = document.getElementById("content");
+
+    if (contentEl)
+    {
+      var allLinks = contentEl.getElementsByTagName("a");
+
+      for (var i=0; i < allLinks.length; i++) {
+          if (allLinks[i].className.hasClass("external") && !allLinks[i].className.hasClass("free")) {
+              var expandedLink = document.createElement("span");
+              var expandedText = document.createTextNode(" (" + allLinks[i].href + ")");
+              expandedLink.appendChild(expandedText);
+              allLinks[i].parentNode.insertBefore(expandedLink, allLinks[i].nextSibling);
+              expandedURLs[i] = expandedLink;
+          }
+      }
+   }
+}
+
+onafterprint = function()
+{
+    for (var i=0; i < expandedURLs.length; i++)
+        if (expandedURLs[i])
+            expandedURLs[i].removeNode(true);
+}
Index: /MediaWiki/branches/1.11/skins/common/ajax.js
===================================================================
--- /MediaWiki/branches/1.11/skins/common/ajax.js	(revision 1280)
+++ /MediaWiki/branches/1.11/skins/common/ajax.js	(revision 1280)
@@ -0,0 +1,149 @@
+// remote scripting library
+// (c) copyright 2005 modernmethod, inc
+var sajax_debug_mode = false;
+var sajax_request_type = "GET";
+
+/**
+* if sajax_debug_mode is true, this function outputs given the message into 
+* the element with id = sajax_debug; if no such element exists in the document, 
+* it is injected.
+*/
+function sajax_debug(text) {
+	if (!sajax_debug_mode) return false;
+
+	var e= document.getElementById('sajax_debug');
+
+	if (!e) {
+		e= document.createElement("p");
+		e.className= 'sajax_debug';
+		e.id= 'sajax_debug';
+
+		var b= document.getElementsByTagName("body")[0];
+
+		if (b.firstChild) b.insertBefore(e, b.firstChild);
+		else b.appendChild(e);
+	}
+
+	var m= document.createElement("div");
+	m.appendChild( document.createTextNode( text ) );
+
+	e.appendChild( m );
+
+	return true;
+}
+
+/**
+* compatibility wrapper for creating a new XMLHttpRequest object.
+*/
+function sajax_init_object() {
+	sajax_debug("sajax_init_object() called..")
+	var A;
+	try {
+		A=new ActiveXObject("Msxml2.XMLHTTP");
+	} catch (e) {
+		try {
+			A=new ActiveXObject("Microsoft.XMLHTTP");
+		} catch (oc) {
+			A=null;
+		}
+	}
+	if(!A && typeof XMLHttpRequest != "undefined")
+		A = new XMLHttpRequest();
+	if (!A)
+		sajax_debug("Could not create connection object.");
+
+	return A;
+}
+
+/**
+* Perform an ajax call to mediawiki. Calls are handeled by AjaxDispatcher.php
+*   func_name - the name of the function to call. Must be registered in $wgAjaxExportList
+*   args - an array of arguments to that function
+*   target - the target that will handle the result of the call. If this is a function,
+*            if will be called with the XMLHttpRequest as a parameter; if it's an input
+*            element, its value will be set to the resultText; if it's another type of
+*            element, its innerHTML will be set to the resultText.
+*
+* Example:
+*    sajax_do_call('doFoo', [1, 2, 3], document.getElementById("showFoo"));
+*
+* This will call the doFoo function via MediaWiki's AjaxDispatcher, with
+* (1, 2, 3) as the parameter list, and will show the result in the element
+* with id = showFoo
+*/
+function sajax_do_call(func_name, args, target) {
+	var i, x, n;
+	var uri;
+	var post_data;
+	uri = wgServer + wgScriptPath + "/index.php?action=ajax";
+	if (sajax_request_type == "GET") {
+		if (uri.indexOf("?") == -1)
+			uri = uri + "?rs=" + encodeURIComponent(func_name);
+		else
+			uri = uri + "&rs=" + encodeURIComponent(func_name);
+		for (i = 0; i < args.length; i++)
+			uri = uri + "&rsargs[]=" + encodeURIComponent(args[i]);
+		//uri = uri + "&rsrnd=" + new Date().getTime();
+		post_data = null;
+	} else {
+		post_data = "rs=" + encodeURIComponent(func_name);
+		for (i = 0; i < args.length; i++)
+			post_data = post_data + "&rsargs[]=" + encodeURIComponent(args[i]);
+	}
+	x = sajax_init_object();
+	if (!x) {
+		alert("AJAX not supported");
+		return false;
+	}
+
+	try {
+		x.open(sajax_request_type, uri, true);
+	} catch (e) {
+		if (window.location.hostname == "localhost") {
+			alert("Your browser blocks XMLHttpRequest to 'localhost', try using a real hostname for development/testing.");
+		}
+		throw e;
+	}
+	if (sajax_request_type == "POST") {
+		x.setRequestHeader("Method", "POST " + uri + " HTTP/1.1");
+		x.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
+	}
+	x.setRequestHeader("Pragma", "cache=yes");
+	x.setRequestHeader("Cache-Control", "no-transform");
+	x.onreadystatechange = function() {
+		if (x.readyState != 4)
+			return;
+
+		sajax_debug("received (" + x.status + " " + x.statusText + ") " + x.responseText);
+
+		//if (x.status != 200)
+		//	alert("Error: " + x.status + " " + x.statusText + ": " + x.responseText);
+		//else
+
+		if ( typeof( target ) == 'function' ) {
+			target( x );
+		}
+		else if ( typeof( target ) == 'object' ) {
+			if ( target.tagName == 'INPUT' ) {
+				if (x.status == 200) target.value= x.responseText;
+				//else alert("Error: " + x.status + " " + x.statusText + " (" + x.responseText + ")");
+			}
+			else {
+				if (x.status == 200) target.innerHTML = x.responseText;
+				else target.innerHTML= "<div class='error'>Error: " + x.status + " " + x.statusText + " (" + x.responseText + ")</div>";
+			}
+		}
+		else {
+			alert("bad target for sajax_do_call: not a function or object: " + target);
+		}
+
+		return;
+	}
+
+	sajax_debug(func_name + " uri = " + uri + " / post = " + post_data);
+	x.send(post_data);
+	sajax_debug(func_name + " waiting..");
+	delete x;
+
+	return true;
+}
Index: /MediaWiki/branches/1.11/skins/common/ajaxsearch.js
===================================================================
--- /MediaWiki/branches/1.11/skins/common/ajaxsearch.js	(revision 1280)
+++ /MediaWiki/branches/1.11/skins/common/ajaxsearch.js	(revision 1280)
@@ -0,0 +1,104 @@
+// remote scripting library
+// (c) copyright 2005 modernmethod, inc
+
+var started;
+var typing;
+var memory=null;
+var body=null;
+var oldbody=null;
+
+// Remove the typing barrier to allow call() to complete
+function Search_doneTyping()
+{
+	typing=false;
+}
+
+// Wait 500ms to run call()
+function Searching_Go()
+{
+        setTimeout("Searching_Call()", 500);
+}
+
+// If the user is typing wait until they are done.
+function Search_Typing() {
+	started=true;
+	typing=true;
+	window.status = "Waiting until you're done typing...";
+	setTimeout("Search_doneTyping()", 500);
+
+	// I believe these are needed by IE for when the users press return?
+	if (window.event)
+	{
+		if (event.keyCode == 13)
+		{
+			event.cancelBubble = true;
+			event.returnValue = true;
+		}
+	}
+}
+
+// Set the body div to the results
+function Searching_SetResult( request )
+{
+	if ( request.status != 200 ) {
+		alert("Error: " + request.status + " " + request.statusText + ": " + request.responseText);
+		return;
+	}
+
+	var result = request.responseText;
+
+        //body.innerHTML = result;
+	t = document.getElementById("searchTarget");
+	if ( t == null ) {
+		oldbody=body.innerHTML;
+		body.innerHTML= '<div id="searchTargetContainer"><div id="searchTarget" ></div></div>' ;
+		t = document.getElementById("searchTarget");
+	}
+	t.innerHTML = result;
+	t.style.display='block';
+}
+
+function Searching_Hide_Results()
+{
+	t = document.getElementById("searchTarget");
+	t.style.display='none';
+	body.innerHTML = oldbody;
+}
+
+
+// This will call the php function that will eventually
+// return a results table
+function Searching_Call()
+{
+	var x;
+	Searching_Go();
+
+	//Don't proceed if user is typing
+	if (typing)
+		return;
+
+	x = document.getElementById("searchInput").value;
+
+	// Don't search again if the query is the same
+	if (x==memory)
+		return;
+
+	memory=x;
+	if (started) {
+		// Don't search for blank or < 3 chars.
+		if ((x=="") || (x.length < 3))
+		{
+			return;
+		}
+
+		sajax_do_call( "wfSajaxSearch", [ x ], Searching_SetResult );
+	}
+}
+
+//Initialize
+function sajax_onload() {
+	x = document.getElementById( 'searchInput' );
+	x.onkeypress= function() { Search_Typing(); };
+	Searching_Go();
+	body = document.getElementById("content");
+}
Index: /MediaWiki/branches/1.11/skins/common/ajaxwatch.js
===================================================================
--- /MediaWiki/branches/1.11/skins/common/ajaxwatch.js	(revision 1280)
+++ /MediaWiki/branches/1.11/skins/common/ajaxwatch.js	(revision 1280)
@@ -0,0 +1,127 @@
+// dependencies:
+// * ajax.js:
+  /*extern sajax_init_object, sajax_do_call */
+// * wikibits.js:
+  /*extern changeText, akeytt, hookEvent */
+
+// These should have been initialized in the generated js
+/*extern wgAjaxWatch, wgArticleId */
+
+if(typeof wgAjaxWatch === "undefined" || !wgAjaxWatch) {
+	var wgAjaxWatch = {
+		watchMsg: "Watch",
+		unwatchMsg: "Unwatch",
+		watchingMsg: "Watching...",
+		unwatchingMsg: "Unwatching..."
+	};
+}
+
+wgAjaxWatch.supported = true; // supported on current page and by browser
+wgAjaxWatch.watching = false; // currently watching page
+wgAjaxWatch.inprogress = false; // ajax request in progress
+wgAjaxWatch.timeoutID = null; // see wgAjaxWatch.ajaxCall
+wgAjaxWatch.watchLink1 = null; // "watch"/"unwatch" link
+wgAjaxWatch.watchLink2 = null; // second one, for (some?) non-Monobook-based
+wgAjaxWatch.oldHref = null; // url for action=watch/action=unwatch
+
+wgAjaxWatch.setLinkText = function(newText) {
+	changeText(wgAjaxWatch.watchLink1, newText);
+	if (wgAjaxWatch.watchLink2) {
+		changeText(wgAjaxWatch.watchLink2, newText);
+	}
+};
+
+wgAjaxWatch.setLinkID = function(newId) {
+	wgAjaxWatch.watchLink1.id = newId;
+	akeytt(newId); // update tooltips for Monobook
+};
+
+wgAjaxWatch.ajaxCall = function() {
+	if(!wgAjaxWatch.supported || wgAjaxWatch.inprogress) {
+		return;
+	}
+	wgAjaxWatch.inprogress = true;
+	wgAjaxWatch.setLinkText(wgAjaxWatch.watching ? wgAjaxWatch.unwatchingMsg : wgAjaxWatch.watchingMsg);
+	sajax_do_call("wfAjaxWatch", [wgArticleId, (wgAjaxWatch.watching ? "u" : "w")], wgAjaxWatch.processResult);
+	// if the request isn't done in 10 seconds, allow user to try again
+	wgAjaxWatch.timeoutID = window.setTimeout(function() { wgAjaxWatch.inprogress = false; }, 10000);
+	return;
+};
+
+wgAjaxWatch.processResult = function(request) {
+	if(!wgAjaxWatch.supported) {
+		return;
+	}
+	var response = request.responseText;
+	if(response == "<err#>") {
+		window.location.href = wgAjaxWatch.oldHref;
+		return;
+	} else if(response == "<w#>") {
+		wgAjaxWatch.watching = true;
+		wgAjaxWatch.setLinkText(wgAjaxWatch.unwatchMsg);
+		wgAjaxWatch.setLinkID("ca-unwatch");
+		wgAjaxWatch.oldHref = wgAjaxWatch.oldHref.replace(/action=watch/, "action=unwatch");
+	} else if(response == "<u#>") {
+		wgAjaxWatch.watching = false;
+		wgAjaxWatch.setLinkText(wgAjaxWatch.watchMsg);
+		wgAjaxWatch.setLinkID("ca-watch");
+		wgAjaxWatch.oldHref = wgAjaxWatch.oldHref.replace(/action=unwatch/, "action=watch");
+	}
+	wgAjaxWatch.inprogress = false;
+	if(wgAjaxWatch.timeoutID) {
+		window.clearTimeout(wgAjaxWatch.timeoutID);
+	}
+	return;
+};
+
+wgAjaxWatch.onLoad = function() {
+	var el1 = document.getElementById("ca-unwatch");
+	var el2 = null;
+	if (!el1) {
+		el1 = document.getElementById("mw-unwatch-link1");
+		el2 = document.getElementById("mw-unwatch-link2");
+	}
+	if(el1) {
+		wgAjaxWatch.watching = true;
+	} else {
+		wgAjaxWatch.watching = false;
+		el1 = document.getElementById("ca-watch");
+		if (!el1) {
+			el1 = document.getElementById("mw-watch-link1");
+			el2 = document.getElementById("mw-watch-link2");
+		}
+		if(!el1) {
+			wgAjaxWatch.supported = false;
+			return;
+		}
+	}
+
+	if(!wfSupportsAjax()) {
+		wgAjaxWatch.supported = false;
+		return;
+	}
+
+	// The id can be either for the parent (Monobook-based) or the element
+	// itself (non-Monobook)
+	wgAjaxWatch.watchLink1 = el1.tagName.toLowerCase() == "a" ? el1 : el1.firstChild;
+	wgAjaxWatch.watchLink2 = el2 ? el2 : null;
+
+	wgAjaxWatch.oldHref = wgAjaxWatch.watchLink1.getAttribute("href");
+	wgAjaxWatch.watchLink1.setAttribute("href", "javascript:wgAjaxWatch.ajaxCall()");
+	if (wgAjaxWatch.watchLink2) {
+		wgAjaxWatch.watchLink2.setAttribute("href", "javascript:wgAjaxWatch.ajaxCall()");
+	}
+	return;
+};
+
+hookEvent("load", wgAjaxWatch.onLoad);
+
+/**
+ * @return boolean whether the browser supports XMLHttpRequest
+ */
+function wfSupportsAjax() {
+	var request = sajax_init_object();
+	var supportsAjax = request ? true : false;
+	delete request;
+	return supportsAjax;
+}
Index: /MediaWiki/branches/1.11/skins/common/block.js
===================================================================
--- /MediaWiki/branches/1.11/skins/common/block.js	(revision 1280)
+++ /MediaWiki/branches/1.11/skins/common/block.js	(revision 1280)
@@ -0,0 +1,47 @@
+
+function considerChangingExpiryFocus() {
+	if (!document.getElementById) {
+		return;
+	}
+	var drop = document.getElementById('wpBlockExpiry');
+	if (!drop) {
+		return;
+	}
+	var field = document.getElementById('wpBlockOther');
+	if (!field) {
+		return;
+	}
+	var opt = drop.value;
+	if (opt == 'other') {
+		field.style.display = '';
+	} else {
+		field.style.display = 'none';
+	}
+}
+
+function updateBlockOptions() {
+	if (!document.getElementById)
+		return;
+	
+	var target = document.getElementById('mw-bi-target');
+	if (!target)
+		return;
+	
+	var addy = target.value;
+	var isEmpty = addy.match(/^\s*$/);
+	var isIp = addy.match(/^(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}|:(:[0-9A-Fa-f]{1,4}){1,7}|[0-9A-Fa-f]{1,4}(:{1,2}[0-9A-Fa-f]{1,4}|::$){1,7})(\/\d+)?$/);
+	
+	/*
+	var anonymousCheck = document.getElementById('wpAnonOnly');
+	anonymousCheck.disabled = !isIp && !isEmpty;
+	
+	var autoblockCheck = document.getElementById('wpEnableAutoblock');
+	autoblockCheck.disabled = isIp && !isEmpty;
+	*/
+
+	var anonymousRow = document.getElementById('wpAnonOnlyRow');
+	anonymousRow.style.display = (!isIp && !isEmpty) ? 'none' : '';
+	
+	var autoblockRow = document.getElementById('wpEnableAutoblockRow');
+	autoblockRow.style.display = isIp && !isEmpty ? 'none' : '';
+}
Index: /MediaWiki/branches/1.11/skins/common/cologneblue.css
===================================================================
--- /MediaWiki/branches/1.11/skins/common/cologneblue.css	(revision 1280)
+++ /MediaWiki/branches/1.11/skins/common/cologneblue.css	(revision 1280)
@@ -0,0 +1,96 @@
+body { margin: 0px; padding: 0px; color: black; }
+#specialform { display: inline; }
+#content { top: 0; margin: 0; padding: 0; }
+#topbar { padding: 0px; }
+#powersearch {
+  background: #DDEEFF; border-style: solid; border-width: 1px; padding: 2px;
+}
+#quickbar {
+ width: 140px; top: 18ex; padding: 2px; visibility: visible; z-index: 99;
+}
+#article, #article td, #article th, #article p {
+ font-family: Verdana, Arial, sans-serif;
+ font-size: 10pt; color: black;
+}
+#article p {
+ padding-top: 0; padding-bottom: 0;
+ margin-top: 1ex; margin-bottom: 0;
+}
+p, pre, td, th, li, dd, dt { line-height: 12pt; }
+textarea { overflow: auto; }
+
+#footer { padding: 4px; }
+#footer form { display: inline; }
+#sitetitle {
+ font-family: Times, serif;
+ color: white;
+ font-weight: normal; font-size: 32pt;
+ line-height: 32pt;
+}
+td.top {
+ background-color: #6688AA; color: white;
+ margin-top: 4px; margin-bottom: 4px;
+ padding-top: 0; padding-bottom: 0;
+ text-transform: uppercase;
+ font-family: Verdana, Arial, sans-serif; font-size: 8pt;
+}
+td.top a {
+ font-family: Verdana, Arial, sans-serif;
+ background-color: #6688AA; color: white;
+ text-decoration: none; font-size: 10pt;
+}
+td.bottom {
+ font-family: Verdana, Arial, sans-serif;
+ font-size: 10pt;
+ padding: 0;
+}
+#pagestats {
+ font-family: Verdana, Arial, sans-serif;
+ color: black;
+ font-size: 9pt;
+}
+#sitesub {
+ font-family: Verdana, Arial, sans-serif;
+ font-size: 9pt; font-weight: bold;
+ color: black;
+ padding-top: 0;
+}
+#quickbar {
+ font-family: Verdana, Arial, sans-serif;
+ font-size: 8pt; font-weight: bold; line-height: 9.5pt;
+ text-decoration: none;
+ color: black;
+ padding: 0; margin-top: 0;
+}
+#quickbar a { color: #446688; }
+
+#quickbar h6 {
+ font-family: Verdana, Arial, sans-serif;
+ font-size: 10pt; font-weight: bold; line-height: 12pt;
+ text-decoration: none;
+ color: #666666;
+ padding: 0; margin-bottom: 2px; margin-top: 6px;
+}
+#quickbar form { padding: 0; margin-top: 0; }
+
+h1 {
+ color: #666666;
+ font-family: Verdana, Arial, sans-serif;
+ font-size: 180%; line-height: 21pt;
+}
+h1 .editsection { font-size: 55.6%; }
+h1.pagetitle { padding-bottom: 0; margin-bottom: 0; }
+#article p.subtitle {
+ color: #666666; font-size: 11pt; font-weight: bold;
+ padding-top: 0; margin-top: 0; padding-bottom: 1ex;
+}
+
+a { color: #223366; }
+a.external { color: #336644; }
+a:visited { color: #8D0749; }
+a.printable { text-decoration: underline; }
+a.stub, #quickbar a.stub { color:#772233; text-decoration:none; }
+a.new, #quickbar a.new { color: #CC2200; }
+h2, h3, h4, h5, h6 { margin-bottom: 0; }
+small { font-size: 75%; }
+input.mw-searchInput { width: 106px; }
Index: /MediaWiki/branches/1.11/skins/common/common.css
===================================================================
--- /MediaWiki/branches/1.11/skins/common/common.css	(revision 1280)
+++ /MediaWiki/branches/1.11/skins/common/common.css	(revision 1280)
@@ -0,0 +1,494 @@
+/*
+ * common.css
+ * This file contains CSS settings common to Wikistandard, Nostalgia and CologneBlue
+ */
+
+/* For clarity, explicitly state some recommendations from <http://www.w3.org/
+   TR/CSS21/sample.html> to make sure the editsection links scale right */
+
+h1 { font-size: 2em; }
+h2 { font-size: 1.5em; }
+h3 { font-size: 1.17em; }
+h5 { font-size: .83em; }
+h6 { font-size: .75em; }
+h1, h2, h3, h4, h5, h6 { font-weight: bolder }
+
+/* Now the custom parts */
+
+/* Make edit sections (which are inside h# tags) normal-sized */
+.editsection {
+	font-weight: normal;
+	float: right;
+	margin-left: 5px;
+}
+h1 .editsection { font-size: 50% }
+h2 .editsection { font-size: 66.7% }
+h3 .editsection { font-size: 85.5% }
+h5 .editsection { font-size: 120% }
+h6 .editsection { font-size: 133% }
+
+#footer { clear: both }
+/* images */
+div.floatright { float: right; clear: right; margin: 0 0 1em 1em; }
+div.floatright p { font-style: italic; }
+div.floatleft { float: left; clear: left; margin: 0.3em 0.5em 0.5em 0; }
+div.floatleft p { font-style: italic; }
+
+
+/* Print-specific things to hide */
+.printfooter {
+        display: none;
+}
+
+/* table standards */
+table.rimage {
+        float:right;
+        margin-left:1em;
+        margin-bottom:1em;
+        text-align:center;
+        font-size:smaller;
+}
+
+/* thumbnails */
+div.thumb {
+	margin-bottom: .5em;
+	border-style: solid;
+	border-color: white;
+	width: auto;
+}
+div.thumbinner {
+	border: 1px solid #ccc;
+	padding: 3px !important;
+	background-color: #f9f9f9;
+	font-size: 94%;
+	text-align: center;
+	overflow: hidden;
+}
+html .thumbimage {
+	border: 1px solid #ccc;
+}
+html .thumbcaption {
+	border: none;
+	text-align: left;
+	line-height: 1.4em;
+	padding: 3px !important;
+	font-size: 94%;
+}
+div.magnify {
+	float: right;
+	border: none !important;
+	background: none !important;
+}
+div.magnify a, div.magnify img {
+	display: block;
+	border: none !important;
+	background: none !important;
+}
+div.tright {
+	clear: right;
+	float: right;
+	border-width: .5em 0 .8em 1.4em;
+}
+div.tleft {
+	float: left;
+	clear: left;
+	margin-right: .5em;
+	border-width: .5em 1.4em .8em 0;
+}
+
+/* Page history styling */
+/* the auto-generated edit comments */
+.autocomment { color: #4b4b4b; }
+#pagehistory span.user {
+    margin-left: 1.4em;
+    margin-right: 0.4em;
+}
+#pagehistory span.minor { font-weight: bold; }
+#pagehistory li { border: 1px solid White; }
+#pagehistory li.selected {
+    background-color:#f9f9f9;
+    border:1px dashed #aaaaaa;
+}
+
+table.diff { background:white; }
+td.diff-otitle { background:#cccccc; }
+td.diff-ntitle { background:#cccccc; }
+td.diff-addedline {
+    background:#ccffcc;
+    font-size: 94%;
+}
+td.diff-deletedline {
+    background:#ffffaa;
+    font-size: 94%;
+}
+td.diff-context {
+    background:#eeeeee;
+    font-size: 94%;
+}
+.diffchange {
+	color: red;
+	font-weight: bold;
+	text-decoration: none;
+}
+
+img { border: none; }
+img.tex { vertical-align: middle; }
+span.texhtml { font-family: serif; }
+
+
+#toc,
+.toc {
+	border: 1px solid #bba;
+	background-color: #f7f8ff;
+	padding: 5px;
+	font-size: 95%;
+	text-align: center;
+}
+#toc h2,
+.toc h2 {
+	display: inline;
+	border: none;
+	padding: 0;
+	font-size: 100%;
+	font-weight: bold;
+}
+#toc ul,
+.toc ul {
+	list-style-type: none;
+	list-style-image: none;
+	margin-left: 0;
+	padding-left: 0;
+	text-align: left;
+}
+#toc ul ul,
+.toc ul ul {
+	margin: 0 0 0 2em;
+}
+#toc .toctoggle,
+.toc .toctoggle {
+	font-size: 94%;
+}
+
+
+.error {
+	color: red;
+	font-size: larger;
+}
+
+/* preference page with js-genrated toc */
+#preftoc {
+    float: left;
+    margin: 1em 1em 1em 1em;
+    width: 13em;
+}
+#preftoc li { border: 1px solid White; }
+#preftoc li.selected {
+    background-color:#f9f9f9;
+    border:1px dashed #aaaaaa;
+}
+#preftoc a,
+#preftoc a:active {
+    display: block;
+    color: #005189;
+}
+#prefcontrol {
+    clear: left;
+    float: left;
+    margin-top: 1em;
+}
+div.prefsectiontip {
+    font-size: 94%;
+    margin-top: 1em;
+}
+fieldset.prefsection { margin-top: 1em }
+fieldset.operaprefsection { margin-left: 15em }
+
+/* emulate center */
+.center {
+    width: 100%;
+    text-align: center;
+}
+*.center * {
+    margin-left: auto;
+    margin-right: auto;
+}
+/* small for tables and similar */
+.small, .small * { font-size: 94%; }
+table.small { font-size: 100% }
+
+div.townBox {
+    position:relative;
+    float:right;
+    background:White;
+    margin-left:1em;
+    border: 1px solid gray;
+    padding:0.3em;
+    width: 200px;
+    overflow: hidden;
+    clear: right;
+}
+div.townBox dl {
+    padding: 0;
+    margin: 0 0 0.3em 0;
+    font-size: 96%;
+}
+div.townBox dl dt {
+    background: none;
+    margin: 0.4em 0 0 0;
+}
+div.townBox dl dd {
+    margin: 0.1em 0 0 1.1em;
+    background-color: #f3f3f3;
+}
+/* use this instead of #toc for page content */
+.toccolours {
+    border:1px solid #aaaaaa;
+    background-color:#f9f9f9;
+    padding:5px;
+    font-size: 95%;
+}
+#siteNotice {
+    border:1px solid #aaaaaa;
+    padding-left: 0.5em;
+    padding-right: 0.5em;
+}
+.redirectText {
+	font-size:150%;
+	margin:5px;
+}
+.searchmatch {
+	color: red;
+	font-weight: bold;
+}
+.sharedUploadNotice {
+	font-style: italic;
+}
+span.unpatrolled {
+	font-weight:bold;
+	color:red;
+}
+
+span.updatedmarker {
+	color:black;
+	background-color:#00FF00;
+}
+
+table.gallery {
+        border:  1px solid #cccccc;
+        margin:  2px;
+        padding: 2px;
+        background-color:#ffffff;
+}
+
+table.gallery tr {
+    vertical-align:top;
+}
+
+table.gallery td {
+      vertical-align:top;
+      background-color:#f9f9f9;
+      border: solid 2px white;
+}
+
+div.gallerybox {
+        margin: 2px;
+        width:  150px;
+}
+
+div.gallerybox div.thumb {
+        text-align: center;
+        border: 1px solid #cccccc;
+        margin: 2px;
+}
+
+div.gallerytext {
+        font-size: 94%;
+        padding: 2px 4px;
+}
+
+span.comment {
+	font-style: italic;
+}
+
+span.changedby {
+	font-size: 95%;
+}
+
+.previewnote {
+	text-align: center;
+	color: #cc0000;
+}
+.editExternally {
+        border-style:solid;
+        border-width:1px;
+        border-color:gray;
+        background: #ffffff;
+        padding:3px;
+        margin-top:0.5em;
+        float:left;
+        font-size:small;
+        text-align:center;
+}
+.editExternallyHelp {
+        font-style:italic;
+        color:gray;
+}
+
+li span.deleted {
+	text-decoration: line-through;
+	color: #888;
+	font-style: italic;
+}
+
+/* Classes for EXIF data display */
+table.mw_metadata {
+	margin-left: 0.5em;
+}
+
+table.mw_metadata caption { font-weight: bold; }
+table.mw_metadata th { font-weight: normal; }
+table.mw_metadata td { padding: 0.1em; }
+
+table.mw_metadata {
+	border: none;
+	border-collapse: collapse;
+}
+table.mw_metadata td, table.mw_metadata th {
+	border: 1px solid #aaaaaa;
+	padding-left: 4px;
+	padding-right: 4px;
+}
+table.mw_metadata th {
+	background-color: #f9f9f9;
+}
+table.mw_metadata td {
+	background-color: #fcfcfc;
+}
+table.mw_metadata td.spacer {
+	background: inherit;
+	border-top: none;
+	border-bottom: none;
+}
+table.collapsed tr.collapsable {
+	display: none;
+}
+
+.visualClear {
+    clear: both;
+}
+
+#mw_trackbacks {
+	border: solid 1px #bbbbff;
+	background-color: #eeeeff;
+	padding: 0.2em;
+}
+
+/* Allmessages table */
+
+#allmessagestable th {
+	background-color: #b2b2ff;
+}
+
+#allmessagestable tr.orig {
+	background-color: #ffe2e2;
+}
+
+#allmessagestable tr.new {
+	background-color: #e2ffe2;
+}
+
+#allmessagestable tr.def {
+	background-color: #f0f0ff;
+}
+
+#jump-to-nav {
+  display: none;
+}
+
+/* Keep this temporarily so that cached pages will display right */
+table.gallery td.galleryheader {
+    text-align: center;
+	font-weight: bold;
+}
+table.gallery caption {
+	font-weight: bold;
+}
+
+div.multipageimagenavbox {
+   border: solid 1px silver;
+   padding: 4px;
+   margin: 1em;
+   -moz-border-radius: 6px;
+   background: #f0f0f0;
+}
+
+div.multipageimagenavbox div.thumb {
+   border: none;
+   margin-left: 2em;
+   margin-right: 2em;
+}
+
+div.multipageimagenavbox hr {
+   margin: 6px;
+}
+
+table.multipageimage td {
+   text-align: center;
+}
+
+/*
+  Table pager (e.g. Special:Imagelist)
+  - remove underlines from the navigation link
+  - collapse borders
+  - set the borders to outsets (similar to Special:Allmessages)
+  - remove line wrapping for all td and th, set background color
+  - restore line wrapping for the last two table cells (description and size)
+*/
+.TablePager_nav a { text-decoration: none; }
+.TablePager { border-collapse: collapse; }
+.TablePager, .TablePager td, .TablePager th { 
+	border: 0.15em solid #777777;
+	padding: 0 0.15em 0 0.15em;
+}
+.TablePager th { background-color: #eeeeff }
+.TablePager td { background-color: #ffffff }
+.TablePager tr:hover td { background-color: #eeeeff }
+
+.imagelist td, .imagelist th { white-space: nowrap }
+.imagelist .TablePager_col_links { background-color: #eeeeff }
+.imagelist .TablePager_col_img_description { white-space: normal }
+.imagelist th.TablePager_sort { background-color: #ccccff }
+
+.templatesUsed { margin-top: 1em; }
+
+/* Convenience links on Special:Ipblocklist */
+p.mw-ipb-conveniencelinks {
+	font-size: 90%;
+	float: right;
+}
+
+/**
+ * Here is some stuff that's ACTUALLY COMMON TO ALL SKINS.
+ * When the day comes, it can be moved to a *real* common.css.
+ */
+.mw-plusminus-null { color: #aaa; }
+.texvc { direction: ltr; unicode-bidi: embed; }
+/* Stop floats from intruding into edit area in previews */
+#toolbar, #wpTextbox1 { clear: both; }
+
+/*
+#file img, .gallerybox .thumb img {
+	background: url(images/Checker-16x16.png) repeat;
+}
+*/
+.MediaTransformError {
+	border: thin solid #777;
+	background-color: #ccc;
+	padding: 0.1em;
+}
+.MediaTransformError td {
+	text-align: center;
+	vertical-align: middle;
+	font-size: 90%;
+}
+
Index: /MediaWiki/branches/1.11/skins/common/commonPrint.css
===================================================================
--- /MediaWiki/branches/1.11/skins/common/commonPrint.css	(revision 1280)
+++ /MediaWiki/branches/1.11/skins/common/commonPrint.css	(revision 1280)
@@ -0,0 +1,290 @@
+/*
+** MediaWiki Print style sheet for CSS2-capable browsers.
+** Copyright Gabriel Wicke, http://www.aulinx.de/
+**
+** Derived from the plone (http://plone.org/) styles
+** Copyright Alexander Limi
+*/
+
+/* Thanks to A List Apart (http://alistapart.com/) for useful extras */
+a.stub,
+a.new{ color:#ba0000; text-decoration:none; }
+
+#toc { 
+    /*border:1px solid #2f6fab;*/
+    border:1px solid #aaaaaa;
+    background-color:#f9f9f9;
+    padding:5px;
+}
+.tocindent {
+	margin-left: 2em;
+}
+.tocline {
+	margin-bottom: 0px;
+}
+
+/* images */
+div.floatright { 
+    float: right;
+    clear: right;
+    margin: 0;
+    position:relative;
+    border: 0.5em solid White;
+    border-width: 0.5em 0 0.8em 1.4em;
+}
+div.floatright p { font-style: italic;} 
+div.floatleft { 
+    float: left; 
+    margin: 0.3em 0.5em 0.5em 0;
+    position:relative;
+    border: 0.5em solid White;
+    border-width: 0.5em 1.4em 0.8em 0;
+}
+div.floatleft p { font-style: italic; } 
+/* thumbnails */
+div.thumb {
+    margin-bottom: 0.5em;
+    border-style: solid; border-color: White;
+    width: auto;
+    overflow: hidden;
+}
+div.thumb div {
+    border:1px solid #cccccc;
+    padding: 3px !important;
+    background-color:#f9f9f9;
+    font-size: 94%;
+    text-align: center;
+}
+div.thumb div a img {
+    border:1px solid #cccccc;
+}
+div.thumb div div.thumbcaption {
+    border: none;
+    padding: 0.3em 0 0.1em 0;
+}
+div.magnify { display: none; }
+div.tright {
+    float: right;
+    clear: right;
+    border-width: 0.5em 0 0.8em 1.4em;
+}
+div.tleft {
+    float: left;
+    margin-right:0.5em;
+    border-width: 0.5em 1.4em 0.8em 0;
+}
+
+/* table standards */
+table.rimage {
+    float:right; 
+    width:1pt; 
+    position:relative;
+    margin-left:1em; 
+    margin-bottom:1em;
+    text-align:center;
+}
+
+body {
+    background: White;
+    /*font-size: 11pt !important;*/
+    color: Black;
+    margin: 0;
+    padding: 0;
+}
+
+.noprint,
+div#jump-to-nav,
+div.top,
+div#column-one,
+#colophon,
+.editsection,
+.toctoggle,
+.tochidden,
+div#f-poweredbyico,
+div#f-copyrightico,
+li#viewcount,
+li#about,
+li#disclaimer,
+li#privacy {
+    /* Hides all the elements irrelevant for printing */
+    display: none;
+}
+
+ul { 
+    list-style-type: square;
+}
+
+#content {
+    background: none;
+    border: none ! important;
+    padding: 0 ! important;
+    margin: 0 ! important;
+}
+#footer {
+	background : white;
+	color : black;
+    border-top: 1px solid black;
+}
+
+h1, h2, h3, h4, h5, h6
+{
+	font-weight: bold;
+}
+
+p, .documentDescription {
+    margin: 1em 0 ! important;
+    line-height: 1.2em;
+}
+
+.tocindent p {
+	margin: 0 0 0 0 ! important;
+}
+
+pre {
+    border: 1pt dashed black;
+    white-space: pre;
+    font-size: 8pt;
+    overflow: auto;
+    padding: 1em 0;
+	background : white;
+	color : black;
+}
+
+table.listing,
+table.listing td {
+    border: 1pt solid black;
+    border-collapse: collapse;
+}
+
+a {
+    color: Black !important;
+    background: none !important;
+    padding: 0 !important;
+}
+
+a:link, a:visited {
+    color: #520;
+    background: transparent;
+    text-decoration: underline;
+}
+
+#content a.external.text:after, #content a.external.autonumber:after {
+    /* Expand URLs for printing */
+    content: " (" attr(href) ") ";
+}
+
+#globalWrapper {
+    width: 100% !important;
+    min-width: 0 !important;
+}
+
+#content {
+	background : white;
+	color : black;
+}
+
+#column-content {
+    margin: 0 !important;
+}
+
+#column-content #content {
+    padding: 1em;
+    margin: 0 !important;
+}
+/* MSIE/Win doesn't understand 'inherit' */
+a, a.external, a.new, a.stub {
+	color: black ! important;
+	text-decoration: none ! important;
+}
+
+/* Continue ... */
+a, a.external, a.new, a.stub {
+	color: inherit ! important;
+	text-decoration: inherit ! important;
+}
+
+img { border: none; }
+img.tex { vertical-align: middle; }
+span.texhtml { font-family: serif; }
+
+div.townBox {
+    position:relative;
+    float:right;
+    background:White;
+    margin-left:1em;
+    border: 1px solid gray;
+    padding:0.3em;
+    width: 200px;
+    overflow: hidden;
+    clear: right;
+}
+div.townBox dl {
+    padding: 0;
+    margin: 0 0 0.3em 0; 
+    font-size: 96%;
+}
+div.townBox dl dt {
+    background: none;
+    margin: 0.4em 0 0 0;
+}
+div.townBox dl dd {
+    margin: 0.1em 0 0 1.1em;
+    background-color: #f3f3f3;
+}
+
+#siteNotice { display: none; }
+
+table.gallery {
+        border:  1px solid #cccccc;
+        margin:  2px;
+        padding: 2px;
+        background-color:#ffffff;
+}
+
+table.gallery tr { 
+        vertical-align:top;
+}
+
+div.gallerybox {
+        border: 1px solid #cccccc;
+        margin: 2px;
+        background-color:#f9f9f9;
+        width:  150px;
+}
+
+div.gallerybox div.thumb {
+        text-align: center;
+        border: 1px solid #cccccc;
+        margin: 2px;
+}       
+
+div.gallerytext {
+        font-size: 94%;
+        padding: 2px 4px;
+}       
+
+/*
+** Diff rendering
+*/
+table.diff { background:white; }
+td.diff-otitle { background:#ffffff; }
+td.diff-ntitle { background:#ffffff; }
+td.diff-addedline {
+    background:#ccffcc;
+    font-size: smaller;
+    border: solid 2px black;
+}
+td.diff-deletedline {
+    background:#ffffaa;
+    font-size: smaller;
+    border: dotted 2px black;
+}
+td.diff-context {
+    background:#eeeeee;
+    font-size: smaller;
+}
+.diffchange {
+    color: silver;
+    font-weight: bold;
+    text-decoration: underline;
+}
Index: /MediaWiki/branches/1.11/skins/common/common_rtl.css
===================================================================
--- /MediaWiki/branches/1.11/skins/common/common_rtl.css	(revision 1280)
+++ /MediaWiki/branches/1.11/skins/common/common_rtl.css	(revision 1280)
@@ -0,0 +1,32 @@
+/* This CSS file is called from absolutely every wiki that's RTL: unlike
+ * common.css, it's actually common to all skins. */
+
+/* js pref toc */
+#preftoc { float: right; }
+/* workaround for moz bug, displayed bullets on left side */
+#preftoc li { list-style: none; }
+#prefcontrol { float: right; }
+fieldset.prefsection,
+fieldset.operaprefsection { 
+    margin-left: 0;
+    margin-right: 18em;
+}
+/* page history */
+#pagehistory span.user { 
+    margin-right: 1.4em;
+    margin-left: 0.4em;
+}
+.editsection {
+	float: left;
+	margin-right: 5px;
+}
+div.tright, div.floatright {
+	clear: none;
+}
+div.tleft, div.floatleft {
+	clear: left;
+}
+/* Unblock and Ipblocklist links of Special:Blockip */
+p.mw-ipb-conveniencelinks {
+	float: left;
+}
Index: /MediaWiki/branches/1.11/skins/common/feed.css
===================================================================
--- /MediaWiki/branches/1.11/skins/common/feed.css	(revision 1280)
+++ /MediaWiki/branches/1.11/skins/common/feed.css	(revision 1280)
@@ -0,0 +1,95 @@
+/*
+Make RSS and Atom feeds at least semi-legible to folk who accidentally
+load them in a browser...
+
+Compatibility:
+* Mozilla is fine.
+* Safari 1.2: the RSS <link> text isn't shown
+* Opera 7.5 uses the style sheet instead of its native RSS mode.
+* IE/Mac 5.2: none of the :before content works; doesn't get the charset right and displays garbage for non-ASCII.
+* IE/Win 6.0: No background color, borders, font size, font weight, or :before content.
+
+*/
+
+/* RSS: */ rss, channel, title, link, description, language, generator, lastBuildDate, item, pubDate, author, comments, creator,
+/* Atom: */ feed, id, modified, tagline, entry, issued, created, updated, summary, comment {
+	display: block;
+}
+
+rss, feed {
+	background: white;
+	color: black;
+	margin: 1em;
+	font-family: "Verdana", "Tahoma", "Arial", "Helvetica", sans-serif;
+	line-height: 1.5em;
+	font-size: 76%;
+}
+
+rss:before {
+	content: "This RSS feed is meant to be read in a syndicated news reader, and isn't ideal for a web browser.";
+}
+
+feed:before {
+	content: "This Atom feed is meant to be read in a syndicated news reader, and isn't ideal for a web browser.";
+}
+rss:before, feed:before {
+	color: red;
+	text-align: center;
+	line-height: 2em;
+}
+
+channel>title,
+item>title,
+feed>title,
+entry>title {
+	font-weight: bold;
+	border-bottom: solid 1px #aaa;
+	margin-left: -0.5em;
+}
+channel>title, feed>title {
+	font-size: larger;
+}
+item>title, entry>title {
+	font-size: large;
+}
+item, entry {
+	margin-top: 1em;
+	margin-left: 2em;
+}
+
+item>description, entry>summary {
+	white-space: pre;
+	overflow: auto;
+	background: #f8f8ff;
+}
+
+pubDate:before { content: "Date: " }
+link:before { content: "Link: " }
+author:before, creator:before { content: "Author: " }
+description:before { content: "Description: " }
+id:before { content: "Id: " }
+
+generator:before { content: "Generator: " }
+language:before { content: "Language: " }
+lastBuildDate:before { content: "Updated: " }
+comments:before { content: "Comments page: " }
+
+tagline:before { content: "Tagline: " }
+issued:before { content: "Issued: " }
+created:before { content: "Created: " }
+modified:before { content: "Modified: " }
+updated:before { content: "Updated: " }
+summary:before { content: "Summary: " }
+comment:before { content: "Comment: " }
+
+pubDate:before, link:before, author:before, description:before,
+language:before, generator:before, lastBuildDate:before, comments:before,
+tagline:before, issued:before, created:before, modified:before,
+summary:before, comment:before, creator:before, id:before, updated:before {
+	color: #224;
+	font-weight: bold;
+}
+
+feed link:after {
+	content: attr(href);
+}
Index: /MediaWiki/branches/1.11/skins/common/images/arrow_first.svg
===================================================================
--- /MediaWiki/branches/1.11/skins/common/images/arrow_first.svg	(revision 1280)
+++ /MediaWiki/branches/1.11/skins/common/images/arrow_first.svg	(revision 1280)
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://web.resource.org/cc/"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="512.85712"
+   height="600"
+   id="svg2"
+   sodipodi:version="0.32"
+   inkscape:version="0.44"
+   version="1.0"
+   sodipodi:docbase="C:\htdocs\w\skins\common\images"
+   sodipodi:docname="big_arrow_first.svg"
+   inkscape:export-filename="C:\htdocs\w\skins\common\images\big_arrow_left.png"
+   inkscape:export-xdpi="5.0520902"
+   inkscape:export-ydpi="5.0520902">
+  <defs
+     id="defs4" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     gridtolerance="10000"
+     guidetolerance="10"
+     objecttolerance="10"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="0.35"
+     inkscape:cx="375"
+     inkscape:cy="520"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     width="600.24px"
+     height="600.88px"
+     inkscape:window-width="853"
+     inkscape:window-height="573"
+     inkscape:window-x="66"
+     inkscape:window-y="87" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-239.3783,-208.0743)">
+    <path
+       sodipodi:type="star"
+       style="fill:#00a;fill-opacity:1;fill-rule:evenodd;stroke:#00a;stroke-width:10.35552788;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path1874"
+       sodipodi:sides="3"
+       sodipodi:cx="94.285713"
+       sodipodi:cy="343.79074"
+       sodipodi:r1="75.484825"
+       sodipodi:r2="37.742413"
+       sodipodi:arg1="1.056345"
+       sodipodi:arg2="2.1035426"
+       inkscape:flatsided="true"
+       inkscape:rounded="0"
+       inkscape:randomized="0"
+       d="M 131.42857,409.50502 L 18.804046,343.10026 L 132.62452,278.76694 L 131.42857,409.50502 z "
+       transform="matrix(3.596688,0,0,4.278606,254.9147,-964.348)" />
+    <rect
+       style="fill:#00a;fill-opacity:1;stroke:#00a;stroke-width:39.31948471;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect3737"
+       width="20.680517"
+       height="560.68054"
+       x="259.03799"
+       y="227.73401" />
+  </g>
+</svg>
Index: /MediaWiki/branches/1.11/skins/common/images/arrow_left.svg
===================================================================
--- /MediaWiki/branches/1.11/skins/common/images/arrow_left.svg	(revision 1280)
+++ /MediaWiki/branches/1.11/skins/common/images/arrow_left.svg	(revision 1280)
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://web.resource.org/cc/"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="450"
+   height="600"
+   id="svg2"
+   sodipodi:version="0.32"
+   inkscape:version="0.44"
+   version="1.0"
+   sodipodi:docbase="C:\htdocs\w\skins\common\images"
+   sodipodi:docname="big_arrow_left.svg"
+   inkscape:export-filename="C:\htdocs\w\skins\common\images\big_arrow_left.png"
+   inkscape:export-xdpi="5.0520902"
+   inkscape:export-ydpi="5.0520902">
+  <defs
+     id="defs4" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     gridtolerance="10000"
+     guidetolerance="10"
+     objecttolerance="10"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="0.35"
+     inkscape:cx="375"
+     inkscape:cy="520"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     width="600.24px"
+     height="600.88px"
+     inkscape:window-width="853"
+     inkscape:window-height="573"
+     inkscape:window-x="66"
+     inkscape:window-y="87" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-302.2354,-208.0743)">
+    <path
+       sodipodi:type="star"
+       style="fill:#00a;fill-opacity:1;fill-rule:evenodd;stroke:#00a;stroke-width:10.35552788;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path1874"
+       sodipodi:sides="3"
+       sodipodi:cx="94.285713"
+       sodipodi:cy="343.79074"
+       sodipodi:r1="75.484825"
+       sodipodi:r2="37.742413"
+       sodipodi:arg1="1.056345"
+       sodipodi:arg2="2.1035426"
+       inkscape:flatsided="true"
+       inkscape:rounded="0"
+       inkscape:randomized="0"
+       d="M 131.42857,409.50502 L 18.804046,343.10026 L 132.62452,278.76694 L 131.42857,409.50502 z "
+       transform="matrix(3.596688,0,0,4.278606,254.9147,-964.348)" />
+  </g>
+</svg>
Index: /MediaWiki/branches/1.11/skins/common/images/icons/COPYING
===================================================================
--- /MediaWiki/branches/1.11/skins/common/images/icons/COPYING	(revision 1280)
+++ /MediaWiki/branches/1.11/skins/common/images/icons/COPYING	(revision 1280)
@@ -0,0 +1,43 @@
+The icons used here are derived from the crystalsvg icons in the the
+pics/crystalsvg/ directory of kdelibs-3.4.0 they were modified on 2005-05-15
+by Ævar Arnfjörð Bjarmason for use in MediaWiki.
+
+What follows is the contents of the LICENSE.crystalsvg file found in the pics/
+subdirectory of kdelibs-3.4.0:
+
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+This copyright and license notice covers all CrystalSVG images.
+Note the license notice contains an add-on.
+********************************************************************************
+KDE Crystal theme icons.
+Copyright (C) 2002 and following years KDE Artists
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation,
+version 2.1 of the License.
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+    **** NOTE THIS ADD-ON ****
+The GNU Lesser General Public License or LGPL is written for software libraries
+in the first place. We expressly want the LGPL to be valid for this artwork
+library too.
+KDE Crystal theme icons is a special kind of software library, it is an
+artwork library, it's elements can be used in a Graphical User Interface, or
+GUI.
+Source code, for this library means:
+ - for vectors svg;
+ - for pixels, if applicable, the multi-layered formats xcf or psd, or
+otherwise png.
+The LGPL in some sections obliges you to make the files carry
+notices. With images this is in some cases impossible or hardly useful.
+With this library a notice is placed at a prominent place in the directory
+containing the elements. You may follow this practice.
+The exception in section 6 of the GNU Lesser General Public License covers
+the use of elements of this art library in a GUI.
+kde-artists [at] kde.org
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Index: /MediaWiki/branches/1.11/skins/common/metadata.js
===================================================================
--- /MediaWiki/branches/1.11/skins/common/metadata.js	(revision 1280)
+++ /MediaWiki/branches/1.11/skins/common/metadata.js	(revision 1280)
@@ -0,0 +1,49 @@
+// Exif metadata display for MediaWiki file uploads
+//
+// Add an expand/collapse link and collapse by default if set to
+// (with JS disabled, user will see all items)
+//
+// attachMetadataToggle("mw_metadata", "More...", "Fewer...");
+
+
+function attachMetadataToggle(tableId, showText, hideText) {
+	if (document.createTextNode) {
+		var box = document.getElementById(tableId);
+		if (!box)
+			return false;
+
+		var tbody = box.getElementsByTagName('tbody')[0];
+
+		var row = document.createElement('tr');
+
+		var col = document.createElement('td');
+		col.colSpan = 2;
+
+		var link = document.createElement('a');
+		link.href = '#';
+
+		link.onclick = function() {
+			if (box.className == 'mw_metadata collapsed') {
+				changeText(link, hideText);
+				box.className = 'mw_metadata expanded';
+			} else {
+				changeText(link, showText);
+				box.className = 'mw_metadata collapsed';
+			}
+			return false;
+		}
+
+		var text = document.createTextNode(hideText);
+
+		link.appendChild(text);
+		col.appendChild(link);
+		row.appendChild(col);
+		tbody.appendChild(row);
+
+		// And collapse!
+		link.onclick();
+
+		return true;
+	}
+	return false;
+}
Index: /MediaWiki/branches/1.11/skins/common/nostalgia.css
===================================================================
--- /MediaWiki/branches/1.11/skins/common/nostalgia.css	(revision 1280)
+++ /MediaWiki/branches/1.11/skins/common/nostalgia.css	(revision 1280)
@@ -0,0 +1,17 @@
+body {
+	/* Background color is set separately on page type */
+	color: black;
+}
+#specialform { display: inline; }
+#powersearch {
+  background: #DDEEFF; border-style: solid; border-width: 1px; padding: 2px;
+}
+a.interwiki, a.external { color: #3366BB; }
+a.printable { text-decoration: underline; }
+a.stub { color:#772233; text-decoration:none; }
+h1.pagetitle { padding-top: 0; margin-top: 0; padding-bottom: 0; margin-bottom: 0; }
+h2, h3, h4, h5, h6 { margin-bottom: 0; }
+textarea { overflow: auto; }
+p.subtitle { padding-top: 0; margin-top: 0; }
+
+
Index: /MediaWiki/branches/1.11/skins/common/preview.js
===================================================================
--- /MediaWiki/branches/1.11/skins/common/preview.js	(revision 1280)
+++ /MediaWiki/branches/1.11/skins/common/preview.js	(revision 1280)
@@ -0,0 +1,122 @@
+// Live preview
+
+function openXMLHttpRequest() {
+	if( window.XMLHttpRequest ) {
+		return new XMLHttpRequest();
+	} else if( window.ActiveXObject && navigator.platform != 'MacPPC' ) {
+		// IE/Mac has an ActiveXObject but it doesn't work.
+		return new ActiveXObject("Microsoft.XMLHTTP");
+	} else {
+		return null;
+	}
+}
+
+/**
+ * Returns true if could open the request,
+ * false otherwise (eg no browser support).
+ */
+function livePreview(target, text, postUrl) {
+	prevTarget = target;
+	if( !target ) {
+		window.alert(i18n(wgLivepreviewMessageFailed));
+		showFallback();
+	}
+	prevReq = openXMLHttpRequest();
+	if( !prevReq ) return false;
+
+	prevReq.onreadystatechange = updatePreviewText;
+	prevReq.open("POST", postUrl, true);
+
+	var postData = 'wpTextbox1=' + encodeURIComponent(text);
+	prevReq.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
+	prevReq.send(postData);
+	return true;
+}
+
+function updatePreviewText() {
+
+	if (prevReq.readyState > 0 && prevReq.readyState < 4) {
+		notify(i18n(wgLivepreviewMessageLoading));
+	}
+
+	if(prevReq.readyState != 4) {
+		return;
+	}
+
+	dismissNotify(i18n(wgLivepreviewMessageReady), 750);
+
+	if( prevReq.status != 200 ) {
+		var keys = new Array();
+		keys[0] = prevReq.status;
+		keys[1] = prevReq.statusText;
+		window.alert(i18n(wgLivepreviewMessageError, keys));
+		showFallback();
+		return;
+	}
+
+	var xmlObject = prevReq.responseXML.documentElement;
+	var previewElement = xmlObject.getElementsByTagName('preview')[0];
+	prevTarget.innerHTML = previewElement.firstChild.data;
+
+	/* Hide the active diff if it exists */
+	var diff = document.getElementById('wikiDiff');
+	if ( diff ) { diff.style.display = 'none'; }
+}
+
+function showFallback() {
+	var fallback = document.getElementById('wpPreview');
+	if ( fallback ) { fallback.style.display = 'inline'; }
+}
+
+
+// TODO: move elsewhere
+/* Small non-intrusive popup which can be used for example to notify the user
+ * about completed AJAX action
+ */
+function notify(message) {
+	var notifyElement = document.getElementById('mw-js-notify');
+	if ( !notifyElement ) {
+		createNotify();
+		var notifyElement = document.getElementById('mw-js-notify');
+	}
+	notifyElement.style.display = 'block';
+	notifyElement.innerHTML = message;
+}
+
+function dismissNotify(message, timeout) {
+	var notifyElement = document.getElementById('mw-js-notify');
+	if ( notifyElement ) {
+		if ( timeout == 0 ) {
+			notifyElement.style.display = 'none';
+		} else {
+			notify(message);
+			setTimeout("dismissNotify('', 0)", timeout);
+		}
+	}
+}
+
+function createNotify() {
+	var div = document.createElement("div");
+	var txt = '###PLACEHOLDER###'
+	var txtNode = document.createTextNode(txt);
+	div.appendChild(txtNode);
+	div.id = 'mw-js-notify';
+	// TODO: move styles to css
+	div.setAttribute('style',
+		'display: none; position: fixed; bottom: 0px; right: 0px; color: white; background-color: DarkRed; z-index: 5; padding: 0.1em 1em 0.1em 1em; font-size: 120%;');
+	var body = document.getElementsByTagName('body')[0];
+	body.appendChild(div);
+}
+
+
+
+/* Helper function similar to wfMsgReplaceArgs() */
+function i18n(message, keys) {
+	var localMessage = message;
+	if ( !keys ) { return localMessage; }
+	for( var i = 0; i < keys.length; i++) {
+		var myregexp = new RegExp("\\$"+(i+1), 'g');
+		localMessage = localMessage.replace(myregexp, keys[i]);
+	}
+	return localMessage;
+}
Index: /MediaWiki/branches/1.11/skins/common/protect.js
===================================================================
--- /MediaWiki/branches/1.11/skins/common/protect.js	(revision 1280)
+++ /MediaWiki/branches/1.11/skins/common/protect.js	(revision 1280)
@@ -0,0 +1,158 @@
+function protectInitialize(tableId, labelText) {
+	if (document.createTextNode) {
+		var box = document.getElementById(tableId);
+		if (!box)
+			return false;
+
+		var tbody = box.getElementsByTagName('tbody')[0];
+		var row = document.createElement('tr');
+		tbody.appendChild(row);
+
+		row.appendChild(document.createElement('td'));
+		var col2 = document.createElement('td');
+		row.appendChild(col2);
+
+		var check = document.createElement('input');
+		check.id = "mwProtectUnchained";
+		check.type = "checkbox";
+		check.onclick = protectChainUpdate;
+		col2.appendChild(check);
+
+		var space = document.createTextNode(" ");
+		col2.appendChild(space);
+
+		var label = document.createElement('label');
+		label.setAttribute("for", "mwProtectUnchained");
+		label.appendChild(document.createTextNode(labelText));
+		col2.appendChild(label);
+
+		if (protectAllMatch()) {
+			check.checked = false;
+			protectEnable(false);
+		} else {
+			check.checked = true;
+			protectEnable(true);
+		}
+		
+		allowCascade();
+
+		return true;
+	}
+	return false;
+}
+
+function allowCascade() {
+	var pr_types = document.getElementsByTagName("select");
+	for (var i = 0; i < pr_types.length; i++) {
+		if (pr_types[i].id.match(/^mwProtect-level-/)) {
+			var selected_level = pr_types[i].getElementsByTagName("option")[pr_types[i].selectedIndex].value;
+			if ( !isCascadeableLevel(selected_level) ) {
+				document.getElementById('mwProtect-cascade').checked=false;
+				document.getElementById('mwProtect-cascade').disabled=true;
+				return false;
+			}
+		}
+	}
+	document.getElementById('mwProtect-cascade').disabled=false;
+	return true;
+}
+
+function isCascadeableLevel( level ) {
+	for (var k = 0; k < wgCascadeableLevels.length; k++) {
+		if ( wgCascadeableLevels[k] == level ) {
+			return true;
+		}
+	}
+	return false;
+}
+
+function protectLevelsUpdate(source) {
+	if (!protectUnchained()) {
+		protectUpdateAll(source.selectedIndex);
+	}
+	allowCascade();
+}
+
+function protectChainUpdate() {
+	if (protectUnchained()) {
+		protectEnable(true);
+	} else {
+		protectChain();
+		protectEnable(false);
+	}
+	allowCascade();
+}
+
+
+function protectAllMatch() {
+	var values = new Array();
+	protectForSelectors(function(set) {
+		values[values.length] = set.selectedIndex;
+	});
+	for (var i = 1; i < values.length; i++) {
+		if (values[i] != values[0]) {
+			return false;
+		}
+	}
+	return true;
+}
+
+function protectUnchained() {
+	var unchain = document.getElementById("mwProtectUnchained");
+	if (!unchain) {
+		alert("This shouldn't happen");
+		return false;
+	}
+	return unchain.checked;
+}
+
+function protectChain() {
+	// Find the highest-protected action and bump them all to this level
+	var maxIndex = -1;
+	protectForSelectors(function(set) {
+		if (set.selectedIndex > maxIndex) {
+			maxIndex = set.selectedIndex;
+		}
+	});
+	protectUpdateAll(maxIndex);
+}
+
+function protectUpdateAll(index) {
+	protectForSelectors(function(set) {
+		if (set.selectedIndex != index) {
+			set.selectedIndex = index;
+		}
+	});
+}
+
+function protectForSelectors(func) {
+	var selectors = protectSelectors();
+	for (var i = 0; i < selectors.length; i++) {
+		func(selectors[i]);
+	}
+}
+
+function protectSelectors() {
+	var all = document.getElementsByTagName("select");
+	var ours = new Array();
+	for (var i = 0; i < all.length; i++) {
+		var set = all[i];
+		if (set.id.match(/^mwProtect-level-/)) {
+			ours[ours.length] = set;
+		}
+	}
+	return ours;
+}
+
+function protectEnable(val) {
+	// fixme
+	var first = true;
+	protectForSelectors(function(set) {
+		if (first) {
+			first = false;
+		} else {
+			set.disabled = !val;
+			set.style.visible = val ? "visible" : "hidden";
+		}
+	});
+}
Index: /MediaWiki/branches/1.11/skins/common/quickbar-right.css
===================================================================
--- /MediaWiki/branches/1.11/skins/common/quickbar-right.css	(revision 1280)
+++ /MediaWiki/branches/1.11/skins/common/quickbar-right.css	(revision 1280)
@@ -0,0 +1,1 @@
+#quickbar { position: fixed; right: 0px; top: 0px; padding: 4px;}
Index: /MediaWiki/branches/1.11/skins/common/quickbar.css
===================================================================
--- /MediaWiki/branches/1.11/skins/common/quickbar.css	(revision 1280)
+++ /MediaWiki/branches/1.11/skins/common/quickbar.css	(revision 1280)
@@ -0,0 +1,1 @@
+#quickbar { position: fixed; padding: 4px; }
Index: /MediaWiki/branches/1.11/skins/common/sticky.js
===================================================================
--- /MediaWiki/branches/1.11/skins/common/sticky.js	(revision 1280)
+++ /MediaWiki/branches/1.11/skins/common/sticky.js	(revision 1280)
@@ -0,0 +1,124 @@
+// Make a layer that stays in the same place on screen when scrolling the browser window.
+// Version 1.2
+// See http://www.mark.ac/help for browser support.
+
+var mySticky;
+var theLayer;
+
+// Setup variables for sliding.
+// lastY and staticYOffset should match your CSS top definition.
+
+lastY=10;YOffset=0;staticYOffset=10;refreshMS=25;
+
+
+// Setup function that runs when the page loads.
+	function setup(eID){
+		bw=new checkBrowser;
+		if(bw.ns4||bw.opera){MM_reloadPage(true);}
+		var noFix=bw.ie4||bw.ns4||(bw.macie50)?true:false;
+		if (window.attachEvent){fix_bind()}
+		else if(noFix){	
+			if(bw.ns6){document.getElementById(eID).style.position="absolute";}
+			if(bw.macie50){document.getElementById(eID).style.position="absolute";document.getElementById(eID).style.backgroundColor="#ccffcc";}
+			if(bw.ns6&&YOffset==0){YOffset=-15}
+			mySticky=new makeLayerObj(eID);
+			layerSlide(eID)}
+		else{
+			mySticky=new makeLayerObj(eID);
+			mySticky.css.position="fixed";}
+
+		if(!mySticky){mySticky=new makeLayerObj(eID);}
+		//mySticky.css.visibility="visible";
+	}
+
+
+// -------------------------
+// emulate css 'position: fixed' in IE5+ Win
+// code by aclover@1value.com
+	fix_elements = new Array();
+
+	function fix_event(){
+		var i;
+		for (i=0; i < fix_elements.length; i++){
+			fix_elements[i].style.left = parseInt(fix_elements[i].fix_left)+document.getElementsByTagName('html')[0].scrollLeft+document.getElementsByTagName('body')[0].scrollLeft+'px';
+			fix_elements[i].style.top = parseInt(fix_elements[i].fix_top)+document.getElementsByTagName('html')[0].scrollTop+document.getElementsByTagName('body')[0].scrollTop+'px';
+		}
+	}
+
+	function fix_bind(){
+		var i;
+		for (i=0; i < document.all.length; i++){
+			if (document.all[i].currentStyle.position=='fixed'){
+				document.all[i].fix_left = document.all[i].currentStyle.left;
+				document.all[i].fix_top = document.all[i].currentStyle.top;
+				document.all[i].style.position = 'absolute';
+				fix_elements[fix_elements.length] = document.all[i];
+				window.attachEvent('onscroll', fix_event);
+				window.attachEvent('onresize', fix_event);
+			} 
+		}
+	}
+// -------------------------
+
+
+// -------------------------
+// DHTML menu sliding. Requires checkBrowser()
+// Based on source at http://www.simplythebest.net/
+	function layerSlide(layerID) {
+		if(bw.dhtml){
+			if(!mySticky){mySticky=new makeLayerObj(layerID);}
+			if (bw.ns) {winY = window.pageYOffset;}
+			else if (bw.ie) {winY = document.body.scrollTop;}
+			if (bw.ie||bw.ns) {
+				if (winY!=lastY&&winY>YOffset-staticYOffset){smooth = .3 * (winY - lastY - YOffset + staticYOffset);}
+				else if (YOffset-staticYOffset+lastY>YOffset-staticYOffset){smooth = .3 * (winY - lastY - (YOffset-(YOffset-winY)));}
+				else{smooth=0}
+				if(smooth > 0) {smooth = Math.ceil(smooth);}
+				else{smooth = Math.floor(smooth);}
+				if (bw.ie){mySticky.css.pixelTop+=smooth;}
+				else if (bw.ns){mySticky.css.top=parseInt(mySticky.css.top)+smooth;}
+				lastY = lastY+smooth;
+				top.window.status=new Date()
+				setTimeout('layerSlide("'+layerID+'")', refreshMS)}}}
+// -------------------------
+
+// Netscape 4.x browser resize fix
+	function MM_reloadPage(init) {
+  	if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {
+    	document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; top.onresize=MM_reloadPage; }}
+  	else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) {location.reload();}}
+
+// Create browser-independent layer and browser objects
+	function makeLayerObj(eID){
+		if(document.getElementById){this.css=document.getElementById(eID).style}
+		else if(document.layers){this.css=document.layers[eID];}
+		else if(document.all){this.css=document.all[eID].style;}
+		return this
+	}
+
+	function checkBrowser(){
+		this.ver=navigator.appVersion;
+		this.name=navigator.appName;
+		this.mac=(navigator.platform.toLowerCase().indexOf('mac')>-1)?true:false;
+		this.opera=(navigator.userAgent.toLowerCase().indexOf('opera')>-1)?true:false;
+		this.dom=document.getElementById?true:false;
+		this.ns=(this.name=='Netscape');
+		this.ie4=(document.all && !this.dom)?true:false;
+		this.ie=(this.name =='Microsoft Internet Explorer'&&!this.opera)?true:false;
+		this.ie5=(this.ie && (navigator.userAgent.indexOf("MSIE 5")!=-1))?true:false;
+		this.macie50=(this.mac&&this.ie5&&(navigator.userAgent.indexOf("MSIE 5.0")!=-1))?true:false
+		this.ns4=(this.ns && parseInt(this.ver) == 4)?true:false;
+		this.ns6=((this.name=="Netscape")&&(parseInt(this.ver)==5))?true:false
+		this.standards=document.getElementById?true:false;
+		this.dhtml=this.standards||this.ie4||this.ns4;
+	}
+
+	function showMe(eID){
+		myFloater=new makeLayerObj(eID)
+		myFloater.css.visibility="visible";
+	}
+
+	function hideMe(eID){
+		myFloater=new makeLayerObj(eID)
+		myFloater.css.visibility="hidden";
+	}
Index: /MediaWiki/branches/1.11/skins/common/upload.js
===================================================================
--- /MediaWiki/branches/1.11/skins/common/upload.js	(revision 1280)
+++ /MediaWiki/branches/1.11/skins/common/upload.js	(revision 1280)
@@ -0,0 +1,23 @@
+function licenseSelectorCheck() {
+	var selector = document.getElementById("wpLicense");
+	if (selector.selectedIndex > 0 &&
+		selector.options[selector.selectedIndex].value == "" ) {
+		// Browser is broken, doesn't respect disabled attribute on <option>
+		selector.selectedIndex = 0;
+	}
+}
+
+function licenseSelectorFixup() {
+	// for MSIE/Mac; non-breaking spaces cause the <option> not to render
+	// but, for some reason, setting the text to itself works
+	var selector = document.getElementById("wpLicense");
+	var ua = navigator.userAgent;
+	var isMacIe = (ua.indexOf("MSIE") != -1) && (ua.indexOf("Mac") != -1);
+	if (isMacIe) {
+		for (var i = 0; i < selector.options.length; i++) {
+			selector.options[i].text = selector.options[i].text;
+		}
+	}
+}
+
+addOnloadHook(licenseSelectorFixup);
Index: /MediaWiki/branches/1.11/skins/common/wikibits.js
===================================================================
--- /MediaWiki/branches/1.11/skins/common/wikibits.js	(revision 1280)
+++ /MediaWiki/branches/1.11/skins/common/wikibits.js	(revision 1280)
@@ -0,0 +1,1246 @@
+// MediaWiki JavaScript support functions
+
+var clientPC = navigator.userAgent.toLowerCase(); // Get client info
+var is_gecko = ((clientPC.indexOf('gecko')!=-1) && (clientPC.indexOf('spoofer')==-1)
+                && (clientPC.indexOf('khtml') == -1) && (clientPC.indexOf('netscape/7.0')==-1));
+var is_safari = ((clientPC.indexOf('applewebkit')!=-1) && (clientPC.indexOf('spoofer')==-1));
+var is_khtml = (navigator.vendor == 'KDE' || ( document.childNodes && !document.all && !navigator.taintEnabled ));
+// For accesskeys
+var is_ff2_win = (clientPC.indexOf('firefox/2')!=-1 || clientPC.indexOf('minefield/3')!=-1) && clientPC.indexOf('windows')!=-1;
+var is_ff2_x11 = (clientPC.indexOf('firefox/2')!=-1 || clientPC.indexOf('minefield/3')!=-1) && clientPC.indexOf('x11')!=-1;
+if (clientPC.indexOf('opera') != -1) {
+	var is_opera = true;
+	var is_opera_preseven = (window.opera && !document.childNodes);
+	var is_opera_seven = (window.opera && document.childNodes);
+}
+
+// Global external objects used by this script.
+/*extern ta, stylepath, skin */
+
+// add any onload functions in this hook (please don't hard-code any events in the xhtml source)
+var doneOnloadHook;
+
+if (!window.onloadFuncts) {
+	var onloadFuncts = [];
+}
+
+function addOnloadHook(hookFunct) {
+	// Allows add-on scripts to add onload functions
+	onloadFuncts[onloadFuncts.length] = hookFunct;
+}
+
+function hookEvent(hookName, hookFunct) {
+	if (window.addEventListener) {
+		window.addEventListener(hookName, hookFunct, false);
+	} else if (window.attachEvent) {
+		window.attachEvent("on" + hookName, hookFunct);
+	}
+}
+
+// document.write special stylesheet links
+if (typeof stylepath != 'undefined' && typeof skin != 'undefined') {
+	if (is_opera_preseven) {
+		document.write('<link rel="stylesheet" type="text/css" href="'+stylepath+'/'+skin+'/Opera6Fixes.css">');
+	} else if (is_opera_seven) {
+		document.write('<link rel="stylesheet" type="text/css" href="'+stylepath+'/'+skin+'/Opera7Fixes.css">');
+	} else if (is_khtml) {
+		document.write('<link rel="stylesheet" type="text/css" href="'+stylepath+'/'+skin+'/KHTMLFixes.css">');
+	}
+}
+
+if (wgBreakFrames) {
+	// Un-trap us from framesets
+	if (window.top != window) {
+		window.top.location = window.location;
+	}
+}
+
+// for enhanced RecentChanges
+function toggleVisibility(_levelId, _otherId, _linkId) {
+	var thisLevel = document.getElementById(_levelId);
+	var otherLevel = document.getElementById(_otherId);
+	var linkLevel = document.getElementById(_linkId);
+	if (thisLevel.style.display == 'none') {
+		thisLevel.style.display = 'block';
+		otherLevel.style.display = 'none';
+		linkLevel.style.display = 'inline';
+	} else {
+		thisLevel.style.display = 'none';
+		otherLevel.style.display = 'inline';
+		linkLevel.style.display = 'none';
+	}
+}
+
+function historyRadios(parent) {
+	var inputs = parent.getElementsByTagName('input');
+	var radios = [];
+	for (var i = 0; i < inputs.length; i++) {
+		if (inputs[i].name == "diff" || inputs[i].name == "oldid") {
+			radios[radios.length] = inputs[i];
+		}
+	}
+	return radios;
+}
+
+// check selection and tweak visibility/class onclick
+function diffcheck() {
+	var dli = false; // the li where the diff radio is checked
+	var oli = false; // the li where the oldid radio is checked
+	var hf = document.getElementById('pagehistory');
+	if (!hf) {
+		return true;
+	}
+	var lis = hf.getElementsByTagName('li');
+	for (var i=0;i<lis.length;i++) {
+		var inputs = historyRadios(lis[i]);
+		if (inputs[1] && inputs[0]) {
+			if (inputs[1].checked || inputs[0].checked) { // this row has a checked radio button
+				if (inputs[1].checked && inputs[0].checked && inputs[0].value == inputs[1].value) {
+					return false;
+				}
+				if (oli) { // it's the second checked radio
+					if (inputs[1].checked) {
+						oli.className = "selected";
+						return false;
+					}
+				} else if (inputs[0].checked) {
+					return false;
+				}
+				if (inputs[0].checked) {
+					dli = lis[i];
+				}
+				if (!oli) {
+					inputs[0].style.visibility = 'hidden';
+				}
+				if (dli) {
+					inputs[1].style.visibility = 'hidden';
+				}
+				lis[i].className = "selected";
+				oli = lis[i];
+			}  else { // no radio is checked in this row
+				if (!oli) {
+					inputs[0].style.visibility = 'hidden';
+				} else {
+					inputs[0].style.visibility = 'visible';
+				}
+				if (dli) {
+					inputs[1].style.visibility = 'hidden';
+				} else {
+					inputs[1].style.visibility = 'visible';
+				}
+				lis[i].className = "";
+			}
+		}
+	}
+	return true;
+}
+
+// page history stuff
+// attach event handlers to the input elements on history page
+function histrowinit() {
+	var hf = document.getElementById('pagehistory');
+	if (!hf) {
+		return;
+	}
+	var lis = hf.getElementsByTagName('li');
+	for (var i = 0; i < lis.length; i++) {
+		var inputs = historyRadios(lis[i]);
+		if (inputs[0] && inputs[1]) {
+			inputs[0].onclick = diffcheck;
+			inputs[1].onclick = diffcheck;
+		}
+	}
+	diffcheck();
+}
+
+// generate toc from prefs form, fold sections
+// XXX: needs testing on IE/Mac and safari
+// more comments to follow
+function tabbedprefs() {
+	var prefform = document.getElementById('preferences');
+	if (!prefform || !document.createElement) {
+		return;
+	}
+	if (prefform.nodeName.toLowerCase() == 'a') {
+		return; // Occasional IE problem
+	}
+	prefform.className = prefform.className + 'jsprefs';
+	var sections = [];
+	var children = prefform.childNodes;
+	var seci = 0;
+	for (var i = 0; i < children.length; i++) {
+		if (children[i].nodeName.toLowerCase() == 'fieldset') {
+			children[i].id = 'prefsection-' + seci;
+			children[i].className = 'prefsection';
+			if (is_opera || is_khtml) {
+				children[i].className = 'prefsection operaprefsection';
+			}
+			var legends = children[i].getElementsByTagName('legend');
+			sections[seci] = {};
+			legends[0].className = 'mainLegend';
+			if (legends[0] && legends[0].firstChild.nodeValue) {
+				sections[seci].text = legends[0].firstChild.nodeValue;
+			} else {
+				sections[seci].text = '# ' + seci;
+			}
+			sections[seci].secid = children[i].id;
+			seci++;
+			if (sections.length != 1) {
+				children[i].style.display = 'none';
+			} else {
+				var selectedid = children[i].id;
+			}
+		}
+	}
+	var toc = document.createElement('ul');
+	toc.id = 'preftoc';
+	toc.selectedid = selectedid;
+	for (i = 0; i < sections.length; i++) {
+		var li = document.createElement('li');
+		if (i === 0) {
+			li.className = 'selected';
+		}
+		var a = document.createElement('a');
+		a.href = '#' + sections[i].secid;
+		a.onmousedown = a.onclick = uncoversection;
+		a.appendChild(document.createTextNode(sections[i].text));
+		a.secid = sections[i].secid;
+		li.appendChild(a);
+		toc.appendChild(li);
+	}
+	prefform.parentNode.insertBefore(toc, prefform.parentNode.childNodes[0]);
+	document.getElementById('prefsubmit').id = 'prefcontrol';
+}
+
+function uncoversection() {
+	var oldsecid = this.parentNode.parentNode.selectedid;
+	var newsec = document.getElementById(this.secid);
+	if (oldsecid != this.secid) {
+		var ul = document.getElementById('preftoc');
+		document.getElementById(oldsecid).style.display = 'none';
+		newsec.style.display = 'block';
+		ul.selectedid = this.secid;
+		var lis = ul.getElementsByTagName('li');
+		for (var i = 0; i< lis.length; i++) {
+			lis[i].className = '';
+		}
+		this.parentNode.className = 'selected';
+	}
+	return false;
+}
+
+// Timezone stuff
+// tz in format [+-]HHMM
+function checkTimezone(tz, msg) {
+	var localclock = new Date();
+	// returns negative offset from GMT in minutes
+	var tzRaw = localclock.getTimezoneOffset();
+	var tzHour = Math.floor( Math.abs(tzRaw) / 60);
+	var tzMin = Math.abs(tzRaw) % 60;
+	var tzString = ((tzRaw >= 0) ? "-" : "+") + ((tzHour < 10) ? "0" : "") + tzHour + ((tzMin < 10) ? "0" : "") + tzMin;
+	if (tz != tzString) {
+		var junk = msg.split('$1');
+		document.write(junk[0] + "UTC" + tzString + junk[1]);
+	}
+}
+
+function unhidetzbutton() {
+	var tzb = document.getElementById('guesstimezonebutton');
+	if (tzb) {
+		tzb.style.display = 'inline';
+	}
+}
+
+// in [-]HH:MM format...
+// won't yet work with non-even tzs
+function fetchTimezone() {
+	// FIXME: work around Safari bug
+	var localclock = new Date();
+	// returns negative offset from GMT in minutes
+	var tzRaw = localclock.getTimezoneOffset();
+	var tzHour = Math.floor( Math.abs(tzRaw) / 60);
+	var tzMin = Math.abs(tzRaw) % 60;
+	var tzString = ((tzRaw >= 0) ? "-" : "") + ((tzHour < 10) ? "0" : "") + tzHour +
+		":" + ((tzMin < 10) ? "0" : "") + tzMin;
+	return tzString;
+}
+
+function guessTimezone(box) {
+	document.getElementsByName("wpHourDiff")[0].value = fetchTimezone();
+}
+
+function showTocToggle() {
+	if (document.createTextNode) {
+		// Uses DOM calls to avoid document.write + XHTML issues
+
+		var linkHolder = document.getElementById('toctitle');
+		if (!linkHolder) {
+			return;
+		}
+
+		var outerSpan = document.createElement('span');
+		outerSpan.className = 'toctoggle';
+
+		var toggleLink = document.createElement('a');
+		toggleLink.id = 'togglelink';
+		toggleLink.className = 'internal';
+		toggleLink.href = 'javascript:toggleToc()';
+		toggleLink.appendChild(document.createTextNode(tocHideText));
+
+		outerSpan.appendChild(document.createTextNode('['));
+		outerSpan.appendChild(toggleLink);
+		outerSpan.appendChild(document.createTextNode(']'));
+
+		linkHolder.appendChild(document.createTextNode(' '));
+		linkHolder.appendChild(outerSpan);
+
+		var cookiePos = document.cookie.indexOf("hidetoc=");
+		if (cookiePos > -1 && document.cookie.charAt(cookiePos + 8) == 1) {
+			toggleToc();
+		}
+	}
+}
+
+function changeText(el, newText) {
+	// Safari work around
+	if (el.innerText) {
+		el.innerText = newText;
+	} else if (el.firstChild && el.firstChild.nodeValue) {
+		el.firstChild.nodeValue = newText;
+	}
+}
+
+function toggleToc() {
+	var toc = document.getElementById('toc').getElementsByTagName('ul')[0];
+	var toggleLink = document.getElementById('togglelink');
+
+	if (toc && toggleLink && toc.style.display == 'none') {
+		changeText(toggleLink, tocHideText);
+		toc.style.display = 'block';
+		document.cookie = "hidetoc=0";
+	} else {
+		changeText(toggleLink, tocShowText);
+		toc.style.display = 'none';
+		document.cookie = "hidetoc=1";
+	}
+}
+
+var mwEditButtons = [];
+var mwCustomEditButtons = []; // eg to add in MediaWiki:Common.js
+
+// this function generates the actual toolbar buttons with localized text
+// we use it to avoid creating the toolbar where javascript is not enabled
+function addButton(imageFile, speedTip, tagOpen, tagClose, sampleText, imageId) {
+	// Don't generate buttons for browsers which don't fully
+	// support it.
+	mwEditButtons[mwEditButtons.length] =
+		{"imageId": imageId,
+		 "imageFile": imageFile,
+		 "speedTip": speedTip,
+		 "tagOpen": tagOpen,
+		 "tagClose": tagClose,
+		 "sampleText": sampleText};
+}
+
+// this function generates the actual toolbar buttons with localized text
+// we use it to avoid creating the toolbar where javascript is not enabled
+function mwInsertEditButton(parent, item) {
+	var image = document.createElement("img");
+	image.width = 23;
+	image.height = 22;
+	image.className = "mw-toolbar-editbutton";
+	if (item.imageId) image.id = item.imageId;
+	image.src = item.imageFile;
+	image.border = 0;
+	image.alt = item.speedTip;
+	image.title = item.speedTip;
+	image.style.cursor = "pointer";
+	image.onclick = function() {
+		insertTags(item.tagOpen, item.tagClose, item.sampleText);
+		return false;
+	};
+
+	parent.appendChild(image);
+	return true;
+}
+
+function mwSetupToolbar() {
+	var toolbar = document.getElementById('toolbar');
+	if (!toolbar) { return false; }
+
+	var textbox = document.getElementById('wpTextbox1');
+	if (!textbox) { return false; }
+
+	// Don't generate buttons for browsers which don't fully
+	// support it.
+	if (!document.selection && textbox.selectionStart === null) {
+		return false;
+	}
+
+	for (var i = 0; i < mwEditButtons.length; i++) {
+		mwInsertEditButton(toolbar, mwEditButtons[i]);
+	}
+	for (var i = 0; i < mwCustomEditButtons.length; i++) {
+		mwInsertEditButton(toolbar, mwCustomEditButtons[i]);
+	}
+	return true;
+}
+
+function escapeQuotes(text) {
+	var re = new RegExp("'","g");
+	text = text.replace(re,"\\'");
+	re = new RegExp("\\n","g");
+	text = text.replace(re,"\\n");
+	return escapeQuotesHTML(text);
+}
+
+function escapeQuotesHTML(text) {
+	var re = new RegExp('&',"g");
+	text = text.replace(re,"&amp;");
+	re = new RegExp('"',"g");
+	text = text.replace(re,"&quot;");
+	re = new RegExp('<',"g");
+	text = text.replace(re,"&lt;");
+	re = new RegExp('>',"g");
+	text = text.replace(re,"&gt;");
+	return text;
+}
+
+// apply tagOpen/tagClose to selection in textarea,
+// use sampleText instead of selection if there is none
+// copied and adapted from phpBB
+function insertTags(tagOpen, tagClose, sampleText) {
+	var txtarea;
+	if (document.editform) {
+		txtarea = document.editform.wpTextbox1;
+	} else {
+		// some alternate form? take the first one we can find
+		var areas = document.getElementsByTagName('textarea');
+		txtarea = areas[0];
+	}
+
+	// IE
+	if (document.selection  && !is_gecko) {
+		var theSelection = document.selection.createRange().text;
+		if (!theSelection) {
+			theSelection=sampleText;
+		}
+		txtarea.focus();
+		if (theSelection.charAt(theSelection.length - 1) == " ") { // exclude ending space char, if any
+			theSelection = theSelection.substring(0, theSelection.length - 1);
+			document.selection.createRange().text = tagOpen + theSelection + tagClose + " ";
+		} else {
+			document.selection.createRange().text = tagOpen + theSelection + tagClose;
+		}
+
+	// Mozilla
+	} else if(txtarea.selectionStart || txtarea.selectionStart == '0') {
+		var replaced = false;
+		var startPos = txtarea.selectionStart;
+		var endPos = txtarea.selectionEnd;
+		if (endPos-startPos) {
+			replaced = true;
+		}
+		var scrollTop = txtarea.scrollTop;
+		var myText = (txtarea.value).substring(startPos, endPos);
+		if (!myText) {
+			myText=sampleText;
+		}
+		var subst;
+		if (myText.charAt(myText.length - 1) == " ") { // exclude ending space char, if any
+			subst = tagOpen + myText.substring(0, (myText.length - 1)) + tagClose + " ";
+		} else {
+			subst = tagOpen + myText + tagClose;
+		}
+		txtarea.value = txtarea.value.substring(0, startPos) + subst +
+			txtarea.value.substring(endPos, txtarea.value.length);
+		txtarea.focus();
+		//set new selection
+		if (replaced) {
+			var cPos = startPos+(tagOpen.length+myText.length+tagClose.length);
+			txtarea.selectionStart = cPos;
+			txtarea.selectionEnd = cPos;
+		} else {
+			txtarea.selectionStart = startPos+tagOpen.length;
+			txtarea.selectionEnd = startPos+tagOpen.length+myText.length;
+		}
+		txtarea.scrollTop = scrollTop;
+
+	// All other browsers get no toolbar.
+	// There was previously support for a crippled "help"
+	// bar, but that caused more problems than it solved.
+	}
+	// reposition cursor if possible
+	if (txtarea.createTextRange) {
+		txtarea.caretPos = document.selection.createRange().duplicate();
+	}
+}
+
+
+/**
+ * Set the accesskey prefix based on browser detection.
+ */
+var tooltipAccessKeyPrefix = 'alt-';
+if (is_opera) {
+	tooltipAccessKeyPrefix = 'shift-esc-';
+} else if (is_safari
+	   || navigator.userAgent.toLowerCase().indexOf('mac') != -1
+	   || navigator.userAgent.toLowerCase().indexOf('konqueror') != -1 ) {
+	tooltipAccessKeyPrefix = 'ctrl-';
+} else if (is_ff2_x11 || is_ff2_win) {
+	tooltipAccessKeyPrefix = 'alt-shift-';
+}
+var tooltipAccessKeyRegexp = /\[(ctrl-)?(alt-)?(shift-)?(esc-)?.\]$/;
+
+/**
+ * Add the appropriate prefix to the accesskey shown in the tooltip.
+ * If the nodeList parameter is given, only those nodes are updated;
+ * otherwise, all the nodes that will probably have accesskeys by
+ * default are updated.
+ *
+ * @param Array nodeList -- list of elements to update
+ */
+function updateTooltipAccessKeys( nodeList ) {
+	if ( !nodeList ) {
+		// skins without a "column-one" element don't seem to have links with accesskeys either
+		var columnOne = document.getElementById("column-one");
+		if ( columnOne )
+			updateTooltipAccessKeys( columnOne.getElementsByTagName("a") );
+		// these are rare enough that no such optimization is needed
+		updateTooltipAccessKeys( document.getElementsByTagName("input") );
+		updateTooltipAccessKeys( document.getElementsByTagName("label") );
+		return;
+	}
+
+	for ( var i = 0; i < nodeList.length; i++ ) {
+		var element = nodeList[i];
+		var tip = element.getAttribute("title");
+		var key = element.getAttribute("accesskey");
+		if ( key && tooltipAccessKeyRegexp.exec(tip) ) {
+			tip = tip.replace(tooltipAccessKeyRegexp,
+					  "["+tooltipAccessKeyPrefix+key+"]");
+			element.setAttribute("title", tip );
+		}
+	}
+}
+
+/**
+ * Add a link to one of the portlet menus on the page, including:
+ *
+ * p-cactions: Content actions (shown as tabs above the main content in Monobook)
+ * p-personal: Personal tools (shown at the top right of the page in Monobook)
+ * p-navigation: Navigation
+ * p-tb: Toolbox
+ *
+ * This function exists for the convenience of custom JS authors.  All
+ * but the first three parameters are optional, though providing at
+ * least an id and a tooltip is recommended.
+ *
+ * By default the new link will be added to the end of the list.  To
+ * add the link before a given existing item, pass the DOM node of
+ * that item (easily obtained with document.getElementById()) as the
+ * nextnode parameter; to add the link _after_ an existing item, pass
+ * the node's nextSibling instead.
+ *
+ * @param String portlet -- id of the target portlet ("p-cactions", "p-personal", "p-navigation" or "p-tb")
+ * @param String href -- link URL
+ * @param String text -- link text (will be automatically lowercased by CSS for p-cactions in Monobook)
+ * @param String id -- id of the new item, should be unique and preferably have the appropriate prefix ("ca-", "pt-", "n-" or "t-")
+ * @param String tooltip -- text to show when hovering over the link, without accesskey suffix
+ * @param String accesskey -- accesskey to activate this link (one character, try to avoid conflicts)
+ * @param Node nextnode -- the DOM node before which the new item should be added, should be another item in the same list
+ *
+ * @return Node -- the DOM node of the new item (an LI element) or null
+ */
+function addPortletLink(portlet, href, text, id, tooltip, accesskey, nextnode) {
+	var node = document.getElementById(portlet);
+	if ( !node ) return null;
+	node = node.getElementsByTagName( "ul" )[0];
+	if ( !node ) return null;
+
+	var link = document.createElement( "a" );
+	link.appendChild( document.createTextNode( text ) );
+	link.href = href;
+
+	var item = document.createElement( "li" );
+	item.appendChild( link );
+	if ( id ) item.id = id;
+
+	if ( accesskey ) {
+		link.setAttribute( "accesskey", accesskey );
+		tooltip += " ["+accesskey+"]";
+	}
+	if ( tooltip ) {
+		link.setAttribute( "title", tooltip );
+	}
+	if ( accesskey && tooltip ) {
+		updateTooltipAccessKeys( new Array( link ) );
+	}
+
+	if ( nextnode && nextnode.parentNode == node )
+		node.insertBefore( item, nextnode );
+	else
+		node.appendChild( item );  // IE compatibility (?)
+
+	return item;
+}
+
+
+/**
+ * Set up accesskeys/tooltips from the deprecated ta array.  If doId
+ * is specified, only set up for that id.  Note that this function is
+ * deprecated and will not be supported indefinitely -- use
+ * updateTooltipAccessKey() instead.
+ *
+ * @param mixed doId string or null
+ */
+function akeytt( doId ) {
+	// A lot of user scripts (and some of the code below) break if
+	// ta isn't defined, so we make sure it is.  Explictly using
+	// window.ta avoids a "ta is not defined" error.
+	if (!window.ta) window.ta = new Array;
+
+	// Make a local, possibly restricted, copy to avoid clobbering
+	// the original.
+	var ta;
+	if ( doId ) {
+		ta = new Array;
+		ta[doId] = window.ta[doId];
+	} else {
+		ta = window.ta;
+	}
+
+	// Now deal with evil deprecated ta
+	var watchCheckboxExists = document.getElementById( 'wpWatchthis' ) ? true : false;
+	for (var id in ta) {
+		var n = document.getElementById(id);
+		if (n) {
+			var a = null;
+			var ak = '';
+			// Are we putting accesskey in it
+			if (ta[id][0].length > 0) {
+				// Is this object a object? If not assume it's the next child.
+
+				if (n.nodeName.toLowerCase() == "a") {
+					a = n;
+				} else {
+					a = n.childNodes[0];
+				}
+			 	// Don't add an accesskey for the watch tab if the watch
+			 	// checkbox is also available.
+				if (a && ((id != 'ca-watch' && id != 'ca-unwatch') || !watchCheckboxExists)) {
+					a.accessKey = ta[id][0];
+					ak = ' ['+tooltipAccessKeyPrefix+ta[id][0]+']';
+				}
+			} else {
+				// We don't care what type the object is when assigning tooltip
+				a = n;
+				ak = '';
+			}
+
+			if (a) {
+				a.title = ta[id][1]+ak;
+			}
+		}
+	}
+}
+
+function setupRightClickEdit() {
+	if (document.getElementsByTagName) {
+		var spans = document.getElementsByTagName('span');
+		for (var i = 0; i < spans.length; i++) {
+			var el = spans[i];
+			if(el.className == 'editsection') {
+				addRightClickEditHandler(el);
+			}
+		}
+	}
+}
+
+function addRightClickEditHandler(el) {
+	for (var i = 0; i < el.childNodes.length; i++) {
+		var link = el.childNodes[i];
+		if (link.nodeType == 1 && link.nodeName.toLowerCase() == 'a') {
+			var editHref = link.getAttribute('href');
+			// find the enclosing (parent) header
+			var prev = el.parentNode;
+			if (prev && prev.nodeType == 1 &&
+			prev.nodeName.match(/^[Hh][1-6]$/)) {
+				prev.oncontextmenu = function(e) {
+					if (!e) { e = window.event; }
+					// e is now the event in all browsers
+					var targ;
+					if (e.target) { targ = e.target; }
+					else if (e.srcElement) { targ = e.srcElement; }
+					if (targ.nodeType == 3) { // defeat Safari bug
+						targ = targ.parentNode;
+					}
+					// targ is now the target element
+
+					// We don't want to deprive the noble reader of a context menu
+					// for the section edit link, do we?  (Might want to extend this
+					// to all <a>'s?)
+					if (targ.nodeName.toLowerCase() != 'a'
+					|| targ.parentNode.className != 'editsection') {
+						document.location = editHref;
+						return false;
+					}
+					return true;
+				};
+			}
+		}
+	}
+}
+
+var checkboxes;
+var lastCheckbox;
+
+function setupCheckboxShiftClick() {
+	checkboxes = [];
+	lastCheckbox = null;
+	var inputs = document.getElementsByTagName('input');
+	addCheckboxClickHandlers(inputs);
+}
+
+function addCheckboxClickHandlers(inputs, start) {
+	if ( !start) start = 0;
+
+	var finish = start + 250;
+	if ( finish > inputs.length )
+		finish = inputs.length;
+
+	for ( var i = start; i < finish; i++ ) {
+		var cb = inputs[i];
+		if ( !cb.type || cb.type.toLowerCase() != 'checkbox' )
+			continue;
+		cb.index = checkboxes.push(cb) - 1;
+		cb.onmouseup = checkboxMouseupHandler;
+	}
+
+	if ( finish < inputs.length ) {
+		setTimeout( function () {
+			addCheckboxClickHandlers(inputs, finish);
+		}, 200 );
+	}
+}
+
+function checkboxMouseupHandler(e) {
+	if (typeof e == 'undefined') {
+		e = window.event;
+	}
+	if ( !e.shiftKey || lastCheckbox === null ) {
+		lastCheckbox = this.index;
+		return true;
+	}
+	var endState = !this.checked;
+	if ( is_opera ) { // opera has already toggled the checkbox by this point
+		endState = !endState;
+	}
+	var start, finish;
+	if ( this.index < lastCheckbox ) {
+		start = this.index + 1;
+		finish = lastCheckbox;
+	} else {
+		start = lastCheckbox;
+		finish = this.index - 1;
+	}
+	for (var i = start; i <= finish; ++i ) {
+		checkboxes[i].checked = endState;
+	}
+	lastCheckbox = this.index;
+	return true;
+}
+
+function toggle_element_activation(ida,idb) {
+	if (!document.getElementById) {
+		return;
+	}
+	document.getElementById(ida).disabled=true;
+	document.getElementById(idb).disabled=false;
+}
+
+function toggle_element_check(ida,idb) {
+	if (!document.getElementById) {
+		return;
+	}
+	document.getElementById(ida).checked=true;
+	document.getElementById(idb).checked=false;
+}
+
+function fillDestFilename(id) {
+	if (!document.getElementById) {
+		return;
+	}
+	var path = document.getElementById(id).value;
+	// Find trailing part
+	var slash = path.lastIndexOf('/');
+	var backslash = path.lastIndexOf('\\');
+	var fname;
+	if (slash == -1 && backslash == -1) {
+		fname = path;
+	} else if (slash > backslash) {
+		fname = path.substring(slash+1, 10000);
+	} else {
+		fname = path.substring(backslash+1, 10000);
+	}
+
+	// Capitalise first letter and replace spaces by underscores
+	fname = fname.charAt(0).toUpperCase().concat(fname.substring(1,10000)).replace(/ /g, '_');
+
+	// Output result
+	var destFile = document.getElementById('wpDestFile');
+	if (destFile) {
+		destFile.value = fname;
+	}
+}
+
+function scrollEditBox() {
+	var editBoxEl = document.getElementById("wpTextbox1");
+	var scrollTopEl = document.getElementById("wpScrolltop");
+	var editFormEl = document.getElementById("editform");
+
+	if (editBoxEl && scrollTopEl) {
+		if (scrollTopEl.value) { editBoxEl.scrollTop = scrollTopEl.value; }
+		editFormEl.onsubmit = function() {
+			document.getElementById("wpScrolltop").value = document.getElementById("wpTextbox1").scrollTop;
+		};
+	}
+}
+
+hookEvent("load", scrollEditBox);
+
+var allmessages_nodelist = false;
+var allmessages_modified = false;
+var allmessages_timeout = false;
+var allmessages_running = false;
+
+function allmessagesmodified() {
+	allmessages_modified = !allmessages_modified;
+	allmessagesfilter();
+}
+
+function allmessagesfilter() {
+	if ( allmessages_timeout )
+		window.clearTimeout( allmessages_timeout );
+
+	if ( !allmessages_running )
+		allmessages_timeout = window.setTimeout( 'allmessagesfilter_do();', 500 );
+}
+
+function allmessagesfilter_do() {
+	if ( !allmessages_nodelist )
+		return;
+
+	var text = document.getElementById('allmessagesinput').value;
+	var nodef = allmessages_modified;
+
+	allmessages_running = true;
+
+	for ( var name in allmessages_nodelist ) {
+		var nodes = allmessages_nodelist[name];
+		var display = ( name.indexOf( text ) == -1 ? 'none' : '' );
+
+		for ( var i = 0; i < nodes.length; i++)
+			nodes[i].style.display =
+				( nodes[i].className == "def" && nodef
+				  ? 'none' : display );
+	}
+
+	if ( text != document.getElementById('allmessagesinput').value ||
+	     nodef != allmessages_modified )
+		allmessagesfilter_do();  // repeat
+
+	allmessages_running = false;
+}
+
+function allmessagesfilter_init() {
+	if ( allmessages_nodelist )
+		return;
+
+	var nodelist = new Array();
+	var templist = new Array();
+
+	var table = document.getElementById('allmessagestable');
+	if ( !table ) return;
+
+	var rows = document.getElementsByTagName('tr');
+	for ( var i = 0; i < rows.length; i++ ) {
+		var id = rows[i].getAttribute('id')
+		if ( id && id.substring(0,16) != 'sp-allmessages-r' ) continue;
+		templist[ id ] = rows[i];
+	}
+
+	var spans = table.getElementsByTagName('span');
+	for ( var i = 0; i < spans.length; i++ ) {
+		var id = spans[i].getAttribute('id')
+		if ( id && id.substring(0,17) != 'sp-allmessages-i-' ) continue;
+		if ( !spans[i].firstChild || spans[i].firstChild.nodeType != 3 ) continue;
+
+		var nodes = new Array();
+		var row1 = templist[ id.replace('i', 'r1') ];
+		var row2 = templist[ id.replace('i', 'r2') ];
+
+		if ( row1 ) nodes[nodes.length] = row1;
+		if ( row2 ) nodes[nodes.length] = row2;
+		nodelist[ spans[i].firstChild.nodeValue ] = nodes;
+	}
+
+	var k = document.getElementById('allmessagesfilter');
+	if (k) { k.style.display = ''; }
+
+	allmessages_nodelist = nodelist;
+}
+
+hookEvent( "load", allmessagesfilter_init );
+
+/*
+	Written by Jonathan Snook, http://www.snook.ca/jonathan
+	Add-ons by Robert Nyman, http://www.robertnyman.com
+	Author says "The credit comment is all it takes, no license. Go crazy with it!:-)"
+	From http://www.robertnyman.com/2005/11/07/the-ultimate-getelementsbyclassname/
+*/
+function getElementsByClassName(oElm, strTagName, oClassNames){
+	var arrElements = (strTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName);
+	var arrReturnElements = new Array();
+	var arrRegExpClassNames = new Array();
+	if(typeof oClassNames == "object"){
+		for(var i=0; i<oClassNames.length; i++){
+			arrRegExpClassNames.push(new RegExp("(^|\\s)" + oClassNames[i].replace(/\-/g, "\\-") + "(\\s|$)"));
+		}
+	}
+	else{
+		arrRegExpClassNames.push(new RegExp("(^|\\s)" + oClassNames.replace(/\-/g, "\\-") + "(\\s|$)"));
+	}
+	var oElement;
+	var bMatchesAll;
+	for(var j=0; j<arrElements.length; j++){
+		oElement = arrElements[j];
+		bMatchesAll = true;
+		for(var k=0; k<arrRegExpClassNames.length; k++){
+			if(!arrRegExpClassNames[k].test(oElement.className)){
+				bMatchesAll = false;
+				break;
+			}
+		}
+		if(bMatchesAll){
+			arrReturnElements.push(oElement);
+		}
+	}
+	return (arrReturnElements)
+}
+
+function redirectToFragment(fragment) {
+	var match = navigator.userAgent.match(/AppleWebKit\/(\d+)/);
+	if (match) {
+		var webKitVersion = parseInt(match[1]);
+		if (webKitVersion < 420) {
+			// Released Safari w/ WebKit 418.9.1 messes up horribly
+			// Nightlies of 420+ are ok
+			return;
+		}
+	}
+	if (is_gecko) {
+		// Mozilla needs to wait until after load, otherwise the window doesn't scroll
+		addOnloadHook(function () {
+			if (window.location.hash == "")
+				window.location.hash = fragment;
+		});
+	} else {
+		if (window.location.hash == "")
+			window.location.hash = fragment;
+	}
+}
+
+/*
+ * Table sorting script  by Joost de Valk, check it out at http://www.joostdevalk.nl/code/sortable-table/.
+ * Based on a script from http://www.kryogenix.org/code/browser/sorttable/.
+ * Distributed under the MIT license: http://www.kryogenix.org/code/browser/licence.html .
+ *
+ * Copyright (c) 1997-2006 Stuart Langridge, Joost de Valk.
+ *
+ * @todo don't break on colspans/rowspans (bug 8028)
+ * @todo language-specific digit grouping/decimals (bug 8063)
+ * @todo support all accepted date formats (bug 8226)
+ */
+
+var ts_image_path = stylepath+"/common/images/";
+var ts_image_up = "sort_up.gif";
+var ts_image_down = "sort_down.gif";
+var ts_image_none = "sort_none.gif";
+var ts_europeandate = wgContentLanguage != "en"; // The non-American-inclined can change to "true"
+var ts_alternate_row_colors = true;
+var SORT_COLUMN_INDEX;
+
+function sortables_init() {
+	var idnum = 0;
+	// Find all tables with class sortable and make them sortable
+	var tables = getElementsByClassName(document, "table", "sortable");
+	for (var ti = 0; ti < tables.length ; ti++) {
+		if (!tables[ti].id) {
+			tables[ti].setAttribute('id','sortable_table_id_'+idnum);
+			++idnum;
+		}
+		ts_makeSortable(tables[ti]);
+	}
+}
+
+function ts_makeSortable(table) {
+	var firstRow;
+	if (table.rows && table.rows.length > 0) {
+		if (table.tHead && table.tHead.rows.length > 0) {
+			firstRow = table.tHead.rows[table.tHead.rows.length-1];
+		} else {
+			firstRow = table.rows[0];
+		}
+	}
+	if (!firstRow) return;
+
+	// We have a first row: assume it's the header, and make its contents clickable links
+	for (var i = 0; i < firstRow.cells.length; i++) {
+		var cell = firstRow.cells[i];
+		if ((" "+cell.className+" ").indexOf(" unsortable ") == -1) {
+			cell.innerHTML += '&nbsp;&nbsp;<a href="#" class="sortheader" onclick="ts_resortTable(this);return false;"><span class="sortarrow"><img src="'+ ts_image_path + ts_image_none + '" alt="&darr;"/></span></a>';
+		}
+	}
+	if (ts_alternate_row_colors) {
+		ts_alternate(table);
+	}
+}
+
+function ts_getInnerText(el) {
+	if (typeof el == "string") return el;
+	if (typeof el == "undefined") { return el };
+	if (el.innerText) return el.innerText;	// Not needed but it is faster
+	var str = "";
+
+	var cs = el.childNodes;
+	var l = cs.length;
+	for (var i = 0; i < l; i++) {
+		switch (cs[i].nodeType) {
+			case 1: //ELEMENT_NODE
+				str += ts_getInnerText(cs[i]);
+				break;
+			case 3:	//TEXT_NODE
+				str += cs[i].nodeValue;
+				break;
+		}
+	}
+	return str;
+}
+
+function ts_resortTable(lnk) {
+	// get the span
+	var span = lnk.getElementsByTagName('span')[0];
+
+	var td = lnk.parentNode;
+	var tr = td.parentNode;
+	var column = td.cellIndex;
+
+	var table = tr.parentNode;
+	while (table && !(table.tagName && table.tagName.toLowerCase() == 'table'))
+		table = table.parentNode;
+	if (!table) return;
+
+	// Work out a type for the column
+	if (table.rows.length <= 1) return;
+
+	// Skip the first row if that's where the headings are
+	var rowStart = (table.tHead && table.tHead.rows.length > 0 ? 0 : 1);
+
+	var itm = "";
+	for (var i = rowStart; i < table.rows.length; i++) {
+		if (table.rows[i].cells.length > column) {
+			itm = ts_getInnerText(table.rows[i].cells[column]);
+			itm = itm.replace(/^[\s\xa0]+/, "").replace(/[\s\xa0]+$/, "");
+			if (itm != "") break;
+		}
+	}
+
+	sortfn = ts_sort_caseinsensitive;
+	if (itm.match(/^\d\d[\/. -][a-zA-Z]{3}[\/. -]\d\d\d\d$/))
+		sortfn = ts_sort_date;
+	if (itm.match(/^\d\d[\/.-]\d\d[\/.-]\d\d\d\d$/))
+		sortfn = ts_sort_date;
+	if (itm.match(/^\d\d[\/.-]\d\d[\/.-]\d\d$/))
+		sortfn = ts_sort_date;
+	if (itm.match(/^[\u00a3$\u20ac]/)) // pound dollar euro
+		sortfn = ts_sort_currency;
+	if (itm.match(/^[\d.,]+\%?$/))
+		sortfn = ts_sort_numeric;
+
+	var reverse = (span.getAttribute("sortdir") == 'down');
+
+	var newRows = new Array();
+	for (var j = rowStart; j < table.rows.length; j++) {
+		var row = table.rows[j];
+		var keyText = ts_getInnerText(row.cells[column]);
+		var oldIndex = (reverse ? -j : j);
+
+		newRows[newRows.length] = new Array(row, keyText, oldIndex);
+	}
+
+	newRows.sort(sortfn);
+
+	var arrowHTML;
+	if (reverse) {
+			arrowHTML = '<img src="'+ ts_image_path + ts_image_down + '" alt="&darr;"/>';
+			newRows.reverse();
+			span.setAttribute('sortdir','up');
+	} else {
+			arrowHTML = '<img src="'+ ts_image_path + ts_image_up + '" alt="&uarr;"/>';
+			span.setAttribute('sortdir','down');
+	}
+
+	// We appendChild rows that already exist to the tbody, so it moves them rather than creating new ones
+	// don't do sortbottom rows
+	for (var i = 0; i < newRows.length; i++) {
+		if ((" "+newRows[i][0].className+" ").indexOf(" sortbottom ") == -1)
+			table.tBodies[0].appendChild(newRows[i][0]);
+	}
+	// do sortbottom rows only
+	for (var i = 0; i < newRows.length; i++) {
+		if ((" "+newRows[i][0].className+" ").indexOf(" sortbottom ") != -1)
+			table.tBodies[0].appendChild(newRows[i][0]);
+	}
+
+	// Delete any other arrows there may be showing
+	var spans = getElementsByClassName(tr, "span", "sortarrow");
+	for (var i = 0; i < spans.length; i++) {
+		spans[i].innerHTML = '<img src="'+ ts_image_path + ts_image_none + '" alt="&darr;"/>';
+	}
+	span.innerHTML = arrowHTML;
+
+	ts_alternate(table);		
+}
+
+function ts_dateToSortKey(date) {	
+	// y2k notes: two digit years less than 50 are treated as 20XX, greater than 50 are treated as 19XX
+	if (date.length == 11) {
+		switch (date.substr(3,3).toLowerCase()) {
+			case "jan": var month = "01"; break;
+			case "feb": var month = "02"; break;
+			case "mar": var month = "03"; break;
+			case "apr": var month = "04"; break;
+			case "may": var month = "05"; break;
+			case "jun": var month = "06"; break;
+			case "jul": var month = "07"; break;
+			case "aug": var month = "08"; break;
+			case "sep": var month = "09"; break;
+			case "oct": var month = "10"; break;
+			case "nov": var month = "11"; break;
+			case "dec": var month = "12"; break;
+			// default: var month = "00";
+		}
+		return date.substr(7,4)+month+date.substr(0,2);
+	} else if (date.length == 10) {
+		if (ts_europeandate == false) {
+			return date.substr(6,4)+date.substr(0,2)+date.substr(3,2);
+		} else {
+			return date.substr(6,4)+date.substr(3,2)+date.substr(0,2);
+		}
+	} else if (date.length == 8) {
+		yr = date.substr(6,2);
+		if (parseInt(yr) < 50) { 
+			yr = '20'+yr; 
+		} else { 
+			yr = '19'+yr; 
+		}
+		if (ts_europeandate == true) {
+			return yr+date.substr(3,2)+date.substr(0,2);
+		} else {
+			return yr+date.substr(0,2)+date.substr(3,2);
+		}
+	}
+	return "00000000";
+}
+
+function ts_parseFloat(num) {
+	if (!num) return 0;
+	num = parseFloat(num.replace(/,/, ""));
+	return (isNaN(num) ? 0 : num);
+}
+
+function ts_sort_date(a,b) {
+	var aa = ts_dateToSortKey(a[1]);
+	var bb = ts_dateToSortKey(b[1]);
+	return (aa < bb ? -1 : aa > bb ? 1 : a[2] - b[2]);
+}
+
+function ts_sort_currency(a,b) {
+	var aa = ts_parseFloat(a[1].replace(/[^0-9.]/g,''));
+	var bb = ts_parseFloat(b[1].replace(/[^0-9.]/g,''));
+	return (aa != bb ? aa - bb : a[2] - b[2]);
+}
+
+function ts_sort_numeric(a,b) {
+	var aa = ts_parseFloat(a[1]);
+	var bb = ts_parseFloat(b[1]);
+	return (aa != bb ? aa - bb : a[2] - b[2]);
+}
+
+function ts_sort_caseinsensitive(a,b) {
+	var aa = a[1].toLowerCase();
+	var bb = b[1].toLowerCase();
+	return (aa < bb ? -1 : aa > bb ? 1 : a[2] - b[2]);
+}
+
+function ts_sort_default(a,b) {
+	return (a[1] < b[1] ? -1 : a[1] > b[1] ? 1 : a[2] - b[2]);
+}
+
+function ts_alternate(table) {
+	// Take object table and get all it's tbodies.
+	var tableBodies = table.getElementsByTagName("tbody");
+	// Loop through these tbodies
+	for (var i = 0; i < tableBodies.length; i++) {
+		// Take the tbody, and get all it's rows
+		var tableRows = tableBodies[i].getElementsByTagName("tr");
+		// Loop through these rows
+		// Start at 1 because we want to leave the heading row untouched
+		for (var j = 0; j < tableRows.length; j++) {
+			// Check if j is even, and apply classes for both possible results
+			var oldClasses = tableRows[j].className.split(" ");
+			var newClassName = "";
+			for (var k = 0; k < oldClasses.length; k++) {
+				if (oldClasses[k] != "" && oldClasses[k] != "even" && oldClasses[k] != "odd")
+					newClassName += oldClasses[k] + " ";
+			}
+			tableRows[j].className = newClassName + (j % 2 == 0 ? "even" : "odd");
+		}
+	}
+}
+
+/*
+ * End of table sorting code
+ */
+
+function runOnloadHook() {
+	// don't run anything below this for non-dom browsers
+	if (doneOnloadHook || !(document.getElementById && document.getElementsByTagName)) {
+		return;
+	}
+
+	// set this before running any hooks, since any errors below
+	// might cause the function to terminate prematurely
+	doneOnloadHook = true;
+
+	histrowinit();
+	unhidetzbutton();
+	tabbedprefs();
+	updateTooltipAccessKeys( null );
+	akeytt( null );
+	scrollEditBox();
+	setupCheckboxShiftClick();
+	sortables_init();
+
+	// Run any added-on functions
+	for (var i = 0; i < onloadFuncts.length; i++) {
+		onloadFuncts[i]();
+	}
+}
+
+//note: all skins should call runOnloadHook() at the end of html output,
+//      so the below should be redundant. It's there just in case.
+hookEvent("load", runOnloadHook);
+
+hookEvent("load", mwSetupToolbar);
Index: /MediaWiki/branches/1.11/skins/common/wikiprintable.css
===================================================================
--- /MediaWiki/branches/1.11/skins/common/wikiprintable.css	(revision 1280)
+++ /MediaWiki/branches/1.11/skins/common/wikiprintable.css	(revision 1280)
@@ -0,0 +1,46 @@
+/* MediaWiki print stylesheet */
+
+body {
+	color: #000000; background: #ffffff;
+}
+
+
+/* MSIE/Win doesn't understand 'inherit' */
+a, a.external, a.new, a.stub {
+	color: black ! important;
+	text-decoration: none ! important;
+}
+#article {
+	margin: 0 ! important;
+}
+
+/* Continue ... */
+a, a.external, a.new, a.stub {
+	color: inherit ! important;
+	text-decoration: inherit ! important;
+}
+
+/* Hide ugly UI stuff */
+#quickbar, #topbar, #footer, #siteNotice,
+.editsection, .toctoggle {
+	display: none;
+}
+
+/* */
+#article {
+	position: relative;
+	margin: inherit ! important;
+}
+
+.printfooter {
+	border-top: solid 1px black;
+	display: block ! important;
+}
+
+/* Old stuff, fixme:
+a.CBlink { color: #0000AA; text-decoration: none; font-size: 12pt; }
+a.interwiki, a.external { color: #3333BB; text-decoration: none; }
+h1.pagetitle { padding-bottom: 0; margin-bottom: 0; }
+i.link, u.link { color: #000066; }
+p.subtitle { padding-top: 0; margin-top: 0; }
+*/
Index: /MediaWiki/branches/1.11/skins/common/wikistandard.css
===================================================================
--- /MediaWiki/branches/1.11/skins/common/wikistandard.css	(revision 1280)
+++ /MediaWiki/branches/1.11/skins/common/wikistandard.css	(revision 1280)
@@ -0,0 +1,48 @@
+#article { padding: 4px; }
+#content { margin: 0; padding: 0; }
+#footer { padding: 4px;font-size:95%;clear: both; }
+#pagestats { font-size: 9pt; }
+#powersearch {
+  background: #DDEEFF; border-style: solid; border-width: 1px; padding: 2px;
+}
+#quickbar { width: 140px; padding: 4px; visibility: visible; z-index:99;font-size:95%;}
+#topbar { padding: 4px;font-size:95%; }
+
+
+/* Table of contents */
+.toctoggle, .editsection { font-size: smaller; }
+
+/* ... */
+#toolbar { padding:0px; }
+#infobox { background:#eeeeff;color:black;}
+#editform { margin-top:1px; }
+a.interwiki, a.external { color: #3366BB; }
+a.printable { text-decoration: underline; }
+a.stub { color:#772233; text-decoration:none; }
+a:visited { color: #5A3696; }
+body { margin: 0px; padding: 4px; color: black; }
+form.inline { display: inline; }
+textarea { overflow: auto; }
+
+
+h1.pagetitle { padding-top: 0; margin-top: 0; padding-bottom: 0; margin-bottom: 0;
+font-size:150%; }
+h1.pagetitle .editsection { font-size: 66.7%; }
+h2 { font-size: 120%; }
+h2 .editsection { font-size: 83.3%; }
+h2, h3, h4, h5, h6 { margin-bottom: 0;}
+h3 { font-size: 106.25%; }
+h3 .editsection { font-size: 94.1%; }
+h4 { font-size: 103.125%; }
+h4 .editsection { font-size: 97.0%; }
+h5 { font-size: 100%; }
+h5 .editsection { font-size: 100%; }
+h6 { font-size: 95%; }
+h6 .editsection { font-size: 105.3%; }
+hr.sep { color:gray;height:1px;background-color:gray;}
+p.subpages { font-size:small;}
+p.subtitle { padding-top: 0; margin-top: 0;}
+p.catlinks { font-size:small; margin-top:0; text-align:right;}
+td { empty-cells:show; }
+td.bottom { border-top: 1px solid gray; }
+td.top { border-bottom: 1px solid gray; }
Index: /MediaWiki/branches/1.11/skins/disabled/HTMLDump.php
===================================================================
--- /MediaWiki/branches/1.11/skins/disabled/HTMLDump.php	(revision 1280)
+++ /MediaWiki/branches/1.11/skins/disabled/HTMLDump.php	(revision 1280)
@@ -0,0 +1,232 @@
+<?php
+
+/**
+ * Default skin for HTML dumps, based on MonoBook.php
+ */
+
+if( !defined( 'MEDIAWIKI' ) )
+	die( -1 );
+
+/** */
+require_once( 'includes/SkinTemplate.php' );
+
+/**
+ * Inherit main code from SkinTemplate, set the CSS and template filter.
+ * @todo document
+ * @addtogroup Skins
+ */
+class SkinHTMLDump extends SkinTemplate {
+	/** Using monobook. */
+	function initPage( &$out ) {
+		SkinTemplate::initPage( $out );
+		$this->template  = 'HTMLDumpTemplate';
+	}
+
+	function buildSidebar() {
+		$sections = parent::buildSidebar();
+		$badMessages = array( 'recentchanges-url', 'randompage-url' );
+		$badUrls = array();
+		foreach ( $badMessages as $msg ) {
+			$badUrls[] = self::makeInternalOrExternalUrl( wfMsgForContent( $msg ) );
+		}
+
+		foreach ( $sections as $heading => $section ) {
+			foreach ( $section as $index => $link ) {
+				if ( in_array( $link['href'], $badUrls ) ) {
+					unset( $sections[$heading][$index] );
+				}
+			}
+		}
+		return $sections;
+	}
+
+	function buildContentActionUrls() {
+		global $wgHTMLDump;
+
+		$content_actions = array();
+		$nskey = $this->getNameSpaceKey();
+		$content_actions[$nskey] = $this->tabAction(
+			$this->mTitle->getSubjectPage(),
+			$nskey,
+			!$this->mTitle->isTalkPage() );
+
+		$content_actions['talk'] = $this->tabAction(
+			$this->mTitle->getTalkPage(),
+			'talk',
+			$this->mTitle->isTalkPage(),
+			'',
+			true);
+
+		if ( isset( $wgHTMLDump ) ) {
+			$content_actions['current'] = array(
+				'text' => wfMsg( 'currentrev' ),
+				'href' => str_replace( '$1', wfUrlencode( $this->mTitle->getPrefixedDBkey() ),
+					$wgHTMLDump->oldArticlePath ),
+				'class' => false
+			);
+		}
+		return $content_actions;
+	}
+
+	function makeBrokenLinkObj( &$nt, $text = '', $query = '', $trail = '', $prefix = '' ) {
+		if ( !isset( $nt ) ) {
+			return "<!-- ERROR -->{$prefix}{$text}{$trail}";
+		}
+
+		if ( $nt->getNamespace() == NS_CATEGORY ) {
+			# Determine if the category has any articles in it
+			$dbr = wfGetDB( DB_SLAVE );
+			$hasMembers = $dbr->selectField( 'categorylinks', '1', 
+				array( 'cl_to' => $nt->getDBkey() ), __METHOD__ );
+			if ( $hasMembers ) {
+				return $this->makeKnownLinkObj( $nt, $text, $query, $trail, $prefix );
+			}
+		}
+
+		if ( $text == '' ) {
+			$text = $nt->getPrefixedText();
+		}
+		return $prefix . $text . $trail;
+	}
+}
+
+/**
+ * @todo document
+ * @addtogroup Skins
+ */
+class HTMLDumpTemplate extends QuickTemplate {
+	/**
+	 * Template filter callback for MonoBook skin.
+	 * Takes an associative array of data set from a SkinTemplate-based
+	 * class, and a wrapper for MediaWiki's localization database, and
+	 * outputs a formatted page.
+	 *
+	 * @access private
+	 */
+	function execute() {
+		wfSuppressWarnings();
+?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php $this->text('lang') ?>" lang="<?php $this->text('lang') ?>" dir="<?php $this->text('dir') ?>">
+  <head>
+    <meta http-equiv="Content-Type" content="<?php $this->text('mimetype') ?>; charset=<?php $this->text('charset') ?>" />
+    <?php $this->html('headlinks') ?>
+    <title><?php $this->text('pagetitle') ?></title>
+    <style type="text/css">/*<![CDATA[*/ @import "<?php $this->text('stylepath') ?>/htmldump/main.css"; /*]]>*/</style>
+    <link rel="stylesheet" type="text/css" media="print" href="<?php $this->text('stylepath') ?>/common/commonPrint.css" />
+    <!--[if lt IE 5.5000]><style type="text/css">@import "<?php $this->text('stylepath') ?>/<?php $this->text('stylename') ?>/IE50Fixes.css";</style><![endif]-->
+    <!--[if IE 5.5000]><style type="text/css">@import "<?php $this->text('stylepath') ?>/<?php $this->text('stylename') ?>/IE55Fixes.css";</style><![endif]-->
+    <!--[if IE 6]><style type="text/css">@import "<?php $this->text('stylepath') ?>/<?php $this->text('stylename') ?>/IE60Fixes.css";</style><![endif]-->
+    <!--[if IE]><script type="<?php $this->text('jsmimetype') ?>" src="<?php $this->text('stylepath') ?>/common/IEFixes.js"></script>
+    <meta http-equiv="imagetoolbar" content="no" /><![endif]-->
+    <script type="<?php $this->text('jsmimetype') ?>" src="<?php $this->text('stylepath' ) ?>/common/wikibits.js"></script>
+    <script type="<?php $this->text('jsmimetype') ?>" src="<?php $this->text('stylepath' ) ?>/htmldump/md5.js"></script>
+    <script type="<?php $this->text('jsmimetype') ?>" src="<?php $this->text('stylepath' ) ?>/htmldump/utf8.js"></script>
+    <script type="<?php $this->text('jsmimetype') ?>" src="<?php $this->text('stylepath' ) ?>/htmldump/lookup.js"></script>
+    <?php if($this->data['jsvarurl'  ]) { ?><script type="<?php $this->text('jsmimetype') ?>" src="<?php $this->text('jsvarurl'  ) ?>"></script><?php } ?>
+    <?php if($this->data['pagecss'   ]) { ?><style type="text/css"><?php              $this->html('pagecss'   ) ?></style><?php    } ?>
+    <?php if($this->data['usercss'   ]) { ?><style type="text/css"><?php              $this->html('usercss'   ) ?></style><?php    } ?>
+    <?php if($this->data['userjs'    ]) { ?><script type="<?php $this->text('jsmimetype') ?>" src="<?php $this->text('userjs'    ) ?>"></script><?php } ?>
+    <?php if($this->data['userjsprev']) { ?><script type="<?php $this->text('jsmimetype') ?>"><?php      $this->html('userjsprev') ?></script><?php   } ?>
+  </head>
+  <body
+    <?php if($this->data['nsclass'        ]) { ?>class="<?php      $this->text('nsclass')         ?>"<?php } ?>>
+    <div id="globalWrapper">
+      <div id="column-content">
+	<div id="content">
+	  <a name="top" id="contentTop"></a>
+	  <?php if($this->data['sitenotice']) { ?><div id="siteNotice"><?php $this->html('sitenotice') ?></div><?php } ?>
+      <h1 class="firstHeading"><?php $this->data['displaytitle']!=""?$this->html('title'):$this->text('title') ?></h1>
+	  <div id="bodyContent">
+	    <h3 id="siteSub"><?php $this->msg('tagline') ?></h3>
+	    <div id="contentSub"><?php $this->html('subtitle') ?></div>
+	    <?php if($this->data['undelete']) { ?><div id="contentSub"><?php     $this->html('undelete') ?></div><?php } ?>
+	    <?php if($this->data['newtalk'] ) { ?><div class="usermessage"><?php $this->html('newtalk')  ?></div><?php } ?>
+	    <!-- start content -->
+	    <?php $this->html('bodytext') ?>
+	    <?php if($this->data['catlinks']) { ?><div id="catlinks"><?php       $this->html('catlinks') ?></div><?php } ?>
+	    <!-- end content -->
+	    <div class="visualClear"></div>
+	  </div>
+	</div>
+      </div>
+      <div id="column-one">
+	<div id="p-cactions" class="portlet">
+	  <h5>Views</h5>
+	  <ul>
+	    <?php foreach($this->data['content_actions'] as $key => $action) {
+	       ?><li id="ca-<?php echo htmlspecialchars($key) ?>"
+	       <?php if($action['class']) { ?>class="<?php echo htmlspecialchars($action['class']) ?>"<?php } ?>
+	       ><a href="<?php echo htmlspecialchars($action['href']) ?>"><?php
+	       echo htmlspecialchars($action['text']) ?></a></li><?php
+	     } ?>
+	  </ul>
+	</div>
+	<div class="portlet" id="p-logo">
+	  <a style="background-image: url(<?php $this->text('logopath') ?>);"
+	    href="<?php echo htmlspecialchars($this->data['nav_urls']['mainpage']['href'])?>"
+	    title="<?php $this->msg('mainpage') ?>"></a>
+	</div>
+	<script type="<?php $this->text('jsmimetype') ?>"> if (window.isMSIE55) fixalpha(); </script>
+	<?php foreach ($this->data['sidebar'] as $bar => $cont) { ?>
+	<div class='portlet' id='p-<?php echo htmlspecialchars($bar) ?>'>
+	  <h5><?php $out = wfMsg( $bar ); if (wfEmptyMsg($bar, $out)) echo $bar; else echo $out; ?></h5>
+	  <div class='pBody'>
+	    <ul>
+	    <?php foreach($cont as $key => $val) { ?>
+	      <li id="<?php echo htmlspecialchars($val['id']) ?>"><a href="<?php echo htmlspecialchars($val['href']) ?>"><?php echo htmlspecialchars($val['text'])?></a></li>
+	     <?php } ?>
+	    </ul>
+	  </div>
+	</div>
+	<?php } ?>
+	<div id="p-search" class="portlet">
+	  <h5><label for="searchInput"><?php $this->msg('search') ?></label></h5>
+	  <div id="searchBody" class="pBody">
+	    <form action="javascript:goToStatic(3)" id="searchform"><div>
+	      <input id="searchInput" name="search" type="text"
+	        <?php if($this->haveMsg('accesskey-search')) {
+	          ?>accesskey="<?php $this->msg('accesskey-search') ?>"<?php }
+	        if( isset( $this->data['search'] ) ) {
+	          ?> value="<?php $this->text('search') ?>"<?php } ?> />
+	      <input type='submit' name="go" class="searchButton" id="searchGoButton"
+	        value="<?php $this->msg('go') ?>" />
+	    </div></form>
+	  </div>
+	</div>
+	<?php if( $this->data['language_urls'] ) { ?><div id="p-lang" class="portlet">
+	  <h5><?php $this->msg('otherlanguages') ?></h5>
+	  <div class="pBody">
+	    <ul>
+	      <?php foreach($this->data['language_urls'] as $langlink) { ?>
+	      <li>
+	      <a href="<?php echo htmlspecialchars($langlink['href'])
+	        ?>"><?php echo $langlink['text'] ?></a>
+	      </li>
+	      <?php } ?>
+	    </ul>
+	  </div>
+	</div>
+	<?php } ?>
+      </div><!-- end of the left (by default at least) column -->
+      <div class="visualClear"></div>
+      <div id="footer">
+    <?php if($this->data['poweredbyico']) { ?><div id="f-poweredbyico"><?php $this->html('poweredbyico') ?></div><?php } ?>
+	<?php if($this->data['copyrightico']) { ?><div id="f-copyrightico"><?php $this->html('copyrightico') ?></div><?php } ?>
+	<ul id="f-list">
+	  <?php if($this->data['lastmod'   ]) { ?><li id="f-lastmod"><?php    $this->html('lastmod')    ?></li><?php } ?>
+	  <?php if($this->data['numberofwatchingusers' ]) { ?><li id="f-numberofwatchingusers"><?php  $this->html('numberofwatchingusers') ?></li><?php } ?>
+	  <?php if($this->data['credits'   ]) { ?><li id="f-credits"><?php    $this->html('credits')    ?></li><?php } ?>
+	  <?php if($this->data['copyright' ]) { ?><li id="f-copyright"><?php  $this->html('copyright')  ?></li><?php } ?>
+	  <?php if($this->data['about'     ]) { ?><li id="f-about"><?php      $this->html('about')      ?></li><?php } ?>
+	  <?php if($this->data['disclaimer']) { ?><li id="f-disclaimer"><?php $this->html('disclaimer') ?></li><?php } ?>
+	  <?php if($this->data['tagline']) { ?><li id="f-tagline"><?php echo $this->data['tagline'] ?></li><?php } ?>
+	</ul>
+      </div>
+    </div>
+  </body>
+</html>
+<?php
+		wfRestoreWarnings();
+	}
+}
+?>
Index: /MediaWiki/branches/1.11/skins/disabled/MonoBook.tpl
===================================================================
--- /MediaWiki/branches/1.11/skins/disabled/MonoBook.tpl	(revision 1280)
+++ /MediaWiki/branches/1.11/skins/disabled/MonoBook.tpl	(revision 1280)
@@ -0,0 +1,200 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="{lang}" lang="{lang}" dir="{dir}">
+<head>
+	<meta http-equiv="Content-Type" content="{~ mimetype}; charset={~ charset}" />
+	{headlinks}
+	{headscripts}
+	<title>{pagetitle}</title>
+	<style type="text/css" media="screen,projection">/*<![CDATA[*/ @import "{~ stylepath}/{~ stylename}/main.css?5"; /*]]>*/</style>
+	<link rel="stylesheet" type="text/css" {if notprintable {media="print"}} href="{~ stylepath}/common/commonPrint.css" />
+	<!--[if lt IE 5.5000]><style type="text/css">@import "{~ stylepath}/{~ stylename}/IE50Fixes.css";</style><![endif]-->
+	<!--[if IE 5.5000]><style type="text/css">@import "{~ stylepath}/{~ stylename}/IE55Fixes.css";</style><![endif]-->
+	<!--[if IE 6]><style type="text/css">@import "{~ stylepath}/{~ stylename}/IE60Fixes.css";</style><![endif]-->
+	<!--[if IE 7]><style type="text/css">@import "{~ stylepath}/{~ stylename}/IE70Fixes.css?1";</style><![endif]-->
+	<!--[if lt IE 7]><script type="{jsmimetype}" src="{~ stylepath}/common/IEFixes.js"></script>
+	<meta http-equiv="imagetoolbar" content="no" /><![endif]-->
+	<script type="{jsmimetype}">var skin = '{~ skinname}';var stylepath = '{~ stylepath}';</script>
+	<script type="{jsmimetype}" src="{~ stylepath}/common/wikibits.js"><!-- wikibits js --></script>
+	{if jsvarurl {<script type="{jsmimetype}" src="{jsvarurl}"><!-- site js --></script>}}
+	{if pagecss {<style type="text/css">{pagecss}</style>}}
+	{usercss}
+	{sitecss}
+	{gencss}
+	{if userjs {<script type="{jsmimetype}" src="{userjs}"></script>}}
+	{if userjsprev {<script type="{jsmimetype}">{userjsprev}</script>}}
+	{trackbackhtml}
+</head>
+<body {if body_ondblclick {ondblclick="{body_ondblclick}"}} {if body_onload {onload="{body_onload}" }} class="{~ nsclass} {~ dir}">
+<div id="globalWrapper">
+	<div id="column-content">
+		<div id="content">
+			<a name="top" id="top"></a>
+			{if sitenotice {<div id="siteNotice">{sitenotice}</div> }}
+			<h1 class="firstHeading">{title}</h1>
+			<div id="bodyContent">
+				<h3 id="siteSub">{msg {tagline}}</h3>
+				<div id="contentSub">{subtitle}</div>
+				{if undelete {<div id="contentSub2"><span class="subpages">{undelete}</span></div> }}
+				{if newtalk {<div class="usermessage">{newtalk}</div> }}
+				{if showjumplinks {
+					<div id="jump-to-nav">{msg {jumpto}} <a href="#column-one">{msg {jumptonavigation}}</a>, 
+					<a href="#searchInput">{msg {jumptosearch}}</a></div> 
+				}}
+				<!-- start content -->
+				{bodytext}
+				{if catlinks {<div id="catlinks">{catlinks}</div> }}
+				<!-- end content -->
+				<div class="visualClear"></div>
+			</div>
+		</div>
+	</div>
+	<div id="column-one">
+		<div id="p-cactions" class="portlet">
+			<h5>{msg {views}}</h5>
+			<ul>
+				{if is_special {
+					<li id="ca-article" class="selected"><a href="{request_url}">{msg {specialpage}}</a></li>
+				} {
+					<li id="ca-{nskey}" {selecttab {subject} subject_newclass}><a href="{subject_url}">{msg nskey}</a></li>
+					<li id="ca-talk" {selecttab {talk} talk_newclass}><a href="{talk_url}">{msg {talk}}</a></li>
+					{if can_edit {
+						{if is_talk {
+							<li id="ca-edit" {selecttab {edit} {istalk}}><a href="{edit_url}">{msg {edit}}</a></li>
+							<li id="ca-addsection" {selecttab {addsection}}><a href="{localurl {action=edit&section=new}}">{msg {addsection}}</a></li>
+						} {
+							<li id="ca-edit" {selecttab {edit}}><a href="{edit_url}">{msg {edit}}</a></li>
+						}}
+					} {
+						<li id="ca-viewsource" {selecttab {edit}}><a href="{edit_url}">{msg {viewsource}}</a></li>
+					}}
+
+					{if article_exists {
+						<li id="ca-history" {selecttab {history}}><a href="{localurl {action=history}}">{msg {history_short}}</a></li>
+						{if {{ is_allowed {protect} }} {
+							{if is_ns_mediawiki {} {
+								{if is_protected {
+									<li id="ca-protect" {selecttab {protect}}><a href="{localurl {action=unprotect}}">{msg {unprotect}}</a></li>
+								} {
+									<li id="ca-protect" {selecttab {protect}}><a href="{localurl {action=protect}}">{msg {protect}}</a></li>
+								}}
+							}}
+						}}
+						
+						{if {{ is_allowed {delete} }} {
+								<li id="ca-delete" {selecttab {delete}}><a href="{localurl {action=delete}}">{msg {delete}}</a></li>
+						}}
+						{if {{ is_allowed {move} }} {
+							{if can_move {
+									<li id="ca-move" {selecttab {move}}><a href="{move_url}">{msg {move}}</a></li>
+							}}
+						}}
+						{if is_loggedin {
+							{if is_watching {
+								<li id="ca-unwatch" {selecttab {watch}}><a href="{localurl {action=unwatch}}">{msg {unwatch}}</a></li>
+							} {
+								<li id="ca-watch" {selecttab {watch}}><a href="{localurl {action=watch}}">{msg {watch}}</a></li>
+							}}
+						}}
+					}}
+				}}
+				{extratabs {<li id="ca-$id" $class><a href="$href">$text</a></li>}}
+			</ul>
+		</div>
+		<div class="portlet" id="p-personal">
+			<h5>{msg {personaltools}}</h5>
+			<div class="pBody">
+				<ul>						
+					{personal_urls { <li id="pt-$key" $classactive ><a href="$href" $class>$text</a></li> }}
+				</ul>
+			</div>
+		</div>
+		<div class="portlet" id="p-logo">
+			<a style="background-image: url({~ logopath});" href="{mainpage}" title="{msg {mainpage}}"></a>
+		</div>
+		<script type="{jsmimetype}"> if (window.isMSIE55) fixalpha(); </script>
+		{sidebar {
+			<div class='portlet' id="p-$bar">
+				<h5>$barname</h5>
+				<div class='pBody'>
+				<ul>
+		} {
+				</ul>
+				</div>
+			</div>
+		} {<li id="$id" $classactive><a href="$href">$text</a></li>
+			}
+		}
+
+		<div id="p-search" class="portlet">
+			<h5><label for="searchInput">{msg {search}}</label></h5>
+			<div id="searchBody" class="pBody">
+				<form action="{searchaction}" id="searchform"><div>
+					<input id="searchInput" name="search" type="text" {
+						}{if {{fallbackmsg {accesskey-search} {} }} {accesskey="{fallbackmsg {accesskey-search} {} }"}}{
+						}{if search { value="{search}"}} />
+					<input type='submit' name="go" class="searchButton" id="searchGoButton"	value="{msg {go}}" />&nbsp;
+					<input type='submit' name="fulltext" class="searchButton" value="{msg {search}}" />
+				</div></form>
+			</div>
+		</div>
+		<div class="portlet" id="p-tb">
+			<h5>{msg {toolbox}}</h5>
+			<div class="pBody">
+				<ul>
+					{if notspecialpage    {<li id="t-whatlinkshere"><a href="{nav_whatlinkshere}">{msg {whatlinkshere}}</a></li> }}
+					{if article_exists {<li id="t-recentchangeslinked"><a href="{nav_recentchangeslinked}">{msg {recentchangeslinked}}</a></li> }}
+					{if nav_trackbacklink {<li id="t-trackbacklink"><a href="{nav_trackbacklink}">{msg {trackbacklink}}</a></li>}}
+					{if feeds
+						{<li id="feedlinks">{feeds {<span id="feed-$key"><a href="$href">$text</a>&nbsp;</span>}}
+					</li>}}
+					{if is_userpage {
+						<li id="t-contributions"><a href="{nav_contributions}">{msg {contributions}}</a></li>
+						{if {{is_allowed {block}}} {<li id="t-blockip"><a href="{nav_blockip}">{msg {blockip}}</a></li>}}
+						{if is_loggedin     {<li id="t-emailuser"><a href="{nav_emailuser}">{msg {emailuser}}</a></li>}}
+					}}
+					{if nav_upload        {<li id="t-upload"><a href="{nav_upload}">{msg {upload}}</a></li>}}
+					{if nav_specialpages  {<li id="t-specialpages"><a href="{nav_specialpages}">{msg {specialpages}}</a></li>}}
+					{if nav_print         {<li id="t-print"><a href="{nav_print}">{msg {printableversion}}</a></li>}}
+					{if nav_permalink     {<li id="t-permalink"><a href="{nav_permalink}">{msg {permalink}}</a></li>}}
+					{if is_permalink      {<li id="t-ispermalink">{msg {permalink}}</li>}}
+
+					{toolboxend}
+				</ul>
+			</div>
+		</div>
+		{language_urls {
+			<div id="p-lang" class="portlet">
+				<h5>{msg {otherlanguages}}</h5>
+				<div class="pBody">
+					<ul>
+						$body
+					</ul>
+				</div>
+			</div>
+		} {
+			<li class="$class"><a href="$href">$text</a></li>
+		}}	
+	</div><!-- end of the left (by default at least) column -->
+	<div class="visualClear"></div>
+	<div id="footer">
+		{if poweredbyico { <div id="f-poweredbyico">{poweredbyico}</div> }}
+		{if copyrightico { <div id="f-copyrightico">{copyrightico}</div> }}
+
+		<ul id="f-list">
+			{if lastmod                {  <li id="lastmod">{lastmod}</li> }}
+			{if viewcount              {  <li id="viewcount">{viewcount}</li> }}
+			{if numberofwatchingusers  {  <li id="numberofwatchingusers">{numberofwatchingusers}</li> }}
+			{if credits                {  <li id="credits">{credits}</li> }}
+			{if is_currentview         {  <li id="copyright">{normalcopyright}</li> }}
+			{if usehistorycopyright    {  <li id="copyright">{historycopyright}</li> }}
+			{if privacy                {  <li id="privacy">{privacy}</li> }}
+			{if about                  {  <li id="about">{about}</li> }}
+			{if disclaimer             {  <li id="disclaimer">{disclaimer}</li> }}
+			{if tagline                {  <li id="tagline">{tagline}</li> }}
+		</ul>
+	</div>
+	<script type="text/javascript"> if (window.runOnloadHook) runOnloadHook();</script>
+</div>
+{reporttime}
+{if {} { vim: set syn=html ts=2 : }}
+</body></html>
Index: /MediaWiki/branches/1.11/skins/disabled/MonoBookCBT.php
===================================================================
--- /MediaWiki/branches/1.11/skins/disabled/MonoBookCBT.php	(revision 1280)
+++ /MediaWiki/branches/1.11/skins/disabled/MonoBookCBT.php	(revision 1280)
@@ -0,0 +1,1389 @@
+<?php
+
+if ( !defined( 'MEDIAWIKI' ) ) {
+	die( "This file is part of MediaWiki, it is not a valid entry point\n" );
+}
+
+require_once( 'includes/cbt/CBTProcessor.php' );
+require_once( 'includes/cbt/CBTCompiler.php' );
+require_once( 'includes/SkinTemplate.php' );
+
+/**
+ * MonoBook clone using the new dependency-tracking template processor.
+ * EXPERIMENTAL - use only for testing and profiling at this stage.
+ *
+ * See includes/cbt/README for an explanation.
+ *
+ * The main thing that's missing is cache invalidation, on change of:
+ *   * messages
+ *   * user preferences
+ *   * source template
+ *   * source code and configuration files
+ *
+ * The other thing is that lots of dependencies that are declared in the callbacks
+ * are not intelligently handled. There's some room for improvement there.
+ *
+ * The class is derived from SkinTemplate, but that's only temporary. Eventually 
+ * it'll be derived from Skin, and I've avoided using SkinTemplate functions as 
+ * much as possible. In fact, the only SkinTemplate dependencies I know of at the 
+ * moment are the functions to generate the gen=css and gen=js files. 
+ * 
+ */
+class SkinMonoBookCBT extends SkinTemplate {
+	var $mOut, $mTitle;
+	var $mStyleName = 'monobook';
+	var $mCompiling = false;
+	var $mFunctionCache = array();
+
+	/******************************************************
+	 * General functions                                  *
+	 ******************************************************/
+	
+	/** Execute the template and write out the result */
+	function outputPage( &$out ) {
+		echo $this->execute( $out );
+	}
+
+	function execute( &$out ) {
+		global $wgTitle, $wgStyleDirectory, $wgParserCacheType;
+		$fname = 'SkinMonoBookCBT::execute';
+		wfProfileIn( $fname );
+		wfProfileIn( "$fname-setup" );
+		Skin::initPage( $out );
+		
+		$this->mOut =&	$out;
+		$this->mTitle =& $wgTitle;
+
+		$sourceFile = "$wgStyleDirectory/MonoBook.tpl";
+
+		wfProfileOut( "$fname-setup" );
+	
+		if ( $wgParserCacheType == CACHE_NONE ) {
+			$template = file_get_contents( $sourceFile );
+			$text = $this->executeTemplate( $template );
+		} else {
+			$compiled = $this->getCompiledTemplate( $sourceFile );
+			
+			wfProfileIn( "$fname-eval" );
+			$text = eval( $compiled );
+			wfProfileOut( "$fname-eval" );
+		}
+		wfProfileOut( $fname );
+		return $text;
+	}
+
+	function getCompiledTemplate( $sourceFile ) {
+		global $wgDBname, $wgMemc, $wgRequest, $wgUser, $parserMemc;
+		$fname = 'SkinMonoBookCBT::getCompiledTemplate';
+
+		$expiry = 3600;
+		
+		// Sandbox template execution
+		if ( $this->mCompiling ) {
+			return;
+		}
+		
+		wfProfileIn( $fname );
+
+		// Is the request an ordinary page view?
+		if ( $wgRequest->wasPosted() || 
+				count( array_diff( array_keys( $_GET ), array( 'title', 'useskin', 'recompile' ) ) ) != 0 ) 
+		{
+			$type = 'nonview';
+		} else {
+			$type = 'view';
+		}
+
+		// Per-user compiled template
+		// Put all logged-out users on the same cache key
+		$cacheKey = "$wgDBname:monobookcbt:$type:" . $wgUser->getId();
+
+		$recompile = $wgRequest->getVal( 'recompile' );
+		if ( $recompile == 'user' ) {
+			$recompileUser = true;
+			$recompileGeneric = false;
+		} elseif ( $recompile ) {
+			$recompileUser = true;
+			$recompileGeneric = true;
+		} else {
+			$recompileUser = false;
+			$recompileGeneric = false;
+		}
+		
+		if ( !$recompileUser ) { 
+			$php = $parserMemc->get( $cacheKey );
+		}
+		if ( $recompileUser || !$php ) {
+			if ( $wgUser->isLoggedIn() ) {
+				// Perform staged compilation
+				// First compile a generic template for all logged-in users
+				$genericKey = "$wgDBname:monobookcbt:$type:loggedin";
+				if ( !$recompileGeneric ) {
+					$template = $parserMemc->get( $genericKey );
+				}
+				if ( $recompileGeneric || !$template ) {
+					$template = file_get_contents( $sourceFile );
+					$ignore = array( 'loggedin', '!loggedin dynamic' );
+					if ( $type == 'view' ) {
+						$ignore[] = 'nonview dynamic';
+					}
+					$template = $this->compileTemplate( $template, $ignore );
+					$parserMemc->set( $genericKey, $template, $expiry );
+				}
+			} else {
+				$template = file_get_contents( $sourceFile );
+			}
+
+			$ignore = array( 'lang', 'loggedin', 'user' );
+			if ( $wgUser->isLoggedIn() ) {
+				$ignore[] = '!loggedin dynamic';
+			} else {
+				$ignore[] = 'loggedin dynamic';
+			}
+			if ( $type == 'view' ) {
+				$ignore[] = 'nonview dynamic';
+			}
+			$compiled = $this->compileTemplate( $template, $ignore );
+
+			// Reduce whitespace
+			// This is done here instead of in CBTProcessor because we can be 
+			// more sure it is safe here.
+			$compiled = preg_replace( '/^[ \t]+/m', '', $compiled );
+			$compiled = preg_replace( '/[\r\n]+/', "\n", $compiled );
+
+			// Compile to PHP
+			$compiler = new CBTCompiler( $compiled );
+			$ret = $compiler->compile();
+			if ( $ret !== true ) {
+				echo $ret;
+				wfErrorExit();
+			}
+			$php = $compiler->generatePHP( '$this' );
+
+			$parserMemc->set( $cacheKey, $php, $expiry );
+		}
+		wfProfileOut( $fname );
+		return $php;
+	}
+
+	function compileTemplate( $template, $ignore ) {
+		$tp = new CBTProcessor( $template, $this, $ignore );
+		$tp->mFunctionCache = $this->mFunctionCache;
+
+		$this->mCompiling = true;
+		$compiled = $tp->compile();
+		$this->mCompiling = false;
+
+		if ( $tp->getLastError() ) {
+			// If there was a compile error, don't save the template
+			// Instead just print the error and exit
+			echo $compiled;
+			wfErrorExit();
+		}
+		$this->mFunctionCache = $tp->mFunctionCache;
+		return $compiled;
+	}
+
+	function executeTemplate( $template ) {
+		$fname = 'SkinMonoBookCBT::executeTemplate';
+		wfProfileIn( $fname );
+		$tp = new CBTProcessor( $template, $this );
+		$tp->mFunctionCache = $this->mFunctionCache;
+		
+		$this->mCompiling = true;
+		$text = $tp->execute();
+		$this->mCompiling = false;
+
+		$this->mFunctionCache = $tp->mFunctionCache;
+		wfProfileOut( $fname );
+		return $text;
+	}
+	
+	/******************************************************
+	 * Callbacks                                          *
+	 ******************************************************/
+
+	function lang() { return $GLOBALS['wgContLanguageCode']; }
+
+	function dir() {
+		global $wgContLang;
+		return $wgContLang->isRTL() ? 'rtl' : 'ltr';
+	}
+	
+	function mimetype() { return $GLOBALS['wgMimeType']; }
+	function charset() { return $GLOBALS['wgOutputEncoding']; }
+	function headlinks() { 
+		return cbt_value( $this->mOut->getHeadLinks(), 'dynamic' );
+	}
+	function headscripts() { 
+		return cbt_value( $this->mOut->getScript(), 'dynamic' );
+	}
+	
+	function pagetitle() { 
+		return cbt_value( $this->mOut->getHTMLTitle(), array( 'title', 'lang' ) ); 
+	}
+	
+	function stylepath() { return $GLOBALS['wgStylePath']; }
+	function stylename() { return $this->mStyleName; }
+	
+	function notprintable() {
+		global $wgRequest;
+		return cbt_value( !$wgRequest->getBool( 'printable' ), 'nonview dynamic' );
+	}
+	
+	function jsmimetype() { return $GLOBALS['wgJsMimeType']; }
+	
+	function jsvarurl() {
+		global $wgUseSiteJs, $wgUser;
+		if ( !$wgUseSiteJs ) return '';
+		
+		if ( $wgUser->isLoggedIn() ) {
+			$url = self::makeUrl( '-','action=raw&smaxage=0&gen=js' );
+		} else {
+			$url = self::makeUrl( '-','action=raw&gen=js' );
+		}
+		return cbt_value( $url, 'loggedin' );
+	}
+	
+	function pagecss() {
+		global $wgHooks;
+		
+		$out = false;
+		wfRunHooks( 'SkinTemplateSetupPageCss', array( &$out ) );
+
+		// Unknown dependencies
+		return cbt_value( $out, 'dynamic' );
+	}
+	
+	function usercss() {
+		if ( $this->isCssPreview() ) {
+			global $wgRequest;
+			$usercss = $this->makeStylesheetCdata( $wgRequest->getText('wpTextbox1') );
+		} else {
+			$usercss = $this->makeStylesheetLink( self::makeUrl($this->getUserPageText() . 
+				'/'.$this->mStyleName.'.css', 'action=raw&ctype=text/css' ) );
+		}
+
+		// Dynamic when not an ordinary page view, also depends on the username
+		return cbt_value( $usercss, array( 'nonview dynamic', 'user' ) );
+	}
+	
+	function sitecss() {
+		global $wgUseSiteCss;
+		if ( !$wgUseSiteCss ) {
+			return '';
+		}
+
+		global $wgSquidMaxage, $wgContLang, $wgStylePath;
+			
+		$query = "action=raw&ctype=text/css&smaxage=$wgSquidMaxage";
+		
+		$sitecss = '';
+		if ( $wgContLang->isRTL() ) {
+			$sitecss .= $this->makeStylesheetLink( $wgStylePath . '/' . $this->mStyleName . '/rtl.css' ) . "\n";
+		}
+
+		$sitecss .= $this->makeStylesheetLink( self::makeNSUrl( 'Common.css', $query, NS_MEDIAWIKI ) ) . "\n";
+		$sitecss .= $this->makeStylesheetLink( self::makeNSUrl( ucfirst( $this->mStyleName ) . '.css', $query, NS_MEDIAWIKI ) ) . "\n";
+
+		// No deps
+		return $sitecss;
+	}
+
+	function gencss() {
+		global $wgUseSiteCss;
+		if ( !$wgUseSiteCss ) return '';
+		
+		global $wgSquidMaxage, $wgUser, $wgAllowUserCss;
+		if ( $this->isCssPreview() ) {
+			$siteargs = '&smaxage=0&maxage=0';
+		} else {
+			$siteargs = '&maxage=' . $wgSquidMaxage;
+		}
+		if ( $wgAllowUserCss && $wgUser->isLoggedIn() ) {
+			$siteargs .= '&ts={user_touched}';
+			$isTemplate = true;
+		} else {
+			$isTemplate = false;
+		}
+		
+		$link = $this->makeStylesheetLink( self::makeUrl('-','action=raw&gen=css' . $siteargs) ) . "\n";
+
+		if ( $wgAllowUserCss ) {
+			$deps = 'loggedin';
+		} else { 
+			$deps = array();
+		}
+		return cbt_value( $link, $deps, $isTemplate );
+	}
+	
+	function user_touched() {
+		global $wgUser;
+		return cbt_value( $wgUser->mTouched, 'dynamic' );
+	}
+		
+	function userjs() {
+		global $wgAllowUserJs, $wgJsMimeType;
+		if ( !$wgAllowUserJs ) return '';
+		
+		if ( $this->isJsPreview() ) {
+			$url = '';
+		} else {
+			$url = self::makeUrl($this->getUserPageText().'/'.$this->mStyleName.'.js', 'action=raw&ctype='.$wgJsMimeType.'&dontcountme=s');
+		}
+		return cbt_value( $url, array( 'nonview dynamic', 'user' ) );
+	}
+	
+	function userjsprev() {
+		global $wgAllowUserJs, $wgRequest;
+		if ( !$wgAllowUserJs ) return '';
+		if ( $this->isJsPreview() ) {
+			$js = '/*<![CDATA[*/ ' . $wgRequest->getText('wpTextbox1') . ' /*]]>*/';
+		} else {
+			$js = '';
+		}
+		return cbt_value( $js, array( 'nonview dynamic' ) );
+	}
+	
+	function trackbackhtml() {
+		global $wgUseTrackbacks;
+		if ( !$wgUseTrackbacks ) return '';
+
+		if ( $this->mOut->isArticleRelated() ) {
+			$tb = $this->mTitle->trackbackRDF();
+		} else {
+			$tb = '';
+		}
+		return cbt_value( $tb, 'dynamic' );
+	}
+	
+	function body_ondblclick() {
+		global $wgUser;
+		if( $this->isEditable() && $wgUser->getOption("editondblclick") ) {
+			$js = 'document.location = "' . $this->getEditUrl() .'";';
+		} else {
+			$js = '';
+		}
+
+		if ( User::getDefaultOption('editondblclick') ) {
+			return cbt_value( $js, 'user', 'title' );
+		} else {
+			// Optimise away for logged-out users
+			return cbt_value( $js, 'loggedin dynamic' );
+		}
+	}
+	
+	function body_onload() {
+		global $wgUser;
+		if ( $this->isEditable() && $wgUser->getOption( 'editsectiononrightclick' ) ) {
+			$js = 'setupRightClickEdit()';
+		} else {
+			$js = '';
+		}
+		return cbt_value( $js, 'loggedin dynamic' );
+	}
+	
+	function nsclass() {
+		return cbt_value( 'ns-' . $this->mTitle->getNamespace(), 'title' );
+	}
+	
+	function sitenotice() {
+		// Perhaps this could be given special dependencies using our knowledge of what 
+		// wfGetSiteNotice() depends on.
+		return cbt_value( wfGetSiteNotice(), 'dynamic' );
+	}
+	
+	function title() {
+		return cbt_value( $this->mOut->getPageTitle(), array( 'title', 'lang' ) );
+	}
+
+	function title_urlform() {
+		return cbt_value( $this->getThisTitleUrlForm(), 'title' );
+	}
+
+	function title_userurl() {
+		return cbt_value( urlencode( $this->mTitle->getDBkey() ), 'title' );
+	}
+
+	function subtitle() {
+		$subpagestr = $this->subPageSubtitle();
+		if ( !empty( $subpagestr ) ) {
+			$s = '<span class="subpages">'.$subpagestr.'</span>'.$this->mOut->getSubtitle();
+		} else {
+			$s = $this->mOut->getSubtitle();
+		}
+		return cbt_value( $s, array( 'title', 'nonview dynamic' ) );
+	}
+	
+	function undelete() {
+		return cbt_value( $this->getUndeleteLink(), array( 'title', 'lang' ) );
+	}
+	
+	function newtalk() {
+		global $wgUser, $wgDBname;
+		$newtalks = $wgUser->getNewMessageLinks();
+
+		if (count($newtalks) == 1 && $newtalks[0]["wiki"] === $wgDBname) {
+			$usertitle = $this->getUserPageTitle();
+			$usertalktitle = $usertitle->getTalkPage();
+			if( !$usertalktitle->equals( $this->mTitle ) ) {
+				$ntl = wfMsg( 'youhavenewmessages',
+					$this->makeKnownLinkObj(
+						$usertalktitle,
+						wfMsgHtml( 'newmessageslink' ),
+						'redirect=no'
+					),
+					$this->makeKnownLinkObj(
+						$usertalktitle,
+						wfMsgHtml( 'newmessagesdifflink' ),
+						'diff=cur'
+					)
+				);
+				# Disable Cache
+				$this->mOut->setSquidMaxage(0);
+			}
+		} else if (count($newtalks)) {
+			$sep = str_replace("_", " ", wfMsgHtml("newtalkseperator"));
+			$msgs = array();
+			foreach ($newtalks as $newtalk) {
+				$msgs[] = wfElement("a", 
+					array('href' => $newtalk["link"]), $newtalk["wiki"]);
+			}
+			$parts = implode($sep, $msgs);
+			$ntl = wfMsgHtml('youhavenewmessagesmulti', $parts);
+			$this->mOut->setSquidMaxage(0);
+		} else {
+			$ntl = '';
+		}
+		return cbt_value( $ntl, 'dynamic' );
+	}
+	
+	function showjumplinks() {
+		global $wgUser;
+		return cbt_value( $wgUser->getOption( 'showjumplinks' ) ? 'true' : '', 'user' );
+	}
+	
+	function bodytext() {
+		return cbt_value( $this->mOut->getHTML(), 'dynamic' );
+	}
+	
+	function catlinks() {
+		if ( !isset( $this->mCatlinks ) ) {
+			$this->mCatlinks = $this->getCategories();
+		}
+		return cbt_value( $this->mCatlinks, 'dynamic' );
+	}
+	
+	function extratabs( $itemTemplate ) {
+		global $wgContLang, $wgDisableLangConversion;
+		
+		$etpl = cbt_escape( $itemTemplate );
+
+		/* show links to different language variants */
+		$variants = $wgContLang->getVariants();
+		$s = '';
+		if ( !$wgDisableLangConversion && count( $wgContLang->getVariants() ) > 1 ) {
+			$vcount=0;
+			foreach ( $variants as $code ) {
+				$name = $wgContLang->getVariantname( $code );
+				if ( $name == 'disable' ) {
+					continue;
+				}
+				$code = cbt_escape( $code );
+				$name = cbt_escape( $name );
+				$s .= "{ca_variant {{$code}} {{$name}} {{$vcount}} {{$etpl}}}\n";
+				$vcount ++;
+			}
+		}
+		return cbt_value( $s, array(), true );
+	}
+
+	function is_special() { return cbt_value( $this->mTitle->getNamespace() == NS_SPECIAL, 'title' ); }
+	function can_edit() { return cbt_value( (string)($this->mTitle->userCan( 'edit' )), 'dynamic' ); }
+	function can_move() { return cbt_value( (string)($this->mTitle->userCan( 'move' )), 'dynamic' ); }
+	function is_talk() { return cbt_value( (string)($this->mTitle->isTalkPage()), 'title' ); }
+	function is_protected() { return cbt_value( (string)$this->mTitle->isProtected(), 'dynamic' ); }
+	function nskey() { return cbt_value( $this->mTitle->getNamespaceKey(), 'title' ); }
+
+	function request_url() {
+		global $wgRequest;
+		return cbt_value( $wgRequest->getRequestURL(), 'dynamic' );
+	}
+
+	function subject_url() { 
+		$title = $this->getSubjectPage();
+		if ( $title->exists() ) {
+			$url = $title->getLocalUrl();
+		} else {
+			$url = $title->getLocalUrl( 'action=edit' );
+		}
+		return cbt_value( $url, 'title' ); 
+	}
+
+	function talk_url() {
+		$title = $this->getTalkPage();
+		if ( $title->exists() ) {
+			$url = $title->getLocalUrl();
+		} else {
+			$url = $title->getLocalUrl( 'action=edit' );
+		}
+		return cbt_value( $url, 'title' );
+	}
+
+	function edit_url() {
+		return cbt_value( $this->getEditUrl(), array( 'title', 'nonview dynamic' ) );
+	}
+
+	function move_url() {
+		return cbt_value( $this->makeSpecialParamUrl( 'Movepage' ), array(), true );
+	}
+
+	function localurl( $query ) {
+		return cbt_value( $this->mTitle->getLocalURL( $query ), 'title' );
+	}
+
+	function selecttab( $tab, $extraclass = '' ) {
+		if ( !isset( $this->mSelectedTab ) ) {
+			$prevent_active_tabs = false ;
+			wfRunHooks( 'SkinTemplatePreventOtherActiveTabs', array( &$this , &$preventActiveTabs ) );
+
+			$actionTabs = array(
+				'edit' => 'edit',
+				'submit' => 'edit',
+				'history' => 'history',
+				'protect' => 'protect',
+				'unprotect' => 'protect',
+				'delete' => 'delete',
+				'watch' => 'watch',
+				'unwatch' => 'watch',
+			);
+			if ( $preventActiveTabs ) {
+				$this->mSelectedTab = false;
+			} else {
+				$action = $this->getAction();
+				$section = $this->getSection();
+				
+				if ( isset( $actionTabs[$action] ) ) {
+					$this->mSelectedTab = $actionTabs[$action];
+
+					if ( $this->mSelectedTab == 'edit' && $section == 'new' ) {
+						$this->mSelectedTab = 'addsection';
+					}
+				} elseif ( $this->mTitle->isTalkPage() ) {
+					$this->mSelectedTab = 'talk';
+				} else {
+					$this->mSelectedTab = 'subject';
+				}
+			}
+		}
+		if ( $extraclass ) {
+			if ( $this->mSelectedTab == $tab ) {
+				$s = 'class="selected ' . htmlspecialchars( $extraclass ) . '"';
+			} else {
+				$s = 'class="' . htmlspecialchars( $extraclass ) . '"';
+			}			
+		} else {
+			if ( $this->mSelectedTab == $tab ) {
+				$s = 'class="selected"';
+			} else {
+				$s = '';
+			}
+		}
+		return cbt_value( $s, array( 'nonview dynamic', 'title' ) );
+	}
+
+	function subject_newclass() {
+		$title = $this->getSubjectPage();
+		$class = $title->exists() ? '' : 'new';
+		return cbt_value( $class, 'dynamic' );
+	}
+
+	function talk_newclass() {
+		$title = $this->getTalkPage();
+		$class = $title->exists() ? '' : 'new';
+		return cbt_value( $class, 'dynamic' );
+	}	
+
+	function ca_variant( $code, $name, $index, $template ) {
+		global $wgContLang;
+		$selected = ($code == $wgContLang->getPreferredVariant());
+		$action = $this->getAction();
+		$actstr = '';
+		if( $action )
+			$actstr = 'action=' . $action . '&';
+		$s = strtr( $template, array( 
+			'$id' => htmlspecialchars( 'varlang-' . $index ),
+			'$class' => $selected ? 'class="selected"' : '',
+			'$text' => $name,
+			'$href' => htmlspecialchars( $this->mTitle->getLocalUrl( $actstr . 'variant=' . $code ) )
+		));
+		return cbt_value( $s, 'dynamic' );
+	}
+
+	function is_watching() {
+		return cbt_value( (string)$this->mTitle->userIsWatching(), array( 'dynamic' ) );
+	}
+
+	
+	function personal_urls( $itemTemplate ) {
+		global $wgShowIPinHeader, $wgContLang;
+
+		# Split this function up into many small functions, to obtain the
+		# best specificity in the dependencies of each one. The template below 
+		# has no dependencies, so its generation, and any static subfunctions,
+		# can be optimised away.
+		$etpl = cbt_escape( $itemTemplate );
+		$s = "
+			{userpage {{$etpl}}}
+			{mytalk {{$etpl}}}
+			{preferences {{$etpl}}}
+			{watchlist {{$etpl}}}
+			{mycontris {{$etpl}}}
+			{logout {{$etpl}}}
+		";
+
+		if ( $wgShowIPinHeader ) {
+			$s .= "
+				{anonuserpage {{$etpl}}}
+				{anontalk {{$etpl}}}
+				{anonlogin {{$etpl}}}
+			";
+		} else {
+			$s .= "{login {{$etpl}}}\n";
+		}
+		// No dependencies
+		return cbt_value( $s, array(), true /*this is a template*/ );
+	}
+
+	function userpage( $itemTemplate ) {
+		global $wgUser;
+		if ( $this->isLoggedIn() ) {
+			$userPage = $this->getUserPageTitle();
+			$s = $this->makeTemplateLink( $itemTemplate, 'userpage', $userPage, $wgUser->getName() );
+		} else {
+			$s = '';
+		}
+		return cbt_value( $s, 'user' );
+	}
+	
+	function mytalk( $itemTemplate ) {
+		global $wgUser;
+		if ( $this->isLoggedIn() ) {
+			$userPage = $this->getUserPageTitle();
+			$talkPage = $userPage->getTalkPage();
+			$s = $this->makeTemplateLink( $itemTemplate, 'mytalk', $talkPage, wfMsg('mytalk') );
+		} else {
+			$s = '';
+		}
+		return cbt_value( $s, 'user' );
+	}
+	
+	function preferences( $itemTemplate ) {
+		if ( $this->isLoggedIn() ) {
+			$s = $this->makeSpecialTemplateLink( $itemTemplate, 'preferences', 
+				'Preferences', wfMsg( 'preferences' ) );
+		} else {
+			$s = '';
+		}
+		return cbt_value( $s, array( 'loggedin', 'lang' ) );
+	}
+	
+	function watchlist( $itemTemplate ) {
+		if ( $this->isLoggedIn() ) {
+			$s = $this->makeSpecialTemplateLink( $itemTemplate, 'watchlist', 
+				'Watchlist', wfMsg( 'watchlist' ) );
+		} else {
+			$s = '';
+		}
+		return cbt_value( $s, array( 'loggedin', 'lang' ) );
+	}
+	
+	function mycontris( $itemTemplate ) {
+		if ( $this->isLoggedIn() ) {
+			global $wgUser;
+			$s = $this->makeSpecialTemplateLink( $itemTemplate, 'mycontris', 
+				"Contributions/" . $wgUser->getTitleKey(), wfMsg('mycontris') );
+		} else {
+			$s = '';
+		}
+		return cbt_value( $s, 'user' );
+	}
+	
+	function logout( $itemTemplate ) {
+		if ( $this->isLoggedIn() ) {
+			$s = $this->makeSpecialTemplateLink( $itemTemplate, 'logout', 
+				'Userlogout', wfMsg( 'userlogout' ), 
+					$this->mTitle->getNamespace() === NS_SPECIAL && $this->mTitle->getText() === 'Preferences' 
+					? '' : "returnto=" . $this->mTitle->getPrefixedURL() );
+		} else {
+			$s = '';
+		}
+		return cbt_value( $s, 'loggedin dynamic' );
+	}
+	
+	function anonuserpage( $itemTemplate ) {
+		if ( $this->isLoggedIn() ) {
+			$s = '';
+		} else {
+			global $wgUser;
+			$userPage = $this->getUserPageTitle();
+			$s = $this->makeTemplateLink( $itemTemplate, 'userpage', $userPage, $wgUser->getName() );
+		}
+		return cbt_value( $s, '!loggedin dynamic' );
+	}
+	
+	function anontalk( $itemTemplate ) {
+		if ( $this->isLoggedIn() ) {
+			$s = '';
+		} else {
+			$userPage = $this->getUserPageTitle();
+			$talkPage = $userPage->getTalkPage();
+			$s = $this->makeTemplateLink( $itemTemplate, 'mytalk', $talkPage, wfMsg('anontalk') );
+		}
+		return cbt_value( $s, '!loggedin dynamic' );
+	}
+	
+	function anonlogin( $itemTemplate ) {
+		if ( $this->isLoggedIn() ) {
+			$s = '';
+		} else {
+			$s = $this->makeSpecialTemplateLink( $itemTemplate, 'anonlogin', 'Userlogin', 
+				wfMsg( 'userlogin' ), 'returnto=' . urlencode( $this->getThisPDBK() ) );
+		}
+		return cbt_value( $s, '!loggedin dynamic' );
+	}
+	
+	function login( $itemTemplate ) {
+		if ( $this->isLoggedIn() ) {
+			$s = '';
+		} else {
+			$s = $this->makeSpecialTemplateLink( $itemTemplate, 'login', 'Userlogin', 
+				wfMsg( 'userlogin' ), 'returnto=' . urlencode( $this->getThisPDBK() ) );
+		}
+		return cbt_value( $s, '!loggedin dynamic' );
+	}
+	
+	function logopath() { return $GLOBALS['wgLogo']; }
+	function mainpage() { return self::makeMainPageUrl(); }
+	
+	function sidebar( $startSection, $endSection, $innerTpl ) {
+		$s = '';
+		$lines = explode( "\n", wfMsgForContent( 'sidebar' ) );
+		$firstSection = true;
+		foreach ($lines as $line) {
+			if (strpos($line, '*') !== 0)
+				continue;
+			if (strpos($line, '**') !== 0) {
+				$bar = trim($line, '* ');
+				$name = wfMsg( $bar ); 
+				if (wfEmptyMsg($bar, $name)) {
+					$name = $bar;
+				}
+				if ( $firstSection ) {
+					$firstSection = false;
+				} else {
+					$s .= $endSection;
+				}
+				$s .= strtr( $startSection,
+					array( 
+						'$bar' => htmlspecialchars( $bar ),
+						'$barname' => $name
+					) );
+			} else {
+				if (strpos($line, '|') !== false) { // sanity check
+					$line = explode( '|' , trim($line, '* '), 2 );
+					$link = wfMsgForContent( $line[0] );
+					if ($link == '-')
+						continue;
+					if (wfEmptyMsg($line[1], $text = wfMsg($line[1])))
+						$text = $line[1];
+					if (wfEmptyMsg($line[0], $link))
+						$link = $line[0];
+					$href = self::makeInternalOrExternalUrl( $link );
+					
+					$s .= strtr( $innerTpl,
+						array(
+							'$text' => htmlspecialchars( $text ),
+							'$href' => htmlspecialchars( $href ),
+							'$id' => htmlspecialchars( 'n-' . strtr($line[1], ' ', '-') ),
+							'$classactive' => ''
+						) );
+				} else { continue; }
+			}
+		}
+		if ( !$firstSection ) {
+			$s .= $endSection;
+		}
+
+		// Depends on user language only
+		return cbt_value( $s, 'lang' );
+	}
+	
+	function searchaction() {
+		// Static link
+		return $this->getSearchLink();
+	}
+	
+	function search() {
+		global $wgRequest;
+		return cbt_value( trim( $this->getSearch() ), 'special dynamic' );
+	}
+	
+	function notspecialpage() {
+		return cbt_value( $this->mTitle->getNamespace() != NS_SPECIAL, 'special' );
+	}
+	
+	function nav_whatlinkshere() {
+		return cbt_value( $this->makeSpecialParamUrl('Whatlinkshere' ), array(), true );
+	}
+
+	function article_exists() {
+		return cbt_value( (string)($this->mTitle->getArticleId() !== 0), 'title' );
+	}
+	
+	function nav_recentchangeslinked() {
+		return cbt_value( $this->makeSpecialParamUrl('Recentchangeslinked' ), array(), true );
+	}
+	
+	function feeds( $itemTemplate = '' ) {
+		if ( !$this->mOut->isSyndicated() ) {
+			$feeds = '';
+		} elseif ( $itemTemplate == '' ) {
+			// boolean only required
+			$feeds = 'true';
+		} else {
+			$feeds = '';
+			global $wgFeedClasses, $wgRequest;
+			foreach( $wgFeedClasses as $format => $class ) {
+				$feeds .= strtr( $itemTemplate,
+					array( 
+						'$key' => htmlspecialchars( $format ),
+						'$text' => $format,
+						'$href' => $wgRequest->appendQuery( "feed=$format" )
+					) );
+			}
+		}
+		return cbt_value( $feeds, 'special dynamic' );
+	}
+
+	function is_userpage() {
+		list( $id, $ip ) = $this->getUserPageIdIp();
+		return cbt_value( (string)($id || $ip), 'title' );
+	}
+
+	function is_ns_mediawiki() {
+		return cbt_value( (string)$this->mTitle->getNamespace() == NS_MEDIAWIKI, 'title' );
+	}
+
+	function is_loggedin() {
+		global $wgUser;
+		return cbt_value( (string)($wgUser->isLoggedIn()), 'loggedin' );
+	}
+
+	function nav_contributions() {
+		$url = $this->makeSpecialParamUrl( 'Contributions', '', '{title_userurl}' );
+		return cbt_value( $url, array(), true );
+	}
+
+	function is_allowed( $right ) {
+		global $wgUser;
+		return cbt_value( (string)$wgUser->isAllowed( $right ), 'user' );
+	}
+	
+	function nav_blockip() {
+		$url = $this->makeSpecialParamUrl( 'Blockip', '', '{title_userurl}' );
+		return cbt_value( $url, array(), true );
+	}
+	
+	function nav_emailuser() {
+		global $wgEnableEmail, $wgEnableUserEmail, $wgUser;
+		if ( !$wgEnableEmail || !$wgEnableUserEmail ) return '';
+		
+		$url = $this->makeSpecialParamUrl( 'Emailuser', '', '{title_userurl}' );
+		return cbt_value( $url, array(), true );
+	}
+	
+	function nav_upload() {
+		global $wgEnableUploads, $wgUploadNavigationUrl;
+		if ( !$wgEnableUploads ) { 
+			return '';
+		} elseif ( $wgUploadNavigationUrl ) {
+			return $wgUploadNavigationUrl;
+		} else {
+			return self::makeSpecialUrl('Upload');
+		}
+	}
+	
+	function nav_specialpages() {
+		return self::makeSpecialUrl('Specialpages');
+	}
+	
+	function nav_print() {
+		global $wgRequest, $wgArticle;
+		$action = $this->getAction();
+		$url = '';
+		if( $this->mTitle->getNamespace() !== NS_SPECIAL 
+				&& ($action == '' || $action == 'view' || $action == 'purge' ) ) 
+		{
+			$revid = $wgArticle->getLatest();
+			if ( $revid != 0 ) {
+				$url = $wgRequest->appendQuery( 'printable=yes' );
+			}
+		}
+		return cbt_value( $url, array( 'nonview dynamic', 'title' ) );
+	}
+	
+	function nav_permalink() {
+		$url = (string)$this->getPermalink();
+		return cbt_value( $url, 'dynamic' );
+	}
+
+	function nav_trackbacklink() {
+		global $wgUseTrackbacks;
+		if ( !$wgUseTrackbacks ) return '';
+
+		return cbt_value( $this->mTitle->trackbackURL(), 'title' );
+	}
+	
+	function is_permalink() {
+		return cbt_value( (string)($this->getPermalink() === false), 'nonview dynamic' );
+	}
+	
+	function toolboxend() {
+		// This is where the MonoBookTemplateToolboxEnd hook went in the old skin
+		return '';
+	}
+	
+	function language_urls( $outer, $inner ) {
+		global $wgHideInterlanguageLinks, $wgOut, $wgContLang;
+		if ( $wgHideInterlanguageLinks ) return '';
+
+		$links = $wgOut->getLanguageLinks();
+		$s = '';
+		if ( count( $links ) ) {
+			foreach( $links as $l ) {
+				$tmp = explode( ':', $l, 2 );
+				$nt = Title::newFromText( $l );
+				$s .= strtr( $inner,
+					array(
+						'$class' => htmlspecialchars( 'interwiki-' . $tmp[0] ),
+						'$href' => htmlspecialchars( $nt->getFullURL() ),
+						'$text' => ($wgContLang->getLanguageName( $nt->getInterwiki() ) != ''?
+							$wgContLang->getLanguageName( $nt->getInterwiki() ) : $l ),
+					)
+				);
+			}
+			$s = str_replace( '$body', $s, $outer );
+		}
+		return cbt_value( $s, 'dynamic' );
+	}
+	
+	function poweredbyico() { return $this->getPoweredBy(); }
+	function copyrightico() { return $this->getCopyrightIcon(); }
+
+	function lastmod() { 
+		global $wgMaxCredits;
+		if ( $wgMaxCredits ) return '';
+
+		if ( !isset( $this->mLastmod ) ) {
+			if ( $this->isCurrentArticleView() ) {
+				$this->mLastmod = $this->lastModified(); 
+			} else {
+				$this->mLastmod = '';
+			}
+		}
+		return cbt_value( $this->mLastmod, 'dynamic' );
+	}
+	
+	function viewcount() {
+		global $wgDisableCounters;
+		if ( $wgDisableCounters ) return '';
+		
+		global $wgLang, $wgArticle;
+		if ( is_object( $wgArticle ) ) {
+			$viewcount = $wgLang->formatNum( $wgArticle->getCount() );
+			if ( $viewcount ) {
+				$viewcount = wfMsg( "viewcount", $viewcount );
+			} else {
+				$viewcount = '';
+			}
+		} else {
+			$viewcount = '';
+		}
+		return cbt_value( $viewcount, 'dynamic' );
+   	}
+	
+	function numberofwatchingusers() {
+		global $wgPageShowWatchingUsers;
+		if ( !$wgPageShowWatchingUsers ) return '';
+
+		$dbr = wfGetDB( DB_SLAVE );
+		extract( $dbr->tableNames( 'watchlist' ) );
+		$sql = "SELECT COUNT(*) AS n FROM $watchlist
+			WHERE wl_title='" . $dbr->strencode($this->mTitle->getDBKey()) .
+			"' AND  wl_namespace=" . $this->mTitle->getNamespace() ;
+		$res = $dbr->query( $sql, 'SkinTemplate::outputPage');
+		$row = $dbr->fetchObject( $res );
+		$num = $row->n;
+		if ($num > 0) {
+			$s = wfMsg('number_of_watching_users_pageview', $num);
+		} else {
+			$s = '';
+		}
+		return cbt_value( $s, 'dynamic' );
+	}
+	
+	function credits() {
+		global $wgMaxCredits;
+		if ( !$wgMaxCredits ) return '';
+		
+		if ( $this->isCurrentArticleView() ) {
+			require_once("Credits.php");
+			global $wgArticle, $wgShowCreditsIfMax;
+			$credits = getCredits($wgArticle, $wgMaxCredits, $wgShowCreditsIfMax);
+		} else {
+			$credits = '';
+		}
+		return cbt_value( $credits, 'view dynamic' );
+	}
+	
+	function normalcopyright() {
+		return $this->getCopyright( 'normal' );
+	}
+
+	function historycopyright() {
+		return $this->getCopyright( 'history' );
+	}
+
+	function is_currentview() {
+		global $wgRequest;
+		return cbt_value( (string)$this->isCurrentArticleView(), 'view' );
+	}
+
+	function usehistorycopyright() {
+		global $wgRequest;
+		if ( wfMsgForContent( 'history_copyright' ) == '-' ) return '';
+		
+		$oldid = $this->getOldId();
+		$diff = $this->getDiff();
+		$use = (string)(!is_null( $oldid ) && is_null( $diff ));
+		return cbt_value( $use, 'nonview dynamic' );
+	}
+	
+	function privacy() {
+		return cbt_value( $this->privacyLink(), 'lang' );
+	}
+	function about() {
+		return cbt_value( $this->aboutLink(), 'lang' );
+	}
+	function disclaimer() {
+		return cbt_value( $this->disclaimerLink(), 'lang' );
+	}
+	function tagline() { 
+		# A reference to this tag existed in the old MonoBook.php, but the
+		# template data wasn't set anywhere
+		return ''; 
+	}
+	function reporttime() {
+		return cbt_value( $this->mOut->reportTime(), 'dynamic' );
+	}
+	
+	function msg( $name ) {
+		return cbt_value( wfMsg( $name ), 'lang' );
+	}
+	
+	function fallbackmsg( $name, $fallback ) {
+		$text = wfMsg( $name );
+		if ( wfEmptyMsg( $name, $text ) ) {
+			$text = $fallback;
+		}
+		return cbt_value( $text,  'lang' );
+	}
+
+	/******************************************************
+	 * Utility functions                                  *
+	 ******************************************************/
+
+	/** Return true if this request is a valid, secure CSS preview */
+	function isCssPreview() {
+		if ( !isset( $this->mCssPreview ) ) {
+			global $wgRequest, $wgAllowUserCss, $wgUser;
+			$this->mCssPreview = 
+				$wgAllowUserCss &&
+				$wgUser->isLoggedIn() &&
+				$this->mTitle->isCssSubpage() && 
+				$this->userCanPreview( $this->getAction() );
+		}
+		return $this->mCssPreview;
+	}
+
+	/** Return true if this request is a valid, secure JS preview */
+	function isJsPreview() {
+		if ( !isset( $this->mJsPreview ) ) {
+			global $wgRequest, $wgAllowUserJs, $wgUser;
+			$this->mJsPreview = 
+				$wgAllowUserJs &&
+				$wgUser->isLoggedIn() &&
+				$this->mTitle->isJsSubpage() && 
+				$this->userCanPreview( $this->getAction() );
+		}
+		return $this->mJsPreview;
+	}
+
+	/** Get the title of the $wgUser's user page */
+	function getUserPageTitle() {
+		if ( !isset( $this->mUserPageTitle ) ) {
+			global $wgUser;
+			$this->mUserPageTitle = $wgUser->getUserPage();
+		}
+		return $this->mUserPageTitle;
+	}
+
+	/** Get the text of the user page title */
+	function getUserPageText() {
+		if ( !isset( $this->mUserPageText ) ) {
+			$userPage = $this->getUserPageTitle();
+			$this->mUserPageText = $userPage->getPrefixedText();
+		}
+		return $this->mUserPageText;
+	}
+
+	/** Make an HTML element for a stylesheet link */
+	function makeStylesheetLink( $url ) {
+		return '<link rel="stylesheet" type="text/css" href="' . htmlspecialchars( $url ) . "\"/>";
+	}
+
+	/** Make an XHTML element for inline CSS */
+	function makeStylesheetCdata( $style ) {
+		return "<style type=\"text/css\"> /*<![CDATA[*/ {$style} /*]]>*/ </style>";
+	}
+
+	/** Get the edit URL for this page */
+	function getEditUrl() {
+		if ( !isset( $this->mEditUrl ) ) {
+			$this->mEditUrl = $this->mTitle->getLocalUrl( $this->editUrlOptions() );
+		}
+		return $this->mEditUrl;
+	}
+
+	/** Get the prefixed DB key for this page */
+	function getThisPDBK() {
+		if ( !isset( $this->mThisPDBK ) ) {
+			$this->mThisPDBK = $this->mTitle->getPrefixedDbKey();
+		}
+		return $this->mThisPDBK;
+	}
+
+	function getThisTitleUrlForm() {
+		if ( !isset( $this->mThisTitleUrlForm ) ) {
+			$this->mThisTitleUrlForm = $this->mTitle->getPrefixedURL();
+		}
+		return $this->mThisTitleUrlForm;
+	}
+
+	/** 
+	 * If the current page is a user page, get the user's ID and IP. Otherwise return array(0,false)
+	 */
+	function getUserPageIdIp() {
+		if ( !isset( $this->mUserPageId ) ) {
+			if( $this->mTitle->getNamespace() == NS_USER || $this->mTitle->getNamespace() == NS_USER_TALK ) {
+				$this->mUserPageId = User::idFromName($this->mTitle->getText());
+				$this->mUserPageIp = User::isIP($this->mTitle->getText());
+			} else {
+				$this->mUserPageId = 0;
+				$this->mUserPageIp = false;
+			}
+		}
+		return array( $this->mUserPageId, $this->mUserPageIp );
+	}
+	
+	/**
+	 * Returns a permalink URL, or false if the current page is already a 
+	 * permalink, or blank if a permalink shouldn't be displayed
+	 */
+	function getPermalink() {
+		if ( !isset( $this->mPermalink ) ) {
+			global $wgRequest, $wgArticle;
+			$action = $this->getAction();
+			$oldid = $this->getOldId();
+			$url = '';
+			if( $this->mTitle->getNamespace() !== NS_SPECIAL 
+					&& $this->mTitle->getArticleId() != 0
+					&& ($action == '' || $action == 'view' || $action == 'purge' ) ) 
+			{
+				if ( !$oldid ) {
+					$revid = $wgArticle->getLatest();			
+					$url = $this->mTitle->getLocalURL( "oldid=$revid" );
+				} else {
+					$url = false;
+				}
+			} else {
+				$url = '';
+			}
+		}
+		return $url;
+	}
+
+	/**
+	 * Returns true if the current page is an article, not a special page,
+	 * and we are viewing a revision, not a diff
+	 */
+	function isArticleView() {
+		global $wgOut, $wgArticle, $wgRequest;
+		if ( !isset( $this->mIsArticleView ) ) {
+			$oldid = $this->getOldId();
+			$diff = $this->getDiff();
+			$this->mIsArticleView = $wgOut->isArticle() and 
+				(!is_null( $oldid ) or is_null( $diff )) and 0 != $wgArticle->getID();
+		}
+		return $this->mIsArticleView;
+	}
+
+	function isCurrentArticleView() {
+		if ( !isset( $this->mIsCurrentArticleView ) ) {
+			global $wgOut, $wgArticle, $wgRequest;
+			$oldid = $this->getOldId();
+			$this->mIsCurrentArticleView = $wgOut->isArticle() && is_null( $oldid ) && 0 != $wgArticle->getID();
+		}
+		return $this->mIsCurrentArticleView;
+	}
+
+
+	/**
+	 * Return true if the current page is editable; if edit section on right 
+	 * click should be enabled.
+	 */
+	function isEditable() {
+		global $wgRequest;
+		$action = $this->getAction();
+		return ($this->mTitle->getNamespace() != NS_SPECIAL and !($action == 'edit' or $action == 'submit'));
+	}
+
+	/** Return true if the user is logged in */
+	function isLoggedIn() {
+		global $wgUser;
+		return $wgUser->isLoggedIn();
+	}
+
+	/** Get the local URL of the current page */
+	function getPageUrl() {
+		if ( !isset( $this->mPageUrl ) ) {
+			$this->mPageUrl = $this->mTitle->getLocalURL();
+		} 
+		return $this->mPageUrl;
+	}
+
+	/** Make a link to a title using a template */
+	function makeTemplateLink( $template, $key, $title, $text ) {
+		$url = $title->getLocalUrl();
+		return strtr( $template, 
+			array( 
+				'$key' => $key,
+				'$classactive' => ($url == $this->getPageUrl()) ? 'class="active"' : '',
+				'$class' => $title->getArticleID() == 0 ? 'class="new"' : '', 
+				'$href' => htmlspecialchars( $url ),
+				'$text' => $text
+			 ) );
+	}
+
+	/** Make a link to a URL using a template */
+	function makeTemplateLinkUrl( $template, $key, $url, $text ) {
+		return strtr( $template, 
+			array( 
+				'$key' => $key,
+				'$classactive' => ($url == $this->getPageUrl()) ? 'class="active"' : '',
+				'$class' => '', 
+				'$href' => htmlspecialchars( $url ),
+				'$text' => $text
+			 ) );
+	}
+
+	/** Make a link to a special page using a template */
+	function makeSpecialTemplateLink( $template, $key, $specialName, $text, $query = '' ) {
+		$url = self::makeSpecialUrl( $specialName, $query );
+		// Ignore the query when comparing
+		$active = ($this->mTitle->getNamespace() == NS_SPECIAL && $this->mTitle->getDBkey() == $specialName);
+		return strtr( $template, 
+			array( 
+				'$key' => $key,
+				'$classactive' => $active ? 'class="active"' : '',
+				'$class' => '', 
+				'$href' => htmlspecialchars( $url ),
+				'$text' => $text
+			 ) );
+	}
+
+	function loadRequestValues() {
+		global $wgRequest;
+		$this->mAction = $wgRequest->getText( 'action' );
+		$this->mOldId = $wgRequest->getVal( 'oldid' );
+		$this->mDiff = $wgRequest->getVal( 'diff' );
+		$this->mSection = $wgRequest->getVal( 'section' );
+		$this->mSearch = $wgRequest->getVal( 'search' );
+		$this->mRequestValuesLoaded = true;
+	}
+		
+
+
+	/** Get the action parameter of the request */
+	function getAction() {
+		if ( !isset( $this->mRequestValuesLoaded ) ) {
+			$this->loadRequestValues();
+		}
+		return $this->mAction;
+	}
+
+	/** Get the oldid parameter */
+	function getOldId() {
+		if ( !isset( $this->mRequestValuesLoaded ) ) {
+			$this->loadRequestValues();
+		}
+		return $this->mOldId;
+	}
+
+	/** Get the diff parameter */
+	function getDiff() {
+		if ( !isset( $this->mRequestValuesLoaded ) ) {
+			$this->loadRequestValues();
+		}
+		return $this->mDiff;
+	}
+
+	function getSection() {
+		if ( !isset( $this->mRequestValuesLoaded ) ) {
+			$this->loadRequestValues();
+		}
+		return $this->mSection;
+	}
+
+	function getSearch() {
+		if ( !isset( $this->mRequestValuesLoaded ) ) {
+			$this->loadRequestValues();
+		}
+		return $this->mSearch;
+	}
+
+	/** Make a special page URL of the form [[Special:Somepage/{title_urlform}]] */
+	function makeSpecialParamUrl( $name, $query = '', $param = '{title_urlform}' ) {
+		// Abuse makeTitle's lax validity checking to slip a control character into the URL
+		$title = Title::makeTitle( NS_SPECIAL, "$name/\x1a" );
+		$url = cbt_escape( $title->getLocalURL( $query ) );
+		// Now replace it with the parameter
+		return str_replace( '%1A', $param, $url );
+	}
+
+	function getSubjectPage() {
+		if ( !isset( $this->mSubjectPage ) ) {
+			$this->mSubjectPage = $this->mTitle->getSubjectPage();
+		}
+		return $this->mSubjectPage;
+	}
+
+	function getTalkPage() {
+		if ( !isset( $this->mTalkPage ) ) {
+			$this->mTalkPage = $this->mTitle->getTalkPage();
+		}
+		return $this->mTalkPage;
+	}
+}
+?>
Index: /MediaWiki/branches/1.11/skins/htmldump/lookup.js
===================================================================
--- /MediaWiki/branches/1.11/skins/htmldump/lookup.js	(revision 1280)
+++ /MediaWiki/branches/1.11/skins/htmldump/lookup.js	(revision 1280)
@@ -0,0 +1,91 @@
+/**
+ * "Go" function for static HTML dump
+ */
+function goToStatic(depth) {
+	var url = getStaticURL(document.getElementById("searchInput").value, depth);
+	if (url != "") {
+		location = url;
+	} else {
+		alert("Invalid title");
+	}
+}
+
+/**
+ * Determine relative path for a given non-canonical title
+ */
+function getStaticURL(text, depth) {
+	var pdbk = getPDBK(text);
+	if (pdbk == "") {
+		return "";
+	} else {
+		var i;
+		var path = getHashedDirectory(pdbk, depth) + "/" + getFriendlyName(pdbk) + ".html";
+		if (!/(index\.html|\/)$/.exec(location)) {
+			for (i = 0; i < depth; i++) {
+				path = "../" + path;
+			}
+		}
+		return path;
+	}
+}
+
+function getPDBK(text) {
+	// Spaces to underscores
+	text = text.replace(/ /g, "_");
+
+	// Trim leading and trailing space
+	text = text.replace(/^_+/g, "");
+	text = text.replace(/_+$/g, "");
+
+	// Capitalise first letter
+	return ucfirst(text);
+}
+
+function getHashedDirectory(pdbk, depth) {
+	// Find the first colon if there is one, use characters after it
+	var dbk = pdbk.replace(/^[^:]*:_*(.*)$/, "$1");
+	var i, c, dir = "";
+
+	for (i=0; i < depth; i++) {
+		if (i) {
+			dir += "/";
+		}
+		if (i >= dbk.length) {
+			dir += "_";
+		} else {
+			c = dbk.charAt(i);
+			cc = dbk.charCodeAt(i);
+			
+			if (cc >= 128 || /[a-zA-Z0-9!#$%&()+,[\]^_`{}-]/.exec(c)) {
+				dir += c.toLowerCase();
+			} else {
+				dir += binl2hex([cc]).substr(0,2).toUpperCase();
+			}
+		}
+	}
+	return dir;
+}
+
+function ucfirst(s) {
+	return s.charAt(0).toUpperCase() + s.substring(1, s.length);
+}
+
+function getFriendlyName(name) {
+	// Replace illegal characters for Windows paths with underscores
+	var friendlyName = name.replace(/[\/\\*?"<>|~]/g, "_");
+
+	// Work out lower case form. We assume we're on a system with case-insensitive
+	// filenames, so unless the case is of a special form, we have to disambiguate
+	var lowerCase = ucfirst(name.toLowerCase());
+
+	// Make it mostly unique
+	if (lowerCase != friendlyName) {
+		friendlyName += "_" + hex_md5(_to_utf8(name)).substring(0, 4);
+	}
+	// Handle colon specially by replacing it with tilde
+	// Thus we reduce the number of paths with hashes appended
+	friendlyName = friendlyName.replace(":", "~");
+
+	return friendlyName;
+}
+
Index: /MediaWiki/branches/1.11/skins/htmldump/main.css
===================================================================
--- /MediaWiki/branches/1.11/skins/htmldump/main.css	(revision 1280)
+++ /MediaWiki/branches/1.11/skins/htmldump/main.css	(revision 1280)
@@ -0,0 +1,9 @@
+@import "../monobook/main.css";
+
+#footer li {
+	display: block;
+}
+head:first-child + body #footer li { white-space: normal; }
+.usermessage { display: none; }
+.editsection { display: none; }
+
Index: /MediaWiki/branches/1.11/skins/htmldump/md5.js
===================================================================
--- /MediaWiki/branches/1.11/skins/htmldump/md5.js	(revision 1280)
+++ /MediaWiki/branches/1.11/skins/htmldump/md5.js	(revision 1280)
@@ -0,0 +1,256 @@
+/*
+ * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
+ * Digest Algorithm, as defined in RFC 1321.
+ * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
+ * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
+ * Distributed under the BSD License
+ * See http://pajhome.org.uk/crypt/md5 for more info.
+ */
+
+/*
+ * Configurable variables. You may need to tweak these to be compatible with
+ * the server-side, but the defaults work in most cases.
+ */
+var hexcase = 0;  /* hex output format. 0 - lowercase; 1 - uppercase        */
+var b64pad  = ""; /* base-64 pad character. "=" for strict RFC compliance   */
+var chrsz   = 8;  /* bits per input character. 8 - ASCII; 16 - Unicode      */
+
+/*
+ * These are the functions you'll usually want to call
+ * They take string arguments and return either hex or base-64 encoded strings
+ */
+function hex_md5(s){ return binl2hex(core_md5(str2binl(s), s.length * chrsz));}
+function b64_md5(s){ return binl2b64(core_md5(str2binl(s), s.length * chrsz));}
+function str_md5(s){ return binl2str(core_md5(str2binl(s), s.length * chrsz));}
+function hex_hmac_md5(key, data) { return binl2hex(core_hmac_md5(key, data)); }
+function b64_hmac_md5(key, data) { return binl2b64(core_hmac_md5(key, data)); }
+function str_hmac_md5(key, data) { return binl2str(core_hmac_md5(key, data)); }
+
+/*
+ * Perform a simple self-test to see if the VM is working
+ */
+function md5_vm_test()
+{
+  return hex_md5("abc") == "900150983cd24fb0d6963f7d28e17f72";
+}
+
+/*
+ * Calculate the MD5 of an array of little-endian words, and a bit length
+ */
+function core_md5(x, len)
+{
+  /* append padding */
+  x[len >> 5] |= 0x80 << ((len) % 32);
+  x[(((len + 64) >>> 9) << 4) + 14] = len;
+
+  var a =  1732584193;
+  var b = -271733879;
+  var c = -1732584194;
+  var d =  271733878;
+
+  for(var i = 0; i < x.length; i += 16)
+  {
+    var olda = a;
+    var oldb = b;
+    var oldc = c;
+    var oldd = d;
+
+    a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
+    d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
+    c = md5_ff(c, d, a, b, x[i+ 2], 17,  606105819);
+    b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
+    a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
+    d = md5_ff(d, a, b, c, x[i+ 5], 12,  1200080426);
+    c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
+    b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
+    a = md5_ff(a, b, c, d, x[i+ 8], 7 ,  1770035416);
+    d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
+    c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
+    b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
+    a = md5_ff(a, b, c, d, x[i+12], 7 ,  1804603682);
+    d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
+    c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
+    b = md5_ff(b, c, d, a, x[i+15], 22,  1236535329);
+
+    a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
+    d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
+    c = md5_gg(c, d, a, b, x[i+11], 14,  643717713);
+    b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
+    a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
+    d = md5_gg(d, a, b, c, x[i+10], 9 ,  38016083);
+    c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
+    b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
+    a = md5_gg(a, b, c, d, x[i+ 9], 5 ,  568446438);
+    d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
+    c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
+    b = md5_gg(b, c, d, a, x[i+ 8], 20,  1163531501);
+    a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
+    d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
+    c = md5_gg(c, d, a, b, x[i+ 7], 14,  1735328473);
+    b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);
+
+    a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
+    d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
+    c = md5_hh(c, d, a, b, x[i+11], 16,  1839030562);
+    b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
+    a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
+    d = md5_hh(d, a, b, c, x[i+ 4], 11,  1272893353);
+    c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
+    b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
+    a = md5_hh(a, b, c, d, x[i+13], 4 ,  681279174);
+    d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
+    c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
+    b = md5_hh(b, c, d, a, x[i+ 6], 23,  76029189);
+    a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
+    d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
+    c = md5_hh(c, d, a, b, x[i+15], 16,  530742520);
+    b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);
+
+    a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
+    d = md5_ii(d, a, b, c, x[i+ 7], 10,  1126891415);
+    c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
+    b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
+    a = md5_ii(a, b, c, d, x[i+12], 6 ,  1700485571);
+    d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
+    c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
+    b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
+    a = md5_ii(a, b, c, d, x[i+ 8], 6 ,  1873313359);
+    d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
+    c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
+    b = md5_ii(b, c, d, a, x[i+13], 21,  1309151649);
+    a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
+    d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
+    c = md5_ii(c, d, a, b, x[i+ 2], 15,  718787259);
+    b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);
+
+    a = safe_add(a, olda);
+    b = safe_add(b, oldb);
+    c = safe_add(c, oldc);
+    d = safe_add(d, oldd);
+  }
+  return Array(a, b, c, d);
+
+}
+
+/*
+ * These functions implement the four basic operations the algorithm uses.
+ */
+function md5_cmn(q, a, b, x, s, t)
+{
+  return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
+}
+function md5_ff(a, b, c, d, x, s, t)
+{
+  return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
+}
+function md5_gg(a, b, c, d, x, s, t)
+{
+  return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
+}
+function md5_hh(a, b, c, d, x, s, t)
+{
+  return md5_cmn(b ^ c ^ d, a, b, x, s, t);
+}
+function md5_ii(a, b, c, d, x, s, t)
+{
+  return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
+}
+
+/*
+ * Calculate the HMAC-MD5, of a key and some data
+ */
+function core_hmac_md5(key, data)
+{
+  var bkey = str2binl(key);
+  if(bkey.length > 16) bkey = core_md5(bkey, key.length * chrsz);
+
+  var ipad = Array(16), opad = Array(16);
+  for(var i = 0; i < 16; i++)
+  {
+    ipad[i] = bkey[i] ^ 0x36363636;
+    opad[i] = bkey[i] ^ 0x5C5C5C5C;
+  }
+
+  var hash = core_md5(ipad.concat(str2binl(data)), 512 + data.length * chrsz);
+  return core_md5(opad.concat(hash), 512 + 128);
+}
+
+/*
+ * Add integers, wrapping at 2^32. This uses 16-bit operations internally
+ * to work around bugs in some JS interpreters.
+ */
+function safe_add(x, y)
+{
+  var lsw = (x & 0xFFFF) + (y & 0xFFFF);
+  var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
+  return (msw << 16) | (lsw & 0xFFFF);
+}
+
+/*
+ * Bitwise rotate a 32-bit number to the left.
+ */
+function bit_rol(num, cnt)
+{
+  return (num << cnt) | (num >>> (32 - cnt));
+}
+
+/*
+ * Convert a string to an array of little-endian words
+ * If chrsz is ASCII, characters >255 have their hi-byte silently ignored.
+ */
+function str2binl(str)
+{
+  var bin = Array();
+  var mask = (1 << chrsz) - 1;
+  for(var i = 0; i < str.length * chrsz; i += chrsz)
+    bin[i>>5] |= (str.charCodeAt(i / chrsz) & mask) << (i%32);
+  return bin;
+}
+
+/*
+ * Convert an array of little-endian words to a string
+ */
+function binl2str(bin)
+{
+  var str = "";
+  var mask = (1 << chrsz) - 1;
+  for(var i = 0; i < bin.length * 32; i += chrsz)
+    str += String.fromCharCode((bin[i>>5] >>> (i % 32)) & mask);
+  return str;
+}
+
+/*
+ * Convert an array of little-endian words to a hex string.
+ */
+function binl2hex(binarray)
+{
+  var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
+  var str = "";
+  for(var i = 0; i < binarray.length * 4; i++)
+  {
+    str += hex_tab.charAt((binarray[i>>2] >> ((i%4)*8+4)) & 0xF) +
+           hex_tab.charAt((binarray[i>>2] >> ((i%4)*8  )) & 0xF);
+  }
+  return str;
+}
+
+/*
+ * Convert an array of little-endian words to a base-64 string
+ */
+function binl2b64(binarray)
+{
+  var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+  var str = "";
+  for(var i = 0; i < binarray.length * 4; i += 3)
+  {
+    var triplet = (((binarray[i   >> 2] >> 8 * ( i   %4)) & 0xFF) << 16)
+                | (((binarray[i+1 >> 2] >> 8 * ((i+1)%4)) & 0xFF) << 8 )
+                |  ((binarray[i+2 >> 2] >> 8 * ((i+2)%4)) & 0xFF);
+    for(var j = 0; j < 4; j++)
+    {
+      if(i * 8 + j * 6 > binarray.length * 32) str += b64pad;
+      else str += tab.charAt((triplet >> 6*(3-j)) & 0x3F);
+    }
+  }
+  return str;
+}
Index: /MediaWiki/branches/1.11/skins/htmldump/utf8.js
===================================================================
--- /MediaWiki/branches/1.11/skins/htmldump/utf8.js	(revision 1280)
+++ /MediaWiki/branches/1.11/skins/htmldump/utf8.js	(revision 1280)
@@ -0,0 +1,72 @@
+/**
+ * Obtained from http://homepage3.nifty.com/aokura/jscript/index.html
+ * The webpage says, among other things:
+ *    * ソースコードの全てあるいは一部を使用したことにより生じた損害に関しては一切責任を負いません。
+ *    * ソースコードの使用、配布に制限はありません。ご自由にお使いください。
+ *    * 動作チェックが不充分な場合もありますので、注意してください。
+ * 
+ * Which, loosely translated, means:
+ *    * The author takes no responsibility for damage which occurs due to the use of this code.
+ *    * There is no restriction on the use and distribution of the source code. Please use freely.
+ *    * Please be careful, testing may have been insufficient.
+ */
+
+
+/**********************************************************************
+ *
+ *  Unicode ⇔ UTF-8
+ *
+ *  Copyright (c) 2005 AOK <soft@aokura.com>
+ *
+ **********************************************************************/
+
+function _to_utf8(s) {
+  var c, d = "";
+  for (var i = 0; i < s.length; i++) {
+    c = s.charCodeAt(i);
+    if (c <= 0x7f) {
+      d += s.charAt(i);
+    } else if (c >= 0x80 && c <= 0x7ff) {
+      d += String.fromCharCode(((c >> 6) & 0x1f) | 0xc0);
+      d += String.fromCharCode((c & 0x3f) | 0x80);
+    } else {
+      d += String.fromCharCode((c >> 12) | 0xe0);
+      d += String.fromCharCode(((c >> 6) & 0x3f) | 0x80);
+      d += String.fromCharCode((c & 0x3f) | 0x80);
+    }
+  }
+  return d;
+}
+
+function _from_utf8(s) {
+  var c, d = "", flag = 0, tmp;
+  for (var i = 0; i < s.length; i++) {
+    c = s.charCodeAt(i);
+    if (flag == 0) {
+      if ((c & 0xe0) == 0xe0) {
+        flag = 2;
+        tmp = (c & 0x0f) << 12;
+      } else if ((c & 0xc0) == 0xc0) {
+        flag = 1;
+        tmp = (c & 0x1f) << 6;
+      } else if ((c & 0x80) == 0) {
+        d += s.charAt(i);
+      } else {
+        flag = 0;
+      }
+    } else if (flag == 1) {
+      flag = 0;
+      d += String.fromCharCode(tmp | (c & 0x3f));
+    } else if (flag == 2) {
+      flag = 3;
+      tmp |= (c & 0x3f) << 6;
+    } else if (flag == 3) {
+      flag = 0;
+      d += String.fromCharCode(tmp | (c & 0x3f));
+    } else {
+      flag = 0;
+    }
+  }
+  return d;
+}
+
Index: /MediaWiki/branches/1.11/skins/monobook/IE50Fixes.css
===================================================================
--- /MediaWiki/branches/1.11/skins/monobook/IE50Fixes.css	(revision 1280)
+++ /MediaWiki/branches/1.11/skins/monobook/IE50Fixes.css	(revision 1280)
@@ -0,0 +1,67 @@
+/*
+** IE5.0 Fix Stylesheet
+*/
+
+#column-content {
+	margin: 0 !important;
+	float: none;
+}
+#column-content #content { 
+	margin-top: 3em; 
+	height: 1%;
+}
+#column-one {
+	position: absolute;
+	overflow: visible;
+	top: 0;
+	left: 0;
+	z-index: 3;
+}
+#footer {
+	margin: 0 0 0 13.6em;
+}
+
+/* IE 5 & 5.5 interpret keyword sizes one off */
+body { font-size: xx-small; }
+/*
+** the edit tabs
+*/
+#p-cactions li {
+	float: left;
+	padding-top: 0;
+	padding-bottom: 0 !important;
+	height: 0.9em;
+}
+#p-cactions li a {
+	display: block;
+	padding-bottom: 0.045em;
+}
+#p-cactions li.selected a {
+	padding-bottom: 0.17em;
+}
+#p-cactions li a:hover {
+	padding-bottom: 0.17em;
+}
+/* 5.0 doesn't like the background icon for external links and user */
+.link-external,
+.external {
+	background: none;
+	padding: 0;
+}
+#p-personal ul { float: right }
+#p-personal li { float: left }
+li#pt-userpage,
+li#pt-anonuserpage,
+li#pt-login,
+li#pt-logout {
+	background: none;
+	padding-left: none;
+}
+.visualClear {
+	width: 100%;
+	height: 0px;
+	padding:0;
+	margin: 0;
+}
+.firstHeading { margin-bottom: .3em; }
+/*div{ border:1px solid Red !important;}*/
Index: /MediaWiki/branches/1.11/skins/monobook/IE55Fixes.css
===================================================================
--- /MediaWiki/branches/1.11/skins/monobook/IE55Fixes.css	(revision 1280)
+++ /MediaWiki/branches/1.11/skins/monobook/IE55Fixes.css	(revision 1280)
@@ -0,0 +1,85 @@
+/* IE5.5/win- only fixes */
+
+#column-content { 
+	float: none; 
+	margin-left: 0;
+	height: 1%;
+}
+#column-content #content {
+	position: relative;
+	z-index: 5;
+	margin-left: 12.2em;
+	margin-top: 3em;
+	height: 1%;
+}
+#column-one {
+	position: absolute;
+	top: 0;
+	left: 0;
+	z-index: 4;
+	width: 100%;
+}
+#footer {
+	margin-left: 13.6em;
+	border-left: 1px solid #fabd23;
+}
+
+/*#bodyContent div,
+#bodyContent pre { overflow: auto; }*/
+
+#p-personal { padding-bottom: .1em; }
+
+body { font-size: xx-small; }
+
+#p-cactions {
+	width: 76% !important;
+	z-index: 3 !important;
+	float: none;
+}
+#p-cactions li {
+	padding-bottom: 0 !important;
+	border: none;
+	background-color: transparent;
+	cursor: default;
+	float: none !important;
+}
+#p-cactions li a {
+	display: inline-block !important;
+	vertical-align: top;
+	padding-bottom: 0;
+	border: solid #aaa;
+	border-width: 1px 1px 0;
+}
+#p-cactions li.selected a {
+	border-color: #fabd23;
+	padding-bottom: 0.17em;
+}
+#p-cactions li a:hover {
+	padding-bottom: 0.17em;
+}
+#p-navigation a {
+	display: inline-block;
+	width: 100%;
+}
+.portlet {
+	overflow: hidden;
+}
+#bodyContent a.external {
+	background: url(external.png) center right no-repeat;
+	padding-right: 13px;
+}
+/* show the hand */
+#p-logo a,
+#p-logo a:hover {
+	cursor: pointer;
+}
+.visualClear {
+	width: 90%;
+	height: 1px;
+	padding: 0;
+	margin: 0;
+}
+
+#editform {
+	width: 100%;
+}
Index: /MediaWiki/branches/1.11/skins/monobook/IE60Fixes.css
===================================================================
--- /MediaWiki/branches/1.11/skins/monobook/IE60Fixes.css	(revision 1280)
+++ /MediaWiki/branches/1.11/skins/monobook/IE60Fixes.css	(revision 1280)
@@ -0,0 +1,84 @@
+/* 6.0 - only fixes */
+/* content area */ 
+/* workaround for various ie float bugs */
+#column-content { 
+	float: none; 
+	margin-left: 0;
+	height: 1%;
+}
+#column-content #content {
+	margin-left: 12.2em;
+	margin-top: 3em;
+	height: 1%;
+}
+#column-one {
+	position: absolute;
+	top: 0;
+	left: 0;
+	z-index: 4;
+}
+#footer {
+	margin-left: 13.6em;
+	border-left: 1px solid #fabd23;
+}
+
+/* the tabs */
+
+#p-cactions {
+	z-index: 3;
+}
+
+#p-cactions li {
+	padding-bottom: 0 !important;
+	border: none;
+	background-color: transparent;
+	cursor: default;
+	float: none !important;
+}
+#p-cactions li a {
+	display: inline-block !important;
+	vertical-align: top;
+	padding-bottom: 0;
+	border: solid #aaa;
+	border-width: 1px 1px 0;
+}
+#p-cactions li.selected a {
+	border-color: #fabd23;
+	padding-bottom: 0.17em;
+}
+#p-cactions li a:hover {
+	padding-bottom: 0.17em;
+}
+#p-navigation a {
+	display: inline-block;
+	width: 100%;
+}
+#portal-personaltools {
+	padding-bottom: 0.1em;
+}
+#bodyContent a.external {
+	background: url(external.png) center right no-repeat;
+	padding-right: 13px;
+}
+
+/* show the hand */
+#p-logo a,
+#p-logo a:hover {
+	cursor: pointer;
+}
+div.visualClear {
+	width:100%;
+	line-height: 0;
+}
+textarea {
+	width: 96%;
+}
+
+div.editsection,
+#catlinks,
+div.tright,
+div.tleft {
+	position: relative;
+}
+/*{ border:1px solid Red !important;}*/
+
Index: /MediaWiki/branches/1.11/skins/monobook/IE70Fixes.css
===================================================================
--- /MediaWiki/branches/1.11/skins/monobook/IE70Fixes.css	(revision 1280)
+++ /MediaWiki/branches/1.11/skins/monobook/IE70Fixes.css	(revision 1280)
@@ -0,0 +1,74 @@
+/* 7.0 - only fixes */
+/* content area */ 
+/* workaround for various ie float bugs */
+
+/* This bit is needed to make links clickable... WTF */
+#column-content #content {
+	margin-left: 12.2em;
+	margin-top: 3em;
+	height: 1%;
+}
+
+.rtl #column-one {
+	/* For some reason it tries to inherit the padding-top into every div,
+	 * and I can't figure out how to get it back off.
+	 * Margin works correctly for this use, though.
+	 */
+	padding-top: 0;
+	margin-top: 160px;
+}
+
+/* the tabs */
+
+#p-cactions {
+	z-index: 3;
+}
+
+
+#p-cactions li {
+	padding-bottom: 0 !important;
+	border: none;
+	background-color: transparent;
+	cursor: default;
+	float: none !important;
+}
+
+#p-cactions li a {
+	display: inline-block !important;
+	vertical-align: top;
+	padding-bottom: 0;
+	border: solid #aaa;
+	border-width: 1px 1px 0;
+}
+#p-cactions li.selected a {
+	border-color: #fabd23;
+	padding-bottom: 0.17em;
+}
+#p-cactions li a:hover {
+	padding-bottom: 0.17em;
+}
+#p-navigation a {
+	display: inline-block;
+	width: 100%;
+}
+#portal-personaltools {
+	padding-bottom: 0.1em;
+}
+textarea {
+	width: 96%;
+}
+
+/*
+div.editsection,
+#catlinks,
+div.tright,
+div.tleft {
+	position: relative;
+}
+*/
+
+
+#footer li {
+	/* Work around bug with inline <li> tags with right margins and nowrap */
+	margin-right: 0;
+}
Index: /MediaWiki/branches/1.11/skins/monobook/IEMacFixes.css
===================================================================
--- /MediaWiki/branches/1.11/skins/monobook/IEMacFixes.css	(revision 1280)
+++ /MediaWiki/branches/1.11/skins/monobook/IEMacFixes.css	(revision 1280)
@@ -0,0 +1,44 @@
+/* IE/Mac only fix stylesheet, imported from main.css */
+#portal-column-content {
+	margin: 0 0 4.8em 0;
+	float: none;
+}
+#portal-column-content #content {
+	z-index: 0;
+}
+#portal-column-one {
+	position: absolute;
+	top: 0;
+	left: 0;
+	z-index: 3;
+}
+#portal-footer {
+	margin-left: 12em; 
+}
+/*
+#portlet-contentViews {
+	top: 0.6em !important;
+	left: 14.5em !important;
+}
+*/
+#portlet-contentViews li,
+#portlet-contentViews .selected {
+	border: none !important;
+}
+#portlet-contentViews li a   {
+	border: 1px solid #aaaaaa;
+	border-bottom: none;
+}
+#portlet-contentViews li.selected a {
+	border: 1px solid #fabd23;
+	border-bottom: none;
+}
+/* no background images */
+li#personaltools-userpage,
+li#personaltools-login/* */ {
+	background: none;
+	padding-left: none;
+}
+#mactest {
+	color: green;
+}
Index: /MediaWiki/branches/1.11/skins/monobook/KHTMLFixes.css
===================================================================
--- /MediaWiki/branches/1.11/skins/monobook/KHTMLFixes.css	(revision 1280)
+++ /MediaWiki/branches/1.11/skins/monobook/KHTMLFixes.css	(revision 1280)
@@ -0,0 +1,3 @@
+/* KHTML fix stylesheet */
+/* work around the horizontal scrollbars */
+#column-content { margin-left: 0; }
Index: /MediaWiki/branches/1.11/skins/monobook/Opera6Fixes.css
===================================================================
--- /MediaWiki/branches/1.11/skins/monobook/Opera6Fixes.css	(revision 1280)
+++ /MediaWiki/branches/1.11/skins/monobook/Opera6Fixes.css	(revision 1280)
@@ -0,0 +1,14 @@
+/* opera 6 fixes */
+#column-one {
+	position: relative;
+	max-width: 11.7em;
+}
+#p-personal {
+	width: 45em;
+	margin-left: 8.6em;
+	right: 0;
+}
+#bodyContent a.external {
+	background: url(external.png) center right no-repeat;
+	padding-right: 13px;
+}
Index: /MediaWiki/branches/1.11/skins/monobook/Opera7Fixes.css
===================================================================
--- /MediaWiki/branches/1.11/skins/monobook/Opera7Fixes.css	(revision 1280)
+++ /MediaWiki/branches/1.11/skins/monobook/Opera7Fixes.css	(revision 1280)
@@ -0,0 +1,11 @@
+/* small tweaks for opera seven */
+#p-cactions {
+	margin-top: .1em;
+}
+#p-cactions li a {
+	top: 2px;
+}
+#bodyContent a.external {
+	background: url(external.png) center right no-repeat;
+	padding-right: 13px;
+}
Index: /MediaWiki/branches/1.11/skins/monobook/handheld.css
===================================================================
--- /MediaWiki/branches/1.11/skins/monobook/handheld.css	(revision 1280)
+++ /MediaWiki/branches/1.11/skins/monobook/handheld.css	(revision 1280)
@@ -0,0 +1,1337 @@
+/*
+** MediaWiki 'monobook' style sheet for CSS2-capable browsers.
+** Copyright Gabriel Wicke - http://wikidev.net/
+** License: GPL (http://www.gnu.org/copyleft/gpl.html)
+**
+** Loosely based on http://www.positioniseverything.net/ordered-floats.html by Big John
+** and the Plone 2.0 styles, see http://plone.org/ (Alexander Limi,Joe Geldart & Tom Croucher,
+** Michael Zeltner and Geir Bækholt)
+** All you guys rock :)
+*/
+
+/**
+ * Stylesheet for handhelds.  All rules not marked media-specific are shared
+ * with main.css and should be updated in tandem.  The rules can't be in the
+ * same file because old browsers like IE5 won't obey @media rules.
+ *
+ * Rules that are handheld-specific are given @media rules in case old browsers
+ * don't recognize the media attribute and load this file anyway.
+ */
+
+#content {
+	background: white;
+	color: black;
+	border: 1px solid #aaa;
+	border-right: none;
+	line-height: 1.5em;
+}
+/* the left column width is specified in class .portlet */
+
+/* Font size:
+** We take advantage of keyword scaling- browsers won't go below 9px
+** More at http://www.w3.org/2003/07/30-font-size
+** http://style.cleverchimp.com/font_size_intervals/altintervals.html
+*/
+
+body {
+	font: x-small sans-serif;
+	background: #f9f9f9 url(headbg.jpg) 0 0 no-repeat;
+	color: black;
+	margin: 0;
+	padding: 0;
+}
+
+/* scale back up to a sane default */
+#globalWrapper {
+	font-size: 127%;
+	width: 100%;
+	margin: 0;
+	padding: 0;
+}
+.visualClear {
+	clear: both;
+}
+
+/* general styles */
+
+table {
+	font-size: 100%;
+	color: black;
+	/* we don't want the bottom borders of <h2>s to be visible through
+	   floated tables */
+	background-color: white;
+}
+a {
+	text-decoration: none;
+	color: #002bb8;
+	background: none;
+}
+a:visited {
+	color: #5a3696;
+}
+a:active {
+	color: #faa700;
+}
+a:hover {
+	text-decoration: underline;
+}
+a.stub {
+	color: #772233;
+}
+a.new, #p-personal a.new {
+	color: #ba0000;
+}
+a.new:visited, #p-personal a.new:visited {
+	color: #a55858;
+}
+
+img {
+	border: none;
+	vertical-align: middle;
+}
+p img {
+	margin: 0;
+}
+
+hr {
+	height: 1px;
+	color: #aaa;
+	background-color: #aaa;
+	border: 0;
+	margin: .2em 0 .2em 0;
+}
+
+h1, h2, h3, h4, h5, h6 {
+	color: black;
+	background: none;
+	font-weight: normal;
+	margin: 0;
+	padding-top: .5em;
+	padding-bottom: .17em;
+	border-bottom: 1px solid #aaa;
+}
+h1 { font-size: 188%; }
+h1 .editsection { font-size: 53%; }
+h2 { font-size: 150%; }
+h2 .editsection { font-size: 67%; }
+h3, h4, h5, h6 {
+	border-bottom: none;
+	font-weight: bold;
+}
+h3 { font-size: 132%; }
+h3 .editsection { font-size: 76%; font-weight: normal; }
+h4 { font-size: 116%; }
+h4 .editsection { font-size: 86%; font-weight: normal; }
+h5 { font-size: 100%; }
+h5 .editsection { font-weight: normal; }
+h6 { font-size: 80%;  }
+h6 .editsection { font-size: 125%; font-weight: normal; }
+
+.editsection {
+	float: right;
+	margin-left: 5px;
+}
+
+ul {
+	line-height: 1.5em;
+	list-style-type: square;
+	margin: .3em 0 0 1.5em;
+	padding: 0;
+	list-style-image: url(bullet.gif);
+}
+ol {
+	line-height: 1.5em;
+	margin: .3em 0 0 3.2em;
+	padding: 0;
+	list-style-image: none;
+}
+li {
+	margin-bottom: .1em;
+}
+dt {
+	font-weight: bold;
+	margin-bottom: .1em;
+}
+dl {
+	margin-top: .2em;
+	margin-bottom: .5em;
+}
+dd {
+	line-height: 1.5em;
+	margin-left: 2em;
+	margin-bottom: .1em;
+}
+
+fieldset {
+	border: 1px solid #2f6fab;
+	margin: 1em 0 1em 0;
+	padding: 0 1em 1em;
+	line-height: 1.5em;
+}
+legend {
+	padding: .5em;
+	font-size: 95%;
+}
+form {
+	border: none;
+	margin: 0;
+}
+
+textarea {
+	width: 100%;
+	padding: .1em;
+}
+
+input.historysubmit {
+	padding: 0 .3em .3em .3em !important;
+	font-size: 94%;
+	cursor: pointer;
+	height: 1.7em !important;
+	margin-left: 1.6em;
+}
+select {
+	vertical-align: top;
+}
+abbr, acronym, .explain {
+	border-bottom: 1px dotted black;
+	color: black;
+	background: none;
+	cursor: help;
+}
+q {
+	font-family: Times, "Times New Roman", serif;
+	font-style: italic;
+}
+/* disabled for now
+blockquote {
+	font-family: Times, "Times New Roman", serif;
+	font-style: italic;
+}*/
+code {
+	background-color: #f9f9f9;
+}
+pre {
+	padding: 1em;
+	border: 1px dashed #2f6fab;
+	color: black;
+	background-color: #f9f9f9;
+	line-height: 1.1em;
+}
+
+/*
+** the main content area
+*/
+
+#contentSub, #contentSub2 {
+	font-size: 84%;
+	line-height: 1.2em;
+	margin: 0 0 1.4em 1em;
+	color: #7d7d7d;
+	width: auto;
+}
+span.subpages {
+	display: block;
+}
+
+/* Some space under the headers in the content area */
+#bodyContent h1, #bodyContent h2 {
+	margin-bottom: .6em;
+}
+#bodyContent h3, #bodyContent h4, #bodyContent h5 {
+	margin-bottom: .3em;
+}
+.firstHeading {
+	margin-bottom: .1em;
+}
+
+/* user notification thing */
+.usermessage {
+	background-color: #ffce7b;
+	border: 1px solid #ffa500;
+	color: black;
+	font-weight: bold;
+	margin: 2em 0 1em;
+	padding: .5em 1em;
+	vertical-align: middle;
+}
+#siteNotice {
+	text-align: center;
+	font-size: 95%;
+	padding: 0 .9em;
+}
+#siteNotice p {
+	margin: 0;
+	padding: 0;
+}
+.error {
+	color: red;
+	font-size: larger;
+}
+.errorbox, .successbox {
+	font-size: larger;
+	border: 2px solid;
+	padding: .5em 1em;
+	float: left;
+	margin-bottom: 2em;
+	color: #000;
+}
+.errorbox {
+	border-color: red;
+	background-color: #fff2f2;
+}
+.successbox {
+	border-color: green;
+	background-color: #dfd;
+}
+.errorbox h2, .successbox h2 {
+	font-size: 1em;
+	font-weight: bold;
+	display: inline;
+	margin: 0 .5em 0 0;
+	border: none;
+}
+
+#catlinks {
+	border: 1px solid #aaa;
+	background-color: #f9f9f9;
+	padding: 5px;
+	margin-top: 1em;
+	clear: both;
+}
+/* currently unused, intended to be used by a metadata box
+in the bottom-right corner of the content area */
+.documentDescription {
+	/* The summary text describing the document */
+	font-weight: bold;
+	display: block;
+	margin: 1em 0;
+	line-height: 1.5em;
+}
+.documentByLine {
+	text-align: right;
+	font-size: 90%;
+	clear: both;
+	font-weight: normal;
+	color: #76797c;
+}
+
+/* emulate center */
+.center {
+	width: 100%;
+	text-align: center;
+}
+*.center * {
+	margin-left: auto;
+	margin-right: auto;
+}
+/* small for tables and similar */
+.small, .small * {
+	font-size: 94%;
+}
+table.small {
+	font-size: 100%;
+}
+
+/*
+** content styles
+*/
+
+#toc,
+.toc,
+.mw-warning {
+	border: 1px solid #aaa;
+	background-color: #f9f9f9;
+	padding: 5px;
+	font-size: 95%;
+}
+#toc h2,
+.toc h2 {
+	display: inline;
+	border: none;
+	padding: 0;
+	font-size: 100%;
+	font-weight: bold;
+}
+#toc #toctitle,
+.toc #toctitle,
+#toc .toctitle,
+.toc .toctitle {
+	text-align: center;
+}
+#toc ul,
+.toc ul {
+	list-style-type: none;
+	list-style-image: none;
+	margin-left: 0;
+	padding-left: 0;
+	text-align: left;
+}
+#toc ul ul,
+.toc ul ul {
+	margin: 0 0 0 2em;
+}
+#toc .toctoggle,
+.toc .toctoggle {
+	font-size: 94%;
+}
+
+.mw-warning {
+	margin-left: 50px;
+	margin-right: 50px;
+	text-align: center;
+}
+
+/* images */
+div.floatright, table.floatright {
+	clear: right;
+	float: right;
+	position: relative;
+	margin: 0 0 .5em .5em;
+	border: 0;
+/*
+	border: .5em solid white;
+	border-width: .5em 0 .8em 1.4em;
+*/
+}
+div.floatright p { font-style: italic; }
+div.floatleft, table.floatleft {
+	float: left;
+	clear: left;
+	position: relative;
+	margin: 0 .5em .5em 0;
+	border: 0;
+/*
+	margin: .3em .5em .5em 0;
+	border: .5em solid white;
+	border-width: .5em 1.4em .8em 0;
+*/
+}
+div.floatleft p { font-style: italic; }
+/* thumbnails */
+div.thumb {
+	margin-bottom: .5em;
+	border-style: solid;
+	border-color: white;
+	width: auto;
+}
+div.thumbinner {
+	border: 1px solid #ccc;
+	padding: 3px !important;
+	background-color: #f9f9f9;
+	font-size: 94%;
+	text-align: center;
+	overflow: hidden;
+}
+html .thumbimage {
+	border: 1px solid #ccc;
+}
+html .thumbcaption {
+	border: none;
+	text-align: left;
+	line-height: 1.4em;
+	padding: 3px !important;
+	font-size: 94%;
+}
+div.magnify {
+	float: right;
+	border: none !important;
+	background: none !important;
+}
+div.magnify a, div.magnify img {
+	display: block;
+	border: none !important;
+	background: none !important;
+}
+div.tright {
+	clear: right;
+	float: right;
+	border-width: .5em 0 .8em 1.4em;
+}
+div.tleft {
+	float: left;
+	clear: left;
+	margin-right: .5em;
+	border-width: .5em 1.4em .8em 0;
+}
+
+.hiddenStructure {
+	display: none;
+	speak: none;
+}
+img.tex {
+	vertical-align: middle;
+}
+span.texhtml {
+	font-family: serif;
+}
+
+/*
+** classes for special content elements like town boxes
+** intended to be referenced directly from the wiki src
+*/
+
+/*
+** User styles
+*/
+/* table standards */
+table.rimage {
+	float: right;
+	position: relative;
+	margin-left: 1em;
+	margin-bottom: 1em;
+	text-align: center;
+}
+.toccolours {
+	border: 1px solid #aaa;
+	background-color: #f9f9f9;
+	padding: 5px;
+	font-size: 95%;
+}
+div.townBox {
+	position: relative;
+	float: right;
+	background: white;
+	margin-left: 1em;
+	border: 1px solid gray;
+	padding: .3em;
+	width: 200px;
+	overflow: hidden;
+	clear: right;
+}
+div.townBox dl {
+	padding: 0;
+	margin: 0 0 .3em;
+	font-size: 96%;
+}
+div.townBox dl dt {
+	background: none;
+	margin: .4em 0 0;
+}
+div.townBox dl dd {
+	margin: .1em 0 0 1.1em;
+	background-color: #f3f3f3;
+}
+
+/*
+** edit views etc
+*/
+.special li {
+	line-height: 1.4em;
+	margin: 0;
+	padding: 0;
+}
+
+/* Page history styling */
+/* the auto-generated edit comments */
+.autocomment {
+	color: gray;
+}
+#pagehistory span.user {
+	margin-left: 1.4em;
+	margin-right: .4em;
+}
+#pagehistory span.minor {
+	font-weight: bold;
+}
+#pagehistory li {
+	border: 1px solid white;
+}
+#pagehistory li.selected {
+	background-color: #f9f9f9;
+	border: 1px dashed #aaa;
+}
+
+/*
+** Diff rendering
+*/
+table.diff, td.diff-otitle, td.diff-ntitle {
+	background-color: white;
+}
+td.diff-addedline {
+	background: #cfc;
+	font-size: smaller;
+}
+td.diff-deletedline {
+	background: #ffa;
+	font-size: smaller;
+}
+td.diff-context {
+	background: #eee;
+	font-size: smaller;
+}
+.diffchange {
+	color: red;
+	font-weight: bold;
+}
+
+/*
+** keep the whitespace in front of the ^=, hides rule from konqueror
+** this is css3, the validator doesn't like it when validating as css2
+*/
+#bodyContent a.external,
+#bodyContent a[href ^="gopher://"] {
+	background: url(external.png) center right no-repeat;
+	padding-right: 13px;
+}
+#bodyContent a[href ^="https://"],
+.link-https {
+	background: url(lock_icon.gif) center right no-repeat;
+	padding-right: 16px;
+}
+#bodyContent a[href ^="mailto:"],
+.link-mailto {
+	background: url(mail_icon.gif) center right no-repeat;
+	padding-right: 18px;
+}
+#bodyContent a[href ^="news://"] {
+	background: url(news_icon.png) center right no-repeat;
+	padding-right: 18px;
+}
+#bodyContent a[href ^="ftp://"],
+.link-ftp {
+	background: url(file_icon.gif) center right no-repeat;
+	padding-right: 18px;
+}
+#bodyContent a[href ^="irc://"],
+.link-irc {
+	background: url(discussionitem_icon.gif) center right no-repeat;
+	padding-right: 18px;
+}
+#bodyContent a.external[href $=".ogg"], #bodyContent a.external[href $=".OGG"],
+#bodyContent a.external[href $=".mid"], #bodyContent a.external[href $=".MID"],
+#bodyContent a.external[href $=".midi"], #bodyContent a.external[href $=".MIDI"],
+#bodyContent a.external[href $=".mp3"], #bodyContent a.external[href $=".MP3"],
+#bodyContent a.external[href $=".wav"], #bodyContent a.external[href $=".WAV"],
+#bodyContent a.external[href $=".wma"], #bodyContent a.external[href $=".WMA"],
+.link-audio {
+	background: url("audio.png") center right no-repeat;
+	padding-right: 13px;
+}
+#bodyContent a.external[href $=".ogm"], #bodyContent a.external[href $=".OGM"],
+#bodyContent a.external[href $=".avi"], #bodyContent a.external[href $=".AVI"],
+#bodyContent a.external[href $=".mpeg"], #bodyContent a.external[href $=".MPEG"],
+#bodyContent a.external[href $=".mpg"], #bodyContent a.external[href $=".MPG"],
+.link-video {
+	background: url("video.png") center right no-repeat;
+	padding-right: 13px;
+}
+#bodyContent a.external[href $=".pdf"], #bodyContent a.external[href $=".PDF"],
+#bodyContent a.external[href *=".pdf#"], #bodyContent a.external[href *=".PDF#"],
+#bodyContent a.external[href *=".pdf?"], #bodyContent a.external[href *=".PDF?"],
+.link-document {
+	background: url("document.png") center right no-repeat;
+	padding-right: 12px;
+}
+
+/* disable interwiki styling */
+#bodyContent a.extiw,
+#bodyContent a.extiw:active {
+	color: #36b;
+	background: none;
+	padding: 0;
+}
+#bodyContent a.external {
+	color: #36b;
+}
+/* this can be used in the content area to switch off
+special external link styling */
+#bodyContent .plainlinks a {
+	background: none !important;
+	padding: 0 !important;
+}
+/*
+** Structural Elements
+*/
+
+/*
+** general portlet styles (elements in the quickbar)
+*/
+.portlet {
+	border: none;
+	margin: 0 0 .5em;
+	padding: 0;
+	float: none;
+	width: 11.6em;
+	overflow: hidden;
+}
+.portlet h4 {
+	font-size: 95%;
+	font-weight: normal;
+	white-space: nowrap;
+}
+.portlet h5 {
+	background: transparent;
+	padding: 0 1em 0 .5em;
+	display: inline;
+	height: 1em;
+	text-transform: lowercase;
+	font-size: 91%;
+	font-weight: normal;
+	white-space: nowrap;
+}
+.portlet h6 {
+	background: #ffae2e;
+	border: 1px solid #2f6fab;
+	border-style: solid solid none solid;
+	padding: 0 1em 0 1em;
+	text-transform: lowercase;
+	display: block;
+	font-size: 1em;
+	height: 1.2em;
+	font-weight: normal;
+	white-space: nowrap;
+}
+.pBody {
+	font-size: 95%;
+	background-color: white;
+	color: black;
+	border-collapse: collapse;
+	border: 1px solid #aaa;
+	padding: 0 .8em .3em .5em;
+}
+.portlet h1,
+.portlet h2,
+.portlet h3,
+.portlet h4 {
+	margin: 0;
+	padding: 0;
+}
+.portlet ul {
+	line-height: 1.5em;
+	list-style-type: square;
+	list-style-image: url(bullet.gif);
+	font-size: 95%;
+}
+.portlet li {
+	padding: 0;
+	margin: 0;
+}
+
+/*
+** Logo properties
+*/
+
+@media handheld {
+	#p-logo { display: none }
+}
+
+/*
+** the navigation portlet
+*/
+
+#p-navigation .pBody {
+	padding-right: 0;
+}
+
+#p-navigation li.active a, #p-navigation li.active a:hover {
+	text-decoration: none;
+	font-weight: bold;
+}
+
+
+/*
+** Search portlet
+*/
+input.searchButton {
+	margin-top: 1px;
+	font-size: 95%;
+}
+#searchGoButton {
+	padding-left: .5em;
+	padding-right: .5em;
+	font-weight: bold;
+}
+#searchInput {
+	width: 10.9em;
+	margin: 0;
+	font-size: 95%;
+}
+#p-search .pBody {
+	padding: .5em .4em .4em .4em;
+	text-align: center;
+}
+
+/*
+** the personal toolbar
+*/
+#p-personal ul {
+	text-transform: lowercase;
+}
+#p-personal li.active {
+	font-weight: bold;
+}
+/*
+** the page-related actions- page/talk, edit etc
+*/
+#p-cactions .hiddenStructure {
+	display: none;
+}
+#p-cactions li a {
+	text-transform: lowercase;
+}
+
+/* TODO: #t-iscite is only used by the Cite extension, come up with some
+ * system which allows extensions to add to this file on the fly
+ */
+#t-ispermalink, #t-iscite {
+	color: #999;
+}
+/*
+** footer
+*/
+#footer {
+	background-color: white;
+	border-top: 1px solid #fabd23;
+	border-bottom: 1px solid #fabd23;
+	margin: .6em 0 1em 0;
+	padding: .4em 0 1.2em 0;
+	text-align: center;
+	font-size: 90%;
+}
+#footer li {
+	display: inline;
+	margin: 0 1.3em;
+}
+/* hide from incapable browsers */
+head:first-child+body #footer li { white-space: nowrap; }
+#f-poweredbyico, #f-copyrightico {
+	margin: 0 8px;
+	position: relative;
+	top: -2px; /* Bump it up just a tad */
+}
+#f-poweredbyico {
+	float: right;
+	height: 1%;
+}
+#f-copyrightico {
+	float: left;
+	height: 1%;
+}
+
+/* js pref toc */
+#preftoc {
+	margin: 0;
+	padding: 0;
+	width: 100%;
+	clear: both;
+}
+#preftoc li {
+	background-color: #f0f0f0;
+	color: #000;
+}
+#preftoc li.selected {
+	font-weight: bold;
+	background-color: #f9f9f9;
+	border: 1px solid #aaa;
+	border-bottom: none;
+	cursor: default;
+	top: 1px;
+	padding-top: 2px;
+	margin-right: -3px;
+}
+#preftoc > li.selected {
+	top: 2px;
+}
+#preftoc a,
+#preftoc a:active {
+	display: block;
+	color: #000;
+	padding: 0 .7em;
+	position: relative;
+	text-decoration: none;
+}
+#preftoc li.selected a {
+	cursor: default;
+	text-decoration: none;
+}
+#prefcontrol {
+	padding-top: 2em;
+	clear: both;
+}
+#preferences {
+	margin: 0;
+	border: 1px solid #aaa;
+	clear: both;
+	padding: 1.5em;
+	background-color: #F9F9F9;
+}
+.prefsection {
+	border: none;
+	padding: 0;
+	margin: 0;
+}
+.prefsection fieldset {
+	border: 1px solid #aaa;
+	float: left;
+	margin-right: 2em;
+}
+.prefsection legend {
+	font-weight: bold;   
+}
+.prefsection table, .prefsection legend {
+	background-color: #F9F9F9;
+}
+div.prefsectiontip {
+	font-size: 95%;
+	margin-top: 0;
+	background-color: #FFC1C1;
+	padding: .2em .7em;
+	clear: both;
+}
+.btnSavePrefs {
+	font-weight: bold;
+	padding-left: .3em;
+	padding-right: .3em;
+}
+
+.preferences-login {
+	clear: both;
+	margin-bottom: 1.5em;
+}
+
+.prefcache {
+	font-size: 90%;
+	margin-top: 2em;
+}
+
+div#userloginForm form,
+div#userlogin form#userlogin2 {
+	margin: 0 3em 1em 0;
+	border: 1px solid #aaa;
+	clear: both;
+	padding: 1.5em 2em;
+	background-color: #f9f9f9;
+	float: left;
+}
+
+div#userloginForm table,
+div#userlogin form#userlogin2 table {
+	background-color: #f9f9f9;
+}
+
+div#userloginForm h2,
+div#userlogin form#userlogin2 h2 {
+	padding-top: 0;
+}
+
+div#userlogin .captcha {
+	border: 1px solid #bbb;
+	padding: 1.5em 2em;
+	width: 400px;
+	background-color: white;
+}
+
+
+#userloginprompt, #languagelinks {
+	font-size: 85%;
+}
+
+#login-sectiontip {
+	font-size: 85%;
+	line-height: 1.2;
+	padding-top: 2em;
+}
+
+#userlogin .loginText, #userlogin .loginPassword {
+	width: 12em;
+}
+
+#userloginlink a, #wpLoginattempt, #wpCreateaccount {
+	font-weight: bold;
+}
+
+/* more IE fixes */
+/* float/negative margin brokenness */
+* html #footer {margin-top: 0;}
+* html #column-content {
+	display: inline;
+	margin-bottom: 0;
+}
+* html div.editsection { font-size: smaller; }
+#pagehistory li.selected { position: relative; }
+
+/* Mac IE 5.0 fix; floated content turns invisible */
+* > html #column-content {
+	float: none;
+}
+* > html #column-one {
+	position: absolute;
+	left: 0;
+	top: 0;
+}
+* > html #footer {
+	margin-left: 13.2em;
+}
+.redirectText {
+	font-size: 150%;
+	margin: 5px;
+}
+
+.printfooter {
+	display: none;
+}
+
+.not-patrolled {
+	background-color: #ffa;
+}
+div.patrollink {
+	font-size: 75%;
+	text-align: right;
+}
+span.newpage, span.minor, span.searchmatch, span.bot {
+	font-weight: bold;
+}
+span.unpatrolled {
+	font-weight: bold;
+	color: red;
+}
+
+span.searchmatch {
+	color: red;
+}
+.sharedUploadNotice {
+	font-style: italic;
+}
+
+span.updatedmarker {
+	color: black;
+	background-color: #0f0;
+}
+
+table.gallery {
+	border: 1px solid #ccc;
+	margin: 2px;
+	padding: 2px;
+	background-color: white;
+}
+
+table.gallery tr {
+	vertical-align: top;
+}
+
+table.gallery td {
+	vertical-align: top;
+	background-color: #f9f9f9;
+	border: solid 2px white;
+}
+
+/* Keep this temporarily so that cached pages will display right */
+table.gallery td.galleryheader {
+    text-align: center;
+	font-weight: bold;
+}
+table.gallery caption {
+	font-weight: bold;
+}
+
+div.gallerybox {
+	margin: 2px;
+	width:  150px;
+}
+
+div.gallerybox div.thumb {
+	text-align: center;
+	border: 1px solid #ccc;
+	margin: 2px;
+}
+
+div.gallerytext {
+	font-size: 94%;
+	padding: 2px 4px;
+}
+
+span.comment {
+	font-style: italic;
+}
+
+span.changedby {
+	font-size: 95%;
+}
+
+.previewnote {
+	text-indent: 3em;
+	color: #c00;
+	border-bottom: 1px solid #aaa;
+	padding-bottom: 1em;
+	margin-bottom: 1em;
+}
+
+.previewnote p {
+	margin: 0;
+	padding: 0;
+}
+
+.editExternally {
+	border: 1px solid gray;
+	background-color: #ffffff;
+	padding: 3px;
+	margin-top: 0.5em;
+	float: left;
+	font-size: small;
+	text-align: center;
+}
+.editExternallyHelp {
+	font-style: italic;
+	color: gray;
+}
+
+li span.deleted, span.history-deleted {
+	text-decoration: line-through;
+	color: #888;
+	font-style: italic;
+}
+
+.toggle {
+	margin-left: 2em;
+	text-indent: -2em;
+}
+
+/* Classes for EXIF data display */
+table.mw_metadata {
+	font-size: 0.8em;
+	margin-left: 0.5em;
+	margin-bottom: 0.5em;
+	width: 300px;
+}
+
+table.mw_metadata caption {
+	font-weight: bold;
+}
+
+table.mw_metadata th {
+	font-weight: normal;
+}
+
+table.mw_metadata td {
+	padding: 0.1em;
+}
+
+table.mw_metadata {
+	border: none;
+	border-collapse: collapse;
+}
+
+table.mw_metadata td, table.mw_metadata th {
+	text-align: center;
+	border: 1px solid #aaaaaa;
+	padding-left: 0.1em;
+	padding-right: 0.1em;
+}
+
+table.mw_metadata th {
+	background-color: #f9f9f9;
+}
+
+table.mw_metadata td {
+	background-color: #fcfcfc;
+}
+
+table.collapsed tr.collapsable {
+	display: none;
+}
+
+
+/* filetoc */
+ul#filetoc {
+	text-align: center;
+	border: 1px solid #aaaaaa;
+	background-color: #f9f9f9;
+	padding: 5px;
+	font-size: 95%;
+	margin-bottom: 0.5em;
+	margin-left: 0;
+	margin-right: 0;
+}
+
+#filetoc li {
+	display: inline;
+	list-style-type: none;
+	padding-right: 2em;
+}
+
+input#wpSummary {
+	width: 80%;
+}
+
+/* @bug 1714 */
+input#wpSave, input#wpDiff {
+	margin-right: 0.33em;
+}
+
+#editform .editOptions {
+	display: inline;
+}
+
+#wpSave {
+	font-weight: bold;
+}
+
+/* Classes for article validation */
+
+table.revisionform_default {
+	border: 1px solid #000000;
+}
+
+table.revisionform_focus {
+	border: 1px solid #000000;
+	background-color:#00BBFF;
+}
+
+tr.revision_tr_default {
+	background-color:#EEEEEE;
+}
+
+tr.revision_tr_first {
+	background-color:#DDDDDD;
+}
+
+p.revision_saved {
+	color: green;
+	font-weight:bold;
+}
+
+#mw_trackbacks {
+	border: solid 1px #bbbbff;
+	background-color: #eeeeff;
+	padding: 0.2em;
+}
+
+
+/* Allmessages table */
+
+#allmessagestable th {
+	background-color: #b2b2ff;
+}
+
+#allmessagestable tr.orig {
+	background-color: #ffe2e2;
+}
+
+#allmessagestable tr.new {
+	background-color: #e2ffe2;
+}
+
+#allmessagestable tr.def {
+	background-color: #f0f0ff;
+}
+
+
+/* noarticletext */
+div.noarticletext {
+	border: 1px solid #ccc;
+	background: #fff;
+	padding: .2em 1em;
+	color: #000;
+}
+
+div#searchTargetContainer {
+	left:       10px;
+	top:        10px;
+	width:      90%;
+	background: white;
+}
+
+div#searchTarget {
+	padding:    3px;
+	margin:     5px;
+	background: #F0F0F0;
+	border:     solid 1px blue;
+}
+
+div#searchTarget ul li {
+	list-style: none;
+}
+
+div#searchTarget ul li:before {
+	color: orange;
+	content: "\00BB \0020";
+}
+
+div.multipageimagenavbox {
+   border: solid 1px silver;
+   padding: 4px;
+   margin: 1em;
+   -moz-border-radius: 6px;
+   background: #f0f0f0;
+}
+
+div.multipageimagenavbox div.thumb {
+   border: none;
+   margin-left: 2em;
+   margin-right: 2em;
+}
+
+div.multipageimagenavbox hr {
+   margin: 6px;
+}
+
+table.multipageimage td {
+   text-align: center;
+}
+
+/** Special:Version */
+
+table#sv-ext, table#sv-hooks {
+	margin: 1em;
+	padding:0em;
+}
+
+#sv-ext td, #sv-hooks td,
+#sv-ext th, #sv-hooks th {
+	border: 1px solid #A0A0A0;
+	padding: 0 0.15em 0 0.15em;
+}
+#sv-ext th, #sv-hooks th {
+	background-color: #F0F0F0;
+	color: black;
+	padding: 0 0.15em 0 0.15em;
+}
+tr.sv-space{
+	height: 0.8em;
+	border:none;
+}
+tr.sv-space td { display: none; }
+
+/*
+  Table pager (e.g. Special:Imagelist)
+  - remove underlines from the navigation link
+  - collapse borders
+  - set the borders to outsets (similar to Special:Allmessages)
+  - remove line wrapping for all td and th, set background color
+  - restore line wrapping for the last two table cells (description and size)
+*/
+.TablePager_nav a { text-decoration: none; }
+.TablePager { border-collapse: collapse; }
+.TablePager, .TablePager td, .TablePager th { 
+	border: 0.15em solid #777777;
+	padding: 0 0.15em 0 0.15em;
+}
+.TablePager th { background-color: #eeeeff }
+.TablePager td { background-color: #ffffff }
+.TablePager tr:hover td { background-color: #eeeeff }
+
+.imagelist td, .imagelist th { white-space: nowrap }
+.imagelist .TablePager_col_links { background-color: #eeeeff }
+.imagelist .TablePager_col_img_description { white-space: normal }
+.imagelist th.TablePager_sort { background-color: #ccccff }
+
+.templatesUsed { margin-top: 1.5em; }
+
+.mw-summary-preview {
+	margin: 0.1em 0;
+}
+@media handheld {
+	.nonessential {
+		/* Kill big bulky stuff that will clog up the screen */
+		display: none;
+	}
+}
+
+/**
+ * Here is some stuff that's ACTUALLY COMMON TO ALL SKINS.
+ * When the day comes, it can be moved to a *real* common.css.
+ */
+.mw-plusminus-null { color: #aaa; }
+.texvc { direction: ltr; unicode-bidi: embed; }
+/* Stop floats from intruding into edit area in previews */
+#toolbar, #wpTextbox1 { clear: both; }
Index: /MediaWiki/branches/1.11/skins/monobook/main.css
===================================================================
--- /MediaWiki/branches/1.11/skins/monobook/main.css	(revision 1280)
+++ /MediaWiki/branches/1.11/skins/monobook/main.css	(revision 1280)
@@ -0,0 +1,1638 @@
+/*
+** MediaWiki 'monobook' style sheet for CSS2-capable browsers.
+** Copyright Gabriel Wicke - http://wikidev.net/
+** License: GPL (http://www.gnu.org/copyleft/gpl.html)
+**
+** Loosely based on http://www.positioniseverything.net/ordered-floats.html by Big John
+** and the Plone 2.0 styles, see http://plone.org/ (Alexander Limi,Joe Geldart & Tom Croucher,
+** Michael Zeltner and Geir Bækholt)
+** All you guys rock :)
+*/
+
+/**
+ * Stylesheet for screen/projection.  All rules not marked media-specific are
+ * shared with handheld.css and should be updated in tandem.  The rules can't
+ * be in the same file because old browsers like IE5 won't obey @media rules.
+ *
+ * Rules that are screen/projection-specific are marked with commented-out
+ * @media rules and indentation.
+ */
+
+/* @media screen, projection { */
+	#column-content {
+		width: 100%;
+		float: right;
+		margin: 0 0 .6em -12.2em;
+		padding: 0;
+	}
+	#content {
+		margin: 2.8em 0 0 12.2em;
+		padding: 0 1em 1.5em 1em;
+		position: relative;
+		z-index: 2;
+	}
+	#column-one {
+		padding-top: 160px;
+	}
+/* } */
+#content {
+	background: white;
+	color: black;
+	border: 1px solid #aaa;
+	border-right: none;
+	line-height: 1.5em;
+}
+/* the left column width is specified in class .portlet */
+
+/* Font size:
+** We take advantage of keyword scaling- browsers won't go below 9px
+** More at http://www.w3.org/2003/07/30-font-size
+** http://style.cleverchimp.com/font_size_intervals/altintervals.html
+*/
+
+body {
+	font: x-small sans-serif;
+	background: #f9f9f9 url(headbg.jpg) 0 0 no-repeat;
+	color: black;
+	margin: 0;
+	padding: 0;
+}
+
+/* scale back up to a sane default */
+#globalWrapper {
+	font-size: 127%;
+	width: 100%;
+	margin: 0;
+	padding: 0;
+}
+.visualClear {
+	clear: both;
+}
+
+/* general styles */
+
+table {
+	font-size: 100%;
+	color: black;
+	/* we don't want the bottom borders of <h2>s to be visible through
+	   floated tables */
+	background-color: white;
+}
+a {
+	text-decoration: none;
+	color: #002bb8;
+	background: none;
+}
+a:visited {
+	color: #5a3696;
+}
+a:active {
+	color: #faa700;
+}
+a:hover {
+	text-decoration: underline;
+}
+a.stub {
+	color: #772233;
+}
+a.new, #p-personal a.new {
+	color: #ba0000;
+}
+a.new:visited, #p-personal a.new:visited {
+	color: #a55858;
+}
+
+img {
+	border: none;
+	vertical-align: middle;
+}
+/* @media screen, projection { */
+	p {
+		margin: .4em 0 .5em 0;
+		line-height: 1.5em;
+	}
+/* } */
+p img {
+	margin: 0;
+}
+
+hr {
+	height: 1px;
+	color: #aaa;
+	background-color: #aaa;
+	border: 0;
+	margin: .2em 0 .2em 0;
+}
+
+h1, h2, h3, h4, h5, h6 {
+	color: black;
+	background: none;
+	font-weight: normal;
+	margin: 0;
+	padding-top: .5em;
+	padding-bottom: .17em;
+	border-bottom: 1px solid #aaa;
+}
+h1 { font-size: 188%; }
+h1 .editsection { font-size: 53%; }
+h2 { font-size: 150%; }
+h2 .editsection { font-size: 67%; }
+h3, h4, h5, h6 {
+	border-bottom: none;
+	font-weight: bold;
+}
+h3 { font-size: 132%; }
+h3 .editsection { font-size: 76%; font-weight: normal; }
+h4 { font-size: 116%; }
+h4 .editsection { font-size: 86%; font-weight: normal; }
+h5 { font-size: 100%; }
+h5 .editsection { font-weight: normal; }
+h6 { font-size: 80%;  }
+h6 .editsection { font-size: 125%; font-weight: normal; }
+
+.editsection {
+	float: right;
+	margin-left: 5px;
+}
+
+ul {
+	line-height: 1.5em;
+	list-style-type: square;
+	margin: .3em 0 0 1.5em;
+	padding: 0;
+	list-style-image: url(bullet.gif);
+}
+ol {
+	line-height: 1.5em;
+	margin: .3em 0 0 3.2em;
+	padding: 0;
+	list-style-image: none;
+}
+li {
+	margin-bottom: .1em;
+}
+dt {
+	font-weight: bold;
+	margin-bottom: .1em;
+}
+dl {
+	margin-top: .2em;
+	margin-bottom: .5em;
+}
+dd {
+	line-height: 1.5em;
+	margin-left: 2em;
+	margin-bottom: .1em;
+}
+
+fieldset {
+	border: 1px solid #2f6fab;
+	margin: 1em 0 1em 0;
+	padding: 0 1em 1em;
+	line-height: 1.5em;
+}
+legend {
+	padding: .5em;
+	font-size: 95%;
+}
+form {
+	border: none;
+	margin: 0;
+}
+
+textarea {
+	width: 100%;
+	padding: .1em;
+}
+
+input.historysubmit {
+	padding: 0 .3em .3em .3em !important;
+	font-size: 94%;
+	cursor: pointer;
+	height: 1.7em !important;
+	margin-left: 1.6em;
+}
+select {
+	vertical-align: top;
+}
+abbr, acronym, .explain {
+	border-bottom: 1px dotted black;
+	color: black;
+	background: none;
+	cursor: help;
+}
+q {
+	font-family: Times, "Times New Roman", serif;
+	font-style: italic;
+}
+/* disabled for now
+blockquote {
+	font-family: Times, "Times New Roman", serif;
+	font-style: italic;
+}*/
+code {
+	background-color: #f9f9f9;
+}
+pre {
+	padding: 1em;
+	border: 1px dashed #2f6fab;
+	color: black;
+	background-color: #f9f9f9;
+	line-height: 1.1em;
+}
+
+/*
+** the main content area
+*/
+
+/* @media screen, projection { */
+	#siteSub {
+		display: none;
+	}
+	#jump-to-nav {
+		display: none;
+	}
+/* } */
+
+#contentSub, #contentSub2 {
+	font-size: 84%;
+	line-height: 1.2em;
+	margin: 0 0 1.4em 1em;
+	color: #7d7d7d;
+	width: auto;
+}
+span.subpages {
+	display: block;
+}
+
+/* Some space under the headers in the content area */
+#bodyContent h1, #bodyContent h2 {
+	margin-bottom: .6em;
+}
+#bodyContent h3, #bodyContent h4, #bodyContent h5 {
+	margin-bottom: .3em;
+}
+.firstHeading {
+	margin-bottom: .1em;
+}
+
+/* user notification thing */
+.usermessage {
+	background-color: #ffce7b;
+	border: 1px solid #ffa500;
+	color: black;
+	font-weight: bold;
+	margin: 2em 0 1em;
+	padding: .5em 1em;
+	vertical-align: middle;
+}
+#siteNotice {
+	text-align: center;
+	font-size: 95%;
+	padding: 0 .9em;
+}
+#siteNotice p {
+	margin: 0;
+	padding: 0;
+}
+.error {
+	color: red;
+	font-size: larger;
+}
+.errorbox, .successbox {
+	font-size: larger;
+	border: 2px solid;
+	padding: .5em 1em;
+	float: left;
+	margin-bottom: 2em;
+	color: #000;
+}
+.errorbox {
+	border-color: red;
+	background-color: #fff2f2;
+}
+.successbox {
+	border-color: green;
+	background-color: #dfd;
+}
+.errorbox h2, .successbox h2 {
+	font-size: 1em;
+	font-weight: bold;
+	display: inline;
+	margin: 0 .5em 0 0;
+	border: none;
+}
+
+#catlinks {
+	border: 1px solid #aaa;
+	background-color: #f9f9f9;
+	padding: 5px;
+	margin-top: 1em;
+	clear: both;
+}
+/* currently unused, intended to be used by a metadata box
+in the bottom-right corner of the content area */
+.documentDescription {
+	/* The summary text describing the document */
+	font-weight: bold;
+	display: block;
+	margin: 1em 0;
+	line-height: 1.5em;
+}
+.documentByLine {
+	text-align: right;
+	font-size: 90%;
+	clear: both;
+	font-weight: normal;
+	color: #76797c;
+}
+
+/* emulate center */
+.center {
+	width: 100%;
+	text-align: center;
+}
+*.center * {
+	margin-left: auto;
+	margin-right: auto;
+}
+/* small for tables and similar */
+.small, .small * {
+	font-size: 94%;
+}
+table.small {
+	font-size: 100%;
+}
+
+/*
+** content styles
+*/
+
+#toc,
+.toc,
+.mw-warning {
+	border: 1px solid #aaa;
+	background-color: #f9f9f9;
+	padding: 5px;
+	font-size: 95%;
+}
+#toc h2,
+.toc h2 {
+	display: inline;
+	border: none;
+	padding: 0;
+	font-size: 100%;
+	font-weight: bold;
+}
+#toc #toctitle,
+.toc #toctitle,
+#toc .toctitle,
+.toc .toctitle {
+	text-align: center;
+}
+#toc ul,
+.toc ul {
+	list-style-type: none;
+	list-style-image: none;
+	margin-left: 0;
+	padding-left: 0;
+	text-align: left;
+}
+#toc ul ul,
+.toc ul ul {
+	margin: 0 0 0 2em;
+}
+#toc .toctoggle,
+.toc .toctoggle {
+	font-size: 94%;
+}
+
+.mw-warning {
+	margin-left: 50px;
+	margin-right: 50px;
+	text-align: center;
+}
+
+/* images */
+div.floatright, table.floatright {
+	clear: right;
+	float: right;
+	position: relative;
+	margin: 0 0 .5em .5em;
+	border: 0;
+/*
+	border: .5em solid white;
+	border-width: .5em 0 .8em 1.4em;
+*/
+}
+div.floatright p { font-style: italic; }
+div.floatleft, table.floatleft {
+	float: left;
+	clear: left;
+	position: relative;
+	margin: 0 .5em .5em 0;
+	border: 0;
+/*
+	margin: .3em .5em .5em 0;
+	border: .5em solid white;
+	border-width: .5em 1.4em .8em 0;
+*/
+}
+div.floatleft p { font-style: italic; }
+/* thumbnails */
+div.thumb {
+	margin-bottom: .5em;
+	border-style: solid;
+	border-color: white;
+	width: auto;
+}
+div.thumbinner {
+	border: 1px solid #ccc;
+	padding: 3px !important;
+	background-color: #f9f9f9;
+	font-size: 94%;
+	text-align: center;
+	overflow: hidden;
+}
+html .thumbimage {
+	border: 1px solid #ccc;
+}
+html .thumbcaption {
+	border: none;
+	text-align: left;
+	line-height: 1.4em;
+	padding: 3px !important;
+	font-size: 94%;
+}
+div.magnify {
+	float: right;
+	border: none !important;
+	background: none !important;
+}
+div.magnify a, div.magnify img {
+	display: block;
+	border: none !important;
+	background: none !important;
+}
+div.tright {
+	clear: right;
+	float: right;
+	border-width: .5em 0 .8em 1.4em;
+}
+div.tleft {
+	float: left;
+	clear: left;
+	margin-right: .5em;
+	border-width: .5em 1.4em .8em 0;
+}
+
+.hiddenStructure {
+	display: none;
+	speak: none;
+}
+img.tex {
+	vertical-align: middle;
+}
+span.texhtml {
+	font-family: serif;
+}
+
+/* Have a checkered background on images on the description pages and in galleries
+   to make transparency visible
+
+#file img, .gallerybox .thumb img {
+	background: url(Checker-16x16.png) repeat;
+}
+*/
+
+/*
+** classes for special content elements like town boxes
+** intended to be referenced directly from the wiki src
+*/
+
+/*
+** User styles
+*/
+/* table standards */
+table.rimage {
+	float: right;
+	position: relative;
+	margin-left: 1em;
+	margin-bottom: 1em;
+	text-align: center;
+}
+.toccolours {
+	border: 1px solid #aaa;
+	background-color: #f9f9f9;
+	padding: 5px;
+	font-size: 95%;
+}
+div.townBox {
+	position: relative;
+	float: right;
+	background: white;
+	margin-left: 1em;
+	border: 1px solid gray;
+	padding: .3em;
+	width: 200px;
+	overflow: hidden;
+	clear: right;
+}
+div.townBox dl {
+	padding: 0;
+	margin: 0 0 .3em;
+	font-size: 96%;
+}
+div.townBox dl dt {
+	background: none;
+	margin: .4em 0 0;
+}
+div.townBox dl dd {
+	margin: .1em 0 0 1.1em;
+	background-color: #f3f3f3;
+}
+
+/*
+** edit views etc
+*/
+.special li {
+	line-height: 1.4em;
+	margin: 0;
+	padding: 0;
+}
+
+/* Page history styling */
+/* the auto-generated edit comments */
+.autocomment {
+	color: gray;
+}
+#pagehistory span.user {
+	margin-left: 1.4em;
+	margin-right: .4em;
+}
+#pagehistory span.minor {
+	font-weight: bold;
+}
+#pagehistory li {
+	border: 1px solid white;
+}
+#pagehistory li.selected {
+	background-color: #f9f9f9;
+	border: 1px dashed #aaa;
+}
+
+/*
+** Diff rendering
+*/
+table.diff, td.diff-otitle, td.diff-ntitle {
+	background-color: white;
+}
+td.diff-addedline {
+	background: #cfc;
+	font-size: smaller;
+}
+td.diff-deletedline {
+	background: #ffa;
+	font-size: smaller;
+}
+td.diff-context {
+	background: #eee;
+	font-size: smaller;
+}
+.diffchange {
+	color: red;
+	font-weight: bold;
+	text-decoration: none;
+}
+
+/*
+** keep the whitespace in front of the ^=, hides rule from konqueror
+** this is css3, the validator doesn't like it when validating as css2
+*/
+#bodyContent a.external,
+#bodyContent a[href ^="gopher://"] {
+	background: url(external.png) center right no-repeat;
+	padding-right: 13px;
+}
+#bodyContent a[href ^="https://"],
+.link-https {
+	background: url(lock_icon.gif) center right no-repeat;
+	padding-right: 16px;
+}
+#bodyContent a[href ^="mailto:"],
+.link-mailto {
+	background: url(mail_icon.gif) center right no-repeat;
+	padding-right: 18px;
+}
+#bodyContent a[href ^="news://"] {
+	background: url(news_icon.png) center right no-repeat;
+	padding-right: 18px;
+}
+#bodyContent a[href ^="ftp://"],
+.link-ftp {
+	background: url(file_icon.gif) center right no-repeat;
+	padding-right: 18px;
+}
+#bodyContent a[href ^="irc://"],
+.link-irc {
+	background: url(discussionitem_icon.gif) center right no-repeat;
+	padding-right: 18px;
+}
+#bodyContent a.external[href $=".ogg"], #bodyContent a.external[href $=".OGG"],
+#bodyContent a.external[href $=".mid"], #bodyContent a.external[href $=".MID"],
+#bodyContent a.external[href $=".midi"], #bodyContent a.external[href $=".MIDI"],
+#bodyContent a.external[href $=".mp3"], #bodyContent a.external[href $=".MP3"],
+#bodyContent a.external[href $=".wav"], #bodyContent a.external[href $=".WAV"],
+#bodyContent a.external[href $=".wma"], #bodyContent a.external[href $=".WMA"],
+.link-audio {
+	background: url("audio.png") center right no-repeat;
+	padding-right: 13px;
+}
+#bodyContent a.external[href $=".ogm"], #bodyContent a.external[href $=".OGM"],
+#bodyContent a.external[href $=".avi"], #bodyContent a.external[href $=".AVI"],
+#bodyContent a.external[href $=".mpeg"], #bodyContent a.external[href $=".MPEG"],
+#bodyContent a.external[href $=".mpg"], #bodyContent a.external[href $=".MPG"],
+.link-video {
+	background: url("video.png") center right no-repeat;
+	padding-right: 13px;
+}
+#bodyContent a.external[href $=".pdf"], #bodyContent a.external[href $=".PDF"],
+#bodyContent a.external[href *=".pdf#"], #bodyContent a.external[href *=".PDF#"],
+#bodyContent a.external[href *=".pdf?"], #bodyContent a.external[href *=".PDF?"],
+.link-document {
+	background: url("document.png") center right no-repeat;
+	padding-right: 12px;
+}
+
+/* disable interwiki styling */
+#bodyContent a.extiw,
+#bodyContent a.extiw:active {
+	color: #36b;
+	background: none;
+	padding: 0;
+}
+#bodyContent a.external {
+	color: #36b;
+}
+/* this can be used in the content area to switch off
+special external link styling */
+#bodyContent .plainlinks a {
+	background: none !important;
+	padding: 0 !important;
+}
+/*
+** Structural Elements
+*/
+
+/*
+** general portlet styles (elements in the quickbar)
+*/
+.portlet {
+	border: none;
+	margin: 0 0 .5em;
+	padding: 0;
+	float: none;
+	width: 11.6em;
+	overflow: hidden;
+}
+.portlet h4 {
+	font-size: 95%;
+	font-weight: normal;
+	white-space: nowrap;
+}
+.portlet h5 {
+	background: transparent;
+	padding: 0 1em 0 .5em;
+	display: inline;
+	height: 1em;
+	text-transform: lowercase;
+	font-size: 91%;
+	font-weight: normal;
+	white-space: nowrap;
+}
+.portlet h6 {
+	background: #ffae2e;
+	border: 1px solid #2f6fab;
+	border-style: solid solid none solid;
+	padding: 0 1em 0 1em;
+	text-transform: lowercase;
+	display: block;
+	font-size: 1em;
+	height: 1.2em;
+	font-weight: normal;
+	white-space: nowrap;
+}
+.pBody {
+	font-size: 95%;
+	background-color: white;
+	color: black;
+	border-collapse: collapse;
+	border: 1px solid #aaa;
+	padding: 0 .8em .3em .5em;
+}
+.portlet h1,
+.portlet h2,
+.portlet h3,
+.portlet h4 {
+	margin: 0;
+	padding: 0;
+}
+.portlet ul {
+	line-height: 1.5em;
+	list-style-type: square;
+	list-style-image: url(bullet.gif);
+	font-size: 95%;
+}
+.portlet li {
+	padding: 0;
+	margin: 0;
+}
+
+/*
+** Logo properties
+*/
+
+/* @media screen, projection { */
+	#p-logo {
+		top: 0;
+		left: 0;
+		position: absolute; /*needed to use z-index */
+		z-index: 3;
+		height: 155px;
+		width: 12em;
+		overflow: visible;
+	}
+	#p-logo h5 {
+		display: none;
+	}
+	#p-logo a,
+	#p-logo a:hover {
+		display: block;
+		height: 155px;
+		width: 12.2em;
+		background-repeat: no-repeat;
+		background-position: 35% 50% !important;
+		text-decoration: none;
+	}
+/* } */
+/*
+** the navigation portlet
+*/
+
+/* @media screen, projection { */
+	#p-navigation {
+		position: relative;
+		z-index: 3;
+	}
+	#p-navigation a {
+		display: block;
+	}
+	#p-navigation li.active a, #p-navigation li.active a:hover {
+		display: inline;
+	}
+/* } */
+
+#p-navigation .pBody {
+	padding-right: 0;
+}
+
+#p-navigation li.active a, #p-navigation li.active a:hover {
+	text-decoration: none;
+	font-weight: bold;
+}
+
+
+/*
+** Search portlet
+*/
+/* @media screen, projection { */
+	#p-search {
+		position: relative;
+		z-index: 3;
+	}
+/* } */
+input.searchButton {
+	margin-top: 1px;
+	font-size: 95%;
+}
+#searchGoButton {
+	padding-left: .5em;
+	padding-right: .5em;
+	font-weight: bold;
+}
+#searchInput {
+	width: 10.9em;
+	margin: 0;
+	font-size: 95%;
+}
+#p-search .pBody {
+	padding: .5em .4em .4em .4em;
+	text-align: center;
+}
+
+/*
+** the personal toolbar
+*/
+/* @media screen, projection { */
+	#p-personal {
+		position: absolute;
+		left: 0;
+		top: 0;
+		z-index: 0;
+	}
+	#p-personal {
+		width: 100%;
+		white-space: nowrap;
+		padding: 0;
+		margin: 0;
+		border: none;
+		background: none;
+		overflow: visible;
+		line-height: 1.2em;
+	}
+	#p-personal h5 {
+		display: none;
+	}
+	#p-personal .portlet,
+	#p-personal .pBody {
+		z-index: 0;
+		padding: 0;
+		margin: 0;
+		border: none;
+		overflow: visible;
+		background: none;
+	}
+/* this is the ul contained in the portlet */
+	#p-personal ul {
+		border: none;
+		line-height: 1.4em;
+		color: #2f6fab;
+		padding: 0 2em 0 3em;
+		margin: 0;
+		text-align: right;
+		list-style: none;
+		z-index: 0;
+		background: none;
+		cursor: default;
+	}
+	#p-personal li {
+		z-index: 0;
+		border: none;
+		padding: 0;
+		display: inline;
+		color: #2f6fab;
+		margin-left: 1em;
+		line-height: 1.2em;
+		background: none;
+	}
+	#p-personal li a {
+		text-decoration: none;
+		color: #005896;
+		padding-bottom: .2em;
+		background: none;
+	}
+	#p-personal li a:hover {
+		background-color: white;
+		padding-bottom: .2em;
+		text-decoration: none;
+	}
+	#p-personal li.active a:hover {
+		background-color: transparent;
+	}
+	/* the icon in front of the user name, single quotes
+	in bg url to hide it from iemac */
+	li#pt-userpage,
+	li#pt-anonuserpage,
+	li#pt-login {
+		background: url(user.gif) top left no-repeat;
+		padding-left: 20px;
+		text-transform: none;
+	}
+/* } */
+#p-personal ul {
+	text-transform: lowercase;
+}
+#p-personal li.active {
+	font-weight: bold;
+}
+/*
+** the page-related actions- page/talk, edit etc
+*/
+/* @media screen, projection { */
+	#p-cactions {
+		position: absolute;
+		top: 1.3em;
+		left: 11.5em;
+		margin: 0;
+		white-space: nowrap;
+		width: 76%;
+		line-height: 1.1em;
+		overflow: visible;
+		background: none;
+		border-collapse: collapse;
+		padding-left: 1em;
+		list-style: none;
+		font-size: 95%;
+	}
+	#p-cactions ul {
+		list-style: none;
+	}
+	#p-cactions li {
+		display: inline;
+		border: 1px solid #aaa;
+		border-bottom: none;
+		padding: 0 0 .1em 0;
+		margin: 0 .3em 0 0;
+		overflow: visible;
+		background: white;
+	}
+	#p-cactions li.selected {
+		border-color: #fabd23;
+		padding: 0 0 .2em 0;
+		font-weight: bold;
+	}
+	#p-cactions li a {
+		background-color: #fbfbfb;
+		color: #002bb8;
+		border: none;
+		padding: 0 .8em .3em;
+		position: relative;
+		z-index: 0;
+		margin: 0;
+		text-decoration: none;
+	}
+	#p-cactions li.selected a {
+		z-index: 3;
+		padding: 0 1em .2em!important;
+		background-color: white;
+	}
+	#p-cactions .new a {
+		color: #ba0000;
+	}
+	#p-cactions li a:hover {
+		z-index: 3;
+		text-decoration: none;
+		background-color: white;
+	}
+	#p-cactions h5 {
+		display: none;
+	}
+	#p-cactions li.istalk {
+		margin-right: 0;
+	}
+	#p-cactions li.istalk a {
+		padding-right: .5em;
+	}
+	#p-cactions #ca-addsection a {
+		padding-left: .4em;
+		padding-right: .4em;
+	}
+	/* offsets to distinguish the tab groups */
+	li#ca-talk {
+		margin-right: 1.6em;
+	}
+	li#ca-watch, li#ca-unwatch, li#ca-varlang-0, li#ca-print {
+		margin-left: 1.6em;
+	}
+	#p-cactions .pBody {
+		font-size: 1em;
+		background-color: transparent;
+		color: inherit;
+		border-collapse: inherit;
+		border: 0;
+		padding: 0;
+	}
+/* } */
+#p-cactions .hiddenStructure {
+	display: none;
+}
+#p-cactions li a {
+	text-transform: lowercase;
+}
+
+/*
+** the remaining portlets
+*/
+/* @media screen, projection { */
+	#p-tbx,
+	#p-lang {
+		position: relative;
+		z-index: 3;
+	}
+/* } */
+
+/* TODO: #t-iscite is only used by the Cite extension, come up with some
+ * system which allows extensions to add to this file on the fly
+ */
+#t-ispermalink, #t-iscite {
+	color: #999;
+}
+/*
+** footer
+*/
+#footer {
+	background-color: white;
+	border-top: 1px solid #fabd23;
+	border-bottom: 1px solid #fabd23;
+	margin: .6em 0 1em 0;
+	padding: .4em 0 1.2em 0;
+	text-align: center;
+	font-size: 90%;
+}
+#footer li {
+	display: inline;
+	margin: 0 1.3em;
+}
+#f-poweredbyico, #f-copyrightico {
+	margin: 0 8px;
+	position: relative;
+	top: -2px; /* Bump it up just a tad */
+}
+#f-poweredbyico {
+	float: right;
+	height: 1%;
+}
+#f-copyrightico {
+	float: left;
+	height: 1%;
+}
+
+/* js pref toc */
+#preftoc {
+	margin: 0;
+	padding: 0;
+	width: 100%;
+	clear: both;
+}
+#preftoc li {
+	background-color: #f0f0f0;
+	color: #000;
+}
+/* @media screen, projection { */
+	#preftoc li {
+		margin: 1px -2px 1px 2px;
+		float: left;
+		padding: 2px 0 3px 0;
+		border: 1px solid #fff;
+		border-right-color: #716f64;
+		border-bottom: 0;
+		position: relative;
+		white-space: nowrap;
+		list-style-type: none;
+		list-style-image: none;
+		z-index: 3;
+	}
+/* } */
+#preftoc li.selected {
+	font-weight: bold;
+	background-color: #f9f9f9;
+	border: 1px solid #aaa;
+	border-bottom: none;
+	cursor: default;
+	top: 1px;
+	padding-top: 2px;
+	margin-right: -3px;
+}
+#preftoc > li.selected {
+	top: 2px;
+}
+#preftoc a,
+#preftoc a:active {
+	display: block;
+	color: #000;
+	padding: 0 .7em;
+	position: relative;
+	text-decoration: none;
+}
+#preftoc li.selected a {
+	cursor: default;
+	text-decoration: none;
+}
+#prefcontrol {
+	padding-top: 2em;
+	clear: both;
+}
+#preferences {
+	margin: 0;
+	border: 1px solid #aaa;
+	clear: both;
+	padding: 1.5em;
+	background-color: #F9F9F9;
+}
+.prefsection {
+	border: none;
+	padding: 0;
+	margin: 0;
+}
+.prefsection fieldset {
+	border: 1px solid #aaa;
+	float: left;
+	margin-right: 2em;
+}
+.prefsection legend {
+	font-weight: bold;   
+}
+.prefsection table, .prefsection legend {
+	background-color: #F9F9F9;
+}
+/* @media screen, projection { */
+	.mainLegend {
+		display: none;
+	}
+/* } */
+div.prefsectiontip {
+	font-size: 95%;
+	margin-top: 0;
+	background-color: #FFC1C1;
+	padding: .2em .7em;
+	clear: both;
+}
+.btnSavePrefs {
+	font-weight: bold;
+	padding-left: .3em;
+	padding-right: .3em;
+}
+
+.preferences-login {
+	clear: both;
+	margin-bottom: 1.5em;
+}
+
+.prefcache {
+	font-size: 90%;
+	margin-top: 2em;
+}
+
+div#userloginForm form,
+div#userlogin form#userlogin2 {
+	margin: 0 3em 1em 0;
+	border: 1px solid #aaa;
+	clear: both;
+	padding: 1.5em 2em;
+	background-color: #f9f9f9;
+	float: left;
+}
+
+div#userloginForm table,
+div#userlogin form#userlogin2 table {
+	background-color: #f9f9f9;
+}
+
+div#userloginForm h2,
+div#userlogin form#userlogin2 h2 {
+	padding-top: 0;
+}
+
+div#userlogin .captcha {
+	border: 1px solid #bbb;
+	padding: 1.5em 2em;
+	width: 400px;
+	background-color: white;
+}
+
+
+#userloginprompt, #languagelinks {
+	font-size: 85%;
+}
+
+#login-sectiontip {
+	font-size: 85%;
+	line-height: 1.2;
+	padding-top: 2em;
+}
+
+#userlogin .loginText, #userlogin .loginPassword {
+	width: 12em;
+}
+
+#userloginlink a, #wpLoginattempt, #wpCreateaccount {
+	font-weight: bold;
+}
+
+/* @media screen, projection { */
+	/*
+	** IE/Mac fixes, hope to find a validating way to move this
+	** to a separate stylesheet. This would work but doesn't validate:
+	** @import("IEMacFixes.css");
+	*/
+	/* tabs: border on the a, not the div */
+	* > html #p-cactions li { border: none; }
+	* > html #p-cactions li a {
+		border: 1px solid #aaa;
+		border-bottom: none;
+	}
+	* > html #p-cactions li.selected a { border-color: #fabd23; }
+	/* footer icons need a fixed width */
+	* > html #f-poweredbyico,
+	* > html #f-copyrightico { width: 88px; }
+	* > html #bodyContent,
+	* > html #bodyContent pre {
+		overflow-x: auto;
+		width: 100%;
+		padding-bottom: 25px;
+	}
+/* } */
+
+/* more IE fixes */
+/* float/negative margin brokenness */
+* html #footer {margin-top: 0;}
+* html #column-content {
+	display: inline;
+	margin-bottom: 0;
+}
+* html div.editsection { font-size: smaller; }
+#pagehistory li.selected { position: relative; }
+
+/* Mac IE 5.0 fix; floated content turns invisible */
+* > html #column-content {
+	float: none;
+}
+* > html #column-one {
+	position: absolute;
+	left: 0;
+	top: 0;
+}
+* > html #footer {
+	margin-left: 13.2em;
+}
+.redirectText {
+	font-size: 150%;
+	margin: 5px;
+}
+
+.printfooter {
+	display: none;
+}
+
+.not-patrolled {
+	background-color: #ffa;
+}
+div.patrollink {
+	font-size: 75%;
+	text-align: right;
+}
+span.newpage, span.minor, span.searchmatch, span.bot {
+	font-weight: bold;
+}
+span.unpatrolled {
+	font-weight: bold;
+	color: red;
+}
+
+span.searchmatch {
+	color: red;
+}
+.sharedUploadNotice {
+	font-style: italic;
+}
+
+span.updatedmarker {
+	color: black;
+	background-color: #0f0;
+}
+
+table.gallery {
+	border: 1px solid #ccc;
+	margin: 2px;
+	padding: 2px;
+	background-color: white;
+}
+
+table.gallery tr {
+	vertical-align: top;
+}
+
+table.gallery td {
+	vertical-align: top;
+	background-color: #f9f9f9;
+	border: solid 2px white;
+}
+/* Keep this temporarily so that cached pages will display right */
+table.gallery td.galleryheader {
+    text-align: center;
+	font-weight: bold;
+}
+table.gallery caption {
+	font-weight: bold;
+}
+
+div.gallerybox {
+	margin: 2px;
+}
+
+div.gallerybox div.thumb {
+	text-align: center;
+	border: 1px solid #ccc;
+	margin: 2px;
+}
+
+div.gallerytext {
+	font-size: 94%;
+	padding: 2px 4px;
+}
+
+span.comment {
+	font-style: italic;
+}
+
+span.changedby {
+	font-size: 95%;
+}
+
+.previewnote {
+	text-indent: 3em;
+	color: #c00;
+	border-bottom: 1px solid #aaa;
+	padding-bottom: 1em;
+	margin-bottom: 1em;
+}
+
+.previewnote p {
+	margin: 0;
+	padding: 0;
+}
+
+.editExternally {
+	border: 1px solid gray;
+	background-color: #ffffff;
+	padding: 3px;
+	margin-top: 0.5em;
+	float: left;
+	font-size: small;
+	text-align: center;
+}
+.editExternallyHelp {
+	font-style: italic;
+	color: gray;
+}
+
+li span.deleted, span.history-deleted {
+	text-decoration: line-through;
+	color: #888;
+	font-style: italic;
+}
+
+.toggle {
+	margin-left: 2em;
+	text-indent: -2em;
+}
+
+/* Classes for EXIF data display */
+table.mw_metadata {
+	font-size: 0.8em;
+	margin-left: 0.5em;
+	margin-bottom: 0.5em;
+	width: 300px;
+}
+
+table.mw_metadata caption {
+	font-weight: bold;
+}
+
+table.mw_metadata th {
+	font-weight: normal;
+}
+
+table.mw_metadata td {
+	padding: 0.1em;
+}
+
+table.mw_metadata {
+	border: none;
+	border-collapse: collapse;
+}
+
+table.mw_metadata td, table.mw_metadata th {
+	text-align: center;
+	border: 1px solid #aaaaaa;
+	padding-left: 0.1em;
+	padding-right: 0.1em;
+}
+
+table.mw_metadata th {
+	background-color: #f9f9f9;
+}
+
+table.mw_metadata td {
+	background-color: #fcfcfc;
+}
+
+table.collapsed tr.collapsable {
+	display: none;
+}
+
+
+/* filetoc */
+ul#filetoc {
+	text-align: center;
+	border: 1px solid #aaaaaa;
+	background-color: #f9f9f9;
+	padding: 5px;
+	font-size: 95%;
+	margin-bottom: 0.5em;
+	margin-left: 0;
+	margin-right: 0;
+}
+
+#filetoc li {
+	display: inline;
+	list-style-type: none;
+	padding-right: 2em;
+}
+
+input#wpSummary {
+	width: 80%;
+}
+
+/* @bug 1714 */
+input#wpSave, input#wpDiff {
+	margin-right: 0.33em;
+}
+
+#editform .editOptions {
+	display: inline;
+}
+
+#wpSave {
+	font-weight: bold;
+}
+
+/* Classes for article validation */
+
+table.revisionform_default {
+	border: 1px solid #000000;
+}
+
+table.revisionform_focus {
+	border: 1px solid #000000;
+	background-color:#00BBFF;
+}
+
+tr.revision_tr_default {
+	background-color:#EEEEEE;
+}
+
+tr.revision_tr_first {
+	background-color:#DDDDDD;
+}
+
+p.revision_saved {
+	color: green;
+	font-weight:bold;
+}
+
+#mw_trackbacks {
+	border: solid 1px #bbbbff;
+	background-color: #eeeeff;
+	padding: 0.2em;
+}
+
+
+/* Allmessages table */
+
+#allmessagestable th {
+	background-color: #b2b2ff;
+}
+
+#allmessagestable tr.orig {
+	background-color: #ffe2e2;
+}
+
+#allmessagestable tr.new {
+	background-color: #e2ffe2;
+}
+
+#allmessagestable tr.def {
+	background-color: #f0f0ff;
+}
+
+
+/* noarticletext */
+div.noarticletext {
+	border: 1px solid #ccc;
+	background: #fff;
+	padding: .2em 1em;
+	color: #000;
+}
+
+div#searchTargetContainer {
+	left:       10px;
+	top:        10px;
+	width:      90%;
+	background: white;
+}
+
+div#searchTarget {
+	padding:    3px;
+	margin:     5px;
+	background: #F0F0F0;
+	border:     solid 1px blue;
+}
+
+div#searchTarget ul li {
+	list-style: none;
+}
+
+div#searchTarget ul li:before {
+	color: orange;
+	content: "\00BB \0020";
+}
+
+div.multipageimagenavbox {
+   border: solid 1px silver;
+   padding: 4px;
+   margin: 1em;
+   -moz-border-radius: 6px;
+   background: #f0f0f0;
+}
+
+div.multipageimagenavbox div.thumb {
+   border: none;
+   margin-left: 2em;
+   margin-right: 2em;
+}
+
+div.multipageimagenavbox hr {
+   margin: 6px;
+}
+
+table.multipageimage td {
+   text-align: center;
+}
+
+/** Special:Version */
+
+table#sv-ext, table#sv-hooks {
+	margin: 1em;
+	padding:0em;
+}
+
+#sv-ext td, #sv-hooks td,
+#sv-ext th, #sv-hooks th {
+	border: 1px solid #A0A0A0;
+	padding: 0 0.15em 0 0.15em;
+}
+#sv-ext th, #sv-hooks th {
+	background-color: #F0F0F0;
+	color: black;
+	padding: 0 0.15em 0 0.15em;
+}
+tr.sv-space{
+	height: 0.8em;
+	border:none;
+}
+tr.sv-space td { display: none; }
+
+/*
+  Table pager (e.g. Special:Imagelist)
+  - remove underlines from the navigation link
+  - collapse borders
+  - set the borders to outsets (similar to Special:Allmessages)
+  - remove line wrapping for all td and th, set background color
+  - restore line wrapping for the last two table cells (description and size)
+*/
+.TablePager_nav a { text-decoration: none; }
+.TablePager { border-collapse: collapse; }
+.TablePager, .TablePager td, .TablePager th { 
+	border: 1px solid #aaaaaa;
+	padding: 0 0.15em 0 0.15em;
+}
+.TablePager th { background-color: #eeeeff }
+.TablePager td { background-color: #ffffff }
+.TablePager tr:hover td { background-color: #eeeeff }
+
+.imagelist td, .imagelist th { white-space: nowrap }
+.imagelist .TablePager_col_links { background-color: #eeeeff }
+.imagelist .TablePager_col_img_description { white-space: normal }
+.imagelist th.TablePager_sort { background-color: #ccccff }
+
+.templatesUsed { margin-top: 1.5em; }
+
+.mw-summary-preview {
+	margin: 0.1em 0;
+}
+
+/* Convenience links on Special:Ipblocklist */
+p.mw-ipb-conveniencelinks {
+	font-size: 90%;
+	float: right;
+}
+
+/**
+ * Here is some stuff that's ACTUALLY COMMON TO ALL SKINS.
+ * When the day comes, it can be moved to a *real* common.css.
+ */
+.mw-plusminus-null { color: #aaa; }
+.texvc { direction: ltr; unicode-bidi: embed; }
+/* Stop floats from intruding into edit area in previews */
+#toolbar, #wpTextbox1 { clear: both; }
+
+.MediaTransformError {
+	background-color: #ccc;
+	padding: 0.1em;
+}
+.MediaTransformError td {
+	text-align: center;
+	vertical-align: middle;
+	font-size: 90%;
+}
Index: /MediaWiki/branches/1.11/skins/monobook/rtl.css
===================================================================
--- /MediaWiki/branches/1.11/skins/monobook/rtl.css	(revision 1280)
+++ /MediaWiki/branches/1.11/skins/monobook/rtl.css	(revision 1280)
@@ -0,0 +1,221 @@
+/*
+Right-to-left fixes for MonoBook.
+Places sidebar on right, tweaks various alignment issues.
+
+Works mostly ok nicely on Safari 1.2.1; fine in Mozilla.
+
+Safari bugs (1.2.1):
+* Tabs are still appearing in left-to-right order. (Try after localizing)
+
+Opera bugs (7.23 linux):
+* Some bits of ltr text (sidebar box titles) have forward and backward versions overlapping each other
+
+IE/mac bugs:
+* The thing barfs on Hebrew and Arabic anyway, so no point testing.
+
+Missing features due to lack of support:
+* external link icons
+
+To test:
+* Opera6
+* IE 5.0
+* etc
+
+*/
+body {
+	direction: rtl;
+/*    unicode-bidi: bidi-override;*/
+	unicode-bidi: embed;
+}
+#column-content {
+	margin: 0 -12.2em 0 0;
+	float: left;
+}
+#column-content #content{
+	margin-left: 0;
+	margin-right: 12.2em;
+	border-right: 1px solid #aaaaaa;
+	border-left: none;
+}
+html>body .portlet {
+	float: right;
+	clear: right;
+}
+.editsection {
+	float: left;
+	margin-right: 5px;
+	margin-left: 0; /* bug 9122: undo default LTR */
+}
+/* recover IEMac (might be fine with the float, but usually it's close to IE */
+*>body .portlet {
+	float: none;
+	clear: none;
+}
+.pBody {
+	padding-right: 0.8em;
+	padding-left: 0.5em;
+}
+
+/* Fix alignment */
+.documentByLine,
+.portletDetails,
+.portletMore,
+#p-personal {
+	text-align: left;
+}
+
+div div.thumbcaption {
+	text-align: right;
+}
+
+div.magnify,
+#div.townBox,
+#p-logo {
+	left: auto;
+	right: 0;
+}
+#p-personal {
+	left: auto;
+	right: 0;
+}
+
+#p-cactions {
+	left: auto;
+	right: 11.5em;
+	padding-left: 0;
+	padding-right: 1em;
+}
+#p-cactions li {
+	margin-left: 0.3em;
+	margin-right: 0;
+	float: right;
+}
+* html #p-cactions li a {
+	display: block;
+	padding-bottom: 0;
+}
+* html #p-cactions li a:hover {
+	padding-bottom: 0.2em;
+}
+/* offsets to distinguish the tab groups */
+li#ca-talk {
+	margin-right: auto;
+	margin-left: 1.6em;
+}
+li#ca-watch,li#ca-unwatch {
+	margin-right: 1.6em !important;
+}
+
+/* Fix margins for non-css2 browsers */
+/* top right bottom left */
+
+ul {
+	margin-left: 0;
+	margin-right: 1.5em;
+}
+ol {
+	margin-left: 0;
+	margin-right: 2.4em;
+}
+dd {
+	margin-left: 0;
+	margin-right: 1.6em;
+}
+#contentSub {
+	margin-right: 1em;
+	margin-left: 0;
+}
+.tocindent {
+	margin-left: 0;
+	margin-right: 2em;
+}
+div.tright, div.floatright, table.floatright {
+	clear: none;
+}
+div.tleft, div.floatleft, table.floatleft {
+	clear: left;
+}
+div.townBox {
+	margin-left: 0;
+	margin-right: 1em;
+}
+div.townBox dl dd {
+	margin-left: 0;
+	margin-right: 1.1em;
+}
+#p-personal li {
+	margin-left: 0;
+	margin-right: 1em;
+}
+
+li#ca-talk,
+li#ca-watch {
+	margin-right: auto;
+	margin-left: 1.6em;
+}
+
+#p-personal li {
+	float: left;
+}
+/* Fix link icons */
+.external {
+	padding: 0 !important;
+	background: none !important;
+}
+#footer {
+	clear: both;
+}
+* html #footer {
+	margin-left: 0;
+	margin-right: 13.6em;
+	border-left: 0;
+	border-right: 1px solid #fabd23;
+} 
+* html #column-content { 
+	float: none;
+	margin-left: 0;
+	margin-right: 0;
+}
+* html #column-content #content {
+	margin-left: 0;
+	margin-top: 3em;
+}
+* html #column-one { right: 0; }
+
+/* js pref toc */
+
+#preftoc {
+	margin-right: 1em;
+}
+
+.errorbox, .successbox, #preftoc li, .prefsection fieldset {
+	float: right;
+}
+
+.prefsection {
+	padding-right: 2em;
+}
+
+/* workaround for moz bug, displayed bullets on left side */
+
+#toc ul {
+	text-align: right;
+}
+
+#toc ul ul {
+	margin: 0 2em 0 0;
+}
+
+input#wpSave, input#wpDiff {
+	margin-right: 0;
+	margin-left: .33em;
+}
+
+#userlogin {
+	float: right;
+	margin: 0 0 1em 3em;
+}
+/* Unblock and Ipblocklist links of Special:Blockip */
+p.mw-ipb-conveniencelinks {
+	float: left;
+}
Index: /MediaWiki/branches/1.11/skins/myskin/main.css
===================================================================
--- /MediaWiki/branches/1.11/skins/myskin/main.css	(revision 1280)
+++ /MediaWiki/branches/1.11/skins/myskin/main.css	(revision 1280)
@@ -0,0 +1,1 @@
+/* this file must be empty */
Index: /MediaWiki/branches/1.11/skins/simple/main.css
===================================================================
--- /MediaWiki/branches/1.11/skins/simple/main.css	(revision 1280)
+++ /MediaWiki/branches/1.11/skins/simple/main.css	(revision 1280)
@@ -0,0 +1,454 @@
+/* For clarity, explicitly state some recommendations from <http://www.w3.org/
+   TR/CSS21/sample.html> to make sure the editsection links scale right */
+
+h1 { font-size: 2em; }
+h2 { font-size: 1.5em; }
+h3 { font-size: 1.17em; }
+h5 { font-size: .83em; }
+h6 { font-size: .75em; }
+h1, h2, h3, h4, h5, h6 { font-weight: bolder }
+
+/* Now the custom parts */
+
+/* Make edit sections (which are inside h# tags) normal-sized
+   and otherwise format */
+.editsection {
+	font-weight: normal;
+	float: right;
+	margin-left: 5px;
+}
+h1 .editsection { font-size: 50% }
+h2 .editsection { font-size: 66.7% }
+h3 .editsection { font-size: 85.5% }
+h5 .editsection { font-size: 120% }
+h6 .editsection { font-size: 133% }
+
+
+#toolbar {
+  display: none;
+}
+
+div.center {
+  text-align: center;
+}
+
+#contentSub {
+  padding-left: 2em;
+}
+
+a {
+  text-decoration: none;
+}
+
+a:hover {
+  text-decoration: underline;
+}
+
+#column-content {
+  width: 100%;
+  float: right;
+  margin: 0 0 0.6em -12.2em;
+  padding:0;
+}
+
+#content {
+    margin: 0em 0 0 12.2em;
+    padding: 0em 1em 1.5em 1em;
+    border-left: 1px solid #959595;
+    line-height: 1.5em;
+}
+
+#column-one {
+  position: absolute;
+  top: 0px; left: 0px;
+}
+
+#footer {
+	display: none;
+}
+
+body {
+    margin: 0;
+    padding: 0;
+}
+
+#globalWrapper {
+  width: 100%;
+  height: 100%;
+  margin: 0;
+  padding: 0;
+}
+.visualClear { clear: both; }
+
+img {
+    border: none;
+}
+p {
+    margin: 0.4em 0em 0.5em 0em;
+    line-height: 1.5em;
+}
+p img { margin: 0; }
+
+h1, h2, h3, h4, h5, h6 {
+    margin: 0;
+    padding-top: 0.5em;
+    padding-bottom: 0.17em;
+}
+fieldset {
+    margin: 1em 0em 1em 0em;
+    padding: 0em 1em 1em 1em;
+}
+.usermessage {
+    background-color: #ffce7b;
+    border: 1px solid #ffa500;
+    color: Black;
+    font-weight: bold;
+    margin: 2em 0em 1em 0em;
+    padding: 0.5em 1em;
+    vertical-align: middle;
+}
+.error {
+    color: red;
+    font-size: larger;
+}
+
+table.rimage {
+    float:right;
+    position:relative;
+    margin-left:1em;
+    margin-bottom:1em;
+    text-align:center;
+}
+
+div.townBox {
+    position:relative;
+    float:right;
+    margin-left:1em;
+    padding:0.3em;
+    width: 200px;
+    overflow: hidden;
+    clear: right;
+}
+div.townBox dl {
+    padding: 0;
+    margin: 0 0 0.3em 0;
+}
+div.townBox dl dt {
+    background: none;
+    margin: 0.4em 0 0 0;
+}
+div.townBox dl dd {
+    margin: 0.1em 0 0 1.1em;
+}
+.portlet {
+    border: none;
+    float: none;
+    padding: 0;
+    width: 11.8em;
+    overflow: hidden;
+}
+.portlet h4 {
+    font-weight: normal;
+    white-space: nowrap;
+}
+.portlet h5 {
+  padding: 0em 1em 0em 0.5em;
+  display: inline;
+  height: 1em;
+  font-weight: normal;
+  white-space: nowrap;
+}
+.portlet h6 {
+    padding: 0em 1em 0em 1em;
+    display: block;
+    height: 1.2em;
+    font-weight: normal;
+    white-space: nowrap;
+}
+.pBody {
+    border-collapse: collapse;
+    padding: 0 0.8em 0.3em 0.5em;
+}
+.portlet h1,
+.portlet h2,
+.portlet h3,
+.portlet h4 {
+  margin: 0;
+  padding: 0;
+  font-size: small;
+}
+
+#p-search .pBody {
+    text-align: center;
+}
+
+#searchInput {
+  width: 100%;
+  clear: both;
+  margin: 0 0 0 0;
+}
+
+input.searchButton {
+    margin-top:1px;
+    padding: 0 0.4em;
+    cursor: pointer;
+}
+
+#p-search .pBody {
+    padding: 0.5em 0.4em 0.4em 0.4em;
+}
+
+textarea {
+  width: 100%;
+}
+
+#p-personal li, #p-personal ul,
+#p-tb li, #p-tb ul,
+#p-navigation li, #p-navigation ul,
+#p-cactions li, #p-cactions ul,
+#p-newlinks li, #p-newlinks ul {
+  padding-left: 0em;
+  margin-left: 0.5em;
+}
+
+#p-cactions li, #p-cactions ul {
+  margin-left: 0.7em;
+}
+
+pre {
+  margin: 2em;
+  border: solid 1px black;
+}
+
+h1.firstHeading, h2 {
+  border-bottom: solid 1px black;
+}
+#bodyContent a[href ^="http://"],
+#bodyContent a[href ^="gopher://"] {
+    background: url("external.png") center right no-repeat;
+    padding-right: 13px;
+}
+#bodyContent a[href ^="https://"],
+.link-https {
+    background: url("lock_icon.gif") center right no-repeat;
+    padding-right: 16px;
+}
+#bodyContent a[href ^="mailto:"],
+.link-mailto {
+    background: url("mail_icon.gif") center right no-repeat;
+    padding-right: 18px;
+}
+#bodyContent a[href ^="news://"] {
+    background: url("news_icon.png") center right no-repeat;
+    padding-right: 18px;
+}
+#bodyContent a[href ^="ftp://"],
+.link-ftp {
+    background: url("file_icon.gif") center right no-repeat;
+    padding-right: 18px;
+}
+#bodyContent a[href ^="irc://"],
+.link-irc {
+    background: url("discussionitem_icon.gif")  center right no-repeat;
+    padding-right: 18px;
+}
+
+#bodyContent a.extiw,
+#bodyContent a.extiw:active {
+  color: #5E7CFF;
+  background: none;
+  padding: 0;
+}
+
+td.diff-addedline {
+    background-color: #B9FFB0;
+}
+
+td.diff-deletedline {
+    background-color: #f8ffaa;
+}
+
+.diffchange { background-color: #FFCDF3; text-decoration: none; }
+.autocomment { color:  grey; }
+#pagehistory span.user {
+    margin-left: 1.4em;
+    margin-right: 0.4em;
+}
+#pagehistory span.minor { font-weight: bold; }
+#pagehistory li.selected {
+    background-color:#f9f9f9;
+    border:1px dashed #aaaaaa;
+}
+span.urlexpansion {
+  display: none;
+}
+
+div.tocindent {
+  margin-left: 2em;
+}
+#toc {
+  text-align: left;
+  border-top: solid 1px black;
+  border-bottom: solid 1px black;
+}
+
+div.floatright, table.floatright {
+    clear: right;
+    float: right;
+    margin: 0;
+    position: relative;
+    border-width: 0.5em 0 0.8em 1.4em;
+}
+div.floatright p { font-style: italic; }
+div.floatleft, table.floatleft {
+    float: left;
+    clear: left;
+    margin: 0.3em 0.5em 0.5em 0;
+    position: relative;
+    border-width: 0.5em 1.4em 0.8em 0;
+}
+div.floatleft p { font-style: italic; }
+/* thumbnails */
+div.thumb {
+    margin-bottom: 0.5em;
+    width: auto;
+}
+div.thumb div {
+    padding: 3px !important;
+    text-align: center;
+    overflow: hidden;
+}
+
+div.thumb div div.thumbcaption {
+    border: none;
+    text-align: left;
+    line-height: 1.4;
+    padding: 0.3em 0 0.1em 0;
+}
+div.magnify {
+    float: right;
+    border: none !important;
+    background: none !important;
+}
+div.magnify a, div.magnify img {
+    display: block;
+    border: none !important;
+    background: none !important;
+}
+div.tright {
+    clear: right;
+    float: right;
+    border-width: 0.5em 0 0.8em 1.4em;
+}
+div.tleft {
+    float: left;
+    clear: left;
+    margin-right:0.5em;
+    border-width: 0.5em 1.4em 0.8em 0;
+}
+
+a.stub { color: #772233; }
+a.new,
+#p-personal a.new {
+	text-decoration: line-through;
+}
+li.new {
+	text-decoration: line-through;
+}
+p.catlinks {
+  text-align: center;
+  width: 80%;
+  margin-left: auto;
+  margin-right: auto;
+  padding: 3px;
+}
+
+#mytabs {
+  background-color: inherit;
+}
+#p-cactions {
+  background-color: inherit;
+}
+div.printfooter {
+  display: none;
+}
+
+
+#ca-addsection a:before {
+  content: "Add section";
+  font-size: 10pt;
+}
+
+#ca-addsection a {
+  font-size: 0px;
+}
+
+#n-portal,
+#n-currentevents,
+#n-help,
+#n-sitesupport {
+  display: none;
+}
+
+span.searchmatch {
+  font-weight: bold;
+}
+
+#preftoc {
+    float: left;
+    margin: 1em;
+    width: 13em;
+}
+#preftoc li {
+}
+#preftoc li.selected {
+    border: 1px dashed #aaa;
+}
+#preftoc a,
+#preftoc a:active {
+    display: block;
+}
+#prefcontrol {
+    clear: both;
+    float: left;
+    margin-top: 1em;
+}
+div.prefsectiontip {
+    font-size: 95%;
+    margin-top: 1em;
+}
+
+#mw_trackbacks {
+	border-style: groove;
+	padding: 0.2em;
+}
+
+#jump-to-nav {
+  display: none;
+}
+
+table.collapsed tr.collapsable {
+	display: none;
+}
+
+.editsection {
+	float: right;
+	margin-left: 5px;
+}
+
+.templatesUsed { margin-top: 1.5em; }
+
+/**
+ * Here is some stuff that's ACTUALLY COMMON TO ALL SKINS.
+ * When the day comes, it can be moved to a *real* common.css.
+ */
+.mw-plusminus-null { color: #aaa; }
+.texvc { direction: ltr; unicode-bidi: embed; }
+/* Stop floats from intruding into edit area in previews */
+#toolbar, #wpTextbox1 { clear: both; }
+
+/*
+#file img, .gallerybox .thumb img {
+	background: url(../common/images/Checker-16x16.png) repeat;
+}
+*/
Index: /MediaWiki/branches/1.11/t/00-test.t
===================================================================
--- /MediaWiki/branches/1.11/t/00-test.t	(revision 1280)
+++ /MediaWiki/branches/1.11/t/00-test.t	(revision 1280)
@@ -0,0 +1,8 @@
+#!/usr/bin/env php
+<?php
+require 'Test.php';
+
+plan(1);
+
+ok(0 == 0);
+?>
Index: /MediaWiki/branches/1.11/t/README
===================================================================
--- /MediaWiki/branches/1.11/t/README	(revision 1280)
+++ /MediaWiki/branches/1.11/t/README	(revision 1280)
@@ -0,0 +1,54 @@
+=head1 NAME
+
+F<t> - MediaWiki test tree
+
+=head1 DESCRIPTION
+
+This is the MediaWiki test tree (well, one of them), tests in this
+directory are self-contained programs that produce TAP output via the
+F<Test.php> module (/trunk/Test/Test.php) (see
+http://search.cpan.org/~petdance/TAP-1.00/TAP.pm#THE_TAP_FORMAT for
+information on the TAP format).
+
+=head1 Running the tests
+
+You'll need F<Test.php> to run the tests, it lives in the
+F<trunk/Test> directory and can be copied or linked to the F<phase3>
+directory.
+
+    ln -s ../Test/Test.php .
+
+Since the tests are self-contained PHP programs you can run them
+(Xml.t here) as:
+
+    php t/inc/Xml.t
+
+That'll give you the raw TAP output, but what you probably want is to
+use a TAP formatter such as L<prove(1)>:
+
+    prove t/inc/Xml.t # add -v for the verbose version
+
+or to run all the tests:
+
+   prove -r t
+
+=head1 TODO
+
+=over
+
+=item *
+
+Rewrite the rest of the F<tests/> stuff to use L<Test.php> and move it
+here
+
+=item *
+
+Make the parsertests use TAP?
+
+=item *
+
+Write unit tests for the entire codebase:)
+
+=back
+
+=cut
Index: /MediaWiki/branches/1.11/t/inc/IP.t
===================================================================
--- /MediaWiki/branches/1.11/t/inc/IP.t	(revision 1280)
+++ /MediaWiki/branches/1.11/t/inc/IP.t	(revision 1280)
@@ -0,0 +1,60 @@
+#!/usr/bin/env php
+<?php
+
+require 'Test.php';
+
+plan( 1120 );
+
+require_ok( 'includes/IP.php' );
+
+# some of this test data was taken from Data::Validate::IP
+
+#
+# isValid()
+#
+
+foreach ( range( 0, 255 ) as $i ) {
+	$a = sprintf( "%03d", $i );
+	$b = sprintf( "%02d", $i );
+	$c = sprintf( "%01d", $i );
+	foreach ( array_unique( array( $a, $b, $c ) ) as $f ) {
+		$ip = "$f.$f.$f.$f";
+		ok( IP::isValid( $ip ), "$ip is a valid IPv4 address" );
+	}
+}
+
+# A bit excessive perhaps? meh..
+foreach ( range( 256, 999 ) as $i ) {
+	$a = sprintf( "%03d", $i );
+	$b = sprintf( "%02d", $i );
+	$c = sprintf( "%01d", $i );
+	foreach ( array_unique( array( $a, $b, $c ) ) as $f ) {
+		$ip = "$f.$f.$f.$f";
+		ok( ! IP::isValid( $ip ), "$ip is not a valid IPv4 address" );
+	}
+}
+
+$invalid = array(
+	'www.xn--var-xla.net',
+	'216.17.184.G',
+	'216.17.184.1.',
+	'216.17.184',
+	'216.17.184.',
+	'256.17.184.1'
+);
+
+foreach ( $invalid as $i ) {
+	ok( ! IP::isValid( $i ), "$i is an invalid IPv4 address" );
+}
+
+#
+# isPublic()
+#
+
+$private = array( '10.0.0.1', '172.16.0.1', '192.168.0.1' );
+
+foreach ( $private as $p ) {
+	ok( ! IP::isPublic( $p ), "$p is not a public IP address" ); 
+}
+
+?>
Index: /MediaWiki/branches/1.11/t/inc/Licenses.t
===================================================================
--- /MediaWiki/branches/1.11/t/inc/Licenses.t	(revision 1280)
+++ /MediaWiki/branches/1.11/t/inc/Licenses.t	(revision 1280)
@@ -0,0 +1,29 @@
+#!/usr/bin/env php
+<?php
+require 'Test.php';
+
+plan(3);
+
+error_reporting( E_ALL );
+
+define( 'MEDIAWIKI', 1 ); // Hack
+
+require_ok( 'languages/Language.php' );
+require_ok( 'includes/GlobalFunctions.php' );
+require_ok( 'includes/Licenses.php' );
+
+$str = "
+* Free licenses:
+** GFLD|Debian disagrees
+";
+
+#$lc = new Licenses ( $str );
+
+#isa_ok( $lc, 'Licenses' );
+
+#echo $lc->html;
+
+
+
+
+?>
Index: /MediaWiki/branches/1.11/t/inc/Sanitizer.t
===================================================================
--- /MediaWiki/branches/1.11/t/inc/Sanitizer.t	(revision 1280)
+++ /MediaWiki/branches/1.11/t/inc/Sanitizer.t	(revision 1280)
@@ -0,0 +1,62 @@
+#!/usr/bin/env php
+<?php
+
+require 'Test.php';
+
+plan( 13 );
+
+define( 'MEDIAWIKI', 1 );
+require_ok( 'includes/Defines.php' );
+require_ok( 'includes/GlobalFunctions.php' );
+require_ok( 'includes/Sanitizer.php' );
+require_ok( 'includes/normal/UtfNormal.php' );
+require_ok( 'includes/ProfilerStub.php' ); # For removeHTMLtags
+
+
+#
+# decodeCharReferences
+#
+
+cmp_ok(
+	Sanitizer::decodeCharReferences( '&eacute;cole' ),
+	'==',
+	"\xc3\xa9cole",
+	'decode named entities'
+);
+
+cmp_ok(
+	Sanitizer::decodeCharReferences( "&#x108;io bonas dans l'&#233;cole!" ),
+	'==',
+	"\xc4\x88io bonas dans l'\xc3\xa9cole!",
+	'decode numeric entities'
+);
+
+cmp_ok(
+	Sanitizer::decodeCharReferences( "&#x108;io bonas dans l'&eacute;cole!" ),
+	'==',
+	"\xc4\x88io bonas dans l'\xc3\xa9cole!",
+	'decode mixed numeric/named entities'
+);
+
+cmp_ok(
+	Sanitizer::decodeCharReferences(
+		"&#x108;io bonas dans l'&eacute;cole! (mais pas &amp;#x108;io dans l'&#38;eacute;cole)"
+	),
+	'==',
+	"\xc4\x88io bonas dans l'\xc3\xa9cole! (mais pas &#x108;io dans l'&eacute;cole)",
+	'decode mixed complex entities'
+);
+
+cmp_ok( Sanitizer::decodeCharReferences( 'a & b' ), '==', 'a & b', 'Invalid ampersand' );
+
+cmp_ok( Sanitizer::decodeCharReferences( '&foo;' ), '==', '&foo;', 'Invalid named entity' );
+
+cmp_ok( Sanitizer::decodeCharReferences( "&#88888888888888;" ), '==', UTF8_REPLACEMENT, 'Invalid numbered entity' );
+
+$wgUseTidy = false;
+cmp_ok(
+	Sanitizer::removeHTMLtags( '<div>Hello world</div />' ),
+	'==',
+	'<div>Hello world</div>',
+	'Self-closing closing div'
+);
Index: /MediaWiki/branches/1.11/t/inc/Title.t
===================================================================
--- /MediaWiki/branches/1.11/t/inc/Title.t	(revision 1280)
+++ /MediaWiki/branches/1.11/t/inc/Title.t	(revision 1280)
@@ -0,0 +1,33 @@
+#!/usr/bin/env php
+<?php
+
+require 'Test.php';
+
+plan( 2 + 255 );
+
+require_ok( 'includes/Defines.php' );
+
+# require_ok() doesn't work for these, find out why
+define( 'MEDIAWIKI', 1 );
+require 'LocalSettings.php';
+require 'includes/DefaultSettings.php';
+
+require_ok( 'includes/Title.php' );
+
+#
+# legalChars()
+#
+
+$titlechars = Title::legalChars();
+
+foreach ( range( 1, 255 ) as $num ) {
+	$chr = chr( $num );
+	if ( strpos( "#[]{}<>|", $chr ) !== false || preg_match( "/[\\x00-\\x1f\\x7f]/", $chr ) ) {
+		unlike( $chr, "/[$titlechars]/", "chr($num) = $chr is not a valid titlechar" );
+	} else {
+		like(   $chr, "/[$titlechars]/", "chr($num) = $chr is a valid titlechar" );
+	}
+}
+
+
+?>
Index: /MediaWiki/branches/1.11/t/inc/Xml.t
===================================================================
--- /MediaWiki/branches/1.11/t/inc/Xml.t	(revision 1280)
+++ /MediaWiki/branches/1.11/t/inc/Xml.t	(revision 1280)
@@ -0,0 +1,56 @@
+#!/usr/bin/env php
+<?php
+
+require 'Test.php';
+
+plan( 8 );
+
+require_ok( 'includes/Sanitizer.php' );
+require_ok( 'includes/Xml.php' );
+
+#
+# element
+#
+
+cmp_ok(
+	Xml::element( 'element', null, null ),
+	'==',
+	'<element>',
+	'Opening element with no attributes'
+);
+
+cmp_ok(
+	Xml::element( 'element', null, '' ),
+	'==',
+	'<element />',
+	'Terminated empty element'
+);
+
+cmp_ok(
+	Xml::element( 'element', null, 'hello <there> you & you' ),
+	'==',
+	'<element>hello &lt;there&gt; you &amp; you</element>',
+	'Element with no attributes and content that needs escaping'
+);
+
+cmp_ok(
+	Xml::element( 'element', array( 'key' => 'value', '<>' => '<>' ), null ),
+	'==',
+	'<element key="value" <>="&lt;&gt;">',
+	'Element attributes, keys are not escaped'
+);
+
+#
+# open/close element
+#
+
+cmp_ok(
+	Xml::openElement( 'element', array( 'k' => 'v' ) ),
+	'==',
+	'<element k="v">',
+	'openElement() shortcut'
+);
+
+cmp_ok( Xml::closeElement( 'element' ), '==', '</element>', 'closeElement() shortcut' );
+
+?>
Index: /MediaWiki/branches/1.11/t/maint/eol-style.t
===================================================================
--- /MediaWiki/branches/1.11/t/maint/eol-style.t	(revision 1280)
+++ /MediaWiki/branches/1.11/t/maint/eol-style.t	(revision 1280)
@@ -0,0 +1,35 @@
+#!/usr/bin/env perl
+#
+# Based on php-tag.t
+#
+use strict;
+use warnings;
+
+use Test::More;
+use File::Find;
+use IPC::Open3;
+use File::Spec;
+use Symbol qw(gensym);
+
+my $ext = qr/(?: php | inc | txt | sql | t)/x;
+my @files;
+
+find( sub { push @files, $File::Find::name if -f && /\. $ext $/x }, '.' );
+
+plan tests => scalar @files ;
+
+for my $file (@files) {
+	open NULL, '+>', File::Spec->devnull and \*NULL or die;
+	my $pid = open3('<&NULL', \*P, '>&NULL', qw'svn propget svn:eol-style', $file);
+	my $res = do { local $/; <P> . "" };
+	chomp $res;
+	waitpid $pid, 0;
+
+	if ( $? != 0 ) {
+		ok 1 => "svn propget failed, $file probably not under version control";
+	} elsif ( $res eq 'native' ) {
+		ok 1 => "$file svn:eol-style is 'native'";
+	} else {
+		ok 0 => "$file svn:eol-style is '$res', should be 'native'";
+	}
+}
Index: /MediaWiki/branches/1.11/t/maint/php-lint.t
===================================================================
--- /MediaWiki/branches/1.11/t/maint/php-lint.t	(revision 1280)
+++ /MediaWiki/branches/1.11/t/maint/php-lint.t	(revision 1280)
@@ -0,0 +1,33 @@
+#!/usr/bin/env perl
+#
+# Based on php-tag.t and eol-style
+#
+use strict;
+use warnings;
+
+use Test::More;
+use File::Find;
+use IPC::Open3;
+use File::Spec;
+use Symbol qw(gensym);
+
+my $ext = qr/(?: php | inc )/x;
+my @files;
+
+find( sub { push @files, $File::Find::name if -f && /\. $ext $/x }, '.' );
+
+plan tests => scalar @files ;
+
+for my $file (@files) {
+	open NULL, '+>', File::Spec->devnull and \*NULL or die;
+	my $pid = open3('<&NULL', \*P, '>&NULL', qw'php -l', $file);
+	my $res = do { local $/; <P> . "" };
+	chomp $res;
+	waitpid $pid, 0;
+
+	if ( $? == 0 ) {
+		ok 1 => "Looks fine";
+	} else {
+		ok 0 => "$file does not pass php linter. Error was: $res";
+	}
+}
Index: /MediaWiki/branches/1.11/t/maint/php-tag.t
===================================================================
--- /MediaWiki/branches/1.11/t/maint/php-tag.t	(revision 1280)
+++ /MediaWiki/branches/1.11/t/maint/php-tag.t	(revision 1280)
@@ -0,0 +1,29 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+
+use Test::More;;
+
+use File::Find;
+use File::Slurp qw< slurp >;
+
+my $ext = qr/(?: php | inc )/x;
+
+my @files;
+find( sub { push @files, $File::Find::name if -f && /\. $ext $/x }, '.' );
+
+plan tests => scalar @files;
+
+for my $file (@files) {
+	my $cont = slurp $file;
+	if ( $cont =~ m<<\?php .* \?>>xs ) {
+		ok 1 => "$file has <?php ?>";
+	} elsif ( $cont =~ m<<\? .* \?>>xs ) {
+		ok 0 => "$file does not use <? ?>";
+	} else {
+		ok 1 => "$file has neither <?php ?> nor <? ?>, check it";
+	}
+}
+
+
+
Index: /MediaWiki/branches/1.11/t/maint/unix-newlines.t
===================================================================
--- /MediaWiki/branches/1.11/t/maint/unix-newlines.t	(revision 1280)
+++ /MediaWiki/branches/1.11/t/maint/unix-newlines.t	(revision 1280)
@@ -0,0 +1,28 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+
+use Test::More;;
+
+use File::Find;
+use File::Slurp qw< slurp >;
+use Socket qw< $CRLF $LF >;
+
+my $ext = qr/(?: t | pm | sql | js | php | inc | xml )/x;
+
+my @files;
+find( sub { push @files, $File::Find::name if -f && /\. $ext $/x }, '.' );
+
+plan tests => scalar @files;
+
+for my $file (@files) {
+	my $cont = slurp $file;
+	if ( $cont and $cont =~ $CRLF ) {
+		ok 0 => "$file contains windows newlines";
+	} else {
+		ok 1 => "$file is made of unix newlines and win";
+	}
+}
+
+
+
Index: /MediaWiki/branches/1.11/tests/.htaccess
===================================================================
--- /MediaWiki/branches/1.11/tests/.htaccess	(revision 1280)
+++ /MediaWiki/branches/1.11/tests/.htaccess	(revision 1280)
@@ -0,0 +1,1 @@
+Deny from all
Index: /MediaWiki/branches/1.11/tests/.svnignore
===================================================================
--- /MediaWiki/branches/1.11/tests/.svnignore	(revision 1280)
+++ /MediaWiki/branches/1.11/tests/.svnignore	(revision 1280)
@@ -0,0 +1,6 @@
+LocalTestSettings.php
+*~
+bin
+.classpath
+.project
+project.index
Index: /MediaWiki/branches/1.11/tests/ArticleTest.php
===================================================================
--- /MediaWiki/branches/1.11/tests/ArticleTest.php	(revision 1280)
+++ /MediaWiki/branches/1.11/tests/ArticleTest.php	(revision 1280)
@@ -0,0 +1,150 @@
+<?php
+
+require_once( 'PHPUnit.php' );
+require_once( '../includes/Defines.php' );
+require_once( '../includes/Article.php' );
+
+class ArticleTest extends PHPUnit_TestCase {
+	var $saveGlobals = array();
+
+	function ArticleTest( $name ) {
+		$this->PHPUnit_TestCase( $name );
+	}
+
+	function setUp() {
+		$globalSet = array(
+			'wgLegacyEncoding' => false,
+			'wgUseLatin1' => false,
+			'wgCompressRevisions' => false,
+			'wgInputEncoding' => 'utf-8',
+			'wgOutputEncoding' => 'utf-8' );
+		foreach( $globalSet as $var => $data ) {
+			$this->saveGlobals[$var] = $GLOBALS[$var];
+			$GLOBALS[$var] = $data;
+		}
+	}
+
+	function tearDown() {
+		foreach( $this->saveGlobals as $var => $data ) {
+			$GLOBALS[$var] = $data;
+		}
+	}
+
+	function testGetRevisionText() {
+		$row = new stdClass;
+		$row->old_flags = '';
+		$row->old_text = 'This is a bunch of revision text.';
+		$this->assertEquals(
+			'This is a bunch of revision text.',
+			Revision::getRevisionText( $row ) );
+	}
+
+	function testGetRevisionTextGzip() {
+		$row = new stdClass;
+		$row->old_flags = 'gzip';
+		$row->old_text = gzdeflate( 'This is a bunch of revision text.' );
+		$this->assertEquals(
+			'This is a bunch of revision text.',
+			Revision::getRevisionText( $row ) );
+	}
+
+	function testGetRevisionTextUtf8Native() {
+		$row = new stdClass;
+		$row->old_flags = 'utf-8';
+		$row->old_text = "Wiki est l'\xc3\xa9cole superieur !";
+		$GLOBALS['wgLegacyEncoding'] = 'iso-8859-1';
+		$this->assertEquals(
+			"Wiki est l'\xc3\xa9cole superieur !",
+			Revision::getRevisionText( $row ) );
+	}
+
+	function testGetRevisionTextUtf8Legacy() {
+		$row = new stdClass;
+		$row->old_flags = '';
+		$row->old_text = "Wiki est l'\xe9cole superieur !";
+		$GLOBALS['wgLegacyEncoding'] = 'iso-8859-1';
+		$this->assertEquals(
+			"Wiki est l'\xc3\xa9cole superieur !",
+			Revision::getRevisionText( $row ) );
+	}
+
+	function testGetRevisionTextUtf8NativeGzip() {
+		$row = new stdClass;
+		$row->old_flags = 'gzip,utf-8';
+		$row->old_text = gzdeflate( "Wiki est l'\xc3\xa9cole superieur !" );
+		$GLOBALS['wgLegacyEncoding'] = 'iso-8859-1';
+		$this->assertEquals(
+			"Wiki est l'\xc3\xa9cole superieur !",
+			Revision::getRevisionText( $row ) );
+	}
+
+	function testGetRevisionTextUtf8LegacyGzip() {
+		$row = new stdClass;
+		$row->old_flags = 'gzip';
+		$row->old_text = gzdeflate( "Wiki est l'\xe9cole superieur !" );
+		$GLOBALS['wgLegacyEncoding'] = 'iso-8859-1';
+		$this->assertEquals(
+			"Wiki est l'\xc3\xa9cole superieur !",
+			Revision::getRevisionText( $row ) );
+	}
+
+	function testCompressRevisionTextUtf8() {
+		$row->old_text = "Wiki est l'\xc3\xa9cole superieur !";
+		$row->old_flags = Revision::compressRevisionText( $row->old_text );
+		$this->assertTrue( false !== strpos( $row->old_flags, 'utf-8' ),
+			"Flags should contain 'utf-8'" );
+		$this->assertFalse( false !== strpos( $row->old_flags, 'gzip' ),
+			"Flags should not contain 'gzip'" );
+		$this->assertEquals( "Wiki est l'\xc3\xa9cole superieur !",
+			$row->old_text, "Direct check" );
+		$this->assertEquals( "Wiki est l'\xc3\xa9cole superieur !",
+			Revision::getRevisionText( $row ), "getRevisionText" );
+	}
+
+	function testCompressRevisionTextLatin1() {
+		$GLOBALS['wgUseLatin1'] = true;
+		$row->old_text = "Wiki est l'\xe9cole superieur !";
+		$row->old_flags = Revision::compressRevisionText( $row->old_text );
+		$this->assertFalse( false !== strpos( $row->old_flags, 'utf-8' ),
+			"Flags should not contain 'utf-8'" );
+		$this->assertFalse( false !== strpos( $row->old_flags, 'gzip' ),
+			"Flags should not contain 'gzip'" );
+		$this->assertEquals( "Wiki est l'\xe9cole superieur !",
+			$row->old_text, "Direct check" );
+		$this->assertEquals( "Wiki est l'\xe9cole superieur !",
+			Revision::getRevisionText( $row ), "getRevisionText" );
+	}
+
+	function testCompressRevisionTextUtf8Gzip() {
+		$GLOBALS['wgCompressRevisions'] = true;
+		$row->old_text = "Wiki est l'\xc3\xa9cole superieur !";
+		$row->old_flags = Revision::compressRevisionText( $row->old_text );
+		$this->assertTrue( false !== strpos( $row->old_flags, 'utf-8' ),
+			"Flags should contain 'utf-8'" );
+		$this->assertTrue( false !== strpos( $row->old_flags, 'gzip' ),
+			"Flags should contain 'gzip'" );
+		$this->assertEquals( "Wiki est l'\xc3\xa9cole superieur !",
+			gzinflate( $row->old_text ), "Direct check" );
+		$this->assertEquals( "Wiki est l'\xc3\xa9cole superieur !",
+			Revision::getRevisionText( $row ), "getRevisionText" );
+	}
+
+	function testCompressRevisionTextLatin1Gzip() {
+		$GLOBALS['wgCompressRevisions'] = true;
+		$GLOBALS['wgUseLatin1'] = true;
+		$row = new stdClass;
+		$row->old_text = "Wiki est l'\xe9cole superieur !";
+		$row->old_flags = Revision::compressRevisionText( $row->old_text );
+		$this->assertFalse( false !== strpos( $row->old_flags, 'utf-8' ),
+			"Flags should not contain 'utf-8'" );
+		$this->assertTrue( false !== strpos( $row->old_flags, 'gzip' ),
+			"Flags should contain 'gzip'" );
+		$this->assertEquals( "Wiki est l'\xe9cole superieur !",
+			gzinflate( $row->old_text ), "Direct check" );
+		$this->assertEquals( "Wiki est l'\xe9cole superieur !",
+			Revision::getRevisionText( $row ), "getRevisionText" );
+	}
+
+}
+
+?>
Index: /MediaWiki/branches/1.11/tests/DatabaseTest.php
===================================================================
--- /MediaWiki/branches/1.11/tests/DatabaseTest.php	(revision 1280)
+++ /MediaWiki/branches/1.11/tests/DatabaseTest.php	(revision 1280)
@@ -0,0 +1,93 @@
+<?php
+
+require_once( 'PHPUnit.php' );
+require_once( '../includes/Defines.php' );
+require_once( '../includes/Database.php' );
+require_once( '../includes/GlobalFunctions.php' );
+
+class DatabaseTest extends PHPUnit_TestCase {
+	var $db;
+
+	function DatabaseTest( $name ) {
+		$this->PHPUnit_TestCase( $name );
+	}
+
+	function setUp() {
+		$this->db = new Database();
+	}
+
+	function tearDown() {
+		unset( $this->db );
+	}
+
+	function testAddQuotesNull() {
+		$this->assertEquals(
+			'NULL',
+			$this->db->addQuotes( NULL ) );
+	}
+
+	function testAddQuotesInt() {
+		# returning just "1234" should be ok too, though...
+		# maybe
+		$this->assertEquals(
+			"'1234'",
+			$this->db->addQuotes( 1234 ) );
+	}
+
+	function testAddQuotesFloat() {
+		# returning just "1234.5678" would be ok too, though
+		$this->assertEquals(
+			"'1234.5678'",
+			$this->db->addQuotes( 1234.5678 ) );
+	}
+
+	function testAddQuotesString() {
+		$this->assertEquals(
+			"'string'",
+			$this->db->addQuotes( 'string' ) );
+	}
+
+	function testAddQuotesStringQuote() {
+		$this->assertEquals(
+			"'string\'s cause trouble'",
+			$this->db->addQuotes( "string's cause trouble" ) );
+	}
+
+	function testFillPreparedEmpty() {
+		$sql = $this->db->fillPrepared(
+			'SELECT * FROM interwiki', array() );
+		$this->assertEquals(
+			"SELECT * FROM interwiki",
+			$sql);
+	}
+
+	function testFillPreparedQuestion() {
+		$sql = $this->db->fillPrepared(
+			'SELECT * FROM cur WHERE cur_namespace=? AND cur_title=?',
+			array( 4, "Snicker's_paradox" ) );
+		$this->assertEquals(
+			"SELECT * FROM cur WHERE cur_namespace='4' AND cur_title='Snicker\'s_paradox'",
+			$sql);
+	}
+
+	function testFillPreparedBang() {
+		$sql = $this->db->fillPrepared(
+			'SELECT user_id FROM ! WHERE user_name=?',
+			array( '"user"', "Slash's Dot" ) );
+		$this->assertEquals(
+			"SELECT user_id FROM \"user\" WHERE user_name='Slash\'s Dot'",
+			$sql);
+	}
+
+	function testFillPreparedRaw() {
+		$sql = $this->db->fillPrepared(
+			"SELECT * FROM cur WHERE cur_title='This_\\&_that,_WTF\\?\\!'",
+			array( '"user"', "Slash's Dot" ) );
+		$this->assertEquals(
+			"SELECT * FROM cur WHERE cur_title='This_&_that,_WTF?!'",
+			$sql);
+	}
+
+}
+
+?>
Index: /MediaWiki/branches/1.11/tests/GlobalTest.php
===================================================================
--- /MediaWiki/branches/1.11/tests/GlobalTest.php	(revision 1280)
+++ /MediaWiki/branches/1.11/tests/GlobalTest.php	(revision 1280)
@@ -0,0 +1,211 @@
+<?php
+
+require_once( 'PHPUnit.php' );
+require_once( '../includes/Defines.php' );
+require_once( '../includes/Profiling.php' );
+require_once( '../includes/GlobalFunctions.php' );
+
+class GlobalTest extends PHPUnit_TestCase {
+	function GlobalTest( $name ) {
+		$this->PHPUnit_TestCase( $name );
+	}
+
+	function setUp() {
+		$this->save = array();
+		$saveVars = array( 'wgReadOnlyFile' );
+		foreach( $saveVars as $var ) {
+			if( isset( $GLOBALS[$var] ) ) {
+				$this->save[$var] = $GLOBALS[$var];
+			}
+		}
+		$GLOBALS['wgReadOnlyFile'] = wfTempDir() . '/testReadOnly-' . mt_rand();
+	}
+
+	function tearDown() {
+		foreach( $this->save as $var => $data ) {
+			$GLOBALS[$var] = $data;
+		}
+	}
+
+	function testRandom() {
+		# This could hypothetically fail, but it shouldn't ;)
+		$this->assertFalse(
+			wfRandom() == wfRandom() );
+	}
+
+	function testUrlencode() {
+		$this->assertEquals(
+			"%E7%89%B9%E5%88%A5:Contributions/Foobar",
+			wfUrlencode( "\xE7\x89\xB9\xE5\x88\xA5:Contributions/Foobar" ) );
+	}
+
+	function testReadOnlyEmpty() {
+		$this->assertFalse( wfReadOnly() );
+	}
+
+	function testReadOnlySet() {
+		$f = fopen( $GLOBALS['wgReadOnlyFile'], "wt" );
+		fwrite( $f, 'Message' );
+		fclose( $f );
+		$this->assertTrue( wfReadOnly() );
+
+		unlink( $GLOBALS['wgReadOnlyFile'] );
+		$this->assertFalse( wfReadOnly() );
+	}
+
+	function testQuotedPrintable() {
+		$this->assertEquals(
+			"=?UTF-8?Q?=C4=88u=20legebla=3F?=",
+			wfQuotedPrintable( "\xc4\x88u legebla?", "UTF-8" ) );
+	}
+
+	function testTime() {
+		$start = wfTime();
+		$this->assertType( 'double', $start );
+		$end = wfTime();
+		$this->assertTrue( $end > $start, "Time is running backwards!" );
+	}
+
+	function testArrayToCGI() {
+		$this->assertEquals(
+			"baz=AT%26T&foo=bar",
+			wfArrayToCGI(
+				array( 'baz' => 'AT&T', 'ignore' => '' ),
+				array( 'foo' => 'bar', 'baz' => 'overridden value' ) ) );
+	}
+
+	function testMimeTypeMatch() {
+		$this->assertEquals(
+			'text/html',
+			mimeTypeMatch( 'text/html',
+				array( 'application/xhtml+xml' => 1.0,
+				       'text/html'             => 0.7,
+				       'text/plain'            => 0.3 ) ) );
+		$this->assertEquals(
+			'text/*',
+			mimeTypeMatch( 'text/html',
+				array( 'image/*' => 1.0,
+				       'text/*'  => 0.5 ) ) );
+		$this->assertEquals(
+			'*/*',
+			mimeTypeMatch( 'text/html',
+				array( '*/*' => 1.0 ) ) );
+		$this->assertNull(
+			mimeTypeMatch( 'text/html',
+				array( 'image/png'     => 1.0,
+				       'image/svg+xml' => 0.5 ) ) );
+	}
+
+	function testNegotiateType() {
+		$this->assertEquals(
+			'text/html',
+			wfNegotiateType(
+				array( 'application/xhtml+xml' => 1.0,
+				       'text/html'             => 0.7,
+				       'text/plain'            => 0.5,
+				       'text/*'                => 0.2 ),
+				array( 'text/html'             => 1.0 ) ) );
+		$this->assertEquals(
+			'application/xhtml+xml',
+			wfNegotiateType(
+				array( 'application/xhtml+xml' => 1.0,
+				       'text/html'             => 0.7,
+				       'text/plain'            => 0.5,
+				       'text/*'                => 0.2 ),
+				array( 'application/xhtml+xml' => 1.0,
+				       'text/html'             => 0.5 ) ) );
+		$this->assertEquals(
+			'text/html',
+			wfNegotiateType(
+				array( 'text/html'             => 1.0,
+				       'text/plain'            => 0.5,
+				       'text/*'                => 0.5,
+				       'application/xhtml+xml' => 0.2 ),
+				array( 'application/xhtml+xml' => 1.0,
+				       'text/html'             => 0.5 ) ) );
+		$this->assertEquals(
+			'text/html',
+			wfNegotiateType(
+				array( 'text/*'                => 1.0,
+				       'image/*'               => 0.7,
+				       '*/*'                   => 0.3 ),
+				array( 'application/xhtml+xml' => 1.0,
+				       'text/html'             => 0.5 ) ) );
+		$this->assertNull(
+			wfNegotiateType(
+				array( 'text/*'                => 1.0 ),
+				array( 'application/xhtml+xml' => 1.0 ) ) );
+	}
+
+	function testTimestamp() {
+		$t = gmmktime( 12, 34, 56, 1, 15, 2001 );
+		$this->assertEquals(
+			'20010115123456',
+			wfTimestamp( TS_MW, $t ),
+			'TS_UNIX to TS_MW' );
+		$this->assertEquals(
+			979562096,
+			wfTimestamp( TS_UNIX, $t ),
+			'TS_UNIX to TS_UNIX' );
+		$this->assertEquals(
+			'2001-01-15 12:34:56',
+			wfTimestamp( TS_DB, $t ),
+			'TS_UNIX to TS_DB' );
+
+		$this->assertEquals(
+			'20010115123456',
+			wfTimestamp( TS_MW, '20010115123456' ),
+			'TS_MW to TS_MW' );
+		$this->assertEquals(
+			979562096,
+			wfTimestamp( TS_UNIX, '20010115123456' ),
+			'TS_MW to TS_UNIX' );
+		$this->assertEquals(
+			'2001-01-15 12:34:56',
+			wfTimestamp( TS_DB, '20010115123456' ),
+			'TS_MW to TS_DB' );
+
+		$this->assertEquals(
+			'20010115123456',
+			wfTimestamp( TS_MW, '2001-01-15 12:34:56' ),
+			'TS_DB to TS_MW' );
+		$this->assertEquals(
+			979562096,
+			wfTimestamp( TS_UNIX, '2001-01-15 12:34:56' ),
+			'TS_DB to TS_UNIX' );
+		$this->assertEquals(
+			'2001-01-15 12:34:56',
+			wfTimestamp( TS_DB, '2001-01-15 12:34:56' ),
+			'TS_DB to TS_DB' );
+	}
+	
+	function testBasename() {
+		$sets = array(
+			'' => '',
+			'/' => '',
+			'\\' => '',
+			'//' => '',
+			'\\\\' => '',
+			'a' => 'a',
+			'aaaa' => 'aaaa',
+			'/a' => 'a',
+			'\\a' => 'a',
+			'/aaaa' => 'aaaa',
+			'\\aaaa' => 'aaaa',
+			'/aaaa/' => 'aaaa',
+			'\\aaaa\\' => 'aaaa',
+			'\\aaaa\\' => 'aaaa',
+			'/mnt/upload3/wikipedia/en/thumb/8/8b/Zork_Grand_Inquisitor_box_cover.jpg/93px-Zork_Grand_Inquisitor_box_cover.jpg' => '93px-Zork_Grand_Inquisitor_box_cover.jpg',
+			'C:\\Progra~1\\Wikime~1\\Wikipe~1\\VIEWER.EXE' => 'VIEWER.EXE',
+			'Östergötland_coat_of_arms.png' => 'Östergötland_coat_of_arms.png',
+			);
+		foreach( $sets as $from => $to ) {
+			$this->assertEquals( $to, wfBaseName( $from ),
+				"wfBaseName('$from') => '$to'");
+		}
+	}
+
+	/* TODO: many more! */
+}
+
+?>
Index: /MediaWiki/branches/1.11/tests/ImageTest.php
===================================================================
--- /MediaWiki/branches/1.11/tests/ImageTest.php	(revision 1280)
+++ /MediaWiki/branches/1.11/tests/ImageTest.php	(revision 1280)
@@ -0,0 +1,66 @@
+<?php
+
+require_once( 'PHPUnit.php' );
+require_once( '../includes/Defines.php' );
+require_once( '../includes/Profiling.php' );
+require_once( '../includes/GlobalFunctions.php' );
+require_once( '../includes/Image.php' );
+
+class ImageTest extends PHPUnit_TestCase {
+	function ImageTest( $name ) {
+		$this->PHPUnit_TestCase( $name );
+	}
+
+	function setUp() {
+	}
+
+	function tearDown() {
+	}
+	
+	function testFitBoxWidth() {
+		$vals = array(
+			array(
+				'width' => 50,
+				'height' => 50,
+				'tests' => array(
+					50 => 50,
+					17 => 17,
+					18 => 18 ) ),
+			array(
+				'width' => 366,
+				'height' => 300,
+				'tests' => array(
+					50 => 61,
+					17 => 21,
+					18 => 22 ) ),
+			array(
+				'width' => 300,
+				'height' => 366,
+				'tests' => array(
+					50 => 41,
+					17 => 14,
+					18 => 15 ) ),
+			array(
+				'width' => 100,
+				'height' => 400,
+				'tests' => array(
+					50 => 12,
+					17 => 4,
+					18 => 4 ) ) );
+		foreach( $vals as $row ) {
+			extract( $row );
+			foreach( $tests as $max => $expected ) {
+				$y = round( $expected * $height / $width );
+				$result = wfFitBoxWidth( $width, $height, $max );
+				$y2 = round( $result * $height / $width );
+				$this->assertEquals( $expected,
+					$result,
+					"($width, $height, $max) wanted: {$expected}x$y, got: {$result}x$y2" );
+			}
+		}
+	}
+
+	/* TODO: many more! */
+}
+
+?>
Index: /MediaWiki/branches/1.11/tests/LocalTestSettings.sample
===================================================================
--- /MediaWiki/branches/1.11/tests/LocalTestSettings.sample	(revision 1280)
+++ /MediaWiki/branches/1.11/tests/LocalTestSettings.sample	(revision 1280)
@@ -0,0 +1,29 @@
+<?php
+# This contains basic configuration values that are needed
+# for RunTests.php.
+
+# Full path to the mediawiki source code you want to test
+$IP = '/var/www/mediawiki-cvs';
+
+# Now we add that path to the default include_path
+ini_set('include_path',ini_get('include_path').':'.$IP);
+
+# Some options needed for database testing
+$testOptions = array(
+    'mysql3' => array(
+        'server' => null,
+        'user' => null,
+        'password' => null,
+        'database' => null ),
+    'mysql4' => array(
+        'server' => null,
+        'user' => null,
+        'password' => null,
+        'database' => null ),
+    'postgres' => array(
+        'server' => null,
+        'user' => null,
+        'password' => null,
+        'database' => null ),
+    );
+?>
Index: /MediaWiki/branches/1.11/tests/Makefile
===================================================================
--- /MediaWiki/branches/1.11/tests/Makefile	(revision 1280)
+++ /MediaWiki/branches/1.11/tests/Makefile	(revision 1280)
@@ -0,0 +1,15 @@
+.PHONY: help test
+all test:
+	php RunTests.php
+install:
+	cvs -z9 -d:pserver:cvsread:@cvs.php.net:/repository/ co -P pear/PHPUnit
+	mv pear/PHPUnit .
+	rm -rf pear
+clean:
+	rm -rf PHPUnit pear
+help:
+	# Options:
+	# 	test (default)		Run the unit tests
+	#	install			Install PHPUnit from CVS
+	#	clean			Remove local PHPUnit install
+	#	help			You're looking at it!
Index: /MediaWiki/branches/1.11/tests/README
===================================================================
--- /MediaWiki/branches/1.11/tests/README	(revision 1280)
+++ /MediaWiki/branches/1.11/tests/README	(revision 1280)
@@ -0,0 +1,8 @@
+Some quickie unit tests done with the PHPUnit testing framework. To run the
+test suite, run 'make test' in this dir or 'php RunTests.php'
+
+You can install PHPUnit via pear like this:
+# pear install PHPUnit
+
+Or fetch and install it manually:
+http://pear.php.net/package/PHPUnit
Index: /MediaWiki/branches/1.11/tests/RunTests.php
===================================================================
--- /MediaWiki/branches/1.11/tests/RunTests.php	(revision 1280)
+++ /MediaWiki/branches/1.11/tests/RunTests.php	(revision 1280)
@@ -0,0 +1,100 @@
+<?php
+
+if( php_sapi_name() != 'cli' ) {
+	echo 'Must be run from the command line.';
+	die( -1 );
+}
+
+error_reporting( E_ALL );
+define( "MEDIAWIKI", true );
+
+set_include_path( get_include_path() . PATH_SEPARATOR . 'PHPUnit' );
+set_include_path( get_include_path() . PATH_SEPARATOR . '..' );
+require_once( 'PHPUnit.php' );
+
+$testOptions = array(
+	'mysql4' => array(
+		'server' => null,
+		'user' => null,
+		'password' => null,
+		'database' => null ),
+	'postgres' => array(
+		'server' => null,
+		'user' => null,
+		'password' => null,
+		'database' => null ),
+	);
+
+if( file_exists( 'LocalTestSettings.php' ) ) {
+	include( './LocalTestSettings.php' );
+}
+
+$tests = array(
+	'GlobalTest',
+	'DatabaseTest',
+	'SearchMySQL4Test',
+	'ArticleTest',
+	'SanitizerTest',
+	'ImageTest'
+	);
+
+if( isset( $_SERVER['argv'][1] ) ) {
+	// to override...
+	$tests = array( $_SERVER['argv'][1] );
+}
+
+foreach( $tests as $test ) {
+	require_once( $test . '.php' );
+	$suite = new PHPUnit_TestSuite( $test );
+	$result = PHPUnit::run( $suite );
+	echo $result->toString();
+}
+
+/**
+ * @param string $serverType
+ * @param array $tables
+ */
+function &buildTestDatabase( $serverType, $tables ) {
+	global $testOptions, $wgDBprefix;
+	$wgDBprefix = 'parsertest';
+	$db = new Database(
+		$testOptions[$serverType]['server'],
+		$testOptions[$serverType]['user'],
+		$testOptions[$serverType]['password'],
+		$testOptions[$serverType]['database'] );
+	if( $db->isOpen() ) {
+		if (!(strcmp($db->getServerVersion(), '4.1') < 0 and stristr($db->getSoftwareLink(), 'MySQL'))) {
+			# Database that supports CREATE TABLE ... LIKE
+			foreach ($tables as $tbl) {
+				$newTableName = $db->tableName( $tbl );
+				#$tableName = $this->oldTableNames[$tbl];
+				$tableName = $tbl;
+				$db->query("CREATE TEMPORARY TABLE $newTableName (LIKE $tableName INCLUDING DEFAULTS)");
+			}
+		} else {
+			# Hack for MySQL versions < 4.1, which don't support
+			# "CREATE TABLE ... LIKE". Note that
+			# "CREATE TEMPORARY TABLE ... SELECT * FROM ... LIMIT 0"
+			# would not create the indexes we need....
+			foreach ($tables as $tbl) {
+				$res = $db->query("SHOW CREATE TABLE $tbl");
+				$row = $db->fetchRow($res);
+				$create = $row[1];
+				$create_tmp = preg_replace('/CREATE TABLE `(.*?)`/', 'CREATE TEMPORARY TABLE `'
+					. $wgDBprefix . '\\1`', $create);
+				if ($create === $create_tmp) {
+					# Couldn't do replacement
+					wfDie( "could not create temporary table $tbl" );
+				}
+				$db->query($create_tmp);
+			}
+
+		}
+		return $db;
+	} else {
+		// Something amiss
+		return null;
+	}
+}
+
+?>
Index: /MediaWiki/branches/1.11/tests/SanitizerTest.php
===================================================================
--- /MediaWiki/branches/1.11/tests/SanitizerTest.php	(revision 1280)
+++ /MediaWiki/branches/1.11/tests/SanitizerTest.php	(revision 1280)
@@ -0,0 +1,65 @@
+<?php
+
+require_once( 'PHPUnit.php' );
+require_once( '../includes/Defines.php' );
+require_once( '../includes/Profiling.php' );
+require_once( '../includes/GlobalFunctions.php' );
+require_once( '../includes/Sanitizer.php' );
+
+class SanitizerTest extends PHPUnit_TestCase {
+	function SanitizerTest( $name ) {
+		$this->PHPUnit_TestCase( $name );
+	}
+
+	function setUp() {
+	}
+
+	function tearDown() {
+	}
+
+	function testDecodeNamed() {
+		$this->assertEquals(
+			"\xc3\xa9cole",
+			Sanitizer::decodeCharReferences( '&eacute;cole' ) );
+	}
+
+	function testDecodeNumbered() {
+		$this->assertEquals(
+			"\xc4\x88io bonas dans l'\xc3\xa9cole!",
+			Sanitizer::decodeCharReferences( "&#x108;io bonas dans l'&#233;cole!" ) );
+	}
+
+	function testDecodeMixed() {
+		$this->assertEquals(
+			"\xc4\x88io bonas dans l'\xc3\xa9cole!",
+			Sanitizer::decodeCharReferences( "&#x108;io bonas dans l'&eacute;cole!" ) );
+	}
+
+	function testDecodeMixedComplex() {
+		$this->assertEquals(
+			"\xc4\x88io bonas dans l'\xc3\xa9cole! (mais pas &#x108;io dans l'&eacute;cole)",
+			Sanitizer::decodeCharReferences( "&#x108;io bonas dans l'&eacute;cole! (mais pas &amp;#x108;io dans l'&#38;eacute;cole)" ) );
+	}
+
+	function testDecodeInvalidAmp() {
+		$this->assertEquals(
+			"a & b",
+			Sanitizer::decodeCharReferences( "a & b" ) );
+	}
+
+	function testDecodeInvalidNamed() {
+		$this->assertEquals(
+			"&foo;",
+			Sanitizer::decodeCharReferences( "&foo;" ) );
+	}
+
+	function testDecodeInvalidNumbered() {
+		$this->assertEquals(
+			UTF8_REPLACEMENT,
+			Sanitizer::decodeCharReferences( "&#88888888888888;" ) );
+	}
+
+	/* TODO: many more! */
+}
+
+?>
Index: /MediaWiki/branches/1.11/tests/SearchEngineTest.php
===================================================================
--- /MediaWiki/branches/1.11/tests/SearchEngineTest.php	(revision 1280)
+++ /MediaWiki/branches/1.11/tests/SearchEngineTest.php	(revision 1280)
@@ -0,0 +1,135 @@
+<?php
+
+$IP = '..';
+require_once( 'PHPUnit.php' );
+require_once( '../includes/Defines.php' );
+require_once( '../includes/DefaultSettings.php' );
+require_once( '../includes/Profiling.php' );
+require_once( '../includes/Hooks.php' );
+require_once( '../includes/MagicWord.php' );
+require_once( '../languages/Language.php' );
+
+require_once( '../includes/SearchEngine.php' );
+
+/** @todo document */
+class SearchEngine_TestCase extends PHPUnit_TestCase {
+	var $db, $search;
+
+	function insertSearchData() {
+		$this->db->safeQuery( <<<END
+		INSERT INTO ! (page_id,page_namespace,page_title,page_latest)
+		VALUES (1, 0, 'Main_Page', 1),
+			   (2, 1, 'Main_Page', 2),
+			   (3, 0, 'Smithee', 3),
+			   (4, 1, 'Smithee', 4),
+			   (5, 0, 'Unrelated_page', 5),
+			   (6, 0, 'Another_page', 6),
+			   (7, 4, 'Help', 7),
+			   (8, 0, 'Thppt', 8),
+			   (9, 0, 'Alan_Smithee', 9),
+			   (10, 0, 'Pages', 10)
+END
+			, $this->db->tableName( 'page' ) );
+		$this->db->safeQuery( <<<END
+		INSERT INTO ! (rev_id,rev_page)
+		VALUES (1, 1),
+		       (2, 2),
+		       (3, 3),
+		       (4, 4),
+		       (5, 5),
+		       (6, 6),
+		       (7, 7),
+		       (8, 8),
+		       (9, 9),
+		       (10, 10)
+END
+			, $this->db->tableName( 'revision' ) );
+		$this->db->safeQuery( <<<END
+		INSERT INTO ! (old_id,old_text)
+		VALUES (1, 'This is a main page'),
+			   (2, 'This is a talk page to the main page, see [[smithee]]'),
+			   (3, 'A smithee is one who smiths. See also [[Alan Smithee]]'),
+			   (4, 'This article sucks.'),
+			   (5, 'Nothing in this page is about the S word.'),
+			   (6, 'This page also is unrelated.'),
+			   (7, 'Help me!'),
+			   (8, 'Blah blah'),
+			   (9, 'yum'),
+			   (10,'are food')
+END
+			, $this->db->tableName( 'text' ) );
+		$this->db->safeQuery( <<<END
+		INSERT INTO ! (si_page,si_title,si_text)
+		VALUES (1, 'main page', 'this is a main page'),
+			   (2, 'main page', 'this is a talk page to the main page, see smithee'),
+			   (3, 'smithee', 'a smithee is one who smiths see also alan smithee'),
+			   (4, 'smithee', 'this article sucks'),
+			   (5, 'unrelated page', 'nothing in this page is about the s word'),
+			   (6, 'another page', 'this page also is unrelated'),
+			   (7, 'help', 'help me'),
+			   (8, 'thppt', 'blah blah'),
+			   (9, 'alan smithee', 'yum'),
+			   (10, 'pages', 'are food')
+END
+			, $this->db->tableName( 'searchindex' ) );
+	}
+
+	function fetchIds( &$results ) {
+		$matches = array();
+		while( $row = $results->fetchObject() ) {
+			$matches[] = intval( $row->page_id );
+		}
+		$results->free();
+		# Search is not guaranteed to return results in a certain order;
+		# sort them numerically so we will compare simply that we received
+		# the expected matches.
+		sort( $matches );
+		return $matches;
+	}
+
+	function testTextSearch() {
+		$this->assertFalse( is_null( $this->db ), "Can't find a database to test with." );
+		if( !is_null( $this->db ) ) {
+			$this->assertEquals(
+				array( 3 ),
+				$this->fetchIds( $this->search->searchText( 'smithee' ) ),
+				"Plain search failed" );
+		}
+	}
+
+	function testTextPowerSearch() {
+		$this->assertFalse( is_null( $this->db ), "Can't find a database to test with." );
+		if( !is_null( $this->db ) ) {
+			$this->search->setNamespaces( array( 0, 1, 4 ) );
+			$this->assertEquals(
+				array( 2, 3 ),
+				$this->fetchIds( $this->search->searchText( 'smithee' ) ),
+				"Power search failed" );
+		}
+	}
+
+	function testTitleSearch() {
+		$this->assertFalse( is_null( $this->db ), "Can't find a database to test with." );
+		if( !is_null( $this->db ) ) {
+			$this->assertEquals(
+				array( 3, 9 ),
+				$this->fetchIds( $this->search->searchTitle( 'smithee' ) ),
+				"Title search failed" );
+		}
+	}
+
+	function testTextTitlePowerSearch() {
+		$this->assertFalse( is_null( $this->db ), "Can't find a database to test with." );
+		if( !is_null( $this->db ) ) {
+			$this->search->setNamespaces( array( 0, 1, 4 ) );
+			$this->assertEquals(
+				array( 3, 4, 9 ),
+				$this->fetchIds( $this->search->searchTitle( 'smithee' ) ),
+				"Title power search failed" );
+		}
+	}
+
+}
+
+
+?>
Index: /MediaWiki/branches/1.11/tests/SearchMySQL4Test.php
===================================================================
--- /MediaWiki/branches/1.11/tests/SearchMySQL4Test.php	(revision 1280)
+++ /MediaWiki/branches/1.11/tests/SearchMySQL4Test.php	(revision 1280)
@@ -0,0 +1,34 @@
+<?php
+
+require_once( 'SearchEngineTest.php' );
+require_once( '../includes/SearchMySQL4.php' );
+
+class SearchMySQL4Test extends SearchEngine_TestCase {
+	var $db;
+
+	function SearchMySQL4Test( $name ) {
+		$this->PHPUnit_TestCase( $name );
+	}
+
+	function setUp() {
+		$GLOBALS['wgContLang'] = new Language;
+		$this->db =& buildTestDatabase(
+			'mysql4',
+			array( 'page', 'revision', 'text', 'searchindex' ) );
+		if( $this->db ) {
+			$this->insertSearchData();
+		}
+		$this->search = new SearchMySQL4( $this->db );
+	}
+
+	function tearDown() {
+		if( !is_null( $this->db ) ) {
+			$this->db->close();
+		}
+		unset( $this->db );
+		unset( $this->search );
+	}
+
+}
+
+?>
Index: /MediaWiki/branches/1.11/tests/test-prefetch-current.xml
===================================================================
--- /MediaWiki/branches/1.11/tests/test-prefetch-current.xml	(revision 1280)
+++ /MediaWiki/branches/1.11/tests/test-prefetch-current.xml	(revision 1280)
@@ -0,0 +1,75 @@
+<mediawiki xmlns="http://www.mediawiki.org/xml/export-0.3/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mediawiki.org/xml/export-0.3/ http://www.mediawiki.org/xml/export-0.3.xsd" version="0.3" xml:lang="en">
+<siteinfo>
+  <sitename>DemoWiki</sitename>
+  <base>http://example.com/wiki/Main_Page</base>
+  <generator>MediaWiki 1.5.0</generator>
+  <case>first-letter</case>
+  <namespaces>
+    <namespace key="-2">Media</namespace>
+    <namespace key="-1">Special</namespace>
+    <namespace key="0"></namespace>
+    <namespace key="1">Talk</namespace>
+    <namespace key="2">User</namespace>
+    <namespace key="3">User talk</namespace>
+    <namespace key="4">DemoWiki</namespace>
+    <namespace key="5">DemoWIki talk</namespace>
+    <namespace key="6">Image</namespace>
+    <namespace key="7">Image talk</namespace>
+    <namespace key="8">MediaWiki</namespace>
+    <namespace key="9">MediaWiki talk</namespace>
+    <namespace key="10">Template</namespace>
+    <namespace key="11">Template talk</namespace>
+    <namespace key="12">Help</namespace>
+    <namespace key="13">Help talk</namespace>
+    <namespace key="14">Category</namespace>
+    <namespace key="15">Category talk</namespace>
+  </namespaces>
+</siteinfo>
+<page>
+  <title>First page</title>
+  <id>1</id>
+  <revision>
+    <id>1</id>
+    <timestamp>2001-01-15T12:00:00Z</timestamp>
+    <contributor><ip>10.0.0.1</ip></contributor>
+    <comment>page 1, rev 1</comment>
+    <text>page 1, rev 1</text>
+  </revision>
+  <revision>
+    <id>2</id>
+    <timestamp>2001-01-15T12:00:00Z</timestamp>
+    <contributor><ip>10.0.0.1</ip></contributor>
+    <comment>page 1, rev 2</comment>
+    <text>page 1, rev 2</text>
+  </revision>
+  <revision>
+    <id>4</id>
+    <timestamp>2001-01-15T12:00:00Z</timestamp>
+    <contributor><ip>10.0.0.1</ip></contributor>
+    <comment>page 1, rev 4</comment>
+    <text>page 1, rev 4</text>
+  </revision>
+</page>
+<page>
+  <title>Second page</title>
+  <id>2</id>
+  <revision>
+    <id>3</id>
+    <timestamp>2001-01-15T12:00:00Z</timestamp>
+    <contributor><ip>10.0.0.1</ip></contributor>
+    <comment>page 2, rev 3</comment>
+    <text>page 2, rev 3</text>
+  </revision>
+</page>
+<page>
+  <title>Third page</title>
+  <id>3</id>
+  <revision>
+    <id>5</id>
+    <timestamp>2001-01-15T12:00:00Z</timestamp>
+    <contributor><ip>10.0.0.1</ip></contributor>
+    <comment>page 3, rev 5</comment>
+    <text>page 3, rev 5</text>
+  </revision>
+</page>
+</mediawiki>
Index: /MediaWiki/branches/1.11/tests/test-prefetch-previous.xml
===================================================================
--- /MediaWiki/branches/1.11/tests/test-prefetch-previous.xml	(revision 1280)
+++ /MediaWiki/branches/1.11/tests/test-prefetch-previous.xml	(revision 1280)
@@ -0,0 +1,57 @@
+<mediawiki xmlns="http://www.mediawiki.org/xml/export-0.3/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mediawiki.org/xml/export-0.3/ http://www.mediawiki.org/xml/export-0.3.xsd" version="0.3" xml:lang="en">
+<siteinfo>
+  <sitename>DemoWiki</sitename>
+  <base>http://example.com/wiki/Main_Page</base>
+  <generator>MediaWiki 1.5.0</generator>
+  <case>first-letter</case>
+  <namespaces>
+    <namespace key="-2">Media</namespace>
+    <namespace key="-1">Special</namespace>
+    <namespace key="0"></namespace>
+    <namespace key="1">Talk</namespace>
+    <namespace key="2">User</namespace>
+    <namespace key="3">User talk</namespace>
+    <namespace key="4">DemoWiki</namespace>
+    <namespace key="5">DemoWIki talk</namespace>
+    <namespace key="6">Image</namespace>
+    <namespace key="7">Image talk</namespace>
+    <namespace key="8">MediaWiki</namespace>
+    <namespace key="9">MediaWiki talk</namespace>
+    <namespace key="10">Template</namespace>
+    <namespace key="11">Template talk</namespace>
+    <namespace key="12">Help</namespace>
+    <namespace key="13">Help talk</namespace>
+    <namespace key="14">Category</namespace>
+    <namespace key="15">Category talk</namespace>
+  </namespaces>
+</siteinfo>
+<page>
+  <title>First page</title>
+  <id>1</id>
+  <revision>
+    <id>1</id>
+    <timestamp>2001-01-15T12:00:00Z</timestamp>
+    <contributor><ip>10.0.0.1</ip></contributor>
+    <comment>page 1, rev 1</comment>
+    <text>page 1, rev 1</text>
+  </revision>
+  <revision>
+    <id>2</id>
+    <timestamp>2001-01-15T12:00:00Z</timestamp>
+    <contributor><ip>10.0.0.1</ip></contributor>
+    <comment>page 1, rev 2</comment>
+    <text>page 1, rev 2</text>
+  </revision>
+</page>
+<page>
+  <title>Second page</title>
+  <id>2</id>
+  <revision>
+    <id>3</id>
+    <timestamp>2001-01-15T12:00:00Z</timestamp>
+    <contributor><ip>10.0.0.1</ip></contributor>
+    <comment>page 2, rev 3</comment>
+    <text>page 2, rev 3</text>
+  </revision>
+</page>
+</mediawiki>
Index: /MediaWiki/branches/1.11/tests/test-prefetch-stub.xml
===================================================================
--- /MediaWiki/branches/1.11/tests/test-prefetch-stub.xml	(revision 1280)
+++ /MediaWiki/branches/1.11/tests/test-prefetch-stub.xml	(revision 1280)
@@ -0,0 +1,75 @@
+<mediawiki xmlns="http://www.mediawiki.org/xml/export-0.3/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mediawiki.org/xml/export-0.3/ http://www.mediawiki.org/xml/export-0.3.xsd" version="0.3" xml:lang="en">
+<siteinfo>
+  <sitename>DemoWiki</sitename>
+  <base>http://example.com/wiki/Main_Page</base>
+  <generator>MediaWiki 1.5.0</generator>
+  <case>first-letter</case>
+  <namespaces>
+    <namespace key="-2">Media</namespace>
+    <namespace key="-1">Special</namespace>
+    <namespace key="0"></namespace>
+    <namespace key="1">Talk</namespace>
+    <namespace key="2">User</namespace>
+    <namespace key="3">User talk</namespace>
+    <namespace key="4">DemoWiki</namespace>
+    <namespace key="5">DemoWIki talk</namespace>
+    <namespace key="6">Image</namespace>
+    <namespace key="7">Image talk</namespace>
+    <namespace key="8">MediaWiki</namespace>
+    <namespace key="9">MediaWiki talk</namespace>
+    <namespace key="10">Template</namespace>
+    <namespace key="11">Template talk</namespace>
+    <namespace key="12">Help</namespace>
+    <namespace key="13">Help talk</namespace>
+    <namespace key="14">Category</namespace>
+    <namespace key="15">Category talk</namespace>
+  </namespaces>
+</siteinfo>
+<page>
+  <title>First page</title>
+  <id>1</id>
+  <revision>
+    <id>1</id>
+    <timestamp>2001-01-15T12:00:00Z</timestamp>
+    <contributor><ip>10.0.0.1</ip></contributor>
+    <comment>page 1, rev 1</comment>
+    <text id="1" />
+  </revision>
+  <revision>
+    <id>2</id>
+    <timestamp>2001-01-15T12:00:00Z</timestamp>
+    <contributor><ip>10.0.0.1</ip></contributor>
+    <comment>page 1, rev 2</comment>
+    <text id="2" />
+  </revision>
+  <revision>
+    <id>4</id>
+    <timestamp>2001-01-15T12:00:00Z</timestamp>
+    <contributor><ip>10.0.0.1</ip></contributor>
+    <comment>page 1, rev 4</comment>
+    <text id="4" />
+  </revision>
+</page>
+<page>
+  <title>Second page</title>
+  <id>2</id>
+  <revision>
+    <id>3</id>
+    <timestamp>2001-01-15T12:00:00Z</timestamp>
+    <contributor><ip>10.0.0.1</ip></contributor>
+    <comment>page 2, rev 3</comment>
+    <text id="3" />
+  </revision>
+</page>
+<page>
+  <title>Third page</title>
+  <id>3</id>
+  <revision>
+    <id>5</id>
+    <timestamp>2001-01-15T12:00:00Z</timestamp>
+    <contributor><ip>10.0.0.1</ip></contributor>
+    <comment>page 3, rev 5</comment>
+    <text id="5" />
+  </revision>
+</page>
+</mediawiki>
Index: /MediaWiki/branches/1.11/thumb.php
===================================================================
--- /MediaWiki/branches/1.11/thumb.php	(revision 1280)
+++ /MediaWiki/branches/1.11/thumb.php	(revision 1280)
@@ -0,0 +1,132 @@
+<?php
+
+/**
+ * PHP script to stream out an image thumbnail.
+ * If the file exists, we make do with abridged MediaWiki initialisation.
+ */
+define( 'MW_NO_SETUP', 1 );
+define( 'MW_NO_OUTPUT_COMPRESSION', 1 );
+require_once( './includes/WebStart.php' );
+wfProfileIn( 'thumb.php' );
+wfProfileIn( 'thumb.php-start' );
+require_once( "$IP/includes/GlobalFunctions.php" );
+require_once( "$IP/includes/ImageFunctions.php" );
+
+$wgTrivialMimeDetection = true; //don't use fancy mime detection, just check the file extension for jpg/gif/png.
+
+require_once( "$IP/includes/StreamFile.php" );
+require_once( "$IP/includes/AutoLoader.php" );
+
+// Get input parameters
+if ( get_magic_quotes_gpc() ) {
+	$params = array_map( 'stripslashes', $_REQUEST );
+} else {
+	$params = $_REQUEST;
+}
+
+$fileName = isset( $params['f'] ) ? $params['f'] : '';
+unset( $params['f'] );
+
+// Backwards compatibility parameters
+if ( isset( $params['w'] ) ) {
+	$params['width'] = $params['w'];
+	unset( $params['w'] );
+}
+if ( isset( $params['p'] ) ) {
+	$params['page'] = $params['p'];
+}
+unset( $params['r'] );
+
+// Some basic input validation
+$fileName = strtr( $fileName, '\\/', '__' );
+
+// Work out paths, carefully avoiding constructing an Image object because that won't work yet
+$handler = thumbGetHandler( $fileName );
+if ( $handler ) {
+	$imagePath = wfImageDir( $fileName ) . '/' . $fileName;
+	$thumbName = $handler->makeParamString( $params ) . "-$fileName";
+	$thumbPath = wfImageThumbDir( $fileName ) . '/' . $thumbName;
+
+	if ( is_file( $thumbPath ) && filemtime( $thumbPath ) >= filemtime( $imagePath ) ) {
+		wfStreamFile( $thumbPath );
+		// Can't log profiling data with no Setup.php
+		exit;
+	}
+}
+
+// OK, no valid thumbnail, time to get out the heavy machinery
+wfProfileOut( 'thumb.php-start' );
+require_once( './includes/Setup.php' );
+wfProfileIn( 'thumb.php-render' );
+
+$img = Image::newFromName( $fileName );
+try {
+	if ( $img ) {
+		$thumb = $img->transform( $params, Image::RENDER_NOW );
+	} else {
+		$thumb = false;
+	}
+} catch( Exception $ex ) {
+	// Tried to select a page on a non-paged file?
+	$thumb = false;
+}
+
+if ( $thumb && $thumb->getPath() && file_exists( $thumb->getPath() ) ) {
+	wfStreamFile( $thumb->getPath() );
+} elseif ( $img ) {
+	header( 'Cache-Control: no-cache' );
+	header( 'Content-Type: text/html; charset=utf-8' );
+	header( 'HTTP/1.1 500 Internal server error' );
+	if ( !$thumb ) {
+		$msg = wfMsgHtml( 'thumbnail_error', 'Image::transform() returned false' );
+	} elseif ( $thumb->isError() ) {
+		$msg = $thumb->getHtmlMsg();
+	} elseif ( !$thumb->getPath() ) {
+		$msg = wfMsgHtml( 'thumbnail_error', 'No path supplied in thumbnail object' );
+	} else {
+		$msg = wfMsgHtml( 'thumbnail_error', 'Output file missing' );
+	}
+	echo <<<EOT
+<html><head><title>Error generating thumbnail</title></head>
+<body>
+<h1>Error generating thumbnail</h1>
+<p>
+$msg
+</p>
+</body>
+</html>
+
+EOT;
+} else {
+	$badtitle = wfMsg( 'badtitle' );
+	$badtitletext = wfMsg( 'badtitletext' );
+	header( 'Cache-Control: no-cache' );
+	header( 'Content-Type: text/html; charset=utf-8' );
+	header( 'HTTP/1.1 500 Internal server error' );
+	echo "<html><head>
+	<title>$badtitle</title>
+	<body>
+<h1>$badtitle</h1>
+<p>$badtitletext</p>
+</body></html>
+";
+}
+
+wfProfileOut( 'thumb.php-render' );
+wfProfileOut( 'thumb.php' );
+wfLogProfilingData();
+
+//--------------------------------------------------------------------------
+
+function thumbGetHandler( $fileName ) {
+	// Determine type
+	$magic = MimeMagic::singleton();
+	$extPos = strrpos( $fileName, '.' );
+	if ( $extPos === false ) {
+		return false;
+	}
+	$mime = $magic->guessTypesForExtension( substr( $fileName, $extPos + 1 ) );
+	return MediaHandler::getHandler( $mime );
+}
+
+?>
Index: /MediaWiki/branches/1.11/trackback.php
===================================================================
--- /MediaWiki/branches/1.11/trackback.php	(revision 1280)
+++ /MediaWiki/branches/1.11/trackback.php	(revision 1280)
@@ -0,0 +1,66 @@
+<?php
+/**
+ * Provide functions to handle article trackbacks.
+ * @addtogroup SpecialPage
+ */
+require_once( './includes/WebStart.php' );
+require_once( './includes/DatabaseFunctions.php' );
+
+/**
+ *
+ */
+function XMLsuccess() {
+	header("Content-Type: application/xml; charset=utf-8");
+	echo "
+<?xml version=\"1.0\" encoding=\"utf-8\"?>
+<response>
+<error>0</error>
+</response>
+	";
+	exit;
+}
+
+function XMLerror($err = "Invalid request.") {
+	header("HTTP/1.0 400 Bad Request");
+	header("Content-Type: application/xml; charset=utf-8");
+	echo "
+<?xml version=\"1.0\" encoding=\"utf-8\"?>
+<response>
+<error>1</error>
+<message>Invalid request: $err</message>
+</response>
+";
+		exit;
+}
+
+if (!$wgUseTrackbacks)
+	XMLerror("Trackbacks are disabled.");
+
+if (   !isset($_POST['url'])
+    || !isset($_POST['blog_name'])
+    || !isset($_REQUEST['article']))
+	XMLerror("Required field not specified");
+
+$dbw = wfGetDB(DB_MASTER);
+
+$tbtitle = $_POST['title'];
+$tbex = $_POST['excerpt'];
+$tburl = $_POST['url'];
+$tbname = $_POST['blog_name'];
+$tbarticle = $_REQUEST['article'];
+
+$title = Title::newFromText($tbarticle);
+if (!isset($title) || !$title->exists())
+	XMLerror("Specified article does not exist.");
+
+$dbw->insert('trackbacks', array(
+	'tb_page'	=> $title->getArticleID(),
+	'tb_title'	=> $tbtitle,
+	'tb_url'	=> $tburl,
+	'tb_ex'		=> $tbex,
+	'tb_name'	=> $tbname
+));
+
+XMLsuccess();
+exit;
+?>
Index: /MediaWiki/branches/1.11/wiki.phtml
===================================================================
--- /MediaWiki/branches/1.11/wiki.phtml	(revision 1280)
+++ /MediaWiki/branches/1.11/wiki.phtml	(revision 1280)
@@ -0,0 +1,4 @@
+<?php
+// stub file for compatibility with older versions
+include_once('./index.php');
+?>
